From c6ac4ea3d8b91cd9e12b86b47c72d7de718da0ba Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 5 Dec 2024 14:12:52 +0530 Subject: [PATCH] Float code and float files cleanup, LTV crash fixes --- Workspace_msvc/lib_com.vcxproj | 34 +- Workspace_msvc/lib_com.vcxproj.filters | 46 +- apps/decoder.c | 33 - apps/encoder.c | 9 +- apps/renderer.c | 191 - lib_com/ACcontextMapping.c | 65 - lib_com/ACcontextMapping_fx.c | 2 - lib_com/ari.c | 27 - lib_com/ari_hm.c | 251 - lib_com/arith_coder.c | 374 - lib_com/basop_settings.h | 25 - lib_com/bitalloc.c | 492 +- lib_com/bitallocsum.c | 54 - lib_com/bits_alloc.c | 1444 - lib_com/bits_alloc_fx.c | 65 - lib_com/bitstream.c | 1272 +- lib_com/calc_st_com.c | 265 - lib_com/cb_shape.c | 83 - lib_com/cldfb.c | 2075 +- lib_com/cng_exc.c | 565 - lib_com/cng_exc_fx.c | 2 - lib_com/cnst.h | 18 - lib_com/codec_tcx_common_flt.c | 292 - lib_com/common_api_types.h | 38 +- lib_com/core_com_config.c | 464 +- lib_com/deemph.c | 32 - lib_com/delay_comp.c | 65 - lib_com/dlpc_bfi.c | 37 - lib_com/edct.c | 374 - lib_com/edct_fx.c | 2 - lib_com/enhancer.c | 281 - lib_com/enr_1_az.c | 25 - lib_com/env_adj.c | 118 - lib_com/env_stab.c | 169 - lib_com/env_stab_trans.c | 107 - lib_com/fd_cng_com.c | 1452 - lib_com/fd_cng_com_fx.c | 263 +- lib_com/fill_spectrum.c | 229 - lib_com/findpulse.c | 95 - lib_com/fine_gain_bits.c | 2 + lib_com/fine_gain_bits_fx.c | 4 - lib_com/float_to_fix_ops.c | 2 - lib_com/frame_ener.c | 46 +- lib_com/frame_ener_fx.c | 403 + lib_com/get_gain.c | 4 +- lib_com/get_gain_fx.c | 181 + lib_com/gs_bitallocation.c | 5 +- lib_com/gs_bitallocation_ivas_fx.c | 40 +- lib_com/gs_gains.c | 15 +- lib_com/gs_gains_fx.c | 4 - lib_com/gs_inact_switching.c | 102 - lib_com/gs_inact_switching_fx.c | 2 - lib_com/gs_noisefill.c | 2 + lib_com/gs_noisefill_fx.c | 2 - lib_com/gs_preech.c | 21 +- lib_com/gs_preech_fx.c | 401 + lib_com/guided_plc_util.c | 283 - lib_com/guided_plc_util_fx.c | 2 - lib_com/hp50.c | 8 +- lib_com/hp50_fx.c | 800 + lib_com/hq2_bit_alloc.c | 761 - lib_com/hq2_core_com.c | 430 - lib_com/hq2_core_com_fx.c | 2 - lib_com/hq2_noise_inject.c | 236 - lib_com/hq_bit_allocation.c | 180 - lib_com/hq_conf.c | 214 - lib_com/hq_conf_fx.c | 4 - lib_com/hq_tools.c | 1790 - lib_com/hq_tools_fx.c | 10 +- lib_com/hvq_pvq_bitalloc.c | 147 - lib_com/igf_base.c | 700 - lib_com/igf_base_fx.c | 4 - lib_com/index_pvq_opt.c | 1203 - lib_com/int_lsp.c | 137 - lib_com/interleave_spectrum.c | 168 - lib_com/interpol.c | 38 - lib_com/isf_dec_amr_wb.c | 240 - lib_com/ivas_agc_com.c | 73 - lib_com/ivas_agc_com_fx.c | 2 - lib_com/ivas_arith.c | 240 - lib_com/ivas_avq_pos_reorder_com.c | 24 - lib_com/ivas_cnst.h | 58 - lib_com/ivas_cov_smooth.c | 323 - lib_com/ivas_dirac_com.c | 944 +- lib_com/ivas_entropy_coder_common.c | 373 - lib_com/ivas_fb_mixer.c | 337 +- lib_com/ivas_filters.c | 110 - lib_com/ivas_ism_com.c | 592 +- lib_com/ivas_lfe_com.c | 91 - lib_com/ivas_masa_com.c | 866 - lib_com/ivas_mc_com.c | 175 - lib_com/ivas_mc_param_com.c | 369 +- lib_com/ivas_mcmasa_com.c | 80 - lib_com/ivas_mct_com.c | 146 +- lib_com/ivas_mdct_core_com.c | 41 - lib_com/ivas_mdct_imdct.c | 341 - lib_com/ivas_mdft_imdft.c | 269 - lib_com/ivas_omasa_com.c | 493 +- lib_com/ivas_pca_tools.c | 1150 +- lib_com/ivas_prot.h | 1833 +- lib_com/ivas_prot_fx.h | 26 +- lib_com/ivas_qmetadata_com.c | 544 +- lib_com/ivas_qspherical_com.c | 392 +- lib_com/ivas_rom_com.c | 3873 +- lib_com/ivas_rom_com.h | 178 - lib_com/ivas_rom_com_fx.c | 6 - lib_com/ivas_rom_com_fx.h | 3 - lib_com/ivas_sba_config.c | 246 - lib_com/ivas_sns_com.c | 3 +- lib_com/ivas_spar_com.c | 570 +- lib_com/ivas_spar_com_quant_util.c | 250 - lib_com/ivas_stat_com.h | 154 +- lib_com/ivas_stereo_dft_com.c | 169 - lib_com/ivas_stereo_eclvq_com.c | 99 - lib_com/ivas_stereo_eclvq_com_fx.c | 2 - lib_com/ivas_stereo_ica_com.c | 223 - lib_com/ivas_stereo_ica_com_fx.c | 8 - lib_com/ivas_stereo_mdct_bands_com.c | 184 - lib_com/ivas_stereo_mdct_stereo_com.c | 25 - lib_com/ivas_stereo_psychlpc_com.c | 107 - lib_com/ivas_stereo_td_bit_alloc.c | 669 - lib_com/ivas_tools.c | 98 - lib_com/ivas_transient_det.c | 289 +- lib_com/lag_wind.c | 118 - lib_com/logqnorm.c | 197 - lib_com/logqnorm_fx.c | 4 - lib_com/longarith.c | 4 - lib_com/low_rate_band_att.c | 194 - lib_com/low_rate_band_att_fx.c | 4 - lib_com/lpc_tools.c | 415 - lib_com/lpc_tools_fx.c | 83 +- lib_com/lsf_dec_bfi.c | 298 - lib_com/lsf_msvq_ma.c | 177 - lib_com/lsf_tools.c | 3048 -- lib_com/lsf_tools_fx.c | 419 +- lib_com/lsp_conv_poly.c | 661 - lib_com/lsp_conv_poly_fx.c | 2 - lib_com/modif_fs.c | 874 - lib_com/mslvq_com.c | 742 +- lib_com/nelp.c | 156 - lib_com/options.h | 3 - lib_com/parameter_bitmaping.c | 554 - lib_com/parameter_bitmaping_fx.c | 385 + lib_com/phase_dispersion.c | 155 - lib_com/ppp.c | 113 - lib_com/pred_lt4.c | 156 - lib_com/preemph.c | 29 - lib_com/prot.h | 1918 +- lib_com/prot_fx.h | 132 +- lib_com/pvq_com.c | 974 - lib_com/pvq_com_fx.c | 2 - lib_com/range_com.c | 109 - lib_com/re8_ppv.c | 211 - lib_com/re8_util.c | 436 - lib_com/realft.c | 198 - lib_com/recovernorm.c | 83 - lib_com/reordvct.c | 78 - lib_com/residu.c | 35 - lib_com/residu_fx.c | 36 + lib_com/rom_basop_util.c | 2 +- lib_com/rom_com.c | 13983 +---- lib_com/rom_com.h | 854 +- lib_com/stab_est.c | 190 - lib_com/stat_com.h | 222 +- lib_com/stat_noise_uv_mod.c | 199 - lib_com/swb_bwe_com.c | 1515 - lib_com/swb_bwe_com_fx.c | 2 - lib_com/swb_bwe_com_hr.c | 279 - lib_com/swb_bwe_com_lr.c | 2069 - lib_com/swb_tbe_com.c | 2331 +- lib_com/swb_tbe_com_fx.c | 12 - lib_com/syn_12k8.c | 30 - lib_com/syn_filt.c | 129 - lib_com/syn_filt_fx.c | 4 - lib_com/tcq_position_arith.c | 2250 - lib_com/tcx_ltp.c | 1010 - lib_com/tcx_mdct.c | 215 - lib_com/tcx_mdct_fx.c | 3 - lib_com/tcx_mdct_window.c | 217 - lib_com/tcx_utils.c | 963 - lib_com/tcx_utils_fx.c | 2 - lib_com/tec_com_flt.c | 890 - lib_com/tns_base.c | 134 +- lib_com/tns_base_flt.c | 851 - lib_com/tools.c | 90 - lib_com/tools_fx.c | 10 - lib_com/trans_direct.c | 135 - lib_com/trans_inv.c | 853 - lib_com/trans_inv_fx.c | 4 - lib_com/vlpc_2st_com.c | 49 - lib_com/weight.c | 327 - lib_com/weight_a.c | 68 - lib_com/wi.c | 2254 - lib_com/window.c | 33 - lib_com/window_ola.c | 563 - lib_com/wtda.c | 409 - lib_com/wtda_fx.c | 4 - lib_dec/ACcontextMapping_dec.c | 630 - lib_dec/ACcontextMapping_dec_fx.c | 4 - lib_dec/FEC.c | 530 - lib_dec/FEC_HQ_core.c | 1493 - lib_dec/FEC_HQ_core_fx.c | 14 - lib_dec/FEC_HQ_phase_ecu.c | 2191 - lib_dec/FEC_HQ_phase_ecu_fx.c | 111 - lib_dec/FEC_adapt_codebook.c | 444 - lib_dec/FEC_adapt_codebook_fx.c | 2 - lib_dec/FEC_clas_estim.c | 758 - lib_dec/FEC_clas_estim_fx.c | 4 - lib_dec/FEC_fx.c | 2 - lib_dec/FEC_lsf_estim.c | 42 - lib_dec/FEC_lsf_estim_fx.c | 2 - lib_dec/FEC_pitch_estim.c | 48 - lib_dec/FEC_pitch_estim_fx.c | 2 - lib_dec/FEC_scale_syn.c | 401 - lib_dec/FEC_scale_syn_fx.c | 2 - lib_dec/LD_music_post_filter.c | 721 - lib_dec/LD_music_post_filter_fx.c | 4 +- lib_dec/TonalComponentDetection.c | 800 - lib_dec/TonalComponentDetection_fx.c | 2 - lib_dec/acelp_core_dec.c | 1393 - lib_dec/acelp_core_dec_fx.c | 2 - lib_dec/acelp_core_dec_ivas_fx.c | 3 - lib_dec/acelp_core_switch_dec.c | 593 - lib_dec/acelp_core_switch_dec_fx.c | 4 - lib_dec/amr_wb_dec.c | 806 - lib_dec/amr_wb_dec_fx.c | 3 - lib_dec/ari_dec.c | 616 - lib_dec/ari_hm_dec.c | 118 - lib_dec/arith_coder_dec.c | 168 - lib_dec/arith_coder_dec_fx.c | 4 - lib_dec/avq_dec.c | 384 - lib_dec/avq_dec_fx.c | 8 - lib_dec/bass_psfilter.c | 552 - lib_dec/bass_psfilter_fx.c | 10 - lib_dec/cng_dec.c | 874 - lib_dec/cng_dec_fx.c | 2 - lib_dec/core_dec_init.c | 749 - lib_dec/core_dec_init_fx.c | 8 - lib_dec/core_dec_reconf.c | 153 - lib_dec/core_dec_reconf_fx.c | 4 - lib_dec/core_dec_switch.c | 178 - lib_dec/core_dec_switch_fx.c | 2 - lib_dec/core_switching_dec.c | 1544 +- lib_dec/core_switching_dec_fx.c | 20 - lib_dec/d_gain2p.c | 245 - lib_dec/d_gain2p_fx.c | 2 - lib_dec/dec2t32.c | 76 - lib_dec/dec2t32_fx.c | 2 - lib_dec/dec4t64.c | 972 - lib_dec/dec4t64_fx.c | 2 - lib_dec/dec_LPD.c | 736 - lib_dec/dec_LPD_fx.c | 2 - lib_dec/dec_ace.c | 501 - lib_dec/dec_ace_fx.c | 3 - lib_dec/dec_acelp.c | 322 - lib_dec/dec_acelp_fx.c | 3 - lib_dec/dec_acelp_tcx_main.c | 439 - lib_dec/dec_acelp_tcx_main_fx.c | 2 - lib_dec/dec_amr_wb.c | 123 - lib_dec/dec_amr_wb_fx.c | 2 - lib_dec/dec_gen_voic.c | 253 - lib_dec/dec_gen_voic_fx.c | 2 - lib_dec/dec_higher_acelp.c | 183 - lib_dec/dec_higher_acelp_fx.c | 4 - lib_dec/dec_nelp.c | 61 - lib_dec/dec_nelp_fx.c | 2 - lib_dec/dec_pit_exc.c | 294 - lib_dec/dec_pit_exc_fx.c | 2 - lib_dec/dec_post.c | 865 - lib_dec/dec_post_fx.c | 10 - lib_dec/dec_ppp.c | 68 - lib_dec/dec_ppp_fx.c | 2 - lib_dec/dec_prm.c | 1108 +- lib_dec/dec_prm_fx.c | 2 - lib_dec/dec_tcx.c | 1937 +- lib_dec/dec_tcx_fx.c | 8 - lib_dec/dec_tran.c | 151 - lib_dec/dec_tran_fx.c | 2 - lib_dec/dec_uv.c | 129 - lib_dec/dec_uv_fx.c | 2 - lib_dec/decision_matrix_dec.c | 520 - lib_dec/decision_matrix_dec_fx.c | 2 - lib_dec/dlpc_avq.c | 278 - lib_dec/dlpc_avq_fx.c | 2 - lib_dec/dlpc_stoch.c | 72 - lib_dec/dlpc_stoch_fx.c | 2 - lib_dec/er_dec_acelp.c | 682 - lib_dec/er_dec_acelp_fx.c | 2 - lib_dec/er_dec_tcx.c | 609 - lib_dec/er_dec_tcx_fx.c | 4 - lib_dec/er_scale_syn.c | 92 - lib_dec/er_scale_syn_fx.c | 2 - lib_dec/er_sync_exc.c | 294 - lib_dec/er_sync_exc_fx.c | 2 - lib_dec/er_util.c | 296 - lib_dec/er_util_fx.c | 4 - lib_dec/evs_dec.c | 900 - lib_dec/evs_dec_fx.c | 2 - lib_dec/fd_cng_dec.c | 2376 +- lib_dec/fd_cng_dec_fx.c | 22 - lib_dec/gain_dec.c | 655 - lib_dec/gain_dec_fx.c | 2 - lib_dec/gaus_dec.c | 224 - lib_dec/gs_dec.c | 677 - lib_dec/gs_dec_amr_wb.c | 391 - lib_dec/gs_dec_amr_wb_fx.c | 2 - lib_dec/gs_dec_fx.c | 2 - lib_dec/hdecnrm.c | 326 - lib_dec/hdecnrm_fx.c | 2 - lib_dec/hf_synth.c | 1091 - lib_dec/hq_classifier_dec.c | 63 - lib_dec/hq_classifier_dec_fx.c | 6 - lib_dec/hq_conf_fec.c | 27 - lib_dec/hq_conf_fec_fx.c | 2 - lib_dec/hq_core_dec.c | 572 - lib_dec/hq_core_dec_fx.c | 5 - lib_dec/hq_env_dec.c | 162 - lib_dec/hq_env_dec_fx.c | 4 - lib_dec/hq_hr_dec.c | 259 - lib_dec/hq_hr_dec_fx.c | 6 - lib_dec/hq_lr_dec.c | 1309 - lib_dec/hq_lr_dec_fx.c | 2 - lib_dec/igf_dec.c | 1505 - lib_dec/igf_dec_fx.c | 4 - lib_dec/igf_scf_dec.c | 288 - lib_dec/igf_scf_dec_fx.c | 2 - lib_dec/init_dec.c | 717 - lib_dec/init_dec_fx.c | 2 - lib_dec/inov_dec.c | 145 - lib_dec/inov_dec_fx.c | 2 - lib_dec/ivas_agc_dec.c | 241 - lib_dec/ivas_agc_dec_fx.c | 2 - lib_dec/ivas_binRenderer_internal.c | 1486 +- lib_dec/ivas_core_dec.c | 692 - lib_dec/ivas_corecoder_dec_reconfig.c | 489 - lib_dec/ivas_cpe_dec.c | 1054 - lib_dec/ivas_cpe_dec_fx.c | 2 - lib_dec/ivas_dec.c | 15 - lib_dec/ivas_decision_matrix_dec.c | 425 - lib_dec/ivas_dirac_dec.c | 7254 +-- lib_dec/ivas_dirac_output_synthesis_cov.c | 1173 +- lib_dec/ivas_entropy_decoder.c | 2 - lib_dec/ivas_init_dec.c | 4343 +- lib_dec/ivas_init_dec_fx.c | 2 - lib_dec/ivas_ism_dec.c | 405 - lib_dec/ivas_ism_dtx_dec.c | 133 - lib_dec/ivas_ism_metadata_dec.c | 1437 +- lib_dec/ivas_ism_param_dec.c | 1703 +- lib_dec/ivas_ism_renderer.c | 515 +- lib_dec/ivas_jbm_dec.c | 4035 +- lib_dec/ivas_lfe_dec.c | 440 - lib_dec/ivas_lfe_dec_fx.c | 2 - lib_dec/ivas_lfe_plc.c | 292 - lib_dec/ivas_lfe_plc_fx.c | 18 +- lib_dec/ivas_ls_custom_dec.c | 75 - lib_dec/ivas_masa_dec.c | 3137 +- lib_dec/ivas_mc_param_dec.c | 3470 +- lib_dec/ivas_mc_param_dec_fx.c | 2 - lib_dec/ivas_mc_paramupmix_dec.c | 911 - lib_dec/ivas_mcmasa_dec.c | 61 - lib_dec/ivas_mct_core_dec.c | 218 +- lib_dec/ivas_mct_dec.c | 1248 +- lib_dec/ivas_mct_dec_mct.c | 300 - lib_dec/ivas_mct_dec_mct_fx.c | 2 - lib_dec/ivas_mdct_core_dec.c | 1405 +- lib_dec/ivas_mono_dmx_renderer.c | 169 +- lib_dec/ivas_objectRenderer_internal.c | 210 - lib_dec/ivas_omasa_dec.c | 626 - lib_dec/ivas_osba_dec.c | 185 - lib_dec/ivas_out_setup_conversion.c | 1207 +- lib_dec/ivas_output_config.c | 400 - lib_dec/ivas_pca_dec.c | 268 - lib_dec/ivas_pca_dec_fx.c | 2 - lib_dec/ivas_post_proc.c | 482 - lib_dec/ivas_qmetadata_dec.c | 4995 +- lib_dec/ivas_qspherical_dec.c | 54 - lib_dec/ivas_range_uni_dec.c | 389 - lib_dec/ivas_rom_dec.c | 224 +- lib_dec/ivas_rom_dec.h | 48 +- lib_dec/ivas_sba_dec.c | 979 - lib_dec/ivas_sba_dirac_stereo_dec.c | 902 - lib_dec/ivas_sba_dirac_stereo_dec_fx.c | 2 - lib_dec/ivas_sba_rendering_internal.c | 436 - lib_dec/ivas_sce_dec.c | 401 - lib_dec/ivas_sce_dec_fx.c | 2 - lib_dec/ivas_sns_dec.c | 260 - lib_dec/ivas_sns_dec_fx.c | 2 - lib_dec/ivas_spar_decoder.c | 1698 - lib_dec/ivas_spar_md_dec.c | 5255 +- lib_dec/ivas_stat_dec.h | 683 +- lib_dec/ivas_stereo_adapt_GR_dec.c | 461 - lib_dec/ivas_stereo_cng_dec.c | 929 +- lib_dec/ivas_stereo_dft_dec.c | 2926 +- lib_dec/ivas_stereo_dft_dec_dmx.c | 281 - lib_dec/ivas_stereo_dft_dec_fx.c | 6 - lib_dec/ivas_stereo_dft_plc.c | 346 - lib_dec/ivas_stereo_dft_plc_fx.c | 3 - lib_dec/ivas_stereo_eclvq_dec.c | 161 - lib_dec/ivas_stereo_esf_dec.c | 78 - lib_dec/ivas_stereo_ica_dec.c | 299 - lib_dec/ivas_stereo_icbwe_dec.c | 759 +- lib_dec/ivas_stereo_mdct_core_dec.c | 605 - lib_dec/ivas_stereo_mdct_core_dec_fx.c | 2 - lib_dec/ivas_stereo_mdct_stereo_dec.c | 608 - lib_dec/ivas_stereo_switching_dec.c | 2082 +- lib_dec/ivas_stereo_td_dec.c | 465 - lib_dec/ivas_svd_dec.c | 790 - lib_dec/ivas_tcx_core_dec.c | 845 - lib_dec/ivas_td_low_rate_dec.c | 312 - lib_dec/jbm_jb4_circularbuffer.c | 443 - lib_dec/jbm_jb4_circularbuffer.h | 36 - lib_dec/jbm_jb4_inputbuffer.c | 328 - lib_dec/jbm_jb4_inputbuffer.h | 29 - lib_dec/jbm_jb4_jmf.c | 290 - lib_dec/jbm_jb4_jmf.h | 18 - lib_dec/jbm_jb4sb.c | 1481 - lib_dec/jbm_jb4sb.h | 57 - lib_dec/jbm_pcmdsp_apa.h | 20 - lib_dec/jbm_pcmdsp_similarityestimation.c | 117 - lib_dec/jbm_pcmdsp_similarityestimation.h | 114 - lib_dec/jbm_pcmdsp_window.c | 113 - lib_dec/jbm_pcmdsp_window.h | 6 - lib_dec/lead_deindexing.c | 234 - lib_dec/lead_deindexing_fx.c | 2 - lib_dec/lib_dec.c | 2961 - lib_dec/lib_dec.h | 317 - lib_dec/lib_dec_fx.c | 96 +- lib_dec/lp_exc_d.c | 62 - lib_dec/lp_exc_d_fx.c | 2 - lib_dec/lsf_dec.c | 755 - lib_dec/lsf_dec_fx.c | 2 - lib_dec/lsf_msvq_ma_dec.c | 239 - lib_dec/lsf_msvq_ma_dec_fx.c | 2 - lib_dec/nelp_dec.c | 171 - lib_dec/nelp_dec_fx.c | 2 - lib_dec/peak_vq_dec.c | 483 - lib_dec/peak_vq_dec_fx.c | 2 - lib_dec/pit_dec.c | 798 - lib_dec/pit_dec_fx.c | 2 - lib_dec/pitch_extr.c | 304 - lib_dec/pitch_extr_fx.c | 7 - lib_dec/post_dec.c | 423 - lib_dec/post_dec_fx.c | 2 - lib_dec/ppp_dec.c | 142 - lib_dec/ppp_dec_fx.c | 2 - lib_dec/pvq_core_dec.c | 467 - lib_dec/pvq_core_dec_fx.c | 2 - lib_dec/pvq_decode.c | 69 - lib_dec/pvq_decode_fx.c | 2 - lib_dec/range_dec.c | 205 - lib_dec/range_dec_fx.c | 2 - lib_dec/re8_dec.c | 66 - lib_dec/re8_dec_fx.c | 2 - lib_dec/rom_dec.c | 162 - lib_dec/rom_dec.h | 32 +- lib_dec/rst_dec.c | 47 - lib_dec/rst_dec_fx.c | 2 - lib_dec/stat_dec.h | 1003 +- lib_dec/stat_noise_uv_dec.c | 70 - lib_dec/stat_noise_uv_dec_fx.c | 2 - lib_dec/swb_bwe_dec.c | 748 - lib_dec/swb_bwe_dec_fx.c | 2 - lib_dec/swb_bwe_dec_hr.c | 766 - lib_dec/swb_bwe_dec_hr_fx.c | 2 - lib_dec/swb_bwe_dec_lr.c | 259 - lib_dec/swb_bwe_dec_lr_fx.c | 2 - lib_dec/swb_tbe_dec.c | 2422 +- lib_dec/swb_tbe_dec_fx.c | 5 - lib_dec/syn_outp.c | 87 - lib_dec/syn_outp_fx.c | 3 - lib_dec/tcq_core_dec.c | 431 - lib_dec/tcq_core_dec_fx.c | 3 - lib_dec/tcx_utils_dec.c | 252 - lib_dec/tcx_utils_dec_fx.c | 2 - lib_dec/tns_base_dec.c | 101 - lib_dec/tns_base_dec_fx.c | 9 +- lib_dec/tonalMDCTconcealment.c | 1123 - lib_dec/tonalMDCTconcealment_fx.c | 8 - lib_dec/transition_dec.c | 724 - lib_dec/transition_dec_fx.c | 3 - lib_dec/updt_dec.c | 735 - lib_dec/updt_dec_fx.c | 4 - lib_dec/vlpc_1st_dec.c | 27 - lib_dec/vlpc_1st_dec_fx.c | 2 - lib_dec/vlpc_2st_dec.c | 37 - lib_dec/vlpc_2st_dec_fx.c | 2 - lib_dec/voiced_dec.c | 224 - lib_dec/voiced_dec_fx.c | 3 - lib_dec/waveadjust_fec_dec.c | 832 - lib_dec/waveadjust_fec_dec_fx.c | 4 - lib_enc/ACcontextMapping_enc.c | 1537 +- lib_enc/FEC_enc.c | 227 - lib_enc/SNR_calc.c | 221 - lib_enc/acelp_core_enc.c | 1023 - lib_enc/acelp_core_switch_enc.c | 420 - lib_enc/acelp_enc_util.c | 28 - lib_enc/amr_wb_enc.c | 511 - lib_enc/analy_lp.c | 130 - lib_enc/analy_lp_fx.c | 2 - lib_enc/analy_sp.c | 366 - lib_enc/analy_sp_fx.c | 8 - lib_enc/ari_enc.c | 351 - lib_enc/ari_hm_enc.c | 565 - lib_enc/ari_hm_enc_fx.c | 2 - lib_enc/arith_coder_enc.c | 635 - lib_enc/avq_cod.c | 555 - lib_enc/bass_psfilter_enc.c | 216 - lib_enc/bw_detect.c | 666 - lib_enc/cng_enc.c | 1120 +- lib_enc/cng_enc_fx.c | 8 +- lib_enc/cod2t32.c | 305 - lib_enc/cod4t64.c | 973 - lib_enc/cod4t64_fast.c | 698 - lib_enc/cod_ace.c | 387 - lib_enc/cod_tcx.c | 2124 - lib_enc/cod_tcx_fx.c | 12 - lib_enc/cod_uv.c | 51 - lib_enc/comvad_decision.c | 836 - lib_enc/cor_shif.c | 32 - lib_enc/core_enc_2div.c | 203 - lib_enc/core_enc_init.c | 588 - lib_enc/core_enc_ol.c | 1149 - lib_enc/core_enc_reconf.c | 23 - lib_enc/core_enc_switch.c | 153 - lib_enc/core_enc_updt.c | 159 - lib_enc/core_switching_enc.c | 614 - lib_enc/corr_xh.c | 34 - lib_enc/corr_xh_fx.c | 4 +- lib_enc/decision_matrix_enc.c | 689 - lib_enc/decision_matrix_enc_fx.c | 2 - lib_enc/detect_transient.c | 221 - lib_enc/dtx.c | 829 - lib_enc/enc_acelp.c | 1431 - lib_enc/enc_acelp_tcx_main.c | 92 - lib_enc/enc_acelpx.c | 457 - lib_enc/enc_amr_wb.c | 198 - lib_enc/enc_gain.c | 230 - lib_enc/enc_gen_voic.c | 284 - lib_enc/enc_gen_voic_rf.c | 358 - lib_enc/enc_higher_acelp.c | 345 - lib_enc/enc_nelp.c | 108 - lib_enc/enc_nelp_fx.c | 2 - lib_enc/enc_pit_exc.c | 374 - lib_enc/enc_ppp.c | 166 - lib_enc/enc_prm.c | 837 - lib_enc/enc_prm_fx.c | 6 - lib_enc/enc_tran.c | 303 - lib_enc/enc_uv.c | 199 - lib_enc/energy.c | 247 - lib_enc/eval_pit_contr.c | 316 - lib_enc/evs_enc.c | 776 - lib_enc/evs_enc_fx.c | 2 - lib_enc/ext_sig_ana.c | 407 - lib_enc/ext_sig_ana_fx.c | 4 - lib_enc/fd_cng_enc.c | 1898 +- lib_enc/fd_cng_enc_fx.c | 2 - lib_enc/find_tar.c | 81 - lib_enc/find_tilt.c | 166 - lib_enc/find_uv.c | 432 - lib_enc/find_wsp.c | 50 - lib_enc/frame_spec_dif_cor_rate.c | 51 - lib_enc/gain_enc.c | 993 - lib_enc/gaus_enc.c | 419 - lib_enc/gp_clip.c | 210 - lib_enc/gp_clip_fx.c | 2 - lib_enc/gs_enc.c | 639 - lib_enc/gs_enc_fx.c | 2 - lib_enc/guided_plc_enc.c | 346 - lib_enc/hf_cod_amrwb.c | 299 - lib_enc/hq_classifier_enc.c | 574 - lib_enc/hq_classifier_enc_fx.c | 8 - lib_enc/hq_core_enc.c | 242 - lib_enc/hq_core_enc_fx.c | 2 - lib_enc/hq_env_enc.c | 521 - lib_enc/hq_env_enc_fx.c | 2 - lib_enc/hq_hr_enc.c | 207 - lib_enc/hq_hr_enc_fx.c | 2 - lib_enc/hq_lr_enc.c | 1728 - lib_enc/hq_lr_enc_fx.c | 37 +- lib_enc/hvq_enc.c | 111 - lib_enc/hvq_enc_fx.c | 2 - lib_enc/igf_enc.c | 1839 +- lib_enc/igf_enc_fx.c | 6 - lib_enc/igf_scf_enc.c | 297 - lib_enc/init_enc.c | 1319 +- lib_enc/inov_enc.c | 333 - lib_enc/inov_enc_fx.c | 3 - lib_enc/isf_enc_amr_wb.c | 481 - lib_enc/ivas_agc_enc.c | 370 - lib_enc/ivas_core_enc.c | 434 - lib_enc/ivas_core_pre_proc.c | 433 +- lib_enc/ivas_core_pre_proc_front.c | 899 +- lib_enc/ivas_corecoder_enc_reconfig.c | 448 - lib_enc/ivas_cpe_enc.c | 1595 +- lib_enc/ivas_decision_matrix_enc.c | 447 - lib_enc/ivas_dirac_enc.c | 972 +- lib_enc/ivas_enc.c | 584 +- lib_enc/ivas_enc_cov_handler.c | 401 +- lib_enc/ivas_entropy_coder.c | 97 - lib_enc/ivas_front_vad.c | 435 +- lib_enc/ivas_init_enc.c | 535 +- lib_enc/ivas_ism_dtx_enc.c | 315 - lib_enc/ivas_ism_enc.c | 442 - lib_enc/ivas_ism_metadata_enc.c | 1512 +- lib_enc/ivas_ism_param_enc.c | 476 - lib_enc/ivas_lfe_enc.c | 499 - lib_enc/ivas_masa_enc.c | 4487 +- lib_enc/ivas_mc_param_enc.c | 1863 +- lib_enc/ivas_mc_paramupmix_enc.c | 802 +- lib_enc/ivas_mcmasa_enc.c | 1720 +- lib_enc/ivas_mct_core_enc.c | 521 +- lib_enc/ivas_mct_enc.c | 589 +- lib_enc/ivas_mct_enc_mct.c | 744 - lib_enc/ivas_mdct_core_enc.c | 1344 +- lib_enc/ivas_omasa_enc.c | 1157 +- lib_enc/ivas_osba_enc.c | 422 - lib_enc/ivas_pca_enc.c | 30 - lib_enc/ivas_qmetadata_enc.c | 9362 +--- lib_enc/ivas_qspherical_enc.c | 596 +- lib_enc/ivas_range_uni_enc.c | 224 - lib_enc/ivas_rom_enc.c | 593 - lib_enc/ivas_rom_enc.h | 75 - lib_enc/ivas_sba_enc.c | 203 - lib_enc/ivas_sce_enc.c | 402 - lib_enc/ivas_sns_enc.c | 469 - lib_enc/ivas_spar_encoder.c | 519 - lib_enc/ivas_spar_md_enc.c | 1369 +- lib_enc/ivas_stat_enc.h | 589 +- lib_enc/ivas_stereo_adapt_GR_enc.c | 550 - lib_enc/ivas_stereo_classifier.c | 1149 +- lib_enc/ivas_stereo_cng_enc.c | 454 - lib_enc/ivas_stereo_dft_enc.c | 3485 +- lib_enc/ivas_stereo_dft_enc_itd.c | 1222 - lib_enc/ivas_stereo_dft_td_itd.c | 333 +- lib_enc/ivas_stereo_dmx_evs.c | 2030 +- lib_enc/ivas_stereo_eclvq_enc.c | 709 - lib_enc/ivas_stereo_ica_enc.c | 1343 +- lib_enc/ivas_stereo_icbwe_enc.c | 690 - lib_enc/ivas_stereo_mdct_core_enc.c | 404 +- lib_enc/ivas_stereo_mdct_igf_enc.c | 219 +- lib_enc/ivas_stereo_mdct_stereo_enc.c | 1055 +- lib_enc/ivas_stereo_switching_enc.c | 1003 +- lib_enc/ivas_stereo_td_analysis.c | 1824 +- lib_enc/ivas_stereo_td_enc.c | 833 +- lib_enc/ivas_tcx_core_enc.c | 788 - lib_enc/ivas_td_low_rate_enc.c | 297 - lib_enc/lib_enc.c | 496 +- lib_enc/lib_enc.h | 18 - lib_enc/long_enr.c | 117 - lib_enc/long_enr_fx.c | 2 - lib_enc/lp_exc_e.c | 259 - lib_enc/lp_exc_e_fx.c | 4 - lib_enc/lsf_enc.c | 2054 - lib_enc/lsf_msvq_ma_enc.c | 798 - lib_enc/lsf_msvq_ma_enc_fx.c | 6 - lib_enc/ltd_stable.c | 94 - lib_enc/mdct_classifier.c | 325 - lib_enc/mdct_classifier_fx.c | 2 - lib_enc/mdct_selector.c | 247 - lib_enc/mslvq_enc.c | 739 - lib_enc/multi_harm.c | 286 - lib_enc/multi_harm_fx.c | 369 +- lib_enc/nelp_enc.c | 403 - lib_enc/nois_est.c | 960 - lib_enc/nois_est_fx.c | 3 - lib_enc/noise_adjust.c | 75 - lib_enc/normalizecoefs.c | 25 - lib_enc/peak_vq_enc.c | 590 - lib_enc/peak_vq_enc_fx.c | 8 - lib_enc/pit_enc.c | 1341 - lib_enc/pit_enc_fx.c | 2 - lib_enc/pitch_ol.c | 946 - lib_enc/pitch_ol2.c | 277 - lib_enc/plc_enc_ext.c | 95 - lib_enc/ppp_enc.c | 430 - lib_enc/pre_proc.c | 971 - lib_enc/prot_fx_enc.h | 67 +- lib_enc/pvq_core_enc.c | 523 - lib_enc/pvq_core_enc_fx.c | 12 - lib_enc/pvq_encode.c | 166 - lib_enc/pvq_encode_fx.c | 2 - lib_enc/q_gain2p.c | 346 - lib_enc/qlpc_avq.c | 346 - lib_enc/qlpc_avq_fx.c | 18 +- lib_enc/qlpc_stoch.c | 282 - lib_enc/qlpc_stoch_fx.c | 2 - lib_enc/range_enc.c | 285 - lib_enc/range_enc_fx.c | 14 - lib_enc/re8_cod.c | 47 - lib_enc/reordernorm.c | 44 - lib_enc/rom_enc.c | 890 - lib_enc/rom_enc.h | 100 +- lib_enc/rst_enc.c | 54 - lib_enc/set_impulse.c | 304 - lib_enc/setmodeindex.c | 32 - lib_enc/sig_clas.c | 359 - lib_enc/sig_clas_fx.c | 2 - lib_enc/spec_center.c | 56 - lib_enc/spec_flatness.c | 93 - lib_enc/speech_music_classif.c | 3045 -- lib_enc/speech_music_classif_fx.c | 6 - lib_enc/stat_enc.h | 1548 +- lib_enc/stat_noise_uv_enc.c | 65 - lib_enc/stat_noise_uv_enc_fx.c | 2 - lib_enc/subband_fft.c | 175 - lib_enc/swb_bwe_enc.c | 1849 - lib_enc/swb_bwe_enc_fx.c | 10 +- lib_enc/swb_bwe_enc_hr.c | 465 - lib_enc/swb_bwe_enc_lr.c | 656 - lib_enc/swb_bwe_enc_lr_fx.c | 4 - lib_enc/swb_pre_proc.c | 706 - lib_enc/swb_tbe_enc.c | 2847 - lib_enc/swb_tbe_enc_fx.c | 6 - lib_enc/tcq_core_enc.c | 422 - lib_enc/tcx_ltp_enc.c | 549 - lib_enc/tcx_utils_enc.c | 1559 +- lib_enc/tcx_utils_enc_fx.c | 4 - lib_enc/tfa_enc.c | 81 - lib_enc/tns_base_enc.c | 386 - lib_enc/tns_base_enc_fx.c | 4 - lib_enc/transient_detection.c | 827 - lib_enc/transient_detection_fx.c | 10 - lib_enc/transition_enc.c | 1018 - lib_enc/update_decision.c | 248 - lib_enc/updt_enc.c | 413 - lib_enc/updt_tar.c | 27 - lib_enc/vad.c | 1008 - lib_enc/vad_fx.c | 2 - lib_enc/vad_param_updt.c | 126 - lib_enc/vad_proc.c | 251 - lib_enc/vbr_average_rate.c | 146 - lib_enc/vlpc_1st_cod.c | 104 - lib_enc/vlpc_2st_cod.c | 110 - lib_enc/voiced_enc.c | 1141 - lib_enc/waveadjust_fec_cod.c | 36 - lib_rend/ivas_allrad_dec.c | 114 - lib_rend/ivas_crend.c | 2273 +- lib_rend/ivas_dirac_ana.c | 351 - lib_rend/ivas_dirac_dec_binaural_functions.c | 2806 +- lib_rend/ivas_dirac_decorr_dec.c | 728 +- lib_rend/ivas_dirac_onsets_dec.c | 83 - lib_rend/ivas_dirac_output_synthesis_dec.c | 3883 +- lib_rend/ivas_dirac_rend.c | 2602 +- lib_rend/ivas_efap.c | 2215 +- lib_rend/ivas_hrtf.c | 128 - lib_rend/ivas_limiter.c | 311 - lib_rend/ivas_masa_merge.c | 321 - lib_rend/ivas_mcmasa_ana.c | 1158 +- lib_rend/ivas_objectRenderer.c | 709 - lib_rend/ivas_objectRenderer_hrFilt.c | 522 - lib_rend/ivas_objectRenderer_mix.c | 466 - lib_rend/ivas_objectRenderer_sfx.c | 230 - lib_rend/ivas_objectRenderer_sources.c | 520 - lib_rend/ivas_objectRenderer_vec.c | 85 - lib_rend/ivas_omasa_ana.c | 536 - lib_rend/ivas_orient_trk.c | 535 - lib_rend/ivas_output_init.c | 377 - lib_rend/ivas_output_init_fx.c | 2 - lib_rend/ivas_prot_rend.h | 895 +- lib_rend/ivas_reflections.c | 484 - lib_rend/ivas_render_config.c | 67 - lib_rend/ivas_reverb.c | 2069 +- lib_rend/ivas_reverb_delay_line.c | 218 - lib_rend/ivas_reverb_fft_filter.c | 381 - lib_rend/ivas_reverb_filter_design.c | 733 - lib_rend/ivas_reverb_iir_filter.c | 112 - lib_rend/ivas_reverb_utils.c | 270 - lib_rend/ivas_rom_TdBinauralRenderer.c | 10106 ---- lib_rend/ivas_rom_TdBinauralRenderer.h | 50 +- lib_rend/ivas_rom_binauralRenderer.c | 47522 ----------------- lib_rend/ivas_rom_binauralRenderer.h | 50 - lib_rend/ivas_rom_binaural_crend_head.c | 7062 --- lib_rend/ivas_rom_binaural_crend_head.h | 187 - lib_rend/ivas_rom_rend.c | 910 - lib_rend/ivas_rom_rend.h | 87 +- lib_rend/ivas_rotation.c | 1611 +- lib_rend/ivas_sba_rendering.c | 162 - lib_rend/ivas_shoebox.c | 422 +- lib_rend/ivas_stat_rend.h | 1128 +- lib_rend/ivas_td_decorr.c | 421 - lib_rend/ivas_vbap.c | 1792 +- lib_rend/lib_rend.c | 8224 +-- lib_rend/lib_rend.h | 160 - lib_util/hrtf_file_reader.c | 1501 +- lib_util/ism_file_reader.c | 4 - lib_util/ism_file_writer.c | 34 - lib_util/ism_file_writer.h | 7 - lib_util/masa_file_reader.c | 39 +- lib_util/render_config_reader.c | 186 - lib_util/rotation_file_reader.c | 13 - lib_util/vector3_pair_file_reader.c | 4 - 791 files changed, 17406 insertions(+), 435403 deletions(-) delete mode 100644 lib_com/enhancer.c delete mode 100644 lib_com/fd_cng_com.c create mode 100644 lib_com/frame_ener_fx.c create mode 100644 lib_com/get_gain_fx.c create mode 100644 lib_com/gs_preech_fx.c create mode 100644 lib_com/hp50_fx.c delete mode 100644 lib_com/ivas_stereo_eclvq_com.c delete mode 100644 lib_com/ivas_stereo_ica_com.c delete mode 100644 lib_com/logqnorm.c delete mode 100644 lib_com/low_rate_band_att.c delete mode 100644 lib_com/lpc_tools.c delete mode 100644 lib_com/lsf_dec_bfi.c delete mode 100644 lib_com/lsf_msvq_ma.c delete mode 100644 lib_com/lsf_tools.c delete mode 100644 lib_com/lsp_conv_poly.c delete mode 100644 lib_com/nelp.c delete mode 100644 lib_com/parameter_bitmaping.c delete mode 100644 lib_com/phase_dispersion.c delete mode 100644 lib_com/ppp.c delete mode 100644 lib_com/pred_lt4.c delete mode 100644 lib_com/pvq_com.c delete mode 100644 lib_com/range_com.c delete mode 100644 lib_com/re8_ppv.c delete mode 100644 lib_com/re8_util.c delete mode 100644 lib_com/realft.c delete mode 100644 lib_com/recovernorm.c delete mode 100644 lib_com/reordvct.c delete mode 100644 lib_com/tns_base_flt.c diff --git a/Workspace_msvc/lib_com.vcxproj b/Workspace_msvc/lib_com.vcxproj index c6111a49f..7109c9ebc 100644 --- a/Workspace_msvc/lib_com.vcxproj +++ b/Workspace_msvc/lib_com.vcxproj @@ -160,13 +160,11 @@ - - @@ -175,7 +173,6 @@ - @@ -190,9 +187,9 @@ - + - + @@ -202,10 +199,10 @@ - + - + @@ -261,9 +258,7 @@ - - @@ -276,53 +271,33 @@ - - - - - - - - - - - - - - - - - - - - @@ -358,7 +333,6 @@ - diff --git a/Workspace_msvc/lib_com.vcxproj.filters b/Workspace_msvc/lib_com.vcxproj.filters index 3f865d3ce..c8445d0f3 100644 --- a/Workspace_msvc/lib_com.vcxproj.filters +++ b/Workspace_msvc/lib_com.vcxproj.filters @@ -1,12 +1,6 @@ - - common_evs_c - - - common_evs_c - common_evs_c @@ -37,12 +31,6 @@ common_ivas_c - - common_ivas_c - - - common_ivas_c - common_ivas_c @@ -219,9 +207,6 @@ common_all_c - - common_all_c - common_all_c @@ -424,31 +409,23 @@ - - - - - - - - @@ -475,28 +452,10 @@ - - - - - - - - - - - - - - - - - - @@ -523,6 +482,11 @@ + + + + + diff --git a/apps/decoder.c b/apps/decoder.c index 851732f09..058722569 100644 --- a/apps/decoder.c +++ b/apps/decoder.c @@ -111,9 +111,7 @@ typedef struct int16_t orientation_tracking; int16_t Opt_non_diegetic_pan; float non_diegetic_pan_gain; -#ifdef IVAS_FLOAT_FIXED Word16 non_diegetic_pan_gain_fx; /* Q15 */ -#endif bool renderConfigEnabled; char *renderConfigFilename; IVAS_DEC_COMPLEXITY_LEVEL complexityLevel; @@ -365,13 +363,8 @@ int main( *------------------------------------------------------------------------------------------*/ asked_frame_size = arg.renderFramesize; -#ifndef IVAS_FLOAT_FIXED - if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, - arg.Opt_dpid_on, arg.acousticEnvironmentId, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) -#else if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputConfig, arg.tsmEnabled, arg.renderFramesize, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain_fx, arg.Opt_dpid_on, arg.acousticEnvironmentId, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK ) -#endif { fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) ); @@ -441,14 +434,12 @@ int main( fprintf( stderr, "Failed to get directivity patterns for one or more of IDs: %d %d %d %d\n\n", arg.directivityPatternId[0], arg.directivityPatternId[1], arg.directivityPatternId[2], arg.directivityPatternId[3] ); goto cleanup; } -#ifdef IVAS_FLOAT_FIXED FOR( Word16 i = 0; i < 4; i++ ) { renderConfig.directivity_fx[i * 3] = (Word16) ( renderConfig.directivity[i * 3] * ( 1u << 6 ) ); renderConfig.directivity_fx[i * 3 + 1] = (Word16) ( renderConfig.directivity[i * 3 + 1] * ( 1u << 6 ) ); renderConfig.directivity_fx[i * 3 + 2] = (Word16) ( renderConfig.directivity[i * 3 + 2] * ( ( 1u << 15 ) - 1 ) ); } -#endif // IVAS_FLOAT_FIXED if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) { @@ -489,13 +480,11 @@ int main( fprintf( stderr, "\nError in reading Custom loudspeaker file %s: %s\n\n", arg.customLsSetupFilename, CustomLoudspeakerLayout_getError( lsCustomError ) ); goto cleanup; } -#ifdef IVAS_FLOAT_FIXED for ( int i = 0; i < IVAS_MAX_OUTPUT_CHANNELS; i++ ) { hLsCustomData.azimuth_fx[i] = (Word32) ( hLsCustomData.azimuth[i] * ( 1u << 22 ) ); hLsCustomData.elevation_fx[i] = (Word32) ( hLsCustomData.elevation[i] * ( 1u << 22 ) ); } -#endif if ( ( error = IVAS_DEC_FeedCustomLsData( hIvasDec, hLsCustomData ) ) != IVAS_ERR_OK ) { fprintf( stderr, "\nIVAS_DEC_FeedCustomLsData failed: %s\n", IVAS_DEC_GetErrorMessage( error ) ); @@ -1063,7 +1052,6 @@ static bool parseCmdlIVAS_dec( return false; } } -#ifdef IVAS_FLOAT_FIXED if ( arg->non_diegetic_pan_gain == 1.0f ) { arg->non_diegetic_pan_gain_fx = 32767; @@ -1073,7 +1061,6 @@ static bool parseCmdlIVAS_dec( arg->non_diegetic_pan_gain_fx = (Word16) ( arg->non_diegetic_pan_gain * ( 1u << 15 ) ); } -#endif i++; } else if ( strcmp( argv_to_upper, "-LEVEL" ) == 0 ) @@ -1525,17 +1512,7 @@ static ivas_error decodeG192( bool needNewFrame; int16_t nSamplesRendered, nSamplesRendered_loop, nSamplesToRender; IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; -#ifdef IVAS_FLOAT_FIXED IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES] = { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 } }; -#else - IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES] = { { 0, 0, 0 }, { - 0, - 0, - 0, - }, - { 0, 0, 0 }, - { 0, 0, 0 } }; -#endif int16_t vec_pos_update, vec_pos_len; @@ -2095,17 +2072,7 @@ static ivas_error decodeVoIP( IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN; IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS]; -#ifdef IVAS_FLOAT_FIXED IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES] = { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 } }; -#else - IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES] = { { 0, 0, 0 }, { - 0, - 0, - 0, - }, - { 0, 0, 0 }, - { 0, 0, 0 } }; -#endif int16_t vec_pos_update, vec_pos_len; int16_t nOutSamples = 0; diff --git a/apps/encoder.c b/apps/encoder.c index 98fb9aaa2..a1b7f0d10 100644 --- a/apps/encoder.c +++ b/apps/encoder.c @@ -45,6 +45,7 @@ #include "masa_file_reader.h" #include "wmc_auto.h" + #define WMC_TOOL_SKIP /*------------------------------------------------------------------------------------------* @@ -208,19 +209,11 @@ int main( /*------------------------------------------------------------------------------------------* * Open and initialize IVAS encoder *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED if ( ( error = IVAS_ENC_Open_fx( &hIvasEnc ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Opening IVAS encoder failed: %s\n", IVAS_ENC_GetErrorMessage( error ) ); goto cleanup; } -#else - if ( ( error = IVAS_ENC_Open( &hIvasEnc ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Opening IVAS encoder failed: %s\n", IVAS_ENC_GetErrorMessage( error ) ); - goto cleanup; - } -#endif /*------------------------------------------------------------------------------------------* * Open output bitstream file *------------------------------------------------------------------------------------------*/ diff --git a/apps/renderer.c b/apps/renderer.c index b16e32786..44ed320ad 100644 --- a/apps/renderer.c +++ b/apps/renderer.c @@ -48,9 +48,7 @@ #include "vector3_pair_file_reader.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif #define WMC_TOOL_SKIP @@ -408,16 +406,13 @@ static IVAS_AUDIO_CONFIG parseAudioConfig( const char *configString ); static void convertInputBuffer( const int16_t *intBuffer, const int16_t numIntSamplesPerChannel, const int16_t numFloatSamplesPerChannel, const int16_t numChannels, float *floatBuffer ); static void convertOutputBuffer( const float *floatBuffer, const int16_t numSamplesPerChannel, const int16_t numChannels, int16_t *intBuffer ); -#ifdef IVAS_FLOAT_FIXED static void convertOutputBuffer_fx( const Word32 *Word32Buffer, const Word16 numSamplesPerChannel, const Word16 numChannels, Word16 *intBuffer, Word16 q_factor ); static void convertInputBuffer_fx( const Word16 *intBuffer, const Word16 numIntSamplesPerChannel, const Word16 numFloatSamplesPerChannel, const Word16 numChannels, Word32 *Int32Buffer, Word16 in_q_factor ); -#endif /*------------------------------------------------------------------------------------------* * Local functions *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED // The function is defined inside library files too with different nsme but same functionality static Word16 find_guard_bits( Word32 n ) { @@ -447,21 +442,6 @@ static IVAS_REND_ReadOnlyAudioBuffer getReadOnlySubBuffer( return subBuffer; } -#else -static IVAS_REND_ReadOnlyAudioBuffer getReadOnlySubBuffer( - IVAS_REND_AudioBuffer buffer, - const int16_t chBeginIdx, - const int16_t numChannels ) -{ - IVAS_REND_ReadOnlyAudioBuffer subBuffer; - - subBuffer.config = buffer.config; - subBuffer.config.numChannels = numChannels; - subBuffer.data = buffer.data + subBuffer.config.numSamplesPerChannel * chBeginIdx; - - return subBuffer; -} -#endif static int16_t getTotalNumInChannels( IVAS_REND_HANDLE hIvasRend, @@ -643,11 +623,9 @@ int main( int16_t *inpInt16Buffer; float *inFloatBuffer; int16_t *outInt16Buffer; -#ifdef IVAS_FLOAT_FIXED Word32 *outInt32Buffer; Word32 *inInt32Buffer; Word32 gain_fx; -#endif float *outFloatBuffer; IVAS_REND_AudioBuffer inBuffer; IVAS_REND_AudioBuffer outBuffer; @@ -830,7 +808,6 @@ int main( } const int16_t frameSize_smpls = (int16_t) ( ( args.render_framesize ) * args.sampleRate * 5 / ( 1000 ) ); -#ifdef IVAS_FLOAT_FIXED Word32 nonDiegeticPanGain_fx = ( args.nonDiegeticPanGain == 1.0f ) ? ONE_IN_Q31 : ( args.nonDiegeticPanGain == -1.0f ) ? L_negate( ONE_IN_Q31 ) : (Word32) ( args.nonDiegeticPanGain * ( 1LL << Q31 ) ); IF( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, nonDiegeticPanGain_fx, (int16_t) args.render_framesize ) ) != IVAS_ERR_OK ) @@ -838,13 +815,6 @@ int main( fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#else - if ( ( error = IVAS_REND_Open( &hIvasRend, args.sampleRate, args.outConfig.audioConfig, args.nonDiegeticPan, args.nonDiegeticPanGain, (int16_t) args.render_framesize ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error opening renderer handle: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } -#endif // IVAS_FLOAT_FIXED /* === Configure === */ if ( ( error = IVAS_REND_InitConfig( hIvasRend, args.outConfig.audioConfig ) ) != IVAS_ERR_OK ) @@ -912,10 +882,8 @@ int main( /* Set up output custom layout configuration */ if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) { -#ifdef IVAS_FLOAT_FIXED floatToFixed_arrL( args.outConfig.outSetupCustom.azimuth, args.outConfig.outSetupCustom.azimuth_fx, Q22, IVAS_MAX_OUTPUT_CHANNELS ); floatToFixed_arrL( args.outConfig.outSetupCustom.elevation, args.outConfig.outSetupCustom.elevation_fx, Q22, IVAS_MAX_OUTPUT_CHANNELS ); -#endif if ( ( error = IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( hIvasRend, args.outConfig.outSetupCustom ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in IVAS_REND_ConfigureCustomOutputLoudspeakerLayout(): %s\n", ivas_error_to_string( error ) ); @@ -942,26 +910,16 @@ int main( fprintf( stderr, "Error in IVAS_REND_SetTotalNumberOfObjects(): %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#ifdef IVAS_FLOAT_FIXED Word32 var1 = (Word32) ( args.syncMdDelay ); IF( ( error = IVAS_REND_SetIsmMetadataDelay( hIvasRend, var1 ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in IVAS_REND_SetIsmMetadataDelay(): %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#else - if ( ( error = IVAS_REND_SetIsmMetadataDelay( hIvasRend, args.syncMdDelay ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error in IVAS_REND_SetIsmMetadataDelay(): %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } -#endif } IVAS_REND_LfePanMtx lfePanMatrix; -#ifdef IVAS_FLOAT_FIXED IVAS_REND_LfePanMtx_fx lfePanMatrix_fx; -#endif /* parse input LFE panning matrix */ if ( args.lfeCustomRoutingEnabled && !isEmptyString( args.inLfePanningMatrixFile ) ) { @@ -996,19 +954,6 @@ int main( for ( i = 0; i < args.inConfig.numMultiChannelBuses; ++i ) { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = IVAS_REND_AddInput( hIvasRend, args.inConfig.multiChannelBuses[i].audioConfig, &mcIds[i] ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - - if ( ( error = IVAS_REND_SetInputGain( hIvasRend, mcIds[i], args.inputGainGlobal * dBToLin( args.inConfig.multiChannelBuses[i].gain_dB ) ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } -#else IF( ( error = IVAS_REND_AddInput_fx( hIvasRend, args.inConfig.multiChannelBuses[i].audioConfig, &mcIds[i] ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); @@ -1022,14 +967,11 @@ int main( fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#endif if ( args.inConfig.multiChannelBuses[i].audioConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) { -#ifdef IVAS_FLOAT_FIXED floatToFixed_arrL( args.inConfig.inSetupCustom.azimuth, args.inConfig.inSetupCustom.azimuth_fx, Q22, IVAS_MAX_OUTPUT_CHANNELS ); floatToFixed_arrL( args.inConfig.inSetupCustom.elevation, args.inConfig.inSetupCustom.elevation_fx, Q22, IVAS_MAX_OUTPUT_CHANNELS ); -#endif if ( ( error = IVAS_REND_ConfigureCustomInputLoudspeakerLayout( hIvasRend, mcIds[i], args.inConfig.inSetupCustom ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error in IVAS_REND_ConfigureCustomInputLoudspeakerLayout(): %s\n", ivas_error_to_string( error ) ); @@ -1046,16 +988,12 @@ int main( args.lfePanningEnabled = false; } -#ifdef IVAS_FLOAT_FIXED FOR( Word16 k = 0; k < IVAS_MAX_OUTPUT_CHANNELS; k++ ) { ( *lfePanMatrix_fx )[k] = (Word32) ( ( *lfePanMatrix )[k] * ( 1u << 31 ) ); } IF( ( error = IVAS_REND_SetInputLfeMtx_fx( hIvasRend, mcIds[i], (const IVAS_REND_LfePanMtx_fx *) &lfePanMatrix_fx ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_SetInputLfeMtx( hIvasRend, mcIds[i], (const IVAS_REND_LfePanMtx *) &lfePanMatrix ) ) != IVAS_ERR_OK ) -#endif // IVAS_FLOAT_FIXED { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1064,12 +1002,8 @@ int main( /* set panning gains for input LFE */ else if ( args.lfePanningEnabled ) { -#ifdef IVAS_FLOAT_FIXED Word32 inputGain = (Word32) ( args.lfeConfigGain * ( 1u << 31 ) ); IF( ( error = IVAS_REND_SetInputLfePos_fx( hIvasRend, mcIds[i], inputGain, (Word16) args.lfeConfigAzimuth, (Word16) args.lfeConfigElevation ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_SetInputLfePos( hIvasRend, mcIds[i], args.lfeConfigGain, args.lfeConfigAzimuth, args.lfeConfigElevation ) ) != IVAS_ERR_OK ) -#endif // IVAS_FLOAT_FIXED { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1089,16 +1023,12 @@ int main( exit( -1 ); } -#ifdef IVAS_FLOAT_FIXED FOR( Word16 k = 0; k < IVAS_MAX_OUTPUT_CHANNELS; k++ ) { ( *lfePanMatrix_fx )[k] = (Word32) ( ( *lfePanMatrix )[k] * ( 1u << 31 ) ); } if ( ( error = IVAS_REND_SetInputLfeMtx_fx( hIvasRend, mcIds[i], (const IVAS_REND_LfePanMtx_fx *) &lfePanMatrix_fx ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_SetInputLfeMtx( hIvasRend, mcIds[i], (const IVAS_REND_LfePanMtx *) &lfePanMatrix ) ) != IVAS_ERR_OK ) -#endif // IVAS_FLOAT_FIXED { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1107,12 +1037,8 @@ int main( /* set position based gains */ else { -#ifdef IVAS_FLOAT_FIXED Word32 inputGain = (Word32) ( lfeRoutingConfigs[i]->lfe_gain_dB * ( 1u << 31 ) ); IF( ( error = IVAS_REND_SetInputLfePos_fx( hIvasRend, mcIds[i], inputGain, (Word16) lfeRoutingConfigs[i]->lfe_azi, (Word16) lfeRoutingConfigs[i]->lfe_ele ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_SetInputLfePos( hIvasRend, mcIds[i], lfeRoutingConfigs[i]->lfe_gain_dB, lfeRoutingConfigs[i]->lfe_azi, lfeRoutingConfigs[i]->lfe_ele ) ) != IVAS_ERR_OK ) -#endif // IVAS_FLOAT_FIXED { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1122,58 +1048,6 @@ int main( } } -#ifndef IVAS_FLOAT_FIXED - for ( i = 0; i < args.inConfig.numAudioObjects; ++i ) - { - if ( ( error = IVAS_REND_AddInput( hIvasRend, IVAS_AUDIO_CONFIG_OBA, &ismIds[i] ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - - if ( ( error = IVAS_REND_SetInputGain( hIvasRend, ismIds[i], args.inputGainGlobal * dBToLin( args.inConfig.audioObjects[i].gain_dB ) ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - - /* With MASA output, all objects are handled at once, so add only one input having all objects in it */ - if ( args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA1 || args.outConfig.audioConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - break; - } - } - - for ( i = 0; i < args.inConfig.numAmbisonicsBuses; ++i ) - { - if ( ( error = IVAS_REND_AddInput( hIvasRend, args.inConfig.ambisonicsBuses[i].audioConfig, &sbaIds[i] ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - - if ( ( error = IVAS_REND_SetInputGain( hIvasRend, sbaIds[i], args.inputGainGlobal * dBToLin( args.inConfig.ambisonicsBuses[i].gain_dB ) ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - } - - for ( i = 0; i < args.inConfig.numMasaBuses; ++i ) - { - if ( ( error = IVAS_REND_AddInput( hIvasRend, args.inConfig.masaBuses[i].audioConfig, &masaIds[i] ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - - if ( ( error = IVAS_REND_SetInputGain( hIvasRend, masaIds[i], args.inputGainGlobal * dBToLin( args.inConfig.masaBuses[i].gain_dB ) ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } - } -#else FOR( i = 0; i < args.inConfig.numAudioObjects; ++i ) { IF( ( error = IVAS_REND_AddInput_fx( hIvasRend, IVAS_AUDIO_CONFIG_OBA, &ismIds[i] ) ) != IVAS_ERR_OK ) @@ -1227,7 +1101,6 @@ int main( exit( -1 ); } } -#endif // !IVAS_FLOAT_FIXED const int16_t totalNumInChannels = getTotalNumInChannels( hIvasRend, mcIds, ismIds, sbaIds, masaIds ); @@ -1265,27 +1138,17 @@ int main( inFloatBuffer = malloc( inBufferSize * sizeof( float ) ); outInt16Buffer = malloc( outBufferSize * sizeof( int16_t ) ); -#ifdef IVAS_FLOAT_FIXED outInt32Buffer = malloc( outBufferSize * sizeof( Word32 ) ); inInt32Buffer = malloc( inBufferSize * sizeof( Word32 ) ); -#endif outFloatBuffer = malloc( outBufferSize * sizeof( float ) ); inBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; inBuffer.config.numChannels = (int16_t) totalNumInChannels; -#ifndef IVAS_FLOAT_FIXED - inBuffer.data = inFloatBuffer; -#endif // IVAS_FLOAT_FIXED outBuffer.config.numSamplesPerChannel = (int16_t) frameSize_smpls; outBuffer.config.numChannels = (int16_t) numOutChannels; -#ifndef IVAS_FLOAT_FIXED - outBuffer.data = outFloatBuffer; -#endif -#ifdef IVAS_FLOAT_FIXED outBuffer.data_fx = outInt32Buffer; inBuffer.data_fx = inInt32Buffer; -#endif #ifdef WMOPS reset_stack(); reset_wmops(); @@ -1302,11 +1165,9 @@ int main( } ObjectPositionBuffer mtdBuffer; -#ifdef IVAS_FLOAT_FIXED outBuffer.pq_fact = &outBuffer.q_factor; Word16 subframe_len = (Word16) ( args.sampleRate / ( 200 ) ); // sample rate /FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES Word16 gd_bits = find_guard_bits( subframe_len ); -#endif while ( 1 ) { int16_t num_in_channels; @@ -1328,10 +1189,8 @@ int main( /* Convert from int to float and from interleaved to packed */ convertInputBuffer( inpInt16Buffer, numSamplesRead, inBuffer.config.numSamplesPerChannel, num_in_channels, inFloatBuffer ); -#ifdef IVAS_FLOAT_FIXED *outBuffer.pq_fact = 16 - ( gd_bits ); convertInputBuffer_fx( inpInt16Buffer, numSamplesRead, inBuffer.config.numSamplesPerChannel, num_in_channels, inInt32Buffer, *outBuffer.pq_fact ); -#endif int16_t num_subframes, sf_idx; num_subframes = (int16_t) args.render_framesize; @@ -1447,11 +1306,7 @@ int main( exit( -1 ); } IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.multiChannelBuses[i].inputChannelIndex, numChannels ); -#ifdef IVAS_FLOAT_FIXED if ( ( error = IVAS_REND_FeedInputAudio_fx( hIvasRend, mcIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, mcIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#endif { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1465,11 +1320,7 @@ int main( if ( i == 0 ) { IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.audioObjects[i].inputChannelIndex, args.inConfig.numAudioObjects ); -#ifdef IVAS_FLOAT_FIXED if ( ( error = IVAS_REND_FeedInputAudio_fx( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#endif { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1485,11 +1336,7 @@ int main( else { IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.audioObjects[i].inputChannelIndex, 1 ); -#ifdef IVAS_FLOAT_FIXED if ( ( error = IVAS_REND_FeedInputAudio_fx( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#else - if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, ismIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) -#endif { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); @@ -1511,19 +1358,11 @@ int main( exit( -1 ); } IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.ambisonicsBuses[i].inputChannelIndex, numChannels ); -#ifdef IVAS_FLOAT_FIXED if ( ( error = IVAS_REND_FeedInputAudio_fx( hIvasRend, sbaIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#else - if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, sbaIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } -#endif } for ( i = 0; i < args.inConfig.numMasaBuses; ++i ) @@ -1535,19 +1374,11 @@ int main( } IVAS_REND_ReadOnlyAudioBuffer tmpBuffer = getReadOnlySubBuffer( inBuffer, (int16_t) args.inConfig.masaBuses[i].inputChannelIndex, numChannels ); -#ifdef IVAS_FLOAT_FIXED IF( ( error = IVAS_REND_FeedInputAudio_fx( hIvasRend, masaIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) { fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); exit( -1 ); } -#else - if ( ( error = IVAS_REND_FeedInputAudio( hIvasRend, masaIds[i], tmpBuffer ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "Error: %s\n", ivas_error_to_string( error ) ); - exit( -1 ); - } -#endif if ( isCurrentFrameMultipleOf20ms ) { @@ -1577,29 +1408,21 @@ int main( int16_t num_out_channels; num_out_channels = outBuffer.config.numChannels; -#ifdef IVAS_FLOAT_FIXED /* Convert from float to int and from packed to interleaved. * Values in outFloatBuffer are guaranteed to be within range INT16_MIN:INT16_MAX */ if ( *outBuffer.pq_fact == 0 ) { -#endif convertOutputBuffer( outFloatBuffer, outBuffer.config.numSamplesPerChannel, num_out_channels, outInt16Buffer ); -#ifdef IVAS_FLOAT_FIXED } else { convertOutputBuffer_fx( outInt32Buffer, outBuffer.config.numSamplesPerChannel, num_out_channels, outInt16Buffer, *outBuffer.pq_fact ); } -#endif if ( delayNumSamples == -1 ) { if ( args.delayCompensationEnabled ) { -#ifdef IVAS_FLOAT_FIXED IF( IVAS_REND_GetDelay_fx( hIvasRend, &delayNumSamples, &delayTimeScale ) != IVAS_ERR_OK ) -#else - if ( IVAS_REND_GetDelay( hIvasRend, &delayNumSamples, &delayTimeScale ) != IVAS_ERR_OK ) -#endif // IVAS_FLOAT_FIXED { fprintf( stderr, "\nUnable to get delay of renderer!\n" ); exit( -1 ); @@ -1769,10 +1592,8 @@ int main( free( inFloatBuffer ); free( outInt16Buffer ); free( outFloatBuffer ); -#ifdef IVAS_FLOAT_FIXED free( outInt32Buffer ); free( inInt32Buffer ); -#endif for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { MasaFileReader_close( &masaReaders[i] ); @@ -2578,13 +2399,11 @@ void getMetadataFromFileReader( fprintf( stderr, "\nError (%s) while reading ISM metadata from: %s\n\n", ivas_error_to_string( error ), IsmFileReader_getFilePath( ismReader ) ); exit( -1 ); } -#ifdef IVAS_FLOAT_FIXED objectMetadataBuffer->positions[objIdx].azimuth_fx = (Word32) ( ismMetadata.azimuth * ( 1 << 22 ) ); objectMetadataBuffer->positions[objIdx].elevation_fx = (Word32) ( ismMetadata.elevation * ( 1 << 22 ) ); objectMetadataBuffer->positions[objIdx].radius_fx = (Word16) ( ismMetadata.radius * ( 1 << 9 ) ); objectMetadataBuffer->positions[objIdx].yaw_fx = (Word32) ( ismMetadata.yaw * ( 1 << 22 ) ); objectMetadataBuffer->positions[objIdx].pitch_fx = (Word32) ( ismMetadata.pitch * ( 1 << 22 ) ); -#endif // DEBUG objectMetadataBuffer->positions[objIdx].azimuth = ismMetadata.azimuth; objectMetadataBuffer->positions[objIdx].elevation = ismMetadata.elevation; @@ -2649,13 +2468,11 @@ static void IsmPositionProvider_getNextFrame( objectMetadataBuffer->positions[objIdx].radius = 1.0f; objectMetadataBuffer->positions[objIdx].yaw = 0.0f; objectMetadataBuffer->positions[objIdx].pitch = 0.0f; -#ifdef IVAS_FLOAT_FIXED objectMetadataBuffer->positions[objIdx].azimuth_fx = 0; objectMetadataBuffer->positions[objIdx].elevation_fx = 0; objectMetadataBuffer->positions[objIdx].radius_fx = 512; objectMetadataBuffer->positions[objIdx].yaw_fx = 0; objectMetadataBuffer->positions[objIdx].pitch_fx = 0; -#endif objectMetadataBuffer->positions[objIdx].non_diegetic_flag = 0; } @@ -2671,10 +2488,8 @@ static void IsmPositionProvider_getNextFrame( /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].elevation = min( max( objectMetadataBuffer->positions[objIdx].elevation, -90 ), 90 ); -#ifdef IVAS_FLOAT_FIXED objectMetadataBuffer->positions[objIdx].azimuth_fx = (Word32) ( objectMetadataBuffer->positions[objIdx].azimuth * ( 1 << 22 ) ); objectMetadataBuffer->positions[objIdx].elevation_fx = (Word32) ( objectMetadataBuffer->positions[objIdx].elevation * ( 1 << 22 ) ); -#endif // IVAS_FLOAT_FIXED /* Wrap yaw to lie within (-180, 180] range */ while ( objectMetadataBuffer->positions[objIdx].yaw < 0.0f ) { @@ -2687,10 +2502,8 @@ static void IsmPositionProvider_getNextFrame( /* Clamp pitch to lie within [-90, 90] range (can't be wrapped easily) */ objectMetadataBuffer->positions[objIdx].pitch = min( max( objectMetadataBuffer->positions[objIdx].pitch, -90 ), 90 ); -#ifdef IVAS_FLOAT_FIXED objectMetadataBuffer->positions[objIdx].yaw_fx = (Word32) ( ( objectMetadataBuffer->positions[objIdx].yaw ) * ( 1 << Q22 ) ); objectMetadataBuffer->positions[objIdx].pitch_fx = (Word32) ( ( objectMetadataBuffer->positions[objIdx].pitch ) * ( 1 << Q22 ) ); -#endif } ++positionProvider->frameCounter; @@ -2997,10 +2810,8 @@ static void parseObjectPosition( position->azimuth = meta_prm[0]; position->elevation = meta_prm[1]; -#ifdef IVAS_FLOAT_FIXED position->azimuth_fx = (Word32) ( meta_prm[0] * ( 1 << 22 ) ); position->elevation_fx = (Word32) ( meta_prm[1] * ( 1 << 22 ) ); -#endif // IVAS_FLOAT_FIXED position->radius = meta_prm[2]; position->yaw = meta_prm[5]; position->pitch = meta_prm[6]; @@ -3525,7 +3336,6 @@ static void convertInputBuffer( return; } -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * convertInputBuffer() @@ -3605,7 +3415,6 @@ static void convertOutputBuffer_fx( return; } -#endif /*--------------------------------------------------------------------------* * convertOutputBuffer() * diff --git a/lib_com/ACcontextMapping.c b/lib_com/ACcontextMapping.c index 86c7e7bd8..bfe9e125a 100644 --- a/lib_com/ACcontextMapping.c +++ b/lib_com/ACcontextMapping.c @@ -48,25 +48,6 @@ *-------------------------------------------------------------------*/ /*! r: index of next coefficient */ -#ifndef IVAS_FLOAT_FIXED -int16_t get_next_coeff_mapped_ivas( - int16_t ii[2], /* i/o: coefficient indexes */ - int32_t *pp, /* o : peak(1)/hole(0) indicator */ - int16_t *idx, /* o : index in unmapped domain */ - CONTEXT_HM_CONFIG *hm_cfg /* i : HM configuration */ -) -{ - uint32_t p; - - p = ( ii[1] - hm_cfg->numPeakIndices ) & ( hm_cfg->indexBuffer[ii[1]] - hm_cfg->indexBuffer[ii[0]] ); - p >>= sizeof( p ) * 8 - 1; - *pp = p; - *idx = ii[p]; - ii[p]++; - - return hm_cfg->indexBuffer[*idx]; -} -#else Word16 get_next_coeff_mapped_ivas_fx( Word16 ii[2], /* i/o: coefficient indexes Q0*/ Word32 *pp, /* o : peak(1)/hole(0) indicator Q0*/ @@ -87,49 +68,3 @@ Word16 get_next_coeff_mapped_ivas_fx( return hm_cfg->indexBuffer[*idx]; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_next_coeff_unmapped_ivas() - * - * - *-------------------------------------------------------------------*/ - -/*! r: index of next coefficient */ -int16_t get_next_coeff_unmapped_ivas( - int16_t *ii, /* i/o: coefficient indexes */ - int16_t *idx /* o : index in unmapped domain */ -) -{ - *idx = *ii; - ( *ii )++; - - return *idx; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * update_mixed_context_ivas() - * - * - *-------------------------------------------------------------------*/ - -int32_t update_mixed_context_ivas( - int32_t ctx, - int16_t a ) -{ - int32_t t; - - t = 1 - 13 + ( a & ~1 ) * ( ( a >> 2 ) + 1 ); - - if ( t > 0 ) - { - t = min( ( a >> 3 ), 2 ); - } - - return ( ctx & 0xf ) * 16 + t + 13; -} -#endif diff --git a/lib_com/ACcontextMapping_fx.c b/lib_com/ACcontextMapping_fx.c index 9fa89cb7e..a95ffb1c7 100644 --- a/lib_com/ACcontextMapping_fx.c +++ b/lib_com/ACcontextMapping_fx.c @@ -78,7 +78,6 @@ Word16 update_mixed_context( return add( shl( s_and( ctx, 0xf ), 4 ), add( t, 13 ) ); } -#ifdef IVAS_FLOAT_FIXED Word32 update_mixed_context_ivas_fx( Word32 ctx, /* Q0 */ Word16 a /* Q0 */ @@ -96,4 +95,3 @@ Word32 update_mixed_context_ivas_fx( } return L_add( L_shl( L_and( ctx, 0xf ), 4 ), L_add( t32, 13 ) ); } -#endif diff --git a/lib_com/ari.c b/lib_com/ari.c index 6f13d1e97..edf33aee3 100644 --- a/lib_com/ari.c +++ b/lib_com/ari.c @@ -40,30 +40,3 @@ #include "basop_util.h" #include "cnst.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------- - Ari 14 bits common routines - -------------------------------------------------------------*/ - -/** - * \brief Integer Multiply - * - * \param[i] r - * \param[i] c - * - * \return r*c - */ -int32_t mul_sbc_14bits_ivas( - int32_t r, - int32_t c ) -{ - int32_t temp; - /*function in line*/ - temp = ( ( (int32_t) r ) * ( (int32_t) c ) ) >> stat_bitsnew; - return temp; - - /*function in line*/ -} -#endif diff --git a/lib_com/ari_hm.c b/lib_com/ari_hm.c index f96f73b33..c3391f00e 100644 --- a/lib_com/ari_hm.c +++ b/lib_com/ari_hm.c @@ -50,57 +50,6 @@ * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void UnmapIndex_ivas( - const int16_t PeriodicityIndex, - const int16_t Bandwidth, - const int16_t LtpPitchLag, - const int16_t SmallerLags, - int16_t *FractionalResolution, - int32_t *Lag ) -{ - if ( ( LtpPitchLag > 0 ) && ( PeriodicityIndex & kLtpHmFlag ) ) - { - int16_t LtpPitchIndex, Multiplier; - LtpPitchIndex = PeriodicityIndex >> 9; - Multiplier = PeriodicityIndex & 0xff; - assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); - assert( 1 <= Multiplier && Multiplier <= ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ) ); - *FractionalResolution = kLtpHmFractionalResolution; - *Lag = ( LtpPitchLag * (int32_t) ( 4 * Ratios[Bandwidth][LtpPitchIndex][Multiplier - 1] ) ) >> 2; - } - else - { - if ( PeriodicityIndex < 16 ) - { - *FractionalResolution = 3; - *Lag = PeriodicityIndex + GET_ADJ( 0, 6 ); - } - else if ( PeriodicityIndex < 80 ) - { - *FractionalResolution = 4; - *Lag = PeriodicityIndex + GET_ADJ( 16, 8 ); - } - else if ( PeriodicityIndex < 208 ) - { - *FractionalResolution = 3; - *Lag = PeriodicityIndex + GET_ADJ( 80, 12 ); - } - else if ( PeriodicityIndex < 224 || SmallerLags ) - { - *FractionalResolution = 1; - *Lag = PeriodicityIndex + GET_ADJ( 208, 28 ); - } - else - { - *FractionalResolution = 0; - *Lag = PeriodicityIndex + GET_ADJ( 224, 188 ); - } - } - - return; -} -#endif void UnmapIndex_fx( const Word16 PeriodicityIndex, /* Q0 */ @@ -169,104 +118,12 @@ void UnmapIndex_fx( } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ConfigureContextHm_ivas() - * - * - *-------------------------------------------------------------------*/ - -void ConfigureContextHm_ivas( - const int16_t NumCoeffs, /* (I) Number of coefficients */ - const int16_t TargetBits, /* (I) Target bit budget (excl. Done flag) */ - const int16_t PeriodicityIndex, /* (I) Pitch related index */ - const int16_t LtpPitchLag, /* (I) TCX-LTP pitch in F.D. */ - CONTEXT_HM_CONFIG *hm_cfg /* (O) Context-based harmonic model configuration */ -) -{ - int16_t Bandwidth, SmallerLags; - int32_t i, Lag; - int16_t j, FractionalResolution; - int32_t Limit; - int16_t Index; - int16_t *tmp; - - Bandwidth = 0; - if ( NumCoeffs >= 256 ) - { - Bandwidth = 1; - } - - SmallerLags = 0; - - if ( TargetBits <= kSmallerLagsTargetBitsThreshold || Bandwidth == 0 ) - { - SmallerLags = 1; - } - - UnmapIndex_ivas( PeriodicityIndex, Bandwidth, LtpPitchLag, SmallerLags, &FractionalResolution, &Lag ); - - /* Set up and fill peakIndices */ - hm_cfg->peakIndices = hm_cfg->indexBuffer; - tmp = hm_cfg->peakIndices; - Limit = ( NumCoeffs - 1 ) << FractionalResolution; - - for ( i = Lag; i < Limit; i += Lag ) - { - Index = (int16_t) ( i >> FractionalResolution ); - *tmp++ = Index - 1; - *tmp++ = Index; - *tmp++ = Index + 1; - } - hm_cfg->numPeakIndices = (int16_t) ( tmp - hm_cfg->indexBuffer ); - - /* Set up and fill holeIndices */ - hm_cfg->holeIndices = hm_cfg->indexBuffer + hm_cfg->numPeakIndices; - tmp = hm_cfg->holeIndices; - Index = 0; - - for ( j = 0; j < hm_cfg->numPeakIndices; j += 3 ) - { - for ( ; Index < hm_cfg->peakIndices[j]; ++Index ) - { - *tmp++ = Index; - } - Index += 3; /* Skip the peak */ - } - - for ( ; Index < NumCoeffs; ++Index ) - { - *tmp++ = Index; - } - hm_cfg->numHoleIndices = (int16_t) ( tmp - hm_cfg->holeIndices ); - /* Add extremal element signaling the end of the buffer */ - *tmp++ = NumCoeffs; - - return; -} -#endif - - /*-------------------------------------------------------------------* * CountIndexBits_ivas() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t CountIndexBits_ivas( - const int16_t Bandwidth, - const int16_t PeriodicityIndex ) -{ - if ( PeriodicityIndex & kLtpHmFlag ) - { - int16_t LtpPitchIndex = PeriodicityIndex >> 9; - return NumRatioBits[Bandwidth][LtpPitchIndex]; - } - - return 8; -} -#endif Word16 CountIndexBits_fx( Word16 Bandwidth, /* Q0 */ @@ -291,66 +148,6 @@ Word16 CountIndexBits_fx( #define WMC_TOOL_SKIP -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tcx_hm_render_ivas() - * - * - *-------------------------------------------------------------------*/ - -Word16 tcx_hm_render_ivas( - const Word16 lag, /* i : pitch lag Q0*/ - const Word16 fract_res, /* i : fractional resolution of the lag Q0*/ - Word16 p[] /* o : harmonic model Q13*/ -) -{ - Word16 k; - Word32 f0, tmp32; - Word16 height, PeakDeviation, tmp; - - /* Set up overall shape */ - - f0 = L_shl( lag, sub( 15, fract_res ) ); /* Q15 */ - - tmp32 = Mpy_32_16_1( f0, -26474 ); - tmp32 = L_shr_r( BASOP_Util_InvLog2( L_shl( tmp32, 7 ) ), 2 ); - tmp32 = L_sub( 603979776L /* 1.125 in Q29 */, tmp32 ); /* Q29 */ - tmp32 = L_add( L_add( tmp32, tmp32 ), Mpy_32_16_1( tmp32, 26214 /* 0.8 in Q15 */ ) ); /* Q29 */ - height = round_fx( tmp32 ); /* Q13 */ - - tmp32 = Mpy_32_16_1( f0, -18910 ); - tmp32 = L_shr_r( BASOP_Util_InvLog2( L_shl( tmp32, 7 ) ), 2 ); /* Q30 */ - tmp32 = L_sub( 1395864371L /* 1.3 in Q30 */, tmp32 ); /* Q30 */ - PeakDeviation = round_fx( tmp32 ); /* Q14 */ - - IF( sub( 13915, PeakDeviation ) > 0 ) - { - /* A bit error was encountered */ - return 1; - } - ELSE - { - tmp = div_s( 13915, PeakDeviation ); /* Q15 */ - tmp = mult_r( tmp, tmp ); /* Q15 */ - } - - /* Render the prototype peak */ - p[kTcxHmParabolaHalfWidth] = height; /* Q13 */ - move16(); - - FOR( k = 1; k <= kTcxHmParabolaHalfWidth; ++k ) - { - p[kTcxHmParabolaHalfWidth + k] = round_fx( Mpy_32_16_1( BASOP_Util_InvLog2( L_shl( L_mult0( mult0( negate( k ), k ), tmp ), 10 ) ), height ) ); /* Q13 */ - } - /* Mirror */ - FOR( k = -kTcxHmParabolaHalfWidth; k < 0; ++k ) - { - p[kTcxHmParabolaHalfWidth + k] = p[kTcxHmParabolaHalfWidth - k]; /* Q13 */ - } - - return 0; -} -#endif Word32 tcx_hm_render_fx( const Word32 lag, /* i: pitch lag Q0 */ @@ -408,54 +205,6 @@ Word32 tcx_hm_render_fx( return 0; } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tcx_hm_modify_envelope_ivas() - * - * - *-------------------------------------------------------------------*/ - -void tcx_hm_modify_envelope_ivas( - const Word16 gain, /* i : HM gain Q11*/ - const Word16 lag, /* Q0 */ - const Word16 fract_res, /* Q0 */ - const Word16 p[], /* i : harmonic model Q13*/ - Word32 env[], /* i/o: envelope Q16*/ - const Word16 L_frame /* i : number of spectral lines Q0*/ -) -{ - Word16 k, h, x; - Word16 inv_shape[2 * kTcxHmParabolaHalfWidth + 1]; /* Q15 */ - - if ( gain == 0 ) - { - return; - } - - FOR( k = 0; k < 2 * kTcxHmParabolaHalfWidth + 1; ++k ) - { - inv_shape[k] = div_s( 512 /* 1 in Q24 */, add( 512 /* 1 in Q24 */, round_fx( L_mult( gain, p[k] ) ) ) ); /* Q15 */ - move16(); - } - - h = 1; - k = shr( lag, fract_res ); - - WHILE( k <= L_frame + kTcxHmParabolaHalfWidth - 1 ) - { - - FOR( x = max( 0, k - kTcxHmParabolaHalfWidth ); x <= min( k + kTcxHmParabolaHalfWidth, L_frame - 1 ); ++x ) - { - env[x] = Mpy_32_16_1( env[x], inv_shape[x - k + kTcxHmParabolaHalfWidth] ); /* Q16 */ - move32(); - } - h = add( h, 1 ); /* Q0 */ - k = extract_l( L_shr( L_mult0( h, lag ), fract_res ) ); /* Q0 */ - } - - return; -} -#endif void tcx_hm_modify_envelope_fx( const Word16 gain, /* i: HM gain Q11 */ diff --git a/lib_com/arith_coder.c b/lib_com/arith_coder.c index a3ac2d8e9..a6bf4520a 100644 --- a/lib_com/arith_coder.c +++ b/lib_com/arith_coder.c @@ -129,380 +129,6 @@ Word16 expfp_evs_fx( * * NOTE: This function must be in sync with ari_decode_14bits_pow_ivas() */ -#ifndef IVAS_FLOAT_FIXED -void powfp_odd2_evs( - const Word16 base, /* Q15 */ - const Word16 exp, /* Q0 */ - Word16 *pout1, /* Q15 */ - Word16 *pout2 /* Q15 */ -) -{ - /* this version is in sync with ari_enc_14bits_pow() - * that is, we have to start multiplication from the largest power-of-two, in order to - * get the rounding errors to appear at the same places */ - Word16 pows[12]; /* powers of two exponents*/ - Word16 exp2; - Word16 out, out2; - Word16 k, h, maxk; - - assert( exp >= 0 ); - - out = base; - move16(); - out2 = 0x7FFF; - move16(); - IF( exp != 0 ) - { - exp2 = sub( exp, 1 ); - maxk = sub( 15, norm_s( exp ) ); - assert( maxk < 12 ); - - pows[0] = base; /* Q15 */ - move16(); - FOR( k = 0; k < maxk; k++ ) - { - pows[k + 1] = mult_r( pows[k], pows[k] ); /* Q15 */ - move16(); - } - k--; - h = shl( 1, k ); /* highest bit of exp2 */ - out2 = base; /* Q15 */ - move16(); - out = mult_r( out, pows[k + 1] ); /* we already know that "exp" has the highest bit set to one since we calculated .. */ - /* .. the effective length of "exp" earlier on, thus we omit the branch for out2 */ - if ( s_and( exp2, h ) != 0 ) - { - out2 = mult_r( out2, pows[k + 1] ); /* Q15 */ - } - - h = shr( h, 1 ); - FOR( k = k - 1; k >= 0; k-- ) - { - if ( s_and( exp, h ) != 0 ) - { - out = mult_r( out, pows[k + 1] ); /* Q15 */ - } - - if ( s_and( exp2, h ) != 0 ) - { - out2 = mult_r( out2, pows[k + 1] ); /* Q15 */ - } - - h = shr( h, 1 ); - } - } - - *pout1 = out2; /* Q15 */ - move16(); - *pout2 = out; /* Q15 */ - move16(); - - return; -} - -/*------------------------------------------------------------------------ - * Function: tcx_arith_scale_envelope_flt - * - * For optimal performance of the arithmetic coder, the envelope shape must - * be scaled such that the expected bit-consumption of a signal that - * follows the scaled shape coincides with the target bitrate. - * This function calculates a first-guess scaling and then uses the bi-section - * search to find the optimal scaling. - * - * We assume that lines follow the Laplacian distribution, whereby the expected - * bit-consumption would be log2(2*e*s[k]), where s[k] is the envelope value - * for the line in question. However, this theoretical formula assumes that - * all lines are encoded with magnitude+sign. Since the sign is unnecessary - * for 0-values, that estimate of bit-consumption is biased when s[k] is small. - * Analytical solution of the expectation for small s[k] is difficult, whereby - * we use the approximation log2(2*e*s[k] + 0.15 + 0.035 / s[k]) which is accurate - * on the range 0.08 to 1.0. - * - * NOTE: This function must be bit-exact on all platforms such that encoder - * and decoder remain synchronized. - *-------------------------------------------------------------------------*/ - -void tcx_arith_scale_envelope_ivas( - const Word16 L_spec_core, /* i : number of lines to scale Q0 */ - Word16 L_frame, /* i : number of lines Q0 */ - const Word32 env[], /* i : unscaled envelope Q16 */ - Word16 target_bits, /* i : number of available bits Q0 */ - const Word16 low_complexity, /* i : low-complexity Q0 */ - Word16 s_env[], /* o : scaled envelope Q15-e */ - Word16 *s_env_e /* o : scaled envelope exponent Q0 */ -) -{ - Word32 ienv[N_MAX_ARI]; - Word16 scale, iscale, iscale_e, a_e, b, b_e; - Word16 lob, hib, adjust; - Word16 k, iter, max_iter, lob_bits, hib_bits; - Word16 statesi, bits; - Word32 mean, a, s, L_tmp; - Word16 mean_e, tmp, tmp2; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - - lob_bits = 0; - move16(); - hib_bits = 0; - move16(); - - /* Boosting to account for expected spectrum truncation (kMax) */ - /* target_bits = (int16_t)(target_bits * (1.2f - 0.00045f * target_bits + 0.00000025f * target_bits * target_bits)); */ - L_tmp = L_shr( Mpy_32_16_1( L_mult0( target_bits, target_bits ), 17180 ), 6 ); /* Q15; 17180 -> 0.00000025f (Q36) */ - L_tmp = L_sub( L_tmp, L_shr( L_mult0( target_bits, 30199 ), 11 ) ); /* Q15; 30199 -> 0.00045f (Q26) */ - L_tmp = L_add( L_tmp, 39322 ); /* Q15; 39322 -> 1.2f (Q15) */ - L_tmp = Mpy_32_16_1( L_tmp, target_bits ); /* Q0 */ - assert( LE_32( L_tmp, 32768 ) ); - target_bits = extract_l( L_tmp ); /* Q0 */ - - /* Calculate inverse envelope and find initial scale guess based on mean */ - mean = L_deposit_l( 0 ); - FOR( k = 0; k < L_frame; k++ ) - { - /* ienv[k] = 1.0f / env[k]; - mean += ienv[k]; */ - - tmp = norm_l( env[k] ); - tmp2 = sub( 15, tmp ); -#ifndef BASOP_NOGLOB - tmp = Inv16( round_fx( L_shl( env[k], tmp ) ), &tmp2 ); -#else /* BASOP_NOGLOB */ - tmp = Inv16( round_fx_o( L_shl( env[k], tmp ), &Overflow ), &tmp2 ); /* exp(tmp2) */ -#endif /* BASOP_NOGLOB */ - ienv[k] = L_shl( L_deposit_h( tmp ), sub( tmp2, 15 ) ); /* Q16 */ - move32(); - mean = L_add( mean, ienv[k] ); /* Q16 */ - } - tmp = norm_s( L_frame ); - tmp2 = div_s( 8192, shl( L_frame, tmp ) ); /* Q15 */ - tmp = shl( tmp2, sub( tmp, 7 ) ); - mean = L_shr( Mpy_32_16_1( mean, tmp ), 6 ); /* Q16 */ - - /* Rate dependent compensation to get closer to the target on average */ - /* mean = powf(mean, (float)L_frame / target_bits * 0.357f); */ - tmp = BASOP_Util_Divide1616_Scale( L_frame, target_bits, &tmp2 ); /* exp(tmp2) */ - tmp = mult_r( tmp, 11698 /*0.357f Q15*/ ); - mean = BASOP_Util_fPow( mean, 15, L_deposit_h( tmp ), tmp2, &mean_e ); /* exp(mean_e) */ - - /* Find first-guess scaling coefficient "scale" such that if "mean" is the - * mean of the envelope, then the mean bit-consumption is approximately - * - * log2(2*e*mean*scale + 0.15 + 0.035/(mean*scale)) * L_frame = target_bits - */ - /* a = 2*2.71828183f*mean*mean; */ - tmp = round_fx( mean ); /* Q15 - mean_e */ - a = L_mult( mult_r( tmp, 22268 /*2.71828183f Q13*/ ), tmp ); /* 2 * mean_e + 3 */ - a_e = add( shl( mean_e, 1 ), 3 ); - - /* b = (0.15f - powf(2.0f, target_bits/(float)L_frame)) * mean; */ - tmp = BASOP_Util_Divide1616_Scale( target_bits, L_frame, &tmp2 ); /* exp(tmp2) */ - tmp = round_fx( BASOP_util_Pow2( L_deposit_h( tmp ), tmp2, &tmp2 ) ); - b_e = BASOP_Util_Add_MantExp( 4915 /*0.15f in Q15*/, 0, negate( tmp ), tmp2, &b ); - b = mult_r( b, round_fx( mean ) ); /* exp(b_e + mean_e) */ - b_e = add( b_e, mean_e ); - - /* scale = (-b + sqrtf(b*b - 4.0f*a*0.035f)) / (2.0f * a); */ -#ifndef BASOP_NOGLOB - tmp = round_fx( BASOP_Util_Add_Mant32Exp( L_mult( b, b ), shl( b_e, 1 ), Mpy_32_16_1( a, FL2WORD16( -4.0f * 0.035f ) ), a_e, &tmp2 ) ); -#else - tmp = round_fx_o( BASOP_Util_Add_Mant32Exp( L_mult( b, b ), shl( b_e, 1 ), Mpy_32_16_1( a, -4588 /*-4.0f*0.035f Q15*/ ), a_e, &tmp2 ), &Overflow ); /* Q15 - a_e */ -#endif - - IF( tmp <= 0 ) - { - tmp = 0; - move16(); - FOR( k = 0; k < L_frame; k++ ) - { - s_env[k] = 0; - move16(); - } - } - ELSE - { - tmp = Sqrt16( tmp, &tmp2 ); - } - - tmp2 = BASOP_Util_Add_MantExp( negate( b ), b_e, tmp, tmp2, &scale ); - scale = BASOP_Util_Divide1616_Scale( scale, round_fx( a ), &tmp ); /* exp(tmp) */ -#ifndef BASOP_NOGLOB - scale = shl( scale, sub( sub( add( tmp, tmp2 ), a_e ), 1 ) ); /* Q15 */ -#else - scale = shl_o( scale, sub( sub( add( tmp, tmp2 ), a_e ), 1 ), &Overflow ); /* Q15 */ -#endif - - /* iscale = 1.0f / scale; */ - iscale_e = 0; - move16(); - iscale = Inv16( s_max( 1, scale ), &iscale_e ); /* exp(iscale_e) */ - - lob = 0; - move16(); - hib = 0; - move16(); - - max_iter = 2; /* Q0 */ - move16(); - if ( low_complexity ) - { - max_iter = 1; /* Q0 */ - move16(); - } - - FOR( iter = 0; iter < max_iter; iter++ ) - { - statesi = 0x7FFF; /* 1 in Q15 */ - move16(); - bits = 0; - move16(); - - FOR( k = 0; k < L_frame; k++ ) - { - s = Mpy_32_16_1( ienv[k], scale ); /* Q16 */ - - IF( L_sub( s, 5243l /*0.08f Q16*/ ) <= 0 ) - { - /* If s = 0.08, the expected bit-consumption is log2(1.0224). Below 0.08, the bit-consumption - estimate function becomes inaccurate, so use log2(1.0224) for all values below 0.08. */ - /* round(state * 1.0224 * 32768) */ - statesi = mult_r( statesi, 16751 /*1.0224 Q14*/ ); /* Q14 */ - tmp = norm_s( statesi ); - statesi = shl( statesi, tmp ); /* Q15 */ - bits = add( bits, sub( 1, tmp ) ); /* Q0 */ - } - ELSE IF( L_sub( s, 16711680l /*255.0 Q16*/ ) <= 0 ) - { - /* a = 5.436564f * s + 0.15f + 0.035f * env[k] * iscale; */ - L_tmp = L_shl( Mpy_32_16_1( s, 22268 /*5.436564f Q12*/ ), 3 ); /* Q16 */ - L_tmp = L_add( L_tmp, 9830l /*0.15f Q16*/ ); /* Q16 */ - L_tmp = L_add( L_tmp, L_shl( Mpy_32_16_1( env[k], mult_r( 1147 /*0.035f Q15*/, iscale ) ), iscale_e ) ); /* Q16 */ - - tmp = norm_l( L_tmp ); -#ifndef BASOP_NOGLOB - statesi = mult_r( statesi, round_fx( L_shl( L_tmp, tmp ) ) ); -#else /* BASOP_NOGLOB */ - statesi = mult_r( statesi, round_fx_o( L_shl( L_tmp, tmp ), &Overflow ) ); /* */ -#endif /* BASOP_NOGLOB */ - bits = add( bits, sub( 15, tmp ) ); /* Q0 */ - - tmp = norm_s( statesi ); - statesi = shl( statesi, tmp ); - bits = sub( bits, tmp ); /* Q0 */ - } - ELSE - { - /* for large envelope values, s > 255, bit consumption is approx log2(2*e*s) - * further, we use round(log2(x)) = floor(log2(x)+0.5) = floor(log2(x*sqrt(2))) */ - /* a = 5.436564f * s; */ - L_tmp = Mpy_32_16_1( s, 31492 /*5.436564f * 1.4142f Q12*/ ); /* Q13 */ - bits = add( bits, sub( 17, norm_l( L_tmp ) ) ); /* Q0 */ - } - } - - IF( sub( bits, target_bits ) <= 0 ) - { - /* Bits leftover => scale is too small */ - lob = scale; /* Q0 */ - move16(); - lob_bits = bits; /* Q0 */ - move16(); - - IF( hib > 0 ) /* Bisection search */ - { - adjust = div_s( sub( hib_bits, target_bits ), sub( hib_bits, lob_bits ) ); /* Q15 */ - scale = add( mult_r( sub( lob, hib ), adjust ), hib ); /* Q0 */ - } - ELSE - { - /* Initial scale adaptation */ - /* adjust = 1.05f * target_bits / (float)bits; - scale *= adjust; */ - adjust = mult_r( 17203 /*1.05f Q14*/, target_bits ); /* Q15 */ - adjust = BASOP_Util_Divide1616_Scale( adjust, bits, &tmp ); /* exp(tmp) */ - scale = shl( mult_r( scale, adjust ), add( 1, tmp ) ); - } - } - ELSE - { - /* Ran out of bits => scale is too large */ - hib = scale; - move16(); - hib_bits = bits; /* Q0 */ - move16(); - - IF( lob > 0 ) /* Bisection search */ - { - adjust = div_s( sub( hib_bits, target_bits ), sub( hib_bits, lob_bits ) ); /* Q15 */ - scale = add( mult_r( sub( lob, hib ), adjust ), hib ); /* Q0 */ - } - ELSE - { /* Initial scale adaptation */ - test(); - IF( target_bits <= 0 || bits <= 0 ) /* safety check in case of bit errors */ - { - adjust = 0; - move16(); - - FOR( k = 0; k < L_frame; k++ ) - { - s_env[k] = 0; /* Q15 - e */ - move16(); - } - } - ELSE - { - adjust = div_s( mult_r( 31130 /*0.95f Q15*/, target_bits ), bits ); /* Q15 */ - } - scale = mult_r( scale, adjust ); - } - } - iscale_e = 0; - move16(); - - IF( scale == 0 ) /* safety check in case of bit errors */ - { - iscale = 0; - move16(); - - FOR( k = 0; k < L_frame; k++ ) - { - s_env[k] = 0; - move16(); - } - } - ELSE - { - iscale = Inv16( scale, &iscale_e ); /* exp(iscale_e) */ - } - } - L_frame = L_spec_core; /* Q0 */ - move16(); - - tmp = getScaleFactor32( env, L_frame ); - *s_env_e = sub( add( 15, iscale_e ), tmp ); - move16(); - BASOP_SATURATE_WARNING_OFF; -#ifndef BASOP_NOGLOB - a = L_shl( 1265000, sub( 15, *s_env_e ) ); -#else /* BASOP_NOGLOB */ - a = L_shl_o( 1265000, sub( 15, *s_env_e ), &Overflow ); -#endif /* BASOP_NOGLOB */ - BASOP_SATURATE_WARNING_ON; - - FOR( k = 0; k < L_frame; k++ ) - { - L_tmp = Mpy_32_16_1( L_shl( env[k], tmp ), iscale ); /* Q31 - e */ - L_tmp = L_min( L_tmp, a ); /* Q31 - e */ - s_env[k] = round_fx( L_tmp ); /* Q15 - e */ - move16(); - } - - return; -} -#endif /*------------------------------------------------------------------------ * Function: tcx_arith_render_envelope_flt diff --git a/lib_com/basop_settings.h b/lib_com/basop_settings.h index eb48ade52..a2ef70417 100644 --- a/lib_com/basop_settings.h +++ b/lib_com/basop_settings.h @@ -55,7 +55,6 @@ #pragma warning( disable : 4310 ) #endif -#ifdef IVAS_FLOAT_FIXED /*! \def Macro converts a float < 1 to Word32 fixed point with saturation and rounding */ @@ -67,7 +66,6 @@ */ #define FL2WORD16( val ) \ ( Word16 )( ( ( val ) >= 0 ) ? ( ( ( (double) ( val ) * ( WORD16_FIX_SCALE ) + 0.5 ) >= (double) ( MAXVAL_WORD16 ) ) ? (int32_t) ( MAXVAL_WORD16 ) : (int32_t) ( (double) ( val ) * (double) ( WORD16_FIX_SCALE ) + 0.5 ) ) : ( ( ( (double) ( val ) * (WORD16_FIX_SCALE) -0.5 ) <= (double) ( MINVAL_WORD16 ) ) ? (int32_t) ( MINVAL_WORD16 ) : (int32_t) ( (double) ( val ) * (double) (WORD16_FIX_SCALE) -0.5 ) ) ) -#endif /*! \def Macro converts a Word32 fixed point to Word16 fixed point <1 with saturation @@ -75,35 +73,12 @@ #define WORD322WORD16( val ) \ ( ( ( ( ( ( val ) >> ( WORD32_BITS - WORD16_BITS - 1 ) ) + 1 ) > ( ( (int32_t) 1 << WORD16_BITS ) - 1 ) ) && ( (int32_t) ( val ) > 0 ) ) ? (Word16) (int16_t) ( ( (int32_t) 1 << ( WORD16_BITS - 1 ) ) - 1 ) : (Word16) (int16_t) ( ( ( ( val ) >> ( WORD32_BITS - WORD16_BITS - 1 ) ) + 1 ) >> 1 ) ) -#ifndef IVAS_FLOAT_FIXED -/*! - \def Macro converts a Word32 fixed point < 1 to float shifts result left by scale -*/ -#define WORD322FL_SCALE( x, scale ) ( ( (float) ( (int32_t) ( x ) ) ) / ( (int64_t) 1 << ( WORD32_BITS - 1 - ( scale ) ) ) ) -#endif -#ifndef IVAS_FLOAT_FIXED -/*! - \def Macro converts a float < 1 to Word32 fixed point with saturation and rounding, shifts result right by scale -*/ -/* Note: Both x and scale must be constants at compile time, scale must be in range -31..31 */ -#define FL2WORD32_SCALE( x, scale ) FL2WORD32( (double) ( x ) * ( (int64_t) 1 << ( WORD32_BITS - 1 - ( scale ) ) ) / ( (int64_t) 1 << ( WORD32_BITS - 1 ) ) ) -#endif - -#ifndef IVAS_FLOAT_FIXED -/*! - \def Macro converts a Word16 fixed point < 1 to float shifts result left by scale -*/ -#define WORD162FL_SCALE( x, scale ) ( ( (float) ( (int32_t) ( x ) ) ) / ( (int64_t) 1 << ( WORD16_BITS - 1 - ( scale ) ) ) ) -#endif - -#ifdef IVAS_FLOAT_FIXED /*! \def Macro converts a float < 1 to Word16 fixed point with saturation and rounding, shifts result right by scale */ /* Note: At compile time, x must be a float constant and scale must be an integer constant in range -15..15 */ #define FL2WORD16_SCALE( x, scale ) FL2WORD16( (float) ( x ) * ( (int64_t) 1 << ( WORD16_BITS - 1 - ( scale ) ) ) / ( (int64_t) 1 << ( WORD16_BITS - 1 ) ) ) -#endif /* Word16 Packed Type */ diff --git a/lib_com/bitalloc.c b/lib_com/bitalloc.c index 61a666e6a..c342c35a5 100644 --- a/lib_com/bitalloc.c +++ b/lib_com/bitalloc.c @@ -39,499 +39,11 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" +#include "prot_fx.h" #include "basop_util.h" #include "basop_proto_func.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * bitalloc() - * - * Adaptive bit allocation for 20kHz audio codec - *--------------------------------------------------------------------------*/ - -void bitalloc( - int16_t *y, /* i : reordered norm of sub-vectors */ - int16_t *idx, /* i : reordered sub-vector indices */ - int16_t sum, /* i : number of available bits */ - int16_t N, /* i : number of norms */ - int16_t K, /* i : maximum number of bits per dimension */ - int16_t *r, /* o : bit-allacation vector */ - const int16_t *sfmsize, /* i : band length */ - const int16_t hqswb_clas /* i : signal classification flag */ -) -{ - int16_t i, j, k, n, m, v, im; - int16_t diff, temp; - int16_t fac; - int16_t ii; - int16_t SFM_thr = SFM_G1G2; - - N -= 1; - - if ( hqswb_clas == HQ_HARMONIC ) - { - SFM_thr = 22; - } - - fac = 3; - K -= 2; - im = 1; - diff = sum; - n = sum >> 3; - for ( i = 0; i < n; i++ ) - { - k = 0; - temp = y[0]; - for ( m = 1; m < im; m++ ) - { - if ( temp < y[m] ) - { - temp = y[m]; - k = m; - } - } - - if ( temp < y[m] ) - { - k = m; - if ( im < N ) - { - im++; - } - } - - j = idx[k]; - if ( sum >= sfmsize[j] && r[j] < K ) - { - y[k] -= fac; - r[j]++; - if ( r[j] >= K ) - { - y[k] = MIN16B; - } - sum -= sfmsize[j]; - } - else - { - y[k] = MIN16B; - k++; - if ( k == im && im < N ) - { - im++; - } - } - - if ( sum < sfmsize[SFM_G1 - 1] || diff == sum ) /* sfmsize[SFM_G1-1] matches WID_G1, but also allows for extended BWs used in ACELP->HQ switching. */ - { - break; - } - - diff = sum; - v = N - 1; - - if ( k > v ) - { - for ( ii = 0; ii <= N; ii++ ) - { - if ( y[ii] > MIN16B ) - { - if ( ii < N ) - { - im = ii + 1; - } - - break; - } - } - } - } - - if ( sum >= sfmsize[SFM_G1] ) /* sfmsize[SFM_G1] matches WID_G2, but also allows for extended BWs used in ACELP->HQ switching. */ - { - for ( i = 0; i <= N; i++ ) - { - j = idx[i]; - if ( j >= SFM_G1 && j < SFM_thr && r[j] == 0 ) - { - r[j] = 1; - sum -= sfmsize[j]; - if ( sum < sfmsize[SFM_G1] ) - { - break; - } - } - } - } - - if ( sum >= sfmsize[SFM_G1] ) - { - for ( i = 0; i <= N; i++ ) - { - j = idx[i]; - if ( j >= SFM_G1 && j < SFM_thr && r[j] == 1 ) - { - r[j] = 2; - sum -= sfmsize[j]; - if ( sum < sfmsize[SFM_G1] ) - { - break; - } - } - } - } - - if ( sum >= sfmsize[SFM_G1 - 1] ) - { - for ( i = 0; i <= N; i++ ) - { - j = idx[i]; - if ( j < SFM_G1 && r[j] == 0 ) - { - r[j] = 1; - sum -= sfmsize[j]; - if ( sum < sfmsize[SFM_G1 - 1] ) - { - break; - } - } - } - } - - if ( sum >= sfmsize[SFM_G1 - 1] ) - { - for ( i = 0; i <= N; i++ ) - { - j = idx[i]; - if ( j < SFM_G1 && r[j] == 1 ) - { - r[j] = 2; - sum -= sfmsize[j]; - if ( sum < sfmsize[SFM_G1 - 1] ) - { - break; - } - } - } - } - - return; -} - - -#define WMC_TOOL_SKIP - -/*-------------------------------------------------------------------* - * BitAllocF() - * - * Fractional bit allocation - *-------------------------------------------------------------------*/ - -/*! r: Integer (truncated) number of allocated bits */ -int16_t BitAllocF( - Word16 *y, /* i : norm of sub-vectors Q0*/ - Word32 bit_rate, /* i : bitrate Q0*/ - Word16 B, /* i : number of available bits Q0*/ - Word16 N, /* i : number of sub-vectors Q0*/ - Word16 *R, /* o : bit-allocation indicator Q0*/ - Word16 *Rsubband, /* o : sub-band bit-allocation vector Q3*/ - const Word16 hqswb_clas, /* i : hq swb class Q0*/ - const Word16 num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE Q0*/ -) -{ - Word16 fac; - Word16 i, n, Nmin, Bits, bs, low_rate = 0; - - Word16 m_fx; - Word32 t_fx, B_fx; - Word32 L_tmp1, L_tmp2; - Word16 tmp, exp1, exp2; - Word32 Rsubband_w32_fx[NB_SFM]; /* Q15 */ - Word16 B_w16_fx; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - set_l( Rsubband_w32_fx, 0, NB_SFM ); - - fac = 3; - if ( L_sub( bit_rate, 32000 ) < 0 ) - { - bs = 2; /* Q0 */ - } - else - { - bs = 3; /* Q0 */ - } - low_rate = 1; /* Q0 */ - - Nmin = N; /* Q0 */ - if ( sub( Nmin, SFM_N ) > 0 ) - { - Nmin = SFM_N; /* Q0 */ - } - - /* Initial bits distribution */ - if ( sub( hqswb_clas, HQ_GEN_SWB ) == 0 || sub( hqswb_clas, HQ_GEN_FB ) == 0 ) - { - /* Initial bits distribution */ - L_tmp1 = 0; - m_fx = 0; - for ( i = 0; i < num_env_bands; i++ ) - { - L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] ); /* Q0 */ - } - L_tmp1 = L_msu0( L_tmp1, fac, B ); /* Q0 */ - - t_fx = 0; - n = 0; - tmp = add( band_end_HQ[num_env_bands - 1], shl( band_end_HQ[num_env_bands - 1], 1 ) ); /* Q0 */ - exp1 = norm_s( tmp ); - tmp = div_s( 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/ - exp2 = norm_s( tmp ); - tmp = shl( tmp, exp2 ); - exp1 = add( 29, sub( exp2, exp1 ) ); - - for ( i = 0; i < N; i++ ) - { - L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[num_env_bands - 1] ), L_tmp1 ); - Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] ); - move32(); /*Q0*/ - if ( Rsubband_w32_fx[i] > 0 ) - { - n = add( n, Nb[i] ); - Rsubband_w32_fx[i] = Mpy_32_16_1( Rsubband_w32_fx[i], tmp ); - move32(); /*exp1 - 15*/ - Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/ - - t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q15*/ - } - else - { - Rsubband_w32_fx[i] = 0; - move32(); - } - } - } - else - { - /* Initial bits distribution */ - L_tmp1 = 0; - m_fx = 0; - for ( i = 0; i < N; i++ ) - { - L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] ); /* Q0 */ - } - L_tmp1 = L_msu0( L_tmp1, fac, B ); /* Q0 */ - - - t_fx = 0; - n = 0; - tmp = add( band_end_HQ[N - 1], shl( band_end_HQ[N - 1], 1 ) ); /* Q0 */ - exp1 = norm_s( tmp ); - tmp = div_s( 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/ - exp2 = norm_s( tmp ); - tmp = shl( tmp, exp2 ); - exp1 = add( 29, sub( exp2, exp1 ) ); - for ( i = 0; i < N; i++ ) - { - L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[N - 1] ), L_tmp1 ); /* Q0 */ - Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] ); - move32(); /*Q0*/ - if ( Rsubband_w32_fx[i] > 0 ) - { - n = add( n, Nb[i] ); - Rsubband_w32_fx[i] = Mpy_32_16_1( Rsubband_w32_fx[i], tmp ); - move32(); /*exp1 - 15*/ - Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/ - - t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q15*/ - } - else - { - Rsubband_w32_fx[i] = 0; - move32(); - } - } - } - - /* Distribute the remaining bits to subbands with non-zero bits */ - B_fx = L_shl( B, 15 ); - WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 ) - { - L_tmp1 = L_sub( t_fx, B_fx ); - exp1 = sub( norm_l( L_tmp1 ), 1 ); - exp2 = norm_s( n ); - tmp = div_s( extract_h( L_shl( L_tmp1, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/ -#ifndef BASOP_NOGLOB - m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/ -#else - m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow ); /*Q14*/ -#endif - - t_fx = 0; - n = 0; - for ( i = 0; i < N; i++ ) - { - if ( Rsubband_w32_fx[i] > 0 ) - { - Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] ); - move32(); - - if ( Rsubband_w32_fx[i] > 0 ) - { - n = add( n, Nb[i] ); - - t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /* Q15 */ - } - else - { - Rsubband_w32_fx[i] = 0; - move32(); - } - } - } - } - Bits = B; - - /* Impose bit-constraints to subbands with less than minimum bits*/ - t_fx = 0; - n = 0; - for ( i = 0; i < N; i++ ) - { - if ( Rsubband_w32_fx[i] > 0 ) - { - test(); - test(); - if ( ( L_sub( Rsubband_w32_fx[i], L_shl( add( bs, LNb[i] ), 15 ) ) < 0 ) && ( sub( low_rate, 1 ) == 0 ) ) - { - Rsubband_w32_fx[i] = 0; - move32(); - } - else if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) <= 0 ) - { - B = sub( B, Nb[i] ); /* Q0 */ - Rsubband_w32_fx[i] = L_shl( Nb[i], 15 ); /* Q15 */ - move32(); - } - else - { - n = add( n, Nb[i] ); /* Q0 */ - t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /* Q15 */ - } - } - } - - /* Distribute the remaining bits to subbands with more than 1-bit per sample */ - WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 ) - { - L_tmp1 = L_sub( t_fx, L_shl( B, 15 ) ); - L_tmp2 = L_abs( L_tmp1 ); - - if ( n > 0 ) - { - exp1 = sub( norm_l( L_tmp2 ), 1 ); - exp2 = norm_s( n ); - tmp = div_s( extract_h( L_shl( L_tmp2, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/ -#ifndef BASOP_NOGLOB - m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/ -#else /* BASOP_NOGLOB */ - m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow ); /*Q14*/ -#endif /* BASOP_NOGLOB */ - if ( L_tmp1 < 0 ) - { - m_fx = negate( m_fx ); - } - - t_fx = 0; - n = 0; - for ( i = 0; i < N; i++ ) - { - if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 ) - { - Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] ); /* Q15 */ - if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 ) - { - n = add( n, Nb[i] ); /* Q0 */ - - t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /* Q15 */ - } - else - { - B = sub( B, Nb[i] ); /* Q0 */ - - Rsubband_w32_fx[i] = L_shl( Nb[i], 15 ); /* Q15 */ - move32(); - } - } - } - } - /*In case no subband has enough bits more than 1-bit per sample, take bits off the higher subbands */ - if ( t_fx == 0 ) - { - for ( i = N - 1; i >= 0; i-- ) - { - if ( Rsubband_w32_fx[i] > 0 ) - { - B = add( B, Nb[i] ); /* Q0 */ - Rsubband_w32_fx[i] = 0; - move32(); - if ( B >= 0 ) - { - BREAK; - } - } - } - BREAK; - } - } - - /* fine redistribution of over-allocated or under-allocated bits */ - tmp = 0; - for ( i = 0; i < N; i++ ) - { - Rsubband[i] = extract_l( L_shr( Rsubband_w32_fx[i], 12 ) ); /* Q3 */ - tmp = add( tmp, Rsubband[i] ); /* Q3 */ - } - - B = Bits; /* Q0 */ - B_w16_fx = shl( B, 3 ); /* Q3 */ - if ( sub( tmp, B_w16_fx ) > 0 ) - { - tmp = sub( tmp, B_w16_fx ); - for ( i = 0; i < N; i++ ) - { - if ( sub( Rsubband[i], add( shl( Nb[i], 3 ), tmp ) ) >= 0 ) - { - Rsubband[i] = sub( Rsubband[i], tmp ); /* Q3 */ - BREAK; - } - } - } - else - { - tmp = sub( tmp, B_w16_fx ); /* Q3 */ - for ( i = 0; i < N; i++ ) - { - if ( Rsubband[i] > 0 ) - { - Rsubband[i] = sub( Rsubband[i], tmp ); /* Q3 */ - BREAK; - } - } - } - - /* Calculate total used bits and initialize R to be used for Noise Filling */ - tmp = 0; - for ( i = 0; i < N; i++ ) - { - tmp = add( tmp, Rsubband[i] ); /* Q3 */ - R[i] = shr( Rsubband[i], 3 ); /* Q0 */ - } - - return shr( tmp, 3 ); -} -#endif /*-------------------------------------------------------------------* * Bit_group() @@ -588,7 +100,7 @@ static void Bit_group_fx( } /* Rearrange norm vector in decreasing order */ - reordvct( y_index, band_num, index ); + reordvct_fx( y_index, band_num, index ); /* norm vector modification */ factor_fx = div_s( 1, band_num ); /*Q15 */ diff --git a/lib_com/bitallocsum.c b/lib_com/bitallocsum.c index e3eb13723..e7a8ca967 100644 --- a/lib_com/bitallocsum.c +++ b/lib_com/bitallocsum.c @@ -39,57 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * bitallocsum() - * - * Calculate the total number of bits allocated over frame - *--------------------------------------------------------------------------*/ - -void bitallocsum( - int16_t *R, /* i : bit-allocation vector */ - const int16_t nb_sfm, /* i : number of sub-vectors */ - int16_t *sum, /* o : total number of bits allocated */ - int16_t *Rsubband, /* o : rate per subband (Q3) */ - const int16_t num_bits, /* i : number of bits */ - const int16_t length, /* i : length of spectrum */ - const int16_t *sfmsize /* i : band length */ -) -{ - int16_t i; - int16_t total, tmp; - int16_t diff; - - total = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - tmp = R[i] * sfmsize[i]; - Rsubband[i] = tmp * 8; - total += tmp; - } - *sum = total; - - if ( length <= L_FRAME32k ) - { - diff = num_bits - *sum; - i = 0; - while ( diff > 0 ) - { - if ( R[i] > 0 ) - { - Rsubband[i] += 8; - diff -= 1; - *sum += 1; - } - i++; - if ( i >= nb_sfm ) - { - i = 0; - } - } - } - - return; -} -#endif diff --git a/lib_com/bits_alloc.c b/lib_com/bits_alloc.c index c99851d58..9e56eefef 100644 --- a/lib_com/bits_alloc.c +++ b/lib_com/bits_alloc.c @@ -41,1447 +41,3 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *--------------------------------------------------------------------*/ - -static int16_t BITS_ALLOC_adjust_acelp_fixed_cdk( const int16_t bits_frame, int16_t *fixed_cdk_index, const int16_t nb_subfr ); - -static int16_t allocate_unused( const int32_t core_brate, const int16_t coder_type, const int16_t unused_bits, const int16_t nb_prm, const int16_t subfr, const int16_t prm_type, int16_t *prm_bit_mode ); - -typedef enum -{ - GAINSPRM = 0x0, - PITCHPRM = 0x1, - MID_LSFSPRM = 0x3, - LSFPRM = 0x4 -} PRM_TYPES; - -/*-------------------------------------------------------------------* - * BITS_ALLOC_init_config_acelp_IVAS() - * - * initial configuration for Mode 2 ACELP - *--------------------------------------------------------------------*/ - -void BITS_ALLOC_init_config_acelp_IVAS( - const int32_t bit_rate, - const int16_t narrowBand, - const int16_t nb_subfr, - ACELP_config *acelp_cfg /* o : configuration structure of ACELP */ -) -{ - int16_t rate_mode_index; - - if ( bit_rate <= ACELP_9k60 ) - { - rate_mode_index = 0; - } - else - { - rate_mode_index = 1; - } - - acelp_cfg->mode_index = rate_mode_index; - - /*LPC: midLpc should be swithced off?*/ - acelp_cfg->midLpc_enable = 1; - - /*ACELP ICB config*/ - if ( ( rate_mode_index == 0 ) || ( narrowBand == 1 ) ) - { - acelp_cfg->pre_emphasis = 1; - acelp_cfg->formant_enh = 1; - acelp_cfg->formant_enh_num_flt = FORMANT_SHARPENING_G1_FLT; - acelp_cfg->formant_enh_den_flt = FORMANT_SHARPENING_G2_FLT; - acelp_cfg->formant_tilt = 0; - acelp_cfg->voice_tilt = 0; - } - else - { - acelp_cfg->pre_emphasis = 0; - acelp_cfg->formant_enh = 1; - acelp_cfg->formant_enh_num_flt = FORMANT_SHARPENING_G1_FLT; - acelp_cfg->formant_enh_den_flt = FORMANT_SHARPENING_G2_FLT; - acelp_cfg->formant_tilt = 1; - acelp_cfg->voice_tilt = 1; - } - - /*Wide band @ 16kHz*/ - if ( nb_subfr == NB_SUBFR16k ) - { - acelp_cfg->pre_emphasis = 1; - acelp_cfg->formant_enh = 1; - acelp_cfg->formant_enh_num_flt = FORMANT_SHARPENING_G1_16k_FLT; - acelp_cfg->formant_enh_den_flt = FORMANT_SHARPENING_G2_16k_FLT; - acelp_cfg->formant_tilt = 0; - acelp_cfg->voice_tilt = 2; - } - - return; -} - -/*-------------------------------------------------------------------* - * BITS_ALLOC_config_acelp_IVAS() - * - * configure all Mode 2 ACELP coder types and allocate the bits - *--------------------------------------------------------------------*/ - -int16_t BITS_ALLOC_config_acelp_IVAS( - const int16_t bits_frame, /* i : remaining bit budget for the frame */ - const int16_t coder_type, /* i : acelp coder type */ - ACELP_config *acelp_cfg, /* i/o: configuration structure of ACELP */ - const int16_t narrowBand, /* i : narrowband flag */ - const int16_t nb_subfr /* i : number of subframes */ -) -{ - int16_t mode_index; - int16_t band_index; - int16_t i; - int16_t remaining_bits, bits; - - /*Sanity check*/ - - mode_index = acelp_cfg->mode_index; - band_index = ( narrowBand == 0 ); - bits = 0; - - if ( band_index == 0 ) - { - if ( coder_type == INACTIVE ) - { - acelp_cfg->formant_enh = 0; - } - else - { - acelp_cfg->formant_enh = 1; - } - } - - if ( band_index == 1 && nb_subfr == NB_SUBFR ) - { - - if ( coder_type == INACTIVE ) - { - acelp_cfg->pre_emphasis = 0; - acelp_cfg->formant_enh = 0; - acelp_cfg->formant_enh_num_flt = FORMANT_SHARPENING_G1_16k_FLT; - acelp_cfg->formant_tilt = 1; - acelp_cfg->voice_tilt = 1; - } - else - { - acelp_cfg->pre_emphasis = 1; - acelp_cfg->formant_enh = 1; - acelp_cfg->formant_enh_num_flt = FORMANT_SHARPENING_G1_FLT; - acelp_cfg->formant_tilt = 0; - acelp_cfg->voice_tilt = 0; - } - } - - if ( coder_type == UNVOICED ) - { - if ( ACELP_GAINS_MODE[mode_index][band_index][coder_type] == 6 ) - { - acelp_cfg->pitch_sharpening = 0; - acelp_cfg->phase_scrambling = 1; - } - else - { - acelp_cfg->pitch_sharpening = 0; - acelp_cfg->phase_scrambling = 0; - } - } - else - { - acelp_cfg->pitch_sharpening = 1; - acelp_cfg->phase_scrambling = 0; - } - - if ( coder_type > ACELP_MODE_MAX ) - { - /* keep pitch sharpening for RF_ALLPRED mode */ - acelp_cfg->pitch_sharpening = 0; - acelp_cfg->phase_scrambling = 0; - } - - /*Allocate bits and different modes*/ - acelp_cfg->bpf_mode = ACELP_BPF_MODE[mode_index][band_index][coder_type]; - bits += ACELP_BPF_BITS[acelp_cfg->bpf_mode]; - - acelp_cfg->nrg_mode = ACELP_NRG_MODE[mode_index][band_index][coder_type]; - acelp_cfg->nrg_bits = ACELP_NRG_BITS[acelp_cfg->nrg_mode]; - bits += acelp_cfg->nrg_bits; - - acelp_cfg->ltp_mode = ACELP_LTP_MODE[mode_index][band_index][coder_type]; - acelp_cfg->ltp_bits = 0; - acelp_cfg->ltf_mode = ACELP_LTF_MODE[mode_index][band_index][coder_type]; - acelp_cfg->ltf_bits = ACELP_LTF_BITS[acelp_cfg->ltf_mode]; - - if ( nb_subfr == NB_SUBFR16k && acelp_cfg->ltf_bits == 4 ) - { - acelp_cfg->ltf_bits++; - } - bits += acelp_cfg->ltf_bits; - - - for ( i = 0; i < nb_subfr; i++ ) - { - acelp_cfg->gains_mode[i] = ACELP_GAINS_MODE[mode_index][band_index][coder_type]; - - /* skip subframe 1, 3 gain encoding, and use from subframe 0, and 3, respectively */ - if ( coder_type >= ACELP_MODE_MAX && ( i == 1 || i == 3 ) ) - { - acelp_cfg->gains_mode[i] = 0; - } - - bits += ACELP_GAINS_BITS[acelp_cfg->gains_mode[i]]; - bits += ACELP_LTP_BITS_SFR[acelp_cfg->ltp_mode][i]; - acelp_cfg->ltp_bits += ACELP_LTP_BITS_SFR[acelp_cfg->ltp_mode][i]; - } - - /*Innovation*/ - if ( bits_frame < bits ) - { - printf( "\nWarning: bits per frame too low\n" ); - return -1; - } - - if ( coder_type == RF_ALLPRED ) - { - set_s( acelp_cfg->fixed_cdk_index, -1, nb_subfr ); - } - else if ( coder_type == RF_GENPRED ) - { - acelp_cfg->fixed_cdk_index[0] = 0; /* 7 bits */ - acelp_cfg->fixed_cdk_index[1] = -1; - acelp_cfg->fixed_cdk_index[2] = 0; /* 7 bits */ - acelp_cfg->fixed_cdk_index[3] = -1; - acelp_cfg->fixed_cdk_index[4] = -1; - bits += 14; - } - else if ( coder_type == RF_NOPRED ) - { - set_s( acelp_cfg->fixed_cdk_index, 0, nb_subfr ); - bits += 28; - } - else - { - bits += BITS_ALLOC_adjust_acelp_fixed_cdk( bits_frame - bits, acelp_cfg->fixed_cdk_index, nb_subfr ); - } - - remaining_bits = bits_frame - bits; - - /*Sanity check*/ - if ( remaining_bits < 0 ) - { - bits = -1; - } - - - return ( bits ); -} - -/*-------------------------------------------------------------------* - * BITS_ALLOC_adjust_acelp_fixed_cdk() - * - * - *--------------------------------------------------------------------*/ - -static int16_t BITS_ALLOC_adjust_acelp_fixed_cdk( - const int16_t bits_frame, /* i : bit budget */ - int16_t *fixed_cdk_index, - const int16_t nb_subfr ) -{ - int16_t bits_subframe2; - int16_t sfr, k, bitsused, bits_currsubframe; - - bits_subframe2 = bits_frame; - - if ( bits_subframe2 < ACELP_FIXED_CDK_BITS( 0 ) * nb_subfr ) - { - return ( bits_frame + 1 ); /* Not enough bits for lowest mode. -> trigger alarm*/ - } - - /* search cdk-index for first subframe */ - for ( k = 0; k < ACELP_FIXED_CDK_NB - 1; k++ ) - { - if ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_subframe2 ) - { - k--; /* previous mode did not exceed bit-budget */ - break; - } - } - - if ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_subframe2 ) - { - k--; /* previous mode did not exceed bit-budget */ - } - fixed_cdk_index[0] = k; - - bitsused = ACELP_FIXED_CDK_BITS( k ); - - for ( sfr = 1; sfr < nb_subfr; sfr++ ) - { - bits_currsubframe = ( sfr * bits_subframe2 + bits_subframe2 ) - bitsused * nb_subfr; - - /* try increasing mode while below threshold */ - while ( ( k < ACELP_FIXED_CDK_NB - 1 ) && ( ACELP_FIXED_CDK_BITS( k + 1 ) * nb_subfr <= bits_currsubframe ) ) - { - k++; - } - - /* try decreasing mode until below threshold */ - while ( ACELP_FIXED_CDK_BITS( k ) * nb_subfr > bits_currsubframe ) - { - k--; - if ( k == 0 ) - { - break; - } - } - - /* store mode */ - fixed_cdk_index[sfr] = k; - bitsused += ACELP_FIXED_CDK_BITS( k ); - } - - return bitsused; -} - - -/*-------------------------------------------------------------------* - * fcb_table() - * - * Selection of fixed innovation codebook bitbudget table - *--------------------------------------------------------------------*/ - -static int16_t fcb_table( - const int16_t n, - const int16_t L_subfr ) -{ - int16_t out; - - out = PulseConfTable[n].bits; - if ( L_subfr > L_SUBFR ) - { - out = fast_FCB_bits_2sfr[n]; - } - - return ( out ); -} - -/*-------------------------------------------------------------------* - * acelp_FCB_allocator() - * - * Routine to allocate fixed innovation codebook bit-budget - *--------------------------------------------------------------------*/ - -static ivas_error acelp_FCB_allocator( - int16_t *nBits, /* i/o: available bit-budget */ - int16_t fixed_cdk_index[], /* o : codebook index */ - int16_t nb_subfr, /* i : number of subframes */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t coder_type, /* i : coder type */ - const int16_t tc_subfr, /* i : TC subframe index */ - const int16_t fix_first /* i : flag to indicate whether the first subframe bit-budget was fixed */ -) -{ - int16_t cdbk, sfr, step; - int16_t nBits_tmp; - int16_t *p_fixed_cdk_index; - ivas_error error; - int16_t max_n; - - error = IVAS_ERR_OK; - - cdbk = coder_type; /* just to avoid warning when DEBUGGING is deactivated */ - - p_fixed_cdk_index = fixed_cdk_index; - - /* TRANSITION coding: first subframe bit-budget was already fixed, glottal pulse not in the first subframe */ - if ( tc_subfr >= L_SUBFR && fix_first ) - { - int16_t i; - - for ( i = 0; i < nb_subfr; i++ ) - { - *nBits -= ACELP_FIXED_CDK_BITS( fixed_cdk_index[i] ); - } - return error; - } - - /* TRANSITION coding: first subframe bit-budget was already fixed, glottal pulse in the first subframe */ - sfr = 0; - if ( fix_first ) - { - *nBits -= ACELP_FIXED_CDK_BITS( fixed_cdk_index[0] ); - sfr = 1; - p_fixed_cdk_index++; - nb_subfr = 3; - } - - /* distribute the bit-budget equally between subframes */ - if ( L_subfr > L_SUBFR ) /* access fast_FCB_bits_2sfr */ - { - max_n = 6; - } - else - { - max_n = ACELP_FIXED_CDK_NB; - } - for ( cdbk = 0; cdbk < max_n; cdbk++ ) - { - if ( fcb_table( cdbk, L_subfr ) * nb_subfr > *nBits ) - { - break; - } - } - cdbk--; - - set_s( p_fixed_cdk_index, cdbk, nb_subfr ); - nBits_tmp = 0; - if ( cdbk >= 0 ) - { - nBits_tmp = fcb_table( cdbk, L_subfr ); - } - else - { - nBits_tmp = 0; - } - *nBits -= nBits_tmp * nb_subfr; - - /* try to increase the FCB bit-budget of the first subframe(s) */ - if ( cdbk < ACELP_FIXED_CDK_NB - 1 ) - { - step = fcb_table( cdbk + 1, L_subfr ) - nBits_tmp; - while ( *nBits >= step ) - { - ( *p_fixed_cdk_index )++; - *nBits -= step; - p_fixed_cdk_index++; - } - - /* try to increase the FCB of the first subframe in cases when the next step is lower than the current step */ - if ( fixed_cdk_index[sfr] < ACELP_FIXED_CDK_NB - 1 ) - { - step = fcb_table( fixed_cdk_index[sfr] + 1, L_subfr ) - fcb_table( fixed_cdk_index[sfr], L_subfr ); - if ( *nBits >= step && cdbk >= 0 ) - { - fixed_cdk_index[sfr]++; - *nBits -= step; - - if ( *nBits >= step && fixed_cdk_index[sfr + 1] == fixed_cdk_index[sfr] - 1 ) - { - sfr++; - fixed_cdk_index[sfr]++; - *nBits -= step; - } - } - } - } - /* TRANSITION coding: allocate highest FCBQ bit-budget to the subframe with the glottal-shape codebook */ - if ( tc_subfr >= L_SUBFR ) - { - int16_t tempr; - - SWAP( fixed_cdk_index[0], fixed_cdk_index[tc_subfr / L_SUBFR] ); - - /* TRANSITION coding: allocate second highest FCBQ bit-budget to the last subframe */ - if ( tc_subfr / L_SUBFR < nb_subfr - 1 ) - { - SWAP( fixed_cdk_index[( tc_subfr - L_SUBFR ) / L_SUBFR], fixed_cdk_index[nb_subfr - 1] ); - } - } - - /* when subframe length > L_SUBFR, number of bits instead of codebook index is signalled */ - if ( L_subfr > L_SUBFR ) - { - int16_t i, j; - for ( i = 0; i < nb_subfr; i++ ) - { - j = fixed_cdk_index[i]; - fixed_cdk_index[i] = fast_FCB_bits_2sfr[j]; - } - } - - return error; -} - - -/*-------------------------------------------------------------------* - * config_acelp1_IVAS() - * - * Configure ACELP bit allocation - * - should be in range of <6700; 24350> for ACELP@12.8kHz - * - per channel bitrate minimum is 13250 kbps for ACELP@16kHz - *--------------------------------------------------------------------*/ - -ivas_error config_acelp1_IVAS( - const int16_t enc_dec, /* i : encoder/decoder flag */ - const int32_t total_brate, /* i : total bitrate */ - const int32_t core_brate_inp, /* i : core bitrate */ - const int16_t core, /* i : core */ - const int16_t extl, /* i : extension layer */ - const int32_t extl_brate, /* i : extension layer bitrate */ - const int16_t L_frame, /* i : frame length at internal Fs */ - const int16_t GSC_noisy_speech, /* i : GSC on SWB noisy speech flag */ - ACELP_config *acelp_cfg, /* i : ACELP bit-allocation */ - const int16_t signaling_bits, /* i : number of signaling bits */ - const int16_t coder_type, /* i : coder type */ - const int16_t tc_subfr, /* i : TC subfr ID */ - const int16_t tc_call, /* i : TC call number (0,1,2,3,5(DEC)) */ - int16_t *nBits_es_Pred, /* o : number of bits for Es_pred Q */ - int16_t *unbits, /* o : number of unused bits */ - const int16_t element_mode, /* i : element mode */ - int16_t *uc_two_stage_flag, /* o : flag undicating two-stage UC */ - const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag (can be 1 only with secondary channel */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ - const int16_t idchan, /* i : stereo channel ID */ - const int16_t active_cnt, /* i : Active frame counter */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag*/ - const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ -) -{ - int16_t i, bits, nb_subfr; - int16_t flag_hardcoded, coder_type_sw, fix_first; - int32_t core_brate; - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * Set the flag indicating two-stage Unvoiced (UC) frame - *-----------------------------------------------------------------*/ - - *uc_two_stage_flag = 0; - if ( coder_type == UNVOICED ) - { - if ( total_brate >= MIN_UNVOICED_TWO_STAGE_BRATE && element_mode > EVS_MONO && ( idchan == 0 || ( ( total_brate >= 8500 || extl_brate == 0 ) && tdm_LRTD_flag == 1 ) ) ) - { - *uc_two_stage_flag = 1; - } - } - - /*-----------------------------------------------------------------* - * Set the number of subframes - *-----------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - nb_subfr = NB_SUBFR; - } - else /* L_frame == L_FRAME16k */ - { - nb_subfr = NB_SUBFR16k; - } - - coder_type_sw = coder_type; - if ( core != ACELP_CORE ) - { - /* used in acelp_core_switch_enc() */ - nb_subfr = 1; - if ( L_frame == L_FRAME ) - { - coder_type_sw = TRANSITION; - } - } - - /*-----------------------------------------------------------------* - * Check if the core_brate is hard coded (to keep BE for mono core) or not - *-----------------------------------------------------------------*/ - - flag_hardcoded = 0; - i = 0; - - while ( i < SIZE_BRATE_INTERMED_TBL ) - { - if ( core_brate_inp == brate_intermed_tbl[i] ) - { - flag_hardcoded = 1; - break; - } - - if ( core_brate_inp < brate_intermed_tbl[i] ) - { - flag_hardcoded = 0; - break; - } - - i++; - } - - if ( element_mode == IVAS_CPE_TD && coder_type == AUDIO && - core_brate_inp <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ - { - i--; - } - - core_brate = brate_intermed_tbl[i]; - - if ( element_mode > EVS_MONO ) - { - flag_hardcoded = 0; /* use automatic and flexible ACELP bit-budget allocation */ - } - - if ( core != ACELP_CORE && element_mode == EVS_MONO ) /* needed for mode1 core switching in EVS mono */ - { - flag_hardcoded = 1; - } - - /*-----------------------------------------------------------------* - * ACELP bit allocation - *-----------------------------------------------------------------*/ - - if ( !( coder_type == TRANSITION && tc_subfr != -1 ) || enc_dec == DEC ) - { - /* Set the bit-budget */ - bits = (int16_t) ( core_brate_inp / FRAMES_PER_SEC ); - - if ( coder_type == TRANSITION && enc_dec == DEC && tc_call == 1 ) - { - bits += *nBits_es_Pred; /* equalize for 4th signaling bit estimated at the encoder in TC_0_192 */ - } - - /* Subtract signaling bits */ - if ( enc_dec == DEC && idchan == 1 && element_mode > EVS_MONO ) - { - bits -= TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; - - if ( tdm_LRTD_flag == 1 ) - { - bits += STEREO_BITS_TCA; - } - - /* subtract TBE/BWE flag */ - if ( extl_brate > 0 && ( extl == WB_TBE || extl == SWB_TBE || extl == FB_TBE || extl == WB_BWE || extl == SWB_BWE || extl == FB_BWE ) ) - { - bits--; - } - } - else - { - /* Subtract signaling bits */ - bits -= signaling_bits; - } - - if ( extl_brate > 0 && ( extl == WB_TBE || extl == SWB_TBE || extl == FB_TBE || extl == WB_BWE || extl == SWB_BWE || extl == FB_BWE ) ) - { - /* extension layer signaling bit is counted in the extension layer bitbudget */ - bits++; - } - - /*-----------------------------------------------------------------* - * LSF Q bit-budget - *-----------------------------------------------------------------*/ - - if ( !tdm_lp_reuse_flag || idchan == 0 ) - { - /* LSF Q bit-budget */ - acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; - - if ( !flag_hardcoded ) - { - if ( L_frame == L_FRAME ) - { - if ( element_mode == IVAS_SCE && tdm_low_rate_mode ) - { - acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; - } - else if ( ( total_brate < 7200 || coder_type == INACTIVE || coder_type == AUDIO ) && idchan == 1 ) - { - /* TD stereo, secondary channel: do nothing */ - acelp_cfg->lsf_bits = LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; - } - else if ( element_mode > EVS_MONO && coder_type == AUDIO && brate_intermed_tbl[i] < ACELP_9k60 ) - { - /* primary channel: do nothing */ - } - else if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] >= ACELP_9k60*/ ) - { - acelp_cfg->lsf_bits = 42; - } - else if ( total_brate <= 9600 || coder_type == UNVOICED ) - { - acelp_cfg->lsf_bits = 31; - } - else if ( total_brate <= 20000 ) - { - acelp_cfg->lsf_bits = 36; - } - else - { - acelp_cfg->lsf_bits = 41; - } - } - else /* L_frame == L_FRAME16k */ - { - acelp_cfg->lsf_bits = 41; - } - } - - bits -= acelp_cfg->lsf_bits; - - /* mid-LSF Q bit-budget */ - acelp_cfg->mid_lsf_bits = mid_LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; - - if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) - { - acelp_cfg->mid_lsf_bits = 5; - /* primary channel: do nothing */ - } - - bits -= acelp_cfg->mid_lsf_bits; - } - else if ( tdm_lp_reuse_flag == 1 && idchan == 1 && active_cnt != 1 ) - { - bits -= TDM_IC_LSF_PRED_BITS; - } - - /* gain Q bit-budget - part 1 */ - if ( ( coder_type != UNVOICED && coder_type != AUDIO && coder_type != INACTIVE && !( core_brate <= ACELP_8k00 && coder_type != TRANSITION ) ) || ( coder_type == INACTIVE && total_brate > MAX_GSC_INACTIVE_BRATE ) ) - { - *nBits_es_Pred = Es_pred_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, -1, -1 )]; - bits -= *nBits_es_Pred; - } - else if ( *uc_two_stage_flag ) - { - *nBits_es_Pred = 4; - bits -= *nBits_es_Pred; - } - } - else - { - bits = *unbits; - } - - if ( coder_type == TRANSITION && tc_call == 0 ) - { - *unbits = bits; - return error; - } - - /*-----------------------------------------------------------------* - * Low-rate mode - bits are allocated in tdm_low_rate_enc() - *-----------------------------------------------------------------*/ - - if ( element_mode == IVAS_SCE && tdm_low_rate_mode ) - { - acelp_cfg->FEC_mode = 0; - acelp_cfg->ltf_mode = FULL_BAND; - *nBits_es_Pred = 0; - *unbits = 0; - acelp_cfg->ubits = 0; - - return error; - } - - /*-----------------------------------------------------------------* - * Supplementary information for FEC - *-----------------------------------------------------------------*/ - - acelp_cfg->FEC_mode = 0; - if ( core_brate >= ACELP_11k60 && ( idchan == 0 || element_mode == EVS_MONO ) ) - { - acelp_cfg->FEC_mode = 1; - - if ( coder_type > UNVOICED && coder_type < AUDIO && coder_type != VOICED ) - { - bits -= FEC_BITS_CLS; - } - - if ( coder_type != TRANSITION ) - { - if ( total_brate >= ACELP_16k40 ) - { - acelp_cfg->FEC_mode = 2; - - if ( coder_type > UNVOICED && coder_type < AUDIO ) - { - bits -= FEC_BITS_ENR; - } - } - - if ( total_brate >= ACELP_32k ) - { - acelp_cfg->FEC_mode = 3; - - if ( coder_type > UNVOICED && coder_type < AUDIO ) - { - bits -= FEC_BITS_POS; - } - } - } - } - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation - *-----------------------------------------------------------------*/ - - if ( idchan > 0 && element_mode > EVS_MONO ) - { - acelp_cfg->ltf_mode = FULL_BAND; - } - else if ( coder_type == UNVOICED ) - { - acelp_cfg->ltf_mode = FULL_BAND; - } - else if ( ( coder_type == GENERIC || coder_type == TRANSITION ) && core_brate < ACELP_11k60 ) - { - acelp_cfg->ltf_mode = LOW_PASS; - } - else if ( core_brate >= ACELP_11k60 && ( coder_type != AUDIO && !( coder_type == INACTIVE && L_frame == L_FRAME ) ) ) - { - if ( coder_type == INACTIVE && L_frame == L_FRAME16k && total_brate <= MAX_GSC_INACTIVE_BRATE ) /* GSC Inactive @16kHz */ - { - acelp_cfg->ltf_mode = FULL_BAND; - } - else - { - acelp_cfg->ltf_mode = NORMAL_OPERATION; - if ( coder_type != TRANSITION ) - { - bits -= nb_subfr; - } - } - } - else - { - acelp_cfg->ltf_mode = FULL_BAND; - } - - /*-----------------------------------------------------------------* - * UC bit-budget - *-----------------------------------------------------------------*/ - - if ( ( ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) || ( coder_type == INACTIVE && core_brate <= ACELP_9k60 ) ) && ( idchan == 0 || element_mode == EVS_MONO ) ) - { - bits -= NBITS_NOISENESS; /* noiseness */ - } - if ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) - { - bits -= ( 3 * NB_SUBFR ); /* tilt factor */ - } - - /*-----------------------------------------------------------------* - * TC bit-budget - *-----------------------------------------------------------------*/ - - fix_first = 0; - if ( coder_type == TRANSITION ) - { - if ( tc_call == 2 ) - { - fix_first = 1; - } - - /* TC signaling */ - if ( L_frame == L_FRAME ) - { - if ( tc_subfr == TC_0_0 ) - { - if ( enc_dec == ENC ) - { - bits -= 1; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= 3; /* LP filtering flag */ - } - } - else if ( tc_subfr == TC_0_64 ) - { - if ( enc_dec == ENC ) - { - bits -= 4; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= 3; /* LP filtering flag */ - } - } - else if ( tc_subfr == TC_0_128 ) - { - if ( enc_dec == ENC ) - { - bits -= 4; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= 2; /* LP filtering flag */ - } - } - else if ( tc_subfr == TC_0_192 ) - { - if ( enc_dec == ENC ) - { - bits -= 3; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= 1; /* LP filtering flag */ - } - } - else if ( tc_subfr == L_SUBFR ) - { - if ( enc_dec == ENC ) - { - bits -= 3; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= ( L_FRAME - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ - } - } - else - { - if ( enc_dec == ENC ) - { - bits -= 4; /* TC signaling */ - } - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - bits -= ( L_FRAME - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ - } - } - } - else /* L_frame == L_FRAME16k */ - { - if ( enc_dec == ENC ) - { - if ( tc_subfr <= 2 * L_SUBFR ) - { - bits -= 2; /* TC signaling */ - } - else - { - bits -= 3; /* TC signaling */ - } - } - - bits -= ( L_FRAME16k - tc_subfr - L_SUBFR ) / L_SUBFR; /* LP filtering flag */ - } - - /* glottal-shape codebook bits */ - bits -= ( 3 + 6 + 1 + 3 ); - } - - /*-----------------------------------------------------------------* - * pitch, innovation, gains bit-budget - *-----------------------------------------------------------------*/ - - acelp_cfg->fcb_mode = 0; - - if ( element_mode == IVAS_CPE_TD && tdm_low_rate_mode == 1 && coder_type != INACTIVE && coder_type != UNVOICED ) /* GENERIC low rate mode for secondary channel */ - { - set_s( acelp_cfg->pitch_bits, 0, NB_SUBFR16k ); - set_s( acelp_cfg->gains_mode, 0, NB_SUBFR16k ); - - for ( i = 0; i < 2; i++ ) - { - acelp_cfg->pitch_bits[i] = 0; - if ( tdm_Pitch_reuse_flag == 0 ) - { - acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, GENERIC, 2 * i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; - bits -= acelp_cfg->pitch_bits[i]; - } - acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, GENERIC, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; - bits -= acelp_cfg->gains_mode[i]; - } - acelp_cfg->fcb_mode = 1; - - if ( bits >= 16 ) - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 2, 2 * L_SUBFR, GENERIC, -1, 0 ); - } - else - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 2, 2 * L_SUBFR, GENERIC, -1, 0 ); - acelp_cfg->fixed_cdk_index[1] = -1; - } - acelp_cfg->fixed_cdk_index[2] = -1; - acelp_cfg->fixed_cdk_index[3] = -1; - } - else if ( ( coder_type != INACTIVE && nb_subfr == NB_SUBFR && coder_type != AUDIO ) || ( nb_subfr == NB_SUBFR16k && ( total_brate > MAX_GSC_INACTIVE_BRATE || coder_type != INACTIVE ) ) || core == HQ_CORE ) - { - /* pitch Q & gain Q bit-budget - part 2*/ - for ( i = 0; i < nb_subfr; i++ ) - { - if ( L_frame == L_FRAME ) - { - if ( tdm_Pitch_reuse_flag == 1 && idchan == 1 ) - { - acelp_cfg->pitch_bits[i] = 0; - } - else - { - acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; - } - acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type_sw, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; - } - else /* L_frame == L_FRAME16k */ - { - if ( tdm_Pitch_reuse_flag == 1 && idchan == 1 ) - { - acelp_cfg->pitch_bits[i] = 0; - } - else - { - acelp_cfg->pitch_bits[i] = ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; - } - acelp_cfg->gains_mode[i] = gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type_sw, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; - } - - bits -= acelp_cfg->pitch_bits[i]; - - if ( coder_type == INACTIVE && acelp_cfg->gains_mode[i] == 6 /* VQ vs. SQ threshold @32 kbps */ ) - { - bits -= 5; - } - else - { - if ( *uc_two_stage_flag == 1 ) - { - acelp_cfg->gains_mode[i] = 7; - } - - bits -= acelp_cfg->gains_mode[i]; - } - } - - /* algebraic codebook bit-budget */ - if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) - { - for ( i = 0; i < nb_subfr; i++ ) - { - if ( L_frame == L_FRAME ) - { - acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX( tc_subfr ) )]; - } - else /* L_frame == L_FRAME16k */ - { - acelp_cfg->fixed_cdk_index[i] = FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; - } - bits -= acelp_cfg->fixed_cdk_index[i]; - } - } - else if ( !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) - { - if ( coder_type == UNVOICED && !( *uc_two_stage_flag ) ) - { - i = bits / NB_SUBFR; - if ( i % 2 == 0 ) - { - i--; /* must be odd */ - } - i = min( i, 13 ); - i = max( i, 0 ); /* If i == 0-> random noise generator will be used as FCB */ - set_s( acelp_cfg->fixed_cdk_index, i, NB_SUBFR ); - bits -= ( i * NB_SUBFR ); - } - else - { - - acelp_cfg->fcb_mode = 1; - if ( element_mode == IVAS_CPE_TD ) - { - if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr ) ) /* enough bits for all fcb */ - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); - } - else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr - 1 ) ) - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr - 1, L_SUBFR, coder_type, tc_subfr, fix_first ); - acelp_cfg->fixed_cdk_index[3] = -1; - } - else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) * ( nb_subfr - 2 ) ) - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr - 2, L_SUBFR, coder_type, tc_subfr, fix_first ); - acelp_cfg->fixed_cdk_index[2] = acelp_cfg->fixed_cdk_index[1]; - acelp_cfg->fixed_cdk_index[1] = -1; - acelp_cfg->fixed_cdk_index[3] = -1; - } - else if ( bits >= ACELP_FIXED_CDK_BITS( 0 ) ) - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, 1, L_SUBFR, coder_type, tc_subfr, fix_first ); - acelp_cfg->fixed_cdk_index[1] = acelp_cfg->fixed_cdk_index[0]; - acelp_cfg->fixed_cdk_index[0] = -1; - acelp_cfg->fixed_cdk_index[2] = -1; - acelp_cfg->fixed_cdk_index[3] = -1; - } - else /* No FCB */ - { - acelp_cfg->fixed_cdk_index[0] = -1; - acelp_cfg->fixed_cdk_index[1] = -1; - acelp_cfg->fixed_cdk_index[2] = -1; - acelp_cfg->fixed_cdk_index[3] = -1; - } - } - else if ( element_mode != IVAS_CPE_TD && GSC_IVAS_mode > 0 && L_frame == L_FRAME16k ) - { - bits = 100; /* 9 kbps for fcb */ - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); - } - else - { - acelp_FCB_allocator( &bits, acelp_cfg->fixed_cdk_index, nb_subfr, L_SUBFR, coder_type, tc_subfr, fix_first ); - } - } - } - - /* AVQ codebook */ - if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) - { - for ( i = 0; i < nb_subfr; i++ ) - { - if ( flag_hardcoded ) - { - acelp_cfg->AVQ_cdk_bits[i] = AVQ_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( core_brate, coder_type, i * L_SUBFR, TC_SUBFR2IDX_16KHZ( tc_subfr ) )]; - { - bits -= acelp_cfg->AVQ_cdk_bits[i]; - } - } - - bits -= G_AVQ_BITS; - } - - if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC ) - { - /* harm. flag ACELP AVQ */ - bits--; - } - - if ( !flag_hardcoded ) - { - int16_t bit_tmp; - - bit_tmp = bits / nb_subfr; - set_s( acelp_cfg->AVQ_cdk_bits, bit_tmp, nb_subfr ); - bits -= bit_tmp * nb_subfr; - - bit_tmp = bits % nb_subfr; - acelp_cfg->AVQ_cdk_bits[0] += bit_tmp; - bits -= bit_tmp; - } - } - } - else if ( ( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) || ( ( coder_type == INACTIVE || coder_type == AUDIO ) && nb_subfr == NB_SUBFR ) || ( coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) ) - { - int32_t Local_BR, Pitch_BR; - int16_t Pitch_CT; - - /* as defined at the beginning of [enc,dec]_pit_exc() */ - if ( GSC_IVAS_mode > 0 && ( GSC_noisy_speech || core_brate > GSC_H_RATE_STG ) ) - { - Local_BR = ACELP_8k00; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_8k00; - if ( L_frame == L_FRAME16k ) - { - Local_BR = ACELP_14k80; - if ( GSC_IVAS_mode > 0 && core_brate < IVAS_24k4 ) - { - Local_BR = ACELP_9k60; - } - Pitch_BR = core_brate; - } - } - else if ( GSC_noisy_speech ) - { - Local_BR = ACELP_7k20; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_7k20; - if ( L_frame == L_FRAME16k ) - { - Pitch_BR = core_brate; - } - } - else - { - Local_BR = ACELP_7k20; - Pitch_CT = AUDIO; - Pitch_BR = core_brate; - - if ( L_frame == L_FRAME16k ) - { - Local_BR = ACELP_13k20; - Pitch_CT = GENERIC; - } - } - - for ( i = 0; i < nb_subfr; i++ ) - { - if ( L_frame == L_FRAME16k ) - { - acelp_cfg->pitch_bits[i] = ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( Pitch_BR, Pitch_CT, i * L_SUBFR, 0 )]; - acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( Local_BR, LOCAL_CT, i * L_SUBFR, 0 )]; - } - else - { - acelp_cfg->pitch_bits[i] = ACB_bits_tbl[BIT_ALLOC_IDX( Pitch_BR, Pitch_CT, i * L_SUBFR, 0 )]; - acelp_cfg->fixed_cdk_index[i] = FCB_bits_tbl[BIT_ALLOC_IDX( Local_BR, LOCAL_CT, i * L_SUBFR, 0 )]; - acelp_cfg->gains_mode[i] = gain_bits_tbl[BIT_ALLOC_IDX( ACELP_7k20, LOCAL_CT, i * L_SUBFR, 0 )]; - } - } - } - - if ( coder_type == TRANSITION && ( tc_call == 1 && tc_subfr == 0 && L_frame == L_FRAME ) ) - { - return error; - } - - /*-----------------------------------------------------------------* - * unused bits handling - *-----------------------------------------------------------------*/ - - acelp_cfg->ubits = 0; /* these bits could be reused for something else */ - - if ( flag_hardcoded && core_brate != PPP_NELP_2k80 ) - { - /* unused bits */ - if ( coder_type == AUDIO || ( coder_type == INACTIVE && core_brate <= ACELP_24k40 ) ) - { - acelp_cfg->ubits = 0; - } - else if ( L_frame == L_FRAME ) - { - acelp_cfg->ubits = reserved_bits_tbl[BIT_ALLOC_IDX( core_brate, coder_type, -1, TC_SUBFR2IDX( tc_subfr ) )]; - } - else - { - acelp_cfg->ubits = 0; - } - - bits -= acelp_cfg->ubits; - } - - /* sanity check */ - if ( ( coder_type != INACTIVE && nb_subfr == NB_SUBFR && coder_type != AUDIO ) || nb_subfr == NB_SUBFR16k ) - { - if ( ( L_frame == L_FRAME16k && coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) || ( GSC_IVAS_mode > 0 && L_frame == L_FRAME16k ) ) /* GSC Inactive @16kHz */ - { - acelp_cfg->ubits = 0; - } - else if ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) - { - } - else if ( bits > 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) - { - if ( idchan > 0 && element_mode == IVAS_CPE_TD ) - { - if ( !tdm_lp_reuse_flag ) - { - acelp_cfg->lsf_bits += bits; /* increase LSF Q bits */ - bits = 0; - } - else - { - int16_t nb_prm = 4; - - if ( tdm_low_rate_mode == 1 ) - { - nb_prm = 2; - } - /* First add remaining bits on gains */ - bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, GAINSPRM, acelp_cfg->gains_mode ); - - /* Then, Increase pitch bit budget */ - if ( tdm_Pitch_reuse_flag == 0 && bits > 0 ) - { - bits -= allocate_unused( core_brate, coder_type, bits, nb_prm, 0, PITCHPRM, acelp_cfg->pitch_bits ); - } - - /* Increase mid-lsf bit budget */ - if ( tdm_lp_reuse_flag == 0 && bits > 0 ) - { - bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, MID_LSFSPRM, &acelp_cfg->mid_lsf_bits ); - bits -= allocate_unused( core_brate, coder_type, bits, 1, 0, LSFPRM, &acelp_cfg->lsf_bits ); - } - } - } - - else if ( core == ACELP_CORE && coder_type >= UNVOICED && coder_type <= GENERIC && L_frame == L_FRAME ) - { - acelp_cfg->lsf_bits += bits; /* increase LSF Q bits */ - - if ( acelp_cfg->lsf_bits > 46 ) - { - acelp_cfg->ubits = acelp_cfg->lsf_bits - 46; - acelp_cfg->lsf_bits = 46; - } - else if ( acelp_cfg->lsf_bits > 42 && L_frame == L_FRAME ) - { - acelp_cfg->ubits = acelp_cfg->lsf_bits - 42; - acelp_cfg->lsf_bits = 42; - } - } - else - { - acelp_cfg->ubits = bits; - } - } - else if ( bits < 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) - { - } - } - - return error; -} - -/*-------------------------------------------------------------------* - * allocate_unused() - * - * Allocate unused bits - *--------------------------------------------------------------------*/ - -static int16_t allocate_unused( - const int32_t core_brate, - const int16_t coder_type, - const int16_t unused_bits, - const int16_t nb_prm, - const int16_t subfr, - const int16_t prm_type, - int16_t *prm_bit_mode ) -{ - int16_t max_bit_per_pos = 0, bit_added = 0; - - if ( prm_type == GAINSPRM ) - { - max_bit_per_pos = 6; - if ( core_brate > ACELP_8k00 ) - { - max_bit_per_pos = 7; - } - else if ( coder_type != UNVOICED ) - { - if ( subfr >= 1 ) - { - max_bit_per_pos = 7; - } - else if ( subfr == 0 ) - { - max_bit_per_pos = 8; - } - } - else if ( coder_type == UNVOICED ) - { - max_bit_per_pos = 9; /* No real limit on UC gain bit budget of the secondary channel */ - } - } - else if ( prm_type == PITCHPRM ) - { - max_bit_per_pos = 6; - if ( subfr == 0 || subfr == 2 || nb_prm == 2 ) - { - max_bit_per_pos = 10; - } - - if ( coder_type == UNVOICED ) - { - max_bit_per_pos = 0; /* Should not allocate bits in case of unvoiced coder type */ - } - } - else if ( prm_type == MID_LSFSPRM ) - { - max_bit_per_pos = 5; - } - else if ( prm_type == LSFPRM ) - { - max_bit_per_pos = 42; - } - else - { - } - - max_bit_per_pos = min( unused_bits, max_bit_per_pos - prm_bit_mode[subfr] ); - if ( max_bit_per_pos < 0 ) - { - return 0; - } - else if ( max_bit_per_pos >= 0 && subfr == ( nb_prm - 1 ) ) - { - prm_bit_mode[subfr] += max_bit_per_pos; - } - else - { - prm_bit_mode[subfr] += max_bit_per_pos; - bit_added += allocate_unused( core_brate, coder_type, unused_bits - max_bit_per_pos, nb_prm, subfr + 1, prm_type, &prm_bit_mode[0] ); - } - - return bit_added + max_bit_per_pos; -} - - -/*-------------------------------------------------------------------* - * set_ACELP_flag_IVAS() - * - * set ACELP@16kHz flag - *--------------------------------------------------------------------*/ - -/*! r: ACELP16k flag */ -int16_t set_ACELP_flag_IVAS( - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t total_brate, /* i : total bitrate per channel */ - const int16_t idchan, /* i : Channel id */ - const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t cng_type /* i : CNG type */ -) -{ - IF( EQ_16( element_mode, IVAS_CPE_DFT ) && EQ_16( idchan, 0 ) && LE_32( total_brate, SID_2k40 ) && EQ_16( bwidth, WB ) && EQ_16( cng_type, LP_CNG ) ) - { - - return 1; - } - ELSE IF( EQ_16( element_mode, IVAS_CPE_TD ) ) - { - IF( GE_32( element_brate, IVAS_24k4 ) && EQ_16( idchan, 0 ) && ( EQ_16( tdm_LRTD_flag, 0 ) || GT_32( element_brate, IVAS_24k4 ) ) ) - { - return 1; - } - ELSE - { - return 0; - } - } - ELSE IF( EQ_16( element_mode, IVAS_CPE_DFT ) ) - { - IF( GE_32( element_brate, IVAS_24k4 ) ) - { - return 1; - } - ELSE - { - return 0; - } - } - ELSE IF( EQ_16( element_mode, IVAS_SCE ) ) - { - IF( GE_32( element_brate, SCE_CORE_16k_LOW_LIMIT ) ) - { - return 1; - } - ELSE - { - return 0; - } - } - ELSE IF( GE_32( total_brate, ACELP_16k_LOW_LIMIT ) ) /* EVS_MONO */ - { - return 1; - } - ELSE - { - return 0; - } -} -#endif diff --git a/lib_com/bits_alloc_fx.c b/lib_com/bits_alloc_fx.c index 8025ca53d..83a98a85f 100644 --- a/lib_com/bits_alloc_fx.c +++ b/lib_com/bits_alloc_fx.c @@ -1876,7 +1876,6 @@ ivas_error config_acelp1( * - per channel bitrate minimum is 13250 kbps for ACELP@16kHz *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error config_acelp1_IVAS( const Word16 enc_dec, /* i : encoder/decoder flag */ const Word32 total_brate, /* i : total bitrate */ @@ -2942,7 +2941,6 @@ ivas_error config_acelp1_IVAS( return error; } -#endif /*-------------------------------------------------------------------* * allocate_unused() @@ -3056,7 +3054,6 @@ static Word16 allocate_unused( *--------------------------------------------------------------------*/ /*! r: ACELP16k flag */ -#ifdef IVAS_FLOAT_FIXED Word16 set_ACELP_flag( const Word16 element_mode, /* i : element mode */ const Word32 element_brate, /* i : element bitrate */ @@ -3121,66 +3118,6 @@ Word16 set_ACELP_flag( return 0; } } -#else -Word16 set_ACELP_flag( - const Word16 element_mode, /* i : element mode */ - const Word32 element_brate, /* i : element bitrate */ - const Word32 total_brate, /* i : total bitrate per channel */ - const Word16 idchan, /* i : Channel id */ - const Word16 tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const Word16 bwidth, /* i : audio bandwidth */ - const Word16 cng_type /* i : CNG type */ -) -{ - // PMT("Not floating point computation, but fixed point operator are still missing ") - if ( element_mode == IVAS_CPE_DFT && idchan == 0 && total_brate <= SID_2k40 && bwidth == WB && cng_type == LP_CNG ) - { - - return 1; - } - else if ( element_mode == IVAS_CPE_TD ) - { - if ( element_brate >= IVAS_24k4 && idchan == 0 && ( tdm_LRTD_flag == 0 || element_brate > IVAS_24k4 ) ) - { - return 1; - } - else - { - return 0; - } - } - else if ( element_mode == IVAS_CPE_DFT ) - { - if ( element_brate >= IVAS_24k4 ) - { - return 1; - } - else - { - return 0; - } - } - else if ( element_mode == IVAS_SCE ) - { - if ( element_brate >= SCE_CORE_16k_LOW_LIMIT ) - { - return 1; - } - else - { - return 0; - } - } - else if ( total_brate >= ACELP_16k_LOW_LIMIT ) /* EVS_MONO */ - { - return 1; - } - else - { - return 0; - } -} -#endif /*-------------------------------------------------------------------* * set_ACELP_flag_IVAS() @@ -3189,7 +3126,6 @@ Word16 set_ACELP_flag( *--------------------------------------------------------------------*/ /*! r: ACELP16k flag */ -#ifdef IVAS_FLOAT_FIXED Word16 set_ACELP_flag_IVAS( const Word16 element_mode, /* i : element mode */ const Word32 element_brate, /* i : element bitrate */ @@ -3253,5 +3189,4 @@ Word16 set_ACELP_flag_IVAS( return 0; } } -#endif /*#endif IVAS_CODE*/ diff --git a/lib_com/bitstream.c b/lib_com/bitstream.c index 3d8a69a3e..9e61c2571 100644 --- a/lib_com/bitstream.c +++ b/lib_com/bitstream.c @@ -48,10 +48,8 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx_enc.h" -#endif #define STEP_MAX_NUM_INDICES 100 /* increase the maximum number of allowed indices in the list by this amount */ @@ -161,7 +159,6 @@ Word16 rate2EVSmode_float( * Re-allocate the list of indices *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ind_list_realloc( INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */ const Word16 max_num_indices, /* i : new maximum number of allowed indices in the list */ @@ -292,129 +289,6 @@ ivas_error ind_list_realloc( return IVAS_ERR_OK; } -#else -ivas_error ind_list_realloc( - INDICE_HANDLE old_ind_list, /* i : pointer to the beginning of the old buffer of indices */ - const int16_t max_num_indices, /* i : new maximum number of allowed indices in the list */ - Encoder_Struct *st_ivas /* i : IVAS encoder structure */ -) -{ - int16_t i, n, ch, n_channels, ind_list_pos, is_metadata, ivas_max_num_indices; - INDICE_HANDLE new_ind_list; - BSTR_ENC_HANDLE hBstr; - - if ( st_ivas == NULL ) - { - return IVAS_ERR_OK; - } - - /* get the pointer to the beginning of the old buffer of indices (either metadata or core coders) */ - if ( old_ind_list == st_ivas->ind_list_metadata ) - { - is_metadata = 1; - ivas_max_num_indices = st_ivas->ivas_max_num_indices_metadata; - } - else - { - is_metadata = 0; - ivas_max_num_indices = st_ivas->ivas_max_num_indices; - } - - /* allocate new buffer of indices */ - if ( ( new_ind_list = (INDICE_HANDLE) malloc( max_num_indices * sizeof( Indice ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) ); - } - - /* move indices from the old list to the new list */ - for ( i = 0; i < min( max_num_indices, ivas_max_num_indices ); i++ ) - { - if ( old_ind_list[i].nb_bits > -1 ) - { - new_ind_list[i].id = old_ind_list[i].id; - new_ind_list[i].value = old_ind_list[i].value; - } - new_ind_list[i].nb_bits = old_ind_list[i].nb_bits; - } - - /* reset nb_bits of all other indices to -1 */ - for ( ; i < max_num_indices; i++ ) - { - new_ind_list[i].nb_bits = -1; - } - - /* update parameters in all SCE elements */ - for ( n = 0; n < st_ivas->nSCE; n++ ) - { - /* get the pointer to hBstr */ - if ( is_metadata ) - { - hBstr = st_ivas->hSCE[n]->hMetaData; - } - else - { - hBstr = st_ivas->hSCE[n]->hCoreCoder[0]->hBstr; - } - - if ( hBstr != NULL ) - { - /* get the current position inside the old list */ - ind_list_pos = (int16_t) ( hBstr->ind_list - old_ind_list ); - - /* set pointers in the new list */ - *( hBstr->ivas_ind_list_zero ) = new_ind_list; - hBstr->ind_list = &new_ind_list[ind_list_pos]; - - /* set the new maximum number of indices */ - *( hBstr->ivas_max_num_indices ) = max_num_indices; - } - } - - /* update parameters in all CPE elements */ - for ( n = 0; n < st_ivas->nCPE; n++ ) - { - /* get the pointer to hBstr */ - if ( is_metadata ) - { - n_channels = 1; - } - else - { - n_channels = CPE_CHANNELS; - } - - for ( ch = 0; ch < n_channels; ch++ ) - { - if ( is_metadata ) - { - hBstr = st_ivas->hCPE[n]->hMetaData; - } - else - { - hBstr = st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr; - } - - if ( hBstr != NULL ) - { - /* get the current position inside the old list */ - ind_list_pos = (int16_t) ( hBstr->ind_list - old_ind_list ); - - /* set pointers in the new list */ - *( hBstr->ivas_ind_list_zero ) = new_ind_list; - hBstr->ind_list = &new_ind_list[ind_list_pos]; - - /* set the new maximum number of indices */ - *( hBstr->ivas_max_num_indices ) = max_num_indices; - } - } - } - - /* free the old list */ - free( old_ind_list ); - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* @@ -954,7 +828,6 @@ void move_indices( * Check, if we will not overwrite an existing indice -> adjust the location *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error check_ind_list_limits( BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ ) @@ -1008,60 +881,6 @@ ivas_error check_ind_list_limits( return error; } -#else -ivas_error check_ind_list_limits( - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -) -{ - Indice *ivas_ind_list_zero, *ivas_ind_list_last; - ivas_error error; - - error = IVAS_ERR_OK; - ivas_ind_list_zero = *( hBstr->ivas_ind_list_zero ); - - /* check, if the maximum number of indices has been reached and re-allocate the buffer */ - /* the re-allocation can be avoided by increasing the limits in get_ivas_max_num_indices() or get_ivas_max_num_indices_metadata() */ - if ( ( &hBstr->ind_list[hBstr->nb_ind_tot] - ivas_ind_list_zero ) >= *( hBstr->ivas_max_num_indices ) ) - { - - /* reallocate the buffer of indices with increased limit */ - if ( ( error = ind_list_realloc( *hBstr->ivas_ind_list_zero, *( hBstr->ivas_max_num_indices ) + STEP_MAX_NUM_INDICES, hBstr->st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* check, if we will not overwrite an existing indice */ - if ( hBstr->ind_list[hBstr->nb_ind_tot].nb_bits > 0 ) - { - if ( hBstr->nb_ind_tot == 0 ) - { - /* move the pointer to the next available empty slot */ - ivas_ind_list_last = &ivas_ind_list_zero[*( hBstr->ivas_max_num_indices )]; - while ( hBstr->ind_list[0].nb_bits > 0 && hBstr->ind_list < ivas_ind_list_last ) - { - hBstr->ind_list++; - } - - if ( hBstr->ind_list >= ivas_ind_list_last ) - { - - /* no available empty slot -> need to re-allocate the buffer */ - if ( ( error = ind_list_realloc( *hBstr->ivas_ind_list_zero, *( hBstr->ivas_max_num_indices ) + STEP_MAX_NUM_INDICES, hBstr->st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Buffer of indices corrupted in frame %d! Attempt to overwrite indice ID = %d (value: %d, bits: %d)!\n", hBstr->ind_list[hBstr->nb_ind_tot].id, hBstr->ind_list[hBstr->nb_ind_tot].value, hBstr->ind_list[hBstr->nb_ind_tot].nb_bits ); - } - } - - return error; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -1070,7 +889,6 @@ ivas_error check_ind_list_limits( * Push a new indice into the buffer *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error push_indice( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 id, /* i : ID of the indice */ @@ -1132,65 +950,12 @@ ivas_error push_indice( return error; } -#else -ivas_error push_indice( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t id, /* i : ID of the indice */ - uint16_t value, /* i : value of the quantized indice */ - int16_t nb_bits /* i : number of bits used to quantize the indice */ -) -{ - int16_t i; - int16_t j; - ivas_error error; - - error = IVAS_ERR_OK; - - - /* check the limits of the list of indices */ - if ( ( error = check_ind_list_limits( hBstr ) ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( error, "Error occured in push_indice() while re-allocating the list of indices (frame %d) !\n" ); - } - - /* find the location in the list of indices based on ID */ - i = hBstr->nb_ind_tot; - while ( i > 0 && id < hBstr->ind_list[i - 1].id ) - { - i--; - } - - /* shift indices, if the new ID is to be written somewhere inside the list */ - if ( i < hBstr->nb_ind_tot ) - { - for ( j = hBstr->nb_ind_tot; j > i; j-- ) - { - hBstr->ind_list[j].id = hBstr->ind_list[j - 1].id; - hBstr->ind_list[j].nb_bits = hBstr->ind_list[j - 1].nb_bits; - hBstr->ind_list[j].value = hBstr->ind_list[j - 1].value; - } - } - - - /* store the new indice in the list */ - hBstr->ind_list[i].id = id; - hBstr->ind_list[i].value = value; - hBstr->ind_list[i].nb_bits = nb_bits; - - /* updates */ - hBstr->nb_ind_tot++; - hBstr->nb_bits_tot += nb_bits; - - return error; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * push_next_indice() * * Push a new indice into the buffer at the next position *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error push_next_indice( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ UWord16 value, /* i : value of the quantized indice */ @@ -1237,86 +1002,47 @@ ivas_error push_next_indice( return error; } -#else -ivas_error push_next_indice( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - uint16_t value, /* i : value of the quantized indice */ - int16_t nb_bits /* i : number of bits used to quantize the indice */ -) -{ - int16_t prev_id; - ivas_error error; - - error = IVAS_ERR_OK; - - - /* check the limits of the list of indices */ - if ( ( error = check_ind_list_limits( hBstr ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* get the id of the previous indice -> it will be re-used */ - if ( hBstr->nb_ind_tot > 0 ) - { - prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id; - } - else - { - prev_id = 0; - } - - /* store the values in the list */ - hBstr->ind_list[hBstr->nb_ind_tot].id = prev_id; - hBstr->ind_list[hBstr->nb_ind_tot].value = value; - hBstr->ind_list[hBstr->nb_ind_tot].nb_bits = nb_bits; - - /* updates */ - hBstr->nb_ind_tot++; - hBstr->nb_bits_tot += nb_bits; - - return error; -} -#endif /*-------------------------------------------------------------------* * push_next_bits() * Push a bit buffer into the buffer at the next position *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED ivas_error push_next_bits( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const uint16_t bits[], /* i : bit buffer to pack, sequence of single bits */ - const int16_t nb_bits /* i : number of bits to pack */ + const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */ + const Word16 nb_bits /* i : number of bits to pack */ ) { - uint16_t code; - int16_t i, nb_bits_m15; + UWord16 code; + Word16 i, nb_bits_m15; Indice *ptr; - int16_t prev_id; + Word16 prev_id; ivas_error error; error = IVAS_ERR_OK; + move32(); ptr = &hBstr->ind_list[hBstr->nb_ind_tot]; /* get the id of the previous indice -> will be re-used */ - if ( hBstr->nb_ind_tot > 0 ) + IF( hBstr->nb_ind_tot > 0 ) { prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id; + move16(); } - else + ELSE { prev_id = 0; + move16(); } - nb_bits_m15 = nb_bits - 15; + nb_bits_m15 = sub( nb_bits, 15 ); - for ( i = 0; i < nb_bits_m15; i += 16 ) + FOR( i = 0; i < nb_bits_m15; i += 16 ) { - code = (uint16_t) ( ( bits[i] << 15 ) | ( ( bits[i + 1] << 14 ) | ( ( bits[i + 2] << 13 ) | ( ( bits[i + 3] << 12 ) | ( ( bits[i + 4] << 11 ) | ( ( bits[i + 5] << 10 ) | ( ( bits[i + 6] << 9 ) | ( ( bits[i + 7] << 8 ) | ( ( bits[i + 8] << 7 ) | ( ( bits[i + 9] << 6 ) | ( ( bits[i + 10] << 5 ) | ( ( bits[i + 11] << 4 ) | ( ( bits[i + 12] << 3 ) | ( ( bits[i + 13] << 2 ) | ( ( bits[i + 14] << 1 ) | bits[i + 15] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ); + code = (UWord16) L_or( L_shl( bits[i], 15 ), L_or( L_shl( bits[i + 1], 14 ), L_or( L_shl( bits[i + 2], 13 ), L_or( L_shl( bits[i + 3], 12 ), L_or( L_shl( bits[i + 4], 11 ), L_or( L_shl( bits[i + 5], 10 ), L_or( L_shl( bits[i + 6], 9 ), L_or( L_shl( bits[i + 7], 8 ), L_or( L_shl( bits[i + 8], 7 ), L_or( L_shl( bits[i + 9], 6 ), L_or( L_shl( bits[i + 10], 5 ), L_or( L_shl( bits[i + 11], 4 ), L_or( L_shl( bits[i + 12], 3 ), L_or( L_shl( bits[i + 13], 2 ), L_or( L_shl( bits[i + 14], 1 ), bits[i + 15] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ); /* check the limits of the list of indices */ - if ( ( error = check_ind_list_limits( hBstr ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) ) { return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" ); } @@ -1325,14 +1051,19 @@ ivas_error push_next_bits( ptr->value = code; ptr->nb_bits = 16; ptr->id = prev_id; - hBstr->nb_ind_tot++; + hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 ); + move16(); + move16(); + move16(); + move16(); + ++ptr; } - for ( ; i < nb_bits; ++i ) + FOR( ; i < nb_bits; ++i ) { /* check the limits of the list of indices */ - if ( ( error = check_ind_list_limits( hBstr ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) ) { return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" ); } @@ -1341,95 +1072,20 @@ ivas_error push_next_bits( ptr->value = bits[i]; ptr->nb_bits = 1; ptr->id = prev_id; - hBstr->nb_ind_tot++; + hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 ); + move16(); + move16(); + move16(); + move16(); + ++ptr; } - hBstr->nb_bits_tot = hBstr->nb_bits_tot + nb_bits; + hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits ); + move16(); return error; } -#else -ivas_error push_next_bits( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */ - const Word16 nb_bits /* i : number of bits to pack */ -) -{ - UWord16 code; - Word16 i, nb_bits_m15; - Indice *ptr; - Word16 prev_id; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - ptr = &hBstr->ind_list[hBstr->nb_ind_tot]; - - /* get the id of the previous indice -> will be re-used */ - IF( hBstr->nb_ind_tot > 0 ) - { - prev_id = hBstr->ind_list[hBstr->nb_ind_tot - 1].id; - move16(); - } - ELSE - { - prev_id = 0; - move16(); - } - nb_bits_m15 = sub( nb_bits, 15 ); - - FOR( i = 0; i < nb_bits_m15; i += 16 ) - { - code = (UWord16) L_or( L_shl( bits[i], 15 ), L_or( L_shl( bits[i + 1], 14 ), L_or( L_shl( bits[i + 2], 13 ), L_or( L_shl( bits[i + 3], 12 ), L_or( L_shl( bits[i + 4], 11 ), L_or( L_shl( bits[i + 5], 10 ), L_or( L_shl( bits[i + 6], 9 ), L_or( L_shl( bits[i + 7], 8 ), L_or( L_shl( bits[i + 8], 7 ), L_or( L_shl( bits[i + 9], 6 ), L_or( L_shl( bits[i + 10], 5 ), L_or( L_shl( bits[i + 11], 4 ), L_or( L_shl( bits[i + 12], 3 ), L_or( L_shl( bits[i + 13], 2 ), L_or( L_shl( bits[i + 14], 1 ), bits[i + 15] ) ) ) ) ) ) ) ) ) ) ) ) ) ) ); - - /* check the limits of the list of indices */ - IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) ) - { - return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" ); - } - ptr = &hBstr->ind_list[hBstr->nb_ind_tot]; - - ptr->value = code; - ptr->nb_bits = 16; - ptr->id = prev_id; - hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 ); - move16(); - move16(); - move16(); - move16(); - - ++ptr; - } - - FOR( ; i < nb_bits; ++i ) - { - /* check the limits of the list of indices */ - IF( NE_32( ( error = check_ind_list_limits( hBstr ) ), IVAS_ERR_OK ) ) - { - return IVAS_ERROR( error, "Error occured in push_next_bits() while re-allocating the list of indices (frame %d) !\n" ); - } - ptr = &hBstr->ind_list[hBstr->nb_ind_tot]; - - ptr->value = bits[i]; - ptr->nb_bits = 1; - ptr->id = prev_id; - hBstr->nb_ind_tot = add( hBstr->nb_ind_tot, 1 ); - move16(); - move16(); - move16(); - move16(); - - ++ptr; - } - - hBstr->nb_bits_tot = add( hBstr->nb_bits_tot, nb_bits ); - move16(); - - return error; -} -#endif /*-------------------------------------------------------------------* * find_indice() @@ -1632,7 +1288,6 @@ uint16_t get_indice( *-------------------------------------------------------------------*/ /*! r: value of the indice */ -#ifdef IVAS_FLOAT_FIXED UWord16 get_indice_st( Decoder_State *st, /* i/o: decoder state structure */ const Word32 element_brate, /* i : element bitrate */ @@ -1663,61 +1318,6 @@ UWord16 get_indice_st( return value; } -#else -uint16_t get_indice_st( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t pos, /* i : absolute position in the bitstream */ - const int16_t nb_bits /* i : number of bits to quantize the indice */ -) -{ - uint16_t value; - int16_t i; - - assert( nb_bits <= 16 ); - - /* detect corrupted bitstream */ - if ( pos + nb_bits > element_brate / FRAMES_PER_SEC ) - { - st->BER_detect = 1; - return ( 0 ); - } - - value = 0; - for ( i = 0; i < nb_bits; i++ ) - { - value <<= 1; - value += st->bit_stream[pos + i]; - } - - return value; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_indice_1() - * - * Get a 1-bit indice at specific position in the buffer - *-------------------------------------------------------------------*/ - -/*! r: value of the indice */ -uint16_t get_indice_1( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t pos /* i : absolute position in the bitstream (update after the read) */ -) -{ - int32_t nbits_total; - nbits_total = st->total_brate / FRAMES_PER_SEC; - /* detect corrupted bitstream */ - if ( pos + 1 > nbits_total ) - { - st->BER_detect = 1; - return ( 0 ); - } - - return st->bit_stream[pos]; -} -#endif #define WMC_TOOL_SKIP /*-------------------------------------------------------------------* @@ -1726,25 +1326,6 @@ uint16_t get_indice_1( * Reset the buffer of encoder indices *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void reset_indices_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const Word16 max_num_indices /* i : max number of indices */ -) -{ - Word16 i; - - hBstr->nb_bits_tot = 0; - hBstr->nb_ind_tot = 0; - - FOR( i = 0; i < max_num_indices; i++ ) - { - hBstr->ind_list[i].nb_bits = -1; - } - - return; -} -#else void reset_indices_enc( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 max_num_indices /* i : max number of indices */ @@ -1765,14 +1346,12 @@ void reset_indices_enc( return; } -#endif /*-------------------------------------------------------------------* * reset_indices_dec() * * Reset the buffer of decoder indices *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void reset_indices_dec( Decoder_State *st ) { @@ -1781,21 +1360,11 @@ void reset_indices_dec( return; } -#else -void reset_indices_dec( - Decoder_State *st ) -{ - st->next_bit_pos = 0; - - return; -} -#endif /*-------------------------------------------------------------------* * write_indices_to_stream() * * writing forward or backward to a serial stream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 write_indices_to_stream_fx( Indice *ind_list, UWord16 **pt_stream, @@ -1840,55 +1409,12 @@ static Word16 write_indices_to_stream_fx( } return 0; } -#else -static int16_t write_indices_to_stream( - Indice *ind_list, - uint16_t **pt_stream, - const int16_t inc, - const int16_t num_indices ) -{ - int16_t i, k; - int16_t value, nb_bits; - uint16_t mask; - - for ( i = 0; i < num_indices; i++ ) - { - value = ind_list[i].value; - nb_bits = ind_list[i].nb_bits; - - if ( nb_bits > 0 ) - { - /* mask from MSB to LSB */ - mask = 1 << ( nb_bits - 1 ); - - /* write bit by bit */ - for ( k = 0; k < nb_bits; k++ ) - { - if ( value & mask ) - { - **pt_stream = 1; - *pt_stream += inc; - } - else - { - **pt_stream = 0; - *pt_stream += inc; - } - - mask >>= 1; - } - } - } - return 0; -} -#endif /*-------------------------------------------------------------------* * write_indices_element() * * Bitstream writing function of one element (one SCE or one CPE) *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error write_indices_element_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ UWord16 **pt_stream, /* i : pointer to bitstream buffer */ @@ -2032,276 +1558,54 @@ static ivas_error write_indices_element_fx( return error; } -#else -static ivas_error write_indices_element( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - uint16_t **pt_stream, /* i : pointer to bitstream buffer */ - const int16_t is_SCE, /* i : flag to distingusih SCE and CPE */ - const int16_t element_id /* i : id of the SCE or CPE */ + +/*-------------------------------------------------------------------* + * write_indices_ivas() + * + * Write the buffer of indices to a serial bitstream buffer, + * each bit represented as a uint16_t of value 0 or 1 + *-------------------------------------------------------------------*/ +ivas_error write_indices_ivas_fx( + Encoder_Struct *st_ivas, /* i/o: encoder state structure */ + UWord16 *bit_stream, /* i/o: output bitstream */ + UWord16 *num_bits /* i : number of indices written to output */ ) { - int16_t ch; - Encoder_State **sts = NULL; - uint16_t *pt_stream_loc; - uint16_t *pt_stream_backup; - uint16_t *pt_stream_end; - int16_t nb_bits_tot_metadata; - int16_t nb_ind_tot_metadata; - - Indice *ind_list_metadata; - int16_t n, n_channels; + Word16 i, n; + UWord16 *pt_stream; ivas_error error; error = IVAS_ERR_OK; + move32(); - ind_list_metadata = NULL; - nb_ind_tot_metadata = 0; - - if ( st_ivas->hEncoderConfig->ivas_format == MONO_FORMAT ) + pt_stream = bit_stream; + FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i ) { - sts = st_ivas->hSCE[0]->hCoreCoder; - nb_bits_tot_metadata = 0; + bit_stream[i] = 0; + move16(); } - else - { - nb_bits_tot_metadata = 0; - if ( is_SCE && st_ivas->hSCE[element_id] != NULL ) - { - sts = st_ivas->hSCE[element_id]->hCoreCoder; - if ( st_ivas->hSCE[element_id]->hMetaData != NULL ) - { - nb_bits_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_bits_tot; - ind_list_metadata = st_ivas->hSCE[element_id]->hMetaData->ind_list; - nb_ind_tot_metadata = st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot; - } - } - else if ( !is_SCE && st_ivas->hCPE[element_id] != NULL ) - { - sts = st_ivas->hCPE[element_id]->hCoreCoder; - if ( st_ivas->hCPE[element_id]->hMetaData != NULL ) - { - nb_bits_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_bits_tot; - ind_list_metadata = st_ivas->hCPE[element_id]->hMetaData->ind_list; - nb_ind_tot_metadata = st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot; - } - } - } + /*-----------------------------------------------------------------* + * Encode Payload + *-----------------------------------------------------------------*/ - n_channels = 1; - if ( sts[0]->element_mode > IVAS_CPE_DFT ) + FOR( n = 0; n < st_ivas->nSCE; n++ ) { - n_channels = CPE_CHANNELS; + write_indices_element_fx( st_ivas, &pt_stream, 1, n ); } - /*----------------------------------------------------------------* - * Bitstream packing (conversion of individual indices into a serial stream) - *----------------------------------------------------------------*/ - - pt_stream_loc = *pt_stream; - pt_stream_end = pt_stream_loc; - - for ( n = 0; n < n_channels; n++ ) + FOR( n = 0; n < st_ivas->nCPE; n++ ) { - /* write the metadata buffer */ - if ( n == 0 && nb_bits_tot_metadata != 0 ) - { - pt_stream_backup = pt_stream_loc; - - for ( ch = 0; ch < n_channels; ch++ ) - { - pt_stream_loc += sts[ch]->hBstr->nb_bits_tot; - } - pt_stream_loc += nb_bits_tot_metadata - 1; - pt_stream_end = pt_stream_loc + 1; - - write_indices_to_stream( ind_list_metadata, &pt_stream_loc, -1, - nb_ind_tot_metadata ); - - /* restore previous pointer position */ - pt_stream_loc = pt_stream_backup; - } - write_indices_to_stream( sts[n]->hBstr->ind_list, &pt_stream_loc, 1, - sts[n]->hBstr->nb_ind_tot ); - - if ( pt_stream_loc > pt_stream_end ) - { - pt_stream_end = pt_stream_loc; - } + write_indices_element_fx( st_ivas, &pt_stream, 0, n ); } - /*----------------------------------------------------------------* - * Clearing of indices - * Reset index pointers - *----------------------------------------------------------------*/ + *num_bits = (UWord16) ( pt_stream - bit_stream ); + move16(); - if ( is_SCE ) /* EVS and SCE */ - { - if ( st_ivas->hSCE[element_id]->hMetaData != NULL ) - { - reset_indices_enc( st_ivas->hSCE[element_id]->hMetaData, st_ivas->hSCE[element_id]->hMetaData->nb_ind_tot ); - } + return error; +} - reset_indices_enc( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot ); - } - else - { - if ( st_ivas->hCPE[element_id]->hMetaData != NULL ) - { - reset_indices_enc( st_ivas->hCPE[element_id]->hMetaData, st_ivas->hCPE[element_id]->hMetaData->nb_ind_tot ); - } - - for ( n = 0; n < n_channels; n++ ) - { - reset_indices_enc( sts[n]->hBstr, sts[n]->hBstr->nb_ind_tot ); - } - } - - /* update pointer */ - *pt_stream = pt_stream_end; - - return error; -} -#endif - -/*-------------------------------------------------------------------* - * write_indices_ivas() - * - * Write the buffer of indices to a serial bitstream buffer, - * each bit represented as a uint16_t of value 0 or 1 - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error write_indices_ivas_fx( - Encoder_Struct *st_ivas, /* i/o: encoder state structure */ - UWord16 *bit_stream, /* i/o: output bitstream */ - UWord16 *num_bits /* i : number of indices written to output */ -) -{ - Word16 i, n; - UWord16 *pt_stream; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - pt_stream = bit_stream; - FOR( i = 0; i < MAX_BITS_PER_FRAME; ++i ) - { - bit_stream[i] = 0; - move16(); - } - - - /*-----------------------------------------------------------------* - * Encode Payload - *-----------------------------------------------------------------*/ - - FOR( n = 0; n < st_ivas->nSCE; n++ ) - { - write_indices_element_fx( st_ivas, &pt_stream, 1, n ); - } - - FOR( n = 0; n < st_ivas->nCPE; n++ ) - { - write_indices_element_fx( st_ivas, &pt_stream, 0, n ); - } - - *num_bits = (UWord16) ( pt_stream - bit_stream ); - move16(); - - return error; -} -#else -ivas_error write_indices_ivas( - Encoder_Struct *st_ivas, /* i/o: encoder state structure */ - uint16_t *bit_stream, /* i/o: output bitstream */ - uint16_t *num_bits /* i : number of indices written to output */ -) -{ - int16_t i, n; - uint16_t *pt_stream; - ivas_error error; - - error = IVAS_ERR_OK; - - pt_stream = bit_stream; - for ( i = 0; i < MAX_BITS_PER_FRAME; ++i ) - { - bit_stream[i] = 0; - } - - - /*-----------------------------------------------------------------* - * Encode Payload - *-----------------------------------------------------------------*/ - - for ( n = 0; n < st_ivas->nSCE; n++ ) - { - write_indices_element( st_ivas, &pt_stream, 1, n ); - } - - for ( n = 0; n < st_ivas->nCPE; n++ ) - { - write_indices_element( st_ivas, &pt_stream, 0, n ); - } - - *num_bits = (uint16_t) ( pt_stream - bit_stream ); - - return error; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * convertSerialToBytestream( ) - * - * convert 16-bit short serial streams with 0x0000 and 0x0001 to a bytstream - *---------------------------------------------------------------------*/ - -void convertSerialToBytestream( - const uint16_t *const serial, /* i : input serial bitstream with values 0 and 1 */ - const uint16_t num_bits, /* i : number of bits in the input bitstream */ - uint8_t *const bytestream /* o : output compact bitstream (bytestream) */ -) -{ - uint32_t i; - uint8_t bit, bitinbyte; - - for ( i = 0; i < num_bits; ++i ) - { - bit = ( serial[i] == 0x0001 ) ? 1 : 0; - bitinbyte = bit << ( 7 - ( i & 0x7 ) ); - if ( !( i & 0x7 ) ) - { - bytestream[i >> 3] = 0; - } - bytestream[i >> 3] |= bitinbyte; - } - - return; -} - -/*---------------------------------------------------------------------* - * convertBytestreamToSerial( ) - * - * convert bytestream to 16-bit short serial streams with 0x0000 and 0x0001 - *---------------------------------------------------------------------*/ - -void convertBytestreamToSerial( - const uint8_t *const bytestream, /* i : input compact bitstream (bytestream) */ - const uint16_t num_bits, /* i : number of bits in the input bitstream */ - uint16_t *const serial /* o : output serial bitstream with values 0 and 1 */ -) -{ - uint32_t i; - - for ( i = 0; i < num_bits; ++i ) - { - serial[i] = ( bytestream[( i >> 3 )] >> ( 7 - ( i & 7 ) ) ) & 0x1; - } -} -#endif /*-------------------------------------------------------------------* * decoder_selectCodec() * @@ -2667,7 +1971,6 @@ void mdct_switching_dec( * Simulate packet losses by reading FEC pattern from external file *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Decoder_State **reset_elements( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -2714,44 +2017,6 @@ Decoder_State **reset_elements( return sts; /* return last decoder state */ } -#else -Decoder_State **reset_elements( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t k, n; - Decoder_State **sts = NULL; /* to avoid compilation warning */ - - for ( k = 0; k < st_ivas->nSCE; k++ ) - { - sts = st_ivas->hSCE[k]->hCoreCoder; - - sts[0]->bfi = 0; - sts[0]->BER_detect = 0; - sts[0]->mdct_sw_enable = 0; - sts[0]->mdct_sw = 0; - - reset_indices_dec( sts[0] ); - } - - for ( k = 0; k < st_ivas->nCPE; k++ ) - { - sts = st_ivas->hCPE[k]->hCoreCoder; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - sts[n]->bfi = 0; - sts[n]->BER_detect = 0; - sts[n]->mdct_sw_enable = 0; - sts[n]->mdct_sw = 0; - - reset_indices_dec( sts[n] ); - } - } - - return sts; /* return last decoder state */ -} -#endif /*-------------------------------------------------------------------* * ivas_set_bitstream_pointers() @@ -3036,423 +2301,4 @@ ivas_error read_indices( return error; } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_rfFrameType() - * - * Extract the RF frame type - *-------------------------------------------------------------------*/ - -static void get_rfFrameType( - Decoder_State *st, /* i : decoder state structure */ - int16_t *rf_frame_type /* o : RF frame type */ -) -{ - int16_t num_bits; - num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - if ( st->rf_flag == 1 ) - { - /* the last three bits in a packet is the RF frame type */ - *rf_frame_type = get_indice( st, num_bits - 3, 3 ); - } - else - { - *rf_frame_type = 0; - } - - return; -} - -/*-------------------------------------------------------------------* - * get_rfFlag() - * - * Check if RF flag is present in the bitstream - *-------------------------------------------------------------------*/ - -static void get_rfFlag( - Decoder_State *st, /* i : decoder state structure */ - int16_t *rf_flag, /* o : check for the RF flag */ - int16_t *nBits, - int32_t *ind ) -{ - int16_t start_idx, nBits_tmp; - int32_t ind_tmp; - - /* Init */ - *rf_flag = 0; - - /* check for rf_flag in the packet and extract the rf_frame_type and rf_fec_offset */ - if ( st->total_brate == ACELP_13k20 && ( st->bfi == FRAMEMODE_NORMAL || st->bfi == FRAMEMODE_FUTURE ) ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - start_idx = 0; - while ( acelp_sig_tbl[start_idx] != st->total_brate ) - { - start_idx++; - assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); - } - - /* skip the bitrate */ - start_idx += 1; - - /* retrieve the number of bits */ - nBits_tmp = (int16_t) acelp_sig_tbl[start_idx++]; - - /* retrieve the signaling indice */ - ind_tmp = acelp_sig_tbl[start_idx + get_indice( st, 0, nBits_tmp )]; - - /* convert signaling indice into RF flag. */ - *rf_flag = ( ind_tmp >> 7 ) & 0x1; - - if ( ind ) - { - *ind = ind_tmp; - } - - if ( nBits ) - { - *nBits = nBits_tmp; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * get_rf_fec_offset() - * - * Extract the FEC offset - *-------------------------------------------------------------------*/ - -static void get_rf_fec_offset( - Decoder_State *st, /* i : decoder state structure */ - int16_t *rf_fec_offset /* o : RF FEC offset */ -) -{ - int16_t num_bits, tmp; - num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - if ( st->rf_flag == 1 ) - { - /* the two bits before the RF frame type contains the FEC offset */ - tmp = get_indice( st, num_bits - 5, 2 ); - - if ( tmp == 0 ) - { - *rf_fec_offset = 2; - } - else - { - *rf_fec_offset = 2 * tmp + 1; - } - } - else - { - *rf_fec_offset = 0; - } - - return; -} - -/*-------------------------------------------------------------------* - * get_rfTargetBits() - * - * Return the number of RF target bits - *-------------------------------------------------------------------*/ - -static void get_rfTargetBits( - int16_t rf_frame_type, /* i : RF frame type */ - int16_t *rf_target_bits /* o : Number of RF target bits */ -) -{ - /* Number of RF bits for different RF coder types */ - - switch ( rf_frame_type ) - { - case RF_NO_DATA: - *rf_target_bits = 5; - break; - case RF_TCXFD: - *rf_target_bits = 27; - break; - case RF_TCXTD1: - *rf_target_bits = 16; - break; - case RF_TCXTD2: - *rf_target_bits = 16; - break; - case RF_ALLPRED: - /* Es_pred bits 3 bits, LTF: 1, pitch: 8,5,5,5, FCB: 0, gain: 7,0,7,0, Diff GFr: 4*/ - *rf_target_bits = 63; - break; - case RF_NOPRED: - /* Es_pred bits 3 bits, LTF: 0, pitch: 0, FCB: 7,7,7,7, gain: 6,0,6,0, Diff GFr: 2*/ - *rf_target_bits = 66; - break; - case RF_GENPRED: - /* Es_pred bits 3 bits, LTF: 1, pitch: 8,0,8,0, FCB: 6,7,5,5, gain: 5,0,5,0, Diff GFr: 0*/ - *rf_target_bits = 70; - break; - case RF_NELP: - /* gain: 19, Diff GFr: 5 */ - *rf_target_bits = 45; - break; - } - - return; -} - -/*-------------------------------------------------------------------* - * berCheck() - * - * Check for bit errors in channel aware signaling. - *-------------------------------------------------------------------*/ - -static void berCheck( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - /* In case of RF flag = 1, and valid RF packet with primary and partial copy */ - if ( st->bwidth == NB || st->bwidth == FB || st->coder_type >= TRANSITION ) - { - if ( st->use_partial_copy == 1 ) - { - st->use_partial_copy = 0; - } - - st->bfi = 1; - st->bwidth = st->last_bwidth; - st->BER_detect = 1; - st->coder_type = GENERIC; - } - - return; -} - -/*-------------------------------------------------------------------* - * getPartialCopyInfo() - * - * Check if the frame includes a partial copy for channel aware processing. - *-------------------------------------------------------------------*/ - -void getPartialCopyInfo_float( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *sharpFlag ) -{ - int16_t nBits = 0; - int32_t ind = 0; - - /* check the RF flag in the packet */ - get_rfFlag( st, &( st->rf_flag ), &nBits, &ind ); - - /* get RF frame type info */ - get_rfFrameType( st, &( st->rf_frame_type ) ); - - /* Get the FEC offset info */ - get_rf_fec_offset( st, &( st->rf_fec_offset ) ); - - /* reset number of target bits in case of rate switching */ - st->rf_target_bits = 0; - - /* Get the number of bits used for RF*/ - if ( st->rf_flag == 1 ) - { - st->coder_type = ind & 0x7; - st->bwidth = ( ind >> 3 ) & 0x7; - *sharpFlag = ( ind >> 6 ) & 0x1; - st->codec_mode = MODE2; - get_rfTargetBits( st->rf_frame_type, &( st->rf_target_bits ) ); - - if ( st->bfi == FRAMEMODE_FUTURE ) - { - st->use_partial_copy = 1; - /* now set the frame mode to normal mode */ - if ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) - { - st->bfi = 1; - st->core = TCX_20_CORE; - } - else - { - st->bfi = FRAMEMODE_NORMAL; - st->core = ACELP_CORE; - } - } - - /* check for bit errors */ - berCheck( st ); - - get_next_indice_tmp( st, nBits ); - } - - return; -} - -/*-------------------------------------------------------------------* - * get_NextCoderType() - * - * Extract the coder type of next frame - *-------------------------------------------------------------------*/ - -void get_NextCoderType( - uint8_t *bitstream, /* i : bitstream */ - int16_t *next_coder_type /* o : next coder type */ -) -{ - int16_t k; - int16_t start_idx; - int8_t bit_stream[ACELP_13k20 / FRAMES_PER_SEC]; - int32_t tmp; - int16_t nBits_tmp; - - - for ( k = 0; k < ACELP_13k20 / FRAMES_PER_SEC; k++ ) - { - bit_stream[k] = ( bitstream[k / 8] >> ( 7 - ( k % 8 ) ) ) & 0x1; - } - start_idx = 0; - while ( acelp_sig_tbl[start_idx] != ACELP_13k20 ) - { - start_idx++; - assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); - } - - /* skip the bitrate */ - start_idx += 1; - - tmp = 0; - nBits_tmp = (int16_t) acelp_sig_tbl[start_idx++]; - for ( k = 0; k < nBits_tmp; k++ ) - { - tmp <<= 1; - tmp += bit_stream[k]; - } - - /* retrieve the signaling indice */ - *next_coder_type = acelp_sig_tbl[start_idx + tmp] & 0x7; - - return; -} - - -/*-------------------------------------------------------------------* - * get_indice_preview() - * - * Indices preview to parse for the presence of partial copy - *-------------------------------------------------------------------*/ - -static uint16_t get_indice_preview( - uint8_t *bitstream, - const int16_t bitstreamSize, - const int16_t pos, - const int16_t nb_bits ) -{ - uint16_t value; - int16_t i; - uint16_t bitstreamShort[MAX_BITS_PER_FRAME + 16]; - uint16_t *bitstreamShortPtr; - - /* convert bitstream from compact bytes to short values */ - bitstreamShortPtr = bitstreamShort; - for ( i = 0; i < bitstreamSize; i++ ) - { - *bitstreamShortPtr++ = ( bitstream[i / 8] >> ( 7 - ( i % 8 ) ) ) & 0x1; - } - - assert( nb_bits <= 16 ); - value = 0; - for ( i = 0; i < nb_bits; i++ ) - { - value <<= 1; - value += bitstreamShort[pos + i]; - } - return value; -} - - -/*-------------------------------------------------------------------* - * evs_dec_previewFrame() - * - * Signalling index preview for JBM - *-------------------------------------------------------------------*/ - -void evs_dec_previewFrame_float( - uint8_t *bitstream, - int16_t bitstreamSize, - int16_t *partialCopyFrameType, - int16_t *partialCopyOffset ) -{ - int32_t total_brate; - int16_t start_idx, nBits; - int32_t ind; - int16_t rf_flag; - - rf_flag = 0; - *partialCopyFrameType = 0; - *partialCopyOffset = 0; - total_brate = bitstreamSize * FRAMES_PER_SEC; - - if ( total_brate == ACELP_13k20 ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - start_idx = 0; - while ( acelp_sig_tbl[start_idx] != total_brate ) - { - start_idx++; - assert( ( start_idx < MAX_ACELP_SIG ) && "ERROR: start_idx larger than acelp_sig_tbl[].\n" ); - } - - /* skip the bitrate */ - start_idx += 1; - /* retrieve the number of bits */ - nBits = (int16_t) acelp_sig_tbl[start_idx++]; - - /* retrieve the signaling indice */ - ind = acelp_sig_tbl[start_idx + get_indice_preview( bitstream, bitstreamSize, 0, nBits )]; - - /* convert signaling indice into RF flag. */ - rf_flag = ( ind >> 7 ) & 0x1; - if ( rf_flag != 0 ) - { - /* read the FEC offset at which the partial copy is received */ - ind = get_indice_preview( bitstream, bitstreamSize, ( bitstreamSize - 5 ), 2 ); - if ( ind == 0 ) - { - *partialCopyOffset = 2; - } - else if ( ind == 1 ) - { - *partialCopyOffset = 3; - } - else if ( ind == 2 ) - { - *partialCopyOffset = 5; - } - else if ( ind == 3 ) - { - *partialCopyOffset = 7; - } - /* the last three bits in a packet is the RF frame type */ - *partialCopyFrameType = get_indice_preview( bitstream, bitstreamSize, bitstreamSize - 3, 3 ); - } - } - - return; -} - - -void dtx_read_padding_bits( - DEC_CORE_HANDLE st, - const int16_t num_bits ) -{ - /* TODO: temporary hack, need to decide what to do with core-coder bitrate */ - int32_t tmp; - - tmp = st->total_brate; - st->total_brate = st->total_brate + num_bits * FRAMES_PER_SEC; - get_next_indice( st, num_bits ); - st->total_brate = tmp; - - return; -} -#endif #undef WMC_TOOL_SKIP diff --git a/lib_com/calc_st_com.c b/lib_com/calc_st_com.c index 0c226076e..7d23dd6f7 100644 --- a/lib_com/calc_st_com.c +++ b/lib_com/calc_st_com.c @@ -40,268 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------------- - * calc_rc0_h() - * - * computes 1st parcor from composed filter impulse response - *---------------------------------------------------------------------------*/ - -static void calc_rc0_h( - const float *h, /* i : impulse response of composed filter */ - float *rc0 /* o : 1st parcor */ -) -{ - float acf0, acf1; - float temp, temp2; - const float *ptrs; - int16_t i; - - /* computation of the autocorrelation function acf */ - temp = 0.0f; - for ( i = 0; i < LONG_H_ST; i++ ) - { - temp += h[i] * h[i]; - } - acf0 = temp; - - temp = 0.0f; - ptrs = h; - for ( i = 0; i < LONG_H_ST - 1; i++ ) - { - temp2 = *ptrs++; - temp += temp2 * ( *ptrs ); - } - acf1 = temp; - - /* Initialisation of the calculation */ - if ( acf0 == 0.0f ) - { - *rc0 = 0.0f; - return; - } - - /* Compute 1st parcor */ - if ( acf0 < (float) fabs( acf1 ) ) - { - *rc0 = 0.0f; - return; - } - *rc0 = -acf1 / acf0; - - return; -} - -/*---------------------------------------------------------------------------- - * calc_st_filt() - * - * computes impulse response of A(gamma2) / A(gamma1) - * controls gain : computation of energy impulse response as - * SUMn (abs (h[n])) and computes parcor0 - *---------------------------------------------------------------------------- */ - -void calc_st_filt( - const float *apond2, /* i : coefficients of numerator */ - const float *apond1, /* i : coefficients of denominator */ - float *parcor0, /* o : 1st parcor calcul. on composed filter */ - float *sig_ltp_ptr, /* i/o: input of 1/A(gamma1) : scaled by 1/g0 */ - float *mem_zero, /* i/o: All zero memory */ - const int16_t L_subfr, /* i : the length of subframe */ - const int16_t extl /* i : extension layer info */ - -) -{ - float h[LONG_H_ST]; - float g0, temp; - int16_t i; - - /* compute i.r. of composed filter apond2 / apond1 */ - if ( extl == SWB_TBE ) - { - syn_filt( apond1, LPC_SHB_ORDER, apond2, h, LONG_H_ST, mem_zero, 0 ); - } - else - { - syn_filt( apond1, M, apond2, h, LONG_H_ST, mem_zero, 0 ); - } - - /* compute 1st parcor */ - calc_rc0_h( h, parcor0 ); - - /* compute g0 */ - g0 = 0.0f; - for ( i = 0; i < LONG_H_ST; i++ ) - { - g0 += (float) fabs( h[i] ); - } - - /* Scale signal input of 1/A(gamma1) */ - if ( g0 > 1.0f ) - { - temp = 1.0f / g0; - - for ( i = 0; i < L_subfr; i++ ) - { - sig_ltp_ptr[i] = sig_ltp_ptr[i] * temp; - } - } - - return; -} - -/*---------------------------------------------------------------------------- - * filt_mu() - * - * tilt filtering with : (1 + mu z-1) * (1/1-|mu|) - * computes y[n] = (1/1-|mu|) (x[n]+mu*x[n-1]) - *---------------------------------------------------------------------------*/ - -void filt_mu( - const float *sig_in, /* i : signal (beginning at sample -1) */ - float *sig_out, /* o : output signal */ - const float parcor0, /* i : parcor0 (mu = parcor0 * gamma3) */ - const int16_t L_subfr, /* i : the length of subframe */ - const int16_t extl /* i : extension layer info */ -) -{ - int16_t n; - float mu, ga, temp; - const float *ptrs; - - if ( extl == SWB_TBE ) - { - if ( parcor0 > 0.0f ) - { - mu = parcor0 * GAMMA3_PLUS_WB; - } - else - { - mu = parcor0 * GAMMA3_MINUS_WB; - } - } - else - { - if ( parcor0 > 0.0f ) - { - mu = parcor0 * GAMMA3_PLUS; - } - else - { - mu = parcor0 * GAMMA3_MINUS; - } - } - - ga = (float) 1. / ( (float) 1. - (float) fabs( mu ) ); - - ptrs = sig_in; /* points on sig_in(-1) */ - - for ( n = 0; n < L_subfr; n++ ) - { - temp = mu * ( *ptrs++ ); - temp += ( *ptrs ); - sig_out[n] = ga * temp; - } - - return; -} - - -/*---------------------------------------------------------------------------- - * scale_st_ivas() - * - * control of the subframe gain - * gain[n] = AGC_FAC_FX * gain[n-1] + (1 - AGC_FAC_FX) g_in/g_out - *---------------------------------------------------------------------------*/ - -void scale_st_ivas( - const float *sig_in, /* i : postfilter input signal */ - float *sig_out, /* i/o: postfilter output signal */ - float *gain_prec, /* i/o: last value of gain for subframe */ - const int16_t L_subfr, /* i : the length of subframe */ - const int16_t extl /* i : extension layer info */ -) -{ - int16_t i; - float gain_in, gain_out; - float g0, gain; - float agc_fac1_para = 0.0f; - float agc_fac_para = 0.0f; - - if ( extl == SWB_TBE ) - { - agc_fac1_para = AGC_FAC1_WB; - agc_fac_para = AGC_FAC_WB; - } - else - { - agc_fac1_para = AGC_FAC1; - agc_fac_para = AGC_FAC; - } - - /* compute input gain */ - gain_in = 0.0f; - for ( i = 0; i < L_subfr; i++ ) - { - gain_in += (float) fabs( sig_in[i] ); - } - - if ( gain_in == 0.0f ) - { - g0 = 0.0f; - } - else - { - /* Compute output gain */ - gain_out = 0.0f; - for ( i = 0; i < L_subfr; i++ ) - { - gain_out += (float) fabs( sig_out[i] ); - } - - if ( gain_out == 0.0f ) - { - *gain_prec = 0.0f; - return; - } - - g0 = gain_in / gain_out; - g0 *= agc_fac1_para; - } - - /* compute gain(n) = AGC_FAC gain(n-1) + (1-AGC_FAC)gain_in/gain_out */ - /* sig_out(n) = gain(n) sig_out(n) */ - gain = *gain_prec; - for ( i = 0; i < L_subfr; i++ ) - { - gain *= agc_fac_para; - gain += g0; - sig_out[i] *= gain; - } - - *gain_prec = gain; - - return; -} - -void blend_subfr2_flt( - float *sigIn1, - float *sigIn2, - float *sigOut ) -{ - float fac1 = 1.f - ( 1.f / L_SUBFR ); - float fac2 = 0.f + ( 1.f / L_SUBFR ); - float step = 1.f / ( L_SUBFR / 2 ); - int16_t i; - - for ( i = 0; i < L_SUBFR / 2; i++ ) - { - sigOut[i] = fac1 * sigIn1[i] + fac2 * sigIn2[i]; - fac1 -= step; - fac2 += step; - } - - return; -} -#endif diff --git a/lib_com/cb_shape.c b/lib_com/cb_shape.c index 0f87b8c0a..e7a8ca967 100644 --- a/lib_com/cb_shape.c +++ b/lib_com/cb_shape.c @@ -39,86 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * cb_shape() - * - * pre-emphasis, pitch sharpening and formant sharpening of the algebraic codebook - *-------------------------------------------------------------------*/ - -void cb_shape( - const int16_t preemphFlag, /* i : flag for pre-emphasis */ - const int16_t pitchFlag, /* i : flag for pitch sharpening */ - const int16_t scramblingFlag, /* i : flag for phase scrambling */ - const int16_t formantFlag, /* i : flag for formant sharpening */ - const int16_t formantTiltFlag, /* i : flag for formant tilt */ - const float g1, /* i : formant sharpening numerator weighting */ - const float g2, /* i : formant sharpening denominator weighting */ - const float *p_Aq, /* i : LP filter coefficients */ - float *code, /* i/o: signal to shape */ - const float tilt_code, /* i : tilt of code */ - const float pt_pitch, /* i : pointer to current subframe fractional pitch */ - const int16_t L_subfr /* i : subfframe length */ -) -{ - float buff[M + 2 * L_SUBFR], A_num[M + 1], A_den[M + 1]; - float tmp, tilt; - int16_t i, round_T0; - - /* pre-emphasize the algebraic codebook */ - if ( preemphFlag ) - { - tmp = 0.0f; - preemph( code, tilt_code, L_subfr, &tmp ); - } - - /* pitch sharpening */ - if ( pitchFlag ) - { - round_T0 = (int16_t) ( pt_pitch + 0.4f ); - for ( i = round_T0; i < L_subfr; i++ ) - { - code[i] += code[i - round_T0] * PIT_SHARP; - } - } - - /* phase scrambling filter */ - if ( scramblingFlag ) - { - buff[0] = code[0]; - for ( i = 1; i < L_subfr; i++ ) - { - buff[i] = code[i]; - code[i] = 0.7f * buff[i] + buff[i - 1] - 0.7f * code[i - 1]; - } - } - - /* formant sharpening (only on active speech) */ - if ( formantFlag || formantTiltFlag ) - { - weight_a( p_Aq, A_num, g1, M ); - weight_a( p_Aq, A_den, g2, M ); - - set_f( buff, 0, M + L_subfr ); - - /* formant tilt */ - if ( formantTiltFlag ) - { - mvr2r( A_num, buff + M, M + 1 ); - syn_filt( A_den, M, buff + M, buff + M, L_subfr, buff, 0 ); - tilt = get_gain_flt( buff + M + 1, buff + M, L_subfr - 1, NULL ); - tmp = 0.0; - preemph( code, 0.5f * tilt_code - 0.25f * tilt, L_subfr, &tmp ); - } - else - { - mvr2r( code, buff + M, L_subfr ); - residu( A_num, M, buff + M, code, L_subfr ); - syn_filt( A_den, M, code, code, L_subfr, buff, 0 ); - } - } - - return; -} -#endif diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c index 52d4bbbb8..d42e1f0f1 100644 --- a/lib_com/cldfb.c +++ b/lib_com/cldfb.c @@ -59,213 +59,20 @@ static void cldfb_init_proto_and_twiddles( HANDLE_CLDFB_FILTER_BANK hs ); -#ifdef IVAS_FLOAT_FIXED static void cldfb_init_proto_and_twiddles_enc_fx( HANDLE_CLDFB_FILTER_BANK hs ); -#else -static void cldfb_init_proto_and_twiddles_enc( HANDLE_CLDFB_FILTER_BANK hs ); -#endif -#ifndef IVAS_FLOAT_FIXED -static float GetEnergyCldfb_ivas( float *energyValuesSum, float *energyLookahead, float **realValues, float **imagValues, const int16_t numberBands, int16_t numberCols, TEC_ENC_HANDLE hTecEnc ); -#endif /*-------------------------------------------------------------------* * cplxMult() * * Conduct complex multiplication *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void cplxMult( - float *yr, /* o : real output */ - float *yi, /* o : imag output */ - const float xr, /* i : real input 1*/ - const float xi, /* i : imag input 1*/ - const float cr, /* i : real input 1*/ - const float ci /* i : imag input 1*/ -) -{ - *yr = xr * cr - xi * ci; - *yi = xr * ci + xi * cr; - - return; -} -#endif /*-------------------------------------------------------------------* * cldfbAnalysis_ivas() * * Conduct multiple overlap complex low delay MDCT *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void cldfbAnalysis_ivas( - const float *timeIn, /* i : time buffer */ - float **realBuffer, /* o : real value buffer */ - float **imagBuffer, /* o : imag value buffer */ - const int16_t samplesToProcess, /* i : samples to process */ - HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ -) -{ - int16_t i, k; - int16_t L2, M1, M2, M4; - int16_t no_col = h_cldfb->no_col; - - float r1, r2, rr12, ir12; - float i1, i2, ri12, ii12; - float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - const float *rot_vctr_re; - const float *rot_vctr_im; - const float *ptr_pf; - float *timeBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 9 * CLDFB_NO_CHANNELS_MAX )]; - int16_t offset, frameSize; - - offset = h_cldfb->p_filter_length - h_cldfb->no_channels; - frameSize = h_cldfb->no_channels * h_cldfb->no_col; - - assert( h_cldfb->prototype == CLDFB_PROTOTYPE_1_25MS ); - /* prepare input buffer */ - timeBuffer = buffer; - mvr2r( h_cldfb->cldfb_state, timeBuffer, offset ); - - if ( samplesToProcess > -1 ) - { - mvr2r( timeIn, timeBuffer + offset, samplesToProcess ); - set_f( timeBuffer + offset + samplesToProcess, 0.0f, ( frameSize - samplesToProcess ) ); - } - else - { - mvr2r( timeIn, timeBuffer + offset, frameSize ); - } - - /* only process needed cols */ - if ( samplesToProcess > -1 ) - { - no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); - } - - M1 = h_cldfb->no_channels; - M2 = M1 >> 1; - M4 = M1 >> 2; - L2 = M1 << 1; - - if ( M2 & 1 ) - { - M4 += 1; - } - - rot_vctr_re = h_cldfb->rot_vec_ana_re; - rot_vctr_im = h_cldfb->rot_vec_ana_im; - - ptr_pf = h_cldfb->p_filter_flt; - - for ( i = 0; i < no_col; i++ ) - { - for ( k = 0; k < M4; k++ ) - { - /* prototype filter */ - r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; - - r2 = 0 - ptr_pf[( L2 - M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 0 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 1 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 2 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 3 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 4 * L2]; - - i1 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; - - i2 = 0 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2]; - - /* folding + pre modulation of DST IV */ - rr12 = r1 - r2; - ri12 = -i1 - i2; - cplxMult( &rBuffer[2 * k], &rBuffer[2 * k + 1], rr12, ri12, rot_vctr_re[k], rot_vctr_im[k] ); - - /* folding + pre modulation of DCT IV */ - ir12 = r1 + r2; - ii12 = i1 - i2; - cplxMult( &iBuffer[2 * k], &iBuffer[2 * k + 1], ir12, ii12, rot_vctr_re[k], rot_vctr_im[k] ); - } - - for ( k = M4; k < M2; k++ ) - { - /* prototype filter */ - r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; - - r2 = 0 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 0 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 1 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 2 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 3 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 4 * L2]; - - i1 = 0 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 0 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 1 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 2 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 3 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 4 * L2]; - - i2 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; - - /* folding + pre modulation of DST IV */ - rr12 = r1 + r2; - ri12 = i1 - i2; - cplxMult( &rBuffer[2 * k], &rBuffer[2 * k + 1], rr12, ri12, rot_vctr_re[k], rot_vctr_im[k] ); - - /* folding + pre modulation of DCT IV */ - ir12 = r1 - r2; - ii12 = i1 + i2; - cplxMult( &iBuffer[2 * k], &iBuffer[2 * k + 1], ir12, ii12, rot_vctr_re[k], rot_vctr_im[k] ); - } - - /* FFT of DST IV */ - fft_cldfb( rBuffer, M2 ); - - /* post modulation of DST IV */ - for ( k = 0; k < M2; k++ ) - { - cplxMult( &realBuffer[i][M1 - 1 - ( 2 * k )], &realBuffer[i][2 * k], rBuffer[2 * k], rBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); - } - - /* FFT of DCT IV */ - fft_cldfb( iBuffer, M2 ); - - /* post modulation of DCT IV */ - for ( k = 0; k < M2; k++ ) - { - /* do it inplace */ - cplxMult( &imagBuffer[i][2 * k], &imagBuffer[i][M1 - 1 - ( 2 * k )], iBuffer[2 * k], iBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); - } - - timeBuffer += L2 * 5; - timeBuffer += h_cldfb->no_channels - h_cldfb->p_filter_length; - } - - /* update memory */ - mvr2r( buffer + frameSize, h_cldfb->cldfb_state, offset ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void cldfbAnalysis_ivas_fx( const Word32 *timeIn_fx, /* i : time buffer Qx */ Word32 **realBuffer_fx, /* o : real value buffer Qx - 5*/ @@ -474,229 +281,12 @@ void cldfbAnalysis_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* * cldfbAnalysis_ts_ivas() * * *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void cldfbAnalysis_ts_ivas( - const float *timeIn, /* i : time buffer */ - float realBuffer[CLDFB_NO_CHANNELS_MAX], /* o : real value buffer */ - float imagBuffer[CLDFB_NO_CHANNELS_MAX], /* o : imag value buffer */ - const int16_t samplesToProcess, /* i : samples to process */ - HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filterbank state */ -) -{ - int16_t i, k; - int16_t L2, M1, M2, M4; - int16_t no_col = h_cldfb->no_col; - - float r1, r2, rr12, ir12; - float i1, i2, ri12, ii12; - float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - const float *rot_vctr_re; - const float *rot_vctr_im; - const float *rot_vctr_delay_re; - const float *rot_vctr_delay_im; - const float *ptr_pf; - float *timeBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 9 * CLDFB_NO_CHANNELS_MAX )]; - int16_t offset, frameSize; - - offset = h_cldfb->p_filter_length - h_cldfb->no_channels; - frameSize = h_cldfb->no_channels * h_cldfb->no_col; - - /* prepare input buffer */ - timeBuffer = buffer; - mvr2r( h_cldfb->cldfb_state, timeBuffer, offset ); - - if ( samplesToProcess > -1 ) - { - mvr2r( timeIn, timeBuffer + offset, samplesToProcess ); - set_f( timeBuffer + offset + samplesToProcess, 0.0f, ( frameSize - samplesToProcess ) ); - } - else - { - mvr2r( timeIn, timeBuffer + offset, frameSize ); - } - - /* only process needed cols */ - if ( samplesToProcess > -1 ) - { - no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); - assert( no_col == 1 ); - } - - M1 = h_cldfb->no_channels; - M2 = M1 >> 1; - M4 = M1 >> 2; - L2 = M1 << 1; - - if ( M2 & 1 ) - { - M4 += 1; - } - - rot_vctr_re = h_cldfb->rot_vec_ana_re; - rot_vctr_im = h_cldfb->rot_vec_ana_im; - rot_vctr_delay_re = h_cldfb->rot_vec_ana_delay_re; - rot_vctr_delay_im = h_cldfb->rot_vec_ana_delay_im; - - ptr_pf = h_cldfb->p_filter_flt; - - for ( i = 0; i < no_col; i++ ) - { - for ( k = 0; k < M4; k++ ) - { - /* prototype filter */ - r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; - - r2 = 0 - ptr_pf[( L2 - M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 0 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 1 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 2 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 3 * L2]; - r2 = r2 - ptr_pf[( L2 - M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 + ( 2 * k ) + 4 * L2]; - - i1 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; - i1 = i1 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; - - i2 = 0 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2]; - - /* folding + pre modulation of DST IV */ - rr12 = r1 - r2; - ri12 = -i1 - i2; - /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/ - rBuffer[2 * k] = rr12 * rot_vctr_re[k] - ri12 * rot_vctr_im[k]; - rBuffer[2 * k + 1] = rr12 * rot_vctr_im[k] + ri12 * rot_vctr_re[k]; - - /* folding + pre modulation of DCT IV */ - ir12 = r1 + r2; - ii12 = i1 - i2; - /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/ - iBuffer[2 * k] = ir12 * rot_vctr_re[k] - ii12 * rot_vctr_im[k]; - iBuffer[2 * k + 1] = ir12 * rot_vctr_im[k] + ii12 * rot_vctr_re[k]; - } - - for ( k = M4; k < M2; k++ ) - { - /* prototype filter */ - r1 = 0 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 0 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 1 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 2 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 3 * L2]; - r1 = r1 - ptr_pf[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - M2 - 1 - ( 2 * k ) + 4 * L2]; - - r2 = 0 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 0 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 1 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 2 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 3 * L2]; - r2 = r2 - ptr_pf[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 5 * M2 + ( 2 * k ) + 4 * L2]; - - i1 = 0 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 0 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 1 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 2 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 3 * L2]; - i1 = i1 - ptr_pf[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 + M2 - 1 - ( 2 * k ) + 4 * L2]; - - i2 = 0 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 0 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 1 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 2 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 3 * L2]; - i2 = i2 - ptr_pf[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] * timeBuffer[L2 - 3 * M2 + ( 2 * k ) + 4 * L2]; - - /* folding + pre modulation of DST IV */ - rr12 = r1 + r2; - ri12 = i1 - i2; - /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/ - rBuffer[2 * k] = rr12 * rot_vctr_re[k] - ri12 * rot_vctr_im[k]; - rBuffer[2 * k + 1] = rr12 * rot_vctr_im[k] + ri12 * rot_vctr_re[k]; - - /* folding + pre modulation of DCT IV */ - ir12 = r1 - r2; - ii12 = i1 + i2; - /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/ - iBuffer[2 * k] = ir12 * rot_vctr_re[k] - ii12 * rot_vctr_im[k]; - iBuffer[2 * k + 1] = ir12 * rot_vctr_im[k] + ii12 * rot_vctr_re[k]; - } - - /* FFT of DST IV */ - fft_cldfb( rBuffer, M2 ); - - /* post modulation of DST IV */ - for ( k = 0; k < M2; k++ ) - { - /*cplxMult(&realBuffer[M1-1-(2*k)],&realBuffer[2*k],rBuffer[2*k],rBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/ - realBuffer[M1 - 1 - ( 2 * k )] = rBuffer[2 * k] * rot_vctr_re[k] - rBuffer[2 * k + 1] * rot_vctr_im[k]; - realBuffer[2 * k] = rBuffer[2 * k] * rot_vctr_im[k] + rBuffer[2 * k + 1] * rot_vctr_re[k]; - } - - /* FFT of DCT IV */ - fft_cldfb( iBuffer, M2 ); - - /* post modulation of DCT IV */ - for ( k = 0; k < M2; k++ ) - { - /* do it inplace */ - /*cplxMult(&imagBuffer[2*k],&imagBuffer[M1-1-(2*k)],iBuffer[2*k],iBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/ - imagBuffer[2 * k] = iBuffer[2 * k] * rot_vctr_re[k] - iBuffer[2 * k + 1] * rot_vctr_im[k]; - imagBuffer[M1 - 1 - ( 2 * k )] = iBuffer[2 * k] * rot_vctr_im[k] + iBuffer[2 * k + 1] * rot_vctr_re[k]; - } - - if ( h_cldfb->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - /* rotation due to delay*/ - /*if(h_cldfb->da != M1)*/ - if ( rot_vctr_delay_re != NULL ) - { - for ( k = 0; k < M1; k++ ) - { - float cplx_aux; - /* delay */ - /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[i][k], imagBuffer[i][k], cos((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)), - sin((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)));*/ - /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/ - /*cplxMult(&realBuffer[k], &imagBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/ - /*realBuffer[k] = rBuffer[k]; - imagBuffer[k] = iBuffer[k];*/ - cplx_aux = realBuffer[k] * rot_vctr_delay_re[k] - imagBuffer[k] * rot_vctr_delay_im[k]; - imagBuffer[k] = realBuffer[k] * rot_vctr_delay_im[k] + imagBuffer[k] * rot_vctr_delay_re[k]; - realBuffer[k] = cplx_aux; - } - } - } - - timeBuffer += L2 * 5; - timeBuffer += h_cldfb->no_channels - h_cldfb->p_filter_length; - } - - /* update memory */ - if ( samplesToProcess > -1 ) - { - mvr2r( buffer + samplesToProcess, h_cldfb->cldfb_state, offset ); - } - else - { - mvr2r( buffer + frameSize, h_cldfb->cldfb_state, offset ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void cldfbAnalysis_ts_fx( const Word32 *timeIn_fx, /* i : time buffer */ // q @@ -1230,195 +820,11 @@ void cldfbAnalysis_ts_fx_fixed_q( return; } -#endif /*-------------------------------------------------------------------* * cldfbSynthesis_ivas() * * Conduct inverse multple overlap cmplex low delay MDCT *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void cldfbSynthesis_ivas( - float **realBuffer, /* i : real values */ - float **imagBuffer, /* i : imag values */ - float *timeOut, /* o : output time domain samples */ - const int16_t samplesToProcess, /* i : number of processed samples */ - HANDLE_CLDFB_FILTER_BANK h_cldfb /* i : filter bank state */ -) -{ - int16_t i; - int16_t k; - int16_t L2; - int16_t M1; - int16_t M2; - int16_t M41; - int16_t M42; - int16_t Mz; - - float rBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - float iBuffer[2 * CLDFB_NO_CHANNELS_MAX]; - const float *rot_vctr_re; - const float *rot_vctr_im; - const float *rot_vctr_delay_re; - const float *rot_vctr_delay_im; - float rr12, ir12; - float ri12, ii12; - - float *synthesisBuffer, buffer[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 10 * CLDFB_NO_CHANNELS_MAX )]; - float new_samples[2 * CLDFB_NO_CHANNELS_MAX]; - - float *ptr_time_out; - const float *p_filter_flt; - - float accu0, accu1, accu2, accu3, accu4; - int16_t no_col = h_cldfb->no_col; - - M1 = h_cldfb->no_channels; - L2 = M1 << 1; - M2 = M1 >> 1; - M41 = M2 >> 1; - M42 = M2 - M41; - Mz = M1 - h_cldfb->bandsToZero; - - /* only process needed cols */ - if ( samplesToProcess > -1 ) - { - no_col = min( no_col, ( samplesToProcess + h_cldfb->no_channels - 1 ) / h_cldfb->no_channels ); - } - - rot_vctr_re = h_cldfb->rot_vec_syn_re; - rot_vctr_im = h_cldfb->rot_vec_syn_im; - - rot_vctr_delay_re = h_cldfb->rot_vec_syn_delay_re; - rot_vctr_delay_im = h_cldfb->rot_vec_syn_delay_im; - - synthesisBuffer = buffer; - mvr2r( h_cldfb->cldfb_state, synthesisBuffer + ( M1 * no_col ), h_cldfb->p_filter_length ); - - p_filter_flt = h_cldfb->p_filter_flt; - ptr_time_out = timeOut; - - /*synthesisBuffer += M1 * h_cldfb->no_col;*/ - synthesisBuffer += M1 * no_col; - - for ( k = 0; k < no_col; k++ ) - { - if ( h_cldfb->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - /* rotation due to delay*/ - /*if(h_cldfb->ds != M1)*/ - if ( rot_vctr_delay_re != NULL ) - { - for ( i = 0; i < M1; i++ ) - { - float cplx_aux; - /* delay */ - /*cplxMult(&rBuffer[i], &iBuffer[i], realBuffer[k][i], imagBuffer[k][i], cos((EVS_PI/M1)*(i+0.5)*(-(h_cldfb->ds-M1)*0.5)), - sin((EVS_PI/M1)*(i+0.5)*(-(h_cldfb->ds-M1)*0.5)));*/ - /*cplxMult(&rBuffer[i], &iBuffer[i], realBuffer[k][i], imagBuffer[k][i], rot_vctr_delay_re[i], rot_vctr_delay_im[i]);*/ - /*cplxMult(&realBuffer[k][i], &imagBuffer[k][i], realBuffer[k][i], imagBuffer[k][i], rot_vctr_delay_re[i], rot_vctr_delay_im[i]);*/ - cplx_aux = realBuffer[k][i] * rot_vctr_delay_re[i] - imagBuffer[k][i] * rot_vctr_delay_im[i]; - imagBuffer[k][i] = realBuffer[k][i] * rot_vctr_delay_im[i] + imagBuffer[k][i] * rot_vctr_delay_re[i]; - realBuffer[k][i] = cplx_aux; - /*realBuffer[k][i] = rBuffer[i]; - imagBuffer[k][i] = iBuffer[i];*/ - } - } - } - for ( i = Mz; i < M1; i++ ) - { - realBuffer[k][i] = 0.0f; - imagBuffer[k][i] = 0.0f; - } - - for ( i = 0; i < M2; i++ ) - { - /* pre modulation of DST IV */ - /*cplxMult(&rBuffer[2*i], &rBuffer[2*i+1], realBuffer[k][2*i], realBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ - rBuffer[2 * i] = realBuffer[k][2 * i] * rot_vctr_re[i] - realBuffer[k][M1 - 1 - 2 * i] * rot_vctr_im[i]; - rBuffer[2 * i + 1] = realBuffer[k][2 * i] * rot_vctr_im[i] + realBuffer[k][M1 - 1 - 2 * i] * rot_vctr_re[i]; - - /* pre modulation of DCT IV */ - /*cplxMult(&iBuffer[2*i], &iBuffer[2*i+1],-imagBuffer[k][2*i], imagBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ - iBuffer[2 * i] = ( -( imagBuffer[k][2 * i] ) ) * rot_vctr_re[i] - imagBuffer[k][M1 - 1 - 2 * i] * rot_vctr_im[i]; - iBuffer[2 * i + 1] = ( -( imagBuffer[k][2 * i] ) ) * rot_vctr_im[i] + imagBuffer[k][M1 - 1 - 2 * i] * rot_vctr_re[i]; - } - - /* FFT of DST IV */ - fft_cldfb( rBuffer, M2 ); - - /* FFT of DCT IV */ - fft_cldfb( iBuffer, M2 ); - - /* folding */ - for ( i = 0; i < M41; i++ ) - { - /* post modulation of DST IV */ - rr12 = rBuffer[M1 - 2 - 2 * i] * rot_vctr_re[M2 - 1 - i] - rBuffer[M1 - 1 - 2 * i] * rot_vctr_im[M2 - 1 - i]; - ri12 = rBuffer[M1 - 2 - 2 * i] * rot_vctr_im[M2 - 1 - i] + rBuffer[M1 - 1 - 2 * i] * rot_vctr_re[M2 - 1 - i]; - - /* post modulation of DCT IV */ - ir12 = iBuffer[M1 - 2 - 2 * i] * rot_vctr_re[M2 - 1 - i] - iBuffer[M1 - 1 - 2 * i] * rot_vctr_im[M2 - 1 - i]; - ii12 = iBuffer[M1 - 2 - 2 * i] * rot_vctr_im[M2 - 1 - i] + iBuffer[M1 - 1 - 2 * i] * rot_vctr_re[M2 - 1 - i]; - - new_samples[M1 + M2 + 1 + 2 * i] = -rr12 - ii12; - new_samples[M2 - 2 - 2 * i] = -ri12 - ir12; - - new_samples[M1 + M2 - 2 - 2 * i] = rr12 - ii12; - new_samples[M2 + 1 + 2 * i] = ir12 - ri12; - } - - for ( i = 0; i < M42; i++ ) - { - /* post modulation of DST IV */ - rr12 = rBuffer[2 * i] * rot_vctr_re[i] - rBuffer[2 * i + 1] * rot_vctr_im[i]; - ri12 = rBuffer[2 * i] * rot_vctr_im[i] + rBuffer[2 * i + 1] * rot_vctr_re[i]; - - /* post modulation of DCT IV */ - ir12 = iBuffer[2 * i] * rot_vctr_re[i] - iBuffer[2 * i + 1] * rot_vctr_im[i]; - ii12 = iBuffer[2 * i] * rot_vctr_im[i] + iBuffer[2 * i + 1] * rot_vctr_re[i]; - - new_samples[M1 + M2 + 2 * i] = ri12 + ir12; - new_samples[M2 - 1 - 2 * i] = rr12 + ii12; - - new_samples[M1 + M2 - 1 - 2 * i] = ir12 - ri12; - new_samples[M2 + 2 * i] = rr12 - ii12; - } - - /* synthesis prototype filter */ - for ( i = 0; i < L2; i++ ) - { - accu0 = synthesisBuffer[0 * L2 + i] + p_filter_flt[( 0 * L2 + i )] * new_samples[L2 - 1 - i]; - accu1 = synthesisBuffer[1 * L2 + i] + p_filter_flt[( 1 * L2 + i )] * new_samples[L2 - 1 - i]; - accu2 = synthesisBuffer[2 * L2 + i] + p_filter_flt[( 2 * L2 + i )] * new_samples[L2 - 1 - i]; - accu3 = synthesisBuffer[3 * L2 + i] + p_filter_flt[( 3 * L2 + i )] * new_samples[L2 - 1 - i]; - accu4 = synthesisBuffer[4 * L2 + i] + p_filter_flt[( 4 * L2 + i )] * new_samples[L2 - 1 - i]; - - synthesisBuffer[0 * L2 + i] = accu0; - synthesisBuffer[1 * L2 + i] = accu1; - synthesisBuffer[2 * L2 + i] = accu2; - synthesisBuffer[3 * L2 + i] = accu3; - synthesisBuffer[4 * L2 + i] = accu4; - } - - for ( i = 0; i < M1; i++ ) - { - ptr_time_out[M1 - 1 - i] = synthesisBuffer[4 * L2 + M1 + i]; - } - - ptr_time_out += M1; - - synthesisBuffer -= M1; - - set_f( synthesisBuffer, 0, M1 ); - } - - /* update memory */ - mvr2r( buffer, h_cldfb->cldfb_state, h_cldfb->p_filter_length ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void cldfbSynthesis_ivas_fx( Word32 **realBuffer_fx, /* i : real values Qx*/ Word32 **imagBuffer_fx, /* i : imag values Qx*/ @@ -1627,35 +1033,8 @@ void cldfbSynthesis_ivas_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * configureClfdb() - * - * configures a CLDFB handle - *--------------------------------------------------------------------*/ - -void configureCldfb_ivas( - HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ - const int32_t sampling_rate /* i : sampling rate */ -) -{ - - h_cldfb->no_col = CLDFB_NO_COL_MAX; - h_cldfb->bandsToZero = 0; - h_cldfb->nab = 0; - - h_cldfb->no_channels = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH + 0.5f ); - h_cldfb->p_filter_length = 10 * h_cldfb->no_channels; - - cldfb_init_proto_and_twiddles( h_cldfb ); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void configureCldfb_ivas_enc_fx( HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ const Word32 sampling_rate /* i : sampling rate */ @@ -1676,33 +1055,14 @@ void configureCldfb_ivas_enc_fx( return; } -#else -void configureCldfb_ivas_enc( +void configureCldfb_ivas_fx( HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ - const int32_t sampling_rate /* i : sampling rate */ + const Word32 sampling_rate /* i : sampling rate */ ) { h_cldfb->no_col = CLDFB_NO_COL_MAX; - h_cldfb->bandsToZero = 0; - h_cldfb->nab = 0; - - h_cldfb->no_channels = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH + 0.5f ); - h_cldfb->p_filter_length = 10 * h_cldfb->no_channels; - cldfb_init_proto_and_twiddles_enc( h_cldfb ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void configureCldfb_ivas_fx( - HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ - const Word32 sampling_rate /* i : sampling rate */ -) -{ - - h_cldfb->no_col = CLDFB_NO_COL_MAX; - move16(); + move16(); h_cldfb->bandsToZero = 0; move16(); h_cldfb->nab = 0; @@ -1724,13 +1084,11 @@ void configureCldfb_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* * openClfdb() * * open and configures a CLDFB handle *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error openCldfb_ivas_fx( HANDLE_CLDFB_FILTER_BANK *h_cldfb, /* i/o: filter bank handle */ CLDFB_TYPE type, /* i : analysis or synthesis */ @@ -1784,50 +1142,6 @@ ivas_error openCldfb_ivas_fx( return IVAS_ERR_OK; } -#else -ivas_error openCldfb_ivas( - HANDLE_CLDFB_FILTER_BANK *h_cldfb, /* i/o: filter bank handle */ - CLDFB_TYPE type, /* i : analysis or synthesis */ - const int32_t sampling_rate, /* i : sampling rate */ - CLDFB_PROTOTYPE prototype /* i : CLDFB version (1.25ms/5ms delay) */ -) -{ - HANDLE_CLDFB_FILTER_BANK hs; - int16_t buf_len; - - if ( ( hs = (HANDLE_CLDFB_FILTER_BANK) malloc( sizeof( CLDFB_FILTER_BANK ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); - } - - hs->type = type; - hs->prototype = prototype; - - configureCldfb_ivas( hs, sampling_rate ); - hs->memory_flt = NULL; - hs->memory_length = 0; - - if ( type == CLDFB_ANALYSIS ) - { - buf_len = hs->p_filter_length - hs->no_channels; - } - else - { - buf_len = hs->p_filter_length; - } - - if ( ( hs->cldfb_state = (float *) malloc( buf_len * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); - } - - set_f( hs->cldfb_state, 0.0f, buf_len ); - - *h_cldfb = hs; - - return IVAS_ERR_OK; -} -#endif ivas_error openCldfb_ivas_enc( HANDLE_CLDFB_FILTER_BANK *h_cldfb, /* i/o: filter bank handle */ CLDFB_TYPE type, /* i : analysis or synthesis */ @@ -1892,27 +1206,6 @@ ivas_error openCldfb_ivas_enc( * * Change sample rate of filter bank *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void resampleCldfb_ivas( - HANDLE_CLDFB_FILTER_BANK hs, /* i/o: filter bank handle */ - const int32_t newSamplerate ) -{ - int16_t timeOffset; - - /* keep old parameters before switching*/ - int16_t timeOffsetold = hs->p_filter_length - hs->no_channels; - - /* new settings */ - configureCldfb_ivas( hs, newSamplerate ); - - timeOffset = hs->p_filter_length - hs->no_channels; - - /*low complexity-resampling only stored previous samples that are needed for next frame modulation */ - lerp_flt( hs->cldfb_state, hs->cldfb_state, timeOffset, timeOffsetold ); - - return; -} -#else void resampleCldfb_ivas_fx( HANDLE_CLDFB_FILTER_BANK hs, /* i/o: filter bank handle */ const Word32 newSamplerate ) @@ -1932,40 +1225,7 @@ void resampleCldfb_ivas_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * analysisCLDFBEncoder() - * - * Encoder CLDFB analysis + energy stage - *--------------------------------------------------------------------*/ - -void analysisCldfbEncoder_ivas( - Encoder_State *st, /* i/o: encoder state structure */ - const float *timeIn, - const int16_t samplesToProcess, - float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float *ppBuf_Ener ) -{ - int16_t i; - float *ppBuf_Real[CLDFB_NO_COL_MAX]; - float *ppBuf_Imag[CLDFB_NO_COL_MAX]; - - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - ppBuf_Real[i] = &realBuffer[i][0]; - ppBuf_Imag[i] = &imagBuffer[i][0]; - } - - cldfbAnalysis_ivas( timeIn, ppBuf_Real, ppBuf_Imag, samplesToProcess, st->cldfbAnaEnc ); - st->currEnergyHF = GetEnergyCldfb_ivas( ppBuf_Ener, &st->currEnergyLookAhead, ppBuf_Real, ppBuf_Imag, st->cldfbAnaEnc->no_channels, st->cldfbAnaEnc->no_col, st->hTECEnc ); - - return; -} -#endif void analysisCldfbEncoder_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ @@ -2032,82 +1292,6 @@ void analysisCldfbEncoder_ivas_fx( return; } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * GetEnergyCldfb_ivas() - * - * Conduct energy from complex data - *--------------------------------------------------------------------*/ - -static float GetEnergyCldfb_ivas( - float *energyValuesSum, /* o : the result of the operation */ - float *energyLookahead, /* o : the result in the core look-ahead slot */ - float **realValues, /* i : the real part of the subsamples */ - float **imagValues, /* i : the imaginary part of the subsamples */ - const int16_t numberBands, /* i : number of bands */ - int16_t numberCols, /* i : number of subsamples */ - TEC_ENC_HANDLE hTecEnc /* i/o: TEC handle */ -) -{ - int16_t j, k; - float energyValues[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t numLookahead = 1; - - for ( k = 0; k < numberCols; k++ ) - { - for ( j = 0; j < numberBands; j++ ) - { - energyValues[k][j] = realValues[k][j] * realValues[k][j] + - imagValues[k][j] * imagValues[k][j]; - } - } - - if ( numberBands >= freqTable[1] && hTecEnc != NULL ) - { - float *tempEnergyValuesArry[CLDFB_NO_COL_MAX]; - - assert( numberCols == CLDFB_NO_COL_MAX ); - for ( j = 0; j < numberCols; j++ ) - { - tempEnergyValuesArry[j] = &energyValues[j][0]; - } - - calcHiEnvLoBuff( numberCols, freqTable, 1, tempEnergyValuesArry, hTecEnc->loBuffer_flt, hTecEnc->hiTempEnv_flt ); - } - - for ( j = 0; j < numberBands; j++ ) - { - energyValuesSum[j] = 0; - for ( k = 0; k < CLDFB_NO_COL_MAX; k++ ) - { - energyValuesSum[j] += energyValues[k][j]; - } - } - - if ( numberBands > 20 ) - { - float energyHF = *energyLookahead; /* energy above 8 kHz */ - numberCols -= numLookahead; - *energyLookahead = 6.1e-5f; /* process look-ahead region */ - - for ( j = 20; j < min( 40, numberBands ); j++ ) - { - energyHF += energyValuesSum[j]; - - for ( k = numberCols; k < CLDFB_NO_COL_MAX; k++ ) - { - energyHF -= energyValues[k][j]; - *energyLookahead += energyValues[k][j]; - } - } - - return energyHF * OUTMAX_SQ_INV; - } - - return 65535.0f; -} -#endif - /*-------------------------------------------------------------------* * GetEnergyCldfb_ivas() @@ -2127,12 +1311,6 @@ void deleteCldfb_ivas( return; } -#ifndef IVAS_FLOAT_FIXED - IF( hs->cldfb_state ) - { - free( hs->cldfb_state ); - } -#else IF( hs->cldfb_state_fx ) { free( hs->cldfb_state_fx ); @@ -2142,7 +1320,6 @@ void deleteCldfb_ivas( { free( hs->FilterStates ); } -#endif free( hs ); *h_cldfb = NULL; @@ -2150,7 +1327,6 @@ void deleteCldfb_ivas( return; } -#ifdef IVAS_FLOAT_FIXED void deleteCldfb_ivas_fx( HANDLE_CLDFB_FILTER_BANK *h_cldfb /* i/o: filter bank handle */ ) @@ -2178,7 +1354,6 @@ void deleteCldfb_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -2187,7 +1362,6 @@ void deleteCldfb_ivas_fx( * Initializes rom pointer *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void cldfb_init_proto_and_twiddles( HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ ) @@ -2419,1030 +1593,212 @@ static void cldfb_init_proto_and_twiddles( return; } -#else -static void cldfb_init_proto_and_twiddles( + +static void cldfb_init_proto_and_twiddles_enc_fx( HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ ) { /*find appropriate set of rotVecs*/ - switch ( hs->no_channels ) + SWITCH( hs->no_channels ) { case 10: - hs->rot_vec_ana_re = rot_vec_ana_re_L10; - hs->rot_vec_ana_im = rot_vec_ana_im_L10; - hs->rot_vec_syn_re = rot_vec_syn_re_L10; - hs->rot_vec_syn_im = rot_vec_syn_im_L10; -#ifdef IVAS_FLOAT_FIXED hs->rot_vec_ana_re_fx = rot_vec_ana_re_L10_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L10_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L10_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L10_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + hs->rRotVctr = rRotVectr_10; + hs->iRotVctr = iRotVectr_10; + IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) + { + hs->synScalefactor = add( cldfb_synScale[0], hs->filterScale ); + move16(); + } + ELSE + { + hs->anaScalefactor = add( cldfb_anaScale[0], hs->filterScale ); + move16(); + } + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { - hs->p_filter_flt = CLDFB80_10_flt; - hs->scale_flt = CLDFB80_10_SCALE; hs->ds = 10; hs->da = 10; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17036; + hs->rot_vec_syn_delay_im_fx = NULL; + hs->p_filter_sf = (Word16) 17036; // Q14 + hs->scale = cldfb_scale_2_5ms[0]; + move16(); + move16(); hs->p_filter = CLDFB80_10_fx; - hs->scale = CLDFB80_10_SCALE_FX_Q8; -#endif } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { - hs->p_filter_flt = LDQMF_10; - hs->scale_flt = LDQMF_10_SCALE; hs->ds = 40; hs->da = -20; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_10_fx; - hs->scale = LDQMF_10_SCALE_FX_Q8; -#endif + hs->scale = cldfb_scale_5_0ms[0]; + move16(); + move16(); } - break; + BREAK; case 16: - hs->rot_vec_ana_re = rot_vec_ana_re_L16; - hs->rot_vec_ana_im = rot_vec_ana_im_L16; - hs->rot_vec_syn_re = rot_vec_syn_re_L16; - hs->rot_vec_syn_im = rot_vec_syn_im_L16; -#ifdef IVAS_FLOAT_FIXED hs->rot_vec_ana_re_fx = rot_vec_ana_re_L16_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L16_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L16_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L16_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + hs->rRotVctr = rRotVectr_16; + hs->iRotVctr = iRotVectr_16; + { + hs->anaScalefactor = add( cldfb_anaScale[1], hs->filterScale ); + move16(); + } + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { - hs->p_filter_flt = CLDFB80_16_flt; - hs->scale_flt = CLDFB80_16_SCALE; hs->ds = 20; hs->da = 20; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->rot_vec_syn_delay_im_fx = NULL; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_16_fx; - hs->scale = CLDFB80_16_SCALE_FX_Q8; -#endif + hs->scale = cldfb_scale_2_5ms[1]; + move16(); + move16(); } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { - hs->p_filter_flt = LDQMF_16; - hs->scale_flt = LDQMF_16_SCALE; hs->ds = 80; hs->da = -40; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_16_fx; - hs->scale = LDQMF_16_SCALE_FX_Q8; -#endif + hs->scale = cldfb_scale_5_0ms[1]; + move16(); + move16(); } - break; + BREAK; case 20: - hs->rot_vec_ana_re = rot_vec_ana_re_L20; - hs->rot_vec_ana_im = rot_vec_ana_im_L20; - hs->rot_vec_syn_re = rot_vec_syn_re_L20; - hs->rot_vec_syn_im = rot_vec_syn_im_L20; -#ifdef IVAS_FLOAT_FIXED + + hs->rRotVctr = rRotVectr_20; + hs->iRotVctr = iRotVectr_20; hs->rot_vec_ana_re_fx = rot_vec_ana_re_L20_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L20_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L20_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L20_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) + { + hs->synScalefactor = add( cldfb_synScale[2], hs->filterScale ); + move16(); + } + ELSE + { + hs->anaScalefactor = add( cldfb_anaScale[2], hs->filterScale ); + move16(); + } + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { - hs->p_filter_flt = CLDFB80_20_flt; - hs->scale_flt = CLDFB80_20_SCALE; hs->ds = 20; hs->da = 20; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17050; + hs->rot_vec_syn_delay_im_fx = NULL; + hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_20_fx; - hs->scale = CLDFB80_20_SCALE_FX_Q8; -#endif + hs->scale = cldfb_scale_2_5ms[2]; + move16(); + move16(); } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { - hs->p_filter_flt = LDQMF_20; - hs->scale_flt = LDQMF_20_SCALE; hs->ds = 80; hs->da = -40; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15390; + hs->p_filter_sf = (Word16) 15390; // Q14 hs->p_filter = LDQMF_20_fx; - hs->scale = LDQMF_20_SCALE_FX_Q8; -#endif + hs->scale = cldfb_scale_5_0ms[2]; + move16(); + move16(); } - break; + BREAK; case 30: - hs->rot_vec_ana_re = rot_vec_ana_re_L30; - hs->rot_vec_ana_im = rot_vec_ana_im_L30; - hs->rot_vec_syn_re = rot_vec_syn_re_L30; - hs->rot_vec_syn_im = rot_vec_syn_im_L30; -#ifdef IVAS_FLOAT_FIXED hs->rot_vec_ana_re_fx = rot_vec_ana_re_L30_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L30_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L30_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L30_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + hs->rRotVctr = rRotVectr_30; + hs->iRotVctr = iRotVectr_30; + IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) + { + hs->synScalefactor = add( cldfb_synScale[6], hs->filterScale ); + move16(); + } + ELSE + { + hs->anaScalefactor = add( cldfb_anaScale[6], hs->filterScale ); + move16(); + } + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { - hs->p_filter_flt = CLDFB80_30_flt; - hs->scale_flt = CLDFB80_30_SCALE; hs->ds = 30; hs->da = 30; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->rot_vec_syn_delay_im_fx = NULL; + hs->p_filter_sf = (Word16) 17051; // Q14 + hs->scale = cldfb_scale_2_5ms[6]; hs->p_filter = CLDFB80_30_fx; - hs->scale = CLDFB80_30_SCALE_FX_Q8; -#endif } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { - hs->p_filter_flt = LDQMF_30; - hs->scale_flt = LDQMF_30_SCALE; hs->ds = 120; hs->da = -60; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 + hs->scale = cldfb_scale_5_0ms[6]; hs->p_filter = LDQMF_30_fx; - hs->scale = LDQMF_30_SCALE_FX_Q8; -#endif - } - break; - - case 32: - hs->rot_vec_ana_re = rot_vec_ana_re_L32; - hs->rot_vec_ana_im = rot_vec_ana_im_L32; - hs->rot_vec_syn_re = rot_vec_syn_re_L32; - hs->rot_vec_syn_im = rot_vec_syn_im_L32; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L32_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L32_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L32_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L32_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->p_filter_flt = CLDFB80_32_flt; - hs->scale_flt = CLDFB80_32_SCALE; - hs->ds = 32; - hs->da = 32; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17050; - hs->p_filter = CLDFB80_32_fx; - hs->scale = CLDFB80_32_SCALE_FX_Q8; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->p_filter_flt = LDQMF_32; - hs->scale_flt = LDQMF_32_SCALE; - hs->ds = 160; - hs->da = -80; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15392; - hs->p_filter = LDQMF_32_fx; - hs->scale = LDQMF_32_SCALE_FX_Q8; -#endif - } - break; - - case 40: - hs->rot_vec_ana_re = rot_vec_ana_re_L40; - hs->rot_vec_ana_im = rot_vec_ana_im_L40; - hs->rot_vec_syn_re = rot_vec_syn_re_L40; - hs->rot_vec_syn_im = rot_vec_syn_im_L40; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L40_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L40_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L40_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L40_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->p_filter_flt = CLDFB80_40_flt; - hs->scale_flt = CLDFB80_40_SCALE; - hs->ds = 40; - hs->da = 40; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; - hs->p_filter = CLDFB80_40_fx; - hs->scale = CLDFB80_40_SCALE_FX_Q8; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->p_filter_flt = LDQMF_40; - hs->scale_flt = LDQMF_40_SCALE; - hs->ds = 160; - hs->da = -80; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; - hs->p_filter = LDQMF_40_fx; - hs->scale = LDQMF_40_SCALE_FX_Q8; -#endif - } - break; - - case 60: - hs->rot_vec_ana_re = rot_vec_ana_re_L60; - hs->rot_vec_ana_im = rot_vec_ana_im_L60; - hs->rot_vec_syn_re = rot_vec_syn_re_L60; - hs->rot_vec_syn_im = rot_vec_syn_im_L60; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L60_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L60_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L60_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L60_fx; -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->p_filter_flt = CLDFB80_60_flt; - hs->scale_flt = CLDFB80_60_SCALE; - hs->ds = 60; - hs->da = 60; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; - hs->p_filter = CLDFB80_60_fx; - hs->scale = CLDFB80_60_SCALE_FX_Q8; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->p_filter_flt = LDQMF_60; - hs->scale_flt = LDQMF_60_SCALE; - hs->ds = 240; - hs->da = -120; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; - hs->p_filter = LDQMF_60_fx; - hs->scale = LDQMF_60_SCALE_FX_Q8; -#endif - } - break; - } - - return; -} -#endif // IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED -static void cldfb_init_proto_and_twiddles_enc_fx( - HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ -) -{ - /*find appropriate set of rotVecs*/ - SWITCH( hs->no_channels ) - { - case 10: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L10_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L10_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L10_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L10_fx; - hs->rRotVctr = rRotVectr_10; - hs->iRotVctr = iRotVectr_10; - IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) - { - hs->synScalefactor = add( cldfb_synScale[0], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[0], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 10; - hs->da = 10; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17036; // Q14 - hs->scale = cldfb_scale_2_5ms[0]; - move16(); - move16(); - hs->p_filter = CLDFB80_10_fx; - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 40; - hs->da = -20; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->p_filter = LDQMF_10_fx; - hs->scale = cldfb_scale_5_0ms[0]; - move16(); - move16(); - } - BREAK; - - case 16: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L16_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L16_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L16_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L16_fx; - hs->rRotVctr = rRotVectr_16; - hs->iRotVctr = iRotVectr_16; - { - hs->anaScalefactor = add( cldfb_anaScale[1], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 20; - hs->da = 20; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->p_filter = CLDFB80_16_fx; - hs->scale = cldfb_scale_2_5ms[1]; - move16(); - move16(); - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 80; - hs->da = -40; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->p_filter = LDQMF_16_fx; - hs->scale = cldfb_scale_5_0ms[1]; - move16(); - move16(); - } - BREAK; - - case 20: - - hs->rRotVctr = rRotVectr_20; - hs->iRotVctr = iRotVectr_20; - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L20_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L20_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L20_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L20_fx; - IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) - { - hs->synScalefactor = add( cldfb_synScale[2], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[2], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 20; - hs->da = 20; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17050; // Q14 - hs->p_filter = CLDFB80_20_fx; - hs->scale = cldfb_scale_2_5ms[2]; - move16(); - move16(); - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 80; - hs->da = -40; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15390; // Q14 - hs->p_filter = LDQMF_20_fx; - hs->scale = cldfb_scale_5_0ms[2]; - move16(); - move16(); - } - BREAK; - - case 30: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L30_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L30_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L30_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L30_fx; - hs->rRotVctr = rRotVectr_30; - hs->iRotVctr = iRotVectr_30; - IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) - { - hs->synScalefactor = add( cldfb_synScale[6], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[6], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 30; - hs->da = 30; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->scale = cldfb_scale_2_5ms[6]; - hs->p_filter = CLDFB80_30_fx; - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 120; - hs->da = -60; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->scale = cldfb_scale_5_0ms[6]; - hs->p_filter = LDQMF_30_fx; - move16(); - move16(); - } - BREAK; - - case 32: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L32_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L32_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L32_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L32_fx; - hs->rRotVctr = rRotVectr_32; - hs->iRotVctr = iRotVectr_32; - { - hs->anaScalefactor = add( cldfb_anaScale[3], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 32; - hs->da = 32; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17050; // Q14 - hs->p_filter = CLDFB80_32_fx; - hs->scale = cldfb_scale_2_5ms[3]; - move16(); - move16(); - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 160; - hs->da = -80; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15392; // Q14 - hs->scale = cldfb_scale_5_0ms[3]; - hs->p_filter = LDQMF_32_fx; - move16(); - move16(); - } - BREAK; - - case 40: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L40_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L40_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L40_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L40_fx; - hs->rRotVctr = rRotVectr_40; - hs->iRotVctr = iRotVectr_40; - IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) - { - hs->synScalefactor = add( cldfb_synScale[4], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[4], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 40; - hs->da = 40; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->scale = cldfb_scale_2_5ms[4]; - hs->p_filter = CLDFB80_40_fx; - move16(); - move16(); - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 160; - hs->da = -80; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; // Q14 - hs->p_filter = LDQMF_40_fx; - hs->scale = cldfb_scale_5_0ms[4]; - move16(); - move16(); - } - BREAK; - - case 60: - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L60_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L60_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L60_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L60_fx; - hs->rRotVctr = rRotVectr_60; - hs->iRotVctr = iRotVectr_60; - IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) - { - hs->synScalefactor = add( cldfb_synScale[5], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[5], hs->filterScale ); - move16(); - } - IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) - { - hs->ds = 60; - hs->da = 60; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->p_filter = CLDFB80_60_fx; - hs->scale = cldfb_scale_2_5ms[5]; - move16(); - move16(); - } - ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) - { - hs->ds = 240; - hs->da = -120; - move16(); - move16(); - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; // Q14 - hs->p_filter = LDQMF_60_fx; - hs->scale = cldfb_scale_5_0ms[5]; - move16(); - move16(); - } - break; - } - - return; -} -#else -static void cldfb_init_proto_and_twiddles_enc( - HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ -) -{ - /*find appropriate set of rotVecs*/ - switch ( hs->no_channels ) - { - case 10: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L10; - hs->rot_vec_ana_im = rot_vec_ana_im_L10; - hs->rot_vec_syn_re = rot_vec_syn_re_L10; - hs->rot_vec_syn_im = rot_vec_syn_im_L10; -#else - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L10_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L10_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L10_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L10_fx; - hs->rRotVctr = rRotVectr_10; - hs->iRotVctr = iRotVectr_10; - IF( hs->type == CLDFB_SYNTHESIS ) - { - hs->synScalefactor = add( cldfb_synScale[0], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[0], hs->filterScale ); - move16(); - } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->ds = 10; - hs->da = 10; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_10_SCALE; - hs->p_filter_flt = CLDFB80_10_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17036; // Q14 - hs->scale = cldfb_scale_2_5ms[0]; - hs->p_filter = CLDFB80_10_fx; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { -#ifndef IVAS_FLOAT_FIXED - hs->p_filter_flt = LDQMF_10; - hs->scale_flt = LDQMF_10_SCALE; -#endif - hs->ds = 40; - hs->da = -20; -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->p_filter = LDQMF_10_fx; - hs->scale = cldfb_scale_5_0ms[0]; -#endif - } - break; - - case 16: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L16; - hs->rot_vec_ana_im = rot_vec_ana_im_L16; - hs->rot_vec_syn_re = rot_vec_syn_re_L16; - hs->rot_vec_syn_im = rot_vec_syn_im_L16; -#else - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L16_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L16_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L16_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L16_fx; - hs->rRotVctr = rRotVectr_16; - hs->iRotVctr = iRotVectr_16; - { - hs->anaScalefactor = add( cldfb_anaScale[1], hs->filterScale ); - move16(); - } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { -#ifndef IVAS_FLOAT_FIXED - hs->p_filter_flt = CLDFB80_16_flt; - hs->scale_flt = CLDFB80_16_SCALE; -#endif - hs->ds = 20; - hs->da = 20; -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->p_filter = CLDFB80_16_fx; - hs->scale = cldfb_scale_2_5ms[1]; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->ds = 80; - hs->da = -40; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_16_SCALE; - hs->p_filter_flt = LDQMF_16; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->p_filter = LDQMF_16_fx; - hs->scale = cldfb_scale_5_0ms[1]; -#endif - } - break; - - case 20: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L20; - hs->rot_vec_ana_im = rot_vec_ana_im_L20; - hs->rot_vec_syn_re = rot_vec_syn_re_L20; - hs->rot_vec_syn_im = rot_vec_syn_im_L20; -#else - hs->rRotVctr = rRotVectr_20; - hs->iRotVctr = iRotVectr_20; - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L20_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L20_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L20_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L20_fx; - IF( hs->type == CLDFB_SYNTHESIS ) - { - hs->synScalefactor = add( cldfb_synScale[2], hs->filterScale ); - move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[2], hs->filterScale ); - move16(); - } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->ds = 20; - hs->da = 20; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_20_SCALE; - hs->p_filter_flt = CLDFB80_20_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17050; // Q14 - hs->p_filter = CLDFB80_20_fx; - hs->scale = cldfb_scale_2_5ms[2]; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->ds = 80; - hs->da = -40; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_20_SCALE; - hs->p_filter_flt = LDQMF_20; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15390; // Q14 - hs->p_filter = LDQMF_20_fx; - hs->scale = cldfb_scale_5_0ms[2]; -#endif - } - break; - - case 30: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L30; - hs->rot_vec_ana_im = rot_vec_ana_im_L30; - hs->rot_vec_syn_re = rot_vec_syn_re_L30; - hs->rot_vec_syn_im = rot_vec_syn_im_L30; -#else - hs->rot_vec_ana_re_fx = rot_vec_ana_re_L30_fx; - hs->rot_vec_ana_im_fx = rot_vec_ana_im_L30_fx; - hs->rot_vec_syn_re_fx = rot_vec_syn_re_L30_fx; - hs->rot_vec_syn_im_fx = rot_vec_syn_im_L30_fx; - hs->rRotVctr = rRotVectr_30; - hs->iRotVctr = iRotVectr_30; - IF( hs->type == CLDFB_SYNTHESIS ) - { - hs->synScalefactor = add( cldfb_synScale[6], hs->filterScale ); move16(); - } - ELSE - { - hs->anaScalefactor = add( cldfb_anaScale[6], hs->filterScale ); move16(); } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) - { - hs->ds = 30; - hs->da = 30; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_30_SCALE; - hs->p_filter_flt = CLDFB80_30_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else - hs->rot_vec_ana_delay_re_fx = NULL; - hs->rot_vec_ana_delay_im_fx = NULL; - hs->rot_vec_syn_delay_re_fx = NULL; - hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; // Q14 - hs->scale = cldfb_scale_2_5ms[6]; - hs->p_filter = CLDFB80_30_fx; -#endif - } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) - { - hs->ds = 120; - hs->da = -60; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_30_SCALE; - hs->p_filter_flt = LDQMF_30; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else - hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; - hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; // Q14 - hs->scale = cldfb_scale_5_0ms[6]; - hs->p_filter = LDQMF_30_fx; -#endif - } - break; + BREAK; case 32: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L32; - hs->rot_vec_ana_im = rot_vec_ana_im_L32; - hs->rot_vec_syn_re = rot_vec_syn_re_L32; - hs->rot_vec_syn_im = rot_vec_syn_im_L32; -#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L32_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L32_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L32_fx; @@ -3453,19 +1809,12 @@ static void cldfb_init_proto_and_twiddles_enc( hs->anaScalefactor = add( cldfb_anaScale[3], hs->filterScale ); move16(); } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { hs->ds = 32; hs->da = 32; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_32_SCALE; - hs->p_filter_flt = CLDFB80_32_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; @@ -3473,20 +1822,15 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_32_fx; hs->scale = cldfb_scale_2_5ms[3]; -#endif + move16(); + move16(); } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { hs->ds = 160; hs->da = -80; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_32_SCALE; - hs->p_filter_flt = LDQMF_32; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; @@ -3494,24 +1838,19 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 15392; // Q14 hs->scale = cldfb_scale_5_0ms[3]; hs->p_filter = LDQMF_32_fx; -#endif + move16(); + move16(); } - break; + BREAK; case 40: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L40; - hs->rot_vec_ana_im = rot_vec_ana_im_L40; - hs->rot_vec_syn_re = rot_vec_syn_re_L40; - hs->rot_vec_syn_im = rot_vec_syn_im_L40; -#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L40_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L40_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L40_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L40_fx; hs->rRotVctr = rRotVectr_40; hs->iRotVctr = iRotVectr_40; - IF( hs->type == CLDFB_SYNTHESIS ) + IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) { hs->synScalefactor = add( cldfb_synScale[4], hs->filterScale ); move16(); @@ -3521,19 +1860,12 @@ static void cldfb_init_proto_and_twiddles_enc( hs->anaScalefactor = add( cldfb_anaScale[4], hs->filterScale ); move16(); } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { hs->ds = 40; hs->da = 40; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_40_SCALE; - hs->p_filter_flt = CLDFB80_40_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; @@ -3541,20 +1873,15 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 17051; // Q14 hs->scale = cldfb_scale_2_5ms[4]; hs->p_filter = CLDFB80_40_fx; -#endif + move16(); + move16(); } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { hs->ds = 160; hs->da = -80; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_40_SCALE; - hs->p_filter_flt = LDQMF_40; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; @@ -3562,24 +1889,19 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_40_fx; hs->scale = cldfb_scale_5_0ms[4]; -#endif + move16(); + move16(); } - break; + BREAK; case 60: -#ifndef IVAS_FLOAT_FIXED - hs->rot_vec_ana_re = rot_vec_ana_re_L60; - hs->rot_vec_ana_im = rot_vec_ana_im_L60; - hs->rot_vec_syn_re = rot_vec_syn_re_L60; - hs->rot_vec_syn_im = rot_vec_syn_im_L60; -#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L60_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L60_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L60_fx; hs->rot_vec_syn_im_fx = rot_vec_syn_im_L60_fx; hs->rRotVctr = rRotVectr_60; hs->iRotVctr = iRotVectr_60; - IF( hs->type == CLDFB_SYNTHESIS ) + IF( EQ_16( hs->type, CLDFB_SYNTHESIS ) ) { hs->synScalefactor = add( cldfb_synScale[5], hs->filterScale ); move16(); @@ -3589,19 +1911,12 @@ static void cldfb_init_proto_and_twiddles_enc( hs->anaScalefactor = add( cldfb_anaScale[5], hs->filterScale ); move16(); } -#endif - if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) + IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_1_25MS ) ) { hs->ds = 60; hs->da = 60; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = CLDFB80_60_SCALE; - hs->p_filter_flt = CLDFB80_60_flt; - hs->rot_vec_ana_delay_re = NULL; - hs->rot_vec_ana_delay_im = NULL; - hs->rot_vec_syn_delay_re = NULL; - hs->rot_vec_syn_delay_im = NULL; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; @@ -3609,20 +1924,15 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_60_fx; hs->scale = cldfb_scale_2_5ms[5]; -#endif + move16(); + move16(); } - else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) + ELSE IF( EQ_16( hs->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { hs->ds = 240; hs->da = -120; -#ifndef IVAS_FLOAT_FIXED - hs->scale_flt = LDQMF_60_SCALE; - hs->p_filter_flt = LDQMF_60; - hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; - hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; - hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#else + move16(); + move16(); hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; @@ -3630,20 +1940,19 @@ static void cldfb_init_proto_and_twiddles_enc( hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_60_fx; hs->scale = cldfb_scale_5_0ms[5]; -#endif + move16(); + move16(); } break; } return; } -#endif /*-------------------------------------------------------------------* * cldfb_save_memory_ivas() * * Save the memory of filter; to be restored with cldfb_restore_memory_ivas() *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error cldfb_save_memory_ivas_fx( HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ ) @@ -3675,46 +1984,12 @@ ivas_error cldfb_save_memory_ivas_fx( return IVAS_ERR_OK; } -#else -ivas_error cldfb_save_memory_ivas( - HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ -) -{ - uint16_t offset = hs->p_filter_length - hs->no_channels; - - if ( hs->memory_flt != NULL || hs->memory_length != 0 ) - { - /* memory already stored; Free memory first */ - return IVAS_ERR_OK; - } - - if ( hs->type == CLDFB_ANALYSIS ) - { - hs->memory_length = offset; - } - else - { - hs->memory_length = hs->p_filter_length; - } - - if ( ( hs->memory_flt = (float *) malloc( hs->memory_length * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB\n" ); - } - - /* save the memory */ - mvr2r( hs->cldfb_state, hs->memory_flt, hs->memory_length ); - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * cldfb_restore_memory_ivas() * * Restores the memory of filter; memory to be save by cldfb_save_memory_ivas() *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void cldfb_restore_memory_ivas_fx( HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ ) @@ -3756,75 +2031,12 @@ void cldfb_restore_memory_ivas_fx( return; } -#else -void cldfb_restore_memory_ivas( - HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ -) -{ - uint16_t offset = hs->p_filter_length - hs->no_channels; - uint16_t size; - - if ( hs->memory_flt == NULL || hs->memory_length == 0 ) - { - /* memory not allocated */ - return; - } - - if ( hs->type == CLDFB_ANALYSIS ) - { - size = offset; - } - else - { - size = hs->p_filter_length; - } - - /* read the memory */ - mvr2r( hs->memory_flt, hs->cldfb_state, hs->memory_length ); - - /* adjust sample rate if it was changed in the meanwhile */ - if ( hs->memory_length != size ) - { - lerp_flt( hs->cldfb_state, hs->cldfb_state, size, hs->memory_length ); - } - - hs->memory_length = 0; - free( hs->memory_flt ); - hs->memory_flt = NULL; - - return; -} -#endif /*-------------------------------------------------------------------* * cldfb_reset_memory_ivas() * * Resets the memory of filter. *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void cldfb_reset_memory_ivas( - HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ -) -{ - uint16_t offset = hs->p_filter_length - hs->no_channels; - int16_t memory_length; - - if ( hs->type == CLDFB_ANALYSIS ) - { - memory_length = offset; - } - else - { - memory_length = hs->p_filter_length; - } - - /* save the memory */ - set_f( hs->cldfb_state, 0, memory_length ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void cldfb_reset_memory_fx( HANDLE_CLDFB_FILTER_BANK hs /* i/o: filter bank handle */ ) @@ -3852,4 +2064,3 @@ void cldfb_reset_memory_fx( return; } -#endif diff --git a/lib_com/cng_exc.c b/lib_com/cng_exc.c index dc7acaa8c..794b6de29 100644 --- a/lib_com/cng_exc.c +++ b/lib_com/cng_exc.c @@ -49,574 +49,9 @@ #define A2 0.2f #define GAIN_VAR 0.000011f -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------* - * CNG_exc() - * - * Comfort noise generation routine - *-------------------------------------------------------*/ - -void CNG_exc( - const int32_t core_brate, /* i : core bitrate */ - const int16_t L_frame, /* i : length of the frame */ - float *Enew, /* i/o: decoded SID energy */ - int16_t *seed, /* i/o: random generator seed */ - float exc[], /* o : current non-enhanced excitation */ - float exc2[], /* o : current enhanced excitation */ - float *lp_ener, /* i/o: LP filtered E */ - const int32_t last_core_brate, /* i : previous frame core bitrate */ - int16_t *first_CNG, /* i/o: first CNG frame flag for energy init. */ - int16_t *cng_ener_seed, /* i/o: random generator seed for CNG energy */ - float bwe_exc[], /* o : excitation for SWB TBE */ - const int16_t allow_cn_step, /* i : allow CN step */ - int16_t *last_allow_cn_step, /* i/o: last allow step */ - const int16_t num_ho, /* i : number of selected hangover frames */ - float q_env[], - float *lp_env, - float *old_env, - float *exc_mem, - float *exc_mem1, - int16_t *sid_bw, - int16_t *cng_ener_seed1, - float exc3[], - const int16_t Opt_AMR_WB, /* i : AMR-WB interop flag */ - const int16_t element_mode /* i : IVAS Element mode */ -) -{ - float enr; - int16_t i; - float ener_lp; - int16_t i_subfr; - int16_t pit_max; - float ftmp; - float *ptR, *ptI; - float fft_io[L_FRAME16k]; - float itmp[129]; - float env[NUM_ENV_CNG]; - float enr1; - float denv[NUM_ENV_CNG]; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - pit_max = PIT_MAX; - } - else /* L_frame == L_FRAME16k */ - { - pit_max = PIT16k_MAX; - } - - /*---------------------------------------------------------------------* - * Initialization of CNG energy for the first CNG frame - *---------------------------------------------------------------------*/ - - if ( *first_CNG == 0 ) - { - if ( core_brate == FRAME_NO_DATA ) - { - /* needed only in decoder when the very first SID frame was erased and this frame is FRAME_NO_DATA frame */ - *Enew = dotp( exc - pit_max, exc - pit_max, pit_max ) / pit_max; - } - - if ( element_mode == EVS_MONO ) - { - *lp_ener = *Enew; - } - } - - /*---------------------------------------------------------------------* - * Update CNG energy - *---------------------------------------------------------------------*/ - - if ( last_core_brate != SID_1k75 && last_core_brate != FRAME_NO_DATA && last_core_brate != SID_2k40 ) - { - /* Partially reset CNG energy after active speech period */ - if ( allow_cn_step == 0 && *last_allow_cn_step == 0 ) - { - if ( num_ho < 3 || *Enew < 1.5f * *lp_ener ) - { - *lp_ener = 0.8f * *lp_ener + 0.2f * *Enew; - } - else - { - *lp_ener = 0.95f * *lp_ener + 0.05f * *Enew; - } - } - else - { - *lp_ener = *Enew; - *last_allow_cn_step = 0; - } - } - else - { - /* normal CNG update */ - if ( *last_allow_cn_step == 0 ) - { - *lp_ener = (float) ( A2 * *Enew + ( 1 - A2 ) * *lp_ener ); - } - else - { - if ( core_brate == SID_1k75 || core_brate == SID_2k40 ) - { - *last_allow_cn_step = 0; - } - - *lp_ener = *Enew; - } - } - - if ( allow_cn_step == 1 ) - { - *last_allow_cn_step = 1; - } - - /* If not mono, skip CNG here */ - if ( element_mode > IVAS_SCE ) - { - return; - } - - /*---------------------------------------------------------------------* - * Generate white noise vector - *---------------------------------------------------------------------*/ - - for ( i = 0; i < L_frame; i++ ) - { - exc2[i] = (float) own_random( seed ); - } - - /*------------------------------------------------------------* - * Insert random variation for excitation energy - * (random variation is scaled according to *lp_ener value) - *------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - ener_lp = ( ( own_random( cng_ener_seed ) * ( *lp_ener ) ) * GAIN_VAR ) + ( *lp_ener ); - - if ( ener_lp < 0.0f ) - { - ener_lp = 0.01f; - } - enr = dotp( &exc2[i_subfr], &exc2[i_subfr], L_SUBFR ) + 0.01f; - - enr = (float) sqrt( ener_lp * L_SUBFR / enr ); - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i_subfr + i] *= enr; - } - } - - if ( Opt_AMR_WB != 1 ) - { - mvr2r( exc2, exc3, L_FRAME16k ); - - enr1 = (float) log10( *Enew * L_frame + 0.1f ) / (float) log10( 2.0f ); - - if ( core_brate == SID_2k40 ) - { - if ( *sid_bw == 0 ) - { - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - /* get quantized envelope */ - env[i] = powf( 2.0f, ( enr1 - q_env[i] ) ); - } - } - - /* initialize CNG envelope */ - if ( *first_CNG == 0 && *sid_bw == 0 ) - { - mvr2r( env, lp_env, NUM_ENV_CNG ); - } - - if ( *sid_bw == 0 ) - { - mvr2r( env, old_env, NUM_ENV_CNG ); - } - } - - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - /* get AR low-passed envelope */ - lp_env[i] = 0.9f * lp_env[i] + ( 1 - 0.9f ) * old_env[i]; - } - - /* calculate the spectrum of random excitation signal */ - mvr2r( exc2, fft_io, L_frame ); - - if ( L_frame == L_FRAME16k ) - { - modify_Fs( fft_io, L_FRAME16k, 16000, fft_io, 12800, exc_mem1, 0 ); - } - - fft_rel( fft_io, L_FFT, LOG2_L_FFT ); - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; - ptR++; - ptI--; - } - - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - denv[i] = lp_env[i] + 2 * ( *lp_ener ) - env[i]; - - if ( denv[i] < 0 ) - { - denv[i] = 0; - } - } - set_f( itmp, 0.0f, NUM_ENV_CNG ); - - set_f( fft_io, 0.0f, L_FFT ); - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - *ptR = own_random( cng_ener_seed1 ); - *ptI = own_random( cng_ener_seed1 ); - - env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; - ptR++; - ptI--; - } - - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - itmp[i] += own_random( cng_ener_seed1 ) * denv[i] * 0.000011f + denv[i]; - - if ( itmp[i] < 0.0f ) - { - itmp[i] = 0; - } - } - - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - *ptR = (float) ( *ptR * sqrt( itmp[i] / env[i] ) ); - *ptI = (float) ( *ptI * sqrt( itmp[i] / env[i] ) ); - - ptR++; - ptI--; - } - - ifft_rel( fft_io, L_FFT, LOG2_L_FFT ); - - if ( L_frame == L_FRAME16k ) - { - modify_Fs( fft_io, L_FFT, 12800, fft_io, 16000, exc_mem, 0 ); - } - - enr1 = dotp( fft_io, fft_io, L_frame ) / L_frame; - - /* add time domain randomization */ - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - enr = dotp( &fft_io[i_subfr], &fft_io[i_subfr], L_SUBFR ) + 0.01f; - ener_lp = ( ( own_random( cng_ener_seed1 ) * ( enr1 ) ) * 0.000011f ) + ( enr1 ); - ener_lp *= L_SUBFR; - enr = (float) sqrt( ener_lp / enr ); - - if ( last_core_brate != SID_2k40 && last_core_brate != SID_1k75 && last_core_brate != FRAME_NO_DATA && core_brate == SID_2k40 ) - { - if ( enr > 1 ) - { - enr = 1; - } - } - - for ( i = 0; i < L_SUBFR; i++ ) - { - fft_io[i_subfr + i] *= enr; - } - } - - for ( i = 0; i < L_frame; i++ ) - { - fft_io[i] = 0.75f * fft_io[i] + exc2[i]; - } - - enr = ( dotp( fft_io, fft_io, L_frame ) / L_frame ) + 0.01f; - enr = ( *lp_ener ) / enr; - - if ( enr > 1 ) - { - enr = 1; - } - - ftmp = sqrtf( enr ); - for ( i = 0; i < L_frame; i++ ) - { - fft_io[i] *= ftmp; - } - - mvr2r( fft_io, exc2, L_frame ); - } - if ( Opt_AMR_WB != 1 ) - { - mvr2r( exc3, exc, L_frame ); - } - else - { - mvr2r( exc2, exc, L_frame ); - } - - if ( L_frame == L_FRAME ) - { - interp_code_5over2( exc2, bwe_exc, L_frame ); - } - else - { - interp_code_4over2( exc2, bwe_exc, L_frame ); - } - - return; -} - - -/*-------------------------------------------------------* - * cng_params_postupd - * - * Post-update of CNG parameters - *-------------------------------------------------------*/ - -void cng_params_postupd( - const int16_t ho_circ_ptr, /* i : pointer for CNG averaging buffers */ - int16_t *cng_buf_cnt, /* i/o: counter for CNG store buffers */ - const float *cng_exc2_buf, /* i : Excitation buffer */ - const int32_t *cng_brate_buf, /* i : bitrate buffer */ - float ho_env_circ[], /* i/o: Envelope buffer */ - const int16_t element_mode, /* i : Element mode */ - const int16_t bwidth /* i : Audio bandwidth */ -) -{ - int16_t i, j; - const float *exc2; - float fft_io[L_FFT]; - float sp[129]; - float *ptR, *ptI; - float env[NUM_ENV_CNG]; - int16_t CNG_mode; - int16_t ptr; - float att; - int32_t last_active_brate; - - ptr = ho_circ_ptr - *cng_buf_cnt + 1; - if ( ptr < 0 ) - { - ptr += HO_HIST_SIZE; - } - - for ( j = 0; j < *cng_buf_cnt; j++ ) - { - exc2 = &cng_exc2_buf[ptr * L_FFT]; - last_active_brate = cng_brate_buf[ptr]; - - /* calculate the spectrum of residual signal */ - /* calculate the spectrum of residual signal */ - mvr2r( exc2, fft_io, L_FFT ); - - fft_rel( fft_io, L_FFT, LOG2_L_FFT ); - - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - sp[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; - ptR++; - ptI--; - } - - mvr2r( sp, env, NUM_ENV_CNG ); - - if ( element_mode == IVAS_SCE || element_mode == IVAS_CPE_DFT ) - { - att = 0.0f; - apply_scale_flt( &att, bwidth, last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - att = powf( 10, att / 10.0f ); - } - else - { - CNG_mode = get_cng_mode_ivas( last_active_brate ); - att = (float) ( 1 / pow( 2, ENR_ATT[CNG_mode] ) ); - } - - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] *= att; - } - - /* update the circular buffer of old residual envelope */ - mvr2r( env, &( ho_env_circ[(ho_circ_ptr) *NUM_ENV_CNG] ), NUM_ENV_CNG ); - - ptr++; - if ( ptr == HO_HIST_SIZE ) - { - ptr = 0; - } - } - - *cng_buf_cnt = 0; - - return; -} -#endif - /*-------------------------------------------------------* * cng_params_upd() * * update CNG parameters *-------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void cng_params_upd( - const float lsp_new[], /* i : LSP parameters */ - const float exc2[], /* i : current enhanced excitation */ - const int16_t L_frame, /* i : frame length */ - int16_t *ho_circ_ptr, /* i/o: pointer for CNG averaging buffers */ - float ho_ener_circ[], /* o : energy buffer for CNG averaging */ - int16_t *ho_circ_size, /* i/o: size of DTX hangover history buffer for averaging */ - float ho_lsp_circ[], /* o : old LSP buffer for CNG averaging */ - const int16_t enc_dec_flag, /* i : Flag indicating encoder or decoder (ENC,DEC) */ - float ho_env_circ[], /* i/o: Envelope buffer */ - int16_t *cng_buf_cnt, /* i/o: Counter of postponed FFT-processing instances */ - float cng_exc2_buf[], /* i/o: Excitation buffer */ - int32_t cng_brate_buf[], /* i/o: last_active_brate buffer */ - const int32_t last_active_brate, /* i : Last active bitrate */ - const int16_t element_mode, /* i : element mode */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - float enr; - float fft_io[L_FRAME16k]; - float sp[129]; - float *ptR, *ptI; - float env[NUM_ENV_CNG]; - int16_t i; - int16_t CNG_mode; - float att; - - /* update the pointer to circular buffer of old LSP vectors */ - ( *ho_circ_ptr )++; - if ( *ho_circ_ptr == HO_HIST_SIZE ) - { - *ho_circ_ptr = 0; - } - - /* update the circular buffer of old LSP vectors with the new LSP vector */ - mvr2r( lsp_new, &( ho_lsp_circ[( *ho_circ_ptr ) * M] ), M ); - - /* calculate the residual signal energy */ - enr = dotp( exc2, exc2, L_frame ) / L_frame; - - /* update the circular buffer of old energies */ - ho_ener_circ[*ho_circ_ptr] = enr; - - if ( enc_dec_flag == ENC ) - { - /* Store residual signal for postponed FFT-processing*/ - ( *cng_buf_cnt )++; - if ( *cng_buf_cnt > HO_HIST_SIZE ) - { - *cng_buf_cnt = HO_HIST_SIZE; - } - mvr2r( exc2, &( cng_exc2_buf[( *ho_circ_ptr ) * L_FFT] ), L_FFT ); - cng_brate_buf[*ho_circ_ptr] = last_active_brate; - } - else - { - - /* calculate the spectrum of residual signal */ - mvr2r( exc2, fft_io, L_frame ); - - fft_rel( fft_io, L_FFT, LOG2_L_FFT ); - - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - sp[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; - ptR++; - ptI--; - } - - mvr2r( sp, env, NUM_ENV_CNG ); - - if ( element_mode == IVAS_SCE || element_mode == IVAS_CPE_DFT ) - { - att = 0.0f; - apply_scale_flt( &att, bwidth, last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - att = powf( 10, att / 10.0f ); - } - else - { - CNG_mode = get_cng_mode_ivas( last_active_brate ); - att = (float) ( 1 / pow( 2, ENR_ATT[CNG_mode] ) ); - } - - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] *= att; - } - - /* update the circular buffer of old residual envelope */ - mvr2r( env, &( ho_env_circ[( *ho_circ_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); - } - - ( *ho_circ_size )++; - if ( *ho_circ_size > HO_HIST_SIZE ) - { - *ho_circ_size = HO_HIST_SIZE; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * get_cng_mode_ivas() - * - * - *---------------------------------------------------------------------*/ - -int16_t get_cng_mode_ivas( - const int32_t last_active_brate /* i : last active bitrate */ -) -{ - int16_t CNG_mode; - - if ( last_active_brate > ACELP_13k20 ) - { - CNG_mode = 4; - } - else if ( last_active_brate > ACELP_9k60 ) - { - CNG_mode = 3; - } - else if ( last_active_brate > ACELP_8k00 ) - { - CNG_mode = 2; - } - else if ( last_active_brate > ACELP_7k20 ) - { - CNG_mode = 1; - } - else - { - CNG_mode = 0; - } - - return ( CNG_mode ); -} -#endif diff --git a/lib_com/cng_exc_fx.c b/lib_com/cng_exc_fx.c index bf7e2ac0e..f346f3bb3 100644 --- a/lib_com/cng_exc_fx.c +++ b/lib_com/cng_exc_fx.c @@ -1132,7 +1132,6 @@ void cng_params_upd_fx( return; } -#ifdef IVAS_FLOAT_FIXED void cng_params_upd_ivas_fx( const Word16 lsp_new[], /* i : LSP aprameters Q15 */ const Word16 exc2[], /* i : current enhanced excitation Q_exc */ @@ -1354,7 +1353,6 @@ void cng_params_upd_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * get_cng_mode() diff --git a/lib_com/cnst.h b/lib_com/cnst.h index 62bf9613a..7e6572382 100644 --- a/lib_com/cnst.h +++ b/lib_com/cnst.h @@ -42,7 +42,6 @@ #include "stl.h" /* clang-format off */ -#ifdef IVAS_FLOAT_FIXED #define MATRIX_CONSTANT (759250113) #define NUM_SAMPLES_960 (960) #define NUM_SAMPLES_720 (720) @@ -60,7 +59,6 @@ #define Q31_BY_SUB_FRAME_180 ( 11997115 ) #define Q31_BY_SUB_FRAME_80 ( 27183337 ) #define Q31_BY_SUB_FRAME_40 ( 55063683 ) -#endif /*----------------------------------------------------------------------------------* @@ -170,20 +168,14 @@ #define MIN16B ( -32768 ) #define MAX16B_FLT 32767.0f #define MIN16B_FLT ( -32768.0f ) -#ifdef IVAS_FLOAT_FIXED #define MIN16B_FLT_FX -32768 //Q0 #define MIN16B_FLT_FX_IN_Q11 -67108864//Q11 #define MIN16B_FLT_FX_IN_Q15 -1073741824//Q15 -#endif #define PCM16_TO_FLT_FAC 32768.0f -#ifdef IVAS_FLOAT_FIXED #define PCM16_TO_FLT_FAC_FX 32768 //Q0 -#endif // IVAS_FLOAT_FIXED #define MDFT_NORM_SCALING ( 1.0f / PCM16_TO_FLT_FAC ) -#ifdef IVAS_FLOAT_FIXED #define MDFT_NORM_SCALING_FX 65536 //Q31 #define LOG2_MDFT_NORM_SCALING_FX -503316448 //Q25 -#endif #define MAX_FRAME_COUNTER 200 #define MAX_BITS_PER_FRAME 10240 /* Bits per frame for max. bitrate 512kbps, == IVAS_MAX_BITS_PER_FRAME */ @@ -255,9 +247,7 @@ enum{ #define MIN_LOG_VAL_60dB -60.0f #define INV_LOG_2 1.442695040888963f /* 1/log(2) */ -#ifdef IVAS_FLOAT_FIXED #define INV_LOG_2_FX 23637 /*Q14*//* 1/log(2) */ -#endif // IVAS_FLOAT_FIXED #define INV_SQRT_2 0.70710676908493f /* 1/sqrt(2) */ #define INV_SQRT_2_Q30 759250112 /* 1/sqrt(2) in Q30*/ #define INV_SQRT_2_Q15 23170 /* 1/sqrt(2) in Q15 */ @@ -788,9 +778,7 @@ enum #define L_HP20_MEM 4 /* HP20 filter memory length */ #define CLDFB_NO_CHANNELS_MAX 60 /* CLDFB resampling - max number of CLDFB channels, == IVAS_CLDFB_NO_CHANNELS_MAX */ -#ifdef IVAS_FLOAT_FIXED #define CLDFB_NO_CHANNELS_MAX_FX 30720 /*Q9*/ -#endif #define CLDFB_NO_COL_MAX 16 /* CLDFB resampling - max number of CLDFB col., == IVAS_CLDFB_NO_COL_MAX */ #define CLDFB_NO_COL_MAX_SWITCH 6 /* CLDFB resampling - max number of CLDFB col. for switching */ #define CLDFB_NO_COL_MAX_SWITCH_BFI 10 /* CLDFB resampling - max number of CLDFB col. for switching, BFI */ @@ -1755,10 +1743,8 @@ enum #define OUTMAX_INV 0.000030517578125f /* 1/2^15 */ #define OUTMAX_INV_FX 65536 /* 1/2^15 (Q31) */ -#ifdef IVAS_FLOAT_FIXED #define ONE_BY_NS2A_8K_ST_DFT32MS_OVL_NS (Word16)(0x051E) #define OUTMAX_INV_FX_16 (Word16)(0x0001) /* 1/2^15 */ -#endif #define OUTMAX_SQ 1073741824.f /* 2^30 */ #define OUTMAX_SQ_INV 0.00000000093132257461547852f /* 1/2^30 */ @@ -2172,19 +2158,15 @@ typedef enum _DCTTYPE #define ENV_STAB_EST1 2.93f /* env_stab estimation coefficient 1 */ #define ENV_STAB_EST2 (-2.20f) /* env_stab estimation coefficient 2 */ #define ENV_STAB_EST3 0.741f /* env_stab estimation coefficient 3 */ -#ifdef IVAS_FLOAT_FIXED #define ENV_STAB_EST1_FX 12001 /* env_stab estimation coefficient 1 *//*Q-12*/ #define ENV_STAB_EST2_FX (-9011) /* env_stab estimation coefficient 2 *//*Q-12*/ #define ENV_STAB_EST3_FX 3035 /* env_stab estimation coefficient 3 *//*Q-12*/ -#endif // IVAS_FLOAT_FIXED #define STAB_FAC_EST1 1.093f /* stab_fac HQ estimation coefficient 1 */ #define STAB_FAC_EST2 (-5.84e-05f) /* stab_fac HQ estimation coefficient 2, including Q12 scaling */ #define STAB_FAC_EST3 0.125f /* stab_fac HQ estimation coefficient 3 */ -#ifdef IVAS_FLOAT_FIXED #define STAB_FAC_EST1_FX ((Word32)0x45F3B646) /* stab_fac HQ estimation coefficient 1 */ #define STAB_FAC_EST2_FX ((Word32)0xFFFF0B0D) /* stab_fac HQ estimation coefficient 2, including Q12 scaling */ #define STAB_FAC_EST3_FX ((Word32)0x10000000) /* stab_fac HQ estimation coefficient 3 */ -#endif // IVAS_FLOAT_FIXED #define ATT_LIM_HANGOVER 150 /* Number of hangover frames for disabling stability dependent attenuation */ #define DELTA_TH 5.0f /* Delta energy threshold for transient detection for envelope stability */ diff --git a/lib_com/codec_tcx_common_flt.c b/lib_com/codec_tcx_common_flt.c index 801bb5746..825401325 100644 --- a/lib_com/codec_tcx_common_flt.c +++ b/lib_com/codec_tcx_common_flt.c @@ -39,295 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tcxGetNoiseFillingTilt() - * - * - *-------------------------------------------------------------------*/ - -int16_t tcxGetNoiseFillingTilt_flt( - const float A[], - const int16_t L_frame, - const int16_t mode, - float *noiseTiltFactor ) -{ - int16_t firstLine; - - if ( mode ) - { - firstLine = L_frame / 6; - *noiseTiltFactor = 0.5625f; - } - else - { - firstLine = L_frame / 8; - *noiseTiltFactor = get_gain_flt( A + 1, A, M, NULL ); - *noiseTiltFactor = min( 1.0f, ( *noiseTiltFactor ) + 0.09375f ); - } - - return firstLine; -} - -/*-------------------------------------------------------------------* - * tcxFormantEnhancement() - * - * - *-------------------------------------------------------------------*/ - -void tcxFormantEnhancement_flt( - float xn_buf[], - const float *gainlpc, - float spectrum[], - const int16_t L_frame ) -{ - int16_t k, i, j, l = 0; - float fac, step; - - k = L_frame / FDNS_NPTS; - - /* Formant enhancement via square root of the LPC gains */ - xn_buf[0] = (float) sqrt( gainlpc[0] ); - xn_buf[1] = (float) sqrt( gainlpc[1] ); - fac = 1.0f / min( xn_buf[0], xn_buf[1] ); - - for ( i = 1; i < FDNS_NPTS - 1; i++ ) - { - xn_buf[i + 1] = (float) sqrt( gainlpc[i + 1] ); - - if ( ( xn_buf[i - 1] <= xn_buf[i] ) && ( xn_buf[i + 1] <= xn_buf[i] ) ) - { - step = max( xn_buf[i - 1], xn_buf[i + 1] ); - step = ( 1.0f / step - fac ) / (float) ( i - l ); - xn_buf[l] = 1.0f; - fac += step; - for ( j = l + 1; j < i; j++ ) - { - xn_buf[j] = min( 1.0f, xn_buf[j] * fac ); - fac += step; - } - l = i; - } - } - - /* i = hTcxCfg->fdns_npts - 1; Completing changes to gains */ - step = min( xn_buf[i - 1], xn_buf[i] ); - step = ( 1.0f / step - fac ) / (float) ( i - l ); - xn_buf[l] = 1.0f; - fac += step; - for ( j = l + 1; j < i; j++ ) - { - xn_buf[j] = min( 1.0f, xn_buf[j] * fac ); - fac += step; - } - xn_buf[i] = 1.0f; - - /* Application of changed gains onto decoded MDCT lines */ - for ( i = j = 0; i < L_frame; j++ ) - { - for ( l = 0; l < k; i++, l++ ) - { - spectrum[i] *= xn_buf[j]; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * tcxInvertWindowGrouping() - * - * - *-------------------------------------------------------------------*/ - -void tcxInvertWindowGrouping_flt( - TCX_CONFIG_HANDLE hTcxCfg, - float xn_buf[], - float spectrum[], - const int16_t L_frame, - const int8_t fUseTns, - const int16_t last_core, - const int16_t index, - const int16_t frame_cnt, - const int16_t bfi ) -{ - int16_t i, w, t_integer; - int16_t L_win, L_spec; - - if ( frame_cnt && !bfi && last_core != ACELP_CORE ) - { - /* fix sub-window overlap */ - hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; - } - - if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || - ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || - ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && - !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) - { - - /* ungroup sub-windows: deinterleave MDCT bins into separate windows */ - for ( t_integer = w = 0; w < 2; w++ ) - { - for ( i = w; i < L_frame; i += 2 ) - { - xn_buf[t_integer++] = spectrum[i]; - } - } - - mvr2r( xn_buf, spectrum, L_frame ); - - if ( hTcxCfg->fIsTNSAllowed && !bfi && fUseTns ) - { - L_win = L_frame >> 1; - L_spec = hTcxCfg->tnsConfig[0][0].iFilterBorders[0]; - - /* rearrange LF sub-window lines prior to TNS synthesis filtering */ - if ( L_spec < L_frame ) - { - mvr2r( spectrum + 8, spectrum + 16, L_spec / 2 - 8 ); - mvr2r( spectrum + L_frame / 2, spectrum + 8, 8 ); - mvr2r( spectrum + L_frame / 2 + 8, spectrum + L_spec / 2 + 8, L_spec / 2 - 8 ); - } - else - { - mvr2r( spectrum + 8, xn_buf, L_win ); - mvr2r( xn_buf, spectrum + 16, L_win - 8 ); - mvr2r( xn_buf + L_win - 8, spectrum + 8, 8 ); - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * tcx5SpectrumInterleaving() - * - * - *-------------------------------------------------------------------*/ - -void tcx5SpectrumInterleaving( - const int16_t tcx5Size, - float *spectrum ) -{ - int16_t i; - float interleaveBuf[N_TCX10_MAX]; - - set_f( interleaveBuf, 0.0f, N_TCX10_MAX ); - - /* group sub-windows: interleave bins according to their frequencies */ - for ( i = 0; i < tcx5Size; i++ ) - { - interleaveBuf[2 * i] = spectrum[i]; - interleaveBuf[2 * i + 1] = spectrum[tcx5Size + i]; - } - - mvr2r( interleaveBuf, spectrum, 2 * tcx5Size ); - - return; -} - - -/*-------------------------------------------------------------------* - * tcx5SpectrumDeinterleaving() - * - * - *-------------------------------------------------------------------*/ - -void tcx5SpectrumDeinterleaving( - const int16_t tcx5Size, - float *spectrum ) -{ - int16_t i; - float interleaveBuf[N_TCX10_MAX]; - - set_f( interleaveBuf, 0.0f, N_TCX10_MAX ); - - /* ungroup sub-windows: interleave bins according to their frequencies */ - for ( i = 0; i < tcx5Size; i++ ) - { - interleaveBuf[i] = spectrum[2 * i]; - interleaveBuf[tcx5Size + i] = spectrum[2 * i + 1]; - } - - mvr2r( interleaveBuf, spectrum, 2 * tcx5Size ); - - return; -} - - -/*-------------------------------------------------------------------* - * tcx5TnsGrouping() - * - * - *-------------------------------------------------------------------*/ - -void tcx5TnsGrouping( - const int16_t L_frame, /* i : frame length (TCX5) */ - const int16_t L_spec, /* i : coded spec length (TCX5, derived from filter borders*/ - float *spectrum ) -{ - /* rearrange LF sub-window lines prior to TNS synthesis filtering */ - if ( L_spec < L_frame ) - { - mvr2r( spectrum + 8, spectrum + 16, L_spec - 8 ); - mvr2r( spectrum + L_frame, spectrum + 8, 8 ); - mvr2r( spectrum + L_frame + 8, spectrum + L_spec + 8, L_spec - 8 ); - } - else - { - float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ - mvr2r( spectrum + L_spec, buff, 8 ); - mvr2r( spectrum + 8, spectrum + 16, L_spec - 8 ); - mvr2r( buff, spectrum + 8, 8 ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx5TnsUngrouping() - * - * - *-------------------------------------------------------------------*/ - -void tcx5TnsUngrouping( - const int16_t L_frame, /* i : frame length (TCX5) */ - const int16_t L_spec, /* i : coded spec length (TCX5, derived from filter borders*/ - float *spectrum, - const int16_t enc_dec /* i : 0: encoder, else decoder */ -) -{ - /* undo rearrangement of LF sub-window lines prior to TNS analysis */ - if ( L_spec < L_frame ) - { - mvr2r( spectrum + L_spec + 8, spectrum + L_frame + 8, L_spec - 8 ); - mvr2r( spectrum + 8, spectrum + L_frame, 8 ); - mvr2r( spectrum + 16, spectrum + 8, L_spec - 8 ); - set_zero( spectrum + L_spec, L_frame - L_spec ); - set_zero( spectrum + L_frame + L_spec, L_frame - L_spec ); - } - else - { - float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ - - mvr2r( spectrum + 8, buff, 8 ); - - if ( enc_dec == ENC ) - { - mvr2r( spectrum + 16, spectrum + 8, L_frame - 8 ); - mvr2r( buff, spectrum + L_frame, 8 ); - } - else - { - mvr2r( spectrum + 16, spectrum + 8, L_spec - 8 ); - mvr2r( buff, spectrum + L_spec, 8 ); - } - } - - return; -} -#endif diff --git a/lib_com/common_api_types.h b/lib_com/common_api_types.h index 9a6e2ceed..b98f2e7d1 100644 --- a/lib_com/common_api_types.h +++ b/lib_com/common_api_types.h @@ -39,10 +39,8 @@ #include #include #include "ivas_error.h" -#ifdef IVAS_FLOAT_FIXED #include "typedef.h" #include "basop32.h" -#endif /*----------------------------------------------------------------------------------* * Common API constants @@ -118,7 +116,6 @@ typedef struct _IVAS_ENC_CHANNEL_AWARE_CONFIG typedef struct _IVAS_ISM_METADATA { -#ifdef IVAS_FLOAT_FIXED Word32 azimuth_fx; /* Q22 */ Word32 elevation_fx; /* Q22 */ Word16 radius_fx; /* Q9 */ @@ -126,7 +123,6 @@ typedef struct _IVAS_ISM_METADATA Word32 gainFactor_fx; /* Q31 */ Word32 yaw_fx; /* Q22 */ Word32 pitch_fx; /* Q22 */ -#endif float azimuth; float elevation; float radius; @@ -141,10 +137,8 @@ typedef struct _IVAS_ISM_METADATA typedef struct { float w, x, y, z; -#ifdef IVAS_FLOAT_FIXED Word32 w_fx, x_fx, y_fx, z_fx; Word16 q_fact; -#endif } IVAS_QUATERNION; @@ -152,10 +146,8 @@ typedef struct typedef struct { float x, y, z; -#ifdef IVAS_FLOAT_FIXED Word32 x_fx, y_fx, z_fx; Word16 q_fact; -#endif } IVAS_VECTOR3; typedef enum @@ -194,10 +186,8 @@ typedef struct _IVAS_LS_CUSTOM_LAYOUT int16_t num_spk; float azimuth[IVAS_MAX_OUTPUT_CHANNELS]; float elevation[IVAS_MAX_OUTPUT_CHANNELS]; -#ifdef IVAS_FLOAT_FIXED Word32 azimuth_fx[IVAS_MAX_OUTPUT_CHANNELS]; // Q22 Word32 elevation_fx[IVAS_MAX_OUTPUT_CHANNELS]; // Q22 -#endif int16_t num_lfe; int16_t lfe_idx[IVAS_MAX_OUTPUT_CHANNELS]; @@ -228,29 +218,25 @@ typedef struct _IVAS_JBM_TRACE_DATA typedef struct _IVAS_ROOM_ACOUSTICS_CONFIG { int16_t override; - int16_t nBands; /* Number of frequency bands for which reverb properties are provided, integer, range [2..256] */ - float pFc_input[IVAS_CLDFB_NO_CHANNELS_MAX]; /* Center frequencies for which following values are provided: */ - float pAcoustic_rt60[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's T60 per center frequency */ - float pAcoustic_dsr[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's Diffuse to Source Ratio per center frequency */ - float acousticPreDelay; /* Time elapsed between input signal and late reverberation start, float, range [0.001..10] */ - float inputPreDelay; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ -#ifdef IVAS_FLOAT_FIXED + int16_t nBands; /* Number of frequency bands for which reverb properties are provided, integer, range [2..256] */ + float pFc_input[IVAS_CLDFB_NO_CHANNELS_MAX]; /* Center frequencies for which following values are provided: */ + float pAcoustic_rt60[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's T60 per center frequency */ + float pAcoustic_dsr[IVAS_CLDFB_NO_CHANNELS_MAX]; /* - The room's Diffuse to Source Ratio per center frequency */ + float acousticPreDelay; /* Time elapsed between input signal and late reverberation start, float, range [0.001..10] */ + float inputPreDelay; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ Word32 pFc_input_fx[IVAS_CLDFB_NO_CHANNELS_MAX]; /*Q16 Center frequencies for which following values are provided: */ Word32 pAcoustic_rt60_fx[IVAS_CLDFB_NO_CHANNELS_MAX]; /*Q26 - The room's T60 per center frequency */ Word32 pAcoustic_dsr_fx[IVAS_CLDFB_NO_CHANNELS_MAX]; /*Q30 - The room's Diffuse to Source Ratio per center frequency */ Word32 acousticPreDelay_fx; /* Time elapsed between input signal and late reverberation start, float, range [0.001..10] */ /*Assumed Q-27*/ Word32 inputPreDelay_fx; /* Offset in seconds from where DSR is computed in the RIR (0 = at source), float, range [0.001..10] */ /* Assumed Q-27*/ -#endif // IVAS_FLOAT_FIXED /* early reflections */ - int16_t use_er; /* ER activation flag */ - int32_t lowComplexity; /* Low complexity ER flag */ - IVAS_VECTOR3 dimensions; /* Room dimensions [m] */ - float AbsCoeff[IVAS_ROOM_ABS_COEFF]; /* Absorption coeffs */ - IVAS_VECTOR3 ListenerOrigin; /* Listener origin */ -#ifdef IVAS_FLOAT_FIXED + int16_t use_er; /* ER activation flag */ + int32_t lowComplexity; /* Low complexity ER flag */ + IVAS_VECTOR3 dimensions; /* Room dimensions [m] */ + float AbsCoeff[IVAS_ROOM_ABS_COEFF]; /* Absorption coeffs */ + IVAS_VECTOR3 ListenerOrigin; /* Listener origin */ int32_t AbsCoeff_fx[IVAS_ROOM_ABS_COEFF]; /* Absorption coeffs */ -#endif } IVAS_ROOM_ACOUSTICS_CONFIG_DATA; @@ -258,9 +244,7 @@ typedef struct _IVAS_RENDER_CONFIG { IVAS_ROOM_ACOUSTICS_CONFIG_DATA roomAcoustics; float directivity[IVAS_MAX_NUM_OBJECTS * 3]; -#ifdef IVAS_FLOAT_FIXED Word16 directivity_fx[IVAS_MAX_NUM_OBJECTS * 3]; // has the following q-factor pattern: {6, 6, 15, 6, 6, 15, 6, 6, 15, 6, 6, 15} -#endif } IVAS_RENDER_CONFIG_DATA, *IVAS_RENDER_CONFIG_HANDLE; diff --git a/lib_com/core_com_config.c b/lib_com/core_com_config.c index 1b9c3f6b4..e002617ab 100644 --- a/lib_com/core_com_config.c +++ b/lib_com/core_com_config.c @@ -178,60 +178,6 @@ Word16 get_codec_mode( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t getTcxonly_ivas( - const int16_t element_mode, /* i : IVAS element mode */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t is_ism_format /* i : flag indicating ISM format */ -) -{ - int16_t tcxonly = 0; - - switch ( element_mode ) - { - case EVS_MONO: - if ( total_brate > ACELP_32k ) - { - tcxonly = 1; - } - break; - case IVAS_SCE: - if ( is_ism_format ) - { - if ( total_brate > MAX_ACELP_BRATE_ISM ) - { - tcxonly = 1; - } - } - else - { - if ( total_brate > MAX_ACELP_BRATE ) - { - tcxonly = 1; - } - } - break; - - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( total_brate > MAX_ACELP_BRATE ) - { - tcxonly = 1; - } - break; - case IVAS_CPE_MDCT: - if ( total_brate >= ( MCT_flag ? IVAS_32k : IVAS_48k ) ) - { - tcxonly = 1; - } - break; - } - - return tcxonly; -} - -#else Word16 getTcxonly_ivas_fx( const Word16 element_mode, /* i : IVAS element mode Q0*/ const Word32 total_brate, /* i : total bitrate Q0*/ @@ -300,7 +246,6 @@ Word16 getTcxonly_ivas_fx( return tcxonly; /*Q0*/ } -#endif Word16 getTcxonly( #ifdef IVAS_CODE_SWITCHING @@ -577,17 +522,6 @@ Word16 getRestrictedMode( * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t getMdctWindowLength( - const int16_t fscale ) -{ - int16_t mdctWindowLength; - - mdctWindowLength = ( L_LOOK_12k8 * fscale ) / FSCALE_DENOM; - - return mdctWindowLength; -} -#else Word16 getMdctWindowLength_fx( const Word16 fscale /*Q0*/ ) { @@ -596,21 +530,18 @@ Word16 getMdctWindowLength_fx( return mdctWindowLength; /*Q0*/ } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * sr2fscale() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 sr2fscale_fx( const Word32 sr_core /* i : internal sampling rate Q0*/ ) { return extract_l( Mpy_32_16_1( sr_core, FSCALE_DENOM_BY_12800_Q15 ) ); /*Q0*/ } -#endif int16_t sr2fscale( const int32_t sr_core /* i : internal sampling rate */ @@ -788,127 +719,7 @@ Word16 getTcxBandwidth( return tcxBandwidth; /*Q15*/ } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * getTcxBandwidth_flt() - * - * - *-------------------------------------------------------------------*/ - -float getTcxBandwidth_flt( - const int16_t bwidth /* i : audio bandwidth */ -) -{ - float tcxBandwidth = 0.5f; - - if ( bwidth == NB ) - { - tcxBandwidth = 0.3125f; - } - - return tcxBandwidth; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * getIgfPresent() - * - * - *-------------------------------------------------------------------*/ - -int16_t getIgfPresent( - const int16_t element_mode, /* i : IVAS element mode */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - int16_t igfPresent = 0; - - if ( bwidth == SWB ) - { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= HQ_64k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( total_brate <= HQ_48k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_MDCT: - if ( total_brate <= IVAS_96k ) - { - igfPresent = 1; - } - break; - } - } - else if ( bwidth == FB ) - { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= IVAS_128k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - if ( total_brate <= IVAS_48k ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_MDCT: - if ( total_brate <= IVAS_128k ) - { - igfPresent = 1; - } - break; - } - } - else if ( bwidth == WB ) - { - switch ( element_mode ) - { - case EVS_MONO: - case IVAS_SCE: - if ( total_brate <= ACELP_9k60 ) - { - igfPresent = 1; - } - break; - case IVAS_CPE_DFT: - case IVAS_CPE_TD: - case IVAS_CPE_MDCT: - if ( total_brate <= ACELP_13k20 ) - { - igfPresent = 1; - } - break; - } - } - - if ( ( ( bwidth == WB ) || ( bwidth == SWB ) ) && ( rf_mode == 1 ) && ( total_brate == ACELP_13k20 ) ) - { - igfPresent = 1; - } - - return igfPresent; -} -#else Word16 getIgfPresent_fx( const Word16 element_mode, /* i : IVAS element mode Q0*/ const Word32 total_brate, /* i : total bitrate Q0*/ @@ -1012,49 +823,7 @@ Word16 getIgfPresent_fx( return igfPresent; /*Q0*/ } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * getCnaPresent() - * - * - *-------------------------------------------------------------------*/ - -int16_t getCnaPresent( - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t flag_cna = 0; - - if ( element_mode == IVAS_CPE_DFT && element_brate <= CNA_MAX_BRATE_DFT_STEREO ) - { - flag_cna = 1; - } - else - { - if ( bwidth == NB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } - - if ( bwidth == WB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } - - if ( bwidth == SWB && total_brate <= ACELP_13k20 ) - { - flag_cna = 1; - } - } - - return flag_cna; -} -#endif Word16 getCnaPresent_fx( const Word16 element_mode, /* i : element mode Q0*/ @@ -1261,240 +1030,12 @@ Word16 getTcxLpcShapedAri( } -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------* - * init_tcx_window_cfg() - * - * Initialization of TCX windows - *-----------------------------------------------------------------------*/ - -void init_tcx_window_cfg( - TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle */ - const int32_t sr_core, /* i : SR core */ - const int32_t input_Fs, /* i : input/output SR */ - const int16_t L_frame, /* i : L_frame at sr_core */ - const int16_t L_frameTCX, /* i : L_frame at i/o SR */ - const int16_t encoderLookahead_enc, /* i : encoder LA at sr_core */ - const int16_t encoderLookahead_FB, /* i : encoder LA at i/o SR */ - const int16_t mdctWindowLength, /* i : window length at sr_core */ - const int16_t mdctWindowLengthFB, /* i : window length at i/o SR */ - const int16_t element_mode /* i : mode of CPE/SCE */ -) -{ - /* Symmetric window = sine LD window*/ - hTcxCfg->tcx_mdct_window_delay = mdctWindowLength; - hTcxCfg->tcx_mdct_window_delayFB = mdctWindowLengthFB; - hTcxCfg->tcx_mdct_window_length = mdctWindowLength; - hTcxCfg->tcx_mdct_window_lengthFB = mdctWindowLengthFB; - - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_flt, sr_core, hTcxCfg->tcx_mdct_window_length, FULL_OVERLAP, element_mode ); - if ( hTcxCfg->tcx_mdct_window_length == hTcxCfg->tcx_mdct_window_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_flt, hTcxCfg->tcx_mdct_windowFB_flt, hTcxCfg->tcx_mdct_window_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_windowFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_lengthFB, FULL_OVERLAP, element_mode ); - } - - /*ALDO windows for MODE2*/ - mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_flt, hTcxCfg->tcx_aldo_window_2_flt, L_frame ); - mdct_window_aldo_flt( hTcxCfg->tcx_aldo_window_1_FB_flt, hTcxCfg->tcx_aldo_window_2_FB_flt, NS2SA( input_Fs, FRAME_SIZE_NS ) ); - hTcxCfg->tcx_aldo_window_1_trunc_flt = hTcxCfg->tcx_aldo_window_1_flt + NS2SA( sr_core, N_ZERO_MDCT_NS ); - hTcxCfg->tcx_aldo_window_1_FB_trunc_flt = hTcxCfg->tcx_aldo_window_1_FB_flt + NS2SA( input_Fs, N_ZERO_MDCT_NS ); - - /*1.25ms transition window for ACELP->TCX*/ - hTcxCfg->tcx_mdct_window_trans_length = NS2SA( sr_core, ACELP_TCX_TRANS_NS ); - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_trans_flt, sr_core, hTcxCfg->tcx_mdct_window_trans_length, TRANSITION_OVERLAP, element_mode ); - hTcxCfg->tcx_mdct_window_trans_lengthFB = NS2SA( input_Fs, ACELP_TCX_TRANS_NS ); - if ( hTcxCfg->tcx_mdct_window_trans_length == hTcxCfg->tcx_mdct_window_trans_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_trans_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_transFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_trans_lengthFB, TRANSITION_OVERLAP, element_mode ); - } - - /*Mid-OLA*/ - /*compute minimum length for "half" window: lookahead - 5ms. It must be also multiple of 2*/ - hTcxCfg->tcx_mdct_window_half_length = 2 * ( ( encoderLookahead_enc - (int16_t) ( 0.005f * sr_core + 0.5f ) ) >> 1 ); - hTcxCfg->tcx_mdct_window_half_lengthFB = 2 * ( ( encoderLookahead_FB - (int16_t) ( 0.005f * input_Fs + 0.5f ) ) >> 1 ); - assert( ( hTcxCfg->tcx_mdct_window_half_length > 16 ) && "Half window can not be large enough!" ); - - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_half_flt, sr_core, hTcxCfg->tcx_mdct_window_half_length, HALF_OVERLAP, element_mode ); - if ( hTcxCfg->tcx_mdct_window_half_length == hTcxCfg->tcx_mdct_window_half_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_half_flt, hTcxCfg->tcx_mdct_window_halfFB_flt, hTcxCfg->tcx_mdct_window_half_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_halfFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_half_lengthFB, HALF_OVERLAP, element_mode ); - } - - /* minimum overlap 1.25 ms */ - hTcxCfg->tcx_mdct_window_min_length = (int16_t) ( sr_core * INV_CLDFB_BANDWIDTH ); - hTcxCfg->tcx_mdct_window_min_lengthFB = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); - /* save complexity by copying the small windows if they have the same length */ - if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_trans_length ) - { - mvr2r( hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_min_length ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimum_flt, sr_core, hTcxCfg->tcx_mdct_window_min_length, MIN_OVERLAP, element_mode ); - } - - if ( hTcxCfg->tcx_mdct_window_min_lengthFB == hTcxCfg->tcx_mdct_window_trans_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); - } - else if ( hTcxCfg->tcx_mdct_window_min_length == hTcxCfg->tcx_mdct_window_min_lengthFB ) - { - mvr2r( hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_min_lengthFB ); - } - else - { - mdct_window_sine_flt( hTcxCfg->tcx_mdct_window_minimumFB_flt, input_Fs, hTcxCfg->tcx_mdct_window_min_lengthFB, MIN_OVERLAP, element_mode ); - } - - /* TCX Offset */ - hTcxCfg->tcx_offset = ( hTcxCfg->tcx_mdct_window_delay >> 1 ); - hTcxCfg->tcx_offsetFB = ( hTcxCfg->tcx_mdct_window_delayFB >> 1 ); - /*<0 rectangular transition with optimized window size = L_frame+L_frame/4*/ - hTcxCfg->lfacNext = hTcxCfg->tcx_offset - L_frame / 4; - hTcxCfg->lfacNextFB = hTcxCfg->tcx_offsetFB - L_frameTCX / 4; - - return; -} -#endif - /*-----------------------------------------------------------------------* * init_tcx() * * Initialization of TCX *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void init_tcx_cfg( - TCX_CONFIG_HANDLE hTcxCfg, - const int32_t total_brate, - const int32_t sr_core, - const int32_t input_Fs, - const int16_t L_frame, - const int16_t bwidth, - const int16_t L_frameTCX, - const int16_t fscale, - const int16_t encoderLookahead_enc, - const int16_t encoderLookahead_FB, - const float preemph_fac, - const int16_t tcxonly, - const int16_t rf_mode, - const int16_t igf, - const int16_t infoIGFStopFreq, - const int16_t element_mode, - const int16_t ini_frame, - const int16_t MCT_flag ) -{ - int16_t i; - int16_t mdctWindowLength; - int16_t mdctWindowLengthFB; - int16_t na_scale_bwidth; - - hTcxCfg->preemph_fac_flt = preemph_fac; - hTcxCfg->tcx5Size = NS2SA( sr_core, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ - hTcxCfg->tcx5SizeFB = NS2SA( input_Fs, FRAME_SIZE_NS / 4 ); /* Always 5 ms */ - - hTcxCfg->tcx_mdct_window_length_old = hTcxCfg->tcx_mdct_window_length; - mdctWindowLength = getMdctWindowLength_fx( fscale ); - mdctWindowLengthFB = (int16_t) ( mdctWindowLength * input_Fs / sr_core ); - - init_tcx_window_cfg( hTcxCfg, sr_core, input_Fs, L_frame, L_frameTCX, encoderLookahead_enc, encoderLookahead_FB, mdctWindowLength, mdctWindowLengthFB, element_mode ); - - /* SQ deadzone & memory quantization*/ - hTcxCfg->sq_rounding_flt = 0.375f; /*deadzone of 1.25->rounding=1-1.25/2 (No deadzone=0.5)*/ - - /* TCX rate loop */ - hTcxCfg->tcxRateLoopOpt = ( tcxonly ) ? 2 : 0; - hTcxCfg->tcxRateLoopOpt = ( element_mode == IVAS_CPE_MDCT ) ? 3 : hTcxCfg->tcxRateLoopOpt; - - /* TCX bandwidth */ - hTcxCfg->bandwidth_flt = getTcxBandwidth_flt( bwidth ); - - /* set number of coded lines */ - hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); - - /* TNS in TCX */ - hTcxCfg->pCurrentTnsConfig = NULL; - hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, igf, element_mode ); - - if ( hTcxCfg->fIsTNSAllowed ) - { - InitTnsConfigs_flt( bwidth, hTcxCfg->tcx_coded_lines, hTcxCfg->tnsConfig, infoIGFStopFreq, total_brate, element_mode, MCT_flag ); - - SetAllowTnsOnWhite_flt( hTcxCfg->tnsConfig, element_mode == IVAS_CPE_MDCT ); - } - - if ( ini_frame == 0 ) - { - hTcxCfg->tcx_curr_overlap_mode = hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - hTcxCfg->last_aldo = 1; - } - - /* Context HM*/ - hTcxCfg->ctx_hm = getCtxHm( element_mode, total_brate, rf_mode ); - - /* Residual Coding*/ - hTcxCfg->resq = getResq( total_brate ); - hTcxCfg->tcxRateLoopOpt = ( hTcxCfg->resq && !tcxonly ) ? 1 : hTcxCfg->tcxRateLoopOpt; - - /*Set bandwidth scale*/ - if ( bwidth == NB ) - { - na_scale_bwidth = NB; - } - else if ( sr_core <= INT_FS_16k ) - { - na_scale_bwidth = WB; - } - else - { - na_scale_bwidth = SWB; - } - - /* Scale TCX for non-active frames to adjust loudness with ACELP*/ - hTcxCfg->na_scale_flt = 1.f; - - if ( na_scale_bwidth < SWB && !tcxonly ) - { - for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) - { - if ( ( na_scale_bwidth == scaleTcxTable[i].bwmode ) && - ( total_brate >= scaleTcxTable[i].bitrateFrom ) && - ( total_brate < scaleTcxTable[i].bitrateTo ) ) - { - if ( rf_mode ) - { - i--; - } - hTcxCfg->na_scale_flt = scaleTcxTable[i].scale_flt; - break; - } - } - } - - if ( tcxonly ) - { - InitPsychLPC( sr_core, L_frame, hTcxCfg ); - } - else - { - hTcxCfg->psychParamsCurrent = NULL; - } - - return; -} -#else void init_tcx_cfg_ivas_fx( TCX_CONFIG_HANDLE hTcxCfg, const Word32 total_brate, /*Q0*/ @@ -1642,9 +1183,7 @@ void init_tcx_cfg_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void init_tcx_window_cfg_fx( TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX Config handle Q0*/ const Word32 sr_core, /* i : SR core Q0*/ @@ -1891,7 +1430,7 @@ void init_tcx_cfg_fx( IF( tcxonly ) { - InitPsychLPC( sr_core, L_frame, hTcxCfg ); + InitPsychLPC_fx( sr_core, L_frame, hTcxCfg ); } ELSE { @@ -1900,4 +1439,3 @@ void init_tcx_cfg_fx( return; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_com/deemph.c b/lib_com/deemph.c index 61f442b43..3f60bf44c 100644 --- a/lib_com/deemph.c +++ b/lib_com/deemph.c @@ -40,38 +40,6 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * deemph() - * - * Deemphasis: filtering through 1/(1-mu z^-1) - *-------------------------------------------------------------------*/ - -void deemph( - float *signal, /* i/o: signal */ - const float mu, /* i : deemphasis factor */ - const int16_t L, /* i : vector size */ - float *mem /* i/o: memory (y[-1]) */ -) -{ - int16_t i; - - signal[0] = signal[0] + mu * ( *mem ); - for ( i = 1; i < L; i++ ) - { - signal[i] = signal[i] + mu * signal[i - 1]; - } - - *mem = signal[L - 1]; - - if ( ( *mem < 1e-10 ) & ( *mem > -1e-10 ) ) - { - *mem = 0; - } - - return; -} -#endif void deemph_fx_32( Word16 shift, /*scaled output*/ diff --git a/lib_com/delay_comp.c b/lib_com/delay_comp.c index 8e522ccd6..38a077f9e 100644 --- a/lib_com/delay_comp.c +++ b/lib_com/delay_comp.c @@ -48,70 +48,6 @@ *--------------------------------------------------------------------------*/ /*! r: delay value in ns */ -#ifndef IVAS_FLOAT_FIXED -int32_t get_delay( - const int16_t enc_dec, /* i : encoder/decoder flag */ - const int32_t io_fs, /* i : input/output sampling frequency */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - HANDLE_CLDFB_FILTER_BANK hCldfb /* i : Handle of Cldfb analysis */ -) -{ - int32_t delay = 0; - - if ( enc_dec == ENC ) - { - if ( ivas_format == MONO_FORMAT ) /* EVS mono */ - { - delay = ( DELAY_FIR_RESAMPL_NS + ACELP_LOOK_NS ); - } - else /* IVAS */ - { - delay = IVAS_ENC_DELAY_NS; - - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - delay = 0; /* All delay is compensated in the decoder with MASA */ - } - } - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - /* compensate for DirAC/SPAR filterbank delay */ - delay += IVAS_FB_ENC_DELAY_NS; - } - } - else /* DEC */ - { - if ( ivas_format == MONO_FORMAT ) /* EVS mono */ - { - if ( io_fs == 8000 ) - { - delay = DELAY_CLDFB_NS; - } - else - { - delay = DELAY_BWE_TOTAL_NS; - } - } - else /* IVAS */ - { - delay = IVAS_DEC_DELAY_NS; - - if ( hCldfb != NULL ) - { - /* compensate for filterbank delay */ - delay += IVAS_FB_DEC_DELAY_NS; - } - - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - delay += IVAS_ENC_DELAY_NS; /* Compensate also the encoder delay in the decoder with MASA */ - } - } - } - - return delay; -} -#else Word32 get_delay_fx( /* o : delay value in ms */ const Word16 what_delay, /* i : what delay? (ENC or DEC) Q0*/ const Word32 io_fs, /* i : input/output sampling frequency Q0*/ @@ -195,4 +131,3 @@ Word32 get_delay_fx( /* o : delay value in ms return delay; /*Q0*/ } -#endif diff --git a/lib_com/dlpc_bfi.c b/lib_com/dlpc_bfi.c index 5aa839680..97a511fb6 100644 --- a/lib_com/dlpc_bfi.c +++ b/lib_com/dlpc_bfi.c @@ -40,40 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * routine: dlpc_bfi_flt() - * - * - *---------------------------------------------------------------------*/ - -void dlpc_bfi_flt( - const int16_t L_frame, - float *lsf_q, /* o : quantized lsfs */ - const float *lsfold, /* i : past quantized lsf */ - const int16_t last_good, /* i : last good received frame */ - const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ - float mem_MA[], /* i/o: quantizer memory for MA model */ - float *mem_AR, /* i/o: quantizer memory for AR model */ - float *stab_fac, /* i : lsf stability factor */ - float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ - const int16_t numlpc, /* i : Number of division per superframe */ - float lsf_cng[], - const int16_t plcBackgroundNoiseUpdated, - float *lsf_q_cng, /* o : quantized lsfs of background noise */ - float *old_lsf_q_cng, /* o : old quantized lsfs for background noise */ - const float lsfBase[] /* i : base for differential lsf coding */ -) -{ - lsf_dec_bfi_flt( MODE2, &lsf_q[0], lsfold, lsf_adaptive_mean, lsfBase, mem_MA, mem_AR, *stab_fac, 0, L_frame, last_good, nbLostCmpt, plcBackgroundNoiseUpdated, lsf_q_cng, lsf_cng, old_lsf_q_cng, 0, 0, 0 ); - - if ( numlpc == 2 ) - { - /* Decode the second LPC */ - lsf_dec_bfi_flt( MODE2, &lsf_q[M], &lsf_q[0], lsf_adaptive_mean, lsfBase, mem_MA, mem_AR, *stab_fac, 0, L_frame, last_good, nbLostCmpt + 1, plcBackgroundNoiseUpdated, lsf_q_cng, lsf_cng, old_lsf_q_cng, 0, 0, 0 ); - } - - return; -} -#endif diff --git a/lib_com/edct.c b/lib_com/edct.c index 661dbacee..9fd122c96 100644 --- a/lib_com/edct.c +++ b/lib_com/edct.c @@ -41,377 +41,3 @@ #include "prot.h" #include "wmc_auto.h" #include /* for cosf, sinf */ - -static ivas_error get_edct_table( - const float **edct_table, - const int16_t length ) -{ - ivas_error error; - - error = IVAS_ERR_OK; - *edct_table = NULL; - - switch ( length ) - { - case 1200: - *edct_table = edct_table_600; - break; - case 960: - *edct_table = edct_table_480; - break; - case 640: - *edct_table = edct_table_320; - break; - case 320: - *edct_table = edct_table_160; - break; - case 256: - *edct_table = edct_table_128; - break; - case 240: - *edct_table = edct_table_120; - break; - case 200: - *edct_table = edct_table_100; - break; - case 160: - *edct_table = edct_table_80; - break; - case 40: - *edct_table = edct_table_20; - break; - case 800: - *edct_table = edct_table_400; - break; - case 512: - *edct_table = edct_table_256; - break; - case 480: - *edct_table = edct_table_240; - break; - case 400: - *edct_table = edct_table_200; - break; - case 128: - *edct_table = edct_table_64; - break; - case 80: - *edct_table = edct_table_40; - break; - } - - return error; -} - - -/*-----------------------------------------------------------------* - * edct() - * - * DCT-IV transform - *-----------------------------------------------------------------*/ - -void edct( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t i; - float re[L_FRAME_PLUS / 2]; - float im[L_FRAME_PLUS / 2]; - const float *edct_table = 0; - float local; - - get_edct_table( &edct_table, length ); - - /* Twiddling and Pre-rotate */ - for ( i = 0; i < length / 2; i++ ) - { - re[i] = x[2 * i] * edct_table[i] + x[length - 1 - 2 * i] * edct_table[length / 2 - 1 - i]; - im[i] = x[length - 1 - 2 * i] * edct_table[i] - x[2 * i] * edct_table[length / 2 - 1 - i]; - } - - if ( element_mode == EVS_MONO ) - { - DoFFT( re, im, length / 2 ); - } - else - { - fft( re, im, length / 2, 1 ); - } - - local = ( 0.75f * EVS_PI ) / length; - - for ( i = 0; i < length / 2; i++ ) - { - float tmp; - tmp = re[i] - im[i] * local; /* 3*pi/(4*length) is a constant */ - im[i] = im[i] + re[i] * local; - re[i] = tmp; - } - - /* Post-rotate and obtain the output data */ - for ( i = 0; i < length / 2; i++ ) - { - y[2 * i] = re[i] * edct_table[i] + im[i] * edct_table[length / 2 - 1 - i]; - y[length - 1 - 2 * i] = re[i] * edct_table[length / 2 - 1 - i] - im[i] * edct_table[i]; - } - - return; -} - - -/*-------------------------------------------------------------------------* - * edst() - * - * DST-IV transform - *-------------------------------------------------------------------------*/ - -void edst( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t i; - float re[L_FRAME_PLUS / 2]; - float im[L_FRAME_PLUS / 2]; - const float *edct_table = 0; - float local; - - get_edct_table( &edct_table, length ); - - /* Twiddling and Pre-rotate */ - for ( i = 0; i < length / 2; i++ ) - { - re[i] = x[length - 1 - 2 * i] * edct_table[i] + x[2 * i] * edct_table[length / 2 - 1 - i]; - im[i] = x[2 * i] * edct_table[i] - x[length - 1 - 2 * i] * edct_table[length / 2 - 1 - i]; - } - - if ( element_mode == EVS_MONO ) - { - DoFFT( re, im, length / 2 ); - } - else - { - fft( re, im, length / 2, 1 ); - } - - local = ( 0.75f * EVS_PI ) / length; - - for ( i = 0; i < length / 2; i++ ) - { - float tmp; - tmp = re[i] - im[i] * local; /* 3*pi/(4*length) is a constant */ - im[i] = im[i] + re[i] * local; - re[i] = tmp; - } - - /* Post-rotate and obtain the output data */ - for ( i = 0; i < length / 2; i++ ) - { - y[2 * i] = re[i] * edct_table[i] + im[i] * edct_table[length / 2 - 1 - i]; - y[length - 1 - 2 * i] = im[i] * edct_table[i] - re[i] * edct_table[length / 2 - 1 - i]; - } - - return; -} - -#define FAST_EDXT /* optimized FFT-based DCT/DST algorithm */ - -/*-------------------------------------------------------------------------* - * edxt() - * - * DCT/DST-II or III transform (currently also calculates DCT-IV and DST-IV) - *-------------------------------------------------------------------------*/ - -void edxt( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const uint16_t kernelType, /* i : kernel type (0 - 3) */ - const uint16_t synthesis /* i : nonzero for inverse */ -) -{ - const float pi_len = EVS_PI / length; - int16_t k, m; - -#ifdef FAST_EDXT - if ( kernelType == MDST_II || kernelType == MDCT_II ) - { - const int16_t Nm1 = length - 1; - const float xSign = 2.f * ( kernelType >> 1 ) - 1.f; - const float scale = 0.5f * pi_len; - float re[L_FRAME_PLUS]; - float im[L_FRAME_PLUS]; - - if ( !synthesis ) - { - for ( k = Nm1 >> 1; k >= 0; k-- ) /* pre-modulation of audio input */ - { - re[k] = x[2 * k]; - re[Nm1 - k] = x[2 * k + 1] * xSign; - im[k] = im[Nm1 - k] = 0.f; - } - - if ( length == 512 ) - { - DoRTFTn( re, im, 512 ); - } - else /* fft() doesn't support 512 */ - { - fft( re, im, length, 1 ); - } - - if ( kernelType >> 1 ) - { - for ( k = Nm1 >> 1; k > 0; k-- ) - { - const float wRe = cosf( scale * k ); - const float wIm = sinf( scale * k ); - - y[k] /*pt 1*/ = wRe * re[k] + wIm * im[k]; - y[length - k] = wIm * re[k] - wRe * im[k]; - } - y[length >> 1] = re[length >> 1] * sqrtf( 0.5f ); - } - else /* forw. DST-II */ - { - for ( k = Nm1 >> 1; k > 0; k-- ) - { - const float wRe = cosf( scale * k ); - const float wIm = sinf( scale * k ); - - y[Nm1 - k] = wRe * re[k] + wIm * im[k]; - y[k - 1] = wIm * re[k] - wRe * im[k]; - } - y[Nm1 >> 1] = re[length >> 1] * sqrtf( 0.5f ); - } - - y[Nm1 - Nm1 * ( kernelType >> 1 )] = re[0] * 0.5f; - } - else /* inverse II = III */ - { - if ( kernelType >> 1 ) - { - for ( k = Nm1 >> 1; k > 0; k-- ) - { - const float wRe = cosf( scale * k ) * 0.5f; - const float wIm = sinf( scale * k ) * 0.5f; - - re[k] = wRe * x[k] + wIm * x[length - k]; - im[k] = wRe * x[length - k] - wIm * x[k]; - } - re[length >> 1] = x[length >> 1] * sqrtf( 0.5f ); - } - else /* DST type III */ - { - for ( k = Nm1 >> 1; k > 0; k-- ) - { - const float wRe = cosf( scale * k ) * 0.5f; - const float wIm = sinf( scale * k ) * 0.5f; - - re[k] = wRe * x[Nm1 - k] + wIm * x[k - 1]; - im[k] = wRe * x[k - 1] - wIm * x[Nm1 - k]; - } - re[length >> 1] = x[Nm1 >> 1] * sqrtf( 0.5f ); - } - - re[0] = x[Nm1 - Nm1 * ( kernelType >> 1 )]; - im[0] = im[length >> 1] = 0.f; - for ( k = Nm1 >> 1; k > 0; k-- ) - { - re[length - k] = re[k]; - im[length - k] = -im[k]; - } - - if ( length == 512 ) - { - DoRTFTn( re, im, 512 ); - } - else /* fft() doesn't support 512 */ - { - fft( re, im, length, 1 ); - } - - for ( k = Nm1 >> 1; k >= 0; k-- ) /* post-modulation of FFT output */ - { - y[2 * k] = re[k]; - y[2 * k + 1] = re[Nm1 - k] * xSign; - } - } - } - else -#endif - if ( kernelType & 1 ) /* DST */ - { - const float offK = ( kernelType == MDST_II && synthesis ? 0.5f : 1.0f - 0.5f * ( kernelType >> 1 ) ); - const float offM = ( kernelType == MDST_II && synthesis ? 1.0f : 0.5f ); - - for ( k = 0; k < length; k++ ) - { - y[k] = 0.f; - for ( m = 0; m < length; m++ ) - { - y[k] += x[m] * sinf( pi_len * ( m + offM ) * ( k + offK ) ); - } - } - if ( offK == 1.f ) - { - y[length - 1] *= 0.5f; /* scale Nyquist sample */ - } - } - else /* kernelType 0, 2: DCT */ - { - const float offK = ( kernelType == MDCT_II && synthesis ? 0.5f : 0.5f - 0.5f * ( kernelType >> 1 ) ); - const float offM = ( kernelType == MDCT_II && synthesis ? 0.0f : 0.5f ); - - for ( k = 0; k < length; k++ ) - { - y[k] = 0.f; - for ( m = 0; m < length; m++ ) - { - y[k] += x[m] * cosf( pi_len * ( m + offM ) * ( k + offK ) ); - } - } - if ( offK == 0.f ) - { - y[0] *= 0.5f; /* scale lowest (i.e. DC) sample */ - } - } - - v_multc( y, ( kernelType == MDCT_II ? -1.f : 1.f ) * sqrtf( 2.f / length ), y, length ); - - return; -} - -/*-----------------------------------------------------------------* - * iedct_short() - * - * Inverse EDCT for short frames - *-----------------------------------------------------------------*/ - -void iedct_short( - const float *in, /* i : input vector */ - float *out, /* o : output vector */ - const int16_t segment_length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - float alias[MAX_SEGMENT_LENGTH]; - int16_t i; - - edct( in, alias, segment_length / 2, element_mode ); - - for ( i = 0; i < segment_length / 4; i++ ) - { - out[i] = alias[segment_length / 4 + i]; - out[segment_length / 4 + i] = -alias[segment_length / 2 - 1 - i]; - out[segment_length / 2 + i] = -alias[segment_length / 4 - 1 - i]; - out[3 * segment_length / 4 + i] = -alias[i]; - } - - return; -} diff --git a/lib_com/edct_fx.c b/lib_com/edct_fx.c index 468275962..28a5ed44a 100644 --- a/lib_com/edct_fx.c +++ b/lib_com/edct_fx.c @@ -12,7 +12,6 @@ #include "math_32.h" -#ifdef IVAS_FLOAT_FIXED static Word16 get_edxt_factor( Word16 length ) /* Returns value of sqrtf(2.f/length) in Q15 */ @@ -878,4 +877,3 @@ void edxt_fx( } return; } -#endif diff --git a/lib_com/enhancer.c b/lib_com/enhancer.c deleted file mode 100644 index 983a0303d..000000000 --- a/lib_com/enhancer.c +++ /dev/null @@ -1,281 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "wmc_auto.h" - -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void agc2( const float *sig_in, float *sig_out, const int16_t l_trm ); - -/*---------------------------------------------------------------------* - * enhancer() - * - * Enhancement of the excitation signal before synthesis - *---------------------------------------------------------------------*/ - -void enhancer( - const int16_t codec_mode, /* i : flag indicating Codec Mode */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t cbk_index, /* i : */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t coder_type, /* i : coding type */ - const int16_t L_frame, /* i : frame size */ - const float voice_fac, /* i : subframe voicing estimation */ - const float stab_fac, /* i : LP filter stablility measure */ - const float norm_gain_code, /* i : normalized innovative cb. gain */ - const float gain_inov, /* i : gain of the unscaled innovation */ - float *gc_threshold, /* i/o: code threshold */ - float *code, /* i/o: innovation */ - float *pt_exc2, /* i/o: adapt. excitation/total exc. */ - const float gain_pit, /* i : Quantized pitch gain */ - float *dispMem /* i/o: Phase dispersion algorithm memory */ -) -{ - float tmp, gain_code, new_norm_gain_code, fac; - int16_t i; - float pit_sharp; - float excp[L_SUBFR]; - - pit_sharp = gain_pit; - - /*-----------------------------------------------------------------* - * Phase dispersion - * - * Enhance noise at low bitrates - *-----------------------------------------------------------------*/ - - i = 2; /* no dispersion */ - if ( Opt_AMR_WB ) - { - if ( core_brate <= ACELP_6k60 ) - { - i = 0; /* high dispersion */ - } - else if ( core_brate <= ACELP_8k85 ) - { - i = 1; /* low dispersion */ - } - } - else if ( codec_mode == MODE1 && coder_type != UNVOICED ) - { - if ( core_brate <= ACELP_7k20 ) - { - i = 0; /* high dispersion */ - } - else if ( ( coder_type == GENERIC || coder_type == TRANSITION || coder_type == AUDIO || coder_type == INACTIVE ) && core_brate <= ACELP_9k60 ) - { - i = 1; /* low dispersion */ - } - } - else if ( codec_mode == MODE2 ) - { - if ( ( ( coder_type != VOICED ) && cbk_index <= 2 ) || ( ( coder_type == UNVOICED ) && L_frame == L_FRAME && cbk_index <= 10 ) || ( ( coder_type == UNVOICED ) && L_frame == L_FRAME16k && cbk_index <= 14 ) ) - { - i = 0; /* high dispersion */ - } - else if ( ( coder_type != VOICED ) && ( cbk_index <= 7 ) ) - { - i = 1; /* low dispersion */ - } - } - else if ( codec_mode == MODE1 && coder_type == UNVOICED && cbk_index /*uc_two_stage_flag*/ ) - { - i = 0; /* high dispersion */ - } - - phase_dispersion_flt( norm_gain_code, gain_pit, code, i, dispMem ); - - /*------------------------------------------------------------ - * Noise enhancer - * - * Enhance excitation on noise (modify code gain). If signal is noisy and LPC filter is stable, - * move code gain 1.5 dB towards its threshold. This decreases by 3 dB noise energy variation. - *-----------------------------------------------------------*/ - - if ( norm_gain_code < *gc_threshold ) - { - new_norm_gain_code = (float) ( norm_gain_code * 1.19f ); - if ( new_norm_gain_code > *gc_threshold ) - { - new_norm_gain_code = *gc_threshold; - } - } - else - { - new_norm_gain_code = (float) ( norm_gain_code / 1.19f ); - if ( new_norm_gain_code < *gc_threshold ) - { - new_norm_gain_code = *gc_threshold; - } - } - *gc_threshold = new_norm_gain_code; - - /* calculate new code gain */ - fac = stab_fac * ( 0.5f * ( 1.0f - voice_fac ) ); /* 1 = unvoiced, 0 = voiced */ - gain_code = fac * new_norm_gain_code + ( 1.0f - fac ) * norm_gain_code; - gain_code *= gain_inov; - - for ( i = 0; i < L_SUBFR; i++ ) - { - code[i] *= gain_code; - } - - /*------------------------------------------------------------* - * Pitch enhancer - * - * Enhance excitation on voiced (HP filtering of code). On voiced signal, filter code by a smooth HP - * filter to decrease the energy of code at low frequency - *------------------------------------------------------------*/ - - if ( !Opt_AMR_WB && codec_mode == MODE1 && coder_type == UNVOICED ) - { - mvr2r( code, pt_exc2, L_SUBFR ); - } - else - { - if ( Opt_AMR_WB && ( core_brate == ACELP_8k85 || core_brate == ACELP_6k60 ) ) - { - pit_sharp = gain_pit; - if ( pit_sharp > 1.0 ) - { - pit_sharp = 1.0; - } - - if ( pit_sharp > 0.5 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - excp[i] = pt_exc2[i] * pit_sharp * 0.25f; - } - } - } - - /*----------------------------------------------------------------- - * Do a simple noncasual "sharpening": effectively an FIR - * filter with coefs [-tmp 1.0 -tmp] where tmp = 0 ... 0.25 - * This is applied to code and added to exc2 - *-----------------------------------------------------------------*/ - if ( L_frame == L_FRAME16k ) - { - tmp = (float) ( 0.150f * ( 1.0f + voice_fac ) ); /* 0.30=voiced, 0=unvoiced */ - } - else - { - tmp = (float) ( 0.125f * ( 1.0f + voice_fac ) ); /* 0.25=voiced, 0=unvoiced */ - } - pt_exc2[0] += code[0] - ( tmp * code[1] ); - for ( i = 1; i < L_SUBFR - 1; i++ ) - { - pt_exc2[i] += code[i] - ( tmp * code[i - 1] ) - ( tmp * code[i + 1] ); - } - pt_exc2[L_SUBFR - 1] += code[L_SUBFR - 1] - ( tmp * code[L_SUBFR - 2] ); - - if ( Opt_AMR_WB && ( core_brate == ACELP_8k85 || core_brate == ACELP_6k60 ) ) - { - if ( pit_sharp > 0.5f ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - excp[i] += pt_exc2[i]; - } - - agc2( pt_exc2, excp, L_SUBFR ); - mvr2r( excp, pt_exc2, L_SUBFR ); - } - } - } - - return; -} - -/*-----------------------------------------------------------------------* - * agc2() - * - * Adaptive gain control - *-----------------------------------------------------------------------*/ - -static void agc2( - const float *sig_in, /* i : postfilter input signal */ - float *sig_out, /* i/o: postfilter output signal */ - const int16_t l_trm /* i : subframe size */ -) -{ - int16_t i; - float gain_in, gain_out; - float g0, gain; - - - gain_out = 0.0f; - for ( i = 0; i < l_trm; i++ ) - { - gain_out += sig_out[i] * sig_out[i]; - } - - if ( gain_out == 0.0f ) - { - return; - } - - gain_in = 0.0f; - for ( i = 0; i < l_trm; i++ ) - { - gain_in += sig_in[i] * sig_in[i]; - } - if ( gain_in == 0.0f ) - { - g0 = 0.0f; - } - else - { - g0 = (float) sqrt( gain_in / gain_out ); - } - - gain = g0; - for ( i = 0; i < l_trm; i++ ) - { - sig_out[i] *= gain; - } - - return; -} diff --git a/lib_com/enr_1_az.c b/lib_com/enr_1_az.c index eab3f49e9..8bc24ddbe 100644 --- a/lib_com/enr_1_az.c +++ b/lib_com/enr_1_az.c @@ -41,31 +41,6 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * enr_1_Az() - * - * Find Energy of the 1/A(z) impulse response - *-------------------------------------------------------------------*/ - -/*! r: impulse response energy */ -float enr_1_Az( - const float Aq[], /* i : LP filter coefs */ - const int16_t len /* i : impulse response length */ -) -{ - float enr_LP, h1[2 * L_SUBFR], mem[M]; - - - set_f( h1, 0, len ); /* Find the impulse response */ - set_f( mem, 0, M ); - h1[0] = 1.0f; - syn_filt( Aq, M, h1, h1, len, mem, 0 ); - enr_LP = dotp( h1, h1, len ) + 0.01f; /* Find the impulse response energy */ - - return enr_LP; -} -#endif #ifdef BASOP_NOGLOB Word16 Enr_1_Az_fx_o( /* o : impulse response energy Q3 */ diff --git a/lib_com/env_adj.c b/lib_com/env_adj.c index 39e29e8fa..d0e3877de 100644 --- a/lib_com/env_adj.c +++ b/lib_com/env_adj.c @@ -48,124 +48,6 @@ * Adjust the band energies of noise-fill and low resolution bands *--------------------------------------------------------------------------*/ -void env_adj( - const int16_t *pulses, /* i : number of pulses per band */ - const int16_t length, /* i : length of spectrum */ - const int16_t last_sfm, /* i : index of the last band */ - float *adj, /* o : adjustment factors for the envelope */ - const float env_stab, /* i : Envelope stability parameter */ - const int16_t *sfmsize /* i : Band widths */ -) -{ - int16_t i, j, group; - int16_t npul; - int16_t att_state; - int16_t start, len; - float tmp; - float gain_adj; - int16_t idx; - - att_state = 0; - len = 0; - start = 0; - - /* Find attenuation levels */ - for ( i = 0; i <= last_sfm; i++ ) - { - group = ( sfmsize[i] >> 3 ) - 1; - npul = pulses[i]; - - if ( length == L_FRAME32k ) - { - if ( npul == 0 ) - { - /* Noise filled band */ - if ( group <= 1 ) - { - if ( i > 0 && pulses[i - 1] != 0 && pulses[i + 1] != 0 ) - { - adj[i] = 0.36f; - } - else if ( i > 0 && ( pulses[i - 1] == 0 || pulses[i + 1] == 0 ) ) - { - adj[i] = 0.54f; - } - else - { - adj[i] = 0.72f; - } - } - else if ( i < last_sfm ) - { - if ( pulses[i - 1] != 0 && pulses[i + 1] != 0 ) - { - adj[i] = 0.54f; - } - else - { - adj[i] = 0.72f; - } - } - else - { - adj[i] = 0.72f; - } - - if ( att_state == 0 ) - { - start = i; - } - - len++; - att_state = 1; - } - else - { - adj[i] = 1.0f; - if ( att_state == 1 ) /* End of attenuation region found */ - { - tmp = min( 1, max( 0, len - ENV_ADJ_START ) * ( 1.0f / ENV_ADJ_INCL ) ); - for ( j = start; j < i; j++ ) - { - adj[j] = max( tmp + ( 1 - tmp ) * adj[j], env_stab ); - } - len = 0; - att_state = 0; - } - } - } - /* length == L_FRAME16k */ - else - { - /* Calculate low accuracy band attenuation */ - gain_adj = 1.0f; - if ( npul > 0 && npul < MAX_P_ATT ) - { - idx = (int16_t) ( npul * att_step[group] + 0.5f ) - 1; - if ( idx < MAX_P_ATT ) - { - gain_adj = gain_att[idx]; - } - } - adj[i] = gain_adj; - } - } - - /* Check if the sequence ended with an attenuation region */ - if ( att_state == 1 ) - { - tmp = min( 1, max( 0, len - ENV_ADJ_START ) * ( 1.0f / ENV_ADJ_INCL ) ); - - for ( j = start; j < i; j++ ) - { - adj[j] = max( tmp + ( 1 - tmp ) * adj[j], env_stab ); - } - } - - return; -} - - void env_adj_fx( const Word16 *pulses, /* i : number of pulses per band Q0 */ const Word16 length, /* i : length of spectrum Q0 */ diff --git a/lib_com/env_stab.c b/lib_com/env_stab.c index 1ccdd1184..0a04508b6 100644 --- a/lib_com/env_stab.c +++ b/lib_com/env_stab.c @@ -58,130 +58,6 @@ /* Envelope stability measure */ /*--------------------------------------------------------------------------*/ -float env_stability( - const int16_t *ynrm, /* i : Norm vector for current frame */ - const int16_t nb_sfm, /* i : Number of sub-bands */ - int16_t *mem_norm, /* i/o: Norm vector memory from past frame */ - int16_t *mem_env_delta, /* i/o: Envelope stability memory for smoothing*/ - const int16_t core_switching_flag /* i : Core switching flag */ -) -{ - Word16 env_delta; - Word16 env_stab; - Word16 tmp, tmp_stab; - Word16 i; - - Word16 exp, exp2; - Word32 L_tmp, L_env_delta; - Word16 inv_nb_sfm; - float env_stab_f; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - if ( core_switching_flag ) - { - for ( i = 0; i < nb_sfm; i++ ) - { - mem_norm[i] = ynrm[i]; - } -#ifdef BASOP_NOGLOB - Overflow = 0; - env_delta = shl_o( *mem_env_delta, 1, &Overflow ); -#else - env_delta = shl( *mem_env_delta, 1 ); -#endif - } - else - { - /* Calculate envelope stability parameter */ - L_env_delta = L_deposit_l( 0 ); - for ( i = 0; i < nb_sfm; i++ ) - { - tmp = sub( mem_norm[i], ynrm[i] ); - L_env_delta = L_mac0( L_env_delta, tmp, tmp ); - mem_norm[i] = ynrm[i]; - } - - inv_nb_sfm = 19418; /* Q19 */ - if ( nb_sfm == 26 ) - { - inv_nb_sfm = 20165; /* Q19 */ - } - exp = norm_l( L_env_delta ); - L_env_delta = Mult_32_16( L_shl( L_env_delta, exp ), inv_nb_sfm ); /* 0+exp+19-15 */ - - L_tmp = Sqrt_l( L_env_delta, &exp2 ); /* exp+4+31+exp2 */ - - exp = add( 35, add( exp, exp2 ) ); - if ( sub( s_and( exp, 1 ), 1 ) == 0 ) - { - L_tmp = Mult_32_16( L_tmp, 23170 ); /* 1/sqrt(2) in Q15 */ - } - exp = shr( exp, 1 ); - -#ifndef BASOP_NOGLOB - env_delta = round_fx( L_shl( L_tmp, sub( 26, exp ) ) ); /* Q10 */ - L_tmp = L_mult0( 26214, env_delta ); /* 26214 is 0.1 in Q18. Q28 */ - L_tmp = L_mac( L_tmp, 29491, *mem_env_delta ); /* 29491 is 0.9 in Q15. Q28 */ - *mem_env_delta = round_fx( L_tmp ); /* Q12 */ -#else /* BASOP_NOGLOB */ - env_delta = round_fx_o( L_shl_o( L_tmp, sub( 26, exp ), &Overflow ), &Overflow ); /* Q10 */ - L_tmp = L_mult0( 26214, env_delta ); /* 26214 is 0.1 in Q18. Q28 */ - L_tmp = L_mac_o( L_tmp, 29491, *mem_env_delta, &Overflow ); /* 29491 is 0.9 in Q15. Q28 */ - *mem_env_delta = round_fx_o( L_tmp, &Overflow ); /* Q12 */ -#endif /* BASOP_NOGLOB */ - Overflow = 0; -#ifndef BASOP_NOGLOB - env_delta = round_fx( L_shl( L_tmp, 1 ) ); /* Q13 */ -#else /* BASOP_NOGLOB */ - env_delta = round_fx_o( L_shl_o( L_tmp, 1, &Overflow ), &Overflow ); /* Q13 */ -#endif /* BASOP_NOGLOB */ - } - if ( Overflow != 0 ) /* Saturated due to the above up-shifting operation. */ - { - env_stab = stab_trans_fx[L_STAB_TBL - 1]; /* The highest quantized index. */ - env_stab_f = ( (float) env_stab ) / PCM16_TO_FLT_FAC; /* Convert env_stab(Q15) to float */ - return env_stab_f; - } - - /* If tmp_stab > (D_STAB_TBL*L_STAB_TBL + M_STAB_TBL), i.e., 0.103138*10+2.51757=3.603137, - * the quantized index is equal to 9. Hence, we only need to worry about any tmpStab < 4. - * In this case, Q13 is good enough. - */ - tmp_stab = sub( env_delta, M_STAB_TBL_FX ); /* in Q13 */ - tmp_stab = abs_s( tmp_stab ); - - /* Table lookup for smooth transitions - * First, find the quantization level, i, of tmpStab. */ -#if L_STAB_TBL > 10 -#error env_stability_fx: Use more efficient usquant() -#endif - tmp_stab = sub( tmp_stab, HALF_D_STAB_TBL_FX ); /* in Q13 */ - for ( i = 0; i < L_STAB_TBL - 1; i++ ) - { - if ( tmp_stab < 0 ) - { - break; - } - else - { - tmp_stab = sub( tmp_stab, D_STAB_TBL_FX ); /* in Q13 */ - } - } - - env_stab = stab_trans_fx[i]; - if ( sub( env_delta, M_STAB_TBL_FX ) < 0 ) - { - env_stab = sub( 0x7FFF, stab_trans_fx[i] ); - } - - env_stab_f = ( (float) env_stab ) / PCM16_TO_FLT_FAC; /* Convert env_stab(Q15) to float */ - - return env_stab_f; -} - - Word16 env_stability_fx( /* in Q15 */ const Word16 *ynrm, /*i: Norm vector for current frame */ const Word16 nb_sfm, /*i: Number of sub-bands */ @@ -320,51 +196,6 @@ Word16 env_stability_fx( /* in Q15 */ *--------------------------------------------------------------------------*/ /*! r: New speech/music state */ -float env_stab_smo( - float env_stab, /* i : env_stab value */ - float *env_stab_state_p, /* i/o: env_stab state probabilities */ - int16_t *ho_cnt /* i/o: hangover counter for speech state */ -) -{ - int16_t state, prev_state; - float maxval, pp[NUM_ENV_STAB_PLC_STATES], pa[NUM_ENV_STAB_PLC_STATES]; - /* get previous state */ - prev_state = maximum( env_stab_state_p, NUM_ENV_STAB_PLC_STATES, &maxval ); - - /* assume two states: speech(0), music(1) */ - /* set a posteriori likelihoods for the two states according to env_stab */ - env_stab = ( env_stab - stab_trans[L_STAB_TBL - 1] ) / ( 1 - 2 * stab_trans[L_STAB_TBL - 1] ); - pp[0] = 1.0f - env_stab; - pp[1] = env_stab; - - /* calculate a priori likelihoods */ - pa[0] = dotp( env_stab_tp[0], env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); - pa[1] = dotp( env_stab_tp[1], env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); - - /* multiply elementwise with a posteriori likelihoods */ - v_mult( pa, pp, env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); - - /* renormalize state probabilities */ - v_multc( env_stab_state_p, 1.0f / sum_f( env_stab_state_p, NUM_ENV_STAB_PLC_STATES ), env_stab_state_p, NUM_ENV_STAB_PLC_STATES ); - - /* find maximum index as return value */ - state = maximum( env_stab_state_p, NUM_ENV_STAB_PLC_STATES, &maxval ); - - /* apply some hangover for speech */ - if ( state == 0 && prev_state == 1 ) - { - *ho_cnt = ENV_STAB_SMO_HO; - } - if ( *ho_cnt > 0 ) - { - pp[0] = 1; - pp[1] = 0; - ( *ho_cnt )--; - } - - return state; -} - Word16 env_stab_smo_fx( /* Q0 */ Word16 env_stab, /*i : env_stab value Q15 */ Word16 *env_stab_state_p, /*i/o: env_stab state probabilities Q15 */ diff --git a/lib_com/env_stab_trans.c b/lib_com/env_stab_trans.c index 1d1ccff32..e3f98d881 100644 --- a/lib_com/env_stab_trans.c +++ b/lib_com/env_stab_trans.c @@ -48,113 +48,6 @@ * Transient detector for envelope stability measure *--------------------------------------------------------------------------*/ -void env_stab_transient_detect( - const int16_t is_transient, /* i : Transient flag */ - const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ - const int16_t norm[], /* i : quantization indices for norms */ - int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ - float *energy_lt, /* i/o: Long-term energy measure for transient detection */ - const int16_t HQ_mode, /* i : HQ coding mode */ - const int16_t bin_th, /* i : HVQ cross-over frequency bin */ - const float *coeff /* i : Coded spectral coefficients */ -) -{ - float d_max; - float e_frame; - int16_t blk; - int16_t i; - float E_sub[4]; - float delta_e_sub; - int16_t norm_ind; - - int16_t num_subframes = 4; - int16_t bands_per_subframe = 9; - - if ( HQ_mode == HQ_HVQ ) - { - e_frame = 0.0f; - - for ( i = 0; i < bin_th; i++ ) - { - e_frame += coeff[i] * coeff[i]; - } - - e_frame = (float) sqrt( e_frame / bin_th ); - - if ( e_frame > ENERGY_TH ) - { - *energy_lt = ENERGY_LT_BETA * ( *energy_lt ) + ( 1 - ENERGY_LT_BETA ) * e_frame; - } - - if ( *no_att_hangover > 0 ) - { - ( *no_att_hangover )--; - } - } - else - { - d_max = 0.0f; - e_frame = 0.0f; - if ( is_transient && length == L_FRAME32k ) - { - /* Measure subframe energies */ - for ( blk = 0; blk < num_subframes; blk++ ) - { - E_sub[blk] = 0.0f; - for ( i = 0; i < bands_per_subframe; i++ ) - { - norm_ind = subf_norm_groups[blk][i]; - E_sub[blk] += dicn[norm[norm_ind]]; - } - E_sub[blk] = E_sub[blk] / bands_per_subframe; - e_frame += E_sub[blk]; - } - /* Test for transient */ - if ( e_frame > ENERGY_TH * num_subframes ) - { - for ( blk = 0; blk < num_subframes - 1; blk++ ) - { - delta_e_sub = ( E_sub[blk + 1] - E_sub[blk] ) / *energy_lt; - if ( delta_e_sub > d_max ) - { - d_max = delta_e_sub; - } - } - } - } - else - { - /* Update long-term energy measure */ - e_frame = 0.0f; - - for ( i = 0; i < SFM_N_ENV_STAB; i++ ) - { - e_frame += dicn[norm[i]]; - } - - e_frame = e_frame / SFM_N_ENV_STAB; - - if ( e_frame > ENERGY_TH ) - { - *energy_lt = ENERGY_LT_BETA * ( *energy_lt ) + ( 1 - ENERGY_LT_BETA ) * e_frame; - } - } - - /* Add hang-over for conservative application of stability-dependent attenuation */ - if ( d_max > DELTA_TH ) - { - *no_att_hangover = ATT_LIM_HANGOVER; - } - else if ( *no_att_hangover > 0 ) - { - ( *no_att_hangover )--; - } - } - - return; -} - - void env_stab_transient_detect_fx( const Word16 is_transient, /* i: Transient flag */ const Word16 length, /* i : Length of spectrum (32 or 48 kHz) */ diff --git a/lib_com/fd_cng_com.c b/lib_com/fd_cng_com.c deleted file mode 100644 index 76aca2e49..000000000 --- a/lib_com/fd_cng_com.c +++ /dev/null @@ -1,1452 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include -#include "options.h" -#include -#include "prot.h" -#include "prot_fx.h" -#include "rom_com.h" -#include "wmc_auto.h" - -#ifdef IVAS_FLOAT_FIXED -#define FFT_SCALING_512 1073741824 // Q22 -#define FFT_SCALING_640 1342177280 // Q22 -#endif -/*------------------------------------------------------------------- - * Local function prototypes - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void mhvals_flt( const int16_t d, float *m ); -#endif -static void getmidbands( int16_t *part, const int16_t npart, int16_t *midband, float *psize_flt, float *psize_inv_flt ); - -/*------------------------------------------------------------------- - * initFdCngCom_flt() - * - * - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void initFdCngCom_flt( - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const float scale ) -{ - - /* Calculate FFT scaling factor */ - hFdCngCom->scalingFactor_flt = 1 / ( scale * scale * 8.f ); - - /* Initialize the overlap-add */ - set_f( hFdCngCom->timeDomainBuffer_flt, 0.0f, L_FRAME16k ); - set_f( hFdCngCom->olapBufferAna_flt, 0.0f, FFTLEN ); - set_f( hFdCngCom->olapBufferSynth_flt, 0.0f, FFTLEN ); - - /* Initialize the comfort noise generation */ - set_f( hFdCngCom->fftBuffer_flt, 0.0f, FFTLEN ); - set_f( hFdCngCom->olapBufferSynth2_flt, 0.0f, FFTLEN ); - set_f( hFdCngCom->cngNoiseLevel_flt, 0.0f, FFTCLDFBLEN ); - - /* Initialize quantizer */ - set_f( hFdCngCom->sidNoiseEst_flt, 0.0f, NPART ); - set_f( hFdCngCom->A_cng_flt, 0.0f, M + 1 ); - hFdCngCom->A_cng_flt[0] = 1.f; - - /* Set some counters and flags */ - hFdCngCom->inactive_frame_counter = 0; /* Either SID or zero frames */ - hFdCngCom->active_frame_counter = 0; - hFdCngCom->frame_type_previous = ACTIVE_FRAME; - hFdCngCom->flag_noisy_speech = 0; - hFdCngCom->likelihood_noisy_speech_flt = 0.f; - hFdCngCom->numCoreBands = 0; - hFdCngCom->stopBand = 0; - hFdCngCom->startBand = 0; - hFdCngCom->stopFFTbin = 0; - hFdCngCom->frameSize = 0; - hFdCngCom->fftlen = 0; - hFdCngCom->seed = 0; - hFdCngCom->seed2 = 1; - hFdCngCom->seed3 = 2; - hFdCngCom->CngBitrate = -1; - /* Initialize noise estimation algorithm */ - set_f( hFdCngCom->periodog_flt, 0.0f, PERIODOGLEN ); - mhvals_flt( MSNUMSUBFR * MSSUBFRLEN, &( hFdCngCom->msM_win_flt ) ); - mhvals_flt( MSSUBFRLEN, &( hFdCngCom->msM_subwin_flt ) ); - set_f( hFdCngCom->msPsdSum_flt, 0.0f, 2 ); - set_f( hFdCngCom->msPeriodogSum_flt, 0.0f, 2 ); - set_f( hFdCngCom->msSlope_flt, 0.0f, 2 ); - set_f( hFdCngCom->msQeqInvAv_flt, 0.0f, 2 ); - hFdCngCom->init_old_flt = 0; - - hFdCngCom->msFrCnt_init_counter = 0; - hFdCngCom->msFrCnt_init_thresh = 1; - hFdCngCom->offsetflag = 0; - hFdCngCom->msFrCnt = MSSUBFRLEN; - hFdCngCom->msMinBufferPtr = 0; - set_f( hFdCngCom->msAlphaCor_flt, 0.3f, 2 ); - - hFdCngCom->coherence_flt = 0.5f; - - return; -} -#endif - - -/*------------------------------------------------------------------- - * deleteFdCngCom_flt() - * - * Delete an instance of type FD_CNG_COM - *-------------------------------------------------------------------*/ - -void deleteFdCngCom_flt( - HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - HANDLE_FD_CNG_COM hsCom = *hFdCngCom; - - IF( hsCom != NULL ) - { - free( hsCom ); - *hFdCngCom = NULL; - } - - return; -} - - -/*------------------------------------------------------------------- - * initPartitions_flt() - * - * Initialize the spectral partitioning - *-------------------------------------------------------------------*/ - -void initPartitions_flt( - const int16_t *part_in, - const int16_t npart_in, - const int16_t startBand, - const int16_t stopBand, - int16_t *part_out, - int16_t *npart_out, - int16_t *midband, - float *psize_flt, - float *psize_inv_flt, - const int16_t stopBandFR ) -{ - int16_t i, j, len_out; - - if ( part_in != NULL ) - { - if ( stopBandFR > startBand ) - { - len_out = stopBandFR - startBand; /*part_out*/ - for ( i = 0; i < len_out; i++ ) - { - part_out[i] = i; - } - } - else - { - len_out = 0; - } /*npart_in,part_out*/ - for ( j = 0; j < npart_in && part_in[j] < stopBand; j++ ) - { - if ( part_in[j] >= stopBandFR && part_in[j] >= startBand ) - { - part_out[len_out++] = part_in[j] - startBand; - } - } - } - else - { - len_out = stopBand - startBand; /*part_out*/ - for ( i = 0; i < len_out; i++ ) - { - part_out[i] = i; - } - } - - *npart_out = len_out; - getmidbands( part_out, len_out, midband, psize_flt, psize_inv_flt ); - - return; -} - - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * compress_range_flt() - * - * Apply some dynamic range compression based on the log - *-------------------------------------------------------------------*/ - -void compress_range_flt( - float *in, - float *out, - const int16_t len ) -{ - float *ptrIn = in; - float *ptrOut = out; - int16_t i; - - /* out = log2( 1 + in ) */ - for ( i = 0; i < len; i++ ) - { - *ptrOut = (float) log10( *ptrIn + 1.f ); - ptrIn++; - ptrOut++; - } - v_multc( out, 1.f / (float) log10( 2.f ), out, len ); - - /* Quantize to simulate a fixed-point representation 6Q9 */ - v_multc( out, CNG_LOG_SCALING, out, len ); - for ( ptrOut = out; ptrOut < out + len; ptrOut++ ) - { - *ptrOut = (float) ( (int16_t) ( *ptrOut + 0.5f ) ); - if ( *ptrOut == 0.f ) - { - *ptrOut = 1.f; - } - } - v_multc( out, 1. / CNG_LOG_SCALING, out, len ); - - return; -} - - -/*------------------------------------------------------------------- - * expand_range_flt() - * - * Apply some dynamic range expansion to undo the compression - *-------------------------------------------------------------------*/ - -void expand_range_flt( - float *in, - float *out, - const int16_t len ) -{ - float *ptrIn = in; - float *ptrOut = out; - int16_t i; - - /* out = (2^(in) - 1) */ - for ( i = 0; i < len; i++ ) - { - *ptrOut = (float) pow( 2.f, *ptrIn ) - 1.f; - if ( *ptrOut < 0.0003385080526823181f ) - { - *ptrOut = 0.0003385080526823181f; - } - ptrIn++; - ptrOut++; - } - - return; -} - - -/*------------------------------------------------------------------- - * minimum_statistics_flt() - * - * Noise estimation using Minimum Statistics (MS) - *-------------------------------------------------------------------*/ - -void minimum_statistics_flt( - const int16_t len, /* i : Vector length */ - const int16_t lenFFT, /* i : Length of the FFT part of the vectors */ - float *psize_flt, - float *msPeriodog, /* i : Periodograms */ - float *msNoiseFloor, - float *msNoiseEst, /* o : Noise estimates */ - float *msAlpha, - float *msPsd, - float *msPsdFirstMoment, - float *msPsdSecondMoment, - float *msMinBuf, - float *msBminWin, - float *msBminSubWin, - float *msCurrentMin, - float *msCurrentMinOut, - float *msCurrentMinSubWindow, - int16_t *msLocalMinFlag, - int16_t *msNewMinFlag, - float *msPeriodogBuf, - int16_t *msPeriodogBufPtr, - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const int16_t enc_dec, /* i : encoder/decoder indicator */ - const int16_t element_mode /* i : IVAS element mode type */ -) -{ - float msM_win_flt = hFdCngCom->msM_win_flt; - float msM_subwin_flt = hFdCngCom->msM_subwin_flt; - float *msPsdSum_flt = hFdCngCom->msPsdSum_flt; - float *msPeriodogSum_flt = hFdCngCom->msPeriodogSum_flt; - float slope; - float *ptr; - float msAlphaCorAlpha = MSALPHACORALPHA_FLT; - float msAlphaCorAlpha2 = 1.f - MSALPHACORALPHA_FLT; - - int16_t i, j, k; - float scalar, scalar2, scalar3; - float snr, BminCorr, QeqInv, QeqInvAv; - float beta; - float msAlphaHatMin2; - int16_t len2 = MSNUMSUBFR * len; - int16_t current_len; - int16_t start, stop, cnt; - int16_t totsize; - const float inv_buflen = 1.f / MSBUFLEN; - - /* No minimum statistics at initialization */ - if ( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) - { - mvr2r( msPeriodog, msPsd, len ); - mvr2r( msPeriodog, msNoiseFloor, len ); - mvr2r( msPeriodog, msNoiseEst, len ); - mvr2r( msPeriodog, msPsdFirstMoment, len ); - set_f( msPsdSecondMoment, 0.0f, len ); - msPeriodogSum_flt[0] = dotp( msPeriodog, psize_flt, lenFFT ); - msPsdSum_flt[0] = msPeriodogSum_flt[0]; - if ( lenFFT < len ) - { - msPeriodogSum_flt[1] = dotp( msPeriodog + lenFFT, psize_flt + lenFFT, len - lenFFT ); - msPsdSum_flt[1] = msPeriodogSum_flt[1]; - } - - /* Increment frame counter at initialization */ - /* Some frames are sometimes zero at initialization => ignore them */ - if ( msPeriodog[0] < hFdCngCom->init_old_flt ) - { - set_f( msCurrentMinOut, FLT_MAX, len ); - set_f( msCurrentMin, FLT_MAX, len ); - set_f( msMinBuf, FLT_MAX, len2 ); - set_f( msCurrentMinSubWindow, FLT_MAX, len ); - hFdCngCom->msFrCnt_init_counter++; - } - hFdCngCom->init_old_flt = msPeriodog[0]; - } - else - { - - /* Consider the FFT and CLDFB bands separately - - first iteration for FFT bins, - - second one for CLDFB bands in SWB mode */ - start = 0; - stop = lenFFT; - totsize = hFdCngCom->stopFFTbin - hFdCngCom->startBand; - cnt = 0; /*msAlphaCor_flt*/ - while ( stop > start ) - { - current_len = stop - start; - - /* Compute smoothed correction factor for PSD smoothing */ - msPeriodogSum_flt[cnt] = dotp( msPeriodog + start, psize_flt + start, current_len ); - scalar = msPeriodogSum_flt[cnt] * msPeriodogSum_flt[cnt] + DELTA; - scalar2 = msPsdSum_flt[cnt] - msPeriodogSum_flt[cnt]; - scalar = max( scalar / ( scalar + scalar2 * scalar2 ), MSALPHACORMAX_FLT ); - hFdCngCom->msAlphaCor_flt[cnt] = msAlphaCorAlpha * hFdCngCom->msAlphaCor_flt[cnt] + msAlphaCorAlpha2 * scalar; - - /* Compute SNR */ - snr = dotp( msNoiseFloor + start, psize_flt + start, current_len ); - snr = ( msPsdSum_flt[cnt] + DELTA ) / ( snr + DELTA ); - snr = (float) pow( snr, MSSNREXP_FLT ); - msAlphaHatMin2 = min( MSALPHAHATMIN_FLT, snr ); - scalar = MSALPHAMAX_FLT * hFdCngCom->msAlphaCor_flt[cnt]; /*msAlpha,msPsd,msPeriodog,msNoiseFloor*/ - for ( j = start; j < stop; j++ ) - { - /* Compute optimal smoothing parameter for PSD estimation */ - scalar2 = msNoiseFloor[j] + DELTA; - scalar2 *= scalar2; - scalar3 = msPsd[j] - msNoiseFloor[j]; - msAlpha[j] = max( ( scalar * scalar2 ) / ( scalar2 + scalar3 * scalar3 ), msAlphaHatMin2 ); - - /* Compute the PSD (smoothed periodogram) in each band */ - msPsd[j] = msAlpha[j] * msPsd[j] + ( 1.f - msAlpha[j] ) * msPeriodog[j]; - } - msPsdSum_flt[cnt] = dotp( msPsd + start, psize_flt + start, current_len ); - QeqInvAv = 0; - scalar = ( (float) ( MSNUMSUBFR * MSSUBFRLEN ) - 1.f ) * ( 1.f - msM_win_flt ); - scalar2 = ( (float) MSSUBFRLEN - 1.f ) * ( 1.f - msM_subwin_flt ); /*msAlpha,msPsd,msPsdFirstMoment,msPsdSecondMoment,msNoiseFloor,msBminSubWin,msBminWin,psize_flt*/ - for ( j = start; j < stop; j++ ) - { - /* Compute variance of PSD */ - beta = min( msAlpha[j] * msAlpha[j], MSBETAMAX_FLT ); - scalar3 = msPsd[j] - msPsdFirstMoment[j]; - msPsdFirstMoment[j] = beta * msPsdFirstMoment[j] + ( 1.f - beta ) * msPsd[j]; - msPsdSecondMoment[j] = beta * msPsdSecondMoment[j] + ( 1.f - beta ) * scalar3 * scalar3; - /* Compute inverse of amount of degrees of freedom */ - QeqInv = min( ( msPsdSecondMoment[j] + DELTA ) / ( 2.f * msNoiseFloor[j] * msNoiseFloor[j] + DELTA ), MSQEQINVMAX_FLT ); - QeqInvAv += QeqInv * psize_flt[j]; - - /* Compute bias correction Bmin */ - msBminWin[j] = 1.f + scalar * QeqInv / ( 0.5f - msM_win_flt * QeqInv ); - msBminSubWin[j] = 1.f + scalar2 * QeqInv / ( 0.5f - msM_subwin_flt * QeqInv ); - } - QeqInvAv /= totsize; - hFdCngCom->msQeqInvAv_flt[cnt] = QeqInvAv; - - /* New minimum? */ - BminCorr = 1.f + MSAV_FLT * (float) sqrt( QeqInvAv ); /*msPsd,msBminWin,msNewMinFlag,msCurrentMin,msCurrentMinSubWindow*/ - for ( j = start; j < stop; j++ ) - { - scalar = BminCorr * msPsd[j]; - scalar2 = scalar * msBminWin[j]; - if ( scalar2 < msCurrentMin[j] ) - { - msNewMinFlag[j] = 1; - msCurrentMin[j] = scalar2; - msCurrentMinSubWindow[j] = scalar * msBminSubWin[j]; - } - else - { - msNewMinFlag[j] = 0; - } - } - - /* This is used later to identify local minima */ - if ( hFdCngCom->msFrCnt >= MSSUBFRLEN ) - { - i = 0; - while ( i < 3 ) - { - if ( hFdCngCom->msQeqInvAv_flt[cnt] < msQeqInvAv_thresh_flt[i] ) - { - break; - } - else - { - i++; - } - } - hFdCngCom->msSlope_flt[cnt] = msNoiseSlopeMax_flt[i]; - } - - /* Consider the FFT and CLDFB bands separately */ - start = stop; - stop = len; - totsize = hFdCngCom->stopBand - hFdCngCom->stopFFTbin; - cnt++; - } /*while (stop > start)*/ - - /* Update minimum between sub windows */ - if ( hFdCngCom->msFrCnt > 1 && hFdCngCom->msFrCnt < MSSUBFRLEN ) - { - /*msNewMinFlag,msCurrentMinSubWindow,msCurrentMinOut*/ - for ( j = 0; j < len; j++ ) - { - if ( msNewMinFlag[j] > 0 ) - { - msLocalMinFlag[j] = 1; - } - if ( msCurrentMinSubWindow[j] < msCurrentMinOut[j] ) - { - msCurrentMinOut[j] = msCurrentMinSubWindow[j]; - } - } - /* Get the current noise floor */ - mvr2r( msCurrentMinOut, msNoiseFloor, len ); - } - - /* sub window complete */ - else - { - if ( hFdCngCom->msFrCnt >= MSSUBFRLEN ) - { - /* Collect buffers */ - mvr2r( msCurrentMinSubWindow, msMinBuf + len * hFdCngCom->msMinBufferPtr, len ); - - /* Compute minimum among all buffers */ - mvr2r( msMinBuf, msCurrentMinOut, len ); - ptr = msMinBuf + len; - for ( i = 1; i < MSNUMSUBFR; i++ ) - { - /*msCurrentMinOut*/ - for ( j = 0; j < len; j++ ) - { - if ( *ptr < msCurrentMinOut[j] ) - { - msCurrentMinOut[j] = *ptr; - } - ptr++; - } - } - - /* Take over local minima */ - slope = hFdCngCom->msSlope_flt[0]; /*msLocalMinFlag,msNewMinFlag,msCurrentMinSubWindow,msCurrentMinOut*/ - for ( j = 0; j < len; j++ ) - { - if ( j == lenFFT ) - { - slope = hFdCngCom->msSlope_flt[1]; - } - if ( msLocalMinFlag[j] && !msNewMinFlag[j] && - msCurrentMinSubWindow[j] < slope * msCurrentMinOut[j] && - msCurrentMinSubWindow[j] > msCurrentMinOut[j] ) - { - msCurrentMinOut[j] = msCurrentMinSubWindow[j]; - i = j; - for ( k = 0; k < MSNUMSUBFR; k++ ) - { - msMinBuf[i] = msCurrentMinOut[j]; - i += len; - } - } - } - - /* Reset */ - set_s( msLocalMinFlag, 0, len ); - set_f( msCurrentMin, FLT_MAX, len ); - - /* Get the current noise floor */ - mvr2r( msCurrentMinOut, msNoiseFloor, len ); - } - } - - /* Detect sudden offsets based on the FFT bins (core bandwidth) */ - if ( msPsdSum_flt[0] > 50.f * msPeriodogSum_flt[0] ) - { - if ( hFdCngCom->offsetflag > 0 ) - { - mvr2r( msPeriodog, msPsd, len ); - mvr2r( msPeriodog, msCurrentMinOut, len ); - set_f( hFdCngCom->msAlphaCor_flt, 1.0f, cnt ); - set_f( msAlpha, 0.0f, len ); - mvr2r( msPeriodog, msPsdFirstMoment, len ); - set_f( msPsdSecondMoment, 0.0f, len ); - msPsdSum_flt[0] = dotp( msPeriodog, psize_flt, lenFFT ); - if ( lenFFT < len ) - { - msPsdSum_flt[1] = dotp( msPeriodog + lenFFT, psize_flt + lenFFT, len - lenFFT ); - } - } - hFdCngCom->offsetflag = 1; - } - else - { - hFdCngCom->offsetflag = 0; - } - - /* Increment frame counter */ - if ( hFdCngCom->msFrCnt == MSSUBFRLEN ) - { - hFdCngCom->msFrCnt = 1; - hFdCngCom->msMinBufferPtr++; - if ( hFdCngCom->msMinBufferPtr == MSNUMSUBFR ) - { - hFdCngCom->msMinBufferPtr = 0; - } - } - else - { - ( hFdCngCom->msFrCnt )++; - } - - /* Smooth noise estimate during CNG phases */ /*msNoiseEst,msNoiseFloor*/ - for ( j = 0; j < len; j++ ) - { - msNoiseEst[j] = 0.95f * msNoiseEst[j] + 0.05f * msNoiseFloor[j]; - } - } - - if ( enc_dec == DEC && element_mode == IVAS_CPE_TD ) - { - v_multc( msNoiseEst, 1.4125f, msNoiseEst, NPART_SHAPING ); - } - - /* Collect buffers */ - mvr2r( msPeriodog, msPeriodogBuf + len * ( *msPeriodogBufPtr ), len ); - - ( *msPeriodogBufPtr )++; - if ( ( *msPeriodogBufPtr ) == MSBUFLEN ) - { - ( *msPeriodogBufPtr ) = 0; - } - - /* Upper limit the noise floors with the averaged input energy */ /*msNoiseEst*/ - for ( j = 0; j < len; j++ ) - { - scalar = msPeriodogBuf[j]; - for ( i = j + len; i < MSBUFLEN * len; i += len ) - { - scalar += msPeriodogBuf[i]; - } /*division by a constant = multiplication by its (constant) inverse */ - scalar *= inv_buflen; - if ( msNoiseEst[j] > scalar ) - { - msNoiseEst[j] = scalar; - } - assert( msNoiseEst[j] >= 0 ); - } - - return; -} - - -/*------------------------------------------------------------------- - * apply_scale_flt() - * - * Apply bitrate-dependent scale - *-------------------------------------------------------------------*/ - -void apply_scale_flt( - float *scale, /* o : scalefactor */ - const int16_t bwidth, /* i : audio bandwidth */ - const int32_t brate, /* i : Bit rate */ - const SCALE_SETUP *scaleTable, /* i : Scale table */ - const int16_t scaleTableSize /* i : Size of scale table */ -) -{ - int16_t i; - - for ( i = 0; i < scaleTableSize; i++ ) - { - if ( ( bwidth == scaleTable[i].bwmode ) && - ( brate >= scaleTable[i].bitrateFrom ) && - ( brate < scaleTable[i].bitrateTo ) ) - { - break; - } - } - - assert( i < scaleTableSize ); - - *scale += scaleTable[i].scale_flt; - - return; -} - - -/*------------------------------------------------------------------- - * bandcombinepow_flt() - * - * Compute the power for each partition - *-------------------------------------------------------------------*/ - -void bandcombinepow_flt( - const float *bandpow, /* i : Power for each band */ - const int16_t nband, /* i : Number of bands */ - int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ - const int16_t npart, /* i : Number of partitions */ - const float *psize_inv_flt, /* i : Inverse partition sizes */ - float *partpow /* o : Power for each partition */ -) -{ - int16_t i, p; - float temp; - - if ( nband == npart ) - { - mvr2r( bandpow, partpow, nband ); - } - else - { - /* Compute the power in each partition */ - i = 0; /*part,partpow,psize_inv_flt*/ - for ( p = 0; p < npart; p++ ) - { - /* Arithmetic averaging of power for all bins in partition */ - temp = 0; - for ( ; i <= part[p]; i++ ) - { - temp += bandpow[i]; - } - partpow[p] = temp * psize_inv_flt[p]; - } - } - - return; -} - - -/*------------------------------------------------------------------- - * scalebands_flt() - * - * Scale partitions (with smoothing) - *-------------------------------------------------------------------*/ - -void scalebands_flt( - const float *partpow, /* i : Power for each partition */ - int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ - const int16_t npart, /* i : Number of partitions */ - int16_t *midband, /* i : Central band of each partition */ - const int16_t nFFTpart, /* i : Number of FFT partitions */ - const int16_t nband, /* i : Number of bands */ - float *bandpow, /* o : Power for each band */ - const int16_t flag_fft_en ) -{ - int16_t i, j = 0, nint, startBand, startPart, stopPart; - float val, delta = 0.f; - - /* Interpolate the bin/band-wise levels from the partition levels */ - if ( nband == npart ) - { - mvr2r( partpow, bandpow, npart ); - } - else - { - startBand = 0; - startPart = 0; - stopPart = nFFTpart; - while ( startBand < nband ) - { - if ( flag_fft_en || startPart >= nFFTpart ) - { - - /* first half partition */ - j = startPart; - val = partpow[j]; - for ( i = startBand; i <= midband[j]; i++ ) - { - bandpow[i] = val; - } - j++; - - delta = 1; - /* inner partitions */ - for ( ; j < stopPart; j++ ) - { - nint = midband[j] - midband[j - 1]; - /* log-linear interpolation */ /* Only one new LOG needs to be computed per loop iteration */ - delta = (float) exp( ( log( partpow[j] + DELTA ) - log( partpow[j - 1] + DELTA ) ) * normReciprocal[nint] ); - val = partpow[j - 1]; - for ( ; i < midband[j]; i++ ) - { - val *= delta; - bandpow[i] = val; - } - bandpow[i++] = partpow[j]; - } - if ( delta > 1.f ) - { - delta = 1.f; - } - - /* last half partition */ - val = partpow[stopPart - 1]; - for ( ; i <= part[stopPart - 1]; i++ ) - { - val *= delta; - bandpow[i] = val; - } - } - startBand = part[stopPart - 1] + 1; - startPart = stopPart; - stopPart = npart; - } - } - - return; -} -#endif - - -/*------------------------------------------------------------------- - * getmidbands() - * - * Get central band for each partition - *-------------------------------------------------------------------*/ - -static void getmidbands( - int16_t *part, /* i : Partition upper boundaries (band indices starting from 0) */ - const int16_t npart, /* i : Number of partitions */ - int16_t *midband, /* o : Central band of each partition */ - float *psize_flt, /* o : Partition sizes */ - float *psize_inv_flt /* o : Inverse of partition sizes */ -) -{ - int16_t j; - - /* first half partition */ - midband[0] = part[0]; - psize_flt[0] = (float) part[0] + 1.f; - psize_inv_flt[0] = normReciprocal[part[0] + 1]; - - /* inner partitions */ /*part,midband,psize_inv_flt*/ - for ( j = 1; j < npart; j++ ) - { - midband[j] = ( part[j - 1] + 1 + part[j] ) >> 1; - psize_flt[j] = (float) ( part[j] - part[j - 1] ); - psize_inv_flt[j] = normReciprocal[part[j] - part[j - 1]]; - } - - return; -} - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * AnalysisSTFT_flt() - * - * STFT analysis filterbank - *-------------------------------------------------------------------*/ - -void AnalysisSTFT_flt( - const float *timeDomainInput, - float *fftBuffer, /* o : FFT bins */ - HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - float *olapBuffer = hFdCngCom->olapBufferAna_flt; - const float *olapWin = hFdCngCom->olapWinAna_flt; - - /* Shift and cascade for overlap-add */ - mvr2r( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->fftlen - hFdCngCom->frameSize ); - mvr2r( timeDomainInput, olapBuffer + hFdCngCom->fftlen - hFdCngCom->frameSize, hFdCngCom->frameSize ); - - /* Window the signal */ - v_mult( olapBuffer, olapWin, fftBuffer, hFdCngCom->fftlen ); - - /* Perform FFT */ - RFFTN( fftBuffer, hFdCngCom->fftSineTab_flt, hFdCngCom->fftlen, -1 ); - - return; -} - -/*------------------------------------------------------------------- - * SynthesisSTFT_flt() - * - * STFT synthesis filterbank - *-------------------------------------------------------------------*/ - -void SynthesisSTFT_flt( - float *fftBuffer, /* i : FFT bins */ - float *timeDomainOutput, - float *olapBuffer, - const float *olapWin, - const int16_t tcx_transition, - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const int16_t element_mode, /* i : element mode */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - int16_t i; - float buf[M + 1 + 320], tmp; - - /* Perform IFFT */ - RFFTN( fftBuffer, hFdCngCom->fftSineTab_flt, hFdCngCom->fftlen, 1 ); - - /* Handle overlap in P/S domain for stereo */ - if ( ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) && nchan_out == 2 ) - { - mvr2r( olapBuffer + 3 * hFdCngCom->frameSize / 4 - ( M + 1 ), buf, hFdCngCom->frameSize + M + 1 ); - set_f( olapBuffer, 0.0f, hFdCngCom->fftlen ); - } - else - { - mvr2r( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); - set_f( olapBuffer + hFdCngCom->frameSize, 0.0f, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ - } - - if ( tcx_transition ) - { - for ( i = 0; i < 5 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] = fftBuffer[i]; - } - } - else - { - for ( i = hFdCngCom->frameSize / 4; i < 3 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] += fftBuffer[i] * olapWin[i - hFdCngCom->frameSize / 4]; - } - for ( ; i < 5 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] = fftBuffer[i]; - } - } - for ( ; i < 7 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] = fftBuffer[i] * olapWin[i - 3 * hFdCngCom->frameSize / 4]; - } - - for ( ; i < hFdCngCom->fftlen; i++ ) - { - olapBuffer[i] = 0; - } - - /* Get time-domain signal */ - v_multc( olapBuffer + hFdCngCom->frameSize / 4, (float) ( hFdCngCom->fftlen / 2 ), timeDomainOutput, hFdCngCom->frameSize ); - - /* Get excitation */ - if ( ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) && nchan_out == 2 ) - { - for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) - { - buf[i + ( M + 1 )] += olapBuffer[i + hFdCngCom->frameSize / 4]; - } - v_multc( buf, (float) ( hFdCngCom->fftlen / 2 ), buf, M + 1 + hFdCngCom->frameSize ); - } - else - { - v_multc( olapBuffer + hFdCngCom->frameSize / 4 - ( M + 1 ), (float) ( hFdCngCom->fftlen / 2 ), buf, M + 1 + hFdCngCom->frameSize ); - } - - tmp = buf[0]; - preemph( buf + 1, PREEMPH_FAC_FLT, M + hFdCngCom->frameSize, &tmp ); - residu( hFdCngCom->A_cng_flt, M, buf + 1 + M, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize ); - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * SynthesisSTFT_fx() - * - * STFT synthesis filterbank - *-------------------------------------------------------------------*/ - -void SynthesisSTFT_fx( - Word32 *fftBuffer, - /* i : FFT bins */ // Q15 - Word32 *timeDomainOutput, - Word32 *olapBuffer, // Qin - const Word16 *olapWin, - const Word16 tcx_transition, - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const Word16 element_mode, /* i : element mode */ - const Word16 nchan_out /* i : number of output channels */ -) -{ - Word16 i; - Word32 buf_fx[M + 1 + 320], tmp_fx; - - /* Perform IFFT */ - RFFTN_fx( fftBuffer, hFdCngCom->fftSineTab_fx, hFdCngCom->fftlen, 1 ); - - /* Handle overlap in P/S domain for stereo */ - test(); - test(); - IF( ( EQ_16( element_mode, IVAS_CPE_TD ) || EQ_16( element_mode, IVAS_CPE_DFT ) ) && EQ_16( nchan_out, 2 ) ) - { - Copy32( olapBuffer + sub( i_mult( 3, shr( hFdCngCom->frameSize, 2 ) ), ( M + 1 ) ), buf_fx, add( hFdCngCom->frameSize, M + 1 ) ); // Qin - set32_fx( olapBuffer, 0, hFdCngCom->fftlen ); - } - ELSE - { - Copy32( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); - set32_fx( olapBuffer + hFdCngCom->frameSize, 0, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ - } - - IF( tcx_transition ) - { - FOR( i = 0; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = fftBuffer[i]; // Q15 - move32(); - } - } - ELSE - { - FOR( i = hFdCngCom->frameSize / 4; i < ( 3 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = L_add( olapBuffer[i], Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( hFdCngCom->frameSize >> 2 ) )] ) ); - move32(); - } - FOR( ; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = fftBuffer[i]; - move32(); - } - } - FOR( ; i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( 3 * ( hFdCngCom->frameSize >> 2 ) ) )] ); - move32(); - } - - FOR( ; i < hFdCngCom->fftlen; i++ ) - { - olapBuffer[i] = 0; - move32(); - } - - Word32 fftScale = 0; - SWITCH( hFdCngCom->fftlen ) - { - case 640: - fftScale = FFT_SCALING_640; - move32(); - BREAK; - case 512: - fftScale = FFT_SCALING_512; - move32(); - BREAK; - default: - assert( !"Not supported FFT length!" ); - } - /* Get time-domain signal */ - // v_multc(olapBuffer + hFdCngCom->frameSize / 4, (float)(hFdCngCom->fftlen / 2), timeDomainOutput, hFdCngCom->frameSize); - v_multc_fixed( olapBuffer + hFdCngCom->frameSize / 4, fftScale, timeDomainOutput, hFdCngCom->frameSize ); // Q_in - 9 - /* Get excitation */ - test(); - test(); - IF( ( EQ_16( element_mode, IVAS_CPE_TD ) || EQ_16( element_mode, IVAS_CPE_DFT ) ) && EQ_16( nchan_out, 2 ) ) - { - FOR( i = 0; i < hFdCngCom->frameSize / 2; i++ ) - { - buf_fx[i + ( M + 1 )] = L_add( buf_fx[i + ( M + 1 )], olapBuffer[( i + ( hFdCngCom->frameSize >> 2 ) )] ); - move32(); - } - // v_multc(buf, (float)(hFdCngCom->fftlen / 2), buf, M + 1 + hFdCngCom->frameSize); - v_multc_fixed( buf_fx, fftScale, buf_fx, add( M + 1, hFdCngCom->frameSize ) ); - } - ELSE - { - // v_multc(olapBuffer + hFdCngCom->frameSize / 4 - (M + 1), (float)(hFdCngCom->fftlen / 2), buf, M + 1 + hFdCngCom->frameSize); - v_multc_fixed( olapBuffer + sub( shr( hFdCngCom->frameSize, 2 ), ( M + 1 ) ), fftScale, buf_fx, add( M + 1, hFdCngCom->frameSize ) ); - } - - tmp_fx = buf_fx[0]; - move32(); - // preemph(buf + 1, PREEMPH_FAC_FLT, M + hFdCngCom->frameSize, &tmp); - preemph_ivas_fx( buf_fx + 1, PREEMPH_FAC, add( M, hFdCngCom->frameSize ), &tmp_fx ); - // residu(hFdCngCom->A_cng_flt, M, buf + 1 + M, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize); - - // residu_ivas_fx( hFdCngCom->A_cng, Q13, M, buf_fx + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); - residu_ivas_fx( hFdCngCom->A_cng, ( 15 - norm_s( hFdCngCom->A_cng[0] - 1 ) ), M, buf_fx + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * SynthesisSTFT_dirac_flt() - * - * STFT synthesis filterbank - *-------------------------------------------------------------------*/ - -void SynthesisSTFT_dirac_flt( - float *fftBuffer, /* i : FFT bins */ - float *timeDomainOutput, - float *olapBuffer, - const float *olapWin, - const int16_t samples_out, - HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - int16_t i; - float buf[M + 1 + 320], tmp; - - /* Perform IFFT */ - RFFTN( fftBuffer, hFdCngCom->fftSineTab_flt, hFdCngCom->fftlen, 1 ); - - /* Handle overlap in P/S domain for stereo */ - mvr2r( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); - set_f( olapBuffer + hFdCngCom->frameSize, 0.0f, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ - - for ( i = hFdCngCom->frameSize / 4; i < 3 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] += fftBuffer[i] * olapWin[i - hFdCngCom->frameSize / 4]; - } - for ( ; i < 5 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] = fftBuffer[i]; - } - - for ( ; i < 7 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] = fftBuffer[i]; - } - - for ( ; i < hFdCngCom->fftlen; i++ ) - { - olapBuffer[i] = 0; - } - - /* Get time-domain signal */ - v_multc( olapBuffer + hFdCngCom->frameSize / 4, (float) ( hFdCngCom->fftlen / 2 ), timeDomainOutput, samples_out ); - - /* Get excitation */ - v_multc( olapBuffer + hFdCngCom->frameSize / 4 - ( M + 1 ), (float) ( hFdCngCom->fftlen / 2 ), buf, M + 1 + hFdCngCom->frameSize ); - tmp = buf[0]; - preemph( buf + 1, PREEMPH_FAC_FLT, M + hFdCngCom->frameSize, &tmp ); - residu( hFdCngCom->A_cng_flt, M, buf + 1 + M, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize ); - - /* update and window olapBuf if we have a output frame that is shorter than the default frame size...*/ - if ( samples_out < hFdCngCom->frameSize ) - { - mvr2r( olapBuffer + samples_out, olapBuffer + hFdCngCom->frameSize, 3 * hFdCngCom->frameSize / 4 ); - } - for ( i = 5 * hFdCngCom->frameSize / 4; i < 7 * hFdCngCom->frameSize / 4; i++ ) - { - olapBuffer[i] *= olapWin[i - 3 * hFdCngCom->frameSize / 4]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void SynthesisSTFT_dirac_fx( - Word32 *fftBuffer, - /* i : FFT bins */ // hFdCngCom->fftBuffer_exp - Word32 *timeDomainOutput, - Word32 *olapBuffer, // Q_in - const Word16 *olapWin, - const Word16 samples_out, - HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - Word16 i; - Word32 buf[M + 1 + 320], tmp; - - /* Perform IFFT */ - RFFTN_fx( fftBuffer, hFdCngCom->fftSineTab_fx, hFdCngCom->fftlen, 1 ); - - /* Handle overlap in P/S domain for stereo */ - Copy32( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); - set32_fx( olapBuffer + hFdCngCom->frameSize, 0, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ - - FOR( i = ( hFdCngCom->frameSize >> 2 ); i < ( 3 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = L_add( olapBuffer[i], Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( hFdCngCom->frameSize >> 2 ) )] ) ); - move32(); - } - FOR( ; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = fftBuffer[i]; - move32(); - } - - FOR( ; i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = fftBuffer[i]; - move32(); - } - - FOR( ; i < hFdCngCom->fftlen; i++ ) - { - olapBuffer[i] = 0; - move32(); - } - - Word32 fftScale = 0; - move32(); - SWITCH( hFdCngCom->fftlen ) - { - case 640: - fftScale = FFT_SCALING_640; - move32(); - break; - case 512: - fftScale = FFT_SCALING_512; - move32(); - break; - default: - assert( !"Not supported FFT length!" ); - } - - /* Get time-domain signal */ - v_multc_fixed( olapBuffer + shr( hFdCngCom->frameSize, 2 ), fftScale, timeDomainOutput, samples_out ); // Q_in - 9 - - /* Get excitation */ - v_multc_fixed( olapBuffer + sub( shr( hFdCngCom->frameSize, 2 ), ( M + 1 ) ), fftScale, buf, add( M + 1, hFdCngCom->frameSize ) ); - tmp = buf[0]; - move32(); - preemph_ivas_fx( buf + 1, PREEMPH_FAC, M + hFdCngCom->frameSize, &tmp ); - // residu_ivas_fx( hFdCngCom->A_cng, Q13, M, buf + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); - residu_ivas_fx( hFdCngCom->A_cng, sub( 15, norm_s( hFdCngCom->A_cng[0] - 1 ) ), M, buf + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); - - /* update and window olapBuf if we have a output frame that is shorter than the default frame size...*/ - IF( LT_16( samples_out, hFdCngCom->frameSize ) ) - { - Copy32( olapBuffer + samples_out, olapBuffer + hFdCngCom->frameSize, i_mult( 3, shr( hFdCngCom->frameSize, 2 ) ) ); - } - FOR( i = ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) - { - olapBuffer[i] = Mpy_32_16_1( olapBuffer[i], olapWin[( i - ( 3 * ( hFdCngCom->frameSize >> 2 ) ) )] ); - move32(); - } - - return; -} -#endif -/*------------------------------------------------------------------- - * mhvals_flt() - * - * Compute some values used in the bias correction of the minimum statistics algorithm - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void mhvals_flt( - const int16_t d, - float *m ) -{ - int16_t i, j; - float qi, qj, q; - int16_t len = SIZE_SCALE_TABLE_CN; - - i = 0; - for ( i = 0; i < len; i++ ) - { - if ( d <= d_array[i] ) - { - break; - } - } - if ( i == len ) - { - i = len - 1; - j = i; - } - else - { - j = i - 1; - } - if ( d == d_array[i] ) - { - *m = m_array_flt[i]; - } - else - { - qj = (float) sqrt( (float) d_array[i - 1] ); /*interpolate using sqrt(d)*/ - qi = (float) sqrt( (float) d_array[i] ); - q = (float) sqrt( (float) d ); - *m = m_array_flt[i] + ( qi * qj / q - qj ) * ( m_array_flt[j] - m_array_flt[i] ) / ( qi - qj ); - } - - return; -} -#endif - -/*------------------------------------------------------------------- - * rand_gauss_flt() - * - * Random generator with Gaussian distribution with mean 0 and std 1 - *-------------------------------------------------------------------*/ - -float rand_gauss_flt( - float *x, - int16_t *seed ) -{ - float temp; - - temp = (float) own_random( seed ); - temp += (float) own_random( seed ); - temp += (float) own_random( seed ); - temp *= OUTMAX_INV; - - *x = temp; - - return temp; -} -#ifdef IVAS_FLOAT_FIXED -Word32 rand_gauss_fx( - Word32 *x, - Word16 *seed, - Word16 q ) -{ - Word32 temp; - - temp = own_random( seed ); - temp = L_add( temp, own_random( seed ) ); - temp = L_add( temp, own_random( seed ) ); - temp = L_shr( temp, sub( 15, q ) ); - - *x = temp; - move32(); - - return temp; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * rand_gauss_fix() - * - * Random generator with Gaussian distribution with mean 0 and std 1 - *-------------------------------------------------------------------*/ - -Word16 rand_gauss_fix( - Word16 *x, - Word16 *seed ) -{ - Word32 temp; - - temp = shr( own_random( seed ), Q2 ); - temp = L_add( temp, shr( own_random( seed ), Q2 ) ); - temp = L_add( temp, shr( own_random( seed ), Q2 ) ); - - *x = (Word16) temp; - move32(); - - return (Word16) temp; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * lpc_from_spectrum_flt() - * - * - *-------------------------------------------------------------------*/ - -void lpc_from_spectrum_flt( - HANDLE_FD_CNG_COM hFdCngCom, - const int16_t start, - const int16_t stop, - const float preemph_fac ) -{ - int16_t i; - float r[32], nf; - float fftBuffer[FFTLEN], *ptr, *pti; - - float *powspec = hFdCngCom->cngNoiseLevel_flt; - int16_t fftlen = hFdCngCom->fftlen; - const float *fftSineTab = hFdCngCom->fftSineTab_flt; - float *A = hFdCngCom->A_cng_flt; - - /* Power Spectrum */ - ptr = fftBuffer; - pti = fftBuffer + 1; - nf = 1e-3f; - for ( i = 0; i < start; i++ ) - { - *ptr = nf; - *pti = 0.f; - ptr += 2; - pti += 2; - } - for ( ; i < stop; i++ ) - { - *ptr = max( nf, powspec[i - start] ); - *pti = 0.f; - ptr += 2; - pti += 2; - } - for ( ; i < fftlen / 2; i++ ) - { - *ptr = nf; - *pti = 0.f; - ptr += 2; - pti += 2; - } - fftBuffer[1] = nf; - - /* Pre-emphasis */ - ptr = fftBuffer; - for ( i = 0; i < fftlen / 2; i++ ) - { - *ptr *= ( 1.f + preemph_fac * preemph_fac - 2.0f * preemph_fac * (float) cos( -2.0f * EVS_PI * (float) i / (float) fftlen ) ); - - ptr += 2; - } - fftBuffer[1] *= ( 1.f + preemph_fac * preemph_fac + 2.0f * preemph_fac ); - - /* Autocorrelation */ - RFFTN( fftBuffer, fftSineTab, fftlen, 1 ); - for ( i = 0; i <= M; i++ ) - { - r[i] = fftBuffer[i] * ( fftlen / 2 ) * ( fftlen / 2 ); - } - if ( r[0] < 100.f ) - { - r[0] = 100.f; - } - - r[0] *= 1.0005f; - - /* LPC */ - lev_dur( A, r, M, NULL ); - return; -} - -/*------------------------------------------------------------------- - * FdCng_exc_flt() - * - * Generate FD-CNG as LP excitation - *-------------------------------------------------------------------*/ - -void FdCng_exc_flt( - HANDLE_FD_CNG_COM hFdCngCom, - int16_t *CNG_mode, - const int16_t L_frame, - const float *lsp_old, - const int16_t first_CNG, - float *lspCNG, - float *Aq, /* o : LPC coeffs */ - float *lsp_new, /* o : lsp */ - float *lsf_new, /* o : lsf */ - float *exc, /* o : LP excitation */ - float *exc2, /* o : LP excitation */ - float *bwe_exc /* o : LP excitation for BWE */ -) -{ - int16_t i; - *CNG_mode = -1; - - /*Get excitation */ - for ( i = 0; i < L_frame / L_SUBFR; i++ ) - { - mvr2r( hFdCngCom->A_cng_flt, Aq + i * ( M + 1 ), M + 1 ); - } - - a2lsp_stab( Aq, lsp_new, lsp_old ); - - if ( first_CNG == 0 ) - { - mvr2r( lsp_old, lspCNG, M ); - } - - for ( i = 0; i < M; i++ ) - { - /* AR low-pass filter */ - lspCNG[i] = CNG_ISF_FACT * lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; - } - - if ( L_frame == L_FRAME16k ) - { - lsp2lsf( lsp_new, lsf_new, M, INT_FS_16k ); - } - else - { - lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); - } - - mvr2r( hFdCngCom->exc_cng_flt, exc, L_frame ); - mvr2r( hFdCngCom->exc_cng_flt, exc2, L_frame ); - - if ( bwe_exc ) - { - if ( L_frame == L_FRAME ) - { - interp_code_5over2( exc2, bwe_exc, L_frame ); - } - else - { - interp_code_4over2( exc2, bwe_exc, L_frame ); - } - } - - return; -} -#endif diff --git a/lib_com/fd_cng_com_fx.c b/lib_com/fd_cng_com_fx.c index e6fa452db..86e27427e 100644 --- a/lib_com/fd_cng_com_fx.c +++ b/lib_com/fd_cng_com_fx.c @@ -12,6 +12,10 @@ #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" +#include "prot.h" + +#define FFT_SCALING_512 1073741824 // Q22 +#define FFT_SCALING_640 1342177280 // Q22 #define DELTA_SHIFT 2 #define DELTA_SHIFT_LD64 67108864l /*DELTA_SHIFT/64.0 Q31*/ @@ -53,7 +57,6 @@ ivas_error createFdCngCom_fx( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_initFdCngCom_fx( HANDLE_FD_CNG_COM hFdCngCom, Word16 scale ) { /* Calculate CLDFB scaling factor */ @@ -166,7 +169,6 @@ void ivas_initFdCngCom_fx( HANDLE_FD_CNG_COM hFdCngCom, Word16 scale ) return; } -#endif void initFdCngCom( HANDLE_FD_CNG_COM hFdCngCom, Word16 scale ) { /* Calculate CLDFB scaling factor */ @@ -183,9 +185,7 @@ void initFdCngCom( HANDLE_FD_CNG_COM hFdCngCom, Word16 scale ) /* Initialize the overlap-add */ set16_fx( hFdCngCom->timeDomainBuffer, 0, L_FRAME16k ); hFdCngCom->olapBufferAna = NULL; -#ifdef IVAS_FLOAT_FIXED set16_fx( hFdCngCom->olapBufferAna_fx, 0, FFTLEN ); -#endif // IVAS_FLOAT_FIXED set16_fx( hFdCngCom->olapBufferSynth, 0, FFTLEN ); hFdCngCom->olapBufferSynth2 = NULL; @@ -1168,7 +1168,6 @@ void minimum_statistics( } } -#ifdef IVAS_FLOAT_FIXED void minimum_statistics_fx( Word16 len, /* i : Total number of partitions (CLDFB or FFT) */ Word16 lenFFT, /* i : Number of FFT partitions */ @@ -1783,7 +1782,6 @@ void minimum_statistics_fx( assert( msNoiseEst[j] >= 0 /*0.0 Q15*/ ); } } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * apply_scale() @@ -1817,7 +1815,6 @@ void apply_scale( } } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * apply_scale_ind() * @@ -1879,7 +1876,6 @@ void apply_scale_ivas_fx( *index = i; move16(); } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * bandcombinepow() * @@ -2095,7 +2091,6 @@ void scalebands( } } -#ifdef IVAS_FLOAT_FIXED void scalebands_fx( const Word32 *partpow, /* i : Power for each partition Qx*/ Word16 *part, /* i : Partition upper boundaries (band indices starting from 0) */ @@ -2257,7 +2252,6 @@ void scalebands_fx( } } } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * getmidbands() @@ -2393,7 +2387,6 @@ void AnalysisSTFT( } } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * AnalysisSTFT_fx() * @@ -2450,9 +2443,7 @@ void AnalysisSTFT_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * SynthesisSTFT_enc_ivas_fx() * @@ -2591,7 +2582,6 @@ void SynthesisSTFT_enc_ivas_fx( Residu3_fx( hFdCngCom->A_cng, buf + 1 + M, hFdCngCom->exc_cng, hFdCngCom->frameSize, 1 ); } } -#endif /*------------------------------------------------------------------- * SynthesisSTFT() @@ -2722,7 +2712,6 @@ void SynthesisSTFT( } } -#ifdef IVAS_FLOAT_FIXED void SynthesisSTFT_ivas_fx( Word32 *fftBuffer, /* i : pointer to FFT bins */ Word16 fftBufferExp, /* i : exponent of FFT bins */ @@ -2853,7 +2842,6 @@ void SynthesisSTFT_ivas_fx( Residu3_fx( hFdCngCom->A_cng, buf + 1 + M, hFdCngCom->exc_cng, hFdCngCom->frameSize, 1 ); } } -#endif #ifdef IVAS_CODE_CNG_COM /*------------------------------------------------------------------- @@ -3327,3 +3315,246 @@ void FdCng_exc( } } } + +/*------------------------------------------------------------------- + * SynthesisSTFT_fx() + * + * STFT synthesis filterbank + *-------------------------------------------------------------------*/ + +void SynthesisSTFT_fx( + Word32 *fftBuffer, + /* i : FFT bins */ // Q15 + Word32 *timeDomainOutput, + Word32 *olapBuffer, // Qin + const Word16 *olapWin, + const Word16 tcx_transition, + HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ + const Word16 element_mode, /* i : element mode */ + const Word16 nchan_out /* i : number of output channels */ +) +{ + Word16 i; + Word32 buf_fx[M + 1 + 320], tmp_fx; + + /* Perform IFFT */ + RFFTN_fx( fftBuffer, hFdCngCom->fftSineTab_fx, hFdCngCom->fftlen, 1 ); + + /* Handle overlap in P/S domain for stereo */ + test(); + test(); + IF( ( EQ_16( element_mode, IVAS_CPE_TD ) || EQ_16( element_mode, IVAS_CPE_DFT ) ) && EQ_16( nchan_out, 2 ) ) + { + Copy32( olapBuffer + sub( i_mult( 3, shr( hFdCngCom->frameSize, 2 ) ), ( M + 1 ) ), buf_fx, add( hFdCngCom->frameSize, M + 1 ) ); // Qin + set32_fx( olapBuffer, 0, hFdCngCom->fftlen ); + } + ELSE + { + Copy32( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); + set32_fx( olapBuffer + hFdCngCom->frameSize, 0, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ + } + + IF( tcx_transition ) + { + FOR( i = 0; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = fftBuffer[i]; // Q15 + move32(); + } + } + ELSE + { + FOR( i = hFdCngCom->frameSize / 4; i < ( 3 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = L_add( olapBuffer[i], Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( hFdCngCom->frameSize >> 2 ) )] ) ); + move32(); + } + FOR( ; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = fftBuffer[i]; + move32(); + } + } + FOR( ; i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( 3 * ( hFdCngCom->frameSize >> 2 ) ) )] ); + move32(); + } + + FOR( ; i < hFdCngCom->fftlen; i++ ) + { + olapBuffer[i] = 0; + move32(); + } + + Word32 fftScale = 0; + SWITCH( hFdCngCom->fftlen ) + { + case 640: + fftScale = FFT_SCALING_640; + move32(); + BREAK; + case 512: + fftScale = FFT_SCALING_512; + move32(); + BREAK; + default: + assert( !"Not supported FFT length!" ); + } + /* Get time-domain signal */ + // v_multc(olapBuffer + hFdCngCom->frameSize / 4, (float)(hFdCngCom->fftlen / 2), timeDomainOutput, hFdCngCom->frameSize); + v_multc_fixed( olapBuffer + hFdCngCom->frameSize / 4, fftScale, timeDomainOutput, hFdCngCom->frameSize ); // Q_in - 9 + /* Get excitation */ + test(); + test(); + IF( ( EQ_16( element_mode, IVAS_CPE_TD ) || EQ_16( element_mode, IVAS_CPE_DFT ) ) && EQ_16( nchan_out, 2 ) ) + { + FOR( i = 0; i < hFdCngCom->frameSize / 2; i++ ) + { + buf_fx[i + ( M + 1 )] = L_add( buf_fx[i + ( M + 1 )], olapBuffer[( i + ( hFdCngCom->frameSize >> 2 ) )] ); + move32(); + } + // v_multc(buf, (float)(hFdCngCom->fftlen / 2), buf, M + 1 + hFdCngCom->frameSize); + v_multc_fixed( buf_fx, fftScale, buf_fx, add( M + 1, hFdCngCom->frameSize ) ); + } + ELSE + { + // v_multc(olapBuffer + hFdCngCom->frameSize / 4 - (M + 1), (float)(hFdCngCom->fftlen / 2), buf, M + 1 + hFdCngCom->frameSize); + v_multc_fixed( olapBuffer + sub( shr( hFdCngCom->frameSize, 2 ), ( M + 1 ) ), fftScale, buf_fx, add( M + 1, hFdCngCom->frameSize ) ); + } + + tmp_fx = buf_fx[0]; + move32(); + // preemph(buf + 1, PREEMPH_FAC_FLT, M + hFdCngCom->frameSize, &tmp); + preemph_ivas_fx( buf_fx + 1, PREEMPH_FAC, add( M, hFdCngCom->frameSize ), &tmp_fx ); + // residu(hFdCngCom->A_cng_flt, M, buf + 1 + M, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize); + + // residu_ivas_fx( hFdCngCom->A_cng, Q13, M, buf_fx + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); + residu_ivas_fx( hFdCngCom->A_cng, ( 15 - norm_s( hFdCngCom->A_cng[0] - 1 ) ), M, buf_fx + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); + + return; +} + +void SynthesisSTFT_dirac_fx( + Word32 *fftBuffer, + /* i : FFT bins */ // hFdCngCom->fftBuffer_exp + Word32 *timeDomainOutput, + Word32 *olapBuffer, // Q_in + const Word16 *olapWin, + const Word16 samples_out, + HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ +) +{ + Word16 i; + Word32 buf[M + 1 + 320], tmp; + + /* Perform IFFT */ + RFFTN_fx( fftBuffer, hFdCngCom->fftSineTab_fx, hFdCngCom->fftlen, 1 ); + + /* Handle overlap in P/S domain for stereo */ + Copy32( olapBuffer + hFdCngCom->frameSize, olapBuffer, hFdCngCom->frameSize ); + set32_fx( olapBuffer + hFdCngCom->frameSize, 0, hFdCngCom->frameSize ); /*olapBuffer, fftBuffer, olapWin*/ + + FOR( i = ( hFdCngCom->frameSize >> 2 ); i < ( 3 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = L_add( olapBuffer[i], Mpy_32_16_1( fftBuffer[i], olapWin[( i - ( hFdCngCom->frameSize >> 2 ) )] ) ); + move32(); + } + FOR( ; i < ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = fftBuffer[i]; + move32(); + } + + FOR( ; i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = fftBuffer[i]; + move32(); + } + + FOR( ; i < hFdCngCom->fftlen; i++ ) + { + olapBuffer[i] = 0; + move32(); + } + + Word32 fftScale = 0; + move32(); + SWITCH( hFdCngCom->fftlen ) + { + case 640: + fftScale = FFT_SCALING_640; + move32(); + break; + case 512: + fftScale = FFT_SCALING_512; + move32(); + break; + default: + assert( !"Not supported FFT length!" ); + } + + /* Get time-domain signal */ + v_multc_fixed( olapBuffer + shr( hFdCngCom->frameSize, 2 ), fftScale, timeDomainOutput, samples_out ); // Q_in - 9 + + /* Get excitation */ + v_multc_fixed( olapBuffer + sub( shr( hFdCngCom->frameSize, 2 ), ( M + 1 ) ), fftScale, buf, add( M + 1, hFdCngCom->frameSize ) ); + tmp = buf[0]; + move32(); + preemph_ivas_fx( buf + 1, PREEMPH_FAC, M + hFdCngCom->frameSize, &tmp ); + // residu_ivas_fx( hFdCngCom->A_cng, Q13, M, buf + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); + residu_ivas_fx( hFdCngCom->A_cng, sub( 15, norm_s( hFdCngCom->A_cng[0] - 1 ) ), M, buf + 1 + M, hFdCngCom->exc_cng_32fx, hFdCngCom->frameSize ); + + /* update and window olapBuf if we have a output frame that is shorter than the default frame size...*/ + IF( LT_16( samples_out, hFdCngCom->frameSize ) ) + { + Copy32( olapBuffer + samples_out, olapBuffer + hFdCngCom->frameSize, i_mult( 3, shr( hFdCngCom->frameSize, 2 ) ) ); + } + FOR( i = ( 5 * ( hFdCngCom->frameSize >> 2 ) ); i < ( 7 * ( hFdCngCom->frameSize >> 2 ) ); i++ ) + { + olapBuffer[i] = Mpy_32_16_1( olapBuffer[i], olapWin[( i - ( 3 * ( hFdCngCom->frameSize >> 2 ) ) )] ); + move32(); + } + + return; +} + +Word32 rand_gauss_fx( + Word32 *x, + Word16 *seed, + Word16 q ) +{ + Word32 temp; + + temp = own_random( seed ); + temp = L_add( temp, own_random( seed ) ); + temp = L_add( temp, own_random( seed ) ); + temp = L_shr( temp, sub( 15, q ) ); + + *x = temp; + move32(); + + return temp; +} + +/*------------------------------------------------------------------- + * rand_gauss_fix() + * + * Random generator with Gaussian distribution with mean 0 and std 1 + *-------------------------------------------------------------------*/ + +Word16 rand_gauss_fix( + Word16 *x, + Word16 *seed ) +{ + Word32 temp; + + temp = shr( own_random( seed ), Q2 ); + temp = L_add( temp, shr( own_random( seed ), Q2 ) ); + temp = L_add( temp, shr( own_random( seed ), Q2 ) ); + + *x = (Word16) temp; + move32(); + + return (Word16) temp; +} diff --git a/lib_com/fill_spectrum.c b/lib_com/fill_spectrum.c index 3e15bb26e..111ac6d2f 100644 --- a/lib_com/fill_spectrum.c +++ b/lib_com/fill_spectrum.c @@ -41,237 +41,9 @@ #include "prot.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * fill_spectrum() - * - * Apply spectral filling by - * - filling zero-bit bands below BWE region - * - applying BWE above transition frequency - *--------------------------------------------------------------------------*/ - -void fill_spectrum( - float *coeff, /* i/o: normalized MLT spectrum / nf spectrum */ - int16_t *R, /* i : number of pulses per band */ - const int16_t is_transient, /* i : transient flag */ - int16_t norm[], /* i : quantization indices for norms */ - const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ - const int16_t hq_generic_offset, /* i : HQ GENERIC offset */ - const int16_t nf_idx, /* i : noise fill index */ - const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ - const float env_stab, /* i : Envelope stability measure [0..1] */ - int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ - float *energy_lt, /* i/o: Long-term energy measure for transient detection */ - int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ - const int16_t hq_generic_exc_clas, /* i : HQ generic hf excitation class */ - const int16_t core_sfm, /* i : index of the end band for core */ - int16_t HQ_mode, /* i : HQ mode */ - float noise_level[], /* i : noise levels for harmonic modes */ - int32_t core_brate, /* i : target bitrate */ - float prev_noise_level[], /* i/o: noise factor in previous frame */ - int16_t *prev_R, /* i/o: bit allocation info. in previous frame */ - float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ - const int16_t *peak_idx, /* i : HVQ peak indices */ - const int16_t Npeaks, /* i : Number of HVQ peaks */ - const int16_t *npulses, /* i : Number of assigned pulses per band */ - int16_t prev_is_transient, /* i : previous transient flag */ - float *prev_normq, /* i : previous norms */ - float *prev_env, /* i : previous noise envelopes */ - int16_t prev_bfi, /* i : previous bad frame indicator */ - const int16_t *sfmsize, /* i : Length of bands */ - const int16_t *sfm_start, /* i : Start of bands */ - const int16_t *sfm_end, /* i : End of bands */ - int16_t *prev_L_swb_norm, /* i/o: last normalize length for harmonic mode */ - int16_t prev_hq_mode, /* i : previous HQ mode */ - const int16_t num_sfm, /* i : Number of bands */ - const int16_t num_env_bands, /* i : Number of envelope bands */ - const int16_t element_mode /* i : element mode */ -) -{ - float CodeBook[L_SPEC48k_EXT]; - int16_t cb_size = 0; - int16_t last_sfm; - float CodeBook_mod[L_SPEC48k_EXT]; - float norm_adj[NB_SFM]; - int16_t high_sfm = 23; - int16_t flag_32K_env_hangover; - int16_t bin_th = 0; - int16_t peak_pos[L_HARMONIC_EXC]; - int16_t bwe_peaks[L_FRAME48k]; - float normq_v[NB_SFM]; - float coeff_fine[L_SPEC48k_EXT]; - float coeff_out[L_SPEC48k_EXT]; - - set_s( peak_pos, 0, L_HARMONIC_EXC ); - set_s( bwe_peaks, 0, L_FRAME48k ); - set_f( norm_adj, 1.0f, num_sfm ); - set_f( coeff_out, 0.0f, L_FRAME48k ); - - if ( HQ_mode == HQ_TRANSIENT ) - { - last_sfm = num_sfm - 1; - } - else if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) - { - last_sfm = max( core_sfm, num_env_bands - 1 ); - } - else - { - last_sfm = core_sfm; - } - - if ( HQ_mode == HQ_HARMONIC ) - { - high_sfm = ( core_brate < HQ_BWE_CROSSOVER_BRATE ) ? HVQ_THRES_SFM_24k - 1 : HVQ_THRES_SFM_32k - 1; - - if ( last_sfm < high_sfm ) - { - last_sfm = high_sfm; - } - } - else if ( HQ_mode == HQ_HVQ ) - { - bin_th = sfm_end[last_sfm]; - } - - /* Transient analysis for envelope stability measure */ - if ( length == L_FRAME32k ) - { - env_stab_transient_detect( is_transient, length, norm, no_att_hangover, energy_lt, HQ_mode, bin_th, coeff ); - } - - if ( length == L_FRAME16k || ( ( length == L_FRAME32k && HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) && *no_att_hangover == 0 ) ) - { - /* Norm adjustment function */ - env_adj( npulses, length, last_sfm, norm_adj, env_stab, sfmsize ); - } - - flag_32K_env_hangover = ( length == L_FRAME32k && ( ( env_stab < 0.5f && *no_att_hangover == 0 ) || HQ_mode == HQ_HVQ ) ); - - /*----------------------------------------------------------------* - * Build noise-fill codebook - *----------------------------------------------------------------*/ - - if ( HQ_mode != HQ_HVQ ) - { - cb_size = build_nf_codebook( flag_32K_env_hangover, coeff, sfm_start, sfmsize, sfm_end, last_sfm, R, CodeBook, CodeBook_mod ); - } - - /*----------------------------------------------------------------* - * Prepare fine structure for Harmonic and HVQ - *----------------------------------------------------------------*/ - - if ( HQ_mode == HQ_HARMONIC ) - { - harm_bwe_fine( R, last_sfm, high_sfm, num_sfm, norm, sfm_start, sfm_end, prev_L_swb_norm, coeff, coeff_out, coeff_fine ); - } - else if ( HQ_mode == HQ_HVQ ) - { - hvq_bwe_fine( last_sfm, num_sfm, sfm_end, peak_idx, Npeaks, peak_pos, prev_L_swb_norm, coeff, bwe_peaks, coeff_fine ); - } - - /*----------------------------------------------------------------* - * Apply noise-fill - *----------------------------------------------------------------*/ - - if ( HQ_mode != HQ_HVQ && cb_size > 0 ) - { - apply_noisefill_HQ( R, length, flag_32K_env_hangover, core_brate, last_sfm, CodeBook, CodeBook_mod, cb_size, sfm_start, sfm_end, sfmsize, coeff ); - } - - /*----------------------------------------------------------------* - * Normal mode BWE - *----------------------------------------------------------------*/ - if ( HQ_mode == HQ_NORMAL ) - { - hq_fold_bwe( last_sfm, sfm_end, num_sfm, coeff ); - } - - /*----------------------------------------------------------------* - * Apply noise-fill adjustment - *----------------------------------------------------------------*/ - - if ( ( length >= L_FRAME32k || core_brate > HQ_32k || core_brate < HQ_24k40 ) && HQ_mode != HQ_HVQ ) - { - apply_nf_gain( nf_idx, last_sfm, R, sfm_start, sfm_end, coeff ); - } - - /*----------------------------------------------------------------* - * Prepare fine strucutre for HQ GENERIC - *----------------------------------------------------------------*/ - if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) - { - hq_generic_fine( coeff, last_sfm, sfm_start, sfm_end, bwe_seed, coeff_fine ); - } - - /*----------------------------------------------------------------* - * Apply envelope - *----------------------------------------------------------------*/ - - if ( HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) - { - apply_envelope( coeff, norm, norm_adj, num_sfm, last_sfm, HQ_mode, length, sfm_start, sfm_end, normq_v, coeff_out, coeff_fine ); - } - - /*----------------------------------------------------------------* - * Harmonic BWE, HVQ BWE and HQ SWB BWE - *----------------------------------------------------------------*/ - - if ( HQ_mode == HQ_HARMONIC ) - { - harm_bwe( coeff_fine, coeff, num_sfm, sfm_start, sfm_end, last_sfm, high_sfm, R, prev_hq_mode, norm, noise_level, prev_noise_level, bwe_seed, coeff_out, element_mode ); - } - else if ( HQ_mode == HQ_HVQ ) - { - hvq_bwe( coeff, coeff_fine, sfm_start, sfm_end, sfmsize, last_sfm, prev_hq_mode, bwe_peaks, bin_th, num_sfm, core_brate, R, norm, noise_level, prev_noise_level, bwe_seed, coeff_out ); - } - else if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) - { - hq_generic_bwe( HQ_mode, coeff_fine, hq_generic_fenv, coeff_out, hq_generic_offset, prev_L_swb_norm, hq_generic_exc_clas, sfm_end, num_sfm, num_env_bands, R ); - } - - /*----------------------------------------------------------------* - * HQ WB BWE refinements - *----------------------------------------------------------------*/ - - if ( length == L_FRAME16k && core_brate <= HQ_32k ) - { - hq_wb_nf_bwe( coeff, is_transient, prev_bfi, normq_v, num_sfm, sfm_start, sfm_end, sfmsize, last_sfm, R, prev_is_transient, prev_normq, prev_env, bwe_seed, prev_coeff_out, prev_R, coeff_out ); - } - - /*----------------------------------------------------------------* - * Update memories - *----------------------------------------------------------------*/ - - if ( HQ_mode != HQ_HARMONIC && HQ_mode != HQ_HVQ ) - { - prev_noise_level[0] = 0.1f; - prev_noise_level[1] = 0.1f; - } - if ( !( length == L_FRAME16k && core_brate <= HQ_32k ) ) - { - set_f( prev_env, 0, SFM_N_WB ); - set_f( prev_normq, 0, SFM_N_WB ); - } - - if ( length == L_FRAME32k && core_brate <= HQ_32k ) - { - *prev_R = R[SFM_N_WB - 1]; - mvr2r( coeff_out + L_FRAME16k - L_HQ_WB_BWE, prev_coeff_out, L_HQ_WB_BWE ); - } - - mvr2r( coeff_out, coeff, length ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_fill_spectrum_fx( Word16 *coeff, /* i/o: normalized MLT spectrum / nf spectrum Q12 */ Word32 *L_coeff_out, /* i/o: Noisefilled MLT spectrum Q12 */ @@ -793,4 +565,3 @@ void fill_spectrum_fx( return; } -#endif diff --git a/lib_com/findpulse.c b/lib_com/findpulse.c index 3596b20b8..cc7d2bf3b 100644 --- a/lib_com/findpulse.c +++ b/lib_com/findpulse.c @@ -48,101 +48,7 @@ * Find first pitch pulse in a frame *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: pulse position */ -int16_t findpulse( - const int16_t L_frame, /* i : length of the frame */ - const float res[], /* i : residual signal */ - const int16_t T0, /* i : integer pitch */ - const int16_t enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ - int16_t *sign /* i/o: sign of the maximum */ -) -{ - const float *ptr; - float val, maxval; - int16_t i, maxi; - float resf[L_FRAME16k]; /* Low pass filtered residual */ - - if ( enc_dec == ENC ) - { - /*-----------------------------------------------------------------* - * Very simple LP filter - *-----------------------------------------------------------------*/ - - resf[0] = 0.50f * res[0] + 0.25f * res[1]; - for ( i = 1; i < L_frame - 1; i++ ) - { - resf[i] = 0.25f * res[i - 1] + 0.5f * res[i] + 0.25f * res[i + 1]; - } - resf[L_frame - 1] = 0.25f * res[L_frame - 2] + 0.50f * res[L_frame - 1]; - - /*-----------------------------------------------------------------* - * Find "biggest" pulse in the last pitch section - *-----------------------------------------------------------------*/ - - ptr = resf + L_frame - 1; - maxval = 0; - maxi = 0; - for ( i = 0; i < T0; i++ ) - { - val = (float) fabs( *ptr ); - if ( val > maxval ) - { - maxval = val; - maxi = i; - if ( *ptr >= 0 ) - { - *sign = 0; - } - else - { - *sign = 1; - } - } - ptr--; - } - } - else - { - /*-----------------------------------------------------------------* - * Find "biggest" pulse in the last pitch section according to the sign - *-----------------------------------------------------------------*/ - - ptr = res; - maxval = 0; - maxi = 0; - - if ( *sign == 0 ) - { - for ( i = 1; i <= T0; i++ ) - { - val = *ptr++; - if ( val >= maxval ) - { - maxval = val; - maxi = i; - } - } - } - else - { - for ( i = 1; i <= T0; i++ ) - { - val = *ptr++; - if ( val <= maxval ) - { - maxval = val; - maxi = i; - } - } - } - } - - return ( maxi ); -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 findpulse_fx( /* o : pulse position Q0 */ const Word16 L_frame, /* i : length of the frame */ const Word16 res[], /* i : Residual signal <12 bits Qx */ @@ -238,4 +144,3 @@ Word16 findpulse_fx( /* o : pulse position return maxi; } -#endif diff --git a/lib_com/fine_gain_bits.c b/lib_com/fine_gain_bits.c index 34a9c17b7..fd9c0d490 100644 --- a/lib_com/fine_gain_bits.c +++ b/lib_com/fine_gain_bits.c @@ -41,6 +41,7 @@ #include #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------- * subband_gain_bits() * @@ -126,3 +127,4 @@ int16_t assign_gain_bits( return gain_bits_tot; } +#endif diff --git a/lib_com/fine_gain_bits_fx.c b/lib_com/fine_gain_bits_fx.c index 8e3fd2244..dd306f872 100644 --- a/lib_com/fine_gain_bits_fx.c +++ b/lib_com/fine_gain_bits_fx.c @@ -6,9 +6,7 @@ #include "options.h" /* Compilation switches */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------------- @@ -16,7 +14,6 @@ * * HQ core encoder *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void subband_gain_bits_fx( const Word16 *Rk, /* i : bit allocation per band Q3 */ const Word16 N, /* i : number of bands */ @@ -186,4 +183,3 @@ Word16 ivas_assign_gain_bits_fx( /* o : Number of ass return gain_bits_tot; } -#endif diff --git a/lib_com/float_to_fix_ops.c b/lib_com/float_to_fix_ops.c index c12984f73..41d90359f 100644 --- a/lib_com/float_to_fix_ops.c +++ b/lib_com/float_to_fix_ops.c @@ -222,7 +222,6 @@ Word16 Q_factor_arrL( float *x, Word16 l ) return Q; } -#ifdef IVAS_FLOAT_FIXED Word16 L_get_q( float f ) { if ( fabsf( f ) > (float) INT_MAX ) @@ -296,5 +295,4 @@ Word16 L_get_q_buf1( float *ptr_flt, Word16 length ) return sub( norm_l( (Word32) ftemp ), 0 ); } } -#endif #undef WMC_TOOL_SKIP diff --git a/lib_com/frame_ener.c b/lib_com/frame_ener.c index bf6249814..03e31126a 100644 --- a/lib_com/frame_ener.c +++ b/lib_com/frame_ener.c @@ -47,6 +47,7 @@ * Estimation of pitch-synchronous (voiced sounds) or half-frame energy *----------------------------------------------------------------------------------*/ +#ifndef IVAS_FLOAT_FIXED void fer_energy( const int16_t L_frame, /* i : frame length */ const int16_t clas, /* i : frame classification */ @@ -84,8 +85,8 @@ void fer_energy( } return; } +#endif -#ifdef IVAS_FLOAT_FIXED void fer_energy_fx( const Word16 L_frame, /* i : frame length */ const Word16 clas, /* i : frame classification */ @@ -141,50 +142,7 @@ void fer_energy_fx( } return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------* - * frame_energy() - * - * Compute pitch-synchronous energy at the frame end - *------------------------------------------------------------------------*/ - -float frame_energy( - const int16_t L_frame, /* i : length of the frame */ - const float *pitch, /* i : pitch values for each subframe */ - const float *speech, /* i : pointer to speech signal for E computation */ - const float lp_speech, /* i : long-term active speech energy average */ - float *frame_ener /* o : pitch-synchronous energy at frame end */ -) -{ - float enern; - const float *pt1; - int16_t len; - float dotProd; - len = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); - if ( len < L_SUBFR ) - { - len *= 2; - } - - pt1 = speech + L_frame - len; - - dotProd = dotp( pt1, pt1, len ); - if ( 0 == dotProd ) - { - *frame_ener = MIN_LOG_VAL_60dB; - } - else - { - *frame_ener = 10.0f * (float) log10( dotProd / (float) len ); - } - enern = *frame_ener - lp_speech; - - return enern; -} -#endif /*----------------------------------------------------------------------------------* * frame_ener() diff --git a/lib_com/frame_ener_fx.c b/lib_com/frame_ener_fx.c new file mode 100644 index 000000000..b6871307a --- /dev/null +++ b/lib_com/frame_ener_fx.c @@ -0,0 +1,403 @@ +/****************************************************************************************************** + + (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "prot.h" +#include "wmc_auto.h" +#include "prot_fx.h" +/*----------------------------------------------------------------------------------* + * fer_energy() + * + * Estimation of pitch-synchronous (voiced sounds) or half-frame energy + *----------------------------------------------------------------------------------*/ + +#ifndef IVAS_FLOAT_FIXED +void fer_energy( + const int16_t L_frame, /* i : frame length */ + const int16_t clas, /* i : frame classification */ + const float *synth, /* i : synthesized speech at Fs = 12k8 Hz */ + const float pitch, /* i : pitch period */ + float *enr, /* o : pitch-synchronous or half_frame energy */ + const int16_t offset /* i : speech pointer offset (0 or L_frame) */ +) +{ + int16_t len; + const float *pt_synth; + + if ( clas == VOICED_CLAS || clas == ONSET || clas == SIN_ONSET ) /* Voiced or Onset current frame */ + { + len = (int16_t) ( pitch + 0.5f ); /* pitch value */ + + pt_synth = synth; + if ( offset != 0 ) + { + pt_synth = synth + L_frame - len; + } + + emaximum( pt_synth, len, enr ); /* pitch synchronous E */ + } + else + { + pt_synth = synth; + if ( offset != 0 ) + { + pt_synth = synth + L_frame / 2; + } + + *enr = dotp( pt_synth, pt_synth, L_frame / 2 ); + *enr /= (float) ( L_frame / 2 ); + } + return; +} +#endif + +#ifdef IVAS_FLOAT_FIXED +void fer_energy_fx( + const Word16 L_frame, /* i : frame length */ + const Word16 clas, /* i : frame classification */ + const Word32 *synth, /* i : synthesized speech at Fs = 12k8 Hz Q(q_synth) */ + const Word16 q_synth, /* i : synthesized speech at Fs = 12k8 Hz */ + const Word16 pitch, /* i : pitch period Q0 */ + Word32 *enr, /* o : pitch-synchronous or half_frame energy Q0 */ + const Word16 offset /* i : speech pointer offset (0 or L_frame) */ +) +{ + Word16 len, shift, exp; + const Word32 *pt_synth; + Word16 enr_tmp, i; + Word64 W_tmp; + + test(); + test(); + IF( EQ_16( clas, VOICED_CLAS ) || EQ_16( clas, ONSET ) || EQ_16( clas, SIN_ONSET ) ) /* Voiced or Onset current frame */ + { + len = ( pitch ); /* pitch value */ + move16(); + + pt_synth = synth; + IF( offset != 0 ) + { + pt_synth = synth + sub( L_frame, len ); + } + + emaximum_32fx( q_synth, pt_synth, len, enr ); /* pitch synchronous E */ + } + ELSE + { + pt_synth = synth; + IF( offset != 0 ) + { + pt_synth = synth + shr( L_frame, 1 ); + } + + W_tmp = 0; + move64(); + FOR( i = 0; i < L_frame / 2; i++ ) + { + W_tmp = W_add( W_tmp, W_mult0_32_32( pt_synth[i], pt_synth[i] ) ); // Q = q_synth * 2 + } + shift = W_norm( W_tmp ); + W_tmp = W_shl( W_tmp, shift ); // Q = q_synth * 2 + shift + *enr = W_extract_h( W_tmp ); // Q = q_synth * 2 + shift - 32 + move32(); + + enr_tmp = BASOP_Util_Divide3216_Scale( *enr, shr( L_frame, 1 ) /*Q0*/, &exp ); + *enr = L_shr( L_deposit_l( enr_tmp ), sub( sub( sub( shift, 32 ), exp ), 1 ) ); /*Q0*/ + move32(); + } + return; +} +#endif // IVAS_FLOAT_FIXED + +#ifndef IVAS_FLOAT_FIXED +/*------------------------------------------------------------------------* + * frame_energy() + * + * Compute pitch-synchronous energy at the frame end + *------------------------------------------------------------------------*/ + +float frame_energy( + const int16_t L_frame, /* i : length of the frame */ + const float *pitch, /* i : pitch values for each subframe */ + const float *speech, /* i : pointer to speech signal for E computation */ + const float lp_speech, /* i : long-term active speech energy average */ + float *frame_ener /* o : pitch-synchronous energy at frame end */ +) +{ + float enern; + const float *pt1; + int16_t len; + float dotProd; + + len = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); + if ( len < L_SUBFR ) + { + len *= 2; + } + + pt1 = speech + L_frame - len; + + dotProd = dotp( pt1, pt1, len ); + if ( 0 == dotProd ) + { + *frame_ener = MIN_LOG_VAL_60dB; + } + else + { + *frame_ener = 10.0f * (float) log10( dotProd / (float) len ); + } + enern = *frame_ener - lp_speech; + + return enern; +} +#endif + +/*----------------------------------------------------------------------------------* + * frame_ener() + * + * Estimation of pitch-synchronous (voiced) or mean half-frame (unvoiced) energy + *----------------------------------------------------------------------------------*/ +Word16 frame_ener_fx( + const Word16 L_frame, /* i : length of the frame */ + const Word16 clas, /* i : frame classification */ + const Word16 *synth, /* i : synthesized speech at Fs = 12k8 Hz Q_new */ + const Word16 pitch, /* i : pitch period Q0 */ + Word32 *enr_q, /* o : pitch-synchronous or half_frame energy Q0 */ + const Word16 offset, /* i : speech pointer offset (0 or L_FRAME) */ + const Word16 Q_new, /* i : Scaling factor */ + Word16 shift, /* i : Shift need to obtain 12 bits vectors */ + const Word16 enc /* i : Encoder/decoder */ +) +{ + Word16 len, exp_enrq, exp_tmp, pos; + Word16 i; + const Word16 *pt_synth; + Word32 Ltmp; + + exp_enrq = 0; + move16(); + test(); + test(); + IF( ( EQ_16( clas, VOICED_CLAS ) ) || ( EQ_16( clas, ONSET ) ) || ( EQ_16( clas, SIN_ONSET ) ) ) /* current frame is voiced */ + { + /* current frame is voiced */ + len = pitch; + move16(); /* pitch value at the end of frame */ + pt_synth = synth; + if ( offset != 0 ) + { + pt_synth = synth + sub( L_frame, len ); + } + emaximum_fx( Q_new, pt_synth, len, enr_q ); + IF( enc != 0 ) + { + exp_enrq = norm_l( *enr_q ); + *enr_q = L_shl( *enr_q, exp_enrq ); + move32(); + exp_enrq = sub( exp_enrq, 2 ); + } + } + ELSE + { + /* current frame is unvoiced */ + Word16 L_frame2, exp2, enr_q_tmp; + + L_frame2 = shr( L_frame, 1 ); + pos = 0; + move16(); + + if ( offset != 0 ) + { + pos = sub( L_frame, L_frame2 ); + } +#ifdef BASOP_NOGLOB + Ltmp = L_mult_sat( synth[pos], synth[pos] ); /*2 * Qnew + 1*/ +#else + Ltmp = L_mult( synth[pos], synth[pos] ); +#endif + FOR( i = 1; i < L_frame2; i++ ) + { +#ifdef BASOP_NOGLOB + Ltmp = L_mac_sat( Ltmp, synth[pos + i], synth[pos + i] ); /*2 * Qnew + 1*/ +#else /* BASOP_NOGLOB */ + Ltmp = L_mac( Ltmp, synth[pos + i], synth[pos + i] ); +#endif + } + test(); + IF( EQ_32( Ltmp, MAX_32 ) || enc != 0 ) + { + /* scale down when overflow occurs */ + *enr_q = Energy_scale( synth + pos, L_frame2, shift, &exp_enrq ); + move32(); + } + ELSE + { + shift = 0; + move16(); + /* Normalize acc in Q31 (energy already calculated) */ + pos = norm_l( Ltmp ); + Ltmp = L_shl( Ltmp, pos ); + exp_enrq = sub( 30, pos ); /* exponent = 0..30 */ + *enr_q = Ltmp; + move32(); + } + + /* enr2 = 1.0f/L_FRAME2 * dot_product(synth, synth, L_FRAME2) */ + exp_enrq = sub( exp_enrq, shl( shift, 1 ) ); + + IF( enc != 0 ) + { + assert( L_frame == 256 || L_frame == 320 ); + + exp_tmp = add( shl( Q_new, 1 ), -2 + 7 ); /* L_subfr == L_SUBFR */ + exp_enrq = sub( exp_enrq, exp_tmp ); + exp_enrq = sub( 31, exp_enrq ); + + IF( EQ_16( L_frame, 320 ) ) + { + *enr_q = Mult_32_16( *enr_q, 26214 ); /*x 0.8 to get /160*/ + move32(); + i = norm_l( *enr_q ); + *enr_q = L_shl( *enr_q, i ); + move32(); + exp_enrq = add( i, exp_enrq ); + } + } + ELSE + { + exp_enrq = sub( exp_enrq, add( Q_new, Q_new ) ); + enr_q_tmp /*Q30 exp2+exp_enrq*/ = BASOP_Util_Divide3216_Scale( *enr_q /*Q31*/, L_frame2 /*Q0*/, &exp2 ); + *enr_q = L_shr( L_deposit_l( enr_q_tmp ), sub( 30, add( exp2, exp_enrq ) ) ); /*Q0*/ + move32(); + *enr_q = L_add( *enr_q, 1 ); + move32(); + exp_enrq = 0; + move16(); + } + } + + return exp_enrq; +} + +/*------------------------------------------------------------------------* + * frame_energy() + * + * Compute pitch-synchronous energy at the frame end + *------------------------------------------------------------------------*/ +Word16 frame_energy_fx( /* o : Frame energy in Q8 */ + Word16 L_frame, + const Word16 *pitch, /* i : pitch values for each subframe Q6 */ + const Word16 *speech, /* i : pointer to speech signal for E computation Q_syn*/ + const Word16 lp_speech, /* i : long term active speech energy average Q8 */ + Word16 *frame_ener, /* o : pitch-synchronous energy at frame end Q8 */ + const Word16 Q_syn /* i : Synthesis scaling */ +) +{ + Word32 Ltmp; + const Word16 *pt1; + Word16 tmp16, exp1, exp2, tmp1, tmp2; + Word16 len, enern; +#ifdef BASOP_NOGLOB_DECLARE_LOCAL + Flag Overflow = 0; + move32(); +#endif + + + /* len = (0.5f * (pitch[2]/64.0 + pitch[3]/64.0) + 0.5f) */ +#ifdef BASOP_NOGLOB + len = mult_r( add_o( pitch[2], pitch[3], &Overflow ), 256 ); +#else + len = mult_r( add( pitch[2], pitch[3] ), 256 ); +#endif + + if ( LT_16( len, L_SUBFR ) ) + { + len = shl( len, 1 ); + } + pt1 = speech + sub( L_frame, len ); + + /* *frame_ener = 10.0f * log10(dot_product(pt1, pt1, len) / (float)len) */ + + tmp1 = norm_s( len ); + tmp2 = shl( len, tmp1 ); + tmp1 = sub( 15, tmp1 ); + + Ltmp = Dot_productSq16HQ( 0, pt1, len, &exp1 ); + exp1 = sub( exp1, shl( Q_syn, 1 ) ); + exp1 = sub( exp1, 1 ); /* compensation of leftshift caused by mac operation in dot_productSq16HQ */ + tmp16 = BASOP_Util_Divide3216_Scale( Ltmp, len, &exp2 ); + + exp1 = add( exp1, exp2 ); + exp1 = add( exp1, 1 ); /* compensate result of division Q-1 */ + + + tmp2 = norm_s( tmp16 ); + Ltmp = L_shl( L_deposit_h( tmp16 ), tmp2 ); /*Q16, (exp1-tmp2) = Q31, exp1-tmp2+15*/ + + Ltmp = BASOP_Util_Log2( Ltmp ); /*Q(31-6) = Q25*/ + exp1 = sub( 15 + exp1, tmp2 ); + + /*add ld(2^exp1)=exp1 but check format, first*/ + tmp16 = sub( sub( 15, norm_s( exp1 ) ), 5 ); /*factor to shift Ltmp and exp1 with (shr) to avoid overflows when adding*/ +#ifdef BASOP_NOGLOB + Ltmp = L_shr_o( Ltmp, tmp16, &Overflow ); /*Q25, tmp16*/ +#else + Ltmp = L_shr( Ltmp, tmp16 ); /*Q25, tmp16*/ +#endif + exp2 = shr( exp1, tmp16 ); /*Q0 , tmp16*/ +#ifdef BASOP_NOGLOB + Ltmp = L_add_o( Ltmp, L_shl( L_deposit_l( exp2 ), 25 ), &Overflow ); /*Q25, tmp16, normalized*/ +#else + Ltmp = L_add( Ltmp, L_shl( L_deposit_l( exp2 ), 25 ) ); /*Q25, tmp16, normalized*/ +#endif + + /*make 10*log10 out of log2*/ + Ltmp = Mpy_32_16_1( Ltmp, LG10 ); /*Q25,tmp16 * Q13 = Q23, tmp16*/ +#ifdef BASOP_NOGLOB + *frame_ener = extract_h( L_shl_o( Ltmp, add( tmp16, 1 ), &Overflow ) ); /*Q8*/ + move16(); + enern = sub_o( *frame_ener, lp_speech, &Overflow ); /*Q8*/ +#else + *frame_ener = extract_h( L_shl( Ltmp, add( tmp16, 1 ) ) ); /*Q8*/ + move16(); + enern = sub( *frame_ener, lp_speech ); /*Q8*/ +#endif + + return enern; +} diff --git a/lib_com/get_gain.c b/lib_com/get_gain.c index 8cfa02160..d222bd68d 100644 --- a/lib_com/get_gain.c +++ b/lib_com/get_gain.c @@ -46,6 +46,7 @@ * *----------------------------------------------------------------------------------*/ +#ifndef IVAS_FLOAT_FIXED /*! r: codebook gain (adaptive or fixed) */ float get_gain_flt( const float x[], /* i : target signal */ @@ -70,8 +71,8 @@ float get_gain_flt( return ( corr / ener ); } +#endif -#ifdef IVAS_FLOAT_FIXED Word32 get_gain( /* output: codebook gain (adaptive or fixed) Q16 */ const Word16 x[], /* input : target signal Qx */ const Word16 y[], /* input : filtered codebook excitation Qx */ @@ -176,4 +177,3 @@ Word32 get_gain2( /* output: codebook gain (adaptive or fixed) return Lgain; } -#endif diff --git a/lib_com/get_gain_fx.c b/lib_com/get_gain_fx.c new file mode 100644 index 000000000..de5f6e80d --- /dev/null +++ b/lib_com/get_gain_fx.c @@ -0,0 +1,181 @@ +/****************************************************************************************************** + + (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include "prot.h" +#include "wmc_auto.h" +#include "prot_fx.h" + +/*----------------------------------------------------------------------------------* + * get_gain() + * + * + *----------------------------------------------------------------------------------*/ + +#ifndef IVAS_FLOAT_FIXED +/*! r: codebook gain (adaptive or fixed) */ +float get_gain_flt( + const float x[], /* i : target signal */ + const float y[], /* i : filtered codebook excitation */ + const int16_t n, /* i : segment length */ + float *en_y /* o : energy of y (sum of y[]^2, optional) */ +) +{ + float corr = 0.0f, ener = 1e-6f; + int16_t i; + + for ( i = 0; i < n; i++ ) + { + corr += x[i] * y[i]; + ener += y[i] * y[i]; + } + + if ( en_y ) + { + *en_y = ener; + } + + return ( corr / ener ); +} +#endif + +#ifdef IVAS_FLOAT_FIXED +Word32 get_gain( /* output: codebook gain (adaptive or fixed) Q16 */ + const Word16 x[], /* input : target signal Qx */ + const Word16 y[], /* input : filtered codebook excitation Qx */ + const Word16 n /* input : segment length */ +) +{ + Word32 tcorr, tener, Lgain; + Word16 exp_c, exp_e, exp, tmp; +#ifdef BASOP_NOGLOB_DECLARE_LOCAL + Flag Overflow = 0; + move32(); +#endif + + + tcorr = L_deposit_l( 0 ); + tener = L_deposit_l( 0 ); + + + /*----------------------------------------------------------------* + * Find gain based on inter-correlation product + *----------------------------------------------------------------*/ + + tcorr = Dot_product16HQ( 0, x, y, n, &exp_c ); + tener = Dot_productSq16HQ( 0, y, n, &exp_e ); + +#ifdef BASOP_NOGLOB + BASOP_Util_Divide_MantExp( round_fx_o( tcorr, &Overflow ), exp_c, s_max( round_fx_o( tener, &Overflow ), 1 ), exp_e, &tmp, &exp ); + Lgain = L_shl_o( L_deposit_l( tmp ) /*Q15*/, add( 1, exp ), &Overflow ) /*Q16*/; +#else + BASOP_Util_Divide_MantExp( round_fx( tcorr ), exp_c, s_max( round_fx( tener ), 1 ), exp_e, &tmp, &exp ); + Lgain = L_shl( L_deposit_l( tmp ) /*Q15*/, add( 1, exp ) ) /*Q16*/; +#endif + + return Lgain; +} + +Word32 get_gain2( /* output: codebook gain (adaptive or fixed) Q16 */ + const Word16 x[], /* input : target signal */ + const Word16 y[], /* input : filtered codebook excitation */ + const Word16 n /* input : segment length */ +) +{ + Word32 tcorr, tener, Lgain; + Word16 m_corr, m_ener, negative, Q_corr, Q_ener; +#ifdef BASOP_NOGLOB_DECLARE_LOCAL + Flag Overflow = 0; + move32(); +#endif + + negative = 0; + move16(); + + /*----------------------------------------------------------------* + * Find gain based on inter-correlation product + *----------------------------------------------------------------*/ + tcorr = Dot_product16HQ( 0, x, y, n, &Q_corr ); + tener = Dot_productSq16HQ( 0, y, n, &Q_ener ); + + tener = L_max( tener, 1 ); + + if ( tcorr <= 0 ) + { + negative = 1; + move16(); + } + BASOP_SATURATE_WARNING_OFF_EVS /*tcorr max be negative maxvall - not critical*/ + tcorr = L_abs( tcorr ); + BASOP_SATURATE_WARNING_ON_EVS + + m_corr = extract_h( tcorr ); + + m_ener = extract_h( tener ); + + IF( GT_16( m_corr, m_ener ) ) + { + m_corr = shr( m_corr, 1 ); + Q_corr = add( Q_corr, 1 ); + } + if ( m_ener == 0 ) + { + move16(); + m_corr = 0x7FFF; + } + IF( m_ener != 0 ) + { + m_corr = div_s( m_corr, m_ener ); + } + + Q_corr = sub( Q_corr, Q_ener ); + +#ifdef BASOP_NOGLOB + Lgain = L_shl_o( L_deposit_l( m_corr ), add( Q_corr, 1 ), &Overflow ); /* Lgain in Q16 */ +#else + Lgain = L_shl( L_deposit_l( m_corr ), add( Q_corr, 1 ) ); /* Lgain in Q16 */ +#endif + + if ( negative != 0 ) + { + Lgain = L_negate( Lgain ); /* Lgain in Q16 */ + } + + + return Lgain; +} +#endif diff --git a/lib_com/gs_bitallocation.c b/lib_com/gs_bitallocation.c index 5e121db56..b787a2018 100644 --- a/lib_com/gs_bitallocation.c +++ b/lib_com/gs_bitallocation.c @@ -44,6 +44,7 @@ #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ @@ -70,6 +71,7 @@ static void reajust_bits( float *bits_per_bands, const int16_t st_band, const in #define Q31_0_02 42949673 /* 0.02 */ #define Q31_0_17 365072220 /* 0.17 */ #define Q31_0_23 493921239 /* 0.23 */ + static Word16 Find_norm_inv( const Word32 ToDivide, Word16 *e_div ); static Word16 Find_bit_alloc_IVAS_int( const Word32 core_brate, const Word16 GSC_IVAS_mode, const Word16 Diff_len, const Word16 nb_tot_bands, const Word16 L_frame, Word16 *bit, Word16 *max_ener_band, float *ener_vec, float *bits_per_bands ); static Word16 maximum_fx( const Word16 *vec_fx, const Word16 lvec_fx, Word16 *max_fx ); @@ -670,7 +672,6 @@ void bands_and_bit_alloc( return; } - /*-------------------------------------------------------------------* * reajust_bits() * @@ -725,7 +726,6 @@ static void reajust_bits( return; } - /*-------------------------------------------------------------------* * Find_bit_frac() * @@ -1074,3 +1074,4 @@ static Word16 maximum_fx( /* o : index of the maximum val return ind; } +#endif diff --git a/lib_com/gs_bitallocation_ivas_fx.c b/lib_com/gs_bitallocation_ivas_fx.c index 38c4e19f9..aa74215b0 100644 --- a/lib_com/gs_bitallocation_ivas_fx.c +++ b/lib_com/gs_bitallocation_ivas_fx.c @@ -38,9 +38,9 @@ static void reajust_bits_fx( Word32 *bits_per_bands, const Word16 st_band, const /*-----------------------------------------------------------------* * Local functions *-----------------------------------------------------------------*/ -static Word16 Find_norm_inv( const Word32 ToDivide, Word16 *e_div ); -static Word16 Find_bit_alloc_IVAS( const Word32 core_brate, const Word16 GSC_IVAS_mode, const Word16 Diff_len, const Word16 nb_tot_bands, Word16 *bit, Word16 *max_ener_band, Word16 *ener_vec, Word32 *bits_per_bands ); -static Word32 Find_bit_frac( const Word16 nb_band, const Word16 remaining_bits ); +static Word16 Find_norm_inv_fx( const Word32 ToDivide, Word16 *e_div ); +static Word16 Find_bit_alloc_IVAS_fx( const Word32 core_brate, const Word16 GSC_IVAS_mode, const Word16 Diff_len, const Word16 nb_tot_bands, Word16 *bit, Word16 *max_ener_band, Word16 *ener_vec, Word32 *bits_per_bands ); +static Word32 Find_bit_frac_fx( const Word16 nb_band, const Word16 remaining_bits ); /*==================================================================================*/ /* FUNCTION : void bands_and_bit_alloc_ivas_fx(); */ /*----------------------------------------------------------------------------------*/ @@ -243,7 +243,7 @@ void bands_and_bit_alloc_ivas_fx( { IF( GSC_IVAS_mode > 0 ) { - nb_tot_bands = Find_bit_alloc_IVAS( core_brate, GSC_IVAS_mode, Diff_len, nb_tot_bands, bit, max_ener_band, ener_vec, bits_per_bands ); + nb_tot_bands = Find_bit_alloc_IVAS_fx( core_brate, GSC_IVAS_mode, Diff_len, nb_tot_bands, bit, max_ener_band, ener_vec, bits_per_bands ); nb_bands = nb_tot_bands; } ELSE @@ -292,7 +292,7 @@ void bands_and_bit_alloc_ivas_fx( set32_fx( bits_per_bands, 0, MBANDS_GN ); /*bit_fracf = (1.0f/nb_bands)*(SWB_bit_budget); */ - bit_fracf = Find_bit_frac( nb_bands, extract_l( SWB_bit_budget ) ); /*Q18*/ + bit_fracf = Find_bit_frac_fx( nb_bands, extract_l( SWB_bit_budget ) ); /*Q18*/ nb_tot_bands = sub( nb_bands_max, 6 ); nb_tot_bands = s_min( nb_tot_bands, 16 ); @@ -486,7 +486,7 @@ void bands_and_bit_alloc_ivas_fx( ELSE #endif { - bit_fracf = Find_bit_frac( st_band, bit_tmp ); /*Q18*/ + bit_fracf = Find_bit_frac_fx( st_band, bit_tmp ); /*Q18*/ } /*------------------------------------------------------------------------ * Complete the bit allocation per frequency band @@ -883,7 +883,7 @@ static void reajust_bits_fx( * Computes the fraction of the remaining bit budget to allocate to the bands *-------------------------------------------------------------------*/ -static Word32 Find_bit_frac( +static Word32 Find_bit_frac_fx( const Word16 nb_band, const Word16 remaining_bits ) { @@ -928,15 +928,15 @@ static Word32 Find_bit_frac( return ( L_out ); } -static Word16 Find_bit_alloc_IVAS( /*o: Number of band to encode */ - const Word32 core_brate, /* i : core bit rate */ - const Word16 GSC_IVAS_mode, /* i : GSC IVAS mode */ - const Word16 Diff_len, /* i : Length of the difference signal (before pure spectral)*/ - const Word16 nb_tot_bands_in, /* i : total number of band */ - Word16 *bit, /* i/o: Number of bit allowed for frequency quantization */ - Word16 *max_ener_band, /* i/o: Energy based sorted order */ - Word16 *ener_vec, /* i/o: Energy per band order */ - Word32 *bits_per_bands /* o : Number of bit allowed per allowed subband Q18 */ +static Word16 Find_bit_alloc_IVAS_fx( /*o: Number of band to encode */ + const Word32 core_brate, /* i : core bit rate */ + const Word16 GSC_IVAS_mode, /* i : GSC IVAS mode */ + const Word16 Diff_len, /* i : Length of the difference signal (before pure spectral)*/ + const Word16 nb_tot_bands_in, /* i : total number of band */ + Word16 *bit, /* i/o: Number of bit allowed for frequency quantization */ + Word16 *max_ener_band, /* i/o: Energy based sorted order */ + Word16 *ener_vec, /* i/o: Energy per band order */ + Word32 *bits_per_bands /* o : Number of bit allowed per allowed subband Q18 */ ) { Word32 mp, mb, nb_bands_adj, bit_adj; @@ -1042,7 +1042,7 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of /* compute the total possible number of band to be coded */ /* nb_tot_bands = (int16_t)((SWB_bit_budget - bit_fracf) / (mp + (mb - mp) / 2.0f)); */ - d_tmp = Find_norm_inv( L_add( mp, mb ), &e_div ); + d_tmp = Find_norm_inv_fx( L_add( mp, mb ), &e_div ); Ltmp = Mpy_32_16_1( L_sub( L_shl( SWB_bit_budget, Q18 ), bit_fracf ), d_tmp ); /* Perform mult by 1/den */ nb_tot_bands_loc = extract_h( L_shl( Ltmp, sub( 1, e_div ) ) ); /* adjust exponent: 1 is to take into account the / 2.0f, and e_div for the num and den of the division*/ mp = L_min( mp, mb ); @@ -1117,7 +1117,7 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of /* This is not bit exact because of the precision lost */ /* mb = ( SWB_bit_budget * 2 / ( nb_tot_bands_loc - st_band ) ) - mp; */ - d_tmp = Find_norm_inv( L_deposit_h( sub( nb_tot_bands_loc, st_band ) ), &e_div ); + d_tmp = Find_norm_inv_fx( L_deposit_h( sub( nb_tot_bands_loc, st_band ) ), &e_div ); mb = L_sub( L_shr( Mpy_32_16_1( L_shl( SWB_bit_budget, 1 ), d_tmp ), e_div ), mp ); /* Q18 */ /* bit_fracf = ( mb - mp ) / ( nb_tot_bands_loc - st_band ); */ @@ -1188,7 +1188,7 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of IF( sum_bit != 0 ) { /* sum_bit /= (nb_bands - j); */ - d_tmp = Find_norm_inv( L_deposit_h( sub( nb_tot_bands_loc, j ) ), &e_div ); + d_tmp = Find_norm_inv_fx( L_deposit_h( sub( nb_tot_bands_loc, j ) ), &e_div ); sum_bit = L_shr( Mpy_32_16_1( sum_bit, d_tmp ), e_div ); /* Q18 */ FOR( i = j; i < nb_tot_bands_loc; i++ ) { @@ -1199,7 +1199,7 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of return nb_tot_bands_loc; } -static Word16 Find_norm_inv( const Word32 ToDivide, Word16 *e_div ) /* Find normalized 1 / ToDivide */ +static Word16 Find_norm_inv_fx( const Word32 ToDivide, Word16 *e_div ) /* Find normalized 1 / ToDivide */ { Word16 d_tmp, e_tmp; e_tmp = norm_l( ToDivide ); diff --git a/lib_com/gs_gains.c b/lib_com/gs_gains.c index 31aca67b6..7f0be1c79 100644 --- a/lib_com/gs_gains.c +++ b/lib_com/gs_gains.c @@ -43,11 +43,13 @@ #include "prot_fx.h" #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ static int16_t VDQ_vec( float *Qvec_out, const float *mean_dic, const float *dic, const int16_t index, const int16_t vec_en ); +#endif /*-------------------------------------------------------------------* * Comp_and_apply_gain() @@ -55,6 +57,7 @@ static int16_t VDQ_vec( float *Qvec_out, const float *mean_dic, const float *dic * Compute and apply the quantized per band gain *-------------------------------------------------------------------*/ +#ifndef IVAS_FLOAT_FIXED void Comp_and_apply_gain( float exc_diffQ[], /* i/o: Quantized excitation */ float Ener_per_bd_iQ[], /* o : Target ener per band */ @@ -92,8 +95,9 @@ void Comp_and_apply_gain( return; } +#endif - +#ifndef IVAS_FLOAT_FIXED /*------------------------------------------------------------------* * Ener_per_band_comp() * @@ -181,8 +185,10 @@ void Ener_per_band_comp( return; } +#endif +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * GSC_gain_DQ() * @@ -263,6 +269,7 @@ static void GSC_gain_DQ( return; } +#endif static void GSC_gain_DQ_fx( const Word16 element_mode, /* i : element mode */ @@ -356,6 +363,7 @@ static void GSC_gain_DQ_fx( } +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * gsc_gainQ() * @@ -586,6 +594,7 @@ float gsc_gainQ( return mean_4g[0]; } +#endif Word16 gsc_gainQ_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -878,6 +887,7 @@ Word16 gsc_gainQ_ivas_fx( return mean_4g_fx[0]; } +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * gsc_gaindec() * @@ -1042,8 +1052,10 @@ float gsc_gaindec( return mean_4g; } +#endif +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * VDQ_vec() * @@ -1073,3 +1085,4 @@ static int16_t VDQ_vec( return index; } +#endif diff --git a/lib_com/gs_gains_fx.c b/lib_com/gs_gains_fx.c index 08c4d9f36..8e603e15c 100644 --- a/lib_com/gs_gains_fx.c +++ b/lib_com/gs_gains_fx.c @@ -576,7 +576,6 @@ static void GSC_gain_adj( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * GSC_gain_adj_ivas_fx() * @@ -655,7 +654,6 @@ static void GSC_gain_adj_ivas_fx( return; } -#endif /*==========================================================================*/ /* FUNCTION : Word16 gsc_gaindec_fx () */ @@ -814,7 +812,6 @@ Word16 gsc_gaindec_fx( /* o : average frequency gai return mean_4g_fx; } -#ifdef IVAS_FLOAT_FIXED /*==========================================================================*/ /* FUNCTION : Word16 gsc_gaindec_ivas_fx () */ /*--------------------------------------------------------------------------*/ @@ -998,7 +995,6 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc return mean_4g_fx; } -#endif /*-------------------------------------------------------------------* * gsc_gainQ() diff --git a/lib_com/gs_inact_switching.c b/lib_com/gs_inact_switching.c index 1cf11dce5..d441f6ead 100644 --- a/lib_com/gs_inact_switching.c +++ b/lib_com/gs_inact_switching.c @@ -41,105 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define ALPHA0 0.5f -#define BETA0 ( 1.0f - ALPHA0 ) - -/*-------------------------------------------------------------------* - * inact_switch_ematch() - * - * Apply energy matching when swithcing to INACTIVE frame coded by the GSC technology - *-------------------------------------------------------------------*/ - -void inact_switch_ematch( - float exc2[], /* i/o: CELP/GSC excitation buffer */ - float dct_exc_tmp[], /* i : GSC excitation in DCT domain */ - float lt_ener_per_band[], /* i/o: Long term energy per band */ - const int16_t coder_type, /* i : Coder type */ - const int16_t L_frame, /* i : Frame length */ - const int32_t total_brate, /* i : Total bitrate */ - const int16_t bfi, /* i : frame lost indicator */ - const int16_t last_core, /* i : Last core used */ - const int16_t last_codec_mode, /* i : Last codec mode */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag*/ - const int16_t element_mode /* i : element mode */ -) -{ - float Ener_per_bd[MBANDS_GN16k]; - float ftmp; - float *pt_exc; - int16_t j, i; - - - /*-------------------------------------------------------------------------- - * average energy per band - *--------------------------------------------------------------------------*/ - - if ( ( coder_type == AUDIO || ( coder_type == UNVOICED && tdm_low_rate_mode == 1 ) ) && bfi == 0 ) - { - Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); - - /* reset long-term energy per band */ - for ( i = 0; i < MBANDS_GN; i++ ) - { - lt_ener_per_band[i] = Ener_per_bd[i]; - } - } - else if ( coder_type == VOICED || coder_type == GENERIC || coder_type == TRANSITION || last_core != ACELP_CORE || last_codec_mode != MODE1 || ( element_mode > EVS_MONO && coder_type == UNVOICED ) ) - { - /* Find spectrum and energy per band for GC and VC frames */ - edct( exc2, dct_exc_tmp, L_frame, element_mode ); - - Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); - - /* reset long-term energy per band */ - for ( i = 0; i < MBANDS_GN; i++ ) - { - lt_ener_per_band[i] = Ener_per_bd[i]; - } - } - else if ( coder_type == INACTIVE && total_brate <= MAX_GSC_INACTIVE_BRATE ) - { - /* Find spectrum and energy per band for inactive frames */ - edct( exc2, dct_exc_tmp, L_frame, element_mode ); - - Ener_per_band_comp( dct_exc_tmp, Ener_per_bd, MBANDS_GN, 1, L_frame ); - - /* More agressive smoothing in the first 50 frames */ - pt_exc = dct_exc_tmp; - for ( i = 0; i < MBANDS_GN; i++ ) - { - /* Compute smoothing gain to apply with gain limitation */ - lt_ener_per_band[i] = ALPHA0 * lt_ener_per_band[i] + BETA0 * Ener_per_bd[i]; - - ftmp = lt_ener_per_band[i] - Ener_per_bd[i]; - ftmp = (float) pow( 10, ftmp ); - - if ( i < 2 ) - { - for ( j = 0; j < 8; j++ ) - { - *pt_exc *= ftmp; - pt_exc++; - } - } - else - { - for ( j = 0; j < 16; j++ ) - { - *pt_exc *= ftmp; - pt_exc++; - } - } - } - - /* Going back to time */ - edct( dct_exc_tmp, exc2, L_frame, element_mode ); - } - - return; -} diff --git a/lib_com/gs_inact_switching_fx.c b/lib_com/gs_inact_switching_fx.c index 7fc4ca16d..18bff8d43 100644 --- a/lib_com/gs_inact_switching_fx.c +++ b/lib_com/gs_inact_switching_fx.c @@ -12,7 +12,6 @@ * Local constants *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #define ALPHA0_FX 13107 /*Q15*/ #define BETA0_FX ( 32768 - ALPHA0_FX ) /*Q15*/ @@ -294,4 +293,3 @@ void Inac_switch_ematch_ivas_fx( return; } -#endif diff --git a/lib_com/gs_noisefill.c b/lib_com/gs_noisefill.c index 9578b16f0..c2074100a 100644 --- a/lib_com/gs_noisefill.c +++ b/lib_com/gs_noisefill.c @@ -42,6 +42,7 @@ #include "prot.h" #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * gs_noisf() * @@ -837,3 +838,4 @@ void highband_exc_dct_in( return; } +#endif diff --git a/lib_com/gs_noisefill_fx.c b/lib_com/gs_noisefill_fx.c index 36845a545..3761debf2 100644 --- a/lib_com/gs_noisefill_fx.c +++ b/lib_com/gs_noisefill_fx.c @@ -6,7 +6,6 @@ #include "rom_com.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * gs_noisf() * @@ -1627,4 +1626,3 @@ void highband_exc_dct_in_ivas_fx( return; } -#endif diff --git a/lib_com/gs_preech.c b/lib_com/gs_preech.c index f7964bed6..092558fb8 100644 --- a/lib_com/gs_preech.c +++ b/lib_com/gs_preech.c @@ -47,14 +47,20 @@ * Local constants *-------------------------------------------------------------------*/ -#define ATT_LENGHT16k 80 -#define INV_L_FRAME16k ( 1.0f / L_FRAME16k ) -#define ATT_LENGHT 64 -#define ATT_SEG_LEN ( L_FRAME / ATT_LENGHT ) +#define ATT_LENGHT16k 80 +#ifndef IVAS_FLOAT_FIXED +#define INV_L_FRAME16k ( 1.0f / L_FRAME16k ) +#endif + +#define ATT_LENGHT 64 +#define ATT_SEG_LEN ( L_FRAME / ATT_LENGHT ) + +#ifndef IVAS_FLOAT_FIXED #define INV_ATT_SEG_LEN ( 1.0f / ATT_SEG_LEN ) #define INV_L_FRAME ( 1.0f / L_FRAME ) +#endif - +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * pre_echo_att() * @@ -138,9 +144,8 @@ void pre_echo_att( return; } +#endif -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED void pre_echo_att_fx( Word32 *Last_frame_ener_fx, /* i/o: Energy of the last frame 2*Q_new+1*/ Word16 *exc_fx, /* i/o: Excitation of the current frame Q_new*/ @@ -264,7 +269,6 @@ void pre_echo_att_fx( return; } -#endif void pre_echo_att_ivas_fx( @@ -391,4 +395,3 @@ void pre_echo_att_ivas_fx( return; } -#endif diff --git a/lib_com/gs_preech_fx.c b/lib_com/gs_preech_fx.c new file mode 100644 index 000000000..9e3c73a1d --- /dev/null +++ b/lib_com/gs_preech_fx.c @@ -0,0 +1,401 @@ +/****************************************************************************************************** + + (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include "options.h" +#include +#include "cnst.h" +#include "rom_com.h" +#include "prot.h" +#include "wmc_auto.h" +#include "prot_fx.h" + +/*-------------------------------------------------------------------* + * Local constants + *-------------------------------------------------------------------*/ + +#define ATT_LENGHT16k 80 +#ifndef IVAS_FLOAT_FIXED +#define INV_L_FRAME16k ( 1.0f / L_FRAME16k ) +#endif + +#define ATT_LENGHT 64 +#define ATT_SEG_LEN ( L_FRAME / ATT_LENGHT ) + +#ifndef IVAS_FLOAT_FIXED +#define INV_ATT_SEG_LEN ( 1.0f / ATT_SEG_LEN ) +#define INV_L_FRAME ( 1.0f / L_FRAME ) +#endif + +#ifndef IVAS_FLOAT_FIXED +/*-------------------------------------------------------------------* + * pre_echo_att() + * + * Attenuation of the pre-echo when encoder specifies an attack + *-------------------------------------------------------------------*/ + +void pre_echo_att( + float *Last_frame_ener, /* i/o: Energy of the last frame */ + float *exc, /* i/o: Excitation of the current frame */ + const int16_t attack_flag, /* i : attack flag (GSC or TC) */ + const int16_t last_coder_type, /* i : Last coder type */ + const int16_t L_frame /* i : frame length */ +) +{ + float etmp; + float etmp1; + float finc[ATT_LENGHT16k], ratio_float, inv_l_frame; + int16_t att_len; + int16_t attack_pos, i; + + if ( attack_flag > 0 && last_coder_type == AUDIO ) + { + /*-------------------------------------------------------------------------* + * Find where the onset (attack) occurs by computing the energy per section + * The inverse weighting aims to favor the first maxima in case of + * gradual onset + *-------------------------------------------------------------------------*/ + + att_len = ATT_LENGHT; + if ( L_frame == L_FRAME16k ) + { + att_len = ATT_LENGHT16k; + } + for ( i = 0; i < att_len; i++ ) + { + finc[i] = sum2_f( exc + i * ATT_SEG_LEN, ATT_SEG_LEN ) * ( (float) ( att_len - i ) / ( att_len ) ); + } + etmp = -1; + attack_pos = maximum( finc, att_len, &etmp ); + + /* Scaled the maximum energy and allowed 6 dB increase*/ + etmp *= INV_ATT_SEG_LEN; + etmp1 = etmp; + *Last_frame_ener *= 4.0f; + + /* If the maximum normalized energy > last frame energy + 6dB */ + if ( etmp > *Last_frame_ener && attack_pos > 0 ) + { + /* Find the average energy before the attack */ + etmp = sum_f( finc, attack_pos ) + 0.01f; + etmp /= ( attack_pos * ATT_SEG_LEN ); + + /* Find the correction factor and apply it before the attack */ + ratio_float = (float) sqrt( *Last_frame_ener / etmp ); + + + /* Pre-echo atttenuation should never increase the energy */ + ratio_float = min( ratio_float, 1.0f ); + for ( i = 0; i < attack_pos * ATT_SEG_LEN; i++ ) + { + exc[i] *= ratio_float; + } + } + *Last_frame_ener = etmp1; + } + else + { + /*-------------------------------------------------------* + * In normal cases, just compute the energy of the frame + *-------------------------------------------------------*/ + + etmp = sum2_f( exc, L_frame ) + 0.01f; + inv_l_frame = INV_L_FRAME; + if ( L_frame == L_FRAME16k ) + { + inv_l_frame = INV_L_FRAME16k; + } + etmp *= inv_l_frame; + *Last_frame_ener = etmp; + } + + return; +} +#endif + +#ifdef IVAS_FLOAT_FIXED +#ifdef IVAS_FLOAT_FIXED +void pre_echo_att_fx( + Word32 *Last_frame_ener_fx, /* i/o: Energy of the last frame 2*Q_new+1*/ + Word16 *exc_fx, /* i/o: Excitation of the current frame Q_new*/ + const Word16 gsc_attack_flag_fx, /* i : flag signalling attack encoded by AC mode (GSC) Q0*/ + const Word16 Q_new, + const Word16 last_coder_type, /* i : Last coding mode Q0*/ + const Word16 L_frame /* i : Frame length Q0*/ +) +{ + Word32 etmp_fx; + Word32 finc_fx[ATT_LENGHT16k] = { 0 }; + move16(); + Word16 ratio_fx; + Word16 attack_pos_fx, i; + Word32 L_tmp, L_tmp1; + Word16 tmp, n1, n2, exp, frac1, frac2; + Word32 etmp1_fx; + Word16 att_len; + + test(); + IF( gsc_attack_flag_fx > 0 && EQ_16( last_coder_type, AUDIO ) ) /*gsc_attack_flag_fx does not get set for all the test cases */ + { + /*-------------------------------------------------------------------------* + * Find where the onset (attack) occurs by computing the energy per section + * The inverse weighting aims to favor the first maxima in case of + * gradual onset + *-------------------------------------------------------------------------*/ + att_len = ATT_LENGHT; /* Q0 */ + move16(); + if ( EQ_16( L_frame, L_FRAME16k ) ) + { + att_len = ATT_LENGHT16k; /* Q0 */ + move16(); + } + FOR( i = 0; i < att_len; i++ ) + { + L_tmp = sum2_fx( &exc_fx[i * 4], ATT_SEG_LEN ); /*2*Q_new+1, //ATT_SEG_LEN=(L_FRAME/ATT_LENGHT)=4(=shl(x,2))*/ + tmp = div_s( sub( att_len, i ), att_len ); /*Q15 */ + L_tmp = Mult_32_16( L_tmp, tmp ); /*2*Q_new+1 */ + finc_fx[i] = L_tmp; + move32(); /*2*Q_new+1 */ + } + + attack_pos_fx = maximum_32_fx( finc_fx, att_len, &etmp_fx ); + + /* Scaled the maximum energy and allowed 6 dB increase*/ + etmp_fx = L_shr( etmp_fx, add( 2 + 1 - 4, shl( Q_new, 1 ) ) ); /*2*Q_new+1 //INV_ATT_SEG_LEN=1/4(=shr(x,2)) -> Q4 */ + etmp1_fx = etmp_fx; + move32(); +#ifdef BASOP_NOGLOB + *Last_frame_ener_fx = L_shl_sat( *Last_frame_ener_fx, 2 ); +#else + *Last_frame_ener_fx = L_shl( *Last_frame_ener_fx, 2 ); +#endif + move32(); /*2*Q_new+1 */ + + /* If the maximum normalized energy > last frame energy + 6dB */ + test(); + IF( GT_32( etmp_fx, *Last_frame_ener_fx ) && attack_pos_fx > 0 ) + { + /* Find the average energy before the attack */ + L_tmp = sum32_fx( finc_fx, attack_pos_fx ); /*Q1 */ + L_tmp1 = L_shr( L_mult( attack_pos_fx, attack_pos_fx ), 1 ); /*Q0 */ + tmp = round_fx( Isqrt( L_tmp1 ) ); /*Q15 */ + L_tmp = L_shr( L_tmp, 2 ); /*Q1 ; ATT_SEG_LEN=4 */ + etmp_fx = Mult_32_16( L_tmp, tmp ); /*Q1 */ + + etmp_fx = L_shr( etmp_fx, add( 1 - 4, shl( Q_new, 1 ) ) ); /* makes etmp i nQ4 as *Last_frame_ener_fx */ + /* Find the correction factor and apply it before the attack */ + /* ratio = (float)sqrt(*Last_frame_ener/etmp);*/ + /* = isqrt(etmp/(*Last_frame_ener)) */ + etmp_fx = L_max( etmp_fx, 1 ); + *Last_frame_ener_fx = L_max( *Last_frame_ener_fx, 1 ); + move32(); + n1 = norm_l( etmp_fx ); + n2 = norm_l( *Last_frame_ener_fx ); + + n1 = sub( n1, 1 ); + exp = sub( n1, n2 ); + + frac1 = round_fx( L_shl( etmp_fx, n1 ) ); +#ifdef BASOP_NOGLOB + frac2 = round_fx_sat( L_shl_sat( *Last_frame_ener_fx, n2 ) ); +#else + frac2 = round_fx( L_shl( *Last_frame_ener_fx, n2 ) ); +#endif + L_tmp = L_mult0( 128, div_s( frac1, frac2 ) ); /* s = gain_out / gain_in */ + L_tmp = L_shr( L_tmp, exp ); /* add exponent */ + + L_tmp = Isqrt( L_tmp ); + ratio_fx = round_fx( L_shl( L_tmp, 9 ) ); /* Q13 */ + + /* Pre-echo atttenuation should never increase the energy */ + ratio_fx = s_min( ratio_fx, 8192 /* 1 in Q13 */ ); /* Q13 */ + FOR( i = 0; i < attack_pos_fx * ATT_SEG_LEN; i++ ) + { + /*exc_fx[i] *= ratio_fx;*/ + exc_fx[i] = round_fx( L_shl( L_mac( -8192, exc_fx[i], ratio_fx ), 2 ) ); + move16(); + } + } + *Last_frame_ener_fx = etmp1_fx; /*2*Q_new+1*/ + move32(); + } + ELSE + { + /*-------------------------------------------------------* + * In normal cases, just compute the energy of the frame + *-------------------------------------------------------*/ + + etmp_fx = sum2_fx( exc_fx, L_frame ); /*2*Q_new+1 */ +#ifdef ADD_LRTD + PMTE() + etmp_fx = L_shr( etmp_fx, add( 8 + 1 - 4, shl( Q_new, 1 ) ) ); /*2*Q_new+1 //INV_L_FRAME = 1/256 -> Q4*/ +#else + etmp_fx = L_shr( etmp_fx, add( 8 + 1 - 4, shl( Q_new, 1 ) ) ); /*2*Q_new+1 //INV_L_FRAME = 1/256 -> Q4*/ +#endif + *Last_frame_ener_fx = etmp_fx; + move32(); /*2*Q_new+1*/ + } + + return; +} +#endif + + +void pre_echo_att_ivas_fx( + Word32 *Last_frame_ener_fx, /* i/o: Energy of the last frame 2*Q_new+1*/ + Word16 *exc_fx, /* i/o: Excitation of the current frame Q_new*/ + const Word16 gsc_attack_flag_fx, /* i : flag signalling attack encoded by AC mode (GSC) Q0*/ + const Word16 Q_new, + const Word16 last_coder_type, /* i : Last coding mode Q0*/ + const Word16 L_frame /* i : Frame length Q0*/ +) +{ + Word32 etmp_fx; + Word32 finc_fx[ATT_LENGHT16k] = { 0 }; + move16(); + Word16 ratio_fx; + Word16 attack_pos_fx, i; + Word32 L_tmp, L_tmp1; + Word16 tmp, n1, n2, exp, frac1, frac2; + Word32 etmp1_fx; + Word16 att_len; + + test(); + IF( gsc_attack_flag_fx > 0 && EQ_16( last_coder_type, AUDIO ) ) /*gsc_attack_flag_fx does not get set for all the test cases */ + { + /*-------------------------------------------------------------------------* + * Find where the onset (attack) occurs by computing the energy per section + * The inverse weighting aims to favor the first maxima in case of + * gradual onset + *-------------------------------------------------------------------------*/ + att_len = ATT_LENGHT; /* Q0 */ + move16(); + if ( EQ_16( L_frame, L_FRAME16k ) ) + { + att_len = ATT_LENGHT16k; /* Q0 */ + move16(); + } + FOR( i = 0; i < att_len; i++ ) + { + L_tmp = sum2_fx( &exc_fx[i * 4], ATT_SEG_LEN ); /*2*Q_new+1, //ATT_SEG_LEN=(L_FRAME/ATT_LENGHT)=4(=shl(x,2))*/ + tmp = div_s( sub( att_len, i ), att_len ); /*Q15 */ + L_tmp = Mult_32_16( L_tmp, tmp ); /*2*Q_new+1 */ + finc_fx[i] = L_tmp; + move32(); /*2*Q_new+1 */ + } + + attack_pos_fx = maximum_32_fx( finc_fx, att_len, &etmp_fx ); + + /* Scaled the maximum energy and allowed 6 dB increase*/ + etmp_fx = L_shr( etmp_fx, add( 2 + 1 - 4, shl( Q_new, 1 ) ) ); /*2*Q_new+1 //INV_ATT_SEG_LEN=1/4(=shr(x,2)) -> Q4 */ + etmp1_fx = etmp_fx; + move32(); +#ifdef BASOP_NOGLOB + *Last_frame_ener_fx = L_shl_sat( *Last_frame_ener_fx, 2 ); +#else + *Last_frame_ener_fx = L_shl( *Last_frame_ener_fx, 2 ); +#endif + move32(); /*2*Q_new+1 */ + + /* If the maximum normalized energy > last frame energy + 6dB */ + test(); + IF( GT_32( etmp_fx, *Last_frame_ener_fx ) && attack_pos_fx > 0 ) + { + /* Find the average energy before the attack */ + L_tmp = sum32_fx( finc_fx, attack_pos_fx ); /*Q1 */ + L_tmp1 = L_shr( L_mult( attack_pos_fx, attack_pos_fx ), 1 ); /*Q0 */ + tmp = round_fx( Isqrt( L_tmp1 ) ); /*Q15 */ + L_tmp = L_shr( L_tmp, 2 ); /*Q1 ; ATT_SEG_LEN=4 */ + etmp_fx = Mult_32_16( L_tmp, tmp ); /*Q1 */ + + etmp_fx = L_shr( etmp_fx, add( 1 - 4, shl( Q_new, 1 ) ) ); /* makes etmp i nQ4 as *Last_frame_ener_fx */ + /* Find the correction factor and apply it before the attack */ + /* ratio = (float)sqrt(*Last_frame_ener/etmp);*/ + /* = isqrt(etmp/(*Last_frame_ener)) */ + etmp_fx = L_max( etmp_fx, 1 ); + *Last_frame_ener_fx = L_max( *Last_frame_ener_fx, 1 ); + move32(); + n1 = norm_l( etmp_fx ); + n2 = norm_l( *Last_frame_ener_fx ); + + n1 = sub( n1, 1 ); + exp = sub( n1, n2 ); + + frac1 = round_fx( L_shl( etmp_fx, n1 ) ); +#ifdef BASOP_NOGLOB + frac2 = round_fx_sat( L_shl_sat( *Last_frame_ener_fx, n2 ) ); +#else + frac2 = round_fx( L_shl( *Last_frame_ener_fx, n2 ) ); +#endif + L_tmp = L_mult0( 128, div_s( frac1, frac2 ) ); /* s = gain_out / gain_in */ + L_tmp = L_shr( L_tmp, exp ); /* add exponent */ + + L_tmp = Isqrt( L_tmp ); + ratio_fx = round_fx( L_shl( L_tmp, 9 ) ); + + /* Pre-echo atttenuation should never increase the energy */ + ratio_fx = s_min( ratio_fx, 8192 /* 1 in Q13 */ ); /* Q13 */ + FOR( i = 0; i < attack_pos_fx * ATT_SEG_LEN; i++ ) + { + /*exc_fx[i] *= ratio_fx;*/ + exc_fx[i] = round_fx( L_shl( L_mac( -8192, exc_fx[i], ratio_fx ), 2 ) ); + move16(); + } + } + *Last_frame_ener_fx = etmp1_fx; /* 2 * Q_new + 1 */ + move32(); + } + ELSE + { + /*-------------------------------------------------------* + * In normal cases, just compute the energy of the frame + *-------------------------------------------------------*/ + Word16 exp_etmp = sub( 15, Q_new ); + etmp_fx = sum2_16_exp_fx( exc_fx, L_frame, &exp_etmp, 7 ); /* Q = 31-exp_etmp */ + + etmp_fx = L_shr( etmp_fx, 8 ); /*31-exp_etmp//INV_L_FRAME = 1/256*/ + + IF( EQ_16( L_frame, L_FRAME16k ) ) + { + etmp_fx = Mpy_32_16_1( etmp_fx, 26214 /* 0.8 in Q15 */ ); /*31 - exp_etmp*/ + } + *Last_frame_ener_fx = L_shl( etmp_fx, sub( shl( Q_new, 1 ), sub( 30 /*31-1*/, exp_etmp ) ) ); /*2*Q_new+1*/ + move32(); /*2*Q_new+1*/ + } + + return; +} +#endif diff --git a/lib_com/guided_plc_util.c b/lib_com/guided_plc_util.c index c3976bdb8..fc894ba6c 100644 --- a/lib_com/guided_plc_util.c +++ b/lib_com/guided_plc_util.c @@ -39,286 +39,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void reorder_lsfs_flt( float *lsf, float min_dist, const int16_t n, const int32_t sr_core ); - - -/*-------------------------------------------------------------------* - * getLookAheadResSig_flt() - * - * - *-------------------------------------------------------------------*/ - -void getLookAheadResSig_flt( - float *speechLookAhead, - const float *A, - float *res, - const int16_t L_frame, - const int16_t L_subfr, - const int16_t m, - const int16_t numSubFrame ) -{ - const float *p_A; - int16_t i_subfr; - int16_t subfr_len[2]; - - subfr_len[0] = L_subfr; - subfr_len[1] = L_frame < L_FRAME16k ? (int16_t) ( 0.75 * L_subfr ) : L_subfr; - - p_A = A; - for ( i_subfr = 0; i_subfr < numSubFrame * L_subfr; i_subfr += L_subfr ) - { - residu( p_A, m, &speechLookAhead[i_subfr], &res[i_subfr], subfr_len[i_subfr / L_subfr] ); - p_A += ( m + 1 ); - } - - return; -} - -/*-------------------------------------------------------------------* - * updatelsfForConcealment_flt() - * - * - *-------------------------------------------------------------------*/ - -void updatelsfForConcealment_flt( - PLC_ENC_EVS_HANDLE decState, - float *lsf ) -{ - int16_t i; - - for ( i = 0; i < M; i++ ) - { - decState->lsf_adaptive_mean[i] = ( decState->lsfoldbfi1[i] + decState->lsfoldbfi0[i] + lsf[i] ) / 3; - decState->lsfoldbfi1[i] = decState->lsfoldbfi0[i]; - decState->lsfoldbfi0[i] = lsf[i]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * getConcealedLP_flt() - * - * - *-------------------------------------------------------------------*/ - -void getConcealedLP_flt( - PLC_ENC_EVS_HANDLE memDecState, - float *AqCon, - const float lsfBase[], - const int32_t sr_core, - const int16_t last_good, - const int16_t L_frame ) -{ - float *lsf = memDecState->lsf_con_flt; - float lsp[( NB_DIV + 1 ) * M]; - int16_t k; - - dlpc_bfi_flt( L_frame, &lsf[0], memDecState->lsfold, last_good, 1 /* assumes packet loss */, memDecState->mem_MA, memDecState->mem_AR_flt, &( memDecState->stab_fac ), memDecState->lsf_adaptive_mean, 1, NULL, 0, NULL, NULL, lsfBase ); - - mvr2r( memDecState->lspold, lsp, M ); - - for ( k = 0; k < 1; k++ ) - { - lsf2lsp( &lsf[k * M], &lsp[( k + 1 ) * M], M, sr_core ); - } - - int_lsp( L_FRAME, &lsp[0], &lsp[M], AqCon, M, interpol_frac_12k8, 0 ); - - return; -} - -/*-------------------------------------------------------------------* - * RecLpcSpecPowDiffuseLc_flt() - * - * - *-------------------------------------------------------------------*/ - -void RecLpcSpecPowDiffuseLc_flt( - float *lspq, - float *lsp_old, - float *lsfq, - Decoder_State *st, - const int16_t reset_q ) -{ - const float *means; - float lsf_old[M]; - int16_t i; - - means = PlcGetlsfBase_flt( st->lpcQuantization, st->narrowBand, st->sr_core ); - - mvr2r( st->lsf_old, lsf_old, M ); - - modify_lsf_flt( lsf_old, M, st->sr_core, reset_q ); - - lsf2lsp( lsf_old, lsp_old, M, st->sr_core ); - - if ( reset_q ) - { - for ( i = 0; i < M; i++ ) - { - lsfq[i] = st->mem_MA[i] + means[i]; - } - - v_sort_float( lsfq, 0, M - 1 ); - - reorder_lsfs_flt( lsfq, LSF_GAP, M, st->sr_core ); - - lsf2lsp( lsfq, lspq, M, st->sr_core ); - } - else - { - modify_lsf_flt( lsfq, M, st->sr_core, reset_q ); - - lsf2lsp( lsfq, lspq, M, st->sr_core ); - } - - - return; -} - -/*-------------------------------------------------------------------* - * modify_lsf_flt() - * - * - *-------------------------------------------------------------------*/ - -void modify_lsf_flt( - float *lsf, - const int16_t n, - const int32_t sr_core, - const int16_t reset_q ) -{ - int16_t i, k; - float gap; - float th; - - th = 1900; - - if ( reset_q == 0 ) - { - th = 800; - } - - if ( sr_core == INT_FS_16k ) - { - th *= 1.25; - } - - - i = 1; - - while ( lsf[i] < th && i < n ) - { - i++; - } - gap = lsf[i - 1] / i; - - for ( k = 0; k < i - 1; k++ ) - { - lsf[k] = gap * ( k + 1 ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * reorder_lsfs_flt() - * - * - *-------------------------------------------------------------------*/ - -static void reorder_lsfs_flt( - float *lsf, /* i/o: vector of lsfs in the frequency domain (0..0.5)*/ - float min_dist, /* i : minimum required distance */ - const int16_t n, /* i : LPC order */ - const int32_t sr_core ) -{ - int16_t i; - float lsf_min; - float lsf_max; - float fac; - float th1, th2; - - th1 = 1000.0f; - th2 = 1900.0f; - - if ( sr_core == INT_FS_16k ) - { - min_dist *= 1.25; - th1 *= 1.25; - th2 *= 1.25; - } - - /*-----------------------------------------------------------------* - * Verify the LSF ordering and minimum GAP - *-----------------------------------------------------------------*/ - fac = 3.0; - - lsf_min = min_dist * fac; - for ( i = 0; i < n; i++ ) - { - - if ( lsf[i] > th1 ) - { - fac = 2.0; - } - else - { - if ( lsf[i] > 1900.0 ) - { - fac = 1.0; - } - } - - if ( lsf[i] < lsf_min ) - { - lsf[i] = lsf_min; - } - - lsf_min = lsf[i] + min_dist * fac; - } - - /*------------------------------------------------------------------------------------------* - * Reverify the LSF ordering and minimum GAP in the reverse order (security) - *------------------------------------------------------------------------------------------*/ - - lsf_max = (float) ( sr_core ) / 2.0f - min_dist * fac; - - if ( lsf[n - 1] > lsf_max ) /* If danger of unstable filter in case of resonance in HF */ - { - for ( i = n - 1; i >= 0; i-- ) /* Reverify the minimum LSF gap in the reverse sens */ - { - - if ( lsf[i] <= th2 ) - { - fac = 2.0; - } - else - { - if ( lsf[i] <= th1 ) - { - fac = 3.0; - } - } - - if ( lsf[i] > lsf_max ) - { - lsf[i] = lsf_max; - } - - lsf_max = lsf[i] - min_dist * fac; - } - } - - return; -} -#endif diff --git a/lib_com/guided_plc_util_fx.c b/lib_com/guided_plc_util_fx.c index f556fff05..91075df44 100644 --- a/lib_com/guided_plc_util_fx.c +++ b/lib_com/guided_plc_util_fx.c @@ -9,7 +9,6 @@ #include "basop_util.h" #include "rom_basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ @@ -366,4 +365,3 @@ static void reorder_lsfs( return; } -#endif diff --git a/lib_com/hp50.c b/lib_com/hp50.c index 0f7931604..02c11ce6c 100644 --- a/lib_com/hp50.c +++ b/lib_com/hp50.c @@ -51,6 +51,7 @@ * void */ +#ifndef IVAS_FLOAT_FIXED void hp20_flt( Float32 signal[], const Word16 lg, @@ -129,10 +130,10 @@ void hp20_flt( return; } +#endif #define HP20_COEFF_SCALE ( 2 ) -#ifdef IVAS_FLOAT_FIXED /* * hp20 * @@ -437,7 +438,7 @@ void hp20( Word16 signal[], /* i/o: signal to filter any * #ifdef HP20_FIX32_RECODING -void hp20_fix32( +void hp20_fx_32( Word32 signal_fx[], const Word16 lg, Word32 mem_fx[], @@ -611,7 +612,7 @@ void hp20_fix32( return; } #else -void hp20_fix32( +void hp20_fx_32( Word32 signal_fx[], const Word16 lg, Word32 mem_fx[], @@ -795,4 +796,3 @@ void hp20_fix32( return; } #endif -#endif diff --git a/lib_com/hp50_fx.c b/lib_com/hp50_fx.c new file mode 100644 index 000000000..92dad39ff --- /dev/null +++ b/lib_com/hp50_fx.c @@ -0,0 +1,800 @@ +/****************************************************************************************************** + + (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#include +#include +#include "options.h" +#include "prot.h" +#include "wmc_auto.h" +#include "prot_fx.h" + +/* + * hp20 + * + * Function: + * 2nd order high pass filter with nominal cut off frequency at 20 Hz. + * + * Returns: + * void + */ + +#ifndef IVAS_FLOAT_FIXED +void hp20_flt( + Float32 signal[], + const Word16 lg, + Float32 mem[], + const Word32 Fs ) +{ + Word16 i; + Float32 x0, x1, x2, y0, y1, y2; + Float32 a1, a2, b1, b2; + + y1 = mem[0]; + y2 = mem[1]; + x0 = mem[2]; + x1 = mem[3]; + + if ( Fs == 8000 ) + { + /* hp filter 20Hz at 3dB for 8000KHz input sampling rate + [b,a] = butter(2, 20.0/4000.0, 'high'); + b = [0.988954248067140 -1.977908496134280 0.988954248067140] + a =[1.000000000000000 -1.977786483776764 0.978030508491796]*/ + a1 = 1.977786483776764f; + a2 = -0.978030508491796f; + b1 = -1.977908496134280f; + b2 = 0.988954248067140f; + } + else if ( Fs == 16000 ) + { + /* hp filter 20Hz at 3dB for 16000KHz sampling rate + [b,a] = butter(2, 20.0/8000.0, 'high'); + b =[ 0.994461788958195 -1.988923577916390 0.994461788958195] + a =[1.000000000000000 -1.988892905899653 0.988954249933127] */ + a1 = 1.988892905899653f; + a2 = -0.988954249933127f; + b1 = -1.988923577916390f; + b2 = 0.994461788958195f; + } + else if ( Fs == 32000 ) + { + /* hp filter 20Hz at 3dB for 32000KHz sampling rate + [b,a] = butter(2, 20.0/16000.0, 'high'); + b =[0.997227049904470 -1.994454099808940 0.997227049904470] + a =[1.000000000000000 -1.994446410541927 0.994461789075954]*/ + a1 = 1.994446410541927f; + a2 = -0.994461789075954f; + b1 = -1.994454099808940f; + b2 = 0.997227049904470f; + } + else + { + /* hp filter 20Hz at 3dB for 48000KHz sampling rate + [b,a] = butter(2, 20.0/24000.0, 'high'); + b =[ 0.998150511190452 -1.996301022380904 0.998150511190452] + a =[1.000000000000000 -1.996297601769122 0.996304442992686]*/ + a1 = 1.996297601769122f; + a2 = -0.996304442992686f; + b1 = -1.996301022380904f; + b2 = 0.998150511190452f; + } + + for ( i = 0; i < lg; i++ ) + { + x2 = x1; + x1 = x0; + x0 = signal[i]; + y0 = ( y1 * a1 ) + ( y2 * a2 ) + ( x0 * b2 ) + ( x1 * b1 ) + ( x2 * b2 ); + signal[i] = y0; + y2 = y1; + y1 = y0; + } + + mem[0] = ( ( y1 > 1e-10 ) | ( y1 < -1e-10 ) ) ? y1 : 0; + mem[1] = ( ( y2 > 1e-10 ) | ( y2 < -1e-10 ) ) ? y2 : 0; + mem[2] = ( ( x0 > 1e-10 ) | ( x0 < -1e-10 ) ) ? x0 : 0; + mem[3] = ( ( x1 > 1e-10 ) | ( x1 < -1e-10 ) ) ? x1 : 0; + + return; +} +#endif + + +#define HP20_COEFF_SCALE ( 2 ) +#ifdef IVAS_FLOAT_FIXED +/* + * hp20 + * + * Function: + * 2nd order high pass filter with nominal cut off frequency at 20 Hz. + * + * Returns: + * void + */ + +static Word32 HP50_Mode2_Mpy_32_16_fix( Word32 a, Word16 b ) +{ + Word32 result = Mpy_32_16_1( a, b ); + /* perform rounding towards lower value for negative results */ + if ( result < 0 ) + result = L_add( result, 1 ); + return result; +} + +static Word32 HP50_Mpy_32_32_fix( Word32 a, Word32 b ) +{ + Word32 result = Mpy_32_32( a, b ); + /* perform rounding towards lower value for negative results */ + if ( result < 0 ) + result = L_add( result, 1 ); + return result; +} + + +static void filter_2nd_order( + Word16 signal[], + const Word16 stride, + const Word16 prescale, + const Word16 lg, + Word32 mem[4], + Word32 a1, + Word32 a2, + Word32 b1, + Word32 b2 ) +{ + + Word16 i; + Word16 x2, x1; + Word32 L_sum, L_y1, L_y2; +#ifdef BASOP_NOGLOB_DECLARE_LOCAL + Flag Overflow = 0; +#endif + + + /* + * Saturation: The states of the filter, namely L_y1 and L_y2 shall + * never saturate, because that causes error in the filter feedback. + * The final output written into signal[] might saturate because of + * unavoidable filter overshoot. + */ + + /* Execute first 2 iterations with 32-bit x anx y memory values */ + BASOP_SATURATE_ERROR_ON_EVS + L_sum = HP50_Mpy_32_32_fix( b2, mem[2] ); /* b2*x2 */ + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( b1, mem[3] ) ); /* b1*x1 */ + x2 = shr( signal[0], prescale ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b2, x2 ) ); /* b2*x0 */ + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( mem[0], a2 ) ); /* y2*a2 */ + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( mem[1], a1 ) ); /* y1*a1 */ + +#ifdef BASOP_NOGLOB + L_y2 = L_shl_o( L_sum, HP20_COEFF_SCALE, &Overflow ); +#else + L_y2 = L_shl( L_sum, HP20_COEFF_SCALE ); +#endif + BASOP_SATURATE_ERROR_OFF_EVS + BASOP_SATURATE_WARNING_OFF_EVS +#ifdef BASOP_NOGLOB + signal[0] = round_fx_o( L_shl_o( L_y2, prescale, &Overflow ), &Overflow ); +#else /* BASOP_NOGLOB */ + signal[0] = round_fx( L_shl( L_y2, prescale ) ); +#endif /* BASOP_NOGLOB */ + BASOP_SATURATE_WARNING_ON_EVS + + BASOP_SATURATE_ERROR_ON_EVS + L_sum = HP50_Mpy_32_32_fix( b2, mem[3] ); /* b2*x2 */ + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b1, x2 ) ); /* b1*x1 */ + x1 = shr( signal[stride], prescale ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b2, x1 ) ); /* b2*x0 */ + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( mem[1], a2 ) ); /* y2*a2 */ + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( L_y2, a1 ) ); /* y1*a1 */ + +#ifdef BASOP_NOGLOB + L_y1 = L_shl_o( L_sum, HP20_COEFF_SCALE, &Overflow ); +#else + L_y1 = L_shl( L_sum, HP20_COEFF_SCALE ); +#endif + BASOP_SATURATE_ERROR_OFF_EVS + BASOP_SATURATE_WARNING_OFF_EVS +#ifdef BASOP_NOGLOB + signal[stride] = round_fx_o( L_shl_o( L_y1, prescale, &Overflow ), &Overflow ); +#else /* BASOP_NOGLOB */ + signal[stride] = round_fx( L_shl( L_y1, prescale ) ); +#endif /* BASOP_NOGLOB */ + BASOP_SATURATE_WARNING_ON_EVS + move16(); + + /* New we use a trick and toggle x1/x2 and L_y1/L_y2 to save a few cycles unrolling the loop by 2 */ + FOR( i = 2; i < lg; i += 2 ) + { + /* y[i+0] = b2*x[i-2] + b1*x[i-1] + b2*x[i-0] + a2*y[i-2] + a1*y[i-1]; */ + BASOP_SATURATE_ERROR_ON_EVS + L_sum = HP50_Mode2_Mpy_32_16_fix( b2, x2 ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b1, x1 ) ); + x2 = shr( signal[i * stride], prescale ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b2, x2 ) ); + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( L_y2, a2 ) ); + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( L_y1, a1 ) ); + +#ifdef BASOP_NOGLOB + L_y2 = L_shl_o( L_sum, HP20_COEFF_SCALE, &Overflow ); +#else + L_y2 = L_shl( L_sum, HP20_COEFF_SCALE ); +#endif + BASOP_SATURATE_ERROR_OFF_EVS + BASOP_SATURATE_WARNING_OFF_EVS +#ifdef BASOP_NOGLOB + signal[i_mult( i, stride )] = round_fx_o( L_shl_o( L_y2, prescale, &Overflow ), &Overflow ); +#else /* BASOP_NOGLOB */ + signal[i_mult( i, stride )] = round_fx( L_shl( L_y2, prescale ) ); + move16(); +#endif /* BASOP_NOGLOB */ + BASOP_SATURATE_WARNING_ON_EVS + /* y[i+1] = b2*x[i-1] + b1*x[i-0] + b2*x[i+1] + a2*y[i-1] + a1*y[i+0]; */ + BASOP_SATURATE_ERROR_ON_EVS + L_sum = HP50_Mode2_Mpy_32_16_fix( b2, x1 ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b1, x2 ) ); + x1 = shr( signal[( i + 1 ) * stride], prescale ); + L_sum = L_add( L_sum, HP50_Mode2_Mpy_32_16_fix( b2, x1 ) ); + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( L_y1, a2 ) ); + L_sum = L_add( L_sum, HP50_Mpy_32_32_fix( L_y2, a1 ) ); + +#ifdef BASOP_NOGLOB + L_y1 = L_shl_o( L_sum, HP20_COEFF_SCALE, &Overflow ); +#else + L_y1 = L_shl( L_sum, HP20_COEFF_SCALE ); +#endif + BASOP_SATURATE_ERROR_OFF_EVS + BASOP_SATURATE_WARNING_OFF_EVS +#ifdef BASOP_NOGLOB + signal[i_mult( add( i, 1 ), stride )] = round_fx_o( L_shl_o( L_y1, prescale, &Overflow ), &Overflow ); +#else /* BASOP_NOGLOB */ + signal[i_mult( add( i, 1 ), stride )] = round_fx( L_shl( L_y1, prescale ) ); +#endif + BASOP_SATURATE_WARNING_ON_EVS + move16(); + } + /* update static filter memory from variables */ + mem[0] = L_y2; + move32(); + mem[1] = L_y1; + move32(); + mem[2] = L_deposit_h( x2 ); + move32(); + mem[3] = L_deposit_h( x1 ); + move32(); + + + return; +} + + +void hp20( Word16 signal[], /* i/o: signal to filter any */ + const Word16 stride, /* i : stride to be applied accessing signal */ + const Word16 lg, /* i : length of signal (integer) Q0 */ + Word32 mem[5], /* i/o: static filter memory with this layout: */ + /* mem[0]: y[-2] (32-bit) */ + /* mem[1]; y[-1] (32-bit) */ + /* mem[2]: x[-2] << 16 */ + /* mem[3]: x[-1] << 16 */ + /* Note: mem[0..3] need to be scaled per frame */ + /* mem[4]: states scale */ + const Word32 sFreq ) /* i : input sampling rate Q0 */ +{ + Word32 a1, b1, a2, b2; + Word16 prescale, prescaleOld, diff; +#ifdef BASOP_NOGLOB_DECLARE_LOCAL + Flag Overflow = 0; +#endif + + + prescale = getScaleFactor16( signal, lg ); + prescaleOld = extract_l( mem[4] ); +#ifdef BASOP_NOGLOB + diff = norm_l( L_shl_sat( mem[2], prescaleOld ) ); +#else + diff = norm_l( L_shl( mem[2], prescaleOld ) ); +#endif + if ( mem[2] != 0 ) + { + prescale = s_min( prescale, diff ); + } +#ifdef BASOP_NOGLOB + diff = norm_l( L_shl_o( mem[3], prescaleOld, &Overflow ) ); +#else + diff = norm_l( L_shl( mem[3], prescaleOld ) ); +#endif + if ( mem[3] != 0 ) + { + prescale = s_min( prescale, diff ); + } + /* Take into account the left shift performed into the loop + 1 bit headroom*/ + prescale = s_max( -12, sub( 1 + HP20_COEFF_SCALE, prescale ) ); + IF( prescale != prescaleOld ) + { + diff = sub( prescale, prescaleOld ); +#ifdef BASOP_NOGLOB + mem[0] = L_shr_o( mem[0], diff, &Overflow ); + move32(); + mem[1] = L_shr_o( mem[1], diff, &Overflow ); + move32(); + mem[2] = L_shr_o( mem[2], diff, &Overflow ); + move32(); + mem[3] = L_shr_o( mem[3], diff, &Overflow ); + move32(); +#else + mem[0] = L_shr( mem[0], diff ); + move32(); + mem[1] = L_shr( mem[1], diff ); + move32(); + mem[2] = L_shr( mem[2], diff ); + move32(); + mem[3] = L_shr( mem[3], diff ); + move32(); +#endif + mem[4] = L_deposit_l( prescale ); + } + + IF( EQ_32( sFreq, 8000 ) ) + { + /* hp filter 20Hz at 3dB for 8000 Hz input sampling rate + [b,a] = butter(2, 20.0/4000.0, 'high'); + b = [0.988954248067140 -1.977908496134280 0.988954248067140] + a = [1.000000000000000 -1.977786483776764 0.978030508491796]*/ + a1 = 1061816033l /* 1.977786483776764 Q29*/; + move32(); + a2 = -525076131l /*-0.978030508491796 Q29*/; + move32(); + b1 = -1061881538l /*-1.977908496134280 Q29*/; + move32(); + b2 = 530940769l /* 0.988954248067140 Q29*/; + move32(); + } + ELSE IF( EQ_32( sFreq, 16000 ) ) + { + /* hp filter 20Hz at 3dB for 16000KHz sampling rate + [b,a] = butter(2, 20.0/8000.0, 'high'); + b = [0.994461788958195 -1.988923577916390 0.994461788958195] + a = [1.000000000000000 -1.988892905899653 0.988954249933127] */ + a1 = 1067778748l /* 1.988892905899653 Q29*/; + move32(); + a2 = -530940770l /*-0.988954249933127 Q29*/; + move32(); + b1 = -1067795215l /*-1.988923577916390 Q29*/; + move32(); + b2 = 533897608l /* 0.994461788958195 Q29*/; + move32(); + } + ELSE IF( EQ_32( sFreq, 32000 ) ) + { + /* hp filter 20Hz at 3dB for 32000KHz sampling rate + [b,a] = butter(2, 20.0/16000.0, 'high'); + b = [0.997227049904470 -1.994454099808940 0.997227049904470] + a = [1.000000000000000 -1.994446410541927 0.994461789075954]*/ + a1 = 1070760263l /* 1.994446410541927 Q29*/; + move32(); + a2 = -533897608l /*-0.994461789075954 Q29*/; + move32(); + b1 = -1070764392l /*-1.994454099808940 Q29*/; + move32(); + b2 = 535382196l /* 0.997227049904470 Q29*/; + move32(); + } + ELSE + { + assert( sFreq == 48000 ); + /* hp filter 20Hz at 3dB for 48000KHz sampling rate + [b,a] = butter(2, 20.0/24000.0, 'high'); + b =[0.998150511190452 -1.996301022380904 0.998150511190452] + a =[1.000000000000000 -1.996297601769122 0.996304442992686]*/ + a1 = 1071754114l /* 1.996297601769122 Q29*/; + move32(); + a2 = -534886875l /*-0.996304442992686 Q29*/; + move32(); + b1 = -1071755951l /*-1.996301022380904 Q29*/; + move32(); + b2 = 535877975l /* 0.998150511190452 Q29*/; + move32(); + } + + + filter_2nd_order( signal, stride, prescale, lg, + mem, a1, a2, b1, b2 ); + + return; +} + + +#ifdef HP20_FIX32_RECODING +void hp20_fx_32( + Word32 signal_fx[], + const Word16 lg, + Word32 mem_fx[], + const Word32 Fs ) +{ + Word32 i; + Word32 a1_fx, a2_fx, b1_fx, b2_fx; + Word32 diff_pos, diff_neg; +#ifdef BASOP_NOGLOB + Flag Overflow = 0; +#endif + Word16 prescale, prescaleOld, prescale_current_frame, diff; + + prescale = getScaleFactor32( signal_fx, lg ); + prescale_current_frame = s_min( 3, sub( 1 + HP20_COEFF_SCALE, prescale ) ); + + + prescaleOld = extract_l( mem_fx[4] ); + +#ifdef BASOP_NOGLOB + diff_pos = norm_l( L_shl_o( L_max( mem_fx[2], mem_fx[3] ), prescaleOld, &Overflow ) ); + diff_neg = norm_l( L_shl_o( L_min( mem_fx[2], mem_fx[3] ), prescaleOld, &Overflow ) ); +#else + diff_pos = norm_l( L_shl( L_max( mem_fx[2], mem_fx[3] ), prescaleOld ) ); + diff_neg = norm_l( L_shl( L_min( mem_fx[2], mem_fx[3] ), prescaleOld ) ); +#endif + + diff = L_max( diff_pos, diff_neg ); + + IF( NE_16( diff, 0 ) ) + { + prescale = s_min( prescale, diff ); + } + + prescale = s_min( 3, sub( 1 + HP20_COEFF_SCALE, prescale ) ); + + diff = sub( prescale, prescaleOld ); +#ifdef BASOP_NOGLOB + mem_fx[0] = L_shr_o( mem_fx[0], diff, &Overflow ); + move32(); + mem_fx[1] = L_shr_o( mem_fx[1], diff, &Overflow ); + move32(); + mem_fx[2] = L_shr_o( mem_fx[2], diff, &Overflow ); + move32(); + mem_fx[3] = L_shr_o( mem_fx[3], diff, &Overflow ); + move32(); +#else + mem_fx[0] = L_shr( mem_fx[0], diff ); + move32(); + mem_fx[1] = L_shr( mem_fx[1], diff ); + move32(); + mem_fx[2] = L_shr( mem_fx[2], diff ); + move32(); + mem_fx[3] = L_shr( mem_fx[3], diff ); + move32(); +#endif + mem_fx[4] = L_deposit_l( prescale_current_frame ); + move32(); + + IF( EQ_32( Fs, 8000 ) ) + { + /* hp filter 20Hz at 3dB for 8000KHz input sampling rate + [b,a] = butter(2, 20.0/4000.0, 'high'); + b = [0.988954248067140 -1.977908496134280 0.988954248067140] + a =[1.000000000000000 -1.977786483776764 0.978030508491796]*/ + a1_fx = 1061816033l /* 1.977786483776764 Q29*/; + a2_fx = -525076131l /*-0.978030508491796 Q29*/; + b1_fx = -1061881538l /*-1.977908496134280 Q29*/; + b2_fx = 530940769l /* 0.988954248067140 Q29*/; + } + ELSE IF( EQ_32( Fs, 16000 ) ) + { + /* hp filter 20Hz at 3dB for 16000KHz sampling rate + [b,a] = butter(2, 20.0/8000.0, 'high'); + b =[ 0.994461788958195 -1.988923577916390 0.994461788958195] + a =[1.000000000000000 -1.988892905899653 0.988954249933127] */ + a1_fx = 1067778748l /* 1.988892905899653 Q29*/; + a2_fx = -530940770l /*-0.988954249933127 Q29*/; + b1_fx = -1067795215l /*-1.988923577916390 Q29*/; + b2_fx = 533897608l /* 0.994461788958195 Q29*/; + } + ELSE IF( EQ_32( Fs, 32000 ) ) + { + /* hp filter 20Hz at 3dB for 32000KHz sampling rate + [b,a] = butter(2, 20.0/16000.0, 'high'); + b =[0.997227049904470 -1.994454099808940 0.997227049904470] + a =[1.000000000000000 -1.994446410541927 0.994461789075954]*/ + a1_fx = 1070760263l /* 1.994446410541927 Q29*/; + a2_fx = -533897608l /*-0.994461789075954 Q29*/; + b1_fx = -1070764392l /*-1.994454099808940 Q29*/; + b2_fx = 535382196l /* 0.997227049904470 Q29*/; + } + ELSE + { + /* hp filter 20Hz at 3dB for 48000KHz sampling rate + [b,a] = butter(2, 20.0/24000.0, 'high'); + b =[ 0.998150511190452 -1.996301022380904 0.998150511190452] + a =[1.000000000000000 -1.996297601769122 0.996304442992686]*/ + a1_fx = 1071754114l /* 1.996297601769122 Q29*/; + a2_fx = -534886875l /*-0.996304442992686 Q29*/; + b1_fx = -1071755951l /*-1.996301022380904 Q29*/; + b2_fx = 535877975l /* 0.998150511190452 Q29*/; + } + move32(); + move32(); + move32(); + move32(); + Word64 W_sum, W_y0, W_y1, W_y2; + Word32 x0, x1, x2; + + W_sum = W_mult_32_32( b2_fx, mem_fx[2] ); /* b2*x2 */ + W_sum = W_mac_32_32( W_sum, b1_fx, mem_fx[3] ); /* b1*x1 */ + x2 = L_shr( signal_fx[0], prescale ); + W_sum = W_mac_32_32( W_sum, b2_fx, x2 ); /* b2*x0 */ + W_sum = W_mac_32_32( W_sum, mem_fx[0], a2_fx ); /* y2*a2 */ + W_sum = W_mac_32_32( W_sum, mem_fx[1], a1_fx ); /* y1*a1 */ + W_y2 = W_shl( W_sum, HP20_COEFF_SCALE ); + signal_fx[0] = W_extract_h( W_shl( W_y2, prescale ) ); + move32(); + + W_sum = W_mult_32_32( b2_fx, mem_fx[3] ); /* b2*x2 */ + W_sum = W_mac_32_32( W_sum, b1_fx, x2 ); /* b1*x1 */ + x1 = L_shr( signal_fx[1], prescale ); + W_sum = W_mac_32_32( W_sum, b2_fx, x1 ); /* b2*x0 */ + W_sum = W_mac_32_32( W_sum, mem_fx[1], a2_fx ); /* y2*a2 */ + W_sum = W_mac_32_32( W_sum, W_extract_h( W_y2 ), a1_fx ); /* y1*a1 */ + W_y1 = W_shl( W_sum, HP20_COEFF_SCALE ); + signal_fx[1] = W_extract_h( W_shl( W_y1, prescale ) ); + move32(); + + diff = sub( prescale_current_frame, prescale ); + W_y1 = W_shr( W_y1, diff ); + W_y2 = W_shr( W_y2, diff ); + x2 = L_shr( x2, diff ); + x1 = L_shr( x1, diff ); + + FOR( i = 2; i < lg; i++ ) + { + W_sum = W_mult_32_32( b2_fx, x2 ); /* b2*x2 */ + W_sum = W_mac_32_32( W_sum, b1_fx, x1 ); /* b1*x1 */ + x0 = L_shr( signal_fx[i], prescale_current_frame ); + W_sum = W_mac_32_32( W_sum, b2_fx, x0 ); /* b2*x0 */ + W_sum = W_mac_32_32( W_sum, W_extract_h( W_y2 ), a2_fx ); /* y2*a2 */ + W_sum = W_mac_32_32( W_sum, W_extract_h( W_y1 ), a1_fx ); /* y1*a1 */ + W_y0 = W_shl( W_sum, HP20_COEFF_SCALE ); + + signal_fx[i] = W_extract_h( W_shl( W_y0, prescale_current_frame ) ); + move32(); + + x2 = x1; + x1 = x0; + W_y2 = W_y1; + W_y1 = W_y0; + + move32(); + move32(); + move64(); + move64(); + } + + mem_fx[0] = W_extract_h( W_y2 ); + mem_fx[1] = W_extract_h( W_y1 ); + mem_fx[2] = x2; + mem_fx[3] = x1; + + move32(); + move32(); + move32(); + move32(); + + return; +} +#else +void hp20_fx_32( + Word32 signal_fx[], + const Word16 lg, + Word32 mem_fx[], + const Word32 Fs ) +{ + Word16 i; + Word32 a1_fx, a2_fx, b1_fx, b2_fx; + Word16 Qx0, Qx1, Qx2, Qy1, Qprev_y1, Qy2, Qprev_y2, Qmin; + Word64 x0_fx64, x1_fx64, x2_fx64, y0_fx64, y1_fx64, y2_fx64, R1, R2, R3, R4, R5; + + IF( EQ_32( Fs, 8000 ) ) + { + /* hp filter 20Hz at 3dB for 8000KHz input sampling rate + [b,a] = butter(2, 20.0/4000.0, 'high'); + b = [0.988954248067140 -1.977908496134280 0.988954248067140] + a =[1.000000000000000 -1.977786483776764 0.978030508491796]*/ + a1_fx = 1061816033l /* 1.977786483776764 Q29*/; + a2_fx = -525076131l /*-0.978030508491796 Q29*/; + b1_fx = -1061881538l /*-1.977908496134280 Q29*/; + b2_fx = 530940769l /* 0.988954248067140 Q29*/; + } + ELSE IF( EQ_32( Fs, 16000 ) ) + { + /* hp filter 20Hz at 3dB for 16000KHz sampling rate + [b,a] = butter(2, 20.0/8000.0, 'high'); + b =[ 0.994461788958195 -1.988923577916390 0.994461788958195] + a =[1.000000000000000 -1.988892905899653 0.988954249933127] */ + a1_fx = 1067778748l /* 1.988892905899653 Q29*/; + a2_fx = -530940770l /*-0.988954249933127 Q29*/; + b1_fx = -1067795215l /*-1.988923577916390 Q29*/; + b2_fx = 533897608l /* 0.994461788958195 Q29*/; + } + ELSE IF( EQ_32( Fs, 32000 ) ) + { + /* hp filter 20Hz at 3dB for 32000KHz sampling rate + [b,a] = butter(2, 20.0/16000.0, 'high'); + b =[0.997227049904470 -1.994454099808940 0.997227049904470] + a =[1.000000000000000 -1.994446410541927 0.994461789075954]*/ + a1_fx = 1070760263l /* 1.994446410541927 Q29*/; + a2_fx = -533897608l /*-0.994461789075954 Q29*/; + b1_fx = -1070764392l /*-1.994454099808940 Q29*/; + b2_fx = 535382196l /* 0.997227049904470 Q29*/; + } + ELSE + { + /* hp filter 20Hz at 3dB for 48000KHz sampling rate + [b,a] = butter(2, 20.0/24000.0, 'high'); + b =[ 0.998150511190452 -1.996301022380904 0.998150511190452] + a =[1.000000000000000 -1.996297601769122 0.996304442992686]*/ + a1_fx = 1071754114l /* 1.996297601769122 Q29*/; + a2_fx = -534886875l /*-0.996304442992686 Q29*/; + b1_fx = -1071755951l /*-1.996301022380904 Q29*/; + b2_fx = 535877975l /* 0.998150511190452 Q29*/; + } + move32(); + move32(); + move32(); + move32(); + + Qprev_y1 = extract_l( mem_fx[4] ); + Qprev_y2 = extract_l( mem_fx[5] ); + y1_fx64 = W_deposit32_l( mem_fx[0] ); + y2_fx64 = W_deposit32_l( mem_fx[1] ); + x0_fx64 = W_deposit32_l( mem_fx[2] ); + x1_fx64 = W_deposit32_l( mem_fx[3] ); + + FOR( i = 0; i < lg; i++ ) + { + x2_fx64 = x1_fx64; + move64(); + x1_fx64 = x0_fx64; + move64(); + x0_fx64 = W_deposit32_l( signal_fx[i] ); + + Qy1 = W_norm( y1_fx64 ); + if ( y1_fx64 == 0 ) + { + Qy1 = 62; + move16(); + } + Qy1 = sub( Qy1, 34 ); + R1 = W_mult0_32_32( W_extract_l( W_shl( y1_fx64, Qy1 ) ), a1_fx ); + Qy1 = add( Qy1, Qprev_y1 ); + + Qy2 = W_norm( y2_fx64 ); + if ( y2_fx64 == 0 ) + { + Qy2 = 62; + move16(); + } + Qy2 = sub( Qy2, 34 ); + R2 = W_mult0_32_32( W_extract_l( W_shl( y2_fx64, Qy2 ) ), a2_fx ); + Qy2 = add( Qy2, Qprev_y2 ); + + Qx0 = W_norm( x0_fx64 ); + if ( x0_fx64 == 0 ) + { + Qx0 = 62; + move16(); + } + Qx0 = sub( Qx0, 34 ); + R3 = W_mult0_32_32( W_extract_l( W_shl( x0_fx64, Qx0 ) ), b2_fx ); + + Qx1 = W_norm( x1_fx64 ); + if ( x1_fx64 == 0 ) + { + Qx1 = 62; + move16(); + } + Qx1 = sub( Qx1, 34 ); + R4 = W_mult0_32_32( W_extract_l( W_shl( x1_fx64, Qx1 ) ), b1_fx ); + + Qx2 = W_norm( x2_fx64 ); + if ( x2_fx64 == 0 ) + { + Qx2 = 62; + move16(); + } + Qx2 = sub( Qx2, 34 ); + R5 = W_mult0_32_32( W_extract_l( W_shl( x2_fx64, Qx2 ) ), b2_fx ); + + Qmin = s_min( Qy1, Qy2 ); + + y0_fx64 = W_add( W_shr( R1, sub( Qy1, Qmin ) ), W_shr( R2, sub( Qy2, Qmin ) ) ); + + Qmin = s_min( Qmin, Qx0 ); + Qmin = s_min( Qmin, Qx1 ); + Qmin = s_min( Qmin, Qx2 ); + + y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1, Qy2 ), Qmin ) ), W_add( W_shr( R3, sub( Qx0, Qmin ) ), W_add( W_shr( R4, sub( Qx1, Qmin ) ), W_shr( R5, sub( Qx2, Qmin ) ) ) ) ); + + y0_fx64 = W_shr( y0_fx64, 29 ); + + signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) ); + move32(); + IF( signal_fx[i] < 0 ) + { + signal_fx[i] = L_add( signal_fx[i], 1 ); + move32(); + } + + y2_fx64 = y1_fx64; + y1_fx64 = y0_fx64; + Qprev_y2 = Qprev_y1; + Qprev_y1 = Qmin; + move64(); + move64(); + move16(); + move16(); + } + + Qy1 = W_norm( y1_fx64 ); + test(); + IF( y1_fx64 != 0 && LT_16( Qy1, 32 ) ) + { + y1_fx64 = W_shr( y1_fx64, sub( 32, Qy1 ) ); + Qprev_y1 = sub( Qprev_y1, sub( 32, Qy1 ) ); + } + + Qy2 = W_norm( y2_fx64 ); + test(); + IF( y2_fx64 != 0 && LT_16( Qy2, 32 ) ) + { + y2_fx64 = W_shr( y2_fx64, sub( 32, Qy2 ) ); + Qprev_y2 = sub( Qprev_y2, sub( 32, Qy2 ) ); + } + + mem_fx[0] = W_extract_l( y1_fx64 ); + mem_fx[1] = W_extract_l( y2_fx64 ); + mem_fx[2] = W_extract_l( x0_fx64 ); + mem_fx[3] = W_extract_l( x1_fx64 ); + mem_fx[4] = Qprev_y1; + mem_fx[5] = Qprev_y2; + move32(); + move32(); + move32(); + move32(); + move32(); + move32(); + + return; +} +#endif +#endif diff --git a/lib_com/hq2_bit_alloc.c b/lib_com/hq2_bit_alloc.c index a6fbf7161..90cf1d45a 100644 --- a/lib_com/hq2_bit_alloc.c +++ b/lib_com/hq2_bit_alloc.c @@ -43,764 +43,3 @@ #include "basop_util.h" #include "stl.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -#define WMC_TOOL_SKIP - -/*------------------------------------------------------------------- - * Local constants - *-------------------------------------------------------------------*/ - -#define MIN_BITS_FIX 0 -#define HQ_16k40_BIT ( HQ_16k40 / FRAMES_PER_SEC ) /* 16400/50=328, FOR FIX TMP */ -#define C1_QRk ( 1 << SWB_BWE_LR_QRk ) /* 1 */ -#define Qbf 14 -#define C1_Qbf ( 1 << Qbf ) /* 1 */ -#define BITS_FACT_1p10 ( Word16 )( 1.10f * (float) pow( 2, Qbf ) + 0.5f ) -#define BITS_FACT_1p05 ( Word16 )( 1.05f * (float) pow( 2, Qbf ) + 0.5f ) -#define BITS_FACT_1p00 ( Word16 )( 1.00f * (float) pow( 2, Qbf ) + 0.5f ) -#define BITS_FACT_0p97 ( Word16 )( 0.97f * (float) pow( 2, Qbf ) + 0.5f ) -#define BITS_FACT_0p92 ( Word16 )( 0.92f * (float) pow( 2, Qbf ) + 0.5f ) - -#define L_Comp( hi, lo ) L_mac( L_deposit_h( hi ), lo, 1 ) - -/*-------------------------------------------------------------------* - * hq2_bit_alloc_har() - * - * Bit allocation mechanism for HQ_HARMONIC mode - *-------------------------------------------------------------------*/ - -void hq2_bit_alloc_har( - float *y, /* i : band energy of sub-vectors */ - int16_t B_fx, /* i : number of available bits */ - int16_t N_fx, /* i : number of sub-vectors */ - Word32 *L_Rsubband, - int16_t p2a_bands_fx, - int32_t L_core_brate, /* i : core bitrate */ - int16_t p2a_flags_fx[], - int16_t band_width_fx[] ) -{ - Word16 i, j, k; - - Word32 L_norm_sum; /* Qbe */ - Word32 L_Ravg_sub[GRP_SB]; /* Qbe */ - Word32 L_temp_band_energy[BANDS_MAX]; /* Qbe */ - - Word16 j_fx, k_fx, Bits_grp_fx[GRP_SB]; - - Word32 L_temp_band_energydiff[BANDS_MAX]; - Word16 G1_BE_DIFF_POS_fx; /* Q0 */ - Word32 L_G1_BE_DIFF_VAL; /* Qbe Word32 */ - Word16 final_gr_fact_pos_fx, gmax_range_fx[2], temp_fx; - Word16 bits_fact_fx, bits_fact1_fx; /* Q? */ - Word16 grp_rngmax_fx[2]; - Word16 index_fx[NB_SWB_SUBBANDS_HAR], y_index_fx[NB_SWB_SUBBANDS_HAR], esthf_bits_fx, grp_bit_avg_fx, harmonic_band_fx; - Word32 L_norm_sum_avg; - Word32 L_norm_diff; /* Qbe */ - Word16 bits_allocweigh_fx; /* Q15 */ - Word16 grp_bound_fx[5]; - Word32 L_grp_thr[GRP_SB]; /* not require Word32 precission */ - Word16 lf_hf_ge_r_fx; /* Q15 */ - Word32 L_avg_enhf_en_diff; /* Qbe */ - - Word16 B_norm_fx; - - Word32 L_temp, L_temp2; - Word16 exp, frac; - - Word32 L_THR1, L_THR2, L_THR3; - - Word16 exp_norm; - Word16 norm_sum_fx; - Word16 Qns; /* Q value for norm_sum_fx */ - Word16 Inv_norm_sum_fx; /* 1/norm_sum */ - Word16 QIns; /* Q value for Inv_norm_sum_fx */ - - Word16 exp_normn, exp_normd; - Word16 div_fx; - - Word16 Inv_p2a_bands_fx; - Word16 QIpb; - - Word16 exp_shift; - - Word32 L_y[BANDS_MAX]; - -#ifdef BASOP_NOGLOB - Flag Overflow; - Overflow = 0; -#endif - - grp_rngmax_fx[0] = 0; - grp_rngmax_fx[1] = 0; - - for ( i = 0; i < N_fx; i++ ) - { - L_y[i] = (Word32) ( y[i] * (float) pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - L_THR1 = L_shl( L_deposit_l( THR1 ), SWB_BWE_LR_QRk ); - L_THR2 = L_shl( L_deposit_l( THR2 ), SWB_BWE_LR_QRk ); - L_THR3 = L_shl( L_deposit_l( THR3 ), SWB_BWE_LR_QRk ); - - set16_fx( Bits_grp_fx, 0, GRP_SB ); - - /* Initialize subbands bits allocation vector based on harmonic bands */ - harmonic_band_fx = add( sub( N_fx, p2a_bands_fx ), 1 ); - /*printf("harmonic_band= %d %d\n", harmonic_band, harmonic_band_fx);*/ - FOR( k = 0; k < N_fx; k++ ) - { - L_Rsubband[k] = (Word32) ( C1_QRk ); - move32(); /* Constant Value */ - L_temp_band_energy[k] = L_y[k]; - move32(); /* SWB_BWE_LR_Qbe */ - } - final_gr_fact_pos_fx = 2; - move16(); - bits_fact_fx = C1_Qbf; - move16(); - bits_fact1_fx = C1_Qbf; - move16(); - - gmax_range_fx[0] = G1_RANGE; - move16(); - gmax_range_fx[1] = G1G2_RANGE; - move16(); - - IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) - { - gmax_range_fx[1] = add( gmax_range_fx[1], 2 ); - move16(); - } - - /* decide each group range, for grouping spectral coefficients */ - grp_rngmax_fx[1] = 16; - move16(); - grp_rngmax_fx[0] = 7; - move16(); - temp_fx = 0; - move16(); - FOR( i = 0; i < 2; i++ ) - { - j_fx = gmax_range_fx[i]; - move16(); - k_fx = 0; - move16(); - test(); - WHILE( L_sub( L_temp_band_energy[gmax_range_fx[i] - 1], L_temp_band_energy[j_fx] ) >= 0x0L && sub( j_fx, grp_rngmax_fx[i] ) < 0x0 ) - { - test(); - k_fx = add( k_fx, 1 ); - j_fx = add( j_fx, 1 ); - } - - temp_fx = k_fx; - move16(); - IF( sub( temp_fx, 1 ) > 0 ) - { - FOR( temp_fx = 2; temp_fx <= k_fx; ) - { - IF( L_sub( L_temp_band_energy[gmax_range_fx[i] + temp_fx - 1], L_temp_band_energy[gmax_range_fx[i] + temp_fx] ) < 0 ) - { - BREAK; - } - ELSE IF( L_sub( L_temp_band_energy[gmax_range_fx[i] + temp_fx - 1], L_temp_band_energy[gmax_range_fx[i] + temp_fx] ) >= 0 ) - { - temp_fx = add( temp_fx, 1 ); - IF( sub( temp_fx, k_fx ) > 0 ) - { - temp_fx = sub( temp_fx, 1 ); - BREAK; - } - } - } - - gmax_range_fx[i] = add( gmax_range_fx[i], temp_fx ); - move16(); - } - ELSE - { - gmax_range_fx[i] = add( gmax_range_fx[i], temp_fx ); - move16(); - } - } - - grp_bound_fx[0] = 0; - move16(); - FOR( i = 1; i < GRP_SB - 1; i++ ) - { - grp_bound_fx[i] = gmax_range_fx[i - 1]; - move16(); - } - grp_bound_fx[i] = harmonic_band_fx; - move16(); - grp_bound_fx[add( i, 1 )] = N_fx; - move16(); - - - FOR( i = 0; i < GRP_SB; i++ ) - { - L_Ravg_sub[i] = 0x0L; - move32(); - FOR( j = grp_bound_fx[i]; j < grp_bound_fx[i + 1]; j++ ) - { - IF( L_temp_band_energy[j] > 0x0L ) - { - L_Ravg_sub[i] = L_add( L_Ravg_sub[i], L_temp_band_energy[j] ); - move32(); - } - } - } - - L_temp_band_energydiff[0] = L_temp_band_energy[0]; - move32(); - FOR( j = 1; j < harmonic_band_fx; j++ ) - { - L_temp_band_energydiff[j] = L_abs( L_sub( L_temp_band_energy[j], L_temp_band_energy[j - 1] ) ); - move32(); - } - - G1_BE_DIFF_POS_fx = 0; - move16(); - L_G1_BE_DIFF_VAL = 0x0L; - move32(); - - FOR( j = 1; j < harmonic_band_fx; j++ ) - { - IF( L_sub( L_temp_band_energydiff[j], L_G1_BE_DIFF_VAL ) > 0 ) - { - G1_BE_DIFF_POS_fx = j; - move16(); - L_G1_BE_DIFF_VAL = L_temp_band_energydiff[j]; - move32(); - } - } - - test(); - test(); - IF( sub( G1_BE_DIFF_POS_fx, gmax_range_fx[0] ) < 0 && G1_BE_DIFF_POS_fx > 0 ) - { - final_gr_fact_pos_fx = 0; - move16(); - } - ELSE IF( sub( G1_BE_DIFF_POS_fx, gmax_range_fx[0] ) >= 0 && sub( G1_BE_DIFF_POS_fx, gmax_range_fx[1] ) < 0 ) - { - final_gr_fact_pos_fx = 1; - move16(); - } - ELSE - { - final_gr_fact_pos_fx = 2; - move16(); - } - - test(); - IF( final_gr_fact_pos_fx == 0 || sub( final_gr_fact_pos_fx, 1 ) == 0 ) - { - IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) - { - bits_fact_fx = BITS_FACT_1p10; - move16(); /* 1.10f; */ /* G1 */ - bits_fact1_fx = BITS_FACT_0p92; - move16(); /* 0.92f; */ /* G3 */ - } - ELSE - { - bits_fact_fx = BITS_FACT_1p05; - move16(); /* 1.05f; */ /* G1 */ - bits_fact1_fx = BITS_FACT_0p97; - move16(); /* 0.97f; */ /* G3 */ - } - } - ELSE - { - IF( L_sub( L_core_brate, HQ_16k40 ) == 0 ) - { - bits_fact_fx = BITS_FACT_0p97; - move16(); /* 0.97f; */ /* G1 */ - bits_fact1_fx = BITS_FACT_1p00; - move16(); /* 1.00f; */ /* G3 */ - } - ELSE - { - bits_fact_fx = BITS_FACT_0p92; - move16(); /* 0.92f; */ /* G1 */ - bits_fact1_fx = BITS_FACT_1p00; - move16(); /* 1.00f; */ /* G3 */ - } - } - - FOR( i = 0; i < sub( N_fx, harmonic_band_fx ); i++ ) - { - y_index_fx[i] = extract_h( L_shl( L_temp_band_energy[add( harmonic_band_fx, i )], sub( 16, SWB_BWE_LR_Qbe ) ) ); - move16(); - index_fx[i] = add( harmonic_band_fx, i ); - move16(); - } - - reordvct( y_index_fx, sub( N_fx, harmonic_band_fx ), index_fx ); - - /* Log2 */ - L_temp = L_deposit_l( band_width_fx[index_fx[0]] ); - exp = norm_l( L_temp ); - frac = Log2_norm_lc( L_shl( L_temp, exp ) ); - exp = sub( 30, exp ); - L_temp = L_Comp( exp, frac ); - /* ceil */ - if ( L_and( 0x0000ffff, L_temp ) > 0 ) - { - L_temp = L_add( L_temp, 0x00010000 ); - } - esthf_bits_fx = extract_h( L_temp ); - - L_grp_thr[0] = L_THR1; - move32(); - L_grp_thr[1] = L_THR2; - move32(); - L_grp_thr[2] = L_THR3; - move32(); - L_grp_thr[3] = L_shl( L_deposit_l( esthf_bits_fx ), SWB_BWE_LR_QRk ); - move16(); - - L_norm_sum = 1; - move32(); - FOR( i = 0; i < 3; i++ ) - { - L_norm_sum = L_add( L_norm_sum, L_Ravg_sub[i] ); - move32(); - } - - /*reserve bits for HF coding */ - L_temp = L_add( L_norm_sum, L_Ravg_sub[GRP_SB - 1] ); - exp_normn = norm_l( L_temp ); - exp_normn = sub( exp_normn, 1 ); - exp_normd = norm_s( N_fx ); - - div_fx = div_l( L_shl( L_temp, exp_normn ), shl( N_fx, exp_normd ) ); /* (Qbe+exp_normn)-(0+exp_normd)-1) */ - L_norm_sum_avg = L_shr( L_deposit_h( div_fx ), add( sub( exp_normn, exp_normd ), 15 ) ); /* -> Qbe */ - - exp_norm = norm_l( L_norm_sum ); - norm_sum_fx = extract_h( L_shl( L_norm_sum, exp_norm ) ); /* SWB_BWE_LR_Qbe+exp_norm-16 */ - Qns = sub( add( SWB_BWE_LR_Qbe, exp_norm ), 16 ); - - Inv_norm_sum_fx = div_s( 0x4000 /* Q15 */, norm_sum_fx ); - QIns = sub( 31, exp_norm ); /* 14 - (14+exp_norm-16) + 15 */ - - grp_bit_avg_fx = div_s_ss( B_fx, GRP_SB ); /* Q0 */ - - exp_normd = norm_s( p2a_bands_fx ); - Inv_p2a_bands_fx = div_s( 0x3fff, shl( p2a_bands_fx, exp_normd ) ); /* 14-exp_normd+15 */ - QIpb = sub( 29, exp_normd ); - - L_temp = L_shl( Mpy_32_16_1( L_Ravg_sub[GRP_SB - 1], Inv_p2a_bands_fx ), sub( SWB_BWE_LR_Qbe, sub( QIpb, 1 ) ) ); - L_norm_diff = L_sub( L_temp, L_norm_sum_avg ); /* Qbe */ - - L_temp = Mpy_32_16_1( L_Ravg_sub[GRP_SB - 1], sub( GRP_SB, 1 ) ); /* Qbe+0+1 */ - L_temp = Mpy_32_16_1( L_temp, Inv_norm_sum_fx ); /* Qbe+1+QIpb+1 */ -#ifdef BASOP_NOGLOB - lf_hf_ge_r_fx = round_fx_o( L_shl_o( L_temp, sub( 15 + 16, sub( add( SWB_BWE_LR_Qbe, QIns ), 30 ) ), &Overflow ), &Overflow ); - Overflow = 0; /* reset BASOP Overflow */ - move16(); -#else - lf_hf_ge_r_fx = round_fx( L_shl( L_temp, sub( 15 + 16, sub( add( SWB_BWE_LR_Qbe, QIns ), 30 ) ) ) ); -#endif - - exp_normn = norm_s( norm_sum_fx ); - exp_normn = sub( exp_normn, 1 ); - exp_normd = norm_s( harmonic_band_fx ); - - div_fx = div_s( shl( norm_sum_fx, exp_normn ), shl( harmonic_band_fx, exp_normd ) ); - L_avg_enhf_en_diff = L_sub( L_temp_band_energy[index_fx[0]], L_shl( L_deposit_h( div_fx ), sub( sub( SWB_BWE_LR_Qbe, ( add( Qns, sub( exp_normn, exp_normd ) ) ) ), 31 ) ) ); /* Qbe - (Qns+exp_normn-(exp_normd)+15) -16 */ - - IF( sub( lf_hf_ge_r_fx, 26214 ) > 0x0 && L_sub( L_avg_enhf_en_diff, (Word32) ( 8 << SWB_BWE_LR_Qbe ) ) > 0x0L ) /* 0.8=26214.4(Q15) 8.0f=131072(Qbe) */ - { - bits_allocweigh_fx = 6554; - move16(); /* 0.2 6553.6(Q15) */ - IF( L_norm_diff < 0x0L ) - { - bits_allocweigh_fx = 13107; - move16(); /* 0.4 13107.2(Q15) */ - } - - /*allocate bits*/ - /*Bits_grp[GRP_SB-1] = (int16_t)min((grp_bit_avg/p2a_bands + bits_allocweigh*norm_diff),10);*/ - L_temp = L_mult( grp_bit_avg_fx, Inv_p2a_bands_fx ); /* Q0+QIpb+1 */ - L_temp2 = Mpy_32_16_1( L_norm_diff, bits_allocweigh_fx ); /* Qbe+Q15-15 */ - - L_temp = L_shr( L_temp, add( QIpb, 1 ) ); - L_temp = L_add( L_shl( L_temp, SWB_BWE_LR_Qbe ), L_temp2 ); - - Bits_grp_fx[GRP_SB - 1] = extract_h( L_shl( L_temp, sub( 16, SWB_BWE_LR_Qbe ) ) ); - Bits_grp_fx[GRP_SB - 1] = s_min( Bits_grp_fx[GRP_SB - 1], 10 ); - - test(); - if ( sub( Bits_grp_fx[GRP_SB - 1], esthf_bits_fx ) < 0 ) - { - Bits_grp_fx[GRP_SB - 1] = 0; - move16(); - } - B_fx = sub( B_fx, Bits_grp_fx[GRP_SB - 1] ); - } - - exp_shift = sub( add( SWB_BWE_LR_Qbe, QIns ), 47 ); /* (SWB_BWE_LR_Qbe+14+1+QIns-15-16) */ - exp_norm = norm_s( B_fx ); - B_norm_fx = shl( B_fx, exp_norm ); - exp_shift = add( exp_shift, exp_norm ); - - IF( sub( final_gr_fact_pos_fx, 1 ) == 0 ) - { - L_temp = Mpy_32_16_1( L_Ravg_sub[1], extract_h( L_mult( bits_fact_fx, B_norm_fx ) ) ); - L_temp = Mpy_32_16_1( L_temp, Inv_norm_sum_fx ); - Bits_grp_fx[1] = extract_h( L_shr( L_temp, exp_shift ) ); - move16(); - - L_temp = Mpy_32_16_1( L_Ravg_sub[2], extract_h( L_mult( bits_fact1_fx, B_norm_fx ) ) ); - L_temp = Mpy_32_16_1( L_temp, Inv_norm_sum_fx ); - Bits_grp_fx[2] = extract_h( L_shr( L_temp, exp_shift ) ); - move16(); - - Bits_grp_fx[0] = sub( sub( B_fx, Bits_grp_fx[1] ), Bits_grp_fx[2] ); - move16(); - } - ELSE - { - L_temp = Mpy_32_16_1( L_Ravg_sub[0], extract_h( L_mult( bits_fact_fx, B_norm_fx ) ) ); - L_temp = Mpy_32_16_1( L_temp, Inv_norm_sum_fx ); - Bits_grp_fx[0] = extract_h( L_shr( L_temp, exp_shift ) ); - move16(); - - L_temp = Mpy_32_16_1( L_Ravg_sub[2], extract_h( L_mult( bits_fact1_fx, B_norm_fx ) ) ); - L_temp = Mpy_32_16_1( L_temp, Inv_norm_sum_fx ); - Bits_grp_fx[2] = extract_h( L_shr( L_temp, exp_shift ) ); - move16(); - - Bits_grp_fx[1] = sub( sub( B_fx, Bits_grp_fx[0] ), Bits_grp_fx[2] ); - move16(); - } - - IF( sub( Bits_grp_fx[2], THR2 ) < 0 ) - { - Bits_grp_fx[1] = add( Bits_grp_fx[1], Bits_grp_fx[2] ); - move16(); - Bits_grp_fx[2] = 0; - move16(); - } - - FOR( i = 0; i < GRP_SB; i++ ) - { - IF( Bits_grp_fx[i] > 0 ) - { - Bits2indvsb_fx( L_temp_band_energy, grp_bound_fx[i], grp_bound_fx[i + 1], Bits_grp_fx[i], L_grp_thr[i], L_Rsubband, p2a_flags_fx ); - } - ELSE - { - set32_fx( L_Rsubband + grp_bound_fx[i], 0x0L, sub( grp_bound_fx[i + 1], grp_bound_fx[i] ) ); - IF( sub( i, GRP_SB - 1 ) == 0 ) - { - set16_fx( p2a_flags_fx + grp_bound_fx[i], 0, sub( grp_bound_fx[i + 1], grp_bound_fx[i] ) ); - } - } - } - return; -} - -void hq2_bit_alloc( - const float band_energy[], /* i : band energy of each subband */ - const int16_t bands, /* i : total number of subbands in a frame */ - Word32 L_Rk[], /* i/o: Bit allocation/Adjusted bit alloc. */ - int16_t *bit_budget_fx, /* i/o: bit bugdet */ - int16_t *p2a_flags, /* i : HF tonal indicator */ - const Word16 weight_fx, /* i : weight (Q13) */ - const int16_t band_width[], /* i : Sub band bandwidth */ - const int16_t num_bits, /* i : available bits */ - const int16_t hqswb_clas, /* i : HQ2 class information */ - const int16_t bwidth, /* i : input bandwidth */ - const int16_t is_transient /* i : indicator HQ_TRANSIENT or not */ -) -{ - Word16 j, k; - Word16 tmp; - Word16 bit_budget_norm_fx; - - Word32 L_Rcalc, L_Ravg, L_Rcalc1; - - Word16 exp_normn, exp_normd; - - Word16 Rcnt_fx; - - Word16 div_fx; - Word16 Qdiv; - - Word32 L_tmp; - Word16 tmp_fx; - - Word32 L_maxxy; - Word16 maxdex_fx; - Word32 L_dummy; - - Word16 bit_budget_temp_fx; - - Word16 negflag; - - Word32 L_THR1, L_THR2, L_THR3; - - Word32 L_band_energy[BANDS_MAX]; - - for ( k = 0; k < bands; k++ ) - { - L_band_energy[k] = (Word32) ( band_energy[k] * (float) pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - L_THR1 = L_shl( L_deposit_l( THR1 ), SWB_BWE_LR_QRk ); - L_THR2 = L_shl( L_deposit_l( THR2 ), SWB_BWE_LR_QRk ); - L_THR3 = L_shl( L_deposit_l( THR3 ), SWB_BWE_LR_QRk ); - - /* Init Rk to non-zero values for bands to be allocated bits */ - IF( sub( num_bits, HQ_16k40_BIT ) <= 0 ) - { - set32_fx( L_Rk, (Word32) ( C1_QRk ), bands ); /* 1< 0 ) - { - L_Ravg = L_add( L_Ravg, L_shl( L_band_energy[k], sub( SWB_BWE_LR_QRk, SWB_BWE_LR_Qbe ) ) ); /* SWB_BWE_LR_QRk-SWB_BWE_LR_Qbe */ - Rcnt_fx = add( Rcnt_fx, 1 ); - } - } - /* Ravg Qband_energy */ - - /*L_Ravg /= Rcnt; */ - exp_normd = norm_l( L_Ravg ); - exp_normd = sub( exp_normd, 1 ); - exp_normn = norm_s( Rcnt_fx ); - - tmp = shl( Rcnt_fx, exp_normn ); - tmp = s_max( tmp, 1 ); - IF( L_Ravg > 0 ) - { - div_fx = div_l( L_shl( L_Ravg, exp_normd ), tmp ); /* Qdiv = 14+exp_normd-(exp_normn)-1 */ - } - ELSE - { - div_fx = div_l( L_shl( L_abs( L_Ravg ), exp_normd ), tmp ); /* Qdiv = 14+exp_normd-(exp_normn)-1 */ - div_fx = negate( div_fx ); - } - - /*Qdiv = QRk+exp_normd-(exp_normn)-1; */ - Qdiv = sub( sub( add( SWB_BWE_LR_QRk, exp_normd ), exp_normn ), 1 ); - - L_Ravg = L_shr( L_deposit_l( div_fx ), sub( Qdiv, SWB_BWE_LR_QRk ) ); - - exp_normd = norm_s( *bit_budget_fx ); - exp_normd = sub( exp_normd, 1 ); - bit_budget_norm_fx = shl( *bit_budget_fx, exp_normd ); - div_fx = 0; - move16(); - - test(); - IF( bit_budget_norm_fx > 0 && sub( bit_budget_norm_fx, tmp ) < 0 ) - { - div_fx = div_s( bit_budget_norm_fx, tmp ); - } - Qdiv = add( sub( exp_normd, exp_normn ), 15 ); - - FOR( k = 0; k < bands; k++ ) - { - IF( L_Rk[k] > 0 ) - { - /*Rk[k] = ((float) *bit_budget / Rcnt + weight * (band_energy[k] - Ravg)); */ - - L_tmp = Mpy_32_16_1( L_sub( L_shl( L_band_energy[k], sub( SWB_BWE_LR_QRk, SWB_BWE_LR_Qbe ) ), L_Ravg ), weight_fx ); /* SWB_BWE_LR_QRk + Q13 - 15 */ - L_tmp = L_shl( L_tmp, 2 ); /* -> SWB_BWE_LR_QRk */ - - L_Rk[k] = L_add( L_shr( L_deposit_l( div_fx ), sub( Qdiv, SWB_BWE_LR_QRk ) ), L_tmp ); - } - } - - negflag = 0; - move16(); - L_Rcalc = 0; - move32(); - FOR( k = 0; k < bands; k++ ) - { - IF( L_sub( L_Rk[k], MIN_BITS_FIX ) < 0 ) - { - L_Rk[k] = 0x0L; - move32(); - negflag = 1; - move16(); - } - L_Rcalc = L_add( L_Rcalc, L_Rk[k] ); /*SWB_BWE_LR_QRk */ - } - - /* prune noiselike bands with low allocation */ - IF( sub( num_bits, HQ_16k40_BIT ) <= 0 && negflag == 0 ) - { - L_maxxy = 0; - move32(); - maxdex_fx = -1; - move16(); - L_Rcalc = 0; - move32(); - - /* find worst under-allocation */ - FOR( k = sub( bands, 1 ); k >= 0; k-- ) - { - /* dummy = ((float) min (band_width[k], max (12, band_width[k] / 4))) - Rk[k]; */ - tmp_fx = s_min( band_width[k], s_max( 12, shr( band_width[k], 2 ) ) ); - L_dummy = L_sub( L_shl( L_deposit_l( tmp_fx ), SWB_BWE_LR_QRk ), L_Rk[k] ); /*SWB_BWE_LR_QRk */ - test(); - test(); - test(); - IF( p2a_flags[k] == 0 && L_sub( L_dummy, L_maxxy ) > 0 && L_Rk[k] > 0 ) - { - maxdex_fx = k; - move16(); - L_maxxy = L_dummy; - move32(); /*SWB_BWE_LR_QRk */ - } - } - - /* prune worst allocation and recalculate total allocation */ - IF( sub( maxdex_fx, -1 ) > 0 ) - { - L_Rk[maxdex_fx] = 0; - move32(); - } - FOR( k = 0; k < bands; k++ ) - { - L_Rcalc = L_add( L_Rcalc, L_Rk[k] ); /*SWB_BWE_LR_QRk */ - } - } - test(); - IF( L_sub( L_Rcalc, L_Rcalc1 ) == 0 && sub( bwidth, SWB ) == 0 ) - { - /* Reallocate bits to individual subbands for HQ_NORMAL mode */ - /* if bits allocated to subbands areless than predefined threshold */ - IF( sub( hqswb_clas, HQ_NORMAL ) == 0 && sub( num_bits, HQ_16k40_BIT ) < 0 ) - { - L_dummy = 0x0L; - move32(); - FOR( k = 0; k < bands; k++ ) - { - test(); - test(); - test(); - test(); - test(); - IF( sub( k, 11 ) < 0 && L_sub( L_Rk[k], L_THR1 ) < 0 ) - { - L_Rk[k] = 0x0L; - move32(); - } - ELSE IF( sub( k, 11 ) >= 0 && sub( k, 16 ) < 0 && L_sub( L_Rk[k], L_THR2 ) < 0 ) - { - L_Rk[k] = 0x0L; - move32(); - } - ELSE IF( sub( k, 16 ) >= 0 && sub( k, bands ) < 0 && L_sub( L_Rk[k], L_THR3 ) < 0 ) - { - L_Rk[k] = 0x0L; - move32(); - } - - L_dummy = L_add( L_dummy, L_Rk[k] ); - } - - IF( L_sub( L_dummy, L_Rcalc ) == 0 ) - { - test(); - IF( sub( hqswb_clas, HQ_NORMAL ) == 0 && sub( num_bits, HQ_16k40_BIT ) < 0 ) - { - bit_budget_temp_fx = *bit_budget_fx; - move16(); - FOR( k = 0; k < NB_SWB_SUBBANDS; k++ ) - { - IF( p2a_flags[bands - NB_SWB_SUBBANDS + k] == 1 && L_Rk[bands - NB_SWB_SUBBANDS + k] == 0.0f ) - { - p2a_flags[bands - NB_SWB_SUBBANDS + k] = 0; - move16(); - bit_budget_temp_fx = sub( bit_budget_temp_fx, bits_lagIndices_modeNormal[k] ); - } - } - - IF( sub( bit_budget_temp_fx, *bit_budget_fx ) < 0 ) - { - *bit_budget_fx = bit_budget_temp_fx; - move16(); - /* a negative *bit_budget_fx may occur here due to Bit Errors */ - /* handled outside this function to properly set flag: st_fx->BER_detect */ - } - ELSE IF( sub( bit_budget_temp_fx, *bit_budget_fx ) == 0 ) - { - BREAK; - } - } - ELSE - { - BREAK; - } - } - } - ELSE - { - BREAK; - } - } - ELSE IF( L_sub( L_Rcalc, L_Rcalc1 ) == 0 && sub( bwidth, SWB ) != 0 ) - { - BREAK; - } - - L_Rcalc1 = L_Rcalc; - move32(); - } - return; -} - -#undef WMC_TOOL_SKIP -#endif diff --git a/lib_com/hq2_core_com.c b/lib_com/hq2_core_com.c index abfcba923..a30655394 100644 --- a/lib_com/hq2_core_com.c +++ b/lib_com/hq2_core_com.c @@ -44,268 +44,6 @@ #include "basop_proto_func.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * mdct_spectrum_denorm() - * - * - *--------------------------------------------------------------------------*/ - -void mdct_spectrum_denorm( - const int32_t inp_vector[], - float y2[], - const int16_t band_start[], - const int16_t band_end[], - const int16_t band_width[], - const float band_energy[], - const int16_t npulses[], - const int16_t bands, - const float ld_slope, - const float pd_thresh ) -{ - int16_t i, k; - float Eyy, gamma, pd, gain_tweak; - - for ( k = 0; k < bands; k++ ) - { - Eyy = 0; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - Eyy += (float) inp_vector[i] * inp_vector[i]; - } - - if ( Eyy > 0.0f ) - { - /* Set gamma to be pulse gain which results in perfect quantized subband energy */ - gamma = (float) sqrt( pow( 2.0f, band_energy[k] ) / Eyy ); - - /* Adjust gamma based on pulse density (0 bit MSE gain estimator) */ - pd = (float) npulses[k] / band_width[k]; - if ( pd < pd_thresh ) - { - gain_tweak = (float) pow( 2.0f, ( ld_slope * log2_f( pd / pd_thresh ) ) ); - gamma *= gain_tweak; - } - - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - y2[i] = gamma * inp_vector[i]; - } - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * hq2_core_configure() - * - * - *--------------------------------------------------------------------------*/ - -void hq2_core_configure( - const int16_t frame_length, /* i : frame length */ - const int16_t num_bits, /* i : number of bits */ - const int16_t is_transient, /* i : transient flag */ - int16_t *bands, - int16_t *length, - int16_t band_width[], - int16_t band_start[], - int16_t band_end[], - Word32 *L_qint, - Word16 *eref_fx, - Word16 *bit_alloc_weight_fx, - int16_t *gqlevs, - int16_t *Ngq, - int16_t *p2a_bands, - float *p2a_th, - float *pd_thresh, - float *ld_slope, - float *ni_coef, - float *ni_pd_th, - int32_t bwe_br ) -{ - const Xcore_Config *xcore_config; - - int16_t i, k; - int16_t bands_sh; - - if ( frame_length == L_FRAME8k ) - { - if ( is_transient ) - { - if ( num_bits <= ACELP_7k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_007200bps_short; - } - else if ( num_bits <= ACELP_8k00 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_008000bps_short; - } - else if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_013200bps_short; - } - else - { - xcore_config = &xcore_config_8kHz_016400bps_short; - } - } - else - { - if ( num_bits <= ACELP_7k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_007200bps_long; - } - else if ( num_bits <= ACELP_8k00 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_008000bps_long; - } - else if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_8kHz_013200bps_long; - } - else - { - xcore_config = &xcore_config_8kHz_016400bps_long; - } - } - } - else if ( frame_length == L_FRAME16k ) - { - if ( is_transient ) - { - if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_16kHz_013200bps_short; - } - else - { - xcore_config = &xcore_config_16kHz_016400bps_short; - } - } - else - { - if ( num_bits <= ACELP_13k20 / FRAMES_PER_SEC ) - { - xcore_config = &xcore_config_16kHz_013200bps_long; - } - else - { - xcore_config = &xcore_config_16kHz_016400bps_long; - } - } - } - else /* (bwidth == SWB) */ - { - if ( is_transient ) - { - if ( bwe_br == ACELP_13k20 ) - { - xcore_config = &xcore_config_32kHz_013200bps_short; - } - else - { - xcore_config = &xcore_config_32kHz_016400bps_short; - } - } - else - { - if ( bwe_br == ACELP_13k20 ) - { - xcore_config = &xcore_config_32kHz_013200bps_long; - } - else - { - xcore_config = &xcore_config_32kHz_016400bps_long; - } - } - } - - *bands = xcore_config->bands; - *length = xcore_config->bw; - *L_qint = xcore_config->L_qint; - *eref_fx = xcore_config->eref_fx; - *bit_alloc_weight_fx = xcore_config->bit_alloc_weight_fx; - *gqlevs = xcore_config->gqlevs; - *Ngq = xcore_config->Ngq; - - *p2a_bands = xcore_config->p2a_bands; - *p2a_th = xcore_config->p2a_th_float; - - *pd_thresh = xcore_config->pd_thresh_float; - *ld_slope = xcore_config->ld_slope_float; - *ni_coef = xcore_config->ni_coef_float; - *ni_pd_th = xcore_config->ni_pd_th; - - mvs2s( xcore_config->band_width, band_width, *bands ); - - /* Expand band_width[] table for short windows */ - if ( is_transient ) - { - bands_sh = *bands; - *bands = NUM_TIME_SWITCHING_BLOCKS * bands_sh; - *length *= NUM_TIME_SWITCHING_BLOCKS; - - for ( i = 1; i <= 3; i++ ) - { - for ( k = 0; k < bands_sh; k++ ) - { - band_width[i * bands_sh + k] = band_width[k]; - } - } - } - - /* Formulate band_start and band_end tables from band_width table */ - band_start[0] = 0; - band_end[0] = band_width[0] - 1; - for ( k = 1; k < *bands; k++ ) - { - band_start[k] = band_start[k - 1] + band_width[k - 1]; - band_end[k] = band_start[k] + band_width[k] - 1; - } - - return; -} - -/*--------------------------------------------------------------------------* - * reverse_transient_frame_energies() - * - * - *--------------------------------------------------------------------------*/ - -void reverse_transient_frame_energies( - float band_energy[], /* o : band energies */ - const int16_t bands /* i : number of bands */ -) -{ - int16_t k, k1, k2; - float be; - - k1 = bands / 4; - k2 = bands / 2 - 1; - for ( k = 0; k < bands / 8; k++ ) - { - be = band_energy[k1]; - band_energy[k1] = band_energy[k2]; - band_energy[k2] = be; - k1++, k2--; - } - - k1 = 3 * bands / 4; - k2 = bands - 1; - for ( k = 0; k < bands / 8; k++ ) - { - be = band_energy[k1]; - band_energy[k1] = band_energy[k2]; - band_energy[k2] = be; - k1++, k2--; - } - - return; -} -#endif - #define WMC_TOOL_SKIP void bit_allocation_second_fx2( @@ -437,171 +175,3 @@ void bit_allocation_second_fx2( } #undef WMC_TOOL_SKIP - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * spt_shorten_domain_pre() - * - * Compute shorten subband if previous frame has spectral peak. - *--------------------------------------------------------------------------*/ - -void spt_shorten_domain_pre( - const int16_t band_start[], /* i : Starting position of sub band */ - const int16_t band_end[], /* i : End position of sub band */ - const int16_t prev_SWB_peak_pos[], /* i : Spectral peak */ - const int16_t BANDS, /* i : total number of bands */ - const int32_t bwe_br, /* i : bitrate information */ - int16_t new_band_start[], /* o : Starting position of new shorten sub band */ - int16_t new_band_end[], /* o : End position of new shorten sub band */ - int16_t new_band_width[] /* o : new sub band bandwidth */ -) -{ - int16_t j, k, kpos; - - int16_t new_band_width_half; - const int16_t *p_bw_SPT_tbl; /* pointer of bw_SPT_tbl */ - - p_bw_SPT_tbl = bw_SPT_tbl[0]; - if ( bwe_br == HQ_16k40 ) - { - p_bw_SPT_tbl = bw_SPT_tbl[1]; - } - - kpos = 0; - j = 0; - for ( k = BANDS - SPT_SHORTEN_SBNUM; k < BANDS; k++ ) - { - if ( prev_SWB_peak_pos[kpos] != 0 ) - { - new_band_width[j] = p_bw_SPT_tbl[j]; - - /*shorten the bandwidth for pulse resolution*/ - new_band_width_half = new_band_width[j] / 2; - new_band_start[j] = prev_SWB_peak_pos[kpos] - new_band_width_half; - new_band_end[j] = prev_SWB_peak_pos[kpos] + new_band_width_half; - - if ( new_band_start[j] < band_start[k] ) - { - new_band_start[j] = band_start[k]; - new_band_end[j] = new_band_start[j] + ( new_band_width[j] - 1 ); - } - else if ( new_band_end[j] > band_end[k] ) - { - new_band_end[j] = band_end[k]; - new_band_start[j] = new_band_end[j] - ( new_band_width[j] - 1 ); - } - } - else - { - new_band_width[j] = p_bw_SPT_tbl[j]; - - /*shorten the bandwidth for pulse resolution*/ - new_band_width_half = new_band_width[j] / 2; - new_band_start[j] = ( band_start[k] + band_end[k] ) / 2 - new_band_width_half; - new_band_end[j] = ( band_start[k] + band_end[k] ) / 2 + new_band_width_half; - } - - kpos++; - j++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * spt_shorten_domain_band_save() - * - * Store the original subband information - *--------------------------------------------------------------------------*/ - -void spt_shorten_domain_band_save( - const int16_t bands, /* i : total subband */ - const int16_t band_start[], /* i : starting position of subband */ - const int16_t band_end[], /* i : end position of subband */ - const int16_t band_width[], /* i : band width of subband */ - int16_t org_band_start[], /* o : starting position of subband */ - int16_t org_band_end[], /* o : end position of subband */ - int16_t org_band_width[] /* o : band width of subband */ -) -{ - int16_t k, kpos; - - kpos = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - org_band_start[kpos] = band_start[k]; - org_band_end[kpos] = band_end[k]; - org_band_width[kpos] = band_width[k]; - kpos++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * spt_shorten_domain_band_restore() - * - * Restrore the subband information - *--------------------------------------------------------------------------*/ - -void spt_shorten_domain_band_restore( - const int16_t bands, /* i : total subband */ - int16_t band_start[], /* i/o: starting position of subband */ - int16_t band_end[], /* i/o: end position of subband */ - int16_t band_width[], /* i/o: band width of subband */ - const int16_t org_band_start[], /* o : starting position of subband */ - const int16_t org_band_end[], /* o : end position of subband */ - const int16_t org_band_width[] /* o : band width of subband */ -) -{ - int16_t k, kpos; - - kpos = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - band_start[k] = org_band_start[kpos]; - band_end[k] = org_band_end[kpos]; - band_width[k] = org_band_width[kpos]; - kpos++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * spt_swb_peakpos_tmp_save - * - * Save Peak position for every higher subband - *--------------------------------------------------------------------------*/ - -void spt_swb_peakpos_tmp_save( - const float y2[], /* i : coded spectral information */ - const int16_t bands, /* i : total number of bands */ - const int16_t band_start[], /* i : starting position of subband */ - const int16_t band_end[], /* i : end position of subband */ - int16_t prev_SWB_peak_pos_tmp[] /* o : spectral peaks */ -) -{ - - int16_t i, j, k; - float peak_max; - - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - peak_max = 0; - prev_SWB_peak_pos_tmp[j] = 0; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( peak_max < fabs( y2[i] ) ) - { - peak_max = (float) fabs( y2[i] ); - prev_SWB_peak_pos_tmp[j] = i; - } - } - j++; - } - - return; -} -#endif diff --git a/lib_com/hq2_core_com_fx.c b/lib_com/hq2_core_com_fx.c index a05519387..a7c71ea9f 100644 --- a/lib_com/hq2_core_com_fx.c +++ b/lib_com/hq2_core_com_fx.c @@ -223,7 +223,6 @@ void mdct_spectrum_denorm_fx( } -#ifdef IVAS_FLOAT_FIXED void mdct_spectrum_denorm_ivas_fx( const Word32 inp_vector[], /* i : Q0 : */ Word32 L_y2[], /* i/o : Qs : decoded spectrum */ @@ -402,7 +401,6 @@ void mdct_spectrum_denorm_ivas_fx( return; } -#endif /*==========================================================================*/ /* FUNCTION : void hq2_core_configure_fx() */ diff --git a/lib_com/hq2_noise_inject.c b/lib_com/hq2_noise_inject.c index 53cc626e9..825401325 100644 --- a/lib_com/hq2_noise_inject.c +++ b/lib_com/hq2_noise_inject.c @@ -39,239 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq2_noise_inject() - * - * HQ2 noise injection for WB signals - *--------------------------------------------------------------------------*/ - -void hq2_noise_inject( - float y2hat[], - const int16_t band_start[], - const int16_t band_end[], - const int16_t band_width[], - float Ep[], - float Rk[], - const int16_t npulses[], - int16_t ni_seed, - const int16_t bands, - const int16_t ni_start_band, - const int16_t bw_low, - const int16_t bw_high, - const float enerL, - const float enerH, - float last_ni_gain[], - float last_env[], - int16_t *last_max_pos_pulse, - int16_t *p2a_flags, - int16_t p2a_bands, - const int16_t hqswb_clas, - const int16_t bwidth, - const int32_t bwe_br ) -{ - int16_t i, j, k, ni_end_band, satur = 0, count[BANDS_MAX], max_pos_pulse, pos; - float ni_gain[BANDS_MAX], pd[BANDS_MAX], rand, peak[BANDS_MAX], fac, env[BANDS_MAX]; - int16_t sb = bands; - - if ( ( hqswb_clas == HQ_HARMONIC || hqswb_clas == HQ_NORMAL ) && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB ) - { - sb = ( bwe_br == HQ_16k40 ) ? 19 : 17; - } - - /* calculate the envelopes/ the decoded peak coeff./number of the decoded coeff./ the last subbands of the bit-allocated/saturation of bit-allocation */ - ni_end_band = bands; - max_pos_pulse = bands; - for ( k = ni_start_band; k < ni_end_band; k++ ) - { - pd[k] = (float) Rk[k] / band_width[k]; - env[k] = (float) sqrt( Ep[k] / band_width[k] ); - - peak[k] = 0.0f; - count[k] = 0; - if ( npulses[k] != 0 ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - Ep[k] -= y2hat[i] * y2hat[i]; - if ( fabs( y2hat[i] ) > peak[k] ) - { - peak[k] = (float) fabs( y2hat[i] ); - } - - if ( y2hat[i] != 0 ) - { - count[k]++; - } - } - - max_pos_pulse = k; - Ep[k] = Ep[k] > 0 ? (float) sqrt( Ep[k] / band_width[k] ) : 0.0f; - } - else - { - Ep[k] = env[k]; - } - } - - for ( k = ni_start_band; k < ni_end_band; k++ ) - { - /* calculate the noise gain */ - satur = ( pd[k] >= 0.8f ) ? 1 : 0; - if ( satur == 0 && Ep[k] > 0 ) - { - if ( npulses[k] != 0 ) - { - if ( bwidth == SWB ) - { - if ( hqswb_clas != HQ_TRANSIENT ) - { - if ( hqswb_clas == HQ_HARMONIC ) - { - fac = ( k <= sb ) ? 6.0f * ( 1.5f - pd[k] ) * env[k] * Ep[k] / ( peak[k] * peak[k] ) : 1.5f * Ep[k] / peak[k]; - } - else - { - fac = ( k <= sb ) ? 5.0f * ( 1.5f - pd[k] ) * Ep[k] / ( peak[k] ) : 4.0f * Ep[k] / peak[k]; - } - } - else - { - fac = 1.1f; - } - } - else - { - fac = 20.0f * min( 1.0f, ( 1.5f - pd[k] ) ) * env[k] * Ep[k] / ( peak[k] * peak[k] ); - if ( k > 1 && k < ni_end_band - 1 ) - { - if ( count[k + 1] == 0 && env[k] > 0.5f * env[k + 1] && env[k] < 2.0f * env[k - 1] ) - { - fac = 1.5f * env[k + 1] / env[k]; - } - else if ( count[k - 1] == 0 && peak[k] > 2.0f * env[k] ) - { - fac = env[k - 1] / env[k]; - } - } - - if ( k >= ni_end_band - p2a_bands && bwidth == WB ) - { - if ( bw_low * enerH > bw_high * enerL && peak[k] < 2.0f * env[k] ) - { - fac *= ( 2.0f - Ep[k] / peak[k] ); - } - - if ( p2a_flags[k] == 0 && fac > 0 ) - { - fac *= min( 1.25f * env[k] / ( Ep[k] * fac ), 1.5f ); - } - } - } - } - else - { - fac = ( hqswb_clas == HQ_HARMONIC && bwidth == SWB ) ? 0.8f : 1.1f; - } - - ni_gain[k] = fac * Ep[k]; - } - else - { - ni_gain[k] = 0.0; - } - - /* smooth the noise gain between the current frame and the previous frame */ - pos = bwidth == SWB ? ni_end_band - 1 : max( max_pos_pulse, *last_max_pos_pulse ); - - if ( k <= pos ) - { - if ( k > 0 && k < ni_end_band - 1 ) - { - if ( ( env[k] > 0.5f * last_env[k] && env[k] < 2.0f * last_env[k] ) || - ( ( ( env[k] + env[k - 1] + env[k + 1] ) > 0.5f * ( last_env[k] + last_env[k - 1] + last_env[k + 1] ) ) && - ( ( env[k] + env[k - 1] + env[k + 1] ) < 2.0f * ( last_env[k] + last_env[k - 1] + last_env[k + 1] ) ) ) ) - { - if ( ni_gain[k] > last_ni_gain[k] ) - { - ni_gain[k] = 0.2f * ni_gain[k] + 0.8f * last_ni_gain[k]; - } - else - { - ni_gain[k] = 0.6f * ni_gain[k] + 0.4f * last_ni_gain[k]; - } - } - } - else if ( k == ni_end_band - 1 ) - { - if ( ( env[k] > 0.5f * last_env[k] && env[k] < 2.0f * last_env[k] ) || - ( ( env[k] + env[k - 1] ) > 0.5f * ( last_env[k] + last_env[k - 1] ) && - ( env[k] + env[k - 1] ) < 2.0f * ( last_env[k] + last_env[k - 1] ) ) ) - { - if ( ni_gain[k] > last_ni_gain[k] ) - { - ni_gain[k] = 0.2f * ni_gain[k] + 0.8f * last_ni_gain[k]; - } - else - { - ni_gain[k] = 0.6f * ni_gain[k] + 0.4f * last_ni_gain[k]; - } - } - } - } - - /* inject noise into the non-decoded coeffs */ - if ( k >= ni_end_band - p2a_bands && p2a_flags[k] == 0 && bwidth != SWB ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( y2hat[i] != 0 ) - { - y2hat[i] *= 0.8f; - } - } - } - - if ( k == max_pos_pulse && k < bands - p2a_bands && satur != 1 && bwidth != SWB ) - { - j = 0; - if ( ni_gain[k] < 0.01f ) - { - fac = 0.0f; - } - else - { - fac = max( Ep[k] / ni_gain[k], 1.0f ); - } - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( y2hat[i] == 0 ) - { - rand = own_random( &ni_seed ) / PCM16_TO_FLT_FAC; - y2hat[i] += ( fac - ( ( fac - 1.0f ) * j ) / band_width[k] ) * ni_gain[k] * rand; - } - - j++; - } - } - else - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( y2hat[i] == 0 ) - { - rand = own_random( &ni_seed ) / PCM16_TO_FLT_FAC; - y2hat[i] += ni_gain[k] * rand; - } - } - } - } - - mvr2r( env, last_env, ni_end_band ); - mvr2r( ni_gain, last_ni_gain, ni_end_band ); - *last_max_pos_pulse = max_pos_pulse; - - return; -} -#endif diff --git a/lib_com/hq_bit_allocation.c b/lib_com/hq_bit_allocation.c index 4df337011..0fe8682da 100644 --- a/lib_com/hq_bit_allocation.c +++ b/lib_com/hq_bit_allocation.c @@ -40,183 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_bit_allocation() - * - * Assign bits for HQ fine structure coding with PVQ - *--------------------------------------------------------------------------*/ - -void hq_bit_allocation( - const int32_t core_brate, /* i : Core bitrate */ - const int16_t length, /* i : Frame length */ - const int16_t hqswb_clas, /* i : HQ class */ - int16_t *num_bits, /* i/o: Remaining bit budget */ - const int16_t *normqlg2, /* i : Quantized norms */ - const int16_t nb_sfm, /* i : Number sub bands to be encoded */ - const int16_t *sfmsize, /* i : Sub band bandwidths */ - float *noise_level, /* o : HVQ noise level */ - int16_t *R, /* o : Bit allocation per sub band */ - int16_t *Rsubband, /* o : Fractional bit allocation (Q3) */ - int16_t *sum, /* o : Sum of allocated shape bits */ - int16_t *core_sfm, /* o : Last coded band in core */ - const int16_t num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ -) -{ - int16_t sfm_limit = nb_sfm; - int16_t i; - int16_t idx[NB_SFM]; - int16_t wnorm[NB_SFM]; - int16_t avrg_wnorm; - int16_t E_low; - int16_t E_hb_mean; - int16_t E_max; - int16_t i_max; - - - set_s( R, 0, NB_SFM ); - for ( i = 0; i < nb_sfm; i++ ) - { - idx[i] = i; - } - if ( hqswb_clas != HQ_TRANSIENT && hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && core_brate <= HQ_32k ) ) - { - /* 'nf_idx' 2-bits index written later */ - *num_bits -= 2; - } - - if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) - { - if ( core_brate >= HQ_32k ) - { - *num_bits -= HQ_GENERIC_SWB_NBITS2; - } - else - { - *num_bits -= HQ_GENERIC_SWB_NBITS; - } - - if ( length == L_SPEC48k ) - { - *num_bits -= HQ_GENERIC_FB_NBITS; - } - } - - if ( ( length == L_SPEC48k ) && ( hqswb_clas != HQ_HARMONIC ) && ( hqswb_clas != HQ_HVQ ) ) - { - map_quant_weight( normqlg2, wnorm, hqswb_clas == HQ_TRANSIENT ); - } - else - { - mvs2s( normqlg2, wnorm, nb_sfm ); - } - - - if ( hqswb_clas == HQ_HARMONIC ) - { - /* classification and limit bandwidth for bit allocation */ - sfm_limit -= 2; - limit_band_noise_level_calc( wnorm, &sfm_limit, core_brate, noise_level ); - - /* Detect important band in high frequency region */ - E_low = sum_s( wnorm, SFM_G1 ); - i_max = 0; - E_max = MIN16B; - E_hb_mean = 0; - for ( i = SFM_G1; i < nb_sfm; i++ ) - { - E_hb_mean += wnorm[i]; - if ( wnorm[i] > E_max ) - { - E_max = wnorm[i]; - i_max = i; - } - } - E_hb_mean = E_hb_mean >> 4; /* Truncated division by SFM_G1 */ - if ( E_max * 15 < E_low || E_max * 0.67 < E_hb_mean || i_max < sfm_limit ) - { - i_max = 0; - } - - set_s( wnorm + sfm_limit, -20, nb_sfm - sfm_limit ); - if ( i_max > 0 ) - { - wnorm[i_max] = E_max; - } - } - - if ( hqswb_clas == HQ_HVQ ) - { - *sum = 0; - } - else if ( hqswb_clas == HQ_GEN_SWB || ( hqswb_clas == HQ_TRANSIENT && length == L_FRAME32k && core_brate <= HQ_32k ) ) - { - *sum = BitAllocF( wnorm, core_brate, *num_bits, nb_sfm, R, Rsubband, hqswb_clas, num_env_bands ); - } - else if ( length == L_FRAME16k && core_brate <= HQ_32k ) - { - if ( hqswb_clas != HQ_TRANSIENT ) - { - avrg_wnorm = wnorm[10]; - for ( i = 11; i < 18; i++ ) - { - avrg_wnorm += wnorm[i]; - } - - avrg_wnorm /= 8; - for ( i = 0; i < 4; i++ ) - { - if ( wnorm[i] < avrg_wnorm ) - { - wnorm[i] = avrg_wnorm; - } - } - - /* Estimate number of bits per band */ - *sum = BitAllocWB( wnorm, *num_bits, nb_sfm, R, Rsubband ); - } - else - { - reordvct( wnorm, nb_sfm, idx ); - bitalloc( wnorm, idx, *num_bits, nb_sfm, QBIT_MAX2, R, sfmsize, hqswb_clas ); - bitallocsum( R, nb_sfm, sum, Rsubband, *num_bits, length, sfmsize ); - } - } - else - { - reordvct( wnorm, nb_sfm, idx ); - - /* enlarge the wnorm value so that more bits can be allocated to (sfm_limit/2 ~ sfm_limit) range */ - if ( hqswb_clas == HQ_HARMONIC ) - { - for ( i = sfm_limit / 2; i < sfm_limit; i++ ) - { - wnorm[i] = wnorm[sfm_limit / 2 - 1]; - } - } - - bitalloc( wnorm, idx, *num_bits, nb_sfm, QBIT_MAX2, R, sfmsize, hqswb_clas ); - bitallocsum( R, nb_sfm, sum, Rsubband, *num_bits, length, sfmsize ); - } - - /* Find last coded core band */ - *core_sfm = nb_sfm - 1; - if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) - { - *core_sfm = find_last_band( R, nb_sfm ); - } - else if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) - { - *core_sfm = find_last_band( R, nb_sfm ); - if ( *core_sfm < num_env_bands ) - { - *core_sfm = num_env_bands - 1; - } - } - - *num_bits -= *sum; - - return; -} -#endif diff --git a/lib_com/hq_conf.c b/lib_com/hq_conf.c index a67622097..84b843fb4 100644 --- a/lib_com/hq_conf.c +++ b/lib_com/hq_conf.c @@ -42,220 +42,6 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_configure() - * - * Configuration routine for HQ mode - *--------------------------------------------------------------------------*/ - -void hq_configure( - const int16_t length, /* i : Frame length */ - const int16_t hqswb_clas, /* i : HQ SWB class */ - const int32_t core_brate, /* i : Codec bitrate */ - int16_t *num_sfm, /* o : Total number of subbands */ - int16_t *nb_sfm, /* o : Total number of coded bands */ - int16_t *start_norm, /* o : First norm to be SDE encoded */ - int16_t *num_env_bands, /* o : Number coded envelope bands */ - int16_t *numnrmibits, /* o : Number of bits in fall-back norm encoding */ - int16_t *hq_generic_offset, /* o : Freq offset for HQ GENERIC */ - int16_t *sfmsize, /* o : Subband bandwidths */ - int16_t *sfm_start, /* o : Subband start coefficients */ - int16_t *sfm_end /* o : Subband end coefficients */ -) -{ - const int16_t *p_sfmsize; - const int16_t *p_sfm_start; - const int16_t *p_sfm_end; - int16_t i, bw_ext; - - bw_ext = 0; - *start_norm = 0; - - if ( length == L_SPEC48k ) - { - if ( hqswb_clas == HQ_GEN_FB ) - { - *num_sfm = NB_SFM; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - - if ( core_brate >= HQ_32k ) - { - *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; - /* setting start frequency of FD BWE */ - *num_env_bands = SFM_N_STA_10k; - } - else - { - *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4; - *num_env_bands = SFM_N_STA_8k; - } - - *nb_sfm = *num_sfm; - } - else - { - if ( hqswb_clas == HQ_HARMONIC ) - { - *num_sfm = SFM_N_HARM_FB; - *nb_sfm = SFM_N_HARM_FB; - *num_env_bands = SFM_N_HARM_FB; - - p_sfmsize = band_len_harm_float; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - } - else if ( hqswb_clas == HQ_HVQ ) - { - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - *num_sfm = SFM_N_HARM_FB; - *nb_sfm = HVQ_THRES_SFM_24k; - *num_env_bands = *num_sfm - *nb_sfm; - *start_norm = HVQ_THRES_SFM_24k; - } - else - { - *num_sfm = SFM_N_HARM_FB; - *nb_sfm = HVQ_THRES_SFM_32k; - *num_env_bands = *num_sfm - *nb_sfm; - *start_norm = HVQ_THRES_SFM_32k; - } - - p_sfmsize = band_len_harm_float; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - } - else - { - *num_sfm = NB_SFM; - *nb_sfm = *num_sfm; - *num_env_bands = NB_SFM; - - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - } - } - } - else if ( length == L_SPEC32k ) - { - if ( hqswb_clas == HQ_HARMONIC ) - { - *num_sfm = SFM_N_HARM; - *nb_sfm = SFM_N_HARM; - *num_env_bands = SFM_N_HARM; - - p_sfmsize = band_len_harm_float; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - } - else if ( hqswb_clas == HQ_HVQ ) - { - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - *num_sfm = SFM_N_HARM; - *nb_sfm = HVQ_THRES_SFM_24k; - *num_env_bands = *num_sfm - *nb_sfm; - *start_norm = HVQ_THRES_SFM_24k; - } - else - { - *num_sfm = SFM_N_HARM; - *nb_sfm = HVQ_THRES_SFM_32k; - *num_env_bands = *num_sfm - *nb_sfm; - *start_norm = HVQ_THRES_SFM_32k; - } - - p_sfmsize = band_len_harm_float; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - } - else if ( hqswb_clas == HQ_GEN_SWB ) - { - *num_sfm = SFM_N_SWB; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - - if ( core_brate >= HQ_32k ) - { - *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; - /* setting start frequency of FD BWE */ - *num_env_bands = SFM_N_STA_10k; - } - else - { - *hq_generic_offset = HQ_GENERIC_FOFFSET_24K4; - /* setting start frequency of FD BWE */ - *num_env_bands = SFM_N_STA_8k; - } - *nb_sfm = *num_sfm; - } - else - { - /* HQ_NORMAL and HQ_TRANSIENT */ - *num_sfm = SFM_N_SWB; - *nb_sfm = *num_sfm; - *num_env_bands = SFM_N_SWB; - - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - } - } - else if ( length == L_SPEC48k_EXT ) - { - bw_ext = 1; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - *num_sfm = NB_SFM; - } - else if ( length == L_SPEC16k_EXT ) - { - bw_ext = 1; - p_sfmsize = band_len_wb; - p_sfm_start = band_start_wb; - p_sfm_end = band_end_wb; - *num_sfm = SFM_N_WB; - } - else - { - *num_sfm = SFM_N_WB; - *nb_sfm = *num_sfm; - *num_env_bands = SFM_N_WB; - - p_sfmsize = band_len_wb; - p_sfm_start = band_start_wb; - p_sfm_end = band_end_wb; - } - - if ( bw_ext ) - { - for ( i = 0; i < *num_sfm; i++ ) - { - sfmsize[i] = (int16_t) ( 1.25f * p_sfmsize[i] ); - sfm_start[i] = (int16_t) ( 1.25f * p_sfm_start[i] ); - sfm_end[i] = (int16_t) ( 1.25f * p_sfm_end[i] ); - } - *nb_sfm = *num_sfm; - *num_env_bands = *num_sfm; - } - else - { - mvs2s( p_sfmsize, sfmsize, *num_sfm ); - mvs2s( p_sfm_start, sfm_start, *num_sfm ); - mvs2s( p_sfm_end, sfm_end, *num_sfm ); - } - - *numnrmibits = ( *num_env_bands - 1 ) * NORMI_BITS; - - return; -} -#endif void hq_configure_fx( const Word16 length, /* i : Frame length Q0 */ diff --git a/lib_com/hq_conf_fx.c b/lib_com/hq_conf_fx.c index ae3fc58b0..503975363 100644 --- a/lib_com/hq_conf_fx.c +++ b/lib_com/hq_conf_fx.c @@ -7,9 +7,7 @@ #include "cnst.h" /* Audio core constants */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* * hq_configure() @@ -17,7 +15,6 @@ * Configuration routine for HQ mode *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_hq_configure_fx( const Word16 length, /* i : Frame length Q0 */ const Word16 hqswb_clas, /* i : HQ SWB class Q0 */ @@ -279,7 +276,6 @@ void ivas_hq_configure_fx( return; } -#endif void hq_configure_evs_fx( const Word16 length, /* i : Frame length Q0 */ diff --git a/lib_com/hq_tools.c b/lib_com/hq_tools.c index ce65b1777..8e752f0ac 100644 --- a/lib_com/hq_tools.c +++ b/lib_com/hq_tools.c @@ -40,1793 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * Local function prototypes - *--------------------------------------------------------------------------*/ - -static void overlap_hq_bwe( const float *hq_swb_overlap_buf, float *coeff_out1, const int16_t n_swb_overlap_offset, const int16_t n_swb_overlap, const int16_t *R, const int16_t num_env_bands, const int16_t num_sfm, const int16_t *sfm_end ); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_swb_harmonic_calc_norm_envelop() - * - * Calculate normalization envelop - *--------------------------------------------------------------------------*/ - -static void hq_swb_harmonic_calc_norm_envelop( - float *SWB_signal, /* i : input signal */ - float *envelope, /* o : output envelope */ - const int16_t L_swb_norm, /* i : length of normaliztion */ - const int16_t SWB_flength /* i : length of input signal */ -) -{ - int16_t i, lookback, env_index; - int16_t n_freq, n_lag_now, n_lag; - - lookback = L_swb_norm / 2; - env_index = 0; - for ( n_freq = 0; n_freq < lookback; n_freq++ ) - { - n_lag_now = lookback + n_freq; - - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_lag] ); - } - env_index++; - } - - n_lag_now = L_swb_norm; - - for ( n_freq = 0; n_freq < SWB_flength - L_swb_norm; n_freq++ ) - { - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); - } - env_index++; - } - - for ( n_freq = SWB_flength - L_swb_norm, i = 0; n_freq < SWB_flength - lookback; n_freq++, i++ ) - { - n_lag_now = L_swb_norm - i; - - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); - } - env_index++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * noise_level_calc() - * - * Calculate noise level and limited band - *--------------------------------------------------------------------------*/ - -void limit_band_noise_level_calc( - const int16_t *wnorm, /* i : reordered norm of sub-vectors */ - int16_t *limit, /* o : highest band of bit allocation */ - const int32_t core_brate, /* i : core bitrate */ - float *noise_level /* o : noise level */ -) -{ - float ener_limit, ener_sum, fact; - int16_t i; - int16_t nb_sfm; - - nb_sfm = *limit; - ener_limit = 1e-5f; - *noise_level = 0.0f; - for ( i = 0; i < 10; i++ ) - { - ener_limit += wnorm[i]; - *noise_level += (float) abs( wnorm[i + 1] - wnorm[i] ); - } - ener_sum = ener_limit; - - for ( i = 10; i < ( nb_sfm - 1 ); i++ ) - { - ener_sum += wnorm[i]; - *noise_level += (float) abs( wnorm[i + 1] - wnorm[i] ); - } - ener_sum += wnorm[nb_sfm - 1]; - - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - fact = 0.885f; - } - else - { - fact = 0.942f; - } - - i = 9; - while ( ener_limit < ener_sum * fact && i + 1 < nb_sfm ) - { - ener_limit += wnorm[++i]; - } - *limit = i; - - /* calculate noise level for spectrum filling */ - *noise_level /= ener_sum; - if ( *noise_level < 0 ) - { - *noise_level = 0.25f; - } - - *noise_level = 0.25f - *noise_level; - - if ( *noise_level < 0.0f ) - { - *noise_level = 0.0f; - } - - return; -} - -/*--------------------------------------------------------------------------* - * build_nf_codebook() - * - * Build noise-fill codebook for HQ mode - *--------------------------------------------------------------------------*/ - -/*! r: Number of coefficients in nf codebook */ -int16_t build_nf_codebook( - const int16_t flag_32K_env_ho, /* i : Envelope attenuation hangover flag */ - const float *coeff, /* i : Coded spectral coefficients */ - const int16_t *sfm_start, /* i : Subband start indices */ - const int16_t *sfmsize, /* i : Subband widths */ - const int16_t *sfm_end, /* i : Subband end indices */ - const int16_t last_sfm, /* i : Last coded band */ - const int16_t *R, /* i : Per-band bit allocation */ - float *CodeBook, /* o : Noise-fill codebook */ - float *CodeBook_mod /* o : Densified noise-fill codebook */ -) -{ - int16_t sfm_base; - int16_t sfm; - int16_t E_cb_vec; - int16_t i, j; - int16_t cb_size; - - /* Build codebook */ - cb_size = 0; - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - if ( R[sfm] != 0 ) - { - if ( flag_32K_env_ho ) - { - /* Build compressed (+/- 1) noise-fill codebook */ - sfm_base = sfm_start[sfm]; - for ( i = 0; i < sfmsize[sfm] / 8; i++ ) - { - E_cb_vec = 0; - for ( j = sfm_base + i * 8; j < sfm_base + ( i + 1 ) * 8; j++ ) - { - if ( coeff[j] > 0.0f ) - { - CodeBook_mod[cb_size] = 1.0f; - E_cb_vec++; - } - else if ( coeff[j] < 0.0f ) - { - CodeBook_mod[cb_size] = -1.0f; - E_cb_vec++; - } - else - { - CodeBook_mod[cb_size] = 0.0f; - } - cb_size++; - } - - if ( E_cb_vec < 2 ) - { - cb_size -= 8; - } - } - } - else - { - for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) - { - CodeBook[cb_size] = coeff[j]; - cb_size++; - } - } - } - } - - if ( flag_32K_env_ho ) - { - for ( j = 0; j < cb_size; j++ ) - { - if ( CodeBook_mod[j] != 0.0f ) - { - /* Densify codebook */ - CodeBook[j] = sign( CodeBook_mod[j] ) * ( CodeBook_mod[j] * CodeBook_mod[j] + CodeBook_mod[cb_size - j - 1] * CodeBook_mod[cb_size - j - 1] ); - } - else - { - CodeBook[j] = CodeBook_mod[cb_size - j - 1]; - } - } - } - - return cb_size; -} - -/*--------------------------------------------------------------------------* - * find_last_band() - * - * Find the last band which has bits allocated - *--------------------------------------------------------------------------*/ - -/*! r: index of last band */ -int16_t find_last_band( - const int16_t *bitalloc, /* i : bit allocation */ - const int16_t nb_sfm /* i : number of possibly coded bands */ -) -{ - int16_t sfm, core_sfm; - - core_sfm = nb_sfm - 1; - - for ( sfm = nb_sfm - 1; sfm >= 0; sfm-- ) - { - if ( bitalloc[sfm] != 0 ) - { - core_sfm = sfm; - break; - } - } - - return core_sfm; -} - -/*--------------------------------------------------------------------------* - * apply_noisefill_HQ() - * - * Inject noise in non-coded bands - *--------------------------------------------------------------------------*/ - -void apply_noisefill_HQ( - const int16_t *R, /* i : bit allocation */ - const int16_t length, /* i : input frame length */ - const int16_t flag_32K_env_ho, /* i : envelope stability hangover flag */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t last_sfm, /* i : last coded subband */ - const float *CodeBook, /* i : Noise-fill codebook */ - const float *CodeBook_mod, /* i : Densified noise-fill codebook */ - const int16_t cb_size, /* i : Codebook length */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t *sfmsize, /* i : Subband band width */ - float *coeff /* i/o: coded/noisefilled spectrum */ -) -{ - int16_t sfm; - int16_t cb_pos; - float E_cb_vec; - float E_corr; - float cb_buff[64]; - int16_t i, j; - - if ( length >= L_FRAME32k || core_brate != HQ_32k ) - { - /* Read from codebook */ - cb_pos = 0; - - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - if ( R[sfm] == 0 ) - { - if ( flag_32K_env_ho ) - { - E_cb_vec = 0.0f; - if ( sfm < 20 ) - { - for ( i = 0; i < sfmsize[sfm]; i++ ) - { - cb_buff[i] = CodeBook_mod[cb_pos]; - E_cb_vec += cb_buff[i] * cb_buff[i]; - cb_pos++; - if ( cb_pos >= cb_size ) - { - cb_pos = 0; - } - } - } - else - { - for ( i = 0; i < sfmsize[sfm]; i++ ) - { - cb_buff[i] = CodeBook[cb_pos]; - E_cb_vec += cb_buff[i] * cb_buff[i]; - cb_pos++; - if ( cb_pos >= cb_size ) - { - cb_pos = 0; - } - } - } - - E_corr = E_cb_vec / ( (float) sfmsize[sfm] ); - E_corr = 1.0f / (float) sqrt( E_corr ); - - for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) - { - coeff[j] = cb_buff[j - sfm_start[sfm]] * E_corr; - } - } - else - { - for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) - { - coeff[j] = CodeBook[cb_pos]; - cb_pos++; - cb_pos = ( cb_pos >= cb_size ) ? 0 : cb_pos; - } - } - } - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * harm_bwe_fine() - * - * Prepare harmonic BWE fine structure - *--------------------------------------------------------------------------*/ - -void harm_bwe_fine( - const int16_t *R, /* i : bit allocation */ - const int16_t last_sfm, /* i : last coded subband */ - const int16_t high_sfm, /* i : higher transition band to BWE */ - const int16_t num_sfm, /* i : total number of bands */ - const int16_t *norm, /* i : quantization indices for norms */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - int16_t *prev_L_swb_norm, /* i/o: last normalize length */ - float *coeff, /* i/o: coded/noisefilled normalized spectrum */ - float *coeff_out, /* o : coded/noisefilled spectrum */ - float *coeff_fine /* o : BWE fine structure */ -) -{ - int16_t sfm; - int16_t i; - float normq; - float SWB_signal[L_HARMONIC_EXC]; - float envelope[L_HARMONIC_EXC]; - float *src, *dst, *end; - - int16_t norm_width = 64; - - /* shape the spectrum */ - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - if ( R[sfm] != 0 ) - { - normq = dicn[norm[sfm]]; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = coeff[i] * normq; - } - } - else - { - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = 0.0f; - } - } - } - - /* excitation replication */ - mvr2r( coeff_out, SWB_signal, L_HARMONIC_EXC ); - calc_normal_length( HQ_CORE, coeff_out, HQ_HARMONIC, -1, &norm_width, prev_L_swb_norm ); - hq_swb_harmonic_calc_norm_envelop( SWB_signal, envelope, norm_width, L_HARMONIC_EXC ); - - /* Normalize with envelope */ - for ( i = 0; i < L_HARMONIC_EXC; i++ ) - { - SWB_signal[i] = SWB_signal[i] / envelope[i]; - } - - dst = coeff_fine + sfm_end[last_sfm]; - end = coeff_fine + sfm_end[num_sfm - 1]; - - if ( ( sfm_end[last_sfm] - sfm_end[high_sfm] ) <= L_HARMONIC_EXC - START_EXC ) - { - src = SWB_signal + START_EXC + ( sfm_end[last_sfm] - sfm_end[high_sfm] ); - } - else - { - src = SWB_signal + L_HARMONIC_EXC - 1; - } - - while ( dst < end ) - { - while ( dst < end && src < &SWB_signal[L_HARMONIC_EXC] ) - { - *dst++ = *src++; - } - src--; - - while ( dst < end && src >= &SWB_signal[START_EXC] ) - { - *dst++ = *src--; - } - src++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * hvq_bwe_fine() - * - * Prepare HVQ BWE fine structure - *--------------------------------------------------------------------------*/ - -void hvq_bwe_fine( - const int16_t last_sfm, /* i : last coded subband */ - const int16_t num_sfm, /* i : total number of bands */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t *peak_idx, /* i : Peak index */ - const int16_t Npeaks, /* i : Number of peaks */ - int16_t *peak_pos, /* i/o: Peak positions */ - int16_t *prev_L_swb_norm, /* i/o: last normalize length */ - float *coeff, /* i/o: coded/noisefilled normalized spectrum */ - int16_t *bwe_peaks, /* o : Positions of peaks in BWE */ - float *coeff_fine /* o : HVQ BWE fine structure */ -) -{ - int16_t i, j; - float SWB_signal[L_HARMONIC_EXC]; - float envelope[L_HARMONIC_EXC]; - float *src, *dst, *end; - int16_t *peak_dst, *peak_src; - int16_t norm_width = 64; - - /* excitation replication */ - mvr2r( coeff, SWB_signal, L_HARMONIC_EXC ); - calc_normal_length( HQ_CORE, coeff, HQ_HVQ, -1, &norm_width, prev_L_swb_norm ); - - hq_swb_harmonic_calc_norm_envelop( SWB_signal, envelope, norm_width, L_HARMONIC_EXC ); - - /* Normalize with envelope */ - for ( i = 0; i < L_HARMONIC_EXC; i++ ) - { - SWB_signal[i] = SWB_signal[i] / envelope[i]; - } - - dst = coeff_fine; - end = coeff_fine + sfm_end[num_sfm - 1] - sfm_end[last_sfm]; - - src = SWB_signal + START_EXC; - peak_src = peak_pos + START_EXC; - - for ( i = 0; i < Npeaks; i++ ) - { - if ( peak_idx[i] < L_HARMONIC_EXC ) - { - peak_pos[peak_idx[i]] = 1; - } - } - - i = L_HARMONIC_EXC - 1; - while ( i-- > 0 ) - { - if ( peak_pos[i] == 1 ) - { - break; - } - } - - if ( i < 180 ) - { - i = 180; - } - - for ( j = L_HARMONIC_EXC - 1; j > i + 1; j-- ) - { - SWB_signal[j] = 0.0f; - } - - peak_dst = bwe_peaks + sfm_end[last_sfm]; - while ( dst < end ) - { - while ( dst < end && src < &SWB_signal[L_HARMONIC_EXC] ) - { - *dst++ = *src++; - *peak_dst++ = *peak_src++; - } - peak_src--; - src--; - - while ( dst < end && src >= &SWB_signal[START_EXC] ) - { - *dst++ = *src--; - *peak_dst++ = *peak_src--; - } - peak_src++; - src++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * hq_fold_bwe() - * - * HQ mode folding BWE - *--------------------------------------------------------------------------*/ - -void hq_fold_bwe( - const int16_t last_sfm, /* i : last coded subband */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t num_sfm, /* i : Number of subbands */ - float *coeff /* i/o: coded/noisefilled normalized spectrum */ -) -{ - int16_t low_coeff; - int16_t first_coeff; - float *src, *dst, *end; - - /* Find replication range for BWE */ - low_coeff = sfm_end[last_sfm] >> 1; - src = coeff + sfm_end[last_sfm] - 1; - - first_coeff = sfm_end[last_sfm]; - dst = coeff + sfm_end[last_sfm]; - end = coeff + sfm_end[num_sfm - 1]; - - /* Generate BWE with spectral folding */ - while ( dst < end ) - { - while ( dst < end && src >= &coeff[low_coeff] ) - { - *dst++ = *src--; - } - - src++; - - while ( dst < end && src < &coeff[first_coeff] ) - { - *dst++ = *src++; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * apply_nf_gain() - * - * Apply noise fill gain - *--------------------------------------------------------------------------*/ - -void apply_nf_gain( - const int16_t nf_idx, /* i : noise fill gain index */ - const int16_t last_sfm, /* i : last coded subband */ - const int16_t *R, /* i : bit allocation */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - float *coeff /* i/o: coded/noisefilled normalized spectrum */ -) -{ - int16_t sfm; - int16_t j; - float nf_scale; - - nf_scale = 1.0f / ( 1 << nf_idx ); - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - if ( R[sfm] == 0 ) - { - for ( j = sfm_start[sfm]; j < sfm_end[sfm]; j++ ) - { - /* Scale NoiseFill */ - coeff[j] = coeff[j] * nf_scale; - } - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * hq_generic_fine() - * - * Prepare HQ SWB BWE fine structure - *--------------------------------------------------------------------------*/ - -void hq_generic_fine( - float *coeff, /* i : coded/noisefilled normalized spectrum */ - const int16_t last_sfm, /* i : Last coded band */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ - float *coeff_out1 /* o : HQ SWB BWE input */ -) -{ - int16_t sfm; - int16_t i; - float multi; - - multi = 1.0f; - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - if ( coeff[i] == 0.f ) - { - coeff_out1[i] = (float) multi * ( own_random( bwe_seed ) > 0 ? 1.0f : -1.0f ) * 0.5f; - } - else - { - coeff_out1[i] = coeff[i]; - } - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * harm_bwe() - * - * HQ Harmonic BWE - *--------------------------------------------------------------------------*/ - -void harm_bwe( - const float *coeff_fine, /* i : fine structure for BWE */ - const float *coeff, /* i : coded/noisefilled normalized spectrum */ - const int16_t num_sfm, /* i : Number of subbands */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t last_sfm, /* i : last coded subband */ - const int16_t high_sfm, /* i : higher transition band to BWE */ - const int16_t *R, /* i : bit allocation */ - const int16_t prev_hq_mode, /* i : previous hq mode */ - int16_t *norm, /* i/o: quantization indices for norms */ - float *noise_level, /* i/o: noise levels for harmonic modes */ - float *prev_noise_level, /* i/o: noise factor in previous frame */ - int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ - float *coeff_out, /* o : coded/noisefilled spectrum */ - const int16_t element_mode /* i : element mode */ -) -{ - int16_t i, j; - int16_t sfm; - float normq; - float norm_adj; - float E_L; - - float alfa = 0.5f; - float alpha, beta; - int16_t idx; - float fac; - float *src, *dst; - - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - if ( R[sfm] == 0 ) - { - normq = dicn[norm[sfm]]; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = coeff[i] * normq; - } - } - } - noise_level[1] = noise_level[0]; - - /* shaping the BWE spectrum further by envelopes and noise factors */ - noise_level[0] = 0.9f * prev_noise_level[0] + 0.1f * noise_level[0]; - noise_level[1] = 0.9f * prev_noise_level[1] + 0.1f * noise_level[1]; - - if ( prev_hq_mode == HQ_NORMAL || prev_hq_mode == HQ_GEN_SWB ) - { - if ( noise_level[0] < 0.25f ) - { - noise_level[0] *= 4.0f; - } - - if ( noise_level[1] < 0.25f ) - { - noise_level[1] *= 4.0f; - } - } - - E_L = EPSILON; - for ( i = last_sfm + 1; i < num_sfm; i++ ) - { - E_L = EPSILON; - for ( j = sfm_start[i]; j < sfm_end[i]; j++ ) - { - E_L += coeff_fine[j] * coeff_fine[j]; - } - E_L = (float) sqrt( ( sfm_end[i] - sfm_start[i] ) / E_L ); - - normq = dicn[norm[i]]; - norm_adj = normq * E_L; - alfa = ( i > 27 ) ? noise_level[1] : noise_level[0]; - beta = (float) sqrt( 1.0f - alfa ); - if ( element_mode > EVS_MONO ) - { - alpha = (float) sqrt( alfa ); - } - else - { - alpha = (float) sqrt( alfa ) * 0.5f; - } - - for ( sfm = sfm_start[i]; sfm < sfm_end[i]; sfm++ ) - { - coeff_out[sfm] = ( beta * coeff_fine[sfm] * norm_adj + alpha * own_random( bwe_seed ) / PCM16_TO_FLT_FAC * normq ); - } - } - - prev_noise_level[0] = noise_level[0]; - prev_noise_level[1] = noise_level[1]; - idx = 16; - src = &coeff_out[sfm_end[high_sfm] + L_HARMONIC_EXC - START_EXC]; - dst = src - 1; - - for ( i = 0; i < idx; i++ ) - { - fac = i / ( 2.0f * idx ); - *src++ *= 0.5f + fac; - *dst-- *= 0.5f + fac; - } - if ( num_sfm == 33 ) - { - set_f( &coeff_out[800], 0, 160 ); - } - return; -} - -/*--------------------------------------------------------------------------* - * HVQ_bwe() - * - * HQ HVQ BWE - *--------------------------------------------------------------------------*/ - -void hvq_bwe( - const float *coeff, /* i : coded/noisefilled spectrum */ - const float *coeff_fine, /* i : BWE fine structure */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t *sfm_len, /* i : Subband length */ - const int16_t last_sfm, /* i : last coded subband */ - const int16_t prev_hq_mode, /* i : previous hq mode */ - const int16_t *bwe_peaks, /* i : HVQ bwe peaks */ - const int16_t bin_th, /* i : HVQ transition bin */ - const int16_t num_sfm, /* i : Number of bands */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t *R, /* i : Bit allocation */ - int16_t *norm, /* i/o: quantization indices for norms */ - float *noise_level, /* i/o: noise levels for harmonic modes */ - float *prev_noise_level, /* i/o: noise factor in previous frame */ - int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ - float *coeff_out /* o : coded/noisefilled spectrum */ -) -{ - int16_t i, j; - int16_t N; - float normq; - float E_L; - - int16_t bwe_noise_th = 0; - int16_t peak_band, low, high, sel_norm; - int16_t norm_ind; - float tmp_norm = 0; - int16_t idx; - float fac; - float *src, *dst; - int16_t istart, iend; - int16_t offset = sfm_end[last_sfm]; - - mvr2r( coeff, coeff_out, L_FRAME48k ); - - bwe_noise_th = bin_th + ( sfm_end[num_sfm - 1] - bin_th ) / HVQ_BWE_NOISE_BANDS; - logqnorm( &coeff_out[sfm_start[last_sfm]], &norm[last_sfm], 40, sfm_len[last_sfm], thren_HQ ); - - /* shaping the BWE spectrum further by envelopes and noise factors */ - noise_level[0] = 0.9f * prev_noise_level[0] + 0.1f * noise_level[0]; - noise_level[1] = 0.9f * prev_noise_level[1] + 0.1f * noise_level[1]; - - if ( prev_hq_mode == HQ_NORMAL || prev_hq_mode == HQ_GEN_SWB ) - { - if ( noise_level[0] < 0.25f ) - { - noise_level[0] *= 4.0f; - } - - if ( noise_level[1] < 0.25f ) - { - noise_level[1] *= 4.0f; - } - } - - norm_ind = last_sfm + 1; - - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - peak_band = 0; - E_L = EPSILON; - for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind + 1]; i++ ) - { - if ( bwe_peaks[i] ) - { - peak_band = 1; - } - E_L += coeff_fine[i - offset] * coeff_fine[i - offset]; - } - E_L = (float) sqrt( ( sfm_end[norm_ind + 1] - sfm_start[norm_ind] ) / E_L ); - - normq = 0.1f * dicn[norm[norm_ind - 1]] + 0.8f * dicn[norm[norm_ind]] + 0.1f * dicn[norm[norm_ind + 1]]; - tmp_norm = 0.1f * dicn[norm[norm_ind]] + 0.8f * dicn[norm[norm_ind + 1]] + 0.1f * dicn[norm[norm_ind + 2]]; - - istart = sfm_start[norm_ind]; - iend = istart + sfm_len[norm_ind] / 2; - for ( i = istart; i < iend; i++ ) - { - coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * normq; - } - - j = 0; - N = sfm_len[norm_ind] / 2 + sfm_len[norm_ind + 1] / 2 - 1; - istart = iend; - iend = sfm_start[norm_ind + 1] + sfm_len[norm_ind + 1] / 2; - for ( i = istart; i < iend; i++ ) - { - coeff_out[i] = ( (float) ( N - j ) / N * normq + (float) j / N * tmp_norm ) * ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ); - j++; - } - - istart = iend; - iend = sfm_end[norm_ind + 1]; - for ( i = istart; i < iend; i++ ) - { - coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * tmp_norm; - } - - norm_ind += 2; - } - - for ( ; norm_ind < num_sfm; norm_ind++ ) - { - if ( R[norm_ind] == 0 ) - { - peak_band = 0; - E_L = EPSILON; - - for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) - { - if ( bwe_peaks[i] ) - { - peak_band = 1; - break; - } - } - - istart = sfm_start[norm_ind]; - iend = sfm_end[norm_ind]; - - if ( peak_band == 1 && norm_ind > last_sfm + 1 && norm_ind < num_sfm - 1 ) - { - istart -= sfm_len[norm_ind - 1] / 2; - iend += sfm_len[norm_ind + 1] / 2; - } - - for ( i = istart; i < iend; i++ ) - { - E_L += coeff_fine[i - offset] * coeff_fine[i - offset]; - } - E_L = (float) sqrt( ( iend - istart ) / E_L ); - - if ( peak_band ) - { - if ( norm_ind + 1 > num_sfm - 1 ) - { - normq = 0.15f * dicn[norm[norm_ind - 1]] + 0.85f * dicn[norm[norm_ind]]; - } - else - { - normq = 0.1f * dicn[norm[norm_ind - 1]] + 0.8f * dicn[norm[norm_ind]] + 0.1f * dicn[norm[norm_ind + 1]]; - } - } - else - { - low = norm_ind; - high = min( norm_ind + 1, num_sfm - 1 ); - sel_norm = norm[norm_ind - 1]; - for ( j = low; j <= high; j++ ) - { - if ( norm[j] > sel_norm ) - { - sel_norm = norm[j]; - } - } - normq = dicn[sel_norm]; - } - - for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) - { - coeff_out[i] = ( ( 1.0f - noise_level[i / bwe_noise_th] ) * coeff_fine[i - offset] * E_L + noise_level[i / bwe_noise_th] * own_random( bwe_seed ) / PCM16_TO_FLT_FAC ) * normq; - } - } - else /* R[norm_ind] > 0 */ - { - for ( i = sfm_start[norm_ind]; i < sfm_end[norm_ind]; i++ ) - { - coeff_out[i] = coeff[i]; /* Scaling already applied */ - } - } - } - - prev_noise_level[0] = noise_level[0]; - prev_noise_level[1] = noise_level[1]; - idx = 16; - src = &coeff_out[sfm_end[last_sfm] + L_HARMONIC_EXC - START_EXC]; - dst = src - 1; - - for ( i = 0; i < idx; i++ ) - { - fac = i / ( 2.0f * idx ); - *src++ *= 0.5f + fac; - *dst-- *= 0.5f + fac; - } - - return; -} - - -/*-------------------------------------------------------------------* - * hvq_concat_bands() - * - * Compute the band limits for concatenated bands for PVQ target signal in HVQ - *--------------------------------------------------------------------------*/ - -void hvq_concat_bands( - const int16_t pvq_bands, /* i : Number of bands in concatenated PVQ target */ - const int16_t *sel_bnds, /* i : Array of selected high bands */ - const int16_t n_sel_bnds, /* i : Number of selected high bands */ - int16_t *hvq_band_start, /* o : Band start indices */ - int16_t *hvq_band_width, /* o : Band widths */ - int16_t *hvq_band_end /* o : Band end indices */ -) -{ - int16_t k; - int16_t s; - - s = 0; - - for ( k = 0; k < pvq_bands; k++ ) - { - - if ( k >= pvq_bands - n_sel_bnds ) - { - hvq_band_start[k] = hvq_band_end[k - 1]; - hvq_band_width[k] = band_len_harm_float[sel_bnds[s]]; - hvq_band_end[k] = hvq_band_end[k - 1] + band_len_harm_float[sel_bnds[s]]; - s++; - } - else - { - hvq_band_start[k] = k * HVQ_PVQ_COEFS; - hvq_band_width[k] = HVQ_PVQ_COEFS; - hvq_band_end[k] = ( k + 1 ) * HVQ_PVQ_COEFS; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * map_hq_generic_fenv_norm() - * - * mapping high frequency envelope to high band norm - *--------------------------------------------------------------------------*/ - -void map_hq_generic_fenv_norm( - const int16_t hqswb_clas, /* i : signal classification flag */ - const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ - int16_t *ynrm, /* o : high band norm indices */ - int16_t *normqlg2, /* o : high band norm values */ - const int16_t num_env_bands, /* i : Number coded envelope bands */ - const int16_t nb_sfm, /* i : Number of envelope bands */ - const int16_t hq_generic_offset /* i : Freq offset for HQ GENERIC */ -) -{ - float env_fl[17]; - int16_t i, idx; - - set_f( env_fl, 0, 17 ); - if ( hq_generic_offset == 144 ) - { - env_fl[0] = hq_generic_fenv[1]; - env_fl[1] = hq_generic_fenv[2] * 0.6640625f + hq_generic_fenv[3] * 0.3359375f; - env_fl[2] = hq_generic_fenv[3] * 0.6640625f + hq_generic_fenv[4] * 0.3359375f; - env_fl[3] = hq_generic_fenv[4] * 0.3359375f + hq_generic_fenv[5] * 0.6640625f; - env_fl[4] = hq_generic_fenv[5] * 0.3359375f + hq_generic_fenv[6] * 0.6640625f; - env_fl[5] = hq_generic_fenv[7]; - env_fl[6] = hq_generic_fenv[8] * 0.75f + hq_generic_fenv[9] * 0.25f; - env_fl[7] = hq_generic_fenv[9] * 0.75f + hq_generic_fenv[10] * 0.25f; - env_fl[8] = hq_generic_fenv[10] * 0.25f + hq_generic_fenv[11] * 0.75f; - } - else - { - env_fl[0] = hq_generic_fenv[0] * 0.3359375f + hq_generic_fenv[1] * 0.6640625f; - env_fl[1] = hq_generic_fenv[1] * 0.3359375f + hq_generic_fenv[2] * 0.6640625f; - env_fl[2] = hq_generic_fenv[3]; - env_fl[3] = hq_generic_fenv[4] * 0.6640625f + hq_generic_fenv[5] * 0.3359375f; - env_fl[4] = hq_generic_fenv[5] * 0.6640625f + hq_generic_fenv[6] * 0.3359375f; - env_fl[5] = hq_generic_fenv[6] * 0.3359375f + hq_generic_fenv[7] * 0.6640625f; - env_fl[6] = hq_generic_fenv[7] * 0.3359375f + hq_generic_fenv[8] * 0.6640625f; - env_fl[7] = hq_generic_fenv[8] * 0.3359375f + hq_generic_fenv[9] * 0.6640625f; - env_fl[8] = hq_generic_fenv[9] * 0.3359375f + hq_generic_fenv[10] * 0.6640625f; - env_fl[9] = hq_generic_fenv[10] * 0.25f + hq_generic_fenv[11] * 0.75f; - env_fl[10] = hq_generic_fenv[12]; - env_fl[11] = hq_generic_fenv[13]; - } - - if ( hqswb_clas == HQ_GEN_FB ) - { - if ( hq_generic_offset == 144 ) - { - env_fl[9] = hq_generic_fenv[12]; - env_fl[10] = hq_generic_fenv[12] * 0.25f + hq_generic_fenv[13] * 0.75f; - env_fl[11] = hq_generic_fenv[13] * 0.5f + hq_generic_fenv[14] * 0.5f; - env_fl[12] = hq_generic_fenv[14]; - env_fl[13] = hq_generic_fenv[14]; - } - else - { - env_fl[12] = hq_generic_fenv[14]; - env_fl[13] = hq_generic_fenv[14] * 0.25f + hq_generic_fenv[15] * 0.75f; - env_fl[14] = hq_generic_fenv[15] * 0.5f + hq_generic_fenv[16] * 0.5f; - env_fl[15] = hq_generic_fenv[16]; - env_fl[16] = hq_generic_fenv[16]; - } - } - - logqnorm_2( env_fl, 40, num_env_bands, nb_sfm, ynrm + num_env_bands, normqlg2 + num_env_bands, thren_HQ ); - - for ( i = num_env_bands; i < nb_sfm; ++i ) - { - idx = min( ynrm[i] + 10, 39 ); - normqlg2[i] = dicnlg2_float[idx]; - } - - return; -} - -/*-------------------------------------------------------------------* - * update_rsubband() - * - * Update subband bit allocation - *--------------------------------------------------------------------------*/ - -static void update_rsubband( - const int16_t nb_sfm, /* i : Number of sub-bands */ - int16_t *Rsubband, /* o : Sub-bands bit allocation */ - int16_t b_add_bits_denv /* i/o: Bits to redistribute */ -) -{ - int16_t i; - - /* updating bit allocation */ - while ( b_add_bits_denv > 0 ) - { - i = nb_sfm - 1; - while ( b_add_bits_denv > 0 && i >= 0 ) - { - if ( Rsubband[i] > 24 ) - { - Rsubband[i] -= 8; - b_add_bits_denv--; - } - i--; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_nor_delta_hf() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: Number of bits consumed for the delta coding */ -int16_t get_nor_delta_hf( - Decoder_State *st, /* i/o: Decoder state */ - int16_t *ynrm, /* i/o: norm indices */ - int16_t *Rsubband, /* i/o: sub-band bit allocation */ - const int16_t num_env_bands, /* i : Number coded envelope bands */ - const int16_t nb_sfm, /* i : Number of envelope bands */ - const int16_t core_sfm ) /* i : index of the end band for core */ -{ - int16_t i; - int16_t delta, bitsforDelta, add_bits_denv; - - add_bits_denv = 0; - if ( core_sfm >= num_env_bands ) - { - bitsforDelta = get_next_indice( st, 2 ); - bitsforDelta += 2; - add_bits_denv += 2; - - for ( i = num_env_bands; i < nb_sfm; ++i ) - { - if ( Rsubband[i] != 0 ) - { - delta = get_next_indice( st, bitsforDelta ); - ynrm[i] += delta - ( 1 << ( bitsforDelta - 1 ) ); - - /* safety check in case of bit errors */ - if ( ynrm[i] < 0 || ynrm[i] > 39 ) - { - ynrm[i] = 39; - st->BER_detect = 1; - } - add_bits_denv += bitsforDelta; - } - } - - update_rsubband( nb_sfm, Rsubband, add_bits_denv ); - } - - return add_bits_denv; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * calc_nor_delta_hf() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: Number of bits consumed for the delta coding */ -int16_t calc_nor_delta_hf( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *t_audio, /* i : transform-domain coefficients */ - int16_t *ynrm, /* i/o: norm indices */ - int16_t *Rsubband, /* i/o: sub-band bit allocation */ - const int16_t num_env_bands, /* i : Number coded envelope bands */ - const int16_t nb_sfm, /* i : Number of envelope bands */ - const int16_t *sfmsize, /* i : band length */ - const int16_t *sfm_start, /* i : Start index of bands */ - const int16_t core_sfm /* i : index of the end band for core */ -) -{ - int16_t i; - int16_t ynrm_t[44], normqlg2_t[44]; - int16_t delta, max_delta, min_delta, bitsforDelta, add_bits_denv; - - max_delta = -100; - calc_norm( t_audio, ynrm_t, normqlg2_t, 0, nb_sfm, sfmsize, sfm_start ); - add_bits_denv = 0; - for ( i = num_env_bands; i < nb_sfm; ++i ) - { - if ( Rsubband[i] != 0 ) - { - delta = ynrm_t[i] - ynrm[i]; - if ( delta > 0 ) - { - delta += 1; - } - else - { - delta = -delta; - } - if ( delta > max_delta ) - { - max_delta = delta; - } - } - } - if ( core_sfm >= num_env_bands ) - { - if ( max_delta < 16 ) - { - bitsforDelta = 2; - while ( max_delta >= 2 ) - { - bitsforDelta++; - max_delta >>= 1; - } - } - else - { - bitsforDelta = 5; - } - max_delta = ( 1 << ( bitsforDelta - 1 ) ) - 1; - min_delta = ( max_delta + 1 ) * ( -1 ); - - /* updating norm & storing delta norm */ - add_bits_denv = 2; - push_indice( hBstr, IND_DELTA_ENV_HQ, bitsforDelta - 2, 2 ); - for ( i = num_env_bands; i < nb_sfm; ++i ) - { - if ( Rsubband[i] != 0 ) - { - delta = ynrm_t[i] - ynrm[i]; - if ( delta > max_delta ) - { - delta = max_delta; - } - else if ( delta < min_delta ) - { - delta = min_delta; - } - push_indice( hBstr, IND_DELTA_ENV_HQ, delta - min_delta, bitsforDelta ); - ynrm[i] += delta; - add_bits_denv += bitsforDelta; - } - } - - /* updating bit allocation */ - update_rsubband( nb_sfm, Rsubband, add_bits_denv ); - } - - return add_bits_denv; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hq_generic_bwe() - * - * HQ GENERIC BWE - *--------------------------------------------------------------------------*/ - -void hq_generic_bwe( - const int16_t HQ_mode, /* i : HQ mode */ - float *coeff_out1, /* i/o: BWE input & temporary buffer */ - const float *hq_generic_fenv, /* i : SWB frequency envelopes */ - float *coeff_out, /* o : SWB signal in MDCT domain */ - const int16_t hq_generic_offset, /* i : frequency offset for representing hq generic*/ - int16_t *prev_L_swb_norm, /* i/o: last normalize length */ - const int16_t hq_generic_exc_clas, /* i : hq generic hf excitation class */ - const int16_t *sfm_end, /* i : End of bands */ - const int16_t num_sfm, /* i : Number of bands */ - const int16_t num_env_bands, /* i : Number of coded envelope bands */ - const int16_t *R /* i : Bit allocation */ -) -{ - int16_t n_swb_overlap_offset, n_swb_overlap; - float hq_swb_overlap_buf[640]; - - n_swb_overlap_offset = swb_bwe_subband[0] + hq_generic_offset; - - n_swb_overlap = sfm_end[num_env_bands - 1] - n_swb_overlap_offset; - mvr2r( &coeff_out[n_swb_overlap_offset], hq_swb_overlap_buf, n_swb_overlap + sfm_end[num_sfm - 1] - sfm_end[num_env_bands - 1] ); - - hq_generic_hf_decoding( HQ_mode, coeff_out1, hq_generic_fenv, coeff_out, hq_generic_offset, prev_L_swb_norm, hq_generic_exc_clas, R ); - - overlap_hq_bwe( hq_swb_overlap_buf, coeff_out, n_swb_overlap_offset, n_swb_overlap, R, num_env_bands, num_sfm, sfm_end ); - - return; -} - -/*--------------------------------------------------------------------------* - * hq_wb_nf_bwe() - * - * HQ WB noisefill and BWE - *--------------------------------------------------------------------------*/ - -void hq_wb_nf_bwe( - const float *coeff, /* i : coded/noisefilled normalized spectrum */ - const int16_t is_transient, /* i : is transient flag */ - const int16_t prev_bfi, /* i : previous bad frame indicator */ - const float *normq_v, /* i : norms */ - const int16_t num_sfm, /* i : Number of subbands */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t *sfmsize, /* i : Subband band width */ - const int16_t last_sfm, /* i : last coded subband */ - const int16_t *R, /* i : bit allocation */ - const int16_t prev_is_transient, /* i : previous transient flag */ - float *prev_normq, /* i/o: previous norms */ - float *prev_env, /* i/o: previous noise envelopes */ - int16_t *bwe_seed, /* i/o: random seed for generating BWE input */ - float *prev_coeff_out, /* i/o: decoded spectrum in previous frame */ - int16_t *prev_R, /* i/o: bit allocation info. in previous frame */ - float *coeff_out /* o : coded/noisefilled spectrum */ -) -{ - int16_t i; - int16_t sfm; - int16_t total_bit; - int16_t num; - - float bitalloc_var; - float sharp; - float mean; - float peak; - float fabs_coeff_out; - float harm_para; - float alfa = 0.5; - float env; - float step; - float min_coef; - float avrg_norm; - float prev_avrg_norm; - - if ( is_transient == 0 ) - { - if ( prev_bfi == 1 ) - { - mvr2r( normq_v, prev_normq, SFM_N_WB ); - } - - /* the variance of bit allocation */ - total_bit = 0; - bitalloc_var = 0.0f; - for ( sfm = 8; sfm <= last_sfm; sfm++ ) - { - bitalloc_var += (float) abs( R[sfm] - R[sfm - 1] ); - total_bit += R[sfm]; - } - bitalloc_var = ( last_sfm > 8 && total_bit > 0 ) ? ( bitalloc_var / total_bit ) : 0; - - /* calculate the peak-average ratio of saturable subbands */ - num = 0; - sharp = EPSILON; - for ( sfm = last_sfm; sfm >= 8; sfm-- ) - { - if ( R[sfm] >= rat_flt[sfm] * sfmsize[sfm] ) - { - peak = 0.0f; - mean = EPSILON; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - fabs_coeff_out = (float) fabs( coeff_out[i] ); - mean += fabs_coeff_out; - if ( fabs_coeff_out > peak ) - { - peak = fabs_coeff_out; - } - } - sharp += sfmsize[sfm] * peak / mean; - num++; - } - } - - sharp = ( num != 0 ) ? 2.0f * num / sharp : 1.0f; - harm_para = sharp; - if ( last_sfm == 0 ) - { - step = 0; - } - else - { - step = 5.0f * sharp / last_sfm; - } - alfa = 2.5f; - - /* fill noise for the insaturable subbands */ - for ( sfm = 0; sfm < num_sfm; sfm++ ) - { - env = 0.0f; - if ( R[sfm] != 0 && R[sfm] < 1.5f * sfmsize[sfm] ) - { - /* calculate the energy of the undecoded coefficients */ - peak = 0.0f; - min_coef = FLT_MAX; - env = normq_v[sfm] * normq_v[sfm] * sfmsize[sfm]; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - fabs_coeff_out = (float) fabs( coeff_out[i] ); - if ( fabs_coeff_out < min_coef && coeff_out[i] != 0 ) - { - min_coef = fabs_coeff_out; - } - if ( fabs_coeff_out > peak ) - { - peak = fabs_coeff_out; - } - env -= coeff_out[i] * coeff_out[i]; - } - - if ( env > 0 ) - { - if ( sfm == 0 ) - { - avrg_norm = normq_v[0] + normq_v[1] + normq_v[2]; - prev_avrg_norm = prev_normq[0] + prev_normq[1] + prev_normq[2]; - } - else if ( sfm == 25 ) - { - avrg_norm = normq_v[23] + normq_v[24] + normq_v[25]; - prev_avrg_norm = prev_normq[23] + prev_normq[24] + prev_normq[25]; - } - else - { - avrg_norm = normq_v[sfm - 1] + normq_v[sfm] + normq_v[sfm + 1]; - prev_avrg_norm = prev_normq[sfm - 1] + prev_normq[sfm] + prev_normq[sfm + 1]; - } - - if ( bitalloc_var > 0.3f || 4.0f * normq_v[sfm] < peak ) - { - /* calculate the noise magnitude of harmonic signal */ - env = (float) ( avrg_norm * harm_para * sqrt( env / sfmsize[sfm] ) / peak ); - } - else - { - /* calculate the noise magnitude of normal signal */ - env = sharp * (float) sqrt( env / sfmsize[sfm] ); - if ( alfa * normq_v[sfm] < peak ) - { - env *= env / peak; - } - sharp += step; - } - if ( env > 0.5f * min_coef ) - { - env = 0.5f * min_coef; - } - - if ( prev_bfi == 1 ) - { - prev_env[sfm] = env; - } - /* smooth the noise magnitudes between inter-frame */ - if ( prev_avrg_norm > 0.5f * avrg_norm && prev_avrg_norm < 2.0f * avrg_norm && prev_is_transient == 0 ) - { - env = 0.5f * env + 0.5f * prev_env[sfm]; - } - - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - if ( coeff[i] == 0 ) - { - coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; - coeff_out[i] *= env; - } - } - } - else - { - env = 0.0f; - } - } - else if ( R[sfm] == 0 ) - { - /* fill random noise for 0 bit subbands */ - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - if ( coeff[i] == 0 ) - { - coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; - coeff_out[i] *= normq_v[sfm]; - } - } - - env = normq_v[sfm]; - } - if ( sfm == SFM_N_WB - 1 && prev_is_transient == 0 && prev_normq[sfm] > 0.5f * normq_v[sfm] && prev_normq[sfm] < 2.0f * normq_v[sfm] && bitalloc_var <= 0.3f ) - { - float *p_prev_coeff_out = prev_coeff_out; - for ( i = sfm_start[sfm] + 12; i < sfm_end[sfm]; i++ ) - { - if ( fabs( coeff_out[i] ) > 4.0f * fabs( *p_prev_coeff_out ) || - fabs( coeff_out[i] ) < 0.25f * fabs( *p_prev_coeff_out ) || - ( R[sfm] * ( *prev_R ) == 0 && R[sfm] + ( *prev_R ) != 0 ) ) - { - coeff_out[i] = ( coeff_out[i] > 0 ) ? (float) ( 0.5f * ( fabs( coeff_out[i] ) + fabs( *p_prev_coeff_out ) ) ) : (float) ( -0.5f * ( fabs( coeff_out[i] ) + fabs( *p_prev_coeff_out ) ) ); - } - p_prev_coeff_out++; - } - } - - prev_env[sfm] = env; - } - } - else - { - /* fill random noise for 0 bit subbands of transient frame */ - for ( sfm = 0; sfm < num_sfm; sfm++ ) - { - if ( R[sfm] == 0 ) - { - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = (float) ( own_random( bwe_seed ) ) / PCM16_TO_FLT_FAC; - coeff_out[i] *= normq_v[sfm]; - } - } - } - - set_f( prev_env, 0, SFM_N_WB ); - } - - mvr2r( normq_v, prev_normq, SFM_N_WB ); - mvr2r( coeff_out + L_FRAME16k - L_HQ_WB_BWE, prev_coeff_out, L_HQ_WB_BWE ); - *prev_R = R[SFM_N_WB - 1]; - - return; -} - - -/*--------------------------------------------------------------------------* - * enforce_zero_for_min_envelope() - * - * Detect minimum level of envelope and set corresponding bands to zero - *--------------------------------------------------------------------------*/ - -void enforce_zero_for_min_envelope( - const int16_t hqswb_clas, /* i : HQ coding mode */ - const int16_t *ynrm, /* i : Envelope indices */ - float *coefsq, /* i/o: Quantized spectrum/zeroed spectrum */ - int16_t nb_sfm, /* i : Number of coded sub bands */ - const int16_t *sfm_start, /* i : Sub band start indices */ - const int16_t *sfm_end /* i : Sub band end indices */ -) -{ - int16_t i, j; - - /* prevent non-zero output for all-zero input */ - if ( hqswb_clas != HQ_HVQ ) - { - if ( ynrm[0] == 31 ) - { - for ( j = sfm_start[0]; j < sfm_end[0]; j++ ) - { - coefsq[j] = 0.0f; - } - } - - for ( i = 1; i < nb_sfm; i++ ) - { - if ( ynrm[i] == 39 ) - { - for ( j = sfm_start[i]; j < sfm_end[i]; j++ ) - { - coefsq[j] = 0.0f; - } - } - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * overlap_hq_bwe() - * - * Overlapping at the boundary between HQ core and BWE - *--------------------------------------------------------------------------*/ - -static void overlap_hq_bwe( - const float *hq_swb_overlap_buf, /* i : spectrum from HQ core */ - float *coeff_out, /* i/o: spectrum from BWE, overlapped output */ - const int16_t n_swb_overlap_offset, /* i : starting offset of overlapping */ - const int16_t n_swb_overlap, /* i : length of overlapping */ - const int16_t *R, /* i : Bit allocation */ - const int16_t num_env_bands, /* i : Number of coded envelope bands */ - const int16_t num_sfm, /* i : Number of bands */ - const int16_t *sfm_end /* i : Band end indices */ -) -{ - int16_t i; - float step; - float weighting; - int16_t n_band; - - if ( R[num_env_bands - 1] != 0 ) - { - mvr2r( hq_swb_overlap_buf, &coeff_out[n_swb_overlap_offset], n_swb_overlap ); - } - else - { - /*weighting = 0.8f;*/ - step = 1.0f / (float) n_swb_overlap; - weighting = 1.0f; - for ( i = 0; i < n_swb_overlap; i++ ) - { - coeff_out[n_swb_overlap_offset + i] = hq_swb_overlap_buf[i] * weighting + coeff_out[n_swb_overlap_offset + i] * ( 1.0f - weighting ); - weighting -= step; - } - } - - - for ( n_band = num_env_bands; n_band < num_sfm; n_band++ ) - { - if ( R[n_band] != 0 ) - { - for ( i = sfm_end[n_band - 1]; i < sfm_end[n_band]; ++i ) - { - coeff_out[i] = hq_swb_overlap_buf[i - n_swb_overlap_offset]; - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * apply_envelope() - * - * Apply spectral envelope with envelope adjustments - *--------------------------------------------------------------------------*/ - -void apply_envelope( - const float *coeff, /* i/o: Coded/noisefilled normalized spectrum */ - const int16_t *norm, /* i : Envelope */ - const float *norm_adj, /* i : Envelope adjustment */ - const int16_t num_sfm, /* i : Total number of bands */ - const int16_t last_sfm, /* i : Last coded band */ - const int16_t HQ_mode, /* i : HQ mode */ - const int16_t length, /* i : Frame length */ - const int16_t *sfm_start, /* i : Sub band start indices */ - const int16_t *sfm_end, /* i : Sub band end indices */ - float *normq_v, /* o : Envelope with adjustment */ - float *coeff_out, /* o : coded/noisefilled spectrum */ - float *coeff_out1 /* o : noisefilled spectrum for HQ SWE BWE */ -) -{ - int16_t i; - int16_t sfm; - float normq; - int16_t len; - - len = num_sfm; - if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) - { - len = last_sfm + 1; - } - - if ( length == L_FRAME16k ) - { - for ( sfm = 0; sfm < num_sfm; sfm++ ) - { - normq_v[sfm] = dicn[norm[sfm]]; - normq = normq_v[sfm] * norm_adj[sfm]; - - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = coeff[i] * normq; - } - } - } - else - { - for ( sfm = 0; sfm < len; sfm++ ) - { - normq_v[sfm] = dicn[norm[sfm]]; - normq_v[sfm] *= norm_adj[sfm]; - - normq = normq_v[sfm]; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out[i] = coeff[i] * normq; - } - } - - if ( HQ_mode == HQ_GEN_SWB || HQ_mode == HQ_GEN_FB ) - { - for ( sfm = 0; sfm <= last_sfm; sfm++ ) - { - normq = normq_v[sfm]; - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff_out1[i] = coeff_out1[i] * normq; - } - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * apply_envelope_enc() - * - * Apply spectral envelope without envelope adjustments and noisefill - *--------------------------------------------------------------------------*/ - -void apply_envelope_enc( - float *coeff, /* i/o: Normalized/scaled normalized spectrum */ - const int16_t *norm, /* i : Envelope */ - const int16_t num_sfm, /* i : Total number of bands */ - const int16_t *sfm_start, /* i : Sub band start indices */ - const int16_t *sfm_end /* i : Sub band end indices */ -) -{ - int16_t sfm; - int16_t i; - float normq; - - for ( sfm = 0; sfm < num_sfm; sfm++ ) - { - normq = dicn[norm[sfm]]; - - for ( i = sfm_start[sfm]; i < sfm_end[sfm]; i++ ) - { - coeff[i] *= normq; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------------------------- - * floating_point_add() - * - * Add two floating point numbers in integer representation: x <- x + y - * Ported from BASOP code to ensure interoperability - *----------------------------------------------------------------------------*/ - -void floating_point_add_float( - int32_t *mx, /* i/o: mantissa of the addend Q31 */ - int16_t *ex, /* i/o: exponent of the addend Q0 */ - const int32_t my, /* i : mantissa of the adder Q31 */ - const int16_t ey /* i : exponent of the adder Q0 */ -) -{ - Word32 accX, accY; - Word16 align, expo; - - accX = *mx >> 1; - accY = my >> 1; - align = *ex - ey; - if ( align < 0 ) - { - if ( align > -32 ) /* If align < -32, (accY >> (-align) = 0 */ - { - accX = accX + ( accY >> ( -align ) ); - } - } - else - { - if ( align < 32 ) /* If align > 32, (accX >> align) = 0 */ - { - accX = accY + ( accX >> align ); - } - else - { - accX = accY; - } - *ex = ey; - } - expo = norm_l( accX ); /* aligned to BASOP */ - *mx = accX << expo; - *ex = *ex + expo - 1; - - return; -} -#endif diff --git a/lib_com/hq_tools_fx.c b/lib_com/hq_tools_fx.c index d84973511..468bdd9a5 100644 --- a/lib_com/hq_tools_fx.c +++ b/lib_com/hq_tools_fx.c @@ -40,9 +40,7 @@ #include "stl.h" /* required for wmc_tool */ #include "prot_fx.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* * Local function prototypes @@ -664,7 +662,7 @@ void hvq_bwe_fine_fx( #ifdef BASOP_NOGLOB tmp = round_fx_sat( L_shl_sat( L_envelope[i], shift ) ); /* 12+s-16=Q(-4+s) */ #else - tmp = round_fx( L_shl( L_envelope[i], shift ) ); /* 12+s-16=Q(-4+s) */ + tmp = round_fx( L_shl( L_envelope[i], shift ) ); /* 12+s-16=Q(-4+s) */ #endif /* Avoid division by zero */ if ( tmp == 0 ) @@ -835,7 +833,6 @@ void apply_nf_gain_fx( * HQ Harmonic BWE *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_harm_bwe_fx( const Word16 *coeff_fine, /* i : fine structure for BWE Q12*/ const Word16 *coeff, /* i : coded/noisefilled normalized spectrum Q12*/ @@ -1019,7 +1016,6 @@ void ivas_harm_bwe_fx( } return; } -#endif void harm_bwe_fx( const Word16 *coeff_fine, /* i : fine structure for BWE Q12*/ @@ -1926,7 +1922,6 @@ Word16 get_nor_delta_hf_fx( } return add_bits_denv; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * calc_nor_delta_hf() * @@ -2023,7 +2018,6 @@ Word16 calc_nor_delta_hf_ivas_fx( } return add_bits_denv; } -#endif /*-------------------------------------------------------------------* * calc_nor_delta_hf() * @@ -2664,7 +2658,6 @@ void enforce_zero_for_min_envelope_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * apply_envelope() * @@ -2704,7 +2697,6 @@ void apply_envelope_enc_ivas_fx( return; } -#endif /*--------------------------------------------------------------------------* * apply_envelope() * diff --git a/lib_com/hvq_pvq_bitalloc.c b/lib_com/hvq_pvq_bitalloc.c index 594e9f260..0fe8682da 100644 --- a/lib_com/hvq_pvq_bitalloc.c +++ b/lib_com/hvq_pvq_bitalloc.c @@ -40,150 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------*/ -/* Function hvq_pvq_bitalloc */ -/* ~~~~~~~~~~~~~~~~~~~~~~~~ */ -/* */ -/* Calculate the number of PVQ bands to code and allocate bits based on */ -/* the number of available bits. */ -/*--------------------------------------------------------------------------*/ - -/*! r: Number of low frequency bands */ -int16_t hvq_pvq_bitalloc( - int16_t num_bits, /* i/o: Number of available bits (including gain bits)*/ - const int32_t core_brate, /* i : core bitrate */ - const int16_t bwidth, /* i : Encoded bandwidth */ - const int16_t *ynrm, /* i : Envelope coefficients */ - const int32_t manE_peak, /* i : Peak energy mantissa */ - const int16_t expE_peak, /* i : Peak energy exponent */ - int16_t *Rk, /* o : bit allocation for concatenated vector */ - int16_t *R, /* i/o: Global bit allocation */ - int16_t *sel_bands, /* o : Selected bands for encoding */ - int16_t *n_sel_bands /* o : No. of selected bands for encoding */ -) -{ - int16_t num_bands, k, band_max_bits; - int16_t k_max; - int16_t k_start; - float E_max; - int32_t E_max5; - int16_t expo; - int16_t align; - int32_t acc; - float tmp; - int32_t env_mean; - int16_t reciprocal; - int16_t num_sfm; - int16_t bit_cost; - - if ( bwidth == FB ) - { - num_sfm = SFM_N_HARM_FB; - } - else - { - num_sfm = SFM_N_HARM; - } - - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - band_max_bits = HVQ_BAND_MAX_BITS_24k; - k_start = HVQ_THRES_SFM_24k; - if ( bwidth == FB ) - { - reciprocal = 2731; - } - else - { - reciprocal = 3277; - } - } - else - { - band_max_bits = HVQ_BAND_MAX_BITS_32k; - k_start = HVQ_THRES_SFM_32k; - if ( bwidth == FB ) - { - reciprocal = 3641; - } - else - { - reciprocal = 4681; - } - } - - num_bands = num_bits / band_max_bits; - num_bits = num_bits - num_bands * band_max_bits; - - if ( num_bits >= HVQ_NEW_BAND_BIT_THR ) - { - num_bands++; - } - else - { - num_bits += band_max_bits; - } - - /* safety check in case of bit errors */ - if ( num_bands < 1 ) - { - return 0; - } - - *n_sel_bands = 0; - env_mean = 0; - E_max = 0; - k_max = k_start; - for ( k = k_start; k < num_sfm; k++ ) - { - tmp = dicn[ynrm[k]]; - env_mean += ynrm[k]; - if ( tmp > E_max ) - { - E_max = tmp; - k_max = k; - } - } - env_mean = 2 * ( env_mean * reciprocal ); - - if ( band_len_harm_float[k_max] == 96 ) - { - bit_cost = 61; - } - else - { - QuantaPerDsDirac( band_len_harm_float[k_max], 1, hBitsN, &bit_cost ); - } - - - expo = max( 0, ynrm[k_max] - 1 ) >> 1; - E_max5 = E_max5_tbl[ynrm[k_max]]; - align = expo - expE_peak; - align = align + ( 19 - 14 ) - ( 31 - 2 * 12 ); - if ( align < 0 ) - { - acc = E_max5 - ( manE_peak >> -align ); - } - else - { - acc = ( E_max5 >> align ) - manE_peak; - } - if ( acc > 0 && ( ( env_mean - ( ynrm[k_max] << 16 ) ) > 0x30000L ) && num_bands > 1 && ( num_bits - HVQ_PVQ_GAIN_BITS ) << 3 >= bit_cost ) - { - sel_bands[*n_sel_bands] = k_max; - ( *n_sel_bands )++; - R[k_max] = 1; /* Mark that the band has been encoded for fill_spectrum */ - } - - /* Allocate bits */ - for ( k = 0; k < num_bands - 1; k++ ) - { - Rk[k] = band_max_bits - HVQ_PVQ_GAIN_BITS; - } - Rk[num_bands - 1] = num_bits - HVQ_PVQ_GAIN_BITS; - - return num_bands; -} -#endif diff --git a/lib_com/igf_base.c b/lib_com/igf_base.c index 0d44859a4..97a511fb6 100644 --- a/lib_com/igf_base.c +++ b/lib_com/igf_base.c @@ -40,703 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGF_ApplyTransFac_flt() - * - * - *---------------------------------------------------------------------*/ - -/*! r: | multiplication factor */ -int16_t IGF_ApplyTransFac_flt( - const int16_t val, /* i : Q15 | input value for multiplication, Q15 */ - const float transFac /* i : Q14 | multiplicator for variable val, Q14: 1.25f=0x5000, 1.0f=0x4000, 0.5f=0x2000 */ -) -{ - int16_t ret = val; - - if ( transFac != 1.f ) - { - ret = (int16_t) round_f( val * transFac ); - ret += ( ret & 1 ); - } - - return ret; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGF_MapBitRateToIndex_flt() - * - * maps a given bitrate to the IGF_BITRATE index - *---------------------------------------------------------------------*/ - -/*! r: bitrate index */ -int16_t IGF_MapBitRateToIndex_flt( - const int32_t brate, /* i : bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : element mode */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - int16_t bitRateIndex = IGF_BITRATE_UNKNOWN; - - /* Stereo/CPE modes */ - if ( element_mode > IVAS_SCE ) - { - switch ( bwidth ) - { - case IGF_MODE_WB: - if ( brate <= IVAS_13k2 && rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_WB_13200; - } - else if ( brate <= ACELP_9k60 ) - { - bitRateIndex = IGF_BITRATE_WB_13200_CPE; - } - else if ( brate <= IVAS_13k2 ) - { - bitRateIndex = IGF_BITRATE_WB_16400_CPE; - } - break; - case IGF_MODE_SWB: - /* DFT and TD Stereo bitrates */ - if ( brate <= ACELP_9k60 ) - { - bitRateIndex = IGF_BITRATE_SWB_13200_CPE; - } - else if ( brate <= IVAS_13k2 ) - { - if ( rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_SWB_13200; - } - else - { - bitRateIndex = IGF_BITRATE_SWB_16400_CPE; - } - } - else if ( brate <= IVAS_16k4 ) - { - bitRateIndex = IGF_BITRATE_SWB_24400_CPE; - } - else if ( brate <= IVAS_24k4 ) - { - bitRateIndex = IGF_BITRATE_SWB_32000_CPE; - } - else if ( brate <= IVAS_32k ) - { - bitRateIndex = IGF_BITRATE_SWB_32000; - } - /* MDCT Stereo bitrates */ - else if ( brate <= IVAS_48k ) - { - bitRateIndex = IGF_BITRATE_SWB_48000_CPE; - } - else if ( brate <= IVAS_64k ) - { - bitRateIndex = IGF_BITRATE_SWB_64000_CPE; - } - else if ( brate <= IVAS_80k ) - { - bitRateIndex = IGF_BITRATE_SWB_80000_CPE; - } - else if ( brate <= IVAS_96k ) - { - bitRateIndex = IGF_BITRATE_SWB_96000_CPE; - } - break; - case IGF_MODE_FB: - /* DFT and TD Stereo bitrates */ - if ( brate <= IVAS_16k4 ) - { - bitRateIndex = IGF_BITRATE_FB_24400_CPE; - } - else if ( brate <= IVAS_24k4 ) - { - bitRateIndex = IGF_BITRATE_FB_32000_CPE; - } - else if ( brate <= IVAS_32k ) - { - bitRateIndex = IGF_BITRATE_FB_32000; - } - /* MDCT Stereo bitrates */ - else if ( brate <= IVAS_48k ) - { - bitRateIndex = IGF_BITRATE_FB_48000_CPE; - } - else if ( brate <= IVAS_64k ) - { - bitRateIndex = IGF_BITRATE_FB_64000_CPE; - } - else if ( brate <= IVAS_80k ) - { - bitRateIndex = IGF_BITRATE_FB_80000_CPE; - } - else if ( brate <= IVAS_96k ) - { - bitRateIndex = IGF_BITRATE_FB_96000_CPE; - } - else if ( brate <= IVAS_128k ) - { - bitRateIndex = IGF_BITRATE_FB_128000_CPE; - } - break; - } - } - /* SCE modes: use tunings done for DFT stereo bitrates also for according SCE bitrates, otherwise same config as mono modes */ - else if ( element_mode == IVAS_SCE ) - { - switch ( bwidth ) - { - case IGF_MODE_WB: - if ( brate <= IVAS_13k2 && rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_WB_13200; - } - else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */ - { - bitRateIndex = IGF_BITRATE_WB_9600; - } - break; - case IGF_MODE_SWB: - if ( brate <= ACELP_9k60 ) - { - bitRateIndex = IGF_BITRATE_SWB_13200_CPE; - } - else if ( brate <= IVAS_13k2 ) - { - if ( rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_SWB_13200; - } - else - { - bitRateIndex = IGF_BITRATE_SWB_16400_CPE; - } - } - else if ( brate <= IVAS_16k4 ) - { - bitRateIndex = IGF_BITRATE_SWB_24400_CPE; - } - else if ( brate <= IVAS_24k4 ) - { - bitRateIndex = IGF_BITRATE_SWB_32000_CPE; - } - else if ( brate <= IVAS_32k ) - { - bitRateIndex = IGF_BITRATE_SWB_32000; - } - else if ( brate <= IVAS_48k ) - { - bitRateIndex = IGF_BITRATE_SWB_48000; - } - else if ( brate <= IVAS_64k ) - { - bitRateIndex = IGF_BITRATE_SWB_64000; - } - break; - case IGF_MODE_FB: - if ( brate <= IVAS_16k4 ) - { - bitRateIndex = IGF_BITRATE_FB_24400_CPE; - } - else if ( brate <= IVAS_24k4 ) - { - bitRateIndex = IGF_BITRATE_FB_32000_CPE; - } - else if ( brate <= IVAS_32k ) - { - bitRateIndex = IGF_BITRATE_FB_32000; - } - else if ( brate <= IVAS_48k ) - { - bitRateIndex = IGF_BITRATE_FB_48000; - } - else if ( brate <= IVAS_64k ) - { - bitRateIndex = IGF_BITRATE_FB_64000; - } - else if ( brate <= IVAS_96k ) - { - bitRateIndex = IGF_BITRATE_FB_96000; - } - else if ( brate <= IVAS_128k ) - { - bitRateIndex = IGF_BITRATE_FB_128000; - } - break; - } - } - /* EVS mono */ - else - { - switch ( bwidth ) - { - case IGF_MODE_WB: - if ( brate <= ACELP_13k20 && rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_WB_13200; - } - else if ( brate <= ACELP_9k60 ) /* bitrates 8000 and 9600 */ - { - bitRateIndex = IGF_BITRATE_WB_9600; - } - break; - case IGF_MODE_SWB: - if ( brate <= ACELP_9k60 ) - { - bitRateIndex = IGF_BITRATE_SWB_9600; - } - else if ( brate <= ACELP_13k20 ) - { - if ( rf_mode == 1 ) - { - bitRateIndex = IGF_BITRATE_RF_SWB_13200; - } - else - { - bitRateIndex = IGF_BITRATE_SWB_13200; - } - } - else if ( brate <= ACELP_16k40 ) - { - bitRateIndex = IGF_BITRATE_SWB_16400; - } - else if ( brate <= ACELP_24k40 ) - { - bitRateIndex = IGF_BITRATE_SWB_24400; - } - else if ( brate <= ACELP_32k ) - { - bitRateIndex = IGF_BITRATE_SWB_32000; - } - else if ( brate <= ACELP_48k ) - { - bitRateIndex = IGF_BITRATE_SWB_48000; - } - else if ( brate <= ACELP_64k ) - { - bitRateIndex = IGF_BITRATE_SWB_64000; - } - break; - case IGF_MODE_FB: - if ( brate <= ACELP_16k40 ) - { - bitRateIndex = IGF_BITRATE_FB_16400; - } - else if ( brate <= ACELP_24k40 ) - { - bitRateIndex = IGF_BITRATE_FB_24400; - } - else if ( brate <= ACELP_32k ) - { - bitRateIndex = IGF_BITRATE_FB_32000; - } - else if ( brate <= ACELP_48k ) - { - bitRateIndex = IGF_BITRATE_FB_48000; - } - else if ( brate <= ACELP_64k ) - { - bitRateIndex = IGF_BITRATE_FB_64000; - } - else if ( brate <= HQ_96k ) - { - bitRateIndex = IGF_BITRATE_FB_96000; - } - else if ( brate <= HQ_128k ) - { - bitRateIndex = IGF_BITRATE_FB_128000; - } - break; - } - } - - return bitRateIndex; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGF_gridSetUp_flt() - * - * IGF grid setup - *---------------------------------------------------------------------*/ - -static void IGF_gridSetUp_flt( - H_IGF_GRID hGrid, /* o : IGF grid handle */ - int16_t bitRateIndex, /* i : IGF bitrate index */ - const int32_t sampleRate, /* i : sample rate */ - int16_t frameLength, /* i : frame length */ - const float transFac, /* i : transFac */ - const int16_t igfMinFq /* i : IGF minimum frequency indicating lower start frequency for copy up */ -) -{ - int16_t t, k; - int16_t sfb; - int16_t swb_offset_len; - const int16_t *swb_offset; - float bandwidth; - const int16_t *igf_tile_offset; - - /* inits */ - swb_offset = NULL; - swb_offset_len = 0; - if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_SWB_48000_CPE ) - { - bitRateIndex = IGF_BITRATE_SWB_48000_CPE_TCX10; - } - else if ( transFac == 0.5f && bitRateIndex == IGF_BITRATE_FB_48000_CPE ) - { - bitRateIndex = IGF_BITRATE_FB_48000_CPE_TCX10; - } - - if ( bitRateIndex != IGF_BITRATE_UNKNOWN ) - { - swb_offset = &swb_offset_LB_new[bitRateIndex][1]; - swb_offset_len = swb_offset_LB_new[bitRateIndex][0]; - mvr2r( &igf_whitening_TH_flt[bitRateIndex][0][0], &hGrid->whiteningThreshold_flt[0][0], IGF_MAX_TILES * 2 ); - } - else - { - assert( 0 ); - } - - for ( sfb = 0; sfb < swb_offset_len; sfb++ ) - { - hGrid->swb_offset[sfb] = IGF_ApplyTransFac_flt( swb_offset[sfb], transFac ); - } - for ( sfb = swb_offset_len; sfb < IGF_MAX_SFB; sfb++ ) - { - hGrid->swb_offset[sfb] = 0; - } - - hGrid->infoIsRefined = 0; - frameLength = IGF_ApplyTransFac_flt( frameLength, transFac ); - bandwidth = (float) sampleRate / 2.0f / (float) frameLength; - hGrid->swb_offset_len = swb_offset_len; - hGrid->startSfb = 0; - hGrid->stopSfb = hGrid->swb_offset_len - 1; - hGrid->startLine = hGrid->swb_offset[hGrid->startSfb]; - hGrid->stopLine = hGrid->swb_offset[hGrid->stopSfb]; - hGrid->startFrequency = (int16_t) round_f( bandwidth * hGrid->startLine ); - hGrid->stopFrequency = (int16_t) round_f( bandwidth * hGrid->stopLine ); - hGrid->minSrcSubband = (int16_t) round_f( ( igfMinFq * ( frameLength ) ) / ( sampleRate >> 1 ) ); - hGrid->minSrcSubband += hGrid->minSrcSubband % 2; - hGrid->minSrcFrequency = (int16_t) round_f( bandwidth * hGrid->minSrcSubband ); - hGrid->infoGranuleLen = frameLength; - hGrid->sfbWrap[0] = 0; - hGrid->tile[0] = hGrid->startLine; - - igf_tile_offset = &igf_tile_offset_table[bitRateIndex][1]; - hGrid->nTiles = igf_tile_offset_table[bitRateIndex][0]; - hGrid->tile[0] = hGrid->startLine; - hGrid->sfbWrap[0] = 0; - for ( k = 0; k < hGrid->nTiles; k++ ) - { - hGrid->sfbWrap[k + 1] = igf_tile_offset[2 * k]; - hGrid->sbWrap[k] = hGrid->minSrcSubband + IGF_ApplyTransFac_flt( igf_tile_offset[2 * k + 1], transFac ); - hGrid->tile[k + 1] = hGrid->swb_offset[igf_tile_offset[2 * k]]; - } - for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ ) - { - hGrid->tile[t] = 0; - hGrid->sbWrap[t - 1] = 0; - hGrid->sfbWrap[t] = 0; - } - - /* adapt level envelope: */ - switch ( bitRateIndex ) - { - case IGF_BITRATE_RF_WB_13200: - case IGF_BITRATE_WB_9600: - case IGF_BITRATE_WB_13200_CPE: - case IGF_BITRATE_WB_16400_CPE: - hGrid->gFactor_flt = 0.800f; - hGrid->fFactor_flt = 0.70f; - hGrid->lFactor_flt = 0.60f; - break; - case IGF_BITRATE_SWB_13200: - case IGF_BITRATE_SWB_16400_CPE: - case IGF_BITRATE_FB_16400: - case IGF_BITRATE_SWB_16400: - case IGF_BITRATE_FB_24400_CPE: - case IGF_BITRATE_SWB_24400_CPE: - hGrid->gFactor_flt = 0.930f; - hGrid->fFactor_flt = 0.20f; - hGrid->lFactor_flt = 0.85f; - break; - case IGF_BITRATE_FB_24400: - case IGF_BITRATE_SWB_24400: - case IGF_BITRATE_FB_32000_CPE: - case IGF_BITRATE_SWB_32000_CPE: - case IGF_BITRATE_FB_32000: - case IGF_BITRATE_SWB_32000: - case IGF_BITRATE_SWB_48000_CPE: - case IGF_BITRATE_SWB_64000_CPE: - hGrid->gFactor_flt = 0.965f; - hGrid->fFactor_flt = 0.20f; - hGrid->lFactor_flt = 0.85f; - break; - case IGF_BITRATE_FB_48000: - case IGF_BITRATE_SWB_48000: - case IGF_BITRATE_FB_64000: - case IGF_BITRATE_SWB_64000: - case IGF_BITRATE_SWB_80000_CPE: - case IGF_BITRATE_SWB_96000_CPE: - hGrid->gFactor_flt = 1.000f; - hGrid->fFactor_flt = 0.20f; - hGrid->lFactor_flt = 1.000f; - break; - case IGF_BITRATE_SWB_9600: - case IGF_BITRATE_SWB_13200_CPE: - case IGF_BITRATE_RF_SWB_13200: - default: - hGrid->gFactor_flt = 1.000f; - hGrid->fFactor_flt = 0.00f; - hGrid->lFactor_flt = 1.000f; - } - - for ( t = hGrid->nTiles + 1; t < IGF_MAX_TILES; t++ ) - { - hGrid->tile[t] = 0; - hGrid->sbWrap[t - 1] = 0; - hGrid->sfbWrap[t] = 0; - } - return; -} - - -/*---------------------------------------------------------------------* - * IGFCommonFuncsIGFConfiguration_flt() - * - * changes the IGF configuration - *---------------------------------------------------------------------*/ - -/*! r: error value: 0 -> error, 1 -> ok */ -int16_t IGFCommonFuncsIGFConfiguration_flt( - const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : element mode */ - H_IGF_INFO hIGFInfo, /* o : IGF info handle */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - H_IGF_GRID hGrid; - int16_t retValue; - int32_t sampleRate; - int16_t frameLength; - int16_t igfMinFq; - int16_t maxHopsize; - - retValue = 0; /* bitrate index is unknown -> error! */ - - /* interface call for reading in settings */ - hIGFInfo->bitRateIndex = IGF_MapBitRateToIndex_flt( total_brate, bwidth, element_mode, rf_mode ); - - if ( hIGFInfo->bitRateIndex != IGF_BITRATE_UNKNOWN ) - { - retValue = 1; /* no error */ - - /* mapping to local values */ - sampleRate = igfMode[hIGFInfo->bitRateIndex].sampleRate; - frameLength = igfMode[hIGFInfo->bitRateIndex].frameLength; - igfMinFq = igfMode[hIGFInfo->bitRateIndex].igfMinFq; - maxHopsize = igfMode[hIGFInfo->bitRateIndex].maxHopsize; - - /* basic information */ - hIGFInfo->sampleRate = sampleRate; - hIGFInfo->frameLength = frameLength; - hIGFInfo->maxHopsize = maxHopsize; - hIGFInfo->nfSeedBuf[0] = 0; - hIGFInfo->nfSeedBuf[1] = 0; - hIGFInfo->nfSeed = &hIGFInfo->nfSeedBuf[0]; - - /* set up regular IGF grid for TCX 20 (transfac = 1.f) */ - hGrid = &hIGFInfo->grid[IGF_GRID_LB_NORM]; - IGF_gridSetUp_flt( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.00f, igfMinFq ); - - /* set up IGF grid for CELP->TCX 20 transitions (transfac = 1.25) */ - hGrid = &hIGFInfo->grid[IGF_GRID_LB_TRAN]; - IGF_gridSetUp_flt( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 1.25f, igfMinFq ); - - /* set up IGF grid for TCX 10 (transfac = 0.5) */ - hGrid = &hIGFInfo->grid[IGF_GRID_LB_SHORT]; - IGF_gridSetUp_flt( hGrid, hIGFInfo->bitRateIndex, sampleRate, frameLength, 0.50f, igfMinFq ); - } - - return retValue; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGFCommonFuncsIGFGetCFTables_flt() - * - * selects cumulative frequency tables and offsets for the IGF SCF arithmetic coder - *---------------------------------------------------------------------*/ - -/*! r: error value: 0 -> error, 1 -> ok */ -int16_t IGFCommonFuncsIGFGetCFTables_flt( - const int32_t total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : element mode */ - const int16_t rf_mode, /* i : flag to signal the RF mode */ - const uint16_t **cf_se00, /* o : CF table for t == 0 and f == 0 */ - const uint16_t **cf_se01, /* o : CF table for t == 0 and f == 1 */ - int16_t *cf_off_se01, /* o : offset for CF table above */ - const uint16_t **cf_se02, /* o : CF tables for t == 0 and f >= 2 */ - const int16_t **cf_off_se02, /* o : offsets for CF tables above */ - const uint16_t **cf_se10, /* o : CF table for t == 1 and f == 0 */ - int16_t *cf_off_se10, /* o : offset for CF table above */ - const uint16_t **cf_se11, /* o : CF tables for t == 1 and f >= 1 */ - const int16_t **cf_off_se11 /* o : offsets for CF tables above */ -) -{ - int16_t retValue; - int16_t bitRateIndex; - - retValue = 0; /* bitrate index is unknown -> error! */ - - bitRateIndex = IGF_MapBitRateToIndex_flt( total_brate, bwidth, element_mode, rf_mode ); - - if ( bitRateIndex != IGF_BITRATE_UNKNOWN ) - { - retValue = 1; /* no error */ - - switch ( bitRateIndex ) - { - case IGF_BITRATE_WB_13200_CPE: - bitRateIndex = IGF_BITRATE_WB_9600; - break; - case IGF_BITRATE_WB_16400_CPE: - bitRateIndex = IGF_BITRATE_WB_9600; - break; - case IGF_BITRATE_SWB_13200_CPE: - bitRateIndex = IGF_BITRATE_SWB_9600; - break; - case IGF_BITRATE_SWB_16400_CPE: - bitRateIndex = IGF_BITRATE_SWB_13200; - break; - case IGF_BITRATE_SWB_24400_CPE: - bitRateIndex = IGF_BITRATE_SWB_16400; - break; - case IGF_BITRATE_FB_24400_CPE: - bitRateIndex = IGF_BITRATE_FB_16400; - break; - case IGF_BITRATE_SWB_32000_CPE: - bitRateIndex = IGF_BITRATE_SWB_24400; - break; - case IGF_BITRATE_FB_32000_CPE: - bitRateIndex = IGF_BITRATE_FB_24400; - break; - case IGF_BITRATE_FB_48000_CPE: - case IGF_BITRATE_FB_64000_CPE: - bitRateIndex = IGF_BITRATE_FB_32000; - break; - } - - switch ( bitRateIndex ) - { - case IGF_BITRATE_WB_9600: - case IGF_BITRATE_RF_WB_13200: - case IGF_BITRATE_SWB_9600: - case IGF_BITRATE_SWB_13200: - case IGF_BITRATE_RF_SWB_13200: - case IGF_BITRATE_SWB_16400: - case IGF_BITRATE_SWB_24400: - case IGF_BITRATE_SWB_32000: - case IGF_BITRATE_SWB_48000: - case IGF_BITRATE_SWB_64000: - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_FB_16400: - case IGF_BITRATE_FB_24400: - case IGF_BITRATE_FB_32000: - bitRateIndex = bitRateIndex - IGF_BITRATE_FB_16400 + IGF_BITRATE_SWB_16400; - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_FB_48000: - case IGF_BITRATE_FB_64000: - bitRateIndex = bitRateIndex - IGF_BITRATE_FB_48000 + IGF_BITRATE_SWB_48000; - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_FB_96000: - case IGF_BITRATE_FB_128000: - case IGF_BITRATE_FB_80000_CPE: - case IGF_BITRATE_FB_96000_CPE: - case IGF_BITRATE_FB_128000_CPE: - bitRateIndex = IGF_BITRATE_SWB_48000; - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_SWB_48000_CPE: - bitRateIndex = IGF_BITRATE_SWB_16400; - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_SWB_64000_CPE: - case IGF_BITRATE_SWB_80000_CPE: - case IGF_BITRATE_SWB_96000_CPE: - bitRateIndex = IGF_BITRATE_SWB_48000; /*bitRateIndex-IGF_BITRATE_SWB_56000+IGF_BITRATE_SWB_48000;*/ - *cf_se00 = cf_se00_tab; - *cf_se01 = cf_se01_tab[bitRateIndex]; - *cf_off_se01 = cf_off_se01_tab[bitRateIndex]; - *cf_se02 = &cf_se02_tab[bitRateIndex][0][0]; - *cf_off_se02 = &cf_off_se02_tab[bitRateIndex][0]; - *cf_se10 = &cf_se10_tab[0]; - *cf_off_se10 = cf_off_se10_tab; - *cf_se11 = &cf_se11_tab[0][0][0]; - *cf_off_se11 = &cf_off_se11_tab[0][0]; - break; - case IGF_BITRATE_UNKNOWN: - default: - assert( 0 ); - } - } - - return retValue; -} -#endif diff --git a/lib_com/igf_base_fx.c b/lib_com/igf_base_fx.c index a7ebb203f..5670088d3 100644 --- a/lib_com/igf_base_fx.c +++ b/lib_com/igf_base_fx.c @@ -889,7 +889,6 @@ static void IGF_gridSetUp( H_IGF_GRID hGrid, /**< ou move16(); } } -#ifdef IVAS_FLOAT_FIXED static void IGF_gridSetUp_ivas_fx( H_IGF_GRID hGrid, /* o : IGF grid handle */ Word16 bitRateIndex, /* i : IGF bitrate index */ @@ -1102,7 +1101,6 @@ static void IGF_gridSetUp_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED /**********************************************************************/ /* calculates energy per sfb via power spectrum @@ -1348,7 +1346,6 @@ Word16 IGFCommonFuncsIGFConfiguration( return retValue; } -#ifdef IVAS_FLOAT_FIXED Word16 IGFCommonFuncsIGFConfiguration_ivas_fx( const Word32 total_brate, /* i : bitrate in bs e.g. 9600 for 9.6kbs */ const Word16 bwidth, /* i : audio bandwidth */ @@ -1427,7 +1424,6 @@ Word16 IGFCommonFuncsIGFConfiguration_ivas_fx( return retValue; /*Q0*/ } -#endif // IVAS_FLOAT_FIXED /**********************************************************************/ /* selects cumulative frequency tables and offsets for the IGF SCF arithmetic coder diff --git a/lib_com/index_pvq_opt.c b/lib_com/index_pvq_opt.c index bac22e723..dca2e826c 100644 --- a/lib_com/index_pvq_opt.c +++ b/lib_com/index_pvq_opt.c @@ -43,1208 +43,5 @@ #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * LOCAL DEFINITIONS - *-------------------------------------------------------------------*/ - -#define N_OPT 5 /* complexity setting, direct functional calculation limit */ -#define TABLE_LIM_OPT 96 /* odd divisor table recursion limit setting, due to dim 6 */ - -/* local typedefs for optimized pvq indexing, used only in this c-file to vectorize common function calls for c-code clarity */ -typedef void ( *VEC2INDFUNCM )( const int16_t *, int16_t *, uint32_t *, uint32_t * ); -typedef uint32_t ( *NFUNCM )( int16_t ); -typedef uint32_t ( *H_FUNCM )( uint32_t ); -typedef void ( *IND2VECFUNCM )( int16_t, int16_t, uint32_t, int16_t * ); -typedef void ( *NDIM_FUNCM )( int16_t, int16_t, uint32_t, int16_t * ); -#endif /* local constants for indexing functions c-code clarity */ -#ifndef IVAS_FLOAT_FIXED -#ifndef ONE_U -#endif -#define ZERO 0 -#define ONE 1 -#define ONE_U 1u -#define TWO 2 -#define SIGNBIT 0x80000000u - -#define MAXBIT 0x40000000L /* if Word32 */ -#define MINNEG 0xffffffffL - -#define UDIVBY3 2863311531U -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * local_norm_l_opt - * - * rewritten version of STL norm_l for integer fixed point normalization - * in floating point c-code. - *-------------------------------------------------------------------*/ - -/*! r: shifts needed for normalization */ -static int16_t local_norm_l_opt( - int32_t l32var /* i/o: signed 32-bit input value */ -) -{ - int16_t l32res; - -#define WMC_TOOL_SKIP - - if ( l32var == (int32_t) MINNEG ) - { - return ( 32 - ONE ); - } - else - { - if ( l32var == ZERO ) - { - return ZERO; - } - else - { - if ( l32var < ZERO ) - { - l32var = ~l32var; - } - - for ( l32res = ZERO; l32var < (int32_t) MAXBIT; l32res++ ) - { - l32var <<= ONE; - } - } - } -#undef WMC_TOOL_SKIP - - return ( l32res ); -} - - -/*-------------------------------------------------------------------* - * floor_sqrt_exact() - * returns x = floor(sqrt(input)); where (x*x) <= input - *-------------------------------------------------------------------*/ - -/*! r: floor(sqrt(input)) */ -uint32_t floor_sqrt_exact( - const uint32_t input /* i : unsigned input [0.. UINT_MAX/4] */ -) -{ - double _tmp; - uint32_t x; - if ( input == ZERO ) - { - return ZERO; - } - - _tmp = (double) input; - x = (uint32_t) ( sqrt( _tmp ) ); /* floor is a part of the cast */ - - return x; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * f_odd_exact_div_opt() - * - * find 1/(den1*2+1) * ( num1p*num2p - num3) , - * if the result is known a priori to be exactly a 32bit unsigned integer - *-------------------------------------------------------------------*/ - -/*! r: see Eq. */ -static uint32_t f_odd_exact_div_opt( - const int16_t num1p, /* i : see Eq. */ - const uint32_t num2p, /* i : see Eq. */ - const uint32_t num3, /* i : see Eq. */ - const int16_t den1 /* i : see Eq. */ -) -{ - uint32_t tmp; - tmp = exactdivodd[den1] * ( num1p * num2p - num3 ); - - return ( tmp ); -} - -/*---------------------------------------------------------------------------* - * f_even_exact_div_opt() - * - * returns (num1p*num2p - num3 )/ den1 - * if the result is known a priori to be exactly a 32bit unsigned integer - *--------------------------------------------------------------------------*/ - -/*! r: see Eq. */ -static uint32_t f_even_exact_div_opt( - const int16_t num1p, /* i : see Eq. */ - const uint32_t num2p, /* i : see Eq. range should be larger than num1p */ - const uint32_t num3, /* i : see Eq. */ - const int16_t den1 /* i : see Eq. */ -) -{ - uint32_t tmp1, oddfactor, UL_tmp; - int16_t den1_m1; - int16_t even_sh; - uint32_t UL_tmp_h; - uint64_t ULL_tmp; - - den1_m1 = den1 - ONE; /* remove top bit */ - even_sh = ( 31 ) - local_norm_l_opt( ( den1_m1 ) ^ den1 ); /* NB STL operation defined for signed positive 32 bit variable */ - oddfactor = exactdivodd[den1_m1 >> even_sh]; - even_sh -= ONE; - - ULL_tmp = (uint64_t) num1p * (uint64_t) num2p; /* use STL Mpy_32_32_uu functionality */ - UL_tmp_h = (uint32_t) ( ULL_tmp >> 32 ); /* high output from basicop */ - UL_tmp = (uint32_t) ( ULL_tmp ); /* low output from basicop */ - - if ( num3 > UL_tmp ) - { - UL_tmp_h = UL_tmp_h - ONE_U; - } - UL_tmp = ( UL_tmp - num3 ); /* can and should underflow */ - UL_tmp = ( UL_tmp_h << ( 32 - even_sh ) ) | ( UL_tmp >> even_sh ); /* bitwise OR */ - - /* use tabled modular multiplicative inverse for the odd part division */ - tmp1 = UL_tmp * oddfactor; - - return tmp1; -} - -/*-------------------------------------------------------------------* - * a_three() - *-------------------------------------------------------------------*/ - -/*! r: offset for dim 3 */ -static uint32_t a_three( - const uint32_t k_val /* i : nb unit pulses; k_val may be higher than 16 bit signed */ -) -{ - if ( k_val ) - { - return ( ONE_U + k_val * ( ( k_val - ONE_U ) << ONE ) ); - } - else - { - return ZERO; - } -} - -/*-------------------------------------------------------------------* - * a_four() - *-------------------------------------------------------------------*/ - -/*! r: offset for dim 4 */ -static uint32_t a_four( - const uint32_t k_val /* i : nb unit pulses */ -) -{ - if ( k_val ) - { - return UDIVBY3 * ( ( k_val << ONE ) * ( 4 + ( ( k_val << ONE ) - 3 ) * k_val ) - 3 ); - } - - return ZERO; -} - -/*-------------------------------------------------------------------* - * a_five() - *-------------------------------------------------------------------*/ - -/*! r: offset for dim 5 */ -static uint32_t a_five( - const uint32_t k_val /* i : nb unit pulses */ -) -{ - uint32_t offset; - - if ( k_val == 0 ) - { - offset = 0; - } - else if ( k_val == 1 ) - { - offset = 1; - } - else - { - offset = ( ONE_U + ( ( ( ( ( ( k_val - TWO ) * k_val + 5 ) * k_val - 4 ) * k_val ) * ( UDIVBY3 ) ) << ONE ) ); - } - return offset; -} - -/*-------------------------------------------------------------------* - * direct_msize() - *-------------------------------------------------------------------*/ -/*! r: Enumeration size */ -static uint32_t direct_msize( - const int16_t dim_in, /* i : Number of dimensions */ - const int16_t k_in ) /* i : Number of pulses */ -{ - uint32_t msize, k, ksq; - - msize = ONE_U; /* k==0 or dim==1, and base */ - if ( k_in ) - { - k = (uint32_t) k_in; - ksq = k * k; - switch ( dim_in ) - { - case ( 5 ): - /* k*k = 238*238 < 2^16 */ - msize += ( ( ( ksq * ( 5 + ksq ) ) * UDIVBY3 ) << ONE ); - break; - case ( 4 ): - msize = ( ( k * ( ksq + 2 ) ) * UDIVBY3 ) << TWO; - break; - case ( 3 ): - msize += ( ( ksq ) << ONE ); - break; - case ( 2 ): - msize = k << ONE; - break; - } - } - - return msize; -} - - -/*-------------------------------------------------------------------* - * initOffsets() - * - * update h_mem[0.. k_val_in+1] , with starting offsets for A+U recursion - *-------------------------------------------------------------------*/ - -static void initOffsets( - const int16_t dim_in, /* i : Number of dimensions */ - uint32_t *h_mem, /* o : offsets */ - const int16_t k_val_in /* i : Number of pulses */ -) -{ - int16_t k_val_curr, k_val_prev; - int16_t k_val; - h_mem[0] = ZERO; /* % A(=>0,k=0) */ - h_mem[1] = ONE_U; /* % A(*,k=1) */ - - if ( dim_in == 2 ) - { - for ( k_val = TWO; k_val <= k_val_in; k_val++ ) - { - h_mem[k_val] = (uint32_t) ( ( k_val << ONE ) - ONE ); /* A(2, 2 .. k ) */ - } - h_mem[k_val] = (uint32_t) ( k_val_in ); /* U(2,k+1) */ - } - else if ( dim_in == 3 ) - { - k_val_prev = ONE; - for ( k_val_curr = TWO; k_val_curr <= k_val_in; k_val_curr++ ) - { - h_mem[k_val_curr] = ( ONE_U + k_val_curr * ( k_val_prev << ONE ) ); - k_val_prev = k_val_curr; - } - h_mem[k_val_curr] = k_val_curr * k_val_prev; - } - else if ( dim_in == 4 ) - { - for ( k_val_curr = TWO; k_val_curr <= k_val_in; k_val_curr++ ) - { - h_mem[k_val_curr] = UDIVBY3 * ( ( k_val_curr << ONE ) * ( 4 + ( ( k_val_curr << ONE ) - 3 ) * k_val_curr ) - 3 ); - } - h_mem[k_val_curr] = ( UDIVBY3 * ( ( k_val_curr << ONE ) * ( 4 + ( ( k_val_curr << ONE ) - 3 ) * k_val_curr ) - 3 ) ) >> 1; - } - - return; -} - - -/*-------------------------------------------------------------------* - * a_fwd() - * - * create offsets for A(n,k) from lower A(n-1,k) - *-------------------------------------------------------------------*/ - -static void a_fwd( - uint32_t *a_in, /* i/o: offsets */ - const int16_t n_items /* i : items, k's */ -) -{ - uint32_t a_1; - int16_t i, i_prev; - uint32_t a_in0; /* i : start column value */ - - a_in0 = ONE_U; - i_prev = ZERO; - for ( i = ONE; i <= n_items; i++ ) /*basic A fwd row recursion */ - { - a_1 = a_in0 + a_in[i_prev] + a_in[i]; /* a_in addressed in at least two locations */ - a_in[i_prev] = a_in0; - a_in0 = a_1; - i_prev = i; /* no real need to count as it is a ptr update */ - } - a_in[i_prev] = a_in0; - - return; -} - -/*-------------------------------------------------------------------* - * a_bwd() - * - * create offsets for A(n,k) from higher A(n+1,k) - *-------------------------------------------------------------------*/ - -static void a_bwd( - uint32_t *a_in, /* i/o: offsets */ - const int16_t n_items /* i : n_items */ -) -{ - uint32_t a_1; - uint32_t a_in0; - int16_t i; - int16_t i_prev; - - a_in0 = ZERO; - i_prev = ZERO; - for ( i = ONE; i <= n_items; i++ ) /*basic A reverse row recursion */ - { - a_1 = a_in[i] - a_in0 - a_in[i_prev]; - a_in[i_prev] = a_in0; - a_in0 = a_1; - i_prev = i; - } - a_in[i_prev] = a_in0; - - return; -} - -/*-------------------------------------------------------------------* - * direct_row_A2U_rec_calc() - * - * - *-------------------------------------------------------------------*/ - -static uint32_t direct_row_A2U_rec_calc( - const int16_t dim_in, /* i : Number of dimensions */ - const int16_t k_val_in, /* i : Number of pulses */ - const uint32_t a_km2, /* i : Recursion for k-2 (see Eq below) */ - const uint32_t a_km1 /* i : Recursion for k-1 (see Eq below) */ -) -{ - - /* U(n,k) = (A(n,k-2)-1)/2 + ((2*n-1)*A(n,k-1) - A(n,k-2) )/2*(k-1) */ - /* U(n,k) = floor(A(n,k-2)/2) + (n*A(n,k-1) - floor(A(n,k-1)/2) - floor(A(n,k-2)/2) +1 )/(k-1) */ - /* U(n,k) = floor(A(n,k-2)/2) + (n*A(n,k-1) - (floor(A(n,k-1)/2) + floor(A(n,k-2)/2) +1) ) /(k-1) */ - - uint32_t km2_size, result; - int16_t divisor; - - divisor = k_val_in - ONE; - km2_size = ( a_km1 >> ONE ) + ( a_km2 >> ONE ) + ONE_U; - - if ( divisor & ONE ) - { - /* odd */ - result = ( ( a_km2 >> ONE ) + f_odd_exact_div_opt( dim_in, a_km1, km2_size, divisor >> ONE ) ); - } - else - { - /* even divisor */ - result = ( ( a_km2 >> ONE ) + f_even_exact_div_opt( dim_in, a_km1, km2_size, divisor ) ); - } - - return result; -} - -/*-------------------------------------------------------------------* - * a_u_fwd() - * - * - *-------------------------------------------------------------------*/ - -static void a_u_fwd( - uint32_t *a_u_in, /* o : auxiliary array a_u */ - const int16_t k_val_in, /* i : number of pulses */ - const int16_t mem_size_m1 /* i : length of a_u_in */ -) -{ - uint32_t u_kp1_prev; - uint32_t a_k_prev; - - /* mem_size_m1 = 1 + k_val_in */ - u_kp1_prev = a_u_in[mem_size_m1]; /* previous n U (n,k+1) value*/ - a_k_prev = a_u_in[k_val_in]; /* previous n A(n,k) value*/ - - a_fwd( &a_u_in[ONE], k_val_in ); /* a_u_in[k==ZERO] = zero if n>0 */ - - /* low dynamic last offset entry mixed recursion */ - /* used for size calculation */ - /* U(n,k+1) = 1 + U(n-1,k+1) + U(n-1,k) + U(n,k) */ - /* U(n,k+1) = 1 + U(n-1,k+1) + (A(n-1,k)-1)/2 + (A(n,k)-1)/2 */ - /* Note, A(n,k) always odd for k>0, subtracted one always shifted out */ - /* assert(a_k_prev>0, a_k-curr>0) */ - - a_u_in[mem_size_m1] = ONE_U + u_kp1_prev + ( a_k_prev >> ONE ) + ( a_u_in[k_val_in] >> ONE ); - - return; -} - -/*-------------------------------------------------------------------* - * nm_h_prep_opt() - * - * find and return N_MPVQ(n,k) and also offsets A(n, 0 to k ) and U(n,k+1). - *-------------------------------------------------------------------*/ - -/*! r: msize for dim */ -static uint32_t nm_h_prep_opt( - const int16_t dim_in, /* i : dimension */ - int16_t k_val_in, /* i : nb unit pulses */ - uint32_t *h /* o : A/U offsets array */ -) -{ - int16_t mem_size_m1, k_val; - int16_t dim_tmp, d_start; - uint32_t h_saveA, h_saveB; /* registers for alternating A(n,k-1), A(n,k-2)*/ - int16_t numDsub1; /* k_val_curr, k_val_prev*/ - - mem_size_m1 = k_val_in + ONE; - - if ( k_val_in > TABLE_LIM_OPT ) - { - if ( dim_in >= 3 ) - { - d_start = 3; - } - else - { - d_start = 2; - } - initOffsets( d_start, h, k_val_in ); - - for ( dim_tmp = d_start; dim_tmp < dim_in; dim_tmp++ ) - { - a_u_fwd( h, k_val_in, mem_size_m1 ); - } - } - else - { - h[ZERO] = ZERO; - h[ONE] = ONE_U; - numDsub1 = ( ( dim_in << ONE ) - ONE ); - h[TWO] = numDsub1; - - /* interleaved odd even calls */ - h_saveA = numDsub1; - h_saveB = ONE_U; - for ( k_val = 3; k_val < ( mem_size_m1 ); k_val++ ) - { - /* A(n,k) = A(n,k-2) + ((2*n-1)*A(n,k-1)-A(n,k-2)) /(k-1) */ - /* first odd k, even divisor */ - h_saveB += f_even_exact_div_opt( numDsub1, h_saveA, h_saveB, k_val - ONE ); - h[k_val] = h_saveB; - - k_val++; /* next even k, odd divisor */ - if ( k_val >= ( mem_size_m1 ) ) - { - break; - } - h_saveA += f_odd_exact_div_opt( numDsub1, h_saveB, h_saveA, ( k_val - ONE ) >> ONE ); - h[k_val] = h_saveA; - } - /* always do the last (k+1) recursion based on U(n,k+1) = func( A(n-2,k+1), A(n-1,k+1) ) */ - h[mem_size_m1] = direct_row_A2U_rec_calc( dim_in, mem_size_m1, h[mem_size_m1 - 2], h[k_val_in] ); - } - - /* N_MPVQ(n,k) = 1 + U(n,k+1) + U(n,k) = 1 + U(n,k+1) + (A(n,k)-1)/2; */ /* A(n,k) always odd */ - return ( ONE + h[mem_size_m1] + ( h[k_val_in] >> ONE ) ); -} - - -/*-------------------------------------------------------------------* - * find_amp_split_offset_func_mem() - * - * find first offset in range 0..k_val_in that is less than ind_in - * using a tree search with direct function calls or memory iteration - *-------------------------------------------------------------------*/ - -static int16_t find_amp_split_offset_func_mem( - const uint32_t ind_in, /* i : input index */ - const int16_t k_val_in, /* i : number of pulses */ - H_FUNCM h_func_ptr, /* i : offset function pointer */ - const uint32_t *const h_mem, /* i : offsets */ - uint32_t *tmp_offset /* o : offset found */ -) -{ - int16_t not_ready, low, high; - int16_t k_test; - - k_test = -1; /* init to eliminate compiler warning */ - low = 0; - high = k_val_in; - /* split over A(n,k)= h_mem(k), or use direct function */ - not_ready = ONE; - while ( not_ready ) - { - k_test = ( low + high ) >> ONE; /*% split range in half */ - - if ( h_mem ) - { - *tmp_offset = h_mem[k_test]; /* memory search */ - } - else - { - *tmp_offset = ( *h_func_ptr )( (uint32_t) k_test ); /* function search. NB only line difference to the memory search*/ - } - - if ( ind_in > *tmp_offset ) - { - if ( k_test < high ) - { - low = 1 + k_test; - } - else - { - not_ready = 0; - } - } - else - { - if ( *tmp_offset == ind_in ) - { - not_ready = 0; - } - else - { - high = k_test - 1; - } - } - } - - return k_test; -} - -/*-------------------------------------------------------------------* - * get_lead_sign() - * - * update index and return leading sign - *-------------------------------------------------------------------*/ - -/*! r: leading sign [-1,1] */ -static int16_t get_lead_sign( - uint32_t *ind /* i/o: Current index */ -) -{ - int16_t leading_sign; - - if ( ( *ind ) & ONE_U ) /* leading sign stored in LSB */ - { - leading_sign = -1; - } - else - { - leading_sign = 1; - } - ( *ind ) = ( *ind ) >> ONE; - - return leading_sign; -} - - -/*-------------------------------------------------------------------* - * mind2vec_one() - *-------------------------------------------------------------------*/ - -static void mind2vec_one( - const int16_t k_val_in, /* i : nb unit pulses */ - const int16_t leading_sign, /* i : leading sign */ - const uint32_t ind, /* i : index */ - int16_t *vec_out /* o : pulse train */ -) -{ - - vec_out[ind] = ( leading_sign * k_val_in ); /* NB input k_val_in can be zero */ - - return; -} - -/*-------------------------------------------------------------------* - * mind2vec_two() - *-------------------------------------------------------------------*/ - -static void mind2vec_two( - const int16_t k_val_in, /* i : nb unit pulses */ - const int16_t leading_sign, /* i : leading sign */ - const uint32_t ind_in, /* i : index */ - int16_t *vec_out /* o : pulse train */ -) -{ - uint32_t ind_tmp; - int16_t val1; - - if ( k_val_in > 0 ) /* k_val_in check */ - { - if ( ind_in == 0 ) - { - vec_out[0] = ( leading_sign * k_val_in ); - vec_out[1] = 0; - } - else if ( ind_in == ( (uint32_t) ( k_val_in << ONE ) - ONE_U ) ) - { - vec_out[0] = 0; - vec_out[1] = ( leading_sign * k_val_in ); - } - else - { - ind_tmp = ind_in - ONE_U; - val1 = (int16_t) ( ONE_U + ( ind_tmp >> ONE ) ); - vec_out[0] = leading_sign * ( k_val_in - val1 ); - - if ( ind_tmp & ONE_U ) - { - vec_out[1] = -val1; - } - else - { - vec_out[1] = val1; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * setval_update_sign() - * - * - *-------------------------------------------------------------------*/ - -/*! r: max k */ -static int16_t setval_update_sign( - const int16_t k_delta, /* i : Delta-K */ - int16_t k_max_local, /* i/o: Maximum K */ - int16_t *leading_sign, /* o : Leading sign */ - uint32_t *ind_in, /* i/o: Index/index with leading sign excluded */ - int16_t *vec_out /* o : Output vector */ -) -{ - if ( k_delta != 0 ) - { - *vec_out = ( *leading_sign ) * k_delta; - *leading_sign = get_lead_sign( ind_in ); - k_max_local = k_max_local - k_delta; - } - - return k_max_local; -} - -/*-------------------------------------------------------------------* - * mind2vec_three() - *-------------------------------------------------------------------*/ - -static void mind2vec_three( - int16_t k_max_local, /* i : nb unit pulses */ - int16_t leading_sign, /* i : leading sign */ - uint32_t ind_in, /* i : index */ - int16_t *vec_out /* o : pulse train */ -) -{ - int16_t k_delta; - uint32_t acc_val; - - /* - use direct calculation of first amplitude - (to find amplitudes faster than using split or linear iteration) - */ - if ( ind_in == 0 ) - { - vec_out[0] = leading_sign * k_max_local; - } - else - { - acc_val = ( ( ONE_U + floor_sqrt_exact( ( ind_in << ONE ) - ONE_U ) ) >> ONE ); /* in BASOP use approximation + search for exact sqrt )*/ - - k_delta = k_max_local - (int16_t) acc_val; - ind_in -= a_three( acc_val ); /* remove amplitude offset A(n,k_acc) */ - - k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind_in, vec_out ); - - mind2vec_two( k_max_local, leading_sign, ind_in, &vec_out[1] ); - } - - return; -} - -/*-------------------------------------------------------------------* - * mind2vec_direct() - * - * general function for direct decoding using direct functions - * (no memory recursion) - *-------------------------------------------------------------------*/ - -static void mind2vec_direct( - int16_t k_max_local, /* i : nb unit pulses */ - int16_t leading_sign, /* i : leading sign */ - uint32_t ind, /* i : index */ - H_FUNCM h_func_ptr, /* i : offset function */ - NDIM_FUNCM nd_func_ptr, /* i : next dimension function */ - int16_t *vec_out /* o : pulse train */ -) -{ - int16_t k_delta, k_test = 0; - uint32_t tmp_offset; - - if ( ind == 0 ) - { - vec_out[0] = leading_sign * k_max_local; - } - else - { - k_test = find_amp_split_offset_func_mem( ind, k_max_local, h_func_ptr, NULL, &tmp_offset ); - - k_delta = k_max_local - k_test; - ind = ind - tmp_offset; /* % remove amplitude offset A(n,k_acc) */ - k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind, vec_out ); - ( *nd_func_ptr )( k_max_local, leading_sign, ind, &vec_out[1] ); - } - - return; -} - -/*-------------------------------------------------------------------* - * mind2vec_four() - *-------------------------------------------------------------------*/ - -static void mind2vec_four( - int16_t k_val_in, /* i : nb unit pulses */ - int16_t leading_sign, /* i : leading sign */ - uint32_t ind_in, /* i : index */ - int16_t *vec_out /* o : pulse train */ -) -{ - mind2vec_direct( k_val_in, leading_sign, ind_in, a_four, mind2vec_three, vec_out ); - - return; -} - -/*-------------------------------------------------------------------* - * mind2vec_five() - *-------------------------------------------------------------------*/ - -static void mind2vec_five( - int16_t k_val_in, /* i : nb unit pulses */ - int16_t leading_sign, /* i : leading sign */ - uint32_t ind_in, /* i : index */ - int16_t *vec_out /* o : pulse train */ -) -{ - mind2vec_direct( k_val_in, leading_sign, ind_in, a_five, mind2vec_four, vec_out ); - - return; -} - - -/*-------------------------------------------------------------------* - * mind2vec() - *-------------------------------------------------------------------*/ - -static void mind2vec( - int16_t dim_in, /* i : dimension */ - int16_t k_max_local, /* i : nb unit pulses */ - int16_t leading_sign, /* i : leading sign */ - uint32_t ind, /* i : index */ - int16_t *vec_out, /* o : pulse train */ - uint32_t *h_in /* i : offset vector A=1+2U */ -) -{ - int16_t pos; - int16_t k_acc, k_delta; - uint32_t tmp_offset; - - k_acc = k_max_local; - - pos = ZERO; - while ( pos < dim_in ) /* first to last position decoding */ - { - if ( ind == 0 ) - { - vec_out[pos] = leading_sign * k_max_local; - break; /* "fast" recursion exit */ - } - else - { - { - /* linear magnitude search */ - k_acc = k_max_local; - tmp_offset = h_in[k_acc]; - while ( tmp_offset > ind ) - { - k_acc = k_acc - 1; - tmp_offset = h_in[k_acc]; - } - } - k_delta = k_max_local - k_acc; /* amplitude decoding */ - } - ind = ind - tmp_offset; /* remove amplitude index offset A(n,k_acc) */ - - k_max_local = setval_update_sign( k_delta, k_max_local, &leading_sign, &ind, &vec_out[pos] ); - - /* move from A(n,kmax) to A(n-1, k_max_local), */ - a_bwd( h_in, k_max_local + 1 ); /* [0..k_max_local], no need to calculate U(n,k_max_local+1) in index decoding */ - pos = pos + 1; - } - - return; -} - - -/*-------------------------------------------------------------------* - * vec2mind_one() - *-------------------------------------------------------------------*/ - -static void vec2mind_one( - const int16_t *vec_in, /* i : PVQ abs pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *ind /* o : MPVQ index */ -) -{ - *k_val_out_ptr = -1; /* just to avoid compiler warnings */ - - *ind = ZERO; - /* *k_val_out_ptr = (int16_t)abs(*vec_in); */ /* dim==1, function not called recursively */ - *next_sign_ind = (uint32_t) ( *vec_in < ZERO ); /* single sign always pushed out of MPVQ */ - return; -} - -/*-------------------------------------------------------------------* - * vec2mind_two() - *-------------------------------------------------------------------*/ - -static void vec2mind_two( - const int16_t *vec_in, /* i : PVQ pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *ind /* o : MPVQ index */ -) -{ - uint32_t lead_sign_ind; - int16_t abs0, abs1, abs01; - - abs0 = (int16_t) abs( vec_in[0] ); - abs1 = (int16_t) abs( vec_in[1] ); - - abs01 = abs0 + abs1; - *k_val_out_ptr = abs01; - - if ( abs01 == 0 ) /* zeroes can happen in a recursive encoding call */ - { - *next_sign_ind = SIGNBIT; - *ind = ZERO; - } - else - { - *next_sign_ind = 0; - if ( abs1 == 0 ) - { - *ind = ZERO; - } - else if ( abs0 == 0 ) - { - *ind = (uint32_t) ( abs1 << ONE ) - ONE_U; - *next_sign_ind = 1; - } - else - { - lead_sign_ind = (uint32_t) ( vec_in[1] < 0 ); /*% sign always shifted to first pos */ - *ind = ONE_U + ( (uint32_t) ( abs1 - 1 ) << ONE ) + lead_sign_ind; - } - *next_sign_ind = (uint32_t) ( vec_in[*next_sign_ind] < 0 ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * vec2mind_gen345( vec_in kval, next_dim_func, offset_func,....) - * generic call saves PROM , - *-------------------------------------------------------------------*/ - -static void vec2mind_gen345( - const int16_t *vec_in, /* i : PVQ abs pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *index, /* o : MPVQ index */ - VEC2INDFUNCM vec2indfunc_ptr, /* i : */ - H_FUNCM a_func_ptr /* i : offset function */ -) -{ - int16_t tmp_val; - - tmp_val = vec_in[ZERO]; - ( *vec2indfunc_ptr )( &vec_in[ONE], k_val_out_ptr, next_sign_ind, index ); - - if ( ( ( *next_sign_ind & SIGNBIT ) == 0 && tmp_val != 0 ) != ZERO ) - { - *index = ( *index << ONE ) + *next_sign_ind; - } - - if ( tmp_val != 0 ) /* push sign */ - { - *next_sign_ind = (uint32_t) ( tmp_val < 0 ); - } - - *index += ( *a_func_ptr )( (uint32_t) *k_val_out_ptr ); - if ( tmp_val > 0 ) - { - *k_val_out_ptr += tmp_val; - } - else - { - *k_val_out_ptr -= tmp_val; - } - - return; -} - - -/*-------------------------------------------------------------------* - * vec2mind_three() - *-------------------------------------------------------------------*/ - -static void vec2mind_three( - const int16_t *vec_in, /* i : PVQ pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *index /* o : MPVQ index */ -) -{ - vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_two, a_three ); - - return; -} - -/*-------------------------------------------------------------------* - * vec2mind_four() - *-------------------------------------------------------------------*/ - -static void vec2mind_four( - const int16_t *vec_in, /* i : PVQ pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *index /* o : MPVQ index */ -) -{ - vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_three, a_four ); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * vec2mind_five() - *-------------------------------------------------------------------*/ - -static void vec2mind_five( - const int16_t *vec_in, /* i : PVQ abs pulse train */ - int16_t *k_val_out_ptr, /* o : number of unit pulses */ - uint32_t *next_sign_ind, /* i/o: next sign ind */ - uint32_t *index /* o : MPVQ index */ -) -{ - vec2mind_gen345( vec_in, k_val_out_ptr, next_sign_ind, index, vec2mind_four, a_five ); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * vec2mind() - *-------------------------------------------------------------------*/ - -static void vec2mind( - int16_t dim_in, /* i : dim */ - int16_t k_val_in, /* i : number of unit pulses */ - const int16_t *vec_in, /* i : PVQ pulse train */ - uint32_t *next_sign_ind, /* o : pushed leading sign */ - uint32_t *index, /* o : MPVQ index */ - uint32_t *N_MPVQ_ptr, /* o : size(N_MPVQ(dim,K_val_in))*/ - uint32_t *h_mem /* o : offsets */ -) -{ - int16_t pos, mem_size_m1; - int16_t k_val_acc; - int16_t tmp_val; - - mem_size_m1 = k_val_in + ONE; - - *next_sign_ind = SIGNBIT; /* % should always be 0 or 1 out, highest bit set signals no sign found yet*/ - - pos = dim_in - 2; /* % address 2nd last sample */ - vec2mind_two( &vec_in[pos], &k_val_acc, next_sign_ind, index ); - initOffsets( 3, h_mem, k_val_in ); - - for ( pos--; pos >= 0; pos-- ) - { - /* - % Check if the leading sign 'bit' is to be added - */ - tmp_val = vec_in[pos]; - if ( ( ( *next_sign_ind & SIGNBIT ) == 0 && ( tmp_val != 0 ) ) ) - { - *index = ( *index << ONE ) + ( *next_sign_ind ); - } - - /* % push sign fwd, for encoding in the next non_zero position */ - if ( tmp_val != 0 ) - { - *next_sign_ind = (uint32_t) ( tmp_val < 0 ); - } - - /*% add indexing offset up to this reverse (r_l) accumulated amplitude point */ - *index += h_mem[k_val_acc]; /* % k_val_acc==0 ==>0 */ - - k_val_acc += (int16_t) abs( tmp_val ); /*% now increase acc k value for next N */ - - if ( pos ) - { - a_u_fwd( h_mem, k_val_in, mem_size_m1 ); - /*% update A(n,k=1:k_val_in) and U(n,k_val_in+1), NB here (k_val_in + 2 elements always has to be updated */ - } - } - - /* size is needed for the subseqent arithmetic encoding/transmission of the index. */ - /* use relation N_MPVQ(n,K) = 1 + (A(n, K)-1)/2 + U(n, 1 + K) */ - /* = N_MPVQ(n,K) = 1 + (A(n, K)>>1) + U(n, 1 + K), as A(n,K) is odd) */ - - *N_MPVQ_ptr = ONE_U + ( h_mem[k_val_acc] >> ONE ) + h_mem[mem_size_m1]; /* total size size */ - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * mpvq_encode_vec() - * - * returns struct with leading sign index, MPVQ-index, dim and N_MPVQ - *-------------------------------------------------------------------------*/ - -/*! r: leading_sign_index, index, size, k_val */ -PvqEntry mpvq_encode_vec( - const int16_t *vec_in, /* i : signed pulse train */ - const int16_t dim_in, /* i : dimension */ - int16_t k_val_local /* i/o: nb unit pulses */ -) -{ - PvqEntry result; - uint32_t h_mem[1 + KMAX_NON_DIRECT + 1]; /* allocate max offset memory for dim 6 */ /* OPT: actually only 1+k_val_in+1 needed ) */ - uint32_t lead_sign_ind; - const VEC2INDFUNCM vec2mind_f[1 + N_OPT] = { NULL, vec2mind_one, vec2mind_two, vec2mind_three, vec2mind_four, vec2mind_five }; /* VEC2INDFUNCM can be a static global */ - - result.k_val = k_val_local; - result.dim = dim_in; - - /* NB, k_val_local may be changed in some sub encoding routines */ - if ( dim_in > N_OPT ) /* use the generic dimension function */ - { - vec2mind( dim_in, k_val_local, vec_in, &lead_sign_ind, &result.index, &result.size, h_mem ); - } - else /* if (dim_in<=N_OPT) */ - { - ( vec2mind_f[dim_in] )( vec_in, &k_val_local, &lead_sign_ind, &result.index ); - result.size = direct_msize( dim_in, k_val_local ); /* k_val_local not used for dim==1 */ - } - result.lead_sign_ind = (int16_t) lead_sign_ind; - - return result; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_size_mpvq_calc_offset() - * - * uint32_t h_mem[1 + KMAX +1 ]; - * example using fixed size of offset vector input help variable - *-------------------------------------------------------------------*/ - -/*! r: size, dim, k_val */ -PvqEntry get_size_mpvq_calc_offset( - const int16_t dim_in, /* i : dimension */ - const int16_t k_val_in, /* i : nb unit pulses */ - uint32_t *h_mem /* o : offsets */ -) -{ - PvqEntry entry; - - entry.dim = dim_in; - entry.k_val = k_val_in; - entry.index = 0U; /* avoid gcc warning in struct passing */ - entry.lead_sign_ind = 0; /* avoid gcc warning in struct passing */ - if ( dim_in > N_OPT ) /* non-direct solutions, use A+U relation */ - { - entry.size = nm_h_prep_opt( entry.dim, entry.k_val, h_mem ); - } - else - { - entry.size = direct_msize( dim_in, entry.k_val ); /* ues equations, h_mem is not used */ - } - - - return entry; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * mpvq_decode_vec() - *-------------------------------------------------------------------*/ - -/*! r: void */ -void mpvq_decode_vec( - const PvqEntry *entry, /* i : sign_ind, index, dim, k_val */ - uint32_t *h_mem, /* i : A/U offsets */ - int16_t *vec_out /* o : pulse train */ -) -{ - int16_t i, leading_sign; - const IND2VECFUNCM mind2vec_f[N_OPT + 1] = { NULL, mind2vec_one, mind2vec_two, mind2vec_three, mind2vec_four, mind2vec_five }; /*IND2VECFUNCM vector can be static global */ - - for ( i = 0; i < entry->dim; i++ ) - { - vec_out[i] = ZERO; /* set all of short output vector to zero */ - } - - leading_sign = 1; - if ( entry->lead_sign_ind ) - { - leading_sign = -1; - } - - if ( entry->k_val != 0 ) - { - if ( entry->dim > N_OPT ) /* N_OPT */ - { - /* generic */ - mind2vec( entry->dim, entry->k_val, leading_sign, entry->index, vec_out, h_mem ); - } - else - { - /* specialized functions */ - ( mind2vec_f[entry->dim] )( entry->k_val, leading_sign, entry->index, vec_out ); - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED - -#ifdef ONE_U -#undef ZERO -#undef ONE -#undef ONE_U -#undef TWO -#undef MAXBIT -#undef MINNEG -#undef SIGNBIT -#undef UDIVBY3 -#endif - -#endif diff --git a/lib_com/int_lsp.c b/lib_com/int_lsp.c index 0fee8af99..37ca1ca4b 100644 --- a/lib_com/int_lsp.c +++ b/lib_com/int_lsp.c @@ -42,61 +42,6 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * int_lsp() - * - * Find the interpolated LSP parameters for all subframes - *---------------------------------------------------------------------*/ - -void int_lsp( - const int16_t L_frame, /* i : length of the frame */ - const float lsp_old[], /* i : LSPs from past frame */ - const float lsp_new[], /* i : LSPs from present frame */ - float *Aq, /* o : LP coefficients in both subframes */ - const int16_t m, /* i : order of LP filter */ - const float *int_coeffs, /* i : interpolation coefficients */ - const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ -) -{ - float lsp[M], fnew, fold; - int16_t i, k; - const float *pt_int_coeffs; - - if ( L_frame == L_FRAME ) - { - pt_int_coeffs = int_coeffs; - } - else /* L_frame == L_FRAME16k */ - { - pt_int_coeffs = interpol_frac_16k; - } - - for ( k = 0; k < L_frame / L_SUBFR; k++ ) - { - fnew = pt_int_coeffs[k]; - fold = (float) ( 1.0f - fnew ); - - for ( i = 0; i < m; i++ ) - { - lsp[i] = lsp_old[i] * fold + lsp_new[i] * fnew; - } - - if ( Opt_AMR_WB ) - { - isp2a( lsp, Aq, m ); - } - else - { - lsp2a_stab( lsp, Aq, m ); - } - - Aq += ( m + 1 ); - } - - return; -} -#endif void int_lsp_fx( const Word16 L_frame, /* i : length of the frame */ @@ -158,88 +103,6 @@ void int_lsp_fx( return; } -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * int_lsp4() - * - * Interpolate LSPs find the A[z] parameters for all subframes by interpolating between - * old end-frame LSPs, current mid-frame LSPs and current end-frame LSPs - *---------------------------------------------------------------------*/ - -void int_lsp4( - const int16_t L_frame, /* i : length of the frame */ - const float lsp_old[], /* i : LSPs from past frame */ - const float lsp_mid[], /* i : LSPs from mid-frame */ - const float lsp_new[], /* i : LSPs from present frame */ - float *Aq, /* o : LP coefficients in both subframes */ - const int16_t m, /* i : order of LP filter */ - int16_t relax_prev_lsf_interp /* i : relax prev frame lsf interp after erasure */ -) -{ - float lsp[M]; - int16_t i; - int16_t j; - const float *pt_int_coeffs; - - if ( L_frame == L_FRAME ) - { - if ( relax_prev_lsf_interp == 1 ) - { - pt_int_coeffs = interpol_frac_mid_relaxprev_12k8; - } - else if ( relax_prev_lsf_interp == 2 ) - { - pt_int_coeffs = interpol_frac_mid_FEC; - } - else if ( relax_prev_lsf_interp == -1 ) - { - pt_int_coeffs = interpol_frac_mid_relaxprev_pred_12k8; - } - else if ( relax_prev_lsf_interp == -2 ) - { - pt_int_coeffs = interpol_frac2_mid; - } - else - { - pt_int_coeffs = interpol_frac_mid; - } - } - else /* L_frame == L_FRAME16k */ - { - if ( relax_prev_lsf_interp == 1 ) - { - pt_int_coeffs = interpol_frac_mid_relaxprev_16k; - } - else if ( relax_prev_lsf_interp == 2 ) - { - pt_int_coeffs = interpol_frac_mid_16k_FEC; - } - else if ( relax_prev_lsf_interp == -1 ) - { - pt_int_coeffs = interpol_frac_mid_relaxprev_pred_16k; - } - else - { - pt_int_coeffs = interpol_frac_mid_16k; - } - } - - for ( j = 0; j < L_frame / L_SUBFR; j++ ) - { - for ( i = 0; i < m; i++ ) - { - lsp[i] = lsp_old[i] * ( *pt_int_coeffs ) + lsp_mid[i] * ( *( pt_int_coeffs + 1 ) ) + lsp_new[i] * ( *( pt_int_coeffs + 2 ) ); - } - pt_int_coeffs += 3; - - lsp2a_stab( lsp, Aq, m ); - - Aq += ( m + 1 ); - } - - return; -} -#endif void int_lsp4_fx( const Word16 L_frame, /* i : length of the frame */ diff --git a/lib_com/interleave_spectrum.c b/lib_com/interleave_spectrum.c index c38de90af..f65b7a5c5 100644 --- a/lib_com/interleave_spectrum.c +++ b/lib_com/interleave_spectrum.c @@ -41,95 +41,9 @@ #include "rom_com.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * interleave_spectrum() - * - * Interleave the spectrum - *--------------------------------------------------------------------------*/ - -void interleave_spectrum( - float *coefs, /* i/o: input and output coefficients */ - const int16_t length /* i : length of spectrum */ -) -{ - int16_t i, j, k; - float *p1, *p2, *p3, *p4; - float *p_out; - float coefs_out[STOP_BAND]; - int16_t sublen; - int16_t grps; - const int16_t *bw; - const int16_t *cnt; - int16_t l_frame; - - l_frame = length; - - if ( length == L_SPEC48k ) - { - bw = intl_bw_48; - cnt = intl_cnt_48; - grps = N_INTL_GRP_48; - l_frame = L_FRAME48k; - } - else if ( length == L_SPEC32k ) - { - bw = intl_bw_32; - cnt = intl_cnt_32; - grps = N_INTL_GRP_32; - } - else /* length == L_SPEC16k */ - { - bw = intl_bw_16; - cnt = intl_cnt_16; - grps = N_INTL_GRP_16; - } - - sublen = l_frame / 4; - p1 = coefs; - p2 = coefs + sublen; - p3 = coefs + sublen * 2; - p4 = coefs + sublen * 3; - p_out = coefs_out; - for ( i = 0; i < grps; i++ ) - { - for ( j = 0; j < cnt[i]; j++ ) - { - for ( k = 0; k < bw[i]; k++ ) - { - *p_out++ = *p1++; - } - - for ( k = 0; k < bw[i]; k++ ) - { - *p_out++ = *p2++; - } - - for ( k = 0; k < bw[i]; k++ ) - { - *p_out++ = *p3++; - } - for ( k = 0; k < bw[i]; k++ ) - { - *p_out++ = *p4++; - } - } - } - - /* For FB the interleaved spectrum is 800 samples */ - mvr2r( coefs_out, coefs, (int16_t) ( p_out - coefs_out ) ); - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void interleave_spectrum_fx( Word32 *coefs, /* i/o: input and output coefficients Q12 */ const Word16 length /* i : length of spectrum Q0 */ @@ -302,89 +216,7 @@ void interleave_spectrum_ivas_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * de_interleave_spectrum() - * - * Deinterleave the spectrum - *--------------------------------------------------------------------------*/ - -void de_interleave_spectrum( - float *coefs, /* i/o: input and output coefficients */ - int16_t length /* i : length of spectrum */ -) -{ - int16_t i, j, k; - float *p1, *p2, *p3, *p4; - float *p_in; - float coefs_out[L_FRAME48k]; - int16_t sublen; - int16_t grps; - const int16_t *bw; - const int16_t *cnt; - int16_t l_frame; - - l_frame = length; - - if ( length == L_SPEC48k ) - { - bw = intl_bw_48; - cnt = intl_cnt_48; - grps = N_INTL_GRP_48; - l_frame = L_FRAME48k; - } - else if ( length == L_FRAME32k ) - { - bw = intl_bw_32; - cnt = intl_cnt_32; - grps = N_INTL_GRP_32; - } - else /* length == L_FRAME16k */ - { - bw = intl_bw_16; - cnt = intl_cnt_16; - grps = N_INTL_GRP_16; - } - - set_f( coefs_out, 0, L_FRAME48k ); - sublen = l_frame / 4; - p1 = coefs_out; - p2 = coefs_out + sublen; - p3 = coefs_out + sublen * 2; - p4 = coefs_out + sublen * 3; - p_in = coefs; - - for ( i = 0; i < grps; i++ ) - { - for ( j = 0; j < cnt[i]; j++ ) - { - for ( k = 0; k < bw[i]; k++ ) - { - *p1++ = *p_in++; - } - for ( k = 0; k < bw[i]; k++ ) - { - *p2++ = *p_in++; - } - for ( k = 0; k < bw[i]; k++ ) - { - *p3++ = *p_in++; - } - for ( k = 0; k < bw[i]; k++ ) - { - *p4++ = *p_in++; - } - } - } - - mvr2r( coefs_out, coefs, l_frame ); - - return; -} -#endif void ivas_de_interleave_spectrum_fx( Word32 *coefs, /* i/o: input and output coefficients Q12 */ diff --git a/lib_com/interpol.c b/lib_com/interpol.c index 25b4f7c8e..7d74298b1 100644 --- a/lib_com/interpol.c +++ b/lib_com/interpol.c @@ -42,44 +42,6 @@ #include "prot_fx.h" #include "prot_fx_enc.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * interpolation() - * - * Fractional interpolation of signal at position (frac/resol) - *-------------------------------------------------------------------*/ - -/*! r: interpolated value */ -float interpolation( - const float *x, /* i : input vector */ - const float *win, /* i : interpolation window */ - const int16_t frac, /* i : fraction */ - const int16_t up_samp, /* i : upsampling factor */ - const int16_t nb_coef /* i : nb of filter coef */ -) -{ - int16_t i; - float s; - const float *x1, *x2, *c1, *c2; - - x1 = &x[0]; - x2 = &x[1]; - c1 = &win[frac]; - c2 = &win[up_samp - frac]; - s = 0.0f; - - for ( i = 0; i < nb_coef; i++ ) - { - s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); -#define WMC_TOOL_SKIP - c1 += up_samp; - c2 += up_samp; -#undef WMC_TOOL_SKIP - } - - return s; -} -#endif Word32 Interpol_lc_fx( /* o : interpolated value Q15 */ const Word16 *x, /* i : input vector Q0 */ diff --git a/lib_com/isf_dec_amr_wb.c b/lib_com/isf_dec_amr_wb.c index b8b25d007..935fc3060 100644 --- a/lib_com/isf_dec_amr_wb.c +++ b/lib_com/isf_dec_amr_wb.c @@ -46,243 +46,3 @@ * * Decoding of ISF parameters in AMR-WB IO mode *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void isf_dec_amr_wb( - Decoder_State *st, /* i/o: State structure */ - float *Aq, /* o : quantized A(z) for 4 subframes */ - float *isf_new, /* o : de-quantized ISF vector */ - float *isp_new /* o : de-quantized ISP vector */ -) -{ - int16_t i; - int16_t indice[7]; - - set_s( indice, -1, 7 ); - - /*---------------------------------* - * ISF de-quantization of SID frames - *---------------------------------*/ - - if ( st->core_brate == SID_1k75 ) - { - indice[0] = get_next_indice( st, 6 ); - indice[1] = get_next_indice( st, 6 ); - indice[2] = get_next_indice( st, 6 ); - indice[3] = get_next_indice( st, 5 ); - indice[4] = get_next_indice( st, 5 ); - - disf_ns_28b( indice, isf_new ); - - reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); - - isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); - - /* return if SID frame (conversion to A(z) done in the calling function) */ - return; - } - - /*-----------------------------------------------------------------* - * ISF de-quantization of all other frames - *-----------------------------------------------------------------*/ - - if ( st->core_brate == ACELP_6k60 ) - { - indice[0] = get_next_indice( st, 8 ); - indice[1] = get_next_indice( st, 8 ); - indice[2] = get_next_indice( st, 7 ); - indice[3] = get_next_indice( st, 7 ); - indice[4] = get_next_indice( st, 6 ); - - disf_2s_36b( indice, isf_new, st->mem_AR, st->mem_MA ); - } - else - { - indice[0] = get_next_indice( st, 8 ); - indice[1] = get_next_indice( st, 8 ); - indice[2] = get_next_indice( st, 6 ); - indice[3] = get_next_indice( st, 7 ); - indice[4] = get_next_indice( st, 7 ); - indice[5] = get_next_indice( st, 5 ); - indice[6] = get_next_indice( st, 5 ); - - disf_2s_46b( indice, isf_new, st->mem_AR, st->mem_MA ); - } - - reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); - - /* convert quantized ISFs to ISPs */ - isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); - - /*-------------------------------------------------------------------------------------* - * FEC - update adaptive mean ISF vector - *-------------------------------------------------------------------------------------*/ - - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + isf_new[i] ) / 3; - } - - /*-------------------------------------------------------------------------------------* - * ISP interpolation - * A(z) calculation - *-------------------------------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - /*extrapolation instead of interpolation*/ - mvr2r( isp_new, st->lsp_old, M ); - mvr2r( isf_new, st->lsf_old, M ); - } - - /* ISP interpolation and A(z) calculation */ - int_lsp( L_FRAME, st->lsp_old, isp_new, Aq, M, interpol_isp_amr_wb, 1 ); - - /*------------------------------------------------------------------* - * Check ISF stability : distance between old ISF and current ISF - *------------------------------------------------------------------*/ - - st->stab_fac = lsf_stab( isf_new, st->lsf_old, 1, st->L_frame ); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * disf_ns_28b() - * - * ISF de-quantizer for SID_1k75 frames (only for AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -void disf_ns_28b( int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ - float *isf_q /* o : ISF in the frequency domain (0..6400) */ -) -{ - int16_t i; - - for ( i = 0; i < 2; i++ ) - { - isf_q[i] = dico1_ns_28b[indice[0] * 2 + i]; - } - - for ( i = 0; i < 3; i++ ) - { - isf_q[i + 2] = dico2_ns_28b[indice[1] * 3 + i]; - isf_q[i + 5] = dico3_ns_28b[indice[2] * 3 + i]; - } - - for ( i = 0; i < 4; i++ ) - { - isf_q[i + 8] = dico4_ns_28b[indice[3] * 4 + i]; - isf_q[i + 12] = dico5_ns_28b[indice[4] * 4 + i]; - } - - for ( i = 0; i < M; i++ ) - { - isf_q[i] += mean_isf_noise_amr_wb[i]; - } - - return; -} - -/*-------------------------------------------------------------------* - * disf_2s_46b() - * - * ISF de-quantizer for 46b. codebooks (only for AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -void disf_2s_46b( - int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ - float *isf_q, /* o : quantized ISFs in the cosine domain */ - float *mem_AR, /* o : quantizer memory for AR model */ - float *mem_MA /* i/o: quantizer memory for MA model */ -) -{ - int16_t i; - - for ( i = 0; i < 9; i++ ) - { - isf_q[i] = dico1_isf[indice[0] * 9 + i]; - } - - for ( i = 0; i < 7; i++ ) - { - isf_q[i + 9] = dico2_isf[indice[1] * 7 + i]; - } - - for ( i = 0; i < 3; i++ ) - { - isf_q[i] += dico21_isf_46b[indice[2] * 3 + i]; - isf_q[i + 3] += dico22_isf_46b[indice[3] * 3 + i]; - isf_q[i + 6] += dico23_isf_46b[indice[4] * 3 + i]; - isf_q[i + 9] += dico24_isf_46b[indice[5] * 3 + i]; - } - - for ( i = 0; i < 4; i++ ) - { - isf_q[i + 12] += dico25_isf_46b[indice[6] * 4 + i]; - } - - for ( i = 0; i < M; i++ ) - { - mem_AR[i] = (float) ( isf_q[i] + MU_MA * mem_MA[i] ); /* Update with quantized ISF vector for AR model */ - mem_MA[i] = isf_q[i]; /* Update with quantized prediction error for MA model */ - isf_q[i] = mem_AR[i] + mean_isf_amr_wb[i]; /* Quantized ISFs */ - } - - return; -} - - -/*-------------------------------------------------------------------* - * disf_2s_36b() - * - * ISF de-quantizer for 36b. codebooks (only for AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -void disf_2s_36b( - int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ - float *isf_q, /* o : quantized ISFs in the cosine domain */ - float *mem_AR, /* i/o: quantizer memory for AR model */ - float *mem_MA /* i/o: quantizer memory for MA model */ -) -{ - int16_t i; - const float *pt_dico1; - - pt_dico1 = dico1_isf; /* Pointer of the 1st stage, 1st plit */ - - for ( i = 0; i < 9; i++ ) - { - isf_q[i] = pt_dico1[indice[0] * 9 + i]; - } - - for ( i = 0; i < 7; i++ ) - { - isf_q[i + 9] = dico2_isf[indice[1] * 7 + i]; - } - - for ( i = 0; i < 5; i++ ) - { - isf_q[i] += dico21_isf_36b[indice[2] * 5 + i]; - } - - for ( i = 0; i < 4; i++ ) - { - isf_q[i + 5] += dico22_isf_36b[indice[3] * 4 + i]; - } - - for ( i = 0; i < 7; i++ ) - { - isf_q[i + 9] += dico23_isf_36b[indice[4] * 7 + i]; - } - - for ( i = 0; i < M; i++ ) - { - mem_AR[i] = (float) ( isf_q[i] + MU_MA * mem_MA[i] ); /* Update with quantized ISF vector for AR model */ - mem_MA[i] = isf_q[i]; /* Update with quantized prediction error for MA model */ - isf_q[i] = mem_AR[i] + mean_isf_amr_wb[i]; /* Quantized ISFs */ - } - - return; -} -#endif diff --git a/lib_com/ivas_agc_com.c b/lib_com/ivas_agc_com.c index 8e06c1418..5f9e5fc5c 100644 --- a/lib_com/ivas_agc_com.c +++ b/lib_com/ivas_agc_com.c @@ -38,76 +38,3 @@ #include #include "wmc_auto.h" #include "prot.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------------------------* - * Local constants - *------------------------------------------------------------------------------------------*/ - -#define SQRKMAX ( 1.5f ) -#define NBITS_DIFFG ( 2 ) -#define DBSTEP ( -6.f ) /* desired dB step value in dB*/ -#define ABS_EMIN_MAX ( 3 ) -#define MAXATTEXP ( 1 ) /* the desired maximum attenuation exponent range per frame*/ - -/*-----------------------------------------------------------------------------------------* - * Function ivas_agc_initWindowFunc() - * - * Get a window function - *-----------------------------------------------------------------------------------------*/ - -void ivas_agc_initWindowFunc( - float *pWinFunc, - const int16_t length ) -{ - int16_t i; - float N; - float a; - - N = (float) ( length - 1 ); - a = 0.5f * ( 1.f - powf( 10.f, DBSTEP / 20.f ) ); - - for ( i = 0; i < length; i++ ) - { - pWinFunc[i] = 1.f + a * ( cosf( EVS_PI * i / N ) - 1.f ); - } - - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_agc_calcGainParams() - * - * Calculate gain parameters - *-----------------------------------------------------------------------------------------*/ - -void ivas_agc_calcGainParams( - uint16_t *absEmin, - uint16_t *betaE, - uint16_t *maxAttExp, - const int16_t numCoeffs ) -{ - int16_t totExp; - int16_t Bm; - int16_t nbits; - - nbits = NBITS_DIFFG; - - *absEmin = max( ABS_EMIN_MAX, (uint16_t) ceilf( logf( ceilf( SQRKMAX * numCoeffs ) ) * INV_LOG_2 ) ); - - totExp = *absEmin + AGC_EMAX + 1; - *betaE = (uint16_t) ceilf( logf( totExp ) * INV_LOG_2 ); - - Bm = (uint16_t) ceilf( logf( ( AGC_EMAX + 1 + 1 ) ) * INV_LOG_2 ); - - if ( nbits > 0 ) - { - Bm = min( AGC_BITS_PER_CH - 1, NBITS_DIFFG ); - } - - *maxAttExp = ( (uint16_t) powf( 2, Bm ) ) - 2; - *maxAttExp = min( MAXATTEXP, *maxAttExp ); - - return; -} -#endif diff --git a/lib_com/ivas_agc_com_fx.c b/lib_com/ivas_agc_com_fx.c index 26bbe6590..9159fa259 100644 --- a/lib_com/ivas_agc_com_fx.c +++ b/lib_com/ivas_agc_com_fx.c @@ -40,7 +40,6 @@ #include "wmc_auto.h" #include "prot.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ @@ -117,4 +116,3 @@ void ivas_agc_calcGainParams_fx( return; } -#endif diff --git a/lib_com/ivas_arith.c b/lib_com/ivas_arith.c index 1625340ac..56f4c599c 100644 --- a/lib_com/ivas_arith.c +++ b/lib_com/ivas_arith.c @@ -47,7 +47,6 @@ * Similar to ari_start_decoding_14bits_fx(), but do not read past frame boundary. *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ari_start_decoding_14bits_ext_1_lfe( Decoder_State *st, Tastat *s, @@ -79,37 +78,8 @@ void ivas_ari_start_decoding_14bits_ext_1_lfe( return; } -#else -void ivas_ari_start_decoding_14bits_ext_1_lfe( - Decoder_State *st, - Tastat *s, - int16_t *extra_bits_read ) -{ - int32_t val; - - if ( st->bits_frame >= ( st->next_bit_pos + cbitsnew ) ) - { - val = get_next_indice( st, cbitsnew ); - } - else - { - int16_t rem_bits; - rem_bits = st->bits_frame - st->next_bit_pos; - val = get_next_indice( st, rem_bits ); - val = ( val << ( cbitsnew - rem_bits ) ); - *extra_bits_read = *extra_bits_read + ( cbitsnew - rem_bits ); - } - - s->low = 0; - s->high = ari_q4new; - s->value = val; - - return; -} -#endif /* Helper function to determine the symbol. */ -#ifdef IVAS_FLOAT_FIXED static UWord16 ivas_ari_get_symbol( const UWord16 *p, UWord32 range, @@ -127,25 +97,6 @@ static UWord16 ivas_ari_get_symbol( return symbol; } -#else -static uint16_t ivas_ari_get_symbol( - const uint16_t *p, - uint32_t range, - uint32_t cum ) -{ - uint16_t symbol; - - symbol = 0; - - while ( ( p[symbol + 1] * range ) > cum ) - { - symbol = symbol + 1; - } - - return symbol; -} - -#endif /*--------------------------------------------------------------- * Function ivas_ari_decode_14bits_bit_ext_1_lfe() @@ -153,7 +104,6 @@ static uint16_t ivas_ari_get_symbol( * *-------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED UWord16 ivas_ari_decode_14bits_bit_ext_1_lfe( Decoder_State *st, Tastat *s, @@ -232,76 +182,6 @@ UWord16 ivas_ari_decode_14bits_bit_ext_1_lfe( return symbol; } -#else -uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( - Decoder_State *st, - Tastat *s, - const uint16_t *cum_freq, - int16_t *extra_bits_read ) -{ - uint16_t symbol; - uint32_t low, high, range, value; - uint32_t cum; - - /* read s->low,high,value sequentially */ - low = s->low; - high = s->high; - value = s->value; - - range = high - low + 1; - cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); - - symbol = ivas_ari_get_symbol( cum_freq, range, cum ); - - high = low + mul_sbc_14bits_ivas( range, cum_freq[symbol] ) - 1; - low += mul_sbc_14bits_ivas( range, cum_freq[symbol + 1] ); - - for ( ;; ) - { - if ( high >= ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high < ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high + 1; - - if ( st->next_bit_pos >= st->bits_frame ) - { - value = ( value << 1 ); - *extra_bits_read = *extra_bits_read + 1; - } - else - { - value = ( value << 1 ) | get_next_indice_1( st ); - } - } - - s->low = low; - s->high = high; - s->value = value; - - return symbol; -} - -#endif /*--------------------------------------------------------------- * Function ivas_ari_done_decoding_14bits_ext_1_lfe() @@ -309,7 +189,6 @@ uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( * *-------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ari_done_decoding_14bits_ext_1_lfe( Decoder_State *st, const Word16 extra_bits_read ) @@ -318,16 +197,6 @@ void ivas_ari_done_decoding_14bits_ext_1_lfe( return; } -#else -void ivas_ari_done_decoding_14bits_ext_1_lfe( - Decoder_State *st, - const int16_t extra_bits_read ) -{ - get_next_indice_tmp( st, -( cbitsnew - 2 - extra_bits_read ) ); - - return; -} -#endif /*--------------------------------------------------------------- @@ -335,43 +204,6 @@ void ivas_ari_done_decoding_14bits_ext_1_lfe( * * Arith encoding of last table entry *-------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ari_done_encoding_14bits( - BSTR_ENC_HANDLE hBstr, - Tastat *s ) -{ - int32_t low; - int32_t bits_to_follow; - - /* not needed, s points to s->low */ - low = s->low; - bits_to_follow = s->bits_to_follow + 1; - - if ( low < ari_q1new ) - { - push_next_indice( hBstr, 0, 1 ); /*send a zero*/ - - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - push_next_indice( hBstr, 1, 1 ); /*send a one*/ - } - } - else - { - push_next_indice( hBstr, 1, 1 ); /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - push_next_indice( hBstr, 0, 1 ); /*send a zero*/ - } - } - - /*It is done so no need to save values-> no counting*/ - /*s->low = low; - s->bits_to_follow = bits_to_follow;*/ - - return; -} -#else void ivas_ari_done_encoding_14bits_fx( BSTR_ENC_HANDLE hBstr, Tastat *s ) @@ -408,83 +240,12 @@ void ivas_ari_done_encoding_14bits_fx( return; } -#endif /*--------------------------------------------------------------- * Function ivas_ari_encode_14bits_ext() * * Arith encode function for extended proba tables *-------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ari_encode_14bits_ext( - BSTR_ENC_HANDLE hBstr, - Tastat *s, - int32_t symbol, - const uint16_t *cum_freq ) -{ - int32_t low, high, range; - int32_t bits_to_follow; - - /*for all operation using bit_ptr=&ptr[bp] */ - /* for reading s->high,low,bits_to_follow sequentially */ - high = s->high; - low = s->low; - range = high - low + 1; - - high = low + mul_sbc_14bits_ivas( range, cum_freq[symbol] ) - 1; - low += mul_sbc_14bits_ivas( range, cum_freq[symbol + 1] ); - - bits_to_follow = s->bits_to_follow; - - for ( ;; ) - { - if ( high < ari_q2new ) - { - push_next_indice( hBstr, 0, 1 ); /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - push_next_indice( hBstr, 1, 1 ); /*send a one*/ - } - } - else - { - if ( low >= ari_q2new ) - { - push_next_indice( hBstr, 1, 1 ); /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - push_next_indice( hBstr, 0, 1 ); /*send a zero*/ - } - low -= ari_q2new; - high -= ari_q2new; /* Subtract offset to top. */ - } - else - { - /* Output an opposite bit */ - if ( low >= ari_q1new && high < ari_q3new ) /* Output an opposite bit */ - { - /* later if in middle half. */ - bits_to_follow += 1; - low -= ari_q1new; /* Subtract offset to middle*/ - high -= ari_q1new; - } - else - { - break; /* Otherwise exit loop. */ - } - } - } - low += low; - high += high + 1; /* Scale up code range. */ - } - - s->low = low; - s->high = high; - s->bits_to_follow = bits_to_follow; - - return; -} -#else void ivas_ari_encode_14bits_ext_fx( BSTR_ENC_HANDLE hBstr, Tastat *s, @@ -560,4 +321,3 @@ void ivas_ari_encode_14bits_ext_fx( return; } -#endif diff --git a/lib_com/ivas_avq_pos_reorder_com.c b/lib_com/ivas_avq_pos_reorder_com.c index 692e89f86..cd50e9ab2 100644 --- a/lib_com/ivas_avq_pos_reorder_com.c +++ b/lib_com/ivas_avq_pos_reorder_com.c @@ -41,28 +41,6 @@ * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ordr_esti( - const int16_t svLength, /* i : sub-vector index */ - int16_t *Mpos, /* i/o: dominant sub-vector position from ACV */ - int16_t svOrder[], /* i/o: AVQ sub-vector order */ - const int16_t Nsv /* i : total sub-vectors in a sub-frames */ -) -{ - int16_t i, tmp; - - tmp = svOrder[0]; - svOrder[0] = *Mpos; - *Mpos = Nsv - 1; - - for ( i = 1; i < svLength; tmp++, i++ ) - { - svOrder[i] = tmp; - } - - return; -} -#else void ordr_esti( const Word16 svLength, /* i : sub-vector index */ Word16 *Mpos, /* i/o: dominant sub-vector position from ACV */ @@ -88,5 +66,3 @@ void ordr_esti( return; } - -#endif diff --git a/lib_com/ivas_cnst.h b/lib_com/ivas_cnst.h index 77b95c59d..eb529b37c 100644 --- a/lib_com/ivas_cnst.h +++ b/lib_com/ivas_cnst.h @@ -48,7 +48,6 @@ #define ONE_BY_PI_OVER_180_Q25 ( 1922527360 ) // Q25 #define PI_OVER_180_Q22 ( 73204 ) // Q22 #define _180_OVER_PI ( 180.0f / EVS_PI ) -#ifdef IVAS_FLOAT_FIXED #define _180_OVER_PI_Q25 ( 1922527338 ) // Q25 #define PI_OVER_180_Q25 ( 585635 ) // Q25 #define _180_IN_Q22 ( 754974720 ) // Q22 @@ -62,7 +61,6 @@ #define Q31_0_99 ( 2126008811 ) // Q31 #define Q31_0_01 ( 21474836 ) // Q31 #define PI_OVER_180_FX ( (Word32) ( ( EVS_PI / 180.0f ) * ONE_IN_Q31 ) ) // Q31 -#endif #define PI_OVER_4_Q29 ( 421657440 ) // Q29 #define PI_OVER_Q29 ( 1686629760 ) // Q29 #define PI2_C_ADP_RATE_Q31 ( 449767936 ) // Q31 (2.0f * EVS_PI * pOTR->centerAdaptationRate) @@ -80,10 +78,8 @@ #define INV_SQRT3 0.577350269189626f /* 1/sqrt(3) */ #define INV_SQRT2_FX ( 1518500224 ) /* 1/sqrt(2) in Q31 */ -#ifdef IVAS_FLOAT_FIXED #define INV_SQRT2_FX_Q15 ( 23170 ) /* 1/sqrt(2) Q15 */ #define INV_SQRT3_FX ( 18918 ) /* 1/sqrt(3) Q15 */ -#endif #define LOG_10 2.30258509299f @@ -588,14 +584,9 @@ typedef enum #define STEREO_DFT_FLAG_BITS 1 #define STEREO_DFT_SIDEGAIN_NBITS 5 #define STEREO_DFT_FEC_THRESHOLD 10 -#ifdef IVAS_FLOAT_FIXED #define STEREO_DFT_FEC_THRESHOLD_PLUS_1_INV_Q31 ( 195225786 ) // Q31 #define STEREO_DFT_BITDIFF_LP_FAC_Q31 ( 128849019 ) // Q31 /* Low-pass filter coefficient for filtering bit difference between absolute and differential coding */ #define STEREO_DFT_BITDIFF_ABS_SELECT_Q31 ( 1717986918 ) // Q31 /* Constant to set tendency for selecting absolute coding mode */ -#else -#define STEREO_DFT_BITDIFF_LP_FAC (0.06f) /* Low-pass filter coefficient for filtering bit difference between absolute and differential coding */ -#define STEREO_DFT_BITDIFF_ABS_SELECT (0.8f) /* Constant to set tendency for selecting absolute coding mode */ -#endif #define STEREO_DFT_BITDIFF_INIT (12.0f) /* Init value for low-pass bit difference */ #define STEREO_DFT_BITDIFF_INIT_FX (12288) // Q10 /* Init value for low-pass bit difference in Q10*/ @@ -829,10 +820,8 @@ enum fea_names #define STEREO_TCA_GDMIN_FX -32768 // Q15 #define STEREO_TCA_GDSTEP 0.05f #define STEREO_TCA_GDSTEP_FX 819 // Q14 -#ifdef IVAS_FLOAT_FIXED #define STEREO_TCA_GDMIN_FX_Q14 (-16384) // Q14 #define STEREO_TCA_GDSTEP_FX_Q13 (410) // Q13 -#endif #define STEREO_BITS_TCA ( STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS + STEREO_BITS_TCA_GD ) #define STEREO_ICBWE_MSFLAG_BITS 1 /* BWE Multi Source flag */ @@ -1023,12 +1012,10 @@ typedef enum #define DIRAC_ONSET_ALPHA 0.95f #define DIRAC_ONSET_BETA 0.995f #define DIRAC_ONSET_GAIN 4.0f -#ifdef IVAS_FLOAT_FIXED #define DIRAC_ONSET_ALPHA_FX 31129 // Q15 #define DIRAC_ONSET_BETA_FX 32604 // Q15 #define ONE_DIRAC_ONSET_BETA_FX 163 // Q15 #define DIRAC_ONSET_GAIN_FX 16384 // Q12 -#endif #define DELAY_DIRAC_ENC_CMP_NS 9500000L /* Delay to be compensated on DirAC encoder */ #define DELAY_DIRAC_SPAR_ENC_CMP_NS 500000L /* here we may set the 24 samples (at 48 kHz) additional delay to something else, leave as is for now*/ @@ -1100,9 +1087,7 @@ typedef enum #define IVAS_SPAR_DYN_ACTIVEW_THRESH (0.0039f) #define IVAS_SPAR_DYN_ACTIVEW_THRESH_FX (8375186) /* 0.0039f in Q31 */ #define IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH (32.0f) -#ifdef IVAS_FLOAT_FIXED #define IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH_Q0 (32) -#endif #define MAX_QUANT_STRATS 3 #define MAX_CODING_STRATS 3 @@ -1158,11 +1143,7 @@ enum #define IVAS_APD_16_SECT 16 #define IVAS_DECORR_PARM_LOOKAHEAD_TAU 2e-3f -#ifdef IVAS_FLOAT_FIXED #define IVAS_DECORR_PARM_APD_TAU 42949673 // Q31 -#else -#define IVAS_DECORR_PARM_APD_TAU 20e-3f -#endif /* IVAS SBA PCA */ #define IVAS_PCA_NB_SUBR 20 /* 80 -> 0.25 ms, 40 -> 0.5 ms... */ @@ -1181,12 +1162,10 @@ enum #define IVAS_PCA_THRES_MIN_DOT2 0.0f #define IVAS_PCA_THRES_DIST_ALT 6.0f -#ifdef IVAS_FLOAT_FIXED #define IVAS_PCA_QUAT_EPS_FX 215 // Q31 #define IVAS_PCA_THRES_MIN_DOT_FX 1717986918 // 0.8 in Q31 #define IVAS_PCA_THRES_MIN_DOT2_FX 0 #define IVAS_PCA_THRES_DIST_ALT_FX 1610612736 // 6 in Q28 -#endif typedef enum @@ -1249,12 +1228,10 @@ enum #define MASA_TRANSP_BITS 1 #define NO_BITS_MASA_ISM_NO_OBJ 2 -#ifdef IVAS_FLOAT_FIXED #define MASA2TOTAL_THR_Q30 1052266987 // 0.98f in Q30 //Maximum error in float to fixed conversion : 0.005% //Assuming the accuracy of 99.995% //New value = 99.995 / 100 * 0.98 = 0.979951 -#endif #define BITS_MASA2TOTTAL_DCT0 6 #define STEP_M2T 0.1f #define STEP_M2T_FX 214748365 // Q31 @@ -1299,18 +1276,14 @@ enum #define MASA_COHERENCE_TOLERANCE 0.1f #define MASA_COHERENCE_THRESHOLD 0.1f -#ifdef IVAS_FLOAT_FIXED #define MASA_COHERENCE_TOLERANCE_FX 3277/*0.1 Q15*/ #define MASA_COHERENCE_THRESHOLD_FX 214748365 // 0.1 in Q31 -#endif #define MASA_RATIO_TOLERANCE 0.1f #define MASA_RATIO_THRESHOLD 0.1f #define MASA_ANGLE_TOLERANCE 0.5f -#ifdef IVAS_FLOAT_FIXED #define MASA_RATIO_THRESHOLD_FX 214748365 // 0.1 in Q31 #define MASA_RATIO_TOLERANCE_FX 214748364/*0.1 Q30*/ #define MASA_ANGLE_TOLERANCE_FX ONE_IN_Q21 // 0.5 in Q22 -#endif #define MASA_LIMIT_NO_BANDS_SUR_COH 8 #define MINIMUM_BIT_BUDGET_NORMAL_META 100 #define DIFF_DFRATIO_2BIT_LIMIT_IDX_HODIRAC 4 @@ -1324,9 +1297,7 @@ enum #define MASA_NO_POINTS_EQUATOR 430 #define MASA_NO_CIRCLES 121 -#ifdef IVAS_FLOAT_FIXED #define MASA_NO_CIRCLES_Q23 ( 1015021568 ) // Q23 -#endif #define MASA_ASIN_OFFSET 0.0064471690266724975f #define MASA_ASIN_OFFSET_Q15 ( 211 ) // Q15 #define MASA_NTOT2_FAC 32768.00566947353f @@ -1397,13 +1368,8 @@ typedef enum #define MCMASA_SEPARATE_BRATE IVAS_64k /* minimum bitrate from which separated channel coding is supported */ #define MCMASA_MAX_ANA_CHANS 11 /* Maximum number of channels currently used in analysis of multichannel formats */ -#ifdef IVAS_FLOAT_FIXED #define MCMASA_MONOBITRATIO_64k_Q31 ( 536870912 ) // Q31 #define MCMASA_MONOBITRATIO_Q31 ( 644245095 ) // Q31 -#else -#define MCMASA_MONOBITRATIO 0.3f -#define MCMASA_MONOBITRATIO_64k 0.25f -#endif #define MC_MASA_THR_ELEVATION 40 #define MCMASA_LFE_QLOW -6.5f @@ -1411,16 +1377,12 @@ typedef enum #define MCMASA_LFE_1BIT_THRES 0.03f #define MCMASA_LFE_ALPHA 0.67f #define MCMASA_LFE_BETA 0.09f -#ifdef IVAS_FLOAT_FIXED #define MCMASA_LFE_1BIT_THRES_Q30 32212255 /* 0.03f in Q30 */ #define MCMASA_LFE_ALPHA_Q30 719407022 /* 0.67f in Q30 */ #define MCMASA_LFE_BETA_Q30 96636764 /* 0.09f in Q30 */ -#endif #define MCMASA_LFE_THETA 1.3f #define MCMASA_LFE_SYNTH_ALPHA 0.95f /* Smoothing coefficient for LFE synthesis */ -#ifdef IVAS_FLOAT_FIXED #define MCMASA_LFE_SYNTH_ALPHA_Q15 (31129) // Q15 -#endif #define MCMASA_LFE_ALPHA_Q15 (21954) // Q15 #define MCMASA_LFE_BETA_Q15 (2949) // Q15 #define MCMASA_LFE_BETA_Q14 (1474) // Q14 @@ -1493,19 +1455,11 @@ typedef enum { BETA } PAR_TYPE; -typedef struct { - int16_t nquant; - int16_t offset; - float data[35]; -} ACPL_QUANT_TABLE; - -#ifdef IVAS_FLOAT_FIXED typedef struct { Word16 nquant; Word16 offset; Word32 data[35]; } ACPL_QUANT_TABLE_FX; -#endif // IVAS_FLOAT_FIXED typedef struct { @@ -1525,10 +1479,8 @@ typedef enum PARAM_MC_SYNTH_MONO_STEREO /* synthesis to mono or stereo */ } PARAM_MC_SYNTHESIS_CONF; -#ifdef IVAS_FLOAT_FIXED #define PARAM_MC_REG_SX_FX (429496729) // Q31 /* Regularization factor for mixing matrix calculation */ #define PARAM_MC_REG_GHAT_FX (2147483) // Q31 /* Regularization factor for mixing matrix calculation */ -#endif #define PARAM_MC_REG_SX (0.2f) /* Regularization factor for mixing matrix calculation */ #define PARAM_MC_REG_GHAT (0.001f) /* Regularization factor for mixing matrix calculation */ @@ -1555,9 +1507,7 @@ typedef enum #define PARAM_MC_SZ_ILD_QUANTIZER_4BITS 16 /* Length of the ILD quantizer for Parametric MC */ #define PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT 4 /* Number of bits for ILD uniform coding */ #define PARAM_MC_DEFAULT_MIN_ILD (-92.0f) /* Default relative channel level for untransmitted channel energies */ -#ifdef IVAS_FLOAT_FIXED #define PARAM_MC_DEFAULT_MIN_ILD_FX (-23552) // Q8 /* Default relative channel level for untransmitted channel energies */ -#endif // IVAS_FLOAT_FIXED #define PARAM_MC_MAX_BITS 1024 /* Maximum number of bits for the Parametric MC metadata */ #define PARAM_MC_MAX_BAND_ABS_COV_ENC 10 #define PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC 10 @@ -1615,9 +1565,7 @@ typedef enum #define IVAS_LFE_BITRATE_5000 5000 #define IVAS_LFE_ABS_SUM_FLT_THR (0.000001f) -#ifdef IVAS_FLOAT_FIXED #define IVAS_LFE_ABS_SUM_FLT_THR_Q42 4398047 -#endif // IVAS_FLOAT_FIXED #define IVAS_ZERO_PAD_LEN_MULT_FAC (0.5f) @@ -1668,10 +1616,8 @@ typedef enum *----------------------------------------------------------------------------------*/ #define BINAURAL_MAXBANDS 60 /* Max number of bands */ -#ifdef IVAS_FLOAT_FIXED #define BINAURAL_MAXBANDS_Q25 2013265920 /* Max number of bands in Q25 */ #define ONE_BY_48000_Q31 44740 -#endif #define BINAURAL_CONVBANDS 50 /* Bands upto which convolution is performed */ #define BINAURAL_NTAPS 3 #define BINAURAL_NTAPS_SBA BINAURAL_NTAPS @@ -1685,9 +1631,7 @@ typedef enum #define REVERB_PREDELAY_MAX 20 /* Max input delay for reverb module */ #define GAIN_LFE 1.88364911f /* Gain applied to LFE during renderering */ #define GAIN_LFE_WORD32 2022552831 // Q30 /* Gain applied to LFE during renderering */ -#ifdef IVAS_FLOAT_FIXED #define GAIN_LFE_FX 30862 // Q14 /* Gain applied to LFE during renderering */ -#endif // IVAS_FLOAT_FIXED #define LOW_BIT_RATE_BINAURAL_EQ_BINS 17 /* Number of bins in an EQ applied at low bit rates in binauralization */ #define LOW_BIT_RATE_BINAURAL_EQ_OFFSET 14 /* Offset of bins where the low-bit-rate EQ starts*/ @@ -1936,12 +1880,10 @@ typedef enum #define ER_LIST_ORIGIN_X (0.0f) #define ER_LIST_ORIGIN_Y (0.0f) #define ER_LIST_HEIGHT (1.6f) -#ifdef IVAS_FLOAT_FIXED #define ER_RADIUS_FX (1* ONE_IN_Q30) //Q2.30 #define ER_LIST_ORIGIN_X_FX (0) #define ER_LIST_ORIGIN_Y_FX (0) #define ER_LIST_HEIGHT_FX (6710886) /* 1.6 in Q.22 */ -#endif // IVAS_FLOAT_FIXED diff --git a/lib_com/ivas_cov_smooth.c b/lib_com/ivas_cov_smooth.c index 5f9262803..8b13f3fd1 100644 --- a/lib_com/ivas_cov_smooth.c +++ b/lib_com/ivas_cov_smooth.c @@ -45,7 +45,6 @@ #define BAND_SMOOTH_REST_START_IDX ( 2 ) -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_calculate_update_factor_fx() * @@ -67,31 +66,8 @@ static Word32 ivas_calculate_update_factor_fx( // o: Q22 return update_factor_temp; // Q22 } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_calculate_update_factor() - * - * To calculate the update factor - *-----------------------------------------------------------------------------------------*/ - -static float ivas_calculate_update_factor( - float *p_bin_to_band, - int16_t active_bins ) -{ - float update_factor_temp = 0.0f; - int16_t k; - - for ( k = 0; k < active_bins; k++ ) - { - update_factor_temp += p_bin_to_band[k]; - } - - return update_factor_temp; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_calculate_smoothning_factor_fx() * @@ -144,48 +120,8 @@ static void ivas_calculate_smoothning_factor_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_calculate_smoothning_factor() - * - * To calculate the Smoothning factor - *-----------------------------------------------------------------------------------------*/ -static void ivas_calculate_smoothning_factor( - float *Smoothing_factor, - float update_factor, - const int16_t min_pool_size, - const float max_update_rate, - const COV_SMOOTHING_TYPE smooth_mode, - const int32_t ivas_total_brate, - int16_t j ) -{ - float smooth_fact; - *Smoothing_factor = update_factor / min_pool_size; - if ( smooth_mode != COV_SMOOTH_MC ) - { - if ( ivas_total_brate < IVAS_24k4 ) - { - smooth_fact = 0.5f; - } - else - { - smooth_fact = 0.75f; - } - *Smoothing_factor *= ( j + 1 ) * smooth_fact; - } - if ( *Smoothing_factor > max_update_rate ) - { - *Smoothing_factor = max_update_rate; - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_set_up_cov_smoothing_fx() * @@ -230,51 +166,8 @@ static void ivas_set_up_cov_smoothing_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_set_up_cov_smoothing() - * - * Setup for covariance smoothing - *-----------------------------------------------------------------------------------------*/ -static void ivas_set_up_cov_smoothing( - ivas_cov_smooth_state_t *hCovState, - ivas_filterbank_t *pFb, - const float max_update_rate, - const int16_t min_pool_size, - const COV_SMOOTHING_TYPE smooth_mode, /* i : flag multichannel vs SPAR */ - const int32_t ivas_total_brate ) -{ - int16_t j; - float update_factor; - if ( smooth_mode == COV_SMOOTH_MC ) - { - for ( j = 0; j < pFb->filterbank_num_bands; j++ ) - { - int16_t active_bins = pFb->fb_bin_to_band.pFb_active_bins_per_band[j]; - update_factor = ivas_calculate_update_factor( pFb->fb_bin_to_band.pFb_bin_to_band[j], active_bins ); - ivas_calculate_smoothning_factor( &hCovState->pSmoothing_factor[j], update_factor, min_pool_size, max_update_rate, smooth_mode, ivas_total_brate, j ); - } - } - else - { - for ( j = 0; j < pFb->filterbank_num_bands; j++ ) - { - float *p_bin_to_band = pFb->fb_bin_to_band.pp_short_stride_bin_to_band[j]; - int16_t active_bins = pFb->fb_bin_to_band.p_short_stride_num_bins_per_band[j]; - update_factor = ivas_calculate_update_factor( p_bin_to_band, active_bins ); - ivas_calculate_smoothning_factor( &hCovState->pSmoothing_factor[j], update_factor, min_pool_size, max_update_rate, smooth_mode, ivas_total_brate, j ); - } - } - - hCovState->prior_bank_idx = -1; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_spar_covar_smooth_enc_open_fx() * @@ -331,56 +224,7 @@ ivas_error ivas_spar_covar_smooth_enc_open_fx( return IVAS_ERR_OK; } -#else -/*------------------------------------------------------------------------- - * ivas_spar_covar_smooth_enc_open() - * - * Allocate and initialize SPAR Covar. smoothing handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_covar_smooth_enc_open( - ivas_cov_smooth_state_t **hCovState_out, /* i/o: SPAR Covar. smoothing handle */ - const ivas_cov_smooth_cfg_t *cov_smooth_cfg, /* i : SPAR config. handle */ - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t nchan_inp, /* i : number of input channels */ - const COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - ivas_cov_smooth_state_t *hCovState; - int16_t i, j; - - if ( ( hCovState = (ivas_cov_smooth_state_t *) malloc( sizeof( ivas_cov_smooth_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); - } - - if ( ( hCovState->pSmoothing_factor = (float *) malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); - } - - for ( i = 0; i < nchan_inp; i++ ) - { - for ( j = 0; j < nchan_inp; j++ ) - { - if ( ( hCovState->pPrior_cov_real[i][j] = (float *) malloc( sizeof( float ) * cov_smooth_cfg->max_bands ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); - } - set_zero( hCovState->pPrior_cov_real[i][j], cov_smooth_cfg->max_bands ); - } - } - - ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, smooth_mode, ivas_total_brate ); - - *hCovState_out = hCovState; - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_spar_covar_smooth_enc_close_fx() * @@ -421,47 +265,8 @@ void ivas_spar_covar_smooth_enc_close_fx( return; } -#else -/*------------------------------------------------------------------------- - * ivas_spar_covar_smooth_enc_close() - * - * Deallocate SPAR Covar. smoothing handle - *------------------------------------------------------------------------*/ - -void ivas_spar_covar_smooth_enc_close( - ivas_cov_smooth_state_t **hCovState_out, /* i/o: SPAR Covar. smoothing handle */ - const int16_t nchan_inp /* i : number of input channels */ -) -{ - ivas_cov_smooth_state_t *hCovState; - int16_t i, j; - - hCovState = *hCovState_out; - - if ( hCovState != NULL ) - { - free( hCovState->pSmoothing_factor ); - hCovState->pSmoothing_factor = NULL; - - for ( i = 0; i < nchan_inp; i++ ) - { - for ( j = 0; j < nchan_inp; j++ ) - { - free( hCovState->pPrior_cov_real[i][j] ); - hCovState->pPrior_cov_real[i][j] = NULL; - } - } - - free( hCovState ); - hCovState_out = NULL; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_compute_smooth_cov_fx() * @@ -594,102 +399,8 @@ static void ivas_compute_smooth_cov_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_compute_smooth_cov() - * - * Compute smooth covariance real/imag. - *-----------------------------------------------------------------------------------------*/ -static void ivas_compute_smooth_cov( - ivas_cov_smooth_state_t *hCovState, - ivas_filterbank_t *pFb, - float *pCov_buf[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - float *pPrior_cov_buf[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const float fac, - const int16_t start_band, - const int16_t end_band, - const int16_t num_ch, - const int16_t transient_det[2] ) -{ - int16_t i, j, k; - int16_t prev_idx = hCovState->prior_bank_idx; - float factor = 0; - int16_t sm_b; - int16_t non_sm_b_idx; - sm_b = BAND_SMOOTH_REST_START_IDX; - - assert( end_band <= pFb->filterbank_num_bands ); - - if ( prev_idx == -1 || transient_det[1] == 1 ) - { - for ( i = 0; i < num_ch; i++ ) - { - for ( k = start_band; k < end_band; k++ ) - { - pCov_buf[i][i][k] += ( hCovState->pSmoothing_factor[k] * fac ); - } - } - } - else if ( transient_det[0] == 1 ) - { - non_sm_b_idx = min( sm_b, end_band ); - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - if ( i == j ) - { - factor = fac; - } - else - { - factor = 0.0f; - } - for ( k = start_band; k < non_sm_b_idx; k++ ) - { - pCov_buf[i][j][k] = pPrior_cov_buf[i][j][k] + ( hCovState->pSmoothing_factor[k] * ( pCov_buf[i][j][k] - pPrior_cov_buf[i][j][k] + factor ) ); - } - } - } - for ( i = 0; i < num_ch; i++ ) - { - for ( k = non_sm_b_idx; k < end_band; k++ ) - { - pCov_buf[i][i][k] += ( hCovState->pSmoothing_factor[k] * fac ); - } - } - } - else if ( prev_idx == 0 ) - { - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - if ( i == j ) - { - factor = fac; - } - else - { - factor = 0.0f; - } - - for ( k = start_band; k < end_band; k++ ) - { - pCov_buf[i][j][k] = pPrior_cov_buf[i][j][k] + ( hCovState->pSmoothing_factor[k] * ( pCov_buf[i][j][k] - pPrior_cov_buf[i][j][k] + factor ) ); - } - } - } - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_cov_smooth_process_fx() * @@ -729,37 +440,3 @@ void ivas_cov_smooth_process_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_cov_smooth_process() - * - * Covariance smoothing process - *-----------------------------------------------------------------------------------------*/ - -void ivas_cov_smooth_process( - ivas_cov_smooth_state_t *hCovState, /* i/o: Covariance state handle */ - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t start_band, - const int16_t end_band, - const int16_t num_ch, - const int16_t transient_det[2] ) -{ - int16_t i, j; - int16_t num_bands = end_band - start_band; - - ivas_compute_smooth_cov( hCovState, pFb, cov_real, hCovState->pPrior_cov_real, 1e-20f, start_band, end_band, num_ch, transient_det ); - - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - mvr2r( &cov_real[i][j][start_band], &hCovState->pPrior_cov_real[i][j][start_band], num_bands ); - } - } - - hCovState->prior_bank_idx = 0; - - return; -} -#endif diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index 5e9c2d2b4..6a6fbe47c 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -42,20 +42,14 @@ #include "wmc_auto.h" #include "prot_fx.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static UWord16 deindex_sph_idx_general_fx( const Word16 idx_sph, const Word16 no_bits, Word32 *theta_dec_fx, Word32 *phi_dec_fx, UWord16 *p_id_phi, const MC_LS_SETUP mc_format ); -#else -static uint16_t deindex_sph_idx_general( const int16_t idx_sph, const int16_t no_bits, float *theta_dec, float *phi_dec, uint16_t *p_id_phi, const MC_LS_SETUP mc_format ); -#endif /*------------------------------------------------------------------------- * ivas_get_hodirac_flag() @@ -64,7 +58,6 @@ static uint16_t deindex_sph_idx_general( const int16_t idx_sph, const int16_t no *------------------------------------------------------------------------*/ /*! r: HO-DirAC flag */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_hodirac_flag_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 sba_order /* i : Ambisonic (SBA) order */ @@ -80,29 +73,11 @@ Word16 ivas_get_hodirac_flag_fx( return 0; } } -#else - -int16_t ivas_get_hodirac_flag( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - if ( sba_order > 1 && ivas_total_brate > IVAS_256k ) - { - return 1; - } - else - { - return 0; - } -} -#endif /*------------------------------------------------------------------------- * ivas_dirac_sba_config() * * DirAC Configuration function; used also in MASA decoder *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_config_fx( void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ const Word16 enc_dec /* i : encoder or decoder flag */ @@ -259,134 +234,6 @@ ivas_error ivas_dirac_config_fx( return error; } -#else -ivas_error ivas_dirac_config( - void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ - const int16_t enc_dec /* i : encoder or decoder flag */ -) -{ - IVAS_FORMAT ivas_format; - int16_t sba_order; - int16_t *element_mode; - int32_t ivas_total_brate; - DIRAC_CONFIG_DATA_HANDLE hConfig; - IVAS_QMETADATA_HANDLE hQMetaData; - int32_t Fs; - int16_t *band_grouping; - ivas_error error; - int16_t spar_dirac_split_band; - IVAS_FB_MIXER_HANDLE hFbMdft; - int16_t *dirac_to_spar_md_bands; - - error = IVAS_ERR_OK; - - if ( enc_dec == ENC ) - { - ivas_format = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_format; - element_mode = &( (Encoder_Struct *) st_ivas )->hEncoderConfig->element_mode_init; - sba_order = ( (Encoder_Struct *) st_ivas )->sba_analysis_order; - ivas_total_brate = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->ivas_total_brate; - Fs = ( (Encoder_Struct *) st_ivas )->hEncoderConfig->input_Fs; - band_grouping = ( (Encoder_Struct *) st_ivas )->hDirAC->band_grouping; - hConfig = ( (Encoder_Struct *) st_ivas )->hDirAC->hConfig; - hQMetaData = ( (Encoder_Struct *) st_ivas )->hQMetaData; - if ( ( (Encoder_Struct *) st_ivas )->hSpar != NULL ) - { - hFbMdft = ( (Encoder_Struct *) st_ivas )->hSpar->hFbMixer; - dirac_to_spar_md_bands = ( (Encoder_Struct *) st_ivas )->hSpar->dirac_to_spar_md_bands; - } - else - { - hFbMdft = NULL; - dirac_to_spar_md_bands = NULL; - } - } - else - { - ivas_format = ( (Decoder_Struct *) st_ivas )->ivas_format; - element_mode = &( (Decoder_Struct *) st_ivas )->element_mode_init; - sba_order = ( (Decoder_Struct *) st_ivas )->sba_analysis_order; - ivas_total_brate = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->ivas_total_brate; - Fs = ( (Decoder_Struct *) st_ivas )->hDecoderConfig->output_Fs; - band_grouping = ( (Decoder_Struct *) st_ivas )->hDirAC->band_grouping; - hConfig = ( (Decoder_Struct *) st_ivas )->hDirAC->hConfig; - hQMetaData = ( (Decoder_Struct *) st_ivas )->hQMetaData; - if ( ( (Decoder_Struct *) st_ivas )->hSpar != NULL ) - { - hFbMdft = ( (Decoder_Struct *) st_ivas )->hSpar->hFbMixer; - dirac_to_spar_md_bands = ( (Decoder_Struct *) st_ivas )->hSpar->dirac_to_spar_md_bands; - } - else - { - hFbMdft = NULL; - dirac_to_spar_md_bands = NULL; - } - ( (Decoder_Struct *) st_ivas )->hDirAC->hFbMdft = hFbMdft; - } - - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - hConfig->nbands = IVAS_MAX_NUM_BANDS; - - spar_dirac_split_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - - if ( ivas_get_hodirac_flag( ivas_total_brate, sba_order ) ) - { - spar_dirac_split_band = 0; - } - } - else - { - hConfig->nbands = 5; - spar_dirac_split_band = 0; - } - hConfig->enc_param_start_band = 0; - hConfig->dec_param_estim = FALSE; - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) /* skip for MASA decoder */ - { - if ( ( error = ivas_dirac_sba_config( hQMetaData, element_mode, ivas_total_brate, sba_order, hConfig->nbands - spar_dirac_split_band, - ivas_format ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hQMetaData != NULL ) - { - if ( enc_dec == ENC ) - { - hConfig->nbands = hQMetaData->q_direction[0].cfg.nbands; - } - hConfig->enc_param_start_band = hQMetaData->q_direction[0].cfg.start_band + spar_dirac_split_band; - } - - hConfig->dec_param_estim = TRUE; - if ( hConfig->dec_param_estim == TRUE ) - { - hConfig->enc_param_start_band = spar_dirac_split_band; - } - - if ( ivas_get_hodirac_flag( ivas_total_brate, sba_order ) ) - { - hConfig->dec_param_estim = FALSE; - hConfig->enc_param_start_band = 0; - - set_c( (int8_t *) hQMetaData->twoDirBands, (int8_t) 1, hQMetaData->q_direction[0].cfg.nbands ); - hQMetaData->numTwoDirBands = (uint8_t) hQMetaData->q_direction[0].cfg.nbands; - } - } - - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft ); - } - else - { - ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), NULL, 0, 0, hFbMdft ); - } - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -395,104 +242,6 @@ ivas_error ivas_dirac_config( * DirAC Configuration freq. band function; used also in MASA decoder *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_config_bands( - int16_t *band_grouping, /* o : band grouping */ - const int16_t nbands, /* i : number of bands */ - const int16_t max_band, /* i : maximal band index +1 */ - int16_t *dirac_to_spar_md_bands, - const int8_t useLowerBandRes, - const int16_t enc_param_start_band, - IVAS_FB_MIXER_HANDLE hFbMdft ) -{ - int16_t i; - { - if ( nbands == 5 ) - { - mvs2s( DirAC_band_grouping_5, band_grouping, 5 + 1 ); - } - else if ( nbands == 6 ) - { - mvs2s( DirAC_band_grouping_6, band_grouping, 6 + 1 ); - } - else if ( nbands == 12 ) - { - int16_t band; - for ( band = 0; band < DIRAC_MAX_NBANDS; band++ ) - { - dirac_to_spar_md_bands[band] = band; - } - if ( hFbMdft != NULL ) - { - int16_t sb, idx1, idx2, b; - - idx1 = -1; - sb = 0; - for ( b = 0; b < max_band; b++ ) - { - idx2 = hFbMdft->pFb->fb_bin_to_band.p_cldfb_map_to_spar_band[b]; - if ( idx2 > idx1 ) - { - band_grouping[sb++] = b; - idx1 = idx2; - } - } - band_grouping[sb] = max_band; - - /* set the remaining bands to max_band to avoid problems for the DirAC parameter estimation with bw < FB */ - for ( b = sb; b <= nbands; b++ ) - { - band_grouping[b] = max_band; - } - } - else - { - mvs2s( DirAC_band_grouping_12, band_grouping, 12 + 1 ); - } - - if ( useLowerBandRes ) - { - int16_t step = DIRAC_LOW_BANDRES_STEP; - int16_t reduced_band; - for ( band = enc_param_start_band + 2, reduced_band = enc_param_start_band + 1; band <= DIRAC_MAX_NBANDS; band += step, reduced_band++ ) - { - band_grouping[reduced_band] = band_grouping[band]; - } - for ( ; reduced_band <= DIRAC_MAX_NBANDS; reduced_band++ ) - { - band_grouping[reduced_band] = max_band; - } - for ( band = enc_param_start_band + ( DIRAC_MAX_NBANDS - enc_param_start_band ) / 2 - 1, reduced_band = DIRAC_MAX_NBANDS - 1; band >= enc_param_start_band; band--, reduced_band -= step ) - { - dirac_to_spar_md_bands[reduced_band] = dirac_to_spar_md_bands[band]; - dirac_to_spar_md_bands[reduced_band - 1] = dirac_to_spar_md_bands[band]; - } - } - else - { - /* always code the last two fb bands together */ - band_grouping[DIRAC_MAX_NBANDS - 1] = max_band; - dirac_to_spar_md_bands[DIRAC_MAX_NBANDS - 1] = DIRAC_MAX_NBANDS - 2; - } - } - else - { - assert( 0 && "nbands must be 5 or 6!" ); - } - } - - /* Limit the band range to band max */ - for ( i = 0; i < nbands + 1; i++ ) - { - if ( band_grouping[i] > max_band ) - { - band_grouping[i] = max_band; - } - } - - return; -} -#else void ivas_dirac_config_bands_fx( Word16 *band_grouping, /* o : band grouping */ const Word16 nbands, /* i : number of bands */ @@ -605,14 +354,12 @@ void ivas_dirac_config_bands_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_get_dirac_sba_max_md_bits() * * Return maximum SBA DirAC metadata bit-budget and nominal bit-budget *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_get_dirac_sba_max_md_bits_fx( const Word32 sba_total_brate, Word16 *bits_frame_nominal, @@ -747,83 +494,12 @@ void ivas_get_dirac_sba_max_md_bits_fx( return; } -#else -void ivas_get_dirac_sba_max_md_bits( - const int32_t sba_total_brate, - int16_t *bits_frame_nominal, - int16_t *metadata_max_bits, - int16_t *qmetadata_max_bit_req, - const int16_t nbands, - IVAS_FORMAT ivas_format ) -{ - if ( sba_total_brate <= IVAS_13k2 ) - { - *bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; - *metadata_max_bits = 70; - } - else if ( sba_total_brate <= IVAS_16k4 ) - { - *bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; - *metadata_max_bits = 80; - } - else if ( sba_total_brate <= IVAS_24k4 ) - { - *bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; - *metadata_max_bits = 103; - /* OSBA needs an additional 2-bits safety margin to avoid acelp crashes */ - if ( ivas_format == SBA_ISM_FORMAT ) - { - ( *metadata_max_bits ) -= 3; - } - } - else if ( sba_total_brate <= IVAS_32k ) - { - *bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; - *metadata_max_bits = 214; - } - else if ( sba_total_brate <= IVAS_48k ) - { - *bits_frame_nominal = IVAS_48k / FRAMES_PER_SEC; - *metadata_max_bits = 240; - } - else if ( sba_total_brate <= IVAS_64k ) - { - *bits_frame_nominal = IVAS_64k / FRAMES_PER_SEC; - *metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_80k ) - { - *bits_frame_nominal = IVAS_80k / FRAMES_PER_SEC; - *metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_96k ) - { - *bits_frame_nominal = IVAS_96k / FRAMES_PER_SEC; - *metadata_max_bits = 200; - } - else if ( sba_total_brate <= IVAS_128k ) - { - *bits_frame_nominal = IVAS_128k / FRAMES_PER_SEC; - *metadata_max_bits = 250; - } - else - { - *bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); - *metadata_max_bits = MAX16B; /* no limit */ - } - *metadata_max_bits = (int16_t) min( (float) MAX16B, ceilf( (float) *metadata_max_bits * nbands / 5 ) ); - *qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA >> 1; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_dirac_sba_config() * * DirAC Configuration function for SBA *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_sba_config_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ Word16 *element_mode, /* i/o: element mode of the core coder */ @@ -869,7 +545,7 @@ ivas_error ivas_dirac_sba_config_fx( } } - ivas_set_qmetadata_maxbit_req( hQMetaData, SBA_FORMAT ); + ivas_set_qmetadata_maxbit_req_fx( hQMetaData, SBA_FORMAT ); IF( LE_32( sba_total_brate, IVAS_16k4 ) ) { @@ -912,7 +588,7 @@ ivas_error ivas_dirac_sba_config_fx( move16(); } - IF( NE_32( ( error = ivas_qmetadata_allocate_memory( hQMetaData, nbands_coded, no_dirs, 0 ) ), IVAS_ERR_OK ) ) // WIP + IF( NE_32( ( error = ivas_qmetadata_allocate_memory_fx( hQMetaData, nbands_coded, no_dirs, 0 ) ), IVAS_ERR_OK ) ) // WIP { return error; } @@ -923,85 +599,8 @@ ivas_error ivas_dirac_sba_config_fx( return error; } -#else -ivas_error ivas_dirac_sba_config( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - int16_t *element_mode, /* i/o: element mode of the core coder */ - int32_t sba_total_brate, /* i : SBA total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int16_t nbands /* i : number of frequency bands */ - , - IVAS_FORMAT ivas_format ) -{ - int16_t nbands_coded; - int16_t hodirac_flag; - ivas_error error; - - error = IVAS_ERR_OK; - hQMetaData->is_masa_ivas_format = 0; - hodirac_flag = ivas_get_hodirac_flag( sba_total_brate, sba_order ); - - /* map the bitrate for SID frame */ - if ( sba_total_brate == IVAS_SID_5k2 ) - { - if ( *element_mode == IVAS_SCE ) - { - sba_total_brate = ACELP_24k40; - } - else - { - sba_total_brate = ACELP_48k; - } - } - - ivas_set_qmetadata_maxbit_req( hQMetaData, SBA_FORMAT ); - - if ( sba_total_brate <= IVAS_16k4 ) - { - hQMetaData->useLowerRes = 1; - } - else - { - hQMetaData->useLowerRes = 0; - } - - nbands_coded = nbands; - if ( sba_total_brate <= (int32_t) ( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) - { - hQMetaData->useLowerBandRes = 1; - nbands_coded = nbands / 2 + nbands % 2; - } - else - { - hQMetaData->useLowerBandRes = 0; - if ( hodirac_flag == 0 ) - { - nbands_coded = nbands - 1; /* always combine the last two bands */ - } - } - - { - int16_t no_dirs = 1; - if ( hodirac_flag ) - { - no_dirs = 2; - } - - if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, nbands_coded, no_dirs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - ivas_get_dirac_sba_max_md_bits( sba_total_brate, &hQMetaData->bits_frame_nominal, &hQMetaData->metadata_max_bits, &hQMetaData->qmetadata_max_bit_req, hQMetaData->q_direction[0].cfg.nbands, - ivas_format ); - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED void computeDirectionVectors_fixed( Word32 *intensity_real_x, /* i: exp = i_e */ Word32 *intensity_real_y, /* i: exp = i_e */ @@ -1169,57 +768,7 @@ void computeDirectionVectors_fx( move16(); return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * computeDirectionVectors() - * - * - *------------------------------------------------------------------------*/ - -void computeDirectionVectors( - float *intensity_real_x, - float *intensity_real_y, - float *intensity_real_z, - const int16_t enc_param_start_band, - const int16_t num_frequency_bands, - float *direction_vector_x, - float *direction_vector_y, - float *direction_vector_z ) -{ - int16_t i; - float intensityNorm; - - for ( i = enc_param_start_band; i < enc_param_start_band + num_frequency_bands; ++i ) - { - intensityNorm = *( intensity_real_x ) * *( intensity_real_x ) + - *( intensity_real_y ) * *( intensity_real_y ) + - *( intensity_real_z ) * *( intensity_real_z ); - - if ( intensityNorm <= EPSILON ) - { - intensityNorm = 1.0f; - *( direction_vector_x++ ) = 1.0f; - *( direction_vector_y++ ) = 0.0f; - *( direction_vector_z++ ) = 0.0f; - intensity_real_x++; - intensity_real_y++; - intensity_real_z++; - } - else - { - intensityNorm = sqrtf( 1.f / intensityNorm ); - *( direction_vector_x++ ) = *( intensity_real_x++ ) * intensityNorm; - *( direction_vector_y++ ) = *( intensity_real_y++ ) * intensityNorm; - *( direction_vector_z++ ) = *( intensity_real_z++ ) * intensityNorm; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * computeDiffuseness() * @@ -1334,10 +883,7 @@ void computeDiffuseness_fx( return; } -#endif - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * computeDiffuseness() * @@ -1502,140 +1048,8 @@ void computeDiffuseness_fixed( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * computeDiffuseness() - * - * - *------------------------------------------------------------------------*/ - -void computeDiffuseness( - float *buffer_intensity[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF], - const float *buffer_energy, - const int16_t num_freq_bands, - float *diffuseness ) -{ - float intensity_slow[DIRAC_NUM_DIMS * CLDFB_NO_CHANNELS_MAX]; - float intensity_slow_abs[CLDFB_NO_CHANNELS_MAX]; - float energy_slow[CLDFB_NO_CHANNELS_MAX]; - int16_t i, j, k; - float tmp = 0; - float *p_tmp; - const float *p_tmp_c; - - /* Compute Intensity slow and energy slow */ - set_f( intensity_slow, 0.0f, DIRAC_NUM_DIMS * CLDFB_NO_CHANNELS_MAX ); - set_f( intensity_slow_abs, 0.0f, CLDFB_NO_CHANNELS_MAX ); - set_f( energy_slow, 0.0f, CLDFB_NO_CHANNELS_MAX ); - for ( i = 0; i < DIRAC_NO_COL_AVG_DIFF; ++i ) - { - /* Energy slow */ - p_tmp_c = buffer_energy + i * num_freq_bands; - for ( k = 0; k < num_freq_bands; k++ ) - { - energy_slow[k] += *( p_tmp_c++ ); - } - - /* Intensity slow */ - for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) - { - p_tmp = buffer_intensity[j][i]; - - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow[j * num_freq_bands + k] += *( p_tmp++ ); - } - } - } - - /* intensity_slow.^2 + intensity_slow_abs*/ - for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) - { - p_tmp = intensity_slow + j * num_freq_bands; - - for ( k = 0; k < num_freq_bands; k++ ) - { - *( p_tmp ) *= ( *p_tmp ); - intensity_slow_abs[k] += *( p_tmp++ ); - } - } - - /* Compute Diffuseness */ - p_tmp = intensity_slow_abs; - for ( i = 0; i < num_freq_bands; ++i ) - { - tmp = sqrtf( *( p_tmp++ ) ) / ( energy_slow[i] + EPSILON ); - tmp = 1.0f - tmp; - diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * deindex_azimuth() - * - * Deindex one azimuth index - *-------------------------------------------------------------------*/ - -/*! r: azimuth value */ -float deindex_azimuth( - int16_t id_phi, /* i : index */ - const int16_t no_bits, /* i : number of bits for the spherical grid */ - const int16_t id_th, /* i : elevation index */ - const int16_t remap, /* i : remapping flag */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - int16_t flag_delta; - float dd, delta_phi; - float phi_hat; - - if ( ( mc_format != MC_LS_SETUP_INVALID ) && ( no_bits == 2 ) ) - { - if ( id_phi % 2 == 0 ) - { - phi_hat = cb_azi_chan[id_phi / 2]; - } - else - { - phi_hat = -cb_azi_chan[( id_phi + 1 ) / 2]; - } - return phi_hat; - } - flag_delta = ( id_th % 2 == 1 ); - - if ( remap ) - { - id_phi = ivas_qmetadata_dereorder_generic( id_phi ) + ( no_phi_masa[no_bits - 1][id_th] >> 1 ); - } - - delta_phi = 360 / (float) ( no_phi_masa[no_bits - 1][id_th] ); - if ( ( flag_delta == 1 ) && ( no_phi_masa[no_bits - 1][id_th] > 2 ) && mc_format == MC_LS_SETUP_INVALID ) - { - dd = delta_phi / 2.0f; - } - else - { - dd = 0; - } - - id_phi -= ( ( no_phi_masa[no_bits - 1][id_th] ) >> 1 ); - phi_hat = id_phi * delta_phi + dd + 180 - 180; - if ( mc_format != MC_LS_SETUP_INVALID ) - { - phi_hat = companding_azimuth( phi_hat, mc_format, ( id_th * delta_theta_masa[no_bits - 3] > MC_MASA_THR_ELEVATION ), -1 ); - } - return phi_hat; -} -#endif - -#ifdef IVAS_FLOAT_FIXED Word32 deindex_azimuth_fx( /* o : output Q22 */ Word16 id_phi, /* i : index */ const Word16 no_bits, /* i : number of bits for the spherical grid */ @@ -1665,7 +1079,7 @@ Word32 deindex_azimuth_fx( /* o : output Q22 IF( remap ) { - id_phi = add( ivas_qmetadata_dereorder_generic( id_phi ), shr( no_phi_masa[no_bits - 1][id_th], 1 ) ); + id_phi = add( ivas_qmetadata_dereorder_generic_fx( id_phi ), shr( no_phi_masa[no_bits - 1][id_th], 1 ) ); } delta_phi_fx = Mpy_32_32( 1509949440, no_phi_masa_inv_fx[no_bits - 1][id_th] ); // q = 22 @@ -1698,7 +1112,6 @@ Word32 deindex_azimuth_fx( /* o : output Q22 } return phi_hat_fx; } -#endif /*---------------------------------------------------------------- @@ -1707,46 +1120,6 @@ Word32 deindex_azimuth_fx( /* o : output Q22 * decoding the spherical index for one tile *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void deindex_spherical_component( - const uint16_t sph_idx, /* i : spherical index */ - float *az, /* o : decoded azimuth value */ - float *el, /* o : decoded elevation value */ - uint16_t *az_idx, /* o : azimuth index */ - uint16_t *el_idx, /* o : elevation index */ - const uint16_t no_bits, /* i : number of bits for the spherical grid */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - assert( sph_idx < ( 1 << no_bits ) ); - switch ( no_bits ) - { - case 0: - *az = 0; - *el = 0; - *az_idx = 0; - *el_idx = 0; - break; - case 1: - *az_idx = sph_idx; - *az = ( *az_idx ) * ( -180.f ); - *el = 0; - *el_idx = 0; - break; - case 2: - *el = 0; - *el_idx = 0; - *az_idx = sph_idx; - *az = deindex_azimuth( *az_idx, no_bits, 0, 0, mc_format ); - break; - default: - *el_idx = deindex_sph_idx_general( sph_idx, no_bits, el, az, az_idx, mc_format ); - break; - } - - return; -} -#else void deindex_spherical_component_fx( const UWord16 sph_idx, /* i : spherical index */ Word32 *az_fx, /* o : decoded azimuth value Q22 */ @@ -1797,7 +1170,6 @@ void deindex_spherical_component_fx( return; } -#endif /*---------------------------------------------------------------- * calculate_hodirac_sector_parameters() @@ -1805,7 +1177,6 @@ void deindex_spherical_component_fx( * *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void calculate_hodirac_sector_parameters_fx( DIRAC_ENC_HANDLE hDirAC, /* i : DirAC handle */ Word32 RealBuffer_fx[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : signal vector (L+1)^2 x N_bins, real part */ @@ -2174,200 +1545,6 @@ void calculate_hodirac_sector_parameters_fx( return; } -#else -void calculate_hodirac_sector_parameters( - DIRAC_ENC_HANDLE hDirAC, /* i : DirAC handle */ - float RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : signal vector (L+1)^2 x N_bins, real part */ - float ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : signal vector, imaginary part */ - const float beta, /* i : forgetting factor for average filtering */ - const int16_t *band_grouping, /* i : indices of band groups */ - const int16_t N_bands, /* i : number of bands (groups) */ - const int16_t enc_param_start_band, /* i : first band to process */ - float *azi, /* o : array of sector azimuth angles, flat */ - float *ele, /* o : array of sector elevation angles, flat */ - float *diff, /* o : array of sector diffuseness values, flat */ - float *ene /* o : array of sector energy values, flat */ -) -{ - int16_t i_sec, i_bin, i_band; - float p_real, p_imag, normI, energy, tmp_diff; - float sec_I_vec_x[NUM_ANA_SECTORS]; - float sec_I_vec_y[NUM_ANA_SECTORS]; - float sec_I_vec_z[NUM_ANA_SECTORS]; - - - for ( i_sec = 0; i_sec < NUM_ANA_SECTORS; i_sec++ ) - { - - float *p_sec_I_vec_x = &sec_I_vec_x[i_sec]; - float *p_sec_I_vec_y = &sec_I_vec_y[i_sec]; - float *p_sec_I_vec_z = &sec_I_vec_z[i_sec]; - - const float *p_c_weights = c_weights; - - float *p_ImagBuffer_0 = ImagBuffer[0]; - float *p_ImagBuffer_1 = ImagBuffer[1]; - float *p_ImagBuffer_2 = ImagBuffer[2]; - float *p_ImagBuffer_3 = ImagBuffer[3]; - float *p_ImagBuffer_4 = ImagBuffer[4]; - float *p_ImagBuffer_5 = ImagBuffer[5]; - float *p_ImagBuffer_6 = ImagBuffer[6]; - float *p_ImagBuffer_8 = ImagBuffer[8]; - - float *p_RealBuffer_0 = RealBuffer[0]; - float *p_RealBuffer_1 = RealBuffer[1]; - float *p_RealBuffer_2 = RealBuffer[2]; - float *p_RealBuffer_3 = RealBuffer[3]; - float *p_RealBuffer_4 = RealBuffer[4]; - float *p_RealBuffer_5 = RealBuffer[5]; - float *p_RealBuffer_6 = RealBuffer[6]; - float *p_RealBuffer_8 = RealBuffer[8]; - - for ( i_band = enc_param_start_band; i_band < N_bands; i_band++ ) - { - float *p_azi = &azi[i_sec * N_bands + i_band]; - float *p_ele = &ele[i_sec * N_bands + i_band]; - float *p_ene = &ene[i_sec * N_bands + i_band]; - - float *p_diff = &diff[i_sec * N_bands + i_band]; - float *p_azi_prev = &hDirAC->azi_prev[i_sec * N_bands + i_band]; - float *p_ele_prev = &hDirAC->ele_prev[i_sec * N_bands + i_band]; - - float *p_energy_smth = &hDirAC->energy_smth[i_sec][i_band]; - float *p_sec_I_vec_smth_x = &hDirAC->sec_I_vec_smth_x[i_sec][i_band]; - float *p_sec_I_vec_smth_y = &hDirAC->sec_I_vec_smth_y[i_sec][i_band]; - float *p_sec_I_vec_smth_z = &hDirAC->sec_I_vec_smth_z[i_sec][i_band]; - *p_sec_I_vec_x = 0.f; - *p_sec_I_vec_y = 0.f; - *p_sec_I_vec_z = 0.f; - energy = 0.f; - - if ( i_sec == 0 ) - { - for ( i_bin = band_grouping[i_band]; i_bin < band_grouping[i_band + 1]; i_bin++ ) - { - float w = *( p_c_weights++ ); - float sec_w_imag, sec_x_imag, sec_y_imag, sec_z_imag; - float sec_w_real, sec_x_real, sec_y_real, sec_z_real; - - sec_w_imag = 1.772454f * *( p_ImagBuffer_0 ) + 1.772454f * *( p_ImagBuffer_1 ); - sec_x_imag = 1.772454f * *( p_ImagBuffer_3++ ) + 1.023326f * *( p_ImagBuffer_4++ ); - sec_y_imag = 0.590818f * *( p_ImagBuffer_0++ ) + 1.772454f * *( p_ImagBuffer_1++ ) - 0.590817f * *( p_ImagBuffer_6++ ) - 1.023326f * *( p_ImagBuffer_8++ ); - sec_z_imag = 1.772454f * *( p_ImagBuffer_2++ ) + 1.023326f * *( p_ImagBuffer_5++ ); - - sec_w_real = 1.772454f * *( p_RealBuffer_0 ) + 1.772454f * *( p_RealBuffer_1 ); - sec_x_real = 1.772454f * *( p_RealBuffer_3++ ) + 1.023326f * *( p_RealBuffer_4++ ); - sec_y_real = 0.590818f * *( p_RealBuffer_0++ ) + 1.772454f * *( p_RealBuffer_1++ ) - 0.590817f * *( p_RealBuffer_6++ ) - 1.023326f * *( p_RealBuffer_8++ ); - sec_z_real = 1.772454f * *( p_RealBuffer_2++ ) + 1.023326f * *( p_RealBuffer_5++ ); - - p_real = sec_w_real * w; - p_imag = sec_w_imag * w; - - *p_sec_I_vec_x += p_real * sec_x_real + p_imag * sec_x_imag; - *p_sec_I_vec_y += p_real * sec_y_real + p_imag * sec_y_imag; - *p_sec_I_vec_z += p_real * sec_z_real + p_imag * sec_z_imag; - - energy += 0.5f * ( p_real * p_real + p_imag * p_imag + sec_x_real * sec_x_real + sec_x_imag * sec_x_imag + - sec_y_real * sec_y_real + sec_y_imag * sec_y_imag + - sec_z_real * sec_z_real + sec_z_imag * sec_z_imag ); - } - } - else - { - for ( i_bin = band_grouping[i_band]; i_bin < band_grouping[i_band + 1]; i_bin++ ) - { - float w = *( p_c_weights++ ); - float sec_w_imag, sec_x_imag, sec_y_imag, sec_z_imag; - float sec_w_real, sec_x_real, sec_y_real, sec_z_real; - - sec_w_imag = 1.772454f * *(p_ImagBuffer_0) -1.772454f * *( p_ImagBuffer_1 ); - sec_x_imag = 1.772454f * *( p_ImagBuffer_3++ ) - 1.023326f * *( p_ImagBuffer_4++ ); - sec_y_imag = -0.590818f * *( p_ImagBuffer_0++ ) + 1.772454f * *( p_ImagBuffer_1++ ) + 0.590817f * *( p_ImagBuffer_6++ ) + 1.023326f * *( p_ImagBuffer_8++ ); - sec_z_imag = 1.772454f * *( p_ImagBuffer_2++ ) - 1.023326f * *( p_ImagBuffer_5++ ); - - sec_w_real = 1.772454f * *(p_RealBuffer_0) -1.772454f * *( p_RealBuffer_1 ); - sec_x_real = 1.772454f * *( p_RealBuffer_3++ ) - 1.023326f * *( p_RealBuffer_4++ ); - sec_y_real = -0.590818f * *( p_RealBuffer_0++ ) + 1.772454f * *( p_RealBuffer_1++ ) + 0.590817f * *( p_RealBuffer_6++ ) + 1.023326f * *( p_RealBuffer_8++ ); - sec_z_real = 1.772454f * *( p_RealBuffer_2++ ) - 1.023326f * *( p_RealBuffer_5++ ); - - p_real = sec_w_real * w; - p_imag = sec_w_imag * w; - - *p_sec_I_vec_x += p_real * sec_x_real + p_imag * sec_x_imag; - *p_sec_I_vec_y += p_real * sec_y_real + p_imag * sec_y_imag; - *p_sec_I_vec_z += p_real * sec_z_real + p_imag * sec_z_imag; - - energy += 0.5f * ( p_real * p_real + p_imag * p_imag + sec_x_real * sec_x_real + sec_x_imag * sec_x_imag + - sec_y_real * sec_y_real + sec_y_imag * sec_y_imag + - sec_z_real * sec_z_real + sec_z_imag * sec_z_imag ); - } - } - if ( hDirAC->firstrun_sector_params ) - { - *p_sec_I_vec_smth_x = *p_sec_I_vec_x; - *p_sec_I_vec_smth_y = *p_sec_I_vec_y; - *p_sec_I_vec_smth_z = *p_sec_I_vec_z; - *p_energy_smth = energy; - } - else - { - float w = ( 1.0f - beta ); - *p_sec_I_vec_smth_x = w * *p_sec_I_vec_x + beta * *p_sec_I_vec_smth_x; - *p_sec_I_vec_smth_y = w * *p_sec_I_vec_y + beta * *p_sec_I_vec_smth_y; - *p_sec_I_vec_smth_z = w * *p_sec_I_vec_z + beta * *p_sec_I_vec_smth_z; - *p_energy_smth = w * energy + beta * *p_energy_smth; - } - - if ( energy < EPSILON ) - { - *p_azi = 0.f; - *p_ele = 0.f; - *p_ene = 0.f; - *p_diff = 1.f; - } - else - { - normI = sqrtf( *p_sec_I_vec_smth_x * *p_sec_I_vec_smth_x + - *p_sec_I_vec_smth_y * *p_sec_I_vec_smth_y + - *p_sec_I_vec_smth_z * *p_sec_I_vec_smth_z ); - *p_azi = atan2f( *p_sec_I_vec_smth_y, *p_sec_I_vec_smth_x ) * _180_OVER_PI; - *p_ele = asinf( *p_sec_I_vec_smth_z / ( normI + EPSILON ) ) * _180_OVER_PI; - *p_ene = *p_energy_smth; - *p_diff = 1.f - normI / ( *p_energy_smth + EPSILON ); - } - - tmp_diff = *p_diff; - - if ( tmp_diff < 0.0f ) - { - *p_diff = 0.f; - } - if ( tmp_diff > 0.5f ) - { - if ( hDirAC->firstrun_sector_params ) - { - *p_azi = 0.f; - *p_ele = 0.f; - } - else - { - *p_azi = 2.f * ( 1.f - tmp_diff ) * *p_azi + ( 2.f * tmp_diff - 1.f ) * *p_azi_prev; - *p_ele = 2.f * ( 1.f - tmp_diff ) * *p_ele + ( 2.f * tmp_diff - 1.f ) * *p_ele_prev; - } - } - else - { - *p_azi_prev = *p_azi; - *p_ele_prev = *p_ele; - } - } - } - - hDirAC->firstrun_sector_params = 0; - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -2381,120 +1558,6 @@ void calculate_hodirac_sector_parameters( * deindex the spherical index for more than 2 bits for the spherical grid *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: decoded elevation index */ -static uint16_t deindex_sph_idx_general( - const int16_t idx_sph, /* i : spherical index */ - const int16_t no_bits, /* i : number of bits in the spherical grid*/ - float *theta_dec, /* o : decoded elevation value */ - float *phi_dec, /* o : decoded azimuth value */ - uint16_t *p_id_phi, /* o : decoded azimuth index */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - int16_t i; - uint16_t id_th; - int16_t sign_theta; - int16_t id_phi; - int16_t cum_n[250]; - int16_t no_th; - const int16_t *n; - - id_th = 0; - id_phi = 0; - sign_theta = 1; - - no_th = no_theta_masa[no_bits - 3]; - n = no_phi_masa[no_bits - 1]; - if ( mc_format != MC_LS_SETUP_INVALID ) - { - /* indexing */ - - cum_n[0] = n[0]; - if ( idx_sph >= cum_n[0] ) - { - for ( i = 1; i < no_th; i++ ) - { - cum_n[i] = cum_n[i - 1] + n[i]; - if ( idx_sph < cum_n[i] ) - { - id_th = i; - id_phi = idx_sph - cum_n[i - 1]; - break; - } - } - } - } - else - { - /* Starting from Equator, alternating positive and negative */ - cum_n[0] = n[0]; - if ( idx_sph >= cum_n[0] ) - { - for ( i = 1; i < no_th; i++ ) - { - cum_n[2 * i - 1] = cum_n[2 * i - 2] + n[i]; - - if ( idx_sph < cum_n[2 * i - 1] ) - { - id_th = i; - sign_theta = 1; - id_phi = idx_sph - cum_n[2 * i - 2]; - break; - } - - cum_n[2 * i] = cum_n[2 * i - 1] + n[i]; - - if ( idx_sph < cum_n[2 * i] ) - { - id_th = i; - sign_theta = -1; - id_phi = idx_sph - cum_n[2 * i - 1]; - break; - } - - if ( i == ( no_th - 1 ) ) - { - id_th = i; - sign_theta = -1; - id_phi = 0; /* idx_sph - cum_n[2*i-1]; */ - break; - } - } - } - } - - if ( id_th == 0 ) - { - id_phi = idx_sph; - } - else - { - if ( ( id_th == no_th - 1 ) && ( no_bits > 4 ) ) - { - id_phi = 0; - } - } - - *theta_dec = id_th * delta_theta_masa[no_bits - 3]; - - if ( *theta_dec >= 90 ) - { - *theta_dec = 90.f * sign_theta; - *phi_dec = 0; - *p_id_phi = 0; - } - else - { - *theta_dec *= sign_theta; - - *phi_dec = deindex_azimuth( id_phi, no_bits, id_th, 0, mc_format ); - *p_id_phi = id_phi; - } - - return id_th; -} -#else static UWord16 deindex_sph_idx_general_fx( const Word16 idx_sph, /* i : spherical index */ const Word16 no_bits, /* i : number of bits in the spherical grid */ @@ -2636,4 +1699,3 @@ static UWord16 deindex_sph_idx_general_fx( return id_th; } -#endif diff --git a/lib_com/ivas_entropy_coder_common.c b/lib_com/ivas_entropy_coder_common.c index 69ceb4fff..8793723cd 100644 --- a/lib_com/ivas_entropy_coder_common.c +++ b/lib_com/ivas_entropy_coder_common.c @@ -37,9 +37,7 @@ #include "math.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------------------------* @@ -48,30 +46,6 @@ * wrap around *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_wrap_arround( - int16_t *pArr, - const int16_t min_val, - const int16_t max_val, - const int16_t length ) -{ - int16_t i; - - for ( i = 0; i < length; i++ ) - { - if ( pArr[i] < min_val ) - { - pArr[i] = max_val - min_val + pArr[i] + 1; - } - if ( pArr[i] > max_val ) - { - pArr[i] = min_val + pArr[i] - max_val - 1; - } - } - - return; -} -#else void ivas_wrap_arround_fx( Word16 *pArr, const Word16 min_val, @@ -96,7 +70,6 @@ void ivas_wrap_arround_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -105,24 +78,6 @@ void ivas_wrap_arround_fx( * get cumulative frequency model *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_get_cum_freq_model( - const int16_t *pFreq_model, - const int16_t length, - int16_t *pCum_freq_model ) -{ - int16_t i; - - pCum_freq_model[length] = 0; - - for ( i = length; i > 0; i-- ) - { - pCum_freq_model[i - 1] = pCum_freq_model[i] + pFreq_model[i]; - } - - return; -} -#else void ivas_get_cum_freq_model_fx( const Word16 *pFreq_model, const Word16 length, @@ -141,7 +96,6 @@ void ivas_get_cum_freq_model_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -150,58 +104,6 @@ void ivas_get_cum_freq_model_fx( * Map the ivas_arith_pred_r_consts and ivas_huff_pred_r_consts tables *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_map_num_pred_r_to_idx( - const int16_t num_quant_points_pred_r, - const int16_t active_w_flag ) -{ - int16_t pred_r_to_idx = -1; - if ( active_w_flag == 0 ) - { - switch ( num_quant_points_pred_r ) - { - case 1: - pred_r_to_idx = PRED_Q_1; - break; - case 7: - pred_r_to_idx = PRED_Q_7; - break; - case 15: - pred_r_to_idx = PRED_Q_15; - break; - case 21: - pred_r_to_idx = PRED_Q_21; - break; - case 31: - pred_r_to_idx = PRED_Q_31; - break; - default: - assert( !"Forbidden value for prediction quantization strategy index" ); - break; - } - } - else - { - switch ( num_quant_points_pred_r ) - { - case 7: - pred_r_to_idx = PRED_Q_7_ACTIVE_W; - break; - case 15: - pred_r_to_idx = PRED_Q_15_ACTIVE_W; - break; - case 21: - pred_r_to_idx = PRED_Q_21_ACTIVE_W; - break; - default: - assert( !"Forbidden value for prediction quantization strategy index" ); - break; - } - } - - return pred_r_to_idx; -} -#else Word16 ivas_map_num_pred_r_to_idx_fx( const Word16 num_quant_points_pred_r, const Word16 active_w_flag ) @@ -261,7 +163,6 @@ Word16 ivas_map_num_pred_r_to_idx_fx( return pred_r_to_idx; } -#endif /*-----------------------------------------------------------------------------------------* @@ -270,32 +171,6 @@ Word16 ivas_map_num_pred_r_to_idx_fx( * Map the ivas_arith_drct_r_consts and ivas_huff_drct_r_consts tables *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_map_num_drct_r_to_idx( - const int16_t num_quant_points_drct_r ) -{ - int16_t drct_r_to_idx = -1; - switch ( num_quant_points_drct_r ) - { - case 1: - drct_r_to_idx = DRCT_Q_1; - break; - case 7: - drct_r_to_idx = DRCT_Q_7; - break; - case 9: - drct_r_to_idx = DRCT_Q_9; - break; - case 11: - drct_r_to_idx = DRCT_Q_11; - break; - default: - assert( !"Forbidden value for DRCT quantization strategy index" ); - break; - } - return drct_r_to_idx; -} -#else Word16 ivas_map_num_drct_r_to_idx_fx( const Word16 num_quant_points_drct_r ) { @@ -325,7 +200,6 @@ Word16 ivas_map_num_drct_r_to_idx_fx( } return drct_r_to_idx; } -#endif /*-----------------------------------------------------------------------------------------* @@ -334,39 +208,6 @@ Word16 ivas_map_num_drct_r_to_idx_fx( * Map the ivas_arith_decd_r_consts and ivas_huff_decd_r_consts tables *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_map_num_decd_r_to_idx( - const int16_t num_quant_points_decd_r ) -{ - int16_t decd_r_to_idx = -1; - switch ( num_quant_points_decd_r ) - { - case 1: - decd_r_to_idx = DECD_Q_1; - break; - case 3: - decd_r_to_idx = DECD_Q_3; - break; - case 5: - decd_r_to_idx = DECD_Q_5; - break; - case 7: - decd_r_to_idx = DECD_Q_7; - break; - case 9: - decd_r_to_idx = DECD_Q_9; - break; - case 11: - decd_r_to_idx = DECD_Q_11; - break; - default: - assert( !"Forbidden value for DECD quantization strategy index" ); - break; - } - - return decd_r_to_idx; -} -#else Word16 ivas_map_num_decd_r_to_idx_fx( const Word16 num_quant_points_decd_r ) { @@ -405,7 +246,6 @@ Word16 ivas_map_num_decd_r_to_idx_fx( return decd_r_to_idx; } -#endif /*---------------------------------------------------------------------------------------- - * @@ -414,108 +254,6 @@ Word16 ivas_map_num_decd_r_to_idx_fx( * arith coder init *---------------------------------------------------------------------------------------- - */ -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_arith_com_init( - ivas_arith_t *pArith, - const ivas_freq_models_t *pFreq_models, - ivas_arith_t *pArith_diff, - const int16_t q_levels, - const int16_t enc_dec ) -{ - int16_t i, j; - float sum; - - pArith->vals = pFreq_models->vals; - pArith->range = q_levels; - pArith->num_models = pFreq_models->num_models; - pArith->dyn_model_bits = ivas_get_bits_to_encode( pArith->num_models - 1 ); - pArith->pFreq_model = pFreq_models->freq_model[0]; - - ivas_get_cum_freq_model( pArith->pFreq_model, pArith->range, pArith->cum_freq[0] ); - - for ( i = 0; i < pArith->num_models - 1; i++ ) - { - pArith->pAlt_freq_models[i] = pFreq_models->freq_model[i + 1]; - ivas_get_cum_freq_model( pArith->pAlt_freq_models[i], pArith->range, pArith->cum_freq[i + 1] ); - } - - if ( enc_dec == ENC ) - { - sum = 0; - for ( i = 1; i < pArith->range + 1; i++ ) - { - sum += pArith->pFreq_model[i]; - } - - for ( i = 1; i < pArith->range + 1; i++ ) - { - pArith->saved_dist_arr[0][i - 1] = log2f( max( 1e-10f, pArith->pFreq_model[i] ) ); - pArith->saved_dist_arr[0][i - 1] -= log2f( max( 1e-10f, sum ) ); - } - - for ( j = 0; j < pArith->num_models - 1; j++ ) - { - sum = 0; - for ( i = 1; i < pArith->range + 1; i++ ) - { - sum += pArith->pAlt_freq_models[j][i]; - } - - for ( i = 1; i < pArith->range + 1; i++ ) - { - pArith->saved_dist_arr[j + 1][i - 1] = log2f( max( 1e-10f, pArith->pAlt_freq_models[j][i] ) ); - pArith->saved_dist_arr[j + 1][i - 1] -= log2f( max( 1e-10f, sum ) ); - } - } - } - - pArith_diff->vals = pFreq_models->diff_vals; - pArith_diff->range = q_levels; - pArith_diff->num_models = pFreq_models->diff_num_models; - pArith_diff->dyn_model_bits = ivas_get_bits_to_encode( pArith_diff->num_models - 1 ); - pArith_diff->pFreq_model = pFreq_models->diff_freq_model[0]; - - ivas_get_cum_freq_model( pArith_diff->pFreq_model, pArith_diff->range, pArith_diff->cum_freq[0] ); - - for ( i = 0; i < pArith_diff->num_models - 1; i++ ) - { - pArith_diff->pAlt_freq_models[i] = pFreq_models->diff_freq_model[i + 1]; - ivas_get_cum_freq_model( pArith_diff->pAlt_freq_models[i], pArith_diff->range, pArith_diff->cum_freq[i + 1] ); - } - - if ( enc_dec == ENC ) - { - sum = 0; - for ( i = 1; i < pArith_diff->range + 1; i++ ) - { - sum += pArith_diff->pFreq_model[i]; - } - - for ( i = 1; i < pArith_diff->range + 1; i++ ) - { - pArith_diff->saved_dist_arr[0][i - 1] = log2f( max( 1e-10f, pArith_diff->pFreq_model[i] ) ); - pArith_diff->saved_dist_arr[0][i - 1] -= log2f( max( 1e-10f, sum ) ); - } - - for ( j = 0; j < pArith_diff->num_models - 1; j++ ) - { - sum = 0; - for ( i = 1; i < pArith_diff->range + 1; i++ ) - { - sum += pArith_diff->pAlt_freq_models[j][i]; - } - - for ( i = 1; i < pArith_diff->range + 1; i++ ) - { - pArith_diff->saved_dist_arr[j + 1][i - 1] = log2f( max( 1e-10f, pArith_diff->pAlt_freq_models[j][i] ) ); - pArith_diff->saved_dist_arr[j + 1][i - 1] -= log2f( max( 1e-10f, sum ) ); - } - } - } - - return; -} -#else static void ivas_spar_arith_com_init_fx( ivas_arith_t *pArith, const ivas_freq_models_t *pFreq_models, @@ -663,7 +401,6 @@ static void ivas_spar_arith_com_init_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -672,37 +409,6 @@ static void ivas_spar_arith_com_init_fx( * Init for Arithm. coding *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_arith_coeffs_com_init( - ivas_arith_coeffs_t *pArith_coeffs, - ivas_spar_md_com_cfg *pSpar_cfg, - const int16_t table_idx, - const int16_t enc_dec ) -{ - int16_t i, pred_r_index, drct_r_index, decd_r_index; - int16_t num_quant_points_pred_r, num_quant_points_drct_r, num_quant_points_decd_r; - - for ( i = 0; i < MAX_QUANT_STRATS; i++ ) - { - num_quant_points_pred_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; /* 0: pred_r */ - pred_r_index = ivas_map_num_pred_r_to_idx( num_quant_points_pred_r, ivas_spar_br_table_consts[table_idx].active_w ); - ivas_spar_arith_com_init( &pArith_coeffs->pred_arith_re[i], &ivas_arith_pred_r_consts[pred_r_index], - &pArith_coeffs->pred_arith_re_diff[i], pSpar_cfg->quant_strat[i].PR.q_levels[0], enc_dec ); - - num_quant_points_drct_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; /* 1: drct_r */ - drct_r_index = ivas_map_num_drct_r_to_idx( num_quant_points_drct_r ); - ivas_spar_arith_com_init( &pArith_coeffs->drct_arith_re[i], &ivas_arith_drct_r_consts[drct_r_index], - &pArith_coeffs->drct_arith_re_diff[i], pSpar_cfg->quant_strat[i].C.q_levels[0], enc_dec ); - - num_quant_points_decd_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; /* 2: decd_r */ - decd_r_index = ivas_map_num_decd_r_to_idx( num_quant_points_decd_r ); - ivas_spar_arith_com_init( &pArith_coeffs->decd_arith_re[i], &ivas_arith_decd_r_consts[decd_r_index], - &pArith_coeffs->decd_arith_re_diff[i], pSpar_cfg->quant_strat[i].P_r.q_levels[0], enc_dec ); - } - - return; -} -#else void ivas_spar_arith_coeffs_com_init_fx( ivas_arith_coeffs_t *pArith_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, @@ -735,7 +441,6 @@ void ivas_spar_arith_coeffs_com_init_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -744,35 +449,6 @@ void ivas_spar_arith_coeffs_com_init_fx( * Find min and max length in codebook and finalize initialization of ivas_huffman_cfg_t. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_huffman_dec_init_min_max_len( - ivas_huffman_cfg_t *p_huff_cfg ) -{ - int16_t i, code_len; - const int16_t *codebook; - - codebook = p_huff_cfg->codebook; - - p_huff_cfg->min_len = p_huff_cfg->sym_len; - p_huff_cfg->max_len = 0; - - for ( i = 0; i < p_huff_cfg->sym_len; i++ ) - { - code_len = codebook[1]; - if ( p_huff_cfg->min_len > code_len ) - { - p_huff_cfg->min_len = code_len; - } - if ( p_huff_cfg->max_len < code_len ) - { - p_huff_cfg->max_len = code_len; - } - codebook = codebook + 3; - } - - return; -} -#else static void ivas_huffman_dec_init_min_max_len_fx( ivas_huffman_cfg_t *p_huff_cfg ) { @@ -805,7 +481,6 @@ static void ivas_huffman_dec_init_min_max_len_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -814,53 +489,6 @@ static void ivas_huffman_dec_init_min_max_len_fx( * Init for Huffman decoding *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_huff_coeffs_com_init( - ivas_huff_coeffs_t *pHuff_coeffs, - ivas_spar_md_com_cfg *pSpar_cfg, - const int16_t table_idx, - const int16_t enc_dec ) -{ - int16_t i, pred_r_index, drct_r_index, decd_r_index; - int16_t num_quant_points_pred_r, num_quant_points_drct_r, num_quant_points_decd_r; - ivas_huffman_cfg_t *p_huff_cfg; - - for ( i = 0; i < MAX_QUANT_STRATS; i++ ) - { - p_huff_cfg = &pHuff_coeffs->pred_huff_re[i]; - num_quant_points_pred_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; /* 0: pred_r */ - pred_r_index = ivas_map_num_pred_r_to_idx( num_quant_points_pred_r, 0 ); - p_huff_cfg->codebook = &ivas_huff_pred_r_consts[pred_r_index].code_book[0][0]; - if ( enc_dec == DEC ) - { - p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].PR.q_levels[0]; - ivas_huffman_dec_init_min_max_len( p_huff_cfg ); - } - - p_huff_cfg = &pHuff_coeffs->drct_huff_re[i]; - num_quant_points_drct_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; /* 1: drct_r */ - drct_r_index = ivas_map_num_drct_r_to_idx( num_quant_points_drct_r ); - p_huff_cfg->codebook = &ivas_huff_drct_r_consts[drct_r_index].code_book[0][0]; - if ( enc_dec == DEC ) - { - p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].C.q_levels[0]; - ivas_huffman_dec_init_min_max_len( p_huff_cfg ); - } - - p_huff_cfg = &pHuff_coeffs->decd_huff_re[i]; - num_quant_points_decd_r = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; /* 2: decd_r */ - decd_r_index = ivas_map_num_decd_r_to_idx( num_quant_points_decd_r ); - p_huff_cfg->codebook = &ivas_huff_decd_r_consts[decd_r_index].code_book[0][0]; - if ( enc_dec == DEC ) - { - p_huff_cfg->sym_len = pSpar_cfg->quant_strat[i].P_r.q_levels[0]; - ivas_huffman_dec_init_min_max_len( p_huff_cfg ); - } - } - - return; -} -#else void ivas_spar_huff_coeffs_com_init_fx( ivas_huff_coeffs_t *pHuff_coeffs, ivas_spar_md_com_cfg *pSpar_cfg, @@ -912,4 +540,3 @@ void ivas_spar_huff_coeffs_com_init_fx( return; } -#endif diff --git a/lib_com/ivas_fb_mixer.c b/lib_com/ivas_fb_mixer.c index 48ebc3389..5d06f59a5 100644 --- a/lib_com/ivas_fb_mixer.c +++ b/lib_com/ivas_fb_mixer.c @@ -40,15 +40,12 @@ #include "wmc_auto.h" #include "ivas_prot_fx.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------------------------* * Static functions declarations *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_cmult_fix( Word32 in1_re, // i: Qx Word32 in1_im, // i: Qx @@ -61,9 +58,7 @@ static void ivas_get_active_bins_fx( const Word16 **pActive_bins, const Word16 * static void ivas_get_ld_fb_resp_fx( Word32 **ppIdeal_FRs_re_fx, Word32 **ppIdeal_FRs_im_fx, Word32 **ppNew_FRs_re_fx, Word32 **ppNew_FRs_im_fx, const Word16 *pActive_bins, const Word16 *pStart_offset, const Word16 num_bands, const Word16 delay, const Word32 sampling_rate ); static ivas_error ivas_filterbank_setup_fx( IVAS_FB_MIXER_HANDLE hFbMixer, const Word32 sampling_rate, Word16 *index ); static ivas_error ivas_fb_mixer_get_window_fx( const Word16 fade_len, const Word32 sampling_rate, const Word16 **pWindow ); -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_get_num_bands_from_bw_idx() * @@ -83,26 +78,6 @@ Word16 ivas_get_num_bands_from_bw_idx( return num_active_bands; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_num_bands_from_bw_idx() - * - * Get number of bands from BW index - *-----------------------------------------------------------------------------------------*/ - -/*! r: number of spectral bands */ -int16_t ivas_get_num_bands_from_bw_idx( - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t num_active_bands; - - assert( bwidth > 0 ); /*NB BW is not supported*/ - num_active_bands = ivas_num_active_bands[bwidth - 1]; - - return num_active_bands; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -111,7 +86,6 @@ int16_t ivas_get_num_bands_from_bw_idx( * Get number of bands depending on the sampling rates *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_num_bands( const Word32 sampling_rate ) { @@ -120,16 +94,6 @@ static Word16 ivas_get_num_bands( return num_active_bands; } -#else -static int16_t ivas_get_num_bands( - const int32_t sampling_rate ) -{ - int16_t bwidth = ivas_get_bw_idx_from_sample_rate( sampling_rate ); - int16_t num_active_bands = ivas_get_num_bands_from_bw_idx( bwidth ); - - return num_active_bands; -} -#endif /*---------------------------------------------------------------------* @@ -138,7 +102,6 @@ static int16_t ivas_get_num_bands( * Set default configs for FB mixer *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_fb_set_cfg( IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ const Word16 ivas_format, /* i : IVAS format */ @@ -221,64 +184,6 @@ ivas_error ivas_fb_set_cfg( return IVAS_ERR_OK; } -#else -ivas_error ivas_fb_set_cfg( - IVAS_FB_CFG **pFb_cfg_out, /* o : FB config. handle */ - const int16_t ivas_format, /* i : IVAS format */ - const int16_t num_in_chans, /* i : number of FB input channels */ - const int16_t num_out_chans, /* i : number of FB output channels */ - const int16_t active_w_mixing, /* i : active_w_mixing flag */ - const int32_t sampling_rate, /* i : sampling rate */ - const int16_t nchan_fb_in /* i : number of dirAC analysis channels*/ -) -{ - IVAS_FB_CFG *pFb_cfg; - - if ( ( pFb_cfg = (IVAS_FB_CFG *) malloc( sizeof( IVAS_FB_CFG ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FB mixer config" ); - } - - pFb_cfg->num_in_chans = num_in_chans; - pFb_cfg->num_out_chans = num_out_chans; - pFb_cfg->nchan_fb_in = nchan_fb_in; - - pFb_cfg->pcm_offset = 0; /* note: in SPAR decoder, this parameter is overwritten later */ - pFb_cfg->active_w_mixing = active_w_mixing; - pFb_cfg->windowed_fr_offset = 0; - - if ( ivas_format == ISM_FORMAT ) - { - pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_4_NS ); - pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_4_NS ); - pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS_PARAM_ISM ) + NS2SA( sampling_rate, DIRAC_SLOT_ENC_NS ); - } - else if ( ivas_format == SBA_FORMAT ) - { - pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); - - pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_4_NS ); - pFb_cfg->prior_input_length = NS2SA( sampling_rate, FRAME_SIZE_NS ); - pFb_cfg->windowed_fr_offset = (int16_t) ( (float) ( sampling_rate / FRAMES_PER_SEC ) * 3.0f / 4.0f ) - NS2SA( sampling_rate, DELAY_DIRAC_SPAR_ENC_CMP_NS ); - } - else if ( ivas_format == MASA_FORMAT ) - { - pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); - pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_1_NS ); - pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS ) + NS2SA( sampling_rate, DIRAC_SLOT_ENC_NS ); - } - else if ( ivas_format == MC_FORMAT ) - { - pFb_cfg->fb_latency = NS2SA( sampling_rate, DELAY_FB_1_NS ); - pFb_cfg->fade_len = NS2SA( sampling_rate, DELAY_FB_1_NS ); - pFb_cfg->prior_input_length = NS2SA( sampling_rate, DELAY_DIRAC_ENC_CMP_NS ) + NS2SA( sampling_rate, PARAM_MC_SLOT_ENC_NS ); - } - - *pFb_cfg_out = pFb_cfg; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -286,7 +191,6 @@ ivas_error ivas_fb_set_cfg( * * Allocate and initialize FB mixer handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_FB_mixer_open_fx( IVAS_FB_MIXER_HANDLE *hFbMixer_out, /* i/o: FB mixer handle */ const Word32 sampling_rate, /* i : sampling rate */ @@ -484,7 +388,6 @@ ivas_error ivas_FB_mixer_open_fx( return error; } -#endif /*------------------------------------------------------------------------- * ivas_FB_mixer_close() @@ -492,7 +395,6 @@ ivas_error ivas_FB_mixer_open_fx( * Deallocate FB mixer handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_FB_mixer_close_fx( IVAS_FB_MIXER_HANDLE *hFbMixer_in, /* i/o: FB mixer handle */ const Word32 sampling_rate, /* i : sampling rate in Hz */ @@ -615,47 +517,11 @@ void ivas_FB_mixer_close_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_pcm_ingest() * * PCM ingest block *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_fb_mixer_pcm_ingest( - IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ - float *pcm_in[], /* i : input audio channels */ - float **ppOut_pcm, /* o : output audio channels */ - const int16_t frame_len, /* i : frame length */ - const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] ) -{ - int16_t i; - int16_t num_chs_ingest; - IVAS_FB_CFG *fb_cfg = hFbMixer->fb_cfg; - - if ( fb_cfg->active_w_mixing ) - { - num_chs_ingest = fb_cfg->num_in_chans; - } - else - { - num_chs_ingest = 1; /* forward Filterbank MDFT only on W */ - } - - for ( i = 0; i < fb_cfg->num_in_chans; i++ ) - { - mvr2r( &hFbMixer->ppFilterbank_prior_input[i][fb_cfg->prior_input_length - frame_len], ppOut_pcm[i], frame_len ); - mvr2r( pcm_in[HOA_md_ind[i]], &ppOut_pcm[i][frame_len], frame_len ); - } - - for ( i = 0; i < num_chs_ingest; i++ ) - { - ivas_mdft( ppOut_pcm[fb_cfg->remix_order[i]], hFbMixer->ppFilterbank_inFR_re[fb_cfg->remix_order[i]], hFbMixer->ppFilterbank_inFR_im[fb_cfg->remix_order[i]], frame_len << 1, frame_len ); - } - - return; -} -#else void ivas_fb_mixer_pcm_ingest_fx( IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ Word32 *pcm_in[], /* i : input audio channels Qq_data_fix[] */ @@ -728,32 +594,12 @@ void ivas_fb_mixer_pcm_ingest_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_update_prior_input() * * *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_fb_mixer_update_prior_input( - IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ - float *pcm_in[], /* i : input audio channels */ - const int16_t length, /* i : length of time slot */ - const int16_t nchan_fb_in /* i : number of analysis channels */ -) -{ - int16_t i; - - for ( i = 0; i < nchan_fb_in; i++ ) - { - mvr2r( &hFbMixer->ppFilterbank_prior_input[i][length], hFbMixer->ppFilterbank_prior_input[i], hFbMixer->fb_cfg->prior_input_length - length ); - mvr2r( pcm_in[i], &hFbMixer->ppFilterbank_prior_input[i][hFbMixer->fb_cfg->prior_input_length - length], length ); - } - - return; -} -#else void ivas_fb_mixer_update_prior_input_fx( IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ Word32 *pcm_in_fx[], /* i : input audio channels */ @@ -771,7 +617,6 @@ void ivas_fb_mixer_update_prior_input_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -780,7 +625,6 @@ void ivas_fb_mixer_update_prior_input_fx( * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_fb_mixer_get_windowed_fr_fx( IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ Word32 *pcm_in_fx[], // i: Qx @@ -833,52 +677,6 @@ void ivas_fb_mixer_get_windowed_fr_fx( return; } -#else - -void ivas_fb_mixer_get_windowed_fr( - IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ - float *pcm_in[], /* i : input audio channels */ - float *frame_f_real[], /* o : real freq domain values */ - float *frame_f_imag[], /* o : imag freq domain values */ - const int16_t length, /* i : number of new samples in time slot */ - const int16_t mdft_len, /* i : MDFT frame length */ - const int16_t nchan_fb_in /* i : number of analysis channels */ -) -{ - int16_t ch_idx, j, offset, rev_offset; - int16_t n_old_samples; - int16_t n_new_samples; - float fr_in_block[L_FRAME48k * 2]; - const float *win_ptr; - - n_old_samples = min( ( hFbMixer->fb_cfg->prior_input_length - hFbMixer->fb_cfg->windowed_fr_offset ), ( 2 * mdft_len ) ); - n_new_samples = max( 0, 2 * length - n_old_samples ); - offset = (int16_t) ( 2 * mdft_len - length - hFbMixer->ana_window_offset ); - rev_offset = (int16_t) ( 2 * mdft_len - hFbMixer->ana_window_offset ); - set_zero( fr_in_block, offset ); - - for ( ch_idx = 0; ch_idx < nchan_fb_in; ch_idx++ ) - { - mvr2r( &hFbMixer->ppFilterbank_prior_input[ch_idx][offset + hFbMixer->fb_cfg->windowed_fr_offset], &fr_in_block[offset], n_old_samples - offset ); - mvr2r( pcm_in[ch_idx], &fr_in_block[n_old_samples], n_new_samples ); - win_ptr = hFbMixer->pAna_window; - - for ( j = offset; j < 2 * mdft_len - length; j++ ) - { - fr_in_block[j] *= ( *( win_ptr++ ) ); - } - - for ( j = rev_offset; j < 2 * mdft_len; j++ ) - { - fr_in_block[j] *= ( *( --win_ptr ) ); - } - - ivas_mdft( fr_in_block, frame_f_real[ch_idx], frame_f_imag[ch_idx], mdft_len << 1, mdft_len ); - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_cross_fading() @@ -886,7 +684,6 @@ void ivas_fb_mixer_get_windowed_fr( * FB Mixer cross fading *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_fb_mixer_cross_fading_fx( IVAS_FB_MIXER_HANDLE hFbMixer, Word32 **ppOut_pcm_fx, // o: Qx @@ -937,14 +734,12 @@ void ivas_fb_mixer_cross_fading_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_process() * * Filter bank process *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_cmult_fix( Word32 in1_re, // i: Qx Word32 in1_im, // i: Qx @@ -1082,128 +877,12 @@ void ivas_fb_mixer_process_fx( return; } -#else -void ivas_fb_mixer_process( - IVAS_FB_MIXER_HANDLE hFbMixer, /* i/o: FB mixer handle */ - float ***mixer_mat, /* i : mixer matrix */ - float **ppOut_pcm, /* o : output audio channels */ - const int16_t frame_len, /* i : frame length in samples */ - int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ -) -{ - ivas_filterbank_t *pFb = hFbMixer->pFb; - int16_t num_bands = pFb->filterbank_num_bands; - int16_t i, j, k, ch, hist; - const float *pFilterbank_bin_to_band_re; - const float *pFilterbank_bin_to_band_im; - float *pMdft_out[2], *pOut_fr_re, *pOut_fr_im; -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 *pMdft_out_fx[2]; - Word32 **ppOut_pcm_fx = (Word32 **) malloc( hFbMixer->fb_cfg->num_out_chans * sizeof( Word32 * ) ); - for ( ch = 0; ch < hFbMixer->fb_cfg->num_out_chans; ch++ ) - { - ppOut_pcm_fx[ch] = (Word32 *) malloc( frame_len * sizeof( Word32 ) ); - } -#endif - float Out_fr_re[L_FRAME48k], Out_fr_im[L_FRAME48k]; - float Mdft_out_0[L_FRAME48k * 2], Mdft_out_1[L_FRAME48k * 2]; -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 Mdft_out_0_fx[L_FRAME48k * 2], Mdft_out_1_fx[L_FRAME48k * 2]; -#endif - pOut_fr_re = Out_fr_re; - pOut_fr_im = Out_fr_im; - pMdft_out[0] = Mdft_out_0; - pMdft_out[1] = Mdft_out_1; -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - pMdft_out_fx[0] = Mdft_out_0_fx; - pMdft_out_fx[1] = Mdft_out_1_fx; -#endif - - for ( ch = ( hFbMixer->fb_cfg->active_w_mixing == 0 ); ch < hFbMixer->fb_cfg->num_out_chans; ch++ ) - { - /* Run a loop of 2 to calculate current frame's filterbank output and prev frame's output */ - for ( hist = 0; hist < 2; hist++ ) - { - set_zero( pOut_fr_re, frame_len ); - set_zero( pOut_fr_im, frame_len ); - - for ( j = 0; j < hFbMixer->fb_cfg->num_in_chans; j++ ) - { - if ( in_out_mixer_map[ch][j] != 0 ) - { - float filterbank_mixer_bins_re[L_FRAME48k]; - float filterbank_mixer_bins_im[L_FRAME48k]; - float *pFb_inFR_re = hFbMixer->ppFilterbank_inFR_re[j]; - float *pFb_inFR_im = hFbMixer->ppFilterbank_inFR_im[j]; - - set_zero( filterbank_mixer_bins_re, frame_len ); - set_zero( filterbank_mixer_bins_im, frame_len ); - - for ( i = 0; i < num_bands; i++ ) - { - int16_t start_offset = pFb->fb_consts.pFilterbank_bins_start_offset[i]; - int16_t num_bins = pFb->fb_consts.pFilterbank_bins_per_band[i]; - - float mixer_const = hFbMixer->prior_mixer[ch][j][i]; - - pFilterbank_bin_to_band_re = pFb->fb_consts.ppFilterbank_FRs[0][i]; - pFilterbank_bin_to_band_im = pFb->fb_consts.ppFilterbank_FRs[1][i]; - - for ( k = start_offset; k < num_bins + start_offset; k++ ) - { - filterbank_mixer_bins_re[k] += *pFilterbank_bin_to_band_re++ * mixer_const; - filterbank_mixer_bins_im[k] += *pFilterbank_bin_to_band_im++ * mixer_const; - } - hFbMixer->prior_mixer[ch][j][i] = mixer_mat[ch][j][i]; - } - - for ( k = 0; k < frame_len; k++ ) - { - float temp_out_re, temp_out_im; - - IVAS_CMULT_FLOAT( filterbank_mixer_bins_re[k], filterbank_mixer_bins_im[k], pFb_inFR_re[k], - pFb_inFR_im[k], temp_out_re, temp_out_im ); - - pOut_fr_re[k] += temp_out_re; - pOut_fr_im[k] += temp_out_im; - } - } - } - - ivas_imdft( pOut_fr_re, pOut_fr_im, pMdft_out[hist], frame_len ); - } -#ifndef IVAS_FLOAT_FIXED - ivas_fb_mixer_cross_fading( hFbMixer, ppOut_pcm, pMdft_out[0], pMdft_out[1], ch, frame_len, frame_len ); -#else -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 q1 = Q_factor_arrL( pMdft_out[0], frame_len * 2 ); - Word16 q2 = Q_factor_arrL( pMdft_out[1], frame_len * 2 ); - Word16 q = s_min( q1, q2 ); - floatToFixed_arrL( pMdft_out[0], pMdft_out_fx[0], q, frame_len * 2 ); - floatToFixed_arrL( pMdft_out[1], pMdft_out_fx[1], q, frame_len * 2 ); -#endif - ivas_fb_mixer_cross_fading_fx( hFbMixer, ppOut_pcm_fx, pMdft_out_fx[0], pMdft_out_fx[1], ch, frame_len, frame_len ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( ppOut_pcm_fx[ch], ppOut_pcm[ch], q, frame_len ); -#endif -#endif - } -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( ch = 0; ch < hFbMixer->fb_cfg->num_out_chans; ch++ ) - { - free( ppOut_pcm_fx[ch] ); - } - free( ppOut_pcm_fx ); -#endif - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_get_in_out_mapping() * * *-----------------------------------------------------------------------------------------*/ - +#ifdef IVAS_FLOAT_FIXED void ivas_fb_mixer_get_in_out_mapping_fx( const IVAS_FB_CFG *fb_cfg, /* i : FB config. handle */ Word16 in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i/o: mixing mapping */ @@ -1237,7 +916,7 @@ void ivas_fb_mixer_get_in_out_mapping_fx( return; } - +#endif /*-----------------------------------------------------------------------------------------* * Function ivas_calculate_abs_fr() @@ -1245,7 +924,6 @@ void ivas_fb_mixer_get_in_out_mapping_fx( * Function to calculate number of active bands *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_calculate_abs_fr_fx( ivas_filterbank_t *pFb, const Word32 sampling_rate, @@ -1562,7 +1240,6 @@ static Word16 ivas_calculate_abs_fr_fx( return num_active_bands; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_active_bins() @@ -1570,7 +1247,6 @@ static Word16 ivas_calculate_abs_fr_fx( * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_get_active_bins_fx( const Word16 **pActive_bins, const Word16 **pActive_bins_abs, @@ -1607,7 +1283,6 @@ static void ivas_get_active_bins_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -1616,7 +1291,6 @@ static void ivas_get_active_bins_fx( * Filterbank setup, initialization *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_filterbank_setup_fx( IVAS_FB_MIXER_HANDLE hFbMixer, const Word32 sampling_rate, @@ -1813,7 +1487,6 @@ static ivas_error ivas_filterbank_setup_fx( return error; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_fb_mixer_get_window() @@ -1821,7 +1494,6 @@ static ivas_error ivas_filterbank_setup_fx( * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_fb_mixer_get_window_fx( const Word16 fade_len, /* i : window fading length in samples */ const Word32 sampling_rate, /* i : sampling rate */ @@ -1875,9 +1547,7 @@ static ivas_error ivas_fb_mixer_get_window_fx( return error; } -#endif -#ifdef IVAS_FLOAT_FIXED static const Word32 *ivas_get_cheby_ramp_fx( const Word16 delay ) { @@ -1897,9 +1567,7 @@ static const Word32 *ivas_get_cheby_ramp_fx( return pCheby_fx; } -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_get_ld_fb_resp_fx( Word32 **ppIdeal_FRs_re_fx, // i: Q30 Word32 **ppIdeal_FRs_im_fx, // i: Q30 @@ -2106,4 +1774,3 @@ static void ivas_get_ld_fb_resp_fx( return; } -#endif diff --git a/lib_com/ivas_filters.c b/lib_com/ivas_filters.c index 7d67ec9c4..32ebe479f 100644 --- a/lib_com/ivas_filters.c +++ b/lib_com/ivas_filters.c @@ -36,76 +36,23 @@ #include "ivas_cnst.h" #include "ivas_stat_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com.h" #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------------------------* * Local functions declaration *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_iir_2_filter( ivas_filters_process_state_t *filter_state, float *pIn_Out, const int16_t length, const int16_t stage ); -#else static void ivas_iir_2_filter_fx( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, // Q(31-*pIn_Out_e) const Word16 length, const Word16 stage, Word16 *pIn_Out_e ); -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_filters_init() * * Initialisation call for filtering a signal *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_filters_init( - ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ - const float *filt_coeff, /* i : filter coefficients */ - const int16_t order ) /* i : filter order */ -{ - int16_t i; - filter_state->order = order; - - if ( order == IVAS_FILTER_ORDER_2 || order == IVAS_FILTER_ORDER_1 ) - { - filter_state->filt_len = order + 1; - - for ( i = 0; i < IVAS_BIQUAD_FILT_LEN; i++ ) - { - filter_state->num[IVAS_FILTER_STAGE_0][i] = filt_coeff[i]; - filter_state->den[IVAS_FILTER_STAGE_0][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN]; - } - - filter_state->state[0][0] = 0.0f; - filter_state->state[0][1] = 0.0f; - filter_state->state[0][2] = 0.0f; - } - else - { - filter_state->filt_len = IVAS_BIQUAD_FILT_LEN; - - for ( i = 0; i < IVAS_BIQUAD_FILT_LEN; i++ ) - { - filter_state->num[IVAS_FILTER_STAGE_0][i] = filt_coeff[i]; - filter_state->den[IVAS_FILTER_STAGE_0][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN]; - filter_state->num[IVAS_FILTER_STAGE_1][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN * 2]; - filter_state->den[IVAS_FILTER_STAGE_1][i] = filt_coeff[i + IVAS_BIQUAD_FILT_LEN * 3]; - } - - filter_state->state[0][0] = 0.0f; - filter_state->state[0][1] = 0.0f; - filter_state->state[0][2] = 0.0f; - filter_state->state[1][0] = 0.0f; - filter_state->state[1][1] = 0.0f; - filter_state->state[1][2] = 0.0f; - } - - return; -} - -#else void ivas_filters_init_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ const Word32 *filt_coeff_fx, /* i : filter coefficients Q31- *filt_coeff_e */ @@ -202,7 +149,6 @@ void ivas_filters_init_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -210,33 +156,6 @@ void ivas_filters_init_fx( * * Process call for selecting the type filter *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_filter_process( - ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ - float *pIn_Out, /* i/o: signal subject to filtering */ - const int16_t length /* i : filter order */ -) -{ - - switch ( filter_state->order ) - { - case IVAS_FILTER_ORDER_1: - case IVAS_FILTER_ORDER_2: - ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_0 ); - break; - case IVAS_FILTER_ORDER_4: - /* biquad-1 */ - ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_0 ); - /* biquad-2 */ - ivas_iir_2_filter( filter_state, pIn_Out, length, IVAS_FILTER_STAGE_1 ); - break; - default: - break; - } - - return; -} -#else void ivas_filter_process_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering Q(q_factor) */ @@ -277,7 +196,6 @@ void ivas_filter_process_fx( return; } -#endif void ivas_filter_process_exp_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ @@ -312,33 +230,6 @@ void ivas_filter_process_exp_fx( * * Process call for filtering a signal *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_iir_2_filter( - ivas_filters_process_state_t *filter_state, - float *pIn_Out, - const int16_t length, - const int16_t stage ) -{ - int16_t i, j; - float *pIn = pIn_Out; - float *pOut = pIn_Out; - float tmp_pIn_buf_i; - - for ( i = 0; i < length; i++ ) - { - tmp_pIn_buf_i = pIn[i]; - pOut[i] = filter_state->state[stage][0] + pIn[i] * filter_state->num[stage][0]; - - for ( j = 1; j < filter_state->filt_len; j++ ) - { - filter_state->state[stage][j - 1] = filter_state->state[stage][j] + filter_state->num[stage][j] * tmp_pIn_buf_i - - filter_state->den[stage][j] * pOut[i]; - } - } - return; -} - -#else static void ivas_iir_2_filter_fx( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, // Q(31-*pIn_Out_e) @@ -392,4 +283,3 @@ static void ivas_iir_2_filter_fx( } } } -#endif diff --git a/lib_com/ivas_ism_com.c b/lib_com/ivas_ism_com.c index f170bada1..283f79cf1 100644 --- a/lib_com/ivas_ism_com.c +++ b/lib_com/ivas_ism_com.c @@ -51,9 +51,12 @@ #define BITS_ISM_INACTIVE ( BRATE_ISM_INACTIVE / FRAMES_PER_SEC ) -#define BETA_ISM_LOW_IMP 0.6f +#ifndef IVAS_FLOAT_FIXED +#define BETA_ISM_LOW_IMP 0.6f +#define BETA_ISM_MEDIUM_IMP 0.8f +#endif + #define BETA_ISM_LOW_IMP_Q31 ( 1288490189 ) // 0.6 in Q31 -#define BETA_ISM_MEDIUM_IMP 0.8f #define BETA_ISM_MEDIUM_IMP_Q31 ( 1717986918 ) // 0.8 in Q31 #define BETA_ISM_MEDIUM_IMP_BY_8_Q31 ( 214748365 ) // 0.8 in Q29 @@ -72,7 +75,6 @@ * Convert bit-budget to bitrate *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void bitbudget_to_brate( const Word16 x[], /* i : bitbudgets Q0 */ Word32 y[], /* o : bitrates Q0 */ @@ -89,24 +91,6 @@ void bitbudget_to_brate( return; } -#else -void bitbudget_to_brate( - const int16_t x[], /* i : bitbudgets */ - int32_t y[], /* o : bitrates */ - const int16_t N /* i : number of entries to be converted */ -) -{ - int16_t i; - - for ( i = 0; i < N; i++ ) - { - y[i] = FRAMES_PER_SEC * x[i]; - } - - return; -} - -#endif /*-------------------------------------------------------------------* @@ -115,303 +99,6 @@ void bitbudget_to_brate( * Configure audio objects coding *-------------------------------------------------------------------*/ -ivas_error ivas_ism_config( - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t nchan_ism, /* i : number of objects */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int16_t ism_extended_metadata_flag, /* i : extended metadata flag */ - const int16_t null_metadata_flag[MAX_NUM_OBJECTS], /* i : NULL MD flag */ - const int16_t ism_imp[], /* i : ISM importance flags */ - int32_t element_brate[], /* o : element bitrate per object */ - int32_t total_brate[], /* o : total bitrate per object */ - int16_t nb_bits_metadata[], /* i/o: number of metadata bits */ - const int16_t combined_format_flag /* i : flag indicating combined format */ -) -{ - int16_t ch; - int16_t bits_element[MAX_NUM_OBJECTS], bits_CoreCoder[MAX_NUM_OBJECTS]; - int16_t bits_ism, bits_side; - int16_t limit_high = 0; /* just to avoid compilation warning */ - int16_t tmp; - int16_t ism_metadata_flag_global; - int16_t n_ISms; - ivas_error error; - - error = IVAS_ERR_OK; - if ( combined_format_flag ) - { - n_ISms = nchan_ism; - } - else - { - n_ISms = nchan_transport; - } - - /* initialization */ - ism_metadata_flag_global = 0; - bits_side = 0; - if ( hIsmMeta != NULL ) - { - for ( ch = 0; ch < n_ISms; ch++ ) - { - ism_metadata_flag_global |= ism_imp[ch]; - } - } - - /* decision about bitrates per channel */ - if ( combined_format_flag ) - { - /* combined format: decision about bitrates per channel - variable during the session (at one ivas_total_brate) */ - bits_ism = (int16_t) ( ism_total_brate / FRAMES_PER_SEC ); - set_s( bits_element, bits_ism / n_ISms, n_ISms ); - bits_element[n_ISms - 1] += bits_ism % n_ISms; - - /* ISM common signaling bits are counted in MASA MD bit-budget */ - } - else - { - /* ISM format: decision about bitrates per channel - constant during the session (at one ivas_total_brate) */ - bits_ism = (int16_t) ( ism_total_brate / FRAMES_PER_SEC ); - set_s( bits_element, bits_ism / n_ISms, n_ISms ); - bits_element[n_ISms - 1] += bits_ism % n_ISms; - bitbudget_to_brate( bits_element, element_brate, n_ISms ); - - /* count ISm common signaling bits */ - if ( hIsmMeta != NULL ) - { - nb_bits_metadata[0] += n_ISms * ISM_METADATA_FLAG_BITS + nchan_ism; - - if ( ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) - { - nb_bits_metadata[0] += ISM_EXTENDED_METADATA_BITS; - - if ( ism_extended_metadata_flag ) - { - nb_bits_metadata[0] += ISM_METADATA_IS_NDP_BITS; - } - } - - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( null_metadata_flag[ch] ) - { - nb_bits_metadata[0] += ISM_METADATA_MD_FLAG_BITS; - nb_bits_metadata[0] += ISM_METADATA_FLAG_BITS; - } - else - { - if ( ism_imp[ch] == ISM_NO_META ) - { - nb_bits_metadata[0] += ISM_METADATA_MD_FLAG_BITS; - nb_bits_metadata[0] += ISM_METADATA_INACTIVE_FLAG_BITS; - } - } - } - } - } - - /* split metadata bitbudget equally between channels */ - if ( nb_bits_metadata != NULL ) - { - bits_side = sum_s( nb_bits_metadata, n_ISms ); - set_s( nb_bits_metadata, bits_side / n_ISms, n_ISms ); - nb_bits_metadata[n_ISms - 1] += bits_side % n_ISms; - v_sub_s( bits_element, nb_bits_metadata, bits_CoreCoder, n_ISms ); - bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); - - mvs2s( nb_bits_metadata, nb_bits_metadata, n_ISms ); - } - - /* assign less CoreCoder bit-budget to inactive streams (at least one stream must be active) */ - if ( ism_metadata_flag_global ) - { - int16_t diff, n_higher, flag_higher[MAX_NUM_OBJECTS]; - - set_s( flag_higher, 1, MAX_NUM_OBJECTS ); - - diff = 0; - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( ism_imp[ch] == ISM_NO_META ) - { - diff += bits_CoreCoder[ch] - BITS_ISM_INACTIVE; - bits_CoreCoder[ch] = BITS_ISM_INACTIVE; - flag_higher[ch] = 0; - } - } - - n_higher = sum_s( flag_higher, n_ISms ); - - if ( diff > 0 && n_higher > 0 ) - { - tmp = diff / n_higher; - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( flag_higher[ch] ) - { - bits_CoreCoder[ch] += tmp; - } - } - - tmp = diff % n_higher; - ch = 0; - while ( flag_higher[ch] == 0 ) - { - ch++; - } - bits_CoreCoder[ch] += tmp; - } - - bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); - - diff = 0; - for ( ch = 0; ch < n_ISms; ch++ ) - { - int16_t limit; - - limit = MIN_BRATE_SWB_BWE / FRAMES_PER_SEC; - if ( element_brate[ch] < MIN_BRATE_SWB_STEREO ) /* replicate function set_bw() -> check the coded audio band-width */ - { - limit = MIN_BRATE_WB_BWE / FRAMES_PER_SEC; - } - else if ( element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) /* replicate function set_ACELP_flag() -> it is not intended to switch the ACELP internal sampling rate within an object */ - { - /*limit = SCE_CORE_16k_LOW_LIMIT;*/ - limit = ( ACELP_16k_LOW_LIMIT + SWB_TBE_1k6 ) / FRAMES_PER_SEC; - } - - if ( ism_imp[ch] == ISM_NO_META ) - { - tmp = BITS_ISM_INACTIVE; - } - else if ( ism_imp[ch] == ISM_LOW_IMP ) - { - tmp = (int16_t) ( BETA_ISM_LOW_IMP * bits_CoreCoder[ch] ); - tmp = max( limit, tmp ); - } - else if ( ism_imp[ch] == ISM_MEDIUM_IMP ) - { - tmp = (int16_t) ( BETA_ISM_MEDIUM_IMP * bits_CoreCoder[ch] ); - tmp = max( limit, tmp ); - } - else /* ism_imp[ch] == ISM_HIGH_IMP */ - { - tmp = bits_CoreCoder[ch]; - } - - diff += bits_CoreCoder[ch] - tmp; - bits_CoreCoder[ch] = tmp; - } - - if ( diff > 0 && n_higher > 0 ) - { - tmp = diff / n_higher; - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( flag_higher[ch] ) - { - bits_CoreCoder[ch] += tmp; - } - } - - tmp = diff % n_higher; - ch = 0; - while ( flag_higher[ch] == 0 ) - { - ch++; - } - bits_CoreCoder[ch] += tmp; - } - - /* verify for the maximum bitrate @12.8kHz core */ - diff = 0; - for ( ch = 0; ch < n_ISms; ch++ ) - { - limit_high = IVAS_512k / FRAMES_PER_SEC; - if ( element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) /* replicate function set_ACELP_flag() -> it is not intended to switch the ACELP internal sampling rate within an object */ - { - limit_high = ACELP_12k8_HIGH_LIMIT / FRAMES_PER_SEC; - } - - tmp = (int16_t) min( bits_CoreCoder[ch], limit_high ); - - diff += bits_CoreCoder[ch] - tmp; - bits_CoreCoder[ch] = tmp; - } - - /* limitation to avoid too high bitrate in one active TCX channel */ - if ( element_brate[0] >= SCE_CORE_16k_LOW_LIMIT && element_brate[0] <= IVAS_32k ) - { - diff = 0; - limit_high = MAX_BRATE_TCX_32k / FRAMES_PER_SEC; - - for ( ch = 0; ch < n_ISms; ch++ ) - { - tmp = (int16_t) min( bits_CoreCoder[ch], limit_high ); - - diff += bits_CoreCoder[ch] - tmp; - bits_CoreCoder[ch] = tmp; - } - } - - if ( diff > 0 ) - { - ch = 0; - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( flag_higher[ch] == 0 ) - { - if ( diff > limit_high ) - { - diff += bits_CoreCoder[ch] - limit_high; - bits_CoreCoder[ch] = limit_high; - } - else - { - bits_CoreCoder[ch] += diff; - - if ( combined_format_flag ) - { - diff = 0; - } - break; - } - } - } - } - - if ( combined_format_flag ) - { - if ( diff > 0 ) - { - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( ism_imp[ch] <= ISM_MEDIUM_IMP ) - { - if ( diff > limit_high ) - { - diff += bits_CoreCoder[ch] - limit_high; - bits_CoreCoder[ch] = limit_high; - } - else - { - bits_CoreCoder[ch] += diff; - break; - } - } - } - } - } - - bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); - } - - - return error; -} - -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ism_config_fx( const Word32 ism_total_brate, /* i : ISM total bitrate */ const Word16 nchan_transport, /* i : number of transport channels */ @@ -466,8 +153,8 @@ ivas_error ivas_ism_config_fx( { /* combined format: decision about bitrates per channel - variable during the session (at one ivas_total_brate) */ // bits_ism = (Word16) ( ism_total_brate / FRAMES_PER_SEC ); - bits_ism = (Word16) Mpy_32_32( 42949673, ism_total_brate ); // 42949673 is 1/FRAMES_PER_SEC in Q31 - tmp1 = BASOP_Util_Divide1616_Scale( bits_ism, n_ISms, &exp ); // Q15 - exp + bits_ism = extract_l( Mpy_32_32( 42949673, ism_total_brate ) ); // 42949673 is 1/FRAMES_PER_SEC in Q31 + tmp1 = BASOP_Util_Divide1616_Scale( bits_ism, n_ISms, &exp ); // Q15 - exp set16_fx( bits_element, shr( tmp1, sub( 15, exp ) ), n_ISms ); bits_element[n_ISms - 1] = add( bits_element[n_ISms - 1], bits_ism % n_ISms ); // Q0 move16(); @@ -480,8 +167,8 @@ ivas_error ivas_ism_config_fx( // bits_ism = (Word16) ( ism_total_brate / FRAMES_PER_SEC ); // 1 / 50 * 2 ^ 31 -- > 42949673, --> Q31, //(Q31 +Q0) - Q31 --> Q0 - bits_ism = (Word16) Mpy_32_32( 42949673, ism_total_brate ); // 42949673 is 1/FRAMES_PER_SEC in Q31 - tmp1 = BASOP_Util_Divide1616_Scale( bits_ism, n_ISms, &exp ); // Q15 - exp + bits_ism = extract_l( Mpy_32_32( 42949673, ism_total_brate ) ); // 42949673 is 1/FRAMES_PER_SEC in Q31 + tmp1 = BASOP_Util_Divide1616_Scale( bits_ism, n_ISms, &exp ); // Q15 - exp set16_fx( bits_element, shr( tmp1, sub( 15, exp ) ), n_ISms ); bits_element[n_ISms - 1] = add( bits_element[n_ISms - 1], bits_ism % n_ISms ); // Q0 move16(); @@ -533,12 +220,12 @@ ivas_error ivas_ism_config_fx( /* split metadata bitbudget equally between channels */ IF( nb_bits_metadata != NULL ) { - bits_side = sum_s( nb_bits_metadata, n_ISms ); + bits_side = sum16_fx( nb_bits_metadata, n_ISms ); tmp1 = BASOP_Util_Divide1616_Scale( bits_side, n_ISms, &exp ); // Q15 - exp set16_fx( nb_bits_metadata, shr( tmp1, sub( 15, exp ) ), n_ISms ); nb_bits_metadata[n_ISms - 1] = add( nb_bits_metadata[n_ISms - 1], bits_side % n_ISms ); // Q0 move16(); - v_sub_s( bits_element, nb_bits_metadata, bits_CoreCoder, n_ISms ); + v_sub_16( bits_element, nb_bits_metadata, bits_CoreCoder, n_ISms ); bitbudget_to_brate( bits_CoreCoder, total_brate, n_ISms ); Copy( nb_bits_metadata, nb_bits_metadata, n_ISms ); @@ -565,7 +252,7 @@ ivas_error ivas_ism_config_fx( } } - n_higher = sum_s( flag_higher, n_ISms ); + n_higher = sum16_fx( flag_higher, n_ISms ); test(); IF( diff > 0 && n_higher > 0 ) @@ -682,7 +369,7 @@ ivas_error ivas_ism_config_fx( move16(); } - tmp = (Word16) s_min( bits_CoreCoder[ch], limit_high ); + tmp = s_min( bits_CoreCoder[ch], limit_high ); diff = add( diff, sub( bits_CoreCoder[ch], tmp ) ); bits_CoreCoder[ch] = tmp; @@ -699,7 +386,7 @@ ivas_error ivas_ism_config_fx( move16(); FOR( ch = 0; ch < n_ISms; ch++ ) { - tmp = (Word16) s_min( bits_CoreCoder[ch], limit_high ); + tmp = s_min( bits_CoreCoder[ch], limit_high ); diff = add( diff, sub( bits_CoreCoder[ch], tmp ) ); bits_CoreCoder[ch] = tmp; @@ -767,7 +454,6 @@ ivas_error ivas_ism_config_fx( return error; } -#endif /*-------------------------------------------------------------------* * ivas_ism_reset_metadata() @@ -775,7 +461,6 @@ ivas_error ivas_ism_config_fx( * Reset ISM metadata parameters *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_reset_metadata( ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ ) @@ -821,46 +506,21 @@ void ivas_ism_reset_metadata_enc( return; } -void ivas_ism_reset_metadata_API( - ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ -) -{ - ivas_ism_reset_metadata_enc( hIsmMeta ); - return; -} - -#else -void ivas_ism_reset_metadata( - ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ -) -{ - hIsmMeta->azimuth = 0.0f; - hIsmMeta->elevation = 0.0f; - hIsmMeta->yaw = 0.0f; - hIsmMeta->pitch = 0.0f; - hIsmMeta->radius = 1.0f; - hIsmMeta->ism_metadata_flag = 0; - hIsmMeta->non_diegetic_flag = 0; - - return; -} +/*-------------------------------------------------------------------* + * ivas_ism_reset_metadata_API() + * + * Reset ISM metadata parameters + *-------------------------------------------------------------------*/ void ivas_ism_reset_metadata_API( ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handle */ ) { - ivas_ism_reset_metadata( hIsmMeta ); + ivas_ism_reset_metadata_enc( hIsmMeta ); return; } -#endif - -/*-------------------------------------------------------------------* - * ivas_ism_reset_metadata_API() - * - * Reset ISM metadata parameters - *-------------------------------------------------------------------*/ /*-------------------------------------------------------------------* @@ -870,7 +530,6 @@ void ivas_ism_reset_metadata_API( *-------------------------------------------------------------------*/ /*! r: index of the winning codeword */ -#ifdef IVAS_FLOAT_FIXED Word16 ism_quant_meta_fx( const Word32 val, /* i : scalar value to quantize Q22 */ Word32 *valQ, /* o : quantized value Q22 */ @@ -925,44 +584,6 @@ Word16 ism_quant_meta_fx( return idx; } -#endif - -int16_t ism_quant_meta( - const float val, /* i : scalar value to quantize */ - float *valQ, /* o : quantized value */ - const float borders[], /* i : level borders */ - const float q_step, /* i : quantization step */ - const float q_step_border, /* i : quantization step at the border */ - const int16_t cbsize /* i : codebook size */ -) -{ - int16_t idx, idx_start; - float qlow, step; - - if ( val <= borders[1] ) - { - qlow = borders[0]; - idx_start = 0; - step = q_step_border; - } - else if ( val <= borders[2] ) - { - qlow = borders[1]; - idx_start = (int16_t) ( ( borders[1] - borders[0] ) / q_step_border ); - step = q_step; - } - else - { - qlow = borders[2]; - idx_start = (int16_t) ( cbsize - 1 - ( borders[3] - borders[2] ) / q_step_border ); - step = q_step_border; - } - - idx = idx_start + (int16_t) max( 0.f, min( cbsize - 1, ( ( val - qlow ) / step + 0.5f ) ) ); - *valQ = ( idx - idx_start ) * step + qlow; - - return idx; -} /*-------------------------------------------------------------------* @@ -972,7 +593,6 @@ int16_t ism_quant_meta( *-------------------------------------------------------------------*/ /*! r: dequantized value */ -#ifdef IVAS_FLOAT_FIXED Word32 ism_dequant_meta_fx( /* o : Q22*/ const Word16 idx, /* i : quantizer index */ const Word32 borders_fx[], /* i : level borders Q22*/ @@ -1026,42 +646,6 @@ Word32 ism_dequant_meta_fx( /* o : Q22*/ return valQ_fx; } -#endif - -float ism_dequant_meta( - const int16_t idx, /* i : quantizer index */ - const float borders[], /* i : level borders */ - const float q_step, /* i : quantization step */ - const float q_step_border, /* i : quantization step at the border */ - const int16_t cbsize /* i : codebook size */ -) -{ - int16_t idx_start; - float qlow, step, valQ; - - if ( idx <= ( borders[1] - borders[0] ) / q_step_border ) - { - qlow = borders[0]; - idx_start = 0; - step = q_step_border; - } - else if ( idx <= cbsize - 1 - ( borders[3] - borders[2] ) / q_step_border ) - { - qlow = borders[1]; - idx_start = (int16_t) ( ( borders[1] - borders[0] ) / q_step_border ); - step = q_step; - } - else - { - qlow = borders[2]; - idx_start = (int16_t) ( cbsize - 1 - ( borders[3] - borders[2] ) / q_step_border ); - step = q_step_border; - } - - valQ = ( idx - idx_start ) * step + qlow; - - return valQ; -} /*--------------------------------------------------------------- @@ -1070,36 +654,6 @@ float ism_dequant_meta( * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_config( - PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i/o: IVAS Param ISM Config Structure */ - const int16_t nchan_obj /* i : number of ISM channels */ -) -{ - int16_t i; - - hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; - - for ( i = 0; i < hParamIsm->nbands; i++ ) - { - hParamIsm->nblocks[i] = MAX_PARAM_ISM_NBLOCKS; - } - - /* for elevation zero compute the max azi quantization indices */ - for ( i = 0; i < nchan_obj; i++ ) - { - hParamIsm->last_az_diff[i] = 0; - hParamIsm->last_az_sgn[i] = 1; - hParamIsm->last_el_diff[i] = 0; - hParamIsm->last_el_sgn[i] = 1; - } - - hParamIsm->last_dmx_gain = 1.0f; - set_f( hParamIsm->last_cardioid_left, 1.0f, MAX_NUM_OBJECTS ); - - return; -} -#else void ivas_param_ism_config_fx( PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i/o: IVAS Param ISM Config Structure */ const Word16 nchan_obj /* i : number of ISM channels */ @@ -1137,7 +691,6 @@ void ivas_param_ism_config_fx( return; } -#endif /*--------------------------------------------------------------- * ivas_ism_mode_select() @@ -1146,7 +699,6 @@ void ivas_param_ism_config_fx( * ---------------------------------------------------------------*/ /*! r : ISM format mode */ -#ifdef IVAS_FLOAT_FIXED ISM_MODE ivas_ism_mode_select( const Word16 nchan_inp, /* i : number of input objects */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ @@ -1169,27 +721,6 @@ ISM_MODE ivas_ism_mode_select( return ism_mode; } -#else -ISM_MODE ivas_ism_mode_select( - const int16_t nchan_inp, /* i : number of input objects */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - ISM_MODE ism_mode = ISM_MODE_NONE; - - if ( nchan_inp > 2 && ivas_total_brate <= ACELP_32k ) - { - ism_mode = ISM_MODE_PARAM; - } - else - { - ism_mode = ISM_MODE_DISC; - } - - return ism_mode; -} - -#endif /*--------------------------------------------------------------- * ivas_ism_metadata_close() @@ -1197,7 +728,6 @@ ISM_MODE ivas_ism_mode_select( * Deallocate ISM metadata handles * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_metadata_close( ISM_METADATA_HANDLE hIsmMetaData[], /* i/o: object metadata handles */ const Word16 first_idx /* i : index of first handle to deallocate */ @@ -1222,31 +752,6 @@ void ivas_ism_metadata_close( return; } -#else -void ivas_ism_metadata_close( - ISM_METADATA_HANDLE hIsmMetaData[], /* i/o: object metadata handles */ - const int16_t first_idx /* i : index of first handle to deallocate */ -) -{ - int16_t n; - - if ( hIsmMetaData == NULL || *hIsmMetaData == NULL ) - { - return; - } - - for ( n = first_idx; n < MAX_NUM_OBJECTS; n++ ) - { - if ( hIsmMetaData[n] != NULL ) - { - free( hIsmMetaData[n] ); - hIsmMetaData[n] = NULL; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -1254,31 +759,6 @@ void ivas_ism_metadata_close( * * Store last metadata values *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void update_last_metadata( - const int16_t nchan_ism, /* i : number of objects */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int16_t updt_flag[] /* i : last metadata update flag */ -) -{ - int16_t ch; - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - if ( updt_flag[ch] == 1 ) - { -#ifdef IVAS_FLOAT_FIXED - hIsmMeta[ch]->last_azimuth_fx = hIsmMeta[ch]->azimuth_fx; - hIsmMeta[ch]->last_elevation_fx = hIsmMeta[ch]->elevation_fx; -#endif - hIsmMeta[ch]->last_azimuth = hIsmMeta[ch]->azimuth; - hIsmMeta[ch]->last_elevation = hIsmMeta[ch]->elevation; - } - } - - return; -} -#else void update_last_metadata_fx( const Word16 nchan_ism, /* i : number of objects */ ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ @@ -1300,14 +780,12 @@ void update_last_metadata_fx( return; } -#endif /*----------------------------------------------------------------* * ivas_get_ism_sid_quan_bitbudget() * * Set quantization bits based on the number of coded objects *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_get_ism_sid_quan_bitbudget_fx( const Word16 nchan_ism, /* i : number of objects */ Word16 *nBits_azimuth, /* o : number of Q bits for azimuth */ @@ -1349,33 +827,3 @@ void ivas_get_ism_sid_quan_bitbudget_fx( return; } -#endif - -void ivas_get_ism_sid_quan_bitbudget( - const int16_t nchan_ism, /* i : number of objects */ - int16_t *nBits_azimuth, /* o : number of Q bits for azimuth */ - int16_t *nBits_elevation, /* o : number of Q bits for elevation */ - float *q_step, /* o : quantization step */ - float *q_step_border, /* o : quantization step at the border */ - int16_t *nBits_coh, /* o : number of Q bits for coherence */ - int16_t *nBits_sce_id /* o : number of Q bits for sce_id_dtx */ -) -{ - *nBits_azimuth = ISM_DTX_AZI_BITS_HIGH; - *nBits_elevation = ISM_DTX_ELE_BITS_HIGH; - *q_step = ISM_Q_STEP_HIGH; - *q_step_border = ISM_Q_STEP_BORDER_HIGH; - *nBits_coh = ISM_DTX_COH_SCA_BITS; - *nBits_sce_id = 1; - - if ( nchan_ism >= 3 ) - { - *nBits_azimuth = ISM_DTX_AZI_BITS_LOW; - *nBits_elevation = ISM_DTX_ELE_BITS_LOW; - *q_step = ISM_Q_STEP_LOW; - *q_step_border = ISM_Q_STEP_BORDER_LOW; - *nBits_sce_id = 2; - } - - return; -} diff --git a/lib_com/ivas_lfe_com.c b/lib_com/ivas_lfe_com.c index 7f68dda86..56f14a18b 100644 --- a/lib_com/ivas_lfe_com.c +++ b/lib_com/ivas_lfe_com.c @@ -41,12 +41,8 @@ #include "cnst.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------------------------* @@ -54,55 +50,6 @@ * * Selects LFE filter coeff based on config. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_lfe_lpf_select_filt_coeff( - const int32_t sampling_rate, /* i : sampling rate */ - const int16_t order, /* i : filter order */ - const float **ppFilt_coeff /* o : filter coefficients */ -) -{ - switch ( order ) - { - case IVAS_FILTER_ORDER_2: - switch ( sampling_rate ) - { - case 16000: - *ppFilt_coeff = ivas_lpf_2_butter_16k; - break; - case 32000: - *ppFilt_coeff = ivas_lpf_2_butter_32k; - break; - case 48000: - *ppFilt_coeff = ivas_lpf_2_butter_48k; - break; - default: - break; - } - break; - case IVAS_FILTER_ORDER_4: - switch ( sampling_rate ) - { - case 16000: - *ppFilt_coeff = ivas_lpf_4_butter_16k_sos; - break; - case 32000: - *ppFilt_coeff = ivas_lpf_4_butter_32k_sos; - break; - case 48000: - *ppFilt_coeff = ivas_lpf_4_butter_48k_sos; - break; - default: - break; - } - break; - default: - assert( !"Unsupported LFE Filter order" ); - } - - return; -} - -#else void ivas_lfe_lpf_select_filt_coeff_fx( const Word32 sampling_rate, /* i : sampling rate */ const Word16 order, /* i : filter order */ @@ -153,7 +100,6 @@ void ivas_lfe_lpf_select_filt_coeff_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -162,7 +108,6 @@ void ivas_lfe_lpf_select_filt_coeff_fx( * Initialize LFE window *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_window_init_fx( LFE_WINDOW_HANDLE hLFEWindow, /* i/o: LFE window handle */ const Word32 sampling_rate, /* i : sampling rate */ @@ -206,39 +151,3 @@ void ivas_lfe_window_init_fx( return; } -#else -void ivas_lfe_window_init( - LFE_WINDOW_HANDLE hLFEWindow, /* i/o: LFE window handle */ - const int32_t sampling_rate, /* i : sampling rate */ - const int16_t frame_len /* i : frame length in samples */ -) -{ - /* Set window coefficients */ - if ( sampling_rate == 48000 ) - { - hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_48k; - } - else if ( sampling_rate == 32000 ) - { - hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_32k; - } - else if ( sampling_rate == 16000 ) - { - hLFEWindow->pWindow_coeffs = ivas_lfe_window_coeff_16k; - } - else - { - assert( !"8kHz LFE Window not supported" ); - } - - /* 10ms stride, MDCT will be done in two iterations */ - hLFEWindow->dct_len = frame_len >> 1; - - /* 8ms of latency */ - hLFEWindow->fade_len = NS2SA( sampling_rate, IVAS_LFE_FADE_NS ); - hLFEWindow->zero_pad_len = (int16_t) ( IVAS_ZERO_PAD_LEN_MULT_FAC * ( hLFEWindow->dct_len - hLFEWindow->fade_len ) ); - hLFEWindow->full_len = hLFEWindow->zero_pad_len + hLFEWindow->fade_len + hLFEWindow->dct_len; - - return; -} -#endif diff --git a/lib_com/ivas_masa_com.c b/lib_com/ivas_masa_com.c index fc19d2dc1..1ff433344 100644 --- a/lib_com/ivas_masa_com.c +++ b/lib_com/ivas_masa_com.c @@ -58,11 +58,6 @@ * Local prototypes *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t quantize_theta_masa( float x, const int16_t no_cb, float *xhat ); - -static int16_t quantize_phi_masa( float phi, const int16_t flag_delta, float *phi_hat, const int16_t n ); -#else static Word16 quantize_theta_masa_fx( const Word32 x_fx, /* i : theta value to be quantized Q22*/ const Word16 no_cb, /* i : number of codewords */ @@ -327,7 +322,6 @@ static Word32 estim_ceil[MASA_NO_CIRCLES + 1] = { 32543, 32552 }; -#endif /*--------------------------------------------------------------- @@ -336,97 +330,6 @@ static Word32 estim_ceil[MASA_NO_CIRCLES + 1] = { * Set-up MASA coding elements and bitrates *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_set_elements( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t mc_mode, /* i : MC format mode */ - const int16_t nchan_transport, /* i : number of MASA input/transport channels */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - int16_t *element_mode, /* o : element mode */ - int16_t *nSCE, /* o : number of SCEs */ - int16_t *nCPE, /* o : number of CPEs */ - const int16_t ivas_format, /* i : IVAS format */ - const ISM_MODE ism_mode, /* i : ISM mode */ - const int32_t ism_total_brate /* i : initial ISM total bitrate */ -) -{ - if ( nchan_transport == 2 ) - { - if ( ivas_total_brate >= MCMASA_SEPARATE_BRATE && mc_mode == MC_MODE_MCMASA ) - { - *nCPE = 1; - *nSCE = 1; - - *element_mode = IVAS_SCE; /* This is needed for the initialization phase to initialize codec mode to SCE, since it is written first to the file*/ - } - else if ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE ) - { - *nCPE = 1; - - if ( *element_mode == -1 ) - { - *element_mode = IVAS_CPE_DFT; /* To have it initialized in case it was not already. */ - } - if ( ivas_total_brate > MIN_BRATE_MDCT_STEREO ) - { - *element_mode = IVAS_CPE_MDCT; - if ( ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) && ( ivas_total_brate - ism_total_brate < MIN_BRATE_MDCT_STEREO ) ) - { - *element_mode = IVAS_CPE_DFT; - } - } - } - else - { - *nCPE = 1; - *nSCE = 0; - - if ( ivas_total_brate > MIN_BRATE_MDCT_STEREO ) - { - *element_mode = IVAS_CPE_MDCT; - } - } - hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); - if ( ivas_format == MASA_ISM_FORMAT && ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_DISC ) ) - { - hQMetaData->bits_frame_nominal -= (int16_t) ( ism_total_brate / FRAMES_PER_SEC ); - } - } - else if ( nchan_transport == 1 ) - { - *nCPE = 0; - *nSCE = 1; - - if ( ivas_total_brate == IVAS_13k2 ) - { - hQMetaData->bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; - } - else if ( ivas_total_brate <= IVAS_16k4 ) - { - hQMetaData->bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; - } - else if ( ivas_total_brate <= IVAS_24k4 ) - { - hQMetaData->bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; - } - else if ( ivas_total_brate <= IVAS_32k ) - { - hQMetaData->bits_frame_nominal = ACELP_24k40 / FRAMES_PER_SEC; - } - else - { - hQMetaData->bits_frame_nominal = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ); - } - *element_mode = IVAS_SCE; - } - else - { - assert( !"MASA number of transport channels must be 1, or 2" ); - } - - return; -} -#else void ivas_masa_set_elements_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 mc_mode, /* i : MC format mode */ @@ -546,7 +449,6 @@ void ivas_masa_set_elements_fx( return; } -#endif /*--------------------------------------------------------------- @@ -555,41 +457,6 @@ void ivas_masa_set_elements_fx( * generate Spherical grid *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void generate_gridEq( - SPHERICAL_GRID_DATA *data /* o : data structure for grid */ -) -{ - int32_t cum_n, cum_n_prev; - float theta; - int16_t i; - int16_t *n; - - n = data->no_phi; - n[0] = MASA_NO_POINTS_EQUATOR; - - cum_n_prev = 0; - - for ( i = 1; i < MASA_NO_CIRCLES; i++ ) - { - theta = MASA_ANGLE_AT_EQUATOR * (float) ( i + 0.5f ); - if ( i == 1 ) - { - cum_n = 2 * (int32_t) ceilf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); - } - else - { - cum_n = 2 * (int32_t) roundf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); - } - n[i] = (int16_t) ( ( cum_n - cum_n_prev ) >> 1 ); - cum_n_prev = cum_n; - } - n[i] = 1; - data->no_theta = i + 1; - - return; -} -#else void generate_gridEq_fx( SPHERICAL_GRID_DATA *data /* o : data structure for grid */ ) @@ -611,7 +478,6 @@ void generate_gridEq_fx( return; } -#endif /*--------------------------------------------------------------- @@ -621,137 +487,6 @@ void generate_gridEq_fx( * and other metadata properties. *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_set_coding_config( - MASA_CODEC_CONFIG *config, /* i/o: MASA coding config structure */ - int16_t *band_mapping, /* o : Band mapping used */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nchan_transport, /* i : number of transport channels (mono/stereo) */ - const uint8_t isMcMasa /* i : toggle for selecting mcMASA specific config */ -) -{ - int16_t i; - uint8_t nbands; - uint8_t nTwoDirBands; - const int16_t *masa_bits_table; - - /* When coming into this function, these values should be already set: - * joinedSubframes; - * useCoherence; - * numberOfDirections; - */ - - /* Setup coding parameters based on the bitrate, transport channel count, subframe metadata information, - * and number of directions in metadata. */ - nbands = 0; - nTwoDirBands = 0; - i = 0; - - /* First select correct bit budget table */ - masa_bits_table = masa_bits; - if ( isMcMasa ) - { - masa_bits_table = mcmasa_bits; - } - else if ( ivas_total_brate < IVAS_48k && nchan_transport == 2 ) - { - masa_bits_table = masa_bits_LR_stereo; - } - - while ( nbands == 0 && i < IVAS_NUM_ACTIVE_BRATES ) - { - if ( ivas_total_brate <= ivas_brate_tbl[i + SIZE_IVAS_BRATE_TBL - IVAS_NUM_ACTIVE_BRATES] ) - { - int16_t idx_bands; - if ( ivas_total_brate < IVAS_48k && nchan_transport == 2 && i > 3 ) - { - /* because it uses the bitallocation for the lower bit rates from 'masa_bits_LR_stereo' and it has 4 elements */ - i = 3; - } - idx_bands = i; - - if ( config->numberOfDirections > 1 ) - { - nTwoDirBands = config->joinedSubframes ? masa_twodir_bands_joined[i] : masa_twodir_bands[i]; - - if ( ( ivas_total_brate > IVAS_96k && !config->joinedSubframes ) || ( ivas_total_brate > IVAS_80k && config->joinedSubframes ) ) - { - idx_bands--; - } - } - - if ( config->joinedSubframes ) - { - nbands = masa_joined_nbands[idx_bands]; - } - else - { - nbands = masa_nbands[idx_bands]; - } - - config->max_metadata_bits = masa_bits_table[i]; - - if ( ivas_total_brate == IVAS_64k && config->numberOfDirections > 1 ) - { - /* At 64k, we increase metadata bit budget when there is two directions present. */ - config->max_metadata_bits += MASA_EXTRA_BAND_META_BITS; - } - - if ( ( ( ivas_total_brate == IVAS_32k && nchan_transport == 2 ) || ivas_total_brate == IVAS_48k ) && config->joinedSubframes ) - { - /* At 32k and 48k, we increase metadata bit budget when joinedSubframes. */ - config->max_metadata_bits += ( MASA_SMALL_INC_META_BITS ); - } - } - i++; - } - config->numCodingBands = nbands; - config->numTwoDirBands = nTwoDirBands; - - if ( config->joinedSubframes == TRUE ) - { - config->mergeRatiosOverSubframes = FALSE; - } - else - { - config->mergeRatiosOverSubframes = TRUE; - } - - /* Setup frequency band mapping based on the number of used coding bands */ - switch ( config->numCodingBands ) - { - case 5: - mvs2s( MASA_band_mapping_24_to_5, band_mapping, 5 + 1 ); - break; - case 8: - mvs2s( MASA_band_mapping_24_to_8, band_mapping, 8 + 1 ); - break; - case 12: - mvs2s( MASA_band_mapping_24_to_12, band_mapping, 12 + 1 ); - break; - case 18: - mvs2s( MASA_band_mapping_24_to_18, band_mapping, 18 + 1 ); - break; - case MASA_FREQUENCY_BANDS: - /* With input count of bands, no mapping is needed but for unified processing later, we store normal mapping */ - for ( i = 0; i < MASA_FREQUENCY_BANDS + 1; i++ ) - { - band_mapping[i] = i; - } - break; - default: - assert( 0 && "Error: The number of MASA coding bands is not supported" ); - } - - config->useCoherence = TRUE; - if ( ( !isMcMasa && ivas_total_brate < IVAS_48k ) || ( isMcMasa && ivas_total_brate < IVAS_16k4 ) ) - { - config->useCoherence = FALSE; - } - - return; -} -#else void ivas_masa_set_coding_config_fx( MASA_CODEC_CONFIG *config, /* i/o: MASA coding config structure */ Word16 *band_mapping, /* o : Band mapping used */ @@ -923,7 +658,6 @@ void ivas_masa_set_coding_config_fx( return; } -#endif /*--------------------------------------------------------------- @@ -932,111 +666,6 @@ void ivas_masa_set_coding_config_fx( * *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void masa_sample_rate_band_correction( - MASA_CODEC_CONFIG *config, /* i/o: MASA codec config */ - int16_t *band_mapping, /* i/o: Band mapping used and modified */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: QMetadata structure for modification */ - const uint8_t maxBand, /* i : max band */ - uint8_t is_encoder, /* i : signals if called at encoder */ - MASA_DECODER_EXT_OUT_META_HANDLE hExtOutMeta /* i/o: MASA decoder metadata ext out buffer */ -) -{ - uint8_t band, sf; - int16_t highBand; - uint8_t numBands48k; - - numBands48k = config->numCodingBands; - - for ( band = 1; band < config->numCodingBands + 1; band++ ) - { - highBand = band_mapping[band]; - - if ( highBand >= maxBand ) - { - config->numCodingBands = band; - hQMetaData->numCodingBands = band; - - if ( is_encoder ) - { - if ( hQMetaData->q_direction->cfg.nbands > band ) - { - hQMetaData->q_direction->cfg.nbands = band; - } - if ( hQMetaData->no_directions == 2 && hQMetaData->q_direction[1].cfg.nbands > band ) - { - hQMetaData->q_direction[1].cfg.nbands = band; - } - } - - band_mapping[band] = maxBand; - - break; - } - } - - /* Set rest of the bands to zero in qmetadata. */ - for ( ; band < numBands48k; band++ ) - { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - hQMetaData->q_direction[0].band_data[band].azimuth[sf] = 0.0f; - hQMetaData->q_direction[0].band_data[band].elevation[sf] = 0.0f; - hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = 0.0f; - - if ( hQMetaData->coherence_flag && hQMetaData->q_direction[0].coherence_band_data != NULL ) - { - hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = 0u; - } - - if ( hQMetaData->no_directions == 2 ) - { - hQMetaData->q_direction[1].band_data[band].azimuth[sf] = 0.0f; - hQMetaData->q_direction[1].band_data[band].elevation[sf] = 0.0f; - hQMetaData->q_direction[1].band_data[band].energy_ratio[sf] = 0.0f; - - if ( hQMetaData->coherence_flag && hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = 0u; - } - } - - if ( hQMetaData->coherence_flag && hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[band].surround_coherence[sf] = 0u; - } - } - - if ( hQMetaData->no_directions == 2 ) - { - hQMetaData->twoDirBands[band] = 0; - } - } - - if ( hExtOutMeta != NULL ) - { - /* in decoder, zero the EXT out MASA meta buffer */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = hQMetaData->numCodingBands; band < MASA_FREQUENCY_BANDS; band++ ) - { - hExtOutMeta->directionIndex[0][sf][band] = SPH_IDX_FRONT; - hExtOutMeta->directToTotalRatio[0][sf][band] = 0u; - hExtOutMeta->spreadCoherence[0][sf][band] = 0u; - - hExtOutMeta->directionIndex[1][sf][band] = SPH_IDX_FRONT; - hExtOutMeta->directToTotalRatio[1][sf][band] = 0u; - hExtOutMeta->spreadCoherence[1][sf][band] = 0u; - - hExtOutMeta->surroundCoherence[sf][band] = 0u; - hExtOutMeta->diffuseToTotalRatio[sf][band] = UINT8_MAX; - } - } - } - - return; -} -#else void masa_sample_rate_band_correction_fx( MASA_CODEC_CONFIG *config, /* i/o: MASA codec config */ Word16 *band_mapping, /* i/o: Band mapping used and modified */ @@ -1169,7 +798,6 @@ void masa_sample_rate_band_correction_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -1179,97 +807,6 @@ void masa_sample_rate_band_correction_fx( *------------------------------------------------------------------------*/ /*! r: output index for direction */ -#ifndef IVAS_FLOAT_FIXED -uint16_t index_theta_phi_16( - float *p_theta, /* i/o: input elevation to be indexed */ - float *p_phi, /* i/o: input azimuth to be indexed */ - const SPHERICAL_GRID_DATA *gridData /* i : generated grid data */ -) -{ - float abs_theta; - int16_t sign_th, id_phi, id_th; - uint16_t idx_sph; - uint16_t cum_n; - float theta_hat, phi_hat; - float theta, phi; - - theta = *p_theta; - phi = *p_phi; - phi_hat = 0; - theta_hat = 0; - phi = phi + 180; - - if ( theta < 0 ) - { - abs_theta = -theta; - sign_th = -1; - } - else - { - abs_theta = theta; - sign_th = 1; - } - - id_th = quantize_theta_masa( abs_theta, gridData->no_theta, &theta_hat ); - if ( gridData->no_theta > 1 ) - { - if ( gridData->no_phi[id_th] > 1 ) - { - id_phi = quantize_phi_masa( phi, ( id_th % 2 == 1 ), &phi_hat, gridData->no_phi[id_th] ); - } - else - { - id_phi = 0; - phi_hat = 180; - } - } - else - { - id_phi = quantize_phi_masa( phi, ( id_th % 2 == 1 ), &phi_hat, gridData->no_phi[id_th] ); - } - *p_theta = sign_th * theta_hat; - *p_phi = phi_hat - 180; - - /* Starting from Equator, alternating positive and negative */ - if ( id_th == 0 ) - { - idx_sph = id_phi; - } - else - { - if ( id_th == gridData->no_theta - 1 ) - { - idx_sph = 65534 + ( sign_th < 0 ); - } - else - { - theta = MASA_ANGLE_AT_EQUATOR * (float) ( id_th + 0.5f ); - if ( id_th == 1 ) - { - cum_n = 2 * (uint16_t) ceilf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); - } - else - { - cum_n = 2 * (uint16_t) roundf( MASA_NTOT2_FAC * ( sinf( theta ) - MASA_ASIN_OFFSET ) ); - } - - cum_n += gridData->no_phi[0]; - - if ( sign_th > 0 ) - { - cum_n -= 2 * gridData->no_phi[id_th]; - } - else - { - cum_n -= gridData->no_phi[id_th]; - } - idx_sph = cum_n + id_phi; - } - } - - return idx_sph; -} -#else UWord16 index_theta_phi_16_fx( Word32 *p_theta, /* i/o: input elevation to be indexed Q22 */ Word32 *p_phi, /* i/o: input azimuth to be indexed Q22 */ @@ -1375,7 +912,6 @@ UWord16 index_theta_phi_16_fx( return idx_sph; // Q0 } -#endif /*------------------------------------------------------------------------- @@ -1385,41 +921,6 @@ UWord16 index_theta_phi_16_fx( *------------------------------------------------------------------------*/ /*! r: output index */ -#ifndef IVAS_FLOAT_FIXED -static int16_t quantize_theta_masa( - float x, /* i : theta value to be quantized */ - const int16_t no_cb, /* i : number of codewords */ - float *xhat /* o : quantized value */ -) -{ - int16_t imin; - float diff1, diff2; - - imin = (int16_t) ( x * MASA_INV_ANGLE_AT_EQUATOR_DEG + 0.5f ); - - if ( imin >= no_cb - 1 ) - { - imin = no_cb - 1; - diff1 = x - 90; - diff2 = x - MASA_ANGLE_AT_EQUATOR_DEG * ( imin - 1 ); - if ( fabsf( diff1 ) > fabsf( diff2 ) ) - { - imin--; - *xhat = imin * MASA_ANGLE_AT_EQUATOR_DEG; - } - else - { - *xhat = 90; - } - } - else - { - *xhat = imin * MASA_ANGLE_AT_EQUATOR_DEG; - } - - return imin; -} -#else static Word16 quantize_theta_masa_fx( const Word32 x_fx, /* i : theta value to be quantized Q22*/ const Word16 no_cb, /* i : number of codewords */ @@ -1456,7 +957,6 @@ static Word16 quantize_theta_masa_fx( return imin; } -#endif /*------------------------------------------------------------------------- @@ -1466,53 +966,6 @@ static Word16 quantize_theta_masa_fx( *------------------------------------------------------------------------*/ /*! r: index azimuth */ -#ifndef IVAS_FLOAT_FIXED -static int16_t quantize_phi_masa( - float phi, /* i : azimuth value */ - const Word16 flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ - float *phi_hat, /* o : quantized azimuth */ - const Word16 n /* i : azimuth codebook size */ -) -{ - int16_t id_phi; - float dd; - float delta_phi; - - delta_phi = 360.0f / (float) n; - - if ( n == 1 ) - { - *phi_hat = 0; - - return 0; - } - - if ( flag_delta == 1 ) - { - dd = delta_phi / 2.0f; - } - else - { - dd = 0; - } - - id_phi = (int16_t) ( ( phi - dd + delta_phi / 2.0f ) / (float) delta_phi ); - - if ( id_phi == n ) - { - id_phi = 0; - } - - if ( id_phi == -1 ) - { - id_phi = n - 1; - } - - *phi_hat = id_phi * delta_phi + dd; - - return id_phi; -} -#else static Word16 quantize_phi_masa_fx( const Word32 phi_fx, /* i : azimuth value Q22 */ const Word16 flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ @@ -1568,7 +1021,6 @@ static Word16 quantize_phi_masa_fx( return id_phi; // Q0 } -#endif /*------------------------------------------------------------------------- @@ -1577,151 +1029,6 @@ static Word16 quantize_phi_masa_fx( * deindex the MASA metadata from the input metadata file *------------------------------------------------------------------------*/ -void deindex_sph_idx( - const uint16_t sphIndex, /* i : Spherical index */ - const SPHERICAL_GRID_DATA *gridData, /* i : Prepared spherical grid */ - float *theta, /* o : Elevation */ - float *phi /* o : Azimuth */ -) -{ - float ba_crt, del_crt, div_crt, a4_crt; - float estim; - int32_t base_low, base_up; - int16_t n_crt; - int16_t id_th; - int16_t sign_theta; - int16_t id_phi; - int16_t no_th = gridData->no_theta; - const int16_t *n = gridData->no_phi; - const float ba[3] = { 2.137991118026424e+02f, 1.244854404591542e+02f, 1.228408647140870e+02f }; - const float del[3] = { 7.998262115303199e+05f, 1.300883976959332e+06f, 1.424072242426373e+06f }; - const float div[3] = { -0.237662341081474f, -0.100938185496887f, -0.092050209205032f }; - const float a4[3] = { -8.415300425381099f, -19.814106922515204f, -21.727272727270197f }; - const uint16_t limit_index1 = 64964, limit_index2 = 47870; - - if ( sphIndex >= limit_index1 ) - { - ba_crt = ba[2]; - div_crt = div[2]; - a4_crt = a4[2]; - del_crt = del[2]; - } - else if ( sphIndex >= limit_index2 ) - { - ba_crt = ba[1]; - div_crt = div[1]; - a4_crt = a4[1]; - del_crt = del[1]; - } - else - { - ba_crt = ba[0]; - div_crt = div[0]; - a4_crt = a4[0]; - del_crt = del[0]; - } - estim = ba_crt + div_crt * sqrtf( del_crt + a4_crt * sphIndex ); - - if ( estim > MASA_NO_CIRCLES ) - { - estim = MASA_NO_CIRCLES; - } - - assert( estim > 0 ); - id_th = (int16_t) roundf( estim ) - 1; - if ( id_th < 0 ) - { - id_th = 0; - } - - if ( id_th == 0 ) - { - base_low = 0; - base_up = n[0]; - } - else - { - estim = MASA_ANGLE_AT_EQUATOR * (float) ( id_th - 0.5f ); - base_low = n[0]; - if ( id_th >= 2 ) - { - if ( id_th == 2 ) - { - base_low += 2 * (int16_t) ceilf( MASA_NTOT2_FAC * ( sinf( estim ) - MASA_ASIN_OFFSET ) ); - } - else - { - base_low += 2 * (int16_t) roundf( MASA_NTOT2_FAC * ( sinf( estim ) - MASA_ASIN_OFFSET ) ); - } - } - base_up = base_low + 2 * n[id_th]; - } - - sign_theta = 1; - - n_crt = n[id_th]; - if ( sphIndex < base_low ) - { - id_th--; - n_crt = n[id_th]; - if ( id_th == 0 ) - { - base_low = 0; - base_up = n_crt; - } - else - { - base_up = base_low; - base_low -= 2 * n[id_th]; - } - assert( sphIndex >= base_low ); - } - else if ( sphIndex >= base_up ) - { - id_th++; - n_crt = n[id_th]; - base_low = base_up; - base_up += 2 * n_crt; - assert( sphIndex < base_up ); - } - - id_phi = (int16_t) ( sphIndex - base_low ); - if ( sphIndex - base_low >= n_crt ) - { - id_phi -= n_crt; - sign_theta = -1; - } - - if ( id_th == 0 ) - { - *theta = 0.f; - *phi = (float) sphIndex * 360 / (float) n_crt - 180; - } - else - { - if ( id_th == no_th - 1 ) - { - id_phi = 0; - *phi = -180; - *theta = 90 * (float) sign_theta; - } - else - { - *theta = id_th * MASA_ANGLE_AT_EQUATOR_DEG * (float) sign_theta; - if ( id_th % 2 == 0 ) - { - *phi = (float) id_phi * 360 / (float) n_crt - 180; - } - else - { - *phi = ( (float) id_phi + 0.5f ) * 360 / (float) n_crt - 180; - } - } - } - - return; -} -#ifdef IVAS_FLOAT_FIXED void deindex_sph_idx_fx( const UWord16 sphIndex, /* i : Spherical index */ const SPHERICAL_GRID_DATA *gridData, /* i : Prepared spherical grid */ @@ -1936,7 +1243,6 @@ void deindex_sph_idx_fx( } return; } -#endif /*--------------------------------------------------------------- * valid_ratio_index() * @@ -1945,44 +1251,6 @@ void deindex_sph_idx_fx( *---------------------------------------------------------------*/ /*! r: valid or not 1/0 */ -#ifndef IVAS_FLOAT_FIXED -int16_t valid_ratio_index( - int16_t index, /* i : index to be checked */ - const int16_t K, /* i : L1 norm to check against */ - const int16_t len /* i : vector length */ -) -{ - int16_t out; - int16_t i, sum, elem; - int16_t base[4]; - - sum = 0; - set_s( base, 1, len ); - - - for ( i = 1; i < len; i++ ) - { - base[i] = base[i - 1] * 10; - } - sum = 0; - for ( i = len - 1; i >= 0; i-- ) - { - elem = index / base[i]; - sum += elem; - index -= elem * base[i]; - } - if ( sum <= K ) - { - out = 1; - } - else - { - out = 0; - } - - return out; -} -#else Word16 valid_ratio_index_fx( Word16 index, /* i : index to be checked */ const Word16 K, /* i : L1 norm to check against */ @@ -2031,7 +1299,6 @@ Word16 valid_ratio_index_fx( return out; } -#endif /*--------------------------------------------------------------- @@ -2040,34 +1307,6 @@ Word16 valid_ratio_index_fx( * Obtains ISM ratio values from the quantized indexes *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void reconstruct_ism_ratios( - int16_t *ratio_ism_idx, /* i : index vector */ - const int16_t nchan_ism, /* i : number of components/objects */ - const float step, /* i : quantization step */ - float *q_energy_ratio_ism /* o : reconstructed ISM values */ -) -{ - int16_t i; - float sum; - - sum = 0; - for ( i = 0; i < nchan_ism - 1; i++ ) - { - q_energy_ratio_ism[i] = ratio_ism_idx[i] * step; - sum += q_energy_ratio_ism[i]; - } - - q_energy_ratio_ism[nchan_ism - 1] = 1.0f - sum; - - if ( q_energy_ratio_ism[nchan_ism - 1] < 0 ) - { - q_energy_ratio_ism[nchan_ism - 1] = 0.0f; - } - - return; -} -#else void reconstruct_ism_ratios_fx( Word16 *ratio_ism_idx, /* i : index vector Q0 */ const Word16 nchan_ism, /* i : number of components/objects Q0 */ @@ -2100,7 +1339,6 @@ void reconstruct_ism_ratios_fx( return; } -#endif /*--------------------------------------------------------------- @@ -2110,36 +1348,6 @@ void reconstruct_ism_ratios_fx( * to the total audio scene *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_modify_masa_energy_ratios( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_MAXIMUM_CODING_SUBBANDS] ) -{ - int16_t i, m, d, b; - - for ( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) - { - if ( hQMetaData->q_direction[0].cfg.nblocks == 1 ) - { - i = 0; - } - else - { - i = m; - } - - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - for ( d = 0; d < hQMetaData->no_directions; d++ ) - { - hQMetaData->q_direction[d].band_data[b].energy_ratio[m] = hQMetaData->q_direction[d].band_data[b].energy_ratio[m] * masa_to_total_energy_ratio[i][b]; - } - } - } - - return; -} -#else void ivas_omasa_modify_masa_energy_ratios_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ Word32 masa_to_total_energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_MAXIMUM_CODING_SUBBANDS] /* Q30 */ ) @@ -2174,7 +1382,6 @@ void ivas_omasa_modify_masa_energy_ratios_fx( return; } -#endif /*--------------------------------------------------------------- @@ -2183,40 +1390,6 @@ void ivas_omasa_modify_masa_energy_ratios_fx( * Obtain ISM ratio indexes for even content distribution bbetween objects *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void distribute_evenly_ism( - int16_t *idx, /* o : index values */ - const int16_t K, /* i : sum of indexes */ - const int16_t nchan_ism /* i : number of objects */ -) -{ - int16_t i; - int16_t sum; - - sum = 0; - for ( i = 0; i < nchan_ism; i++ ) - { - idx[i] = (int16_t) ( K / nchan_ism ); - sum += idx[i]; - } - - assert( sum <= K ); - - i = 0; - while ( sum < K ) - { - if ( i == nchan_ism ) - { - i = 0; - } - idx[i]++; - sum++; - i++; - } - - return; -} -#else void distribute_evenly_ism_fx( Word16 *idx, /* o : index values Q0 */ const Word16 K, /* i : sum of indexes Q0*/ @@ -2262,7 +1435,6 @@ void distribute_evenly_ism_fx( return; } -#endif /*--------------------------------------------------------------- @@ -2273,43 +1445,6 @@ void distribute_evenly_ism_fx( *---------------------------------------------------------------*/ /*! r: CPE bitrate value */ -#ifndef IVAS_FLOAT_FIXED -int32_t calculate_cpe_brate_MASA_ISM( - const ISM_MODE ism_mode, /* i : ism mode */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nchan_ism /* i : number of objects */ -) -{ - int32_t cpe_brate; - int16_t k, sce_id; - - k = 0; - while ( k < SIZE_IVAS_BRATE_TBL && ivas_total_brate != ivas_brate_tbl[k] ) - { - k++; - } - - if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - cpe_brate = ivas_total_brate - sep_object_brate[k - 2][0]; /* take data from the first column */ - } - else if ( ism_mode == ISM_MASA_MODE_DISC ) - { - cpe_brate = ivas_total_brate; - - for ( sce_id = 0; sce_id < nchan_ism; sce_id++ ) - { - cpe_brate -= sep_object_brate[k - 2][nchan_ism - 1]; - } - } - else - { - cpe_brate = ivas_total_brate; - } - - return cpe_brate; -} -#else Word32 calculate_cpe_brate_MASA_ISM_fx( const ISM_MODE ism_mode, /* i : ism mode */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -2351,4 +1486,3 @@ Word32 calculate_cpe_brate_MASA_ISM_fx( return cpe_brate; } -#endif diff --git a/lib_com/ivas_mc_com.c b/lib_com/ivas_mc_com.c index abaed7ae4..39ba64d0e 100644 --- a/lib_com/ivas_mc_com.c +++ b/lib_com/ivas_mc_com.c @@ -37,9 +37,7 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------- @@ -49,77 +47,6 @@ * ---------------------------------------------------------------*/ /*! r : MC format mode */ -#ifndef IVAS_FLOAT_FIXED -MC_MODE ivas_mc_mode_select( - const MC_LS_SETUP mc_ls_setup, /* i : MC loudspeaker setup */ - const int32_t total_brate /* i : IVAS total bitrate */ -) -{ - MC_MODE mc_mode = MC_MODE_MCT; - - switch ( mc_ls_setup ) - { - case MC_LS_SETUP_5_1: - if ( total_brate < IVAS_48k ) - { - mc_mode = MC_MODE_MCMASA; - } - else if ( total_brate < IVAS_96k ) - { - mc_mode = MC_MODE_PARAMMC; - } - break; - case MC_LS_SETUP_7_1: - if ( total_brate < IVAS_48k ) - { - mc_mode = MC_MODE_MCMASA; - } - else if ( total_brate < IVAS_128k ) - { - mc_mode = MC_MODE_PARAMMC; - } - break; - case MC_LS_SETUP_5_1_2: - if ( total_brate < IVAS_48k ) - { - mc_mode = MC_MODE_MCMASA; - } - else if ( total_brate < IVAS_128k ) - { - mc_mode = MC_MODE_PARAMMC; - } - break; - case MC_LS_SETUP_5_1_4: - if ( total_brate < IVAS_96k ) - { - mc_mode = MC_MODE_MCMASA; - } - else if ( total_brate < IVAS_160k ) - { - mc_mode = MC_MODE_PARAMMC; - } - break; - case MC_LS_SETUP_7_1_4: - if ( total_brate < IVAS_128k ) - { - mc_mode = MC_MODE_MCMASA; - } - else if ( total_brate < IVAS_160k ) - { - mc_mode = MC_MODE_PARAMMC; - } - else if ( total_brate < IVAS_192k ) - { - mc_mode = MC_MODE_PARAMUPMIX; - } - break; - default: - assert( 0 && "LS Setup not supported or defined for MC mode!\n" ); - } - - return mc_mode; -} -#else MC_MODE ivas_mc_mode_select_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC loudspeaker setup */ const Word32 total_brate /* i : IVAS total bitrate */ @@ -201,7 +128,6 @@ MC_MODE ivas_mc_mode_select_fx( return mc_mode; } -#endif /*--------------------------------------------------------------- @@ -211,7 +137,6 @@ MC_MODE ivas_mc_mode_select_fx( * ---------------------------------------------------------------*/ /*! r : number of loudspeaker channels */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_mc_ls_setup_get_num_channels_fx( const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup */ ) @@ -249,39 +174,6 @@ Word16 ivas_mc_ls_setup_get_num_channels_fx( return nchan; } -#else -int16_t ivas_mc_ls_setup_get_num_channels( - const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup */ -) -{ - int16_t nchan; - - nchan = 0; - - switch ( mc_ls_setup ) - { - case MC_LS_SETUP_5_1: - nchan = 6; - break; - case MC_LS_SETUP_7_1: - nchan = 8; - break; - case MC_LS_SETUP_5_1_2: - nchan = 8; - break; - case MC_LS_SETUP_5_1_4: - nchan = 10; - break; - case MC_LS_SETUP_7_1_4: - nchan = 12; - break; - default: - assert( 0 && "LS Setup not supported or defined for MC mode!\n" ); - } - - return nchan; -} -#endif /*--------------------------------------------------------------- @@ -291,39 +183,6 @@ int16_t ivas_mc_ls_setup_get_num_channels( * ---------------------------------------------------------------*/ /*! r : multi channel loudspeaker setup */ -#ifndef IVAS_FLOAT_FIXED -MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup( - const AUDIO_CONFIG output_config /* i : output audio configuration */ -) -{ - MC_LS_SETUP mc_ls_setup; - - mc_ls_setup = MC_LS_SETUP_INVALID; - - switch ( output_config ) - { - case IVAS_AUDIO_CONFIG_5_1: - mc_ls_setup = MC_LS_SETUP_5_1; - break; - case IVAS_AUDIO_CONFIG_7_1: - mc_ls_setup = MC_LS_SETUP_7_1; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - mc_ls_setup = MC_LS_SETUP_5_1_2; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - mc_ls_setup = MC_LS_SETUP_5_1_4; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - mc_ls_setup = MC_LS_SETUP_7_1_4; - break; - default: - assert( 0 && "Output config is not a valid MC loudspeaker setup!\n" ); - } - - return mc_ls_setup; -} -#else MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup_fx( const AUDIO_CONFIG output_config /* i : output audio configuration */ ) @@ -361,7 +220,6 @@ MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup_fx( return mc_ls_setup; } -#endif /*--------------------------------------------------------------- @@ -371,38 +229,6 @@ MC_LS_SETUP ivas_mc_map_output_config_to_mc_ls_setup_fx( * ---------------------------------------------------------------*/ /*! r: audio configuration*/ -#ifndef IVAS_FLOAT_FIXED -AUDIO_CONFIG ivas_mc_map_ls_setup_to_output_config( - const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup*/ -) -{ - AUDIO_CONFIG audio_config; - audio_config = IVAS_AUDIO_CONFIG_INVALID; - - switch ( mc_ls_setup ) - { - case MC_LS_SETUP_5_1: - audio_config = IVAS_AUDIO_CONFIG_5_1; - break; - case MC_LS_SETUP_7_1: - audio_config = IVAS_AUDIO_CONFIG_7_1; - break; - case MC_LS_SETUP_5_1_2: - audio_config = IVAS_AUDIO_CONFIG_5_1_2; - break; - case MC_LS_SETUP_5_1_4: - audio_config = IVAS_AUDIO_CONFIG_5_1_4; - break; - case MC_LS_SETUP_7_1_4: - audio_config = IVAS_AUDIO_CONFIG_7_1_4; - break; - default: - assert( 0 && "MC loudspeaker setup is not valid!\n" ); - } - - return audio_config; -} -#else AUDIO_CONFIG ivas_mc_map_ls_setup_to_output_config_fx( const MC_LS_SETUP mc_ls_setup /* i : multi channel loudspeaker setup*/ ) @@ -439,4 +265,3 @@ AUDIO_CONFIG ivas_mc_map_ls_setup_to_output_config_fx( return audio_config; } -#endif diff --git a/lib_com/ivas_mc_param_com.c b/lib_com/ivas_mc_param_com.c index f945695de..be3f35606 100644 --- a/lib_com/ivas_mc_param_com.c +++ b/lib_com/ivas_mc_param_com.c @@ -41,10 +41,8 @@ #include "ivas_stat_com.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------- @@ -52,11 +50,7 @@ *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_set_coding_scheme_fx( const MC_LS_SETUP mc_ls_setup, const Word32 ivas_total_brate, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC ); -#else -static void ivas_param_mc_set_coding_scheme( const MC_LS_SETUP mc_ls_setup, const int32_t ivas_total_brate, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC ); -#endif /*------------------------------------------------------------------------- * ivas_param_mc_get_configuration_index() @@ -64,8 +58,7 @@ static void ivas_param_mc_set_coding_scheme( const MC_LS_SETUP mc_ls_setup, cons * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -UWord16 ivas_param_mc_get_configuration_index( +UWord16 ivas_param_mc_get_configuration_index_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ ) @@ -82,25 +75,6 @@ UWord16 ivas_param_mc_get_configuration_index( return PARAM_MC_NUM_CONFIGS; } -#else - -uint16_t ivas_param_mc_get_configuration_index( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - uint16_t cur_idx; - - for ( cur_idx = 0; cur_idx < PARAM_MC_NUM_CONFIGS; cur_idx++ ) - { - if ( ivas_param_mc_conf[cur_idx].mc_ls_setup == mc_ls_setup && ivas_param_mc_conf[cur_idx].ivas_total_brate == ivas_total_brate ) - { - return cur_idx; - } - } - return PARAM_MC_NUM_CONFIGS; -} -#endif /*------------------------------------------------------------------------- * ivas_param_mc_metadata_open() @@ -108,7 +82,6 @@ uint16_t ivas_param_mc_get_configuration_index( * Parametric MC parameter coding state open function *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_metadata_open_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -124,7 +97,7 @@ void ivas_param_mc_metadata_open_fx( ivas_param_mc_set_coding_scheme_fx( mc_ls_setup, ivas_total_brate, hMetadataPMC ); /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); + config_index = ivas_param_mc_get_configuration_index_fx( mc_ls_setup, ivas_total_brate ); IF( EQ_16( (Word16) config_index, PARAM_MC_NUM_CONFIGS ) ) { assert( 0 && "ParamMC configuration index not found!" ); @@ -167,73 +140,10 @@ void ivas_param_mc_metadata_open_fx( hMetadataPMC->last_coded_bwidth = FB; move16(); - ivas_param_mc_set_coded_bands( hMetadataPMC ); + ivas_param_mc_set_coded_bands_fx( hMetadataPMC ); return; } -#else -void ivas_param_mc_metadata_open( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* o : handle for the Parametric MC parameter coding state */ -) -{ - uint16_t config_index; - - /* get coding band mappings */ - set_s( hMetadataPMC->coding_band_mapping, 0, PARAM_MC_MAX_PARAMETER_BANDS ); - - /* set coding scheme */ - ivas_param_mc_set_coding_scheme( mc_ls_setup, ivas_total_brate, hMetadataPMC ); - - /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); - if ( config_index == PARAM_MC_NUM_CONFIGS ) - { - assert( 0 && "ParamMC configuration index not found!" ); - } - - /* Band Grouping */ - if ( hMetadataPMC->num_parameter_bands == 20 ) - { - mvs2s( param_mc_coding_band_mapping_20, hMetadataPMC->coding_band_mapping, 20 ); - } - else if ( hMetadataPMC->num_parameter_bands == 14 ) - { - mvs2s( param_mc_coding_band_mapping_14, hMetadataPMC->coding_band_mapping, 14 ); - } - else if ( hMetadataPMC->num_parameter_bands == 10 ) - { - mvs2s( param_mc_coding_band_mapping_10, hMetadataPMC->coding_band_mapping, 10 ); - } - else - { - assert( 0 && "nbands must be 20 or 14!" ); - } - - hMetadataPMC->icc_mapping_conf = ivas_param_mc_conf[config_index].icc_mapping_conf; - hMetadataPMC->ild_mapping_conf = ivas_param_mc_conf[config_index].ild_mapping_conf; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->ild_factors_fx = ivas_param_mc_conf[config_index].ild_factors_fx; /*Q15*/ -#else - hMetadataPMC->ild_factors = ivas_param_mc_conf[config_index].ild_factors; -#endif - - /* init remaining flags and indices */ - hMetadataPMC->param_frame_idx = 0; - hMetadataPMC->bAttackPresent = 0; - hMetadataPMC->attackIndex = 0; - hMetadataPMC->lfe_on = 1; - - /* set coded bwidth to FB at the beginning */ - hMetadataPMC->coded_bwidth = FB; - hMetadataPMC->last_coded_bwidth = FB; - - ivas_param_mc_set_coded_bands( hMetadataPMC ); - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_param_mc_set_coded_bands() @@ -242,8 +152,7 @@ void ivas_param_mc_metadata_open( * coded band width *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_param_mc_set_coded_bands( +void ivas_param_mc_set_coded_bands_fx( HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ ) { @@ -280,40 +189,6 @@ void ivas_param_mc_set_coded_bands( return; } -#else -void ivas_param_mc_set_coded_bands( - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ -) -{ - int16_t i; - - /* set number of coded bands*/ - switch ( hMetadataPMC->num_parameter_bands ) - { - case 20: - hMetadataPMC->nbands_coded = param_mc_bands_coded_20[hMetadataPMC->coded_bwidth]; - break; - case 14: - hMetadataPMC->nbands_coded = param_mc_bands_coded_14[hMetadataPMC->coded_bwidth]; - break; - case 10: - hMetadataPMC->nbands_coded = param_mc_bands_coded_10[hMetadataPMC->coded_bwidth]; - } - - /* set number of bands per parameter frame set */ - for ( i = 0; i < PARAM_MC_PARAMETER_FRAMES; i++ ) - { - hMetadataPMC->nbands_in_param_frame[i] = 0; - } - - for ( i = 0; i < hMetadataPMC->nbands_coded; i++ ) - { - hMetadataPMC->nbands_in_param_frame[hMetadataPMC->coding_band_mapping[i]]++; - } - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_param_mc_getNumTransportChannels() @@ -322,8 +197,7 @@ void ivas_param_mc_set_coded_bands( *------------------------------------------------------------------------*/ /* r : number of IVAS transport channels */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_param_mc_getNumTransportChannels( +Word16 ivas_param_mc_getNumTransportChannels_fx( const Word32 ivas_total_bitrate, /* i : IVAS total bitrate */ const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ ) @@ -331,37 +205,20 @@ Word16 ivas_param_mc_getNumTransportChannels( Word16 nchan_transport; Word16 config_index; - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_bitrate ); + config_index = ivas_param_mc_get_configuration_index_fx( mc_ls_setup, ivas_total_bitrate ); nchan_transport = ivas_param_mc_conf[config_index].num_transport_chan; move16(); return nchan_transport; } -#else -int16_t ivas_param_mc_getNumTransportChannels( - const int32_t ivas_total_bitrate, /* i : IVAS total bitrate */ - const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ -) -{ - int16_t nchan_transport; - int16_t config_index; - - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_bitrate ); - - nchan_transport = ivas_param_mc_conf[config_index].num_transport_chan; - - return nchan_transport; -} -#endif /*------------------------------------------------------------------------- * ivas_param_mc_get_num_param_bands() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_param_mc_get_num_param_bands( +static Word16 ivas_param_mc_get_num_param_bands_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ ) @@ -456,91 +313,6 @@ static Word16 ivas_param_mc_get_num_param_bands( return num_parameter_bands; } -#else -static int16_t ivas_param_mc_get_num_param_bands( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t num_parameter_bands; - - num_parameter_bands = 0; - - /* parameter bands */ - switch ( mc_ls_setup ) - { - case MC_LS_SETUP_5_1: - switch ( ivas_total_brate ) - { - case IVAS_48k: - num_parameter_bands = 10; - break; - case IVAS_64k: - case IVAS_80k: - num_parameter_bands = 14; - break; - default: - assert( 0 && "PARAM_MC: bitrate for CICP6 not supported!" ); - } - break; - - case MC_LS_SETUP_7_1: - switch ( ivas_total_brate ) - { - case IVAS_48k: - num_parameter_bands = 10; - break; - case IVAS_64k: - case IVAS_80k: - num_parameter_bands = 14; - break; - case IVAS_96k: - num_parameter_bands = 20; - break; - } - break; - case MC_LS_SETUP_5_1_2: - switch ( ivas_total_brate ) - { - case IVAS_48k: - num_parameter_bands = 10; - break; - case IVAS_64k: - case IVAS_80k: - num_parameter_bands = 14; - break; - case IVAS_96k: - num_parameter_bands = 20; - break; - } - break; - case MC_LS_SETUP_5_1_4: - switch ( ivas_total_brate ) - { - case IVAS_96k: - num_parameter_bands = 14; - break; - case IVAS_128k: - num_parameter_bands = 20; - break; - } - break; - case MC_LS_SETUP_7_1_4: - switch ( ivas_total_brate ) - { - case IVAS_128k: - num_parameter_bands = 14; - break; - } - break; - default: - assert( 0 && "PARAM_MC: channel configuration not supportet!" ); - } - - return num_parameter_bands; -} -#endif - /*------------------------------------------------------------------------- * Local functions @@ -552,7 +324,6 @@ static int16_t ivas_param_mc_get_num_param_bands( * set Parametric MC parameter coding tables based on format and bitrate *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_set_coding_scheme_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -655,132 +426,8 @@ static void ivas_param_mc_set_coding_scheme_fx( assert( 0 && "PARAM_MC: channel configuration not supported!" ); } - hMetadataPMC->num_parameter_bands = ivas_param_mc_get_num_param_bands( mc_ls_setup, ivas_total_brate ); + hMetadataPMC->num_parameter_bands = ivas_param_mc_get_num_param_bands_fx( mc_ls_setup, ivas_total_brate ); move16(); return; } -#else -static void ivas_param_mc_set_coding_scheme( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: Parametric MC metadata handle */ -) -{ - /* quantizer and coding tables */ - switch ( mc_ls_setup ) - { - case MC_LS_SETUP_5_1: - /* ICC */ - hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp6_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp6_48_16bits[0]; - hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp6_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp6_48_16bits[0]; - hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->icc_coding.quantizer_fx = &ivas_param_mc_quant_icc_fx[0]; -#else - hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; -#endif - hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; - /* ILD */ - hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp6_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp6_48_16bits[0]; - hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp6_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp6_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->ild_coding.quantizer_fx = &ivas_param_mc_quant_ild_5d1_48_fx[0]; -#else - hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; -#endif - hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; - hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; - break; - case MC_LS_SETUP_7_1: - /* ICC */ - hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp12_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp12_48_16bits[0]; - hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp12_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp12_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->icc_coding.quantizer_fx = &ivas_param_mc_quant_icc_fx[0]; // Q15 -#else - hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; -#endif - hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; - hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; - /* ILD */ - hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp12_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp12_48_16bits[0]; - hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp12_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp12_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->ild_coding.quantizer_fx = &ivas_param_mc_quant_ild_5d1_48_fx[0]; // Q8 -#else - hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; -#endif - hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; - hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; - break; - case MC_LS_SETUP_5_1_2: - /* ICC */ - hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_cicp14_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_cicp14_48_16bits[0]; - hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_cicp14_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_cicp14_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->icc_coding.quantizer_fx = &ivas_param_mc_quant_icc_fx[0]; // Q15 -#else - hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; -#endif - hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; - hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; - /* ILD */ - hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_cicp14_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_cicp14_48_16bits[0]; - hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_cicp14_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_cicp14_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->ild_coding.quantizer_fx = &ivas_param_mc_quant_ild_5d1_48_fx[0]; // Q8 -#else - hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; -#endif - hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; - hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; - break; - case MC_LS_SETUP_5_1_4: - case MC_LS_SETUP_7_1_4: - /* ICC */ - hMetadataPMC->icc_coding.cum_freq = &ivas_param_mc_cum_freq_icc_combined_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq = &ivas_param_mc_sym_freq_icc_combined_48_16bits[0]; - hMetadataPMC->icc_coding.cum_freq_delta = &ivas_param_mc_cum_freq_icc_delta_combined_48_16bits[0]; - hMetadataPMC->icc_coding.sym_freq_delta = &ivas_param_mc_sym_freq_icc_delta_combined_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->icc_coding.quantizer_fx = &ivas_param_mc_quant_icc_fx[0]; // Q15 -#else - hMetadataPMC->icc_coding.quantizer = &ivas_param_mc_quant_icc[0]; -#endif - hMetadataPMC->icc_coding.quantizer_size = PARAM_MC_SZ_ICC_QUANTIZER; - hMetadataPMC->icc_coding.uni_bits = PARAM_MC_NUM_BITS_ICC_SCALAR_QUANT; - /* ILD */ - hMetadataPMC->ild_coding.cum_freq = &ivas_param_mc_cum_freq_ild_combined_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq = &ivas_param_mc_sym_freq_ild_combined_48_16bits[0]; - hMetadataPMC->ild_coding.cum_freq_delta = &ivas_param_mc_cum_freq_ild_delta_combined_48_16bits[0]; - hMetadataPMC->ild_coding.sym_freq_delta = &ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[0]; -#ifdef IVAS_FLOAT_FIXED - hMetadataPMC->ild_coding.quantizer_fx = &ivas_param_mc_quant_ild_5d1_48_fx[0]; // Q8 -#else - hMetadataPMC->ild_coding.quantizer = &ivas_param_mc_quant_ild_5d1_48[0]; -#endif - hMetadataPMC->ild_coding.quantizer_size = PARAM_MC_SZ_ILD_QUANTIZER_4BITS; - hMetadataPMC->ild_coding.uni_bits = PARAM_MC_NUM_BITS_ILD_SCALAR_QUANT; - break; - default: - assert( 0 && "PARAM_MC: channel configuration not supported!" ); - } - - hMetadataPMC->num_parameter_bands = ivas_param_mc_get_num_param_bands( mc_ls_setup, ivas_total_brate ); - - return; -} -#endif diff --git a/lib_com/ivas_mcmasa_com.c b/lib_com/ivas_mcmasa_com.c index c10c0d2dd..fe29c8486 100644 --- a/lib_com/ivas_mcmasa_com.c +++ b/lib_com/ivas_mcmasa_com.c @@ -34,9 +34,7 @@ #include "ivas_prot.h" #include "options.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* @@ -45,7 +43,6 @@ * Set number of transport channels in McMASA *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_setNumTransportChannels_fx( Word16 *nchan_transport, /* o : Pointer to number of transport channels to be set */ Word16 *element_mode, /* o : Pointer to element mode to be set */ @@ -69,27 +66,6 @@ void ivas_mcmasa_setNumTransportChannels_fx( return; } -#else -void ivas_mcmasa_setNumTransportChannels( - int16_t *nchan_transport, /* o : Pointer to number of transport channels to be set */ - int16_t *element_mode, /* o : Pointer to element mode to be set */ - const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ -) -{ - if ( ivas_total_brate >= IVAS_48k ) - { - *nchan_transport = 2; - *element_mode = IVAS_CPE_MDCT; - } - else - { - *nchan_transport = 1; - *element_mode = IVAS_SCE; - } - - return; -} -#endif /*--------------------------------------------------------------------------* @@ -98,7 +74,6 @@ void ivas_mcmasa_setNumTransportChannels( * Set separate channel parameters in McMASA based on bitrate *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_set_separate_channel_mode_fx( UWord8 *separateChannelEnabled, /* o : Pointer to separate channel toggle */ Word16 *separateChannelIndex, /* o : Pointer to separate channel index */ @@ -122,27 +97,6 @@ void ivas_mcmasa_set_separate_channel_mode_fx( return; } -#else -void ivas_mcmasa_set_separate_channel_mode( - uint8_t *separateChannelEnabled, /* o : Pointer to separate channel toggle */ - int16_t *separateChannelIndex, /* o : Pointer to separate channel index */ - const int32_t ivas_total_brate /* i : Total bitrate of IVAS */ -) -{ - if ( ivas_total_brate >= MCMASA_SEPARATE_BRATE ) - { - *separateChannelEnabled = 1; - *separateChannelIndex = 2; /* Center channel */ - } - else - { - *separateChannelEnabled = 0; - *separateChannelIndex = 0; - } - - return; -} -#endif /*--------------------------------------------------------------------------* @@ -151,7 +105,6 @@ void ivas_mcmasa_set_separate_channel_mode( * Split the total bitrate to elements in McMASA *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_split_brate_fx( const UWord8 separateChannelEnabled, /* i : Transport running in "separate channel" mode */ const Word32 ivas_total_brate, /* i : IVAS total bitrate available to be split */ @@ -208,36 +161,3 @@ void ivas_mcmasa_split_brate_fx( return; } -#else -void ivas_mcmasa_split_brate( - const uint8_t separateChannelEnabled, /* i : Transport running in "separate channel" mode */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate available to be split */ - const int16_t nSCE, /* i : Number of SCEs in use (0 or 1) */ - const int16_t nCPE, /* i : Number of CPEs in use (0 or 1) */ - int32_t *brate_sce, /* o : Pointer to SCE element bitrate */ - int32_t *brate_cpe /* o : Pointer to CPE element bitrate */ -) -{ - if ( separateChannelEnabled ) - { - /* 25% of total bitrate is used for SCE below 96 kb/s (separated mono channel), otherwise 30% */ - if ( ivas_total_brate < IVAS_96k ) - { - *brate_sce = (int32_t) ( MCMASA_MONOBITRATIO_64k * ivas_total_brate ); - } - else - { - *brate_sce = (int32_t) ( MCMASA_MONOBITRATIO * ivas_total_brate ); - } - - *brate_cpe = ivas_total_brate - *brate_sce; - } - else - { - *brate_sce = nSCE > 0 ? ivas_total_brate / ( nCPE + nSCE ) : 0; - *brate_cpe = nCPE > 0 ? ivas_total_brate / ( nCPE + nSCE ) : 0; - } - - return; -} -#endif diff --git a/lib_com/ivas_mct_com.c b/lib_com/ivas_mct_com.c index ec8f0907b..3d2d4c99b 100644 --- a/lib_com/ivas_mct_com.c +++ b/lib_com/ivas_mct_com.c @@ -52,150 +52,8 @@ * * split available TCX bits among channels *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void splitAvailableBitsMCT( - void **sts, /* i/o: encoder/decoder state structure */ - const int16_t total_bits, /* i : total number of available bits */ - const int16_t split_ratio[MCT_MAX_CHANNELS], /* i : ratio for splitting the bits */ - const int16_t enc_dec, /* i : encoder or decoder flag */ - const int16_t nchan /* i : number of channels */ -) -{ - int16_t i, k, nSubframes, diff, bits_split, max_chn, tmp; - int16_t *bits_frame_channel; - int16_t min_chan_bits[MCT_MAX_CHANNELS], min_bits_tot, remaining_bits; - int16_t core[MCT_MAX_CHANNELS]; - MCT_CHAN_MODE mct_chan_mode[MCT_MAX_CHANNELS]; - min_bits_tot = 0; - - for ( i = 0; i < nchan; i++ ) - { - if ( enc_dec == ENC ) - { - mct_chan_mode[i] = ( (Encoder_State *) sts[i] )->mct_chan_mode; - core[i] = ( (Encoder_State *) sts[i] )->core; - } - else - { - mct_chan_mode[i] = ( (Decoder_State *) sts[i] )->mct_chan_mode; - core[i] = ( (Decoder_State *) sts[i] )->core; - } - } - - for ( i = 0; i < nchan; i++ ) - { - if ( - mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) - { - min_chan_bits[i] = 0; - - nSubframes = ( core[i] == TCX_20_CORE ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - min_chan_bits[i] += SMDCT_MINIMUM_ARITH_BITS + MIN_SAFETY_BITS_MC; - } - min_bits_tot += min_chan_bits[i]; - } - } - - remaining_bits = total_bits - min_bits_tot; - - /*initial value of bits already given*/ - bits_split = 0; - - tmp = 0; - max_chn = 0; - for ( i = 0; i < nchan; i++ ) - { - if ( enc_dec == ENC ) - { - bits_frame_channel = &( (Encoder_State *) sts[i] )->bits_frame_channel; - } - else /* DEC */ - { - bits_frame_channel = &( (Decoder_State *) sts[i] )->bits_frame_channel; - } - - if ( - mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) - { - assert( split_ratio[i] >= 1 && split_ratio[i] < BITRATE_MCT_RATIO_RANGE ); - *bits_frame_channel = split_ratio[i] * remaining_bits / BITRATE_MCT_RATIO_RANGE + min_chan_bits[i]; - bits_split += *bits_frame_channel; - - /*determine channel with most bits (energy)*/ - if ( *bits_frame_channel > tmp ) - { - tmp = *bits_frame_channel; - max_chn = i; - } - } - } - - /*if bits distributed are more than available bits, substract the proportional amount of bits from all channels*/ - if ( bits_split != total_bits ) - { - diff = bits_split - total_bits; - - /*re-count bits distributed to each channel*/ - bits_split = 0; - - for ( i = 0; i < nchan; i++ ) - { - if ( enc_dec == ENC ) - { - bits_frame_channel = &( (Encoder_State *) sts[i] )->bits_frame_channel; - } - else /* DEC */ - { - bits_frame_channel = &( (Decoder_State *) sts[i] )->bits_frame_channel; - } - - if ( - mct_chan_mode[i] != MCT_CHAN_MODE_IGNORE ) - { - *bits_frame_channel -= diff * split_ratio[i] / BITRATE_MCT_RATIO_RANGE; - *bits_frame_channel = max( min_chan_bits[i], *bits_frame_channel ); - bits_split += *bits_frame_channel; - } - } - } - /*if there any bits left assign them to the channel with the maximum energy (or more bits)*/ - if ( total_bits != bits_split ) - { - if ( enc_dec == ENC ) - { - bits_frame_channel = &( (Encoder_State *) sts[max_chn] )->bits_frame_channel; - } - else /* DEC */ - { - bits_frame_channel = &( (Decoder_State *) sts[max_chn] )->bits_frame_channel; - } - - *bits_frame_channel += ( total_bits - bits_split ); - - /*if all channels are silent assign bits to ch 0*/ - if ( enc_dec == ENC ) - { - if ( ( (Encoder_State *) sts[max_chn] )->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - assert( bits_split == 0 ); - - ( (Encoder_State *) sts[max_chn] )->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - ( (Encoder_State *) sts[max_chn] )->side_bits_frame_channel = ( ( (Encoder_State *) sts[max_chn] )->core ) * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - *bits_frame_channel -= ( (Encoder_State *) sts[max_chn] )->side_bits_frame_channel; - } - } - } - - return; -} - -#else - -void splitAvailableBitsMCT( +void splitAvailableBitsMCT_fx( void **sts, /* i/o: encoder/decoder state structure */ const Word16 total_bits, /* i : total number of available bits */ const Word16 split_ratio[MCT_MAX_CHANNELS], /* i : ratio for splitting the bits Q0 */ @@ -368,5 +226,3 @@ void splitAvailableBitsMCT( return; } - -#endif diff --git a/lib_com/ivas_mdct_core_com.c b/lib_com/ivas_mdct_core_com.c index 7e7a00cfc..f3ad466cc 100644 --- a/lib_com/ivas_mdct_core_com.c +++ b/lib_com/ivas_mdct_core_com.c @@ -36,17 +36,14 @@ #include "ivas_prot.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* * ivas_mdct_tcx10_bit_distribution() * * *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mdct_tcx10_bit_distribution_fx( Word16 target_bitsTCX10[NB_DIV], /* o : target bit distribution */ const Word16 nbits_tcx, /* i : TCX bits */ @@ -98,41 +95,3 @@ void ivas_mdct_tcx10_bit_distribution_fx( return; } -#endif - -void ivas_mdct_tcx10_bit_distribution( - int16_t target_bitsTCX10[NB_DIV], /* o : target bit distribution */ - const int16_t nbits_tcx, /* i : TCX bits */ - const int16_t nTnsBitsTCX10[NB_DIV] /* i : TNS bits */ -) -{ - int16_t k; - int16_t min_required_bits = NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS; - - for ( k = 0; k < 2; k++ ) - { - if ( nbits_tcx & 1 ) - { - target_bitsTCX10[k] = nbits_tcx / 2 + ( k == 0 ? 1 : 0 ) - nTnsBitsTCX10[k]; - } - else - { - target_bitsTCX10[k] = nbits_tcx / 2 - nTnsBitsTCX10[k]; - } - } - - if ( target_bitsTCX10[0] < min_required_bits ) - { - /*redistribute bits*/ - target_bitsTCX10[1] -= ( min_required_bits - target_bitsTCX10[0] ); - target_bitsTCX10[0] = min_required_bits; - } - else if ( target_bitsTCX10[1] < min_required_bits ) - { - /*redistribute bits*/ - target_bitsTCX10[0] -= ( min_required_bits - target_bitsTCX10[1] ); - target_bitsTCX10[1] = min_required_bits; - } - - return; -} diff --git a/lib_com/ivas_mdct_imdct.c b/lib_com/ivas_mdct_imdct.c index 2d0c824e3..813269dfe 100644 --- a/lib_com/ivas_mdct_imdct.c +++ b/lib_com/ivas_mdct_imdct.c @@ -37,344 +37,3 @@ #include "ivas_rom_com.h" #include "ivas_stat_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------------------------* - * Local constants - *------------------------------------------------------------------------------------------*/ - -#define IVAS_MDCT_SCALING_GAIN_48k 1.9699011974118126e-06f -#define IVAS_MDCT_SCALING_GAIN_32k 2.9548517961177197e-06f -#define IVAS_MDCT_SCALING_GAIN_16k 5.909703592235439e-06f - -#define IVAS_IMDCT_SCALING_GAIN 2115.165304808f - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_tda() - * - * Time domain aliasing - *-----------------------------------------------------------------------------------------*/ - -void ivas_tda( - const float *pIn, /* i : time domain buffer of size 2*length */ - float *pOut, /* o : time domain buffer of size length */ - const int16_t length /* i : length of time alised signal buffer */ -) -{ - int16_t i; - int16_t len_by_2 = length >> 1; - - for ( i = 0; i < len_by_2; i++ ) - { - pOut[i] = -pIn[len_by_2 - i - 1] + pIn[len_by_2 + i]; - pOut[len_by_2 + i] = pIn[length * 2 - i - 1] + pIn[length + i]; - } - - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_dct_windowing() - * - * Windowing block, input is passed through Fielder window - *-----------------------------------------------------------------------------------------*/ - -void ivas_dct_windowing( - const int16_t fade_len, - const int16_t full_len, - const int16_t dct_len, - const int16_t zero_pad_len, - const float *pWindow_coeffs, - const int16_t frame_len, - float *pOut_buf, - float *pBuffer_prev, - float *pTemp_lfe ) -{ - int16_t i; - int16_t rem_len = 0; - - mvr2r( pBuffer_prev, pOut_buf + zero_pad_len, fade_len ); - - mvr2r( pTemp_lfe, ( pOut_buf + fade_len + zero_pad_len ), dct_len ); - - for ( i = 0; i < zero_pad_len; i++ ) - { - pOut_buf[i] = 0.0f; - } - - mvr2r( ( pOut_buf + full_len - fade_len ), pBuffer_prev, fade_len ); - - for ( i = 0; i < fade_len; i++ ) - { - pOut_buf[zero_pad_len + i] = pOut_buf[zero_pad_len + i] * pWindow_coeffs[i]; - } - - rem_len = full_len - ( zero_pad_len * 3 + fade_len ); - - for ( i = 0; i < rem_len; i++ ) - { - pOut_buf[zero_pad_len * 3 + fade_len + i] = pOut_buf[zero_pad_len * 3 + fade_len + i] * pWindow_coeffs[fade_len - i - 1]; - } - - for ( i = 0; i < frame_len - full_len; i++ ) - { - pOut_buf[full_len + i] = 0.0f; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_mdct() - * - * MDCT implementation - *-----------------------------------------------------------------------------------------*/ - -void ivas_mdct( - const float *pIn, - float *pOut, - const int16_t length ) -{ - const float *pTwid_re, *pTwid_im; - int16_t i, len_by_2; - float re[IVAS_480_PT_LEN], im[IVAS_480_PT_LEN]; - float ivas_mdct_scaling_gain; - - len_by_2 = length >> 1; - ivas_mdct_scaling_gain = ivas_get_mdct_scaling_gain( len_by_2 ); - - ivas_get_twid_factors( length, &pTwid_re, &pTwid_im ); - - for ( i = 0; i < len_by_2; i++ ) - { - pOut[i] = -pIn[len_by_2 - i - 1] + pIn[len_by_2 + i]; - pOut[len_by_2 + i] = pIn[length * 2 - i - 1] + pIn[length + i]; - } - - for ( i = 0; i < len_by_2; i++ ) - { - re[i] = -( pOut[2 * i] * pTwid_re[i] + pOut[length - 1 - 2 * i] * pTwid_im[i] ); - im[i] = pOut[length - 1 - 2 * i] * pTwid_re[i] - pOut[2 * i] * pTwid_im[i]; - } - - DoFFT( &re[0], &im[0], len_by_2 ); - - for ( i = 0; i < len_by_2; i++ ) - { - re[i] = re[i] * ivas_mdct_scaling_gain; - im[i] = im[i] * ivas_mdct_scaling_gain; - } - - for ( i = 0; i < len_by_2; i++ ) - { - float tmp; - tmp = re[i] * pTwid_re[i] - im[i] * pTwid_im[i]; - im[i] = im[i] * pTwid_re[i] + re[i] * pTwid_im[i]; - re[i] = tmp; - } - - for ( i = 0; i < len_by_2; i++ ) - { - pOut[length - 2 * i - 1] = re[i]; - pOut[2 * i] = im[i]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_ifft_cplx() - * - * Complex IFFT implementation using DoFFT - *-----------------------------------------------------------------------------------------*/ - -static void ivas_ifft_cplx( - float *re, - float *im, - const int16_t length ) -{ - int16_t i; - float ivas_imdct_one_by_powergain = IVAS_IMDCT_SCALING_GAIN; - /*re-arrange inputs to use fft as ifft */ - re[0] = re[0] * ivas_imdct_one_by_powergain; - im[0] = im[0] * ivas_imdct_one_by_powergain; - - for ( i = 1; i <= length >> 1; i++ ) - { - float tmp = re[length - i] * ivas_imdct_one_by_powergain; - re[length - i] = re[i] * ivas_imdct_one_by_powergain; - re[i] = tmp; - - tmp = im[length - i] * ivas_imdct_one_by_powergain; - im[length - i] = im[i] * ivas_imdct_one_by_powergain; - im[i] = tmp; - } - - DoFFT( re, im, (int16_t) length ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_itda() - * - * Inverse time domain alias implementation - *-----------------------------------------------------------------------------------------*/ - -void ivas_itda( - const float *re, /* i : time alised signal after IDCT */ - float *pOut, /* o : time domain buffer of size 2*length */ - const int16_t length /* i : length of time alised signal buffer */ -) -{ - int16_t i; - int16_t len_by_2 = length >> 1; - - for ( i = 0; i < len_by_2; i++ ) - { - pOut[i] = -re[len_by_2 - i - 1]; - pOut[len_by_2 + i] = re[i]; - pOut[length + i] = re[len_by_2 + i]; - pOut[3 * len_by_2 + i] = re[length - i - 1]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_imdct() - * - * IMDCT implementation - *-----------------------------------------------------------------------------------------*/ - -void ivas_imdct( - const float *pIn, - float *pOut, - const int16_t length ) -{ - const float *pTwid_re, *pTwid_im; - int16_t len_by_2 = length >> 1; - int16_t i; - float re[IVAS_480_PT_LEN]; - float im[IVAS_480_PT_LEN]; - - ivas_get_twid_factors( length, &pTwid_re, &pTwid_im ); - - for ( i = 0; i < len_by_2; i++ ) - { - re[i] = pIn[length - 2 * i - 1] * pTwid_re[i] + pIn[2 * i] * pTwid_im[i]; /*stl_arr_index*/ - im[i] = -pIn[length - 2 * i - 1] * pTwid_im[i] + pIn[2 * i] * pTwid_re[i]; /*stl_arr_index*/ - } - - ivas_ifft_cplx( &re[0], &im[0], len_by_2 ); - - for ( i = 0; i < len_by_2; i++ ) - { - float tmp; - tmp = re[i] * pTwid_re[i] + im[i] * pTwid_im[i]; - im[i] = -re[i] * pTwid_im[i] + im[i] * pTwid_re[i]; - re[i] = tmp; - } - - for ( i = ( len_by_2 - 1 ); i >= 0; i-- ) - { - re[2 * i + 1] = im[( len_by_2 - 1 ) - i]; - re[2 * i] = -re[i]; - } - - for ( i = 0; i < len_by_2; i++ ) - { - pOut[i] = -re[len_by_2 - i - 1]; - pOut[len_by_2 + i] = re[i]; - pOut[length + i] = re[len_by_2 + i]; - pOut[3 * len_by_2 + i] = re[length - i - 1]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_twid_factors() - * - * Sets/Maps the fft twiddle tables based on fft length - *-----------------------------------------------------------------------------------------*/ - -void ivas_get_twid_factors( - const int16_t length, - const float **pTwid_re, - const float **pTwid_im ) -{ - if ( length == 480 ) - { - *pTwid_re = &ivas_cos_twiddle_480[0]; - *pTwid_im = &ivas_sin_twiddle_480[0]; - } - else if ( length == 320 ) - { - *pTwid_re = &ivas_cos_twiddle_320[0]; - *pTwid_im = &ivas_sin_twiddle_320[0]; - } - else if ( length == 160 ) - { - *pTwid_re = &ivas_cos_twiddle_160[0]; - *pTwid_im = &ivas_sin_twiddle_160[0]; - } - else if ( length == 80 ) - { - *pTwid_re = &ivas_cos_twiddle_80[0]; - *pTwid_im = &ivas_sin_twiddle_80[0]; - } - else - { - assert( !"Not supported FFT length!" ); - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_mdct_scaling_gain() - * - * Get scaling gain for MDCT functions - *-----------------------------------------------------------------------------------------*/ - -float ivas_get_mdct_scaling_gain( - const int16_t dct_len_by_2 ) -{ - float gain = 0.0f; - - switch ( dct_len_by_2 ) - { - case L_FRAME48k >> 2: - { - gain = IVAS_MDCT_SCALING_GAIN_48k; - break; - } - case L_FRAME32k >> 2: - { - gain = IVAS_MDCT_SCALING_GAIN_32k; - break; - } - case L_FRAME16k >> 2: - { - gain = IVAS_MDCT_SCALING_GAIN_16k; - break; - } - default: - { - assert( !"Unsupported frame length!" ); - break; - } - } - - return gain; -} -#endif diff --git a/lib_com/ivas_mdft_imdft.c b/lib_com/ivas_mdft_imdft.c index 0369afa71..4ed267ba5 100644 --- a/lib_com/ivas_mdft_imdft.c +++ b/lib_com/ivas_mdft_imdft.c @@ -38,32 +38,17 @@ #include "ivas_rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include #include #include "prot_fx.h" #include "debug.h" -#define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) -#define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#define SHC( x ) ( (Word16) x ) -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------------------------* * Local constants *-----------------------------------------------------------------------------------------*/ -#define IVAS_ONE_BY_960 0.001041666666666666f -#define IVAS_ONE_BY_640 0.0015625f -#define IVAS_ONE_BY_320 0.003125f -#define IVAS_ONE_BY_240 0.004166666666666667f -#define IVAS_ONE_BY_160 0.00625f -#define IVAS_ONE_BY_80 0.0125f - -#ifdef IVAS_FLOAT_FIXED #define IVAS_ONE_BY_960_Q37 143165577 #define IVAS_ONE_BY_640_Q37 214748365 #define IVAS_ONE_BY_320_Q37 429496730 @@ -151,124 +136,6 @@ static void ivas_get_imdft_twid_factors_fx( return; } -#endif -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_mdft_twid_factors() - * - * get twiddle tables for MDFT - *-----------------------------------------------------------------------------------------*/ - -static void ivas_get_mdft_twid_factors( - const int16_t length, - const float **ppTwid ) -{ - switch ( length ) - { - case L_FRAME48k: - *ppTwid = &ivas_mdft_coeff_cos_twid_960[0]; - break; - case L_FRAME32k: - *ppTwid = &ivas_mdft_coeff_cos_twid_640[0]; - - break; - case L_FRAME16k: - *ppTwid = &ivas_mdft_coeff_cos_twid_320[0]; - break; - case IVAS_240_PT_LEN: - *ppTwid = &ivas_mdft_coeff_cos_twid_240[0]; - break; - case IVAS_160_PT_LEN: - *ppTwid = &ivas_mdft_coeff_cos_twid_160[0]; - break; - case IVAS_120_PT_LEN: - *ppTwid = &ivas_mdft_coeff_cos_twid_120[0]; - break; - case IVAS_80_PT_LEN: - *ppTwid = &ivas_mdft_coeff_cos_twid_80[0]; - break; - case IVAS_40_PT_LEN: - *ppTwid = &ivas_mdft_coeff_cos_twid_40[0]; - break; - - default: - assert( !"Not supported FFT length!" ); - break; - } - - return; -} -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_imdft_twid_factors() - * - * get twiddle tables for IMDFT - *-----------------------------------------------------------------------------------------*/ - -static void ivas_get_imdft_twid_factors( - const int16_t length, - const float **ppTwid ) -{ - switch ( length ) - { - case L_FRAME48k: - *ppTwid = ivas_mdft_coeff_cos_twid_960; - break; - case L_FRAME32k: - *ppTwid = ivas_mdft_coeff_cos_twid_640; - break; - case L_FRAME16k: - *ppTwid = ivas_mdft_coeff_cos_twid_320; - break; - case 240: - *ppTwid = ivas_mdft_coeff_cos_twid_240; - break; - case 160: - *ppTwid = ivas_mdft_coeff_cos_twid_160; - break; - case 80: - *ppTwid = ivas_mdft_coeff_cos_twid_80; - break; - default: - assert( !"Not supported FFT length!" ); - } - - return; -} -static void get_one_by_length( - float *one_by_length, - const int16_t length ) -{ - if ( length == L_FRAME48k ) - { - *one_by_length = IVAS_ONE_BY_960; - } - else if ( length == L_FRAME32k ) - { - *one_by_length = IVAS_ONE_BY_640; - } - else if ( length == L_FRAME16k ) - { - *one_by_length = IVAS_ONE_BY_320; - } - else if ( length == IVAS_240_PT_LEN ) - { - *one_by_length = IVAS_ONE_BY_240; - } - else if ( length == IVAS_160_PT_LEN ) - { - *one_by_length = IVAS_ONE_BY_160; - } - else if ( length == IVAS_80_PT_LEN ) - { - *one_by_length = IVAS_ONE_BY_80; - } - else - { - assert( !"Not supported FFT length!" ); - } - - return; -} -#ifdef IVAS_FLOAT_FIXED static void get_one_by_length_fx( Word32 *one_by_length, // Q37 @@ -352,8 +219,6 @@ static void ivas_ifft_cplx1_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_mdft() @@ -465,137 +330,3 @@ void ivas_imdft_fx( } return; } -#endif -/*-----------------------------------------------------------------------------------------* - * Function ivas_ifft_cplx1() - * - * Complex IFFT implementation using fft() - *-----------------------------------------------------------------------------------------*/ - -static void ivas_ifft_cplx1( - float *re, - float *im, - const int16_t length ) -{ - int16_t i; - float one_by_length, tmp; - - get_one_by_length( &one_by_length, length ); - - /* re-arrange inputs to use fft as ifft */ - re[0] = re[0] * one_by_length; - im[0] = im[0] * one_by_length; - - for ( i = 1; i <= length >> 1; i++ ) - { - tmp = re[length - i] * one_by_length; /*stl_arr_index*/ - re[length - i] = re[i] * one_by_length; /*stl_arr_index*/ - re[i] = tmp; - - tmp = im[length - i] * one_by_length; /*stl_arr_index*/ - im[length - i] = im[i] * one_by_length; /*stl_arr_index*/ - im[i] = tmp; - } - - fft( re, im, length, 1 ); - - return; -} -/*-----------------------------------------------------------------------------------------* -* Function ivas_mdft() - -* MDFT implementation -*-----------------------------------------------------------------------------------------*/ - -void ivas_mdft( - const float *pIn, /* i : input time-domain signal */ - float *pOut_re, /* o : Real part of MDFT signal */ - float *pOut_im, /* o : Imag. part of MDFT signal */ - const int16_t input_length, /* i : signal length */ - const int16_t mdft_length /* i : MDFT length */ -) -{ - float re[L_FRAME48k]; - float im[L_FRAME48k]; - int16_t j, len_by_2; - const float *pTwid; - - len_by_2 = mdft_length >> 1; - - ivas_get_mdft_twid_factors( mdft_length, &pTwid ); - - if ( mdft_length == input_length ) - { - for ( j = 0; j < mdft_length; j++ ) - { - re[j] = pIn[j] * pTwid[j]; - im[j] = -pIn[j] * pTwid[mdft_length - j]; - } - } - else - { - for ( j = 0; j < mdft_length; j++ ) - { - re[j] = pIn[j] * pTwid[j] - pIn[j + mdft_length] * pTwid[mdft_length - j]; - im[j] = -pIn[j] * pTwid[mdft_length - j] - pIn[j + mdft_length] * pTwid[j]; - } - } - - fft( re, im, mdft_length, 1 ); - - for ( j = 0; j < len_by_2; j++ ) - { - pOut_re[2 * j] = re[j]; - pOut_re[2 * j + 1] = re[mdft_length - j - 1]; - - pOut_im[2 * j] = im[j]; - pOut_im[2 * j + 1] = -im[mdft_length - j - 1]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_imdft() - * - * iMDFT implementation - * out buffer needs to have 2*length worth memory - *-----------------------------------------------------------------------------------------*/ - -void ivas_imdft( - const float *pRe, /* i : Real part of MDFT signal */ - const float *pIm, /* i : Imag. part of MDFT signal */ - float *pOut, /* o : output time-domain signal */ - const int16_t length /* i : signal length */ -) -{ - float *re_tmp = pOut; - float *im_tmp = pOut + length; - float tmp; - int16_t j; - int16_t len_by_2 = length >> 1; - const float *pTwid; - - ivas_get_imdft_twid_factors( length, &pTwid ); - - for ( j = 0; j < len_by_2; j++ ) - { - re_tmp[j] = pRe[2 * j]; - re_tmp[j + len_by_2] = pRe[length - 2 * j - 1]; - - im_tmp[j] = pIm[2 * j]; - im_tmp[j + len_by_2] = -pIm[length - 2 * j - 1]; - } - - ivas_ifft_cplx1( re_tmp, im_tmp, length ); - - for ( j = 0; j < length; j++ ) - { - tmp = re_tmp[j] * pTwid[j] - im_tmp[j] * pTwid[length - j]; - im_tmp[j] = -( re_tmp[j] * pTwid[length - j] + im_tmp[j] * pTwid[j] ); - re_tmp[j] = tmp; - } - - return; -} diff --git a/lib_com/ivas_omasa_com.c b/lib_com/ivas_omasa_com.c index 5821c474c..a86f90acb 100644 --- a/lib_com/ivas_omasa_com.c +++ b/lib_com/ivas_omasa_com.c @@ -45,23 +45,6 @@ * Local constants *---------------------------------------------------------------*/ -#define GAMMA_ISM_LOW_IMP 0.8f -#define GAMMA_ISM_MEDIUM_IMP 1.2f -#define GAMMA_ISM_HIGH_IMP 1.4f - -#define GAMMA_ISM_LOW_IMP2 0.9f -#define GAMMA_ISM_MEDIUM_IMP2 1.2f -#define GAMMA_ISM_HIGH_IMP2 1.35f - -#define GAMMA_ISM_LOW_IMP3 0.85f -#define GAMMA_ISM_MEDIUM_IMP3 1.15f -#define GAMMA_ISM_HIGH_IMP3 1.3f - -#define GAMMA_ISM_LOW_IMP4 0.8f -#define GAMMA_ISM_MEDIUM_IMP4 1.0f -#define GAMMA_ISM_HIGH_IMP4 1.2f - -#ifdef IVAS_FLOAT_FIXED #define GAMMA_ISM_LOW_IMP_FX 26215 /*0.8f in Q15*/ #define GAMMA_ISM_MEDIUM_IMP_FX 39322 /*1.2f in Q15*/ #define GAMMA_ISM_HIGH_IMP_FX 45876 /*1.4f in Q15*/ @@ -77,7 +60,6 @@ #define GAMMA_ISM_LOW_IMP4_FX 26215 /*0.8f in Q15*/ #define GAMMA_ISM_MEDIUM_IMP4_FX 32768 /*1.0f in Q15*/ #define GAMMA_ISM_HIGH_IMP4_FX 39322 /*1.2f in Q15*/ -#endif /*--------------------------------------------------------------- * ivas_omasa_ism_mode_select() @@ -87,7 +69,6 @@ * ---------------------------------------------------------------*/ /*! r : ISM format mode */ -#ifdef IVAS_FLOAT_FIXED ISM_MODE ivas_omasa_ism_mode_select_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 nchan_ism /* i : number of input ISM's */ @@ -175,81 +156,6 @@ ISM_MODE ivas_omasa_ism_mode_select_fx( return ism_mode; } -#else -ISM_MODE ivas_omasa_ism_mode_select( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nchan_ism /* i : number of input ISM's */ -) -{ - ISM_MODE ism_mode = ISM_MODE_NONE; - - switch ( nchan_ism ) - { - case 1: - if ( ivas_total_brate >= IVAS_24k4 ) - { - ism_mode = ISM_MASA_MODE_DISC; - } - else - { - ism_mode = ISM_MODE_NONE; - } - break; - case 2: - if ( ivas_total_brate >= IVAS_48k ) - { - ism_mode = ISM_MASA_MODE_DISC; - } - else if ( ivas_total_brate >= IVAS_32k ) - { - ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; - } - else - { - ism_mode = ISM_MODE_NONE; - } - break; - case 3: - if ( ivas_total_brate >= IVAS_96k ) - { - ism_mode = ISM_MASA_MODE_DISC; - } - else if ( ivas_total_brate >= IVAS_64k ) - { - ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; - } - else if ( ivas_total_brate >= IVAS_32k ) - { - ism_mode = ISM_MASA_MODE_MASA_ONE_OBJ; - } - else - { - ism_mode = ISM_MODE_NONE; - } - break; - case 4: - if ( ivas_total_brate >= IVAS_128k ) - { - ism_mode = ISM_MASA_MODE_DISC; - } - else if ( ivas_total_brate >= IVAS_64k ) - { - ism_mode = ISM_MASA_MODE_PARAM_ONE_OBJ; - } - else if ( ivas_total_brate >= IVAS_32k ) - { - ism_mode = ISM_MASA_MODE_MASA_ONE_OBJ; - } - else - { - ism_mode = ISM_MODE_NONE; - } - break; - } - - return ism_mode; -} -#endif /*--------------------------------------------------------------- * ivas_set_omasa_TC() @@ -257,7 +163,6 @@ ISM_MODE ivas_omasa_ism_mode_select( * set number of transport channels in OMASA format * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_set_omasa_TC_fx( const ISM_MODE ism_mode, /* i : ISM mode */ const Word16 nchan_ism, /* i : number of input ISMs */ @@ -292,36 +197,6 @@ void ivas_set_omasa_TC_fx( return; } -#else -void ivas_set_omasa_TC( - const ISM_MODE ism_mode, /* i : ISM mode */ - const int16_t nchan_ism, /* i : number of input ISMs */ - int16_t *nSCE, /* o : number of SCEs */ - int16_t *nCPE /* o : number of CPEs */ -) -{ - switch ( ism_mode ) - { - case ISM_MASA_MODE_MASA_ONE_OBJ: - case ISM_MASA_MODE_PARAM_ONE_OBJ: - *nCPE = 1; - *nSCE = 1; - break; - case ISM_MASA_MODE_DISC: - *nCPE = 1; - *nSCE = nchan_ism; - break; - case ISM_MODE_NONE: - *nCPE = 1; - *nSCE = 0; - break; - default: - break; - } - - return; -} -#endif /*--------------------------------------------------------------- * ivas_interformat_brate() @@ -330,7 +205,6 @@ void ivas_set_omasa_TC( * ---------------------------------------------------------------*/ /*! r: adjusted bitrate */ -#ifdef IVAS_FLOAT_FIXED Word32 ivas_interformat_brate_fx( const ISM_MODE ism_mode, /* i : ISM mode */ const Word16 nchan_ism, /* i : number of ISM channels */ @@ -489,144 +363,6 @@ Word32 ivas_interformat_brate_fx( return element_brate_out; } -#else -int32_t ivas_interformat_brate( - const ISM_MODE ism_mode, /* i : ISM mode */ - const int16_t nchan_ism, /* i : number of ISM channels */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t ism_imp, /* i : ISM importance flag */ - const int16_t limit_flag /* i : flag to limit the bitrate increase */ -) -{ - int32_t element_brate_out; - int16_t nBits, limit_low, limit_high; - - nBits = (int16_t) ( element_brate / FRAMES_PER_SEC ); - - if ( ism_imp == ISM_INACTIVE_IMP ) - { - nBits = BITS_ISM_INACTIVE; - } - else - { - if ( ism_mode == ISM_MASA_MODE_DISC && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate <= 24000 ) || ( nchan_ism == 2 && element_brate <= 11000 ) ) ) /* for border case in DISC mode */ - { - if ( limit_flag == 1 && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) || ( nchan_ism == 2 && element_brate <= 11000 ) ) ) - { - return element_brate; - } - - if ( ism_imp == ISM_LOW_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP4 ); - } - else if ( ism_imp == ISM_MEDIUM_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_MEDIUM_IMP4 ); - if ( limit_flag == -1 ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP4 ); - } - } - else /* ISM_HIGH_IMP */ - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP4 ); - if ( limit_flag == -1 ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP4 ); - } - } - } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || - ( ism_mode == ISM_MASA_MODE_DISC && element_brate == 9600 ) /* this condition corresponds to the ivas_total_brate = 24400 and 1 object */ - ) - { - if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && element_brate == IVAS_13k2 ) - { - if ( ism_imp == ISM_LOW_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP3 ); - } - else if ( ism_imp == ISM_MEDIUM_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_MEDIUM_IMP3 ); - } - else /* ISM_HIGH_IMP */ - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP4 ); - } - } - else - { - if ( ism_imp == ISM_LOW_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP3 ); - } - else if ( ism_imp == ISM_MEDIUM_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_MEDIUM_IMP3 ); - } - else /* ISM_HIGH_IMP */ - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP3 ); - } - } - } - else if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ && element_brate == 16000 ) - { - if ( ism_imp == ISM_LOW_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP ); - } - else if ( ism_imp == ISM_MEDIUM_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_MEDIUM_IMP ); - } - else /* ISM_HIGH_IMP */ - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP3 ); - } - } - else - { - if ( ism_imp == ISM_LOW_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP ); - } - else if ( ism_imp == ISM_MEDIUM_IMP ) - { - nBits = (int16_t) ( nBits * GAMMA_ISM_MEDIUM_IMP ); - } - else /* ISM_HIGH_IMP */ - { - nBits = (int16_t) ( nBits * GAMMA_ISM_HIGH_IMP ); - } - } - } - - limit_low = MIN_BRATE_SWB_BWE / FRAMES_PER_SEC; - if ( ism_imp == ISM_INACTIVE_IMP ) - { - limit_low = BITS_ISM_INACTIVE; - } - else if ( element_brate >= SCE_CORE_16k_LOW_LIMIT ) - { - limit_low = SCE_CORE_16k_LOW_LIMIT / FRAMES_PER_SEC; - } - - limit_high = IVAS_512k / FRAMES_PER_SEC; - if ( element_brate < SCE_CORE_16k_LOW_LIMIT ) - { - limit_high = ACELP_12k8_HIGH_LIMIT / FRAMES_PER_SEC; - } - - nBits = check_bounds_s( nBits, limit_low, limit_high ); - - element_brate_out = nBits * FRAMES_PER_SEC; - - return element_brate_out; -} -#endif /*--------------------------------------------------------------- * ivas_combined_format_brate_sanity() @@ -634,7 +370,6 @@ int32_t ivas_interformat_brate( * Sanity check in combined format coding * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_combined_format_brate_sanity_fx( const Word32 element_brate, /* i : element bitrate */ const Word16 core, /* i : core */ @@ -694,60 +429,6 @@ void ivas_combined_format_brate_sanity_fx( return; } -#else -void ivas_combined_format_brate_sanity( - const int32_t element_brate, /* i : element bitrate */ - const int16_t core, /* i : core */ - const int32_t total_brate, /* i : total bitrate */ - int32_t *core_brate, /* i/o: core bitrate */ - int16_t *inactive_coder_type_flag, /* o : inactive coder_type flag */ - int16_t *diff_nBits /* o : number of differential bits */ -) -{ - int16_t limit_high, nBits; - int32_t brate_diff; - - brate_diff = total_brate - *core_brate; - - /* sanity check: at lowest IVAS bit-rates and one ISM channel coded by - low-rate core-coder mode, it can happen that the CPE (MASA) bit-budget - for ACELP core-coding @12.8 kHz is too high */ - - if ( element_brate < ACELP_12k8_HIGH_LIMIT ) - { - limit_high = ACELP_12k8_HIGH_LIMIT / FRAMES_PER_SEC; - nBits = (int16_t) ( *core_brate / FRAMES_PER_SEC ); - - *diff_nBits = nBits - limit_high; - if ( *diff_nBits > 0 ) - { - if ( core == TCX_20_CORE || core == TCX_10_CORE ) - { - *diff_nBits = 0; - } - else /* ACELP core */ - { - *core_brate -= ( *diff_nBits * FRAMES_PER_SEC ); - } - } - } - - /*-----------------------------------------------------------------* - * set inactive coder_type flag in ACELP core - *-----------------------------------------------------------------*/ - - if ( core == ACELP_CORE ) - { - *inactive_coder_type_flag = 0; /* AVQ by default */ - if ( *core_brate + brate_diff <= MAX_GSC_INACTIVE_BRATE ) - { - *inactive_coder_type_flag = 1; /* GSC */ - } - } - - return; -} -#endif /*--------------------------------------------------------------- @@ -757,7 +438,6 @@ void ivas_combined_format_brate_sanity( * ---------------------------------------------------------------*/ /*!r : number of bits for ISM ratio index */ -#ifdef IVAS_FLOAT_FIXED Word16 bits_index_ism_ratio_fx( const Word16 nchan_ism /* i : number of objects */ ) @@ -788,34 +468,6 @@ Word16 bits_index_ism_ratio_fx( return bits_index; } -#else -int16_t bits_index_ism_ratio( - const int16_t nchan_ism /* i : number of objects */ -) -{ - int16_t bits_index; - - bits_index = 0; - if ( nchan_ism == 2 ) - { - bits_index = 3; - } - else if ( nchan_ism == 3 ) - { - bits_index = 6; - } - else if ( nchan_ism == 4 ) - { - bits_index = 7; - } - else - { - assert( ( nchan_ism >= 2 && nchan_ism <= 4 ) && "Wrong number of objects for MASA_ISM." ); - } - - return bits_index; -} -#endif /*--------------------------------------------------------------- * calculate_nbits_meta() @@ -823,66 +475,7 @@ int16_t bits_index_ism_ratio( * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void calculate_nbits_meta( - const int16_t nchan_ism, - float q_energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - const int16_t numSf, - const int16_t numCodingBands, - int16_t *bits_ism, - const int16_t idx_sep_obj, - const int16_t ism_imp ) -{ - int16_t sf, band, obj; - float priority[MAX_NUM_OBJECTS], max_p; - - if ( nchan_ism > 1 ) - { - set_f( priority, 0.0f, nchan_ism ); - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - for ( obj = 0; obj < nchan_ism; obj++ ) - { - priority[obj] = max( priority[obj], ( q_energy_ratio_ism[sf][band][obj] * ( 1 - masa_to_total_energy_ratio[sf][band] ) ) ); - } - } - } - } - else - { - priority[0] = 1; - } - - /* decide parameters for ISM metadata quantization */ - maximum( priority, nchan_ism, &max_p ); - for ( obj = 0; obj < nchan_ism; obj++ ) - { - if ( obj == idx_sep_obj ) - { - if ( ism_imp == 3 ) - { - priority[obj] = 1; - } - else if ( ism_imp == 2 ) - { - priority[obj] = ( 1 + max_p ) * 0.5f; - } - else - { - priority[obj] = max_p; - } - } - bits_ism[obj] = bits_direction_masa[0] - (int16_t) ( ( 1 - ( (int16_t) ( priority[obj] * 1000.0f ) ) * 0.001f ) * 6 ); - // bits_ism[obj] = bits_direction_masa[0] - (int16_t) ( ( 1 - ( priority[obj] ) ) * 6 ); - } - - return; -} -#else -static Word16 get_bits_ism( +static Word16 get_bits_ism_fx( Word32 val // Q29 ) { @@ -996,12 +589,11 @@ void calculate_nbits_meta_fx( move32(); } } - bits_ism[obj] = sub( bits_direction_masa[0], get_bits_ism( priority[obj] ) ); + bits_ism[obj] = sub( bits_direction_masa[0], get_bits_ism_fx( priority[obj] ) ); move16(); } return; } -#endif /*--------------------------------------------------------------- @@ -1010,49 +602,10 @@ void calculate_nbits_meta_fx( * *---------------------------------------------------------------*/ -void ivas_get_stereo_panning_gains( - const float aziDeg, - const float eleDeg, - float panningGains[2] ) -{ - float aziRad, eleRad; - float y, mappedX, aziRadMapped, A, A2, A3; - const float LsAngleRad = 30.0f * PI_OVER_180; - /* Convert azi and ele to an azi value of the cone of confusion */ - aziRad = aziDeg * PI_OVER_180; - eleRad = eleDeg * PI_OVER_180; - y = ( sinf( aziRad ) * cosf( eleRad ) ); - mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); - aziRadMapped = atan2f( y, mappedX ); - - if ( aziRadMapped >= LsAngleRad ) - { /* Left side */ - panningGains[0] = 1.0f; - panningGains[1] = 0.0f; - } - else if ( aziRadMapped <= -LsAngleRad ) - { /* Right side */ - panningGains[0] = 0.0f; - panningGains[1] = 1.0f; - } - else /* Tangent panning law */ - { - A = tanf( aziRadMapped ) / tanf( LsAngleRad ); - A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); - A3 = 1.0f / ( A2 * A2 + 1.0f ); - panningGains[0] = sqrtf( A3 ); - panningGains[1] = sqrtf( 1.0f - A3 ); - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED - #define SIN_NEG_30_DEGREES_Q15 ( (Word16) 0xC000 ) #define SIN_30_DEGREES_Q15 ( (Word16) 0x4000 ) -void get_panning_gain( +void get_panning_gain_fx( const Word16 sinAngleMapped, // Q15 Word16 *panningGains // Q15 ) @@ -1190,12 +743,11 @@ void ivas_get_stereo_panning_gains_fx( } ELSE /* Tangent panning law */ { - get_panning_gain( sin_az_cos_el, panningGains ); + get_panning_gain_fx( sin_az_cos_el, panningGains ); } return; } -#endif /*--------------------------------------------------------------- @@ -1205,7 +757,6 @@ void ivas_get_stereo_panning_gains_fx( *---------------------------------------------------------------*/ /*! r: limitation flag */ -#ifdef IVAS_FLOAT_FIXED Word16 calculate_brate_limit_flag_fx( const Word16 ism_imp[], /* i : ISM importance flags */ const Word16 nchan_ism /* i : number of objects */ @@ -1253,39 +804,3 @@ Word16 calculate_brate_limit_flag_fx( return brate_limit_flag; } -#else -int16_t calculate_brate_limit_flag( - const int16_t ism_imp[], /* i : ISM importance flags */ - const int16_t nchan_ism /* i : number of objects */ -) -{ - int16_t n; - int16_t brate_limit_flag; - int16_t nzeros; - - brate_limit_flag = 0; - nzeros = 0; - for ( n = 0; n < nchan_ism; n++ ) - { - brate_limit_flag += ism_imp[n]; - if ( ism_imp[n] == 0 ) - { - nzeros++; - } - } - - if ( brate_limit_flag >= (int16_t) ( nchan_ism * 2.5f ) ) - { - brate_limit_flag = 1; - } - else - { - if ( nzeros / (float) nchan_ism >= 0.5f ) - { - brate_limit_flag = -1; /* there is no limitation, on the contrary */ - } - } - - return brate_limit_flag; -} -#endif diff --git a/lib_com/ivas_pca_tools.c b/lib_com/ivas_pca_tools.c index e23a926be..6ccc07523 100644 --- a/lib_com/ivas_pca_tools.c +++ b/lib_com/ivas_pca_tools.c @@ -39,36 +39,15 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* * eye_matrix() * *---------------------------------------------------------------------*/ -void eye_matrix( - float *mat, - const int16_t n, - const float d ) -{ - int16_t i; - - for ( i = 0; i < n * n; i++ ) - { - mat[i] = 0.0f; - } - for ( i = 0; i < n; i++ ) - { - mat[i * n + i] = d; - } - - return; -} - -static Word16 check_bound( Word32 tmp ) +static Word16 check_bound_fx( Word32 tmp ) { IF( GT_32( tmp, MAX16B ) ) { @@ -84,7 +63,6 @@ static Word16 check_bound( Word32 tmp ) } } -#ifdef IVAS_FLOAT_FIXED void eye_matrix_fx( Word16 *mat, // Q const Word16 n, @@ -128,56 +106,12 @@ void eye_matrix_fx32( return; } -#endif /*---------------------------------------------------------------------* * cov() * * Compute covariance of input channels *---------------------------------------------------------------------*/ -void cov_subfr( - float **ptr_sig, - float *r, - const int16_t n_channels, - const int16_t len ) -{ - float s; - int16_t j, k, l; - float *t, *tt; - - /* Compute diagonal r[k][k] */ - for ( k = 0; k < n_channels; k++ ) - { - t = &ptr_sig[k][0]; - s = t[0] * t[0]; - for ( j = 1; j < len; j++ ) - { - s += t[j] * t[j]; - } - r[k * n_channels + k] = s; - } - - /* Compute off-diagonal r[k][l] = r[l][k] */ - for ( k = 0; k < ( n_channels - 1 ); k++ ) - { - t = &ptr_sig[k][0]; - for ( l = k + 1; l < n_channels; l++ ) - { - tt = &ptr_sig[l][0]; - s = t[0] * tt[0]; - for ( j = 1; j < len; j++ ) - { - s += t[j] * tt[j]; - } - r[k * n_channels + l] = s; - r[l * n_channels + k] = s; - } - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED void cov_subfr_fx( Word32 **ptr_sig_fx, // Q11 Word64 *r_fx_64, // Q11 @@ -227,52 +161,6 @@ void cov_subfr_fx( return; } -#endif - -static void house_refl( - const float *px, - const int16_t sizex, - float *pu, - float *normu ) -{ - int16_t i; - - mvr2r( px, pu, sizex ); - ( *normu ) = dotp( pu, pu, sizex ); - ( *normu ) = sqrtf( *normu ); - - if ( ( *normu ) == 0.f ) - { - pu[0] = SQRT2; - } - else - { - float rcp = 1.f / ( *normu ); - - for ( i = 0; i < sizex; i++ ) - { - pu[i] *= rcp; - } - if ( pu[0] >= 0.f ) - { - pu[0] += 1; - ( *normu ) = -( *normu ); - } - else - { - pu[0] -= 1; - } - - rcp = inv_sqrt( fabsf( pu[0] ) ); - - for ( i = 0; i < sizex; i++ ) - { - pu[i] *= rcp; - } - } - - return; -} static void house_refl_fx( const Word32 *px_fx, // Q: px_q @@ -386,92 +274,6 @@ static void house_refl_fx( return; } -static void house_qr( - const float *pA, - float *pQ, - float *pR, - const int16_t n ) -{ - int16_t n_rows = FOA_CHANNELS; - float A[FOA_CHANNELS * FOA_CHANNELS]; - float U[FOA_CHANNELS * FOA_CHANNELS]; - float pu[FOA_CHANNELS]; - float pa[FOA_CHANNELS]; - float pv[FOA_CHANNELS]; - int16_t i, j, k, c, s, r; - - mvr2r( pA, A, FOA_CHANNELS * FOA_CHANNELS ); - set_zero( U, FOA_CHANNELS * FOA_CHANNELS ); - set_zero( pR, FOA_CHANNELS * FOA_CHANNELS ); - - for ( k = 0; k < n_rows; k++ ) - { - for ( i = 0; i < n_rows; i++ ) - { - pa[i] = A[i * n + k]; - } - - house_refl( &pa[k], n_rows - k, pu, &pR[k * n_rows + k] ); - U[k * n_rows + k] = pu[0]; - for ( c = k + 1; c < n_rows; c++ ) - { - for ( i = 0; i < n_rows; i++ ) - { - pa[i] = A[i * n + c]; - } - pv[c - k - 1] = dotp( pu, &pa[k], n_rows - k ); - U[c * n_rows + k] = pu[c - k]; - } - - i = 0; - for ( s = k; s < n_rows; s++ ) - { - j = 0; - for ( r = k + 1; r < n_rows; r++ ) - { - A[s * n_rows + r] -= ( pu[i] * pv[j] ); - j++; - } - i++; - } - - for ( r = k + 1; r < n_rows; r++ ) - { - pR[k * n_rows + r] = A[k * n_rows + r]; - } - } - - eye_matrix( pQ, FOA_CHANNELS, 1.0f ); - - for ( k = FOA_CHANNELS - 1; k >= 0; k-- ) - { - for ( i = 0; i < n_rows; i++ ) - { - pu[i] = U[i * n + k]; - } - - for ( s = k; s < n_rows; s++ ) - { - for ( i = 0; i < n_rows; i++ ) - { - pa[i] = pQ[i * n + s]; - } - pv[s - k] = dotp( &pu[k], &pa[k], n_rows - k ); - } - for ( s = k; s < n_rows; s++ ) - { - for ( r = k; r < n_rows; r++ ) - { - pQ[s * n_rows + r] -= U[s * n_rows + k] * pv[r - k]; - } - } - } - - return; -} - - -#ifdef IVAS_FLOAT_FIXED static void house_qr_fx( const Word32 *pA_fx, // Q: pA_q Word16 pA_q, @@ -616,7 +418,6 @@ static void house_qr_fx( return; } -#endif /*---------------------------------------------------------------------* * eig_qr() @@ -624,76 +425,6 @@ static void house_qr_fx( * Compute eigenvalue decomposition by QR method *---------------------------------------------------------------------*/ -void eig_qr( - const float *A, - const int16_t num_iter, - float *EV, - float *Vals, - const int16_t n ) -{ - int16_t i; - int16_t breakcnd, iter_num; - float Ak[FOA_CHANNELS * FOA_CHANNELS], Qk[FOA_CHANNELS * FOA_CHANNELS], Rk[FOA_CHANNELS * FOA_CHANNELS], D[FOA_CHANNELS * FOA_CHANNELS], d; - - assert( n <= FOA_CHANNELS ); - breakcnd = 1; - iter_num = 0; - - /* check zero matrix */ - d = dotp( A, A, n * n ); - if ( d != 0. ) - { - breakcnd = 0; - } - - /* duplicate */ - mvr2r( A, Ak, n * n ); - - /* identity */ - set_zero( EV, n * n ); - for ( i = 0; i < n; i++ ) - { - EV[i * n + i] = 1.0f; - } - - set_zero( Vals, n ); - while ( breakcnd == 0 ) - { - iter_num++; - mvr2r( Ak, D, n * n ); - - /* set diagonal */ - for ( i = 0; i < n; i++ ) - { - D[i * n + i] = Vals[i]; - } - - /* stop condition */ - d = dotp( D, D, n * n ); - d = sqrtf( d ); /* Frobenius norm */ - - if ( ( d < 1e-10f ) || ( iter_num >= num_iter ) ) - { - breakcnd = 1; - } - house_qr( Ak, Qk, Rk, n ); - - matrix_product( Qk, n, n, 0, Rk, n, n, 0, Ak ); - matrix_product( Qk, n, n, 0, EV, n, n, 0, D ); - - mvr2r( D, EV, n * n ); - } - - /* get diagonal */ - for ( i = 0; i < n; i++ ) - { - Vals[i] = Ak[i * n + i]; - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED void eig_qr_fx( const Word32 *A_fx, // A_q Word16 A_q, @@ -781,7 +512,6 @@ void eig_qr_fx( } return; } -#endif /*---------------------------------------------------------------------* * exhst_4x4() @@ -789,59 +519,6 @@ void eig_qr_fx( * Find optimal permutation of eigenvectors *---------------------------------------------------------------------*/ -void exhst_4x4( - float *cost_mtx, - int16_t *path, - const int16_t maximize ) -{ - int16_t i, j, k, l; - float opt_val, cost; - - if ( maximize == 0 ) - { - opt_val = 1e30f; - } - else - { - opt_val = -1e30f; - } - - for ( i = 0; i < 1; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - if ( j != i ) - { - for ( k = 0; k < 4; k++ ) - { - if ( ( k != i ) && ( k != j ) ) - { - for ( l = 0; l < 4; l++ ) - { - if ( ( l != i ) && ( l != j ) && ( l != k ) ) - { - cost = cost_mtx[0 * 4 + i] + cost_mtx[1 * 4 + j] + cost_mtx[2 * 4 + k] + cost_mtx[3 * 4 + l]; - if ( ( ( maximize == 0 ) && ( opt_val > cost ) ) || ( ( maximize != 0 ) && ( opt_val < cost ) ) ) - { - opt_val = cost; - path[0] = i; - path[1] = j; - path[2] = k; - path[3] = l; - } - } - } - } - } - } - } - } - - return; -} - - -#ifdef IVAS_FLOAT_FIXED void exhst_4x4_fx( Word16 *cost_mtx, // Q Word16 *path, @@ -906,7 +583,6 @@ void exhst_4x4_fx( return; } -#endif /*---------------------------------------------------------------------* * mat2dquat() @@ -914,93 +590,6 @@ void exhst_4x4_fx( * Convert 4D matrix -> double quaternion *---------------------------------------------------------------------*/ -void mat2dquat( - const float *a, - float *ql, - float *qr ) -{ - float AM[16], M2[16], tmp_l, tmp_r, temp, ql_max, qr_max; - int16_t i, j, k, i_ql, i_qr; - - /* compute associate matrix */ - AM[0 * 4 + 0] = ( a[0 * 4 + 0] + a[1 * 4 + 1] + a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; - AM[1 * 4 + 0] = ( a[1 * 4 + 0] - a[0 * 4 + 1] + a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; - AM[2 * 4 + 0] = ( a[2 * 4 + 0] - a[3 * 4 + 1] - a[0 * 4 + 2] + a[1 * 4 + 3] ) / 4.0f; - AM[3 * 4 + 0] = ( a[3 * 4 + 0] + a[2 * 4 + 1] - a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; - AM[0 * 4 + 1] = ( a[1 * 4 + 0] - a[0 * 4 + 1] - a[3 * 4 + 2] + a[2 * 4 + 3] ) / 4.0f; - AM[1 * 4 + 1] = ( -a[0 * 4 + 0] - a[1 * 4 + 1] + a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; - AM[2 * 4 + 1] = ( -a[3 * 4 + 0] - a[2 * 4 + 1] - a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; - AM[3 * 4 + 1] = ( a[2 * 4 + 0] - a[3 * 4 + 1] + a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; - AM[0 * 4 + 2] = ( a[2 * 4 + 0] + a[3 * 4 + 1] - a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; - AM[1 * 4 + 2] = ( a[3 * 4 + 0] - a[2 * 4 + 1] - a[1 * 4 + 2] + a[0 * 4 + 3] ) / 4.0f; - AM[2 * 4 + 2] = ( -a[0 * 4 + 0] + a[1 * 4 + 1] - a[2 * 4 + 2] + a[3 * 4 + 3] ) / 4.0f; - AM[3 * 4 + 2] = ( -a[1 * 4 + 0] - a[0 * 4 + 1] - a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; - AM[0 * 4 + 3] = ( a[3 * 4 + 0] - a[2 * 4 + 1] + a[1 * 4 + 2] - a[0 * 4 + 3] ) / 4.0f; - AM[1 * 4 + 3] = ( -a[2 * 4 + 0] - a[3 * 4 + 1] - a[0 * 4 + 2] - a[1 * 4 + 3] ) / 4.0f; - AM[2 * 4 + 3] = ( a[1 * 4 + 0] + a[0 * 4 + 1] - a[3 * 4 + 2] - a[2 * 4 + 3] ) / 4.0f; - AM[3 * 4 + 3] = ( -a[0 * 4 + 0] + a[1 * 4 + 1] + a[2 * 4 + 2] - a[3 * 4 + 3] ) / 4.0f; - - /* compute squared matrix */ - for ( i = 0; i < 16; i++ ) - { - M2[i] = AM[i] * AM[i]; - } - - /* determine (absolute) left and right terms */ - i_ql = 0; - i_qr = 0; - ql_max = -1; - qr_max = -1; - - for ( i = 0; i < 4; i++ ) - { - tmp_l = 0.f; - tmp_r = 0.f; - for ( j = 0; j < 4; j++ ) - { - /* sum over row */ - tmp_l += M2[i * 4 + j]; - /* sum over column */ - tmp_r += M2[j * 4 + i]; - } - - ql[i] = sqrtf( tmp_l ); - if ( ql[i] > ql_max ) - { - ql_max = ql[i]; - i_ql = i; - } - - qr[i] = sqrtf( tmp_r ); - if ( qr[i] > qr_max ) - { - qr_max = qr[i]; - i_qr = i; - } - } - - /* set signs */ - for ( k = 0; k < 4; k++ ) - { - if ( AM[i_ql * 4 + k] < 0 ) - { - qr[k] = -qr[k]; - } - } - - for ( k = 0; k < 4; k++ ) - { - temp = AM[k * 4 + i_qr] * ( ql[k] * qr[i_qr] ); - if ( temp < 0 ) - { - ql[k] = -ql[k]; - } - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED void mat2dquat_fx( const Word16 *a, // Q15 Word16 *ql, // Q15 @@ -1015,22 +604,22 @@ void mat2dquat_fx( /* compute associate matrix */ /* Q: Q15*/ - AM[0 * 4 + 0] = check_bound( L_shr( L_add( L_add( L_add( a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); - AM[1 * 4 + 0] = check_bound( L_shr( L_sub( L_add( L_sub( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); - AM[2 * 4 + 0] = check_bound( L_shr( L_add( L_sub( L_sub( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); - AM[3 * 4 + 0] = check_bound( L_shr( L_sub( L_sub( L_add( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); - AM[0 * 4 + 1] = check_bound( L_shr( L_add( L_sub( L_sub( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); - AM[1 * 4 + 1] = check_bound( L_shr( L_add( L_add( L_sub( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); - AM[2 * 4 + 1] = check_bound( L_shr( L_sub( L_sub( L_sub( -a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); - AM[3 * 4 + 1] = check_bound( L_shr( L_sub( L_add( L_sub( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); - AM[0 * 4 + 2] = check_bound( L_shr( L_sub( L_sub( L_add( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); - AM[1 * 4 + 2] = check_bound( L_shr( L_add( L_sub( L_sub( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); - AM[2 * 4 + 2] = check_bound( L_shr( L_add( L_sub( L_add( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); - AM[3 * 4 + 2] = check_bound( L_shr( L_sub( L_sub( L_sub( -a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); - AM[0 * 4 + 3] = check_bound( L_shr( L_sub( L_add( L_sub( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); - AM[1 * 4 + 3] = check_bound( L_shr( L_sub( L_sub( L_sub( -a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); - AM[2 * 4 + 3] = check_bound( L_shr( L_sub( L_sub( L_add( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); - AM[3 * 4 + 3] = check_bound( L_shr( L_sub( L_add( L_add( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); + AM[0 * 4 + 0] = check_bound_fx( L_shr( L_add( L_add( L_add( a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); + AM[1 * 4 + 0] = check_bound_fx( L_shr( L_sub( L_add( L_sub( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); + AM[2 * 4 + 0] = check_bound_fx( L_shr( L_add( L_sub( L_sub( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); + AM[3 * 4 + 0] = check_bound_fx( L_shr( L_sub( L_sub( L_add( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); + AM[0 * 4 + 1] = check_bound_fx( L_shr( L_add( L_sub( L_sub( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); + AM[1 * 4 + 1] = check_bound_fx( L_shr( L_add( L_add( L_sub( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); + AM[2 * 4 + 1] = check_bound_fx( L_shr( L_sub( L_sub( L_sub( -a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); + AM[3 * 4 + 1] = check_bound_fx( L_shr( L_sub( L_add( L_sub( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); + AM[0 * 4 + 2] = check_bound_fx( L_shr( L_sub( L_sub( L_add( a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); + AM[1 * 4 + 2] = check_bound_fx( L_shr( L_add( L_sub( L_sub( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); + AM[2 * 4 + 2] = check_bound_fx( L_shr( L_add( L_sub( L_add( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); + AM[3 * 4 + 2] = check_bound_fx( L_shr( L_sub( L_sub( L_sub( -a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); + AM[0 * 4 + 3] = check_bound_fx( L_shr( L_sub( L_add( L_sub( a[3 * 4 + 0], a[2 * 4 + 1] ), a[1 * 4 + 2] ), a[0 * 4 + 3] ), 2 ) ); + AM[1 * 4 + 3] = check_bound_fx( L_shr( L_sub( L_sub( L_sub( -a[2 * 4 + 0], a[3 * 4 + 1] ), a[0 * 4 + 2] ), a[1 * 4 + 3] ), 2 ) ); + AM[2 * 4 + 3] = check_bound_fx( L_shr( L_sub( L_sub( L_add( a[1 * 4 + 0], a[0 * 4 + 1] ), a[3 * 4 + 2] ), a[2 * 4 + 3] ), 2 ) ); + AM[3 * 4 + 3] = check_bound_fx( L_shr( L_sub( L_add( L_add( -a[0 * 4 + 0], a[1 * 4 + 1] ), a[2 * 4 + 2] ), a[3 * 4 + 3] ), 2 ) ); move16(); move16(); @@ -1080,14 +669,14 @@ void mat2dquat_fx( FOR( j = 0; j < 4; j++ ) { /* sum over row */ - tmp_l_e = BASOP_Util_Add_MantExp( tmp_l, tmp_l_e, check_bound( M2_fx[i * 4 + j] ), 0, &tmp_l ); + tmp_l_e = BASOP_Util_Add_MantExp( tmp_l, tmp_l_e, check_bound_fx( M2_fx[i * 4 + j] ), 0, &tmp_l ); /* sum over column */ - tmp_r_e = BASOP_Util_Add_MantExp( tmp_r, tmp_r_e, check_bound( M2_fx[j * 4 + i] ), 0, &tmp_r ); + tmp_r_e = BASOP_Util_Add_MantExp( tmp_r, tmp_r_e, check_bound_fx( M2_fx[j * 4 + i] ), 0, &tmp_r ); } - ql[i] = Sqrt16( tmp_l, &tmp_l_e ); // tmp_l_e - ql[i] = check_bound( L_shl( ql[i], tmp_l_e ) ); // Q15 + ql[i] = Sqrt16( tmp_l, &tmp_l_e ); // tmp_l_e + ql[i] = check_bound_fx( L_shl( ql[i], tmp_l_e ) ); // Q15 move16(); move16(); IF( GT_16( ql[i], ql_max ) ) @@ -1098,8 +687,8 @@ void mat2dquat_fx( move16(); } - qr[i] = Sqrt16( tmp_r, &tmp_r_e ); // tmp_r_e - qr[i] = check_bound( L_shl( qr[i], tmp_r_e ) ); // Q15 + qr[i] = Sqrt16( tmp_r, &tmp_r_e ); // tmp_r_e + qr[i] = check_bound_fx( L_shl( qr[i], tmp_r_e ) ); // Q15 move16(); move16(); IF( GT_16( qr[i], qr_max ) ) @@ -1134,7 +723,6 @@ void mat2dquat_fx( return; } -#endif /*---------------------------------------------------------------------* * dquat2mat() @@ -1142,64 +730,6 @@ void mat2dquat_fx( * Convert double quaternion -> 4D matrix *---------------------------------------------------------------------*/ -void dquat2mat( - const float *ql, - const float *qr, - float *m ) -{ - float a, b, c, d; - float w, x, y, z; - float aw, ax, ay, az; - float bw, bx, by, bz; - float cw, cx, cy, cz; - float dw, dx, dy, dz; - - a = ql[0]; - b = ql[1]; - c = ql[2]; - d = ql[3]; - w = qr[0]; - x = qr[1]; - y = qr[2]; - z = qr[3]; - aw = a * w; - ax = a * x; - ay = a * y; - az = a * z; - bw = b * w; - bx = b * x; - by = b * y; - bz = b * z; - cw = c * w; - cx = c * x; - cy = c * y; - cz = c * z; - dw = d * w; - dx = d * x; - dy = d * y; - dz = d * z; - m[0] = aw - bx - cy - dz; - m[1] = -ax - bw + cz - dy; - m[2] = -ay - bz - cw + dx; - m[3] = -az + by - cx - dw; - m[4] = bw + ax - dy + cz; - m[5] = -bx + aw + dz + cy; - m[6] = -by + az - dw - cx; - m[7] = -bz - ay - dx + cw; - m[8] = cw + dx + ay - bz; - m[9] = -cx + dw - az - by; - m[10] = -cy + dz + aw + bx; - m[11] = -cz - dy + ax - bw; - m[12] = dw - cx + by + az; - m[13] = -dx - cw - bz + ay; - m[14] = -dy - cz + bw - ax; - m[15] = -dz + cy + bx + aw; - - return; -} - - -#ifdef IVAS_FLOAT_FIXED void dquat2mat_fx( const Word16 *ql, // Q15 const Word16 *qr, // Q15 @@ -1246,99 +776,47 @@ void dquat2mat_fx( dy = mult( d, y ); dz = mult( d, z ); // Q15 - m[0] = check_bound( L_sub( L_sub( aw, bx ), L_add( cy, dz ) ) ); + m[0] = check_bound_fx( L_sub( L_sub( aw, bx ), L_add( cy, dz ) ) ); move16(); - m[1] = check_bound( L_sub( L_sub( cz, dy ), L_add( ax, bw ) ) ); + m[1] = check_bound_fx( L_sub( L_sub( cz, dy ), L_add( ax, bw ) ) ); move16(); - m[2] = check_bound( L_add( L_sub( L_sub( negate( ay ), bz ), cw ), dx ) ); + m[2] = check_bound_fx( L_add( L_sub( L_sub( negate( ay ), bz ), cw ), dx ) ); move16(); - m[3] = check_bound( L_sub( L_sub( by, az ), L_add( cx, dw ) ) ); + m[3] = check_bound_fx( L_sub( L_sub( by, az ), L_add( cx, dw ) ) ); move16(); - m[4] = check_bound( L_add( L_sub( L_add( bw, ax ), dy ), cz ) ); + m[4] = check_bound_fx( L_add( L_sub( L_add( bw, ax ), dy ), cz ) ); move16(); - m[5] = check_bound( L_add( L_add( L_add( negate( bx ), aw ), dz ), cy ) ); + m[5] = check_bound_fx( L_add( L_add( L_add( negate( bx ), aw ), dz ), cy ) ); move16(); - m[6] = check_bound( L_sub( L_sub( L_add( negate( by ), az ), dw ), cx ) ); + m[6] = check_bound_fx( L_sub( L_sub( L_add( negate( by ), az ), dw ), cx ) ); move16(); - m[7] = check_bound( L_add( L_sub( L_sub( negate( bz ), ay ), dx ), cw ) ); + m[7] = check_bound_fx( L_add( L_sub( L_sub( negate( bz ), ay ), dx ), cw ) ); move16(); - m[8] = check_bound( L_sub( L_add( L_add( cw, dx ), ay ), bz ) ); + m[8] = check_bound_fx( L_sub( L_add( L_add( cw, dx ), ay ), bz ) ); move16(); - m[9] = check_bound( L_sub( L_sub( L_add( negate( cx ), dw ), az ), by ) ); + m[9] = check_bound_fx( L_sub( L_sub( L_add( negate( cx ), dw ), az ), by ) ); move16(); - m[10] = check_bound( L_add( L_add( L_add( negate( cy ), dz ), aw ), bx ) ); + m[10] = check_bound_fx( L_add( L_add( L_add( negate( cy ), dz ), aw ), bx ) ); move16(); - m[11] = check_bound( L_sub( L_add( L_sub( negate( cz ), dy ), ax ), bw ) ); + m[11] = check_bound_fx( L_sub( L_add( L_sub( negate( cz ), dy ), ax ), bw ) ); move16(); - m[12] = check_bound( L_add( L_add( L_sub( dw, cx ), by ), az ) ); + m[12] = check_bound_fx( L_add( L_add( L_sub( dw, cx ), by ), az ) ); move16(); - m[13] = check_bound( L_add( L_sub( L_sub( negate( dx ), cw ), bz ), ay ) ); + m[13] = check_bound_fx( L_add( L_sub( L_sub( negate( dx ), cw ), bz ), ay ) ); move16(); - m[14] = check_bound( L_sub( L_add( L_sub( negate( dy ), cz ), bw ), ax ) ); + m[14] = check_bound_fx( L_sub( L_add( L_sub( negate( dy ), cz ), bw ), ax ) ); move16(); - m[15] = check_bound( L_add( L_add( L_add( negate( dz ), cy ), bx ), aw ) ); + m[15] = check_bound_fx( L_add( L_add( L_add( negate( dz ), cy ), bx ), aw ) ); move16(); return; } -#endif /*---------------------------------------------------------------------* * quat_shortestpath() * * Shortest path verification (prior to quaternion interpolation) *---------------------------------------------------------------------*/ -void quat_shortestpath( - const float *q00, - float *q01, - const float *q10, - float *q11 ) -{ - float d0, d1; - int16_t res, i; - - d0 = dotp( q00, q01, IVAS_PCA_INTERP ); - d1 = dotp( q10, q11, IVAS_PCA_INTERP ); - - res = 0; - if ( ( d0 < 0. ) && ( d1 < 0. ) ) - { - res = 1; - } - else - { - if ( d0 < 0. ) - { - if ( ( -d0 ) > d1 ) - { - res = 1; - } - } - else - { - if ( d1 < 0. ) - { - if ( ( -d1 ) > d0 ) - { - res = 1; - } - } - } - } - - if ( res ) - { - for ( i = 0; i < IVAS_PCA_INTERP; i++ ) - { - q01[i] = -q01[i]; - q11[i] = -q11[i]; - } - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED // Not tested void quat_shortestpath_fx( const Word16 *q00, @@ -1401,50 +879,17 @@ void quat_shortestpath_fx( return; } -#endif /*---------------------------------------------------------------------* * mat_det4() * * Compute determinant of 4D matrix - brute-force version *---------------------------------------------------------------------*/ -float mat_det4( - const float *m ) +Word16 mat_det4_fx( + const Word16 *m // Q15 +) { - float d; - -#define a11 m[0] -#define a12 m[1] -#define a13 m[2] -#define a14 m[3] -#define a21 m[4] -#define a22 m[5] -#define a23 m[6] -#define a24 m[7] -#define a31 m[8] -#define a32 m[9] -#define a33 m[10] -#define a34 m[11] -#define a41 m[12] -#define a42 m[13] -#define a43 m[14] -#define a44 m[15] - - /* 4! = 24 terms -> complexity = 24x(4 INDIRECT + 3 MULT) + 23 ADD */ - d = a11 * a22 * a33 * a44 + a11 * a24 * a32 * a43 + a11 * a23 * a34 * a42 - a11 * a24 * a33 * a42 - a11 * a22 * a34 * a43 - - a11 * a23 * a32 * a44 - a12 * a21 * a33 * a44 - a12 * a23 * a34 * a41 - a12 * a24 * a31 * a43 + a12 * a24 * a33 * a41 + - a12 * a21 * a34 * a43 + a12 * a23 * a31 * a44 + a13 * a21 * a32 * a44 + a13 * a22 * a34 * a41 + a13 * a24 * a31 * a42 - - a13 * a24 * a32 * a41 - a13 * a21 * a34 * a42 - a13 * a22 * a31 * a44 - a14 * a21 * a32 * a43 - a14 * a22 * a33 * a41 - - a14 * a23 * a31 * a42 + a14 * a23 * a32 * a41 + a14 * a21 * a33 * a42 + a14 * a22 * a31 * a43; - - return d; -} - -Word16 mat_det4_fx( - const Word16 *m // Q15 -) -{ - Word16 d; + Word16 d; #define a11 m[0] #define a12 m[1] @@ -1488,30 +933,9 @@ Word16 mat_det4_fx( return d; // Q15 } - -static void norm_quat( - float *q ) -{ - float norm_q; - int16_t i; - - norm_q = dotp( q, q, IVAS_PCA_INTERP ); - - norm_q = inv_sqrt( norm_q ); // TODO: possible division by 0 - - for ( i = 0; i < IVAS_PCA_INTERP; i++ ) - { - q[i] *= norm_q; - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED - -static Word32 dotp16_fixed_guarded( const Word16 x[], /* i : vector x[] Qx */ - const Word16 y[], /* i : vector y[] Qy */ - const Word16 n /* i : vector length */ ) +static Word32 dotp16_fixed_guarded_fx( const Word16 x[], /* i : vector x[] Qx */ + const Word16 y[], /* i : vector y[] Qy */ + const Word16 n /* i : vector length */ ) { Word16 i; Word32 suma; @@ -1534,7 +958,7 @@ static void norm_quat_fx( Word16 i, exp1; exp1 = 0; move16(); - norm_q = dotp16_fixed_guarded( q, q, IVAS_PCA_INTERP ); // (Q15 + Q15 - Q15) - exp1 + norm_q = dotp16_fixed_guarded_fx( q, q, IVAS_PCA_INTERP ); // (Q15 + Q15 - Q15) - exp1 exp1 = find_guarded_bits_fx( IVAS_PCA_INTERP ); norm_q = ISqrt32( norm_q, &exp1 ); /*Q(31 - exp)*/ @@ -1546,27 +970,7 @@ static void norm_quat_fx( return; } -#endif - -static void quat_nlerp_preproc( - const float *q0, - const float *q1, - const float alpha, - float *q_slerp ) -{ - int16_t i; - - for ( i = 0; i < IVAS_PCA_INTERP; i++ ) - { - q_slerp[i] = alpha * q0[i] + ( 1.0f - alpha ) * q1[i]; - } - - norm_quat( q_slerp ); - - return; -} -#ifdef IVAS_FLOAT_FIXED static void quat_nlerp_preproc_fx( const Word16 *q0, // Q15 const Word16 *q1, // Q15 @@ -1595,32 +999,7 @@ static void quat_nlerp_preproc_fx( return; } -#endif - -void pca_interp_preproc( - const float *prev_ql, - const float *prev_qr, - const float *ql, - const float *qr, - const int16_t len, - float *ql_interp, - float *qr_interp ) -{ - float alpha; - int16_t j; - - for ( j = 0; j < len; j++ ) - { - alpha = (float) j / (float) ( len - 1 ); // the increment can be updated by simple delta - alpha = 0.5f * ( 1.f - cosf( EVS_PI * alpha ) ); - alpha = 1 - alpha; - quat_nlerp_preproc( prev_ql, ql, alpha, &ql_interp[j * IVAS_PCA_INTERP] ); - quat_nlerp_preproc( prev_qr, qr, alpha, &qr_interp[j * IVAS_PCA_INTERP] ); - } - return; -} -#ifdef IVAS_FLOAT_FIXED void pca_interp_preproc_fx( const Word16 *prev_ql, // Q15 const Word16 *prev_qr, // Q15 @@ -1657,21 +1036,7 @@ void pca_interp_preproc_fx( return; } -#endif - -static float acos_clip( - float v ) -{ - float ph; - v = check_bounds( v, -1.0f, 1.0f ); - - ph = acosf( v ); - - return ph; -} - -#ifdef IVAS_FLOAT_FIXED static Word16 acos_clip_fx( Word16 v_fx // Q15 ) @@ -1695,28 +1060,7 @@ static Word16 acos_clip_fx( return ph_fx; // Q13 } -#endif - -static void sp2cart( - const float ph1, - const float ph2, - const float ph3, - float *q ) -{ - float s1, s2, s1s2; - - s1 = sinf( ph1 ); - s2 = sinf( ph2 ); - s1s2 = s1 * s2; - q[3] = sinf( ph3 ) * s1s2; - q[2] = cosf( ph3 ) * s1s2; - q[1] = cosf( ph2 ) * s1; - q[0] = cosf( ph1 ); - - return; -} -#ifdef IVAS_FLOAT_FIXED static void sp2cart_fx( const Word16 ph1, // Q12 const Word16 ph2, // Q12 @@ -1753,23 +1097,7 @@ static void sp2cart_fx( return; } -#endif -static int16_t calc_n2( - const float ph1 ) -{ - int16_t n2; - - n2 = (int16_t) roundf( 90.f * sinf( ph1 ) ); - - if ( n2 % 2 == 0 ) - { - n2++; - } - return n2; -} - -#ifdef IVAS_FLOAT_FIXED static Word16 calc_n2_fx( const Word16 ph1 // Q15 ) @@ -1786,31 +1114,7 @@ static Word16 calc_n2_fx( return n2; // Q0 } -#endif - -static int16_t calc_n3( - const float ph1, - const float ph2 ) -{ - int16_t n3; - - n3 = (int16_t) roundf( 180.f * sinf( ph1 ) * sinf( ph2 ) ); - - if ( n3 == 0 ) - { - n3 = 1; - } - else - { - if ( ( n3 % 2 ) == 1 ) - { - n3++; - } - } - return n3; -} -#ifdef IVAS_FLOAT_FIXED static Word16 calc_n3_fx( const Word16 ph1, const Word16 ph2 ) @@ -1837,66 +1141,6 @@ static Word16 calc_n3_fx( return n3; } -#endif - -static void q_ang_2surv( - const float a, - const int16_t N, - float *a_q, - int16_t *index ) -{ - float d, v; - int16_t temp; - - if ( N == 1 ) - { - a_q[0] = 0.f; - a_q[1] = 0.f; - index[0] = 0; - index[1] = 0; - return; - } - d = EVS_PI / ( N - 1 ); - if ( a >= EVS_PI ) - { - index[0] = N - 1; - index[1] = N - 2; - } - else - { - if ( a <= 0 ) - { - index[0] = 0; - index[1] = 1; - } - else - { - v = a / d; - index[0] = (int16_t) floorf( v ); - index[1] = (int16_t) ceilf( v ); - - if ( index[0] == index[1] ) - { - /*printf("warning: identical indices\n"); */ - } - else - { - if ( ( v - index[0] ) < ( index[1] - v ) ) - { - temp = index[1]; - index[1] = index[0]; - index[0] = temp; - } - } - } - } - a_q[0] = index[0] * d; - a_q[1] = index[1] * d; - - return; -} - -#ifdef IVAS_FLOAT_FIXED static void q_ang_2surv_fx( const Word16 a_fx, // Q13 const Word16 N, @@ -1975,55 +1219,6 @@ static void q_ang_2surv_fx( return; } - -#endif - -static void q_ang_circ( - const float a, - const int16_t N, - float *a_q, - int16_t *index ) -{ - float d; - if ( N == 1 ) - { - *a_q = 0.f; - *index = 0; - - return; - } - - d = PI2 / N; - - if ( a >= PI2 ) - { - *index = N; - } - else - { - if ( a <= 0.f ) - { - *index = 0; - } - else - { - *index = (int16_t) roundf( a / d ); - } - } - - if ( *index == N ) - { - *index = 0; - } - - assert( ( *index >= 0 ) && ( *index <= ( N - 1 ) ) ); - *a_q = *index * d; - - return; -} - - -#ifdef IVAS_FLOAT_FIXED static void q_ang_circ_fx( const Word16 a_fx, // Q13 const Word16 N, @@ -2079,44 +1274,6 @@ static void q_ang_circ_fx( return; } -#endif - -static int16_t sel_q( - const float *q, - const float *q_cand, - const int16_t n ) -{ - int16_t i, i_min, j; - float d, d_min, temp; - const float *p; - - i_min = -1; - d_min = 1e30f; - p = q_cand; - - for ( i = 0; i < n; i++ ) - { - d = 0.f; - for ( j = 0; j < 4; j++ ) - { - temp = q[j] - p[j]; - d += temp * temp; - } - - if ( d < d_min ) - { - d_min = d; - i_min = i; - } - p += 4; - } - assert( i_min >= 0 ); - - return i_min; -} - - -#ifdef IVAS_FLOAT_FIXED static Word16 sel_q_fx( const Word16 *q, // Q12 const Word16 *q_cand, // Q12 @@ -2156,26 +1313,6 @@ static Word16 sel_q_fx( return i_min; } - -#endif - -static int16_t get_pca_offset_n2( - const int16_t index1 ) -{ - int16_t index2; - - if ( index1 <= IVAS_PCA_N1_EQ ) - { - index2 = ivas_pca_offset_n2[index1]; - } - else - { - index2 = ivas_pca_offset_n2[IVAS_PCA_N1 - 1 - index1]; - } - - return index2; -} -#ifdef IVAS_FLOAT_FIXED static Word16 get_pca_offset_n2_fx( const Word16 index1 ) { @@ -2187,13 +1324,12 @@ static Word16 get_pca_offset_n2_fx( } ELSE { - index2 = ivas_pca_offset_n2[sub( sub( IVAS_PCA_N1, 1 ), index1 )]; + index2 = ivas_pca_offset_n2[IVAS_PCA_N1 - 1 - index1]; move16(); } return index2; } -#endif /*---------------------------------------------------------------------* * pca_enc_s3() @@ -2201,114 +1337,6 @@ static Word16 get_pca_offset_n2_fx( * *---------------------------------------------------------------------*/ -void pca_enc_s3( - float *q, - int32_t *index ) -{ - float ph1, ph2, ph3, r, v; - float ph1_q[2], ph2_q[4], ph3_q[4]; - int16_t n1, n2[2], n3[4]; - int16_t ind1[2], ind2[4], ind3[4], index1, index2, index3; - int16_t i, j; - float q_cand[4 * 4]; - - n1 = IVAS_PCA_N1; - ph1 = acos_clip( q[0] ); - if ( fabsf( fabsf( q[0] ) - 1.0f ) < IVAS_PCA_QUAT_EPS ) - { - if ( q[0] > 0 ) - { - *ph1_q = 0.f; - index1 = 0; - } - else - { - *ph1_q = EVS_PI; - index1 = n1 - 1; - } - - sp2cart( *ph1_q, 0.f, 0.f, q ); - - *index = ivas_pca_offset_index1[index1]; - - return; - } - - q_ang_2surv( ph1, n1, ph1_q, ind1 ); - - r = sqrtf( q[1] * q[1] + q[2] * q[2] + q[3] * q[3] ); - - v = q[1] / r; - ph2 = acos_clip( v ); - - if ( fabs( fabs( v ) - 1.0f ) < IVAS_PCA_QUAT_EPS ) - { - for ( i = 0; i < 2; i++ ) - { - n2[i] = calc_n2( ph1_q[i] ); - if ( v > 0 ) - { - ph2_q[i] = 0; - ind2[i] = 0; - } - else - { - ph2_q[i] = EVS_PI; - ind2[i] = n2[i] - 1; - } - - sp2cart( ph1_q[i], ph2_q[i], 0, &q_cand[4 * i] ); - } - - j = sel_q( q, q_cand, 2 ); - - mvr2r( q_cand + 4 * j, q, 4 ); - index1 = ind1[j]; - index2 = ind2[j]; - - index2 += get_pca_offset_n2( index1 ); - - *index = ivas_pca_offset_index1[index1] + ivas_pca_offset_index2[index2]; - - return; - } - - for ( i = 0; i < 2; i++ ) - { - n2[i] = calc_n2( ph1_q[i] ); - q_ang_2surv( ph2, n2[i], ph2_q + 2 * i, ind2 + 2 * i ); - } - r = sqrtf( q[2] * q[2] + q[3] * q[3] ); - v = q[2] / r; - ph3 = acos_clip( v ); - - if ( q[3] < 0 ) - { - ph3 = PI2 - ph3; - } - - for ( i = 0; i < 4; i++ ) - { - n3[i] = calc_n3( ph1_q[i >> 1], ph2_q[i] ); - q_ang_circ( ph3, n3[i], ph3_q + i, ind3 + i ); - sp2cart( ph1_q[i >> 1], ph2_q[i], ph3_q[i], q_cand + ( 4 * i ) ); - } - - j = sel_q( q, q_cand, 4 ); - - mvr2r( q_cand + 4 * j, q, 4 ); - - index1 = ind1[j >> 1]; - index2 = ind2[j]; - index3 = ind3[j]; - index2 += get_pca_offset_n2( index1 ); - - *index = ivas_pca_offset_index1[index1] + ivas_pca_offset_index2[index2] + index3; - - return; -} - -#ifdef IVAS_FLOAT_FIXED void pca_enc_s3_fx( Word16 *q_fx, // Q15 Word32 *index ) @@ -2390,7 +1418,7 @@ void pca_enc_s3_fx( move16(); move16(); - index2 = add( index2, get_pca_offset_n2( index1 ) ); + index2 = add( index2, get_pca_offset_n2_fx( index1 ) ); *index = L_add( ivas_pca_offset_index1[index1], ivas_pca_offset_index2[index2] ); move32(); @@ -2436,14 +1464,13 @@ void pca_enc_s3_fx( move16(); move16(); move16(); - index2 = add( index2, get_pca_offset_n2( index1 ) ); + index2 = add( index2, get_pca_offset_n2_fx( index1 ) ); *index = L_add( L_add( ivas_pca_offset_index1[index1], ivas_pca_offset_index2[index2] ), index3 ); move32(); return; } -#endif /*---------------------------------------------------------------------* * pca_dec_s3() @@ -2451,82 +1478,7 @@ void pca_enc_s3_fx( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void pca_dec_s3( - const int32_t index, - float *q ) -{ - float ph1_q, ph2_q, ph3_q; - int32_t j; - int16_t i; - int16_t n1, n2, n3; - int16_t index1, index2, index3; - float d; - - j = index; - index1 = -1; - for ( i = 0; i < IVAS_PCA_N1; i++ ) - { - if ( j < ivas_pca_offset_index1[i + 1] ) - { - index1 = i; - break; - } - } - - assert( index1 > -1 ); - - n1 = IVAS_PCA_N1; - d = EVS_PI / ( n1 - 1 ); - ph1_q = index1 * d; - n2 = calc_n2( ph1_q ); - - j -= ivas_pca_offset_index1[index1]; - index2 = -1; - - for ( i = 0; i < n2; i++ ) - { - if ( j < ivas_pca_offset_index2[i + get_pca_offset_n2( index1 ) + 1] ) - { - index2 = i; - break; - } - } - - assert( index2 > -1 ); - if ( n2 == 1 ) - { - ph2_q = 0; - } - else - { - d = EVS_PI / ( n2 - 1 ); - ph2_q = index2 * d; - } - - j -= ivas_pca_offset_index2[index2 + get_pca_offset_n2( index1 )]; - - index3 = (int16_t) j; - - n3 = calc_n3( ph1_q, ph2_q ); - - if ( n3 == 1 ) - { - ph3_q = 0; - } - else - { - d = PI2 / n3; - ph3_q = d * index3; - } - sp2cart( ph1_q, ph2_q, ph3_q, q ); - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED // Not tested void pca_dec_s3_fx( const Word32 index, @@ -2620,5 +1572,3 @@ void pca_dec_s3_fx( return; } - -#endif diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index da3cac148..40d8d8e44 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -45,9 +45,7 @@ #include "ivas_stat_com.h" #include "ivas_error_utils.h" -#ifdef IVAS_FLOAT_FIXED #define IVAS_FLOAT_FIXED_TO_BE_REMOVED -#endif // IVAS_FLOAT_FIXED /* clang-format off */ @@ -70,11 +68,6 @@ void stereo_dmx_evs_enc( ); /*! r: number of channels to be analysed */ -#ifndef IVAS_FLOAT_FIXED -int16_t getNumChanAnalysis( - Encoder_Struct *st_ivas /* i : IVAS encoder structure */ -); -#endif void copy_encoder_config( Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ @@ -82,19 +75,7 @@ void copy_encoder_config( const int16_t flag_all /* i : flag 1==update all, 0=partial update */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_write_format( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_write_format_sid( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t element_mode, /* i : element bitrate */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -); -#endif ivas_error create_sce_enc( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ @@ -153,16 +134,6 @@ ivas_error ivas_sce_enc( const int16_t nb_bits_metadata /* i : number of metadata bits */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_cpe_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - float data_f_ch0[], /* i : input signal for channel 0 */ - float data_f_ch1[], /* i : input signal for channel 1 */ - const int16_t input_frame, /* i : input frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -); -#endif ivas_error ivas_cpe_enc( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ @@ -279,7 +250,6 @@ ivas_error pre_proc_front_ivas_fx( const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ const Word32 ivas_total_brate /* i : IVAS total bitrate - for setting the DTX */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error pre_proc_ivas( Encoder_State *st, /* i/o: encoder state structure */ const Word16 last_element_mode, /* i : last element mode */ @@ -311,35 +281,6 @@ ivas_error pre_proc_ivas( Word16 cor_map_sum_fx, // Q8 Word16 *Q_new ); -#else -ivas_error pre_proc_ivas( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t last_element_mode, /* i : last element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t last_element_brate, /* i : last element bitrate */ - const int16_t input_frame, /* i : frame length */ - float old_inp_12k8[], /* i/o: buffer of old input signal */ - float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ - float **inp, /* o : ptr. to inp. signal in the current frame*/ - float *ener, /* o : residual energy from Levinson-Durbin */ - float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ - float epsP[M + 1], /* i/o: LP prediction errors */ - float lsp_new[M], /* i/o: LSPs at the end of the frame */ - float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ - float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ - int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ - const float old_wsp[], /* i : weighted input signal buffer */ - const int16_t loc_harm, /* i : harmonicity flag */ - const float cor_map_sum, /* i : speech/music clasif. parameter */ - const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ - const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ - const float fft_buff[2 * L_FFT], /* i : FFT buffer */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t vad_hover_flag, /* i : VAD hangover flag */ - const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ -); -#endif /*! r: number of clipped samples */ uint32_t ivas_syn_output( float *synth[], /* i/o: float synthesis signal */ @@ -405,46 +346,12 @@ ivas_error ivas_dec( int16_t *data /* o : output synthesis signal */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dec_setup( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ - int16_t *data /* o : output synthesis signal */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -ivas_error create_sce_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const Word16 cpe_id, /* i : SCE # identifier */ - const Word32 element_brate /* i : element bitrate */ -); -ivas_error create_cpe_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - const int32_t element_brate /* i : element bitrate */ -); -#endif // !IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -ivas_error create_mct_dec( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -); -#endif ivas_error mct_dec_reconfigure( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const uint16_t b_nchan_change /* i : flag indicating different channel count */ ); -#ifndef IVAS_FLOAT_FIXED -void destroy_sce_dec( - SCE_DEC_HANDLE hSCE /* i/o: SCE decoder structure */ -); - -void destroy_cpe_dec( - CPE_DEC_HANDLE hCPE /* i/o: CPE decoder structure */ -); -#endif // IVAS_FLOAT_FIXED void ivas_mct_dec_close( MCT_DEC_HANDLE *hMCT /* i/o: MCT decoder structure */ @@ -489,11 +396,6 @@ ivas_error ivas_mct_dec( ); /*! r: number of channels to be synthesised */ -#ifndef IVAS_FLOAT_FIXED -int16_t getNumChanSynthesis( - Decoder_Struct *st_ivas /* i : IVAS decoder structure */ -); -#endif void copy_decoder_config( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ @@ -504,11 +406,6 @@ void destroy_core_dec( DEC_CORE_HANDLE hCoreCoder /* i/o: core decoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_destroy_dec( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -); -#endif void ivas_initialize_handles_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ @@ -545,38 +442,8 @@ ivas_error ivas_core_enc( const int16_t ivas_format, /* i : IVAS format */ const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_core_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - const int16_t n_channels, /* i : number of channels to be decoded */ - float *output[], /* o : output synthesis signal */ - float outputHB[][L_FRAME48k], /* o : output HB synthesis signal */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void encod_gen_2sbfr( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float *res, /* i : residual signal */ - float *syn, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ -); -#endif void decod_gen_2sbfr( Decoder_State *st, /* i/o: decoder static memory */ @@ -612,49 +479,7 @@ void stereo_tcx_init_enc( Encoder_State *st /* i/o: encoder state structure */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_tcx_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ - const float new_samples_16k[], /* i : buffer of input signal @16 kHz */ - const float Aw[], /* i : weighted A(z) unquant. for subframes */ - float lsp_new[], /* i : LSPs at the end of the frame */ - float lsp_mid[], /* i : LSPs in the middle of the frame */ - float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ - const int16_t last_element_mode, /* i : last element mode */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -); -void stereo_tcx_core_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const FRAME_MODE frameMode, /* i : Decoder frame mode */ - float *signal_out, /* o : synthesis @internal_Fs */ - float *signal_outFB, /* o : synthesis @output_Fs */ - float pitch_buf[], /* o : floating pitch for each subframe */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ - const int16_t last_element_mode, /* i : last element mode */ - const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ - const int16_t nchan_out, /* i : number of output channels */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -); -#endif // !IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -void stereo_tcx_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ - const float new_samples_16k[], /* i : buffer of input signal @16 kHz */ - const Word16 Aw_fx[], /* i : weighted A(z) unquant. for subframes, Q12 */ - float lsp_new[], /* i : LSPs at the end of the frame, Q15 */ - float lsp_mid[], /* i : LSPs in the middle of the frame, Q15 */ - Word16 pitch_buf_fx[NB_SUBFR16k], /* o : pitch for each subframe, Q6 */ - const Word16 last_element_mode, /* i : last element mode, Q0 */ - const Word16 vad_hover_flag, /* i : VAD hangover flag, Q0 */ - Word16 Q_new -); -#endif void stereo_tcx_init_dec( @@ -706,25 +531,7 @@ int16_t ivas_acelp_tcx20_switching( const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_decision_matrix_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t element_brate, /* i : element bitrate */ - const float fft_buff[], /* i : FFT buffer */ - const float enerBuffer[], /* i : energy buffer */ - const int16_t last_element_mode /* i : last element mode */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_signaling_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t tdm_SM_flag, /* i : channel combination scheme flag in TD stereo */ - const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag in TD stereo*/ -); -#endif // IVAS_FLOAT_FIXED void ivas_decision_matrix_dec( Decoder_State *st, /* i/o: decoder state structure */ @@ -743,18 +550,6 @@ int16_t set_bw_mct( CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ const int16_t nCPE /* i : number of CPEs */ ); -#ifndef IVAS_FLOAT_FIXED -void acelp_fast( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t cdk_index, /* i : codebook index */ - const float dn_orig[L_SUBFR], /* i : corr. between target and h[]. */ - const float cn[L_SUBFR], /* i : residual after long term prediction */ - const float H[L_SUBFR], /* i : impulse response of weighted synt.filter*/ - float code[L_SUBFR], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -); -#endif void dec_acelp_fast( Decoder_State *st, /* i/o: decoder state structure */ const int16_t cdk_index, /* i : codebook index */ @@ -836,26 +631,6 @@ int16_t is_DTXrate( const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t is_SIDrate( - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -); -#endif - -void ivas_mdft( - const float *pIn, /* i : input time-domain signal */ - float *pOut_re, /* o : Real part of MDFT signal */ - float *pOut_im, /* o : Imag. part of MDFT signal */ - const int16_t length, /* i : signal length */ - const int16_t mdft_length /* i : MDFT length */ -); - -void ivas_imdft( - const float *pRe, /* i : Real part of MDFT signal */ - const float *pIm, /* i : Imag. part of MDFT signal */ - float *pOut, /* o : output time-domain signal */ - const int16_t length /* i : signal length */ -); void TonalMdctConceal_create_concealment_noise_ivas( float concealment_noise[L_FRAME48k], @@ -875,14 +650,6 @@ void TonalMdctConceal_whiten_noise_shape_ivas( const TONALMDCTCONC_NOISE_SHAPE_WHITENING_MODE ); -#ifndef IVAS_FLOAT_FIXED -/*! r: IGF start line */ -int16_t get_igf_startline_flt( - Decoder_State *st, /* i : decoder state */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_frameTCX /* i : full band frame length */ -); -#endif float rand_triangular_signed( int16_t *seed ); @@ -893,35 +660,13 @@ void dtx_read_padding_bits( const int16_t num_bits ); -#ifndef IVAS_FLOAT_FIXED -void ivas_apply_non_diegetic_panning( - float *output_f[], /* i/o: core-coder transport mono channel/stereo output */ - const float non_diegetic_pan_gain, /* i : non-diegetic panning gain */ - const int16_t output_frame /* i : output frame length per channel */ -); -#endif /*----------------------------------------------------------------------------------* * JBM prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_jbm_dec_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *data /* o : output synthesis signals */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_jbm_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const uint16_t nSamplesAsked, /* i : number of samples wanted */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of samples still available in the rendering pipeline */ - int16_t *data /* o : output synthesis signal */ -); -#endif ivas_error ivas_jbm_dec_flush_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ @@ -952,24 +697,7 @@ void ivas_jbm_dec_get_adapted_linear_interpolator( float *interpolator /* o : the interpolator */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_jbm_dec_get_adapted_subframes( - const int16_t nCldfbTs, /* i : number of time slots in the current frame */ - int16_t *subframe_nbslots, /* i/o: subframe grid */ - int16_t *nb_subframes /* i/o: number of subframes in the frame */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_jbm_dec_get_md_map( - const int16_t default_len, /* i : default frame length in metadata slots */ - const int16_t len, /* i : length of the modfied frames in metadata slots */ - const int16_t subframe_len, /* i : default length of a subframe */ - const int16_t offset, /* i : current read offset into the md buffer */ - const int16_t buf_len, /* i : length of the metadata buffer */ - int16_t *map /* o : metadata index map */ -); -#endif int16_t ivas_jbm_dec_get_num_tc_channels( Decoder_Struct *st_ivas /* i : IVAS decoder handle */ @@ -981,15 +709,6 @@ void ivas_jbm_dec_copy_tc_no_tsm( const int16_t output_frame /* i : output frame size */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_jbm_dec_get_md_map_even_spacing( - const int16_t len, /* i : length of the modfied frames in metadata slots */ - const int16_t subframe_len, /* i : default length of a subframe */ - const int16_t offset, /* i : current read offset into the md buffer */ - const int16_t buf_len, /* i : length of the metadata buffer */ - int16_t *map /* o : metadata index map */ -); -#endif TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( Decoder_Struct *st_ivas /* i : IVAS decoder handle */ @@ -1042,33 +761,11 @@ void ivas_jbm_masa_sf_to_sf_map( * ISM prototypes *----------------------------------------------------------------------------------*/ -ivas_error ivas_ism_config( - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t nchan_ism, /* i : number of objects */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int16_t ism_extended_metadata_flag, /* i : extended metadata flag */ - const int16_t null_metadata_flag[MAX_NUM_OBJECTS], /* i : NULL MD flag */ - const int16_t ism_imp[], /* i : ISM importance flags */ - int32_t element_brate[], /* o : element bitrate per object */ - int32_t total_brate[], /* o : total bitrate per object */ - int16_t nb_bits_metadata[], /* i/o: number of metadata bits */ - const int16_t combined_format_flag /* i : flag indicating combined format */ -); - -#ifdef IVAS_FLOAT_FIXED void bitbudget_to_brate( const Word16 x[], /* i : bitbudgets Q0 */ Word32 y[], /* o : bitrates Q0 */ const Word16 N /* i : number of entries to be converted */ ); -#else -void bitbudget_to_brate( - const int16_t x[], /* i : bitbudgets */ - int32_t y[], /* o : bitrates */ - const int16_t N /* i : number of entries to be converted */ -); -#endif void ivas_ism_reset_metadata( ISM_METADATA_HANDLE hIsmMeta /* i/o: ISM metadata handles */ @@ -1082,7 +779,6 @@ void ivas_ism_reset_metadata_API( ); /*! r: index of the winning codeword */ -#ifdef IVAS_FLOAT_FIXED Word16 ism_quant_meta_fx( const Word32 val, /* i : scalar value to quantize Q22 */ Word32 *valQ, /* o : quantized value Q22 */ @@ -1091,37 +787,7 @@ Word16 ism_quant_meta_fx( const Word32 q_step_border_fx, /* i : quantization step at the border Q22 */ const Word16 cbsize /* i : codebook size */ ); -#endif - -int16_t ism_quant_meta( - const float val, /* i : scalar value to quantize */ - float *valQ, /* o : quantized value */ - const float borders[], /* i : level borders */ - const float q_step, /* i : quantization step */ - const float q_step_border, /* i : quantization step at the border */ - const int16_t cbsize /* i : codebook size */ -); - -/*! r: dequantized value */ -float ism_dequant_meta( - const int16_t idx, /* i : quantizer index */ - const float borders[], /* i : level borders */ - const float q_step, /* i : quantization step */ - const float q_step_border, /* i : quantization step at the border */ - const int16_t cbsize /* i : codebook size */ -); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_set_ism_metadata( - ISM_METADATA_HANDLE hIsmMeta, /* o : ISM metadata handle */ - const float azimuth, /* i : azimuth value */ - const float elevation, /* i : elevation value */ - const float radius_meta, /* i : radius */ - const float yaw, /* i : yaw */ - const float pitch, /* i : pitch */ - const int16_t non_diegetic_flag /* i : non-diegetic object flag */ -); -#endif ivas_error ivas_ism_metadata_enc_create( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const int16_t n_ISms, /* i : number of objects */ @@ -1142,25 +808,6 @@ ivas_error ivas_ism_enc( const int16_t flag_omasa_ener_brate /* i : less bitrate for objects in OMASA flag */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_metadata_enc( - int32_t *ism_total_brate, /* i/o: ISM total bitrate */ - const int16_t nchan_ism, /* i : number of ISM channels */ - const int16_t nchan_transport, /* i : number of transport channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t nb_bits_metadata[], /* o : number of metadata bits */ - const int16_t localVAD[], /* i : VAD flag */ - const int16_t ism_mode, /* i : ISM mode */ - const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ - const int16_t ism_extended_metadata_flag, /* i : Extended metadata flag */ - const float lp_noise_CPE, /* i : LP filtered total noise estimation */ - const int16_t flag_omasa_ener_brate, /* i : less bitrate for objects in OMASA flag */ - int16_t *omasa_stereo_sw_cnt, - const int16_t ini_frame -); -#endif ivas_error ivas_ism_metadata_dec( const int32_t ism_total_brate, /* i : ISM total bitrate */ const int16_t nchan_ism, /* i : number of ISM channels */ @@ -1183,23 +830,10 @@ ivas_error ivas_ism_metadata_dec( *----------------------------------------------------------------------------------*/ /*! r: ISM format mode */ -#ifndef IVAS_FLOAT_FIXED -ISM_MODE ivas_ism_mode_select( - const int16_t nchan_inp, /* i : number of input objects */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -); -#endif ivas_error ivas_param_ism_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - float *data[MAX_NUM_OBJECTS], /* i : input signal */ - const int16_t input_frame /* i : input frame length per channel */ -); -#endif void ivas_param_ism_enc_close( PARAM_ISM_CONFIG_HANDLE *hParamIsm, /* i/o: ParamISM handle */ @@ -1211,45 +845,13 @@ void ivas_ism_metadata_close( const int16_t first_idx /* i : index of first handle to deallocate */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_stereo_dmx( - Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ - float *data[MAX_NUM_OBJECTS], /* i/o: input signal/stereo dmx */ - const int16_t input_frame /* i : Length of input frame */ -); - -void ivas_param_ism_config( - PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i/o: IVAS Param ISM Config Structure */ - const int16_t nchan_ism /* i : number of ISM channels */ -); -#endif ivas_error ivas_ism_enc_config( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_dec_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const ISM_MODE last_ism_mode, /* i/o: last ISM mode */ - uint16_t *nSamplesRendered, /* o : number of samples flushed on renderer change*/ - int16_t *data /* o : output synthesis signal */ -); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_param_ism_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_dec_close( - PARAM_ISM_DEC_HANDLE *hParamIsmDec, /* i/o: decoder ParamISM handle */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: common spatial renderer data */ - const AUDIO_CONFIG output_config /* i : output audio configuration */ -); -#endif void ivas_param_ism_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ @@ -1260,22 +862,7 @@ void ivas_ism_dec_digest_tc( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ - float *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ -); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_param_dec_tc_gain_ajust( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamples, /* i : number of samples to be compensate */ - const uint16_t nFadeLength, /* i : length of the crossfade in samples */ - float *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ -); -#endif void ivas_param_ism_dec_render( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ @@ -1342,27 +929,11 @@ void ivas_ism_metadata_sid_dec( int16_t nb_bits_metadata[] /* o : number of metadata bits */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_get_sce_id_dtx( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t input_frame /* i : input frame length per channel */ -); -#endif void ivas_param_ism_compute_noisy_speech_flag( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_coh_estim_dtx_enc( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t input_frame /* i : input frame length */ -); -#endif void update_last_metadata( const int16_t nchan_ism, /* i : number of objects */ @@ -1370,6 +941,7 @@ void update_last_metadata( const int16_t updt_flag[] /* i : last metadata update flag */ ); +#ifndef IVAS_FLOAT_FIXED void ivas_get_ism_sid_quan_bitbudget( const int16_t nchan_ism, /* i : number of objects */ int16_t *nBits_azimuth, /* o : number of Q bits for azimuth */ @@ -1379,6 +951,7 @@ void ivas_get_ism_sid_quan_bitbudget( int16_t *nBits_coh, /* o : number of Q bits for coherence */ int16_t *nBits_sce_id /* o : number of Q bits for sce_id_dtx */ ); +#endif void ivas_ism_dtx_limit_noise_energy_for_near_silence( SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder structures */ @@ -1390,30 +963,6 @@ void ivas_ism_dtx_limit_noise_energy_for_near_silence( * DFT Stereo prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_dft_enc_create( - STEREO_DFT_ENC_DATA_HANDLE *hStereoDft, /* o : encoder DFT stereo handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -); - -void stereo_dft_enc_reset( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft /* i/o: encoder stereo handle */ -); - -void stereo_enc_itd_init( - ITD_DATA_HANDLE hItd /* i/o: encoder ITD handle */ -); - -void stereo_dft_enc_update( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -); - -void stereo_dft_enc_destroy( - STEREO_DFT_ENC_DATA_HANDLE *hStereoDft /* i/o: encoder DFT stereo handle */ -); -#endif void stereo_dft_enc_analyze( Encoder_State **sts, /* i/o: encoder state structure */ @@ -1434,31 +983,8 @@ float stereo_dft_enc_synthesize( const int16_t L_frame /* i : frame length at internal Fs */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_process( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int16_t vad_flag_dtx[], /* i : VAD dtx flags */ - const int16_t vad_hover_flag[], /* i : VAD hangover flags */ - const int16_t input_frame /* i : input frame length */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_res( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ - const float *input_8k, /* i : input buffer sampled at 8kHz */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t *nb_bits, /* o : number of bits written */ - const int16_t max_bits -); -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_write_BS( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - int16_t *nb_bits /* o : number of bits written */ -); -#endif void stereo_dtf_cng( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -1475,16 +1001,6 @@ void stereo_dft_cng_side_gain( const int16_t bwidth /* i : audio band-width */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_quantize_res_gains( - const float *g, - const float *r, - float *gq, - float *rq, - int16_t *ig, - int16_t *ir -); -#endif void stereo_dft_dequantize_itd( int16_t *ind, @@ -1492,25 +1008,7 @@ void stereo_dft_dequantize_itd( const int32_t output_Fs ); -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_sid_calc_coh( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ - float prev_cohBand[2*(STEREO_DFT_BAND_MAX/2)], /* i/o: Previous coherence */ - int16_t *td_active, /* i/o: TD stereo mode indicator */ - int16_t *first_SID, /* i/o: First SID indicator */ - float *cohBand /* i/o: Coherence per band */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_sid_coh( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - float *mem_cohBand, /* i/o: Coherence memory */ - const int16_t nbands, /* i : number of DFT stereo bands */ - int16_t *nb_bits, /* i/o: number of bits written */ - float *cohBand /* i/o: Coherence per band */ -); -#endif void stereo_dft_dec_sid_coh( Decoder_State *st, /* i/o: decoder state structure */ @@ -1561,22 +1059,6 @@ void stereo_dft_dec_synthesize( const int16_t output_frame /* i : output frame length */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - Decoder_State *st0, /* i/o: decoder state structure */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ - float *input_mem, /* i/o: mem of buffer DFT analysis */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - const int16_t sba_mono_flag, /* i : signal mono output for SBA DirAC */ - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD handle for upmixing */ - const int16_t cross_fade_start_offset, /* i : SPAR mixer delay compensation */ - const int32_t output_Fs, /* i : Fs for delay calculation */ - const int16_t nchan_transport, /* i : number of transpor channels */ - const int16_t num_md_sub_frames /* i : number of MD subframes */ -); -#endif void stereo_dft_res_ecu( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ @@ -1632,13 +1114,6 @@ void stereo_dft_dec_res( ); /*! r: Decision to enable or disable BPF on DFT stereo residual */ -#ifndef IVAS_FLOAT_FIXED -int16_t res_bpf_adapt( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo decoder handle */ - const float *bpf_error_signal_8k, /* i : BPF modification signal */ - float res_buf[STEREO_DFT_N_8k] /* i : residual buffer */ -); -#endif void bpf_pitch_coherence( Decoder_State *st, /* i/o: decoder state structure */ @@ -1703,128 +1178,14 @@ void filter_with_allpass( ); /*! r: used GR order */ -#ifndef IVAS_FLOAT_FIXED -int16_t write_bitstream_adapt_GR( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t Indice, /* i : identifier for bitstream index */ - const int16_t *in, /* i : values to be written in bitstream */ - const int16_t len, /* i : values vector length */ - const int16_t GR_ord, /* i : GR order to be used */ - const int16_t sp_aud_decision /* i : speech/music 0/1 */ -); -#endif /*! r: used GR order */ -#ifndef IVAS_FLOAT_FIXED -int16_t adapt_GR_ief( - const int16_t *in, /* i : vector to encode */ - int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ - const int16_t *prev, /* i : previous frame data */ - const int16_t len, /* i : input vector length */ - const int16_t no_symb, /* i : number of symbols */ - int16_t *nbits, /* o : number of used bits */ - int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ - const int16_t *map0, /* i : mapping array */ - const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ - int16_t *nbits_diff, /* o : number bits in diff encoding */ - const int16_t side_gain_counter, /* i : number of frames since last abs coding */ - float *side_gain_bitdiff_lp, /* i/o: LP-filtered bit difference between abs/diff */ - const int16_t try_diff /* i : diff coding allowed 1/0 */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -/*! r: used GR order */ -int16_t adapt_GR_rpg1_ief( - const int16_t *in, /* i : res pred gains input vector */ - int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ - const int16_t *prev, /* i : previous frame data */ - const int16_t len, /* i : input vector length */ - const int16_t no_symb, /* i : number of symbols */ - int16_t *nbits, /* o : number of used bits */ - int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ - const int16_t *maps, /* i : mapping array */ - int16_t *nbits_diff, /* o : estimated no of bits for differential encoding */ - const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ - const int16_t try_diff /* i : diff coding allowed 1/0 */ -); -#endif /*! r: number of bits written */ -#ifndef IVAS_FLOAT_FIXED -int16_t write_GR1( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : input vector */ - const int16_t len /* i : vector length */ -); -#endif /*! r: number of bits written */ -#ifndef IVAS_FLOAT_FIXED -int16_t write_bitstream_GR( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : input date to be written */ - const int16_t len, /* i : input data length */ - const int16_t GR_ord /* i : GR order to be used */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*! r: number of bits read */ -int16_t read_flag_EC_DFT( - const uint16_t *bit_stream, /* i : bitstream */ - int16_t *flag /* o : flag value */ -); - -/*! r: number of bits read */ -int16_t read_BS_GR( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting point in bitstream */ - int16_t *ind1, /* o : data array read */ - const int16_t len, /* i : number of params to be read */ - int16_t *GR_ord /* o : GR order to be used */ -); - -/*! r: number of bits read */ -int16_t read_BS_adapt_GR_rpg( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting point in bitstream */ - int16_t *ind1_pred, /* o : decoded res pred gains */ - const int16_t start, /* i : starting subband */ - const int16_t total_no, /* i : number of params to be read */ - int16_t *GR_ord /* o : GR order - read */ -); - -/*! r: value read on nbits from bitstream */ -int16_t get_value( - const uint16_t *bit_stream, /* i : bitstream */ - const int16_t nbits /* i : number of bits to be read */ -); - -/*! r: number of bits read */ -int16_t read_itd( - Decoder_State *st, /* i : decoder state */ - int16_t *pI /* o : decoded ITD value */ -); -/*! r: number of bits read */ -int16_t read_BS_adapt_GR_sg( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting position to be read */ - int16_t *ind1, /* o : decoded side gain values */ - const int16_t len, /* i : number of params to be read */ - int16_t *GR_ord, /* o : GR order to be used */ - const int16_t *map0 /* i : mapping array for side gains */ -); - -void stereo_dft_hybrid_ITD_flag( - STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ - const int32_t input_Fs, /* i : CPE element sampling rate */ - const int16_t hybrid_itd_max /* i : flag for hybrid ITD for very large ITDs */ -); -#endif void stereo_dft_enc_compute_itd( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -1851,17 +1212,6 @@ int16_t stereo_dft_band_config( const int16_t NFFT, /* i : analysis/synthesis window length */ const int16_t enc_dec /* i : flag to indicate enc vs dec */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_td_itd( - ITD_DATA *hITD, /* i/o: ITD data structure */ - float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX], /* o : ITD memory (only used in DFT Stereo) */ - const int16_t hybrid_itd_flag, /* i : flag for hybrid TD/FD ITD processing */ - const int16_t dft_ovl, /* i : size of DFT overlap */ - Encoder_State **sts, /* i/o: Encoder state structure */ - const int16_t input_frame, /* i : input frame length */ - float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ -); -#endif void stereo_dft_dmx_out_reset( STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx /* i/o: DFT stereo DMX decoder */ @@ -1974,22 +1324,7 @@ float ECSQ_dequantize_gain( const int16_t index ); -#ifndef IVAS_FLOAT_FIXED -void ECSQ_quantize_vector( - const float *input, - const float global_gain, - const int16_t N, - int16_t *output -); -#endif -#ifndef IVAS_FLOAT_FIXED -float ECSQ_compute_optimal_gain( - const float *input, - const int16_t N, - const int16_t *output -); -#endif void ECSQ_init_instance( ECSQ_instance *ecsq_inst, @@ -1997,25 +1332,7 @@ void ECSQ_init_instance( void *ac_handle ); -#ifndef IVAS_FLOAT_FIXED -int32_t ECSQ_encode_target_SNR( - ECSQ_instance *ecsq_inst, - const float *input, - const int16_t N, - const float target_SNR, - const int16_t max_bits, - float *output, - int16_t *global_gain_index_output -); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ECSQ_decode( - ECSQ_instance *ecsq_inst, - const int16_t N, - int16_t *output -); -#endif // IVAS_FLOAT_FIXED void ECSQ_dequantize_vector( const int16_t *input, @@ -2067,14 +1384,6 @@ void adjustTargetSignal( * IC-BWE Stereo prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void spectral_balancer( - float *signal, - float *mem, - const int16_t lg, - const int16_t coeff_set -); -#endif void stereo_icBWE_preproc( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -2122,11 +1431,6 @@ int16_t select_stereo_mode( const IVAS_FORMAT ivas_format /* i : IVAS format */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_classifier_init( - STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ -); -#endif void stereo_classifier_features( STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ @@ -2143,27 +1447,12 @@ void stereo_classifier_features( const int16_t clas /* i : signal class */ ); -#ifndef IVAS_FLOAT_FIXED -void unclr_classifier_dft( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void unclr_classifier_td( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -); -#endif void xtalk_classifier_dft( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ const int16_t itd, /* i : ITD from DFT stereo - used as a feature */ const float gcc_phat[] /* i : GPHAT cross-channel correlation function */ ); -#ifndef IVAS_FLOAT_FIXED -void xtalk_classifier_td( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -); -#endif /*----------------------------------------------------------------------------------* * TD Stereo prototypes @@ -2171,33 +1460,11 @@ void xtalk_classifier_td( void stereo_td_init_enc( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - const int16_t last_element_mode /* i : last element mode */ -); - -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_set_tdm( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int16_t input_frame /* i : input frame length per channel */ + const int16_t last_element_mode /* i : last element mode */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_tdm_prep_dwnmx ( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const float *input1, /* i : right channel input */ - const int16_t input_frame /* i : frame lenght */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -int16_t stereo_tdm_ener_analysis( - const int16_t ivas_format, /* i : IVAS format */ - CPE_ENC_HANDLE hCPE, /* i : CPE structure */ - const int16_t input_frame, /* i : Number of samples */ - int16_t *tdm_SM_or_LRTD_Pri, /* o : channel combination scheme flag in TD stereo OR LRTD primary channel */ - int16_t *tdm_ratio_idx_SM /* o : TDM ratio index for SM mode */ -); -#endif + void stereo_tdm_downmix( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i : TD stereo IVAS encoder structure */ float *Left_in, /* i/o: Left channel -> Primary channel */ @@ -2242,22 +1509,6 @@ void stereo_tdm_combine( const int16_t tdm_ratio_idx /* i : TDM ratio index */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: replication decision; 1 = Use old LP */ -int16_t tdm_lp_comparison( - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ - Encoder_State *st, /* i/o: Encoder structure */ - const float *speech, /* i : Current speech frame */ - const float *A_Pch, /* i : primary channel LP coefficients */ - const float *A_SCh, /* i : secondary channel LP coefficients */ - const int16_t m, /* i : filter length */ - const float *isp_PCh, /* i : primary channel LSPs */ - const float *isp_SCh, /* i : secondary channel LSPs */ - const int16_t L_frame, /* i : frame length */ - const int32_t element_brate_wo_meta /* i : element bitrate without metadata */ -); -#endif /*! r: replication decision; 1 = Use old LP */ void tdm_ol_pitch_comparison( CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ @@ -2277,13 +1528,6 @@ void tdm_configure_enc( const int16_t nb_bits_metadata /* i : number of metadata bits */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error signaling_enc_secondary( - Encoder_State *st, /* i/o: Encoder structure */ - const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ - const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag */ -); -#endif void tdm_bit_alloc( const int16_t ivas_format, /* i : IVAS format */ @@ -2304,44 +1548,6 @@ void tdm_bit_alloc( const int16_t tdm_inst_ratio_idx /* i : instantaneous correlation ratio index */ ); -#ifndef IVAS_FLOAT_FIXED -void td_stereo_param_updt( - const float lsp_old_PCh[], /* i : primary channel old LSPs */ - const float lsf_old_PCh[], /* i : primary channel old LSFs */ - const float pitch_buf_PCh[], /* i : primary channel pitch buffer */ - float tdm_lspQ_PCh[], /* o : Q LSPs for primary channel */ - float tdm_lsfQ_PCh[], /* o : Q LSFs for primary channel */ - float tdm_Pri_pitch_buf[], /* o : pitch values for primary channel */ - const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ - const int16_t tdm_use_IAWB_Ave_lpc /* i : flag to indicate the usage of mean inactive LP coefficients */ -); - -void gsc_enc( - Encoder_State *st, /* i/o: State structure */ - float res_dct_in[], /* i : dct of residual signal */ - float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ - const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ - const int16_t bits_used, /* i : Number of bit used before frequency Q */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - const float *lsf_new, /* i : ISFs at the end of the frame */ - float *exc_wo_nf, /* o : excitation (in f domain) w/o noisefill */ - float *tmp_noise /* o : long-term noise energy */ -); - -void tdm_low_rate_enc( - Encoder_State *st, /* i/o: State structure */ - const float Aq[], /* i : 12k8 Lp coefficient */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t attack_flag, /* i : attck flag */ - const float *lsf_new, /* i : current frame ISF vector */ - float *tmp_noise /* o : long-term noise energy */ -); -#endif /*! r: value of the indice */ uint16_t get_indice_st( @@ -2369,17 +1575,6 @@ void tdm_SCh_LSF_intra_pred( float *pred_lsf_SCh /* o : predicted secondary channel LSFs */ ); -#ifndef IVAS_FLOAT_FIXED -void tdm_SCh_lsf_reuse( - const int16_t enc_dec, /* i : encoder/decoder flag */ - const int32_t element_brate, /* i : element bitrate */ - float lsf_new[M], /* i/o: LSFs at the end of the frame */ - float lsp_new[M], /* i/o: LSPs at the end of the frame */ - const float tdm_lsfQ_PCh[M], /* i : primary channel LSFs */ - const float lsf_wgts[M], /* i : LSF weights */ - int16_t *beta_index /* i/o: quantization index */ -); -#endif void first_VQstages( const float *const *cb, @@ -2392,15 +1587,6 @@ void first_VQstages( int16_t indices_VQstage[] ); -#ifndef IVAS_FLOAT_FIXED -UWord32 index_lvq_SHB( - const int16_t idx_lead, - const int16_t idx_scale, - const int16_t nbits, - float *lat_cv, - const int16_t mode -); -#endif void deindex_lvq_SHB( UWord32 index, @@ -2489,21 +1675,12 @@ void InternalTCXDecoder( int16_t *gain_tcx_q /* o : quantized global gain (at low bitrates) */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_mdct_core_enc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ - float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ - float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe */ -); -#else void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ Word16 old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ Word16 pitch_buf_fx[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe */ ); -#endif void initMdctStereoEncData( STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ @@ -2735,13 +1912,6 @@ void InitPsychLPC( const TCX_CONFIG_HANDLE hTcxCfg /* i : TCX configuration handle */ ); -#ifndef IVAS_FLOAT_FIXED -void SetCurrentPsychParams( - const int16_t core, - const int16_t last_frame_was_concealed_cng, - TCX_CONFIG_HANDLE hTcxCfg -); -#endif void stereo_coder_tcx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT encoder structure */ @@ -2795,23 +1965,7 @@ int16_t write_stereo_to_bitstream BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ ); -#ifndef IVAS_FLOAT_FIXED -void parse_stereo_from_bitstream( - STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ - Decoder_State **sts, /* i/o: decoder state structure */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ - const int16_t isSBAStereoMode, /* i : flag core coding for SBA */ - Decoder_State *st0, /* i/o: decoder state structure for Bstr */ - int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void FindSplitRatio( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Encoder_State **sts /* i/o: Encoder state structure */ -); -#endif void ComputeSpectrumNoiseMeasure( const float *powerSpec, @@ -2835,6 +1989,7 @@ void convert_coeffs_to_higher_res( const int16_t len /* i : length of subframes */ ); +#ifndef IVAS_FLOAT_FIXED void sns_compute_scf( float spectrum[], const PsychoacousticParameters *pPsychParams, @@ -2854,6 +2009,7 @@ void sns_shape_spectrum( const float *scf_int, /* i : already interpolated SNS scalefactors */ const int16_t L_frame /* i : frame length */ ); +#endif int16_t quantize_sns( float sns_in[CPE_CHANNELS][NB_DIV][M], @@ -2869,27 +2025,6 @@ void dequantize_sns( float snsQ_out[CPE_CHANNELS][NB_DIV][M], Decoder_State **sts ); -#ifndef IVAS_FLOAT_FIXED -void sns_avq_cod( - const float *sns, /* i : Input sns vectors */ - const float *snsmid, /* i : Input mid-sns vectors */ - float *sns_q, /* o : Quantized LFS vectors */ - float *snsmid_q, /* o : Quantized mid-LFS vectors */ - int16_t *index, /* o : Quantization indices */ - const int16_t core, /* i : core */ - const int16_t L_frame, - const int16_t low_brate_mode /* i : flag low bit operating mode */ -); -void sns_avq_cod_stereo( - const float *snsl, /* i : Input sns vector (left channel) */ - const float *snsr, /* i : Input sns vector (right channel) */ - const int16_t L_frame, - float *snsl_q, /* o : Quantized sns vector (left channel) */ - float *snsr_q, /* o : Quantized sns vector (right channel) */ - int16_t *indexl, /* o : Quantization indices (left channel) */ - int16_t *indexr /* o : Quantization indices (right channel) */ -); -#endif void sns_avq_dec( int16_t *index, /* i : Quantization indices */ @@ -3152,17 +2287,6 @@ int16_t check_bounds_s( const int16_t high /* i : High limit */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_memory_enc( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t max_bwidth, /* i : maximum audio bandwidth */ - float *tdm_last_ratio, /* o : TD stereo last ratio */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t nchan_transport /* i : number transport chans */ - -); -#endif ivas_error stereo_memory_dec( const int32_t ivas_total_brate, /* i : IVAS total bitrate */ @@ -3173,14 +2297,6 @@ ivas_error stereo_memory_dec( const MC_MODE mc_mode, /* i : MC mode */ const int16_t nchan_transport /* i : number of transport channels */ ); -#ifndef IVAS_FLOAT_FIXED -void stereo_switching_enc_fx( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - Word16 old_input_signal_pri[], /* i : old input signal of primary channel */ - const Word16 input_frame, /* i : input frame length */ - const Word16 q_inp -); -#endif void stereo_switching_dec( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -3204,29 +2320,12 @@ void stereo_mdct2dft_update( /*! r: number of bits written */ -#ifndef IVAS_FLOAT_FIXED -int16_t write_GR0( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : data to be encoded */ - const int16_t len /* i : input data length */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -/*! r: number of bits read */ -int16_t read_GR0( - const uint16_t *bit_stream, /* i : bitstream to be read */ - int16_t *ind, /* o : parameters read */ - const int16_t len /* i : number of params to be read */ -); -#endif /*----------------------------------------------------------------------------------* * MCT prototypes *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples */ @@ -3243,24 +2342,6 @@ void ivas_mdct_core_whitening_enc_fx( Word16 mdst_spectrum_e[CPE_CHANNELS][NB_DIV], Word16 orig_spectrum_e[CPE_CHANNELS][NB_DIV] ); -#else -void ivas_mdct_core_whitening_enc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples */ - Word16 old_wsp_fx[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ - Word16 pitch_buf[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe */ - Word32 *mdst_spectrum_long[CPE_CHANNELS], /* o : buffer for MDST spectrum */ - int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* o : buffer TNS bits */ - Word32 *orig_spectrum_long[CPE_CHANNELS], /* o : origingal spectrum w/o whitening */ - int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* o : size of TNS */ - int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to parameter array */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ - const int16_t nChannels, /* i : total number of coded channels */ -Word16 mdst_spectrum_e[CPE_CHANNELS][NB_DIV], -Word16 orig_spectrum_e[CPE_CHANNELS][NB_DIV] -); -#endif void ivas_mct_core_enc( const IVAS_FORMAT ivas_format, /* i : IVAS format */ MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ @@ -3295,6 +2376,7 @@ void write_mct_bitstream( const int16_t nchan /* i : number of channels */ ); +#ifndef IVAS_FLOAT_FIXED void splitAvailableBitsMCT( void **sts, /* i/o: encoder/decoder state structure */ const int16_t total_bits, /* i : total number of available bits */ @@ -3302,6 +2384,15 @@ void splitAvailableBitsMCT( const int16_t enc_dec, /* i : encoder or decoder flag */ const int16_t nchan /* i : number of channels */ ); +#else +void splitAvailableBitsMCT_fx( + void **sts, /* i/o: encoder/decoder state structure */ + const Word16 total_bits, /* i : total number of available bits */ + const Word16 split_ratio[MCT_MAX_CHANNELS], /* i : ratio for splitting the bits Q0 */ + const Word16 enc_dec, /* i : encoder or decoder flag */ + const Word16 nchan /* i : number of channels */ +); +#endif void getChannelEnergies( Encoder_State **sts, /* i : Encoder state structure */ @@ -3373,14 +2464,6 @@ void ivas_mdct_core_tns_ns( const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_mct_core_dec( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ - const int16_t nCPE, /* i : number of CPEs */ - float *signal_out[] /* o : synthesis @internal_FS */ -); -#endif void ivas_mct_dec_mct( MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ @@ -3401,11 +2484,13 @@ void mctStereoIGF_dec( const int16_t bfi /* i : bad frame flag */ ); +#ifndef IVAS_FLOAT_FIXED void ivas_mdct_tcx10_bit_distribution( int16_t target_bitsTCX10[NB_DIV], /* o : target bit distribution */ const int16_t bits_frame_channel, /* i : bits frame channel */ const int16_t nTnsBitsTCX10[NB_DIV] /* i : TNS bits */ ); +#endif void enc_prm_igf_mdct( Encoder_State *st, /* i : Encoder state handle */ @@ -3435,18 +2520,21 @@ ivas_error ivas_qmetadata_enc_encode_hr_384_512( const int16_t bits_sp_coh ); +#ifndef IVAS_FLOAT_FIXED void deindex_sph_idx( const uint16_t sphIndex, /* i : Spherical index */ const SPHERICAL_GRID_DATA *gridData, /* i : Prepared spherical grid */ float *theta, /* o : Elevation */ float *phi /* o : Azimuth */ ); +#else void deindex_sph_idx_fx( const UWord16 sphIndex, /* i : Spherical index */ const SPHERICAL_GRID_DATA *gridData, /* i : Prepared spherical grid */ Word32 *theta_fx, /* o : Elevation Q22*/ Word32 *phi_fx /* o : Azimuth Q22 */ ); +#endif /*! r: output index for direction */ uint16_t index_theta_phi_16( @@ -3465,14 +2553,6 @@ void reset_metadata_spatial( ); /*! r: number of bits written */ -#ifndef IVAS_FLOAT_FIXED -void ivas_qmetadata_enc_sid_encode( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ - const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure*/ - const int16_t ivas_format /* i : ivas format */ -); -#endif /*! r: number of bits read */ int16_t ivas_qmetadata_dec_decode( @@ -3503,35 +2583,7 @@ int16_t ivas_qmetadata_dec_sid_decode( const int16_t ivas_format /* i : IVAS format */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_qmetadata_to_dirac( - const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ - DIRAC_DEC_HANDLE hDirAC, /* i : DirAC decoder structure */ - MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_qmetadata_open( - IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ -); - -ivas_error ivas_qmetadata_allocate_memory( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - const int16_t nbands, /* i : new number of frequency bands */ - const int16_t ndirs, /* i : new number of directions */ - const int16_t coherence_flag /* i : new coherence coding status */ -); -void ivas_qmetadata_close( - IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ -); -#endif void restore_metadata_buffer( @@ -3553,11 +2605,13 @@ void ivas_qmetadata_azimuth_elevation_to_direction_vector( float *dv /* o : direction vector */ ); +#ifndef IVAS_FLOAT_FIXED void ivas_qmetadata_direction_vector_to_azimuth_elevation( const float *dv, /* i : direction vector */ float *az, /* o : azimuth */ float *el /* o : elevation */ ); +#endif ivas_error only_reduce_bits_direction( int16_t *reduce_bits_out, @@ -3595,6 +2649,7 @@ int16_t quantize_direction2D( const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ ); +#ifndef IVAS_FLOAT_FIXED /*! r :companded azimuth value */ float companding_azimuth( const float azi, /* i : input azimuth value */ @@ -3618,6 +2673,7 @@ int16_t quantize_phi_chan_compand( const int16_t theta_flag, /* i : flag signaling high elevation */ const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ ); +#endif void quantize_direction_frame2D( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ @@ -3657,79 +2713,10 @@ float deindex_azimuth( const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ ); -#ifndef IVAS_FLOAT_FIXED -void deindex_spherical_component( - const uint16_t sph_idx, /* i : spherical index */ - float *az, /* o : decoded azimuth value */ - float *el, /* o : decoded elevation value */ - uint16_t *az_idx, /* o : azimuth index */ - uint16_t *el_idx, /* o : elevation index */ - const uint16_t no_bits, /* i : number of bits for the spherical grid */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void small_reduction_direction( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* i : bit allocation in tF tiles */ - const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], /* i : raw/EC coding indicator for each subband*/ - int16_t *diff /* i/o: number of bits that need to be reduced */ -); -#endif - -uint16_t ivas_qmetadata_reorder_generic( - const int16_t signed_value -); - -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_qmetadata_dereorder_generic( - const uint16_t uns_value /* i : unsigned value to reorder */ -); -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*! r: projected azimuth index */ -int16_t ivas_dirac_project_azimuth_index( - const int16_t az_idx, /* i : azimuth index */ - const int16_t az_alph, /* i : number of azimuth symbols */ - const int16_t az_alph_proj /* i : size of projected alphabet */ -); - -/*! r: projected elevation index */ -int16_t ivas_dirac_project_elevation_index( - const int16_t el_idx, /* i : elevation index */ - const int16_t el_alph, /* i : number of elevation symbols */ - const int16_t el_alph_proj /* i : size of projected alphabet */ +UWord16 ivas_qmetadata_reorder_generic_fx( + const Word16 signed_value ); -/*! r: projected index in channel mode */ -int16_t ivas_chan_project_elevation_index( - const int16_t el_idx, /* i : elevation index */ - const int16_t el_alph, /* i : number of elevation symbols */ - const int16_t el_alph_proj /* i : size of projected alphabet */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_param_est_enc( - DIRAC_ENC_HANDLE hDirAC, - IVAS_QDIRECTION *q_direction, - const uint8_t useLowerRes, - float *data_f[], - float **pp_fr_real, - float **pp_fr_imag, - const int16_t input_frame, - const IVAS_FORMAT ivas_format , - const int16_t hodirac_flag, - const int16_t nchan_fb_in, - int16_t *mono_frame_count, - int16_t *dirac_mono_flag - ); -#endif - - void ivas_sba_config( const int32_t sba_total_brate, /* i : SBA total bitrate */ int16_t sba_order, /* i : Ambisonic (SBA) order */ @@ -3759,22 +2746,7 @@ ivas_error ivas_sba_digest_tc( float *data[] /* i : transport channel samples */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_init_dec_get_num_cldfb_instances( - Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ - int16_t *numCldfbAnalyses, /* o : number of CLDFB analysis instances */ - int16_t *numCldfbSyntheses /* o : number of CLDFB synthesis instances */ -); -#endif // !IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_cldfb_dec_reconfig( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nchan_transport_old, /* i : number of TCs in previous frame */ - int16_t numCldfbAnalyses_old, /* i : number of CLDFB analysis instances in previous frame */ - const int16_t numCldfbSyntheses_old /* i : number of CLDFB synthesis instances in previous frame */ -); -#endif /*! r: Ambisonic (SBA) order */ int16_t ivas_sba_get_order( @@ -3789,19 +2761,6 @@ int16_t ivas_sba_get_nchan( ); /*! r: number of ambisonics metadata channels */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_sba_get_nchan_metadata( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -); -#endif - -void ivas_sba_zero_vert_comp( - float *sba_data[], /* i : SBA signals */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int16_t sba_planar, /* i : SBA planar flag */ - const int16_t input_frame /* i : input frame length */ -); void ivas_sba_getTCs( float *sba_data[], /* i : SBA signals */ @@ -3826,13 +2785,6 @@ void ivas_sba_dirac_stereo_config( STEREO_DFT_CONFIG_DATA_HANDLE hConfig /* o : DFT stereo configuration */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: HO-DirAC flag */ -int16_t ivas_get_hodirac_flag( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -); -#endif Word16 ivas_get_sba_dirac_stereo_flag( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ @@ -3846,53 +2798,17 @@ void ivas_sba_dirac_stereo_smooth_parameters( const int16_t num_md_sub_frames /* i : number of subframes in mixing matrix */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_sba2mc_cldfb( - IVAS_OUTPUT_SETUP hInSetup, /* i : Format of input layout */ - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb real part */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb imag part */ - const int16_t nb_channels_out, /* i : nb of output channels */ - const int16_t nb_bands, /* i : nb of CLDFB bands to process */ - const int16_t nb_timeslots, /* i : number of time slots to process */ - const float *hoa_dec_mtx /* i : HOA decoding mtx */ -); -#endif /*----------------------------------------------------------------------------------* * DirAC prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -); -#endif ivas_error ivas_dirac_enc_reconfigure( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_enc_close( - DIRAC_ENC_HANDLE *hDirAC, /* i/o: encoder DirAC handle */ - const int32_t input_Fs /* i : input sampling_rate */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_enc( - DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ - float *data_f[], /* i/o: SBA channels */ - float **ppIn_FR_real, /* o : real freq domain values */ - float **ppIn_FR_imag, /* o : imag freq domain values */ - const int16_t input_frame, /* i : input frame length */ - const int16_t dtx_vad, /* i : DTX vad flag */ - const IVAS_FORMAT ivas_format, /* i : ivas format */ - const int16_t hodirac_flag /* i : hodirac flag */ -); -#endif ivas_error ivas_dirac_config( void *st_ivas, /* i/o: IVAS encoder/decoder state structure */ @@ -3956,14 +2872,7 @@ void generate_masking_noise_lb_dirac( const int16_t nCldfbTs, /* i : number of CLDFB slots that will be rendered */ const int16_t cna_flag /* i : CNA flag for LB and HB */ ); -#ifdef IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_set_md_map( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nCldfbTs /* i : number of CLDFB time slots */ -); -#endif void ivas_dirac_dec_render( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ @@ -3982,15 +2891,6 @@ void ivas_dirac_dec_render_sf( float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] ); -#ifndef IVAS_FLOAT_FIXED -void computeDiffuseness_mdft( - float **buffer_intensity[DIRAC_NUM_DIMS], - const float *buffer_energy, - const int16_t num_freq_bands, - const uint16_t no_col_avg_diff, - float *diffuseness -); -#endif void computeDirectionVectors( float *intensity_real_x, @@ -4017,30 +2917,7 @@ void ivas_dirac_dec_get_response( const int16_t ambisonics_order ); -#ifndef IVAS_FLOAT_FIXED -void calculate_hodirac_sector_parameters( - DIRAC_ENC_HANDLE hDirAC, - float RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX],/* i : signal vector (L+1)^2 x N_bins, real part */ - float ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX],/* i : signal vector, imaginary part */ - const float beta, /* i : forgetting factor for average filtering */ - const int16_t *band_grouping, /* i : indices of band groups */ - const int16_t N_bands, /* i : number of bands (groups) */ - const int16_t enc_param_start_band, /* i : first band to process */ - float *azi, /* o : array of sector azimuth angles, flat */ - float *ele, /* o : array of sector elevation angles, flat */ - float *diff, /* o : array of sector diffuseness values, flat */ - float *ene /* o : array of sector energy values, flat */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_mc_paramupmix_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ - float *data_f[], /* i/o: input/transport MC data */ - const int16_t input_frame /* i : input frame length */ -); -#endif ivas_error ivas_mc_paramupmix_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ @@ -4071,33 +2948,12 @@ void ivas_mc_paramupmix_dec_digest_tc( const uint8_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ const int16_t nSamplesForRendering /* i : number of samples provided */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_mc_paramupmix_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailable, /* o : number of CLDFB slots still to render */ - float *input_f[], /* i : core-coder transport channels */ - float *output_f[] /* i/o: synthesized core-coder transport channels */ -); -void ivas_param_mc_metadata_open( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* o : handle for the Parametric MC parameter coding state */ -); -#endif -void ivas_param_mc_set_coded_bands( +void ivas_param_mc_set_coded_bands_fx( HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC /* i/o: handle for the Parametric MC parameter coding state */ ); /*! r: number of IVAS transport channels */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_param_mc_getNumTransportChannels( - const int32_t ivas_total_bitrate, /* i : IVAS total bitrate */ - const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ -); -#endif // IVAS_FLOAT_FIXED ivas_error ivas_param_mc_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ @@ -4127,20 +2983,7 @@ ivas_error ivas_param_mc_dec_reconfig( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_param_mc_dec_close( - PARAM_MC_DEC_HANDLE *hParamMC /* i/o: Parametric MC decoder handle */ -); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ivas_param_mc_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder ParamMC handle */ - int16_t *nb_bits /* o : number of bits written */ -); -#endif void ivas_param_mc_dec_digest_tc( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ @@ -4166,18 +3009,10 @@ int16_t param_mc_get_num_cldfb_syntheses( Decoder_Struct *st_ivas /* i : IVAS decoder structure */ ); -#ifdef IVAS_FLOAT_FIXED -UWord16 ivas_param_mc_get_configuration_index( +UWord16 ivas_param_mc_get_configuration_index_fx( const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ ); -#else -/*! r: index into the ParamMC configuration tables */ -uint16_t ivas_param_mc_get_configuration_index( - const MC_LS_SETUP mc_ls_setup, /* i : MC ls setup */ - const int32_t ivas_total_brate /* i : total bitrate */ -); -#endif // IVAS_FLOAT_FIXED int16_t matrix_product( const float *X, /* i : left hand matrix */ @@ -4191,22 +3026,6 @@ int16_t matrix_product( float *Z /* o : resulting matrix after the matrix multiplication */ ); -#ifndef IVAS_FLOAT_FIXED -void mat2svdMat( - const float *mat, /* i : matrix as column ordered vector */ - float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* o : matrix as two-dimensional arry */ - const int16_t nRows, /* i : number of rows of the matrix */ - const int16_t mCols, /* i : number of columns of the matrix */ - const int16_t transpose /* i : flag indication transposition */ -); - -void svdMat2mat( - float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* i : matrix as two-dimensional arry */ - float *mat, /* o : matrix as column ordered vector */ - const int16_t nRows, /* i : number of rows of the matrix */ - const int16_t mCols /* i : number of columns of the matrix */ -); -#endif int16_t matrix_diag_product( const float *X, /* i : left hand matrix */ @@ -4249,43 +3068,8 @@ void cmplx_matrix_square( float *imagZ /* o : imaginary part of the resulting matrix */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t computeMixingMatrices( - const int16_t num_inputs, /* i : number of input channels */ - const int16_t num_outputs, /* i : number of output channels */ - const float *Cx, /* i : input channel covariance matrix */ - const float *Cy, /* i : target covariance matrix */ - const float *Q, /* i : prototype matrix (usually a upmix matrix) */ - const int16_t energy_compensation_flag, /* i : flag indicating that the energy compensation should be performed (i.e. no residual mixing matrix will follow) */ - const float reg_Sx, /* i : regularization factor for the input channel singular values */ - const float reg_ghat, /* i : regularization factor for the normalization matrix */ - float *mixing_matrix, /* o : resulting mixing matrix */ - float *Cr /* o : residual covariance matrix */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -int16_t computeMixingMatricesResidual( - const int16_t num_outputs, /* i : number of output channels */ - const float *Cx, /* i : vector containing the diagonal diffuse prototype covariance */ - const float *Cy, /* i : matrix containing the missing cov (Cr from computeMixingMatrices()) */ - const float reg_Sx, /* i : regularization factor for the input channel singular values */ - const float reg_ghat, /* i : regularization factor for the normalization matrix */ - float *mixing_matrix /* o : resulting residual mixing matrix */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -/*! r: error or success */ -int16_t svd( - float InputMatrix[][MAX_OUTPUT_CHANNELS], /* i : matrix to be decomposed (M) */ - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* o : left singular vectors (U) */ - float singularValues[MAX_OUTPUT_CHANNELS], /* o : singular values vector (S) */ - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* o : right singular vectors (V) */ - const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ - const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ -); -#endif ivas_error ivas_dirac_dec_output_synthesis_cov_open( DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ @@ -4317,16 +3101,6 @@ void ivas_dirac_dec_output_synthesis_cov_close( DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state /* i/o: handle for the covariance synthesis state */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( - float *RealBuffer, /* i : input channel filter bank samples (real part) */ - float *ImagBuffer, /* i : input channel filter bank samples (imaginary part */ - float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (real part) */ - float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (imaginary part) */ - PARAM_MC_DEC_HANDLE hParamMC, /* i : handle to Parametric MC state */ - const int16_t nchan_in /* i : number of input channels */ -); -#endif void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( float *Cldfb_RealBuffer_in, /* i : input channel filter bank samples (real part) */ @@ -4342,22 +3116,6 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( PARAM_MC_DEC_HANDLE hParamMC /* i : handle to the Parametric MC decoder state */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t computeMixingMatricesISM( - const int16_t num_inputs, - const int16_t num_responses, - const int16_t num_outputs, - const float *responses, - const float *ener, - const float *Cx_diag, - const float *Cy_diag, - const float *Q, - const int16_t energy_compensation_flag, - const float reg_Sx, - const float reg_ghat, - float *mixing_matrix -); -#endif void FdCngEncodeDiracMDCTStereoSID( CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ @@ -4390,13 +3148,6 @@ ivas_error ivas_spar_dec_open( const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_close( - SPAR_DEC_HANDLE *hSpar, /* i/o: SPAR decoder handle */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ -); -#endif ivas_error ivas_spar_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ @@ -4433,11 +3184,6 @@ void ivas_sba_mix_matrix_determiner( /* AGC */ /*! r: AGC enable flag */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_agc_enc_get_flag( - const int16_t nchan_transport /* i : number of transport channels */ -); -#endif ivas_error ivas_spar_agc_enc_open( ivas_agc_enc_state_t **hAgcEnc, /* i/o: AGC decoder handle */ @@ -4467,14 +3213,6 @@ void ivas_spar_agc_dec_close( ivas_agc_dec_state_t **hAgcDec /* i/o: AGC decoder handle */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_md_enc_init -( - ivas_spar_md_enc_state_t *hMdEnc, /* o : MD encoder handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -); -#endif void ivas_agc_dec_process( ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ @@ -4532,17 +3270,6 @@ int16_t ivas_get_sba_num_TCs( const int16_t sba_order /* i : IVAS SBA order */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_set_bitrate_config( - ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ - const int16_t table_idx, /* i : config. table index */ - const int16_t num_bands, /* i : number of bands */ - const int16_t dirac2spar_md_flag, - const int16_t enc_flag, - const int16_t pca_flag, - const int16_t agc_flag -); -#endif void ivas_spar_bitrate_dist( int32_t core_brates_act[], /* o : bitrates per core-coder */ @@ -4596,12 +3323,6 @@ void ivas_spar_get_cldfb_gains( ); /*! r: 1 if prediction residual channel */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_is_res_channel( - const int16_t ch, /* i : ch index in WYZX ordering */ - const int16_t nchan_transport /* i : number of transport channels (1-4) */ -); -#endif void ivas_spar_dec_agc_pca( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ @@ -4654,13 +3375,6 @@ void ivas_spar_dec_upmixer( ); /* MD module */ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_md_enc_open( - ivas_spar_md_enc_state_t **hMdEnc, /* i/o: SPAR MD encoder handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -); -#endif void ivas_spar_md_enc_close( ivas_spar_md_enc_state_t **hMdEnc /* i/o: SPAR MD encoder handle */ @@ -4728,13 +3442,6 @@ void ivas_get_spar_md_from_dirac( ); /*! r: number of MD subframes */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_get_spar_dec_md_num_subframes( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int32_t ivas_last_active_brate /* i : IVAS last active bitrate */ -); -#endif ivas_error ivas_spar_md_dec_matrix_open( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ @@ -4821,75 +3528,11 @@ void ivas_spar_dec_gen_umx_mat( const int16_t num_md_sub_frames ); -#ifndef IVAS_FLOAT_FIXED -/* Covariance module */ -ivas_error ivas_spar_covar_enc_open( - ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t nchan_inp, /* i : number of input channels */ - const COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -); - -void ivas_spar_covar_enc_close( - ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ - const int16_t nchan_inp /* i : number of input channels */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void ivas_enc_cov_handler_process( - ivas_enc_cov_handler_state_t *hCovEnc, /* i/o: SPAR Covar. encoder handle */ - float **ppIn_FR_real, - float **ppIn_FR_imag, - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t start_band, - const int16_t end_band, - const int16_t nchan_inp, - const int16_t dtx_vad, - const int16_t transient_det[2], - const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH], - int16_t *res_ind, - const int16_t *remix_order, - int16_t *dyn_active_w_flag, - const int16_t nchan_transport, - const int16_t is_sba -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_covar_smooth_enc_open( - ivas_cov_smooth_state_t **hCovState, /* i/o: SPAR Covar. smoothing handle */ - const ivas_cov_smooth_cfg_t *cov_smooth_cfg, /* i : SPAR config. handle */ - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t nchan_inp, /* i : number of input channels */ - const COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -); -void ivas_spar_covar_smooth_enc_close( - ivas_cov_smooth_state_t **hCovState, /* i/o: SPAR Covar. encoder handle */ - const int16_t nchan_inp /* i : number of input channels */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_cov_smooth_process( - ivas_cov_smooth_state_t *hCovState, /* i/o: Covariance state handle */ - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t start_band, - const int16_t end_band, - const int16_t num_ch, - const int16_t transient_det[2] -); -#endif /* Transient detector module */ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_transient_det_open_fx( ivas_trans_det_state_t **hTranDet, /* i/o: Transient detector handle */ const Word32 sampling_rate /* i : sampling rate */ @@ -4898,16 +3541,6 @@ ivas_error ivas_transient_det_open_fx( void ivas_transient_det_close_fx( ivas_trans_det_state_t **hTranDet /* i/o: Transient detector handle */ ); -#else -ivas_error ivas_transient_det_open( - ivas_trans_det_state_t **hTranDet, /* i/o: Transient detector handle */ - const int32_t sampling_rate /* i : sampling rate */ -); - -void ivas_transient_det_close( - ivas_trans_det_state_t **hTranDet /* i/o: Transient detector handle */ -); -#endif void ivas_transient_det_process( ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ @@ -4972,6 +3605,7 @@ void ivas_pca_dec( float *pcm_out[] /* o : output audio channels */ ); +#ifndef IVAS_FLOAT_FIXED /* PCA utilities */ void eye_matrix( float *mat, @@ -5037,17 +3671,13 @@ void pca_enc_s3( float *q, int32_t *index ); +#endif void pca_dec_s3( const int32_t index, float *q ); -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_get_bits_to_encode( - int32_t val -); -#endif void ivas_huffman_encode( ivas_huffman_cfg_t *huff_cfg, @@ -5057,20 +3687,6 @@ void ivas_huffman_encode( ); -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_arith_encode_cmplx_cell_array( - ivas_arith_t *pArith_re, - ivas_arith_t *pArith_re_diff, - const int16_t *pDo_diff, - const int16_t nB, - int16_t *pSymbol_re, - int16_t *pSymbol_old_re, - ivas_cell_dim_t *pCell_dims, - BSTR_ENC_HANDLE hMetaData, - const int16_t any_diff , - const int16_t wc_strat_arith -); -#endif ivas_error ivas_huffman_decode( ivas_huffman_cfg_t *huff_cfg, @@ -5088,41 +3704,13 @@ void ivas_arith_decode_cmplx_cell_array( int16_t *pSymbol_re_old ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ari_start_decoding_14bits_ext_1_lfe( - Decoder_State *st, - Tastat *s, - int16_t *extra_bits_read -); -#endif -#ifndef IVAS_FLOAT_FIXED -uint16_t ivas_ari_decode_14bits_bit_ext_1_lfe( - Decoder_State *st, Tastat *s, - const uint16_t *cum_freq, - int16_t *extra_bits_read -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_ari_done_decoding_14bits_ext_1_lfe( - Decoder_State *st, - const int16_t extra_bits_read -); -#endif void ivas_ari_done_encoding_14bits( BSTR_ENC_HANDLE hBstr, Tastat *s ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ari_encode_14bits_ext( - BSTR_ENC_HANDLE hBstr, - Tastat *s, - int32_t symbol, - const uint16_t *cum_freq -); -#endif // !IVAS_FLOAT_FIXED void ivas_wrap_arround( int16_t *pArr, @@ -5161,12 +3749,6 @@ void ivas_quantise_real_values( const int16_t dim ); -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_get_uniform_quant_strat( - ivas_spar_md_com_cfg *pSpar_md_com_cfg, - const int16_t table_idx -); -#endif void ivas_spar_quant_dtx_init( ivas_spar_md_t *spar_md, @@ -5180,15 +3762,6 @@ void ivas_map_prior_coeffs_quant( const int16_t nB ); -#ifndef IVAS_FLOAT_FIXED -void ivas_copy_band_coeffs_idx_to_arr( - ivas_band_coeffs_ind_t *pBands_idx, - const int16_t nB, - int16_t *pSymbol_re, - ivas_cell_dim_t *pCell_dims, - const ivas_coeffs_type_t coeff_type -); -#endif void ivas_clear_band_coeffs( ivas_band_coeffs_t *pband_coeffs, @@ -5204,15 +3777,6 @@ void ivas_clear_band_coeff_idx( /*----------------------------------------------------------------------------------* * MASA prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_masa_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -); - -void ivas_masa_dec_close( - MASA_DECODER_HANDLE *hMasa /* i/o: MASA metadata structure */ -); -#endif ivas_error ivas_masa_decode( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ @@ -5268,11 +3832,6 @@ void ivas_masa_estimate_energy( const int16_t nchan_transport /* i : number of MASA input/transport channels */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_masa_enc_config( - Encoder_Struct* st_ivas /* i/o: IVAS encoder structure */ -); -#endif void ivas_masa_set_elements( const int32_t ivas_total_brate, /* i : codec total bitrate */ @@ -5307,14 +3866,6 @@ void distribute_evenly_ism( const int16_t nchan_ism ); -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_qmetadata_DecodeExtendedGR( - uint16_t* bitstream, - int16_t* index, - const int16_t alph_size, - const int16_t gr_param -); -#endif int16_t ivas_qmetadata_encode_extended_gr_length( const uint16_t value, @@ -5339,11 +3890,6 @@ void ivas_merge_masa_metadata( OMASA_SPATIAL_META_HANDLE hOMasaMeta /* i : ISM-object metadata to be merged with the MASA metadata */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_combine_directions( - MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder handle */ -); -#endif /*!r : number of bits for ISM ratio index */ int16_t bits_index_ism_ratio( @@ -5367,11 +3913,13 @@ int16_t calculate_brate_limit_flag( const int16_t nchan_ism /* i : number of objects */ ); +#ifndef IVAS_FLOAT_FIXED void ivas_get_stereo_panning_gains( const float aziDeg, const float eleDeg, float panningGains[2] ); +#endif void ivas_masa_set_coding_config( MASA_CODEC_CONFIG* config, /* i/o: MASA coding config structure */ @@ -5397,24 +3945,20 @@ void masa_compensate_two_dir_energy_ratio_index( const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ ); +#ifndef IVAS_FLOAT_FIXED void ivas_set_qmetadata_maxbit_req( IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ const IVAS_FORMAT ivas_format /* i : IVAS format */ ); - -#ifndef IVAS_FLOAT_FIXED -/*! r: Bits to be used for quantizing distribution ratio of direct-to-total ratios */ -Word16 ivas_get_df_ratio_bits_hodirac( - const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ -); - -/*! r: Bits to be used for quantizing distribution ratio of direct-to-total ratios */ -Word16 ivas_get_df_ratio_bits( - const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ +#else +void ivas_set_qmetadata_maxbit_req_fx( + IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ + const IVAS_FORMAT ivas_format /* i : IVAS format */ ); #endif + void masa_sample_rate_band_correction( MASA_CODEC_CONFIG *config, /* i/o: MASA codec config */ int16_t *band_mapping, /* i/o: Band mapping used and modified */ @@ -5429,22 +3973,6 @@ void invdct4_transform( uint8_t *invdct_v /* o : transformed vector */ ); -#ifndef IVAS_FLOAT_FIXED -void update_bits_next_block( - IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ - int16_t *p_diff, /* i/o: bits to be transferred */ - const int16_t j, /* i : current subband index */ - const int16_t max_i, /* i : max number of subands */ - const int16_t max_k /* i : max number of subframe */ -); - -void ivas_masa_prerender( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output[], /* i/o: synthesized core-coder transport channels */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nchan_remapped /* i : number of transports used in core */ -); -#endif void ivas_spar_param_to_masa_param_mapping( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ @@ -5456,35 +3984,11 @@ void ivas_spar_param_to_masa_param_mapping( /*---------------------------------------------------------------------------------* * Binaural FastConv Renderer Prototypes *-----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_binRenderer_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_binRenderer_close( - BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: decoder binaural renderer handle */ -); -#endif void ivas_binaural_hrtf_close( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i/o: decoder binaural hrtf handle */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_init_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv /* i/o: FASTCONV HRTF structure */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_allocate_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ - const AUDIO_CONFIG input_config, /* i : input audio configuration */ - const BINAURAL_INPUT_AUDIO_CONFIG bin_input_config, /* i : binaural input audio config */ - const RENDERER_TYPE renderer_type, /* i : renderer type */ - const int16_t allocate_init_flag /* i : Memory allocation flag */ -); -#endif void ivas_binRenderer( BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ @@ -5521,14 +4025,6 @@ void ivas_ism_render_sf( const int16_t n_samples_to_render /* i : output frame length per channel */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_get_stereo_gains( - const float azimuth, /* i : object azimuth */ - const float elevation, /* i : object elevation */ - float *left_gain, /* o : left channel gain */ - float *right_gain /* o : right channel gain */ -); -#endif void ivas_mc2sba( IVAS_OUTPUT_SETUP hIntSetup, /* i : Format of decoder output */ @@ -5549,17 +4045,6 @@ void ivas_param_mc_mc2sba_cldfb( const float gain_lfe /* i : gain applied to LFE */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_ism2sba_sf( - float *buffer_in[], /* i : TC buffer */ - float *buffer_out[], /* o : TD signal buffers */ - ISM_RENDERER_HANDLE hIsmRendererData, /* i/o: renderer data */ - const int16_t num_objects, /* i : number of objects */ - const int16_t n_samples_to_render, /* i : output frame length per channel */ - const int16_t offset, /* i : offset for the interpolatr */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -); -#endif /*----------------------------------------------------------------------------------* * Amplitude Panning VBAP prototypes @@ -5626,40 +4111,12 @@ ivas_error ivas_ls_custom_open( LSSETUP_CUSTOM_HANDLE *hLsSetupCustom /* o : Custom loudspeaker setup handle */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ls_custom_output_init( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -); - -void ivas_ls_custom_setup( - IVAS_OUTPUT_SETUP_HANDLE hOutSetup, /* o : IVAS output setup handle */ -#ifdef IVAS_FLOAT_FIXED - LSSETUP_CUSTOM_STRUCT *hLsSetupCustom /* i : Custom loudspeaker setup handle */ -#else - const LSSETUP_CUSTOM_STRUCT *hLsSetupCustom /* i : Custom loudspeaker setup handle */ -#endif // IVAS_FLOAT_FIXED -); -#endif /*----------------------------------------------------------------------------------* * McMASA prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_mcmasa_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -); - -void ivas_mcmasa_enc_close( - MCMASA_ENC_HANDLE *hMcMasa, /* i/o: encoder McMASA handle */ - const int32_t input_Fs /* i : input sampling rate */ -); - -ivas_error ivas_mcmasa_enc_reconfig( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -); -#endif ivas_error ivas_mcmasa_dec_reconfig( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ @@ -5686,47 +4143,13 @@ void ivas_mcmasa_split_brate( int32_t *brate_cpe /* o : Pointer to CPE element bitrate */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_mcmasa_enc( - MCMASA_ENC_HANDLE hMcMasa, /* i/o: Encoder McMASA handle */ - IVAS_QMETADATA_HANDLE hQMeta, /* o : Qmetadata handle */ - MASA_ENCODER_HANDLE hMasa, /* i/o: Encoder MASA handle */ - float *data_f[], /* i : Input frame of audio */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_inp /* i : Number of input channels */ -); - -void ivas_mcmasa_param_est_enc( - MCMASA_ENC_HANDLE hMcMasa, /* i/o: Encoder McMASA handle */ - MASA_ENCODER_HANDLE hMasa, /* i/o: Encoder MASA handle */ - float *data_f[], /* i : Input frame of audio */ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated elevation */ - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated azimuth */ - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated direct-to-total ratio*/ - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated spread coherence */ - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated surround coherence */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_inp /* i : Number of input channels */ -); - -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_dmx_modify_fx( const Word16 n_samples, /* i : input frame length in samples */ Word32 dmx_fx[][L_FRAME48k + NS2SA(48000, IVAS_FB_ENC_DELAY_NS)], /* i/o: downmix signal to be transformed into another format Qx*/ const Word16 n_chnls_dmx_old, /* i : number of downmix channels in the old format Q0*/ const Word16 n_chnls_dmx_new /* i : number of downmix channels in the target format Q0*/ ); -#else -void ivas_mcmasa_dmx_modify( - const int16_t n_samples, /* i : input frame length in samples */ - float dmx[][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )], /* i/o: downmix signal to be transformed into another format */ - const int16_t n_chnls_dmx_old, /* i : number of downmix channels in the old format */ - const int16_t n_chnls_dmx_new /* i : number of downmix channels in the target format */ -); -#endif void v_multc_acc( const float x[], /* i : Input vector */ @@ -5743,21 +4166,6 @@ void lls_interp_n( const int16_t upd /* i : use 1 to update x[] with the interpolated output*/ ); -#ifndef IVAS_FLOAT_FIXED -void computeReferencePower_enc( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ - float *reference_power, /* o : Estimated power */ - const int16_t enc_param_start_band, /* i : first band to process */ - const int16_t num_freq_bands, /* i : Number of frequency bands */ - const IVAS_FORMAT ivas_format, /* i : ivas_format */ - int16_t ref_power_w, /* i : use 0 if hodirac is enabled */ - const int16_t nchan_ana, /* i : number of analysis channels */ - int16_t *mono_frame_count, - int16_t *dirac_mono_flag -); -#endif ivas_error ivas_mono_dmx_renderer_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ @@ -5774,22 +4182,6 @@ void ivas_mono_downmix_render_passive( const int16_t output_frame /* i : output frame length */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_mono_stereo_downmix_mcmasa( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[], /* i/o: synthesized core-coder transport channels/mono or stereo output */ - int16_t output_frame /* i : output frame length per channel */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_lfe_synth_with_filters( - MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: LFE synthesis structure for McMASA */ - float *data_f[], /* o : output signals */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t separateChannelIndex, /* i : separate channel index */ - const int16_t lfeChannelIndex /* i : LFE channel index */ -); -#endif /*----------------------------------------------------------------------------------* * LFE encoder low pass filter prototypes @@ -5831,25 +4223,6 @@ void ivas_lfe_enc( BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_create_lfe_dec( - LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */ - const int32_t output_Fs, /* i : output sampling rate */ - const int32_t binauralization_delay_ns /* i : additional LFE delay to sync with binaural renderer */ -); - -void ivas_lfe_dec_close( - LFE_DEC_HANDLE *hLFE /* i/o: LFE encoder handle */ -); - -void ivas_lfe_dec( - LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t bfi, /* i : BFI flag */ - float output_lfe_ch[] /* o : output LFE synthesis */ -); -#endif void ivas_lfe_tdplc( LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ float *prevsynth, /* i : previous frame synthesis */ @@ -5874,13 +4247,11 @@ void ivas_filters_init( const int16_t order /* i : filter order */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_filters_init_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ const Word32 *filt_coeff_fx, /* i : filter coefficients Q31- *filt_coeff_e */ const Word16 *filt_coeff_e, /* i : exponents of filter coefficients */ const Word16 order ) ; -#endif void ivas_filter_process( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ @@ -5888,43 +4259,18 @@ void ivas_filter_process( const int16_t length /* i : filter order */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_filter_process_fx( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering Q(q_factor) */ const Word16 length, /* i : filter order */ Word16 q_factor ); -#endif /*----------------------------------------------------------------------------------* * OSBA prototypes *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_osba_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_osba_enc_close( - OSBA_ENC_HANDLE *hOSba /* i/o: encoder OSBA handle */ -); -#endif ivas_error ivas_osba_enc_reconfig( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_osba_enc( - OSBA_ENC_HANDLE hOSba, /* i/o: OSBA encoder handle */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handle */ - float *data_in_f[], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_ism, /* i : Number of objects for parameter analysis*/ - const ISM_MODE ism_mode, /* i : ISM mode */ - const int16_t sba_analysis_order, /* i : SBA order evaluated in SBA encoder */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t sba_planar /* i : planar SBA flag */ -); -#endif ivas_error ivas_osba_data_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ); @@ -5937,23 +4283,6 @@ ivas_error ivas_osba_dirac_td_binaural_jbm( float *output_f[] /* o : rendered time signal */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_osba_ism_metadata_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int32_t ism_total_brate, /* i : ISM total bitrate */ - int16_t *nchan_ism, /* o : number of ISM separated channels */ - int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_osba_render_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -); -#endif void ivas_osba_data_close( SBA_ISM_DATA_HANDLE *hSbaIsmData /* i/o: OSBA rendering handle */ @@ -5972,11 +4301,6 @@ void ivas_omasa_enc_close( OMASA_ENC_HANDLE *hOMasa /* i/o: encoder OMASA handle */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_enc_config( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -); -#endif // !IVAS_FLOAT_FIXED ivas_error ivas_omasa_dec_config( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ @@ -5984,30 +4308,8 @@ ivas_error ivas_omasa_dec_config( int16_t *data /* o : output synthesis signal */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_set_config( - OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ - MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder handle */ - const int32_t input_Fs, /* i : Input sample rate */ - const ISM_MODE ism_mode /* i : ISM mode */ -); -#endif // !IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_enc( - OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder handle */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handle */ - float *data_in_f[], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_ism, /* i : Number of objects for parameter analysis*/ - const ISM_MODE ism_mode, /* i : ISM mode */ - float *data_separated_object, /* o : Separated object audio signal */ - int16_t* idx_separated_object /* o : Index of the separated object */ -); -#endif // !IVAS_FLOAT_FIXED void ivas_set_surplus_brate_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ @@ -6032,15 +4334,6 @@ void ivas_set_ism_importance_interformat( int16_t ism_imp[] /* o : ISM importance flags */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: flag for using less bitrate for objects in OMASA */ -int16_t ivas_omasa_ener_brate( - const int16_t nchan_ism, /* i : number of ISMs */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - float *data_f[], /* i : Input / transport audio signals */ - const int16_t input_frame /* i : Input frame size */ -); -#endif // !IVAS_FLOAT_FIXED /*! r: adjusted bitrate */ int32_t ivas_interformat_brate( @@ -6080,15 +4373,6 @@ void ivas_merge_masa_transports( const int16_t num_transport_channels /* i : Number of transport audio signals */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_data_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -); - -void ivas_omasa_data_close( - MASA_ISM_DATA_HANDLE *hMasaIsmData /* i/o: MASA_ISM rendering handle */ -); -#endif ivas_error ivas_omasa_ism_metadata_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ @@ -6098,33 +4382,6 @@ ivas_error ivas_omasa_ism_metadata_dec( const int16_t dirac_bs_md_write_idx, /* i : DirAC bitstream write index */ int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_dirac_td_binaural_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of samples requested */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailable, /* o : number of samples still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_rearrange_channels( - float *output[], /* o : output synthesis signal */ - const int16_t nchan_transport_ism, /* i : number of ISM TCs */ - const int16_t output_frame /* i : output frame length per channel */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_dirac_rend_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of samples requested */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailable, /* o : number of samples still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -); -#endif void ivas_omasa_preProcessStereoTransportsForMovedObjects( Decoder_Struct *st_ivas, @@ -6176,11 +4433,6 @@ void ivas_omasa_modify_masa_energy_ratios( /*----------------------------------------------------------------------------------* * TD Binaural Object renderer *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_td_binaural_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -); -#endif // IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ @@ -6234,12 +4486,5 @@ void ivas_fb_mixer_get_windowed_fr( ); /*! r: number of spectral bands */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_get_num_bands_from_bw_idx( - const int16_t bwidth /* i : audio bandwidth */ -); -#endif /* clang-format on */ - -#endif /* IVAS_PROT_H */ diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index d746da651..516e11467 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -1066,7 +1066,7 @@ void ivas_omasa_separate_object_render_jbm_fx( const Word16 slots_rendered /* i : number of CLDFB slots rendered */ ); -void get_panning_gain( +void get_panning_gain_fx( const Word16 sinAngleMapped, Word16 *panningGains ); @@ -2029,11 +2029,11 @@ Word16 is_DTXrate( const Word32 ivas_total_brate /* i : IVAS total bitrate */ ); -Word16 ivas_qmetadata_dereorder_generic( +Word16 ivas_qmetadata_dereorder_generic_fx( const UWord16 uns_value /* i : unsigned value result of ReorderGeneric */ ); -void update_bits_next_block( +void update_bits_next_block_fx( IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ Word16 *p_diff, /* i/o: bits to be transferred */ const Word16 j, /* i : subband to update bit alloc to*/ @@ -2081,27 +2081,27 @@ Word16 stereo_tdm_ener_analysis_fx( ); /*! r: projected azimuth index */ -Word16 ivas_dirac_project_azimuth_index( +Word16 ivas_dirac_project_azimuth_index_fx( const Word16 az_idx, /* i : azimuth index */ const Word16 az_alph, /* i : number of azimuth symbols */ const Word16 az_alph_proj /* i : size of projected alphabet */ ); /*! r: projected elevation index */ -Word16 ivas_dirac_project_elevation_index( +Word16 ivas_dirac_project_elevation_index_fx( const Word16 el_idx, /* i : elevation index */ const Word16 el_alph, /* i : number of elevation symbols */ const Word16 el_alph_proj /* i : size of projected alphabet */ ); /*! r: projected index in channel mode */ -Word16 ivas_chan_project_elevation_index( +Word16 ivas_chan_project_elevation_index_fx( const Word16 el_idx, /* i : elevation index */ const Word16 el_alph, /* i : number of elevation symbols */ const Word16 el_alph_proj /* i : size of projected alphabet */ ); -void small_reduction_direction( +void small_reduction_direction_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ UWord16 bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], const Word16 raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], @@ -2141,18 +2141,18 @@ void ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( Word32 *el /* o : elevation */ ); -ivas_error ivas_qmetadata_open( +ivas_error ivas_qmetadata_open_fx( IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ ); -ivas_error ivas_qmetadata_allocate_memory( +ivas_error ivas_qmetadata_allocate_memory_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ const Word16 nbands, /* i : new number of frequency bands */ const Word16 ndirs, /* i : new number of directions */ const Word16 coherence_flag /* i : new coherence coding status */ ); -void ivas_qmetadata_close( +void ivas_qmetadata_close_fx( IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ ); @@ -3596,12 +3596,12 @@ void ivas_masa_combine_directions_fx( ); /*! r: Bits to be used for quantizing distribution ratio of direct-to-total ratios */ -Word16 ivas_get_df_ratio_bits_hodirac( +Word16 ivas_get_df_ratio_bits_hodirac_fx( const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ ); /*! r: Bits to be used for quantizing distribution ratio of direct-to-total ratios */ -Word16 ivas_get_df_ratio_bits( +Word16 ivas_get_df_ratio_bits_fx( const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ ); @@ -5009,7 +5009,7 @@ void ivas_mc_paramupmix_dec_render( Word32 *output_fx[] /* i/o: synthesized core-coder transport channels */ ); -Word16 ivas_param_mc_getNumTransportChannels( +Word16 ivas_param_mc_getNumTransportChannels_fx( const Word32 ivas_total_bitrate, /* i : IVAS total bitrate */ const MC_LS_SETUP mc_ls_setup /* i : MC ls setup */ ); diff --git a/lib_com/ivas_qmetadata_com.c b/lib_com/ivas_qmetadata_com.c index 25815afe3..73b85c7a5 100644 --- a/lib_com/ivas_qmetadata_com.c +++ b/lib_com/ivas_qmetadata_com.c @@ -40,13 +40,9 @@ #include "prot.h" #include "cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif // #include "debug.h" @@ -60,7 +56,7 @@ * Local function prototypes *-----------------------------------------------------------------------*/ -static void ivas_qmetadata_free_memory( IVAS_QMETADATA_HANDLE hQMetaData ); +static void ivas_qmetadata_free_memory_fx( IVAS_QMETADATA_HANDLE hQMetaData ); /*-----------------------------------------------------------------------* @@ -69,7 +65,7 @@ static void ivas_qmetadata_free_memory( IVAS_QMETADATA_HANDLE hQMetaData ); * Allocate Q Metadata handle *-----------------------------------------------------------------------*/ -ivas_error ivas_qmetadata_open( +ivas_error ivas_qmetadata_open_fx( IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ ) { @@ -99,8 +95,7 @@ ivas_error ivas_qmetadata_open( * set here to their default values out of practicality. *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_qmetadata_allocate_memory( +ivas_error ivas_qmetadata_allocate_memory_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ const Word16 nbands, /* i : new number of frequency bands */ const Word16 ndirs, /* i : new number of directions */ @@ -126,7 +121,7 @@ ivas_error ivas_qmetadata_allocate_memory( IF( do_realloc ) { - ivas_qmetadata_free_memory( hQMetaData ); + ivas_qmetadata_free_memory_fx( hQMetaData ); hQMetaData->numCodingBands = (UWord8) nbands; move16(); @@ -203,107 +198,6 @@ ivas_error ivas_qmetadata_allocate_memory( return IVAS_ERR_OK; } -#else -ivas_error ivas_qmetadata_allocate_memory( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - const int16_t nbands, /* i : new number of frequency bands */ - const int16_t ndirs, /* i : new number of directions */ - const int16_t coherence_flag /* i : new coherence coding status */ -) -{ - int16_t j, dir; - uint8_t do_realloc; - - - /* Check if we need to reallocate memory or do we need to do the first time allocation. */ - if ( hQMetaData->q_direction != NULL ) - { - do_realloc = nbands != hQMetaData->q_direction->cfg.nbands; - do_realloc |= ndirs != hQMetaData->no_directions; - do_realloc |= coherence_flag != hQMetaData->coherence_flag; - } - else - { - do_realloc = TRUE; - } - - if ( do_realloc ) - { - ivas_qmetadata_free_memory( hQMetaData ); - - hQMetaData->numCodingBands = (uint8_t) nbands; - hQMetaData->no_directions = ndirs; - hQMetaData->coherence_flag = coherence_flag; - - if ( ( hQMetaData->q_direction = (IVAS_QDIRECTION *) malloc( sizeof( IVAS_QDIRECTION ) * ndirs ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Q MetaData" ); - } - - for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) - { - hQMetaData->q_direction[dir].cfg.nbands = nbands; - if ( nbands == 0 ) - { - hQMetaData->q_direction[dir].band_data = NULL; - } - else - { - if ( ( hQMetaData->q_direction[dir].band_data = (IVAS_QDIRECTION_BAND_DATA *) malloc( sizeof( IVAS_QDIRECTION_BAND_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Q MetaData" ); - } - - for ( j = 0; j < nbands; j++ ) - { - set_zero( hQMetaData->q_direction[dir].band_data[j].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); -#ifdef IVAS_FLOAT_FIXED - set32_fx( hQMetaData->q_direction[dir].band_data[j].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); -#endif - set_zero( hQMetaData->q_direction[dir].band_data[j].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); -#ifdef IVAS_FLOAT_FIXED - set32_fx( hQMetaData->q_direction[dir].band_data[j].azimuth_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); -#endif - set_zero( hQMetaData->q_direction[dir].band_data[j].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); -#ifdef IVAS_FLOAT_FIXED - set32_fx( hQMetaData->q_direction[dir].band_data[j].energy_ratio_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); -#endif - } - } - - if ( coherence_flag ) - { - hQMetaData->q_direction[dir].coherence_band_data = (IVAS_QDIRECTION_BAND_COHERENCE_DATA *) malloc( sizeof( IVAS_QDIRECTION_BAND_COHERENCE_DATA ) * hQMetaData->q_direction[dir].cfg.nbands ); - } - else - { - hQMetaData->q_direction[dir].coherence_band_data = NULL; - } - - /* These default values are set here to get them conveniently in one place */ - hQMetaData->q_direction[dir].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; - hQMetaData->q_direction[dir].cfg.search_effort = 3; - hQMetaData->q_direction[dir].cfg.start_band = 0; - hQMetaData->q_direction[dir].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; - } - - if ( coherence_flag ) - { - if ( ( hQMetaData->surcoh_band_data = (IVAS_SURROUND_COHERENCE_BAND_DATA *) malloc( sizeof( IVAS_SURROUND_COHERENCE_BAND_DATA ) * hQMetaData->q_direction[0].cfg.nbands ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Q MetaData" ); - } - } - else - { - hQMetaData->surcoh_band_data = NULL; - } - } - - - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------* @@ -312,8 +206,7 @@ ivas_error ivas_qmetadata_allocate_memory( * free dynamic part of Q Metadata memory *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static void ivas_qmetadata_free_memory( +static void ivas_qmetadata_free_memory_fx( IVAS_QMETADATA_HANDLE hQMetaData /* i/o: q_metadata handle */ ) { @@ -352,47 +245,6 @@ static void ivas_qmetadata_free_memory( return; } -#else -static void ivas_qmetadata_free_memory( - IVAS_QMETADATA_HANDLE hQMetaData /* i/o: q_metadata handle */ -) -{ - int16_t dir; - - if ( hQMetaData == NULL ) - { - return; - } - - if ( hQMetaData->q_direction != NULL ) - { - for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) - { - if ( hQMetaData->q_direction[dir].band_data != NULL ) - { - free( hQMetaData->q_direction[dir].band_data ); - hQMetaData->q_direction[dir].band_data = NULL; - } - if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) - { - free( hQMetaData->q_direction[dir].coherence_band_data ); - hQMetaData->q_direction[dir].coherence_band_data = NULL; - } - } - - free( hQMetaData->q_direction ); - hQMetaData->q_direction = NULL; - } - - if ( hQMetaData->surcoh_band_data != NULL ) - { - free( hQMetaData->surcoh_band_data ); - hQMetaData->surcoh_band_data = NULL; - } - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -401,8 +253,7 @@ static void ivas_qmetadata_free_memory( * close Q Metadata *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_qmetadata_close( +void ivas_qmetadata_close_fx( IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ ) { @@ -412,31 +263,13 @@ void ivas_qmetadata_close( return; } - ivas_qmetadata_free_memory( *hQMetaData ); - - free( *hQMetaData ); - *hQMetaData = NULL; - - return; -} -#else -void ivas_qmetadata_close( - IVAS_QMETADATA_HANDLE *hQMetaData /* i/o: q_metadata handle */ -) -{ - if ( hQMetaData == NULL || *hQMetaData == NULL ) - { - return; - } - - ivas_qmetadata_free_memory( *hQMetaData ); + ivas_qmetadata_free_memory_fx( *hQMetaData ); free( *hQMetaData ); *hQMetaData = NULL; return; } -#endif /*------------------------------------------------------------------------- @@ -446,26 +279,6 @@ void ivas_qmetadata_close( *------------------------------------------------------------------------*/ /*! r: codeword index */ -#ifndef IVAS_FLOAT_FIXED -int16_t masa_sq( - const float in, /* i : input value */ - const float *threshold, /* i : partition */ - const int16_t cb_sz /* i : codebook size */ -) -{ - int16_t i; - - for ( i = 0; i < cb_sz; i++ ) - { - if ( in < threshold[i + 1] ) - { - return i; - } - } - - return -1; -} -#else Word16 masa_sq_fx( const Word32 in, /* i : input value */ const Word32 *threshold, /* i : partition */ @@ -484,7 +297,6 @@ Word16 masa_sq_fx( return -1; } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * only_reduce_bits_direction() @@ -492,7 +304,6 @@ Word16 masa_sq_fx( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error only_reduce_bits_direction_fx( Word16 *reduce_bits_out, IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ @@ -714,113 +525,6 @@ ivas_error only_reduce_bits_direction_fx( return IVAS_ERR_OK; } -#else -ivas_error only_reduce_bits_direction( - int16_t *reduce_bits_out, - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - int16_t reduce_bits, - const int16_t coding_subbands, - const int16_t no_subframes, - int16_t *ind_order ) -{ - int16_t j, k, red_times, rem, n; - int16_t max_nb, delta; - int16_t *bits_dir0; - - int16_t bits_sph_idx_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - float penalty[MASA_MAXIMUM_CODING_SUBBANDS]; - for ( j = 0; j < coding_subbands; j++ ) - { - for ( k = 0; k < no_subframes; k++ ) - { - bits_sph_idx_orig[j][k] = q_direction->band_data[j].bits_sph_idx[k]; - } - } - n = 0; - delta = 1; - - if ( reduce_bits > 0 ) - { - red_times = reduce_bits / ( coding_subbands * no_subframes ); /* number of complete reductions by 1 bit */ - if ( red_times > 0 ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - for ( k = 0; k < no_subframes; k++ ) - { - bits_dir0[k] -= red_times; - reduce_bits -= red_times; - - if ( bits_dir0[k] < MASA_MIN_BITS_TF ) - { - reduce_bits += ( MASA_MIN_BITS_TF - bits_dir0[k] ); - bits_dir0[k] = MASA_MIN_BITS_TF; - } - } - } - } - - rem = reduce_bits; /* -coding_subbands*no_subframes*red_times; */ - while ( n < rem ) - { - max_nb = 0; - for ( j = 0; j < coding_subbands; j++ ) - { - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - for ( k = 0; k < no_subframes; k++ ) - { - if ( ( n < rem ) && ( bits_dir0[k] > MASA_MIN_BITS_TF - delta ) ) - { - bits_dir0[k] -= 1; - n++; - } - - if ( max_nb < bits_dir0[k] ) - { - max_nb = bits_dir0[k]; - } - } - } - - if ( max_nb <= MASA_MIN_BITS_TF ) - { - delta += 1; - } - } - - reduce_bits = 0; - } - - if ( ind_order[0] == -1 ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - ind_order[j] = j; - } - } - else - { - for ( j = 0; j < coding_subbands; j++ ) - { - penalty[j] = 0.0f; - for ( k = 0; k < no_subframes; k++ ) - { - if ( bits_sph_idx_orig[j][k] > 0 ) - { - penalty[j] += ( bits_sph_idx_orig[j][k] - q_direction->band_data[j].bits_sph_idx[k] ) / (float) bits_sph_idx_orig[j][k]; - } - } - penalty[j] /= no_subframes; - } - sort_desc_ind( penalty, coding_subbands, ind_order ); - } - - *reduce_bits_out = -reduce_bits; - - return IVAS_ERR_OK; -} -#endif /*--------------------------------------------------------------- @@ -829,8 +533,7 @@ ivas_error only_reduce_bits_direction( * Transfer the saved bits to the next subbands *---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void update_bits_next_block( +void update_bits_next_block_fx( IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ Word16 *p_diff, /* i/o: bits to be transferred */ const Word16 j, /* i : subband to update bit alloc to*/ @@ -880,49 +583,6 @@ void update_bits_next_block( return; } -#else -void update_bits_next_block( - IVAS_QDIRECTION *q_direction, /* i/o: qdirection */ - int16_t *p_diff, /* i/o: bits to be transferred */ - const int16_t j, /* i : subband to update bit alloc to*/ - const int16_t max_i, /* i : number of subbands */ - const int16_t max_k /* i : n umber of subframes */ -) -{ - int16_t diff; - int16_t k; - diff = *p_diff; - if ( diff < 0 ) - { - /* increase bits for next subbands */ - k = 0; - while ( ( diff < 0 ) && ( j < max_i ) && ( k < max_k ) ) - { - if ( q_direction->band_data[j].bits_sph_idx[k] < MASA_DIRECTION_MAX_BITS ) - { - q_direction->band_data[j].bits_sph_idx[k] += 1; - diff++; - } - k++; - } - } - else - { - k = 0; - while ( ( diff > 0 ) && ( k < max_k ) ) - { - if ( q_direction->band_data[j].bits_sph_idx[k] > 0 ) - { - q_direction->band_data[j].bits_sph_idx[k] -= 1; - diff--; - } - } - } - *p_diff = diff; - - return; -} -#endif /*--------------------------------------------------------------- @@ -931,44 +591,6 @@ void update_bits_next_block( * Inverse DCT transform for 4D vector *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void invdct4_transform( - float *v, /* i : input vector */ - uint8_t *invdct_v /* o : inverse transformed vector */ -) -{ - float a, b, c, d; - int16_t i; - float f_invdct_v[4]; - - a = v[0] + v[2]; - b = v[0] - v[2]; - c = 1.306562964876376f * v[1] + 0.541196100146198f * v[3]; - d = 0.541196100146198f * v[1] - 1.306562964876376f * v[3]; - f_invdct_v[0] = 128 * ( a + c ); - f_invdct_v[1] = 128 * ( b + d ); - f_invdct_v[2] = 128 * ( b - d ); - f_invdct_v[3] = 128 * ( a - c ); - - for ( i = 0; i < 4; i++ ) - { - if ( f_invdct_v[i] < 0.0 ) - { - invdct_v[i] = 0; - } - else - { - if ( f_invdct_v[i] > 255.0f ) - { - f_invdct_v[i] = 255.0f; - } - invdct_v[i] = (uint8_t) f_invdct_v[i]; - } - } - - return; -} -#else void invdct4_transform_fx( Word32 *v_fx, /* i : input vector q */ UWord8 *invdct_v, /* o : inverse transformed vector */ @@ -1013,7 +635,6 @@ void invdct4_transform_fx( return; } -#endif /*--------------------------------------------------------------- * masa_compensate_two_dir_energy_ratio_index() @@ -1024,7 +645,6 @@ void invdct4_transform_fx( * separately for both directions. *--------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void masa_compensate_two_dir_energy_ratio_index_fx( const Word16 ratio_index_1, /* i : Input ratio for direction 1 */ const Word16 ratio_index_2, /* i : Input ratio for direction 2 */ @@ -1050,46 +670,6 @@ void masa_compensate_two_dir_energy_ratio_index_fx( return; } -#else -void masa_compensate_two_dir_energy_ratio_index( - const int16_t ratio_index_1, /* i : Input ratio for direction 1 */ - const int16_t ratio_index_2, /* i : Input ratio for direction 2 */ - int16_t *ratio_index_mod1, /* o : Output modified ratio for direction 1 */ - int16_t *ratio_index_mod2, /* o : Output modified ratio for direction 2 */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) -{ - float ratio1, ratio2; - float ratioSum; - - ratio1 = 1.0f - diffuseness_reconstructions[ratio_index_1]; - ratio2 = 1.0f - diffuseness_reconstructions[ratio_index_2]; - - if ( !hodirac_flag ) - { - ratioSum = ratio1 + ratio2; - if ( ratio1 >= ratio2 ) - { - ratio2 = ratio2 / ratio1 * ratioSum; - ratio1 = ratioSum; - } - else - { - ratio1 = ratio1 / ratio2 * ratioSum; - ratio2 = ratioSum; - } - } - - *ratio_index_mod1 = masa_sq( 1.0f - ratio1, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - *ratio_index_mod2 = masa_sq( 1.0f - ratio2, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - /* Limit maximum accuracy increase to conserve bits */ - *ratio_index_mod1 = ( ratio_index_1 - *ratio_index_mod1 ) > MASA_DIR_RATIO_COMP_MAX_IDX_STEPS ? ratio_index_1 - MASA_DIR_RATIO_COMP_MAX_IDX_STEPS : *ratio_index_mod1; - *ratio_index_mod2 = ( ratio_index_2 - *ratio_index_mod2 ) > MASA_DIR_RATIO_COMP_MAX_IDX_STEPS ? ratio_index_2 - MASA_DIR_RATIO_COMP_MAX_IDX_STEPS : *ratio_index_mod2; - - return; -} -#endif /*--------------------------------------------------------------- * set_qmetadata_maxbit_req() @@ -1097,8 +677,7 @@ void masa_compensate_two_dir_energy_ratio_index( * Sets proper value for qmetadata_max_bit_req limit *--------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_set_qmetadata_maxbit_req( +void ivas_set_qmetadata_maxbit_req_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ const IVAS_FORMAT ivas_format /* i : IVAS format */ ) @@ -1116,24 +695,6 @@ void ivas_set_qmetadata_maxbit_req( return; } -#else -void ivas_set_qmetadata_maxbit_req( - IVAS_QMETADATA_HANDLE hQMetaData, /* o : qmetadata structure where the requirement value is set */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -) -{ - if ( ivas_format == SBA_FORMAT ) - { - hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_SBA; - } - else /* MASA_FORMAT */ - { - hQMetaData->qmetadata_max_bit_req = QMETADATA_MAXBIT_REQ_MASA; - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1142,24 +703,6 @@ void ivas_set_qmetadata_maxbit_req( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_qmetadata_azimuth_elevation_to_direction_vector( - const float az, /* i : azimuth */ - const float el, /* i : elevation */ - float *dv /* o : direction vector */ -) -{ - float radius_length; - - - dv[2] = sinf( el * PI_OVER_180 ); - radius_length = cosf( el * PI_OVER_180 ); - dv[0] = radius_length * cosf( az * PI_OVER_180 ); - dv[1] = radius_length * sinf( az * PI_OVER_180 ); - - return; -} -#else void ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( const Word32 az, /* i : azimuth Q22 */ const Word32 el, /* i : elevation Q22 */ @@ -1183,7 +726,6 @@ void ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_direction_vector_to_azimuth_elevation() @@ -1192,21 +734,6 @@ void ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( * elevation between [-90 and 90] *------------------------------------------------------------------------*/ -void ivas_qmetadata_direction_vector_to_azimuth_elevation( - const float *dv, /* i : direction vector */ - float *az, /* o : azimuth */ - float *el /* o : elevation */ -) -{ - /* note: dv does not need to have unit L_2 norm, because the conversion is scale invariant */ - - *el = atan2f( dv[2], sqrtf( dv[0] * dv[0] + dv[1] * dv[1] ) ) * _180_OVER_PI; - *az = atan2f( dv[1], dv[0] ) * _180_OVER_PI; - - return; -} - -#ifdef IVAS_FLOAT_FIXED void ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( const Word32 *dv, /* i : direction vector dv_q */ const Word16 dv_q, @@ -1228,7 +755,6 @@ void ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( move32(); return; } -#endif /*------------------------------------------------------------------------- @@ -1238,8 +764,7 @@ void ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( *------------------------------------------------------------------------*/ /*! r: bits to be used for quantizing ratio of ratios */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_get_df_ratio_bits_hodirac( +Word16 ivas_get_df_ratio_bits_hodirac_fx( const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ ) { @@ -1263,29 +788,6 @@ Word16 ivas_get_df_ratio_bits_hodirac( return dfRatio_bits; } -#else -int16_t ivas_get_df_ratio_bits_hodirac( - const int16_t index_diff /* i : index of quantized diffuse-to-total ratio */ -) -{ - int16_t dfRatio_bits; - - if ( index_diff >= DIFF_DFRATIO_1BIT_LIMIT_IDX ) - { - dfRatio_bits = 1; - } - else if ( index_diff >= DIFF_DFRATIO_2BIT_LIMIT_IDX_HODIRAC ) - { - dfRatio_bits = 2; - } - else - { - dfRatio_bits = 3; - } - - return dfRatio_bits; -} -#endif /*--------------------------------------------------------------- * ivas_get_df_ratio_bits() @@ -1296,8 +798,7 @@ int16_t ivas_get_df_ratio_bits_hodirac( *--------------------------------------------------------------*/ /*! r: bits to be used for quantizing ratio of ratios */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_get_df_ratio_bits( +Word16 ivas_get_df_ratio_bits_fx( const Word16 index_diff /* i : index of quantized diffuse-to-total ratio */ ) { @@ -1321,26 +822,3 @@ Word16 ivas_get_df_ratio_bits( return dfRatio_bits; } -#else -int16_t ivas_get_df_ratio_bits( - const int16_t index_diff /* i : index of quantized diffuse-to-total ratio */ -) -{ - int16_t dfRatio_bits; - - if ( index_diff >= DIFF_DFRATIO_1BIT_LIMIT_IDX ) - { - dfRatio_bits = 1; - } - else if ( index_diff >= DIFF_DFRATIO_2BIT_LIMIT_IDX ) - { - dfRatio_bits = 2; - } - else - { - dfRatio_bits = 3; - } - - return dfRatio_bits; -} -#endif diff --git a/lib_com/ivas_qspherical_com.c b/lib_com/ivas_qspherical_com.c index 52cfb9323..c3dbc8fe6 100644 --- a/lib_com/ivas_qspherical_com.c +++ b/lib_com/ivas_qspherical_com.c @@ -42,18 +42,15 @@ #include "wmc_auto.h" #include "ivas_prot_fx.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_reorder_generic() * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -UWord16 ivas_qmetadata_reorder_generic( +UWord16 ivas_qmetadata_reorder_generic_fx( const Word16 signed_value ) { UWord16 unsigned_value; @@ -70,24 +67,6 @@ UWord16 ivas_qmetadata_reorder_generic( return unsigned_value; } -#else -uint16_t ivas_qmetadata_reorder_generic( - const int16_t signed_value ) -{ - uint16_t unsigned_value; - - if ( signed_value < 0 ) - { - unsigned_value = ( ( uint16_t ) - ( signed_value + 1 ) << 1 ) + 1; - } - else - { - unsigned_value = (uint16_t) signed_value << 1; - } - - return unsigned_value; -} -#endif /*------------------------------------------------------------------------- @@ -97,8 +76,7 @@ uint16_t ivas_qmetadata_reorder_generic( *------------------------------------------------------------------------*/ /*! r: "Unfolded" value, positive or negative depending on the value of the input */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_qmetadata_dereorder_generic( +Word16 ivas_qmetadata_dereorder_generic_fx( const UWord16 uns_value /* i : unsigned value result of ReorderGeneric */ ) { @@ -111,21 +89,6 @@ Word16 ivas_qmetadata_dereorder_generic( return extract_l( L_shr( uns_value, 1 ) ); } } -#else -int16_t ivas_qmetadata_dereorder_generic( - const uint16_t uns_value /* i : unsigned value result of ReorderGeneric */ -) -{ - if ( ( uns_value & 1 ) != 0 ) - { - return -(int16_t) ( uns_value >> 1 ) - 1; - } - else - { - return (int16_t) ( uns_value >> 1 ); - } -} -#endif /*------------------------------------------------------------------------- @@ -135,8 +98,7 @@ int16_t ivas_qmetadata_dereorder_generic( *------------------------------------------------------------------------*/ /*! r: projected elevation index */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_dirac_project_elevation_index( +Word16 ivas_dirac_project_elevation_index_fx( const Word16 el_idx, /* i : elevation index */ const Word16 el_alph, /* i : number of elevation symbols */ const Word16 el_alph_proj /* i : size of projected alphabet */ @@ -149,21 +111,6 @@ Word16 ivas_dirac_project_elevation_index( return el_idx_proj; } -#else -int16_t ivas_dirac_project_elevation_index( - const int16_t el_idx, /* i : elevation index */ - const int16_t el_alph, /* i : number of elevation symbols */ - const int16_t el_alph_proj /* i : size of projected alphabet */ -) -{ - int16_t el_idx_proj; - - /* evaluate floor((el_idx / (el_alph - 1)) * (el_alph_proj - 1) + 0.5) using only integer */ - el_idx_proj = ( 2 * el_idx * ( el_alph_proj - 1 ) + ( el_alph - 1 ) ) / ( 2 * ( el_alph - 1 ) ); - - return el_idx_proj; -} -#endif /*------------------------------------------------------------------------- @@ -173,8 +120,7 @@ int16_t ivas_dirac_project_elevation_index( *------------------------------------------------------------------------*/ /*! r: projected index in channel mode */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_chan_project_elevation_index( +Word16 ivas_chan_project_elevation_index_fx( const Word16 el_idx, /* i : elevation index */ const Word16 el_alph, /* i : number of elevation symbols */ const Word16 el_alph_proj /* i : size of projected alphabet */ @@ -194,28 +140,6 @@ Word16 ivas_chan_project_elevation_index( return el_idx_proj; } -#else -int16_t ivas_chan_project_elevation_index( - const int16_t el_idx, /* i : elevation index */ - const int16_t el_alph, /* i : number of elevation symbols */ - const int16_t el_alph_proj /* i : size of projected alphabet */ -) -{ - int16_t el_idx_proj; - - /* evaluate floor((el_idx / (el_alph - 1)) * (el_alph_proj - 1) + 0.5) using only integer */ - if ( el_idx == el_alph - 1 ) - { - el_idx_proj = el_alph_proj - 1; - } - else - { - el_idx_proj = ( 2 * el_idx * el_alph_proj + el_alph ) / ( 2 * el_alph ); - } - - return el_idx_proj; -} -#endif /*------------------------------------------------------------------------- @@ -225,8 +149,7 @@ int16_t ivas_chan_project_elevation_index( *------------------------------------------------------------------------*/ /*! r: projected azimuth index */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_dirac_project_azimuth_index( +Word16 ivas_dirac_project_azimuth_index_fx( const Word16 az_idx, /* i : azimuth index */ const Word16 az_alph, /* i : number of azimuth symbols */ const Word16 az_alph_proj /* i : size of projected alphabet */ @@ -250,31 +173,6 @@ Word16 ivas_dirac_project_azimuth_index( return az_idx_proj; } -#else -int16_t ivas_dirac_project_azimuth_index( - const int16_t az_idx, /* i : azimuth index */ - const int16_t az_alph, /* i : number of azimuth symbols */ - const int16_t az_alph_proj /* i : size of projected alphabet */ -) -{ - int16_t az_idx_proj; - - if ( az_alph_proj == 1 ) - { - return 0; - } - - /* evaluate floor((az_idx / az_alph) * az_alph_proj + 0.5) using only integer */ - az_idx_proj = ( 2 * az_idx * az_alph_proj + az_alph ) / ( 2 * az_alph ); - - if ( az_idx_proj == az_alph_proj ) - { - az_idx_proj = 0; - } - - return az_idx_proj; -} -#endif /*------------------------------------------------------------------------- @@ -284,8 +182,7 @@ int16_t ivas_dirac_project_azimuth_index( * is exceeded by diff. bits *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void small_reduction_direction( +void small_reduction_direction_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ UWord16 bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], const Word16 raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], @@ -320,36 +217,6 @@ void small_reduction_direction( return; } -#else -void small_reduction_direction( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], - int16_t *diff ) -{ - int16_t i, j, k; - - for ( k = 0; ( k < 2 ) && ( *diff > 0 ); k++ ) - { - for ( i = q_direction->cfg.start_band; ( i < q_direction->cfg.nbands ) && ( *diff > 0 ); i++ ) - { - if ( raw_flag[i] == 1 ) - { - for ( j = 0; ( j < q_direction->cfg.nblocks ) && ( *diff > 0 ); j++ ) - { - if ( bits_dir[i][j] > MASA_MIN_BITS_TF ) - { - bits_dir[i][j] -= 1; - ( *diff )--; - } - } - } - } - } - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -360,74 +227,6 @@ void small_reduction_direction( *-----------------------------------------------------------------------*/ /*! r: index azimuth */ -int16_t quantize_phi( - float phi, /* i : azimuth value */ - const int16_t flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ - float *phi_hat, /* o : quantized azimuth */ - const int16_t n /* i : azimuth codebook size */ -) -{ - int16_t id_phi; - float dd; - float delta_phi; - - - delta_phi = 360.0f / (float) n; - - if ( n == 1 ) - { - *phi_hat = 0; - - return 0; - } - - if ( ( flag_delta == 1 ) && ( n > 2 ) ) - { - dd = delta_phi / 2.0f; - } - else - { - dd = 0; - } - id_phi = (int16_t) round_f( ( ( phi - 180 - dd ) / (float) delta_phi ) ); - assert( fabsf( ( phi - 180 - dd ) / (float) delta_phi ) - abs( id_phi ) <= 0.5 ); - - if ( id_phi + ( n >> 1 ) < 0 ) - { - id_phi += 1; - } - - if ( id_phi - ( n >> 1 ) >= 0 ) - { - id_phi = -( n >> 1 ); - } - - if ( id_phi == -( ( n >> 1 ) + ( n % 2 ) ) ) - { - id_phi += ( n % 2 ); - } - else - { - if ( id_phi == ( ( n >> 1 ) + ( n % 2 ) ) ) - { - if ( n % 2 ) - { - id_phi -= 1; - } - else - { - id_phi = -id_phi; - } - } - } - - *phi_hat = id_phi * delta_phi + dd + 180; - - id_phi += ( n >> 1 ); - - return id_phi; -} -#ifdef IVAS_FLOAT_FIXED Word16 quantize_phi_fx( Word32 phi, /* i : azimuth value, Q22 */ const Word16 flag_delta, /* i : flag indicating if the azimuth codebook is translated or not */ @@ -581,94 +380,12 @@ id_phi = add( id_phi, shr( n, 1 ) ); return id_phi; } -#endif /*-----------------------------------------------------------------------* * companding_azimuth() * * Compand azimuth based on the format *-----------------------------------------------------------------------*/ -/*! r: companded azimuth value */ -float companding_azimuth( - const float azi, /* i : input azimuth value */ - const MC_LS_SETUP mc_format, /* i : input channel format */ - const int16_t theta_flag, /* i : zero/non zero elevation flag */ - const int16_t direction /* i : direction of companding (direct or inverse)*/ -) -{ - const float pointsA[] = { 0.0f, 60.0f, 110.0f, 150.0f, 180.0f, 0.0f, 50.0f, 90.0f, 150.0f, 180.0f, 0.0f, 30.0f, 80.0f, 150.0f, 180.0f }; - const float pointsB[] = { 0.0f, 90.0f, 110.0f, 170.0f, 180.0f, 0.0f, 90.0f, 110.0f, 170.0f, 180.0f, 0.0f, 10.0f, 100.0f, 170.0f, 180.0f }; - const float *pA, *pB; - int16_t no_points; - float comp_azi; - int16_t i, not_done, start; - float abs_azi; - - if ( mc_format == MC_LS_SETUP_5_1 || mc_format == MC_LS_SETUP_5_1_2 || mc_format == MC_LS_SETUP_5_1_4 ) /* 5.1, 5.1+2 or 5.1+4*/ - { - start = 5; - } - else - { - start = 0; - } - - /* theta flag 1 is for non zero, larger than a threshold elevation */ - if ( ( theta_flag == 1 ) && ( ( mc_format == MC_LS_SETUP_5_1_2 ) || ( mc_format == MC_LS_SETUP_5_1_4 ) || ( mc_format == MC_LS_SETUP_7_1_4 ) ) ) /* 5.1+2, 5.1+4 or 7.1+4*/ - { - start = 10; - } - no_points = 5; - - pA = &pointsA[start]; - pB = &pointsB[start]; - - if ( direction == -1 ) /* inverse companding */ - { - pA = &pointsB[start]; - pB = &pointsA[start]; - } - else - { - if ( direction != 1 ) - { - printf( "Wrong direction in companding" ); - } - } - - not_done = 1; - abs_azi = fabsf( azi ); - - comp_azi = azi; - i = 0; - while ( not_done && ( i < no_points - 1 ) ) - { - if ( abs_azi <= pA[i + 1] ) - { - not_done = 0; - /* calculate companding */ - comp_azi = pB[i] + ( pB[i + 1] - pB[i] ) / ( pA[i + 1] - pA[i] ) * ( abs_azi - pA[i] ); - } - else - { - i++; - } - } - - if ( azi < 0 ) - { - comp_azi = -comp_azi; - } - - if ( not_done == 1 ) - { - comp_azi = azi; - } - - return comp_azi; -} - -#ifdef IVAS_FLOAT_FIXED Word32 companding_azimuth_fx( const Word32 azi_fx, /* i : input azimuth value, Q22 */ const MC_LS_SETUP mc_format, /* i : input channel format */ @@ -867,7 +584,6 @@ Word32 companding_azimuth_fx( return comp_azi_fx; // Q22 } -#endif /*-----------------------------------------------------------------------* * quantize_phi_chan_lbr() @@ -876,38 +592,6 @@ Word32 companding_azimuth_fx( * Input phi expected to be an angle in degree between 0 and 360. *-----------------------------------------------------------------------*/ -/*! r: index azimuth */ -int16_t quantize_phi_chan_lbr( - const float phi, /* i : azimuth value */ - float *phi_hat, /* o : quantized azimuth */ - const int16_t n /* i : azimuth codebook size */ -) -{ - int16_t id_phi; - - - if ( n <= 1 ) - { - *phi_hat = 0; - - return 0; - } - - id_phi = squant( fabsf( phi ), phi_hat, cb_azi_chan, n >> 1 ); - - if ( phi < 0 && id_phi > 0 ) - { - id_phi = 2 * id_phi - 1; - *phi_hat = -*phi_hat; - } - else - { - id_phi *= 2; - } - - return id_phi; -} -#ifdef IVAS_FLOAT_FIXED /*! r: index azimuth */ Word16 quantize_phi_chan_lbr_fx( const Word32 phi, /* i : azimuth value, Q22 */ @@ -945,7 +629,6 @@ Word16 quantize_phi_chan_lbr_fx( return id_phi; } -#endif /*-----------------------------------------------------------------------* @@ -955,69 +638,7 @@ Word16 quantize_phi_chan_lbr_fx( * Input phi expected to be an angle in degree between 0 and 360. *-----------------------------------------------------------------------*/ -/*! r: index azimuth */ -int16_t quantize_phi_chan_compand( - float phi, /* i : azimuth value */ - float *phi_hat, /* o : quantized azimuth */ - const int16_t n, /* i : azimuth codebook size */ - const int16_t theta_flag, /* i : flag signaling high elevation */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - int16_t id_phi; - float delta_phi; - - if ( n <= 1 ) - { - *phi_hat = 0; - - return 0; - } - - phi = companding_azimuth( phi - 180, mc_format, theta_flag, 1 ); - - /* quantize companded value */ - delta_phi = 360.0f / (float) n; - id_phi = (int16_t) round_f( ( phi / (float) delta_phi ) ); - - if ( id_phi + ( n >> 1 ) < 0 ) - { - id_phi += 1; - } - if ( id_phi - ( n >> 1 ) >= 0 ) - { - id_phi = -( n >> 1 ); - } - - if ( id_phi == -( ( n >> 1 ) + ( n % 2 ) ) ) - { - id_phi += ( n % 2 ); - } - else - { - if ( id_phi == ( ( n >> 1 ) + ( n % 2 ) ) ) - { - if ( n % 2 ) - { - id_phi -= 1; - } - else - { - id_phi = -id_phi; - } - } - } - *phi_hat = id_phi * delta_phi; - - id_phi += ( n >> 1 ); - - - *phi_hat = companding_azimuth( *phi_hat, mc_format, theta_flag, -1 ) + 180; - - return id_phi; -} -#ifdef IVAS_FLOAT_FIXED /*! r: index azimuth */ Word16 quantize_phi_chan_compand_fx( Word32 phi, /* i : azimuth value Q22 */ @@ -1086,4 +707,3 @@ move32(); return id_phi; } -#endif diff --git a/lib_com/ivas_rom_com.c b/lib_com/ivas_rom_com.c index c31605f4e..a86f2913c 100644 --- a/lib_com/ivas_rom_com.c +++ b/lib_com/ivas_rom_com.c @@ -44,7 +44,7 @@ * Table of IVAS bitrates *----------------------------------------------------------------------------------*/ -const int32_t ivas_brate_tbl[SIZE_IVAS_BRATE_TBL] = +const Word32 ivas_brate_tbl[SIZE_IVAS_BRATE_TBL] = { FRAME_NO_DATA, IVAS_SID_5k2, IVAS_13k2, IVAS_16k4, IVAS_24k4, IVAS_32k, IVAS_48k, @@ -69,12 +69,6 @@ const Word16 dft_band_limits_erb8[STEREO_DFT_ERB8_BANDS] = 1, 5, 18, 41, 84, 214, 470, 601 }; -#ifndef IVAS_FLOAT_FIXED -const float dft_res_cod_alpha[STEREO_DFT_BAND_MAX] = -{ - .8f, .8f, .5f, .5f, .3f, .3f, .2f, .2f -}; -#endif const Word16 dft_band_ipd[3][4] = { @@ -257,253 +251,6 @@ const Word32 dft_res_gains_q_Q31[][2] = }; -const float dft_res_gains_q[][2] = -{ - /* quantization points for joint quantization of prediction gain and residual energy */ - - /* column 1 (|ILD| = 0): */ - { 0.000000f, 0.000000f }, - { 0.000000f, 0.116982f }, - { 0.000000f, 0.226991f }, - { 0.000000f, 0.340693f }, - { 0.000000f, 0.464549f }, - { 0.000000f, 0.605079f }, - { 0.000000f, 0.776250f }, - { 0.000000f, 1.000000f }, - - /* column 2 (|ILD| = 2): */ - { 0.114623f, 0.000000f }, - { 0.116171f, 0.115424f }, - { 0.120448f, 0.223857f }, - { 0.127733f, 0.335704f }, - { 0.138966f, 0.457149f }, - { 0.155840f, 0.594270f }, - { 0.182248f, 0.760034f }, - { 0.226274f, 0.974064f }, - - /* column 3 (|ILD| = 4): */ - { 0.226274f, 0.000000f }, - { 0.229210f, 0.110915f }, - { 0.237306f, 0.214802f }, - { 0.251046f, 0.321340f }, - { 0.272098f, 0.435947f }, - { 0.303429f, 0.563535f }, - { 0.351766f, 0.714464f }, - { 0.430506f, 0.902588f }, - - /* column 4 (|ILD| = 6): */ - { 0.332279f, 0.000000f }, - { 0.336318f, 0.103909f }, - { 0.347423f, 0.200786f }, - { 0.366155f, 0.299242f }, - { 0.394585f, 0.403641f }, - { 0.436296f, 0.517359f }, - { 0.499282f, 0.647470f }, - { 0.598480f, 0.801138f }, - - /* column 5 (|ILD| = 8): */ - { 0.430506f, 0.000000f }, - { 0.435293f, 0.095060f }, - { 0.448405f, 0.183172f }, - { 0.470357f, 0.271705f }, - { 0.503282f, 0.363897f }, - { 0.550751f, 0.461614f }, - { 0.620606f, 0.568856f }, - { 0.726386f, 0.687287f }, - - /* column 6 (|ILD| = 10): */ - { 0.519494f, 0.000000f }, - { 0.524665f, 0.085097f }, - { 0.538769f, 0.163459f }, - { 0.562182f, 0.241193f }, - { 0.596843f, 0.320512f }, - { 0.645875f, 0.402058f }, - { 0.716076f, 0.487487f }, - { 0.818182f, 0.574960f }, - - /* column 7 (|ILD| = 13): */ - { 0.634158f, 0.000000f }, - { 0.639318f, 0.069554f }, - { 0.653296f, 0.132950f }, - { 0.676201f, 0.194597f }, - { 0.709442f, 0.255549f }, - { 0.755149f, 0.315316f }, - { 0.818046f, 0.373555f }, - { 0.904547f, 0.426375f }, - - /* column 8 (|ILD| = 16): */ - { 0.726386f, 0.000000f }, - { 0.731048f, 0.054862f }, - { 0.743597f, 0.104384f }, - { 0.763914f, 0.151643f }, - { 0.792863f, 0.197003f }, - { 0.831670f, 0.239542f }, - { 0.883261f, 0.278217f }, - { 0.950993f, 0.309212f }, - - /* column 9 (|ILD| = 19): */ - { 0.798235f, 0.000000f }, - { 0.802164f, 0.042077f }, - { 0.812683f, 0.079739f }, - { 0.829536f, 0.115098f }, - { 0.853180f, 0.148173f }, - { 0.884212f, 0.178009f }, - { 0.924333f, 0.203506f }, - { 0.975135f, 0.221614f }, - - /* column 10 (|ILD| = 22): */ - { 0.852825f, 0.000000f }, - { 0.855976f, 0.031585f }, - { 0.864374f, 0.059662f }, - { 0.877717f, 0.085671f }, - { 0.896203f, 0.109492f }, - { 0.920064f, 0.130302f }, - { 0.950256f, 0.147176f }, - { 0.987460f, 0.157870f }, - - /* column 11 (|ILD| = 25): */ - { 0.893520f, 0.000000f }, - { 0.895958f, 0.023331f }, - { 0.902435f, 0.043958f }, - { 0.912657f, 0.062866f }, - { 0.926684f, 0.079898f }, - { 0.944559f, 0.094403f }, - { 0.966814f, 0.105673f }, - { 0.993695f, 0.112114f }, - - /* column 12 (|ILD| = 30): */ - { 0.938693f, 0.000000f }, - { 0.940202f, 0.013738f }, - { 0.944192f, 0.025807f }, - { 0.950441f, 0.036736f }, - { 0.958923f, 0.046392f }, - { 0.969577f, 0.054375f }, - { 0.982605f, 0.060264f }, - { 0.998002f, 0.063182f }, - - /* column 13 (|ILD| = 35): */ - { 0.965056f, 0.000000f }, - { 0.965951f, 0.007932f }, - { 0.968314f, 0.014873f }, - { 0.971997f, 0.021112f }, - { 0.976963f, 0.026561f }, - { 0.983149f, 0.030984f }, - { 0.990633f, 0.034143f }, - { 0.999368f, 0.035554f }, - - /* column 14 (|ILD| = 40): */ - { 0.980198f, 0.000000f }, - { 0.980717f, 0.004528f }, - { 0.982085f, 0.008481f }, - { 0.984212f, 0.012019f }, - { 0.987068f, 0.015088f }, - { 0.990608f, 0.017552f }, - { 0.994866f, 0.019278f }, - { 0.999800f, 0.019998f }, - - /* column 15 (|ILD| = 45): */ - { 0.988816f, 0.000000f }, - { 0.989113f, 0.002568f }, - { 0.989895f, 0.004807f }, - { 0.991109f, 0.006806f }, - { 0.992735f, 0.008532f }, - { 0.994746f, 0.009911f }, - { 0.997156f, 0.010865f }, - { 0.999937f, 0.011246f }, - - /* column 16 (|ILD| = 50): */ - { 0.993695f, 0.000000f }, - { 0.993864f, 0.001451f }, - { 0.994308f, 0.002715f }, - { 0.994996f, 0.003842f }, - { 0.995917f, 0.004813f }, - { 0.997054f, 0.005586f }, - { 0.998414f, 0.006117f }, - { 0.999980f, 0.006324f } -}; - -#ifndef IVAS_FLOAT_FIXED -const float dft_trigo_12k8[STEREO_DFT_N_12k8_ENC / 4 + 1] = -{ - 0.0000000f, 0.0122715f, 0.0245412f, 0.0368072f, 0.0490677f, 0.0613207f, 0.0735646f, 0.0857973f, 0.0980171f, 0.1102222f, 0.1224107f, 0.1345807f, 0.1467305f, 0.1588581f, - 0.1709619f, 0.1830399f, 0.1950903f, 0.2071114f, 0.2191012f, 0.2310581f, 0.2429802f, 0.2548657f, 0.2667128f, 0.2785197f, 0.2902847f, 0.3020059f, 0.3136817f, 0.3253103f, - 0.3368899f, 0.3484187f, 0.3598950f, 0.3713172f, 0.3826834f, 0.3939920f, 0.4052413f, 0.4164296f, 0.4275551f, 0.4386162f, 0.4496113f, 0.4605387f, 0.4713967f, 0.4821838f, - 0.4928982f, 0.5035384f, 0.5141027f, 0.5245897f, 0.5349976f, 0.5453250f, 0.5555702f, 0.5657318f, 0.5758082f, 0.5857979f, 0.5956993f, 0.6055110f, 0.6152316f, 0.6248595f, - 0.6343933f, 0.6438315f, 0.6531728f, 0.6624158f, 0.6715590f, 0.6806010f, 0.6895405f, 0.6983762f, 0.7071068f, 0.7157308f, 0.7242471f, 0.7326543f, 0.7409511f, 0.7491364f, - 0.7572088f, 0.7651673f, 0.7730105f, 0.7807372f, 0.7883464f, 0.7958369f, 0.8032075f, 0.8104572f, 0.8175848f, 0.8245893f, 0.8314696f, 0.8382247f, 0.8448536f, 0.8513552f, - 0.8577286f, 0.8639729f, 0.8700870f, 0.8760701f, 0.8819213f, 0.8876396f, 0.8932243f, 0.8986745f, 0.9039893f, 0.9091680f, 0.9142098f, 0.9191139f, 0.9238795f, 0.9285061f, - 0.9329928f, 0.9373390f, 0.9415441f, 0.9456073f, 0.9495282f, 0.9533060f, 0.9569403f, 0.9604305f, 0.9637761f, 0.9669765f, 0.9700313f, 0.9729400f, 0.9757021f, 0.9783174f, - 0.9807853f, 0.9831055f, 0.9852776f, 0.9873014f, 0.9891765f, 0.9909026f, 0.9924795f, 0.9939070f, 0.9951847f, 0.9963126f, 0.9972905f, 0.9981181f, 0.9987955f, 0.9993224f, - 0.9996988f, 0.9999247f, 1.0000000f -}; - -const float dft_trigo_32k[STEREO_DFT_N_32k_ENC / 4 + 1] = -{ - 0.0000000f, 0.0049087f, 0.0098173f, 0.0147257f, 0.0196337f, 0.0245412f, 0.0294482f, 0.0343544f, 0.0392598f, 0.0441643f, 0.0490677f, 0.0539699f, 0.0588708f, 0.0637703f, - 0.0686683f, 0.0735646f, 0.0784591f, 0.0833517f, 0.0882424f, 0.0931309f, 0.0980171f, 0.1029010f, 0.1077825f, 0.1126613f, 0.1175374f, 0.1224107f, 0.1272810f, 0.1321483f, - 0.1370123f, 0.1418731f, 0.1467305f, 0.1515843f, 0.1564345f, 0.1612809f, 0.1661234f, 0.1709619f, 0.1757963f, 0.1806264f, 0.1854522f, 0.1902736f, 0.1950903f, 0.1999024f, - 0.2047096f, 0.2095119f, 0.2143092f, 0.2191012f, 0.2238880f, 0.2286695f, 0.2334454f, 0.2382156f, 0.2429802f, 0.2477389f, 0.2524916f, 0.2572382f, 0.2619786f, 0.2667128f, - 0.2714404f, 0.2761616f, 0.2808761f, 0.2855838f, 0.2902847f, 0.2949785f, 0.2996653f, 0.3043448f, 0.3090170f, 0.3136817f, 0.3183389f, 0.3229884f, 0.3276302f, 0.3322640f, - 0.3368899f, 0.3415076f, 0.3461171f, 0.3507182f, 0.3553109f, 0.3598950f, 0.3644705f, 0.3690372f, 0.3735950f, 0.3781438f, 0.3826834f, 0.3872139f, 0.3917350f, 0.3962467f, - 0.4007488f, 0.4052413f, 0.4097240f, 0.4141969f, 0.4186597f, 0.4231125f, 0.4275551f, 0.4319874f, 0.4364092f, 0.4408206f, 0.4452213f, 0.4496113f, 0.4539905f, 0.4583587f, - 0.4627159f, 0.4670620f, 0.4713967f, 0.4757202f, 0.4800321f, 0.4843325f, 0.4886212f, 0.4928982f, 0.4971633f, 0.5014164f, 0.5056574f, 0.5098862f, 0.5141027f, 0.5183069f, - 0.5224986f, 0.5266776f, 0.5308440f, 0.5349976f, 0.5391383f, 0.5432660f, 0.5473807f, 0.5514821f, 0.5555702f, 0.5596450f, 0.5637063f, 0.5677540f, 0.5717880f, 0.5758082f, - 0.5798145f, 0.5838069f, 0.5877853f, 0.5917494f, 0.5956993f, 0.5996348f, 0.6035559f, 0.6074625f, 0.6113544f, 0.6152316f, 0.6190939f, 0.6229414f, 0.6267738f, 0.6305912f, - 0.6343933f, 0.6381801f, 0.6419516f, 0.6457076f, 0.6494480f, 0.6531728f, 0.6568819f, 0.6605751f, 0.6642524f, 0.6679137f, 0.6715590f, 0.6751880f, 0.6788007f, 0.6823972f, - 0.6859771f, 0.6895405f, 0.6930874f, 0.6966175f, 0.7001308f, 0.7036273f, 0.7071068f, 0.7105693f, 0.7140146f, 0.7174427f, 0.7208536f, 0.7242471f, 0.7276231f, 0.7309816f, - 0.7343225f, 0.7376457f, 0.7409511f, 0.7442387f, 0.7475083f, 0.7507599f, 0.7539935f, 0.7572088f, 0.7604060f, 0.7635848f, 0.7667452f, 0.7698871f, 0.7730105f, 0.7761152f, - 0.7792012f, 0.7822685f, 0.7853169f, 0.7883464f, 0.7913569f, 0.7943484f, 0.7973207f, 0.8002737f, 0.8032075f, 0.8061220f, 0.8090170f, 0.8118925f, 0.8147485f, 0.8175848f, - 0.8204014f, 0.8231983f, 0.8259753f, 0.8287325f, 0.8314696f, 0.8341867f, 0.8368838f, 0.8395606f, 0.8422172f, 0.8448536f, 0.8474695f, 0.8500651f, 0.8526402f, 0.8551947f, - 0.8577286f, 0.8602419f, 0.8627344f, 0.8652061f, 0.8676570f, 0.8700870f, 0.8724960f, 0.8748840f, 0.8772509f, 0.8795967f, 0.8819213f, 0.8842246f, 0.8865066f, 0.8887673f, - 0.8910065f, 0.8932243f, 0.8954206f, 0.8975952f, 0.8997483f, 0.9018797f, 0.9039893f, 0.9060771f, 0.9081432f, 0.9101873f, 0.9122095f, 0.9142098f, 0.9161880f, 0.9181441f, - 0.9200781f, 0.9219899f, 0.9238795f, 0.9257469f, 0.9275919f, 0.9294146f, 0.9312149f, 0.9329928f, 0.9347482f, 0.9364810f, 0.9381913f, 0.9398790f, 0.9415441f, 0.9431864f, - 0.9448060f, 0.9464029f, 0.9479770f, 0.9495282f, 0.9510565f, 0.9525619f, 0.9540444f, 0.9555039f, 0.9569403f, 0.9583537f, 0.9597440f, 0.9611112f, 0.9624552f, 0.9637761f, - 0.9650737f, 0.9663480f, 0.9675991f, 0.9688268f, 0.9700313f, 0.9712123f, 0.9723699f, 0.9735041f, 0.9746149f, 0.9757021f, 0.9767659f, 0.9778061f, 0.9788228f, 0.9798158f, - 0.9807853f, 0.9817311f, 0.9826533f, 0.9835518f, 0.9844266f, 0.9852776f, 0.9861050f, 0.9869085f, 0.9876883f, 0.9884443f, 0.9891765f, 0.9898849f, 0.9905693f, 0.9912300f, - 0.9918667f, 0.9924795f, 0.9930685f, 0.9936335f, 0.9941745f, 0.9946916f, 0.9951847f, 0.9956539f, 0.9960990f, 0.9965202f, 0.9969173f, 0.9972905f, 0.9976395f, 0.9979646f, - 0.9982656f, 0.9985426f, 0.9987955f, 0.9990243f, 0.9992290f, 0.9994097f, 0.9995663f, 0.9996988f, 0.9998072f, 0.9998916f, 0.9999518f, 0.9999880f, 1.0000000f -}; - -const float dft_trigo_48k[STEREO_DFT_N_MAX_ENC / 4 + 1] = -{ - 0.0000000f, 0.0032725f, 0.0065449f, 0.0098173f, 0.0130896f, 0.0163617f, 0.0196337f, 0.0229054f, 0.0261769f, 0.0294482f, 0.0327191f, 0.0359896f, 0.0392598f, 0.0425296f, - 0.0457989f, 0.0490677f, 0.0523360f, 0.0556037f, 0.0588708f, 0.0621373f, 0.0654031f, 0.0686683f, 0.0719327f, 0.0751963f, 0.0784591f, 0.0817211f, 0.0849822f, 0.0882424f, - 0.0915016f, 0.0947599f, 0.0980171f, 0.1012733f, 0.1045285f, 0.1077825f, 0.1110353f, 0.1142870f, 0.1175374f, 0.1207866f, 0.1240345f, 0.1272810f, 0.1305262f, 0.1337700f, - 0.1370123f, 0.1402532f, 0.1434926f, 0.1467305f, 0.1499668f, 0.1532014f, 0.1564345f, 0.1596658f, 0.1628955f, 0.1661234f, 0.1693495f, 0.1725738f, 0.1757963f, 0.1790169f, - 0.1822355f, 0.1854522f, 0.1886670f, 0.1918797f, 0.1950903f, 0.1982989f, 0.2015053f, 0.2047096f, 0.2079117f, 0.2111116f, 0.2143092f, 0.2175045f, 0.2206974f, 0.2238880f, - 0.2270763f, 0.2302620f, 0.2334454f, 0.2366262f, 0.2398045f, 0.2429802f, 0.2461533f, 0.2493238f, 0.2524916f, 0.2556567f, 0.2588190f, 0.2619786f, 0.2651354f, 0.2682894f, - 0.2714404f, 0.2745886f, 0.2777338f, 0.2808761f, 0.2840153f, 0.2871515f, 0.2902847f, 0.2934147f, 0.2965416f, 0.2996653f, 0.3027858f, 0.3059030f, 0.3090170f, 0.3121277f, - 0.3152350f, 0.3183389f, 0.3214395f, 0.3245366f, 0.3276302f, 0.3307203f, 0.3338069f, 0.3368899f, 0.3399692f, 0.3430450f, 0.3461171f, 0.3491854f, 0.3522500f, 0.3553109f, - 0.3583679f, 0.3614212f, 0.3644705f, 0.3675159f, 0.3705574f, 0.3735950f, 0.3766285f, 0.3796580f, 0.3826834f, 0.3857048f, 0.3887220f, 0.3917350f, 0.3947439f, 0.3977485f, - 0.4007488f, 0.4037449f, 0.4067366f, 0.4097240f, 0.4127070f, 0.4156856f, 0.4186597f, 0.4216294f, 0.4245945f, 0.4275551f, 0.4305111f, 0.4334625f, 0.4364092f, 0.4393513f, - 0.4422887f, 0.4452213f, 0.4481492f, 0.4510723f, 0.4539905f, 0.4569039f, 0.4598124f, 0.4627159f, 0.4656145f, 0.4685081f, 0.4713967f, 0.4742803f, 0.4771588f, 0.4800321f, - 0.4829003f, 0.4857634f, 0.4886212f, 0.4914739f, 0.4943212f, 0.4971633f, 0.5000000f, 0.5028314f, 0.5056574f, 0.5084780f, 0.5112931f, 0.5141027f, 0.5169069f, 0.5197055f, - 0.5224986f, 0.5252860f, 0.5280679f, 0.5308440f, 0.5336145f, 0.5363793f, 0.5391383f, 0.5418916f, 0.5446390f, 0.5473807f, 0.5501164f, 0.5528463f, 0.5555702f, 0.5582882f, - 0.5610003f, 0.5637063f, 0.5664062f, 0.5691001f, 0.5717880f, 0.5744697f, 0.5771452f, 0.5798145f, 0.5824777f, 0.5851346f, 0.5877853f, 0.5904296f, 0.5930676f, 0.5956993f, - 0.5983246f, 0.6009435f, 0.6035559f, 0.6061619f, 0.6087614f, 0.6113544f, 0.6139408f, 0.6165207f, 0.6190939f, 0.6216606f, 0.6242205f, 0.6267738f, 0.6293204f, 0.6318602f, - 0.6343933f, 0.6369196f, 0.6394390f, 0.6419516f, 0.6444573f, 0.6469562f, 0.6494480f, 0.6519330f, 0.6544109f, 0.6568819f, 0.6593458f, 0.6618027f, 0.6642524f, 0.6666951f, - 0.6691306f, 0.6715590f, 0.6739801f, 0.6763941f, 0.6788007f, 0.6812002f, 0.6835923f, 0.6859771f, 0.6883546f, 0.6907247f, 0.6930874f, 0.6954426f, 0.6977905f, 0.7001308f, - 0.7024637f, 0.7047890f, 0.7071068f, 0.7094170f, 0.7117196f, 0.7140146f, 0.7163019f, 0.7185816f, 0.7208536f, 0.7231179f, 0.7253744f, 0.7276231f, 0.7298641f, 0.7320972f, - 0.7343225f, 0.7365399f, 0.7387495f, 0.7409511f, 0.7431448f, 0.7453306f, 0.7475083f, 0.7496781f, 0.7518398f, 0.7539935f, 0.7561391f, 0.7582766f, 0.7604060f, 0.7625272f, - 0.7646403f, 0.7667452f, 0.7688418f, 0.7709303f, 0.7730105f, 0.7750824f, 0.7771460f, 0.7792012f, 0.7812482f, 0.7832867f, 0.7853169f, 0.7873387f, 0.7893520f, 0.7913569f, - 0.7933533f, 0.7953413f, 0.7973207f, 0.7992915f, 0.8012538f, 0.8032075f, 0.8051526f, 0.8070891f, 0.8090170f, 0.8109362f, 0.8128467f, 0.8147485f, 0.8166416f, 0.8185259f, - 0.8204014f, 0.8222682f, 0.8241262f, 0.8259753f, 0.8278156f, 0.8296471f, 0.8314696f, 0.8332833f, 0.8350880f, 0.8368838f, 0.8386706f, 0.8404484f, 0.8422172f, 0.8439770f, - 0.8457278f, 0.8474695f, 0.8492022f, 0.8509257f, 0.8526402f, 0.8543455f, 0.8560416f, 0.8577286f, 0.8594064f, 0.8610750f, 0.8627344f, 0.8643845f, 0.8660254f, 0.8676570f, - 0.8692793f, 0.8708923f, 0.8724960f, 0.8740903f, 0.8756753f, 0.8772509f, 0.8788171f, 0.8803739f, 0.8819213f, 0.8834592f, 0.8849876f, 0.8865066f, 0.8880161f, 0.8895161f, - 0.8910065f, 0.8924874f, 0.8939588f, 0.8954206f, 0.8968727f, 0.8983153f, 0.8997483f, 0.9011716f, 0.9025853f, 0.9039893f, 0.9053836f, 0.9067683f, 0.9081432f, 0.9095084f, - 0.9108638f, 0.9122095f, 0.9135455f, 0.9148716f, 0.9161880f, 0.9174945f, 0.9187912f, 0.9200781f, 0.9213551f, 0.9226223f, 0.9238795f, 0.9251269f, 0.9263644f, 0.9275919f, - 0.9288096f, 0.9300172f, 0.9312149f, 0.9324027f, 0.9335804f, 0.9347482f, 0.9359059f, 0.9370536f, 0.9381913f, 0.9393190f, 0.9404366f, 0.9415441f, 0.9426415f, 0.9437288f, - 0.9448060f, 0.9458732f, 0.9469301f, 0.9479770f, 0.9490136f, 0.9500402f, 0.9510565f, 0.9520627f, 0.9530586f, 0.9540444f, 0.9550199f, 0.9559853f, 0.9569403f, 0.9578852f, - 0.9588197f, 0.9597440f, 0.9606581f, 0.9615618f, 0.9624552f, 0.9633384f, 0.9642112f, 0.9650737f, 0.9659258f, 0.9667676f, 0.9675991f, 0.9684202f, 0.9692309f, 0.9700313f, - 0.9708212f, 0.9716008f, 0.9723699f, 0.9731287f, 0.9738770f, 0.9746149f, 0.9753423f, 0.9760593f, 0.9767659f, 0.9774620f, 0.9781476f, 0.9788228f, 0.9794874f, 0.9801416f, - 0.9807853f, 0.9814185f, 0.9820411f, 0.9826533f, 0.9832549f, 0.9838460f, 0.9844266f, 0.9849966f, 0.9855561f, 0.9861050f, 0.9866433f, 0.9871711f, 0.9876883f, 0.9881950f, - 0.9886910f, 0.9891765f, 0.9896514f, 0.9901157f, 0.9905693f, 0.9910124f, 0.9914449f, 0.9918667f, 0.9922779f, 0.9926785f, 0.9930685f, 0.9934478f, 0.9938165f, 0.9941745f, - 0.9945219f, 0.9948586f, 0.9951847f, 0.9955002f, 0.9958049f, 0.9960990f, 0.9963825f, 0.9966552f, 0.9969173f, 0.9971688f, 0.9974095f, 0.9976395f, 0.9978589f, 0.9980676f, - 0.9982656f, 0.9984529f, 0.9986295f, 0.9987955f, 0.9989507f, 0.9990952f, 0.9992290f, 0.9993522f, 0.9994646f, 0.9995663f, 0.9996573f, 0.9997376f, 0.9998072f, 0.9998661f, - 0.9999143f, 0.9999518f, 0.9999786f, 0.9999946f, 1.0000000f -}; -#endif - /* tables for adaptive Golomb-Rice coding of DFT stereo parameters */ const Word16 dft_code_itd[] = { @@ -735,67 +482,6 @@ const float ica_sincInterp4[2*SINC_ORDER1+1] = 0.0f,-0.033239f,-0.038282f,-0.021845f, 0.0f, 0.013767f, 0.015189f, 0.008295f, 0.0f,-0.004930f,-0.005537f,-0.003285f, 0.0f }; -#ifndef IVAS_FLOAT_FIXED -const float ica_sincInterp6[2*SINC_ORDER1+1] = -{ - 0.0f,-0.003484f,-0.007192f,-0.010460f,-0.011712f,-0.008798f, 0.0f, 0.014603f, 0.032045f, 0.046341f, 0.049731f, 0.035255f, - 0.0f,-0.052090f,-0.109007f,-0.151947f,-0.159196f,-0.111867f, 0.0f, 0.172831f, 0.388013f, 0.614328f, 0.814030f, 0.951171f, - 1.0f, 0.951171f, 0.814030f, 0.614328f, 0.388013f, 0.172831f, 0.0f,-0.111867f,-0.159196f,-0.151947f,-0.109007f,-0.052090f, - 0.0f, 0.035255f, 0.049731f, 0.046341f, 0.032045f, 0.014603f, 0.0f,-0.008798f,-0.011712f,-0.010460f,-0.007192f,-0.003484f, 0.0f -}; - - -/*----------------------------------------------------------------------------------* - * Stereo IC-BWE ROM tables - *----------------------------------------------------------------------------------*/ - -const float icbwe_gsMapping_tbl[16] = -{ - -2.0000000f, -1.3494960f, -0.9607952f, -0.7098941f, -0.5589364f, -0.4453763f, -0.3429649f, -0.2527705f, - -0.1690688f, -0.0987095f, -0.0700000f, -0.0500000f, -0.0200000f, 0.0000000f, 0.0400000f, 0.0800000f -}; - -const float icbwe_gsMappingDFT_tbl[128] = -{ - -5.0000000f, -4.5000000f, -4.0000000f, -3.5000000f, -3.0000000f, -2.5000000f, -1.9000000f, -1.5474502f, - -1.5002078f, -1.4469336f, -1.3902478f, -1.3770106f, -1.3094972f, -1.2608015f, -1.0926061f, -1.0843442f, - -1.0345038f, -1.0286606f, -1.0161779f, -1.0036838f, -0.9812821f, -0.9698121f, -0.9573308f, -0.9405646f, - -0.9297086f, -0.9131601f, -0.9025761f, -0.8860643f, -0.8736950f, -0.8564931f, -0.8403996f, -0.8352164f, - -0.8241847f, -0.8038731f, -0.7923367f, -0.7789138f, -0.7679189f, -0.7595301f, -0.7566783f, -0.7507762f, - -0.7428076f, -0.7386452f, -0.7339793f, -0.7300271f, -0.7243238f, -0.7188097f, -0.7090309f, -0.7047743f, - -0.7000968f, -0.6903794f, -0.6844128f, -0.6792722f, -0.6724832f, -0.6680448f, -0.6638050f, -0.6587732f, - -0.6519668f, -0.6454810f, -0.6418348f, -0.6352437f, -0.6296001f, -0.6244346f, -0.6182194f, -0.6134241f, - -0.6093079f, -0.6042419f, -0.5995789f, -0.5946505f, -0.5897729f, -0.5851547f, -0.5806601f, -0.5759744f, - -0.5720182f, -0.5669503f, -0.5630283f, -0.5573819f, -0.5511614f, -0.5438205f, -0.5364699f, -0.5282783f, - -0.5198154f, -0.5095584f, -0.4986083f, -0.4861976f, -0.4725366f, -0.4591254f, -0.4449745f, -0.4310394f, - -0.4169318f, -0.4033374f, -0.3898838f, -0.3766562f, -0.3616849f, -0.3472800f, -0.3326788f, -0.3194550f, - -0.3060711f, -0.2916924f, -0.2783983f, -0.2642500f, -0.2506378f, -0.2368909f, -0.2203000f, -0.2036115f, - -0.1869981f, -0.1709912f, -0.1561569f, -0.1420659f, -0.1263750f, -0.1107119f, -0.0953914f, -0.0805369f, - -0.0660773f, -0.0529481f, -0.0401913f, -0.0287031f, -0.0184659f, -0.0094214f, 0.0000000f, 0.0073561f, - 0.0155180f, 0.0224511f, 0.0298570f, 0.0375954f, 0.0457853f, 0.0549424f, 0.0659733f, 0.0785186f -}; - - -/*----------------------------------------------------------------------------------* - * TD Stereo ROM tables - *----------------------------------------------------------------------------------*/ - -const float tdm_ratio_tabl[TDM_NQ+1] = -{ - 0.00f, 0.00f, 0.0109f, 0.0245f, 0.0432f, 0.0670f, 0.0955f, 0.1284f, - 0.1654f, 0.2061f, 0.2500f, 0.2966f, 0.3455f, 0.3960f, 0.4477f, 0.5000f, - 0.5523f, 0.6040f, 0.6545f, 0.7034f, 0.7500f, 0.7939f, 0.8346f, 0.8716f, - 0.9045f, 0.9330f, 0.9568f, 0.9755f, 0.9891f, 1.0000f, 1.0000f, 1.0000f -}; - -const float tdm_den_ratio_tabl[TDM_NQ+1] = /* 1.0f/(2*LR_ratio*LR_ratio-2*LR_ratio+1) */ -{ - 1.0000f, 1.0000f, 1.0221f, 1.0501f, 1.0902f, 1.1429f, 1.2088f, 1.2884f, - 1.3815f, 1.4864f, 1.6000f, 1.7161f, 1.8257f, 1.9171f, 1.9784f, 2.0000f, - 1.9784f, 1.9171f, 1.8257f, 1.7161f, 1.6000f, 1.4864f, 1.3815f, 1.2884f, - 1.2088f, 1.1429f, 1.0902f, 1.0501f, 1.0221f, 1.0000f, 1.0000f, 1.0000f -}; -#endif const Word16 tdm_bit_allc_tbl[5][6] = { @@ -807,49 +493,6 @@ const Word16 tdm_bit_allc_tbl[5][6] = { 1650, 6050, 0, 13000, 0, 14000 } /* IVAS_48k */ }; -#ifndef IVAS_FLOAT_FIXED -/* LSFs Intra-frame prediction tables */ -const float tdm_LSF_MEAN_RE_USE_OUT[M] = -{ - 301.292f, 521.300f, 870.818f, 1340.278f, 1712.099f, 2091.456f, 2488.523f, 2841.096f, 3196.565f, 3593.040f, 3958.366f, 4293.334f, 4710.319f, 5118.806f, 5546.761f, 5918.579f, -}; - -const float tdm_LSF_MEAN_RE_USE_IN[M] = -{ - 286.414f, 522.366f, 887.297f, 1347.961f, 1725.604f, 2102.356f, 2511.703f, 2853.093f, 3211.319f, 3612.072f, 3970.889f, 4327.774f, 4732.423f, 5154.984f, 5572.849f, 5964.332f, -}; - -const float tdm_LSF_MEAN_RE_USE[M] = -{ - 265.534222F, 534.776631F, 919.574509F, 1346.991675F, 1756.991835F, 2123.061862F, 2556.845807F, 2927.484493F, - 3299.107307F, 3686.249102F, 4034.473656F, 4393.818819F, 4781.683038F, 5155.954294F, 5542.569582F, 5927.377309F -}; - -const float tdm_Beta_Q1bit_re_use_13k2[2] = { 0.97F, 0.75F }; -const float tdm_Beta_Q1bit_re_use_16k4[2] = { 0.95F, 0.71F }; -const float tdm_Beta_Q1bit_re_use_24k4_32k[2] = { 0.93F, 0.73F }; -const float tdm_Beta_Q1bit_re_use_48k[2] = { 0.97F, 0.77F }; - -const float tdm_RE_USE_adaptive_beta_prd_diag_3[15 + 16 + 15] = -{ - 0.8859f, 0.2060f, - 0.0585f, 0.8245f, 0.2294f, - 0.0365f, 0.8175f, 0.1696f, - -0.0060f, 0.8483f, 0.2061f, - 0.0663f, 0.8983f, 0.1357f, - 0.0664f, 0.7951f, 0.1934f, - 0.0935f, 0.7948f, 0.1685f, - 0.1109f, 0.7960f, 0.1828f, - 0.1073f, 0.7835f, 0.1804f, - 0.1479f, 0.7362f, 0.1982f, - 0.1335f, 0.7621f, 0.1900f, - 0.1903f, 0.7369f, 0.1715f, - 0.1785f, 0.7214f, 0.1646f, - 0.1967f, 0.6891f, 0.1229f, - 0.2043f, 0.6317f, 0.0543f, - 0.1767f, 0.5396f, -}; -#endif const float tdm_LSF_MEAN_PRED_QNT[M] = { @@ -959,25 +602,6 @@ const MDCTStereoBands_config mdctStereoBands_32000_640[] = {33, 29, 26, 18}/*number of bands for frame lengths 480, 320, 256, 160 respectively*/ }}; -#ifndef IVAS_FLOAT_FIXED -const float nf_tw_smoothing_coeffs[N_LTP_GAIN_MEMS] = -{ - 0.4f,0.2f,0.2f,0.2f -}; - - -/*----------------------------------------------------------------------------------* - * Stereo DTX tables - *----------------------------------------------------------------------------------*/ - -const float dft_cng_coh_pred[STEREO_DFT_N_COH_PRED][STEREO_DFT_COH_PRED_COEFFS] = -{ - { 0.601337f, -0.101048f, 1.269064f, 0.085044f, 0.279032f, 0.669925f, 0.081573f, 0.188857f, -0.172930f, 0.321477f, 0.009332f, -0.084341f, 0.362245f, -0.426671f, 0.758383f}, - { 0.855349f, 0.420736f, 0.413285f, -0.009366f, -0.399699f, 1.385802f, 0.012428f, -0.015338f, 0.156471f, 0.517438f, 0.160248f, -0.303634f, 0.477768f, -0.560747f, 1.382583f}, - { 0.202543f, 0.048819f, 0.263407f, 0.023538f, 0.092021f, 0.395655f, 0.013064f, -0.011127f, 0.035466f, 0.976055f, 0.009968f, 0.162957f, 0.383185f, -0.365493f, 2.534677f}, - { 1.393664f, -0.131401f, 0.989429f, 0.738330f, 0.683865f, 0.001677f, -0.225448f, -0.012158f, 1.084608f, -0.115464f, 0.022371f, -0.045560f, -0.336230f, 0.422742f, 0.499163f} -}; -#endif const Word16 dft_cng_coh_u2i[9] = { 4, 5, 3, 6, 2, 7, 1, 8, 0 }; /* Coherence unary codeword -> residual codeword conversion table */ @@ -985,46 +609,6 @@ const Word16 dft_cng_coh_i2u[9] = { 8, 6, 4, 2, 0, 1, 3, 5, 7 }; /* Coherence re const Word16 dft_cng_coh_alpha_start[STEREO_DFT_N_COH_ALPHA_STEPS - 1] = { 15, 16, 17, 18 }; -#ifndef IVAS_FLOAT_FIXED -const float dft_cng_alpha_bits[STEREO_DFT_N_COH_ALPHA_STEPS][STEREO_DFT_N_COH_ALPHA_LEVELS] = -{ - { 0.1f, 0.6f }, - { 0.1f, 0.6f }, - { 0.1f, 0.7f }, - { 0.1f, 0.9f }, - { 0.2f, 0.9f } -}; - - -/*----------------------------------------------------------------------------------* - * DirAC ROM tables - *----------------------------------------------------------------------------------*/ - -const float diffuseness_reconstructions[DIRAC_DIFFUSE_LEVELS] = -{ - 0.0f, - 0.03955078125f, - 0.089599609375f, - 0.158935546875f, - 0.308349609375f, - 0.473876953125f, - 0.63232421875f, - 0.85009765625f -}; - -const float diffuseness_thresholds[DIRAC_DIFFUSE_LEVELS + 1] = -{ - 0.0f, - 0.01904296875f, - 0.06298828125f, - 0.119384765625f, - 0.22119140625f, - 0.399169921875f, - 0.547607421875f, - 0.734619140625f, - 2.0f /* out-of-range large value to make searching easier */ -}; -#endif const Word16 DirAC_band_grouping_12[12 + 1] = { @@ -1052,11 +636,7 @@ const Word16 DirAC_block_grouping_5ms_MDFT[MAX_PARAM_SPATIAL_SUBFRAMES + 1] = 0, 1, 2, 3, 4 }; -#ifdef IVAS_FLOAT_FIXED const Word32 c_weights_fx[DIRAC_NO_FB_BANDS_MAX] /* Q30 */ = { 106970960, 1033798336, 1065867776, 1071704704, 1073381888, 1073741824, 1073494016, 1072883072, 1072012032, 1070930560, 1069665600, 1068232640, 1066641792, 1064899968, 1063012224, 1060982464, 1058814144, 1056510016, 1054072832, 1051505280, 1048809664, 1045988480, 1043044160, 1039979072, 1036795776, 1033496576, 1030084096, 1026560960, 1022929600, 1019192512, 1015352576, 1011412416, 1007374720, 1003242112, 999017472, 994703488, 990302976, 985818688, 981253568, 976610304, 971891712, 967100672, 962240064, 957312576, 952321088, 947268224, 942156992, 936990080, 931770048, 926499840, 921182016, 915819200, 910414208, 904969344, 899487488, 893970944, 888422272, 882843840, 877238144, 871607552, 865954432, 860280896, 854589184, 848881728, 843160384, 837427328, 831684672, 825934208, 820178240, 814418240, 808656320, 802894208, 797133568, 791376192, 785623744, 779877568, 774139520, 768410880, 762693184, 756987904, 751296064, 745619328, 739958784, 734315584, 728691008, 723086208, 717502016, 711939712, 706400064, 700884096, 695392768, 689926912, 684487232, 679074688, 673689856, 668333504, 663006464, 657709056, 652442176, 647206144, 642001600, 636828992, 631688896, 626581696, 621507776, 616467520, 611461184, 606489344, 601552064, 596649792, 591782528, 586950784, 582154560, 577394112, 572669696, 567981312, 563329088, 558713152, 554133568, 549590464, 545083840, 540613760, 536180160, 531783104, 527422528, 523098464, 518810784, 514559520, 510344672, 506165856, 502023360, 497916832, 493846304, 489811488, 485812448, 481848832, 477920672, 474027808, 470169952, 466347008, 462558848, 458805152, 455085920, 451400736, 447749600, 444132160, 440548320, 436997792, 433480416, 429995904, 426544032, 423124608, 419737376, 416382144, 413058720, 409766720, 406505984, 403276288, 400077280, 396908768, 393770656, 390662496, 387584064, 384535200, 381515616, 378525024, 375563200, 372629952, 369724864, 366847872, 363998592, 361176672, 358382176, 355614592, 352873760, 350159456, 347471328, 344809216, 342172864, 339562048, 336976384, 334415808, 331879840, 329368576, 326881472, 324418432, 321979104, 319563392, 317170976, 314801664, 312455232, 310131328, 307829856, 305550528, 303293088, 301057440, 298843168, 296650176, 294478304, 292327168, 290196672, 288086432, 285996512, 283926432, 281876224, 279845472, 277834016, 275841792, 273868480, 271913856, 269977792, 268059968, 266160304, 264278672, 262414768, 260568368, 258739360, 256927520, 255132768, 253354752, 251593392, 249848448, 248119936, 246407424, 244710816, 243030080, 241364928, 239715120, 238080672, 236461248, 234856752, 233267088, 231692016, 230131440, 228585136, 227053024, 225534848, 224030544, 222539872, 221062832 }; -#else -const float c_weights[DIRAC_NO_FB_BANDS_MAX] = { 9.962447e-02f, 9.627997e-01f, 9.926667e-01f, 9.981028e-01f, 9.996648e-01f, 1.000000e+00f, 9.997692e-01f, 9.992002e-01f, 9.983890e-01f, 9.973818e-01f, 9.962037e-01f, 9.948692e-01f, 9.933876e-01f, 9.917654e-01f, 9.900073e-01f, 9.881169e-01f, 9.860975e-01f, 9.839516e-01f, 9.816818e-01f, 9.792906e-01f, 9.767801e-01f, 9.741527e-01f, 9.714106e-01f, 9.685560e-01f, 9.655913e-01f, 9.625187e-01f, 9.593406e-01f, 9.560594e-01f, 9.526774e-01f, 9.491970e-01f, 9.456208e-01f, 9.419512e-01f, 9.381908e-01f, 9.343420e-01f, 9.304075e-01f, 9.263898e-01f, 9.222915e-01f, 9.181152e-01f, 9.138636e-01f, 9.095392e-01f, 9.051447e-01f, 9.006827e-01f, 8.961559e-01f, 8.915668e-01f, 8.869181e-01f, 8.822123e-01f, 8.774521e-01f, 8.726400e-01f, 8.677785e-01f, 8.628702e-01f, 8.579176e-01f, 8.529231e-01f, 8.478893e-01f, 8.428184e-01f, 8.377130e-01f, 8.325753e-01f, 8.274077e-01f, 8.222124e-01f, 8.169917e-01f, 8.117478e-01f, 8.064829e-01f, 8.011990e-01f, 7.958982e-01f, 7.905827e-01f, 7.852543e-01f, 7.799150e-01f, 7.745667e-01f, 7.692112e-01f, 7.638505e-01f, 7.584861e-01f, 7.531199e-01f, 7.477535e-01f, 7.423885e-01f, 7.370265e-01f, 7.316691e-01f, 7.263176e-01f, 7.209736e-01f, 7.156384e-01f, 7.103134e-01f, 7.049999e-01f, 6.996990e-01f, 6.944121e-01f, 6.891403e-01f, 6.838847e-01f, 6.786464e-01f, 6.734265e-01f, 6.682258e-01f, 6.630455e-01f, 6.578863e-01f, 6.527492e-01f, 6.476350e-01f, 6.425445e-01f, 6.374784e-01f, 6.324376e-01f, 6.274226e-01f, 6.224341e-01f, 6.174729e-01f, 6.125393e-01f, 6.076341e-01f, 6.027577e-01f, 5.979106e-01f, 5.930932e-01f, 5.883061e-01f, 5.835497e-01f, 5.788242e-01f, 5.741301e-01f, 5.694676e-01f, 5.648372e-01f, 5.602390e-01f, 5.556734e-01f, 5.511404e-01f, 5.466405e-01f, 5.421737e-01f, 5.377402e-01f, 5.333402e-01f, 5.289738e-01f, 5.246411e-01f, 5.203422e-01f, 5.160771e-01f, 5.118460e-01f, 5.076489e-01f, 5.034858e-01f, 4.993567e-01f, 4.952616e-01f, 4.912005e-01f, 4.871734e-01f, 4.831802e-01f, 4.792209e-01f, 4.752955e-01f, 4.714037e-01f, 4.675457e-01f, 4.637212e-01f, 4.599302e-01f, 4.561725e-01f, 4.524481e-01f, 4.487567e-01f, 4.450983e-01f, 4.414728e-01f, 4.378799e-01f, 4.343195e-01f, 4.307915e-01f, 4.272956e-01f, 4.238318e-01f, 4.203997e-01f, 4.169993e-01f, 4.136303e-01f, 4.102926e-01f, 4.069859e-01f, 4.037101e-01f, 4.004649e-01f, 3.972501e-01f, 3.940655e-01f, 3.909109e-01f, 3.877861e-01f, 3.846909e-01f, 3.816250e-01f, 3.785882e-01f, 3.755803e-01f, 3.726010e-01f, 3.696501e-01f, 3.667275e-01f, 3.638328e-01f, 3.609658e-01f, 3.581263e-01f, 3.553141e-01f, 3.525289e-01f, 3.497705e-01f, 3.470387e-01f, 3.443331e-01f, 3.416537e-01f, 3.390001e-01f, 3.363720e-01f, 3.337694e-01f, 3.311919e-01f, 3.286393e-01f, 3.261114e-01f, 3.236079e-01f, 3.211286e-01f, 3.186733e-01f, 3.162418e-01f, 3.138337e-01f, 3.114490e-01f, 3.090872e-01f, 3.067484e-01f, 3.044321e-01f, 3.021382e-01f, 2.998664e-01f, 2.976166e-01f, 2.953885e-01f, 2.931819e-01f, 2.909966e-01f, 2.888323e-01f, 2.866889e-01f, 2.845661e-01f, 2.824637e-01f, 2.803816e-01f, 2.783194e-01f, 2.762770e-01f, 2.742543e-01f, 2.722509e-01f, 2.702667e-01f, 2.683014e-01f, 2.663550e-01f, 2.644271e-01f, 2.625177e-01f, 2.606264e-01f, 2.587531e-01f, 2.568977e-01f, 2.550599e-01f, 2.532395e-01f, 2.514364e-01f, 2.496503e-01f, 2.478811e-01f, 2.461287e-01f, 2.443928e-01f, 2.426732e-01f, 2.409698e-01f, 2.392824e-01f, 2.376109e-01f, 2.359550e-01f, 2.343146e-01f, 2.326895e-01f, 2.310797e-01f, 2.294848e-01f, 2.279047e-01f, 2.263394e-01f, 2.247886e-01f, 2.232521e-01f, 2.217299e-01f, 2.202217e-01f, 2.187274e-01f, 2.172469e-01f, 2.157800e-01f, 2.143266e-01f, 2.128865e-01f, 2.114596e-01f, 2.100457e-01f, 2.086447e-01f, 2.072564e-01f, 2.058808e-01f }; -#endif /*----------------------------------------------------------------------* * SPAR ROM tables @@ -1697,9 +1277,6 @@ const ivas_huff_models_t ivas_huff_decd_r_consts[TOTAL_DECD_QUANT_STRATS] = /* DTX quantization and bitstream constants */ -#ifndef IVAS_FLOAT_FIXED -const float dtx_pd_real_min_max[2] = { 0, 1.6f }; -#endif const Word16 dtx_pd_real_q_levels[3][3] = { { 7,7,7 },{ 7,7,0 },{ 3,0,0 } }; const Word16 dtx_pr_real_q_levels[3][3] = { { 9,9,9 },{ 9,7,9 },{ 9,5,7 } }; const Word16 pr_pr_idx_pairs[3][3][2] = { { { 0, 0 },{ 0, 0 },{ 0, 0 } },{ { 0, 0 },{ 0, 0 },{ 0, 0 } },{ { 0, 0 },{ 1, 3 },{ 0, 0 } } }; @@ -2169,62 +1746,7 @@ const Word16 Param_MC_index[MAX_CICP_CHANNELS] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_dmx_fac_CICP6_2tc[12] = -{ - 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f /*Rt*/ -}; - -const float ivas_param_mc_dmx_fac_CICP12_2tc[16] = -{ - 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f /*Rt*/ -}; - -const float ivas_param_mc_dmx_fac_CICP12_3tc[24] = -{ - 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ - 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ -}; - -const float ivas_param_mc_dmx_fac_CICP14_2tc[16] = -{ - 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f /*Rt*/ -}; -const float ivas_param_mc_dmx_fac_CICP14_3tc[24] = -{ - 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ - 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Ct*/ -}; - -const float ivas_param_mc_dmx_fac_CICP16_3tc[30] = -{ - 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ - 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ -}; - -const float ivas_param_mc_dmx_fac_CICP19_3tc[36] = -{ - 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lt*/ - 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rt*/ - 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f /*Ct*/ -}; - -const float ivas_param_mc_dmx_fac_CICP19_4tc[48] = -{ - 1.0f, 0.0f, INV_SQRT2, INV_SQRT2, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Lht*/ - 0.0f, 1.0f, INV_SQRT2, INV_SQRT2, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, /*Rht*/ - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, /*Lut*/ - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, /*Rut*/ -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 ivas_param_mc_dmx_fac_CICP6_2tc_fx[12] = { 2147483647,0,1518500224,1518500224,2147483647,0, /*Lt*/ @@ -2278,20 +1800,7 @@ const Word32 ivas_param_mc_dmx_fac_CICP19_4tc_fx[48] = 0,0,0,0,0,0,0,0,0,2147483647,0,2147483647 /*Rut*/ }; -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -/* Coefficient for Parametric MC ILD factorization */ -const float ivas_param_mc_ild_fac_CICP6_2tc[6] = -{ - 0.391608498887651f, - 0.391608498887651f, - 0.208150823035836f, - 0.323713613305539f, - 0.323713613305539f, - 0.208150823035836f, -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP6_2tc_fx[6] = { @@ -2303,19 +1812,6 @@ const Word16 ivas_param_mc_ild_fac_CICP6_2tc_fx[6] = 6820 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP12_2tc[8] = -{ - 0.365151211522008f, - 0.365151211522008f, - 0.208008958987949f, - 0.209863469733018f, - 0.209863469733018f, - 0.171473949468979f, - 0.171473949468979f, - 0.208008958987949f -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP12_2tc_fx[8] = { @@ -2328,19 +1824,6 @@ const Word16 ivas_param_mc_ild_fac_CICP12_2tc_fx[8] = 5619, 6816 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP12_3tc[8] = -{ - 0.5f, - 0.5f, - 0.29f, - 0.29f, - 0.2f, - 0.2f, - 1.0f, - 0.25f -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP12_3tc_fx[8] = @@ -2354,19 +1837,6 @@ const Word16 ivas_param_mc_ild_fac_CICP12_3tc_fx[8] = 32767, 8192 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP14_2tc[8] = -{ - 0.36427054f, - 0.36427054f, - 0.18290930f, - 0.21193730f, - 0.21193730f, - 0.24564756f, - 0.24564756f, - 0.20800895f -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP14_2tc_fx[8] = { @@ -2380,19 +1850,6 @@ const Word16 ivas_param_mc_ild_fac_CICP14_2tc_fx[8] = 6816 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP14_3tc[8] = -{ - 0.49716263f, - 0.49716263f, - 0.25198298f, - 0.25198298f, - 0.29498283f, - 0.29498283f, - 1.0f, - 0.25f -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP14_3tc_fx[8] = { @@ -2405,21 +1862,6 @@ const Word16 ivas_param_mc_ild_fac_CICP14_3tc_fx[8] = 32767, 8192 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP16_3tc[10] = -{ - 0.34f, - 0.34f, - 0.22f, - 0.22f, - 0.20f, - 0.20f, - 0.18f, - 0.18f, - 1.0f, - 0.25f, -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP16_3tc_fx[10] = @@ -2435,23 +1877,6 @@ const Word16 ivas_param_mc_ild_fac_CICP16_3tc_fx[10] = 32767, 8192 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_ild_fac_CICP19_3tc[12] = -{ - 0.3f, - 0.3f, - 0.17f, - 0.17f, - 0.12f, - 0.12f, - 0.19f, - 0.19f, - 0.19f, - 0.19f, - 1.0f, - 0.5f -}; -#endif //Q15 const Word16 ivas_param_mc_ild_fac_CICP19_3tc_fx[12] = @@ -2643,13 +2068,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_48k, &ivas_param_mc_ild_mapping_CICP6_2tc, &ivas_param_mc_icc_mapping_CICP6_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP6_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP6_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP6_2tc[0], - &ivas_param_mc_dmx_fac_CICP6_2tc[0], -#endif }, /* CICP6 64000 */ { @@ -2659,13 +2079,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_64k, &ivas_param_mc_ild_mapping_CICP6_2tc, &ivas_param_mc_icc_mapping_CICP6_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP6_2tc_fx[0], & ivas_param_mc_dmx_fac_CICP6_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP6_2tc[0], - &ivas_param_mc_dmx_fac_CICP6_2tc[0], -#endif }, /* CICP6 80000 */ { @@ -2675,13 +2090,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_80k, &ivas_param_mc_ild_mapping_CICP6_2tc, &ivas_param_mc_icc_mapping_CICP6_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP6_2tc_fx[0], & ivas_param_mc_dmx_fac_CICP6_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP6_2tc[0], - &ivas_param_mc_dmx_fac_CICP6_2tc[0], -#endif }, /* CICP12 48000 */ { @@ -2691,13 +2101,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_48k, &ivas_param_mc_ild_mapping_CICP12_2tc, &ivas_param_mc_icc_mapping_CICP12_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP12_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP12_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP12_2tc[0], - &ivas_param_mc_dmx_fac_CICP12_2tc[0], -#endif }, /* CICP12 64000 */ { @@ -2707,13 +2112,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_64k, &ivas_param_mc_ild_mapping_CICP12_2tc, &ivas_param_mc_icc_mapping_CICP12_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP12_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP12_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP12_2tc[0], - &ivas_param_mc_dmx_fac_CICP12_2tc[0], -#endif }, /* CICP12 80000 */ { @@ -2723,13 +2123,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_80k, &ivas_param_mc_ild_mapping_CICP12_2tc, &ivas_param_mc_icc_mapping_CICP12_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP12_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP12_2tc_fx[0], -#else - &ivas_param_mc_ild_fac_CICP12_2tc[0], - &ivas_param_mc_dmx_fac_CICP12_2tc[0], -#endif }, /* CICP12 96000 */ { @@ -2739,13 +2134,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_96k, &ivas_param_mc_ild_mapping_CICP12_3tc, &ivas_param_mc_icc_mapping_CICP12_3tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP12_3tc_fx[0], &ivas_param_mc_dmx_fac_CICP12_3tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP12_3tc[0], - &ivas_param_mc_dmx_fac_CICP12_3tc[0], -#endif }, /* CICP14 48000 */ { @@ -2755,13 +2145,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_48k, &ivas_param_mc_ild_mapping_CICP14_2tc, &ivas_param_mc_icc_mapping_CICP14_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP14_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP14_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP14_2tc[0], - &ivas_param_mc_dmx_fac_CICP14_2tc[0], -#endif }, /* CICP14 64000 */ { @@ -2771,13 +2156,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_64k, &ivas_param_mc_ild_mapping_CICP14_2tc, &ivas_param_mc_icc_mapping_CICP14_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP14_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP14_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP14_2tc[0], - &ivas_param_mc_dmx_fac_CICP14_2tc[0], -#endif }, /* CICP14 80000 */ { @@ -2787,13 +2167,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_80k, &ivas_param_mc_ild_mapping_CICP14_2tc, &ivas_param_mc_icc_mapping_CICP14_2tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP14_2tc_fx[0], &ivas_param_mc_dmx_fac_CICP14_2tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP14_2tc[0], - &ivas_param_mc_dmx_fac_CICP14_2tc[0], -#endif }, /* CICP14 96000 */ { @@ -2803,13 +2178,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_96k, &ivas_param_mc_ild_mapping_CICP14_3tc, &ivas_param_mc_icc_mapping_CICP14_3tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP14_3tc_fx[0], &ivas_param_mc_dmx_fac_CICP14_3tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP14_3tc[0], - &ivas_param_mc_dmx_fac_CICP14_3tc[0], -#endif }, /* CICP16 96000 */ { @@ -2819,13 +2189,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_96k, &ivas_param_mc_ild_mapping_CICP16_3tc, &ivas_param_mc_icc_mapping_CICP16_3tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP16_3tc_fx[0], &ivas_param_mc_dmx_fac_CICP16_3tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP16_3tc[0], - &ivas_param_mc_dmx_fac_CICP16_3tc[0], -#endif }, /* CICP16 128000 */ { @@ -2835,13 +2200,8 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_128k, &ivas_param_mc_ild_mapping_CICP16_3tc, &ivas_param_mc_icc_mapping_CICP16_3tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP16_3tc_fx[0], &ivas_param_mc_dmx_fac_CICP16_3tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP16_3tc[0], - &ivas_param_mc_dmx_fac_CICP16_3tc[0], -#endif }, /* CICP19 128000 */ { @@ -2851,29 +2211,11 @@ const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS] = IVAS_128k, &ivas_param_mc_ild_mapping_CICP19_3tc, &ivas_param_mc_icc_mapping_CICP19_3tc, -#ifdef IVAS_FLOAT_FIXED &ivas_param_mc_ild_fac_CICP19_3tc_fx[0], &ivas_param_mc_dmx_fac_CICP19_3tc_fx[0] -#else - &ivas_param_mc_ild_fac_CICP19_3tc[0], - &ivas_param_mc_dmx_fac_CICP19_3tc[0], -#endif } }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_param_mc_quant_ild_5d1_48[PARAM_MC_SZ_ILD_QUANTIZER_4BITS] = -{ - -100.0f, -20.0f, -13.0f, -10.0f, - -8.0f, -5.5f, -3.5f, -1.5f, 0.0f, 1.5f, 3.5f, 5.5f, 8.0f, 10.0f, 13.0f, 20.0f -}; - -/* Quantizer for ICCs in Parametric MC Processing */ -const float ivas_param_mc_quant_icc[PARAM_MC_SZ_ICC_QUANTIZER] = -{ - -0.99f, -0.589f, 0.0f, 0.36764f, 0.60092f, 0.84118f, 0.937f, 1.0f -}; -#endif /* Alphabet for delta coding for the ICCs in Parametric MC processing */ const UWord16 ivas_param_mc_cum_freq_icc_cicp6_48_16bits[PARAM_MC_SZ_ICC_QUANTIZER + 1] = @@ -3039,47 +2381,6 @@ const UWord16 ivas_param_mc_sym_freq_ild_delta_combined_48_16bits[2 * PARAM_MC_S /*----------------------------------------------------------------------------------* * MASA ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float diffuseness_reconstructions_hr[HR_MASA_ER_LEVELS] = -{ - 0.00f, - 0.0142822265625f, - 0.030029296875f, - 0.052001953125f, - 0.07708740234375f, - 0.10528564453125f, - 0.14483642578125f, - 0.19573974609375f, - 0.26568603515625f, - 0.35467529296875f, - 0.436279296875f, - 0.510498046875f, - 0.5943603515625f, - 0.6878662109375f, - 0.80096435546875f, - 0.93365478515625f -}; -const float diffuseness_thresholds_hr[HR_MASA_ER_LEVELS + 1] = -{ - 0.0f, - 0.009521484375f, - 0.01904296875f, - 0.0410156250f, - 0.06298828125f, - 0.0911865234375f, - 0.119384765625f, - 0.1702880859375f, - 0.22119140625f, - 0.3101806640625f, - 0.399169921875f, - 0.473388671875f, - 0.547607421875f, - 0.641113281250f, - 0.734619140625f, - 0.8673095703125f, - 2.0f /* out-of-range large value to make searching easier */ -}; -#endif const Word64 diffuseness_reconstructions_hr_fx[HR_MASA_ER_LEVELS] = { /* Q62 */ 0, @@ -3132,56 +2433,6 @@ const Word16 bits_direction_masa[DIRAC_DIFFUSE_LEVELS] = 3 }; -#ifndef IVAS_FLOAT_FIXED -const float coherence_cb0_masa[DIRAC_DIFFUSE_LEVELS * 2 * MASA_NO_CV_COH] = -{ - /* this is the same */ - 0.0478f, 0.2547f, 0.5515f, 0.9865f, 1.3573f, 1.6838f, 1.9674f, 0.0f, - 0.1211f, 0.4123f, 0.6997f, 1.0154f, 1.4197f, 1.7971f, 0.0f, 0.0f, - 0.1614f, 0.5674f, 0.9708f, 1.3699f, 1.7357f, 0.0f, 0.0f, 0.0f, - 0.2349f, 0.7306f, 1.2051f, 1.6547f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.2381f, 0.7185f, 1.1758f, 1.6335f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.2400f, 0.7027f, 1.1407f, 1.6243f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.3518f, 0.9398f, 1.6454f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - - 0.1445f, 0.3432f, 0.5351f, 0.7524f, 1.0095f, 1.3210f, 1.7399f, 0.0f, - 0.2002f, 0.4447f, 0.6869f, 0.9593f, 1.3090f, 1.7029f, 0.0f, 0.0f, - 0.2617f, 0.5556f, 0.8645f, 1.2185f, 1.6051f, 0.0f, 0.0f, 0.0f, - 0.3318f, 0.6810f, 1.0445f, 1.4710f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.3324f, 0.6588f, 0.9980f, 1.4164f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.3378f, 0.6658f, 1.0009f, 1.4269f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.3986f, 0.8244f, 1.3526f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f - - /* 0.0478f, 0.2547f, 1.9674f, 0.9865f, 0.5515f, 1.6838f, 1.3573f, 0.0f, - 0.1211f, 0.4123f, 0.6997f, 1.0154f, 1.4197f, 1.7971f, 0.0f, 0.0f, - 0.5674f, 0.9708f, 0.1614f, 1.3699f, 1.7357f, 0.0f, 0.0f, 0.0f, - 0.7306f, 1.2051f, 0.2349f, 1.6547f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.7185f, 1.1758f, 0.2381f, 1.6335f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.7027f, 1.1407f, 0.2400f, 1.6243f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.9398f, 1.6454f, 0.3518f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - - 0.3432f, 0.1445f, 0.5351f, 0.7524f, 1.0095f, 1.3210f, 1.7399f, 0.0f, - 0.4447f, 0.2002f, 0.6869f, 0.9593f, 1.3090f, 1.7029f, 0.0f, 0.0f, - 0.5556f, 0.2617f, 0.8645f, 1.2185f, 1.6051f, 0.0f, 0.0f, 0.0f, - 0.6810f, 0.3318f, 1.0445f, 1.4710f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.6588f, 0.3324f, 0.9980f, 1.4164f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.6658f, 0.3378f, 1.0009f, 1.4269f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.3986f, 0.8244f, 1.3526f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 0.000f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f */ -}; - -const float coherence_cb1_masa[MASA_NO_CV_COH1*MASA_MAXIMUM_CODING_SUBBANDS] = -{ - -0.0019f, 0.2597f, -0.2696f, 0.6269f, -0.6295f, - -0.0055f, 0.2582f, -0.2784f, 0.6473f, -0.6538f, - -0.0029f, 0.2506f, -0.2630f, 0.6498f, -0.6540f, - -0.0004f, 0.2546f, -0.2579f, 0.6851f, -0.6743f, - 0.0017f, 0.2521f, -0.2479f, 0.7217f, -0.7157f -}; -#endif const Word16 len_cb_dct0_masa[DIRAC_DIFFUSE_LEVELS] = { 7, 6, 5, 4, 4, 4, 3, 2 }; @@ -3222,29 +2473,6 @@ const Word16 no_phi_masa[NO_SPHERICAL_GRIDS][MAX_NO_THETA] = /* from 1 to 11 bit { 89, 89, 88, 86, 84, 81, 77, 73, 68, 63, 57, 51, 44, 38, 30, 23, 15, 8, 1 } }; -const float delta_theta_masa[NO_SPHERICAL_GRIDS - 2] = -{ /*180.0f, 90.0f,*/ 45.0f, 45.0f, 36.0f, 25.5f, 20.0f, /*14.9f*/ 15.0f, 10.78f, 6.7f, 5.0f }; -/* spheres -11 (10.9951) : (4.05,5) 89 89 88 86 84 81 77 73 68 63 57 51 44 38 30 23 15 8 1 -10 (10.0000): (6, 6.7) 60 60 58 56 54 50 46 41 36 30 23 17 10 1 -9 (8.9944): (7.5, 10.78) 48 47 45 41 35 28 20 12 2 1 -8 (7.9944): (10.8, 14.9) 33 32 29 23 17 9 1 -7 (7.0000): (16.5,20) 22 21 17 11 3 1 -6 (6.0000): (25,25.5) 14 13 9 2 1 -5 (5.0000): (36,36) 10 8 2 1 -4 (4.0000): (45 45) 8 4 (no +-90) -3 (3.0000) (90,45) 4 2 (no +-90) -2 (2.0000) (90,90) 4 (no +-90) -1 () 2 -*/ - -#ifndef IVAS_FLOAT_FIXED -const float azimuth_cb[8] = -{ - 0.0f, -180.0f, -90.0f, 90.0f, -45.0f, 45.0f, -135.0f, 135.0f -}; -#endif - const Word16 MASA_band_grouping_24[24 + 1] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30, 40, 60 @@ -3327,61 +2555,6 @@ const uint8_t masa_twodir_bands_joined[IVAS_NUM_ACTIVE_BRATES] = }; -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------------------------------* - * Multi-channel LS setups - *----------------------------------------------------------------------------------*/ - -const float ls_azimuth_CICP2[2] = { 30.0f, -30.0f }; -const float ls_elevation_CICP2[2] = { 0.0f, 0.0f }; - -const float ls_azimuth_CICP6[5] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f }; -const float ls_elevation_CICP6[5] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; - -const float ls_azimuth_CICP12[7] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 135.0f, -135.0f }; -const float ls_elevation_CICP12[7] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; - -const float ls_azimuth_CICP14[7] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 30.0f, -30.0f }; -const float ls_elevation_CICP14[7] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f }; - -const float ls_azimuth_CICP16[9] = { 30.0f, -30.0f, 0.0f, 110.0f, -110.0f, 30.0f, -30.0f, 110.0f, -110.0f }; -const float ls_elevation_CICP16[9] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; - -const float ls_azimuth_CICP19[11] = { 30.0f, -30.0f, 0.0f, 135.0f, -135.0f, 90.0f, -90.0f, 30.0f, -30.0f, 135.0f, -135.0f }; -const float ls_elevation_CICP19[11] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; - -const float shoebox_sin_cos_tbl[11][2] ={{0.00000000f, 1.00000000f }, //0 - {0.500000000f, 0.866025388f}, { -0.500000000f, 0.866025388f}, //30, -30 - {0.573576450f , 0.819152057f}, {-0.573576450f, 0.819152057f}, //35, -35 - {1.00000000f , 0.00000000f} , { -1.00000000f, 0.00000000f }, //90, -90 - {0.939692616f , -0.342020124f}, {-0.939692616f,-0.342020124f},//110,-110 - {0.707106769f , -0.707106769f}, {-0.707106769f,-0.707106769f}}; //135, -135 -#endif - -const float cb_azi_chan[] = { 0.0f, 30.0f, 110.0f, 135.0f }; - -#ifndef IVAS_FLOAT_FIXED -const float McMASA_LFEGain_vectors[64] = -{ - 0.38f, 0.33f, 0.19f, 0.20f, /* 1st bit */ - -0.16f, -0.22f, -0.35f, -0.34f, - 0.50f, 0.50f, 0.50f, 0.50f, /* 2nd bit*/ - -0.80f, -0.40f, 1.02f, 0.10f, - -0.50f, -0.50f, -0.50f, -0.50f, /* 3rd bit */ - -0.56f, -0.12f, -0.78f, 1.36f, - -1.02f, 1.18f, -0.57f, 0.33f, - 0.72f, -1.13f, 0.97f, -0.62f, - -0.91f, 0.93f, 1.00f, -1.10f, /* 4th bit*/ - 1.73f, -0.23f, -0.78f, -0.84f, - 0.95f, -1.60f, -0.34f, 0.93f, - 0.87f, 0.47f, -1.90f, 0.52f, - 0.67f, 1.42f, -0.97f, -1.24f, - 0.83f, 0.58f, 0.61f, -2.04f, - -0.80f, -1.58f, 0.82f, 1.42f, - -2.14f, 0.26f, 0.84f, 1.02f -}; -#endif - /*----------------------------------------------------------------------------------* * OMASA ROM tables *----------------------------------------------------------------------------------*/ @@ -3405,67 +2578,6 @@ const Word32 sep_object_brate[][MAX_NUM_OBJECTS] = }; /* column wise DCT matrices for 4 5, and 8 dim */ -#ifndef IVAS_FLOAT_FIXED -const float dct4[4*4] = -{ - 0.5000f, 0.6533f, 0.5000f, 0.2706f, - 0.5000f, 0.2706f, -0.5000f, -0.6533f, - 0.5000f, -0.2706f, -0.5000f, 0.6533f, - 0.5000f, -0.6533f, 0.5000f, -0.2706f -}; - -const float dct5[5*5] = -{ - 0.4472f, 0.6015f, 0.5117f, 0.3717f, 0.1954f, - 0.4472f, 0.3717f, -0.1954f, -0.6015f, -0.5117f, - 0.4472f, 0.0000f, -0.6325f, -0.0000f, 0.6325f, - 0.4472f, -0.3717f, -0.1954f, 0.6015f, -0.5117f, - 0.4472f, -0.6015f, 0.5117f, -0.3717f, 0.1954f -}; - -const float dct8[8*8] = -{ - 0.3536f, 0.4904f, 0.4619f, 0.4157f, 0.3536f, 0.2778f, 0.1913f, 0.0975f, - 0.3536f, 0.4157f, 0.1913f, -0.0975f, -0.3536f, -0.4904f, -0.4619f, -0.2778f, - 0.3536f, 0.2778f, -0.1913f, -0.4904f, -0.3536f, 0.0975f, 0.4619f, 0.4157f, - 0.3536f, 0.0975f, -0.4619f, -0.2778f, 0.3536f, 0.4157f, -0.1913f, -0.4904f, - 0.3536f, -0.0975f, -0.4619f, 0.2778f, 0.3536f, -0.4157f, -0.1913f, 0.4904f, - 0.3536f, -0.2778f, -0.1913f, 0.4904f, -0.3536f, -0.0975f, 0.4619f, -0.4157f, - 0.3536f, -0.4157f, 0.1913f, 0.0975f, -0.3536f, 0.4904f, -0.4619f, 0.2778f, - 0.3536f, -0.4904f, 0.4619f, -0.4157f, 0.3536f, -0.2778f, 0.1913f, -0.0975f -}; - -const float dct12[12*12]= -{ - 0.2887f, 0.4048f, 0.3943f, 0.3772f, 0.3536f, 0.3239f, 0.2887f, 0.2485f, 0.2041f, 0.1562f, 0.1057f, 0.0533f, - 0.2887f, 0.3772f, 0.2887f, 0.1562f, 0.0000f, -0.1562f, -0.2887f, -0.3772f, -0.4082f, -0.3772f, -0.2887f, -0.1562f, - 0.2887f, 0.3239f, 0.1057f, -0.1562f, -0.3536f, -0.4048f, -0.2887f, -0.0533f, 0.2041f, 0.3772f, 0.3943f, 0.2485f, - 0.2887f, 0.2485f, -0.1057f, -0.3772f, -0.3536f, -0.0533f, 0.2887f, 0.4048f, 0.2041f, -0.1562f, -0.3943f, -0.3239f, - 0.2887f, 0.1562f, -0.2887f, -0.3772f, -0.0000f, 0.3772f, 0.2887f, -0.1562f, -0.4082f, -0.1562f, 0.2887f, 0.3772f, - 0.2887f, 0.0533f, -0.3943f, -0.1562f, 0.3536f, 0.2485f, -0.2887f, -0.3239f, 0.2041f, 0.3772f, -0.1057f, -0.4048f, - 0.2887f, -0.0533f, -0.3943f, 0.1562f, 0.3536f, -0.2485f, -0.2887f, 0.3239f, 0.2041f, -0.3772f, -0.1057f, 0.4048f, - 0.2887f, -0.1562f, -0.2887f, 0.3772f, 0.0000f, -0.3772f, 0.2887f, 0.1562f, -0.4082f, 0.1562f, 0.2887f, -0.3772f, - 0.2887f, -0.2485f, -0.1057f, 0.3772f, -0.3536f, 0.0533f, 0.2887f, -0.4048f, 0.2041f, 0.1562f, -0.3943f, 0.3239f, - 0.2887f, -0.3239f, 0.1057f, 0.1562f, -0.3536f, 0.4048f, -0.2887f, 0.0533f, 0.2041f, -0.3772f, 0.3943f, -0.2485f, - 0.2887f, -0.3772f, 0.2887f, -0.1562f, -0.0000f, 0.1562f, -0.2887f, 0.3772f, -0.4082f, 0.3772f, -0.2887f, 0.1562f, - 0.2887f, -0.4048f, 0.3943f, -0.3772f, 0.3536f, -0.3239f, 0.2887f, -0.2485f, 0.2041f, -0.1562f, 0.1057f, -0.0533f -}; - -/*----------------------------------------------------------------------------------* - * ISM ROM tables - *----------------------------------------------------------------------------------*/ - -const float ism_azimuth_borders[4] = -{ - ISM_AZIMUTH_MIN, ISM_AZIMUTH_LOW_BORDER, ISM_AZIMUTH_HIGH_BORDER, ISM_AZIMUTH_MAX -}; - -const float ism_elevation_borders[4] = -{ - ISM_ELEVATION_MIN, ISM_ELEVATION_LOW_BORDER, ISM_ELEVATION_HIGH_BORDER, ISM_ELEVATION_MAX -}; - -#endif /*----------------------------------------------------------------------------------* * Param ISM ROM tables *----------------------------------------------------------------------------------*/ @@ -3478,247 +2590,6 @@ const Word16 Param_ISM_band_grouping[MAX_PARAM_ISM_NBANDS + 1] = /*----------------------------------------------------------------------------------* * LFE coding ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float ivas_lfe_window_coeff_48k[IVAS_LFE_FADE_LEN_48K] = -{ - 0.000111037183489911f, 0.000184173600662723f, 0.000260431056232165f, 0.000343096680773904f, - 0.000433557036912299f, 0.000532702330090964f, 0.000641245198570983f, 0.000759825620233343f, - 0.000889053268887781f, 0.00102952705612861f, 0.00118184503626756f, 0.00134660978209878f, - 0.00152443144932643f, 0.00171592958031516f, 0.00192173418063960f, 0.00214248635511166f, - 0.00237883866481051f, 0.00263145529985620f, 0.00290101212545378f, 0.00318819663720802f, - 0.00349370784884686f, 0.00381825612758351f, 0.00416256298736225f, 0.00452736084701996f, - 0.00491339275828344f, 0.00532141210711066f, 0.00575218229092557f, 0.00620647637363723f, - 0.00668507671987614f, 0.00718877460956053f, 0.00771836983367896f, 0.00827467027201698f, - 0.00885849145344304f, 0.00947065609929077f, 0.0101119936503206f, 0.0107833397777077f, - 0.0114855358784815f, 0.0122194285558262f, 0.0129858690846493f, 0.0137857128628235f, - 0.0146198188485090f, 0.0154890489839742f, 0.0163942676063398f, 0.0173363408456805f, - 0.0183161360109349f, 0.0193345209640845f, 0.0203923634830761f, 0.0214905306139788f, - 0.0226298880128789f, 0.0238112992780310f, 0.0250356252727999f, 0.0263037234399395f, - 0.0276164471077718f, 0.0289746447888419f, 0.0303791594716384f, 0.0318308279059821f, - 0.0333304798826995f, 0.0348789375082095f, 0.0364770144746630f, 0.0381255153262869f, - 0.0398252347225964f, 0.0415769566991470f, 0.0433814539265092f, 0.0452394869681573f, - 0.0471518035379721f, 0.0491191377580651f, 0.0511422094176377f, 0.0532217232335982f, - 0.0553583681136604f, 0.0575528164226564f, 0.0598057232527990f, 0.0621177256986303f, - 0.0644894421373997f, 0.0669214715156123f, 0.0694143926424920f, 0.0719687634911028f, - 0.0745851205078720f, 0.0772639779312550f, 0.0800058271202837f, 0.0828111358937321f, - 0.0856803478806326f, 0.0886138818828696f, 0.0916121312505734f, 0.0946754632710273f, - 0.0978042185717987f, 0.100998710538792f, 0.104259224749915f, 0.107586018425039f, - 0.110979319892929f, 0.114439328075791f, 0.117966211992097f, 0.121560110278315f, - 0.125221130730162f, 0.128949349863999f, 0.132744812498936f, 0.136607531360247f, - 0.140537486704635f, 0.144534625967897f, 0.148598863435505f, 0.152730079936616f, - 0.156928122561981f, 0.161192804406232f, 0.165523904334983f, 0.169921166777162f, - 0.174384301542983f, 0.178912983667934f, 0.183506853283123f, 0.188165515512334f, - 0.192888540396077f, 0.197675462842929f, 0.202525782608415f, 0.207438964301664f, - 0.212414437420042f, 0.217451596411945f, 0.222549800767893f, 0.227708375140074f, - 0.232926609490399f, 0.238203759267182f, 0.243539045610445f, 0.248931655585895f, - 0.254380742447540f, 0.259885425928913f, 0.265444792562823f, 0.271057896029545f, - 0.276723757533309f, 0.282441366206947f, 0.288209679544493f, 0.294027623861544f, - 0.299894094783121f, 0.305807957758767f, 0.311768048604592f, 0.317773174071915f, - 0.323822112442170f, 0.329913614147682f, 0.336046402417904f, 0.342219173950673f, - 0.348430599608033f, 0.354679325136114f, 0.360963971908571f, 0.367283137693016f, - 0.373635397439901f, 0.380019304093226f, 0.386433389422488f, 0.392876164875198f, - 0.399346122449318f, 0.405841735584931f, 0.412361460074412f, 0.418903734990401f, - 0.425466983630787f, 0.432049614479962f, 0.438650022185529f, 0.445266588549660f, - 0.451897683534280f, 0.458541666279211f, 0.465196886132432f, 0.471861683691556f, - 0.478534391855649f, 0.485213336886453f, 0.491896839478123f, 0.498583215834516f, - 0.505270778753096f, 0.511957838714501f, 0.518642704976797f, 0.525323686673448f, - 0.531999093914013f, 0.538667238886587f, 0.545326436960981f, 0.551975007791651f, - 0.558611276419351f, 0.565233574370526f, 0.571840240753416f, 0.578429623349869f, - 0.585000079701846f, 0.591549978191620f, 0.598077699114643f, 0.604581635744092f, - 0.611060195386091f, 0.617511800424606f, 0.623934889355033f, 0.630327917805494f, - 0.636689359544871f, 0.643017707476609f, 0.649311474617338f, 0.655569195059378f, - 0.661789424916185f, 0.667970743249834f, 0.674111752979635f, 0.680211081770987f, - 0.686267382903617f, 0.692279336118339f, 0.698245648441503f, 0.704165054986320f, - 0.710036319730275f, 0.715858236267842f, 0.721629628537765f, 0.727349351524163f, - 0.733016291930776f, 0.738629368827644f, 0.744187534269598f, 0.749689773885909f, - 0.755135107440516f, 0.760522589362248f, 0.765851309244508f, 0.771120392313900f, - 0.776328999867319f, 0.781476329677057f, 0.786561616363500f, 0.791584131735037f, - 0.796543185094819f, 0.801438123514058f, 0.806268332071584f, 0.811033234059390f, - 0.815732291153985f, 0.820365003553343f, 0.824930910079335f, 0.829429588245527f, - 0.833860654290276f, 0.838223763175109f, 0.842518608548382f, 0.846744922674278f, - 0.850902476327233f, 0.854991078651907f, 0.859010576988885f, 0.862960856666304f, - 0.866841840757651f, 0.870653489806038f, 0.874395801515260f, 0.878068810408014f, - 0.881672587451697f, 0.885207239652212f, 0.888672909616291f, 0.892069775082842f, - 0.895398048423911f, 0.898657976115850f, 0.901849838181344f, 0.904973947602979f, - 0.908030649709079f, 0.911020321532565f, 0.913943371143645f, 0.916800236957154f, - 0.919591387015427f, 0.922317318247601f, 0.924978555706293f, 0.927575651782607f, - 0.930109185400495f, 0.932579761191496f, 0.934988008650908f, 0.937334581276497f, - 0.939620155690861f, 0.941845430748583f, 0.944011126629350f, 0.946117983918227f, - 0.948166762674299f, 0.950158241488903f, 0.952093216534711f, 0.953972500606916f, - 0.955796922157805f, 0.957567324326003f, 0.959284563961681f, 0.960949510649049f, - 0.962563045727414f, 0.964126061312150f, 0.965639459316855f, 0.967104150478033f, - 0.968521053383593f, 0.969891093506458f, 0.971215202244581f, 0.972494315968637f, - 0.973729375078655f, 0.974921323070827f, 0.976071105615721f, 0.977179669649101f, - 0.978247962476515f, 0.979276930892814f, 0.980267520317711f, 0.981220673948460f, - 0.982137331930712f, 0.983018430548546f, 0.983864901434662f, 0.984677670801652f, - 0.985457658695232f, 0.986205778270287f, 0.986922935090503f, 0.987610026452330f, - 0.988267940733967f, 0.988897556770000f, 0.989499743252276f, 0.990075358157522f, - 0.990625248202194f, 0.991150248324956f, 0.991651181197124f, 0.992128856761388f, - 0.992584071799021f, 0.993017609525750f, 0.993430239216404f, 0.993822715858368f, - 0.994195779833855f, 0.994550156630899f, 0.994886556582961f, 0.995205674636936f, - 0.995508190149341f, 0.995794766710354f, 0.996066051995373f, 0.996322677643671f, - 0.996565259163689f, 0.996794395864463f, 0.997010670812624f, 0.997214650814370f, - 0.997406886421766f, 0.997587911962687f, 0.997758245593683f, 0.997918389375006f, - 0.998068829367008f, 0.998210035747091f, 0.998342462946368f, 0.998466549805146f, - 0.998582719746365f, 0.998691380966053f, 0.998792926639904f, 0.998887735145004f, - 0.998976170295797f, 0.999058581593303f, 0.999135304486653f, 0.999206660645980f, - 0.999272958245696f, 0.999334492257230f, 0.999391544750254f, 0.999444385201492f, - 0.999493270810174f, 0.999538446819229f, 0.999580146841343f, 0.999618593188994f, - 0.999653997207632f, 0.999686559611161f, 0.999716470818948f, 0.999743911293550f, - 0.999769051878447f, 0.999792054135046f, 0.999813070678259f, 0.999832245510030f, - 0.999849714350153f, 0.999865604963813f, 0.999880037485284f, 0.999893124737258f, - 0.999904972545323f, 0.999915680047131f, 0.999925339995826f, 0.999934039057369f, - 0.999941858101379f, 0.999948872485197f, 0.999955152330868f, 0.999960762794806f, - 0.999965764329904f, 0.999970212939921f, 0.999974160425965f, 0.999977654624967f, - 0.999980739640031f, 0.999983456062595f, 0.999985841186357f, 0.999987929212949f, - 0.999989751449364f, 0.999991336497160f, 0.999992710433503f, 0.999993896984110f, - 0.999994917688186f, 0.999995792055471f, 0.999996537715509f, 0.999997170559301f, - 0.999997704873475f, 0.999998153467165f, 0.999998527791754f, 0.999998838053703f, - 0.999999093320636f, 0.999999301620911f, 0.999999470036880f, 0.999999604792064f, - 0.999999711332472f, 0.999999794402277f, 0.999999858114104f, 0.999999906014144f, - 0.999999941142332f, 0.999999966087832f, 0.999999983040042f, 0.999999993835372f -}; - -const float ivas_lfe_window_coeff_32k[IVAS_LFE_FADE_LEN_32K] = -{ - 0.000135992220705702f, 0.000243900754874608f, 0.000366502488193403f, 0.000507754555407233f, - 0.000670037413867230f, 0.000855400185342017f, 0.00106582120537505f, 0.00130328810233523f, - 0.00156982797844358f, 0.00186752014891622f, 0.00219850171292337f, 0.00256496978060437f, - 0.00296918195815542f, 0.00341345582581521f, 0.00390016777110998f, 0.00443175136707306f, - 0.00501069540002978f, 0.00563954160739932f, 0.00632088216212532f, 0.00705735692705637f, - 0.00785165049501826f, 0.00870648902594829f, 0.00962463688994814f, 0.0106088931237052f, - 0.0116620877070005f, 0.0127870776657112f, 0.0139867430076699f, 0.0152639824978695f, - 0.0166217092797368f, 0.0180628463495039f, 0.0195903218910554f, 0.0212070644790028f, - 0.0229159981581294f, 0.0247200374077382f, 0.0266220819998311f, 0.0286250117604275f, - 0.0307316812437090f, 0.0329449143290351f, 0.0352674987512187f, 0.0377021805747777f, - 0.0402516586231834f, 0.0429185788744125f, 0.0457055288343670f, 0.0486150318999676f, - 0.0516495417239329f, 0.0548114365934440f, 0.0581030138350493f, 0.0615264842582949f, - 0.0650839666506623f, 0.0687774823364692f, 0.0726089498124248f, 0.0765801794725421f, - 0.0806928684350862f, 0.0849485954841849f, 0.0893488161386407f, 0.0938948578603667f, - 0.0985879154147218f, 0.103429046394834f, 0.108419166921795f, 0.113559047532359f, - 0.118849309265507f, 0.124290419958929f, 0.129882690766145f, 0.135626272904605f, - 0.141521154644746f, 0.147567158549505f, 0.153763938973404f, 0.160110979829776f, - 0.166607592634260f, 0.173252914832108f, 0.180045908416344f, 0.186985358843200f, - 0.194069874250690f, 0.201297884985540f, 0.208667643443083f, 0.216177224224055f, - 0.223824524611575f, 0.231607265370904f, 0.239522991873889f, 0.247569075549288f, - 0.255742715659461f, 0.264040941403189f, 0.272460614343670f, 0.280998431159973f, - 0.289650926719540f, 0.298414477468569f, 0.307285305136374f, 0.316259480749104f, - 0.325332928947464f, 0.334501432602363f, 0.343760637721723f, 0.353106058640944f, - 0.362533083488876f, 0.372036979920440f, 0.381612901106401f, 0.391255891970138f, - 0.400960895660650f, 0.410722760250415f, 0.420536245646151f, 0.430396030699960f, - 0.440296720507817f, 0.450232853881834f, 0.460198910982274f, 0.470189321094825f, - 0.480198470538230f, 0.490220710686965f, 0.500250366093333f, 0.510281742692964f, - 0.520309136077485f, 0.530326839817815f, 0.540329153821353f, 0.550310392706136f, - 0.560264894174896f, 0.570187027371852f, 0.580071201204973f, 0.589911872616473f, - 0.599703554784248f, 0.609440825237056f, 0.619118333866323f, 0.628730810817558f, - 0.638273074244583f, 0.647740037909930f, 0.657126718615052f, 0.666428243444252f, - 0.675639856806586f, 0.684756927260328f, 0.693774954105018f, 0.702689573726534f, - 0.711496565681117f, 0.720191858504788f, 0.728771535235148f, 0.737231838633124f, - 0.745569176092876f, 0.753780124228688f, 0.761861433128389f, 0.769810030263551f, - 0.777623024047447f, 0.785297707032555f, 0.792831558740175f, 0.800222248115570f, - 0.807467635602894f, 0.814565774835047f, 0.821514913934526f, 0.828313496422214f, - 0.834960161732055f, 0.841453745330485f, 0.847793278440476f, 0.853977987371046f, - 0.860007292454100f, 0.865880806591466f, 0.871598333416011f, 0.877159865071782f, - 0.882565579619094f, 0.887815838071573f, 0.892911181073134f, 0.897852325223955f, - 0.902640159065461f, 0.907275738735386f, 0.911760283304927f, 0.916095169810981f, - 0.920281927997422f, 0.924322234780251f, 0.928217908452363f, 0.931970902644524f, - 0.935583300059946f, 0.939057306000627f, 0.942395241704333f, 0.945599537511766f, - 0.948672725884068f, 0.951617434291347f, 0.954436377993401f, 0.957132352734204f, - 0.959708227372067f, 0.962166936467612f, 0.964511472851888f, 0.966744880197007f, - 0.968870245611698f, 0.970890692284040f, 0.972809372193449f, 0.974629458913696f, - 0.976354140528315f, 0.977986612679290f, 0.979530071769289f, 0.980987708337022f, - 0.982362700624510f, 0.983658208354169f, 0.984877366732620f, 0.986023280697072f, - 0.987099019418999f, 0.988107611078563f, 0.989052037921982f, 0.989935231612664f, - 0.990760068885503f, 0.991529367512303f, 0.992245882584772f, 0.992912303120025f, - 0.993531248991970f, 0.994105268190439f, 0.994636834408346f, 0.995128344955654f, - 0.995582118997414f, 0.996000396111680f, 0.996385335161686f, 0.996739013475302f, - 0.997063426323498f, 0.997360486688307f, 0.997632025309661f, 0.997879790999405f, - 0.998105451209848f, 0.998310592843372f, 0.998496723288846f, 0.998665271669997f, - 0.998817590290322f, 0.998954956258775f, 0.999078573280101f, 0.999189573593561f, - 0.999289020043705f, 0.999377908266854f, 0.999457168977167f, 0.999527670336312f, - 0.999590220391194f, 0.999645569564531f, 0.999694413183629f, 0.999737394033262f, - 0.999775104919193f, 0.999808091229614f, 0.999836853482484f, 0.999861849847578f, - 0.999883498632868f, 0.999902180725714f, 0.999918241980199f, 0.999931995542854f, - 0.999943724109857f, 0.999953682109695f, 0.999962097806132f, 0.999969175317172f, - 0.999975096546511f, 0.999980023024807f, 0.999984097658787f, 0.999987446387008f, - 0.999990179741692f, 0.999992394316756f, 0.999994174142692f, 0.999995591969534f, - 0.999996710459602f, 0.999997583292189f, 0.999998256182726f, 0.999998767819300f, - 0.999999150719701f, 0.999999432012418f, 0.999999634145194f, 0.999999775524907f, - 0.999999871092647f, 0.999999932837961f, 0.999999970256211f, 0.999999990753058f -}; - -const float ivas_lfe_window_coeff_16k[IVAS_LFE_FADE_LEN_16K] = -{ - 0.000192322041967661f, 0.000432042541451336f, 0.000754275578824202f, 0.00117365342860051f, - 0.00170559736282027f, 0.00236656267363075f, 0.00317404503675108f, 0.00414654286875000f, - 0.00530350017263264f, 0.00666523498873026f, 0.00825285493787745f, 0.0100881605116261f, - 0.0121935365995684f, 0.0145918327721377f, 0.0173062329286553f, 0.0203601150332032f, - 0.0237769017796244f, 0.0275799031448139f, 0.0317921519028702f, 0.0364362332793203f, - 0.0415341100227591f, 0.0471069442593880f, 0.0531749175728265f, 0.0597570508160612f, - 0.0668710252134883f, 0.0745330063478375f, 0.0827574726486089f, 0.0915570500049407f, - 0.100942354116142f, 0.110921842167215f, 0.121501675374497f, 0.132685593888120f, - 0.144474805463665f, 0.156867889225514f, 0.169860715739713f, 0.183446384495299f, - 0.197615179761091f, 0.212354545640879f, 0.227649080995091f, 0.243480554732640f, - 0.259827941804377f, 0.276667480050824f, 0.293972747873422f, 0.311714762512102f, - 0.329862098524320f, 0.348381025873702f, 0.367235666851846f, 0.386388170876560f, - 0.405798906035553f, 0.425426666078274f, 0.445228891401677f, 0.465161902430052f, - 0.485181143655975f, 0.505241436490520f, 0.525297238967270f, 0.545302910257632f, - 0.565212977885414f, 0.584982405477527f, 0.604566858855629f, 0.623922968261127f, - 0.643008584513597f, 0.661783026930517f, 0.680207320884341f, 0.698244422941288f, - 0.715859431614468f, 0.733019781871777f, 0.749695421665815f, 0.765858968898205f, - 0.781485847393429f, 0.796554400636541f, 0.811045982224021f, 0.824945022186269f, - 0.838239068562518f, 0.850918803842860f, 0.862978036135913f, 0.874413665172658f, - 0.885225623515076f, 0.895416793600184f, 0.904992901513335f, 0.913962388646463f, - 0.922336262654064f, 0.930127929368794f, 0.937353007575688f, 0.944029128765173f, - 0.950175724185808f, 0.955813801693484f, 0.960965715039994f, 0.965654928355726f, - 0.969905778654342f, 0.973743239217655f, 0.977192686702912f, 0.980279674750013f, - 0.983029716751026f, 0.985468080278805f, 0.987619595456638f, 0.989508479289711f, - 0.991158177676277f, 0.992591226478046f, 0.993829132663272f, 0.994892276151289f, - 0.995799832594078f, 0.996569716939470f, 0.997218547242656f, 0.997761627838482f, - 0.998212950666223f, 0.998585213259802f, 0.998889851686633f, 0.999137086542491f, - 0.999335979990921f, 0.999494501774465f, 0.999619602119988f, 0.999717289508270f, - 0.999792711373630f, 0.999850235936272f, 0.999893533540622f, 0.999925656069088f, - 0.999949113214013f, 0.999965944612802f, 0.999977787074566f, 0.999985936344066f, - 0.999991403054165f, 0.999994962706365f, 0.999997199686635f, 0.999998545467760f, - 0.999999311268578f, 0.999999715534135f, 0.999999906669617f, 0.999999981506116f -}; - -const float ivas_lpf_4_butter_16k_sos[IVAS_BIQUAD_FILT_LEN << 2] = -{ - 3.97464794223146e-07f, 7.94929601777927e-07f, 3.97464788468481e-07f, 1.f, - -1.90746797905194f, 0.909956295365785f, 1.f, 1.99999996645833f, - 1.00000001447843f, 1.f, -1.95913666348268f, 0.961692382252710f -}; - -const float ivas_lpf_4_butter_32k_sos[IVAS_BIQUAD_FILT_LEN << 2] = -{ - 2.56674586654460e-08f, 5.13349181918215e-08f, 2.56674582938215e-08f, 1, - -1.95329015717623f, 0.953926661219383f, 1, 1.99999996645833f, - 1.00000001447843f, 1, -1.98000953138860f, 0.980654742275836f -}; - -const float ivas_lpf_4_butter_48k_sos[IVAS_BIQUAD_FILT_LEN << 2] = -{ - 5.12617881476274e-09f, 1.02523584294987e-08f, 5.12617879059970e-09f, - 1.0, -1.96875982668433f, 0.969044914826862f, 1.f , 1.99999984394358f, - 1.00000000471366f, 1.f , -1.98677297369091f, 0.987060670205863f -}; - -const float ivas_lpf_2_butter_16k[IVAS_BIQUAD_FILT_LEN << 1] = -{ - 0.000628720643081143f, 0.00125744128616229f, 0.000628720643081143f, 1.f, -1.92783286977036f, 0.930347752342683f -}; - -const float ivas_lpf_2_butter_32k[IVAS_BIQUAD_FILT_LEN << 1] = -{ - 0.000159990787823749f, 0.000319981575647499f, 0.000159990787823749f, 1.f, -1.96390539174033f, 0.964545354891623f -}; - -const float ivas_lpf_2_butter_48k[IVAS_BIQUAD_FILT_LEN << 1] = -{ - 7.15317998432330e-05f, 0.000143063599686466f, 7.15317998432330e-05f, 1.f, -1.97593552482925f, 0.976221652028620f -}; -#endif const ivas_lfe_freq_models ivas_str_lfe_freq_models = { @@ -3768,970 +2639,7 @@ const Word16 ivas_lfe_num_dct_pass_bins_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 8 const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP] = { 1, 0 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_lfe_lpf_delay[2] = { 0.00175f, 0.0035f }; -#endif const Word16 ivas_lfe_lpf_delay_Q15[2] = { 57, 114 }; -#ifndef IVAS_FLOAT_FIXED -const float hamm_lfe_plc[LFE_PLC_LENANA / 2] = -{ - 0.08000000000000002f, 0.08015895227847719f, 0.08063569926248770f, 0.08142991147368656f, 0.08254104003450596f, 0.08396831704748331f, 0.08571075612595230f, 0.08776715307573196f, - 0.09013608672734141f, 0.09281591991816535f, 0.09580480062389246f, 0.09910066323844335f, 0.10270123000150438f, 0.10660401257268071f, 0.11080631375118072f, 0.11530522933984272f, - 0.12009765015221685f, 0.12518026416131367f, 0.13054955878853602f, 0.13620182333121073f, 0.14213315152704381f, 0.14833944425372619f, 0.15481641236182375f, 0.16155957963899570f, - 0.16856428590349043f, 0.17582569022478273f, 0.18333877426912554f, 0.19109834576770490f, 0.19909904210500018f, 0.20733533402487142f, 0.21580152945181053f, 0.22449177742471671f, - 0.23340007214047787f, 0.24252025710456171f, 0.25184602938575001f, 0.26137094397207467f, 0.27108841822494550f, 0.28099173642839037f, 0.29107405443026624f, 0.30132840437223085f, - 0.31174769950520753f, 0.32232473908701620f, 0.33305221335878232f, 0.34392270859668939f, 0.35492871223557998f, 0.36606261806086549f, 0.37731673146515798f, 0.38868327476598852f, - 0.40015439258093899f, 0.41172215725647360f, 0.42337857434671339f, 0.43511558813837425f, 0.44692508721804453f, 0.45879891007795709f, 0.47072885075638249f, 0.48270666450874267f, - 0.49472407350552849f, 0.50677277255308162f, 0.51884443483328757f, 0.53093071765821398f, 0.54302326823571601f, 0.55511372944202464f, 0.56719374559732838f, 0.57925496824035816f, - 0.59128906189798180f, 0.60328770984582458f, 0.61524261985593010f, 0.62714552992749328f, 0.63898821399670414f, 0.65076248762175315f, 0.66246021363907504f, 0.67407330778691554f, - 0.68559374429233988f, 0.69701356141781945f, 0.70832486696356345f, 0.71951984372179334f, 0.73059075487919101f, 0.74152994936378558f, 0.75232986713258543f, 0.76298304439630038f, - 0.77348211877754336f, 0.78381983439894576f, 0.79398904689767136f, 0.80398272836286389f, 0.81379397219261318f, 0.82341599786708708f, 0.83284215563452701f, 0.84206593110687011f, - 0.85108094976182280f, 0.85988098134827329f, 0.86845994419199846f, 0.87681190939868969f, 0.88493110495139349f, 0.89281191969953333f, 0.90044890723675941f, 0.90783678966494241f, - 0.91497046124171255f, 0.92184499190902180f, 0.92845563070029180f, 0.93479780902379184f, 0.94086714381997805f, 0.94665944059061280f, 0.95217069629756890f, 0.95739710212931617f, - 0.96233504613317988f, 0.96698111571154954f, 0.97133209998031445f, 0.97538499198789563f, 0.97913699079334116f, 0.98258550340204664f, 0.98572814655776630f, 0.98856274838967395f, - 0.99108734991333569f, 0.99330020638455863f, 0.99519978850517732f, 0.99678478347994692f, 0.99805409592381300f, 0.99900684861892730f, 0.99964238312089115f, 0.99996026021380402f -}; -const double d_hamm_lfe_plc[LFE_PLC_LENANA / 2] = -{ - 0.08000000000000002, 0.08015895227847719, 0.08063569926248770, 0.08142991147368656, 0.08254104003450596, 0.08396831704748331, 0.08571075612595230, 0.08776715307573196, - 0.09013608672734141, 0.09281591991816535, 0.09580480062389246, 0.09910066323844335, 0.10270123000150438, 0.10660401257268071, 0.11080631375118072, 0.11530522933984272, - 0.12009765015221685, 0.12518026416131367, 0.13054955878853602, 0.13620182333121073, 0.14213315152704381, 0.14833944425372619, 0.15481641236182375, 0.16155957963899570, - 0.16856428590349043, 0.17582569022478273, 0.18333877426912554, 0.19109834576770490, 0.19909904210500018, 0.20733533402487142, 0.21580152945181053, 0.22449177742471671, - 0.23340007214047787, 0.24252025710456171, 0.25184602938575001, 0.26137094397207467, 0.27108841822494550, 0.28099173642839037, 0.29107405443026624, 0.30132840437223085, - 0.31174769950520753, 0.32232473908701620, 0.33305221335878232, 0.34392270859668939, 0.35492871223557998, 0.36606261806086549, 0.37731673146515798, 0.38868327476598852, - 0.40015439258093899, 0.41172215725647360, 0.42337857434671339, 0.43511558813837425, 0.44692508721804453, 0.45879891007795709, 0.47072885075638249, 0.48270666450874267, - 0.49472407350552849, 0.50677277255308162, 0.51884443483328757, 0.53093071765821398, 0.54302326823571601, 0.55511372944202464, 0.56719374559732838, 0.57925496824035816, - 0.59128906189798180, 0.60328770984582458, 0.61524261985593010, 0.62714552992749328, 0.63898821399670414, 0.65076248762175315, 0.66246021363907504, 0.67407330778691554, - 0.68559374429233988, 0.69701356141781945, 0.70832486696356345, 0.71951984372179334, 0.73059075487919101, 0.74152994936378558, 0.75232986713258543, 0.76298304439630038, - 0.77348211877754336, 0.78381983439894576, 0.79398904689767136, 0.80398272836286389, 0.81379397219261318, 0.82341599786708708, 0.83284215563452701, 0.84206593110687011, - 0.85108094976182280, 0.85988098134827329, 0.86845994419199846, 0.87681190939868969, 0.88493110495139349, 0.89281191969953333, 0.90044890723675941, 0.90783678966494241, - 0.91497046124171255, 0.92184499190902180, 0.92845563070029180, 0.93479780902379184, 0.94086714381997805, 0.94665944059061280, 0.95217069629756890, 0.95739710212931617, - 0.96233504613317988, 0.96698111571154954, 0.97133209998031445, 0.97538499198789563, 0.97913699079334116, 0.98258550340204664, 0.98572814655776630, 0.98856274838967395, - 0.99108734991333569, 0.99330020638455863, 0.99519978850517732, 0.99678478347994692, 0.99805409592381300, 0.99900684861892730, 0.99964238312089115, 0.99996026021380402 -}; -#endif -/*------------------------------------------------------------------------------------------* - * MDFT/iMDFT ROM tables - *------------------------------------------------------------------------------------------*/ - -const float ivas_mdft_coeff_cos_twid_960[IVAS_960_PT_LEN + 1] = -{ - 1.00000000000000f, 0.999998661349528f, 0.999994645401697f, 0.999987952167257f, - 0.999978581664129f, 0.999966533917401f, 0.999951808959328f, 0.999934406829333f, - 0.999914327574007f, 0.999891571247108f, 0.999866137909562f, 0.999838027629461f, - 0.999807240482065f, 0.999773776549800f, 0.999737635922260f, 0.999698818696204f, - 0.999657324975557f, 0.999613154871411f, 0.999566308502021f, 0.999516785992811f, - 0.999464587476366f, 0.999409713092437f, 0.999352162987941f, 0.999291937316955f, - 0.999229036240723f, 0.999163459927649f, 0.999095208553300f, 0.999024282300407f, - 0.998950681358860f, 0.998874405925711f, 0.998795456205172f, 0.998713832408616f, - 0.998629534754574f, 0.998542563468736f, 0.998452918783950f, 0.998360600940223f, - 0.998265610184716f, 0.998167946771749f, 0.998067610962796f, 0.997964603026487f, - 0.997858923238604f, 0.997750571882084f, 0.997639549247016f, 0.997525855630641f, - 0.997409491337352f, 0.997290456678690f, 0.997168751973348f, 0.997044377547164f, - 0.996917333733128f, 0.996787620871373f, 0.996655239309180f, 0.996520189400975f, - 0.996382471508325f, 0.996242085999945f, 0.996099033251687f, 0.995953313646548f, - 0.995804927574662f, 0.995653875433303f, 0.995500157626885f, 0.995343774566954f, - 0.995184726672197f, 0.995023014368432f, 0.994858638088611f, 0.994691598272820f, - 0.994521895368273f, 0.994349529829318f, 0.994174502117428f, 0.993996812701206f, - 0.993816462056378f, 0.993633450665799f, 0.993447779019444f, 0.993259447614414f, - 0.993068456954926f, 0.992874807552322f, 0.992678499925058f, 0.992479534598710f, - 0.992277912105967f, 0.992073632986633f, 0.991866697787626f, 0.991657107062973f, - 0.991444861373810f, 0.991229961288385f, 0.991012407382049f, 0.990792200237260f, - 0.990569340443577f, 0.990343828597665f, 0.990115665303286f, 0.989884851171301f, - 0.989651386819670f, 0.989415272873448f, 0.989176509964781f, 0.988935098732911f, - 0.988691039824167f, 0.988444333891970f, 0.988194981596825f, 0.987942983606322f, - 0.987688340595138f, 0.987431053245027f, 0.987171122244825f, 0.986908548290446f, - 0.986643332084879f, 0.986375474338188f, 0.986104975767509f, 0.985831837097047f, - 0.985556059058078f, 0.985277642388941f, 0.984996587835043f, 0.984712896148850f, - 0.984426568089892f, 0.984137604424753f, 0.983846005927077f, 0.983551773377562f, - 0.983254907563955f, 0.982955409281056f, 0.982653279330712f, 0.982348518521816f, - 0.982041127670304f, 0.981731107599154f, 0.981418459138384f, 0.981103183125046f, - 0.980785280403230f, 0.980464751824058f, 0.980141598245680f, 0.979815820533276f, - 0.979487419559051f, 0.979156396202234f, 0.978822751349072f, 0.978486485892835f, - 0.978147600733806f, 0.977806096779282f, 0.977461974943572f, 0.977115236147994f, - 0.976765881320872f, 0.976413911397535f, 0.976059327320311f, 0.975702130038529f, - 0.975342320508513f, 0.974979899693582f, 0.974614868564045f, 0.974247228097201f, - 0.973876979277334f, 0.973504123095711f, 0.973128660550580f, 0.972750592647168f, - 0.972369920397677f, 0.971986644821279f, 0.971600766944121f, 0.971212287799312f, - 0.970821208426928f, 0.970427529874007f, 0.970031253194544f, 0.969632379449492f, - 0.969230909706754f, 0.968826845041188f, 0.968420186534595f, 0.968010935275723f, - 0.967599092360260f, 0.967184658890834f, 0.966767635977008f, 0.966348024735277f, - 0.965925826289068f, 0.965501041768733f, 0.965073672311547f, 0.964643719061708f, - 0.964211183170329f, 0.963776065795440f, 0.963338368101980f, 0.962898091261798f, - 0.962455236453647f, 0.962009804863184f, 0.961561797682962f, 0.961111216112432f, - 0.960658061357935f, 0.960202334632705f, 0.959744037156857f, 0.959283170157394f, - 0.958819734868193f, 0.958353732530011f, 0.957885164390477f, 0.957414031704088f, - 0.956940335732209f, 0.956464077743065f, 0.955985259011744f, 0.955503880820186f, - 0.955019944457187f, 0.954533451218389f, 0.954044402406280f, 0.953552799330194f, - 0.953058643306297f, 0.952561935657595f, 0.952062677713924f, 0.951560870811948f, - 0.951056516295154f, 0.950549615513851f, 0.950040169825165f, 0.949528180593037f, - 0.949013649188214f, 0.948496576988253f, 0.947976965377510f, 0.947454815747144f, - 0.946930129495106f, 0.946402908026138f, 0.945873152751771f, 0.945340865090320f, - 0.944806046466878f, 0.944268698313317f, 0.943728822068278f, 0.943186419177173f, - 0.942641491092178f, 0.942094039272230f, 0.941544065183021f, 0.940991570296997f, - 0.940436556093355f, 0.939879024058033f, 0.939318975683713f, 0.938756412469813f, - 0.938191335922484f, 0.937623747554606f, 0.937053648885784f, 0.936481041442343f, - 0.935905926757326f, 0.935328306370488f, 0.934748181828292f, 0.934165554683908f, - 0.933580426497202f, 0.932992798834739f, 0.932402673269775f, 0.931810051382254f, - 0.931214934758804f, 0.930617324992729f, 0.930017223684012f, 0.929414632439304f, - 0.928809552871924f, 0.928201986601852f, 0.927591935255724f, 0.926979400466833f, - 0.926364383875118f, 0.925746887127164f, 0.925126911876195f, 0.924504459782072f, - 0.923879532511287f, 0.923252131736957f, 0.922622259138823f, 0.921989916403245f, - 0.921355105223193f, 0.920717827298248f, 0.920078084334595f, 0.919435878045019f, - 0.918791210148898f, 0.918144082372204f, 0.917494496447491f, 0.916842454113897f, - 0.916187957117136f, 0.915531007209492f, 0.914871606149819f, 0.914209755703531f, - 0.913545457642601f, 0.912878713745555f, 0.912209525797468f, 0.911537895589956f, - 0.910863824921176f, 0.910187315595818f, 0.909508369425101f, 0.908826988226768f, - 0.908143173825081f, 0.907456928050819f, 0.906768252741266f, 0.906077149740215f, - 0.905383620897955f, 0.904687668071273f, 0.903989293123443f, 0.903288497924226f, - 0.902585284349861f, 0.901879654283062f, 0.901171609613013f, 0.900461152235364f, - 0.899748284052222f, 0.899033006972149f, 0.898315322910159f, 0.897595233787707f, - 0.896872741532688f, 0.896147848079432f, 0.895420555368697f, 0.894690865347664f, - 0.893958779969932f, 0.893224301195515f, 0.892487430990834f, 0.891748171328711f, - 0.891006524188368f, 0.890262491555416f, 0.889516075421856f, 0.888767277786068f, - 0.888016100652807f, 0.887262546033203f, 0.886506615944746f, 0.885748312411291f, - 0.884987637463042f, 0.884224593136556f, 0.883459181474733f, 0.882691404526809f, - 0.881921264348355f, 0.881148763001268f, 0.880373902553765f, 0.879596685080383f, - 0.878817112661965f, 0.878035187385663f, 0.877250911344924f, 0.876464286639493f, - 0.875675315375400f, 0.874883999664958f, 0.874090341626759f, 0.873294343385663f, - 0.872496007072797f, 0.871695334825548f, 0.870892328787557f, 0.870086991108712f, - 0.869279323945144f, 0.868469329459222f, 0.867657009819544f, 0.866842367200935f, - 0.866025403784439f, 0.865206121757311f, 0.864384523313017f, 0.863560610651224f, - 0.862734385977792f, 0.861905851504774f, 0.861075009450407f, 0.860241862039105f, - 0.859406411501453f, 0.858568660074204f, 0.857728610000272f, 0.856886263528723f, - 0.856041622914771f, 0.855194690419775f, 0.854345468311227f, 0.853493958862751f, - 0.852640164354092f, 0.851784087071117f, 0.850925729305802f, 0.850065093356229f, - 0.849202181526579f, 0.848336996127127f, 0.847469539474235f, 0.846599813890344f, - 0.845727821703973f, 0.844853565249707f, 0.843977046868193f, 0.843098268906136f, - 0.842217233716287f, 0.841333943657443f, 0.840448401094438f, 0.839560608398136f, - 0.838670567945424f, 0.837778282119209f, 0.836883753308409f, 0.835986983907947f, - 0.835087976318743f, 0.834186732947712f, 0.833283256207754f, 0.832377548517748f, - 0.831469612302545f, 0.830559449992965f, 0.829647064025785f, 0.828732456843738f, - 0.827815630895502f, 0.826896588635696f, 0.825975332524873f, 0.825051865029513f, - 0.824126188622016f, 0.823198305780696f, 0.822268218989775f, 0.821335930739376f, - 0.820401443525514f, 0.819464759850093f, 0.818525882220897f, 0.817584813151584f, - 0.816641555161679f, 0.815696110776568f, 0.814748482527489f, 0.813798672951530f, - 0.812846684591615f, 0.811892519996505f, 0.810936181720784f, 0.809977672324859f, - 0.809016994374948f, 0.808054150443073f, 0.807089143107059f, 0.806121974950521f, - 0.805152648562858f, 0.804181166539250f, 0.803207531480645f, 0.802231745993758f, - 0.801253812691061f, 0.800273734190774f, 0.799291513116864f, 0.798307152099032f, - 0.797320653772707f, 0.796332020779044f, 0.795341255764910f, 0.794348361382882f, - 0.793353340291235f, 0.792356195153942f, 0.791356928640660f, 0.790355543426726f, - 0.789352042193150f, 0.788346427626606f, 0.787338702419428f, 0.786328869269598f, - 0.785316930880745f, 0.784302889962131f, 0.783286749228650f, 0.782268511400816f, - 0.781248179204759f, 0.780225755372213f, 0.779201242640517f, 0.778174643752598f, - 0.777145961456971f, 0.776115198507728f, 0.775082357664531f, 0.774047441692607f, - 0.773010453362737f, 0.771971395451250f, 0.770930270740018f, 0.769887082016445f, - 0.768841832073460f, 0.767794523709512f, 0.766745159728562f, 0.765693742940071f, - 0.764640276159000f, 0.763584762205796f, 0.762527203906388f, 0.761467604092177f, - 0.760405965600031f, 0.759342291272276f, 0.758276583956687f, 0.757208846506485f, - 0.756139081780323f, 0.755067292642284f, 0.753993481961869f, 0.752917652613995f, - 0.751839807478977f, 0.750759949442534f, 0.749678081395770f, 0.748594206235171f, - 0.747508326862597f, 0.746420446185274f, 0.745330567115786f, 0.744238692572067f, - 0.743144825477394f, 0.742048968760379f, 0.740951125354959f, 0.739851298200392f, - 0.738749490241246f, 0.737645704427393f, 0.736539943713999f, 0.735432211061519f, - 0.734322509435686f, 0.733210841807505f, 0.732097211153246f, 0.730981620454432f, - 0.729864072697836f, 0.728744570875469f, 0.727623117984575f, 0.726499717027620f, - 0.725374371012288f, 0.724247082951467f, 0.723117855863248f, 0.721986692770910f, - 0.720853596702919f, 0.719718570692913f, 0.718581617779698f, 0.717442741007240f, - 0.716301943424654f, 0.715159228086199f, 0.714014598051268f, 0.712868056384380f, - 0.711719606155171f, 0.710569250438390f, 0.709416992313883f, 0.708262834866593f, - 0.707106781186548f, 0.705948834368849f, 0.704788997513670f, 0.703627273726243f, - 0.702463666116852f, 0.701298177800824f, 0.700130811898524f, 0.698961571535339f, - 0.697790459841680f, 0.696617479952964f, 0.695442635009612f, 0.694265928157036f, - 0.693087362545636f, 0.691906941330786f, 0.690724667672829f, 0.689540544737067f, - 0.688354575693754f, 0.687166763718086f, 0.685977111990193f, 0.684785623695130f, - 0.683592302022871f, 0.682397150168297f, 0.681200171331188f, 0.680001368716218f, - 0.678800745532942f, 0.677598304995789f, 0.676394050324054f, 0.675187984741891f, - 0.673980111478298f, 0.672770433767117f, 0.671558954847018f, 0.670345677961497f, - 0.669130606358858f, 0.667913743292216f, 0.666695092019479f, 0.665474655803342f, - 0.664252437911282f, 0.663028441615542f, 0.661802670193130f, 0.660575126925805f, - 0.659345815100069f, 0.658114738007160f, 0.656881898943041f, 0.655647301208395f, - 0.654410948108610f, 0.653172842953777f, 0.651932989058674f, 0.650691389742765f, - 0.649448048330184f, 0.648202968149730f, 0.646956152534857f, 0.645707604823667f, - 0.644457328358897f, 0.643205326487914f, 0.641951602562703f, 0.640696159939861f, - 0.639439001980585f, 0.638180132050665f, 0.636919553520476f, 0.635657269764965f, - 0.634393284163646f, 0.633127600100588f, 0.631860220964409f, 0.630591150148264f, - 0.629320391049838f, 0.628047947071334f, 0.626773821619470f, 0.625498018105461f, - 0.624220539945018f, 0.622941390558334f, 0.621660573370077f, 0.620378091809381f, - 0.619093949309834f, 0.617808149309472f, 0.616520695250769f, 0.615231590580627f, - 0.613940838750366f, 0.612648443215719f, 0.611354407436817f, 0.610058734878182f, - 0.608761429008721f, 0.607462493301711f, 0.606161931234795f, 0.604859746289968f, - 0.603555941953571f, 0.602250521716282f, 0.600943489073102f, 0.599634847523352f, - 0.598324600570659f, 0.597012751722948f, 0.595699304492433f, 0.594384262395609f, - 0.593067628953237f, 0.591749407690343f, 0.590429602136201f, 0.589108215824328f, - 0.587785252292473f, 0.586460715082607f, 0.585134607740916f, 0.583806933817786f, - 0.582477696867802f, 0.581146900449730f, 0.579814548126514f, 0.578480643465260f, - 0.577145190037234f, 0.575808191417845f, 0.574469651186643f, 0.573129572927301f, - 0.571787960227612f, 0.570444816679478f, 0.569100145878898f, 0.567753951425961f, - 0.566406236924833f, 0.565057005983753f, 0.563706262215017f, 0.562354009234973f, - 0.561000250664010f, 0.559644990126546f, 0.558288231251022f, 0.556929977669890f, - 0.555570233019602f, 0.554209000940606f, 0.552846285077328f, 0.551482089078169f, - 0.550116416595494f, 0.548749271285616f, 0.547380656808797f, 0.546010576829228f, - 0.544639035015027f, 0.543266035038224f, 0.541891580574752f, 0.540515675304440f, - 0.539138322911000f, 0.537759527082020f, 0.536379291508950f, 0.534997619887097f, - 0.533614515915612f, 0.532229983297479f, 0.530844025739510f, 0.529456646952329f, - 0.528067850650368f, 0.526677640551852f, 0.525286020378792f, 0.523892993856974f, - 0.522498564715949f, 0.521102736689023f, 0.519705513513249f, 0.518306898929413f, - 0.516906896682028f, 0.515505510519320f, 0.514102744193222f, 0.512698601459362f, - 0.511293086077052f, 0.509886201809281f, 0.508477952422700f, 0.507068341687617f, - 0.505657373377985f, 0.504245051271389f, 0.502831379149042f, 0.501416360795769f, - 0.500000000000000f, 0.498582300553759f, 0.497163266252654f, 0.495742900895868f, - 0.494321208286145f, 0.492898192229784f, 0.491473856536628f, 0.490048205020053f, - 0.488621241496955f, 0.487192969787746f, 0.485763393716340f, 0.484332517110141f, - 0.482900343800037f, 0.481466877620387f, 0.480032122409011f, 0.478596082007181f, - 0.477158760259609f, 0.475720161014437f, 0.474280288123229f, 0.472839145440959f, - 0.471396736825998f, 0.469953066140108f, 0.468508137248432f, 0.467061954019477f, - 0.465614520325111f, 0.464165840040552f, 0.462715917044350f, 0.461264755218387f, - 0.459812358447860f, 0.458358730621271f, 0.456903875630421f, 0.455447797370393f, - 0.453990499739547f, 0.452531986639508f, 0.451072261975153f, 0.449611329654607f, - 0.448149193589223f, 0.446685857693580f, 0.445221325885468f, 0.443755602085881f, - 0.442288690219001f, 0.440820594212194f, 0.439351317995994f, 0.437880865504095f, - 0.436409240673342f, 0.434936447443717f, 0.433462489758331f, 0.431987371563412f, - 0.430511096808295f, 0.429033669445413f, 0.427555093430282f, 0.426075372721496f, - 0.424594511280713f, 0.423112513072644f, 0.421629382065045f, 0.420145122228703f, - 0.418659737537428f, 0.417173231968043f, 0.415685609500371f, 0.414196874117224f, - 0.412707029804395f, 0.411216080550645f, 0.409724030347695f, 0.408230883190212f, - 0.406736643075800f, 0.405241314004990f, 0.403744899981227f, 0.402247405010863f, - 0.400748833103141f, 0.399249188270190f, 0.397748474527011f, 0.396246695891466f, - 0.394743856384267f, 0.393239960028970f, 0.391735010851956f, 0.390229012882428f, - 0.388721970152396f, 0.387213886696666f, 0.385704766552831f, 0.384194613761262f, - 0.382683432365090f, 0.381171226410203f, 0.379657999945233f, 0.378143757021541f, - 0.376628501693211f, 0.375112238017038f, 0.373594970052516f, 0.372076701861829f, - 0.370557437509836f, 0.369037181064067f, 0.367515936594704f, 0.365993708174577f, - 0.364470499879150f, 0.362946315786509f, 0.361421159977355f, 0.359895036534988f, - 0.358367949545300f, 0.356839903096763f, 0.355310901280416f, 0.353780948189858f, - 0.352250047921234f, 0.350718204573223f, 0.349185422247033f, 0.347651705046382f, - 0.346117057077493f, 0.344581482449081f, 0.343044985272340f, 0.341507569660936f, - 0.339969239730994f, 0.338429999601086f, 0.336889853392220f, 0.335348805227832f, - 0.333806859233771f, 0.332264019538291f, 0.330720290272038f, 0.329175675568039f, - 0.327630179561693f, 0.326083806390759f, 0.324536560195342f, 0.322988445117886f, - 0.321439465303162f, 0.319889624898253f, 0.318338928052550f, 0.316787378917734f, - 0.315234981647770f, 0.313681740398892f, 0.312127659329594f, 0.310572742600619f, - 0.309016994374947f, 0.307460418817785f, 0.305903020096554f, 0.304344802380877f, - 0.302785769842575f, 0.301225926655645f, 0.299665276996257f, 0.298103825042740f, - 0.296541574975571f, 0.294978530977364f, 0.293414697232857f, 0.291850077928904f, - 0.290284677254463f, 0.288718499400580f, 0.287151548560387f, 0.285583828929082f, - 0.284015344703923f, 0.282446100084212f, 0.280876099271292f, 0.279305346468526f, - 0.277733845881292f, 0.276161601716971f, 0.274588618184932f, 0.273014899496527f, - 0.271440449865074f, 0.269865273505849f, 0.268289374636071f, 0.266712757474899f, - 0.265135426243408f, 0.263557385164591f, 0.261978638463337f, 0.260399190366428f, - 0.258819045102521f, 0.257238206902140f, 0.255656679997665f, 0.254074468623318f, - 0.252491577015158f, 0.250908009411060f, 0.249323770050712f, 0.247738863175598f, - 0.246153293028993f, 0.244567063855944f, 0.242980179903264f, 0.241392645419519f, - 0.239804464655017f, 0.238215641861795f, 0.236626181293610f, 0.235036087205927f, - 0.233445363855905f, 0.231854015502391f, 0.230262046405902f, 0.228669460828619f, - 0.227076263034373f, 0.225482457288634f, 0.223888047858498f, 0.222293039012681f, - 0.220697435021501f, 0.219101240156870f, 0.217504458692281f, 0.215907094902801f, - 0.214309153065051f, 0.212710637457203f, 0.211111552358965f, 0.209511902051569f, - 0.207911690817759f, 0.206310922941784f, 0.204709602709380f, 0.203107734407763f, - 0.201505322325617f, 0.199902370753082f, 0.198298883981741f, 0.196694866304610f, - 0.195090322016128f, 0.193485255412143f, 0.191879670789901f, 0.190273572448036f, - 0.188666964686555f, 0.187059851806832f, 0.185452238111591f, 0.183844127904898f, - 0.182235525492147f, 0.180626435180053f, 0.179016861276633f, 0.177406808091201f, - 0.175796279934354f, 0.174185281117962f, 0.172573815955152f, 0.170961888760301f, - 0.169349503849025f, 0.167736665538162f, 0.166123378145765f, 0.164509645991092f, - 0.162895473394589f, 0.161280864677881f, 0.159665824163761f, 0.158050356176180f, - 0.156434465040231f, 0.154818155082141f, 0.153201430629259f, 0.151584296010041f, - 0.149966755554045f, 0.148348813591913f, 0.146730474455362f, 0.145111742477173f, - 0.143492621991180f, 0.141873117332253f, 0.140253232836296f, 0.138632972840227f, - 0.137012341681968f, 0.135391343700438f, 0.133769983235535f, 0.132148264628130f, - 0.130526192220052f, 0.128903770354076f, 0.127281003373913f, 0.125657895624201f, - 0.124034451450485f, 0.122410675199216f, 0.120786571217731f, 0.119162143854244f, - 0.117537397457838f, 0.115912336378446f, 0.114286964966846f, 0.112661287574648f, - 0.111035308554278f, 0.109409032258971f, 0.107782463042760f, 0.106155605260457f, - 0.104528463267653f, 0.102901041420696f, 0.101273344076683f, 0.0996453755934510f, - 0.0980171403295608f, 0.0963886426442880f, 0.0947598868976111f, 0.0931308774501999f, - 0.0915016186634025f, 0.0898721148992351f, 0.0882423705203694f, 0.0866123898901223f, - 0.0849821773724418f, 0.0833517373318973f, 0.0817210741336683f, 0.0800901921435302f, - 0.0784590957278450f, 0.0768277892535488f, 0.0751962770881400f, 0.0735645635996675f, - 0.0719326531567196f, 0.0703005501284112f, 0.0686682588843738f, 0.0670357837947423f, - 0.0654031292301431f, 0.0637702995616845f, 0.0621372991609429f, 0.0605041323999515f, - 0.0588708036511890f, 0.0572373172875686f, 0.0556036776824248f, 0.0539698892095020f, - 0.0523359562429437f, 0.0507018831572809f, 0.0490676743274181f, 0.0474333341286244f, - 0.0457988669365209f, 0.0441642771270675f, 0.0425295690765532f, 0.0408947471615835f, - 0.0392598157590687f, 0.0376247792462120f, 0.0359896420004986f, 0.0343544083996823f, - 0.0327190828217762f, 0.0310836696450389f, 0.0294481732479632f, 0.0278125980092656f, - 0.0261769483078731f, 0.0245412285229125f, 0.0229054430336971f, 0.0212695962197177f, - 0.0196336924606285f, 0.0179977361362357f, 0.0163617316264867f, 0.0147256833114587f, - 0.0130895955713446f, 0.0114534727864437f, 0.00981731933714973f, 0.00818113960393724f, - 0.00654493796735196f, 0.00490871880799808f, 0.00327248650652671f, 0.00163624544362412f, - 0.00000000000000000f -}; - -const float ivas_mdft_coeff_cos_twid_640[IVAS_640_PT_LEN + 1] = -{ - 1.00000000000000f, 0.999996988037278f, 0.999987952167257f, 0.999972892444367f, - 0.999951808959328f, 0.999924701839145f, 0.999891571247108f, 0.999852417382795f, - 0.999807240482065f, 0.999756040817060f, 0.999698818696204f, 0.999635574464198f, - 0.999566308502021f, 0.999491021226926f, 0.999409713092437f, 0.999322384588350f, - 0.999229036240723f, 0.999129668611881f, 0.999024282300407f, 0.998912877941140f, - 0.998795456205172f, 0.998672017799843f, 0.998542563468736f, 0.998407093991674f, - 0.998265610184716f, 0.998118112900149f, 0.997964603026487f, 0.997805081488460f, - 0.997639549247016f, 0.997468007299307f, 0.997290456678690f, 0.997106898454717f, - 0.996917333733128f, 0.996721763655847f, 0.996520189400975f, 0.996312612182778f, - 0.996099033251687f, 0.995879453894286f, 0.995653875433303f, 0.995422299227608f, - 0.995184726672197f, 0.994941159198190f, 0.994691598272820f, 0.994436045399422f, - 0.994174502117428f, 0.993906970002356f, 0.993633450665799f, 0.993353945755417f, - 0.993068456954926f, 0.992776985984091f, 0.992479534598710f, 0.992176104590609f, - 0.991866697787626f, 0.991551316053606f, 0.991229961288385f, 0.990902635427780f, - 0.990569340443577f, 0.990230078343521f, 0.989884851171301f, 0.989533661006540f, - 0.989176509964781f, 0.988813400197476f, 0.988444333891970f, 0.988069313271492f, - 0.987688340595138f, 0.987301418157858f, 0.986908548290446f, 0.986509733359519f, - 0.986104975767509f, 0.985694277952645f, 0.985277642388941f, 0.984855071586178f, - 0.984426568089892f, 0.983992134481354f, 0.983551773377562f, 0.983105487431216f, - 0.982653279330712f, 0.982195151800116f, 0.981731107599154f, 0.981261149523195f, - 0.980785280403230f, 0.980303503105861f, 0.979815820533276f, 0.979322235623241f, - 0.978822751349072f, 0.978317370719628f, 0.977806096779282f, 0.977288932607910f, - 0.976765881320872f, 0.976236946068990f, 0.975702130038529f, 0.975161436451181f, - 0.974614868564045f, 0.974062429669605f, 0.973504123095711f, 0.972939952205560f, - 0.972369920397677f, 0.971794031105889f, 0.971212287799312f, 0.970624693982323f, - 0.970031253194544f, 0.969431969010818f, 0.968826845041188f, 0.968215884930876f, - 0.967599092360260f, 0.966976471044852f, 0.966348024735277f, 0.965713757217249f, - 0.965073672311547f, 0.964427773873996f, 0.963776065795440f, 0.963118552001719f, - 0.962455236453647f, 0.961786123146989f, 0.961111216112432f, 0.960430519415566f, - 0.959744037156857f, 0.959051773471624f, 0.958353732530011f, 0.957649918536965f, - 0.956940335732209f, 0.956224988390216f, 0.955503880820186f, 0.954777017366017f, - 0.954044402406280f, 0.953306040354194f, 0.952561935657595f, 0.951812092798916f, - 0.951056516295154f, 0.950295210697844f, 0.949528180593037f, 0.948755430601263f, - 0.947976965377510f, 0.947192789611197f, 0.946402908026138f, 0.945607325380521f, - 0.944806046466878f, 0.943999076112052f, 0.943186419177173f, 0.942368080557626f, - 0.941544065183021f, 0.940714378017165f, 0.939879024058033f, 0.939038008337734f, - 0.938191335922484f, 0.937339011912575f, 0.936481041442343f, 0.935617429680138f, - 0.934748181828292f, 0.933873303123092f, 0.932992798834739f, 0.932106674267327f, - 0.931214934758804f, 0.930317585680942f, 0.929414632439304f, 0.928506080473216f, - 0.927591935255724f, 0.926672202293573f, 0.925746887127164f, 0.924815995330528f, - 0.923879532511287f, 0.922937504310623f, 0.921989916403245f, 0.921036774497350f, - 0.920078084334595f, 0.919113851690058f, 0.918144082372204f, 0.917168782222852f, - 0.916187957117136f, 0.915201612963474f, 0.914209755703531f, 0.913212391312179f, - 0.912209525797468f, 0.911201165200584f, 0.910187315595818f, 0.909167983090522f, - 0.908143173825081f, 0.907112893972869f, 0.906077149740215f, 0.905035947366364f, - 0.903989293123443f, 0.902937193316419f, 0.901879654283062f, 0.900816682393908f, - 0.899748284052222f, 0.898674465693954f, 0.897595233787707f, 0.896510594834693f, - 0.895420555368697f, 0.894325121956035f, 0.893224301195515f, 0.892118099718401f, - 0.891006524188368f, 0.889889581301463f, 0.888767277786068f, 0.887639620402854f, - 0.886506615944746f, 0.885368271236879f, 0.884224593136556f, 0.883075588533209f, - 0.881921264348355f, 0.880761627535558f, 0.879596685080383f, 0.878426444000357f, - 0.877250911344924f, 0.876070094195407f, 0.874883999664958f, 0.873692634898524f, - 0.872496007072797f, 0.871294123396174f, 0.870086991108712f, 0.868874617482085f, - 0.867657009819544f, 0.866434175455865f, 0.865206121757311f, 0.863972856121587f, - 0.862734385977792f, 0.861490718786378f, 0.860241862039105f, 0.858987823258990f, - 0.857728610000272f, 0.856464229848356f, 0.855194690419775f, 0.853919999362139f, - 0.852640164354092f, 0.851355193105265f, 0.850065093356229f, 0.848769872878448f, - 0.847469539474235f, 0.846164100976699f, 0.844853565249707f, 0.843537940187827f, - 0.842217233716287f, 0.840891453790923f, 0.839560608398136f, 0.838224705554838f, - 0.836883753308409f, 0.835537759736646f, 0.834186732947712f, 0.832830681080094f, - 0.831469612302545f, 0.830103534814044f, 0.828732456843738f, 0.827356386650900f, - 0.825975332524873f, 0.824589302785025f, 0.823198305780696f, 0.821802349891147f, - 0.820401443525514f, 0.818995595122750f, 0.817584813151584f, 0.816169106110459f, - 0.814748482527489f, 0.813322950960406f, 0.811892519996505f, 0.810457198252595f, - 0.809016994374948f, 0.807571917039244f, 0.806121974950521f, 0.804667176843123f, - 0.803207531480645f, 0.801743047655882f, 0.800273734190774f, 0.798799599936358f, - 0.797320653772707f, 0.795836904608884f, 0.794348361382882f, 0.792855033061574f, - 0.791356928640660f, 0.789854057144609f, 0.788346427626606f, 0.786834049168500f, - 0.785316930880745f, 0.783795081902349f, 0.782268511400816f, 0.780737228572095f, - 0.779201242640517f, 0.777660562858748f, 0.776115198507728f, 0.774565158896617f, - 0.773010453362737f, 0.771451091271519f, 0.769887082016445f, 0.768318435018988f, - 0.766745159728562f, 0.765167265622459f, 0.763584762205797f, 0.761997659011457f, - 0.760405965600031f, 0.758809691559762f, 0.757208846506485f, 0.755603440083571f, - 0.753993481961870f, 0.752378981839648f, 0.750759949442534f, 0.749136394523459f, - 0.747508326862597f, 0.745875756267305f, 0.744238692572067f, 0.742597145638433f, - 0.740951125354959f, 0.739300641637149f, 0.737645704427393f, 0.735986323694910f, - 0.734322509435686f, 0.732654271672413f, 0.730981620454432f, 0.729304565857669f, - 0.727623117984575f, 0.725937286964068f, 0.724247082951467f, 0.722552516128436f, - 0.720853596702919f, 0.719150334909079f, 0.717442741007240f, 0.715730825283819f, - 0.714014598051268f, 0.712294069648014f, 0.710569250438390f, 0.708840150812579f, - 0.707106781186548f, 0.705369152001986f, 0.703627273726243f, 0.701881156852263f, - 0.700130811898524f, 0.698376249408973f, 0.696617479952964f, 0.694854514125194f, - 0.693087362545636f, 0.691316035859480f, 0.689540544737067f, 0.687760899873822f, - 0.685977111990193f, 0.684189191831585f, 0.682397150168297f, 0.680600997795453f, - 0.678800745532942f, 0.676996404225349f, 0.675187984741891f, 0.673375497976352f, - 0.671558954847018f, 0.669738366296610f, 0.667913743292216f, 0.666085096825230f, - 0.664252437911282f, 0.662415777590172f, 0.660575126925805f, 0.658730497006124f, - 0.656881898943041f, 0.655029343872374f, 0.653172842953777f, 0.651312407370671f, - 0.649448048330184f, 0.647579777063073f, 0.645707604823667f, 0.643831542889792f, - 0.641951602562703f, 0.640067795167023f, 0.638180132050665f, 0.636288624584773f, - 0.634393284163646f, 0.632494122204673f, 0.630591150148264f, 0.628684379457781f, - 0.626773821619470f, 0.624859488142386f, 0.622941390558334f, 0.621019540421789f, - 0.619093949309834f, 0.617164628822086f, 0.615231590580627f, 0.613294846229936f, - 0.611354407436817f, 0.609410285890327f, 0.607462493301711f, 0.605511041404326f, - 0.603555941953571f, 0.601597206726822f, 0.599634847523352f, 0.597668876164268f, - 0.595699304492433f, 0.593726144372402f, 0.591749407690343f, 0.589769106353971f, - 0.587785252292473f, 0.585797857456439f, 0.583806933817786f, 0.581812493369691f, - 0.579814548126514f, 0.577813110123727f, 0.575808191417845f, 0.573799804086349f, - 0.571787960227612f, 0.569772671960834f, 0.567753951425961f, 0.565731810783613f, - 0.563706262215017f, 0.561677317921925f, 0.559644990126546f, 0.557609291071472f, - 0.555570233019602f, 0.553527828254070f, 0.551482089078169f, 0.549433027815281f, - 0.547380656808797f, 0.545324988422047f, 0.543266035038224f, 0.541203809060310f, - 0.539138322911000f, 0.537069589032630f, 0.534997619887097f, 0.532922427955790f, - 0.530844025739510f, 0.528762425758396f, 0.526677640551852f, 0.524589682678469f, - 0.522498564715949f, 0.520404299261031f, 0.518306898929413f, 0.516206376355680f, - 0.514102744193222f, 0.511996015114163f, 0.509886201809281f, 0.507773316987935f, - 0.505657373377985f, 0.503538383725718f, 0.501416360795769f, 0.499291317371047f, - 0.497163266252654f, 0.495032220259813f, 0.492898192229784f, 0.490761195017794f, - 0.488621241496955f, 0.486478344558187f, 0.484332517110141f, 0.482183772079123f, - 0.480032122409011f, 0.477877581061184f, 0.475720161014437f, 0.473559875264908f, - 0.471396736825998f, 0.469230758728290f, 0.467061954019477f, 0.464890335764274f, - 0.462715917044350f, 0.460538710958240f, 0.458358730621271f, 0.456175989165483f, - 0.453990499739547f, 0.451802275508688f, 0.449611329654607f, 0.447417675375397f, - 0.445221325885468f, 0.443022294415467f, 0.440820594212194f, 0.438616238538528f, - 0.436409240673342f, 0.434199613911428f, 0.431987371563412f, 0.429772526955677f, - 0.427555093430282f, 0.425335084344881f, 0.423112513072644f, 0.420887393002174f, - 0.418659737537428f, 0.416429560097637f, 0.414196874117224f, 0.411961693045722f, - 0.409724030347695f, 0.407483899502658f, 0.405241314004990f, 0.402996287363860f, - 0.400748833103141f, 0.398498964761330f, 0.396246695891466f, 0.393992040061048f, - 0.391735010851956f, 0.389475621860365f, 0.387213886696666f, 0.384949818985382f, - 0.382683432365090f, 0.380414740488332f, 0.378143757021541f, 0.375870495644950f, - 0.373594970052516f, 0.371317193951838f, 0.369037181064066f, 0.366754945123831f, - 0.364470499879150f, 0.362183859091351f, 0.359895036534988f, 0.357604045997758f, - 0.355310901280416f, 0.353015616196696f, 0.350718204573223f, 0.348418680249435f, - 0.346117057077493f, 0.343813348922205f, 0.341507569660936f, 0.339199733183530f, - 0.336889853392220f, 0.334577944201551f, 0.332264019538291f, 0.329948093341349f, - 0.327630179561693f, 0.325310292162263f, 0.322988445117886f, 0.320664652415197f, - 0.318338928052550f, 0.316011286039934f, 0.313681740398892f, 0.311350305162432f, - 0.309016994374947f, 0.306681822092128f, 0.304344802380877f, 0.302005949319228f, - 0.299665276996257f, 0.297322799511999f, 0.294978530977364f, 0.292632485514051f, - 0.290284677254463f, 0.287935120341621f, 0.285583828929082f, 0.283230817180850f, - 0.280876099271292f, 0.278519689385053f, 0.276161601716971f, 0.273801850471989f, - 0.271440449865074f, 0.269077414121127f, 0.266712757474898f, 0.264346494170904f, - 0.261978638463337f, 0.259609204615985f, 0.257238206902140f, 0.254865659604515f, - 0.252491577015158f, 0.250115973435366f, 0.247738863175599f, 0.245360260555389f, - 0.242980179903264f, 0.240598635556650f, 0.238215641861795f, 0.235831213173673f, - 0.233445363855905f, 0.231058108280671f, 0.228669460828619f, 0.226279435888785f, - 0.223888047858498f, 0.221495311143304f, 0.219101240156870f, 0.216705849320900f, - 0.214309153065051f, 0.211911165826842f, 0.209511902051569f, 0.207111376192219f, - 0.204709602709380f, 0.202306596071156f, 0.199902370753082f, 0.197496941238030f, - 0.195090322016128f, 0.192682527584672f, 0.190273572448036f, 0.187863471117585f, - 0.185452238111591f, 0.183039887955141f, 0.180626435180053f, 0.178211894324786f, - 0.175796279934354f, 0.173379606560240f, 0.170961888760301f, 0.168543141098691f, - 0.166123378145766f, 0.163702614477995f, 0.161280864677881f, 0.158858143333862f, - 0.156434465040231f, 0.154009844397046f, 0.151584296010041f, 0.149157834490539f, - 0.146730474455362f, 0.144302230526747f, 0.141873117332253f, 0.139443149504679f, - 0.137012341681968f, 0.134580708507126f, 0.132148264628130f, 0.129715024697841f, - 0.127281003373913f, 0.124846215318711f, 0.122410675199216f, 0.119974397686941f, - 0.117537397457838f, 0.115099689192216f, 0.112661287574648f, 0.110222207293883f, - 0.107782463042759f, 0.105342069518114f, 0.102901041420696f, 0.100459393455077f, - 0.0980171403295608f, 0.0955742967560992f, 0.0931308774501999f, 0.0906868971308382f, - 0.0882423705203696f, 0.0857973123444399f, 0.0833517373318975f, 0.0809056602147037f, - 0.0784590957278450f, 0.0760120586092433f, 0.0735645635996675f, 0.0711166254426455f, - 0.0686682588843738f, 0.0662194786736304f, 0.0637702995616845f, 0.0613207363022087f, - 0.0588708036511890f, 0.0564205163668375f, 0.0539698892095020f, 0.0515189369415775f, - 0.0490676743274181f, 0.0466161161332467f, 0.0441642771270675f, 0.0417121720785753f, - 0.0392598157590687f, 0.0368072229413588f, 0.0343544083996823f, 0.0319013869096110f, - 0.0294481732479634f, 0.0269947821927155f, 0.0245412285229123f, 0.0220875270185784f, - 0.0196336924606283f, 0.0171797396307788f, 0.0147256833114584f, 0.0122715382857199f, - 0.00981731933714973f, 0.00736304124977978f, 0.00490871880799808f, 0.00245436679646048f, - 0.00000000000000000f -}; - -const float ivas_mdft_coeff_cos_twid_320[IVAS_320_PT_LEN + 1] = -{ - 1.00000000000000f, 0.999987952167257f, 0.999951808959328f, 0.999891571247108f, - 0.999807240482065f, 0.999698818696204f, 0.999566308502021f, 0.999409713092437f, - 0.999229036240723f, 0.999024282300407f, 0.998795456205172f, 0.998542563468736f, - 0.998265610184716f, 0.997964603026487f, 0.997639549247016f, 0.997290456678690f, - 0.996917333733128f, 0.996520189400975f, 0.996099033251687f, 0.995653875433303f, - 0.995184726672197f, 0.994691598272820f, 0.994174502117428f, 0.993633450665799f, - 0.993068456954926f, 0.992479534598710f, 0.991866697787626f, 0.991229961288385f, - 0.990569340443577f, 0.989884851171301f, 0.989176509964781f, 0.988444333891970f, - 0.987688340595138f, 0.986908548290446f, 0.986104975767509f, 0.985277642388941f, - 0.984426568089892f, 0.983551773377562f, 0.982653279330712f, 0.981731107599154f, - 0.980785280403230f, 0.979815820533276f, 0.978822751349072f, 0.977806096779282f, - 0.976765881320872f, 0.975702130038529f, 0.974614868564045f, 0.973504123095711f, - 0.972369920397677f, 0.971212287799312f, 0.970031253194544f, 0.968826845041188f, - 0.967599092360260f, 0.966348024735277f, 0.965073672311547f, 0.963776065795440f, - 0.962455236453647f, 0.961111216112432f, 0.959744037156857f, 0.958353732530011f, - 0.956940335732209f, 0.955503880820186f, 0.954044402406280f, 0.952561935657595f, - 0.951056516295154f, 0.949528180593037f, 0.947976965377510f, 0.946402908026138f, - 0.944806046466878f, 0.943186419177173f, 0.941544065183021f, 0.939879024058033f, - 0.938191335922484f, 0.936481041442343f, 0.934748181828292f, 0.932992798834739f, - 0.931214934758804f, 0.929414632439304f, 0.927591935255724f, 0.925746887127164f, - 0.923879532511287f, 0.921989916403245f, 0.920078084334595f, 0.918144082372204f, - 0.916187957117136f, 0.914209755703531f, 0.912209525797468f, 0.910187315595818f, - 0.908143173825081f, 0.906077149740215f, 0.903989293123443f, 0.901879654283062f, - 0.899748284052222f, 0.897595233787707f, 0.895420555368697f, 0.893224301195515f, - 0.891006524188368f, 0.888767277786068f, 0.886506615944746f, 0.884224593136556f, - 0.881921264348355f, 0.879596685080383f, 0.877250911344924f, 0.874883999664958f, - 0.872496007072797f, 0.870086991108712f, 0.867657009819544f, 0.865206121757311f, - 0.862734385977792f, 0.860241862039105f, 0.857728610000272f, 0.855194690419775f, - 0.852640164354092f, 0.850065093356229f, 0.847469539474235f, 0.844853565249707f, - 0.842217233716287f, 0.839560608398136f, 0.836883753308409f, 0.834186732947712f, - 0.831469612302545f, 0.828732456843738f, 0.825975332524873f, 0.823198305780696f, - 0.820401443525514f, 0.817584813151584f, 0.814748482527489f, 0.811892519996505f, - 0.809016994374948f, 0.806121974950521f, 0.803207531480645f, 0.800273734190774f, - 0.797320653772707f, 0.794348361382882f, 0.791356928640660f, 0.788346427626606f, - 0.785316930880745f, 0.782268511400816f, 0.779201242640517f, 0.776115198507728f, - 0.773010453362737f, 0.769887082016445f, 0.766745159728562f, 0.763584762205797f, - 0.760405965600031f, 0.757208846506485f, 0.753993481961870f, 0.750759949442534f, - 0.747508326862597f, 0.744238692572067f, 0.740951125354959f, 0.737645704427393f, - 0.734322509435686f, 0.730981620454432f, 0.727623117984575f, 0.724247082951467f, - 0.720853596702919f, 0.717442741007240f, 0.714014598051268f, 0.710569250438390f, - 0.707106781186548f, 0.703627273726243f, 0.700130811898524f, 0.696617479952964f, - 0.693087362545636f, 0.689540544737067f, 0.685977111990193f, 0.682397150168297f, - 0.678800745532942f, 0.675187984741891f, 0.671558954847018f, 0.667913743292216f, - 0.664252437911282f, 0.660575126925805f, 0.656881898943041f, 0.653172842953777f, - 0.649448048330184f, 0.645707604823667f, 0.641951602562703f, 0.638180132050665f, - 0.634393284163646f, 0.630591150148264f, 0.626773821619470f, 0.622941390558334f, - 0.619093949309834f, 0.615231590580627f, 0.611354407436817f, 0.607462493301711f, - 0.603555941953571f, 0.599634847523352f, 0.595699304492433f, 0.591749407690343f, - 0.587785252292473f, 0.583806933817786f, 0.579814548126514f, 0.575808191417845f, - 0.571787960227612f, 0.567753951425961f, 0.563706262215017f, 0.559644990126546f, - 0.555570233019602f, 0.551482089078169f, 0.547380656808797f, 0.543266035038224f, - 0.539138322911000f, 0.534997619887097f, 0.530844025739510f, 0.526677640551852f, - 0.522498564715949f, 0.518306898929413f, 0.514102744193222f, 0.509886201809281f, - 0.505657373377985f, 0.501416360795769f, 0.497163266252654f, 0.492898192229784f, - 0.488621241496955f, 0.484332517110141f, 0.480032122409011f, 0.475720161014437f, - 0.471396736825998f, 0.467061954019477f, 0.462715917044350f, 0.458358730621271f, - 0.453990499739547f, 0.449611329654607f, 0.445221325885468f, 0.440820594212194f, - 0.436409240673342f, 0.431987371563412f, 0.427555093430282f, 0.423112513072644f, - 0.418659737537428f, 0.414196874117224f, 0.409724030347695f, 0.405241314004990f, - 0.400748833103141f, 0.396246695891466f, 0.391735010851956f, 0.387213886696666f, - 0.382683432365090f, 0.378143757021541f, 0.373594970052516f, 0.369037181064066f, - 0.364470499879150f, 0.359895036534988f, 0.355310901280416f, 0.350718204573223f, - 0.346117057077493f, 0.341507569660936f, 0.336889853392220f, 0.332264019538291f, - 0.327630179561693f, 0.322988445117886f, 0.318338928052550f, 0.313681740398892f, - 0.309016994374947f, 0.304344802380877f, 0.299665276996257f, 0.294978530977364f, - 0.290284677254463f, 0.285583828929082f, 0.280876099271292f, 0.276161601716971f, - 0.271440449865074f, 0.266712757474898f, 0.261978638463337f, 0.257238206902140f, - 0.252491577015158f, 0.247738863175599f, 0.242980179903264f, 0.238215641861795f, - 0.233445363855905f, 0.228669460828619f, 0.223888047858498f, 0.219101240156870f, - 0.214309153065051f, 0.209511902051569f, 0.204709602709380f, 0.199902370753082f, - 0.195090322016128f, 0.190273572448036f, 0.185452238111591f, 0.180626435180053f, - 0.175796279934354f, 0.170961888760301f, 0.166123378145766f, 0.161280864677881f, - 0.156434465040231f, 0.151584296010041f, 0.146730474455362f, 0.141873117332253f, - 0.137012341681968f, 0.132148264628130f, 0.127281003373913f, 0.122410675199216f, - 0.117537397457838f, 0.112661287574648f, 0.107782463042759f, 0.102901041420696f, - 0.0980171403295608f, 0.0931308774501999f, 0.0882423705203696f, 0.0833517373318975f, - 0.0784590957278450f, 0.0735645635996675f, 0.0686682588843738f, 0.0637702995616845f, - 0.0588708036511890f, 0.0539698892095020f, 0.0490676743274181f, 0.0441642771270675f, - 0.0392598157590687f, 0.0343544083996823f, 0.0294481732479634f, 0.0245412285229123f, - 0.0196336924606283f, 0.0147256833114584f, 0.00981731933714973f, 0.00490871880799808f, - 0.0000000000000000f -}; - -const float ivas_mdft_coeff_cos_twid_240[IVAS_240_PT_LEN + 1] = -{ - 1.0000000000f, 0.9999785817f, 0.9999143276f, 0.9998072405f, 0.9996573250f, 0.9994645875f, - 0.9992290362f, 0.9989506814f, 0.9986295348f, 0.9982656102f, 0.9978589232f, 0.9974094913f, - 0.9969173337f, 0.9963824715f, 0.9958049276f, 0.9951847267f, 0.9945218954f, 0.9938164621f, - 0.9930684570f, 0.9922779121f, 0.9914448614f, 0.9905693404f, 0.9896513868f, 0.9886910398f, - 0.9876883406f, 0.9866433321f, 0.9855560591f, 0.9844265681f, 0.9832549076f, 0.9820411277f, - 0.9807852804f, 0.9794874196f, 0.9781476007f, 0.9767658813f, 0.9753423205f, 0.9738769793f, - 0.9723699204f, 0.9708212084f, 0.9692309097f, 0.9675990924f, 0.9659258263f, 0.9642111832f, - 0.9624552365f, 0.9606580614f, 0.9588197349f, 0.9569403357f, 0.9550199445f, 0.9530586433f, - 0.9510565163f, 0.9490136492f, 0.9469301295f, 0.9448060465f, 0.9426414911f, 0.9404365561f, - 0.9381913359f, 0.9359059268f, 0.9335804265f, 0.9312149348f, 0.9288095529f, 0.9263643839f, - 0.9238795325f, 0.9213551052f, 0.9187912101f, 0.9161879571f, 0.9135454576f, 0.9108638249f, - 0.9081431738f, 0.9053836209f, 0.9025852843f, 0.8997482841f, 0.8968727415f, 0.8939587800f, - 0.8910065242f, 0.8880161007f, 0.8849876375f, 0.8819212643f, 0.8788171127f, 0.8756753154f, - 0.8724960071f, 0.8692793239f, 0.8660254038f, 0.8627343860f, 0.8594064115f, 0.8560416229f, - 0.8526401644f, 0.8492021815f, 0.8457278217f, 0.8422172337f, 0.8386705679f, 0.8350879763f, - 0.8314696123f, 0.8278156309f, 0.8241261886f, 0.8204014435f, 0.8166415552f, 0.8128466846f, - 0.8090169944f, 0.8051526486f, 0.8012538127f, 0.7973206538f, 0.7933533403f, 0.7893520422f, - 0.7853169309f, 0.7812481792f, 0.7771459615f, 0.7730104534f, 0.7688418321f, 0.7646402762f, - 0.7604059656f, 0.7561390818f, 0.7518398075f, 0.7475083269f, 0.7431448255f, 0.7387494902f, - 0.7343225094f, 0.7298640727f, 0.7253743710f, 0.7208535967f, 0.7163019434f, 0.7117196062f, - 0.7071067812f, 0.7024636661f, 0.6977904598f, 0.6930873625f, 0.6883545757f, 0.6835923020f, - 0.6788007455f, 0.6739801115f, 0.6691306064f, 0.6642524379f, 0.6593458151f, 0.6544109481f, - 0.6494480483f, 0.6444573284f, 0.6394390020f, 0.6343932842f, 0.6293203910f, 0.6242205399f, - 0.6190939493f, 0.6139408388f, 0.6087614290f, 0.6035559420f, 0.5983246006f, 0.5930676290f, - 0.5877852523f, 0.5824776969f, 0.5771451900f, 0.5717879602f, 0.5664062369f, 0.5610002507f, - 0.5555702330f, 0.5501164166f, 0.5446390350f, 0.5391383229f, 0.5336145159f, 0.5280678507f, - 0.5224985647f, 0.5169068967f, 0.5112930861f, 0.5056573734f, 0.5000000000f, 0.4943212083f, - 0.4886212415f, 0.4829003438f, 0.4771587603f, 0.4713967368f, 0.4656145203f, 0.4598123584f, - 0.4539904997f, 0.4481491936f, 0.4422886902f, 0.4364092407f, 0.4305110968f, 0.4245945113f, - 0.4186597375f, 0.4127070298f, 0.4067366431f, 0.4007488331f, 0.3947438564f, 0.3887219702f, - 0.3826834324f, 0.3766285017f, 0.3705574375f, 0.3644704999f, 0.3583679495f, 0.3522500479f, - 0.3461170571f, 0.3399692397f, 0.3338068592f, 0.3276301796f, 0.3214394653f, 0.3152349816f, - 0.3090169944f, 0.3027857698f, 0.2965415750f, 0.2902846773f, 0.2840153447f, 0.2777338459f, - 0.2714404499f, 0.2651354262f, 0.2588190451f, 0.2524915770f, 0.2461532930f, 0.2398044647f, - 0.2334453639f, 0.2270762630f, 0.2206974350f, 0.2143091531f, 0.2079116908f, 0.2015053223f, - 0.1950903220f, 0.1886669647f, 0.1822355255f, 0.1757962799f, 0.1693495038f, 0.1628954734f, - 0.1564344650f, 0.1499667556f, 0.1434926220f, 0.1370123417f, 0.1305261922f, 0.1240344515f, - 0.1175373975f, 0.1110353086f, 0.1045284633f, 0.0980171403f, 0.0915016187f, 0.0849821774f, - 0.0784590957f, 0.0719326532f, 0.0654031292f, 0.0588708037f, 0.0523359562f, 0.0457988669f, - 0.0392598158f, 0.0327190828f, 0.0261769483f, 0.0196336925f, 0.0130895956f, 0.0065449380f, - 0.000000000f -}; - -const float ivas_mdft_coeff_cos_twid_160[IVAS_160_PT_LEN + 1] = -{ - 1.0000000000f, 0.9999518090f, 0.9998072405f, 0.9995663085f, 0.9992290362f, 0.9987954562f, - 0.9982656102f, 0.9976395492f, 0.9969173337f, 0.9960990333f, 0.9951847267f, 0.9941745021f, - 0.9930684570f, 0.9918666978f, 0.9905693404f, 0.9891765100f, 0.9876883406f, 0.9861049758f, - 0.9844265681f, 0.9826532793f, 0.9807852804f, 0.9788227513f, 0.9767658813f, 0.9746148686f, - 0.9723699204f, 0.9700312532f, 0.9675990924f, 0.9650736723f, 0.9624552365f, 0.9597440372f, - 0.9569403357f, 0.9540444024f, 0.9510565163f, 0.9479769654f, 0.9448060465f, 0.9415440652f, - 0.9381913359f, 0.9347481818f, 0.9312149348f, 0.9275919353f, 0.9238795325f, 0.9200780843f, - 0.9161879571f, 0.9122095258f, 0.9081431738f, 0.9039892931f, 0.8997482841f, 0.8954205554f, - 0.8910065242f, 0.8865066159f, 0.8819212643f, 0.8772509113f, 0.8724960071f, 0.8676570098f, - 0.8627343860f, 0.8577286100f, 0.8526401644f, 0.8474695395f, 0.8422172337f, 0.8368837533f, - 0.8314696123f, 0.8259753325f, 0.8204014435f, 0.8147484825f, 0.8090169944f, 0.8032075315f, - 0.7973206538f, 0.7913569286f, 0.7853169309f, 0.7792012426f, 0.7730104534f, 0.7667451597f, - 0.7604059656f, 0.7539934820f, 0.7475083269f, 0.7409511254f, 0.7343225094f, 0.7276231180f, - 0.7208535967f, 0.7140145981f, 0.7071067812f, 0.7001308119f, 0.6930873625f, 0.6859771120f, - 0.6788007455f, 0.6715589548f, 0.6642524379f, 0.6568818989f, 0.6494480483f, 0.6419516026f, - 0.6343932842f, 0.6267738216f, 0.6190939493f, 0.6113544074f, 0.6035559420f, 0.5956993045f, - 0.5877852523f, 0.5798145481f, 0.5717879602f, 0.5637062622f, 0.5555702330f, 0.5473806568f, - 0.5391383229f, 0.5308440257f, 0.5224985647f, 0.5141027442f, 0.5056573734f, 0.4971632663f, - 0.4886212415f, 0.4800321224f, 0.4713967368f, 0.4627159170f, 0.4539904997f, 0.4452213259f, - 0.4364092407f, 0.4275550934f, 0.4186597375f, 0.4097240303f, 0.4007488331f, 0.3917350109f, - 0.3826834324f, 0.3735949701f, 0.3644704999f, 0.3553109013f, 0.3461170571f, 0.3368898534f, - 0.3276301796f, 0.3183389281f, 0.3090169944f, 0.2996652770f, 0.2902846773f, 0.2808760993f, - 0.2714404499f, 0.2619786385f, 0.2524915770f, 0.2429801799f, 0.2334453639f, 0.2238880479f, - 0.2143091531f, 0.2047096027f, 0.1950903220f, 0.1854522381f, 0.1757962799f, 0.1661233781f, - 0.1564344650f, 0.1467304745f, 0.1370123417f, 0.1272810034f, 0.1175373975f, 0.1077824630f, - 0.0980171403f, 0.0882423705f, 0.0784590957f, 0.0686682589f, 0.0588708037f, 0.0490676743f, - 0.0392598158f, 0.0294481732f, 0.0196336925f, 0.0098173193f, 0.000000000f -}; - -const float ivas_mdft_coeff_cos_twid_80[IVAS_80_PT_LEN + 1] = -{ - 1.0000000000f, 0.9998072405f, 0.9992290362f, 0.9982656102f, 0.9969173337f, 0.9951847267f, - 0.9930684570f, 0.9905693404f, 0.9876883406f, 0.9844265681f, 0.9807852804f, 0.9767658813f, - 0.9723699204f, 0.9675990924f, 0.9624552365f, 0.9569403357f, 0.9510565163f, 0.9448060465f, - 0.9381913359f, 0.9312149348f, 0.9238795325f, 0.9161879571f, 0.9081431738f, 0.8997482841f, - 0.8910065242f, 0.8819212643f, 0.8724960071f, 0.8627343860f, 0.8526401644f, 0.8422172337f, - 0.8314696123f, 0.8204014435f, 0.8090169944f, 0.7973206538f, 0.7853169309f, 0.7730104534f, - 0.7604059656f, 0.7475083269f, 0.7343225094f, 0.7208535967f, 0.7071067812f, 0.6930873625f, - 0.6788007455f, 0.6642524379f, 0.6494480483f, 0.6343932842f, 0.6190939493f, 0.6035559420f, - 0.5877852523f, 0.5717879602f, 0.5555702330f, 0.5391383229f, 0.5224985647f, 0.5056573734f, - 0.4886212415f, 0.4713967368f, 0.4539904997f, 0.4364092407f, 0.4186597375f, 0.4007488331f, - 0.3826834324f, 0.3644704999f, 0.3461170571f, 0.3276301796f, 0.3090169944f, 0.2902846773f, - 0.2714404499f, 0.2524915770f, 0.2334453639f, 0.2143091531f, 0.1950903220f, 0.1757962799f, - 0.1564344650f, 0.1370123417f, 0.1175373975f, 0.0980171403f, 0.0784590957f, 0.0588708037f, - 0.0392598158f, 0.0196336925f, 0.000000000f -}; - -const float ivas_mdft_coeff_cos_twid_40[IVAS_40_PT_LEN + 1] = -{ - 1.0000000000f, 0.9992290362f, 0.9969173337f, 0.9930684570f, 0.9876883406f, 0.9807852804f, - 0.9723699204f, 0.9624552365f, 0.9510565163f, 0.9381913359f, 0.9238795325f, 0.9081431738f, - 0.8910065242f, 0.8724960071f, 0.8526401644f, 0.8314696123f, 0.8090169944f, 0.7853169309f, - 0.7604059656f, 0.7343225094f, 0.7071067812f, 0.6788007455f, 0.6494480483f, 0.6190939493f, - 0.5877852523f, 0.5555702330f, 0.5224985647f, 0.4886212415f, 0.4539904997f, 0.4186597375f, - 0.3826834324f, 0.3461170571f, 0.3090169944f, 0.2714404499f, 0.2334453639f, 0.1950903220f, - 0.1564344650f, 0.1175373975f, 0.0784590957f, 0.0392598158f, 0.000000000f -}; - -#ifndef IVAS_FLOAT_FIXED -const float ivas_sin_twiddle_480[IVAS_480_PT_LEN >> 1] = -{ - -0.000818122995607253f, -0.00736304124977957f, -0.0139076440957708f, -0.0204516511845773f, - -0.0269947821927154f, -0.0335367568342299f, -0.0400772948727007f, -0.0466161161332467f, - -0.0531529405145281f, -0.0596874880007445f, -0.0662194786736303f, -0.0727486327244454f, - -0.0792746704659607f, -0.0857973123444399f, -0.0923162789516138f, -0.0988312910366500f, - -0.105342069518114f, -0.111848335495926f, -0.118349810263305f, -0.124846215318711f, - -0.131337272377774f, -0.137822703385212f, -0.144302230526747f, -0.150775576241001f, - -0.157242463231389f, -0.163702614477995f, -0.170155753249442f, -0.176601603114742f, - -0.183039887955141f, -0.189470331975943f, -0.195892659718330f, -0.202306596071156f, - -0.208711866282735f, -0.215108195972610f, -0.221495311143304f, -0.227872938192063f, - -0.234240803922570f, -0.240598635556650f, -0.246946160745958f, -0.253283107583640f, - -0.259609204615985f, -0.265924180854051f, -0.272227765785273f, -0.278519689385053f, - -0.284799682128326f, -0.291067475001103f, -0.297322799511998f, -0.303565387703730f, - -0.309794972164597f, -0.316011286039934f, -0.322214063043544f, -0.328403037469105f, - -0.334577944201551f, -0.340738518728429f, -0.346884497151231f, -0.353015616196696f, - -0.359131613228090f, -0.365232226256457f, -0.371317193951838f, -0.377386255654469f, - -0.383439151385947f, -0.389475621860365f, -0.395495408495417f, -0.401498253423481f, - -0.407483899502658f, -0.413452090327791f, -0.419402570241451f, -0.425335084344881f, - -0.431249378508924f, -0.437145199384900f, -0.443022294415467f, -0.448880411845434f, - -0.454719300732547f, -0.460538710958240f, -0.466338393238348f, -0.472118099133784f, - -0.477877581061184f, -0.483616592303511f, -0.489334887020625f, -0.495032220259813f, - -0.500708347966279f, -0.506363026993606f, -0.511996015114162f, -0.517607071029487f, - -0.523195954380619f, -0.528762425758396f, -0.534306246713712f, -0.539827179767727f, - -0.545324988422047f, -0.550799437168844f, -0.556250291500956f, -0.561677317921925f, - -0.567080283956001f, -0.572458958158102f, -0.577813110123727f, -0.583142510498826f, - -0.588446930989624f, -0.593726144372402f, -0.598979924503229f, -0.604208046327650f, - -0.609410285890327f, -0.614586420344631f, -0.619736227962191f, -0.624859488142386f, - -0.629955981421804f, -0.635025489483634f, -0.640067795167023f, -0.645082682476378f, - -0.650069936590618f, -0.655029343872374f, -0.659960691877147f, -0.664863769362399f, - -0.669738366296610f, -0.674584273868271f, -0.679401284494831f, -0.684189191831585f, - -0.688947790780520f, -0.693676877499095f, -0.698376249408973f, -0.703045705204703f, - -0.707685044862340f, -0.712294069648014f, -0.716872582126442f, -0.721420386169390f, - -0.725937286964068f, -0.730423091021479f, -0.734877606184707f, -0.739300641637149f, - -0.743692007910687f, -0.748051516893805f, -0.752378981839648f, -0.756674217374021f, - -0.760937039503328f, -0.765167265622459f, -0.769364714522605f, -0.773529206399025f, - -0.777660562858748f, -0.781758606928213f, -0.785823163060853f, -0.789854057144609f, - -0.793851116509396f, -0.797814169934493f, -0.801743047655882f, -0.805637581373517f, - -0.809497604258536f, -0.813322950960406f, -0.817113457614006f, -0.820868961846646f, - -0.824589302785025f, -0.828274321062119f, -0.831923858824010f, -0.835537759736646f, - -0.839115868992540f, -0.842658033317402f, -0.846164100976699f, -0.849633921782164f, - -0.853067347098221f, -0.856464229848356f, -0.859824424521420f, -0.863147787177854f, - -0.866434175455865f, -0.869683448577516f, -0.872895467354761f, -0.876070094195407f, - -0.879207193109004f, -0.882306629712678f, -0.885368271236879f, -0.888391986531075f, - -0.891377646069366f, -0.894325121956035f, -0.897234287931024f, -0.900105019375345f, - -0.902937193316419f, -0.905730688433339f, -0.908485385062073f, -0.911201165200584f, - -0.913877912513892f, -0.916515512339049f, -0.919113851690058f, -0.921672819262709f, - -0.924192305439348f, -0.926672202293573f, -0.929112403594856f, -0.931512804813095f, - -0.933873303123092f, -0.936193797408954f, -0.938474188268430f, -0.940714378017165f, - -0.942914270692887f, -0.945073772059515f, -0.947192789611197f, -0.949271232576274f, - -0.951309011921168f, -0.953306040354194f, -0.955262232329299f, -0.957177504049732f, - -0.959051773471624f, -0.960884960307514f, -0.962676986029777f, -0.964427773873996f, - -0.966137248842248f, -0.967805337706313f, -0.969431969010818f, -0.971017073076290f, - -0.972560582002147f, -0.974062429669605f, -0.975522551744506f, -0.976940885680082f, - -0.978317370719628f, -0.979651947899104f, -0.980944560049668f, -0.982195151800116f, - -0.983403669579260f, -0.984570061618221f, -0.985694277952645f, -0.986776270424848f, - -0.987815992685872f, -0.988813400197476f, -0.989768450234042f, -0.990681101884405f, - -0.991551316053606f, -0.992379055464567f, -0.993164284659685f, -0.993906970002356f, - -0.994607079678411f, -0.995264583697482f, -0.995879453894286f, -0.996451663929828f, - -0.996981189292537f, -0.997468007299307f, -0.997912097096476f, -0.998313439660714f, - -0.998672017799843f, -0.998987816153568f, -0.999260821194138f, -0.999491021226926f, - -0.999678406390929f, -0.999822968659191f, -0.999924701839145f, -0.999983601572879f -}; - -const float ivas_cos_twiddle_480[IVAS_480_PT_LEN >> 1] = -{ - 0.999999665337326f, 0.999972892444367f, 0.999903284040864f, 0.999790843108610f, - 0.999635574464198f, 0.999437484758823f, 0.999196582477986f, 0.998912877941140f, - 0.998586383301244f, 0.998217112544241f, 0.997805081488460f, 0.997350307783942f, - 0.996852810911678f, 0.996312612182778f, 0.995729734737558f, 0.995104203544548f, - 0.994436045399422f, 0.993725288923851f, 0.992971964564277f, 0.992176104590609f, - 0.991337743094838f, 0.990456915989581f, 0.989533661006540f, 0.988568017694885f, - 0.987560027419562f, 0.986509733359519f, 0.985417180505858f, 0.984282415659908f, - 0.983105487431216f, 0.981886446235473f, 0.980625344292344f, 0.979322235623241f, - 0.977977176049001f, 0.976590223187499f, 0.975161436451181f, 0.973690877044515f, - 0.972178607961371f, 0.970624693982323f, 0.969029201671875f, 0.967392199375607f, - 0.965713757217249f, 0.963993947095677f, 0.962232842681832f, 0.960430519415566f, - 0.958587054502409f, 0.956702526910263f, 0.954777017366017f, 0.952810608352092f, - 0.950803384102905f, 0.948755430601263f, 0.946666835574676f, 0.944537688491606f, - 0.942368080557626f, 0.940158104711519f, 0.937907855621296f, 0.935617429680138f, - 0.933286925002268f, 0.930916441418752f, 0.928506080473216f, 0.926055945417500f, - 0.923566141207236f, 0.921036774497350f, 0.918467953637493f, 0.915859788667400f, - 0.913212391312179f, 0.910525874977521f, 0.907800354744844f, 0.905035947366364f, - 0.902232771260093f, 0.899390946504765f, 0.896510594834693f, 0.893591839634558f, - 0.890634805934118f, 0.887639620402854f, 0.884606411344546f, 0.881535308691775f, - 0.878426444000357f, 0.875279950443708f, 0.872095962807140f, 0.868874617482085f, - 0.865616052460258f, 0.862320407327736f, 0.858987823258990f, 0.855618443010829f, - 0.852212410916289f, 0.848769872878448f, 0.845290976364179f, 0.841775870397828f, - 0.838224705554838f, 0.834637633955290f, 0.831014809257393f, 0.827356386650900f, - 0.823662522850458f, 0.819933376088899f, 0.816169106110459f, 0.812369874163934f, - 0.808535842995778f, 0.804667176843123f, 0.800764041426753f, 0.796826603943998f, - 0.792855033061574f, 0.788849498908361f, 0.784810173068109f, 0.780737228572095f, - 0.776630839891703f, 0.772491182930959f, 0.768318435018988f, 0.764112774902423f, - 0.759874382737746f, 0.755603440083571f, 0.751300129892866f, 0.746964636505118f, - 0.742597145638433f, 0.738197844381584f, 0.733766921185995f, 0.729304565857669f, - 0.724810969549055f, 0.720286324750863f, 0.715730825283819f, 0.711144666290356f, - 0.706528044226263f, 0.701881156852263f, 0.697204203225545f, 0.692497383691237f, - 0.687760899873822f, 0.682994954668502f, 0.678199752232508f, 0.673375497976352f, - 0.668522398555031f, 0.663640661859171f, 0.658730497006124f, 0.653792114331011f, - 0.648825725377709f, 0.643831542889792f, 0.638809780801415f, 0.633760654228152f, - 0.628684379457781f, 0.623581173941019f, 0.618451256282204f, 0.613294846229936f, - 0.608112164667659f, 0.602903433604202f, 0.597668876164268f, 0.592408716578875f, - 0.587123180175754f, 0.581812493369691f, 0.576476883652835f, 0.571116579584947f, - 0.565731810783613f, 0.560322807914407f, 0.554889802681009f, 0.549433027815281f, - 0.543952717067296f, 0.538449105195327f, 0.532922427955790f, 0.527372922093143f, - 0.521800825329746f, 0.516206376355680f, 0.510589814818519f, 0.504951381313066f, - 0.499291317371047f, 0.493609865450762f, 0.487907268926702f, 0.482183772079123f, - 0.476439620083580f, 0.470675059000427f, 0.464890335764274f, 0.459085698173413f, - 0.453261394879198f, 0.447417675375397f, 0.441554789987504f, 0.435672989862017f, - 0.429772526955677f, 0.423853654024676f, 0.417916624613831f, 0.411961693045722f, - 0.405989114409798f, 0.399999144551449f, 0.393992040061048f, 0.387968058262959f, - 0.381927457204511f, 0.375870495644949f, 0.369797433044349f, 0.363708529552499f, - 0.357604045997758f, 0.351484243875885f, 0.345349385338836f, 0.339199733183530f, - 0.333035550840599f, 0.326857102363098f, 0.320664652415198f, 0.314458466260842f, - 0.308238809752391f, 0.302005949319228f, 0.295760151956351f, 0.289501685212929f, - 0.283230817180850f, 0.276947816483228f, 0.270652952262902f, 0.264346494170904f, - 0.258028712354909f, 0.251699877447663f, 0.245360260555389f, 0.239010133246176f, - 0.232649767538342f, 0.226279435888785f, 0.219899411181310f, 0.213509966714943f, - 0.207111376192219f, 0.200703913707458f, 0.194287853735029f, 0.187863471117585f, - 0.181431041054297f, 0.174990839089060f, 0.168543141098691f, 0.162088223281113f, - 0.155626362143520f, 0.149157834490539f, 0.142682917412363f, 0.136201888272891f, - 0.129715024697841f, 0.123222604562857f, 0.116724905981611f, 0.110222207293883f, - 0.103714787053643f, 0.0972029240171147f, 0.0906868971308382f, 0.0841669855197180f, - 0.0776434684750678f, 0.0711166254426455f, 0.0645867360106837f, 0.0580540798979125f, - 0.0515189369415777f, 0.0449815870854525f, 0.0384423103678466f, 0.0319013869096108f, - 0.0253590969021360f, 0.0188157205953513f, 0.0122715382857199f, 0.00572683030423125f -}; - -const float ivas_sin_twiddle_320[IVAS_320_PT_LEN >> 1] = -{ - -0.00122718432228885f, -0.0110444371277961f, -0.0208606254474658f, -0.0306748031766366f, - -0.0404860244044325f, -0.0502933435049309f, -0.0600958152283046f, -0.0698924947919266f, - -0.0796824379714301f, -0.0894647011917154f, -0.0992383416178931f, -0.109002417246156f, - -0.118755986994574f, -0.128498110793793f, -0.138227849677645f, -0.147944265873646f, - -0.157646422893378f, -0.167333385622756f, -0.177004220412149f, -0.186657995166372f, - -0.196293779434521f, -0.205910644499654f, -0.215507663468299f, -0.225083911359793f, - -0.234638465195433f, -0.244170404087435f, -0.253678809327687f, -0.263162764476304f, - -0.272621355449949f, -0.282053670609936f, -0.291458800850100f, -0.300835839684411f, - -0.310183883334351f, -0.319502030816016f, -0.328789384026957f, -0.338045047832741f, - -0.347268130153228f, -0.356457742048546f, -0.365612997804774f, -0.374733015019307f, - -0.383816914685905f, -0.392863821279410f, -0.401872862840135f, -0.410843171057904f, - -0.419773881355741f, -0.428664132973198f, -0.437513069049322f, -0.446319836705237f, - -0.455083587126344f, -0.463803475644138f, -0.472478661817616f, -0.481108309514277f, - -0.489691586990715f, -0.498227666972782f, -0.506715726735323f, -0.515154948181472f, - -0.523544517921500f, -0.531883627351215f, -0.540171472729893f, -0.548407255257747f, - -0.556590181152914f, -0.564719461727967f, -0.572794313465923f, -0.580813958095765f, - -0.588777622667452f, -0.596684539626417f, -0.604533946887548f, -0.612325087908634f, - -0.620057211763289f, -0.627729573213322f, -0.635341432780567f, -0.642892056818157f, - -0.650380717581231f, -0.657806693297079f, -0.665169268234704f, -0.672467732773812f, - -0.679701383473197f, -0.686869523138552f, -0.693971460889654f, -0.701006512226963f, - -0.707973999097587f, -0.714873249960641f, -0.721703599851967f, -0.728464390448225f, - -0.735154970130347f, -0.741774694046338f, -0.748322924173428f, -0.754799029379569f, - -0.761202385484262f, -0.767532375318718f, -0.773788388785342f, -0.779969822916534f, - -0.786076081932809f, -0.792106577300212f, -0.798060727787049f, -0.803937959519903f, - -0.809737706038947f, -0.815459408352540f, -0.821102514991105f, -0.826666482060278f, - -0.832150773293332f, -0.837554860102865f, -0.842878221631741f, -0.848120344803297f, - -0.853280724370791f, -0.858358862966099f, -0.863354271147654f, -0.868266467447619f, - -0.873094978418290f, -0.877839338677730f, -0.882499090954623f, -0.887073786132345f, - -0.891562983292255f, -0.895966249756185f, -0.900283161128150f, -0.904513301335247f, - -0.908656262667757f, -0.912711645818445f, -0.916679059921043f, -0.920558122587921f, - -0.924348459946945f, -0.928049706677513f, -0.931661506045761f, -0.935183509938948f, - -0.938615378899008f, -0.941956782155269f, -0.945207397656329f, -0.948366912101102f, - -0.951435020969008f, -0.954411428549330f, -0.957295847969710f, -0.960088001223801f, - -0.962787619198060f, -0.965394441697689f, -0.967908217471710f, -0.970328704237180f, - -0.972655668702548f, -0.974888886590136f, -0.977028142657754f, -0.979073230719452f, - -0.981023953665385f, -0.982880123480816f, -0.984641561264233f, -0.986308097244599f, - -0.987879570797705f, -0.989355830461661f, -0.990736733951487f, -0.992022148172831f, - -0.993211949234795f, -0.994306022461875f, -0.995304262405018f, -0.996206572851780f, - -0.997012866835602f, -0.997723066644192f, -0.998337103827013f, -0.998854919201885f, - -0.999276462860683f, -0.999601694174153f, -0.999830581795823f, -0.999963103665029f -}; - -const float ivas_cos_twiddle_320[IVAS_320_PT_LEN >> 1] = -{ - 0.999999247009036f, 0.999939008344274f, 0.999782393476671f, 0.999529417501093f, - 0.999180104799892f, 0.998734489040553f, 0.998192613172451f, 0.997554529422708f, - 0.996820299291166f, 0.995989993544452f, 0.995063692209162f, 0.994041484564148f, - 0.992923469131909f, 0.991709753669100f, 0.990400455156143f, 0.988995699785954f, - 0.987495622951779f, 0.985900369234146f, 0.984210092386929f, 0.982424955322528f, - 0.980545130096168f, 0.978570797889318f, 0.976502148992226f, 0.974339382785576f, - 0.972082707721278f, 0.969732341302371f, 0.967288510062064f, 0.964751449541896f, - 0.962121404269042f, 0.959398627732738f, 0.956583382359856f, 0.953675939489602f, - 0.950676579347373f, 0.947585591017741f, 0.944403272416596f, 0.941129930262426f, - 0.937765880046764f, 0.934311446003768f, 0.930766961078984f, 0.927132766897244f, - 0.923409213729749f, 0.919596660460302f, 0.915695474550723f, 0.911706032005430f, - 0.907628717335198f, 0.903463923520102f, 0.899212051971637f, 0.894873512494035f, - 0.890448723244758f, 0.885938110694205f, 0.881342109584601f, 0.876661162888100f, - 0.871895721764085f, 0.867046245515693f, 0.862113201545536f, 0.857097065310660f, - 0.851998320276715f, 0.846817457871361f, 0.841554977436898f, 0.836211386182145f, - 0.830787199133548f, 0.825282939085545f, 0.819699136550175f, 0.814036329705948f, - 0.808295064345975f, 0.802475893825360f, 0.796579379007870f, 0.790606088211875f, - 0.784556597155575f, 0.778431488901510f, 0.772231353800360f, 0.765956789434051f, - 0.759608400558158f, 0.753186799043613f, 0.746692603817734f, 0.740126440804576f, - 0.733488942864595f, 0.726780749733659f, 0.720002507961382f, 0.713154870848815f, - 0.706238498385475f, 0.699254057185735f, 0.692202220424575f, 0.685083667772700f, - 0.677899085331031f, 0.670649165564576f, 0.663334607235692f, 0.655956115336735f, - 0.648514401022112f, 0.641010181539737f, 0.633444180161903f, 0.625817126115569f, - 0.618129754512079f, 0.610382806276310f, 0.602577028075254f, 0.594713172246063f, - 0.586791996723527f, 0.578814264967032f, 0.570780745886967f, 0.562692213770623f, - 0.554549448207560f, 0.546353234014470f, 0.538104361159537f, 0.529803624686295f, - 0.521451824637002f, 0.513049765975530f, 0.504598258509780f, 0.496098116813633f, - 0.487550160148436f, 0.478955212384045f, 0.470314101919413f, 0.461627661602753f, - 0.452896728651262f, 0.444122144570429f, 0.435304755072932f, 0.426445409997122f, - 0.417544963225117f, 0.408604272600502f, 0.399624199845647f, 0.390605610478656f, - 0.381549373729942f, 0.372456362458452f, 0.363327453067539f, 0.354163525420491f, - 0.344965462755725f, 0.335734151601668f, 0.326470481691301f, 0.317175345876411f, - 0.307849640041535f, 0.298494263017610f, 0.289110116495347f, 0.279698104938318f, - 0.270259135495788f, 0.260794117915276f, 0.251303964454877f, 0.241789589795333f, - 0.232251910951879f, 0.222691847185850f, 0.213110319916091f, 0.203508252630144f, - 0.193886570795236f, 0.184246201769091f, 0.174588074710540f, 0.164913120489970f, - 0.155222271599607f, 0.145516462063635f, 0.135796627348180f, 0.126063704271142f, - 0.116318630911905f, 0.106562346520921f, 0.0967957914291864f, 0.0870199069576083f, - 0.0772356353262796f, 0.0674439195636641f, 0.0576457034157070f, 0.0478419312548745f, - 0.0380335479891316f, 0.0282214989708730f, 0.0184067299058048f, 0.00859018676179777f -}; - -const float ivas_sin_twiddle_160[IVAS_160_PT_LEN >> 1] = -{ - -0.00245436679646029f, -0.0220875270185783f, -0.0417121720785753f, -0.0613207363022086f, - -0.0809056602147038f, -0.100459393455076f, -0.119974397686940f, -0.139443149504679f, - -0.158858143333861f, -0.178211894324786f, -0.197496941238030f, -0.216705849320900f, - -0.235831213173673f, -0.254865659604515f, -0.273801850471989f, -0.292632485514050f, - -0.311350305162432f, -0.329948093341349f, -0.348418680249435f, -0.366754945123831f, - -0.384949818985382f, -0.402996287363860f, -0.420887393002174f, -0.438616238538528f, - -0.456175989165483f, -0.473559875264908f, -0.490761195017794f, -0.507773316987935f, - -0.524589682678469f, -0.541203809060310f, -0.557609291071472f, -0.573799804086349f, - -0.589769106353971f, -0.605511041404326f, -0.621019540421789f, -0.636288624584773f, - -0.651312407370671f, -0.666085096825230f, -0.680600997795453f, -0.694854514125194f, - -0.708840150812579f, -0.722552516128436f, -0.735986323694910f, -0.749136394523459f, - -0.761997659011457f, -0.774565158896617f, -0.786834049168500f, -0.798799599936358f, - -0.810457198252595f, -0.821802349891147f, -0.832830681080094f, -0.843537940187827f, - -0.853919999362139f, -0.863972856121587f, -0.873692634898524f, -0.883075588533209f, - -0.892118099718401f, -0.900816682393908f, -0.909167983090522f, -0.917168782222852f, - -0.924815995330528f, -0.932106674267327f, -0.939038008337734f, -0.945607325380521f, - -0.951812092798916f, -0.957649918536965f, -0.963118552001719f, -0.968215884930876f, - -0.972939952205560f, -0.977288932607910f, -0.981261149523195f, -0.984855071586178f, - -0.988069313271492f, -0.990902635427780f, -0.993353945755417f, -0.995422299227608f, - -0.997106898454717f, -0.998407093991674f, -0.999322384588350f, -0.999852417382795f -}; - -const float ivas_cos_twiddle_160[IVAS_160_PT_LEN >> 1] = -{ - 0.999996988037278f, 0.999756040817060f, 0.999129668611881f, 0.998118112900149f, - 0.996721763655847f, 0.994941159198190f, 0.992776985984091f, 0.990230078343521f, - 0.987301418157858f, 0.983992134481354f, 0.980303503105861f, 0.976236946068990f, - 0.971794031105889f, 0.966976471044852f, 0.961786123146989f, 0.956224988390216f, - 0.950295210697844f, 0.943999076112052f, 0.937339011912575f, 0.930317585680942f, - 0.922937504310623f, 0.915201612963474f, 0.907112893972869f, 0.898674465693954f, - 0.889889581301463f, 0.880761627535558f, 0.871294123396174f, 0.861490718786378f, - 0.851355193105265f, 0.840891453790923f, 0.830103534814044f, 0.818995595122750f, - 0.807571917039244f, 0.795836904608884f, 0.783795081902349f, 0.771451091271519f, - 0.758809691559762f, 0.745875756267305f, 0.732654271672413f, 0.719150334909079f, - 0.705369152001986f, 0.691316035859480f, 0.676996404225349f, 0.662415777590172f, - 0.647579777063073f, 0.632494122204673f, 0.617164628822086f, 0.601597206726822f, - 0.585797857456439f, 0.569772671960834f, 0.553527828254070f, 0.537069589032630f, - 0.520404299261031f, 0.503538383725718f, 0.486478344558187f, 0.469230758728290f, - 0.451802275508688f, 0.434199613911428f, 0.416429560097637f, 0.398498964761330f, - 0.380414740488332f, 0.362183859091351f, 0.343813348922205f, 0.325310292162263f, - 0.306681822092128f, 0.287935120341621f, 0.269077414121127f, 0.250115973435366f, - 0.231058108280671f, 0.211911165826842f, 0.192682527584672f, 0.173379606560240f, - 0.154009844397046f, 0.134580708507126f, 0.115099689192216f, 0.0955742967560992f, - 0.0760120586092433f, 0.0564205163668375f, 0.0368072229413588f, 0.0171797396307788f -}; -#endif - -const float ivas_mdft_coeff_cos_twid_120[IVAS_120_PT_LEN + 1] = -{ - 1.0000000000f, 0.9999143276f, 0.9996573250f, 0.9992290362f, 0.9986295348f, 0.9978589232f, 0.9969173337f, - 0.9958049276f, 0.9945218954f, 0.9930684570f, 0.9914448614f, 0.9896513868f, 0.9876883406f, 0.9855560591f, - 0.9832549076f, 0.9807852804f, 0.9781476007f, 0.9753423205f, 0.9723699204f, 0.9692309097f, 0.9659258263f, - 0.9624552365f, 0.9588197349f, 0.9550199445f, 0.9510565163f, 0.9469301295f, 0.9426414911f, 0.9381913359f, - 0.9335804265f, 0.9288095529f, 0.9238795325f, 0.9187912101f, 0.9135454576f, 0.9081431738f, 0.9025852843f, - 0.8968727415f, 0.8910065242f, 0.8849876375f, 0.8788171127f, 0.8724960071f, 0.8660254038f, 0.8594064115f, - 0.8526401644f, 0.8457278217f, 0.8386705679f, 0.8314696123f, 0.8241261886f, 0.8166415552f, 0.8090169944f, - 0.8012538127f, 0.7933533403f, 0.7853169309f, 0.7771459615f, 0.7688418321f, 0.7604059656f, 0.7518398075f, - 0.7431448255f, 0.7343225094f, 0.7253743710f, 0.7163019434f, 0.7071067812f, 0.6977904598f, 0.6883545757f, - 0.6788007455f, 0.6691306064f, 0.6593458151f, 0.6494480483f, 0.6394390020f, 0.6293203910f, 0.6190939493f, - 0.6087614290f, 0.5983246006f, 0.5877852523f, 0.5771451900f, 0.5664062369f, 0.5555702330f, 0.5446390350f, - 0.5336145159f, 0.5224985647f, 0.5112930861f, 0.5000000000f, 0.4886212415f, 0.4771587603f, 0.4656145203f, - 0.4539904997f, 0.4422886902f, 0.4305110968f, 0.4186597375f, 0.4067366431f, 0.3947438564f, 0.3826834324f, - 0.3705574375f, 0.3583679495f, 0.3461170571f, 0.3338068592f, 0.3214394653f, 0.3090169944f, 0.2965415750f, - 0.2840153447f, 0.2714404499f, 0.2588190451f, 0.2461532930f, 0.2334453639f, 0.2206974350f, 0.2079116908f, - 0.1950903220f, 0.1822355255f, 0.1693495038f, 0.1564344650f, 0.1434926220f, 0.1305261922f, 0.1175373975f, - 0.1045284633f, 0.0915016187f, 0.0784590957f, 0.0654031292f, 0.0523359562f, 0.0392598158f, 0.0261769483f, - 0.0130895956f, 0.0000000000f -}; - -#ifndef IVAS_FLOAT_FIXED -const float ivas_sin_twiddle_80[IVAS_80_PT_LEN >> 1] = -{ - -0.00490871880799799f, -0.0441642771270674f, -0.0833517373318975f, -0.122410675199216f, - -0.161280864677880f, -0.199902370753082f, -0.238215641861795f, -0.276161601716971f, - -0.313681740398891f, -0.350718204573223f, -0.387213886696666f, -0.423112513072644f, - -0.458358730621271f, -0.492898192229784f, -0.526677640551852f, -0.559644990126546f, - -0.591749407690343f, -0.622941390558334f, -0.653172842953777f, -0.682397150168297f, - -0.710569250438390f, -0.737645704427393f, -0.763584762205797f, -0.788346427626606f, - -0.811892519996505f, -0.834186732947712f, -0.855194690419775f, -0.874883999664958f, - -0.893224301195515f, -0.910187315595818f, -0.925746887127164f, -0.939879024058033f, - -0.952561935657595f, -0.963776065795440f, -0.973504123095711f, -0.981731107599154f, - -0.988444333891970f, -0.993633450665799f, -0.997290456678690f, -0.999409713092437f -}; - -const float ivas_cos_twiddle_80[IVAS_80_PT_LEN >> 1] = -{ - 0.999987952167257f, 0.999024282300407f, 0.996520189400975f, 0.992479534598710f, - 0.986908548290446f, 0.979815820533276f, 0.971212287799312f, 0.961111216112432f, - 0.949528180593037f, 0.936481041442343f, 0.921989916403245f, 0.906077149740215f, - 0.888767277786068f, 0.870086991108712f, 0.850065093356229f, 0.828732456843738f, - 0.806121974950521f, 0.782268511400816f, 0.757208846506485f, 0.730981620454432f, - 0.703627273726243f, 0.675187984741891f, 0.645707604823667f, 0.615231590580627f, - 0.583806933817786f, 0.551482089078169f, 0.518306898929413f, 0.484332517110141f, - 0.449611329654607f, 0.414196874117224f, 0.378143757021541f, 0.341507569660936f, - 0.304344802380877f, 0.266712757474898f, 0.228669460828619f, 0.190273572448036f, - 0.151584296010041f, 0.112661287574648f, 0.0735645635996675f, 0.0343544083996823f -}; -#endif - const Word16 dirac_gains_P_idx[16] = { @@ -5026,74 +2934,6 @@ const float dirac_gains_trg_term[181][2] = /*----------------------------------------------------------------------------------* * FB ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float ivas_fb_cf_4ms_48k[IVAS_FB_4MS_48K_SAMP] = -{ - 0.0000167330f, 0.0001505907f, 0.0004182700f, 0.0008196995f, 0.0013547717f, 0.0020233432f, 0.0028252351f, 0.0037602327f, - 0.0048280857f, 0.0060285082f, 0.0073611788f, 0.0088257407f, 0.0104218019f, 0.0121489350f, 0.0140066776f, 0.0159945324f, - 0.0181119671f, 0.0203584149f, 0.0227332744f, 0.0252359097f, 0.0278656508f, 0.0306217938f, 0.0335036006f, 0.0365102998f, - 0.0396410864f, 0.0428951221f, 0.0462715360f, 0.0497694239f, 0.0533878494f, 0.0571258438f, 0.0609824063f, 0.0649565044f, - 0.0690470742f, 0.0732530206f, 0.0775732174f, 0.0820065080f, 0.0865517057f, 0.0912075934f, 0.0959729248f, 0.1008464240f, - 0.1058267862f, 0.1109126781f, 0.1161027381f, 0.1213955767f, 0.1267897769f, 0.1322838945f, 0.1378764585f, 0.1435659718f, - 0.1493509111f, 0.1552297276f, 0.1612008475f, 0.1672626721f, 0.1734135785f, 0.1796519200f, 0.1859760265f, 0.1923842047f, - 0.1988747391f, 0.2054458921f, 0.2120959043f, 0.2188229954f, 0.2256253644f, 0.2325011901f, 0.2394486317f, 0.2464658292f, - 0.2535509039f, 0.2607019590f, 0.2679170800f, 0.2751943352f, 0.2825317763f, 0.2899274389f, 0.2973793430f, 0.3048854936f, - 0.3124438810f, 0.3200524817f, 0.3277092588f, 0.3354121622f, 0.3431591298f, 0.3509480875f, 0.3587769500f, 0.3666436213f, - 0.3745459953f, 0.3824819564f, 0.3904493799f, 0.3984461328f, 0.4064700741f, 0.4145190556f, 0.4225909225f, 0.4306835136f, - 0.4387946624f, 0.4469221974f, 0.4550639426f, 0.4632177182f, 0.4713813414f, 0.4795526264f, 0.4877293857f, 0.4959094302f, - 0.5040905698f, 0.5122706143f, 0.5204473736f, 0.5286186586f, 0.5367822818f, 0.5449360574f, 0.5530778026f, 0.5612053376f, - 0.5693164864f, 0.5774090775f, 0.5854809444f, 0.5935299259f, 0.6015538672f, 0.6095506201f, 0.6175180436f, 0.6254540047f, - 0.6333563787f, 0.6412230500f, 0.6490519125f, 0.6568408702f, 0.6645878378f, 0.6722907412f, 0.6799475183f, 0.6875561190f, - 0.6951145064f, 0.7026206570f, 0.7100725611f, 0.7174682237f, 0.7248056648f, 0.7320829200f, 0.7392980410f, 0.7464490961f, - 0.7535341708f, 0.7605513683f, 0.7674988099f, 0.7743746356f, 0.7811770046f, 0.7879040957f, 0.7945541079f, 0.8011252609f, - 0.8076157953f, 0.8140239735f, 0.8203480800f, 0.8265864215f, 0.8327373279f, 0.8387991525f, 0.8447702724f, 0.8506490889f, - 0.8564340282f, 0.8621235415f, 0.8677161055f, 0.8732102231f, 0.8786044233f, 0.8838972619f, 0.8890873219f, 0.8941732138f, - 0.8991535760f, 0.9040270752f, 0.9087924066f, 0.9134482943f, 0.9179934920f, 0.9224267826f, 0.9267469794f, 0.9309529258f, - 0.9350434956f, 0.9390175937f, 0.9428741562f, 0.9466121506f, 0.9502305761f, 0.9537284640f, 0.9571048779f, 0.9603589136f, - 0.9634897002f, 0.9664963994f, 0.9693782062f, 0.9721343492f, 0.9747640903f, 0.9772667256f, 0.9796415851f, 0.9818880329f, - 0.9840054676f, 0.9859933224f, 0.9878510650f, 0.9895781981f, 0.9911742593f, 0.9926388212f, 0.9939714918f, 0.9951719143f, - 0.9962397673f, 0.9971747649f, 0.9979766568f, 0.9986452283f, 0.9991803005f, 0.9995817300f, 0.9998494093f, 0.9999832670f, -}; - -const float ivas_fb_cf_4ms_32k[IVAS_FB_4MS_32K_SAMP] = -{ - 0.0000376491f, 0.0003388077f, 0.0009409435f, 0.0018436939f, 0.0030465150f, 0.0045486823f, 0.0063492909f, 0.0084472563f, - 0.0108413146f, 0.0135300239f, 0.0165117645f, 0.0197847403f, 0.0233469798f, 0.0271963373f, 0.0313304940f, 0.0357469598f, - 0.0404430742f, 0.0454160085f, 0.0506627672f, 0.0561801898f, 0.0619649529f, 0.0680135719f, 0.0743224034f, 0.0808876472f, - 0.0877053486f, 0.0947714009f, 0.1020815477f, 0.1096313857f, 0.1174163672f, 0.1254318027f, 0.1336728642f, 0.1421345874f, - 0.1508118753f, 0.1596995011f, 0.1687921112f, 0.1780842286f, 0.1875702559f, 0.1972444793f, 0.2071010713f, 0.2171340946f, - 0.2273375058f, 0.2377051587f, 0.2482308081f, 0.2589081140f, 0.2697306445f, 0.2806918807f, 0.2917852200f, 0.3030039800f, - 0.3143414030f, 0.3257906599f, 0.3373448539f, 0.3489970253f, 0.3607401553f, 0.3725671702f, 0.3844709459f, 0.3964443119f, - 0.4084800560f, 0.4205709283f, 0.4327096457f, 0.4448888964f, 0.4571013438f, 0.4693396318f, 0.4815963885f, 0.4938642309f, - 0.5061357691f, 0.5184036115f, 0.5306603682f, 0.5428986562f, 0.5551111036f, 0.5672903543f, 0.5794290717f, 0.5915199440f, - 0.6035556881f, 0.6155290541f, 0.6274328298f, 0.6392598447f, 0.6510029747f, 0.6626551461f, 0.6742093401f, 0.6856585970f, - 0.6969960200f, 0.7082147800f, 0.7193081193f, 0.7302693555f, 0.7410918860f, 0.7517691919f, 0.7622948413f, 0.7726624942f, - 0.7828659054f, 0.7928989287f, 0.8027555207f, 0.8124297441f, 0.8219157714f, 0.8312078888f, 0.8403004989f, 0.8491881247f, - 0.8578654126f, 0.8663271358f, 0.8745681973f, 0.8825836328f, 0.8903686143f, 0.8979184523f, 0.9052285991f, 0.9122946514f, - 0.9191123528f, 0.9256775966f, 0.9319864281f, 0.9380350471f, 0.9438198102f, 0.9493372328f, 0.9545839915f, 0.9595569258f, - 0.9642530402f, 0.9686695060f, 0.9728036627f, 0.9766530202f, 0.9802152597f, 0.9834882355f, 0.9864699761f, 0.9891586854f, - 0.9915527437f, 0.9936507091f, 0.9954513177f, 0.9969534850f, 0.9981563061f, 0.9990590565f, 0.9996611923f, 0.9999623509f, -}; - -const float ivas_fb_cf_4ms_16k[IVAS_FB_4MS_16K_SAMP] = -{ - 0.0001505907f, 0.0013547717f, 0.0037602327f, 0.0073611788f, 0.0121489350f, 0.0181119671f, 0.0252359097f, 0.0335036006f, - 0.0428951221f, 0.0533878494f, 0.0649565044f, 0.0775732174f, 0.0912075934f, 0.1058267862f, 0.1213955767f, 0.1378764585f, - 0.1552297276f, 0.1734135785f, 0.1923842047f, 0.2120959043f, 0.2325011901f, 0.2535509039f, 0.2751943352f, 0.2973793430f, - 0.3200524817f, 0.3431591298f, 0.3666436213f, 0.3904493799f, 0.4145190556f, 0.4387946624f, 0.4632177182f, 0.4877293857f, - 0.5122706143f, 0.5367822818f, 0.5612053376f, 0.5854809444f, 0.6095506201f, 0.6333563787f, 0.6568408702f, 0.6799475183f, - 0.7026206570f, 0.7248056648f, 0.7464490961f, 0.7674988099f, 0.7879040957f, 0.8076157953f, 0.8265864215f, 0.8447702724f, - 0.8621235415f, 0.8786044233f, 0.8941732138f, 0.9087924066f, 0.9224267826f, 0.9350434956f, 0.9466121506f, 0.9571048779f, - 0.9664963994f, 0.9747640903f, 0.9818880329f, 0.9878510650f, 0.9926388212f, 0.9962397673f, 0.9986452283f, 0.9998494093f, -}; - -const float ivas_fb_fcs_12band_1ms[IVAS_FB_BANDS_12] = -{ - 0.0083333333f, 0.0250000000f, 0.0416666667f, 0.0583333333f, - 0.0750000000f, 0.0916666667f, 0.1083333333f, 0.1416666667f, - 0.2166666667f, 0.3333333333f, 0.5083333333f, 0.8083333333f -}; -#endif const Word32 ivas_fb_fcs_12band_1ms_fx[IVAS_FB_BANDS_12] = { @@ -5190,1074 +3030,6 @@ const Word16 ivas_fb_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB }, }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_fb_cf_1ms_48k[IVAS_FB_1MS_48K_SAMP] = -{ - 0.0002677063f, 0.0024076367f, 0.0066783340f, 0.0130615104f, 0.0215298321f, 0.0320470366f, 0.0445680875f, 0.0590393678f, - 0.0753989092f, 0.0935766577f, 0.1134947733f, 0.1350679637f, 0.1582038490f, 0.1828033579f, 0.2087611516f, 0.2359660747f, - 0.2643016316f, 0.2936464851f, 0.3238749760f, 0.3548576614f, 0.3864618685f, 0.4185522633f, 0.4509914298f, 0.4836404586f, - 0.5163595414f, 0.5490085702f, 0.5814477367f, 0.6135381315f, 0.6451423386f, 0.6761250240f, 0.7063535149f, 0.7356983684f, - 0.7640339253f, 0.7912388484f, 0.8171966421f, 0.8417961510f, 0.8649320363f, 0.8865052267f, 0.9064233423f, 0.9246010908f, - 0.9409606322f, 0.9554319125f, 0.9679529634f, 0.9784701679f, 0.9869384896f, 0.9933216660f, 0.9975923633f, 0.9997322937f, -}; - -const float ivas_fb_cf_1ms_32k[IVAS_FB_1MS_32K_SAMP] = -{ - 0.0006022719f, 0.0054117450f, 0.0149843734f, 0.0292279674f, 0.0480053534f, 0.0711356950f, 0.0983962343f, 0.1295244373f, - 0.1642205226f, 0.2021503478f, 0.2429486279f, 0.2862224533f, 0.3315550733f, 0.3785099100f, 0.4266347628f, 0.4754661628f, - 0.5245338372f, 0.5733652372f, 0.6214900900f, 0.6684449267f, 0.7137775467f, 0.7570513721f, 0.7978496522f, 0.8357794774f, - 0.8704755627f, 0.9016037657f, 0.9288643050f, 0.9519946466f, 0.9707720326f, 0.9850156266f, 0.9945882550f, 0.9993977281f, -}; - -const float ivas_fb_cf_1ms_16k[IVAS_FB_1MS_16K_SAMP] = -{ - 0.0024076367f, 0.0215298321f, 0.0590393678f, 0.1134947733f, 0.1828033579f, 0.2643016316f, 0.3548576614f, 0.4509914298f, - 0.5490085702f, 0.6451423386f, 0.7356983684f, 0.8171966421f, 0.8865052267f, 0.9409606322f, 0.9784701679f, 0.9975923633f, - }; - -const float ivas_fb_fr_12band_1ms_re[IVAS_FB_12_1MS_LEN] = -{ - 0.9748788957f, 0.9427895242f, 0.8792742509f, 0.7856320394f, 0.6637543553f, 0.5159842697f, 0.3449612971f, 0.1523029468f, - -0.0629462677f, -0.2915070279f, -0.5097704228f, -0.6945723663f, -0.8280677163f, -0.8984664279f, -0.9013544787f, -0.8399030468f, - -0.7243177987f, -0.5703726081f, -0.3972779762f, -0.2251611328f, -0.0723653847f, 0.0469440290f, 0.1248973653f, 0.1617697860f, - 0.1709641074f, 0.1694810686f, 0.1629475939f, 0.1522105989f, 0.1386564071f, 0.1233728939f, 0.1073854103f, 0.0914740522f, - 0.0762871837f, 0.0622709857f, 0.0497418146f, 0.0388592902f, 0.0296823509f, 0.0221628349f, 0.0161914497f, 0.0115997684f, - 0.0081967931f, 0.0057721783f, 0.0041230995f, 0.0030548577f, 0.0023984605f, 0.0020073250f, 0.0017670262f, 0.0015886054f, - 0.0014126895f, 0.0012008765f, 0.0009366259f, 0.0006164015f, 0.0002494051f, -0.0001501884f, -0.0005632461f, -0.0009716328f, - -0.0013573205f, -0.0017064484f, -0.0020074979f, -0.0022538257f, -0.0024412527f, -0.0025696364f, -0.0026403325f, -0.0026573398f, - -0.0026249989f, -0.0025490667f, -0.0024348276f, -0.0022882409f, -0.0021144573f, -0.0019190182f, -0.0017066606f, -0.0014824738f, - -0.0012508539f, -0.0010165332f, -0.0007835930f, -0.0005563371f, -0.0003383404f, -0.0001331992f, 0.0000563549f, 0.0002277657f, - 0.0003794289f, 0.0005100093f, 0.0006190856f, 0.0007064556f, 0.0007726658f, 0.0008183240f, 0.0008445608f, 0.0008523932f, - 0.0008431696f, 0.0008180214f, 0.0007783263f, 0.0007252567f, 0.0006602600f, 0.0005846794f, 0.0005002207f, 0.0004085983f, - 0.0003119450f, 0.0002124378f, 0.0001126202f, 0.0000149855f, -0.0000777886f, -0.0001632865f, -0.0002391747f, -0.0003036357f, - -0.0003551891f, -0.0003930613f, -0.0004169567f, -0.0004273258f, -0.0004250606f, -0.0004116574f, -0.0003888481f, -0.0003586881f, - -0.0003231696f, -0.0002842913f, -0.0002437103f, -0.0002028533f, -0.0001626543f, -0.0001237419f, -0.0000862804f, -0.0000502315f, - -0.0000152759f, 0.0000188864f, 0.0000525857f, 0.0000859011f, 0.0001187387f, 0.0001506215f, 0.0001808384f, 0.0002083291f, - 0.0002319112f, 0.0002502468f, 0.0002621167f, 0.0002664223f, 0.0002624512f, 0.0002498541f, 0.0002288448f, 0.0002001024f, - 0.0001648717f, 0.0001247734f, 0.0000818072f, 0.0000380927f, -0.0000041840f, -0.0000430463f, -0.0000767750f, -0.0001041381f, - -0.0001243744f, -0.0001373295f, -0.0001433435f, -0.0001432806f, -0.0001383279f, -0.0001299462f, -0.0001196234f, -0.0001088038f, - -0.0000986591f, -0.0000900582f, -0.0000834123f, -0.0000787307f, -0.0000755665f, -0.0000731664f, -0.0000705050f, -0.0000664967f, - -0.0000600718f, -0.0000503921f, -0.0000369061f, -0.0000195076f, 0.0000014839f, 0.0000252601f, 0.0000506406f, 0.0000761070f, - 0.0000999980f, 0.0001206038f, 0.0001363885f, 0.0001460830f, 0.0001488707f, 0.0001444187f, 0.0001329747f, 0.0001153008f, - 0.0000926636f, 0.0000666729f, 0.0000391891f, - 0.0080195493f, 0.0152804795f, 0.0297236427f, 0.0512076944f, 0.0795504278f, 0.1146345202f, 0.1565217749f, 0.2067150266f, - 0.2696514371f, 0.3398196482f, 0.3975948769f, 0.4239235527f, 0.4051207537f, 0.3335063336f, 0.2086503840f, 0.0374772593f, - -0.1663484542f, -0.3839925014f, -0.5936160820f, -0.7729897529f, -0.9021602868f, -0.9658914408f, -0.9555491003f, -0.8702102709f, - -0.7168585697f, -0.5096278055f, -0.2682088520f, -0.0155786468f, 0.2246238492f, 0.4308147261f, 0.5858672047f, 0.6790005846f, - 0.7068091556f, 0.6734550535f, 0.5898178925f, 0.4719496963f, 0.3387034057f, 0.2092646386f, 0.1002222301f, 0.0233145798f, - -0.0225492413f, -0.0508402802f, -0.0698819559f, -0.0814769049f, -0.0871540019f, -0.0880955245f, -0.0854373943f, -0.0801296337f, - -0.0730507304f, -0.0649236398f, -0.0563762037f, -0.0478921962f, -0.0398550173f, -0.0325224860f, -0.0260651486f, -0.0205564484f, - -0.0160078488f, -0.0123673601f, -0.0095503829f, -0.0074410094f, -0.0059169243f, -0.0048497092f, -0.0041229035f, -0.0036294834f, - -0.0032833863f, -0.0030140242f, -0.0027726134f, -0.0025247022f, -0.0022531837f, -0.0019502609f, -0.0016189799f, -0.0012659033f, - -0.0009025224f, -0.0005393948f, -0.0001881199f, 0.0001429077f, 0.0004458867f, 0.0007165584f, 0.0009512703f, 0.0011491538f, - 0.0013092799f, 0.0014325460f, 0.0015192234f, 0.0015708276f, 0.0015881374f, 0.0015730908f, 0.0015271608f, 0.0014531585f, - 0.0013537657f, 0.0012330943f, 0.0010952099f, 0.0009453732f, 0.0007885040f, 0.0006301505f, 0.0004749667f, 0.0003275524f, - 0.0001910823f, 0.0000681798f, -0.0000401798f, -0.0001336577f, -0.0002133415f, -0.0002805985f, -0.0003376335f, -0.0003863124f, - -0.0004286391f, -0.0004657017f, -0.0004982282f, -0.0005257791f, -0.0005474775f, -0.0005614835f, -0.0005658893f, -0.0005584023f, - -0.0005372971f, -0.0005011582f, -0.0004497305f, -0.0003835612f, -0.0003046159f, -0.0002157155f, -0.0001208702f, -0.0000245120f, - 0.0000683937f, 0.0001532153f, 0.0002256208f, 0.0002823819f, 0.0003212462f, 0.0003415271f, 0.0003437577f, 0.0003299911f, - 0.0003032103f, 0.0002673723f, 0.0002266573f, 0.0001853871f, 0.0001472716f, 0.0001153747f, 0.0000915248f, 0.0000764751f, - 0.0000695838f, 0.0000692286f, 0.0000727574f, 0.0000771057f, 0.0000789150f, 0.0000752114f, 0.0000635256f, 0.0000424610f, - 0.0000116537f, -0.0000279010f, -0.0000741391f, -0.0001238800f, -0.0001733508f, -0.0002183440f, -0.0002548569f, -0.0002793014f, - -0.0002890885f, -0.0002827170f, -0.0002601490f, -0.0002226568f, -0.0001729141f, -0.0001145795f, -0.0000521398f, 0.0000096825f, - 0.0114335951f, 0.0118220569f, 0.0126166715f, 0.0138498428f, 0.0155597951f, 0.0177826837f, 0.0205365788f, 0.0238116184f, - 0.0275499857f, 0.0316384404f, 0.0358879435f, 0.0400334899f, 0.0437164087f, 0.0464960697f, 0.0478357348f, 0.0471294159f, - 0.0436878423f, 0.0367814109f, 0.0256142984f, 0.0093791332f, -0.0128147904f, -0.0419091622f, -0.0791441084f, -0.1267865122f, - -0.1929101618f, -0.2825839913f, -0.3844663503f, -0.4796058889f, -0.5493419153f, -0.5770955026f, -0.5509547813f, -0.4652700670f, - -0.3217444363f, -0.1294222853f, 0.0961203110f, 0.3345074656f, 0.5628461809f, 0.7584007007f, 0.9012417605f, 0.9766103137f, - 0.9766601036f, 0.9013929608f, 0.7586588937f, 0.5632193167f, 0.3350048195f, 0.0967502546f, -0.1286537645f, -0.3208359645f, - -0.4642258941f, -0.5497861643f, -0.5758205512f, -0.5479856830f, -0.4781988983f, -0.3830435617f, -0.2811824725f, -0.1915676007f, - -0.1255389320f, -0.0780249233f, -0.0409475096f, -0.0120357725f, 0.0099548733f, 0.0259692697f, 0.0369008806f, 0.0435579897f, - 0.0467369910f, 0.0471666204f, 0.0455359048f, 0.0424502401f, 0.0384477095f, 0.0339708748f, 0.0293829220f, 0.0249536436f, - 0.0208784147f, 0.0172747220f, 0.0142030489f, 0.0116695065f, 0.0096461650f, 0.0080756116f, 0.0068882718f, 0.0060058072f, - 0.0053538953f, 0.0048628684f, 0.0044756795f, 0.0041456204f, 0.0038402965f, 0.0035372856f, 0.0032255714f, 0.0029004385f, - 0.0025638810f, 0.0022199121f, 0.0018750824f, 0.0015349035f, 0.0012050131f, 0.0008888342f, 0.0005893582f, 0.0003077151f, - 0.0000451990f, -0.0001977660f, -0.0004197988f, -0.0006196394f, -0.0007948001f, -0.0009428845f, -0.0010607326f, -0.0011459111f, - -0.0011961438f, -0.0012107318f, -0.0011899721f, -0.0011362537f, -0.0010532349f, -0.0009464869f, -0.0008223739f, -0.0006883049f, - -0.0005514485f, -0.0004188116f, -0.0002960338f, -0.0001875645f, -0.0000957748f, -0.0000214335f, 0.0000367443f, 0.0000812780f, - 0.0001159924f, 0.0001449821f, 0.0001725036f, 0.0002019612f, 0.0002358809f, 0.0002751586f, 0.0003193210f, 0.0003661738f, - 0.0004124154f, 0.0004536598f, 0.0004853030f, 0.0005027457f, 0.0005022926f, 0.0004813241f, 0.0004389844f, 0.0003760837f, - 0.0002954100f, 0.0002012644f, 0.0000993832f, -0.0000038301f, -0.0001016317f, -0.0001878100f, -0.0002570235f, -0.0003055296f, - -0.0003312954f, -0.0003343869f, -0.0003167133f, -0.0002820121f, -0.0002352424f, -0.0001822598f, -0.0001290196f, -0.0000811569f, - -0.0000432400f, -0.0000185020f, -0.0000083679f, -0.0000125164f, -0.0000287954f, -0.0000536548f, -0.0000824102f, -0.0001099335f, - -0.0001310885f, -0.0001414598f, -0.0001377171f, -0.0001181463f, -0.0000827338f, -0.0000333400f, 0.0000265889f, 0.0000922209f, - 0.0001579388f, 0.0002177817f, 0.0002661695f, 0.0002983587f, 0.0003110497f, 0.0003026261f, 0.0002734474f, 0.0002257288f, - 0.0001634460f, 0.0000918569f, 0.0000170963f, -0.0000545144f, -0.0001169830f, -0.0001653182f, -0.0001959140f, -0.0002069779f, - -0.0001985967f, -0.0001727902f, -0.0001331990f, -0.0000847800f, -0.0000332059f, 0.0000156408f, 0.0000563515f, 0.0000844666f, - 0.0000970039f, 0.0000926836f, 0.0000721249f, 0.0000377027f, -0.0000066339f, -0.0000558449f, -0.0001042571f, -0.0001462224f, - -0.0001766430f, -0.0001915709f, -0.0001885647f, -0.0001670193f, -0.0001281871f, -0.0000751314f, -0.0000123776f, 0.0000544678f, - 0.0001193245f, 0.0001761818f, 0.0002197499f, 0.0002459308f, 0.0002522801f, 0.0002382003f, 0.0002050537f, - 0.0023329977f, 0.0022744367f, 0.0021570870f, 0.0019806181f, 0.0017457340f, 0.0014542507f, 0.0011108455f, 0.0007223346f, - 0.0002992379f, -0.0001466015f, -0.0006012791f, -0.0010533907f, -0.0014941798f, -0.0019241070f, -0.0023530883f, -0.0028080809f, - -0.0033317792f, -0.0039896152f, -0.0048647785f, -0.0060629391f, -0.0077015456f, -0.0099112032f, -0.0128179487f, -0.0165415563f, - -0.0211707180f, -0.0267603854f, -0.0333010728f, -0.0407193019f, -0.0488429494f, -0.0574105466f, -0.0660338484f, -0.0742229694f, - -0.0813438415f, -0.0866673269f, -0.0893099408f, -0.0883179181f, -0.0825536818f, -0.0708351065f, -0.0516356322f, -0.0231563648f, - 0.0229208886f, 0.1000615986f, 0.2093510203f, 0.3390457527f, 0.4725528568f, 0.5906840617f, 0.6745849094f, 0.7082031015f, - 0.6806592553f, 0.5877917414f, 0.4330061655f, 0.2270823403f, -0.0128552066f, -0.2652258122f, -0.5063946175f, -0.7133884257f, - -0.8665187769f, -0.9516510020f, -0.9617959599f, -0.8978644321f, -0.7684707435f, -0.5888227503f, -0.3788375243f, -0.1607017417f, - 0.0437915599f, 0.2158527937f, 0.3418541386f, 0.4148932359f, 0.4353978994f, 0.4110138144f, 0.3553491439f, 0.2873311989f, - 0.2264012967f, 0.1778272597f, 0.1368656384f, 0.1016489237f, 0.0716971046f, 0.0466686361f, 0.0262587636f, 0.0101140856f, - -0.0021717142f, -0.0110521236f, -0.0170125125f, -0.0205483075f, -0.0221473891f, -0.0222696986f, -0.0213345382f, -0.0197075856f, - -0.0176958703f, -0.0155434695f, -0.0134339314f, -0.0114932096f, -0.0097973566f, -0.0083798220f, -0.0072413978f, -0.0063587120f, - -0.0056935805f, -0.0052001373f, -0.0048316507f, -0.0045448649f, -0.0043035469f, -0.0040798367f, -0.0038548953f, -0.0036180007f, - -0.0033653668f, -0.0030981742f, -0.0028208099f, -0.0025389671f, -0.0022582881f, -0.0019832510f, -0.0017166811f, -0.0014595950f, - -0.0012115153f, -0.0009709890f, -0.0007362895f, -0.0005061076f, -0.0002801409f, -0.0000595032f, 0.0001531427f, 0.0003536750f, - 0.0005368997f, 0.0006970650f, 0.0008285636f, 0.0009265836f, 0.0009877836f, 0.0010107351f, 0.0009962610f, 0.0009474346f, - 0.0008694403f, 0.0007691024f, 0.0006543506f, 0.0005334591f, 0.0004143726f, 0.0003039581f, 0.0002074999f, 0.0001282497f, - 0.0000673202f, 0.0000236838f, -0.0000054823f, -0.0000243922f, -0.0000379908f, -0.0000513567f, -0.0000689891f, -0.0000943029f, - -0.0001291385f, -0.0001735855f, -0.0002258909f, -0.0002827035f, -0.0003393834f, -0.0003905818f, -0.0004307882f, -0.0004550220f, - -0.0004593576f, -0.0004414605f, -0.0004008453f, -0.0003390565f, -0.0002595254f, -0.0001673445f, -0.0000687564f, 0.0000293658f, - 0.0001202144f, 0.0001976297f, 0.0002567251f, 0.0002942795f, 0.0003090663f, 0.0003018805f, 0.0002754671f, 0.0002341572f, - 0.0001834501f, 0.0001293884f, 0.0000779842f, 0.0000345648f, 0.0000032926f, -0.0000132797f, -0.0000143893f, -0.0000011447f, - 0.0000236778f, 0.0000559218f, 0.0000905679f, 0.0001222509f, 0.0001458957f, 0.0001572350f, 0.0001533249f, 0.0001328377f, - 0.0000962676f, 0.0000458655f, -0.0000145297f, -0.0000799026f, -0.0001445204f, -0.0002025425f, -0.0002485698f, -0.0002782267f, - -0.0002885684f, -0.0002784187f, -0.0002484615f, -0.0002012166f, -0.0001407652f, -0.0000723891f, -0.0000020250f, 0.0000642779f, - 0.0006545440f, 0.0006092123f, 0.0005211283f, 0.0003952715f, 0.0002383557f, 0.0000584198f, -0.0001362653f, -0.0003375075f, - -0.0005383555f, -0.0007329456f, -0.0009174331f, -0.0010891536f, -0.0012472468f, -0.0013911728f, -0.0015212364f, -0.0016367530f, - -0.0017368889f, -0.0018188830f, -0.0018796284f, -0.0019142370f, -0.0019185646f, -0.0018880671f, -0.0018210801f, -0.0017174793f, - -0.0015821304f, -0.0014225231f, -0.0012516143f, -0.0010835462f, -0.0009352781f, -0.0008198418f, -0.0007467438f, -0.0007129147f, - -0.0007027599f, -0.0006778296f, -0.0005783377f, -0.0003132968f, 0.0002340159f, 0.0012135056f, 0.0027962862f, 0.0051783222f, - 0.0085600080f, 0.0131460500f, 0.0191158420f, 0.0266218006f, 0.0357510579f, 0.0465271020f, 0.0588638446f, 0.0725784015f, - 0.0873370030f, 0.1026908595f, 0.1180068601f, 0.1325484280f, 0.1453642259f, 0.1554807068f, 0.1616648578f, 0.1632688310f, - 0.1549027767f, 0.1198428714f, 0.0449861804f, -0.0696229208f, -0.2158023005f, -0.3790883171f, -0.5408894679f, -0.6808851285f, - -0.7797705919f, -0.8217682544f, -0.7968116423f, -0.7019652931f, -0.5420418321f, -0.3292210214f, -0.0818128466f, 0.1777726196f, - 0.4255266516f, 0.6385776439f, 0.7977664747f, 0.8898038418f, 0.9086949642f, 0.8563086554f, 0.7419773576f, 0.5812252250f, - 0.3937408613f, 0.2008871303f, 0.0230173731f, -0.1230428784f, -0.2260664125f, -0.2818374636f, -0.2937072611f, -0.2733437698f, - -0.2408584071f, -0.2098412063f, -0.1806909043f, -0.1526536550f, -0.1261957677f, -0.1017094943f, -0.0795968657f, -0.0600974864f, - -0.0433545981f, -0.0293681726f, -0.0180470916f, -0.0092000126f, -0.0025796754f, 0.0021127195f, 0.0051910943f, 0.0069776293f, - 0.0077756050f, 0.0078657031f, 0.0074886765f, 0.0068470105f, 0.0060965069f, 0.0053530166f, 0.0046907222f, 0.0041521192f, - 0.0037501212f, 0.0034789031f, 0.0033170573f, 0.0032371863f, 0.0032080612f, 0.0032016671f, 0.0031933530f, 0.0031660244f, - 0.0031082781f, 0.0030162723f, 0.0028905427f, 0.0027365419f, 0.0025611068f, 0.0023726939f, 0.0021783369f, 0.0019843040f, - 0.0017939931f, 0.0016092783f, 0.0014293389f, 0.0012525382f, 0.0010758415f, 0.0008968234f, 0.0007132020f, 0.0005245511f, - 0.0003315658f, 0.0001372209f, -0.0000543880f, -0.0002374465f, -0.0004059085f, -0.0005532434f, -0.0006739838f, -0.0007634986f, - -0.0008192976f, -0.0008405529f, -0.0008289575f, -0.0007878678f, -0.0007226939f, -0.0006397231f, -0.0005461962f, -0.0004490215f, - -0.0003547907f, -0.0002686412f, -0.0001944601f, -0.0001340918f, -0.0000878707f, -0.0000542351f, -0.0000305758f, -0.0000131627f, - 0.0000018427f, 0.0000183480f, 0.0000393727f, 0.0000671196f, 0.0001022671f, 0.0001443061f, 0.0001911748f, 0.0002398911f, - 0.0002864880f, 0.0003268414f, 0.0003567538f, 0.0003727940f, 0.0003723297f, 0.0003541905f, 0.0003184856f, 0.0002669707f, - 0.0002025844f, 0.0001295158f, 0.0000525132f, -0.0000232393f, -0.0000928921f, -0.0001520697f, -0.0001975396f, -0.0002271978f, - -0.0002404958f, -0.0002381708f, - -0.0001556937f, -0.0002232588f, -0.0003000471f, -0.0003807341f, -0.0004589754f, -0.0005276096f, -0.0005796476f, -0.0006085059f, - -0.0006090117f, -0.0005773878f, -0.0005120302f, -0.0004130497f, -0.0002827174f, -0.0001245430f, 0.0000565230f, 0.0002553084f, - 0.0004662156f, 0.0006844691f, 0.0009056254f, 0.0011266188f, 0.0013448100f, 0.0015587720f, 0.0017669159f, 0.0019681955f, - 0.0021605643f, 0.0023419522f, 0.0025089038f, 0.0026581873f, 0.0027858518f, 0.0028896115f, 0.0029682393f, 0.0030244845f, - 0.0030642863f, 0.0030995791f, 0.0031464520f, 0.0032269718f, 0.0033653351f, 0.0035879808f, 0.0039171130f, 0.0043689626f, - 0.0049448001f, 0.0056281538f, 0.0063744051f, 0.0071088295f, 0.0077167468f, 0.0080450691f, 0.0078953687f, 0.0070318498f, - 0.0051792603f, 0.0020396552f, -0.0027043718f, -0.0093630158f, -0.0182327050f, -0.0295599145f, -0.0435368078f, -0.0602568291f, - -0.0797235538f, -0.1017981297f, -0.1262457047f, -0.1526688648f, -0.1806793505f, -0.2098138162f, -0.2408276962f, -0.2733223455f, - -0.2937063941f, -0.2818656143f, -0.2261282142f, -0.1231384900f, 0.0228924303f, 0.2007416620f, 0.3935871743f, 0.5810779624f, - 0.7418520015f, 0.8562199711f, 0.9086554096f, 0.8898222505f, 0.7978469922f, 0.6387191949f, 0.4257228188f, 0.1780121397f, - -0.0815452149f, -0.3289431293f, -0.5417726272f, -0.7017230773f, -0.7966125143f, -0.8216246380f, -0.7796902592f, -0.6808705368f, - -0.5409377623f, -0.3791916953f, -0.2159490132f, -0.0697984743f, 0.0447973984f, 0.1196560777f, 0.1547311650f, 0.1631223252f, - 0.1615491774f, 0.1553970134f, 0.1453090286f, 0.1325143072f, 0.1179833627f, 0.1026659817f, 0.0872986185f, 0.0725159741f, - 0.0587697393f, 0.0463978659f, 0.0355880008f, 0.0264313485f, 0.0189090552f, 0.0129379217f, 0.0083680105f, 0.0050209526f, - 0.0026911244f, 0.0011756268f, 0.0002742518f, -0.0001893835f, -0.0003713645f, -0.0003945662f, -0.0003559061f, -0.0003199311f, - -0.0003286406f, -0.0003992283f, -0.0005347052f, -0.0007234444f, -0.0009489211f, -0.0011892232f, -0.0014247925f, -0.0016368658f, - -0.0018128572f, -0.0019435092f, -0.0020262245f, -0.0020613098f, -0.0020539729f, -0.0020103196f, -0.0019388124f, -0.0018466470f, - -0.0017412840f, -0.0016275801f, -0.0015096821f, -0.0013889666f, -0.0012662678f, -0.0011404183f, -0.0010105747f, -0.0008750310f, - -0.0007333545f, -0.0005851730f, -0.0004319169f, -0.0002754165f, -0.0001192014f, 0.0000330890f, 0.0001767485f, 0.0003076493f, - 0.0004214404f, 0.0005150718f, 0.0005859601f, 0.0006332532f, 0.0006568484f, 0.0006583487f, 0.0006399242f, 0.0006050121f, - 0.0005571017f, 0.0005002994f, 0.0004381601f, 0.0003742519f, 0.0003111446f, 0.0002510679f, 0.0001951108f, 0.0001440004f, - 0.0000974938f, 0.0000552356f, 0.0000162701f, -0.0000201054f, -0.0000548020f, -0.0000881717f, -0.0001205191f, -0.0001514697f, - -0.0001805617f, -0.0002067517f, -0.0002290677f, -0.0002462077f, -0.0002572013f, -0.0002610364f, -0.0002572665f, -0.0002456071f, - -0.0002264461f, -0.0002003792f, -0.0001686145f, - -0.0002097915f, -0.0002547683f, -0.0002867440f, -0.0003037080f, -0.0003049864f, -0.0002912099f, -0.0002641320f, -0.0002263469f, - -0.0001809155f, -0.0001309730f, -0.0000793326f, -0.0000281672f, 0.0000212324f, 0.0000685537f, 0.0001144458f, 0.0001603457f, - 0.0002082167f, 0.0002601799f, 0.0003181336f, 0.0003833534f, 0.0004561750f, 0.0005357423f, 0.0006199091f, 0.0007052503f, - 0.0007872414f, 0.0008605303f, 0.0009193285f, 0.0009578246f, 0.0009706279f, 0.0009531437f, 0.0009018903f, 0.0008146822f, - 0.0006907085f, 0.0005304701f, 0.0003356294f, 0.0001087751f, -0.0001468322f, -0.0004275067f, -0.0007293282f, -0.0010482464f, - -0.0013801011f, -0.0017205409f, -0.0020649160f, -0.0024081360f, -0.0027446427f, -0.0030684675f, -0.0033735725f, -0.0036543691f, - -0.0039066272f, -0.0041285253f, -0.0043220448f, -0.0044942599f, -0.0046587239f, -0.0048362859f, -0.0050555995f, -0.0053524607f, - -0.0057684191f, -0.0063476637f, -0.0071329714f, -0.0081596433f, -0.0094487437f, -0.0109984997f, -0.0127758558f, -0.0147068954f, - -0.0166688890f, -0.0184823228f, -0.0199064468f, -0.0206359860f, -0.0203032667f, -0.0184822593f, -0.0146993237f, -0.0084456516f, - 0.0008037916f, 0.0135712038f, 0.0303539710f, 0.0516053773f, 0.0777267032f, 0.1090646438f, 0.1459928995f, 0.1890045882f, - 0.2399569411f, 0.3035491657f, 0.3744326411f, 0.4330381754f, 0.4602649242f, 0.4422767198f, 0.3711532515f, 0.2461380555f, - 0.0737670473f, -0.1327449736f, -0.3550430014f, -0.5718089399f, -0.7613406410f, -0.9042683903f, -0.9859824923f, -0.9986999813f, - -0.9431316453f, -0.8322426947f, -0.6838587489f, -0.5090121248f, -0.3164353275f, -0.1160643779f, 0.0821150478f, 0.2684309672f, - 0.4341770987f, 0.5719923883f, 0.6762928566f, 0.7434950500f, 0.7721889543f, 0.7631234448f, 0.7191049971f, 0.6447409999f, - 0.5461062812f, 0.4303073808f, 0.3050115994f, 0.1779422698f, 0.0563953149f, -0.0532072816f, -0.1456894384f, -0.2173979596f, - -0.2663715333f, -0.2923808160f, -0.2968590700f, -0.2826977783f, -0.2539702782f, -0.2155328992f, -0.1726410340f, -0.1304388234f, - -0.0937203765f, -0.0651894568f, -0.0434204585f, -0.0262320261f, -0.0128620020f, -0.0027758731f, 0.0045023778f, 0.0094378307f, - 0.0124649620f, 0.0139956053f, 0.0143989384f, 0.0140037462f, 0.0130866052f, 0.0118760507f, 0.0105485285f, 0.0092355458f, - 0.0080250843f, 0.0069705449f, 0.0060949377f, 0.0053998515f, 0.0048701054f, 0.0044812646f, 0.0042032151f, 0.0040054335f, - 0.0038588251f, 0.0037386836f, 0.0036248683f, 0.0035029301f, 0.0033631517f, 0.0032005638f, 0.0030135068f, 0.0028032324f, - 0.0025725319f, 0.0023254060f, 0.0020660644f, 0.0017988746f, 0.0015277862f, 0.0012565431f, 0.0009884144f, 0.0007265302f, - 0.0004737413f, 0.0002329236f, 0.0000068230f, -0.0002017617f, -0.0003902098f, -0.0005560211f, -0.0006970975f, -0.0008117494f, - -0.0008989567f, -0.0009583547f, -0.0009904048f, -0.0009962992f, -0.0009780085f, -0.0009380932f, -0.0008796449f, -0.0008060398f, - -0.0007208281f, -0.0006274895f, -0.0005293371f, -0.0004293314f, -0.0003300469f, -0.0002335751f, -0.0001415683f, -0.0000552272f, - 0.0000245975f, 0.0000973664f, 0.0001627306f, 0.0002204858f, 0.0002704729f, 0.0003125597f, 0.0003465872f, 0.0003723927f, - 0.0003898040f, 0.0003986947f, 0.0003990072f, 0.0003908172f, 0.0003743577f, 0.0003500669f, 0.0003185900f, 0.0002807935f, - 0.0002377348f, 0.0001906413f, 0.0001408526f, 0.0000897771f, 0.0000388229f, -0.0000106507f, -0.0000573934f, -0.0001003004f, - -0.0001384514f, -0.0001711250f, -0.0001978125f, -0.0002182105f, -0.0002322144f, -0.0002398964f, -0.0002414880f, - -0.0001596129f, -0.0001562496f, -0.0001498931f, -0.0001412337f, -0.0001312006f, -0.0001208315f, -0.0001111500f, -0.0001030067f, - -0.0000969764f, -0.0000932334f, -0.0000915268f, -0.0000911372f, -0.0000909596f, -0.0000895515f, -0.0000853138f, -0.0000765980f, - -0.0000619367f, -0.0000401498f, -0.0000105563f, 0.0000269865f, 0.0000719478f, 0.0001231977f, 0.0001789736f, 0.0002370733f, - 0.0002949065f, 0.0003497691f, 0.0003989259f, 0.0004399015f, 0.0004705253f, 0.0004891741f, 0.0004947225f, 0.0004866983f, - 0.0004651169f, 0.0004305530f, 0.0003838811f, 0.0003263054f, 0.0002590637f, 0.0001834786f, 0.0001006881f, 0.0000117772f, - -0.0000824234f, -0.0001810986f, -0.0002835801f, -0.0003890188f, -0.0004964869f, -0.0006046168f, -0.0007117406f, -0.0008155628f, - -0.0009134018f, -0.0010019440f, -0.0010776210f, -0.0011364499f, -0.0011745303f, -0.0011879291f, -0.0011732401f, -0.0011274376f, - -0.0010484260f, -0.0009347877f, -0.0007862674f, -0.0006033735f, -0.0003877877f, -0.0001418301f, 0.0001311620f, 0.0004274542f, - 0.0007424943f, 0.0010715568f, 0.0014092217f, 0.0017500212f, 0.0020878151f, 0.0024164922f, 0.0027293133f, 0.0030197921f, - 0.0032811287f, 0.0035074177f, 0.0036932727f, 0.0038354464f, 0.0039326233f, 0.0039873724f, 0.0040058742f, 0.0039999004f, - 0.0039859967f, 0.0039869775f, 0.0040299079f, 0.0041465214f, 0.0043693426f, 0.0047305856f, 0.0052560067f, 0.0059622775f, - 0.0068486582f, 0.0078935236f, 0.0090446101f, 0.0102161743f, 0.0112791696f, 0.0120612232f, 0.0123383309f, 0.0118401814f, - 0.0102443788f, 0.0071893168f, 0.0022697611f, -0.0049422577f, -0.0149080197f, -0.0281014987f, -0.0450597042f, -0.0665503452f, - -0.0947658820f, -0.1311459738f, -0.1730055990f, -0.2155698254f, -0.2537148355f, -0.2822005637f, -0.2961808714f, -0.2915797030f, - -0.2654897618f, -0.2164403253f, -0.1446028708f, -0.0518524544f, 0.0582677361f, 0.1807212874f, 0.3092454104f, 0.4367256082f, - 0.5556248313f, 0.6584663388f, 0.7383128514f, 0.7892352587f, 0.8067145259f, 0.7879751516f, 0.7322001587f, 0.6406413437f, - 0.5165833320f, 0.3651995965f, 0.1932631326f, 0.0087845907f, -0.1794730708f, -0.3624711894f, -0.5314826505f, -0.6784496714f, - -0.7975387008f, -0.8869066714f, -0.9460978228f, -0.9743683484f, -0.9716887763f, -0.9388912477f, -0.8776913880f, -0.7906217616f, - -0.6809617759f, -0.5526158639f, -0.4099903122f, -0.2578384472f, -0.1011091221f, 0.0552204273f, 0.2063009082f, 0.3475689337f, - 0.4748858634f, 0.5846665399f, 0.6739816770f, 0.7406414471f, 0.7832480152f, 0.8012243690f, 0.7948108464f, 0.7650372454f, - 0.7136651972f, 0.6431094919f, 0.5563357930f, 0.4567441179f, 0.3480375726f, 0.2340859886f, 0.1187851647f, 0.0059210218f, - -0.1009603020f, -0.1986681163f, -0.2844680876f, -0.3561617036f, -0.4121449494f, -0.4514415411f, -0.4737129527f, -0.4792427680f, - -0.4688992715f, -0.4440758562f, -0.4066146191f, -0.3587143469f, -0.3028292405f, -0.2415605597f, -0.1775478604f, -0.1133622284f, - -0.0514077865f, 0.0061666480f, 0.0575405302f, 0.1012784567f, 0.1363672493f, 0.1622340919f, 0.1787438032f, 0.1861777807f, - 0.1851944065f, 0.1767749919f, 0.1621564237f, 0.1427557163f, 0.1200884424f, 0.0956867818f, 0.0710192746f, 0.0474178663f, - 0.0260137499f, 0.0076867119f, -0.0069716085f, -0.0176776741f, -0.0244598245f, -0.0276479905f, -0.0278485265f, -0.0259604376f, - -0.0231942463f, -0.0203712397f, -0.0176250103f, -0.0150030188f, -0.0125853805f, -0.0104245492f, -0.0085536471f, -0.0069822366f, - -0.0057037888f, -0.0046971305f, -0.0039324091f, -0.0033733475f, -0.0029816582f, -0.0027187689f, -0.0025487112f, -0.0024389400f, - -0.0023618935f, -0.0022949607f, -0.0022210429f, -0.0021279181f, -0.0020081783f, -0.0018582858f, -0.0016782193f, -0.0014704729f, - -0.0012396507f, -0.0009915718f, -0.0007329515f, -0.0004706874f, -0.0002116789f, 0.0000376970f, 0.0002716276f, 0.0004852251f, - 0.0006744554f, 0.0008363689f, 0.0009689456f, 0.0010712272f, 0.0011431025f, 0.0011853673f, 0.0011994712f, 0.0011875293f, - 0.0011520531f, 0.0010959403f, 0.0010222139f, 0.0009340189f, 0.0008343934f, 0.0007262955f, 0.0006124255f, 0.0004952948f, - 0.0003771045f, 0.0002598545f, 0.0001452665f, 0.0000349171f, -0.0000698172f, -0.0001676287f, -0.0002573385f, -0.0003377893f, - -0.0004079306f, -0.0004667485f, -0.0005133801f, -0.0005470765f, -0.0005673356f, -0.0005738781f, -0.0005667759f, -0.0005464152f, - -0.0005135934f, -0.0004694478f, -0.0004155042f, -0.0003535607f, -0.0002856874f, -0.0002140732f, -0.0001409939f, -0.0000686445f, - 0.0000008966f, 0.0000658187f, 0.0001245893f, 0.0001760633f, 0.0002194479f, 0.0002543579f, 0.0002807311f, 0.0002988367f, - 0.0003091550f, 0.0003123597f, 0.0003091881f, 0.0003004253f, 0.0002867930f, 0.0002689588f, 0.0002474626f, 0.0002227630f, - 0.0001952039f, 0.0001650929f, 0.0001326952f, 0.0000983261f, 0.0000623480f, 0.0000252528f, -0.0000123602f, -0.0000497334f, - -0.0000860060f, -0.0001202016f, -0.0001513162f, -0.0001783353f, -0.0002003408f, -0.0002165359f, -0.0002263463f, -0.0002294298f, - -0.0002257477f, -0.0002155386f, -0.0001993478f, -0.0001779591f, -0.0001523829f, -0.0001237555f, -0.0000933024f, -0.0000622262f, - -0.0000316695f, -0.0000026169f, 0.0000241191f, 0.0000479620f, 0.0000685482f, 0.0000857501f, 0.0000996158f, 0.0001103594f, - 0.0001182780f, 0.0001237279f, 0.0001270411f, 0.0001285109f, 0.0001283284f, 0.0001265953f, 0.0001232928f, 0.0001183261f, - 0.0001115250f, 0.0001027124f, 0.0000917214f, 0.0000784695f, 0.0000629720f, 0.0000454005f, 0.0000260736f, 0.0000054844f, - -0.0000157413f, -0.0000368512f, -0.0000570374f, -0.0000754661f, -0.0000913623f, -0.0001040431f, -0.0001129942f, - -0.0001518039f, -0.0001490944f, -0.0001437563f, -0.0001359447f, -0.0001258775f, -0.0001138183f, -0.0001000584f, -0.0000848958f, - -0.0000686184f, -0.0000514869f, -0.0000337271f, -0.0000155230f, 0.0000029786f, 0.0000216627f, 0.0000404299f, 0.0000591833f, - 0.0000778062f, 0.0000961486f, 0.0001140075f, 0.0001311212f, 0.0001471607f, 0.0001617373f, 0.0001744077f, 0.0001846979f, - 0.0001921197f, 0.0001962050f, 0.0001965285f, 0.0001927436f, 0.0001846019f, 0.0001719815f, 0.0001548948f, 0.0001335028f, - 0.0001081065f, 0.0000791461f, 0.0000471762f, 0.0000128542f, -0.0000230952f, -0.0000598950f, -0.0000967535f, -0.0001328756f, - -0.0001674945f, -0.0001998742f, -0.0002293319f, -0.0002552303f, -0.0002769922f, -0.0002940867f, -0.0003060409f, -0.0003124253f, - -0.0003128705f, -0.0003070572f, -0.0002947414f, -0.0002757524f, -0.0002500272f, -0.0002176130f, -0.0001787066f, -0.0001336551f, - -0.0000829924f, -0.0000274293f, 0.0000321218f, 0.0000945733f, 0.0001586548f, 0.0002229603f, 0.0002859566f, 0.0003460483f, - 0.0004015979f, 0.0004510007f, 0.0004927070f, 0.0005252984f, 0.0005475019f, 0.0005582587f, 0.0005567241f, 0.0005423236f, - 0.0005147357f, 0.0004739352f, 0.0004201606f, 0.0003539484f, 0.0002760880f, 0.0001876525f, 0.0000899450f, -0.0000154720f, - -0.0001268367f, -0.0002421597f, -0.0003592929f, -0.0004759036f, -0.0005895563f, -0.0006976915f, -0.0007977237f, -0.0008870259f, - -0.0009630432f, -0.0010232813f, -0.0010654313f, -0.0010873564f, -0.0010872233f, -0.0010634782f, -0.0010149807f, -0.0009409632f, - -0.0008411655f, -0.0007157758f, -0.0005655665f, -0.0003918178f, -0.0001964570f, 0.0000180385f, 0.0002485007f, 0.0004912017f, - 0.0007417257f, 0.0009951609f, 0.0012460131f, 0.0014884994f, 0.0017165405f, 0.0019242012f, 0.0021057906f, 0.0022564772f, - 0.0023724911f, 0.0024518980f, 0.0024948363f, 0.0025043647f, 0.0024865838f, 0.0024513953f, 0.0024122725f, 0.0023867094f, - 0.0023953488f, 0.0024618909f, 0.0026112876f, 0.0028689594f, 0.0032578396f, 0.0037969386f, 0.0044971599f, 0.0053595648f, - 0.0063700240f, 0.0074979980f, 0.0086900568f, 0.0098707813f, 0.0109344936f, 0.0117523261f, 0.0121588428f, 0.0119927747f, - 0.0108338004f, 0.0076669462f, 0.0015951619f, -0.0077015608f, -0.0201874668f, -0.0355062002f, -0.0530094339f, -0.0717877750f, - -0.0907221346f, -0.1085412898f, -0.1238936126f, -0.1354215686f, -0.1418421064f, -0.1420235850f, -0.1350600376f, -0.1203351392f, - -0.0975759142f, -0.0668903695f, -0.0287893898f, 0.0158109005f, 0.0656049927f, 0.1189337419f, 0.1738373906f, 0.2281255290f, - 0.2794600956f, 0.3254494085f, 0.3637483740f, 0.3921617568f, 0.4087452458f, 0.4119008001f, 0.4004612717f, 0.3737611396f, - 0.3316892920f, 0.2747217255f, 0.2039316066f, 0.1209761088f, 0.0280593378f, -0.0721274395f, -0.1764869974f, -0.2816158102f, - -0.3839191559f, -0.4797372694f, -0.5654782669f, -0.6377526073f, -0.6935042311f, -0.7301330421f, -0.7456040786f, -0.7385387273f, - -0.7082842960f, -0.6549586998f, -0.5794681743f, -0.4834966938f, -0.3694669951f, -0.2404740552f, -0.1001929952f, 0.0472356415f, - 0.1973394347f, 0.3454617961f, 0.4869187455f, 0.6171590292f, 0.7319219537f, 0.8273869572f, 0.9003096301f, 0.9481388242f, - 0.9691107389f, 0.9623160652f, 0.9277378915f, 0.8662587282f, 0.7796363134f, 0.6704507997f, 0.5420235210f, 0.3983429587f, - 0.2439770306f, 0.0835515600f, -0.0785437339f, -0.2379253926f, -0.3902709949f, -0.5314762215f, -0.6577657562f, -0.7658017175f, - -0.8527727865f, -0.9164711922f, -0.9553496178f, -0.9685606622f, -0.9559747754f, -0.9181785555f, -0.8564517514f, -0.7727251920f, - -0.6695198086f, -0.5498696134f, -0.4172301964f, -0.2753762088f, -0.1282903603f, 0.0199522336f, 0.1653013209f, 0.3038465453f, - 0.4319271716f, 0.5462330255f, 0.6438939828f, 0.7225552652f, 0.7804366545f, 0.8163739029f, 0.8298414763f, 0.8209560951f, - 0.7904613476f, 0.7396940415f, 0.6705336701f, 0.5853367342f, 0.4868582109f, 0.3781627335f, 0.2625283931f, 0.1433461974f, - 0.0240183452f, -0.0921415681f, -0.2020034062f, -0.3027076056f, -0.3917420558f, -0.4670065944f, -0.5268634348f, -0.5701722713f, - -0.5963093708f, -0.6051704118f, -0.5971574290f, -0.5731506218f, -0.5344663552f, -0.4828029698f, -0.4201764962f, -0.3488485038f, - -0.2712486558f, -0.1898944962f, -0.1073111782f, -0.0259536082f, 0.0518664854f, 0.1240464667f, 0.1887496815f, 0.2444518757f, - 0.2899758594f, 0.3245137882f, 0.3476366187f, 0.3592909899f, 0.3597839221f, 0.3497564092f, 0.3301470195f, 0.3021472383f, - 0.2671501836f, 0.2266948496f, 0.1824077493f, 0.1359442498f, 0.0889314191f, 0.0429145298f, -0.0006912934f, -0.0406425334f, - -0.0759009165f, -0.1056580541f, -0.1293508553f, -0.1466672055f, -0.1575424230f, -0.1621466320f, -0.1608642639f, -0.1542663510f, - -0.1430773876f, -0.1281377523f, -0.1103638299f, -0.0907069045f, -0.0701130981f, -0.0494852310f, -0.0296487968f, -0.0113224665f, - 0.0049049322f, 0.0185912359f, 0.0294499482f, 0.0373525686f, 0.0423229093f, 0.0445255530f, 0.0442471860f, 0.0418741009f, - 0.0378642492f, 0.0327185225f, 0.0269484800f, 0.0210472303f, 0.0154578360f, 0.0105498876f, 0.0065912187f, 0.0037323571f, - 0.0018671281f, 0.0006505029f, -0.0001484215f, -0.0006222332f, -0.0008521845f, -0.0009057969f, -0.0008424506f, -0.0007103595f, - -0.0005491202f, -0.0003884807f, -0.0002503188f, -0.0001485007f, -0.0000907440f, -0.0000790482f, -0.0001114146f, -0.0001824655f, - -0.0002849020f, -0.0004100554f, -0.0005489962f, -0.0006928821f, -0.0008336988f, -0.0009643687f, -0.0010791665f, -0.0011736223f, - -0.0012446927f, -0.0012905298f, -0.0013105005f, -0.0013048967f, -0.0012748875f, -0.0012222325f, -0.0011492257f, -0.0010584505f, - -0.0009527473f, -0.0008350241f, -0.0007082563f, -0.0005753473f, -0.0004391546f, -0.0003023856f, -0.0001676358f, -0.0000373054f, - 0.0000863632f, 0.0002013598f, 0.0003058750f, 0.0003983709f, 0.0004775550f, 0.0005424460f, 0.0005923474f, 0.0006269020f, - 0.0006460595f, 0.0006501134f, 0.0006396557f, 0.0006155940f, 0.0005790906f, 0.0005315601f, 0.0004745961f, 0.0004099540f, - 0.0003394710f, 0.0002650418f, 0.0001885408f, 0.0001117995f, 0.0000365379f, -0.0000356487f, -0.0001033434f, -0.0001653071f, - -0.0002205157f, -0.0002681453f, -0.0003075938f, -0.0003384554f, -0.0003605306f, -0.0003737941f, -0.0003783989f, -0.0003746427f, - -0.0003629698f, -0.0003439392f, -0.0003182272f, -0.0002865979f, -0.0002499066f, -0.0002090714f, -0.0001650754f, -0.0001189372f, - -0.0000717098f, -0.0000244485f, 0.0000217960f, 0.0000660121f, 0.0001072384f, 0.0001445996f, 0.0001773182f, 0.0002047476f, - 0.0002263802f, 0.0002418727f, 0.0002510450f, 0.0002538948f, 0.0002505843f, 0.0002414409f, 0.0002269326f, 0.0002076567f, - 0.0001843057f, 0.0001576490f, 0.0001284948f, 0.0000976709f, 0.0000659883f, 0.0000342273f, 0.0000031084f, -0.0000267131f, - -0.0000546656f, -0.0000802581f, -0.0001030882f, -0.0001228320f, -0.0001392462f, -0.0001521538f, -0.0001614454f, -0.0001670654f, - -0.0001690150f, -0.0001673428f, -0.0001621512f, -0.0001535906f, -0.0001418693f, -0.0001272490f, -0.0001100543f, -0.0000906661f, - -0.0000695268f, -0.0000471286f, -0.0000240107f, -0.0000007413f, 0.0000220928f, 0.0000439109f, 0.0000641527f, 0.0000823053f, - 0.0000979177f, 0.0001106244f, 0.0001201540f, 0.0001263447f, 0.0001291432f, 0.0001286087f, 0.0001249010f, 0.0001182738f, - -0.0000677642f, -0.0000523826f, -0.0000355858f, -0.0000177135f, 0.0000008632f, 0.0000197497f, 0.0000385362f, 0.0000568069f, - 0.0000741490f, 0.0000901630f, 0.0001044714f, 0.0001167282f, 0.0001266271f, 0.0001339090f, 0.0001383682f, 0.0001398580f, - 0.0001382933f, 0.0001336542f, 0.0001259858f, 0.0001153988f, 0.0001020662f, 0.0000862221f, 0.0000681561f, 0.0000482094f, - 0.0000267679f, 0.0000042570f, -0.0000188674f, -0.0000421254f, -0.0000650225f, -0.0000870579f, -0.0001077348f, -0.0001265690f, - -0.0001431007f, -0.0001569032f, -0.0001675946f, -0.0001748464f, -0.0001783945f, -0.0001780466f, -0.0001736910f, -0.0001653012f, - -0.0001529419f, -0.0001367694f, -0.0001170335f, -0.0000940728f, -0.0000683121f, -0.0000402526f, -0.0000104645f, 0.0000204271f, - 0.0000517530f, 0.0000828177f, 0.0001129118f, 0.0001413312f, 0.0001673905f, 0.0001904409f, 0.0002098828f, 0.0002251816f, - 0.0002358781f, 0.0002416012f, 0.0002420750f, 0.0002371285f, 0.0002266990f, 0.0002108387f, 0.0001897144f, 0.0001636105f, - 0.0001329251f, 0.0000981694f, 0.0000599596f, 0.0000190121f, -0.0000238695f, -0.0000678035f, -0.0001118486f, -0.0001550177f, - -0.0001963012f, -0.0002346852f, -0.0002691787f, -0.0002988340f, -0.0003227757f, -0.0003402211f, -0.0003505078f, -0.0003531107f, - -0.0003476646f, -0.0003339751f, -0.0003120340f, -0.0002820207f, -0.0002443090f, -0.0001994588f, -0.0001482132f, -0.0000914813f, - -0.0000303277f, 0.0000340527f, 0.0001003514f, 0.0001671757f, 0.0002330697f, 0.0002965468f, 0.0003561116f, 0.0004102952f, - 0.0004576768f, 0.0004969199f, 0.0005267939f, 0.0005462097f, 0.0005542410f, 0.0005501582f, 0.0005334466f, 0.0005038372f, - 0.0004613187f, 0.0004061612f, 0.0003389189f, 0.0002604423f, 0.0001718676f, 0.0000746148f, -0.0000296392f, -0.0001389767f, - -0.0002512831f, -0.0003642749f, -0.0004755563f, -0.0005826556f, -0.0006830878f, -0.0007743933f, -0.0008542007f, -0.0009202618f, - -0.0009705111f, -0.0010030942f, -0.0010164239f, -0.0010092036f, -0.0009804838f, -0.0009296846f, -0.0008566574f, -0.0007617096f, - -0.0006456731f, -0.0005099278f, -0.0003564679f, -0.0001879096f, -0.0000075330f, 0.0001807554f, 0.0003724395f, 0.0005625175f, - 0.0007456177f, 0.0009162481f, 0.0010690442f, 0.0011991672f, 0.0013026871f, 0.0013771151f, 0.0014218793f, 0.0014389208f, - 0.0014331600f, 0.0014130261f, 0.0013907522f, 0.0013826603f, 0.0014090891f, 0.0014942408f, 0.0016655626f, 0.0019530043f, - 0.0023877813f, 0.0030010282f, 0.0038221874f, 0.0048773753f, 0.0061889900f, 0.0077755997f, 0.0096751224f, 0.0119741302f, - 0.0145439912f, 0.0169456183f, 0.0187073400f, 0.0194030360f, 0.0186550704f, 0.0161628228f, 0.0117223361f, 0.0052458122f, - -0.0032269514f, -0.0135216735f, -0.0253307510f, -0.0382203402f, -0.0516449105f, -0.0649674012f, -0.0774853341f, -0.0884609329f, - -0.0971548077f, -0.1028611423f, -0.1049434729f, -0.1028690049f, -0.0962403901f, -0.0848231076f, -0.0685674901f, -0.0476239362f, - -0.0223507100f, 0.0066865637f, 0.0387237751f, 0.0728157951f, 0.1078619795f, 0.1426392416f, 0.1758415350f, 0.2061246656f, - 0.2321547755f, 0.2526589705f, 0.2664761293f, 0.2726061478f, 0.2702555997f, 0.2588781212f, 0.2382077111f, 0.2082835801f, - 0.1694652065f, 0.1224367910f, 0.0682004341f, 0.0080579540f, -0.0564185505f, -0.1234266811f, -0.1909833663f, -0.2569826708f, - -0.3192601922f, -0.3756619825f, -0.4241159008f, -0.4627029725f, -0.4897264437f, -0.5037760457f, -0.5037852577f, -0.4890793474f, - -0.4594123986f, -0.4149916704f, -0.3564881936f, -0.2850327525f, -0.2021970477f, -0.1099601299f, -0.0106608717f, 0.0930624757f, - 0.1983439454f, 0.3021708437f, 0.4014716150f, 0.4932080681f, 0.5744690342f, 0.6425626416f, 0.6951041455f, 0.7300965662f, - 0.7460013189f, 0.7417965309f, 0.7170208283f, 0.6718010612f, 0.6068626327f, 0.5235219179f, 0.4236604995f, 0.3096818407f, - 0.1844512322f, 0.0512207469f, -0.0864589501f, -0.2248372460f, -0.3600700554f, -0.4883307618f, -0.6059225628f, -0.7093885522f, - -0.7956164474f, -0.8619344004f, -0.9061952044f, -0.9268458353f, -0.9229804407f, -0.8943745512f, -0.8414997451f, -0.7655175933f, - -0.6682534406f, -0.5521499681f, -0.4202024874f, -0.2758769248f, -0.1230137793f, 0.0342802674f, 0.1917486212f, 0.3451070280f, - 0.4901663081f, 0.6229542130f, 0.7398298367f, 0.8375910214f, 0.9135663759f, 0.9656969770f, 0.9925961604f, 0.9936618731f, - 0.9690844417f, 0.9196504635f, 0.8467117373f, 0.7522210603f, 0.6386799560f, 0.5090760386f, 0.3668025779f, 0.2155702981f, - 0.0593086479f, -0.0979369079f, -0.2521117236f, -0.3992577525f, -0.5356173001f, -0.6577304376f, -0.7625247715f, -0.8473940864f, - -0.9102647317f, -0.9496471895f, -0.9646722171f, -0.9551100144f, -0.9213725472f, -0.8644985297f, -0.7861220221f, -0.6884251575f, - -0.5740767467f, -0.4461581538f, -0.3080788471f, -0.1634836803f, -0.0161547423f, 0.1300897818f, 0.2714967454f, 0.4044766502f, - 0.5256968794f, 0.6321672656f, 0.7213155657f, 0.7910510602f, 0.8398145087f, 0.8666133944f, 0.8710415117f, 0.8532826677f, - 0.8140984457f, 0.7548006627f, 0.6772093367f, 0.5835975864f, 0.4766250203f, 0.3592616720f, 0.2347045793f, 0.1062894680f, - -0.0226000741f, -0.1486233373f, -0.2685707508f, -0.3794472128f, -0.4785483597f, -0.5635277262f, -0.6324531653f, -0.6838510882f, - -0.7167375675f, -0.7306356074f, -0.7255783918f, -0.7020986046f, -0.6612044089f, -0.6043429290f, -0.5333525140f, -0.4504052564f, - -0.3579415767f, -0.2585987895f, -0.1551357820f, -0.0503559257f, 0.0529695663f, 0.1521757603f, 0.2447735547f, 0.3285128639f, - 0.4014377748f, 0.4619323450f, 0.5087559395f, 0.5410673824f, 0.5584374718f, 0.5608498058f, 0.5486901404f, 0.5227248799f, - 0.4840695396f, 0.4341483415f, 0.3746462780f, 0.3074552135f, 0.2346156774f, 0.1582561348f, 0.0805315031f, 0.0035627058f, - -0.0706210625f, -0.1401357650f, -0.2032902555f, -0.2586270896f, -0.3049554547f, -0.3413754822f, -0.3672935096f, -0.3824281003f, - -0.3868069422f, -0.3807549745f, -0.3648743722f, -0.3400172139f, -0.3072518737f, -0.2678243125f, -0.2231155831f, -0.1745969158f, - -0.1237838039f, -0.0721904757f, -0.0212861041f, 0.0275460057f, 0.0730451234f, 0.1141047432f, 0.1497983924f, 0.1793990348f, - 0.2023917050f, 0.2184792403f, 0.2275811871f, 0.2298261737f, 0.2255382274f, 0.2152176942f, 0.1995175598f, 0.1792160900f, - 0.1551867943f, 0.1283667617f, 0.0997244393f, 0.0702278948f, 0.0408145632f, 0.0123633806f, -0.0143298873f, -0.0385734628f, - -0.0597959924f, -0.0775582602f, -0.0915599770f, -0.1016416466f, -0.1077816401f, -0.1100888003f, -0.1087910023f, -0.1042202530f, - -0.0967949724f, -0.0870002132f, -0.0753665756f, -0.0624486407f, -0.0488036800f, -0.0349714234f, -0.0214555345f, -0.0087074338f, - 0.0028870743f, 0.0130179511f, 0.0214576480f, 0.0280642424f, 0.0327810674f, 0.0356329290f, 0.0367192621f, 0.0362045427f, - 0.0343065259f, 0.0312827821f, 0.0274162441f, 0.0230002982f, 0.0183241826f, 0.0136591847f, 0.0092463500f, 0.0052860575f, - 0.0019300215f, -0.0007241258f, -0.0026354098f, -0.0038192546f, -0.0043449892f, -0.0043308242f, -0.0039467893f, -0.0034183427f, - -0.0028980777f, -0.0024111931f, -0.0019661658f, -0.0015766458f, -0.0012505436f, -0.0009916652f, -0.0007991070f, -0.0006687325f, - -0.0005935987f, -0.0005651424f, -0.0005737315f, -0.0006095407f, -0.0006629742f, -0.0007252278f, -0.0007885086f, -0.0008463178f, - -0.0008934778f, -0.0009262011f, -0.0009419761f, -0.0009394996f, -0.0009184875f, -0.0008795438f, -0.0008239543f, -0.0007535478f, - -0.0006705140f, -0.0005772899f, -0.0004764213f, -0.0003704871f, -0.0002620058f, -0.0001533948f, -0.0000469126f, 0.0000553574f, - 0.0001515421f, 0.0002399825f, 0.0003192564f, 0.0003881782f, 0.0004458153f, 0.0004914859f, 0.0005247706f, 0.0005455066f, - 0.0005537921f, 0.0005499733f, 0.0005346385f, 0.0005085956f, 0.0004728546f, 0.0004285952f, 0.0003771392f, 0.0003199107f, - 0.0002584034f, 0.0001941376f, 0.0001286276f, 0.0000633423f, -0.0000003230f, -0.0000610784f, -0.0001177585f, -0.0001693439f, - -0.0002149716f, -0.0002539451f, -0.0002857364f, -0.0003099879f, -0.0003265074f, -0.0003352642f, -0.0003363800f, -0.0003301214f, - -0.0003168882f, -0.0002972036f, -0.0002717009f, -0.0002411115f, -0.0002062492f, -0.0001679960f, -0.0001272837f, -0.0000850767f, - -0.0000423512f, -0.0000000757f, 0.0000408118f, 0.0000794235f, 0.0001149437f, 0.0001466472f, 0.0001739170f, 0.0001962578f, - 0.0002133072f, 0.0002248417f, 0.0002307793f, 0.0002311773f, 0.0002262259f, 0.0002162377f, 0.0002016344f, 0.0001829302f, - 0.0001607141f, 0.0001356302f, 0.0001083590f, 0.0000795981f, 0.0000500456f, 0.0000203831f, -0.0000087366f, -0.0000367025f, - -0.0000629538f, -0.0000869878f, -0.0001083652f, -0.0001267149f, -0.0001417362f, -0.0001532019f, -0.0001609587f, -0.0001649294f, - -0.0001651125f, -0.0001615824f, -0.0001544884f, -0.0001440526f, -0.0001305669f, -0.0001143883f, -0.0000959318f, -0.0000756626f, - -0.0000540855f, -0.0000317331f, -0.0000091523f, 0.0000131100f, 0.0000345222f, 0.0000545822f, 0.0000728319f, 0.0000888696f, - 0.0001023607f, 0.0001130460f, 0.0001207471f, 0.0001253683f, 0.0001268968f, 0.0001253988f, 0.0001210137f, 0.0001139460f, - -0.0000409890f, -0.0000231831f, -0.0000044979f, 0.0000146405f, 0.0000337894f, 0.0000524983f, 0.0000703210f, 0.0000868245f, - 0.0001016007f, 0.0001142746f, 0.0001245146f, 0.0001320387f, 0.0001366230f, 0.0001381059f, 0.0001363940f, 0.0001314632f, - 0.0001233624f, 0.0001122120f, 0.0000982042f, 0.0000815988f, 0.0000627207f, 0.0000419531f, 0.0000197321f, -0.0000034635f, - -0.0000271191f, -0.0000506974f, -0.0000736478f, -0.0000954205f, -0.0001154773f, -0.0001333068f, -0.0001484351f, -0.0001604403f, - -0.0001689621f, -0.0001737145f, -0.0001744920f, -0.0001711796f, -0.0001637549f, -0.0001522934f, -0.0001369666f, -0.0001180419f, - -0.0000958757f, -0.0000709093f, -0.0000436571f, -0.0000146989f, 0.0000153358f, 0.0000457778f, 0.0000759362f, 0.0001051099f, - 0.0001326066f, 0.0001577542f, 0.0001799192f, 0.0001985179f, 0.0002130330f, 0.0002230225f, 0.0002281351f, 0.0002281154f, - 0.0002228168f, 0.0002122035f, 0.0001963592f, 0.0001754845f, 0.0001499022f, 0.0001200490f, 0.0000864751f, 0.0000498314f, - 0.0000108634f, -0.0000296076f, -0.0000706952f, -0.0001114718f, -0.0001509832f, -0.0001882759f, -0.0002224138f, -0.0002525068f, - -0.0002777271f, -0.0002973368f, -0.0003107015f, -0.0003173138f, -0.0003168019f, -0.0003089482f, -0.0002936908f, -0.0002711354f, - -0.0002415497f, -0.0002053687f, -0.0001631812f, -0.0001157294f, -0.0000638885f, -0.0000086610f, 0.0000488496f, 0.0001074488f, - 0.0001658824f, 0.0002228496f, 0.0002770388f, 0.0003271423f, 0.0003718955f, 0.0004100930f, 0.0004406281f, 0.0004625082f, - 0.0004748944f, 0.0004771120f, 0.0004686867f, 0.0004493486f, 0.0004190617f, 0.0003780176f, 0.0003266564f, 0.0002656483f, - 0.0001959041f, 0.0001185450f, 0.0000349034f, -0.0000535185f, -0.0001450543f, -0.0002379235f, -0.0003302403f, -0.0004200698f, - -0.0005054364f, -0.0005843853f, -0.0006549896f, -0.0007154171f, -0.0007639381f, -0.0007990015f, -0.0008192451f, -0.0008235853f, - -0.0008112325f, -0.0007817958f, -0.0007353001f, -0.0006723017f, -0.0005938949f, -0.0005018237f, -0.0003984545f, -0.0002868589f, - -0.0001707179f, -0.0000543437f, 0.0000575249f, 0.0001597921f, 0.0002473552f, 0.0003152810f, 0.0003593211f, 0.0003761803f, - 0.0003641895f, 0.0003236064f, 0.0002574060f, 0.0001714998f, 0.0000755882f, -0.0000168765f, -0.0000877911f, -0.0001149323f, - -0.0000708145f, 0.0000759664f, 0.0003632082f, 0.0008340171f, 0.0015932147f, 0.0027965684f, 0.0044938862f, 0.0066209827f, - 0.0090614394f, 0.0116532691f, 0.0142012098f, 0.0164868538f, 0.0182824288f, 0.0193635282f, 0.0195233202f, 0.0185852780f, - 0.0164156862f, 0.0129338578f, 0.0081207820f, 0.0020247377f, -0.0052355839f, -0.0134714261f, -0.0224272216f, -0.0317873061f, - -0.0411854169f, -0.0502171478f, -0.0584545493f, -0.0654627361f, -0.0708175739f, -0.0741240923f, -0.0750346389f, -0.0732663141f, - -0.0686167330f, -0.0609776578f, -0.0503456776f, -0.0368295907f, -0.0206538852f, -0.0021581782f, 0.0182077069f, 0.0398928946f, - 0.0622588452f, 0.0845965541f, 0.1061472474f, 0.1261258801f, 0.1437468496f, 0.1582510183f, 0.1689332690f, 0.1751695690f, - 0.1764426874f, 0.1723655442f, 0.1627013795f, 0.1473798510f, 0.1265084200f, 0.1003783769f, 0.0694651504f, 0.0344225859f, - -0.0039288047f, -0.0446195451f, -0.0865544564f, -0.1285410062f, -0.1693219800f, -0.2076116501f, -0.2421343744f, -0.2716645414f, - -0.2950666012f, -0.3113339711f, -0.3196255083f, -0.3192983638f, -0.3099360208f, -0.2913705151f, -0.2636979059f, -0.2272863207f, - -0.1827760335f, -0.1310713384f, -0.0733241526f, -0.0109096078f, 0.0546059294f, 0.1215036544f, 0.1879570196f, 0.2520811416f, - 0.3119856181f, 0.3658292498f, 0.4118751262f, 0.4485444179f, 0.4744672713f, 0.4885291873f, 0.4899114116f, 0.4781239515f, - 0.4530300662f, 0.4148612531f, 0.3642220549f, 0.3020842490f, 0.2297703310f, 0.1489264657f, 0.0614854435f, -0.0303795649f, - -0.1243093268f, -0.2178195955f, -0.3083672722f, -0.3934199265f, -0.4705267388f, -0.5373888894f, -0.5919273479f, -0.6323460927f, - -0.6571888364f, -0.6653875249f, -0.6563010343f, -0.6297427848f, -0.5859962378f, -0.5258176130f, -0.4504254723f, -0.3614772269f, - -0.2610329551f, -0.1515073286f, -0.0356107555f, 0.0837187871f, 0.2033915080f, 0.3202471384f, 0.4311396943f, 0.5330233362f, - 0.6230369707f, 0.6985851980f, 0.7574133141f, 0.7976741718f, 0.8179849388f, 0.8174720079f, 0.7958026627f, 0.7532024103f, - 0.6904573239f, 0.6089011023f, 0.5103870229f, 0.3972453408f, 0.2722271452f, 0.1384360281f, -0.0007506793f, -0.1417690856f, - -0.2809620112f, -0.4146758861f, -0.5393586304f, -0.6516558729f, -0.7485028256f, -0.8272092868f, -0.8855353494f, -0.9217556888f, - -0.9347105366f, -0.9238418625f, -0.8892136169f, -0.8315153830f, -0.7520491685f, -0.6526996069f, -0.5358882111f, -0.4045128580f, - -0.2618739995f, -0.1115895724f, 0.0424992034f, 0.1964285728f, 0.3462168980f, 0.4879703230f, 0.6179866516f, 0.7328545277f, - 0.8295452782f, 0.9054947981f, 0.9586733060f, 0.9876409196f, 0.9915876025f, 0.9703562358f, 0.9244482541f, 0.8550115930f, - 0.7638112998f, 0.6531839260f, 0.5259766298f, 0.3854793593f, 0.2353470917f, 0.0794266997f, -0.0783736011f, -0.2341094912f, - -0.3838855272f, -0.5239604170f, -0.6508401618f, -0.7613664334f, -0.8527950879f, -0.9228648741f, -0.9698533854f, -0.9926197484f, - -0.9906323266f, -0.9639812550f, -0.9133750995f, -0.8401220648f, -0.7460959702f, -0.6336880996f, -0.5057459675f, -0.3655007408f, - -0.2164850263f, -0.0624432571f, 0.0927631497f, 0.2452533396f, 0.3912248813f, 0.5270493663f, 0.6493633998f, 0.7551526079f, - 0.8418266049f, 0.9072829806f, 0.9499587608f, 0.9688680208f, 0.9636247817f, 0.9344506105f, 0.8821668237f, 0.8081715061f, - 0.7144020216f, 0.6032839905f, 0.4776681160f, 0.3407564859f, 0.1960202987f, 0.0471111158f, -0.1022320452f, -0.2482774188f, - -0.3873945568f, -0.5161453835f, -0.6313699144f, -0.7302645031f, -0.8104506434f, -0.8700326423f, -0.9076427350f, -0.9224725808f, - -0.9142903937f, -0.8834433701f, -0.8308454204f, -0.7579506175f, -0.6667131091f, -0.5595346127f, -0.4392008921f, -0.3088089180f, - -0.1716866150f, -0.0313073005f, 0.1087989808f, 0.2451349347f, 0.3743240333f, 0.4931948249f, 0.5988594260f, 0.6887842282f, - 0.7608510829f, 0.8134074688f, 0.8453044545f, 0.8559215759f, 0.8451781058f, 0.8135305285f, 0.7619564059f, 0.6919251500f, - 0.6053565671f, 0.5045683259f, 0.3922137963f, 0.2712119195f, 0.1446709795f, 0.0158082697f, -0.1121322505f, -0.2359621952f, - -0.3526287795f, -0.4592906218f, -0.5533874164f, -0.6327017647f, -0.6954116543f, -0.7401323484f, -0.7659467130f, -0.7724233338f, - -0.7596220816f, -0.7280871206f, -0.6788276697f, -0.6132871451f, -0.5333015981f, -0.4410486347f, -0.3389882280f, -0.2297970351f, - -0.1162979714f, -0.0013869076f, 0.1120416061f, 0.2211676650f, 0.3233165238f, 0.4160245192f, 0.4970987736f, 0.5646692200f, - 0.6172317171f, 0.6536812560f, 0.6733345403f, 0.6759414941f, 0.6616855531f, 0.6311728784f, 0.5854109229f, 0.5257770441f, - 0.4539781120f, 0.3720022713f, 0.2820642158f, 0.1865454701f, 0.0879312930f, -0.0112541288f, -0.1085124968f, -0.2014345624f, - -0.2877600257f, -0.3654326821f, -0.4326494615f, -0.4879021964f, -0.5300111477f, -0.5581495604f, -0.5718587503f, -0.5710534933f, - -0.5560177281f, -0.5273908494f, -0.4861450978f, -0.4335547859f, -0.3711582904f, -0.3007139250f, -0.2241509378f, -0.1435169935f, - -0.0609235618f, 0.0215093313f, 0.1017075454f, 0.1776950580f, 0.2476426746f, 0.3099120105f, 0.3630936929f, 0.4060388941f, - 0.4378835058f, 0.4580644620f, 0.4663279432f, 0.4627294004f, 0.4476255675f, 0.4216588257f, 0.3857344863f, 0.3409917280f, - 0.2887690825f, 0.2305654810f, 0.1679979813f, 0.1027573461f, 0.0365626923f, -0.0288835867f, -0.0919394404f, -0.1510642130f, - -0.2048561002f, -0.2520851099f, -0.2917207545f, -0.3229538699f, -0.3452121154f, -0.3581688961f, -0.3617456210f, -0.3561073997f, - -0.3416524423f, -0.3189955996f, -0.2889466186f, -0.2524838235f, -0.2107240303f, -0.1648895947f, -0.1162735377f, -0.0662037318f, - -0.0160071241f, 0.0330250452f, 0.0796701284f, 0.1228042256f, 0.1614288774f, 0.1946936678f, 0.2219142443f, 0.2425853919f, - 0.2563889487f, 0.2631964891f, 0.2630668532f, 0.2562387302f, 0.2431186436f, 0.2242647892f, 0.2003672939f, 0.1722255274f, - 0.1407231814f, 0.1068018529f, 0.0714339071f, 0.0355953755f, 0.0002396385f, -0.0337274180f, -0.0654701262f, -0.0942430905f, - -0.1194080954f, -0.1404475082f, -0.1569739116f, -0.1687358288f, -0.1756195042f, -0.1776468257f, -0.1749695713f, -0.1678602690f, - -0.1567000359f, -0.1419638484f, -0.1242037381f, -0.1040304695f, -0.0820942616f, -0.0590651422f, -0.0356134981f, -0.0123913771f, - 0.0099849609f, 0.0309507800f, 0.0500065129f, 0.0667289886f, 0.0807800207f, 0.0919121972f, 0.0999718200f, 0.1048990098f, - 0.1067250926f, 0.1055674412f, 0.1016220359f, 0.0951540418f, 0.0864867765f, 0.0759894469f, 0.0640640860f, 0.0511321002f, - 0.0376208624f, 0.0239507391f, 0.0105229429f, -0.0022914718f, -0.0141611639f, -0.0248023986f, -0.0339850878f, -0.0415368905f, - -0.0473453103f, -0.0513578334f, -0.0535801684f, -0.0540727489f, -0.0529456678f, -0.0503522968f, -0.0464818329f, -0.0415510875f, - -0.0357957930f, -0.0294617627f, -0.0227961726f, -0.0160392815f, -0.0094168137f, -0.0031332654f, 0.0026337157f, 0.0077376956f, - 0.0120665112f, 0.0155439285f, 0.0181299546f, 0.0198198008f, 0.0206416522f, 0.0206533153f, 0.0199379832f, 0.0185992414f, - 0.0167556135f, 0.0145347842f, 0.0120678335f, 0.0094835966f, 0.0069034859f, 0.0044368299f, 0.0021770482f, 0.0001986183f, - -0.0014448717f, -0.0027217639f, -0.0036221831f, -0.0041570536f, -0.0043559653f, -0.0042644747f, -0.0039403827f, -0.0034499387f, - -0.0028631090f, -0.0022496331f, -0.0016738218f, -0.0011929502f, -0.0008370454f, -0.0005846760f, -0.0004048972f, -0.0002842065f, - -0.0002119725f, -0.0001785258f, -0.0001746762f, -0.0001920559f, -0.0002230524f, -0.0002610877f, -0.0003005688f, -0.0003370221f, - -0.0003669912f, -0.0003880546f, -0.0003986770f, -0.0003981548f, -0.0003864480f, -0.0003640945f, -0.0003320500f, -0.0002916028f, - -0.0002442394f, -0.0001915781f, -0.0001352688f, -0.0000769517f, -0.0000181891f, 0.0000395524f, 0.0000949441f, 0.0001467973f, - 0.0001940871f, 0.0002359457f, 0.0002716760f, 0.0003007405f, 0.0003227698f, 0.0003375491f, 0.0003450236f, 0.0003452833f, - 0.0003385643f, 0.0003252319f, 0.0003057766f, 0.0002807946f, 0.0002509791f, 0.0002170975f, 0.0001799788f, 0.0001404893f, - 0.0000995183f, 0.0000579532f, 0.0000166659f, -0.0000235093f, -0.0000617873f, -0.0000974508f, -0.0001298571f, -0.0001584526f, - -0.0001827754f, -0.0002024649f, -0.0002172605f, -0.0002270070f, -0.0002316506f, -0.0002312399f, -0.0002259201f, -0.0002159308f, - -0.0002015976f, -0.0001833276f, -0.0001615981f, -0.0001369497f, -0.0001099729f, -0.0000812980f, -0.0000515797f, -0.0000214856f, - 0.0000083213f, 0.0000371946f, 0.0000645215f, 0.0000897344f, 0.0001123264f, 0.0001318594f, 0.0001479763f, 0.0001604052f, - 0.0001689663f, 0.0001735714f, 0.0001742252f, 0.0001710200f, 0.0001641324f, 0.0001538135f, 0.0001403825f, 0.0001242143f, - 0.0001057308f, 0.0000853884f, 0.0000636683f, 0.0000410646f, 0.0000180754f, -0.0000048078f, -0.0000271075f, -0.0000483697f, - -0.0000681699f, -0.0000861206f, -0.0001018770f, -0.0001151429f, -0.0001256753f, -0.0001332891f, -0.0001378602f, -0.0001393293f, - -0.0001377022f, -0.0001330520f, -0.0001255166f, -0.0001152976f, -0.0001026555f, -0.0000879046f, -0.0000714049f, -0.0000535546f, - -0.0000347786f, -0.0000155193f, 0.0000037762f, 0.0000226667f, 0.0000407288f, 0.0000575664f, 0.0000728215f, 0.0000861808f, - 0.0000582411f, 0.0000747547f, 0.0000898871f, 0.0001032552f, 0.0001145066f, 0.0001233290f, 0.0001294588f, 0.0001326885f, - 0.0001328735f, 0.0001299377f, 0.0001238768f, 0.0001147609f, 0.0001027340f, 0.0000880132f, 0.0000708843f, 0.0000516966f, - 0.0000308558f, 0.0000088150f, -0.0000139353f, -0.0000368781f, -0.0000594822f, -0.0000812142f, -0.0001015508f, -0.0001199912f, - -0.0001360692f, -0.0001493631f, -0.0001595073f, -0.0001661997f, -0.0001692106f, -0.0001683879f, -0.0001636621f, -0.0001550493f, - -0.0001426526f, -0.0001266610f, -0.0001073481f, -0.0000850672f, -0.0000602464f, -0.0000333807f, -0.0000050232f, 0.0000242254f, - 0.0000537286f, 0.0000828270f, 0.0001108523f, 0.0001371418f, 0.0001610527f, 0.0001819781f, 0.0001993603f, 0.0002127056f, - 0.0002215967f, 0.0002257043f, 0.0002247967f, 0.0002187482f, 0.0002075440f, 0.0001912841f, 0.0001701836f, 0.0001445712f, - 0.0001148842f, 0.0000816622f, 0.0000455367f, 0.0000072204f, -0.0000325082f, -0.0000728185f, -0.0001128466f, -0.0001517120f, - -0.0001885378f, -0.0002224679f, -0.0002526873f, -0.0002784386f, -0.0002990404f, -0.0003139008f, -0.0003225330f, -0.0003245650f, - -0.0003197504f, -0.0003079739f, -0.0002892583f, -0.0002637651f, -0.0002317973f, -0.0001937968f, -0.0001503441f, -0.0001021521f, - -0.0000500632f, 0.0000049600f, 0.0000618411f, 0.0001194039f, 0.0001763844f, 0.0002314533f, 0.0002832366f, 0.0003303508f, - 0.0003714378f, 0.0004052165f, 0.0004305340f, 0.0004464367f, 0.0004522372f, 0.0004476003f, 0.0004326187f, 0.0004079029f, - 0.0003746497f, 0.0003347161f, 0.0002906568f, 0.0002457555f, 0.0002040014f, 0.0001700503f, 0.0001491128f, 0.0001468223f, - 0.0001690255f, 0.0002215535f, 0.0003099526f, 0.0004392070f, 0.0006136491f, 0.0008369098f, 0.0011153908f, 0.0014626641f, - 0.0018595375f, 0.0022395932f, 0.0025311249f, 0.0026688715f, 0.0025944027f, 0.0022604100f, 0.0016336976f, 0.0006981998f, - -0.0005431676f, -0.0020672947f, -0.0038308355f, -0.0057710271f, -0.0078076165f, -0.0098456303f, -0.0117790591f, -0.0134951832f, - -0.0148794917f, -0.0158209062f, -0.0162171833f, -0.0159802046f, -0.0150409946f, -0.0133541921f, -0.0109018245f, -0.0076961552f, - -0.0037814932f, 0.0007651902f, 0.0058348824f, 0.0112884531f, 0.0169598389f, 0.0226604555f, 0.0281847079f, 0.0333164681f, - 0.0378363117f, 0.0415293031f, 0.0441930617f, 0.0456458479f, 0.0457343703f, 0.0443410397f, 0.0413903773f, 0.0368543265f, - 0.0307562218f, 0.0231732263f, 0.0142370712f, 0.0041330029f, -0.0069031215f, -0.0185895710f, -0.0306052464f, -0.0425978140f, - -0.0541932843f, -0.0650067808f, -0.0746542114f, -0.0827644992f, -0.0889920115f, -0.0930287926f, -0.0946162074f, -0.0935555973f, - -0.0897175729f, -0.0830495883f, -0.0735814928f, -0.0614287943f, -0.0467934430f, -0.0299620019f, -0.0113011569f, 0.0087494102f, - 0.0296866709f, 0.0509562355f, 0.0719663997f, 0.0921039151f, 0.1107510726f, 0.1273036411f, 0.1411891551f, 0.1518850212f, - 0.1589358970f, 0.1619698015f, 0.1607124306f, 0.1549991925f, 0.1447845216f, 0.1301481022f, 0.1112977047f, 0.0885684336f, - 0.0624182781f, 0.0334199675f, 0.0022492343f, -0.0303302958f, -0.0634852726f, -0.0963334260f, -0.1279665024f, -0.1574747445f, - -0.1839722700f, -0.2066226519f, -0.2246639837f, -0.2374326975f, -0.2443854241f, -0.2451182136f, -0.2393824923f, -0.2270972049f, - -0.2083566840f, -0.1834338958f, -0.1527788314f, -0.1170119438f, -0.0769126672f, -0.0334031935f, 0.0124721800f, 0.0595716856f, - 0.1066841340f, 0.1525596967f, 0.1959426466f, 0.2356052084f, 0.2703816159f, 0.2992014435f, 0.3211212759f, 0.3353538037f, - 0.3412934754f, 0.3385379160f, 0.3269044144f, 0.3064409015f, 0.2774309795f, 0.2403927139f, 0.1960710651f, 0.1454240053f, - 0.0896025447f, 0.0299250576f, -0.0321535327f, -0.0950769985f, -0.1572266359f, -0.2169627100f, -0.2726674612f, -0.3227885475f, - -0.3658817647f, -0.4006518763f, -0.4259904152f, -0.4410093734f, -0.4450697851f, -0.4378043259f, -0.4191331941f, -0.3892727036f, - -0.3487362065f, -0.2983271575f, -0.2391243433f, -0.1724595094f, -0.0998878249f, -0.0231518277f, 0.0558603212f, 0.1351612774f, - 0.2127145048f, 0.2864865610f, 0.3545003342f, 0.4148878376f, 0.4659411557f, 0.5061601567f, 0.5342956523f, 0.5493867774f, - 0.5507914983f, 0.5382093212f, 0.5116954608f, 0.4716659463f, 0.4188933721f, 0.3544932422f, 0.2799011075f, 0.1968409421f, - 0.1072854415f, 0.0134091535f, -0.0824644450f, -0.1779206367f, -0.2705144779f, -0.3578335937f, -0.4375611342f, -0.5075372480f, - -0.5658174366f, -0.6107262192f, -0.6409046287f, -0.6553502097f, -0.6534483577f, -0.6349940579f, -0.6002033141f, -0.5497138242f, - -0.4845747300f, -0.4062255582f, -0.3164647475f, -0.2174084443f, -0.1114405017f, -0.0011548715f, 0.1107082189f, 0.2213307209f, - 0.3278881365f, 0.4276219846f, 0.5179114992f, 0.5963426829f, 0.6607728958f, 0.7093892437f, 0.7407591825f, 0.7538719283f, - 0.7481694943f, 0.7235664280f, 0.6804576085f, 0.6197137625f, 0.5426646818f, 0.4510704345f, 0.3470811862f, 0.2331865442f, - 0.1121556241f, -0.0130307134f, -0.1392537831f, -0.2633353122f, -0.3821180118f, -0.4925464326f, -0.5917460154f, -0.6770982854f, - -0.7463102071f, -0.7974758632f, -0.8291287887f, -0.8402835311f, -0.8304652631f, -0.7997265817f, -0.7486509433f, -0.6783425346f, - -0.5904027183f, -0.4868935511f, -0.3702891985f, -0.2434164031f, -0.1093854415f, 0.0284867240f, 0.1667591937f, 0.3019536886f, - 0.4306427342f, 0.5495372068f, 0.6555710008f, 0.7459806116f, 0.8183775659f, 0.8708117817f, 0.9018241781f, 0.9104871053f, - 0.8964314857f, 0.8598598737f, 0.8015450208f, 0.7228138795f, 0.6255173800f, 0.5119866531f, 0.3849767570f, 0.2475992600f, - 0.1032453598f, -0.0444985629f, -0.1919408168f, -0.3353774466f, -0.4711860685f, -0.5959181193f, -0.7063871285f, -0.7997507598f, - -0.8735844695f, -0.9259448860f, -0.9554212155f, -0.9611733371f, -0.9429555253f, -0.9011251664f, -0.8366361515f, -0.7510170890f, - -0.6463347988f, -0.5251440036f, -0.3904244118f, -0.2455067964f, -0.0939898753f, 0.0603498686f, 0.2136531983f, 0.3620754993f, - 0.5018841040f, 0.6295530127f, 0.7418526589f, 0.8359323337f, 0.9093932351f, 0.9603501538f, 0.9874803034f, 0.9900578955f, - 0.9679736807f, 0.9217387716f, 0.8524727897f, 0.7618764115f, 0.6521892146f, 0.5261336069f, 0.3868465674f, 0.2378005415f, - 0.0827159689f, -0.0745329240f, -0.2300158926f, -0.3798465481f, -0.5202802756f, -0.6478099233f, -0.7592521853f, -0.8518447888f, - -0.9233379834f, -0.9720085218f, -0.9966758999f, -0.9967463299f, -0.9722295329f, -0.9237392201f, -0.8524778646f, -0.7602073639f, - -0.6492055631f, -0.5222103755f, -0.3823523682f, -0.2330778865f, -0.0780642593f, 0.0788705421f, 0.2338618240f, 0.3830931459f, - 0.5228902075f, 0.6498111734f, 0.7607313594f, 0.8529200672f, 0.9241077914f, 0.9725420391f, 0.9970304792f, 0.9969702721f, - 0.9723629327f, 0.9238142869f, 0.8525195846f, 0.7602340753f, 0.6492298214f, 0.5222397619f, 0.3823904496f, 0.2331250710f, - 0.0781186890f, -0.0788122482f, -0.2338038630f, -0.3830399929f, -0.5228461462f, -0.6497799862f, -0.7607160866f, -0.8529228980f, - -0.9241300035f, -0.9725840329f, -0.9970918334f, -0.9970498578f, -0.9724590238f, -0.9239246994f, -0.8526417953f, -0.7603653504f, - -0.6493673160f, -0.5223806210f, -0.3825318778f, -0.2332644031f, -0.0782534324f, 0.0786843684f, 0.2336848810f, 0.3829316749f, - 0.5227499799f, 0.6496971643f, 0.7606475046f, 0.8528691455f, 0.9240913688f, 0.9725605024f, 0.9970831041f, 0.9970553461f, - 0.9724778870f, 0.9239558554f, 0.8526839539f, 0.7604170426f, 0.6494269334f, 0.5224464521f, 0.3826021525f, 0.2333373314f, - 0.0783272488f, -0.0786113681f, -0.2336143011f, -0.3828649893f, -0.5226885022f, -0.6496420279f, -0.7605996436f, -0.8528292862f, - -0.9240600225f, -0.9725379675f, -0.9970694696f, -0.9970505028f, -0.9724815391f, -0.9239675382f, -0.8527030511f, -0.7604428078f, - -0.6494585103f, -0.5224828981f, -0.3826424594f, -0.2333804494f, -0.0783721069f, 0.0785658395f, 0.2335691502f, 0.3828212223f, - 0.5226470656f, 0.6496037895f, 0.7605653778f, 0.8527996583f, 0.9240355773f, 0.9725191181f, 0.9970564910f, 0.9970435264f, - 0.9724805522f, 0.9239723853f, 0.8527134405f, 0.7604583197f, 0.6494786105f, 0.5225069525f, 0.3826697534f, 0.2334102074f, - 0.0784035151f, -0.0785336112f, -0.2335369252f, -0.3827897961f, -0.5226171847f, -0.6495761346f, -0.7605405475f, -0.8527781579f, - -0.9240178096f, -0.9725053787f, -0.9970469656f, -0.9970382927f, -0.9724795834f, -0.9239755567f, -0.8527205369f, -0.7604690457f, - -0.6494926000f, -0.5225237804f, -0.3826889457f, -0.2334312532f, -0.0784258768f, 0.0785104868f, 0.2335135965f, 0.3827668158f, - 0.5225950899f, 0.6495554361f, 0.7605217198f, 0.8527616288f, 0.9240039504f, 0.9724944950f, 0.9970392893f, 0.9970339749f, - 0.9724786893f, 0.9239780624f, 0.8527263292f, 0.7604779239f, 0.6495042812f, 0.5225379070f, 0.3827050967f, 0.2334489562f, - 0.0784446231f, -0.0784912259f, -0.2334943534f, -0.3827481104f, -0.5225774136f, -0.6495392378f, -0.7605073937f, -0.8527495050f, - -0.9239942880f, -0.9724874781f, -0.9970350256f, -0.9970324969f, -0.9724799577f, -0.9239819717f, -0.8527327136f, -0.7604865652f, - -0.6495149161f, -0.5225502352f, -0.3827187881f, -0.2334636585f, -0.0784599687f, 0.0784756139f, 0.2334788543f, 0.3827330998f, - 0.5225632570f, 0.6495262837f, 0.7604959669f, 0.8527398987f, 0.9239867563f, 0.9724822286f, 0.9970322117f, -}; - -const float ivas_fb_fr_12band_1ms_im[IVAS_FB_12_1MS_LEN] = -{ - -0.0898684611f, -0.2670421131f, -0.4365041728f, -0.5932908852f, -0.7325431118f, -0.8497696909f, -0.9406026758f, -1.0013422309f, - -1.0229026702f, -0.9881074062f, -0.8887876846f, -0.7310424395f, -0.5284210279f, -0.2997529481f, -0.0664760115f, 0.1499611207f, - 0.3307974571f, 0.4621685196f, 0.5367125342f, 0.5543493827f, 0.5220560680f, 0.4529408018f, 0.3642519877f, 0.2760859332f, - 0.2047354522f, 0.1503391462f, 0.1061445796f, 0.0699189586f, 0.0406773254f, 0.0176462883f, 0.0000989137f, -0.0126721698f, - -0.0213825135f, -0.0267263252f, -0.0293754264f, -0.0299501298f, -0.0290147562f, -0.0270589183f, -0.0244976437f, -0.0216640086f, - -0.0188153473f, -0.0161349368f, -0.0137427038f, -0.0117024055f, -0.0100340803f, -0.0087231409f, -0.0077319011f, -0.0070077840f, - -0.0064920884f, -0.0061256992f, -0.0058543602f, -0.0056314631f, -0.0054200843f, -0.0051933287f, -0.0049340271f, -0.0046335801f, - -0.0042904244f, -0.0039083723f, -0.0034948095f, -0.0030592765f, -0.0026120102f, -0.0021631376f, -0.0017217846f, -0.0012959083f, - -0.0008918976f, -0.0005148542f, -0.0001684643f, 0.0001445255f, 0.0004223858f, 0.0006639324f, 0.0008686856f, 0.0010364896f, - 0.0011677783f, 0.0012632724f, 0.0013243012f, 0.0013525145f, 0.0013501876f, 0.0013198910f, 0.0012647346f, 0.0011879780f, - 0.0010932175f, 0.0009839640f, 0.0008638145f, 0.0007360481f, 0.0006038306f, 0.0004698724f, 0.0003366939f, 0.0002063576f, - 0.0000807864f, -0.0000384546f, -0.0001498232f, -0.0002520137f, -0.0003436527f, -0.0004235485f, -0.0004904478f, -0.0005433364f, - -0.0005812551f, -0.0006036329f, -0.0006101286f, -0.0006009525f, -0.0005766848f, -0.0005385389f, -0.0004881156f, -0.0004275804f, - -0.0003593427f, -0.0002861534f, -0.0002107341f, -0.0001358351f, -0.0000638656f, 0.0000030299f, 0.0000632842f, 0.0001157628f, - 0.0001599820f, 0.0001958747f, 0.0002239118f, 0.0002447961f, 0.0002595218f, 0.0002690444f, 0.0002743352f, 0.0002760865f, - 0.0002748168f, 0.0002706555f, 0.0002635301f, 0.0002530421f, 0.0002387283f, 0.0002200029f, 0.0001964510f, 0.0001677833f, - 0.0001341045f, 0.0000958227f, 0.0000538421f, 0.0000093907f, -0.0000358838f, -0.0000801695f, -0.0001214720f, -0.0001579178f, - -0.0001877626f, -0.0002096837f, -0.0002227536f, -0.0002266623f, -0.0002216081f, -0.0002084174f, -0.0001883368f, -0.0001630566f, - -0.0001344297f, -0.0001044404f, -0.0000749065f, -0.0000474557f, -0.0000232739f, -0.0000031484f, 0.0000126922f, 0.0000244381f, - 0.0000327553f, 0.0000385592f, 0.0000429983f, 0.0000471857f, 0.0000521670f, 0.0000586725f, 0.0000671313f, 0.0000774992f, - 0.0000893598f, 0.0001018532f, 0.0001138697f, 0.0001240625f, 0.0001311002f, 0.0001337149f, 0.0001309532f, 0.0001221967f, - 0.0001073512f, 0.0000867866f, 0.0000614274f, 0.0000325927f, 0.0000019882f, -0.0000285322f, -0.0000570333f, -0.0000817625f, - -0.0001012133f, -0.0001143489f, -0.0001206018f, - 0.0115080962f, 0.0339059662f, 0.0543805639f, 0.0716908215f, 0.0844892131f, 0.0915170903f, 0.0912773099f, 0.0825231458f, - 0.0581340647f, 0.0023722407f, -0.0920729561f, -0.2188408880f, -0.3647527624f, -0.5119701616f, -0.6406838355f, -0.7316665697f, - -0.7689724827f, -0.7420606704f, -0.6473949518f, -0.4890788171f, -0.2786409816f, -0.0338325103f, 0.2232845090f, 0.4688402469f, - 0.6798489622f, 0.8368463063f, 0.9260768759f, 0.9410292369f, 0.8830777791f, 0.7612013021f, 0.5907780504f, 0.3916368742f, - 0.1855876370f, -0.0062576017f, -0.1660331877f, -0.2812632874f, -0.3462706324f, -0.3628576835f, -0.3399405921f, -0.2936025661f, - -0.2446360780f, -0.2029515435f, -0.1662608743f, -0.1331801236f, -0.1036965299f, -0.0778301527f, -0.0556266777f, -0.0370208473f, - -0.0218709516f, -0.0099359945f, -0.0009127909f, 0.0055587915f, 0.0098621029f, 0.0123923627f, 0.0135300104f, 0.0136320444f, - 0.0130144200f, 0.0119494969f, 0.0106574266f, 0.0093099072f, 0.0080287757f, 0.0068943240f, 0.0059483248f, 0.0052043487f, - 0.0046523406f, 0.0042685237f, 0.0040192551f, 0.0038688810f, 0.0037816102f, 0.0037267014f, 0.0036781232f, 0.0036173442f, - 0.0035313060f, 0.0034136237f, 0.0032617350f, 0.0030774362f, 0.0028640174f, 0.0026268424f, 0.0023709699f, 0.0021021154f, - 0.0018248805f, 0.0015440826f, 0.0012634327f, 0.0009870117f, 0.0007181238f, 0.0004606754f, 0.0002179850f, -0.0000060719f, - -0.0002083660f, -0.0003855837f, -0.0005355681f, -0.0006564697f, -0.0007479765f, -0.0008103905f, -0.0008456256f, -0.0008561209f, - -0.0008455816f, -0.0008177548f, -0.0007769991f, -0.0007270455f, -0.0006715492f, -0.0006129898f, -0.0005533521f, -0.0004932746f, - -0.0004329280f, -0.0003714208f, -0.0003078363f, -0.0002408007f, -0.0001695470f, -0.0000934908f, -0.0000131639f, 0.0000703507f, - 0.0001547277f, 0.0002371760f, 0.0003140053f, 0.0003815783f, 0.0004360445f, 0.0004743392f, 0.0004939265f, 0.0004936813f, - 0.0004734847f, 0.0004348607f, 0.0003803348f, 0.0003137905f, 0.0002396098f, 0.0001628232f, 0.0000881507f, 0.0000200989f, - -0.0000379279f, -0.0000834126f, -0.0001153958f, -0.0001340265f, -0.0001409462f, -0.0001385916f, -0.0001303365f, -0.0001196396f, - -0.0001100798f, -0.0001045123f, -0.0001051708f, -0.0001129953f, -0.0001279408f, -0.0001485750f, -0.0001726416f, -0.0001969197f, - -0.0002179800f, -0.0002321940f, -0.0002365365f, -0.0002285757f, -0.0002071506f, -0.0001721838f, -0.0001251084f, -0.0000684218f, - -0.0000058329f, 0.0000584158f, 0.0001195994f, 0.0001732950f, 0.0002154726f, 0.0002432129f, 0.0002546651f, 0.0002495466f, - 0.0002438301f, 0.0007109472f, 0.0011162460f, 0.0013967943f, 0.0014698785f, 0.0012150300f, 0.0004822469f, -0.0009199449f, - -0.0032069948f, -0.0066234807f, -0.0114150534f, -0.0178284637f, -0.0260733522f, -0.0363216183f, -0.0486605071f, -0.0630990061f, - -0.0795130312f, -0.0976712096f, -0.1171685259f, -0.1374957541f, -0.1579441550f, -0.1777994651f, -0.1961712153f, -0.2131191727f, - -0.2256033924f, -0.2176912218f, -0.1719241079f, -0.0821949125f, 0.0489542717f, 0.2117008349f, 0.3903676656f, 0.5654257562f, - 0.7160273175f, 0.8226483779f, 0.8696490849f, 0.8473276976f, 0.7533117569f, 0.5930248684f, 0.3792476318f, 0.1307497118f, - -0.1297731860f, -0.3782729365f, -0.5920556328f, -0.7523549294f, -0.8463947331f, -0.8687564040f, -0.8218173622f, -0.7152833962f, - -0.5647972104f, -0.3898836504f, -0.2113895751f, -0.0488408019f, 0.0820902688f, 0.1715873934f, 0.2171153181f, 0.2247885078f, - 0.2120719043f, 0.1949040588f, 0.1763288922f, 0.1562894837f, 0.1356771490f, 0.1152063262f, 0.0955845402f, 0.0773202283f, - 0.0608172272f, 0.0463072409f, 0.0339148674f, 0.0236334444f, 0.0153777062f, 0.0089786185f, 0.0042273050f, 0.0008767894f, - -0.0013231927f, -0.0026245282f, -0.0032557343f, -0.0034239005f, -0.0032991260f, -0.0030209159f, -0.0026903446f, -0.0023798808f, - -0.0021307088f, -0.0019640207f, -0.0018807705f, -0.0018724257f, -0.0019209336f, -0.0020075151f, -0.0021115303f, -0.0022167724f, - -0.0023088853f, -0.0023794235f, -0.0024222081f, -0.0024359169f, -0.0024201044f, -0.0023771902f, -0.0023088214f, -0.0022179019f, - -0.0021056723f, -0.0019740384f, -0.0018233675f, -0.0016550209f, -0.0014695894f, -0.0012693378f, -0.0010565212f, -0.0008354568f, - -0.0006106656f, -0.0003884494f, -0.0001748112f, 0.0000233719f, 0.0002004956f, 0.0003512145f, 0.0004724032f, 0.0005620267f, - 0.0006206994f, 0.0006502675f, 0.0006548938f, 0.0006393557f, 0.0006097638f, 0.0005717449f, 0.0005310334f, 0.0004917912f, - 0.0004573339f, 0.0004288066f, 0.0004062166f, 0.0003875516f, 0.0003701287f, 0.0003500723f, 0.0003238297f, 0.0002877917f, - 0.0002397329f, 0.0001783203f, 0.0001042514f, 0.0000194643f, -0.0000721397f, -0.0001658244f, -0.0002556635f, -0.0003358859f, - -0.0004006984f, -0.0004456200f, -0.0004672301f, -0.0004642525f, -0.0004370215f, -0.0003881655f, -0.0003217097f, -0.0002433639f, - -0.0001593403f, -0.0000763999f, -0.0000005923f, 0.0000626983f, 0.0001098436f, 0.0001386930f, 0.0001493084f, 0.0001433260f, - 0.0001242838f, 0.0000966497f, 0.0000658480f, 0.0000371218f, 0.0000154755f, 0.0000046144f, 0.0000070450f, 0.0000233058f, - 0.0000523967f, 0.0000914031f, 0.0001362820f, 0.0001818299f, 0.0002227029f, 0.0002535449f, 0.0002700191f, 0.0002688537f, - 0.0002486530f, 0.0002096567f, 0.0001541806f, 0.0000860074f, 0.0000104494f, -0.0000665586f, -0.0001386343f, -0.0001999605f, - -0.0002454664f, -0.0002717048f, -0.0002768116f, -0.0002610555f, -0.0002264389f, -0.0001768539f, -0.0001173333f, -0.0000538987f, - 0.0000073883f, 0.0000606831f, 0.0001012735f, 0.0001257023f, 0.0001324276f, 0.0001216280f, 0.0000954836f, 0.0000576109f, - 0.0000129868f, -0.0000328906f, -0.0000742744f, -0.0001060758f, -0.0001240987f, -0.0001257785f, -0.0001101631f, -0.0000783123f, - -0.0000329127f, 0.0000217021f, 0.0000802673f, 0.0001368394f, 0.0001856737f, 0.0002215380f, 0.0002405175f, 0.0002401550f, - 0.0002199754f, 0.0001812890f, 0.0001273345f, 0.0000627166f, -0.0000067866f, -0.0000750345f, -0.0001358771f, - -0.0002517773f, -0.0007530438f, -0.0012480393f, -0.0017311495f, -0.0021966783f, -0.0026372659f, -0.0030463219f, -0.0034173391f, - -0.0037471961f, -0.0040359970f, -0.0042905892f, -0.0045239611f, -0.0047578551f, -0.0050204690f, -0.0053469980f, -0.0057745962f, - -0.0063401820f, -0.0070723578f, -0.0079867916f, -0.0090758990f, -0.0103033224f, -0.0115933185f, -0.0128269170f, -0.0138337134f, - -0.0143928060f, -0.0142296836f, -0.0130247299f, -0.0104168701f, -0.0060212390f, 0.0005608679f, 0.0097154142f, 0.0218030935f, - 0.0371260945f, 0.0559219991f, 0.0783277405f, 0.1044019092f, 0.1340918009f, 0.1673695867f, 0.2042412889f, 0.2460845096f, - 0.2951830943f, 0.3416235468f, 0.3646126368f, 0.3480671745f, 0.2830729765f, 0.1678292828f, 0.0080159731f, -0.1838899497f, - -0.3900215384f, -0.5892675140f, -0.7598185700f, -0.8818480868f, -0.9399786297f, -0.9252325823f, -0.8362335185f, -0.6794898766f, - -0.4687496028f, -0.2234686369f, 0.0333794198f, 0.2779351658f, 0.4881469775f, 0.6462666955f, 0.7407620319f, 0.7675102118f, - 0.7300140555f, 0.6387574230f, 0.5096096451f, 0.3616936194f, 0.2146955649f, 0.0863068159f, -0.0104489874f, -0.0693762132f, - -0.0979362074f, -0.1120025953f, -0.1187847101f, -0.1195709435f, -0.1158142700f, -0.1086494413f, -0.0991759892f, -0.0882830476f, - -0.0767682730f, -0.0652504848f, -0.0542380863f, -0.0440837698f, -0.0350361951f, -0.0272194074f, -0.0206775342f, -0.0153683003f, - -0.0112022098f, -0.0080423433f, -0.0057368530f, -0.0041194819f, -0.0030341283f, -0.0023328322f, -0.0018922260f, -0.0016079045f, - -0.0014038691f, -0.0012238901f, -0.0010359885f, -0.0008223621f, -0.0005812568f, -0.0003172104f, -0.0000423446f, 0.0002317528f, - 0.0004920317f, 0.0007298898f, 0.0009380570f, 0.0011144792f, 0.0012583706f, 0.0013727541f, 0.0014603320f, 0.0015255024f, - 0.0015706934f, 0.0015984889f, 0.0016087944f, 0.0016013362f, 0.0015736524f, 0.0015238602f, 0.0014491647f, 0.0013485610f, - 0.0012214393f, 0.0010698662f, 0.0008969515f, 0.0007085113f, 0.0005110819f, 0.0003130098f, 0.0001222403f, -0.0000529128f, - -0.0002059168f, -0.0003312324f, -0.0004261003f, -0.0004894620f, -0.0005232055f, -0.0005306961f, -0.0005175051f, -0.0004896578f, - -0.0004540531f, -0.0004166844f, -0.0003830510f, -0.0003566394f, -0.0003395923f, -0.0003316443f, -0.0003311733f, -0.0003346124f, - -0.0003378214f, -0.0003358194f, -0.0003242611f, -0.0002992259f, -0.0002585275f, -0.0002012956f, -0.0001289055f, -0.0000441984f, - 0.0000480368f, 0.0001421911f, 0.0002316974f, 0.0003103339f, 0.0003721995f, 0.0004129378f, 0.0004295640f, 0.0004213762f, - 0.0003894462f, 0.0003371019f, 0.0002690431f, 0.0001914421f, 0.0001108048f, 0.0000338794f, -0.0000335063f, -0.0000864746f, - -0.0001220386f, -0.0001388528f, -0.0001377697f, -0.0001212160f, -0.0000933503f, -0.0000591266f, -0.0000241894f, 0.0000061837f, - 0.0000272190f, 0.0000355810f, 0.0000293086f, 0.0000084300f, -0.0000254463f, -0.0000689080f, -0.0001174917f, -0.0001657726f, - -0.0002083169f, -0.0002398873f, -0.0002563684f, -0.0002548515f, -0.0002343135f, -0.0001953996f, -0.0001407304f, -0.0000743265f, - -0.0000015627f, 0.0000716768f, 0.0001392424f, 0.0001956345f, 0.0002362192f, 0.0002579841f, 0.0002595163f, 0.0002414285f, - -0.0000940837f, -0.0002770282f, -0.0004449239f, -0.0005888728f, -0.0007019644f, -0.0007792340f, -0.0008182743f, -0.0008186617f, - -0.0007820794f, -0.0007112881f, -0.0006099783f, -0.0004815832f, -0.0003292359f, -0.0001547948f, 0.0000407443f, 0.0002577725f, - 0.0004970701f, 0.0007599305f, 0.0010467681f, 0.0013572172f, 0.0016888066f, 0.0020376007f, 0.0023974682f, 0.0027617602f, - 0.0031234670f, 0.0034780578f, 0.0038243130f, 0.0041678751f, 0.0045219223f, 0.0049104098f, 0.0053672600f, 0.0059379719f, - 0.0066758931f, 0.0076410668f, 0.0088925844f, 0.0104843046f, 0.0124532460f, 0.0148130444f, 0.0175396030f, 0.0205645423f, - 0.0237604835f, 0.0269378529f, 0.0298327415f, 0.0321108152f, 0.0333602127f, 0.0331056565f, 0.0308069668f, 0.0258845713f, - 0.0177205355f, 0.0056930577f, -0.0108298743f, -0.0324583065f, -0.0598208742f, -0.0935922245f, -0.1346769337f, -0.1852485101f, - -0.2520452044f, -0.3349618030f, -0.4178137014f, -0.4806851731f, -0.5066093847f, -0.4828480682f, -0.4029110854f, -0.2674540766f, - -0.0845343107f, 0.1312173509f, 0.3601564597f, 0.5799075204f, 0.7679640489f, 0.9043772480f, 0.9741394604f, 0.9690106520f, - 0.8885379519f, 0.7401510478f, 0.5383256422f, 0.3028982916f, 0.0567716151f, -0.1767567296f, -0.3766491619f, -0.5265275449f, - -0.6164139497f, -0.6437430944f, -0.6133407543f, -0.5366180838f, -0.4297512054f, -0.3115454630f, -0.2005356394f, -0.1128598350f, - -0.0539105809f, -0.0139443690f, 0.0156565191f, 0.0370291041f, 0.0516278850f, 0.0605689917f, 0.0649188950f, 0.0656033918f, - 0.0635061831f, 0.0593951272f, 0.0539682831f, 0.0478045414f, 0.0413946012f, 0.0351122976f, 0.0292427409f, 0.0239693774f, - 0.0194022319f, 0.0155752485f, 0.0124736580f, 0.0100363326f, 0.0081800382f, 0.0068024870f, 0.0058015196f, 0.0050760480f, - 0.0045392915f, 0.0041164842f, 0.0037525515f, 0.0034068962f, 0.0030568884f, 0.0026909558f, 0.0023097105f, 0.0019188491f, - 0.0015296237f, 0.0011527869f, 0.0007995822f, 0.0004773732f, 0.0001916221f, -0.0000568089f, -0.0002688493f, -0.0004487434f, - -0.0006009421f, -0.0007311394f, -0.0008434559f, -0.0009415801f, -0.0010266406f, -0.0010987560f, -0.0011556747f, -0.0011947058f, - -0.0012119146f, -0.0012041634f, -0.0011684945f, -0.0011039351f, -0.0010107180f, -0.0008915962f, -0.0007507109f, -0.0005943565f, - -0.0004295220f, -0.0002642519f, -0.0001060642f, 0.0000378186f, 0.0001618981f, 0.0002620189f, 0.0003364193f, 0.0003850258f, - 0.0004100438f, 0.0004149209f, 0.0004045652f, 0.0003841255f, 0.0003590482f, 0.0003339070f, 0.0003125425f, 0.0002971555f, - 0.0002887091f, 0.0002863958f, 0.0002883494f, 0.0002914552f, 0.0002922766f, 0.0002870530f, 0.0002726535f, 0.0002465517f, - 0.0002076047f, 0.0001558242f, 0.0000928493f, 0.0000214333f, -0.0000544032f, -0.0001301223f, -0.0002007286f, -0.0002616070f, - -0.0003086144f, -0.0003388183f, -0.0003504396f, -0.0003433413f, -0.0003187137f, -0.0002792588f, -0.0002286183f, -0.0001713141f, - -0.0001120267f, -0.0000554389f, - -0.0001958521f, -0.0002037772f, -0.0001928163f, -0.0001589424f, -0.0001002894f, -0.0000163380f, 0.0000907887f, 0.0002175831f, - 0.0003582211f, 0.0005062409f, 0.0006538405f, 0.0007937851f, 0.0009186699f, 0.0010227885f, 0.0011010838f, 0.0011507705f, - 0.0011698159f, 0.0011582816f, 0.0011163741f, 0.0010456753f, 0.0009469803f, 0.0008217234f, 0.0006698794f, 0.0004918730f, - 0.0002867091f, 0.0000544686f, -0.0002054280f, -0.0004913183f, -0.0008012958f, -0.0011303304f, -0.0014731078f, -0.0018216574f, - -0.0021695528f, -0.0025102922f, -0.0028430159f, -0.0031713537f, -0.0035102261f, -0.0038841898f, -0.0043342737f, -0.0049142608f, - -0.0056961483f, -0.0067625723f, -0.0082096287f, -0.0101339707f, -0.0126325271f, -0.0157836972f, -0.0196448900f, -0.0242284914f, - -0.0294998526f, -0.0353498489f, -0.0415975524f, -0.0479616035f, -0.0540728812f, -0.0594457699f, -0.0635064362f, -0.0655612395f, - -0.0648457799f, -0.0604784184f, -0.0515339488f, -0.0369448838f, -0.0155927126f, 0.0139806398f, 0.0539164770f, 0.1128370459f, - 0.2004901808f, 0.3114870438f, 0.4296920027f, 0.5365714345f, 0.6133195725f, 0.6437584042f, 0.6164735032f, 0.5266348467f, - 0.3768028330f, 0.1769504498f, -0.0565487403f, -0.3026608074f, -0.5380905144f, -0.7399360850f, -0.8883601949f, -0.9688847331f, - -0.9740762507f, -0.9043827765f, -0.7680389511f, -0.5800469251f, -0.3603504723f, -0.1314519403f, 0.0842759659f, 0.2671900601f, - 0.4026590428f, 0.4826236485f, 0.5064248335f, 0.4805483640f, 0.4177275519f, 0.3349242893f, 0.2520497692f, 0.1852850777f, - 0.1347332064f, 0.0936551449f, 0.0598782099f, 0.0325001596f, 0.0108498369f, -0.0056970597f, -0.0177459594f, -0.0259244265f, - -0.0308505634f, -0.0331397240f, -0.0333704132f, -0.0320833599f, -0.0297560793f, -0.0268041178f, -0.0235666816f, -0.0203132117f, - -0.0172390062f, -0.0144767230f, -0.0120991121f, -0.0101332076f, -0.0085666335f, -0.0073617255f, -0.0064621794f, -0.0058047936f, - -0.0053242015f, -0.0049609363f, -0.0046632383f, -0.0043912873f, -0.0041162231f, -0.0038213107f, -0.0034990867f, -0.0031507115f, - -0.0027824416f, -0.0024044438f, -0.0020276438f, -0.0016629392f, -0.0013190459f, -0.0010025416f, -0.0007168319f, -0.0004629763f, - -0.0002395008f, -0.0000436500f, 0.0001284164f, 0.0002803877f, 0.0004156585f, 0.0005364447f, 0.0006439523f, 0.0007379710f, - 0.0008173893f, 0.0008801810f, 0.0009241189f, 0.0009469386f, 0.0009470262f, 0.0009235256f, 0.0008768074f, 0.0008083660f, - 0.0007209842f, 0.0006183917f, 0.0005051683f, 0.0003862499f, 0.0002667034f, 0.0001512287f, 0.0000439630f, -0.0000518813f, - -0.0001340642f, -0.0002014693f, -0.0002539655f, -0.0002923568f, -0.0003181036f, -0.0003331509f, -0.0003396076f, -0.0003395633f, - -0.0003348303f, -0.0003268422f, -0.0003165265f, -0.0003043290f, -0.0002902270f, -0.0002738620f, -0.0002546506f, -0.0002319638f, - -0.0002052612f, -0.0001742433f, -0.0001389381f, -0.0000997698f, -0.0000575586f, -0.0000134887f, 0.0000309765f, 0.0000742026f, - 0.0001145147f, 0.0001503321f, 0.0001802885f, - -0.0001277341f, -0.0000801832f, -0.0000218515f, 0.0000429946f, 0.0001101725f, 0.0001753791f, 0.0002352234f, 0.0002868790f, - 0.0003289280f, 0.0003607437f, 0.0003830779f, 0.0003971613f, 0.0004050891f, 0.0004087434f, 0.0004101314f, 0.0004103021f, - 0.0004098229f, 0.0004078547f, 0.0004029032f, 0.0003921299f, 0.0003724071f, 0.0003398196f, 0.0002909307f, 0.0002223256f, - 0.0001319189f, 0.0000183492f, -0.0001178379f, -0.0002750908f, -0.0004498764f, -0.0006379165f, -0.0008333771f, -0.0010303574f, - -0.0012220954f, -0.0014025519f, -0.0015654459f, -0.0017057905f, -0.0018186276f, -0.0019004727f, -0.0019477420f, -0.0019582025f, - -0.0019292104f, -0.0018593672f, -0.0017467341f, -0.0015908909f, -0.0013912094f, -0.0011493707f, -0.0008675713f, -0.0005513213f, - -0.0002071950f, 0.0001544857f, 0.0005229288f, 0.0008847642f, 0.0012288921f, 0.0015452051f, 0.0018312322f, 0.0020914322f, - 0.0023452820f, 0.0026261558f, 0.0029898311f, 0.0035112352f, 0.0042918405f, 0.0054520943f, 0.0071361390f, 0.0094977907f, - 0.0127016847f, 0.0169013256f, 0.0222371991f, 0.0288065364f, 0.0366610177f, 0.0457690119f, 0.0560179682f, 0.0671701450f, - 0.0788774558f, 0.0906296100f, 0.1017925366f, 0.1115401869f, 0.1189349031f, 0.1228106313f, 0.1219422410f, 0.1147682442f, - 0.0998698743f, 0.0698963887f, 0.0088203751f, -0.0909692208f, -0.2234220627f, -0.3756331554f, -0.5300042260f, -0.6668887743f, - -0.7671574389f, -0.8148547416f, -0.7993524069f, -0.7169019655f, -0.5713321080f, -0.3737662567f, -0.1415729584f, 0.1036716588f, - 0.3378392047f, 0.5399814296f, 0.7022792290f, 0.8235847390f, 0.9011912110f, 0.9335195531f, 0.9210148943f, 0.8662582998f, - 0.7738442006f, 0.6501373474f, 0.5028823140f, 0.3407552797f, 0.1728427401f, 0.0081212390f, -0.1450610431f, -0.2794406314f, - -0.3892283922f, -0.4703883896f, -0.5208081709f, -0.5403348331f, -0.5306924278f, -0.4952731730f, -0.4388331926f, -0.3670992988f, - -0.2863302758f, -0.2028454693f, -0.1225716070f, -0.0506164333f, 0.0090788383f, 0.0540159375f, 0.0833026194f, 0.0977385677f, - 0.0999946466f, 0.0952552716f, 0.0880995668f, 0.0797728807f, 0.0706660863f, 0.0613242080f, 0.0521689821f, 0.0435466445f, - 0.0356893133f, 0.0287479136f, 0.0227869173f, 0.0178107854f, 0.0137689980f, 0.0105778434f, 0.0081277168f, 0.0062997686f, - 0.0049716376f, 0.0040285807f, 0.0033660981f, 0.0028959547f, 0.0025456890f, 0.0022606635f, 0.0020013537f, 0.0017429261f, - 0.0014715303f, 0.0011828460f, 0.0008784722f, 0.0005645174f, 0.0002487848f, -0.0000600208f, -0.0003540749f, -0.0006264965f, - -0.0008722305f, -0.0010875779f, -0.0012705059f, -0.0014199592f, -0.0015359444f, -0.0016188954f, -0.0016697727f, -0.0016896254f, - -0.0016797991f, -0.0016416978f, -0.0015770686f, -0.0014878777f, -0.0013765796f, -0.0012459990f, -0.0010995021f, -0.0009408124f, - -0.0007740525f, -0.0006034858f, -0.0004334565f, -0.0002681040f, -0.0001112695f, 0.0000337496f, 0.0001642534f, 0.0002782887f, - 0.0003746198f, 0.0004527614f, 0.0005128644f, 0.0005556551f, 0.0005822707f, 0.0005941545f, 0.0005928931f, 0.0005801213f, - 0.0005574074f, 0.0005262036f, 0.0004878004f, 0.0004433324f, 0.0003937929f, 0.0003400774f, 0.0002830311f, 0.0002234973f, - 0.0001623637f, 0.0001005861f, 0.0000392083f, -0.0000206541f, -0.0000778269f, -0.0001311308f, -0.0001794168f, -0.0002216378f, - -0.0002568858f, -0.0002844591f, -0.0003038790f, -0.0003149350f, -0.0003176698f, -0.0003123947f, -0.0002996434f, -0.0002801639f, - -0.0002548507f, -0.0002247269f, -0.0001908697f, -0.0001543953f, -0.0001163917f, -0.0000779152f, -0.0000399357f, - 0.0000094413f, 0.0000277999f, 0.0000446903f, 0.0000593280f, 0.0000712651f, 0.0000803871f, 0.0000870097f, 0.0000917822f, - 0.0000956902f, 0.0000998716f, 0.0001055506f, 0.0001138098f, 0.0001255136f, 0.0001411003f, 0.0001605589f, 0.0001832996f, - 0.0002082298f, 0.0002337307f, 0.0002578403f, 0.0002783202f, 0.0002929118f, 0.0002994416f, 0.0002960857f, 0.0002814451f, - 0.0002547522f, 0.0002158569f, 0.0001653321f, 0.0001043455f, 0.0000346623f, -0.0000415774f, -0.0001219205f, -0.0002038633f, - -0.0002849129f, -0.0003628240f, -0.0004355962f, -0.0005016356f, -0.0005596549f, -0.0006087461f, -0.0006481918f, -0.0006774810f, - -0.0006960781f, -0.0007034418f, -0.0006988166f, -0.0006813178f, -0.0006497978f, -0.0006030351f, -0.0005396896f, -0.0004585888f, - -0.0003587409f, -0.0002396693f, -0.0001014165f, 0.0000551454f, 0.0002283928f, 0.0004157251f, 0.0006137740f, 0.0008182856f, - 0.0010244618f, 0.0012269217f, 0.0014201288f, 0.0015983649f, 0.0017561723f, 0.0018882664f, 0.0019899370f, 0.0020568553f, - 0.0020854261f, 0.0020725003f, 0.0020157272f, 0.0019132331f, 0.0017640560f, 0.0015678593f, 0.0013255131f, 0.0010388553f, - 0.0007114008f, 0.0003480516f, -0.0000442075f, -0.0004568793f, -0.0008795218f, -0.0013009102f, -0.0017091380f, -0.0020936476f, - -0.0024460089f, -0.0027628964f, -0.0030473913f, -0.0033126371f, -0.0035830824f, -0.0038981281f, -0.0043122790f, -0.0048977534f, - -0.0057421929f, -0.0069491136f, -0.0086317888f, -0.0109107455f, -0.0139027684f, -0.0177154927f, -0.0224311200f, -0.0280995831f, - -0.0347172313f, -0.0422222045f, -0.0504683384f, -0.0592304787f, -0.0681714904f, -0.0768802892f, -0.0848233610f, -0.0916208280f, - -0.0960365098f, -0.0934965965f, -0.0788165513f, -0.0493177686f, -0.0041840764f, 0.0557190363f, 0.1279300009f, 0.2085541449f, - 0.2925373176f, 0.3740109184f, 0.4467123250f, 0.5044329150f, 0.5414803943f, 0.5531103895f, 0.5359083733f, 0.4880865671f, - 0.4096810759f, 0.3026295623f, 0.1707255672f, 0.0194488912f, -0.1443186247f, -0.3126736143f, -0.4771477585f, -0.6292070969f, - -0.7607694851f, -0.8646983027f, -0.9352529748f, -0.9684532025f, -0.9623535812f, -0.9171949326f, -0.8354559290f, -0.7219447724f, - -0.5842261616f, -0.4299994224f, -0.2647671304f, -0.0936718584f, 0.0778573928f, 0.2444955397f, 0.4011508179f, 0.5431562386f, - 0.6663917866f, 0.7674190691f, 0.8435687444f, 0.8930187210f, 0.9148305827f, 0.9089668951f, 0.8762704359f, 0.8184215785f, - 0.7378630625f, 0.6377054994f, 0.5216082533f, 0.3936475943f, 0.2581703422f, 0.1196438490f, -0.0174973196f, -0.1489983380f, - -0.2709234334f, -0.3797794589f, -0.4726225629f, -0.5471418581f, -0.6017198326f, -0.6354657299f, -0.6482230521f, -0.6405498448f, - -0.6136745009f, -0.5694280123f, -0.5101568311f, -0.4386191067f, -0.3578694342f, -0.2711360702f, -0.1816960690f, -0.0927527129f, - -0.0073202620f, 0.0718799659f, 0.1425082935f, 0.2026771758f, 0.2510012829f, 0.2866256582f, 0.3092317499f, 0.3190214225f, - 0.3166807736f, 0.3033253264f, 0.2804301957f, 0.2497478163f, 0.2132181238f, 0.1728741342f, 0.1307484916f, 0.0887835046f, - 0.0487503059f, 0.0121784205f, -0.0196990379f, -0.0459852335f, -0.0661399413f, -0.0799836583f, -0.0876812985f, -0.0897120098f, - -0.0868204670f, -0.0799602374f, -0.0702221831f, -0.0587644272f, -0.0467300423f, -0.0351807009f, -0.0250131586f, -0.0169220452f, - -0.0110491061f, -0.0067999510f, -0.0036452141f, -0.0013776515f, 0.0001725658f, 0.0011515063f, 0.0016931166f, 0.0019128947f, - 0.0019119195f, 0.0017731008f, 0.0015641080f, 0.0013360166f, 0.0011263428f, 0.0009592385f, 0.0008486058f, 0.0007990396f, - 0.0008087142f, 0.0008704662f, 0.0009741845f, 0.0011076612f, 0.0012583569f, 0.0014138649f, 0.0015630668f, 0.0016962130f, - 0.0018055792f, 0.0018852562f, 0.0019314544f, 0.0019421196f, 0.0019170260f, 0.0018573192f, 0.0017655022f, 0.0016449753f, - 0.0014999823f, 0.0013351861f, 0.0011556142f, 0.0009662892f, 0.0007721962f, 0.0005779798f, 0.0003879485f, 0.0002058452f, - 0.0000348998f, -0.0001223239f, -0.0002638249f, -0.0003882481f, -0.0004947379f, -0.0005829688f, -0.0006529761f, -0.0007051597f, - -0.0007401195f, -0.0007586609f, -0.0007616586f, -0.0007500873f, -0.0007249274f, -0.0006872277f, -0.0006380521f, -0.0005785652f, - -0.0005100019f, -0.0004337551f, -0.0003513433f, -0.0002644761f, -0.0001749961f, -0.0000849056f, 0.0000037265f, 0.0000887799f, - 0.0001682047f, 0.0002400620f, 0.0003026539f, 0.0003545629f, 0.0003947614f, 0.0004226221f, 0.0004379830f, 0.0004411096f, - 0.0004327050f, 0.0004138228f, 0.0003858290f, 0.0003502817f, 0.0003088683f, 0.0002632783f, 0.0002151470f, 0.0001659510f, - 0.0001169830f, 0.0000692900f, 0.0000236931f, -0.0000192281f, -0.0000590766f, -0.0000956193f, -0.0001287082f, -0.0001582520f, - -0.0001841434f, -0.0002062459f, -0.0002243482f, -0.0002381838f, -0.0002474218f, -0.0002517193f, -0.0002507430f, -0.0002442414f, - -0.0002320758f, -0.0002142901f, -0.0001911276f, -0.0001630744f, -0.0001308436f, -0.0000953784f, -0.0000577970f, -0.0000193582f, - 0.0000186239f, 0.0000548367f, 0.0000880630f, 0.0001172340f, 0.0001415074f, 0.0001602936f, 0.0001732965f, 0.0001804997f, - 0.0001821637f, 0.0001787723f, 0.0001709948f, 0.0001596078f, 0.0001454431f, 0.0001293085f, 0.0001119454f, 0.0000939706f, - 0.0000758637f, 0.0000579434f, 0.0000403900f, 0.0000232563f, 0.0000065182f, -0.0000098944f, -0.0000260374f, -0.0000419222f, - -0.0000574677f, -0.0000724909f, -0.0000866869f, -0.0000996508f, -0.0001108899f, -0.0001198747f, -0.0001260737f, -0.0001290184f, - -0.0001283426f, -0.0001238392f, -0.0001154831f, -0.0001034619f, -0.0000881663f, -0.0000701856f, -0.0000502629f, - 0.0000100257f, 0.0000298715f, 0.0000491016f, 0.0000673457f, 0.0000842719f, 0.0000996175f, 0.0001131774f, 0.0001248226f, - 0.0001344760f, 0.0001421200f, 0.0001477626f, 0.0001514384f, 0.0001531732f, 0.0001529862f, 0.0001508606f, 0.0001467558f, - 0.0001405885f, 0.0001322589f, 0.0001216448f, 0.0001086385f, 0.0000931503f, 0.0000751504f, 0.0000546725f, 0.0000318520f, - 0.0000069213f, -0.0000197639f, -0.0000477443f, -0.0000764464f, -0.0001052188f, -0.0001333354f, -0.0001600439f, -0.0001845767f, - -0.0002062035f, -0.0002242408f, -0.0002380992f, -0.0002472837f, -0.0002514295f, -0.0002502882f, -0.0002437508f, -0.0002318205f, - -0.0002146257f, -0.0001923855f, -0.0001654183f, -0.0001341069f, -0.0000989108f, -0.0000603353f, -0.0000189514f, 0.0000246284f, - 0.0000697235f, 0.0001156056f, 0.0001614708f, 0.0002064618f, 0.0002496452f, 0.0002900437f, 0.0003266238f, 0.0003583420f, - 0.0003841453f, 0.0004030314f, 0.0004140579f, 0.0004164107f, 0.0004094151f, 0.0003926023f, 0.0003657128f, 0.0003287519f, - 0.0002819762f, 0.0002259319f, 0.0001614203f, 0.0000895170f, 0.0000115172f, -0.0000710597f, -0.0001565398f, -0.0002430985f, - -0.0003288369f, -0.0004117862f, -0.0004899853f, -0.0005614798f, -0.0006243974f, -0.0006769402f, -0.0007174577f, -0.0007444335f, - -0.0007565586f, -0.0007527147f, -0.0007320491f, -0.0006939555f, -0.0006381507f, -0.0005646499f, -0.0004738416f, -0.0003664521f, - -0.0002436140f, -0.0001068131f, 0.0000420546f, 0.0002007573f, 0.0003666837f, 0.0005369393f, 0.0007083151f, 0.0008774032f, - 0.0010405725f, 0.0011941030f, 0.0013341657f, 0.0014569762f, 0.0015587822f, 0.0016360436f, 0.0016854353f, 0.0017040651f, - 0.0016895002f, 0.0016400311f, 0.0015547178f, 0.0014336912f, 0.0012781928f, 0.0010908735f, 0.0008757648f, 0.0006385002f, - 0.0003861185f, 0.0001271046f, -0.0001290952f, -0.0003723192f, -0.0005925672f, -0.0007805994f, -0.0009292471f, -0.0010343329f, - -0.0010963449f, -0.0011215032f, -0.0011235784f, -0.0011247650f, -0.0011572825f, -0.0012635736f, -0.0014972500f, -0.0019220776f, - -0.0026119000f, -0.0036479956f, -0.0051179657f, -0.0071115979f, -0.0097197636f, -0.0130315445f, -0.0171388264f, -0.0221826026f, - -0.0285136326f, -0.0361307186f, -0.0442081981f, -0.0516559897f, -0.0573925315f, -0.0603652434f, -0.0596331395f, -0.0544264019f, - -0.0442109616f, -0.0287331963f, -0.0080564058f, 0.0174234593f, 0.0469759993f, 0.0795551974f, 0.1138332879f, 0.1482526191f, - 0.1810898747f, 0.2105329869f, 0.2347647762f, 0.2520519356f, 0.2608332916f, 0.2598051239f, 0.2479978629f, 0.2248419603f, - 0.1902182120f, 0.1444910892f, 0.0885218306f, 0.0236611727f, -0.0482797215f, -0.1250786276f, -0.2041714722f, -0.2827382419f, - -0.3578034522f, -0.4263466673f, -0.4854197016f, -0.5322651608f, -0.5644323798f, -0.5798852692f, -0.5770983111f, -0.5551358084f, - -0.5137115562f, -0.4532252989f, -0.3747746885f, -0.2801408533f, -0.1717482321f, -0.0525987506f, 0.0738169580f, 0.2036293318f, - 0.3327161135f, 0.4568415935f, 0.5718029559f, 0.6735794476f, 0.7584777874f, 0.8232695197f, 0.8653138344f, 0.8826624233f, - 0.8741407389f, 0.8394039127f, 0.7789631089f, 0.6941829200f, 0.5872472518f, 0.4610970982f, 0.3193391719f, 0.1661318331f, - 0.0060481020f, -0.1560745385f, -0.3152984295f, -0.4667504424f, -0.6057916885f, -0.7281716821f, -0.8301830623f, -0.9087761258f, - -0.9618416393f, -0.9883769508f, -0.9880544909f, -0.9610885174f, -0.9083986381f, -0.8315930415f, -0.7329302137f, -0.6152510066f, - -0.4818998000f, -0.3366264325f, -0.1834804423f, -0.0266942820f, 0.1294357761f, 0.2806718111f, 0.4229523505f, 0.5525059678f, - 0.6659544948f, 0.7604051258f, 0.8335268161f, 0.8836105772f, 0.9096104660f, 0.9111656060f, 0.8886015017f, 0.8429119395f, - 0.7757211639f, 0.6892286142f, 0.5861371807f, 0.4695681223f, 0.3429645973f, 0.2099875350f, 0.0744064202f, -0.0600110582f, - -0.1896077300f, -0.3109402608f, -0.4208745383f, -0.5166699060f, -0.5960503378f, -0.6572602031f, -0.6991036150f, -0.7209660923f, - -0.7228185799f, -0.7052037113f, -0.6692054230f, -0.6164028870f, -0.5488108092f, -0.4688079424f, -0.3790565546f, -0.2824152817f, - -0.1818484683f, -0.0803346471f, 0.0192227465f, 0.1140799262f, 0.2017298411f, 0.2799697880f, 0.3469574836f, 0.4012543426f, - 0.4418547649f, 0.4682010863f, 0.4801839581f, 0.4781287434f, 0.4627686220f, 0.4352058330f, 0.3968625180f, 0.3494232322f, - 0.2947711136f, 0.2349201359f, 0.1719456583f, 0.1079157418f, 0.0448253472f, -0.0154643795f, -0.0712800080f, -0.1211812328f, - -0.1639966775f, -0.1988491244f, -0.2251698043f, -0.2427015611f, -0.2514912990f, -0.2518722833f, -0.2444373910f, -0.2300045092f, - -0.2095756919f, -0.1842916891f, -0.1553837364f, -0.1241243795f, -0.0917792284f, -0.0595613097f, -0.0285896618f, 0.0001465056f, - 0.0258169100f, 0.0477717562f, 0.0655551910f, 0.0789104778f, 0.0877769862f, 0.0922794468f, 0.0927101873f, 0.0895053265f, - 0.0832161440f, 0.0744769454f, 0.0639709607f, 0.0523956967f, 0.0404293889f, 0.0286998006f, 0.0177569270f, 0.0080503829f, - -0.0000871632f, -0.0064505432f, -0.0109653717f, -0.0136854786f, -0.0147827090f, -0.0145338644f, -0.0132999155f, -0.0115279496f, - -0.0097143162f, -0.0081066262f, -0.0066892166f, -0.0054526910f, -0.0044043619f, -0.0035430638f, -0.0028610848f, -0.0023435648f, - -0.0019710460f, -0.0017207440f, -0.0015686177f, -0.0014906099f, -0.0014640505f, -0.0014684367f, -0.0014861739f, -0.0015028429f, - -0.0015073922f, -0.0014919944f, -0.0014518622f, -0.0013848537f, -0.0012910935f, -0.0011724856f, -0.0010322928f, -0.0008746803f, - -0.0007043572f, -0.0005262236f, -0.0003451249f, -0.0001656257f, 0.0000081168f, 0.0001724644f, 0.0003243294f, 0.0004612043f, - 0.0005811330f, 0.0006826956f, 0.0007649539f, 0.0008274212f, 0.0008700054f, 0.0008929815f, 0.0008969444f, 0.0008827894f, - 0.0008516741f, 0.0008050045f, 0.0007444000f, 0.0006716783f, 0.0005888158f, 0.0004979255f, 0.0004012090f, 0.0003009243f, - 0.0001993306f, 0.0000986487f, 0.0000010025f, -0.0000916200f, -0.0001774214f, -0.0002548259f, -0.0003225212f, -0.0003794749f, - -0.0004249577f, -0.0004585414f, -0.0004801021f, -0.0004897991f, -0.0004880609f, -0.0004755490f, -0.0004531324f, -0.0004218435f, - -0.0003828474f, -0.0003373970f, -0.0002868049f, -0.0002324032f, -0.0001755218f, -0.0001174565f, -0.0000594555f, -0.0000026960f, - 0.0000517227f, 0.0001027959f, 0.0001496166f, 0.0001913889f, 0.0002274293f, 0.0002571799f, 0.0002802094f, 0.0002962259f, - 0.0003050777f, 0.0003067640f, 0.0003014323f, 0.0002893851f, 0.0002710700f, 0.0002470789f, 0.0002181291f, 0.0001850528f, - 0.0001487686f, 0.0001102623f, 0.0000705516f, 0.0000306614f, -0.0000084134f, -0.0000457325f, -0.0000804436f, -0.0001118002f, - -0.0001391858f, -0.0001621210f, -0.0001802753f, -0.0001934613f, -0.0002016344f, -0.0002048759f, -0.0002033834f, -0.0001974478f, - -0.0001874396f, -0.0001737844f, -0.0001569508f, -0.0001374298f, -0.0001157277f, -0.0000923513f, -0.0000678073f, -0.0000425930f, - -0.0000172000f, 0.0000078915f, 0.0000322093f, 0.0000552949f, 0.0000767028f, 0.0000960105f, 0.0001128219f, 0.0001267820f, - 0.0001375845f, 0.0001449888f, 0.0001488284f, 0.0001490265f, 0.0001456006f, 0.0001386719f, 0.0001284619f, 0.0001152928f, - 0.0000995735f, 0.0000817902f, 0.0000624834f, 0.0000422315f, 0.0000216225f, 0.0000012352f, -0.0000183878f, -0.0000367552f, - 0.0001023410f, 0.0001121154f, 0.0001195973f, 0.0001245785f, 0.0001269032f, 0.0001264687f, 0.0001232335f, 0.0001172154f, - 0.0001084967f, 0.0000972190f, 0.0000835860f, 0.0000678549f, 0.0000503359f, 0.0000313814f, 0.0000113831f, -0.0000092410f, - -0.0000300509f, -0.0000505985f, -0.0000704325f, -0.0000891123f, -0.0001062126f, -0.0001213366f, -0.0001341197f, -0.0001442414f, - -0.0001514272f, -0.0001554600f, -0.0001561797f, -0.0001534931f, -0.0001473717f, -0.0001378600f, -0.0001250712f, -0.0001091929f, - -0.0000904812f, -0.0000692631f, -0.0000459277f, -0.0000209260f, 0.0000052416f, 0.0000320286f, 0.0000588582f, 0.0000851296f, - 0.0001102367f, 0.0001335760f, 0.0001545675f, 0.0001726629f, 0.0001873663f, 0.0001982416f, 0.0002049310f, 0.0002071594f, - 0.0002047497f, 0.0001976225f, 0.0001858068f, 0.0001694347f, 0.0001487471f, 0.0001240832f, 0.0000958818f, 0.0000646662f, - 0.0000310422f, -0.0000043212f, -0.0000406957f, -0.0000773156f, -0.0001133832f, -0.0001480928f, -0.0001806368f, -0.0002102303f, - -0.0002361185f, -0.0002576013f, -0.0002740408f, -0.0002848864f, -0.0002896805f, -0.0002880829f, -0.0002798740f, -0.0002649766f, - -0.0002434546f, -0.0002155298f, -0.0001815742f, -0.0001421204f, -0.0000978454f, -0.0000495727f, 0.0000017521f, 0.0000550676f, - 0.0001092294f, 0.0001630223f, 0.0002152001f, 0.0002645008f, 0.0003096899f, 0.0003495759f, 0.0003830534f, 0.0004091148f, - 0.0004268910f, 0.0004356569f, 0.0004348671f, 0.0004241540f, 0.0004033574f, 0.0003725151f, 0.0003318867f, 0.0002819362f, - 0.0002233505f, 0.0001570144f, 0.0000840236f, 0.0000056513f, -0.0000766447f, -0.0001612647f, -0.0002464668f, -0.0003304197f, - -0.0004112104f, -0.0004869065f, -0.0005555699f, -0.0006153285f, -0.0006643921f, -0.0007011284f, -0.0007240766f, -0.0007320225f, - -0.0007240025f, -0.0006993717f, -0.0006577934f, -0.0005992952f, -0.0005242405f, -0.0004333727f, -0.0003277670f, -0.0002088657f, - -0.0000784141f, 0.0000615090f, 0.0002085679f, 0.0003601400f, 0.0005134039f, 0.0006653091f, 0.0008126807f, 0.0009521955f, - 0.0010805136f, 0.0011942726f, 0.0012902629f, 0.0013654507f, 0.0014172107f, 0.0014433822f, 0.0014425598f, 0.0014141671f, - 0.0013587836f, 0.0012781916f, 0.0011756894f, 0.0010560340f, 0.0009256640f, 0.0007924355f, 0.0006656655f, 0.0005555507f, - 0.0004729584f, 0.0004284373f, 0.0004317362f, 0.0004903651f, 0.0006089185f, 0.0007872127f, 0.0010196237f, 0.0012928786f, - 0.0015857907f, 0.0018667312f, 0.0020943919f, 0.0022145657f, 0.0021631986f, 0.0018604759f, 0.0012208798f, 0.0000292075f, - -0.0021197116f, -0.0054807990f, -0.0100496540f, -0.0156837116f, -0.0221176153f, -0.0289836659f, -0.0358300499f, -0.0421477124f, - -0.0473972472f, -0.0510405877f, -0.0525715807f, -0.0515476777f, -0.0476183263f, -0.0405511583f, -0.0302526219f, -0.0167837577f, - -0.0003687048f, 0.0186033188f, 0.0395840702f, 0.0618793275f, 0.0846695731f, 0.1070368665f, 0.1279977851f, 0.1465405975f, - 0.1616659442f, 0.1724289210f, 0.1779814634f, 0.1776128485f, 0.1707870983f, 0.1571752579f, 0.1366814829f, 0.1094613028f, - 0.0759313883f, 0.0367697773f, -0.0070935349f, -0.0544959696f, -0.1040711201f, -0.1542864664f, -0.2034887901f, -0.2499561795f, - -0.2919547949f, -0.3277987591f, -0.3559109665f, -0.3748828886f, -0.3835310580f, -0.3809483068f, -0.3665476249f, -0.3400970096f, - -0.3017436398f, -0.2520263114f, -0.1918751666f, -0.1225984212f, -0.0458559702f, 0.0363795557f, 0.1218735116f, 0.2081903173f, - 0.2927633059f, 0.3729712075f, 0.4462190576f, 0.5100209195f, 0.5620818683f, 0.6003764644f, 0.6232211630f, 0.6293380722f, - 0.6179078583f, 0.5886097344f, 0.5416469980f, 0.4777568614f, 0.3982039462f, 0.3047571785f, 0.1996504916f, 0.0855281262f, - -0.0346240344f, -0.1575593206f, -0.2798609975f, -0.3980402954f, -0.5086387923f, -0.6083321215f, -0.6940317623f, -0.7629817970f, - -0.8128474994f, -0.8417929488f, -0.8485450365f, -0.8324417371f, -0.7934628536f, -0.7322420813f, -0.6500596798f, -0.5488157513f, - -0.4309846022f, -0.2995513767f, -0.1579325879f, -0.0098828159f, 0.1406098406f, 0.2894364546f, 0.4324848701f, 0.5657586229f, - 0.6854937093f, 0.7882695488f, 0.8711108731f, 0.9315772485f, 0.9678376107f, 0.9787272513f, 0.9637856763f, 0.9232737576f, - 0.8581699744f, 0.7701451849f, 0.6615174635f, 0.5351870989f, 0.3945560458f, 0.2434310351f, 0.0859296286f, -0.0736424535f, - -0.2310634168f, -0.3823114335f, -0.5235213255f, -0.6510808750f, -0.7617398230f, -0.8526941807f, -0.9216599849f, -0.9669314227f, - -0.9874241586f, -0.9827015967f, -0.9529842399f, -0.8991414091f, -0.8226659724f, -0.7256325245f, -0.6106403919f, -0.4807428752f, - -0.3393647947f, -0.1902104941f, -0.0371648883f, 0.1158098198f, 0.2647789049f, 0.4059385830f, 0.5357153558f, 0.6508586114f, - 0.7485239966f, 0.8263453865f, 0.8824935656f, 0.9157201366f, 0.9253855645f, 0.9114707230f, 0.8745717535f, 0.8158785137f, - 0.7371373367f, 0.6405992467f, 0.5289551681f, 0.4052600056f, 0.2728477634f, 0.1352400975f, -0.0039491512f, -0.1411108055f, - -0.2727359386f, -0.3955076155f, -0.5063863406f, -0.6026869640f, -0.6821450593f, -0.7429710985f, -0.7838911084f, -0.8041728778f, - -0.8036371970f, -0.7826540315f, -0.7421239451f, -0.6834454939f, -0.6084696882f, -0.5194429622f, -0.4189403872f, -0.3097911110f, - -0.1949981889f, -0.0776550965f, 0.0391387290f, 0.1523609846f, 0.2591459713f, 0.3568583179f, 0.4431590282f, 0.5160621741f, - 0.5739808402f, 0.6157612575f, 0.6407044060f, 0.6485747369f, 0.6395960249f, 0.6144347317f, 0.5741715934f, 0.5202624757f, - 0.4544898084f, 0.3789061628f, 0.2957717132f, 0.2074874749f, 0.1165262725f, 0.0253634355f, -0.0635908373f, -0.1480555764f, - -0.2259378928f, -0.2953850427f, -0.3548284161f, -0.4030183987f, -0.4390493642f, -0.4623743329f, -0.4728091652f, -0.4705264349f, - -0.4560394511f, -0.4301771396f, -0.3940507708f, -0.3490137022f, -0.2966155068f, -0.2385519527f, -0.1766124162f, -0.1126263061f, - -0.0484101006f, 0.0142835032f, 0.0738128901f, 0.1286900297f, 0.1776170652f, 0.2195161266f, 0.2535516850f, 0.2791450556f, - 0.2959808562f, 0.3040055207f, 0.3034181575f, 0.2946543119f, 0.2783633373f, 0.2553803089f, 0.2266934879f, 0.1934085139f, - 0.1567104961f, 0.1178252714f, 0.0779810094f, 0.0383713679f, 0.0001212356f, -0.0357439328f, -0.0683244197f, -0.0968674883f, - -0.1207831483f, -0.1396541129f, -0.1532399189f, -0.1614752576f, -0.1644628650f, -0.1624613596f, -0.1558686952f, -0.1452018785f, - -0.1310738418f, -0.1141682734f, -0.0952134023f, -0.0749555678f, -0.0541335559f, -0.0334544361f, -0.0135717544f, 0.0049333847f, - 0.0215677075f, 0.0359373755f, 0.0477554333f, 0.0568451598f, 0.0631392301f, 0.0666750625f, 0.0675865095f, 0.0660925397f, - 0.0624832536f, 0.0571040881f, 0.0503386382f, 0.0425910695f, 0.0342685282f, 0.0257645482f, 0.0174437200f, 0.0096285741f, - 0.0025886897f, -0.0034671163f, -0.0083958582f, -0.0121219514f, -0.0146360592f, -0.0159904888f, -0.0162924414f, -0.0156942489f, - -0.0143825819f, -0.0125652661f, -0.0104587259f, -0.0082734050f, -0.0062022974f, -0.0044063851f, -0.0030085782f, -0.0020299468f, - -0.0013564795f, -0.0008863453f, -0.0005771741f, -0.0003938621f, -0.0003061649f, -0.0002866266f, -0.0003117925f, -0.0003614869f, - -0.0004195045f, -0.0004730462f, -0.0005129312f, -0.0005329799f, -0.0005299127f, -0.0005026982f, -0.0004523006f, -0.0003810636f, - -0.0002924326f, -0.0001904381f, -0.0000794736f, 0.0000360876f, 0.0001520218f, 0.0002645035f, 0.0003701407f, 0.0004661098f, - 0.0005501197f, 0.0006204662f, 0.0006759537f, 0.0007159048f, 0.0007400667f, 0.0007486024f, 0.0007420006f, 0.0007210650f, - 0.0006868352f, 0.0006405800f, 0.0005837296f, 0.0005178714f, 0.0004446899f, 0.0003659600f, 0.0002834907f, 0.0001991139f, - 0.0001146287f, 0.0000317867f, -0.0000477626f, -0.0001224860f, -0.0001910156f, -0.0002521590f, -0.0003049377f, -0.0003485879f, - -0.0003825850f, -0.0004066332f, -0.0004206749f, -0.0004248679f, -0.0004195832f, -0.0004053722f, -0.0003829556f, -0.0003531864f, - -0.0003170337f, -0.0002755456f, -0.0002298325f, -0.0001810330f, -0.0001302996f, -0.0000787683f, -0.0000275484f, 0.0000223042f, - 0.0000697938f, 0.0001140082f, 0.0001541235f, 0.0001894239f, 0.0002193054f, 0.0002432921f, 0.0002610376f, 0.0002723377f, - 0.0002771279f, 0.0002754901f, 0.0002676451f, 0.0002539525f, 0.0002348963f, 0.0002110770f, 0.0001831908f, 0.0001520155f, - 0.0001183840f, 0.0000831661f, 0.0000472400f, 0.0000114735f, -0.0000233037f, -0.0000563155f, -0.0000868623f, -0.0001143311f, - -0.0001382112f, -0.0001580971f, -0.0001736964f, -0.0001848263f, -0.0001914138f, -0.0001934872f, -0.0001911719f, -0.0001846781f, - -0.0001742945f, -0.0001603745f, -0.0001433301f, -0.0001236179f, -0.0001017335f, -0.0000781989f, -0.0000535563f, -0.0000283571f, - -0.0000031551f, 0.0000215050f, 0.0000450945f, 0.0000671132f, 0.0000870967f, 0.0001046293f, 0.0001193514f, 0.0001309712f, - 0.0001392702f, 0.0001441122f, 0.0001454457f, 0.0001433077f, 0.0001378215f, 0.0001291946f, 0.0001177105f, 0.0001037219f, - 0.0000876371f, 0.0000699088f, 0.0000510177f, 0.0000314597f, 0.0000117289f, -0.0000076947f, -0.0000263593f, -0.0000438511f, - 0.0001150132f, 0.0001210457f, 0.0001243256f, 0.0001247272f, 0.0001221905f, 0.0001167241f, 0.0001084050f, 0.0000973782f, - 0.0000838538f, 0.0000681026f, 0.0000504506f, 0.0000312726f, 0.0000109840f, -0.0000099676f, -0.0000311119f, -0.0000519657f, - -0.0000720435f, -0.0000908672f, -0.0001079775f, -0.0001229433f, -0.0001353725f, -0.0001449210f, -0.0001513017f, -0.0001542924f, - -0.0001537428f, -0.0001495795f, -0.0001418111f, -0.0001305291f, -0.0001159099f, -0.0000982119f, -0.0000777730f, -0.0000550042f, - -0.0000303824f, -0.0000044402f, 0.0000222446f, 0.0000490630f, 0.0000753874f, 0.0001005877f, 0.0001240454f, 0.0001451693f, - 0.0001634096f, 0.0001782724f, 0.0001893315f, 0.0001962400f, 0.0001987389f, 0.0001966654f, 0.0001899567f, 0.0001786543f, - 0.0001629038f, 0.0001429540f, 0.0001191532f, 0.0000919438f, 0.0000618549f, 0.0000294929f, -0.0000044692f, -0.0000393044f, - -0.0000742456f, -0.0001085004f, -0.0001412677f, -0.0001717545f, -0.0001991934f, -0.0002228606f, -0.0002420939f, -0.0002563091f, - -0.0002650175f, -0.0002678393f, -0.0002645180f, -0.0002549296f, -0.0002390911f, -0.0002171644f, -0.0001894582f, -0.0001564244f, - -0.0001186528f, -0.0000768603f, -0.0000318787f, 0.0000153623f, 0.0000638538f, 0.0001125289f, 0.0001602850f, 0.0002060085f, - 0.0002485978f, 0.0002869886f, 0.0003201766f, 0.0003472410f, 0.0003673652f, 0.0003798567f, 0.0003841643f, 0.0003798944f, - 0.0003668225f, 0.0003449050f, 0.0003142851f, 0.0002752981f, 0.0002284708f, 0.0001745194f, 0.0001143417f, 0.0000490064f, - -0.0000202635f, -0.0000921091f, -0.0001650610f, -0.0002375657f, -0.0003080181f, -0.0003747934f, -0.0004362837f, -0.0004909328f, - -0.0005372734f, -0.0005739597f, -0.0005998016f, -0.0006137920f, -0.0006151340f, -0.0006032611f, -0.0005778563f, -0.0005388644f, - -0.0004865040f, -0.0004212729f, -0.0003439544f, -0.0002556177f, -0.0001576201f, -0.0000516007f, 0.0000605233f, 0.0001765734f, - 0.0002941267f, 0.0004105520f, 0.0005230524f, 0.0006287329f, 0.0007246810f, 0.0008080802f, 0.0008763365f, 0.0009272432f, - 0.0009591516f, 0.0009711764f, 0.0009633904f, 0.0009370386f, 0.0008947118f, 0.0008405162f, 0.0007801566f, 0.0007209907f, - 0.0006719403f, 0.0006433567f, 0.0006466802f, 0.0006940691f, 0.0007977534f, 0.0009694468f, 0.0012193921f, 0.0015557448f, - 0.0019833924f, 0.0025041582f, 0.0031158854f, 0.0038235626f, 0.0046346272f, 0.0054390989f, 0.0060159327f, 0.0061653048f, - 0.0057248818f, 0.0045689017f, 0.0026174491f, -0.0001576249f, -0.0037279496f, -0.0080071970f, -0.0128521554f, -0.0180669900f, - -0.0234101334f, -0.0286038762f, -0.0333460639f, -0.0373236148f, -0.0402271782f, -0.0417664366f, -0.0416853226f, -0.0397765655f, - -0.0358948666f, -0.0299681460f, -0.0220062759f, -0.0121068734f, -0.0004577646f, 0.0126640959f, 0.0268973823f, 0.0418047890f, - 0.0568849057f, 0.0715872627f, 0.0853301253f, 0.0975204815f, 0.1075755810f, 0.1149452916f, 0.1191344911f, 0.1197246774f, - 0.1163939799f, 0.1089347803f, 0.0972682074f, 0.0814548499f, 0.0617011436f, 0.0383610136f, 0.0119325064f, -0.0169506961f, - -0.0475328132f, -0.0789543128f, -0.1102746589f, -0.1404988789f, -0.1686072305f, -0.1935871058f, -0.2144662161f, -0.2303460115f, - -0.2404342559f, -0.2440756538f, -0.2407794617f, -0.2302430666f, -0.2123706161f, -0.1872859065f, -0.1553388989f, -0.1171054066f, - -0.0733797097f, -0.0251600584f, 0.0263727389f, 0.0798832323f, 0.1339151136f, 0.1869300341f, 0.2373504277f, 0.2836051694f, - 0.3241767553f, 0.3576486211f, 0.3827511531f, 0.3984049546f, 0.4037599595f, 0.3982290834f, 0.3815152127f, 0.3536305207f, - 0.3149072795f, 0.2659995936f, 0.2078757153f, 0.1418008973f, 0.0693110001f, -0.0078226274f, -0.0876362185f, -0.1680235605f, - -0.2467916047f, -0.3217202299f, -0.3906245377f, -0.4514179183f, -0.5021740836f, -0.5411862254f, -0.5670215229f, -0.5785692885f, - -0.5750812186f, -0.5562023763f, -0.5219918070f, -0.4729319281f, -0.4099261771f, -0.3342846951f, -0.2476981973f, -0.1522004957f, - -0.0501205046f, 0.0559751503f, 0.1633474747f, 0.2691567323f, 0.3705384397f, 0.4646816888f, 0.5489076127f, 0.6207458062f, - 0.6780064885f, 0.7188463213f, 0.7418258915f, 0.7459571192f, 0.7307390569f, 0.6961809001f, 0.6428113176f, 0.5716736392f, - 0.4843067689f, 0.3827121551f, 0.2693074809f, 0.1468681897f, 0.0184582454f, -0.1126480739f, -0.2430513537f, -0.3693168934f, - -0.4880668522f, -0.5960721328f, -0.6903415076f, -0.7682054473f, -0.8273923237f, -0.8660947411f, -0.8830241082f, -0.8774517523f, - -0.8492353530f, -0.7988297417f, -0.7272816665f, -0.6362084256f, -0.5277608621f, -0.4045714971f, -0.2696891599f, -0.1265016829f, - 0.0213512370f, 0.1700728247f, 0.3158090264f, 0.4547507613f, 0.5832357292f, 0.6978471330f, 0.7955064526f, 0.8735578646f, - 0.9298417700f, 0.9627555531f, 0.9712996189f, 0.9551076043f, 0.9144595827f, 0.8502781043f, 0.7641067542f, 0.6580721014f, - 0.5348295632f, 0.3974950823f, 0.2495638365f, 0.0948188243f, -0.0627690415f, -0.2191456458f, -0.3702816044f, -0.5122788950f, - -0.6414754270f, -0.7545417373f, -0.8485716286f, -0.9211570287f, -0.9704889399f, -0.9954247591f, -0.9954218673f, -0.9705217574f, - -0.9213839861f, -0.8492714879f, -0.7560202971f, -0.6439925425f, -0.5160173451f, -0.3753189325f, -0.2254355616f, -0.0701299883f, - 0.0867051692f, 0.2411456382f, 0.3893340590f, 0.5275770178f, 0.6524375705f, 0.7608213615f, 0.8500537691f, 0.9179464760f, - 0.9628514821f, 0.9837014823f, 0.9800353577f, 0.9520083832f, 0.9003867192f, 0.8265265439f, 0.7323382228f, 0.6202366175f, - 0.4930786891f, 0.3540901510f, 0.2067829436f, 0.0548657749f, -0.0978500833f, -0.2475472308f, -0.3904984352f, -0.5231602531f, - -0.6422616826f, -0.7448855335f, -0.8285405425f, -0.8912223677f, -0.9314620191f, -0.9483604838f, -0.9416087836f, -0.9114929628f, - -0.8588840025f, -0.7852129374f, -0.6924319284f, -0.5829623058f, -0.4596310148f, -0.3255970991f, -0.1842701886f, -0.0392230686f, - 0.1058993714f, 0.2474725071f, 0.3819832739f, 0.5061180987f, 0.6168452203f, 0.7114893652f, 0.7877968946f, 0.8439898530f, - 0.8788075843f, 0.8915349645f, 0.8820165939f, 0.8506567100f, 0.7984048958f, 0.7267280723f, 0.6375695654f, 0.5332964054f, - 0.4166362696f, 0.2906057742f, 0.1584319899f, 0.0234692546f, -0.1108865770f, -0.2412842200f, -0.3645012037f, -0.4775241203f, - -0.5776228825f, -0.6624171300f, -0.7299331734f, -0.7786500916f, -0.8075339158f, -0.8160591222f, -0.8042170147f, -0.7725108907f, - -0.7219382530f, -0.6539606307f, -0.5704619141f, -0.4736963677f, -0.3662277643f, -0.2508612725f, -0.1305699260f, -0.0084175965f, - 0.1125195105f, 0.2292308248f, 0.3388468469f, 0.4387101575f, 0.5264402212f, 0.5999904058f, 0.6576958356f, 0.6983109662f, - 0.7210360284f, 0.7255318034f, 0.7119224786f, 0.6807866622f, 0.6331369228f, 0.5703885257f, 0.4943182949f, 0.4070147863f, - 0.3108211535f, 0.2082722739f, 0.1020278156f, -0.0051969757f, -0.1107009698f, -0.2118655199f, -0.3062197747f, -0.3915012914f, - -0.4657104605f, -0.5271574266f, -0.5745004072f, -0.6067745424f, -0.6234106746f, -0.6242437161f, -0.6095105484f, -0.5798376568f, - -0.5362189802f, -0.4799846893f, -0.4127618434f, -0.3364280618f, -0.2530595200f, -0.1648746973f, -0.0741754031f, 0.0167133565f, - 0.1055030935f, 0.1899996005f, 0.2681572959f, 0.3381288062f, 0.3983085785f, 0.4473694991f, 0.4842916874f, 0.5083828586f, - 0.5192898714f, 0.5170013229f, 0.5018412808f, 0.4744544796f, 0.4357835192f, 0.3870388112f, 0.3296621862f, 0.2652852328f, - 0.1956835517f, 0.1227281969f, 0.0483356232f, -0.0255825221f, -0.0971684532f, -0.1646648843f, -0.2264580855f, -0.2811163005f, - -0.3274226190f, -0.3644015563f, -0.3913387774f, -0.4077935926f, -0.4136040520f, -0.4088846629f, -0.3940169539f, -0.3696332868f, - -0.3365944947f, -0.2959620717f, -0.2489657697f, -0.1969675619f, -0.1414230072f, -0.0838410952f, -0.0257436705f, 0.0313744817f, - 0.0860838469f, 0.1370557180f, 0.1830941784f, 0.2231637715f, 0.2564122248f, 0.2821877493f, 0.3000505886f, 0.3097786572f, - 0.3113672668f, 0.3050231025f, 0.2911527592f, 0.2703462881f, 0.2433563271f, 0.2110734944f, 0.1744988056f, 0.1347139397f, - 0.0928502123f, 0.0500571304f, 0.0074713874f, -0.0338128732f, -0.0727717585f, -0.1084765990f, -0.1401155933f, -0.1670116352f, - -0.1886359510f, -0.2046172992f, -0.2147466154f, -0.2189771152f, -0.2174199887f, -0.2103359435f, -0.1981229573f, -0.1813006959f, - -0.1604921331f, -0.1364029689f, -0.1097994880f, -0.0814855216f, -0.0522791841f, -0.0229900383f, 0.0056026879f, 0.0327702587f, - 0.0578524543f, 0.0802730249f, 0.0995522334f, 0.1153162297f, 0.1273031071f, 0.1353655831f, 0.1394703527f, 0.1396942492f, - 0.1362174419f, 0.1293139704f, 0.1193399898f, 0.1067201472f, 0.0919325573f, 0.0754928613f, 0.0579378715f, 0.0398092914f, - 0.0216379870f, 0.0039292462f, -0.0128505743f, -0.0282856818f, -0.0420204769f, -0.0537669816f, -0.0633099271f, -0.0705094521f, - -0.0753014229f, -0.0776954715f, -0.0777709009f, -0.0756706792f, -0.0715937815f, -0.0657861933f, -0.0585309019f, -0.0501372415f, - -0.0409299405f, -0.0312382391f, -0.0213854050f, -0.0116789736f, -0.0024019780f, 0.0061945814f, 0.0138978546f, 0.0205376997f, - 0.0259896162f, 0.0301760169f, 0.0330658894f, 0.0346729129f, 0.0350521841f, 0.0342957066f, 0.0325268747f, 0.0298941639f, - 0.0265643082f, 0.0227151980f, 0.0185287912f, 0.0141842567f, 0.0098516209f, 0.0056860875f, 0.0018232500f, -0.0016247097f, - -0.0045716876f, -0.0069591888f, -0.0087566559f, -0.0099606909f, -0.0105931800f, -0.0106985104f, -0.0103399437f, -0.0095954160f, - -0.0085528538f, -0.0073053349f, -0.0059461694f, -0.0045642672f, -0.0032398065f, -0.0020405892f, -0.0010189826f, -0.0002098435f, - 0.0003708603f, 0.0007263907f, 0.0008791003f, 0.0008719916f, 0.0007765784f, 0.0006548666f, 0.0005262292f, 0.0003982537f, - 0.0002793177f, 0.0001753141f, 0.0000904043f, 0.0000267020f, -0.0000151645f, -0.0000359786f, -0.0000374823f, -0.0000222110f, - 0.0000068647f, 0.0000464960f, 0.0000934169f, 0.0001444514f, 0.0001966810f, 0.0002474932f, 0.0002946695f, 0.0003363826f, - 0.0003712266f, 0.0003981800f, 0.0004166001f, 0.0004261695f, 0.0004268735f, 0.0004189444f, 0.0004028356f, 0.0003791712f, - 0.0003487233f, 0.0003123700f, 0.0002710780f, 0.0002258678f, 0.0001778001f, 0.0001279460f, 0.0000773754f, 0.0000271305f, - -0.0000217852f, -0.0000684311f, -0.0001119393f, -0.0001515353f, -0.0001865458f, -0.0002164146f, -0.0002407060f, -0.0002591149f, - -0.0002714651f, -0.0002777121f, -0.0002779362f, -0.0002723393f, -0.0002612330f, -0.0002450307f, -0.0002242325f, -0.0001994145f, - -0.0001712119f, -0.0001403075f, -0.0001074144f, -0.0000732647f, -0.0000385932f, -0.0000041262f, 0.0000294329f, 0.0000614144f, - 0.0000911952f, 0.0001182080f, 0.0001419530f, 0.0001620054f, 0.0001780247f, 0.0001897598f, 0.0001970554f, 0.0001998531f, - 0.0001981941f, 0.0001922157f, 0.0001821496f, 0.0001683132f, 0.0001511033f, 0.0001309836f, 0.0001084739f, 0.0000841346f, - 0.0000585541f, 0.0000323319f, 0.0000060653f, -0.0000196656f, -0.0000443104f, -0.0000673606f, -0.0000883586f, -0.0001069066f, - -0.0001226716f, -0.0001353906f, -0.0001448717f, -0.0001509959f, -0.0001537153f, -0.0001530521f, -0.0001490949f, -0.0001419958f, - -0.0001319651f, -0.0001192675f, -0.0001042156f, -0.0000871648f, -0.0000685059f, -0.0000486591f, -0.0000280649f, -0.0000071771f, - 0.0000135476f, 0.0000336575f, 0.0000527172f, 0.0000703161f, 0.0000860792f, 0.0000996749f, 0.0001108247f, 0.0001193085f, - 0.0001249716f, 0.0001277272f, 0.0001275584f, 0.0001245179f, 0.0001187256f, 0.0001103637f, 0.0000996709f, 0.0000869347f, - 0.0001080714f, 0.0000990683f, 0.0000875489f, 0.0000737219f, 0.0000578554f, 0.0000402709f, 0.0000213391f, 0.0000014712f, - -0.0000188884f, -0.0000392732f, -0.0000592037f, -0.0000782001f, -0.0000957929f, -0.0001115356f, -0.0001250152f, -0.0001358638f, - -0.0001437678f, -0.0001484773f, -0.0001498120f, -0.0001476681f, -0.0001420207f, -0.0001329265f, -0.0001205227f, -0.0001050259f, - -0.0000867271f, -0.0000659874f, -0.0000432293f, -0.0000189302f, 0.0000063897f, 0.0000321758f, 0.0000578526f, 0.0000828338f, - 0.0001065369f, 0.0001283935f, 0.0001478642f, 0.0001644485f, 0.0001776986f, 0.0001872284f, 0.0001927257f, 0.0001939584f, - 0.0001907842f, 0.0001831541f, 0.0001711180f, 0.0001548245f, 0.0001345226f, 0.0001105567f, 0.0000833641f, 0.0000534651f, - 0.0000214568f, -0.0000120012f, -0.0000461970f, -0.0000803840f, -0.0001137931f, -0.0001456534f, -0.0001752051f, -0.0002017210f, - -0.0002245193f, -0.0002429841f, -0.0002565765f, -0.0002648525f, -0.0002674704f, -0.0002642056f, -0.0002549531f, -0.0002397370f, - -0.0002187078f, -0.0001921470f, -0.0001604577f, -0.0001241645f, -0.0000838982f, -0.0000403913f, 0.0000055419f, 0.0000530134f, - 0.0001010845f, 0.0001487757f, 0.0001950921f, 0.0002390326f, 0.0002796173f, 0.0003158959f, 0.0003469755f, 0.0003720281f, - 0.0003903206f, 0.0004012217f, 0.0004042346f, 0.0003990046f, 0.0003853554f, 0.0003632970f, 0.0003330658f, 0.0002951288f, - 0.0002502244f, 0.0001993576f, 0.0001438330f, 0.0000852306f, 0.0000254212f, -0.0000334924f, -0.0000891888f, -0.0001392362f, - -0.0001811447f, -0.0002125359f, -0.0002312354f, -0.0002355083f, -0.0002241797f, -0.0001969318f, -0.0001544184f, -0.0000986120f, - -0.0000328538f, 0.0000377552f, 0.0001064640f, 0.0001643821f, 0.0002009417f, 0.0002030084f, 0.0001564122f, 0.0000272101f, - -0.0002474236f, -0.0007077450f, -0.0013549123f, -0.0021692285f, -0.0031123474f, -0.0041302220f, -0.0051556983f, -0.0061124129f, - -0.0069187044f, -0.0074922749f, -0.0077547251f, -0.0076363116f, -0.0070802717f, -0.0060468886f, -0.0045167944f, -0.0024936150f, - -0.0000055857f, 0.0028937610f, 0.0061260810f, 0.0095897406f, 0.0131624981f, 0.0167051532f, 0.0200661755f, 0.0230870624f, - 0.0256083449f, 0.0274759454f, 0.0285477406f, 0.0287000110f, 0.0278335968f, 0.0258794506f, 0.0228034121f, 0.0186099337f, - 0.0133446258f, 0.0070954201f, -0.0000077076f, -0.0077945612f, -0.0160580606f, -0.0245590879f, -0.0330327072f, -0.0411956451f, - -0.0487548015f, -0.0554165787f, -0.0608967236f, -0.0649304010f, -0.0672821451f, -0.0677553773f, -0.0662011304f, -0.0625256765f, - -0.0566967379f, -0.0487480334f, -0.0387819173f, -0.0269699584f, -0.0135513300f, 0.0011710168f, 0.0168363911f, 0.0330344995f, - 0.0493155343f, 0.0652019647f, 0.0802017491f, 0.0938226053f, 0.1055869534f, 0.1150470840f, 0.1218001096f, 0.1255022179f, - 0.1258817753f, 0.1227508252f, 0.1160145780f, 0.1056785154f, 0.0918528133f, 0.0747538316f, 0.0547025267f, 0.0321197033f, - 0.0075181359f, -0.0185083336f, -0.0452985039f, -0.0721400382f, -0.0982878107f, -0.1229839236f, -0.1454788614f, -0.1650532162f, - -0.1810393625f, -0.1928424604f, -0.1999601464f, -0.2020003079f, -0.1986963539f, -0.1899194667f, -0.1756873734f, -0.1561692785f, - -0.1316866814f, -0.1027099283f, -0.0698504512f, -0.0338487823f, 0.0044414588f, 0.0440732723f, 0.0840292465f, 0.1232472348f, - 0.1606481100f, 0.1951648730f, 0.2257723487f, 0.2515166502f, 0.2715435877f, 0.2851251931f, 0.2916835749f, 0.2908113564f, - 0.2822880398f, 0.2660917210f, 0.2424057072f, 0.2116197075f, 0.1743254190f, 0.1313064718f, 0.0835228630f, 0.0320901527f, - -0.0217461395f, -0.0766403699f, -0.1311801252f, -0.1839222820f, -0.2334308512f, -0.2783156266f, -0.3172706001f, -0.3491110990f, - -0.3728086001f, -0.3875222240f, -0.3926259708f, -0.3877308633f, -0.3727012727f, -0.3476648529f, -0.3130156636f, -0.2694102425f, - -0.2177565698f, -0.1591960621f, -0.0950789218f, -0.0269333587f, 0.0435706287f, 0.1146620553f, 0.1845133465f, 0.2512872136f, - 0.3131848107f, 0.3684939113f, 0.4156358207f, 0.4532097440f, 0.4800333796f, 0.4951785767f, 0.4980010130f, 0.4881629819f, - 0.4656485511f, 0.4307705397f, 0.3841689741f, 0.3268008962f, 0.2599216377f, 0.1850578889f, 0.1039731292f, 0.0186261878f, - -0.0688760906f, -0.1563309363f, -0.2414952059f, -0.3221429964f, -0.3961238341f, -0.4614199206f, -0.5162009081f, -0.5588747253f, - -0.5881330481f, -0.6029901331f, -0.6028138835f, -0.5873482068f, -0.5567259364f, -0.5114718287f, -0.4524953996f, -0.3810736314f, - -0.2988238434f, -0.2076672897f, -0.1097842922f, -0.0075619595f, 0.0964642567f, 0.1996737260f, 0.2994269495f, 0.3931333240f, - 0.4783186205f, 0.5526904067f, 0.6141996858f, 0.6610970894f, 0.6919820919f, 0.7058438677f, 0.7020926210f, 0.6805804458f, - 0.6416110407f, 0.5859378797f, 0.5147507447f, 0.4296508188f, 0.3326148490f, 0.2259491718f, 0.1122346729f, -0.0057360023f, - -0.1250274487f, -0.2426350011f, -0.3555608763f, -0.4608910229f, -0.5558706911f, -0.6379767588f, -0.7049849023f, -0.7550298238f, - -0.7866568993f, -0.7988638266f, -0.7911310876f, -0.7634403277f, -0.7162800506f, -0.6506383584f, -0.5679827902f, -0.4702276607f, - -0.3596896122f, -0.2390324220f, -0.1112023801f, 0.0206441788f, 0.1532193990f, 0.2831865095f, 0.4072444271f, 0.5222121895f, - 0.6251110517f, 0.7132421052f, 0.7842573939f, 0.8362226383f, 0.8676698916f, 0.8776386903f, 0.8657045557f, 0.8319940114f, - 0.7771856339f, 0.7024969994f, 0.6096577639f, 0.5008694615f, 0.3787529642f, 0.2462848589f, 0.1067243047f, -0.0364678261f, - -0.1797154905f, -0.3194175307f, -0.4520389446f, -0.5742010518f, -0.6827682255f, -0.7749289589f, -0.8482691444f, -0.9008356561f, - -0.9311885385f, -0.9384404163f, -0.9222820323f, -0.8829932011f, -0.8214388065f, -0.7390498855f, -0.6377901922f, -0.5201090426f, - -0.3888815657f, -0.2473378465f, -0.0989827048f, 0.0524918607f, 0.2032993783f, 0.3496543888f, 0.4878683054f, 0.6144431772f, - 0.7261609761f, 0.8201660863f, 0.8940388909f, 0.9458585157f, 0.9742531243f, 0.9784364026f, 0.9582292951f, 0.9140663528f, - 0.8469865241f, 0.7586085363f, 0.6510914981f, 0.5270816374f, 0.3896465540f, 0.2421985725f, 0.0884091910f, -0.0678832812f, - -0.2227704771f, -0.3723727403f, -0.5129372944f, -0.6409334118f, -0.7531420237f, -0.8467376100f, -0.9193601068f, -0.9691751619f, - -0.9949209725f, -0.9959407463f, -0.9721996606f, -0.9242862434f, -0.8533978301f, -0.7613110254f, -0.6503400677f, -0.5232887671f, - -0.3833452070f, -0.2339716460f, -0.0788505878f, 0.0781931324f, 0.2332895986f, 0.3826182078f, 0.5225019620f, 0.6494973950f, - 0.7604792743f, 0.8527171215f, 0.9239423238f, 0.9724036977f, 0.9969105248f, 0.9968616872f, 0.9722604412f, 0.9237142440f, - 0.8524198184f, 0.7601336589f, 0.6491288368f, 0.5221390436f, 0.3822913495f, 0.2330292358f, 0.0780278756f, -0.0788963298f, - -0.2338796641f, -0.3831062116f, -0.5229017760f, -0.6498243415f, -0.7607488022f, -0.8529439154f, -0.9241395420f, -0.9725825570f, - -0.9970800142f, -0.9970285365f, -0.9724291748f, -0.9238873987f, -0.8525981906f, -0.7603166365f, -0.6493147113f, -0.5223253486f, - -0.3824751467f, -0.2332073920f, -0.0781972729f, 0.0787386074f, 0.2337362092f, 0.3829791953f, 0.5227929031f, 0.6497348216f, - 0.7606793588f, 0.8528947992f, 0.9241105706f, 0.9725731485f, 0.9970892373f, 0.9970551505f, 0.9724716796f, 0.9239440737f, - 0.8526671417f, 0.7603958321f, 0.6494020269f, 0.5224186015f, 0.3825721394f, 0.2333059467f, 0.0782952740f, -0.0786431789f, - -0.2336452368f, -0.3828943954f, -0.5227157923f, -0.6496666924f, -0.7606212560f, -0.8528475077f, -0.9240746034f, -0.9725487476f, - -0.9970763762f, -0.9970535479f, -0.9724808145f, -0.9239632108f, -0.8526953557f, -0.7604320409f, -0.6494450222f, -0.5224670848f, - -0.3826247539f, -0.2333613129f, -0.0783520192f, 0.0785863895f, 0.2335896751f, 0.3828412460f, 0.5226661333f, 0.6496214780f, - 0.7605813048f, 0.8528134912f, 0.9240470409f, 0.9725280010f, 0.9970626504f, 0.9970468907f, 0.9724811225f, 0.9239702338f, - 0.8527087070f, 0.7604512067f, 0.6494693756f, 0.5224958998f, 0.3826572234f, 0.2333965660f, 0.0783891427f, -0.0785483312f, - -0.2335516168f, -0.3828041004f, -0.5226307686f, -0.6495886980f, -0.7605518286f, -0.8527879374f, -0.9240259128f, -0.9725116771f, - -0.9970513761f, -0.9970407770f, -0.9724801457f, -0.9239742417f, -0.8527174266f, -0.7604642572f, -0.6494862818f, -0.5225161097f, - -0.3826801252f, -0.2334215076f, -0.0784154487f, 0.0785213402f, 0.2335246089f, 0.3827777168f, 0.5226056112f, 0.6495653171f, - 0.7605307154f, 0.8527695153f, 0.9240105331f, 0.9724996141f, 0.9970428253f, 0.9970358530f, 0.9724788823f, 0.9239765920f, - 0.8527232652f, 0.7604733819f, 0.6494984183f, 0.5225309161f, 0.3826971989f, 0.2334403933f, 0.0784356488f, -0.0785003550f, - -0.2335033857f, -0.3827568073f, -0.5225855558f, -0.6495466309f, -0.7605138718f, -0.8527549335f, -0.9239985644f, -0.9724905323f, - -0.9970368187f, -0.9970330198f, -0.9724792289f, -0.9239800349f, -0.8527296357f, -0.7604824344f, -0.6495098398f, -0.5225443385f, - -0.3827122124f, -0.2334565601f, -0.0784525165f, 0.0784832397f, 0.2334864657f, 0.3827405037f, 0.5225702598f, 0.6495326959f, - 0.7605016087f, 0.8527446058f, 0.9239903860f, 0.9724846653f, 0.9970333725f, 0.9970320501f, 0.9724807380f, 0.9239839714f, - 0.8527358952f, 0.7604908594f, 0.6495202224f, 0.5225564219f, 0.3827256949f, 0.2334710996f, 0.0784677378f, -}; - - -const float ivas_fb_resp_cheby_ramp_32del[IVAS_FB_1MS_32K_SAMP + 1] = -{ - 0.010231040569020f, 0.007495943710050f, 0.010178929162785f, 0.013398453336031f, - 0.017224667421257f, 0.021716621502222f, 0.026933804139047f, 0.032948050269901f, - 0.039809603616101f, 0.047574690662976f, 0.056302264669850f, 0.066034303975194f, - 0.076798058466510f, 0.088625188565940f, 0.101547758277136f, 0.115583678333348f, - 0.130755763247409f, 0.147071750845082f, 0.164507415202116f, 0.183014970904299f, - 0.202613741800170f, 0.223272731589440f, 0.244918942156018f, 0.267509604208255f, - 0.290972907623430f, 0.315243955993690f, 0.340239023615672f, 0.365855210507665f, - 0.392018902968585f, 0.418630748275114f, 0.445572918038597f, 0.472730394874248f, - 0.500000000000000f -}; - -const float ivas_fb_resp_cheby_ramp_16del[IVAS_FB_1MS_16K_SAMP + 1] = -{ - 0.010924831305822f, 0.013910402297200f, 0.022265243822209f, 0.033383809618597f, - 0.047654785522720f, 0.065424889526712f, 0.087005871336219f, 0.112572807795153f, - 0.142228383484898f, 0.175983302431557f, 0.213688773924401f, 0.255075179343390f, - 0.299758845354607f, 0.347229042543433f, 0.396890172892483f, 0.448063390053926f, - 0.500000000000000f -}; -#endif const Word16 ivas_num_active_bands[FB - WB + 1] = { @@ -6273,601 +3045,17 @@ const Word16 ivas_sns_cdbks_tcx20_levels[SNS_MSVQ_NSTAGES_TCX20] = { 128, 64, 32 const Word16 ivas_sns_cdbks_tcx20_bits[SNS_MSVQ_NSTAGES_TCX20] = { 7, 6, 5, 5 }; /* pre-rounded codebook vectors for singed Q4.12 represantation */ -#ifndef IVAS_FLOAT_FIXED -const float ivas_sns_cdbk_tcx20_stage1[ 128 * 16 ] = -{ - -1.8305664f, -2.0878906f, -0.9638672f, 2.8059082f, 2.668213f, 1.1638184f, 1.390625f, 1.217041f, 1.3850098f, 0.44555664f, -0.47045898f, -0.5307617f, -0.810791f, -1.1647949f, -1.4560547f, -1.7612305f, - -2.5979004f, -3.3308105f, -1.8554688f, -0.3605957f, 1.6828613f, 2.5871582f, 0.98168945f, 0.22436523f, -0.13110352f, 0.16699219f, 1.5004883f, 0.3293457f, 0.33569336f, 1.1591797f, 0.1796875f, -0.8718262f, - 1.982666f, 2.2011719f, 1.1525879f, 0.8093262f, 0.86499023f, 1.1618652f, 1.2888184f, 1.3618164f, 1.0827637f, 0.83251953f, 0.12011719f, -0.7182617f, -2.1948242f, -3.0500488f, -3.3571777f, -3.53833f, - 0.15771484f, 1.1040039f, 0.39282227f, -0.6479492f, -1.0939941f, -1.0437012f, -1.2055664f, -1.1469727f, -0.998291f, -0.37768555f, 0.3486328f, 1.081543f, 1.2700195f, 1.2143555f, 0.8371582f, 0.107666016f, - 0.24438477f, -0.70751953f, -1.1660156f, -1.1777344f, -0.24536133f, 0.39624023f, 1.112793f, 1.232666f, 1.3540039f, 1.088623f, 0.9001465f, 0.9003906f, -0.030761719f, -0.83740234f, -1.2800293f, -1.7849121f, - -0.91918945f, -0.18603516f, -0.7397461f, -1.5285645f, -1.7453613f, -1.2680664f, -0.9445801f, 0.2434082f, 1.3000488f, 1.6604004f, 1.2814941f, 1.0026855f, 0.71484375f, 0.56347656f, 0.47509766f, 0.09008789f, - 2.4824219f, 1.4541016f, 0.91064453f, 0.6765137f, 0.5678711f, 0.6965332f, 0.7609863f, 0.70410156f, 0.36108398f, -0.032470703f, -0.69140625f, -1.1281738f, -1.4833984f, -1.5556641f, -1.7043457f, -2.0187988f, - 2.41333f, 1.4936523f, 0.9902344f, 0.9104004f, 0.7211914f, 0.5522461f, 0.09326172f, -0.21655273f, -0.49560547f, -0.4873047f, -0.7363281f, -0.9211426f, -1.0041504f, -0.9875488f, -1.0681152f, -1.2578125f, - -0.814209f, 1.2546387f, 1.6965332f, 1.420166f, 0.99560547f, 1.1420898f, 1.0039062f, 0.9289551f, 0.6604004f, 0.22485352f, -0.6530762f, -1.2009277f, -1.2949219f, -1.3759766f, -1.7175293f, -2.2705078f, - -1.3979492f, 0.18896484f, 0.34814453f, -0.052001953f, -0.38623047f, -0.25878906f, -0.3371582f, -0.109375f, -0.08227539f, 0.07495117f, -0.019042969f, 0.1184082f, 0.30566406f, 0.5102539f, 0.6755371f, 0.4206543f, - 1.0683594f, 1.9543457f, 2.1296387f, 2.071045f, 1.5754395f, 1.1333008f, 0.4248047f, -0.19799805f, -0.84350586f, -1.079834f, -1.3415527f, -1.3908691f, -1.3967285f, -1.3078613f, -1.3322754f, -1.4663086f, - 2.3891602f, 2.5097656f, 1.144043f, 0.36572266f, -0.16894531f, -0.23388672f, 0.26879883f, 0.7692871f, 0.54589844f, 0.5180664f, -0.26879883f, -0.92211914f, -1.2089844f, -1.4658203f, -1.9033203f, -2.338623f, - -1.3549805f, 1.3427734f, 1.5871582f, 1.9365234f, 0.58935547f, 0.4892578f, -0.17675781f, -0.19458008f, 0.11352539f, 0.01928711f, 0.30419922f, -0.23291016f, -2.1499023f, -1.2368164f, -0.20922852f, -0.8269043f, - 0.8769531f, -1.5319824f, -1.6025391f, -1.3833008f, -0.57299805f, -0.8847656f, -0.90600586f, -0.986084f, -1.1860352f, -1.3520508f, -1.2216797f, -0.49902344f, 1.5070801f, 4.0805664f, 2.208496f, 3.4538574f, - 4.114258f, 3.3249512f, 2.2033691f, 1.0500488f, 0.14770508f, -0.36547852f, -0.748291f, -0.8503418f, -1.0917969f, -1.0305176f, -1.1955566f, -1.2768555f, -1.1767578f, -1.0061035f, -0.9506836f, -1.1477051f, - 0.7878418f, 2.513916f, 1.0112305f, -0.767334f, -1.3525391f, -0.86865234f, 0.42456055f, 1.4470215f, 1.2680664f, 1.1574707f, -0.41333008f, -0.92993164f, -0.9226074f, -0.92285156f, -0.80859375f, -1.6242676f, - -2.2216797f, -1.2346191f, -0.4008789f, 0.59765625f, -0.49389648f, 1.1911621f, 0.032470703f, 1.3654785f, 0.43139648f, 1.2021484f, 1.6652832f, 0.58862305f, -0.29541016f, -0.99560547f, -1.0366211f, -0.39526367f, - -1.8601074f, -2.9248047f, 0.14648438f, 0.61157227f, 0.6274414f, -1.3579102f, 0.48095703f, -0.4399414f, 0.57006836f, 1.1831055f, -1.1950684f, 0.828125f, 1.2575684f, 1.5888672f, 0.5510254f, -0.06762695f, - 2.1816406f, 2.8918457f, 2.9243164f, 2.5839844f, 2.2548828f, 1.7543945f, 0.92626953f, 0.45751953f, -0.17285156f, -0.9650879f, -1.7875977f, -2.3608398f, -2.6245117f, -2.6313477f, -2.6652832f, -2.767334f, - 2.0964355f, 0.20458984f, -1.2553711f, -2.0012207f, -1.9951172f, -1.407959f, -1.0788574f, -0.47460938f, -0.01928711f, 0.45239258f, 0.73779297f, 0.9333496f, 1.0112305f, 1.1274414f, 0.90893555f, 0.7597656f, - -1.2897949f, 0.13867188f, 0.4831543f, 0.6274414f, 0.5175781f, 0.54541016f, 0.46826172f, 0.548584f, 0.39135742f, 0.4975586f, 0.38671875f, -0.022705078f, -0.36083984f, -0.8190918f, -1.0593262f, -1.0527344f, - 0.80029297f, 0.57250977f, 0.068359375f, -0.70996094f, -1.0571289f, -0.92041016f, -0.74121094f, -0.3017578f, 0.1850586f, 0.7922363f, 0.76171875f, 0.55859375f, 0.39135742f, 0.22363281f, -0.09790039f, -0.5253906f, - 4.5966797f, 2.5993652f, 0.8737793f, -0.9536133f, -0.07006836f, 2.6501465f, 1.3757324f, -0.8967285f, -1.6777344f, -1.2912598f, -0.5917969f, -1.3334961f, -1.4775391f, -0.6760254f, -1.0019531f, -2.1257324f, - -1.0061035f, 0.67407227f, 0.9157715f, 0.9851074f, 0.78564453f, -0.009277344f, -0.40039062f, -0.12524414f, -0.18310547f, -0.0029296875f, -0.38989258f, -0.40820312f, -0.37158203f, -0.15551758f, 0.010253906f, -0.3178711f, - -1.3325195f, 0.7138672f, 1.6359863f, 2.2177734f, 1.659668f, 1.9414062f, 1.0874023f, 1.3305664f, 1.4523926f, 1.2883301f, -0.56225586f, -2.0280762f, -2.8566895f, -2.5690918f, -2.1638184f, -1.8144531f, - 0.0925293f, 1.5366211f, 2.095459f, 1.9145508f, 1.4782715f, 0.8676758f, -0.34643555f, -0.21826172f, -1.1254883f, -1.1550293f, -0.92211914f, -0.5473633f, -0.89868164f, -0.77441406f, -0.8112793f, -1.1855469f, - 2.2070312f, 3.5219727f, 1.9643555f, 0.5649414f, -0.021728516f, 0.14941406f, 0.15991211f, 0.21850586f, -1.1708984f, -1.1306152f, -0.32299805f, -0.064453125f, -1.4772949f, -1.6064453f, -1.3984375f, -1.5932617f, - 2.5195312f, 2.3515625f, 1.3063965f, 0.20825195f, -0.609375f, -1.088623f, -1.3623047f, -1.2600098f, -1.3369141f, -1.0693359f, -0.8010254f, -0.42773438f, -0.15234375f, 0.44799805f, 0.5998535f, 0.6743164f, - 1.5209961f, 1.0463867f, 0.74560547f, 0.51342773f, 0.34448242f, 0.21533203f, -0.028320312f, -0.084228516f, 0.08618164f, 0.12475586f, -0.3557129f, -0.5698242f, -0.63012695f, -0.6933594f, -0.9638672f, -1.2717285f, - -0.5739746f, -0.20629883f, -0.9890137f, -1.8708496f, -1.9855957f, -1.6159668f, -1.6103516f, -1.3623047f, -0.9399414f, -0.067871094f, 0.9128418f, 1.7995605f, 2.1074219f, 2.2941895f, 2.331787f, 1.7766113f, - 3.6323242f, 1.9743652f, 0.3935547f, -0.6862793f, -1.1130371f, -1.0187988f, -0.8935547f, -0.5998535f, -0.4345703f, -0.2290039f, -0.26416016f, -0.21484375f, -0.13208008f, 0.009765625f, -0.16601562f, -0.2578125f, - -0.0871582f, 1.651123f, 1.8327637f, 0.54125977f, 0.23999023f, 1.421875f, 0.79663086f, 1.309082f, 0.98217773f, 1.2548828f, -1.8842773f, -1.8806152f, -1.5390625f, -1.3496094f, -1.2785645f, -2.0100098f, - -2.2109375f, -0.70288086f, 1.1103516f, 2.2207031f, 2.3356934f, 2.010498f, 1.638916f, 1.4345703f, 1.0351562f, 0.5690918f, -0.11035156f, -0.88256836f, -1.5859375f, -2.0117188f, -2.31958f, -2.5310059f, - -1.6091309f, -2.519287f, -2.4504395f, 0.26660156f, 2.321289f, 2.5898438f, 3.5390625f, -1.0505371f, -1.2543945f, -0.27734375f, 0.94873047f, 1.3859863f, 0.7109375f, -1.0185547f, -1.2666016f, -0.31689453f, - 0.94433594f, 2.465332f, 2.668457f, 1.9997559f, 1.2949219f, 1.0178223f, 0.888916f, 0.7038574f, 0.29248047f, -0.050048828f, -0.77001953f, -1.4472656f, -2.0839844f, -2.5202637f, -2.6381836f, -2.7663574f, - -0.14160156f, -0.3083496f, -0.5864258f, -1.2387695f, -1.4682617f, -1.1057129f, -0.7817383f, -0.5292969f, -0.06323242f, 0.54003906f, 0.8947754f, 1.3034668f, 1.3681641f, 1.1462402f, 0.7866211f, 0.18408203f, - 0.40478516f, -0.94018555f, -1.2241211f, -1.1057129f, -0.43066406f, -0.07324219f, 2.0061035f, 4.0029297f, 0.48828125f, 0.20117188f, 0.16235352f, -0.4182129f, -0.7751465f, -0.74072266f, -0.7463379f, -0.81152344f, - -2.7770996f, -2.1079102f, -1.5097656f, -1.515625f, -1.0080566f, -0.036621094f, 0.3708496f, 1.060791f, 1.3742676f, 1.2963867f, 0.9782715f, 1.0876465f, 0.9584961f, 0.8691406f, 0.7578125f, 0.20092773f, - 1.8244629f, 2.9589844f, 2.7573242f, 1.1542969f, 0.87109375f, 1.3430176f, 0.9003906f, 0.8564453f, 0.41308594f, -0.40551758f, -2.0913086f, -2.3833008f, -2.1589355f, -1.9533691f, -1.9741211f, -2.1125488f, - 2.1027832f, 1.2624512f, 1.0627441f, 0.8051758f, 0.22583008f, -0.12939453f, -0.3996582f, -0.54052734f, -0.74975586f, -0.7180176f, -0.7895508f, -0.7229004f, -0.6113281f, -0.2956543f, -0.21484375f, -0.28710938f, - 0.15161133f, 2.585205f, 1.7568359f, 0.9177246f, 0.37329102f, -0.16088867f, -0.4633789f, -0.21801758f, -0.09277344f, -0.021484375f, -0.22631836f, -0.42382812f, -0.66625977f, -0.8803711f, -1.0666504f, -1.5649414f, - -2.6091309f, -1.9162598f, -1.4050293f, -1.5510254f, -1.4436035f, -0.76904297f, -0.6994629f, -0.28881836f, -0.09326172f, 0.4140625f, 0.6401367f, 1.267334f, 1.7597656f, 2.1586914f, 2.4848633f, 2.0510254f, - -0.08935547f, 1.982666f, 2.4018555f, 1.3012695f, 0.122802734f, 0.8886719f, 1.3410645f, 1.0705566f, 0.115234375f, -0.2043457f, -0.97094727f, -2.4370117f, -2.147705f, -1.3283691f, -0.74731445f, -1.298584f, - 2.5476074f, 0.140625f, -0.8376465f, -1.244873f, -1.2324219f, -0.7644043f, -0.34521484f, 0.3581543f, 0.60839844f, 0.5698242f, 0.3034668f, 0.06274414f, 0.27563477f, 0.35498047f, -0.28588867f, -0.5109863f, - -0.5878906f, 1.0141602f, 1.5241699f, 1.2287598f, 0.76123047f, 0.6047363f, 0.2199707f, 0.21044922f, 0.15185547f, 0.15307617f, -0.115478516f, -0.46313477f, -0.689209f, -0.9284668f, -1.3129883f, -1.770752f, - 1.4040527f, -0.9628906f, -1.3322754f, -0.79785156f, 0.06591797f, -0.045166016f, -0.33520508f, -0.6257324f, -0.91748047f, -0.9824219f, -0.9892578f, -0.84472656f, -0.66137695f, -0.057861328f, 2.248291f, 4.8339844f, - 2.727539f, 3.736084f, 3.4023438f, 2.6699219f, 1.3686523f, 0.091308594f, -0.7897949f, -1.1069336f, -1.4260254f, -1.4335938f, -1.5388184f, -1.5930176f, -1.5603027f, -1.5078125f, -1.473877f, -1.565918f, - 1.2629395f, 2.5461426f, 1.8774414f, -0.051513672f, -1.0480957f, -0.94873047f, -0.40551758f, 0.21875f, 0.01977539f, -0.1484375f, -0.44140625f, -0.5810547f, -0.5349121f, -0.4650879f, -0.51831055f, -0.7819824f, - -2.1455078f, -0.25683594f, 1.3151855f, 1.635498f, 1.4401855f, 0.89624023f, 0.8405762f, 0.9350586f, 0.9802246f, 0.67041016f, -0.13085938f, -0.59521484f, -0.9729004f, -1.145752f, -1.4951172f, -1.9714355f, - -2.1291504f, -2.1418457f, -0.46704102f, 0.73291016f, 1.2219238f, -0.27856445f, -0.30517578f, 1.1865234f, 0.87231445f, -0.060791016f, 0.060058594f, 0.43701172f, 0.79174805f, 0.9128418f, -0.046142578f, -0.7866211f, - 3.130127f, 2.7661133f, 1.8110352f, 1.4995117f, 1.095459f, 0.8935547f, 0.8383789f, 0.5913086f, 0.21923828f, -0.1965332f, -0.982666f, -1.7121582f, -2.2011719f, -2.409912f, -2.5390625f, -2.803711f, - 1.5769043f, 0.34960938f, -0.17211914f, -0.4428711f, -0.62597656f, -0.57055664f, -0.6516113f, -0.43676758f, -0.38208008f, -0.18725586f, -0.16992188f, -0.0034179688f, 0.15356445f, 0.39404297f, 0.56396484f, 0.60424805f, - 0.12768555f, 0.2109375f, 0.16137695f, 0.063964844f, 0.13012695f, 0.39526367f, 0.5834961f, 0.62353516f, 0.50683594f, 0.37402344f, 0.060546875f, -0.13232422f, -0.37719727f, -0.6010742f, -0.8376465f, -1.2895508f, - 0.6723633f, 1.9140625f, 0.3737793f, -1.2988281f, -1.7912598f, -1.2351074f, -0.44628906f, 0.5895996f, 0.6838379f, 0.58935547f, 0.22460938f, -0.013183594f, -0.16479492f, 0.072021484f, 0.14501953f, -0.3149414f, - 4.0183105f, 2.2834473f, 1.317627f, 1.2583008f, 1.5627441f, 0.9851074f, 0.12817383f, -0.2944336f, -0.65527344f, -0.9675293f, -1.3979492f, -1.5356445f, -1.5737305f, -1.5908203f, -1.6887207f, -1.8493652f, - 0.8132324f, 0.6748047f, 0.44433594f, 0.35375977f, 0.09863281f, 0.048095703f, -0.15063477f, -0.12646484f, -0.18432617f, -0.15258789f, -0.30517578f, -0.29101562f, -0.31201172f, -0.23876953f, -0.26635742f, -0.40551758f, - 0.29345703f, 2.6530762f, 3.4177246f, 2.5812988f, 2.1159668f, 1.3947754f, 0.9523926f, 0.41479492f, -0.15844727f, -0.9025879f, -1.5444336f, -1.9780273f, -2.2106934f, -2.2788086f, -2.3234863f, -2.4267578f, - 0.75805664f, 2.5563965f, 2.8410645f, 2.2597656f, 0.3876953f, -1.067627f, -1.425293f, -0.795166f, -0.6105957f, -0.66381836f, -0.9675293f, -1.0371094f, -0.88916016f, -0.5444336f, -0.19042969f, -0.6118164f, - 1.7177734f, 3.0668945f, 3.2519531f, 2.4799805f, 0.7363281f, -0.8156738f, -0.8125f, 0.1430664f, 0.34375f, -0.27563477f, -1.4462891f, -1.4350586f, -1.4143066f, -1.6706543f, -1.8481445f, -2.0212402f, - 2.756836f, 1.090332f, 0.61572266f, 0.1928711f, -0.34521484f, -0.47509766f, -0.36767578f, -0.0637207f, 0.14233398f, 0.19580078f, -0.16015625f, -0.43286133f, -0.6472168f, -0.5493164f, -0.80737305f, -1.1452637f, - 1.0544434f, 1.0671387f, 1.1149902f, 1.1230469f, 0.78637695f, 0.64282227f, 0.4868164f, 0.3413086f, 0.13769531f, -0.13085938f, -0.64990234f, -0.89453125f, -1.074707f, -1.114502f, -1.3056641f, -1.5842285f, - -1.8156738f, -1.3222656f, -1.4528809f, -1.8908691f, -1.8740234f, -1.1118164f, -1.1750488f, -0.5734863f, 0.16308594f, 1.5822754f, 2.0114746f, 1.8625488f, 1.6049805f, 1.5942383f, 1.5368652f, 0.8605957f, - 3.2451172f, 2.7807617f, 1.2692871f, 0.5222168f, 0.119384766f, -0.06616211f, -0.15722656f, -0.10424805f, -0.27197266f, -0.45263672f, -0.83618164f, -1.1611328f, -1.333252f, -1.2722168f, -1.2016602f, -1.0800781f, - 0.17333984f, 2.4299316f, 2.3254395f, 1.3701172f, 0.47509766f, 0.72216797f, 0.072753906f, -0.037597656f, -0.41845703f, -0.8137207f, -1.5649414f, -2.4125977f, -1.3486328f, -0.53027344f, -0.10546875f, -0.33740234f, - -2.5983887f, -1.9645996f, -0.5678711f, 0.48999023f, 0.86743164f, 0.62158203f, 1.189209f, 1.3269043f, 1.182373f, 1.0024414f, 0.54785156f, 0.25634766f, -0.12133789f, -0.44140625f, -0.7026367f, -1.0881348f, - 0.071777344f, -2.279541f, -2.057373f, -0.25512695f, 2.2199707f, 2.541748f, 0.8342285f, 0.7907715f, 0.5048828f, -0.1303711f, 0.2631836f, -0.37036133f, -0.5187988f, -0.42285156f, -0.66845703f, -0.52368164f, - 1.3261719f, 3.1193848f, 2.583496f, 0.6767578f, -0.022460938f, 0.5214844f, 0.6105957f, 1.0021973f, 0.66845703f, 0.8640137f, -0.37353516f, -2.0703125f, -2.3225098f, -2.136963f, -2.057129f, -2.3894043f, - 1.4580078f, 2.0153809f, 1.0583496f, -0.12792969f, -0.6064453f, -0.7011719f, -0.96118164f, -0.8588867f, -0.7414551f, -0.18896484f, 0.1550293f, 0.46166992f, 0.3881836f, 0.16113281f, -0.37109375f, -1.140625f, - 1.6044922f, 0.8898926f, -0.053222656f, -0.26611328f, 0.084228516f, 0.5666504f, 0.9013672f, 1.1362305f, 1.1520996f, 0.74243164f, 0.5168457f, 0.11206055f, -0.8305664f, -1.7199707f, -2.109375f, -2.7270508f, - -1.3208008f, -0.083984375f, -0.24169922f, -0.95043945f, -1.2331543f, -0.564209f, -0.018798828f, 0.95654297f, 1.142334f, 1.1772461f, 0.8063965f, 0.43359375f, 0.08227539f, 0.07446289f, 0.099853516f, -0.359375f, - 2.0480957f, 2.739746f, 2.1257324f, 1.1525879f, 0.7644043f, 0.5031738f, 0.2758789f, 0.19311523f, -0.08642578f, -0.15893555f, -0.89990234f, -1.2700195f, -1.5583496f, -1.791748f, -1.9023438f, -2.135254f, - 2.2700195f, 2.2856445f, 1.5393066f, 0.77563477f, 0.23632812f, -0.017578125f, -0.23071289f, -0.19995117f, -0.26342773f, -0.17700195f, -0.5046387f, -0.6687012f, -0.8383789f, -1.057373f, -1.3330078f, -1.8166504f, - 0.66015625f, 1.6772461f, 1.604248f, 1.5366211f, 1.1013184f, 0.8173828f, 0.5605469f, 0.7155762f, 0.5270996f, 0.23291016f, -0.37719727f, -0.8352051f, -1.3342285f, -1.7580566f, -2.2695312f, -2.8588867f, - 0.21484375f, -0.44580078f, -0.85253906f, -1.0334473f, -0.95043945f, -0.592041f, -0.47558594f, -0.20092773f, -0.06323242f, 0.16040039f, 0.24414062f, 0.5144043f, 0.70947266f, 0.8796387f, 0.9663086f, 0.92529297f, - -0.047851562f, 1.6748047f, 2.0949707f, 2.3344727f, 1.7766113f, 1.7685547f, 0.35913086f, 0.47509766f, -0.055664062f, -0.08251953f, -0.76049805f, -1.8425293f, -2.8457031f, -2.4018555f, -1.144043f, -1.3034668f, - 2.0942383f, 1.1809082f, 0.54345703f, 0.18408203f, -0.44360352f, -0.5373535f, 0.12182617f, 0.7114258f, 0.8088379f, 0.7709961f, -0.12866211f, -1.1555176f, -1.4138184f, -1.0009766f, -0.83081055f, -0.90478516f, - -1.0332031f, 1.6005859f, 0.46875f, 1.6149902f, -0.23095703f, 1.0908203f, 0.068359375f, 0.5266113f, 0.18701172f, -0.12792969f, -0.22509766f, -0.4819336f, -0.5058594f, -0.390625f, -1.2128906f, -1.3486328f, - 1.7792969f, 0.7167969f, -0.40039062f, -1.1201172f, -1.5458984f, -1.5344238f, -1.5107422f, -1.3601074f, -1.2751465f, -0.93847656f, -0.40795898f, 0.49145508f, 1.2475586f, 2.0236816f, 2.0373535f, 1.7973633f, - 2.8059082f, 2.769043f, 1.6977539f, 0.44458008f, -0.41308594f, -0.6376953f, -0.80566406f, -0.81030273f, -0.93115234f, -0.66845703f, -0.7155762f, -0.6870117f, -0.6052246f, -0.46142578f, -0.41967773f, -0.56225586f, - 1.9963379f, 2.9060059f, 1.5930176f, -0.34716797f, -0.7993164f, 0.061279297f, 1.0302734f, 1.1359863f, 0.7434082f, -0.07397461f, -1.3549805f, -1.2399902f, -1.2802734f, -1.2973633f, -1.4362793f, -1.6364746f, - -2.3041992f, -0.73999023f, 0.11791992f, 0.3215332f, 0.45092773f, 0.45751953f, 0.7368164f, 0.7216797f, 0.19238281f, 0.75439453f, 0.17822266f, -0.46679688f, -0.41210938f, 0.029785156f, 0.20996094f, -0.24829102f, - -0.9016113f, -1.2150879f, -0.13208008f, 0.7023926f, 0.81225586f, -0.57055664f, -1.0405273f, -0.5344238f, 0.1706543f, 0.579834f, 0.80810547f, 0.4790039f, 0.3671875f, 0.24829102f, 0.32202148f, -0.095214844f, - 1.4807129f, 1.8234863f, 1.7661133f, 2.5449219f, 2.6020508f, 1.9316406f, 1.3154297f, 1.1328125f, 0.5263672f, -0.17895508f, -1.1706543f, -2.199707f, -2.7531738f, -2.8725586f, -2.9294434f, -3.0187988f, - 2.6689453f, 0.5949707f, -0.45043945f, -0.7963867f, -0.91625977f, -0.90722656f, -0.98413086f, -0.8354492f, -0.6953125f, -0.3955078f, -0.2849121f, 0.04296875f, 0.43066406f, 0.7241211f, 0.81591797f, 0.9880371f, - -0.15112305f, -0.33618164f, -0.3256836f, -0.111083984f, -0.048339844f, 0.08129883f, 0.068115234f, 0.17138672f, 0.20385742f, 0.2590332f, 0.123291016f, 0.11621094f, 0.03100586f, 0.06201172f, 0.06591797f, -0.2097168f, - 1.2731934f, 0.29223633f, -0.14038086f, -0.29956055f, -0.6376953f, -0.56762695f, -0.15844727f, 0.46020508f, 0.6569824f, 0.68188477f, 0.28393555f, -0.18676758f, -0.43164062f, -0.3347168f, -0.38256836f, -0.5083008f, - 4.678711f, 2.80542f, 1.126709f, -0.48461914f, -0.8273926f, 0.7895508f, 2.3266602f, 0.4375f, -1.6252441f, -1.8422852f, -1.4978027f, -0.8730469f, -1.3171387f, -1.671875f, -1.0270996f, -0.998291f, - -1.3620605f, 0.63916016f, 1.1337891f, 0.3178711f, 0.06591797f, 1.0673828f, 0.91503906f, 0.4387207f, -0.18359375f, -0.22875977f, -0.6660156f, -0.69799805f, -0.17236328f, -0.21118164f, -0.24951172f, -0.8066406f, - -0.44873047f, 1.4709473f, 2.5039062f, 2.7050781f, 1.9462891f, 0.3642578f, -0.30078125f, 0.6467285f, 0.9680176f, 0.9716797f, -1.498291f, -1.8183594f, -1.8544922f, -1.847168f, -1.605957f, -2.2028809f, - 0.47460938f, 1.574707f, 1.7148438f, 2.1083984f, 1.7241211f, 0.44189453f, -0.40551758f, -0.18847656f, 0.13232422f, -0.0031738281f, -0.79467773f, -1.1843262f, -1.2902832f, -1.2416992f, -1.3430176f, -1.7194824f, - 1.9831543f, 3.927246f, 2.9868164f, 1.2749023f, 0.265625f, 0.02734375f, 0.079833984f, 0.47070312f, -0.7956543f, -1.2663574f, -1.638916f, -1.8222656f, -1.3908691f, -1.4194336f, -1.3027344f, -1.3791504f, - 0.2097168f, 1.8005371f, 1.479248f, 0.62109375f, 0.091552734f, -0.38549805f, -0.93530273f, -0.923584f, -0.91259766f, -0.6557617f, -0.5842285f, -0.27563477f, 0.007080078f, 0.25585938f, 0.25219727f, -0.044677734f, - 0.51293945f, 1.0280762f, 0.84033203f, 0.62841797f, 0.5317383f, 0.5251465f, 0.26953125f, 0.09423828f, 0.032958984f, -0.052734375f, -0.48999023f, -0.6513672f, -0.6411133f, -0.6369629f, -0.84375f, -1.1477051f, - -1.2319336f, -0.08203125f, -0.23632812f, -0.8339844f, -1.0866699f, -0.88793945f, -1.0917969f, -0.83251953f, -0.79467773f, -0.45751953f, -0.25830078f, 0.43041992f, 1.1853027f, 1.7946777f, 2.3452148f, 2.0378418f, - 4.881592f, 2.1987305f, 0.6430664f, -0.15478516f, -0.36206055f, -0.4753418f, -0.5410156f, -0.1965332f, -0.072753906f, -0.10888672f, -0.5263672f, -0.8588867f, -0.94506836f, -0.99487305f, -1.1523438f, -1.3347168f, - -0.5546875f, 2.1118164f, 2.2026367f, 0.70703125f, -0.21142578f, 0.8679199f, 1.1367188f, 1.012207f, 0.9904785f, 1.2463379f, 0.21801758f, -1.9433594f, -2.9155273f, -2.2661133f, -0.97631836f, -1.6257324f, - -0.80908203f, 1.0163574f, 1.546875f, 2.0847168f, 1.9309082f, 1.6364746f, 1.057373f, 1.1618652f, 0.76049805f, 0.29858398f, -0.46484375f, -1.0957031f, -1.6264648f, -2.0043945f, -2.5080566f, -2.9853516f, - -0.29760742f, -1.7080078f, -1.5229492f, 1.3574219f, 4.701172f, 1.6962891f, 4.1030273f, -0.4194336f, -1.0739746f, -1.0820312f, 0.4255371f, -1.0825195f, -1.3613281f, -1.1777344f, -1.3232422f, -1.2341309f, - 1.7912598f, 1.7314453f, 1.8457031f, 2.1989746f, 1.9145508f, 1.0024414f, 0.51538086f, 0.44506836f, -0.075683594f, -0.5439453f, -1.1616211f, -1.5820312f, -1.8642578f, -1.9123535f, -2.0385742f, -2.2666016f, - -0.03100586f, -1.7485352f, -1.767334f, -1.9833984f, -1.4570312f, -0.84716797f, -0.50390625f, 0.040771484f, 0.43554688f, 0.62402344f, 0.9133301f, 1.4772949f, 1.7192383f, 1.2922363f, 0.80029297f, 1.0356445f, - -1.1809082f, -2.032959f, -2.0617676f, -1.9443359f, -1.6447754f, -0.8874512f, 3.0722656f, 2.6242676f, 2.3166504f, 3.4455566f, 1.090332f, -0.19970703f, -0.23510742f, -0.6906738f, -0.40576172f, -1.2653809f, - -2.2512207f, -1.9179688f, -2.1035156f, -2.3461914f, -2.14917f, -1.1347656f, -0.56689453f, 0.8166504f, 1.857666f, 2.114502f, 1.755127f, 1.9160156f, 1.6611328f, 1.1904297f, 0.8239746f, 0.33398438f, - 0.8227539f, 2.0544434f, 2.3171387f, 0.90234375f, 0.515625f, 1.0241699f, 0.6188965f, 0.296875f, -0.171875f, -0.6345215f, -1.2004395f, -1.1652832f, -1.1635742f, -1.2021484f, -1.3903809f, -1.6240234f, - 1.2287598f, 1.5820312f, 1.2756348f, 0.6843262f, 0.33911133f, 0.09472656f, -0.26733398f, -0.4711914f, -0.3137207f, -0.19116211f, -0.56884766f, -0.67944336f, -0.5612793f, -0.55444336f, -0.69506836f, -0.90234375f, - 1.5776367f, 2.6791992f, 2.3059082f, 1.375f, 0.7619629f, 0.08251953f, -0.6166992f, -0.8574219f, -1.0148926f, -1.0390625f, -1.0976562f, -0.8730469f, -0.7844238f, -0.7331543f, -0.7426758f, -1.0231934f, - -2.173584f, -1.3400879f, -0.8208008f, -0.95996094f, -0.6999512f, -0.010253906f, -0.19384766f, 0.25561523f, 0.3786621f, 0.72998047f, 0.4699707f, 0.4416504f, 0.49975586f, 0.9416504f, 1.4606934f, 1.0205078f, - -0.2631836f, 1.3510742f, 1.3837891f, 2.0864258f, 1.8503418f, 1.8864746f, 0.8581543f, 0.5866699f, 0.103759766f, -0.9616699f, -1.8740234f, -2.5600586f, -1.1362305f, -0.9301758f, -1.4404297f, -0.94091797f, - 2.7443848f, 0.5695801f, -0.21679688f, -0.6513672f, -0.14672852f, 0.5019531f, 0.23754883f, -0.19091797f, -0.27685547f, -0.15332031f, -0.31201172f, -0.35742188f, -0.2529297f, -0.25024414f, -0.62646484f, -0.61816406f, - 0.045898438f, 0.24243164f, 0.36865234f, 0.9145508f, 0.96777344f, 1.0041504f, 0.9550781f, 0.9213867f, 0.7089844f, 0.4296875f, -0.1328125f, -0.5522461f, -0.9333496f, -1.2285156f, -1.607666f, -2.1037598f, - 4.209961f, 1.2607422f, -0.85791016f, -1.416748f, -1.4013672f, -0.8574219f, -1.0410156f, -1.4523926f, -1.7346191f, -1.7731934f, -1.5373535f, -1.026123f, 0.8515625f, 0.21533203f, 2.2263184f, 4.3342285f, - 4.5341797f, 4.130371f, 2.7658691f, 2.1801758f, 0.90478516f, 0.5617676f, -0.1303711f, -1.1745605f, -1.5371094f, -1.5292969f, -1.6901855f, -1.7126465f, -1.7119141f, -1.7536621f, -1.8623047f, -1.9750977f, - 0.6777344f, 2.2624512f, 1.1889648f, -0.5876465f, -0.81347656f, 0.38916016f, 0.11694336f, 0.15283203f, -0.5698242f, -0.5168457f, -0.41845703f, -0.3544922f, -0.46191406f, -0.24804688f, -0.14038086f, -0.6772461f, - -1.3227539f, -0.38085938f, 0.23852539f, 0.76123047f, 1.0078125f, 1.1433105f, 0.9753418f, 0.7734375f, 0.32373047f, 0.08959961f, -0.19482422f, -0.43603516f, -0.5715332f, -0.6135254f, -0.7351074f, -1.0581055f, - -1.3225098f, -1.4675293f, -1.3000488f, -0.59375f, 0.022705078f, 0.57299805f, 0.5710449f, 0.36547852f, 0.5119629f, 0.77685547f, 0.623291f, 0.43408203f, 0.41210938f, 0.5258789f, 0.2434082f, -0.37597656f, - 2.3742676f, 3.3117676f, 3.0449219f, 2.4208984f, 1.2329102f, 0.63793945f, 0.32666016f, 0.15161133f, -0.25610352f, -1.0283203f, -1.7250977f, -1.9707031f, -2.0761719f, -2.1174316f, -2.1105957f, -2.2165527f, - 0.87109375f, 0.5085449f, 0.19018555f, -0.10913086f, -0.36328125f, -0.3725586f, -0.4946289f, -0.38671875f, -0.38183594f, -0.21801758f, -0.2331543f, -0.088378906f, 0.0234375f, 0.24194336f, 0.40649414f, 0.40600586f, - 1.0517578f, 0.5126953f, 0.23608398f, 0.31835938f, 0.3605957f, 0.39941406f, 0.38012695f, 0.50390625f, 0.54541016f, 0.37329102f, -0.24731445f, -0.5891113f, -0.6791992f, -0.7324219f, -1.0258789f, -1.407959f, - -0.66625977f, 1.7709961f, 1.2971191f, 0.15283203f, -1.0664062f, -0.7583008f, 0.16821289f, 0.5007324f, 0.35058594f, 0.14086914f, 0.5217285f, -0.13452148f, -1.2158203f, -0.34375f, 0.033447266f, -0.751709f, - 3.684082f, 3.3139648f, 2.0878906f, 1.1911621f, 0.607666f, 0.1472168f, 0.15258789f, 0.10083008f, -0.2355957f, -0.45239258f, -1.2746582f, -1.7348633f, -1.8305664f, -1.8266602f, -1.8925781f, -2.03833f, - 0.5786133f, 0.7692871f, 0.4777832f, 0.05493164f, -0.12597656f, -0.08227539f, -0.095703125f, 0.05444336f, 0.19848633f, 0.3190918f, 0.030273438f, -0.06738281f, -0.17138672f, -0.2854004f, -0.59375f, -1.0615234f, - -0.98413086f, 1.059082f, 2.3671875f, 2.3381348f, 2.529541f, 2.1052246f, 1.887207f, 1.2434082f, 0.54956055f, -0.12646484f, -0.9199219f, -1.6921387f, -2.3168945f, -2.5715332f, -2.6733398f, -2.7949219f, - 2.5153809f, 3.854248f, 2.8759766f, 1.9558105f, -0.30126953f, -1.3845215f, -1.4958496f, -1.2636719f, -1.1201172f, -0.84887695f, -1.1677246f, -0.63061523f, -0.4970703f, -0.76904297f, -0.72998047f, -0.9926758f, - 0.4025879f, 2.572998f, 3.1643066f, 2.5009766f, 1.3688965f, -0.08691406f, -0.63500977f, -0.119140625f, 0.0073242188f, -0.5070801f, -0.7023926f, -2.0339355f, -2.0788574f, -1.8864746f, -0.9301758f, -1.0368652f, - 2.1965332f, 1.2878418f, 0.50878906f, -0.119140625f, -0.49267578f, -0.6008301f, -0.75219727f, -0.56518555f, -0.5427246f, -0.4038086f, -0.43408203f, -0.28198242f, -0.13745117f, 0.06958008f, 0.14331055f, 0.1237793f, - 0.5012207f, 2.1748047f, 1.7189941f, 0.1274414f, -0.2644043f, 0.46875f, 0.37963867f, 0.7302246f, 0.23413086f, 0.41845703f, -0.7944336f, -0.8984375f, -0.6816406f, -1.0744629f, -1.190918f, -1.8496094f, - -2.3083496f, -2.19458f, -2.2111816f, -2.4804688f, -2.3293457f, -1.651123f, -1.3820801f, -0.78125f, -0.14477539f, 0.8547363f, 1.6848145f, 2.4699707f, 2.5429688f, 2.793457f, 2.9118652f, 2.2253418f, - 1.7553711f, 2.8996582f, 1.9260254f, 0.40551758f, -0.0234375f, 0.44506836f, 0.31152344f, 0.1809082f, -0.47607422f, -0.4807129f, -1.204834f, -1.3293457f, -1.2412109f, -1.0134277f, -0.89501953f, -1.2602539f, - 0.2253418f, 2.2539062f, 2.265625f, 0.57128906f, -0.7661133f, -0.6245117f, 0.21313477f, 1.2248535f, 0.8737793f, -0.12524414f, -0.9609375f, -2.416504f, -1.1223145f, -0.70532227f, -0.31469727f, -0.592041f, -}; - -const float ivas_sns_cdbk_tcx20_stage2[ 64 * 16 ] = -{ - -1.1569824f, -0.4765625f, 0.008056641f, 0.47802734f, 0.38330078f, -0.075683594f, -0.3737793f, -0.29516602f, -0.1352539f, 0.012939453f, 0.22241211f, 0.375f, 0.31689453f, 0.20874023f, 0.2541504f, 0.25439453f, - -0.40600586f, -0.22070312f, -0.04272461f, 0.15893555f, -0.25195312f, -0.6623535f, -0.27172852f, 0.28735352f, 0.35742188f, 0.20166016f, 0.052246094f, -0.3647461f, -0.4506836f, 0.1862793f, 0.66796875f, 0.7585449f, - 0.02734375f, -0.2097168f, -0.39819336f, -0.54296875f, -0.46850586f, -0.25146484f, -0.26953125f, -0.07495117f, 0.375f, 0.9343262f, 0.91625977f, 0.4267578f, 0.026123047f, -0.15576172f, -0.11425781f, -0.22021484f, - 0.011230469f, 0.37573242f, 0.8432617f, 0.7006836f, 0.5830078f, -0.49658203f, -0.84155273f, -0.46069336f, -0.16894531f, -0.006591797f, -0.075683594f, -0.2253418f, -0.2097168f, -0.12719727f, 0.006591797f, 0.092041016f, - 0.42382812f, 0.19360352f, 0.076171875f, 0.44091797f, 0.11401367f, -0.39819336f, -0.12207031f, 0.34960938f, 0.51660156f, -0.024902344f, -0.5324707f, -0.068359375f, 0.5083008f, -0.06591797f, -0.68359375f, -0.7277832f, - -0.12182617f, 0.15332031f, 0.3022461f, 0.23754883f, 0.2722168f, 0.8046875f, 0.76831055f, 0.28808594f, -0.05493164f, -0.29711914f, -0.45629883f, -0.42944336f, -0.42871094f, -0.4416504f, -0.35107422f, -0.24536133f, - -0.19873047f, -0.010253906f, -0.030517578f, -0.041748047f, 0.052490234f, 0.07446289f, 0.026123047f, -0.026611328f, 0.18579102f, 0.22485352f, 0.1965332f, 0.1538086f, 0.044677734f, -0.111328125f, -0.24853516f, -0.29052734f, - 0.7648926f, 0.47973633f, 0.31347656f, 0.1496582f, 0.23242188f, 0.16918945f, 0.05859375f, -0.12548828f, -0.18017578f, -0.19555664f, -0.17138672f, -0.19165039f, -0.23510742f, -0.3330078f, -0.37939453f, -0.3564453f, - -0.6201172f, -0.2915039f, -0.15234375f, 0.15966797f, 0.41430664f, 0.61206055f, 0.4453125f, 0.19360352f, -0.107666016f, -0.40429688f, -0.10424805f, 0.40649414f, 0.37817383f, -0.012939453f, -0.3857422f, -0.53100586f, - -0.6376953f, -0.01953125f, 0.32958984f, -0.27905273f, -0.21191406f, 0.8327637f, 0.28515625f, -0.31225586f, -0.4375f, -0.34204102f, -0.010498047f, 0.0546875f, 0.099365234f, 0.114746094f, 0.22973633f, 0.30444336f, - -0.76538086f, -0.5390625f, -0.38330078f, -0.39501953f, -0.21923828f, 0.19311523f, 0.1899414f, -0.08642578f, -0.044921875f, 0.13500977f, 0.4543457f, 0.6777344f, 0.5891113f, 0.30078125f, 0.04321289f, -0.14990234f, - 0.34838867f, -0.21826172f, 0.018066406f, 0.06689453f, 0.40063477f, 0.34570312f, -0.548584f, -0.86035156f, -0.24023438f, 0.60668945f, 0.22363281f, -0.05053711f, 0.13916016f, 0.02709961f, -0.07470703f, -0.18383789f, - 0.13842773f, 0.05444336f, 0.20629883f, -0.11450195f, -0.77563477f, -0.57543945f, 0.7011719f, 0.20117188f, -0.33984375f, 0.18481445f, 0.38232422f, -0.2097168f, -0.040771484f, 0.13476562f, 0.0769043f, -0.024658203f, - -0.24829102f, -0.47998047f, -0.7248535f, -0.64575195f, -0.2529297f, 0.43725586f, 0.6335449f, 0.6464844f, 0.53930664f, 0.33398438f, 0.13891602f, 0.30639648f, 0.3293457f, -0.07446289f, -0.3918457f, -0.54711914f, - -0.043945312f, -0.5168457f, -0.3779297f, 0.67089844f, 0.2548828f, -0.4663086f, -0.5402832f, -0.22338867f, 0.092285156f, 0.016845703f, 0.24780273f, 0.46850586f, 0.49902344f, 0.2734375f, -0.0925293f, -0.26245117f, - 0.014892578f, 0.3540039f, 0.35229492f, -0.13085938f, -0.49829102f, -0.52563477f, -0.05883789f, 0.024658203f, -0.29492188f, -0.4638672f, -0.17333984f, 0.3791504f, 0.47314453f, 0.29516602f, 0.19165039f, 0.060791016f, - -0.21264648f, -0.875f, -0.82958984f, -0.5048828f, -0.31835938f, -0.1430664f, 0.19580078f, 0.29174805f, 0.28637695f, 0.15356445f, 0.16894531f, 0.2241211f, 0.27734375f, 0.31835938f, 0.4091797f, 0.55810547f, - -1.2670898f, 0.016845703f, 0.36254883f, 0.65893555f, 0.59814453f, 0.49389648f, 0.18041992f, 0.1821289f, 0.15942383f, -0.016357422f, -0.18847656f, -0.36547852f, -0.3413086f, -0.2553711f, -0.14868164f, -0.06958008f, - 0.10644531f, 0.7878418f, 0.09643555f, -0.5786133f, -0.40966797f, 0.07055664f, 0.39819336f, 0.31030273f, 0.10986328f, 0.14013672f, 0.2680664f, 0.32861328f, 0.04296875f, -0.39648438f, -0.6052246f, -0.66967773f, - -0.49658203f, 0.26416016f, 0.657959f, 0.41137695f, 0.28881836f, 0.22338867f, 0.15527344f, -0.08325195f, -0.118652344f, 0.08544922f, 0.2841797f, 0.15258789f, -0.18554688f, -0.48388672f, -0.5810547f, -0.5734863f, - 0.22314453f, 0.37402344f, 0.2163086f, -0.5078125f, -0.95703125f, -1.1442871f, -0.35302734f, 0.68359375f, 0.67089844f, 0.31811523f, 0.12792969f, -0.15478516f, -0.0026855469f, 0.18237305f, 0.16870117f, 0.15429688f, - 0.26464844f, -0.11401367f, -0.106933594f, 0.26538086f, 0.51660156f, 0.5373535f, 0.35888672f, 0.16870117f, 0.20825195f, 0.2409668f, 0.14013672f, -0.0546875f, -0.3334961f, -0.58691406f, -0.74243164f, -0.7624512f, - 0.73779297f, -0.14477539f, -0.37646484f, -0.1003418f, 0.1027832f, 0.14160156f, 0.06738281f, -0.05444336f, -0.016357422f, -0.0234375f, -0.022216797f, -0.049316406f, -0.061035156f, -0.10864258f, -0.09057617f, -0.0017089844f, - 1.0466309f, 0.6826172f, 0.1315918f, -0.21020508f, -0.104003906f, -0.21191406f, -0.3256836f, -0.4729004f, -0.59765625f, -0.50805664f, -0.2043457f, 0.033935547f, 0.115722656f, 0.09423828f, 0.18017578f, 0.34960938f, - -0.9074707f, -0.25634766f, 0.14331055f, 0.03515625f, -0.076171875f, -0.1340332f, -0.0073242188f, 0.20922852f, 0.40063477f, 0.5883789f, 0.64868164f, 0.50024414f, 0.19238281f, -0.22338867f, -0.47998047f, -0.6333008f, - 0.40429688f, 0.021972656f, 0.059814453f, 0.5866699f, 1.2155762f, 0.35351562f, -0.17480469f, -0.0703125f, -0.09448242f, -0.24975586f, -0.39672852f, -0.3347168f, -0.3479004f, -0.38671875f, -0.36743164f, -0.21948242f, - 0.71850586f, -0.052246094f, -0.3918457f, -0.13745117f, 0.13793945f, 0.20458984f, 0.13623047f, -0.15039062f, -0.22436523f, -0.2446289f, 0.12158203f, 0.58496094f, 0.5527344f, -0.028320312f, -0.60180664f, -0.6254883f, - 0.007080078f, 0.32910156f, 0.41210938f, 0.033203125f, -0.2097168f, -0.06665039f, -0.15307617f, 0.020507812f, 0.33203125f, 0.8874512f, 0.7089844f, -0.4128418f, -0.71484375f, -0.4958496f, -0.29223633f, -0.38476562f, - -0.84765625f, 0.3466797f, 0.107910156f, -0.3659668f, -0.48583984f, -0.41552734f, -0.38232422f, -0.26953125f, 0.019042969f, 0.25219727f, 0.40039062f, 0.3984375f, 0.38427734f, 0.29785156f, 0.29589844f, 0.26391602f, - 0.47680664f, -0.0056152344f, -0.15307617f, -0.33764648f, -0.30737305f, 0.24511719f, 0.8847656f, 0.61035156f, -0.32861328f, -0.6430664f, -0.43823242f, -0.1899414f, -0.12475586f, -0.084228516f, 0.111328125f, 0.28393555f, - 1.0576172f, -0.23535156f, -0.9638672f, -0.84716797f, 0.3137207f, 1.1804199f, 0.7871094f, 0.14257812f, -0.018798828f, -0.21801758f, -0.20703125f, -0.11816406f, -0.10449219f, -0.16210938f, -0.3491211f, -0.25708008f, - -0.028564453f, -0.43652344f, -0.20336914f, 0.13623047f, 0.17822266f, 0.2175293f, -0.026367188f, -0.4050293f, -0.6472168f, -0.670166f, -0.26391602f, 0.3864746f, 0.685791f, 0.53808594f, 0.29077148f, 0.24853516f, - -0.32836914f, -0.09106445f, -0.11254883f, -0.34277344f, -0.5786133f, -0.5319824f, -0.45410156f, -0.34716797f, -0.2163086f, -0.1862793f, -0.09448242f, 0.14550781f, 0.32739258f, 0.6513672f, 1.0861816f, 1.0732422f, - 0.17163086f, 0.26391602f, 0.19165039f, 0.028320312f, -0.05517578f, 0.14355469f, 0.09057617f, 0.03125f, -0.20532227f, -0.36889648f, -0.58569336f, -0.7468262f, -0.75634766f, -0.04272461f, 0.84814453f, 0.9921875f, - 0.61376953f, -0.18969727f, -0.4868164f, -0.45410156f, -0.42089844f, -0.39868164f, -0.34399414f, -0.25610352f, -0.104003906f, 0.11791992f, 0.3408203f, 0.4416504f, 0.40942383f, 0.31689453f, 0.22802734f, 0.18603516f, - -0.5876465f, 0.19213867f, 0.30737305f, 0.46264648f, 0.37817383f, 0.08276367f, -0.36279297f, -0.51904297f, -0.53125f, -0.42382812f, -0.27075195f, -0.15063477f, -0.026611328f, 0.21655273f, 0.5439453f, 0.6879883f, - -0.5786133f, -0.046875f, 0.0390625f, -0.026123047f, 0.034423828f, -0.28442383f, -0.5217285f, 0.07299805f, 0.7167969f, 0.84106445f, -0.34570312f, -0.3466797f, 0.25512695f, 0.31958008f, 0.12207031f, -0.2512207f, - -0.19604492f, 0.11645508f, 0.17895508f, 0.2697754f, 0.4050293f, 0.2927246f, 0.09667969f, -0.12817383f, -0.14550781f, -0.1706543f, -0.16308594f, -0.13354492f, -0.11376953f, -0.14282227f, -0.12866211f, -0.037353516f, - -0.2084961f, -0.2878418f, -0.23657227f, -0.11816406f, 0.016357422f, 0.059326172f, 0.067871094f, -0.033447266f, -0.013427734f, 0.0029296875f, 0.068603516f, 0.12548828f, 0.14624023f, 0.11279297f, 0.11254883f, 0.18530273f, - -0.13549805f, 1.1516113f, 0.5197754f, -0.064453125f, -0.2409668f, -0.1274414f, -0.021484375f, -0.07104492f, -0.095458984f, -0.11987305f, -0.12573242f, -0.18701172f, -0.20874023f, -0.21459961f, -0.08081055f, 0.021484375f, - -0.33520508f, -0.6520996f, -0.2927246f, 0.8496094f, 0.6022949f, 0.35229492f, 0.1484375f, 0.06347656f, -0.13232422f, -0.390625f, -0.41137695f, -0.27294922f, -0.1694336f, -0.027832031f, 0.18310547f, 0.48510742f, - 0.22802734f, 0.8112793f, 0.25610352f, -0.5793457f, 0.18774414f, 0.74902344f, 0.122802734f, -0.38842773f, -0.57714844f, -0.842041f, -0.97314453f, -0.74975586f, 0.20605469f, 1.4348145f, 0.22973633f, -0.115722656f, - -0.103759766f, 0.055664062f, -0.29663086f, -0.3864746f, -0.36743164f, -0.38549805f, -0.22802734f, -0.19311523f, -0.11816406f, -0.11645508f, 0.2578125f, 1.0197754f, 1.0957031f, 0.7624512f, -0.19189453f, -0.8034668f, - 0.31860352f, -0.32495117f, -0.25756836f, 0.4501953f, 0.74731445f, 0.26293945f, -0.5578613f, -0.6347656f, 0.056152344f, 1.1223145f, 0.27783203f, -0.8347168f, -0.96850586f, -0.2019043f, 0.5266113f, 0.018798828f, - 0.2434082f, 0.05126953f, -0.16088867f, -0.2434082f, -0.15234375f, 0.037353516f, 0.06982422f, -0.015136719f, -0.607666f, 0.14428711f, 0.94433594f, 0.37109375f, -0.3083496f, -0.34765625f, -0.12060547f, 0.09448242f, - 0.13427734f, 0.47021484f, -0.4387207f, -0.8562012f, -0.6101074f, -0.10913086f, 0.1430664f, 0.18334961f, 0.103759766f, -0.034423828f, -0.06738281f, 0.036376953f, 0.12670898f, 0.18603516f, 0.33496094f, 0.39697266f, - 1.0314941f, -0.5073242f, 0.050048828f, 0.31860352f, -0.055908203f, -0.6105957f, -0.31860352f, -0.056396484f, 0.072753906f, 0.056884766f, -0.053466797f, -0.06933594f, -0.08666992f, -0.038330078f, 0.047851562f, 0.21875f, - 0.47192383f, 0.58447266f, 0.6154785f, -0.078125f, -0.6315918f, -0.92626953f, -0.89501953f, -0.46069336f, -0.14819336f, -0.03125f, 0.046142578f, 0.14086914f, 0.12646484f, 0.25390625f, 0.47753906f, 0.4543457f, - -1.1186523f, -0.5427246f, -0.36108398f, -0.13378906f, -0.0048828125f, 0.2939453f, 0.45581055f, 0.3972168f, 0.2421875f, -0.18725586f, -0.576416f, -0.25805664f, 0.115722656f, 0.517334f, 0.6699219f, 0.4909668f, - -0.8635254f, -0.1977539f, -0.067871094f, -0.060058594f, 0.08251953f, 0.5378418f, 0.0007324219f, -0.067871094f, -0.0053710938f, 0.513916f, 0.42993164f, -0.3544922f, -0.6711426f, -0.15454102f, 0.5522461f, 0.3256836f, - 0.62231445f, 0.44702148f, 0.3725586f, 0.15454102f, -0.13916016f, -0.40576172f, -0.49829102f, -0.3881836f, -0.13867188f, 0.2355957f, 0.5095215f, 0.3972168f, 0.0793457f, -0.22802734f, -0.44213867f, -0.5776367f, - -0.64086914f, 0.17944336f, 1.0073242f, 0.46972656f, -0.33007812f, -0.33569336f, -0.016357422f, -0.064208984f, -0.08105469f, -0.14916992f, -0.05444336f, 0.016845703f, -0.010009766f, -0.08911133f, -0.012207031f, 0.10961914f, - 0.47485352f, -0.13232422f, 0.21044922f, 0.36645508f, -0.11303711f, -0.8552246f, -0.7819824f, 0.8149414f, 1.0595703f, -0.46044922f, -0.359375f, -0.04296875f, -0.21948242f, -0.24584961f, 0.037353516f, 0.24707031f, - 0.28710938f, -0.68530273f, 0.22631836f, 0.119384766f, -0.17114258f, -0.29833984f, 0.33618164f, 0.49438477f, 0.4248047f, 0.171875f, 0.20385742f, 0.08935547f, -0.20922852f, -0.38671875f, -0.3569336f, -0.24584961f, - 0.33544922f, 0.27172852f, 0.040283203f, -0.072509766f, -0.008544922f, -0.095458984f, -0.19897461f, -0.2980957f, -0.17480469f, -0.12133789f, -0.060791016f, 0.012451172f, 0.087890625f, 0.059814453f, 0.068115234f, 0.1550293f, - 1.1574707f, 0.5593262f, -0.16137695f, -0.44140625f, -0.38305664f, -0.24731445f, -0.0056152344f, 0.10961914f, 0.21948242f, 0.22314453f, -0.0036621094f, -0.20166016f, -0.27416992f, -0.28295898f, -0.21240234f, -0.055419922f, - -0.75561523f, -0.84399414f, -0.079589844f, 0.29614258f, 0.24389648f, 0.3671875f, 0.5605469f, 0.3630371f, 0.26220703f, 0.17895508f, 0.06274414f, -0.052734375f, -0.14526367f, -0.21069336f, -0.1550293f, -0.091796875f, - 0.32055664f, 0.47436523f, 0.56640625f, 0.517334f, 0.42260742f, 0.2890625f, 0.12719727f, -0.23291016f, -0.5283203f, -0.7036133f, -0.6333008f, -0.40454102f, -0.23364258f, -0.1628418f, -0.011962891f, 0.19335938f, - -0.05493164f, 0.5136719f, 0.30395508f, 0.49072266f, 0.3581543f, -0.09301758f, -0.38183594f, -0.4338379f, -0.57299805f, -0.4794922f, -0.17651367f, 0.42651367f, 0.56103516f, 0.28149414f, -0.22875977f, -0.51416016f, - 0.2709961f, -0.26635742f, -0.44995117f, -0.079589844f, 0.21728516f, 0.43017578f, 0.4206543f, 0.47827148f, 0.58691406f, 0.27612305f, -0.26391602f, -0.65771484f, -0.67944336f, -0.3935547f, -0.11791992f, 0.2277832f, - -0.80078125f, 0.18066406f, 0.12036133f, -0.39575195f, -0.60009766f, -0.13134766f, 0.77685547f, 0.5834961f, 0.4248047f, 0.15820312f, 0.08520508f, -0.060058594f, -0.1652832f, -0.17700195f, -0.0234375f, 0.023925781f, - 0.28100586f, 0.4013672f, 0.5695801f, 0.1394043f, -0.20532227f, -0.18286133f, 0.40698242f, 0.703125f, 0.54907227f, 0.09301758f, -0.47631836f, -0.62597656f, -0.4975586f, -0.39160156f, -0.41259766f, -0.3515625f, - 0.3227539f, -1.0678711f, -1.1435547f, 0.068603516f, 0.7546387f, 0.38745117f, 0.09008789f, -0.0007324219f, -0.12792969f, 0.076416016f, 0.24853516f, 0.28735352f, 0.076660156f, -0.041748047f, -0.01977539f, 0.08911133f, - 0.6101074f, -0.22070312f, -0.5324707f, -0.119384766f, 0.10473633f, 0.16333008f, -0.15112305f, -0.34472656f, -0.39746094f, -0.43652344f, -0.23876953f, 0.0017089844f, 0.056152344f, 0.22973633f, 0.50024414f, 0.7751465f, -}; - -const float ivas_sns_cdbk_tcx20_stage3[ 32 * 16 ] = -{ - -0.12109375f, -0.32348633f, -0.25976562f, 0.21435547f, 0.4814453f, 0.14819336f, -0.22363281f, -0.31030273f, -0.13256836f, 0.10107422f, 0.33276367f, 0.32495117f, 0.16577148f, -0.079833984f, -0.16210938f, -0.15527344f, - 0.088378906f, -0.0146484375f, -0.13378906f, -0.29003906f, 0.873291f, -0.3125f, -0.19384766f, 0.19311523f, -0.09863281f, 0.052734375f, -0.13110352f, -0.021972656f, -0.07861328f, -0.01977539f, -0.07373047f, 0.1616211f, - -0.115722656f, 0.28100586f, 0.2697754f, -0.10522461f, -0.107910156f, -0.2866211f, -0.36694336f, -0.33862305f, -0.15844727f, 0.01928711f, 0.17382812f, 0.21118164f, 0.2697754f, 0.17260742f, 0.07299805f, 0.009033203f, - 0.08154297f, 0.037841797f, -0.25878906f, -0.30444336f, -0.064208984f, 0.1303711f, 0.36669922f, 0.39916992f, 0.3400879f, 0.14331055f, -0.01171875f, -0.12060547f, -0.17041016f, -0.23071289f, -0.20825195f, -0.13012695f, - -0.024902344f, -0.6298828f, 0.7861328f, -0.010986328f, -0.12695312f, -0.08618164f, 0.022705078f, 0.049316406f, 0.004638672f, -0.13647461f, -0.09863281f, 0.0f, 0.06518555f, 0.014404297f, 0.060546875f, 0.111083984f, - -0.39404297f, 0.16821289f, 0.28564453f, -0.08666992f, -0.16088867f, 0.052246094f, 0.26000977f, 0.057128906f, -0.050048828f, -0.07836914f, 0.016601562f, 0.05883789f, 0.07373047f, -0.03955078f, -0.08520508f, -0.07763672f, - 0.011962891f, -0.114990234f, -0.10229492f, -0.07080078f, 0.009765625f, -0.03125f, -0.15600586f, -0.014892578f, 0.10546875f, -0.040283203f, -0.48095703f, -0.2783203f, 0.5905762f, 0.66137695f, 0.13842773f, -0.22802734f, - 0.48706055f, 0.18286133f, -0.20678711f, -0.17651367f, -0.19750977f, -0.3178711f, -0.2524414f, 0.0087890625f, 0.2866211f, 0.25708008f, 0.18969727f, 0.11694336f, 0.049316406f, -0.05517578f, -0.17700195f, -0.19482422f, - 0.122802734f, -0.09667969f, 0.05444336f, 0.17358398f, 0.22924805f, 0.35229492f, 0.40307617f, 0.031982422f, -0.16064453f, -0.14819336f, -0.103027344f, -0.088134766f, -0.13623047f, -0.23510742f, -0.2434082f, -0.15600586f, - -0.5810547f, -0.0146484375f, -0.43432617f, -0.07397461f, 0.30444336f, 0.36035156f, 0.19213867f, 0.12890625f, 0.13061523f, 0.031982422f, -0.024902344f, -0.059326172f, -0.048583984f, -0.030517578f, 0.03149414f, 0.087646484f, - -0.1171875f, 0.016357422f, 0.15234375f, 0.38916016f, 0.2783203f, -0.007080078f, -0.07373047f, -0.2055664f, -0.30004883f, -0.35839844f, -0.23388672f, -0.033935547f, 0.08520508f, 0.10913086f, 0.125f, 0.17480469f, - -0.107666016f, 0.06274414f, -0.0048828125f, 0.12792969f, -0.023925781f, -0.2199707f, -0.084228516f, 0.34399414f, 0.22753906f, -0.39697266f, -0.32421875f, 0.48779297f, 0.43554688f, -0.15429688f, -0.22436523f, -0.14550781f, - 0.0031738281f, -0.03955078f, 0.06738281f, -0.017822266f, -0.2644043f, 0.30493164f, 0.30200195f, -0.32495117f, -0.5007324f, 0.15478516f, 0.60961914f, 0.15527344f, -0.1899414f, -0.14526367f, 0.017822266f, -0.1315918f, - 0.036621094f, -0.11669922f, -0.33691406f, -0.5373535f, -0.13598633f, 0.3046875f, 0.3215332f, -0.10620117f, -0.1640625f, -0.08569336f, 0.012451172f, 0.10839844f, 0.20117188f, 0.17553711f, 0.15258789f, 0.16967773f, - -0.4362793f, -0.47265625f, -0.16870117f, -0.111083984f, -0.1772461f, -0.1430664f, 0.015136719f, 0.12719727f, 0.13647461f, 0.12988281f, 0.19238281f, 0.22827148f, 0.23266602f, 0.17504883f, 0.14453125f, 0.12768555f, - -0.07495117f, 0.19604492f, 0.13110352f, -0.10131836f, -0.0078125f, -0.18847656f, -0.048828125f, 0.33862305f, 0.2578125f, -0.17089844f, -0.40698242f, -0.28857422f, -0.048339844f, 0.048828125f, 0.14916992f, 0.21459961f, - -0.27734375f, -0.072509766f, 0.26049805f, 0.39038086f, 0.2277832f, 0.020751953f, -0.12109375f, -0.080322266f, 0.171875f, 0.36743164f, 0.107421875f, -0.19311523f, -0.22607422f, -0.20654297f, -0.19799805f, -0.17041016f, - 0.1352539f, 0.40039062f, -0.15649414f, -0.25341797f, 0.31054688f, 0.5410156f, -0.32958984f, -0.42871094f, 0.14794922f, 0.17333984f, -0.17871094f, -0.23730469f, -0.026611328f, -0.013427734f, -0.046142578f, -0.037841797f, - -0.30395508f, 0.12841797f, 0.20825195f, -0.119628906f, -0.3317871f, -0.3190918f, -0.11206055f, 0.10205078f, 0.32470703f, 0.36254883f, 0.2626953f, 0.016113281f, -0.12890625f, -0.16479492f, -0.005126953f, 0.080566406f, - 0.34375f, 0.35888672f, 0.4765625f, 0.13623047f, -0.115722656f, -0.053222656f, 0.080566406f, -0.012207031f, -0.022216797f, -0.09863281f, -0.080566406f, -0.13574219f, -0.18383789f, -0.26123047f, -0.2578125f, -0.17504883f, - 0.01171875f, -0.015625f, 0.2680664f, -0.23461914f, -0.35717773f, 0.6381836f, -0.30664062f, 0.08129883f, -0.05493164f, 0.10058594f, -0.026855469f, -0.10180664f, -0.013671875f, -0.06347656f, 0.00048828125f, 0.07446289f, - -0.1015625f, 0.05053711f, 0.092285156f, 0.038330078f, -0.03491211f, 0.16479492f, 0.0859375f, 0.0036621094f, -0.15454102f, -0.09106445f, 0.026367188f, -0.23950195f, -0.43676758f, -0.27783203f, 0.21850586f, 0.6555176f, - -0.16064453f, 0.032958984f, 0.08325195f, 0.052978516f, -0.041748047f, 0.08959961f, 0.16552734f, 0.057373047f, -0.08154297f, 0.21362305f, 0.048583984f, -0.7026367f, -0.27685547f, 0.51000977f, 0.27197266f, -0.26245117f, - 0.62109375f, 0.00390625f, 0.08081055f, 0.16748047f, 0.08276367f, -0.11254883f, -0.20825195f, -0.3076172f, -0.24926758f, -0.15332031f, 0.0007324219f, 0.087646484f, 0.11303711f, 0.022705078f, -0.068847656f, -0.080322266f, - 0.40844727f, -0.390625f, -0.35473633f, 0.21777344f, 0.21972656f, -0.0107421875f, 0.111328125f, 0.21459961f, 0.1430664f, -0.08935547f, -0.19165039f, -0.2368164f, -0.1340332f, -0.034179688f, 0.030761719f, 0.09667969f, - -0.2199707f, 0.8208008f, -0.32104492f, 0.118896484f, -0.006591797f, -0.1328125f, 0.0078125f, -0.013183594f, -0.05493164f, -0.024414062f, 0.06542969f, -0.0014648438f, -0.055664062f, -0.06762695f, -0.07055664f, -0.044677734f, - -0.14770508f, -0.16967773f, -0.1105957f, 0.6333008f, -0.4025879f, -0.3515625f, 0.29736328f, 0.0859375f, 0.024414062f, -0.07128906f, 0.010253906f, 0.0007324219f, -0.021728516f, 0.01977539f, 0.083496094f, 0.12060547f, - -0.06738281f, 0.030517578f, 0.019042969f, 0.16308594f, 0.16796875f, 0.037109375f, 0.059326172f, 0.07397461f, 0.03540039f, 0.05517578f, 0.06982422f, 0.061523438f, 0.1940918f, 0.20605469f, -0.3178711f, -0.7878418f, - 0.1274414f, -0.040771484f, -0.21704102f, -0.025634766f, 0.012451172f, -0.033203125f, -0.15771484f, 0.052001953f, -0.19165039f, -0.26342773f, 0.032226562f, 0.7976074f, -0.4807129f, -0.21582031f, 0.36499023f, 0.2397461f, - 0.46044922f, 0.21435547f, 0.0847168f, -0.24414062f, -0.49902344f, -0.16577148f, 0.30151367f, 0.049560547f, -0.07470703f, -0.21459961f, -0.13256836f, -0.009277344f, 0.06665039f, 0.029052734f, 0.0390625f, 0.095214844f, - 0.17895508f, -0.31396484f, -0.033203125f, -0.02734375f, -0.0637207f, -0.11791992f, -0.03466797f, 0.0061035156f, 0.07324219f, 0.072753906f, 0.14916992f, 0.13671875f, 0.12524414f, 0.017333984f, -0.08178711f, -0.08618164f, - 0.13330078f, -0.15893555f, -0.22045898f, -0.032226562f, -0.07739258f, -0.25463867f, -0.32299805f, -0.2614746f, 0.039794922f, 0.18554688f, 0.1262207f, -0.04321289f, -0.010498047f, 0.13330078f, 0.31860352f, 0.44506836f, -}; - -const float ivas_sns_cdbk_tcx20_stage4[ 32 * 16 ] = -{ - -0.0056152344f, -0.03955078f, 0.071777344f, 0.26879883f, 0.44140625f, -0.08203125f, -0.20092773f, -0.009277344f, 0.05810547f, -0.06347656f, -0.07910156f, -0.05126953f, -0.07006836f, -0.068847656f, -0.07885742f, -0.09082031f, - -0.011962891f, -0.060302734f, 0.011962891f, 0.049804688f, -0.044677734f, 0.037841797f, 0.099121094f, 0.06274414f, 0.022216797f, -0.09057617f, 0.00390625f, 0.38452148f, 0.1027832f, -0.5292969f, -0.3269043f, 0.28881836f, - -0.3557129f, 0.3815918f, 0.10839844f, 0.08203125f, 0.03149414f, -0.0024414062f, -0.0036621094f, -0.02758789f, -0.03125f, -0.096191406f, -0.09326172f, -0.103515625f, -0.07006836f, 0.008056641f, 0.06616211f, 0.10644531f, - 0.038330078f, 0.022460938f, -0.22070312f, 0.529541f, -0.3540039f, 0.29907227f, -0.16235352f, -0.03955078f, 0.053222656f, -0.07348633f, -0.051513672f, 0.021484375f, 0.04638672f, 0.029541016f, -0.052001953f, -0.08618164f, - 0.075927734f, -0.19604492f, 0.046875f, -0.00048828125f, -0.052978516f, -0.03491211f, 0.19067383f, 0.08520508f, -0.16113281f, -0.29785156f, -0.22558594f, -0.07006836f, 0.053955078f, 0.1550293f, 0.19042969f, 0.2409668f, - 0.08227539f, 0.26464844f, -0.15332031f, -0.140625f, -0.0068359375f, 0.060302734f, -0.05126953f, -0.23339844f, -0.28442383f, -0.14160156f, 0.0793457f, 0.23828125f, 0.20678711f, 0.09716797f, 0.014892578f, -0.032470703f, - 0.20581055f, -0.19702148f, 0.053466797f, 0.026855469f, -0.011962891f, -0.04663086f, -0.11254883f, 0.060058594f, 0.33984375f, 0.33447266f, -0.14257812f, -0.37719727f, -0.21850586f, 0.016845703f, 0.08325195f, -0.013916016f, - 0.34375f, -0.38623047f, -0.06542969f, -0.07348633f, -0.107421875f, 0.037353516f, 0.14477539f, 0.01586914f, 0.0026855469f, 0.08959961f, 0.19433594f, 0.1027832f, -0.03149414f, -0.060058594f, -0.1003418f, -0.10668945f, - 0.12841797f, 0.01953125f, 0.16333008f, 0.22827148f, -0.16015625f, -0.42016602f, -0.19067383f, 0.08642578f, 0.08520508f, -0.022705078f, 0.011230469f, 0.013671875f, -0.0034179688f, 0.019042969f, -0.005859375f, 0.047851562f, - 0.02734375f, 0.008056641f, -0.07470703f, 0.114990234f, 0.0021972656f, -0.41796875f, 0.5605469f, -0.28735352f, 0.022949219f, -0.07739258f, -0.028808594f, 0.1928711f, 0.056152344f, 0.0053710938f, -0.048583984f, -0.055419922f, - -0.037109375f, 0.12939453f, -0.38671875f, -0.095214844f, 0.0021972656f, -0.012451172f, 0.19677734f, 0.2578125f, 0.12670898f, -0.10180664f, -0.087890625f, 0.009521484f, 0.1418457f, 0.14526367f, -0.076660156f, -0.21166992f, - 0.29711914f, 0.06616211f, -0.375f, -0.080566406f, 0.1484375f, -0.0007324219f, -0.020996094f, 0.013427734f, -0.014160156f, -0.11279297f, -0.08081055f, -0.056152344f, -0.13769531f, -0.060546875f, 0.10595703f, 0.30810547f, - -0.025146484f, 0.023925781f, -0.02758789f, -0.0009765625f, 0.08178711f, -0.13452148f, -0.022949219f, 0.6875f, -0.39794922f, -0.123046875f, 0.06738281f, 0.04345703f, -0.053955078f, -0.0146484375f, -0.045410156f, -0.05810547f, - 0.0146484375f, 0.041748047f, -0.024902344f, 0.005126953f, -0.079589844f, -0.04638672f, -0.028320312f, 0.021972656f, -0.11450195f, -0.118896484f, -0.041748047f, -0.001953125f, -0.2783203f, 0.33154297f, 0.64575195f, -0.32543945f, - -0.13989258f, -0.020019531f, 0.3137207f, -0.53271484f, 0.3154297f, 0.037353516f, -0.04272461f, -0.059326172f, -0.05444336f, -0.009765625f, -0.0073242188f, 0.015380859f, 0.0769043f, 0.08251953f, 0.01171875f, 0.013427734f, - -0.049804688f, 0.022949219f, -0.08227539f, -0.08544922f, 0.012451172f, 0.015380859f, -0.2241211f, 0.15625f, -0.19750977f, 0.5703125f, -0.3684082f, 0.072753906f, 0.4711914f, -0.35888672f, 0.14697266f, -0.10205078f, - -0.17138672f, -0.19067383f, -0.21411133f, -0.030517578f, 0.09667969f, -0.087402344f, -0.09643555f, 0.017089844f, 0.08666992f, 0.041503906f, 0.05908203f, 0.034179688f, 0.08129883f, 0.12841797f, 0.12011719f, 0.12548828f, - -0.044921875f, 0.0061035156f, 0.037841797f, 0.017089844f, 0.064453125f, 0.008300781f, -0.20532227f, -0.025146484f, 0.07397461f, 0.06225586f, -0.15991211f, -0.27612305f, 0.44873047f, 0.14111328f, -0.40893555f, 0.26049805f, - -0.14941406f, 0.17773438f, 0.022949219f, -0.125f, 0.00048828125f, 0.19018555f, 0.03857422f, -0.039794922f, 0.09448242f, 0.20214844f, 0.22436523f, 0.111572266f, -0.08081055f, -0.16992188f, -0.25146484f, -0.24633789f, - -0.09350586f, 0.028076172f, -0.04272461f, 0.05419922f, 0.01586914f, -0.16870117f, -0.30395508f, -0.17285156f, 0.0690918f, 0.30541992f, 0.23266602f, -0.09082031f, 0.1340332f, 0.3449707f, 0.036621094f, -0.3486328f, - -0.20019531f, -0.10449219f, 0.041992188f, 0.09350586f, 0.010253906f, 0.04711914f, 0.26342773f, 0.23852539f, 0.13598633f, -0.04296875f, -0.063964844f, -0.13769531f, -0.18164062f, -0.10083008f, -0.033691406f, 0.03491211f, - 0.14648438f, 0.02758789f, 0.33984375f, -0.005126953f, -0.09887695f, 0.04272461f, -0.18652344f, -0.33129883f, -0.14208984f, 0.040039062f, 0.036376953f, -0.072509766f, -0.119628906f, -0.0017089844f, 0.09448242f, 0.23046875f, - 0.23852539f, 0.26513672f, 0.034179688f, 0.04272461f, 0.05053711f, 0.03466797f, 0.12182617f, 0.03930664f, -0.018066406f, -0.095947266f, -0.107666016f, -0.16040039f, -0.17211914f, -0.12524414f, -0.09716797f, -0.05078125f, - -0.08178711f, -0.05126953f, -0.20507812f, 0.115478516f, 0.14453125f, -0.010986328f, -0.16357422f, -0.05102539f, 0.037597656f, 0.24365234f, 0.38452148f, 0.05444336f, -0.40283203f, -0.21972656f, 0.0793457f, 0.12695312f, - -0.2548828f, -0.28222656f, 0.19628906f, 0.2890625f, 0.047851562f, -0.034179688f, 0.012451172f, -0.1159668f, -0.20947266f, -0.08154297f, 0.13427734f, 0.16333008f, 0.07885742f, 0.05078125f, 0.013427734f, -0.0078125f, - -0.067871094f, 0.02368164f, -0.010986328f, -0.037109375f, -0.19140625f, 0.118896484f, -0.020019531f, -0.3955078f, 0.5673828f, -0.02758789f, -0.23950195f, 0.103759766f, -0.04736328f, 0.029785156f, 0.07495117f, 0.118896484f, - 0.095214844f, -0.0078125f, 0.36035156f, -0.075927734f, -0.20385742f, 0.0625f, 0.15332031f, 0.044921875f, 0.0041503906f, -0.13793945f, -0.1472168f, 0.015136719f, 0.17504883f, 0.1105957f, -0.14648438f, -0.30151367f, - 0.063964844f, -0.0234375f, 0.07739258f, -0.24169922f, 0.041015625f, 0.18823242f, -0.43701172f, 0.25976562f, 0.25097656f, -0.37182617f, 0.040771484f, 0.2590332f, 0.0036621094f, -0.044677734f, -0.03173828f, -0.03466797f, - 0.025390625f, 0.09301758f, 0.11328125f, -0.027832031f, -0.0087890625f, -0.0703125f, 0.028320312f, -0.052734375f, -0.1953125f, -0.32617188f, 0.67871094f, -0.07397461f, -0.15039062f, -0.0703125f, -0.02758789f, 0.064697266f, - -0.049560547f, 0.15551758f, -0.016113281f, -0.27661133f, -0.30371094f, -0.13427734f, 0.08203125f, 0.09814453f, 0.07495117f, 0.038330078f, 0.055664062f, -0.00390625f, -0.018554688f, 0.0390625f, 0.10620117f, 0.15283203f, - -0.04321289f, -0.18408203f, -0.045654297f, -0.05029297f, 0.21191406f, 0.5300293f, 0.09716797f, -0.12866211f, -0.09423828f, -0.08666992f, -0.087890625f, -0.09643555f, -0.045166016f, 0.021972656f, -0.013183594f, 0.014160156f, - -0.0017089844f, -0.014160156f, -0.048339844f, -0.037109375f, -0.0949707f, -0.005859375f, 0.48388672f, -0.17480469f, -0.19140625f, 0.5727539f, -0.18920898f, -0.26391602f, 0.0048828125f, 0.067871094f, -0.045654297f, -0.06201172f, -}; - -const float *const ivas_sns_cdbks_tcx20[SNS_MSVQ_NSTAGES_TCX20] = { ivas_sns_cdbk_tcx20_stage1, ivas_sns_cdbk_tcx20_stage2, ivas_sns_cdbk_tcx20_stage3, ivas_sns_cdbk_tcx20_stage4 }; -#endif const Word16 ivas_sns_cdbks_tcx10_levels[SNS_MSVQ_NSTAGES_TCX10] = { 128, 32, 8 }; const Word16 ivas_sns_cdbks_tcx10_bits[SNS_MSVQ_NSTAGES_TCX10] = { 7, 5, 3 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_sns_cdbk_tcx10_stage1[ 128 * 16 ] = -{ - 1.0144043f, 1.1826172f, 0.3269043f, -0.6411133f, -1.2163086f, -1.1411133f, -1.1525879f, -0.8898926f, -0.19604492f, 0.7402344f, 1.1782227f, 1.0830078f, 0.78222656f, 0.26953125f, -0.33203125f, -1.0080566f, - -0.38916016f, -0.31347656f, -1.1826172f, -2.036621f, -2.086914f, -1.8569336f, -1.637207f, -1.3156738f, -0.4182129f, 0.50634766f, 1.2770996f, 1.3771973f, 1.8566895f, 2.3503418f, 2.3015137f, 1.5678711f, - 0.43652344f, 1.8859863f, 2.8059082f, 2.2385254f, 1.5480957f, 0.14331055f, 0.07299805f, -1.1218262f, -1.1103516f, -0.7336426f, -0.4194336f, -0.89624023f, -1.0429688f, -0.79785156f, -1.204834f, -1.8046875f, - 1.5612793f, 0.9321289f, 0.58740234f, 0.46313477f, 0.21899414f, 0.0625f, -0.16918945f, -0.34423828f, -0.44726562f, -0.61035156f, -0.6398926f, -0.57177734f, -0.38500977f, -0.25927734f, -0.20898438f, -0.18945312f, - 1.0131836f, 1.9333496f, 0.8395996f, -0.4963379f, -0.66015625f, -0.38012695f, 0.056396484f, 0.31201172f, 0.810791f, 0.66674805f, -0.022705078f, -0.7980957f, -0.9230957f, -0.63134766f, -0.68530273f, -1.034668f, - -0.842041f, -0.08642578f, 0.49243164f, 0.5827637f, 1.1630859f, 1.3693848f, 0.7233887f, 0.2705078f, 0.34692383f, 0.0068359375f, -0.2319336f, -0.33032227f, -0.5895996f, -0.67626953f, -0.9953613f, -1.2033691f, - 2.0810547f, 1.8205566f, 1.1000977f, 0.47216797f, 0.08251953f, -0.48510742f, -0.67285156f, -0.55322266f, -0.4777832f, -0.546875f, -0.579834f, -0.5891113f, -0.5119629f, -0.4255371f, -0.32910156f, -0.38500977f, - 1.730957f, 1.3063965f, 0.53466797f, 0.23144531f, 0.04248047f, 0.0036621094f, 0.0949707f, 0.15942383f, 0.1977539f, 0.19946289f, 0.21899414f, 0.064697266f, -0.43408203f, -0.94750977f, -1.5297852f, -1.8735352f, - 1.6611328f, 2.8601074f, 1.7668457f, -0.12988281f, -0.27978516f, 1.199707f, 1.4865723f, 1.220459f, 0.61865234f, -1.2509766f, -1.5700684f, -1.3425293f, -1.3532715f, -1.3083496f, -1.5671387f, -2.0112305f, - 1.8820801f, 0.6086426f, -0.52319336f, -1.5842285f, -1.2685547f, -0.9067383f, -0.6323242f, -0.203125f, -0.25878906f, 0.091796875f, 0.18286133f, 1.2060547f, 1.0129395f, -0.049560547f, -0.1274414f, 0.5698242f, - 0.60498047f, 1.1367188f, 1.5297852f, 1.9936523f, 1.9726562f, 1.9311523f, 1.7668457f, 1.3752441f, 0.939209f, 0.020019531f, -0.72558594f, -1.3706055f, -2.269043f, -2.7990723f, -3.010254f, -3.0957031f, - -0.9187012f, 0.107177734f, 0.32495117f, -0.051513672f, -0.2746582f, 0.2043457f, 0.8605957f, 0.30737305f, 0.064208984f, -0.1743164f, -0.5998535f, -0.7624512f, -0.10864258f, 0.49975586f, 0.40283203f, 0.118896484f, - 1.0822754f, 0.7507324f, 0.47460938f, 0.00390625f, -0.28881836f, -0.5131836f, -0.62158203f, -0.6550293f, -0.59228516f, -0.42895508f, -0.17675781f, 0.061035156f, 0.119140625f, 0.037109375f, 0.24267578f, 0.5046387f, - -2.3117676f, -1.2453613f, -0.7062988f, -0.83813477f, -0.5036621f, 0.040039062f, 0.6281738f, 0.93115234f, 0.826416f, 0.3791504f, 0.19970703f, -0.023925781f, 0.35913086f, 0.953125f, 0.87280273f, 0.43969727f, - 3.8930664f, 4.2009277f, 3.1296387f, 2.685791f, 2.1108398f, 2.032959f, 0.046142578f, -1.3862305f, -1.6176758f, -1.9997559f, -2.130371f, -2.1767578f, -2.213623f, -2.2236328f, -2.1501465f, -2.201416f, - -1.3452148f, -0.43041992f, 0.38720703f, 1.0549316f, 1.4541016f, 1.6882324f, 1.3688965f, 0.44335938f, -0.037109375f, -0.23144531f, -0.5349121f, -0.7902832f, -0.81152344f, -0.73876953f, -0.6965332f, -0.78027344f, - 2.1210938f, 2.654541f, 2.0202637f, 1.1313477f, 0.42333984f, -0.13598633f, -0.31591797f, -0.38500977f, -0.37548828f, -0.7619629f, -0.9873047f, -1.046875f, -0.9699707f, -0.99975586f, -1.0686035f, -1.3034668f, - 2.0297852f, 0.09301758f, -1.026123f, -1.6860352f, -0.5925293f, 0.7067871f, 1.1433105f, -0.31152344f, -0.8725586f, -0.37524414f, 0.09326172f, -0.4165039f, -0.375f, -0.32592773f, 0.65185547f, 1.2634277f, - 0.49169922f, 1.6848145f, 1.8188477f, 2.048584f, 1.3818359f, 1.3059082f, 0.8100586f, 0.15429688f, -0.40161133f, -1.7539062f, -2.8208008f, -1.5043945f, -0.54663086f, -0.9963379f, -0.7890625f, -0.8833008f, - 0.60131836f, 1.9431152f, 1.1845703f, -0.50927734f, -0.51708984f, 0.7182617f, 0.6542969f, 0.06665039f, -0.48120117f, -0.9313965f, -1.0275879f, -0.9108887f, -0.48168945f, 0.055664062f, 0.17333984f, -0.5378418f, - 0.5378418f, 0.47216797f, 0.17480469f, -0.3022461f, -0.19726562f, -0.030517578f, -0.008544922f, 0.009277344f, -0.033935547f, -0.022705078f, 0.20629883f, 0.45239258f, 0.18237305f, -0.14233398f, -0.50561523f, -0.7922363f, - -2.0576172f, -2.215088f, -1.0456543f, -0.07910156f, 1.4833984f, 1.3276367f, -0.119140625f, -0.638916f, -0.06713867f, 0.8666992f, -0.25634766f, -0.041503906f, 1.1413574f, 1.0339355f, 0.5041504f, 0.16333008f, - 2.7668457f, 2.9187012f, 1.6850586f, 0.47216797f, -0.3696289f, -0.70288086f, -0.7890625f, -1.034668f, -0.8354492f, -0.69262695f, -0.6418457f, -0.70751953f, -0.6467285f, -0.49682617f, -0.49023438f, -0.43530273f, - 0.104003906f, 0.9812012f, 1.1506348f, 0.9128418f, 0.81933594f, 0.8522949f, 0.7446289f, 0.46069336f, 0.31347656f, -0.06542969f, -0.49536133f, -0.85302734f, -1.0515137f, -1.0839844f, -1.2729492f, -1.5166016f, - 0.5107422f, 1.4162598f, 2.0109863f, 2.331787f, 1.6552734f, 0.8979492f, 0.6035156f, 0.2487793f, 0.26049805f, -0.26416016f, -0.7624512f, -1.2497559f, -1.8212891f, -1.807373f, -1.8876953f, -2.1430664f, - 0.23461914f, 0.3942871f, -0.2163086f, -1.0683594f, -1.3544922f, -1.2963867f, -1.2163086f, -1.192627f, -0.8947754f, -0.36083984f, 0.29248047f, 0.6989746f, 1.1608887f, 1.6723633f, 1.8217773f, 1.324707f, - 3.0012207f, 3.3725586f, 2.8825684f, 2.7036133f, 2.4111328f, 2.5178223f, 1.418457f, 0.048583984f, -0.7297363f, -1.8293457f, -2.4519043f, -2.5717773f, -2.6826172f, -2.7434082f, -2.6733398f, -2.673584f, - 0.061035156f, 0.7324219f, 1.2775879f, 0.8625488f, 0.2524414f, 0.092285156f, -0.13500977f, -0.41674805f, -0.52075195f, -0.7026367f, -0.69262695f, -0.5744629f, -0.4494629f, -0.08886719f, 0.17211914f, 0.1303711f, - 2.1413574f, 1.7810059f, 0.7092285f, -0.37304688f, -0.6828613f, -0.54296875f, -0.5942383f, -0.9050293f, -0.97558594f, -0.8232422f, -0.6015625f, -0.57128906f, 0.021484375f, 0.59887695f, 0.5192871f, 0.29882812f, - -1.3076172f, -0.99609375f, -0.7758789f, -0.83374023f, -0.8322754f, -0.72924805f, -0.5461426f, -0.1652832f, 0.4482422f, 1.0227051f, 1.440918f, 1.338623f, 0.89331055f, 0.6164551f, 0.42700195f, -0.0009765625f, - 2.084961f, 3.2036133f, 2.5375977f, 0.7463379f, 0.24682617f, 0.7133789f, 0.46118164f, -0.16430664f, -0.31347656f, -1.1755371f, -1.5986328f, -1.6252441f, -1.3684082f, -1.1738281f, -1.1335449f, -1.440918f, - -0.22070312f, 0.74121094f, 0.9091797f, 0.25f, 0.15161133f, 0.5371094f, 0.74902344f, 1.0612793f, 1.1540527f, 0.22924805f, -0.74438477f, -1.1445312f, -1.0881348f, -0.7956543f, -0.7746582f, -1.0144043f, - 1.8095703f, 2.084961f, 0.859375f, -0.22167969f, -0.49951172f, -0.58496094f, -0.548584f, -0.35595703f, -0.23828125f, 0.018066406f, -0.119384766f, 0.16845703f, 0.03491211f, -0.8540039f, -1.0222168f, -0.53027344f, - -2.2055664f, -2.6103516f, -2.4230957f, -2.2021484f, -0.9482422f, 1.682373f, 2.345459f, 2.1347656f, 1.9140625f, 1.019043f, 0.6623535f, 0.62719727f, 0.85546875f, 0.8095703f, -0.23144531f, -1.4296875f, - 3.0585938f, 3.8530273f, 2.633789f, 0.8532715f, -0.09008789f, -0.52685547f, -0.60375977f, -0.7915039f, -0.861084f, -1.2512207f, -1.3881836f, -1.3081055f, -1.1264648f, -0.88378906f, -0.6906738f, -0.8774414f, - 0.91845703f, 1.7211914f, 0.89575195f, -0.07543945f, -0.3798828f, -0.49023438f, -0.5810547f, -0.57666016f, -0.4921875f, -0.36206055f, -0.23706055f, -0.22924805f, -0.15600586f, 0.03100586f, 0.0703125f, -0.057128906f, - 1.3344727f, 1.2441406f, 0.20483398f, -1.0561523f, -1.0715332f, -0.12084961f, 0.96728516f, 1.5930176f, 1.1330566f, 0.115722656f, -0.45532227f, -0.44140625f, -0.5053711f, -0.8222656f, -0.96972656f, -1.1499023f, - -1.8754883f, -2.5437012f, -2.1186523f, 0.6845703f, 1.7653809f, 3.8078613f, 1.5759277f, -0.59228516f, -0.22167969f, 0.5510254f, 1.770752f, 1.2670898f, -0.85180664f, -1.3605957f, -1.5881348f, -0.27026367f, - 2.5178223f, 2.0725098f, 1.2094727f, 0.30126953f, -0.29370117f, -0.095947266f, 0.45141602f, 0.4663086f, 0.22338867f, -0.5546875f, -1.3134766f, -1.3378906f, -0.842041f, -0.87231445f, -1.0029297f, -0.92944336f, - 2.199707f, 1.7602539f, 1.2255859f, 0.74243164f, 0.45288086f, 0.3161621f, 0.076660156f, -0.23266602f, -0.5065918f, -0.6386719f, -0.6906738f, -0.6977539f, -0.798584f, -0.9692383f, -1.0688477f, -1.1706543f, - 0.3564453f, 1.670166f, 2.1064453f, 0.765625f, 0.767334f, 1.4802246f, 1.4580078f, 0.8364258f, 0.5427246f, -1.2788086f, -1.7922363f, -1.552002f, -1.4414062f, -0.9494629f, -1.151123f, -1.8183594f, - 0.35375977f, -0.44604492f, -1.1108398f, -1.5837402f, -1.3947754f, -0.6669922f, -0.16113281f, 0.10571289f, 0.3190918f, 0.5788574f, 0.6821289f, 0.7907715f, 0.7709961f, 0.59375f, 0.5800781f, 0.58813477f, - 1.2800293f, 2.3510742f, 2.9519043f, 2.9152832f, 2.5854492f, 1.7675781f, 1.0688477f, 0.4387207f, -0.19555664f, -1.513916f, -2.340332f, -2.5202637f, -2.3115234f, -2.1765137f, -2.1308594f, -2.1696777f, - -1.6928711f, -0.26049805f, 0.19189453f, -0.04711914f, 0.061279297f, 0.15258789f, 0.17089844f, 0.10205078f, 0.08691406f, 0.076660156f, 0.039794922f, 0.025878906f, 0.0014648438f, 0.265625f, 0.46240234f, 0.3630371f, - 1.4794922f, 0.9511719f, 0.1184082f, -0.7175293f, -1.15625f, -0.8388672f, 0.068847656f, 0.49609375f, 0.45629883f, -0.12768555f, -0.79907227f, -0.7434082f, -0.20336914f, -0.00390625f, 0.27514648f, 0.74438477f, - -1.628418f, -0.46142578f, 0.087402344f, -0.056152344f, 0.10913086f, 0.58813477f, 0.9543457f, 1.532959f, 1.3303223f, 0.35180664f, -0.21435547f, -0.49267578f, -0.5546875f, -0.34765625f, -0.4658203f, -0.7324219f, - 2.887207f, 4.0615234f, 3.1860352f, 1.532959f, 0.4165039f, 0.19067383f, 0.57055664f, -0.7878418f, -1.2619629f, -1.8005371f, -1.6381836f, -1.4213867f, -1.5876465f, -1.5568848f, -1.2424316f, -1.548584f, - 0.1184082f, 0.16186523f, 0.17089844f, 0.52856445f, 0.48364258f, 0.23583984f, 0.091796875f, 0.4477539f, 0.56103516f, 0.3972168f, 0.27197266f, 0.17138672f, -0.1850586f, -0.74194336f, -1.204834f, -1.5085449f, - 3.7294922f, 2.5002441f, 1.5256348f, 0.701416f, 0.19116211f, 0.07861328f, 0.24267578f, 0.4243164f, 0.23217773f, -0.4404297f, -1.0891113f, -1.3295898f, -1.3798828f, -1.6437988f, -1.8586426f, -1.8840332f, - -1.0793457f, -0.54956055f, -0.53271484f, -0.8959961f, -0.7878418f, -0.50390625f, -0.45898438f, -0.45410156f, -0.14868164f, 0.07495117f, 0.30126953f, 0.5197754f, 0.8623047f, 1.3652344f, 1.3466797f, 0.9406738f, - 0.8203125f, 1.934082f, 2.6530762f, 2.293457f, 1.5932617f, 0.25708008f, 0.46289062f, 0.7038574f, 0.39990234f, -1.3444824f, -1.871582f, -1.7602539f, -1.8720703f, -1.1584473f, -1.3552246f, -1.7556152f, - 0.6022949f, 1.5651855f, 2.024414f, 1.043457f, 0.5551758f, 0.29516602f, -0.059326172f, -0.29589844f, -0.28930664f, -0.6899414f, -0.87158203f, -0.8222656f, -0.8574219f, -0.74438477f, -0.65722656f, -0.7980957f, - 0.7392578f, 1.7915039f, 1.7841797f, 1.0437012f, 0.2434082f, -0.5f, -0.76123047f, -0.9995117f, -0.77856445f, -0.61450195f, -0.4025879f, -0.36132812f, -0.16894531f, 0.123046875f, -0.3190918f, -0.8190918f, - -3.3479004f, -2.8823242f, -1.7409668f, -0.01928711f, 1.5759277f, 1.565918f, -0.14379883f, -1.1428223f, -0.46923828f, 1.5456543f, 0.080566406f, 0.15551758f, 1.5246582f, 1.2470703f, 1.1359863f, 0.9152832f, - 3.6564941f, 2.3999023f, 1.4855957f, 0.71728516f, 0.45483398f, 0.25854492f, -0.13500977f, -0.5534668f, -0.7763672f, -1.0727539f, -1.2416992f, -1.2087402f, -1.0163574f, -1.0344238f, -0.97924805f, -0.9543457f, - -0.26391602f, 0.7937012f, 1.5644531f, 1.7453613f, 1.2094727f, 1.2302246f, 1.0932617f, 1.0627441f, 1.1040039f, 0.16601562f, -1.6494141f, -2.2905273f, -1.9121094f, -1.423584f, -0.94140625f, -1.487793f, - 1.7485352f, 1.9509277f, 1.1413574f, 0.23828125f, 0.20532227f, 0.71972656f, 1.0627441f, 0.84375f, 0.6599121f, 0.11010742f, -0.41723633f, -1.0415039f, -1.4494629f, -1.7270508f, -1.9189453f, -2.126709f, - 1.7670898f, -0.14770508f, -0.9782715f, 0.0007324219f, 2.0344238f, 0.28637695f, -0.53125f, -1.2973633f, -1.4816895f, -1.2402344f, -1.1208496f, -1.1516113f, -0.68237305f, -0.05883789f, 1.3154297f, 3.286377f, - 2.586914f, 3.0708008f, 3.369629f, 2.663086f, 1.8154297f, 0.54467773f, 0.5966797f, 0.45703125f, -0.5554199f, -1.7521973f, -2.234375f, -2.2390137f, -2.147461f, -2.0239258f, -2.0800781f, -2.0722656f, - -0.17993164f, 0.5961914f, 0.1184082f, -0.6855469f, -0.8725586f, -0.7883301f, -0.72094727f, -0.5744629f, -0.20922852f, 0.171875f, 0.41430664f, 0.54711914f, 0.49438477f, 0.564209f, 0.64819336f, 0.4765625f, - 2.9692383f, 1.6333008f, 0.5463867f, -0.6401367f, -1.1271973f, -1.4199219f, -1.4353027f, -1.2783203f, -1.0517578f, -0.7229004f, -0.4267578f, -0.39233398f, 0.44873047f, 0.67211914f, 0.89453125f, 1.3300781f, - -0.7512207f, 0.11035156f, 0.47998047f, -0.0949707f, -0.30981445f, 0.028808594f, 0.04272461f, 0.25756836f, 0.88378906f, 1.1179199f, 0.33569336f, -0.30126953f, -0.36132812f, -0.29223633f, -0.4194336f, -0.7260742f, - 3.871582f, 3.6723633f, 2.5690918f, 1.3596191f, 1.0322266f, 1.0532227f, 0.7524414f, 0.15966797f, -0.42114258f, -1.3811035f, -1.967041f, -2.2060547f, -2.1699219f, -2.125f, -2.0786133f, -2.121582f, - 0.41601562f, 0.4086914f, 0.12915039f, 0.44995117f, 1.0292969f, 1.5f, 1.4731445f, 1.0021973f, 0.53149414f, -0.10473633f, -0.49121094f, -0.6335449f, -1.0283203f, -1.3818359f, -1.5666504f, -1.7338867f, - 1.0354004f, 0.7351074f, -0.04321289f, -0.86328125f, -1.1411133f, -0.89990234f, -0.3876953f, 0.2421875f, 0.7763672f, 0.7036133f, 0.4814453f, 0.25952148f, 0.16503906f, -0.0925293f, -0.35668945f, -0.6142578f, - -2.5014648f, -2.2893066f, -2.4162598f, -2.5559082f, -2.2287598f, -1.3945312f, -0.8725586f, -0.30419922f, 0.30200195f, 1.078125f, 1.8603516f, 1.8320312f, 2.2028809f, 2.7680664f, 2.5114746f, 2.0083008f, - 1.4338379f, 2.6071777f, 2.8693848f, 1.9367676f, 1.357666f, 0.54052734f, 0.0073242188f, -0.39257812f, -0.7956543f, -1.501709f, -1.6374512f, -1.4631348f, -1.3227539f, -1.2058105f, -1.0966797f, -1.3371582f, - 0.41577148f, 0.41992188f, 0.01171875f, -0.041748047f, 0.022460938f, 0.24536133f, 0.36010742f, 0.3203125f, 0.16088867f, -0.055664062f, -0.23950195f, -0.4645996f, -0.37817383f, -0.17480469f, -0.19140625f, -0.4104004f, - 0.1303711f, 1.1894531f, 0.9506836f, -0.5930176f, -1.2092285f, -0.53027344f, 0.7734375f, 0.6401367f, 0.54956055f, 0.3388672f, -0.5241699f, -0.9995117f, -0.2709961f, 0.33789062f, -0.091552734f, -0.69140625f, - -2.5305176f, -1.4348145f, -0.14941406f, 0.8322754f, 1.2192383f, 1.2817383f, 0.94140625f, 0.5319824f, 0.37402344f, 0.31469727f, 0.23120117f, 0.010498047f, -0.21533203f, -0.3239746f, -0.45751953f, -0.6254883f, - 1.7978516f, 2.154541f, 1.6486816f, 0.77490234f, 0.38378906f, 0.24902344f, -0.34985352f, -0.9355469f, -1.130127f, -1.3525391f, -1.317627f, -1.0749512f, -0.7229004f, -0.31201172f, 0.06225586f, 0.12475586f, - 0.8828125f, 0.72802734f, 0.59594727f, 0.3737793f, 0.5258789f, 0.72753906f, 0.43017578f, 0.18725586f, 0.06640625f, -0.23266602f, -0.42578125f, -0.50512695f, -0.5432129f, -0.6281738f, -0.92529297f, -1.2570801f, - 1.46875f, 2.616455f, 2.7822266f, 1.1652832f, 0.45581055f, 1.2355957f, 1.2653809f, 0.935791f, 0.5776367f, -0.87597656f, -2.5498047f, -2.6628418f, -2.2028809f, -1.3466797f, -0.9621582f, -1.9025879f, - 1.5563965f, 0.4855957f, -0.31933594f, -0.8959961f, -1.0634766f, -1.0183105f, -0.9716797f, -0.8378906f, -0.4987793f, -0.14331055f, 0.14428711f, 0.31445312f, 0.6821289f, 0.88623047f, 0.87890625f, 0.8005371f, - 1.9968262f, 2.7993164f, 2.0898438f, 0.9248047f, 0.85009766f, 1.4089355f, 1.6706543f, 1.3681641f, 1.1982422f, 0.33544922f, -0.95288086f, -2.145996f, -2.8188477f, -2.941162f, -2.8947754f, -2.8886719f, - -0.75439453f, 0.16137695f, 0.33740234f, -0.19702148f, 0.5197754f, 1.2861328f, 0.42236328f, -0.20092773f, -0.11743164f, -0.69018555f, -1.1972656f, -0.7453613f, -0.053466797f, 0.39208984f, 0.7512207f, 0.08544922f, - 2.1848145f, 1.0153809f, 0.14331055f, -0.6489258f, -0.71435547f, -0.55566406f, -0.40966797f, -0.25634766f, -0.08081055f, -0.01586914f, -0.0053710938f, -0.09667969f, -0.12231445f, -0.03466797f, -0.11303711f, -0.2902832f, - -1.2324219f, -0.42993164f, -0.30273438f, -0.8486328f, -0.9147949f, -0.7001953f, 0.03955078f, 0.7734375f, 0.99438477f, 0.46484375f, 0.13891602f, 0.11425781f, 0.41381836f, 0.7363281f, 0.6113281f, 0.14208984f, - 3.2854004f, 4.0998535f, 3.8623047f, 2.496582f, 1.4880371f, -0.044189453f, -0.55981445f, -1.1950684f, -1.519043f, -1.6992188f, -1.7475586f, -1.7741699f, -1.7507324f, -1.697998f, -1.6628418f, -1.5812988f, - -0.28393555f, 0.36254883f, 0.7150879f, 1.1523438f, 1.5422363f, 1.6831055f, 0.8269043f, -0.0107421875f, -0.48364258f, -0.6828613f, -0.78930664f, -0.6608887f, -0.6298828f, -0.8183594f, -0.8984375f, -1.0241699f, - 2.4472656f, 3.3598633f, 2.1152344f, 0.58740234f, 0.088134766f, 0.080566406f, 0.12768555f, -0.83447266f, -0.66308594f, 0.3178711f, -0.046875f, -1.7287598f, -1.8405762f, -1.4956055f, -1.1696777f, -1.3449707f, - 0.053955078f, -0.54907227f, -0.64941406f, -0.40527344f, -0.1496582f, -0.067871094f, -0.1328125f, -0.15991211f, 0.044677734f, 0.25585938f, 0.31835938f, 0.16113281f, 0.25756836f, 0.36523438f, 0.30444336f, 0.3527832f, - 0.20654297f, 1.2531738f, 1.6928711f, 2.6262207f, 2.7858887f, 2.2766113f, 1.0957031f, 0.32495117f, -0.79711914f, -1.7229004f, -2.0270996f, -1.2214355f, -1.1369629f, -2.0170898f, -1.7719727f, -1.5671387f, - 2.3149414f, 2.991455f, 1.5952148f, -0.14819336f, -0.6477051f, -0.16430664f, 0.07470703f, -0.28759766f, -0.4309082f, -0.782959f, -0.9194336f, -0.9182129f, -0.76708984f, -0.43164062f, -0.51586914f, -0.96240234f, - -0.13427734f, 0.3479004f, 0.4909668f, 0.038330078f, -0.26342773f, -0.3449707f, -0.41430664f, -0.3930664f, -0.16748047f, 0.009521484f, 0.1977539f, 0.0703125f, 0.20703125f, 0.43969727f, 0.24658203f, -0.33032227f, - -2.4680176f, -2.8671875f, -1.8813477f, 0.0925293f, 2.0136719f, 1.6013184f, 0.009277344f, -0.20214844f, 0.53344727f, 1.6809082f, 0.20605469f, 0.18408203f, 1.1643066f, 0.7697754f, -0.21728516f, -0.6196289f, - 3.2966309f, 3.043457f, 1.8188477f, 0.35595703f, -0.5317383f, -1.1340332f, -1.4089355f, -1.5368652f, -1.5805664f, -1.4577637f, -1.1005859f, -0.7077637f, 0.3149414f, 0.13671875f, 0.09887695f, 0.39257812f, - 1.1394043f, 2.0166016f, 1.6103516f, 0.43041992f, 0.8642578f, 1.6750488f, 0.87231445f, -0.23657227f, -1.2756348f, -1.3154297f, -1.0163574f, -0.611084f, -0.8654785f, -0.96191406f, -0.888916f, -1.4370117f, - 1.2382812f, 2.4553223f, 2.6896973f, 1.0947266f, 0.8881836f, 0.6599121f, 0.5114746f, 0.54296875f, 0.5046387f, -0.7314453f, -1.0595703f, -1.0734863f, -1.7263184f, -1.8920898f, -1.9853516f, -2.1169434f, - 1.7275391f, 1.0910645f, 0.24316406f, -1.076416f, -1.8234863f, -2.0952148f, -1.9289551f, -1.7150879f, -1.1884766f, -0.40429688f, 0.6279297f, 1.0185547f, 1.0893555f, 1.3093262f, 1.5356445f, 1.5893555f, - 2.8112793f, 3.1445312f, 2.5549316f, 0.8642578f, 0.45751953f, 1.5227051f, 1.6352539f, 0.92749023f, -0.56347656f, -1.8974609f, -2.1052246f, -2.085205f, -1.9211426f, -1.7441406f, -1.8710938f, -1.7302246f, - 0.46118164f, 0.93188477f, 0.859375f, 0.25732422f, -0.083496094f, -0.11010742f, -0.5197754f, -0.7607422f, -0.90966797f, -1.2976074f, -1.0537109f, -0.685791f, 0.013183594f, 0.83984375f, 1.1577148f, 0.9003906f, - 3.130371f, 1.8466797f, 0.7558594f, -0.33569336f, -0.7277832f, -0.85498047f, -0.7219238f, -0.6804199f, -0.5666504f, -0.50097656f, -0.49169922f, -0.2824707f, -0.16015625f, -0.3659668f, -0.2529297f, 0.20898438f, - -1.7817383f, -0.7636719f, -0.35620117f, -0.9194336f, -0.89990234f, -0.30371094f, 0.16333008f, 0.53393555f, 1.2219238f, 1.6164551f, 1.0964355f, 0.36914062f, 0.19091797f, 0.19116211f, -0.06689453f, -0.2919922f, - 2.9470215f, 2.9702148f, 2.4978027f, 1.8425293f, 1.1940918f, 0.48754883f, 0.040771484f, -0.4560547f, -0.71777344f, -1.255127f, -1.7084961f, -1.8168945f, -1.6584473f, -1.5026855f, -1.380127f, -1.4846191f, - -0.42797852f, 0.39672852f, 1.0322266f, 0.8232422f, 0.57055664f, 0.99194336f, 1.0778809f, 0.47460938f, 0.11987305f, -0.65625f, -1.3706055f, -1.3859863f, -0.93652344f, -0.296875f, -0.060302734f, -0.35253906f, - 3.0546875f, 1.5651855f, 0.72753906f, 0.024658203f, -0.087646484f, -0.13623047f, -0.22338867f, -0.051513672f, -0.01977539f, -0.13867188f, -0.29052734f, -0.4897461f, -0.6779785f, -0.89501953f, -1.0483398f, -1.3132324f, - -2.329834f, -1.6538086f, -1.5170898f, -1.8430176f, -1.7233887f, -0.94091797f, -0.39746094f, 0.51293945f, 1.3725586f, 1.703125f, 1.6044922f, 1.3227539f, 1.2766113f, 1.1901855f, 0.91308594f, 0.5095215f, - 2.1574707f, 3.0603027f, 2.765625f, 1.7712402f, 0.6225586f, -0.6166992f, -1.060791f, -1.5693359f, -1.4384766f, -1.7651367f, -1.7729492f, -1.0949707f, -0.46020508f, -0.0690918f, -0.05444336f, -0.47509766f, - 2.2287598f, 2.074707f, 1.065918f, 0.068603516f, -0.88061523f, -1.3867188f, -1.3818359f, -1.2768555f, -0.8725586f, -0.45751953f, -0.083984375f, -0.022460938f, 0.36108398f, 0.47192383f, 0.12597656f, -0.03466797f, - 1.2832031f, 2.3029785f, 1.6501465f, -0.19360352f, -0.94384766f, -0.11206055f, 1.2709961f, 1.0712891f, 0.9008789f, -0.6833496f, -1.9458008f, -1.3894043f, -0.7553711f, -0.17016602f, -0.6489258f, -1.637207f, - -0.5410156f, -1.4377441f, -0.87109375f, 0.72143555f, 2.3781738f, 1.8154297f, 0.05834961f, -0.24487305f, 0.27124023f, 1.1665039f, -0.2692871f, -0.24609375f, 0.4802246f, -0.34033203f, -1.2138672f, -1.7270508f, - 2.6340332f, 1.8164062f, 0.6784668f, -0.16235352f, -0.64208984f, -0.7529297f, -0.32080078f, 0.12548828f, 0.14257812f, -0.51123047f, -1.1225586f, -1.2424316f, -0.41625977f, -0.21459961f, -0.12768555f, 0.115722656f, - 1.6694336f, 1.4055176f, 1.2404785f, 1.4047852f, 1.1928711f, 0.6352539f, 0.19091797f, 0.040527344f, -0.056884766f, -0.5456543f, -0.94018555f, -1.1928711f, -1.1975098f, -1.208252f, -1.2277832f, -1.4104004f, - 0.92211914f, 2.1171875f, 1.9343262f, 0.67529297f, 0.21362305f, 0.7409668f, 0.51538086f, 0.0625f, -0.16113281f, -0.91918945f, -1.6809082f, -1.9360352f, -1.3974609f, -0.3359375f, 0.015625f, -0.7668457f, - 0.25463867f, 0.27246094f, -0.6647949f, -1.6083984f, -1.6931152f, -1.6413574f, -1.2963867f, 0.03149414f, 1.244873f, 0.9958496f, 0.88183594f, 0.7229004f, 0.6281738f, 1.152832f, 0.7297363f, -0.010498047f, - 0.27026367f, 1.5710449f, 2.415039f, 2.5617676f, 2.4665527f, 2.0825195f, 1.2067871f, 1.4360352f, 1.3601074f, -0.64990234f, -2.3432617f, -2.7763672f, -2.7404785f, -2.4682617f, -2.0534668f, -2.338623f, - -1.222168f, -0.23828125f, 0.42578125f, 0.41064453f, 0.033203125f, -0.22485352f, -0.31201172f, -0.5358887f, -0.5847168f, -0.4008789f, 0.018066406f, 0.2524414f, 0.36035156f, 0.55249023f, 0.7241211f, 0.74121094f, - 1.2573242f, 1.1115723f, 0.8808594f, 0.30810547f, -0.3330078f, -0.22290039f, 0.3894043f, 0.5810547f, 0.515625f, -0.11450195f, -0.8071289f, -0.9470215f, -0.68603516f, -0.69140625f, -0.68188477f, -0.5600586f, - -0.8679199f, -0.78100586f, -0.484375f, -0.22045898f, 0.21899414f, 0.6074219f, 0.4650879f, 0.6303711f, 0.52783203f, 0.1328125f, 0.10913086f, 0.28027344f, 0.15795898f, -0.02734375f, -0.22827148f, -0.52075195f, - 4.7766113f, 4.218994f, 2.694336f, 1.4052734f, 0.46484375f, 0.12695312f, -0.52441406f, -1.1826172f, -1.3425293f, -1.4343262f, -1.5407715f, -1.5932617f, -1.5834961f, -1.5500488f, -1.4814453f, -1.4541016f, - -1.1142578f, 0.16772461f, 1.0881348f, 0.9880371f, 0.6081543f, 0.39868164f, 0.22387695f, 0.01953125f, 0.011230469f, 0.06982422f, -0.13208008f, -0.43896484f, -0.5744629f, -0.34423828f, -0.4321289f, -0.5390625f, - 2.583496f, 2.133545f, 1.5522461f, 1.1113281f, 1.237793f, 1.3144531f, 0.93115234f, 0.35742188f, -0.20263672f, -0.76342773f, -1.1687012f, -1.4487305f, -1.6181641f, -1.8156738f, -2.0007324f, -2.203125f, - -2.0124512f, -1.4799805f, -1.4538574f, -1.4958496f, -1.1079102f, -0.4272461f, -0.17285156f, 0.080322266f, 0.3112793f, 0.5344238f, 0.6477051f, 0.64208984f, 1.0615234f, 1.8166504f, 1.7543945f, 1.3015137f, - 0.86035156f, 1.9960938f, 2.592041f, 2.7302246f, 2.2209473f, 1.1103516f, 0.720459f, -0.033691406f, -0.48901367f, -1.1772461f, -2.2160645f, -2.621338f, -2.5187988f, -1.5297852f, -0.41210938f, -1.2324219f, - -0.0390625f, 0.7182617f, 1.293457f, 1.6416016f, 1.7243652f, 0.44335938f, -0.36767578f, -0.62646484f, -0.14038086f, -0.39379883f, -1.5004883f, -1.2729492f, -0.65112305f, -0.21801758f, -0.15991211f, -0.45117188f, - 0.4506836f, 1.1796875f, 1.0358887f, 0.4663086f, 0.12597656f, -0.20898438f, -0.2524414f, -0.18115234f, -0.17993164f, -0.23266602f, -0.12768555f, -0.010009766f, -0.23925781f, -0.46972656f, -0.58251953f, -0.7739258f, - -3.7177734f, -3.4355469f, -1.828125f, 0.23046875f, 1.5246582f, 1.4841309f, 0.20214844f, -0.1538086f, 0.41015625f, 1.4714355f, 0.095214844f, 0.12524414f, 1.3300781f, 1.3466797f, 0.51538086f, 0.40014648f, - 4.776123f, 2.9377441f, 1.6135254f, 0.27954102f, -0.32666016f, -0.5793457f, -0.78466797f, -0.77001953f, -0.76538086f, -0.8562012f, -0.86694336f, -0.8532715f, -0.77905273f, -0.9621582f, -1.0119629f, -1.0510254f, - -0.8840332f, -0.5324707f, 0.2368164f, 2.0664062f, 2.5444336f, 1.9240723f, 1.4997559f, 1.230957f, 0.736084f, 0.2121582f, -0.61987305f, -0.9506836f, -1.2260742f, -1.7910156f, -2.0410156f, -2.4060059f, - 1.1203613f, 2.241455f, 1.5061035f, 0.26416016f, 0.083496094f, 0.087646484f, 0.00390625f, 0.03100586f, 0.08154297f, -0.39648438f, -0.56689453f, -0.62158203f, -0.7219238f, -0.796875f, -0.9807129f, -1.3356934f, - 0.8803711f, -0.5605469f, -0.89404297f, -1.1616211f, -0.9255371f, -1.3374023f, -1.1962891f, -1.2824707f, -1.3156738f, -1.2546387f, -1.0393066f, -0.041015625f, 1.5158691f, 1.6071777f, 2.4050293f, 4.5998535f, - 2.1367188f, 3.0183105f, 2.89917f, 2.105713f, 1.6914062f, 1.2595215f, 1.072998f, 0.5095215f, 0.26293945f, -0.62719727f, -1.6728516f, -2.331543f, -2.5375977f, -2.6152344f, -2.5966797f, -2.5751953f, - 0.45410156f, 0.56274414f, -0.091552734f, -0.82177734f, -0.8930664f, -0.40722656f, 0.024902344f, 0.008056641f, -0.09692383f, -0.19360352f, -0.25634766f, -0.25048828f, 0.14941406f, 0.73461914f, 0.7668457f, 0.31030273f, - 0.8791504f, 1.3742676f, 0.6760254f, -0.22192383f, -0.8535156f, -1.0957031f, -1.0690918f, -1.1728516f, -0.9848633f, -0.6647949f, -0.11669922f, 0.06738281f, 0.6196289f, 1.0905762f, 0.9074707f, 0.5654297f, - -0.26635742f, -0.29956055f, -0.8881836f, -1.2294922f, -0.69311523f, 0.011230469f, 0.5498047f, 0.9824219f, 1.184082f, 1.0895996f, 0.5878906f, 0.06738281f, -0.08911133f, -0.05029297f, -0.27319336f, -0.68359375f, - 3.256836f, 3.5593262f, 2.2746582f, 1.1318359f, 0.3149414f, -0.02368164f, 0.27172852f, -0.19335938f, -0.48779297f, -0.9663086f, -0.9187012f, -1.0222168f, -1.512207f, -1.6816406f, -1.8964844f, -2.1069336f, - -0.057617188f, -0.45092773f, -0.9638672f, -0.72143555f, 0.20703125f, 1.4692383f, 1.921875f, 1.6833496f, 1.3933105f, 0.6699219f, 0.17333984f, -0.43798828f, -0.9772949f, -1.1477051f, -1.3552246f, -1.4057617f, -}; - -const float ivas_sns_cdbk_tcx10_stage2[ 32 * 16 ] = -{ - 0.30615234f, 0.48828125f, -0.02709961f, -0.47680664f, -0.5300293f, -0.25463867f, -0.13305664f, -0.14941406f, -0.14819336f, 0.08666992f, 0.28833008f, 0.27514648f, 0.099365234f, -0.017578125f, 0.033203125f, 0.15893555f, - 0.40942383f, -0.044189453f, -0.088378906f, 0.38720703f, 0.5151367f, 0.42236328f, 0.34960938f, 0.2680664f, 0.037597656f, -0.19970703f, -0.31054688f, -0.32617188f, -0.38452148f, -0.38085938f, -0.38598633f, -0.2692871f, - -0.16040039f, -0.37548828f, -0.41479492f, -0.1237793f, 0.25708008f, 0.29589844f, 0.045410156f, -0.04345703f, -0.11450195f, -0.2019043f, 0.032470703f, 0.5847168f, 1.074707f, 0.3178711f, -0.43847656f, -0.73535156f, - -0.72021484f, 0.0859375f, 0.36450195f, 0.07739258f, -0.03857422f, -0.020263672f, 0.2277832f, 0.23657227f, -0.061523438f, -0.6010742f, -0.5341797f, -0.014160156f, 0.3154297f, 0.35327148f, 0.27368164f, 0.05517578f, - 0.17041016f, -0.1340332f, -0.17480469f, -0.16430664f, -0.15039062f, -0.16210938f, 0.20776367f, 0.78881836f, 0.8288574f, 0.2783203f, -0.099609375f, -0.26513672f, -0.29541016f, -0.31860352f, -0.3034668f, -0.20629883f, - 0.66967773f, 0.6286621f, 0.5107422f, 0.36791992f, 0.0949707f, -0.26904297f, -0.43603516f, -0.5292969f, -0.50219727f, -0.28881836f, -0.08081055f, 0.07861328f, -0.040771484f, -0.15014648f, -0.076416016f, 0.022705078f, - -0.14648438f, -0.46923828f, -0.43554688f, -0.11254883f, 0.021728516f, -0.06274414f, -0.10620117f, -0.23876953f, -0.34277344f, -0.21069336f, 0.010009766f, 0.26293945f, 0.36938477f, 0.4560547f, 0.5004883f, 0.5041504f, - -0.6381836f, -0.37841797f, -0.12036133f, 0.46875f, 0.6027832f, 0.40478516f, 0.3227539f, 0.2175293f, 0.029296875f, 0.009521484f, 0.091552734f, 0.014160156f, -0.19921875f, -0.27270508f, -0.3071289f, -0.24560547f, - 1.0043945f, 0.034423828f, -0.36523438f, -0.1628418f, -0.17504883f, -0.16357422f, 0.01977539f, 0.041992188f, -0.092041016f, -0.12548828f, -0.1381836f, -0.15527344f, -0.13720703f, -0.041992188f, 0.11791992f, 0.33789062f, - -0.29882812f, -0.056640625f, 0.22631836f, 0.35375977f, 0.40576172f, 0.053466797f, -0.33154297f, -0.58374023f, -0.59887695f, -0.13867188f, 0.35302734f, 0.4267578f, 0.12548828f, -0.052490234f, 0.022949219f, 0.09301758f, - -0.62060547f, -0.6557617f, -0.3918457f, -0.23461914f, -0.10498047f, -0.024169922f, 0.10473633f, 0.2746582f, 0.33642578f, 0.2866211f, 0.2980957f, 0.35498047f, 0.22167969f, 0.06298828f, 0.0036621094f, 0.087890625f, - -0.24169922f, 0.39331055f, 0.45410156f, -0.013671875f, -0.028076172f, 0.032226562f, -0.03491211f, 0.13916016f, 0.57006836f, 0.30078125f, -0.028564453f, -0.08300781f, -0.23266602f, -0.25585938f, -0.40356445f, -0.56762695f, - -0.25463867f, 0.20141602f, 0.13623047f, 0.021972656f, 0.018798828f, 0.35424805f, 0.30541992f, -0.043945312f, -0.032226562f, 0.4873047f, 0.2692871f, -0.57910156f, -0.86279297f, -0.46435547f, 0.21459961f, 0.2277832f, - 0.10083008f, -0.0048828125f, 0.15429688f, 0.58935547f, 0.58325195f, 0.15014648f, -0.1394043f, -0.30566406f, -0.39794922f, -0.42016602f, -0.4350586f, -0.49121094f, -0.24169922f, 0.07788086f, 0.3359375f, 0.4440918f, - -0.8688965f, -0.12646484f, 0.37768555f, 0.3232422f, -0.09790039f, -0.3017578f, -0.11328125f, 0.06982422f, 0.10864258f, 0.10180664f, 0.019042969f, -0.020751953f, -0.025878906f, 0.01977539f, 0.15820312f, 0.37646484f, - 0.04272461f, 0.020996094f, 0.31860352f, 0.23291016f, -0.33081055f, -0.80322266f, -0.73657227f, -0.34106445f, 0.011962891f, 0.27807617f, 0.45922852f, 0.49145508f, 0.3022461f, 0.14160156f, -0.017333984f, -0.07055664f, - -0.33544922f, 0.075683594f, -0.29907227f, -0.7363281f, -0.6525879f, -0.17797852f, 0.36279297f, 0.41870117f, 0.25170898f, 0.10473633f, 0.030273438f, -0.11254883f, 0.026855469f, 0.3503418f, 0.42382812f, 0.26904297f, - 0.3544922f, 0.67529297f, 0.38671875f, 0.009521484f, -0.040771484f, 0.08984375f, 0.2446289f, 0.16455078f, -0.17333984f, -0.4404297f, -0.46533203f, -0.40039062f, -0.28222656f, -0.1875f, -0.036865234f, 0.10205078f, - 0.4255371f, 0.16113281f, -0.11669922f, -0.16040039f, -0.14379883f, -0.2055664f, -0.0769043f, -0.055419922f, -0.19677734f, -0.44921875f, -0.3100586f, 0.10839844f, 0.5698242f, 0.5554199f, 0.11328125f, -0.21850586f, - -0.2980957f, -0.51660156f, -0.51000977f, -0.23046875f, 0.24658203f, 0.49682617f, 0.44580078f, 0.4501953f, 0.15917969f, -0.25317383f, -0.34301758f, -0.25146484f, -0.045898438f, 0.07885742f, 0.19018555f, 0.38085938f, - 0.32836914f, 0.41186523f, 0.40966797f, 0.23071289f, -0.27294922f, -0.7373047f, -0.33129883f, 0.2084961f, 0.29248047f, 0.023925781f, -0.22290039f, -0.2241211f, -0.10595703f, -0.109375f, -0.049072266f, 0.14770508f, - -0.17578125f, 0.35791016f, 0.71240234f, 0.55444336f, 0.37963867f, 0.25317383f, 0.0007324219f, -0.17456055f, -0.19921875f, -0.18261719f, -0.1381836f, -0.13476562f, -0.2697754f, -0.36523438f, -0.3803711f, -0.23730469f, - 0.18774414f, -0.33813477f, -0.40356445f, -0.16430664f, -0.35253906f, -0.5744629f, -0.40454102f, 0.03930664f, 0.28295898f, 0.24194336f, 0.11450195f, -0.011962891f, 0.15576172f, 0.29174805f, 0.39453125f, 0.5402832f, - 0.22485352f, -0.44970703f, -0.048583984f, 0.5905762f, 0.5395508f, -0.08300781f, -0.50219727f, -0.24121094f, 0.2331543f, 0.15942383f, -0.044433594f, 0.043701172f, -0.01928711f, -0.19824219f, -0.17260742f, -0.03173828f, - 0.86157227f, 0.21875f, 0.039794922f, 0.023925781f, -0.0925293f, -0.16845703f, -0.11669922f, 0.080322266f, 0.061279297f, 0.123535156f, 0.23388672f, 0.23022461f, 0.0056152344f, -0.33666992f, -0.5786133f, -0.5854492f, - 0.5175781f, 0.14453125f, -0.21850586f, -0.46777344f, 0.28515625f, 0.9855957f, 0.04296875f, -0.60424805f, -0.40625f, 0.07104492f, -0.0793457f, -0.111083984f, 0.017333984f, 0.021728516f, -0.1381836f, -0.060791016f, - 0.48950195f, -0.4885254f, -0.7644043f, -0.43164062f, -0.08203125f, 0.11401367f, 0.2331543f, 0.1472168f, 0.03540039f, 0.18945312f, 0.30737305f, 0.25976562f, 0.095458984f, -0.0234375f, -0.07739258f, -0.00390625f, - -0.111816406f, 0.22485352f, 0.00048828125f, -0.32177734f, -0.1508789f, 0.43017578f, 0.7011719f, 0.35229492f, -0.12060547f, -0.23291016f, 0.15258789f, 0.19702148f, -0.064208984f, -0.21606445f, -0.3857422f, -0.4543457f, - -0.22290039f, -0.33740234f, 0.068359375f, 0.09277344f, 0.04638672f, 0.21899414f, -0.03564453f, 0.036621094f, 0.6125488f, 0.5058594f, -0.4128418f, -0.69140625f, -0.5534668f, 0.16235352f, 0.54418945f, -0.034179688f, - -0.013916016f, 0.41259766f, 0.28393555f, -0.13085938f, -0.35058594f, -0.3713379f, -0.2619629f, -0.2854004f, -0.36401367f, -0.41210938f, -0.30444336f, -0.16552734f, 0.076416016f, 0.40722656f, 0.72143555f, 0.75878906f, - -0.78149414f, 0.05517578f, 0.09863281f, -0.35083008f, -0.29174805f, 0.1352539f, 0.10620117f, -0.3515625f, -0.27514648f, 0.15917969f, 0.34326172f, 0.2626953f, 0.39916992f, 0.42089844f, 0.20947266f, -0.1394043f, - -0.20361328f, -0.21557617f, -0.16308594f, -0.041748047f, -0.111083984f, -0.057617188f, 0.0390625f, 0.013183594f, 0.17358398f, 0.74902344f, 0.9448242f, 0.4477539f, -0.09423828f, -0.32739258f, -0.50634766f, -0.6467285f, -}; - -const float ivas_sns_cdbk_tcx10_stage3[ 8 * 16 ] = -{ - 0.15209961f, -0.12768555f, 0.09375f, -0.083496094f, -0.25390625f, 0.12524414f, 0.2993164f, -0.09863281f, -0.34814453f, -0.2434082f, -0.11254883f, -0.060058594f, 0.032470703f, 0.15527344f, 0.23413086f, 0.2355957f, - -0.16235352f, -0.111083984f, -0.3173828f, -0.25634766f, 0.13842773f, 0.29858398f, 0.10498047f, 0.11743164f, 0.26611328f, 0.05444336f, -0.1459961f, -0.19238281f, 0.041748047f, 0.2097168f, 0.07421875f, -0.12011719f, - -0.05078125f, 0.14770508f, -0.1003418f, -0.32104492f, -0.17504883f, -0.18652344f, -0.27148438f, -0.07788086f, 0.0036621094f, -0.04296875f, 0.10131836f, 0.34985352f, 0.3083496f, 0.10107422f, 0.0769043f, 0.13696289f, - -0.19140625f, -0.030273438f, 0.22509766f, 0.079589844f, -0.27148438f, -0.19604492f, 0.27929688f, 0.3503418f, 0.10424805f, 0.0061035156f, 0.06542969f, 0.11669922f, 0.036865234f, -0.1303711f, -0.22705078f, -0.21655273f, - 0.26538086f, -0.20825195f, -0.25073242f, 0.119628906f, 0.27270508f, 0.17797852f, -0.0024414062f, -0.12768555f, -0.22802734f, 0.0075683594f, 0.2133789f, 0.19482422f, 0.045898438f, -0.1184082f, -0.17797852f, -0.18383789f, - 0.2565918f, 0.24658203f, 0.1015625f, -0.029296875f, -0.14355469f, -0.13989258f, -0.20751953f, -0.19677734f, 0.17504883f, 0.41601562f, 0.13085938f, -0.20532227f, -0.16235352f, 0.040771484f, -0.037353516f, -0.24511719f, - -0.0871582f, 0.022949219f, 0.00048828125f, 0.07397461f, 0.14379883f, 0.067871094f, 0.0036621094f, 0.1171875f, 0.087402344f, 0.0012207031f, -0.075927734f, -0.11352539f, -0.31420898f, -0.38916016f, -0.022949219f, 0.484375f, - -0.1821289f, 0.060058594f, 0.24780273f, 0.41674805f, 0.2890625f, -0.1472168f, -0.20581055f, -0.083984375f, -0.060302734f, -0.19921875f, -0.17651367f, -0.08984375f, 0.011230469f, 0.13110352f, 0.080078125f, -0.09106445f, -}; - -const float *const ivas_sns_cdbks_tcx10[SNS_MSVQ_NSTAGES_TCX10] = { ivas_sns_cdbk_tcx10_stage1, ivas_sns_cdbk_tcx10_stage2, ivas_sns_cdbk_tcx10_stage3}; -#endif const Word16 ivas_sns_cdbks_side_tcx20_levels[SNS_MSVQ_NSTAGES_SIDE] = { 32, 32 }; const Word16 ivas_sns_cdbks_side_tcx20_bits[SNS_MSVQ_NSTAGES_SIDE] = { 5, 5 }; const Word16 ivas_sns_cdbks_side_tcx10_levels[SNS_MSVQ_NSTAGES_SIDE] = { 32, 8 }; const Word16 ivas_sns_cdbks_side_tcx10_bits[SNS_MSVQ_NSTAGES_SIDE] = { 5, 3 }; -#ifndef IVAS_FLOAT_FIXED -const float ivas_sns_cdbks_side_tcx20_stage1[ 32 * 16 ] = -{ - -0.11376953f, -0.06591797f, 0.041992188f, 0.044677734f, 0.17871094f, -0.02758789f, -0.32592773f, -0.21069336f, -0.049072266f, 0.0126953125f, 0.012939453f, 0.015136719f, 0.08203125f, 0.12670898f, 0.12695312f, 0.15112305f, - -0.017089844f, 0.09326172f, 0.2355957f, 0.2241211f, 0.107421875f, 0.05029297f, 0.039794922f, -0.0073242188f, -0.048339844f, -0.0871582f, -0.08520508f, -0.12060547f, -0.111572266f, -0.10620117f, -0.08911133f, -0.078125f, - -0.26635742f, 0.27368164f, 0.4543457f, 0.1821289f, 0.6513672f, 0.18066406f, 0.14575195f, -0.008056641f, 0.2631836f, -0.045898438f, -0.52001953f, -0.1628418f, 0.038330078f, -0.31811523f, -0.4321289f, -0.43603516f, - -0.044189453f, -0.10449219f, -0.091796875f, -0.10620117f, -0.09423828f, 0.09326172f, 0.2697754f, 0.16577148f, 0.06201172f, 0.010986328f, 0.021728516f, -0.023925781f, -0.036621094f, -0.03930664f, -0.04345703f, -0.03930664f, - 0.4099121f, 0.06323242f, -0.021972656f, -0.014404297f, -0.013916016f, -0.018554688f, -0.052246094f, -0.051757812f, -0.03173828f, -0.03491211f, -0.02758789f, -0.05859375f, -0.045410156f, -0.042236328f, -0.038085938f, -0.021484375f, - 0.0024414062f, 0.030761719f, 0.020263672f, 0.013671875f, -0.009033203f, 0.012939453f, 0.009521484f, -0.030273438f, -0.048339844f, -0.022216797f, 0.011962891f, -0.017333984f, -0.011474609f, -0.0007324219f, 0.011962891f, 0.025634766f, - 0.17358398f, 0.22387695f, 0.19702148f, -0.019042969f, -0.27514648f, -0.5378418f, -0.30688477f, -0.03540039f, 0.0007324219f, -0.049560547f, 0.07519531f, 0.052246094f, 0.12670898f, 0.16308594f, 0.12133789f, 0.09033203f, - -0.32006836f, -0.29125977f, -0.24731445f, -0.17797852f, -0.140625f, -0.10595703f, -0.12670898f, -0.10864258f, -0.08618164f, -0.07421875f, 0.030517578f, 0.15917969f, 0.24975586f, 0.31518555f, 0.40893555f, 0.5151367f, - -0.49658203f, -0.033691406f, 0.083740234f, 0.04272461f, 0.03466797f, 0.053955078f, 0.03466797f, 0.02368164f, 0.037597656f, 0.03173828f, 0.028320312f, 0.00024414062f, 0.028564453f, 0.030761719f, 0.044189453f, 0.055419922f, - -0.040527344f, 0.022460938f, 0.009765625f, 0.036865234f, 0.055664062f, 0.046875f, 0.032470703f, 0.08105469f, 0.095703125f, 0.04296875f, -0.0087890625f, -0.064697266f, -0.057373047f, -0.04711914f, -0.09765625f, -0.107666016f, - 0.27148438f, 0.3696289f, 0.39672852f, 0.38427734f, 0.30151367f, 0.21655273f, 0.15551758f, 0.12133789f, -0.008056641f, -0.12792969f, -0.22973633f, -0.39111328f, -0.4465332f, -0.46826172f, -0.35986328f, -0.18530273f, - -0.3166504f, -0.2758789f, -0.22290039f, -0.1850586f, -0.15771484f, -0.1184082f, -0.04638672f, 0.032470703f, 0.10961914f, 0.16821289f, 0.20336914f, 0.1665039f, 0.20019531f, 0.19970703f, 0.14233398f, 0.1003418f, - -0.028076172f, -0.02734375f, -0.06665039f, -0.099365234f, -0.10522461f, -0.10546875f, -0.056884766f, 0.017333984f, 0.061523438f, 0.07836914f, 0.087890625f, 0.051513672f, 0.05419922f, 0.051757812f, 0.04272461f, 0.043945312f, - -0.14404297f, -0.3088379f, -0.07885742f, 0.053222656f, 0.064208984f, 0.032226562f, 0.057617188f, 0.05810547f, 0.05126953f, 0.041748047f, 0.053955078f, 0.015136719f, 0.028808594f, 0.033691406f, 0.0234375f, 0.018554688f, - 0.49609375f, 0.45263672f, 0.2915039f, 0.15649414f, 0.052246094f, 0.017578125f, -0.050048828f, -0.06640625f, -0.10839844f, -0.15063477f, -0.17138672f, -0.20532227f, -0.18432617f, -0.17553711f, -0.19213867f, -0.16235352f, - -0.0056152344f, -0.030761719f, -0.092285156f, -0.1262207f, -0.15917969f, -0.12011719f, -0.1105957f, -0.13354492f, -0.12915039f, -0.09863281f, 0.017578125f, 0.12866211f, 0.21850586f, 0.24853516f, 0.1875f, 0.20532227f, - -0.011230469f, -0.061035156f, -0.032226562f, 0.18139648f, 0.068359375f, -0.13916016f, -0.1015625f, 0.0017089844f, -0.004638672f, 0.009765625f, 0.03149414f, -0.0068359375f, 0.0043945312f, 0.023925781f, 0.017333984f, 0.018066406f, - -0.045166016f, -0.05493164f, -0.04296875f, 0.053710938f, 0.2121582f, 0.25195312f, 0.08911133f, -0.034179688f, -0.049560547f, -0.06225586f, -0.061523438f, -0.07836914f, -0.052490234f, -0.044189453f, -0.046142578f, -0.03540039f, - 0.08129883f, 0.20532227f, 0.04296875f, 0.11010742f, 0.3720703f, 0.4272461f, 0.31884766f, 0.19335938f, 0.015625f, -0.17895508f, -0.20214844f, -0.38330078f, -0.2487793f, -0.20581055f, -0.24560547f, -0.30297852f, - -0.40112305f, -0.2043457f, -0.048828125f, 0.018798828f, -0.080322266f, 0.016113281f, 0.13427734f, 0.2734375f, 0.3503418f, 0.35766602f, 0.19165039f, -0.056884766f, -0.11645508f, -0.1574707f, -0.14990234f, -0.12719727f, - 0.2763672f, 0.27905273f, 0.2241211f, 0.035888672f, -0.10253906f, -0.061523438f, -0.08544922f, -0.19848633f, -0.25634766f, -0.22729492f, -0.20019531f, -0.12548828f, -0.0026855469f, 0.08178711f, 0.14819336f, 0.21411133f, - -0.11425781f, -0.068603516f, 0.2446289f, -0.0031738281f, -0.04321289f, -0.033203125f, 0.024414062f, -0.0036621094f, -0.022460938f, 0.0017089844f, 0.018554688f, -0.014892578f, -0.010253906f, 0.0021972656f, 0.0068359375f, 0.015380859f, - 0.080322266f, 0.23852539f, 0.16894531f, 0.029052734f, -0.043701172f, -0.10571289f, -0.07788086f, -0.037109375f, -0.0063476562f, -0.025878906f, -0.036865234f, -0.06347656f, -0.04321289f, -0.03173828f, -0.032470703f, -0.012451172f, - -0.072265625f, -0.17602539f, -0.29736328f, -0.35253906f, -0.34814453f, -0.25732422f, -0.2097168f, -0.1850586f, -0.11230469f, -0.052978516f, 0.09643555f, 0.3071289f, 0.3930664f, 0.56689453f, 0.40625f, 0.2939453f, - -0.24194336f, -0.11010742f, -0.05102539f, 0.03930664f, -0.061523438f, -0.018554688f, 0.010986328f, 0.04296875f, -0.21557617f, -0.01928711f, 0.009277344f, 0.048095703f, 0.26342773f, 0.36791992f, 0.13232422f, -0.19604492f, - 0.16210938f, 0.16381836f, 0.14404297f, 0.1081543f, 0.08959961f, 0.11450195f, 0.11743164f, 0.11645508f, 0.13110352f, 0.11303711f, 0.021240234f, -0.15844727f, -0.21166992f, -0.27368164f, -0.33813477f, -0.29956055f, - -0.14624023f, 0.068603516f, 0.24731445f, 0.38916016f, 0.31860352f, 0.27416992f, 0.19165039f, 0.13793945f, 0.06958008f, -0.018798828f, -0.1159668f, -0.2849121f, -0.3581543f, -0.3803711f, -0.25952148f, -0.1328125f, - -0.64819336f, -0.5800781f, -0.15527344f, -0.07104492f, -0.08300781f, 0.009765625f, 0.10620117f, 0.10571289f, 0.13989258f, 0.12988281f, 0.1743164f, 0.18408203f, 0.09375f, 0.12524414f, 0.20678711f, 0.26220703f, - 0.07836914f, 0.16430664f, -0.014404297f, -0.20898438f, -0.08984375f, 0.04296875f, 0.06713867f, 0.0075683594f, -0.037109375f, -0.029296875f, -0.020019531f, -0.03173828f, 0.0036621094f, 0.016113281f, 0.015380859f, 0.035888672f, - -0.02368164f, -0.14282227f, -0.36645508f, -0.11279297f, 0.042236328f, 0.14086914f, 0.041503906f, 0.009277344f, 0.039794922f, 0.055419922f, 0.061523438f, 0.040771484f, 0.056152344f, 0.064208984f, 0.052490234f, 0.041503906f, - 0.23120117f, 0.21533203f, 0.16748047f, 0.15649414f, 0.1262207f, 0.10498047f, 0.08691406f, 0.020019531f, -0.03466797f, -0.12841797f, -0.18579102f, -0.29492188f, -0.2705078f, -0.17236328f, -0.06933594f, 0.04736328f, - -0.19580078f, -0.14624023f, -0.11303711f, -0.055908203f, -0.052001953f, -0.009033203f, 0.022949219f, -0.0068359375f, -0.032470703f, 0.0017089844f, 0.045410156f, 0.025146484f, 0.039794922f, 0.07543945f, 0.1574707f, 0.24267578f, -}; - -const float ivas_sns_cdbks_side_tcx20_stage2[ 32 * 16 ] = -{ - -0.013916016f, 0.0007324219f, 0.017089844f, 0.005859375f, 0.056152344f, -0.08178711f, -0.2927246f, 0.00390625f, 0.140625f, 0.03881836f, 0.010498047f, 0.038330078f, 0.042236328f, 0.020751953f, 0.005859375f, 0.0075683594f, - -0.07104492f, -0.10253906f, 0.038085938f, 0.091552734f, 0.118896484f, 0.13476562f, 0.05078125f, -0.111328125f, -0.13842773f, -0.20727539f, -0.25732422f, -0.15063477f, 0.032470703f, 0.08129883f, 0.17578125f, 0.31469727f, - 0.0715332f, 0.029052734f, 0.01953125f, 0.008056641f, 0.0234375f, 0.020751953f, 0.032226562f, 0.021972656f, 0.03466797f, 0.017822266f, -0.037841797f, -0.14038086f, -0.21679688f, -0.11035156f, 0.057617188f, 0.16845703f, - -0.1081543f, -0.02734375f, -0.08251953f, -0.08227539f, -0.07910156f, 0.049804688f, 0.10253906f, 0.23876953f, 0.25683594f, 0.03173828f, -0.15820312f, -0.14648438f, -0.008056641f, -0.00048828125f, -0.014404297f, 0.02734375f, - -0.022705078f, 0.028076172f, 0.14111328f, -0.06762695f, -0.07348633f, 0.16259766f, -0.0073242188f, -0.06567383f, -0.028564453f, -0.0107421875f, -0.023925781f, 0.0126953125f, -0.005859375f, -0.006591797f, -0.014160156f, -0.018066406f, - -0.09741211f, -0.092041016f, -0.061523438f, -0.011962891f, 0.006591797f, 0.041748047f, 0.008300781f, -0.017578125f, -0.08520508f, -0.12573242f, -0.06298828f, 0.13696289f, 0.25195312f, 0.15332031f, 0.001953125f, -0.04663086f, - -0.20239258f, 0.2705078f, 0.059326172f, 0.0041503906f, 0.022216797f, -0.009765625f, -0.026611328f, -0.02734375f, -0.032714844f, -0.016845703f, -0.025878906f, -0.0014648438f, -0.0075683594f, -0.009521484f, 0.004638672f, -0.0009765625f, - 0.064453125f, -0.26708984f, 0.122802734f, 0.025634766f, -0.0063476562f, 0.0043945312f, 0.008544922f, -0.0017089844f, 0.0061035156f, -0.007080078f, -0.018798828f, 0.011962891f, 0.008544922f, 0.010009766f, 0.020263672f, 0.018310547f, - -0.0007324219f, -0.037597656f, -0.036376953f, -0.015625f, 0.0056152344f, -0.0056152344f, -0.0029296875f, 0.032714844f, 0.047607422f, 0.019042969f, -0.010498047f, 0.017578125f, 0.0126953125f, 0.0043945312f, -0.013427734f, -0.016845703f, - 0.06933594f, 0.052978516f, 0.061035156f, 0.13378906f, 0.13427734f, 0.0053710938f, -0.099365234f, -0.18334961f, -0.21850586f, -0.083496094f, 0.020263672f, 0.05883789f, 0.013427734f, 0.011474609f, 0.01953125f, 0.0041503906f, - 0.0036621094f, -0.05053711f, -0.005126953f, 0.19091797f, -0.18798828f, -0.0546875f, 0.00048828125f, -0.021728516f, -0.001953125f, 0.0017089844f, 0.0041503906f, 0.024902344f, 0.022216797f, 0.02758789f, 0.02709961f, 0.01928711f, - 0.024658203f, -0.0041503906f, -0.026611328f, -0.0859375f, -0.06323242f, -0.068603516f, -0.07495117f, -0.050048828f, -0.061035156f, -0.0061035156f, 0.056396484f, 0.088378906f, 0.05883789f, 0.06738281f, 0.07763672f, 0.06738281f, - 0.13696289f, 0.08496094f, 0.07104492f, 0.046875f, 0.024658203f, 0.0048828125f, -0.0107421875f, -0.006591797f, 0.014160156f, -0.0073242188f, -0.041503906f, -0.02709961f, -0.041503906f, -0.060791016f, -0.09277344f, -0.095214844f, - -0.16772461f, 0.06665039f, 0.1821289f, 0.07397461f, -0.020019531f, 0.055419922f, 0.0390625f, -0.12011719f, -0.107910156f, 0.123291016f, 0.37939453f, 0.032714844f, -0.16137695f, -0.15234375f, -0.10546875f, -0.11743164f, - -0.013183594f, -0.011230469f, -0.037353516f, 0.0026855469f, -0.04638672f, -0.24438477f, 0.099853516f, 0.1105957f, 0.008544922f, 0.010253906f, 0.013183594f, 0.03857422f, 0.016601562f, 0.014892578f, 0.01928711f, 0.018066406f, - 0.044189453f, 0.07763672f, -0.03491211f, -0.18359375f, 0.15722656f, 0.061279297f, -0.029541016f, -0.018798828f, -0.023925781f, 0.0007324219f, -0.010498047f, 0.0087890625f, -0.0056152344f, -0.009277344f, -0.014892578f, -0.018798828f, - 0.13696289f, 0.011230469f, -0.033447266f, -0.017333984f, -0.07763672f, -0.122558594f, -0.076416016f, -0.017333984f, 0.14257812f, 0.21313477f, 0.14575195f, 0.032226562f, -0.083740234f, -0.12036133f, -0.076171875f, -0.057373047f, - 0.029541016f, -0.12231445f, -0.2475586f, 0.0949707f, 0.18896484f, 0.026123047f, 0.012939453f, 0.030029297f, 0.009033203f, -0.009277344f, -0.025634766f, 0.0087890625f, -0.0024414062f, -0.0017089844f, 0.0087890625f, -0.00024414062f, - -0.03857422f, -0.03881836f, -0.08886719f, -0.068847656f, 0.022216797f, 0.10229492f, 0.12841797f, 0.083984375f, 0.06567383f, 0.08178711f, 0.075927734f, 0.040039062f, -0.047851562f, -0.09448242f, -0.103515625f, -0.119140625f, - 0.009277344f, 0.046875f, 0.08178711f, 0.037597656f, 0.0063476562f, -0.038330078f, -0.01171875f, 0.28222656f, 0.027832031f, -0.25195312f, -0.12817383f, 0.01586914f, 0.011474609f, -0.014404297f, -0.044189453f, -0.030761719f, - 0.0637207f, 0.12426758f, 0.095458984f, -0.13378906f, -0.26293945f, -0.06323242f, 0.033203125f, 0.06591797f, 0.048583984f, 0.026367188f, 0.005859375f, 0.01977539f, -0.0029296875f, -0.005859375f, -0.0007324219f, -0.013183594f, - -0.016845703f, -0.052246094f, -0.057373047f, 0.008056641f, -0.01171875f, -0.068847656f, -0.0859375f, -0.016357422f, -0.012207031f, 0.046875f, 0.18164062f, 0.2692871f, 0.13476562f, -0.024414062f, -0.1274414f, -0.16723633f, - -0.021972656f, -0.053955078f, -0.022705078f, -0.00048828125f, 0.072021484f, 0.083496094f, 0.056640625f, -0.014892578f, 0.028320312f, 0.09399414f, 0.061279297f, -0.48779297f, -0.018554688f, 0.1550293f, 0.05859375f, 0.0107421875f, - 0.38476562f, -0.049316406f, -0.0793457f, -0.025146484f, -0.02319336f, -0.020751953f, 0.026855469f, -0.00048828125f, -0.052490234f, -0.033935547f, -0.04638672f, -0.0107421875f, -0.018066406f, -0.022216797f, -0.016113281f, -0.013427734f, - -0.23852539f, -0.064941406f, -0.018066406f, -0.0034179688f, 0.040283203f, 0.01928711f, 0.018310547f, 0.030761719f, 0.030029297f, 0.028564453f, 0.010253906f, 0.037109375f, 0.021484375f, 0.03491211f, 0.03515625f, 0.018798828f, - 0.03857422f, 0.028808594f, 0.025878906f, 0.04321289f, 0.03491211f, -0.021972656f, -0.03466797f, -0.01953125f, -0.02368164f, -0.095214844f, -0.13891602f, -0.032714844f, 0.013671875f, 0.05883789f, 0.064697266f, 0.057861328f, - -0.014892578f, 0.014892578f, 0.0126953125f, 0.045410156f, 0.0073242188f, 0.08300781f, 0.17797852f, 0.030761719f, -0.11743164f, -0.071777344f, -0.048095703f, -0.007080078f, -0.016113281f, -0.024414062f, -0.033203125f, -0.03881836f, - 0.0690918f, -0.049072266f, -0.23413086f, -0.3227539f, -0.15258789f, -0.028320312f, 0.05883789f, 0.055908203f, 0.08618164f, 0.08203125f, 0.052246094f, 0.0546875f, 0.022216797f, 0.07885742f, 0.13061523f, 0.095947266f, - -0.13452148f, -0.026855469f, 0.107177734f, 0.16040039f, 0.13305664f, 0.043701172f, 0.0087890625f, 0.020019531f, 0.040039062f, 0.017578125f, -0.030029297f, -0.024902344f, -0.067871094f, -0.08666992f, -0.076416016f, -0.083740234f, - -0.01953125f, -0.059814453f, -0.061279297f, 0.008056641f, 0.031982422f, 0.08203125f, -0.045166016f, -0.25561523f, -0.02758789f, 0.10522461f, 0.06274414f, 0.046875f, 0.029052734f, 0.03173828f, 0.04248047f, 0.028564453f, - -0.050048828f, 0.084472656f, 0.27172852f, 0.053222656f, -0.063964844f, -0.12988281f, -0.07299805f, -0.051757812f, -0.036621094f, -0.0014648438f, -0.0009765625f, 0.021728516f, 0.009033203f, -0.0007324219f, -0.013183594f, -0.018554688f, - 0.0847168f, 0.18920898f, -0.1796875f, -0.01586914f, -0.017822266f, -0.021728516f, 0.006591797f, -0.0075683594f, -0.019042969f, -0.0107421875f, -0.0146484375f, 0.014160156f, 0.0034179688f, -0.0056152344f, -0.0036621094f, -0.0017089844f, -}; - -const float *const ivas_sns_cdbks_side_tcx20[SNS_MSVQ_NSTAGES_SIDE] = { ivas_sns_cdbks_side_tcx20_stage1, ivas_sns_cdbks_side_tcx20_stage2 }; - -const float ivas_sns_cdbks_side_tcx10_stage1[ 32 * 16 ] = -{ - -0.23950195f, -0.203125f, -0.17822266f, -0.1315918f, -0.123291016f, -0.095947266f, -0.106933594f, -0.16552734f, -0.14941406f, -0.075683594f, 0.026367188f, 0.1015625f, 0.17041016f, 0.2770996f, 0.37890625f, 0.5148926f, - 0.12890625f, 0.20825195f, 0.22924805f, 0.2998047f, 0.24267578f, 0.14477539f, 0.07861328f, 0.024658203f, -0.076171875f, -0.18432617f, -0.26660156f, -0.33251953f, -0.2758789f, -0.13964844f, -0.030517578f, -0.05126953f, - -0.14160156f, -0.13305664f, -0.111816406f, -0.037353516f, -0.038085938f, 0.051513672f, 0.07348633f, 0.0073242188f, 0.044921875f, -0.0234375f, -0.123291016f, -0.01171875f, 0.28100586f, 0.24194336f, 0.0703125f, -0.1496582f, - 0.053466797f, 0.122802734f, 0.1394043f, 0.099853516f, 0.078125f, 0.018554688f, 0.034423828f, 0.103759766f, 0.06542969f, -0.030273438f, -0.09887695f, -0.099609375f, -0.060058594f, -0.119628906f, -0.18237305f, -0.12451172f, - -0.04345703f, -0.033447266f, -0.06665039f, -0.06518555f, -0.048828125f, -0.11645508f, -0.2055664f, -0.20263672f, -0.15576172f, -0.0009765625f, 0.103759766f, 0.21191406f, 0.24414062f, 0.14526367f, 0.09863281f, 0.13476562f, - 0.05810547f, 0.22558594f, 0.10180664f, -0.08618164f, -0.07470703f, 0.052246094f, 0.052490234f, -0.042236328f, -0.07055664f, -0.037109375f, -0.024169922f, -0.03149414f, -0.031982422f, -0.040527344f, -0.038085938f, -0.013183594f, - 0.020019531f, -0.033447266f, -0.14550781f, -0.42089844f, -0.19604492f, 0.038085938f, 0.026611328f, 0.016357422f, 0.038330078f, 0.057861328f, 0.06762695f, 0.08081055f, 0.091308594f, 0.10180664f, 0.11987305f, 0.13720703f, - 0.13671875f, 0.30566406f, 0.4716797f, 0.54785156f, 0.39819336f, 0.27075195f, 0.17602539f, 0.092041016f, -0.013183594f, -0.17163086f, -0.3166504f, -0.42138672f, -0.53271484f, -0.45898438f, -0.27416992f, -0.21044922f, - -0.38989258f, -0.37597656f, -0.3696289f, -0.2915039f, -0.26098633f, -0.19921875f, -0.15136719f, -0.09057617f, -0.040771484f, 0.13354492f, 0.30126953f, 0.3857422f, 0.40649414f, 0.31103516f, 0.30004883f, 0.3317871f, - 0.35107422f, 0.5229492f, 0.41870117f, 0.14355469f, -0.037597656f, -0.13134766f, -0.18383789f, -0.18066406f, -0.15771484f, -0.17480469f, -0.17041016f, -0.15209961f, -0.08251953f, -0.06616211f, -0.064453125f, -0.03466797f, - -0.66845703f, -0.31030273f, -0.21435547f, -0.11987305f, -0.103271484f, 0.080322266f, 0.21801758f, 0.20874023f, 0.1015625f, 0.032958984f, -0.043945312f, 0.078125f, 0.07324219f, 0.07763672f, 0.20727539f, 0.38208008f, - -0.17163086f, -0.1171875f, -0.03491211f, 0.060302734f, 0.1809082f, 0.33666992f, 0.3955078f, 0.27172852f, 0.12841797f, -0.036865234f, -0.17163086f, -0.21289062f, -0.20800781f, -0.17333984f, -0.125f, -0.12231445f, - -0.1875f, -0.3996582f, -0.017822266f, 0.10058594f, 0.057617188f, 0.028320312f, 0.05493164f, 0.04272461f, 0.041503906f, 0.046875f, 0.041748047f, 0.0546875f, 0.06201172f, 0.03149414f, 0.013427734f, 0.028564453f, - 0.34814453f, 0.234375f, -0.05493164f, -0.1821289f, -0.2878418f, -0.31176758f, -0.28100586f, -0.19824219f, -0.15673828f, -0.08251953f, 0.030273438f, 0.13647461f, 0.2211914f, 0.20776367f, 0.16455078f, 0.21240234f, - -0.057861328f, -0.10571289f, 0.08984375f, 0.30444336f, 0.18945312f, 0.14770508f, 0.09082031f, -0.020996094f, -0.053466797f, -0.044433594f, -0.07128906f, -0.08886719f, -0.079833984f, -0.0859375f, -0.09790039f, -0.1159668f, - 0.17626953f, 0.26049805f, 0.2175293f, 0.21020508f, 0.20141602f, 0.27734375f, 0.21606445f, -0.0012207031f, -0.010986328f, -0.11694336f, -0.2331543f, -0.15844727f, -0.08081055f, -0.08886719f, -0.35717773f, -0.5114746f, - -0.38134766f, -0.4855957f, -0.35986328f, -0.16137695f, -0.026123047f, 0.009033203f, -0.0126953125f, 0.040283203f, 0.095458984f, 0.15454102f, 0.16333008f, 0.19140625f, 0.21142578f, 0.203125f, 0.17993164f, 0.1784668f, - 0.05834961f, 0.06298828f, 0.041015625f, 0.031982422f, 0.07910156f, 0.06713867f, -0.028808594f, -0.05053711f, -0.024902344f, -0.17822266f, -0.3227539f, -0.1665039f, -0.0053710938f, 0.05517578f, 0.119384766f, 0.26123047f, - 0.047851562f, -0.042236328f, -0.24145508f, -0.038330078f, 0.052734375f, 0.068603516f, 0.05810547f, 0.011962891f, -0.013916016f, -0.010986328f, 0.020019531f, 0.02758789f, 0.03100586f, 0.02319336f, 0.014160156f, -0.008056641f, - -0.0036621094f, 0.0014648438f, 0.013671875f, 0.0f, 0.021240234f, 0.033447266f, 0.014892578f, 0.004638672f, 0.056884766f, 0.13427734f, 0.08691406f, -0.005126953f, -0.072753906f, -0.095214844f, -0.10961914f, -0.08105469f, - -0.15966797f, -0.110839844f, -0.13012695f, -0.071777344f, -0.064941406f, -0.056396484f, -0.046142578f, -0.012207031f, 0.048583984f, 0.036865234f, -0.00048828125f, -0.024414062f, -0.012939453f, 0.092041016f, 0.21435547f, 0.29858398f, - 0.55981445f, 0.15820312f, -0.012451172f, -0.04321289f, -0.05810547f, -0.014892578f, -0.021484375f, -0.038330078f, -0.033691406f, -0.037597656f, -0.0690918f, -0.076416016f, -0.0637207f, -0.064697266f, -0.0847168f, -0.099853516f, - -0.039794922f, -0.032714844f, -0.030273438f, -0.051513672f, -0.03564453f, -0.041015625f, -0.0390625f, 0.017822266f, 0.051513672f, 0.013916016f, -0.044677734f, -0.061035156f, -0.012207031f, 0.07299805f, 0.123291016f, 0.10888672f, - 0.45117188f, 0.46704102f, 0.38916016f, 0.23242188f, 0.16430664f, 0.1809082f, 0.20922852f, 0.033935547f, -0.13720703f, -0.2758789f, -0.39941406f, -0.3840332f, -0.31054688f, -0.28466797f, -0.28955078f, -0.04663086f, - -0.088134766f, -0.22973633f, -0.4194336f, -0.49487305f, -0.4038086f, -0.27734375f, -0.2253418f, -0.1315918f, -0.044677734f, 0.12036133f, 0.24951172f, 0.31103516f, 0.52124023f, 0.484375f, 0.32739258f, 0.30126953f, - 0.33203125f, 0.29614258f, 0.1796875f, 0.06689453f, 0.100097656f, 0.13867188f, 0.03491211f, -0.032714844f, -0.12060547f, -0.2097168f, -0.29638672f, -0.20898438f, -0.08227539f, -0.16821289f, -0.16015625f, 0.13134766f, - -0.44189453f, 0.017578125f, 0.07397461f, 0.033447266f, 0.044189453f, 0.04711914f, 0.030273438f, 0.040771484f, 0.041015625f, 0.022949219f, 0.004638672f, 0.018798828f, 0.028564453f, 0.018798828f, -0.00048828125f, 0.020751953f, - -0.36621094f, -0.23388672f, -0.08178711f, -0.015136719f, -0.049072266f, 0.07910156f, 0.23120117f, 0.28320312f, 0.38378906f, 0.29223633f, 0.099365234f, -0.0087890625f, -0.09814453f, -0.16455078f, -0.18945312f, -0.16186523f, - -0.17041016f, -0.18359375f, -0.19018555f, -0.15820312f, -0.20239258f, -0.21875f, -0.13110352f, 0.010009766f, 0.12011719f, 0.25097656f, 0.25024414f, 0.2055664f, 0.14526367f, 0.13964844f, 0.103759766f, 0.029052734f, - 0.06982422f, 0.072265625f, 0.18261719f, 0.025390625f, -0.2475586f, -0.2861328f, -0.111572266f, -0.037109375f, 0.0036621094f, 0.031982422f, 0.043945312f, 0.057373047f, 0.078125f, 0.072021484f, 0.028564453f, 0.016357422f, - 0.07836914f, 0.13549805f, 0.1743164f, 0.15478516f, 0.12573242f, -0.009521484f, -0.1508789f, -0.1965332f, -0.19604492f, -0.103027344f, -0.045898438f, -0.026123047f, 0.020263672f, 0.023925781f, 0.013183594f, 0.0014648438f, - 0.25341797f, 0.22558594f, 0.2241211f, 0.17114258f, 0.18164062f, 0.16894531f, 0.16503906f, 0.20239258f, 0.17041016f, 0.025878906f, -0.16625977f, -0.24121094f, -0.31982422f, -0.4008789f, -0.38256836f, -0.27783203f, -} -; - -const float ivas_sns_cdbks_side_tcx10_stage2[ 8 * 16 ] = -{ - -0.13989258f, -0.024658203f, 0.12670898f, 0.027832031f, 0.06689453f, 0.12817383f, 0.07495117f, -0.01977539f, -0.05834961f, -0.07543945f, -0.06542969f, -0.0546875f, -0.04345703f, -0.0063476562f, 0.034179688f, 0.029541016f, - -0.06713867f, -0.11450195f, -0.09790039f, -0.091308594f, -0.12182617f, -0.010009766f, 0.10986328f, 0.115478516f, 0.060058594f, 0.038085938f, 0.020507812f, 0.017333984f, 0.024169922f, 0.028320312f, 0.038330078f, 0.05053711f, - 0.05517578f, 0.030517578f, 0.0390625f, 0.05810547f, 0.021484375f, 0.032470703f, 0.040039062f, -0.0087890625f, -0.055908203f, -0.023925781f, 0.037109375f, 0.06347656f, 0.02709961f, -0.07373047f, -0.1274414f, -0.115234375f, - 0.11206055f, 0.2006836f, 0.045410156f, -0.10839844f, -0.1418457f, -0.08520508f, -0.032470703f, 0.033935547f, 0.044189453f, 0.006591797f, -0.012451172f, -0.018554688f, -0.013427734f, -0.010498047f, -0.0078125f, -0.012207031f, - -0.041748047f, -0.07373047f, -0.14819336f, 0.021240234f, 0.16015625f, 0.119140625f, 0.055908203f, 0.08081055f, 0.12548828f, 0.05419922f, -0.030761719f, -0.040771484f, -0.060302734f, -0.07128906f, -0.07763672f, -0.072509766f, - -0.07446289f, -0.041259766f, -0.040527344f, -0.068603516f, -0.042236328f, -0.03857422f, -0.05126953f, -0.08886719f, -0.055419922f, 0.036865234f, 0.09033203f, 0.06689453f, 0.08911133f, 0.13110352f, 0.08129883f, 0.0053710938f, - -0.052978516f, 0.033691406f, 0.16015625f, 0.171875f, 0.024658203f, -0.1328125f, -0.1394043f, -0.041992188f, 0.0068359375f, 0.020263672f, 0.008544922f, 0.0014648438f, -0.011474609f, -0.030273438f, -0.022460938f, 0.00390625f, - 0.20898438f, -0.011230469f, -0.08496094f, -0.010986328f, 0.032958984f, -0.013183594f, -0.057861328f, -0.07104492f, -0.06689453f, -0.056396484f, -0.047851562f, -0.03491211f, -0.011962891f, 0.032714844f, 0.08178711f, 0.11035156f, -}; - -const float *const ivas_sns_cdbks_side_tcx10[SNS_MSVQ_NSTAGES_SIDE] = { ivas_sns_cdbks_side_tcx10_stage1, ivas_sns_cdbks_side_tcx10_stage2 }; -#endif const Word16 sns_1st_cdbk[2][2][8 * 32] = { @@ -7052,62 +3240,3 @@ const Word16 ivas_param_upmx_mx_qmap[33] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; - -const ACPL_QUANT_TABLE ivas_mc_paramupmix_alpha_quant_table = -{ - 33, /* nquant */ - 16, /* offset */ - { -2.000000e+000f, -1.809375e+000f, -1.637500e+000f, -1.484375e+000f, -1.350000e+000f, -1.234375e+000f, -1.137500e+000f, -1.059375e+000f, -1.000000e+000f, -9.406250e-001f, - -8.625000e-001f, -7.656250e-001f, -6.500000e-001f, -5.156250e-001f, -3.625000e-001f, -1.906250e-001f, +0.000000e+000f, +1.906250e-001f, +3.625000e-001f, +5.156250e-001f, - +6.500000e-001f, +7.656250e-001f, +8.625000e-001f, +9.406250e-001f, +1.000000e+000f, +1.059375e+000f, +1.137500e+000f, +1.234375e+000f, +1.350000e+000f, +1.484375e+000f, - +1.637500e+000f, +1.809375e+000f, +2.000000e+000f } /* data */ -}; - -const ACPL_QUANT_TABLE ivas_mc_paramupmix_beta_quant_table[9] = -{ - { - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +2.375000e-001f, +5.500000e-001f, +9.375000e-001f, +1.400000e+000f, +1.937500e+000f, +2.550000e+000f, +3.237500e+000f, +4.000000e+000f } /* data */ - }, - { /* Beta #2 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +2.035449e-001f, +4.713672e-001f, +8.034668e-001f, +1.199844e+000f, +1.660498e+000f, +2.185430e+000f, +2.774639e+000f, +3.428125e+000f } /* data */ - }, - { /* Beta #3 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +1.729297e-001f, +4.004688e-001f, +6.826172e-001f, +1.019375e+000f, +1.410742e+000f, +1.856719e+000f, +2.357305e+000f, +2.912500e+000f } /* data */ - }, - { /* Beta #4 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +1.456543e-001f, +3.373047e-001f, +5.749512e-001f, +8.585938e-001f, +1.188232e+000f, +1.563867e+000f, +1.985498e+000f, +2.453125e+000f } /* data */ - }, - { /* Beta #5 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +1.217188e-001f, +2.818750e-001f, +4.804688e-001f, +7.175000e-001f, +9.929688e-001f, +1.306875e+000f, +1.659219e+000f, +2.050000e+000f } /* data */ - }, - { /* Beta #6 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +1.011230e-001f, +2.341797e-001f, +3.991699e-001f, +5.960938e-001f, +8.249512e-001f, +1.085742e+000f, +1.378467e+000f, +1.703125e+000f } /* data */ - }, - { /* Beta #7 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +8.386719e-002f, +1.942188e-001f, +3.310547e-001f, +4.943750e-001f, +6.841797e-001f, +9.004688e-001f, +1.143242e+000f, +1.412500e+000f } /* data */ - }, - { /* Beta #8 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +6.995117e-002f, +1.619922e-001f, +2.761230e-001f, +4.123438e-001f, +5.706543e-001f, +7.510547e-001f, +9.535449e-001f, +1.178125e+000f } /* data */ - }, - { /* Beta #9 */ - 9, /* nquant */ - 0, /* offset */ - { +0.000000e+000f, +5.937500e-002f, +1.375000e-001f, +2.343750e-001f, +3.500000e-001f, +4.843750e-001f, +6.375000e-001f, +8.093750e-001f, +1.000000e+000f } /* data */ - } -}; diff --git a/lib_com/ivas_rom_com.h b/lib_com/ivas_rom_com.h index c57fafae3..662dc81a9 100644 --- a/lib_com/ivas_rom_com.h +++ b/lib_com/ivas_rom_com.h @@ -56,15 +56,6 @@ extern const Word16 dft_band_limits_erb8[]; extern const Word16 dft_band_ipd[3][4]; extern const Word16 dft_band_res_cod[3][4]; -extern const float dft_res_gains_q[][2]; -#ifndef IVAS_FLOAT_FIXED -extern const float dft_res_cod_alpha[STEREO_DFT_BAND_MAX]; - -extern const float dft_trigo_12k8[STEREO_DFT_N_12k8_ENC / 4 + 1]; -extern const float dft_trigo_32k[STEREO_DFT_N_32k_ENC / 4 + 1]; -extern const float dft_trigo_48k[STEREO_DFT_N_MAX_ENC / 4 + 1]; -#endif - /* Golomb-Rice encoding tables */ extern const Word16 dft_maps_rpg[]; extern const Word16 dft_code_itd[]; @@ -89,27 +80,9 @@ extern const UWord16 ECSQ_tab_inverse[1 + ECSQ_SEGMENT_SIZE]; *----------------------------------------------------------------------------------*/ extern const float ica_sincInterp4[]; extern const float ica_sincInterp2[]; -#ifndef IVAS_FLOAT_FIXED -extern const float ica_sincInterp6[]; - -/*----------------------------------------------------------------------------------* - * Stereo IC-BWE ROM tables - *----------------------------------------------------------------------------------*/ - -extern const float icbwe_gsMapping_tbl[]; -extern const float icbwe_gsMappingDFT_tbl[]; - -/*----------------------------------------------------------------------------------* - * TD Stereo ROM tables - *----------------------------------------------------------------------------------*/ - -extern const float tdm_ratio_tabl[]; -extern const float tdm_den_ratio_tabl[]; -#endif extern const Word16 tdm_bit_allc_tbl[5][6]; /* LSFs Intra-frame prediction tables */ -#ifdef IVAS_FLOAT_FIXED extern const Word16 tdm_LSF_MEAN_RE_USE_OUT_fx[M]; extern const Word16 tdm_LSF_MEAN_RE_USE_IN_fx[M]; extern const Word16 tdm_LSF_MEAN_RE_USE_fx[M]; @@ -125,20 +98,7 @@ extern const Word16 tdm_LSF_MEAN_PRED_QNT_OUT_fx[M]; extern const Word16 tdm_LSF_MEAN_PRED_QNT_IN_fx[M]; extern const Word16 tdm_LSF_MEAN_PRED_QNT_fx[M]; extern const Word16 tdm_PRED_QNT_fixed_beta_prd_diag_3_fx[15 + 16 + 15]; -#endif - -#ifndef IVAS_FLOAT_FIXED -extern const float tdm_LSF_MEAN_RE_USE_OUT[M]; -extern const float tdm_LSF_MEAN_RE_USE_IN[M]; -extern const float tdm_LSF_MEAN_RE_USE[M]; - -extern const float tdm_Beta_Q1bit_re_use_13k2[2]; -extern const float tdm_Beta_Q1bit_re_use_16k4[2]; -extern const float tdm_Beta_Q1bit_re_use_24k4_32k[2]; -extern const float tdm_Beta_Q1bit_re_use_48k[2]; -extern const float tdm_RE_USE_adaptive_beta_prd_diag_3[15 + 16 + 15]; -#endif extern const float tdm_LSF_MEAN_PRED_QNT_OUT[M]; extern const float tdm_LSF_MEAN_PRED_QNT_IN[M]; @@ -157,17 +117,10 @@ extern const SpectrumWarping sw25600Hz[]; /* PsychLPC */ extern const SpectrumWarping sw32000Hz[]; /* PsychLPC */ extern const MDCTStereoBands_config mdctStereoBands_32000_640[]; -#ifndef IVAS_FLOAT_FIXED -extern const float nf_tw_smoothing_coeffs[N_LTP_GAIN_MEMS]; -#endif /*----------------------------------------------------------------------------------* * Stereo DTX ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float dft_cng_coh_pred[][STEREO_DFT_COH_PRED_COEFFS]; -extern const float dft_cng_alpha_bits[STEREO_DFT_N_COH_ALPHA_STEPS][STEREO_DFT_N_COH_ALPHA_LEVELS]; -#endif extern const Word16 dft_cng_coh_pred_fx[][STEREO_DFT_COH_PRED_COEFFS]; extern const Word16 dft_cng_coh_u2i[9]; extern const Word16 dft_cng_coh_i2u[9]; @@ -177,26 +130,13 @@ extern const Word16 dft_cng_coh_alpha_start[STEREO_DFT_N_COH_ALPHA_STEPS - 1]; /*----------------------------------------------------------------------------------* * DirAC ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float diffuseness_reconstructions[DIRAC_DIFFUSE_LEVELS]; -extern const float diffuseness_thresholds[DIRAC_DIFFUSE_LEVELS + 1]; -#endif extern const Word16 DirAC_band_grouping_12[12 + 1]; extern const Word16 DirAC_band_grouping_6[6 + 1]; extern const Word16 DirAC_band_grouping_5[5 + 1]; extern const Word16 DirAC_block_grouping[MAX_PARAM_SPATIAL_SUBFRAMES + 1]; extern const Word16 DirAC_block_grouping_5ms_MDFT[MAX_PARAM_SPATIAL_SUBFRAMES + 1]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 c_weights_fx[DIRAC_NO_FB_BANDS_MAX]; // Q30 -#else -extern const float c_weights[DIRAC_NO_FB_BANDS_MAX]; -#endif - -extern const float w_nm[NUM_ANA_SECTORS][9]; -extern const float x_nm[NUM_ANA_SECTORS][9]; -extern const float y_nm[NUM_ANA_SECTORS][9]; -extern const float z_nm[NUM_ANA_SECTORS][9]; /*------------------------------------------------------------------------------------------* * SPAR ROM tables @@ -215,9 +155,6 @@ extern const Word16 HOA_keep_ind[IVAS_SPAR_MAX_FB_IN_CHAN]; extern const Word16 HOA_keep_ind_spar[IVAS_SPAR_MAX_CH]; extern const Word16 HOA_keep_ind_spar512[IVAS_SPAR_MAX_CH]; -#ifndef IVAS_FLOAT_FIXED -extern const float dtx_pd_real_min_max[2]; -#endif extern const Word16 dtx_pd_real_q_levels[3][3]; extern const Word16 dtx_pr_real_q_levels[3][3]; extern const Word16 pr_pr_idx_pairs[3][3][2]; @@ -254,10 +191,6 @@ extern const Word16 param_mc_start_bin_per_band_10[10]; extern const Word16 param_mc_active_bins_per_band_10[10]; extern const Word16 Param_MC_index[MAX_CICP_CHANNELS]; extern const PARAM_MC_CONF ivas_param_mc_conf[PARAM_MC_NUM_CONFIGS]; -#ifndef IVAS_FLOAT_FIXED -extern const float ivas_param_mc_quant_ild_5d1_48[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; -extern const float ivas_param_mc_quant_icc[PARAM_MC_SZ_ICC_QUANTIZER]; -#endif extern const UWord16 ivas_param_mc_cum_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS + 1]; extern const UWord16 ivas_param_mc_sym_freq_ild_cicp6_48_16bits[PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; extern const UWord16 ivas_param_mc_cum_freq_ild_delta_cicp6_48_16bits[2 * PARAM_MC_SZ_ILD_QUANTIZER_4BITS]; @@ -303,13 +236,6 @@ extern const Word16 bits_direction_masa[DIRAC_DIFFUSE_LEVELS]; extern const Word16 no_theta_masa[NO_SPHERICAL_GRIDS - 2]; extern const Word16 no_phi_masa[NO_SPHERICAL_GRIDS][MAX_NO_THETA]; -extern const float delta_theta_masa[NO_SPHERICAL_GRIDS - 2]; - -#ifndef IVAS_FLOAT_FIXED -extern const float azimuth_cb[8]; -extern const float coherence_cb0_masa[DIRAC_DIFFUSE_LEVELS * 2 * MASA_NO_CV_COH]; -extern const float coherence_cb1_masa[MASA_NO_CV_COH1 * MASA_MAXIMUM_CODING_SUBBANDS]; /* 25 */ -#endif extern const Word16 len_cb_dct0_masa[DIRAC_DIFFUSE_LEVELS]; extern const UWord8 sur_coherence_cb_masa[MASA_NO_CB_SUR_COH * MASA_MAX_NO_CV_SUR_COH]; extern const Word16 idx_cb_sur_coh_masa[MASA_NO_CV_COH]; @@ -334,54 +260,14 @@ extern const UWord8 masa_joined_nbands[]; extern const UWord8 masa_twodir_bands[]; extern const UWord8 masa_twodir_bands_joined[]; -#ifndef IVAS_FLOAT_FIXED -extern const float diffuseness_reconstructions_hr[HR_MASA_ER_LEVELS]; -extern const float diffuseness_thresholds_hr[HR_MASA_ER_LEVELS + 1]; -#endif extern const Word64 diffuseness_reconstructions_hr_fx[HR_MASA_ER_LEVELS]; extern const Word32 diffuseness_thresholds_hr_fx[HR_MASA_ER_LEVELS + 1]; -/* Multi-channel input and output setups */ -#ifndef IVAS_FLOAT_FIXED -extern const float ls_azimuth_CICP2[2]; -extern const float ls_elevation_CICP2[2]; -extern const float ls_azimuth_CICP6[5]; -extern const float ls_elevation_CICP6[5]; -extern const float ls_azimuth_CICP12[7]; -extern const float ls_elevation_CICP12[7]; -extern const float ls_azimuth_CICP14[7]; -extern const float ls_elevation_CICP14[7]; -extern const float ls_azimuth_CICP16[9]; -extern const float ls_elevation_CICP16[9]; -extern const float ls_azimuth_CICP19[11]; -extern const float ls_elevation_CICP19[11]; - -extern const float shoebox_sin_cos_tbl[11][2]; -#endif -extern const float cb_azi_chan[]; - -#ifndef IVAS_FLOAT_FIXED -extern const float McMASA_LFEGain_vectors[64]; -#endif - /*----------------------------------------------------------------------------------* * MASA and ISM (OMASA) combined format ROM tables *----------------------------------------------------------------------------------*/ extern const Word32 sep_object_brate[][MAX_NUM_OBJECTS]; -#ifndef IVAS_FLOAT_FIXED -extern const float dct4[]; -extern const float dct5[]; -extern const float dct8[]; -extern const float dct12[]; - -/*----------------------------------------------------------------------------------* - * ISM ROM tables - *----------------------------------------------------------------------------------*/ - -extern const float ism_azimuth_borders[4]; -extern const float ism_elevation_borders[4]; -#endif /*----------------------------------------------------------------------------------* * Param ISM ROM tables @@ -393,18 +279,6 @@ extern const Word16 Param_ISM_band_grouping[MAX_PARAM_ISM_NBANDS + 1]; * LFE coding ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float ivas_lpf_4_butter_16k_sos[IVAS_BIQUAD_FILT_LEN << 2]; -extern const float ivas_lpf_4_butter_32k_sos[IVAS_BIQUAD_FILT_LEN << 2]; -extern const float ivas_lpf_4_butter_48k_sos[IVAS_BIQUAD_FILT_LEN << 2]; -extern const float ivas_lpf_2_butter_16k[IVAS_BIQUAD_FILT_LEN << 1]; -extern const float ivas_lpf_2_butter_32k[IVAS_BIQUAD_FILT_LEN << 1]; -extern const float ivas_lpf_2_butter_48k[IVAS_BIQUAD_FILT_LEN << 1]; - -extern const float ivas_lfe_window_coeff_48k[IVAS_LFE_FADE_LEN_48K]; -extern const float ivas_lfe_window_coeff_32k[IVAS_LFE_FADE_LEN_32K]; -extern const float ivas_lfe_window_coeff_16k[IVAS_LFE_FADE_LEN_16K]; -#endif extern const Word16 ivas_lfe_num_ele_in_coder_models[2][4]; extern const Word16 ivas_lfe_log2_num_ele_in_coder_models_fx[2][4]; @@ -413,31 +287,6 @@ extern const Word16 ivas_lfe_min_shift_tbl[IVAS_LFE_NUM_COEFFS_IN_SUBGRP]; extern const ivas_lfe_freq_models ivas_str_lfe_freq_models; extern const Word16 ivas_lfe_lpf_delay_Q15[2]; -#ifndef IVAS_FLOAT_FIXED -extern const float ivas_lfe_lpf_delay[2]; -extern const float hamm_lfe_plc[LFE_PLC_LENANA / 2]; -extern const float ivas_sin_twiddle_480[IVAS_480_PT_LEN >> 1]; -extern const float ivas_cos_twiddle_480[IVAS_480_PT_LEN >> 1]; -extern const float ivas_sin_twiddle_320[IVAS_320_PT_LEN >> 1]; -extern const float ivas_cos_twiddle_320[IVAS_320_PT_LEN >> 1]; -extern const float ivas_sin_twiddle_160[IVAS_160_PT_LEN >> 1]; -extern const float ivas_cos_twiddle_160[IVAS_160_PT_LEN >> 1]; -extern const float ivas_sin_twiddle_80[IVAS_80_PT_LEN >> 1]; -extern const float ivas_cos_twiddle_80[IVAS_80_PT_LEN >> 1]; -#endif - -/*------------------------------------------------------------------------------------------* - * MDFT/iMDFT ROM tables - *------------------------------------------------------------------------------------------*/ - -extern const float ivas_mdft_coeff_cos_twid_240[IVAS_240_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_160[IVAS_160_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_120[IVAS_120_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_80[IVAS_80_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_40[IVAS_40_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_960[IVAS_960_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_640[IVAS_640_PT_LEN + 1]; -extern const float ivas_mdft_coeff_cos_twid_320[IVAS_320_PT_LEN + 1]; extern const Word16 dirac_gains_P_idx[16]; extern const float dirac_gains_norm_term[9]; extern const float dirac_gains_Pnm[91][9]; @@ -448,29 +297,12 @@ extern const float dirac_gains_trg_term[181][2]; *------------------------------------------------------------------------------------------*/ extern const Word32 ivas_fb_fcs_12band_1ms_fx[IVAS_FB_BANDS_12]; -#ifndef IVAS_FLOAT_FIXED -extern const float ivas_fb_fcs_12band_1ms[IVAS_FB_BANDS_12]; - -extern const float ivas_fb_fr_12band_1ms_re[IVAS_FB_12_1MS_LEN]; -extern const float ivas_fb_fr_12band_1ms_im[IVAS_FB_12_1MS_LEN]; -#endif extern const Word16 ivas_fb_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; extern const Word16 ivas_fb_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; extern const Word16 ivas_fb_abs_bins_per_band_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; extern const Word16 ivas_fb_abs_bins_start_offset_12band_1ms[IVAS_NUM_SUPPORTED_FS][IVAS_FB_BANDS_12]; -#ifndef IVAS_FLOAT_FIXED -extern const float ivas_fb_cf_4ms_48k[IVAS_FB_4MS_48K_SAMP]; -extern const float ivas_fb_cf_1ms_48k[IVAS_FB_1MS_48K_SAMP]; -extern const float ivas_fb_cf_4ms_32k[IVAS_FB_4MS_32K_SAMP]; -extern const float ivas_fb_cf_1ms_32k[IVAS_FB_1MS_32K_SAMP]; -extern const float ivas_fb_cf_4ms_16k[IVAS_FB_4MS_16K_SAMP]; -extern const float ivas_fb_cf_1ms_16k[IVAS_FB_1MS_16K_SAMP]; - -extern const float ivas_fb_resp_cheby_ramp_32del[IVAS_FB_1MS_32K_SAMP + 1]; -extern const float ivas_fb_resp_cheby_ramp_16del[IVAS_FB_1MS_16K_SAMP + 1]; -#endif extern const Word16 ivas_num_active_bands[FB - WB + 1]; @@ -484,20 +316,12 @@ extern const Word16 ivas_sns_cdbks_tcx20_bits[]; extern const Word16 ivas_sns_cdbks_tcx10_levels[]; extern const Word16 ivas_sns_cdbks_tcx10_bits[]; -#ifndef IVAS_FLOAT_FIXED -extern const float *const ivas_sns_cdbks_tcx20[]; -extern const float *const ivas_sns_cdbks_tcx10[]; -#endif extern const Word16 ivas_sns_cdbks_side_tcx20_levels[]; extern const Word16 ivas_sns_cdbks_side_tcx20_bits[]; extern const Word16 ivas_sns_cdbks_side_tcx10_levels[]; extern const Word16 ivas_sns_cdbks_side_tcx10_bits[]; -#ifndef IVAS_FLOAT_FIXED -extern const float *const ivas_sns_cdbks_side_tcx20[]; -extern const float *const ivas_sns_cdbks_side_tcx10[]; -#endif /* means and codebooks for the split VQ in the 2-stage SNS VQ */ extern const Word16 sns_1st_cdbk[2][2][8 * 32]; @@ -511,8 +335,6 @@ extern const Word16 sns_1st_means_32k[2][16]; *-----------------------------------------------------------------------*/ extern const Word16 ivas_param_upmx_mx_qmap[33]; -extern const ACPL_QUANT_TABLE ivas_mc_paramupmix_alpha_quant_table; -extern const ACPL_QUANT_TABLE ivas_mc_paramupmix_beta_quant_table[9]; /* IVAS_ROM_COM_H */ #endif diff --git a/lib_com/ivas_rom_com_fx.c b/lib_com/ivas_rom_com_fx.c index dc2e0ad4e..ac4736561 100644 --- a/lib_com/ivas_rom_com_fx.c +++ b/lib_com/ivas_rom_com_fx.c @@ -585,7 +585,6 @@ const Word16 pow_10_q11[128] = { 13540, 13786, 14036, 14291, 14550, 14815, 15084, 15357, 15636, 15920, 16209, 16503, 16803, 17108, 17418, 17734, 18056, 18384, 18718, 19058, 19404, 19756, 20114 }; -#ifdef IVAS_FLOAT_FIXED // Q12 const Word16 icbwe_gsMapping_tbl_fx[16] = { -8192, -5527, -3935, -2907, -2289, -1824, -1404, -1035, -692, -404, -286, -204, -81, 0, 163, 327 }; @@ -602,7 +601,6 @@ const Word16 icbwe_gsMappingDFT_tbl_fx[128] = { const Word32 pow_10_q23[14] = { 2364231, 2652711, 3339565, 4204263, 5803499, 8011059, 8388608, 6818517, 7222539, 5292854, 4204263, 6977341, 7919357, 8388608 }; -#endif /* clang-format on */ // Q15 @@ -1210,7 +1208,6 @@ const Word16 ivas_tan_panning_gain_dirac_tbl_fx[601] = { SHC( 0x7fff ), }; -#ifdef IVAS_FLOAT_FIXED const Masa_Diffuseness_Ratios masa_diffuse_ratios[DIRAC_DIFFUSE_LEVELS][DIRAC_DIFFUSE_LEVELS] = { { { 0, 0, 0, 0 }, @@ -1293,7 +1290,6 @@ const Masa_Diffuseness_Ratios masa_diffuse_ratios[DIRAC_DIFFUSE_LEVELS][DIRAC_DI { 6, 6, 7, 7 }, } }; -#endif /*----------------------------------------------------------------------------------* * Stereo ICA ROM tables @@ -3640,7 +3636,6 @@ const Word16 *const ivas_sns_cdbks_side_tcx10_fx[SNS_MSVQ_NSTAGES_SIDE] = { /*----------------------------------------------------------------------* * MC ParamUpmix ROM tables *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED const ACPL_QUANT_TABLE_FX ivas_mc_paramupmix_alpha_quant_table_fx = { 33, /* nquant */ 16, /* offset */ @@ -3707,7 +3702,6 @@ const ACPL_QUANT_TABLE_FX ivas_mc_paramupmix_beta_quant_table_fx[9] = { { 0, 15938355, 36909876, 62914560, 93952408, 130023424, 171127600, 217264944, 268435456 } /* data in Q28 */ } }; -#endif /* Q Factor is 31*/ const Word32 ivas_han_win_48k_fx[L_FRAME32k] = { 5760, 22976, 51712, 91904, 143552, 206784, 281408, 367552, 465216, diff --git a/lib_com/ivas_rom_com_fx.h b/lib_com/ivas_rom_com_fx.h index 2460cd383..88bbaabbc 100644 --- a/lib_com/ivas_rom_com_fx.h +++ b/lib_com/ivas_rom_com_fx.h @@ -49,7 +49,6 @@ extern const Word16 ivas_sin_twiddle_160_fx[IVAS_160_PT_LEN >> 1]; extern const Word16 ivas_cos_twiddle_160_fx[IVAS_160_PT_LEN >> 1]; extern const Word16 ivas_sin_twiddle_80_fx[IVAS_80_PT_LEN >> 1]; extern const Word16 ivas_cos_twiddle_80_fx[IVAS_80_PT_LEN >> 1]; -#ifdef IVAS_FLOAT_FIXED extern const Word16 nf_tw_smoothing_coeffs_fx[N_LTP_GAIN_MEMS]; extern const Word32 dft_res_gains_q_fx[][2]; extern const Word16 dft_res_cod_alpha_fx[STEREO_DFT_BAND_MAX]; @@ -291,7 +290,5 @@ extern const Word32 ivas_sine_frame_len_640_del_16_fx[289]; extern const Word32 ivas_fb_fr_12band_1ms_re_fx[IVAS_FB_12_1MS_LEN]; extern const Word32 ivas_fb_fr_12band_1ms_im_fx[IVAS_FB_12_1MS_LEN]; -#endif - #endif diff --git a/lib_com/ivas_sba_config.c b/lib_com/ivas_sba_config.c index 8aa12792c..370e8caa4 100644 --- a/lib_com/ivas_sba_config.c +++ b/lib_com/ivas_sba_config.c @@ -50,71 +50,6 @@ * Configure SBA coding *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_sba_config( - const int32_t sba_total_brate, /* i : SBA total bitrate */ - int16_t sba_order, /* i : Ambisonic (SBA) order */ - int16_t nb_channels, /* i : Number of ambisonic channels */ - int16_t *nchan_transport, /* o : number of transport channels */ - const int16_t sba_planar, /* i : SBA Planar flag */ - int16_t *nSCE, /* o : number of SCEs */ - int16_t *nCPE, /* o : number of CPEs */ - int16_t *element_mode /* o : element mode of the core coder */ -) -{ - if ( ( sba_order < 0 ) && ( nb_channels < 0 ) ) - { - assert( 0 && "Either order or number of channels must be positive" ); - } - else if ( sba_order < 0 ) - { - sba_order = ivas_sba_get_order( nb_channels, sba_planar ); - } - else if ( nb_channels < 0 ) - { - nb_channels = ivas_sba_get_nchan( sba_order, sba_planar ); - } - else - { - if ( sba_planar ) - { - assert( ( ( 2 * sba_order ) + 1 == nb_channels ) && "Order and number of channels do not correspond!" ); - } - else - { - assert( ( ( sba_order + 1 ) * ( sba_order + 1 ) == nb_channels ) && "Order and number of channels do not correspond!" ); - } - } - - if ( nchan_transport != NULL ) - { - *nchan_transport = ivas_get_sba_num_TCs( sba_total_brate, sba_order ); - } - - /* Configure core coder number of elements*/ - if ( nchan_transport != NULL && nSCE != NULL && nCPE != NULL ) - { - if ( *nchan_transport == 1 ) - { - *nSCE = 1; - *nCPE = 0; - *element_mode = IVAS_SCE; - } - else - { - *nSCE = 0; - *nCPE = *nchan_transport / 2; - if ( 2 * ( *nCPE ) != *nchan_transport ) - { - ( *nCPE )++; - } - *element_mode = IVAS_CPE_MDCT; - } - } - - return; -} -#else void ivas_sba_config_fx( const Word32 sba_total_brate, /* i : SBA total bitrate */ Word16 sba_order, /* i : Ambisonic (SBA) order */ @@ -189,7 +124,6 @@ void ivas_sba_config_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -199,30 +133,6 @@ void ivas_sba_config_fx( *-------------------------------------------------------------------*/ /*! r: Ambisonic (SBA) order */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_sba_get_order( - const int16_t nb_channels, /* i : Number of ambisonic channels */ - const int16_t sba_planar /* i : SBA Planar flag */ -) -{ - int16_t sba_order; - - if ( sba_planar ) - { - sba_order = ( nb_channels - 1 ) / 2; - assert( ( 2 * sba_order + 1 == nb_channels ) && "Number of channels not supported in Planar SBA!" ); - } - else - { - sba_order = (int16_t) sqrtf( (float) nb_channels ) - 1; - assert( ( ( sba_order + 1 ) * ( sba_order + 1 ) == nb_channels ) && "Number of channels not supported in SBA!" ); - } - - assert( ( sba_order <= 3 ) && "Error: SBA order must be <= 3!" ); - - return ( sba_order ); -} -#else Word16 ivas_sba_get_order_fx( const Word16 nb_channels, /* i : Number of ambisonic channels */ const Word16 sba_planar /* i : SBA Planar flag */ @@ -265,7 +175,6 @@ Word16 ivas_sba_get_order_fx( return ( sba_order ); } -#endif /*-------------------------------------------------------------------* @@ -275,25 +184,6 @@ Word16 ivas_sba_get_order_fx( *-------------------------------------------------------------------*/ /*! r: Ambisonic (SBA) order used for analysis and coding */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_sba_get_analysis_order( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - int16_t sba_analysis_order; - - sba_analysis_order = sba_order; - - if ( ivas_total_brate < SBA_MIN_BRATE_HOA ) - { - /* Hard coding the sba_analysis_order as 1 as higher not supported below SBA_MIN_BRATE_HOA bitrate */ - sba_analysis_order = SBA_FOA_ORDER; - } - - return sba_analysis_order; -} -#else Word16 ivas_sba_get_analysis_order_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 sba_order /* i : Ambisonic (SBA) order */ @@ -313,7 +203,6 @@ Word16 ivas_sba_get_analysis_order_fx( return sba_analysis_order; } -#endif /*-------------------------------------------------------------------* @@ -323,26 +212,6 @@ Word16 ivas_sba_get_analysis_order_fx( *-------------------------------------------------------------------*/ /*! r: number of Ambisonic channels */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_sba_get_nchan( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int16_t sba_planar /* i : SBA planar flag */ -) -{ - int16_t nb_channels; - - if ( sba_planar ) - { - nb_channels = ( 2 * sba_order ) + 1; - } - else - { - nb_channels = ( sba_order + 1 ) * ( sba_order + 1 ); - } - - return ( nb_channels ); -} -#else Word16 ivas_sba_get_nchan_fx( const Word16 sba_order, /* i : Ambisonic (SBA) order */ const Word16 sba_planar /* i : SBA planar flag */ @@ -361,7 +230,6 @@ Word16 ivas_sba_get_nchan_fx( return ( nb_channels ); } -#endif /*-------------------------------------------------------------------* @@ -371,7 +239,6 @@ Word16 ivas_sba_get_nchan_fx( *-------------------------------------------------------------------*/ /*! r: number of ambisonics metadata channels */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_sba_get_nchan_metadata_fx( const Word16 sba_order, /* i : Ambisonic (SBA) order */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ @@ -401,35 +268,6 @@ Word16 ivas_sba_get_nchan_metadata_fx( return ( nb_channels ); } -#else -int16_t ivas_sba_get_nchan_metadata( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t nb_channels; - - if ( sba_order == SBA_FOA_ORDER ) - { - nb_channels = FOA_CHANNELS; - } - else - { - if ( ivas_total_brate >= IVAS_512k ) - { - nb_channels = IVAS_SPAR_MAX_CH; - nb_channels = min( nb_channels, ( sba_order + 1 ) * ( sba_order + 1 ) ); - } - else - { - /* FOA + planar HOA */ - nb_channels = FOA_CHANNELS + 2 * ( sba_order - 1 ); - } - } - - return ( nb_channels ); -} -#endif /*-------------------------------------------------------------------* * ivas_sba_get_spar_hoa_ch_ind() @@ -438,32 +276,6 @@ int16_t ivas_sba_get_nchan_metadata( *-------------------------------------------------------------------*/ /*! r: flag indicating to code SPAR HOA MD for all bands */ -#ifndef IVAS_FLOAT_FIXED -void ivas_sba_get_spar_hoa_ch_ind( - const int16_t num_md_chs, /* i : number of MD channels */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] ) -{ - int16_t ch; - const int16_t *hoa_ind; - - if ( ivas_total_brate >= IVAS_512k ) - { - hoa_ind = HOA_keep_ind_spar512; - } - else - { - hoa_ind = HOA_keep_ind_spar; - } - - for ( ch = 0; ch < num_md_chs; ch++ ) - { - HOA_md_ind[ch] = hoa_ind[ch]; - } - - return; -} -#else void ivas_sba_get_spar_hoa_ch_ind_fx( const Word16 num_md_chs, /* i : number of MD channels */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -489,7 +301,6 @@ void ivas_sba_get_spar_hoa_ch_ind_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -498,34 +309,6 @@ void ivas_sba_get_spar_hoa_ch_ind_fx( * Get the flag to code SPAR HOA MD for all band *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_sba_get_spar_hoa_md_flag( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - int16_t *spar_hoa_md_flag, - int16_t *spar_hoa_dirac2spar_md_flag ) -{ - if ( sba_order > 1 && ivas_total_brate >= IVAS_256k ) - { - *spar_hoa_md_flag = 1; - } - else - { - *spar_hoa_md_flag = 0; - } - - if ( sba_order > 1 && ivas_total_brate >= IVAS_512k ) - { - *spar_hoa_dirac2spar_md_flag = 0; - } - else - { - *spar_hoa_dirac2spar_md_flag = 1; - } - - return; -} -#else void ivas_sba_get_spar_hoa_md_flag_fx( const Word16 sba_order, /* i : Ambisonic (SBA) order */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -558,7 +341,6 @@ void ivas_sba_get_spar_hoa_md_flag_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -566,7 +348,6 @@ void ivas_sba_get_spar_hoa_md_flag_fx( * * Zero vertical Ambisonics components *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_sba_zero_vert_comp_fx( Word32 *sba_data[], /* i : SBA signals q_data */ const Word16 sba_order, /* i : SBA order */ @@ -594,30 +375,3 @@ void ivas_sba_zero_vert_comp_fx( return; } -#endif -void ivas_sba_zero_vert_comp( - float *sba_data[], /* i : SBA signals */ - const int16_t sba_order, /* i : SBA order */ - const int16_t sba_planar, /* i : SBA planar flag */ - const int16_t input_frame /* i : frame length */ -) -{ - int16_t i, j; - - /* Channels in the range i^2+1 to (i+1)^2 -1 are zeroed (retain only first and last channel for that order) */ - for ( i = 1; i <= sba_order; i++ ) - { - /* Keep Z if not planar */ - if ( !sba_planar && i == 1 ) - { - continue; - } - - for ( j = ( i * i + 1 ); j < ( ( i + 1 ) * ( i + 1 ) - 1 ); j++ ) - { - set_zero( sba_data[j], input_frame ); - } - } - - return; -} diff --git a/lib_com/ivas_sns_com.c b/lib_com/ivas_sns_com.c index f8032aa6f..cf7ec8348 100644 --- a/lib_com/ivas_sns_com.c +++ b/lib_com/ivas_sns_com.c @@ -41,7 +41,7 @@ #include #include "wmc_auto.h" - +#ifndef IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * sns_compute_scf() * @@ -292,3 +292,4 @@ void sns_shape_spectrum( return; } +#endif diff --git a/lib_com/ivas_spar_com.c b/lib_com/ivas_spar_com.c index ec11596b4..7ab41d5ed 100644 --- a/lib_com/ivas_spar_com.c +++ b/lib_com/ivas_spar_com.c @@ -45,12 +45,8 @@ #include "wmc_auto.h" #include "basop_util.h" #include "basop32.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------------------------* @@ -86,7 +82,6 @@ * Static functions declaration *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_get_pred_coeffs_enc_fx( Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], /*q_cov_real*/ Word16 *q_cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], @@ -153,7 +148,6 @@ static void ivas_get_Wscaling_factor_fx( Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS static void ivas_calc_post_pred_per_band_fx( Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] /*q_cov_real*/, Word16 q_cov_real, Word32 ***mixer_mat /*q_mixer_mat*/, Word16 q_mixer_mat, const Word16 num_ch, const Word16 band_idx, Word32 postpred_cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH] /*q_postpred_cov_re*/, Word16 *q_postpred_cov_re ); static Word16 ivas_is_mat_inv_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM] /*q_in_re*/, Word16 q_in_re, const Word16 dim ); static void ivas_calc_mat_inv_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM] /*q_in_re*/, Word16 q_in_re, const Word16 dim, Word32 out_re[MAX_MAT_DIM][MAX_MAT_DIM] /*q_out_re*/, Word16 *q_out_re ); -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_bw_idx_from_sample_rate() @@ -162,32 +156,6 @@ static void ivas_calc_mat_inv_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM] /*q_in_ *-----------------------------------------------------------------------------------------*/ /*! r: audio BW index */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_get_bw_idx_from_sample_rate( - const int32_t sampling_rate /* i : sampling rate */ -) -{ - int16_t bwidth = 0; - - switch ( sampling_rate ) - { - case 16000: - bwidth = WB; - break; - case 32000: - bwidth = SWB; - break; - case 48000: - bwidth = FB; - break; - default: - assert( !"Unsupported sample rate!" ); - } - - return bwidth; -} - -#else Word16 ivas_get_bw_idx_from_sample_rate_fx( const Word32 sampling_rate /* i : sampling rate */ ) @@ -215,7 +183,6 @@ Word16 ivas_get_bw_idx_from_sample_rate_fx( return bwidth; } -#endif /*------------------------------------------------------------------------- * ivas_spar_config() @@ -223,66 +190,6 @@ Word16 ivas_get_bw_idx_from_sample_rate_fx( * SPAR configuration function *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_config( - int32_t ivas_total_brate, /* i : codec total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - int16_t *nchan_transport, /* o : number of transport channels */ - int16_t *nSCE, /* o : number of SCEs */ - int16_t *nCPE, /* o : number of CPEs */ - int32_t *core_nominal_brate, /* o : core-coding nominal bitrate */ - const int16_t sid_format /* i : IVAS format indicator from SID frame */ -) -{ - if ( ivas_total_brate == IVAS_SID_5k2 ) - { - if ( sid_format == SID_SBA_1TC ) - { - *nchan_transport = 1; - } - else - { - *nchan_transport = 2; - } - } - else - { - *nchan_transport = ivas_get_sba_num_TCs( ivas_total_brate, sba_order ); - } - - *nCPE = ( *nchan_transport > 1 ) ? ( *nchan_transport + 1 ) >> 1 : 0; - *nSCE = max( 0, *nchan_transport - ( *nCPE << 1 ) ); - - if ( *nchan_transport == 1 ) - { - /* map SPAR SID bitrate to SPAR active bitrate */ - if ( ivas_total_brate == IVAS_SID_5k2 ) - { - ivas_total_brate = IVAS_32k; - } - assert( ivas_total_brate == IVAS_32k || ivas_total_brate == IVAS_24k4 || ivas_total_brate == IVAS_16k4 || ivas_total_brate == IVAS_13k2 ); - if ( ivas_total_brate == IVAS_32k ) - { - *core_nominal_brate = ACELP_24k40; - } - else if ( ivas_total_brate == IVAS_24k4 ) - { - *core_nominal_brate = ACELP_16k40; - } - else if ( ivas_total_brate == IVAS_16k4 ) - { - *core_nominal_brate = ACELP_13k20; - } - else if ( ivas_total_brate == IVAS_13k2 ) - { - *core_nominal_brate = ACELP_9k60; - } - } - - return; -} - -#else void ivas_spar_config_fx( Word32 ivas_total_brate, /* i : codec total bitrate */ const Word16 sba_order, /* i : Ambisonic (SBA) order */ @@ -359,7 +266,6 @@ void ivas_spar_config_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_spar_table_idx() @@ -368,54 +274,6 @@ void ivas_spar_config_fx( *-----------------------------------------------------------------------------------------*/ /*! r: config. table index */ -int16_t ivas_get_spar_table_idx( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int16_t bwidth, /* i : audio bandwidth */ - int16_t *bitlen, /* o : number of bits */ - int16_t *ind /* o : indice */ -) -{ - int16_t table_idx = 0, ind1[IVAS_SPAR_BR_TABLE_LEN]; - int16_t i, j = 0, ind2 = -1; - - for ( i = 0; i < IVAS_SPAR_BR_TABLE_LEN; i++ ) - { - ind1[j] = 0; - if ( ( ivas_spar_br_table_consts[i].ivas_total_brate == ivas_total_brate ) && - ( ivas_spar_br_table_consts[i].sba_order == sba_order ) ) - { - ind1[j++] = i; - } - } - - for ( i = 0; i < j; i++ ) - { - if ( ivas_spar_br_table_consts[ind1[i]].bwidth == bwidth ) - { - ind2 = i; - break; - } - } - assert( j > 0 ); /* to check if bitrate entry is present */ - assert( ind2 >= 0 ); /* to check if bw entry is present */ - - table_idx = ind1[ind2]; - - if ( ind != NULL ) - { - *ind = ind2; - } - - if ( bitlen != NULL ) - { - *bitlen = ivas_get_bits_to_encode( j - 1 ); - } - - return table_idx; -} - -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_spar_table_idx_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 sba_order, /* i : Ambisonic (SBA) order */ @@ -473,7 +331,6 @@ Word16 ivas_get_spar_table_idx_fx( return table_idx; } -#endif /*-------------------------------------------------------------------* * ivas_get_sba_num_TCs() * @@ -481,20 +338,6 @@ Word16 ivas_get_spar_table_idx_fx( *-------------------------------------------------------------------*/ /*! r: number of transport channels */ -int16_t ivas_get_sba_num_TCs( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - int16_t table_idx, nchan_transport; - - table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - - nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; - - return nchan_transport; -} -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_sba_num_TCs_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ const Word16 sba_order /* i : Ambisonic (SBA) order */ @@ -509,7 +352,6 @@ Word16 ivas_get_sba_num_TCs_fx( return nchan_transport; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_pred_coeffs() @@ -517,7 +359,6 @@ Word16 ivas_get_sba_num_TCs_fx( * Calculation of prediction coefficients *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_get_pred_coeffs_fx() * @@ -1710,7 +1551,6 @@ static void ivas_get_pred_coeffs_fx( return; } -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* @@ -1719,7 +1559,6 @@ static void ivas_get_pred_coeffs_fx( * Calculation of scaling factor for post predicted W channel *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_get_Wscaling_factor_enc_fx( Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], /*q_cov_real*/ @@ -1959,8 +1798,6 @@ static void ivas_get_Wscaling_factor_fx( return; } -#endif - /*-----------------------------------------------------------------------------------------* * Function ivas_create_fullr_dmx_mat() @@ -1968,7 +1805,6 @@ static void ivas_get_Wscaling_factor_fx( * Calculation of downmix matrix *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_create_fullr_dmx_mat_fx( Word32 pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS], /*q_pred_coeffs_re*/ @@ -2106,8 +1942,6 @@ void ivas_create_fullr_dmx_mat_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_reorder_array() @@ -2115,7 +1949,6 @@ void ivas_create_fullr_dmx_mat_fx( * reorders the input matrix based on order *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_reorder_array_fx( Word32 in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS], /*qx*/ const Word16 in_chans, @@ -2143,7 +1976,6 @@ static void ivas_reorder_array_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_calc_post_pred_per_band() @@ -2151,7 +1983,6 @@ static void ivas_reorder_array_fx( * Calculate post pred mat per band *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_calc_post_pred_per_band_enc_fx( Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], /*q_cov_real*/ @@ -2435,15 +2266,12 @@ static void ivas_calc_post_pred_per_band_fx( return; } -#endif - /*-----------------------------------------------------------------------------------------* * Function ivas_calc_p_coeffs_per_band() * * Calculate P coeffs per band *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_calc_p_coeffs_per_band_enc_fx( ivas_spar_md_t *pSparMd, @@ -3177,15 +3005,12 @@ static void ivas_calc_p_coeffs_per_band_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_calc_c_coeffs_per_band() * * Calculate C coeffs per band *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_calc_c_coeffs_per_band_enc_fx( ivas_spar_md_t *pSparMd, @@ -3463,8 +3288,6 @@ static void ivas_calc_c_coeffs_per_band_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_calc_c_p_coeffs() @@ -3472,7 +3295,6 @@ static void ivas_calc_c_coeffs_per_band_fx( * Calculation of C and P coeffs *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_calc_c_p_coeffs_enc_fx( ivas_spar_md_t *pSparMd, @@ -3596,9 +3418,6 @@ void ivas_calc_c_p_coeffs_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED static void ivas_calc_mat_det_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM], /*q_in_re*/ @@ -3665,8 +3484,6 @@ static void ivas_calc_mat_det_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_get_mat_cofactor() @@ -3674,7 +3491,6 @@ static void ivas_calc_mat_det_fx( * Calculate cofactor for invert matrix *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_get_mat_cofactor_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM], /*qx*/ @@ -3710,8 +3526,6 @@ static void ivas_get_mat_cofactor_fx( return; } -#endif - /*-----------------------------------------------------------------------------------------* * Function ivas_calc_mat_inv() @@ -3719,7 +3533,6 @@ static void ivas_get_mat_cofactor_fx( * Calculate Invert of a matrix *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_calc_mat_inv_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM], /*q_in_re*/ @@ -3844,8 +3657,6 @@ static void ivas_calc_mat_inv_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_is_mat_inv() @@ -3853,7 +3664,6 @@ static void ivas_calc_mat_inv_fx( * Check if matrix is invertible or not by checking if determinant is 0 or very close to 0 *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_is_mat_inv_fx( Word32 in_re[MAX_MAT_DIM][MAX_MAT_DIM], /*q_in_re*/ @@ -3883,7 +3693,6 @@ static Word16 ivas_is_mat_inv_fx( return is_det_zero; } -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* @@ -3892,7 +3701,6 @@ static Word16 ivas_is_mat_inv_fx( * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_compute_spar_params_enc_fx( Word32 *cov_real_fx[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], /*q_cov_real*/ @@ -4088,7 +3896,6 @@ void ivas_compute_spar_params_fx( return; } -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* @@ -4096,7 +3903,6 @@ void ivas_compute_spar_params_fx( * * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word32 diff_norm_order1_table[4] = { 0, 805306368, 402653184, 268435456 }; // q28 Word32 diff_norm_order2_table[6] = { 0, 1342177280, 671088640, 447392416, 335544320, 268435456 }; // q28 Word32 diff_norm_order3_table[8] = { 0, 1879048192, 939524096, 626349376, 469762048, 375809632, 313174688, 268435456 }; // q28 @@ -5210,124 +5016,7 @@ void ivas_get_spar_md_from_dirac_fx( return; } -#endif -/*------------------------------------------------------------------------- - * ivas_dirac_dec_get_response() - * - * calculate reponse, 1 degree resolution - *------------------------------------------------------------------------*/ - -void ivas_dirac_dec_get_response( - const int16_t azimuth, - const int16_t elevation, - float *response, - const int16_t ambisonics_order ) -{ - int16_t index_azimuth, index_elevation; - int16_t el, e, az; - float cos_1, cos_2, sin_1, cos_az[3]; - float sin_az[3]; - float f, c; - int16_t l, m; - int16_t b, b1, b_2, b1_2, a; - - index_azimuth = ( azimuth + 180 ) % 360; - index_elevation = elevation + 90; - e = index_elevation > 90 ? -1 : 1; - el = index_elevation > 90 ? 180 - index_elevation : index_elevation; - - az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; - f = index_azimuth > 180 ? -1.0f : 1.0f; - - cos_1 = dirac_gains_trg_term[az][0]; - cos_2 = cos_1 * cos_1; - sin_1 = f * dirac_gains_trg_term[az][1]; - cos_az[0] = cos_1; - cos_az[1] = 2.0f * cos_2 - 1.0f; - cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; - sin_az[0] = sin_1; - sin_az[1] = sin_1 * 2.0f * cos_1; - sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); - - response[0] = 1.0f; - /* Un-optimized code - for reference */ - /* for( l = 1; l<= ambisonics_order; l++ ) */ - /* { */ - /* int16_t b, b1, a; */ - /* float c; */ - /* for( m = 0; m < l; m++ ) */ - /* { */ - /* b = l*l+m; */ - /* a = dirac_gains_P_idx[b]; */ - /* c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; */ - - /* if( m%2 == 1 ) */ - /* { */ - /* c = c*e; */ - /* } */ - - /* response[b] = c * sin_az[l-m-1]; */ - - /* b1 = l*l+2*l-m; */ - /* response[b1] = c * cos_az[l-m-1]; */ - - /* } */ - - /* b = l*l+l; */ - /* a = dirac_gains_P_idx[b]; */ - /* c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; */ - /* if( l%2 == 1) */ - /* { */ - /* c = c*e; */ - /* } */ - - /* response[b] = c; */ - /* } */ - - for ( l = 1; l <= ambisonics_order; l++ ) - { - b_2 = l * l; - b1_2 = l * l + 2 * l; - for ( m = 0; m < l; m += 2 ) - { - b = b_2 + m; - a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - response[b] = c * sin_az[l - m - 1]; - - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; - } - - for ( m = 1; m < l; m += 2 ) - { - b = b_2 + m; - a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - c = c * e; - - response[b] = c * sin_az[l - m - 1]; - - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; - } - - b = b_2 + l; - a = dirac_gains_P_idx[b]; - c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - if ( l % 2 == 1 ) - { - c = c * e; - } - - response[b] = c; - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_dirac_dec_get_response_fx() * @@ -7485,7 +7174,6 @@ void ivas_dirac_dec_get_response_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_bits_to_encode @@ -7493,7 +7181,6 @@ void ivas_dirac_dec_get_response_fx( * Get number of bits required to encode the input value *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_bits_to_encode( Word32 val ) { @@ -7510,23 +7197,6 @@ Word16 ivas_get_bits_to_encode( return bits_req; } -#else -int16_t ivas_get_bits_to_encode( - int32_t val ) -{ - int16_t bits_req = 0; - - assert( val >= 0 ); - - while ( val ) - { - bits_req++; - val >>= 1; - } - - return bits_req; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -7535,156 +7205,6 @@ int16_t ivas_get_bits_to_encode( * Set SPAR bitrate config *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_set_bitrate_config( - ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ - const int16_t table_idx, /* i : config. table index */ - const int16_t num_bands, /* i : number of bands */ - const int16_t dirac2spar_md_flag, - const int16_t enc_flag, - const int16_t pca_flag, - const int16_t agc_flag ) -{ - int32_t ivas_total_brate; - int16_t i, total_bits, max_bits, code, length; - int16_t sba_order; - int16_t md_coding_bits_header; - int16_t agc_bits, pca_bits, num_PR_bits_dirac_bands; - int16_t bits_PR, bits_C, bits_P; - int16_t wc_coarse_strat; - int16_t n_input, n_dmx, n_dec; - int16_t quant_strat; - int16_t bands_bw; - - pSpar_md_cfg->nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; - - for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ ) - { - pSpar_md_cfg->max_freq_per_chan[i] = ivas_spar_br_table_consts[table_idx].fpcs; - } - - pSpar_md_cfg->active_w = ivas_spar_br_table_consts[table_idx].active_w; - pSpar_md_cfg->agc_bits_ch_idx = ivas_spar_br_table_consts[table_idx].agc_bits_ch_idx; - ivas_spar_get_uniform_quant_strat( pSpar_md_cfg, table_idx ); - - pSpar_md_cfg->quant_strat_bits = ivas_get_bits_to_encode( MAX_QUANT_STRATS ); - - /* BLOCK: getEntropyCoderModels */ - - pSpar_md_cfg->remix_unmix_order = ivas_spar_br_table_consts[table_idx].dmx_str; - - /* bits per block*/ - total_bits = 0; - max_bits = 0; - - ivas_total_brate = ivas_spar_br_table_consts[table_idx].ivas_total_brate; - sba_order = ivas_spar_br_table_consts[table_idx].sba_order; - ivas_get_spar_table_idx( ivas_total_brate, sba_order, ivas_spar_br_table_consts[table_idx].bwidth, &length, &code ); - - for ( i = 0; i < pSpar_md_cfg->nchan_transport; i++ ) - { - total_bits += (int16_t) ( ivas_spar_br_table_consts[table_idx].core_brs[i][0] / FRAMES_PER_SEC ); - max_bits += (int16_t) ( ivas_spar_br_table_consts[table_idx].core_brs[i][1] / FRAMES_PER_SEC ); - } - - pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_EXTENDED - SBA_PLANAR_BITS - SBA_ORDER_BITS - length - total_bits; - pSpar_md_cfg->max_bits_per_blk = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC ) - IVAS_FORMAT_SIGNALING_NBITS_EXTENDED - SBA_PLANAR_BITS - SBA_ORDER_BITS - length - max_bits; - - md_coding_bits_header = SPAR_NUM_CODING_STRAT_BITS + pSpar_md_cfg->quant_strat_bits; - - pSpar_md_cfg->tgt_bits_per_blk -= md_coding_bits_header; - pSpar_md_cfg->max_bits_per_blk -= md_coding_bits_header; - - if ( ivas_total_brate < IVAS_24k4 ) - { - bands_bw = 2; - } - else - { - bands_bw = 1; - } - - pSpar_md_cfg->tgt_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->tgt_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); - pSpar_md_cfg->max_bits_per_blk = (int16_t) ceilf( ( 1.0f * pSpar_md_cfg->max_bits_per_blk * num_bands ) / IVAS_MAX_NUM_BANDS ); - - pSpar_md_cfg->tgt_bits_per_blk += md_coding_bits_header; - pSpar_md_cfg->max_bits_per_blk += md_coding_bits_header; - - if ( enc_flag ) - { - /*calculate the actual worst case bits*/ - if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) - { - quant_strat = QUANT_STRAT_0; - } - else - { - quant_strat = QUANT_STRAT_2; - } - - num_PR_bits_dirac_bands = ( dirac2spar_md_flag == 1 ) ? num_bands - SPAR_DIRAC_SPLIT_START_BAND : 0; - num_PR_bits_dirac_bands /= bands_bw; - num_PR_bits_dirac_bands = max( 0, num_PR_bits_dirac_bands ); - num_PR_bits_dirac_bands *= DIRAC_TO_SPAR_HBR_PRED_CHS; - -#ifdef IVAS_FLOAT_FIXED - n_input = ivas_sba_get_nchan_metadata_fx( sba_order, ivas_total_brate ); -#else - n_input = ivas_sba_get_nchan_metadata( sba_order, ivas_total_brate ); -#endif - n_dmx = ivas_spar_br_table_consts[table_idx].nchan_transport; - n_dec = n_input - n_dmx; - bits_PR = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][0] ) ); - num_PR_bits_dirac_bands *= bits_PR; - bits_PR = bits_PR * ( n_input - 1 ); - bits_C = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][1] ) ) * ( ( n_dmx - 1 ) * n_dec ); - bits_P = (int16_t) ceilf( log2f( ivas_spar_br_table_consts[table_idx].q_lvls[quant_strat][2] ) ) * ( n_dec ); - wc_coarse_strat = bits_PR + bits_C + bits_P; - wc_coarse_strat *= num_bands; - wc_coarse_strat /= bands_bw; - wc_coarse_strat -= num_PR_bits_dirac_bands; - wc_coarse_strat += md_coding_bits_header; - - if ( pSpar_md_cfg->max_bits_per_blk < wc_coarse_strat ) - { - assert( 0 ); - } - - if ( agc_flag ) - { - if ( pSpar_md_cfg->nchan_transport == 1 ) - { - agc_bits = AGC_BITS_PER_CH; - } - else - { - agc_bits = AGC_BITS_PER_CH * pSpar_md_cfg->nchan_transport + AGC_SIGNALLING_BITS; - } - } - else - { - agc_bits = AGC_SIGNALLING_BITS; - } - - if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) - { - pca_bits = 1; - if ( pca_flag ) - { - pca_bits += IVAS_PCA_QBITS + IVAS_PCA_QBITS - 1; - } - } - else - { - pca_bits = 0; - } - - pSpar_md_cfg->max_md_bits_spar = pSpar_md_cfg->max_bits_per_blk + agc_bits + pca_bits; - } - - return; -} -#else void ivas_spar_set_bitrate_config_fx( ivas_spar_md_com_cfg *pSpar_md_cfg, /* i/o: SPAR MD config. handle */ const Word16 table_idx, /* i : config. table index */ @@ -7875,99 +7395,12 @@ void ivas_spar_set_bitrate_config_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_bitrate_dist() * * Set SPAR bitrate distribution *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_bitrate_dist( - int32_t core_brates_act[], /* o : bitrates per core-coder */ - const int16_t nAvailBits, /* i : number of available bits */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t i, nchan_transport, table_idx, bitlen; - int16_t core_bits_act[FOA_CHANNELS], core_range_bits[FOA_CHANNELS]; - int16_t sum_core_act_bits, residual_bits, overflow_bits; - - table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, bwidth, &bitlen, NULL ); - - nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; - - sum_core_act_bits = 0; - for ( i = 0; i < nchan_transport; i++ ) - { - core_bits_act[i] = (int16_t) ( ivas_spar_br_table_consts[table_idx].core_brs[i][0] / FRAMES_PER_SEC ); - - sum_core_act_bits += core_bits_act[i]; - } - - residual_bits = nAvailBits - sum_core_act_bits; - - /* First compute core-coder bits as per bitrate distribution table and MD bitrate*/ - if ( residual_bits > 0 ) - { - for ( i = 0; i < nchan_transport; i++ ) - { - core_range_bits[i] = (int16_t) ( ( ivas_spar_br_table_consts[table_idx].core_brs[i][2] - ivas_spar_br_table_consts[table_idx].core_brs[i][0] ) / FRAMES_PER_SEC ); - core_bits_act[i] += min( residual_bits, core_range_bits[i] ); - residual_bits -= core_range_bits[i]; - - if ( residual_bits <= 0 ) - { - break; - } - } - } - else - { - for ( i = 0; i < nchan_transport; i++ ) - { - core_range_bits[i] = (int16_t) ( ( ivas_spar_br_table_consts[table_idx].core_brs[i][0] - ivas_spar_br_table_consts[table_idx].core_brs[i][1] ) / FRAMES_PER_SEC ); - } - - overflow_bits = -residual_bits; - - for ( i = 0; i < nchan_transport; i++ ) - { - core_bits_act[nchan_transport - 1 - i] -= min( overflow_bits, core_range_bits[nchan_transport - 1 - i] ); - overflow_bits -= core_range_bits[nchan_transport - 1 - i]; - - if ( overflow_bits <= 0 ) - { - break; - } - } - - if ( overflow_bits > 0 ) - { - int16_t overflow_bits_ch; - overflow_bits_ch = overflow_bits / nchan_transport; - - for ( i = 0; i < nchan_transport; i++ ) - { - core_bits_act[i] -= overflow_bits_ch; - overflow_bits -= overflow_bits_ch; - } - - core_bits_act[nchan_transport - 1] -= max( 0, overflow_bits ); - } - } - - for ( i = 0; i < nchan_transport; i++ ) - { - core_brates_act[i] = core_bits_act[i] * FRAMES_PER_SEC; - } - - return; -} - -#else void ivas_spar_bitrate_dist_fx( Word32 core_brates_act[], /* o : bitrates per core-coder */ const Word16 nAvailBits, /* i : number of available bits */ @@ -7980,7 +7413,7 @@ void ivas_spar_bitrate_dist_fx( Word16 core_bits_act[FOA_CHANNELS], core_range_bits[FOA_CHANNELS]; Word16 sum_core_act_bits, residual_bits, overflow_bits; - table_idx = ivas_get_spar_table_idx( ivas_total_brate, sba_order, bwidth, &bitlen, NULL ); + table_idx = ivas_get_spar_table_idx_fx( ivas_total_brate, sba_order, bwidth, &bitlen, NULL ); nchan_transport = ivas_spar_br_table_consts[table_idx].nchan_transport; move16(); @@ -8061,4 +7494,3 @@ void ivas_spar_bitrate_dist_fx( return; } -#endif diff --git a/lib_com/ivas_spar_com_quant_util.c b/lib_com/ivas_spar_com_quant_util.c index f0f509375..81044fb40 100644 --- a/lib_com/ivas_spar_com_quant_util.c +++ b/lib_com/ivas_spar_com_quant_util.c @@ -39,10 +39,8 @@ #include "ivas_rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------------------------* @@ -50,47 +48,6 @@ * * Quantize real values *-----------------------------------------------------------------------------------------*/ -void ivas_quantise_real_values( - const float *values, - const int16_t q_levels, - const float min_value, - const float max_value, - int16_t *index, - float *quant, - const int16_t dim ) -{ - int16_t i; - float q_step, one_by_q_step; - if ( q_levels == 1 ) - { - for ( i = 0; i < dim; i++ ) - { - quant[i] = 0; - index[i] = 0; - } - } - else if ( q_levels && max_value != min_value ) - { - q_step = ( max_value - min_value ) / ( q_levels - 1 ); - one_by_q_step = ( q_levels - 1 ) / ( max_value - min_value ); - float val; - for ( i = 0; i < dim; i++ ) - { - val = max( min_value, min( values[i], max_value ) ); - index[i] = (int16_t) round( one_by_q_step * val ); - quant[i] = index[i] * q_step; - } - } - else - { - for ( i = 0; i < dim; i++ ) - { - quant[i] = values[i]; - } - } - return; -} - void ivas_quantise_real_values_enc_fx_varq( const Word32 *values_fx, const Word16 q_levels, @@ -160,7 +117,6 @@ void ivas_quantise_real_values_enc_fx_varq( } -#ifdef IVAS_FLOAT_FIXED void ivas_quantise_real_values_fx( const Word32 *values_fx, /*q28*/ const Word16 q_levels, @@ -212,7 +168,6 @@ void ivas_quantise_real_values_fx( return; } -#ifdef IVAS_FLOAT_FIXED void ivas_quantise_real_values_enc_fx( const Word32 *values_fx, // Q28 const Word16 q_levels, @@ -264,87 +219,12 @@ void ivas_quantise_real_values_enc_fx( } return; } -#endif -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_get_uniform_quant_strat() * * Sets the quant strat values *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_get_uniform_quant_strat( - ivas_spar_md_com_cfg *pSpar_md_com_cfg, - const int16_t table_idx ) -{ - int16_t i; - int16_t active_w = ivas_spar_br_table_consts[table_idx].active_w; - int16_t PQ_q_lvl, C_q_lvl, Pr_q_lvl, Pc_q_lvl; - - pSpar_md_com_cfg->num_quant_strats = MAX_QUANT_STRATS; - - for ( i = 0; i < pSpar_md_com_cfg->num_quant_strats; i++ ) - { - PQ_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][0]; - C_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][1]; - Pr_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][2]; - Pc_q_lvl = ivas_spar_br_table_consts[table_idx].q_lvls[i][3]; - - if ( active_w ) - { - pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; - pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; - pSpar_md_com_cfg->quant_strat[i].PR.min = -1.2f; - pSpar_md_com_cfg->quant_strat[i].PR.max = 1.2f; - - - pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; - pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; - pSpar_md_com_cfg->quant_strat[i].C.min = -0.8f; - pSpar_md_com_cfg->quant_strat[i].C.max = 0.8f; - - - pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; - pSpar_md_com_cfg->quant_strat[i].P_r.max = 0.8f; - - - pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.8f; - pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.8f; - } - else - { - pSpar_md_com_cfg->quant_strat[i].PR.q_levels[0] = PQ_q_lvl; - pSpar_md_com_cfg->quant_strat[i].PR.q_levels[1] = PQ_q_lvl; - pSpar_md_com_cfg->quant_strat[i].PR.max = 1; - pSpar_md_com_cfg->quant_strat[i].PR.min = -1; - - - pSpar_md_com_cfg->quant_strat[i].C.q_levels[0] = C_q_lvl; - pSpar_md_com_cfg->quant_strat[i].C.q_levels[1] = C_q_lvl; - pSpar_md_com_cfg->quant_strat[i].C.max = 2; - pSpar_md_com_cfg->quant_strat[i].C.min = -2; - - - pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[0] = Pr_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_r.q_levels[1] = Pr_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_r.max = 1.0f; - pSpar_md_com_cfg->quant_strat[i].P_r.min = 0; - - - pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[0] = Pc_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_c.q_levels[1] = Pc_q_lvl; - pSpar_md_com_cfg->quant_strat[i].P_c.max = 0.5; - pSpar_md_com_cfg->quant_strat[i].P_c.min = -0.5; - } - } - - return; -} -#else /*-----------------------------------------------------------------------------------------* * Function ivas_spar_get_uniform_quant_strat_fx() * @@ -453,7 +333,6 @@ void ivas_spar_get_uniform_quant_strat_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -461,7 +340,6 @@ void ivas_spar_get_uniform_quant_strat_fx( * * Map prior coeffs *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_map_prior_coeffs_quant( ivas_spar_md_prev_t *pSpar_md_prior, ivas_spar_md_com_cfg *pSpar_md_cfg, @@ -526,71 +404,12 @@ void ivas_map_prior_coeffs_quant( return; } -#else -void ivas_map_prior_coeffs_quant( - ivas_spar_md_prev_t *pSpar_md_prior, - ivas_spar_md_com_cfg *pSpar_md_cfg, - const int16_t qsi, - const int16_t nB ) -{ - int16_t i, j; - - if ( qsi != pSpar_md_cfg->prev_quant_idx ) - { - ivas_quant_strat_t qs = pSpar_md_cfg->quant_strat[qsi]; - ivas_quant_strat_t prev_qs = pSpar_md_cfg->quant_strat[pSpar_md_cfg->prev_quant_idx]; - float one_by_q_lvl_PR = 1.0f / max( prev_qs.PR.q_levels[0] - 1, 1 ); - float one_by_q_lvl_C = 1.0f / max( prev_qs.C.q_levels[0] - 1, 1 ); - float one_by_q_lvl_P_r = 1.0f / max( prev_qs.P_r.q_levels[0] - 1, 1 ); - for ( i = 0; i < nB; i++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = (int16_t) round( ( qs.PR.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j] * one_by_q_lvl_PR ); - pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = (int16_t) round( ( qs.P_r.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j] * one_by_q_lvl_P_r ); - } - for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) - { - pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = (int16_t) round( ( qs.C.q_levels[0] - 1 ) * pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j] * one_by_q_lvl_C ); - } - } - } - else - { - for ( i = 0; i < nB; i++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pSpar_md_prior->band_coeffs_idx_mapped[i].pred_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].pred_index_re[j]; - pSpar_md_prior->band_coeffs_idx_mapped[i].decd_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].decd_index_re[j]; - } - for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) - { - pSpar_md_prior->band_coeffs_idx_mapped[i].drct_index_re[j] = pSpar_md_prior->band_coeffs_idx[i].drct_index_re[j]; - } - } - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_quant_dtx_init() * * Init SPAR MD with minmax vals *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_quant_dtx_init( - ivas_spar_md_t *spar_md, - float *min_max ) -{ - spar_md->min_max[0] = min_max[0]; - spar_md->min_max[1] = min_max[1]; - - return; -} -#else void ivas_spar_quant_dtx_init_fx( ivas_spar_md_t *spar_md, Word32 *min_max /*q28*/ ) @@ -602,7 +421,6 @@ void ivas_spar_quant_dtx_init_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_copy_band_coeffs_idx_to_arr() @@ -610,7 +428,6 @@ void ivas_spar_quant_dtx_init_fx( * Copy pred band coeffs to arr *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_copy_band_coeffs_idx_to_arr( ivas_band_coeffs_ind_t *pBands_idx, const Word16 nB, @@ -657,54 +474,6 @@ void ivas_copy_band_coeffs_idx_to_arr( return; } -#else -void ivas_copy_band_coeffs_idx_to_arr( - ivas_band_coeffs_ind_t *pBands_idx, - const int16_t nB, - int16_t *pSymbol_re, - ivas_cell_dim_t *pCell_dims, - const ivas_coeffs_type_t coeff_type ) -{ - int16_t i, len; - int16_t *pPtr_idx = NULL; - - for ( i = 0; i < nB; i++ ) - { - switch ( coeff_type ) - { - case PRED_COEFF: - { - pPtr_idx = pBands_idx[i].pred_index_re; - break; - } - case DRCT_COEFF: - { - pPtr_idx = pBands_idx[i].drct_index_re; - break; - } - case DECD_COEFF: - { - pPtr_idx = pBands_idx[i].decd_index_re; - break; - } - case DECX_COEFF: - { - break; - } - } - len = pCell_dims[i].dim1 * pCell_dims[i].dim2; - if ( ( coeff_type != DECX_COEFF ) ) - { - mvs2s( pPtr_idx, pSymbol_re, len ); - pSymbol_re += len; - } - } - - - return; -} -#endif - /*-----------------------------------------------------------------------------------------* * Function ivas_clear_band_coeffs() @@ -712,7 +481,6 @@ void ivas_copy_band_coeffs_idx_to_arr( * clear band coeffs array in SPAR MD *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_clear_band_coeffs_fx( ivas_band_coeffs_t *pband_coeffs, const UWord16 num_bands ) @@ -731,29 +499,12 @@ void ivas_clear_band_coeffs_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_clear_band_coeff_idx() * * clear band coeffs index array in SPAR MD *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_clear_band_coeff_idx( - ivas_band_coeffs_ind_t *pband_coeff_idx, - const UWord16 num_bands ) -{ - UWord16 i; - FOR( i = 0; i < num_bands; i++ ) - { - set16_fx( pband_coeff_idx[i].pred_index_re, 0, ( sub( IVAS_SPAR_MAX_CH, 1 ) ) ); - set16_fx( pband_coeff_idx[i].drct_index_re, 0, IVAS_SPAR_MAX_C_COEFF ); - set16_fx( pband_coeff_idx[i].decd_index_re, 0, sub( IVAS_SPAR_MAX_CH, 1 ) ); - } - - return; -} -#else void ivas_clear_band_coeff_idx( ivas_band_coeffs_ind_t *pband_coeff_idx, const UWord16 num_bands ) @@ -768,4 +519,3 @@ void ivas_clear_band_coeff_idx( return; } -#endif diff --git a/lib_com/ivas_stat_com.h b/lib_com/ivas_stat_com.h index 0482e5509..54ed08004 100644 --- a/lib_com/ivas_stat_com.h +++ b/lib_com/ivas_stat_com.h @@ -59,19 +59,11 @@ typedef struct int16_t ism_metadata_flag; /* flag whether metadata are coded in particular frame of particular object */ int16_t last_ism_metadata_flag; /* last frame ism_metadata_flag */ -#ifdef IVAS_FLOAT_FIXED Word32 azimuth_fx; /* azimuth value read from the input metadata file */ /* Q22 */ Word32 elevation_fx; /* elevation value read from the input metadata file */ /* Q22 */ Word16 radius_fx; /* radius value read from the input metadata file */ /* Q9 */ Word32 yaw_fx; /* yaw value read from the input metadata file */ /* Q22 */ Word32 pitch_fx; /* pitch value read from the input metadata file */ /* Q22 */ -#else - float azimuth; /* azimuth value read from the input metadata file */ - float elevation; /* elevation value read from the input metadata file */ - float radius; /* radius value read from the input metadata file */ - float yaw; /* yaw value read from the input metadata file */ - float pitch; /* pitch value read from the input metadata file */ -#endif int16_t non_diegetic_flag; /* Non-diegetic (non-headtracked) object flag */ @@ -80,36 +72,20 @@ typedef struct int16_t last_radius_idx; /* last frame index of coded radius */ int16_t radius_diff_cnt; /* FEC counter of consecutive differentially radius coded frames */ -#ifndef IVAS_FLOAT_FIXED - float last_azimuth; /* MD smoothing in DTX- last Q azimuth value */ - float last_elevation; /* MD smoothing in DTX - last Q elevation value */ - float last_true_azimuth; /* MD smoothing in DTX- last true Q azimuth value */ - float last_true_elevation; /* MD smoothing in DTX- last true Q elevation value */ -#else Word32 last_azimuth_fx; /* MD smoothing in DTX- last Q azimuth value */ /* Q22 */ Word32 last_elevation_fx; /* MD smoothing in DTX - last Q elevation value */ /* Q22 */ Word32 last_true_azimuth_fx; /* MD smoothing in DTX- last true Q azimuth value */ /* Q22 */ Word32 last_true_elevation_fx; /* MD smoothing in DTX- last true Q elevation value */ /* Q22 */ -#endif int16_t ism_md_fec_cnt_enc; /* counter of continuous frames where MD are not transmitted */ int16_t ism_md_inc_diff_cnt; /* counter of continuous frames where MD are transmitted in inactive segments when MD significantly changes */ -#ifndef IVAS_FLOAT_FIXED - float last_true_radius; /* last true Q radius value */ -#else - Word16 last_true_radius_fx; /* last true Q radius value */ -#endif + Word16 last_true_radius_fx; /* last true Q radius value */ int16_t ism_imp; /* ISM importance flag */ int16_t ism_md_null_flag; int16_t ism_md_lowrate_flag; -#ifdef IVAS_FLOAT_FIXED Word32 q_azimuth_old_fx; Word32 q_elevation_old_fx; -#else - float q_azimuth_old; - float q_elevation_old; -#endif } ISM_METADATA_FRAME, *ISM_METADATA_HANDLE; @@ -215,18 +191,9 @@ typedef struct ivas_spar_md_t ivas_band_coeffs_t *band_coeffs; ivas_band_coeffs_ind_t band_coeffs_idx[IVAS_MAX_NUM_BANDS]; Word16 num_bands; -#ifndef IVAS_FLOAT_FIXED - float min_max[2]; -#endif Word32 min_max_fx[2]; /*q28*/ int16_t dtx_vad; -#ifndef IVAS_FLOAT_FIXED - float en_ratio_slow[IVAS_MAX_NUM_BANDS]; -#endif Word32 en_ratio_slow_fx[IVAS_MAX_NUM_BANDS]; -#ifndef IVAS_FLOAT_FIXED - float ref_pow_slow[IVAS_MAX_NUM_BANDS]; -#endif Word32 ref_pow_slow_fx[IVAS_MAX_NUM_BANDS]; Word16 res_ind; Word16 prior_dyn_active_w_flag; @@ -241,13 +208,7 @@ typedef struct ivas_spar_md_prev_t typedef struct ivas_quant_coeffs_t { -#ifndef IVAS_FLOAT_FIXED - float min; -#endif Word32 min_fx; /* Q28 */ -#ifndef IVAS_FLOAT_FIXED - float max; -#endif Word32 max_fx; /* Q28 */ int16_t q_levels[2]; } ivas_quant_coeffs_t; @@ -330,11 +291,7 @@ typedef struct ivas_arith_t int16_t cum_freq[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; int16_t range; int16_t num_models; -#ifdef IVAS_FLOAT_FIXED Word32 saved_dist_arr[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; /* Q15 */ -#else - float saved_dist_arr[IVAS_NUM_PROB_MODELS][IVAS_MAX_QUANT_LEVELS]; -#endif } ivas_arith_t; typedef struct ivas_arith_coeffs_t @@ -366,12 +323,8 @@ typedef struct ivas_agc_chan_data_t typedef struct ivas_agc_com_state_t { -#ifndef IVAS_FLOAT_FIXED - float *winFunc; -#else Word16 *winFunc_fx; /* Q15 */ -#endif - Word16 in_delay; /* TODO: JBM check if this needs to be adjusted in the dec */ + Word16 in_delay; /* TODO: JBM check if this needs to be adjusted in the dec */ UWord16 absEmin; UWord16 betaE; UWord16 maxAttExp; @@ -382,30 +335,18 @@ typedef struct ivas_agc_com_state_t /* Covariance structures */ typedef struct ivas_cov_smooth_state_t { -#ifdef IVAS_FLOAT_FIXED Word32 *pPrior_cov_real_fx[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; Word16 *q_cov_real_per_band[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; Word16 *q_prior_cov_real_per_band[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; -#else - float *pPrior_cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; -#endif int16_t prior_bank_idx; -#ifdef IVAS_FLOAT_FIXED Word32 *pSmoothing_factor_fx; /* Q31 */ -#else - float *pSmoothing_factor; -#endif int16_t num_bins; } ivas_cov_smooth_state_t; typedef struct ivas_cov_smooth_cfg_t { -#ifdef IVAS_FLOAT_FIXED Word32 max_update_rate_fx; /* Q31 */ -#else - float max_update_rate; -#endif int16_t min_pool_size; int16_t max_bands; int16_t num_bins; @@ -440,9 +381,6 @@ typedef struct ivas_spar_br_table_t typedef struct ivas_MASA_spherical_grid_deindexing { -#ifndef IVAS_FLOAT_FIXED - float theta_cb[NO_THETA16_MAX]; -#endif Word16 no_theta; Word16 no_phi[NO_THETA16_MAX]; @@ -463,32 +401,19 @@ typedef struct ivas_masa_descriptive_meta_struct typedef struct ivas_masa_directional_spatial_meta_struct { -#ifndef IVAS_FLOAT_FIXED - float azimuth[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float elevation[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float spread_coherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else - Word32 azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ - Word32 elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ - Word32 energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ - Word16 spread_coherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q15 */ -#endif + Word32 azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ + Word32 elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q22 */ + Word32 energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ + Word16 spread_coherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q15 */ UWord16 spherical_index[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; } MASA_DIRECTIONAL_SPATIAL_META; typedef struct ivas_masa_common_spatial_meta_struct { -#ifndef IVAS_FLOAT_FIXED - float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surround_coherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float remainder_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 diffuse_to_total_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; // Q30 Word16 surround_coherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; // Q15 Word32 remainder_to_total_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; // Q30 -#endif } MASA_COMMON_SPATIAL_META; @@ -543,21 +468,12 @@ typedef struct typedef struct ivas_qdirection_band_data_struct { UWord16 spherical_index[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifndef IVAS_FLOAT_FIXED - float azimuth[MAX_PARAM_SPATIAL_SUBFRAMES]; - float elevation[MAX_PARAM_SPATIAL_SUBFRAMES]; -#else - Word32 azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ - Word32 elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ -#endif + Word32 azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ + Word32 elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ Word16 elevation_m_alphabet[MAX_PARAM_SPATIAL_SUBFRAMES]; Word16 azimuth_m_alphabet[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifdef IVAS_FLOAT_FIXED Word32 energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q30 */ -#else - float energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif UWord8 distance[MAX_PARAM_SPATIAL_SUBFRAMES]; UWord16 bits_sph_idx[MAX_PARAM_SPATIAL_SUBFRAMES]; @@ -565,13 +481,8 @@ typedef struct ivas_qdirection_band_data_struct UWord16 energy_ratio_index_mod[MAX_PARAM_SPATIAL_SUBFRAMES]; UWord16 azimuth_index[MAX_PARAM_SPATIAL_SUBFRAMES]; UWord16 elevation_index[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifndef IVAS_FLOAT_FIXED - float q_azimuth[MAX_PARAM_SPATIAL_SUBFRAMES]; - float q_elevation[MAX_PARAM_SPATIAL_SUBFRAMES]; -#else Word32 q_azimuth_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ Word32 q_elevation_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q22 */ -#endif } IVAS_QDIRECTION_BAND_DATA; @@ -623,11 +534,7 @@ typedef struct ivas_masa_qmetadata_frame_struct Word16 sba_inactive_mode; /* Status values on metadata quality */ Word16 ec_flag; -#ifndef IVAS_FLOAT_FIXED - float dir_comp_ratio; -#else - Word16 dir_comp_ratio_fx; /* Q15 */ -#endif + Word16 dir_comp_ratio_fx; /* Q15 */ UWord8 is_masa_ivas_format; } IVAS_QMETADATA, *IVAS_QMETADATA_HANDLE; @@ -663,13 +570,8 @@ typedef struct ivas_param_mc_conf_struct /* structure for ROM Table */ Word32 ivas_total_brate; const PARAM_MC_ILD_MAPPING *ild_mapping_conf; const PARAM_MC_ICC_MAPPING *icc_mapping_conf; -#ifdef IVAS_FLOAT_FIXED const Word16 *ild_factors_fx; const Word32 *dmx_fac_fx; /* Q31 */ -#else - const float *ild_factors; - const float *dmx_fac; -#endif } PARAM_MC_CONF; @@ -679,11 +581,7 @@ typedef struct ivas_parametric_mc_metadata_value_coding_info_struct const UWord16 *sym_freq; const UWord16 *cum_freq_delta; const UWord16 *sym_freq_delta; -#ifdef IVAS_FLOAT_FIXED const Word16 *quantizer_fx; -#else - const float *quantizer; -#endif Word16 quantizer_size; Word16 uni_bits; @@ -695,11 +593,7 @@ typedef struct ivas_parametric_mc_metadata_struct const PARAM_MC_ICC_MAPPING *icc_mapping_conf; Word16 icc_map_size_full; Word16 param_frame_idx; -#ifdef IVAS_FLOAT_FIXED const Word16 *ild_factors_fx; -#else - const float *ild_factors; -#endif Word16 coding_band_mapping[PARAM_MC_MAX_PARAMETER_BANDS]; Word16 nbands_in_param_frame[PARAM_MC_PARAMETER_FRAMES]; Word16 bAttackPresent; @@ -725,11 +619,7 @@ typedef struct ivas_lfe_window int16_t fade_len; int16_t zero_pad_len; int16_t full_len; -#ifndef IVAS_FLOAT_FIXED - const float *pWindow_coeffs; -#else const Word32 *pWindow_coeffs_fx; -#endif } LFE_WINDOW_DATA, *LFE_WINDOW_HANDLE; @@ -751,18 +641,12 @@ typedef struct ivas_filters_process_state_t { Word16 order; Word16 filt_len; -#ifdef IVAS_FLOAT_FIXED Word32 num_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; Word32 den_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; Word32 state_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; Word16 num_e[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; Word16 den_e[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; Word16 state_e[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; -#else - float num[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; - float den[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; - float state[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN]; -#endif } ivas_filters_process_state_t; @@ -776,19 +660,11 @@ typedef struct ivas_trans_det_state_t ivas_filters_process_state_t env_hpf; ivas_filters_process_state_t env_fast; ivas_filters_process_state_t env_slow; -#ifdef IVAS_FLOAT_FIXED Word32 in_duck_coeff; Word32 out_duck_coeff; Word32 in_duck_gain; Word32 out_duck_gain; Word32 duck_mult_fac; -#else - float in_duck_coeff; - float out_duck_coeff; - float in_duck_gain; - float out_duck_gain; - float duck_mult_fac; -#endif } ivas_trans_det_state_t; @@ -865,16 +741,10 @@ typedef struct ivas_fb_mixer_state_structure Word16 prior_input_length; Word16 windowed_fr_offset; -#ifdef IVAS_FLOAT_FIXED const Word16 *pFilterbank_cross_fade_fx; Word16 cldfb_cross_fade_fx[CLDFB_NO_COL_MAX]; Word16 cldfb_cross_fade_q; const Word16 *pAna_window_fx; -#else - float cldfb_cross_fade[CLDFB_NO_COL_MAX]; - const float *pFilterbank_cross_fade; - const float *pAna_window; -#endif // IVAS_FLOAT_FIXED Word16 cldfb_cross_fade_start; Word16 cldfb_cross_fade_end; @@ -910,10 +780,6 @@ typedef struct ivas_param_ism_data_structure Word16 noisy_speech_buffer[PARAM_ISM_HYS_BUF_SIZE]; Word16 flag_equal_energy; -#ifndef IVAS_FLOAT_FIXED - float last_dmx_gain; - float last_cardioid_left[MAX_NUM_OBJECTS]; -#endif Word16 last_dmx_gain_fx; Word16 last_dmx_gain_e; @@ -921,7 +787,6 @@ typedef struct ivas_param_ism_data_structure } PARAM_ISM_CONFIG_DATA, *PARAM_ISM_CONFIG_HANDLE; -#ifdef IVAS_FLOAT_FIXED typedef struct { Word16 ratio1; /* Modified ratio index1 (hordiac_flag is 0) */ @@ -929,6 +794,5 @@ typedef struct Word16 hordiac_ratio1; /* Modified ratio index1 (hordiac_flag is 1) */ Word16 hoardia_ratio2; /* Modified ratio index2 (hordiac_flag is 1) */ } Masa_Diffuseness_Ratios; -#endif #endif /* IVAS_STAT_COM */ diff --git a/lib_com/ivas_stereo_dft_com.c b/lib_com/ivas_stereo_dft_com.c index 34a4573c9..8b377bdbc 100644 --- a/lib_com/ivas_stereo_dft_com.c +++ b/lib_com/ivas_stereo_dft_com.c @@ -39,9 +39,7 @@ #include "prot.h" #include "cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------- * stereo_dft_config() @@ -49,7 +47,6 @@ * DFT Stereo Configuration function *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_config_fx( STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ const Word32 brate, /* i : IVAS/CPE/nominal total bitrate */ @@ -195,117 +192,6 @@ void stereo_dft_config_fx( return; } -#else -void stereo_dft_config( - STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ - const int32_t brate, /* i : IVAS/CPE/nominal total bitrate */ - int16_t *bits_frame_nominal, /* o : primary channel nominal bits per frame */ - int16_t *bits_frame_nominal_2 /* o : secondary channel nominal bits per frame*/ -) -{ - if ( hConfig != NULL ) - { - hConfig->band_res = STEREO_DFT_BAND_RES_HIGH; - hConfig->prm_res = 2; - hConfig->dmx_active = STEREO_DFT_DMX_ACTIVE; - hConfig->ada_wb_res_cod_mode = 0; - } - - *bits_frame_nominal_2 = 5000 / FRAMES_PER_SEC; - - /* ITD, IPD and residual coding is not used in SID/No data */ - if ( brate == FRAME_NO_DATA ) - { - *bits_frame_nominal = FRAME_NO_DATA; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; - hConfig->band_res = STEREO_DFT_BAND_RES_LOW; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - } - } - else if ( brate == IVAS_SID_5k2 ) - { - *bits_frame_nominal = SID_2k40 / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; - hConfig->band_res = STEREO_DFT_BAND_RES_LOW; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - } - } - else if ( brate <= IVAS_13k2 ) - { - *bits_frame_nominal = ACELP_9k60 / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; - hConfig->band_res = STEREO_DFT_BAND_RES_LOW; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - } - } - else if ( brate <= IVAS_16k4 ) - { - *bits_frame_nominal = ACELP_13k20 / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; - hConfig->band_res = STEREO_DFT_BAND_RES_LOW; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - } - } - else if ( brate <= IVAS_24k4 ) - { - *bits_frame_nominal = ACELP_16k40 / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - } - } - else if ( brate <= IVAS_32k ) - { - *bits_frame_nominal = ACELP_24k40 / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->ada_wb_res_cod_mode = 1; - hConfig->res_pred_mode = STEREO_DFT_RESPRED_STEFI; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_1kHz; - } - } - else if ( brate <= IVAS_48k ) - { - *bits_frame_nominal = ACELP_32k / FRAMES_PER_SEC; - if ( hConfig != NULL ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_STEFI; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_1_6kHz; - } - } - else - { - assert( 0 && "Bit-rate not supported by DFT stereo." ); - } - - if ( hConfig != NULL && hConfig->force_mono_transmission ) - { - hConfig->res_pred_mode = STEREO_DFT_RESPRED_OFF; - hConfig->band_res = STEREO_DFT_BAND_RES_LOW; - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - hConfig->ada_wb_res_cod_mode = 0; - } - - /*sanity check*/ - if ( hConfig != NULL ) - { - assert( hConfig->prm_res <= STEREO_DFT_NBDIV ); - /* make sure residual switching and ESF are not active at the same time */ - assert( !( hConfig->ada_wb_res_cod_mode == 1 && hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) ); - } - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_band_config() @@ -313,7 +199,6 @@ void stereo_dft_config( * Stereo DFT bands condfiguration *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 stereo_dft_band_config_fx( Word16 *band_limits, /* o : DFT band limits */ const Word16 band_res, /* i : DFT band resolution */ @@ -374,57 +259,3 @@ Word16 stereo_dft_band_config_fx( return ( nbands ); } -#else -int16_t stereo_dft_band_config( - int16_t *band_limits, /* o : DFT band limits */ - const int16_t band_res, /* i : DFT band resolution */ - const int16_t NFFT, /* i : analysis/synthesis window length */ - const int16_t enc_dec /* i : flag to indicate enc vs dec */ -) -{ - int16_t nbands; - - /*sanity check*/ - assert( ( band_res == 1 || band_res == 0 || band_res == 2 ) && "stereo DFT: Parameter band resolution not supported!\n" ); - - band_limits[0] = 1; - nbands = 0; - while ( band_limits[nbands++] < NFFT / 2 ) - { - if ( band_res == 0 ) - { - assert( 0 && "stereo DFT: band config failed!\n" ); - } - else if ( band_res == 1 ) - { - if ( enc_dec == ENC ) - { - band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb4[nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); - } - else - { - band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb4[nbands] * ( (float) ( STEREO_DFT32MS_N_NS ) / STEREO_DFT_N_NS ) ); - } - - assert( ( nbands < STEREO_DFT_ERB4_BANDS ) && "stereo DFT: band config failed!\n" ); - } - else - { - if ( enc_dec == ENC ) - { - band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb8[nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); - } - else - { - band_limits[nbands] = (int16_t) round_f( dft_band_limits_erb8[nbands] * ( (float) ( STEREO_DFT32MS_N_NS ) / STEREO_DFT_N_NS ) ); - } - - assert( ( nbands < STEREO_DFT_ERB8_BANDS ) && "stereo DFT: band config failed!\n" ); - } - } - nbands--; - band_limits[nbands] = NFFT / 2; /*Nyquist Freq*/ - - return ( nbands ); -} -#endif diff --git a/lib_com/ivas_stereo_eclvq_com.c b/lib_com/ivas_stereo_eclvq_com.c deleted file mode 100644 index c5880e86c..000000000 --- a/lib_com/ivas_stereo_eclvq_com.c +++ /dev/null @@ -1,99 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#include -#include "options.h" -#include -#include "ivas_prot.h" -#include "ivas_cnst.h" -#include -#include "prot.h" -#include "wmc_auto.h" - -/*--------------------------------------------------------------- - * ECSQ_init_instance() - * - * initialize the encoder or decoder instance ecsq_inst, using the configuration index config_index; - * ac_handle is a pointer to a structure containing the bitstream writer and the arithmetic coding state; - * the return value is the approximate number of bits written, expressed in 22Q10 fixed-point representation - * ---------------------------------------------------------------*/ - -void ECSQ_init_instance( - ECSQ_instance *ecsq_inst, - const int16_t config_index, - void *ac_handle ) -{ - ecsq_inst->config_index = config_index; - ecsq_inst->encoding_active = 1; - ecsq_inst->bit_count_estimate = 0; - ecsq_inst->ac_handle = ac_handle; - - return; -} - -/*--------------------------------------------------------------- - * ECSQ_dequantize_gain() - * - * dequantize global gain index - * ---------------------------------------------------------------*/ - -float ECSQ_dequantize_gain( - const int16_t index ) -{ - float global_gain; - - global_gain = powf( 10.0f, (float) index * ECLVQ_INV_GLOBAL_GAIN_FACTOR ); - - return global_gain; -} - -/*--------------------------------------------------------------- - * ECSQ_dequantize_vector() - * - * dequantize an integer-valued vector using optimal reconstruction points, which depend on the value of config_index - * ---------------------------------------------------------------*/ - -void ECSQ_dequantize_vector( - const int16_t *input, - const float global_gain, - const int16_t N, - float *output ) -{ - int16_t i; - - for ( i = 0; i < N; ++i ) - { - output[i] = (float) input[i] * global_gain; - } - - return; -} diff --git a/lib_com/ivas_stereo_eclvq_com_fx.c b/lib_com/ivas_stereo_eclvq_com_fx.c index aebde1530..30d95afe9 100644 --- a/lib_com/ivas_stereo_eclvq_com_fx.c +++ b/lib_com/ivas_stereo_eclvq_com_fx.c @@ -40,7 +40,6 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------- * ECSQ_init_instance_fx() * @@ -114,4 +113,3 @@ void ECSQ_dequantize_vector_fx( return; } -#endif diff --git a/lib_com/ivas_stereo_ica_com.c b/lib_com/ivas_stereo_ica_com.c deleted file mode 100644 index bc2b0b788..000000000 --- a/lib_com/ivas_stereo_ica_com.c +++ /dev/null @@ -1,223 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -#include -#include -#include "options.h" -#include "cnst.h" -#include "ivas_cnst.h" -#include "prot.h" -#include "ivas_prot.h" -#include "wmc_auto.h" -#include "rom_com.h" -#include "ivas_rom_com.h" - -/*--------------------------------------------------------------- - * interpTargetChannel() - * - * Target signal correction for shift variations. - * The pointer passsed into this function is assumed to be chanR/chanL + currNCShift. - * ---------------------------------------------------------------*/ - -#define SPREAD_FACTOR1 ( 1.0f / INTERP_FACTOR1 ) - -static void interpTargetChannel( - float *target, - const int16_t prevShift, - const int16_t currShift, - const int16_t L_shift_adapt ) -{ - int16_t i, j, k, /*m,*/ d, N, signShift, lim1, lim2; - const float *win; - float *ptr1, *ptr2; - float tempBuff1[INTERP_FACTOR1 * ( L_SHIFT_ADAPT_MAX + 2 * N_MAX_SHIFT_CHANGE + 2 )], tempBuff2[L_SHIFT_ADAPT_MAX - 1]; - float x[4], y[4], tempF, tempF1; - float interp_factor2, factor; - float spread_factor2; - double tempD1, tempD2; - - d = -( currShift - prevShift ); - signShift = ( d >= 0 ) ? ( 1 ) : ( -1 ); - - if ( d == 0 ) - { - /* this can happen in DFT->TD switching */ - return; - } - - N = L_shift_adapt; - factor = ( (float) N ) / abs( d ); - interp_factor2 = factor / INTERP_FACTOR1; - spread_factor2 = 1.0f / interp_factor2; - - /* start from (target - N - d + 1) : (extra lag = step1) :to: (target - 1 - d) : (extra lag = d) */ - /* sinc interp by a factor of 2 */ - win = ica_sincInterp2 + SINC_ORDER1; - ptr1 = target; - ptr2 = tempBuff1 + ( N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; - - for ( i = -( N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; i < ( N + N_MAX_SHIFT_CHANGE + 1 ) * INTERP_FACTOR1; i++ ) - { - if ( i & 0x1 ) - { - ptr2[i] = 0.0f; - /* lim1 = ceil((i - SINC_ORDER1)*SPREAD_FACTOR1); */ - /* lim2 = floor((i + SINC_ORDER1)*SPREAD_FACTOR1); */ - tempF = ( i - SINC_ORDER1 ) * SPREAD_FACTOR1; - lim1 = (int16_t) ( tempF ); - if ( lim1 < tempF ) - { - lim1++; - } - - tempF = ( i + SINC_ORDER1 ) * SPREAD_FACTOR1; - lim2 = (int16_t) ( tempF ); - if ( lim2 > tempF ) - { - lim2--; - } - - for ( j = lim1; j <= lim2; j++ ) - { - ptr2[i] += win[j * INTERP_FACTOR1 - i] * ptr1[j]; - } - } - else - { - ptr2[i] = ptr1[(int16_t) ( i * SPREAD_FACTOR1 )]; - } - } - - /* cubic spline interp */ - ptr1 = ptr2; - ptr2 = tempBuff2; - - tempD1 = ( 1.0f / ( 6 * interp_factor2 * interp_factor2 * interp_factor2 ) ); - tempD2 = 3.0f * tempD1; - for ( tempF1 = d * factor - signShift, k = 0; k < N - 1; k++, tempF1 += ( factor - signShift ) ) - { - tempF = tempF1 * spread_factor2 - 1; - lim1 = (int16_t) ( tempF ); - if ( lim1 > tempF ) - { - lim1--; - } - - y[0] = ptr1[lim1]; - y[1] = ptr1[lim1 + 1]; - y[2] = ptr1[lim1 + 2]; - y[3] = ptr1[lim1 + 3]; - - x[0] = lim1 * interp_factor2; - x[1] = x[0] + interp_factor2; - x[2] = x[1] + interp_factor2; - x[3] = x[2] + interp_factor2; - - ptr2[k] = (float) ( ( y[3] * ( ( tempF1 - x[0] ) * ( tempF1 - x[1] ) * ( tempF1 - x[2] ) ) - y[0] * ( ( tempF1 - x[1] ) * ( tempF1 - x[2] ) * ( tempF1 - x[3] ) ) ) * tempD1 + ( y[1] * ( ( tempF1 - x[0] ) * ( tempF1 - x[2] ) * ( tempF1 - x[3] ) ) - y[2] * ( ( tempF1 - x[0] ) * ( tempF1 - x[1] ) * ( tempF1 - x[3] ) ) ) * tempD2 ); - } - - ptr1 = target; - mvr2r( ptr2, ptr1, N - 1 ); - - return; -} - - -/*--------------------------------------------------------------- - * Function targetCh_AlignStereoDFT() - * - * Align target channel in DFT stereo to correct for shift variations - * ---------------------------------------------------------------*/ - -static void targetCh_AlignStereoDFT( - float *target, - const int16_t prevShift, - const int16_t currShift, - const int16_t L_shift_adapt ) -{ - int16_t i; - float winSlope, alpha; - int16_t d; - - float fadeOutBuff[L_SHIFT_ADAPT_MAX]; - float fadeInBuff[L_SHIFT_ADAPT_MAX]; - - d = -( currShift - prevShift ); - - mvr2r( target + d, fadeOutBuff, L_shift_adapt ); - mvr2r( target, fadeInBuff, L_shift_adapt ); - - if ( L_shift_adapt > 0 ) - { - alpha = 0; - winSlope = 1.0f / L_shift_adapt; - for ( i = 0; i < L_shift_adapt; i++ ) - { - target[i] = alpha * fadeInBuff[i] + ( 1 - alpha ) * fadeOutBuff[i]; - alpha += winSlope; - } - } - else - { - mvr2r( fadeInBuff, target, L_shift_adapt ); - } - - return; -} - - -/*--------------------------------------------------------------- - * adjustTargetSignal() - * - * Target signal correction for shift variations. - * ---------------------------------------------------------------*/ - -void adjustTargetSignal( - float *target, - const int16_t prevShift, - const int16_t currShift, - const int16_t L_shift_adapt, - const int16_t method ) -{ - /* inter-frame shift variation and target shifting */ - - if ( method == 0 ) - { - interpTargetChannel( target, prevShift, currShift, L_shift_adapt ); - } - else - { - targetCh_AlignStereoDFT( target, prevShift, currShift, L_shift_adapt ); - } - - return; -} diff --git a/lib_com/ivas_stereo_ica_com_fx.c b/lib_com/ivas_stereo_ica_com_fx.c index e408d6b96..3ebfd99c1 100644 --- a/lib_com/ivas_stereo_ica_com_fx.c +++ b/lib_com/ivas_stereo_ica_com_fx.c @@ -43,9 +43,7 @@ #include "rom_com.h" #include "ivas_rom_com.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*--------------------------------------------------------------- * interpTargetChannel_fx() @@ -118,7 +116,6 @@ Word32 inv_table_145[N_MAX_SHIFT_CHANGE + 1] = { Word32 tableD1_145[N_MAX_SHIFT_CHANGE + 1] = { 0, 15027, 120219, 405740, 961755, 1878428, 3245924, 5154407, 7694041, 10954993, 15027425, 20001503, 25967392, 33015256, 41235259, 50717555, 61552334, 73829752, 87639951, 103073111, 120219402 }; // Q35 -#ifdef IVAS_FLOAT_FIXED static void interpTargetChannel_fx( Word32 *target_fx, // qsynth const Word16 prevShift, // Q0 @@ -338,14 +335,12 @@ static void interpTargetChannel_fx( return; } -#endif /*--------------------------------------------------------------- * Function targetCh_AlignStereoDFT() * * Align target channel in DFT stereo to correct FOR shift variations * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void targetCh_AlignStereoDFT_fx( Word32 *target_fx, // qsynth const Word16 prevShift, // Q0 @@ -405,14 +400,12 @@ static void targetCh_AlignStereoDFT_fx( return; } -#endif /*--------------------------------------------------------------- * adjustTargetSignal() * * Target signal correction FOR shift variations. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void adjustTargetSignal_fx( Word32 *target_fx, // qsynth const Word16 prevShift, // Q0 @@ -433,4 +426,3 @@ void adjustTargetSignal_fx( return; } -#endif diff --git a/lib_com/ivas_stereo_mdct_bands_com.c b/lib_com/ivas_stereo_mdct_bands_com.c index 903f7adee..153f477b6 100644 --- a/lib_com/ivas_stereo_mdct_bands_com.c +++ b/lib_com/ivas_stereo_mdct_bands_com.c @@ -39,10 +39,8 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * Local union @@ -65,7 +63,6 @@ typedef union * initialize stereo band tables for MDCT stereo *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_mdct_init_bands_fx( const Word16 L_frame, /* i : frame length Q0*/ const Word16 tmp_tcx_mode, /* i : tcx mode (TCX10, TCX 20), -1 if transition frame Q0*/ @@ -314,156 +311,6 @@ void stereo_mdct_init_bands_fx( } return; } -#else -void stereo_mdct_init_bands( - const int16_t L_frame, /* i : frame length */ - const int16_t tmp_tcx_mode, /* i : tcx mode (TCX10, TCX 20), -1 if transition frame */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t igf, /* i : flag indicating if IGF is used */ - const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ - int16_t *sfbOffset, /* o : sfb offset table */ - int16_t *sfbCnt /* o : number of sfbs */ -) -{ - SBPARAMS sfbParam; - int16_t i, cnt, specStartOffset, L_frameTCX, tcx_mode; - const uint8_t *sfbWidths; - - if ( tmp_tcx_mode > 0 ) - { - tcx_mode = tmp_tcx_mode; - L_frameTCX = ( tcx_mode == TCX_20_CORE ) ? L_frame : ( L_frame / 2 ); - } - else - { - /*transition frame*/ - L_frameTCX = L_frame + L_frame / 4; - tcx_mode = TCX_20_CORE; - } - - /* select table */ - if ( L_frame == L_FRAME48k ) - { - sfbParam.steBands = mdctStereoBands_32000_640; - - cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[0] : sfbParam.steBands->bndCnt_TCX10[0] ); - - sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 ); - } - else - { - if ( element_brate < IVAS_96k ) - { - sfbParam.steBands = mdctStereoBands_32000_640; - - switch ( L_frame ) - { - case L_FRAME32k: - cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[1] : sfbParam.steBands->bndCnt_TCX10[1] ); - break; - case L_FRAME25_6k: - cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[2] : sfbParam.steBands->bndCnt_TCX10[2] ); - break; - case L_FRAME16k: - cnt = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bdnCnt_TCX20[3] : sfbParam.steBands->bndCnt_TCX10[3] ); - break; - default: - assert( !"Subband division not defined for this frame size" ); - return; - } - - sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.steBands->bandLengthsTCX20 : sfbParam.steBands->bandLengthsTCX10 ); - } - else - { - switch ( L_frame ) - { - case L_FRAME48k: - case L_FRAME32k: - sfbParam.lpcBndsParam = sw32000Hz; - break; - case L_FRAME25_6k: - sfbParam.lpcBndsParam = sw25600Hz; - break; - case L_FRAME16k: - sfbParam.lpcBndsParam = sw16000Hz; - break; - default: - assert( !"Subband division not defined for this frame size" ); - return; - } - - sfbWidths = ( tcx_mode == TCX_20_CORE ? sfbParam.lpcBndsParam->bandLengthsTCX20 : sfbParam.lpcBndsParam->bandLengthsTCX10 ); - cnt = 64; - } - } - - /* calc sfb offsets */ - specStartOffset = 0; - - for ( i = 0; i < cnt; i++ ) - { - sfbOffset[i] = min( specStartOffset, L_frameTCX ); - specStartOffset += sfbWidths[i]; - - if ( sfbOffset[i] >= L_frameTCX ) - { - break; - } - } - - *sfbCnt = i; - sfbOffset[*sfbCnt] = min( specStartOffset, L_frameTCX ); - - if ( igf ) - { - int16_t sfbOldCnt = *sfbCnt; - int16_t igfSfbStep = hIgfGrid->infoIsRefined ? 2 : 1; - int16_t k; - - /* modify sfb bands according to igf grid */ - assert( hIgfGrid != NULL ); - - /* find sfb where IGF starts */ - for ( i = 0; i <= *sfbCnt; i++ ) - { - if ( sfbOffset[i] >= hIgfGrid->startLine ) - { - /* set band border to igf start line */ - sfbOffset[i] = hIgfGrid->startLine; - *sfbCnt = i; - break; - } - } - /* change bands above the igf start line to match igf bands */ - for ( i = 1, k = igfSfbStep; i < hIgfGrid->swb_offset_len; i++, k += igfSfbStep ) - { - sfbOffset[*sfbCnt + i] = hIgfGrid->swb_offset[k]; - } - - *sfbCnt += ( hIgfGrid->swb_offset_len - 1 ); - - /* better save than sorry, overwrite anything that is left above */ - for ( i = *sfbCnt + 1; i < sfbOldCnt + 1; i++ ) - { - sfbOffset[i] = 0; - } - } - else - { - if ( sfbOffset[*sfbCnt] < L_frameTCX ) - { - int16_t nMissingBins = L_frameTCX - sfbOffset[*sfbCnt]; - if ( sfbWidths[i] / 2 < nMissingBins ) - { - ( *sfbCnt )++; - } - sfbOffset[*sfbCnt] = L_frameTCX; - } - } - return; -} -#endif /*-------------------------------------------------------------------* * stereo_mdct_init_igf_start_band() @@ -471,7 +318,6 @@ void stereo_mdct_init_bands( * initialize start band of the IGF in MDCT stereo *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_mdct_init_igf_start_band_fx( STEREO_MDCT_BAND_PARAMETERS *stbParams, /* i/o: stereo frequency band parameters */ const Word16 transFac, /* i : transform factor Q14*/ @@ -502,33 +348,3 @@ void stereo_mdct_init_igf_start_band_fx( return; } -#else -void stereo_mdct_init_igf_start_band( - STEREO_MDCT_BAND_PARAMETERS *stbParams, /* i/o: stereo frequency band parameters */ - const float transFac, /* i : transform factor */ - const int16_t bwidth, /* i : audio bandwidth */ - const int32_t element_brate /* i : element bitrate */ -) -{ - int16_t i, bitRateIndex, igfStartLine; - const int16_t *swb_offset; - - bitRateIndex = IGF_MapBitRateToIndex_flt( element_brate, bwidth, IVAS_CPE_MDCT, 0 ); - swb_offset = &swb_offset_LB_new[bitRateIndex][1]; - igfStartLine = IGF_ApplyTransFac_flt( swb_offset[0], transFac ); - - for ( i = 0; i < stbParams->sfbCnt; i++ ) - { - if ( igfStartLine == stbParams->sfbOffset[i] ) - { - stbParams->sfbIgfStart = i; - break; - } - } - - stbParams->nBandsStereoCore = stbParams->sfbIgfStart; - - - return; -} -#endif diff --git a/lib_com/ivas_stereo_mdct_stereo_com.c b/lib_com/ivas_stereo_mdct_stereo_com.c index 7f8f1b55b..45e734fea 100644 --- a/lib_com/ivas_stereo_mdct_stereo_com.c +++ b/lib_com/ivas_stereo_mdct_stereo_com.c @@ -36,10 +36,8 @@ #include "ivas_prot.h" #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * splitAvailableBits() @@ -47,7 +45,6 @@ * split available bits between channels based on the split ratio *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void splitAvailableBits_fx( const Word16 total_bits, /* i : total available bits for TCX coding Q0*/ const Word16 split_ratio, /* i : split ratio Q0*/ @@ -73,25 +70,3 @@ void splitAvailableBits_fx( return; } -#else -void splitAvailableBits( - const int16_t total_bits, /* i : total available bits for TCX coding */ - const int16_t split_ratio, /* i : split ratio */ - const int16_t isSBAStereoMode, /* i : signal core coding for SBA */ - int16_t *bits_ch0, /* o : bits for channel 0 */ - int16_t *bits_ch1 /* o : bits for channel 1 */ -) -{ - assert( split_ratio >= 1 && split_ratio < SMDCT_BITRATE_RATIO_RANGE ); - - *bits_ch0 = split_ratio * total_bits / SMDCT_BITRATE_RATIO_RANGE; - /* for SBA mode bias the distribution towards the W channel */ - if ( split_ratio < 7 && isSBAStereoMode ) - { - *bits_ch0 += (int16_t) ( 0.2 * *bits_ch0 ); - } - *bits_ch1 = total_bits - *bits_ch0; - - return; -} -#endif diff --git a/lib_com/ivas_stereo_psychlpc_com.c b/lib_com/ivas_stereo_psychlpc_com.c index 1acadee31..e34e8fd18 100644 --- a/lib_com/ivas_stereo_psychlpc_com.c +++ b/lib_com/ivas_stereo_psychlpc_com.c @@ -39,9 +39,7 @@ #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * SpectrumWeighting_Init() @@ -49,7 +47,6 @@ * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void SpectrumWeighting_Init_fx( SpectrumWarping const *pSpectrumWarping, const Word16 isTCX20, /*Q0*/ @@ -66,24 +63,6 @@ static void SpectrumWeighting_Init_fx( return; } -#endif - -static void SpectrumWeighting_Init( - SpectrumWarping const *pSpectrumWarping, - const int16_t isTCX20, - PsychoacousticParameters *pPsychParams ) -{ - if ( isTCX20 ) - { - pPsychParams->bandLengths = pSpectrumWarping->bandLengthsTCX20; - } - else - { - pPsychParams->bandLengths = pSpectrumWarping->bandLengthsTCX10; - } - - return; -} /*-------------------------------------------------------------------* @@ -92,7 +71,6 @@ static void SpectrumWeighting_Init( * initialize a PsychoacousticParameters structure *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error PsychoacousticParameters_Init_fx( const Word32 sr_core, /* i : sampling rate of core-coder Q0*/ const Word16 nBins, /* i : Number of bins (spectral lines) Q0*/ @@ -137,51 +115,6 @@ ivas_error PsychoacousticParameters_Init_fx( return IVAS_ERR_OK; } -#endif - - -ivas_error PsychoacousticParameters_Init( - const int32_t sr_core, /* i : sampling rate of core-coder */ - const int16_t nBins, /* i : Number of bins (spectral lines) */ - const int8_t nBands, /* i : Number of spectrum subbands */ - const int16_t isTCX20, /* i : Flag indicating if the subband division is for TCX20 or TCX10 */ - const int16_t isWarped, /* i : Flag indicating if the scale is linear or warped */ - PsychoacousticParameters *pPsychParams ) -{ - - if ( pPsychParams == NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "PsychParams handle is NULL" ); - } - - pPsychParams->nBins = nBins; - pPsychParams->nBands = nBands; - - if ( !isWarped ) - { - pPsychParams->bandLengths = NULL; - } - else - { - assert( pPsychParams->nBands == 64 ); - switch ( sr_core ) - { - case 16000: - SpectrumWeighting_Init( sw16000Hz, isTCX20, pPsychParams ); - break; - case 25600: - SpectrumWeighting_Init( sw25600Hz, isTCX20, pPsychParams ); - break; - case 32000: - SpectrumWeighting_Init( sw32000Hz, isTCX20, pPsychParams ); - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Subband division not defined for this sampling rate" ); - } - } - - return IVAS_ERR_OK; -} /*-------------------------------------------------------------------* * InitPsychLPC() @@ -189,7 +122,6 @@ ivas_error PsychoacousticParameters_Init( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void InitPsychLPC_fx( const Word32 sr_core, /* i : sampling rate of core-coder Q0*/ const Word16 L_frame, /* i : frame length Q0*/ @@ -206,25 +138,6 @@ void InitPsychLPC_fx( return; } -#endif - -void InitPsychLPC( - const int32_t sr_core, /* i : sampling rate of core-coder */ - const int16_t L_frame, /* i : frame length */ - const TCX_CONFIG_HANDLE hTcxCfg /* i : TCX configuration handle */ -) -{ - int16_t L_frame_ext = L_frame + L_frame / 4; - - hTcxCfg->psychParamsCurrent = NULL; - - PsychoacousticParameters_Init( sr_core, L_frame / 2, 64, 0, 1, &hTcxCfg->psychParamsTCX10 ); - PsychoacousticParameters_Init( sr_core, L_frame, 64, 1, 1, &hTcxCfg->psychParamsTCX20 ); - PsychoacousticParameters_Init( sr_core, L_frame_ext, 64, 1, 0, &hTcxCfg->psychParamsTCX20AfterACELP ); - - return; -} - /*-------------------------------------------------------------------* * SetCurrentPsychParams() @@ -232,25 +145,6 @@ void InitPsychLPC( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void SetCurrentPsychParams( - const int16_t core, - const int16_t last_frame_was_concealed_cng, - TCX_CONFIG_HANDLE hTcxCfg ) -{ - if ( hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP && !last_frame_was_concealed_cng ) - { - assert( core == TCX_20_CORE ); - hTcxCfg->psychParamsCurrent = &hTcxCfg->psychParamsTCX20AfterACELP; - } - else - { - hTcxCfg->psychParamsCurrent = ( core == TCX_10_CORE ) ? &hTcxCfg->psychParamsTCX10 : &hTcxCfg->psychParamsTCX20; - } - - return; -} -#else void SetCurrentPsychParams( const Word16 core, /*Q0*/ const Word16 last_frame_was_concealed_cng, /*Q0*/ @@ -276,4 +170,3 @@ void SetCurrentPsychParams( return; } -#endif diff --git a/lib_com/ivas_stereo_td_bit_alloc.c b/lib_com/ivas_stereo_td_bit_alloc.c index 355f77620..0f5eb402e 100644 --- a/lib_com/ivas_stereo_td_bit_alloc.c +++ b/lib_com/ivas_stereo_td_bit_alloc.c @@ -40,13 +40,9 @@ #include "ivas_cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-------------------------------------------------------------------* @@ -76,367 +72,6 @@ * * Bitbudget distribution between Primary and Secondary channel in TD stereo *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tdm_bit_alloc( - const int16_t ivas_format, /* i : IVAS format */ - const int16_t ism_mode, /* i : ISM mode in combined format */ - const int32_t element_brate_wo_meta, /* i : element bitrate without metadata */ - const int16_t tdm_lp_reuse_flag, /* i : LPC reusage flag */ - int32_t *total_brate_pri, /* o : Allocated primary channel bitrate */ - int32_t *total_brate_sec, /* o : Allocated secondary channel bitrate */ - int16_t *tdm_low_rate_mode, /* o : secondary channel low rate mode flag*/ - const int16_t coder_type, /* i : secondary channel coder type */ - const int16_t ener_ratio_idx, /* i : correlation ratio indexe */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const int16_t bwidth_pri, /* i : bandwidth of the primary channel */ - const int16_t bwidth_sec, /* i : bandwidth of the secondary channel */ - const int16_t flag_ACELP16k_pri, /* i : ACELP@16kHz core flag, primary chan.*/ - const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const int16_t coder_type0, /* i : coder type (temporary in the encoder, from bitstream in decoder) */ - const int16_t tdm_inst_ratio_idx_ref /* i : instantaneous correlation ratio idx */ -) -{ - int16_t idx, four_subfr_fcb, two_subfr_fcb; - float bit_rate_diff; - int16_t BWE_brate, tmp_bits; - int16_t tdm_inst_ratio_idx = tdm_inst_ratio_idx_ref; - if ( tdm_inst_ratio_idx == TDM_NQ ) - { - tdm_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; /* Bit rate almost split half and half*/ - } - - /* Decision on using the low rate mode or the normal mode */ - /* default is using the low rate mode for the secondary channel coding*/ - /* UC and IC are automatically coded with low rate mode */ - *tdm_low_rate_mode = 1; - - /* Allocating different bitrate to channels */ - idx = 0; - if ( element_brate_wo_meta <= IVAS_13k2 ) - { - idx = 0; - } - else if ( element_brate_wo_meta <= IVAS_16k4 ) - { - idx = 1; - } - else if ( element_brate_wo_meta <= IVAS_24k4 ) - { - idx = 2; - } - else if ( element_brate_wo_meta <= IVAS_32k ) - { - idx = 3; - } - else if ( element_brate_wo_meta <= IVAS_48k ) - { - idx = 4; - } - - if ( coder_type == UNVOICED && tdm_bit_allc_tbl[idx][coder_type] >= 4200 ) - { - *tdm_low_rate_mode = 0; - } - - /* Secondary channel based bitrate allocation */ - *total_brate_sec = tdm_bit_allc_tbl[idx][coder_type]; - - /* secondary channel bitrate allocation based on the energy scaling ratio */ - if ( ( ( ivas_format != MASA_ISM_FORMAT || ism_mode == ISM_MODE_NONE ) && ( ( coder_type != UNVOICED ) || tdm_LRTD_flag == 1 ) ) || ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE && coder_type > UNVOICED ) ) - { - bit_rate_diff = (float) ( element_brate_wo_meta - 2 * *total_brate_sec ); - - if ( tdm_LRTD_flag == 1 ) /* > element_brate > STEREO_22k or CT0 not used */ - { - /* further adjustment in function of the energy/correlation ratio */ - if ( coder_type == INACTIVE ) - { - *total_brate_sec = max( *total_brate_sec, (int16_t) ( 0.3f * ( element_brate_wo_meta - 500 ) / 100 ) * 100 ); - tmp_bits = (int16_t) ( -abs( tdm_inst_ratio_idx - 16 ) * 200 * idx ); - } - else - { - *total_brate_sec = max( *total_brate_sec, (int16_t) ( 0.5f * ( element_brate_wo_meta - 500 ) / 100 ) * 100 ); - /* tmp_bits = -abs(tdm_inst_ratio_idx-16)*200*idx; */ - tmp_bits = (int16_t) ( -abs( tdm_inst_ratio_idx - 16 ) * 100 * idx ); - } - - /* tmp_bits should be subtract from the secondary channel bitrate */ - /* If the primary channel doesn't correspond to the channel having the highest correlation to the mono- inverse the bitrate compensation */ - if ( ( ener_ratio_idx >= LRTD_STEREO_MID_IS_PRIM && tdm_inst_ratio_idx < LRTD_STEREO_MID_IS_PRIM ) || ( ener_ratio_idx < LRTD_STEREO_MID_IS_PRIM && tdm_inst_ratio_idx >= LRTD_STEREO_MID_IS_PRIM ) ) - { - tmp_bits *= -1; - } - bit_rate_diff = tmp_bits; - } - else - { - if ( ener_ratio_idx < LRTD_STEREO_MID_IS_PRIM ) - { - bit_rate_diff = ( LRTD_STEREO_MID_IS_PRIM - ener_ratio_idx ) * bit_rate_diff * 0.05f; - } - else - { - bit_rate_diff = ( ener_ratio_idx - LRTD_STEREO_MID_IS_PRIM ) * bit_rate_diff * 0.05f; - } - } - /*bit_rate_diff2 = ((int16_t)(10.f*(-0.5f*ener_ratio_LR+0.5f)*bit_rate_diff)/100)*100;*/ - *total_brate_sec += ( (int16_t) ( bit_rate_diff / 100 ) * 100 ); - *total_brate_sec = max( *total_brate_sec, tdm_bit_allc_tbl[idx][coder_type] ); - - if ( coder_type == INACTIVE && tdm_LRTD_flag == 0 ) - { - *total_brate_sec = min( *total_brate_sec, MIN_BRATE_SWB_BWE ); - } - - if ( ( ener_ratio_idx <= 1 || ener_ratio_idx >= 29 ) && coder_type >= UNVOICED ) - { - int16_t delta_brate = 0; - - if ( bwidth_pri > WB ) - { - delta_brate = 600; /* To slightly compensate for SWB BWE instead of WB BWE */ - if ( element_brate_wo_meta <= IVAS_16k4 ) - { - delta_brate = 1250; /* To compensate for SWB BWE instead of WB BWE */ - } - } - - if ( element_brate_wo_meta <= IVAS_13k2 ) - { - *total_brate_sec = max( *total_brate_sec, 5600 + delta_brate ); /* ~42-47 % of the total bitrate */ - } - else if ( element_brate_wo_meta <= IVAS_16k4 ) - { - *total_brate_sec = max( *total_brate_sec, 6500 + delta_brate ); /* ~40-43 % of the total bitrate */ - } - else if ( element_brate_wo_meta <= IVAS_24k4 ) - { - *total_brate_sec = max( *total_brate_sec, 9000 + delta_brate ); /* ~37-39 % of the total bitrate */ - } - else - { - *total_brate_sec = max( *total_brate_sec, 9600 + delta_brate ); /* ~30-32% of the total bitrate */ - } - } - else - { - *total_brate_sec = min( *total_brate_sec, (int16_t) ( 0.0045f * element_brate_wo_meta ) * 100 ); - } - - *total_brate_sec = min( *total_brate_sec, 18000 ); - } - else if ( coder_type == UNVOICED ) - { - if ( tdm_lp_reuse_flag == 0 ) - { - *total_brate_sec += ( 31 + 5 ) * FRAMES_PER_SEC; - } - } - - if ( coder_type <= UNVOICED ) - { - *total_brate_sec = min( *total_brate_sec, MAX_TDM_UC_BRATE ); - - if ( *total_brate_sec >= TDM_UC_NORMAL_MODE_MBRATE && tdm_lp_reuse_flag == 0 ) - { - *tdm_low_rate_mode = 0; - } - else if ( *total_brate_sec >= TDM_UC_NORMAL_MODE_MBRATE_LP_R ) - { - *tdm_low_rate_mode = 0; - } - else if ( ( tdm_lp_reuse_flag == 0 && *total_brate_sec < TDM_UC_NORMAL_MODE_MINBR_LP_R && coder_type == UNVOICED ) || ( tdm_lp_reuse_flag == 0 && *total_brate_sec < ( tdm_bit_allc_tbl[idx][0] + MID_LP_BRATE ) ) ) - { - *total_brate_sec += MID_LP_BRATE; - } - } - - /* verify that primary channel bitrate is higher than the minimum supported bitrate */ - if ( flag_ACELP16k_pri ) - { - BWE_brate = SWB_TBE_1k75; - if ( element_brate_wo_meta < IVAS_24k4 ) - { - BWE_brate = SWB_TBE_1k10; - } - - if ( bwidth_pri > WB && tdm_LRTD_flag == 0 ) - { - BWE_brate += ( STEREO_BITS_ICBWE + STEREO_ICBWE_MSFLAG_BITS ) * FRAMES_PER_SEC; - } - if ( bwidth_pri > SWB && tdm_LRTD_flag == 1 ) - { - BWE_brate += 300; - } - - if ( bwidth_pri == FB ) - { - BWE_brate += ( FB_TBE_1k8 - SWB_TBE_1k75 ); - } - - if ( element_brate_wo_meta - *total_brate_sec - BWE_brate < 14000 ) - { - *total_brate_sec = element_brate_wo_meta - 14000 - BWE_brate; - } - } - else - { - BWE_brate = SWB_TBE_1k75; - if ( bwidth_pri == WB ) - { - BWE_brate = WB_BWE_0k35; - if ( tdm_LRTD_flag == 0 ) - { - BWE_brate += 250; /* ICA Brate */ - } - } - else if ( tdm_LRTD_flag == 0 ) - { - BWE_brate += 350; /* ICA Brate */ - } - } - - if ( coder_type0 == TRANSITION ) - { - if ( element_brate_wo_meta > IVAS_13k2 ) - { - *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( ACELP_8k00 + BWE_brate ) ); - } - else - { - *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( ACELP_7k20 + BWE_brate ) ); - } - } - else - { - *total_brate_sec = min( *total_brate_sec, element_brate_wo_meta - ( 5900 + BWE_brate ) ); - } - - if ( coder_type == INACTIVE ) - { - *total_brate_sec = max( *total_brate_sec, tdm_bit_allc_tbl[0][0] ); /* sanity check to ensure the secondary channel always gets the minimal bitrate it needs */ - } - else - { - *total_brate_sec = max( *total_brate_sec, 3500 ); /* sanity check to ensure the secondary channel always gets the minimal bitrate it needs */ - } - - /* Secondary channel bitrate adjusment */ - /* First, adjust the bitrate depending of what is transmitted */ - /* Second, choose the number of subframe for ACELP core depending of the targetted bitratre */ - /* Finally, verify that the concordance between the number of subframe, the parameters sent and the bitrate available */ - if ( coder_type == GENERIC /* || coder_type == AUDIO*/ ) - { - /* Adjust the bitrate depending of what is transmitted */ - /* If LPC are transmitted, ensure enough bits are used */ - if ( tdm_lp_reuse_flag == 0 ) - { - /* Pitch is transmitted as well, further increase the bitrate */ - if ( tdm_Pitch_reuse_flag == 0 ) - { - *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SEC_LPC_RATE + MIN_SIGN_RATE ); - - if ( tdm_LRTD_flag == 1 && bwidth_sec == SWB ) - { - /* ensure that there are enough bits to code SWB TBE_1k10 as well */ - *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SEC_LPC_RATE + MIN_SIGN_RATE + SWB_TBE_1k10 ); - } - } - else /* only LPC is tranmitted -> if ( *total_brate_sec < MIN_SEC_BRATE+MIN_SEC_LPC_RATE ) */ - { - *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_LPC_RATE + MIN_SIGN_RATE ); - } - } - else if ( /*tdm_lp_reuse_flag == 1*/ tdm_Pitch_reuse_flag == 0 ) - { - *total_brate_sec = max( *total_brate_sec, MIN_FCB_SECRATE2 + MIN_SEC_ACB_RATE + MIN_SIGN_RATE ); - } - - /* Choose between 2 and 4 subfr, depending of the bitrate available and prevent the gap between the 2 atlernative */ - if ( tdm_LRTD_flag == 1 ) - { - four_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 4 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); - two_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); - } - else - { - four_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 4 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); - two_subfr_fcb = (int16_t) ( *total_brate_sec - ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC ); - } - - if ( tdm_lp_reuse_flag == 0 ) - { - four_subfr_fcb -= MIN_SEC_LPC_RATE; - two_subfr_fcb -= MIN_SEC_LPC_RATE; - } - - if ( tdm_Pitch_reuse_flag == 0 ) - { - four_subfr_fcb -= ( MIN_SEC_ACB_RATE + 10 * FRAMES_PER_SEC ); - two_subfr_fcb -= MIN_SEC_ACB_RATE; - } - - /* Too much bits for the 2 subfr model but not enough for the the 4 subfr model -> slightly reduce the 2nd channel bitrate */ - if ( two_subfr_fcb > 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC && four_subfr_fcb < MIN_4SUBFR_FCB_RATE * FRAMES_PER_SEC ) - { - if ( tdm_LRTD_flag == 1 ) - { - *total_brate_sec = 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC + ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS - STEREO_BITS_TCA + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC; - } - else - { - *total_brate_sec = 2 * MAX_SC_FCB_RATE * FRAMES_PER_SEC + ( TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + 1 + 2 * MIN_GAIN_BITS ) * FRAMES_PER_SEC; - } - - if ( tdm_lp_reuse_flag == 0 ) - { - *total_brate_sec += MIN_SEC_LPC_RATE; - } - - if ( tdm_Pitch_reuse_flag == 0 ) - { - *total_brate_sec += MIN_SEC_ACB_RATE; - } - } - else if ( four_subfr_fcb >= ( 40 ) * FRAMES_PER_SEC ) /* Enough bits to have minimally 2 x 12 + 2*7 bits FCB */ - { - *tdm_low_rate_mode = 0; /* Use normal rate mode */ - } - else /* Possible slight increase of secondary channel bit budget to compensate for FCB limited flexibility */ - { - int16_t tmp_rate, i; - tmp_rate = two_subfr_fcb; - idx = NB_RATE_POSS - 2; - - for ( i = 0; i < NB_RATE_POSS; i++ ) - { - if ( tmp_rate <= fast_FCB_rates_2sfr[i] ) - { - idx = i; - break; - } - } - *total_brate_sec += ( fast_FCB_rates_2sfr[idx] - tmp_rate ); - } - /* To prevent 13.2 kb/s for primary channel as some bitstream issues arrise with it */ - if ( element_brate_wo_meta - *total_brate_sec == ACELP_13k20 ) - { - *total_brate_sec += 100; - } - } - /* prevent 2.4 kb/s and 2.8 kb/s as they are reserved bitrates for DTX and VBR */ - if ( *total_brate_sec == PPP_NELP_2k80 || *total_brate_sec == SID_2k40 ) - { - *total_brate_sec -= 100; - } - - *total_brate_pri = element_brate_wo_meta - *total_brate_sec; - - return; -} - -#else void tdm_bit_alloc( const Word16 ivas_format, /* i : IVAS format Q0*/ const Word16 ism_mode, /* i : ISM mode in combined format Q0*/ @@ -912,61 +547,11 @@ move32(); return; } -#endif /*-------------------------------------------------------------------* * td_stereo_param_updt() * * copy certain TD stereo parameters from primary channel to secondary channel *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void td_stereo_param_updt( - const float lsp_old_PCh[], /* i : primary channel old LSPs */ - const float lsf_old_PCh[], /* i : primary channel old LSFs */ - const float pitch_buf_PCh[], /* i : primary channel pitch buffer */ - float tdm_lspQ_PCh[], /* o : Q LSPs for primary channel */ - float tdm_lsfQ_PCh[], /* o : Q LSFs for primary channel */ - float tdm_Pri_pitch_buf[], /* o : pitch values for primary channel */ - const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ - const int16_t tdm_use_IAWB_Ave_lpc /* i : flag to indicate the usage of mean inactive LP coefficients */ -) -{ - int16_t i; - - /* Copy some primary channel information into the secondary channel structure for later usage */ - if ( tdm_use_IAWB_Ave_lpc == 1 ) - { - mvr2r( IAWB_Ave, tdm_lsfQ_PCh, M ); - lsf2lsp( tdm_lsfQ_PCh, tdm_lspQ_PCh, M, INT_FS_12k8 ); - } - else if ( flag_ACELP16k == 1 ) - { - mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); - lsp_convert_poly( tdm_lspQ_PCh, L_FRAME, 0 ); - lsp2lsf( tdm_lspQ_PCh, tdm_lsfQ_PCh, M, INT_FS_12k8 ); - } - else - { - mvr2r( lsp_old_PCh, tdm_lspQ_PCh, M ); - mvr2r( lsf_old_PCh, tdm_lsfQ_PCh, M ); - } - - /* This is only to keep the buffer up-to-date */ - if ( flag_ACELP16k == 1 ) - { - for ( i = 0; i < NB_SUBFR; i++ ) - { - tdm_Pri_pitch_buf[i] = pitch_buf_PCh[i] * 0.8f; - tdm_Pri_pitch_buf[i] = max( tdm_Pri_pitch_buf[i], PIT_MIN ); - } - } - else - { - mvr2r( pitch_buf_PCh, tdm_Pri_pitch_buf, NB_SUBFR ); - } - - return; -} -#else void td_stereo_param_updt_fx( const Word16 lsp_old_PCh_fx[], /* i : primary channel old LSPs Q15 */ const Word16 lsf_old_PCh_fx[], /* i : primary channel old LSFs Qlog2(2.56) */ @@ -1016,9 +601,7 @@ void td_stereo_param_updt_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_LSF_intra_pred_zero_bits_fx() * @@ -1042,32 +625,7 @@ static void tdm_SCh_LSF_intra_pred_zero_bits_fx( return; } -#endif -/*-------------------------------------------------------------------* - * tdm_SCh_LSF_intra_pred_zero_bits() - * - * - *-------------------------------------------------------------------*/ - -static void tdm_SCh_LSF_intra_pred_zero_bits( - const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ - float *pred_lsf_SCh, /* o : predicted secondary channel LSFs */ - const float *lsf_mean, /* i : secondary channel mean LSFs */ - const float beta /* i : pull to average beta factor */ -) -{ - int16_t i; - - /* pulling the LSFs closer to the average */ - for ( i = 0; i < M; i++ ) - { - pred_lsf_SCh[i] = beta * tdm_lsfQ_PCh[i] + ( 1.0f - beta ) * lsf_mean[i]; - } - - return; -} -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_LSF_intra_pred_tri_diag_mat_fx() * @@ -1130,57 +688,7 @@ static void tdm_SCh_LSF_intra_pred_tri_diag_mat_fx( return; } -#endif -/*-------------------------------------------------------------------* - * tdm_SCh_LSF_intra_pred_tri_diag_mat() - * - * - *-------------------------------------------------------------------*/ - -static void tdm_SCh_LSF_intra_pred_tri_diag_mat( - float *lsf_SCh, /* i/o: secondary channel LSFs */ - const float *lsf_mean_in, /* i : secondary channel mean LSFs (in) */ - const float *lsf_mean_out, /* i : secondary channel mean LSFs (out) */ - const float *prd_diag_3 /* i : secondary channel mean LSFs */ -) -{ - int16_t i; - float lsf_tmp[M]; - const float *prd_ptr; - float *lsf_tmp_ptr1; - float *lsf_tmp_ptr2; - float *lsf_SCh_ptr; - - prd_ptr = prd_diag_3; - - v_sub( lsf_SCh, lsf_mean_in, lsf_tmp, M ); - - lsf_tmp_ptr1 = lsf_tmp; - lsf_SCh_ptr = lsf_SCh; - - lsf_tmp_ptr2 = lsf_tmp_ptr1; - *lsf_SCh_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); - ( *lsf_SCh_ptr++ ) += ( *lsf_tmp_ptr1 ) * ( *prd_ptr++ ); - for ( i = 1; i < M - 1; i++ ) - { - lsf_tmp_ptr1 = lsf_tmp_ptr2; - *lsf_SCh_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); - lsf_tmp_ptr2 = lsf_tmp_ptr1; - *lsf_SCh_ptr += ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); - ( *lsf_SCh_ptr++ ) += ( *lsf_tmp_ptr1 ) * ( *prd_ptr++ ); - } - - lsf_tmp_ptr1 = lsf_tmp_ptr2; - *lsf_SCh_ptr = ( *lsf_tmp_ptr1++ ) * ( *prd_ptr++ ); - *lsf_SCh_ptr += ( *lsf_tmp_ptr1 ) * ( *prd_ptr ); - - v_add( lsf_SCh, lsf_mean_out, lsf_SCh, M ); - - return; -} - -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_LSF_intra_pred_fx() * @@ -1227,51 +735,7 @@ void tdm_SCh_LSF_intra_pred_fx( return; } -#endif - -/*-------------------------------------------------------------------* - * tdm_SCh_LSF_intra_pred() - * - * - *-------------------------------------------------------------------*/ - -void tdm_SCh_LSF_intra_pred( - const int32_t element_brate, /* i : element bitrate */ - const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ - float *pred_lsf_SCh /* o : predicted secondary channel LSFs */ -) -{ - float fixed_beta; - - if ( element_brate <= IVAS_13k2 ) - { - fixed_beta = 0.87F; - } - else if ( element_brate <= IVAS_16k4 ) - { - fixed_beta = 0.94F; - } - else if ( element_brate <= IVAS_24k4 ) - { - fixed_beta = 0.91F; - } - else if ( element_brate <= IVAS_32k ) - { - fixed_beta = 0.92F; - } - else - { - fixed_beta = 0.91F; - } - - tdm_SCh_LSF_intra_pred_zero_bits( tdm_lsfQ_PCh, pred_lsf_SCh, tdm_LSF_MEAN_PRED_QNT, fixed_beta ); - - tdm_SCh_LSF_intra_pred_tri_diag_mat( pred_lsf_SCh, tdm_LSF_MEAN_PRED_QNT_IN, tdm_LSF_MEAN_PRED_QNT_OUT, tdm_PRED_QNT_fixed_beta_prd_diag_3 ); - - return; -} -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_LSF_intra_pred_one_bit_dec_fx() * @@ -1301,37 +765,7 @@ static void tdm_SCh_LSF_intra_pred_one_bit_dec_fx( return; } -#else -/*-------------------------------------------------------------------* - * tdm_SCh_LSF_intra_pred_one_bit_dec() - * - * - *-------------------------------------------------------------------*/ - -static void tdm_SCh_LSF_intra_pred_one_bit_dec( - const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ - float *pred_lsf_SCh, /* o : predicted secondary channel LSFs */ - const float *lsf_mean, /* i : secondary channel mean LSFs */ - const float *Beta_Q_x, /* i : beta quantization values */ - const int16_t beta_index /* i : the quantization bits for beta (-1 if beta fixed)*/ -) -{ - int16_t i; - float beta; - - beta = Beta_Q_x[beta_index]; - - /* pulling the LSFs closer to the avergae */ - for ( i = 0; i < M; i++ ) - { - pred_lsf_SCh[i] = beta * tdm_lsfQ_PCh[i] + ( 1.0f - beta ) * lsf_mean[i]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_LSF_intra_pred_one_bit_enc_fx() * @@ -1393,58 +827,7 @@ static void tdm_SCh_LSF_intra_pred_one_bit_enc_fx( return; } -#else -/*-------------------------------------------------------------------* - * tdm_SCh_LSF_intra_pred_one_bit_enc() - * - * - *-------------------------------------------------------------------*/ - -static void tdm_SCh_LSF_intra_pred_one_bit_enc( - const float *lsf_SCh, /* i : secondary channel LSFs */ - const float *tdm_lsfQ_PCh, /* i : primary channel LSFs */ - float *pred_lsf_SCh, /* o : predicted secondary channel LSFs */ - const float *lsf_mean, /* i : secondary channel mean LSFs */ - const float *lsf_wgts_new, /* i : Improved wgts for LSFs */ - const float *Beta_Q_x, /* i : beta quantization values */ - int16_t *beta_index /* o : the quantization bits for beta (-1 if beta fixed) */ -) -{ - int16_t i; - float A_temp[M]; - float B_temp[M]; - float WD[2]; - for ( i = 0; i < M; i++ ) - { - A_temp[i] = lsf_SCh[i] - lsf_mean[i]; - B_temp[i] = lsf_mean[i] - tdm_lsfQ_PCh[i]; - } - - WD[0] = 0.f; - WD[1] = 0.f; - for ( i = 0; i < M; i++ ) - { - WD[0] += lsf_wgts_new[i] * SQR( A_temp[i] ) + 2.0f * Beta_Q_x[0] * lsf_wgts_new[i] * A_temp[i] * B_temp[i] + lsf_wgts_new[i] * SQR( Beta_Q_x[0] ) * SQR( B_temp[i] ); - WD[1] += lsf_wgts_new[i] * SQR( A_temp[i] ) + 2.0f * Beta_Q_x[1] * lsf_wgts_new[i] * A_temp[i] * B_temp[i] + lsf_wgts_new[i] * SQR( Beta_Q_x[1] ) * SQR( B_temp[i] ); - } - - if ( WD[0] < WD[1] ) - { - *beta_index = 0; - } - else - { - *beta_index = 1; - } - - tdm_SCh_LSF_intra_pred_one_bit_dec( tdm_lsfQ_PCh, pred_lsf_SCh, tdm_LSF_MEAN_RE_USE, Beta_Q_x, *beta_index ); - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * tdm_SCh_lsf_reuse_fx() * @@ -1495,55 +878,3 @@ void tdm_SCh_lsf_reuse_fx( return; } -#else -/*-------------------------------------------------------------------* - * tdm_SCh_lsf_reuse() - * - * - *-------------------------------------------------------------------*/ - -void tdm_SCh_lsf_reuse( - const int16_t enc_dec, /* i : encoder/decoder flag */ - const int32_t element_brate, /* i : element bitrate */ - float lsf_new[M], /* i/o: LSFs at the end of the frame */ - float lsp_new[M], /* i/o: LSPs at the end of the frame */ - const float tdm_lsfQ_PCh[M], /* i : primary channel LSFs */ - const float lsf_wgts[M], /* i : LSF weights */ - int16_t *beta_index /* i/o: quantization index */ -) -{ - const float *Beta_Q1bit_re_use; - - if ( element_brate <= IVAS_13k2 ) - { - Beta_Q1bit_re_use = tdm_Beta_Q1bit_re_use_13k2; - } - else if ( element_brate <= IVAS_16k4 ) - { - Beta_Q1bit_re_use = tdm_Beta_Q1bit_re_use_16k4; - } - else if ( element_brate <= IVAS_32k ) - { - Beta_Q1bit_re_use = tdm_Beta_Q1bit_re_use_24k4_32k; - } - else - { - Beta_Q1bit_re_use = tdm_Beta_Q1bit_re_use_48k; - } - - if ( enc_dec == ENC ) - { - tdm_SCh_LSF_intra_pred_one_bit_enc( lsf_new, tdm_lsfQ_PCh, lsf_new, tdm_LSF_MEAN_RE_USE, lsf_wgts, Beta_Q1bit_re_use, beta_index ); - } - else /* DEC */ - { - tdm_SCh_LSF_intra_pred_one_bit_dec( tdm_lsfQ_PCh, lsf_new, tdm_LSF_MEAN_RE_USE, Beta_Q1bit_re_use, *beta_index ); - } - - tdm_SCh_LSF_intra_pred_tri_diag_mat( lsf_new, tdm_LSF_MEAN_RE_USE_IN, tdm_LSF_MEAN_RE_USE_OUT, tdm_RE_USE_adaptive_beta_prd_diag_3 ); - - lsf2lsp( lsf_new, lsp_new, M, INT_FS_12k8 ); - - return; -} -#endif diff --git a/lib_com/ivas_tools.c b/lib_com/ivas_tools.c index 3130bd160..943d00620 100644 --- a/lib_com/ivas_tools.c +++ b/lib_com/ivas_tools.c @@ -39,12 +39,7 @@ #include "wmc_auto.h" #include "ivas_rom_com.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -#include -#endif #define ANGLE_90_DEG_Q22 377487360 #define ANGLE_180_DEG_Q22 754974720 @@ -74,7 +69,6 @@ float sumAbs( return tmp; } -#ifdef IVAS_FLOAT_FIXED Word32 sumAbs_fx( const Word32 *vec, /* i : input vector Qx*/ const Word16 lvec /* i : length of input vector Q0*/ @@ -92,7 +86,6 @@ Word32 sumAbs_fx( return tmp; } -#endif /*---------------------------------------------------------------------* * mvc2c() @@ -169,7 +162,6 @@ uint32_t ivas_syn_output( return noClipping; } -#ifdef IVAS_FLOAT_FIXED UWord32 ivas_syn_output_fx( Word32 *synth[], /* i/o: float synthesis signal q_synth*/ const Word16 q_synth, @@ -202,7 +194,6 @@ UWord32 ivas_syn_output_fx( return noClipping; /*Q0*/ } -#endif /*-------------------------------------------------------------------* @@ -237,7 +228,6 @@ void ivas_syn_output_f( return; } -#ifdef IVAS_FLOAT_FIXED void ivas_syn_output_f_fx( Word32 *synth[], /* i/o: float synthesis signal Q11*/ const Word16 output_frame, /* i : output frame length (one channel) Q0*/ @@ -263,14 +253,12 @@ void ivas_syn_output_f_fx( return; } -#endif /*-------------------------------------------------------------------* * mvr2r_inc() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void mvr2r_inc_fixed_one( const Word32 x_fx[], /* i : input vector Q29*/ const Word16 x_inc, /* i : increment for vector x[] Q0*/ @@ -370,7 +358,6 @@ void mvr2r_inc_fixed( return; } -#endif void mvr2r_inc( const float x[], /* i : input vector */ @@ -448,7 +435,6 @@ void v_add_inc( return; } -#ifdef IVAS_FLOAT_FIXED // for same q// void v_add_inc_fx( const Word32 x1[], /* i : Input vector 1 Qx*/ @@ -477,9 +463,7 @@ void v_add_inc_fx( } return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * v_mult_inc_fx() * @@ -555,7 +539,6 @@ void v_mult_inc_fixed( return; } -#endif /*-------------------------------------------------------------------* * v_mult_inc() @@ -589,7 +572,6 @@ void v_mult_inc( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * v_addc_fx() * @@ -613,13 +595,11 @@ void v_addc_fx( return; } -#endif /*-------------------------------------------------------------------* * v_addc() * * Addition of constant to vector *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void v_addc_fixed( const Word32 x[], /* i : Input vector Qx*/ const Word32 c, /* i : Constant Qx*/ @@ -637,7 +617,6 @@ void v_addc_fixed( return; } -#endif void v_addc( const float x[], /* i : Input vector */ @@ -656,7 +635,6 @@ void v_addc( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * v_min_fx() * @@ -715,7 +693,6 @@ void v_min_fx( return; } -#endif /*-------------------------------------------------------------------* * v_min() * @@ -745,7 +722,6 @@ void v_min( * * square root of vector *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void v_sqrt_fx( const Word32 x[], /* i : Input vector Qx*/ Word16 exp[], @@ -763,7 +739,6 @@ void v_sqrt_fx( return; } -#endif void v_sqrt( const float x[], /* i : Input vector */ @@ -788,7 +763,6 @@ void v_sqrt( * Subtraction of two vectors *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void v_sub_s16_fx( const Word16 x1[], /* i : Input vector 1 Qx*/ const Word16 x2[], /* i : Input vector 2 Qx*/ @@ -806,10 +780,8 @@ void v_sub_s16_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED void v_sub32_fx( const Word32 x1[], /* i : Input vector 1 Qx*/ const Word32 x2[], /* i : Input vector 2 Qx*/ @@ -827,7 +799,6 @@ void v_sub32_fx( return; } -#endif // IVAS_FLOAT_FIXED void v_sub_s( const int16_t x1[], /* i : Input vector 1 */ @@ -884,7 +855,6 @@ float dot_product_cholesky( return suma; } -#ifdef IVAS_FLOAT_FIXED Word32 dot_product_cholesky_fixed( const Word32 *x, /* i : vector x Q31 - exp_x*/ const Word32 *A, /* i : Cholesky matrix A Q31 - exp_A*/ @@ -920,8 +890,6 @@ Word32 dot_product_cholesky_fixed( return suma; } -#endif -#ifdef IVAS_FLOAT_FIXED void v_mult_mat_fixed( Word32 *y, /* o : the product x*A Qx - guardbits*/ const Word32 *x, /* i : vector x Qx*/ @@ -984,9 +952,7 @@ Word32 dot_product_cholesky_fx( return suma; } -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * v_mult_mat_fx() * @@ -1058,7 +1024,6 @@ void v_mult_mat_fx( return; } -#endif /*---------------------------------------------------------------------* * v_mult_mat() * @@ -1134,7 +1099,6 @@ float logsumexp( return logf( sum ) + max_exp; } -#ifdef IVAS_FLOAT_FIXED Word32 logsumexp_fx( const Word32 x[], /* i : input array x Q31 - x_e*/ const Word16 x_e, @@ -1177,14 +1141,12 @@ Word32 logsumexp_fx( temp32 = L_add( L_shr( temp32, sub( x_e, 6 ) ), max_exp ); // q = 31-x_e return temp32; /*31-x_e*/ } -#endif /*---------------------------------------------------------------------* * lin_interp() * * Linearly maps x from source range to the target range *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: mapped output value */ Word32 lin_interp32_fx( const Word32 x, /* i : the value to be mapped Qin*/ @@ -1226,7 +1188,6 @@ Word32 lin_interp32_fx( return temp32; /*Q_io*/ } -#endif /*! r: mapped output value */ float lin_interp( const float x, /* i : the value to be mapped */ @@ -1297,7 +1258,6 @@ int16_t check_bounds_s( return value_adj; } -#ifdef IVAS_FLOAT_FIXED Word16 check_bounds_s_fx( const Word16 value, /* i : Input value Q0*/ const Word16 low, /* i : Low limit Q0*/ @@ -1310,7 +1270,6 @@ Word16 check_bounds_s_fx( return value_adj; /*Q0*/ } -#endif /*-------------------------------------------------------------------* * check_bounds_l() @@ -1442,7 +1401,6 @@ int16_t matrix_product( return EXIT_SUCCESS; } -#ifdef IVAS_FLOAT_FIXED Word16 matrix_product_mant_exp_fx( const Word32 *X_fx, /* i : left hand matrix Q31 - X_fx_e*/ const Word16 X_fx_e, /* i : left hand matrix */ @@ -2034,8 +1992,6 @@ Word16 matrix_product_mant_exp( } -#endif - /*---------------------------------------------------------------------* * matrix_diag_product * @@ -2090,7 +2046,6 @@ int16_t matrix_diag_product( return EXIT_SUCCESS; } -#ifdef IVAS_FLOAT_FIXED Word16 matrix_diag_product_fx( const Word32 *X, /* i : left hand matrix Q31 - X_e*/ Word16 X_e, @@ -2213,9 +2168,7 @@ Word16 matrix_diag_product_fx_1( return EXIT_SUCCESS; } -#endif -#ifdef IVAS_FLOAT_FIXED Word16 diag_matrix_product_fx( const Word32 *Y, /* i : left hand diagonal matrix as vector containing the diagonal elements Q31 - Y_e*/ Word16 Y_e, @@ -2273,7 +2226,6 @@ Word16 diag_matrix_product_fx( return EXIT_SUCCESS; } -#endif /*---------------------------------------------------------------------* @@ -2329,7 +2281,6 @@ int16_t diag_matrix_product( return EXIT_SUCCESS; } -#ifdef IVAS_FLOAT_FIXED Word16 matrix_product_diag_fx( const Word32 *X, /* i : left hand matrix Q31 - X_e*/ Word16 X_e, @@ -2443,7 +2394,6 @@ Word16 matrix_product_diag_fx( return EXIT_SUCCESS; } -#endif /*---------------------------------------------------------------------* * matrix_product_diag() @@ -2541,7 +2491,6 @@ int16_t matrix_product_diag( return EXIT_SUCCESS; } -#ifdef IVAS_FLOAT_FIXED void cmplx_matrix_square_fx( const Word32 *realX, /* i : real part of the matrix Q31 - input_exp*/ const Word32 *imagX, /* i : imaginary part of the matrix Q31 - input_exp*/ @@ -2609,7 +2558,6 @@ void cmplx_matrix_square_fx( return; } -#endif /*---------------------------------------------------------------------* @@ -2693,7 +2641,6 @@ void v_multc_acc( return; } -#ifdef IVAS_FLOAT_FIXED void v_multc_acc_32_16( const Word32 x[], /* i : Input vector Qx*/ const Word16 c, /* i : Constant Q31*/ @@ -2728,7 +2675,6 @@ void v_multc_acc_32_32( return; } -#endif /*---------------------------------------------------------------------* * lls_interp_n() @@ -2784,7 +2730,6 @@ void lls_interp_n( return; } -#ifdef IVAS_FLOAT_FIXED void lls_interp_n_fx( Word16 x_fx[], /* i/o: input/output vector Q15*/ const Word16 N, /* i : length of the input vector Q0*/ @@ -2903,7 +2848,6 @@ void lls_interp_n_fx( return; } -#endif /* helper function for panning_wrap_angles */ @@ -2925,7 +2869,6 @@ static float wrap_azi( return azi; } -#ifdef IVAS_FLOAT_FIXED /* helper function for panning_wrap_angles */ static Word32 wrap_azi_fx( const Word32 azi_deg /* Q22 */ ) @@ -2946,7 +2889,6 @@ static Word32 wrap_azi_fx( return azi; /*Q22*/ } -#endif /*-------------------------------------------------------------------* * panning_wrap_angles() * @@ -3014,7 +2956,6 @@ void panning_wrap_angles( return; } } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * panning_wrap_angles_fx() * @@ -3090,7 +3031,6 @@ void panning_wrap_angles_fx( return; } } -#endif /*-------------------------------------------------------------------------* * v_sort_ind() @@ -3130,7 +3070,6 @@ void v_sort_ind( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* * v_sort_ind_fixed() * @@ -3177,7 +3116,6 @@ void v_sort_ind_fixed( return; } -#endif /*-------------------------------------------------------------------* * is_IVAS_bitrate() @@ -3216,7 +3154,6 @@ Word16 is_IVAS_bitrate_fx( * identify DTX frame bitrates *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 is_DTXrate( const Word32 ivas_total_brate /* i : IVAS total bitrate Q0*/ ) @@ -3233,21 +3170,6 @@ Word16 is_DTXrate( return dtx_rate_flag; /*Q0*/ } -#else -int16_t is_DTXrate( - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t dtx_rate_flag = 0; - - if ( is_SIDrate( ivas_total_brate ) || ( ivas_total_brate == FRAME_NO_DATA ) ) - { - dtx_rate_flag = 1; - } - - return dtx_rate_flag; -} -#endif /*-------------------------------------------------------------------* * is_SIDrate() @@ -3255,7 +3177,6 @@ int16_t is_DTXrate( * identify SID frame bitrates *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 is_SIDrate( const Word32 ivas_total_brate /* i : IVAS total bitrate Q0*/ ) @@ -3275,23 +3196,6 @@ Word16 is_SIDrate( return sid_rate_flag; /*Q0*/ } -#else -int16_t is_SIDrate( - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t sid_rate_flag = 0; - - if ( ( ivas_total_brate == SID_1k75 ) || - ( ivas_total_brate == SID_2k40 ) || - ( ivas_total_brate == IVAS_SID_5k2 ) ) - { - sid_rate_flag = 1; - } - - return sid_rate_flag; -} -#endif /*-------------------------------------------------------------------* @@ -3317,7 +3221,6 @@ float rand_triangular_signed( } } -#ifdef IVAS_FLOAT_FIXED Word16 rand_triangular_signed_fx( Word16 *seed, /*Q0*/ Word16 *exp_fac ) @@ -3668,4 +3571,3 @@ Word64 var_32_fx( return var; /*q*/ } -#endif diff --git a/lib_com/ivas_transient_det.c b/lib_com/ivas_transient_det.c index db0a9ca81..8f8905fdd 100644 --- a/lib_com/ivas_transient_det.c +++ b/lib_com/ivas_transient_det.c @@ -37,30 +37,21 @@ #include "prot.h" #include "ivas_cnst.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif #include "ivas_stat_com.h" /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#define IVAS_TDET_PARM_ENV_EPS ( 1e-5f ) -#ifdef IVAS_FLOAT_FIXED +#define IVAS_TDET_PARM_ENV_EPS ( 1e-5f ) #define IVAS_TDET_PARM_ENV_EPS_fx 21474 // Q31 -#endif -#ifdef IVAS_FLOAT_FIXED #define IVAS_TDET_DUCK_MULT_FAC ( 590558003 ) // Q29 #define IVAS_TDET_PARM_TRANS_THR ( 107374182 ) // Q30 #define IVAS_POINT_ONE_ONE_IN_Q30 ( 118111601 ) // Q30 -#else -#define IVAS_TDET_DUCK_MULT_FAC ( 1.1f ) -#define IVAS_TDET_PARM_TRANS_THR ( 0.1f ) -#endif #define IVAS_TDET_ONLY ( 1 ) /*env_hpf*/ @@ -68,35 +59,28 @@ #define IVAS_C_HPF_32k ( 0.554854910159853f ) #define IVAS_C_HPF_16k ( 0.307863971328499f ) -#ifdef IVAS_FLOAT_FIXED #define IVAS_C_HPF_48k_fx ( 0x2b370000 ) #define IVAS_C_HPF_32k_fx ( 0x2382be40 ) #define IVAS_C_HPF_16k_fx ( 0x13b40b20 ) -#endif /*env_fast*/ #define IVAS_C_FAST_48k ( 0.995842001845110f ) #define IVAS_C_FAST_32k ( 0.993769490623395f ) #define IVAS_C_FAST_16k ( 0.987577800493881f ) -#ifdef IVAS_FLOAT_FIXED #define IVAS_C_FAST_48k_fx ( 0x3fbbe000 ) #define IVAS_C_FAST_32k_fx ( 0x3f99eb40 ) #define IVAS_C_FAST_16k_fx ( 0x3f347980 ) -#endif /*env_slow*/ #define IVAS_C_SLOW_48k ( 0.999739617238810f ) #define IVAS_C_SLOW_32k ( 0.999609451284012f ) #define IVAS_C_SLOW_16k ( 0.999219055096324f ) -#ifdef IVAS_FLOAT_FIXED #define IVAS_C_SLOW_48k_fx ( 0x3ffbbc00 ) #define IVAS_C_SLOW_32k_fx ( 0x3ff99a00 ) #define IVAS_C_SLOW_16k_fx ( 0x3ff33480 ) -#endif -#ifdef IVAS_FLOAT_FIXED /*induck*/ #define IVAS_C_IN_DUCK_48k_fx ( 1073294525 ) // Q30 #define IVAS_C_IN_DUCK_32k_fx ( 1073070945 ) // Q30 @@ -106,17 +90,6 @@ #define IVAS_C_OUT_DUCK_48k_fx ( 1073294525 ) // Q30 #define IVAS_C_OUT_DUCK_32k_fx ( 1073070945 ) // Q30 #define IVAS_C_OUT_DUCK_16k_fx ( 1072400485 ) // Q30 -#else -/*induck*/ -#define IVAS_C_IN_DUCK_48k ( 0.999583420126834f ) -#define IVAS_C_IN_DUCK_32k ( 0.999375195271816f ) -#define IVAS_C_IN_DUCK_16k ( 0.998750780924581f ) - -/*outduck*/ -#define IVAS_C_OUT_DUCK_48k ( 0.999583420126834f ) -#define IVAS_C_OUT_DUCK_32k ( 0.999375195271816f ) -#define IVAS_C_OUT_DUCK_16k ( 0.998750780924581f ) -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_transient_det_init() @@ -124,7 +97,6 @@ * Trans det init fucntion *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_transient_det_init( ivas_trans_det_state_t *hTranDet, /* i/o: Transient detector handle */ const Word32 sampling_rate /* i : sampling rate Q0*/ @@ -261,96 +233,12 @@ static void ivas_transient_det_init( return; } -#else -static void ivas_transient_det_init( - ivas_trans_det_state_t *hTranDet, /* i/o: Transient detector handle */ - const int32_t sampling_rate /* i : sampling rate */ -) -{ - int16_t i; - float filt_coeff_arr[3][IVAS_BIQUAD_FILT_LEN << 1]; - - hTranDet->in_duck_gain = 1.0f; - hTranDet->out_duck_gain = 1.0f; - - FOR( i = 0; i < 3; i++ ) - { - set_zero( filt_coeff_arr[i], IVAS_BIQUAD_FILT_LEN << 1 ); - } - - SWITCH( sampling_rate ) - { - case 48000: - /*env_hpf*/ - filt_coeff_arr[0][0] = IVAS_C_HPF_48k; - filt_coeff_arr[0][1] = -IVAS_C_HPF_48k; - filt_coeff_arr[0][3] = 1.0f; - filt_coeff_arr[0][4] = -IVAS_C_HPF_48k; - /*env_fast*/ - filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_48k; - filt_coeff_arr[1][3] = 1.0f; - filt_coeff_arr[1][4] = -IVAS_C_FAST_48k; - /*env_slow*/ - filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_48k; - filt_coeff_arr[2][3] = 1.0f; - filt_coeff_arr[2][4] = -IVAS_C_SLOW_48k; - hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_48k; - hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_48k; - break; - case 32000: - /*env_hpf*/ - filt_coeff_arr[0][0] = IVAS_C_HPF_32k; - filt_coeff_arr[0][1] = -IVAS_C_HPF_32k; - filt_coeff_arr[0][3] = 1.0f; - filt_coeff_arr[0][4] = -IVAS_C_HPF_32k; - /*env_fast*/ - filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_32k; - filt_coeff_arr[1][3] = 1.0f; - filt_coeff_arr[1][4] = -IVAS_C_FAST_32k; - /*env_slow*/ - filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_32k; - filt_coeff_arr[2][3] = 1.0f; - filt_coeff_arr[2][4] = -IVAS_C_SLOW_32k; - hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_32k; - hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_32k; - break; - case 16000: - /*env_hpf*/ - filt_coeff_arr[0][0] = IVAS_C_HPF_16k; - filt_coeff_arr[0][1] = -IVAS_C_HPF_16k; - filt_coeff_arr[0][3] = 1.0f; - filt_coeff_arr[0][4] = -IVAS_C_HPF_16k; - /*env_fast*/ - filt_coeff_arr[1][0] = 1.0f - IVAS_C_FAST_16k; - filt_coeff_arr[1][3] = 1.0f; - filt_coeff_arr[1][4] = -IVAS_C_FAST_16k; - /*env_slow*/ - filt_coeff_arr[2][0] = 1.0f - IVAS_C_SLOW_16k; - filt_coeff_arr[2][3] = 1.0f; - filt_coeff_arr[2][4] = -IVAS_C_SLOW_16k; - hTranDet->in_duck_coeff = IVAS_C_IN_DUCK_16k; - hTranDet->out_duck_coeff = IVAS_C_OUT_DUCK_16k; - break; - } - - ivas_filters_init( &hTranDet->env_hpf, (const float *) filt_coeff_arr[0], IVAS_FILTER_ORDER_1 ); - ivas_filters_init( &hTranDet->env_fast, (const float *) filt_coeff_arr[1], IVAS_FILTER_ORDER_1 ); - ivas_filters_init( &hTranDet->env_slow, (const float *) filt_coeff_arr[2], IVAS_FILTER_ORDER_1 ); - - hTranDet->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC; - move32(); - - return; -} - -#endif /*------------------------------------------------------------------------- * ivas_transient_det_open() * * Allocate and initialize SPAR TD handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_transient_det_open_fx( ivas_trans_det_state_t **hTranDet_in, /* i/o: Transient detector handle */ const Word32 sampling_rate /* i : sampling rate Q0*/ @@ -369,26 +257,6 @@ ivas_error ivas_transient_det_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_transient_det_open( - ivas_trans_det_state_t **hTranDet_in, /* i/o: Transient detector handle */ - const Word32 sampling_rate /* i : sampling rate */ -) -{ - ivas_trans_det_state_t *hTranDet; - - if ( ( hTranDet = (ivas_trans_det_state_t *) malloc( sizeof( ivas_trans_det_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR TD\n" ); - } - - ivas_transient_det_init( hTranDet, sampling_rate ); - - *hTranDet_in = hTranDet; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -396,7 +264,6 @@ ivas_error ivas_transient_det_open( * * Deallocate and initialize Transient detector handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_transient_det_close_fx( ivas_trans_det_state_t **hTranDet /* i/o: Transient detector handle */ ) @@ -412,25 +279,7 @@ void ivas_transient_det_close_fx( return; } -#else -void ivas_transient_det_close( - ivas_trans_det_state_t **hTranDet /* i/o: Transient detector handle */ -) -{ - test(); - IF( hTranDet == NULL || *hTranDet == NULL ) - { - return; - } - - free( *hTranDet ); - *hTranDet = NULL; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_transient_det_process_fx() * @@ -477,74 +326,6 @@ void ivas_transient_det_process_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_transient_det_process() - * - * Transient detection process call - *-----------------------------------------------------------------------------------------*/ - -void ivas_transient_det_process( - ivas_trans_det_state_t *hTranDet, /* i/o: SPAR TD handle */ - float *pIn_pcm, /* i : input audio channels */ - const int16_t frame_len, /* i : frame length in samples */ - int16_t transient_det[2] /* o : transient det outputs */ -) -{ - float in_duck_gain[L_FRAME48k]; - int16_t num_sf, sf, sf_samp, idx; - float mem = hTranDet->in_duck_gain; - - ivas_td_decorr_get_ducking_gains( hTranDet, pIn_pcm, in_duck_gain, NULL, frame_len, IVAS_TDET_ONLY ); - - transient_det[0] = 0; - transient_det[1] = 0; - if ( mem - hTranDet->in_duck_gain > IVAS_TDET_PARM_TRANS_THR ) - { - transient_det[0] = 1; - } - - num_sf = 16; - sf_samp = frame_len / num_sf; - for ( sf = 1; sf <= num_sf; sf++ ) - { - idx = ( sf_samp * sf ) - 1; - if ( ( mem - in_duck_gain[idx] ) > ( IVAS_TDET_PARM_TRANS_THR * 1.1f ) ) - { - transient_det[1] = 1; - } - mem = in_duck_gain[idx]; - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_calc_duck_gain() - * - * Calculate ducking gain utility - *-----------------------------------------------------------------------------------------*/ - -static float ivas_calc_duck_gain( - const float duck_gain, - const float duck_coeff, - const float env_1, - const float env_2, - const float duck_mult_fac ) -{ - float duck_gain_out; - - duck_gain_out = ( duck_gain - 1 ) * duck_coeff + 1; - - if ( ( duck_mult_fac * env_1 ) < duck_gain_out * env_2 ) - { - duck_gain_out = duck_mult_fac * ( env_1 / env_2 ); - } - - return duck_gain_out; -} -#else /*-----------------------------------------------------------------------------------------* * Function ivas_calc_duck_gain_fx() * @@ -585,73 +366,6 @@ static Word32 ivas_calc_duck_gain_fx( return duck_gain_out; /*Q30*/ } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_td_decorr_get_ducking_gains() - * - * Calculate in/out ducking gains - *-----------------------------------------------------------------------------------------*/ - -void ivas_td_decorr_get_ducking_gains( - ivas_trans_det_state_t *hTranDet, /* i/o: Transient detector handle */ - float *pIn_pcm, - float *pIn_duck_gains, - float *pOut_duck_gains, - const int16_t frame_len, - const int16_t tdet_flag ) -{ - int16_t i; - float e_fast[L_FRAME48k], e_slow[L_FRAME48k]; - float in_duck_gain = hTranDet->in_duck_gain; - float out_duck_gain = hTranDet->out_duck_gain; - float in_duck_coeff = hTranDet->in_duck_coeff; - float out_duck_coeff = hTranDet->out_duck_coeff; - float duck_mult_fac = hTranDet->duck_mult_fac; - - mvr2r( pIn_pcm, e_fast, frame_len ); - - /* env hpf */ - ivas_filter_process( &hTranDet->env_hpf, e_fast, frame_len ); - - for ( i = 0; i < frame_len; i++ ) - { - e_fast[i] = (float) fabs( e_fast[i] ) + IVAS_TDET_PARM_ENV_EPS; - e_slow[i] = e_fast[i]; - } - - /* env fast*/ - ivas_filter_process( &hTranDet->env_fast, e_fast, frame_len ); - - /* env slow */ - ivas_filter_process( &hTranDet->env_slow, e_slow, frame_len ); - - if ( tdet_flag ) - { - for ( i = 0; i < frame_len; i++ ) - { - in_duck_gain = ivas_calc_duck_gain( in_duck_gain, in_duck_coeff, e_slow[i], e_fast[i], duck_mult_fac ); - pIn_duck_gains[i] = in_duck_gain; - } - hTranDet->in_duck_gain = in_duck_gain; - } - else - { - for ( i = 0; i < frame_len; i++ ) - { - in_duck_gain = ivas_calc_duck_gain( in_duck_gain, in_duck_coeff, e_slow[i], e_fast[i], duck_mult_fac ); - pIn_duck_gains[i] = in_duck_gain; - out_duck_gain = ivas_calc_duck_gain( out_duck_gain, out_duck_coeff, e_fast[i], e_slow[i], duck_mult_fac ); - pOut_duck_gains[i] = out_duck_gain; - } - hTranDet->in_duck_gain = in_duck_gain; - hTranDet->out_duck_gain = out_duck_gain; - } - - return; -} - -#else /*-----------------------------------------------------------------------------------------* * Function ivas_td_decorr_get_ducking_gains_fx() * @@ -735,4 +449,3 @@ void ivas_td_decorr_get_ducking_gains_fx( return; } -#endif diff --git a/lib_com/lag_wind.c b/lib_com/lag_wind.c index 82279af86..505cc0753 100644 --- a/lib_com/lag_wind.c +++ b/lib_com/lag_wind.c @@ -47,127 +47,9 @@ * Local constants *-------------------------------------------------------------------*/ -#define kLagWinThGain1_flt 0.6f -#define kLagWinThGain2_flt 0.3f - #define kLagWinThGain1 19661 /* 0.6f in Q15 */ #define kLagWinThGain2 9830 /* 0.3f in Q15 */ - -/*-------------------------------------------------------------* - * procedure lag_wind_flt() * - * ~~~~~~~~~ * - * lag windowing of the autocorrelations * - *-------------------------------------------------------------*/ - -void lag_wind_flt( - float r[], /* i/o: autocorrelations */ - const int16_t m, /* i : order of LP filter */ - const int32_t sr_core, /* i : sampling rate */ - const int16_t strength /* i : LAGW_WEAK, LAGW_MEDIUM, or LAGW_STRONG */ -) -{ - int16_t i; - const float *wnd; - - assert( 0 <= strength && strength <= NUM_LAGW_STRENGTHS ); - - switch ( sr_core ) - { - case 8000: - assert( m <= 16 ); - assert( strength == LAGW_STRONG ); - wnd = lag_window_8k_flt; - break; - case 12800: - assert( m <= 16 ); - wnd = lag_window_12k8_flt[strength]; - break; - case 16000: - assert( m <= 16 ); - wnd = lag_window_16k_flt[strength]; - break; - case 24000: - case 25600: - assert( m <= 16 ); - wnd = lag_window_25k6_flt[strength]; - break; - case 32000: - assert( m <= 16 ); - wnd = lag_window_32k_flt[strength]; - break; - case 48000: - assert( m <= 16 ); - assert( strength == LAGW_STRONG ); - wnd = lag_window_48k_flt; - break; - default: - assert( !"Lag window not implemented for this sampling rate" ); - return; - } - - for ( i = 0; i <= m; ++i ) - { - r[i] *= wnd[i]; - } - - return; -} - -/*-------------------------------------------------------------* - * procedure adapt_lag_wind_fx() - * - * - *-------------------------------------------------------------*/ - -void adapt_lag_wind_fx( - float r[], /* i/o: autocorrelations */ - const int16_t m, /* i : order of LP filter */ - const int16_t Top, /* i : open loop pitch lags from curr. frame (or NULL if n/a) */ - const float Tnc, /* i : open loop pitch gains from curr. frame (NULL if n/a) */ - const int32_t sr_core /* i : core sampling rate */ -) -{ - int16_t strength; - int16_t pitch_lag; - float pitch_gain; - - pitch_lag = (int16_t) Top; - pitch_gain = (float) Tnc; - - if ( pitch_lag < 80 ) - { - if ( pitch_gain > kLagWinThGain1_flt ) - { - strength = LAGW_STRONG; - } - else - { - strength = LAGW_MEDIUM; - } - } - else if ( pitch_lag < 160 ) - { - if ( pitch_gain > kLagWinThGain2_flt ) - { - strength = LAGW_MEDIUM; - } - else - { - strength = LAGW_WEAK; - } - } - else - { - strength = LAGW_WEAK; - } - - lag_wind_flt( r, m, sr_core, strength ); - - return; -} - - /*-------------------------------------------------------------* * procedure lag_wind: * * ~~~~~~~~~ * diff --git a/lib_com/logqnorm.c b/lib_com/logqnorm.c deleted file mode 100644 index a041cf797..000000000 --- a/lib_com/logqnorm.c +++ /dev/null @@ -1,197 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "prot.h" /* Function prototypes */ -#include "wmc_auto.h" - -/*-------------------------------------------------------------------------- - * logqnorm() - * - * Log quantization for norms of sub-vectors - *--------------------------------------------------------------------------*/ - -void logqnorm( - const float *x, /* i : coefficient vector */ - int16_t *k, /* o : index */ - const int16_t L, /* i : codebook length */ - const int16_t N, /* i : sub-vector size */ - const float *thren /* i : quantization thresholds */ -) -{ - int16_t i, j, j1, j2; - float temp, power; - - - temp = 0.0; - for ( i = 0; i < N; i++ ) - { - temp += ( x[i] * x[i] ); - } - - /* sqrt will be done later */ - temp *= inv_tbl[N]; - - if ( thren[0] * thren[0] - temp <= 0 ) - { - *k = 0; - } - else if ( thren[L - 2] * thren[L - 2] - temp > 0 ) - { - *k = L - 1; - } - else - { - power = (float) sqrt( temp ); - - j1 = 0; - j2 = L - 1; - while ( ( j2 - j1 ) > 1 ) - { - j = ( j1 + j2 ) >> 1; - if ( power >= thren[j] ) - { - j2 = j; - } - else - { - j1 = j; - } - } - - *k = j2; - } - - return; -} - - -/*-------------------------------------------------------------------------- - * logqnorm_2() - * - * - *--------------------------------------------------------------------------*/ - -void logqnorm_2( - const float *env_fl, /* o : index */ - const int16_t L, /* i : codebook length */ - const int16_t n_env_band, /* i : sub-vector size */ - const int16_t nb_sfm, /* i : sub-vector size */ - int16_t *ynrm, /* o : norm indices */ - int16_t *normqlg2, /* o : quantized norm values */ - const float *thren /* i : quantization thresholds */ -) -{ - int16_t i, j, j1, j2; - float temp, power; - - for ( i = n_env_band; i < nb_sfm; i++ ) - { - temp = env_fl[i - n_env_band]; - if ( thren[0] - temp <= 0 ) - { - *ynrm = 0; - } - else if ( thren[L - 2] - temp > 0 ) - { - *ynrm = L - 1; - } - else - { - power = temp; - j1 = 0; - j2 = L - 1; - while ( ( j2 - j1 ) > 1 ) - { - j = ( j1 + j2 ) >> 1; - if ( power >= thren[j] ) - { - j2 = j; - } - else - { - j1 = j; - } - } - *ynrm = j2; - } - *normqlg2 = dicnlg2_float[*ynrm]; - normqlg2++; - ynrm++; - } - - return; -} - -/*-------------------------------------------------------------------------- - * calc_norm() - * - * Calculate the norms for the spectral envelope - *--------------------------------------------------------------------------*/ - -void calc_norm( - const float *x, /* i : Input vector. */ - int16_t *norm, /* o : Quantization indices for norms */ - int16_t *normlg, /* o : Quantized norms in log2 */ - const int16_t start_band, /* i : Indice of band to start coding */ - const int16_t num_bands, /* i : Number of bands */ - const int16_t *band_len, /* i : Length of bands */ - const int16_t *band_start /* i : Start of bands */ -) -{ - int16_t nrm; - int16_t band; - - set_s( norm, 0, start_band ); - - logqnorm( &x[band_start[start_band]], &nrm, 32, band_len[start_band], thren_HQ ); - norm[start_band] = nrm; - normlg[start_band] = dicnlg2_float[nrm]; - - for ( band = start_band + 1; band < start_band + num_bands; band++ ) - { - logqnorm( &x[band_start[band]], &nrm, 40, band_len[band], thren_HQ ); - norm[band] = nrm; - normlg[band] = dicnlg2_float[nrm]; - } - - return; -} diff --git a/lib_com/logqnorm_fx.c b/lib_com/logqnorm_fx.c index cef2a6fa3..c7852bbe4 100644 --- a/lib_com/logqnorm_fx.c +++ b/lib_com/logqnorm_fx.c @@ -47,7 +47,6 @@ * * Log quantization for norms of sub-vectors *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void logqnorm_ivas_fx( const Word32 *x_fx, /* i : coefficient vector Qq*/ const Word16 q, /* i : q of coefficient vector */ @@ -132,7 +131,6 @@ void logqnorm_ivas_fx( } return; } -#endif void logqnorm_fx( const Word32 *L_x, /* i : coefficient vector Qx */ const Word16 qx, /* i : Q value of input */ @@ -278,7 +276,6 @@ void logqnorm_2_fx( * * Calculate the norms for the spectral envelope *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void calc_norm_ivas_fx( const Word32 *x_fx, /* i : Input vector.(Qin) */ Word16 *norm, /* o : Quantization indices for norms Q0 */ @@ -313,7 +310,6 @@ void calc_norm_ivas_fx( return; } -#endif void calc_norm_fx( const Word32 *L_x, /* i : Input vector. Qx */ const Word16 qx, /* i : Q value of input */ diff --git a/lib_com/longarith.c b/lib_com/longarith.c index 94a3adfe8..68ba282d5 100644 --- a/lib_com/longarith.c +++ b/lib_com/longarith.c @@ -39,10 +39,8 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -136,7 +134,6 @@ void longshiftright( return; } -#ifdef IVAS_FLOAT_FIXED void longshr( UWord32 a[], Word16 bits, @@ -158,7 +155,6 @@ void longshr( return; } -#endif /*-------------------------------------------------------------------* * longshiftleft() diff --git a/lib_com/low_rate_band_att.c b/lib_com/low_rate_band_att.c deleted file mode 100644 index 33265c6a5..000000000 --- a/lib_com/low_rate_band_att.c +++ /dev/null @@ -1,194 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - -/*--------------------------------------------------------------------------* - * fine_gain_pred() - * - * Fine gain prediction - *--------------------------------------------------------------------------*/ - -void fine_gain_pred( - const int16_t *sfm_start, /* i : Sub band start indices */ - const int16_t *sfm_end, /* i : Sub band end indices */ - const int16_t *sfm_size, /* i : Sub band bandwidths */ - const int16_t *i_sort, /* i : Energy sorting indices */ - const int16_t *K, /* i : Number of pulses per band */ - const int16_t *maxpulse, /* i : Maximum pulse per band */ - const int16_t *R, /* i : Bits per sub band (Q3) */ - const int16_t num_sfm, /* i : Number of sub bands */ - float *xq, /* i/o: Quantized vector /quantized vector with finegain adj */ - int16_t *y, /* i/o: Quantized vector */ - float *fg_pred, /* o : Predicted fine gains */ - const int16_t core /* i : Core */ -) -{ - int16_t i, band; - float gp; - float xx; - float accuracy; - int16_t k, bw; - float att; - - for ( band = 0; band < num_sfm; band++ ) - { - - k = K[i_sort[band]]; - if ( k > 0 ) - { - bw = sfm_size[i_sort[band]]; - xx = 0; - for ( i = sfm_start[i_sort[band]]; i < sfm_end[i_sort[band]]; i++ ) - { - xx += xq[i] * xq[i]; - } - - if ( xx > 0 ) - { - /* Normalize synthesis to RMS=1.0 */ - gp = (float) sqrt( bw / xx ); - - if ( core == HQ_CORE && R != NULL && R[i_sort[band]] <= 256 ) - { - accuracy = ( (float) k / (float) bw ) * maxpulse[i_sort[band]]; - att = 1.0f - 0.05f / accuracy; - att = max( 0.840896f, att ); /* Limit attenuation to norm quantizer error, 2^-0.25 */ - gp *= att; - } - - fg_pred[band] = gp; - } - else - { - fg_pred[band] = 0; - } - } - else - { - fg_pred[band] = 0; - for ( i = sfm_start[i_sort[band]]; i < sfm_end[i_sort[band]]; i++ ) - { - y[i] = 0; - xq[i] = 0; - } - } - } - return; -} - -/*--------------------------------------------------------------------------* - * get_max_pulses() - * - * Find the maximum pulse height (in unit pulses) in each band - *--------------------------------------------------------------------------*/ - -void get_max_pulses( - const int16_t *band_start, /* i : Sub band start indices */ - const int16_t *band_end, /* i : Sub band end indices */ - const int16_t *k_sort, /* i : Indices for sorting by energy */ - const int16_t *npulses, /* i : Pulses per sub band */ - const int16_t BANDS, /* i : Number of bands */ - int16_t *inp_vector, /* i/o: Encoded shape vectors */ - int16_t *maxpulse /* o : Maximum pulse height per band */ -) -{ - int16_t i, k; - int16_t npul; - int16_t maxp; - - for ( k = 0; k < BANDS; k++ ) - { - npul = npulses[k_sort[k]]; - maxp = 0; - if ( npul > 0 ) - { - for ( i = band_start[k_sort[k]]; i < band_end[k_sort[k]]; i++ ) - { - if ( abs( inp_vector[i] ) > maxp ) - { - maxp = (int16_t) abs( inp_vector[i] ); - } - } - } - maxpulse[k_sort[k]] = maxp; - } - - return; -} - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * fine_gain_dec() - * - * Fine gain decoder. Decodes fine gain adjustments and applies correction to - * predicted fine gains - *--------------------------------------------------------------------------*/ - -void fine_gain_dec( - Decoder_State *st, /* i/o: Decoder state struct */ - const int16_t *ord, /* i : Indices for energy order */ - const int16_t num_sfm, /* i : Number of bands */ - const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ - float *fg_pred /* i/o: Predicted gains / Corrected gains */ -) -{ - int16_t band; - int16_t gbits; - int16_t idx; - float gain_dbq; - - for ( band = 0; band < num_sfm; band++ ) - { - gbits = gain_bits[ord[band]]; - if ( fg_pred[band] != 0 && gbits > 0 ) - { - idx = get_next_indice( st, gbits ); - gain_dbq = finegain[gbits - 1][idx]; - - /* Update prediced gain with quantized correction */ - fg_pred[band] *= (float) pow( 10, gain_dbq * 0.05f ); - } - } - - return; -} -#endif diff --git a/lib_com/low_rate_band_att_fx.c b/lib_com/low_rate_band_att_fx.c index ef47fa18d..d70da04dd 100644 --- a/lib_com/low_rate_band_att_fx.c +++ b/lib_com/low_rate_band_att_fx.c @@ -6,9 +6,7 @@ #include "options.h" /* Compilation switches */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* @@ -16,7 +14,6 @@ * * Fine gain prediction *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_fine_gain_pred_fx( const Word16 *sfm_start, /* i : Sub band start indices */ const Word16 *sfm_end, /* i : Sub band end indices */ @@ -348,4 +345,3 @@ void fine_gain_dec_fx( return; } -#endif diff --git a/lib_com/lpc_tools.c b/lib_com/lpc_tools.c deleted file mode 100644 index 0c13ef7b1..000000000 --- a/lib_com/lpc_tools.c +++ /dev/null @@ -1,415 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include -#include "options.h" -#include -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "wmc_auto.h" -#include "prot_fx.h" - -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define MAX_LEN_LP 960 -#define SCALE1_LPC 2037.1832275390625f /* LSP to LSF conversion factor */ - - -/*---------------------------------------------------------------------* - * autocorr() - * - * Compute autocorrelations of input signal - *---------------------------------------------------------------------*/ - -void autocorr( - const float *x, /* i : input signal */ - float *r, /* o : autocorrelations vector */ - const int16_t m, /* i : order of LP filter */ - const int16_t len, /* i : window size */ - const float *wind, /* i : window */ - const int16_t rev_flag, /* i : flag to reverse window */ - const int16_t sym_flag, /* i : symmetric window flag */ - const int16_t no_thr /* i : flag to avoid thresholding */ -) -{ - float t[MAX_LEN_LP]; - float s; - int16_t i, j; - - /* Windowing of signal */ - if ( rev_flag == 1 ) - { - /* time reversed window */ - for ( i = 0; i < len; i++ ) - { - t[i] = x[i] * wind[len - i - 1]; - } - } - else if ( sym_flag == 1 ) - { - /* symmetric window of even length */ - for ( i = 0; i < len / 2; i++ ) - { - t[i] = x[i] * wind[i]; - } - - for ( ; i < len; i++ ) - { - t[i] = x[i] * wind[len - 1 - i]; - } - } - else /* assymetric window */ - { - for ( i = 0; i < len; i++ ) - { - t[i] = x[i] * wind[i]; - } - } - - /* Compute r[1] to r[m] */ - for ( i = 0; i <= m; i++ ) - { - s = t[0] * t[i]; - for ( j = 1; j < len - i; j++ ) - { - s += t[j] * t[i + j]; - } - r[i] = s; - } - - if ( r[0] < 100.0f && no_thr == 0 ) - { - r[0] = 100.0f; - } - - return; -} - -/*---------------------------------------------------------------------* - * lev_dur() - * - * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations - * of input signal - *---------------------------------------------------------------------*/ - -/*! r: stability flag */ -int16_t lev_dur( - float *a, /* o : LP coefficients (a[0] = 1.0) */ - const float *r, /* i : vector of autocorrelations */ - const int16_t m, /* i : order of LP filter */ - float epsP[] /* o : prediction error energy */ -) -{ - int16_t i, j, l; - float buf[TCXLTP_LTP_ORDER]; - float *rc; /* reflection coefficients 0,...,m-1 */ - float s, at, err; - int16_t flag = 0; - - rc = &buf[0]; - rc[0] = ( -r[1] ) / r[0]; - a[0] = 1.0f; - a[1] = rc[0]; - err = r[0] + r[1] * rc[0]; - if ( epsP != NULL ) - { - epsP[0] = r[0]; - epsP[1] = err; - } - - for ( i = 2; i <= m; i++ ) - { - s = 0.0f; - for ( j = 0; j < i; j++ ) - { - s += r[i - j] * a[j]; - } - - rc[i - 1] = ( -s ) / err; - - if ( fabs( rc[i - 1] ) > 0.99945f ) - { - flag = 1; /* Test for unstable filter. If unstable keep old A(z) */ - } - - for ( j = 1; j <= i / 2; j++ ) - { - l = i - j; - at = a[j] + rc[i - 1] * a[l]; - a[l] += rc[i - 1] * a[j]; - a[j] = at; - } - - a[i] = rc[i - 1]; - - err += rc[i - 1] * s; - if ( err <= 0.0f ) - { - err = 0.01f; - } - - if ( epsP != NULL ) - { - epsP[i] = err; - } - } - - return ( flag ); -} -#ifdef IVAS_FLOAT_FIXED -Word16 lev_dur_fx( - Word32 *a_fx, /* o : LP coefficients (a[0] = 1.0) Q(q_a)*/ - const Word32 *r_fx, /* i : vector of autocorrelations Q(q_r)*/ - const Word16 m, /* i : order of LP filter */ - Word32 epsP[], /* o : prediction error energy Q(q_r)*/ - Word16 q_a, - Word16 q_r ) -{ - Word16 i, j, l; - Word16 buf_fx[TCXLTP_LTP_ORDER]; - Word16 *rc_fx; /* reflection coefficients 0,...,m-1 */ - Word32 at; - Word32 s, err; - Word16 flag = 0, tmp16; - move16(); - - rc_fx = &buf_fx[0]; - rc_fx[0] = divide3232( L_negate( r_fx[1] ), r_fx[0] ); // Q(31) - move16(); - a_fx[0] = L_shl( 1, q_a ); - move32(); - a_fx[1] = L_shl( rc_fx[0], sub( q_a, 15 ) ); - move32(); - err = L_add( r_fx[0], Mpy_32_16_1( r_fx[1], rc_fx[0] ) ); // Q(q_r) - IF( epsP != NULL ) - { - epsP[0] = r_fx[0]; - move32(); - epsP[1] = err; - move32(); - } - - FOR( i = 2; i <= m; i++ ) - { - s = 0; // Q(q_a + q_r - 31) - move32(); - FOR( j = 0; j < i; j++ ) - { - s = L_add( s, Mpy_32_32( r_fx[i - j], a_fx[j] ) ); // Q(q_a + q_r - 31) - } - - rc_fx[i - 1] = divide3232( L_negate( s ), L_shr( err, sub( 31, q_a ) ) ); // Q15 - move16(); - - if ( GT_16( abs_s( rc_fx[i - 1] ), 32749 ) ) // 32749 = 0.99945 in Q15 - { - flag = 1; /* Test for unstable filter. If unstable keep old A(z) */ - move16(); - } - - tmp16 = shr( i, 1 ); - FOR( j = 1; j <= tmp16; j++ ) - { - l = sub( i, j ); - at = L_add( a_fx[j], Mpy_32_16_1( a_fx[l], rc_fx[i - 1] ) ); // Q(q_a) - a_fx[l] = L_add( a_fx[l], Mpy_32_16_1( a_fx[j], rc_fx[i - 1] ) ); // Q(q_a) - move32(); - a_fx[j] = at; - move32(); - } - - a_fx[i] = L_shl( rc_fx[i - 1], sub( q_a, 15 ) ); // Q(q_a) - move32(); - - err = L_add( err, L_shl( Mpy_32_16_1( s, rc_fx[i - 1] ), sub( 31, q_a ) ) ); // q_err - q_s - IF( err <= 0 ) - { - err = L_shr( 327, sub( 31, q_r ) ); // 327 = 0.01 in Q15 - } - - if ( epsP != NULL ) - { - epsP[i] = err; - move32(); - } - } - - return ( flag ); -} -#endif - - -/*---------------------------------------------------------------------* - * E_LPC_int_lpc_tcx() - * - * - *---------------------------------------------------------------------*/ - -void E_LPC_int_lpc_tcx_float( - const float lsf_old[], /* i : LSFs from past frame */ - const float lsf_new[], /* i : LSFs from present frame */ - float a[] /* o : interpolated LP coefficients */ -) -{ - int16_t i; - float lsf[M]; - - for ( i = 0; i < M; i++ ) - { - lsf[i] = lsf_old[i] * 0.125f + lsf_new[i] * 0.875f; - } - - lsp2a_stab( lsf, a, M ); - - return; -} - -/*---------------------------------------------------------------------* - * lsp_reorder() - * - * - *---------------------------------------------------------------------*/ - -static void lsp_reorder( - float *lsp, /* i/o: lsp vector (acos() domain) */ - float min_dist, /* i : minimum required distance */ - const int16_t lpcorder /* i : LPC order */ -) -{ - int16_t i; - float lsp_min, lsp_max; - - /* Verify the LSF ordering and minimum GAP */ - lsp_min = min_dist; - - for ( i = 0; i < lpcorder; ++i ) - { - if ( lsp[i] < lsp_min ) - { - lsp[i] = lsp_min; - } - lsp_min = lsp[i] + min_dist; - } - - /* Reverify the LSF ordering and minimum GAP in the reverse order (security) */ - lsp_max = EVS_PI - min_dist; - - /* If danger of unstable filter in case of resonance in HF */ - if ( lsp[lpcorder - 1] > lsp_max ) - { - /* Reverify the minimum LSF gap in the reverse sense */ - for ( i = lpcorder - 1; i >= 0; --i ) - { - if ( lsp[i] > lsp_max ) - { - lsp[i] = lsp_max; - } - lsp_max = lsp[i] - min_dist; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * E_LPC_lsp_unweight() - * - * Approximate unweighting - *---------------------------------------------------------------------*/ - -int16_t E_LPC_lsp_unweight_float( - const float lsp_w[], /* i : weighted lsp */ - float lsp_uw[], /* o : unweighted lsp */ - float lsf_uw[], /* o : unweighted lsf */ - const float inv_gamma /* i : inverse weighting factor */ -) -{ - float lsp_w_orig[M], lsp_w_diff[M], mean, step; - const lsp_unw_triplet_flt *unw_coeffs = NULL; - int16_t i; - - /* Table selection */ - if ( (float) fabs( inv_gamma - 1.0f / 0.94f ) < 0.0001f ) - { - unw_coeffs = p16_gamma0_94to1_float; - } - else if ( (float) fabs( inv_gamma - 1.0f / 0.92f ) < 0.0001f ) - { - unw_coeffs = p16_gamma0_92to1_float; - } - else - { - assert( 0 ); - } - - step = EVS_PI / (float) ( M + 1 ); - mean = step; - - /* Apply acos() and get mean removed version */ - for ( i = 0; i < M; ++i ) - { - lsp_w_orig[i] = (float) acos( lsp_w[i] ); - lsp_w_diff[i] = lsp_w_orig[i] - mean; - mean += step; - } - - /* Approximate unweighting by 3-tap FIR */ - - lsp_uw[0] = lsp_w_orig[0] + unw_coeffs[0][1] * lsp_w_diff[0] + unw_coeffs[0][2] * lsp_w_diff[1]; - for ( i = 1; i < M - 1; ++i ) - { - lsp_uw[i] = lsp_w_orig[i] + unw_coeffs[i][0] * lsp_w_diff[i - 1] + unw_coeffs[i][1] * lsp_w_diff[i] + unw_coeffs[i][2] * lsp_w_diff[i + 1]; - } - - lsp_uw[M - 1] = lsp_w_orig[M - 1] + unw_coeffs[M - 1][0] * lsp_w_diff[M - 2] + unw_coeffs[M - 1][1] * lsp_w_diff[M - 1]; - - /* Reorder */ - lsp_reorder( lsp_uw, 50.0f / SCALE1_LPC, M ); - - /* Convert to lsf, apply cos() */ - for ( i = 0; i < M; ++i ) - { - lsf_uw[i] = lsp_uw[i] * SCALE1_LPC; - lsp_uw[i] = (float) cos( lsp_uw[i] ); - } - - return 0; -} diff --git a/lib_com/lpc_tools_fx.c b/lib_com/lpc_tools_fx.c index b23dcc9b2..8f478dde7 100644 --- a/lib_com/lpc_tools_fx.c +++ b/lib_com/lpc_tools_fx.c @@ -254,7 +254,6 @@ void autocorr_ivas_fx( return; } -#ifdef IVAS_FLOAT_FIXED void autocorr_fx_32( const Word16 x[], /* i : Input signal Q(q_x) */ const Word16 m, /* i : LPC order Q0 */ @@ -364,7 +363,6 @@ void autocorr_fx_32( *Q_r = sub( norm, shl( shift, 1 ) ); move16(); } -#endif /***************************************************************************** * * @@ -1752,3 +1750,84 @@ void E_LPC_a_lsf_isf_conversion( Word16 *lpcCoeffs /*Qx*/, Word16 *lsf /*15Q16*/ move16(); } } + + +Word16 lev_dur_fx( + Word32 *a_fx, /* o : LP coefficients (a[0] = 1.0) Q(q_a)*/ + const Word32 *r_fx, /* i : vector of autocorrelations Q(q_r)*/ + const Word16 m, /* i : order of LP filter */ + Word32 epsP[], /* o : prediction error energy Q(q_r)*/ + Word16 q_a, + Word16 q_r ) +{ + Word16 i, j, l; + Word16 buf_fx[TCXLTP_LTP_ORDER]; + Word16 *rc_fx; /* reflection coefficients 0,...,m-1 */ + Word32 at; + Word32 s, err; + Word16 flag = 0, tmp16; + move16(); + + rc_fx = &buf_fx[0]; + rc_fx[0] = divide3232( L_negate( r_fx[1] ), r_fx[0] ); // Q(31) + move16(); + a_fx[0] = L_shl( 1, q_a ); + move32(); + a_fx[1] = L_shl( rc_fx[0], sub( q_a, 15 ) ); + move32(); + err = L_add( r_fx[0], Mpy_32_16_1( r_fx[1], rc_fx[0] ) ); // Q(q_r) + IF( epsP != NULL ) + { + epsP[0] = r_fx[0]; + move32(); + epsP[1] = err; + move32(); + } + + FOR( i = 2; i <= m; i++ ) + { + s = 0; // Q(q_a + q_r - 31) + move32(); + FOR( j = 0; j < i; j++ ) + { + s = L_add( s, Mpy_32_32( r_fx[i - j], a_fx[j] ) ); // Q(q_a + q_r - 31) + } + + rc_fx[i - 1] = divide3232( L_negate( s ), L_shr( err, sub( 31, q_a ) ) ); // Q15 + move16(); + + if ( GT_16( abs_s( rc_fx[i - 1] ), 32749 ) ) // 32749 = 0.99945 in Q15 + { + flag = 1; /* Test for unstable filter. If unstable keep old A(z) */ + move16(); + } + + tmp16 = shr( i, 1 ); + FOR( j = 1; j <= tmp16; j++ ) + { + l = sub( i, j ); + at = L_add( a_fx[j], Mpy_32_16_1( a_fx[l], rc_fx[i - 1] ) ); // Q(q_a) + a_fx[l] = L_add( a_fx[l], Mpy_32_16_1( a_fx[j], rc_fx[i - 1] ) ); // Q(q_a) + move32(); + a_fx[j] = at; + move32(); + } + + a_fx[i] = L_shl( rc_fx[i - 1], sub( q_a, 15 ) ); // Q(q_a) + move32(); + + err = L_add( err, L_shl( Mpy_32_16_1( s, rc_fx[i - 1] ), sub( 31, q_a ) ) ); // q_err - q_s + IF( err <= 0 ) + { + err = L_shr( 327, sub( 31, q_r ) ); // 327 = 0.01 in Q15 + } + + if ( epsP != NULL ) + { + epsP[i] = err; + move32(); + } + } + + return ( flag ); +} diff --git a/lib_com/lsf_dec_bfi.c b/lib_com/lsf_dec_bfi.c deleted file mode 100644 index 34eede552..000000000 --- a/lib_com/lsf_dec_bfi.c +++ /dev/null @@ -1,298 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - - -#include -#include "options.h" -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "wmc_auto.h" - -/*---------------------------------------------------------------------* - * routine: lsf_dec_bfi_flt() - * - * Estimate the lsfs in case of FER - * Bad frame, all active speech coders - *---------------------------------------------------------------------*/ - -void lsf_dec_bfi_flt( - const int16_t codec_mode, /* i : codec mode: MODE1 | MODE2 */ - float *lsf, /* o : estimated LSF vector */ - const float *lsfold, /* i : past quantized lsf */ - float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ - const float lsfBase[], /* i : base for differential lsf coding */ - float *mem_MA, /* i/o: quantizer memory for MA model */ - float *mem_AR, /* o : quantizer memory for AR model */ - const float stab_fac, /* i : lsf stability factor */ - const int16_t last_coder_type, /* i : last coder type */ - const int16_t L_frame, /* i : frame length */ - const int16_t last_good, /* i : last good received frame */ - const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ - const int16_t plcBackgroundNoiseUpdated, /* i : background noise already updated?*/ - float *lsf_q_cng, /* o : quantized lsfs of background noise */ - float *lsf_cng, /* i : long term target for fading to bg noise*/ - float *old_lsf_q_cng, /* i : old quantized lsfs for background noise*/ - const int16_t Last_GSC_pit_band_idx, /* i : AC mode (GSC) - Last pitch band index */ - const int16_t Opt_AMR_WB, /* i : IO flag */ - const int16_t bwidth /* i : coded bandwidth */ -) -{ - int16_t i; - float alpha, tmp; - float lsf_mean[M]; - const float *pt_meansForFading; - const float *pt_meansForMemUpdate; - float beta; - - /* init vectors */ - if ( codec_mode == MODE1 ) - { - pt_meansForMemUpdate = &lsf_mean[0]; - - if ( Opt_AMR_WB ) - { - pt_meansForFading = mean_isf_amr_wb; - } - else - { - if ( L_frame == L_FRAME ) - { - if ( bwidth == NB ) - { - pt_meansForFading = GENB_Ave; - } - else - { - pt_meansForFading = GEWB_Ave; - } - } - else - { - pt_meansForFading = GEWB2_Ave; - } - } - } - else - { - pt_meansForFading = pt_meansForMemUpdate = lsfBase; - if ( lsf_cng != NULL && plcBackgroundNoiseUpdated ) - { - pt_meansForFading = lsf_cng; - } - } - - /*----------------------------------------------------------------------* - * Initialize the alpha factor - *----------------------------------------------------------------------*/ - - if ( nbLostCmpt <= 3 ) - { - if ( last_coder_type == UNVOICED ) - { - /* clearly unvoiced */ - alpha = ALPHA_UU; - } - else if ( last_coder_type == AUDIO || last_good == INACTIVE_CLAS ) - { - if ( Last_GSC_pit_band_idx > 0 && nbLostCmpt > 1 ) - { - alpha = 0.8f; - } - else - { - alpha = 0.995f; - } - } - else if ( last_good == UNVOICED_CLAS ) - { - if ( nbLostCmpt <= 1 ) - { - /* if stable, do not flatten the spectrum in the 1st erased frame */ - alpha = stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ - } - else if ( nbLostCmpt == 2 ) - { - alpha = ALPHA_U * 1.5f; /* 0.6 */ - } - else - { - /* go rapidly to CNG spectrum */ - alpha = ALPHA_U; - } - } - else if ( last_good == UNVOICED_TRANSITION ) - { - alpha = ALPHA_UT; - } - else if ( last_good == VOICED_CLAS || last_good == ONSET ) - { - /* clearly voiced - mild convergence to the CNG spectrum for the first 3 erased frames */ - alpha = ALPHA_V; - } - else if ( last_good == SIN_ONSET ) - { - alpha = ALPHA_S; - } - else - { - alpha = ALPHA_VT; - } - } - else - { - alpha = 1.f / nbLostCmpt; - } - - if ( codec_mode == MODE1 ) - { - beta = BETA_FEC; - } - else - { - if ( plcBackgroundNoiseUpdated ) - { - beta = 0.f; - } - else - { - beta = 0.25f; - } - } - - for ( i = 0; i < M; i++ ) - { - lsf_mean[i] = beta * pt_meansForFading[i] + ( 1 - beta ) * lsf_adaptive_mean[i]; - lsf[i] = alpha * lsfold[i] + ( 1.0f - alpha ) * lsf_mean[i]; /* towards the CNG spectral envelope */ - - if ( lsf_q_cng != NULL ) - { - lsf_q_cng[i] = max( alpha, 0.8f ) * old_lsf_q_cng[i] + ( 1.0f - max( alpha, 0.8f ) ) * pt_meansForFading[i]; - } - } - - /*-----------------------------------------------------------------* - * - estimate past quantized residual to be used in next frame - * - Check A(z) filter stability through lsf ordering - *-----------------------------------------------------------------*/ - - if ( Opt_AMR_WB ) - { - reorder_isf( lsf, ISF_GAP, M, INT_FS_12k8 ); - } - else - { - if ( L_frame == L_FRAME ) - { - reorder_lsf( lsf, codec_mode == MODE1 ? MODE1_LSF_GAP : LSF_GAP, M, INT_FS_12k8 ); - - if ( lsf_q_cng != NULL ) - { - reorder_lsf( lsf_q_cng, LSF_GAP, M, INT_FS_12k8 ); - } - } - else /* L_frame > L_FRAME */ - { - reorder_lsf( lsf, MODE1_LSF_GAP, M, L_frame * FRAMES_PER_SEC ); - if ( lsf_q_cng != NULL ) - { - reorder_lsf( lsf_q_cng, MODE1_LSF_GAP, M, L_frame * FRAMES_PER_SEC ); - } - } - } - /* update the AR memory to be used in the next frame */ - mvr2r( lsf, mem_AR, M ); - - for ( i = 0; i < M; i++ ) - { - tmp = lsf[i] - pt_meansForMemUpdate[i]; - mem_MA[i] = (float) ( tmp - MU_MA * mem_MA[i] ); /* Update with quantized prediction error for MA model */ - mem_MA[i] *= 0.5f; /* Attenuate the MA Q memory */ - } - - return; -} - -/*---------------------------------------------------------------------* - * routine: PlcGetlsfBase_flt() - * - * - *---------------------------------------------------------------------*/ - -const float *PlcGetlsfBase_flt( - const int16_t lpcQuantization, - const int16_t narrowBand, - const int32_t sr_core ) -{ - if ( lpcQuantization == 0 ) - { - /* high rates, return value is never used; the correct value changes - dynamically and is not available during PLC; therefore, the setting - is kept as before (without the define PLC_FIX_XSF_HANDLING); the - correct value would be isf[m] as returned by lpc_unquantize() - during normal decoding */ - - if ( sr_core == 32000 ) - { - return means_swb_cleanspeech_lsf32k0_flt; - } - else if ( sr_core == 25600 ) - { - return means_swb_cleanspeech_lsf25k6_flt; - } - else - { - return means_wb_cleanspeech_lsf16k0_flt; - } - } - - /* lpcQuntization == 1 is left */ - - if ( sr_core == INT_FS_16k ) - { - return GEWB2_Ave; - } - - /* sr_core == 12.8k is left */ - - if ( narrowBand == 0 ) - { - return GEWB_Ave; - } - - /* narrowBand == 1 is left */ - return GENB_Ave; -} diff --git a/lib_com/lsf_msvq_ma.c b/lib_com/lsf_msvq_ma.c deleted file mode 100644 index 69bbd40e7..000000000 --- a/lib_com/lsf_msvq_ma.c +++ /dev/null @@ -1,177 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include -#include "options.h" -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "stl.h" -#include "basop_proto_func.h" -#include "wmc_auto.h" - -/*---------------------------------------------------------------------* - * midlsf_dec_flt() - * - * - *---------------------------------------------------------------------*/ - -void midlsf_dec_flt( - const float qlsf0[], - const float qlsf1[], - const int16_t idx, - float qlsf[], - const int16_t N, - const int16_t coder_type, - int16_t *mid_lsf_int, - const int16_t prev_bfi, - const int16_t safety_net ) -{ - const float *ratio_float = NULL; - int16_t j; - int16_t bad_spacing = 0; - /* Select codebook */ - if ( coder_type == UNVOICED ) - { - ratio_float = tbl_mid_unv_wb_5b; - } - else - { - ratio_float = tbl_mid_gen_wb_5b; - } - - for ( j = 0; j < N; j++ ) - { - qlsf[j] = ( 1.0f - ratio_float[idx * N + j] ) * qlsf0[j] + ratio_float[idx * N + j] * qlsf1[j]; - } - - if ( mid_lsf_int != NULL ) /*at the decoder*/ - { - /* check for incorrect LSF ordering */ - if ( *mid_lsf_int == 1 ) - { - for ( j = 1; j < N; j++ ) - { - if ( qlsf[j] < qlsf[j - 1] ) - { - bad_spacing = 1; - break; - } - } - } - /* Redo mid-LSF interpolation with 0.4 in case of LSF instability */ - if ( prev_bfi || ( *mid_lsf_int == 1 && bad_spacing ) ) - { - for ( j = 0; j < N; j++ ) - { - /* redo mid-LSF interpolation with 0.4 */ - qlsf[j] = 0.4f * qlsf0[j] + 0.6f * qlsf1[j]; - - /* ensure correct ordering of LSF indices */ - if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - } - else - { - /* otherwise, use regular LSF spacing and ordering as in the encoder */ - for ( j = 0; j < N; j++ ) - { - if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - } - if ( prev_bfi ) - { - /* continue redoing mid-LSF interpolation with 0.4 in order not to propagate the error */ - *mid_lsf_int = 1; - } - if ( safety_net ) - { - /* safety-net encountered -> stop redoing mid-LSF interpolation with 0.4 */ - *mid_lsf_int = 0; - } - } - else - { - /* use regular LSF spacing */ - for ( j = 0; j < N; j++ ) - { - if ( j > 0 && j < N && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * lsf_ind_is_active_flt() - * - * - *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -int16_t lsf_ind_is_active_flt( - const Word16 lsf_q_ind[], - const float means[], - const int16_t narrowband, - const int16_t cdk ) -{ - Word16 lsf[2], min_distance; - - lsf[0] = add( lsf_q_ind[0], LSFM( means[0] ) ); - move16(); - lsf[1] = add( lsf_q_ind[1], LSFM( means[1] ) ); - move16(); - - min_distance = lsf[0]; - min_distance = s_min( min_distance, sub( lsf[1], lsf[0] ) ); - - assert( narrowband == 0 || narrowband == 1 ); - assert( cdk == 0 || cdk == 1 ); - - return sub( min_distance, min_distance_thr[narrowband][cdk] ) < 0; -} -#endif diff --git a/lib_com/lsf_tools.c b/lib_com/lsf_tools.c deleted file mode 100644 index eee60928b..000000000 --- a/lib_com/lsf_tools.c +++ /dev/null @@ -1,3048 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "basop_proto_func.h" -#include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED -#include "ivas_prot_fx.h" -#include "prot_fx.h" -#endif - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static float chebps2( const float x, const float *f, const int16_t n ); -static float LPC_chebyshev( float x, float f[], const int16_t n ); -static void get_isppol( const float *isp, float f[], const int16_t n ); - -/*---------------------------------------------------------------------* - * a2isp() - * - * Compute the ISPs from the LPC coefficients a[] using Chebyshev - * polynomials. The found ISPs are in the cosine domain with values - * in the range from 1 down to -1. - * The table grid[] contains the points (in the cosine domain) at - * which the polynomials are evaluated. - * - * The ISPs are the roots of the two polynomials F1(z) and F2(z) - * defined as - * F1(z) = [A(z) + z^-M A(z^-1)] - * and F2(z) = [A(z) - z^-M A(z^-1)]/ (1-z^-2) - * - * For an even order M=2N, F1(z) has M/2 conjugate roots on the unit circle - * and F2(z) has M/2-1 conjugate roots on the unit circle in addition to two - * roots at 0 and pi. - * - * For a 16th order LP analysis (M=16), F1(z) and F2(z) can be written as - * - * F1(z) = (1 + a[16]) * PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) - * i=0,2,...,14 - * - * F2(z) = (1 - a[16]) * PRODUCT (1 - 2 cos(w_i) z^-1 + z^-2 ) - * i=1,3,...,13 - * - * The ISPs are frequencies w_i, i=0...M-2 plus the last predictor - * coefficient a[M]. - *---------------------------------------------------------------------*/ - -void a2isp( - const float *a, /* i : LP filter coefficients */ - float *isp, /* o : Immittance spectral pairs */ - const float *old_isp /* i : ISP vector from past frame */ -) -{ - int16_t j, i, nf, ip, order; - float xlow, ylow, xhigh, yhigh, xmid, ymid, xint; - float f1[NC + 1], f2[NC]; - float *coef; - - /*-------------------------------------------------------------* - * find the sum and diff polynomials F1(z) and F2(z) - * F1(z) = [A(z) + z^M A(z^-1)] - * F2(z) = [A(z) - z^M A(z^-1)]/(1-z^-2) - * - * for (i=0; i 1.0f ) || ( a[M] < -1.0f ) ) - { - for ( i = 0; i < M; i++ ) - { - isp[i] = old_isp[i]; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * isp2a() - * - * Convert ISPs to predictor coefficients a[] - *-------------------------------------------------------------------*/ - -void isp2a( - const float *isp, /* i : ISP vector (in the cosine domain) */ - float *a, /* o : LP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -) -{ - float f1[NC16k + 1], f2[NC16k]; - int16_t i, j; - int16_t nc; - - nc = m / 2; - - /*-----------------------------------------------------------------* - * Find the polynomials F1(z) and F2(z) * - *-----------------------------------------------------------------*/ - - get_isppol( &isp[0], f1, nc ); - get_isppol( &isp[1], f2, (int16_t) ( nc - 1 ) ); - - /*-----------------------------------------------------------------* - * Multiply F2(z) by (1 - z^-2) * - *-----------------------------------------------------------------*/ - - for ( i = nc - 1; i > 1; i-- ) - { - f2[i] -= f2[i - 2]; - } - - /*-----------------------------------------------------------------* - * Scale F1(z) by (1+isp[m-1]) and F2(z) by (1-isp[m-1]) * - *-----------------------------------------------------------------*/ - - for ( i = 0; i < nc; i++ ) - { - f1[i] *= ( 1.0f + isp[m - 1] ); - f2[i] *= ( 1.0f - isp[m - 1] ); - } - - /*-----------------------------------------------------------------* - * A(z) = (F1(z)+F2(z))/2 * - * F1(z) is symmetric and F2(z) is asymmetric * - *-----------------------------------------------------------------*/ - - a[0] = 1.0f; - for ( i = 1, j = m - 1; i < nc; i++, j-- ) - { - a[i] = (float) ( 0.5f * ( f1[i] + f2[i] ) ); - a[j] = (float) ( 0.5f * ( f1[i] - f2[i] ) ); - } - a[nc] = (float) ( 0.5f * f1[nc] * ( 1.0f + isp[m - 1] ) ); - a[m] = isp[m - 1]; - - return; -} - -/*-------------------------------------------------------------------* - * a2lsp() - * - * Convert predictor coefficients a[] to LSPs - *-------------------------------------------------------------------*/ - -int16_t a2lsp( - float *freq, /* o : LSP vector */ - const float *a_in, /* i : predictor coefficients */ - const int16_t order /* i : order of LP analysis */ -) -{ - int16_t i, iswitch, offset, STEPindex; - int16_t lspnumber, root, notlast, order_by_2; - float temp, temp2; - float q[20], prev[2]; - float frequency, LastFreq, STEP; - const float *a; - float space_min; - - a = &( a_in[1] ); - order_by_2 = order / 2; - LastFreq = 0; - - /* calculate q[z] and p[z] , they are all stored in q */ - offset = order_by_2; - q[0] = (float) ( a[0] + a[order - 1] - 1.0 ); - q[offset] = (float) ( a[0] - a[order - 1] + 1.0 ); - for ( i = 1; i < order_by_2; i++ ) - { - q[i] = a[i] + a[order - 1 - i] - q[i - 1]; - q[i + offset] = a[i] - a[order - 1 - i] + q[i - 1 + offset]; - } - - q[order_by_2 - 1] = q[order_by_2 - 1] / 2; - q[order_by_2 - 1 + offset] = q[order_by_2 - 1 + offset] / 2; - - prev[0] = 9e9f; - prev[1] = 9e9f; - lspnumber = 0; - notlast = 1; - iswitch = 0; - frequency = 0; - - while ( notlast ) - { - root = 1; - offset = iswitch * order_by_2; - STEPindex = 0; /* Start with low resolution grid */ - STEP = STEPS[STEPindex]; - while ( root ) - { - temp = (float) cos( frequency * 6.2832 ); - if ( order >= 4 ) - { - temp2 = LPC_chebyshev( temp, q + offset, order_by_2 ); - } - else - { - temp2 = temp + q[0 + offset]; - } - - if ( ( temp2 * prev[iswitch] ) <= 0.0 || frequency >= 0.5 ) - { - if ( STEPindex == STEPSNUM - 1 ) - { - if ( fabs( temp2 ) < fabs( prev[iswitch] ) ) - { - freq[lspnumber] = frequency; - } - else - { - freq[lspnumber] = frequency - STEP; - } - if ( ( prev[iswitch] ) < 0.0 ) - { - prev[iswitch] = 9e9f; - } - else - { - prev[iswitch] = -9e9f; - } - root = 0; - frequency = LastFreq; - STEPindex = 0; - } - else - { - if ( STEPindex == 0 ) - { - LastFreq = frequency; - } - frequency -= STEPS[++STEPindex]; /* Go back one grid step */ - STEP = STEPS[STEPindex]; - } - } - else - { - prev[iswitch] = temp2; - frequency += STEP; - } - } /* while(root) */ - - lspnumber++; - if ( lspnumber > order - 1 ) - { - notlast = 0; - } - iswitch = 1 - iswitch; - } /* while (notlast) */ - - /* stability check */ - space_min = 1; - for ( i = 1; i < order; i++ ) - { - space_min = ( ( freq[i] - freq[i - 1] ) < space_min ) ? ( freq[i] - freq[i - 1] ) : space_min; - } - - if ( space_min <= 0 ) - { - return 0; - } - - return 1; -} - -/*-------------------------------------------------------------------* - * lsp2a() - * - * Convert LSPs to predictor coefficients a[] - *-------------------------------------------------------------------*/ - -void lsp2a( - float *pc_in, /* i/o: predictor coefficients */ - float *freq, /* i/o: LSP coefficients */ - const int16_t order /* i : order of LP analysis */ -) -{ - float p[LPC_SHB_ORDER], q[LPC_SHB_ORDER]; - float a[LPC_SHB_ORDER], a1[LPC_SHB_ORDER], a2[LPC_SHB_ORDER]; - float b[LPC_SHB_ORDER], b1[LPC_SHB_ORDER], b2[LPC_SHB_ORDER]; - - float xx; - int16_t i, k; - int16_t lspflag; - float *pc; - int16_t order_by_2; - - lspflag = 1; - pc = &( pc_in[1] ); - - order_by_2 = order / 2; - - /* check input for ill-conditioned cases */ - if ( ( freq[0] <= 0.0 ) || ( freq[order - 1] >= 0.5 ) ) - { - lspflag = 0; - - if ( freq[0] <= 0 ) - { - freq[0] = 0.022f; - } - - if ( freq[order - 1] >= 0.5 ) - { - freq[order - 1] = 0.499f; - } - } - - if ( !lspflag ) - { - xx = ( freq[order - 1] - freq[0] ) * recip_order[order]; - for ( i = 1; i < order; i++ ) - { - freq[i] = freq[i - 1] + xx; - } - } - - for ( i = 0; i <= order_by_2; i++ ) - { - a[i] = 0.; - a1[i] = 0.; - a2[i] = 0.; - b[i] = 0.; - b1[i] = 0.; - b2[i] = 0.; - } - - for ( i = 0; i < order_by_2; i++ ) - { - p[i] = (float) cos( 6.2832 * freq[2 * i] ); - q[i] = (float) cos( 6.2832 * freq[2 * i + 1] ); - } - - a[0] = 0.25f; - b[0] = 0.25f; - - for ( i = 0; i < order_by_2; i++ ) - { - a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; - b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; - a2[i] = a1[i]; - a1[i] = a[i]; - b2[i] = b1[i]; - b1[i] = b[i]; - } - a[0] = 0.25f; - b[0] = -0.25f; - - for ( i = 0; i < order_by_2; i++ ) - { - a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; - b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; - a2[i] = a1[i]; - a1[i] = a[i]; - b2[i] = b1[i]; - b1[i] = b[i]; - } - - pc[0] = 2 * ( a[order_by_2] + b[order_by_2] ); - - for ( k = 2; k <= order; k++ ) - { - a[0] = 0.0f; - b[0] = 0.0f; - - for ( i = 0; i < order_by_2; i++ ) - { - a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i]; - b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i]; - a2[i] = a1[i]; - a1[i] = a[i]; - b2[i] = b1[i]; - b1[i] = b[i]; - } - pc[k - 1] = 2 * ( a[order_by_2] + b[order_by_2] ); - } - - return; -} - -/*-----------------------------------------------------------* - * get_lsppol() - * - * Find the polynomial F1(z) or F2(z) from the LSPs. - * This is performed by expanding the product polynomials: - * - * F1(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) - * i=0,2,4,..,n-2 - * F2(z) = product ( 1 - 2 LSF_i z^-1 + z^-2 ) - * i=1,3,5,..,n-1 - * - * where LSP_i are the LSPs in the cosine domain. - *-----------------------------------------------------------*/ - -static void get_lsppol( - const float lsp[], /* i : line spectral freq. (cosine domain) */ - float f[], /* o : the coefficients of F1 or F2 */ - const int16_t n, /* i : no of coefficients (m/2) */ - int16_t flag /* i : 1 ---> F1(z); 2 ---> F2(z) */ -) -{ - float b; - const float *plsp; - int16_t i, j; - - plsp = lsp + flag - 1; - - f[0] = 1.0f; - b = -2.0f * *plsp; - f[1] = b; - - for ( i = 2; i <= n; i++ ) - { - plsp += 2; - b = -2.0f * *plsp; - f[i] = b * f[i - 1] + 2.0f * f[i - 2]; - - for ( j = i - 1; j > 1; j-- ) - { - f[j] += b * f[j - 1] + f[j - 2]; - } - - f[1] += b; - } - - return; -} - -/*---------------------------------------------------------------------* - * a2lsp_stab() - * - * Compute the LSPs from the LPC coefficients a[] using Chebyshev - * polynomials. The found LSPs are in the cosine domain with values - * in the range from 1 down to -1. - * The table grid[] contains the points (in the cosine domain) at - * which the polynomials are evaluated. - * - * The ISPs are the roots of the two polynomials F1(z) and F2(z) - * defined as - * F1(z) = [A(z) + z^-M A(z^-1)]/ (1+z^-1) - * and F2(z) = [A(z) - z^-M A(z^-1)]/ (1-z^-1) - *---------------------------------------------------------------------*/ - -void a2lsp_stab( - const float *a, /* i : LP filter coefficients */ - float *lsp, /* o : LSP vector */ - const float *old_lsp /* i : LSP vector from past frame */ -) -{ - int16_t j, i, nf, ip; - float xlow, ylow, xhigh, yhigh, xmid, ymid, xint; - float *pf1, *pf2; - const float *pa1, *pa2; - float f1[NC + 1], f2[NC + 1]; - - /*-------------------------------------------------------------* - * find the sum and diff polynomials F1(z) and F2(z) * - * F1(z) = [A(z) + z^11 A(z^-1)]/(1+z^-1) * - * F2(z) = [A(z) - z^11 A(z^-1)]/(1-z^-1) * - *-------------------------------------------------------------*/ - - pf1 = f1; /* Equivalent code using indices */ - pf2 = f2; - *pf1++ = 1.0f; /* f1[0] = 1.0; */ - *pf2++ = 1.0f; /* f2[0] = 1.0; */ - pa1 = a + 1; - pa2 = a + M; - - for ( i = 0; i <= NC - 1; i++ ) /* for (i=1, j=M; i<=NC; i++, j--) */ - { - *pf1 = *pa1 + *pa2 - *( pf1 - 1 ); /* f1[i] = a[i]+a[j]-f1[i-1]; */ - *pf2 = *pa1++ - *pa2-- + *( pf2 - 1 ); /* f2[i] = a[i]-a[j]+f2[i-1]; */ - pf1++; - pf2++; - } - - /*---------------------------------------------------------------------* - * Find the LSPs (roots of F1(z) and F2(z) ) using the * - * Chebyshev polynomial evaluation. * - * The roots of F1(z) and F2(z) are alternatively searched. * - * We start by finding the first root of F1(z) then we switch * - * to F2(z) then back to F1(z) and so on until all roots are found. * - * * - * - Evaluate Chebyshev pol. at grid points and check for sign change.* - * - If sign change track the root by subdividing the interval * - * 4 times and ckecking sign change. * - *---------------------------------------------------------------------*/ - - nf = 0; /* number of found frequencies */ - ip = 0; /* flag to first polynomial */ - - pf1 = f1; /* start with F1(z) */ - - xlow = grid100[0]; - ylow = chebps2( xlow, pf1, NC ); - - j = 0; - while ( ( nf < M ) && ( j < GRID100_POINTS ) ) - { - j++; - xhigh = xlow; - yhigh = ylow; - xlow = grid100[j]; - ylow = chebps2( xlow, pf1, NC ); - - if ( ylow * yhigh <= 0.0 ) /* if sign change new root exists */ - { - j--; - /* divide the interval of sign change by NO_ITER */ - for ( i = 0; i < NO_ITER; i++ ) - { - xmid = 0.5f * ( xlow + xhigh ); - ymid = chebps2( xmid, pf1, NC ); - if ( ylow * ymid <= 0.0 ) - { - yhigh = ymid; - xhigh = xmid; - } - else - { - ylow = ymid; - xlow = xmid; - } - } - - /* linear interpolation for evaluating the root */ - ymid = ( yhigh - ylow ); - xint = xlow; - if ( ymid != 0 && ylow != 0 ) /* whenever ylow is 0, it doesn't make sense to compute the remaining part of the equation */ - { - xint -= ylow * ( xhigh - xlow ) / ( ymid ); - } - lsp[nf] = xint; /* new root */ - nf++; - ip = 1 - ip; /* flag to other polynomial */ - pf1 = ip ? f2 : f1; /* pointer to other polynomial */ - xlow = xint; - ylow = chebps2( xlow, pf1, NC ); - } - } - - /* Check if M roots found */ - /* if not use the LSPs from previous frame */ - if ( nf < M ) - { - - for ( i = 0; i < M; i++ ) - { - lsp[i] = old_lsp[i]; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * lsp2a_stab() - * - * Convert LSPs to predictor coefficients A[] - *-------------------------------------------------------------------*/ - -void lsp2a_stab( - const float *lsp, /* i : LSF vector (in the cosine domain) */ - float *a, /* o : LP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -) -{ - float f1[NC + 1], f2[NC + 1]; - int16_t i, k, nc; - float *pf1, *pf2, *pf1_1, *pf2_1, *pa1, *pa2; - - nc = m / 2; - - /*-----------------------------------------------------* - * Find the polynomials F1(z) and F2(z) * - *-----------------------------------------------------*/ - - get_lsppol( lsp, f1, nc, 1 ); - get_lsppol( lsp, f2, nc, 2 ); - - /*-----------------------------------------------------* - * Multiply F1(z) by (1+z^-1) and F2(z) by (1-z^-1) * - *-----------------------------------------------------*/ - - pf1 = f1 + nc; - pf1_1 = pf1 - 1; - pf2 = f2 + nc; /* Version using indices */ - pf2_1 = pf2 - 1; - k = nc - 1; - for ( i = 0; i <= k; i++ ) /* for (i = NC; i > 0; i--) */ - { - *pf1-- += *pf1_1--; /* f1[i] += f1[i-1]; */ - *pf2-- -= *pf2_1--; /* f2[i] -= f2[i-1]; */ - } - - /*-----------------------------------------------------* - * A(z) = (F1(z)+F2(z))/2 * - * F1(z) is symmetric and F2(z) is antisymmetric * - *-----------------------------------------------------*/ - - pa1 = a; - *pa1++ = 1.0; /* a[0] = 1.0; */ - pa2 = a + m; - pf1 = f1 + 1; - pf2 = f2 + 1; - for ( i = 0; i <= k; i++ ) /* for (i=1, j=M; i<=NC; i++, j--) */ - { - *pa1++ = 0.5f * ( *pf1 + *pf2 ); /* a[i] = 0.5*(f1[i] + f2[i]); */ - *pa2-- = 0.5f * ( *pf1++ - *pf2++ ); /* a[j] = 0.5*(f1[i] - f2[i]); */ - } - - return; -} - -/*--------------------------------------------------------------------------- - * reorder_lsf() - * - * To make sure that the LSFs are properly ordered and to keep a certain - * minimum distance between consecutive LSFs. - *--------------------------------------------------------------------------*/ - -void reorder_lsf( - float *lsf, /* i/o: LSF vector */ - const float min_dist, /* i : minimum required distance */ - const int16_t n, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -) -{ - int16_t i; - float lsf_min; - float lsf_max; - - /*-----------------------------------------------------------------* - * Verify the LSF ordering and minimum GAP - *-----------------------------------------------------------------*/ - - lsf_min = min_dist; - for ( i = 0; i < n; i++ ) - { - if ( lsf[i] < lsf_min ) - { - lsf[i] = lsf_min; - } - lsf_min = lsf[i] + min_dist; - } - - /*------------------------------------------------------------------------------------------* - * Reverify the LSF ordering and minimum GAP in the reverse order (security) - *------------------------------------------------------------------------------------------*/ - - lsf_max = Fs / 2.0f - min_dist; - - if ( lsf[n - 1] > lsf_max ) /* If danger of unstable filter in case of resonance in HF */ - { - for ( i = n - 1; i >= 0; i-- ) /* Reverify the minimum LSF gap in the reverse sens */ - { - if ( lsf[i] > lsf_max ) - { - lsf[i] = lsf_max; - } - - lsf_max = lsf[i] - min_dist; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * space_lsfs() - * - *-------------------------------------------------------------------*/ - -void space_lsfs( - float *lsfs, /* i/o: Line spectral frequencies */ - const int16_t order /* i : order of LP analysis */ -) -{ - float delta; - int16_t i, flag = 1; - - while ( flag == 1 ) - { - flag = 0; - for ( i = 0; i <= order; i++ ) - { - delta = (float) ( i == 0 ? lsfs[0] : ( i == order ? 0.5f - lsfs[i - 1] : ( lsfs[i] - lsfs[i - 1] ) ) ); - if ( delta < SPC ) - { - flag = 1; - delta -= SPC_plus; - if ( i == order ) - { - lsfs[i - 1] += delta; - } - else - { - if ( i == 0 ) - { - lsfs[i] -= delta; - } - else - { - delta *= 0.5f; - lsfs[i - 1] += delta; - lsfs[i] -= delta; - } - } - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * lsp_weights() - * - *-------------------------------------------------------------------*/ - -void lsp_weights( - const float *lsps, /* i : Line spectral pairs */ - float *weight, /* o : weights */ - const int16_t order /* i : order of LP analysis */ -) -{ - int16_t i; - float delta1, delta2; - - for ( i = 0; i < order; i++ ) - { - delta1 = (float) ( ( i == 0 ) ? lsps[i] : lsps[i] - lsps[i - 1] ); - delta2 = (float) ( ( i == order - 1 ) ? 0.5f - lsps[i] : lsps[i + 1] - lsps[i] ); - - weight[i] = 250 * root_a_over_b( ALPHA_SQ, delta1 * delta2 ); - } - - if ( order != LPC_SHB_ORDER_WB ) - { - weight[3] *= 1.1f; - weight[4] *= 1.1f; - } - - return; -} - - -/*-----------------------------------------------------------------------* - * isf2isp() - * - * Transformation of ISF to ISP - * - * ISP are immitance spectral pairs in cosine domain (-1 to 1). - * ISF are immitance spectral pairs in frequency domain (0 to fs/2). - *-----------------------------------------------------------------------*/ - -void isf2isp( - const float isf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ - float isp[], /* o : isp[m] (range: -1<=val<1) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -) -{ - int16_t i; - - for ( i = 0; i < m - 1; i++ ) - { - isp[i] = (float) cos( isf[i] * EVS_PI / ( Fs / 2.f ) ); - } - isp[m - 1] = (float) cos( isf[m - 1] * EVS_PI / ( Fs / 2.f ) * 2.0 ); - - return; -} - - -/*-----------------------------------------------------------------------* - * isp2isf() - * - * Transformation of ISP to ISF - * - * ISP are immitance spectral pair in cosine domain (-1 to 1). - * ISF are immitance spectral pair in frequency domain (0 to fs/2). - *-----------------------------------------------------------------------*/ - -void isp2isf( - const float isp[], /* i : isp[m] (range: -1<=val<1) */ - float isf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -) -{ - int16_t i; - - /* convert ISPs to frequency domain 0..6400 */ - for ( i = 0; i < m - 1; i++ ) - { - isf[i] = (float) ( acos( isp[i] ) * ( ( Fs / 2.f ) / EVS_PI ) ); - } - isf[m - 1] = (float) ( acos( isp[m - 1] ) * ( ( Fs / 2.f ) / EVS_PI ) * 0.5f ); - - return; -} - -/*-------------------------------------------------------------------* - * a2rc() - * - * Convert from LPC to reflection coeff - *-------------------------------------------------------------------*/ - -/*! r: stability flag */ -uint16_t a2rc( - const float *a, /* i : LPC coefficients */ - float *refl, /* o : Reflection co-efficients */ - const int16_t lpcorder /* i : LPC order */ -) -{ - float f[MAX_LP_FILTER_ORDER]; - int16_t m, j, n; - float km, denom, x; - - for ( m = 0; m < lpcorder; m++ ) - { - f[m] = -a[m]; - } - - /* Initialization */ - for ( m = lpcorder - 1; m >= 0; m-- ) - { - km = f[m]; - if ( km <= -1.0 || km >= 1.0 ) - { - for ( j = 0; j < lpcorder; j++ ) - { - refl[j] = 0.f; - } - return 0; - } - - refl[m] = -km; - denom = 1.0f / ( 1.0f - km * km ); - - for ( j = 0; j < m / 2; j++ ) - { - n = m - 1 - j; - x = denom * f[j] + km * denom * f[n]; - f[n] = denom * f[n] + km * denom * f[j]; - f[j] = x; - } - - if ( m & 1 ) - { - f[j] = denom * f[j] + km * denom * f[j]; - } - } - return 1; -} - - -/*----------------------------------------------------------------------------------* - * vq_dec_lvq() - * - * Multi-stage VQ decoder for LSF parameters, last stage LVQ - *----------------------------------------------------------------------------------*/ - -int16_t vq_dec_lvq( - int16_t sf_flag, /* i : safety net flag */ - float x[], /* o : Decoded vector */ - int16_t indices[], /* i : Indices */ - const int16_t stages, /* i : Number of stages */ - const int16_t N, /* i : Vector dimension */ - const int16_t mode, /* i : mode_lvq, or mode_lvq_p */ - const int16_t no_bits /* i : no. bits for lattice */ -) -{ - float x_lvq[16]; - int16_t i; - int16_t ber_flag; - - /* clear vector */ - set_f( x, 0, N ); - - /*-----------------------------------------------* - * add contribution of each stage - *-----------------------------------------------*/ - - if ( sf_flag == 1 ) - { - for ( i = 0; i < stages - 1; i++ ) - { - v_add( x, &Quantizers[CB_lsf[mode] + i][indices[i] * N], x, N ); - } - - ber_flag = deindex_lvq( &indices[stages - 1], x_lvq, mode, sf_flag, no_bits ); - } - else - { - for ( i = 0; i < stages - 1; i++ ) - { - v_add( x, &Quantizers_p[CB_p_lsf[mode] + i][indices[i] * N], x, N ); - } - - ber_flag = deindex_lvq( &indices[stages - 1], x_lvq, mode, sf_flag, no_bits ); - } - - v_add( x, x_lvq, x, N ); - - return ber_flag; -} - - -/*----------------------------------------------------------------------------------* - * lsf_allocate() - * - * Calculate number of stages and levels for each stage based on the allowed bit allocation - *----------------------------------------------------------------------------------*/ - -ivas_error lsf_allocate( - const int16_t nBits, /* i : Number of bits to use for quantization */ - const int16_t framemode, /* i : LSF quantizer mode */ - const int16_t framemode_p, /* i : ISF quantizer mode predmode (mode_lvq_p) */ - int16_t *stages0, /* o : Number of stages for safety-net quantizer */ - int16_t *stages1, /* o : Number of stages for predictive quantizer */ - int16_t levels0[], /* o : Number of vectors for each stage for SFNET */ - int16_t levels1[], /* o : Number of vectors for each stage for pred */ - int16_t bits0[], /* o : Number of bits for each stage safety net */ - int16_t bits1[] /* o : Number of bits for each stage pred */ -) -{ - int16_t i; - int16_t cumleft; - int16_t bits_lvq, n_stages, nbits0; - ivas_error error; - - error = IVAS_ERR_OK; - - /*---------------------------------------------------* - * Calculate bit allocation for safety-net quantizer - *---------------------------------------------------*/ - - cumleft = BitsVQ[framemode]; - bits_lvq = nBits - cumleft; - nbits0 = CBbits[framemode]; - if ( nbits0 > -1 ) - { - if ( nbits0 > 0 ) /* */ - { - n_stages = 2; - levels0[0] = CBsizes[nbits0]; - bits0[0] = nbits0; - bits0[1] = cumleft - nbits0; - - if ( bits0[1] == 0 ) - { - n_stages--; - } - else - { - levels0[1] = CBsizes[cumleft - nbits0]; - } - } - else /* no bits for VQ stage */ - { - n_stages = 0; - } - - *stages0 = n_stages; - if ( bits_lvq > 0 ) - { - bits0[n_stages] = bits_lvq; - levels0[n_stages] = bits_lvq; /* this is number of bits, not levels */ - *stages0 = n_stages + 1; - } - } - else - { - *stages0 = 0; - } - - /*---------------------------------------------------* - * Calculate bit allocation for predictive quantizer - *---------------------------------------------------*/ - - if ( framemode_p > -1 ) - { - cumleft = BitsVQ_p[framemode_p]; - bits_lvq = nBits - cumleft; - nbits0 = CBbits_p[framemode_p]; - - if ( nbits0 > -1 ) - { - if ( nbits0 > 0 ) - { - if ( framemode_p == 7 ) - { - /* for UNVOICED_WB only */ - n_stages = 3; - for ( i = 0; i < n_stages; i++ ) - { - levels1[i] = CBsizes[nbits0]; - bits1[i] = nbits0; - } - bits1[n_stages] = bits_lvq; - levels1[n_stages] = bits_lvq; - *stages1 = n_stages + 1; - } - else - { - n_stages = 1; - levels1[0] = CBsizes[nbits0]; - bits1[0] = nbits0; - nbits0 = cumleft - nbits0; - if ( nbits0 > 0 ) - { - levels1[1] = CBsizes[nbits0]; - bits1[1] = nbits0; - n_stages = 2; - } - - levels1[n_stages] = bits_lvq; /* this is number of bits, not levels */ - bits1[n_stages] = bits_lvq; - *stages1 = n_stages + 1; - } - } - else - { - *stages1 = 1; - bits1[0] = bits_lvq; - levels1[0] = bits_lvq; - } - } - } - - return error; -} - -/*----------------------------------------------------------------------------------* - * find_pred_mode() - * - * - *----------------------------------------------------------------------------------*/ - -ivas_error find_pred_mode_float( - int16_t *predmode, - const int16_t coder_type, - const int16_t bwidth, - const int32_t int_fs, - int16_t *p_mode_lvq, - int16_t *p_mode_lvq_p, - const int32_t core_brate ) -{ - int16_t idx; - ivas_error error; - - error = IVAS_ERR_OK; - - idx = bwidth; - if ( idx > 1 ) - { - idx = 1; - } - - if ( int_fs == INT_FS_16k ) - { - idx = 2; - } - else - { - if ( core_brate >= GENERIC_MA_LIMIT && coder_type == GENERIC && idx == 1 ) - { - idx = 3; - } - } - - *predmode = predmode_tab_float[idx][coder_type]; - - if ( idx <= 2 ) - { - *p_mode_lvq = NO_CODING_MODES * idx + coder_type; - if ( *predmode > 0 ) - { - *p_mode_lvq_p = *p_mode_lvq; - } - else - { - *p_mode_lvq_p = -1; - } - } - else /* WB 12.8 with MA pred in GENERIC*/ - { - *p_mode_lvq = NO_CODING_MODES + coder_type; - if ( coder_type == GENERIC ) - { - *p_mode_lvq_p = 18; - } - else - { - if ( *predmode > 0 ) - { - *p_mode_lvq_p = *p_mode_lvq; - } - else - { - *p_mode_lvq_p = -1; - } - } - } - - - return error; -} - - -/*--------------------------------------------------------------------------- - * reorder_isf() - * - * To make sure that the ISFs are properly ordered and to keep a certain - * minimum distance between consecutive ISFs. - *--------------------------------------------------------------------------*/ - -void reorder_isf( - float *isf, /* i/o: ISF vector */ - const float min_dist, /* i : minimum required distance */ - const int16_t n, /* i : LPC order */ - const float Fs /* i : sampling frequency */ -) -{ - int16_t i; - float isf_min; - float isf_max; - - /*-----------------------------------------------------------------* - * Verify the ISF ordering and minimum GAP - *-----------------------------------------------------------------*/ - - isf_min = min_dist; - for ( i = 0; i < n - 1; i++ ) - { - if ( isf[i] < isf_min ) - { - isf[i] = isf_min; - } - - isf_min = isf[i] + min_dist; - } - - /*------------------------------------------------------------------------------------------* - * Reverify the ISF ordering and minimum GAP in the reverse order (security) - *------------------------------------------------------------------------------------------*/ - - isf_max = Fs / 2.0f - min_dist; - - if ( isf[n - 2] > isf_max ) /* If danger of unstable filter in case of resonance in HF */ - { - for ( i = n - 2; i >= 0; i-- ) /* Reverify the minimum ISF gap in the reverse sens */ - { - if ( isf[i] > isf_max ) - { - isf[i] = isf_max; - } - - isf_max = isf[i] - min_dist; - } - } - - return; -} - -/*----------------------------------------------------------------------------------* - * lsf_stab() - * - * Check LSF stability (distance between old LSFs and current LSFs) - *----------------------------------------------------------------------------------*/ - -/*! r: LP filter stability */ -float lsf_stab( - const float *lsf, /* i : LSF vector */ - const float *lsfold, /* i : old LSF vector */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode*/ - const int16_t L_frame /* i : frame length */ -) -{ - int16_t i, m; - float scale, stab_fac, tmp; - - tmp = 0.0f; - if ( Opt_AMR_WB ) - { - m = M - 1; - } - else - { - m = M; - } - - for ( i = 0; i < m; i++ ) - { - tmp += ( lsf[i] - lsfold[i] ) * ( lsf[i] - lsfold[i] ); - } - - scale = (float) L_FRAME / (float) L_frame; - scale *= scale; - - stab_fac = (float) ( 1.25f - ( scale * tmp / 400000.0f ) ); - - if ( stab_fac > 1.0f ) - { - stab_fac = 1.0f; - } - - if ( stab_fac < 0.0f ) - { - stab_fac = 0.0f; - } - return stab_fac; -} - - -/*--------------------------------------------------------------------- - * get_isppol() - * - * Find the polynomial F1(z) or F2(z) from the ISPs. - * This is performed by expanding the product polynomials: - * - * F1(z) = PRODUCT ( 1 - 2 isp_i z^-1 + z^-2 ) - * i=0,2,...,14 - * F2(z) = PRODUCT ( 1 - 2 isp_i z^-1 + z^-2 ) - * i=1,3,...,13 - * - * where isp_i are the ISPs in the cosine domain. - *---------------------------------------------------------------------*/ - -static void get_isppol( - const float *isp, /* i : Immitance spectral pairs (cosine domaine) */ - float f[], /* o : the coefficients of F1 or F2 */ - const int16_t n /* i : nb. of coefficients (m/2) */ -) -{ - float b; - int16_t i, j; - - f[0] = 1.0f; - b = (float) ( -2.0f * *isp ); - f[1] = b; - for ( i = 2; i <= n; i++ ) - { - isp += 2; - b = (float) ( -2.0f * *isp ); - f[i] = (float) ( b * f[i - 1] + 2.0f * f[i - 2] ); - - for ( j = i - 1; j > 1; j-- ) - { - f[j] += b * f[j - 1] + f[j - 2]; - } - f[1] += b; - } - - return; -} - - -/*--------------------------------------------------------------------- - * chebps2() - * - * Evaluates the Chebyshev polynomial series - * - * The polynomial order is - * n = m/2 (m is the prediction order) - * The polynomial is given by - * C(x) = f(0)T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 - *---------------------------------------------------------------------*/ - -/*! r: the value of the polynomial C(x) */ -static float chebps2( - const float x, /* i : value of evaluation; x=cos(freq) */ - const float *f, /* i : coefficients of sum or diff polyn. */ - const int16_t n /* i : order of polynomial */ -) -{ - float b1, b2, b0, x2; - int16_t i; - - x2 = (float) ( 2.0f * x ); - b2 = f[0]; - - b1 = x2 * b2 + f[1]; - - for ( i = 2; i < n; i++ ) - { - b0 = x2 * b1 - b2 + f[i]; - b2 = b1; - b1 = b0; - } - - return (float) ( x * b1 - b2 + 0.5f * f[n] ); -} - - -/*--------------------------------------------------------------------- - * LPC_chebyshev() - * - * Evaluate a series expansion in Chebyshev polynomials - * - * The polynomial order is - * n = m/2 (m is the prediction order) - * The polynomial is given by - * C(x) = T_n(x) + f(1)T_n-1(x) + ... +f(n-1)T_1(x) + f(n)/2 - *---------------------------------------------------------------------*/ - -static float LPC_chebyshev( - float x, - float f[], - const int16_t n ) -{ - float b1, b2, b0, x2, val; - int16_t i; - - x2 = 2.0f * x; - b2 = 1.0f; - b1 = x2 + f[0]; - - for ( i = 2; i < n; i++ ) - { - b0 = x2 * b1 - b2 + f[i - 1]; - - /* was previously casting x2 into float to have this - equation evaluated in float to be same - same as EVRC-B only code which has 2.0 in equation - instead of a float x2. This was causing non-bit-exactness - in a very very very rare corner case. - Doesnt really matter, but just to be picky! */ - b2 = b1; - b1 = b0; - } - - val = ( x * b1 - b2 + f[i - 1] ); - - return val; -} - - -/*-------------------------------------------------------------------* - * lsp2isp() - * - * Convert LSPs to ISPs via predictor coefficients A[] - *-------------------------------------------------------------------*/ - -void lsp2isp( - const float *lsp, /* i : LSP vector */ - float *isp, /* o : ISP filter coefficients */ - float *stable_isp, /* i/o: ISP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -) -{ - float a[M + 1]; - - /* LSP --> A */ - lsp2a_stab( lsp, a, m ); - - /* A --> ISP */ - a2isp( a, isp, stable_isp ); - - /* Update to latest stable ISP */ - mvr2r( isp, stable_isp, M ); -} - -/*-------------------------------------------------------------------* - * isp2lsp() - * - * Convert ISPs to LSPs via predictor coefficients A[] - *-------------------------------------------------------------------*/ - -void isp2lsp( - const float *isp, /* i : LSP vector */ - float *lsp, /* o : ISP filter coefficients */ - float *stable_lsp, /* i/o: stable LSP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -) -{ - float a[M + 1]; - - /* ISP --> A */ - isp2a( isp, a, m ); - - /* A --> LSP */ - a2lsp_stab( a, lsp, stable_lsp ); - - /* Update to latest stable LSP */ - mvr2r( lsp, stable_lsp, M ); -} - - -/*-------------------------------------------------------------------* - * lsf2isf() - * - * Convert LSPs to ISPs - *-------------------------------------------------------------------*/ - -void lsf2isf( - const float *lsf, /* i : LSF vector */ - float *isf, /* o : ISF vector */ - float *stable_isp, /* i/o: stable ISP filter coefficients */ - const int16_t m, /* i : order of LP analysis */ - const int32_t Fs ) -{ - float tmp_lsp[M]; - float tmp_isp[M]; - - /* LSF --> LSP */ - lsf2lsp( lsf, tmp_lsp, m, Fs ); - - /* LSP --> ISP */ - lsp2isp( tmp_lsp, tmp_isp, stable_isp, m ); - - /* ISP --> ISF */ - isp2isf( tmp_isp, isf, m, Fs ); - - return; -} - -/*-------------------------------------------------------------------* - * isf2lsf() - * - * Convert ISFs to LSFs - *-------------------------------------------------------------------*/ - -void isf2lsf( - const float *isf, /* i : ISF vector */ - float *lsf, /* o : LSF vector */ - float *stable_lsp, /* i/o: stable LSP filter coefficients */ - const int16_t m, /* i : order of LP analysis */ - const int32_t Fs ) -{ - float tmp_isp[M]; - float tmp_lsp[M]; - - /* ISF --> ISP */ - isf2isp( isf, tmp_isp, m, Fs ); - - /* ISP --> LSP */ - isp2lsp( tmp_isp, tmp_lsp, stable_lsp, m ); - - /* LSP --> LSF */ - lsp2lsf( tmp_lsp, lsf, m, Fs ); - - return; -} - -/*-----------------------------------------------------------------------* - * lsp2lsf() - * - * Transformation of LSPs to LSFs - * - * LSP are line spectral pair in cosine domain (-1 to 1). - * LSF are line spectral frequencies (0 to fs/2). - *-----------------------------------------------------------------------*/ - -void lsp2lsf( - const float lsp[], /* i : isp[m] (range: -1<=val<1) */ - float lsf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -) -{ - int16_t i; - - /* convert LSPs to LSFs */ - for ( i = 0; i < m; i++ ) - { - lsf[i] = (float) ( acos( lsp[i] ) * ( ( Fs / 2.f ) / EVS_PI ) ); - } - - return; -} - -/*-----------------------------------------------------------------------* - * lsf2lsp() - * - * Transformation of LSFs to LSPs - * - * LSP are line spectral pairs in cosine domain (-1 to 1). - * LSF are line spectral frequencies (0 to fs/2). - *-----------------------------------------------------------------------*/ - -void lsf2lsp( - const float lsf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ - float lsp[], /* o : isp[m] (range: -1<=val<1) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -) -{ - int16_t i; - - /* convert LSFs to LSPs */ - for ( i = 0; i < m; i++ ) - { - lsp[i] = (float) cos( lsf[i] * EVS_PI / ( Fs / 2.f ) ); - } - - return; -} - - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------- - * tcvq_Dec() - * - * - *--------------------------------------------------------------------------*/ - -static void tcvq_Dec( - int16_t *ind, - float *d_out, - const int16_t safety_net ) -{ - int16_t i; - int16_t index[9]; - int16_t stage, state, branch[N_STAGE], codeword[N_STAGE]; - int16_t fins, iwd; - float pred[N_DIM]; - float D[N_STAGE_VQ][N_DIM]; - const float( *TCVQ_CB_SUB1 )[128][2], ( *TCVQ_CB_SUB2 )[64][2], ( *TCVQ_CB_SUB3 )[32][2]; - const float( *IntraCoeff )[2][2]; - - mvs2s( ind, index, 9 ); - - if ( safety_net ) - { - TCVQ_CB_SUB1 = SN_TCVQ_CB_SUB1; - TCVQ_CB_SUB2 = SN_TCVQ_CB_SUB2; - TCVQ_CB_SUB3 = SN_TCVQ_CB_SUB3; - IntraCoeff = SN_IntraCoeff; - } - else - { - TCVQ_CB_SUB1 = AR_TCVQ_CB_SUB1; - TCVQ_CB_SUB2 = AR_TCVQ_CB_SUB2; - TCVQ_CB_SUB3 = AR_TCVQ_CB_SUB3; - IntraCoeff = AR_IntraCoeff; - } - - /* Decode Final state */ - fins = index[0] & 15; - - /* Decode Branch info */ - branch[0] = index[1] >> 4; - branch[1] = index[2] >> 4; - - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - branch[stage] = index[stage + 1] >> 3; - } - - branch[4] = fins & 0x1; - branch[5] = ( fins >> 1 ) & 0x1; - branch[6] = ( fins >> 2 ) & 0x1; - branch[7] = ( fins >> 3 ) & 0x1; - - /* Decode Codeword info */ - for ( stage = 0; stage < 2; stage++ ) - { - codeword[stage] = ( index[stage + 1] & 15 ) << 3; - } - - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - codeword[stage] = ( index[stage + 1] & 7 ) << 3; - } - - for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) - { - codeword[stage] = ( index[stage + 1] & 3 ) << 3; - } - - state = ( fins >> 2 ) << 2; - - /* stage #1 */ - iwd = NTRANS2[branch[0] + 2][state] + codeword[0]; - D[0][0] = TCVQ_CB_SUB1[0][iwd][0]; - D[0][1] = TCVQ_CB_SUB1[0][iwd][1]; - state = NTRANS2[branch[0]][state]; - - /* stage #2 */ - pred[0] = IntraCoeff[0][0][0] * D[0][0] + IntraCoeff[0][0][1] * D[0][1]; - pred[1] = IntraCoeff[0][1][0] * D[0][0] + IntraCoeff[0][1][1] * D[0][1]; - - iwd = NTRANS2[branch[1] + 2][state] + codeword[1]; - D[1][0] = TCVQ_CB_SUB1[1][iwd][0] + pred[0]; - D[1][1] = TCVQ_CB_SUB1[1][iwd][1] + pred[1]; - state = NTRANS2[branch[1]][state]; - - /* stage #3 - #4 */ - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - pred[0] = IntraCoeff[stage - 1][0][0] * D[stage - 1][0] + IntraCoeff[stage - 1][0][1] * D[stage - 1][1]; - pred[1] = IntraCoeff[stage - 1][1][0] * D[stage - 1][0] + IntraCoeff[stage - 1][1][1] * D[stage - 1][1]; - - iwd = NTRANS2[branch[stage] + 2][state] + codeword[stage]; - D[stage][0] = TCVQ_CB_SUB2[stage - 2][iwd][0] + pred[0]; - D[stage][1] = TCVQ_CB_SUB2[stage - 2][iwd][1] + pred[1]; - state = NTRANS2[branch[stage]][state]; - } - - /* stage #5 - #8 */ - for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) - { - pred[0] = IntraCoeff[stage - 1][0][0] * D[stage - 1][0] + IntraCoeff[stage - 1][0][1] * D[stage - 1][1]; - pred[1] = IntraCoeff[stage - 1][1][0] * D[stage - 1][0] + IntraCoeff[stage - 1][1][1] * D[stage - 1][1]; - - iwd = NTRANS2[branch[stage] + 2][state] + codeword[stage]; - D[stage][0] = TCVQ_CB_SUB3[stage - 4][iwd][0] + pred[0]; - D[stage][1] = TCVQ_CB_SUB3[stage - 4][iwd][1] + pred[1]; - state = NTRANS2[branch[stage]][state]; - } - - for ( stage = 0; stage < N_STAGE_VQ; stage++ ) - { - for ( i = 0; i < N_DIM; i++ ) - { - d_out[( N_DIM * stage ) + i] = D[stage][i]; - } - } - return; -} - - -/*--------------------------------------------------------------------------- - * qlsf_ARSN_tcvq_Dec_16k() - * - * Predictive BC-TCQ encoder for LSF quantization - *--------------------------------------------------------------------------*/ - -int16_t qlsf_ARSN_tcvq_Dec_16k( - float *y, /* o : Quantized LSF vector */ - int16_t *indice, /* i : Indices */ - const int16_t nBits /* i : number of bits */ -) -{ - int16_t i; - float error_svq_q[M]; - int16_t safety_net; - - /* Select Mode */ - safety_net = indice[0]; - - if ( safety_net == 1 ) - { - tcvq_Dec( &indice[1], y, safety_net ); - - if ( nBits > 30 ) - { - for ( i = 0; i < 8; i++ ) - { - error_svq_q[i] = AR_SVQ_CB1[indice[10]][i]; - error_svq_q[i + 8] = AR_SVQ_CB2[indice[11]][i]; - } - - for ( i = 0; i < M; i++ ) - { - y[i] = y[i] + error_svq_q[i] * scale_ARSN[i]; - } - } - } - else - { - tcvq_Dec( &indice[1], y, safety_net ); - - if ( nBits > 30 ) - { - for ( i = 0; i < 8; i++ ) - { - error_svq_q[i] = AR_SVQ_CB1[indice[10]][i]; - error_svq_q[i + 8] = AR_SVQ_CB2[indice[11]][i]; - } - - for ( i = 0; i < M; i++ ) - { - y[i] = y[i] + error_svq_q[i]; - } - } - } - - return safety_net; -} - - -/*-------------------------------------------------------------------* - * lsf_syn_mem_backup() - * - * back-up synthesis filter memory and LSF qunatizer memories (used in SC-VBR) - *-------------------------------------------------------------------*/ - -void lsf_syn_mem_backup( - Encoder_State *st, /* i : state structure */ - float *btilt_code, /* i : tilt code */ - float *bgc_threshold, /* i : */ - float *clip_var_bck, /* o : */ - int16_t *next_force_sf_bck, /* o : */ - float *lsp_new, /* i : LSP vector to quantize */ - float *lsp_mid, /* i : mid-frame LSP vector */ - float *clip_var, /* o : pitch clipping state var */ - float *mem_AR, /* o : quantizer memory for AR model */ - float *mem_MA, /* o : quantizer memory for AR model */ - float *lsp_new_bck, /* o : LSP vector to quantize- backup */ - float *lsp_mid_bck, /* o : mid-frame LSP vector - backup */ - float *Bin_E, /* o : FFT Bin energy 128 *2 sets */ - float *Bin_E_old, /* o : FFT Bin energy 128 sets */ - float *mem_syn_bck, /* o : synthesis filter memory */ - float *mem_w0_bck, /* o : memory of the weighting filter */ - float *streaklimit, - int16_t *pstreaklen ) -{ - int16_t i; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - *clip_var = st->clip_var[0]; - - for ( i = 0; i < M; i++ ) - { - mem_AR[i] = st->mem_AR[i]; - mem_MA[i] = st->mem_MA[i]; - lsp_new_bck[i] = lsp_new[i]; - lsp_mid_bck[i] = lsp_mid[i]; - } - - *streaklimit = st->streaklimit; - *pstreaklen = st->pstreaklen; - - for ( i = 0; i < L_FFT; i++ ) - { - Bin_E[i] = st->Bin_E[i]; - } - - for ( i = 0; i < ( L_FFT / 2 ); i++ ) - { - Bin_E_old[i] = st->Bin_E_old[i]; - } - - /* back-up memories */ - for ( i = 0; i < M; i++ ) - { - mem_syn_bck[i] = hLPDmem->mem_syn_flt[i]; - } - - *mem_w0_bck = hLPDmem->mem_w0_flt; - - *btilt_code = hLPDmem->tilt_code_flt; - *bgc_threshold = hLPDmem->gc_threshold_flt; - mvr2r( st->clip_var, clip_var_bck, 6 ); - *next_force_sf_bck = st->next_force_safety_net; - - return; -} - - -/*-------------------------------------------------------------------* - * lsf_syn_mem_restore() - * - * restore synthesis filter memory and LSF quantizer memories - *-------------------------------------------------------------------*/ - -void lsf_syn_mem_restore( - Encoder_State *st, /* o : state structure */ - float btilt_code, /* i : */ - float gc_threshold, /* i : */ - float *clip_var_bck, /* i : */ - int16_t next_force_sf_bck, /* i : */ - float *lsp_new, /* o : LSP vector to quantize */ - float *lsp_mid, /* o : mid-frame LSP vector */ - float clip_var, /* i : pitch clipping state var */ - float *mem_AR, /* i : quantizer memory for AR model */ - float *mem_MA, /* i : quantizer memory for AR model */ - float *lsp_new_bck, /* i : LSP vector to quantize- backup */ - float *lsp_mid_bck, /* i : mid-frame LSP vector - backup */ - float *Bin_E, /* i : FFT Bin energy 128 *2 sets */ - float *Bin_E_old, /* i : FFT Bin energy 128 sets */ - float *mem_syn_bck, /* i : synthesis filter memory */ - float mem_w0_bck, /* i : memory of the weighting filter */ - const float streaklimit, - const int16_t pstreaklen ) -{ - int16_t i; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /* restore lsf memories */ - st->clip_var[0] = clip_var; - - for ( i = 0; i < M; i++ ) - { - st->mem_AR[i] = mem_AR[i]; - st->mem_MA[i] = mem_MA[i]; - lsp_new[i] = lsp_new_bck[i]; - lsp_mid[i] = lsp_mid_bck[i]; - } - - st->streaklimit = streaklimit; - st->pstreaklen = pstreaklen; - - for ( i = 0; i < L_FFT; i++ ) - { - st->Bin_E[i] = Bin_E[i]; - } - - for ( i = 0; i < ( L_FFT / 2 ); i++ ) - { - st->Bin_E_old[i] = Bin_E_old[i]; - } - - /* restoring memories */ - hLPDmem->mem_w0_flt = mem_w0_bck; - - for ( i = 0; i < M; i++ ) - { - hLPDmem->mem_syn_flt[i] = mem_syn_bck[i]; - } - - hLPDmem->tilt_code_flt = btilt_code; - hLPDmem->gc_threshold_flt = gc_threshold; - mvr2r( clip_var_bck, st->clip_var, 6 ); - st->next_force_safety_net = next_force_sf_bck; - - return; -} - - -/*--------------------------------------------------------------------------* - * lsf_update_memory() - * - * - *--------------------------------------------------------------------------*/ - -void lsf_update_memory_float( - const int16_t narrowband, /* i : narrowband flag */ - const float qlsf[], /* i : quantized lsf coefficients */ - float old_mem_MA[], /* i : MA memory */ - float mem_MA[] /* o : updated MA memory */ -) -{ - int16_t i; - - for ( i = 0; i < M; ++i ) - { - mem_MA[i] = qlsf[i] - lsf_means_float[narrowband][i] - MU_MA * old_mem_MA[i]; - } - - return; -} -#endif - -/*--------------------------------------------------------------------------* - * tcxlpc_get_cdk() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: codebook index */ -int16_t tcxlpc_get_cdk_float( - const int16_t coder_type /* i : GC/VC indicator */ -) -{ - int16_t cdk; - - cdk = ( coder_type == VOICED ); - - return cdk; -} - - -/*--------------------------------------------------------------------------* - * dec_FDCNG_MSVQ_stage1() - * - * - *--------------------------------------------------------------------------*/ - -void dec_FDCNG_MSVQ_stage1( - int16_t j_full, /* i : index full range */ - int16_t n, /* i : dimension to generate */ - const float *invTrfMatrix, /* i : IDCT matrix for synthesis */ - const DCTTYPE idcttype, /* i : specify which IDCT */ - float *uq, /* o : synthesized stage1 vector */ - Word16 *uq_ind /* o : synthesized stage1 vector in BASOP */ -) -{ - int16_t col, segm_ind, j; - float dct_vec[FDCNG_VQ_MAX_LEN]; - float idct_vec[FDCNG_VQ_MAX_LEN]; - const Word8 *cbpW8; - const Word16 *dct_col_shift_tab; - - assert( n <= FDCNG_VQ_MAX_LEN ); - assert( n >= FDCNG_VQ_DCT_MINTRUNC ); - - segm_ind = 0; - for ( col = 1; col <= FDCNG_VQ_DCT_NSEGM; col++ ) - { - if ( j_full >= cdk1_ivas_cum_entries_per_segment[col] ) - { - segm_ind++; - } - } - - j = j_full - cdk1_ivas_cum_entries_per_segment[segm_ind]; /* j is the local segment index */ - - assert( j < cdk1_ivas_entries_per_segment[segm_ind] ); - - /* Word8 column variable Qx storage*/ - cbpW8 = cdk_37bits_ivas_stage1_W8Qx_dct_sections[segm_ind]; /* Word8 storage fixed ptr_init */ - cbpW8 += j * cdk1_ivas_cols_per_segment[segm_ind]; /* adaptive ptr init */ - dct_col_shift_tab = stage1_dct_col_syn_shift[segm_ind]; - - for ( col = 0; col < cdk1_ivas_cols_per_segment[segm_ind]; col++ ) - { - dct_vec[col] = (float) shl( (Word16) cbpW8[col], dct_col_shift_tab[col] ); - /* LOGIC( 1 ) , SHIFT( 1 ); - in BASOP: s_and(for W8->W16), shl() - */ - } - dctT2_N_apply_matrix( (const float *) dct_vec, idct_vec, cdk1_ivas_cols_per_segment[segm_ind], n, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, idcttype ); - - /*scale down to original fdcngvq domain and move to Q0 */ - v_multc( idct_vec, fdcng_dct_scaleF[1], idct_vec, n ); - /* fdcng_dct_scaleF[1] --> 0.0625-->scale down from search Q4 domain to Q0 , - not really relevant for BASOP loop */ - - /*add common mid fdcng vector, in fdcng bands domain */ - v_add( idct_vec, cdk1r_tr_midQ_truncQ, uq, n ); - assert( uq_ind == NULL ); - - return; -} - -#ifdef IVAS_FLOAT_FIXED -void dec_FDCNG_MSVQ_stage1_fx( - Word16 j_full, /* i : index full range */ - Word16 n, /* i : dimension to generate */ - const Word32 *invTrfMatrix, /* i : IDCT matrix for synthesis Q31 */ - const DCTTYPE idcttype, /* i : specify which IDCT */ - Word32 *uq, /* o : synthesized stage1 vector Q20 */ - Word16 *uq_ind /* o : synthesized stage1 vector in BASOP */ -) -{ - Word16 col, segm_ind, j, i; - Word32 dct_vec[FDCNG_VQ_MAX_LEN]; - const Word8 *cbpW8; - const Word16 *dct_col_shift_tab; - Word32 dct_vec_fx[FDCNG_VQ_MAX_LEN]; - Word32 idct_vec_fx[FDCNG_VQ_MAX_LEN]; - assert( n <= FDCNG_VQ_MAX_LEN ); - assert( n >= FDCNG_VQ_DCT_MINTRUNC ); - - segm_ind = 0; - move16(); - FOR( col = 1; col <= FDCNG_VQ_DCT_NSEGM; col++ ) - { - if ( GE_16( j_full, cdk1_ivas_cum_entries_per_segment[col] ) ) - { - segm_ind = add( segm_ind, 1 ); - } - } - - j = sub( j_full, cdk1_ivas_cum_entries_per_segment[segm_ind] ); /* j is the local segment index */ - - - /* Word8 column variable Qx storage*/ - cbpW8 = cdk_37bits_ivas_stage1_W8Qx_dct_sections[segm_ind]; /* Word8 storage fixed ptr_init */ - cbpW8 += imult1616( j, cdk1_ivas_cols_per_segment[segm_ind] ); /* adaptive ptr init */ - dct_col_shift_tab = stage1_dct_col_syn_shift[segm_ind]; - - FOR( col = 0; col < cdk1_ivas_cols_per_segment[segm_ind]; col++ ) - { - dct_vec[col] = shl( cbpW8[col], dct_col_shift_tab[col] ); // Q0 - move32(); - /* LOGIC( 1 ) , SHIFT( 1 ); - in BASOP: s_and(for W8->W16), shl() - */ - } - assert( j < cdk1_ivas_entries_per_segment[segm_ind] ); - - Word16 norm = 20; - move16(); - - FOR( i = 0; i < cdk1_ivas_cols_per_segment[segm_ind]; i++ ) - { - dct_vec_fx[i] = L_shl( dct_vec[i], norm ); // Q20 - move32(); - } - - dctT2_N_apply_matrix_fx( (const Word32 *) dct_vec_fx, idct_vec_fx, cdk1_ivas_cols_per_segment[segm_ind], n, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, idcttype ); - - - /*scale down to original fdcngvq domain and move to Q0 */ - /* fdcng_dct_scaleF[1] --> Q15 conversion --> 860 */ - // v_multc_att32( idct_vec_fx, 860, idct_vec_fx, n ); - FOR( i = 0; i < n; i++ ) - { - idct_vec_fx[i] = Mpy_32_32( idct_vec_fx[i], 56410112 ); /* norm + 31 - 31 = norm*/ - // fdcng_dct_scaleF[1] -> 0.420288085937500f / 16.0f -> in Q31 -> 56410112 - move32(); - } - /* fdcng_dct_scaleF[1] --> 0.0625-->scale down from search Q4 domain to Q0 , - not really relevant for BASOP loop */ - - /*add common mid fdcng vector, in fdcng bands domain */ - FOR( i = 0; i < n; i++ ) - { - uq[i] = L_add( idct_vec_fx[i], L_lshl( cdk1r_tr_midQ_truncQ_fx[i], sub( norm, Q10 ) ) ); // making the Q factors equal - move32(); - } - assert( uq_ind == NULL ); - - return; -} -#endif -/*--------------------------------------------------------------------------* - * msvq_dec() - * - * - *--------------------------------------------------------------------------*/ - -void msvq_dec_float( - const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ - const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ - const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ - const int16_t stages, /* i : Number of stages */ - const int16_t N, /* i : Vector dimension */ - const int16_t maxN, /* i : Codebook dimension */ - const int16_t Idx[], /* i : Indices */ - const int16_t applyIDCT_flag, /* i : applyIDCT flag */ - const float *invTrfMatrix, /* i : matrix for IDCT synthesis */ - float *uq, /* o : quantized vector */ - Word16 *uq_ind /* o : quantized vector (fixed point) */ -) -{ - int16_t i, n, maxn, start; - Word16 j; - set_zero( uq, N ); - - if ( uq_ind ) - { - for ( i = 0; i < N; ++i ) - { - uq_ind[i] = 0; - move16(); - } - } - for ( i = 0; i < stages; i++ ) - { - if ( dims ) - { - n = dims[i]; - maxn = n; - } - else - { - n = N; - maxn = maxN; - } - if ( offs ) - { - start = offs[i]; - } - else - { - start = 0; - } - - if ( i == 0 && applyIDCT_flag != 0 ) - { - assert( start == 0 ); - dec_FDCNG_MSVQ_stage1( Idx[0], N, invTrfMatrix, IDCT_T2_XX_24, uq, uq_ind ); /* IDCT_T2 N=24 used for all synthesis */ - } - else - { - v_add( uq + start, cb[i] + Idx[i] * maxn, uq + start, n ); - /*for ( int i = 0; i < n; i++ ) - { - printf( "%f\n", uq[start + i] ); - }*/ - } - -#define WMC_TOOL_SKIP - IF( uq_ind != NULL ) - { - FOR( j = 0; j < n; ++j ) - { - move16(); - uq_ind[start + j] = add( uq_ind[start + j], (Word16) ( cb[i][Idx[i] * maxn + j] * 2.0f * 1.28f ) ); - } - } -#undef WMC_TOOL_SKIP - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED -void msvq_dec_fx( - const Word16 *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) Q: (Q_cb) */ - const Word16 dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ - const Word16 offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ - const Word16 stages, /* i : Number of stages */ - const Word16 N, /* i : Vector dimension */ - const Word16 maxN, /* i : Codebook dimension */ - const Word16 Idx[], /* i : Indices */ - const Word16 applyIDCT_flag, /* i : applyIDCT flag */ - const Word32 *invTrfMatrix, /* i : matrix for IDCT synthesis Q31 */ - Word32 *uq, /* o : quantized vector */ - Word16 *uq_ind, /* o : quantized vector (fixed point) Q0 */ - Word16 Q_cb ) -{ - Word16 i, n, maxn, start, k; - Word16 j, max_size = 0; - move16(); - - FOR( i = 0; i < stages; i++ ) - { - IF( dims ) - { - if ( LT_16( max_size, dims[i] ) ) - { - max_size = dims[i]; - move16(); - } - } - ELSE - { - max_size = N; - move16(); - } - } - - set32_fx( uq, 0, N ); - IF( uq_ind ) - { - FOR( i = 0; i < N; ++i ) - { - uq_ind[i] = 0; - move16(); - } - } - - FOR( i = 0; i < stages; i++ ) - { - IF( dims ) - { - n = dims[i]; - move16(); - maxn = n; - move16(); - } - ELSE - { - n = N; - move16(); - maxn = maxN; - move16(); - } - IF( offs ) - { - start = offs[i]; - move16(); - } - ELSE - { - start = 0; - move16(); - } - - Word16 guard_bits = find_guarded_bits_fx( max_size ); - IF( i == 0 ) - { - FOR( k = 0; k < N; k++ ) - { - uq[k] = L_shr( uq[k], guard_bits ); // 20 - guard_bits - move32(); - } - } - - test(); - IF( i == 0 && applyIDCT_flag != 0 ) - { - assert( start == 0 ); - dec_FDCNG_MSVQ_stage1_fx( Idx[0], N, invTrfMatrix, IDCT_T2_XX_24, uq, uq_ind ); /* IDCT_T2 N=24 used for all synthesis */ - FOR( k = 0; k < N; k++ ) - { - uq[k] = L_shr( uq[k], guard_bits ); // 20 - guard_bits - move32(); - } - } - ELSE - { - // v_add( uq + start, cb[i] + Idx[i] * maxn, uq + start, n ); - - FOR( k = 0; k < n; k++ ) - { - uq[start + k] = L_add( uq[start + k], L_lshl( cb[i][Idx[i] * maxn + k], sub( sub( 20, Q_cb ), guard_bits ) ) ); // 20 - guard_bits - move32(); - } - } - -#define WMC_TOOL_SKIP - IF( uq_ind != NULL ) - { - FOR( j = 0; j < n; ++j ) - { - uq_ind[start + j] = add( uq_ind[start + j], shl( mult( cb[i][Idx[i] * maxn + j], 20971 ), sub( add( 13, Q_cb ), 15 ) ) ); // Q0 - // 2 * 1.28 in Q13 -> 20971 - move16(); - } - } -#undef WMC_TOOL_SKIP - } - - return; -} -#endif -/*--------------------------------------------------------------------------* - * spec2isf() - * - * - *--------------------------------------------------------------------------*/ - -static void spec2isf( - float spec_r[], /* input spectrum real part (only left half + one zero)*/ - float spec_i[], /* input spectrum imag part (only left half+right halt with zeros)*/ - const int16_t speclen, /* length of spectrum (only left half)*/ - float lsf[], - /* locations of LSFs (buffer must be sufficiently long) */ /*15Q16*/ - const float old_lsf[] /* locations of LSFs (buffer must be sufficiently long) */ /*15Q16*/ -) -{ - /*spec_r[] needs a 0 in the end!*/ - float s; - int16_t specix, lsfix, i; - - specix = lsfix = 0; - s = spec_r[specix++]; - - while ( ( specix < speclen ) && lsfix <= 15 ) - { - - /*check for next zero crossing*/ - for ( ; s * spec_r[specix] >= 0; specix++ ) - { - ; - } - - lsf[lsfix++] = ( specix - 1 + spec_r[specix - 1] / ( spec_r[specix - 1] - spec_r[specix] ) ) * ( 12800 / 256 ); - - /*check for the next zero crossing*/ - for ( ; s * spec_i[specix] >= 0; specix++ ) - { - ; - } - - lsf[lsfix++] = ( specix - 1 + spec_i[specix - 1] / ( spec_i[specix - 1] - spec_i[specix] ) ) * ( 12800 / 256 ); - - spec_r[speclen] = s; - spec_i[speclen] = s; - - s = -s; - } - - if ( lsfix < 16 ) - { - for ( i = 0; i < 16; i++ ) - { - lsf[i] = old_lsf[i]; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * a2isf() - * - * - *--------------------------------------------------------------------------*/ - -#define SCALE1_HALF 1018.59161376953f - -typedef struct -{ - float re; - float im; -} Pfloat; - -void a2isf( - float *a, - float *isf, - const float *old_isf, - const int16_t lpcOrder ) -{ - float RealFFT[128]; - float ImagFFT[128]; - float RealOut[130]; - float ImagOut[130]; - float *ptrReal; - float *ptrImag; - int16_t n, i, j; - const Pfloat *ptwiddle; - Pfloat *pwn17, pwn[128], *pwn15, tmpw15; - int16_t N = 256; - float s[4]; - float L_tmp, L_tmp1; - float lpc[19], fftTmpRe[16], fftTmpIm[16]; - Pfloat twid[128]; - float c; - - set_zero( fftTmpRe, 16 ); - set_zero( fftTmpIm, 16 ); - - /* half length FFT */ - /*c = [sum(a) ((-1).^(1:length(a)))*a];*/ - - L_tmp = 0; - for ( j = 0; j <= lpcOrder; j++ ) - { - L_tmp += a[j]; - } - - L_tmp1 = 0; - for ( j = 0; j < lpcOrder / 2; j++ ) - { - L_tmp1 -= a[2 * j]; - L_tmp1 += a[2 * j + 1]; - } - L_tmp1 -= a[2 * j]; - - /*s = [1 -2*(c(1)-c(2))/(c(1)+c(2)) 1]';*/ - s[0] = 1; - if ( ( L_tmp + L_tmp1 ) != 0 ) - { - s[1] = -2 * ( ( L_tmp - L_tmp1 ) / ( L_tmp + L_tmp1 ) ); - } - else - { - s[1] = 1; - } - s[2] = 1; - - lpc[0] = a[0] * s[0]; - L_tmp = a[1] * s[0]; - lpc[1] = L_tmp + ( a[1 - 1] * s[1] ); - - - for ( n = 2; n < 17; n++ ) - { - L_tmp = a[n] * s[0]; - L_tmp += ( a[n - 1] * s[1] ); - lpc[n] = L_tmp + ( a[n - 2] * s[2] ); - } - lpc[18] = a[16] * s[0]; - L_tmp = a[15] * s[0]; - lpc[17] = L_tmp + ( a[16] * s[1] ); - - - ptrReal = RealFFT; - ptrImag = ImagFFT; - - for ( j = 0; j < 9; j++ ) - { - fftTmpRe[j] = lpc[2 * j]; - fftTmpIm[j] = lpc[2 * j + 1]; - } - fftTmpRe[j] = lpc[2 * j]; - fftTmpIm[j] = 0; - j++; - - for ( ; j < 16; j++ ) - { - fftTmpRe[j] = 0; - fftTmpIm[j] = 0; - } - - DoRTFTn( fftTmpRe, fftTmpIm, 16 ); - - for ( j = 0; j < 16; j++ ) - { - ptrReal[j * 8] = fftTmpRe[j]; - ptrImag[j * 8] = fftTmpIm[j]; - } - - ptrReal++; - ptrImag++; - - for ( i = 1; i < 8; i++ ) - { - /*X=x(i:8:M/8) .* exp(-j*2*pi*i*(0:M/8-1)/M);*/ - ptwiddle = (const Pfloat *) w_a_float[i - 1]; - - fftTmpRe[0] = lpc[0]; - fftTmpIm[0] = lpc[1]; - - for ( j = 1; j < 9; j++ ) - { - fftTmpRe[j] = ( lpc[2 * j] * ptwiddle->re ) - ( lpc[2 * j + 1] * ptwiddle->im ); - fftTmpIm[j] = ( lpc[2 * j + 1] * ptwiddle->re ) + ( lpc[2 * j] * ptwiddle->im ); - ptwiddle++; - } - - fftTmpRe[j] = lpc[2 * j] * ptwiddle->re; - fftTmpIm[j] = lpc[2 * j] * ptwiddle->im; - ptwiddle++; - j++; - for ( ; j < 16; j++ ) - { - fftTmpRe[j] = 0; - fftTmpIm[j] = 0; - ptwiddle++; - } - - DoRTFTn( fftTmpRe, fftTmpIm, 16 ); - - for ( j = 0; j < 16; j++ ) - { - ptrReal[j * 8] = fftTmpRe[j]; - ptrImag[j * 8] = fftTmpIm[j]; - } - - ptrReal++; - ptrImag++; - } - - c = EVS_PI / ( 2.0f * (float) 128 ); - - for ( i = 1; i < 128; i++ ) - { - twid[i - 1].im = (float) sin( c * ( 2.0f * (float) i ) ); - twid[i - 1].re = (float) cos( c * ( 2.0f * (float) i ) ); - } - ptwiddle = twid; - - /* pre-twiddle */ - for ( i = 1; i < 128; i++ ) - { - pwn[i - 1].im = (float) sin( c * ( 18.0f * (float) i ) ); - pwn[i - 1].re = (float) cos( c * ( 18.0f * (float) i ) ); - } - - pwn17 = pwn; - pwn15 = &tmpw15; - - /*Y(1) = real(X(1)) + imag(X(1));*/ - RealOut[0] = ( RealFFT[0] + ImagFFT[0] ); - ImagOut[0] = 0; - - /*Y(N/2+1) = 0.5*(X(1) + conj(X(1))).*exp(pi*i*128*(18)/N) - i*0.5*(X(1) - conj(X(1))).*exp(pi*i*128*(16)/N);*/ - RealOut[128] = 0; - ImagOut[128] = ( RealFFT[0] + RealFFT[0] ) - ( ImagFFT[0] + ImagFFT[0] ); - - /*Y(2:N/2) = (0.5*(X(2:N/2) + conj(X(N/2:-1:2))) - i*0.5*(X(2:N/2) - conj(X(N/2:-1:2))).*exp(-pi*i*r*(2)/N)).*exp(pi*i*r*(18)/N);*/ - for ( i = 1; i < N / 2; i++ ) - { - float ReAr = ( RealFFT[i] + RealFFT[N / 2 - i] ); - float ReBr = ( RealFFT[N / 2 - i] - RealFFT[i] ); - float ImAr = ( ImagFFT[i] - ImagFFT[N / 2 - i] ); - float ImBr = -( ImagFFT[i] + ImagFFT[N / 2 - i] ); - - tmpw15.re = ( ptwiddle->re * pwn17->re ) + ( ptwiddle->im * pwn17->im ); - tmpw15.im = ( ptwiddle->re * pwn17->im ) - ( ptwiddle->im * pwn17->re ); - - /*RealOut[i] = mac_r(L_msu(L_msu(L_mult(ReAr, pwn17->re),ImAr, pwn17->im), ReBr, pwn15->v.im), ImBr, pwn15->re); move16();*/ - RealOut[i] = ( ReAr * pwn17->re ) - ( ImAr * pwn17->im ) - ( ( ReBr * pwn15->im ) + ( ImBr * pwn15->re ) ); - ImagOut[i] = ( ReAr * pwn17->im ) + ( ImAr * pwn17->re ) + ( ReBr * pwn15->re ) - ( ImBr * pwn15->im ); - - ptwiddle++; - pwn17++; - } - - spec2isf( RealOut, ImagOut, 128, isf, old_isf ); - - isf[lpcOrder - 1] = (Float32) ( acos( a[lpcOrder] ) * SCALE1_HALF ); - - return; -} - - -/*-------------------------------------------------------------------* - * dctT2_N_apply_matrix() - * - * dct/idct truncated matrix appl. for DCT basis vector lengths of N - *-------------------------------------------------------------------*/ - -void dctT2_N_apply_matrix( - const float *input, /* i : input in fdcng or DCT(fdcng) domain */ - float *output, /* o : output in DCT(fdcng) or fdcng ordomain */ - const int16_t dct_dim, /* i : dct processing dim possibly truncated */ - const int16_t fdcngvq_dim, /* i : fdcng domain length */ - const float *matrix, /* i : IDCT matrix */ - const int16_t matrix_row_dim, /* i : */ - const DCTTYPE dcttype /* i : matrix operation type */ -) -{ - int16_t i, j, dim_in, dim_out; - int16_t mat_step_col, mat_step_row, mat_step_col_flag; - const float *pt_x, *pt_A; - float tmp_y[FDCNG_VQ_MAX_LEN]; - float *pt_y; - - /* non-square DCT_N and IDCT_N matrix application, - using a stored format of an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ - /* efficiently parallelized in SIMD */ - - assert( dct_dim <= FDCNG_VQ_DCT_MAXTRUNC ); - assert( fdcngvq_dim <= FDCNG_VQ_MAX_LEN ); - - if ( ( dcttype & 1 ) == 0 ) /* even entries are DCTs */ - { - /* DCT_typeII 24,21 -> XX in worst case */ - dim_in = fdcngvq_dim; - dim_out = dct_dim; - mat_step_col = matrix_row_dim; /* matrix maximum storage size dependent, width of first row in matrix */ - mat_step_row = 0; - mat_step_col_flag = 1; - assert( dcttype == DCT_T2_21_XX || dcttype == DCT_T2_24_XX ); - } - else - { - assert( ( dcttype & 1 ) != 0 ); /* idct */ - dim_in = dct_dim; - dim_out = fdcngvq_dim; - mat_step_col = 1; - mat_step_row = matrix_row_dim; - mat_step_col_flag = 0; - assert( dcttype == IDCT_T2_XX_24 ); - } - - pt_y = tmp_y; - for ( i = 0; i < dim_out; i++ ) - { - pt_x = input; - *pt_y = 0; - - /* +i(DCT) or +i*maxTrunc(IDCT) */ -#define WMC_TOOL_SKIP - pt_A = &( matrix[i * ( mat_step_row + mat_step_col_flag )] ); /* ptr indexing */ - PTR_INIT( 1 ); -#undef WMC_TOOL_SKIP - for ( j = 0; j < dim_in; j++ ) - { -#define WMC_TOOL_SKIP - *pt_y += ( *pt_x++ ) * ( *pt_A ); - pt_A += mat_step_col; /* step +maxtrunc or +1 */ /* ptr indexing*/ - MAC( 1 ); -#undef WMC_TOOL_SKIP - } - pt_y++; - } - - mvr2r( tmp_y, output, dim_out ); - - return; -} - -#ifdef IVAS_FLOAT_FIXED -void dctT2_N_apply_matrix_fx( - const Word32 *input, /* i : input in fdcng or DCT(fdcng) domain Q20 */ - Word32 *output, /* o : output in DCT(fdcng) or fdcng ordomain Q20 */ - const Word16 dct_dim, /* i : dct processing dim possibly truncated */ - const Word16 fdcngvq_dim, /* i : fdcng domain length */ - const Word32 *matrix, /* i : IDCT matrix Q31 */ - const Word16 matrix_row_dim, /* i : */ - const DCTTYPE dcttype /* i : matrix operation type */ -) -{ - Word16 i, j, dim_in, dim_out; - Word16 mat_step_col, mat_step_row, mat_step_col_flag; - const Word32 *pt_x, *pt_A; - Word32 tmp_y[FDCNG_VQ_MAX_LEN]; - Word32 *pt_y; - - /* non-square DCT_N and IDCT_N matrix application, - using a stored format of an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ - /* efficiently parallelized in SIMD */ - - assert( dct_dim <= FDCNG_VQ_DCT_MAXTRUNC ); - assert( fdcngvq_dim <= FDCNG_VQ_MAX_LEN ); - - IF( L_and( dcttype, 1 ) == 0 ) /* even entries are DCTs */ - { - /* DCT_typeII 24,21 -> XX in worst case */ - dim_in = fdcngvq_dim; - move16(); - dim_out = dct_dim; - move16(); - mat_step_col = matrix_row_dim; /* matrix maximum storage size dependent, width of first row in matrix */ - move16(); - mat_step_row = 0; - move16(); - mat_step_col_flag = 1; - move16(); - assert( dcttype == DCT_T2_21_XX || dcttype == DCT_T2_24_XX ); - } - ELSE - { - assert( ( dcttype & 1 ) != 0 ); /* idct */ - dim_in = dct_dim; - move16(); - dim_out = fdcngvq_dim; - move16(); - mat_step_col = 1; - move16(); - mat_step_row = matrix_row_dim; - move16(); - mat_step_col_flag = 0; - move16(); - assert( dcttype == IDCT_T2_XX_24 ); - } - - pt_y = tmp_y; - FOR( i = 0; i < dim_out; i++ ) - { - pt_x = input; - *pt_y = 0; - move32(); - - /* +i(DCT) or +i*maxTrunc(IDCT) */ -#define WMC_TOOL_SKIP - pt_A = &( matrix[i * ( mat_step_row + mat_step_col_flag )] ); /* ptr indexing */ - PTR_INIT( 1 ); -#undef WMC_TOOL_SKIP - FOR( j = 0; j < dim_in; j++ ) - { -#define WMC_TOOL_SKIP - *pt_y = L_add( *pt_y, Mpy_32_32( ( *pt_x++ ), ( *pt_A ) ) ); - move32(); - pt_A += mat_step_col; /* step +maxtrunc or +1 */ /* ptr indexing*/ - MAC( 1 ); -#undef WMC_TOOL_SKIP - } - pt_y++; - } - - Copy32( tmp_y, output, dim_out ); - - return; -} -#endif -/*-------------------------------------------------------------------* - * extend_dctN_input() - * - * (inputN, dctN) -> idct(N_ext) idct_N matrix application loop for - * extending, extrapolating a DCT basis vector length of N to N_ext - *-------------------------------------------------------------------*/ - -void extend_dctN_input( - const float *input, /* i : input in fdcng domain */ - const float *dct_input, /* i : input in dctN(fdcng) domain */ - const int16_t in_dim, /* i : in_dim == N */ - float *ext_sig, /* o : extended output in fdcng domain */ - const int16_t out_dim, /* i : output total dim */ - float *matrix, /* i : idct synthesis matrix N rows, n_cols columns */ - const int16_t n_cols, /* i : number of columns == DCT truncation length */ - const DCTTYPE dcttype /* i : matrix operation type */ -) -{ - int16_t i, j, i_rev; - const float( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) matrix; - - /* stored format is an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ - assert( in_dim < FDCNG_VQ_MAX_LEN ); - assert( out_dim <= FDCNG_VQ_MAX_LEN ); - assert( out_dim > in_dim ); - assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); /* for *ptr[MAX_TRUNC] adressing*/ - assert( ( dcttype & 1 ) != 0 ); /* idct tables always in use for this basis vector extension */ - - mvr2r( input, ext_sig, in_dim ); /* copy initial part, i.e. only last/tail parts are extended */ - set_f( &( ext_sig[in_dim] ), 0.0, out_dim - in_dim ); - - i_rev = in_dim; /*ptr init*/ - for ( i = in_dim; i < out_dim; i++ ) - { /* for each extension sample */ - /* i = 21 22 23; - i_rev = 20 19 18; for odd dctII reflect basis vector - */ - i_rev--; - - for ( j = 0; j < n_cols; j++ ) /* for each available DCT coeff */ - { - /* DCTcoeff * reflected basis vector */ -#define WMC_TOOL_SKIP - /* pure ptr MAC operations */ - ext_sig[i] += dct_input[j] * ptr[i_rev][j]; /* sum up scaled and extended basis vector */ - MAC( 1 ); -#undef WMC_TOOL_SKIP - } - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED -void extend_dctN_input_fx( - const Word32 *input, /* i : input in fdcng domain Q */ - const Word32 *dct_input, /* i : input in dctN(fdcng) domain Q */ - const Word16 in_dim, /* i : in_dim == N */ - Word32 *ext_sig, /* o : extended output in fdcng domain Q */ - const Word16 out_dim, /* i : output total dim */ - Word32 *matrix, /* i : idct synthesis matrix N rows, n_cols columns 31 */ - const Word16 n_cols, /* i : number of columns == DCT truncation length */ - const DCTTYPE dcttype /* i : matrix operation type */ -) -{ - Word16 i, j, i_rev; - const Word32( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) matrix; - - /* stored format is an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ - assert( in_dim < FDCNG_VQ_MAX_LEN ); - assert( out_dim <= FDCNG_VQ_MAX_LEN ); - assert( out_dim > in_dim ); - assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); /* for *ptr[MAX_TRUNC] adressing*/ - assert( ( dcttype & 1 ) != 0 ); /* idct tables always in use for this basis vector extension */ - - Copy32( input, ext_sig, in_dim ); /* copy initial part, i.e. only last/tail parts are extended q: Q */ - set32_fx( &( ext_sig[in_dim] ), 0, sub( out_dim, in_dim ) ); - - i_rev = in_dim; /*ptr init*/ - move16(); - FOR( i = in_dim; i < out_dim; i++ ) - { /* for each extension sample */ - /* i = 21 22 23; - i_rev = 20 19 18; for odd dctII reflect basis vector - */ - i_rev = sub( i_rev, 1 ); - - FOR( j = 0; j < n_cols; j++ ) /* for each available DCT coeff */ - { - /* DCTcoeff * reflected basis vector */ -#define WMC_TOOL_SKIP - /* pure ptr MAC operations */ - ext_sig[i] = L_add( ext_sig[i], Mpy_32_32( dct_input[j], ptr[i_rev][j] ) ); /* sum up scaled and extended basis vector */ - // Q31 + Q - Q31 -> Q - move32(); - MAC( 1 ); -#undef WMC_TOOL_SKIP - } - } - - return; -} - -#endif - -/*-------------------------------------------------------------------* - * create_IDCT_N_Matrix() - * - * inititate idct24 FDCNG_VQ_DCT_MAXTRUNCx N matrix in - * RAM from a quantized compressed ROM format - *-------------------------------------------------------------------*/ - -void create_IDCT_N_Matrix( - float *inv_matrixFloatQ, /* i/o: RAM buffer */ - const int16_t N, /* i : DCT length, number of time samples */ - const int16_t n_cols, /* i : number of dct coeffs (as DCT may be truncated) */ - const int16_t alloc_size /* i : RAM buffer size in elements */ -) -{ - int16_t c, c1, r, r_flip, W16_val; - int16_t len; - int16_t mat_cpy_size; - const Word16 *absval_ptr; - const Word8 *idx_ptr; - Word16 idx; - float( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) inv_matrixFloatQ; /* fixed number of columns pointers, to simplifies adressing in ANSIC */ - - absval_ptr = unique_idctT2_24coeffsQ16; - idx_ptr = idctT2_24_compressed_idx; - len = FDCNG_VQ_MAX_LEN; - - if ( N == FDCNG_VQ_MAX_LEN_WB ) - { - absval_ptr = unique_idctT2_21coeffsQ16; - idx_ptr = idctT2_21_compressed_idx; - len = N; - } - - assert( alloc_size >= ( n_cols * len ) ); /* enough space for the full expanded IDCT matrix */ - assert( N <= len ); - - mat_cpy_size = ( n_cols ) * ( len >> 1 ); /* NB integer division of "len" */ - - if ( ( len & 1 ) != 0 ) - { /* odd sized DCT with a non-reflected center row */ - mat_cpy_size += n_cols; - } - - for ( c = 0; c < mat_cpy_size; c++ ) - { - idx = (Word16) ( idx_ptr[c] ); - W16_val = absval_ptr[abs( idx )]; - - if ( idx < 0 ) - { - W16_val = -( W16_val ); - } - inv_matrixFloatQ[c] = ( +1.52587890625e-05f ) * ( (float) W16_val ); /* 1.0/2.^16 scaling to a float-"Q0" , a scaling that is not done in BASOP */ - } - - /* for even number of coeffs DCT24, - flip symmetry for odd, even is used to save 50% IDCT Table ROM */ - /* for an odd DCT center is not flipped e.g for DCT21 */ - - assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); - assert( ( n_cols & 1 ) == 0 ); - - for ( c = 0; c < ( n_cols ); c += 2 ) - { - c1 = c + 1; - r_flip = len - 1; - for ( r = 0; r < ( len / 2 ); r++, r_flip-- ) - { -#define WMC_TOOL_SKIP - ptr[r_flip][c] = ptr[r][c]; /* flipped */ - ptr[r_flip][c1] = -( ptr[r][c1] ); /* flipped and sign swapped */ - MOVE( 2 ); - MULT( 1 ); /* for negate */ -#undef WMC_TOOL_SKIP - } - } - - return; -} - -#ifdef IVAS_FLOAT_FIXED -void create_IDCT_N_Matrix_fx( - Word32 *inv_matrixFloatQ, /* i/o: RAM buffer Q31 */ - const Word16 N, /* i : DCT length, number of time samples */ - const Word16 n_cols, /* i : number of dct coeffs (as DCT may be truncated) */ - const Word16 alloc_size /* i : RAM buffer size in elements */ -) -{ - Word16 c, c1, r, r_flip, W16_val, tmp16; - Word16 len; - Word16 mat_cpy_size; - const Word16 *absval_ptr; - const Word8 *idx_ptr; - Word16 idx; - Word32( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) inv_matrixFloatQ; /* fixed number of columns pointers, to simplifies adressing in ANSIC */ - - absval_ptr = unique_idctT2_24coeffsQ16; // Q16 - idx_ptr = idctT2_24_compressed_idx; - len = FDCNG_VQ_MAX_LEN; - move16(); - - IF( EQ_16( N, FDCNG_VQ_MAX_LEN_WB ) ) - { - absval_ptr = unique_idctT2_21coeffsQ16; // Q16 - idx_ptr = idctT2_21_compressed_idx; - len = N; - move16(); - } - - assert( alloc_size >= ( n_cols * len ) ); /* enough space for the full expanded IDCT matrix */ - assert( N <= len ); - - // mat_cpy_size = ( n_cols ) * ( len >> 1 ); /* NB integer division of "len" */ - mat_cpy_size = imult1616( n_cols, shr( len, 1 ) ); /* NB integer division of "len" */ - - IF( s_and( len, 1 ) != 0 ) - { /* odd sized DCT with a non-reflected center row */ - mat_cpy_size = add( mat_cpy_size, n_cols ); - } - - FOR( c = 0; c < mat_cpy_size; c++ ) - { - idx = (Word16) ( idx_ptr[c] ); - W16_val = absval_ptr[abs( idx )]; // Q16 - move16(); - - IF( idx < 0 ) - { - W16_val = negate( W16_val ); - } - /* (+1.52587890625e-05f) * 2 ^ 31 is equal to 32768 */ - inv_matrixFloatQ[c] = L_shl( W16_val, Q15 ); /* scaling to 2 ^ 31*/ - move32(); - } - - /* for even number of coeffs DCT24, - flip symmetry for odd, even is used to save 50% IDCT Table ROM */ - /* for an odd DCT center is not flipped e.g for DCT21 */ - - assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); - assert( ( n_cols & 1 ) == 0 ); - - FOR( c = 0; c < ( n_cols ); c += 2 ) - { - c1 = add( c, 1 ); - r_flip = sub( len, 1 ); - tmp16 = shr( len, 1 ); - FOR( r = 0; r < tmp16; r_flip-- ) - { -#define WMC_TOOL_SKIP - ptr[r_flip][c] = ptr[r][c]; /* flipped: Q31*/ - ptr[r_flip][c1] = L_negate( ptr[r][c1] ); /* flipped and sign swapped: Q31 */ - MOVE( 2 ); - MULT( 1 ); /* for negate */ -#undef WMC_TOOL_SKIP - r++; - } - } - - return; -} -#endif diff --git a/lib_com/lsf_tools_fx.c b/lib_com/lsf_tools_fx.c index ce812b19d..21857fd10 100644 --- a/lib_com/lsf_tools_fx.c +++ b/lib_com/lsf_tools_fx.c @@ -38,6 +38,7 @@ #include "ivas_cnst.h" #include "prot_fx.h" #include "ivas_error.h" +#include "ivas_prot_fx.h" /*-------------------------------------------------------------------* * Local constants @@ -2904,7 +2905,6 @@ void lsf_syn_mem_backup_fx( return; } -#ifdef IVAS_FLOAT_FIXED void lsf_syn_mem_backup_ivas_fx( Encoder_State *st_fx, /* i: state structure */ Word16 *btilt_code_fx, /* i: tilt code Q15 */ @@ -2983,7 +2983,6 @@ void lsf_syn_mem_backup_ivas_fx( return; } -#endif void lsf_update_memory( Word16 narrowband, /* i : narrowband flag */ @@ -3126,7 +3125,6 @@ void lsf_syn_mem_restore_fx( return; } -#ifdef IVAS_FLOAT_FIXED void lsf_syn_mem_restore_ivas_fx( Encoder_State *st_fx, /* o: state structure */ Word16 btilt_code_fx, /* i: Q15 */ @@ -3204,7 +3202,6 @@ void lsf_syn_mem_restore_ivas_fx( return; } -#endif /* Returns: codebook index */ Word16 tcxlpc_get_cdk( @@ -4016,6 +4013,420 @@ void v_sort( return; } +void dec_FDCNG_MSVQ_stage1_fx( + Word16 j_full, /* i : index full range */ + Word16 n, /* i : dimension to generate */ + const Word32 *invTrfMatrix, /* i : IDCT matrix for synthesis Q31 */ + const DCTTYPE idcttype, /* i : specify which IDCT */ + Word32 *uq, /* o : synthesized stage1 vector Q20 */ + Word16 *uq_ind /* o : synthesized stage1 vector in BASOP */ +) +{ + Word16 col, segm_ind, j, i; + Word32 dct_vec[FDCNG_VQ_MAX_LEN]; + const Word8 *cbpW8; + const Word16 *dct_col_shift_tab; + Word32 dct_vec_fx[FDCNG_VQ_MAX_LEN]; + Word32 idct_vec_fx[FDCNG_VQ_MAX_LEN]; + assert( n <= FDCNG_VQ_MAX_LEN ); + assert( n >= FDCNG_VQ_DCT_MINTRUNC ); + + segm_ind = 0; + move16(); + FOR( col = 1; col <= FDCNG_VQ_DCT_NSEGM; col++ ) + { + if ( GE_16( j_full, cdk1_ivas_cum_entries_per_segment[col] ) ) + { + segm_ind = add( segm_ind, 1 ); + } + } + + j = sub( j_full, cdk1_ivas_cum_entries_per_segment[segm_ind] ); /* j is the local segment index */ + + + /* Word8 column variable Qx storage*/ + cbpW8 = cdk_37bits_ivas_stage1_W8Qx_dct_sections[segm_ind]; /* Word8 storage fixed ptr_init */ + cbpW8 += imult1616( j, cdk1_ivas_cols_per_segment[segm_ind] ); /* adaptive ptr init */ + dct_col_shift_tab = stage1_dct_col_syn_shift[segm_ind]; + + FOR( col = 0; col < cdk1_ivas_cols_per_segment[segm_ind]; col++ ) + { + dct_vec[col] = shl( cbpW8[col], dct_col_shift_tab[col] ); // Q0 + move32(); + /* LOGIC( 1 ) , SHIFT( 1 ); + in BASOP: s_and(for W8->W16), shl() + */ + } + assert( j < cdk1_ivas_entries_per_segment[segm_ind] ); + + Word16 norm = 20; + move16(); + + FOR( i = 0; i < cdk1_ivas_cols_per_segment[segm_ind]; i++ ) + { + dct_vec_fx[i] = L_shl( dct_vec[i], norm ); // Q20 + move32(); + } + + dctT2_N_apply_matrix_fx( (const Word32 *) dct_vec_fx, idct_vec_fx, cdk1_ivas_cols_per_segment[segm_ind], n, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, idcttype ); + + + /*scale down to original fdcngvq domain and move to Q0 */ + /* fdcng_dct_scaleF[1] --> Q15 conversion --> 860 */ + // v_multc_att32( idct_vec_fx, 860, idct_vec_fx, n ); + FOR( i = 0; i < n; i++ ) + { + idct_vec_fx[i] = Mpy_32_32( idct_vec_fx[i], 56410112 ); /* norm + 31 - 31 = norm*/ + // fdcng_dct_scaleF[1] -> 0.420288085937500f / 16.0f -> in Q31 -> 56410112 + move32(); + } + /* fdcng_dct_scaleF[1] --> 0.0625-->scale down from search Q4 domain to Q0 , + not really relevant for BASOP loop */ + + /*add common mid fdcng vector, in fdcng bands domain */ + FOR( i = 0; i < n; i++ ) + { + uq[i] = L_add( idct_vec_fx[i], L_lshl( cdk1r_tr_midQ_truncQ_fx[i], sub( norm, Q10 ) ) ); // making the Q factors equal + move32(); + } + assert( uq_ind == NULL ); + + return; +} + +void msvq_dec_fx( + const Word16 *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) Q: (Q_cb) */ + const Word16 dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ + const Word16 offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ + const Word16 stages, /* i : Number of stages */ + const Word16 N, /* i : Vector dimension */ + const Word16 maxN, /* i : Codebook dimension */ + const Word16 Idx[], /* i : Indices */ + const Word16 applyIDCT_flag, /* i : applyIDCT flag */ + const Word32 *invTrfMatrix, /* i : matrix for IDCT synthesis Q31 */ + Word32 *uq, /* o : quantized vector */ + Word16 *uq_ind, /* o : quantized vector (fixed point) Q0 */ + Word16 Q_cb ) +{ + Word16 i, n, maxn, start, k; + Word16 j, max_size = 0; + move16(); + + FOR( i = 0; i < stages; i++ ) + { + IF( dims ) + { + if ( LT_16( max_size, dims[i] ) ) + { + max_size = dims[i]; + move16(); + } + } + ELSE + { + max_size = N; + move16(); + } + } + + set32_fx( uq, 0, N ); + IF( uq_ind ) + { + FOR( i = 0; i < N; ++i ) + { + uq_ind[i] = 0; + move16(); + } + } + + FOR( i = 0; i < stages; i++ ) + { + IF( dims ) + { + n = dims[i]; + move16(); + maxn = n; + move16(); + } + ELSE + { + n = N; + move16(); + maxn = maxN; + move16(); + } + IF( offs ) + { + start = offs[i]; + move16(); + } + ELSE + { + start = 0; + move16(); + } + + Word16 guard_bits = find_guarded_bits_fx( max_size ); + IF( i == 0 ) + { + FOR( k = 0; k < N; k++ ) + { + uq[k] = L_shr( uq[k], guard_bits ); // 20 - guard_bits + move32(); + } + } + + test(); + IF( i == 0 && applyIDCT_flag != 0 ) + { + assert( start == 0 ); + dec_FDCNG_MSVQ_stage1_fx( Idx[0], N, invTrfMatrix, IDCT_T2_XX_24, uq, uq_ind ); /* IDCT_T2 N=24 used for all synthesis */ + FOR( k = 0; k < N; k++ ) + { + uq[k] = L_shr( uq[k], guard_bits ); // 20 - guard_bits + move32(); + } + } + ELSE + { + // v_add( uq + start, cb[i] + Idx[i] * maxn, uq + start, n ); + + FOR( k = 0; k < n; k++ ) + { + uq[start + k] = L_add( uq[start + k], L_lshl( cb[i][Idx[i] * maxn + k], sub( sub( 20, Q_cb ), guard_bits ) ) ); // 20 - guard_bits + move32(); + } + } + +#define WMC_TOOL_SKIP + IF( uq_ind != NULL ) + { + FOR( j = 0; j < n; ++j ) + { + uq_ind[start + j] = add( uq_ind[start + j], shl( mult( cb[i][Idx[i] * maxn + j], 20971 ), sub( add( 13, Q_cb ), 15 ) ) ); // Q0 + // 2 * 1.28 in Q13 -> 20971 + move16(); + } + } +#undef WMC_TOOL_SKIP + } + + return; +} + +void dctT2_N_apply_matrix_fx( + const Word32 *input, /* i : input in fdcng or DCT(fdcng) domain Q20 */ + Word32 *output, /* o : output in DCT(fdcng) or fdcng ordomain Q20 */ + const Word16 dct_dim, /* i : dct processing dim possibly truncated */ + const Word16 fdcngvq_dim, /* i : fdcng domain length */ + const Word32 *matrix, /* i : IDCT matrix Q31 */ + const Word16 matrix_row_dim, /* i : */ + const DCTTYPE dcttype /* i : matrix operation type */ +) +{ + Word16 i, j, dim_in, dim_out; + Word16 mat_step_col, mat_step_row, mat_step_col_flag; + const Word32 *pt_x, *pt_A; + Word32 tmp_y[FDCNG_VQ_MAX_LEN]; + Word32 *pt_y; + + /* non-square DCT_N and IDCT_N matrix application, + using a stored format of an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ + /* efficiently parallelized in SIMD */ + + assert( dct_dim <= FDCNG_VQ_DCT_MAXTRUNC ); + assert( fdcngvq_dim <= FDCNG_VQ_MAX_LEN ); + + IF( L_and( dcttype, 1 ) == 0 ) /* even entries are DCTs */ + { + /* DCT_typeII 24,21 -> XX in worst case */ + dim_in = fdcngvq_dim; + move16(); + dim_out = dct_dim; + move16(); + mat_step_col = matrix_row_dim; /* matrix maximum storage size dependent, width of first row in matrix */ + move16(); + mat_step_row = 0; + move16(); + mat_step_col_flag = 1; + move16(); + assert( dcttype == DCT_T2_21_XX || dcttype == DCT_T2_24_XX ); + } + ELSE + { + assert( ( dcttype & 1 ) != 0 ); /* idct */ + dim_in = dct_dim; + move16(); + dim_out = fdcngvq_dim; + move16(); + mat_step_col = 1; + move16(); + mat_step_row = matrix_row_dim; + move16(); + mat_step_col_flag = 0; + move16(); + assert( dcttype == IDCT_T2_XX_24 ); + } + + pt_y = tmp_y; + FOR( i = 0; i < dim_out; i++ ) + { + pt_x = input; + *pt_y = 0; + move32(); + + /* +i(DCT) or +i*maxTrunc(IDCT) */ +#define WMC_TOOL_SKIP + pt_A = &( matrix[i * ( mat_step_row + mat_step_col_flag )] ); /* ptr indexing */ + PTR_INIT( 1 ); +#undef WMC_TOOL_SKIP + FOR( j = 0; j < dim_in; j++ ) + { +#define WMC_TOOL_SKIP + *pt_y = L_add( *pt_y, Mpy_32_32( ( *pt_x++ ), ( *pt_A ) ) ); + move32(); + pt_A += mat_step_col; /* step +maxtrunc or +1 */ /* ptr indexing*/ + MAC( 1 ); +#undef WMC_TOOL_SKIP + } + pt_y++; + } + + Copy32( tmp_y, output, dim_out ); + + return; +} + +void extend_dctN_input_fx( + const Word32 *input, /* i : input in fdcng domain Q */ + const Word32 *dct_input, /* i : input in dctN(fdcng) domain Q */ + const Word16 in_dim, /* i : in_dim == N */ + Word32 *ext_sig, /* o : extended output in fdcng domain Q */ + const Word16 out_dim, /* i : output total dim */ + Word32 *matrix, /* i : idct synthesis matrix N rows, n_cols columns 31 */ + const Word16 n_cols, /* i : number of columns == DCT truncation length */ + const DCTTYPE dcttype /* i : matrix operation type */ +) +{ + Word16 i, j, i_rev; + const Word32( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) matrix; + + /* stored format is an IDCT_Nx(FDCNG_VQ_DCT_MAXTRUNC) matrix */ + assert( in_dim < FDCNG_VQ_MAX_LEN ); + assert( out_dim <= FDCNG_VQ_MAX_LEN ); + assert( out_dim > in_dim ); + assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); /* for *ptr[MAX_TRUNC] adressing*/ + assert( ( dcttype & 1 ) != 0 ); /* idct tables always in use for this basis vector extension */ + + Copy32( input, ext_sig, in_dim ); /* copy initial part, i.e. only last/tail parts are extended q: Q */ + set32_fx( &( ext_sig[in_dim] ), 0, sub( out_dim, in_dim ) ); + + i_rev = in_dim; /*ptr init*/ + move16(); + FOR( i = in_dim; i < out_dim; i++ ) + { /* for each extension sample */ + /* i = 21 22 23; + i_rev = 20 19 18; for odd dctII reflect basis vector + */ + i_rev = sub( i_rev, 1 ); + + FOR( j = 0; j < n_cols; j++ ) /* for each available DCT coeff */ + { + /* DCTcoeff * reflected basis vector */ +#define WMC_TOOL_SKIP + /* pure ptr MAC operations */ + ext_sig[i] = L_add( ext_sig[i], Mpy_32_32( dct_input[j], ptr[i_rev][j] ) ); /* sum up scaled and extended basis vector */ + // Q31 + Q - Q31 -> Q + move32(); + MAC( 1 ); +#undef WMC_TOOL_SKIP + } + } + + return; +} + + +void create_IDCT_N_Matrix_fx( + Word32 *inv_matrixFloatQ, /* i/o: RAM buffer Q31 */ + const Word16 N, /* i : DCT length, number of time samples */ + const Word16 n_cols, /* i : number of dct coeffs (as DCT may be truncated) */ + const Word16 alloc_size /* i : RAM buffer size in elements */ +) +{ + Word16 c, c1, r, r_flip, W16_val, tmp16; + Word16 len; + Word16 mat_cpy_size; + const Word16 *absval_ptr; + const Word8 *idx_ptr; + Word16 idx; + Word32( *ptr )[FDCNG_VQ_DCT_MAXTRUNC] = (void *) inv_matrixFloatQ; /* fixed number of columns pointers, to simplifies adressing in ANSIC */ + + absval_ptr = unique_idctT2_24coeffsQ16; // Q16 + idx_ptr = idctT2_24_compressed_idx; + len = FDCNG_VQ_MAX_LEN; + move16(); + + IF( EQ_16( N, FDCNG_VQ_MAX_LEN_WB ) ) + { + absval_ptr = unique_idctT2_21coeffsQ16; // Q16 + idx_ptr = idctT2_21_compressed_idx; + len = N; + move16(); + } + + assert( alloc_size >= ( n_cols * len ) ); /* enough space for the full expanded IDCT matrix */ + assert( N <= len ); + + // mat_cpy_size = ( n_cols ) * ( len >> 1 ); /* NB integer division of "len" */ + mat_cpy_size = imult1616( n_cols, shr( len, 1 ) ); /* NB integer division of "len" */ + + IF( s_and( len, 1 ) != 0 ) + { /* odd sized DCT with a non-reflected center row */ + mat_cpy_size = add( mat_cpy_size, n_cols ); + } + + FOR( c = 0; c < mat_cpy_size; c++ ) + { + idx = (Word16) ( idx_ptr[c] ); + W16_val = absval_ptr[abs( idx )]; // Q16 + move16(); + + IF( idx < 0 ) + { + W16_val = negate( W16_val ); + } + /* (+1.52587890625e-05f) * 2 ^ 31 is equal to 32768 */ + inv_matrixFloatQ[c] = L_shl( W16_val, Q15 ); /* scaling to 2 ^ 31*/ + move32(); + } + + /* for even number of coeffs DCT24, + flip symmetry for odd, even is used to save 50% IDCT Table ROM */ + /* for an odd DCT center is not flipped e.g for DCT21 */ + + assert( n_cols == FDCNG_VQ_DCT_MAXTRUNC ); + assert( ( n_cols & 1 ) == 0 ); + + FOR( c = 0; c < ( n_cols ); c += 2 ) + { + c1 = add( c, 1 ); + r_flip = sub( len, 1 ); + tmp16 = shr( len, 1 ); + FOR( r = 0; r < tmp16; r_flip-- ) + { +#define WMC_TOOL_SKIP + ptr[r_flip][c] = ptr[r][c]; /* flipped: Q31*/ + ptr[r_flip][c1] = L_negate( ptr[r][c1] ); /* flipped and sign swapped: Q31 */ + MOVE( 2 ); + MULT( 1 ); /* for negate */ +#undef WMC_TOOL_SKIP + r++; + } + } + + return; +} #ifdef IVAS_MSVQ /*-------------------------------------------------------------------* diff --git a/lib_com/lsp_conv_poly.c b/lib_com/lsp_conv_poly.c deleted file mode 100644 index 7b6853a42..000000000 --- a/lib_com/lsp_conv_poly.c +++ /dev/null @@ -1,661 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -/* The conversion modes. */ -#define DOWNCONV 0 -#define UPCONV 1 -/* The cap of the inverse power spectrum. */ -#define MAXPOWERSPECT 1e-5f -#define N50 GRID50_POINTS -#define N40 GRID40_POINTS - - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void powerspect( const float x[], const int16_t N, float R[], float S[], float G[], const int16_t mode ); - -static void spectautocorr( const float x[], const int16_t N, const float G[], float r[] ); - -static void zeros2poly( float x[], float R[], float S[] ); - -static void polydecomp( float A[], float P[], float Q[] ); - -static void cheb2poly( float P[] ); - - -/*---------------------------------------------------------------------* - * lsp_convert_poly() - * - * Converts the LP filter estimated at 16.0 kHz sampling rate down - * 12.8 kHz frequency scale or alternatively from 12.8 kHz up to - * 16.0 kHz. The former is called down conversation and latter up - * conversion. The resulting LP filter is characterized with its - * line spectrum pairs. The original Lp filter can be either in - * its immittance, used for the AMR-WB IO mode, or line spectrum - * pair representation. - * - * The conversion is based the autocorrelation computed from the - * power spectrum of the LP filter that is truncated or extrapolated - * to the desired frequency scale. - *---------------------------------------------------------------------*/ - -int16_t lsp_convert_poly( - float w[], /* i/o: LSP or ISP parameters */ - const int16_t L_frame, /* i : flag for up or down conversion */ - const int16_t Opt_AMRWB /* i : flag for the AMR-WB IO mode */ -) -{ - float epsP[M + 1]; - float G[GRID50_POINTS], r[M + 1], A[M + 1], A_old[M + 1], R[NC + 1], S[NC + 1]; - int16_t i; - int16_t flag; - - /*---------------------------------------------------------------------* - * Because AMR-WB IO uses immittance spectrum frequency representation - * instead of line spectrum frequency representation, the input - * parameters do not give the zeros of the polynomials R(x) and S(x). - * Hence R(x) and S(x) are formed via the polynomial A(z) of the linear - * prediction filter. - *---------------------------------------------------------------------*/ - - if ( Opt_AMRWB ) - { - isp2a( w, A_old, M ); - polydecomp( A_old, R, S ); - } - - /*---------------------------------------------------------------------* - * Form the polynomials R(x) and S(x) from their zeros that are the - * line spectrum pairs of A(z). The polynomial coefficients can be - * scaled for convenience, because scaling will not affect the - * resulting LP coefficients. Scaling by 128 gives the correct offset - * to the power spectrum for n = 16. - *---------------------------------------------------------------------*/ - - else - { - zeros2poly( w, R, S ); - for ( i = 0; i <= NC; i++ ) - { - R[i] *= 128.0f; - S[i] *= 128.0f; - } - lsp2a_stab( w, A_old, M ); - } - - /*---------------------------------------------------------------------* - * Conversion from 16.0 kHz down to 12.8 kHz. The power spectrum - * needs to be computed only up to 6.4 kHz, because the upper band - * is omitted. - *---------------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - powerspect( grid50, N50, R, S, G, DOWNCONV ); - spectautocorr( grid40, N40, G, r ); - } - - /*---------------------------------------------------------------------* - * Conversion from 12.8 kHz up to 16.0 kHz. - * Compute the power spectrum of the LP filter, extrapolate the - * power spectrum from 6.4 kHz to 8.0 kHz, and compute auto- - * correlation on this power spectrum. - *---------------------------------------------------------------------*/ - - else - { - powerspect( grid40, N40, R, S, G, UPCONV ); - for ( i = N40; i < N50; i++ ) - { - G[i] = G[N40 - 1]; - } - - spectautocorr( grid50, N50, G, r ); - } - - /*---------------------------------------------------------------------* - * Compute the linear prediction coefficients from the autocorrelation - * and convert to line spectrum pairs. - *---------------------------------------------------------------------*/ - - flag = lev_dur( A, r, M, epsP ); - a2lsp_stab( A, w, stable_LSP ); - - return ( flag ); -} - - -/*---------------------------------------------------------------------* - * powerspect() - * - * Computes the power spectrum G(w) = 1/|A(w)|^2 at N points on - * the real axis x = cos w by utilizing the line spectrum frequency - * decomposition - * - * A(z) = (P(z) + Q(z))/2, - * - * where assuming A(z) of an even degree n, - * - * P(z) = [A(z) + z^(n+1) A(1/z)]/(1/z + 1), - * Q(z) = [A(z) - z^(n+1) A(1/z)]/(1/z - 1). - * - * The zeros of these polynomials give the line spectrum frequencies - * of A(z). It can be shown that for an even n, - * - * |A(x)|^2 = 2 (1 + x) R(x)^2 + 2 (1 - x) S(x)^2, - * - * where x = cos w, and R(x) and S(x) are the direct polynomials - * resulting from the Chebyshev series representation of P(z) - * and Q(z). - * - * This routine assumes the grid X = 1, x[0], x[1], .., x[m-1], - * -, ..., -x[1], -x[0], -1 such that x[i] = cos((i+1)*pi/N) for - * evaluating the power spectrum. Only m = (N-1)/2 - 1 grid points - * need to be stored, because cos(0) and cos(pi/2) are trivial, - * and the points above pi/2 are obtained readily using the symmetry - * of cosine. - * - * The power spectrum can be scaled as a*G[], where a is chosen - * for convenience. This is because the scaling has no impact on - * the LP coefficients to be determined based on the power spectrum. - *---------------------------------------------------------------------*/ - -static void powerspect( - const float x[], /* i : Grid points x[0:N-1] */ - const int16_t N, /* i : Number of grid points */ - float R[], /* i : Coefficients of R(x) in R[0:NC] */ - float S[], /* i : Coefficients of S(x) in S[0:NC] */ - float G[], /* o : Power spectrum G[0:N] */ - const int16_t mode /* i : Flag for up or down conversion */ -) -{ - float re, ro, se, so; - float s0, s1, r0, r1, x0, x1, x2; - Word16 i, j; - Word16 iuni, imid; - - /* init buffer */ - for ( i = 0; i < N; i++ ) - { - G[i] = 0; - } - /*---------------------------------------------------------------------* - * Down conversion yields iuni unique grid points that do not have - * symmetric counterparts above x = cos(pi/2) = 0. - * Set the mid point of the frequency grid. - *---------------------------------------------------------------------*/ - - if ( mode == DOWNCONV ) - { - iuni = ( GRID50_POINTS - 1 ) / 5 - 1; - imid = ( GRID50_POINTS - 1 ) / 2; - } - - /*---------------------------------------------------------------------* - * Power spectrum at x = cos(pi) = -1 that is not needed in down - * conversion. Set the mid point of the frequency grid. - *---------------------------------------------------------------------*/ - - else - { - iuni = 0; - imid = ( GRID40_POINTS - 1 ) / 2; - - s0 = S[0]; - for ( j = 1; j <= NC; j++ ) - { - s0 = S[j] - s0; - } - G[N - 1] = 4.0f * s0 * s0; - } - - /*---------------------------------------------------------------------* - * Power spectrum at x = cos(0) = 1. - *---------------------------------------------------------------------*/ - - r0 = R[0]; - for ( j = 1; j <= NC; j++ ) - { - r0 += R[j]; - } - r0 = max( r0, 0.000000953674316f ); - G[0] = 4.0f * r0 * r0; - - /*---------------------------------------------------------------------* - * Power spectrum at x = cos(pi/2) = 0. - *---------------------------------------------------------------------*/ - - r0 = R[NC]; - s0 = S[NC]; - r0 = r0 * r0; - s0 = s0 * s0; - - G[imid] = 2.0f * ( r0 + s0 ); - - /*---------------------------------------------------------------------* - * Power spectrum at unique points that do not have symmetric - * counterparts at x > cos(pi/2) = 0. - *---------------------------------------------------------------------*/ - - for ( i = 1; i <= iuni; i++ ) - { - x0 = x[i - 1]; - r0 = R[0]; - s0 = S[0]; - - for ( j = 1; j <= NC; j++ ) - { - r0 = x0 * r0 + R[j]; - s0 = x0 * s0 + S[j]; - } - r0 = ( 1.0f + x0 ) * r0 * r0; - s0 = ( 1.0f - x0 ) * s0 * s0; - - G[i] = 2.0f * ( r0 + s0 ); - } - - /*---------------------------------------------------------------------* - * Power spectrum at points other than x = -1, 0, and 1 and unique - * points is computed using the anti-symmetry of the grid relative - * to the midpoint x = 0 in order to reduce looping. - *---------------------------------------------------------------------*/ - - for ( ; i < imid; i++ ) - { - x0 = x[i - 1]; - x2 = x0 * x0; - - re = R[0]; - se = S[0]; - ro = R[1]; - so = S[1]; - - for ( j = 2; j < NC; j += 2 ) - { - re = x2 * re + R[j]; - ro = x2 * ro + R[j + 1]; - se = x2 * se + S[j]; - so = x2 * so + S[j + 1]; - } - - re = x2 * re + R[j]; - ro *= x0; - se = x2 * se + S[j]; - so *= x0; - - r0 = re + ro; - s0 = se + so; - r1 = re - ro; - s1 = se - so; - - x1 = 1.0f + x0; - x2 = 1.0f - x0; - - r0 = x1 * r0 * r0; - s0 = x2 * s0 * s0; - r1 = x2 * r1 * r1; - s1 = x1 * s1 * s1; - - G[i] = 2.0f * ( r0 + s0 ); - G[N - i - 1] = 2.0f * ( r1 + s1 ); - } - - /*---------------------------------------------------------------------* - * Compute the power spectrum 1/|A(x)|^2 from |A(x)|^2 with logic - * to prevent division by small number and upper bound the spectrum. - * This upper bound is implicit in fixed point arithmetic, but is - * needed explicitly in floating point implementations to avoid numeric - * problems. - *---------------------------------------------------------------------*/ - - for ( i = 0; i < N; i++ ) - { - if ( G[i] < MAXPOWERSPECT ) - { - G[i] = MAXPOWERSPECT; - } - G[i] = 1.0f / G[i]; - } - return; -} - -/*---------------------------------------------------------------------* - * spectautocorr() - * - * Computes the autocorrelation r[j] for j = 0, 1, ..., M from - * the power spectrum P(w) by using the rectangle rule to - * approximate the integral - * - * 1 pi - * r[j] = --- I P(w) cos(j*w) dw. - * 2*pi -pi - * - * It is sufficient to evaluate the integrand only from w = 0 to - * w = pi due to the symmetry P(-w) = P(w). We can further - * employ the relation - * - * cos(j*(pi - w)) = (-1)^j cos(j*w) - * - * to use symmetries relative to w = pi/2 for w in (0, pi/2). - * - * When applying the rectangle rule, it is convenient to evaluate - * w = 0, w = pi/2, and w = pi separately. By using a frequency - * grid of N points, we can express the rectangle rule as - * - * r[j] = G[0] + 2*a*G[(N-1)/2] + b*G[N-1] - * - * M - * + 2 sum (G[i] - G[N-i-1]) cos(j*x[i]) - * i=1 - * - * where G[i] is the power spectrum at x[i] = i*pi/(N-1) and - * M = (N-1)/2 - 1 is the number of the grid points in the - * interval(0, pi/2). The number of grid points N is assumed odd. - * - * The coefficients - * - * b = (-1)^j - * a = (1 + (-1)^(j+1))(-1)^floor(j/2) - * - * follow from the properties of the cosine function. The - * computation further uses the recursion - * - * cos(j*w) = 2*cos(w)*cos((j-1)*w) - cos((j-2)*w) - * - * Note that the autocorrelation can be scaled for convenience, - * because this scaling has no impact on the LP coefficients to be - * calculated from the autocorrelation. The expression of r[j] thus - * omits the division by N. - * - * See the powerspect function on the definition of the grid. - * - * References - * J. Makhoul, "Spectral linear prediction: properties and - * applications," IEEE Trans. on Acoustics, Speech and Signal - * Processing, Vol. 23, No. 3, pp.283-296, June 1975 - *---------------------------------------------------------------------*/ - -static void spectautocorr( - const float x[], /* i : Grid points x[0:N-1] */ - const int16_t N, /* i : Number of grid points */ - const float G[], /* i : Power spectrum G[0:N-1] */ - float r[] /* o : Autocorrelation r[0:M] */ -) -{ - float c[M + 1]; /* c[j] = cos(j*w) */ - float gp, gn, c2; - Word16 i, j; - Word16 imid; - - /*---------------------------------------------------------------------* - * The midpoint of the cosine table x of N entries. Only the entries - * x[0] = cos(d), x[1] = cos(2*d), ..., x[imid-1] = cos((imid-1)*d) - * need to be stored due to trivial cos(0), cos(pi/2), cos(pi), and - * symmetry relative to pi/2. Here d = pi/(N - 1). - *---------------------------------------------------------------------*/ - - imid = ( N - 1 ) / 2; - - /*---------------------------------------------------------------------* - * Autocorrelation r[j] at zero lag j = 0 for the upper half of the - * unit circle, but excluding the points x = cos(0) and x = cos(pi). - *---------------------------------------------------------------------*/ - - r[0] = G[1]; - for ( i = 2; i < N - 1; i++ ) - { - r[0] += G[i]; - } - - /*---------------------------------------------------------------------* - * Initialize the autocorrelation r[j] at lags greater than zero - * by adding the midpoint x = cos(pi/2) = 0. - *---------------------------------------------------------------------*/ - - r[1] = 0.0f; - r[2] = -G[imid]; - - for ( j = 3; j < M; j += 2 ) - { - r[j] = 0.0f; - r[j + 1] = -r[j - 1]; - } - - /*---------------------------------------------------------------------* - * Autocorrelation r[j] at lags j = 1, 2, ..., M. The computation - * employes the relation cos(j*(pi - w)) = (-1)^j cos(j*w) and - * cos(j*w) = 2*cos(w)*cos((j-1)*w) - cos((j-2)*w) for obtaining - * the cosine c[j] = cos(j*w). - *---------------------------------------------------------------------*/ - - c[0] = 1.0f; - - for ( i = 1; i < imid; i++ ) - { - gp = G[i] + G[N - i - 1]; - gn = G[i] - G[N - i - 1]; - - c[1] = x[i - 1]; - c2 = 2.0f * c[1]; - - r[1] += gn * c[1]; - - for ( j = 2; j < M; j += 2 ) - { - c[j] = c2 * c[j - 1] - c[j - 2]; - r[j] += gp * c[j]; - c[j + 1] = c2 * c[j] - c[j - 1]; - r[j + 1] += gn * c[j + 1]; - } - - c[j] = c2 * c[j - 1] - c[j - 2]; - r[j] += gp * c[j]; - } - - /*---------------------------------------------------------------------* - * Add the endpoints x = cos(0) = 1 and x = cos(pi) = -1 as - * well as the lower half of the unit circle. - *---------------------------------------------------------------------*/ - - gp = G[0] + G[N - 1]; - gn = G[0] - G[N - 1]; - - for ( j = 0; j < M; j += 2 ) - { - r[j] = 2.0f * r[j] + gp; - r[j + 1] = 2.0f * r[j + 1] + gn; - } - r[j] = 2.0f * r[j] + gp; - - return; -} - -/*---------------------------------------------------------------------* - * zeros2poly() - * - * Computes the coefficients of the polynomials - * - * R(x) = prod (x - x[i]), - * i = 0,2,4,... - * - * S(x) = prod (x - x[i]), - * i = 1,3,5,... - * - * given their zeros x[i] for i = 0, 1, ..., n-1. The routine - * assumes n = 1 or even n greater than or equal to 4. - * - * The polynomial coefficients are returned in R[0:n/2-1] and - * S[0:n/2-1]. The leading coefficients are in R[0] and S[0]. - * - * In this implementation, n is set to a compile time constant. - *---------------------------------------------------------------------*/ - -static void zeros2poly( - float x[], /* i : Zeros of R(x) and S(x) */ - float R[], /* o : Coefficients of R(x) */ - float S[] /* o : Coefficients of S(x) */ -) -{ - float xr, xs; - Word16 i, j; - - R[0] = 1.0f; - R[1] = -*x++; - S[0] = 1.0f; - S[1] = -*x++; - - for ( i = 2; i <= NC; i++ ) - { - xr = -*x++; - xs = -*x++; - - R[i] = xr * R[i - 1]; - S[i] = xs * S[i - 1]; - - for ( j = i - 1; j > 0; j-- ) - { - R[j] += xr * R[j - 1]; - S[j] += xs * S[j - 1]; - } - } - - return; -} - -/*---------------------------------------------------------------------* - * polydecomp() - * - * Computes the coefficients of the symmetric and antisymmetric - * polynomials P(z) and Q(z) that define the line spectrum pair - * decomposition of a given polynomial A(z) of order n. For even n, - * - * P(z) = [A(z) + z^(n+1) A(1/z)]/(1/z + 1), - * Q(z) = [A(z) - z^(n+1) A(1/z)]/(1/z - 1), - * - * These polynomials are then expressed in their direct form, - * respectively, R(x) and S(x), on the real axis x = cos w using - * explicit Chebyshev polynomials of the first kind. - * - * The coefficients of the polynomials R(x) and S(x) are returned - * in R[0:n/2] and S[0:n/2] for the given linear prediction - * coefficients A[0:n/2]. Note that R(x) and S(x) are formed in - * place such that P(z) is stored in the same array than R(x), - * and Q(z) is stored in the same array than S(x). - * - * The routines assumes n = 16. - *---------------------------------------------------------------------*/ - -static void polydecomp( - float A[], /* i : linear prediction coefficients */ - float R[], /* o : coefficients of R(x) */ - float S[] /* o : coefficients of S(x) */ -) -{ - float *P = &R[0], *Q = &S[0]; - Word16 i, j; - - P[0] = A[0]; - Q[0] = A[0]; - for ( i = 1, j = M; i <= NC; i++, j-- ) - { - P[i] = A[i] + A[j] - P[i - 1]; - Q[i] = A[i] - A[j] + Q[i - 1]; - } - - cheb2poly( P ); - cheb2poly( Q ); - - return; -} - -/*---------------------------------------------------------------------* - * cheb2poly() - * - * Computes the coefficients of the explicit Chebyshev polynomial - * P(x) = P[0]*x^n + P[1]*x^(n-1) + ... + P[n] given the coefficients - * of the series - * - * C(x) = C[0]*T_n(x) + C[1]*T_n-1(x) + ... + C[n]*T_0(x), - * - * where T_n(x) is the nth Chebyshev polynomial of the first kind. - * This implementation assumes C[0] = 1. Only the value n = 8 is - * supported. - * - * The conversion from C(x) to P(x) is done in place such that the - * coefficients of C(x) are given in P[0:8] and those of P(x) are - * returned in the same array. - *---------------------------------------------------------------------*/ - -static void cheb2poly( - float P[] /* i/o: The coefficients of C(x) and P(x) */ -) -{ - float c1, c2, c3, c4, c5, c6, c7, c8; - - c1 = P[1]; - c2 = P[2]; - c3 = P[3]; - c4 = P[4]; - c5 = P[5]; - c6 = P[6]; - c7 = P[7]; - c8 = P[8]; - - P[0] = 128.0f; - P[1] = 64.0f * c1; - P[2] = 32.0f * c2 - 256.0f; - P[3] = 16.0f * c3 - 112.0f * c1; - P[4] = 160.0f - 48.0f * c2 + 8.0f * c4; - P[5] = 56.0f * c1 - 20.0f * c3 + 4.0f * c5; - P[6] = 18.0f * c2 - 32.0f - 8.0f * c4 + 2.0f * c6; - P[7] = 5.0f * c3 - 7.0f * c1 - 3.0f * c5 + c7; - P[8] = 1.0f - c2 + c4 - c6 + 0.5f * c8; - - return; -} diff --git a/lib_com/lsp_conv_poly_fx.c b/lib_com/lsp_conv_poly_fx.c index 762dea2bd..6c2c55520 100644 --- a/lib_com/lsp_conv_poly_fx.c +++ b/lib_com/lsp_conv_poly_fx.c @@ -9,7 +9,6 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /*-------------------------------------------------------------------* @@ -907,4 +906,3 @@ static void cheb2poly_fx( return; } -#endif diff --git a/lib_com/modif_fs.c b/lib_com/modif_fs.c index 61adc1c34..06119b69e 100644 --- a/lib_com/modif_fs.c +++ b/lib_com/modif_fs.c @@ -43,497 +43,7 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * modify_Fs() - * - * Function for resampling of signals - *-------------------------------------------------------------------*/ -/*! r: length of output */ -int16_t modify_Fs( - const float sigIn[], /* i : signal to decimate */ - const int16_t lg, /* i : length of input + 0 delay signaling */ - const int32_t fin, /* i : frequency of input */ - float sigOut[], /* o : decimated signal */ - const int32_t fout, /* i : frequency of output */ - float mem[], /* i/o: filter memory */ - const int16_t nblp /* i : flag indicating if NB low-pass is applied */ -) -{ - int16_t i; - int16_t lg_out, fac_num, fac_den, filt_len, frac, mem_len; - float num_den; - int16_t datastep, fracstep; - float *sigIn_ptr; - float signal_tab[3 * L_FILT_MAX + L_FRAME48k], *signal, *signal_ana; /* 3* as 2* for memory and 1* for future prediction */ - float A[M + 1], r[M + 1], epsP[M + 1], val; - int16_t mem_len_ana; - int16_t plus_sample_in; - int16_t j; - float mu_preemph; - float mem_preemph; - const Resampling_cfg *cfg_ptr; - int16_t flag_low_order = 0; - int16_t filt_len_tmp; - - /*-------------------------------------------------------------------* - * IIR filters for resampling to/from 8 kHz - *-------------------------------------------------------------------*/ - - /*-------------------------------------------------------------------* - * Find the resampling configuration - *-------------------------------------------------------------------*/ - - if ( fin == fout ) - { - /* just copy the signal and quit */ - for ( i = 0; i < lg; i++ ) - { - sigOut[i] = sigIn[i]; - } - - return lg; - } - else - { - /* find the resampling configuration in the lookup table */ - for ( cfg_ptr = &resampling_cfg_tbl[0]; ( cfg_ptr->fin != 0 ) && !( cfg_ptr->fin == fin && cfg_ptr->fout == fout ); cfg_ptr++ ) - { - } - - - /* find config with NB 4kHz low-pass */ - if ( nblp && ( fin > 8000 ) && ( fout == 12800 ) ) - { - flag_low_order = 1; - for ( cfg_ptr++; ( cfg_ptr->fin != 0 ) && !( cfg_ptr->fin == fin && cfg_ptr->fout == fout ); cfg_ptr++ ) - { - } - } - -#define WMC_TOOL_SKIP - /* Retrieve and/or calculate the resampling parameters */ - fac_num = cfg_ptr->fac_num; - fac_den = (int16_t) ( ( cfg_ptr->fin * fac_num ) / cfg_ptr->fout ); - lg_out = ( lg * fac_num ) / fac_den; - filt_len = cfg_ptr->filt_len; - - mem_len = 2 * filt_len; - plus_sample_in = 0; /* default, regular delay */ - frac = 0; - - if ( fin == 8000 && fout == 12800 ) - { - plus_sample_in = 7; - frac = 4; - } - - signal = signal_tab + 2 * L_FILT_MAX + L_FRAME48k - mem_len - lg; - signal_ana = signal; - mem_len_ana = mem_len; -#undef WMC_TOOL_SKIP - } - - /*-------------------------------------------------------------------* - * FIR filters for resampling to/from 12.8, 16, 32, 48 kHz - *-------------------------------------------------------------------*/ - - /* append filter memory */ - for ( i = 0; i < 2 * filt_len; i++ ) - { - signal[i] = mem[i]; - } - - for ( i = 0; i < lg; i++ ) - { - signal[i + ( 2 * filt_len )] = sigIn[i]; - } - - if ( plus_sample_in > 0 ) - { - autocorr( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, r, 1, LEN_WIN_SSS, wind_sss, 0, 0, 0 ); - - mu_preemph = r[1] / r[0]; - mem_preemph = signal_ana[mem_len_ana + lg - LEN_WIN_SSS - 1]; - preemph( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, mu_preemph, LEN_WIN_SSS, &mem_preemph ); - - /* Autocorrelations */ - autocorr( signal_ana + mem_len_ana + lg - LEN_WIN_SSS, r, M, LEN_WIN_SSS, wind_sss, 0, 0, 0 ); - - lag_wind_flt( r, M, fin, LAGW_STRONG ); - - /* Levinson-Durbin */ - lev_dur( A, r, M, epsP ); - - for ( i = 0; i < plus_sample_in; i++ ) - { - val = 0; - for ( j = 1; j <= M; j++ ) - { - val -= signal[i + lg + mem_len - j] * A[j]; - } - signal[i + lg + mem_len] = val; /* AZ ringing padding */ - } - - mem_preemph = signal[mem_len + lg - LEN_WIN_SSS - 1]; - deemph( signal + mem_len + lg - LEN_WIN_SSS, mu_preemph, LEN_WIN_SSS + plus_sample_in, &mem_preemph ); - } - - /* interpolation */ - datastep = fac_den / fac_num; - fracstep = fac_den - datastep * fac_num; /* equivalent to datastep = fac_den % fac_num */ - - sigIn_ptr = signal + filt_len + plus_sample_in; - - filt_len_tmp = filt_len; - if ( flag_low_order ) - { - filt_len_tmp = ( filt_len + 1 ) >> 1; - } - - for ( i = 0; i < lg_out; i++ ) - { - sigOut[i] = interpolation( sigIn_ptr, cfg_ptr->filter, frac, fac_num, filt_len_tmp ); - - frac = frac + fracstep; - if ( frac >= fac_num ) - { - frac = frac - fac_num; - sigIn_ptr++; - } - - sigIn_ptr += datastep; - } - - /* rescaling */ - if ( ( fac_num > fac_den ) == ( ( cfg_ptr->flags & RS_INV_FAC ) != 0 ) ) - { - num_den = (float) fac_num / fac_den; - - for ( i = 0; i < lg_out; i++ ) - { - sigOut[i] *= num_den; - } - } - - /* update the filter memory */ - for ( i = 0; i < 2 * filt_len; i++ ) - { - mem[i] = signal[i + lg]; - } - - return lg_out; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * modify_Fs_intcub3m_sup() - * - * - *-------------------------------------------------------------------*/ - -/*! r: length of output */ -int16_t modify_Fs_intcub3m_sup( - const float sigIn[], /* i : signal to decimate with memory of 2 samples (indexes -2 & -1) */ - const int16_t lg, /* i : length of input (suppose that lg is such that lg_out is integer, ex multiple of 5 in case of 16kHz to 12.8 kHz) */ - const int32_t fin, /* i : frequency of input */ - float sigOut[], /* o : decimated signal */ - const int32_t fout, /* i : frequency of output */ - int16_t *delayout /* o : delay of output */ -) -{ - int16_t i, j, k, i1, i2, k1, k2, k3, kk, cind; - int16_t lg_out, fk1, k2d, k3d; - float cc[4][4]; - float vv; - const double( *cu )[3] = 0; - - /*-------------------------------------------------------------------* - * Find the resampling configuration - *-------------------------------------------------------------------*/ - - /* check if fin and fout are the same */ - if ( fin == fout ) - { - /* just copy the signal and quit */ - for ( i = 0; i < lg; i++ ) - { - sigOut[i] = sigIn[i]; - } - - *delayout = 0; - return lg; - } - else - { - /* length of the interpolated signal */ - lg_out = (int16_t) ( lg * fout / fin ); - - /* cc[x][3]*s*s*s + cc[x][2]*s*s + cc[x][1]*s + cc[x][0]; indexes relatives of s : -1 0 1 2 */ - /* d : cc[x][0] = s[0] */ - /* b : cc[x][2] =(s[-1]+s[1])/2-s[0] */ - /* a : cc[x][3] = (s[-1]+s[2]-s[0]-s[1]-4*cc[x][2]) / 6 */ - /* c : cc[x][1] = s[1]-s[0]-cc[x][3]-cc[x][2] */ - - /* coef inits using memory (indexes < 0) */ - /* cc[2][] : indexes -2 -1 0 1 */ - cc[2][0] = sigIn[-1] / 3; - cc[2][2] = ( sigIn[-2] + sigIn[0] ) / 2 - sigIn[-1]; - cc[2][3] = ( sigIn[-2] + sigIn[1] - sigIn[-1] - sigIn[0] - 4 * cc[2][2] ) / 6; - cc[2][1] = sigIn[0] - sigIn[-1] - cc[2][3] - cc[2][2]; - - /* cc[3][] : indexes -1 0 1 2 */ - cc[3][0] = sigIn[0] / 3; - cc[3][2] = ( sigIn[-1] + sigIn[1] ) / 2 - sigIn[0]; - cc[3][3] = ( sigIn[-1] + sigIn[2] - sigIn[0] - sigIn[1] - 4 * cc[3][2] ) / 6; - cc[3][1] = sigIn[1] - sigIn[0] - cc[3][3] - cc[3][2]; - j = 0; - - if ( fin == 12800 ) - { - if ( fout == 8000 ) - { - cind = 0; - } - else if ( fout == 16000 ) - { - cind = 1; - } - else if ( fout == 32000 ) - { - cind = 2; - } - else if ( fout == 48000 ) - { - cind = 3; - } - else - { - printf( "warning, output sampling frequency %d not implemented for input %d", fout, fin ); - return ( -1 ); - } - } - else if ( fin == 16000 ) - { - if ( fout == 12800 ) - { - cind = 4; - } - else if ( fout == 32000 ) - { - cind = 5; - } - else if ( fout == 48000 ) - { - cind = 6; - } - else - { - printf( "warning, output sampling frequency %d not implemented for input %d", fout, fin ); - return ( -1 ); - } - } - else - { - printf( "warning, input sampling frequency %d not implemented", fin ); - return ( -1 ); - } - - *delayout = ct2[cind][9]; - - if ( ct2[cind][12] == 15 ) - { - cu = cu15; - } - - if ( ct2[cind][12] == 4 ) - { - cu = cu4; - } - - fk1 = 2 * ct2[cind][12] - 2; - k2d = fk1 / 2; /* shift of index in cu with respect to the next sample (ex 1.25 -> 0.25 ) */ - k3d = fk1 - 1; /* to compurte index in cu with respect to the last sample with - sign (ex 1.25 -> -0.75 ) */ - - kk = 0; - for ( i = 0; i < lg - ct2[cind][11]; ) - { - sigOut[j++] = sigIn[i]; - for ( k = 0; k < ct2[cind][10]; k++ ) - { - cc[kk][0] = sigIn[i + 1] / 3; - cc[kk][2] = ( sigIn[i] + sigIn[i + 2] ) / 2 - sigIn[i + 1]; - cc[kk][3] = ( sigIn[i] + sigIn[i + 3] - sigIn[i + 1] - sigIn[i + 2] - 4 * cc[kk][2] ) / 6; - cc[kk][1] = sigIn[i + 2] - sigIn[i + 1] - cc[kk][3] - cc[kk][2]; - i++; - - i2 = kk - 2; - i1 = kk - 1; - if ( i1 < 0 ) - { - i1 += 4; - } - - if ( i2 < 0 ) - { - i2 += 4; - } - - for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) - { - k2 = k1 - k2d; - k3 = k3d - k1; - vv = (float) ( cu[k1][2] * cc[i2][3] + cu[k1][1] * cc[i2][2] + cu[k1][0] * cc[i2][1] + cc[i2][0] ); - vv += (float) ( cu[k2][2] * cc[i1][3] + cu[k2][1] * cc[i1][2] + cu[k2][0] * cc[i1][1] + cc[i1][0] ); - vv += (float) ( -cu[k3][2] * cc[kk][3] + cu[k3][1] * cc[kk][2] - cu[k3][0] * cc[kk][1] + cc[kk][0] ); - sigOut[j++] = vv; - } - - kk++; - if ( kk == 4 ) - { - kk = 0; - } - } - } - - sigOut[j++] = sigIn[i]; - - for ( k = 0; k < ct2[cind][11] - 3; k++ ) - { - cc[kk][0] = sigIn[i + 1] / 3; - cc[kk][2] = ( sigIn[i] + sigIn[i + 2] ) / 2 - sigIn[i + 1]; - cc[kk][3] = ( sigIn[i] + sigIn[i + 3] - sigIn[i + 1] - sigIn[i + 2] - 4 * cc[kk][2] ) / 6; - cc[kk][1] = sigIn[i + 2] - sigIn[i + 1] - cc[kk][3] - cc[kk][2]; - i++; - - i2 = kk - 2; - i1 = kk - 1; - if ( i1 < 0 ) - { - i1 += 4; - } - - if ( i2 < 0 ) - { - i2 += 4; - } - - for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) - { - k2 = k1 - k2d; - k3 = k3d - k1; - vv = (float) ( cu[k1][2] * cc[i2][3] + cu[k1][1] * cc[i2][2] + cu[k1][0] * cc[i2][1] + cc[i2][0] ); - vv += (float) ( cu[k2][2] * cc[i1][3] + cu[k2][1] * cc[i1][2] + cu[k2][0] * cc[i1][1] + cc[i1][0] ); - vv += (float) ( -cu[k3][2] * cc[kk][3] + cu[k3][1] * cc[kk][2] - cu[k3][0] * cc[kk][1] + cc[kk][0] ); - sigOut[j++] = vv; - } - - kk++; - - if ( kk == 4 ) - { - kk = 0; - } - } - - kk--; - if ( kk == -1 ) - { - kk = 3; - } - - if ( ct2[cind][10] == 1 ) - { - sigOut[j++] = sigIn[i]; - } - - for ( k1 = ct2[cind][k]; k1 < fk1; k1 += ct2[cind][8] ) - { - k2 = k1 - k2d; - vv = (float) ( cu[k2][2] * cc[kk][3] + cu[k2][1] * cc[kk][2] + cu[k2][0] * cc[kk][1] + cc[kk][0] ); - sigOut[j++] = vv * 3; - } - - if ( ct2[cind][10] < 3 ) - { - sigOut[j++] = sigIn[i + 1]; - } - - for ( k1 = ct2[cind][k + 1]; k1 < fk1; k1 += ct2[cind][8] ) - { - vv = (float) ( cu[k1][2] * cc[kk][3] + cu[k1][1] * cc[kk][2] + cu[k1][0] * cc[kk][1] + cc[kk][0] ); - sigOut[j++] = vv * 3; - } - - if ( ct2[cind][10] == 1 ) - { - sigOut[j++] = sigIn[i + 2]; - } - } - - return lg_out; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Interpolate_allpass_steep() - * - * Interpolation by a factor 2 - *-------------------------------------------------------------------*/ - -void Interpolate_allpass_steep( - const float *in, /* i : input array of size N */ - float *mem, /* i/o: memory */ - const int16_t N, /* i : number of input samples */ - float *out /* o : output array of size 2*N */ -) -{ - int16_t n, k; - float temp[ALLPASSSECTIONS_STEEP - 1]; - - /* upper allpass filter chain */ - for ( k = 0; k < N; k++ ) - { - temp[0] = mem[0] + AP2_STEEP[0] * in[k]; - mem[0] = in[k] - AP2_STEEP[0] * temp[0]; - - /* for better performance, unroll this loop */ - for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) - { - temp[n] = mem[n] + AP2_STEEP[n] * temp[n - 1]; - mem[n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; - } - - out[2 * k + 1] = mem[ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; - mem[ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[2 * k + 1]; - } - - /* lower allpass filter chain */ - for ( k = 0; k < N; k++ ) - { - temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP1_STEEP[0] * in[k]; - mem[ALLPASSSECTIONS_STEEP] = in[k] - AP1_STEEP[0] * temp[0]; - - /* for better performance, unroll this loop */ - for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) - { - temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP1_STEEP[n] * temp[n - 1]; - mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP1_STEEP[n] * temp[n]; - } - - out[2 * k] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; - mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[2 * k]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void Interpolate_allpass_steep_32( const Word32 *in_fx, /* i : input array of size N Qx */ Word32 *mem_fx, /* i/o: memory Qx */ @@ -592,97 +102,6 @@ void Interpolate_allpass_steep_32( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Decimate_allpass_steep() - * - * Decimation by a factor 2 - *-------------------------------------------------------------------*/ - -void Decimate_allpass_steep( - const float *in, /* i : input array of size N */ - float *mem, /* i/o: memory */ - const int16_t N, /* i : number of input samples */ - float *out /* o : output array of size N/2 */ -) -{ - int16_t n, k; - float temp[ALLPASSSECTIONS_STEEP]; - - /* upper allpass filter chain */ - for ( k = 0; k < N / 2; k++ ) - { - temp[0] = mem[0] + AP1_STEEP[0] * in[2 * k]; - mem[0] = in[2 * k] - AP1_STEEP[0] * temp[0]; - - /* for better performance, unroll this loop */ - for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) - { - temp[n] = mem[n] + AP1_STEEP[n] * temp[n - 1]; - if ( fabs( temp[n] ) < 1e-12 ) - { - temp[n] = sign( temp[n] ) * 1e-12f; - } - mem[n] = temp[n - 1] - AP1_STEEP[n] * temp[n]; - } - - out[k] = mem[ALLPASSSECTIONS_STEEP - 1] + AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * temp[ALLPASSSECTIONS_STEEP - 2]; - mem[ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP1_STEEP[ALLPASSSECTIONS_STEEP - 1] * out[k]; - } - - /* lower allpass filter chain */ - temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP2_STEEP[0] * mem[2 * ALLPASSSECTIONS_STEEP]; - mem[ALLPASSSECTIONS_STEEP] = mem[2 * ALLPASSSECTIONS_STEEP] - AP2_STEEP[0] * temp[0]; - - /* for better performance, unroll this loop */ - for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) - { - temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP2_STEEP[n] * temp[n - 1]; - if ( fabs( temp[n] ) < 1e-12 ) - { - temp[n] = sign( temp[n] ) * 1e-12f; - } - mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; - } - - temp[ALLPASSSECTIONS_STEEP - 1] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * - temp[ALLPASSSECTIONS_STEEP - 2]; - - mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * - temp[ALLPASSSECTIONS_STEEP - 1]; - out[0] = (float) ( ( out[0] + temp[ALLPASSSECTIONS_STEEP - 1] ) * 0.5 ); - - for ( k = 1; k < N / 2; k++ ) - { - temp[0] = mem[ALLPASSSECTIONS_STEEP] + AP2_STEEP[0] * in[2 * k - 1]; - mem[ALLPASSSECTIONS_STEEP] = in[2 * k - 1] - AP2_STEEP[0] * temp[0]; - - /* for better performance, unroll this loop */ - for ( n = 1; n < ALLPASSSECTIONS_STEEP - 1; n++ ) - { - temp[n] = mem[ALLPASSSECTIONS_STEEP + n] + AP2_STEEP[n] * temp[n - 1]; - if ( fabs( temp[n] ) < 1e-12 ) - { - temp[n] = sign( temp[n] ) * 1e-12f; - } - mem[ALLPASSSECTIONS_STEEP + n] = temp[n - 1] - AP2_STEEP[n] * temp[n]; - } - - temp[ALLPASSSECTIONS_STEEP - 1] = mem[2 * ALLPASSSECTIONS_STEEP - 1] + AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * - temp[ALLPASSSECTIONS_STEEP - 2]; - mem[2 * ALLPASSSECTIONS_STEEP - 1] = temp[ALLPASSSECTIONS_STEEP - 2] - AP2_STEEP[ALLPASSSECTIONS_STEEP - 1] * - temp[ALLPASSSECTIONS_STEEP - 1]; - out[k] = (float) ( ( out[k] + temp[ALLPASSSECTIONS_STEEP - 1] ) * 0.5 ); - } - - /* z^(-1) */ - mem[2 * ALLPASSSECTIONS_STEEP] = in[N - 1]; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void Decimate_allpass_steep_fx32( const Word32 *in, /* i : input array of size N Qx */ Word32 *mem, /* i/o: memory Qx */ @@ -773,80 +192,6 @@ void Decimate_allpass_steep_fx32( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * interpolate_3_over_2_allpass() - * - * Interpolate 3/2 using allpass iir polyphase filter. Delay 4 samples @48k - *-------------------------------------------------------------------*/ - -void interpolate_3_over_2_allpass( - const float *input, /* i : input signal */ - const int16_t len, /* i : number of input samples */ - float *out, /* o : output signal */ - float *mem /* i/o: memory */ -) -{ - int16_t i, loop_len; - float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ - float out1_buff[L_FRAME32k * 3]; - float *out1; - float mem_temp; - const float *filt_coeff = allpass_poles_3_ov_2_flt; - - out1 = out1_buff; - - for ( i = 0; i < len; i++ ) - { - /* Upper branch */ - Vu[0] = mem[0] + filt_coeff[0] * ( input[i] - mem[1] ); - Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); - mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); - - mem[1] = Vu[0]; - mem[2] = Vu[1]; - *out1++ = mem[3]; - - /* Middle branch */ - Vm[0] = mem[0] + filt_coeff[3] * ( input[i] - mem[4] ); - Vm[1] = mem[4] + filt_coeff[4] * ( Vm[0] - mem[5] ); - mem[6] = mem[5] + filt_coeff[5] * ( Vm[1] - mem[6] ); - - mem[4] = Vm[0]; - mem[5] = Vm[1]; - *out1++ = mem[6]; - - /* Lower branch */ - Vl[0] = mem[0] + filt_coeff[6] * ( input[i] - mem[7] ); - Vl[1] = mem[7] + filt_coeff[7] * ( Vl[0] - mem[8] ); - mem[9] = mem[8] + filt_coeff[8] * ( Vl[1] - mem[9] ); - - mem[0] = input[i]; - mem[7] = Vl[0]; - mem[8] = Vl[1]; - *out1++ = mem[9]; - } - - loop_len = len * 3 / 2; - - /*decimate by 2 and LPF*/ - for ( i = 0; i < loop_len; i++ ) - { - mem_temp = out1_buff[2 * i]; - out[i] = ( ( ( 0.0473147f ) * ( mem_temp + mem[10] ) ) + ( ( -0.151521f ) * ( mem[11] + mem[14] ) ) ); - out[i] = ( out[i] + ( ( 0.614152f ) * ( mem[12] + mem[13] ) ) ); - mem[10] = mem[11]; - mem[11] = mem[12]; - mem[12] = mem[13]; - mem[13] = mem[14]; - mem[14] = mem_temp; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void interpolate_3_over_2_allpass_32( const Word32 *input, /* i : input signal Qx*/ const Word16 len, /* i : number of input samples */ @@ -938,159 +283,8 @@ void interpolate_3_over_2_allpass_32( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decimate_2_over_3_allpass() - * - * Decimate 2/3 using allpass iir polyphase filter. - *-------------------------------------------------------------------*/ - -void decimate_2_over_3_allpass( - const float *input, /* i : input signal */ - const int16_t len, /* i : number of input samples */ - float *out, /* o : output signal */ - float *mem, /* i/o: memory */ - float *lp_mem /* i/o: memory */ -) -{ - int16_t i, loop_len; - float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ - float *out1; - float *in; - float out1_buff[L_FRAME48k * 2]; - float tmp; - const float *filt_coeff = allpass_poles_3_ov_2_flt; - const float *lp_num = decimate_3_ov_2_lowpass_num; - const float *lp_den = decimate_3_ov_2_lowpass_den; - - /* Combine the 2nd order iir lpf with the decimation by 2 to improve the efficiency*/ - out1 = out1_buff; - - *out1++ = lp_num[0] * ( input[0] + lp_mem[0] ) - lp_den[2] * lp_mem[2]; - *out1++ = lp_num[1] * input[0] - lp_den[2] * lp_mem[1]; - - for ( i = 1; i < len; i++ ) - { - tmp = lp_num[0] * ( input[i] + input[i - 1] ) - lp_den[2] * out1[-2]; - *out1++ = tmp; - tmp = lp_num[1] * input[i] - lp_den[2] * out1[-2]; - *out1++ = tmp; - } - lp_mem[0] = input[len - 1]; - lp_mem[1] = out1[-1]; - lp_mem[2] = out1[-2]; - - /* do the all pass polyphase filter with pi/3 cutoff */ - out1 = out; - in = out1_buff; - loop_len = (int16_t) len * 2 / 3; - - for ( i = 0; i < loop_len; i++ ) - { - /* Lower branch */ - Vl[0] = mem[8] + filt_coeff[6] * ( *in - mem[9] ); - Vl[1] = mem[9] + filt_coeff[7] * ( Vl[0] - mem[10] ); - mem[11] = mem[10] + filt_coeff[8] * ( Vl[1] - mem[11] ); - - mem[8] = *in++; - mem[9] = Vl[0]; - mem[10] = Vl[1]; - *out1 = mem[11]; - - /* Middle branch */ - Vm[0] = mem[4] + filt_coeff[3] * ( *in - mem[5] ); - Vm[1] = mem[5] + filt_coeff[4] * ( Vm[0] - mem[6] ); - mem[7] = mem[6] + filt_coeff[5] * ( Vm[1] - mem[7] ); - - mem[4] = *in++; - mem[5] = Vm[0]; - mem[6] = Vm[1]; - *out1 += mem[7]; - - /* Upper branch */ - Vu[0] = mem[0] + filt_coeff[0] * ( *in - mem[1] ); - Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); - mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); - - mem[0] = *in++; - mem[1] = Vu[0]; - mem[2] = Vu[1]; - *out1++ += mem[3]; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * interpolate_3_over_1_allpass() - * - * Interpolate 3/1 using allpass iir polyphase filter. Delay 4 samples @48k - *-------------------------------------------------------------------*/ - -void interpolate_3_over_1_allpass( - const float *input, /* i : input signal */ - const int16_t len, /* i : number of input samples */ - float *out, /* o : output signal */ - float *mem /* i/o: memory */ -) -{ - int16_t i; - float Vu[2], Vm[2], Vl[2]; /* Outputs of three cascaded allpass stages (upper, middle, and lower) */ - float *out1; - float mem_temp; - const float *filt_coeff = allpass_poles_3_ov_2_flt; - - out1 = &out[0]; - - for ( i = 0; i < len; i++ ) - { - /* Upper branch */ - Vu[0] = mem[0] + filt_coeff[0] * ( input[i] - mem[1] ); - Vu[1] = mem[1] + filt_coeff[1] * ( Vu[0] - mem[2] ); - mem[3] = mem[2] + filt_coeff[2] * ( Vu[1] - mem[3] ); - - mem[1] = Vu[0]; - mem[2] = Vu[1]; - *out1++ = mem[3]; - - /* Middle branch */ - Vm[0] = mem[0] + filt_coeff[3] * ( input[i] - mem[4] ); - Vm[1] = mem[4] + filt_coeff[4] * ( Vm[0] - mem[5] ); - mem[6] = mem[5] + filt_coeff[5] * ( Vm[1] - mem[6] ); - - mem[4] = Vm[0]; - mem[5] = Vm[1]; - *out1++ = mem[6]; - /* Lower branch */ - Vl[0] = mem[0] + filt_coeff[6] * ( input[i] - mem[7] ); - Vl[1] = mem[7] + filt_coeff[7] * ( Vl[0] - mem[8] ); - mem[9] = mem[8] + filt_coeff[8] * ( Vl[1] - mem[9] ); - - mem[0] = input[i]; - mem[7] = Vl[0]; - mem[8] = Vl[1]; - *out1++ = mem[9]; - } - - /*LPF*/ - for ( i = 0; i < len * 3; i++ ) - { - mem_temp = out[i]; - out[i] = ( ( ( 0.572769f ) * ( mem[12] + mem[11] ) ) - ( ( 0.074005f ) * ( mem_temp + mem[10] ) ) ); - mem[10] = mem[11]; - mem[11] = mem[12]; - mem[12] = mem_temp; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void interpolate_3_over_1_allpass_32( const Word32 *input, /* i : input signal Qx */ const Word16 len, /* i : number of input samples */ @@ -1175,71 +369,3 @@ void interpolate_3_over_1_allpass_32( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * retro_interp4_5() - * - * - *-------------------------------------------------------------------*/ - -void retro_interp4_5( - const float *syn, - float *pst_old_syn ) -{ - float *pf5, *pf4; - int16_t c; - - /* resample st->pst_old_syn in a reverse way to preserve time-alignment */ - pf4 = (float *) &pst_old_syn[58]; - pf5 = (float *) pst_old_syn; - for ( c = 0; c < 57; c++ ) - { - *pf5++ = pf4[0]; - *pf5++ = 0.2f * pf4[0] + 0.8f * pf4[1]; - *pf5++ = 0.4f * pf4[1] + 0.6f * pf4[2]; - *pf5++ = 0.6f * pf4[2] + 0.4f * pf4[3]; - *pf5++ = 0.8f * pf4[3] + 0.2f * pf4[4]; - pf4 += 4; - } - *pf5++ = pf4[0]; - *pf5++ = 0.2f * pf4[0] + 0.8f * pf4[1]; - *pf5++ = 0.4f * pf4[1] + 0.6f * pf4[2]; - *pf5++ = 0.6f * pf4[2] + 0.4f * pf4[3]; - *pf5++ = 0.8f * pf4[3] + 0.2f * syn[0]; - /* all samples processed: NBPSF_PIT_MAX = 290 = (58*5) */ - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * retro_interp5_4() - * - * - *-------------------------------------------------------------------*/ - -void retro_interp5_4( - float *pst_old_syn ) -{ - float *pf5, *pf4; - int16_t c; - - /* resample st->pst_old_syn in a reverse way to preserve time-alignment */ - pf4 = (float *) &pst_old_syn[NBPSF_PIT_MAX - 1]; - pf5 = pf4; - for ( c = 0; c < 58; c++ ) - { - *pf4-- = 0.75f * pf5[0] + 0.25f * pf5[-1]; - *pf4-- = 0.50f * pf5[-1] + 0.50f * pf5[-2]; - *pf4-- = 0.25f * pf5[-2] + 0.75f * pf5[-3]; - *pf4-- = pf5[-4]; - pf5 -= 5; - } - /* all samples processed: NBPSF_PIT_MAX = 290 = (58*5) */ - - return; -} -#endif diff --git a/lib_com/mslvq_com.c b/lib_com/mslvq_com.c index fd871304e..bab16f165 100644 --- a/lib_com/mslvq_com.c +++ b/lib_com/mslvq_com.c @@ -48,646 +48,25 @@ * Local function prototypes *-----------------------------------------------------------------*/ -static void decode_comb( Word32 index, float *cv, int16_t idx_lead ); - -static void decode_sign_pc1( float *c, int16_t idx_sign, const int16_t parity ); - -static void put_value( float *cv, int16_t *p, float val, const int16_t dim, const int16_t no_new_val ); - -static void decode_leaders( Word32 index, int16_t idx_lead, float *cv ); - -static void idx2c( int16_t n, int16_t *p, const int16_t k, Word32 val ); - -static void divide_64_32( int16_t *x, UWord32 y, UWord32 *result, UWord32 *rem ); - - -/*-----------------------------------------------------------------* - * permute() - * used in CNG-LP coding - *-----------------------------------------------------------------*/ - -void permute( - float *pTmp1, /* i/o: vector whose components are to be permuted */ - const int16_t *perm /* i : permutation info (indexes that should be interchanged), max two perms */ -) -{ - int16_t p1, p2; - float tmp; - - p1 = perm[0]; - p2 = perm[1]; - tmp = pTmp1[p1]; - pTmp1[p1] = pTmp1[p2]; - pTmp1[p2] = tmp; - p1 = perm[2]; - - if ( p1 > -1 ) - { - p2 = perm[3]; - tmp = pTmp1[p1]; - pTmp1[p1] = pTmp1[p2]; - pTmp1[p2] = tmp; - } - - return; -} - -/*-----------------------------------------------------------------* - * make_offset_scale() - * - *-----------------------------------------------------------------*/ - static void make_offset_scale( const UWord32 tab_no_cv[], const Word8 *no_ld, - const int16_t no_scl, + const Word16 no_scl, UWord32 *offset_scale ) { - int16_t i; + Word16 i; offset_scale[0] = 1; - for ( i = 1; i <= no_scl; i++ ) - { - offset_scale[i] = offset_scale[i - 1] + tab_no_cv[(int16_t) no_ld[i - 1]]; - } - - return; -} - -/*-----------------------------------------------------------------* - * decode_indexes() - * - *-----------------------------------------------------------------*/ - -static int16_t decode_indexes( - int16_t *index, - const int16_t no_bits, - const float *p_scales, - const int16_t prediction_flag, - float *x_lvq, - const int16_t mode_glb ) -{ - UWord32 index1 = 0, index2, idx_scale; - uint16_t i; - float scale; - - int16_t len_scales = MAX_NO_SCALES * 2; - UWord32 offset_scale1[MAX_NO_SCALES + 1], offset_scale2[MAX_NO_SCALES + 1]; - - if ( no_bits <= 2 * LEN_INDICE ) /* the third short is not used */ - { - index[2] = 0; - if ( no_bits <= LEN_INDICE ) - { - index[1] = 0; - } - } - - /* safety check in case of bit errors */ - for ( i = 0; i < 3; i++ ) - { - if ( index[i] < 0 ) - { - set_f( x_lvq, 0.0f, 2 * LATTICE_DIM ); - index[i] = 0; - return 1; - } - } - - create_offset( offset_scale1, offset_scale2, mode_glb, prediction_flag ); - /* first subvector */ - if ( offset_scale2[MAX_NO_SCALES - 1] > 0 ) - { - divide_64_32( index, offset_scale2[MAX_NO_SCALES], &index1, &index2 ); - } - else - { - index1 = (UWord32) ( index[0] ); /* this is for very low bitrates, so there is no loss in truncation */ - index2 = 0; - } - - if ( index1 == 0 ) - { - for ( i = 0; i < LATTICE_DIM; i++ ) - { - x_lvq[i] = 0.0; - } - } - else - { - if ( index1 >= offset_scale1[MAX_NO_SCALES] ) - { - /* safety check in case of bit errors */ - set_f( x_lvq, 0.0f, 2 * LATTICE_DIM ); - return 1; - } - - /* find idx_scale */ - i = 1; - while ( (int16_t) i <= MAX_NO_SCALES && index1 >= offset_scale1[i] ) - { - i++; - } - - idx_scale = i - 1; - index1 -= offset_scale1[idx_scale]; - - /* find idx_leader */ - i = 1; - while ( index1 >= table_no_cv[i] ) - { - i++; - } - decode_comb( (Word32) ( index1 - table_no_cv[i - 1] ), x_lvq, i - 1 ); - scale = p_scales[mode_glb * len_scales + idx_scale]; - for ( i = 0; i < LATTICE_DIM; i++ ) - { - x_lvq[i] *= scale; - } - } - - /* second subvector */ - if ( index2 == 0 ) - { - for ( i = LATTICE_DIM; i < 2 * LATTICE_DIM; i++ ) - { - x_lvq[i] = 0.0; - } - } - else - { - - /* find the index for the scale/truncation */ - i = 1; - while ( index2 >= offset_scale2[i] ) - { - i++; - } - - idx_scale = i - 1; - index2 -= offset_scale2[idx_scale]; - /* find the index of the leader vector */ - i = 1; - while ( index2 >= table_no_cv[i] ) - { - i++; - } - decode_comb( (Word32) ( index2 - table_no_cv[i - 1] ), &x_lvq[LATTICE_DIM], i - 1 ); - - scale = p_scales[mode_glb * len_scales + MAX_NO_SCALES + idx_scale]; - for ( i = LATTICE_DIM; i < 2 * LATTICE_DIM; i++ ) - { - x_lvq[i] *= scale; - } - } - - return 0; -} - -/*-----------------------------------------------------------------* - * deindex_lvq() - * - *-----------------------------------------------------------------*/ - -int16_t deindex_lvq( - int16_t *index, /* i : index to be decoded, as an array of 3 shorts */ - float *x_lvq, /* o : decoded codevector */ - const int16_t mode, /* i : LVQ coding mode (select scales & no_lead ), or idx_cv */ - const int16_t sf_flag, /* i : safety net flag */ - const int16_t no_bits /* i : number of bits for lattice */ -) -{ - int16_t i; - const float *p_scales; - int16_t mode_glb; - int16_t ber_flag; - - if ( sf_flag == 1 ) - { - if ( mode < 6 ) /* for NB */ - { - mode_glb = offset_lvq_modes_SN[mode] + offset_in_lvq_mode_SN[mode][no_bits - min_lat_bits_SN[mode]]; - } - else - { - mode_glb = offset_lvq_modes_SN[mode] + no_bits - min_lat_bits_SN[mode]; /* there is granularity of 1 bit */ - } - p_scales = &scales[0][0]; - } - else - { - if ( ( mode < 6 ) || ( mode == 12 ) ) /* for NB */ - { - mode_glb = offset_lvq_modes_pred[mode] + offset_in_lvq_mode_pred[mode][no_bits - min_lat_bits_pred[mode]]; - } - else - { - mode_glb = offset_lvq_modes_pred[mode] + no_bits - min_lat_bits_pred[mode]; - } - p_scales = &scales_p[0][0]; - } - - /* decode the lattice index into the lattice codevectors for the two subvectors */ - ber_flag = decode_indexes( index, no_bits, p_scales, 1 - sf_flag, x_lvq, mode_glb ); - - if ( sf_flag == 1 ) - { - for ( i = 0; i < 2 * LATTICE_DIM; i++ ) - { - x_lvq[i] *= sigma_MSLVQ[mode][i]; - } - } - else - { - for ( i = 0; i < 2 * LATTICE_DIM; i++ ) - { - x_lvq[i] *= sigma_p[mode][i]; - } - } - - return ber_flag; -} - -/*------------------------------------------------------------------------------------------------------------* - * deindex_lvq_cng() - * - * Note: - * The sampling frequency for the LVQ CNG decoder frame can be determined by checking the fully decoded - * value of the highest order LSF coefficient. Thus sampling rate information, nor extra codebooks are - * not needed for deindex_lvq_cng(), since it is embedded inside the LSF codebooks. - *------------------------------------------------------------------------------------------------------------*/ - -int16_t deindex_lvq_cng( - int16_t *index, /* i : index to be decoded, as an array of 3 shorts */ - float *x_lvq, /* o : decoded codevector */ - const int16_t idx_cv, /* i : relative mode_lvq, wrt START_CNG */ - const int16_t no_bits /* i : number of bits for lattice */ -) -{ - int16_t i; - const float *p_scales; - int16_t mode_glb, mode; - int16_t ber_flag; - - mode_glb = START_CNG_IVAS + idx_cv; - mode = LVQ_COD_MODES + idx_cv; - - p_scales = &scales[0][0]; - ber_flag = decode_indexes( index, no_bits, p_scales, 0, x_lvq, mode_glb ); - - for ( i = 0; i < 2 * LATTICE_DIM; i++ ) + move32(); + FOR( i = 1; i <= no_scl; i++ ) { - x_lvq[i] *= sigma_MSLVQ[mode][i]; - } - - /* check if permutting needed */ - if ( cng_sort[idx_cv] ) - { - permute( x_lvq, perm_MSLVQ[idx_cv] ); - } - - return ber_flag; -} - - -/*-----------------------------------------------------------------* - * decode_comb() - * - * combinatorial deindexing of a codevector including the signs - * - *-----------------------------------------------------------------*/ - -static void decode_comb( - Word32 index, /* i : index to be decoded */ - float *cv, /* o : decoded codevector */ - int16_t idx_lead /* i : leader class index */ -) -{ - int16_t idx_sign; - - idx_sign = (int16_t) ( index / pi0[idx_lead] ); - index -= idx_sign * pi0[idx_lead]; - decode_leaders( index, idx_lead, cv ); - decode_sign_pc1( cv, idx_sign, pl_par[idx_lead] ); - - return; -} - -/*-----------------------------------------------------------------* - * decode_leaders() - * - * decode index of a codevector from the leader class idx_lead - *-----------------------------------------------------------------*/ - -static void decode_leaders( - Word32 index, /* i : index to be decoded */ - int16_t idx_lead, /* i : leader class index */ - float *cv /* o : decoded codevector */ -) -{ - int16_t i, no_vals_loc, no_vals_last, p[LATTICE_DIM], dim_loc, n_crt; - Word32 index1; - float val_crt; - - no_vals_loc = no_vals[idx_lead]; - val_crt = vals[idx_lead][no_vals_loc - 1]; - no_vals_last = no_vals_ind[idx_lead][no_vals_loc - 1]; - - for ( i = 0; i < no_vals_last; i++ ) - { - cv[i] = val_crt; - } - - val_crt = 1; - dim_loc = no_vals_last; - - switch ( no_vals_loc ) - { - case 1: - break; - case 2: - idx2c( LATTICE_DIM, p, no_vals_ind[idx_lead][0], index ); - put_value( cv, p, vals[idx_lead][0], no_vals_last, no_vals_ind[idx_lead][0] ); - break; - case 4: - dim_loc += no_vals_ind[idx_lead][2]; - n_crt = no_vals_ind[idx_lead][2]; - index1 = (Word32) index / C_VQ[dim_loc][n_crt]; - index -= index1 * C_VQ[dim_loc][n_crt]; - idx2c( dim_loc, p, n_crt, index ); - put_value( cv, p, vals[idx_lead][2], no_vals_last, no_vals_ind[idx_lead][2] ); - index = index1; - /* FALLTHRU */ - case 3: - dim_loc += no_vals_ind[idx_lead][1]; - n_crt = no_vals_ind[idx_lead][1]; - index1 = (Word32) index / C_VQ[dim_loc][n_crt]; - index -= index1 * C_VQ[dim_loc][n_crt]; - idx2c( dim_loc, p, n_crt, index ); - put_value( cv, p, vals[idx_lead][1], dim_loc - n_crt, n_crt ); - idx2c( LATTICE_DIM, p, no_vals_ind[idx_lead][0], index1 ); - put_value( cv, p, vals[idx_lead][0], dim_loc, no_vals_ind[idx_lead][0] ); - break; + offset_scale[i] = UL_addNsD( offset_scale[i - 1], tab_no_cv[(Word16) no_ld[i - 1]] ); + move32(); } return; } -/*-----------------------------------------------------------------* - * put_value() - * - * inserts no_new_val values of val in the codevector cv at the positions given by the array p - *-----------------------------------------------------------------*/ - -static void put_value( - float *cv, /* i : input codevector */ - int16_t *p, /* i : array with positions */ - float val, /* i : value to be inserted */ - const int16_t dim, /* i : vector dimension */ - const int16_t no_new_val /* i : number of values to be inserted */ -) -{ - float cv_out[LATTICE_DIM]; - int16_t i, occ[LATTICE_DIM], cnt; - - for ( i = 0; i < dim + no_new_val; i++ ) - { - occ[i] = 0; - } - - for ( i = 0; i < no_new_val; i++ ) - { - cv_out[p[i]] = val; - occ[p[i]] = 1; - } - - cnt = 0; - for ( i = 0; i < dim + no_new_val; i++ ) - { - if ( occ[i] == 0 ) - { - cv_out[i] = cv[cnt++]; - } - } - - for ( i = 0; i < dim + no_new_val; i++ ) - { - cv[i] = cv_out[i]; - } - - return; -} - -/*-----------------------------------------------------------------* - * idx2c() - * - * decode index of binomial combinations, find the positions of k components out of n total components - *-----------------------------------------------------------------*/ - -static void idx2c( - int16_t n, /* i : total number of positions (components) */ - int16_t *p, /* o : array with positions of the k components */ - const int16_t k, /* i : number of components whose position is to be determined */ - Word32 val /* i : index to be decoded */ -) -{ - int16_t i, skip, pos, k1; - - skip = 0; - pos = 0; - k1 = k - 1; - while ( skip + C_VQ[n - pos - 1][k1] - 1 < val ) - { - skip += C_VQ[n - pos - 1][k1]; - pos++; - } - - p[0] = pos; - n -= pos + 1; - val -= skip; - if ( k == 1 ) - { - return; - } - - idx2c( n, p + 1, k1, val ); - - /* pos+1 */ - for ( i = 1; i < k; i++ ) - { - p[i] += pos + 1; - } - - return; -} - -/*-----------------------------------------------------------------* - * decode_sign_pc1() - * - *-----------------------------------------------------------------*/ - -static void decode_sign_pc1( - float *c, /* o : decoded codevector */ - int16_t idx_sign, /* i : sign index */ - const int16_t parity /* i : parity flag (+1/-1/0) */ -) -{ - int16_t i, len = LATTICE_DIM, cnt_neg = 1; - - if ( parity ) - { - len -= 1; - } - - for ( i = 0; i < len; i++ ) - { - if ( c[i] > 0 ) - { - if ( idx_sign % 2 ) - { - c[i] = -c[i]; - cnt_neg = -cnt_neg; - } - idx_sign >>= 1; - } - } - - if ( len < LATTICE_DIM ) - { - if ( cnt_neg != parity ) - { - c[len] = -c[len]; - } - } - - return; -} - -/*-----------------------------------------------------------------* - * extract_low() - * - * (!!!!! function for int64 !!!!) - *-----------------------------------------------------------------*/ - -static UWord32 extract_low( - UWord32 x ) -{ - return ( x & ( 0xffff ) ); -} - -/*-----------------------------------------------------------------* - * extract_high() - * - * (!!!!! function for int64 !!!!) - *-----------------------------------------------------------------*/ - -static UWord32 extract_high( - UWord32 x ) -{ - return ( x >> 16 ); -} - -/*-----------------------------------------------------------------* - * multiply32_32_64() - * - * (!!!!! function for int64 !!!!) - *-----------------------------------------------------------------*/ - -void multiply32_32_64( - UWord32 x, - UWord32 y, - UWord32 *res ) -{ - UWord32 tmp, x_tmp[2], y_tmp[2]; - UWord32 high = 0; - - x_tmp[0] = extract_low( x ); /* lowest 16 bits */ - x_tmp[1] = extract_high( x ); - y_tmp[0] = extract_low( y ); - y_tmp[1] = extract_high( y ); - tmp = x_tmp[0] * y_tmp[0]; - high = extract_high( tmp ); - res[0] = extract_low( tmp ); - tmp = x_tmp[1] * y_tmp[0] + x_tmp[0] * y_tmp[1] + high; /* x and y are not using all 32 bits */ - high = extract_high( tmp ); - res[0] += ( extract_low( tmp ) << 16 ); - tmp = x_tmp[1] * y_tmp[1] + high; - res[1] = tmp; - - return; -} - -/*-----------------------------------------------------------------* - * get_no_bits() - * - * (!!!!! function for int64 !!!!) - *-----------------------------------------------------------------*/ - -static int16_t get_no_bits( - UWord32 x ) -{ - int16_t nb = 0; - - if ( x == 0 ) - { - return 1; - } - - while ( x > 0 ) - { - x >>= 1; - nb++; - } - - return nb; -} - -/*-----------------------------------------------------------------* - * divide_64_32() - * - * (!!!!! function for int64 !!!!) - *-----------------------------------------------------------------*/ - -static void divide_64_32( - int16_t *xs, /* i : denominator as array of two int32 */ - UWord32 y, /* i : nominator on 32 bits */ - UWord32 *result, /* o : integer division result on 32 bits */ - UWord32 *rem /* o : integer division reminder on 32 bits */ -) -{ - int16_t nb_x1; - UWord32 r, q, q1, x_tmp, x[2]; - - x[0] = ( ( (UWord32) xs[2] & ( ( 1 << 2 ) - 1 ) ) << ( LEN_INDICE * 2 ) ) + ( xs[1] << LEN_INDICE ) + xs[0]; - x[1] = xs[2] >> 2; - - /* find number of bits of x[0] and x[1] */ - nb_x1 = get_no_bits( x[1] ); - - /* take the first 32 bits */ - if ( nb_x1 > 0 ) - { - x_tmp = ( x[1] << ( 32 - nb_x1 ) ) + ( x[0] >> nb_x1 ); - q = (UWord32) ( x_tmp / y + 0.5 ); - r = x_tmp - q * y; /* this is the first reminder */ - r = ( r << nb_x1 ) + ( x[0] & ( ( 1 << nb_x1 ) - 1 ) ); - - q1 = (UWord32) ( r / y + 0.5 ); - *result = ( q << nb_x1 ) + q1; - *rem = r - q1 * y; - } - else - { - x_tmp = x[0]; - q = ( (UWord32) ( x_tmp / y + 0.5 ) ); - *result = q; - *rem = x_tmp - q * y; - } - - return; -} - - /*-----------------------------------------------------------------* * create_offset() * @@ -740,7 +119,6 @@ void create_offset( * * sorts in descending order and computes indices in the sorted vector *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void sort_desc_ind_16_fx( Word16 *s, /* i/o: vector to be sorted Qx*/ const Word16 len, /* i : vector length */ @@ -830,111 +208,3 @@ void sort_desc_ind_32_fx( return; } -#endif -void sort_desc_ind( - float *s, /* i/o: vector to be sorted */ - const int16_t len, /* i : vector length */ - int16_t *ind /* o : array of indices */ -) -{ - int16_t i, k, sorted, a; - float t; - - for ( i = 0; i < len; i++ ) - { - ind[i] = i; - } - sorted = 0; - for ( k = len - 1; k && !sorted; k-- ) - { - sorted = 1; - for ( i = 0; i < k; i++ ) - { - if ( s[i] < s[i + 1] ) - { - sorted = 0; - t = s[i]; - s[i] = s[i + 1]; - s[i + 1] = t; - a = ind[i]; - ind[i] = ind[i + 1]; - ind[i + 1] = a; - } - } - } - - return; -} - -/*-----------------------------------------------------------------* - * deindex_lvq_SHB() - * - * - *-----------------------------------------------------------------*/ - -void deindex_lvq_SHB( - UWord32 index, - float *out, - const int16_t nbits, - const int16_t mode ) -{ - uint16_t i; - const Word8 *p_no_lead; - const float *p_scales; - float scale; - int16_t idx_scale; - UWord32 offsets[MAX_NO_SCALES + 1]; - - if ( mode == 0 ) - { - p_no_lead = &no_lead_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; - p_scales = &scales_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; - } - else - { - p_no_lead = &no_lead_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; - p_scales = &scales_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; - } - - - if ( index == 0 ) - { - set_zero( out, LATTICE_DIM ); - } - else - { - /* create offsets */ - offsets[0] = 0; - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - offsets[i + 1] = table_no_cv[p_no_lead[i]] + offsets[i]; - } - - /* find idx_scale */ - idx_scale = 0; - while ( (int16_t) i <= MAX_NO_SCALES && index >= offsets[idx_scale] ) - { - idx_scale++; - } - idx_scale--; - index -= offsets[idx_scale]; - - /* find idx_leader */ - i = 1; - while ( index > table_no_cv[i] ) - { - i++; - } - i = i - 1; - - decode_comb( (Word32) ( index - table_no_cv[i] - 1 ), out, i ); - - scale = p_scales[idx_scale]; - for ( i = 0; i < LATTICE_DIM; i++ ) - { - out[i] *= scale * sigma_BWE[mode * LATTICE_DIM + i]; - } - } - - return; -} diff --git a/lib_com/nelp.c b/lib_com/nelp.c deleted file mode 100644 index 3b27ab756..000000000 --- a/lib_com/nelp.c +++ /dev/null @@ -1,156 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * dequantize_uvg() - * - * Dequantize unvoiced gains - *--------------------------------------------------------------------*/ - -void dequantize_uvg( - int16_t iG1, /* i : gain 1 index */ - int16_t *iG2, /* i : gain 2 index */ - float *G, /* o : quantized gain */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t i, k; - const float( *UVG1CB )[2] = NULL; - const float( *UVG2CB1 )[5] = NULL; - const float( *UVG2CB2 )[5] = NULL; - - if ( bwidth == NB ) - { - UVG1CB = UVG1CB_NB; - UVG2CB1 = UVG2CB1_NB; - UVG2CB2 = UVG2CB2_NB; - } - - else if ( bwidth == WB || bwidth == SWB ) - { - UVG1CB = UVG1CB_WB; - UVG2CB1 = UVG2CB1_WB; - UVG2CB2 = UVG2CB2_WB; - } - - for ( i = 0; i < 2; i++ ) - { - for ( k = 0; k < 5; k++ ) - { - if ( i == 0 ) - { - G[i * 5 + k] = (float) pow( 10.0, UVG1CB[iG1][i] ) * UVG2CB1[iG2[i]][k]; - } - else if ( i == 1 ) - { - G[i * 5 + k] = (float) pow( 10.0, UVG1CB[iG1][i] ) * UVG2CB2[iG2[i]][k]; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * generate_nelp_excitation() - * - * Generate excitation for NELP coding. - *--------------------------------------------------------------------*/ - -void generate_nelp_excitation( - int16_t *seed, /* i/o: random number seed */ - float *Gains, /* i : excitation gains */ - float *output, /* o : excitation output */ - float gain_fac /* i : gain factor */ -) -{ - int16_t i, len, j; - float tmp[31], tmp1[31], tmpf; - int16_t k1, k2, I[31], tmpi; - - for ( i = 0; i < 10; i++ ) - { - if ( i == 9 ) - { - len = 31; - } - else - { - len = 25; - } - - for ( j = 0; j < len; j++ ) - { - tmp[j] = ( ( *seed ) = 521 * ( *seed ) + 259 ) / PCM16_TO_FLT_FAC; - tmp1[j] = ABSVAL( tmp[j] ); - I[j] = j; - } - for ( k1 = 0; k1 < len - 1; k1++ ) - { - for ( k2 = k1 + 1; k2 < len; k2++ ) - { - if ( tmp1[k2] > tmp1[k1] ) - { - tmpi = I[k2]; - tmpf = tmp1[k2]; - tmp1[k2] = tmp1[k1]; - I[k2] = I[k1]; - tmp1[k1] = tmpf; - I[k1] = tmpi; - } - } - } - - /*using a factor of 1.37 to compensate for the ~ 2.5 ( or 2.73) dB diff between this scheme and EVS-UV */ - for ( j = 0; j < (int16_t) rint_new( len / 4.0f ); j++ ) - { - output[i * 25 + I[j]] = (float) ( Gains[i] * sqrt( 3.0f ) * tmp[I[j]] * gain_fac ); - } - for ( ; j < len; j++ ) - { - output[i * 25 + I[j]] = 0; - } - } - - return; -} diff --git a/lib_com/options.h b/lib_com/options.h index 5ad891b9b..64fcbf193 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -67,9 +67,7 @@ #define IVAS_FLOAT_FIXED #define IVAS_FLOAT_FIXED_CONVERSIONS /* Temporary macro to keep track of intermediate flt to fixed and fixed to flt conversions */ -#ifdef IVAS_FLOAT_FIXED #define MSAN_FIX -#endif #define ISM_DISABLE #define FIX_TMP_714 #define BASOP_NOGLOB_TMP_715 @@ -81,5 +79,4 @@ #define SIMPLIFY_CODE_BE // Simplify synthesis loop #define CR_2109_to_2112_cd0_ce0 /* This is related to the CRs include in the 26.444 package of 21-12. Concerns lead_deindexing and */ #define FIX_QMETADATA_PENALTY /* Nokia: transform penalty calculation in qmetadata into integer operations */ -#define FIX_1013_CRASH_HQ_CORE_DEC /* Ittiam: Saturation added on the lines of EVS */ #endif diff --git a/lib_com/parameter_bitmaping.c b/lib_com/parameter_bitmaping.c deleted file mode 100644 index 50cf4886f..000000000 --- a/lib_com/parameter_bitmaping.c +++ /dev/null @@ -1,554 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include -#include "options.h" -#include "stat_com.h" -#include "prot.h" -#include "prot_fx.h" -#include "wmc_auto.h" - - -/********************************/ -/* Helper functions */ -/********************************/ - -/** Put nBits long encoded value from *pStream into bitstream. Using the function EncodeValue for encoding. */ -static int16_t PutIntoBitstream( const int16_t **pStream, TEncodeValue EncodeValue, int16_t index, BSTR_ENC_HANDLE hBstr, const int16_t nBits ) -{ - const int16_t value = *( *pStream )++; - const int16_t codedValue = EncodeValue( value, index ); - - push_next_indice( hBstr, codedValue, nBits ); - - return value; -} -/** Put nBits long encoded value from *pStream into bitstream. Using the function EncodeValue for encoding. */ -static Word16 PutIntoBitstream_fx( - const Word16 **pStream, - TEncodeValue EncodeValue, - Word16 index, - BSTR_ENC_HANDLE hBstr, - const Word16 nBits ) -{ - Word16 value; - Word16 codedValue; - - move16(); - value = *( *pStream )++; - codedValue = EncodeValue( value, index ); - - push_next_indice_fx( hBstr, codedValue, nBits ); - - return value; -} -#ifdef IVAS_FLOAT_FIXED -static Word16 PutIntoBitstream_ivas_fx( - const Word16 **pStream, - TEncodeValue EncodeValue, - Word16 index, - BSTR_ENC_HANDLE hBstr, - const Word16 nBits ) -{ - Word16 value; - Word16 codedValue; - - move16(); - value = *( *pStream )++; - codedValue = EncodeValue( value, index ); - - push_next_indice( hBstr, codedValue, nBits ); - - return value; -} -#endif -/** Get nBits long value from bitstream into *pStream. */ -static int16_t GetFromBitstream( - Decoder_State *st, - TDecodeValue DecodeValue, - uint16_t index, - int16_t nFixedBits, - int16_t **pStream ) -{ - int16_t value = 0; - if ( DecodeValue != NULL ) - { - DecodeValue( st, index, &value ); - } - else - { - value = get_next_indice( st, nFixedBits ); - } - *( *pStream )++ = value; - - return value; -} - -#ifdef IVAS_FLOAT_FIXED -static Word16 FixedWidthEncoding( Word16 value, Word16 index ) -{ - (void) index; /* suppress compiler warnings */ - - return value; -} -#else -static int16_t FixedWidthEncoding( int16_t value, int16_t index ) -{ - (void) index; /* suppress compiler warnings */ - - return value; -} -#endif - - -/********************************/ -/* Interface functions */ -/********************************/ - -void GetParameters( - ParamsBitMap const *paramsBitMap, - const int16_t nArrayLength, - void const *pParameter, - int16_t **pStream, - int16_t *pnSize, - int16_t *pnBits ) -{ - int16_t index; - int16_t iParam, nParams; - int16_t value; - void const *pSubStruct; - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( pnBits != NULL ) ); - - nParams = paramsBitMap->nParams; - for ( index = 0; index < nArrayLength; index++ ) - { - for ( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *const param = ¶msBitMap->params[iParam]; - -#define WMC_TOOL_SKIP - pSubStruct = param->GetParamValue( pParameter, index, &value ); -#undef WMC_TOOL_SKIP - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - if ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) - { - *( *pStream )++ = value; - } - else - { - *( *pStream )++ = value - 1; - } - ++*pnSize; -#define WMC_TOOL_SKIP - *pnBits += ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( value, index ); -#undef WMC_TOOL_SKIP - if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - GetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); - } - } - } - - return; -} - -void GetParameters_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, // Q0 - void const *pParameter, // Q0 - Word16 **pStream, // Q0 - Word16 *pnSize, // Q0 - Word16 *pnBits ) // Q0 -{ - Word16 index; - Word16 iParam, nParams; - Word16 value; - void const *pSubStruct; - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( pnBits != NULL ) ); - - nParams = paramsBitMap->nParams; - move16(); - FOR( index = 0; index < nArrayLength; index++ ) - { - FOR( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *const param = ¶msBitMap->params[iParam]; - -#define WMC_TOOL_SKIP - pSubStruct = param->GetParamValue( pParameter, index, &value ); -#undef WMC_TOOL_SKIP - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - test(); - IF( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) - { - *( *pStream )++ = value; - move16(); - } - ELSE - { - *( *pStream )++ = sub( value, 1 ); - move16(); - } - ++*pnSize; -#define WMC_TOOL_SKIP - IF( ( param->nBits != 0 ) ) - { - *pnBits = add( *pnBits, param->nBits ); - } - ELSE - { - *pnBits = add( *pnBits, param->GetNumberOfBits( value, index ) ); - } - move16(); -#undef WMC_TOOL_SKIP - - test(); - IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - GetParameters_fx( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); - } - } - } - - return; -} - -void SetParameters( - ParamsBitMap const *paramsBitMap, - const int16_t nArrayLength, - void *pParameter, - const int16_t **pStream, - int16_t *pnSize ) -{ - int16_t index; - int16_t iParam, nParams; - int16_t value; - void *pSubStruct; - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) ); - - nParams = paramsBitMap->nParams; - for ( index = 0; index < nArrayLength; index++ ) - { - for ( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *const param = ¶msBitMap->params[iParam]; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - - value = *( *pStream )++ + ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ? 0 : 1 ); -#define WMC_TOOL_SKIP - pSubStruct = param->SetParamValue( pParameter, index, value ); -#undef WMC_TOOL_SKIP - ++*pnSize; - if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - SetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize ); - } - } - } - - return; -} - -void SetParameters_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, - void *pParameter, - const Word16 **pStream, - Word16 *pnSize ) -{ - Word16 index; - Word16 iParam, nParams; - Word16 value; - void *pSubStruct; - void *pTmp; - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) ); - nParams = paramsBitMap->nParams; - - FOR( index = 0; index < nArrayLength; index++ ) - { - FOR( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *param; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - - move16(); - param = ¶msBitMap->params[iParam]; - - move16(); - value = 1; - if ( s_or( param->fZeroAllowed != 0, param->EncodeValue != NULL ) ) - { - move16(); - value = 0; - } - value = add( value, *( *pStream )++ ); - -#define WMC_TOOL_SKIP - pSubStruct = param->SetParamValue( pParameter, index, value ); -#undef WMC_TOOL_SKIP - move16(); - *pnSize = add( *pnSize, 1 ); - - IF( s_and( param->pSubParamBitMap != NULL, value > 0 ) ) - { - pTmp = pParameter; - if ( pSubStruct != NULL ) - pTmp = pSubStruct; - SetParameters( param->pSubParamBitMap, value, pTmp, pStream, pnSize ); - } - } - } -} - -void WriteToBitstream( - ParamsBitMap const *paramsBitMap, - const int16_t nArrayLength, - const int16_t **pStream, - int16_t *pnSize, - BSTR_ENC_HANDLE hBstr, - int16_t *pnBits ) -{ - int16_t index; - int16_t iParam, nParams; - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); - - nParams = paramsBitMap->nParams; - for ( index = 0; index < nArrayLength; index++ ) - { - for ( iParam = 0; iParam < nParams; iParam++ ) - { - const ParamBitMap *param = ¶msBitMap->params[iParam]; - int16_t nBits; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - int16_t fShiftValue; - TEncodeValue EncodeValue; - int16_t value; - -#define WMC_TOOL_SKIP - nBits = ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( **pStream, index ); -#undef WMC_TOOL_SKIP - fShiftValue = !param->fZeroAllowed && ( param->EncodeValue == NULL ); - EncodeValue = ( param->EncodeValue == NULL ) ? &FixedWidthEncoding : param->EncodeValue; - value = PutIntoBitstream( pStream, EncodeValue, index, hBstr, nBits ) + ( fShiftValue ? 1 : 0 ); - ++*pnSize; - *pnBits += nBits; - if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - WriteToBitstream( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); - } - } - } - - return; -} - -void WriteToBitstream_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, - const Word16 **pStream, - Word16 *pnSize, - BSTR_ENC_HANDLE hBstr, - Word16 *pnBits ) -{ - Word16 index; - Word16 iParam, nParams; - - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); - nParams = paramsBitMap->nParams; - - FOR( index = 0; index < nArrayLength; index++ ) - { - - FOR( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *param; - Word16 nBits; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - Word16 fShiftValue; - TEncodeValue EncodeValue; - Word16 value; - - move16(); - param = ¶msBitMap->params[iParam]; - - move16(); - nBits = param->nBits; - IF( param->nBits == 0 ) - { -#define WMC_TOOL_SKIP - nBits = param->GetNumberOfBits( **pStream, index ); -#undef WMC_TOOL_SKIP - } - - test(); - test(); - fShiftValue = s_and( param->fZeroAllowed == 0, param->EncodeValue == NULL ); - move16(); - EncodeValue = param->EncodeValue; - if ( param->EncodeValue == NULL ) - { - move16(); - EncodeValue = &FixedWidthEncoding; - } - value = PutIntoBitstream_fx( pStream, EncodeValue, index, hBstr, nBits ); - if ( fShiftValue ) - { - value = add( value, 1 ); - } - - move16(); - *pnSize = add( *pnSize, 1 ); - move16(); - *pnBits = add( *pnBits, nBits ); - - IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - WriteToBitstream_fx( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); - } - } - } -} -#ifdef IVAS_FLOAT_FIXED -void WriteToBitstream_ivas_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, - const Word16 **pStream, - Word16 *pnSize, - BSTR_ENC_HANDLE hBstr, - Word16 *pnBits ) -{ - Word16 index; - Word16 iParam, nParams; - - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); - nParams = paramsBitMap->nParams; - move16(); - - FOR( index = 0; index < nArrayLength; index++ ) - { - - FOR( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *param; - Word16 nBits; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - Word16 fShiftValue; - TEncodeValue EncodeValue; - Word16 value; - - move16(); - param = ¶msBitMap->params[iParam]; - - move16(); - nBits = param->nBits; - IF( param->nBits == 0 ) - { -#define WMC_TOOL_SKIP - nBits = param->GetNumberOfBits( **pStream, index ); -#undef WMC_TOOL_SKIP - } - - fShiftValue = s_and( param->fZeroAllowed == 0, param->EncodeValue == NULL ); - - EncodeValue = param->EncodeValue; - if ( param->EncodeValue == NULL ) - { - move16(); - EncodeValue = &FixedWidthEncoding; - } - value = PutIntoBitstream_ivas_fx( pStream, EncodeValue, index, hBstr, nBits ); - IF( fShiftValue ) - { - value = add( value, 1 ); - } - - move16(); - *pnSize = add( *pnSize, 1 ); - move16(); - *pnBits = add( *pnBits, nBits ); - - test(); - IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - WriteToBitstream_ivas_fx( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); - } - } - } -} -#endif - -void ReadFromBitstream( - ParamsBitMap const *paramsBitMap, - const int16_t nArrayLength, - Decoder_State *st, - int16_t **pStream, - int16_t *pnSize ) -{ - int16_t index; - int16_t iParam, nParams; - int16_t fShiftValue; - int16_t value; - - assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( st != NULL ) ); - - nParams = paramsBitMap->nParams; - for ( index = 0; index < nArrayLength; index++ ) - { - for ( iParam = 0; iParam < nParams; iParam++ ) - { - ParamBitMap const *param = ¶msBitMap->params[iParam]; - /* If a function for encoding/decoding value is defined than it should take care of 0 */ - - fShiftValue = !param->fZeroAllowed && ( param->EncodeValue == NULL ); - value = GetFromBitstream( st, param->DecodeValue, index, param->nBits, pStream ) + ( fShiftValue ? 1 : 0 ); - if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) - { - ReadFromBitstream( param->pSubParamBitMap, value, st, pStream, pnSize ); - } - } - } - - *pnSize += nParams * nArrayLength; - - return; -} diff --git a/lib_com/parameter_bitmaping_fx.c b/lib_com/parameter_bitmaping_fx.c index 6c661efa8..180275d8f 100644 --- a/lib_com/parameter_bitmaping_fx.c +++ b/lib_com/parameter_bitmaping_fx.c @@ -5,6 +5,391 @@ #include "prot_fx.h" #include "wmc_auto.h" + +/** Put nBits long encoded value from *pStream into bitstream. Using the function EncodeValue for encoding. */ +static Word16 PutIntoBitstream_fx( + const Word16 **pStream, + TEncodeValue EncodeValue, + Word16 index, + BSTR_ENC_HANDLE hBstr, + const Word16 nBits ) +{ + Word16 value; + Word16 codedValue; + + move16(); + value = *( *pStream )++; + codedValue = EncodeValue( value, index ); + + push_next_indice_fx( hBstr, codedValue, nBits ); + + return value; +} +static Word16 PutIntoBitstream_ivas_fx( + const Word16 **pStream, + TEncodeValue EncodeValue, + Word16 index, + BSTR_ENC_HANDLE hBstr, + const Word16 nBits ) +{ + Word16 value; + Word16 codedValue; + + move16(); + value = *( *pStream )++; + codedValue = EncodeValue( value, index ); + + push_next_indice( hBstr, codedValue, nBits ); + + return value; +} + +static Word16 FixedWidthEncoding( Word16 value, Word16 index ) +{ + (void) index; /* suppress compiler warnings */ + + return value; +} + + +/********************************/ +/* Interface functions */ +/********************************/ + +void GetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + void const *pParameter, + int16_t **pStream, + int16_t *pnSize, + int16_t *pnBits ) +{ + int16_t index; + int16_t iParam, nParams; + int16_t value; + void const *pSubStruct; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( pnBits != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *const param = ¶msBitMap->params[iParam]; + +#define WMC_TOOL_SKIP + pSubStruct = param->GetParamValue( pParameter, index, &value ); +#undef WMC_TOOL_SKIP + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + if ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) + { + *( *pStream )++ = value; + } + else + { + *( *pStream )++ = value - 1; + } + ++*pnSize; +#define WMC_TOOL_SKIP + *pnBits += ( param->nBits != 0 ) ? param->nBits : param->GetNumberOfBits( value, index ); +#undef WMC_TOOL_SKIP + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + GetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); + } + } + } + + return; +} + +void GetParameters_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, // Q0 + void const *pParameter, // Q0 + Word16 **pStream, // Q0 + Word16 *pnSize, // Q0 + Word16 *pnBits ) // Q0 +{ + Word16 index; + Word16 iParam, nParams; + Word16 value; + void const *pSubStruct; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( pnBits != NULL ) ); + + nParams = paramsBitMap->nParams; + move16(); + FOR( index = 0; index < nArrayLength; index++ ) + { + FOR( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *const param = ¶msBitMap->params[iParam]; + +#define WMC_TOOL_SKIP + pSubStruct = param->GetParamValue( pParameter, index, &value ); +#undef WMC_TOOL_SKIP + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + test(); + IF( param->fZeroAllowed || ( param->EncodeValue != NULL ) ) + { + *( *pStream )++ = value; + move16(); + } + ELSE + { + *( *pStream )++ = sub( value, 1 ); + move16(); + } + ++*pnSize; +#define WMC_TOOL_SKIP + IF( ( param->nBits != 0 ) ) + { + *pnBits = add( *pnBits, param->nBits ); + } + ELSE + { + *pnBits = add( *pnBits, param->GetNumberOfBits( value, index ) ); + } + move16(); +#undef WMC_TOOL_SKIP + + test(); + IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + GetParameters_fx( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize, pnBits ); + } + } + } + + return; +} + +void SetParameters( + ParamsBitMap const *paramsBitMap, + const int16_t nArrayLength, + void *pParameter, + const int16_t **pStream, + int16_t *pnSize ) +{ + int16_t index; + int16_t iParam, nParams; + int16_t value; + void *pSubStruct; + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) ); + + nParams = paramsBitMap->nParams; + for ( index = 0; index < nArrayLength; index++ ) + { + for ( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *const param = ¶msBitMap->params[iParam]; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + + value = *( *pStream )++ + ( param->fZeroAllowed || ( param->EncodeValue != NULL ) ? 0 : 1 ); +#define WMC_TOOL_SKIP + pSubStruct = param->SetParamValue( pParameter, index, value ); +#undef WMC_TOOL_SKIP + ++*pnSize; + if ( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + SetParameters( param->pSubParamBitMap, value, ( pSubStruct != NULL ) ? pSubStruct : pParameter, pStream, pnSize ); + } + } + } + + return; +} + +void SetParameters_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, + void *pParameter, + const Word16 **pStream, + Word16 *pnSize ) +{ + Word16 index; + Word16 iParam, nParams; + Word16 value; + void *pSubStruct; + void *pTmp; + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pParameter != NULL ) && ( pStream != NULL ) && ( pnSize != NULL ) ); + nParams = paramsBitMap->nParams; + + FOR( index = 0; index < nArrayLength; index++ ) + { + FOR( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *param; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + + move16(); + param = ¶msBitMap->params[iParam]; + + move16(); + value = 1; + if ( s_or( param->fZeroAllowed != 0, param->EncodeValue != NULL ) ) + { + move16(); + value = 0; + } + value = add( value, *( *pStream )++ ); + +#define WMC_TOOL_SKIP + pSubStruct = param->SetParamValue( pParameter, index, value ); +#undef WMC_TOOL_SKIP + move16(); + *pnSize = add( *pnSize, 1 ); + + IF( s_and( param->pSubParamBitMap != NULL, value > 0 ) ) + { + pTmp = pParameter; + if ( pSubStruct != NULL ) + pTmp = pSubStruct; + SetParameters( param->pSubParamBitMap, value, pTmp, pStream, pnSize ); + } + } + } +} + + +void WriteToBitstream_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, + const Word16 **pStream, + Word16 *pnSize, + BSTR_ENC_HANDLE hBstr, + Word16 *pnBits ) +{ + Word16 index; + Word16 iParam, nParams; + + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); + nParams = paramsBitMap->nParams; + + FOR( index = 0; index < nArrayLength; index++ ) + { + + FOR( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *param; + Word16 nBits; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + Word16 fShiftValue; + TEncodeValue EncodeValue; + Word16 value; + + move16(); + param = ¶msBitMap->params[iParam]; + + move16(); + nBits = param->nBits; + IF( param->nBits == 0 ) + { +#define WMC_TOOL_SKIP + nBits = param->GetNumberOfBits( **pStream, index ); +#undef WMC_TOOL_SKIP + } + + test(); + test(); + fShiftValue = s_and( param->fZeroAllowed == 0, param->EncodeValue == NULL ); + move16(); + EncodeValue = param->EncodeValue; + if ( param->EncodeValue == NULL ) + { + move16(); + EncodeValue = &FixedWidthEncoding; + } + value = PutIntoBitstream_fx( pStream, EncodeValue, index, hBstr, nBits ); + if ( fShiftValue ) + { + value = add( value, 1 ); + } + + move16(); + *pnSize = add( *pnSize, 1 ); + move16(); + *pnBits = add( *pnBits, nBits ); + + IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + WriteToBitstream_fx( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); + } + } + } +} +void WriteToBitstream_ivas_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, + const Word16 **pStream, + Word16 *pnSize, + BSTR_ENC_HANDLE hBstr, + Word16 *pnBits ) +{ + Word16 index; + Word16 iParam, nParams; + + + assert( ( paramsBitMap != NULL ) && ( nArrayLength > 0 ) && ( pStream != NULL ) && ( pnSize != NULL ) && ( hBstr != NULL ) && ( pnBits != NULL ) ); + nParams = paramsBitMap->nParams; + move16(); + + FOR( index = 0; index < nArrayLength; index++ ) + { + + FOR( iParam = 0; iParam < nParams; iParam++ ) + { + ParamBitMap const *param; + Word16 nBits; + /* If a function for encoding/decoding value is defined than it should take care of 0 */ + Word16 fShiftValue; + TEncodeValue EncodeValue; + Word16 value; + + move16(); + param = ¶msBitMap->params[iParam]; + + move16(); + nBits = param->nBits; + IF( param->nBits == 0 ) + { +#define WMC_TOOL_SKIP + nBits = param->GetNumberOfBits( **pStream, index ); +#undef WMC_TOOL_SKIP + } + + fShiftValue = s_and( param->fZeroAllowed == 0, param->EncodeValue == NULL ); + + EncodeValue = param->EncodeValue; + if ( param->EncodeValue == NULL ) + { + move16(); + EncodeValue = &FixedWidthEncoding; + } + value = PutIntoBitstream_ivas_fx( pStream, EncodeValue, index, hBstr, nBits ); + IF( fShiftValue ) + { + value = add( value, 1 ); + } + + move16(); + *pnSize = add( *pnSize, 1 ); + move16(); + *pnBits = add( *pnBits, nBits ); + + test(); + IF( ( param->pSubParamBitMap != NULL ) && ( value > 0 ) ) + { + WriteToBitstream_ivas_fx( param->pSubParamBitMap, value, pStream, pnSize, hBstr, pnBits ); + } + } + } +} + /** Get nBits long value from bitstream into *pStream. */ static Word16 GetFromBitstream( Decoder_State *st, diff --git a/lib_com/phase_dispersion.c b/lib_com/phase_dispersion.c deleted file mode 100644 index e85104489..000000000 --- a/lib_com/phase_dispersion.c +++ /dev/null @@ -1,155 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "wmc_auto.h" - -/*-----------------------------------------------------------------------* - * phase_dispersion_flt() - * - * Post-processing to enhance noise at low bitrate - *-----------------------------------------------------------------------*/ - -void phase_dispersion_flt( - const float gain_code, /* i : gain of code */ - const float gain_pit, /* i : gain of pitch */ - float code[], /* i/o: code vector */ - const int16_t mode, /* i : level, 0=hi, 1=lo, 2=off */ - float disp_mem[] /* i/o: static memory (size = 8) */ -) -{ - int16_t i, j, state; - float *prev_gain_pit, *prev_gain_code, *prev_state; - float code2[2 * L_SUBFR]; - float h_disp[L_SUBFR], *code2_real, *code2_imag, *code_real, *code_imag, *h_real, *h_imag; - - prev_state = disp_mem; - prev_gain_code = disp_mem + 1; - prev_gain_pit = disp_mem + 2; - - state = 2; - if ( gain_pit < 0.6f ) - { - state = 0; - } - else if ( gain_pit < 0.9f ) - { - state = 1; - } - - for ( i = 5; i > 0; i-- ) - { - prev_gain_pit[i] = prev_gain_pit[i - 1]; - } - prev_gain_pit[0] = gain_pit; - - if ( gain_code - 3.0f * *prev_gain_code > 0.0f ) - { - if ( state < 2 ) - { - state++; - } - } - else - { - j = 0; - for ( i = 0; i < 6; i++ ) - { - if ( prev_gain_pit[i] < 0.6f ) - { - j++; - } - } - - if ( j > 2 ) - { - state = 0; - } - - if ( ( state - (int16_t) *prev_state ) > 1 ) - { - state--; - } - } - - *prev_gain_code = gain_code; - *prev_state = (float) state; - - /*-----------------------------------------------------------------* - * Circular convolution - *-----------------------------------------------------------------*/ - - state += mode; /* level of dispersion */ - if ( state < 2 ) - { - fft_rel( code, L_SUBFR, 6 ); - - if ( state == 0 ) - { - mvr2r( low_H_flt, h_disp, L_SUBFR ); - } - - if ( state == 1 ) - { - mvr2r( mid_H_flt, h_disp, L_SUBFR ); - } - - code2_real = code2; - code2_imag = code2 + L_SUBFR - 1; - code_real = code; - code_imag = code + L_SUBFR - 1; - h_real = h_disp; - h_imag = h_disp + L_SUBFR - 1; - *code2_real++ = *code_real++ * *h_real++; - - for ( i = 1; i < L_SUBFR / 2; i++ ) - { - *code2_real++ = *code_real * *h_real - *code_imag * *h_imag; - *code2_imag-- = *code_real++ * *h_imag-- + *code_imag-- * *h_real++; - } - - *code2_real++ = *code_real++ * *h_real++; - ifft_rel( code2, L_SUBFR, 6 ); - - mvr2r( code2, code, L_SUBFR ); - } - - return; -} diff --git a/lib_com/ppp.c b/lib_com/ppp.c deleted file mode 100644 index 0a0be7fad..000000000 --- a/lib_com/ppp.c +++ /dev/null @@ -1,113 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "prot.h" -#include "rom_com.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * Interpol_delay() - * - * Interpolation of pitch lag - *--------------------------------------------------------------------*/ - -void Interpol_delay( - float *out, /* o : pitch interpolation output */ - float *last, /* i : last frame pitch lag */ - float *current, /* i : current frame pitch lag */ - int16_t SubNum, /* i : subframe number */ - const float *frac /* i : interpolation constant */ -) -{ - out[0] = ( 1.0f - frac[SubNum] ) * *last + frac[SubNum] * *current; - out[1] = ( 1.0f - frac[SubNum + 1] ) * *last + frac[SubNum + 1] * *current; - out[2] = ( 1.0f - frac[SubNum + 2] ) * *last + frac[SubNum + 2] * *current; - - return; -} - - -/*-------------------------------------------------------------------* - * deemph_lpc() - * - * De-emphasis of LP coefficients - * convolve LPC with [1 -PREEMPH_FAC_FLT] to de-emphasise LPC - *--------------------------------------------------------------------*/ - -void deemph_lpc( - float *p_Aq_curr, /* i : LP coefficients current frame */ - float *p_Aq_old, /* i : LP coefficients previous frame */ - float *LPC_de_curr, /* o : De-emphasized LP coefficients current frame */ - float *LPC_de_old, /* o : De-emphasized LP coefficients previous frame */ - const int16_t deemph_old ) -{ - int16_t k; - float b[M + 2]; - const float a[2] = { -PREEMPH_FAC_FLT, 1.0 }; - - b[0] = 1.0; - for ( k = 0; k < M; k++ ) - { - b[k + 1] = p_Aq_curr[k]; - } - b[M + 1] = 0.0; - - for ( k = 0; k <= M; k++ ) - { - LPC_de_curr[k] = a[0] * b[k] + a[1] * b[k + 1]; - } - - if ( deemph_old == 1 ) - { - /* ignoring the 1st value which is 1.0 in this case */ - b[0] = 1.0; - for ( k = 0; k < M; k++ ) - { - b[k + 1] = p_Aq_old[k + 1]; - } - b[M + 1] = 0.0; - - for ( k = 0; k <= M; k++ ) - { - LPC_de_old[k] = a[0] * b[k] + a[1] * b[k + 1]; - } - } - - return; -} diff --git a/lib_com/pred_lt4.c b/lib_com/pred_lt4.c deleted file mode 100644 index 10845bb6a..000000000 --- a/lib_com/pred_lt4.c +++ /dev/null @@ -1,156 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * pred_lt4_flt() - * - * Compute the result of long term prediction with fractionnal - * interpolation of resolution 1/4. - * - * On return, exc[0..L_subfr-1] contains the interpolated signal - * (adaptive codebook excitation) - *-------------------------------------------------------------------*/ - -void pred_lt4_flt( - const float excI[], /* i : input excitation buffer */ - float excO[], /* o : output excitation buffer */ - const int16_t T0, /* i : integer pitch lag */ - int16_t frac, /* i : fraction of lag */ - const int16_t L_subfr, /* i : subframe size */ - const float *win, /* i : interpolation window */ - const int16_t nb_coef, /* i : nb of filter coef */ - const int16_t up_sample /* i : up_sample */ -) -{ - int16_t i, j; - float s; - const float *x1, *x2, *x0, *c1, *c2; - - x0 = &excI[-T0]; - frac = -frac; - - if ( frac < 0 ) - { - frac += up_sample; - x0--; - } - - for ( j = 0; j < L_subfr; j++ ) - { - x1 = x0++; - x2 = x1 + 1; - c1 = &win[frac]; - c2 = &win[up_sample - frac]; - - s = 0.0f; - for ( i = 0; i < nb_coef; i++, c1 += up_sample, c2 += up_sample ) - { - s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); - } - excO[j] = s; - } - - return; -} - -/*-------------------------------------------------------------------* - * pred_lt4_tc_flt() - * - * adapt. search of the second impulse in the same subframe (when appears) - * On return, exc[0..L_subfr-1] contains the interpolated signal - * (adaptive codebook excitation) - *-------------------------------------------------------------------*/ - -void pred_lt4_tc_flt( - float exc[], /* i/o: excitation buffer */ - const int16_t T0, /* i : integer pitch lag */ - int16_t frac, /* i : fraction of lag */ - const float *win, /* i : interpolation window */ - const int16_t imp_pos, /* i : glottal impulse position */ - const int16_t i_subfr /* i : subframe index */ -) -{ - int16_t i, j; - float s; - const float *x1, *x2, *x0, *c1, *c2; - float excO[L_SUBFR + 1]; - float excI[2 * L_SUBFR]; - - mvr2r( exc + i_subfr - L_SUBFR, excI, 2 * L_SUBFR ); - - if ( ( ( T0 + imp_pos - L_IMPULSE2 ) < L_SUBFR ) && ( T0 < L_SUBFR ) ) - { - set_f( excI + L_SUBFR - T0, 0, T0 ); - set_f( excO, 0, L_SUBFR + 1 ); - x0 = excI + L_SUBFR; - frac = -frac; - - if ( frac < 0 ) - { - frac += PIT_UP_SAMP; - x0--; - } - - for ( j = T0; j < L_SUBFR + 1; j++ ) - { - x1 = x0++; - x2 = x1 + 1; - c1 = &win[frac]; - c2 = &win[PIT_UP_SAMP - frac]; - - s = 0.0f; - for ( i = 0; i < L_INTERPOL2; i++, c1 += PIT_UP_SAMP, c2 += PIT_UP_SAMP ) - { - s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); - } - excO[j] = s; - } - - for ( i = T0; i < L_SUBFR; i++ ) - { - exc[i + i_subfr] += PIT_SHARP * excO[i]; - } - } - - return; -} diff --git a/lib_com/preemph.c b/lib_com/preemph.c index 914ebe477..66a12c621 100644 --- a/lib_com/preemph.c +++ b/lib_com/preemph.c @@ -39,35 +39,6 @@ #include "prot.h" #include "wmc_auto.h" -/*-------------------------------------------------------------* - * preemph() - * - * Preemphasis: filtering through 1 - mu z^-1 - *-------------------------------------------------------------*/ - -void preemph( - float *signal, /* i/o: signal */ - const float mu, /* i : preemphasis factor */ - const int16_t L, /* i : vector size */ - float *mem /* i/o: memory (x[-1]) */ -) -{ - int16_t i; - float temp; - - temp = signal[L - 1]; - for ( i = L - 1; i > 0; i-- ) - { - signal[i] = signal[i] - mu * signal[i - 1]; - } - - signal[0] = signal[0] - mu * ( *mem ); - *mem = temp; - - return; -} - - /*-------------------------------------------------------------* * preemph_ivas_fx() * diff --git a/lib_com/prot.h b/lib_com/prot.h index 08898061b..2246bc040 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -238,13 +238,6 @@ void mvl2l( const int16_t n /* i : vector size */ ); -#ifndef IVAS_FLOAT_FIXED -void AGC_dec( - float x[], /* i/o: input/output vector */ - float mem[], /* i/o: mem[2] should be init to [0,0] */ - const int16_t n /* i : vector size */ -); -#endif /*! r: index of the maximum value in the input vector */ int16_t maximum( @@ -252,14 +245,6 @@ int16_t maximum( const int16_t lvec, /* i : length of input vector */ float *max_val /* o : maximum value in the input vector */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: index of the maximum value in the input vector */ -int16_t maximum_s( - const int16_t *vec, /* i : input vector */ - const int16_t lvec, /* i : length of input vector */ - int16_t *max /* o : maximum value in the input vector */ -); -#endif /*! r: index of the maximum value in the input vector */ int16_t maximumAbs( const float *vec, /* i : input vector */ @@ -491,33 +476,17 @@ ivas_error push_indice( int16_t nb_bits /* i : number of bits used to quantize the indice */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error push_next_indice( BSTR_ENC_HANDLE hBstr, UWord16 value, /* i : value of the quantized indice */ Word16 nb_bits /* i : number of bits used to quantize the indice */ ); -#else -ivas_error push_next_indice( - BSTR_ENC_HANDLE hBstr, - uint16_t value, /* i : value of the quantized indice */ - int16_t nb_bits /* i : number of bits used to quantize the indice */ -); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED ivas_error push_next_bits( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const UWord16 bits[], /* i : bit buffer to pack, sequence of single bits */ const Word16 nb_bits /* i : number of bits to pack */ ); -#else -ivas_error push_next_bits( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const uint16_t bits[], /* i : bit buffer to pack, sequence of single bits */ - const int16_t nb_bits /* i : number of bits to pack */ -); -#endif // IVAS_FLOAT_FIXED /*! r: maximum number of indices */ Word16 get_ivas_max_num_indices_fx( @@ -671,24 +640,6 @@ void get_NextCoderType( int16_t print_disclaimer( FILE *fPtr ); -void autocorr( - const float *x, /* i : input signal */ - float *r, /* o : autocorrelations vector */ - const int16_t m, /* i : order of LP filter */ - const int16_t len, /* i : window size */ - const float *wind, /* i : window */ - const int16_t rev_flag, /* i : flag to reverse window */ - const int16_t sym_flag, /* i : symmetric window flag */ - const int16_t no_thr /* i : flag to avoid thresholding */ -); - -/*! r: energy of prediction error */ -int16_t lev_dur( - float *a, /* o : LP coefficients (a[0] = 1.0) */ - const float *r, /* i : vector of autocorrelations */ - const int16_t m, /* i : order of LP filter */ - float epsP[] /* o : prediction error energy */ -); /*! r: delay value in ns */ int32_t get_delay( @@ -719,13 +670,6 @@ void decision_matrix_dec( int16_t *core_switching_flag /* o : ACELP->HQ switching frame flag */ ); -/*! r: LP filter stability */ -float lsf_stab( - const float *lsf, /* i : LSF vector */ - const float *lsfold, /* i : old LSF vector */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame /* i : frame length */ -); void amr_wb_dec_init( AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ @@ -800,22 +744,6 @@ void hf_synth( float *synth16k /* i/o: 16kHz synthesis signal */ ); -int16_t lsp_convert_poly( - float w[], /* i/o: LSP or ISP parameters */ - const int16_t L_frame, /* i : flag for up or down conversion */ - const int16_t Opt_AMRWB /* i : flag for the AMR-WB IO mode */ -); -/*! r: pulse position */ -#ifndef IVAS_FLOAT_FIXED -int16_t findpulse( - const int16_t L_frame, /* i : length of the frame */ - const float res[], /* i : residual signal */ - const int16_t T0, /* i : integer pitch */ - const int16_t enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ - int16_t *sign /* i/o: sign of the maximum */ -); -#endif - void fft_rel( float x[], /* i/o: input/output vector */ const int16_t n, /* i : vector length */ @@ -855,68 +783,6 @@ void cb_shape( const int16_t L_subfr /* i : subfframe length */ ); -void isp2a( - const float *isp, /* i : ISP vector (in the cosine domain) */ - float *a, /* o : LP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -); - -void isp2isf( - const float isp[], /* i : isp[m] (range: -1<=val<1) */ - float isf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -); - -void isf2isp( - const float isf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ - float isp[], /* o : isp[m] (range: -1<=val<1) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -); - -void reorder_isf( - float *isf, /* i/o: vector of isfs in the frequency domain (0..0.5)*/ - const float min_dist, /* i : minimum required distance */ - const int16_t n, /* i : LPC order */ - const float Fs /* i : sampling frequency */ -); - -void lsp2lsf( - const float lsp[], /* i : isp[m] (range: -1<=val<1) */ - float lsf[], /* o : isf[m] normalized (range: 0<=val<=fs/2) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -); - -void lsf2lsp( - const float lsf[], /* i : isf[m] normalized (range: 0<=val<=fs/2) */ - float lsp[], /* o : isp[m] (range: -1<=val<1) */ - const int16_t m, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -); - -void lsp2isp( - const float *lsp, /* i : LSP vector */ - float *isp, /* o : ISP filter coefficients */ - float *stable_isp, /* i/o: ISP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -); - -void isp2lsp( - const float *isp, /* i : LSP vector */ - float *lsp, /* o : ISP filter coefficients */ - float *stable_lsp, /* i/o: stable LSP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -); - -void reorder_lsf( - float *lsf, /* i/o: vector of lsfs in the frequency domain (0..0.5)*/ - const float min_dist, /* i : minimum required distance */ - const int16_t n, /* i : LPC order */ - const int32_t Fs /* i : sampling frequency */ -); - void CNG_exc( const int32_t core_brate, /* i : core bitrate */ const int16_t L_frame, /* i : length of the frame */ @@ -944,25 +810,6 @@ void CNG_exc( const int16_t element_mode /* i : IVAS Element mode */ ); -#ifndef IVAS_FLOAT_FIXED -void cng_params_upd( - const float lsp_new[], /* i : LSP aprameters */ - const float exc2[], /* i : current enhanced excitation */ - const int16_t L_frame, /* i : frame length */ - int16_t *ho_circ_ptr, /* i/o: pointer for CNG averaging buffers */ - float ho_ener_circ[], /* o : energy buffer for CNG averaging */ - int16_t *ho_circ_size, /* i/o: size of DTX hangover history buffer for averaging */ - float ho_lsp_circ[], /* o : old LSP buffer for CNG averaging */ - const int16_t enc_dec_flag, /* i : Flag indicating encoder or decoder (ENC,DEC) */ - float ho_env_circ[], /* i/o: Envelope buffer */ - int16_t *cng_buf_cnt, /* i/o: Counter of postponed FFT-processing instances */ - float cng_exc2_buf[], /* i/o: Excitation buffer */ - int32_t cng_brate_buf[], /* i/o: last_active_brate buffer */ - const int32_t last_active_brate, /* i : Last active bitrate */ - const int16_t element_mode, /* i : Element mode */ - const int16_t bwidth /* i : audio bandwidth */ -); -#endif void cng_params_postupd( const int16_t ho_circ_ptr, /* i : pointer for CNG averaging buffers */ @@ -1130,17 +977,6 @@ void residu( const int16_t l /* i : size of filtering */ ); -#ifdef IVAS_FLOAT_FIXED -void residu_ivas_fx( - const Word16 *a, /* i : LP filter coefficients Q31-a_exp*/ - const Word16 a_exp, - const Word16 m, /* i : order of LP filter */ - const Word32 *x, /* i : input signal (usually speech) Qx*/ - Word32 *y, /* o : output signal (usually residual) Qx*/ - const Word16 l /* i : size of filtering */ -); -#endif - void calc_residu( const float *speech, /* i : weighted speech signal */ float *res, /* o : residual signal */ @@ -1224,16 +1060,6 @@ int16_t deindex_lvq( const int16_t no_bits /* i : number of bits for lattice */ ); -int16_t vq_dec_lvq( - int16_t sf_flag, /* i : safety net flag */ - float x[], /* o : Decoded vector */ - int16_t indices[], /* i : Indices */ - const int16_t stages, /* i : Number of stages */ - const int16_t N, /* i : Vector dimension */ - const int16_t mode, /* i : lvq coding type */ - const int16_t no_bits /* i : no. bits for lattice */ -); - void index_lvq( float *quant, /* i : codevector to be indexed (2 8-dim subvectors) */ int16_t *idx_lead, /* i : leader class index for each subvector */ @@ -1249,29 +1075,11 @@ int16_t qlsf_ARSN_tcvq_Dec_16k( const int16_t nBits /* i : number of bits */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t lsf_bctcvq_encprm( - BSTR_ENC_HANDLE hBstr, - const int16_t *param_lpc, - const int16_t *bits_param_lpc, - const int16_t no_indices ); -#endif int16_t lsf_bctcvq_decprm_ivas( Decoder_State *st, int16_t *param_lpc ); -ivas_error lsf_allocate( - const int16_t nBits, /* i : Number of bits to use for quantization */ - const int16_t framemode, /* i : ISF quantizer mode */ - const int16_t framemode_p, /* i : ISF quantizer mode */ - int16_t *stages0, /* o : Number of stages for safety-net quantizer */ - int16_t *stages1, /* o : Number of stages for predictive quantizer */ - int16_t levels0[], /* o : Number of vectors for each stage for SFNET */ - int16_t levels1[], /* o : Number of vectors for each stage for pred */ - int16_t bits0[], /* o : Number of bits for each stage safety net */ - int16_t bits1[] /* o : Number of bits for each stage predictive */ -); void disf_2s_36b( int16_t *indice, /* i : quantized indices (use indice[0] = -1 in the decoder) */ @@ -1332,35 +1140,6 @@ void re8_vor( int16_t *ka /* o : identifier of absolute leader (needed to index c)*/ ); -void edct( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -); - -void edst( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -); - -void edxt( - const float *x, /* i : input signal */ - float *y, /* o : output transform */ - const int16_t length, /* i : length */ - const uint16_t kernelType, /* i : kernel type (0 - 3) */ - const uint16_t synthesis /* i : nonzero for inverse */ -); - -void iedct_short( - const float *in, /* i : input vector */ - float *out, /* o : output vector */ - const int16_t segment_length, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -); - void DoRTFT480( float *x, /* i/o: real part of input and output data */ float *y /* i/o: imaginary part of input and output data */ @@ -1463,6 +1242,7 @@ void stat_noise_uv_mod( const int16_t bwidth /* i : audio bandwidth */ ); +#ifndef IVAS_FLOAT_FIXED void pre_echo_att( float *Last_frame_ener, /* i/o: Energy of the last frame */ float *exc, /* i/o: Excitation of the current frame */ @@ -1470,6 +1250,7 @@ void pre_echo_att( const int16_t last_coder_type, /* i : Last coder type */ const int16_t L_frame /* i : frame length */ ); +#endif void limit_band_noise_level_calc( const int16_t *wnorm, /* i : reordered norm of sub-vectors */ @@ -1629,16 +1410,6 @@ void hq_generic_bwe( const int16_t *R /* i : Bit allocation */ ); -void logqnorm_2( - const float *env_fl, /* o : index */ - const int16_t L, /* i : codebook length */ - const int16_t n_env_band, /* i : sub-vector size */ - const int16_t nb_sfm, /* i : sub-vector size */ - int16_t *ynrm, /* o : norm indices */ - int16_t *normqlg2, /* o : quantized norm values */ - const float *thren /* i : quantization thresholds */ -); - void map_hq_generic_fenv_norm( const int16_t hqswb_clas, /* i : signal classification flag */ const float *hq_generic_fenv, /* i : HQ GENERIC envelope */ @@ -1764,20 +1535,6 @@ int16_t hvq_enc( const float *coefs, /* i : spectrum coefficients */ float *coefs_out /* o : encoded spectrum coefficients */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: Consumed bits */ -int16_t hq_classifier_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t length, /* i : Frame length */ - const float *coefs, /* i : Spectral coefficients */ - const int16_t is_transient, /* i : Transient flag */ - int16_t *Npeaks, /* o : Number of identified peaks */ - int16_t *peaks, /* o : Peak indices */ - float *pe_gains, /* o : Peak gains */ - float *nf_gains, /* o : Noise-fill gains */ - int16_t *hqswb_clas /* o : HQ class */ -); -#endif /*! r: Consumed bits */ int16_t hq_classifier_dec( Decoder_State *st, /* i/o: decoder state structure */ @@ -1812,6 +1569,7 @@ void enforce_zero_for_min_envelope( const int16_t *sfm_end /* i : Sub band end indices */ ); +#ifndef IVAS_FLOAT_FIXED /*! r: Number of assigned gain bits */ int16_t assign_gain_bits( const int16_t core, /* i : HQ core */ @@ -1821,6 +1579,7 @@ int16_t assign_gain_bits( int16_t *gain_bits_array, /* o : Assigned gain bits */ int16_t *Rcalc /* o : Bit budget for shape quantizer (Q3) */ ); +#endif void apply_envelope( const float *coeff, /* i/o: Coded/noisefilled normalized spectrum */ @@ -2008,23 +1767,6 @@ void ar_encoder_done( void ar_decoder_done( PARCODEC arInst ); -#ifndef IVAS_FLOAT_FIXED -float GetISCScale( - float *quants, - int16_t size, - Word32 bits_fx, - float *magn, - float *qscale, - Word32 *surplus_fx, - float *pulses, - int32_t *savedstates, - int16_t noTCQ, - int32_t *nzpout, - int16_t *bcount, - float *abuffer, - float *mbuffer, - float *sbuffer ); -#endif Word32 Mult_32_16( Word32 a, @@ -2034,24 +1776,6 @@ Word32 Mult_32_32( Word32 a, Word32 b ); -#ifndef IVAS_FLOAT_FIXED -void decode_position_ari_fx_ivas( - PARCODEC pardec, - Word16 size, - Word16 npulses, - Word16 *nz, - Word32 *position ); -#endif - -#ifndef IVAS_FLOAT_FIXED -void decode_magnitude_usq_fx_ivas( - ARCODEC *pardec, - Word16 size, - Word16 npulses, - Word16 nzpos, - Word32 *positions, - Word32 *out ); -#endif void decode_mangitude_tcq_fx_ivas( ARCODEC *pardec, @@ -2073,13 +1797,6 @@ void srt_vec_ind_fx_ivas( Word16 *I, Word16 length ); -#ifndef IVAS_FLOAT_FIXED -Word16 GetScale_fx_ivas( - Word16 blen, - Word32 bits_fx /*Q16*/, - Word32 *surplus_fx /*Q16*/ -); -#endif void bit_allocation_second_fx2( Word32 *Rk, @@ -2093,13 +1810,6 @@ void bit_allocation_second_fx2( const Word16 *last_bitalloc, const Word16 input_frame ); -#ifndef IVAS_FLOAT_FIXED -Word32 encode_position_ari_fx_ivas( - PARCODEC parenc, - float *quants, - Word16 size, - Word32 *est_bits_frame_fx ); -#endif Word32 encode_magnitude_tcq_fx_ivas( ARCODEC *parenc, @@ -2162,10 +1872,6 @@ void tcq_core_LR_dec( const int16_t adjustFlag, const int16_t *is_transient ); -#ifndef IVAS_FLOAT_FIXED -void InitLSBTCQ( - int16_t *bcount ); -#endif void TCQLSB( int16_t bcount, @@ -2262,20 +1968,6 @@ void read_next_force( ); #endif -#ifndef IVAS_FLOAT_FIXED -ivas_error init_encoder( - Encoder_State *st, /* i/o: state structure */ - Encoder_Struct *st_ivas, /* i/o: encoder state structure */ - const int16_t idchan, /* i : channel ID */ - const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ - const int16_t interval_SID, /* i : interval for SID update */ - const int16_t vad_only_flag, /* i : flag to indicate front-VAD structure */ - const ISM_MODE ism_mode /* i : ISM mode */ - , - const int32_t element_brate /* element bitrate */ -); -#endif - ivas_error init_encoder_ivas_fx( Encoder_State *st, /* i/o: state structure */ Encoder_Struct *st_ivas, /* i/o: encoder state structure */ @@ -2352,35 +2044,6 @@ void MDCT_selector( const float enerBuffer[] /* i : energy buffer */ ); -#ifndef IVAS_FLOAT_FIXED -void MDCT_selector_reset( - TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ -); - -void MDCT_classifier_reset( - TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ -); - -ivas_error acelp_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float inp[], /* i : input signal of the current frame */ - const float ener, /* i : residual energy from Levinson-Durbin */ - float A[NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes */ - const float epsP[M + 1], /* i : LP prediction errors */ - float lsp_new[M], /* i : LSPs at the end of the frame */ - float lsp_mid[M], /* i : LSPs in the middle of the frame */ - const int16_t vad_hover_flag, /* i : VAD hangover flag */ - const int16_t attack_flag, /* i : attack flag (GSC or TC) */ - float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ - float *voice_factors, /* o : voicing factors */ - float old_syn_12k8_16k[], /* o : ACELP core synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ - float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ - int16_t *unbits, /* o : number of unused bits */ - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -); -#else ivas_error acelp_core_enc( Encoder_State *st, /* i/o: encoder state structure */ const Word16 inp[], /* i : input signal of the current frame */ @@ -2400,7 +2063,6 @@ ivas_error acelp_core_enc( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ Word16 tdm_lsfQ_PCh[M], /* i : Q LSFs for primary channel */ Word16 Q_new ); -#endif ivas_error acelp_core_switch_dec_bfi( Decoder_State *st /* i/o: decoder state structure */ @@ -2440,14 +2102,6 @@ void retro_interp4_5( void retro_interp5_4( float *pst_old_syn ); -#ifndef IVAS_FLOAT_FIXED -void core_switching_hq_prepare_enc( - Encoder_State *st, /* i/o: encoder state structure */ - int16_t *num_bits, /* i/o: bit budget update */ - const int16_t input_frame, /* i : input frame length */ - float *wtda_audio, - const float *audio ); -#endif void core_switching_hq_prepare_dec( Decoder_State *st, /* i/o: decoder state structure */ int16_t *num_bits, /* i/o: bit budget update */ @@ -2464,52 +2118,6 @@ ivas_error acelp_core_switch_dec( const int16_t nchan_out /* i : number of output channels */ ); -void space_lsfs( - float *lsfs, - const int16_t order ); - -void lsp2a( - float *pc_in, - float *freq, - const int16_t order ); - -void lsp_weights( - const float *lsps, - float *weight, - const int16_t order ); - -void a2lsp_stab( - const float *a, /* i : LP filter coefficients */ - float *lsp, /* o : Line spectral pairs */ - const float *old_lsp /* i : LSP vector from past frame */ -); - -void lsp2a_stab( - const float *lsp, /* i : LSF vector (in the cosine domain) */ - float *a, /* o : LP filter coefficients */ - const int16_t m /* i : order of LP analysis */ -); - -void isf2lsf( - const float *isf, /* i : ISF vector */ - float *lsf, /* o : LSF vector */ - float *stable_lsp, /* i/o: LSF vector */ - const int16_t m, /* i : order of LP analysis */ - const int32_t Fs ); - -void lsf2isf( - const float *lsf, /* i : LSF vector */ - float *isf, /* o : ISF vector */ - float *stable_isp, /* i/o: ISP vector */ - const int16_t m, /* i : order of LP analysis */ - const int32_t Fs ); - -int16_t a2lsp( - float *freq, /* o : LSP vector */ - const float *a, /* i : predictor coefficients */ - const int16_t order /* i : order of LP analysis */ -); - void ResetSHBbuffer_Enc( TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ ); @@ -2933,28 +2541,6 @@ void swb_bwe_dec_hr( const float pitch_buf[] /* i : pitch buffer */ ); -#ifndef IVAS_FLOAT_FIXED -void swb_hr_noise_fill( - const int16_t is_transient, /* i : transient flag */ - const int16_t spect_start, /* i : spectrum start point */ - const int16_t spect_end, /* i : spectrum end point */ - const float tilt_wb, /* i : tilt of wideband signal */ - const float pitch, /* i : pitch value */ - const int16_t nq[], /* i : AVQ nq index */ - int16_t Nsv, /* i : number of subband */ - int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ - float *t_audio /* i/o: mdct spectrum */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*! r: gain */ -float td_postprocess( - float hb_synth[], /* i/o: high-band synthesis */ - const int16_t input_frame, /* i : frame length */ - const int16_t last_extl /* i : last extension layer */ -); -#endif void calc_normal_length( const int16_t core, /* i : core */ @@ -3041,18 +2627,6 @@ void CNG_reset_enc( float *voice_factors, /* o : voicing factors */ int16_t VBR_cng_reset_flag ); -void a2isp( - const float *a, /* i : LP filter coefficients */ - float *isp, /* o : Immittance spectral pairs */ - const float *old_isp /* i : ISP vector from past frame */ -); - -void a2isf( - float *a, - float *isf, - const float *old_isf, - const int16_t lpcOrder ); - /*! r: stability flag */ uint16_t a2rc( const float *a, /* i : LPC coefficients */ @@ -3060,34 +2634,6 @@ uint16_t a2rc( const int16_t lpcorder /* i : LPC order */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t lp_filt_exc_enc( - const int16_t codec_mode, /* i : codec mode */ - const int16_t coder_type, /* i : coding type */ - const int16_t i_subfr, /* i : subframe index */ - float *exc, /* i/o: pointer to excitation signal frame */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - float *y1, /* o : zero-memory filtered adaptive excitation */ - float *xn2, /* o : target vector for innovation search */ - const int16_t L_subfr, /* i : length of vectors for gain quantization */ - const int16_t L_frame, /* i : frame size */ - float *g_corr, /* o : ACELP correlation values */ - const int16_t clip_gain, /* i : adaptive gain clipping flag */ - float *gain_pit, /* o : adaptive excitation gain */ - int16_t *lp_flag /* i/o: mode selection */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void updt_tar( - const float *x, /* i : old target (for pitch search) */ - float *x2, /* o : new target (for codebook search) */ - const float *y, /* i : filtered adaptive codebook vector */ - const float gain, /* i : adaptive codebook gain */ - const int16_t L /* i : subframe size */ -); -#endif void analy_sp( const int16_t element_mode, /* i : element mode */ @@ -3157,86 +2703,11 @@ void find_targets( float *h1 /* o : impulse response of weighted synthesis filter */ ); -#ifndef IVAS_FLOAT_FIXED -void inov_encode( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t last_L_frame, /* i : length of the last frame */ - const int16_t coder_type, /* i : coding type */ - const int16_t bwidth, /* i : input signal bandwidth */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t tc_subfr, /* i : TC subframe index */ - const float *p_Aq, /* i : LP filter coefficients */ - const float gain_pit, /* i : adaptive excitation gain */ - float *cn, /* i/o: target vector in residual domain */ - const float *exc, /* i : pointer to excitation signal frame */ - float *h1, /* i/o: weighted filter input response */ - const float tilt_code, /* i : tilt of of the excitation of previous subframe */ - const float pt_pitch, /* i : pointer to current subframe fractional pitch */ - const float *xn2, /* i : target vector for innovation search */ - float *code, /* o : algebraic excitation */ - float *y2, /* o : zero-memory filtered algebraic excitation */ - int16_t *unbits, /* o : number of unused bits for EVS_PI */ - const int16_t L_subfr /* i : subframe length */ -); - - -void acelp_1t64( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float dn[], /* i : corr. between target and h[]. */ - const float h[], /* i : impulse response of weighted synthesis filter */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -); - -void acelp_2t32( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float dn[], /* i : corr. between target and h[]. */ - const float h[], /* i : impulse response of weighted synthesis filter */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[] /* o : filtered fixed codebook excitation */ -); - - -int16_t acelp_4t64( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float dn[], /* i : corr. between target and h[]. */ - const float cn[], /* i : residual after long term prediction */ - const float H[], /* i : impulse response of weighted synthesis filter */ - float R[], /* i : autocorrelation values */ - const int16_t acelpautoc, /* i : autocorrealtion flag */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - int16_t nbbits, /* i : number of bits per codebook */ - const int16_t cmpl_flag, /* i : coomplexity reduction flag */ - const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ -); - - -/*! r: return (2*N)+1 bits */ -int16_t quant_2p_2N1( - const int16_t pos1, /* i : position of the pulse 1 */ - const int16_t pos2, /* i : position of the pulse 2 */ - const int16_t N /* i : number of bits for position */ -); -#endif Word16 quant_2p_2N1_fx( /* o: return (2*N)+1 bits */ const Word16 pos1, /* i: position of the pulse 1 */ const Word16 pos2, /* i: position of the pulse 2 */ const Word16 N /* i: number of bits FOR position */ ); -#ifndef IVAS_FLOAT_FIXED -void corr_xh( - const float *x, /* i : target signal */ - float *y, /* o : correlation between x[] and h[] */ - const float *h, /* i : impulse response of weighted synthesis filter */ - const int16_t L_subfr /* i : length of the subframe */ -); -#endif void find_tilt( const float fr_bands[], /* i : energy in frequency bands */ const float bckr[], /* i : per band background noise energy estimate */ @@ -3385,23 +2856,6 @@ void vad_param_updt( const int16_t n_channels /* i : number of channels */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: frame multi-harmonicity (1-harmonic, 0-not) */ -int16_t multi_harm( - const float Bin_E[], /* i : log energy spectrum of the current frame */ - float old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor */ - float cor_map_LT[], /* i/o: LT correlation map */ - float *multi_harm_limit, /* i/o: multi harminic threshold */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : input signal bandwidth */ - int16_t *cor_strong_limit, /* i/o: HF correlation indicator */ - float *st_mean_avr_dyn, /* i/o: long term average dynamic */ - float *st_last_sw_dyn, /* i/o: last dynamic */ - float *cor_map_sum, /* i : sum of correlation map */ - float *sp_floor, /* o : noise floor estimate */ - float S_map[] /* o : short-term correlation map */ -); -#endif void lp_gain_updt( const int16_t i_subfr, /* i : subframe number */ @@ -3411,49 +2865,11 @@ void lp_gain_updt( float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ const int16_t L_frame /* i : length of the frame */ ); -#ifndef IVAS_FLOAT_FIXED -void enc_pit_exc( - Encoder_State *st, /* i/o: state structure */ - const float *speech, /* i : Input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float *Aq, /* i : 12k8 Lp coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close-loop pitch period - fractional part */ - float *pitch_buf, /* i/o: Fractionnal per subframe pitch */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - float *gpit, /* o : pitch gain per subframe */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -); -#endif void GSC_enc_init( GSC_ENC_HANDLE hGSCEnc /* i/o: GSC data handle */ ); -#ifndef IVAS_FLOAT_FIXED -void encod_audio( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : 12k8 Lp coefficient */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t attack_flag, /* i : attack flag (GSC or TC) */ - float *lsf_new, /* i : current frame ISF vector */ - float *tmp_noise, /* o : long-term noise energy */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -); -#endif /*! r: index of the last band where pitch contribution is significant */ int16_t Pit_exc_contribution_len( @@ -3489,6 +2905,7 @@ float gsc_gainQ( const int32_t core_brate_inp /* i : true core brate */ ); +#ifndef IVAS_FLOAT_FIXED void Ener_per_band_comp( const float exc_diff[], /* i : gain per band */ float y_gain4[], /* o : gain per band to quantize */ @@ -3496,6 +2913,7 @@ void Ener_per_band_comp( const int16_t Eflag, /* i : flag of highest band */ const int16_t L_frame /* i : frame length */ ); +#endif void Comp_and_apply_gain( float exc_diffQ[], /* i/o: gain per band */ @@ -3505,6 +2923,7 @@ void Comp_and_apply_gain( const int16_t ReUseGain /* i : Reuse the gain in Ener_per_bd_yQ */ ); +#ifndef IVAS_FLOAT_FIXED void bands_and_bit_alloc( const int16_t cor_strong_limit, /* i : HF correlation */ const int16_t noise_lev, /* i : dwn scaling factor */ @@ -3526,6 +2945,7 @@ void bands_and_bit_alloc( const int16_t element_mode, /* i : element mode */ const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ ); +#endif void bands_and_bit_alloc_ivas_fx( const Word16 cor_strong_limit, /* i : HF correlation */ @@ -3549,6 +2969,7 @@ void bands_and_bit_alloc_ivas_fx( const Word16 GSC_IVAS_mode /* i : GSC IVAS mode */ ); +#ifndef IVAS_FLOAT_FIXED /*! r: average frequency gain */ float gsc_gaindec( Decoder_State *st, /* i/o: decoder state structure */ @@ -3558,7 +2979,9 @@ float gsc_gaindec( const int16_t coder_type, /* i : coding type */ const int16_t bwidth /* i : input signal bandwidth */ ); +#endif +#ifndef IVAS_FLOAT_FIXED void freq_dnw_scaling( const int16_t cor_strong_limit, /* i : HF correlation */ const int16_t coder_type, /* i : coder type */ @@ -3567,6 +2990,7 @@ void freq_dnw_scaling( float fy_norm[], /* i/o: Frequency quantized parameter */ const int16_t L_frame /* i : frame length */ ); +#endif void GSC_dec_init_ivas( GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ @@ -3618,6 +3042,7 @@ void dec_pit_exc( const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ ); +#ifndef IVAS_FLOAT_FIXED void highband_exc_dct_in( const int32_t core_brate, /* i : core bitrate */ const int16_t *mfreq_bindiv_loc, /* i : bin per bands tables */ @@ -3647,20 +3072,7 @@ void highband_exc_dct_in( const int16_t element_mode, /* i : IVAS element moden */ const int16_t GSC_IVAS_mode /* i : GSC IVAS mode */ ); - -void inact_switch_ematch( - float exc2[], /* i/o: CELP/GSC excitation buffer */ - float dct_exc_tmp[], /* i : GSC excitation in DCT domain */ - float lt_ener_per_band[], /* i/o: long-term energy per band */ - const int16_t coder_type, /* i : coder type */ - const int16_t L_frame, /* i : frame length */ - const int32_t total_brate, /* i : Total bitrate */ - const int16_t bfi, /* i : frame lost indicator */ - const int16_t last_core, /* i : Last core used */ - const int16_t last_codec_mode, /* i : Last codec mode */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ - const int16_t element_mode /* i : element mode */ -); +#endif void music_postfilt_init_flt( MUSIC_POSTFILT_HANDLE hMusicPF /* i/o: LD music postfilter handle */ @@ -3737,63 +3149,6 @@ void find_wsp( const float gamma, /* i : weighting factor */ const int16_t L_look /* i : look-ahead */ ); -#ifndef IVAS_FLOAT_FIXED -void pitch_ol_init( - float *old_thres, /* o : threshold for reinforcement of past pitch influence */ - int16_t *old_pitch, /* o : pitch of the 1st half-frame of previous frame */ - int16_t *delta_pit, /* o : pitch evolution extrapolation */ - float *old_corr /* o : correlation */ -); - -void pitch_ol( - int16_t pitch[3], /* o : open loop pitch lag for each half-frame */ - float voicing[3], /* o : maximum normalized correlation for each half-frame */ - int16_t *old_pitch, /* i/o: OL pitch of the 2nd half-frame of the last frame */ - float *old_corr, /* i/o: correlation */ - float corr_shift, /* i : normalized correlation correction */ - float *old_thres, /* i/o: maximum correlation weighting with respect to past frame pitch */ - int16_t *delta_pit, /* i/o: old pitch extrapolation correction (added to old pitch) */ - float *st_old_wsp2, /* i/o: weighted speech memory */ - const float *wsp, /* i : weighted speech for current frame and look-ahead */ - float mem_decim2[3], /* i/o: wsp decimation filter memory */ - const float relE, /* i : relative frame energy */ - const int16_t L_look, /* i : look-ahead length */ - const int16_t last_class, /* i : frame classification of last frame */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t Opt_SC_VBR /* i : SC-VBR flag */ -); - -void pitch_ol2( - const int16_t pit_min, /* i : pit_min value */ - const int16_t pitch_ol, /* i : pitch to be improved */ - float *pitch_fr, /* o : adjusted 1/4 fractional pitch */ - float *voicing_fr, /* o : adjusted 1/4 fractional voicing */ - const int16_t pos, /* i : position in frame where to calculate the improv. */ - const float *wsp, /* i : weighted speech for current frame and look-ahead */ - const int16_t delta /* i : delta for pitch search */ -); - -void StableHighPitchDetect( - int16_t *flag_spitch, /* o : flag to indicate very short stable pitch */ - int16_t pitch[], /* i/o: OL pitch buffer */ - const float voicing[], /* i : OL pitch gains */ - const float Bin_E[], /* i : per bin log energy spectrum */ - const float wsp[], /* i : weighted speech */ - const int16_t localVAD, /* i : local VAD flag */ - float *voicing_sm, /* i/o: smoothed open-loop pitch gains */ - float *voicing0_sm, /* i/o: smoothed high pitch gains */ - float *LF_EnergyRatio_sm, /* i/o: smoothed [0, 300Hz] relative peak energy */ - int16_t *predecision_flag, /* i/o: predecision flag */ - float *diff_sm, /* i/o: smoothed pitch frequency difference */ - float *energy_sm /* i/o: smoothed energy around pitch frequency */ -); - -void pitchDoubling_det( - const float *wspeech, - int16_t *pitch_ol, - float *pitch_fr, - float *voicing_fr ); -#endif void gain_enc_amr_wb( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -3883,30 +3238,6 @@ void E_corr_xy2( const int16_t L_subfr /* i : subframe size */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: Floating pitch for each subframe */ -float pit_encode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t pitch_bits[], /* i : pitch bits */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t coder_type, /* i : coding type */ - int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ - const int16_t i_subfr, /* i : subframe index */ - float *exc, /* i/o: pointer to excitation signal frame */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t *pitch, /* i : open loop pitch estimates in current frame */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -); -#endif /*! r: coding type */ int16_t find_uv( @@ -3942,12 +3273,6 @@ void select_TC( const int16_t localVAD /* i : VAD without hangover */ ); -#ifndef IVAS_FLOAT_FIXED -void coder_type_modif( - Encoder_State *st, /* i/o: encoder state structure */ - const float relE /* i : frame relative E to the long term average */ -); -#endif void wb_vad_init( VAD_HANDLE hVAD /* i/o: VAD data handle */ @@ -4031,18 +3356,6 @@ void dtx_hangover_control( const float lsp_new[M] /* i : current frame LSPs */ ); -#ifndef IVAS_FLOAT_FIXED -void updt_enc( - Encoder_State *st, /* i/o: state structure */ - const float *old_exc, /* i : buffer of excitation */ - const float *pitch_buf, /* i : Floating pitch for each subframe */ - const float Es_pred, /* i : predicited scaled innovation energy */ - const float *Aq, /* i : A(z) quantized for all subframes */ - const float *lsf_new, /* i : current frame LSF vector */ - const float *lsp_new, /* i : current frame LSP vector */ - const float *old_bwe_exc /* o : buffer of excitation for SWB TBE */ -); -#endif void updt_enc_common( Encoder_State *st /* i/o: encoder state structure */ @@ -4086,17 +3399,6 @@ void tc_classif_enc( const float *res /* i : pointer to the LP residual signal frame */ ); -#ifndef IVAS_FLOAT_FIXED -void set_impulse( - const float xn[], /* i : target signal */ - const float h_orig[], /* i : impulse response of weighted synthesis filter */ - float exc[], /* o : adaptive codebook excitation */ - float y1[], /* o : filtered adaptive codebook excitation */ - int16_t *imp_shape, /* o : adaptive codebook index */ - int16_t *imp_pos, /* o : position of the glottal impulse center index */ - float *gain_trans /* o : transition gain */ -); -#endif void gain_enc_tc( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -4112,83 +3414,6 @@ void gain_enc_tc( float *norm_gain_code /* o : norm. gain of the codebook excitation */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: pitch gain (0..GAIN_PIT_MAX) */ -float corr_xy1( - const float xn[], /* i : target signal */ - const float y1[], /* i : filtered adaptive codebook excitation */ - float g_corr[], /* o : correlations and -2 */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t norm_flag /* i : flag for constraining pitch contribution */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void norm_corr( - const float exc[], /* i : excitation buffer */ - const float xn[], /* i : target signal */ - const float h[], /* i : weighted synthesis filter impulse response */ - const int16_t t_min, /* i : minimum value of searched range */ - const int16_t t_max, /* i : maximum value of searched range */ - float corr_norm[], /* o : normalized correlation */ - const int16_t L_subfr /* i : subframe size */ -); - -/*! r: chosen integer pitch lag */ -int16_t pitch_fr4( - const float exc[], /* i : excitation buffer */ - const float xn[], /* i : target signal */ - const float h[], /* i : weighted synthesis filter impulse response */ - const int16_t t0_min, /* i : minimum value in the searched range. */ - const int16_t t0_max, /* i : maximum value in the searched range. */ - int16_t *pit_frac, /* o : chosen fraction (0, 1, 2 or 3) */ - const int16_t i_subfr, /* i : flag to first subframe */ - const int16_t limit_flag, /* i : flag for limits (0=restrained, 1=extended) */ - const int16_t t0_fr2, /* i : minimum value for resolution 1/2 */ - const int16_t t0_fr1, /* i : minimum value for resolution 1 */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_subfr /* i : size of subframe */ -); - -void pit_Q_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t delta, /* i : Half the CL searched interval */ - const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max /* o : delta search max */ -); - -void pit16k_Q_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max /* o : delta search max */ -); - -/*! r: pitch index */ -int16_t abs_pit_enc( - const int16_t fr_steps, /* i : fractional resolution step */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac /* i : pitch fraction */ -); - -/*! r: pitch index */ -int16_t delta_pit_enc( - const int16_t fr_steps, /* i : fractional resolution steps (2 or 4) */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - const int16_t T0_min /* i : delta search min */ -); -#endif /*! r: comfort noise gain factor */ float AVQ_cod( @@ -4241,59 +3466,6 @@ void pre_exc( const int16_t L_subfr /* i : subframe length */ ); -#ifndef IVAS_FLOAT_FIXED -void encod_unvoiced( - Encoder_State *st, /* i/o: state structure */ - const float *speech, /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float *Aq, /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ - const float *res, /* i : residual signal */ - float *syn, /* o : core synthesis */ - float *tmp_noise, /* o : long-term noise energy */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* i/o: excitation for SWB TBE */ -); - -void encod_gen_voic( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *syn, /* o : core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* i/o: excitation for SWB TBE */ - int16_t *unbits, /* i/o: number of unused bits */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -); - -int16_t encod_tran( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *syn, /* o : synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* i/o: excitation for SWB TBE */ - int16_t tc_subfr, /* i/o: TC subframe classification */ - int16_t position, /* i : maximum of residual signal index */ - int16_t *unbits /* i/o: number of unused bits */ -); -#endif void encod_amr_wb( Encoder_State *st, /* i/o: state structure */ @@ -4347,15 +3519,6 @@ void transf_cdbk_enc( float code_preQ[], /* o : prequantizer excitation */ int16_t *unbits /* i/o: number of AVQ unused bits */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: quantization index */ -int16_t gain_quant( - float *gain, /* i/o: quantized gain */ - const float min_val, /* i : value of lower limit */ - const float max_val, /* i : value of upper limit */ - const int16_t bits /* i : number of bits to quantize */ -); -#endif void deemph_lpc( float *p_Aq_cuerr, /* i : LP coefficients current frame */ float *p_Aq_old, /* i : LP coefficients previous frame */ @@ -4571,46 +3734,6 @@ void set_ppp_mode( const int16_t localVAD_he /* i : HE-SAD flag without hangover */ ); -void lsf_syn_mem_backup( - Encoder_State *st, /* i : state structure */ - float *btilt_code, /* i : tilt code */ - float *bgc_threshold, /* i : */ - float *clip_var_bck, /* o : */ - int16_t *next_force_sf_bck, /* o : */ - float *lsp_new, /* i : LSP vector to quantize */ - float *lsp_mid, /* i : mid-frame LSP vector */ - float *clip_var, /* o : pitch clipping state var */ - float *mem_AR, /* o : quantizer memory for AR model */ - float *mem_MA, /* o : quantizer memory for AR model */ - float *lsp_new_bck, /* o : LSP vector to quantize- backup */ - float *lsp_mid_bck, /* o : mid-frame LSP vector - backup */ - float *Bin_E, /* o : FFT Bin energy 128 *2 sets */ - float *Bin_E_old, /* o : FFT Bin energy 128 sets */ - float *mem_syn_bck, /* o : synthesis filter memory */ - float *mem_w0_bck, /* o : memory of the weighting filter */ - float *streaklimit, - int16_t *pstreaklen ); - -void lsf_syn_mem_restore( - Encoder_State *st, /* o : state structure */ - float btilt_code, /* i : */ - float gc_threshold, /* i : */ - float *clip_var_bck, /* i : */ - int16_t next_force_sf_bck, /* i : */ - float *lsp_new, /* o : LSP vector to quantize */ - float *lsp_mid, /* o : mid-frame LSP vector */ - float clip_var, /* i : pitch clipping state var */ - float *mem_AR, /* i : quantizer memory for AR model */ - float *mem_MA, /* i : quantizer memory for AR model */ - float *lsp_new_bck, /* i : LSP vector to quantize- backup */ - float *lsp_mid_bck, /* i : mid-frame LSP vector - backup */ - float *Bin_E, /* i : FFT Bin energy 128 *2 sets */ - float *Bin_E_old, /* i : FFT Bin energy 128 sets */ - float *mem_syn_bck, /* i : synthesis filter memory */ - float mem_w0_bck, /* i : memory of the weighting filter */ - const float streaklimit, - const int16_t pstreaklen ); - ivas_error ppp_voiced_encoder( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ @@ -4903,17 +4026,6 @@ void pit16k_Q_dec_flt( int16_t *BER_detect /* o : BER detect flag */ ); -#ifndef IVAS_FLOAT_FIXED -void lp_filt_exc_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t codec_mode, /* i : codec mode */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t L_subfr, /* i : subframe size */ - const int16_t L_Frame, /* i : frame size */ - int16_t lp_flag, /* i : operation mode signaling */ - float *exc /* i/o: pointer to the excitation signal frame */ -); -#endif void inov_decode( Decoder_State *st, /* i/o: decoder state structure */ @@ -4947,13 +4059,6 @@ void dec_acelp_4t64( const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ ); -#ifndef IVAS_FLOAT_FIXED -uint32_t syn_output( - float *synth, /* i/o: float synthesis signal */ - const int16_t output_frame, /* i : output frame length */ - int16_t *synth_out /* o : integer 16 bits synthesis signal */ -); -#endif void FEC_exc_estim( Decoder_State *st, /* i/o: Decoder static memory */ @@ -5195,20 +4300,6 @@ void AVQ_demuxdec( int16_t trgtSvPos /* i : target SV for AVQ bit savings */ ); -#ifndef IVAS_FLOAT_FIXED -void re8_dec( - int16_t nq, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ - const uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ - const int16_t kv[], /* i : index of v (8-dimensional vector of binary indices) = Voronoi index */ - int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ -); - -void re8_decode_base_index( - const int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ - uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ - int16_t *x /* o : point in RE8 (8-dimensional integer vector) */ -); -#endif void Init_post_filter_ivas( PFSTAT_HANDLE hPFstat /* i : post-filter state memories */ @@ -5393,16 +4484,6 @@ void direct_transform( const int16_t element_mode /* i : IVAS element mode */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: index of noise attenuation */ -int16_t noise_adjust( - const float *coeffs_norm, /* i : normalized coefficients */ - const int16_t *bitalloc, /* i : bit allocation */ - const int16_t *sfm_start, /* i : Start of bands */ - const int16_t *sfm_end, /* i : End of bands */ - const int16_t core_sfm /* i : index of the end band for core */ -); -#endif void interleave_spectrum( float *coefs, /* i/o: input and output coefficients */ @@ -5417,12 +4498,6 @@ void hq_hr_enc( const int16_t is_transient, /* i : transient flag */ const int16_t vad_hover_flag /* i : VAD hangover flag */ ); -void logqnorm( - const float *x, /* i : coefficient vector */ - int16_t *k, /* o : index */ - const int16_t L, /* i : codebook length */ - const int16_t N, /* i : sub-vector size */ - const float *thren ); void huff_dec( Decoder_State *st, /* i/o: decoder state structure */ @@ -5435,16 +4510,6 @@ void huff_dec( int16_t *index /* o : Decoded index */ ); -void calc_norm( - const float *x, /* i : Input vector. */ - int16_t *norm, /* o : Quantization indices for norms */ - int16_t *normlg, /* o : Quantized norms in log2 */ - const int16_t start_band, /* i : Indice of band to start coding */ - const int16_t num_bands, /* i : Number of bands */ - const int16_t *band_len, /* i : Length of bands */ - const int16_t *band_start /* i : Start of bands */ -); - void reordernorm( const int16_t *ynrm, /* i : quantization indices for norms */ const int16_t *normqlg2, /* i : quantized norms */ @@ -5466,15 +4531,6 @@ void diffcod_lrmdct( int16_t *difidx, /* o : differential code */ const int16_t is_transient /* i : transient flag */ ); -#ifndef IVAS_FLOAT_FIXED -void normalizecoefs( - float *coefs, /* i/o: MDCT coefficients */ - const int16_t *ynrm, /* i : quantization indices for norms */ - const int16_t num_bands, /* i : Number of bands */ - const int16_t *band_start, /* i : Start of bands */ - const int16_t *band_end /* i : End of bands */ -); -#endif void bitallocsum( int16_t *R, /* i : bit-allocation vector */ @@ -5485,16 +4541,6 @@ void bitallocsum( const int16_t length, /* i : length of spectrum */ const int16_t *sfmsize /* i : Length of bands */ ); -#ifndef IVAS_FLOAT_FIXED -void hq_generic_hf_encoding( - const float *coefs, /* i : MDCT coefficients of weighted original */ - float *hq_generic_fenv, /* i/o: energy of SWB envelope */ - const int16_t hq_generic_offset, /* i : frequency offset for extracting energy */ - Encoder_State *st, /* i/o: encoder state structure */ - int16_t *hq_generic_exc_clas, /* o : HF excitation class */ - const int16_t length /* i : Length of spectrum */ -); -#endif /*! r: BWE class */ int16_t swb_bwe_gain_deq_flt( Decoder_State *st, /* i/o: decoder state structure */ @@ -5644,17 +4690,6 @@ void fill_spectrum( const int16_t element_mode /* i : element mode */ ); -void env_stab_transient_detect( - const int16_t is_transient, /* i : Transient flag */ - const int16_t length, /* i : Length of spectrum (32 or 48 kHz) */ - const int16_t norm[], /* i : quantization indices for norms */ - int16_t *no_att_hangover, /* i/o: Frame counter for attenuation hangover */ - float *energy_lt, /* i/o: Long-term energy measure for transient detection */ - const int16_t HQ_mode, /* i : HQ coding mode */ - const int16_t bin_th, /* i : HVQ cross-over frequency bin */ - const float *coeff /* i : Coded spectral coefficients */ -); - void de_interleave_spectrum( float *coefs, /* i/o: input and output coefficients */ int16_t length /* i : length of spectrum */ @@ -6009,28 +5044,6 @@ float env_stab_smo( float *env_stab_state_p, /* i/o: env_stab state probabilities */ int16_t *ho_cnt /* i/o: hangover counter for speech state */ ); -#ifndef IVAS_FLOAT_FIXED -void core_switching_pre_enc( - Encoder_State *st, /* i/o: encoder state structure */ -#ifndef IVAS_FLOAT_FIXED - const float *old_inp_12k8, /* i : old input signal @12.8kHz */ - const float *old_inp_16k, /* i : old input signal @16kHz */ -#endif - const int16_t active_cnt, /* i : Active frame counter */ - const int16_t last_element_mode /* i : last_element_mode */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void core_switching_post_enc( - Encoder_State *st, /* i/o: encoder state structure */ - // const float *old_inp_12k8, /* i : old input signal @12.8kHz */ - float *old_inp_12k8, /* i : old input signal @12.8kHz */ - // const float *old_inp_16k, /* i : old input signal @16kHz */ - float *old_inp_16k, /* i : old input signal @16kHz */ - // const float A[] /* i : unquant. LP filter coefs. */ - float A[] /* i : unquant. LP filter coefs. */ -); -#else void core_switching_post_enc( Encoder_State *st, /* i/o: encoder state structure */ // const float *old_inp_12k8, /* i : old input signal @12.8kHz */ @@ -6040,7 +5053,6 @@ void core_switching_post_enc( // const float A[] /* i : unquant. LP filter coefs. */ Word16 A_fx[], /* i : unquant. LP filter coefs. */ Word16 Q_new ); -#endif ivas_error core_switching_post_dec( Decoder_State *st, /* i/o: decoder state structure */ float *synth, /* i/o: output synthesis */ @@ -6223,12 +5235,6 @@ void Next_good_after_burst_erasures( const int16_t ol_size /* i : overlap size */ ); -#ifndef IVAS_FLOAT_FIXED -void update_average_rate( - SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ - const int32_t core_brate /* i : core bitrate */ -); -#endif void reset_preecho_dec( HQ_DEC_HANDLE hHQ_core /* i/o: HQ decoder handle */ @@ -6343,21 +5349,6 @@ void reverse_transient_frame_energies( const int16_t bands /* i : number of bands */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t peak_vq_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t bwidth, /* i : audio bandwidth */ - const float *coefs, /* i : Input coefficient vector */ - float *coefs_out, /* o : Quantized output vector */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t num_bits, /* i : Number of bits for HVQ */ - const int16_t vq_peaks, /* i : Number of identified peaks */ - const int16_t *ynrm, /* i : Envelope coefficients */ - int16_t *R, /* i/o: Bit allocation/updated bit allocation */ - int16_t *vq_peak_idx, /* i : Peak index vector */ - float *nf_gains /* i : Estimated noise floor gains */ -); -#endif void hvq_dec( Decoder_State *st, /* i/o: decoder state structure */ @@ -6737,91 +5728,11 @@ void minimumStatistics( const int16_t buffSize /* i : buffer size */ ); -void E_LPC_int_lpc_tcx_float( - const float lsf_old[], /* i : LSFs from past frame */ - const float lsf_new[], /* i : LSFs from present frame */ - float a[] /* o : interpolated LP coefficients */ -); - -#ifndef IVAS_FLOAT_FIXED -int16_t E_GAIN_closed_loop_search( - float exc[], - float xn[], - float h[], - int16_t t0_min, - int16_t t0_min_frac, - int16_t t0_max, - int16_t t0_max_frac, - const int16_t t0_min_max_res, - int16_t *pit_frac, - int16_t *pit_res, - const int16_t pit_res_max, - const int16_t i_subfr, - const int16_t pit_min, - const int16_t pit_fr2, - const int16_t pit_fr1, - const int16_t L_subfr ); -#endif - void E_ACELP_toeplitz_mul( const float R[], const float c[], float d[] ); -#ifndef IVAS_FLOAT_FIXED -void acelp_pulsesign( - const float cn[], - float dn[], - float dn2[], - float sign[], - float vec[], - const float alp ); - -void E_ACELP_4t( - float dn[], - float cn[], - float H[], - float R[], - const int16_t acelpautoc, - float code[], - const int16_t cdk_index, - int16_t _index[], - const int16_t L_frame, - const int16_t last_L_frame, - const int32_t total_brate, - const int16_t i_subfr, - const int16_t cmpl_flag ); -void E_ACELP_4tsearch( - float dn[], - const float cn[], - const float H[], - float code[], - PulseConfig *config, - int16_t ind[], - float y[] ); - -void E_ACELP_4tsearchx( - float dn[], - const float cn[], - float Rw[], - float code[], - PulseConfig *config, - int16_t ind[] ); -#endif -#ifndef IVAS_FLOAT_FIXED -int16_t E_ACELP_indexing( - float code[], - PulseConfig config, - const int16_t num_tracks, - int16_t prm[] ); - -void acelp_findcandidates( - float dn2[], - int16_t dn2_pos[], - int16_t pos_max[], - const int16_t L_subfr, - const int16_t tracks ); -#endif void E_ACELP_innovative_codebook( const float *exc, /* i : pointer to the excitation frame */ const int16_t T0, /* i : integer pitch lag */ @@ -6850,14 +5761,6 @@ int16_t E_ACELP_code43bit( uint32_t *ps, int16_t *p, uint16_t idxs[] ); -#ifndef IVAS_FLOAT_FIXED -void fcb_pulse_track_joint( - uint16_t *idxs, - const int16_t wordcnt, - uint32_t *index_n, - const int16_t *pulse_num, - const int16_t track_num ); -#endif void D_ACELP_indexing_ivas( float code[], PulseConfig config, @@ -6892,24 +5795,14 @@ void adapt_lag_wind_fx( const int32_t sr_core /* i : core sampling rate */ ); +#ifndef IVAS_FLOAT_FIXED void hp20_flt( Float32 signal[], const Word16 lg, Float32 mem[], const Word32 Fs ); - -#ifndef IVAS_FLOAT_FIXED -void ham_cos_window_flt( - float *fh, - const int16_t n1, - const int16_t n2 ); - - -/*! r: noise dependent voicing correction */ -float correlation_shift( - const float totalNoise /* i : noise estimate over all critical bands */ -); #endif + void init_coder_ace_plus( Encoder_State *st, /* i : Encoder state handle */ const int32_t last_total_brate, /* i : last total bitrate */ @@ -7052,6 +5945,7 @@ void core_signal_analysis_high_bitrate( const int16_t vad_hover_flag /* i : VAD hangover flag */ ); +#ifndef IVAS_FLOAT_FIXED /*! r: codebook gain (adaptive or fixed) */ float get_gain_flt( const float x[], /* i : target signal */ @@ -7059,6 +5953,7 @@ float get_gain_flt( const int16_t n, /* i : segment length */ float *en_y /* o : energy of y (sum of y[]^2, optional) */ ); +#endif void encode_acelp_gains( const float *code, @@ -7130,29 +6025,6 @@ void gain_dec_gacelp_uv( float *past_gcode, /* i/o: past energy of code */ float *gain_inov /* o : unscaled innovation gain */ ); -#ifndef IVAS_FLOAT_FIXED -void Mode2_pit_encode( - const int16_t coder_type, /* i : coding model */ - const int16_t i_subfr, /* i : subframe index */ - int16_t **pt_indice, /* i/o: quantization indices pointer */ - float *exc, /* i/o: pointer to excitation signal frame */ - const int16_t *T_op, /* i : open loop pitch estimates in current frame */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ - int16_t *T0_res, /* i/o: close loop pitch resolution */ - float *h1, /* i : weighted filter impulse response */ - float *xn, /* i : target vector */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr1b, - const int16_t pit_fr2, - const int16_t pit_max, - const int16_t pit_res_max ); -#endif void limit_T0_voiced_ivas( const int16_t nbits, @@ -7168,24 +6040,6 @@ void limit_T0_voiced_ivas( const int16_t pit_max /* i : Maximum pitch lag */ ); -#ifndef IVAS_FLOAT_FIXED -void Mode2_abs_pit_enc( - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr2, - const int16_t pit_res_max ); -void Mode2_delta_pit_enc( - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - const int16_t T0_res, /* i : pitch resolution */ - const int16_t T0_min, /* i : delta search min */ - const int16_t T0_min_frac, /* i : delta search min */ - int16_t **pt_indice /* o : pointer to Vector of Q indexes */ -); -#endif /*! r: floating pitch value */ float Mode2_pit_decode_flt( @@ -7238,29 +6092,6 @@ void formant_post_filt_ivas( const int16_t off_flag /* i : Off flag */ ); -#ifndef IVAS_FLOAT_FIXED -void qlpc_avq( - const float *lsp, /* i : Input LSF vectors */ - const float *lspmid, /* i : Input mid-LSF vectors */ - float *lsf_q, /* o : Quantized LFS vectors */ - float *lsfmid_q, /* o : Quantized mid-LFS vectors */ - int16_t *index, /* o : Quantization indices */ - int16_t *nb_indices, /* o : Number of quantization indices */ - int16_t *nbbits, /* o : Number of quantization bits */ - const int16_t core, /* i : core */ - const int32_t sr_core /* i : internal sampling rate */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -int16_t encode_lpc_avq( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t numlpc, /* i : Number of sets of lpc */ - const int16_t *param_lpc, /* i : lpc parameters */ - const int16_t core, /* i : core */ - const int16_t element_mode /* i : element mode */ -); -#endif int16_t dlpc_avq( int16_t *index, /* i : Quantization indices */ @@ -7278,24 +6109,6 @@ int16_t decode_lpc_avq( const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: codebook index */ -int16_t vlpc_1st_cod( - const float *lsf, /* i : vector to quantize */ - float *lsfq, /* i/o: i:prediction o:quantized lsf */ - const int32_t sr_core, /* i : internal sampling rate */ - float *w /* o : lsf weights */ -); - -/*! r: number of allocated bits */ -int16_t vlpc_2st_cod( - const float *lsf, /* i : normalized vector to quantize */ - float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ - int16_t *indx, /* o : index[] (4 bits per words) */ - const int16_t mode, /* i : 0=abs, >0=rel */ - const int32_t sr_core /* i : internal sampling rate */ -); -#endif void vlpc_2st_dec_flt( float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ @@ -7418,19 +6231,6 @@ int16_t get_next_coeff_mapped_ivas( CONTEXT_HM_CONFIG *hm_cfg /* i : HM configuration */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: index of next coefficient */ -int16_t get_next_coeff_unmapped_ivas( - int16_t *ii, /* i/o: coefficient index */ - int16_t *idx /* o : index in unmapped domain */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -int32_t update_mixed_context_ivas( - int32_t ctx, - int16_t a ); -#endif void ACcontextMapping_encode2_no_mem_s17_LC( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ @@ -7607,21 +6407,6 @@ void mdct_noiseShaping_flt( const float gains[], const int16_t nBands ); -#ifndef IVAS_FLOAT_FIXED -void AdaptLowFreqEmph( - float x[], - int16_t xq[], - float invGain, - const int16_t tcx_lpc_shaped_ari, - const float lpcGains[], - const int16_t lg ); -#endif - -#ifndef IVAS_FLOAT_FIXED -void PsychAdaptLowFreqEmph( - float x[], - const float lpcGains[] ); -#endif void PsychAdaptLowFreqDeemph_flt( float x[], @@ -7635,78 +6420,6 @@ void AdaptLowFreqDeemph_flt( const int16_t lg, float lf_deemph_factors[] ); -#ifndef IVAS_FLOAT_FIXED -/*! r: SQ gain */ -float SQ_gain( - const float x[], /* i : vector to quantize */ - const int16_t nbitsSQ, /* i : number of bits targeted */ - const int16_t lg /* i : vector size (2048 max) */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*! r: SQ gain */ -float SQ_gain_estimate( - const float x[], /* i : vector to quantize */ - const int16_t nbitsSQ, /* i : number of bits targeted */ - const int16_t lg /* i : vector size (2048 max) */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void tcx_scalar_quantization( - float *x, /* i : input coefficients */ - int16_t *xq, /* o : quantized coefficients */ - const int16_t L_frame, /* i : frame length */ - const float gain, /* i : quantization gain */ - const float offset, /* i : rounding offset (deadzone) */ - int8_t *memQuantZeros, /* o : coefficients set to 0 */ - const int16_t tcxonly ); -#endif - -#ifndef IVAS_FLOAT_FIXED -int16_t tcx_scalar_quantization_rateloop( - float *x, /* i : input coefficients */ - int16_t *xq, /* o : quantized coefficients */ - const int16_t L_frame, /* i : frame length */ - float *gain, /* i/o: quantization gain */ - float offset, /* i : rounding offset (deadzone) */ - int8_t *memQuantZeros, /* o : coefficients set to 0 */ - int16_t *lastnz_out, /* i/o: last nonzero coeff index */ - const int16_t target, /* i : target number of bits */ - int16_t *nEncoded, /* o : number of encoded coeff */ - int16_t *stop, /* i/o: stop param */ - const int16_t sqBits_in_noStop, /* i : number of sqBits as determined in prev. quant. stage, w/o using stop mechanism (ie might exceed target bits) */ - const int16_t sqBits_in, /* i : number of sqBits as determined in prev. quant. stage, using stop mechanism (ie always <= target bits) */ - const int16_t tcxRateLoopOpt, /* i : turns on/off rateloop optimization */ - const int16_t tcxonly, - CONTEXT_HM_CONFIG *hm_cfg, - const int16_t iter_max, - const int16_t element_mode ); -#endif - -#ifndef IVAS_FLOAT_FIXED -void tcx_QuantizeGain( - const int16_t n, - float *pGain, - int16_t *pQuantizedGain ); -#endif - -#ifndef IVAS_FLOAT_FIXED -void tcx_noise_factor( - const float *x_orig, /* i : unquantized mdct coefficients */ - float *sqQ, /* i/o: quantized mdct coefficients */ - const int16_t iFirstLine, /* i : first coefficient to be considered */ - const int16_t lowpassLine, /* i : last nonzero coefficients after low-pass */ - const int16_t nMinHoleSize, /* i : minimum size of hole to be checked */ - const int16_t L_frame, /* i : frame length */ - const float gain_tcx, /* i : tcx gain */ - const float tiltCompFactor, /* i : LPC tilt compensation factor */ - float *fac_ns, /* o : noise factor */ - int16_t *quantized_fac_ns, /* o : quantized noise factor */ - const int16_t element_mode /* i : IVAS element mode */ -); -#endif void tcx_noise_filling_flt( float *Q, @@ -7721,14 +6434,6 @@ void tcx_noise_filling_flt( const int16_t element_mode /* i : IVAS element mode */ ); -#ifndef IVAS_FLOAT_FIXED -void tcx_encoder_memory_update( - Encoder_State *st, /* i/o: encoder memory state */ - float *xn_buf, /* i/o: mdct output buffer/TD weigthed synthesis */ - const float *Ai, /* i : Unquantized (interpolated) LPC coefficients */ - const float *A /* i : Quantized LPC coefficients */ -); -#endif void tcx_decoder_memory_update_flt( Decoder_State *st, /* i/o: decoder memory state */ @@ -7737,21 +6442,6 @@ void tcx_decoder_memory_update_flt( const float *A /* i : Quantized LPC coefficients */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: number of bits used (including "bits") */ -int16_t tcx_ari_res_Q_spec( - const float x_orig[], /* i : original spectrum */ - const int16_t signs[], /* i : signs (x_orig[.]<0) */ - float x_Q[], /* i/o: quantized spectrum */ - const int16_t L_frame, /* i : number of lines */ - const float gain, /* i : TCX gain */ - int16_t prm[], /* o : bitstream */ - int16_t target_bits, /* i : number of bits available */ - int16_t bits, /* i : number of bits used so far */ - const float deadzone, /* i : quantizer deadzone */ - const float x_fac[] /* i : spectrum post-quantization factors */ -); -#endif /*! r: number of bits used (including "bits") */ int16_t tcx_ari_res_invQ_spec_flt( @@ -7764,83 +6454,15 @@ int16_t tcx_ari_res_invQ_spec_flt( const float x_fac[] /* i : spectrum post-quantization factors */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t tcx_res_Q_gain( - float sqGain, - float *gain_tcx, - int16_t *prm, - int16_t sqTargetBits ); - -int16_t tcx_res_Q_spec( - const float *x_orig, - float *x_Q, - const int16_t L_frame, - const float sqGain, - int16_t *prm, - int16_t sqTargetBits, - int16_t bits, - const float sq_round, - const float lf_deemph_factors[] ); - -int16_t tcx_res_invQ_gain_flt( - float *gain_tcx, - const int16_t *prm, - const int16_t resQBits ); - -int16_t tcx_res_invQ_spec_flt( - float *x, - const int16_t L_frame, - const int16_t *prm, - int16_t resQBits, - int16_t bits, - const float sq_round, - const float lf_deemph_factors[] ); - -void InitTnsConfigs_flt( - const int16_t bwidth, - const int16_t L_frame, - STnsConfig tnsConfig[2][2], - const int16_t igfStopFreq, - const int32_t total_brate, - const int16_t element_mode, - const int16_t MCT_flag ); - -void SetAllowTnsOnWhite_flt( - STnsConfig tnsConfig[2][2], - const int8_t allowTnsOnWhite ); - -void SetTnsConfig_flt( - TCX_CONFIG_HANDLE hTcxCfg, - const int16_t isTCX20, - const int16_t isAfterACELP ); -#endif void ari_copy_states( Tastat *source, Tastat *dest ); -#ifndef IVAS_FLOAT_FIXED -int32_t mul_sbc_14bits_ivas( - int32_t r, - int32_t c ); -#endif void ari_start_encoding_14bits( Tastat *s ); -#ifndef IVAS_FLOAT_FIXED -int16_t ari_encode_14bits_ext( - int16_t *ptr, - int16_t bp, - Tastat *s, - int32_t symbol, - const uint16_t *cum_freq ); - -int16_t ari_done_encoding_14bits( - int16_t *ptr, - int16_t bp, - Tastat *s ); -#endif // !IVAS_FLOAT_FIXED void ari_start_decoding_14bits_ivas( Decoder_State *st, @@ -7874,24 +6496,6 @@ Word16 expfp_evs_fx( const Word16 x_e /* i : exponent Q0 */ ); -#ifndef IVAS_FLOAT_FIXED -void powfp_odd2_evs( - const Word16 base, /* Q15 */ - const Word16 exp, /* Q0 */ - Word16 *pout1, /* Q15 */ - Word16 *pout2 /* Q15 */ -); - -void tcx_arith_scale_envelope_ivas( - const Word16 L_spec_core, /* i : number of lines to scale Q0 */ - Word16 L_frame, /* i : number of lines Q0 */ - const Word32 env[], /* i : unscaled envelope Q16 */ - Word16 target_bits, /* i : number of available bits Q0 */ - const Word16 low_complexity, /* i : low-complexity flag Q0 */ - Word16 s_env[], /* o : scaled envelope Q15-e */ - Word16 *s_env_e /* o : scaled envelope exponent Q0 */ -); -#endif void tcx_arith_render_envelope_ivas_fx( const Word16 A_ind[], /* i : LPC coefficients of signal envelope Q12*/ @@ -7911,14 +6515,6 @@ int16_t ari_encode_14bits_range( uint16_t cum_freq_low, uint16_t cum_freq_high ); -#ifndef IVAS_FLOAT_FIXED -int16_t ari_encode_14bits_sign( - int16_t *ptr, - int16_t bp, - int32_t bits, - Tastat *s, - int32_t sign ); -#endif // !IVAS_FLOAT_FIXED int16_t ari_done_cbr_encoding_14bits( int16_t *ptr, @@ -7926,22 +6522,6 @@ int16_t ari_done_cbr_encoding_14bits( int32_t bits, Tastat *s ); -#ifndef IVAS_FLOAT_FIXED -int16_t ari_decode_14bits_pow_ivas( - const int16_t *ptr, - int16_t bp, - int16_t bits, - int16_t *res, - Tastat *s, - uint16_t base ); - -int16_t ari_decode_14bits_sign_ivas( - const int16_t *ptr, - int16_t bp, - int16_t bits, - uint16_t *res, - Tastat *s ); -#endif // !IVAS_FLOAT_FIXED void tcx_arith_encode_envelope( float spectrum[], /* i/o: MDCT coefficients */ @@ -7993,15 +6573,6 @@ void tcx_arith_decode_envelope_ivas_fx( const Word16 low_complexity /* i : low-complexity flag */ ); -#ifndef IVAS_FLOAT_FIXED -void UnmapIndex_ivas( - const int16_t PeriodicityIndex, - const int16_t Bandwidth, - const int16_t LtpPitchLag, - const int16_t SmallerLags, - int16_t *FractionalResolution, - int32_t *Lag ); -#endif void UnmapIndex_fx( const Word16 PeriodicityIndex, /* Q0 */ @@ -8023,26 +6594,12 @@ int16_t SearchPeriodicityIndex( float *RelativeScore /* o : Energy concentration factor */ ); -#ifndef IVAS_FLOAT_FIXED -void ConfigureContextHm_ivas( - const int16_t NumCoeffs, /* i : Number of coefficients */ - const int16_t TargetBits, /* i : Target bit budget (excl. Done flag) */ - const int16_t PeriodicityIndex, /* i : Pitch related index */ - const int16_t LtpPitchLag, /* i : TCX-LTP pitch in F.D. */ - CONTEXT_HM_CONFIG *hm_cfg /* o : Context-based harmonic model configuration */ -); -#endif int16_t EncodeIndex( const int16_t Bandwidth, /* o : NB, 1: (S)WB */ int16_t PeriodicityIndex, BSTR_ENC_HANDLE hBstr ); -#ifndef IVAS_FLOAT_FIXED -int16_t CountIndexBits_ivas( - const int16_t Bandwidth, /* o : NB, 1: (S)WB */ - const int16_t PeriodicityIndex ); -#endif Word16 CountIndexBits_fx( Word16 Bandwidth, /* 0: NB, 1: (S)WB Q0*/ @@ -8057,13 +6614,6 @@ int16_t DecodeIndex( #define GET_ADJ( T, L ) GET_ADJ2( T, L, *FractionalResolution ) #define GET_ADJ2( T, L, F ) ( ( ( L ) << ( F ) ) - ( T ) ) -#ifndef IVAS_FLOAT_FIXED -Word16 tcx_hm_render_ivas( - const Word16 lag, /* i : pitch lag Q0*/ - const Word16 fract_res, /* i : fractional resolution of the lag Q0*/ - Word16 p[] /* o : harmonic model Q13*/ -); -#endif Word32 tcx_hm_render_fx( const Word32 lag, /* i: pitch lag Q0 */ @@ -8071,16 +6621,6 @@ Word32 tcx_hm_render_fx( Word16 p[] /* o: harmonic model Q13 */ ); -#ifndef IVAS_FLOAT_FIXED -void tcx_hm_modify_envelope_ivas( - const Word16 gain, /* i : HM gain Q11*/ - const Word16 lag, /* Q0 */ - const Word16 fract_res, /* Q0 */ - const Word16 p[], /* i : harmonic model Q13*/ - Word32 env[], /* i/o: envelope Q16*/ - const Word16 L_frame /* i : number of spectral lines Q0*/ -); -#endif void tcx_hm_modify_envelope_fx( const Word16 gain, /* i: HM gain Q11 */ @@ -8270,20 +6810,6 @@ void dec_prm_ivas( int16_t param_lpc[], /* i : LPC parameters */ int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ int16_t *bitsRead ); -#ifndef IVAS_FLOAT_FIXED -void gauss_L2( - const float h[], /* i : weighted LP filter impulse response */ - float code[], /* o : gaussian excitation */ - float y2[], /* i : zero-memory filtered code. excitation */ - float y11[], /* o : zero-memory filtered gauss. excitation */ - float *gain, /* o : excitation gain */ - float g_corr[], /* i/o: correlation structure for gain coding */ - float tilt_code, /* i : tilt of code */ - const float *Aq, /* i : quantized LPCs */ - float formant_enh_num, /* i : formant enhancement factor */ - int16_t *seed_acelp /* i/o: random seed */ -); -#endif void gaus_L2_dec_flt( float *code, /* o : decoded gaussian codevector */ float tilt_code, @@ -8344,55 +6870,6 @@ int16_t tcx_ltp_decode_params_flt( const int16_t pitmax, const int16_t pitres ); -#ifndef IVAS_FLOAT_FIXED -int16_t enc_lsf_tcxlpc( - const int16_t **indices, /* i : Ptr to VQ indices */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -void msvq_enc( - const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ - const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ - const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ - const float u[], /* i : Vector to be encoded (prediction and mean removed) */ - const int16_t *levels, /* i : Number of levels in each stage */ - const int16_t maxC, /* i : Tree search size (number of candidates kept from one stage to the next == M-best) */ - const int16_t stages, /* i : Number of stages */ - const float w[], /* i : Weights */ - const int16_t N, /* i : Vector dimension */ - const int16_t maxN, /* i : Codebook dimension */ - const int16_t applyDCT_flag, /* i : applyDCT flag */ - float *invTrfMatrix, /* i/o: expanded synthesis matrix */ - int16_t Idx[] /* o : Indices */ -); -#endif - -void msvq_dec_float( - const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ - const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ - const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ - const int16_t stages, /* i : Number of stages */ - const int16_t N, /* i : Vector dimension */ - const int16_t maxN, /* i : Codebook dimension */ - const int16_t Idx[], /* i : Indices */ - const int16_t applyIDCT_flag, /* i : applyIDCT flag */ - const float *invTrfMatrix, /* i : synthesis matrix */ - float *uq, /* o : quantized vector */ - Word16 *uq_ind /* o : quantized vector (fixed point) */ -); - - -void dec_FDCNG_MSVQ_stage1( - int16_t j_full, /* i : index full range */ - int16_t n, /* i : dimension to generate */ - const float *invTrfMatrix, /* i : IDCT matrix for synthesis */ - const DCTTYPE idcttype, /* i : specify which IDCT */ - float *uq, /* o : synthesized stage1 vector */ - Word16 *uq_ind /* o : synthesized stage1 vector in BASOP */ -); - void create_IDCT_N_Matrix( float *inv_matrixFloatQ, /* i/o: RAM buffer */ const int16_t N, /* i : DCT length, number of time samples */ @@ -8421,44 +6898,6 @@ void extend_dctN_input( const DCTTYPE dcttype /* i : matrix operation type */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: (p_max , best candidate sofar ) */ -int16_t msvq_stage1_dct_search( - const float *u, /* i : target */ - const int16_t N, /* i : target length and IDCT synthesis length */ - const int16_t maxC_st1, /* i : number of final stage 1 candidates to provide */ - const DCTTYPE dcttype, /* e.g. DCT_T2_16_XX, DCT_T2_24_XX; */ - const int16_t max_dct_trunc, /* i : maximum of truncation lenghts */ - float *invTrfMatrix, /* i : IDCT synthesis matrix for dim N */ - const float *midQ_truncQ, /* i : midQ vector */ - const float *dct_invScaleF, /* i : global inv scale factors */ - const float *dct_scaleF, /* i : global scale factors */ - const Word16 n_segm, /* i : number of segments */ - const Word16 *cols_per_segment, /* i : remaining length per segment */ - const Word16 *trunc_dct_cols_per_segment, /* i : trunc length per segment */ - const Word16 *entries_per_segment, /* i : number of rows per segment */ - const Word16 *cum_entries_per_segment, /* i : number of cumulative entries */ - const Word8 *const W8Qx_dct_sections[], /* i : Word8(byte) segment table ptrs */ - const Word16 *col_syn_shift[], /* i : columnwise syn shift tables */ - const Word8 *segm_neighbour_fwd, /* i : circular neighbour list fwd */ - const Word8 *segm_neighbour_rev, /* i : circular neighbour list reverse */ - const Word16 npost_check, /* i : number of neigbours to check , should be even */ - float *st1_mse_ptr, /* i : dynRAM buffer for MSEs */ - int16_t *indices_st1_local, /* o : selected cand indices */ - float *st1_syn_vec_ptr, /* i/o: buffer for IDCT24 synthesis */ - float *dist1_ptr /* o : resulting stage 1 MSEs in DCT-N domain */ -); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*! r: (updated p_max) */ -int16_t msvq_stage1_dct_recalc_candidates_fdcng_wb( - const float *st1_syn_vec_ptr, /* i : IDCT24 synthesis vectors */ - const float *u, /* i : target signal */ - const int16_t maxC_st1, /* i : number of candidates in stage1 */ - float *dist_ptr /* i/o: updated MSE vector for stage1 */ -); -#endif void PulseResynchronization( const float *src_exc, /* i : Input excitation buffer */ @@ -8491,22 +6930,6 @@ void con_tcx( const float A_cng[] /* i : CNG LP filter coefficients */ ); -/*! r: codebook index */ -int16_t tcxlpc_get_cdk_float( - const int16_t coder_type /* i : GC/VC indicator */ -); - -#ifndef IVAS_FLOAT_FIXED -int16_t lsf_msvq_ma_encprm( - BSTR_ENC_HANDLE hBstr, - const int16_t *param_lpc, - const int16_t core, - const int16_t acelp_mode, - const int16_t acelp_midLpc, - const int16_t bits_param_lpc[], - const int16_t no_indices ); -#endif - int16_t lsf_msvq_ma_decprm_ivas( Decoder_State *st, int16_t *param_lpc ); @@ -8527,13 +6950,6 @@ int16_t D_lsf_tcxlpc_ivas( const float mem_MA[] /* i : MA memory */ ); -void lsf_update_memory_float( - const int16_t narrowband, /* i : narrowband flag */ - const float qlsf[], /* i : quantized lsf coefficients */ - float old_mem_MA[], /* i : MA memory */ - float mem_MA[] /* o : updated MA memory */ -); - int16_t Q_lsf_tcxlpc( /* const */ float lsf[], /* i : original lsf */ float lsf_q[], /* o : quantized lsf */ @@ -8546,21 +6962,6 @@ int16_t Q_lsf_tcxlpc( const float *Bin_Ener /* i : Spectrum energy */ ); -int16_t E_LPC_lsp_unweight_float( - const float lsp_w[], /* i : weighted lsp */ - float lsp_uw[], /* o : unweighted lsp */ - float lsf_uw[], /* o : unweighted lsf */ - const float inv_gamma /* i : inverse weighting factor */ -); - -#ifndef IVAS_FLOAT_FIXED -int16_t lsf_ind_is_active_flt( - const Word16 lsf_q_ind[], - const float means[], - const int16_t narrowband, - const int16_t cdk ); -#endif - void midlsf_enc( const float qlsf0[], const float qlsf1[], @@ -8572,17 +6973,6 @@ void midlsf_enc( const int32_t sr_core, const int16_t coder_type ); -void midlsf_dec_flt( - const float qlsf0[], - const float qlsf1[], - const int16_t idx, - float qlsf[], - const int16_t N, - const int16_t coder_type, - int16_t *mid_lsf_int, - const int16_t prev_bfi, - const int16_t safety_net ); - void lsf_end_enc( Encoder_State *st, const float *lsf, @@ -8609,15 +6999,6 @@ void lsf_end_dec( const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ ); -ivas_error find_pred_mode_float( - int16_t *predmode, - const int16_t coder_type, - const int16_t bwidth, - const int32_t int_fs, - int16_t *p_mode_lvq, - int16_t *p_mode_lvq_p, - const int32_t core_brate ); - void lpc_quantization( Encoder_State *st, const float lsp[], @@ -8661,33 +7042,6 @@ void dlpc_bfi_flt( const float lsfBase[] /* i : base for differential lsf coding */ ); -void lsf_dec_bfi_flt( - const int16_t codec_mode, /* i : codec_mode: MODE1 | MODE2 */ - float *lsf, /* o : estimated LSF vector */ - const float *lsfold, /* i : past quantized lsf */ - float *lsf_adaptive_mean, /* i : lsf adaptive mean, updated when BFI==0 */ - const float lsfBase[], /* i : base for differential lsf coding */ - float *mem_MA, /* i/o: quantizer memory for MA model */ - float *mem_AR, /* o : quantizer memory for AR model */ - const float stab_fac, /* i : lsf stability factor */ - const int16_t last_coder_type, /* i : last coder type */ - const int16_t L_frame, /* i : frame length */ - const int16_t last_good, /* i : last good received frame */ - const int16_t nbLostCmpt, /* i : counter of consecutive bad frames */ - const int16_t plcBackgroundNoiseUpdated, /* i : background noise already updated? */ - float *lsf_q_cng, /* o : quantized lsfs of background noise */ - float *lsf_cng, /* i : long term target for fading to bg noise*/ - float *old_lsf_q_cng, /* o : old quantized lsfs for background noise*/ - const int16_t Last_GSC_pit_band_idx, /* i : AC mode (GSC) - Last pitch band index */ - const int16_t Opt_AMR_WB, /* i : IO flag */ - const int16_t bwidth /* i : coded bandwidth */ -); - -const float *PlcGetlsfBase_flt( - const int16_t pcQuantization, - const int16_t narrowBand, - const int32_t sr_core ); - void Unified_weighting( const float Bin_Ener_128[], /* i : FFT Bin energy 128 bins in two sets */ const float lsf[], /* i : LSF vector */ @@ -8712,13 +7066,6 @@ int16_t vad_proc( const int16_t vada_flag /* i : VAD flag */ ); -#ifndef IVAS_FLOAT_FIXED -void subband_FFT( - float Sr[16][60], /* i : real part */ - float Si[16][60], /* i : imag part */ - float *spec_amp /* o : spectral amplitude */ -); -#endif int16_t update_decision( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ @@ -8736,14 +7083,6 @@ void frame_spec_dif_cor_rate( float f_tonality_rate[] /* o : tonality rate */ ); -#ifndef IVAS_FLOAT_FIXED -void ltd_stable( - float frames_power[], /* i/o: energy of several frames */ - float ltd_stable_rate[], /* o : time-domain stable rate */ - const float frame_energy, /* i : current frame energy */ - const int16_t frameloop /* i : number of frames */ -); -#endif void SNR_calc( const float frame_sb_energy[], /* i : energy of sub-band divided non-uniformly*/ @@ -8777,19 +7116,6 @@ void est_energy( const int16_t bw /* i : bandwidth */ ); -#ifndef IVAS_FLOAT_FIXED -void spec_center( - float spec_power[], /* i : energy of sub-band divided uniformly */ - float sp_center[], /* o : spectral center */ - const int16_t bw_index /* i : bandwidth */ -); - -void spec_flatness( - float spec_amp[], /* i : spectral amplitude */ - float smooth_spec_amp[], /* i : smoothed spectral amplitude */ - float sSFM[] /* o : spectral flatness rate */ -); -#endif int16_t comvad_decision( VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ @@ -8845,28 +7171,6 @@ float construct_snr_thresh( const int16_t bw_index /* i : band width index */ ); -void deleteFdCngCom_flt( - HANDLE_FD_CNG_COM *hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -); -#ifndef IVAS_FLOAT_FIXED -void initFdCngCom_flt( - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const float scale ); -#endif - - -void initPartitions_flt( - const int16_t *part_in, - const int16_t npart_in, - const int16_t startBand, - const int16_t stopBand, - int16_t *part_out, - int16_t *npart_out, - int16_t *midband, - float *psize_flt, - float *psize_inv_flt, - const int16_t stopBandFR ); - void minimum_statistics_flt( const int16_t len, /* i : Vector length */ const int16_t lenFFT, /* i : Length of the FFT part of the vectors */ @@ -9016,10 +7320,6 @@ void SynthesisSTFT_flt( const int16_t nchan_out /* i : number of output channels */ ); -float rand_gauss_flt( - float *x, - int16_t *seed ); - void lpc_from_spectrum_flt( HANDLE_FD_CNG_COM hFdCngCom, const int16_t start, @@ -9099,18 +7399,6 @@ void deleteFdCngEnc( HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ ); -#ifndef IVAS_FLOAT_FIXED -void configureFdCngEnc( - HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ - const int16_t bwidth, - const int32_t total_brate ); - -void initFdCngEnc( - HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ - const int32_t input_Fs, /* i : input signal sampling frequency in Hz */ - const float scale /* i : scaling factor */ -); -#endif void resetFdCngEnc( Encoder_State *st /* i/o: encoder state structure */ @@ -9154,22 +7442,6 @@ void WriteToBitstream( BSTR_ENC_HANDLE hBstr, int16_t *pnBits ); -void WriteToBitstream_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, - const Word16 **pStream, - Word16 *pnSize, - BSTR_ENC_HANDLE hBstr, - Word16 *pnBits ); - -void WriteToBitstream_ivas_fx( - ParamsBitMap const *paramsBitMap, - const Word16 nArrayLength, - const Word16 **pStream, - Word16 *pnSize, - BSTR_ENC_HANDLE hBstr, - Word16 *pnBits ); - void ReadFromBitstream( ParamsBitMap const *paramsBitMap, const int16_t nArrayLength, @@ -9177,10 +7449,10 @@ void ReadFromBitstream( int16_t **pStream, int16_t *pnSize ); -void const *GetNumOfTnsFilters_flt( void const *p, const int16_t index, int16_t *pValue ); -void *SetNumOfTnsFilters_flt( void *p, const int16_t index, const int16_t value ); void const *GetTnsOnWhite( void const *p, const int16_t index, int16_t *pValue ); void *SetTnsOnWhite( void *p, const int16_t index, const int16_t value ); +void const *GetNumOfTnsFilters_flt( void const *p, const int16_t index, int16_t *pValue ); +void *SetNumOfTnsFilters_flt( void *p, const int16_t index, const int16_t value ); int16_t DecodeSWBTCX10TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ); int16_t DecodeSWBTCX20TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ); @@ -9201,14 +7473,6 @@ void ResetTnsData_flt( void ClearTnsFilterCoefficients_flt( STnsFilter *pTnsFilter ); -void InitTnsConfiguration_flt( - const int16_t bwidth, - const int16_t frameLength, - STnsConfig *pTnsConfig, - const int16_t igfStopFreq, - const int32_t total_brate, - const int16_t element_mode, - const int16_t MCT_flag ); int16_t DetectTnsFilt( const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ @@ -9220,28 +7484,6 @@ int16_t DetectTnsFilt( float *predictionGain /* o : TNS prediction gain */ ); -void ApplyTnsFilter_flt( - STnsConfig const *pTnsConfig, - STnsData const *pTnsData, - float spectrum[], - const int16_t fIsAnalysis ); - -int16_t ITF_Detect( - const float pSpectrum[], - const int16_t startLine, - const int16_t stopLine, - const int16_t maxOrder, - float *A, - float *predictionGain, - int16_t *curr_order ); - -void ITF_Apply( - float spectrum[], - const int16_t startLine, - const int16_t stopLine, - const float *A, - const int16_t curr_order ); - void EncodeTnsData( STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ STnsData const *pTnsData, /* i : TNS data struct (quantized param) */ @@ -9300,12 +7542,6 @@ void configureCldfb_ivas( const int32_t sampling_rate /* i : sampling rate */ ); -#ifndef IVAS_FLOAT_FIXED -void configureCldfb_ivas_enc( - HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ - const int32_t sampling_rate /* i : sampling rate */ -); -#endif void analysisCldfbEncoder_ivas( Encoder_State *st, /* i/o: encoder state structure */ @@ -9412,17 +7648,6 @@ ivas_error config_acelp1_IVAS( /*! r: ACELP16k flag */ -#ifndef IVAS_FLOAT_FIXED -int16_t set_ACELP_flag_IVAS( - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t total_brate, /* i : total bitrate per channel */ - const int16_t idchan, /* i : Channel id */ - const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t cng_type /* i : CNG type */ -); -#endif void FEC_clas_estim( const float *syn, @@ -9452,30 +7677,6 @@ void FEC_clas_estim( const int16_t FEC_mode /* i : ACELP FEC mode */ ); -#ifndef IVAS_FLOAT_FIXED -void InitTransientDetection( - const int16_t nFrameLength, - const int16_t nTCXDelay, - TRAN_DET_HANDLE hTranDet, - const int16_t ext_mem_flag ); - -void RunTransientDetection( - const float *input, /* i : input signal */ - const int16_t length, /* i : frame length */ - TRAN_DET_HANDLE hTranDet /* i/o: transient detection handle */ -); - -float GetTCXAvgTemporalFlatnessMeasure( - TRAN_DET_HANDLE hTranDet, - const int16_t nCurrentSubblocks, - const int16_t nPrevSubblocks ); - -float GetTCXMaxenergyChange( - TRAN_DET_HANDLE hTranDet, - const int16_t isTCX10, - const int16_t nCurrentSubblocks, - const int16_t nPrevSubblocks ); -#endif void SetTCXModeInfo( Encoder_State *st, /* i/o: encoder state structure */ @@ -9530,22 +7731,6 @@ void post_decoder_flt( const int16_t pitch[], float signal_out[], float bpf_noise_buf[] ); -#ifndef IVAS_FLOAT_FIXED -float bass_pf_enc( - const float *orig, /* i : 12.8kHz original signal */ - const float *syn, /* i : 12.8kHz synthesis to postfilter */ - const float pitch_buf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ - const float gainT_sf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ - const int16_t l_frame, /* i : frame length (should be multiple of l_subfr)*/ - const int16_t l_subfr_in, /* i : sub-frame length (60/64) */ - float mem_bpf[], /* i/o: memory state [2*L_FILT] */ - float mem_error_bpf[], /* i/o: memory state [2*L_FILT] */ - int16_t *gain_factor_param, /* o : quantized gain factor */ - const int16_t mode, /* i : coding mode of adapt bpf */ - float *mem_deemph_err, /* i/o: Error deemphasis memory */ - float *lp_ener /* i/o: long_term error signal energy */ -); -#endif void cldfb_synth_set_bandsToZero_flt( Decoder_State *st, /* i/o: decoder state structure */ float **rAnalysis, @@ -9817,19 +8002,6 @@ void calcLoEnvCheckCorrHiLo( int16_t *corr_flag /* o : 0 for original, 1 for TEC */ ); -#ifndef IVAS_FLOAT_FIXED -void tfaCalcEnv( - const float *shb_speech, - float *enr ); -#endif - -#ifndef IVAS_FLOAT_FIXED -int16_t tfaEnc_TBE( - const float *enr, - const int16_t last_core, - const float *voicing, - const float *pitch_buf ); -#endif void tecEnc_TBE( int16_t *corrFlag, @@ -9850,6 +8022,7 @@ float Damping_fact_flt( const int16_t core /* i : current core: ACELP = 0, TCX20 = 1, TCX10 = 2 */ ); +#ifndef IVAS_FLOAT_FIXED void fer_energy( const int16_t L_frame, /* i : frame length */ const int16_t clas, /* i : frame classification */ @@ -9858,6 +8031,7 @@ void fer_energy( float *enr, /* o : pitch-synchronous or half_frame energy */ const int16_t useOffset /* i : speech pointer offset (0 or L_FRAME) */ ); +#endif float getLevelSynDeemph( const float h1Init[], /* i : input value or vector to be processed */ @@ -10088,14 +8262,6 @@ float getTcxBandwidth_flt( const int16_t bwidth /* i : audio bandwidth */ ); -#ifndef IVAS_FLOAT_FIXED -int16_t getIgfPresent( - const int16_t element_mode, /* i : IVAS element mode */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -); -#endif int16_t getCnaPresent( const int16_t element_mode, /* i : element mode */ @@ -10163,13 +8329,6 @@ void IGFEncApplyStereo( const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ ); -#ifndef IVAS_FLOAT_FIXED -void IGFEncConcatenateBitstream( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - const int16_t bsBits, /* i : number of IGF bits written to list of indices */ - BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ -); -#endif // !IVAS_FLOAT_FIXED void IGFEncResetTCX10BitCounter( const IGF_ENC_INSTANCE_HANDLE hIGFEnc /* i : instance handle of IGF Encoder */ @@ -10307,39 +8466,6 @@ int16_t IGF_MapBitRateToIndex_flt( const int16_t rf_mode /* i : flag to signal the RF mode */ ); -#ifndef IVAS_FLOAT_FIXED -void IGFSCFEncoderOpen( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data */ - H_IGF_INFO hIgfInfo, /* i : IGF info handle */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -); - -void IGFSCFEncoderReset( - IGFSCFENC_INSTANCE_HANDLE hPublicData /* i : handle to public data or NULL in case there was no instance created */ -); - -int16_t IGFSCFEncoderEncode( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t bitCount, /* i : offset to the first bit in bitbuffer which should be readed by iisArithDecoderDecode function */ - int16_t *sfe, /* i : ptr to an array which contain quantized scalefactor energies */ - const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const int16_t indepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ -); - -void IGFSCFEncoderSaveContextState( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ - const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ -); - -void IGFSCFEncoderRestoreContextState( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i : handle to public data or NULL in case there was no instance created */ - const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ -); -#endif void IGFSCFDecoderOpen_ivas( IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i : handle to public data */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 656bd173d..0e829e59b 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -114,14 +114,12 @@ void fix2f_16( Word16 *var_fix, float *var_flt, Word32 expo ); void f2fix( float *var_flt, Word32 *var_fix, Word32 expo ); void fix2f( Word32 *var_fix, float *var_flt, Word32 expo ); -#ifdef IVAS_FLOAT_FIXED // Get max Q factor for a float value before sat in 32-bit Word16 L_get_q( float f ); Word16 L_get_q1( float f ); // Get max Q factor for a float buffer before sat in 32-bit Word16 L_get_q_buf( float *ptr_flt, Word16 length ); Word16 L_get_q_buf1( float *ptr_flt, Word16 length ); -#endif /*================================================================================*/ /* conversion functions: */ @@ -468,7 +466,6 @@ void calc_norm_fx( const Word16 *band_len, /* i : Length of bands Q0 */ const Word16 *band_start /* i : Start of bands Q0 */ ); -#ifdef IVAS_FLOAT_FIXED void calc_norm_ivas_fx( const Word32 *x_fx, /* i : Input vector.(Qin) */ Word16 *norm, /* o : Quantization indices for norms Q0 */ @@ -486,7 +483,6 @@ void logqnorm_ivas_fx( const Word16 N, /* i : sub-vector size */ const Word32 *thre_fxn /* i : quantization thresholds Q14*/ ); -#endif /*========================================================================================================/ hq_tools_fx.c /========================================================================================================*/ @@ -676,7 +672,6 @@ Word16 calc_nor_delta_hf_fx( const Word16 *sfm_start, /* i : Start index of bands */ const Word16 core_sfm /* i : index of the end band for core */ ); -#ifdef IVAS_FLOAT_FIXED Word16 calc_nor_delta_hf_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word32 *t_audio, /* i : transform-domain coefficients Qx*/ @@ -688,7 +683,6 @@ Word16 calc_nor_delta_hf_ivas_fx( const Word16 *sfm_start, /* i : Start index of bands */ const Word16 core_sfm /* i : index of the end band for core */ ); -#endif void hq_bwe_fx( const Word16 HQ_mode, /* i : HQ mode */ Word32 *coeff_out1, /* i/o: BWE i & temporary buffer */ @@ -874,7 +868,6 @@ void lsf_syn_mem_restore_fx( Word16 pstreaklen /* i:LSF quantizer */ ); -#ifdef IVAS_FLOAT_FIXED void lsf_syn_mem_restore_ivas_fx( Encoder_State *st_fx, /* o: state structure */ Word16 btilt_code_fx, /* i: Q15 */ @@ -895,7 +888,6 @@ void lsf_syn_mem_restore_ivas_fx( Word16 streaklimit, /* i:LSF quantizer Q15 */ Word16 pstreaklen /* i:LSF quantizer */ ); -#endif void lsf_update_memory( Word16 narrowband, /* i : narrowband flag */ @@ -1488,7 +1480,6 @@ Word16 gsc_gaindec_fx( /* o : average frequency gai const Word16 bwidth_fx /* i : i signal bandwidth */ ); -#ifdef IVAS_FLOAT_FIXED Word16 gsc_gaindec_ivas_fx( /* o : average frequency gain */ Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 y_gainQ_fx[], /* o : quantized gain per band */ @@ -1497,7 +1488,6 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc const Word16 coder_type, /* i : coding type */ const Word16 bwidth_fx /* i : input signal bandwidth */ ); -#endif Word16 gsc_gainQ_fx( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ @@ -1636,12 +1626,10 @@ void interleave_spectrum_fx( const Word16 length /* i : length of spectrum Q0 */ ); // findpulse.c -#ifdef IVAS_FLOAT_FIXED void interleave_spectrum_ivas_fx( Word32 *coefs, /* i/o: input and output coefficients Q12 */ const Word16 length /* i : length of spectrum Q0 */ ); -#endif Word16 findpulse_fx( /* o : pulse position */ const Word16 L_frame, /* i : length of the frame */ const Word16 res[], /* i : Residual signal <12 bits */ @@ -1785,7 +1773,6 @@ void wtda_fx( const Word16 L /* i : length */ ); -#ifdef IVAS_FLOAT_FIXED void wtda_ivas_fx( Word16 *new_audio, /* i : input audio Q0 */ Word16 *Q, /* i/o : Q of input/Output Audio */ @@ -1796,9 +1783,7 @@ void wtda_ivas_fx( const Word16 right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ const Word16 L /* i : length */ ); -#endif -#ifdef IVAS_FLOAT_FIXED void wtda_ext_fx( const Word16 *new_audio, /* i : input audio (Q_in) */ Word16 *wtda_audio, /* o : windowed audio (Q_in) */ @@ -1807,7 +1792,6 @@ void wtda_ext_fx( const Word16 L, /* i : length */ const UWord16 kernel_type /* i : transform kernel type (0 - 3) */ ); -#endif /*========================================================================================================/ swb_bwe_com_lr_fx.c @@ -2380,7 +2364,6 @@ void Syn_filt_s( const Word16 update /* i : 0=no update, 1=update of memory. Q0 */ ); -#ifdef IVAS_FLOAT_FIXED void syn_filt_fx( const Word16 shift, /* i : scaling to apply Q0 */ const Word16 a[], /* i : LP filter coefficients Q12 */ @@ -2391,7 +2374,6 @@ void syn_filt_fx( Word16 mem[], /* i/o: initial filter states Qx-s */ const Word16 update_m /* i : update memory flag Q0 : 0 --> no memory update */ ); /* 1 --> update of memory */ -#endif void E_UTIL_synthesis( const Word16 shift, const Word16 a[], const Word16 x[], Word16 y[], const Word16 lg, Word16 mem[], const Word16 update, const Word16 m ); @@ -2406,7 +2388,6 @@ void synth_mem_updt2( Word16 mem_syn[], /* o : synthesis filter memory for find_target */ const Word16 dec /* i : flag for decoder indication */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_synth_mem_updt2_fx( const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ @@ -2415,7 +2396,6 @@ void ivas_synth_mem_updt2_fx( Word16 mem_syn2[], /* o : synthesis filter memory for find_target */ Word16 mem_syn[], /* o : synthesis filter memory for find_target */ const Word16 dec ); -#endif // lerp.c @@ -2876,7 +2856,6 @@ void PostShortTerm_fx( const Word16 formant_fac_fx /* i : Strength of post-filter*/ ); -#ifdef IVAS_FLOAT_FIXED void PostShortTerm_ivas_enc_fx( Word16 *sig_in, /* i : i signal (pointer to current subframe */ Word16 *lpccoeff, /* i : LPC coefficients for current subframe */ @@ -2898,7 +2877,6 @@ void PostShortTerm_ivas_dec_fx( Word16 *mem_zero, /* i/o: null memory to compute h_st*/ const Word16 formant_fac_fx /* i : Strength of post-filter*/ ); -#endif void flip_spectrum_and_decimby4_fx( const Word16 i[], /* i : i spectrum */ @@ -2978,7 +2956,6 @@ void GenShapedSHBExcitation_fx( #endif ); -#ifdef IVAS_FLOAT_FIXED void GenShapedSHBExcitation_ivas_enc_fx( Word16 *excSHB, /* o : synthesized shaped shb excitation Q_bwe_exc*/ const Word16 *lpc_shb, /* i : lpc coefficients Q12*/ @@ -3068,7 +3045,6 @@ void GenShapedSHBExcitation_ivas_dec_fx( Word16 Env_error_part[] /* o : per-segment error in SHB residual envelope modelling */ #endif ); -#endif void GenSHBSynth_fx( const Word16 *shb_target_speech, /* i : i synthesized speech */ @@ -3572,7 +3548,6 @@ void InitTnsConfiguration( const Word16 element_mode, const Word16 is_mct ); -#ifdef IVAS_FLOAT_FIXED void InitTnsConfiguration_ivas_fx( const Word16 bwidth, const Word16 frameLength, @@ -3581,7 +3556,6 @@ void InitTnsConfiguration_ivas_fx( const Word32 total_brate, const Word16 element_mode, const Word16 is_mct ); -#endif /** Modify spectrum using TNS filter. * Modifies spectrum unsing TNS filter defined by pTnsData. @@ -3675,6 +3649,9 @@ void const *GetTnsEnabledSingleFilter( void const *p, const Word16 index, Word16 void *SetTnsEnabledSingleFilter( void *p, const Word16 index, const Word16 value ); +void const *GetTnsOnWhite( void const *p, const int16_t index, int16_t *pValue ); +void *SetTnsOnWhite( void *p, const int16_t index, const int16_t value ); + /*tns_base.h*/ /** Reset TNS data. * Resets TNS data to the initial state. @@ -4159,7 +4136,6 @@ void mdct_window_aldo( // tcx_utils.c Word16 getInvFrameLen( const Word16 L_frame ); /* returns 1/L_frame in Q21 format */ -#ifdef IVAS_FLOAT_FIXED void tcx_get_windows( TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration */ const Word16 left_mode, /* i: overlap mode of left window half */ @@ -4170,7 +4146,6 @@ void tcx_get_windows( const PWord16 **right_win, /* o: right overlap window */ const Word8 fullband /* i: fullband flag */ ); -#endif void WindowSignal( TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ @@ -4309,7 +4284,6 @@ void InitTnsConfigs( const Word16 element_mode, const Word16 is_mct ); -#ifdef IVAS_FLOAT_FIXED void InitTnsConfigs_ivas_fx( const Word16 bwidth, const Word16 L_frame, @@ -4318,7 +4292,6 @@ void InitTnsConfigs_ivas_fx( const Word32 total_brate, const Word16 element_mode, const Word16 is_mct ); -#endif #define IVAS_CODE_TCX_UTIL #ifdef IVAS_CODE_TCX_UTIL @@ -4913,12 +4886,10 @@ void longshiftleft( const int16_t len /* i : length of vector a[] and d[] */ ); -#ifdef IVAS_FLOAT_FIXED void longshr( UWord32 a[], Word16 bits, Word16 len ); -#endif // IVAS_FLOAT_FIXED // gs_bitallocation.c void bands_and_bit_alloc_fx( @@ -4967,7 +4938,6 @@ void fine_gain_quant_fx( Word16 *fg_pred, /* i/o: Predicted gains / Corrected gains Q12 */ const Word16 *gopt /* i : Optimal gains Q12 */ ); -#ifdef IVAS_FLOAT_FIXED void fine_gain_quant_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *ord, /* i : Indices for energy order Q0 */ @@ -4976,7 +4946,6 @@ void fine_gain_quant_ivas_fx( Word16 *fg_pred, /* i/o: Predicted gains / Corrected gains Q12 */ const Word16 *gopt /* i : Optimal gains Q12 */ ); -#endif void get_max_pulses_fx( const Word16 *band_start, /* i : Sub band start indices */ const Word16 *band_end, /* i : Sub band end indices */ @@ -5047,7 +5016,6 @@ void highband_exc_dct_in_fx( const Word16 GSC_IVAS_mode /* i : GSC IVAS mode */ ); -#ifdef IVAS_FLOAT_FIXED void highband_exc_dct_in_ivas_fx( const Word32 core_brate, /* i : core bitrate */ const Word16 *mfreq_bindiv, /* i : bin per bands tables */ @@ -5079,7 +5047,6 @@ void highband_exc_dct_in_ivas_fx( const Word16 element_mode, /* i : IVAS element mode */ const Word16 GSC_IVAS_mode /* i : GSC IVAS mode */ ); -#endif // lsf_dec_bfi_fx.c void lsf_dec_bfi( @@ -5176,7 +5143,6 @@ void minimum_statistics( Word16 len, /* i : Total number of HANDLE_FD_CNG_COM st /* i/o: FD_CNG structure containing buffers and variables */ ); -#ifdef IVAS_FLOAT_FIXED void minimum_statistics_fx( Word16 len, /* i : Total number of partitions (CLDFB or FFT) */ Word16 lenFFT, /* i : Number of FFT partitions */ @@ -5202,7 +5168,6 @@ void minimum_statistics_fx( const Word16 enc_dec, /* i : encoder/decoder indicator */ const Word16 element_mode /* i : IVAS element mode type */ ); -#endif // IVAS_FLOAT_FIXED /* Apply bitrate-dependant scale */ void apply_scale( @@ -5981,11 +5946,9 @@ void GenTransition_WB_fx( Word16 state_lsyn_filt_shb2[], Word32 output_Fs, Word16 *up_mem ); -#ifdef IVAS_FLOAT_FIXED void TBEreset_dec_ivas_fx( Decoder_State *st /* i/o: decoder state structure */ ); -#endif // IVAS_FLOAT_FIXED void TBEreset_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ @@ -6135,7 +6098,6 @@ Word32 dotp_fixed_ivas_fx( const Word16 n, /* i : vector length */ Word16 *out_e ); -#ifdef IVAS_FLOAT_FIXED Word32 dotp_fixed_guarded( const Word32 x[], /* i : vector x[] */ const Word32 y[], /* i : vector y[] */ @@ -6149,7 +6111,6 @@ Word32 dotp_me_fx( Word16 exp_x, Word16 exp_y, Word16 *exp_suma ); -#endif void lsf_end_dec_fx( Decoder_State *st, /* i/o: decoder state structure */ @@ -6515,13 +6476,11 @@ void TonalMDCTConceal_SaveTimeSignal( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 nNewSamples ); -#ifdef IVAS_FLOAT_FIXED void TonalMDCTConceal_SaveTimeSignal_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 q_timeSignal, Word16 nNewSamples ); -#endif // decision_matrix_dec_fx.c void decision_matrix_dec_fx( @@ -6615,7 +6574,6 @@ void formant_post_filt_fx( const Word16 off_flag /* i : off flag */ ); -#ifdef IVAS_FLOAT_FIXED void formant_post_filt_ivas_fx( PFSTAT_HANDLE hPFstat, /* i : core decoder parameters */ Word16 *synth_in, /* i : 12k8 synthesis */ @@ -6626,7 +6584,6 @@ void formant_post_filt_ivas_fx( Word32 rate, /* (i) : bit-rate */ const Word16 off_flag /* i : off flag */ ); -#endif void Filt_mu_fx( Word16 *sig_in, /* i : signal (beginning at sample -1) */ Word16 *sig_out, /* o : signal with tilt */ @@ -6634,14 +6591,12 @@ void Filt_mu_fx( Word16 L_subfr /* i : the length of subframe */ ); -#ifdef IVAS_FLOAT_FIXED void Filt_mu_ivas_fx( Word16 *sig_in, /* i : signal (beginning at sample -1) */ Word16 *sig_out, /* o : signal with tilt */ Word16 parcor0, /* i : parcor0 (mu = parcor0 * gamma3) */ Word16 L_subfr, /* i : the length of subframe */ const Word16 extl ); -#endif void scale_st_fx( const Word16 *sig_in, /* i : postfilter i signal */ Word16 *sig_out, /* i/o: postfilter o signal */ @@ -6856,11 +6811,9 @@ void GSC_dec_init( GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ ); -#ifdef IVAS_FLOAT_FIXED void GSC_dec_init_ivas_fx( GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ ); -#endif // IVAS_FIXED // gain_dec_fx.c @@ -7024,7 +6977,6 @@ void AVQ_dec_lpc( Word16 Nsv ); /* input: number of subvectors (lg=Nsv*8) Q0*/ -#ifdef IVAS_FLOAT_FIXED // re8_dec_fx.c void re8_dec_fx( Word16 n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ @@ -7035,7 +6987,6 @@ void re8_dec_fx( // lead_deindexing_fx.c void re8_decode_base_index_fx( const Word16 n, UWord16 I, Word16 *x ); -#endif // re8_utils_fx.c void re8_k2y_fx( @@ -7097,7 +7048,6 @@ void dec_pit_exc_ivas_fx( #endif ); -#ifdef IVAS_FLOAT_FIXED // pit_dec_fx.c Word32 Mode2_pit_decode( /* o: pitch value Q16 */ const Word16 coder_type, /* i: coding model */ @@ -7216,7 +7166,6 @@ void delta_pit_dec_fx( Word16 *T0_frac, /* o : pitch fraction */ const Word16 T0_min /* i : delta search min */ ); -#endif // limit_t0_fx.c void limit_T0_fx( @@ -7259,7 +7208,6 @@ void inov_decode_fx( const Word16 L_subfr /* i : subframe length Q0 */ ); -#ifdef IVAS_FLOAT_FIXED void inov_decode_ivas_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word32 core_brate, /* i : core bitrate Q0 */ @@ -7273,18 +7221,14 @@ void inov_decode_ivas_fx( Word16 *code, /* o : algebraic excitation Q12 */ const Word16 L_subfr /* i : subframe length Q0 */ ); -#endif -#ifdef IVAS_FLOAT_FIXED // dec4t64_fx.c void dec_acelp_4t64_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 nbbits, /* i : number of bits per codebook */ Word16 code[], /* o : algebraic (fixed) codebook excitation Q9*/ const Word16 Opt_AMR_WB ); -#endif void D_ACELP_decode_43bit_fx( UWord16 idxs[], Word16 code[], Word16 *pulsestrack ); -#ifdef IVAS_FLOAT_FIXED // dec_acelp_fx.c void D_ACELP_indexing_fx( Word16 code[], @@ -7294,7 +7238,6 @@ void D_ACELP_indexing_fx( Word16 *BER_detect ); void fcb_pulse_track_joint_decode_fx( UWord16 *idxs, Word16 wordcnt, UWord32 *index_n, Word16 *pulse_num, Word16 track_num ); -#endif // dec2t32_fx.c void dec_acelp_2t32_fx( @@ -7384,7 +7327,6 @@ Word16 pvq_core_dec_fx( const Word16 core ); -#ifdef IVAS_FLOAT_FIXED Word16 ivas_pvq_core_dec_fx( Decoder_State *st_fx, const Word16 *sfm_start, @@ -7399,7 +7341,6 @@ Word16 ivas_pvq_core_dec_fx( Word16 *npulses, Word16 *maxpulse, const Word16 core ); -#endif void decode_energies_fx( Decoder_State *st_fx, @@ -7413,7 +7354,6 @@ void decode_energies_fx( Word16 dim, const Word16 strict_bits ); -#ifdef IVAS_FLOAT_FIXED // range_drc_fx.c void rc_dec_init_fx( Decoder_State *st_fx, /* i/o: Decoder State */ @@ -7451,7 +7391,6 @@ void rc_dec_finish_fx( Decoder_State *st_fx, PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ ); -#endif // pvq_decode_fx.c void pvq_decode_fx( @@ -7464,7 +7403,6 @@ void pvq_decode_fx( const Word16 neg_gain /* i: Gain (negated to fit 1.0 in Q15 as -1.0) */ ); -#ifdef IVAS_FLOAT_FIXED // nelp_dec_fx.c void nelp_decoder_fx( Decoder_State *st_fx, /* i/o: decoder static memory */ @@ -7475,7 +7413,6 @@ void nelp_decoder_fx( const Word16 coder_type, /* i : coding type Q0 */ Word16 *gain_buf /* Q14 */ ); -#endif // dec_nelp_fx.c void decod_nelp_fx( @@ -7493,7 +7430,6 @@ void decod_nelp_fx( ); // lp_filt_exc_dec_fx -#ifdef IVAS_FLOAT_FIXED void lp_filt_exc_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 codec_mode, /* i : coder mode */ @@ -7511,7 +7447,6 @@ void FEC_lsf2lsp_interp( Word16 *lsf, /* o : estimated LSF vector */ Word16 *lsp /* o : estimated LSP vector */ ); -#endif // fd_cng_dec_fx.c @@ -7653,11 +7588,9 @@ void generate_masking_noise_mdct_fx( Word32 *mdctBuffer, /* i/o: time-domain s , Word16 L_frame ); -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_mdct_ivas_fx( Word32 *mdctBuffer, /* i/o: time-domain signal */ Word16 *mdctBuffer_e, /* i/o: exponent time-domain signal */ HANDLE_FD_CNG_COM st /* i/o: FD_CNG structure containing all buffers and variables */ ); -#endif // init_dec_fx.c ivas_error init_decoder_fx( @@ -7815,7 +7748,6 @@ void dequantize_norms_fx( Word16 *normqlg2 /* o : Log2 of decoded norms Q0*/ ); -#ifdef IVAS_FLOAT_FIXED // hdecnrm_fx.c void hdecnrm_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ @@ -7857,7 +7789,6 @@ void hdecnrm_tran_fx( const Word16 N, /* i : number of norms Q0*/ Word16 *index /* o : indices of quantized norms Q0*/ ); -#endif // tcq_core_dec_fx.c void tcq_core_LR_dec_fx( @@ -7947,7 +7878,6 @@ Word16 hq_classifier_dec_fx( /* o : Consumed bits ); // peak_vq_dec_fx.c -#ifdef IVAS_FLOAT_FIXED void hvq_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 num_bits, /* i : Number of available bits */ @@ -7959,7 +7889,6 @@ void hvq_dec_fx( Word16 *Npeaks, /* o : Total number of peaks */ Word32 *coefsq_norm, /* o : Output vector in Q12 */ const Word16 core ); -#endif // hvq_pvq_bitalloc_fx.c Word16 hvq_pvq_bitalloc_fx( @@ -8246,7 +8175,6 @@ void FEC_scale_syn_ivas_fx( const Word16 force_scaling /* i: force scaling */ ); -#ifdef IVAS_FLOAT_FIXED // LD_music_post_filter_fx.c void LD_music_post_filter_fx( MUSIC_POSTFILT_HANDLE hMusicPF, /* i/o: LD music postfilter handle */ @@ -8334,7 +8262,6 @@ void decod_amr_wb_fx( Word16 *voice_factors_fx, /* o : voicing factors */ Word16 *gain_buf /* o : floating pitch gain for each subframe Q14 */ ); -#endif // rst_dec_fx.c void CNG_reset_dec_fx( @@ -8357,7 +8284,6 @@ void sc_vbr_dec_init( ); // ppp_dec_fx.c -#ifdef IVAS_FLOAT_FIXED ivas_error ppp_quarter_decoder_fx( DTFS_STRUCTURE *CURRCW_Q_DTFS_FX, /* i/o: Current CW DTFS */ Word16 prevCW_lag_fx, /* i : Previous lag */ @@ -8369,7 +8295,6 @@ ivas_error ppp_quarter_decoder_fx( Word16 *C_fx, /* i : cosine table, Q15 */ DTFS_STRUCTURE PREV_CW_D_FX, /* i : Previous DTFS */ Decoder_State *st_fx ); -#endif // core_dec_init_fx.c void open_decoder_LPD_fx( @@ -8388,7 +8313,6 @@ void open_decoder_LPD_fx( const Word16 is_init /* i : indicate call from init_decoder() to avoid double TC initialization */ #endif ); -#ifdef IVAS_FLOAT_FIXED void open_decoder_LPD_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word32 total_brate, /* i : total bitrate Q0*/ @@ -8405,7 +8329,6 @@ void open_decoder_LPD_ivas_fx( Word16 *Q_old_out, Word16 *Q_old_outLB, Word16 *Q_old_Aq_12_8 ); -#endif // IVAS_FLOAT_FIXED void reset_tcx_overl_buf_fx( TCX_DEC_HANDLE hTcxDec /* i/o: TCX decoder handle */ @@ -8451,7 +8374,6 @@ void swb_hr_noise_fill_fx( Word16 *t_audio, /* i/o: mdct spectrum Q_audio */ Word16 Q_audio ); -#ifdef IVAS_FLOAT_FIXED // stat_noise_uv_dec_fx.c void stat_noise_uv_dec_fx( Decoder_State *st_fx, /* i/o: Decoder static memory */ @@ -8461,7 +8383,6 @@ void stat_noise_uv_dec_fx( Word16 *exc2, /* i/o: excitation buffer, Q = st_fx->Q_exc */ const Word16 uc_two_stage_flag /* i : flag indicating two-stage UC */ ); -#endif // stat_noise_uv_mod_fx.c void stat_noise_uv_mod_fx( @@ -8708,7 +8629,6 @@ void swb_bwe_dec_lr_fx( Word16 *ni_seed_fx /* i/o: random seed : QsL */ ); -#ifdef IVAS_FLOAT_FIXED // dec_acelp_tck_main_fx.c Word16 dec_acelp_tcx_frame_fx( Decoder_State *st, /* i/o: decoder state structure */ @@ -8724,7 +8644,6 @@ Word16 dec_acelp_tcx_frame_fx( STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ #endif ); -#endif // dec_LPD_fx.c void decoder_LPD_fx( @@ -8749,7 +8668,6 @@ void mode_switch_decoder_LPD_fx( Word16 frame_size_index /* Q0 */ ); -#ifdef IVAS_FLOAT_FIXED void mode_switch_decoder_LPD_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 bwidth, /* i : audio bandwidth Q0*/ @@ -8766,7 +8684,6 @@ void mode_switch_decoder_LPD_ivas_fx( Word16 *Q_old_out, Word16 *Q_old_outLB, Word16 *Q_old_Aq_12_8 ); -#endif // IVAS_FLOAT_FIXED // ari_hm_dec.c @@ -9097,7 +9014,6 @@ void IGFDecSetMode( const Word16 defaultStopLine, /* i : default stop subband index */ const Word16 rf_mode /* i : flag to signal the RF mode */ ); -#ifdef IVAS_FLOAT_FIXED void IGFDecSetMode_ivas_fx( const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i : instance handle of IGF Decoder */ const Word32 total_brate, /* i : bitrate */ @@ -9107,7 +9023,6 @@ void IGFDecSetMode_ivas_fx( const Word16 defaultStopLine, /* i : default stop subband index */ const Word16 rf_mode /* i : flag to signal the RF mode */ ); -#endif // IVAS_FLOAT_FIXED void IGFDecUpdateInfo( const IGF_DEC_INSTANCE_HANDLE hInstance, /**< in: | instance handle of IGF Decoder */ const Word16 igfGridIdx /**< in: | IGF grid index */ @@ -9260,7 +9175,6 @@ void reconfig_decoder_LPD_fx( Word32 total_brate, /* i : total bitrate Q0*/ Word16 L_frame_old /* i : frame length Q0*/ ); -#ifdef IVAS_FLOAT_FIXED void reconfig_decoder_LPD_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 bits_frame, /* i : bit budget Q0*/ @@ -9268,7 +9182,6 @@ void reconfig_decoder_LPD_ivas_fx( const Word32 total_brate, /* i : total bitrate Q0*/ const Word16 L_frame_old /* i : frame length Q0*/ ); -#endif // IVAS_FLOAT_FIXED // er_utils_fx.c void minimumStatistics_fx( Word16 *noiseLevelMemory, /* Q15, internal state */ @@ -9528,7 +9441,6 @@ void con_acelp_fx( Word16 *voice_factors, Word16 *bwe_exc ); -#ifdef IVAS_FLOAT_FIXED // dec_ace_fx.c void decoder_acelp_fx( Decoder_State *st, @@ -9544,10 +9456,8 @@ void decoder_acelp_fx( const Word16 LSF_Q_prediction, /* i : LSF prediction mode */ Word16 *bwe_exc /* out: excitation for SWB TBE */ ); -#endif // d_gain2p.c -#ifdef IVAS_FLOAT_FIXED void decode_acelp_gains_fx( Word16 *code, Word16 gains_mode, @@ -9561,7 +9471,6 @@ void decode_acelp_gains_fx( Word16 L_subfr, Word16 *code2, Word32 *gain_code2 ); -#endif void d_gain_pred_fx( Word16 nrg_mode, /* i : NRG mode */ @@ -9695,7 +9604,6 @@ void configureCldfb_ivas_fx( HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i/o: filter bank handle */ const Word32 sampling_rate /* i : sampling rate */ ); -#ifdef IVAS_FLOAT_FIXED // dec4t64.c void dec_acelp_fast_fx( Decoder_State *st, /* i/o: decoder state structure */ @@ -9703,7 +9611,6 @@ void dec_acelp_fast_fx( Word16 code[], /* o : algebraic (fixed) codebook excitation */ const int16_t L_subfr /* i : subframe length */ ); -#endif // codec_tcx_common.c void tcx5SpectrumInterleaving_fx( const Word16 tcx5Size, @@ -10225,7 +10132,6 @@ void Vr_subt( Word16 N /* i : Vector lenght */ ); -#ifdef IVAS_FLOAT_FIXED Word16 vquant_ivas_fx( /* o: index of the winning codevector */ Word32 x[], /* i: vector to quantize Q25 */ const Word32 x_mean[], /* i: vector mean to subtract (0 if none) Q25 */ @@ -10234,7 +10140,6 @@ Word16 vquant_ivas_fx( /* o: index of the winning codevec const Word16 dim, /* i: dimension of codebook vectors */ const Word16 cbsize /* i: codebook size */ ); -#endif Word16 vquant_fx( /* o: index of the winning codevector */ Word16 x[], /* i: vector to quantize Q13 */ @@ -10717,7 +10622,7 @@ ivas_error core_switching_pre_dec_ivas_fx( Word16 *Q_olapBufferSynth, Word16 *Q_olapBufferSynth2 ); -void hp20_fix32( +void hp20_fx_32( Word32 signal_fx[], const Word16 lg, Word32 mem_fx[], @@ -10864,7 +10769,6 @@ Word32 sum2_32_fx( const Word32 *vec, /* i : input vector */ const Word16 lvec, /* i : length of input vector */ Word16 *e ); -#ifdef IVAS_FLOAT_FIXED void ProcessStereoIGF_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ @@ -10937,11 +10841,9 @@ void IGFEncConcatenateBitstream( const Word16 bsBits, /* i : number of IGF bits written to list of indices */ BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ ); -#endif // IVAS_FLOAT_FIXED #endif -#ifdef IVAS_FLOAT_FIXED void hq_generic_hf_encoding_fx( const Word32 *coefs_fx, /* i : MDCT coefficients of weighted original */ Word16 *hq_generic_fenv_fx, /* i/o: energy of SWB envelope */ @@ -11192,4 +11094,28 @@ void core_switching_post_enc_ivas_fx( Word16 A_fx[], /* i : unquant. LP filter coefs. */ Word16 Q_new ); -#endif + +void residu_ivas_fx( + const Word16 *a, /* i : LP filter coefficients Q31-a_exp*/ + const Word16 a_exp, + const Word16 m, /* i : order of LP filter */ + const Word32 *x, /* i : input signal (usually speech) Qx*/ + Word32 *y, /* o : output signal (usually residual) Qx*/ + const Word16 l /* i : size of filtering */ +); + +void WriteToBitstream_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, + const Word16 **pStream, + Word16 *pnSize, + BSTR_ENC_HANDLE hBstr, + Word16 *pnBits ); + +void WriteToBitstream_ivas_fx( + ParamsBitMap const *paramsBitMap, + const Word16 nArrayLength, + const Word16 **pStream, + Word16 *pnSize, + BSTR_ENC_HANDLE hBstr, + Word16 *pnBits ); diff --git a/lib_com/pvq_com.c b/lib_com/pvq_com.c deleted file mode 100644 index ade4b4616..000000000 --- a/lib_com/pvq_com.c +++ /dev/null @@ -1,974 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "stl.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * Local definitions - *-------------------------------------------------------------------*/ - -/*! r: Approximate integer division for negative input */ -int16_t shrtCDivSignedApprox_flt( - const int16_t num, /* i : numerator */ - const int16_t den /* i : denominator */ -) -{ - Word16 pool_part; - pool_part = extract_h( L_mult( negate( abs_s( num ) ), lim_neg_inv_tbl_fx[den] ) ); - /* neg_in always, positive out always, so that positive truncation(rounding) towards zero is used */ - if ( num < 0 ) - { - pool_part = negate( pool_part ); /* make negative, one op */ - } - - return pool_part; -} - -/*! r: Approximate integer division for positive input using lookup table */ -int32_t intLimCDivPos( - const int32_t NUM, /* i : numerator */ - const int16_t DEN /* i : denominator */ -) -{ - int32_t result; - - result = (int32_t) ( ( (uint64_t) ( NUM << 1 ) * intLimCDivInvDQ31[DEN] ) >> 32 ); - - return result; -} - -/*! r: Approximate integer division for signed input using lookup table */ -static int32_t intLimCDivSigned( - const int32_t NUM, /* i : numerator */ - const int16_t DEN /* i : denominator */ -) -{ - int32_t result; - int32_t tmp_num; - - tmp_num = max( NUM, -NUM ); - result = (int32_t) sign( (float) NUM ) * (int32_t) ( ( (uint64_t) ( tmp_num << 1 ) * intLimCDivInvDQ31[DEN] ) >> 32 ); - - return result; -} - -static void nearProjQ15( - const int16_t x, /* i : input coefficient */ - int16_t *result /* o : projection */ -) -{ - int16_t NearProjC[4] = { 14967, -25518, 3415, 32351 }; - int32_t P12, P3; - - P12 = ( (int32_t) x * (int32_t) NearProjC[0] >> 16 ) + (int32_t) NearProjC[1]; - P3 = ( (int32_t) x * P12 >> 14 ) + (int32_t) NearProjC[2]; - *result = (int16_t) ( ( (int16_t) x * P3 >> 15 ) + (int32_t) NearProjC[3] ); - - return; -} - - -void obtainEnergyQuantizerDensity( - const int16_t L_in, /* i : left vector energy */ - const int16_t R_in, /* i : right vector energy */ - int16_t *Density /* o : quantizer density */ -) -{ - int32_t Rnrg; - int16_t den; - int16_t L, R; - - L = L_in; - R = R_in; - den = ( 2 * L - 1 ); - if ( den <= 67 ) - { - Rnrg = (int32_t) ( ( (uint64_t) ( (int32_t) R << 1 ) * intLimCDivInvDQ31[den] ) >> 32 ); - } - else - { - Rnrg = ( R / den ); - } - Rnrg += 28; - - if ( ( R - 96 < 56 ) && ( R - 96 < Rnrg ) ) - { - Rnrg = R - 96; - } - else if ( 56 < Rnrg ) - { - Rnrg = 56; - } - - Rnrg = max( 0, Rnrg ); /* _f table set to 1 for low Rnrg */ - *Density = (int16_t) obtainEnergyQuantizerDensity_f[Rnrg]; - - return; -} - - -static void dsDirac2Dirac( - const int16_t dsDiracIndex, /* i : input index */ - int16_t *diracs /* o : number of diracs */ -) -{ - int16_t dsHighIndex; - - dsHighIndex = dsDiracIndex - DS_INDEX_LINEAR_END - 1; - *diracs = dsDiracIndex; - if ( dsDiracIndex > DS_INDEX_LINEAR_END ) - { - *diracs = dsHighDiracsTab[dsHighIndex]; - } - - return; -} - - -static void dsDiracPerQuanta( - const int16_t td, /* i : Length of vector segment */ - const int16_t t_quanta, /* i : Assigned number of quanta */ - const int16_t dsm, /* i : Conservative rounding flag */ - const uint8_t *const *frQuanta, /* i : Quanta lookup table */ - int16_t *DsIdx /* o : Lookup table index */ -) -{ - const uint8_t *sv; - int16_t nsv; - int16_t t_quanta_o; - int16_t dsIndex; - int16_t i; - - sv = frQuanta[td]; - nsv = sv[0]; - - t_quanta_o = t_quanta - QUANTAQ3OFFSET; - if ( t_quanta_o >= sv[nsv] ) - { - *DsIdx = nsv; - return; - } - if ( t_quanta_o <= sv[1] ) - { - *DsIdx = 1; - return; - } - dsIndex = 1 << frQuanta[0][td]; - if ( t_quanta_o > sv[nsv >> 1] ) - { - dsIndex = nsv - dsIndex; /*single op*/ - } - for ( i = frQuanta[0][td] - 1; i >= 0; i-- ) - { - dsIndex += shl( sub( shl( lshr( sub( sv[dsIndex], t_quanta_o ), 15 ), 1 ), 1 ), i ); - } - dsIndex += ( t_quanta_o > sv[dsIndex] ); - dsIndex -= ( dsIndex > 1 ); - - if ( dsm == PVQ_CONS ) - { - *DsIdx = dsIndex; - return; - } - *DsIdx = dsIndex + ( ( sv[dsIndex + 1] + sv[dsIndex] ) < ( t_quanta_o << 1 ) ); - - return; -} - - -void QuantaPerDsDirac( - const int16_t td, /* i : Length of vector segment */ - const int16_t dsDiracIndex, /* i : Quanta table index */ - const uint8_t *const *dimFrQuanta, /* i : Quanta lookup table */ - int16_t *Quanta /* i : Quanta */ -) -{ - if ( !dsDiracIndex ) - { - *Quanta = 0; - return; - } - *Quanta = ( (int16_t) dimFrQuanta[td][dsDiracIndex] ) + QUANTAQ3OFFSET; - - return; -} - - -void conservativeL1Norm( - const int16_t L, /* i : Length of vector segment */ - const int16_t Qvec, /* i : Assigned number of quanta */ - const int16_t Fcons, /* i : Conservative rounding flag */ - const int16_t Qavail, /* i : Input quanta remaining */ - const int16_t Qreserv, /* i : Input quanta in reservoir */ - const int16_t Dspec, /* i : assigned diracs from bitalloc */ - int16_t *Dvec, /* o : actual number of diracs */ - int16_t *Qspare, /* o : Output quanta remaining */ - int16_t *Qreservplus, /* o : Output quanta in reservoir */ - int16_t *Dspecplus /* o : Output number of diracs */ -) -{ - int16_t Minit, Mprime; - int16_t Qtestminus; - const uint8_t *frQuantaL; - - frQuantaL = hBitsN[L]; - - *Qreservplus = Qreserv + Qvec - QUANTAQ3OFFSET; - - dsDiracPerQuanta( L, Qvec, Fcons, hBitsN, &Minit ); - Mprime = Minit; - do - { - Qtestminus = frQuantaL[Mprime]; - *Qspare = Qavail - Qtestminus; - Mprime = Mprime - 1; - } while ( Mprime >= 0 && *Qspare < QUANTAQ3OFFSET ); - - if ( Mprime < 0 ) - { - *Qspare = Qavail + QUANTAQ3OFFSET; - } - - dsDirac2Dirac( Mprime + 1, Dvec ); - - *Dspecplus = Dspec + *Dvec; - - *Qreservplus -= frQuantaL[Minit]; - - *Qspare -= QUANTAQ3OFFSET; - - return; -} - -void bandBitsAdjustment( - const int16_t Brc, /* i : Current number of read quanta in range coder */ - const uint32_t INTrc, /* i : Range coder state */ - const int16_t Bavail, /* i : Available number of quanta */ - const int16_t Nbands, /* i : Number of bands */ - const int16_t D, /* i : Remaining number of bands to encode */ - const int16_t L, /* i : Size of current band */ - const int16_t Bband, /* i : Quanta allocation for current band */ - const int16_t Breserv, /* i : Quanta reservoir */ - int16_t *Bband_adj, /* o : Actual used number of quanta */ - int16_t *Brem, /* o : Quanta remaining */ - int16_t *Breservplus /* o : Quanta pool size */ -) -{ - int16_t Btemp; - int16_t Bff; - int16_t Dtmp, tmp_short1, tmp_short2; - - rangeCoderFinalizationFBits( Brc, INTrc, &Bff ); - - if ( D < Nbands ) - { - Dtmp = min( D, 3 ); /* avoid branch cost */ - Btemp = (int16_t) intLimCDivSigned( Breserv - Bff, Dtmp ); /* result always fits in Word16 */ - - *Breservplus = Bband + Breserv; - } - else - { - Btemp = 0; - *Breservplus = Bband + Bff; - } - - *Bband_adj = Bband; - tmp_short1 = L * 80; - if ( tmp_short1 < Bband ) - { - *Bband_adj = tmp_short1; - } - - tmp_short1 = Bavail - Bff; - tmp_short2 = *Bband_adj + Btemp; - - *Bband_adj = tmp_short2; - if ( tmp_short1 < tmp_short2 ) - { - *Bband_adj = tmp_short1; - } - if ( *Bband_adj < 0 ) - { - *Bband_adj = 0; - } - *Brem = Bavail - Bff; - - return; -} - - -/*-------------------------------------------------------------------* - * local_norm_s() - * - * - *-------------------------------------------------------------------*/ - -/*! r: n shifts needed to normalize */ -static int16_t local_norm_s( - int16_t short_var /* i/o: signed 16 bit variable / normalized value */ -) -{ - int16_t short_res; - - if ( short_var == -1 ) - { - return ( 16 - 1 ); - } - else - { - if ( short_var == 0 ) - { - return 0; - } - - else - { - if ( short_var < 0 ) - { - short_var = ~short_var; - } - - for ( short_res = 0; short_var < 0x4000; short_res++ ) - { - short_var <<= 1; - } - } - } - - return ( short_res ); -} - -/*! r: ratio Q11 */ -static int16_t Ratio_base2Q11( - const int16_t opp, /* i : opposite Q15 */ - const int16_t near /* i : near Q15 */ -) -{ - Word16 mc, nc, ms, ns, d, z; - Word16 result; - Word32 acc; - - ns = local_norm_s( opp ); /* exponent*/ - nc = local_norm_s( near ); /* exponent */ - - ms = opp << ns; /* mantissa */ - mc = near << nc; /* mantissa */ - - acc = L_mac( 538500224L, mc, -2776 ); /* a0*mc + a1, acc(Q27), a0(Q11), a1(Q27)*/ - z = mac_r( acc, ms, -2776 ); /* z in Q11, a0 in Q11 */ - d = sub( ms, mc ); /* d in Q15 */ - z = mult_r( z, d ); /* z in Q11 */ - - result = add( z, shl( sub( nc, ns ), 11 ) ); - - return result; -} - - -static void Ratio_rQ3( - int16_t opp, /* i : opposite */ - int16_t near, /* i : near */ - int16_t *result /* o : ratio */ -) -{ - int16_t tmp = 128; - - tmp += Ratio_base2Q11( opp, near ); - *result = ( tmp >> 8 ); - - return; -} - - -void densityAngle2RmsProjDec( - const int16_t D, /* i : density */ - const int16_t indexphi, /* i : decoded index from AR dec */ - int16_t *oppQ15, /* o : opposite */ - int16_t *nearQ15, /* o : near */ - int16_t *oppRatioQ3 /* o : ratio */ -) -{ - int16_t phiQ14q; - int32_t L_2xPhiQ14q; - int16_t oppTail, nearTail; - - phiQ14q = (int16_t) intLimCDivPos( abs( indexphi ) << 13, D >> 1 ); - if ( ( 0xFFFe & D ) == 0 ) /* even -> positive, odd -> 0 */ - { - phiQ14q = 1 << 13; /* one op */ - } - -#define C_TOP ( ( 1 << 14 ) - ( 1 << 6 ) ) -#define C_BOT ( 1 << 6 ) -#define C_SHRT_MAXABS ( 1L << 15 ) -#define C_SHRT_MAX_POS ( ( 1 << 15 ) - 1 ) -#define C_Q14_MAX ( 1 << 14 ) - - oppTail = phiQ14q >= C_TOP; - nearTail = phiQ14q < C_BOT; - if ( !( oppTail || nearTail ) ) - { - L_2xPhiQ14q = 2 * (int32_t) phiQ14q; - nearProjQ15( (int16_t) ( C_SHRT_MAXABS - L_2xPhiQ14q ), oppQ15 ); - nearProjQ15( phiQ14q << 1, nearQ15 ); - Ratio_rQ3( *oppQ15, *nearQ15, oppRatioQ3 ); - } - else - { - *oppRatioQ3 = ( 1 - 2 * nearTail ) * C_Q14_MAX; - *oppQ15 = oppTail * C_SHRT_MAX_POS; - *nearQ15 = nearTail * C_SHRT_MAX_POS; - } - -#undef C_TOP -#undef C_BOT -#undef C_SHRT_MAXABS -#undef C_SHRT_MAX_POS -#undef C_Q14_MAX - - return; -} - - -void densityAngle2RmsProjEnc( - const int16_t D, /* i : density */ - const int16_t phiQ14uq, /* i : angle */ - int16_t *indexphi, /* o : index */ - int16_t *oppQ15, /* o : opposite */ - int16_t *nearQ15, /* o : near */ - int16_t *oppRatioQ3 /* o : ratio */ -) -{ -#define C_MAX13 ( 1L << 13 ) - *indexphi = ( D * phiQ14uq + C_MAX13 ) >> 14; -#undef C_MAX13 - - if ( ( 0xFFFE & D ) == 0 ) - { - *indexphi = -1; /* one op */ - } - densityAngle2RmsProjDec( D, *indexphi, oppQ15, nearQ15, oppRatioQ3 ); - - return; -} - -void NearOppSplitAdjustment( - const int16_t qband, /* i : quanta for current band */ - const int16_t qzero, /* i : range coder finalization quanta */ - const int16_t Qac, /* i : range coder current quanta */ - const uint32_t INTac, /* i : range coder state */ - const int16_t qglobal, /* i : quanta input */ - const int16_t FlagCons, /* i : conservative rounding flag */ - const int16_t Np, /* i : number of parts */ - const int16_t Nhead, /* i : first part */ - const int16_t Ntail, /* i : remaining parts */ - const int16_t Nnear, /* i : length of near component */ - const int16_t Nopp, /* i : length of opposite component */ - int16_t oppRQ3, /* i : ratio */ - int16_t *qnear, /* o : quantized near */ - int16_t *qopp, /* o : quantized opposite */ - int16_t *qglobalupd /* o : quanta remaining */ -) -{ - int16_t qac, qskew, qboth, QIa, QIb; - int32_t L_QIb, qnum; - int16_t qmin, qavg, Midx; - - rangeCoderFinalizationFBits( Qac, INTac, &qac ); - qboth = qband - ( qac - qzero ); - qskew = 0; /* skew calc code */ - if ( Nhead > 1 ) - { - qavg = (int16_t) intLimCDivSigned( qboth, Np ); - dsDiracPerQuanta( Ntail, qavg, FlagCons, hBitsN, &Midx ); - QuantaPerDsDirac( Nhead, Midx, hBitsN, &qmin ); - - qskew = qavg - qmin; - qskew = max( 0, qskew ); - } /* end of skew calc code*/ - - QIa = (int16_t) intLimCDivPos( Nopp, Nnear ) + 1; /* always positive Word16 out */ - qnum = qband + qzero - qac - qskew - Nopp * (int32_t) oppRQ3; - L_QIb = 0; - if ( qnum > 0 ) - { - L_QIb = intLimCDivPos( qnum, QIa ); - } - QIb = (int16_t) min( 32767L, L_QIb ); /* saturate, L_QIb >= 0 */ - *qnear = QIb; - if ( QIb > qboth ) - { - *qnear = qboth; /*single op*/ - } - *qopp = qboth - *qnear; - *qglobalupd = qglobal - ( qac - qzero ); - - return; -} - -/*--------------------------------------------------------------------------* - * apply_gain() - * - * Apply gain - *--------------------------------------------------------------------------*/ - -void apply_gain( - const int16_t *ord, /* i : Indices for energy order */ - const int16_t *band_start, /* i : Sub band start indices */ - const int16_t *band_end, /* i : Sub band end indices */ - const int16_t num_sfm, /* i : Number of bands */ - const float *gains, /* i : Band gain vector */ - float *xq /* i/o: float synthesis / gain adjusted synth */ -) -{ - int16_t band, i; - float g; - - for ( band = 0; band < num_sfm; band++ ) - { - g = gains[ord[band]]; - - for ( i = band_start[band]; i < band_end[band]; i++ ) - { - xq[i] *= g; - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * fine_gain_quant() - * - * Fine gain quantization - *--------------------------------------------------------------------------*/ - -void fine_gain_quant( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t *ord, /* i : Indices for energy order */ - const int16_t num_sfm, /* i : Number of bands */ - const int16_t *gain_bits, /* i : Gain adjustment bits per sub band */ - float *fg_pred, /* i/o: Predicted gains / Corrected gains */ - const float *gopt /* i : Optimal gains */ -) -{ - int16_t band; - int16_t gbits; - int16_t idx; - float gain_db, gain_dbq; - float err; - - for ( band = 0; band < num_sfm; band++ ) - { - gbits = gain_bits[ord[band]]; - if ( fg_pred[band] != 0 && gbits > 0 ) - { - err = gopt[band] / fg_pred[band]; - gain_db = 20.0f * (float) log10( err ); - idx = (int16_t) squant( gain_db, &gain_dbq, finegain[gbits - 1], gain_cb_size[gbits - 1] ); - push_indice( hBstr, IND_PVQ_FINE_GAIN, idx, gbits ); - - /* Update prediced gain with quantized correction */ - fg_pred[band] *= (float) pow( 10, gain_dbq * 0.05f ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * srt_vec_ind() - * - * sort vector and save sorting indices - *-------------------------------------------------------------------*/ - -void srt_vec_ind( - const int16_t *linear, /* i : linear input */ - int16_t *srt, /* o : sorted output */ - int16_t *I, /* o : index for sorted output */ - const int16_t length /* i : length of vector */ -) -{ - float linear_f[MAX_SRT_LEN]; - float srt_f[MAX_SRT_LEN]; - - mvs2r( linear, linear_f, length ); - srt_vec_ind_f( linear_f, srt_f, I, length ); - mvr2s( srt_f, srt, length ); - - return; -} - -/*-------------------------------------------------------------------* - * srt_vec_ind_f() - * - * sort vector and save sorting indices, using float input values - *-------------------------------------------------------------------*/ - -void srt_vec_ind_f( - const float *linear, /* i : linear input */ - float *srt, /* o : sorted output */ - int16_t *I, /* o : index for sorted output */ - const int16_t length /* i : length of vector */ -) -{ - int16_t pos, npos; - int16_t idxMem; - float valMem; - - /*initialize */ - for ( pos = 0; pos < length; pos++ ) - { - I[pos] = pos; - } - - mvr2r( linear, srt, length ); - - /* now iterate */ - for ( pos = 0; pos < ( length - 1 ); pos++ ) - { - for ( npos = ( pos + 1 ); npos < length; npos++ ) - { - if ( srt[npos] < srt[pos] ) - { - idxMem = I[pos]; - I[pos] = I[npos]; - I[npos] = idxMem; - - valMem = srt[pos]; - srt[pos] = srt[npos]; - srt[npos] = valMem; - } - } - } - - return; -} - -#define WMC_TOOL_SKIP - -/*-------------------------------------------------------------------* - * UMult_32_32() - * - * - *-------------------------------------------------------------------*/ - -/*! r: Multiplication result */ -uint32_t UMult_32_32( - const uint32_t UL_var1, /* i : factor 1 */ - const uint32_t UL_var2 /* i : factor 2 */ -) -{ - uint64_t tmp; - - tmp = (uint64_t) UL_var1 * (uint64_t) UL_var2; - - return (uint32_t) ( tmp >> 32 ); -} - -/*-------------------------------------------------------------------* - * UL_div() - * - * Calculate UL_num/UL_den. UL_num assumed to be Q31, UL_den assumed - * to be Q32, then result is in Q32. - *-------------------------------------------------------------------*/ - -/*! r: Division result */ -static uint32_t UL_div( - const uint32_t UL_num, /* i : numerator */ - const uint32_t UL_den /* i : denominator */ -) -{ - uint32_t UL_e, UL_Q; - uint32_t UL_msb; - int16_t i; - - UL_e = 0xffffffff - UL_den; - UL_Q = UL_num; - - for ( i = 0; i < 5; i++ ) - { - UL_msb = UMult_32_32( UL_Q, UL_e ); - UL_Q = UL_Q + UL_msb; - UL_e = UMult_32_32( UL_e, UL_e ); - } - - return UL_Q; -} - - -/*-------------------------------------------------------------------* - * UL_inverse_float() - * - * Calculate inverse of UL_val. Output in Q_exp. - *-------------------------------------------------------------------*/ - -/*! r: inverse */ -uint32_t UL_inverse_float( - const uint32_t UL_val, /* i : input value Q_exp */ - int16_t *exp /* i/o: input exp / result exp */ -) -{ - uint32_t UL_tmp; - - *exp = norm_ul_float( UL_val ); /* aligned to BASOP */ - UL_tmp = UL_val << ( *exp ); /* Q32*/ - - *exp = 32 + 31 - *exp; - - return UL_div( 0x80000000, UL_tmp ); -} - -/*----------------------------------------------------------------------------- - * ratio() - * - * Divide the numerator by the denominator. - *----------------------------------------------------------------------------*/ - -/*! r: ratio */ -Word16 ratio_float( - const Word32 numer, /* i : numerator */ - const Word32 denom, /* i : denominator */ - Word16 *expo /* i/o: input exp / result exp */ -) -{ - Word16 expNumer, expDenom; - Word16 manNumer, manDenom; - Word16 quotient; - - expDenom = norm_l( denom ); /* exponent */ - manDenom = extract_h( L_shl( denom, expDenom ) ); /* mantissa */ - expNumer = norm_l( numer ); /* exponent */ - manNumer = extract_h( L_shl( numer, expNumer ) ); /* mantissa */ - manNumer = shr( manNumer, 1 ); /* Ensure the numerator < the denominator */ - quotient = div_s( manNumer, manDenom ); /* in Q14 */ - - *expo = sub( expNumer, expDenom ); - - return quotient; /* Q14 */ -} - -/*----------------------------------------------------------------------------- - * atan2_fx_flt(): - * - * Approximates arctan piecewise with various 4th to 5th order least square fit - * polynomials for input in 5 segments: - * - 0.0 to 1.0 - * - 1.0 to 2.0 - * - 2.0 to 4.0 - * - 4.0 to 8.0 - * - 8.0 to infinity - *---------------------------------------------------------------------------*/ - -/*! r: Angle between 0 and EVS_PI/2 radian (Q14) */ -Word16 atan2_fx_flt( - const Word32 y, /* i : near side (Argument must be positive) (Q15) */ - const Word32 x /* i : opposite side (Q15) */ -) -{ - Word32 acc, arg; - Word16 man, expo, reciprocal; - Word16 angle, w, z; - - IF( L_sub( x, 0 ) == 0 ) - { - return 25736; /* EVS_PI/2 in Q14 */ - } - man = ratio_float( y, x, &expo ); /* man in Q14 */ - expo = sub( expo, ( 15 - 14 ) ); /* Now, man is considered in Q15 */ - arg = L_shr( (Word32) man, expo ); - - IF( L_shr( arg, 3 + 15 ) != 0 ) - /*===============================* - * 8.0 <= x < infinity * - *===============================*/ - { - /* atan(x) = EVS_PI/2 - 1/x + 1/(3x^3) - 1/(5x^5) + ... - * ~ EVS_PI/2 - 1/x, for x >= 8. - */ - expo = norm_l( arg ); - man = extract_h( L_shl( arg, expo ) ); - reciprocal = div_s( 0x3fff, man ); - expo = sub( 15 + 1, expo ); - reciprocal = shr( reciprocal, expo ); /* Q14*/ - angle = sub( 25736, reciprocal ); /* Q14 (EVS_PI/2 - 1/x) */ - - /* For 8.0 <= x < 10.0, 1/(5x^5) is not completely negligible. - * For more accurate result, add very small correction term. - */ - IF( L_sub( L_shr( arg, 15 ), 10L ) < 0 ) - { - angle = add( angle, 8 ); /* Add tiny correction term. */ - } - } - ELSE IF( L_shr( arg, 2 + 15 ) != 0 ) - /*==========================* - * 4.0 <= x < 8.0 * - *==========================*/ - { - /* interval: [3.999, 8.001] - * atan(x) ~ (((a0*x + a1)*x + a2)*x + a3)*x + a4 - * = (((a0*8*y + a1)*8*y + a2)*8*y + a3)*8*y + a4 Substitute 8*y -> x - * = (((a0*8^3*y + a1*8^2)*y + a2*8)*y + a3)*8*y + a4 - * = ((( c0*y + c1)*y + c2)*y + c3)*8*y + c4, - * where y = x/8 - * and a0 = -1.28820869667651e-04, a1 = 3.88263533346295e-03, - * a2 = -4.64216306484597e-02, a3 = 2.75986060068931e-01, - * a4 = 7.49208077809799e-01. - */ - w = extract_l( L_shr( arg, 3 ) ); /* Q15 y = x/8 */ - acc = 533625337L; /* Q31 c1 = a1*8^2 */ - move32(); - z = mac_r( acc, w, -2161 ); /* Q15 c0 = a0*8^3 */ - acc = -797517542L; /* Q31 c2 = a2*8 */ - move32(); - z = mac_r( acc, w, z ); /* Q15 */ - acc = 592675551L; /* Q31 c3 = a3 */ - move32(); - z = mac_r( acc, w, z ); /* z (in:Q15, out:Q12) */ - acc = 201114012L; /* Q28 c4 = a4 */ - move32(); - acc = L_mac( acc, w, z ); /* Q28 */ - angle = extract_l( L_shr( acc, ( 28 - 14 ) ) ); /* Q14 result of atan(x), where 4 <= x < 8 */ - } - ELSE IF( L_shr( arg, 1 + 15 ) != 0 ) - /*==========================* - * 2.0 <= x < 4.0 * - *==========================*/ - { - /* interval: [1.999, 4.001] - * atan(x) ~ (((a0*x + a1)*x + a2)*x + a3)*x + a4 - * = (((a0*4*y + a1)*4*y + a2)*4*y + a3)*4*y + a4 Substitute 4*y -> x - * = (((a0*16*y + a1*4)*y + a2)*4*y + a3)*4*y + a4 - * = (((a0*32*y + a1*8)*y + a2*2)*2*y + a3)*4*y + a4 - * = ((( c0*y + c1)*y + c2)*2*y + c3)*4*y + c4, - * where y = x/4 - * and a0 = -0.00262378195660943, a1 = 0.04089687039888652, - * a2 = -0.25631148958325911, a3 = 0.81685854627399479, - * a4 = 0.21358070563097167 - * */ - w = extract_l( L_shr( arg, 2 ) ); /* Q15 y = x/4 */ - acc = 702602883L; /* Q31 c1 = a1*8 */ - move32(); - z = mac_r( acc, w, -2751 ); /* Q15 c0 = a0*32 */ - acc = -1100849465L; /* Q31 c2 = a2*2 */ - move32(); - z = mac_r( acc, w, z ); /* z (in:Q15, out:Q14) */ - acc = 877095185L; /* Q30 c3 = a3 */ - move32(); - z = mac_r( acc, w, z ); /* z (in:Q14, out:Q12) */ - acc = 57332634L; /* Q28 c4 = a4 */ - move32(); - acc = L_mac( acc, w, z ); /* Q28 */ - angle = extract_l( L_shr( acc, ( 28 - 14 ) ) ); /* Q14 result of atan(x) where 2 <= x < 4 */ - } - ELSE IF( L_shr( arg, 15 ) != 0 ) - /*==========================* - * 1.0 <= x < 2.0 * - *==========================*/ - { - /* interval: [0.999, 2.001] - * atan(x) ~ (((a0*x + 1)*x + a2)*x + a3)*x + a4 - * = (((a0*2*y + a1)*2*y + a2)*2*y + a3)*2*y + a4 Substitute 2*y -> x - * = (((a0*4*y + a1*2)*y + a2)*2*y + a3)*2*y + a4 - * = (((a0*4*y + a1*2)*y + a2)*y + a3/2)*4*y + a4 - * = ((( c0*y + c1)*y + c2)*y + c3)*4*y + c4, - * where y = x/2 - * and a0 = -0.0160706457245251, a1 = 0.1527106504065224, - * a2 = -0.6123208404800871, a3 = 1.3307896976322915, - * a4 = -0.0697089375247448 - */ - w = extract_l( L_shr( arg, 1 ) ); /* Q15 y= x/2 */ - acc = 655887249L; /* Q31 c1 = a1*2 */ - move32(); - z = mac_r( acc, w, -2106 ); /* Q15 c0 = a0*4 */ - acc = -1314948992L; /* Q31 c2 = a2 */ - move32(); - z = mac_r( acc, w, z ); - acc = 1428924557L; /* Q31 c3 = a3/2 */ - move32(); - z = mac_r( acc, w, z ); /* z (in:Q15, out:Q13) */ - acc = -37424701L; /* Q29 c4 = a4 */ - move32(); - acc = L_mac( acc, w, z ); /* Q29 */ - angle = extract_l( L_shr( acc, ( 29 - 14 ) ) ); /* Q14 result of atan(x) where 1 <= x < 2 */ - } - ELSE - /*==========================* - * 0.0 <= x < 1.0 * - *==========================*/ - { - /* interval: [-0.001, 1.001] - * atan(x) ~ ((((a0*x + a1)*x + a2)*x + a3)*x + a4)*x + a5 - * = ((((a0*2*x + a1*2)*x/2 + a2)*x + a3)*x + a4)*x + a5 - * = (((( c0*x + c1)*x/2 + c2)*x + c3)*x + c4)*x + c5 - * where - * a0 = -5.41182677118661e-02, a1 = 2.76690449232515e-01, - * a2 = -4.63358392562492e-01, a3 = 2.87188466598566e-02, - * a4 = 9.97438122814383e-01, a5 = 5.36158556179092e-05. - */ - w = extract_l( arg ); /* Q15 */ - acc = 1188376431L; /* Q31 c1 = a1*2 */ - move32(); - z = mac_r( acc, w, -3547 ); /* Q15 c0 = a0*2 */ - acc = -995054571L; /* Q31 c2 = a2 */ - move32(); - z = extract_h( L_mac0( acc, w, z ) ); /* Q15 non-fractional mode multiply */ - acc = 61673254L; /* Q31 c3 = a3 */ - move32(); - z = mac_r( acc, w, z ); - acc = 2141982059L; /* Q31 c4 = a4 */ - move32(); - z = mac_r( acc, w, z ); - acc = 115139L; /* Q31 c5 = a5 */ - move32(); - acc = L_mac( acc, w, z ); /* Q31 */ - angle = extract_l( L_shr( acc, 31 - 14 ) ); /* Q14 result of atan(x), where 0 <= x < 1 */ - } - - return angle; /* Q14 between 0 and EVS_PI/2 radian. */ -} - -#undef WMC_TOOL_SKIP diff --git a/lib_com/pvq_com_fx.c b/lib_com/pvq_com_fx.c index 0913ad5ac..48ee402ef 100644 --- a/lib_com/pvq_com_fx.c +++ b/lib_com/pvq_com_fx.c @@ -514,7 +514,6 @@ void apply_gain_fx( * * Fine gain quantization *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void fine_gain_quant_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *ord, /* i : Indices for energy order Q0 */ @@ -582,7 +581,6 @@ void fine_gain_quant_ivas_fx( return; } -#endif void fine_gain_quant_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *ord, /* i : Indices for energy order Q0 */ diff --git a/lib_com/range_com.c b/lib_com/range_com.c deleted file mode 100644 index deac6de30..000000000 --- a/lib_com/range_com.c +++ /dev/null @@ -1,109 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * rc_get_bits2() - * - * Get number of bits needed to finalize range coder - *-------------------------------------------------------------------*/ - -/*! r: Number of bits needed */ -int16_t rc_get_bits2( - const int16_t N, /* i : Number of bits currently used */ - const uint32_t range /* i : Range of range coder */ -) -{ - int16_t tmp; - tmp = N + 2 + norm_ul_float( range ); /* aligned to BASOP */ - return tmp; -} - -/*-------------------------------------------------------------------* - * rangeCoderFinalizationFBits() - * - * Fractional (Q3) bits for range coder finalization - *-------------------------------------------------------------------*/ - -void rangeCoderFinalizationFBits( - const int16_t Brc, /* i : Current number of decoded bits */ - const uint32_t INTrc, /* i : Range coder state */ - int16_t *FBits /* i : Fractional finalization bits */ -) -{ - uint32_t Bq15; - uint32_t UL_tmp; - uint16_t Bq15ui16, B, E; - int16_t k; - - B = 30 - norm_ul_float( INTrc ); /* aligned to BASOP */ - -#define RCF_INIT_SHIFTp1 ( RCF_INIT_SHIFT + 1 ) -#define RCF_FINALIZE_LIMIT ( ( 1L << 16 ) - 1 ) - *FBits = ( Brc + 32 ) * 8; - - Bq15 = 0; - k = B - RCF_INIT_SHIFT; - if ( k >= 0 ) - { - Bq15 = INTrc >> ( k ); /* single op */ - } - - E = 2; - for ( k = 1; k < 4; k++ ) - { - Bq15ui16 = (uint16_t) ( Bq15 >> ( E & 1 ) ); - UL_tmp = (uint32_t) Bq15ui16; - Bq15 = ( UL_tmp * Bq15ui16 ) >> RCF_INIT_SHIFTp1; - E = 2 * B; - if ( Bq15 > RCF_FINALIZE_LIMIT ) - { - E++; - } - B = E; - } - *FBits -= B; -#undef RCF_INIT_SHIFTp1 -#undef RCF_FINALIZE_LIMIT - - return; -} diff --git a/lib_com/re8_ppv.c b/lib_com/re8_ppv.c deleted file mode 100644 index 8e05fbead..000000000 --- a/lib_com/re8_ppv.c +++ /dev/null @@ -1,211 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "cnst.h" -#include "prot.h" -#include "wmc_auto.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void nearest_neighbor_2D8( const float x[], int16_t y[] ); - -/*--------------------------------------------------------------* - * re8_PPV() - * - * Nearest neighbor search in infinite lattice RE8 - * the algorithm is based on the definition of RE8 as - * RE8 = (2D8) U (2D8+[1,1,1,1,1,1,1,1]) - * it applies the coset decoding of Sloane and Conway - * --------------------------------------------------------------*/ - -void re8_PPV( - const float x[], /* i : point in R^8 */ - int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ -) -{ - int16_t i, y0[8], y1[8]; - float e0, e1, x1[8], tmp; - - /*--------------------------------------------------------------* - * find the nearest neighbor y0 of x in 2D8 - *--------------------------------------------------------------*/ - - nearest_neighbor_2D8( x, y0 ); - - /*--------------------------------------------------------------* - * find the nearest neighbor y1 of x in 2D8+(1,...,1) (by coset decoding) - *--------------------------------------------------------------*/ - - for ( i = 0; i < 8; i++ ) - { - x1[i] = x[i] - 1.0f; - } - - nearest_neighbor_2D8( x1, y1 ); - - for ( i = 0; i < 8; i++ ) - { - y1[i] += 1; - } - - /*--------------------------------------------------------------* - * compute e0=||x-y0||^2 and e1=||x-y1||^2 - *--------------------------------------------------------------*/ - - e0 = e1 = 0.0; - for ( i = 0; i < 8; i++ ) - { - tmp = x[i] - y0[i]; - e0 += tmp * tmp; - tmp = x[i] - y1[i]; - e1 += tmp * tmp; - } - - /*--------------------------------------------------------------* - * select best candidate y0 or y1 to minimize distortion - *--------------------------------------------------------------*/ - - if ( e0 < e1 ) - { - for ( i = 0; i < 8; i++ ) - { - y[i] = y0[i]; - } - } - else - { - for ( i = 0; i < 8; i++ ) - { - y[i] = y1[i]; - } - } - - return; -} - -/*--------------------------------------------------------------* - * nearest_neighbor_2D8() - * - * Nearest neighbor search in infinite lattice 2D8 - * algorithm: nn_2D8(x) = 2*nn_D8(x/2) - * nn_D8 = decoding of Z^8 with Wagner rule - * (see Conway and Sloane's paper in IT-82) - --------------------------------------------------------------*/ - -static void nearest_neighbor_2D8( - const float x[], /* i : point in R^8 */ - int16_t y[] /* o : point in 2D8 (8-dimensional integer vector) */ -) -{ - int16_t i, j, sum; - float s, e[8], em; - - /*--------------------------------------------------------------* - * round x into 2Z^8 i.e. compute y=(y1,...,y8) such that yi = 2[xi/2] - * where [.] is the nearest integer operator - * in the mean time, compute sum = y1+...+y8 - *--------------------------------------------------------------*/ - - sum = 0; - for ( i = 0; i < 8; i++ ) - { - /* round to ..., -2, 0, 2, ... ([-1..1[ --> 0) */ - if ( x[i] < 0 ) - { - y[i] = -2 * ( ( (int16_t) ( 1.0 - x[i] ) ) >> 1 ); - } - else - { - y[i] = 2 * ( ( (int16_t) ( 1.0 + x[i] ) ) >> 1 ); - } - sum += y[i]; - } - - /*--------------------------------------------------------------* - * check if y1+...+y8 is a multiple of 4 - * if not, y is not round xj in the wrong way where j is defined by - * j = arg max_i | xi -yi| - * (this is called the Wagner rule) - *--------------------------------------------------------------*/ - - if ( sum % 4 ) - { - /* find j = arg max_i | xi -yi| */ - em = 0; - j = 0; - for ( i = 0; i < 8; i++ ) - { - /* compute ei = xi-yi */ - e[i] = x[i] - y[i]; - } - - for ( i = 0; i < 8; i++ ) - { - /* compute |ei| = | xi-yi | */ - if ( e[i] < 0 ) - { - s = -e[i]; - } - else - { - s = e[i]; - } - /* check if |ei| is maximal, if so, set j=i */ - if ( em < s ) - { - em = s; - j = i; - } - } - - /* round xj in the "wrong way" */ - if ( e[j] < 0 ) - { - y[j] -= 2; - } - else - { - y[j] += 2; - } - } - - return; -} diff --git a/lib_com/re8_util.c b/lib_com/re8_util.c deleted file mode 100644 index ad7467a07..000000000 --- a/lib_com/re8_util.c +++ /dev/null @@ -1,436 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include /* for ldexp() */ -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "wmc_auto.h" - - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static int16_t re8_identify_absolute_leader( const int16_t y[] ); - -static void re8_coord( const int16_t y[], int16_t k[] ); - - -/*----------------------------------------------------------------* - * re8_vor() - * - * Multi-rate RE8 indexing by Voronoi extension - *----------------------------------------------------------------*/ - -void re8_vor( - int16_t y[], /* i : point in RE8 (8-dimensional integer vector) */ - int16_t *n, /* o : codebook number n=0,2,3,4,... (scalar integer) */ - int16_t k[], /* o : Voronoi index (integer vector of dimension 8) used only if n>4 */ - int16_t c[], /* o : codevector in Q0, Q2, Q3, or Q4 if n<=4, y=c */ - int16_t *ka /* o : identifier of absolute leader (needed to index c)*/ -) -{ - int16_t v[8]; - int16_t k_mod[8], c_tmp[8]; - int16_t i, r, m, k_tmp[8], iter, ka_tmp, n_tmp, mask; - float sphere; - - /*----------------------------------------------------------------* - * verify if y is in Q0, Q2, Q3 or Q4 - * (a fast search is used here: - * the codebooks Q0, Q2, Q3 or Q4 are specified in terms of RE8 absolute leaders - * (see FORinstance Xie and Adoul's paper in ICASSP 96) - * - a unique code identifying the absolute leader related to y is computed - * in re8_identify_absolute_leader() - * this code is searched FORin a pre-defined list which specifies Q0, Q2, Q3 or Q4) - * the absolute leader is identified by ka - * - a translation table maps ka to the codebook number n) - *----------------------------------------------------------------*/ - - *ka = re8_identify_absolute_leader( y ); - - /*----------------------------------------------------------------* - * compute codebook number n of Qn (by table look-up) - * at this stage, n=0,2,3,4 or out=100 - *----------------------------------------------------------------*/ - - *n = Da_nq[*ka]; - - /*----------------------------------------------------------------* - * decompose y into : - * (if n<=4:) - * y = c where c is in Q0, Q2, Q3 or Q4 - * or - * (if n>4:) - * y = m c + v where c is in Q3 or Q4, v is a Voronoi codevector - * m=2^r (r integer >=2) - * - * in the latter case (if n>4), as a side-product, compute the (Voronoi) index k[] of v - * and replace n by n = n' + 2r where n' = 3 or 4 (c is in Qn') and r is defined above - *----------------------------------------------------------------*/ - - if ( *n <= 4 ) - { - for ( i = 0; i < 8; i++ ) - { - c[i] = y[i]; - } - } - else - { - /*------------------------------------------------------------* - * initialize r and m=2^r based on || y ||^2/8 - *------------------------------------------------------------*/ - - sphere = 0.0; - for ( i = 0; i < 8; i++ ) - { - sphere += (float) y[i] * (float) y[i]; - } - sphere *= 0.125; - r = 1; - sphere *= 0.25; /* not counted, merge 0.125*0.25 */ - while ( sphere > 11.0 ) - { - r++; - sphere *= 0.25; - } - /*------------------------------------------------------------* - * compute the coordinates of y in the RE8 basis - *------------------------------------------------------------*/ - - re8_coord( y, k_mod ); - - /*------------------------------------------------------------* - * compute m and the mask needed for modulo m (for Voronoi coding) - *------------------------------------------------------------*/ - - m = 1 << r; - mask = m - 1; /* 0x0..011...1 */ - - /*------------------------------------------------------------* - * find the minimal value of r (or equivalently of m) in 2 iterations - *------------------------------------------------------------*/ - - for ( iter = 0; iter < 2; iter++ ) - { - /*--------------------------------------------------------* - * compute v such that y is in m RE_8 +v (by Voronoi coding) - *--------------------------------------------------------*/ - - for ( i = 0; i < 8; i++ ) - { - k_tmp[i] = k_mod[i] & mask; - } - - re8_k2y( k_tmp, m, v ); - - /*--------------------------------------------------------* - * compute c = (y-v)/m - * (y is in RE8, c is also in RE8 by definition of v) - *--------------------------------------------------------*/ - - for ( i = 0; i < 8; i++ ) - { - c_tmp[i] = ( y[i] - v[i] ) / m; - /* M IS A FACTOR OF 2 */ - } - - /*--------------------------------------------------------* - * verify if c_tmp is in Q2, Q3 or Q4 - *--------------------------------------------------------*/ - - ka_tmp = re8_identify_absolute_leader( c_tmp ); - - /*--------------------------------------------------------* - * at this stage, n_tmp=2,3,4 or out = 100 -- n=0 is not possible - *--------------------------------------------------------*/ - - n_tmp = Da_nq[ka_tmp]; - - if ( n_tmp > 4 ) - { - /*--------------------------------------------------------* - * if c is not in Q2, Q3, or Q4 (i.e. n_tmp>4), use m = 2^(r+1) instead of 2^r - *--------------------------------------------------------*/ - - r++; - m = m << 1; - mask = ( ( mask << 1 ) + 1 ); /* mask = m-1; <- this is less complex */ - } - else - { - /*--------------------------------------------------------* - * c is in Q2, Q3, or Q4 -> the decomposition of y as y = m c + v is valid - * - * since Q2 is a subset of Q3, indicate n=3 instead of n=2 (this is because - * for n>4, n=n'+2r with n'=3 or 4, so n'=2 is not valid) - *--------------------------------------------------------*/ - - if ( n_tmp < 3 ) - { - n_tmp = 3; - } - - /*--------------------------------------------------------* - * save current values into ka, n, k and c - *--------------------------------------------------------*/ - - *ka = ka_tmp; - *n = n_tmp + 2 * r; - for ( i = 0; i < 8; i++ ) - { - k[i] = k_tmp[i]; - c[i] = c_tmp[i]; - } - - /*--------------------------------------------------------* - * try m = 2^(r-1) instead of 2^r to be sure that m is minimal - *--------------------------------------------------------*/ - - r--; - m = m >> 1; - mask = mask >> 1; - } - } - } - - return; -} - -/*-----------------------------------------------------------------------* - * re8_identify_absolute_leader() - * - * Identify the absolute leader related to y using a pre-defined table which - * specifies the codebooks Q0, Q2, Q3 and Q4 - -----------------------------------------------------------------------*/ - -/*! r: integer indicating if y if in Q0, Q2, Q3 or Q4 (or if y is an outlier) */ -static int16_t re8_identify_absolute_leader( - const int16_t y[] /* i : point in RE8 (8-dimensional integer vector) */ -) -{ - int16_t i, id, nb, pos, ka; - int32_t s, C[8], tmp; - - /*-----------------------------------------------------------------------* - * compute the RE8 shell number s = (y1^2+...+y8^2)/8 and C=(y1^2, ..., y8^2) - *-----------------------------------------------------------------------*/ - - s = 0; - for ( i = 0; i < 8; i++ ) - { - C[i] = y[i] * y[i]; - s += C[i]; - } - s >>= 3; - - /*-----------------------------------------------------------------------* - * compute the index 0 <= ka <= NB_LEADER+1 which identifies an absolute leader of Q0, Q2, Q3 or Q4 - * - * by default, ka=index of last element of the table (to indicate an outlier) - *-----------------------------------------------------------------------*/ - - ka = NB_LEADER + 1; - if ( s == 0 ) - { - /*-------------------------------------------------------------------* - * if s=0, y=0 i.e. y is in Q0 -> ka=index of element indicating Q0 - *-------------------------------------------------------------------*/ - - ka = NB_LEADER; - } - else - { - /*-------------------------------------------------------------------* - * the maximal value of s for y in Q0, Q2, Q3 or Q4 is NB_SPHERE - * if s> NB_SPHERE, y is an outlier (the value of ka is set correctly) - *-------------------------------------------------------------------*/ - - if ( s <= NB_SPHERE ) - { - /*---------------------------------------------------------------* - * compute the unique identifier id of the absolute leader related to y: - * s = (y1^4 + ... + y8^4)/8 - *---------------------------------------------------------------*/ - - tmp = 0; - for ( i = 0; i < 8; i++ ) - { - tmp += C[i] * C[i]; - } - id = (int16_t) ( tmp >> 3 ); - - /*---------------------------------------------------------------* - * search for id in table Da_id - * (containing all possible values of id if y is in Q2, Q3 or Q4) - * this search is focused based on the shell number s so that - * only the id's related to the shell of number s are checked - *---------------------------------------------------------------*/ - - nb = Da_nb[s - 1]; /* get the number of absolute leaders used on the shell of number s */ - pos = Da_pos[s - 1]; /* get the position of the first absolute leader of shell s in Da_id */ - for ( i = 0; i < nb; i++ ) - { - if ( id == Da_id[pos] ) - { - ka = pos; /* get ka */ - break; - } - pos++; - } - } - } - - return ( ka ); -} - -/*------------------------------------------------------------------------- - * re8_coord() - * - * COMPUTATION OF RE8 COORDINATES - -----------------------------------------------------------------------*/ - -static void re8_coord( - const int16_t *y, /* i : 8-dimensional point y[0..7] in RE8 */ - int16_t *k /* o : coordinates k[0..7] */ -) -{ - int16_t i, tmp, sum; - - /*---------------------------------------------------------------* - * compute k = y M^-1 - * M = 1/4 [ 1 ] - * [-1 2 ] - * [ | \ ] - * [-1 2 ] - * [ 5 -2 _ -2 4] - * - *---------------------------------------------------------------*/ - - k[7] = y[7]; - tmp = y[7]; - sum = 5 * y[7]; - for ( i = 6; i >= 1; i-- ) - { - /* apply factor 2/4 from M^-1 */ - k[i] = ( y[i] - tmp ) >> 1; - sum -= y[i]; - } - - /* apply factor 1/4 from M^-1 */ - k[0] = ( y[0] + sum ) >> 2; - - return; -} - - -/*------------------------------------------------------------------------- - * re8_k2y() - * - * Voronoi indexing (index decoding) k -> y - -----------------------------------------------------------------------*/ - -void re8_k2y( - const int16_t *k, /* i : Voronoi index k[0..7] */ - const int16_t m, /* i : Voronoi modulo (m = 2^r = 1<=2) */ - int16_t *y /* o : 8-dimensional point y[0..7] in RE8 */ -) -{ - int16_t i, lm, v[8], tmp, sum, *ptr1, *ptr2; - float z[8]; - - /*---------------------------------------------------------------* - * compute y = k M and z=(y-a)/m, where - * M = [4 ] - * [2 2 ] - * [| \ ] - * [2 2 ] - * [1 1 _ 1 1] - * a=(2,0,...,0) - *---------------------------------------------------------------*/ - - for ( i = 0; i < 8; i++ ) - { - y[i] = k[7]; - } - - sum = 0; - for ( i = 6; i >= 1; i-- ) - { - tmp = 2 * k[i]; - sum += tmp; - y[i] += tmp; - } - y[0] += ( 4 * k[0] + sum ); - - /* find log2(m) */ - for ( lm = 0; lm < 31; lm++ ) - { - if ( ( m >> lm ) & 0x0001 ) - { - break; - } - } - - z[0] = (float) ldexp( y[0] - 2, -lm ); - for ( i = 1; i < 8; i++ ) - { - z[i] = (float) ldexp( y[i], -lm ); - } - - /*---------------------------------------------------------------* - * find nearest neighbor v of z in infinite RE8 - *---------------------------------------------------------------*/ - - re8_PPV( z, v ); - - /*---------------------------------------------------------------* - * compute y -= m v - *---------------------------------------------------------------*/ - - ptr1 = y; - ptr2 = v; - for ( i = 0; i < 8; i++ ) - { - *ptr1++ -= m * *ptr2++; - } - - return; -} diff --git a/lib_com/realft.c b/lib_com/realft.c deleted file mode 100644 index b681a4ac3..000000000 --- a/lib_com/realft.c +++ /dev/null @@ -1,198 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include "cnst.h" -#include -#include "options.h" -#include -#include "prot.h" -#include "wmc_auto.h" - -/*-------------------------------------------------------------------* - * four1() - * - * From "numerical recipes in C". - * Replace data by its DFT, if isign is input as 1; or replace data - * by nn times its inverse-DFT, if isign is input as -1. - * data is a complex array of length nn, input as a real - * array data[1...2nn]. nn must be an integer power of 2 - *-------------------------------------------------------------------*/ - -static void four1( - float *data, /* i/o: data array .......... */ - int16_t nn, /* i : length of data array */ - int16_t isign /* i : sign +1 or -1 */ -) -{ - int16_t n, mmax, m, j, istep, i; - float wtemp, wr, wpr, wpi, wi, theta; - float tempr, tempi; - - n = nn << 1; - j = 1; - - /* this is the bit-reversal section of the routine */ - for ( i = 1; i < n; i += 2 ) - { - if ( j > i ) - { - /* exchange the two complex numbers */ - SWAP( data[j], data[i] ); - SWAP( data[j + 1], data[i + 1] ); - } - m = n >> 1; - while ( m >= 2 && j > m ) - { - j -= m; - m >>= 1; - } - j += m; - } - mmax = 2; - /* here begins the Danielson-Lanczos section of the routine */ - /* Outer loop executed log2(nn) times */ - while ( n > mmax ) - { - istep = 2 * mmax; - /* initialization for the trigonometric recurrence */ - theta = (float) ( 6.28318530717959 / ( isign * mmax ) ); - wtemp = (float) ( sin( 0.5f * theta ) ); - wpr = -2.0f * wtemp * wtemp; - wpi = (float) sin( theta ); - wr = 1.0f; - wi = 0.0f; - /* here are the two nested loops */ - for ( m = 1; m < mmax; m += 2 ) - { - for ( i = m; i <= n; i += istep ) - { - /* this is Danielson-Lanczos formula */ - j = i + mmax; - tempr = wr * data[j] - wi * data[j + 1]; - tempi = wr * data[j + 1] + wi * data[j]; - data[j] = data[i] - tempr; - data[j + 1] = data[i + 1] - tempi; - data[i] += tempr; - data[i + 1] += tempi; - } - /* trigonometric recurrence */ - wr = ( wtemp = wr ) * wpr - wi * wpi + wr; - wi = wi * wpr + wtemp * wpi + wi; - } - mmax = istep; - } - - return; -} - -/*-------------------------------------------------------------------------* - * realft() - * - * from "numerical recipes in C". - * Calculates the Fourier Transform of a set of 2*n real-valued data points. - * Replaces this data (which is stored in the array data[1..2n]) by the - * positive frequancy half of its complex Fourier Transform. The real-valued - * first and last components of the complex transform are returned as elements - * data[1] and data[2] respectively. n must be a power of 2. This routine - * also calculates the inverse transform of a complex data array if it is the - * tranform of real data. (Results in this case must be multiplied by 1/n.) - *--------------------------------------------------------------------------*/ - -void realft( - float *data, /* i/o: data array */ - int16_t n, /* i : length of data array */ - int16_t isign /* i : sign +1 or -1 */ -) -{ - int16_t i, i1, i2, i3, i4, n2p3; - float c1 = 0.5, c2, h1r, h1i, h2r, h2i; - float wr, wi, wpr, wpi, wtemp, theta; - - theta = (float) ( EVS_PI / (float) n ); - if ( isign == 1 ) - { - /* the forward transorm here */ - c2 = -0.5; - four1( data, n, 1 ); - } - else - { - /* otherwise set up for the inverse transform */ - c2 = 0.5; - theta = -theta; - } - wtemp = (float) sin( 0.5f * theta ); - wpr = -2.0f * wtemp * wtemp; - wpi = (float) sin( theta ); - wr = 1.0f + wpr; - wi = wpi; - n2p3 = 2 * n + 3; - /* case i=1 done separately below */ - for ( i = 2; i <= n / 2; i++ ) - { - i4 = 1 + ( i3 = n2p3 - ( i2 = 1 + ( i1 = i + i - 1 ) ) ); - /* the two separate transforms are separated out of data */ - h1r = c1 * ( data[i1] + data[i3] ); - h1i = c1 * ( data[i2] - data[i4] ); - h2r = -c2 * ( data[i2] + data[i4] ); - h2i = c2 * ( data[i1] - data[i3] ); - /* here they are recombined to form the true transform - of the original real data */ - data[i1] = h1r + wr * h2r - wi * h2i; - data[i2] = h1i + wr * h2i + wi * h2r; - data[i3] = h1r - wr * h2r + wi * h2i; - data[i4] = -h1i + wr * h2i + wi * h2r; - /* the recurrence */ - wr = ( wtemp = wr ) * wpr - wi * wpi + wr; - wi = wi * wpr + wtemp * wpi + wi; - } - if ( isign == 1 ) - { - /* squeeze the first and the last data together to get them - all within the original data */ - data[1] = ( h1r = data[1] ) + data[2]; - data[2] = h1r - data[2]; - } - else - { - /* this is the inverse transform for the case isign=-1 */ - data[1] = c1 * ( ( h1r = data[1] ) + data[2] ); - data[2] = c1 * ( h1r - data[2] ); - four1( data, n, -1 ); - } - - return; -} diff --git a/lib_com/recovernorm.c b/lib_com/recovernorm.c deleted file mode 100644 index d5839088b..000000000 --- a/lib_com/recovernorm.c +++ /dev/null @@ -1,83 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "prot.h" -#include "cnst.h" -#include "rom_com.h" -#include "wmc_auto.h" - -/*--------------------------------------------------------------------------* - * recovernorm() - * - * Recover reordered quantization indices and norms - *--------------------------------------------------------------------------*/ - -void recovernorm( - const int16_t *const idxbuf, /* i : reordered quantization indices */ - int16_t *ynrm, /* o : recovered quantization indices */ - int16_t *normqlg2, /* o : recovered quantized norms */ - const int16_t nb_sfm /* i : number of subbands */ -) -{ - int16_t i; - const int16_t *order = NULL; - - switch ( nb_sfm ) - { - case NB_SFM: - order = norm_order_48; - break; - case SFM_N_SWB: - order = norm_order_32; - break; - case SFM_N_WB: - order = norm_order_16; - break; - default: - order = norm_order_48; - break; - } - - for ( i = 0; i < nb_sfm; i++ ) - { - ynrm[order[i]] = idxbuf[i]; - normqlg2[order[i]] = dicnlg2_float[idxbuf[i]]; - } - - return; -} diff --git a/lib_com/reordvct.c b/lib_com/reordvct.c deleted file mode 100644 index 1535c75a8..000000000 --- a/lib_com/reordvct.c +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include "options.h" -#include "prot.h" -#include "wmc_auto.h" - -/*--------------------------------------------------------------------------* - * reordvct() - * - * Rearrange a vector in decreasing order - *--------------------------------------------------------------------------*/ - -void reordvct( - int16_t *y, /* i/o: vector to rearrange */ - const int16_t N, /* i : dimensions */ - int16_t *idx /* o : reordered vector index */ -) -{ - int16_t i, j, k, n, im, temp; - - n = N - 1; - for ( i = 0; i < n; i++ ) - { - im = i; - k = i + 1; - for ( j = k; j < N; j++ ) - { - if ( y[im] < y[j] ) - { - im = j; - } - } - - temp = y[i]; - y[i] = y[im]; - y[im] = temp; - j = idx[i]; - idx[i] = idx[im]; - idx[im] = j; - } - - return; -} diff --git a/lib_com/residu.c b/lib_com/residu.c index 28574a072..2288b5e6e 100644 --- a/lib_com/residu.c +++ b/lib_com/residu.c @@ -71,41 +71,6 @@ void residu( return; } -/*--------------------------------------------------------------------* - * residu_ivas_fx() - * - * Compute the LP residual by filtering the input speech through A(z) - *--------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void residu_ivas_fx( - const Word16 *a, /* i : LP filter coefficients Q31-a_exp*/ - const Word16 a_exp, - const Word16 m, /* i : order of LP filter */ - const Word32 *x, /* i : input signal (usually speech) Qx*/ - Word32 *y, /* o : output signal (usually residual) Qx*/ - const Word16 l /* i : size of filtering */ -) -{ - Word32 s; - Word16 i, j; - - FOR( i = 0; i < l; i++ ) - { - s = x[i]; - move32(); - FOR( j = 1; j <= m; j++ ) - { - s = L_add( s, L_shl( Mpy_32_16_1( x[i - j], a[j] ), sub( Q15, a_exp ) ) ); // Qx - } - y[i] = s; - move32(); - } - - return; -} -#endif - /*--------------------------------------------------------------------* * calc_residu() * diff --git a/lib_com/residu_fx.c b/lib_com/residu_fx.c index 4a543c9ec..156e81ead 100644 --- a/lib_com/residu_fx.c +++ b/lib_com/residu_fx.c @@ -7,6 +7,42 @@ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" +#include "prot.h" + +/*--------------------------------------------------------------------* + * residu_ivas_fx() + * + * Compute the LP residual by filtering the input speech through A(z) + *--------------------------------------------------------------------*/ + + +void residu_ivas_fx( + const Word16 *a, /* i : LP filter coefficients Q31-a_exp*/ + const Word16 a_exp, + const Word16 m, /* i : order of LP filter */ + const Word32 *x, /* i : input signal (usually speech) Qx*/ + Word32 *y, /* o : output signal (usually residual) Qx*/ + const Word16 l /* i : size of filtering */ +) +{ + Word32 s; + Word16 i, j; + + FOR( i = 0; i < l; i++ ) + { + s = x[i]; + move32(); + FOR( j = 1; j <= m; j++ ) + { + s = L_add( s, L_shl( Mpy_32_16_1( x[i - j], a[j] ), sub( Q15, a_exp ) ) ); // Qx + } + y[i] = s; + move32(); + } + + return; +} + /*--------------------------------------------------------------------* * Residu3_lc_fx: diff --git a/lib_com/rom_basop_util.c b/lib_com/rom_basop_util.c index 38c61d6bc..4a0eed6b6 100644 --- a/lib_com/rom_basop_util.c +++ b/lib_com/rom_basop_util.c @@ -1498,7 +1498,7 @@ const PWord16 *getSineWindowTable( Word16 length ) { const PWord16 *p = NULL; - switch ( length ) + SWITCH( length ) { case 10: p = SineWindow10; // Q15 diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c index 09cdf6195..254c3df9d 100644 --- a/lib_com/rom_com.c +++ b/lib_com/rom_com.c @@ -397,7 +397,7 @@ const UWord8 ACELP_NRG_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF }; /* NRG bits : (0/2/3 bits) */ -const uint8_t ACELP_NRG_BITS[3] = { 0, 3, 4 }; // Q0 +const UWord8 ACELP_NRG_BITS[3] = { 0, 3, 4 }; // Q0 /* LTP MODE*/ const UWord8 ACELP_LTP_MODE[RATE_MODE_MAX][BANDWIDTH_MODE_MAX][ACELP_MODE_MAX+RF_MODE_MAX] = // Q0 @@ -481,22 +481,13 @@ const float crit_bands[] = 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4400.0f, 5300.0f, 6350.0f, 7700.0f, 9500.0f, 12000.0f, 15500.0f, 40000.0f }; -#ifdef IVAS_FLOAT_FIXED const Word32 crit_bands_fx[] =//Q0 { 100, 200, 300, 400, 510, 630, 770, 920, 1080, 1270, 1480, 1720, 2000, 2320, 2700, 3150, 3700, 4400, 5300, 6350, 7700, 9500, 12000, 15500, 40000 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float crit_bins_corr[CRIT_NOIS_BAND] = -{ - 0.9f, 0.9f, 0.85f, 0.8f, 0.775f, 0.75f, 0.725f, 0.7f, 0.675f, 0.65f, 0.625f, - 0.60f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f, 0.6f -}; -#endif const Word16 crit_bins_corr_fx[CRIT_NOIS_BAND] = {//Q15 @@ -509,13 +500,6 @@ const Word16 crit_bins[CRIT_NOIS_BAND] = // Q0 4, 4, 4, 4, 4, 5, 6, 6, 6, 8, 8, 10, 11, 13, 15, 18, 22, 16, 16, 20, 20, 20, 16 }; -#ifndef IVAS_FLOAT_FIXED -const float crit_bands_loc[CRIT_NOIS_BAND] = -{ - 100.0f, 200.0f, 300.0f, 400.0f, 510.0f, 630.0f, 770.0f, 920.0f, 1080.0f, 1270.0f, 1480.0f, - 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4100.0f, 4500.0f, 5000.0f, 5500.0f, 6000.0f, 6375.0f -}; -#endif const Word16 crit_bands_loc_fx[CRIT_NOIS_BAND] = {//Q0 @@ -523,44 +507,6 @@ const Word16 crit_bands_loc_fx[CRIT_NOIS_BAND] = 2000, 2320, 2700, 3150, 3700, 4100, 4500, 5000, 5500, 6000, 6375 }; -const float inv_tbl[130] = -{ - 0.0f, /* unused */ - 1.0000000000f, 0.5000000000f, 0.3333333333f, 0.2500000000f, - 0.2000000000f, 0.1666666667f, 0.1428571429f, 0.1250000000f, - 0.1111111111f, 0.1000000000f, 0.0909090909f, 0.0833333333f, - 0.0769230769f, 0.0714285714f, 0.0666666667f, 0.0625000000f, - 0.0588235294f, 0.0555555556f, 0.0526315789f, 0.0500000000f, - 0.0476190476f, 0.0454545455f, 0.0434782609f, 0.0416666667f, - 0.0400000000f, 0.0384615385f, 0.0370370370f, 0.0357142857f, - 0.0344827586f, 0.0333333333f, 0.0322580645f, 0.0312500000f, - 0.0303030303f, 0.0294117647f, 0.0285714286f, 0.0277777778f, - 0.0270270270f, 0.0263157895f, 0.0256410256f, 0.0250000000f, - 0.0243902439f, 0.0238095238f, 0.0232558140f, 0.0227272727f, - 0.0222222222f, 0.0217391304f, 0.0212765957f, 0.0208333333f, - 0.0204081633f, 0.0200000000f, 0.0196078431f, 0.0192307692f, - 0.0188679245f, 0.0185185185f, 0.0181818182f, 0.0178571429f, - 0.0175438596f, 0.0172413793f, 0.0169491525f, 0.0166666667f, - 0.0163934426f, 0.0161290323f, 0.0158730159f, 0.0156250000f, - 0.0153846154f, 0.0151515152f, 0.0149253731f, 0.0147058824f, - 0.0144927536f, 0.0142857143f, 0.0140845070f, 0.0138888889f, - 0.0136986301f, 0.0135135135f, 0.0133333333f, 0.0131578947f, - 0.0129870130f, 0.0128205128f, 0.0126582278f, 0.0125000000f, - 0.0123456790f, 0.0121951220f, 0.0120481928f, 0.0119047619f, - 0.0117647059f, 0.0116279070f, 0.0114942529f, 0.0113636364f, - 0.0112359551f, 0.0111111111f, 0.0109890110f, 0.0108695652f, - 0.0107526882f, 0.0106382979f, 0.0105263158f, 0.0104166667f, - 0.0103092784f, 0.0102040816f, 0.0101010101f, 0.0100000000f, - 0.0099009901f, 0.0098039216f, 0.0097087379f, 0.0096153846f, - 0.0095238095f, 0.0094339623f, 0.0093457944f, 0.0092592593f, - 0.0091743119f, 0.0090909091f, 0.0090090090f, 0.0089285714f, - 0.0088495575f, 0.0087719298f, 0.0086956522f, 0.0086206897f, - 0.0085470085f, 0.0084745763f, 0.0084033613f, 0.0083333333f, - 0.0082644628f, 0.0081967213f, 0.0081300813f, 0.0080645161f, - 0.0080000000f, 0.0079365079f, 0.0078740157f, 0.0078125000f, - 0.0077519380f /* last val = 1/129 */ -}; - const Word16 inv_tbl_fx[146] =//Q15 { 0, 32767, 16384, 10923, 8192, 6554, 5462, 4681, @@ -659,51 +605,16 @@ const Word16 dicnlg2[40] = // Q0 * LD music post-filter *----------------------------------------------------------------------------------*/ -const float mfreq_loc_LD[] = { 100.0f, 200.0f, 300.0f, 400.0f, 510.0f, 630.0f, 770.0f, 920.0f, 1080.0f, 1270.0f, 1480.0f, - 1720.0f, 2000.0f, 2320.0f, 2700.0f, 3150.0f, 3700.0f, 4400.0f, 5300.0f, (6400.0f-BIN_16kdct) - }; - const Word16 mfreq_loc_LD_fx[] = { 100, 200, 300, 400, 510, 630, 770, 920, 1080, 1270, 1480,//Q0 1720, 2000, 2320, 2700, 3150, 3700, 4400, 5300, (6400 - BIN_16kdct_fx) }; const Word16 mfreq_bindiv_LD[] = {10, 10, 10, 10, 11, 12, 14, 15, 16, 19, 21, 24, 28, 32, 38, 45, 55, 70, 90, 110}; // Q0 -#ifndef IVAS_FLOAT_FIXED -const float sc_qnoise[] = {0.1f,0.1f,0.1f,0.1f,0.1f,0.1f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.09091f,0.06667f,0.06667f,0.06667f,0.06667f,0.06667f}; -#endif const Word16 sc_qnoise_fx[] = { 3277, 3277, 3277, 3277, 3277, 3277, 2979, 2979, 2979, 2979, 2979, 2979, 2979, 2979, 2979, 2185, 2185, 2185, 2185, 2185 };//Q15 const Word16 inv_mfreq_bindiv_LD_fx[] = { 3277, 3277, 3277, 3277, 2979, 2731, 2341, 2185, 2048, 1725, 1560, 1365, 1170, 1024, 862, 728, 596, 468, 364, 298 }; /*Q15 */ const Word16 inv_mfreq_bindiv_LD_M1_fx[] = { 3641, 3641, 3641, 3641, 3277, 2979, 2521, 2341, 2185, 1820, 1638, 1425, 1214, 1057, 886, 745, 607, 475, 368, 301 }; /*Q15 */ -const float post_dct_wind[OFFSET2] = -{ - 1.000000f, 0.999933f, 0.999731f, 0.999395f, 0.998924f, 0.998319f, 0.997580f, 0.996707f, - 0.995700f, 0.994560f, 0.993287f, 0.991881f, 0.990343f, 0.988672f, 0.986870f, 0.984938f, - 0.982874f, 0.980681f, 0.978358f, 0.975907f, 0.973328f, 0.970621f, 0.967787f, 0.964828f, - 0.961743f, 0.958535f, 0.955202f, 0.951748f, 0.948172f, 0.944475f, 0.940658f, 0.936723f, - 0.932671f, 0.928501f, 0.924217f, 0.919819f, 0.915307f, 0.910684f, 0.905950f, 0.901107f, - 0.896156f, 0.891098f, 0.885935f, 0.880669f, 0.875300f, 0.869829f, 0.864260f, 0.858592f, - 0.852828f, 0.846968f, 0.841016f, 0.834971f, 0.828837f, 0.822614f, 0.816304f, 0.809909f, - 0.803431f, 0.796871f, 0.790231f, 0.783513f, 0.776719f, 0.769850f, 0.762908f, 0.755896f, - 0.748815f, 0.741667f, 0.734454f, 0.727178f, 0.719841f, 0.712444f, 0.704991f, 0.697482f, - 0.689920f, 0.682307f, 0.674645f, 0.666936f, 0.659182f, 0.651385f, 0.643547f, 0.635671f, - 0.627758f, 0.619811f, 0.611832f, 0.603822f, 0.595785f, 0.587721f, 0.579635f, 0.571526f, - 0.563399f, 0.555254f, 0.547095f, 0.538923f, 0.530740f, 0.522549f, 0.514353f, 0.506152f, - 0.497949f, 0.489747f, 0.481548f, 0.473354f, 0.465167f, 0.456990f, 0.448824f, 0.440671f, - 0.432535f, 0.424417f, 0.416319f, 0.408244f, 0.400193f, 0.392169f, 0.384175f, 0.376211f, - 0.368281f, 0.360386f, 0.352529f, 0.344712f, 0.336936f, 0.329204f, 0.321518f, 0.313880f, - 0.306293f, 0.298757f, 0.291276f, 0.283850f, 0.276483f, 0.269176f, 0.261931f, 0.254751f, - 0.247636f, 0.240589f, 0.233612f, 0.226707f, 0.219875f, 0.213118f, 0.206439f, 0.199839f, - 0.193320f, 0.186883f, 0.180530f, 0.174264f, 0.168085f, 0.161995f, 0.155996f, 0.150090f, - 0.144278f, 0.138562f, 0.132943f, 0.127423f, 0.122003f, 0.116685f, 0.111470f, 0.106360f, - 0.101355f, 0.096458f, 0.091669f, 0.086991f, 0.082423f, 0.077968f, 0.073626f, 0.069399f, - 0.065289f, 0.061295f, 0.057419f, 0.053662f, 0.050025f, 0.046510f, 0.043116f, 0.039846f, - 0.036699f, 0.033677f, 0.030780f, 0.028010f, 0.025367f, 0.022851f, 0.020464f, 0.018206f, - 0.016078f, 0.014080f, 0.012212f, 0.010476f, 0.008872f, 0.007400f, 0.006060f, 0.004853f, - 0.003780f, 0.002840f, 0.002034f, 0.001362f, 0.000824f, 0.000420f, 0.000151f, 0.000017f -}; - const Word16 post_dct_wind_fx[OFFSET2] = /*Q15 */ { 32767, 32766, 32759, 32748, 32733, 32713, 32689, 32660, @@ -732,33 +643,10 @@ const Word16 post_dct_wind_fx[OFFSET2] = /*Q15 */ 124, 93, 67, 45, 27, 14, 5, 1 }; -#ifndef IVAS_FLOAT_FIXED -const float MAX_SNR_SNR1_tab[MBANDS_GN_LD] = { 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.026316f, 1.02631627f, 1.043478f, 1.043478f, 1.043478f, 1.043478f}; -const float INV_MAX_SNR_tab[MBANDS_GN_LD] = { .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .026316f, .043478f, .043478f, .043478f, .043478f}; -#endif const Word16 MAX_SNR_SNR1_tab_FX[MBANDS_GN_LD] = { 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 16815, 17096, 17096, 17096, 17096 };//Q14 const Word16 INV_MAX_SNR_tab_FX[MBANDS_GN_LD] = { 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 1425, 1425, 1425, 1425 };//Q15 -const float wind_sss[LEN_WIN_SSS] = /* window for subsampling */ -{ - 0.080000f, 0.080183f, 0.080730f, 0.081642f, 0.082918f, 0.084557f, 0.086558f, 0.088918f, - 0.091636f, 0.094711f, 0.098139f, 0.101917f, 0.106043f, 0.110514f, 0.115326f, 0.120475f, - 0.125957f, 0.131767f, 0.137902f, 0.144356f, 0.151124f, 0.158200f, 0.165580f, 0.173257f, - 0.181225f, 0.189478f, 0.198009f, 0.206811f, 0.215878f, 0.225203f, 0.234777f, 0.244594f, - 0.254645f, 0.264922f, 0.275418f, 0.286124f, 0.297031f, 0.308132f, 0.319416f, 0.330876f, - 0.342501f, 0.354284f, 0.366213f, 0.378281f, 0.390477f, 0.402792f, 0.415215f, 0.427738f, - 0.440350f, 0.453041f, 0.465801f, 0.478620f, 0.491487f, 0.504393f, 0.517328f, 0.530280f, - 0.543240f, 0.556198f, 0.569142f, 0.582064f, 0.594952f, 0.607796f, 0.620587f, 0.633314f, - 0.645967f, 0.658535f, 0.671009f, 0.683380f, 0.695637f, 0.707770f, 0.719769f, 0.731627f, - 0.743332f, 0.754875f, 0.766248f, 0.777442f, 0.788447f, 0.799255f, 0.809857f, 0.820244f, - 0.830410f, 0.840344f, 0.850041f, 0.859491f, 0.868688f, 0.877623f, 0.886291f, 0.894684f, - 0.902795f, 0.910618f, 0.918147f, 0.925376f, 0.932299f, 0.938911f, 0.945205f, 0.951179f, - 0.956825f, 0.962141f, 0.967122f, 0.971764f, 0.976063f, 0.980016f, 0.983619f, 0.986871f, - 0.989767f, 0.992307f, 0.994488f, 0.996307f, 0.997765f, 0.998859f, 0.999589f, 0.999954f, - 1.000000f, 0.979530f, 0.918958f, 0.820763f, 0.688967f, 0.528964f, 0.347305f, 0.151428f -}; - const Word16 wind_sss_fx[LEN_WIN_SSS] = /*window for subsampling*/ {//Q15 2621, 2627, 2645, 2675, 2717, 2771, 2836, 2914, @@ -782,26 +670,6 @@ const Word16 wind_sss_fx[LEN_WIN_SSS] = /*window for subsampling*/ * fir1(240,(3900/32000),hanning(241))*5 *----------------------------------------------------------------------------------*/ -const float filter5_39s320_120[121] = -{ - 0.609388f, 0.594507f, 0.551181f, 0.483219f, 0.396518f, 0.298448f, 0.197086f, 0.100396f, - 0.015442f, -0.052273f, -0.099277f, -0.124358f, -0.128542f, -0.114820f, -0.087682f, -0.052507f, - -0.014899f, 0.019957f, 0.047847f, 0.065924f, 0.072906f, 0.069076f, 0.056094f, 0.036651f, - 0.014026f, -0.008391f, -0.027559f, -0.041148f, -0.047793f, -0.047188f, -0.040043f, -0.027903f, - -0.012866f, 0.002740f, 0.016701f, 0.027204f, 0.033059f, 0.033817f, 0.029768f, 0.021853f, - 0.011477f, 0.000283f, -0.010097f, -0.018267f, -0.023248f, -0.024581f, -0.022354f, -0.017150f, - -0.009927f, -0.001855f, 0.005864f, 0.012168f, 0.016275f, 0.017775f, 0.016654f, 0.013275f, - 0.008291f, 0.002530f, -0.003131f, -0.007899f, -0.011171f, -0.012604f, -0.012143f, -0.010011f, - -0.006645f, -0.002628f, 0.001417f, 0.004913f, 0.007412f, 0.008646f, 0.008551f, 0.007261f, - 0.005067f, 0.002364f, -0.000416f, -0.002869f, -0.004678f, -0.005647f, -0.005724f, -0.004986f, - -0.003623f, -0.001896f, -0.000090f, 0.001528f, 0.002746f, 0.003436f, 0.003559f, 0.003165f, - 0.002373f, 0.001348f, 0.000266f, -0.000708f, -0.001448f, -0.001877f, -0.001978f, -0.001782f, - -0.001364f, -0.000818f, -0.000247f, 0.000261f, 0.000641f, 0.000858f, 0.000909f, 0.000817f, - 0.000625f, 0.000384f, 0.000142f, -0.000062f, -0.000203f, -0.000274f, -0.000280f, -0.000239f, - -0.000172f, -0.000099f, -0.000038f, 0.000004f, 0.000024f, 0.000027f, 0.000019f, 0.000009f, - 0.000002f -}; - const Word16 filter5_39s320_120_fx[121] = /* Q15 */ { 19968, 19480, 18061, 15834, 12993, 9779, 6458, 3290, @@ -827,107 +695,6 @@ const Word16 filter5_39s320_120_fx[121] = /* Q15 */ /*----------------------------------------------------------------------------------* * LP analysis windows *----------------------------------------------------------------------------------*/ - -/* LP analysis window (length of the window is 25 ms which is 320 samples at 12.8kHz */ -const float LP_assym_window[L_LP] = -{ - 0.080000f, 0.080065f, 0.080258f, 0.080581f, 0.081033f, 0.081613f, 0.082323f, 0.083160f, - 0.084126f, 0.085220f, 0.086442f, 0.087791f, 0.089267f, 0.090869f, 0.092598f, 0.094452f, - 0.096431f, 0.098535f, 0.100762f, 0.103113f, 0.105587f, 0.108182f, 0.110899f, 0.113736f, - 0.116693f, 0.119769f, 0.122963f, 0.126274f, 0.129701f, 0.133243f, 0.136899f, 0.140668f, - 0.144550f, 0.148543f, 0.152645f, 0.156856f, 0.161175f, 0.165600f, 0.170130f, 0.174764f, - 0.179501f, 0.184339f, 0.189276f, 0.194313f, 0.199446f, 0.204674f, 0.209997f, 0.215413f, - 0.220919f, 0.226516f, 0.232200f, 0.237971f, 0.243826f, 0.249765f, 0.255785f, 0.261884f, - 0.268062f, 0.274317f, 0.280645f, 0.287047f, 0.293520f, 0.300062f, 0.306671f, 0.313345f, - 0.320084f, 0.326884f, 0.333744f, 0.340662f, 0.347635f, 0.354663f, 0.361743f, 0.368873f, - 0.376051f, 0.383274f, 0.390542f, 0.397852f, 0.405202f, 0.412590f, 0.420013f, 0.427470f, - 0.434959f, 0.442477f, 0.450022f, 0.457593f, 0.465187f, 0.472802f, 0.480436f, 0.488086f, - 0.495751f, 0.503429f, 0.511116f, 0.518812f, 0.526514f, 0.534220f, 0.541927f, 0.549634f, - 0.557337f, 0.565037f, 0.572729f, 0.580412f, 0.588083f, 0.595741f, 0.603384f, 0.611008f, - 0.618613f, 0.626195f, 0.633754f, 0.641286f, 0.648790f, 0.656263f, 0.663703f, 0.671109f, - 0.678478f, 0.685808f, 0.693097f, 0.700343f, 0.707544f, 0.714698f, 0.721803f, 0.728857f, - 0.735858f, 0.742804f, 0.749694f, 0.756524f, 0.763293f, 0.770000f, 0.776642f, 0.783218f, - 0.789725f, 0.796163f, 0.802528f, 0.808820f, 0.815036f, 0.821175f, 0.827236f, 0.833215f, - 0.839112f, 0.844925f, 0.850653f, 0.856294f, 0.861845f, 0.867306f, 0.872676f, 0.877952f, - 0.883133f, 0.888218f, 0.893205f, 0.898093f, 0.902880f, 0.907566f, 0.912148f, 0.916626f, - 0.920998f, 0.925263f, 0.929420f, 0.933468f, 0.937405f, 0.941230f, 0.944943f, 0.948543f, - 0.952027f, 0.955396f, 0.958649f, 0.961784f, 0.964800f, 0.967697f, 0.970474f, 0.973131f, - 0.975665f, 0.978078f, 0.980367f, 0.982533f, 0.984574f, 0.986491f, 0.988282f, 0.989948f, - 0.991487f, 0.992900f, 0.994185f, 0.995343f, 0.996373f, 0.997275f, 0.998048f, 0.998693f, - 0.999209f, 0.999597f, 0.999855f, 0.999984f, 0.999967f, 0.999705f, 0.999180f, 0.998393f, - 0.997344f, 0.996035f, 0.994465f, 0.992636f, 0.990548f, 0.988203f, 0.985603f, 0.982748f, - 0.979641f, 0.976282f, 0.972675f, 0.968820f, 0.964721f, 0.960380f, 0.955798f, 0.950980f, - 0.945926f, 0.940641f, 0.935128f, 0.929389f, 0.923427f, 0.917247f, 0.910852f, 0.904245f, - 0.897430f, 0.890410f, 0.883191f, 0.875777f, 0.868170f, 0.860376f, 0.852400f, 0.844245f, - 0.835916f, 0.827419f, 0.818757f, 0.809936f, 0.800962f, 0.791838f, 0.782571f, 0.773165f, - 0.763626f, 0.753960f, 0.744171f, 0.734266f, 0.724250f, 0.714129f, 0.703908f, 0.693594f, - 0.683193f, 0.672709f, 0.662150f, 0.651521f, 0.640828f, 0.630078f, 0.619277f, 0.608430f, - 0.597544f, 0.586626f, 0.575680f, 0.564715f, 0.553735f, 0.542747f, 0.531758f, 0.520774f, - 0.509800f, 0.498844f, 0.487911f, 0.477008f, 0.466141f, 0.455316f, 0.444540f, 0.433818f, - 0.423156f, 0.412561f, 0.402039f, 0.391596f, 0.381237f, 0.370969f, 0.360798f, 0.350728f, - 0.340767f, 0.330920f, 0.321191f, 0.311588f, 0.302115f, 0.292778f, 0.283582f, 0.274532f, - 0.265634f, 0.256892f, 0.248312f, 0.239898f, 0.231656f, 0.223589f, 0.215704f, 0.208003f, - 0.200492f, 0.193174f, 0.186055f, 0.179137f, 0.172426f, 0.165924f, 0.159636f, 0.153564f, - 0.147714f, 0.142087f, 0.136687f, 0.131518f, 0.126582f, 0.121881f, 0.117419f, 0.113199f, - 0.109222f, 0.105491f, 0.102007f, 0.098774f, 0.095793f, 0.093065f, 0.090592f, 0.088376f, - 0.086417f, 0.084718f, 0.083278f, 0.082099f, 0.081181f, 0.080525f, 0.080131f, 0.080000f -}; - -/* LP analysis window (length of the window is 25ms which is 400 samples at 16kHz */ -const float LP_assym_window_16k[L_LP_16k] = -{ - 0.080000f, 0.080041f, 0.080165f, 0.080371f, 0.080660f, 0.081032f, 0.081485f, 0.082021f, - 0.082639f, 0.083340f, 0.084122f, 0.084986f, 0.085932f, 0.086959f, 0.088067f, 0.089257f, - 0.090527f, 0.091879f, 0.093310f, 0.094822f, 0.096414f, 0.098085f, 0.099835f, 0.101665f, - 0.103573f, 0.105560f, 0.107624f, 0.109767f, 0.111986f, 0.114282f, 0.116655f, 0.119103f, - 0.121627f, 0.124227f, 0.126901f, 0.129649f, 0.132470f, 0.135365f, 0.138332f, 0.141372f, - 0.144483f, 0.147665f, 0.150917f, 0.154240f, 0.157631f, 0.161091f, 0.164619f, 0.168215f, - 0.171877f, 0.175605f, 0.179399f, 0.183257f, 0.187180f, 0.191166f, 0.195214f, 0.199324f, - 0.203496f, 0.207727f, 0.212019f, 0.216369f, 0.220777f, 0.225243f, 0.229765f, 0.234343f, - 0.238976f, 0.243663f, 0.248402f, 0.253195f, 0.258038f, 0.262933f, 0.267877f, 0.272870f, - 0.277911f, 0.282998f, 0.288132f, 0.293312f, 0.298535f, 0.303802f, 0.309111f, 0.314462f, - 0.319853f, 0.325283f, 0.330753f, 0.336259f, 0.341803f, 0.347382f, 0.352995f, 0.358642f, - 0.364322f, 0.370033f, 0.375774f, 0.381545f, 0.387345f, 0.393172f, 0.399025f, 0.404903f, - 0.410806f, 0.416732f, 0.422680f, 0.428649f, 0.434639f, 0.440647f, 0.446673f, 0.452715f, - 0.458774f, 0.464846f, 0.470933f, 0.477032f, 0.483142f, 0.489262f, 0.495391f, 0.501529f, - 0.507673f, 0.513823f, 0.519978f, 0.526136f, 0.532297f, 0.538459f, 0.544622f, 0.550784f, - 0.556943f, 0.563100f, 0.569253f, 0.575400f, 0.581541f, 0.587674f, 0.593799f, 0.599915f, - 0.606019f, 0.612112f, 0.618192f, 0.624258f, 0.630308f, 0.636343f, 0.642360f, 0.648358f, - 0.654338f, 0.660296f, 0.666234f, 0.672148f, 0.678039f, 0.683905f, 0.689745f, 0.695558f, - 0.701344f, 0.707100f, 0.712827f, 0.718522f, 0.724186f, 0.729816f, 0.735412f, 0.740973f, - 0.746499f, 0.751987f, 0.757437f, 0.762848f, 0.768219f, 0.773549f, 0.778837f, 0.784082f, - 0.789284f, 0.794440f, 0.799551f, 0.804616f, 0.809633f, 0.814601f, 0.819521f, 0.824390f, - 0.829208f, 0.833974f, 0.838688f, 0.843347f, 0.847953f, 0.852503f, 0.856997f, 0.861434f, - 0.865813f, 0.870134f, 0.874396f, 0.878598f, 0.882739f, 0.886818f, 0.890835f, 0.894789f, - 0.898680f, 0.902506f, 0.906267f, 0.909962f, 0.913591f, 0.917153f, 0.920647f, 0.924073f, - 0.927430f, 0.930718f, 0.933935f, 0.937082f, 0.940157f, 0.943160f, 0.946092f, 0.948950f, - 0.951735f, 0.954446f, 0.957082f, 0.959644f, 0.962130f, 0.964541f, 0.966876f, 0.969133f, - 0.971314f, 0.973418f, 0.975443f, 0.977391f, 0.979260f, 0.981050f, 0.982761f, 0.984392f, - 0.985944f, 0.987416f, 0.988807f, 0.990118f, 0.991348f, 0.992497f, 0.993565f, 0.994551f, - 0.995456f, 0.996279f, 0.997021f, 0.997680f, 0.998257f, 0.998752f, 0.999164f, 0.999494f, - 0.999742f, 0.999907f, 0.999990f, 0.999979f, 0.999811f, 0.999476f, 0.998973f, 0.998302f, - 0.997465f, 0.996460f, 0.995289f, 0.993952f, 0.992450f, 0.990782f, 0.988950f, 0.986955f, - 0.984796f, 0.982475f, 0.979993f, 0.977350f, 0.974548f, 0.971587f, 0.968469f, 0.965194f, - 0.961765f, 0.958182f, 0.954446f, 0.950559f, 0.946522f, 0.942337f, 0.938005f, 0.933528f, - 0.928908f, 0.924146f, 0.919243f, 0.914202f, 0.909025f, 0.903713f, 0.898269f, 0.892694f, - 0.886990f, 0.881160f, 0.875205f, 0.869128f, 0.862931f, 0.856617f, 0.850186f, 0.843643f, - 0.836989f, 0.830226f, 0.823358f, 0.816386f, 0.809314f, 0.802143f, 0.794877f, 0.787518f, - 0.780068f, 0.772531f, 0.764909f, 0.757206f, 0.749422f, 0.741563f, 0.733630f, 0.725626f, - 0.717555f, 0.709419f, 0.701221f, 0.692964f, 0.684652f, 0.676287f, 0.667872f, 0.659410f, - 0.650905f, 0.642360f, 0.633777f, 0.625160f, 0.616512f, 0.607835f, 0.599135f, 0.590412f, - 0.581672f, 0.572916f, 0.564148f, 0.555371f, 0.546589f, 0.537804f, 0.529020f, 0.520240f, - 0.511467f, 0.502705f, 0.493956f, 0.485224f, 0.476512f, 0.467823f, 0.459161f, 0.450528f, - 0.441927f, 0.433363f, 0.424837f, 0.416353f, 0.407915f, 0.399524f, 0.391185f, 0.382900f, - 0.374672f, 0.366505f, 0.358401f, 0.350363f, 0.342395f, 0.334498f, 0.326676f, 0.318932f, - 0.311269f, 0.303689f, 0.296196f, 0.288791f, 0.281478f, 0.274259f, 0.267137f, 0.260115f, - 0.253195f, 0.246379f, 0.239670f, 0.233071f, 0.226584f, 0.220211f, 0.213955f, 0.207818f, - 0.201802f, 0.195909f, 0.190142f, 0.184502f, 0.178992f, 0.173614f, 0.168369f, 0.163260f, - 0.158288f, 0.153456f, 0.148764f, 0.144215f, 0.139811f, 0.135552f, 0.131441f, 0.127479f, - 0.123667f, 0.120008f, 0.116501f, 0.113149f, 0.109952f, 0.106913f, 0.104031f, 0.101309f, - 0.098746f, 0.096344f, 0.094104f, 0.092027f, 0.090113f, 0.088363f, 0.086778f, 0.085358f, - 0.084104f, 0.083017f, 0.082096f, 0.081342f, 0.080755f, 0.080336f, 0.080084f, 0.080000f -}; - const Word16 Assym_window_W16fx[L_LP] = /*Q15*/ { 2621, 2624, 2630, 2640, 2655, 2674, 2698, 2725, @@ -1025,60 +792,6 @@ const Word16 assym_window_16k_fx[L_LP_16k] = /*Q15*/ 3236, 3157, 3084, 3016, 2953, 2895, 2844, 2797, 2756, 2720, 2690, 2665, 2646, 2632, 2624, 2621 }; -/* LP analysis window for AMR-WB IO mode (length of the window is 30ms which is - * 384 samples at 12.8kHz */ -const float hamcos_window[L_LP_AMR_WB] = -{ - 0.080000f, 0.080035f, 0.080139f, 0.080313f, 0.080556f, 0.080869f, 0.081251f, 0.081703f, - 0.082224f, 0.082814f, 0.083473f, 0.084201f, 0.084998f, 0.085864f, 0.086799f, 0.087802f, - 0.088873f, 0.090013f, 0.091221f, 0.092496f, 0.093839f, 0.095250f, 0.096728f, 0.098273f, - 0.099884f, 0.101563f, 0.103307f, 0.105118f, 0.106994f, 0.108936f, 0.110943f, 0.113015f, - 0.115151f, 0.117351f, 0.119616f, 0.121944f, 0.124335f, 0.126789f, 0.129306f, 0.131884f, - 0.134525f, 0.137226f, 0.139989f, 0.142812f, 0.145695f, 0.148638f, 0.151639f, 0.154700f, - 0.157819f, 0.160995f, 0.164229f, 0.167520f, 0.170867f, 0.174270f, 0.177728f, 0.181241f, - 0.184808f, 0.188429f, 0.192103f, 0.195829f, 0.199608f, 0.203438f, 0.207319f, 0.211250f, - 0.215231f, 0.219261f, 0.223340f, 0.227466f, 0.231640f, 0.235860f, 0.240126f, 0.244438f, - 0.248794f, 0.253195f, 0.257638f, 0.262125f, 0.266653f, 0.271223f, 0.275833f, 0.280483f, - 0.285173f, 0.289901f, 0.294667f, 0.299470f, 0.304309f, 0.309184f, 0.314094f, 0.319038f, - 0.324015f, 0.329025f, 0.334067f, 0.339140f, 0.344244f, 0.349377f, 0.354538f, 0.359728f, - 0.364946f, 0.370189f, 0.375458f, 0.380753f, 0.386071f, 0.391412f, 0.396776f, 0.402162f, - 0.407568f, 0.412995f, 0.418441f, 0.423905f, 0.429386f, 0.434885f, 0.440399f, 0.445928f, - 0.451472f, 0.457029f, 0.462598f, 0.468179f, 0.473771f, 0.479373f, 0.484984f, 0.490604f, - 0.496231f, 0.501865f, 0.507504f, 0.513148f, 0.518797f, 0.524448f, 0.530102f, 0.535757f, - 0.541413f, 0.547069f, 0.552724f, 0.558377f, 0.564027f, 0.569673f, 0.575315f, 0.580952f, - 0.586582f, 0.592205f, 0.597821f, 0.603428f, 0.609025f, 0.614611f, 0.620187f, 0.625750f, - 0.631300f, 0.636837f, 0.642359f, 0.647865f, 0.653355f, 0.658828f, 0.664283f, 0.669719f, - 0.675136f, 0.680532f, 0.685907f, 0.691260f, 0.696590f, 0.701896f, 0.707178f, 0.712435f, - 0.717665f, 0.722869f, 0.728045f, 0.733192f, 0.738311f, 0.743399f, 0.748457f, 0.753483f, - 0.758477f, 0.763438f, 0.768365f, 0.773257f, 0.778115f, 0.782936f, 0.787720f, 0.792467f, - 0.797176f, 0.801846f, 0.806477f, 0.811067f, 0.815616f, 0.820124f, 0.824589f, 0.829011f, - 0.833389f, 0.837723f, 0.842012f, 0.846256f, 0.850453f, 0.854603f, 0.858706f, 0.862760f, - 0.866766f, 0.870722f, 0.874628f, 0.878484f, 0.882288f, 0.886041f, 0.889741f, 0.893389f, - 0.896983f, 0.900523f, 0.904009f, 0.907439f, 0.910814f, 0.914133f, 0.917395f, 0.920601f, - 0.923748f, 0.926838f, 0.929869f, 0.932842f, 0.935755f, 0.938608f, 0.941401f, 0.944133f, - 0.946804f, 0.949413f, 0.951961f, 0.954446f, 0.956869f, 0.959229f, 0.961525f, 0.963758f, - 0.965926f, 0.968030f, 0.970070f, 0.972044f, 0.973953f, 0.975796f, 0.977574f, 0.979285f, - 0.980930f, 0.982509f, 0.984020f, 0.985464f, 0.986841f, 0.988151f, 0.989392f, 0.990566f, - 0.991672f, 0.992709f, 0.993678f, 0.994578f, 0.995409f, 0.996172f, 0.996866f, 0.997490f, - 0.998046f, 0.998532f, 0.998949f, 0.999296f, 0.999574f, 0.999783f, 0.999922f, 0.999991f, - 1.000000f, 0.999924f, 0.999698f, 0.999320f, 0.998791f, 0.998111f, 0.997280f, 0.996298f, - 0.995166f, 0.993883f, 0.992450f, 0.990867f, 0.989134f, 0.987252f, 0.985220f, 0.983039f, - 0.980710f, 0.978233f, 0.975607f, 0.972834f, 0.969914f, 0.966848f, 0.963635f, 0.960277f, - 0.956773f, 0.953125f, 0.949332f, 0.945396f, 0.941317f, 0.937096f, 0.932733f, 0.928229f, - 0.923585f, 0.918801f, 0.913879f, 0.908818f, 0.903619f, 0.898284f, 0.892814f, 0.887208f, - 0.881468f, 0.875595f, 0.869589f, 0.863452f, 0.857185f, 0.850788f, 0.844262f, 0.837609f, - 0.830829f, 0.823923f, 0.816893f, 0.809739f, 0.802463f, 0.795066f, 0.787548f, 0.779911f, - 0.772157f, 0.764285f, 0.756298f, 0.748197f, 0.739983f, 0.731657f, 0.723220f, 0.714674f, - 0.706019f, 0.697258f, 0.688392f, 0.679421f, 0.670348f, 0.661174f, 0.651899f, 0.642526f, - 0.633056f, 0.623490f, 0.613830f, 0.604077f, 0.594233f, 0.584299f, 0.574276f, 0.564167f, - 0.553972f, 0.543694f, 0.533333f, 0.522892f, 0.512372f, 0.501774f, 0.491101f, 0.480353f, - 0.469533f, 0.458641f, 0.447680f, 0.436652f, 0.425558f, 0.414399f, 0.403177f, 0.391895f, - 0.380553f, 0.369154f, 0.357699f, 0.346190f, 0.334629f, 0.323017f, 0.311356f, 0.299648f, - 0.287895f, 0.276098f, 0.264260f, 0.252381f, 0.240465f, 0.228512f, 0.216524f, 0.204504f, - 0.192453f, 0.180373f, 0.168265f, 0.156132f, 0.143976f, 0.131797f, 0.119599f, 0.107383f, - 0.095150f, 0.082903f, 0.070644f, 0.058374f, 0.046095f, 0.033809f, 0.021518f, 0.009223f -}; - /* LAGW_STRONG */ const float lag_window_8k_flt[17] = @@ -1369,24 +1082,7 @@ const Word32 lag_window_48k_32[16] = /* LAGW_STRONG */ /*----------------------------------------------------------------------------------* * LP analysis - grid of points for evaluating Chebyshev polynomials *----------------------------------------------------------------------------------*/ -const float grid50[(GRID50_POINTS-1)/2 - 1] = -{ - 0.9980267284f, 0.9921147013f, 0.9822872507f, 0.9685831611f, 0.9510565163f, - 0.9297764859f, 0.9048270525f, 0.8763066800f, 0.8443279255f, 0.8090169944f, - 0.7705132428f, 0.7289686274f, 0.6845471059f, 0.6374239897f, 0.5877852523f, - 0.5358267950f, 0.4817536741f, 0.4257792916f, 0.3681245527f, 0.3090169944f, - 0.2486898872f, 0.1873813146f, 0.1253332336f, 0.0627905195f -}; - -const float grid40[(GRID40_POINTS-1)/2 - 1] = -{ - 0.9969173337f, 0.9876883406f, 0.9723699204f, 0.9510565163f, 0.9238795325f, - 0.8910065242f, 0.8526401644f, 0.8090169944f, 0.7604059656f, 0.7071067812f, - 0.6494480483f, 0.5877852523f, 0.5224985647f, 0.4539904997f, 0.3826834324f, - 0.3090169944f, 0.2334453639f, 0.1564344650f, 0.0784590957f -}; -#ifdef IVAS_FLOAT_FIXED const Word16 grid50_fx[(GRID50_POINTS - 1) / 2 - 1] = {//Q15 32703, 32510, 32188, 31739, 31164, 30467, @@ -1403,34 +1099,6 @@ const Word16 grid40_fx[(GRID40_POINTS - 1) / 2 - 1] = 2571 }; -#endif - - -const float grid100[GRID100_POINTS+1] = -{ - 1.0000000000f, 0.9995065331f, 0.9980267286f, 0.9955619574f, 0.9921147227f, - 0.9876883626f, 0.9822872281f, 0.9759167433f, 0.9685831666f, 0.9602936506f, - 0.9510565400f, 0.9408807755f, 0.9297764897f, 0.9177545905f, 0.9048270583f, - 0.8910065293f, 0.8763066530f, 0.8607420325f, 0.8443279266f, 0.8270805478f, - 0.8090170026f, 0.7901549935f, 0.7705132365f, 0.7501110435f, 0.7289685607f, - 0.7071067691f, 0.6845470667f, 0.6613118052f, 0.6374239326f, 0.6129069924f, - 0.5877852440f, 0.5620833635f, 0.5358267426f, 0.5090413690f, 0.4817536175f, - 0.4539904296f, 0.4257791936f, 0.3971477747f, 0.3681245446f, 0.3387379050f, - 0.3090169728f, 0.2789910734f, 0.2486898303f, 0.2181431651f, 0.1873812228f, - 0.1564343721f, 0.1253331155f, 0.0941081867f, 0.0627903789f, 0.0314107276f, - -0.0000000437f, -0.0314108171f, -0.0627905875f, -0.0941083953f, -0.1253333241f, - -0.1564345658f, -0.1873814315f, -0.2181433737f, -0.2486900240f, -0.2789911330f, - -0.3090170324f, -0.3387379944f, -0.3681246340f, -0.3971479833f, -0.4257793725f, - -0.4539906085f, -0.4817537963f, -0.5090415478f, -0.5358269215f, -0.5620835423f, - -0.5877854228f, -0.6129072309f, -0.6374241710f, -0.6613120437f, -0.6845472455f, - -0.7071067691f, -0.7289686203f, -0.7501111031f, -0.7705132961f, -0.7901550531f, - -0.8090170622f, -0.8270806074f, -0.8443279862f, -0.8607420921f, -0.8763067126f, - -0.8910065889f, -0.9048271179f, -0.9177547097f, -0.9297765493f, -0.9408808351f, - -0.9510565996f, -0.9602937698f, -0.9685832262f, -0.9759168029f, -0.9822872877f, - -0.9876883626f, -0.9921147227f, -0.9955619574f, -0.9980267286f, -0.9995065331f, - -1.0000000000f -}; - /*----------------------------------------------------------------------------------* * Sinus & Cosinus - table for the FFT and IFFT of 256 points, * dimension of the table = 161 @@ -1688,36 +1356,6 @@ const Word16 sincos_t_ext_fx[641] = -23028 };/*Q15*/ -#ifndef IVAS_FLOAT_FIXED -const float Asr_LP32[41] = -{ - 0.00000000f, 0.00074311f, 0.00168152f, 0.00177319f, -0.00000000f, -0.00345938f, -0.00653664f, -0.00604727f, - 0.00000000f, 0.00988729f, 0.01759782f, 0.01556464f, -0.00000000f, -0.02426962f, -0.04321351f, -0.03907450f, - 0.00000000f, 0.07133152f, 0.15563209f, 0.22382514f, 0.25000000f, 0.22382514f, 0.15563209f, 0.07133152f, - 0.00000000f, -0.03907450f, -0.04321351f, -0.02426962f, -0.00000000f, 0.01556464f, 0.01759782f, 0.00988729f, - 0.00000000f, -0.00604727f, -0.00653664f, -0.00345938f, -0.00000000f, 0.00177319f, 0.00168152f, 0.00074311f, - 0.00000000f -}; - -const float Asr_LP16[21] = -{ - 0.00000000f, 0.00336304f, -0.00000000f, -0.01307328f, 0.00000000f, 0.03519564f, -0.00000000f, -0.08642702f, - 0.00000000f, 0.31126418f, 0.50000000f, 0.31126418f, 0.00000000f, -0.08642702f, -0.00000000f, 0.03519564f, - 0.00000000f, -0.01307328f, -0.00000000f, 0.00336304f, 0.00000000f -}; - -const float Asr_LP48[61] = -{ - 0.00000000f, 0.00029287f, 0.00071673f, 0.00112101f, 0.00127506f, 0.00094416f, -0.00000000f, -0.00147233f, - -0.00311928f, -0.00435776f, -0.00452368f, -0.00310585f, 0.00000000f, 0.00430863f, 0.00872382f, 0.01173188f, - 0.01180048f, 0.00789952f, -0.00000000f, -0.01061594f, -0.02137287f, -0.02880901f, -0.02932326f, -0.02010347f, - 0.00000000f, 0.02990484f, 0.06622310f, 0.10375473f, 0.13646949f, 0.15876038f, 0.16666667f, 0.15876038f, - 0.13646949f, 0.10375473f, 0.06622310f, 0.02990484f, 0.00000000f, -0.02010347f, -0.02932326f, -0.02880901f, - -0.02137287f, -0.01061594f, -0.00000000f, 0.00789952f, 0.01180048f, 0.01173188f, 0.00872382f, 0.00430863f, - 0.00000000f, -0.00310585f, -0.00452368f, -0.00435776f, -0.00311928f, -0.00147233f, -0.00000000f, 0.00094416f, - 0.00127506f, 0.00112101f, 0.00071673f, 0.00029287f, 0.00000000f -}; -#endif const Word16 Asr_LP16_fx[21] = { @@ -1775,40 +1413,6 @@ const Word16 fft256_read_indexes[]= // Q0 /*----------------------------------------------------------------------------------* * Sinus & Cosinus - table for the DCT-IV based 2 *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float sin_table256[] = -{ - 0.003067957f, 0.009203755f, 0.015339206f, 0.02147408f, 0.027608146f, 0.033741172f, 0.039872928f, 0.046003182f, 0.052131705f, - 0.058258265f, 0.064382631f, 0.070504573f, 0.076623861f, 0.082740265f, 0.088853553f, 0.094963495f, 0.101069863f, 0.107172425f, - 0.113270952f, 0.119365215f, 0.125454983f, 0.131540029f, 0.137620122f, 0.143695033f, 0.149764535f, 0.155828398f, 0.161886394f, - 0.167938295f, 0.173983873f, 0.180022901f, 0.186055152f, 0.192080397f, 0.198098411f, 0.204108966f, 0.210111837f, 0.216106797f, - 0.222093621f, 0.228072083f, 0.234041959f, 0.240003022f, 0.24595505f, 0.251897818f, 0.257831102f, 0.263754679f, 0.269668326f, - 0.275571819f, 0.281464938f, 0.28734746f, 0.293219163f, 0.299079826f, 0.30492923f, 0.310767153f, 0.316593376f, 0.322407679f, - 0.328209844f, 0.333999651f, 0.339776884f, 0.345541325f, 0.351292756f, 0.357030961f, 0.362755724f, 0.36846683f, 0.374164063f, - 0.379847209f, 0.385516054f, 0.391170384f, 0.396809987f, 0.402434651f, 0.408044163f, 0.413638312f, 0.419216888f, 0.424779681f, - 0.430326481f, 0.43585708f, 0.441371269f, 0.44686884f, 0.452349587f, 0.457813304f, 0.463259784f, 0.468688822f, 0.474100215f, - 0.479493758f, 0.484869248f, 0.490226483f, 0.495565262f, 0.500885383f, 0.506186645f, 0.51146885f, 0.516731799f, 0.521975293f, - 0.527199135f, 0.532403128f, 0.537587076f, 0.542750785f, 0.547894059f, 0.553016706f, 0.558118531f, 0.563199344f, 0.568258953f, - 0.573297167f, 0.578313796f, 0.583308653f, 0.588281548f, 0.593232295f, 0.598160707f, 0.603066599f, 0.607949785f, 0.612810082f, - 0.617647308f, 0.622461279f, 0.627251815f, 0.632018736f, 0.636761861f, 0.641481013f, 0.646176013f, 0.650846685f, 0.655492853f, - 0.660114342f, 0.664710978f, 0.669282588f, 0.673829f, 0.678350043f, 0.682845546f, 0.687315341f, 0.691759258f, 0.696177131f, - 0.700568794f, 0.70493408f, 0.709272826f, 0.713584869f, 0.717870045f, 0.722128194f, 0.726359155f, 0.730562769f, 0.734738878f, - 0.738887324f, 0.743007952f, 0.747100606f, 0.751165132f, 0.755201377f, 0.759209189f, 0.763188417f, 0.767138912f, 0.771060524f, - 0.774953107f, 0.778816512f, 0.782650596f, 0.786455214f, 0.790230221f, 0.793975478f, 0.797690841f, 0.801376172f, 0.805031331f, - 0.808656182f, 0.812250587f, 0.815814411f, 0.81934752f, 0.822849781f, 0.826321063f, 0.829761234f, 0.833170165f, 0.836547727f, - 0.839893794f, 0.84320824f, 0.846490939f, 0.849741768f, 0.852960605f, 0.856147328f, 0.859301818f, 0.862423956f, 0.865513624f, - 0.868570706f, 0.871595087f, 0.874586652f, 0.87754529f, 0.880470889f, 0.883363339f, 0.88622253f, 0.889048356f, 0.891840709f, - 0.894599486f, 0.897324581f, 0.900015892f, 0.902673318f, 0.905296759f, 0.907886116f, 0.910441292f, 0.91296219f, 0.915448716f, - 0.917900776f, 0.920318277f, 0.922701128f, 0.925049241f, 0.927362526f, 0.929640896f, 0.931884266f, 0.93409255f, 0.936265667f, - 0.938403534f, 0.940506071f, 0.942573198f, 0.944604837f, 0.946600913f, 0.94856135f, 0.950486074f, 0.952375013f, 0.954228095f, - 0.956045251f, 0.957826413f, 0.959571513f, 0.961280486f, 0.962953267f, 0.964589793f, 0.966190003f, 0.967753837f, 0.969281235f, - 0.970772141f, 0.972226497f, 0.97364425f, 0.975025345f, 0.976369731f, 0.977677358f, 0.978948175f, 0.980182136f, 0.981379193f, - 0.982539302f, 0.983662419f, 0.984748502f, 0.985797509f, 0.986809402f, 0.987784142f, 0.988721692f, 0.989622017f, 0.990485084f, - 0.99131086f, 0.992099313f, 0.992850414f, 0.993564136f, 0.994240449f, 0.994879331f, 0.995480755f, 0.996044701f, 0.996571146f, - 0.99706007f, 0.997511456f, 0.997925286f, 0.998301545f, 0.998640218f, 0.998941293f, 0.999204759f, 0.999430605f, 0.999618822f, - 0.999769405f, 0.999882347f, 0.999957645f, 0.999995294f -}; -#endif const Word16 sin_table256_fx[] = {//Q15 @@ -1845,28 +1449,6 @@ const Word16 sin_table256_fx[] = /*----------------------------------------------------------------------------------* * 1/4 resolution interpolation filter (-3 dB at 0.913*fs/2) *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float inter4_2[65] = -{ - 0.940000f, - 0.856390f, 0.632268f, 0.337560f, 0.059072f, - -0.131059f, -0.199393f, -0.158569f, -0.056359f, - 0.047606f, 0.106749f, 0.103705f, 0.052062f, - -0.015182f, -0.063705f, -0.073660f, -0.046497f, - -0.000983f, 0.038227f, 0.053143f, 0.040059f, - 0.009308f, -0.021674f, -0.037767f, -0.033186f, - -0.013028f, 0.010702f, 0.025901f, 0.026318f, - 0.013821f, -0.003645f, -0.016813f, -0.019855f, - -0.012766f, -0.000530f, 0.010080f, 0.014122f, - 0.010657f, 0.002594f, -0.005363f, -0.009344f, - -0.008101f, -0.003182f, 0.002330f, 0.005635f, - 0.005562f, 0.002844f, -0.000627f, -0.002993f, - -0.003362f, -0.002044f, -0.000116f, 0.001315f, - 0.001692f, 0.001151f, 0.000259f, -0.000417f, - -0.000618f, -0.000434f, -0.000133f, 0.000063f, - 0.000098f, 0.000048f, 0.000007f, 0.000000f -}; -#endif const Word16 inter4_2_fx_Q15[65] = @@ -1961,29 +1543,6 @@ const Word16 pitch_inter4_1[UP_SAMP * L_INTERPOL1 + 1] = /*----------------------------------------------------------------------------------* * 1/6 resolution interpolation filter (-3 dB at 0.95*fs/2) *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float inter6_2[PIT_FIR_SIZE6_2] = -{ - 0.949986374119862F, 0.911081104469830F, 0.800115099292852F, 0.633320673120883F, 0.434558462154083F, 0.231177017786780F, - 0.049378173063717F, -0.090039611811170F, -0.174782560924477F, -0.202477516286360F, -0.180218293244902F, -0.122429229978978F, - -0.047552067127379F, 0.025733669494145F, 0.081995376731897F, 0.111581381838187F, 0.111781798292302F, 0.086499988914996F, - 0.044629684447068F, -0.002416435594242F, -0.043440027386915F, -0.069857782812169F, -0.077293683967992F, -0.066098268486336F, - -0.040782649068098F, -0.008590773415008F, 0.022397654632128F, 0.045171360007974F, 0.055274128677739F, 0.051578034020076F, - 0.036232016917169F, 0.013869500422767F, -0.009680698856947F, -0.028843394410080F, -0.039560663181280F, -0.040095747151623F, - -0.031231107680685F, -0.015866154815425F, 0.001841532922707F, 0.017553701334759F, 0.027778555138199F, 0.030612329573745F, - 0.026046143652186F, 0.015803012695681F, 0.002782973481834F, -0.009720124055079F, -0.018826488463900F, -0.022710487805852F, - -0.020936374578238F, -0.014436620433404F, -0.005169079181373F, 0.004437651243491F, 0.012100372954920F, 0.016207075406240F, - 0.016135389123271F, 0.012306629559665F, 0.005986734945567F, -0.001094950878591F, -0.007200842219958F, -0.010998212848124F, - -0.011835179448280F, -0.009826566540474F, -0.005747665080695F, -0.000780600030751F, 0.003810613287985F, 0.006990479233404F, - 0.008174249796791F, 0.007317375965949F, 0.004864690818765F, 0.001587005259212F, -0.001642504305841F, -0.004070609517416F, - -0.005230670504649F, -0.005019147682711F, -0.003673879223241F, -0.001671460853812F, 0.000420750005150F, 0.002095384947391F, - 0.003020513665060F, 0.003095468528243F, 0.002441025550729F, 0.001335514431569F, 0.000120805384516F, -0.000893340757369F, - -0.001501610712267F, -0.001636887611783F, -0.001362571776250F, -0.000832126175863F, -0.000232033375863F, 0.000273627139471F, - 0.000582092683087F, 0.000666445711949F, 0.000566088888178F, 0.000360374058147F, 0.000136306914913F, -0.000038864994777F, - -0.000132755824518F, -0.000148377158880F, -0.000112937171810F, -0.000061132514471F, -0.000019974224468F, -0.000000460344975F, - 0.000001976848453F -}; -#endif /* 1/6 resolution interpolation filter (-3 dB at 0.95*fs/2) */ const Word16 pitch_inter6_2[PIT_FIR_SIZE6_2] = @@ -2102,41 +1661,6 @@ const Word16 pitch_inter6_2[PIT_FIR_SIZE6_2] = * filter parameters: fs/2=32000, fc=6400, gain=5.0, n=61 *----------------------------------------------------------------------------------*/ -static const float filter_LP12_180H[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/12, hann( N )' */ -{ - 1.00000000f, 0.98854064f, 0.95463880f, 0.89969939f, 0.82598609f, 0.73650898f, - 0.63487604f, 0.52511631f, 0.41148461f, 0.29825804f, 0.18953518f, 0.08904855f, - 0.00000000f, -0.07507283f, -0.13439242f, -0.17699551f, -0.20274380f, -0.21229157f, - -0.20701353f, -0.18889782f, -0.16041129f, -0.12434529f, -0.08365114f, -0.04127482f, - -0.00000000f, 0.03769212f, 0.06973903f, 0.09458356f, 0.11122751f, 0.11925054f, - 0.11879487f, 0.11051837f, 0.09552022f, 0.07524478f, 0.05137065f, 0.02569204f, - 0.00000000f, -0.02402919f, -0.04493222f, -0.06153821f, -0.07302535f, -0.07895262f, - -0.07926575f, -0.07427839f, -0.06463103f, -0.05123120f, -0.03517999f, -0.01768990f, - -0.00000000f, 0.01670619f, 0.03137493f, 0.04314423f, 0.05139005f, 0.05575472f, - 0.05615642f, 0.05278011f, 0.04605151f, 0.03659641f, 0.02518906f, 0.01269314f, - 0.00000000f, -0.01203202f, -0.02263294f, -0.03116789f, -0.03717261f, -0.04037571f, - -0.04070711f, -0.03829248f, -0.03343501f, -0.02658610f, -0.01830764f, -0.00922872f, - -0.00000000f, 0.00875109f, 0.01646140f, 0.02266671f, 0.02702792f, 0.02934764f, - 0.02957617f, 0.02780739f, 0.02426498f, 0.01928068f, 0.01326622f, 0.00668131f, - 0.00000000f, -0.00632223f, -0.01187840f, -0.01633509f, -0.01945125f, -0.02108964f, - -0.02122066f, -0.01991853f, -0.01735069f, -0.01376125f, -0.00945018f, -0.00474975f, - -0.00000000f, 0.00447492f, 0.00838805f, 0.01150721f, 0.01366775f, 0.01478001f, - 0.01483115f, 0.01388152f, 0.01205626f, 0.00953282f, 0.00652562f, 0.00326903f, - 0.00000000f, -0.00305850f, -0.00571204f, -0.00780638f, -0.00923565f, -0.00994662f, - -0.00993903f, -0.00926212f, -0.00800799f, -0.00630232f, -0.00429337f, -0.00214002f, - -0.00000000f, 0.00198116f, 0.00367946f, 0.00499962f, 0.00587975f, 0.00629327f, - 0.00624819f, 0.00578397f, 0.00496633f, 0.00388057f, 0.00262394f, 0.00129781f, - 0.00000000f, -0.00118189f, -0.00217597f, -0.00292996f, -0.00341330f, -0.00361747f, - -0.00355476f, -0.00325545f, -0.00276400f, -0.00213446f, -0.00142560f, -0.00069606f, - -0.00000000f, 0.00061651f, 0.00111820f, 0.00148212f, 0.00169815f, 0.00176842f, - 0.00170582f, 0.00153178f, 0.00127370f, 0.00096205f, 0.00062756f, 0.00029879f, - -0.00000000f, -0.00025029f, -0.00044009f, -0.00056414f, -0.00062342f, -0.00062426f, - -0.00057701f, -0.00049453f, -0.00039069f, -0.00027889f, -0.00017088f, -0.00007586f, - -0.00000000f, 0.00005374f, 0.00008534f, 0.00009723f, 0.00009358f, 0.00007948f, - 0.00006013f, 0.00004011f, 0.00002289f, 0.00001046f, 0.00000327f, 0.00000042f, - 0.00000000f -}; - const Word16 filter_LP12_180H_fx[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/12, hann( N )' */ {//Q14 16384, 16196, 15641, 14741, 13533, 12067, @@ -2206,47 +1730,6 @@ const Word16 filter_LP12_180H_13b_fx[] = /*Q13 Sincfilt.m: N=180*2+1, Fmin=0, 0 }; -static const float filter_LP15_180H[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/15, hann( N )' */ -{ - 1.00000000f, 0.99262960f, 0.97071645f, 0.93484826f, 0.88598337f, - 0.82541986f, 0.75475374f, 0.67582786f, 0.59067328f, 0.50144522f, - 0.41035570f, 0.31960540f, 0.23131699f, 0.14747211f, 0.06985439f, - 0.00000000f, -0.06084233f, -0.11174093f, -0.15209937f, -0.18166306f, - -0.20051411f, -0.20905505f, -0.20798222f, -0.19825005f, -0.18102779f, - -0.15765038f, -0.12956550f, -0.09827869f, -0.06529875f, -0.03208525f, - -0.00000000f, 0.02973580f, 0.05607741f, 0.07818439f, 0.09543959f, - 0.10745905f, 0.11409270f, 0.11541631f, 0.11171520f, 0.10346089f, - 0.09128169f, 0.07592875f, 0.05823905f, 0.03909687f, 0.01939543f, - 0.00000000f, -0.01828583f, -0.03474981f, -0.04879543f, -0.05996041f, - -0.06792872f, -0.07253607f, -0.07376881f, -0.07175666f, -0.06675991f, - -0.05915169f, -0.04939656f, -0.03802614f, -0.02561328f, -0.01274565f, - -0.00000000f, 0.01208179f, 0.02301411f, 0.03238554f, 0.03987272f, - 0.04524984f, 0.04839345f, 0.04928266f, 0.04799492f, 0.04469779f, - 0.03963720f, 0.03312292f, 0.02551190f, 0.01719053f, 0.00855630f, - 0.00000000f, -0.00811094f, -0.01544730f, -0.02173055f, -0.02674237f, - -0.03033123f, -0.03241557f, -0.03298387f, -0.03209149f, -0.02985488f, - -0.02644325f, -0.02206842f, -0.01697326f, -0.01141932f, -0.00567433f, - -0.00000000f, 0.00535923f, 0.01018613f, 0.01429886f, 0.01755714f, - 0.01986621f, 0.02117865f, 0.02149380f, 0.02085525f, 0.01934645f, - 0.01708469f, 0.01421394f, 0.01089691f, 0.00730662f, 0.00361802f, - 0.00000000f, -0.00339188f, -0.00642164f, -0.00897788f, -0.01097732f, - -0.01236693f, -0.01312444f, -0.01325748f, -0.01280137f, -0.01181573f, - -0.01038024f, -0.00858967f, -0.00654854f, -0.00436567f, -0.00214887f, - -0.00000000f, 0.00198936f, 0.00374143f, 0.00519494f, 0.00630684f, - 0.00705299f, 0.00742798f, 0.00744401f, 0.00712902f, 0.00652419f, - 0.00568101f, 0.00465798f, 0.00351733f, 0.00232168f, 0.00113102f, - 0.00000000f, -0.00102431f, -0.00190408f, -0.00261180f, -0.00313077f, - -0.00345499f, -0.00358855f, -0.00354447f, -0.00334328f, -0.00301127f, - -0.00257862f, -0.00207746f, -0.00154002f, -0.00099694f, -0.00047581f, - -0.00000000f, 0.00041214f, 0.00074776f, 0.00099963f, 0.00116592f, - 0.00124972f, 0.00125829f, 0.00120217f, 0.00109420f, 0.00094845f, - 0.00077928f, 0.00060035f, 0.00042395f, 0.00026030f, 0.00011724f, - 0.00000000f, -0.00008882f, -0.00014902f, -0.00018252f, -0.00019287f, - -0.00018476f, -0.00016347f, -0.00013434f, -0.00010230f, -0.00007148f, - -0.00004496f, -0.00002456f, -0.00001086f, -0.00000332f, -0.00000042f, - -0.00000000f -}; - const Word16 filter_LP15_180H_fx[] = /* Sincfilt.m: N=180*2+1, Fmin=0, Fmax=1/15, hann( N )' */ {//Q14 16384, 16263, 15904, 15317, 14516, 13524, @@ -2317,31 +1800,6 @@ const Word16 filter_LP15_180H_13b_fx[6 * 31] = /*Q13 Sincfilt.m: N=180*2+1, Fmi 0 }; -static const float filter_LP24_90H[] = { - - 0.62500000f, 0.62302684f, 0.61713239f, 0.60739135f, 0.59392688f, - 0.57690853f, 0.55654955f, 0.53310336f, 0.50685949f, 0.47813890f, - 0.44728886f, 0.41467745f, 0.38068777f, 0.34571201f, 0.31014542f, - 0.27438036f, 0.23880054f, 0.20377540f, 0.16965495f, 0.13676502f, - 0.10540301f, 0.07583422f, 0.04828883f, 0.02295955f, 0.00000000f, - -0.02047625f, -0.03839588f, -0.05372532f, -0.06646962f, -0.07667063f, - -0.08440465f, -0.08977957f, -0.09293151f, -0.09402116f, -0.09322978f, - -0.09075508f, -0.08680689f, -0.08160288f, -0.07536433f, -0.06831205f, - -0.06066245f, -0.05262401f, -0.04439397f, -0.03615555f, -0.02807546f, - -0.02030199f, -0.01296350f, -0.00616748f, -0.00000000f, 0.00547430f, - 0.01021181f, 0.01418909f, 0.01740171f, 0.01986272f, 0.02160081f, - 0.02265833f, 0.02308912f, 0.02295617f, 0.02232938f, 0.02128318f, - 0.01989437f, 0.01823991f, 0.01639502f, 0.01443144f, 0.01241584f, - 0.01040857f, 0.00846270f, 0.00662323f, 0.00492667f, 0.00340087f, - 0.00206511f, 0.00093039f, 0.00000000f, -0.00072977f, -0.00126877f, - -0.00163197f, -0.00183843f, -0.00191018f, -0.00187107f, -0.00174574f, - -0.00155856f, -0.00133271f, -0.00108939f, -0.00084707f, -0.00062106f, - -0.00042304f, -0.00026095f, -0.00013888f, -0.00005723f, -0.00001296f, - -0.00000000f, -0.00000000f, -0.00000000f, -0.00000000f, -0.00000000f, - -0.00000000f, - -0.00000000f -}; - const Word16 filter_LP24_90H_fx[] = {//Q14 @@ -2395,27 +1853,6 @@ const Word16 filter_LP24_90H_13b_fx[] = 0 }; - -static const float filter_LP3_90H[] = /* Sincfilt.m: N=90*2+1, Fmin=0, Fmax=1/3, hann( N )' */ -{ - 1.00000000f, 0.82674145f, 0.41299304f, 0.00000000f, -0.20574231f, -0.16414228f, - -0.00000000f, 0.11638725f, 0.10137190f, 0.00000000f, -0.08020564f, -0.07244401f, - -0.00000000f, 0.06039577f, 0.05561375f, 0.00000000f, -0.04776011f, -0.04448829f, - -0.00000000f, 0.03891245f, 0.03651267f, 0.00000000f, -0.03231551f, -0.03046677f, - -0.00000000f, 0.02717149f, 0.02569502f, 0.00000000f, -0.02302575f, -0.02181436f, - -0.00000000f, 0.01960070f, 0.01858630f, 0.00000000f, -0.01671751f, -0.01585488f, - -0.00000000f, 0.01425599f, 0.01351396f, -0.00000000f, -0.01213249f, -0.01148889f, - -0.00000000f, 0.01028699f, 0.00972562f, 0.00000000f, -0.00867534f, -0.00818410f, - -0.00000000f, 0.00726427f, 0.00683387f, -0.00000000f, -0.00602813f, -0.00565135f, - -0.00000000f, 0.00494677f, 0.00461782f, 0.00000000f, -0.00400399f, -0.00371817f, - -0.00000000f, 0.00318651f, 0.00293988f, -0.00000000f, -0.00248317f, -0.00227240f, - -0.00000000f, 0.00188444f, 0.00170665f, 0.00000000f, -0.00138200f, -0.00123460f, - -0.00000000f, 0.00096839f, 0.00084908f, -0.00000000f, -0.00063685f, -0.00054348f, - 0.00000000f, 0.00038113f, 0.00031171f, 0.00000000f, -0.00019534f, -0.00014798f, - -0.00000000f, 0.00007391f, 0.00004679f, -0.00000000f, -0.00001145f, -0.00000283f, - -0.00000000f -}; - const Word16 filter_LP3_90H_fx[] = /* Sincfilt.m: N=90*2+1, Fmin=0, Fmax=1/3, hann( N )' */ {//Q14 16384, 13545, 6766, 0, -3371, -2689, @@ -2436,56 +1873,6 @@ const Word16 filter_LP3_90H_fx[] = /* Sincfilt.m: N=90*2+1, Fmin=0, Fmax=1/3, 0 }; -static const float filter_LP15_360H[] = /* Sincfilt.m: N=360*2+1, Fmin=0, Fmax=1/15, hann( N )' */ -{ - 1.00000000f, 0.99268640f, 0.97093867f, 0.93532989f, 0.88679510f, 0.82660196f, 0.75631099f, 0.67772690f, - 0.59284259f, 0.50377777f, 0.41271428f, 0.32183024f, 0.23323527f, 0.14890901f, 0.07064471f, 0.00000000f, - -0.06174384f, -0.11361280f, -0.15496039f, -0.18547676f, -0.20518652f, -0.21443575f, -0.21386869f, -0.20439528f, - -0.18715077f, -0.16344917f, -0.13473211f, -0.10251518f, -0.06833357f, -0.03368904f, -0.00000000f, 0.03144362f, - 0.05951924f, 0.08330302f, 0.10209294f, 0.11542293f, 0.12306791f, 0.12503981f, 0.12157498f, 0.11311391f, - 0.10027413f, 0.08381753f, 0.06461370f, 0.04360066f, 0.02174455f, 0.00000000f, -0.02072746f, -0.03961549f, - -0.05595444f, -0.06917113f, -0.07884629f, -0.08472521f, -0.08672137f, -0.08491313f, -0.07953401f, -0.07095693f, - -0.05967349f, -0.04626915f, -0.03139548f, -0.01574075f, -0.00000000f, 0.01515402f, 0.02909808f, 0.04128258f, - 0.05125197f, 0.05866038f, 0.06328236f, 0.06501815f, 0.06389360f, 0.06005485f, 0.05375815f, 0.04535547f, - 0.03527650f, 0.02400801f, 0.01207150f, 0.00000000f, -0.01168480f, -0.02249426f, -0.03199250f, -0.03981317f, - -0.04567293f, -0.04938087f, -0.05084386f, -0.05006752f, -0.04715306f, -0.04229010f, -0.03574599f, -0.02785210f, - -0.01898788f, -0.00956319f, -0.00000000f, 0.00928603f, 0.01790311f, 0.02549938f, 0.03177686f, 0.03650265f, - 0.03951708f, 0.04073850f, 0.04016462f, 0.03787037f, 0.03400261f, 0.02877179f, 0.02244121f, 0.01531429f, - 0.00772039f, 0.00000000f, -0.00751019f, -0.01449168f, -0.02065736f, -0.02576304f, -0.02961675f, -0.03208568f, - -0.03310029f, -0.03265561f, -0.03080978f, -0.02767986f, -0.02343523f, -0.01828891f, -0.01248723f, -0.00629832f, - -0.00000000f, 0.00613249f, 0.01183829f, 0.01688181f, 0.02106227f, 0.02422142f, 0.02624931f, 0.02708778f, - 0.02673160f, 0.02522739f, 0.02267018f, 0.01919813f, 0.01498536f, 0.01023356f, 0.00516248f, 0.00000000f, - -0.00502795f, -0.00970715f, -0.01384402f, -0.01727353f, -0.01986554f, -0.02152959f, -0.02221779f, -0.02192576f, - -0.02069173f, -0.01859376f, -0.01574532f, -0.01228947f, -0.00839187f, -0.00423301f, -0.00000000f, 0.00412174f, - 0.00795646f, 0.01134547f, 0.01415358f, 0.01627438f, 0.01763405f, 0.01819377f, 0.01795046f, 0.01693597f, - 0.01521482f, 0.01288044f, 0.01005046f, 0.00686086f, 0.00345963f, 0.00000000f, -0.00336638f, -0.00649597f, - -0.00925939f, -0.01154665f, -0.01327141f, -0.01437412f, -0.01482390f, -0.01461907f, -0.01378646f, -0.01237944f, - -0.01047492f, -0.00816931f, -0.00557380f, -0.00280912f, -0.00000000f, 0.00273035f, 0.00526559f, 0.00750113f, - 0.00934836f, 0.01073805f, 0.01162284f, 0.01197870f, 0.01180528f, 0.01112531f, 0.00998290f, 0.00844105f, - 0.00657831f, 0.00448494f, 0.00225863f, -0.00000000f, -0.00219185f, -0.00422367f, -0.00601190f, -0.00748609f, - -0.00859158f, -0.00929139f, -0.00956735f, -0.00942030f, -0.00886950f, -0.00795125f, -0.00671674f, -0.00522941f, - -0.00356175f, -0.00179189f, -0.00000000f, 0.00173531f, 0.00334034f, 0.00474942f, 0.00590751f, 0.00677226f, - 0.00731550f, 0.00752400f, 0.00739958f, 0.00695854f, 0.00623048f, 0.00525657f, 0.00408738f, 0.00278032f, - 0.00139692f, 0.00000000f, -0.00134916f, -0.00259345f, -0.00368229f, -0.00457361f, -0.00523547f, -0.00564706f, - -0.00579926f, -0.00569462f, -0.00534685f, -0.00477983f, -0.00402617f, -0.00312550f, -0.00212248f, -0.00106459f, - -0.00000000f, 0.00102461f, 0.00196604f, 0.00278637f, 0.00345440f, 0.00394682f, 0.00424892f, 0.00435488f, - 0.00426778f, 0.00399900f, 0.00356752f, 0.00299868f, 0.00232288f, 0.00157398f, 0.00078772f, -0.00000000f, - -0.00075466f, -0.00144465f, -0.00204251f, -0.00252601f, -0.00287889f, -0.00309135f, -0.00316023f, -0.00308882f, - -0.00288648f, -0.00256794f, -0.00215242f, -0.00166255f, -0.00112325f, -0.00056046f, -0.00000000f, 0.00053364f, - 0.00101829f, 0.00143502f, 0.00176882f, 0.00200907f, 0.00214985f, 0.00218995f, 0.00213269f, 0.00198558f, - 0.00175975f, 0.00146927f, 0.00113036f, 0.00076058f, 0.00037792f, 0.00000000f, -0.00035672f, -0.00067764f, - -0.00095057f, -0.00116614f, -0.00131812f, -0.00140347f, -0.00142235f, -0.00137791f, -0.00127596f, -0.00112458f, - -0.00093361f, -0.00071406f, -0.00047757f, -0.00023583f, -0.00000000f, 0.00021973f, 0.00041459f, 0.00057751f, - 0.00070338f, 0.00078915f, 0.00083382f, 0.00083835f, 0.00080551f, 0.00073960f, 0.00064615f, 0.00053157f, - 0.00040275f, 0.00026674f, 0.00013039f, -0.00000000f, -0.00011891f, -0.00022183f, -0.00030537f, -0.00036737f, - -0.00040691f, -0.00042423f, -0.00042061f, -0.00039828f, -0.00036014f, -0.00030964f, -0.00025049f, -0.00018648f, - -0.00012124f, -0.00005812f, -0.00000000f, 0.00005082f, 0.00009265f, 0.00012448f, 0.00014596f, 0.00015731f, - 0.00015929f, 0.00015311f, 0.00014024f, 0.00012237f, 0.00010126f, 0.00007860f, 0.00005596f, 0.00003466f, - 0.00001576f, 0.00000000f, -0.00001220f, -0.00002074f, -0.00002578f, -0.00002769f, -0.00002704f, -0.00002448f, - -0.00002068f, -0.00001629f, -0.00001190f, -0.00000794f, -0.00000472f, -0.00000238f, -0.00000092f, -0.00000021f, - -0.00000000f -}; - const Word16 filter_LP15_360H_13b_fx[] = /* Sincfilt.m: N=360*2+1, Fmin=0, Fmax=1/15, hann( N )' */ {//Q13 @@ -2538,49 +1925,6 @@ const Word16 filter_LP15_360H_13b_fx[] = /* Sincfilt.m: N=360*2+1, Fmin=0, Fma }; -static const float filter_LP30_300K[LFE_PLC_FDEL + 1] = /* 800/24000 LP filter, Kaiser(5)-windowed sinc */ -{ - 1.000674458058088f, 0.998821736068880f, 0.993276134431268f, 0.984075242985249f, - 0.971281368567695f, 0.954981023938107f, 0.935284218782909f, 0.912323559230714f, 0.886253164041403f, 0.857247407283176f, 0.825499498868107f, 0.791219915763123f, - 0.754634698015982f, 0.715983624922104f, 0.675518287696807f, 0.633500075899008f, 0.590198095568480f, 0.545887037583023f, 0.500845015109584f, 0.455351389211537f, - 0.409684601681821f, 0.364120033999184f, 0.318927910954646f, 0.274371266971919f, 0.230703992454581f, 0.188168976642057f, 0.146996362454873f, 0.107401927667902f, - 0.069585605480302f, 0.033730156165682f, 0.000000000000000f, -0.031459779907115f, -0.060524257893541f, -0.087089303849186f, -0.111072035585998f, -0.132411083666009f, - -0.151066668632262f, -0.167020492324437f, -0.180275446665744f, -0.190855144963741f, -0.198803282359248f, -0.204182833569538f, -0.207075097490179f, -0.207578599531267f, - -0.205807863756478f, -0.201892067956601f, -0.195973595714002f, -0.188206500292867f, -0.178754895816092f, -0.167791291658583f, -0.155494886295674f, -0.142049836993021f, - -0.127643521710976f, -0.112464809424174f, -0.096702354729368f, -0.080542932136516f, -0.064169824816426f, -0.047761281820773f, -0.031489056906366f, -0.015517041095534f, - -0.000000000000000f, 0.014917574260985f, 0.029102487992906f, 0.042433740493679f, 0.054803282432790f, 0.066116633644684f, 0.076293357387017f, 0.085267389568141f, - 0.092987222893292f, 0.099415947300653f, 0.104531149442952f, 0.108324675303768f, 0.110802261307711f, 0.111983040477936f, 0.111898931302253f, 0.110593917980261f, - 0.108123231629804f, 0.104552442823964f, 0.099956476503483f, 0.094418560858996f, 0.088029122199148f, 0.080884638112374f, 0.073086461390995f, 0.064739627216952f, - 0.055951656010794f, 0.046831364122825f, 0.037487694201930f, 0.028028576619426f, 0.018559832758953f, 0.009184130316920f, 0.000000000000000f, -0.008899077833673f, - -0.017425508954439f, -0.025498336799142f, -0.033043904125797f, -0.039996420202619f, -0.046298430034290f, -0.051901183227281f, -0.056764901197143f, -0.060858942512036f, - -0.064161867237223f, -0.066661402183665f, -0.068354309960014f, -0.069246165671283f, -0.069351045990393f, -0.068691136142401f, -0.067296261078182f, -0.065203347768427f, - -0.062455826114615f, -0.059102976446919f, -0.055199231956630f, -0.050803444690492f, -0.045978123915449f, -0.040788655744719f, -0.035302512901102f, -0.029588463383146f, - -0.023715786597517f, -0.017753505230727f, -0.011769640760391f, -0.005830500056152f, -0.000000000000000f, 0.005660963528005f, 0.011095096591703f, 0.016249233048055f, - 0.021074801008288f, 0.025528226370712f, 0.029571270660946f, 0.033171301203264f, 0.036301492437752f, 0.038940957983168f, 0.041074813816290f, 0.042694173686921f, - 0.043796078605817f, 0.044383362923333f, 0.044464460152907f, 0.044053152279452f, 0.043168266823078f, 0.041833326398573f, 0.040076155916957f, 0.037928452914153f, - 0.035425326761062f, 0.032604812707877f, 0.029507366842562f, 0.026175348099430f, 0.022652493439727f, 0.018983392243758f, 0.015212965806120f, 0.011385957615051f, - 0.007546439827815f, 0.003737341030740f, 0.000000000000000f, -0.003626250237053f, -0.007104464194597f, -0.010400428215978f, -0.013482964409160f, -0.016324191914051f, - -0.018899743729691f, -0.021188937879338f, -0.023174902241370f, -0.024844652917233f, -0.026189126538454f, -0.027203167427198f, -0.027885471013551f, -0.028238485372702f, - -0.028268273171834f, -0.027984336705841f, -0.027399409049342f, -0.026529214656951f, -0.025392203001958f, -0.024009259053660f, -0.022403394554390f, -0.020599424168218f, - -0.018623630634283f, -0.016503423069419f, -0.014266992528252f, -0.011942968845900f, -0.009560082661099f, -0.007146836348458f, -0.004731187380886f, -0.002340247400255f, - -0.000000000000000f, 0.002264960078453f, 0.004431663958549f, 0.006478979817575f, 0.008387796576525f, 0.010141178783251f, 0.011724491753953f, 0.013125496411291f, - 0.014334413626760f, 0.015343958236254f, 0.016149343246852f, 0.016748255086059f, 0.017140801058498f, 0.017329430466152f, 0.017318831113971f, 0.017115803160437f, - 0.016729112480503f, 0.016169325884595f, 0.015448630680760f, 0.014580641176914f, 0.013580194795931f, 0.012463140518288f, 0.011246122375360f, 0.009946360692277f, - 0.008581433723615f, 0.007169062239669f, 0.005726899507575f, 0.004272328972190f, 0.002822271778885f, 0.001393006096850f, 0.000000000000000f, -0.001342240554036f, - -0.002620307334837f, -0.003822007965487f, -0.004936465732805f, -0.005954200495861f, -0.006867190352439f, -0.007668913965032f, -0.008354373683625f, -0.008920099829252f, - -0.009364136717633f, -0.009686011203768f, -0.009886684714174f, -0.009968489901688f, -0.009935053206892f, -0.009791204738949f, -0.009542876996106f, -0.009196994031523f, - -0.008761352733137f, -0.008244497926834f, -0.007655593030480f, -0.007004287982775f, -0.006300586146230f, -0.005554711838727f, -0.004776980084286f, -0.003977670092272f, - -0.003166903876795f, -0.002354531316336f, -0.001550022829358f, -0.000762370706914f, -0.000000000000000f, 0.000729310290334f, 0.001418495126151f, 0.002061260011482f, - 0.002652125955862f, 0.003186462696409f, 0.003660510203508f, 0.004071388640949f, 0.004417097090039f, 0.004696501477237f, 0.004909312264891f, 0.005056052573469f, - 0.005138017500263f, 0.005157225483069f, 0.005116362627157f, 0.005018720969532f, 0.004868131695749f, 0.004668894351409f, 0.004425703102949f, 0.004143571100898f, - 0.003827753983767f, 0.003483673532892f, 0.003116842448631f, 0.002732791167251f, 0.002336997576645f, 0.001934820418900f, 0.001531437089816f, 0.001131786461136f, - 0.000740517261749f, 0.000361942460803f, 0.000000000000000f, -0.000341779874521f, -0.000660300526856f, -0.000952918033795f, -0.001217453508689f, -0.001452198768859f, - -0.001655915552350f, -0.001827828567631f, -0.001967612730984f, -0.002075375010094f, -0.002151631348089f, -0.002197279189590f, -0.002213566168842f, -0.002202055549447f, - -0.002164589025628f, -0.002103247506293f, -0.002020310505568f, -0.001918214757337f, -0.001799512656910f, -0.001666831110806f, -0.001522831346357f, -0.001370170197022f, - -0.001211463337747f, -0.001049250898094f, -0.000885965830111f, -0.000723905353825f, -0.000565205746663f, -0.000411820684990f, -0.000265503287080f, -0.000127791948110f, - -0.000000000000000f -}; - static const Word16 filter_LP30_300K_fx[LFE_PLC_FDEL + 1] = {//Q14 16395,16364,16273,16123,15913,15646,15323,14947,14520,14045,13524,12963,12363,11730,11067,10379,9669, @@ -2602,35 +1946,35 @@ static const Word16 filter_LP30_300K_fx[LFE_PLC_FDEL + 1] = const Resampling_cfg resampling_cfg_tbl[] = { /* fin fout up.fact. den.fac. len.out filter coefs. filter length/2 filter mem./2 flags */ - { 8000, 8000, 12800, 12800, 8, 8, 5, 256, filter5_39s320_120, filter5_39s320_120_fx, 15, 15, RS_INV_FAC, RS_INV_FAC }, - { 12800, 12800, 8000, 8000, 5, 5, 8, 160, filter5_39s320_120, filter5_39s320_120_fx, L_FILT_UP8k, L_FILT_UP8k, RS_INV_FAC, RS_INV_FAC }, - { 16000, 16000, 8000, 8000, 6, 6, 12, 160, filter_LP12_180H, filter_LP12_180H_fx, 180 / 6, 180 / 6, 0, 0 }, - { 12800, 12800, 16000, 16000, 15, 15, 12, 320, filter_LP15_180H, filter_LP15_180H_fx, L_FILT_UP16k, L_FILT_UP16k, 0, 0 }, - { 12800, 12800, 32000, 32000, 15, 15, 6, 640, filter_LP15_180H, filter_LP15_180H_fx, L_FILT_UP32k, L_FILT_UP32k, 0, 0 }, - { 12800, 12800, 48000, 48000, 15, 15, 4, 960, filter_LP15_180H, filter_LP15_180H_fx, L_FILT_UP48k, L_FILT_UP48k, 0, 0 }, + { 8000, 8000, 12800, 12800, 8, 8, 5, 256, /*filter5_39s320_120,*/ filter5_39s320_120_fx, 15, 15, RS_INV_FAC, RS_INV_FAC }, + { 12800, 12800, 8000, 8000, 5, 5, 8, 160, /*filter5_39s320_120,*/ filter5_39s320_120_fx, L_FILT_UP8k, L_FILT_UP8k, RS_INV_FAC, RS_INV_FAC }, + { 16000, 16000, 8000, 8000, 6, 6, 12, 160, /*filter_LP12_180H,*/ filter_LP12_180H_fx, 180 / 6, 180 / 6, 0, 0 }, + { 12800, 12800, 16000, 16000, 15, 15, 12, 320, /*filter_LP15_180H,*/ filter_LP15_180H_fx, L_FILT_UP16k, L_FILT_UP16k, 0, 0 }, + { 12800, 12800, 32000, 32000, 15, 15, 6, 640, /*filter_LP15_180H,*/ filter_LP15_180H_fx, L_FILT_UP32k, L_FILT_UP32k, 0, 0 }, + { 12800, 12800, 48000, 48000, 15, 15, 4, 960, /*filter_LP15_180H,*/ filter_LP15_180H_fx, L_FILT_UP48k, L_FILT_UP48k, 0, 0 }, - { 16000, 16000, 12800, 12800, 12, 12, 15, 256, filter_LP15_180H, filter_LP15_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, - { 16000, 16000, 32000, 32000, 12, 12, 6, 640, filter_LP12_180H, filter_LP12_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, - { 16000, 16000, 48000, 48000, 12, 12, 4, 960, filter_LP12_180H, filter_LP12_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, + { 16000, 16000, 12800, 12800, 12, 12, 15, 256, /*filter_LP15_180H,*/ filter_LP15_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, + { 16000, 16000, 32000, 32000, 12, 12, 6, 640, /*filter_LP12_180H, */ filter_LP12_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, + { 16000, 16000, 48000, 48000, 12, 12, 4, 960, /*filter_LP12_180H,*/ filter_LP12_180H_fx, L_FILT16k, L_FILT16k, 0, 0 }, - { 32000, 32000, 12800, 12800, 6, 6, 15, 256, filter_LP15_180H, filter_LP15_180H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, - { 32000, 32000, 16000, 16000, 6, 6, 12, 320, filter_LP12_180H, filter_LP12_180H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, - { 32000, 32000, 25600, 25600, 12, 12, 15, 512, filter_LP15_360H, filter_LP15_360H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, - { 32000, 32000, 48000, 48000, 3, 3, 2, 960, filter_LP3_90H, filter_LP3_90H_fx, L_FILT32k, L_FILT32k, 0, 0 }, + { 32000, 32000, 12800, 12800, 6, 6, 15, 256, /*filter_LP15_180H,*/ filter_LP15_180H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, + { 32000, 32000, 16000, 16000, 6, 6, 12, 320, /*filter_LP12_180H,*/ filter_LP12_180H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, + { 32000, 32000, 25600, 25600, 12, 12, 15, 512, /*filter_LP15_360H,*/ filter_LP15_360H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, + { 32000, 32000, 48000, 48000, 3, 3, 2, 960, /*filter_LP3_90H,*/ filter_LP3_90H_fx, L_FILT32k, L_FILT32k, 0, 0 }, - { 48000, 48000, 12800, 12800, 4, 4, 15, 256, filter_LP15_180H, filter_LP15_180H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, - { 48000, 48000, 16000, 16000, 4, 4, 12, 320, filter_LP12_180H, filter_LP12_180H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, - { 48000, 48000, 25600, 25600, 8, 8, 15, 512, filter_LP15_360H, filter_LP15_360H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, - { 48000, 48000, 32000, 32000, 2, 2, 3, 640, filter_LP3_90H, filter_LP3_90H_fx, L_FILT48k, L_FILT48k, 0, 0 }, + { 48000, 48000, 12800, 12800, 4, 4, 15, 256, /*filter_LP15_180H,*/ filter_LP15_180H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, + { 48000, 48000, 16000, 16000, 4, 4, 12, 320, /*filter_LP12_180H,*/ filter_LP12_180H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, + { 48000, 48000, 25600, 25600, 8, 8, 15, 512, /*filter_LP15_360H,*/ filter_LP15_360H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, + { 48000, 48000, 32000, 32000, 2, 2, 3, 640, /*filter_LP3_90H,*/ filter_LP3_90H_fx, L_FILT48k, L_FILT48k, 0, 0 }, /* configs with NB 4kHz low-pass */ - { 16000, 16000, 12800, 12800, 12, 12, 15, 256, filter_LP24_90H, filter_LP24_90H_fx, L_FILT16k, L_FILT16k, 0, 0 }, - { 32000, 32000, 12800, 12800, 6, 6, 15, 256, filter_LP24_90H, filter_LP24_90H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, - { 48000, 48000, 12800, 12800, 4, 4, 15, 256, filter_LP24_90H, filter_LP24_90H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, + { 16000, 16000, 12800, 12800, 12, 12, 15, 256, /*filter_LP24_90H,*/ filter_LP24_90H_fx, L_FILT16k, L_FILT16k, 0, 0 }, + { 32000, 32000, 12800, 12800, 6, 6, 15, 256, /*filter_LP24_90H,*/ filter_LP24_90H_13b_fx, L_FILT32k, L_FILT32k, 0, 0 }, + { 48000, 48000, 12800, 12800, 4, 4, 15, 256, /*filter_LP24_90H,*/ filter_LP24_90H_13b_fx, L_FILT48k, L_FILT48k, 0, 0 }, /* entry for LFE PLC */ - { 1600, 1600, 48000, 48000, 30, 30, 1, 960, filter_LP30_300K, filter_LP30_300K_fx, LFE_PLC_FDEL/30,LFE_PLC_FDEL / 30, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } /* trailing entry (just to calculate the length of this table) */ + { 1600, 1600, 48000, 48000, 30, 30, 1, 960, /*filter_LP30_300K,*/ filter_LP30_300K_fx, LFE_PLC_FDEL/30,LFE_PLC_FDEL / 30, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, /* 0, */ 0, 0, 0, 0, 0 } /* trailing entry (just to calculate the length of this table) */ }; //den fac value for last entry is calculated as den.fac = (num.fac*fin)/fout @@ -2641,23 +1985,11 @@ const Resampling_cfg resampling_cfg_tbl[] = * LSP interpolation coefficients *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float interpol_frac2[NB_SUBFR] = { - 0.5f, 0.5f, 1.0f, 1.0f -}; -#endif const Word16 interpol_frac2_fx[NB_SUBFR] = {//Q15 16384, 16384, 32767, 32767 }; -const float interpol_frac2_mid[NB_SUBFR*3] = { - 0.25f, 0.75f, 0.0f, - 0.25f, 0.75f, 0.0f, - 0.0f, 0.25f, 0.75f, - 0.0f, 0.25f, 0.75f -}; - const Word16 interpol_frac2_mid_fx[NB_SUBFR * 3] = {//Q15 8191, 24575, 0, 8191, 24575, 0, @@ -2665,11 +1997,6 @@ const Word16 interpol_frac2_mid_fx[NB_SUBFR * 3] = {//Q15 0, 8191, 24575 };/*Q15*/ -#ifndef IVAS_FLOAT_FIXED -const float interpol_frac_12k8[NB_SUBFR] = { - 0.25f, 0.5f, 0.75f, 1.0f -}; -#endif const Word16 interpol_frac_12k8_fx[NB_SUBFR] = {//Q15 8191, 16383, 24575, 32767 @@ -2677,39 +2004,16 @@ const Word16 interpol_frac_12k8_fx[NB_SUBFR] = {//Q15 const Word16 interpol_frac_fx[NB_SUBFR] = { 8192, 16384, 24576,32767 };/*Q15*/ -const float interpol_isp_amr_wb[NB_SUBFR] = { - 0.45f, 0.8f, 0.96f, 1.0f -}; - const Word16 interpol_isp_amr_wb_fx[] = { 14746, 26214, 31457, 32767 };/*Q15*/ -const float interpol_frac_16k[NB_SUBFR16k] = { - 0.2f, 0.4f, 0.6f, 0.8f, 1.0f -}; - const Word16 interpol_frac_16k_fx[NB_SUBFR16k] = { 6554, 13107, 19661, 26214, 32767 };//Q15 -const float interpol_frac_mid[NB_SUBFR*3] = { - 0.5f, 0.5f, 0.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 0.5f, 0.5f, - 0.0f, 0.0f, 1.0f -}; - const Word16 interpol_frac_mid_fx[NB_SUBFR * 3] = { 16384, 16384, 0,//Q15 0, 32767, 0, 0, 16384, 16384, 0, 0, 32767 };/*Q15*/ -const float interpol_frac_mid_16k[NB_SUBFR16k*3] = { - 0.55f, 0.45f, 0.0f, - 0.15f, 0.85f, 0.0f, - 0.0f, 0.75f, 0.25f, - 0.0f, 0.35f, 0.65f, - 0.0f, 0.0f, 1.0f -}; - const Word16 interpol_frac_mid_16k_fx[NB_SUBFR16k * 3] = { 18022, 14746, 0,//Q15 4915, 27853, 0, 0, 24576, 8192, @@ -2717,51 +2021,23 @@ const Word16 interpol_frac_mid_16k_fx[NB_SUBFR16k * 3] = { 18022, 14746, 0,//Q15 0, 0, 32767 }; -const float interpol_frac_mid_relaxprev_12k8[NB_SUBFR*3] = { - 0.0f, 0.7f, 0.3f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f -}; - const Word16 interpol_frac_mid_relaxprev_12k8_fx[NB_SUBFR * 3] = { 0, 22938, 9830,//Q15 0, 0, 32767, 0, 0, 32767, 0, 0, 32767 };/*Q15*/ -const float interpol_frac_mid_FEC[NB_SUBFR*3] = { - 0.25f, 0.55f, 0.20f, - 0.00f, 0.70f, 0.30f, - 0.00f, 0.45f, 0.55f, - 0.00f, 0.00f, 1.00f -}; - const Word16 interpol_frac_mid_FEC_fx[NB_SUBFR * 3] = { 8192, 18022, 6554,//Q15 0, 22938, 9830, 0, 14746, 18022, 0, 0, 32767 };/*Q15*/ -const float interpol_frac_mid_relaxprev_pred_12k8[NB_SUBFR*3] = { - 0.15f, 0.70f, 0.15f, - 0.05f, 0.65f, 0.30f, - 0.00f, 0.50f, 0.50f, - 0.00f, 0.0f, 1.00f -}; - const Word16 interpol_frac_mid_relaxprev_pred_12k8_fx[NB_SUBFR * 3] = { 4915, 22938, 4915,//Q15 1638, 21299, 9830, 0, 16384, 16384, 0, 0, 32767 }; -const float interpol_frac_mid_relaxprev_16k[NB_SUBFR16k*3] = { - 0.0f, 0.7f, 0.3f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f -}; const Word16 interpol_frac_mid_relaxprev_16k_fx[NB_SUBFR16k * 3] = { 0, 22938, 9830,//Q15 0, 0, 32767, @@ -2770,14 +2046,6 @@ const Word16 interpol_frac_mid_relaxprev_16k_fx[NB_SUBFR16k * 3] = { 0, 22938, 9 0, 0, 32767 };/*Q15*/ -const float interpol_frac_mid_16k_FEC[NB_SUBFR16k*3] = { - 0.4f, 0.40f, 0.2f, - 0.0f, 0.80f, 0.20f, - 0.0f, 0.65f, 0.35f, - 0.0f, 0.15f, 0.85f, - 0.0f, 0.00f, 1.00f -}; - const Word16 interpol_frac_mid_16k_FEC_fx[NB_SUBFR16k * 3] = { 13107, 13107, 6554,//Q15 0, 26214, 6554, 0, 21299, 11469, @@ -2785,14 +2053,6 @@ const Word16 interpol_frac_mid_16k_FEC_fx[NB_SUBFR16k * 3] = { 13107, 13107, 655 0, 0, 32767 };/*Q15*/ -const float interpol_frac_mid_relaxprev_pred_16k[NB_SUBFR16k*3] = { - 0.15f, 0.70f, 0.15f, - 0.05f, 0.65f, 0.30f, - 0.00f, 0.50f, 0.50f, - 0.00f, 0.15f, 0.85f, - 0.00f, 0.0f, 1.00f -}; - const Word16 interpol_frac_mid_relaxprev_pred_16k_fx[NB_SUBFR16k * 3] = { 4915, 22938, 4915,//Q15 1638, 21299, 9830, 0, 16384, 16384, @@ -2805,7 +2065,6 @@ const Word16 interpol_frac_mid_relaxprev_pred_16k_fx[NB_SUBFR16k * 3] = { 4915, *----------------------------------------------------------------------------------*/ /* Innovative codebook config */ -#ifdef IVAS_FLOAT_FIXED const PulseConfig PulseConfTable[] = { /* Design rules: @@ -2854,56 +2113,6 @@ const PulseConfig PulseConfTable[] = { 96, 1, 1638/*0.20f Q13*/, 30, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 96 bits, 30 pulses, 4 tracks 8877 */ { 98, 1, 1638/*0.20f Q13*/, 31, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 98 bits, 31 pulses, 4 tracks 8887 */ }; -#else -const PulseConfig PulseConfTable[] = -{ - /* Design rules: - * ---> "fixed" + "tried-pair-pos"*2 = pulses & 0xfe - * ---> tracks with pulses % 3 == 0, have always TRACKPOS_FIXED_FIRST */ - /* bits,iter,alp,pulses,fixed,tried-pair-pos,codetrack */ - { 7, 4, 2.0f, 16384/*2.0f Q13*/, 1, 0, {8}, TRACKPOS_FREE_ONE }, /* 7 bits, 1 pulses, 4 tracks, 1000 free track */ - { 10, 4, 2.0f, 16384/*2.0f Q13*/, 2, 0, {8}, TRACKPOS_FIXED_EVEN }, /* 10 bits, 2 pulses, 4 tracks 1010 (used only even tracks designed for NB) */ - { 12, 4, 2.0f, 16384/*2.0f Q13*/, 2, 0, {8}, TRACKPOS_FIXED_TWO }, /* 12 bits, 2 pulses, 2 tracks 11 used all tracks ala AMR-WB 6.6 */ - { 15, 4, 2.0f, 16384/*2.0f Q13*/, 3, 0, {8}, TRACKPOS_FIXED_FIRST }, /* 15 bits, 3 pulses, 4 tracks 1110 fixed track to first ? */ - { 17, 6, 2.0f, 16384/*2.0f Q13*/, 3, 0, {8}, TRACKPOS_FREE_THREE }, /* 17 bits, 3 pulses, 4 tracks (used all tracks) - 1110, 1101, 1011, 0111 */ - { 20, 4, 2.0f, 16384/*2.0f Q13*/, 4, 0, {4, 8}, TRACKPOS_FIXED_FIRST }, /* 20 bits, 4 pulses, 4 tracks 1111 */ - { 24, 4, 2.0f, 16384/*2.0f Q13*/, 5, 0, {4, 8}, TRACKPOS_FIXED_FIRST }, /* 24 bits, 5 pulses, 4 tracks 2111 fixed track to first */ - { 26, 4, 2.0f, 16384/*2.0f Q13*/, 5, 0, {4, 8}, TRACKPOS_FREE_ONE }, /* 26 bits, 5 pulses, 4 tracks 2111 one free track ? */ - { 28, 4, 1.5f, 12288/*1.5f Q13*/, 6, 0, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 28 bits, 6 pulses, 4 tracks 2211 */ - { 30, 4, 1.5f, 12288/*1.5f Q13*/, 6, 0, {4, 8, 8}, TRACKPOS_FIXED_TWO }, /* 30 bits, 6 pulses, 4 tracks 2211 free consecutive track positions ? */ - { 32, 4, 1.5f, 12288/*1.5f Q13*/, 7, 0, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 32 bits, 6 pulses, 4 tracks 2221 fixed ?*/ - { 34, 4, 1.5f, 12288/*1.5f Q13*/, 7, 0, {4, 8, 8}, TRACKPOS_FREE_THREE }, /* 34 bits, 6 pulses, 4 tracks 2221 free track positions ? */ - { 36, 4, 1.0f, 8192/*1.0f Q13*/, 8, 2, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 36 bits, 8 pulses, 4 tracks 2222 */ - { 40, 4, 1.0f, 8192/*1.0f Q13*/, 9, 2, {4, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 40 bits, 9 pulses, 4 tracks 3222 fixed ?*/ - { 43, 4, 1.0f, 8192/*1.0f Q13*/, 10, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 44 bits, 10 pulses, 4 tracks 3322 */ - { 46, 4, 1.0f, 8192/*1.0f Q13*/, 10, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_TWO }, /* 46 bits, 10 pulses, 4 tracks 3322 free consecutive tracks ? */ - { 47, 4, 1.0f, 8192/*1.0f Q13*/, 11, 2, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 47 bits, 10 pulses, 4 tracks 3332 fixed ? */ - { 49, 4, 1.0f, 8192/*1.0f Q13*/, 11, 2, {4, 6, 8, 8}, TRACKPOS_FREE_THREE }, /* 49 bits, 10 pulses, 4 tracks 3332 free three track positions ? */ - { 50, 4, 1.0f, 8192/*1.0f Q13*/, 12, 4, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 50 bits, 12 pulses, 4 tracks 3333 */ - { 53, 4, 1.0f, 8192/*1.0f Q13*/, 13, 4, {4, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 53 bits, 13 pulses, 4 tracks 4333 fixed ? */ - { 55, 4, 1.0f, 8192/*1.0f Q13*/, 13, 4, {4, 6, 8, 8}, TRACKPOS_FREE_ONE }, /* 55 bits, 13 pulses, 4 tracks 4333 free one ? */ - { 56, 4, 1.0f, 8192/*1.0f Q13*/, 14, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 56 bits, 14 pulses, 4 tracks 4433 fixed ?!?! */ - { 58, 4, 1.0f, 8192/*1.0f Q13*/, 14, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_TWO }, /* 58 bits, 14 pulses, 4 tracks 4433 free consecutive ? */ - { 59, 4, 1.0f, 8192/*1.0f Q13*/, 15, 4, {4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 59 bits, 15 pulses, 4 tracks 4443 fixed ? */ - { 61, 4, 1.0f, 8192/*1.0f Q13*/, 15, 4, {4, 6, 6, 8, 8}, TRACKPOS_FREE_THREE }, /* 61 bits, 15 pulses, 4 tracks 4443 free ? */ - { 62, 3, 0.8f, 6554/*0.8f Q13*/, 16, 4, {4, 4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 62 bits, 16 pulses, 4 tracks 4444 */ - { 65, 3, 0.8f, 6554/*0.8f Q13*/, 17, 4, {4, 4, 6, 6, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 65 bits, 17 pulses, 4 tracks 5444 fixed ?*/ - { 68, 3, 0.75f, 6144/*0.75f Q13*/, 18, 4, {2, 3, 4, 5, 6, 7, 8}, TRACKPOS_FIXED_FIRST }, /* 68 bits, 18 pulses, 4 tracks 5544 */ - { 70, 3, 0.75f, 6144/*0.75f Q13*/, 19, 4, {2, 3, 4, 5, 6, 7, 8}, TRACKPOS_FIXED_FIRST }, /* 70 bits, 19 pulses, 4 tracks 5554 fixed ? */ - { 73, 3, 0.75f, 6144/*0.75f Q13*/, 20, 4, {2, 3, 4, 5, 6, 7, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 73 bits, 20 pulses, 4 tracks 5555 fixed ? */ - { 75, 3, 0.75f, 6144/*0.75f Q13*/, 21, 4, {2, 3, 4, 5, 6, 7, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 75 bits, 21 pulses, 4 tracks 6555 fixed ? */ - { 78, 3, 0.75f, 6144/*0.75f Q13*/, 22, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 78 bits, 22 pulses, 4 tracks 6655 fixed ? */ - { 80, 3, 0.75f, 6144/*0.75f Q13*/, 23, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8}, TRACKPOS_FIXED_FIRST }, /* 80 bits, 23 pulses, 4 tracks 6665 fixed ? */ - { 83, 2, 0.30f, 2458/*0.30f Q13*/, 24, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 83 bits, 24 pulses, 4 tracks 6666 */ - { 85, 2, 0.30f, 2458/*0.30f Q13*/, 25, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 85 bits, 25 pulses, 4 tracks 7666 */ - { 87, 2, 0.25f, 2048/*0.25f Q13*/, 26, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 87 bits, 26 pulses, 4 tracks 7766 */ - { 89, 2, 0.25f, 2048/*0.25f Q13*/, 27, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 89 bits, 27 pulses, 4 tracks 7776 */ - { 92, 2, 0.25f, 2048/*0.25f Q13*/, 28, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 92 bits, 28 pulses, 4 tracks 7777 */ - { 94, 2, 0.25f, 2048/*0.25f Q13*/, 29, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 94 bits, 29 pulses, 4 tracks 8777 */ - { 96, 1, 0.20f, 1638/*0.20f Q13*/, 30, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 96 bits, 30 pulses, 4 tracks 8877 */ - { 98, 1, 0.20f, 1638/*0.20f Q13*/, 31, 4, {2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8}, TRACKPOS_FIXED_FIRST}, /* 98 bits, 31 pulses, 4 tracks 8887 */ -}; -#endif /* Number of pulses & positions to the number of unique states that can be achieved with those pulses */ @@ -2931,137 +2140,6 @@ const uint32_t pulsestostates[17][9] = /*----------------------------------------------------------------------------------* * Gain quantization table for memory-less gain quantizer *----------------------------------------------------------------------------------*/ -const float gain_qua_mless_7b[128*2] = -{ - 0.0256f, 0.0555f, - 0.0915f, 1.1847f, - 0.0968f, 0.6282f, - 0.0996f, 0.2821f, - 0.1029f, 0.4465f, - 0.1065f, 0.9677f, - 0.1332f, 0.7997f, - 0.1535f, 1.3985f, - 0.1692f, 1.6101f, - 0.1873f, 2.0886f, - 0.1960f, 1.8291f, - 0.1964f, 0.1732f, - 0.2122f, 2.4304f, - 0.2292f, 0.5306f, - 0.2359f, 1.0716f, - 0.2369f, 0.6796f, - 0.2546f, 0.3544f, - 0.2694f, 1.2247f, - 0.2697f, 0.9217f, - 0.2996f, 2.7903f, - 0.3197f, 0.7881f, - 0.3199f, 3.2249f, - 0.3492f, 0.1667f, - 0.3560f, 0.4883f, - 0.3568f, 1.3541f, - 0.3599f, 0.6346f, - 0.3684f, 1.0620f, - 0.3716f, 1.5223f, - 0.3942f, 3.6890f, - 0.4059f, 0.3064f, - 0.4076f, 0.9021f, - 0.4149f, 1.7170f, - 0.4225f, 1.9400f, - 0.4229f, 2.2074f, - 0.4487f, 1.2106f, - 0.4554f, 0.7548f, - 0.4800f, 0.4531f, - 0.4882f, 0.6140f, - 0.4966f, 1.0464f, - 0.5126f, 1.3905f, - 0.5298f, 0.8967f, - 0.5369f, 2.4926f, - 0.5521f, 1.5735f, - 0.5614f, 0.1682f, - 0.5758f, 0.7770f, - 0.5939f, 1.1468f, - 0.5942f, 0.5222f, - 0.5946f, 0.3409f, - 0.6053f, 1.7908f, - 0.6129f, 0.9937f, - 0.6136f, 1.2784f, - 0.6184f, 2.0111f, - 0.6249f, 0.6626f, - 0.6527f, 3.0463f, - 0.6602f, 0.8724f, - 0.6692f, 1.4121f, - 0.6961f, 2.2440f, - 0.7035f, 1.0724f, - 0.7069f, 0.7548f, - 0.7081f, 1.5445f, - 0.7091f, 0.5579f, - 0.7253f, 1.6832f, - 0.7296f, 1.1850f, - 0.7359f, 0.4175f, - 0.7388f, 0.9680f, - 0.7428f, 2.7283f, - 0.7591f, 1.3040f, - 0.7700f, 0.6550f, - 0.7732f, 1.8595f, - 0.7742f, 0.8500f, - 0.7924f, 0.2178f, - 0.8078f, 1.4486f, - 0.8178f, 1.0725f, - 0.8255f, 0.7421f, - 0.8256f, 0.5278f, - 0.8316f, 2.0390f, - 0.8382f, 0.9422f, - 0.8435f, 1.2053f, - 0.8567f, 1.5952f, - 0.8570f, 2.4549f, - 0.8725f, 0.8299f, - 0.8756f, 1.3365f, - 0.8769f, 0.6222f, - 0.8799f, 0.3881f, - 0.8938f, 1.7540f, - 0.9121f, 1.0122f, - 0.9210f, 0.7117f, - 0.9249f, 1.1285f, - 0.9344f, 0.9022f, - 0.9375f, 3.7762f, - 0.9376f, 1.4769f, - 0.9388f, 0.5124f, - 0.9501f, 2.2014f, - 0.9582f, 1.2478f, - 0.9646f, 0.8003f, - 0.9815f, 0.6165f, - 0.9864f, 1.9390f, - 0.9985f, 1.3694f, - 1.0041f, 1.6163f, - 1.0071f, 1.0599f, - 1.0095f, 0.9596f, - 1.0142f, 3.3774f, - 1.0150f, 0.3827f, - 1.0223f, 0.7201f, - 1.0351f, 2.9891f, - 1.0393f, 0.8629f, - 1.0461f, 1.1773f, - 1.0601f, 1.7548f, - 1.0616f, 0.5225f, - 1.0969f, 1.4899f, - 1.0977f, 2.6574f, - 1.0996f, 0.6500f, - 1.1006f, 1.3029f, - 1.1129f, 0.7923f, - 1.1151f, 0.2047f, - 1.1169f, 1.0829f, - 1.1195f, 0.9526f, - 1.1442f, 2.3570f, - 1.1613f, 2.0960f, - 1.1920f, 0.4212f, - 1.1942f, 1.8806f, - 1.2055f, 1.6309f, - 1.2081f, 1.2005f, - 1.2091f, 0.5825f, - 1.2200f, 1.3871f, - 1.2201f, 0.8762f, - 1.2210f, 0.7314f, - 1.2298f, 1.0376f -}; const Word16 gain_qua_mless_7b_fx[128*2] = {//Q14 @@ -3195,74 +2273,6 @@ const Word16 gain_qua_mless_7b_fx[128*2] = 20149, 531, }; -const float gain_qua_mless_6b_stereo[64*2]= -{ - 0.034851F,1.358887F, - 0.056885F,1.045898F, - 0.059387F,1.785156F, - 0.079651F,0.322754F, - 0.091736F,0.670410F, - 0.118591F,4.105957F, - 0.168701F,0.859375F, - 0.180481F,2.352051F, - 0.193115F,1.213379F, - 0.197266F,1.485840F, - 0.257324F,0.499023F, - 0.269531F,1.041504F, - 0.298096F,1.705566F, - 0.329285F,0.838379F, - 0.341858F,1.296875F, - 0.349426F,3.154785F, - 0.417908F,2.065918F, - 0.418030F,1.045898F, - 0.420532F,6.452148F, - 0.432556F,0.655273F, - 0.435486F,1.496094F, - 0.504578F,1.203613F, - 0.525024F,1.772949F, - 0.530396F,0.864258F, - 0.579895F,2.469238F, - 0.580872F,1.421875F, - 0.613464F,0.144043F, - 0.625244F,1.005371F, - 0.654480F,1.682617F, - 0.664307F,1.252930F, - 0.671692F,0.663086F, - 0.727478F,3.170410F, - 0.731018F,2.026855F, - 0.745789F,1.102051F, - 0.749878F,1.504395F, - 0.784851F,0.806641F, - 0.790100F,15.999512F, - 0.814697F,1.337402F, - 0.839355F,0.981934F, - 0.842468F,1.705566F, - 0.843018F,2.357422F, - 0.879944F,1.201172F, - 0.893188F,0.767090F, - 0.922791F,1.430176F, - 0.928589F,1.018555F, - 0.930664F,1.906250F, - 0.946655F,0.567871F, - 0.972717F,2.812500F, - 0.982788F,1.178711F, - 0.986206F,0.875977F, - 0.993530F,1.562012F, - 0.998474F,4.970215F, - 1.029236F,9.087402F, - 1.038208F,2.136230F, - 1.042114F,0.684082F, - 1.058838F,1.287598F, - 1.073242F,0.995117F, - 1.089661F,1.667969F, - 1.164978F,3.430176F, - 1.166321F,0.791504F, - 1.180969F,1.420898F, - 1.193481F,1.106445F, - 1.193481F,2.423828F, - 1.199951F,1.863281F, -}; - const Word16 gain_qua_mless_6b_stereo_fx[64 * 2] = {//Q14 570, 695, @@ -3331,74 +2341,6 @@ const Word16 gain_qua_mless_6b_stereo_fx[64 * 2] = 19659, 953 }; -const float gain_qua_mless_6b[64*2] = -{ - 0.1023f, 0.1385f, - 0.1299f, 0.3865f, - 0.1415f, 0.9587f, - 0.1433f, 0.6630f, - 0.1708f, 1.2210f, - 0.1766f, 1.5334f, - 0.2387f, 2.1457f, - 0.2917f, 0.4762f, - 0.2918f, 0.8337f, - 0.3122f, 1.8254f, - 0.3231f, 2.9468f, - 0.3520f, 0.2219f, - 0.3673f, 1.0612f, - 0.3755f, 0.6540f, - 0.3787f, 1.3191f, - 0.3805f, 3.5578f, - 0.4114f, 2.4443f, - 0.4293f, 1.5662f, - 0.4750f, 0.8475f, - 0.4886f, 0.4489f, - 0.5635f, 1.2143f, - 0.5699f, 0.6556f, - 0.5730f, 1.0155f, - 0.5963f, 2.0279f, - 0.6021f, 1.4337f, - 0.6240f, 1.7159f, - 0.6480f, 0.2310f, - 0.6577f, 0.8326f, - 0.7030f, 0.4858f, - 0.7146f, 2.7331f, - 0.7351f, 1.1471f, - 0.7489f, 0.9787f, - 0.7493f, 0.6800f, - 0.7628f, 1.3365f, - 0.7947f, 1.5351f, - 0.7994f, 2.3357f, - 0.8258f, 0.8233f, - 0.8434f, 1.7918f, - 0.8620f, 0.5667f, - 0.8850f, 2.0286f, - 0.8873f, 1.2422f, - 0.8933f, 1.0855f, - 0.8952f, 0.9457f, - 0.9113f, 0.7066f, - 0.9189f, 0.4096f, - 0.9554f, 3.1133f, - 0.9662f, 3.6596f, - 0.9685f, 1.4001f, - 0.9703f, 1.6178f, - 0.9859f, 0.8469f, - 1.0095f, 0.5734f, - 1.0299f, 1.1866f, - 1.0337f, 1.0014f, - 1.0487f, 0.7284f, - 1.0769f, 2.6107f, - 1.0801f, 0.2455f, - 1.1195f, 2.1906f, - 1.1268f, 1.8445f, - 1.1591f, 0.4730f, - 1.1666f, 1.5523f, - 1.1711f, 1.3167f, - 1.1753f, 0.8763f, - 1.1893f, 1.0872f, - 1.1911f, 0.6722f -}; - const Word16 gain_qua_mless_6b_fx[64 * 2] = {//Q14 1676, 71, @@ -3467,42 +2409,6 @@ const Word16 gain_qua_mless_6b_fx[64 * 2] = 19515, 344, }; -const float gain_qua_mless_5b[32*2] = -{ - 0.1645f, 0.2137f, - 0.2102f, 0.5295f, - 0.2154f, 0.8448f, - 0.2615f, 1.5636f, - 0.2664f, 1.1856f, - 0.3012f, 2.1266f, - 0.4209f, 2.7473f, - 0.4713f, 0.6328f, - 0.4830f, 0.2861f, - 0.4938f, 0.9146f, - 0.5523f, 1.7829f, - 0.5798f, 1.1716f, - 0.6039f, 1.4473f, - 0.6068f, 3.5936f, - 0.7267f, 0.7460f, - 0.7329f, 2.1548f, - 0.7537f, 0.4738f, - 0.7586f, 0.9788f, - 0.8354f, 1.2308f, - 0.8529f, 1.7499f, - 0.8856f, 1.4611f, - 0.9253f, 0.6280f, - 0.9414f, 0.8362f, - 0.9570f, 1.0559f, - 0.9663f, 3.0746f, - 0.9765f, 2.5027f, - 1.0512f, 0.4129f, - 1.0815f, 2.0090f, - 1.1099f, 1.2670f, - 1.1250f, 1.5985f, - 1.1376f, 0.6895f, - 1.1529f, 0.9632f -}; - const Word16 gain_qua_mless_5b_fx[32 * 2] = {//Q14 2695, 109, @@ -3779,83 +2685,11 @@ const Word16 E_ROM_qua_gain7b_const[NB_QUA_GAIN7B * 2] = * MA predicition coefficients for gain quantizer *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float pred_gain[GAIN_PRED_ORDER] = { 0.5f, 0.4f, 0.3f, 0.2f }; -#endif const Word16 pred_gain_fx[GAIN_PRED_ORDER] = { 8192, 6554, 4915, 3277 };//Q14 /*----------------------------------------------------------------------------------* * 6-bit gain quantization table (only for AMR-WB IO mode) *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float t_qua_gain6b[64*2] = -{ - 0.095577f, 0.650507f, - 0.096232f, 1.737050f, - 0.187418f, 3.168846f, - 0.255896f, 4.962348f, - 0.274392f, 1.237365f, - 0.306340f, 2.191559f, - 0.340913f, 7.624112f, - 0.349443f, 0.694540f, - 0.393850f, 0.283414f, - 0.410411f, 3.335519f, - 0.467326f, 1.722400f, - 0.492699f, 1.024880f, - 0.502447f, 2.596945f, - 0.538748f, 4.284797f, - 0.594507f, 1.400231f, - 0.601562f, 0.715119f, - 0.615667f, 6.097708f, - 0.625075f, 2.174328f, - 0.662782f, 3.231284f, - 0.690967f, 1.751661f, - 0.696845f, 0.878992f, - 0.710639f, 1.185743f, - 0.715220f, 0.482280f, - 0.751490f, 2.486668f, - 0.764345f, 4.108078f, - 0.767472f, 12.8f, /*0.767472f, 13.875360f,*/ - 0.769099f, 1.658386f, - 0.803928f, 0.792686f, - 0.810832f, 1.183175f, - 0.818967f, 2.972155f, - 0.821480f, 6.255056f, - 0.833469f, 1.761157f, - 0.861276f, 2.207579f, - 0.863275f, 0.599961f, - 0.880429f, 0.913681f, - 0.880816f, 3.532393f, - 0.881643f, 1.383632f, - 0.892825f, 4.900598f, - 0.906974f, 8.542764f, - 0.925368f, 1.772085f, - 0.928281f, 2.841080f, - 0.933752f, 1.101603f, - 0.947124f, 2.305683f, - 0.956012f, 0.517399f, - 0.961870f, 3.892433f, - 0.972823f, 5.841643f, - 0.977796f, 1.463091f, - 0.981803f, 0.833284f, - 1.008362f, 2.077002f, - 1.011696f, 3.039251f, - 1.031157f, 1.162086f, - 1.031888f, 0.332692f, - 1.050599f, 4.104371f, - 1.074819f, 1.668828f, - 1.092217f, 2.572842f, - 1.108887f, 5.736302f, - 1.112667f, 0.769072f, - 1.135654f, 15.9999f, /*1.135654f, 28.065996f,*/ - 1.143096f, 10.587959f, - 1.168006f, 1.241697f, - 1.185414f, 3.211269f, - 1.186919f, 2.000422f, - 1.187154f, 4.421983f, - 1.243327f, 7.268204f -}; -#endif const Word16 t_qua_gain6b_fx[64 * 2] = {//Q14 @@ -3929,139 +2763,6 @@ const Word16 t_qua_gain6b_fx[64 * 2] = /*----------------------------------------------------------------------------------* * 7-bit gain quantization table (only for AMR-WB IO mode) *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float t_qua_gain7b[128*2] = -{ - 0.012445f, 0.215546f, - 0.028326f, 0.965442f, - 0.053042f, 0.525819f, - 0.065409f, 1.495322f, - 0.078212f, 2.323725f, - 0.100504f, 0.751276f, - 0.112617f, 3.427530f, - 0.113124f, 0.309583f, - 0.121763f, 1.140685f, - 0.143515f, 7.519609f, - 0.162430f, 0.568752f, - 0.164940f, 1.904113f, - 0.165429f, 4.947562f, - 0.194985f, 0.855463f, - 0.213527f, 1.281019f, - 0.223544f, 0.414672f, - 0.243135f, 2.781766f, - 0.257180f, 1.659565f, - 0.269488f, 0.636749f, - 0.286539f, 1.003938f, - 0.328124f, 2.225436f, - 0.328761f, 0.330278f, - 0.336807f, 11.500983f, - 0.339794f, 3.805726f, - 0.344454f, 1.494626f, - 0.346165f, 0.738748f, - 0.363605f, 1.141454f, - 0.398729f, 0.517614f, - 0.415276f, 2.928666f, - 0.416282f, 0.862935f, - 0.423421f, 1.873310f, - 0.444151f, 0.202244f, - 0.445842f, 1.301113f, - 0.455671f, 5.519512f, - 0.484764f, 0.387607f, - 0.488696f, 0.967884f, - 0.488730f, 0.666771f, - 0.508189f, 1.516224f, - 0.508792f, 2.348662f, - 0.531504f, 3.883870f, - 0.548649f, 1.112861f, - 0.551182f, 0.514986f, - 0.564397f, 1.742030f, - 0.566598f, 0.796454f, - 0.589255f, 3.081743f, - 0.598816f, 1.271936f, - 0.617654f, 0.333501f, - 0.619073f, 2.040522f, - 0.625282f, 0.950244f, - 0.630798f, 0.594883f, - 0.638918f, 4.863197f, - 0.650102f, 1.464846f, - 0.668412f, 0.747138f, - 0.669490f, 2.583027f, - 0.683757f, 1.125479f, - 0.691216f, 1.739274f, - 0.718441f, 3.297789f, - 0.722608f, 0.902743f, - 0.728827f, 2.194941f, - 0.729586f, 0.633849f, - 0.730907f, 7.432957f, - 0.731017f, 0.431076f, - 0.731543f, 1.387847f, - 0.759183f, 1.045210f, - 0.768606f, 1.789648f, - 0.771245f, 4.085637f, - 0.772613f, 0.778145f, - 0.786483f, 1.283204f, - 0.792467f, 2.412891f, - 0.802393f, 0.544588f, - 0.807156f, 0.255978f, - 0.814280f, 1.544409f, - 0.817839f, 0.938798f, - 0.826959f, 2.910633f, - 0.830453f, 0.684066f, - 0.833431f, 1.171532f, - 0.841208f, 1.908628f, - 0.846440f, 5.333522f, - 0.868280f, 0.841519f, - 0.868662f, 1.435230f, - 0.871449f, 3.675784f, - 0.881317f, 2.245058f, - 0.882020f, 0.480249f, - 0.882476f, 1.105804f, - 0.902856f, 0.684850f, - 0.904419f, 1.682113f, - 0.909384f, 2.787801f, - 0.916558f, 7.500981f, - 0.918444f, 0.950341f, - 0.919721f, 1.296319f, - 0.940272f, 4.682978f, - 0.940273f, 1.991736f, - 0.950291f, 3.507281f, - 0.957455f, 1.116284f, - 0.957723f, 0.793034f, - 0.958217f, 1.497824f, - 0.962628f, 2.514156f, - 0.968507f, 0.588605f, - 0.974739f, 0.339933f, - 0.991738f, 1.750201f, - 0.997210f, 0.936131f, - 1.002422f, 1.250008f, - 1.006040f, 2.167232f, - 1.008848f, 3.129940f, - 1.014404f, 5.842819f, - 1.027798f, 4.287319f, - 1.039404f, 1.489295f, - 1.039628f, 8.947958f, - 1.043214f, 0.765733f, - 1.045089f, 2.537806f, - 1.058994f, 1.031496f, - 1.060415f, 0.478612f, - 1.072132f, 12.8f, /*1.072132f, 14.961459f,*/ - 1.074778f, 1.910049f, - 1.076570f, 15.9999f, /*1.076570f, 30.500374f,*/ - 1.107853f, 3.843067f, - 1.110673f, 1.228576f, - 1.110969f, 2.758471f, - 1.140058f, 1.603077f, - 1.155384f, 0.668935f, - 1.176229f, 6.717108f, - 1.179008f, 2.011940f, - 1.187735f, 0.963552f, - 1.199569f, 4.891432f, - 1.206311f, 3.316329f, - 1.215323f, 2.507536f, - 1.223150f, 1.387102f, - 1.296012f, 9.684225f -}; -#endif const Word16 t_qua_gain7b_fx[128 * 2] = {//Q14 @@ -4198,41 +2899,6 @@ const Word16 t_qua_gain7b_fx[128 * 2] = /*----------------------------------------------------------------------------------* * Quantization table for scaled innovation energy prediciton *----------------------------------------------------------------------------------*/ -const float Es_pred_qua_5b[32] = -{ - -8.0000f, - -2.0519f, - 2.5095f, - 6.5923f, - 9.9507f, - 12.9923f, - 15.7251f, - 18.1521f, - 20.3552f, - 22.4218f, - 24.3014f, - 26.0214f, - 27.6040f, - 29.0898f, - 30.5291f, - 31.9154f, - 33.2749f, - 34.6277f, - 35.9525f, - 37.3081f, - 38.7173f, - 40.1734f, - 41.6751f, - 43.2697f, - 44.9559f, - 46.7826f, - 48.7749f, - 50.9729f, - 53.4967f, - 56.3814f, - 59.9748f, - 65.0000f -}; const Word16 Es_pred_qua_5b_fx[32] = {//Q8 @@ -4270,26 +2936,6 @@ const Word16 Es_pred_qua_5b_fx[32] = 16640, }; -const float Es_pred_qua_4b[16] = -{ - -8.0000f, - -0.1400f, - 7.1397f, - 12.8276f, - 17.9064f, - 22.4280f, - 26.6441f, - 30.6032f, - 34.2916f, - 37.8937f, - 41.4441f, - 45.0174f, - 48.7769f, - 52.9669f, - 58.0552f, - 65.0000f -}; - const Word16 Es_pred_qua_4b_fx[16] = {//Q8 -2048, @@ -4311,18 +2957,6 @@ const Word16 Es_pred_qua_4b_fx[16] = 16640 }; -const float Es_pred_qua_3b[8] = -{ - 5.9422f, - 15.2711f, - 23.3857f, - 30.5310f, - 37.0190f, - 43.4539f, - 50.2442f, - 58.7164f -}; - const Word16 Es_pred_qua_3b_fx[8] = { 1521/* 5.9422f Q8*/, @@ -4335,26 +2969,6 @@ const Word16 Es_pred_qua_3b_fx[8] = 15031/*58.7164f Q8*/ }; -const float Es_pred_qua_4b_no_ltp[16] = -{ - -5.f, - 0.f, - 5.f, - 10.f, - 15.f, - 20.f, - 25.f, - 30.f, - 35.f, - 40.f, - 45.f, - 50.f, - 55.f, - 60.f, - 65.f, - 70.f -}; - const Word16 Es_pred_qua_4b_no_ltp_fx[16] = { -1280/*-5.f Q8*/, @@ -4378,39 +2992,21 @@ const Word16 Es_pred_qua_4b_no_ltp_fx[16] = * Gain estimation constants (for gain quantizer at 7.2 and 8.0 kbps) *----------------------------------------------------------------------------------*/ -const float b_1sfr[2] = -{ - 2.36736f, -0.22452f -}; - const Word16 b_1sfr_fx[2] = /*Q12 */ { 9697, -920 }; -const float b_2sfr[4] = -{ - -0.00027f, 0.01703f, 0.91879f, 0.13234f -}; - const Word16 b_2sfr_fx[4] = /*Q12 */ { -1, 70, 3763, 542 }; -const float b_3sfr[6] = -{ - -0.11658f, 0.02674f, 0.13513f, 0.79682f, 0.02241f, 0.17815f -}; - const Word16 b_3sfr_fx[6] =//Q12 { -478, 110, 553, 3264, 92, 730 }; -const float b_4sfr[8] = -{ - -0.09296f, 0.01578f, -0.06606f, 0.20416f, 0.79254f, 0.00829f, 0.03499f, 0.15859f -}; + const Word16 b_4sfr_fx[8] =//Q12 { -381, 65, -271, 836, 3246, 34, 143, 650 @@ -4420,936 +3016,6 @@ const Word16 b_4sfr_fx[8] =//Q12 * Gain codebooks (for gain quantizer at 7.2 and 8.0 kbps) *----------------------------------------------------------------------------------*/ -const float gp_gamma_1sfr_8b[2*256] = -{ - 0.01864f, 0.29707f, - 0.02030f, 0.07182f, - 0.02151f, 1.08524f, - 0.03500f, 0.16009f, - 0.03977f, 0.02281f, - 0.04234f, 0.40424f, - 0.04933f, 0.76004f, - 0.05586f, 1.51515f, - 0.06020f, 2.12629f, - 0.06027f, 3.09183f, - 0.06439f, 0.11739f, - 0.07339f, 5.42703f, - 0.07352f, 0.03949f, - 0.08217f, 0.24883f, - 0.08739f, 0.64886f, - 0.10306f, 12.80025f, - 0.10466f, 0.50924f, - 0.11107f, 0.09482f, - 0.12457f, 1.36386f, - 0.13298f, 7.87494f, - 0.13422f, 0.19471f, - 0.13866f, 2.54472f, - 0.14144f, 0.90007f, - 0.14280f, 0.34101f, - 0.15640f, 0.05105f, - 0.15712f, 28.93375f, - 0.16220f, 4.10343f, - 0.16674f, 0.12822f, - 0.17199f, 0.01803f, - 0.17309f, 0.57791f, - 0.17880f, 1.83167f, - 0.21237f, 0.25432f, - 0.21425f, 0.42966f, - 0.22283f, 6.15919f, - 0.22382f, 1.40095f, - 0.22706f, 0.74928f, - 0.23090f, 1.03443f, - 0.23261f, 20.98373f, - 0.23699f, 10.51665f, - 0.24053f, 3.14177f, - 0.24195f, 0.09011f, - 0.25145f, 0.15676f, - 0.26865f, 0.02971f, - 0.27099f, 2.30569f, - 0.27377f, 0.33881f, - 0.28928f, 0.60729f, - 0.29592f, 0.06145f, - 0.31283f, 14.92646f, - 0.31414f, 0.21458f, - 0.31534f, 1.77427f, - 0.31962f, 0.49268f, - 0.32489f, 1.21756f, - 0.32814f, 4.91051f, - 0.34121f, 0.01364f, - 0.34148f, 8.74051f, - 0.34386f, 0.12541f, - 0.34508f, 0.89971f, - 0.35532f, 0.04229f, - 0.35970f, 0.27273f, - 0.36044f, 3.53446f, - 0.37703f, 0.71598f, - 0.38255f, 0.39178f, - 0.38772f, 2.13255f, - 0.40080f, 1.46796f, - 0.40443f, 0.09811f, - 0.41099f, 0.18558f, - 0.41248f, 0.57650f, - 0.42003f, 6.02510f, - 0.42491f, 2.66162f, - 0.44395f, 1.05504f, - 0.45244f, 0.32349f, - 0.46599f, 4.14121f, - 0.46643f, 0.07352f, - 0.46821f, 0.76710f, - 0.47180f, 0.44298f, - 0.47973f, 0.14694f, - 0.48709f, 0.22467f, - 0.48898f, 1.86483f, - 0.49391f, 7.20170f, - 0.49561f, 0.03365f, - 0.49719f, 11.52638f, - 0.51590f, 1.31314f, - 0.52029f, 3.12855f, - 0.52386f, 0.11286f, - 0.52972f, 0.53743f, - 0.54158f, 0.64936f, - 0.54442f, 0.88680f, - 0.54741f, 18.96873f, - 0.55717f, 5.01132f, - 0.55900f, 0.38267f, - 0.56108f, 2.20040f, - 0.56269f, 0.27811f, - 0.56764f, 0.01728f, - 0.56774f, 1.61683f, - 0.57428f, 0.17847f, - 0.59426f, 0.05172f, - 0.60253f, 1.12077f, - 0.61435f, 0.47966f, - 0.61837f, 2.64075f, - 0.61974f, 3.85052f, - 0.62233f, 0.77999f, - 0.62488f, 30.82914f, - 0.62591f, 8.30773f, - 0.63483f, 0.13040f, - 0.63717f, 0.08340f, - 0.64151f, 0.22596f, - 0.64277f, 14.45112f, - 0.65342f, 1.94833f, - 0.65906f, 1.41075f, - 0.66195f, 0.33327f, - 0.66208f, 0.59438f, - 0.66380f, 5.82288f, - 0.67561f, 55.08506f, - 0.67985f, 0.98953f, - 0.68848f, 0.02431f, - 0.69743f, 0.75692f, - 0.69940f, 0.41776f, - 0.71088f, 2.29372f, - 0.71473f, 9.88443f, - 0.71666f, 3.15179f, - 0.71976f, 1.57490f, - 0.72121f, 0.15977f, - 0.72569f, 0.25747f, - 0.73215f, 4.49475f, - 0.73242f, 1.17828f, - 0.73611f, 0.10706f, - 0.74660f, 0.50029f, - 0.75066f, 0.06441f, - 0.75918f, 0.66077f, - 0.76003f, 0.89356f, - 0.77072f, 6.95905f, - 0.77186f, 18.53232f, - 0.77303f, 1.82446f, - 0.78131f, 2.59582f, - 0.78137f, 0.37054f, - 0.78595f, 1.33439f, - 0.78988f, 0.20177f, - 0.79579f, 3.69204f, - 0.80621f, 12.12779f, - 0.80699f, 24.75305f, - 0.81287f, 0.04130f, - 0.81630f, 0.55362f, - 0.81694f, 0.29092f, - 0.81734f, 0.74874f, - 0.82110f, 1.06401f, - 0.82787f, 2.07876f, - 0.82981f, 5.00103f, - 0.84050f, 1.58158f, - 0.84438f, 2.89191f, - 0.84678f, 0.13416f, - 0.85616f, 0.44166f, - 0.86019f, 8.65103f, - 0.86346f, 0.01317f, - 0.86494f, 1.18927f, - 0.86577f, 0.09267f, - 0.86811f, 5.95882f, - 0.87117f, 0.84740f, - 0.87406f, 0.61269f, - 0.87981f, 0.23437f, - 0.88151f, 2.44548f, - 0.88504f, 0.33708f, - 0.88847f, 1.82180f, - 0.89206f, 3.31226f, - 0.89352f, 16.07224f, - 0.89868f, 0.17353f, - 0.90558f, 1.37396f, - 0.90956f, 4.04629f, - 0.91046f, 0.71437f, - 0.91555f, 0.95141f, - 0.91607f, 0.05802f, - 0.92133f, 0.50076f, - 0.92397f, 2.18529f, - 0.92943f, 6.99163f, - 0.93816f, 2.70762f, - 0.93915f, 10.79124f, - 0.93979f, 35.02379f, - 0.94373f, 0.29109f, - 0.94428f, 1.54440f, - 0.94915f, 1.11190f, - 0.94935f, 4.81827f, - 0.94963f, 0.39335f, - 0.95314f, 0.02810f, - 0.95605f, 0.62253f, - 0.96422f, 0.78364f, - 0.96502f, 1.90168f, - 0.96887f, 0.08041f, - 0.97223f, 3.22145f, - 0.97319f, 0.15476f, - 0.97937f, 0.21603f, - 0.99027f, 1.26402f, - 0.99060f, 2.42092f, - 0.99469f, 8.02656f, - 0.99661f, 20.50587f, - 0.99674f, 0.54301f, - 0.99823f, 5.86597f, - 0.99991f, 0.88884f, - 1.00124f, 0.33090f, - 1.00312f, 4.24275f, - 1.00328f, 1.65980f, - 1.02202f, 13.84765f, - 1.02395f, 0.69092f, - 1.02548f, 2.07584f, - 1.02556f, 0.12171f, - 1.02613f, 0.43643f, - 1.03316f, 1.03433f, - 1.03462f, 1.40902f, - 1.03999f, 2.82553f, - 1.05031f, 3.58878f, - 1.05184f, 0.26298f, - 1.06027f, 9.06668f, - 1.07241f, 0.79358f, - 1.07471f, 0.52241f, - 1.08008f, 1.76977f, - 1.08043f, 4.93935f, - 1.08062f, 45.38949f, - 1.08090f, 2.36074f, - 1.08304f, 1.15533f, - 1.08642f, 0.18015f, - 1.08996f, 0.06905f, - 1.09008f, 6.56321f, - 1.09044f, 0.01828f, - 1.09727f, 0.36021f, - 1.10075f, 0.62638f, - 1.11422f, 1.47205f, - 1.11535f, 0.93762f, - 1.11816f, 0.03576f, - 1.12340f, 0.10836f, - 1.13413f, 25.42389f, - 1.13994f, 2.96173f, - 1.14294f, 3.90159f, - 1.15382f, 0.04975f, - 1.15439f, 11.91982f, - 1.16090f, 16.73218f, - 1.16103f, 2.17967f, - 1.16117f, 0.68099f, - 1.16863f, 0.46714f, - 1.17332f, 1.18022f, - 1.17498f, 0.31199f, - 1.17616f, 9.51265f, - 1.18152f, 7.40048f, - 1.18372f, 0.24663f, - 1.18372f, 0.20126f, - 1.18610f, 0.14046f, - 1.18676f, 0.08978f, - 1.18699f, 5.55043f, - 1.18951f, 0.84044f, - 1.19478f, 1.59238f, - 1.19799f, 2.55164f, - 1.19820f, 1.89784f, - 1.19857f, 0.39387f, - 1.19888f, 0.56489f, - 1.19998f, 1.02889f, - 1.20345f, 3.31468f, - 1.20431f, 4.41910f, - 1.20567f, 1.32040f, - 1.21177f, 0.74548f -}; - -const float gp_gamma_1sfr_7b[2*128] = -{ - 0.02136f, 0.16576f, - 0.02610f, 0.04700f, - 0.02673f, 1.32916f, - 0.03917f, 0.38038f, - 0.06539f, 3.93015f, - 0.06590f, 0.78428f, - 0.07007f, 2.41347f, - 0.07073f, 0.12201f, - 0.08692f, 0.02273f, - 0.10144f, 0.26162f, - 0.12117f, 0.58428f, - 0.12817f, 0.06582f, - 0.13200f, 6.18738f, - 0.13542f, 1.05113f, - 0.14605f, 12.85127f, - 0.15252f, 1.88832f, - 0.17593f, 0.43086f, - 0.18150f, 24.88791f, - 0.19845f, 0.19059f, - 0.20102f, 0.09975f, - 0.21887f, 3.04712f, - 0.22650f, 0.80244f, - 0.22710f, 1.36678f, - 0.23569f, 0.04128f, - 0.24090f, 0.33017f, - 0.24423f, 4.39312f, - 0.25622f, 9.04696f, - 0.26686f, 0.01465f, - 0.30474f, 0.13696f, - 0.30653f, 0.51721f, - 0.33982f, 2.33214f, - 0.34572f, 0.96726f, - 0.34776f, 0.22391f, - 0.35921f, 1.66824f, - 0.37321f, 5.83958f, - 0.38246f, 0.29909f, - 0.38918f, 0.07567f, - 0.39258f, 0.03099f, - 0.40290f, 0.67440f, - 0.43384f, 3.82188f, - 0.44136f, 1.28810f, - 0.45720f, 0.39518f, - 0.46915f, 0.18114f, - 0.49155f, 7.58133f, - 0.49486f, 18.79692f, - 0.49964f, 2.78200f, - 0.50311f, 0.11426f, - 0.50988f, 1.82600f, - 0.51013f, 12.50225f, - 0.51163f, 0.85831f, - 0.53672f, 0.55661f, - 0.54568f, 0.24221f, - 0.58854f, 0.04842f, - 0.58856f, 1.13464f, - 0.59022f, 5.29180f, - 0.61432f, 0.31344f, - 0.62368f, 0.01799f, - 0.62503f, 3.37535f, - 0.62557f, 0.15698f, - 0.63586f, 2.17291f, - 0.64066f, 0.72903f, - 0.65002f, 0.46018f, - 0.67718f, 0.08632f, - 0.67719f, 1.47658f, - 0.68875f, 9.72347f, - 0.68911f, 32.65981f, - 0.72111f, 4.49107f, - 0.72523f, 0.94174f, - 0.73603f, 0.22351f, - 0.75271f, 16.69924f, - 0.75455f, 2.72292f, - 0.75633f, 0.36255f, - 0.76400f, 0.65651f, - 0.76595f, 6.66691f, - 0.77475f, 1.86222f, - 0.79933f, 1.19851f, - 0.80473f, 0.13963f, - 0.80852f, 0.51193f, - 0.82270f, 3.73825f, - 0.84176f, 0.02816f, - 0.84259f, 0.05841f, - 0.85838f, 0.27004f, - 0.86563f, 0.82004f, - 0.86743f, 2.29536f, - 0.88363f, 1.49460f, - 0.89140f, 5.36064f, - 0.89183f, 12.35149f, - 0.89905f, 8.20030f, - 0.90532f, 0.58773f, - 0.90588f, 0.39700f, - 0.91006f, 24.98023f, - 0.92596f, 0.19474f, - 0.92719f, 3.17426f, - 0.93316f, 1.03857f, - 0.94022f, 0.10069f, - 0.94912f, 1.92355f, - 0.98244f, 0.69665f, - 0.98723f, 4.12701f, - 0.99391f, 0.45338f, - 0.99688f, 1.30750f, - 0.99874f, 44.92089f, - 1.00074f, 0.30398f, - 1.00361f, 2.48072f, - 1.00432f, 6.80059f, - 1.00968f, 0.01556f, - 1.01623f, 10.59523f, - 1.03016f, 0.88271f, - 1.03693f, 0.16444f, - 1.03908f, 18.89908f, - 1.04942f, 1.71141f, - 1.08216f, 0.03947f, - 1.08519f, 2.81718f, - 1.09035f, 0.07394f, - 1.09092f, 0.49594f, - 1.09429f, 1.02772f, - 1.09931f, 4.69322f, - 1.14445f, 13.97163f, - 1.14663f, 0.22834f, - 1.14869f, 8.63215f, - 1.15982f, 0.12298f, - 1.16574f, 0.78265f, - 1.16644f, 0.35763f, - 1.17170f, 1.51544f, - 1.17199f, 5.76835f, - 1.17405f, 2.05383f, - 1.17523f, 0.58874f, - 1.18128f, 3.43730f, - 1.18605f, 1.15776f -}; - -const float gp_gamma_1sfr_6b[2*64] = -{ - 0.02662f, 0.35620f, - 0.02886f, 0.12384f, - 0.05872f, 0.03097f, - 0.06053f, 1.26461f, - 0.07678f, 3.09046f, - 0.08829f, 0.68582f, - 0.10444f, 0.24412f, - 0.11040f, 0.08899f, - 0.15678f, 8.15025f, - 0.15909f, 1.86873f, - 0.17247f, 0.48977f, - 0.17727f, 24.37615f, - 0.19825f, 0.05111f, - 0.21935f, 4.40219f, - 0.22361f, 0.15212f, - 0.22674f, 0.94328f, - 0.25832f, 0.01602f, - 0.28570f, 0.36784f, - 0.30922f, 12.93476f, - 0.31936f, 2.48635f, - 0.38038f, 1.35732f, - 0.38051f, 0.09521f, - 0.38075f, 0.21973f, - 0.38524f, 0.62092f, - 0.42799f, 0.03238f, - 0.44723f, 6.21713f, - 0.48877f, 3.39646f, - 0.53050f, 0.87060f, - 0.53522f, 0.31847f, - 0.54464f, 1.99023f, - 0.55504f, 0.15767f, - 0.63219f, 0.55908f, - 0.64035f, 0.05438f, - 0.64773f, 19.11642f, - 0.65402f, 1.48427f, - 0.67413f, 9.41877f, - 0.69087f, 4.69262f, - 0.71312f, 0.10928f, - 0.75159f, 0.21181f, - 0.76049f, 1.08676f, - 0.76781f, 0.01802f, - 0.77612f, 0.41533f, - 0.78253f, 2.60862f, - 0.86685f, 0.73032f, - 0.87435f, 33.14677f, - 0.89187f, 1.63714f, - 0.89264f, 6.41601f, - 0.89525f, 12.17085f, - 0.91060f, 0.07523f, - 0.92352f, 0.26853f, - 0.94457f, 3.60819f, - 0.97995f, 0.49732f, - 0.99345f, 0.96508f, - 0.99428f, 0.12950f, - 1.01209f, 2.04687f, - 1.02897f, 0.03326f, - 1.05102f, 17.03703f, - 1.06462f, 8.38911f, - 1.10284f, 4.88112f, - 1.11160f, 0.34356f, - 1.12908f, 0.17681f, - 1.13018f, 2.82130f, - 1.13048f, 0.64939f, - 1.13502f, 1.29540f -}; - - -const float gp_gamma_2sfr_7b[2*128] = -{ - 0.00607f, 2.39054f, - 0.00954f, 0.47393f, - 0.01025f, 1.13156f, - 0.01770f, 0.69243f, - 0.02670f, 0.86143f, - 0.02900f, 0.36511f, - 0.04481f, 1.44093f, - 0.05677f, 0.18129f, - 0.06916f, 0.29914f, - 0.06931f, 0.58281f, - 0.09094f, 0.99160f, - 0.11875f, 0.78403f, - 0.12072f, 32.79239f, - 0.12805f, 0.43746f, - 0.12919f, 1.87968f, - 0.14693f, 0.23271f, - 0.16393f, 0.66184f, - 0.17876f, 1.08413f, - 0.20774f, 0.52913f, - 0.21146f, 0.33304f, - 0.21176f, 0.82451f, - 0.22667f, 1.29470f, - 0.27074f, 0.96525f, - 0.27431f, 0.64919f, - 0.27900f, 0.42916f, - 0.27972f, 4.26235f, - 0.30501f, 1.65535f, - 0.32627f, 0.74124f, - 0.33076f, 0.21006f, - 0.33996f, 1.13073f, - 0.35145f, 0.51891f, - 0.35860f, 0.86393f, - 0.36177f, 0.33235f, - 0.37868f, 6.51886f, - 0.39024f, 12.56903f, - 0.39765f, 0.63998f, - 0.40513f, 1.42570f, - 0.40817f, 2.87488f, - 0.43002f, 2.06198f, - 0.43340f, 0.97173f, - 0.43475f, 0.40939f, - 0.43718f, 18.88363f, - 0.44833f, 0.75361f, - 0.46375f, 0.54756f, - 0.47932f, 1.22520f, - 0.51646f, 0.86275f, - 0.52785f, 0.64565f, - 0.53846f, 0.46049f, - 0.54240f, 1.07549f, - 0.54644f, 1.76965f, - 0.56866f, 0.26470f, - 0.58517f, 0.75438f, - 0.58905f, 1.35033f, - 0.59790f, 0.55874f, - 0.60132f, 0.95549f, - 0.61063f, 2.37370f, - 0.61285f, 0.37493f, - 0.64837f, 1.12469f, - 0.65662f, 0.64355f, - 0.66163f, 0.82985f, - 0.66799f, 1.54600f, - 0.67368f, 0.50148f, - 0.68300f, 3.65165f, - 0.70443f, 0.97799f, - 0.71587f, 1.25327f, - 0.72464f, 0.71612f, - 0.73632f, 0.31795f, - 0.75268f, 0.42125f, - 0.75309f, 2.14775f, - 0.75309f, 0.57562f, - 0.76160f, 0.86706f, - 0.76665f, 1.10985f, - 0.77299f, 1.64991f, - 0.80915f, 0.77262f, - 0.81281f, 1.32136f, - 0.81854f, 0.99876f, - 0.83675f, 0.63186f, - 0.83681f, 3.02209f, - 0.83687f, 0.48040f, - 0.85777f, 1.93471f, - 0.86131f, 0.87229f, - 0.86952f, 1.13226f, - 0.87613f, 1.46053f, - 0.87855f, 0.34269f, - 0.88214f, 0.19384f, - 0.89134f, 0.70978f, - 0.90866f, 0.95984f, - 0.92004f, 0.54981f, - 0.92222f, 1.24490f, - 0.93028f, 2.52260f, - 0.93695f, 0.80671f, - 0.94177f, 1.64620f, - 0.95825f, 1.05636f, - 0.96289f, 0.39904f, - 0.97439f, 0.65464f, - 0.97607f, 1.34420f, - 0.98128f, 0.88402f, - 0.99580f, 9.01834f, - 1.00135f, 2.01532f, - 1.01010f, 1.16279f, - 1.01723f, 0.74974f, - 1.02846f, 1.51554f, - 1.02849f, 0.94135f, - 1.03245f, 0.49354f, - 1.05191f, 0.60369f, - 1.05632f, 4.15579f, - 1.06623f, 1.06736f, - 1.07827f, 1.25591f, - 1.08027f, 0.82287f, - 1.08960f, 1.72193f, - 1.09072f, 0.28420f, - 1.10754f, 2.43024f, - 1.12653f, 0.95428f, - 1.12778f, 0.67641f, - 1.13450f, 1.41156f, - 1.14902f, 0.40686f, - 1.16032f, 3.38038f, - 1.16226f, 1.14385f, - 1.17713f, 0.54895f, - 1.18580f, 1.84337f, - 1.18686f, 0.74693f, - 1.19352f, 0.86699f, - 1.20171f, 1.54779f, - 1.20572f, 2.16971f, - 1.20617f, 1.02977f, - 1.20662f, 2.74485f, - 1.20688f, 1.28237f, - 1.20728f, 5.22483f -}; - - -const float gp_gamma_2sfr_6b[2*64] = -{ - 0.01130f, 0.59705f, - 0.02652f, 1.01430f, - 0.02794f, 0.28351f, - 0.06102f, 0.41178f, - 0.07430f, 0.77026f, - 0.07572f, 1.46777f, - 0.10914f, 0.18121f, - 0.12363f, 2.40953f, - 0.13197f, 0.51810f, - 0.14628f, 0.30909f, - 0.15972f, 0.92110f, - 0.20291f, 0.66321f, - 0.20694f, 1.21691f, - 0.23404f, 0.40495f, - 0.27484f, 33.61382f, - 0.28250f, 0.79452f, - 0.30145f, 1.75124f, - 0.31141f, 0.53656f, - 0.32351f, 0.23494f, - 0.33936f, 0.99733f, - 0.38508f, 3.72779f, - 0.40108f, 0.65367f, - 0.41319f, 0.40008f, - 0.42662f, 1.25364f, - 0.43246f, 9.93625f, - 0.45774f, 0.83578f, - 0.51009f, 1.61477f, - 0.51585f, 0.50984f, - 0.55413f, 1.04889f, - 0.56694f, 0.69123f, - 0.60142f, 2.29733f, - 0.60208f, 0.32174f, - 0.63695f, 16.75804f, - 0.64385f, 0.85349f, - 0.64786f, 1.32201f, - 0.67202f, 0.55054f, - 0.72879f, 1.03555f, - 0.74357f, 0.71744f, - 0.76140f, 1.79730f, - 0.78523f, 0.43896f, - 0.81538f, 1.20775f, - 0.81979f, 0.86215f, - 0.82523f, 3.16953f, - 0.86528f, 0.66633f, - 0.87274f, 0.25452f, - 0.88210f, 1.51311f, - 0.90326f, 0.99246f, - 0.93081f, 0.53871f, - 0.95916f, 2.20734f, - 0.96174f, 1.28996f, - 0.96917f, 0.82441f, - 0.99824f, 6.35842f, - 1.00335f, 0.36563f, - 1.02237f, 1.09680f, - 1.03188f, 0.64719f, - 1.04846f, 1.61469f, - 1.09185f, 0.91916f, - 1.11199f, 4.24727f, - 1.14659f, 0.48521f, - 1.15873f, 2.64461f, - 1.16374f, 1.37282f, - 1.17310f, 0.74954f, - 1.18098f, 1.86320f, - 1.18544f, 1.08087f -}; - -const float gp_gamma_3sfr_6b[2*64] = -{ - 0.01192f, 0.29245f, - 0.04985f, 0.56198f, - 0.07032f, 1.20261f, - 0.08337f, 0.36774f, - 0.08405f, 0.80061f, - 0.09313f, 1.76147f, - 0.09580f, 0.19048f, - 0.13781f, 0.46427f, - 0.15191f, 1.01263f, - 0.17911f, 0.66093f, - 0.19176f, 0.31423f, - 0.21095f, 3.33105f, - 0.24351f, 0.84426f, - 0.25383f, 1.38475f, - 0.25558f, 0.52730f, - 0.26697f, 2.41458f, - 0.32244f, 1.02709f, - 0.33147f, 0.25578f, - 0.33614f, 0.69549f, - 0.35169f, 0.41222f, - 0.41458f, 1.21107f, - 0.41759f, 0.87121f, - 0.42537f, 0.59296f, - 0.46820f, 1.57552f, - 0.51038f, 0.47823f, - 0.51562f, 1.03574f, - 0.52553f, 0.74288f, - 0.56848f, 2.12515f, - 0.59985f, 0.33289f, - 0.60551f, 13.69166f, - 0.61194f, 0.89674f, - 0.62213f, 0.60927f, - 0.62628f, 1.28489f, - 0.70519f, 0.76916f, - 0.71649f, 1.72293f, - 0.71964f, 1.05889f, - 0.73148f, 8.45570f, - 0.73217f, 0.48093f, - 0.77896f, 26.25153f, - 0.78396f, 2.95227f, - 0.80147f, 0.90896f, - 0.80167f, 0.66149f, - 0.80656f, 1.44516f, - 0.86294f, 1.18805f, - 0.88649f, 0.81413f, - 0.90213f, 2.01099f, - 0.90474f, 0.55259f, - 0.91649f, 0.33485f, - 0.93167f, 1.03017f, - 0.96578f, 5.28431f, - 0.97308f, 1.36442f, - 0.97409f, 0.70362f, - 0.99790f, 0.92401f, - 1.05048f, 1.12005f, - 1.05996f, 1.76024f, - 1.06915f, 0.46437f, - 1.08636f, 0.80929f, - 1.10286f, 2.76431f, - 1.13708f, 3.74909f, - 1.15280f, 1.23892f, - 1.16077f, 0.62175f, - 1.17824f, 0.96656f, - 1.18408f, 2.17545f, - 1.18487f, 1.49786f -}; - -const float gp_gamma_4sfr_6b[2*64] = -{ - 0.00934f, 0.27565f, - 0.01721f, 0.97811f, - 0.02433f, 0.46654f, - 0.04781f, 0.72086f, - 0.06776f, 1.45241f, - 0.08727f, 0.35723f, - 0.08791f, 3.41441f, - 0.09299f, 2.13125f, - 0.09778f, 0.57872f, - 0.11158f, 0.19319f, - 0.12208f, 0.85691f, - 0.16346f, 0.44503f, - 0.17183f, 1.17256f, - 0.18821f, 0.67810f, - 0.23565f, 0.93068f, - 0.25353f, 0.31870f, - 0.25723f, 0.55721f, - 0.27028f, 1.43169f, - 0.30369f, 0.74972f, - 0.33457f, 1.10643f, - 0.33886f, 0.45699f, - 0.37588f, 1.81394f, - 0.39890f, 0.91791f, - 0.40041f, 0.63732f, - 0.44484f, 0.33746f, - 0.45345f, 1.29581f, - 0.45454f, 20.73460f, - 0.48041f, 0.79572f, - 0.51620f, 0.51876f, - 0.52239f, 1.07372f, - 0.52970f, 2.77458f, - 0.57723f, 0.69551f, - 0.58187f, 1.53270f, - 0.60145f, 0.92017f, - 0.64601f, 11.29119f, - 0.65868f, 7.45030f, - 0.66000f, 0.40154f, - 0.66097f, 0.58966f, - 0.67054f, 1.18310f, - 0.69460f, 0.84554f, - 0.69993f, 2.09527f, - 0.76202f, 0.69518f, - 0.77672f, 1.01521f, - 0.78020f, 1.40843f, - 0.82725f, 0.50517f, - 0.84005f, 0.27186f, - 0.84739f, 0.84066f, - 0.85816f, 5.06160f, - 0.87075f, 1.17031f, - 0.87474f, 1.80610f, - 0.91532f, 0.65903f, - 0.93722f, 0.94775f, - 0.94762f, 1.39061f, - 1.00344f, 1.14608f, - 1.00732f, 0.77084f, - 1.01480f, 0.39878f, - 1.05149f, 2.51385f, - 1.07194f, 1.57173f, - 1.07599f, 1.01017f, - 1.10831f, 3.54277f, - 1.11815f, 0.59230f, - 1.17359f, 0.85449f, - 1.17572f, 1.24171f, - 1.18513f, 1.93190f -}; - -const float gp_gamma_3sfr_7b[2 * 128] = -{ - 0.00865f, 0.40471f, - 0.01641f, 1.63341f, - 0.02167f, 0.75295f, - 0.02874f, 0.24338f, - 0.05766f, 0.51846f, - 0.07340f, 0.98428f, - 0.07987f, 1.25111f, - 0.08451f, 0.29394f, - 0.08540f, 0.14777f, - 0.09367f, 0.63210f, - 0.11201f, 2.44561f, - 0.11427f, 0.42379f, - 0.14021f, 0.86607f, - 0.15229f, 0.23996f, - 0.16463f, 0.70037f, - 0.17395f, 0.35419f, - 0.17828f, 0.53648f, - 0.17931f, 1.07884f, - 0.20466f, 5.82498f, - 0.22376f, 0.77086f, - 0.22945f, 3.42933f, - 0.23138f, 1.90019f, - 0.23426f, 0.44019f, - 0.23982f, 1.48207f, - 0.24251f, 0.28006f, - 0.24876f, 0.61321f, - 0.26424f, 0.92069f, - 0.28620f, 1.22079f, - 0.30140f, 0.34959f, - 0.30965f, 0.52114f, - 0.31841f, 0.74182f, - 0.33689f, 1.01697f, - 0.37165f, 0.62766f, - 0.37534f, 0.43189f, - 0.38132f, 0.84476f, - 0.38172f, 2.11601f, - 0.40019f, 0.25729f, - 0.41206f, 1.43166f, - 0.41344f, 1.14675f, - 0.43580f, 33.98968f, - 0.44295f, 0.71632f, - 0.44526f, 0.52655f, - 0.44646f, 0.94462f, - 0.49572f, 0.39871f, - 0.50137f, 2.96082f, - 0.50856f, 1.05144f, - 0.51187f, 1.64612f, - 0.51781f, 0.61412f, - 0.51784f, 1.29055f, - 0.51900f, 0.77229f, - 0.55414f, 0.88953f, - 0.58248f, 0.48809f, - 0.59127f, 2.06340f, - 0.59354f, 22.44840f, - 0.59373f, 0.65712f, - 0.60194f, 1.17932f, - 0.61898f, 0.30882f, - 0.62738f, 0.97385f, - 0.63155f, 0.76911f, - 0.63357f, 1.46808f, - 0.66527f, 0.56098f, - 0.68601f, 1.10258f, - 0.69445f, 0.41165f, - 0.69513f, 0.85397f, - 0.70384f, 1.80971f, - 0.70591f, 0.66275f, - 0.70766f, 1.33644f, - 0.71019f, 14.11858f, - 0.74321f, 0.99520f, - 0.74713f, 2.41354f, - 0.76097f, 0.74551f, - 0.77096f, 0.49634f, - 0.77874f, 1.58071f, - 0.78600f, 0.89484f, - 0.78622f, 1.21172f, - 0.80325f, 0.61147f, - 0.80832f, 3.30644f, - 0.82039f, 1.04192f, - 0.83131f, 0.82205f, - 0.84566f, 1.40404f, - 0.84809f, 1.95044f, - 0.85738f, 0.69316f, - 0.86370f, 0.38944f, - 0.86491f, 1.14593f, - 0.87637f, 0.93203f, - 0.90150f, 0.54781f, - 0.90194f, 0.28107f, - 0.90396f, 0.77651f, - 0.91344f, 1.67514f, - 0.91460f, 1.27995f, - 0.92238f, 1.02473f, - 0.94031f, 0.64483f, - 0.94823f, 0.86409f, - 0.95213f, 2.18820f, - 0.95429f, 9.66209f, - 0.96577f, 1.13735f, - 0.96995f, 1.43937f, - 0.98642f, 0.73183f, - 0.98976f, 0.44851f, - 0.99279f, 0.96412f, - 1.01364f, 1.24786f, - 1.01384f, 4.90447f, - 1.03181f, 1.56947f, - 1.03190f, 0.84672f, - 1.03222f, 0.60701f, - 1.03298f, 2.76511f, - 1.04745f, 1.06143f, - 1.07766f, 1.85857f, - 1.07997f, 1.32889f, - 1.08258f, 0.73253f, - 1.09754f, 0.93681f, - 1.11974f, 0.56220f, - 1.12138f, 1.14494f, - 1.12727f, 7.08531f, - 1.13826f, 0.35750f, - 1.15349f, 3.91202f, - 1.15512f, 0.78878f, - 1.15719f, 1.39107f, - 1.17458f, 1.67543f, - 1.17838f, 0.47999f, - 1.18700f, 2.35013f, - 1.18745f, 0.65409f, - 1.18763f, 1.02774f, - 1.19631f, 0.88967f, - 1.20234f, 1.21708f, - 1.20388f, 3.09276f, - 1.20777f, 1.95577f, - 1.22262f, 1.46383f, -}; - const Word16 gp_gamma_3sfr_7b_fx[2 * 128] = //Q14/Q9 { 141, 207, @@ -5482,138 +3148,6 @@ const Word16 gp_gamma_3sfr_7b_fx[2 * 128] = //Q14/Q9 20031, 749, }; -const float gp_gamma_4sfr_7b[2 * 128] = -{ - 0.00614f, 0.34082f, - 0.01391f, 1.05762f, - 0.02443f, 0.52528f, - 0.04487f, 0.81638f, - 0.04874f, 0.21725f, - 0.06993f, 1.56640f, - 0.07629f, 0.67352f, - 0.07879f, 2.22313f, - 0.08098f, 0.43740f, - 0.09023f, 3.33077f, - 0.09505f, 0.95967f, - 0.11885f, 0.57584f, - 0.12134f, 1.24892f, - 0.14301f, 0.75409f, - 0.14566f, 0.41623f, - 0.15510f, 0.25942f, - 0.17725f, 5.62734f, - 0.19522f, 0.88867f, - 0.19554f, 1.43765f, - 0.19650f, 0.53939f, - 0.21138f, 1.07147f, - 0.22636f, 0.66964f, - 0.22834f, 0.34542f, - 0.27047f, 0.44208f, - 0.27343f, 1.81016f, - 0.27564f, 0.77386f, - 0.27753f, 1.21557f, - 0.29907f, 0.56678f, - 0.30585f, 0.98300f, - 0.34187f, 1.45000f, - 0.34276f, 0.33704f, - 0.34717f, 0.83633f, - 0.36470f, 0.65856f, - 0.37820f, 11.45604f, - 0.38412f, 0.49390f, - 0.38418f, 1.13346f, - 0.38485f, 2.05689f, - 0.41457f, 0.93744f, - 0.42426f, 0.76410f, - 0.43646f, 0.41444f, - 0.44541f, 1.31106f, - 0.45622f, 0.61947f, - 0.47346f, 1.04294f, - 0.48320f, 1.67147f, - 0.50019f, 2.83094f, - 0.50036f, 0.85433f, - 0.50221f, 0.50957f, - 0.51480f, 0.30050f, - 0.51835f, 1.21580f, - 0.52200f, 0.69921f, - 0.56910f, 0.96246f, - 0.57210f, 1.45228f, - 0.57318f, 0.42340f, - 0.57432f, 0.57850f, - 0.59272f, 27.62970f, - 0.59273f, 0.79098f, - 0.59350f, 1.16826f, - 0.61815f, 2.22627f, - 0.62550f, 17.18756f, - 0.63421f, 0.67201f, - 0.64271f, 1.72413f, - 0.64340f, 1.05779f, - 0.64445f, 0.50287f, - 0.65749f, 0.86135f, - 0.67595f, 1.29639f, - 0.69966f, 0.59417f, - 0.70254f, 0.38318f, - 0.70504f, 4.35573f, - 0.70641f, 0.97924f, - 0.70865f, 0.76389f, - 0.74185f, 1.53170f, - 0.74492f, 1.12407f, - 0.75096f, 0.25992f, - 0.75760f, 0.66983f, - 0.76031f, 0.16414f, - 0.76100f, 0.86861f, - 0.77722f, 0.48258f, - 0.79164f, 1.24884f, - 0.79787f, 2.75496f, - 0.80213f, 1.92062f, - 0.80316f, 0.97431f, - 0.81517f, 0.75442f, - 0.82155f, 0.58120f, - 0.84462f, 1.38613f, - 0.84535f, 1.07504f, - 0.85024f, 0.83797f, - 0.88172f, 0.66936f, - 0.88187f, 0.33166f, - 0.88569f, 0.91259f, - 0.88687f, 1.67317f, - 0.89706f, 1.21637f, - 0.90149f, 8.92420f, - 0.90534f, 0.44771f, - 0.92077f, 0.99975f, - 0.92235f, 0.75611f, - 0.94772f, 1.12123f, - 0.94920f, 2.19992f, - 0.95049f, 1.49214f, - 0.95591f, 0.56753f, - 0.95686f, 0.86312f, - 0.97999f, 1.26652f, - 0.98876f, 0.99169f, - 0.99623f, 0.72017f, - 1.02046f, 1.14467f, - 1.02732f, 1.82793f, - 1.02752f, 0.87845f, - 1.03568f, 1.37180f, - 1.04905f, 0.61431f, - 1.06354f, 1.05062f, - 1.07911f, 0.77211f, - 1.08693f, 0.40802f, - 1.08979f, 1.54546f, - 1.10192f, 3.63558f, - 1.10610f, 0.92030f, - 1.11530f, 1.23483f, - 1.12457f, 6.79334f, - 1.13708f, 2.42086f, - 1.15646f, 0.27866f, - 1.15650f, 5.03152f, - 1.16276f, 0.51614f, - 1.16381f, 0.68259f, - 1.16652f, 0.98092f, - 1.17818f, 2.98864f, - 1.19029f, 1.63347f, - 1.19374f, 0.82502f, - 1.19452f, 1.35079f, - 1.20038f, 1.97983f, - 1.20145f, 1.11183f, -}; - const Word16 gp_gamma_4sfr_7b_fx[2 * 128] = /*Q14/Q9 */ { 101, 174, @@ -6547,18 +4081,6 @@ const Word16 gp_gamma_4sfr_6b_fx[2 * 64] = /*Q14/Q9 */ /*----------------------------------------------------------------------------------* * Transition coding - gain quantization table *----------------------------------------------------------------------------------*/ -const float tbl_gain_code_tc[N_GAIN_CODE_TC] = -{ - 0.36201f, - 0.72382f, - 0.96727f, - 1.1856f, - 1.4119f, - 1.679f, - 2.0743f, - 3.3301f -}; - const Word16 tbl_gain_code_tc_fx[N_GAIN_CODE_TC] = /*q13 */ { 2966, @@ -6578,19 +4100,6 @@ const Word16 tbl_gain_code_tc_quant_mean[N_GAIN_CODE_TC - 1] = /*-----------------------------------------------------------------* * Transition coding - gain quantization table for g_trans *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float tbl_gain_trans_tc[N_GAIN_TC] = -{ - 35.8449f, - 86.7884f, - 150.0926f, - 233.3001f, - 346.0286f, - 511.5196f, - 819.6746f, - 1500.0f -}; -#endif const Word16 tbl_gain_trans_tc_fx[N_GAIN_TC] = { 4588, 11109, 19212, 29862,/*<- Q7 @@ -6599,41 +4108,6 @@ Q4 ->*/ 5536, 8184, 13115, 24000 /*-----------------------------------------------------------------* * Transition coding - table of prototype glottal impulses *-----------------------------------------------------------------*/ -const float glottal_cdbk[L_IMPULSE*NUM_IMPULSE] = -{ - /* impulse 0 */ - -0.0873f, -0.2063f, -0.3544f, -0.2126f, -0.1581f, -0.5208f, - -0.5973f, 0.2106f, 1.0000f, 0.7095f, -0.0767f, -0.2388f, - 0.0709f, 0.1143f, -0.0099f, 0.1015f, 0.1852f, - /* impulse 1 */ - -0.2646f, -0.1655f, -0.0493f, -0.3314f, -0.5455f, -0.2641f, - -0.2661f, -0.9837f, -1.1157f, 0.1420f, 1.2626f, 0.8151f, - -0.2146f, -0.3466f, 0.0460f, 0.0398f, -0.0598f, - /* impulse 2 */ - 0.0440f, 0.0685f, 0.5108f, 0.3092f, -0.4060f, -0.3111f, - 0.2513f, -0.2578f, -1.1648f, -0.7488f, 0.1596f, 0.0151f, - -0.4176f, -0.1788f, 0.0580f, -0.1082f, -0.1541f, - /* impulse 3 */ - -0.1579f, -0.0873f, -0.0224f, -0.1885f, -0.2000f, -0.0267f, - -0.4276f, -1.1485f, -0.9711f, -0.1718f, -0.0348f, -0.3044f, - 0.0372f, 0.5686f, 0.4015f, 0.0141f, 0.1816f, - /* impulse 4 */ - 0.1022f, 0.3080f, 0.2984f, 0.3270f, 0.7278f, 0.8466f, - -0.1128f, -1.2094f, -0.9235f, 0.0785f, 0.1648f, -0.3146f, - -0.2563f, -0.0338f, -0.1887f, -0.2782f, -0.1077f, - /* impulse 5 */ - -0.0510f, -0.1082f, -0.0058f, -0.0603f, -0.2891f, -0.2515f, - -0.1505f, -0.6434f, -1.2732f, -0.8490f, 0.4029f, 0.9251f, - 0.3172f, -0.2032f, -0.0563f, 0.0897f, -0.0221f, - /* impulse 6 */ - -0.0570f, -0.2277f, -0.1776f, -0.0155f, -0.2296f, -0.4609f, - 0.1004f, 1.0174f, 1.0000f, 0.1053f, -0.3371f, -0.0458f, - 0.0924f, -0.0681f, -0.0348f, 0.0797f, 0.0183f, - /* impulse 7 */ - 0.1327f, 0.0575f, -0.0754f, 0.0862f, 0.1887f, -0.1959f, - -0.3975f, 0.2925f, 0.9839f, 0.6334f, -0.0121f, -0.0045f, - 0.1349f, -0.0815f, -0.1751f, -0.0072f, -0.0099f -}; const Word16 Glottal_cdbk_fx[L_IMPULSE*NUM_IMPULSE] = /*Q13*/ { @@ -6681,19 +4155,6 @@ const Word16 Glottal_cdbk_fx[L_IMPULSE*NUM_IMPULSE] = /*Q13*/ /*----------------------------------------------------------------------------------* * AMR-WB IO WB BWE - deemphasis *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float deem_tab[56] = -{ - 0.630730419421360f, 0.629416164964296f, 0.628129905227103f, 0.626871385453679f, 0.625640357452226f, 0.624436579475560f, 0.623259816105156f, - 0.622109838138814f, 0.620986422481867f, 0.619889352041818f, 0.618818415626335f, 0.617773407844493f, 0.616754129011203f, 0.615760385054730f, - 0.614791987427225f, 0.613848753018209f, 0.612930504070914f, 0.612037068101433f, 0.611168277820597f, 0.610323971058526f, 0.609503990691786f, - 0.608708184573088f, 0.607936405463484f, 0.607188510967000f, 0.606464363467645f, 0.605763830068759f, 0.605086782534647f, 0.604433097234441f, - 0.603802655088168f, 0.603195341514964f, 0.602611046383395f, 0.602049663963857f, 0.601511092883003f, 0.600995236080178f, 0.600502000765808f, - 0.600031298381734f, 0.599583044563439f, 0.599157159104159f, 0.598753565920828f, 0.598372193021851f, 0.598012972476677f, 0.597675840387130f, - 0.597360736860508f, 0.597067605984399f, 0.596796395803217f, 0.596547058296428f, 0.596319549358454f, 0.596113828780239f, 0.595929860232466f, - 0.595767611250409f, 0.595627053220407f, 0.595508161367956f, 0.595410914747406f, 0.595335296233253f, 0.595281292513031f, 0.595248894081778f -}; -#endif const Word16 deem_tab_fx[56] = {//Q15 20668, 20625, 20583, 20541, 20501, 20462, 20423, 20385, @@ -6705,21 +4166,6 @@ const Word16 deem_tab_fx[56] = 19527, 19522, 19518, 19514, 19510, 19508, 19506, 19505 }; -#ifndef IVAS_FLOAT_FIXED -const float filt_hp[56] = -{ - 0.001610570549503f, 0.004682981184545f, 0.008349027644995f, 0.012654118680910f, 0.017642537255539f, 0.023357023549788f, - 0.029838357405517f, 0.037124944278684f, 0.045252408764306f, 0.054253199698241f, 0.064156210737117f, 0.074986420169406f, - 0.086764553520305f, 0.099506772283889f, 0.113224391851657f, 0.127923631411203f, 0.143605398266754f, 0.160265108689438f, - 0.177892547044310f, 0.196471764568281f, 0.215981018793259f, 0.236392754226835f, 0.257673624523579f, 0.279784556007892f, - 0.302680852048711f, 0.326312337440982f, 0.350623541622164f, 0.375553919247241f, 0.401038106365070f, 0.427006210184762f, - 0.453384130194306f, 0.480093908196193f, 0.507054104656542f, 0.534180198625471f, 0.561385008376586f, 0.588579129831778f, - 0.615671389782721f, 0.642569310891142f, 0.669179585444241f, 0.695408554857669f, 0.721162691954086f, 0.746349083098340f, - 0.770875907338563f, 0.794652909783784f, 0.817591866540936f, 0.839607038635485f, 0.860615612448599f, 0.880538124318166f, - 0.899298867069991f, 0.916826276367851f, 0.933053294896263f, 0.947917712517199f, 0.961362480671352f, 0.973335999426038f, - 0.983792375705577f, 0.992691651376520f -}; -#endif const Word16 filt_hp_fx[56] = {//Q15 @@ -6732,20 +4178,6 @@ const Word16 filt_hp_fx[56] = }; /* table of values exp(-j*w*i) */ -#ifndef IVAS_FLOAT_FIXED -const float exp_tab_q[34] = -{ - 1.000000000000000f, -0.980785280403230f, 0.923879532511287f, -0.831469612302544f, - 0.707106781186547f, -0.555570233019602f, 0.382683432365086f, -0.195090322016125f, - -0.000000000000003f, 0.195090322016130f, -0.382683432365091f, 0.555570233019606f, - -0.707106781186553f, 0.831469612302547f, -0.923879532511289f, 0.980785280403231f, - -1.000000000000000f, 0.000000000000000f, -0.195090322016129f, 0.382683432365090f, - -0.555570233019604f, 0.707106781186549f, -0.831469612302546f, 0.923879532511288f, - -0.980785280403231f, 1.000000000000000f, -0.980785280403230f, 0.923879532511286f, - -0.831469612302543f, 0.707106781186542f, -0.555570233019599f, 0.382683432365084f, - -0.195090322016126f, -0.000000000000005f -}; -#endif const Word16 exp_tab_q_fx[34] = /*Q14 */ { @@ -6760,20 +4192,6 @@ const Word16 exp_tab_q_fx[34] = /*Q14 */ -3195, 0 }; -#ifndef IVAS_FLOAT_FIXED -const float exp_tab_p[34] = -{ - 1.000000000000000f, -0.707106781186548f, -0.000000000000000f, 0.707106781186548f, - -1.000000000000000f, 0.707106781186547f, 0.000000000000000f, -0.707106781186547f, - 1.000000000000000f, -0.707106781186546f, -0.000000000000003f, 0.707106781186548f, - -1.000000000000000f, 0.707106781186546f, -0.000000000000000f, -0.707106781186548f, - 1.000000000000000f, 0.000000000000000f, -0.707106781186548f, 1.000000000000000f, - -0.707106781186547f, -0.000000000000000f, 0.707106781186549f, -1.000000000000000f, - 0.707106781186548f, 0.000000000000000f, -0.707106781186549f, 1.000000000000000f, - -0.707106781186548f, 0.000000000000000f, 0.707106781186549f, -1.000000000000000f, - 0.707106781186547f, 0.000000000000000f -}; -#endif const Word16 exp_tab_p_fx[34] = /*Q14 */ { @@ -6788,14 +4206,6 @@ const Word16 exp_tab_p_fx[34] = /*Q14 */ 11585, 0 }; /* gains for 23k85 mode */ -const float HP_gain[16] = -{ - /* values in Q15: 3624, 4673, 5597, 6479, 7425, 8378, 9324, 10264, 11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728 */ - 0.110595703125000f, 0.142608642578125f, 0.170806884765625f, 0.197723388671875f, - 0.226593017578125f, 0.255676269531250f, 0.284545898437500f, 0.313232421875000f, - 0.342102050781250f, 0.372497558593750f, 0.408660888671875f, 0.453002929687500f, - 0.511779785156250f, 0.599822998046875f, 0.741241455078125f, 0.998779296875000f -}; const Word16 HP_gain_fx[16] = {//Q15 @@ -6803,56 +4213,6 @@ const Word16 HP_gain_fx[16] = 11210, 12206, 13391, 14844, 16770, 19655, 24289, 32728 }; /* band-pass 6-8kHz filter */ -const float fir_6k_8k[31]= -{ - 0.001331237773450f, -0.004734562657574f, 0.009865692979275f, -0.014704482109862f, - 0.017170883692091f, -0.018004559024736f, 0.022168155759205f, -0.036012990296002f, - 0.060614595353634f, -0.086000479894051f, 0.092413785317631f, -0.060769441864153f, - -0.012918738234409f, 0.109335430548556f, -0.191677822804549f, 0.224071909378974f, - -0.191677822804549f, 0.109335430548556f, -0.012918738234409f, -0.060769441864153f, - 0.092413785317631f, -0.086000479894051f, 0.060614595353634f, -0.036012990296002f, - 0.022168155759205f, -0.018004559024736f, 0.017170883692091f, -0.014704482109862f, - 0.009865692979275f, -0.004734562657574f, 0.001331237773450f -}; - - -/*----------------------------------------------------------------------------------* - * 2nd order high-pass filter with cut-off frequency at 400 Hz. - * Designed with Chebyshev of 2nd type - * Optimized for fixed-point to get the following frequency response: - * - * frequency: 0Hz 100Hz 200Hz 300Hz 400Hz 630Hz 1.5kHz 3kHz - * dB loss: -infdB -30dB -20dB -10dB -3dB +6dB +1dB 0dB - * - * Algorithm: - * - * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] - * + a[1]*y[i-1] + a[2]*y[i-2]; - * - * short b[3] = {3660, -7320, 3660}; in Q12 - * short a[3] = {4096, 7320, -3540}; in Q12 - *----------------------------------------------------------------------------------*/ - -const float b_hp400[3] = { 0.893554687f, -1.787109375f, 0.893554687f }; -const float a_hp400[3] = { 1.000000000f, 1.787109375f, -0.864257812f }; -/*----------------------------------------------------------------------------------* - * 15th-order band-pass 6kHz to 7kHz FIR filter. - * - * frequency: 4kHz 5kHz 5.5kHz 6kHz 6.5kHz 7kHz 7.5kHz 8kHz - * dB loss: -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB - * - * gain = 4.0 - *----------------------------------------------------------------------------------*/ -const float fir_6k_7k[31] = -{ - -0.001005f, 0.001428f, 0.000965f, -0.000863f, -0.011296f, - 0.034231f, -0.043397f, -0.000000f, 0.115906f, -0.271028f, - 0.376868f, -0.335243f, 0.108276f, 0.237003f, -0.549363f, - 0.675000f, -0.549363f, 0.237003f, 0.108276f, -0.335243f, - 0.376868f, -0.271028f, 0.115906f, -0.000000f, -0.043397f, - 0.034231f, -0.011296f, -0.000863f, 0.000965f, 0.001428f, - -0.001005f -}; const Word16 fir_6k_7k_fx[31] = {//Q15 @@ -7170,15 +4530,6 @@ const Word16 no_lead_p_fx[][MAX_NO_SCALES * 2] = // Q0 /*----------------------------------------------------------------------------------* * Enhacer - 2.0 - 6.4 kHz impulse response with phase dispersion in freq. domain *----------------------------------------------------------------------------------*/ -const float low_H_flt[L_SUBFR] = -{ - 1.000300f, 0.999812f, 1.000125f, 0.999868f, 0.999879f, 0.999935f, 0.999838f, 0.999992f, 1.000076f, 0.626554f, 0.619763f, 0.603882f, 0.857647f, 0.997470f, -0.032403f, - 0.806652f, 0.999300f, 0.946634f, 0.574139f, 0.973425f, 0.288464f, 0.890704f, 0.635021f, 0.597882f, -0.997076f, -0.110774f, -0.648392f, 0.771888f, 0.888411f, -0.774123f, - 0.695109f, 0.498998f, 0.999900f, -0.866525f, 0.719081f, 0.633481f, 0.458722f, 0.636210f, -0.761251f, 0.993932f, -0.073228f, -0.801816f, 0.772627f, -0.454461f, 0.957250f, - -0.229682f, -0.818972f, -0.322274f, 0.031800f, -0.591141f, -0.999439f, -0.074385f, 0.514882f, -0.797032f, -0.784999f, -0.779712f, -0.000028f, 0.000164f, 0.000029f, -0.000135f, - -0.000047f, -0.000033f, -0.000080f, 0.000099f -}; - const Word16 low_H[64] = /* (1Q14) */ { 16388, 16380, 16386, 16381, 16382, 16382, 16381, 16383, 16385, 10265, @@ -7204,14 +4555,6 @@ const Word16 low_H16k[80] = /* (1Q14) */ /*----------------------------------------------------------------------------------* * Enhancer - 3.2 - 6.4 kHz impulse response with phase dispersion in freq. domain *----------------------------------------------------------------------------------*/ -const float mid_H_flt[L_SUBFR] = -{ - 0.999900f, 0.999848f, 1.000003f, 1.000048f, 1.000107f, 1.000242f, 1.000165f, 0.999909f, 1.000212f, 0.999933f, 1.000099f, 1.000100f, 1.000113f, 1.000018f, 0.999901f, 1.000267f, - 0.906200f, 0.587715f, 0.808629f, 0.884216f, 0.671089f, 0.039238f, 0.843369f, 0.841006f, 0.394788f, 0.528863f, 0.710110f, 0.596973f, -0.893309f, -0.059908f, 0.716925f, -0.044067f, - 1.000100f, -0.998848f, -0.697170f, 0.998190f, 0.449397f, 0.802480f, -0.704198f, -0.848591f, -0.918649f, -0.540881f, 0.537822f, -0.999200f, -0.741318f, 0.467580f, -0.588204f, - -0.808928f, -0.422500f, 0.000219f, -0.000261f, -0.000086f, -0.000313f, 0.000080f, 0.000406f, 0.000351f, -0.000449f, -0.000065f, 0.000214f, -0.000254f, 0.000002f, -0.000090f, - -0.000198f, 0.000193f -}; const Word16 mid_H[64] = /* (1Q14) */ { @@ -7241,36 +4584,11 @@ const Word16 mid_H16k[80] = /* (1Q14) */ * response : 0dB @ 50Hz, -6dB @ 500Hz, -45dB @ 1kHz) * filter parameters: fs/2=8000, fc=500, gain=1.0, n=16 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float tab_hup_l[SIZ_TAB_HUP_L] = -{ - -0.001246f, 0.002200f, -0.004791f, 0.009621f, -0.017685f, 0.031212f, -0.057225f, 0.135470f, 0.973955f, -0.103495f, 0.048663f, -0.027090f, 0.015280f, -0.008160f, - 0.003961f, -0.001827f, -0.002388f, 0.004479f, -0.009715f, 0.019261f, -0.035118f, 0.061945f, -0.115187f, 0.294161f, 0.898322f, -0.170283f, 0.083211f, -0.046645f, - 0.026210f, -0.013854f, 0.006641f, -0.003099f, -0.003277f, 0.006456f, -0.013906f, 0.027229f, -0.049283f, 0.086990f, -0.164590f, 0.464041f, 0.780309f, -0.199879f, - 0.100795f, -0.056792f, 0.031761f, -0.016606f, 0.007866f, -0.003740f, -0.003770f, 0.007714f, -0.016462f, 0.031849f, -0.057272f, 0.101294f, -0.195755f, 0.630993f, - 0.630993f, -0.195755f, 0.101294f, -0.057272f, 0.031849f, -0.016462f, 0.007714f, -0.003770f, -0.003740f, 0.007866f, -0.016606f, 0.031761f, -0.056792f, 0.100795f, - -0.199879f, 0.780309f, 0.464041f, -0.164590f, 0.086990f, -0.049283f, 0.027229f, -0.013906f, 0.006456f, -0.003277f, -0.003099f, 0.006641f, -0.013854f, 0.026210f, - -0.046645f, 0.083211f, -0.170283f, 0.898322f, 0.294161f, -0.115187f, 0.061945f, -0.035118f, 0.019261f, -0.009715f, 0.004479f, -0.002388f, -0.001827f, 0.003961f, - -0.008160f, 0.015280f, -0.027090f, 0.048663f, -0.103495f, 0.973955f, 0.135470f, -0.057225f, 0.031212f, -0.017685f, 0.009621f, -0.004791f, 0.002200f, -0.001246f -}; - -const float tab_hup_s[SIZ_TAB_HUP_S] = -{ - -0.005772f, 0.087669f, 0.965882f, -0.048753f, -0.014793f, 0.214886f, 0.868791f, -0.065537f, -0.028507f, 0.374334f, 0.723418f, -0.060834f, -0.045567f, 0.550847f, - 0.550847f, -0.045567f, -0.060834f, 0.723418f, 0.374334f, -0.028507f, -0.065537f, 0.868791f, 0.214886f, -0.014793f, -0.048753f, 0.965882f, 0.087669f, -0.005772f -}; -#endif /*-------------------------------------------------------------------* * Bass post-filter *-------------------------------------------------------------------*/ -const float filt_lp[1+L_FILT] = -{ - 0.088250f, 0.086410f, 0.081074f, 0.072768f, 0.062294f, 0.050623f, 0.038774f, 0.027692f, - 0.018130f, 0.010578f, 0.005221f, 0.001946f, 0.000385f -}; - /* For bass post filter */ const Word16 filt_lp_fx[1 + L_FILT] = { @@ -7280,13 +4598,6 @@ const Word16 filt_lp_fx[1 + L_FILT] = 13/*0.000385f Q15*/ }; -const float filt_lp_16kHz[1+L_FILT16k] = -{ - 0.071410f, 0.070433f, 0.067568f, 0.062999f, 0.057020f, 0.050005f, - 0.042378f, 0.034577f, 0.027022f, 0.020078f, 0.014031f, 0.009070f, - 0.005276f, 0.002625f, 0.000999f, 0.000205f -}; - const Word16 filt_lp_16kHz_fx[1 + L_FILT16k] = { 2340/*0.071410f Q15*/, 2308/*0.070433f Q15*/, 2214/*0.067568f Q15*/, 2064/*0.062999f Q15*/, @@ -7361,470 +4672,6 @@ const Word16 index_mask_ACELP[3] = { 0, 31, 511 }; // Q0 * EDCT tables *------------------------------------------------------------------------------*/ -const float edct_table_80[80] = -{ - 0.33433591f, 0.33420702f, 0.33394929f, 0.33356281f, 0.33304773f, 0.33240426f, 0.33163264f, 0.33073317f, - 0.32970620f, 0.32855212f, 0.32727137f, 0.32586446f, 0.32433192f, 0.32267434f, 0.32089236f, 0.31898668f, - 0.31695802f, 0.31480717f, 0.31253495f, 0.31014224f, 0.30762997f, 0.30499910f, 0.30225065f, 0.29938568f, - 0.29640528f, 0.29331062f, 0.29010288f, 0.28678330f, 0.28335316f, 0.27981378f, 0.27616653f, 0.27241281f, - 0.26855407f, 0.26459179f, 0.26052751f, 0.25636280f, 0.25209925f, 0.24773851f, 0.24328226f, 0.23873223f, - 0.23409016f, 0.22935784f, 0.22453710f, 0.21962979f, 0.21463782f, 0.20956310f, 0.20440759f, 0.19917327f, - 0.19386217f, 0.18847633f, 0.18301783f, 0.17748878f, 0.17189129f, 0.16622755f, 0.16049971f, 0.15471000f, - 0.14886065f, 0.14295391f, 0.13699206f, 0.13097739f, 0.12491224f, 0.11879892f, 0.11263981f, 0.10643727f, - 0.10019369f, 0.09391149f, 0.08759309f, 0.08124092f, 0.07485742f, 0.06844507f, 0.06200633f, 0.05554369f, - 0.04905963f, 0.04255666f, 0.03603728f, 0.02950402f, 0.02295937f, 0.01640588f, 0.00984606f, 0.00328244f -}; - -const float edct_table_120[120] = -{ - 0.30212379f, 0.30207202f, 0.30196850f, 0.30181323f, 0.30160625f, 0.30134759f, 0.30103730f, 0.30067542f, - 0.30026203f, 0.29979718f, 0.29928097f, 0.29871348f, 0.29809481f, 0.29742505f, 0.29670434f, 0.29593279f, - 0.29511053f, 0.29423770f, 0.29331446f, 0.29234097f, 0.29131738f, 0.29024387f, 0.28912063f, 0.28794786f, - 0.28672574f, 0.28545450f, 0.28413434f, 0.28276550f, 0.28134821f, 0.27988271f, 0.27836926f, 0.27680811f, - 0.27519952f, 0.27354379f, 0.27184118f, 0.27009200f, 0.26829654f, 0.26645510f, 0.26456801f, 0.26263559f, - 0.26065816f, 0.25863608f, 0.25656968f, 0.25445931f, 0.25230535f, 0.25010815f, 0.24786810f, 0.24558558f, - 0.24326098f, 0.24089470f, 0.23848714f, 0.23603872f, 0.23354985f, 0.23102097f, 0.22845250f, 0.22584489f, - 0.22319858f, 0.22051402f, 0.21779168f, 0.21503203f, 0.21223553f, 0.20940267f, 0.20653392f, 0.20362979f, - 0.20069076f, 0.19771735f, 0.19471006f, 0.19166941f, 0.18859591f, 0.18549011f, 0.18235251f, 0.17918368f, - 0.17598414f, 0.17275445f, 0.16949515f, 0.16620682f, 0.16289000f, 0.15954528f, 0.15617322f, 0.15277439f, - 0.14934940f, 0.14589881f, 0.14242322f, 0.13892323f, 0.13539943f, 0.13185244f, 0.12828285f, 0.12469128f, - 0.12107835f, 0.11744467f, 0.11379087f, 0.11011757f, 0.10642540f, 0.10271499f, 0.09898699f, 0.09524203f, - 0.09148074f, 0.08770378f, 0.08391180f, 0.08010544f, 0.07628535f, 0.07245219f, 0.06860661f, 0.06474928f, - 0.06088086f, 0.05700200f, 0.05311338f, 0.04921565f, 0.04530949f, 0.04139557f, 0.03747456f, 0.03354713f, - 0.02961394f, 0.02567569f, 0.02173303f, 0.01778665f, 0.01383722f, 0.00988542f, 0.00593193f, 0.00197742f -}; - -const float edct_table_320[320] = -{ - 0.23643389f, 0.23642819f, 0.23641680f, 0.23639971f, 0.23637692f, 0.23634844f, 0.23631426f, 0.23627439f, - 0.23622882f, 0.23617757f, 0.23612062f, 0.23605798f, 0.23598966f, 0.23591565f, 0.23583595f, 0.23575057f, - 0.23565951f, 0.23556278f, 0.23546036f, 0.23535227f, 0.23523852f, 0.23511909f, 0.23499400f, 0.23486324f, - 0.23472683f, 0.23458476f, 0.23443704f, 0.23428367f, 0.23412465f, 0.23396000f, 0.23378970f, 0.23361377f, - 0.23343222f, 0.23324504f, 0.23305223f, 0.23285382f, 0.23264979f, 0.23244015f, 0.23222492f, 0.23200409f, - 0.23177767f, 0.23154566f, 0.23130808f, 0.23106492f, 0.23081619f, 0.23056191f, 0.23030206f, 0.23003667f, - 0.22976573f, 0.22948926f, 0.22920726f, 0.22891974f, 0.22862670f, 0.22832815f, 0.22802410f, 0.22771455f, - 0.22739952f, 0.22707901f, 0.22675302f, 0.22642158f, 0.22608467f, 0.22574232f, 0.22539453f, 0.22504131f, - 0.22468267f, 0.22431861f, 0.22394915f, 0.22357429f, 0.22319405f, 0.22280842f, 0.22241743f, 0.22202108f, - 0.22161938f, 0.22121233f, 0.22079996f, 0.22038227f, 0.21995927f, 0.21953096f, 0.21909737f, 0.21865850f, - 0.21821436f, 0.21776496f, 0.21731032f, 0.21685044f, 0.21638533f, 0.21591501f, 0.21543948f, 0.21495877f, - 0.21447288f, 0.21398181f, 0.21348560f, 0.21298423f, 0.21247774f, 0.21196612f, 0.21144940f, 0.21092759f, - 0.21040069f, 0.20986872f, 0.20933169f, 0.20878962f, 0.20824252f, 0.20769041f, 0.20713328f, 0.20657117f, - 0.20600408f, 0.20543202f, 0.20485502f, 0.20427308f, 0.20368621f, 0.20309444f, 0.20249778f, 0.20189623f, - 0.20128983f, 0.20067857f, 0.20006247f, 0.19944156f, 0.19881584f, 0.19818532f, 0.19755004f, 0.19690999f, - 0.19626520f, 0.19561568f, 0.19496144f, 0.19430251f, 0.19363890f, 0.19297062f, 0.19229769f, 0.19162012f, - 0.19093794f, 0.19025116f, 0.18955980f, 0.18886386f, 0.18816338f, 0.18745836f, 0.18674883f, 0.18603479f, - 0.18531628f, 0.18459330f, 0.18386586f, 0.18313400f, 0.18239773f, 0.18165706f, 0.18091202f, 0.18016261f, - 0.17940887f, 0.17865080f, 0.17788842f, 0.17712176f, 0.17635084f, 0.17557566f, 0.17479625f, 0.17401263f, - 0.17322482f, 0.17243283f, 0.17163669f, 0.17083642f, 0.17003202f, 0.16922353f, 0.16841096f, 0.16759434f, - 0.16677367f, 0.16594899f, 0.16512031f, 0.16428765f, 0.16345103f, 0.16261047f, 0.16176600f, 0.16091763f, - 0.16006537f, 0.15920927f, 0.15834932f, 0.15748556f, 0.15661801f, 0.15574668f, 0.15487160f, 0.15399279f, - 0.15311027f, 0.15222405f, 0.15133417f, 0.15044065f, 0.14954350f, 0.14864274f, 0.14773840f, 0.14683051f, - 0.14591907f, 0.14500412f, 0.14408568f, 0.14316376f, 0.14223840f, 0.14130960f, 0.14037740f, 0.13944182f, - 0.13850288f, 0.13756060f, 0.13661501f, 0.13566613f, 0.13471397f, 0.13375858f, 0.13279995f, 0.13183813f, - 0.13087313f, 0.12990498f, 0.12893370f, 0.12795931f, 0.12698183f, 0.12600130f, 0.12501773f, 0.12403115f, - 0.12304158f, 0.12204905f, 0.12105357f, 0.12005518f, 0.11905390f, 0.11804974f, 0.11704275f, 0.11603293f, - 0.11502031f, 0.11400493f, 0.11298680f, 0.11196594f, 0.11094239f, 0.10991616f, 0.10888729f, 0.10785579f, - 0.10682169f, 0.10578502f, 0.10474580f, 0.10370406f, 0.10265981f, 0.10161310f, 0.10056393f, 0.09951234f, - 0.09845836f, 0.09740200f, 0.09634329f, 0.09528227f, 0.09421894f, 0.09315335f, 0.09208551f, 0.09101546f, - 0.08994321f, 0.08886879f, 0.08779223f, 0.08671356f, 0.08563280f, 0.08454997f, 0.08346511f, 0.08237823f, - 0.08128937f, 0.08019855f, 0.07910580f, 0.07801115f, 0.07691461f, 0.07581622f, 0.07471600f, 0.07361399f, - 0.07251019f, 0.07140466f, 0.07029740f, 0.06918844f, 0.06807783f, 0.06696557f, 0.06585169f, 0.06473623f, - 0.06361921f, 0.06250066f, 0.06138060f, 0.06025906f, 0.05913607f, 0.05801166f, 0.05688584f, 0.05575866f, - 0.05463013f, 0.05350029f, 0.05236916f, 0.05123676f, 0.05010313f, 0.04896830f, 0.04783228f, 0.04669511f, - 0.04555682f, 0.04441742f, 0.04327696f, 0.04213546f, 0.04099294f, 0.03984943f, 0.03870496f, 0.03755956f, - 0.03641326f, 0.03526607f, 0.03411804f, 0.03296919f, 0.03181954f, 0.03066912f, 0.02951797f, 0.02836610f, - 0.02721355f, 0.02606034f, 0.02490651f, 0.02375208f, 0.02259707f, 0.02144152f, 0.02028545f, 0.01912890f, - 0.01797188f, 0.01681443f, 0.01565658f, 0.01449834f, 0.01333976f, 0.01218086f, 0.01102166f, 0.00986220f, - 0.00870250f, 0.00754259f, 0.00638250f, 0.00522226f, 0.00406188f, 0.00290142f, 0.00174088f, 0.00058030f -}; - -const float edct_table_480[480] = -{ - 0.21364290f, 0.21364061f, 0.21363603f, 0.21362917f, 0.21362002f, 0.21360858f, 0.21359485f, 0.21357884f, - 0.21356053f, 0.21353995f, 0.21351707f, 0.21349191f, 0.21346446f, 0.21343473f, 0.21340271f, 0.21336840f, - 0.21333181f, 0.21329294f, 0.21325178f, 0.21320833f, 0.21316261f, 0.21311460f, 0.21306431f, 0.21301173f, - 0.21295688f, 0.21289974f, 0.21284033f, 0.21277863f, 0.21271466f, 0.21264841f, 0.21257988f, 0.21250908f, - 0.21243600f, 0.21236064f, 0.21228301f, 0.21220311f, 0.21212093f, 0.21203649f, 0.21194977f, 0.21186078f, - 0.21176952f, 0.21167600f, 0.21158021f, 0.21148215f, 0.21138183f, 0.21127924f, 0.21117439f, 0.21106728f, - 0.21095791f, 0.21084628f, 0.21073239f, 0.21061625f, 0.21049785f, 0.21037720f, 0.21025429f, 0.21012913f, - 0.21000172f, 0.20987206f, 0.20974016f, 0.20960601f, 0.20946961f, 0.20933097f, 0.20919009f, 0.20904697f, - 0.20890161f, 0.20875401f, 0.20860417f, 0.20845211f, 0.20829781f, 0.20814128f, 0.20798252f, 0.20782153f, - 0.20765832f, 0.20749288f, 0.20732522f, 0.20715535f, 0.20698325f, 0.20680894f, 0.20663241f, 0.20645367f, - 0.20627271f, 0.20608955f, 0.20590418f, 0.20571661f, 0.20552684f, 0.20533486f, 0.20514068f, 0.20494431f, - 0.20474574f, 0.20454498f, 0.20434203f, 0.20413689f, 0.20392956f, 0.20372005f, 0.20350836f, 0.20329449f, - 0.20307844f, 0.20286022f, 0.20263983f, 0.20241726f, 0.20219253f, 0.20196563f, 0.20173657f, 0.20150535f, - 0.20127197f, 0.20103643f, 0.20079874f, 0.20055891f, 0.20031692f, 0.20007279f, 0.19982652f, 0.19957810f, - 0.19932755f, 0.19907486f, 0.19882005f, 0.19856310f, 0.19830403f, 0.19804283f, 0.19777951f, 0.19751407f, - 0.19724652f, 0.19697686f, 0.19670509f, 0.19643121f, 0.19615522f, 0.19587714f, 0.19559696f, 0.19531468f, - 0.19503031f, 0.19474386f, 0.19445531f, 0.19416469f, 0.19387199f, 0.19357720f, 0.19328035f, 0.19298143f, - 0.19268044f, 0.19237739f, 0.19207227f, 0.19176510f, 0.19145588f, 0.19114460f, 0.19083128f, 0.19051592f, - 0.19019851f, 0.18987907f, 0.18955759f, 0.18923409f, 0.18890856f, 0.18858100f, 0.18825143f, 0.18791983f, - 0.18758623f, 0.18725062f, 0.18691300f, 0.18657338f, 0.18623176f, 0.18588815f, 0.18554255f, 0.18519496f, - 0.18484539f, 0.18449384f, 0.18414031f, 0.18378481f, 0.18342734f, 0.18306791f, 0.18270651f, 0.18234316f, - 0.18197786f, 0.18161061f, 0.18124141f, 0.18087028f, 0.18049720f, 0.18012220f, 0.17974526f, 0.17936640f, - 0.17898562f, 0.17860292f, 0.17821831f, 0.17783179f, 0.17744336f, 0.17705304f, 0.17666082f, 0.17626671f, - 0.17587071f, 0.17547282f, 0.17507306f, 0.17467142f, 0.17426791f, 0.17386254f, 0.17345530f, 0.17304621f, - 0.17263526f, 0.17222246f, 0.17180782f, 0.17139134f, 0.17097303f, 0.17055288f, 0.17013091f, 0.16970711f, - 0.16928150f, 0.16885407f, 0.16842484f, 0.16799380f, 0.16756096f, 0.16712633f, 0.16668991f, 0.16625171f, - 0.16581172f, 0.16536996f, 0.16492642f, 0.16448113f, 0.16403406f, 0.16358525f, 0.16313468f, 0.16268236f, - 0.16222830f, 0.16177251f, 0.16131498f, 0.16085572f, 0.16039474f, 0.15993205f, 0.15946764f, 0.15900152f, - 0.15853370f, 0.15806419f, 0.15759298f, 0.15712008f, 0.15664550f, 0.15616924f, 0.15569131f, 0.15521171f, - 0.15473045f, 0.15424753f, 0.15376297f, 0.15327675f, 0.15278889f, 0.15229940f, 0.15180828f, 0.15131553f, - 0.15082115f, 0.15032517f, 0.14982757f, 0.14932837f, 0.14882757f, 0.14832518f, 0.14782120f, 0.14731564f, - 0.14680849f, 0.14629978f, 0.14578950f, 0.14527766f, 0.14476426f, 0.14424931f, 0.14373282f, 0.14321478f, - 0.14269522f, 0.14217412f, 0.14165151f, 0.14112737f, 0.14060173f, 0.14007458f, 0.13954592f, 0.13901578f, - 0.13848414f, 0.13795103f, 0.13741643f, 0.13688037f, 0.13634283f, 0.13580384f, 0.13526339f, 0.13472150f, - 0.13417816f, 0.13363339f, 0.13308718f, 0.13253955f, 0.13199050f, 0.13144003f, 0.13088816f, 0.13033489f, - 0.12978022f, 0.12922416f, 0.12866672f, 0.12810790f, 0.12754770f, 0.12698614f, 0.12642323f, 0.12585895f, - 0.12529333f, 0.12472637f, 0.12415807f, 0.12358845f, 0.12301749f, 0.12244523f, 0.12187165f, 0.12129676f, - 0.12072058f, 0.12014310f, 0.11956434f, 0.11898429f, 0.11840297f, 0.11782039f, 0.11723654f, 0.11665144f, - 0.11606508f, 0.11547749f, 0.11488866f, 0.11429859f, 0.11370731f, 0.11311480f, 0.11252109f, 0.11192617f, - 0.11133005f, 0.11073273f, 0.11013424f, 0.10953456f, 0.10893371f, 0.10833169f, 0.10772852f, 0.10712419f, - 0.10651871f, 0.10591209f, 0.10530434f, 0.10469546f, 0.10408546f, 0.10347434f, 0.10286212f, 0.10224879f, - 0.10163437f, 0.10101886f, 0.10040227f, 0.09978460f, 0.09916587f, 0.09854607f, 0.09792522f, 0.09730332f, - 0.09668037f, 0.09605639f, 0.09543139f, 0.09480536f, 0.09417831f, 0.09355026f, 0.09292121f, 0.09229116f, - 0.09166012f, 0.09102810f, 0.09039510f, 0.08976114f, 0.08912622f, 0.08849034f, 0.08785351f, 0.08721574f, - 0.08657704f, 0.08593742f, 0.08529687f, 0.08465540f, 0.08401304f, 0.08336977f, 0.08272561f, 0.08208056f, - 0.08143463f, 0.08078784f, 0.08014017f, 0.07949165f, 0.07884228f, 0.07819206f, 0.07754101f, 0.07688912f, - 0.07623641f, 0.07558289f, 0.07492855f, 0.07427342f, 0.07361748f, 0.07296076f, 0.07230326f, 0.07164499f, - 0.07098594f, 0.07032614f, 0.06966558f, 0.06900428f, 0.06834224f, 0.06767946f, 0.06701596f, 0.06635175f, - 0.06568682f, 0.06502119f, 0.06435487f, 0.06368785f, 0.06302015f, 0.06235178f, 0.06168274f, 0.06101304f, - 0.06034268f, 0.05967168f, 0.05900004f, 0.05832777f, 0.05765488f, 0.05698136f, 0.05630724f, 0.05563251f, - 0.05495719f, 0.05428128f, 0.05360479f, 0.05292772f, 0.05225009f, 0.05157189f, 0.05089315f, 0.05021386f, - 0.04953403f, 0.04885367f, 0.04817279f, 0.04749139f, 0.04680949f, 0.04612708f, 0.04544418f, 0.04476079f, - 0.04407692f, 0.04339258f, 0.04270778f, 0.04202252f, 0.04133681f, 0.04065065f, 0.03996406f, 0.03927704f, - 0.03858961f, 0.03790175f, 0.03721350f, 0.03652484f, 0.03583579f, 0.03514636f, 0.03445656f, 0.03376638f, - 0.03307584f, 0.03238495f, 0.03169371f, 0.03100213f, 0.03031022f, 0.02961799f, 0.02892544f, 0.02823258f, - 0.02753941f, 0.02684595f, 0.02615221f, 0.02545818f, 0.02476388f, 0.02406932f, 0.02337449f, 0.02267942f, - 0.02198411f, 0.02128856f, 0.02059278f, 0.01989678f, 0.01920056f, 0.01850415f, 0.01780753f, 0.01711072f, - 0.01641373f, 0.01571657f, 0.01501923f, 0.01432174f, 0.01362409f, 0.01292630f, 0.01222836f, 0.01153030f, - 0.01083211f, 0.01013381f, 0.00943540f, 0.00873688f, 0.00803828f, 0.00733959f, 0.00664081f, 0.00594197f, - 0.00524307f, 0.00454410f, 0.00384509f, 0.00314604f, 0.00244696f, 0.00174784f, 0.00104871f, 0.00034957f -}; - -const float edct_table_128[128] = -{ - 0.29728989f, 0.29724512f, 0.29715558f, 0.29702130f, 0.29684228f, 0.29661856f, 0.29635017f, 0.29603715f, - 0.29567955f, 0.29527743f, 0.29483083f, 0.29433983f, 0.29380451f, 0.29322494f, 0.29260121f, 0.29193342f, - 0.29122167f, 0.29046605f, 0.28966670f, 0.28882372f, 0.28793724f, 0.28700741f, 0.28603435f, 0.28501821f, - 0.28395915f, 0.28285733f, 0.28171292f, 0.28052607f, 0.27929698f, 0.27802583f, 0.27671281f, 0.27535812f, - 0.27396196f, 0.27252454f, 0.27104609f, 0.26952681f, 0.26796694f, 0.26636672f, 0.26472638f, 0.26304618f, - 0.26132636f, 0.25956719f, 0.25776893f, 0.25593185f, 0.25405623f, 0.25214235f, 0.25019049f, 0.24820096f, - 0.24617405f, 0.24411007f, 0.24200932f, 0.23987213f, 0.23769882f, 0.23548971f, 0.23324513f, 0.23096543f, - 0.22865095f, 0.22630203f, 0.22391903f, 0.22150231f, 0.21905224f, 0.21656917f, 0.21405349f, 0.21150558f, - 0.20892581f, 0.20631458f, 0.20367228f, 0.20099931f, 0.19829606f, 0.19556296f, 0.19280040f, 0.19000881f, - 0.18718860f, 0.18434021f, 0.18146405f, 0.17856057f, 0.17563019f, 0.17267337f, 0.16969054f, 0.16668215f, - 0.16364867f, 0.16059054f, 0.15750822f, 0.15440219f, 0.15127290f, 0.14812083f, 0.14494646f, 0.14175026f, - 0.13853271f, 0.13529429f, 0.13203551f, 0.12875684f, 0.12545877f, 0.12214182f, 0.11880647f, 0.11545323f, - 0.11208260f, 0.10869509f, 0.10529122f, 0.10187148f, 0.09843641f, 0.09498651f, 0.09152231f, 0.08804432f, - 0.08455308f, 0.08104910f, 0.07753291f, 0.07400505f, 0.07046605f, 0.06691643f, 0.06335674f, 0.05978750f, - 0.05620926f, 0.05262256f, 0.04902793f, 0.04542591f, 0.04181706f, 0.03820191f, 0.03458100f, 0.03095489f, - 0.02732412f, 0.02368923f, 0.02005077f, 0.01640930f, 0.01276535f, 0.00911948f, 0.00547224f, 0.00182417f -}; - -const float edct_table_160[160] = -{ - 0.28116346f, 0.28113637f, 0.28108217f, 0.28100088f, 0.28089251f, 0.28075707f, 0.28059457f, 0.28040502f, - 0.28018844f, 0.27994487f, 0.27967431f, 0.27937679f, 0.27905235f, 0.27870101f, 0.27832281f, 0.27791778f, - 0.27748597f, 0.27702741f, 0.27654216f, 0.27603024f, 0.27549173f, 0.27492666f, 0.27433510f, 0.27371709f, - 0.27307270f, 0.27240199f, 0.27170503f, 0.27098188f, 0.27023261f, 0.26945730f, 0.26865602f, 0.26782884f, - 0.26697585f, 0.26609713f, 0.26519276f, 0.26426283f, 0.26330743f, 0.26232665f, 0.26132059f, 0.26028934f, - 0.25923300f, 0.25815168f, 0.25704548f, 0.25591450f, 0.25475886f, 0.25357866f, 0.25237403f, 0.25114506f, - 0.24989190f, 0.24861465f, 0.24731343f, 0.24598838f, 0.24463962f, 0.24326728f, 0.24187150f, 0.24045240f, - 0.23901013f, 0.23754482f, 0.23605661f, 0.23454566f, 0.23301210f, 0.23145608f, 0.22987775f, 0.22827726f, - 0.22665478f, 0.22501045f, 0.22334443f, 0.22165688f, 0.21994797f, 0.21821787f, 0.21646673f, 0.21469472f, - 0.21290203f, 0.21108881f, 0.20925525f, 0.20740152f, 0.20552780f, 0.20363427f, 0.20172112f, 0.19978852f, - 0.19783667f, 0.19586574f, 0.19387594f, 0.19186746f, 0.18984048f, 0.18779520f, 0.18573183f, 0.18365055f, - 0.18155157f, 0.17943510f, 0.17730133f, 0.17515047f, 0.17298273f, 0.17079832f, 0.16859744f, 0.16638032f, - 0.16414716f, 0.16189818f, 0.15963359f, 0.15735362f, 0.15505848f, 0.15274840f, 0.15042360f, 0.14808429f, - 0.14573072f, 0.14336310f, 0.14098166f, 0.13858663f, 0.13617825f, 0.13375674f, 0.13132234f, 0.12887528f, - 0.12641580f, 0.12394414f, 0.12146053f, 0.11896521f, 0.11645843f, 0.11394042f, 0.11141144f, 0.10887171f, - 0.10632149f, 0.10376102f, 0.10119055f, 0.09861033f, 0.09602061f, 0.09342163f, 0.09081364f, 0.08819691f, - 0.08557167f, 0.08293818f, 0.08029671f, 0.07764749f, 0.07499079f, 0.07232686f, 0.06965596f, 0.06697834f, - 0.06429427f, 0.06160401f, 0.05890780f, 0.05620592f, 0.05349862f, 0.05078617f, 0.04806882f, 0.04534683f, - 0.04262048f, 0.03989002f, 0.03715571f, 0.03441782f, 0.03167662f, 0.02893236f, 0.02618532f, 0.02343575f, - 0.02068392f, 0.01793009f, 0.01517454f, 0.01241753f, 0.00965932f, 0.00690018f, 0.00414037f, 0.00138017f -}; - -const float edct_table_40[40] = -{ - 0.39747255f, 0.39685967f, 0.39563487f, 0.39380003f, 0.39135797f, 0.38831247f, 0.38466823f, 0.38043085f, - 0.37560687f, 0.37020373f, 0.36422977f, 0.35769419f, 0.35060707f, 0.34297935f, 0.33482277f, 0.32614992f, - 0.31697417f, 0.30730967f, 0.29717132f, 0.28657476f, 0.27553631f, 0.26407301f, 0.25220253f, 0.23994317f, - 0.22731383f, 0.21433400f, 0.20102367f, 0.18740339f, 0.17349414f, 0.15931737f, 0.14489495f, 0.13024911f, - 0.11540244f, 0.10037782f, 0.08519843f, 0.06988767f, 0.05446914f, 0.03896663f, 0.02340404f, 0.00780536f -}; - -const float edct_table_20[20] = -{ - 0.47209725f, 0.46918661f, 0.46338329f, 0.45472305f, 0.44325929f, 0.42906269f, 0.41222077f, 0.39283738f, - 0.37103202f, 0.34693912f, 0.32070722f, 0.29249806f, 0.26248555f, 0.23085473f, 0.19780061f, 0.16352698f, - 0.12824516f, 0.09217267f, 0.05553190f, 0.01854875f -}; - - -const float edct_table_64[64] = -{ - 0.35349683f, 0.35328389f, 0.35285816f, 0.35221987f, 0.35136942f, 0.35030732f, 0.34903420f, 0.34755084f, - 0.34585813f, 0.34395709f, 0.34184886f, 0.33953471f, 0.33701604f, 0.33429436f, 0.33137132f, 0.32824867f, - 0.32492830f, 0.32141220f, 0.31770249f, 0.31380142f, 0.30971132f, 0.30543466f, 0.30097402f, 0.29633209f, - 0.29151165f, 0.28651562f, 0.28134701f, 0.27600892f, 0.27050457f, 0.26483728f, 0.25901046f, 0.25302763f, - 0.24689238f, 0.24060841f, 0.23417951f, 0.22760955f, 0.22090248f, 0.21406235f, 0.20709328f, 0.19999946f, - 0.19278517f, 0.18545475f, 0.17801263f, 0.17046327f, 0.16281123f, 0.15506112f, 0.14721761f, 0.13928542f, - 0.13126933f, 0.12317417f, 0.11500482f, 0.10676618f, 0.09846324f, 0.09010099f, 0.08168446f, 0.07321873f, - 0.06470889f, 0.05616008f, 0.04757744f, 0.03896613f, 0.03033136f, 0.02167832f, 0.01301222f, 0.00433828f -}; - -const float edct_table_100[100] = -{ - 0.31620704f, 0.31612902f, 0.31597300f, 0.31573902f, 0.31542714f, 0.31503742f, 0.31456998f, 0.31402492f, - 0.31340238f, 0.31270252f, 0.31192550f, 0.31107151f, 0.31014078f, 0.30913352f, 0.30804998f, 0.30689044f, - 0.30565518f, 0.30434451f, 0.30295874f, 0.30149822f, 0.29996331f, 0.29835439f, 0.29667186f, 0.29491612f, - 0.29308762f, 0.29118680f, 0.28921414f, 0.28717012f, 0.28505525f, 0.28287004f, 0.28061503f, 0.27829079f, - 0.27589789f, 0.27343691f, 0.27090847f, 0.26831318f, 0.26565169f, 0.26292465f, 0.26013275f, 0.25727665f, - 0.25435708f, 0.25137475f, 0.24833040f, 0.24522478f, 0.24205865f, 0.23883279f, 0.23554801f, 0.23220511f, - 0.22880491f, 0.22534827f, 0.22183602f, 0.21826903f, 0.21464819f, 0.21097439f, 0.20724854f, 0.20347155f, - 0.19964436f, 0.19576790f, 0.19184315f, 0.18787106f, 0.18385261f, 0.17978880f, 0.17568064f, 0.17152912f, - 0.16733529f, 0.16310016f, 0.15882480f, 0.15451024f, 0.15015756f, 0.14576784f, 0.14134215f, 0.13688158f, - 0.13238724f, 0.12786023f, 0.12330168f, 0.11871271f, 0.11409444f, 0.10944803f, 0.10477460f, 0.10007533f, - 0.09535137f, 0.09060388f, 0.08583403f, 0.08104300f, 0.07623198f, 0.07140215f, 0.06655470f, 0.06169084f, - 0.05681175f, 0.05191864f, 0.04701272f, 0.04209520f, 0.03716730f, 0.03223022f, 0.02728520f, 0.02233344f, - 0.01737617f, 0.01241461f, 0.00744999f, 0.00248354f -}; - - -const float edct_table_200[200] = -{ - 0.26591044f, 0.26589403f, 0.26586123f, 0.26581203f, 0.26574643f, 0.26566443f, 0.26556605f, 0.26545129f, - 0.26532015f, 0.26517265f, 0.26500879f, 0.26482859f, 0.26463205f, 0.26441918f, 0.26419000f, 0.26394453f, - 0.26368278f, 0.26340476f, 0.26311049f, 0.26279999f, 0.26247328f, 0.26213038f, 0.26177132f, 0.26139610f, - 0.26100476f, 0.26059732f, 0.26017381f, 0.25973424f, 0.25927866f, 0.25880708f, 0.25831954f, 0.25781606f, - 0.25729668f, 0.25676143f, 0.25621034f, 0.25564344f, 0.25506078f, 0.25446238f, 0.25384829f, 0.25321854f, - 0.25257317f, 0.25191222f, 0.25123573f, 0.25054374f, 0.24983629f, 0.24911344f, 0.24837522f, 0.24762168f, - 0.24685286f, 0.24606882f, 0.24526960f, 0.24445525f, 0.24362582f, 0.24278136f, 0.24192193f, 0.24104757f, - 0.24015834f, 0.23925430f, 0.23833551f, 0.23740201f, 0.23645386f, 0.23549113f, 0.23451388f, 0.23352215f, - 0.23251603f, 0.23149556f, 0.23046081f, 0.22941185f, 0.22834873f, 0.22727153f, 0.22618031f, 0.22507514f, - 0.22395608f, 0.22282321f, 0.22167659f, 0.22051630f, 0.21934241f, 0.21815499f, 0.21695411f, 0.21573985f, - 0.21451228f, 0.21327148f, 0.21201752f, 0.21075048f, 0.20947045f, 0.20817749f, 0.20687169f, 0.20555313f, - 0.20422189f, 0.20287806f, 0.20152171f, 0.20015293f, 0.19877180f, 0.19737841f, 0.19597285f, 0.19455519f, - 0.19312554f, 0.19168397f, 0.19023058f, 0.18876546f, 0.18728869f, 0.18580037f, 0.18430058f, 0.18278943f, - 0.18126701f, 0.17973340f, 0.17818870f, 0.17663302f, 0.17506644f, 0.17348906f, 0.17190097f, 0.17030229f, - 0.16869310f, 0.16707350f, 0.16544360f, 0.16380349f, 0.16215328f, 0.16049306f, 0.15882295f, 0.15714304f, - 0.15545343f, 0.15375424f, 0.15204556f, 0.15032750f, 0.14860017f, 0.14686367f, 0.14511812f, 0.14336361f, - 0.14160026f, 0.13982818f, 0.13804747f, 0.13625824f, 0.13446061f, 0.13265468f, 0.13084058f, 0.12901840f, - 0.12718826f, 0.12535028f, 0.12350456f, 0.12165123f, 0.11979039f, 0.11792217f, 0.11604667f, 0.11416401f, - 0.11227431f, 0.11037768f, 0.10847425f, 0.10656412f, 0.10464742f, 0.10272426f, 0.10079477f, 0.09885906f, - 0.09691726f, 0.09496947f, 0.09301583f, 0.09105645f, 0.08909145f, 0.08712096f, 0.08514509f, 0.08316397f, - 0.08117772f, 0.07918646f, 0.07719032f, 0.07518942f, 0.07318388f, 0.07117382f, 0.06915937f, 0.06714066f, - 0.06511781f, 0.06309094f, 0.06106018f, 0.05902565f, 0.05698748f, 0.05494580f, 0.05290072f, 0.05085238f, - 0.04880091f, 0.04674643f, 0.04468906f, 0.04262893f, 0.04056618f, 0.03850092f, 0.03643329f, 0.03436341f, - 0.03229142f, 0.03021743f, 0.02814157f, 0.02606398f, 0.02398478f, 0.02190411f, 0.01982208f, 0.01773883f, - 0.01565448f, 0.01356917f, 0.01148302f, 0.00939617f, 0.00730873f, 0.00522084f, 0.00313264f, 0.00104423f -}; - -const float edct_table_240[240] = -{ - 0.25406349f, 0.25405260f, 0.25403084f, 0.25399819f, 0.25395466f, 0.25390025f, 0.25383497f, 0.25375881f, - 0.25367179f, 0.25357389f, 0.25346514f, 0.25334553f, 0.25321506f, 0.25307375f, 0.25292160f, 0.25275861f, - 0.25258479f, 0.25240016f, 0.25220471f, 0.25199846f, 0.25178142f, 0.25155358f, 0.25131498f, 0.25106561f, - 0.25080548f, 0.25053461f, 0.25025301f, 0.24996068f, 0.24965766f, 0.24934393f, 0.24901953f, 0.24868445f, - 0.24833873f, 0.24798236f, 0.24761538f, 0.24723778f, 0.24684960f, 0.24645084f, 0.24604153f, 0.24562167f, - 0.24519129f, 0.24475042f, 0.24429905f, 0.24383722f, 0.24336495f, 0.24288225f, 0.24238915f, 0.24188566f, - 0.24137181f, 0.24084762f, 0.24031312f, 0.23976832f, 0.23921325f, 0.23864793f, 0.23807239f, 0.23748665f, - 0.23689074f, 0.23628468f, 0.23566850f, 0.23504223f, 0.23440588f, 0.23375950f, 0.23310310f, 0.23243671f, - 0.23176037f, 0.23107410f, 0.23037794f, 0.22967190f, 0.22895603f, 0.22823035f, 0.22749489f, 0.22674968f, - 0.22599477f, 0.22523017f, 0.22445592f, 0.22367206f, 0.22287862f, 0.22207563f, 0.22126313f, 0.22044115f, - 0.21960972f, 0.21876889f, 0.21791869f, 0.21705915f, 0.21619032f, 0.21531222f, 0.21442490f, 0.21352839f, - 0.21262274f, 0.21170798f, 0.21078415f, 0.20985130f, 0.20890945f, 0.20795865f, 0.20699895f, 0.20603038f, - 0.20505298f, 0.20406680f, 0.20307188f, 0.20206825f, 0.20105598f, 0.20003509f, 0.19900563f, 0.19796764f, - 0.19692118f, 0.19586628f, 0.19480299f, 0.19373136f, 0.19265142f, 0.19156324f, 0.19046685f, 0.18936230f, - 0.18824963f, 0.18712891f, 0.18600017f, 0.18486346f, 0.18371883f, 0.18256633f, 0.18140601f, 0.18023792f, - 0.17906211f, 0.17787863f, 0.17668753f, 0.17548886f, 0.17428267f, 0.17306902f, 0.17184795f, 0.17061952f, - 0.16938379f, 0.16814079f, 0.16689060f, 0.16563326f, 0.16436882f, 0.16309734f, 0.16181887f, 0.16053347f, - 0.15924120f, 0.15794210f, 0.15663624f, 0.15532366f, 0.15400444f, 0.15267862f, 0.15134625f, 0.15000741f, - 0.14866213f, 0.14731049f, 0.14595254f, 0.14458834f, 0.14321795f, 0.14184141f, 0.14045881f, 0.13907018f, - 0.13767560f, 0.13627512f, 0.13486881f, 0.13345671f, 0.13203890f, 0.13061544f, 0.12918637f, 0.12775178f, - 0.12631171f, 0.12486623f, 0.12341540f, 0.12195929f, 0.12049795f, 0.11903145f, 0.11755985f, 0.11608321f, - 0.11460161f, 0.11311509f, 0.11162373f, 0.11012758f, 0.10862672f, 0.10712120f, 0.10561110f, 0.10409647f, - 0.10257739f, 0.10105391f, 0.09952610f, 0.09799402f, 0.09645775f, 0.09491735f, 0.09337288f, 0.09182441f, - 0.09027201f, 0.08871574f, 0.08715567f, 0.08559187f, 0.08402440f, 0.08245333f, 0.08087873f, 0.07930067f, - 0.07771920f, 0.07613441f, 0.07454636f, 0.07295511f, 0.07136074f, 0.06976332f, 0.06816290f, 0.06655956f, - 0.06495338f, 0.06334441f, 0.06173272f, 0.06011839f, 0.05850149f, 0.05688208f, 0.05526024f, 0.05363602f, - 0.05200951f, 0.05038078f, 0.04874988f, 0.04711689f, 0.04548189f, 0.04384494f, 0.04220611f, 0.04056547f, - 0.03892310f, 0.03727906f, 0.03563342f, 0.03398625f, 0.03233763f, 0.03068762f, 0.02903630f, 0.02738373f, - 0.02573000f, 0.02407516f, 0.02241928f, 0.02076245f, 0.01910473f, 0.01744619f, 0.01578690f, 0.01412694f, - 0.01246637f, 0.01080527f, 0.00914370f, 0.00748175f, 0.00581947f, 0.00415694f, 0.00249424f, 0.00083142f -}; - -const float edct_table_256[256] = -{ - 0.24999750f, 0.24998809f, 0.24996926f, 0.24994103f, 0.24990338f, 0.24985633f, 0.24979987f, 0.24973400f, - 0.24965873f, 0.24957406f, 0.24948000f, 0.24937654f, 0.24926370f, 0.24914147f, 0.24900986f, 0.24886887f, - 0.24871852f, 0.24855880f, 0.24838972f, 0.24821129f, 0.24802352f, 0.24782640f, 0.24761996f, 0.24740419f, - 0.24717911f, 0.24694473f, 0.24670104f, 0.24644807f, 0.24618582f, 0.24591430f, 0.24563353f, 0.24534350f, - 0.24504424f, 0.24473575f, 0.24441805f, 0.24409114f, 0.24375505f, 0.24340977f, 0.24305534f, 0.24269175f, - 0.24231903f, 0.24193718f, 0.24154622f, 0.24114617f, 0.24073704f, 0.24031885f, 0.23989161f, 0.23945534f, - 0.23901005f, 0.23855576f, 0.23809249f, 0.23762026f, 0.23713908f, 0.23664898f, 0.23614996f, 0.23564205f, - 0.23512527f, 0.23459964f, 0.23406518f, 0.23352190f, 0.23296983f, 0.23240899f, 0.23183940f, 0.23126109f, - 0.23067406f, 0.23007835f, 0.22947398f, 0.22886097f, 0.22823934f, 0.22760912f, 0.22697033f, 0.22632299f, - 0.22566713f, 0.22500278f, 0.22432996f, 0.22364869f, 0.22295900f, 0.22226091f, 0.22155446f, 0.22083967f, - 0.22011656f, 0.21938516f, 0.21864551f, 0.21789762f, 0.21714153f, 0.21637726f, 0.21560485f, 0.21482432f, - 0.21403570f, 0.21323902f, 0.21243432f, 0.21162161f, 0.21080094f, 0.20997234f, 0.20913582f, 0.20829144f, - 0.20743921f, 0.20657917f, 0.20571136f, 0.20483580f, 0.20395252f, 0.20306157f, 0.20216298f, 0.20125677f, - 0.20034298f, 0.19942165f, 0.19849282f, 0.19755651f, 0.19661276f, 0.19566161f, 0.19470310f, 0.19373725f, - 0.19276411f, 0.19178371f, 0.19079609f, 0.18980129f, 0.18879934f, 0.18779029f, 0.18677416f, 0.18575100f, - 0.18472085f, 0.18368375f, 0.18263973f, 0.18158883f, 0.18053109f, 0.17946656f, 0.17839527f, 0.17731727f, - 0.17623259f, 0.17514127f, 0.17404336f, 0.17293890f, 0.17182793f, 0.17071048f, 0.16958661f, 0.16845636f, - 0.16731976f, 0.16617686f, 0.16502771f, 0.16387235f, 0.16271081f, 0.16154315f, 0.16036940f, 0.15918962f, - 0.15800385f, 0.15681212f, 0.15561450f, 0.15441101f, 0.15320171f, 0.15198664f, 0.15076585f, 0.14953939f, - 0.14830729f, 0.14706961f, 0.14582639f, 0.14457768f, 0.14332353f, 0.14206399f, 0.14079909f, 0.13952889f, - 0.13825344f, 0.13697279f, 0.13568698f, 0.13439606f, 0.13310008f, 0.13179909f, 0.13049313f, 0.12918227f, - 0.12786654f, 0.12654599f, 0.12522068f, 0.12389066f, 0.12255597f, 0.12121667f, 0.11987280f, 0.11852443f, - 0.11717159f, 0.11581433f, 0.11445272f, 0.11308680f, 0.11171662f, 0.11034223f, 0.10896369f, 0.10758105f, - 0.10619436f, 0.10480367f, 0.10340903f, 0.10201050f, 0.10060813f, 0.09920197f, 0.09779208f, 0.09637850f, - 0.09496130f, 0.09354052f, 0.09211622f, 0.09068845f, 0.08925727f, 0.08782272f, 0.08638487f, 0.08494377f, - 0.08349947f, 0.08205203f, 0.08060149f, 0.07914792f, 0.07769138f, 0.07623190f, 0.07476956f, 0.07330440f, - 0.07183648f, 0.07036586f, 0.06889259f, 0.06741672f, 0.06593832f, 0.06445743f, 0.06297412f, 0.06148844f, - 0.06000044f, 0.05851018f, 0.05701772f, 0.05552311f, 0.05402641f, 0.05252768f, 0.05102697f, 0.04952434f, - 0.04801985f, 0.04651354f, 0.04500549f, 0.04349574f, 0.04198435f, 0.04047138f, 0.03895689f, 0.03744094f, - 0.03592357f, 0.03440485f, 0.03288483f, 0.03136358f, 0.02984115f, 0.02831759f, 0.02679296f, 0.02526733f, - 0.02374075f, 0.02221327f, 0.02068496f, 0.01915586f, 0.01762605f, 0.01609557f, 0.01456449f, 0.01303286f, - 0.01150073f, 0.00996818f, 0.00843525f, 0.00690200f, 0.00536849f, 0.00383478f, 0.00230093f, 0.00076699f -}; - -const float edct_table_400[400] = -{ - 0.22360588f, 0.22360243f, 0.22359554f, 0.22358519f, 0.22357140f, 0.22355416f, 0.22353347f, 0.22350934f, - 0.22348175f, 0.22345073f, 0.22341625f, 0.22337833f, 0.22333697f, 0.22329216f, 0.22324391f, 0.22319221f, - 0.22313708f, 0.22307850f, 0.22301648f, 0.22295103f, 0.22288213f, 0.22280980f, 0.22273403f, 0.22265483f, - 0.22257219f, 0.22248612f, 0.22239662f, 0.22230369f, 0.22220734f, 0.22210755f, 0.22200434f, 0.22189771f, - 0.22178765f, 0.22167418f, 0.22155728f, 0.22143697f, 0.22131325f, 0.22118611f, 0.22105556f, 0.22092160f, - 0.22078424f, 0.22064347f, 0.22049930f, 0.22035172f, 0.22020075f, 0.22004639f, 0.21988863f, 0.21972748f, - 0.21956294f, 0.21939501f, 0.21922370f, 0.21904901f, 0.21887095f, 0.21868950f, 0.21850469f, 0.21831650f, - 0.21812495f, 0.21793004f, 0.21773176f, 0.21753013f, 0.21732514f, 0.21711680f, 0.21690511f, 0.21669008f, - 0.21647170f, 0.21624999f, 0.21602494f, 0.21579656f, 0.21556486f, 0.21532983f, 0.21509147f, 0.21484981f, - 0.21460482f, 0.21435653f, 0.21410494f, 0.21385004f, 0.21359184f, 0.21333035f, 0.21306557f, 0.21279750f, - 0.21252616f, 0.21225153f, 0.21197363f, 0.21169247f, 0.21140803f, 0.21112034f, 0.21082939f, 0.21053520f, - 0.21023775f, 0.20993706f, 0.20963314f, 0.20932598f, 0.20901559f, 0.20870198f, 0.20838516f, 0.20806511f, - 0.20774186f, 0.20741541f, 0.20708576f, 0.20675291f, 0.20641688f, 0.20607766f, 0.20573527f, 0.20538970f, - 0.20504096f, 0.20468907f, 0.20433401f, 0.20397581f, 0.20361446f, 0.20324997f, 0.20288234f, 0.20251159f, - 0.20213771f, 0.20176072f, 0.20138061f, 0.20099740f, 0.20061109f, 0.20022169f, 0.19982920f, 0.19943362f, - 0.19903497f, 0.19863326f, 0.19822847f, 0.19782064f, 0.19740975f, 0.19699581f, 0.19657884f, 0.19615884f, - 0.19573581f, 0.19530977f, 0.19488071f, 0.19444865f, 0.19401358f, 0.19357553f, 0.19313449f, 0.19269047f, - 0.19224348f, 0.19179353f, 0.19134062f, 0.19088476f, 0.19042595f, 0.18996421f, 0.18949954f, 0.18903194f, - 0.18856143f, 0.18808802f, 0.18761170f, 0.18713249f, 0.18665039f, 0.18616542f, 0.18567757f, 0.18518686f, - 0.18469330f, 0.18419688f, 0.18369763f, 0.18319554f, 0.18269063f, 0.18218290f, 0.18167236f, 0.18115902f, - 0.18064289f, 0.18012397f, 0.17960227f, 0.17907781f, 0.17855058f, 0.17802060f, 0.17748787f, 0.17695240f, - 0.17641421f, 0.17587330f, 0.17532967f, 0.17478334f, 0.17423432f, 0.17368260f, 0.17312821f, 0.17257115f, - 0.17201143f, 0.17144906f, 0.17088404f, 0.17031639f, 0.16974611f, 0.16917321f, 0.16859770f, 0.16801960f, - 0.16743890f, 0.16685562f, 0.16626977f, 0.16568135f, 0.16509038f, 0.16449686f, 0.16390080f, 0.16330222f, - 0.16270112f, 0.16209751f, 0.16149140f, 0.16088280f, 0.16027172f, 0.15965817f, 0.15904216f, 0.15842369f, - 0.15780278f, 0.15717944f, 0.15655367f, 0.15592549f, 0.15529490f, 0.15466192f, 0.15402655f, 0.15338881f, - 0.15274870f, 0.15210624f, 0.15146143f, 0.15081429f, 0.15016482f, 0.14951304f, 0.14885894f, 0.14820256f, - 0.14754389f, 0.14688294f, 0.14621973f, 0.14555426f, 0.14488655f, 0.14421660f, 0.14354443f, 0.14287005f, - 0.14219346f, 0.14151468f, 0.14083372f, 0.14015058f, 0.13946529f, 0.13877784f, 0.13808825f, 0.13739654f, - 0.13670270f, 0.13600676f, 0.13530872f, 0.13460859f, 0.13390639f, 0.13320212f, 0.13249580f, 0.13178744f, - 0.13107704f, 0.13036462f, 0.12965019f, 0.12893376f, 0.12821535f, 0.12749495f, 0.12677259f, 0.12604828f, - 0.12532202f, 0.12459383f, 0.12386371f, 0.12313169f, 0.12239777f, 0.12166196f, 0.12092427f, 0.12018472f, - 0.11944332f, 0.11870007f, 0.11795500f, 0.11720810f, 0.11645940f, 0.11570890f, 0.11495662f, 0.11420256f, - 0.11344675f, 0.11268918f, 0.11192987f, 0.11116884f, 0.11040610f, 0.10964165f, 0.10887551f, 0.10810770f, - 0.10733821f, 0.10656707f, 0.10579429f, 0.10501988f, 0.10424384f, 0.10346620f, 0.10268696f, 0.10190614f, - 0.10112375f, 0.10033980f, 0.09955430f, 0.09876726f, 0.09797871f, 0.09718864f, 0.09639707f, 0.09560402f, - 0.09480949f, 0.09401350f, 0.09321606f, 0.09241718f, 0.09161688f, 0.09081516f, 0.09001205f, 0.08920754f, - 0.08840166f, 0.08759442f, 0.08678583f, 0.08597589f, 0.08516464f, 0.08435207f, 0.08353819f, 0.08272303f, - 0.08190660f, 0.08108890f, 0.08026995f, 0.07944976f, 0.07862835f, 0.07780572f, 0.07698190f, 0.07615688f, - 0.07533070f, 0.07450335f, 0.07367485f, 0.07284522f, 0.07201446f, 0.07118259f, 0.07034963f, 0.06951558f, - 0.06868046f, 0.06784427f, 0.06700705f, 0.06616879f, 0.06532951f, 0.06448922f, 0.06364793f, 0.06280567f, - 0.06196244f, 0.06111825f, 0.06027312f, 0.05942705f, 0.05858008f, 0.05773220f, 0.05688343f, 0.05603378f, - 0.05518327f, 0.05433190f, 0.05347970f, 0.05262667f, 0.05177284f, 0.05091820f, 0.05006278f, 0.04920659f, - 0.04834964f, 0.04749194f, 0.04663351f, 0.04577436f, 0.04491450f, 0.04405396f, 0.04319273f, 0.04233084f, - 0.04146829f, 0.04060511f, 0.03974129f, 0.03887687f, 0.03801185f, 0.03714624f, 0.03628005f, 0.03541331f, - 0.03454602f, 0.03367820f, 0.03280986f, 0.03194101f, 0.03107167f, 0.03020186f, 0.02933157f, 0.02846084f, - 0.02758966f, 0.02671806f, 0.02584605f, 0.02497364f, 0.02410084f, 0.02322767f, 0.02235414f, 0.02148027f, - 0.02060607f, 0.01973155f, 0.01885673f, 0.01798161f, 0.01710622f, 0.01623056f, 0.01535466f, 0.01447851f, - 0.01360215f, 0.01272557f, 0.01184880f, 0.01097184f, 0.01009472f, 0.00921744f, 0.00834001f, 0.00746246f, - 0.00658480f, 0.00570703f, 0.00482917f, 0.00395124f, 0.00307325f, 0.00219521f, 0.00131714f, 0.00043905f -}; - -const float edct_table_600[600] = -{ - 0.20205118f, 0.20204980f, 0.20204703f, 0.20204287f, 0.20203734f, 0.20203041f, 0.20202210f, 0.20201241f, - 0.20200133f, 0.20198887f, 0.20197502f, 0.20195979f, 0.20194318f, 0.20192518f, 0.20190579f, 0.20188503f, - 0.20186288f, 0.20183934f, 0.20181442f, 0.20178812f, 0.20176044f, 0.20173137f, 0.20170092f, 0.20166909f, - 0.20163587f, 0.20160128f, 0.20156530f, 0.20152794f, 0.20148920f, 0.20144908f, 0.20140758f, 0.20136469f, - 0.20132043f, 0.20127479f, 0.20122777f, 0.20117936f, 0.20112958f, 0.20107842f, 0.20102589f, 0.20097197f, - 0.20091668f, 0.20086001f, 0.20080196f, 0.20074254f, 0.20068174f, 0.20061957f, 0.20055602f, 0.20049110f, - 0.20042480f, 0.20035713f, 0.20028809f, 0.20021767f, 0.20014588f, 0.20007272f, 0.19999819f, 0.19992228f, - 0.19984501f, 0.19976637f, 0.19968635f, 0.19960497f, 0.19952222f, 0.19943811f, 0.19935262f, 0.19926577f, - 0.19917756f, 0.19908798f, 0.19899703f, 0.19890472f, 0.19881105f, 0.19871602f, 0.19861962f, 0.19852186f, - 0.19842274f, 0.19832226f, 0.19822043f, 0.19811723f, 0.19801267f, 0.19790676f, 0.19779949f, 0.19769087f, - 0.19758089f, 0.19746956f, 0.19735687f, 0.19724283f, 0.19712744f, 0.19701070f, 0.19689261f, 0.19677317f, - 0.19665237f, 0.19653024f, 0.19640675f, 0.19628192f, 0.19615574f, 0.19602822f, 0.19589936f, 0.19576915f, - 0.19563760f, 0.19550471f, 0.19537048f, 0.19523491f, 0.19509800f, 0.19495976f, 0.19482018f, 0.19467926f, - 0.19453701f, 0.19439343f, 0.19424851f, 0.19410226f, 0.19395469f, 0.19380578f, 0.19365554f, 0.19350398f, - 0.19335109f, 0.19319688f, 0.19304134f, 0.19288448f, 0.19272630f, 0.19256679f, 0.19240597f, 0.19224383f, - 0.19208036f, 0.19191559f, 0.19174950f, 0.19158209f, 0.19141337f, 0.19124334f, 0.19107200f, 0.19089934f, - 0.19072538f, 0.19055012f, 0.19037354f, 0.19019566f, 0.19001648f, 0.18983600f, 0.18965421f, 0.18947113f, - 0.18928674f, 0.18910106f, 0.18891409f, 0.18872581f, 0.18853625f, 0.18834539f, 0.18815324f, 0.18795980f, - 0.18776508f, 0.18756906f, 0.18737176f, 0.18717318f, 0.18697331f, 0.18677217f, 0.18656974f, 0.18636603f, - 0.18616105f, 0.18595479f, 0.18574726f, 0.18553845f, 0.18532837f, 0.18511702f, 0.18490440f, 0.18469052f, - 0.18447537f, 0.18425895f, 0.18404127f, 0.18382233f, 0.18360213f, 0.18338067f, 0.18315796f, 0.18293399f, - 0.18270877f, 0.18248229f, 0.18225456f, 0.18202559f, 0.18179536f, 0.18156389f, 0.18133118f, 0.18109722f, - 0.18086202f, 0.18062558f, 0.18038791f, 0.18014900f, 0.17990885f, 0.17966747f, 0.17942486f, 0.17918102f, - 0.17893595f, 0.17868965f, 0.17844213f, 0.17819339f, 0.17794342f, 0.17769224f, 0.17743984f, 0.17718622f, - 0.17693139f, 0.17667534f, 0.17641808f, 0.17615962f, 0.17589995f, 0.17563907f, 0.17537698f, 0.17511370f, - 0.17484922f, 0.17458353f, 0.17431665f, 0.17404858f, 0.17377931f, 0.17350885f, 0.17323721f, 0.17296437f, - 0.17269035f, 0.17241515f, 0.17213876f, 0.17186120f, 0.17158245f, 0.17130253f, 0.17102144f, 0.17073917f, - 0.17045574f, 0.17017113f, 0.16988536f, 0.16959843f, 0.16931033f, 0.16902107f, 0.16873066f, 0.16843909f, - 0.16814636f, 0.16785248f, 0.16755745f, 0.16726127f, 0.16696395f, 0.16666548f, 0.16636587f, 0.16606511f, - 0.16576322f, 0.16546020f, 0.16515604f, 0.16485075f, 0.16454433f, 0.16423678f, 0.16392810f, 0.16361830f, - 0.16330738f, 0.16299534f, 0.16268219f, 0.16236791f, 0.16205253f, 0.16173603f, 0.16141843f, 0.16109972f, - 0.16077991f, 0.16045899f, 0.16013697f, 0.15981386f, 0.15948965f, 0.15916435f, 0.15883796f, 0.15851047f, - 0.15818191f, 0.15785225f, 0.15752152f, 0.15718971f, 0.15685682f, 0.15652285f, 0.15618781f, 0.15585170f, - 0.15551452f, 0.15517628f, 0.15483697f, 0.15449661f, 0.15415518f, 0.15381269f, 0.15346916f, 0.15312457f, - 0.15277893f, 0.15243224f, 0.15208451f, 0.15173574f, 0.15138592f, 0.15103507f, 0.15068319f, 0.15033027f, - 0.14997632f, 0.14962134f, 0.14926534f, 0.14890831f, 0.14855026f, 0.14819120f, 0.14783112f, 0.14747003f, - 0.14710792f, 0.14674481f, 0.14638069f, 0.14601557f, 0.14564945f, 0.14528233f, 0.14491421f, 0.14454510f, - 0.14417500f, 0.14380391f, 0.14343184f, 0.14305878f, 0.14268474f, 0.14230973f, 0.14193374f, 0.14155677f, - 0.14117884f, 0.14079994f, 0.14042007f, 0.14003924f, 0.13965745f, 0.13927471f, 0.13889101f, 0.13850635f, - 0.13812075f, 0.13773420f, 0.13734671f, 0.13695828f, 0.13656890f, 0.13617860f, 0.13578735f, 0.13539518f, - 0.13500208f, 0.13460805f, 0.13421311f, 0.13381724f, 0.13342045f, 0.13302275f, 0.13262414f, 0.13222462f, - 0.13182419f, 0.13142286f, 0.13102063f, 0.13061750f, 0.13021348f, 0.12980856f, 0.12940275f, 0.12899606f, - 0.12858848f, 0.12818002f, 0.12777069f, 0.12736047f, 0.12694939f, 0.12653743f, 0.12612461f, 0.12571092f, - 0.12529637f, 0.12488096f, 0.12446470f, 0.12404758f, 0.12362961f, 0.12321080f, 0.12279114f, 0.12237064f, - 0.12194930f, 0.12152712f, 0.12110411f, 0.12068027f, 0.12025561f, 0.11983012f, 0.11940381f, 0.11897668f, - 0.11854873f, 0.11811998f, 0.11769041f, 0.11726004f, 0.11682886f, 0.11639688f, 0.11596410f, 0.11553053f, - 0.11509617f, 0.11466102f, 0.11422508f, 0.11378836f, 0.11335086f, 0.11291258f, 0.11247353f, 0.11203371f, - 0.11159312f, 0.11115177f, 0.11070965f, 0.11026678f, 0.10982315f, 0.10937876f, 0.10893363f, 0.10848775f, - 0.10804113f, 0.10759376f, 0.10714566f, 0.10669683f, 0.10624726f, 0.10579696f, 0.10534594f, 0.10489420f, - 0.10444174f, 0.10398856f, 0.10353467f, 0.10308007f, 0.10262477f, 0.10216876f, 0.10171205f, 0.10125464f, - 0.10079654f, 0.10033775f, 0.09987827f, 0.09941811f, 0.09895726f, 0.09849574f, 0.09803354f, 0.09757067f, - 0.09710713f, 0.09664293f, 0.09617806f, 0.09571253f, 0.09524635f, 0.09477952f, 0.09431203f, 0.09384390f, - 0.09337513f, 0.09290571f, 0.09243566f, 0.09196498f, 0.09149366f, 0.09102172f, 0.09054915f, 0.09007597f, - 0.08960216f, 0.08912774f, 0.08865272f, 0.08817708f, 0.08770084f, 0.08722400f, 0.08674656f, 0.08626852f, - 0.08578990f, 0.08531068f, 0.08483089f, 0.08435051f, 0.08386955f, 0.08338802f, 0.08290591f, 0.08242324f, - 0.08194000f, 0.08145620f, 0.08097185f, 0.08048693f, 0.08000147f, 0.07951546f, 0.07902890f, 0.07854180f, - 0.07805416f, 0.07756599f, 0.07707729f, 0.07658806f, 0.07609830f, 0.07560802f, 0.07511722f, 0.07462591f, - 0.07413409f, 0.07364176f, 0.07314892f, 0.07265559f, 0.07216175f, 0.07166742f, 0.07117260f, 0.07067729f, - 0.07018150f, 0.06968522f, 0.06918847f, 0.06869125f, 0.06819355f, 0.06769539f, 0.06719676f, 0.06669767f, - 0.06619812f, 0.06569812f, 0.06519767f, 0.06469678f, 0.06419544f, 0.06369366f, 0.06319144f, 0.06268879f, - 0.06218571f, 0.06168220f, 0.06117828f, 0.06067393f, 0.06016916f, 0.05966399f, 0.05915840f, 0.05865241f, - 0.05814602f, 0.05763923f, 0.05713204f, 0.05662447f, 0.05611650f, 0.05560815f, 0.05509942f, 0.05459031f, - 0.05408083f, 0.05357097f, 0.05306075f, 0.05255017f, 0.05203922f, 0.05152792f, 0.05101627f, 0.05050426f, - 0.04999191f, 0.04947922f, 0.04896619f, 0.04845282f, 0.04793912f, 0.04742509f, 0.04691074f, 0.04639606f, - 0.04588107f, 0.04536576f, 0.04485014f, 0.04433422f, 0.04381799f, 0.04330146f, 0.04278463f, 0.04226751f, - 0.04175010f, 0.04123240f, 0.04071442f, 0.04019617f, 0.03967763f, 0.03915883f, 0.03863975f, 0.03812042f, - 0.03760082f, 0.03708096f, 0.03656085f, 0.03604049f, 0.03551988f, 0.03499902f, 0.03447793f, 0.03395660f, - 0.03343504f, 0.03291325f, 0.03239124f, 0.03186900f, 0.03134654f, 0.03082387f, 0.03030099f, 0.02977790f, - 0.02925460f, 0.02873111f, 0.02820741f, 0.02768353f, 0.02715945f, 0.02663519f, 0.02611075f, 0.02558613f, - 0.02506133f, 0.02453636f, 0.02401122f, 0.02348592f, 0.02296046f, 0.02243483f, 0.02190906f, 0.02138314f, - 0.02085706f, 0.02033085f, 0.01980450f, 0.01927801f, 0.01875139f, 0.01822464f, 0.01769776f, 0.01717076f, - 0.01664365f, 0.01611642f, 0.01558908f, 0.01506164f, 0.01453409f, 0.01400644f, 0.01347870f, 0.01295086f, - 0.01242294f, 0.01189493f, 0.01136683f, 0.01083866f, 0.01031042f, 0.00978211f, 0.00925372f, 0.00872528f, - 0.00819677f, 0.00766821f, 0.00713960f, 0.00661094f, 0.00608223f, 0.00555348f, 0.00502469f, 0.00449587f, - 0.00396701f, 0.00343813f, 0.00290923f, 0.00238031f, 0.00185137f, 0.00132241f, 0.00079345f, 0.00026448f -}; - //Fix const Word16 edct_table_80_fx[80] = /*Q16 */ { @@ -8380,25 +5227,6 @@ const Word16 edct_table_160_16fx[160] =//Q15 /*----------------------------------------------------------------------------------* * Mean ISF vector for active signal (only for AMR-WB IO mode) *----------------------------------------------------------------------------------*/ -const float mean_isf_amr_wb[M] = -{ - 288.411774f, - 518.149414f, - 912.352051f, - 1397.743652f, - 1795.418823f, - 2211.536133f, - 2621.461182f, - 3019.680176f, - 3417.989746f, - 3809.700928f, - 4181.547363f, - 4581.064941f, - 5012.819824f, - 5457.521484f, - 5876.145020f, - 1576.906494f -}; const Word16 mean_isf_amr_wb_fx[M] =/*Qlog2(2.56)*/ { @@ -8409,25 +5237,6 @@ const Word16 mean_isf_amr_wb_fx[M] =/*Qlog2(2.56)*/ /*----------------------------------------------------------------------------------* * Mean ISF vector for SID frames (only in AMR-WB IO mode) *----------------------------------------------------------------------------------*/ -const float mean_isf_noise_amr_wb[M] = -{ - 186.625259f, - 429.613403f, - 864.525085f, - 1276.010254f, - 1648.228394f, - 2039.998535f, - 2420.943115f, - 2828.022461f, - 3214.584961f, - 3575.200195f, - 3944.685303f, - 4338.971191f, - 4743.657227f, - 5149.993164f, - 5533.081055f, - 1485.457031f -}; const Word16 mean_isf_noise_amr_wb_fx[M] =/*Qlog2(2.56)*/ { @@ -8479,13 +5288,6 @@ const Word16 Indirect_dico1[SIZE_BK1] = // Q0 /*----------------------------------------------------------------------------------* * Initial LSF memory *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float lsf_init[16] = -{ - 375.0, 750.0, 1125.0, 1500.0, 1875.0, 2250.0, 2625.0, 3000.0, - 3375.0, 3750.0, 4125.0, 4500.0, 4875.0, 5250.0, 5625.0, 6000.0 -}; -#endif const Word16 lsf_init_fx[16] = /*14Q1*1.28*/ { @@ -8495,41 +5297,7 @@ const Word16 lsf_init_fx[16] = /*14Q1*1.28*/ /*----------------------------------------------------------------------------------* * Gaussian codebook *----------------------------------------------------------------------------------*/ -const float gaus_dico[190] = -{ - -0.0973f, -0.0306f, 0.1278f, -0.1138f, 0.0744f, -0.1606f, - -0.1976f, 0.0115f, -0.0344f, -0.0417f, -0.1424f, -0.0633f, - 0.0723f, 0.3257f, -0.0697f, -0.0978f, -0.1168f, -0.1021f, - 0.0342f, -0.1319f, 0.0431f, -0.2658f, 0.0317f, -0.0712f, - 0.0348f, 0.1200f, -0.0758f, -0.2104f, -0.0781f, 0.0947f, - 0.1333f, 0.0204f, -0.2934f, 0.0262f, 0.0264f, 0.0830f, - 0.0584f, -0.0318f, 0.2271f, 0.0835f, 0.0374f, -0.0645f, - -0.1864f, -0.0277f, 0.0945f, -0.1306f, 0.0202f, -0.2090f, - -0.0881f, -0.1029f, 0.0292f, 0.0966f, -0.0896f, 0.1563f, - 0.1994f, 0.0543f, -0.2482f, -0.0201f, -0.0294f, 0.2172f, - 0.0830f, -0.0938f, 0.0115f, 0.0827f, -0.1233f, -0.1051f, - 0.0394f, 0.2390f, 0.2172f, -0.0653f, 0.0253f, 0.1241f, - -0.0366f, -0.0473f, 0.1080f, 0.0470f, 0.1009f, -0.0059f, - 0.0964f, -0.0105f, -0.0531f, 0.0169f, -0.0972f, 0.0408f, - 0.0283f, -0.2285f, -0.0232f, 0.3580f, -0.1063f, 0.1125f, - 0.2105f, -0.0331f, -0.0230f, 0.3200f, -0.0905f, 0.0166f, - 0.0328f, -0.0722f, -0.0380f, -0.1377f, -0.0118f, -0.1189f, - 0.1580f, 0.0769f, 0.1252f, -0.0247f, -0.1672f, -0.0777f, - -0.0841f, -0.1573f, -0.0160f, 0.2078f, 0.1011f, -0.0070f, - 0.1242f, 0.1011f, 0.1225f, 0.0973f, 0.1361f, 0.1584f, - -0.0729f, 0.1831f, 0.1332f, -0.1846f, -0.0029f, -0.0890f, - 0.1447f, -0.1727f, 0.0963f, -0.0321f, -0.0916f, -0.0151f, - -0.2232f, -0.0624f, -0.1036f, 0.0157f, 0.1134f, -0.2782f, - 0.0684f, 0.0222f, -0.0202f, -0.0704f, -0.1342f, 0.0950f, - 0.0128f, -0.2999f, 0.0015f, -0.1051f, 0.0180f, 0.0500f, - -0.1166f, -0.0361f, -0.1446f, 0.0688f, -0.0179f, 0.2959f, - 0.0102f, 0.1416f, -0.0815f, 0.1181f, -0.1867f, 0.1082f, - 0.1585f, 0.0661f, -0.1805f, 0.0915f, 0.1497f, -0.1124f, - -0.0508f, 0.0573f, -0.0294f, -0.0119f, -0.0759f, 0.1477f, - 0.2136f, 0.1271f, 0.0492f, -0.1235f, -0.1337f, -0.2657f, - -0.0106f, -0.0540f, 0.1642f, -0.0598f, -0.0065f, 0.1146f, - 0.0863f, 0.0129f, 0.1816f, 0.0672f -}; + /*table in Q12*/ const Word16 gaus_dico_fx[190] = { @@ -8559,42 +5327,6 @@ const Word16 gaus_dico_fx[190] = -27, 469, 353, 53, 744, 275 }; -const float gaus_dico_swb[256] = -{ - 0.02164473f, 0.35885197f, -0.16274954f, -0.08241354f, 0.07313631f, -0.00054929f, -0.13080014f, 0.07226136f, - -0.13965981f, -0.04834007f, -0.02745908f, -0.02867859f, 0.11216793f, 0.16604294f, -0.00134274f, 0.06818508f, - -0.17387933f, 0.09406016f, -0.08150196f, 0.05083200f, -0.01952806f, -0.10203217f, -0.03067050f, -0.05153965f, - 0.06250680f, 0.00859049f, -0.12008808f, -0.11361376f, 0.17176038f, 0.01174004f, -0.02275130f, -0.09895785f, - -0.10167463f, -0.22059087f, -0.05334539f, -0.00629700f, -0.16706355f, 0.07795000f, 0.08731710f, 0.09669208f, - 0.15378080f, 0.01794813f, -0.01549965f, -0.24923822f, 0.19985947f, -0.10477958f, 0.06674605f, -0.11186616f, - -0.17927034f, 0.08443811f, 0.25542912f, 0.03167623f, 0.19633667f, 0.19163096f, 0.01907267f, 0.12298489f, - -0.03147158f, 0.05562247f, 0.30200079f, -0.04257871f, 0.08275045f, -0.03386311f, -0.02265750f, 0.18742503f, - -0.13598505f, -0.32004824f, -0.00438390f, -0.15576170f, 0.06006401f, -0.00952147f, 0.18848655f, 0.06630960f, - 0.07121546f, -0.00733249f, 0.08277771f, 0.22764891f, 0.06772452f, -0.09509693f, -0.00172236f, 0.08452052f, - 0.17020901f, -0.03737585f, 0.02349647f, 0.10855560f, 0.06854416f, 0.07084806f, 0.09390105f, 0.00124924f, - 0.03026483f, -0.15169589f, 0.01347072f, -0.15377805f, 0.14992996f, 0.11630810f, 0.03483583f, -0.03914850f, - -0.20075595f, 0.12728901f, -0.04495851f, -0.11576717f, -0.15281813f, 0.06055827f, -0.03471978f, -0.03617816f, - 0.17230885f, 0.03094525f, -0.15618153f, 0.21792564f, 0.08106838f, -0.22098514f, -0.10796417f, 0.07131225f, - 0.22092983f, -0.01539366f, -0.02876964f, -0.30910203f, 0.02143815f, -0.11630868f, -0.00922897f, 0.07431208f, - 0.15533504f, 0.11425125f, 0.07125455f, -0.11914105f, -0.04275274f, -0.05072749f, -0.22143129f, 0.19787727f, - -0.20946717f, -0.16564523f, 0.05962536f, -0.22325630f, -0.04333350f, -0.04707248f, 0.16608582f, 0.00948954f, - 0.11283893f, -0.04097161f, -0.09076904f, 0.26722300f, 0.00987607f, -0.05807892f, 0.07872546f, 0.08040629f, - 0.12927419f, -0.05647410f, 0.09603068f, -0.02356448f, -0.02160797f, -0.11687102f, 0.07936122f, -0.05764586f, - -0.10510305f, -0.02326054f, 0.12021790f, 0.09782617f, -0.22600858f, -0.02555378f, -0.03561033f, -0.01337216f, - 0.11311363f, -0.03096960f, -0.22801498f, 0.05643769f, 0.13053033f, 0.04452197f, -0.09299882f, -0.11475921f, - 0.02257649f, -0.21770498f, -0.11454470f, -0.09435777f, 0.00638951f, -0.36990553f, 0.04266735f, 0.06915011f, - 0.07644624f, -0.24336053f, -0.03421960f, -0.10622191f, -0.17223521f, 0.04054553f, 0.13831380f, 0.02925055f, - 0.16207848f, -0.12994884f, -0.09751288f, -0.05397306f, -0.09323815f, 0.13425350f, -0.00046960f, 0.31072289f, - 0.13740718f, 0.05835414f, -0.04803475f, 0.15423043f, -0.09652353f, 0.14896898f, -0.16368309f, 0.05875925f, - -0.03678078f, -0.19627908f, 0.07034992f, -0.27213186f, -0.04338680f, 0.01567988f, -0.09158870f, 0.11987700f, - 0.07083926f, 0.01099900f, -0.01084446f, 0.04508050f, -0.10655984f, -0.13945042f, 0.05837287f, 0.08458713f, - -0.04212087f, -0.15749574f, 0.11632511f, 0.07976698f, 0.06725866f, -0.09567240f, 0.03796997f, -0.09355708f, - -0.13569611f, -0.19498724f, 0.14951572f, -0.16023041f, 0.04185898f, 0.06099325f, 0.03425207f, 0.16211477f, - 0.03998571f, -0.03629408f, -0.10099959f, 0.19540504f, 0.11653102f, 0.23601755f, 0.04943547f, -0.26040605f, - 0.02153429f, 0.22880882f, -0.13646534f, 0.03881640f, -0.02896636f, 0.09774253f, -0.13509314f, -0.08713179f, - 0.13485038f, 0.06968338f, 0.19561967f, 0.07884958f, -0.10365590f, -0.10321335f, -0.09081125f, -0.00147976f -}; - const Word16 gaus_dico_swb_fx[256] = { /*Q15 */ @@ -8640,833 +5372,7 @@ const Word16 gaus_dico_swb_fx[256] = const Word16 freqTable[2] = {20, 40}; // Q0 /* SNR: 109.44, PHASE: 3.500000000000000 */ -#ifndef IVAS_FLOAT_FIXED -const float CLDFB80_10_flt[100] = -{ - 0.0000033382f, -0.0000023292f, -0.0000006582f, 0.0000001464f, -0.0000010899f, -0.0000009664f, - -0.0000000104f, -0.0000018105f, -0.0000012856f, 0.0000017112f, 0.0000137155f, -0.0000084710f, - -0.0000015748f, -0.0000002482f, 0.0000036294f, -0.0000043816f, 0.0000003906f, 0.0000043318f, - 0.0000049126f, -0.0000061826f, -0.0002270069f, -0.0000675402f, -0.0000158982f, 0.0000138120f, - -0.0000220086f, -0.0000356560f, 0.0000171849f, -0.0000194504f, -0.0000058158f, -0.0002621811f, - -0.0009969691f, -0.0001427984f, -0.0000188085f, -0.0000040399f, -0.0001954359f, 0.0001806872f, - 0.0000232574f, -0.0000047551f, -0.0000321009f, 0.0010723262f, -0.0020160153f, -0.0007751652f, - 0.0003508478f, 0.0015707671f, 0.0017180828f, 0.0015807568f, 0.0021944824f, 0.0028288425f, - 0.0030257006f, 0.0016570983f, -0.0014279413f, -0.0015962377f, 0.0007765516f, 0.0025625922f, - 0.0022554877f, 0.0002647332f, -0.0032977409f, -0.0065113932f, -0.0095444393f, -0.0136373114f, - 0.0186561662f, 0.0242546518f, 0.0320538418f, 0.0427742450f, 0.0565841171f, 0.0732940277f, - 0.0914110197f, 0.1082620545f, 0.1209072165f, 0.1269811579f, 0.1253574855f, 0.1136768387f, - 0.0887587689f, 0.0497640968f, -0.0031398279f, -0.0698373206f, -0.1494875982f, -0.2406007759f, - -0.3411996303f, -0.4484628681f, 0.5579472269f, 0.6655527761f, 0.7669493517f, 0.8575328375f, - 0.9329386030f, 0.9892971917f, 1.0250167399f, 1.0397966587f, 1.0375221638f, 1.0163053398f, - 0.9610874400f, 0.8748972145f, 0.7783924293f, 0.6777346686f, 0.5724389618f, 0.4648620471f, - 0.3560337451f, 0.2485564060f, 0.1386438276f, 0.0416433203f, -}; -/* SNR: 292.49, PHASE: 2.000000000000000 */ -const float CLDFB80_16_flt[160] = -{ - 0.0000005510f, -0.0000007674f, -0.0000002340f, 0.0000000964f, 0.0000000593f, -0.0000000017f, - -0.0000000178f, 0.0000021953f, 0.0000030004f, -0.0000000167f, -0.0000000019f, 0.0000000702f, - 0.0000000344f, -0.0000000765f, -0.0000005553f, 0.0000007526f, 0.0000020881f, -0.0000028263f, - -0.0000007033f, 0.0000002370f, 0.0000001175f, -0.0000004048f, 0.0000000996f, -0.0000180207f, - 0.0000246292f, -0.0000000934f, 0.0000004489f, -0.0000001390f, -0.0000000845f, 0.0000002300f, - 0.0000020452f, -0.0000028520f, -0.0003204839f, -0.0001476489f, -0.0000626217f, -0.0000446346f, - -0.0000202236f, 0.0000151160f, 0.0000057995f, 0.0000450017f, 0.0000433006f, 0.0000050745f, - 0.0000167005f, -0.0000314631f, -0.0000244547f, -0.0000125422f, -0.0000911863f, -0.0004371781f, - -0.0012267106f, -0.0005247118f, -0.0001857576f, -0.0001103593f, -0.0000402931f, 0.0000108771f, - -0.0000576360f, 0.0000602621f, -0.0002317927f, 0.0000520316f, 0.0000035090f, 0.0000625950f, - 0.0000603417f, 0.0000368907f, 0.0003220307f, 0.0016733998f, -0.0021551784f, -0.0015444660f, - -0.0007592329f, -0.0001077355f, 0.0007091208f, 0.0015054295f, 0.0017984668f, 0.0011461500f, - 0.0015946160f, 0.0018157551f, 0.0022526599f, 0.0027665136f, 0.0029611644f, 0.0030474884f, - 0.0025509350f, 0.0012885692f, -0.0011048694f, -0.0019476595f, -0.0014849578f, -0.0000191307f, - 0.0014542427f, 0.0025014060f, 0.0026282341f, 0.0020896060f, 0.0009380930f, -0.0012303806f, - -0.0035150110f, -0.0055687066f, -0.0074233361f, -0.0093371234f, -0.0117127490f, -0.0145175090f, - 0.0177813213f, 0.0209221310f, 0.0246700384f, 0.0293186424f, 0.0350939424f, 0.0420166741f, - 0.0501689083f, 0.0594973479f, 0.0699793095f, 0.0811978302f, 0.0925316969f, 0.1033039355f, - 0.1127998301f, 0.1202885467f, 0.1252446307f, 0.1272143872f, 0.1262547749f, 0.1217276780f, - 0.1125292370f, 0.0980647299f, 0.0780704213f, 0.0526074650f, 0.0217182187f, -0.0146037409f, - -0.0563029259f, -0.1031675028f, -0.1548654211f, -0.2110103318f, -0.2711216615f, -0.3346791161f, - -0.4009613796f, -0.4689983890f, 0.5374920358f, 0.6054498150f, 0.6721266919f, 0.7362374318f, - 0.7966023599f, 0.8522654625f, 0.9021245679f, 0.9450253190f, 0.9802630812f, 1.0075496836f, - 1.0265340754f, 1.0372359728f, 1.0407524022f, 1.0381397893f, 1.0284102813f, 1.0099196627f, - 0.9753688495f, 0.9254582964f, 0.8690385973f, 0.8090082031f, 0.7474414548f, 0.6841760105f, - 0.6189218236f, 0.5524001591f, 0.4851748506f, 0.4172433895f, 0.3492691242f, 0.2821066655f, - 0.2146356085f, 0.1455327617f, 0.0796914490f, 0.0278251946f, -}; - -/* SNR: 89.77, PHASE: 1.500000000000000 */ -const float CLDFB80_20_flt[200] = -{ - 0.0000016461f, -0.0000046862f, -0.0000000815f, -0.0000001822f, 0.0000000240f, 0.0000001892f, - -0.0000002365f, -0.0000007031f, -0.0000000079f, 0.0000048656f, 0.0000070490f, 0.0000000032f, - 0.0000001499f, -0.0000000944f, 0.0000004307f, -0.0000000787f, -0.0000001070f, 0.0000015376f, - -0.0000025088f, 0.0000044280f, 0.0000046060f, -0.0000207092f, -0.0000004877f, -0.0000006126f, - 0.0000000605f, 0.0000004365f, -0.0000003741f, -0.0000009508f, 0.0000006700f, -0.0000087189f, - 0.0000114297f, -0.0000007710f, -0.0000002908f, 0.0000001583f, -0.0000010138f, 0.0000001875f, - 0.0000003789f, -0.0000065731f, 0.0000112115f, -0.0000036253f, -0.0003045828f, -0.0002068946f, - -0.0000330428f, -0.0000658559f, -0.0000416668f, -0.0000207558f, -0.0000046097f, 0.0000096778f, - -0.0000064960f, 0.0000515938f, 0.0000257367f, -0.0000068671f, 0.0000029284f, -0.0000209369f, - -0.0000191720f, -0.0000235869f, -0.0000286778f, 0.0000594843f, -0.0001104448f, -0.0004947290f, - -0.0011759540f, -0.0006581582f, -0.0001310136f, -0.0001782524f, -0.0001002354f, -0.0000465158f, - -0.0000188237f, 0.0000285072f, -0.0001359344f, 0.0002814194f, -0.0004814411f, 0.0001302339f, - -0.0000257394f, 0.0000578339f, 0.0000485628f, 0.0000543116f, 0.0000763443f, -0.0001495108f, - 0.0003492618f, 0.0018283780f, -0.0019931487f, -0.0018716309f, -0.0008617653f, -0.0006080124f, - -0.0000337803f, 0.0006187704f, 0.0012478726f, 0.0016757046f, 0.0018115391f, 0.0007745483f, - 0.0016550121f, 0.0017032298f, 0.0019356593f, 0.0024080283f, 0.0027878510f, 0.0029379588f, - 0.0030637651f, 0.0028257202f, 0.0021943273f, 0.0010679683f, -0.0009250455f, -0.0017798333f, - -0.0018826540f, -0.0011010583f, 0.0001463485f, 0.0013293069f, 0.0022974838f, 0.0027746423f, - 0.0025078917f, 0.0020425098f, 0.0011954954f, -0.0005741594f, -0.0024120809f, -0.0041653667f, - -0.0057623702f, -0.0072425386f, -0.0087363677f, -0.0104237699f, -0.0125156239f, -0.0148077168f, - 0.0174398402f, 0.0199230411f, 0.0226649147f, 0.0259599813f, 0.0298434758f, 0.0344649815f, - 0.0398139569f, 0.0459314689f, 0.0528498740f, 0.0604788669f, 0.0688814001f, 0.0777923399f, - 0.0868947517f, 0.0958553537f, 0.1043243835f, 0.1119302041f, 0.1182880738f, 0.1231125873f, - 0.1261745561f, 0.1272284850f, 0.1264656300f, 0.1235525506f, 0.1177556666f, 0.1087635447f, - 0.0963144136f, 0.0803171444f, 0.0608146076f, 0.0378425383f, 0.0113896330f, -0.0185270856f, - -0.0518892622f, -0.0885871716f, -0.1284318249f, -0.1712634880f, -0.2168508609f, -0.2649463144f, - -0.3152867427f, -0.3675395959f, -0.4212350657f, -0.4758650706f, 0.5306725282f, 0.5851445237f, - 0.6390281696f, 0.6916889535f, 0.7424591009f, 0.7907617163f, 0.8361206884f, 0.8779983070f, - 0.9157691951f, 0.9489012228f, 0.9770929872f, 1.0002174168f, 1.0180999340f, 1.0305853696f, - 1.0378851378f, 1.0406826783f, 1.0395784114f, 1.0343061945f, 1.0237762412f, 1.0076524569f, - 0.9800034826f, 0.9411740407f, 0.8979145998f, 0.8512639848f, 0.8029102780f, 0.7536620391f, - 0.7033730373f, 0.6517679660f, 0.5990562278f, 0.5457078369f, 0.4919297136f, 0.4376796414f, - 0.3831842053f, 0.3290362900f, 0.2754121565f, 0.2214602867f, 0.1663238479f, 0.1115465981f, - 0.0622889538f, 0.0233593568f, -}; - -/* SNR: 89.29, PHASE: 0.833333333333333 */ -const float CLDFB80_30_flt[300] = -{ - -0.0000002772f, 0.0000033382f, 0.0000018078f, -0.0000007965f, -0.0000023292f, -0.0000000163f, - 0.0000001004f, -0.0000006582f, 0.0000000287f, 0.0000000140f, 0.0000001464f, 0.0000002826f, - 0.0000000427f, -0.0000010899f, 0.0000048488f, 0.0000070973f, -0.0000009664f, 0.0000000360f, - 0.0000004432f, -0.0000000104f, -0.0000000269f, -0.0000000107f, -0.0000018105f, 0.0000000543f, - -0.0000000029f, -0.0000012856f, -0.0000006144f, 0.0000009806f, 0.0000017112f, -0.0000026992f, - -0.0000120997f, 0.0000137155f, 0.0000075545f, -0.0000032372f, -0.0000084710f, -0.0000000206f, - 0.0000002472f, -0.0000015748f, 0.0000000428f, -0.0000000299f, -0.0000002482f, 0.0000005522f, - 0.0000001959f, 0.0000036294f, 0.0000084418f, -0.0000120850f, -0.0000043816f, -0.0000001651f, - -0.0000010266f, 0.0000003906f, 0.0000001476f, 0.0000000560f, 0.0000043318f, -0.0000001327f, - -0.0000000099f, 0.0000049126f, 0.0000025641f, -0.0000041212f, -0.0000061826f, 0.0000182899f, - -0.0003177625f, -0.0002270069f, -0.0001470513f, -0.0000710867f, -0.0000675402f, -0.0000612052f, - -0.0000458905f, -0.0000158982f, -0.0000198609f, -0.0000044865f, 0.0000138120f, 0.0000259521f, - -0.0000014174f, -0.0000220086f, 0.0000046746f, -0.0000478217f, -0.0000356560f, -0.0000008176f, - 0.0000554471f, 0.0000171849f, -0.0000104782f, -0.0000342931f, -0.0000194504f, -0.0000247231f, - -0.0000266321f, -0.0000058158f, -0.0000154718f, -0.0000860619f, -0.0002621811f, -0.0006329730f, - -0.0010151313f, -0.0009969691f, -0.0006401095f, -0.0002347208f, -0.0001427984f, -0.0001657818f, - -0.0001142242f, -0.0000188085f, -0.0000385187f, -0.0000275046f, -0.0000040399f, 0.0000495378f, - -0.0001045437f, -0.0001954359f, 0.0005754000f, -0.0007487377f, 0.0001806872f, 0.0000995589f, - -0.0000996504f, 0.0000232574f, 0.0000603268f, 0.0000660807f, -0.0000047551f, 0.0000619265f, - 0.0000723872f, -0.0000321009f, 0.0000223561f, 0.0003720504f, 0.0010723262f, 0.0019477029f, - -0.0018122293f, -0.0020160153f, -0.0017426363f, -0.0010556444f, -0.0007751652f, -0.0005221317f, - -0.0001347624f, 0.0003508478f, 0.0007386346f, 0.0011721899f, 0.0015707671f, 0.0017166805f, - 0.0018089705f, 0.0017180828f, 0.0002671723f, 0.0016677326f, 0.0015807568f, 0.0017534327f, - 0.0019075685f, 0.0021944824f, 0.0024875266f, 0.0027574445f, 0.0028288425f, 0.0029688585f, - 0.0030573770f, 0.0030257006f, 0.0027683197f, 0.0023855538f, 0.0016570983f, 0.0007261425f, - -0.0006240877f, -0.0014279413f, -0.0018848796f, -0.0019263976f, -0.0015962377f, -0.0009120500f, - -0.0000736785f, 0.0007765516f, 0.0014961634f, 0.0021524541f, 0.0025625922f, 0.0027460441f, - 0.0025688449f, 0.0022554877f, 0.0019970512f, 0.0015552223f, 0.0002647332f, -0.0008620885f, - -0.0020865380f, -0.0032977409f, -0.0044403210f, -0.0055039505f, -0.0065113932f, -0.0074839181f, - -0.0084786965f, -0.0095444393f, -0.0107566368f, -0.0121559845f, -0.0136373114f, -0.0152125941f, - 0.0169692165f, 0.0186561662f, 0.0203704498f, 0.0221787331f, 0.0242546518f, 0.0265582983f, - 0.0291465321f, 0.0320538418f, 0.0353059968f, 0.0388699993f, 0.0427742450f, 0.0470319574f, - 0.0516455579f, 0.0565841171f, 0.0617960053f, 0.0674208876f, 0.0732940277f, 0.0793036968f, - 0.0853757711f, 0.0914110197f, 0.0973085175f, 0.1029609938f, 0.1082620545f, 0.1130850459f, - 0.1173295323f, 0.1209072165f, 0.1237469292f, 0.1257934619f, 0.1269811579f, 0.1271703366f, - 0.1266559114f, 0.1253574855f, 0.1227915199f, 0.1189360593f, 0.1136768387f, 0.1069333476f, - 0.0986359173f, 0.0887587689f, 0.0773092890f, 0.0643073307f, 0.0497640968f, 0.0336765771f, - 0.0160401582f, -0.0031398279f, -0.0238366387f, -0.0460799881f, -0.0698373206f, -0.0950128018f, - -0.1215783841f, -0.1494875982f, -0.1786760784f, -0.2090721736f, -0.2406007759f, -0.2731879051f, - -0.3067537961f, -0.3411996303f, -0.3764015708f, -0.4122065782f, -0.4484628681f, -0.4850451997f, - 0.5215924710f, 0.5579472269f, 0.5941804962f, 0.6301135607f, 0.6655527761f, 0.7002994797f, - 0.7341550905f, 0.7669493517f, 0.7985389090f, 0.8287866009f, 0.8575328375f, 0.8845952462f, - 0.9097846281f, 0.9329386030f, 0.9539491421f, 0.9727435862f, 0.9892971917f, 1.0035676672f, - 1.0154927835f, 1.0250167399f, 1.0321480823f, 1.0370035227f, 1.0397966587f, 1.0407627030f, - 1.0400314908f, 1.0375221638f, 1.0329480648f, 1.0259438203f, 1.0163053398f, 1.0048344063f, - 0.9863956401f, 0.9610874400f, 0.9342743262f, 0.9054084925f, 0.8748972145f, 0.8432873810f, - 0.8110381808f, 0.7783924293f, 0.7453640666f, 0.7118431392f, 0.6777346686f, 0.6430470493f, - 0.6078972260f, 0.5724389618f, 0.5367746506f, 0.5009238704f, 0.4648620471f, 0.4286003322f, - 0.3922588980f, 0.3560337451f, 0.3200733025f, 0.2843378434f, 0.2485564060f, 0.2123552623f, - 0.1755742394f, 0.1386438276f, 0.1027751331f, 0.0698223020f, 0.0416433203f, 0.0171881989f, -}; - -/* SNR: 85.69, PHASE: 0.750000000000000 */ -const float CLDFB80_32_flt[320] = -{ - -0.0000010182f, 0.0000018812f, -0.0000013969f, 0.0000000702f, -0.0000030351f, -0.0000001862f, - 0.0000000017f, 0.0000000804f, -0.0000002859f, -0.0000000058f, -0.0000003463f, -0.0000003782f, - 0.0000006385f, 0.0000000365f, -0.0000015696f, 0.0000043896f, 0.0000063462f, -0.0000013860f, - 0.0000000439f, 0.0000007243f, -0.0000000373f, -0.0000001214f, 0.0000000228f, -0.0000008123f, - 0.0000002096f, -0.0000000043f, -0.0000001079f, -0.0000005174f, -0.0000001146f, -0.0000006991f, - 0.0000012420f, -0.0000054157f, -0.0000164806f, 0.0000076445f, -0.0000065087f, 0.0000002224f, - -0.0000110942f, -0.0000006228f, 0.0000000012f, 0.0000001914f, -0.0000006876f, 0.0000000004f, - -0.0000005395f, -0.0000007555f, 0.0000015057f, 0.0000005303f, 0.0000035648f, 0.0000094151f, - -0.0000133505f, -0.0000042847f, -0.0000005848f, -0.0000018021f, 0.0000001676f, 0.0000001730f, - -0.0000000645f, 0.0000019429f, -0.0000005012f, 0.0000000132f, 0.0000003799f, 0.0000014190f, - 0.0000005446f, 0.0000033533f, -0.0000041925f, 0.0000243728f, -0.0003249116f, -0.0002555667f, - -0.0001781466f, -0.0000946691f, -0.0000512440f, -0.0000668181f, -0.0000538663f, -0.0000367589f, - -0.0000153566f, -0.0000159763f, -0.0000043008f, 0.0000014360f, 0.0000256407f, -0.0000045056f, - -0.0000224244f, -0.0000056258f, -0.0000573469f, -0.0000427838f, -0.0000040513f, 0.0000493530f, - -0.0000199927f, -0.0000284530f, -0.0000443529f, -0.0000157197f, -0.0000152059f, -0.0000265666f, - -0.0000286606f, 0.0000426372f, -0.0000445737f, -0.0000968212f, -0.0002992176f, -0.0006564777f, - -0.0009923400f, -0.0010465131f, -0.0006586000f, -0.0003460162f, -0.0000803812f, -0.0001828317f, - -0.0001374910f, -0.0000892170f, -0.0000247429f, -0.0000281266f, -0.0000112548f, -0.0000220216f, - 0.0000281030f, -0.0001241423f, -0.0001739019f, 0.0006003709f, -0.0007665771f, 0.0001545192f, - 0.0001183979f, -0.0000725009f, 0.0000709099f, 0.0000556600f, 0.0000787870f, 0.0000127551f, - 0.0000418355f, 0.0000676110f, 0.0000771386f, -0.0001678521f, 0.0001526165f, 0.0003591734f, - 0.0011851563f, 0.0019531880f, -0.0018073091f, -0.0020646655f, -0.0018286838f, -0.0012220764f, - -0.0007555665f, -0.0006377868f, -0.0003093176f, 0.0000756312f, 0.0005274300f, 0.0009274213f, - 0.0012803192f, 0.0016235299f, 0.0017557598f, 0.0018111856f, 0.0016683303f, 0.0002150325f, - 0.0016540635f, 0.0015774318f, 0.0017217761f, 0.0018831036f, 0.0020842542f, 0.0023790930f, - 0.0026699692f, 0.0028034973f, 0.0028981065f, 0.0030135931f, 0.0030635897f, 0.0029615904f, - 0.0027120429f, 0.0022714745f, 0.0016059652f, 0.0006835412f, -0.0005828829f, -0.0013844400f, - -0.0018243580f, -0.0019502151f, -0.0017356111f, -0.0011689841f, -0.0004229350f, 0.0003965073f, - 0.0011294169f, 0.0017707072f, 0.0023448371f, 0.0026728102f, 0.0027087051f, 0.0025324105f, - 0.0022209939f, 0.0019939538f, 0.0015995394f, 0.0003709522f, -0.0006814813f, -0.0018062812f, - -0.0029774326f, -0.0040602444f, -0.0050788762f, -0.0060470476f, -0.0069716019f, -0.0078811278f, - -0.0088339160f, -0.0098593061f, -0.0110571431f, -0.0123801308f, -0.0137829951f, -0.0152658987f, - 0.0169119551f, 0.0185130319f, 0.0200914127f, 0.0217670701f, 0.0236411334f, 0.0257401339f, - 0.0280588687f, 0.0306516429f, 0.0335396415f, 0.0367140220f, 0.0401734073f, 0.0439328404f, - 0.0480118471f, 0.0523958086f, 0.0570643279f, 0.0619617615f, 0.0672386055f, 0.0727386082f, - 0.0783586322f, 0.0840454562f, 0.0897239254f, 0.0953063133f, 0.1006989894f, 0.1058297221f, - 0.1105886458f, 0.1148828316f, 0.1186363019f, 0.1217873693f, 0.1242652074f, 0.1260376844f, - 0.1270428159f, 0.1271553981f, 0.1266717254f, 0.1255342565f, 0.1232765470f, 0.1198938969f, - 0.1153006197f, 0.1094250684f, 0.1021978763f, 0.0935850985f, 0.0835853025f, 0.0722146942f, - 0.0594803881f, 0.0453959671f, 0.0299515180f, 0.0131448092f, -0.0050174243f, -0.0245067664f, - -0.0453599939f, -0.0675506175f, -0.0909864895f, -0.1156500318f, -0.1415054519f, -0.1685034579f, - -0.1965824123f, -0.2256851924f, -0.2557490596f, -0.2867109877f, -0.3185003509f, -0.3510308710f, - -0.3841878257f, -0.4178462189f, -0.4518783777f, -0.4861948985f, 0.5204589154f, 0.5545392477f, - 0.5885349528f, 0.6222881265f, 0.6556472882f, 0.6884462258f, 0.7205203255f, 0.7517187214f, - 0.7819150729f, 0.8109973423f, 0.8388462493f, 0.8653227793f, 0.8902717587f, 0.9135401037f, - 0.9350004724f, 0.9545704608f, 0.9721900670f, 0.9878415249f, 1.0014908046f, 1.0130877123f, - 1.0225821802f, 1.0299620942f, 1.0352930981f, 1.0387279035f, 1.0404656862f, 1.0406699226f, - 1.0393792732f, 1.0364602207f, 1.0316371259f, 1.0246094465f, 1.0152749279f, 1.0045111461f, - 0.9872243762f, 0.9634951727f, 0.9386029698f, 0.9118835665f, 0.8836131513f, 0.8542438147f, - 0.8241955864f, 0.7937396816f, 0.7629631733f, 0.7318123869f, 0.7001870615f, 0.6680338585f, - 0.6353919868f, 0.6023736401f, 0.5691034053f, 0.5356571527f, 0.5020472026f, 0.4682522004f, - 0.4342757821f, 0.4002060880f, 0.3661991567f, 0.3324016480f, 0.2988415427f, 0.2653598332f, - 0.2316572400f, 0.1974745970f, 0.1628547074f, 0.1283770554f, 0.0952404323f, 0.0650740936f, - 0.0392771501f, 0.0163785856f, -}; - -/* SNR: 81.55, PHASE: 0.500000000000000 */ -const float CLDFB80_40_flt[400] = -{ - -0.0000041528f, -0.0000003900f, -0.0000033779f, 0.0000013260f, -0.0000003143f, -0.0000019348f, - 0.0000002820f, 0.0000000171f, 0.0000000756f, 0.0000001478f, -0.0000006625f, 0.0000000082f, - 0.0000000114f, -0.0000002690f, -0.0000007281f, 0.0000005577f, -0.0000000239f, 0.0000002429f, - -0.0000004091f, 0.0000026069f, 0.0000034995f, -0.0000001726f, 0.0000002145f, -0.0000000401f, - 0.0000006351f, -0.0000000199f, -0.0000000701f, -0.0000000269f, -0.0000000511f, -0.0000018158f, - 0.0000003875f, 0.0000000519f, 0.0000000148f, 0.0000002168f, 0.0000008257f, -0.0000004464f, - 0.0000006336f, -0.0000025316f, -0.0000005295f, -0.0000153180f, -0.0000308298f, -0.0000015398f, - -0.0000152958f, 0.0000058438f, -0.0000013050f, -0.0000070187f, 0.0000011695f, 0.0000000763f, - 0.0000001881f, 0.0000003524f, -0.0000015865f, -0.0000000049f, -0.0000000249f, -0.0000006192f, - -0.0000011121f, 0.0000012060f, -0.0000000166f, 0.0000001099f, -0.0000106587f, 0.0000106129f, - -0.0000148286f, 0.0000149412f, 0.0000001626f, 0.0000000725f, -0.0000015409f, 0.0000000950f, - 0.0000003484f, 0.0000001231f, 0.0000001497f, 0.0000043429f, -0.0000009269f, -0.0000001280f, - -0.0000000626f, -0.0000009033f, -0.0000040910f, 0.0000019169f, -0.0000028704f, 0.0000109325f, - -0.0000009252f, 0.0000489011f, -0.0003468893f, -0.0003166165f, -0.0002216732f, -0.0001440458f, - -0.0000849613f, -0.0000369773f, -0.0000635098f, -0.0000591070f, -0.0000486803f, -0.0000341989f, - -0.0000120811f, -0.0000190275f, -0.0000064494f, 0.0000069162f, -0.0000021987f, 0.0000272330f, - 0.0000008567f, -0.0000105879f, 0.0000129785f, -0.0000391934f, -0.0000840231f, 0.0000041534f, - -0.0000069437f, 0.0000002747f, 0.0000564106f, -0.0000335888f, -0.0000091603f, -0.0000220067f, - -0.0000377648f, -0.0000212702f, -0.0000107779f, -0.0000254405f, -0.0000262093f, -0.0000203017f, - 0.0000691479f, -0.0000348713f, -0.0000882526f, -0.0001632241f, -0.0003897623f, -0.0007277920f, - -0.0009273781f, -0.0011866370f, -0.0007657374f, -0.0005999553f, -0.0002985749f, -0.0000739204f, - -0.0001965512f, -0.0001587267f, -0.0001222374f, -0.0000844484f, -0.0000080229f, -0.0000361957f, - -0.0000240334f, 0.0000097698f, -0.0000196647f, 0.0000408240f, -0.0000873313f, -0.0001974888f, - -0.0000745679f, 0.0006405856f, -0.0007833142f, -0.0000263740f, 0.0001825899f, 0.0000836328f, - -0.0000919747f, 0.0000758216f, 0.0000210116f, 0.0000664122f, 0.0000716628f, -0.0000011497f, - 0.0000361513f, 0.0000644816f, 0.0000707314f, 0.0000692091f, -0.0002055217f, 0.0001007125f, - 0.0003613597f, 0.0005722141f, 0.0014928248f, 0.0019595151f, -0.0018123181f, -0.0021841686f, - -0.0019313868f, -0.0016661118f, -0.0011520847f, -0.0007460794f, -0.0007200000f, -0.0004759622f, - -0.0001911740f, 0.0001177745f, 0.0005112609f, 0.0007956582f, 0.0011317990f, 0.0014125904f, - 0.0016338868f, 0.0017396047f, 0.0018056445f, 0.0018052119f, 0.0014209425f, 0.0000970427f, - 0.0015804238f, 0.0015713347f, 0.0016260006f, 0.0017792934f, 0.0018939546f, 0.0020439435f, - 0.0023023017f, 0.0025264800f, 0.0027361034f, 0.0028056985f, 0.0028830887f, 0.0029840440f, - 0.0030499023f, 0.0030582362f, 0.0029323543f, 0.0027372045f, 0.0024602608f, 0.0018918251f, - 0.0014430869f, 0.0005567848f, -0.0004563602f, -0.0012376069f, -0.0015957612f, -0.0019181670f, - -0.0019416943f, -0.0017732047f, -0.0013639015f, -0.0008131398f, -0.0001818974f, 0.0004785653f, - 0.0010577894f, 0.0015807496f, 0.0020750864f, 0.0024484891f, 0.0027097859f, 0.0027252487f, - 0.0025942388f, 0.0023933812f, 0.0021363139f, 0.0019878937f, 0.0017252901f, 0.0007007239f, - -0.0001528669f, -0.0010081819f, -0.0019255759f, -0.0028704299f, -0.0037352063f, -0.0045760650f, - -0.0053741521f, -0.0061399643f, -0.0068807053f, -0.0076055948f, -0.0083505693f, -0.0091327970f, - -0.0099660466f, -0.0109276265f, -0.0119779770f, -0.0130668832f, -0.0142243967f, -0.0154284789f, - 0.0167425678f, 0.0180870259f, 0.0192629868f, 0.0205914974f, 0.0219419942f, 0.0234393525f, - 0.0250925019f, 0.0268648248f, 0.0288064481f, 0.0309261411f, 0.0332359672f, 0.0357337882f, - 0.0384058373f, 0.0412703873f, 0.0443254146f, 0.0475898752f, 0.0510512395f, 0.0546934731f, - 0.0585192825f, 0.0624617968f, 0.0666925081f, 0.0710800609f, 0.0755330962f, 0.0800607977f, - 0.0846155968f, 0.0891603964f, 0.0936468776f, 0.0980290565f, 0.1022710303f, 0.1063242147f, - 0.1101321383f, 0.1136484689f, 0.1168337639f, 0.1196454804f, 0.1220672782f, 0.1240474957f, - 0.1255837620f, 0.1266445580f, 0.1271706795f, 0.1271032514f, 0.1267122859f, 0.1259990302f, - 0.1245431141f, 0.1223810246f, 0.1194917271f, 0.1158164730f, 0.1113281486f, 0.1059821849f, - 0.0997598463f, 0.0926475473f, 0.0846476380f, 0.0757687538f, 0.0660180747f, 0.0553969977f, - 0.0439122033f, 0.0315571111f, 0.0183294511f, 0.0042339687f, -0.0107303776f, -0.0265261206f, - -0.0432087461f, -0.0607651851f, -0.0791119955f, -0.0982585186f, -0.1181828257f, -0.1388675094f, - -0.1602878821f, -0.1824109255f, -0.2052090118f, -0.2286494873f, -0.2527009969f, -0.2773319455f, - -0.3025075323f, -0.3281859857f, -0.3543210024f, -0.3808473827f, -0.4077028160f, -0.4348259057f, - -0.4621422068f, -0.4896449982f, 0.5170583948f, 0.5443118380f, 0.5715622296f, 0.5986919021f, - 0.6256446209f, 0.6523342207f, 0.6786749944f, 0.7045840109f, 0.7299779641f, 0.7547853740f, - 0.7789437691f, 0.8023962911f, 0.8250842263f, 0.8469401272f, 0.8678891784f, 0.8878500705f, - 0.9067442457f, 0.9245026353f, 0.9410725379f, 0.9564213901f, 0.9705164338f, 0.9833542233f, - 0.9949193206f, 1.0051881116f, 1.0141325299f, 1.0217280805f, 1.0279678321f, 1.0328759990f, - 1.0365142018f, 1.0389749476f, 1.0403626832f, 1.0407638661f, 1.0402158247f, 1.0386859218f, - 1.0360693875f, 1.0322135556f, 1.0269616972f, 1.0202228069f, 1.0121135675f, 1.0035354422f, - 0.9897053659f, 0.9706651118f, 0.9512828704f, 0.9307719520f, 0.9091186544f, 0.8864979484f, - 0.8631436896f, 0.8392834698f, 0.8150938957f, 0.7906763160f, 0.7660562253f, 0.7412033356f, - 0.7160643565f, 0.6905965223f, 0.6647900873f, 0.6386753533f, 0.6123109042f, 0.5857635917f, - 0.5590863635f, 0.5323035448f, 0.5054159767f, 0.4784116395f, 0.4512831657f, 0.4240582163f, - 0.3967995814f, 0.3695924504f, 0.3425141525f, 0.3155972383f, 0.2888001961f, 0.2620044852f, - 0.2350467488f, 0.2077866806f, 0.1801971236f, 0.1524510915f, 0.1249766396f, 0.0984509433f, - 0.0737154373f, 0.0515800648f, 0.0323408448f, 0.0138765961f, -}; - - -/* SNR: 85.15, PHASE: 0.166666666666667 */ -const float CLDFB80_60_flt[600] = -{ - -0.0000108386f, 0.0000016461f, -0.0000001140f, 0.0000015161f, -0.0000046862f, -0.0000001825f, - 0.0000001498f, -0.0000000815f, -0.0000033014f, 0.0000001274f, -0.0000001822f, 0.0000000191f, - 0.0000000335f, 0.0000000240f, 0.0000001226f, -0.0000010507f, 0.0000001892f, 0.0000000108f, - -0.0000000274f, -0.0000002365f, -0.0000000901f, -0.0000002666f, -0.0000007031f, 0.0000006413f, - -0.0000000514f, -0.0000000079f, 0.0000002000f, -0.0000014744f, 0.0000048656f, -0.0000001578f, - -0.0000005544f, 0.0000070490f, -0.0000012678f, 0.0000001774f, 0.0000000032f, -0.0000000624f, - 0.0000007343f, 0.0000001499f, -0.0000000401f, -0.0000000182f, -0.0000000944f, -0.0000000302f, - -0.0000000091f, 0.0000004307f, -0.0000028538f, 0.0000002990f, -0.0000000787f, 0.0000000221f, - 0.0000000116f, -0.0000001070f, 0.0000001406f, -0.0000009019f, 0.0000015376f, -0.0000000209f, - -0.0000002404f, -0.0000025088f, -0.0000000262f, 0.0000000630f, 0.0000044280f, -0.0000305498f, - -0.0000482857f, 0.0000046060f, -0.0000005548f, 0.0000056679f, -0.0000207092f, -0.0000003611f, - 0.0000005381f, -0.0000004877f, -0.0000120827f, 0.0000006267f, -0.0000006126f, 0.0000000608f, - 0.0000000850f, 0.0000000605f, 0.0000002921f, -0.0000025140f, 0.0000004365f, 0.0000000116f, - -0.0000000639f, -0.0000003741f, -0.0000004826f, -0.0000006420f, -0.0000009508f, 0.0000015544f, - -0.0000000218f, 0.0000006700f, 0.0000004181f, -0.0000021629f, -0.0000087189f, 0.0000088821f, - -0.0000126345f, 0.0000114297f, 0.0000034734f, -0.0000001464f, -0.0000007710f, 0.0000000568f, - -0.0000018420f, -0.0000002908f, 0.0000001921f, 0.0000004300f, 0.0000001583f, 0.0000000782f, - 0.0000000378f, -0.0000010138f, 0.0000068268f, -0.0000007152f, 0.0000001875f, -0.0000000557f, - -0.0000000384f, 0.0000003789f, -0.0000006147f, 0.0000030092f, -0.0000065731f, 0.0000001500f, - 0.0000007177f, 0.0000112115f, 0.0000001848f, -0.0000012026f, -0.0000036253f, 0.0000992289f, - -0.0003607599f, -0.0003045828f, -0.0002977550f, -0.0001992588f, -0.0002068946f, -0.0001476180f, - -0.0000980857f, -0.0000330428f, -0.0000555832f, -0.0000621497f, -0.0000658559f, -0.0000573785f, - -0.0000513819f, -0.0000416668f, -0.0000295334f, -0.0000092197f, -0.0000207558f, -0.0000179295f, - -0.0000092361f, -0.0000046097f, 0.0000131986f, 0.0000028970f, 0.0000096778f, 0.0000247417f, - 0.0000038052f, -0.0000064960f, -0.0000124163f, -0.0000092122f, 0.0000515938f, -0.0000831154f, - -0.0001125238f, 0.0000257367f, -0.0000286390f, -0.0000087198f, -0.0000068671f, 0.0000026174f, - 0.0000461536f, 0.0000029284f, -0.0000148640f, 0.0000099199f, -0.0000209369f, -0.0000366334f, - -0.0000401223f, -0.0000191720f, -0.0000276997f, -0.0000075415f, -0.0000235869f, -0.0000261427f, - -0.0000261960f, -0.0000286778f, -0.0000147880f, 0.0000339128f, 0.0000594843f, -0.0000475296f, - -0.0000916631f, -0.0001104448f, -0.0001832659f, -0.0003546036f, -0.0004947290f, -0.0008075304f, - -0.0008607843f, -0.0011759540f, -0.0011280060f, -0.0008472242f, -0.0006581582f, -0.0005496107f, - -0.0003610854f, -0.0001310136f, -0.0000843705f, -0.0001929211f, -0.0001782524f, -0.0001519136f, - -0.0001298443f, -0.0001002354f, -0.0000721302f, 0.0000080280f, -0.0000465158f, -0.0000338343f, - -0.0000199728f, -0.0000188237f, 0.0000123819f, -0.0000217824f, 0.0000285072f, 0.0000230642f, - -0.0000681343f, -0.0001359344f, -0.0002126650f, -0.0001268185f, 0.0002814194f, 0.0005796200f, - -0.0006917457f, -0.0004814411f, 0.0000740708f, 0.0001943933f, 0.0001302339f, 0.0000640566f, - -0.0000644259f, -0.0000257394f, 0.0000673956f, 0.0000057778f, 0.0000578339f, 0.0000733133f, - 0.0000756517f, 0.0000485628f, -0.0000143756f, 0.0000258732f, 0.0000543116f, 0.0000662824f, - 0.0000694890f, 0.0000763443f, 0.0000515654f, -0.0001531987f, -0.0001495108f, 0.0001684928f, - 0.0003371435f, 0.0003492618f, 0.0007408282f, 0.0013614773f, 0.0018283780f, 0.0019512654f, - -0.0018468584f, -0.0019931487f, -0.0021435886f, -0.0019354719f, -0.0018716309f, -0.0015855347f, - -0.0012449413f, -0.0008617653f, -0.0007595430f, -0.0007484226f, -0.0006080124f, -0.0004298524f, - -0.0002469285f, -0.0000337803f, 0.0001833366f, 0.0004827171f, 0.0006187704f, 0.0008525160f, - 0.0010861242f, 0.0012478726f, 0.0014766763f, 0.0016195479f, 0.0016757046f, 0.0017606977f, - 0.0018011194f, 0.0018115391f, 0.0017918594f, 0.0015514538f, 0.0007745483f, 0.0000722375f, - 0.0013858425f, 0.0016550121f, 0.0015724609f, 0.0016037139f, 0.0017032298f, 0.0018041572f, - 0.0018793499f, 0.0019356593f, 0.0020977586f, 0.0022698159f, 0.0024080283f, 0.0025652021f, - 0.0027100014f, 0.0027878510f, 0.0028094267f, 0.0028631331f, 0.0029379588f, 0.0029982766f, - 0.0030408094f, 0.0030637651f, 0.0030520617f, 0.0029707674f, 0.0028257202f, 0.0027032586f, - 0.0025230449f, 0.0021943273f, 0.0018058213f, 0.0015201289f, 0.0010679683f, 0.0003894925f, - -0.0002840705f, -0.0009250455f, -0.0013074121f, -0.0015395618f, -0.0017798333f, -0.0019401547f, - -0.0019524700f, -0.0018826540f, -0.0017220928f, -0.0014455464f, -0.0011010583f, -0.0007116751f, - -0.0002892919f, 0.0001463485f, 0.0005842019f, 0.0009616845f, 0.0013293069f, 0.0016655901f, - 0.0019957600f, 0.0022974838f, 0.0024834913f, 0.0026599403f, 0.0027746423f, 0.0027031419f, - 0.0026172855f, 0.0025078917f, 0.0023497345f, 0.0021702568f, 0.0020425098f, 0.0019860915f, - 0.0018636567f, 0.0011954954f, 0.0005514571f, -0.0000141897f, -0.0005741594f, -0.0011558780f, - -0.0017668142f, -0.0024120809f, -0.0030128714f, -0.0035882532f, -0.0041653667f, -0.0047110318f, - -0.0052436287f, -0.0057623702f, -0.0062633358f, -0.0067586961f, -0.0072425386f, -0.0077278117f, - -0.0082234072f, -0.0087363677f, -0.0092686369f, -0.0098240661f, -0.0104237699f, -0.0111004947f, - -0.0118009488f, -0.0125156239f, -0.0132546394f, -0.0140277665f, -0.0148077168f, -0.0156486149f, - 0.0165211147f, 0.0174398402f, 0.0182775949f, 0.0190534138f, 0.0199230411f, 0.0208118290f, - 0.0217092634f, 0.0226649147f, 0.0237088141f, 0.0248100351f, 0.0259599813f, 0.0271764016f, - 0.0284714021f, 0.0298434758f, 0.0312965027f, 0.0328356927f, 0.0344649815f, 0.0361664394f, - 0.0379470806f, 0.0398139569f, 0.0417666458f, 0.0438027210f, 0.0459314689f, 0.0481532079f, - 0.0504618496f, 0.0528498740f, 0.0553180491f, 0.0578703090f, 0.0604788669f, 0.0631374695f, - 0.0659669298f, 0.0688814001f, 0.0718159332f, 0.0747835495f, 0.0777923399f, 0.0808186627f, - 0.0838554308f, 0.0868947517f, 0.0899116089f, 0.0929041126f, 0.0958553537f, 0.0987459119f, - 0.1015756668f, 0.1043243835f, 0.1069774737f, 0.1095164928f, 0.1119302041f, 0.1142027056f, - 0.1163273532f, 0.1182880738f, 0.1200768686f, 0.1216925159f, 0.1231125873f, 0.1243362384f, - 0.1253610086f, 0.1261745561f, 0.1267721689f, 0.1271241769f, 0.1272284850f, 0.1270239254f, - 0.1267589302f, 0.1264656300f, 0.1258046109f, 0.1248336057f, 0.1235525506f, 0.1219504858f, - 0.1200252469f, 0.1177556666f, 0.1151258716f, 0.1121348547f, 0.1087635447f, 0.1050067776f, - 0.1008590143f, 0.0963144136f, 0.0913759079f, 0.0860427416f, 0.0803171444f, 0.0742040884f, - 0.0677045255f, 0.0608146076f, 0.0535432746f, 0.0458874964f, 0.0378425383f, 0.0294132744f, - 0.0205946670f, 0.0113896330f, 0.0018004463f, -0.0081766098f, -0.0185270856f, -0.0292402963f, - -0.0403618604f, -0.0518892622f, -0.0637672152f, -0.0759976007f, -0.0885871716f, -0.1015258403f, - -0.1148084399f, -0.1284318249f, -0.1423873123f, -0.1566679827f, -0.1712634880f, -0.1861645588f, - -0.2013636452f, -0.2168508609f, -0.2326166940f, -0.2486510515f, -0.2649463144f, -0.2814911369f, - -0.2982752192f, -0.3152867427f, -0.3325116487f, -0.3499355632f, -0.3675395959f, -0.3853024154f, - -0.4032065616f, -0.4212350657f, -0.4393672268f, -0.4575772736f, -0.4758650706f, -0.4942431738f, - 0.5125205124f, 0.5306725282f, 0.5488577283f, 0.5670276108f, 0.5851445237f, 0.6031984616f, - 0.6211684103f, 0.6390281696f, 0.6567504157f, 0.6743123793f, 0.6916889535f, 0.7088542063f, - 0.7257845309f, 0.7424591009f, 0.7588584440f, 0.7749648928f, 0.7907617163f, 0.8062324551f, - 0.8213587554f, 0.8361206884f, 0.8504967301f, 0.8644639148f, 0.8779983070f, 0.8910752510f, - 0.9036722755f, 0.9157691951f, 0.9273480313f, 0.9383949141f, 0.9489012228f, 0.9588586337f, - 0.9682545154f, 0.9770929872f, 0.9853708240f, 0.9930809758f, 1.0002174168f, 1.0067717565f, - 1.0127347711f, 1.0180999340f, 1.0228621525f, 1.0270212624f, 1.0305853696f, 1.0335685634f, - 1.0359921286f, 1.0378851378f, 1.0392782898f, 1.0402014380f, 1.0406826783f, 1.0407387739f, - 1.0403729933f, 1.0395784114f, 1.0383296408f, 1.0365863031f, 1.0343061945f, 1.0314399587f, - 1.0279374991f, 1.0237762412f, 1.0189593836f, 1.0135316260f, 1.0076524569f, 1.0021150619f, - 0.9928949328f, 0.9800034826f, 0.9674886109f, 0.9545877700f, 0.9411740407f, 0.9272370892f, - 0.9128016387f, 0.8979145998f, 0.8826491402f, 0.8670774704f, 0.8512639848f, 0.8352705212f, - 0.8191434022f, 0.8029102780f, 0.7865870046f, 0.7701746598f, 0.7536620391f, 0.7370346195f, - 0.7202763550f, 0.7033730373f, 0.6863185156f, 0.6691140098f, 0.6517679660f, 0.6342966925f, - 0.6167195326f, 0.5990562278f, 0.5813252524f, 0.5635402746f, 0.5457078369f, 0.5278295335f, - 0.5099048467f, 0.4919297136f, 0.4738984035f, 0.4558126317f, 0.4376796414f, 0.4195151253f, - 0.4013417258f, 0.3831842053f, 0.3650685616f, 0.3470163688f, 0.3290362900f, 0.3111247009f, - 0.2932627295f, 0.2754121565f, 0.2575267491f, 0.2395585877f, 0.2214602867f, 0.2032086383f, - 0.1848152793f, 0.1663238479f, 0.1478361334f, 0.1295133662f, 0.1115465981f, 0.0941771468f, - 0.0776828916f, 0.0622889538f, 0.0481725935f, 0.0353986404f, 0.0233593568f, 0.0103354077f, -}; - -/* 5ms delay prototype */ -const float LDQMF_10[] = { - 0.0001273845f, 0.0000635118f, -0.0000660217f, -0.0002113081f, -0.0003281537f, - -0.0003912222f, -0.0004068033f, -0.0004140125f, -0.0004718648f, -0.0006266075f, - -0.0009127590f, -0.0012739376f, -0.0016274325f, -0.0019008842f, -0.0020226149f, - -0.0019408775f, -0.0016361899f, -0.0011222441f, -0.0004377523f, 0.0003647603f, - -0.0012594409f, -0.0021522972f, -0.0030035379f, -0.0037893278f, -0.0044942242f, - -0.0051073083f, -0.0056195767f, -0.0060277097f, -0.0063409884f, -0.0065891631f, - -0.0068226936f, -0.0071118907f, -0.0075195418f, -0.0080805793f, -0.0087772291f, - -0.0095174490f, -0.0101190321f, -0.0103132902f, -0.0097556449f, -0.0080578737f, - 0.0048244377f, -0.0003165600f, -0.0076599251f, -0.0173909795f, -0.0295472052f, - -0.0439858213f, -0.0603589974f, -0.0780881494f, -0.0963465944f, -0.1140660420f, - -0.1299571097f, -0.1425518692f, -0.1502614617f, -0.1514699608f, -0.1446436346f, - -0.1284375042f, -0.1017979383f, -0.0640543476f, -0.0149940467f, 0.0450862162f, - -0.1153608263f, -0.1944719404f, -0.2805878818f, -0.3714071214f, -0.4642693698f, - -0.5562577248f, -0.6443206668f, -0.7254143953f, -0.7966600657f, -0.8555190563f, - -0.8997997642f, -0.9279605746f, -0.9392472506f, -0.9334323406f, -0.9110113978f, - -0.8731529117f, -0.8216037750f, -0.7585863471f, -0.6866725683f, -0.6086452603f, - 0.5273383856f, 0.4454931915f, 0.3659263849f, 0.2909410596f, 0.2225102335f, - 0.1621384323f, 0.1107588187f, 0.0686842650f, 0.0356131159f, 0.0106525151f, - -0.0063419202f, -0.0162735451f, -0.0215873942f, -0.0231836922f, -0.0218834467f, - -0.0185378529f, -0.0140356207f, -0.0092558619f, -0.0049960618f, -0.0018630750f -}; - -const float LDQMF_16[] = { - 0.0001265111f, 0.0001109249f, 0.0000568343f, -0.0000216999f, -0.0001121275f, - -0.0002026297f, -0.0002828319f, -0.0003443913f, -0.0003836917f, -0.0004022507f, - -0.0004069506f, -0.0004091908f, -0.0004238644f, -0.0004657293f, -0.0005455829f, - -0.0006671423f, -0.0008481053f, -0.0010676773f, -0.0012969378f, -0.0015220091f, - -0.0017250745f, -0.0018875538f, -0.0019920163f, -0.0020238718f, -0.0019730844f, - -0.0018349015f, -0.0016098975f, -0.0013033486f, -0.0009243955f, -0.0004846041f, - 0.0000030436f, 0.0005237655f, -0.0010895540f, -0.0016529929f, -0.0022070303f, - -0.0027436065f, -0.0032569722f, -0.0037424688f, -0.0041965689f, -0.0046164915f, - -0.0049998290f, -0.0053441799f, -0.0056481226f, -0.0059111635f, -0.0061348351f, - -0.0063237241f, -0.0064858343f, -0.0066322954f, -0.0067769806f, -0.0069382410f, - -0.0071333470f, -0.0073765265f, -0.0076779663f, -0.0080410065f, -0.0084597301f, - -0.0089169554f, -0.0093825553f, -0.0098114274f, -0.0101463618f, -0.0103159947f, - -0.0102374777f, -0.0098197237f, -0.0089666471f, -0.0075801839f, 0.0055659222f, - 0.0028292525f, -0.0007084093f, -0.0051146746f, -0.0104394183f, -0.0167112947f, - -0.0239351243f, -0.0320881605f, -0.0411179215f, -0.0509394705f, -0.0614346750f, - -0.0724472553f, -0.0837826133f, -0.0952089876f, -0.1064579859f, -0.1172273904f, - -0.1271827519f, -0.1359646022f, -0.1431937218f, -0.1484752893f, -0.1514120996f, - -0.1516146213f, -0.1487106383f, -0.1423557848f, -0.1322438419f, -0.1181157678f, - -0.0997688919f, -0.0770645440f, -0.0499351621f, -0.0183888972f, 0.0174860694f, - 0.0575199649f, -0.1014656499f, -0.1489799321f, -0.1996707469f, -0.2530553043f, - -0.3085824847f, -0.3656420112f, -0.4235731661f, -0.4816747010f, -0.5392161012f, - -0.5954495668f, -0.6496242881f, -0.7010003328f, -0.7488642931f, -0.7925460339f, - -0.8314355612f, -0.8650042415f, -0.8927068710f, -0.9141520858f, -0.9291663766f, - -0.9375609756f, -0.9392580390f, -0.9342910051f, -0.9228035808f, -0.9050434232f, - -0.8813542128f, -0.8521632552f, -0.8179759979f, -0.7793614268f, -0.7369411588f, - -0.6913757920f, -0.6433517337f, -0.5935677886f, 0.5427325368f, 0.4914081097f, - 0.4404284060f, 0.3904018402f, 0.3419007659f, 0.2954539955f, 0.2515334785f, - 0.2105401903f, 0.1727928966f, 0.1385205537f, 0.1078566760f, 0.0808390900f, - 0.0574123114f, 0.0374300666f, 0.0206582583f, 0.0067475829f, -0.0038830251f, - -0.0113212354f, -0.0167305935f, -0.0203650482f, -0.0224466976f, -0.0231772382f, - -0.0227553174f, -0.0213854741f, -0.0192801002f, -0.0166575927f, -0.0137361875f, - -0.0107288063f, -0.0078344941f, -0.0052339621f, -0.0030720702f, -0.0014194851f -}; - -const float LDQMF_20[] = { - 0.0001230230f, 0.0001211219f, 0.0000876540f, 0.0000352143f, -0.0000303788f, - -0.0001028838f, -0.0001760167f, -0.0002446725f, -0.0003034996f, -0.0003493345f, - -0.0003807641f, -0.0003985357f, -0.0004056677f, -0.0004072535f, -0.0004098394f, - -0.0004214063f, -0.0004495422f, -0.0005003878f, -0.0005777747f, -0.0006813223f, - -0.0008268412f, -0.0010004630f, -0.0011817788f, -0.0013656860f, -0.0015435946f, - -0.0017062968f, -0.0018441341f, -0.0019480695f, -0.0020097434f, -0.0020226294f, - -0.0019820682f, -0.0018855907f, -0.0017330211f, -0.0015261442f, -0.0012685407f, - -0.0009652392f, -0.0006221444f, -0.0002458634f, 0.0001564174f, 0.0005769439f, - -0.0010328424f, -0.0014848098f, -0.0019316213f, -0.0023701149f, -0.0027960713f, - -0.0032068293f, -0.0035999804f, -0.0039736414f, -0.0043262239f, -0.0046565188f, - -0.0049632201f, -0.0052450863f, -0.0055012843f, -0.0057313135f, -0.0059352517f, - -0.0061141332f, -0.0062703062f, -0.0064075105f, -0.0065308069f, -0.0066466411f, - -0.0067621553f, -0.0068870094f, -0.0070305937f, -0.0072006541f, -0.0074039386f, - -0.0076450342f, -0.0079257628f, -0.0082442267f, -0.0085938899f, -0.0089637861f, - -0.0093367994f, -0.0096898535f, -0.0099947909f, -0.0102182031f, -0.0103207529f, - -0.0102590285f, -0.0099863587f, -0.0094537362f, -0.0086111929f, -0.0074084769f, - 0.0057985946f, 0.0037309236f, 0.0011651339f, -0.0019364181f, -0.0056051607f, - -0.0098646237f, -0.0147295250f, -0.0202049762f, -0.0262852497f, -0.0329528190f, - -0.0401776619f, -0.0479161367f, -0.0561118126f, -0.0646922663f, -0.0735698044f, - -0.0826408863f, -0.0917868018f, -0.1008738130f, -0.1097536832f, -0.1182654947f, - -0.1262341589f, -0.1334753036f, -0.1397978216f, -0.1450008005f, -0.1488809884f, - -0.1512351334f, -0.1518635303f, -0.1505732536f, -0.1471813470f, -0.1415183097f, - -0.1334318966f, -0.1227891371f, -0.1094799563f, -0.0934195668f, -0.0745511875f, - -0.0528475679f, -0.0283128861f, -0.0009837818f, 0.0290693250f, 0.0617432520f, - -0.0969054326f, -0.1343720406f, -0.1739567965f, -0.2154271752f, -0.2585212290f, - -0.3029502928f, -0.3484017253f, -0.3945416212f, -0.4410185516f, -0.4874662757f, - -0.5335084200f, -0.5787616372f, -0.6228409410f, -0.6653640866f, -0.7059561610f, - -0.7442554235f, -0.7799182534f, -0.8126249313f, -0.8420860767f, -0.8680517077f, - -0.8902196884f, -0.9083824754f, -0.9224776030f, -0.9323854446f, -0.9380323887f, - -0.9393896461f, -0.9364743829f, -0.9293491840f, -0.9181203246f, -0.9029349089f, - -0.8839784265f, -0.8614694476f, -0.8356599212f, -0.8068289757f, -0.7752800584f, - -0.7413358092f, -0.7053351402f, -0.6676273942f, -0.6285686493f, -0.5885198116f, - 0.5478612781f, 0.5067980289f, 0.4658361673f, 0.4252935350f, 0.3854739666f, - 0.3466667533f, 0.3091430366f, 0.2731511295f, 0.2389119864f, 0.2066148520f, - 0.1764142811f, 0.1484276950f, 0.1227331311f, 0.0993694067f, 0.0783365741f, - 0.0595967993f, 0.0430756323f, 0.0286619961f, 0.0162059069f, 0.0054926532f, - -0.0030201224f, -0.0093160523f, -0.0142635731f, -0.0179969221f, -0.0206398536f, - -0.0223025978f, -0.0230882075f, -0.0230979007f, -0.0224345829f, -0.0212045144f, - -0.0195175279f, -0.0174855441f, -0.0152208358f, -0.0128338682f, -0.0104311826f, - -0.0081134979f, -0.0059733889f, -0.0040914025f, -0.0025271603f, -0.0012705614f -}; - -const float LDQMF_30[] = { - 0.0001132221f, 0.0001273845f, 0.0001170250f, 0.0000947188f, 0.0000635118f, - 0.0000250289f, -0.0000188243f, -0.0000660217f, -0.0001152096f, -0.0001640412f, - -0.0002113081f, -0.0002552809f, -0.0002945333f, -0.0003281537f, -0.0003555670f, - -0.0003765307f, -0.0003912222f, -0.0004003684f, -0.0004050101f, -0.0004068033f, - -0.0004073895f, -0.0004090022f, -0.0004140125f, -0.0004247443f, -0.0004433907f, - -0.0004718648f, -0.0005113805f, -0.0005630197f, -0.0006266075f, -0.0007011125f, - -0.0007991094f, -0.0009127590f, -0.0010302142f, -0.0011511127f, -0.0012739376f, - -0.0013960009f, -0.0015147630f, -0.0016274325f, -0.0017312448f, -0.0018232886f, - -0.0019008842f, -0.0019614976f, -0.0020026900f, -0.0020226149f, -0.0020196829f, - -0.0019926974f, -0.0019408775f, -0.0018640372f, -0.0017622994f, -0.0016361899f, - -0.0014866102f, -0.0013147899f, -0.0011222441f, -0.0009106447f, -0.0006817955f, - -0.0004377523f, -0.0001804045f, 0.0000879158f, 0.0003647603f, 0.0006472586f, - -0.0009574946f, -0.0012594409f, -0.0015596492f, -0.0018575254f, -0.0021522972f, - -0.0024420463f, -0.0027260673f, -0.0030035379f, -0.0032736242f, -0.0035357473f, - -0.0037893278f, -0.0040339152f, -0.0042689815f, -0.0044942242f, -0.0047093285f, - -0.0049138218f, -0.0051073083f, -0.0052895811f, -0.0054603852f, -0.0056195767f, - -0.0057671070f, -0.0059030461f, -0.0060277097f, -0.0061416570f, -0.0062457137f, - -0.0063409884f, -0.0064288811f, -0.0065109758f, -0.0065891631f, -0.0066657839f, - -0.0067426423f, -0.0068226936f, -0.0069094361f, -0.0070050140f, -0.0071118907f, - -0.0072320686f, -0.0073675187f, -0.0075195418f, -0.0076890816f, -0.0078762611f, - -0.0080805793f, -0.0083005941f, -0.0085338661f, -0.0087772291f, -0.0090263058f, - -0.0092753358f, -0.0095174490f, -0.0097448118f, -0.0099486159f, -0.0101190321f, - -0.0102448259f, -0.0103138546f, -0.0103132902f, -0.0102295466f, -0.0100485412f, - -0.0097556449f, -0.0093362173f, -0.0087752696f, -0.0080578737f, -0.0071694241f, - 0.0060977875f, 0.0048244377f, 0.0033389633f, 0.0016289989f, -0.0003165600f, - -0.0025077621f, -0.0049532265f, -0.0076599251f, -0.0106331240f, -0.0138763143f, - -0.0173909795f, -0.0211766809f, -0.0252304692f, -0.0295472052f, -0.0341192745f, - -0.0389365107f, -0.0439858213f, -0.0492520891f, -0.0547169745f, -0.0603589974f, - -0.0661538467f, -0.0720737800f, -0.0780881494f, -0.0841634125f, -0.0902627930f, - -0.0963465944f, -0.1023724005f, -0.1082947850f, -0.1140660420f, -0.1196364164f, - -0.1249518171f, -0.1299571097f, -0.1345982403f, -0.1388163716f, -0.1425518692f, - -0.1457448602f, -0.1483348161f, -0.1502614617f, -0.1514650136f, -0.1518869400f, - -0.1514699608f, -0.1501586437f, -0.1478999555f, -0.1446436346f, -0.1403426975f, - -0.1349538267f, -0.1284375042f, -0.1207587793f, -0.1118873134f, -0.1017979383f, - -0.0904709548f, -0.0778924823f, -0.0640543476f, -0.0489545316f, -0.0325974710f, - -0.0149940467f, 0.0038382637f, 0.0238753036f, 0.0450862162f, 0.0674346089f, - -0.0908823684f, -0.1153608263f, -0.1408283263f, -0.1672216803f, -0.1944719404f, - -0.2225042433f, -0.2512380779f, -0.2805878818f, -0.3104633093f, -0.3407693803f, - -0.3714071214f, -0.4022741020f, -0.4332643747f, -0.4642693698f, -0.4951784015f, - -0.5258791447f, -0.5562577248f, -0.5862001181f, -0.6155921817f, -0.6443206668f, - -0.6722734571f, -0.6993405223f, -0.7254143953f, -0.7503913045f, -0.7741714120f, - -0.7966600657f, -0.8177679181f, -0.8374124765f, -0.8555190563f, -0.8720235229f, - -0.8868073225f, -0.8997997642f, -0.9110177755f, -0.9204165936f, -0.9279605746f, - -0.9336239100f, -0.9373888969f, -0.9392472506f, -0.9391993284f, -0.9372548461f, - -0.9334323406f, -0.9277592301f, -0.9202710390f, -0.9110113978f, -0.9000319242f, - -0.8873908520f, -0.8731529117f, -0.8573898673f, -0.8401791453f, -0.8216037750f, - -0.8017510772f, -0.7807134390f, -0.7585863471f, -0.7354692221f, -0.7114632726f, - -0.6866725683f, -0.6612017751f, -0.6351572275f, -0.6086452603f, -0.5817720890f, - 0.5547027588f, 0.5273383856f, 0.4999553561f, 0.4726423621f, 0.4454931915f, - 0.4185986817f, 0.3920478821f, 0.3659263849f, 0.3403166533f, 0.3152970076f, - 0.2909410596f, 0.2673173845f, 0.2444883287f, 0.2225102335f, 0.2014321834f, - 0.1812966615f, 0.1621384323f, 0.1439844817f, 0.1268542111f, 0.1107588187f, - 0.0957026929f, 0.0816812664f, 0.0686842650f, 0.0566918403f, 0.0456795096f, - 0.0356131159f, 0.0264542010f, 0.0181538444f, 0.0106525151f, 0.0038657826f, - -0.0018247393f, -0.0063419202f, -0.0102294916f, -0.0135271698f, -0.0162735451f, - -0.0185101982f, -0.0202700198f, -0.0215873942f, -0.0224917270f, -0.0230140593f, - -0.0231836922f, -0.0230311844f, -0.0225872938f, -0.0218834467f, -0.0209521335f, - -0.0198257342f, -0.0185378529f, -0.0171212200f, -0.0156097068f, -0.0140356207f, - -0.0124316914f, -0.0108282696f, -0.0092558619f, -0.0077421702f, -0.0063143214f, - -0.0049960618f, -0.0038076851f, -0.0027630797f, -0.0018630750f, -0.0010562690f -}; - -const float LDQMF_32[] = { - 0.0001114764f, 0.0001277322f, 0.0001196933f, 0.0001003250f, 0.0000730156f, - 0.0000389626f, -0.0000004113f, -0.0000435304f, -0.0000890315f, -0.0001352291f, - -0.0001804941f, -0.0002240739f, -0.0002643097f, -0.0003001800f, -0.0003310027f, - -0.0003563178f, -0.0003759742f, -0.0003900956f, -0.0003992571f, -0.0004043059f, - -0.0004065038f, -0.0004072087f, -0.0004080582f, -0.0004110776f, -0.0004182056f, - -0.0004312390f, -0.0004520137f, -0.0004817972f, -0.0005216259f, -0.0005721557f, - -0.0006331798f, -0.0007036886f, -0.0007957022f, -0.0009019459f, -0.0010115934f, - -0.0011244126f, -0.0012394030f, -0.0013542691f, -0.0014670856f, -0.0015755219f, - -0.0016774036f, -0.0017702234f, -0.0018517138f, -0.0019197501f, -0.0019722404f, - -0.0020072563f, -0.0020233381f, -0.0020192105f, -0.0019939172f, -0.0019467958f, - -0.0018776910f, -0.0017866619f, -0.0016740696f, -0.0015406047f, -0.0013871717f, - -0.0012149811f, -0.0010253293f, -0.0008196524f, -0.0005995433f, -0.0003666130f, - -0.0001225593f, 0.0001306669f, 0.0003910401f, 0.0006561352f, -0.0009480129f, - -0.0012312274f, -0.0015128938f, -0.0017925701f, -0.0020698721f, -0.0023430535f, - -0.0026114415f, -0.0028743364f, -0.0031310993f, -0.0033810970f, -0.0036239279f, - -0.0038590427f, -0.0040861652f, -0.0043048300f, -0.0045148288f, -0.0047158841f, - -0.0049075997f, -0.0050896429f, -0.0052618566f, -0.0054239952f, -0.0055759880f, - -0.0057177031f, -0.0058492054f, -0.0059706448f, -0.0060824142f, -0.0061850520f, - -0.0062793852f, -0.0063663856f, -0.0064472742f, -0.0065233973f, -0.0065963734f, - -0.0066681784f, -0.0067402194f, -0.0068149343f, -0.0068953573f, -0.0069832220f, - -0.0070805764f, -0.0071891183f, -0.0073105576f, -0.0074461517f, -0.0075968099f, - -0.0077630100f, -0.0079445979f, -0.0081409542f, -0.0083505949f, -0.0085713090f, - -0.0088004116f, -0.0090341223f, -0.0092676217f, -0.0094952518f, -0.0097106276f, - -0.0099064959f, -0.0100751268f, -0.0102073448f, -0.0102934698f, -0.0103230691f, - -0.0102852238f, -0.0101685468f, -0.0099611804f, -0.0096511031f, -0.0092261136f, - -0.0086738830f, -0.0079820622f, -0.0071387375f, 0.0061342926f, 0.0049526179f, - 0.0035855719f, 0.0020228061f, 0.0002550660f, -0.0017262386f, -0.0039286232f, - -0.0063582431f, -0.0090201823f, -0.0119179590f, -0.0150538534f, -0.0184284002f, - -0.0220406763f, -0.0258877873f, -0.0299651287f, -0.0342661664f, -0.0387823842f, - -0.0435030013f, -0.0484156460f, -0.0535055920f, -0.0587556586f, -0.0641462877f, - -0.0696556121f, -0.0752592385f, -0.0809305608f, -0.0866405517f, -0.0923579335f, - -0.0980491117f, -0.1036783829f, -0.1092077494f, -0.1145975813f, -0.1198066771f, - -0.1247901469f, -0.1295024157f, -0.1338994503f, -0.1379327923f, -0.1415534765f, - -0.1447122544f, -0.1473592520f, -0.1494447440f, -0.1509192586f, -0.1517339647f, - -0.1518410593f, -0.1511938870f, -0.1497472823f, -0.1474581808f, -0.1442855000f, - -0.1401909739f, -0.1351390928f, -0.1290972829f, -0.1220364720f, -0.1139311492f, - -0.1047598422f, -0.0945051536f, -0.0831540972f, -0.0706980526f, -0.0571332164f, - -0.0424606539f, -0.0266861133f, -0.0098207183f, 0.0081194015f, 0.0271129999f, - 0.0471336693f, 0.0681508929f, -0.0901340321f, -0.1130230203f, -0.1367862970f, - -0.1613724083f, -0.1867254972f, -0.2127848268f, -0.2394856811f, -0.2667590678f, - -0.2945322692f, -0.3227286935f, -0.3512688875f, -0.3800697625f, -0.4090464115f, - -0.4381107390f, -0.4671728909f, -0.4961415529f, -0.5249239802f, -0.5534265041f, - -0.5815549493f, -0.6092154384f, -0.6363143325f, -0.6627591252f, -0.6884583235f, - -0.7133225799f, -0.7372650504f, -0.7602017522f, -0.7820522189f, -0.8027398586f, - -0.8221930265f, -0.8403448462f, -0.8571352363f, -0.8725125194f, -0.8863729239f, - -0.8986561894f, -0.9093839526f, -0.9185180068f, -0.9260279536f, -0.9318904877f, - -0.9360890388f, -0.9386137724f, -0.9394617677f, -0.9386372566f, -0.9361515045f, - -0.9320224524f, -0.9262748957f, -0.9189397693f, -0.9100542665f, -0.8996617198f, - -0.8878104091f, -0.8745536804f, -0.8599503040f, -0.8440635800f, -0.8269610405f, - -0.8087138534f, -0.7893968821f, -0.7690878510f, -0.7478674054f, -0.7258179784f, - -0.7030247450f, -0.6795731187f, -0.6555500627f, -0.6310426593f, -0.6061393619f, - -0.5809279680f, 0.5555571318f, 0.5299059153f, 0.5042316318f, 0.4786062539f, - 0.4531070888f, 0.4278093874f, 0.4027872086f, 0.3781120181f, 0.3538532257f, - 0.3300769329f, 0.3068462014f, 0.2842200696f, 0.2622535527f, 0.2409968227f, - 0.2204952389f, 0.2007884830f, 0.1819112599f, 0.1638922095f, 0.1467540115f, - 0.1305132508f, 0.1151807010f, 0.1007611454f, 0.0872532800f, 0.0746501535f, - 0.0629388988f, 0.0521017052f, 0.0421142913f, 0.0329478458f, 0.0245663263f, - 0.0169306416f, 0.0099878404f, 0.0036667606f, -0.0016705567f, -0.0059447517f, - -0.0096629029f, -0.0128545053f, -0.0155541990f, -0.0177966245f, -0.0196102057f, - -0.0210233144f, -0.0220607370f, -0.0227484647f, -0.0231104363f, -0.0231721289f, - -0.0229578372f, -0.0224937275f, -0.0218052734f, -0.0209197178f, -0.0198635645f, - -0.0186645426f, -0.0173496436f, -0.0159468446f, -0.0144828279f, -0.0129845534f, - -0.0114774173f, -0.0099871978f, -0.0085373754f, -0.0071508014f, -0.0058474829f, - -0.0046474598f, -0.0035660865f, -0.0026146793f, -0.0017866376f, -0.0010276214f -}; - - -const float LDQMF_40[] = { - 0.0001054310f, 0.0001278277f, 0.0001251928f, 0.0001146889f, 0.0000979851f, - 0.0000760574f, 0.0000498818f, 0.0000198387f, -0.0000131029f, -0.0000479618f, - -0.0000844192f, -0.0001213740f, -0.0001580337f, -0.0001938389f, -0.0002282606f, - -0.0002604699f, -0.0002899167f, -0.0003162437f, -0.0003392129f, -0.0003585335f, - -0.0003742669f, -0.0003864095f, -0.0003952379f, -0.0004011750f, -0.0004046241f, - -0.0004063755f, -0.0004070677f, -0.0004074774f, -0.0004086622f, -0.0004115711f, - -0.0004172591f, -0.0004265972f, -0.0004405513f, -0.0004599697f, -0.0004853081f, - -0.0005171628f, -0.0005559114f, -0.0006013246f, -0.0006533514f, -0.0007115960f, - -0.0007855657f, -0.0008695939f, -0.0009563145f, -0.0010451660f, -0.0011358386f, - -0.0012278836f, -0.0013199070f, -0.0014110771f, -0.0015001969f, -0.0015860386f, - -0.0016675856f, -0.0017434494f, -0.0018125287f, -0.0018736399f, -0.0019257307f, - -0.0019677528f, -0.0019986648f, -0.0020177464f, -0.0020242827f, -0.0020176519f, - -0.0019974308f, -0.0019632282f, -0.0019149955f, -0.0018526751f, -0.0017763647f, - -0.0016862786f, -0.0015827856f, -0.0014663173f, -0.0013374290f, -0.0011967755f, - -0.0010450395f, -0.0008829425f, -0.0007112789f, -0.0005309665f, -0.0003426777f, - -0.0001474131f, 0.0000538647f, 0.0002601457f, 0.0004704242f, 0.0006831217f, - -0.0009193350f, -0.0011463511f, -0.0013722219f, -0.0015970126f, -0.0018204211f, - -0.0020423096f, -0.0022615823f, -0.0024778829f, -0.0026909125f, -0.0029003047f, - -0.0031057200f, -0.0033068350f, -0.0035034318f, -0.0036952950f, -0.0038821250f, - -0.0040638284f, -0.0042401305f, -0.0044109244f, -0.0045761010f, -0.0047354894f, - -0.0048888689f, -0.0050360523f, -0.0051769917f, -0.0053115566f, -0.0054396591f, - -0.0055612531f, -0.0056762602f, -0.0057847309f, -0.0058866790f, -0.0059822481f, - -0.0060716602f, -0.0061551840f, -0.0062332042f, -0.0063061914f, -0.0063747251f, - -0.0064394251f, -0.0065009692f, -0.0065601622f, -0.0066179447f, -0.0066753621f, - -0.0067329677f, -0.0067919991f, -0.0068543297f, -0.0069208522f, -0.0069924956f, - -0.0070703635f, -0.0071552829f, -0.0072481371f, -0.0073496993f, -0.0074605206f, - -0.0075810468f, -0.0077115200f, -0.0078519098f, -0.0080020009f, -0.0081613464f, - -0.0083290907f, -0.0085040880f, -0.0086850226f, -0.0088702254f, -0.0090575712f, - -0.0092444401f, -0.0094279535f, -0.0096049141f, -0.0097717466f, -0.0099247349f, - -0.0100597525f, -0.0101720523f, -0.0102568185f, -0.0103087639f, -0.0103225084f, - -0.0102923671f, -0.0102125369f, -0.0100769754f, -0.0098794578f, -0.0096139675f, - -0.0092741428f, -0.0088536264f, -0.0083462056f, -0.0077455463f, -0.0070456262f, - 0.0062426012f, 0.0053260727f, 0.0042929468f, 0.0031377305f, 0.0018554037f, - 0.0004413279f, -0.0011089550f, -0.0027993873f, -0.0046333913f, -0.0066139149f, - -0.0087434240f, -0.0110237021f, -0.0134560717f, -0.0160411559f, -0.0187789686f, - -0.0216688234f, -0.0247092377f, -0.0278980359f, -0.0312322956f, -0.0347082689f, - -0.0383213721f, -0.0420661084f, -0.0459361374f, -0.0499247424f, -0.0540237017f, - -0.0582240038f, -0.0625155717f, -0.0668876022f, -0.0713279545f, -0.0758237690f, - -0.0803611800f, -0.0849252865f, -0.0895003974f, -0.0940696299f, -0.0986154303f, - -0.1031193137f, -0.1075617522f, -0.1119226590f, -0.1161812171f, -0.1203159690f, - -0.1243033260f, -0.1281196773f, -0.1317433566f, -0.1351498365f, -0.1383142620f, - -0.1412113756f, -0.1438160986f, -0.1461028159f, -0.1480461359f, -0.1496205181f, - -0.1508007050f, -0.1515616924f, -0.1518789232f, -0.1517281830f, -0.1510859281f, - -0.1499291658f, -0.1482358277f, -0.1459847391f, -0.1431556493f, -0.1397294253f, - -0.1356883198f, -0.1310155839f, -0.1256958842f, -0.1197156236f, -0.1130623519f, - -0.1057254449f, -0.0976961926f, -0.0889673084f, -0.0795335919f, -0.0693915039f, - -0.0585396253f, -0.0469785258f, -0.0347105376f, -0.0217403900f, -0.0080747427f, - 0.0062775812f, 0.0213057883f, 0.0369967707f, 0.0533357821f, 0.0703063011f, - -0.0878949612f, -0.1060620621f, -0.1247984543f, -0.1440782398f, -0.1638741642f, - -0.1841574013f, -0.2048965842f, -0.2260592878f, -0.2476108670f, -0.2695151269f, - -0.2917346060f, -0.3142299950f, -0.3369609118f, -0.3598856330f, -0.3829609752f, - -0.4061433673f, -0.4293875396f, -0.4526477456f, -0.4758775234f, -0.4990297258f, - -0.5220568180f, -0.5449107289f, -0.5675433278f, -0.5899065137f, -0.6119521260f, - -0.6336323619f, -0.6548998952f, -0.6757075191f, -0.6960092783f, -0.7157597542f, - -0.7349147201f, -0.7534312606f, -0.7712675929f, -0.7883839607f, -0.8047417998f, - -0.8203051686f, -0.8350396156f, -0.8489138484f, -0.8618991971f, -0.8739694357f, - -0.8850591183f, -0.8951326609f, -0.9042174816f, -0.9122928381f, -0.9193425775f, - -0.9253507257f, -0.9303058386f, -0.9341986179f, -0.9370224476f, -0.9387740493f, - -0.9394523501f, -0.9390596747f, -0.9376010895f, -0.9350843430f, -0.9315201044f, - -0.9269216657f, -0.9213048816f, -0.9146882296f, -0.9070926309f, -0.8985413909f, - -0.8890597224f, -0.8786749244f, -0.8674164414f, -0.8553160429f, -0.8424068689f, - -0.8287240267f, -0.8143038750f, -0.7991842628f, -0.7834047079f, -0.7670054436f, - -0.7500280738f, -0.7325149179f, -0.7145089507f, -0.6960543990f, -0.6771950722f, - -0.6579754949f, -0.6384407282f, -0.6186353564f, -0.5986043811f, -0.5783956647f, - 0.5581169724f, 0.5376043320f, 0.5170669556f, 0.4965355098f, 0.4760493934f, - 0.4556491673f, 0.4353731573f, 0.4152592719f, 0.3953450024f, 0.3756662905f, - 0.3562584817f, 0.3371553421f, 0.3183895946f, 0.2999922633f, 0.2819928825f, - 0.2644190788f, 0.2472964972f, 0.2306490242f, 0.2144980878f, 0.1988629252f, - 0.1837607920f, 0.1692063361f, 0.1552118808f, 0.1417868733f, 0.1289390326f, - 0.1166729480f, 0.1049910933f, 0.0938936323f, 0.0833776593f, 0.0734392256f, - 0.0640704259f, 0.0552623831f, 0.0470035598f, 0.0392793566f, 0.0320752300f, - 0.0253704041f, 0.0191462450f, 0.0133753549f, 0.0080275321f, 0.0030762297f, - -0.0012000328f, -0.0047226716f, -0.0078742635f, -0.0106727527f, -0.0131460698f, - -0.0153053077f, -0.0171699896f, -0.0187555570f, -0.0200747978f, -0.0211435594f, - -0.0219731592f, -0.0225773286f, -0.0229687411f, -0.0231592804f, -0.0231627058f, - -0.0229909588f, -0.0226575918f, -0.0221759379f, -0.0215590782f, -0.0208213329f, - -0.0199760906f, -0.0190375410f, -0.0180198960f, -0.0169368219f, -0.0158027392f, - -0.0146312509f, -0.0134359635f, -0.0122305267f, -0.0110275447f, -0.0098399809f, - -0.0086799636f, -0.0075585782f, -0.0064875027f, -0.0054761618f, -0.0045336313f, - -0.0036688452f, -0.0028846052f, -0.0021852630f, -0.0015646699f, -0.0009385595f -}; - - -const float LDQMF_60[] = { - 0.0000953076f, 0.0001230230f, 0.0001279964f, 0.0001260533f, 0.0001211219f, - 0.0001122123f, 0.0001010860f, 0.0000876540f, 0.0000719883f, 0.0000545472f, - 0.0000352143f, 0.0000145686f, -0.0000074264f, -0.0000303788f, -0.0000539205f, - -0.0000782743f, -0.0001028838f, -0.0001275374f, -0.0001520015f, -0.0001760167f, - -0.0001997108f, -0.0002226708f, -0.0002446725f, -0.0002655797f, -0.0002852145f, - -0.0003034996f, -0.0003203036f, -0.0003356283f, -0.0003493345f, -0.0003614030f, - -0.0003719004f, -0.0003807641f, -0.0003881051f, -0.0003939842f, -0.0003985357f, - -0.0004019095f, -0.0004041938f, -0.0004056677f, -0.0004065430f, -0.0004069925f, - -0.0004072535f, -0.0004075877f, -0.0004083676f, -0.0004098394f, -0.0004122990f, - -0.0004160839f, -0.0004214063f, -0.0004285777f, -0.0004378651f, -0.0004495422f, - -0.0004637682f, -0.0004806494f, -0.0005003878f, -0.0005231378f, -0.0005489803f, - -0.0005777747f, -0.0006095612f, -0.0006443121f, -0.0006813223f, -0.0007226231f, - -0.0007722576f, -0.0008268412f, -0.0008839625f, -0.0009417336f, -0.0010004630f, - -0.0010601623f, -0.0011206097f, -0.0011817788f, -0.0012432419f, -0.0013045983f, - -0.0013656860f, -0.0014260965f, -0.0014855355f, -0.0015435946f, -0.0015999591f, - -0.0016543545f, -0.0017062968f, -0.0017554691f, -0.0018015467f, -0.0018441341f, - -0.0018829798f, -0.0019177221f, -0.0019480695f, -0.0019736972f, -0.0019943134f, - -0.0020097434f, -0.0020197174f, -0.0020240925f, -0.0020226294f, -0.0020152442f, - -0.0020017736f, -0.0019820682f, -0.0019561697f, -0.0019240153f, -0.0018855907f, - -0.0018409232f, -0.0017900462f, -0.0017330211f, -0.0016699535f, -0.0016009507f, - -0.0015261442f, -0.0014456788f, -0.0013597424f, -0.0012685407f, -0.0011722331f, - -0.0010710671f, -0.0009652392f, -0.0008549765f, -0.0007405236f, -0.0006221444f, - -0.0005001140f, -0.0003745670f, -0.0002458634f, -0.0001142541f, 0.0000199491f, - 0.0001564174f, 0.0002949402f, 0.0004350246f, 0.0005769439f, 0.0007203126f, - -0.0008803223f, -0.0010328424f, -0.0011841310f, -0.0013346316f, -0.0014848098f, - -0.0016343417f, -0.0017832819f, -0.0019316213f, -0.0020790498f, -0.0022252349f, - -0.0023701149f, -0.0025136294f, -0.0026556554f, -0.0027960713f, -0.0029348312f, - -0.0030717771f, -0.0032068293f, -0.0033399195f, -0.0034709862f, -0.0035999804f, - -0.0037267797f, -0.0038513308f, -0.0039736414f, -0.0040935921f, -0.0042111278f, - -0.0043262239f, -0.0044388464f, -0.0045489701f, -0.0046565188f, -0.0047614835f, - -0.0048637423f, -0.0049632201f, -0.0050599808f, -0.0051539382f, -0.0052450863f, - -0.0053333500f, -0.0054187514f, -0.0055012843f, -0.0055808770f, -0.0056575472f, - -0.0057313135f, -0.0058021732f, -0.0058701355f, -0.0059352517f, -0.0059975707f, - -0.0060571772f, -0.0061141332f, -0.0061685541f, -0.0062205540f, -0.0062703062f, - -0.0063179093f, -0.0063635921f, -0.0064075105f, -0.0064498796f, -0.0064908965f, - -0.0065308069f, -0.0065698619f, -0.0066083665f, -0.0066466411f, -0.0066849431f, - -0.0067233290f, -0.0067621553f, -0.0068021296f, -0.0068436749f, -0.0068870094f, - -0.0069324085f, -0.0069801519f, -0.0070305937f, -0.0070840055f, -0.0071406048f, - -0.0072006541f, -0.0072644479f, -0.0073321410f, -0.0074039386f, -0.0074799177f, - -0.0075602704f, -0.0076450342f, -0.0077342330f, -0.0078278277f, -0.0079257628f, - -0.0080279401f, -0.0081341872f, -0.0082442267f, -0.0083577875f, -0.0084744738f, - -0.0085938899f, -0.0087156557f, -0.0088391500f, -0.0089637861f, -0.0090888245f, - -0.0092134504f, -0.0093367994f, -0.0094579896f, -0.0095760096f, -0.0096898535f, - -0.0097982995f, -0.0099003557f, -0.0099947909f, -0.0100801717f, -0.0101551116f, - -0.0102182031f, -0.0102678994f, -0.0103026126f, -0.0103207529f, -0.0103206923f, - -0.0103006857f, -0.0102590285f, -0.0101939747f, -0.0101036867f, -0.0099863587f, - -0.0098401112f, -0.0096632261f, -0.0094537362f, -0.0092098210f, -0.0089295702f, - -0.0086111929f, -0.0082527259f, -0.0078523541f, -0.0074084769f, -0.0069190590f, - 0.0063841688f, 0.0057985946f, 0.0051621343f, 0.0044734711f, 0.0037309236f, - 0.0029329660f, 0.0020781513f, 0.0011651339f, 0.0001925042f, -0.0008409545f, - -0.0019364181f, -0.0030950012f, -0.0043176264f, -0.0056051607f, -0.0069584334f, - -0.0083780792f, -0.0098646237f, -0.0114185056f, -0.0130400723f, -0.0147295250f, - -0.0164868534f, -0.0183120724f, -0.0202049762f, -0.0221651513f, -0.0241921283f, - -0.0262852497f, -0.0284437388f, -0.0306666382f, -0.0329528190f, -0.0353010744f, - -0.0377098918f, -0.0401776619f, -0.0427025780f, -0.0452826768f, -0.0479161367f, - -0.0506004691f, -0.0533332452f, -0.0561118126f, -0.0589331910f, -0.0617944039f, - -0.0646922663f, -0.0676232576f, -0.0705836788f, -0.0735698044f, -0.0765774846f, - -0.0796026587f, -0.0826408863f, -0.0856874809f, -0.0887378305f, -0.0917868018f, - -0.0948293805f, -0.0978601947f, -0.1008738130f, -0.1038645208f, -0.1068264544f, - -0.1097536832f, -0.1126400903f, -0.1154794544f, -0.1182654947f, -0.1209914312f, - -0.1236500666f, -0.1262341589f, -0.1287376434f, -0.1311538219f, -0.1334753036f, - -0.1356947273f, -0.1378047168f, -0.1397978216f, -0.1416664869f, -0.1434033662f, - -0.1450008005f, -0.1464512348f, -0.1477471888f, -0.1488809884f, -0.1498452872f, - -0.1506324410f, -0.1512351334f, -0.1516460329f, -0.1518578976f, -0.1518635303f, - -0.1516559124f, -0.1512281001f, -0.1505732536f, -0.1496847868f, -0.1485562176f, - -0.1471813470f, -0.1455538720f, -0.1436681300f, -0.1415183097f, -0.1390990764f, - -0.1364052594f, -0.1334318966f, -0.1301742792f, -0.1266280264f, -0.1227891371f, - -0.1186537445f, -0.1142183766f, -0.1094799563f, -0.1044355705f, -0.0990828425f, - -0.0934195668f, -0.0874440819f, -0.0811550021f, -0.0745511875f, -0.0676321834f, - -0.0603975877f, -0.0528475679f, -0.0449828543f, -0.0368040986f, -0.0283128861f, - -0.0195108838f, -0.0104003223f, -0.0009837818f, 0.0087356847f, 0.0187546927f, - 0.0290693250f, 0.0396753438f, 0.0505682528f, 0.0617432520f, 0.0731955394f, - -0.0849232078f, -0.0969054326f, -0.1091460735f, -0.1216373071f, -0.1343720406f, - -0.1473424733f, -0.1605402082f, -0.1739567965f, -0.1875831038f, -0.2014097124f, - -0.2154271752f, -0.2296251506f, -0.2439934313f, -0.2585212290f, -0.2731975317f, - -0.2880111337f, -0.3029502928f, -0.3180032372f, -0.3331578076f, -0.3484017253f, - -0.3637222052f, -0.3791064322f, -0.3945416212f, -0.4100143015f, -0.4255111217f, - -0.4410185516f, -0.4565227628f, -0.4720100164f, -0.4874662757f, -0.5028775334f, - -0.5182296634f, -0.5335084200f, -0.5486994982f, -0.5637886524f, -0.5787616372f, - -0.5936041474f, -0.6083019376f, -0.6228409410f, -0.6372069120f, -0.6513859630f, - -0.6653640866f, -0.6791275144f, -0.6926627755f, -0.7059561610f, -0.7189947963f, - -0.7317654490f, -0.7442554235f, -0.7564523220f, -0.7683438063f, -0.7799182534f, - -0.7911639810f, -0.8020697832f, -0.8126249313f, -0.8228194118f, -0.8326428533f, - -0.8420860767f, -0.8511404991f, -0.8597975969f, -0.8680517077f, -0.8758881092f, - -0.8832823634f, -0.8902196884f, -0.8967157602f, -0.9027729034f, -0.9083824754f, - -0.9135394692f, -0.9182395935f, -0.9224776030f, -0.9262499809f, -0.9295535684f, - -0.9323854446f, -0.9347436428f, -0.9366261959f, -0.9380323887f, -0.9389615655f, - -0.9394137263f, -0.9393896461f, -0.9388904572f, -0.9379178882f, -0.9364743829f, - -0.9345626831f, -0.9321863055f, -0.9293491840f, -0.9260557890f, -0.9223110080f, - -0.9181203246f, -0.9134896994f, -0.9084255695f, -0.9029349089f, -0.8970250487f, - -0.8907034993f, -0.8839784265f, -0.8768582940f, -0.8693521619f, -0.8614694476f, - -0.8532197475f, -0.8446131349f, -0.8356599212f, -0.8263708353f, -0.8167568445f, - -0.8068289757f, -0.7965991497f, -0.7860788107f, -0.7752800584f, -0.7642148733f, - -0.7528960109f, -0.7413358092f, -0.7295469642f, -0.7175422311f, -0.7053351402f, - -0.6929380894f, -0.6803644896f, -0.6676273942f, -0.6547405124f, -0.6417166591f, - -0.6285686493f, -0.6153115034f, -0.6019562483f, -0.5885198116f, -0.5750215650f, - 0.5615197420f, 0.5478612781f, 0.5341838002f, 0.5204906464f, 0.5067980289f, - 0.4931168854f, 0.4794588387f, 0.4658361673f, 0.4522601366f, 0.4387422502f, - 0.4252935350f, 0.4119254053f, 0.3986486793f, 0.3854739666f, 0.3724119067f, - 0.3594728410f, 0.3466667533f, 0.3340034485f, 0.3214924335f, 0.3091430366f, - 0.2969639599f, 0.2849639654f, 0.2731511295f, 0.2615332901f, 0.2501178682f, - 0.2389119864f, 0.2279221565f, 0.2171545923f, 0.2066148520f, 0.1963084787f, - 0.1862401515f, 0.1764142811f, 0.1668347418f, 0.1575049609f, 0.1484276950f, - 0.1396053135f, 0.1310400218f, 0.1227331311f, 0.1146853194f, 0.1068974212f, - 0.0993694067f, 0.0921007246f, 0.0850901082f, 0.0783365741f, 0.0718384907f, - 0.0655927584f, 0.0595967993f, 0.0538481586f, 0.0483424664f, 0.0430756323f, - 0.0380428955f, 0.0332404599f, 0.0286619961f, 0.0242999699f, 0.0201510899f, - 0.0162059069f, 0.0124559226f, 0.0088928537f, 0.0054926532f, 0.0023052765f, - -0.0005515143f, -0.0030201224f, -0.0052712574f, -0.0073737046f, -0.0093160523f, - -0.0111072771f, -0.0127562135f, -0.0142635731f, -0.0156361461f, -0.0168790054f, - -0.0179969221f, -0.0189934950f, -0.0198726747f, -0.0206398536f, -0.0212980714f, - -0.0218509119f, -0.0223025978f, -0.0226570386f, -0.0229178313f, -0.0230882075f, - -0.0231725387f, -0.0231746566f, -0.0230979007f, -0.0229462404f, -0.0227237809f, - -0.0224345829f, -0.0220820960f, -0.0216706358f, -0.0212045144f, -0.0206875466f, - -0.0201238506f, -0.0195175279f, -0.0188730918f, -0.0181944817f, -0.0174855441f, - -0.0167510118f, -0.0159947462f, -0.0152208358f, -0.0144332750f, -0.0136361914f, - -0.0128338682f, -0.0120294262f, -0.0112272501f, -0.0104311826f, -0.0096443929f, - -0.0088709844f, -0.0081134979f, -0.0073764324f, -0.0066623385f, -0.0059733889f, - -0.0053142183f, -0.0046856776f, -0.0040914025f, -0.0035321070f, -0.0030089030f, - -0.0025271603f, -0.0020749648f, -0.0016621647f, -0.0012705614f, -0.0008115423f -}; -#endif - -#ifdef IVAS_FLOAT_FIXED /* SNR: 109.44, PHASE: 3.500000000000000 */ const Word16 CLDFB80_10_fx[100] = // q = 15 sf = 17036 qsf = 14 { @@ -9794,137 +5700,7 @@ const Word32 rot_vec_ana_im_L60_fx[30] = // q = 29 -4057371, -36495492, -68833576, -100983000, -132855632, -164364112, -195422080, -225944416, -255847456, -285049248, -313469728, -341030976, -367657536, -393276352, -417817216, -441212864, -463399200, -484315392, -503904096, -522111616, -538888128, -554187520, -567967936, -580191616, -590825024, -599838976, -607208896, -612914432, -616940032, -619274624 }; -#endif - -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_delay_re_LDQMF[60] = -{ --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f -}; - -const float rot_vec_delay_im_LDQMF[60] = -{ --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f, --0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f, --0.7071067812f,0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f, -0.7071067812f,0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f, -0.7071067812f,-0.7071067812f,-0.7071067812f,0.7071067812f,0.7071067812f -}; -const float rot_vec_ana_re_L10[5] = -{ - 2.8262465099f,2.6536058227f,2.2212117088f,1.5713899168f,0.7677495312f, -}; - -const float rot_vec_ana_im_L10[5] = -{ - -0.1110435278f,-0.9789668726f,-1.7510621190f,-2.3517512048f,-2.7222344971f, -}; - -const float rot_vec_ana_re_L16[8] = -{ - 2.2353945156f,2.1817362886f,2.0442351594f,1.8281752196f,1.5418595313f,1.1962910459f, - 0.8047497665f,0.3822824048f, -}; - -const float rot_vec_ana_im_L16[8] = -{ - -0.0548758552f,-0.4899252669f,-0.9061471254f,-1.2875462580f,-1.6194657100f,-1.8891500029f, - -2.0862353207f,-2.2031477851f, -}; - -const float rot_vec_ana_re_L20[10] = -{ - 1.9996144810f,1.9688531362f,1.8896120929f,1.7638425287f,1.5946413075f,1.3861747251f, - 1.1435759205f,0.8728184813f,0.5805693545f,0.2740246834f, -}; - -const float rot_vec_ana_im_L20[10] = -{ - -0.0392673849f,-0.3515925599f,-0.6552603591f,-0.9427934737f,-1.2071118839f,-1.4417071934f, - -1.6408028871f,-1.7994965681f,-1.9138806715f,-1.9811386809f, -}; - -const float rot_vec_ana_re_L30[15] = -{ - 1.6328532594f,1.6216739995f,1.5927273399f,1.5463304262f,1.4829915928f,1.4034047932f, - 1.3084419970f,1.1991436365f,1.0767072074f,0.9424741487f,0.7979151461f,0.6446140182f, - 0.4842503641f,0.3185811618f,0.1494215176f, -}; - -const float rot_vec_ana_im_L30[15] = -{ - -0.0213752201f,-0.1919377663f,-0.3603974022f,-0.5249084488f,-0.6836684885f,-0.8349381133f, - -0.9770599813f,-1.1084769757f,-1.2277492644f,-1.3335700753f,-1.4247800133f,-1.5003797633f, - -1.5595410387f,-1.6016156561f,-1.6261426373f, -}; - -const float rot_vec_ana_re_L32[16] = -{ - 1.5810197732f,1.5715049038f,1.5468555830f,1.5073091974f,1.4532466002f,1.3851884438f, - 1.3037901655f,1.2098356752f,1.1042298059f,0.9879896000f,0.8622345142f,0.7281756387f, - 0.5871040336f,0.4403782958f,0.2894114743f,0.1356574621f, -}; - -const float rot_vec_ana_im_L32[16] = -{ - -0.0194030057f,-0.1742766119f,-0.3274718390f,-0.4775133334f,-0.6229561133f,-0.7623994853f, - -0.8945005334f,-1.0179870525f,-1.1316697997f,-1.2344539482f,-1.3253496303f,-1.4034814709f, - -1.4680970178f,-1.5185739878f,-1.5544262602f,-1.5753085580f, -}; - -const float rot_vec_ana_re_L40[20] = -{ - 1.4141454099f,1.4086967623f,1.3945630307f,1.3718313542f,1.3406418813f,1.3011869053f, - 1.2537096794f,1.1985029164f,1.1359069844f,1.0663078081f,0.9901344896f,0.9078566627f, - 0.8199815976f,0.7270510733f,0.6296380373f,0.5283430735f,0.4237906989f,0.3166255137f, - 0.2075082270f,0.0971115830f, -}; - -const float rot_vec_ana_im_L40[20] = -{ - -0.0138837862f,-0.1247935572f,-0.2349339344f,-0.3436258658f,-0.4501992295f,-0.5539969652f, - -0.6543791254f,-0.7507268207f,-0.8424460355f,-0.9289712904f,-1.0097691283f,-1.0843414038f, - -1.1522283539f,-1.2130114331f,-1.2663158934f,-1.3118130952f,-1.3492225330f,-1.3783135652f, - -1.3989068360f,-1.4108753809f, -}; - -const float rot_vec_ana_re_L60[30] = -{ - 1.1546758066f,1.1526978375f,1.1475604038f,1.1392775867f,1.1278720890f,1.1133751723f, - 1.0958265716f,1.0752743865f,1.0517749490f,1.0253926695f,0.9961998600f,0.9642765358f, - 0.9297101968f,0.8925955867f,0.8530344341f,0.8111351735f,0.7670126477f,0.7207877935f, - 0.6725873102f,0.6225433117f,0.5707929653f,0.5174781151f,0.4627448933f,0.4067433200f, - 0.3496268915f,0.2915521599f,0.2326783042f,0.1731666934f,0.1131804447f,0.0528839763f, -}; - -const float rot_vec_ana_im_L60[30] = -{ - -0.0075574434f,-0.0679781487f,-0.1282125306f,-0.1880954908f,-0.2474628944f,-0.3061520194f, - -0.3640020030f,-0.4208542824f,-0.4765530295f,-0.5309455779f,-0.5838828413f,-0.6352197224f, - -0.6848155104f,-0.7325342668f,-0.7782451976f,-0.8218230124f,-0.8631482675f,-0.9021076931f, - -0.9385945043f,-0.9725086932f,-1.0037573034f,-1.0322546845f,-1.0579227273f,-1.0806910775f, - -1.1004973285f,-1.1172871929f,-1.1310146507f,-1.1416420760f,-1.1491403397f,-1.1534888896f, -}; -#endif /*! * \brief CLDFB prototype filter @@ -10645,7 +6421,6 @@ const Word16 cldfb_scale_2_5ms[7] = 22588/*88.234489 Q8*/ /* 30 bands */ }; -#ifdef IVAS_FLOAT_FIXED const Word16 cldfb_scale_5_0ms[7] = { 21649/*88.293854 Q8*/, /* 10 bands */ @@ -10656,14 +6431,7 @@ const Word16 cldfb_scale_5_0ms[7] = 22535/*88.028412 Q8*/, /* 60 bands */ 21581/*88.028412 Q8*/ /* 30 bands */ }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L10[5] = -{ - 0.1117172025f,0.1048929802f,0.0878011021f,0.0621146404f,0.0303479649f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L10_fx[5] = @@ -10671,12 +6439,6 @@ const Word32 rot_vec_syn_re_L10_fx[5] = 239910864 ,225255952 ,188551424 ,133390176 ,65171760 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L10[5] = -{ - -0.0043893808f,-0.0386970634f,-0.0692168078f,-0.0929611287f,-0.1076057667f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L10_fx[5] = @@ -10684,13 +6446,6 @@ const Word32 rot_vec_syn_im_L10_fx[5] = -9426123 ,-83101312 ,-148641968 ,-199632496 ,-231081632 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L16[8] = -{ - 0.1117697258f,0.1090868144f,0.1022117580f,0.0914087610f,0.0770929766f,0.0598145523f, - 0.0402374883f,0.0191141202f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L16_fx[8] = @@ -10698,13 +6453,6 @@ const Word32 rot_vec_syn_re_L16_fx[8] = 240023664 ,234262144 ,219498080 ,196298816 ,165555904 ,128450776 ,86409352 ,41047260 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L16[8] = -{ - -0.0027437928f,-0.0244962633f,-0.0453073563f,-0.0643773129f,-0.0809732855f,-0.0944575001f, - -0.1043117660f,-0.1101573893f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L16_fx[8] = @@ -10712,13 +6460,6 @@ const Word32 rot_vec_syn_im_L16_fx[8] = -5892250 ,-52605324 ,-97296808 ,-138249232 ,-173888800 ,-202845936 ,-224007808 ,-236561200 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L20[10] = -{ - 0.1117818477f,0.1100622363f,0.1056325273f,0.0986017949f,0.0891431591f,0.0774895228f, - 0.0639278374f,0.0487920364f,0.0324548136f,0.0153184455f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L20_fx[10] = @@ -10726,13 +6467,6 @@ const Word32 rot_vec_syn_re_L20_fx[10] = 240049696 ,236356848 ,226844128 ,211745744 ,191433472 ,166407488 ,137283984 ,104780104 ,69696184 ,32896112 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L20[10] = -{ - -0.0021951135f,-0.0196546216f,-0.0366301676f,-0.0527037574f,-0.0674796057f,-0.0805938822f, - -0.0917236698f,-0.1005949163f,-0.1069891821f,-0.1107490191f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L20_fx[10] = @@ -10740,14 +6474,6 @@ const Word32 rot_vec_syn_im_L20_fx[10] = -4713971 ,-42207980 ,-78662688 ,-113180456 ,-144911344 ,-173074048 ,-196975088 ,-216025936 ,-229757520 ,-237831712 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L30[15] = -{ - 0.1117938204f,0.1110284288f,0.1090465865f,0.1058700070f,0.1015334935f,0.0960845578f, - 0.0895828996f,0.0820997524f,0.0737171032f,0.0645267939f,0.0546295156f,0.0441337048f, - 0.0331543560f,0.0218117611f,0.0102301920f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L30_fx[15] = @@ -10756,14 +6482,6 @@ const Word32 rot_vec_syn_re_L30_fx[15] = 158306272 ,138570240 ,117315992 ,94776408 ,71198440 ,46840400 ,21969170 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L30[15] = -{ - -0.0014634613f,-0.0131410805f,-0.0246747234f,-0.0359380248f,-0.0468075816f,-0.0571643048f, - -0.0668947240f,-0.0758922305f,-0.0840582459f,-0.0913033015f,-0.0975480191f,-0.1027239802f, - -0.1067744758f,-0.1096551279f,-0.1113343755f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L30_fx[15] = @@ -10772,14 +6490,6 @@ const Word32 rot_vec_syn_im_L30_fx[15] = -180513712 ,-196072352 ,-209482768 ,-220598064 ,-229296448 ,-235482592 ,-239088752 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L32[16] = -{ - 0.1117949803f,0.1111221774f,0.1093792072f,0.1065828555f,0.1027600526f,0.0979476142f, - 0.0921918867f,0.0855483010f,0.0780808384f,0.0698614146f,0.0609691872f,0.0514897932f, - 0.0415145243f,0.0311394479f,0.0204644816f,0.0095924311f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L32_fx[16] = @@ -10788,14 +6498,6 @@ const Word32 rot_vec_syn_re_L32_fx[16] = 167677328 ,150026240 ,130930336 ,110573488 ,89151760 ,66871456 ,43947140 ,20599588 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L32[16] = -{ - -0.0013719997f,-0.0123232174f,-0.0231557558f,-0.0337652916f,-0.0440496492f,-0.0539097846f, - -0.0632507393f,-0.0719825548f,-0.0800211389f,-0.0872890758f,-0.0937163711f,-0.0992411265f, - -0.1038101357f,-0.1073793965f,-0.1099145349f,-0.1113911364f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L32_fx[16] = @@ -10804,15 +6506,6 @@ const Word32 rot_vec_syn_im_L32_fx[16] = -171844080 ,-187451856 ,-201254368 ,-213118704 ,-222930576 ,-230595504 ,-236039664 ,-239210640 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L40[20] = -{ - 0.1117980110f,0.1113672575f,0.1102498879f,0.1084527911f,0.1059870468f,0.1028678571f, - 0.0991144528f,0.0947499750f,0.0898013320f,0.0842990340f,0.0782770044f,0.0717723711f, - 0.0648252372f,0.0574784342f,0.0497772575f,0.0417691875f,0.0335035965f,0.0250314447f, - 0.0164049658f,0.0076773447f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L40_fx[20] = @@ -10822,15 +6515,6 @@ const Word32 rot_vec_syn_re_L40_fx[20] = 71948424 ,53754620 ,35229396 ,16486972 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L40[20] = -{ - -0.0010976097f,-0.0098657969f,-0.0185731583f,-0.0271660100f,-0.0355913742f,-0.0437973057f, - -0.0517332122f,-0.0593501664f,-0.0666012069f,-0.0734416290f,-0.0798292589f,-0.0857247149f, - -0.0910916496f,-0.0958969739f,-0.1001110615f,-0.1037079311f,-0.1066654069f,-0.1089652549f, - -0.1105932959f,-0.1115394925f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L40_fx[20] = @@ -10840,16 +6524,6 @@ const Word32 rot_vec_syn_im_L40_fx[20] = -229062224 ,-234001104 ,-237497296 ,-239529232 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_re_L60[30] = -{ - 0.1118010042f,0.1116094882f,0.1111120583f,0.1103100780f,0.1092057454f,0.1078020875f, - 0.1061029516f,0.1041129948f,0.1018376715f,0.0992832183f,0.0964566367f,0.0933656741f, - 0.0900188027f,0.0864251961f,0.0825947039f,0.0785378255f,0.0742656803f,0.0697899780f, - 0.0651229863f,0.0602774970f,0.0552667912f,0.0501046030f,0.0448050816f,0.0393827526f, - 0.0338524782f,0.0282294165f,0.0225289799f,0.0167667930f,0.0109586494f,0.0051204690f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_re_L60_fx[30] = @@ -10860,16 +6534,6 @@ const Word32 rot_vec_syn_re_L60_fx[30] = 36006412 ,23533520 ,10996123 , }; -#ifndef IVAS_FLOAT_FIXED -const float rot_vec_syn_im_L60[30] = -{ - -0.0007317463f,-0.0065819559f,-0.0124141249f,-0.0182122676f,-0.0239604917f,-0.0296430418f, - -0.0352443424f,-0.0407490407f,-0.0461420487f,-0.0514085845f,-0.0565342130f,-0.0615048852f, - -0.0663069767f,-0.0709273254f,-0.0753532672f,-0.0795726710f,-0.0835739716f,-0.0873462018f, - -0.0908790221f,-0.0941627493f,-0.0971883830f,-0.0999476301f,-0.1024329276f,-0.1046374636f, - -0.1065551956f,-0.1081808673f,-0.1095100227f,-0.1105390187f,-0.1112650350f,-0.1116860815f, -}; -#endif /*Q31*/ const Word32 rot_vec_syn_im_L60_fx[30] = @@ -10880,13 +6544,6 @@ const Word32 rot_vec_syn_im_L60_fx[30] = -232316640 ,-235170976 ,-237380736 ,-238939840 ,-239844032 , }; -#ifndef IVAS_FLOAT_FIXED -const float bpf_weights_16[CLDFB_NO_COL_MAX] = -{ - 1.000040f, 0.702561f, 0.208838f, 0.001553f, 0.001777f, 0.001370f, 0.000926f, 0.000554f, - 0.000270f, 0.000080f, 0.000030f, 0.000082f, 0.000081f, 0.000052f, 0.000017f, 0.000016f -}; -#endif const Word16 bpf_weights_16_Fx[16] = { @@ -10915,331 +6572,6 @@ const Word32 bpf_weights_16_ivas_fx_32[16] = /*-------------------------------------------------------------------* * LP CNG excitation details code book *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float CNG_details_codebook[64][NUM_ENV_CNG]= -{ - { - 6.924306f,8.544082f,9.583108f,8.550549f,7.972679f,7.363361f,8.439027f,7.487016f, - 9.149983f,8.352748f,8.823824f,9.544188f,8.314853f,7.809112f,7.218567f,8.612295f, - 7.780142f,7.232745f,6.965988f,7.568601f - }, - { - 9.374340f,7.795641f,7.379285f,8.396346f,9.895033f,10.221931f,10.015446f,10.087706f, - 10.536375f,10.581183f,10.733459f,10.821303f,10.822197f,10.777159f,10.746262f,10.936824f, - 10.820635f,10.881506f,9.992537f,8.925898f - }, - { - 8.260058f,8.387338f,7.832300f,9.092162f,8.387571f,7.401807f,7.888559f,7.678440f, - 8.136854f,8.515383f,8.772667f,9.228788f,8.836490f,9.518608f,8.908790f,9.499302f, - 9.932305f,10.237994f,10.133189f,8.193151f - }, - { - 10.124639f,10.788106f,10.767182f,10.692019f,10.830482f,9.359397f,10.431694f,11.161179f, - 10.356518f,10.541230f,8.185465f,8.116880f,11.338371f,10.284152f,10.511218f,10.880645f, - 10.220743f,11.179196f,11.066867f,10.445066f - }, - { - 9.726912f,9.842380f,10.314793f,10.252558f,10.717097f,10.746290f,9.953682f,10.412869f, - 9.836176f,8.674436f,7.351096f,7.309156f,7.246638f,6.955070f,7.846981f,9.111964f, - 9.612611f,8.519944f,9.454450f,9.249232f - }, - { - 10.298511f,10.439103f,10.451839f,9.763371f,10.337607f,10.939195f,10.938910f,10.824776f, - 10.976114f,10.974276f,10.754051f,10.581675f,10.222703f,9.126027f,8.198234f,7.695039f, - 6.968823f,7.457246f,9.904172f,9.612813f - }, - { - 9.908430f,10.124971f,10.253873f,8.625096f,8.128853f,8.701863f,10.346726f,10.291558f, - 8.935132f,9.638033f,10.793781f,10.670537f,10.681151f,10.410478f,10.512748f,10.861156f, - 10.653567f,10.911621f,10.629312f,9.736268f - }, - { - 11.810060f,11.612185f,11.468822f,11.083865f,11.406177f,11.832067f,11.661546f,11.277926f, - 7.555347f,8.622866f,12.176802f,10.751250f,10.721958f,9.523929f,9.626828f,11.701570f, - 11.848139f,10.849975f,11.640839f,11.392167f - }, - { - 8.572747f,8.869074f,8.680323f,9.760900f,10.671435f,9.673125f,9.516179f,10.428748f, - 10.353197f,10.692994f,11.081258f,10.146167f,10.790188f,10.432859f,9.273769f,7.979839f, - 8.209611f,9.644866f,8.476103f,10.683167f - }, - { - 8.595222f,7.301031f,8.322734f,11.874195f,11.543133f,10.814659f,12.073861f,11.818481f, - 11.602201f,12.035087f,11.952577f,12.363761f,12.167592f,12.254158f,12.108662f,12.373547f, - 11.860260f,9.014181f,10.036099f,8.638621f - }, - { - 10.275646f,10.526311f,10.252750f,10.178793f,10.466885f,9.088381f,9.273152f,8.119694f, - 7.295121f,7.350810f,8.158489f,9.209213f,9.370357f,9.310070f,9.168746f,9.856857f, - 10.187559f,10.613888f,10.080095f,10.451872f - }, - { - 12.318529f,11.945473f,12.303066f,12.451133f,12.272326f,12.478561f,12.303981f,12.279855f, - 12.189694f,10.818603f,10.013278f,8.600300f,7.832378f,8.014066f,11.346451f,11.673646f, - 10.466306f,10.728513f,11.475281f,12.085626f - }, - { - 10.014422f,10.218554f,10.442979f,10.508470f,10.393559f,10.661362f,10.757983f,10.689740f, - 10.897243f,10.382886f,10.379339f,9.271018f,8.495484f,7.720114f,7.161139f,8.396199f, - 9.721141f,10.159747f,9.918998f,9.919149f - }, - { - 11.034192f,11.766760f,11.903868f,11.195253f,11.683506f,11.900399f,12.318353f,12.368064f, - 12.271189f,12.306809f,12.485785f,12.136335f,12.220796f,11.960956f,11.879458f,11.099092f, - 11.004694f,7.854421f,8.103326f,11.485018f - }, - { - 11.692872f,12.115354f,12.250820f,9.919422f,11.204221f,7.870928f,8.415102f,9.997985f, - 11.942008f,12.149603f,10.633919f,11.269428f,12.354749f,12.288899f,12.291698f,12.195188f, - 12.179792f,12.030136f,12.092098f,12.207270f - }, - { - 11.755179f,8.064263f,9.749080f,12.185180f,11.136729f,11.763196f,8.889953f,8.555951f, - 12.034410f,12.245128f,11.697193f,11.559429f,10.780444f,11.789196f,12.130393f,11.689948f, - 11.623942f,11.399507f,11.981954f,10.904933f - }, - { - 7.074471f,7.358261f,8.067513f,8.080610f,8.765159f,10.199254f,10.289200f,9.618623f, - 9.822992f,9.500810f,10.655619f,10.906424f,10.611357f,10.641397f,10.077725f,9.173571f, - 9.274541f,8.160206f,7.797956f,7.321218f - }, - { - 9.641497f,8.341463f,7.913689f,9.615902f,12.212582f,12.373892f,11.788377f,12.044415f, - 11.569188f,12.302634f,12.361569f,12.119579f,12.223657f,12.303328f,12.384604f,12.306796f, - 12.109153f,12.154896f,10.165297f,11.492375f - }, - { - 10.334753f,9.264669f,7.656600f,7.729103f,7.665664f,7.728192f,8.657525f,10.255910f, - 10.287778f,9.540968f,9.808374f,10.307826f,10.623036f,10.579712f,10.909159f,10.597071f, - 10.508566f,10.917792f,10.740663f,10.609496f - }, - { - 12.464439f,12.387059f,12.281745f,12.415715f,12.481938f,12.064619f,12.051270f,10.871007f, - 9.753584f,8.710700f,7.918756f,8.510613f,11.316961f,11.829647f,11.667075f,12.037048f, - 12.184728f,12.269155f,12.388278f,12.256269f - }, - { - 10.985455f,10.863164f,10.984641f,11.150430f,10.892216f,10.949295f,10.885633f,9.861358f, - 9.347205f,7.782274f,7.420996f,7.042737f,7.859407f,9.545682f,10.120652f,10.378402f, - 10.381286f,10.677829f,10.603589f,10.744861f - }, - { - 11.619549f,10.501878f,10.291579f,11.911536f,12.263100f,11.638079f,11.827111f,11.886570f, - 11.885740f,11.982909f,11.279054f,11.820845f,11.897547f,11.508306f,10.922131f,7.355962f, - 9.090330f,12.035433f,11.309077f,11.814055f - }, - { - 12.109969f,11.648486f,8.360036f,10.628968f,8.450899f,8.016151f,10.885192f,11.289871f, - 11.616718f,11.618735f,12.016033f,11.572757f,11.580486f,11.526383f,12.019007f,12.063487f, - 12.178980f,11.612581f,11.149741f,11.315678f - }, - { - 11.982289f,12.039945f,10.895576f,11.808078f,11.972691f,11.752888f,11.100145f,7.459962f, - 9.401170f,12.240148f,11.661579f,11.968470f,10.817088f,11.060538f,12.236608f,12.217974f, - 11.888335f,12.158744f,12.290771f,12.263520f - }, - { - 7.551557f,9.193432f,10.939713f,10.390559f,10.388751f,10.007786f,10.151727f,11.200849f, - 10.927567f,11.044189f,10.805322f,10.912845f,10.931647f,10.806228f,10.434938f,10.151430f, - 9.517872f,9.532900f,8.436217f,7.561033f - }, - { - 7.914798f,9.662442f,12.315506f,11.969525f,11.779161f,10.819254f,11.074059f,12.259423f, - 12.310757f,12.028122f,12.393316f,12.259255f,12.478424f,12.251179f,11.982938f,12.119265f, - 12.321500f,11.854281f,11.885189f,7.733390f - }, - { - 11.074573f,11.119295f,11.026623f,10.587306f,10.326489f,9.440902f,7.861374f,7.502906f, - 10.206084f,10.379787f,10.375632f,9.986627f,9.698876f,10.544230f,10.857472f,10.772952f, - 11.004036f,10.641294f,11.111090f,11.084974f - }, - { - 12.312282f,11.569094f,12.027453f,11.997540f,12.050622f,12.124397f,11.441438f,11.697535f, - 11.553439f,11.941341f,11.153276f,7.695126f,8.494260f,12.226931f,11.163250f,11.056936f, - 11.197067f,8.736544f,11.552220f,11.995921f - }, - { - 11.841222f,12.040383f,12.323356f,12.164479f,12.146215f,12.485503f,12.354469f,12.261094f, - 12.176959f,12.164176f,11.750998f,10.552405f,11.221596f,7.971972f,7.827245f,9.382548f, - 11.354092f,11.724841f,11.744237f,11.836000f - }, - { - 11.863342f,11.946292f,10.565049f,10.276701f,12.088562f,11.987997f,11.516201f,11.701505f, - 12.013391f,12.254663f,12.160517f,11.530292f,11.789889f,12.011831f,12.307916f,11.817711f, - 7.388736f,8.277118f,12.146955f,11.330376f - }, - { - 10.445749f,10.383992f,11.260086f,10.207924f,7.801878f,12.093586f,12.186577f,12.208809f, - 11.981275f,8.760727f,10.776209f,11.675901f,11.273578f,12.169944f,11.829489f,11.361869f, - 11.931891f,11.640718f,12.033961f,11.504183f - }, - { - 11.418176f,11.996329f,11.634505f,12.108740f,12.232028f,12.223016f,11.168437f,11.585357f, - 12.287769f,10.519855f,11.961341f,12.135221f,11.941004f,11.400546f,12.083041f,12.021441f, - 12.087834f,12.196712f,12.153121f,11.933741f - }, - { - 8.696248f,7.886807f,8.518339f,9.431623f,10.314435f,10.492967f,9.433606f,9.312992f, - 9.056099f,9.558634f,9.174564f,8.692657f,8.529263f,9.327991f,8.283659f,7.715106f, - 6.828506f,7.494133f,8.531253f,8.664100f - }, - { - 8.749990f,9.185427f,7.974370f,7.730459f,9.471635f,11.246136f,11.225875f,11.585999f, - 11.810496f,11.799830f,11.983171f,12.095557f,12.123705f,12.150494f,12.057273f,12.058468f, - 12.128398f,12.119547f,11.788305f,9.252466f - }, - { - 10.620537f,10.064924f,9.681692f,9.556549f,8.067345f,7.460412f,7.355683f,7.793144f, - 7.842898f,9.346528f,10.380497f,9.183150f,10.255505f,10.654870f,10.772358f,10.480097f, - 10.444176f,10.506150f,10.650716f,10.807790f - }, - { - 11.832230f,12.163531f,12.210456f,12.488221f,12.106194f,11.716965f,12.486103f,11.839725f, - 12.333147f,12.101274f,7.643279f,9.040410f,12.480962f,11.550027f,12.089822f,11.299880f, - 10.714154f,12.309387f,12.290308f,12.153176f - }, - { - 11.011459f,10.708299f,10.217109f,10.618895f,10.503453f,10.618390f,10.261137f,9.054105f, - 8.967848f,9.665904f,9.986521f,8.089101f,7.524849f,8.521540f,10.395278f,9.179631f, - 8.431019f,9.362102f,9.471244f,10.168259f - }, - { - 11.385670f,11.988930f,11.979943f,12.082343f,12.240467f,12.163774f,12.389517f,12.076717f, - 12.254186f,12.165658f,11.824725f,11.992508f,10.716744f,10.217215f,10.610125f,8.819359f, - 7.553169f,8.576138f,7.663194f,8.161689f - }, - { - 11.335433f,10.824145f,11.164507f,9.187079f,8.159495f,9.823243f,11.259155f,10.102992f, - 10.894949f,10.692467f,9.597807f,11.322961f,11.068228f,10.523948f,11.179681f,11.389847f, - 11.204894f,11.328845f,10.761085f,11.533332f - }, - { - 12.452473f,12.226961f,12.414132f,12.453005f,12.224496f,11.829764f,9.932276f,9.747059f, - 7.944996f,8.074952f,10.982581f,11.711254f,11.656355f,11.826878f,12.063810f,12.048336f, - 12.100821f,12.339723f,12.171370f,12.491159f - }, - { - 8.693851f,9.237082f,10.193584f,10.816728f,11.382530f,11.124274f,10.905251f,10.747824f, - 11.006325f,11.224193f,11.377479f,11.195903f,11.132830f,10.824033f,11.188758f,8.716391f, - 7.654446f,8.441257f,9.691014f,10.598401f - }, - { - 8.319717f,9.639095f,12.133827f,12.102556f,11.919735f,12.334815f,11.993119f,12.259864f, - 12.158967f,12.356464f,12.374672f,12.379640f,12.396713f,12.146963f,12.203291f,11.311678f, - 8.605060f,10.391322f,8.431939f,7.948593f - }, - { - 11.088415f,10.884553f,11.032227f,11.202397f,10.523194f,10.606202f,9.688022f,9.082882f, - 8.526981f,7.401042f,8.779226f,10.680804f,10.619134f,10.539470f,10.309608f,10.253415f, - 10.965061f,10.624226f,10.946682f,11.063556f - }, - { - 12.049884f,12.395158f,12.315166f,12.298508f,12.409452f,12.353070f,12.369121f,12.232027f, - 12.363715f,12.371237f,11.460312f,12.028971f,8.312684f,8.200596f,10.810326f,11.885057f, - 12.140730f,11.769361f,11.470847f,11.374696f - }, - { - 11.318600f,10.855831f,10.592196f,10.190356f,10.852498f,11.480312f,10.896217f,11.130247f, - 11.148643f,11.272378f,10.871895f,11.095495f,8.893303f,9.083083f,8.899607f,8.150163f, - 10.035096f,11.004933f,11.685496f,11.349737f - }, - { - 12.437282f,11.779876f,12.273005f,12.224300f,11.436580f,12.714269f,12.546281f,12.410135f, - 12.488817f,12.347595f,12.661417f,12.587544f,12.405058f,12.452996f,11.808998f,11.644467f, - 11.697278f,7.908151f,11.580981f,12.178329f - }, - { - 12.383582f,11.978909f,12.263449f,12.181010f,11.308676f,10.129762f,7.630591f,11.672964f, - 12.255041f,12.043112f,12.393015f,11.554902f,11.858689f,12.585340f,12.405621f,12.438987f, - 12.422440f,12.429326f,12.518377f,12.596020f - }, - { - 12.294228f,7.930717f,10.000073f,12.115003f,11.276157f,12.374399f,12.087711f,11.020492f, - 12.205840f,12.519583f,12.094537f,12.497026f,12.274739f,12.595242f,12.627252f,12.238583f, - 12.414072f,12.458577f,12.250254f,12.212063f - }, - { - 10.220644f,10.133038f,9.384470f,9.330061f,9.287414f,10.419335f,10.086744f,10.347366f, - 9.606766f,9.729086f,10.175982f,10.490002f,10.450778f,10.530566f,10.662402f,10.198713f, - 9.756838f,7.568992f,7.395587f,10.386068f - }, - { - 12.338935f,11.958341f,7.484207f,8.228665f,11.650372f,11.382147f,12.027068f,11.762714f, - 11.266207f,12.095256f,12.402075f,12.538692f,12.335326f,12.212730f,12.551470f,12.419568f, - 11.941353f,12.565509f,12.164819f,12.121121f - }, - { - 11.530771f,10.926392f,10.037753f,7.947472f,8.046108f,7.827244f,7.274969f,9.599776f, - 10.971369f,9.563985f,10.664629f,11.255960f,10.737041f,11.198854f,11.004945f,11.547729f, - 11.150601f,11.446258f,11.272099f,11.224279f - }, - { - 12.154252f,12.426224f,12.362570f,12.276526f,11.848105f,12.233492f,12.238678f,11.606319f, - 11.630966f,8.226843f,8.663989f,12.324718f,11.910058f,11.977910f,11.282999f,11.276901f, - 12.135061f,12.316558f,12.126414f,12.222776f - }, - { - 10.840468f,10.882261f,10.935246f,10.880699f,11.083740f,11.099067f,10.870871f,10.768135f, - 10.532293f,10.338410f,9.085450f,8.402101f,7.755022f,9.959888f,10.061506f,10.644034f, - 10.614702f,10.481884f,10.760615f,11.004514f - }, - { - 12.122748f,12.306721f,11.587852f,12.430750f,12.175253f,11.815797f,12.308073f,12.320755f, - 12.218995f,12.463879f,12.424328f,12.559034f,12.042230f,11.765315f,8.922847f,9.539627f, - 7.874360f,8.521064f,9.272277f,12.165272f - }, - { - 12.485865f,11.205798f,11.664264f,10.653128f,7.610178f,8.947474f,11.966330f,12.100983f, - 12.107791f,11.909583f,11.112039f,12.535769f,12.489249f,12.444782f,12.346417f,12.296227f, - 12.534035f,12.334972f,12.077379f,12.275601f - }, - { - 12.425206f,12.450086f,12.341137f,12.568719f,12.320243f,12.361140f,12.099853f,11.035367f, - 8.319082f,12.032015f,12.280725f,11.606254f,12.321961f,11.066000f,11.799191f,12.266534f, - 12.556672f,12.545979f,12.602019f,12.030170f - }, - { - 8.871724f,11.287228f,11.532060f,10.621922f,11.143099f,10.988887f,10.820709f,11.695601f, - 10.989671f,11.008445f,11.567303f,11.250048f,11.122625f,9.865336f,9.707122f,11.365924f, - 11.399251f,11.287416f,8.975295f,9.569743f - }, - { - 9.780970f,11.908114f,11.473997f,12.024678f,11.860840f,11.723680f,12.367899f,12.108915f, - 12.340000f,12.381660f,12.315555f,12.282724f,12.359691f,11.991398f,12.220946f,12.155458f, - 12.413619f,11.642963f,7.867479f,8.503173f - }, - { - 12.100057f,12.246774f,12.168076f,11.771790f,10.224229f,8.752139f,8.276130f,8.317601f, - 8.677964f,10.925248f,11.599258f,10.861567f,11.187905f,11.979478f,12.035626f,12.058556f, - 12.150581f,12.192816f,12.171208f,12.225122f - }, - { - 12.205771f,12.205347f,12.351176f,12.237871f,12.382323f,12.461397f,12.301606f,12.369697f, - 11.959662f,11.558475f,10.953750f,8.388442f,8.819866f,12.077829f,11.983337f,11.818386f, - 12.286803f,12.458479f,12.329653f,12.507854f - }, - { - 11.530513f,11.199886f,12.487312f,12.406390f,12.054689f,12.255518f,12.097314f,12.346512f, - 12.310920f,11.682766f,12.332119f,12.015944f,11.992967f,11.917038f,7.877818f,9.167294f, - 12.226696f,11.735081f,12.256387f,11.444395f - }, - { - 12.132508f,12.328980f,11.918468f,12.068428f,12.493188f,12.275755f,12.524507f,12.294735f, - 12.582710f,12.488275f,12.132201f,12.076183f,12.373331f,11.888222f,11.716764f,10.961454f, - 8.318602f,11.632863f,12.609443f,11.484080f - }, - { - 11.948422f,12.164044f,11.930634f,7.560744f,9.486037f,12.354504f,11.826571f,11.874330f, - 10.939306f,10.727631f,12.333044f,12.133337f,12.172671f,12.228312f,12.004416f,12.354714f, - 12.154241f,11.830939f,12.245022f,12.033812f - }, - { - 12.494522f,12.883386f,12.105121f,12.216132f,12.821167f,10.613010f,12.572326f,12.881424f, - 11.754890f,12.876678f,12.439420f,12.258423f,12.945374f,12.765532f,12.874741f,12.539070f, - 12.711823f,12.611643f,11.904738f,12.176199f - } -}; -#endif const Word16 CNG_details_codebook_fx[64][NUM_ENV_CNG] = /* Q6 */ { @@ -11313,17 +6645,8 @@ const Word16 CNG_details_codebook_fx[64][NUM_ENV_CNG] = /* Q6 */ *-------------------------------------------------------------------*/ const Word16 d_array[SIZE_SCALE_TABLE_CN] = { 1, 2, 5, 8, 10, 15, 20, 30, 40, 60, 80, 120, 140, 160, 180, 220, 260, 300 }; -#ifndef IVAS_FLOAT_FIXED -const float m_array_flt[SIZE_SCALE_TABLE_CN] = { 0.000f, 0.260f, 0.480f, 0.580f, 0.610f, 0.668f, 0.705f, 0.762f, 0.800f, 0.841f, 0.865f, 0.890f, 0.900f, 0.910f, 0.920f, 0.930f, 0.935f, 0.940f }; -#endif const Word16 m_array[SIZE_SCALE_TABLE_CN] = { 0/*0.000f Q15*/, 8520/*0.260f Q15*/, 15729/*0.480f Q15*/, 19005/*0.580f Q15*/, 19988/*0.610f Q15*/, 21889/*0.668f Q15*/, 23101/*0.705f Q15*/, 24969/*0.762f Q15*/, 26214/*0.800f Q15*/, 27558/*0.841f Q15*/, 28344/*0.865f Q15*/, 29164/*0.890f Q15*/, 29491/*0.900f Q15*/, 29819/*0.910f Q15*/, 30147/*0.920f Q15*/, 30474/*0.930f Q15*/, 30638/*0.935f Q15*/, 30802/*0.940f Q15*/ }; -#ifndef IVAS_FLOAT_FIXED -const float msQeqInvAv_thresh_flt[3] = { 0.01f, 0.03f, 0.05f }; -#endif const Word16 msQeqInvAv_thresh[3] = { 328/*0.01f Q15*/, 983/*0.03f Q15*/, 1638/*0.05f Q15*/ }; -#ifndef IVAS_FLOAT_FIXED -const float msNoiseSlopeMax_flt[4] = { 2.f, 1.6f, 1.3f, 1.1f }; -#endif const Word16 msNoiseSlopeMax[4] = { 32767/*2.f Q14*/, 26214/*1.6f Q14*/, 21299/*1.3f Q14*/, 18022/*1.1f Q14*/ }; @@ -11416,14 +6739,6 @@ const SCALE_SETUP scaleTable_cn_dirac[15] = { 2, 24400, 32000, /*-1.5f,*/ 6759/*0.4125375748 Q14*/ /*-1.5f*/, 6759 }, { 2, 32000,512001, /* 0.0f,*/ 0/*0.0000000000 Q14*/ /* 0.0f*/, 0 } }; -#ifndef IVAS_FLOAT_FIXED -const float scaleTable_cn_only_amrwbio_flt[SIZE_SCALE_TABLE_CN_AMRWB][2] = -{ - { ACELP_6k60, -4.0f }, - { ACELP_8k85, -3.0f }, - { ACELP_12k65, -2.0f } -}; -#endif const Word16 scaleTable_cn_only_amrwbio[3][2] = { { ACELP_6k60, 24771/*1.5118864315 Q14*/ }, @@ -11482,26 +6797,16 @@ const Word16 /* segment inner DCT trunc_len */ cdk1_ivas_trunc_dct_cols_per_segm /* to get back to FDCNG VQ domain for segment S use : idct as follows */ /* cdk1r_vec[col, row] = cdk1r_tr_midQ_truncQ(col 1:24 ) + invScaleFQ * idctMat( cdk1_ivas_dct_sS_W8[1:col]<fftlen/2+1; j++) hs->fftSineTab[j] = (float)sin(2.0*EVS_PI*j/hs->fftlen); */ -#ifndef IVAS_FLOAT_FIXED -const float fftSineTab640[321] = -{ - 0.0000000000000000000000000f, 0.0098173199221491814000000f, 0.0196336936205625530000000f, 0.0294481739401817320000000f, 0.0392598174512386320000000f, 0.0490676760673522950000000f, 0.0588708035647869110000000f, 0.0686682611703872680000000f, 0.0784590989351272580000000f, 0.0882423743605613710000000f, - 0.0980171412229537960000000f, 0.1077824681997299200000000f, 0.1175374016165733300000000f, 0.1272810101509094200000000f, 0.1370123475790023800000000f, 0.1467304825782775900000000f, 0.1564344763755798300000000f, 0.1661233752965927100000000f, 0.1757962852716445900000000f, 0.1854522377252578700000000f, - 0.1950903236865997300000000f, 0.2047096043825149500000000f, 0.2143091559410095200000000f, 0.2238880544900894200000000f, 0.2334453761577606200000000f, 0.2429801821708679200000000f, 0.2524915933609008800000000f, 0.2619786560535430900000000f, 0.2714404463768005400000000f, 0.2808761000633239700000000f, - 0.2902846932411193800000000f, 0.2996652722358703600000000f, 0.3090170025825500500000000f, 0.3183389306068420400000000f, 0.3276301920413970900000000f, 0.3368898630142211900000000f, 0.3461170792579650900000000f, 0.3553109169006347700000000f, 0.3644705116748809800000000f, 0.3735949695110321000000000f, - 0.3826834559440612800000000f, 0.3917350172996521000000000f, 0.4007488489151001000000000f, 0.4097240269184112500000000f, 0.4186597466468811000000000f, 0.4275551140308380100000000f, 0.4364092648029327400000000f, 0.4452213346958160400000000f, 0.4539905190467834500000000f, 0.4627159237861633300000000f, - 0.4713967442512512200000000f, 0.4800321459770202600000000f, 0.4886212646961212200000000f, 0.4971632659435272200000000f, 0.5056573748588562000000000f, 0.5141027569770813000000000f, 0.5224985480308532700000000f, 0.5308440327644348100000000f, 0.5391383171081543000000000f, 0.5473806858062744100000000f, - 0.5555702447891235400000000f, 0.5637062788009643600000000f, 0.5717879533767700200000000f, 0.5798145532608032200000000f, 0.5877852439880371100000000f, 0.5956993103027343800000000f, 0.6035559773445129400000000f, 0.6113544106483459500000000f, 0.6190939545631408700000000f, 0.6267738342285156300000000f, - 0.6343932747840881300000000f, 0.6419516205787658700000000f, 0.6494480371475219700000000f, 0.6568819284439086900000000f, 0.6642524600028991700000000f, 0.6715589761734008800000000f, 0.6788007616996765100000000f, 0.6859771013259887700000000f, 0.6930873990058898900000000f, 0.7001308202743530300000000f, - 0.7071067690849304200000000f, 0.7140145897865295400000000f, 0.7208536267280578600000000f, 0.7276231050491333000000000f, 0.7343225479125976600000000f, 0.7409511208534240700000000f, 0.7475083470344543500000000f, 0.7539935111999511700000000f, 0.7604059576988220200000000f, 0.7667451500892639200000000f, - 0.7730104923248291000000000f, 0.7792012691497802700000000f, 0.7853169441223144500000000f, 0.7913569211959838900000000f, 0.7973206639289856000000000f, 0.8032075762748718300000000f, 0.8090170025825500500000000f, 0.8147485256195068400000000f, 0.8204014301300048800000000f, 0.8259753584861755400000000f, - 0.8314696550369262700000000f, 0.8368837833404541000000000f, 0.8422172665596008300000000f, 0.8474695682525634800000000f, 0.8526401519775390600000000f, 0.8577286005020141600000000f, 0.8627343773841857900000000f, 0.8676570057868957500000000f, 0.8724960088729858400000000f, 0.8772509098052978500000000f, - 0.8819212913513183600000000f, 0.8865066170692443800000000f, 0.8910065293312072800000000f, 0.8954205513000488300000000f, 0.8997483253479003900000000f, 0.9039893150329589800000000f, 0.9081431627273559600000000f, 0.9122095108032226600000000f, 0.9161879420280456500000000f, 0.9200780987739563000000000f, - 0.9238795638084411600000000f, 0.9275919198989868200000000f, 0.9312149286270141600000000f, 0.9347481727600097700000000f, 0.9381913542747497600000000f, 0.9415440559387207000000000f, 0.9448060393333435100000000f, 0.9479769468307495100000000f, 0.9510565400123596200000000f, 0.9540444016456604000000000f, - 0.9569403529167175300000000f, 0.9597440361976623500000000f, 0.9624552726745605500000000f, 0.9650737047195434600000000f, 0.9675990939140319800000000f, 0.9700312614440918000000000f, 0.9723699092864990200000000f, 0.9746148586273193400000000f, 0.9767658710479736300000000f, 0.9788227677345275900000000f, - 0.9807853102684021000000000f, 0.9826532602310180700000000f, 0.9844265580177307100000000f, 0.9861049652099609400000000f, 0.9876883625984191900000000f, 0.9891765117645263700000000f, 0.9905693531036377000000000f, 0.9918667078018188500000000f, 0.9930684566497802700000000f, 0.9941744804382324200000000f, - 0.9951847195625305200000000f, 0.9960990548133850100000000f, 0.9969173073768615700000000f, 0.9976395368576049800000000f, 0.9982656240463256800000000f, 0.9987954497337341300000000f, 0.9992290139198303200000000f, 0.9995663166046142600000000f, 0.9998072385787963900000000f, 0.9999517798423767100000000f, - 1.0000000000000000000000000f, 0.9999517798423767100000000f, 0.9998072385787963900000000f, 0.9995663166046142600000000f, 0.9992290139198303200000000f, 0.9987954497337341300000000f, 0.9982656240463256800000000f, 0.9976395368576049800000000f, 0.9969173073768615700000000f, 0.9960990548133850100000000f, - 0.9951847195625305200000000f, 0.9941744804382324200000000f, 0.9930684566497802700000000f, 0.9918667078018188500000000f, 0.9905693531036377000000000f, 0.9891765117645263700000000f, 0.9876883625984191900000000f, 0.9861049652099609400000000f, 0.9844265580177307100000000f, 0.9826532602310180700000000f, - 0.9807852506637573200000000f, 0.9788227677345275900000000f, 0.9767658710479736300000000f, 0.9746148586273193400000000f, 0.9723699092864990200000000f, 0.9700312614440918000000000f, 0.9675990939140319800000000f, 0.9650736451148986800000000f, 0.9624552130699157700000000f, 0.9597440361976623500000000f, - 0.9569402933120727500000000f, 0.9540444016456604000000000f, 0.9510564804077148400000000f, 0.9479769468307495100000000f, 0.9448060393333435100000000f, 0.9415440559387207000000000f, 0.9381912946701049800000000f, 0.9347481727600097700000000f, 0.9312149286270141600000000f, 0.9275919198989868200000000f, - 0.9238795042037963900000000f, 0.9200780391693115200000000f, 0.9161879420280456500000000f, 0.9122095108032226600000000f, 0.9081431627273559600000000f, 0.9039892554283142100000000f, 0.8997482657432556200000000f, 0.8954205513000488300000000f, 0.8910064697265625000000000f, 0.8865066170692443800000000f, - 0.8819212317466735800000000f, 0.8772509098052978500000000f, 0.8724959492683410600000000f, 0.8676570057868957500000000f, 0.8627343773841857900000000f, 0.8577286005020141600000000f, 0.8526401519775390600000000f, 0.8474695086479187000000000f, 0.8422172069549560500000000f, 0.8368837237358093300000000f, - 0.8314695954322814900000000f, 0.8259752988815307600000000f, 0.8204014301300048800000000f, 0.8147484660148620600000000f, 0.8090169429779052700000000f, 0.8032075166702270500000000f, 0.7973206043243408200000000f, 0.7913568615913391100000000f, 0.7853168845176696800000000f, 0.7792012095451355000000000f, - 0.7730104327201843300000000f, 0.7667450904846191400000000f, 0.7604058980941772500000000f, 0.7539934515953064000000000f, 0.7475082874298095700000000f, 0.7409510612487793000000000f, 0.7343224883079528800000000f, 0.7276230454444885300000000f, 0.7208535671234130900000000f, 0.7140145301818847700000000f, - 0.7071067094802856400000000f, 0.7001307606697082500000000f, 0.6930873394012451200000000f, 0.6859770417213439900000000f, 0.6788007020950317400000000f, 0.6715589165687561000000000f, 0.6642524003982543900000000f, 0.6568818688392639200000000f, 0.6494479775428772000000000f, 0.6419515609741210900000000f, - 0.6343932151794433600000000f, 0.6267737746238708500000000f, 0.6190938949584960900000000f, 0.6113543510437011700000000f, 0.6035558581352233900000000f, 0.5956992506980896000000000f, 0.5877851843833923300000000f, 0.5798144936561584500000000f, 0.5717878937721252400000000f, 0.5637062191963195800000000f, - 0.5555701851844787600000000f, 0.5473806262016296400000000f, 0.5391382575035095200000000f, 0.5308439731597900400000000f, 0.5224984884262085000000000f, 0.5141026973724365200000000f, 0.5056573152542114300000000f, 0.4971632063388824500000000f, 0.4886211752891540500000000f, 0.4800320565700531000000000f, - 0.4713966846466064500000000f, 0.4627158641815185500000000f, 0.4539904296398162800000000f, 0.4452212452888488800000000f, 0.4364091753959655800000000f, 0.4275550246238708500000000f, 0.4186596572399139400000000f, 0.4097239673137664800000000f, 0.4007487595081329300000000f, 0.3917349278926849400000000f, - 0.3826833665370941200000000f, 0.3735949099063873300000000f, 0.3644704222679138200000000f, 0.3553108274936676000000000f, 0.3461169898509979200000000f, 0.3368897736072540300000000f, 0.3276301026344299300000000f, 0.3183388411998748800000000f, 0.3090169131755828900000000f, 0.2996652126312255900000000f, - 0.2902846038341522200000000f, 0.2808760106563568100000000f, 0.2714403867721557600000000f, 0.2619785666465759300000000f, 0.2524915039539337200000000f, 0.2429801076650619500000000f, 0.2334452867507934600000000f, 0.2238879650831222500000000f, 0.2143090665340423600000000f, 0.2047095298767089800000000f, - 0.1950902342796325700000000f, 0.1854521632194519000000000f, 0.1757961958646774300000000f, 0.1661233007907867400000000f, 0.1564343869686126700000000f, 0.1467303931713104200000000f, 0.1370122581720352200000000f, 0.1272809207439422600000000f, 0.1175373122096061700000000f, 0.1077823787927627600000000f, - 0.0980170592665672300000000f, 0.0882422849535942080000000f, 0.0784590095281600950000000f, 0.0686681717634201050000000f, 0.0588707178831100460000000f, 0.0490675866603851320000000f, 0.0392597280442714690000000f, 0.0294480863958597180000000f, 0.0196336060762405400000000f, 0.0098172323778271675000000f, - -0.0000000874227765734758580f -}; - -/* Analysis windows for overlap-add */ -/* ener = 0.f; - for (j=0; jfftlen; j++) - { - hs->olapWinAna[j] = (float)sin(EVS_PI*((float)j+0.5f)/(float)(hs->fftlen)); - ener += hs->olapWinAna[j]*hs->olapWinAna[j]; - } - ener = (float)sqrt( ener / (float)hs->fftlen ); - for (j=0; jfftlen; j++) - { - hs->olapWinAna[j] /= ener; - } */ -const float olapWinAna512[512] = -{ - 0.0043387459591031075000000f, 0.0130160758271813390000000f, 0.0216929148882627490000000f, 0.0303689353168010710000000f, 0.0390438176691532140000000f, 0.0477172248065471650000000f, 0.0563888400793075560000000f, 0.0650583282113075260000000f, 0.0737253651022911070000000f, 0.0823896303772926330000000f, - 0.0910507962107658390000000f, 0.0997085273265838620000000f, 0.1083625108003616300000000f, 0.1170124113559722900000000f, 0.1256579011678695700000000f, 0.1342986673116684000000000f, 0.1429343819618225100000000f, 0.1515647023916244500000000f, 0.1601893156766891500000000f, 0.1688079088926315300000000f, - 0.1774201542139053300000000f, 0.1860256940126419100000000f, 0.1946242451667785600000000f, 0.2032154798507690400000000f, 0.2117990404367446900000000f, 0.2203746438026428200000000f, 0.2289419323205947900000000f, 0.2375006377696991000000000f, 0.2460503578186035200000000f, 0.2545908391475677500000000f, - 0.2631217241287231400000000f, 0.2716427147388458300000000f, 0.2801534831523895300000000f, 0.2886536717414856000000000f, 0.2971430122852325400000000f, 0.3056211769580841100000000f, 0.3140878379344940200000000f, 0.3225426375865936300000000f, 0.3309853076934814500000000f, 0.3394155502319335900000000f, - 0.3478329777717590300000000f, 0.3562373220920562700000000f, 0.3646282255649566700000000f, 0.3730054795742034900000000f, 0.3813686370849609400000000f, 0.3897174298763275100000000f, 0.3980515301227569600000000f, 0.4063706994056701700000000f, 0.4146745502948761000000000f, 0.4229627549648284900000000f, - 0.4312350451946258500000000f, 0.4394911527633667000000000f, 0.4477306604385376000000000f, 0.4559533298015594500000000f, 0.4641588330268859900000000f, 0.4723468720912933300000000f, 0.4805171191692352300000000f, 0.4886692464351654100000000f, 0.4968029856681823700000000f, 0.5049180388450622600000000f, - 0.5130140781402587900000000f, 0.5210908055305481000000000f, 0.5291479229927063000000000f, 0.5371851325035095200000000f, 0.5452020764350891100000000f, 0.5531984567642211900000000f, 0.5611740946769714400000000f, 0.5691285729408264200000000f, 0.5770615935325622600000000f, 0.5849729180335998500000000f, - 0.5928622484207153300000000f, 0.6007292270660400400000000f, 0.6085735559463501000000000f, 0.6163949966430664100000000f, 0.6241932511329650900000000f, 0.6319679617881774900000000f, 0.6397189497947692900000000f, 0.6474457979202270500000000f, 0.6551482677459716800000000f, 0.6628261208534240700000000f, - 0.6704789996147155800000000f, 0.6781066060066223100000000f, 0.6857087016105651900000000f, 0.6932849884033203100000000f, 0.7008351087570190400000000f, 0.7083588838577270500000000f, 0.7158560752868652300000000f, 0.7233262658119201700000000f, 0.7307691574096679700000000f, 0.7381845116615295400000000f, - 0.7455722093582153300000000f, 0.7529317140579223600000000f, 0.7602629661560058600000000f, 0.7675655484199523900000000f, 0.7748392224311828600000000f, 0.7820837497711181600000000f, 0.7892987728118896500000000f, 0.7964841723442077600000000f, 0.8036395311355590800000000f, 0.8107646703720092800000000f, - 0.8178592920303344700000000f, 0.8249230980873107900000000f, 0.8319557905197143600000000f, 0.8389572501182556200000000f, 0.8459270596504211400000000f, 0.8528650403022766100000000f, 0.8597708344459533700000000f, 0.8666443228721618700000000f, 0.8734852671623230000000000f, 0.8802932500839233400000000f, - 0.8870680332183837900000000f, 0.8938094973564147900000000f, 0.9005173444747924800000000f, 0.9071912169456481900000000f, 0.9138309359550476100000000f, 0.9204362630844116200000000f, 0.9270069003105163600000000f, 0.9335426688194274900000000f, 0.9400433301925659200000000f, 0.9465085864067077600000000f, - 0.9529381394386291500000000f, 0.9593318104743957500000000f, 0.9656894207000732400000000f, 0.9720106720924377400000000f, 0.9782953858375549300000000f, 0.9845431447029113800000000f, 0.9907538890838623000000000f, 0.9969274401664733900000000f, 1.0030633211135864000000000f, 1.0091614723205566000000000f, - 1.0152215957641602000000000f, 1.0212435722351074000000000f, 1.0272270441055298000000000f, 1.0331718921661377000000000f, 1.0390777587890625000000000f, 1.0449445247650146000000000f, 1.0507719516754150000000000f, 1.0565599203109741000000000f, 1.0623079538345337000000000f, 1.0680160522460937000000000f, - 1.0736839771270752000000000f, 1.0793114900588989000000000f, 1.0848982334136963000000000f, 1.0904443264007568000000000f, 1.0959492921829224000000000f, 1.1014128923416138000000000f, 1.1068351268768311000000000f, 1.1122156381607056000000000f, 1.1175543069839478000000000f, 1.1228508949279785000000000f, - 1.1281052827835083000000000f, 1.1333171129226685000000000f, 1.1384862661361694000000000f, 1.1436126232147217000000000f, 1.1486958265304565000000000f, 1.1537358760833740000000000f, 1.1587324142456055000000000f, 1.1636853218078613000000000f, 1.1685944795608521000000000f, 1.1734596490859985000000000f, - 1.1782805919647217000000000f, 1.1830571889877319000000000f, 1.1877892017364502000000000f, 1.1924765110015869000000000f, 1.1971189975738525000000000f, 1.2017163038253784000000000f, 1.2062685489654541000000000f, 1.2107752561569214000000000f, 1.2152363061904907000000000f, 1.2196516990661621000000000f, - 1.2240210771560669000000000f, 1.2283445596694946000000000f, 1.2326216697692871000000000f, 1.2368522882461548000000000f, 1.2410365343093872000000000f, 1.2451739311218262000000000f, 1.2492644786834717000000000f, 1.2533079385757446000000000f, 1.2573043107986450000000000f, 1.2612532377243042000000000f, - 1.2651547193527222000000000f, 1.2690086364746094000000000f, 1.2728147506713867000000000f, 1.2765728235244751000000000f, 1.2802829742431641000000000f, 1.2839449644088745000000000f, 1.2875584363937378000000000f, 1.2911235094070435000000000f, 1.2946400642395020000000000f, 1.2981077432632446000000000f, - 1.3015266656875610000000000f, 1.3048964738845825000000000f, 1.3082171678543091000000000f, 1.3114887475967407000000000f, 1.3147107362747192000000000f, 1.3178833723068237000000000f, 1.3210064172744751000000000f, 1.3240796327590942000000000f, 1.3271030187606812000000000f, 1.3300764560699463000000000f, - 1.3329998254776001000000000f, 1.3358730077743530000000000f, 1.3386958837509155000000000f, 1.3414683341979980000000000f, 1.3441903591156006000000000f, 1.3468616008758545000000000f, 1.3494822978973389000000000f, 1.3520522117614746000000000f, 1.3545711040496826000000000f, 1.3570390939712524000000000f, - 1.3594559431076050000000000f, 1.3618216514587402000000000f, 1.3641359806060791000000000f, 1.3663990497589111000000000f, 1.3686106204986572000000000f, 1.3707706928253174000000000f, 1.3728791475296021000000000f, 1.3749359846115112000000000f, 1.3769409656524658000000000f, 1.3788940906524658000000000f, - 1.3807953596115112000000000f, 1.3826445341110229000000000f, 1.3844418525695801000000000f, 1.3861869573593140000000000f, 1.3878798484802246000000000f, 1.3895204067230225000000000f, 1.3911087512969971000000000f, 1.3926446437835693000000000f, 1.3941282033920288000000000f, 1.3955593109130859000000000f, - 1.3969377279281616000000000f, 1.3982635736465454000000000f, 1.3995368480682373000000000f, 1.4007574319839478000000000f, 1.4019253253936768000000000f, 1.4030404090881348000000000f, 1.4041025638580322000000000f, 1.4051119089126587000000000f, 1.4060683250427246000000000f, 1.4069718122482300000000000f, - 1.4078224897384644000000000f, 1.4086199998855591000000000f, 1.4093644618988037000000000f, 1.4100558757781982000000000f, 1.4106942415237427000000000f, 1.4112794399261475000000000f, 1.4118115901947021000000000f, 1.4122905731201172000000000f, 1.4127163887023926000000000f, 1.4130889177322388000000000f, - 1.4134082794189453000000000f, 1.4136744737625122000000000f, 1.4138875007629395000000000f, 1.4140472412109375000000000f, 1.4141536951065063000000000f, 1.4142069816589355000000000f, 1.4142069816589355000000000f, 1.4141536951065063000000000f, 1.4140472412109375000000000f, 1.4138875007629395000000000f, - 1.4136744737625122000000000f, 1.4134082794189453000000000f, 1.4130889177322388000000000f, 1.4127163887023926000000000f, 1.4122905731201172000000000f, 1.4118115901947021000000000f, 1.4112794399261475000000000f, 1.4106942415237427000000000f, 1.4100558757781982000000000f, 1.4093644618988037000000000f, - 1.4086199998855591000000000f, 1.4078224897384644000000000f, 1.4069718122482300000000000f, 1.4060683250427246000000000f, 1.4051119089126587000000000f, 1.4041025638580322000000000f, 1.4030402898788452000000000f, 1.4019252061843872000000000f, 1.4007574319839478000000000f, 1.3995368480682373000000000f, - 1.3982635736465454000000000f, 1.3969377279281616000000000f, 1.3955591917037964000000000f, 1.3941282033920288000000000f, 1.3926446437835693000000000f, 1.3911087512969971000000000f, 1.3895204067230225000000000f, 1.3878798484802246000000000f, 1.3861868381500244000000000f, 1.3844418525695801000000000f, - 1.3826445341110229000000000f, 1.3807953596115112000000000f, 1.3788940906524658000000000f, 1.3769409656524658000000000f, 1.3749359846115112000000000f, 1.3728791475296021000000000f, 1.3707706928253174000000000f, 1.3686106204986572000000000f, 1.3663990497589111000000000f, 1.3641359806060791000000000f, - 1.3618216514587402000000000f, 1.3594559431076050000000000f, 1.3570389747619629000000000f, 1.3545711040496826000000000f, 1.3520520925521851000000000f, 1.3494822978973389000000000f, 1.3468616008758545000000000f, 1.3441903591156006000000000f, 1.3414683341979980000000000f, 1.3386958837509155000000000f, - 1.3358730077743530000000000f, 1.3329998254776001000000000f, 1.3300764560699463000000000f, 1.3271030187606812000000000f, 1.3240796327590942000000000f, 1.3210062980651855000000000f, 1.3178833723068237000000000f, 1.3147107362747192000000000f, 1.3114886283874512000000000f, 1.3082171678543091000000000f, - 1.3048964738845825000000000f, 1.3015265464782715000000000f, 1.2981077432632446000000000f, 1.2946399450302124000000000f, 1.2911235094070435000000000f, 1.2875584363937378000000000f, 1.2839448451995850000000000f, 1.2802829742431641000000000f, 1.2765728235244751000000000f, 1.2728147506713867000000000f, - 1.2690086364746094000000000f, 1.2651547193527222000000000f, 1.2612532377243042000000000f, 1.2573041915893555000000000f, 1.2533078193664551000000000f, 1.2492643594741821000000000f, 1.2451738119125366000000000f, 1.2410364151000977000000000f, 1.2368522882461548000000000f, 1.2326216697692871000000000f, - 1.2283444404602051000000000f, 1.2240210771560669000000000f, 1.2196515798568726000000000f, 1.2152363061904907000000000f, 1.2107751369476318000000000f, 1.2062684297561646000000000f, 1.2017163038253784000000000f, 1.1971189975738525000000000f, 1.1924765110015869000000000f, 1.1877892017364502000000000f, - 1.1830570697784424000000000f, 1.1782804727554321000000000f, 1.1734595298767090000000000f, 1.1685943603515625000000000f, 1.1636853218078613000000000f, 1.1587324142456055000000000f, 1.1537357568740845000000000f, 1.1486958265304565000000000f, 1.1436125040054321000000000f, 1.1384861469268799000000000f, - 1.1333171129226685000000000f, 1.1281051635742187000000000f, 1.1228507757186890000000000f, 1.1175541877746582000000000f, 1.1122155189514160000000000f, 1.1068350076675415000000000f, 1.1014127731323242000000000f, 1.0959491729736328000000000f, 1.0904442071914673000000000f, 1.0848982334136963000000000f, - 1.0793113708496094000000000f, 1.0736838579177856000000000f, 1.0680160522460937000000000f, 1.0623078346252441000000000f, 1.0565598011016846000000000f, 1.0507718324661255000000000f, 1.0449445247650146000000000f, 1.0390776395797729000000000f, 1.0331717729568481000000000f, 1.0272269248962402000000000f, - 1.0212434530258179000000000f, 1.0152214765548706000000000f, 1.0091613531112671000000000f, 1.0030632019042969000000000f, 0.9969273209571838400000000f, 0.9907538294792175300000000f, 0.9845430850982666000000000f, 0.9782953262329101600000000f, 0.9720106124877929700000000f, 0.9656893610954284700000000f, - 0.9593317508697509800000000f, 0.9529380798339843800000000f, 0.9465084671974182100000000f, 0.9400432705879211400000000f, 0.9335426092147827100000000f, 0.9270067811012268100000000f, 0.9204362034797668500000000f, 0.9138308763504028300000000f, 0.9071910977363586400000000f, 0.9005171656608581500000000f, - 0.8938094377517700200000000f, 0.8870679140090942400000000f, 0.8802930712699890100000000f, 0.8734850883483886700000000f, 0.8666442632675170900000000f, 0.8597707748413085900000000f, 0.8528649210929870600000000f, 0.8459268808364868200000000f, 0.8389570713043212900000000f, 0.8319557309150695800000000f, - 0.8249229192733764600000000f, 0.8178591728210449200000000f, 0.8107645511627197300000000f, 0.8036394119262695300000000f, 0.7964840531349182100000000f, 0.7892987132072448700000000f, 0.7820836901664733900000000f, 0.7748391628265380900000000f, 0.7675654292106628400000000f, 0.7602628469467163100000000f, - 0.7529316544532775900000000f, 0.7455720901489257800000000f, 0.7381844520568847700000000f, 0.7307690382003784200000000f, 0.7233260869979858400000000f, 0.7158559560775756800000000f, 0.7083588242530822800000000f, 0.7008350491523742700000000f, 0.6932848691940307600000000f, 0.6857085824012756300000000f, - 0.6781064867973327600000000f, 0.6704788804054260300000000f, 0.6628260016441345200000000f, 0.6551482081413269000000000f, 0.6474456787109375000000000f, 0.6397188305854797400000000f, 0.6319679021835327100000000f, 0.6241931319236755400000000f, 0.6163948774337768600000000f, 0.6085734367370605500000000f, - 0.6007291078567504900000000f, 0.5928621292114257800000000f, 0.5849727988243103000000000f, 0.5770615339279174800000000f, 0.5691284537315368700000000f, 0.5611739754676818800000000f, 0.5531983971595764200000000f, 0.5452019572257995600000000f, 0.5371850132942199700000000f, 0.5291478037834167500000000f, - 0.5210906863212585400000000f, 0.5130139589309692400000000f, 0.5049179196357727100000000f, 0.4968028664588928200000000f, 0.4886691272258758500000000f, 0.4805169999599456800000000f, 0.4723467230796814000000000f, 0.4641586840152740500000000f, 0.4559532105922699000000000f, 0.4477305412292480500000000f, - 0.4394910335540771500000000f, 0.4312349855899810800000000f, 0.4229626357555389400000000f, 0.4146744310855865500000000f, 0.4063705503940582300000000f, 0.3980514407157897900000000f, 0.3897172808647155800000000f, 0.3813685178756713900000000f, 0.3730053603649139400000000f, 0.3646281659603118900000000f, - 0.3562372326850891100000000f, 0.3478328585624694800000000f, 0.3394154310226440400000000f, 0.3309852182865142800000000f, 0.3225425183773040800000000f, 0.3140876889228820800000000f, 0.3056210577487945600000000f, 0.2971428930759429900000000f, 0.2886535525321960400000000f, 0.2801533639430999800000000f, - 0.2716425955295562700000000f, 0.2631216049194335900000000f, 0.2545907199382782000000000f, 0.2460502535104751600000000f, 0.2375005036592483500000000f, 0.2289418131113052400000000f, 0.2203745096921920800000000f, 0.2117989212274551400000000f, 0.2032153606414794900000000f, 0.1946241259574890100000000f, - 0.1860255748033523600000000f, 0.1774200350046157800000000f, 0.1688077896833419800000000f, 0.1601892113685607900000000f, 0.1515645831823349000000000f, 0.1429342478513717700000000f, 0.1342985481023788500000000f, 0.1256577819585800200000000f, 0.1170122846961021400000000f, 0.1083623841404914900000000f, - 0.0997084006667137150000000f, 0.0910506695508956910000000f, 0.0823895111680030820000000f, 0.0737252458930015560000000f, 0.0650582015514373780000000f, 0.0563887134194374080000000f, 0.0477171018719673160000000f, 0.0390436910092830660000000f, 0.0303688123822212220000000f, 0.0216927900910377500000000f, - 0.0130159519612789150000000f, 0.0043386225588619709000000f -}; - -const float olapWinAna640[640] = -{ - 0.0034709984902292490000000f, 0.0104129118844866750000000f, 0.0173545740544795990000000f, 0.0242958199232816700000000f, 0.0312364790588617320000000f, 0.0381763875484466550000000f, 0.0451153740286827090000000f, 0.0520532727241516110000000f, 0.0589899159967899320000000f, 0.0659251436591148380000000f, - 0.0728587806224823000000000f, 0.0797906517982482910000000f, 0.0867206156253814700000000f, 0.0936484783887863160000000f, 0.1005740910768508900000000f, 0.1074972823262214700000000f, 0.1144178733229637100000000f, 0.1213357225060463000000000f, 0.1282506436109542800000000f, 0.1351624578237533600000000f, - 0.1420710384845733600000000f, 0.1489761769771575900000000f, 0.1558777391910553000000000f, 0.1627755314111709600000000f, 0.1696694195270538300000000f, 0.1765592098236084000000000f, 0.1834447383880615200000000f, 0.1903258562088012700000000f, 0.1972023993730545000000000f, 0.2040741592645645100000000f, - 0.2109410166740417500000000f, 0.2178028076887130700000000f, 0.2246593385934829700000000f, 0.2315104454755783100000000f, 0.2383559793233871500000000f, 0.2451957911252975500000000f, 0.2520296573638916000000000f, 0.2588574886322021500000000f, 0.2656790614128112800000000f, 0.2724942266941070600000000f, - 0.2793028354644775400000000f, 0.2861047089099884000000000f, 0.2928997278213501000000000f, 0.2996876239776611300000000f, 0.3064683377742767300000000f, 0.3132416605949401900000000f, 0.3200074136257171600000000f, 0.3267655074596405000000000f, 0.3335156738758087200000000f, 0.3402578532695770300000000f, - 0.3469918072223663300000000f, 0.3537174165248870800000000f, 0.3604344725608825700000000f, 0.3671428561210632300000000f, 0.3738423883914947500000000f, 0.3805329203605651900000000f, 0.3872142732143402100000000f, 0.3938862979412078900000000f, 0.4005488157272338900000000f, 0.4072017371654510500000000f, - 0.4138447940349578900000000f, 0.4204779267311096200000000f, 0.4271008670330047600000000f, 0.4337135851383209200000000f, 0.4403158128261566200000000f, 0.4469074010848999000000000f, 0.4534882903099060100000000f, 0.4600581824779510500000000f, 0.4666170477867126500000000f, 0.4731646478176116900000000f, - 0.4797008633613586400000000f, 0.4862254858016967800000000f, 0.4927383959293365500000000f, 0.4992394745349884000000000f, 0.5057284832000732400000000f, 0.5122053027153015100000000f, 0.5186697840690612800000000f, 0.5251218080520629900000000f, 0.5315611362457275400000000f, 0.5379876494407653800000000f, - 0.5444012284278869600000000f, 0.5508016943931579600000000f, 0.5571888685226440400000000f, 0.5635626316070556600000000f, 0.5699228048324585000000000f, 0.5762692093849182100000000f, 0.5826017856597900400000000f, 0.5889202952384948700000000f, 0.5952246189117431600000000f, 0.6015146374702453600000000f, - 0.6077901124954223600000000f, 0.6140509843826293900000000f, 0.6202970147132873500000000f, 0.6265281438827514600000000f, 0.6327440738677978500000000f, 0.6389448642730712900000000f, 0.6451302766799926800000000f, 0.6513000726699829100000000f, 0.6574541926383972200000000f, 0.6635924577713012700000000f, - 0.6697147488594055200000000f, 0.6758209466934204100000000f, 0.6819108128547668500000000f, 0.6879842281341552700000000f, 0.6940411329269409200000000f, 0.7000812292098999000000000f, 0.7061045169830322300000000f, 0.7121107578277587900000000f, 0.7180998921394348100000000f, 0.7240716814994812000000000f, - 0.7300260066986084000000000f, 0.7359628081321716300000000f, 0.7418818473815918000000000f, 0.7477830052375793500000000f, 0.7536661028861999500000000f, 0.7595310807228088400000000f, 0.7653777003288269000000000f, 0.7712059617042541500000000f, 0.7770156264305114700000000f, 0.7828065156936645500000000f, - 0.7885786294937133800000000f, 0.7943316698074340800000000f, 0.8000655770301818800000000f, 0.8057801723480224600000000f, 0.8114753961563110400000000f, 0.8171511292457580600000000f, 0.8228070735931396500000000f, 0.8284432291984558100000000f, 0.8340594172477722200000000f, 0.8396555185317993200000000f, - 0.8452314138412475600000000f, 0.8507869243621826200000000f, 0.8563219308853149400000000f, 0.8618362545967102100000000f, 0.8673298358917236300000000f, 0.8728026151657104500000000f, 0.8782541751861572300000000f, 0.8836847543716430700000000f, 0.8890939354896545400000000f, 0.8944817185401916500000000f, - 0.8998479843139648400000000f, 0.9051925539970397900000000f, 0.9105152487754821800000000f, 0.9158160686492919900000000f, 0.9210947751998901400000000f, 0.9263513088226318400000000f, 0.9315855503082275400000000f, 0.9367973208427429200000000f, 0.9419865608215332000000000f, 0.9471529722213745100000000f, - 0.9522966742515564000000000f, 0.9574174284934997600000000f, 0.9625151157379150400000000f, 0.9675895571708679200000000f, 0.9726406931877136200000000f, 0.9776684641838073700000000f, 0.9826726913452148400000000f, 0.9876530766487121600000000f, 0.9926097989082336400000000f, 0.9975425601005554200000000f, - 1.0024513006210327000000000f, 1.0073359012603760000000000f, 1.0121961832046509000000000f, 1.0170321464538574000000000f, 1.0218435525894165000000000f, 1.0266302824020386000000000f, 1.0313923358917236000000000f, 1.0361295938491821000000000f, 1.0408418178558350000000000f, 1.0455290079116821000000000f, - 1.0501909255981445000000000f, 1.0548275709152222000000000f, 1.0594388246536255000000000f, 1.0640245676040649000000000f, 1.0685845613479614000000000f, 1.0731189250946045000000000f, 1.0776274204254150000000000f, 1.0821099281311035000000000f, 1.0865663290023804000000000f, 1.0909965038299561000000000f, - 1.0954004526138306000000000f, 1.0997780561447144000000000f, 1.1041290760040283000000000f, 1.1084536314010620000000000f, 1.1127513647079468000000000f, 1.1170222759246826000000000f, 1.1212662458419800000000000f, 1.1254832744598389000000000f, 1.1296732425689697000000000f, 1.1338359117507935000000000f, - 1.1379711627960205000000000f, 1.1420791149139404000000000f, 1.1461595296859741000000000f, 1.1502122879028320000000000f, 1.1542373895645142000000000f, 1.1582345962524414000000000f, 1.1622040271759033000000000f, 1.1661453247070312000000000f, 1.1700586080551147000000000f, 1.1739436388015747000000000f, - 1.1778002977371216000000000f, 1.1816288232803345000000000f, 1.1854286193847656000000000f, 1.1892000436782837000000000f, 1.1929427385330200000000000f, 1.1966567039489746000000000f, 1.2003418207168579000000000f, 1.2039979696273804000000000f, 1.2076252698898315000000000f, 1.2112232446670532000000000f, - 1.2147921323776245000000000f, 1.2183318138122559000000000f, 1.2218420505523682000000000f, 1.2253229618072510000000000f, 1.2287741899490356000000000f, 1.2321958541870117000000000f, 1.2355878353118896000000000f, 1.2389501333236694000000000f, 1.2422825098037720000000000f, 1.2455849647521973000000000f, - 1.2488573789596558000000000f, 1.2520997524261475000000000f, 1.2553119659423828000000000f, 1.2584939002990723000000000f, 1.2616454362869263000000000f, 1.2647666931152344000000000f, 1.2678573131561279000000000f, 1.2709175348281860000000000f, 1.2739471197128296000000000f, 1.2769459486007690000000000f, - 1.2799140214920044000000000f, 1.2828512191772461000000000f, 1.2857576608657837000000000f, 1.2886329889297485000000000f, 1.2914773225784302000000000f, 1.2942904233932495000000000f, 1.2970724105834961000000000f, 1.2998231649398804000000000f, 1.3025425672531128000000000f, 1.3052306175231934000000000f, - 1.3078873157501221000000000f, 1.3105123043060303000000000f, 1.3131058216094971000000000f, 1.3156676292419434000000000f, 1.3181978464126587000000000f, 1.3206962347030640000000000f, 1.3231627941131592000000000f, 1.3255974054336548000000000f, 1.3280001878738403000000000f, 1.3303710222244263000000000f, - 1.3327096700668335000000000f, 1.3350162506103516000000000f, 1.3372906446456909000000000f, 1.3395328521728516000000000f, 1.3417427539825439000000000f, 1.3439202308654785000000000f, 1.3460655212402344000000000f, 1.3481782674789429000000000f, 1.3502584695816040000000000f, 1.3523062467575073000000000f, - 1.3543214797973633000000000f, 1.3563039302825928000000000f, 1.3582537174224854000000000f, 1.3601709604263306000000000f, 1.3620551824569702000000000f, 1.3639067411422729000000000f, 1.3657253980636597000000000f, 1.3675111532211304000000000f, 1.3692638874053955000000000f, 1.3709838390350342000000000f, - 1.3726705312728882000000000f, 1.3743242025375366000000000f, 1.3759448528289795000000000f, 1.3775322437286377000000000f, 1.3790863752365112000000000f, 1.3806074857711792000000000f, 1.3820952177047729000000000f, 1.3835495710372925000000000f, 1.3849706649780273000000000f, 1.3863584995269775000000000f, - 1.3877127170562744000000000f, 1.3890335559844971000000000f, 1.3903210163116455000000000f, 1.3915749788284302000000000f, 1.3927953243255615000000000f, 1.3939821720123291000000000f, 1.3951354026794434000000000f, 1.3962548971176147000000000f, 1.3973408937454224000000000f, 1.3983932733535767000000000f, - 1.3994117975234985000000000f, 1.4003967046737671000000000f, 1.4013478755950928000000000f, 1.4022653102874756000000000f, 1.4031487703323364000000000f, 1.4039986133575439000000000f, 1.4048146009445190000000000f, 1.4055966138839722000000000f, 1.4063447713851929000000000f, 1.4070591926574707000000000f, - 1.4077396392822266000000000f, 1.4083861112594604000000000f, 1.4089987277984619000000000f, 1.4095773696899414000000000f, 1.4101220369338989000000000f, 1.4106327295303345000000000f, 1.4111093282699585000000000f, 1.4115520715713501000000000f, 1.4119608402252197000000000f, 1.4123353958129883000000000f, - 1.4126759767532349000000000f, 1.4129825830459595000000000f, 1.4132552146911621000000000f, 1.4134936332702637000000000f, 1.4136980772018433000000000f, 1.4138684272766113000000000f, 1.4140048027038574000000000f, 1.4141069650650024000000000f, 1.4141751527786255000000000f, 1.4142091274261475000000000f, - 1.4142091274261475000000000f, 1.4141751527786255000000000f, 1.4141069650650024000000000f, 1.4140048027038574000000000f, 1.4138684272766113000000000f, 1.4136980772018433000000000f, 1.4134936332702637000000000f, 1.4132550954818726000000000f, 1.4129825830459595000000000f, 1.4126759767532349000000000f, - 1.4123353958129883000000000f, 1.4119607210159302000000000f, 1.4115520715713501000000000f, 1.4111093282699585000000000f, 1.4106327295303345000000000f, 1.4101220369338989000000000f, 1.4095773696899414000000000f, 1.4089987277984619000000000f, 1.4083861112594604000000000f, 1.4077396392822266000000000f, - 1.4070591926574707000000000f, 1.4063447713851929000000000f, 1.4055966138839722000000000f, 1.4048146009445190000000000f, 1.4039986133575439000000000f, 1.4031487703323364000000000f, 1.4022653102874756000000000f, 1.4013477563858032000000000f, 1.4003967046737671000000000f, 1.3994117975234985000000000f, - 1.3983932733535767000000000f, 1.3973408937454224000000000f, 1.3962548971176147000000000f, 1.3951354026794434000000000f, 1.3939821720123291000000000f, 1.3927953243255615000000000f, 1.3915748596191406000000000f, 1.3903210163116455000000000f, 1.3890335559844971000000000f, 1.3877127170562744000000000f, - 1.3863583803176880000000000f, 1.3849706649780273000000000f, 1.3835495710372925000000000f, 1.3820950984954834000000000f, 1.3806074857711792000000000f, 1.3790863752365112000000000f, 1.3775322437286377000000000f, 1.3759448528289795000000000f, 1.3743242025375366000000000f, 1.3726705312728882000000000f, - 1.3709837198257446000000000f, 1.3692638874053955000000000f, 1.3675111532211304000000000f, 1.3657253980636597000000000f, 1.3639067411422729000000000f, 1.3620551824569702000000000f, 1.3601708412170410000000000f, 1.3582537174224854000000000f, 1.3563039302825928000000000f, 1.3543213605880737000000000f, - 1.3523062467575073000000000f, 1.3502584695816040000000000f, 1.3481782674789429000000000f, 1.3460655212402344000000000f, 1.3439202308654785000000000f, 1.3417427539825439000000000f, 1.3395328521728516000000000f, 1.3372905254364014000000000f, 1.3350161314010620000000000f, 1.3327096700668335000000000f, - 1.3303709030151367000000000f, 1.3280001878738403000000000f, 1.3255974054336548000000000f, 1.3231626749038696000000000f, 1.3206962347030640000000000f, 1.3181978464126587000000000f, 1.3156676292419434000000000f, 1.3131058216094971000000000f, 1.3105123043060303000000000f, 1.3078871965408325000000000f, - 1.3052306175231934000000000f, 1.3025425672531128000000000f, 1.2998231649398804000000000f, 1.2970724105834961000000000f, 1.2942904233932495000000000f, 1.2914772033691406000000000f, 1.2886328697204590000000000f, 1.2857575416564941000000000f, 1.2828512191772461000000000f, 1.2799140214920044000000000f, - 1.2769459486007690000000000f, 1.2739471197128296000000000f, 1.2709175348281860000000000f, 1.2678573131561279000000000f, 1.2647665739059448000000000f, 1.2616454362869263000000000f, 1.2584937810897827000000000f, 1.2553118467330933000000000f, 1.2520996332168579000000000f, 1.2488572597503662000000000f, - 1.2455849647521973000000000f, 1.2422825098037720000000000f, 1.2389501333236694000000000f, 1.2355878353118896000000000f, 1.2321958541870117000000000f, 1.2287741899490356000000000f, 1.2253228425979614000000000f, 1.2218420505523682000000000f, 1.2183316946029663000000000f, 1.2147921323776245000000000f, - 1.2112232446670532000000000f, 1.2076251506805420000000000f, 1.2039978504180908000000000f, 1.2003417015075684000000000f, 1.1966565847396851000000000f, 1.1929427385330200000000000f, 1.1891999244689941000000000f, 1.1854286193847656000000000f, 1.1816287040710449000000000f, 1.1778002977371216000000000f, - 1.1739435195922852000000000f, 1.1700584888458252000000000f, 1.1661452054977417000000000f, 1.1622039079666138000000000f, 1.1582344770431519000000000f, 1.1542372703552246000000000f, 1.1502121686935425000000000f, 1.1461594104766846000000000f, 1.1420789957046509000000000f, 1.1379710435867310000000000f, - 1.1338357925415039000000000f, 1.1296731233596802000000000f, 1.1254831552505493000000000f, 1.1212662458419800000000000f, 1.1170221567153931000000000f, 1.1127512454986572000000000f, 1.1084535121917725000000000f, 1.1041289567947388000000000f, 1.0997780561447144000000000f, 1.0954004526138306000000000f, - 1.0909965038299561000000000f, 1.0865662097930908000000000f, 1.0821098089218140000000000f, 1.0776273012161255000000000f, 1.0731188058853149000000000f, 1.0685844421386719000000000f, 1.0640244483947754000000000f, 1.0594387054443359000000000f, 1.0548274517059326000000000f, 1.0501908063888550000000000f, - 1.0455288887023926000000000f, 1.0408416986465454000000000f, 1.0361294746398926000000000f, 1.0313922166824341000000000f, 1.0266302824020386000000000f, 1.0218434333801270000000000f, 1.0170320272445679000000000f, 1.0121960639953613000000000f, 1.0073357820510864000000000f, 1.0024513006210327000000000f, - 0.9975425004959106400000000f, 0.9926097393035888700000000f, 0.9876530170440673800000000f, 0.9826725125312805200000000f, 0.9776684045791626000000000f, 0.9726406335830688500000000f, 0.9675894975662231400000000f, 0.9625149965286254900000000f, 0.9574173688888549800000000f, 0.9522966146469116200000000f, - 0.9471529126167297400000000f, 0.9419864416122436500000000f, 0.9367972612380981400000000f, 0.9315854907035827600000000f, 0.9263512492179870600000000f, 0.9210947155952453600000000f, 0.9158159494400024400000000f, 0.9105151891708374000000000f, 0.9051924347877502400000000f, 0.8998478651046752900000000f, - 0.8944816589355468800000000f, 0.8890938758850097700000000f, 0.8836846351623535200000000f, 0.8782541155815124500000000f, 0.8728024363517761200000000f, 0.8673297166824340800000000f, 0.8618361353874206500000000f, 0.8563218116760253900000000f, 0.8507867455482482900000000f, 0.8452312946319580100000000f, - 0.8396554589271545400000000f, 0.8340593576431274400000000f, 0.8284431099891662600000000f, 0.8228070139884948700000000f, 0.8171509504318237300000000f, 0.8114752769470214800000000f, 0.8057801127433776900000000f, 0.8000654578208923300000000f, 0.7943315505981445300000000f, 0.7885785102844238300000000f, - 0.7828064560890197800000000f, 0.7770155668258667000000000f, 0.7712058424949646000000000f, 0.7653776407241821300000000f, 0.7595309019088745100000000f, 0.7536660432815551800000000f, 0.7477828264236450200000000f, 0.7418816685676574700000000f, 0.7359626293182373000000000f, 0.7300259470939636200000000f, - 0.7240716218948364300000000f, 0.7180998325347900400000000f, 0.7121106386184692400000000f, 0.7061043977737426800000000f, 0.7000811696052551300000000f, 0.6940410137176513700000000f, 0.6879841089248657200000000f, 0.6819106936454772900000000f, 0.6758208274841308600000000f, 0.6697146296501159700000000f, - 0.6635923385620117200000000f, 0.6574540734291076700000000f, 0.6512999534606933600000000f, 0.6451301574707031300000000f, 0.6389448046684265100000000f, 0.6327440142631530800000000f, 0.6265279650688171400000000f, 0.6202968955039978000000000f, 0.6140508651733398400000000f, 0.6077899932861328100000000f, - 0.6015145182609558100000000f, 0.5952244997024536100000000f, 0.5889201760292053200000000f, 0.5826016664505004900000000f, 0.5762690901756286600000000f, 0.5699226856231689500000000f, 0.5635625123977661100000000f, 0.5571887493133544900000000f, 0.5508015751838684100000000f, 0.5444011092185974100000000f, - 0.5379875302314758300000000f, 0.5315610170364379900000000f, 0.5251216888427734400000000f, 0.5186696648597717300000000f, 0.5122051835060119600000000f, 0.5057283639907836900000000f, 0.4992393255233764600000000f, 0.4927382767200470000000000f, 0.4862253665924072300000000f, 0.4797007441520690900000000f, - 0.4731644988059997600000000f, 0.4666169285774231000000000f, 0.4600581228733062700000000f, 0.4534881711006164600000000f, 0.4469073116779327400000000f, 0.4403156936168670700000000f, 0.4337134659290313700000000f, 0.4271008074283599900000000f, 0.4204778075218200700000000f, 0.4138446748256683300000000f, - 0.4072016179561615000000000f, 0.4005487561225891100000000f, 0.3938861787319183300000000f, 0.3872141540050506600000000f, 0.3805327713489532500000000f, 0.3738422691822052000000000f, 0.3671427369117736800000000f, 0.3604343533515930200000000f, 0.3537172675132751500000000f, 0.3469916582107543900000000f, - 0.3402577340602874800000000f, 0.3335155844688415500000000f, 0.3267653882503509500000000f, 0.3200073242187500000000000f, 0.3132415413856506300000000f, 0.3064682185649871800000000f, 0.2996875047683715800000000f, 0.2928995788097381600000000f, 0.2861045897006988500000000f, 0.2793027162551879900000000f, - 0.2724941074848175000000000f, 0.2656789422035217300000000f, 0.2588573694229126000000000f, 0.2520295381546020500000000f, 0.2451956570148468000000000f, 0.2383558601140976000000000f, 0.2315103262662887600000000f, 0.2246592044830322300000000f, 0.2178026735782623300000000f, 0.2109408974647522000000000f, - 0.2040740400552749600000000f, 0.1972022652626037600000000f, 0.1903257369995117200000000f, 0.1834446042776107800000000f, 0.1765590757131576500000000f, 0.1696692854166030900000000f, 0.1627754122018814100000000f, 0.1558776050806045500000000f, 0.1489760577678680400000000f, 0.1420709043741226200000000f, - 0.1351623386144638100000000f, 0.1282505095005035400000000f, 0.1213355958461761500000000f, 0.1144177615642547600000000f, 0.1074971556663513200000000f, 0.1005739644169807400000000f, 0.0936483591794967650000000f, 0.0867204889655113220000000f, 0.0797905325889587400000000f, 0.0728586539626121520000000f, - 0.0659250169992446900000000f, 0.0589897930622100830000000f, 0.0520531460642814640000000f, 0.0451152473688125610000000f, 0.0381762608885765080000000f, 0.0312363542616367340000000f, 0.0242956969887018200000000f, 0.0173544511198997500000000f, 0.0104127889499068260000000f, 0.0034708750899881124000000f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 olapWinAna512_fx[512] = { /* Q30 */ 4658693, 13975905, 23292590, 32608396, 41922980, 51235980, 60547056, 69855848, 79162008, 88465192, 97765048, 107061216, 116353360, 125641120, 134924144, 144202096, @@ -13944,271 +8595,9 @@ const Word32 olapWinAna640_fx[640] = { /* Q30 */ 115424192, 107990472, 100554160, 93115416, 85674432, 78231384, 70786448, 63339808, 55891640, 48442128, 40991448, 33539780, 26087306, 18634200, 11180647, 3726823 }; -#endif // IVAS_FLOAT_FIXED /* Synthesis windows for overlap-add */ /* for (j=0; jfftlen; j++) hs->olapWinSyn[j] = (float)sin(EVS_PI*((float)j+0.5f)/(float)(hs->fftlen); */ -#ifndef IVAS_FLOAT_FIXED -const float olapWinSyn256[256] = -{ - 0.0061358846f, - 0.0184067299f, - 0.0306748032f, - 0.0429382569f, - 0.0551952443f, - 0.0674439196f, - 0.0796824380f, - 0.0919089565f, - 0.1041216339f, - 0.1163186309f, - 0.1284981108f, - 0.1406582393f, - 0.1527971853f, - 0.1649131205f, - 0.1770042204f, - 0.1890686641f, - 0.2011046348f, - 0.2131103199f, - 0.2250839114f, - 0.2370236060f, - 0.2489276057f, - 0.2607941179f, - 0.2726213554f, - 0.2844075372f, - 0.2961508882f, - 0.3078496400f, - 0.3195020308f, - 0.3311063058f, - 0.3426607173f, - 0.3541635254f, - 0.3656129978f, - 0.3770074102f, - 0.3883450467f, - 0.3996241998f, - 0.4108431711f, - 0.4220002708f, - 0.4330938189f, - 0.4441221446f, - 0.4550835871f, - 0.4659764958f, - 0.4767992301f, - 0.4875501601f, - 0.4982276670f, - 0.5088301425f, - 0.5193559902f, - 0.5298036247f, - 0.5401714727f, - 0.5504579729f, - 0.5606615762f, - 0.5707807459f, - 0.5808139581f, - 0.5907597019f, - 0.6006164794f, - 0.6103828063f, - 0.6200572118f, - 0.6296382389f, - 0.6391244449f, - 0.6485144010f, - 0.6578066933f, - 0.6669999223f, - 0.6760927036f, - 0.6850836678f, - 0.6939714609f, - 0.7027547445f, - 0.7114321957f, - 0.7200025080f, - 0.7284643904f, - 0.7368165689f, - 0.7450577854f, - 0.7531867990f, - 0.7612023855f, - 0.7691033376f, - 0.7768884657f, - 0.7845565972f, - 0.7921065773f, - 0.7995372691f, - 0.8068475535f, - 0.8140363297f, - 0.8211025150f, - 0.8280450453f, - 0.8348628750f, - 0.8415549774f, - 0.8481203448f, - 0.8545579884f, - 0.8608669386f, - 0.8670462455f, - 0.8730949784f, - 0.8790122264f, - 0.8847970984f, - 0.8904487232f, - 0.8959662498f, - 0.9013488470f, - 0.9065957045f, - 0.9117060320f, - 0.9166790599f, - 0.9215140393f, - 0.9262102421f, - 0.9307669611f, - 0.9351835099f, - 0.9394592236f, - 0.9435934582f, - 0.9475855910f, - 0.9514350210f, - 0.9551411683f, - 0.9587034749f, - 0.9621214043f, - 0.9653944417f, - 0.9685220943f, - 0.9715038910f, - 0.9743393828f, - 0.9770281427f, - 0.9795697657f, - 0.9819638691f, - 0.9842100924f, - 0.9863080972f, - 0.9882575677f, - 0.9900582103f, - 0.9917097537f, - 0.9932119492f, - 0.9945645707f, - 0.9957674145f, - 0.9968202993f, - 0.9977230666f, - 0.9984755806f, - 0.9990777278f, - 0.9995294175f, - 0.9998305818f, - 0.9999811753f, - 0.9999811753f, - 0.9998305818f, - 0.9995294175f, - 0.9990777278f, - 0.9984755806f, - 0.9977230666f, - 0.9968202993f, - 0.9957674145f, - 0.9945645707f, - 0.9932119492f, - 0.9917097537f, - 0.9900582103f, - 0.9882575677f, - 0.9863080972f, - 0.9842100924f, - 0.9819638691f, - 0.9795697657f, - 0.9770281427f, - 0.9743393828f, - 0.9715038910f, - 0.9685220943f, - 0.9653944417f, - 0.9621214043f, - 0.9587034749f, - 0.9551411683f, - 0.9514350210f, - 0.9475855910f, - 0.9435934582f, - 0.9394592236f, - 0.9351835099f, - 0.9307669611f, - 0.9262102421f, - 0.9215140393f, - 0.9166790599f, - 0.9117060320f, - 0.9065957045f, - 0.9013488470f, - 0.8959662498f, - 0.8904487232f, - 0.8847970984f, - 0.8790122264f, - 0.8730949784f, - 0.8670462455f, - 0.8608669386f, - 0.8545579884f, - 0.8481203448f, - 0.8415549774f, - 0.8348628750f, - 0.8280450453f, - 0.8211025150f, - 0.8140363297f, - 0.8068475535f, - 0.7995372691f, - 0.7921065773f, - 0.7845565972f, - 0.7768884657f, - 0.7691033376f, - 0.7612023855f, - 0.7531867990f, - 0.7450577854f, - 0.7368165689f, - 0.7284643904f, - 0.7200025080f, - 0.7114321957f, - 0.7027547445f, - 0.6939714609f, - 0.6850836678f, - 0.6760927036f, - 0.6669999223f, - 0.6578066933f, - 0.6485144010f, - 0.6391244449f, - 0.6296382389f, - 0.6200572118f, - 0.6103828063f, - 0.6006164794f, - 0.5907597019f, - 0.5808139581f, - 0.5707807459f, - 0.5606615762f, - 0.5504579729f, - 0.5401714727f, - 0.5298036247f, - 0.5193559902f, - 0.5088301425f, - 0.4982276670f, - 0.4875501601f, - 0.4767992301f, - 0.4659764958f, - 0.4550835871f, - 0.4441221446f, - 0.4330938189f, - 0.4220002708f, - 0.4108431711f, - 0.3996241998f, - 0.3883450467f, - 0.3770074102f, - 0.3656129978f, - 0.3541635254f, - 0.3426607173f, - 0.3311063058f, - 0.3195020308f, - 0.3078496400f, - 0.2961508882f, - 0.2844075372f, - 0.2726213554f, - 0.2607941179f, - 0.2489276057f, - 0.2370236060f, - 0.2250839114f, - 0.2131103199f, - 0.2011046348f, - 0.1890686641f, - 0.1770042204f, - 0.1649131205f, - 0.1527971853f, - 0.1406582393f, - 0.1284981108f, - 0.1163186309f, - 0.1041216339f, - 0.0919089565f, - 0.0796824380f, - 0.0674439196f, - 0.0551952443f, - 0.0429382569f, - 0.0306748032f, - 0.0184067299f, - 0.0061358846f -}; -#endif const Word16 olapWinSyn256_fx[256] = {//Q15 @@ -14230,43 +8619,6 @@ const Word16 olapWinSyn256_fx[256] = 6195, 5800, 5403, 5006, 4609, 4210, 3811, 3411, 3011, 2611, 2210, 1808, 1407, 1005, 603, 201 }; -#ifndef IVAS_FLOAT_FIXED -const float olapWinSyn320[320] = -{ - 0.0049087191000580788000000f, 0.0147256832569837570000000f, 0.0245412290096282960000000f, 0.0343544110655784610000000f, 0.0441642776131629940000000f, 0.0539698898792266850000000f, 0.0637703016400337220000000f, 0.0735645666718482970000000f, 0.0833517387509346010000000f, 0.0931308791041374210000000f, - 0.1029010415077209500000000f, 0.1126612871885299700000000f, 0.1224106773734092700000000f, 0.1321482658386230500000000f, 0.1418731212615966800000000f, 0.1515842974185943600000000f, 0.1612808704376220700000000f, 0.1709618866443634000000000f, 0.1806264370679855300000000f, 0.1902735829353332500000000f, - 0.1999023705720901500000000f, 0.2095119059085845900000000f, 0.2191012501716613800000000f, 0.2286694645881652800000000f, 0.2382156550884246800000000f, 0.2477388679981231700000000f, 0.2572382092475891100000000f, 0.2667127549648284900000000f, 0.2761616110801696800000000f, 0.2855838239192962600000000f, - 0.2949785292148590100000000f, 0.3043448030948638900000000f, 0.3136817514896392800000000f, 0.3229884505271911600000000f, 0.3322640359401702900000000f, 0.3415075838565826400000000f, 0.3507182002067565900000000f, 0.3598950505256652800000000f, 0.3690371811389923100000000f, 0.3781437575817108200000000f, - 0.3872138857841491700000000f, 0.3962467014789581300000000f, 0.4052413105964660600000000f, 0.4141968786716461200000000f, 0.4231125116348266600000000f, 0.4319873750209808300000000f, 0.4408206045627594000000000f, 0.4496113359928131100000000f, 0.4583587348461151100000000f, 0.4670619666576385500000000f, - 0.4757201671600341800000000f, 0.4843325316905975300000000f, 0.4928981959819793700000000f, 0.5014163851737976100000000f, 0.5098862051963806200000000f, 0.5183069109916687000000000f, 0.5266776680946350100000000f, 0.5349976420402526900000000f, 0.5432660579681396500000000f, 0.5514820814132690400000000f, - 0.5596449971199035600000000f, 0.5677539706230163600000000f, 0.5758082270622253400000000f, 0.5838069319725036600000000f, 0.5917494297027587900000000f, 0.5996348857879638700000000f, 0.6074625253677368200000000f, 0.6152316331863403300000000f, 0.6229414343833923300000000f, 0.6305911540985107400000000f, - 0.6381801366806030300000000f, 0.6457076072692871100000000f, 0.6531728506088256800000000f, 0.6605751514434814500000000f, 0.6679137349128723100000000f, 0.6751880049705505400000000f, 0.6823971867561340300000000f, 0.6895405650138855000000000f, 0.6966174840927124000000000f, 0.7036272883415222200000000f, - 0.7105692625045776400000000f, 0.7174427509307861300000000f, 0.7242470979690551800000000f, 0.7309816479682922400000000f, 0.7376457452774047900000000f, 0.7442387342453002900000000f, 0.7507599592208862300000000f, 0.7572088837623596200000000f, 0.7635847926139831500000000f, 0.7698870897293090800000000f, - 0.7761152386665344200000000f, 0.7822685241699218800000000f, 0.7883464694023132300000000f, 0.7943483591079711900000000f, 0.8002737760543823200000000f, 0.8061220049858093300000000f, 0.8118925094604492200000000f, 0.8175848126411438000000000f, 0.8231983184814453100000000f, 0.8287324905395507800000000f, - 0.8341867327690124500000000f, 0.8395606279373168900000000f, 0.8448535799980163600000000f, 0.8500651121139526400000000f, 0.8551946878433227500000000f, 0.8602418899536132800000000f, 0.8652061223983764600000000f, 0.8700870275497436500000000f, 0.8748840093612670900000000f, 0.8795967102050781300000000f, - 0.8842245936393737800000000f, 0.8887673020362854000000000f, 0.8932242989540100100000000f, 0.8975952267646789600000000f, 0.9018796682357788100000000f, 0.9060771465301513700000000f, 0.9101873040199279800000000f, 0.9142097830772399900000000f, 0.9181441068649292000000000f, 0.9219899177551269500000000f, - 0.9257469177246093800000000f, 0.9294146299362182600000000f, 0.9329928159713745100000000f, 0.9364810585975647000000000f, 0.9398790597915649400000000f, 0.9431864023208618200000000f, 0.9464029073715210000000000f, 0.9495282173156738300000000f, 0.9525619745254516600000000f, 0.9555038809776306200000000f, - 0.9583537578582763700000000f, 0.9611112475395202600000000f, 0.9637760519981384300000000f, 0.9663480520248413100000000f, 0.9688268303871154800000000f, 0.9712122678756713900000000f, 0.9735041260719299300000000f, 0.9757021665573120100000000f, 0.9778060913085937500000000f, 0.9798158407211303700000000f, - 0.9817311167716980000000000f, 0.9835518002510070800000000f, 0.9852776527404785200000000f, 0.9869085550308227500000000f, 0.9884443283081054700000000f, 0.9898848533630371100000000f, 0.9912299513816833500000000f, 0.9924795627593994100000000f, 0.9936334490776062000000000f, 0.9946916103363037100000000f, - 0.9956538677215576200000000f, 0.9965202212333679200000000f, 0.9972904324531555200000000f, 0.9979646205902099600000000f, 0.9985425472259521500000000f, 0.9990242719650268600000000f, 0.9994097352027893100000000f, 0.9996988177299499500000000f, 0.9998915791511535600000000f, 0.9999879598617553700000000f, - 0.9999879598617553700000000f, 0.9998915791511535600000000f, 0.9996988177299499500000000f, 0.9994097352027893100000000f, 0.9990242719650268600000000f, 0.9985425472259521500000000f, 0.9979646205902099600000000f, 0.9972904324531555200000000f, 0.9965201616287231400000000f, 0.9956538677215576200000000f, - 0.9946916103363037100000000f, 0.9936334490776062000000000f, 0.9924795031547546400000000f, 0.9912299513816833500000000f, 0.9898848533630371100000000f, 0.9884443283081054700000000f, 0.9869085550308227500000000f, 0.9852776527404785200000000f, 0.9835517406463623000000000f, 0.9817311167716980000000000f, - 0.9798157811164856000000000f, 0.9778060913085937500000000f, 0.9757021069526672400000000f, 0.9735041260719299300000000f, 0.9712122678756713900000000f, 0.9688268303871154800000000f, 0.9663479924201965300000000f, 0.9637760519981384300000000f, 0.9611111879348754900000000f, 0.9583536982536315900000000f, - 0.9555038809776306200000000f, 0.9525619149208068800000000f, 0.9495281577110290500000000f, 0.9464029073715210000000000f, 0.9431864023208618200000000f, 0.9398790001869201700000000f, 0.9364809989929199200000000f, 0.9329927563667297400000000f, 0.9294146299362182600000000f, 0.9257468581199646000000000f, - 0.9219899177551269500000000f, 0.9181440472602844200000000f, 0.9142097234725952100000000f, 0.9101873040199279800000000f, 0.9060771465301513700000000f, 0.9018796086311340300000000f, 0.8975952267646789600000000f, 0.8932242989540100100000000f, 0.8887672424316406300000000f, 0.8842245936393737800000000f, - 0.8795966506004333500000000f, 0.8748839497566223100000000f, 0.8700869679450988800000000f, 0.8652060627937316900000000f, 0.8602418303489685100000000f, 0.8551946878433227500000000f, 0.8500650525093078600000000f, 0.8448535203933715800000000f, 0.8395605683326721200000000f, 0.8341866731643676800000000f, - 0.8287324309349060100000000f, 0.8231982588768005400000000f, 0.8175847530364990200000000f, 0.8118925094604492200000000f, 0.8061219453811645500000000f, 0.8002737164497375500000000f, 0.7943482995033264200000000f, 0.7883464097976684600000000f, 0.7822684645652771000000000f, 0.7761151790618896500000000f, - 0.7698870301246643100000000f, 0.7635847330093383800000000f, 0.7572088241577148400000000f, 0.7507598996162414600000000f, 0.7442386746406555200000000f, 0.7376456856727600100000000f, 0.7309815883636474600000000f, 0.7242470383644104000000000f, 0.7174426913261413600000000f, 0.7105692028999328600000000f, - 0.7036272287368774400000000f, 0.6966174244880676300000000f, 0.6895405054092407200000000f, 0.6823971271514892600000000f, 0.6751879453659057600000000f, 0.6679136753082275400000000f, 0.6605750918388366700000000f, 0.6531727910041809100000000f, 0.6457075476646423300000000f, 0.6381800770759582500000000f, - 0.6305910944938659700000000f, 0.6229413151741027800000000f, 0.6152315139770507800000000f, 0.6074624657630920400000000f, 0.5996347665786743200000000f, 0.5917493700981140100000000f, 0.5838068723678588900000000f, 0.5758081078529357900000000f, 0.5677539110183715800000000f, 0.5596449375152587900000000f, - 0.5514820218086242700000000f, 0.5432659983634948700000000f, 0.5349975824356079100000000f, 0.5266776084899902300000000f, 0.5183068513870239300000000f, 0.5098861455917358400000000f, 0.5014163255691528300000000f, 0.4928981363773345900000000f, 0.4843324422836303700000000f, 0.4757201075553894000000000f, - 0.4670618772506713900000000f, 0.4583586752414703400000000f, 0.4496112763881683300000000f, 0.4408205151557922400000000f, 0.4319873154163360600000000f, 0.4231124520301818800000000f, 0.4141968190670013400000000f, 0.4052412509918212900000000f, 0.3962466120719909700000000f, 0.3872138261795043900000000f, - 0.3781436979770660400000000f, 0.3690371215343475300000000f, 0.3598949611186981200000000f, 0.3507181406021118200000000f, 0.3415074944496154800000000f, 0.3322639465332031300000000f, 0.3229883611202240000000000f, 0.3136816620826721200000000f, 0.3043447136878967300000000f, 0.2949784696102142300000000f, - 0.2855837643146514900000000f, 0.2761615216732025100000000f, 0.2667126953601837200000000f, 0.2572381198406219500000000f, 0.2477387785911560100000000f, 0.2382155656814575200000000f, 0.2286693751811981200000000f, 0.2191011607646942100000000f, 0.2095118165016174300000000f, 0.1999022960662841800000000f, - 0.1902734935283660900000000f, 0.1806263476610183700000000f, 0.1709618121385574300000000f, 0.1612807810306549100000000f, 0.1515842080116272000000000f, 0.1418730318546295200000000f, 0.1321481764316558800000000f, 0.1224105954170227100000000f, 0.1126612052321434000000000f, 0.1029009595513343800000000f, - 0.0931307896971702580000000f, 0.0833516493439674380000000f, 0.0735644772648811340000000f, 0.0637702122330665590000000f, 0.0539698041975498200000000f, 0.0441641919314861300000000f, 0.0343543216586112980000000f, 0.0245411414653062820000000f, 0.0147255966439843180000000f, 0.0049086315557360649000000f -}; -#endif const Word16 olapWinSyn320_fx[320] = {//Q15 @@ -14317,265 +8669,6 @@ const Word16 olapWinSyn320_fx[320] = /*-------------------------------------------------------------------* * 1nd stage, 1st split: ISF0 to ISF8 *-------------------------------------------------------------------*/ -const float dico1_isf[] = -{ - 226.1477f, 422.2338f, 404.4563f, 152.3442f, 1.2553f, -102.5648f, -77.5073f, -32.1403f, 14.9134f, - 6.9890f, -26.5711f, -4.8001f, 122.2654f, 297.4533f, 158.0168f, 97.1963f, 43.4786f, -29.4927f, - 289.1461f, 493.4574f, 504.5048f, 393.1421f, 389.3840f, 397.8990f, 397.4072f, 381.0959f, 360.5083f, - -35.6482f, 323.0566f, 370.2882f, 252.9499f, 239.6172f, 209.0563f, 203.9713f, 191.4865f, 164.6219f, - 16.1026f, -17.1264f, -109.6817f, -184.2085f, 254.5133f, 208.7087f, 75.3774f, 52.8718f, -35.2364f, - 15.8336f, -47.0775f, -139.1713f, -23.5561f, 259.0049f, 120.0214f, 23.8825f, -18.5948f, -134.3813f, - 217.4017f, 369.5988f, 409.6801f, 338.5433f, 330.4056f, 386.7012f, 434.5276f, 492.7760f, 484.6164f, - -46.1429f, -79.6218f, 128.1106f, 199.9543f, 339.7710f, 309.8338f, 238.4430f, 156.8895f, 72.7742f, - 61.1308f, 114.6106f, 28.7939f, -131.9070f, -185.5015f, -350.3943f, -232.0556f, -62.9803f, -194.0513f, - 88.2757f, 51.2294f, -53.9555f, 120.0698f, 65.9863f, -105.8813f, -64.0929f, -151.0651f, -243.7652f, - 24.1201f, -12.6302f, -23.7808f, -98.2577f, -211.1396f, -323.5447f, -401.0499f, -204.4768f, -258.4671f, - 39.7202f, -23.9607f, 55.2442f, 43.6804f, -105.4100f, -97.8749f, -211.3002f, 9.7097f, -58.7138f, - 2.1766f, -51.7480f, -138.9340f, -268.1601f, -37.5098f, -125.8675f, -203.7929f, -12.2603f, -127.2472f, - -14.0622f, -81.7822f, -203.4806f, -89.5766f, 119.8931f, -51.7010f, -2.1055f, -38.5536f, -149.8808f, - 23.6196f, -19.7370f, -92.7527f, -260.9933f, -380.1402f, -158.8319f, -276.5396f, -29.3644f, -67.0346f, - 10.0869f, -54.0238f, -104.0772f, 43.4993f, -118.0066f, 16.7674f, -108.4172f, -138.9907f, -140.3299f, - 222.5364f, 321.1411f, 193.8368f, -60.0340f, -121.7460f, -35.9078f, 53.6514f, 109.0639f, 145.0366f, - -57.1173f, 143.6362f, 159.6491f, 26.6189f, 2.3305f, 30.0608f, 65.3329f, 78.8683f, 63.4622f, - 247.1436f, 350.7171f, 389.0685f, 295.2953f, 258.6614f, 266.7955f, 305.9202f, 355.1905f, 389.1698f, - -40.0882f, 114.6876f, 237.0104f, 161.9769f, 188.5636f, 180.3751f, 187.4189f, 168.3521f, 159.5175f, - -46.7654f, -132.1011f, -238.9261f, -204.8685f, 228.1911f, 129.1599f, 36.0960f, 169.1651f, 107.7902f, - -69.5087f, -114.5055f, -60.0494f, -15.9078f, 105.1520f, 39.1060f, -3.6140f, 83.1345f, 62.4498f, - 324.4036f, 287.6214f, 108.7328f, 320.4871f, 489.7306f, 267.9902f, 278.2168f, 405.7287f, 184.7344f, - -85.2571f, -118.8197f, 180.9905f, 177.4239f, 154.8864f, 106.5995f, 78.7528f, 111.5907f, 106.4840f, - -90.5891f, 2.5823f, 2.5231f, -151.4854f, -184.4761f, -166.9757f, -147.6148f, -65.2055f, -39.1239f, - -114.9974f, -71.3698f, 52.3087f, -18.1814f, 39.4264f, -34.2483f, -32.8691f, -45.8165f, -1.2029f, - 22.1063f, 6.7469f, -79.0146f, -247.7831f, -386.2835f, -437.2287f, -208.2931f, 68.6375f, -14.1447f, - 46.7840f, -11.0692f, 9.1612f, 43.4278f, -124.5574f, 124.1172f, -8.5368f, -30.1898f, 103.7909f, - -105.9007f, -181.3862f, -169.7189f, -257.0920f, -250.0032f, -150.2815f, -150.4918f, -38.5650f, -26.7658f, - -77.3138f, -101.1008f, -103.9903f, -17.1337f, -15.2577f, -54.2134f, -53.5373f, 66.9219f, 25.6872f, - 3.6265f, -56.7222f, -147.2143f, -330.5455f, -390.5518f, -43.3139f, -126.9112f, 133.5488f, 52.7399f, - -31.5816f, -111.6706f, -148.4743f, 75.1588f, -22.0969f, 119.9764f, 29.6891f, -9.5309f, -54.7378f, - 264.5383f, 274.1302f, 96.5690f, 21.7008f, 97.2691f, 55.1255f, -40.9705f, -92.2272f, -38.6482f, - 13.8969f, -15.1538f, -27.1357f, 135.8413f, 77.4989f, -36.1739f, 125.8114f, 35.5744f, -28.2436f, - 196.2991f, 345.8166f, 588.9347f, 510.5197f, 500.8432f, 457.6244f, 436.9384f, 472.1788f, 414.4815f, - 162.4519f, 280.7038f, 386.4482f, 479.3623f, 390.8287f, 411.1292f, 372.5701f, 289.3485f, 407.8594f, - -49.5343f, -147.0080f, -256.8338f, 54.1618f, 243.5530f, 87.1110f, 195.7264f, 119.5070f, 85.9479f, - -43.9641f, -150.1866f, -310.9041f, 196.7455f, 171.2780f, 33.0834f, 83.3645f, -32.4579f, -75.7126f, - 228.4330f, 442.3277f, 481.6548f, 426.3000f, 487.1132f, 559.8019f, 590.4699f, 565.5949f, 513.3911f, - -68.0544f, -164.7799f, 2.8141f, 451.2739f, 425.3554f, 461.7245f, 391.6532f, 369.1004f, 314.9413f, - 3.2743f, -49.3561f, -123.9568f, -40.1754f, -137.2377f, -271.6588f, -38.4305f, -104.5226f, -209.8071f, - 12.8092f, -40.2922f, -113.2953f, 65.4057f, -15.2443f, -159.0118f, 17.0998f, -81.3044f, -146.3446f, - 40.4305f, -8.9102f, -24.9719f, -113.7701f, -248.7160f, -332.5068f, -423.4328f, -23.8073f, -43.9266f, - -29.4866f, -119.6504f, -169.5775f, 85.2585f, -57.7724f, -138.3062f, -265.4940f, -52.0935f, -84.4635f, - -47.3285f, -147.4516f, -280.5169f, -38.0164f, -50.7237f, -141.1316f, -60.9737f, -147.8608f, -233.9212f, - -22.0146f, -99.1479f, -228.8716f, 91.6618f, 61.1343f, -83.5247f, 4.2834f, -101.7035f, -58.0283f, - -48.6094f, -104.2664f, -155.2664f, -226.4858f, -231.7223f, -205.7180f, -314.6280f, -150.3995f, 135.1819f, - -75.2552f, -171.9896f, -276.5969f, -137.0060f, -55.2086f, -99.5797f, -195.1097f, -57.2647f, -72.3255f, - 174.9245f, 258.0028f, 192.8297f, 81.3562f, 198.8450f, 180.2081f, 132.0824f, 113.5126f, 58.1412f, - -87.2559f, 34.2946f, 130.7081f, 62.1078f, 82.7816f, 74.4854f, 111.6818f, 120.3099f, 80.1334f, - -11.9671f, 183.3834f, 313.7754f, 257.2813f, 241.7612f, 256.9710f, 329.4492f, 385.5374f, 434.7875f, - -66.8195f, -94.6890f, 200.6887f, 141.3063f, 115.2635f, 204.7280f, 215.7973f, 270.9673f, 228.4647f, - -24.9070f, -120.1441f, -175.1481f, -8.0896f, 110.9215f, 307.0280f, 174.2457f, 112.7169f, 35.9639f, - -85.1717f, -152.2496f, -2.5803f, 66.0904f, 80.5138f, 128.8919f, 137.5303f, 159.4245f, 139.7766f, - -14.1396f, 274.4125f, 374.6268f, 335.3957f, 336.4666f, 435.5791f, 495.5083f, 529.9642f, 509.9389f, - -51.7794f, -133.3125f, -25.4473f, 264.8054f, 162.9175f, 171.9332f, 189.6735f, 202.1561f, 304.5228f, - 12.7820f, -17.2653f, -74.5083f, -134.5510f, -180.1133f, -294.9349f, -78.6120f, 84.8225f, -12.0772f, - -137.7282f, -213.7303f, -17.3509f, 48.2225f, -23.9524f, -26.4293f, -30.7054f, 11.1575f, 23.4229f, - 28.3886f, -22.3550f, -158.4269f, -299.3692f, -485.7126f, -469.8884f, 93.8213f, 156.3351f, 64.4156f, - -28.7029f, -110.1881f, -234.8032f, -83.3735f, -66.7772f, -146.3531f, 129.8178f, 13.7979f, -40.1959f, - -11.2220f, -81.0542f, -215.8795f, -186.0052f, -249.1487f, -354.7951f, 67.0249f, -8.7287f, -52.7080f, - -75.1895f, -93.5102f, -63.8842f, -40.2971f, -43.3423f, -18.3122f, 59.9384f, 48.9469f, 42.9198f, - -0.3036f, -79.3921f, -222.4614f, -402.4193f, -556.4007f, -208.9512f, 60.4822f, 0.2592f, 57.2596f, - -130.2469f, -254.9911f, -337.7263f, -76.9102f, -61.5888f, -8.3782f, -17.2822f, 37.1637f, 42.0772f, - 151.9460f, 229.6417f, 191.5279f, 12.9809f, -92.7110f, -204.7091f, -245.2630f, -53.2589f, -101.3680f, - 15.8084f, -69.0148f, -180.2926f, 176.9411f, 336.6405f, 148.3504f, 51.2260f, -50.6708f, -158.2893f, - 328.7315f, 655.2856f, 719.0299f, 605.1412f, 575.6907f, 490.5742f, 422.8277f, 353.4364f, 289.8675f, - 144.5240f, 474.8398f, 690.7612f, 638.0545f, 473.3627f, 248.6244f, 8.4810f, -128.9032f, 27.8837f, - -29.8052f, -109.6768f, -289.4402f, -289.9344f, 350.9098f, 241.8981f, 108.0220f, 27.7568f, -86.8368f, - -12.5998f, -103.5273f, -217.2510f, -9.8401f, 388.4400f, 266.5437f, 118.9818f, 49.1643f, -64.3603f, - 28.5445f, 288.4229f, 348.8730f, 378.0052f, 387.8595f, 690.6161f, 887.8799f, 718.7092f, 543.2699f, - -27.0127f, -136.3472f, -228.6534f, 91.4073f, 452.4637f, 352.8853f, 244.5759f, 199.3164f, 97.9452f, - -0.2574f, -38.8124f, -106.0784f, -81.9691f, -235.3859f, -136.9961f, -210.8024f, -316.9619f, -149.7671f, - -6.3268f, -89.9384f, -197.0412f, 160.1820f, 58.3899f, -80.1867f, -134.0614f, -254.4108f, -249.4793f, - 40.1439f, -3.4822f, -88.7857f, -80.2522f, -219.3521f, -305.1500f, -421.5967f, -471.9935f, -60.7522f, - 55.8529f, 24.5260f, -52.9174f, -26.1113f, -123.8744f, -235.0002f, -306.0707f, -450.7246f, -249.8812f, - -56.2297f, -152.7118f, -263.1169f, -243.0294f, -78.2260f, -99.3225f, -257.7953f, -369.9445f, -154.2971f, - -15.4570f, -97.8124f, -244.1879f, 10.4628f, 212.1971f, 36.6411f, -51.0200f, -150.9477f, -262.8206f, - -47.9169f, -145.0780f, -295.8412f, -176.3119f, -220.4176f, -239.8767f, -162.2583f, -277.5646f, -13.5098f, - -45.4312f, -120.7871f, -231.7391f, -104.6837f, 93.3399f, -13.0435f, -131.8873f, -253.9684f, -52.8010f, - 36.7261f, 97.8902f, 216.2452f, 22.2667f, -121.9688f, -165.2371f, -60.1795f, -22.1111f, 91.7368f, - -104.8126f, -27.6777f, 148.6412f, 44.3956f, -17.0786f, -34.0943f, 48.6552f, 67.5896f, 52.1341f, - 590.8627f, 669.3461f, 483.5975f, 208.4471f, 107.7190f, 123.1392f, 179.9797f, 179.2124f, 198.5541f, - -51.3512f, -7.3050f, 448.6575f, 261.8456f, 189.7417f, 139.0593f, 120.8041f, 144.0752f, 115.5179f, - -87.2434f, -195.6786f, -351.1762f, -282.1990f, -27.3961f, 2.1866f, 51.0065f, 120.9792f, 154.0704f, - -38.7878f, -118.5436f, -201.9035f, 97.1421f, 24.9785f, -20.8748f, 52.5830f, -4.3230f, 177.0334f, - -57.4864f, -155.8205f, -285.0674f, -156.5139f, 319.0307f, 288.4199f, 313.3522f, 292.7644f, 224.7193f, - -60.1766f, -170.1086f, -288.5482f, 312.6666f, 231.6275f, 142.7810f, 206.6260f, 124.0985f, 127.5073f, - -87.3474f, 17.7221f, -15.2086f, -151.2513f, -201.3116f, -202.2629f, -237.4979f, -150.1082f, -125.3288f, - -123.1549f, -147.2588f, 55.9560f, -39.6018f, -44.1818f, -147.1130f, -69.1241f, -56.1722f, -4.4924f, - 45.5201f, 15.5222f, -93.3382f, -254.1893f, -410.5618f, -226.8515f, -287.7839f, -386.6172f, -128.1340f, - 10.1233f, -19.6005f, -61.5127f, -8.8349f, -177.1218f, -110.5849f, -207.5041f, -213.2586f, 74.8075f, - -98.2741f, -195.7624f, -290.1091f, -230.1600f, -244.7515f, -194.7701f, -128.1076f, -46.1729f, -28.2903f, - -126.3800f, -193.1177f, -95.3231f, -119.6219f, -56.1586f, -69.0881f, -102.1922f, -52.5595f, -30.4027f, - -13.9604f, -91.5188f, -202.7529f, -375.3352f, -503.8488f, -122.5019f, -187.2047f, -144.9473f, -17.6464f, - -37.1158f, -113.9219f, -208.9531f, -3.1283f, -117.0010f, 43.6858f, -64.0984f, -108.2942f, 77.5131f, - -38.6401f, -49.9736f, 343.9084f, 326.3879f, 226.1680f, 136.9212f, 9.0736f, -37.1756f, -84.7974f, - -10.5004f, -100.6890f, 48.4106f, 394.7867f, 233.0419f, 165.9509f, 56.3291f, 2.7924f, -28.5845f, - 164.3221f, 505.0226f, 640.4844f, 633.9930f, 680.5828f, 631.7908f, 585.4574f, 501.5025f, 393.1295f, - -37.0300f, 293.6539f, 656.3401f, 612.9729f, 632.0821f, 560.9024f, 468.8401f, 382.9867f, 278.2211f, - -26.9959f, -117.0381f, -266.9459f, -169.9414f, 442.3678f, 351.1593f, 196.7216f, 129.6217f, 42.5401f, - -28.9160f, -126.1295f, -248.8180f, 219.9974f, 419.6462f, 237.5276f, 144.8018f, 41.0794f, -19.0438f, - -30.6524f, 324.5342f, 466.4269f, 433.6403f, 538.3355f, 578.5025f, 582.9940f, 533.2873f, 475.3817f, - -101.0867f, -47.3945f, 562.3863f, 521.2437f, 635.9947f, 581.9960f, 561.7294f, 477.7560f, 364.4759f, - -32.1078f, -119.5424f, -239.6324f, -86.9073f, -147.6602f, -263.4799f, -212.9377f, -261.9229f, -330.2635f, - 20.8260f, -48.5704f, -135.4246f, 164.8506f, 20.4817f, -48.8885f, -105.4348f, -206.6621f, 3.6375f, - 30.9311f, -34.7599f, -124.8998f, -258.7565f, -390.0532f, -468.4556f, -485.3543f, -264.1984f, -115.9895f, - -26.5921f, -106.6166f, -238.7686f, 53.4977f, -56.8913f, -155.1848f, -245.0791f, -329.9394f, -85.9503f, - -43.8040f, -135.2615f, -311.2635f, -322.8195f, 91.5184f, -51.5741f, -73.3097f, -108.7735f, -204.0501f, - -61.9589f, -158.0212f, -286.8211f, -163.7011f, 114.5577f, 29.0545f, -65.0919f, -65.1646f, 71.9506f, - -59.8760f, -170.6047f, -325.2270f, -421.8182f, -131.3054f, -184.2594f, -219.1312f, -132.9352f, -98.8301f, - -65.8626f, -165.1987f, -320.2537f, -353.1492f, -51.0331f, -7.3456f, -135.3074f, -235.8573f, 12.1485f, - 12.8460f, -11.9241f, 121.7405f, 24.2470f, -57.8971f, 19.1365f, -23.0243f, 220.3897f, 189.9156f, - -119.6102f, -129.9914f, 75.9549f, -17.3359f, 26.2798f, 28.0181f, 57.3185f, 79.8925f, 95.0199f, - -81.0524f, -19.0879f, 531.3251f, 384.0082f, 378.6000f, 387.1200f, 396.1896f, 433.4382f, 379.9696f, - -82.3204f, -67.1148f, 345.0646f, 244.9884f, 277.8043f, 263.1406f, 275.4622f, 311.7924f, 291.4141f, - -34.2889f, -127.1388f, -298.1820f, -380.4511f, 268.4245f, 354.6007f, 200.7670f, 149.3555f, 67.1469f, - -114.0830f, -239.0252f, -314.3921f, 24.6004f, 51.2722f, 105.4223f, 101.1157f, 137.3569f, 135.9245f, - -91.7432f, -32.7591f, 373.1560f, 319.3955f, 437.4347f, 503.4907f, 608.7997f, 578.2119f, 502.0230f, - -70.3367f, -179.9099f, -239.7652f, 256.5794f, 269.9891f, 291.1810f, 333.6932f, 305.8695f, 278.4421f, - -38.0671f, -120.8247f, -186.4547f, -239.7784f, -303.6527f, -286.7954f, -300.0361f, -205.3057f, -184.5087f, - -134.2125f, -185.9339f, -13.8119f, -65.8529f, 19.0133f, -30.1823f, -58.4970f, -93.5678f, -55.1841f, - -20.3990f, -104.7817f, -249.4716f, -358.9899f, -499.3363f, -434.6861f, -133.7299f, -130.1813f, -59.0671f, - -26.7201f, -94.4739f, -228.6340f, -28.5857f, -81.7289f, -186.7961f, -62.0135f, -167.5409f, 51.9732f, - -76.8652f, -194.8085f, -392.5224f, -495.1741f, -106.3757f, -87.6781f, -40.9442f, -25.9922f, 6.6919f, - -141.6526f, -241.2805f, -161.8672f, -45.4915f, -24.1067f, 7.6906f, 3.7741f, 45.2149f, 42.3436f, - -76.2028f, -185.3649f, -353.8127f, -492.3104f, -348.1328f, -172.4144f, -108.0814f, -55.5374f, -10.8210f, - -88.1331f, -202.9139f, -371.2243f, -273.3005f, -107.5773f, -103.9134f, -45.1607f, -40.9613f, 31.8985f, - 157.9412f, 199.7964f, 203.2689f, 127.6304f, 6.7547f, -75.7475f, -130.0489f, -209.2208f, -228.8015f, - -44.6527f, -50.6749f, 107.6295f, 92.4422f, 79.8121f, 133.5672f, 52.5620f, -6.2270f, -43.2877f, - 261.9115f, 472.0228f, 456.3473f, 335.7553f, 289.8814f, 234.7976f, 206.1187f, 157.4174f, 120.7698f, - 155.2229f, 242.6315f, 377.1642f, 293.6065f, 226.0318f, 155.2748f, 156.4116f, 128.6701f, 98.5061f, - 74.5256f, 70.1303f, -53.6869f, -182.3488f, 106.1648f, 41.5585f, -37.0232f, 6.5336f, -75.1722f, - -31.2252f, -113.3890f, -244.5892f, 75.8334f, 233.5228f, 76.5742f, 8.2886f, -109.6154f, 29.9907f, - 199.0678f, 337.3158f, 432.8418f, 315.2969f, 366.8018f, 352.4917f, 361.4405f, 280.1715f, 187.7336f, - 53.4911f, 143.3279f, 208.4704f, 298.2910f, 261.7387f, 149.2119f, 115.7060f, 59.9002f, 32.6898f, - 118.3519f, 194.3090f, 56.3174f, -33.3258f, -48.8783f, -210.5418f, -188.4141f, -181.0565f, -298.4099f, - 91.1937f, 135.5274f, 26.3852f, -57.5649f, 66.0117f, -82.2194f, -94.6889f, -88.3680f, -188.1230f, - 119.8292f, 164.8051f, 60.2985f, -68.4990f, -150.8028f, -282.2156f, -282.8785f, -353.0452f, -396.4856f, - 120.5806f, 120.4464f, 62.5068f, -23.5466f, -183.4260f, -164.0083f, -233.7240f, -309.0768f, -85.4341f, - 26.4925f, 47.3529f, -53.5415f, -218.9011f, -56.8672f, -174.1118f, -201.0902f, -193.1382f, -284.6390f, - 50.9597f, 20.8274f, -88.6445f, 17.8450f, 185.2710f, 12.4814f, -62.7698f, -74.9989f, -191.3486f, - 83.3881f, 63.9878f, -27.8680f, -181.7226f, -342.0545f, -62.8876f, -178.1327f, -229.1320f, -18.6240f, - 85.1419f, 45.8095f, 15.3667f, 69.0366f, -75.9137f, -34.4539f, -88.4330f, -163.4411f, 19.3370f, - 81.8880f, 213.5459f, 222.3313f, 109.1533f, 47.1884f, -17.2578f, -19.4486f, 3.7457f, -32.8905f, - 22.8266f, 54.6145f, 70.9314f, -2.0301f, 104.3592f, 45.7102f, 41.3375f, 82.5320f, 77.2795f, - 210.7176f, 326.3462f, 356.6618f, 280.9097f, 240.9705f, 212.4392f, 230.9905f, 220.8317f, 250.9306f, - 59.6089f, 218.2601f, 340.5622f, 179.8372f, 86.7106f, 42.1021f, 73.5578f, 70.2340f, 71.3620f, - 61.9071f, 46.6476f, 111.0709f, -59.8230f, -105.9862f, 89.4424f, 34.0065f, 42.7793f, -22.3657f, - -71.5290f, 31.9224f, 46.2106f, 8.2769f, 5.2717f, 15.6736f, 45.9446f, 74.5921f, 72.2933f, - 63.1228f, 347.0971f, 255.3817f, 42.2624f, -13.4026f, 95.4917f, 190.7911f, 219.1920f, 207.8866f, - 63.7817f, 21.7322f, 237.9311f, 133.1283f, 19.5484f, 128.6760f, 26.4302f, 103.7761f, 85.3130f, - 39.2312f, 80.2880f, 7.1932f, -118.9054f, -41.8213f, -170.3956f, -190.1681f, -25.3174f, -119.5246f, - -33.4058f, 60.1838f, 52.1765f, -11.5418f, -17.6690f, -28.5228f, -40.5342f, -31.3702f, -37.5340f, - 95.6257f, 128.8044f, 3.7503f, -171.8902f, -331.7014f, -422.7089f, 30.8156f, 15.6229f, -103.6316f, - 76.5623f, 145.2620f, 106.4321f, -70.8798f, -192.7731f, -152.0614f, 107.2952f, 31.2426f, -23.0299f, - 0.9016f, -4.6471f, -96.0447f, -197.1141f, -39.1036f, -170.4243f, 8.3031f, -73.0702f, -168.4342f, - -86.2673f, -18.7660f, 13.9540f, -105.8362f, -72.7468f, -57.3178f, -42.7630f, 10.3291f, 27.6536f, - 83.1109f, 54.8163f, 28.1776f, -137.0164f, -242.1605f, -32.9744f, -141.6118f, 26.8712f, 17.8517f, - 35.5325f, 65.1065f, -1.1122f, -37.2264f, -38.7638f, -41.0658f, -18.6295f, 44.3877f, 57.2718f, - 101.1713f, 97.2361f, 67.3819f, 236.9884f, 158.4350f, 20.2720f, 23.0851f, -73.7010f, -124.8067f, - 44.9800f, -33.1049f, -21.2276f, 224.2546f, 49.9567f, 88.2466f, -23.1899f, -98.6740f, 50.9732f, - -24.3959f, 403.6523f, 511.0127f, 404.3978f, 440.2577f, 428.9172f, 401.8223f, 375.5111f, 321.4924f, - 15.1345f, 142.1195f, 295.8327f, 367.1741f, 284.5674f, 257.7681f, 257.3533f, 227.7437f, 300.6506f, - -44.9562f, -131.9449f, -296.8129f, -184.1626f, 153.8183f, 14.5297f, 172.3343f, 69.5618f, 2.2208f, - -22.2475f, -119.2772f, -205.2499f, 310.9423f, 177.0844f, 73.5587f, -1.5010f, -44.3403f, 96.9000f, - 27.7742f, 173.5793f, 311.4776f, 285.5815f, 427.9854f, 452.0145f, 477.2097f, 401.7775f, 316.6574f, - 52.6696f, 140.2801f, 215.3995f, 166.1714f, 292.6204f, 318.2898f, 341.5682f, 274.8850f, 196.1860f, - 51.5561f, 96.4057f, -0.0610f, -80.6567f, -175.2689f, -292.8310f, -100.7723f, -200.9591f, -247.1591f, - 96.6859f, 97.0977f, 35.4401f, 47.1563f, -76.2811f, -194.8284f, -34.9894f, -110.1535f, -169.8929f, - 30.4654f, 7.6447f, -108.2569f, -243.2014f, -383.8708f, -478.0505f, -162.0353f, -178.7682f, -249.4727f, - 135.4580f, 198.9998f, 81.4247f, -69.9475f, -181.4226f, -284.4768f, -29.8270f, -92.7044f, -189.7940f, - -40.1188f, -133.9427f, -295.2091f, -278.5829f, -103.4496f, -237.8449f, -74.7856f, -155.3338f, -248.5054f, - -47.4470f, -149.6037f, -292.4242f, 221.6694f, 98.4280f, -14.0849f, -138.2963f, -163.0445f, -19.4243f, - 79.5896f, 39.1792f, -58.2936f, -253.9809f, -422.3516f, -18.3412f, -2.7302f, -102.9275f, 43.5500f, - -17.9005f, -70.1182f, -104.1536f, -126.4881f, -219.3935f, -153.8877f, -270.2488f, 155.3837f, 114.2388f, - 188.3484f, 261.8459f, 266.6991f, 243.5570f, 172.7795f, 64.3333f, 45.3547f, 14.1479f, -58.3812f, - 42.3610f, 96.6123f, 113.8369f, 96.5219f, 138.7232f, 47.5273f, 42.4855f, 87.4416f, 115.5724f, - -5.4013f, 368.9961f, 386.7844f, 312.8328f, 294.8554f, 318.4847f, 330.7657f, 356.5357f, 348.3268f, - 113.9440f, 136.1339f, 283.1776f, 188.4109f, 151.5282f, 128.5029f, 167.5631f, 242.2409f, 260.3565f, - -13.3113f, 76.9204f, 83.0527f, -49.6054f, 32.9182f, 193.1624f, 242.1413f, 224.6298f, 146.4784f, - 49.3300f, 80.8438f, 67.2940f, 65.3665f, 141.4567f, 78.9471f, 115.6802f, 154.3108f, 177.7814f, - -2.1684f, 97.5184f, 210.7061f, 182.4635f, 248.3353f, 312.9833f, 448.6478f, 502.5403f, 436.6044f, - 10.4934f, 93.6577f, 144.0456f, 109.2677f, 171.7553f, 160.5641f, 247.6292f, 348.4738f, 372.3836f, - 62.0393f, 66.4595f, -22.8432f, -154.2429f, -311.1715f, -269.7167f, 30.1724f, -82.4276f, -130.4250f, - -1.8658f, -10.8456f, -5.2486f, -28.7596f, -130.9176f, -235.6978f, 116.9998f, 34.2436f, -79.9885f, - 32.1393f, -12.8439f, -142.0784f, -272.6861f, -469.8031f, -450.3773f, 42.8701f, -56.9028f, -113.0164f, - 44.2438f, 0.5177f, -95.0709f, -229.7896f, -388.2228f, -193.8794f, 161.5550f, 62.3152f, 16.3412f, - -21.7573f, -96.5696f, -171.8374f, -270.5201f, -389.2275f, -187.1907f, 4.2880f, -69.4009f, -139.6222f, - -59.1336f, -137.9044f, -127.8821f, -82.4177f, -132.8951f, 55.2591f, 25.2046f, 165.8443f, 176.7896f, - 13.1713f, -65.9463f, -177.8707f, -363.8923f, -474.4700f, 53.7845f, 194.7626f, 99.8684f, 126.7437f, - 26.4565f, 54.2781f, -5.8084f, -213.5320f, -186.7453f, 6.5259f, 119.4530f, 196.2039f, 188.0246f, - -12.3442f, -52.3945f, 174.0135f, 50.5399f, -55.6784f, -95.2558f, -196.2955f, -198.2056f, -234.0973f, - 23.6446f, -54.5462f, -134.7219f, 193.6175f, 178.7128f, -0.9450f, 7.7510f, -88.8611f, -200.7396f, - 154.0881f, 689.2718f, 650.6971f, 522.8596f, 436.5025f, 314.9000f, 250.7824f, 187.1628f, 148.5410f, - 83.9959f, 202.8234f, 359.2843f, 411.3538f, 425.6817f, 308.8017f, 206.3666f, 113.2320f, 60.3929f, - -21.1689f, -91.1694f, -252.6742f, -235.0333f, 249.5398f, 114.6655f, -0.7796f, -65.2547f, -172.8182f, - -30.5567f, -123.2070f, -309.0227f, -44.0884f, 320.4634f, 157.6161f, 61.6828f, -45.3025f, -139.1032f, - 206.4974f, 723.0883f, 782.3015f, 479.5419f, 242.9557f, -15.8222f, -162.4184f, 134.4517f, 319.9661f, - -41.0232f, -148.1419f, -92.0839f, 478.0700f, 348.8458f, 292.6417f, 221.8808f, 139.1332f, 83.7320f, - -6.8324f, -77.6477f, -56.3444f, 19.3478f, -110.6184f, -96.5414f, -225.9007f, -330.6617f, -424.5623f, - 26.9337f, -4.4548f, -148.8763f, -80.3516f, 81.8311f, -110.8947f, -150.9911f, -162.4880f, -279.5481f, - 15.4135f, -1.8583f, -56.8319f, -146.1688f, -266.5346f, -355.1809f, -419.6793f, -456.7536f, -416.2208f, - 112.1756f, 88.2059f, 26.0259f, -86.2333f, -258.4741f, -66.9660f, -164.5662f, -250.9281f, -276.0475f, - -51.5026f, -135.9180f, -210.3467f, -175.0943f, -7.7200f, -1.5529f, -138.1960f, -292.0197f, -364.5311f, - 1.6098f, -29.3697f, -112.8375f, -233.4716f, 123.6812f, 20.4676f, -81.0632f, -116.0258f, -218.5294f, - -34.1878f, -103.0825f, -139.6876f, -229.9859f, -246.3806f, -96.8411f, -204.4168f, -321.0166f, -418.4522f, - 27.1891f, -2.9717f, 21.2254f, -122.5167f, -201.1399f, 36.0115f, -56.9192f, -106.8464f, -192.5580f, - 77.7097f, 24.2840f, 152.6398f, 61.5673f, -54.9359f, 27.7810f, -85.7347f, -79.4392f, -81.0366f, - 59.2315f, 15.7636f, 128.6461f, 63.2966f, -11.4618f, 18.7670f, -58.2229f, 42.0642f, 49.7434f, - 247.9855f, 413.3163f, 345.0402f, 192.3750f, 145.4847f, 121.6956f, 123.6805f, 107.2007f, 94.2462f, - 104.2558f, 282.0381f, 490.4723f, 344.7097f, 244.1310f, 96.7224f, 2.9896f, -31.7180f, -23.3323f, - -22.5118f, -53.8832f, -113.5013f, -234.2837f, -4.7630f, -0.8369f, -15.3972f, 57.4113f, 45.6486f, - -41.6155f, -134.7804f, -200.2841f, 179.2444f, 29.8214f, 36.0840f, -106.4028f, 151.5328f, 102.1621f, - 141.5078f, 201.5805f, 79.4698f, -159.8402f, -279.6548f, -324.4731f, -129.3751f, 72.2403f, 81.4769f, - -45.8403f, -152.7728f, -116.5580f, 262.2678f, 114.2470f, 210.0651f, 100.2266f, 64.9777f, -14.6634f, - -39.9272f, -124.8000f, -75.7294f, -110.6360f, -223.7299f, -102.2257f, -226.1053f, -85.4944f, -173.4764f, - -91.6640f, 30.6543f, 4.1065f, -65.4408f, -39.3890f, -89.5364f, -102.5911f, -125.5036f, -48.1974f, - 27.2660f, 19.3735f, -66.4810f, -233.9350f, -388.9383f, -229.7098f, -102.6715f, -201.6806f, -177.6036f, - 153.9685f, 141.8902f, 89.4281f, -53.1892f, -209.9941f, 8.0810f, -71.3509f, -135.8233f, -78.6157f, - -48.4004f, -143.6756f, -250.1705f, -343.5184f, -330.9693f, -81.7413f, -159.8642f, -192.9882f, -201.0525f, - -49.7401f, -133.3727f, -211.5154f, -166.0789f, -199.3352f, -4.0380f, -98.3591f, -184.6634f, -113.6087f, - 32.7128f, -26.7812f, -78.3951f, -264.0457f, -339.2219f, 40.1904f, -121.6728f, -51.6241f, -125.0696f, - 1.8568f, -67.7562f, -73.4413f, -115.9242f, -245.2522f, 77.1352f, -22.1839f, 2.7514f, -4.3203f, - 19.0296f, -62.4543f, 21.8088f, 217.8850f, 43.1886f, 12.7766f, -121.5772f, -171.9543f, -180.7850f, - -0.3986f, -96.1580f, -120.0616f, 336.5914f, 176.9306f, 54.3062f, -66.4501f, -138.8101f, -90.7495f, - 109.0295f, 377.1798f, 641.5853f, 577.4881f, 571.3625f, 438.8002f, 310.6432f, 204.9863f, 132.6160f, - -76.9013f, -15.0371f, 664.7503f, 520.0686f, 489.1051f, 371.2256f, 270.3431f, 196.9454f, 166.5973f, - -42.2498f, -134.3667f, -336.4376f, -457.6409f, 173.4562f, 138.1508f, 34.3921f, -18.1609f, -85.9677f, - -20.8727f, -125.4622f, -192.7956f, 434.5861f, 290.6413f, 142.0824f, 77.1623f, -13.2305f, -29.4274f, - 178.7104f, 373.0402f, 459.7581f, 474.3989f, 557.5211f, 569.2194f, 525.4768f, 358.3187f, 210.4229f, - -26.8194f, 77.7574f, 350.3222f, 445.4183f, 524.4524f, 462.1511f, 381.7293f, 289.9692f, 204.0649f, - 47.7632f, 17.1803f, -105.1057f, 10.4223f, -60.5128f, -219.3625f, -119.8198f, -230.6158f, -301.9153f, - 60.2078f, 16.2198f, -62.5382f, 98.4891f, -50.3729f, -119.2299f, -183.9794f, -286.1903f, -145.0719f, - 52.5866f, 72.1675f, -32.1273f, -162.5446f, -282.0867f, -356.6873f, -196.9938f, -290.2792f, -343.8752f, - 58.1756f, 83.5942f, -32.7989f, -128.5429f, -265.7008f, -326.2490f, -166.5130f, -258.2744f, -31.7978f, - -49.8436f, -148.3240f, -287.2763f, -389.7832f, -131.7967f, 6.5863f, -71.1640f, -182.3324f, -272.4139f, - -32.6407f, -113.2022f, -199.3120f, -231.3794f, 5.2103f, 172.0263f, 60.2526f, -14.7182f, -108.9096f, - 27.2077f, -23.7367f, -95.9858f, -283.8613f, -409.0134f, -31.3871f, -148.6489f, -208.9727f, -274.8275f, - 69.4333f, -0.7143f, -57.0494f, -261.8966f, -366.3107f, 188.4734f, 53.9671f, 24.5447f, 25.3948f, - -4.4283f, 5.6792f, 301.6043f, 172.8969f, 55.6507f, -7.7604f, -81.7609f, -49.2316f, -63.0654f, - -12.4033f, -97.3530f, 37.2340f, 215.5548f, 48.4286f, 11.6666f, -133.9813f, 32.1272f, -33.6059f, - 57.9103f, 293.2768f, 591.9909f, 431.5314f, 338.6320f, 236.6151f, 185.2476f, 175.1540f, 156.0322f, - -63.6185f, -100.3640f, 351.1546f, 428.5004f, 353.7403f, 293.3142f, 196.1020f, 152.1965f, 114.6518f, - -20.0721f, -100.8514f, -174.7278f, -314.6773f, -143.5646f, 298.1905f, 181.1825f, 142.0341f, 71.3729f, - -64.7951f, -146.2021f, -143.2170f, 33.9854f, 13.8056f, 156.0337f, 163.4005f, 334.1913f, 325.3497f, - -79.9064f, -121.2133f, 229.6626f, 303.8755f, 306.8218f, 415.8466f, 436.8824f, 486.2830f, 451.8081f, - -67.6130f, -122.0631f, 41.7635f, 134.7727f, 156.2778f, 308.4236f, 340.0357f, 434.5742f, 391.1108f, - -2.6037f, -46.9405f, -151.3320f, -160.0405f, -239.8193f, -368.3138f, -88.0921f, -150.1500f, -191.7920f, - -79.3309f, -112.6262f, -20.0215f, -129.1640f, -35.3227f, -69.4806f, -159.3188f, -223.7142f, -132.1779f, - 21.9835f, -11.3374f, -106.7910f, -244.8813f, -406.4640f, -311.7320f, -96.4711f, -182.5312f, 57.8956f, - 25.8713f, -0.7151f, -79.9440f, -80.0111f, -224.4878f, -136.2209f, -22.1062f, -137.4635f, -22.6838f, - -17.4638f, -88.0421f, -183.7897f, -361.0791f, -194.1127f, 29.9571f, -12.3110f, 17.3506f, -52.9132f, - -108.1431f, -191.9295f, -193.9598f, -196.0948f, -165.6809f, -79.0258f, -53.5949f, 30.1916f, 37.3619f, - 10.0420f, -70.0023f, -183.1197f, -393.7681f, -492.0758f, 102.2096f, -13.6587f, -51.6821f, -101.1752f, - -25.8195f, -90.5090f, -174.4579f, -208.3670f, -308.3139f, -74.5783f, -38.9631f, -104.3672f, 142.1591f -}; const Word16 dico1_isf_fx[] = {/*Qlog2(2.56)*/ @@ -14868,265 +8961,6 @@ const Word16 dico1_isf_fx[] = /*-------------------------------------------------------------------* * 1nd stage, 2nd split: ISF9 to ISF15 *-------------------------------------------------------------------*/ -const float dico2_isf[] = -{ - 530.1115f, 512.7983f, 443.8771f, 306.1447f, 171.2327f, 70.8250f, 56.8183f, - 248.5479f, 252.9719f, 260.5429f, 221.7305f, 172.6754f, 84.8419f, 141.5120f, - 166.9014f, 171.9745f, 263.4265f, 204.8570f, 129.5061f, 45.8705f, -162.9417f, - 47.0761f, 115.3926f, 182.9788f, 181.5048f, 89.7111f, 17.3276f, -86.2999f, - -57.3148f, -93.7950f, 58.2071f, 31.0844f, 152.3217f, 108.6931f, 41.3677f, - -163.1767f, -217.0378f, 215.5667f, 199.7393f, 91.8320f, 56.3535f, -37.1534f, - 16.9371f, 75.2105f, 106.8429f, 58.4518f, 26.0167f, 13.3113f, -106.5544f, - -16.6336f, -49.0904f, 66.7054f, 162.6404f, 110.2851f, 24.4686f, -138.4124f, - -145.3240f, -33.7683f, -134.5548f, -42.3167f, -36.8413f, -70.9451f, -34.7360f, - -234.5519f, -328.1575f, -78.2304f, 181.4482f, 100.8272f, -4.3886f, -98.7986f, - -18.7314f, 128.6640f, 38.0685f, -113.4033f, -211.9919f, -310.5748f, -138.0866f, - -222.6271f, -45.5429f, 72.9616f, 3.9276f, -52.1214f, -162.3586f, -29.6134f, - -241.3416f, -50.3196f, -96.3331f, -145.0456f, 17.4087f, -29.8105f, 108.3555f, - -399.1142f, -421.4348f, 49.0965f, 185.0085f, 99.2830f, 49.7543f, 20.2726f, - -109.7596f, 29.7695f, -65.3607f, -141.1745f, -110.3974f, -215.1475f, -110.3518f, - -46.4209f, -20.4624f, -0.5266f, 52.1919f, -12.3074f, -79.8395f, -162.1720f, - 415.6808f, 323.0418f, 248.6461f, 267.3440f, 181.1869f, 81.5855f, 4.8347f, - 188.1995f, 162.5893f, 175.4467f, 144.9775f, 131.0177f, 114.8023f, 75.6850f, - 280.8494f, 225.0358f, 142.4128f, 52.8503f, 44.0619f, 35.6548f, -77.7252f, - 116.2722f, 68.6422f, 192.5792f, 142.9262f, 75.7274f, 63.5846f, 13.9314f, - -13.4854f, -92.0420f, -101.3018f, -13.9503f, -1.5377f, 38.4848f, 59.2146f, - -38.0921f, -119.6284f, -10.4956f, 88.8682f, 35.1836f, 43.2013f, -33.7051f, - 35.4547f, 5.0305f, -82.4376f, -100.9264f, -41.5222f, 33.5725f, -24.8381f, - 28.3963f, -13.4840f, -22.4480f, -11.9734f, 63.1961f, 13.8177f, -75.0030f, - -42.4115f, -130.9516f, -245.5204f, -25.9129f, -23.6896f, -49.8110f, 125.7094f, - -193.2334f, -261.3991f, -284.3770f, 75.4337f, 11.9830f, -86.1044f, 47.5069f, - 126.4967f, 37.0484f, -34.7501f, -35.5687f, -159.6523f, -277.2735f, -60.1203f, - -0.1156f, -91.4527f, 35.7808f, 12.8593f, -134.0804f, -237.8749f, -85.9030f, - -134.0644f, -159.5199f, -185.8239f, -255.9559f, -59.8235f, 31.9001f, 86.5795f, - -191.3466f, -290.9137f, -99.7657f, 18.9475f, -18.6283f, 52.5484f, -49.6458f, - 46.4725f, -26.2220f, -128.3100f, -152.1911f, -106.3316f, -212.7650f, -21.8051f, - -22.1899f, -50.6587f, -4.0987f, -2.7160f, -63.9780f, -18.1671f, -8.5809f, - 384.5044f, 415.7100f, 375.3419f, 221.7875f, 82.0605f, -10.5889f, 6.1831f, - 316.8826f, 269.9225f, 294.6225f, 200.5877f, 87.3740f, -13.6950f, 64.9923f, - 258.7122f, 274.8100f, 241.2115f, 150.6316f, 22.2879f, -82.2525f, -100.3677f, - 199.2028f, 140.2225f, 163.4630f, 153.3341f, 35.3954f, -56.3718f, -6.8714f, - -75.2059f, -12.0741f, -10.5019f, 87.1330f, 34.8811f, -55.7089f, 9.3485f, - -43.9131f, -38.3306f, 184.0508f, 124.7862f, 72.2168f, 1.2740f, 68.2432f, - 98.5331f, 56.9808f, -18.2386f, 106.3234f, 18.7400f, -82.2337f, -91.2981f, - 56.8543f, 26.8486f, 79.2505f, 142.2529f, 26.5547f, -20.1961f, 20.0251f, - -101.2805f, -186.8430f, -272.0712f, -136.2303f, -296.2366f, -195.7741f, 24.4320f, - -195.6167f, -300.4726f, -112.7403f, 30.7313f, -121.6459f, -194.0080f, -41.2612f, - 98.2285f, 20.7275f, -91.7240f, -183.2970f, -349.5879f, -345.3007f, 56.7721f, - -162.4512f, -215.0840f, 54.6896f, -51.9437f, -204.1752f, -302.6133f, 17.1211f, - -127.3559f, -165.3954f, -278.6780f, -194.2370f, -33.4488f, -168.4021f, 38.6555f, - -295.7049f, -301.6402f, -62.3113f, -29.8345f, -17.8150f, -12.4093f, 147.9211f, - 33.3799f, -13.6109f, -78.2303f, -156.7363f, -259.0581f, -406.3858f, -96.3685f, - -70.3287f, -128.8603f, -35.8870f, -146.8926f, 10.7114f, -71.6699f, -42.8127f, - 499.4422f, 424.3595f, 305.0398f, 196.0019f, 126.5760f, 63.9795f, 61.1516f, - 266.3734f, 181.9720f, 175.4860f, 108.0995f, 56.9864f, 10.7695f, 159.6035f, - 247.9333f, 184.5145f, 152.3734f, 41.9318f, -90.6959f, -210.2689f, -54.1531f, - 76.7519f, 154.5846f, 129.7565f, 83.0209f, 81.7690f, -11.2691f, -31.6182f, - 58.5084f, -37.0541f, -121.7467f, 29.7202f, -30.0062f, -124.9186f, -19.6730f, - 18.1514f, 3.4725f, 18.4977f, 68.3406f, 54.2768f, 11.6546f, 150.1885f, - 85.0507f, 80.6332f, -9.5051f, -97.5608f, -37.4477f, -107.8952f, -71.4574f, - 10.1458f, 46.5077f, 14.7448f, 5.4868f, -1.5563f, -51.9743f, -20.1740f, - -186.2883f, -239.8358f, -385.3964f, -279.2732f, -246.3584f, -317.5150f, 77.9409f, - -290.8109f, -394.1977f, -416.1625f, -291.0747f, -246.4900f, -66.6275f, 7.0910f, - -53.3572f, -98.2187f, -188.6130f, -239.5862f, -382.9682f, -469.8791f, 4.8130f, - -236.2064f, -299.8000f, -219.3447f, -267.9179f, -424.8446f, -200.9900f, 22.5746f, - -78.8698f, -167.2648f, -305.5687f, -418.8565f, -37.5231f, -91.3323f, -69.9264f, - -187.4632f, -276.9708f, -417.8298f, -350.3085f, -51.2638f, -35.7869f, 125.5794f, - -56.7695f, -75.4877f, -200.1077f, -284.6027f, -223.5758f, -298.6907f, -81.9158f, - -129.2158f, -228.6000f, -204.9319f, -246.4877f, -109.8989f, -81.0975f, -118.3144f, - 455.1133f, 431.3343f, 366.9250f, 323.3162f, 279.7654f, 166.3696f, 60.4075f, - 2.2427f, -42.4551f, 320.2264f, 303.9626f, 161.9218f, 44.0682f, -10.4932f, - 148.9215f, 132.3074f, 122.6564f, 103.3307f, 47.4590f, -3.4202f, -185.0445f, - -145.6115f, 18.4827f, 228.0817f, 172.5267f, 38.5907f, -90.1562f, -43.9888f, - -193.6085f, -14.9922f, -111.3547f, 102.4688f, 119.0297f, 66.3613f, 1.6199f, - -229.1052f, -217.2523f, 26.9406f, 25.7113f, 183.7947f, 138.0997f, 4.9246f, - -54.0735f, 27.3595f, -6.9751f, 41.3897f, 26.0272f, 65.3047f, -117.9287f, - -173.6861f, -55.0424f, 72.3582f, 74.4772f, 59.1275f, 32.2629f, -52.0966f, - -100.2805f, -203.3997f, -281.1161f, -77.1917f, 52.4149f, -18.1558f, -70.9170f, - -319.7560f, -456.2388f, -303.5891f, 199.8376f, 140.0785f, 37.0556f, -44.1020f, - 53.3338f, -0.8373f, -29.0162f, -53.8806f, -156.4895f, -44.6551f, -144.9031f, - -94.4005f, -181.9505f, 79.8505f, 87.0198f, -12.1349f, -82.6727f, -75.0313f, - -207.6459f, -248.8868f, -181.9412f, -267.7931f, 100.0395f, 108.0778f, -54.3928f, - -445.8355f, -486.1193f, -148.8008f, -29.2654f, -20.9138f, 5.3055f, 34.4656f, - -121.3450f, 45.0588f, -55.9190f, -194.9437f, -134.0013f, 48.6244f, -162.3284f, - -240.5215f, -57.3889f, -52.6141f, 16.9554f, -1.6593f, 47.0915f, -144.2315f, - 326.1222f, 306.0203f, 250.4581f, 152.3629f, 138.5136f, 136.6061f, 24.8198f, - 27.9826f, 75.7094f, 172.8544f, 182.3980f, 170.1943f, 85.7041f, 145.3514f, - 181.4035f, 144.2242f, 74.8556f, 1.4272f, -61.0836f, -28.1913f, -88.2541f, - 22.2453f, 80.4679f, 118.3400f, 80.0672f, 73.2458f, 39.5447f, 103.6288f, - -15.5237f, -80.2624f, -190.5397f, -72.0487f, 107.7333f, 24.8407f, -9.9839f, - -84.5773f, -169.2563f, -115.8907f, 53.5535f, 128.0731f, 120.4292f, -112.8952f, - 147.5641f, 31.5040f, -120.2366f, -181.4932f, 22.0867f, -14.3306f, 88.8276f, - -38.8943f, 9.5208f, -14.2124f, -59.1263f, 77.8884f, 3.1099f, 55.9227f, - -166.2941f, -272.4271f, -413.5079f, -51.9034f, 151.3775f, 62.8211f, 125.4737f, - -251.4761f, -399.5025f, -496.4470f, 15.1387f, 25.6129f, -47.9447f, 27.2588f, - 145.3730f, 69.2023f, -67.5157f, -217.2383f, -216.1160f, -118.5795f, -73.6690f, - -45.7917f, -144.0127f, -166.1374f, -47.5218f, -180.4311f, -59.2610f, -28.7005f, - -253.6976f, -332.1650f, -464.5507f, -299.7163f, 194.1511f, 140.7432f, 86.8261f, - -311.8663f, -444.9106f, -568.2597f, -74.2214f, 168.0938f, 91.5796f, 69.8801f, - 16.2576f, -36.8680f, -158.1385f, -270.2551f, 14.7501f, -79.0270f, -96.1519f, - -66.0490f, -143.0125f, -113.3699f, -34.3890f, -25.0086f, 12.5482f, -114.0537f, - 394.4650f, 360.5732f, 366.5918f, 277.4828f, 181.5850f, 89.9984f, 133.6822f, - 84.7064f, 117.2216f, 411.7273f, 263.7720f, 26.7575f, -178.8131f, -69.9364f, - 30.5200f, 177.1075f, 123.5531f, 7.2231f, -92.4543f, -193.6012f, -94.9796f, - 65.2717f, 8.1559f, 165.7135f, 84.0440f, -35.7379f, -118.5377f, -66.5232f, - -113.0977f, -31.5885f, -27.3286f, -26.0692f, 15.5114f, 21.2791f, -23.2414f, - -138.0497f, -166.9724f, -35.1916f, 20.7464f, 36.6236f, 3.5627f, 20.9882f, - -11.0900f, 124.4114f, 110.4337f, 5.6888f, -93.7853f, -22.5026f, 30.8623f, - -29.4226f, -47.2009f, 89.3512f, 13.6996f, 22.5131f, 2.3075f, -51.7825f, - -137.2009f, -200.8273f, -290.6017f, -325.7113f, -275.5810f, -53.4554f, 64.1025f, - -438.9569f, -542.2731f, -412.1423f, -89.9884f, -28.4069f, 15.6647f, 13.8672f, - -63.4932f, -90.8672f, -207.9037f, -306.7191f, -456.9608f, -272.1003f, 37.6908f, - -307.9492f, -374.7438f, -96.2506f, -168.0490f, -243.8695f, -64.5296f, -3.1349f, - -334.4494f, -210.9558f, -246.0072f, -354.2072f, -131.6393f, -27.1645f, 29.5091f, - -366.0860f, -407.0811f, -257.3381f, -286.1801f, -81.4441f, 77.6511f, -10.1480f, - -204.4162f, 30.5330f, -38.3922f, -195.6373f, -339.5407f, -347.7475f, -31.6897f, - -243.6551f, -274.7409f, -17.3959f, -136.0264f, -9.8248f, 34.1080f, -72.7180f, - 392.4115f, 321.3055f, 213.3703f, 97.3249f, 35.2497f, -8.7278f, 80.8223f, - 116.4944f, 155.2541f, 148.9464f, 124.6089f, 78.0606f, 24.1574f, 118.5191f, - 184.6981f, 148.0850f, 51.9562f, -96.3499f, -247.0329f, -172.3801f, 29.4305f, - 110.9024f, 81.4259f, 152.8654f, 45.1114f, -9.8257f, 17.3401f, 36.9414f, - -27.9329f, 30.8783f, -37.1648f, -24.5270f, -50.2764f, -114.4973f, 79.3175f, - -64.1897f, -136.2614f, 44.8825f, 47.6375f, 26.8591f, -0.2729f, 147.6527f, - 135.7539f, 66.4931f, 38.8074f, 22.5599f, -70.1020f, -117.9085f, 73.4314f, - -74.1601f, -0.9165f, 58.6634f, 8.8413f, -20.0486f, -4.3857f, 84.5215f, - -240.3710f, -336.9822f, -425.7879f, -557.5921f, -313.4519f, -18.6503f, -2.2911f, - -375.5428f, -498.5622f, -604.7405f, -284.0899f, -22.5439f, 21.7506f, 87.1215f, - -48.5853f, -99.7448f, -219.1610f, -385.9877f, -498.9206f, -58.0072f, -32.0391f, - -187.4733f, -257.8106f, -348.0662f, -465.0402f, -523.0202f, -126.9367f, 7.9922f, - -242.4066f, -358.0976f, -506.2984f, -527.3067f, 103.2345f, 112.8789f, 19.5721f, - -329.7812f, -399.2909f, -525.3788f, -519.3241f, -114.6023f, 18.0531f, 108.4014f, - -101.3959f, -182.8774f, -323.7689f, -459.4139f, -208.2967f, -218.5872f, -30.6618f, - -83.9128f, -188.9391f, -321.0572f, -481.5454f, -309.1473f, 5.7541f, -53.7133f, - 508.3954f, 514.6412f, 492.8828f, 409.4624f, 279.6907f, 139.5316f, -25.0946f, - 225.7716f, 321.9763f, 361.4909f, 313.2012f, 246.2739f, 141.2217f, 40.0333f, - 183.5499f, 361.1524f, 299.5782f, 200.8792f, 127.5401f, 74.2915f, -43.7510f, - 87.8314f, 192.1731f, 193.5542f, 170.6556f, 233.6155f, 150.0142f, -17.3959f, - 16.6972f, 31.8549f, -16.4255f, 68.2118f, 202.5792f, 133.4167f, -24.8757f, - -118.5934f, -60.2884f, 62.2425f, 224.9154f, 157.3277f, 86.2001f, 127.8335f, - 83.3985f, 95.4353f, 47.7289f, -24.4079f, 122.0239f, 35.9347f, -62.3200f, - 85.0292f, 81.2156f, 121.2625f, 104.6399f, 119.6594f, 126.2998f, -77.7217f, - -111.4887f, -105.1822f, -30.9685f, -48.2729f, -55.9544f, -59.5831f, 92.3539f, - -80.0937f, -149.8609f, -166.3557f, 134.5224f, 22.8807f, -72.2311f, -71.7019f, - -106.2400f, 96.5443f, 49.1033f, -82.1511f, -202.4001f, -182.6395f, 30.4307f, - -38.6498f, -47.0332f, 196.2347f, 62.6390f, -109.4412f, -217.5327f, 118.6330f, - -165.3289f, -6.5073f, -110.5468f, -172.9718f, 83.9014f, 82.6244f, -54.8262f, - -220.1304f, -267.2490f, -88.9432f, 199.2986f, 140.8517f, 50.8656f, 126.1685f, - -167.2625f, 130.8662f, 38.2409f, -25.2887f, 14.1618f, -84.0247f, -96.2550f, - -141.5362f, 19.9235f, 142.0336f, -6.1892f, -91.4426f, 58.7228f, -64.2743f, - 356.9441f, 345.0619f, 293.3749f, 255.2251f, 264.2440f, 181.1552f, -59.9296f, - 246.4391f, 212.9810f, 208.9891f, 281.1677f, 232.7401f, 140.5526f, -31.7890f, - 305.7318f, 278.3117f, 199.8758f, 171.6015f, 133.0515f, 98.0317f, -152.6052f, - 194.0116f, 162.7764f, 97.4355f, 145.3808f, 115.4215f, 67.7161f, -75.3193f, - 50.0116f, -43.0169f, -150.4608f, 36.4008f, 15.3428f, 67.7103f, -90.2827f, - 84.1801f, -22.9641f, -98.8488f, 180.4238f, 151.9562f, 59.9903f, 26.9906f, - 177.5510f, 105.3890f, -1.4605f, -131.7380f, -19.1906f, 90.9329f, -125.9315f, - 119.9137f, 55.8859f, 20.5790f, 85.2794f, 50.1218f, 92.1433f, -60.8729f, - -14.4439f, -72.6866f, -93.8542f, -160.4042f, -42.8567f, 3.3977f, 156.0409f, - -54.5578f, -142.4629f, -245.2400f, 100.6745f, 148.4848f, 83.6861f, 108.3569f, - 51.3106f, 177.4475f, 69.0944f, -111.1996f, -202.9647f, 42.3005f, -83.6978f, - 30.1802f, -55.2034f, 78.5647f, -47.9833f, -191.5273f, -51.2293f, 23.2575f, - -5.5372f, -75.8171f, -203.4011f, -289.5156f, 106.7613f, 141.4280f, -13.0810f, - -141.4010f, -221.2458f, -112.2780f, -89.1527f, 63.0527f, 92.4026f, 123.8935f, - -105.1256f, 76.2826f, -29.3279f, -146.3319f, -79.8275f, 4.2937f, 30.2187f, - -50.0448f, -103.1965f, -61.1121f, -87.1858f, -185.4814f, 103.5567f, 10.4906f, - 483.7709f, 447.9613f, 357.9065f, 269.2391f, 168.5860f, 81.9800f, -109.5565f, - 312.3829f, 259.3732f, 343.4722f, 283.4192f, 160.6555f, 62.4472f, -64.0786f, - 177.4189f, 268.0235f, 209.2622f, 107.3129f, 57.2866f, 17.7874f, 43.3733f, - 118.3413f, 189.8245f, 200.1482f, 138.5254f, 93.9936f, 70.6362f, -26.8448f, - 30.9857f, 35.8345f, 11.3604f, 57.5567f, 90.9626f, 20.1319f, 6.8180f, - -66.7255f, 112.7395f, 51.2972f, 171.5931f, 105.7922f, 1.0289f, -4.0888f, - 161.4374f, 94.0077f, 56.1444f, 67.9007f, 60.5061f, -0.5993f, 5.5333f, - 22.6145f, 84.7579f, 96.3842f, 85.7332f, 58.1820f, 68.5529f, -7.0445f, - 89.2476f, -2.9310f, -93.5695f, -80.5243f, -200.4216f, -74.7223f, 78.7932f, - -37.6075f, -106.1347f, -177.1898f, 12.7187f, -117.0868f, -224.7555f, 18.0710f, - -3.9184f, -42.1867f, -96.2393f, -135.5441f, -300.7351f, -209.1140f, 3.3638f, - -127.2731f, -168.0130f, -23.6514f, -125.4722f, -275.0623f, -116.8249f, 78.4081f, - -0.3268f, -109.2929f, -235.6517f, -163.5220f, -72.4472f, 7.1522f, -14.1950f, - -201.5567f, -203.8994f, -147.8831f, -113.7655f, -70.6486f, -37.9403f, 10.4648f, - -61.9333f, -122.2785f, -205.0957f, -87.3765f, -199.0248f, -324.4658f, -76.9686f, - -114.1747f, -179.4460f, -22.8678f, -120.9749f, -219.5858f, -55.7430f, -137.0347f, - 416.5525f, 356.2247f, 246.4192f, 151.7590f, 80.9813f, 33.7425f, -87.5668f, - 232.7198f, 199.8298f, 232.8017f, 197.1352f, 122.7492f, 47.7377f, -18.8607f, - 307.4450f, 336.4361f, 172.1882f, -36.4639f, -118.2980f, 12.7783f, -74.1220f, - 100.4413f, 183.0223f, 131.6807f, 19.7279f, 5.8399f, 116.3680f, -36.1637f, - 115.0603f, 28.3727f, -46.6535f, 9.9458f, 14.2165f, 8.8947f, 42.1125f, - -11.0346f, -1.0867f, -12.6705f, 44.5022f, 8.2729f, 72.2938f, 41.9570f, - 188.4713f, 119.1476f, 5.8222f, -109.1441f, -124.7922f, 20.2470f, 37.4241f, - 88.4120f, 18.1026f, 44.8535f, 28.1015f, -53.1688f, 52.0384f, -48.7039f, - 7.0136f, -80.7959f, -218.2056f, -230.6367f, -196.4241f, -188.3921f, 125.5651f, - -223.0832f, -308.3413f, -371.4560f, -67.3406f, -172.4539f, -210.1611f, 44.0330f, - 70.5425f, 5.5613f, -121.1026f, -250.2220f, -391.0280f, -78.8702f, 62.0359f, - -53.2080f, -153.5175f, -168.9519f, -200.2387f, -356.0113f, -56.1841f, -8.4833f, - 28.1989f, -103.3445f, -275.6373f, -372.5401f, -62.2850f, 20.7805f, 129.8285f, - -131.8626f, -230.9837f, -332.7086f, -149.5865f, -154.3909f, 21.7068f, 17.3275f, - 16.7300f, -61.8863f, -181.1369f, -350.5149f, -246.6439f, -61.1861f, -114.9767f, - -62.9283f, -50.0990f, -128.3168f, -223.8037f, -188.6130f, -48.9473f, 4.2910f, - 397.1338f, 354.0856f, 410.7048f, 392.6840f, 265.0492f, 133.1239f, -39.9595f, - 140.3398f, 130.2926f, 612.1718f, 513.2461f, 282.4946f, 41.1820f, 3.7939f, - -25.5253f, 283.5953f, 206.7656f, 117.4847f, 85.9801f, 16.9447f, -106.7023f, - -199.2065f, 170.3263f, 280.7031f, 221.1866f, 139.8684f, 69.7774f, 44.7026f, - -218.6125f, 116.3745f, 51.8822f, -46.6960f, 133.6225f, 87.8249f, 5.3826f, - -351.2338f, -39.4894f, 84.6148f, 241.0717f, 156.3851f, 57.0277f, -22.5485f, - -16.1558f, 137.3482f, 31.9090f, -76.7114f, 15.3505f, 47.2591f, -65.0792f, - -82.6497f, 23.1536f, 174.7281f, 111.0391f, 165.1666f, 97.6276f, -66.0758f, - -144.8786f, -188.8722f, -232.9240f, 11.8115f, -15.8240f, 97.1230f, 8.4134f, - -145.3324f, -253.9705f, -310.2223f, 186.1852f, 173.7029f, 84.4147f, -31.0347f, - -137.6416f, 107.5353f, 6.4667f, -172.8744f, -362.7197f, 36.0251f, 7.3423f, - -273.1752f, -271.7551f, 168.5304f, 103.1478f, -19.2394f, -121.0773f, 71.0605f, - -382.1200f, -84.7432f, -167.9304f, -156.0550f, 39.5436f, 102.1275f, 28.0496f, - -362.7133f, -347.0801f, -139.5875f, -5.2563f, 181.0231f, 147.5667f, 92.1709f, - -322.5983f, 22.0118f, 11.8984f, -116.7982f, -140.8088f, -50.1710f, -20.0495f, - -342.8153f, -116.9352f, -43.2698f, 29.1059f, 25.4655f, 14.1526f, 1.1041f, - 319.3257f, 143.9371f, -9.8398f, 138.1817f, 272.2951f, 230.7682f, -67.6844f, - 120.5561f, 82.8050f, 86.9118f, 293.3890f, 188.8921f, 54.7609f, -21.7199f, - 231.6328f, 148.0905f, 27.2085f, -3.2337f, 100.6721f, 70.2593f, 42.8315f, - 64.4154f, -17.9857f, 99.5439f, 116.0344f, 85.7395f, 106.6537f, 41.0177f, - 62.6236f, -27.4056f, -139.7237f, -70.5707f, 148.2318f, 128.9077f, 124.7000f, - -92.9236f, -144.0688f, -77.1586f, 288.9071f, 226.4347f, 124.6281f, -55.6669f, - 78.3503f, 42.4807f, -79.0042f, -178.3122f, 128.1446f, 107.8855f, -55.1806f, - 79.1238f, 66.4433f, 43.2504f, 16.2992f, 80.8281f, 140.7251f, 73.5809f, - -134.6119f, -155.8599f, -200.3194f, -90.9865f, 253.7969f, 164.9683f, 31.5576f, - -248.1197f, -375.5200f, -476.6351f, 180.7157f, 210.6575f, 79.8609f, 81.7351f, - 78.7261f, -9.7665f, -75.8617f, -194.4922f, -307.4282f, 75.4347f, -56.0501f, - -175.4331f, -210.0029f, 75.9892f, -41.3638f, -129.4197f, 26.7040f, 24.1293f, - -89.1388f, -186.3199f, -327.9780f, -225.0781f, 123.8019f, 49.8056f, 110.5614f, - -262.0009f, -365.9398f, -315.0958f, -44.6833f, 152.6366f, 130.9091f, -24.3555f, - 96.1914f, 0.9431f, -122.7709f, -265.0437f, -118.4077f, 70.4388f, -34.3324f, - -41.7155f, -106.2450f, 35.3080f, -77.1729f, -11.0485f, 113.3317f, -43.5801f, - 345.8234f, 448.9382f, 398.8093f, 278.1467f, 193.7783f, 109.9307f, -32.5084f, - 105.2215f, 192.0218f, 307.4095f, 251.2213f, 135.6460f, 27.1659f, 48.2501f, - 131.1255f, 248.6208f, 194.8135f, 35.9742f, -89.6413f, -70.1114f, 74.4933f, - 10.3277f, 157.1341f, 220.2146f, 132.8669f, 58.2022f, -4.2414f, 52.5998f, - -171.9997f, 219.1700f, 183.7592f, 79.7388f, -28.2743f, -72.7875f, 54.8047f, - -281.0813f, 5.4272f, 138.6439f, 89.6476f, 26.7423f, -52.0621f, 181.8158f, - 42.9908f, 121.1063f, 40.1449f, 4.6961f, 41.3091f, 11.3680f, 61.7374f, - -69.6739f, 44.0933f, 62.9511f, 55.3414f, 47.1718f, 45.0520f, 10.5398f, - -254.2462f, -161.6377f, -252.0311f, -59.3082f, -64.1228f, -5.1355f, -167.6060f, - -249.7012f, -368.7658f, -266.1853f, -40.5172f, -31.5949f, 20.3852f, -73.7292f, - -259.0964f, -63.9727f, -123.4555f, -266.6797f, -372.6790f, -79.9634f, -32.2913f, - -237.8991f, -261.1591f, -67.3100f, -201.9258f, -271.1355f, 110.5556f, -31.4253f, - -252.1870f, -59.5241f, -149.7008f, -264.8359f, -95.9333f, -15.7623f, -55.9292f, - -291.6127f, -310.8436f, -291.0997f, -152.3425f, -38.1903f, 16.9302f, 107.5521f, - -234.1635f, -77.8775f, -155.4929f, -169.1375f, -170.1633f, -210.0618f, 12.2871f, - -432.5516f, -222.0327f, -146.7204f, -103.4423f, -49.3643f, -8.0516f, 0.3778f, - 330.7150f, 223.7578f, 120.2566f, 152.9689f, 119.1688f, 39.3462f, 21.3169f, - 106.4649f, 114.2936f, 78.3297f, 104.4772f, 135.1724f, 78.5670f, 48.1339f, - 284.0033f, 187.5895f, 88.2418f, 0.6583f, -25.3445f, -53.7671f, 63.9802f, - 106.5275f, 81.1295f, 67.7705f, 114.2483f, 4.6206f, 98.6728f, 68.0557f, - 132.7267f, 80.9311f, 70.2013f, 34.2614f, 45.4356f, 17.9487f, 185.5185f, - -179.6926f, -64.9953f, -11.8397f, 5.1401f, 42.9932f, 67.5337f, 154.7699f, - 53.6060f, 34.2805f, 16.7478f, -53.4059f, -36.7348f, 13.1978f, 110.7422f, - 37.6082f, -5.5267f, 88.1530f, 15.7336f, 24.4194f, 27.1976f, 50.6641f, - -182.5485f, -287.0959f, -395.1311f, -458.4781f, -119.8993f, 119.0388f, -26.2634f, - -239.2084f, -359.3420f, -447.6111f, -221.6196f, -3.2312f, 35.8538f, -9.6860f, - -70.9599f, -105.8073f, -192.0091f, -294.5047f, -334.6240f, 111.9638f, -29.3527f, - -193.0902f, -307.5872f, -268.9553f, -266.8591f, -276.8985f, 53.4395f, -127.3159f, - -112.3830f, -214.7503f, -352.5892f, -431.6330f, 130.6462f, 125.3650f, -24.3701f, - -138.4310f, -254.9568f, -325.5955f, -173.9416f, 0.3136f, 147.4202f, -59.5469f, - -63.4081f, -119.3462f, -237.6156f, -366.1194f, -116.1935f, 96.5096f, -74.8714f, - -91.5009f, -186.5192f, -95.3213f, -190.6698f, -103.7853f, 133.5730f, -129.6124f -}; /* ISF codebook - common 1st stage, 2nd split (only in AMR-WB IO mode) */ const Word16 dico2_isf_fx[] = @@ -15405,73 +9239,6 @@ const Word16 dico2_isf_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 1st split: ISF0 to ISF2 *-------------------------------------------------------------------*/ -const float dico21_isf_46b[] = -{ - 128.4688f, 159.8148f, 97.2755f, - -12.9836f, 197.1542f, 62.3669f, - -11.1370f, -5.4038f, 227.1786f, - -102.5247f, 49.5302f, 138.2452f, - 56.6014f, 92.4597f, 68.2462f, - -59.4614f, 95.8021f, 47.7671f, - 10.6214f, 16.4206f, 132.7432f, - -33.0052f, -36.4880f, 121.6274f, - 111.3621f, 86.8573f, -60.9301f, - 18.4019f, -16.9460f, -196.8595f, - 91.2159f, 47.1568f, 150.3417f, - 40.7444f, -123.8314f, 17.6656f, - 68.7560f, 76.0870f, 3.0834f, - 40.5189f, -22.9558f, -36.8239f, - 68.9463f, 20.8592f, 75.1641f, - -13.4297f, -49.7472f, 59.4394f, - 222.6512f, 108.2263f, -13.1594f, - -26.2678f, -128.5232f, -249.6796f, - -61.3770f, -106.3253f, 180.3803f, - -69.2195f, -180.5594f, 77.3840f, - 125.7118f, 69.8739f, 44.7696f, - -150.6344f, 66.9866f, 7.4132f, - 7.5039f, -4.7150f, 76.2746f, - -46.9159f, -98.2953f, 78.4325f, - 118.5603f, 14.1695f, -131.2373f, - -50.1565f, -86.1739f, -148.3825f, - 66.6965f, -72.1903f, 115.4583f, - -94.5599f, -121.9918f, 8.8523f, - 77.1679f, 15.2443f, 6.1163f, - -1.0987f, -69.2605f, -43.3316f, - 43.3928f, -36.3404f, 29.4998f, - -36.0829f, -87.1134f, 1.6094f, - 69.0548f, 158.6352f, -17.3680f, - -65.7580f, 148.4039f, -58.1224f, - -1.4207f, 106.6547f, 129.4115f, - -163.9787f, 200.5753f, 108.3887f, - 8.0981f, 96.4962f, 18.4523f, - -22.7513f, 51.0308f, -0.8203f, - -1.3389f, 52.2067f, 70.5057f, - -56.5316f, 15.5148f, 68.5082f, - 73.6822f, 28.9345f, -56.5083f, - -10.5212f, -17.6820f, -126.8611f, - 144.6737f, -44.4661f, -8.2446f, - -32.2712f, -161.9950f, -67.5138f, - 29.9266f, 37.2667f, -20.0451f, - -15.7787f, -11.7016f, -26.2432f, - 27.7648f, 34.4647f, 33.4065f, - -13.8614f, -38.4420f, 5.6107f, - 27.0098f, 76.8588f, -130.2875f, - -76.5280f, 30.9527f, -90.1727f, - -135.8326f, -53.3710f, 85.3346f, - -137.4852f, -34.8750f, -33.3215f, - 18.2807f, 78.3958f, -50.7970f, - -64.5101f, 14.5083f, -5.6925f, - -16.6084f, 1.0141f, 33.5889f, - -63.0082f, -42.0433f, 31.0393f, - 32.2577f, 8.3123f, -92.4112f, - -31.6346f, -58.2893f, -92.9305f, - 58.7086f, -72.6659f, -98.0877f, - -72.8089f, -97.1838f, -63.2264f, - -7.5866f, 25.6299f, -54.3822f, - -10.3321f, -19.4552f, -70.7729f, - 9.4725f, 4.3403f, 0.0721f, - -50.7563f, -41.0679f, -38.2745f -}; /* ISF codebook - 46b, 2nd stage, 1st split (only in AMR-WB IO mode) */ const Word16 dico21_isf_46b_fx[] = @@ -15545,137 +9312,6 @@ const Word16 dico21_isf_46b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 2nd split: ISF3 to ISF5 *-------------------------------------------------------------------*/ -const float dico22_isf_46b[] = -{ - -49.5271f, 121.1295f, 16.4769f, - -94.4022f, 76.8061f, 2.1280f, - -58.8683f, 32.7926f, -6.6703f, - -83.7461f, 49.5749f, -58.1205f, - -96.5332f, -51.1816f, 62.2310f, - -104.6874f, -104.4218f, -36.9709f, - -84.8023f, 0.4441f, -31.0082f, - -105.8907f, -31.0867f, -72.0962f, - -17.4561f, 170.2726f, 62.0341f, - 64.3231f, 77.6492f, 152.6545f, - -13.0558f, 31.6496f, 73.1381f, - -25.9540f, -16.3235f, 138.6579f, - -116.2904f, -22.1347f, 133.9606f, - -42.0923f, -209.9028f, 88.4509f, - -56.0897f, -9.1734f, 75.5450f, - 68.7883f, -157.0452f, 33.8343f, - 20.5838f, 115.6837f, 9.8136f, - -32.8948f, 98.7358f, -40.4656f, - -22.8099f, 41.1383f, -49.3496f, - -66.1700f, 67.9190f, -122.8227f, - -18.8196f, 17.0630f, -114.9884f, - -64.0458f, -162.7084f, -94.5118f, - -54.2084f, 1.0923f, -75.9526f, - -60.5415f, -80.9324f, -82.4130f, - 46.5760f, 125.8621f, 83.1458f, - 129.9934f, 19.7027f, 148.2803f, - 92.6546f, 96.4434f, -0.8040f, - 181.9977f, -6.0791f, 78.6212f, - 93.0392f, -99.5781f, -41.6073f, - 26.0437f, -172.0070f, -58.1634f, - 47.8475f, -34.2895f, -54.2498f, - 34.4187f, -96.6345f, -28.5027f, - -15.8270f, 90.1190f, 65.2787f, - -24.1274f, 60.7006f, 6.3059f, - -25.2307f, 6.3412f, 30.0794f, - -26.6845f, -0.7965f, -24.5917f, - -59.0614f, -117.3599f, 62.4002f, - -7.0821f, -130.0555f, 20.9710f, - -21.7086f, -36.6794f, 1.9468f, - 0.6440f, -74.2564f, 5.5161f, - 35.9276f, 57.9971f, 81.4502f, - 42.2272f, 3.3575f, 106.2218f, - 42.1565f, 13.6719f, 43.0135f, - 55.6116f, -33.1310f, 56.8126f, - 18.4410f, -61.4055f, 109.0841f, - 1.0223f, -125.1248f, 96.1657f, - 16.9404f, -28.1707f, 26.5748f, - 33.5245f, -84.6827f, 52.6704f, - 14.2066f, 54.8716f, 30.7506f, - 21.9479f, 68.4119f, -19.0589f, - 10.1034f, 17.7161f, 1.1122f, - 28.3594f, 21.5207f, -39.3190f, - 42.6619f, -71.6784f, -94.4716f, - -1.6345f, -110.6804f, -94.5938f, - 18.7091f, -26.5385f, -18.5676f, - -2.2267f, -59.7051f, -47.6606f, - 63.0633f, 76.6895f, 37.6845f, - 90.5993f, 31.2041f, 74.2520f, - 64.4418f, 37.7231f, 4.2748f, - 100.9151f, -12.1708f, 27.5607f, - 104.1606f, -30.0584f, -35.7097f, - 121.5339f, -81.6812f, 34.1503f, - 59.3840f, -5.5457f, -8.5514f, - 58.5319f, -58.3782f, 3.4649f, - -126.3823f, 217.4185f, 72.9956f, - -149.8116f, 119.9919f, 17.7920f, - -98.1555f, 10.6050f, 30.1117f, - -142.4950f, 30.1718f, -20.4500f, - -188.3500f, -32.7229f, 62.5055f, - -165.4842f, -201.2336f, -25.1871f, - -114.8346f, -46.6803f, -1.4401f, - -185.9166f, -45.3806f, -42.6756f, - -37.7442f, 124.2892f, 142.7720f, - 41.5423f, 244.7676f, 173.7613f, - -74.1037f, 46.8818f, 112.0588f, - -57.0922f, 25.5056f, 241.9654f, - -166.9268f, 94.6864f, 141.8443f, - -141.0368f, -145.0649f, 168.9254f, - -135.5530f, 39.8468f, 65.4743f, - -245.6494f, 76.1803f, -5.6309f, - -25.5608f, 185.7902f, -18.2246f, - -116.1471f, 125.0659f, -65.5997f, - -21.6448f, 139.2267f, -103.0516f, - -152.7089f, 32.1737f, -111.7466f, - -19.9673f, -12.1771f, -217.1499f, - -69.4452f, -156.0378f, -228.9529f, - -79.9513f, -19.3186f, -140.5787f, - -134.0792f, -92.8863f, -131.5222f, - 85.7696f, 178.6823f, 22.5404f, - 219.0179f, 182.4547f, 100.9819f, - 132.7898f, 105.4102f, -65.5694f, - 175.6583f, 30.2382f, -109.3055f, - 23.2833f, 65.0492f, -161.3234f, - 51.9178f, -98.2708f, -192.0347f, - 84.2797f, 61.1831f, -113.4513f, - 110.0580f, 0.1775f, -193.4730f, - -88.3674f, 114.5595f, 71.3481f, - -61.4713f, 52.7833f, 47.8295f, - -61.8477f, -23.0151f, 15.1016f, - -52.0862f, -46.0690f, -37.7005f, - -129.6202f, -120.6827f, 44.2216f, - -62.4412f, -165.8667f, -2.2683f, - -58.1508f, -82.2449f, 9.3842f, - -31.2569f, -108.3441f, -35.0348f, - -4.4143f, 48.6610f, 132.2242f, - 50.8942f, -27.6676f, 181.6500f, - 2.0066f, -17.6839f, 71.9731f, - 92.7139f, -37.1637f, 98.9732f, - -54.3785f, -76.9789f, 115.8870f, - -7.4354f, -117.3479f, 199.5254f, - -24.6757f, -59.5165f, 54.3134f, - 97.6902f, -113.0194f, 131.1002f, - 48.4163f, 132.4722f, -58.7820f, - 13.3327f, 68.6117f, -81.0715f, - 66.7414f, 64.6961f, -45.2427f, - 36.7779f, 14.7160f, -89.5910f, - 29.2181f, -25.5238f, -132.3077f, - -30.5052f, -80.0320f, -150.5560f, - 0.1157f, -11.7322f, -63.8467f, - -21.6912f, -43.0765f, -94.6223f, - 125.3290f, 95.1208f, 75.9759f, - 197.4010f, 92.9319f, -0.5012f, - 123.8246f, 45.4969f, 25.5317f, - 120.7415f, 34.4155f, -28.8961f, - 176.6600f, -20.0903f, -19.4091f, - 130.6288f, -84.9368f, -113.4633f, - 82.2281f, 16.0388f, -59.4614f, - 93.1589f, -21.5846f, -101.7248f -}; /* ISF codebook - 46b, 2nd stage, 2st split (only in AMR-WB IO mode) */ const Word16 dico22_isf_46b_fx[] = @@ -15813,137 +9449,6 @@ const Word16 dico22_isf_46b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 3rd split: ISF6 to ISF8 *-------------------------------------------------------------------*/ -const float dico23_isf_46b[] = -{ - -3.8995f, 58.9472f, 140.2168f, - 53.1422f, 116.3810f, 87.0383f, - 99.7094f, -40.4441f, 113.1331f, - 165.1496f, 2.2135f, 71.5223f, - -105.3934f, -104.9144f, -38.2897f, - -20.3247f, -32.1811f, 5.1214f, - -32.0250f, -106.9634f, -37.7452f, - 35.0256f, -95.9288f, -28.2073f, - -116.9343f, -27.2704f, 164.5334f, - -34.2352f, 142.6884f, 167.9453f, - 72.9835f, -124.0776f, 148.8355f, - 148.2748f, 14.5359f, 190.7047f, - -145.5305f, -123.4847f, 30.8224f, - -120.2600f, -39.3306f, 2.0939f, - -52.9049f, -176.3645f, 3.0609f, - 27.9487f, -164.3167f, -60.3281f, - 70.4088f, 66.5042f, -47.2043f, - 24.2507f, 69.1997f, -15.5014f, - 127.5028f, 31.2976f, -40.8233f, - 96.9136f, 102.7271f, -1.9768f, - -65.7818f, -70.8663f, -86.5155f, - -0.6444f, -8.8675f, -61.8361f, - -5.3369f, -58.3089f, -47.3390f, - 46.4765f, -35.6284f, -57.4718f, - 46.3328f, 129.6813f, -59.6592f, - 18.9988f, 118.4842f, 13.3515f, - 172.5430f, -21.3132f, -26.8827f, - 84.7525f, 177.2668f, 22.5077f, - -140.2432f, -73.0634f, -146.3583f, - -16.3786f, 19.6063f, -107.1305f, - -3.0698f, -104.1769f, -97.1330f, - 33.2378f, -33.4660f, -134.9635f, - -29.8971f, -15.7433f, 134.7990f, - 34.9346f, 52.2504f, 85.7197f, - 60.8752f, -31.2562f, 62.5970f, - 42.3279f, 15.7348f, 45.3299f, - -61.8761f, -80.5864f, 11.3831f, - 1.9118f, -12.4255f, 68.2023f, - -25.4049f, -61.6688f, 57.1412f, - 21.3127f, -30.3874f, 28.3554f, - -44.5637f, -86.8534f, 137.9897f, - -18.2977f, 31.6219f, 82.2796f, - 19.0573f, -58.8750f, 104.6892f, - 41.1433f, 1.5028f, 117.9977f, - -102.7489f, -51.4207f, 71.3300f, - -59.0984f, -10.9389f, 78.5554f, - -69.1486f, -120.0273f, 65.0256f, - 39.6252f, -86.2109f, 50.9690f, - 29.0714f, 22.6919f, -38.4256f, - 12.6360f, 17.2986f, 5.2183f, - 75.9445f, 11.6720f, -55.4942f, - 66.2898f, 37.5939f, 3.0594f, - -53.0062f, -46.4272f, -35.4140f, - -25.4219f, 2.9542f, -21.2949f, - 1.3392f, -73.4502f, 4.6640f, - 17.5926f, -24.6153f, -19.1614f, - 58.2567f, -8.0154f, -7.3521f, - 9.4616f, 56.2212f, 37.1474f, - 99.2497f, -8.5999f, 23.5678f, - 62.8908f, 76.5199f, 37.4883f, - -61.5740f, -23.6494f, 18.8743f, - -27.4404f, 12.7151f, 31.8660f, - -8.8214f, -125.3200f, 22.5806f, - 60.3707f, -57.3931f, 1.9729f, - -142.0781f, 128.1134f, 29.9265f, - -8.1434f, 177.0072f, 67.7176f, - -42.2467f, 31.9985f, 246.1330f, - 143.5303f, 102.5801f, 81.3050f, - -117.3709f, -24.3191f, -68.7836f, - -80.1727f, 55.9021f, -61.6700f, - -65.9167f, -159.9841f, -103.0851f, - 100.4774f, -105.1623f, -39.0393f, - -248.4434f, 113.0562f, -0.9632f, - -114.2012f, 244.7349f, 67.3892f, - -149.2039f, -141.9386f, 151.3480f, - 96.8171f, 204.6967f, 174.6282f, - -203.4799f, -43.3805f, -41.7327f, - -154.4080f, 46.2418f, -107.0591f, - -133.7993f, -265.7036f, -48.9596f, - -67.3323f, -174.6485f, -259.0245f, - 29.4362f, 57.7183f, -143.2330f, - -30.9358f, 102.7735f, -36.8946f, - 97.2809f, 57.7730f, -111.7326f, - 148.5371f, 105.7429f, -63.3760f, - -55.6062f, -1.6898f, -72.6741f, - -22.0825f, 43.4697f, -48.9841f, - -13.6583f, -42.0695f, -99.1267f, - 39.0227f, 11.1441f, -94.4170f, - -31.1674f, 118.4450f, -103.1298f, - -30.5761f, 181.1050f, -22.4168f, - 96.8625f, -8.6867f, -192.7743f, - 258.0970f, 258.6485f, 17.2359f, - -75.4867f, -15.7399f, -128.9883f, - -69.4209f, 56.4875f, -131.4587f, - -35.1219f, -77.9249f, -156.1559f, - -15.4754f, -8.8922f, -194.7119f, - -74.8584f, 44.6175f, 122.9601f, - -15.9046f, 95.4389f, 74.2532f, - 34.5640f, -37.7631f, 189.4453f, - 93.9878f, 31.0970f, 82.8675f, - -96.2834f, 15.6201f, 33.9921f, - -60.9930f, 57.5930f, 52.2667f, - -0.7661f, -130.2809f, 93.4385f, - 120.2708f, -79.2677f, 42.9508f, - -179.2200f, 97.8633f, 164.7641f, - -85.0375f, 121.2092f, 89.0752f, - -33.4305f, -135.1092f, 255.3923f, - 71.7349f, 68.5372f, 165.8218f, - -187.7999f, -24.7305f, 65.9037f, - -136.4161f, 45.6197f, 73.4184f, - -48.8887f, -218.9293f, 120.9648f, - 61.8728f, -162.4253f, 36.5784f, - 17.9416f, 66.9736f, -75.1315f, - -24.6266f, 61.4069f, 5.3953f, - 100.0199f, -13.7281f, -105.7749f, - 125.9485f, 48.0431f, 20.6117f, - -83.4273f, 1.6803f, -29.7397f, - -60.9733f, 33.6154f, -6.9071f, - 49.9381f, -77.0001f, -90.5842f, - 103.7070f, -35.1051f, -38.3706f, - -120.2797f, 129.5670f, -56.7507f, - -51.1815f, 120.2600f, 22.5398f, - 198.7324f, 23.1592f, -132.3752f, - 219.6951f, 76.6881f, -5.4836f, - -147.6706f, 39.1117f, -18.2240f, - -91.4913f, 78.8627f, 0.3161f, - 40.5908f, -105.4075f, -192.5737f, - 124.6250f, -81.8382f, -127.0619f -}; /* ISF codebook - 46b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ const Word16 dico23_isf_46b_fx[] = @@ -16081,43 +9586,6 @@ const Word16 dico23_isf_46b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 4th split: ISF9 to ISF11 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float dico24_isf_46b[] = -{ - -30.8071f, -34.8458f, -1.7377f, - -66.7509f, 30.0385f, -82.3340f, - 62.4748f, -75.5700f, 38.3392f, - 47.0287f, -40.0671f, 126.1063f, - 12.5178f, -8.7146f, -50.3954f, - 27.9620f, 30.3537f, -104.7235f, - 71.0260f, -29.6231f, -25.7014f, - 120.7753f, 38.6709f, -56.4990f, - -89.5313f, -61.4613f, -32.9542f, - -149.7260f, 38.4143f, -27.8365f, - -35.1587f, -137.6189f, 4.6136f, - -110.8198f, -69.6633f, 69.4652f, - -25.4794f, -48.9702f, -64.6927f, - -34.0250f, -68.5378f, -137.1167f, - 16.3769f, -77.3935f, -18.8382f, - 60.1539f, -54.6626f, -95.0395f, - -29.9828f, 6.8644f, 42.3138f, - -15.0985f, 138.6659f, 35.6532f, - 34.1357f, 3.3162f, 60.3957f, - -1.5046f, 61.8542f, 93.5327f, - 49.8233f, 37.2486f, -21.0923f, - 2.6462f, 96.2433f, -48.4645f, - 100.8559f, 5.8835f, 34.9436f, - 80.3813f, 84.4933f, 38.3143f, - -78.4639f, 3.3495f, 7.0416f, - -121.9442f, 90.8917f, 79.7252f, - -15.2997f, -67.8455f, 60.6317f, - -56.1035f, -3.5687f, 110.7510f, - -22.2741f, 27.4204f, -26.9833f, - -61.1362f, 73.0974f, 7.1390f, - 21.0362f, -11.6205f, 9.0680f, - 9.3252f, 52.8599f, 21.3451f -}; -#endif /* ISF codebook - 46b, 2nd stage, 4th split (only in AMR-WB IO mode) */ const Word16 dico24_isf_46b_fx[] = @@ -16159,43 +9627,6 @@ const Word16 dico24_isf_46b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 1st split: ISF12 to ISF15 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float dico25_isf_46b[] = -{ - 65.8574f, 55.5896f, -46.5520f, 44.9019f, - 80.4838f, -7.7875f, 36.7110f, 88.1867f, - -41.5522f, 122.0924f, -8.3769f, 6.2406f, - -24.0605f, 63.0705f, 27.8308f, 99.4548f, - -34.8725f, 39.6270f, -72.1743f, 48.7995f, - 28.2859f, -11.6999f, -78.4246f, 134.1911f, - -100.6717f, 12.7337f, -3.2716f, 31.4897f, - -40.5514f, -60.1846f, 28.1000f, 115.5554f, - 56.1050f, -26.6471f, -104.7202f, -9.7237f, - 31.5196f, -30.3722f, -34.0636f, 41.4375f, - 8.5013f, 60.4295f, -72.4835f, -46.4772f, - -18.1378f, -10.8741f, 10.5206f, 35.6699f, - -44.7247f, -14.6405f, -68.4296f, -12.8925f, - -36.6233f, -86.8592f, -73.8785f, 47.7951f, - -51.6319f, -46.3776f, -74.4907f, -105.4981f, - -67.2817f, -67.7186f, 6.9193f, -16.9668f, - 108.8168f, 52.7624f, -16.3049f, -50.0846f, - 72.9801f, -33.7268f, 89.4150f, -54.0673f, - 62.1588f, 93.8928f, 54.7414f, 17.8328f, - 26.7626f, 9.6218f, 88.5287f, 29.9594f, - 8.1440f, 44.9198f, 5.0806f, 2.9996f, - 26.4759f, -96.7328f, 49.0444f, 31.6496f, - -58.6349f, 53.6024f, 80.8924f, -3.3883f, - -60.0341f, -51.9482f, 112.9073f, 26.0056f, - 55.9483f, -14.6255f, -33.5049f, -127.3506f, - 70.1847f, -12.4499f, 7.3368f, -8.8635f, - 10.1728f, 65.7077f, 45.2101f, -90.9790f, - -12.5750f, -10.0652f, 45.9762f, -30.2995f, - 1.2805f, -3.2898f, -17.5766f, -44.9828f, - 22.1316f, -84.0894f, -21.1065f, -32.5923f, - -81.6581f, 43.6873f, -8.6894f, -65.0775f, - -35.4129f, -58.9663f, 65.8078f, -102.2045f -}; -#endif /* ISF codebook - 46b, 2nd stage, 5th split (only in AMR-WB IO mode) */ const Word16 dico25_isf_46b_fx[] = @@ -16249,137 +9680,6 @@ const Word16 dico25_isf_46b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 1st split: ISF0 to ISF4 *-------------------------------------------------------------------*/ -const float dico21_isf_36b[] = -{ - -20.3147f, -37.6762f, 82.8575f, 122.9161f, -28.4468f, - 31.9756f, -79.5400f, 141.6557f, 53.2923f, -77.0688f, - -49.3360f, -129.1711f, 71.5448f, 85.1944f, 55.7117f, - -19.1147f, -16.1797f, 217.6729f, 89.8943f, 28.1868f, - 0.9668f, -28.5091f, 63.7145f, 147.3305f, 86.3104f, - 52.0605f, 43.3415f, 108.6263f, 83.9071f, -42.8628f, - -39.7734f, -7.6796f, 110.7755f, 44.0677f, 106.4663f, - 32.7239f, 124.4301f, 113.4192f, 7.2217f, 33.0503f, - -9.5746f, -1.9619f, 48.6607f, 51.4268f, -79.8193f, - -14.9729f, -2.0174f, 111.5604f, -3.5774f, -139.2041f, - -54.5000f, -100.1092f, 35.8796f, 45.5500f, -73.7805f, - -56.2694f, 74.4424f, 122.2707f, 20.1155f, -38.3887f, - 65.2094f, -3.9808f, 17.2638f, 96.6362f, 14.0115f, - 148.8982f, 77.1199f, 93.1280f, 28.7596f, 2.2577f, - 14.8324f, -159.4414f, 11.4260f, -1.0211f, -33.2422f, - 35.9112f, 103.8106f, 61.4044f, -9.7034f, -78.2548f, - 62.7658f, -47.4034f, 27.3267f, 32.6865f, -54.7569f, - -6.2693f, -33.7779f, 43.5591f, -36.6678f, -73.8111f, - -104.9376f, -105.4944f, 137.0911f, 41.7979f, -9.4558f, - -26.6750f, -26.3288f, 192.3279f, -40.3915f, -60.3539f, - -20.5168f, -51.3274f, 24.2191f, 47.5655f, 3.7810f, - 52.7448f, 32.7149f, 110.3630f, -21.5464f, -46.7397f, - -4.6471f, -85.4498f, 129.3530f, -31.6973f, 65.0658f, - 85.9795f, -53.2356f, 57.2992f, -67.2997f, -16.4516f, - 54.7607f, -37.1454f, -42.4738f, -34.5633f, -75.7294f, - 0.0517f, -0.6519f, -1.3703f, -12.9917f, -148.9960f, - -25.8564f, -84.6818f, 59.5151f, -72.5006f, -156.8837f, - 95.5045f, 42.2665f, 60.9475f, -54.5273f, -154.2295f, - 44.2810f, -53.2856f, -76.4082f, 42.9736f, -9.5286f, - 83.7851f, 46.2184f, 4.1979f, -25.1575f, -51.0520f, - -43.1590f, -111.8518f, -2.3420f, -129.5042f, 6.3083f, - 36.5568f, 37.9981f, 30.8304f, -113.4959f, -79.9345f, - -1.8493f, -15.3605f, -7.7093f, 98.5986f, -37.6177f, - 29.8557f, 67.8956f, 39.3578f, 63.5122f, 23.6349f, - -27.0502f, -93.1902f, -21.6230f, 155.8476f, 2.5165f, - -44.7515f, 124.6855f, 64.1401f, 107.4525f, 76.4296f, - -5.6913f, 14.2025f, -18.3757f, 129.1303f, 47.2448f, - 88.4045f, 81.8179f, 106.0131f, 126.8375f, 71.9790f, - 5.1288f, -31.2676f, -85.3474f, 183.8293f, 137.8851f, - 112.3553f, 147.7620f, 6.3634f, -19.8307f, 97.9225f, - 68.1479f, 45.1480f, 20.4456f, 58.0360f, -109.0384f, - 91.7441f, 107.7617f, 15.1212f, 47.0576f, -18.7769f, - 0.0359f, -42.2360f, -42.2471f, 94.1364f, -132.5071f, - -36.3673f, 208.5491f, 17.4150f, 13.0281f, -33.9693f, - 75.8679f, 58.1435f, -27.7181f, 158.0312f, -17.2012f, - 159.6027f, 144.6236f, 31.6370f, -72.6323f, -59.9622f, - 9.6094f, -39.8213f, -175.1189f, 48.5059f, -67.6102f, - 8.4503f, 159.5329f, -43.0075f, -121.1605f, -83.4178f, - -10.0988f, 8.8687f, -32.4219f, 44.4166f, 5.5756f, - -42.8299f, 63.9306f, 20.2856f, 86.9213f, -32.1874f, - 14.3835f, -9.6605f, -102.7732f, 119.7146f, -5.8143f, - -181.8677f, 162.2914f, 114.1354f, 64.3820f, -7.2207f, - 11.2529f, -7.2901f, -66.7670f, 60.6365f, 71.2140f, - 69.9911f, 56.0744f, -10.7183f, 90.0489f, 100.9538f, - -40.2531f, -96.6451f, -154.5512f, 92.9078f, 43.9867f, - 146.6528f, -60.2643f, -42.7063f, -1.4891f, 60.9280f, - 38.2143f, 33.0628f, -113.9071f, -1.8860f, -48.5082f, - 45.4740f, 54.2829f, -45.4768f, -38.2865f, -114.7585f, - -5.4061f, -32.4176f, -108.6457f, -45.8426f, -147.6796f, - 41.4813f, 12.9066f, -41.5456f, -134.2382f, -189.2112f, - 46.4330f, 6.8074f, -160.9846f, 53.8969f, 64.9889f, - 149.8519f, 39.6080f, -79.5860f, 34.3934f, -61.0983f, - -47.2568f, -110.8652f, -117.2089f, -0.3717f, -64.7306f, - 109.4393f, 12.8368f, -59.4424f, -122.1797f, -31.4694f, - -14.4126f, 8.5189f, 89.4622f, 59.7035f, 14.3509f, - -23.3690f, -32.3486f, 92.0827f, -3.3169f, -16.0022f, - -66.1460f, -89.0215f, 49.1022f, -7.9295f, 141.6034f, - -91.8393f, 6.6528f, 142.3305f, -60.9383f, 61.1140f, - -9.9035f, -11.7998f, 27.9396f, 56.3528f, 60.7524f, - 59.7717f, -10.3224f, 100.1088f, 37.9471f, 56.4210f, - -8.0706f, -14.3273f, 18.7969f, -25.3479f, 97.6871f, - 24.5711f, 30.0075f, 106.4596f, -49.8085f, 48.5911f, - -50.4430f, -10.2232f, 15.4334f, 3.6211f, -45.0851f, - -2.3100f, 32.1923f, 14.7250f, -35.3260f, -71.2667f, - -131.2863f, -5.1029f, 11.0382f, 61.7451f, 35.4884f, - -11.6345f, 94.0117f, 53.4418f, -66.3264f, -6.6649f, - 57.0155f, 5.4850f, -4.4053f, 12.7554f, 23.6955f, - 74.8564f, 77.0331f, 21.2315f, -32.6182f, 33.2036f, - 9.1670f, -78.1914f, -30.2862f, -11.1652f, 54.5347f, - 47.7388f, 92.4139f, 41.3020f, -133.3741f, 53.0528f, - -22.2909f, -55.2830f, -33.2798f, -6.2896f, -28.8257f, - -23.1116f, -35.0033f, -3.2927f, -72.9685f, -7.7727f, - -82.3073f, -104.1028f, 84.5118f, -69.8221f, -43.1637f, - -19.5349f, -2.7976f, 85.8117f, -104.2825f, -27.2739f, - -22.1902f, -16.4648f, -6.6730f, -5.7920f, 27.7237f, - 12.5658f, 8.3566f, 24.7755f, -53.6096f, 12.7618f, - -53.5741f, -68.1802f, 40.6279f, -26.4454f, 38.0614f, - -26.1757f, -16.7503f, 52.0974f, -117.6298f, 86.4284f, - -45.3502f, -78.0491f, -31.6007f, -35.9389f, -106.1265f, - -24.8954f, -15.9989f, -21.2401f, -95.2454f, -86.1251f, - -112.2460f, -94.4001f, -19.4652f, -33.9923f, -34.6433f, - -95.7000f, 92.3440f, 39.8654f, -64.8912f, -115.0483f, - 25.8969f, 9.4794f, -63.2644f, -27.6289f, 36.9308f, - 25.6901f, 52.9741f, -35.3425f, -86.0458f, -14.2567f, - -38.4101f, -62.7105f, -86.5748f, -73.4519f, 11.4446f, - -7.0262f, 6.9787f, -7.4983f, -161.9427f, 3.4520f, - 19.1677f, 23.8207f, 38.9733f, 15.3764f, -21.7743f, - -43.1688f, 31.9400f, 52.7685f, -11.9674f, 20.1452f, - -35.0128f, -59.7929f, -36.1783f, 73.7702f, 71.2205f, - -83.5945f, 115.1128f, 46.5742f, -28.7420f, 110.8292f, - 0.6347f, 53.5489f, 14.3686f, 18.4025f, 71.1819f, - 35.9728f, 45.7217f, 71.9726f, -20.7319f, 145.8423f, - -8.1019f, -5.6290f, -13.8278f, 53.1928f, 152.8343f, - 57.0881f, 50.3240f, -64.1728f, -11.0774f, 129.9089f, - 36.0925f, 31.0887f, -32.6698f, 39.1693f, -52.3060f, - -3.1405f, 84.8560f, -12.4226f, 1.0655f, -18.3673f, - -58.9719f, 98.0129f, -83.8334f, 55.3139f, 35.7679f, - -87.3652f, 121.2513f, -67.0447f, -107.5562f, 38.2622f, - 62.0513f, 60.4638f, -69.1208f, 43.6854f, 20.7579f, - 79.9694f, 10.7071f, 3.2196f, -93.6621f, 75.1450f, - 66.1122f, 46.9324f, -124.5950f, -78.3322f, 41.3915f, - 4.3229f, 13.8757f, -33.6575f, -92.7601f, 177.5551f, - -42.5067f, -60.2164f, -63.5331f, 67.8862f, -21.5990f, - -14.9811f, 12.6046f, -39.5598f, -30.2755f, -22.9980f, - -80.2668f, -125.5028f, -37.7023f, 27.0213f, 31.0364f, - -121.0989f, 17.0095f, 6.9604f, -72.1639f, 13.2205f, - -45.0105f, -7.6587f, -57.9626f, -15.4159f, 79.2983f, - -11.3128f, 60.2083f, -11.6157f, -61.5281f, 64.7932f, - -17.6502f, -51.3289f, -123.9766f, -9.4275f, 141.7024f, - -64.4806f, -80.0931f, -43.9064f, -86.7513f, 103.4672f, - -12.6910f, -17.1597f, -58.5736f, 21.2452f, -75.2569f, - -2.3195f, -14.7279f, -99.6098f, -65.8753f, -44.8940f, - -103.7556f, 33.9613f, -73.7263f, -13.9038f, -66.1526f, - -23.2670f, -33.9743f, -103.9167f, -170.2949f, -66.2644f, - -26.4354f, -31.7233f, -108.7190f, 9.2282f, 14.7962f, - -9.0340f, -7.5327f, -60.7032f, -100.1385f, 55.1481f, - -23.7530f, -88.2969f, -220.5980f, -68.4569f, 27.6805f, - 3.3643f, -11.1758f, -92.5898f, -201.1381f, 102.8789f -}; /* ISF codebook - 36b, 2nd stage, 1st split (only in AMR-WB IO mode) */ const Word16 dico21_isf_36b_fx[] = @@ -16517,139 +9817,9 @@ const Word16 dico21_isf_36b_fx[] = /*-------------------------------------------------------------------* * 2nd stage, 2nd split: ISF5 to ISF8 *-------------------------------------------------------------------*/ -const float dico22_isf_36b[] = -{ - -116.4826f, -2.3267f, 37.0276f, 11.9585f, - -83.2536f, -34.0855f, -47.5833f, 101.8900f, - 1.6666f, -19.3089f, 81.2133f, 5.5915f, - -50.2199f, -43.0204f, 11.8773f, 45.9389f, - -83.6736f, 100.7533f, 42.9626f, -91.7069f, - -15.8879f, -6.8432f, -49.2481f, 46.8567f, - 40.2748f, 25.3026f, 49.6150f, -14.6042f, - 49.1020f, -13.9172f, -9.5624f, 9.9442f, - -53.7549f, -26.0755f, -108.5515f, -72.7670f, - -64.1594f, -75.7696f, -78.4742f, 30.5700f, - -82.2540f, -34.1100f, -20.0480f, -86.1655f, - -68.0474f, -31.0203f, -36.5615f, -15.3976f, - 8.8102f, -2.3252f, -61.3614f, -93.8460f, - 8.4465f, -43.1451f, -59.6402f, -26.4485f, - 57.8873f, -1.8283f, -0.9150f, -58.1355f, - -0.3760f, -52.6396f, -15.1757f, -69.7872f, - 26.6552f, 140.6710f, -45.5320f, -5.9904f, - 53.5205f, 18.1777f, -108.7393f, 57.1700f, - 53.1281f, 101.4898f, 52.8254f, 25.2450f, - 23.9310f, 45.2712f, -17.5932f, 37.8318f, - 90.1549f, 147.8806f, 33.8829f, -46.8215f, - 132.2255f, 69.0079f, -106.1068f, 1.3402f, - 103.9284f, 60.8167f, 10.9874f, -26.8688f, - 101.6619f, 32.7808f, -33.2101f, 33.7802f, - -103.9522f, 60.0893f, -100.1459f, -71.1324f, - -6.7456f, -25.3835f, -118.9063f, -2.2439f, - -15.7859f, 68.4583f, -59.0835f, -70.2552f, - -10.4160f, 10.4323f, -34.1781f, -24.5999f, - 47.1747f, 44.4596f, -64.8288f, -183.2536f, - 62.0332f, -25.7788f, -126.3596f, -90.0926f, - 83.7341f, 59.4975f, -55.2472f, -82.6595f, - 53.3482f, 14.1273f, -71.7379f, -20.0471f, - -110.1113f, -92.4130f, 15.5809f, 3.7302f, - -18.8013f, -91.7902f, -14.6105f, 98.1369f, - -21.2096f, -126.2513f, 53.1438f, 11.3308f, - -34.3197f, -67.9178f, 83.0592f, 77.2733f, - -152.4262f, 38.6895f, -24.6967f, -146.6594f, - 41.7355f, -66.1454f, -64.2312f, 165.7005f, - 27.0772f, -43.2220f, 54.9943f, -65.1872f, - 28.8899f, -50.2606f, 25.5035f, 56.2652f, - -137.7163f, -80.7691f, -80.0014f, -42.7037f, - -62.3651f, -150.7820f, -138.8149f, 38.1900f, - -68.7802f, -192.5785f, -7.8749f, -55.9578f, - -98.5983f, -168.6083f, -0.7398f, 84.2329f, - -35.1656f, -67.9774f, -65.6374f, -160.6224f, - 4.9446f, -110.8514f, -89.3759f, -62.4133f, - -34.1288f, -108.8451f, 13.3702f, -98.1466f, - -29.4614f, -102.8405f, -22.8325f, -16.4528f, - 163.9105f, 20.5337f, -82.4577f, -139.6505f, - 149.8660f, -13.6016f, -146.1693f, 154.5116f, - 26.6673f, -89.2330f, 126.1283f, -0.6475f, - 65.0738f, -119.9143f, 75.1351f, 75.9130f, - 179.3039f, 128.5647f, -1.9070f, -129.8349f, - 146.4228f, 30.7058f, -2.7357f, 122.1955f, - 110.1199f, -48.4108f, 78.0568f, -35.8715f, - 105.8916f, -63.1848f, -27.3019f, 70.1234f, - -61.4940f, -116.2433f, -200.7709f, -120.8167f, - 22.5673f, -63.6047f, -213.1464f, 7.0661f, - 48.3577f, -141.9964f, 65.3628f, -93.1012f, - 32.5991f, -160.4748f, -45.5903f, 37.6377f, - 54.6730f, -43.7561f, -151.6335f, -243.7797f, - 101.1397f, -52.0073f, -123.8756f, 16.0909f, - 63.7439f, -50.8957f, -25.0308f, -130.5887f, - 88.2969f, -64.3814f, -48.5324f, -43.0123f, - -181.9705f, -24.0096f, 2.3863f, 89.5185f, - -59.5915f, 80.1714f, -56.6992f, 94.5562f, - -62.1659f, 18.9433f, 76.0160f, 57.8553f, - -22.4665f, 10.7743f, 12.0918f, 108.9830f, - -118.1671f, 72.3971f, 109.1443f, -1.3839f, - -23.8459f, 76.9232f, 22.9444f, 33.4435f, - -44.5975f, 47.9554f, 65.6020f, -20.3018f, - 13.6440f, 14.2271f, 38.9794f, 49.0774f, - -159.0490f, 40.0263f, -30.2347f, -15.6526f, - -132.0447f, -0.4802f, -133.5965f, 61.0673f, - -69.7882f, 40.8409f, -13.3128f, -38.0654f, - -72.3667f, 32.7089f, -13.7936f, 42.2054f, - -51.7645f, 41.9187f, -35.3954f, -139.3463f, - -70.4106f, 21.2248f, -89.5260f, 9.2659f, - -17.3511f, 18.5094f, 18.3073f, -71.0465f, - -25.6477f, 4.9120f, 17.7504f, 1.3904f, - -132.5788f, 97.9003f, 25.0501f, 88.4524f, - -16.3421f, 39.3618f, -136.5657f, 107.5423f, - -38.7664f, 155.3425f, 55.5880f, 47.1198f, - 43.2628f, 4.6910f, -39.9914f, 101.5498f, - 0.0830f, 197.2389f, 101.6377f, -36.9070f, - 62.8279f, 111.5018f, -37.6259f, 87.5036f, - -1.4618f, 80.2742f, 122.5196f, 12.8147f, - 65.1409f, 54.2334f, 34.3093f, 79.7332f, - -91.6271f, 123.5048f, -23.6092f, -9.5877f, - -3.2208f, -58.6010f, -121.8443f, 78.4266f, - -14.0112f, 114.0430f, 23.9902f, -40.4777f, - -15.4729f, 68.1635f, -63.4068f, 16.5519f, - -8.1780f, 157.1093f, -11.2800f, -137.0649f, - 8.0606f, 59.4657f, -140.5838f, -36.3320f, - 22.2676f, 74.5499f, 82.8755f, -76.6792f, - 29.5054f, 61.7793f, -8.0867f, -27.0956f, - -128.1797f, -72.1649f, 129.2723f, 46.4323f, - -20.7709f, 111.3353f, 22.0263f, 131.4695f, - -41.9162f, -9.2182f, 158.1064f, 11.2798f, - -7.1545f, 53.6140f, 106.2812f, 108.0610f, - -99.5471f, 8.6443f, 67.7713f, -74.7187f, - 115.0857f, 125.6656f, 126.8208f, 118.1528f, - 8.3489f, -10.6246f, 129.8214f, -69.4937f, - 46.4587f, 5.2711f, 105.7244f, 50.4485f, - -177.6754f, -70.1548f, 45.4547f, -74.5236f, - -88.7724f, 24.0424f, -57.8465f, 204.7888f, - -68.8890f, -112.1224f, 110.3182f, -61.1447f, - -94.7905f, 5.0186f, 77.6790f, 167.9779f, - -23.0125f, -19.1513f, 44.8958f, -142.4394f, - 28.0225f, -67.2659f, -53.6584f, 36.2990f, - -54.0239f, -49.3550f, 55.1522f, -32.8946f, - 2.0792f, -48.4861f, 14.9542f, -7.9957f, - -100.8337f, 121.3744f, 234.8044f, 83.3187f, - 36.5393f, 50.8425f, -23.7400f, 196.1698f, - -0.3059f, -61.1762f, 189.5078f, 122.4017f, - 57.0232f, -28.8934f, 61.7134f, 134.6930f, - 107.9555f, 52.8736f, 109.5032f, -22.1311f, - 191.2912f, 98.4213f, 38.7853f, 16.9729f, - 104.1509f, -28.9315f, 167.6925f, 40.9011f, - 108.7356f, -8.7976f, 46.5837f, 36.6080f, - -211.7768f, 190.5028f, 100.4753f, -45.0833f, - -32.7791f, -95.3684f, -171.2339f, 186.7766f, - -44.0395f, -212.9286f, 151.2602f, 39.5958f, - -37.2152f, -119.5092f, 43.4460f, 194.5965f, - 37.2023f, 64.8673f, 8.5289f, -117.5366f, - 163.8890f, -5.9760f, -22.5312f, -30.3817f, - 105.4272f, 11.3735f, 47.6228f, -110.1422f, - 62.3479f, -93.6059f, 19.4353f, -14.9112f -}; /* ISF codebook - 36b, 2nd stage, 2nd split (only in AMR-WB IO mode) */ + const Word16 dico22_isf_36b_fx[] = {/*Qlog2(2.56)*/ -298, -6, 95, 31, @@ -16786,74 +9956,6 @@ const Word16 dico22_isf_36b_fx[] = * 2nd stage, 3rd split: ISF9 to ISF15 *-------------------------------------------------------------------*/ -const float dico23_isf_36b[] = -{ - 31.6601f, -7.0021f, 26.7324f, -10.6919f, -47.7440f, -109.3316f, -1.6793f, - 17.6152f, -69.1639f, 81.7745f, -11.6557f, -53.0002f, -28.8501f, 51.3155f, - -17.3392f, 39.6296f, -29.4208f, -34.2716f, -18.7475f, -53.4279f, -21.0682f, - -95.6211f, -11.0108f, 24.5639f, -6.9345f, -43.8606f, -40.3930f, 22.5841f, - -30.9469f, -2.2484f, 85.8968f, -25.2118f, 44.4649f, -13.7549f, -19.6283f, - 42.5807f, -25.3893f, 55.9790f, -44.6039f, 50.3451f, 29.5180f, 49.0040f, - 64.7422f, 35.0105f, -24.0120f, -94.6131f, 72.4785f, -29.0560f, -16.8213f, - -17.7762f, -36.1097f, 19.1423f, -88.8131f, 9.4121f, -60.6212f, 15.2182f, - 26.1194f, 33.0214f, 38.6243f, -16.4898f, 20.5108f, -71.7754f, -109.7775f, - 55.6133f, -47.5797f, 0.0746f, 8.1716f, -55.6639f, -5.8260f, -6.7666f, - 86.9148f, 36.0665f, -8.0422f, -18.6522f, -31.9936f, -5.4779f, -65.2340f, - 20.0656f, -14.5303f, -94.7449f, -11.7982f, -35.2031f, 6.9138f, -22.0461f, - 20.9060f, 41.0458f, 29.0299f, 33.4933f, 27.0675f, 5.1646f, -39.4529f, - 76.7175f, 28.2216f, -34.8562f, 16.7304f, 25.2291f, 7.4912f, 15.3906f, - 47.1053f, 13.3625f, 50.9902f, -31.9588f, 9.8596f, 83.1329f, -61.0081f, - 39.4355f, -39.6936f, -53.1235f, -8.1282f, 22.3882f, 83.7131f, 8.6440f, - 13.9302f, -48.4179f, 80.1925f, 79.6573f, 22.8321f, -61.0888f, -32.5848f, - 32.2601f, -45.5857f, 53.4300f, 53.4773f, 33.0895f, 45.4420f, 17.2865f, - -36.0406f, -57.6566f, -26.6841f, 4.2674f, -39.8452f, -76.9236f, -85.9930f, - -29.8696f, -72.1261f, -22.6802f, 51.6689f, -10.3407f, -71.6716f, 33.3209f, - -2.6190f, -11.9459f, -0.7138f, 9.1651f, 80.0695f, -58.7987f, 3.7833f, - -10.6521f, -14.2910f, -1.7854f, -6.9002f, 114.1547f, 51.0851f, 0.4936f, - 45.5988f, -65.6262f, 3.5076f, -36.3037f, 31.3412f, -22.8916f, -48.6823f, - -71.1623f, -95.4642f, 38.3287f, -9.4939f, 52.9002f, -8.4421f, 36.7283f, - 86.2675f, 37.9505f, 41.2317f, 16.4269f, 16.7260f, -62.6682f, 32.6168f, - 9.9181f, -25.0994f, -8.3770f, 2.2985f, 5.3157f, -6.0428f, 60.1555f, - 49.0247f, 6.0545f, -54.7919f, 58.6261f, -3.9732f, -80.9565f, -44.3777f, - 30.6734f, -24.5101f, -82.4513f, -27.4901f, -10.8146f, -84.7650f, 64.6334f, - 18.0553f, 14.7350f, -8.7675f, 109.6707f, 51.4393f, -24.1075f, 42.7732f, - 43.6601f, 21.1278f, -43.7223f, -36.3814f, 81.3688f, 10.3561f, 115.5857f, - 44.7304f, 4.0203f, -57.4008f, 16.1462f, 84.4927f, 16.5958f, -107.7931f, - 19.3887f, -44.8683f, -99.3061f, 65.1051f, 45.6203f, -0.6984f, 23.6828f, - 6.4828f, 56.2769f, 13.3073f, -28.0424f, -72.7066f, -58.5212f, 106.1769f, - -11.1674f, -25.7849f, -34.9574f, -36.9812f, -58.1843f, 50.2182f, 98.0044f, - 47.6759f, 0.1786f, -19.4605f, -91.2611f, -35.5267f, 13.8815f, 10.2127f, - -41.1350f, -39.8329f, -34.1829f, -47.4437f, -91.9939f, -2.6788f, -4.2821f, - -79.6033f, 42.6213f, 2.0653f, -74.4526f, 41.0602f, -5.7905f, 63.6539f, - -31.4071f, 12.4383f, -9.2647f, -81.5461f, 16.0430f, 114.6936f, 27.3863f, - -41.2719f, -36.6253f, -79.4997f, -46.2467f, 46.8034f, -19.4146f, -14.6126f, - -31.9554f, -93.9975f, 17.8233f, -51.0152f, -11.4389f, 58.4455f, -21.6241f, - 12.9670f, 60.7166f, 46.9564f, -34.6928f, -3.1553f, 2.7762f, 24.2978f, - 83.1108f, 31.8670f, 23.6533f, 6.8663f, -63.0785f, 56.1031f, 59.2073f, - 11.6877f, 51.3190f, 25.3083f, -33.9761f, -99.5482f, -6.6294f, -41.7488f, - -3.1041f, 33.3329f, -24.8851f, 20.0947f, -63.3399f, 87.2565f, -20.6208f, - -52.2549f, 102.0059f, 26.9280f, -22.0208f, 85.2782f, 28.3108f, -43.2782f, - 0.8584f, 60.5987f, -44.2357f, -33.9700f, 19.1247f, 33.1631f, -10.8275f, - -63.5371f, 16.2471f, -0.2828f, -76.6458f, 2.8322f, 15.2373f, -95.8412f, - 5.5912f, -53.4989f, -30.8518f, 4.1365f, -62.3116f, 79.0018f, -114.5611f, - -36.8596f, 12.7812f, 81.1609f, 39.2434f, 21.9162f, -17.2064f, 127.1804f, - -30.4279f, -15.8549f, 90.5057f, 4.9324f, -55.6202f, 88.7264f, 31.2457f, - -6.4338f, -33.9992f, 78.4675f, 12.7460f, -51.8920f, 5.7002f, -71.3454f, - -22.6305f, -75.0886f, -18.4430f, 71.6854f, -49.9613f, 51.9112f, 38.5919f, - -80.1990f, 4.2373f, -60.6613f, 30.4453f, 20.4006f, 28.0162f, 55.1546f, - -96.2887f, 10.3433f, 38.5883f, 59.1444f, 23.2247f, 45.0000f, -24.9305f, - -30.9055f, -18.2692f, -6.1201f, -5.6460f, 2.1550f, 18.2502f, -16.8166f, - -28.0966f, -69.3654f, -10.5762f, 63.4193f, 43.8444f, 16.6643f, -67.9380f, - -68.3269f, 93.1501f, 72.8030f, 27.6125f, -21.1484f, -73.4926f, -29.7929f, - -88.0045f, 91.0304f, 15.1885f, -15.1144f, -61.6391f, 47.5526f, 17.2017f, - -10.0973f, 16.8435f, 32.7608f, 50.6231f, -36.3173f, -19.8196f, 8.7833f, - 1.1920f, 35.7643f, -58.4480f, 53.1925f, -71.1458f, -22.3426f, 37.8118f, - -51.2779f, 69.9477f, -30.3236f, 31.2621f, 35.5419f, -64.6025f, 35.1224f, - -0.6572f, 57.9364f, 5.6749f, 50.6782f, 25.3456f, 68.4492f, 45.6955f, - -53.8176f, 44.6419f, -53.4407f, 51.5645f, 1.3456f, -4.0462f, -72.5604f, - 54.6610f, -1.6150f, -14.3009f, 99.1775f, -24.2467f, 36.0557f, -42.7052f -}; - /* ISF codebook - 36b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ const Word16 dico23_isf_36b_fx[] = {/*Qlog2(2.56)*/ @@ -16938,73 +10040,6 @@ const Word16 dico23_isf_36b_fx[] = /*-------------------------------------------------------------------* * 1st stage, 1st split: ISF0 to ISF1 *-------------------------------------------------------------------*/ -const float dico1_ns_28b[64*2] = -{ - -105.0619f, -262.8448f, - -86.6322f, -209.7320f, - -91.1931f, -168.0481f, - -53.8753f, -176.1473f, - -82.7923f, -129.2635f, - -75.0845f, -93.9859f, - -33.9476f, -90.3333f, - -74.4463f, -50.0451f, - -27.3422f, -41.3458f, - -64.0658f, -2.5361f, - 28.8179f, -70.0786f, - 10.5059f, -12.8463f, - -39.9581f, 28.7359f, - -63.4034f, 44.7503f, - -36.8732f, 67.0368f, - -2.3563f, 50.6058f, - -55.9412f, 91.2822f, - 5.5577f, 85.1171f, - -25.2586f, 105.6009f, - 34.3216f, 71.1726f, - -48.3043f, 133.1605f, - -17.0366f, 148.8321f, - 14.8305f, 130.6908f, - 45.5592f, 106.8464f, - -43.7865f, 177.4889f, - 28.9675f, 168.2081f, - -1.7812f, 190.4731f, - 68.4806f, 149.8876f, - -32.5396f, 218.9960f, - 47.8438f, 206.6539f, - 8.1960f, 234.8430f, - 89.3668f, 188.0221f, - 90.4035f, 118.3064f, - 88.4263f, 237.5410f, - 117.3136f, 145.4498f, - 82.0645f, 73.1093f, - 119.3943f, 103.4796f, - 128.2321f, 184.8528f, - 149.1563f, 129.2199f, - 144.9058f, 51.5776f, - 54.4305f, 22.6608f, - 142.5451f, 8.2812f, - 97.4966f, -31.8767f, - 173.0963f, 84.9898f, - 188.5170f, 42.9719f, - 166.5772f, 162.2136f, - 226.1740f, 86.5496f, - 202.2992f, 129.9512f, - 223.9365f, 175.1483f, - 177.6235f, 206.6174f, - 267.4435f, 128.4469f, - 129.8694f, 226.5438f, - 232.5047f, 231.7147f, - 182.8960f, 252.1132f, - 297.7026f, 201.9668f, - 127.2108f, 277.0716f, - 189.5906f, 309.6084f, - 50.8926f, 267.2207f, - 262.1367f, 287.8791f, - 138.4480f, 342.2196f, - 34.3804f, 314.8025f, - -25.4771f, 275.9066f, - -13.5804f, 397.0122f, - 103.9035f, 438.8237f -}; /* ISF codebook for SID frames - 28b, 1st split */ const Word16 dico1_ns_28b_fx[] = @@ -17078,73 +10113,6 @@ const Word16 dico1_ns_28b_fx[] = /*-------------------------------------------------------------------* * 1st stage, 2ndt split: ISF2 to ISF4 *-------------------------------------------------------------------*/ -const float dico2_ns_28b[64*3] = -{ - -322.0252f, -345.3659f, -370.7835f, - -314.5226f, -178.1928f, -163.4712f, - -172.6074f, -171.2812f, -211.3224f, - -84.6538f, -225.6710f, -309.6982f, - -65.7865f, -173.3148f, -227.1618f, - -112.2154f, -192.0593f, -106.9376f, - -215.4487f, -115.9810f, -117.3159f, - -63.6069f, -129.9179f, -139.6890f, - -144.6460f, -90.4563f, -90.4457f, - -68.4568f, -140.0307f, -62.0772f, - -148.8729f, -8.2807f, -139.6018f, - -71.8488f, -61.9658f, -63.2677f, - -20.5518f, -74.4279f, -109.2530f, - 7.0237f, -104.2936f, -83.9866f, - -53.7369f, 23.9918f, -110.5212f, - 27.5927f, -37.1603f, -114.8537f, - 5.1437f, -60.8316f, -213.2375f, - -0.0302f, -32.5161f, -30.9893f, - 17.0532f, 37.8947f, -123.4512f, - 69.4656f, -20.4364f, -83.2673f, - 86.8486f, -101.9140f, -164.6497f, - 92.7595f, -46.0582f, -17.0665f, - 55.0807f, 56.5797f, -51.6089f, - 141.9268f, 31.5952f, -111.9348f, - 83.1350f, 25.3995f, 13.2634f, - -41.6305f, 36.7624f, -1.8806f, - 35.5619f, -11.1360f, 49.0468f, - -138.6944f, 20.1165f, -16.0470f, - -85.7227f, -29.5173f, 56.5419f, - -24.5306f, 39.2035f, 95.3233f, - -280.8913f, 17.3520f, 10.4723f, - -223.4287f, -48.5814f, 60.3781f, - -165.0790f, 52.0898f, 122.9863f, - -358.1462f, 27.5800f, 87.6394f, - -104.6460f, 124.2969f, 51.2676f, - -36.4609f, -74.1586f, 163.9110f, - -38.0255f, 47.6372f, 191.7725f, - -30.7896f, 123.7246f, 138.8302f, - 50.7064f, 39.0454f, 126.9589f, - 33.4334f, -114.5499f, 82.0810f, - 52.0289f, 100.6551f, 62.9260f, - 68.9398f, -28.6776f, 181.7511f, - 76.3353f, 117.0400f, 150.0834f, - 135.9951f, 8.5581f, 86.5077f, - 146.9219f, 71.3024f, 159.6375f, - 147.3144f, 111.7858f, 78.8838f, - 94.6612f, 83.2958f, 257.4856f, - 100.5727f, 220.5308f, 96.9196f, - 134.4751f, 159.3021f, -29.6067f, - 158.3509f, 171.9108f, 198.9399f, - 238.9283f, 150.3837f, 148.0492f, - 209.2346f, 237.2747f, 84.4977f, - -21.9723f, 227.3437f, 75.1847f, - 39.1823f, 202.0239f, 221.5619f, - -142.6753f, 174.8218f, 173.9311f, - 284.1931f, 135.5243f, 4.0420f, - 197.3545f, 139.2970f, 296.6173f, - 248.5921f, 227.1523f, 257.1579f, - 130.8344f, 201.7665f, 332.6679f, - 147.8451f, 316.0691f, 223.3704f, - -76.1983f, 342.8470f, 323.9619f, - 206.5931f, 276.1481f, 385.6192f, - 358.4664f, 283.4258f, 153.2502f, - 488.2212f, 389.4155f, 415.1465f -}; /* ISF codebook for SID frames - 28b, 2nd spilt */ const Word16 dico2_ns_28b_fx[] = @@ -17218,73 +10186,6 @@ const Word16 dico2_ns_28b_fx[] = /*-------------------------------------------------------------------* * 1st stage, 3rd split: ISF5 to ISF7 *-------------------------------------------------------------------*/ -const float dico3_ns_28b[64*3] = -{ - -314.4522f, -327.3454f, -302.2017f, - -203.9117f, -244.9068f, -323.6309f, - -186.2536f, -189.6962f, -235.4297f, - -115.3995f, -187.7246f, -247.4612f, - -142.8871f, -150.1942f, -153.3509f, - -72.7072f, -161.6552f, -154.8560f, - -92.6058f, -153.8863f, -41.3953f, - -98.5994f, -78.7129f, -107.5332f, - -23.9335f, -69.1898f, -172.7805f, - -32.7960f, -77.3107f, -77.6193f, - -69.7610f, -48.7327f, -12.2728f, - -28.2008f, -18.3660f, -63.7045f, - -116.3960f, -85.9584f, 84.0164f, - -24.9241f, -65.7832f, 98.1712f, - -51.8131f, 60.9599f, -23.0835f, - -11.5386f, -0.7831f, 49.5084f, - 20.9367f, 25.8838f, -24.0191f, - -91.0503f, 8.0161f, 98.1430f, - 81.8089f, -19.4694f, 12.5661f, - 12.6976f, 75.6776f, 53.0320f, - -45.8943f, -7.2062f, 185.7293f, - 78.8625f, 17.9396f, 120.6767f, - 99.9111f, 72.2135f, 20.5674f, - 13.7143f, 77.9979f, 152.4088f, - 78.0738f, 102.8484f, 94.6295f, - -84.5040f, 118.1050f, 114.7064f, - 50.0596f, 139.6647f, -0.1577f, - 7.5966f, 168.3675f, 112.1363f, - 87.3316f, 174.4695f, 109.2434f, - 143.4298f, 64.6162f, 83.1959f, - 155.2307f, 122.7478f, 124.7551f, - 149.4719f, 147.9446f, 29.2261f, - 108.3426f, 127.0695f, 180.3353f, - 153.8867f, 197.0929f, 130.5922f, - 98.1956f, 38.2729f, -83.1688f, - 175.9048f, 59.9165f, 174.8273f, - 220.7233f, 88.4354f, 29.6527f, - 183.5505f, 149.7702f, 195.9197f, - 248.2375f, 152.2900f, 108.7161f, - 92.6034f, 52.6123f, 242.1773f, - 133.7155f, 156.6441f, 253.6524f, - 129.4868f, 215.2826f, 202.4702f, - 50.8526f, 163.2149f, 231.3041f, - 207.4225f, 119.3517f, 287.7008f, - 284.9414f, 152.0429f, 226.6699f, - 194.1092f, 217.5607f, 272.9373f, - 115.7381f, 149.7147f, 341.2299f, - 110.4872f, 243.8135f, 296.4818f, - 49.2583f, 242.9759f, 185.7527f, - 218.4281f, 232.2570f, 184.3956f, - 149.3219f, 300.8763f, 240.4531f, - 280.7402f, 239.3506f, 291.1599f, - 210.7589f, 249.5308f, 362.4219f, - 201.8519f, 322.7530f, 312.7221f, - 267.0336f, 316.7373f, 236.0985f, - 293.8933f, 307.2101f, 334.8007f, - 364.5740f, 258.0872f, 136.8430f, - 271.0491f, 175.6599f, 414.3537f, - 219.3663f, 355.8581f, 410.6574f, - 321.8781f, 317.4617f, 431.4073f, - 295.9753f, 408.9221f, 344.4007f, - 445.2552f, 358.3636f, 347.1212f, - 405.7584f, 486.9081f, 556.9660f, - 579.1823f, 650.5953f, 732.6415f -}; /* ISF codebook for SID frames - 28b, 3rd spilt */ const Word16 dico3_ns_28b_fx[] = @@ -17358,41 +10259,6 @@ const Word16 dico3_ns_28b_fx[] = /*-------------------------------------------------------------------* * 1st stage, 4th split: ISF8 to ISF11 *-------------------------------------------------------------------*/ -const float dico4_ns_28b[32*4] = -{ - -303.1361f, -333.7803f, -347.8725f, -359.4826f, - -215.7523f, -238.3714f, -259.0660f, -289.4405f, - -125.2913f, -144.5697f, -186.1030f, -220.5702f, - 107.0201f, -62.5400f, -178.2959f, 78.3558f, - 103.6377f, 26.1626f, -62.5396f, -119.5691f, - -2.9518f, -82.1288f, 30.9020f, 106.1641f, - 63.5315f, 92.0127f, 120.0751f, 120.2205f, - 225.8191f, 123.6829f, 24.8449f, 116.4136f, - -3.5121f, 76.7992f, 133.5771f, 242.3746f, - 133.9970f, 90.5385f, 122.6116f, 242.8362f, - 67.7067f, 58.1366f, 214.2467f, 205.7587f, - 139.2159f, 144.6370f, 188.0780f, 146.8699f, - 52.7259f, 173.3530f, 190.5093f, 217.0651f, - 152.5843f, 183.9790f, 190.4016f, 255.0127f, - 89.0815f, 165.5783f, 224.8295f, 325.9805f, - 164.7109f, 145.4724f, 282.2096f, 266.3416f, - 115.0926f, 262.9259f, 270.8098f, 248.1893f, - 210.4561f, 232.8534f, 230.5395f, 175.4710f, - 185.5563f, 241.3006f, 257.2568f, 319.6433f, - 287.0131f, 201.7823f, 191.6938f, 262.7153f, - 234.9706f, 135.0743f, 100.3842f, 342.4814f, - 244.1460f, 248.1535f, 331.5106f, 281.3059f, - 283.8415f, 319.6996f, 272.8347f, 232.3501f, - 255.2254f, 187.9562f, 269.5668f, 445.0594f, - 318.1439f, 297.7580f, 274.9042f, 354.5264f, - 198.0688f, 291.9682f, 350.7645f, 365.4872f, - 331.2469f, 333.9341f, 361.1275f, 306.5865f, - 252.3140f, 405.2271f, 344.4444f, 310.3618f, - 301.5996f, 329.9839f, 399.8752f, 449.5998f, - 442.5639f, 384.1796f, 319.3500f, 359.8945f, - 367.3365f, 417.2813f, 488.9795f, 508.7549f, - 620.4818f, 690.0919f, 671.0975f, 590.9387f -}; /* ISF codebook for SID frames - 28b, 4th spilt */ const Word16 dico4_ns_28b_fx[] = @@ -17434,41 +10300,6 @@ const Word16 dico4_ns_28b_fx[] = /*-------------------------------------------------------------------* * 1st stage, 5th split: ISF12 to ISF15 *-------------------------------------------------------------------*/ -const float dico5_ns_28b[32*4] = -{ - -316.2941f, -343.3920f, -368.9643f, -99.0392f, - 97.0450f, 71.7080f, 262.1754f, 50.0767f, - 112.4468f, 274.7287f, 358.7211f, 38.6232f, - 257.1795f, 217.8952f, 258.6022f, 85.4104f, - 215.6079f, 228.7031f, 355.6118f, 81.4276f, - 218.4167f, 314.1638f, 296.3636f, 46.5526f, - 236.5851f, 302.2603f, 359.7074f, -54.3647f, - 305.5962f, 297.4161f, 292.2765f, 81.3061f, - 295.4005f, 276.4861f, 384.1555f, 21.9038f, - 212.3865f, 337.6641f, 394.4713f, 59.4888f, - 287.8841f, 272.8244f, 385.4754f, 116.6899f, - 301.1416f, 360.9641f, 343.2708f, 40.2882f, - 209.5407f, 306.5670f, 375.3650f, 158.1632f, - 260.4655f, 357.6203f, 312.8495f, 128.1323f, - 288.3843f, 275.2455f, 301.9735f, 171.2988f, - 321.4736f, 340.3829f, 387.3967f, 138.5811f, - 250.1021f, 392.3276f, 410.9932f, 144.0109f, - 282.6727f, 320.9480f, 370.8150f, 233.3823f, - 161.9622f, 255.8086f, 284.8333f, 188.2323f, - 393.9827f, 349.8717f, 309.8297f, 141.6719f, - 354.6675f, 313.7792f, 268.4562f, -9.8681f, - 396.7580f, 327.4283f, 395.0635f, 73.8789f, - 369.8889f, 434.5653f, 367.9579f, 86.8706f, - 356.9169f, 409.7761f, 383.1727f, 205.7493f, - 373.4236f, 385.5478f, 394.8253f, -47.0644f, - 305.1456f, 409.5952f, 437.7072f, 36.1164f, - 460.1152f, 411.4012f, 345.2657f, 18.4203f, - 438.6750f, 413.5906f, 461.8582f, 46.2207f, - 364.6111f, 379.8415f, 498.6693f, 139.3899f, - 433.1401f, 358.6805f, 429.9292f, 196.6537f, - 405.9484f, 502.2995f, 476.5874f, 123.6977f, - 527.5430f, 471.6736f, 394.4862f, 127.2615f -}; /* ISF codebook for SID frames - 28b, 5th spilt */ const Word16 dico5_ns_28b_fx[] = @@ -17512,49 +10343,6 @@ const Word16 means_wb_31bits_ma_lsf[16] = { 818 /*319.5312f*1.28f Q1*/, 1403 /*5 const Word16 *lsf_means[2] = { means_wb_31bits_ma_lsf, means_nb_31bits_ma_lsf }; -#ifndef IVAS_FLOAT_FIXED -const float * const lsf_means_float[2] = { means_wb_31bits_ma_lsf_float, means_nb_31bits_ma_lsf_float }; -#endif - -const lsp_unw_triplet_flt p16_gamma0_92to1_float[16] = -{ - { 0.00000f, 1.19764f, -0.59173f }, - { -0.91173f, 1.79182f, -0.80921f }, - { -0.51779f, 1.44703f, -0.81871f }, - { -0.44862f, 1.36777f, -0.75103f }, - { -0.45150f, 1.30719f, -0.74220f }, - { -0.43157f, 1.21326f, -0.68538f }, - { -0.43606f, 1.21317f, -0.69131f }, - { -0.39200f, 1.04941f, -0.58674f }, - { -0.45208f, 1.10009f, -0.59175f }, - { -0.42553f, 0.99725f, -0.49992f }, - { -0.50168f, 1.07575f, -0.51401f }, - { -0.49800f, 1.06563f, -0.50592f }, - { -0.53101f, 1.16372f, -0.58033f }, - { -0.48744f, 1.07596f, -0.52531f }, - { -0.51899f, 1.04998f, -0.49495f }, - { -0.47730f, 0.90959f, 0.00000f } -}; - -const lsp_unw_triplet_flt p16_gamma0_94to1_float[16] = -{ - { 0.00000f, 0.78925f, -0.38537f }, - { -0.57154f, 1.19486f, -0.54136f }, - { -0.33642f, 0.99096f, -0.56792f }, - { -0.29856f, 0.93785f, -0.51255f }, - { -0.29716f, 0.89303f, -0.50509f }, - { -0.28264f, 0.81530f, -0.46020f }, - { -0.27926f, 0.80997f, -0.46378f }, - { -0.25334f, 0.69596f, -0.38969f }, - { -0.29656f, 0.72916f, -0.38888f }, - { -0.27488f, 0.65949f, -0.32999f }, - { -0.32630f, 0.70913f, -0.33659f }, - { -0.33069f, 0.70668f, -0.33105f }, - { -0.35437f, 0.77582f, -0.38003f }, - { -0.31771f, 0.70752f, -0.34216f }, - { -0.35066f, 0.70177f, -0.31664f }, - { -0.33404f, 0.62528f, 0.00000f } -}; const lsp_unw_triplet p16_gamma0_92to1[16] = /* Q14 */ { @@ -17596,267 +10384,6 @@ const lsp_unw_triplet p16_gamma0_94to1[16] = /* Q14 */ { -5473, 10245, 0 } }; -#ifndef IVAS_FLOAT_FIXED -const float dico_lsf_abs_8b_flt[256*M] = -{ - 377.3749f, 688.0079f, 1147.3799f, 1461.0438f, 1786.7794f, 2143.6711f, 2522.1946f, 2889.7402f, 3263.6023f, 3628.4624f, 4005.4351f, 4379.4170f, 4783.9556f, 5157.1753f, 5555.1797f, 5926.6816f, - 601.5123f, 1066.8242f, 1384.3585f, 1652.9448f, 1978.3910f, 2311.2676f, 2674.0537f, 3010.3896f, 3360.0623f, 3725.9336f, 4093.3335f, 4470.6431f, 4859.1006f, 5210.4717f, 5598.3716f, 5954.4204f, - 552.5036f, 859.7047f, 1355.2023f, 1624.9041f, 1887.5609f, 2173.1638f, 2540.7429f, 2926.8169f, 3323.2173f, 3680.7197f, 4008.3447f, 4330.8442f, 4692.8228f, 5033.9697f, 5443.3467f, 5875.4497f, - 459.4534f, 793.3189f, 1293.7278f, 1617.3970f, 1920.0642f, 2192.2153f, 2487.5627f, 2772.1514f, 3111.3823f, 3461.2671f, 3867.0176f, 4279.8550f, 4741.0664f, 5141.0181f, 5552.8237f, 5933.6934f, - 327.9834f, 430.4954f, 723.9031f, 1528.6172f, 1763.1125f, 2013.7936f, 2334.2153f, 2569.0334f, 3017.9436f, 3308.0610f, 3591.7820f, 3865.5430f, 4693.5786f, 5286.7646f, 5647.7036f, 5987.2305f, - 455.0753f, 606.0817f, 963.7564f, 1374.9937f, 1536.4897f, 1914.7618f, 2376.9631f, 2580.8184f, 2989.1501f, 3258.8386f, 3485.1460f, 3741.1270f, 4297.4912f, 5207.3779f, 5672.3818f, 5980.5322f, - 434.9507f, 558.8508f, 890.7061f, 1355.7625f, 1552.6155f, 1895.7960f, 2222.5579f, 2502.6079f, 2841.8738f, 3137.5264f, 3367.7336f, 3860.7769f, 4795.2554f, 5090.9370f, 5421.8218f, 5874.4287f, - 281.0164f, 404.5417f, 729.2898f, 997.1851f, 1699.8862f, 1961.3673f, 2255.7202f, 2540.9187f, 2804.4553f, 3057.1843f, 3750.2288f, 4340.9893f, 4716.8647f, 5002.7471f, 5477.2998f, 5965.7402f, - 372.2410f, 505.3570f, 762.3755f, 997.3586f, 1174.4255f, 1986.1741f, 2368.1367f, 2624.1733f, 3194.6084f, 3403.2793f, 3877.7622f, 4425.7676f, 4824.7837f, 5158.1606f, 5532.7466f, 5893.5483f, - 367.3766f, 501.1806f, 824.5358f, 1090.6857f, 1271.9792f, 1527.7137f, 2381.4382f, 2694.4634f, 2964.5359f, 3639.4832f, 3946.4038f, 4254.3916f, 4645.8076f, 5033.5396f, 5373.8735f, 5878.4385f, - 229.4505f, 352.5671f, 701.0831f, 1226.4518f, 1678.3601f, 1895.7949f, 2140.0664f, 2526.5515f, 3080.3391f, 3297.8284f, 3845.3987f, 4427.9785f, 4704.4551f, 4997.4155f, 5434.0698f, 5918.4785f, - 336.3082f, 516.7915f, 881.9847f, 1272.5824f, 1505.1870f, 1880.7520f, 2274.9458f, 2611.0083f, 3126.5256f, 3655.5332f, 4183.3877f, 4668.2993f, 5004.0029f, 5305.3491f, 5650.4985f, 5943.7383f, - 296.0867f, 469.6519f, 956.5997f, 1224.1262f, 1443.0049f, 1727.6880f, 2216.1677f, 2689.3677f, 3060.4456f, 3520.9438f, 3916.6050f, 4343.7954f, 4763.8906f, 5156.0132f, 5553.8115f, 5936.9634f, - 407.1503f, 577.5120f, 839.7361f, 1455.3907f, 1665.2137f, 1935.0054f, 2398.0537f, 2652.2605f, 3111.1831f, 3505.5962f, 3766.7554f, 4204.8730f, 4699.1631f, 4970.8652f, 5295.5962f, 5695.6919f, - 281.0083f, 361.8386f, 950.9102f, 1464.1158f, 1634.7019f, 1965.4950f, 2211.1406f, 2662.1055f, 2846.0122f, 3585.8884f, 4048.7148f, 4358.9150f, 4683.8755f, 5046.0908f, 5400.0859f, 5956.1040f, - 279.1811f, 393.9142f, 876.8306f, 1502.2417f, 1673.0590f, 2288.7161f, 2545.3674f, 3028.9507f, 3517.5840f, 3824.4246f, 4144.8486f, 4481.8140f, 4821.2769f, 5162.3975f, 5542.8560f, 5928.5854f, - 379.7892f, 500.9199f, 725.0223f, 998.7143f, 1179.6127f, 1771.9886f, 2775.4812f, 3136.8457f, 3378.6143f, 3674.0188f, 3946.3604f, 4184.4824f, 4521.5454f, 4934.8940f, 5315.5029f, 5759.7544f, - 317.4339f, 442.2628f, 778.7388f, 1167.8633f, 1356.1576f, 1578.5603f, 1840.1584f, 2870.7527f, 3236.1504f, 3502.7249f, 3876.3696f, 4100.5244f, 4650.2632f, 5235.1890f, 5665.2285f, 5999.0649f, - 350.2696f, 492.2163f, 763.0640f, 1264.7550f, 1515.0244f, 1755.7783f, 2489.3274f, 2898.6252f, 3143.1018f, 3643.0640f, 4035.0657f, 4255.0889f, 4641.7231f, 5138.5107f, 5557.1318f, 5920.2402f, - 301.3833f, 464.9852f, 762.3419f, 1012.2126f, 1803.5172f, 2192.4214f, 2651.6287f, 3013.6697f, 3251.3591f, 3539.4675f, 3946.3433f, 4469.3560f, 4890.7446f, 5200.4878f, 5509.6753f, 5910.2397f, - 253.1752f, 356.8990f, 630.3325f, 1163.1683f, 1528.6230f, 2023.4438f, 2488.6001f, 2745.5627f, 2933.7024f, 3237.4414f, 3976.9258f, 4415.2534f, 4789.9131f, 5194.3423f, 5714.6445f, 6032.4160f, - 265.1815f, 364.7549f, 590.0148f, 805.2595f, 1564.7582f, 2150.6536f, 2365.6501f, 2598.7876f, 2861.5334f, 3514.1265f, 4005.6328f, 4609.3091f, 4955.4478f, 5238.4116f, 5519.5884f, 5890.7925f, - 209.3544f, 313.1497f, 503.2642f, 949.4504f, 1729.7280f, 1912.6814f, 2117.5051f, 2498.6272f, 3284.6587f, 3810.8555f, 4105.0195f, 4349.5151f, 4770.3682f, 5210.2910f, 5585.1533f, 5970.3638f, - 302.3150f, 415.6502f, 684.1018f, 922.3598f, 1489.4418f, 2235.6252f, 2449.9773f, 2800.6938f, 3061.3721f, 3526.1001f, 3905.8174f, 4170.7891f, 4446.4209f, 4907.9937f, 5470.7158f, 5914.7261f, - 264.9068f, 366.4342f, 582.8182f, 790.8568f, 1619.4548f, 2034.0782f, 2337.6724f, 2632.1714f, 2933.2356f, 3430.1858f, 3815.0198f, 4276.3931f, 4748.3149f, 5164.0098f, 5553.3320f, 5974.9092f, - 249.6359f, 361.9234f, 581.9844f, 841.1097f, 1657.5543f, 2184.4114f, 2525.9739f, 2820.0503f, 3120.7190f, 3623.7678f, 4050.5435f, 4434.5742f, 4802.6782f, 5171.8438f, 5575.0068f, 5963.7402f, - 290.1085f, 404.2538f, 664.1223f, 878.2748f, 1237.1085f, 2237.4707f, 2497.5647f, 2957.7786f, 3289.3928f, 3626.5276f, 4190.9243f, 4594.6450f, 4981.7456f, 5283.5513f, 5617.1538f, 5938.3760f, - 182.7846f, 270.3831f, 490.2131f, 1070.2524f, 1674.5724f, 2092.4905f, 2524.1472f, 2929.3523f, 3334.8005f, 3712.0061f, 4101.2896f, 4475.7324f, 4866.1919f, 5231.7559f, 5606.4077f, 5960.9644f, - 286.7701f, 386.1487f, 577.4210f, 764.3087f, 1151.2404f, 2014.4502f, 2399.8547f, 2879.0371f, 3160.2502f, 3450.6274f, 3869.8240f, 4368.3618f, 4816.7861f, 5187.6450f, 5564.7231f, 5962.0386f, - 179.9538f, 266.0682f, 647.9122f, 1380.2810f, 1776.1240f, 2208.4592f, 2590.6843f, 2993.6758f, 3368.2034f, 3753.2156f, 4125.2124f, 4508.6050f, 4878.9932f, 5249.3291f, 5612.5049f, 5965.2134f, - 309.2416f, 434.7111f, 724.6614f, 936.5360f, 1264.9886f, 2272.1338f, 2548.4519f, 2904.0798f, 3313.4990f, 3579.7854f, 3914.5811f, 4297.5938f, 4756.9072f, 5163.2017f, 5592.2822f, 5943.7222f, - 256.9009f, 393.7155f, 769.3966f, 1200.9640f, 1774.4797f, 2307.9629f, 2794.6799f, 3165.9431f, 3507.7952f, 3840.5791f, 4142.8877f, 4453.5078f, 4790.6973f, 5142.6123f, 5530.5977f, 5923.2188f, - 394.1425f, 602.0079f, 934.5173f, 1352.9718f, 1813.9639f, 2172.5435f, 2603.7295f, 2963.9590f, 3335.2344f, 3732.0515f, 4120.0151f, 4487.9668f, 4877.6294f, 5238.9336f, 5596.1479f, 5939.6489f, - 373.0307f, 665.4328f, 1227.4684f, 1524.6017f, 1947.3784f, 2361.6384f, 2778.1921f, 3134.5396f, 3462.3992f, 3752.4592f, 4069.0352f, 4404.2720f, 4782.2241f, 5145.0581f, 5541.9980f, 5932.9136f, - 449.9942f, 814.1862f, 1344.2784f, 1682.7061f, 2086.3599f, 2486.9709f, 2916.1177f, 3265.9099f, 3616.3977f, 3919.6345f, 4218.5342f, 4519.2207f, 4857.5220f, 5193.5269f, 5573.7339f, 5934.5400f, - 531.4455f, 965.7403f, 1458.5353f, 1773.3784f, 2236.0146f, 2650.9109f, 3099.2871f, 3467.1567f, 3809.7056f, 4094.6472f, 4378.5811f, 4660.2471f, 4962.5078f, 5270.9863f, 5629.4160f, 5973.6450f, - 565.5986f, 1091.1300f, 1561.4944f, 1983.5482f, 2492.8821f, 2897.5085f, 3233.5361f, 3539.8831f, 3838.6494f, 4093.4460f, 4372.1924f, 4678.2251f, 4999.2646f, 5325.0371f, 5672.8887f, 5998.9990f, - 581.0623f, 976.0275f, 1447.0302f, 1779.9243f, 2148.2158f, 2543.8347f, 2979.5061f, 3373.6099f, 3796.8259f, 4164.8242f, 4510.5493f, 4853.5527f, 5175.6318f, 5465.3647f, 5763.2334f, 6050.6582f, - 429.4613f, 802.5781f, 1229.0529f, 1512.6678f, 1835.8625f, 2216.9915f, 2625.3999f, 2995.9927f, 3379.5146f, 3764.7837f, 4156.1382f, 4532.4570f, 4906.4678f, 5262.8960f, 5626.6519f, 5970.6504f, - 224.5468f, 328.6938f, 615.8844f, 1207.4470f, 1520.9565f, 1865.9806f, 2182.4731f, 2431.4897f, 3239.3486f, 3490.9065f, 3775.7139f, 4291.4312f, 4740.0815f, 5192.0786f, 5532.9302f, 5928.7236f, - 312.1133f, 424.3103f, 716.4448f, 921.9969f, 1244.5491f, 2017.9143f, 2248.4170f, 2840.0688f, 3138.9390f, 3399.7288f, 3723.3479f, 3999.6824f, 4582.2339f, 5148.5166f, 5631.8989f, 6000.7192f, - 373.5378f, 506.7356f, 789.6149f, 942.6201f, 1695.8035f, 2021.6426f, 2323.3867f, 2649.5979f, 2853.1729f, 3169.5815f, 3524.9375f, 3848.6399f, 4261.7319f, 4978.9668f, 5505.4004f, 5924.7939f, - 503.2296f, 724.8124f, 940.3833f, 1220.5646f, 1439.8641f, 1726.9827f, 2215.5464f, 2476.0925f, 2846.8127f, 3232.0950f, 3638.5989f, 3986.3333f, 4371.3052f, 5022.0664f, 5657.4897f, 6040.3452f, - 398.3355f, 530.8898f, 835.5377f, 1058.3699f, 1327.2036f, 1814.9178f, 2114.2439f, 2515.8892f, 2754.9077f, 3094.8794f, 3598.7061f, 3981.2385f, 4605.9160f, 5110.8364f, 5550.1899f, 5953.9600f, - 327.7583f, 454.8903f, 825.9029f, 1025.4349f, 1321.1567f, 1551.4836f, 1978.2037f, 2838.9021f, 3111.9041f, 3417.3940f, 3841.0564f, 4696.0547f, 5126.1641f, 5409.5347f, 5711.7163f, 5968.3394f, - 327.1260f, 431.3983f, 721.9533f, 871.1266f, 1507.7616f, 1847.8716f, 2144.9641f, 2491.1108f, 2702.0847f, 3483.1516f, 3917.5173f, 4254.1260f, 4704.4863f, 4981.6284f, 5450.1035f, 5937.7861f, - 443.5867f, 610.7686f, 818.9614f, 999.3525f, 1181.9182f, 1884.4948f, 2243.3950f, 2522.8867f, 2993.8594f, 3196.6631f, 3835.5020f, 4233.2568f, 4506.8604f, 4985.0249f, 5544.1382f, 5980.0083f, - 395.7788f, 582.9504f, 822.1151f, 1013.0453f, 1224.6812f, 1988.4263f, 2452.4744f, 2686.4263f, 2952.8831f, 3135.0867f, 3562.5471f, 4006.6929f, 4401.7471f, 5038.5654f, 5567.4189f, 5986.0850f, - 264.3071f, 372.0398f, 616.4940f, 842.1705f, 1350.0250f, 1822.1957f, 2165.8896f, 2662.2937f, 3055.4390f, 3502.6787f, 3923.4236f, 4352.6587f, 4772.5068f, 5158.1309f, 5573.9385f, 5972.6895f, - 218.7390f, 325.2024f, 635.0441f, 1103.4701f, 1636.4287f, 2070.2615f, 2274.2910f, 2453.2002f, 3069.4382f, 3615.7065f, 3980.0811f, 4484.8662f, 4848.6416f, 5093.7163f, 5522.6973f, 5907.4048f, - 260.0797f, 461.2137f, 1049.2261f, 1334.1865f, 1628.6233f, 2014.9823f, 2413.4802f, 2844.4973f, 3232.3040f, 3661.0122f, 4069.8274f, 4466.5210f, 4857.6553f, 5234.4463f, 5608.4517f, 5954.7920f, - 301.7969f, 406.3861f, 706.7324f, 1387.1207f, 1581.4719f, 2004.7585f, 2291.9421f, 2548.9978f, 3076.8755f, 3343.1306f, 3623.1770f, 4279.7432f, 4777.6563f, 5084.3960f, 5473.4536f, 5872.0615f, - 344.0269f, 472.3550f, 776.6819f, 1455.1270f, 1611.6870f, 2012.4386f, 2417.4033f, 2621.8564f, 3318.9663f, 3709.0132f, 3944.1958f, 4299.0293f, 4776.4038f, 5184.1089f, 5545.5454f, 5913.9531f, - 332.1463f, 433.0623f, 992.1605f, 1254.8217f, 1498.4819f, 1824.6357f, 2118.3374f, 2444.6484f, 2684.8369f, 2930.4683f, 3557.4851f, 4292.9014f, 4786.7251f, 5138.2168f, 5616.2739f, 5996.8369f, - 281.7202f, 372.7708f, 1074.7051f, 1443.0428f, 1687.6460f, 1980.7075f, 2275.4241f, 2632.2017f, 2848.1765f, 3118.7881f, 3628.5857f, 4522.9585f, 4876.2163f, 5177.2739f, 5600.6675f, 5960.9634f, - 412.0151f, 535.6881f, 768.8618f, 1462.2601f, 1789.1055f, 1947.8196f, 2224.6890f, 2447.9089f, 2834.6140f, 3472.6721f, 3729.8525f, 4008.2893f, 4525.7271f, 4822.9194f, 5204.6611f, 5895.0942f, - 263.8760f, 379.7789f, 825.0498f, 1113.1218f, 1465.8749f, 1846.7463f, 2146.0496f, 2487.2766f, 2845.8447f, 3388.4800f, 3883.8447f, 4440.7603f, 4867.0815f, 5214.7280f, 5535.8149f, 5906.9932f, - 409.8116f, 583.7237f, 859.1983f, 1172.0491f, 1377.6473f, 1984.8322f, 2361.7292f, 2688.9368f, 3238.6563f, 3542.6716f, 3944.3005f, 4441.0840f, 4881.1211f, 5224.6045f, 5604.3711f, 5909.3657f, - 318.0743f, 438.8244f, 852.9153f, 1061.4503f, 1290.7609f, 1552.5408f, 2053.1118f, 2373.2883f, 2926.1560f, 3452.9551f, 4098.6626f, 4585.2773f, 4967.0898f, 5271.2720f, 5644.6709f, 5961.9585f, - 370.3631f, 496.5860f, 932.6390f, 1213.4189f, 1452.6641f, 1803.1532f, 2092.2354f, 2607.5247f, 2883.8086f, 3112.1086f, 3687.5657f, 4525.1274f, 4846.9404f, 5130.0537f, 5416.4141f, 5804.5122f, - 247.8941f, 343.9862f, 751.6780f, 1526.2566f, 1712.5012f, 2038.0667f, 2324.0371f, 2727.9749f, 3005.8975f, 3378.9817f, 3858.2002f, 4339.2017f, 4716.4580f, 5125.0918f, 5564.3589f, 5969.7163f, - 297.6552f, 401.7544f, 891.9346f, 1380.2275f, 1540.3125f, 1782.6058f, 2009.2045f, 2614.2092f, 2899.5396f, 3379.9722f, 3804.1169f, 4284.8540f, 4696.3335f, 5118.4551f, 5525.9839f, 5934.2686f, - 226.1444f, 333.4511f, 682.9995f, 1307.4166f, 1554.1943f, 1849.3679f, 2116.3438f, 2756.3567f, 3204.3018f, 3540.4106f, 4002.1895f, 4402.7734f, 4796.4395f, 5192.6812f, 5600.6841f, 5960.1855f, - 196.3791f, 299.9716f, 572.3173f, 1201.8826f, 1804.7235f, 2012.0171f, 2264.7415f, 2790.3406f, 3272.6926f, 3668.4863f, 4063.0435f, 4442.4419f, 4810.5957f, 5156.0923f, 5512.8501f, 5900.7441f, - 280.1911f, 391.5190f, 705.9903f, 1435.5063f, 1588.2345f, 2116.5032f, 2357.1875f, 2670.7461f, 3299.0071f, 3507.9336f, 4044.3057f, 4591.9023f, 4981.4575f, 5281.1270f, 5654.7158f, 5949.9263f, - 262.5740f, 370.5089f, 654.7243f, 1278.9299f, 1847.3096f, 2087.3394f, 2553.8892f, 2887.8269f, 3254.0747f, 3810.6626f, 4258.4390f, 4528.8022f, 4872.9741f, 5206.0483f, 5565.2876f, 5918.5596f, - 193.6133f, 356.3127f, 1076.8109f, 1485.8608f, 1887.7994f, 2273.1333f, 2676.7832f, 3052.3513f, 3419.1294f, 3792.5024f, 4161.7036f, 4532.6431f, 4898.5176f, 5262.0498f, 5622.8901f, 5976.4863f, - 302.7377f, 409.7598f, 899.1851f, 1176.6501f, 1531.3615f, 1933.6494f, 2229.9561f, 2819.8936f, 3031.6248f, 3807.0129f, 4118.7495f, 4412.7339f, 4704.6758f, 5012.0190f, 5351.4160f, 5892.3232f, - 421.1889f, 587.3521f, 835.9208f, 1248.0127f, 1475.8882f, 1779.3772f, 2330.6294f, 2606.6780f, 3026.0417f, 3513.8035f, 3754.6023f, 4081.0518f, 4536.3438f, 4815.9336f, 5117.6392f, 5802.9902f, - 378.0719f, 722.0884f, 1327.5808f, 1665.8940f, 1954.7782f, 2238.9473f, 2608.8538f, 2958.7910f, 3341.5112f, 3721.2021f, 4095.8457f, 4457.6865f, 4843.8672f, 5212.5142f, 5589.5122f, 5945.3730f, - 468.4631f, 962.3222f, 1541.0238f, 1919.1746f, 2347.4365f, 2650.7366f, 2927.5945f, 3166.4202f, 3451.0664f, 3757.8477f, 4109.2383f, 4467.9443f, 4858.6045f, 5211.8428f, 5593.3311f, 5951.0137f, - 422.2508f, 845.8956f, 1495.2552f, 1811.3933f, 2128.1157f, 2371.2532f, 2656.0715f, 2942.9011f, 3294.5308f, 3652.0935f, 4031.2534f, 4399.2222f, 4801.9497f, 5163.3721f, 5559.4517f, 5934.4063f, - 423.1028f, 661.7286f, 991.1974f, 1204.3813f, 1472.8564f, 2003.0298f, 2443.5833f, 2789.2795f, 3354.1692f, 3722.7822f, 4032.7351f, 4320.9727f, 4621.8140f, 4963.7310f, 5429.8203f, 5900.1465f, - 361.2513f, 485.9720f, 828.4865f, 1340.9952f, 1497.8477f, 2072.8511f, 2437.9839f, 2674.9912f, 3259.3357f, 3539.0474f, 3789.1389f, 4087.5015f, 4404.8867f, 4771.0947f, 5500.2227f, 6015.7041f, - 301.8146f, 392.9569f, 685.1938f, 1783.6246f, 2034.8542f, 2257.1614f, 2519.8713f, 2782.6279f, 3152.1135f, 3400.8662f, 3614.3801f, 3906.7375f, 4233.1968f, 4712.3682f, 5596.0396f, 5998.5742f, - 242.0591f, 371.0809f, 729.0743f, 1190.6813f, 1851.5691f, 2132.6724f, 2334.7773f, 2522.3608f, 3091.8643f, 3621.4614f, 3854.5227f, 4174.7017f, 4490.7510f, 4780.1230f, 5157.6147f, 5865.4756f, - 431.2477f, 562.1808f, 888.5207f, 1034.2062f, 1443.2480f, 2109.8850f, 2337.1443f, 2829.1870f, 3070.1301f, 3252.6370f, 3510.3967f, 4366.2236f, 4843.2139f, 5133.0537f, 5549.8911f, 5850.3252f, - 420.2594f, 668.9339f, 911.1281f, 1218.0372f, 1806.5541f, 2050.8423f, 2394.5708f, 2761.3542f, 3021.1716f, 3414.0020f, 3970.9626f, 4342.2900f, 4691.6074f, 5062.5386f, 5452.6655f, 5792.8384f, - 257.3011f, 370.8905f, 604.8825f, 1096.4209f, 1711.8464f, 1934.4335f, 2319.4717f, 2769.0144f, 3019.0200f, 3354.3726f, 4119.8809f, 4354.8589f, 4557.7979f, 4893.5776f, 5450.3042f, 5910.4136f, - 241.4264f, 347.9253f, 622.2432f, 1248.8121f, 1559.7318f, 1848.8098f, 2315.5635f, 2571.5894f, 2879.5754f, 3624.1069f, 3968.0334f, 4238.9727f, 4713.4746f, 5156.6792f, 5568.5596f, 5975.8716f, - 478.7131f, 629.4184f, 918.1857f, 1342.7815f, 1535.1541f, 1803.0487f, 2483.7764f, 2724.4321f, 2998.1257f, 3634.9932f, 3915.9443f, 4119.2837f, 4327.0283f, 4980.3516f, 5532.6880f, 5964.3052f, - 265.7818f, 373.8575f, 723.3755f, 1186.0619f, 1509.2827f, 2064.2075f, 2298.1992f, 2566.4395f, 2785.7659f, 3423.1396f, 3883.9011f, 4136.8940f, 4463.0386f, 5010.6592f, 5539.0337f, 5931.4414f, - 221.4221f, 347.7610f, 707.4465f, 1187.0800f, 1575.9095f, 1824.3983f, 1979.3307f, 2299.3174f, 2967.6799f, 3472.3381f, 3955.8469f, 4292.6079f, 4794.8745f, 5127.5181f, 5652.6729f, 5953.0132f, - 397.2769f, 510.2605f, 746.8268f, 1588.0735f, 1991.5200f, 2150.6843f, 2439.0486f, 2712.2754f, 2972.5825f, 3501.2673f, 3917.5459f, 4143.6069f, 4443.4414f, 4829.1929f, 5490.0376f, 6028.3794f, - 280.5184f, 370.6464f, 640.7120f, 1721.3899f, 1948.9806f, 2149.9592f, 2400.4678f, 2674.0542f, 3146.3154f, 3419.8850f, 3813.9553f, 4417.4497f, 4818.3652f, 5139.6323f, 5465.0669f, 5879.7183f, - 325.2418f, 431.2627f, 1008.7708f, 1271.9235f, 1527.4150f, 2066.6370f, 2242.3311f, 2883.4065f, 3180.6614f, 3352.5015f, 3756.9688f, 4386.6904f, 4857.6621f, 5189.2212f, 5514.7573f, 5856.8086f, - 451.8427f, 582.4401f, 925.8821f, 1363.4249f, 1503.2460f, 1961.5940f, 2265.6001f, 2574.4414f, 3123.0769f, 3345.1587f, 3634.3022f, 4266.0137f, 4880.8052f, 5223.5776f, 5567.8901f, 5880.3770f, - 411.0873f, 553.3847f, 809.2106f, 1023.4841f, 1189.0618f, 1786.0770f, 2121.8489f, 2454.6458f, 2947.4700f, 3220.3210f, 3828.0911f, 4218.0229f, 4831.2383f, 5322.1445f, 5727.3906f, 6033.3887f, - 310.5608f, 442.2204f, 742.7755f, 1097.5740f, 1340.9608f, 1854.4385f, 2261.6399f, 2634.8315f, 3297.8879f, 3638.6956f, 3925.8770f, 4232.9146f, 4559.9287f, 4893.5830f, 5403.0981f, 5917.7056f, - 377.5583f, 488.4103f, 945.2491f, 1234.1572f, 1416.0774f, 1666.5979f, 1932.9910f, 2746.2000f, 2997.4753f, 3216.6152f, 3559.3999f, 3843.8130f, 4359.6626f, 5014.2920f, 5560.6162f, 5992.7212f, - 285.2173f, 389.6116f, 825.5790f, 1238.8229f, 1459.6588f, 1860.8855f, 2178.6296f, 2519.1597f, 2828.0032f, 3278.8101f, 3560.8286f, 4142.0552f, 4691.0698f, 5117.7778f, 5558.7944f, 5954.6680f, - 465.7002f, 631.7491f, 914.5521f, 1340.0057f, 1562.5760f, 1844.1741f, 2186.1208f, 2483.7080f, 2901.9417f, 3190.3162f, 3474.7651f, 3873.4065f, 4240.1973f, 4761.1255f, 5428.2832f, 5958.5273f, - 340.5456f, 449.2341f, 793.7005f, 1387.7467f, 1555.8701f, 1938.7877f, 2201.6155f, 2579.5762f, 2914.9724f, 3149.8584f, 3699.3984f, 3985.6790f, 4331.7534f, 4999.4805f, 5514.6924f, 5969.4897f, - 395.8350f, 564.1188f, 774.8214f, 1276.3201f, 1721.8716f, 1864.0143f, 2267.5696f, 2790.2031f, 3003.9434f, 3377.6140f, 3917.7395f, 4167.3867f, 4465.2529f, 4936.1138f, 5464.0479f, 5905.0444f, - 324.1844f, 443.0006f, 728.8958f, 1398.6589f, 1584.1820f, 1923.8724f, 2348.0903f, 2561.5554f, 3154.5991f, 3449.1746f, 3771.7927f, 4182.1899f, 4937.0791f, 5361.6509f, 5727.7656f, 6002.7505f, - 267.1790f, 373.7663f, 703.5949f, 1173.7009f, 1390.2002f, 1905.7941f, 2177.4961f, 2703.2627f, 3022.9121f, 3308.9612f, 3798.5823f, 4187.1533f, 4703.2163f, 5136.0918f, 5571.1655f, 5966.6577f, - 272.9294f, 399.3804f, 797.7335f, 1180.1516f, 1426.4850f, 2097.2839f, 2355.4727f, 2793.8774f, 3137.1907f, 3458.7727f, 3893.6628f, 4245.8047f, 4652.3794f, 5106.5293f, 5568.1885f, 5948.3169f, - 324.5529f, 431.7663f, 759.6147f, 1494.8739f, 1668.8168f, 2110.5635f, 2427.4104f, 2672.9270f, 3170.5266f, 3448.2080f, 3717.1240f, 4034.2280f, 4375.3647f, 5041.1372f, 5666.9517f, 6014.7217f, - 306.4759f, 404.5361f, 795.7795f, 1675.9967f, 1835.0950f, 2160.6624f, 2430.8855f, 2734.2646f, 3270.1426f, 3586.1355f, 3821.9670f, 4102.0078f, 4372.9404f, 4918.9146f, 5412.0376f, 5868.5225f, - 421.3803f, 607.7995f, 813.0241f, 1286.8525f, 1827.2451f, 2026.8683f, 2333.9453f, 2730.9817f, 2988.4067f, 3303.8513f, 3759.1897f, 4057.5264f, 4441.5493f, 4890.0078f, 5212.0469f, 5672.2188f, - 423.8560f, 599.5201f, 829.0651f, 1082.6381f, 1245.9272f, 1623.7075f, 2453.0420f, 2855.6631f, 3171.3855f, 3475.5881f, 3715.4219f, 3972.1326f, 4419.1597f, 4894.0283f, 5363.8691f, 5919.2681f, - 441.2789f, 634.8879f, 921.6287f, 1189.0240f, 1368.7466f, 2012.1312f, 2383.7656f, 2638.5222f, 2975.0288f, 3163.6150f, 3433.9958f, 3838.9917f, 4186.6426f, 4856.8477f, 5559.1196f, 5977.2290f, - 349.2039f, 466.2342f, 724.2582f, 904.4043f, 1190.4492f, 1981.7565f, 2226.5554f, 2592.5098f, 2865.5525f, 3195.8196f, 3735.6345f, 4267.1660f, 4810.9893f, 5207.5093f, 5605.1445f, 5952.0361f, - 497.7713f, 719.9073f, 925.0815f, 1146.3021f, 1326.7095f, 1574.5039f, 2306.7678f, 2714.8022f, 2967.5190f, 3400.1121f, 3732.0544f, 3981.7878f, 4553.4819f, 5090.0869f, 5426.2085f, 5833.5220f, - 471.7526f, 648.3213f, 902.1542f, 1245.7086f, 1423.3403f, 1701.1757f, 2125.8530f, 2407.0481f, 2969.5583f, 3294.1296f, 3712.8398f, 4140.7930f, 4808.4668f, 5322.3896f, 5662.1255f, 5950.6211f, - 345.3843f, 485.9887f, 841.2579f, 1035.9401f, 1244.8905f, 1488.1833f, 2340.4253f, 2607.0859f, 2845.4153f, 3223.1768f, 3557.0696f, 4119.7944f, 4666.8896f, 5145.8589f, 5565.7534f, 5976.6875f, - 332.4270f, 427.5984f, 829.9191f, 1138.0469f, 1339.4468f, 1589.0535f, 1926.0630f, 2432.9331f, 2699.7964f, 3311.4355f, 3716.1003f, 4270.4990f, 4760.3647f, 5208.3950f, 5619.2080f, 5971.2715f, - 249.0114f, 381.2982f, 925.7067f, 1520.3356f, 1842.8396f, 2368.2908f, 2783.4033f, 3272.5757f, 3673.7402f, 4046.3950f, 4370.4966f, 4688.0269f, 5002.6772f, 5316.3594f, 5650.2192f, 5977.6587f, - 263.3275f, 451.6255f, 1252.2307f, 1503.0652f, 1786.7695f, 2082.7554f, 2451.1829f, 2804.7590f, 3116.7583f, 3493.8892f, 3884.6575f, 4349.6724f, 4770.0156f, 5143.1636f, 5542.5913f, 5931.5522f, - 252.9447f, 341.5762f, 632.7664f, 1766.8096f, 2084.1511f, 2272.7332f, 2531.1006f, 2765.2080f, 3134.5417f, 3380.6223f, 3640.8015f, 3932.7854f, 4532.1172f, 5245.2070f, 5597.0776f, 5973.6831f, - 234.9979f, 324.6731f, 1239.8643f, 1663.1921f, 1858.7769f, 2171.1614f, 2403.8818f, 2680.6433f, 2836.4985f, 3192.6577f, 3864.8811f, 4385.8066f, 4845.9766f, 5150.2412f, 5631.1519f, 6011.7773f, - 284.5302f, 410.1263f, 985.4119f, 1298.3987f, 1789.4304f, 1996.9287f, 2450.8525f, 2831.6011f, 2994.2073f, 3214.1306f, 3525.0498f, 3819.9141f, 4672.7544f, 5424.3545f, 5691.0732f, 5980.3096f, - 244.2704f, 415.5891f, 1038.3009f, 1317.5186f, 1686.4528f, 2081.3147f, 2476.9873f, 2959.5393f, 3214.9561f, 3569.1431f, 3934.4736f, 4308.7114f, 4728.3687f, 5105.7964f, 5488.1938f, 5908.9443f, - 335.8417f, 468.3464f, 1003.6253f, 1275.0145f, 1534.2854f, 1985.3167f, 2348.3411f, 2743.3169f, 2956.0967f, 3408.5063f, 3866.8574f, 4287.0034f, 4556.7222f, 4922.7832f, 5259.7480f, 5800.2876f, - 388.2726f, 518.0591f, 832.5999f, 1325.0247f, 1528.8624f, 1808.1732f, 2151.0820f, 2486.1331f, 2815.4980f, 3158.5391f, 3635.3606f, 3960.5383f, 4671.7686f, 5371.8140f, 5777.8940f, 6056.4722f, - 506.5153f, 673.0771f, 900.0349f, 1154.2124f, 1378.2689f, 1786.9409f, 2081.9631f, 2398.6965f, 2859.7441f, 3075.4841f, 3546.6563f, 4322.6694f, 4732.0049f, 4992.5542f, 5267.5859f, 5807.1812f, - 487.2466f, 653.6116f, 968.5656f, 1389.2708f, 1601.5822f, 1910.9694f, 2282.4038f, 2608.7063f, 3032.6233f, 3361.9692f, 3629.8552f, 3908.8335f, 4318.4009f, 4646.5781f, 5043.5962f, 5792.7393f, - 432.8733f, 591.7551f, 899.2619f, 1490.1176f, 1789.8751f, 2060.3750f, 2434.8779f, 2840.3374f, 3122.1292f, 3472.8079f, 3830.8870f, 4097.2622f, 4353.5464f, 4650.2075f, 4981.5752f, 5482.9565f, - 378.4767f, 508.5656f, 802.8280f, 947.2892f, 1532.0898f, 2038.8177f, 2349.1965f, 2650.2039f, 2863.8018f, 3591.6697f, 3918.9211f, 4256.6255f, 4604.8467f, 4899.0996f, 5237.6084f, 5791.5029f, - 407.0908f, 546.0364f, 866.1215f, 1098.6927f, 1347.2009f, 1657.1525f, 1965.5845f, 2717.7190f, 3033.4961f, 3509.9031f, 3873.4150f, 4131.4438f, 4389.5693f, 4774.2295f, 5450.1768f, 5977.5151f, - 429.3459f, 568.8134f, 903.5659f, 1099.2942f, 1379.4979f, 2207.5940f, 2479.9919f, 2780.9072f, 3206.3960f, 3425.4084f, 3682.5911f, 3950.1941f, 4324.0840f, 4689.4922f, 5068.2534f, 5787.2852f, - 371.9443f, 524.7249f, 890.0464f, 1670.7485f, 1958.5308f, 2182.7007f, 2558.5007f, 2835.4937f, 3192.0740f, 3634.4817f, 3950.0942f, 4259.6953f, 4628.0049f, 4999.1616f, 5364.9893f, 5801.6855f, - 323.1922f, 451.0327f, 787.1655f, 1011.6555f, 1323.8138f, 2177.6636f, 2401.1392f, 2826.8796f, 3432.8999f, 3653.1851f, 3883.9897f, 4082.7559f, 4361.6753f, 4635.1475f, 5084.7544f, 5823.3062f, - 377.0061f, 524.2181f, 743.6288f, 1378.9187f, 1857.6434f, 2056.4695f, 2453.7949f, 2902.1995f, 3127.2651f, 3463.3523f, 3980.1316f, 4241.2578f, 4528.5859f, 4881.4521f, 5239.3145f, 5580.5986f, - 308.7965f, 403.7058f, 705.9506f, 1823.8571f, 2126.9387f, 2369.2810f, 2647.2048f, 2855.8276f, 3209.7708f, 3498.2310f, 3747.6047f, 3972.8647f, 4254.3325f, 4574.4292f, 5087.3965f, 5890.4219f, - 274.7571f, 383.7251f, 573.6029f, 1142.8372f, 2151.7173f, 2558.8972f, 2751.9468f, 2987.4412f, 3234.3350f, 3526.0127f, 3922.9927f, 4189.0249f, 4483.3774f, 4877.1860f, 5396.7798f, 5921.8125f, - 248.5916f, 423.6264f, 1260.9626f, 1696.0492f, 1972.9108f, 2298.5972f, 2592.9307f, 2947.2292f, 3266.2227f, 3614.3572f, 3980.3892f, 4359.4067f, 4770.2842f, 5158.9058f, 5554.6597f, 5936.9043f, - 320.5471f, 429.6766f, 657.1440f, 1390.1080f, 2194.6426f, 2507.6086f, 2712.3662f, 2980.3408f, 3216.1682f, 3544.8467f, 3956.9790f, 4227.5308f, 4463.7563f, 4745.7124f, 5088.6650f, 5525.8516f, - 245.5478f, 520.3131f, 1177.0693f, 1454.0125f, 1770.2620f, 2160.8779f, 2551.2700f, 2950.2324f, 3326.8621f, 3710.4624f, 4104.3936f, 4481.9971f, 4865.9736f, 5230.6396f, 5608.5649f, 5965.6162f, - 514.5864f, 956.9897f, 1287.9597f, 1520.3473f, 1802.0631f, 2116.4980f, 2509.8552f, 2865.9822f, 3238.7510f, 3611.3108f, 4016.4353f, 4431.8457f, 4860.3442f, 5231.4814f, 5614.6016f, 5963.9976f, - 537.0523f, 932.2803f, 1380.2690f, 1709.4702f, 2079.9902f, 2446.4014f, 2859.4204f, 3229.6975f, 3623.4031f, 4012.5327f, 4373.7568f, 4724.3359f, 5078.2686f, 5397.6040f, 5721.9639f, 6028.1167f, - 452.5153f, 798.2777f, 1099.3080f, 1317.0807f, 1652.6885f, 2059.7708f, 2471.0164f, 2808.5396f, 3146.5076f, 3494.0779f, 3870.6912f, 4310.8281f, 4777.5024f, 5181.2617f, 5574.4912f, 5934.3813f, - 340.3716f, 430.5102f, 872.3513f, 1636.3792f, 1772.8615f, 2074.0161f, 2295.1008f, 2693.0037f, 3177.7710f, 3391.7559f, 3670.8718f, 4224.3926f, 4896.3877f, 5199.9883f, 5580.4512f, 5911.7671f, - 317.8269f, 414.8185f, 881.1970f, 1658.4944f, 1852.0098f, 2136.0415f, 2380.8228f, 2668.9141f, 3046.8027f, 3299.0051f, 3523.0593f, 3758.9412f, 4116.9063f, 5061.2124f, 5624.1777f, 5989.4761f, - 374.0671f, 488.0840f, 734.0546f, 1415.9261f, 1648.7783f, 1852.8462f, 2099.1895f, 2347.5562f, 2954.8359f, 3269.6714f, 3536.7920f, 4116.1743f, 4481.4355f, 4913.8838f, 5467.2817f, 5909.8779f, - 340.4291f, 448.5775f, 1041.4979f, 1426.0011f, 1637.8165f, 1968.6743f, 2210.7976f, 2647.5144f, 2913.8650f, 3131.7698f, 3429.8755f, 3722.6763f, 4104.6479f, 4969.0093f, 5574.2231f, 5978.2070f, - 254.2538f, 412.7710f, 947.8206f, 1209.3683f, 1690.4813f, 2040.7881f, 2401.4314f, 2728.0066f, 3016.2290f, 3530.3865f, 3964.6563f, 4393.6934f, 4804.2168f, 5187.9302f, 5586.4399f, 5954.8950f, - 241.0244f, 347.0750f, 835.2348f, 1601.9089f, 1786.4336f, 2134.3950f, 2396.0139f, 2848.9712f, 3239.9138f, 3623.8250f, 4029.5088f, 4400.3936f, 4797.3564f, 5195.7310f, 5596.6689f, 5965.9878f, - 309.3683f, 453.6776f, 812.9343f, 1125.9915f, 1423.5935f, 2149.2227f, 2514.9277f, 3031.3599f, 3463.7219f, 3790.7839f, 4064.0039f, 4297.9839f, 4653.4551f, 5189.7061f, 5721.2954f, 6033.0752f, - 469.4284f, 730.1902f, 973.0643f, 1170.5016f, 1572.2559f, 2084.2769f, 2567.8604f, 2963.4592f, 3286.9617f, 3580.3228f, 3882.8706f, 4335.5483f, 4859.7197f, 5258.2827f, 5627.9785f, 5957.8623f, - 454.6165f, 795.2360f, 1078.7705f, 1294.9473f, 1761.6650f, 2235.2788f, 2695.8455f, 3095.7695f, 3473.4897f, 3833.0889f, 4185.7290f, 4528.9863f, 4893.0039f, 5240.7627f, 5608.8594f, 5951.0718f, - 563.4587f, 875.8987f, 1139.0026f, 1378.2317f, 1855.7401f, 2279.7683f, 2651.3079f, 2968.4397f, 3279.4453f, 3607.2500f, 3975.5796f, 4358.3574f, 4768.7969f, 5135.3706f, 5525.3501f, 5904.2617f, - 461.7852f, 855.0644f, 1367.4387f, 1702.5593f, 2141.0093f, 2500.9055f, 2853.8596f, 3123.9744f, 3406.0178f, 3694.0481f, 4028.9985f, 4373.1113f, 4768.2891f, 5137.6895f, 5541.3721f, 5921.4507f, - 438.6031f, 753.0179f, 1269.3203f, 1630.4396f, 2027.2959f, 2350.9695f, 2672.1396f, 2957.1809f, 3250.1545f, 3546.5315f, 3894.0161f, 4249.9346f, 4666.2266f, 5061.2524f, 5490.7749f, 5904.6362f, - 543.3182f, 828.4835f, 1239.1818f, 1471.1134f, 1737.8622f, 2037.2484f, 2434.5112f, 2801.3242f, 3162.3250f, 3508.1255f, 3849.0903f, 4165.7588f, 4588.3809f, 5020.0952f, 5475.2813f, 5904.6377f, - 519.5982f, 837.6639f, 1171.2003f, 1363.0320f, 1617.4617f, 1976.1787f, 2472.0303f, 2901.3264f, 3340.7300f, 3736.0830f, 4103.3843f, 4444.8657f, 4800.9482f, 5145.6011f, 5544.2002f, 5933.0981f, - 433.3774f, 582.7663f, 899.6142f, 1150.7437f, 1321.1309f, 1947.8643f, 2557.8604f, 2733.1497f, 3240.4907f, 3634.7915f, 3855.9856f, 4058.0281f, 4364.2568f, 5096.5225f, 5659.0952f, 6013.8145f, - 424.9731f, 604.3164f, 868.1793f, 1207.7882f, 1414.2374f, 1713.2893f, 2520.2900f, 2960.8887f, 3210.8542f, 3584.5403f, 3914.5796f, 4149.8550f, 4505.7705f, 4886.9575f, 5214.5361f, 5597.8389f, - 347.0334f, 494.2440f, 753.7191f, 1451.0435f, 1700.7461f, 1925.4844f, 2605.7988f, 2870.4744f, 3173.7312f, 3758.7219f, 4112.1929f, 4400.3882f, 4866.1016f, 5165.8799f, 5433.0371f, 5781.1509f, - 318.4942f, 464.3939f, 783.5214f, 1491.0234f, 1708.4984f, 2280.2876f, 2533.3354f, 2885.1736f, 3443.7451f, 3669.8506f, 4000.6792f, 4269.6626f, 4571.2739f, 4827.2158f, 5277.3813f, 5850.4736f, - 386.8698f, 519.0056f, 725.0029f, 981.5649f, 1156.1665f, 1500.4691f, 2421.7993f, 2962.4722f, 3175.0166f, 3548.4756f, 3860.7961f, 4146.4150f, 4658.9897f, 5088.3999f, 5531.8945f, 5951.4624f, - 315.9294f, 738.5538f, 1171.9581f, 1553.7167f, 1949.9159f, 2319.6641f, 2707.5493f, 3069.2996f, 3444.6157f, 3811.2139f, 4177.5469f, 4545.6943f, 4905.0444f, 5271.3926f, 5622.6831f, 5974.4141f, - 216.5136f, 598.1122f, 1059.3214f, 1466.4785f, 1880.1747f, 2263.6533f, 2658.3081f, 3030.4099f, 3413.6802f, 3780.1853f, 4157.1455f, 4519.1919f, 4893.5439f, 5244.3530f, 5603.1064f, 5926.8379f, - 375.4021f, 487.0890f, 844.4013f, 1574.3596f, 1794.5249f, 2106.2878f, 2418.5217f, 2657.8938f, 3116.6096f, 3457.8625f, 3691.0596f, 3930.1062f, 4259.5928f, 4592.4370f, 5020.5078f, 5840.3989f, - 474.3148f, 724.2144f, 974.0716f, 1283.4182f, 1521.2632f, 1746.4248f, 2333.0957f, 2874.2966f, 3111.9636f, 3440.0410f, 3752.9678f, 3975.7139f, 4294.7056f, 4821.9893f, 5201.5562f, 5658.8301f, - 400.0291f, 564.9626f, 808.2393f, 1083.2745f, 1300.4403f, 2080.7405f, 2588.6882f, 2858.4629f, 3206.4502f, 3429.8623f, 3746.9080f, 4341.4868f, 4713.2803f, 4986.4258f, 5336.7339f, 5710.1123f, - 354.4416f, 480.1495f, 834.1089f, 1037.7775f, 1350.0652f, 1791.1736f, 2193.0159f, 2504.6775f, 2776.0623f, 3153.0994f, 4108.1357f, 4597.4082f, 4861.9688f, 5092.8613f, 5473.2295f, 5932.0332f, - 237.3935f, 346.9133f, 675.5335f, 1481.0535f, 1716.8414f, 1884.7153f, 2099.3057f, 2725.5403f, 3022.8506f, 3276.2922f, 3639.1001f, 4185.3926f, 4941.6597f, 5292.0093f, 5682.0391f, 5981.0215f, - 367.4981f, 469.7130f, 820.7811f, 1219.7736f, 1368.4479f, 1624.6671f, 1804.2581f, 2607.8589f, 2891.3174f, 3212.2432f, 3760.7290f, 4015.6111f, 4618.0068f, 5129.3213f, 5652.1582f, 6042.1113f, - 312.6796f, 415.8322f, 674.1500f, 853.7709f, 1808.7385f, 2232.5310f, 2497.8157f, 2834.2991f, 3039.7012f, 3301.4050f, 3659.2969f, 4455.9453f, 4841.4912f, 5111.6167f, 5502.2534f, 5924.6357f, - 341.9309f, 471.7513f, 758.1926f, 979.7221f, 1287.4463f, 1737.0303f, 2160.7915f, 2664.5562f, 2961.8315f, 3461.7439f, 3732.6611f, 4109.0928f, 4568.9111f, 5037.4331f, 5511.3169f, 5966.1304f, - 351.3721f, 462.1897f, 765.1075f, 946.3102f, 1322.8093f, 2292.2400f, 2503.6494f, 2819.7234f, 3079.2803f, 3297.6252f, 3571.4668f, 3872.0823f, 4337.6426f, 5079.1504f, 5562.8110f, 5942.7153f, - 435.4323f, 614.4746f, 892.8980f, 1215.9469f, 1395.9762f, 1814.3936f, 2155.9590f, 2465.0427f, 3201.6211f, 3490.9224f, 3853.2620f, 4410.1855f, 4786.0625f, 5095.0181f, 5394.4805f, 5715.3364f, - 294.6053f, 417.1553f, 1046.2922f, 1443.0247f, 1636.7180f, 1956.4248f, 2189.9697f, 2869.8071f, 3129.9385f, 3462.5681f, 3895.2805f, 4213.4541f, 4541.8950f, 5009.1958f, 5472.7642f, 5983.0063f, - 322.1185f, 446.8733f, 689.4188f, 1338.2788f, 1643.1023f, 1903.8652f, 2494.2722f, 2804.6968f, 3103.8682f, 3640.1233f, 3965.9861f, 4172.5596f, 4404.7388f, 4670.7544f, 5240.3682f, 5893.4600f, - 209.7024f, 336.5508f, 729.0126f, 1217.3285f, 1699.0111f, 1891.2837f, 2146.8486f, 2830.0850f, 3108.6204f, 3446.0396f, 3754.1230f, 3945.1038f, 4474.5806f, 5191.6987f, 5613.3076f, 5970.2695f, - 346.6580f, 470.5094f, 663.3455f, 1266.9061f, 2020.5759f, 2270.5173f, 2527.3550f, 2826.9104f, 3078.3403f, 3401.2625f, 3804.3770f, 4100.3091f, 4407.7876f, 4732.2319f, 5150.2749f, 5808.2559f, - 283.7796f, 391.4603f, 1165.6863f, 1456.1125f, 1692.9001f, 2008.4825f, 2322.7837f, 2784.0608f, 2998.5811f, 3268.5164f, 3548.9373f, 4167.1289f, 4643.9878f, 5099.2881f, 5473.0781f, 5929.8242f, - 301.0849f, 383.1578f, 692.0848f, 1648.9374f, 1873.0947f, 2109.6113f, 2345.0110f, 2613.1121f, 2922.0193f, 3170.0020f, 3405.0774f, 3881.9875f, 4778.3154f, 5092.5205f, 5445.7100f, 5920.7896f, - 509.1023f, 750.8580f, 963.8820f, 1295.3452f, 1634.8796f, 1818.7975f, 2151.1250f, 2590.3354f, 2867.5596f, 3238.7666f, 3747.2834f, 4053.8911f, 4457.8164f, 4928.0151f, 5295.3521f, 5789.0571f, - 421.8951f, 547.9814f, 967.4185f, 1153.8607f, 1461.4230f, 1813.0994f, 2155.2703f, 2570.9712f, 2777.6597f, 3048.9863f, 3432.0986f, 3729.3877f, 4395.7461f, 5028.7402f, 5486.4946f, 5951.5024f, - 340.6758f, 445.7014f, 931.8882f, 1253.4775f, 1521.9260f, 1969.5759f, 2267.5332f, 2735.0112f, 2948.7678f, 3236.5166f, 3529.5505f, 3882.3674f, 4699.5781f, 5089.6641f, 5377.7842f, 5880.7778f, - 284.1882f, 408.6918f, 786.3123f, 1670.3220f, 2042.9493f, 2265.2275f, 2691.2012f, 3035.8762f, 3334.1719f, 3863.1194f, 4276.8916f, 4571.0420f, 4996.4404f, 5336.5205f, 5647.9556f, 5944.5996f, - 300.0066f, 616.4817f, 1238.7324f, 1614.8296f, 1997.6188f, 2367.4343f, 2784.5605f, 3168.8354f, 3569.8250f, 3965.6011f, 4336.3804f, 4689.5874f, 5044.2012f, 5365.7456f, 5697.5654f, 6010.6572f, - 242.9420f, 476.8371f, 1250.6661f, 1671.6031f, 2159.6443f, 2637.7417f, 3049.8589f, 3371.6045f, 3674.8706f, 3951.1006f, 4230.6416f, 4543.2827f, 4887.4478f, 5220.5581f, 5595.2686f, 5962.1313f, - 242.6795f, 331.1335f, 635.2861f, 1801.5236f, 2084.1472f, 2264.4692f, 2506.2891f, 2799.4441f, 3236.7134f, 3489.6038f, 3859.3291f, 4424.8008f, 4964.6348f, 5298.6533f, 5640.2031f, 5988.0552f, - 254.0538f, 336.2447f, 1216.6261f, 1717.7201f, 1886.0708f, 2176.6338f, 2405.8547f, 2762.3037f, 2934.8816f, 3167.0657f, 3385.5457f, 3804.4346f, 4848.8198f, 5286.0352f, 5630.5391f, 6086.4492f, - 295.2298f, 426.2079f, 630.7856f, 1155.5609f, 1827.6831f, 2120.5283f, 2462.4373f, 2759.6152f, 2990.9526f, 3253.4216f, 3910.9834f, 4204.2754f, 4462.7944f, 4909.7529f, 5579.9653f, 5985.8579f, - 298.9633f, 410.3875f, 810.1115f, 1346.1040f, 1499.2391f, 2210.3948f, 2467.9424f, 2792.7122f, 3284.0874f, 3493.0740f, 3784.1899f, 4319.6396f, 4860.6548f, 5213.8540f, 5609.8672f, 5949.6890f, - 437.9900f, 575.3093f, 866.0077f, 1104.2080f, 1307.4966f, 1959.9323f, 2293.9365f, 2604.6704f, 2966.6514f, 3228.0056f, 3548.8499f, 4096.4424f, 4769.5420f, 5086.5449f, 5416.5317f, 5853.6909f, - 412.4955f, 569.1867f, 864.0179f, 1117.6798f, 1348.6332f, 1976.5171f, 2334.3960f, 2640.3381f, 3006.5347f, 3327.5784f, 3695.8564f, 4042.1753f, 4362.7837f, 4687.4751f, 5389.8662f, 5966.5825f, - 406.8686f, 542.0319f, 867.3541f, 1436.3810f, 1678.6399f, 2000.1501f, 2358.1204f, 2651.3806f, 3042.1216f, 3339.2766f, 3617.9963f, 3933.3860f, 4249.0278f, 4591.8530f, 5502.0400f, 6020.7910f, - 375.4336f, 519.7731f, 764.5574f, 1215.1381f, 1482.9417f, 1696.8020f, 1957.0332f, 2169.1169f, 2973.4634f, 3687.7449f, 3966.8525f, 4258.8042f, 4680.6567f, 4947.0225f, 5230.9824f, 5843.2466f, - 443.2378f, 574.0562f, 813.3345f, 1282.7894f, 1538.0752f, 1727.8997f, 2007.8584f, 2194.5601f, 2755.8220f, 3460.9243f, 3654.1399f, 4030.5530f, 4572.4727f, 4904.7847f, 5400.6147f, 5934.2656f, - 423.6246f, 540.1947f, 862.8629f, 1386.7659f, 1577.2052f, 1811.0304f, 2046.7363f, 2309.0366f, 3129.1145f, 3533.0020f, 3738.4211f, 4021.1111f, 4357.3677f, 4634.8740f, 5307.2920f, 5944.9155f, - 287.7661f, 401.5490f, 725.6079f, 950.8911f, 1186.5465f, 1490.1750f, 2114.7920f, 2562.4019f, 3028.3977f, 3519.6277f, 3940.5737f, 4339.3086f, 4765.8188f, 5172.3428f, 5582.8022f, 5971.0273f, - 382.6039f, 537.7234f, 836.8093f, 1371.3546f, 1578.9803f, 1869.8213f, 2292.5596f, 2540.8601f, 3032.9834f, 3402.5059f, 3737.0569f, 4053.9937f, 4446.6240f, 5251.8457f, 5710.7935f, 6022.2925f, - 313.2195f, 415.0511f, 690.6860f, 1561.4832f, 1815.6521f, 2059.9187f, 2345.5095f, 2614.8701f, 3006.9604f, 3291.9744f, 3590.4119f, 3996.1516f, 4365.4995f, 4853.4956f, 5465.1572f, 5954.5718f, - 361.7959f, 448.4001f, 921.3198f, 1343.1167f, 1488.6287f, 1736.7700f, 1950.8906f, 2536.0193f, 2768.7393f, 3062.4473f, 3484.6570f, 3888.5618f, 4618.4038f, 5092.6641f, 5523.3657f, 5966.6772f, - 249.5541f, 366.6601f, 684.6592f, 1203.0931f, 1642.2089f, 1961.8837f, 2227.3289f, 2421.1348f, 2660.5676f, 3229.5410f, 3822.5837f, 4232.7266f, 4782.5181f, 5127.2612f, 5570.2676f, 5978.9858f, - 287.4206f, 421.3210f, 704.0352f, 1279.8597f, 1562.7307f, 2115.4241f, 2492.4517f, 2780.9470f, 3317.3616f, 3606.1492f, 4026.6375f, 4337.9014f, 4699.6895f, 4997.2573f, 5431.1787f, 5903.8628f, - 487.9554f, 740.9349f, 1021.9616f, 1327.3262f, 1620.8544f, 1890.7717f, 2269.1218f, 2584.4868f, 2911.2896f, 3424.9221f, 3855.1670f, 4205.9272f, 4707.2466f, 5147.1846f, 5601.1152f, 5953.4673f, - 400.8269f, 513.4500f, 786.8242f, 1269.3298f, 1441.4178f, 1696.9789f, 1911.0537f, 2223.0684f, 2847.1619f, 3113.3845f, 3670.6318f, 4146.2900f, 4555.9204f, 5083.8579f, 5574.8120f, 5987.6030f, - 379.0329f, 487.7222f, 914.8179f, 1130.9854f, 1430.1394f, 1830.0769f, 2088.8796f, 2613.6855f, 2803.1633f, 3457.1777f, 4032.6118f, 4306.7344f, 4662.6899f, 4959.6348f, 5245.5234f, 5787.3940f, - 340.6941f, 451.0338f, 656.2767f, 911.5805f, 1124.9330f, 1733.8730f, 2518.7861f, 2768.6851f, 3211.3733f, 3717.7583f, 3929.6772f, 4176.2993f, 4522.4517f, 5011.5547f, 5575.8784f, 6006.7222f, - 341.5027f, 441.6417f, 807.2695f, 1060.2080f, 1251.2837f, 1478.9895f, 1750.0796f, 2594.8977f, 2924.5027f, 3401.4751f, 3852.0557f, 4292.4683f, 4718.2930f, 5159.4775f, 5562.4067f, 5972.5571f, - 313.8985f, 421.5380f, 667.2407f, 873.6023f, 1110.1119f, 2060.7332f, 2381.0916f, 2746.2288f, 3080.5649f, 3399.9905f, 3897.5884f, 4434.9990f, 5048.1343f, 5390.8149f, 5744.3931f, 6007.9326f, - 252.1832f, 354.2392f, 673.5427f, 1339.1161f, 1554.8853f, 2014.9351f, 2300.4138f, 2829.6182f, 3213.1714f, 3409.5105f, 3604.3242f, 3927.8020f, 4622.3218f, 5103.4565f, 5559.5024f, 5971.5986f, - 385.2648f, 513.7607f, 760.7678f, 983.5819f, 1175.7727f, 2134.7810f, 2592.9614f, 2822.0161f, 3232.2524f, 3445.3516f, 3750.7583f, 4094.6714f, 4401.5830f, 4753.4204f, 5549.2319f, 6034.7148f, - 220.6833f, 314.5706f, 622.2172f, 1350.8225f, 1785.5879f, 2077.5837f, 2504.2158f, 3057.6992f, 3436.0974f, 3695.2976f, 3953.4272f, 4267.8701f, 4660.6865f, 5073.6831f, 5501.9478f, 5929.9780f, - 207.8814f, 310.4071f, 646.2098f, 1270.5835f, 1542.7271f, 2079.3804f, 2440.0339f, 2843.4690f, 3272.4854f, 3657.9851f, 4061.2014f, 4444.9780f, 4841.6060f, 5224.5947f, 5620.9141f, 5972.7261f, - 326.1488f, 456.7737f, 740.3350f, 961.4597f, 1262.7579f, 2190.7178f, 2483.5300f, 2872.4180f, 3328.4910f, 3811.0334f, 4153.1602f, 4441.8271f, 4801.1802f, 5065.2988f, 5381.6309f, 5693.2886f, - 206.2046f, 328.0855f, 618.9507f, 980.9994f, 1695.9775f, 1982.3051f, 2275.5444f, 2806.0271f, 3269.5178f, 3491.2456f, 3722.1775f, 4145.9121f, 4843.1167f, 5266.8677f, 5656.8794f, 5992.1201f, - 308.1086f, 407.7706f, 806.7985f, 1045.7629f, 1401.8912f, 2108.3472f, 2331.7849f, 2952.5391f, 3174.1865f, 3374.0686f, 3645.4260f, 4292.7183f, 4939.2969f, 5250.4829f, 5607.2358f, 5932.8657f, - 267.5990f, 378.7492f, 642.2629f, 871.7917f, 1691.7523f, 2087.5117f, 2423.1462f, 2686.1487f, 3021.7893f, 3724.0247f, 4035.5454f, 4369.5903f, 4680.1167f, 4991.4175f, 5323.6875f, 5811.7471f, - 312.3856f, 437.4281f, 714.5340f, 899.5771f, 1632.7545f, 1938.5369f, 2295.5544f, 2625.6189f, 2900.5576f, 3295.4934f, 3557.1260f, 3960.1123f, 4731.6079f, 5141.8447f, 5502.7793f, 5954.0049f, - 332.2842f, 449.0976f, 875.9957f, 1206.1912f, 1422.6793f, 2097.5745f, 2354.2483f, 2715.8494f, 3093.4697f, 3344.5132f, 3623.4814f, 3889.3655f, 4256.2002f, 4994.5742f, 5593.8428f, 5985.9575f, - 286.9586f, 434.7701f, 781.3996f, 1248.3495f, 1835.5530f, 2137.1155f, 2573.7449f, 2869.9299f, 3126.0564f, 3459.1448f, 3769.4475f, 4138.3076f, 4688.0298f, 5084.9028f, 5436.8086f, 5894.2520f, - 327.0000f, 429.0804f, 663.7327f, 849.7463f, 1174.9340f, 2383.3875f, 2695.9597f, 2941.2026f, 3214.4724f, 3433.6287f, 3778.9312f, 4134.8096f, 4504.8022f, 5066.7559f, 5599.2290f, 5985.7334f, - 244.4052f, 499.2254f, 1294.8232f, 1689.3677f, 2123.5024f, 2572.4958f, 3042.9067f, 3446.8752f, 3836.3740f, 4175.6729f, 4485.3213f, 4792.3755f, 5094.9077f, 5386.1816f, 5699.6411f, 6008.2114f, - 561.9757f, 1020.3204f, 1494.1995f, 1841.8171f, 2297.0906f, 2772.6184f, 3204.8804f, 3565.8628f, 3935.4106f, 4253.4141f, 4559.7021f, 4849.9653f, 5140.2852f, 5428.6934f, 5731.2251f, 6023.5078f, - 581.6182f, 1053.5670f, 1478.5878f, 1784.4789f, 2125.1157f, 2454.5889f, 2809.0256f, 3141.7256f, 3490.7529f, 3848.5923f, 4201.7271f, 4568.7720f, 4945.9619f, 5288.6289f, 5647.7642f, 5981.9341f, - 258.9683f, 364.0963f, 722.5463f, 1763.2114f, 1969.3870f, 2265.5239f, 2532.1821f, 2883.3557f, 3388.1838f, 3725.3120f, 4080.9338f, 4390.3818f, 4716.3599f, 5068.4941f, 5452.2778f, 5847.1401f, - 271.5428f, 401.4228f, 695.5894f, 857.3072f, 1776.5358f, 2008.5603f, 2554.4143f, 2844.4021f, 3018.6877f, 3226.1279f, 3482.3398f, 3810.6858f, 4549.3071f, 5266.2764f, 5614.6157f, 5945.6904f, - 330.3132f, 444.6271f, 669.0279f, 874.5479f, 1102.9247f, 2052.1780f, 2436.2378f, 2711.1165f, 3037.7537f, 3298.2036f, 3898.6858f, 4241.5415f, 4606.7637f, 5086.6919f, 5569.7397f, 5988.6797f, - 232.3014f, 344.5512f, 578.5155f, 1213.9569f, 1880.9729f, 2105.6685f, 2335.4148f, 2550.3965f, 3147.6501f, 3491.9253f, 3791.5613f, 4159.6694f, 4642.2441f, 5103.3340f, 5605.4106f, 5989.7969f, - 346.3687f, 444.8047f, 714.3775f, 889.1195f, 1211.8463f, 2168.7598f, 2430.2490f, 2760.6326f, 3012.4961f, 3268.8750f, 3565.1558f, 4172.5791f, 4781.5391f, 5127.6704f, 5512.6323f, 5911.3779f, - 398.0477f, 553.8537f, 845.8521f, 1119.3066f, 1309.7244f, 1928.3351f, 2351.2095f, 2649.8230f, 3050.6750f, 3297.0566f, 3592.7275f, 3916.1785f, 4723.3325f, 5318.1221f, 5703.9697f, 5996.7651f, - 371.4409f, 471.0789f, 896.4924f, 1197.7544f, 1400.8007f, 1611.1555f, 1867.3550f, 2818.4475f, 3002.5906f, 3250.1440f, 3546.5891f, 4265.0371f, 4890.3369f, 5274.4722f, 5659.3560f, 5946.9644f, - 330.9331f, 448.7211f, 808.3973f, 978.2021f, 1652.6361f, 1969.0725f, 2357.0146f, 2680.4792f, 2859.9165f, 3078.9578f, 3423.6895f, 4233.3169f, 4856.7813f, 5086.5723f, 5393.9961f, 5938.6035f, - 323.9659f, 433.8731f, 1045.5168f, 1369.1907f, 1561.9178f, 1984.2457f, 2224.0959f, 2747.3657f, 2995.0359f, 3242.9248f, 3501.0344f, 4022.2388f, 4847.4985f, 5210.9922f, 5658.1357f, 6005.0718f, - 354.6574f, 501.6520f, 852.5305f, 1020.8707f, 1540.5925f, 1998.5675f, 2253.1487f, 2845.3960f, 3056.5273f, 3305.0466f, 3954.2900f, 4591.7471f, 4915.2856f, 5221.9082f, 5544.7285f, 5879.9150f, - 363.1311f, 474.7310f, 907.5490f, 1106.8586f, 1367.2662f, 1646.6934f, 2031.3650f, 2326.4382f, 2568.6519f, 3030.1091f, 3905.6482f, 4265.9111f, 4716.1831f, 5017.0454f, 5469.8149f, 5958.6182f, - 379.9262f, 524.4459f, 845.4813f, 1275.4414f, 1458.2488f, 1772.5863f, 2067.7981f, 2526.8850f, 3066.4063f, 3307.8713f, 3807.2900f, 4199.1509f, 4452.4653f, 4854.7471f, 5464.8833f, 5947.7842f, - 371.8218f, 483.9148f, 778.2747f, 1208.0812f, 1366.3983f, 1623.4895f, 1798.8777f, 2224.6445f, 3103.7175f, 3386.0408f, 3782.8284f, 4307.4727f, 4698.8994f, 5118.1255f, 5505.1919f, 5921.1724f, - 217.9059f, 323.3224f, 639.7305f, 1026.5331f, 1312.9242f, 1885.6948f, 2361.8403f, 2805.5396f, 3213.2600f, 3631.5017f, 4033.4087f, 4426.3423f, 4821.3203f, 5208.3833f, 5590.5205f, 5956.1538f, - 211.9971f, 311.2018f, 504.6345f, 858.3289f, 1574.7019f, 1934.9866f, 2381.4163f, 2786.2043f, 3238.9326f, 3611.0518f, 4005.2578f, 4401.0615f, 4802.1479f, 5192.5493f, 5587.1479f, 5965.5977f, - 219.3884f, 319.3835f, 604.0102f, 1114.8630f, 1481.3870f, 2036.0469f, 2303.4883f, 2616.1384f, 3253.6335f, 3556.5107f, 3946.6567f, 4520.3555f, 5091.0479f, 5416.3037f, 5748.5737f, 5946.5757f, - 350.3716f, 515.4462f, 756.5206f, 1061.4270f, 1251.9570f, 1723.2751f, 2687.6689f, 3036.2019f, 3273.9678f, 3744.2939f, 4098.6284f, 4391.4160f, 4917.6777f, 5244.2852f, 5551.4976f, 5880.1572f, - 311.6069f, 458.7317f, 795.9418f, 969.5021f, 1511.2507f, 1952.5673f, 2273.6116f, 2795.8657f, 3049.7053f, 3578.0598f, 3911.1873f, 4327.2598f, 4735.3105f, 5122.3423f, 5479.7817f, 5858.1504f, - 267.8399f, 390.6757f, 886.2357f, 1179.5110f, 1466.6409f, 2088.7725f, 2328.1262f, 2993.5786f, 3283.5256f, 3593.2822f, 4095.7588f, 4500.4009f, 4887.5132f, 5219.0859f, 5553.4224f, 5915.6831f, - 279.2209f, 413.3200f, 648.4438f, 1282.1798f, 1793.2556f, 1952.1060f, 2484.9436f, 2857.3630f, 3077.2114f, 3548.2585f, 4045.4526f, 4309.5947f, 4760.2900f, 5208.1948f, 5620.9717f, 5968.3237f, - 306.2321f, 424.7843f, 618.7867f, 1288.7572f, 2110.7849f, 2346.5396f, 2582.5366f, 2833.5730f, 3074.3774f, 3464.7886f, 3984.6379f, 4262.0337f, 4601.5132f, 4999.6992f, 5498.8926f, 5920.4814f, - 259.2613f, 353.6931f, 762.5328f, 1906.2162f, 2088.1213f, 2317.9741f, 2546.5935f, 2880.3687f, 3332.0002f, 3636.9216f, 3946.4287f, 4226.0356f, 4502.1084f, 5007.0601f, 5496.4824f, 5924.8877f, - 244.3871f, 357.0287f, 1114.7865f, 1651.1329f, 1850.2976f, 2200.5942f, 2484.7026f, 2872.6968f, 3092.8455f, 3373.5869f, 3707.5891f, 4180.1289f, 4603.5298f, 5132.2671f, 5554.7617f, 5973.5220f, - 700.5439f, 1363.5277f, 1745.2494f, 2081.9539f, 2379.8628f, 2623.6003f, 2883.6484f, 3133.9824f, 3457.7092f, 3819.0100f, 4191.0537f, 4547.0400f, 4912.5127f, 5241.3423f, 5594.9395f, 5930.6099f, - 268.7704f, 370.8200f, 609.4679f, 1558.5339f, 1961.6279f, 2155.8916f, 2419.4485f, 2655.5103f, 3152.6685f, 3426.9221f, 3716.8181f, 4107.1616f, 4965.5698f, 5384.2026f, 5706.7183f, 6015.6196f, - 305.7638f, 395.9599f, 1103.0944f, 1383.6494f, 1612.9742f, 1915.2496f, 2189.8008f, 2555.3608f, 2720.8220f, 3038.2434f, 3927.1301f, 4263.0518f, 4685.7217f, 4984.1377f, 5272.6162f, 5984.5376f, - 294.0385f, 426.7762f, 814.5162f, 1056.9037f, 1715.3539f, 2005.3177f, 2316.4392f, 2647.4297f, 2893.8242f, 3196.7476f, 3720.0044f, 4186.9790f, 4840.4512f, 5290.1250f, 5684.2139f, 5967.5859f, - 359.5141f, 517.6051f, 807.4898f, 1143.5930f, 1328.1393f, 1814.7098f, 2309.8894f, 2618.8655f, 3160.5962f, 3445.0479f, 3883.2664f, 4235.5200f, 4718.7324f, 5367.3608f, 5765.9331f, 6034.9233f, - 241.5752f, 375.5109f, 818.8776f, 1298.7773f, 1656.9050f, 2169.8962f, 2565.1440f, 3015.9919f, 3437.9463f, 3863.8203f, 4254.4023f, 4637.0952f, 5027.8252f, 5358.3784f, 5685.5000f, 5980.4063f, - 322.5406f, 454.9644f, 963.3659f, 1513.8885f, 1704.5070f, 2235.6599f, 2523.6467f, 2995.0757f, 3287.8682f, 3552.8811f, 3872.4360f, 4201.2227f, 4571.9087f, 5066.6792f, 5562.1206f, 5935.7900f, - 412.5748f, 615.8419f, 1126.9519f, 1455.5172f, 1653.3076f, 1965.2689f, 2240.6904f, 2672.5129f, 3127.3301f, 3477.8540f, 3983.6145f, 4458.6558f, 4896.7998f, 5237.9814f, 5609.1597f, 5939.6416f, - 342.1361f, 470.6100f, 958.3576f, 1195.0166f, 1426.4667f, 1684.2009f, 2194.0950f, 2545.9453f, 2946.1851f, 3415.2820f, 3657.4158f, 4408.6763f, 5097.2251f, 5404.2202f, 5719.9829f, 5977.7959f, - 297.8767f, 386.6347f, 1095.8346f, 1454.3085f, 1651.6417f, 1927.9633f, 2198.4927f, 2583.1694f, 2757.0144f, 3009.6497f, 3310.9514f, 3956.9753f, 4677.3208f, 5122.2222f, 5539.0688f, 5993.0542f, - 334.7170f, 450.1582f, 747.3162f, 1560.2024f, 1808.2147f, 2006.5011f, 2415.2419f, 2680.1956f, 3016.5549f, 3651.1340f, 3975.3625f, 4209.6563f, 4531.0396f, 5121.7212f, 5585.2202f, 5962.3667f, - 256.4101f, 495.5723f, 1341.4860f, 1805.1255f, 2201.8318f, 2514.7769f, 2820.4092f, 3102.3867f, 3414.3872f, 3754.7742f, 4108.2378f, 4465.9258f, 4857.4355f, 5216.2144f, 5592.3076f, 5951.9995f, - 530.7974f, 1017.4255f, 1463.9575f, 1858.6631f, 2360.1265f, 2770.3811f, 3106.0894f, 3379.1919f, 3647.7175f, 3895.9026f, 4188.8652f, 4522.8984f, 4893.7954f, 5241.4312f, 5623.8994f, 5975.3608f, - 597.1553f, 1198.0758f, 1722.7361f, 2128.6658f, 2519.1504f, 2825.5122f, 3086.1943f, 3330.0283f, 3608.2961f, 3906.9929f, 4241.8105f, 4603.1694f, 4972.8159f, 5308.1670f, 5651.1968f, 5976.6704f, - 699.1581f, 1293.3193f, 1637.3395f, 1912.7987f, 2163.3445f, 2425.7944f, 2704.0396f, 3006.5984f, 3358.2126f, 3746.1548f, 4125.0762f, 4489.7485f, 4854.0088f, 5188.5146f, 5558.2056f, 5913.3164f, - 489.0107f, 921.4806f, 1329.8511f, 1644.8383f, 2013.6794f, 2365.2683f, 2746.1553f, 3085.6912f, 3457.0234f, 3825.2183f, 4203.4224f, 4575.9331f, 4950.6606f, 5298.7559f, 5659.8618f, 5997.0015f, - 230.3653f, 389.8415f, 938.1970f, 1294.3594f, 1768.8275f, 2189.1001f, 2597.3755f, 2985.8518f, 3323.6023f, 3705.8533f, 4065.5361f, 4446.4224f, 4818.4502f, 5185.9634f, 5583.2168f, 5954.2573f, - 283.9404f, 400.2146f, 630.6198f, 1491.5646f, 2295.1375f, 2496.3457f, 2726.5803f, 2971.1951f, 3207.2317f, 3634.5439f, 4178.0376f, 4423.5537f, 4836.2109f, 5172.1821f, 5464.0454f, 5777.5801f, - 242.6232f, 351.1541f, 807.9852f, 1621.9950f, 2043.8676f, 2532.5122f, 2860.5505f, 3200.3403f, 3499.8274f, 3760.3772f, 4068.9617f, 4410.7339f, 4778.8413f, 5153.0142f, 5553.1997f, 5932.5996f, - 227.3320f, 323.2667f, 752.3189f, 1572.3750f, 1930.6083f, 2355.0117f, 2717.6223f, 2968.3215f, 3233.4026f, 3551.9622f, 3918.5608f, 4346.0190f, 4778.6880f, 5159.6172f, 5568.5566f, 5980.8086f, - 307.9120f, 439.7297f, 660.0276f, 1243.3854f, 1532.3577f, 1796.3936f, 2437.3232f, 2691.4072f, 3030.3025f, 3524.1379f, 3771.7576f, 4083.2375f, 4601.1567f, 4963.4697f, 5434.8530f, 5942.8315f -}; -#endif const Word16 dico_lsf_abs_8b[256 * M] = /*14Q1*1.28*/ { @@ -18118,323 +10645,6 @@ const Word16 dico_lsf_abs_8b[256 * M] = /*14Q1*1.28*/ 788, 1126, 1690, 3183, 3923, 4599, 6240, 6890, 7758, 9022, 9656, 10453, 11779, 12706, 13913, 15214 }; -#ifndef IVAS_FLOAT_FIXED -const float lsf_cdk_nb_gc_stg1_flt[] = -{ - -50.2820f, -20.3699f, -85.9016f, -168.2552f, -219.7203f, -228.3721f, -209.7385f, -115.7139f, -70.1936f, 2.9143f, 53.7331f, 204.0881f, 324.2565f, 283.0311f, 194.2415f, 55.6127f, - -7.7024f, 55.3216f, 40.0302f, -2.6173f, -31.0254f, -49.9638f, -89.5104f, -79.9710f, -100.2947f, -84.2426f, -89.8130f, -44.4505f, 8.1330f, 123.3018f, 115.2609f, 17.5947f, - -29.7454f, 23.9522f, -6.6145f, -47.3088f, -83.6021f, -109.3905f, -118.2556f, -70.7910f, -71.2423f, -49.5609f, -49.3213f, 0.8054f, 70.8270f, 167.7499f, 132.1748f, 26.7946f, - -46.7868f, 21.9789f, 17.0331f, 1.6574f, -5.3416f, -1.5485f, -24.7294f, -2.2697f, -36.0918f, -31.9601f, -52.9409f, -18.2356f, -16.6137f, 52.8291f, 99.2958f, 9.2780f, - -48.8451f, -8.8573f, -49.2111f, -93.0997f, -116.0209f, -119.2193f, -130.6934f, -90.0435f, -85.8524f, -49.9080f, -30.8948f, 57.8291f, 207.6663f, 238.5938f, 162.1688f, 42.1291f, - 6.0599f, 96.6534f, 89.7254f, 64.7391f, 47.1759f, 39.3332f, 3.8599f, 12.1104f, -25.8483f, -30.7162f, -54.9950f, -24.3625f, -65.0093f, -91.8893f, 41.2788f, -9.3500f, - -74.6215f, -34.1444f, -45.1607f, -35.7601f, 20.1298f, 61.8053f, 45.9485f, 61.3004f, 23.1269f, 17.0184f, -14.6351f, 11.5369f, 40.6714f, 134.6762f, 127.4157f, 23.2286f, - -53.8382f, -7.1967f, 51.3428f, 149.2781f, 132.0314f, 106.9591f, 40.3082f, 28.7839f, -20.0071f, -32.1960f, -69.3754f, -44.7267f, -19.1058f, 81.8775f, 103.3263f, 11.7826f, - -83.4690f, -58.9994f, -100.6923f, -109.7423f, -77.3123f, -51.0569f, -49.0334f, -11.2254f, -13.7028f, 11.7115f, 17.4433f, 113.4333f, 269.5462f, 270.9727f, 181.4436f, 50.9590f, - 19.0904f, 106.4309f, 78.2419f, 22.1934f, -28.2661f, -71.6118f, -97.8980f, -57.5252f, -73.2944f, -59.0236f, -70.7380f, -30.7879f, -16.6118f, 71.0734f, 102.1686f, 10.6722f, - -44.5958f, 9.5910f, -9.9670f, -35.4491f, -36.7779f, -38.2726f, -71.5033f, -56.3692f, -75.3217f, -60.2630f, -64.3206f, -15.0396f, 51.1008f, 156.1136f, 128.1305f, 24.1397f, - -26.8342f, 50.7102f, 47.9495f, 34.1131f, 33.1750f, 40.6004f, 1.8381f, 6.9380f, -34.5476f, -37.5681f, -63.3813f, -32.2824f, -50.5980f, -25.5098f, 69.6276f, -1.2117f, - 6.7027f, 67.8112f, 38.0872f, -23.7302f, -79.0851f, -119.7724f, -146.1929f, -104.8024f, -107.0018f, -86.5365f, -75.9935f, -16.8613f, 84.1440f, 178.1427f, 133.5219f, 27.8811f, - 46.6789f, 157.1987f, 135.6186f, 86.3393f, 50.7338f, 16.6195f, -30.7043f, -23.0751f, -58.4989f, -58.2831f, -83.9640f, -51.4746f, -40.3803f, 39.6990f, 89.0926f, 5.3683f, - -66.8068f, -25.7930f, -49.4702f, -55.7445f, -47.4219f, -47.2327f, -55.9657f, -21.6380f, -32.0155f, -16.3766f, -23.1897f, 25.9724f, 108.6076f, 192.8678f, 143.8874f, 32.5168f, - -29.4610f, 51.1883f, 125.8174f, 178.0158f, 192.4019f, 200.6733f, 150.3214f, 139.0109f, 70.5642f, 49.0546f, 5.2967f, 10.7600f, -32.3233f, -56.1770f, 38.7244f, -6.3720f, - -90.7935f, -86.8579f, -165.1847f, -206.9982f, -177.3116f, -110.7218f, -60.4555f, 28.9968f, 59.3721f, 111.7430f, 148.9078f, 297.0840f, 382.8354f, 319.0586f, 217.5980f, 66.9906f, - -8.8907f, 51.2038f, 20.6150f, -25.0275f, -6.4919f, 28.5998f, -19.2903f, -28.0775f, -67.6854f, -70.6924f, -91.1332f, -51.9799f, 4.7191f, 121.9776f, 114.5332f, 16.9555f, - -29.5779f, 38.1348f, 16.9460f, -13.1717f, -43.7665f, -58.5053f, -66.8853f, -23.5223f, -47.7123f, -38.4358f, -52.6004f, -12.1781f, -9.5310f, 62.0772f, 102.4962f, 10.5329f, - -51.3839f, 10.1170f, 8.8413f, 7.1799f, 27.0856f, 57.8446f, 40.2151f, 55.8005f, 14.1522f, 8.5107f, -25.3037f, -4.1035f, -34.2602f, -19.2221f, 74.9812f, 1.2982f, - -9.0629f, 39.9632f, -4.2048f, -68.4062f, -125.5652f, -168.4946f, -200.3423f, -148.8132f, -131.2517f, -83.3627f, -43.4004f, 70.8276f, 231.0238f, 241.4682f, 165.0121f, 42.8259f, - 23.0736f, 143.9185f, 165.8485f, 141.1318f, 126.9031f, 113.7775f, 58.7625f, 48.6260f, 0.7530f, -14.8817f, -51.1437f, -31.9407f, -63.3610f, -68.5826f, 42.2195f, -8.3010f, - -64.7372f, -30.3666f, -13.8118f, 64.0613f, 130.9271f, 167.6980f, 130.2968f, 120.2481f, 53.8473f, 30.9594f, -13.2901f, -0.2919f, -12.6298f, 33.0601f, 89.8137f, 7.9164f, - -27.4071f, 46.5739f, 73.0324f, 90.7500f, 97.4257f, 110.0360f, 75.8612f, 77.2110f, 30.1418f, 14.8390f, -22.5191f, -7.5352f, -58.3772f, -104.3289f, 27.0985f, -11.5599f, - -48.6199f, -8.4983f, -71.8930f, -149.9820f, -149.4210f, -44.3473f, 3.8456f, 37.8226f, 11.8655f, 4.7745f, -23.8053f, 15.0402f, 99.2230f, 190.4169f, 143.6005f, 32.2851f, - 15.9306f, 86.2159f, 75.9614f, 40.8587f, 13.8614f, -5.1135f, -53.5447f, -49.2651f, -83.1781f, -77.3701f, -94.7805f, -58.1423f, -37.1552f, 59.5436f, 95.8876f, 7.8334f, - -71.4812f, -18.0191f, -10.6353f, -10.9646f, -4.7830f, 7.0689f, -8.9645f, 17.0751f, -8.9055f, -4.5033f, -26.7167f, 6.5207f, 41.1034f, 136.7648f, 126.6881f, 22.6529f, - -13.3071f, 67.8215f, 50.5701f, 22.0055f, -0.1895f, -16.2081f, -44.2669f, -15.2243f, -42.5961f, -37.7900f, -54.1335f, -14.8001f, -44.7622f, -39.3502f, 68.9017f, -1.9700f, - 54.4719f, 135.4882f, 107.6822f, 37.1723f, -15.7729f, -58.2111f, -117.6718f, -111.5628f, -125.9742f, -95.3344f, -71.1785f, 20.4405f, 178.9972f, 225.0608f, 154.3984f, 37.7039f, - 199.1418f, 301.5473f, 242.3446f, 156.1444f, 129.3343f, 112.5769f, 60.9076f, 24.7294f, -36.1788f, -44.7856f, -49.6138f, 35.8621f, 132.4271f, 180.8326f, 145.9355f, 30.7412f, - -95.8307f, -73.4794f, -76.3260f, -32.8480f, 25.0377f, 53.0367f, 47.9260f, 71.8612f, 48.9617f, 48.0805f, 31.5298f, 92.4644f, 215.5727f, 252.6642f, 172.3081f, 47.3738f, - -2.1387f, 144.6784f, 257.4241f, 293.7984f, 302.9054f, 301.4404f, 234.6555f, 199.2878f, 117.8049f, 82.4572f, 28.1316f, 27.9394f, -20.8952f, -53.5108f, 47.9862f, -3.2292f -}; - -const float lsf_cdk_nb_gc_stg2_flt[] = -{ - -11.7897f, -34.0201f, -78.3915f, -67.4130f, 11.6646f, 27.0897f, - -25.4365f, -16.9519f, 1.3623f, -14.4721f, -40.8934f, -28.8082f, - -17.5541f, -24.8863f, -42.0546f, -57.4396f, -48.2462f, -17.3640f, - -23.4838f, -18.0105f, -23.4463f, -23.8641f, 20.1374f, 22.8944f, - -27.9673f, -51.2149f, -32.0136f, 58.4191f, 66.0445f, 33.8922f, - -28.8229f, -24.7667f, 12.6486f, 32.0241f, 14.4964f, 5.0635f, - 11.7718f, 12.7508f, -18.2755f, -64.0918f, -88.2808f, -46.2724f, - 11.7478f, -4.0560f, -28.8370f, -15.2873f, -17.0688f, -21.2716f, - 21.1704f, 4.6685f, -15.1944f, 19.2773f, 48.9464f, 24.7768f, - -31.9223f, -48.4027f, -40.5826f, -2.3521f, -7.7634f, -9.3639f, - 49.8116f, 38.9864f, -9.6274f, -43.4792f, -14.3368f, 6.7127f, - -17.8859f, 16.5261f, 17.9780f, -18.2431f, -4.9259f, 4.9691f, - 34.1057f, 28.5456f, 37.3357f, 25.9730f, -12.0323f, -14.3174f, - -35.7203f, -11.7712f, 71.0202f, 87.9962f, 53.5089f, 22.0342f, - -29.0835f, 7.8202f, 61.7147f, 30.4243f, -7.0096f, -12.3327f, - 121.0591f, 124.7827f, 86.3632f, 52.5283f, 25.7588f, 2.2977f -}; - -const float lsf_cdk_nb_gc_stg3_flt[] = -{ - -20.1057f, -62.1359f, -90.9211f, -83.2088f, -41.8080f, 4.3801f, 64.9293f, 55.2259f, 18.8953f, 8.4560f, - -12.4851f, -29.8479f, -46.3014f, -59.0597f, -57.9280f, -55.5646f, -16.2912f, 29.7501f, 6.4438f, 1.9289f, - -42.4234f, -57.2848f, -42.1410f, -25.0914f, -20.5850f, -22.9466f, -28.6753f, -9.5206f, -2.8536f, -2.4606f, - 2.9437f, -3.2337f, -19.4418f, -30.8279f, -40.2200f, -54.7107f, -69.2608f, -36.5696f, -14.6763f, -7.4390f, - 56.9685f, 42.9405f, 2.6357f, -28.9316f, -41.7842f, -41.1244f, 7.2469f, 37.7725f, 9.4299f, 3.8716f, - -13.4056f, -11.0915f, -7.8932f, -4.4242f, -3.6432f, -6.2205f, -52.2374f, -101.3244f, -31.8836f, -12.9959f, - -49.5845f, -68.9839f, -40.9861f, -4.8425f, 25.7585f, 49.5206f, 52.3506f, 42.0803f, 18.1566f, 7.3750f, - 7.9175f, 30.0116f, 39.2961f, 39.8519f, 33.8428f, 18.7027f, -42.1156f, -114.4817f, -41.9139f, -14.3475f, - -10.3140f, -13.1813f, -8.6771f, -12.5086f, -7.9996f, 8.1476f, 62.8062f, 70.2916f, 23.1315f, 10.3555f, - 7.8827f, -9.7751f, -27.3751f, -19.0843f, -3.1083f, 5.0911f, -8.9477f, -1.9864f, -0.0476f, -1.0431f, - -25.6990f, -1.3466f, 13.9307f, -1.5450f, -21.5161f, -36.5054f, -27.3657f, 9.1052f, 0.5716f, -0.5675f, - 26.0226f, 39.0806f, 25.3016f, 10.6567f, -7.6451f, -27.7012f, -57.9450f, -49.0041f, -17.4613f, -8.2350f, - 24.7306f, 40.5991f, 39.1729f, 32.6364f, 20.0500f, 9.7588f, 17.8440f, 32.3000f, 10.7014f, 4.0975f, - -31.9825f, -23.6145f, 19.2348f, 43.8139f, 32.4545f, 14.8018f, -12.9031f, -14.2377f, -3.4099f, -2.2026f, - 17.4813f, 29.7370f, 40.6045f, 56.0407f, 77.3266f, 109.6360f, 126.9981f, 90.0105f, 41.2847f, 18.3934f, - 62.0530f, 98.1263f, 103.5605f, 86.5243f, 56.8051f, 24.7345f, -16.4333f, -39.4116f, -16.3685f, -5.1868f -}; - -const float lsf_cdk_nb_vc_stg1_flt[] = -{ - -47.8739f, -33.3324f, -111.7403f, -187.1021f, -217.8067f, -211.2333f, -197.1951f, -112.5993f, -54.4085f, 25.6601f, 103.3922f, 273.8963f, 384.4787f, 321.9756f, 214.8825f, 64.7502f, - 5.7213f, 62.0822f, 4.1813f, -75.3379f, -130.0791f, -169.8000f, -137.2333f, -8.1913f, 9.1551f, 12.5919f, -10.2666f, 24.1670f, 78.8903f, 170.0603f, 136.5900f, 28.5131f, - -61.2759f, -38.8420f, -92.0781f, -106.8447f, -84.5683f, -75.2343f, -90.1177f, -57.8575f, -57.3309f, -23.0973f, -6.5859f, 96.8941f, 263.0488f, 266.3097f, 177.9874f, 48.9404f, - -4.6756f, 65.2555f, 47.7555f, 30.0066f, 28.7910f, 33.2401f, 1.0363f, 13.6479f, -20.0856f, -24.5283f, -44.3793f, -10.0354f, -56.2017f, -77.3347f, 55.5984f, -6.2838f, - -40.8653f, -14.8363f, -92.0112f, -175.7323f, -221.1710f, -161.1121f, -52.8429f, 37.5645f, 41.2468f, 45.5229f, 26.4500f, 86.3998f, 219.2824f, 253.3986f, 172.4165f, 46.3912f, - -35.6673f, 17.5904f, -11.9410f, -25.7858f, -8.8584f, 21.6273f, 0.1729f, 6.5783f, -34.6991f, -36.4150f, -56.0023f, -21.0789f, -19.8846f, 54.1067f, 99.1987f, 9.4728f, - -14.2776f, 27.3931f, -14.6997f, -66.6010f, -99.6813f, -122.6578f, -150.2305f, -113.9728f, -109.1274f, -78.9555f, -60.2257f, 27.8011f, 190.2385f, 229.8084f, 157.2525f, 39.3867f, - 7.6929f, 67.9322f, 38.8456f, -21.1201f, -59.7777f, -99.3488f, -141.1098f, -110.2669f, -114.7237f, -91.8703f, -77.7551f, -15.8694f, 90.5305f, 184.5058f, 136.0935f, 29.0311f, - -81.2402f, -78.5803f, -151.4014f, -172.9501f, -128.6324f, -73.2223f, -54.4444f, -10.0382f, 0.8191f, 49.8313f, 85.4796f, 237.9407f, 375.9963f, 320.3293f, 212.6340f, 64.0690f, - -7.5501f, 56.9796f, 22.4374f, -12.3837f, -25.5942f, -46.4205f, -67.6393f, -25.5805f, -48.1321f, -39.6622f, -53.1014f, -11.2472f, -23.2435f, 35.6549f, 94.7977f, 6.9705f, - -35.2312f, 5.7296f, -40.3538f, -74.0301f, -73.9051f, -78.4101f, -69.6657f, -23.5663f, -38.8351f, -23.3996f, -29.2527f, 14.7714f, 60.7441f, 159.3770f, 132.0680f, 26.1624f, - 63.7916f, 158.4710f, 108.6537f, 49.2831f, 12.4814f, -34.2755f, -68.0055f, -38.2006f, -61.2743f, -54.7496f, -73.2102f, -37.3536f, -2.8530f, 99.6502f, 109.4658f, 14.7136f, - -46.8550f, -17.8951f, -73.5817f, -109.9269f, -59.6995f, 13.9228f, 17.3227f, 37.6147f, 5.2378f, 2.5800f, -15.0369f, 23.6412f, 86.2658f, 178.2385f, 140.5764f, 30.3354f, - -64.0179f, -34.7786f, -33.8634f, 32.5490f, 41.5821f, 30.0052f, 2.8933f, 7.9098f, -23.6020f, -21.4437f, -40.3389f, -5.3147f, 46.4389f, 149.8765f, 129.5062f, 24.3633f, - 53.2208f, 88.2962f, 18.1083f, -68.6983f, -163.9225f, -257.5996f, -286.3273f, -136.1982f, -54.0297f, 17.4621f, 96.5930f, 257.5079f, 374.4247f, 316.8143f, 211.5481f, 63.1783f, - 174.9770f, 220.4714f, 114.9514f, 39.1980f, 15.6628f, -57.4971f, -151.3537f, -151.4255f, -122.5434f, -39.5915f, 43.3476f, 204.8011f, 347.0733f, 300.8141f, 202.2481f, 58.3570f, - -24.8002f, 5.5647f, -51.1305f, -108.2679f, -143.4691f, -168.1934f, -183.0667f, -123.7768f, -105.2566f, -53.2548f, -15.6183f, 132.2483f, 301.9698f, 276.6960f, 185.6425f, 51.4215f, - 63.0767f, 97.9030f, 23.3427f, -27.8271f, -7.6827f, 11.5110f, -9.1648f, -16.5310f, -60.2418f, -68.6020f, -79.4697f, -9.9630f, 143.1208f, 212.2018f, 148.4344f, 34.8853f, - -52.8577f, -17.0901f, -38.4446f, -44.4913f, -48.3650f, -49.3479f, -79.7237f, -66.0328f, -77.9226f, -56.8956f, -48.1326f, 19.1059f, 138.4749f, 210.3387f, 148.5705f, 35.3026f, - 16.4209f, 102.4966f, 100.9513f, 64.0511f, 50.2873f, 36.1014f, -21.6103f, -26.7705f, -65.0290f, -62.8056f, -83.1056f, -46.5621f, -51.3341f, 1.7945f, 78.1135f, 1.0912f, - -75.6609f, -71.8274f, -139.7561f, -117.4244f, -22.4806f, 39.5285f, 53.1389f, 65.2518f, 36.9996f, 37.9781f, 25.3240f, 92.8186f, 227.9041f, 260.3466f, 176.7927f, 48.2170f, - -18.6440f, 33.8824f, 28.5803f, 10.9212f, 5.0722f, 4.4072f, -39.6675f, -38.3990f, -75.6662f, -72.1438f, -87.2765f, -46.7029f, -6.7231f, 107.6602f, 110.8838f, 15.3706f, - 21.3981f, 74.2394f, 19.3760f, -47.0944f, -99.2094f, -138.5254f, -193.3578f, -171.5091f, -176.8980f, -112.0385f, -43.8164f, 79.0272f, 251.8247f, 251.6656f, 170.8083f, 44.5524f, - 67.4133f, 149.9282f, 118.6238f, 30.5943f, -33.2344f, -70.7200f, -120.6338f, -105.4183f, -118.8368f, -86.5003f, -64.0278f, 50.0950f, 231.7671f, 247.4923f, 167.0543f, 43.3706f, - -40.9878f, -39.3167f, -163.9672f, -281.7721f, -267.4339f, -138.3948f, -88.8411f, 0.7440f, 65.0724f, 165.9769f, 269.7260f, 427.8145f, 485.5638f, 388.7820f, 254.5937f, 84.1430f, - 12.9002f, 76.9394f, 62.5283f, 13.6656f, -10.4341f, -35.7194f, -84.1773f, -75.4588f, -98.8663f, -85.0203f, -91.0417f, -43.6094f, 6.1868f, 120.0995f, 114.3634f, 17.2779f, - -21.4884f, 29.4970f, 1.0910f, -37.4928f, -55.1841f, -66.8253f, -92.8491f, -74.1643f, -90.3904f, -72.3158f, -69.6267f, -16.2943f, 51.2075f, 158.6230f, 128.0881f, 24.5940f, - 140.4902f, 213.5873f, 167.7455f, 102.0038f, 85.7659f, 59.5426f, 9.2403f, -0.7622f, -35.6690f, -35.9801f, -58.6565f, -15.1000f, 23.5135f, 101.5155f, 111.5278f, 16.5967f, - -62.8100f, -47.2312f, -97.3130f, -60.9976f, 82.6761f, 193.9902f, 154.0588f, 118.2896f, 43.6828f, 13.9735f, -22.6650f, 0.5943f, 26.8732f, 111.3673f, 120.5305f, 20.1022f, - -44.4747f, -10.4204f, 32.1805f, 131.3261f, 157.9129f, 155.8841f, 90.2107f, 70.7406f, 9.4064f, -4.0535f, -42.4163f, -26.0150f, -39.1314f, 20.5559f, 82.2390f, 4.9553f, - 88.4086f, 134.4090f, 60.3778f, -13.5659f, -72.1912f, -160.4579f, -261.2583f, -247.6886f, -121.4628f, -13.9737f, 35.4003f, 197.3431f, 335.8232f, 294.0672f, 197.4029f, 56.5130f, - 267.3715f, 336.4754f, 224.6896f, 104.9689f, 104.5109f, 94.7971f, -20.0482f, -88.9197f, -142.8754f, -60.7279f, 30.3207f, 189.5033f, 335.5709f, 295.5561f, 200.0838f, 57.2552f -}; - -const float lsf_cdk_nb_vc_stg2_flt[] = -{ - -9.6827f, -17.9738f, -44.2587f, -53.7409f, 10.1005f, 32.4057f, - -29.5803f, -35.3673f, -50.3175f, -49.1053f, -47.5762f, -37.2894f, - -10.3138f, -3.1171f, 2.9317f, -20.2045f, -78.9643f, -84.6932f, - 13.6252f, 8.7360f, -21.5126f, -20.8022f, -14.8279f, -30.9676f, - -28.1089f, -48.1602f, -64.6161f, -0.2872f, 108.6371f, 93.6271f, - -38.2393f, 1.9703f, 14.1451f, -7.5949f, 39.2872f, 33.7052f, - -38.5209f, -10.1299f, 61.9126f, 45.3993f, -7.5115f, -17.0167f, - 26.2164f, 20.2119f, 40.4075f, 45.2381f, -2.3925f, -17.4109f, - -19.1953f, -10.5024f, 12.6622f, -19.8408f, -40.6066f, 1.8757f, - -32.7274f, -41.0545f, -26.1793f, 15.7486f, 1.2783f, -17.0256f, - 3.5921f, 2.2211f, -27.0254f, -81.1776f, -88.9427f, -11.1151f, - 48.7753f, 42.6625f, 3.8241f, -21.1582f, 27.5770f, 36.8815f, - 6.8266f, -6.1852f, -19.6226f, 28.9512f, 50.9852f, 15.2853f, - -33.3786f, -38.1386f, 24.6782f, 95.1954f, 64.2442f, 33.4105f, - 49.0652f, 49.8207f, 29.3688f, -11.7891f, -57.3484f, -44.4722f, - 91.6464f, 85.0063f, 63.6020f, 55.1679f, 36.0606f, 12.7997f -}; - -const float lsf_cdk_nb_vc_stg3_flt[] = -{ - -16.5483f, -67.8691f, -113.3476f, -92.9768f, -18.1549f, 21.7013f, 31.7869f, 25.1431f, 9.0112f, 3.4920f, - -7.8375f, -22.7162f, -45.0895f, -61.3419f, -64.4643f, -67.3643f, -44.8953f, -6.2556f, -7.9342f, -3.9490f, - -63.5255f, -72.6896f, -45.5471f, -30.5803f, -26.8317f, -24.4668f, -15.1301f, 4.8754f, -0.5588f, -0.8157f, - -2.2381f, 13.4403f, 16.0097f, 1.0526f, -24.8448f, -61.3997f, -91.3894f, -39.4637f, -19.2183f, -9.1265f, - -16.0140f, -32.7087f, -45.2478f, -59.4365f, -60.1819f, -31.6687f, 70.4575f, 64.2544f, 19.1841f, 9.3201f, - -8.2141f, 2.4761f, 7.4360f, 11.7049f, 14.0396f, 16.9693f, -53.7166f, -119.3159f, -33.5007f, -15.4114f, - -64.5115f, -52.5888f, 30.5453f, 56.2986f, 31.6535f, 9.3509f, 4.3678f, 13.3055f, 5.1440f, 2.0290f, - 22.3180f, 44.1101f, 48.7477f, 40.2739f, 14.9495f, -7.3707f, -10.3082f, 6.3741f, 1.0122f, 0.2673f, - -42.3440f, -58.8447f, -42.2171f, -8.0384f, 34.3873f, 59.7095f, 50.7660f, 38.7146f, 16.7582f, 7.2512f, - -0.1088f, -28.5624f, -30.3477f, -2.8206f, -1.3093f, -12.9286f, -21.2371f, -1.4331f, -2.6014f, -1.5170f, - -41.2001f, 4.7383f, 13.3788f, -12.5767f, -22.3489f, -14.4064f, 10.9753f, 22.2182f, 6.2625f, 2.5488f, - 63.9302f, 51.1717f, 10.5411f, -23.3105f, -47.9860f, -59.1260f, -29.9675f, 0.0559f, -4.8774f, -2.3217f, - 37.1022f, 14.8587f, -19.5761f, -23.3122f, 2.3273f, 32.9204f, 53.1779f, 43.4994f, 16.5403f, 7.5156f, - 48.8143f, 82.6708f, 85.7133f, 77.5688f, 56.9332f, 24.0950f, -63.9412f, -138.5729f, -45.8026f, -17.6440f, - -4.0024f, 18.2212f, 40.5425f, 57.9095f, 69.5262f, 79.8498f, 71.0971f, 51.3637f, 24.2751f, 10.9558f, - 94.3797f, 104.2925f, 88.4585f, 69.5855f, 42.3052f, 34.1349f, 37.9570f, 35.2368f, 16.3058f, 7.4056f -}; - -const float lsf_cdk_wb_gc_stg1_flt[] = -{ - -21.1721f, -6.9787f, -78.7739f, -158.7331f, -205.5198f, -259.2706f, -287.6161f, -271.9965f, -264.8213f, -231.0206f, -194.9294f, -147.7609f, -117.1413f, -85.8077f, -63.7689f, -31.4680f, - -66.9546f, -30.5144f, -36.8376f, -53.0491f, -36.1642f, -48.5647f, -62.2295f, -55.2760f, -57.6386f, -55.8977f, -55.9952f, -40.6957f, -43.2573f, -33.7185f, -37.3113f, -27.4703f, - -18.0276f, 24.5300f, -3.1374f, -40.7788f, -39.2887f, -55.1486f, -87.4694f, -97.8466f, -113.0920f, -112.2454f, -110.4983f, -92.0446f, -80.8734f, -57.2883f, -52.4648f, -39.3426f, - -14.5043f, 41.4594f, 30.8683f, 19.7189f, 29.0785f, 7.4155f, -21.7427f, -23.9321f, -38.3113f, -41.2907f, -40.8309f, -25.7969f, -29.7702f, -20.8620f, -29.2581f, -26.0135f, - -39.7173f, -14.6068f, -62.7880f, -111.0359f, -122.7799f, -150.6084f, -167.3332f, -164.6087f, -165.9175f, -146.9592f, -135.1085f, -110.8433f, -97.6828f, -72.7079f, -64.6184f, -45.5537f, - -42.5539f, 26.5080f, 31.4593f, 1.2393f, 1.6319f, 6.6465f, 16.6621f, 35.3616f, 33.5966f, 53.0816f, 65.9800f, 78.6870f, 64.5119f, 50.4778f, 20.7076f, 7.5572f, - -2.4650f, 88.7057f, 93.4778f, 47.6900f, 47.2210f, 51.8796f, 27.4629f, 23.3020f, 8.4560f, 12.2382f, 12.4948f, 25.9549f, 18.2040f, 17.5385f, -2.2674f, -6.8910f, - -25.2995f, 40.1554f, 131.5320f, 193.8438f, 224.6298f, 213.8258f, 187.1185f, 169.5623f, 131.4438f, 108.3838f, 93.4648f, 94.1147f, 68.7427f, 48.9293f, 15.1647f, 1.4396f, - -63.4604f, -63.8774f, -152.1996f, -247.2777f, -281.1492f, -288.1032f, -252.3883f, -181.6764f, -141.4441f, -90.3039f, -56.5279f, -23.8054f, -11.9068f, -1.3377f, -7.5474f, -0.6953f, - -77.4333f, -60.8457f, -86.6258f, -86.4012f, -29.1547f, 7.2174f, 40.0438f, 63.6826f, 53.0035f, 51.5329f, 55.6684f, 68.8552f, 50.7040f, 34.0814f, 7.7594f, -2.1278f, - 30.9564f, 87.5489f, 69.5663f, 23.2907f, 13.9146f, -0.9477f, -37.0125f, -58.8950f, -99.1749f, -117.9716f, -127.4967f, -107.3465f, -91.7610f, -62.6527f, -50.4613f, -32.9533f, - -64.2954f, -37.5670f, -21.0138f, 41.6351f, 121.9423f, 170.7496f, 195.4955f, 225.2859f, 224.2241f, 223.8838f, 222.3937f, 225.7590f, 188.7341f, 143.2967f, 83.3796f, 41.8113f, - 10.6654f, 55.4135f, 18.0177f, -53.2381f, -88.7693f, -114.5825f, -122.2372f, -110.6857f, -120.7652f, -124.3872f, -136.2432f, -135.4537f, -132.9560f, -104.3421f, -82.6202f, -57.8286f, - -56.8219f, -2.2176f, 4.5106f, 4.9045f, 63.5084f, 94.3949f, 92.6963f, 98.2198f, 78.5731f, 65.0247f, 60.8502f, 70.0685f, 53.4160f, 34.2990f, 2.3436f, -13.6945f, - 62.5259f, 160.0315f, 153.0699f, 116.3367f, 94.9113f, 59.6879f, 36.7834f, 42.8554f, 34.9832f, 32.1663f, 34.2612f, 46.5764f, 32.6032f, 22.8721f, -2.2313f, -9.0276f, - -17.8885f, 81.5994f, 153.8725f, 203.3483f, 260.8972f, 308.2464f, 337.7084f, 369.5280f, 355.1932f, 340.5538f, 332.7582f, 318.9620f, 261.2268f, 196.0706f, 116.6797f, 63.9204f, - 20.6478f, 57.4084f, 3.7268f, -83.6103f, -145.3750f, -207.9262f, -235.3695f, -209.9292f, -200.7669f, -173.1530f, -148.7498f, -120.9027f, -110.3875f, -91.3718f, -83.8093f, -58.7850f, - -39.9125f, 14.8531f, -3.7779f, -42.3801f, -47.0086f, -54.0654f, -37.4186f, -7.7530f, -2.3503f, 11.8227f, 22.9690f, 37.9258f, 31.1117f, 26.1390f, 3.9131f, -4.7425f, - 13.2679f, 79.8638f, 51.3108f, -15.0032f, -39.4744f, -78.1680f, -87.2337f, -58.9813f, -51.8486f, -39.6199f, -34.6732f, -22.2829f, -24.1548f, -18.6608f, -25.3619f, -24.4411f, - -31.4295f, 11.0108f, 63.6155f, 150.7589f, 166.6739f, 132.7679f, 86.6371f, 71.7386f, 36.6906f, 13.2914f, -2.6491f, 5.5439f, -13.1750f, -13.8798f, -27.3878f, -22.3777f, - -24.3473f, 16.7839f, -21.6102f, -77.9093f, -107.7952f, -144.9666f, -139.6022f, -95.3828f, -79.5686f, -54.4138f, -40.2750f, -17.7668f, -12.9124f, -7.1218f, -21.3606f, -21.7144f, - -3.0221f, 85.8766f, 60.9027f, 16.5821f, 7.9817f, -16.4117f, -11.2119f, 17.4948f, 20.8488f, 33.8053f, 43.5158f, 54.6661f, 45.1287f, 38.3086f, 11.1080f, 2.6446f, - 6.4417f, 122.4950f, 125.6148f, 93.2892f, 108.5553f, 111.2156f, 105.3841f, 113.7573f, 102.0970f, 107.1194f, 105.9578f, 110.0393f, 89.3394f, 67.9986f, 28.3953f, 10.5845f, - 5.3008f, 132.8202f, 246.6148f, 259.5175f, 279.9749f, 270.1955f, 242.3427f, 226.1996f, 198.6216f, 175.1598f, 153.5215f, 148.0765f, 116.8644f, 82.8352f, 39.2114f, 16.4926f, - -77.2826f, -81.0630f, -142.8123f, -175.7374f, -154.6778f, -134.7003f, -107.5754f, -71.3200f, -53.8328f, -25.9739f, -7.0973f, 14.6180f, 12.4415f, 12.6191f, -3.8318f, -4.2210f, - -73.5975f, -49.6810f, -33.1272f, 10.8925f, 60.1080f, 61.8344f, 45.3548f, 45.5924f, 22.6090f, 11.2679f, 6.9455f, 18.9899f, -3.4566f, -13.0973f, -24.6136f, -17.3529f, - 93.3489f, 170.7564f, 135.3343f, 56.2893f, 22.2173f, -20.1927f, -41.3723f, -39.2133f, -50.1699f, -54.9363f, -60.2521f, -47.5990f, -54.0679f, -44.0381f, -47.1772f, -37.0088f, - -27.3811f, 60.8027f, 88.5729f, 82.6088f, 118.1956f, 140.5540f, 153.1990f, 173.3699f, 166.1148f, 168.4157f, 165.4583f, 168.4201f, 141.6623f, 111.7883f, 61.8626f, 28.6598f, - 61.0331f, 119.7275f, 83.9777f, -1.2269f, -56.5834f, -121.3104f, -176.1751f, -202.5282f, -219.9765f, -194.9138f, -167.0230f, -130.8084f, -105.0937f, -81.6082f, -73.9476f, -53.6392f, - -27.5935f, 45.9596f, 43.4074f, 35.4528f, 51.8229f, 58.2166f, 66.0162f, 87.5896f, 84.5125f, 96.2322f, 104.1692f, 116.0263f, 98.4793f, 78.3333f, 38.3067f, 15.3865f, - 174.0302f, 282.5094f, 259.6900f, 204.4108f, 189.3996f, 158.0569f, 123.9944f, 123.1922f, 118.3560f, 110.6961f, 101.0661f, 96.5273f, 78.1838f, 52.7614f, 22.4974f, 2.3781f, - 59.8885f, 245.4498f, 371.2458f, 409.7723f, 455.9382f, 450.3678f, 424.1982f, 412.1477f, 364.9408f, 325.9947f, 285.4946f, 257.5709f, 202.0349f, 150.8332f, 79.0164f, 39.6259f -}; - -const float lsf_cdk_wb_gc_stg2_flt[] = -{ - -30.3104f, -56.7575f, -84.1487f, -72.1960f, -22.8352f, 3.3243f, - -46.3791f, -58.1840f, -25.7428f, -7.3327f, -15.5902f, -11.0671f, - -25.6715f, -22.2643f, -12.1418f, -44.6014f, -57.5933f, -25.0539f, - 20.6377f, 3.9627f, -56.7740f, -110.5344f, -99.0040f, -23.5388f, - -33.0807f, -65.7310f, -43.7344f, 59.6097f, 60.3127f, 29.3885f, - 12.2596f, 64.5636f, 86.5834f, 56.7668f, 33.1992f, 8.0321f, - -27.2580f, -0.3414f, 60.0624f, 27.3071f, -13.3937f, -18.6842f, - 24.2406f, 11.7818f, 14.7099f, 38.2644f, 1.7464f, -12.1068f, - 7.3676f, -14.0551f, -58.7823f, -43.8456f, 44.8481f, 49.4476f, - -27.1385f, -20.1290f, 3.2930f, 11.7314f, 24.8512f, 17.5045f, - 6.8143f, -14.7678f, -42.8682f, -16.1166f, -13.7942f, -20.4421f, - 1.4928f, 29.4512f, 13.1269f, -26.8534f, -7.1498f, 6.9288f, - 12.0685f, 25.8088f, 13.8913f, 37.8771f, 77.3020f, 41.3878f, - -31.3089f, -16.5767f, 72.2701f, 101.6937f, 66.1076f, 29.3520f, - 33.0047f, 43.3667f, 18.6451f, -26.2905f, -83.9726f, -67.8400f, - 103.2615f, 89.8720f, 41.6101f, 14.5203f, 4.9658f, -6.6327f -}; - -const float lsf_cdk_wb_gc_stg3_flt[] = -{ - -41.3186f, -87.9369f, -117.0141f, -113.4593f, -76.4138f, -35.5126f, -13.8432f, -7.5581f, -3.0880f, 2.3802f, - -19.0684f, -32.7726f, -38.9479f, -44.5597f, -48.0524f, -54.3931f, -59.1547f, -53.0509f, -42.1806f, -24.7633f, - 27.3501f, -3.4361f, -42.3300f, -83.6244f, -126.2025f, -139.2743f, -121.0968f, -84.5803f, -46.8967f, -18.1514f, - -0.8794f, 7.8351f, 13.7504f, 10.5629f, -2.3365f, -27.6351f, -53.8406f, -67.9140f, -63.0094f, -41.9336f, - 9.4961f, -11.0357f, -24.5415f, -6.6821f, 20.3012f, 24.1832f, 9.4935f, -5.4294f, -16.9057f, -12.2235f, - -53.4765f, -68.3201f, -39.2295f, -10.3152f, -3.0430f, -6.2765f, -10.5345f, -10.9752f, -8.2812f, -5.0682f, - 52.0481f, 94.0614f, 84.0495f, 48.7509f, 4.2751f, -40.3696f, -69.1195f, -63.3772f, -42.9216f, -24.6160f, - 10.0049f, 13.7676f, 17.2697f, 29.3297f, 46.7856f, 60.3615f, 66.0947f, 59.6799f, 45.2938f, 27.9216f, - 3.2564f, -15.2692f, -47.6037f, -66.2845f, -62.6754f, -33.3695f, 8.7487f, 22.9938f, 23.4655f, 15.0233f, - -23.6148f, 4.1981f, 21.0969f, 4.2267f, -12.9805f, -17.4187f, -2.7787f, 14.0826f, 22.1174f, 12.4585f, - 44.7733f, 31.5401f, -0.1129f, -26.8177f, -43.6473f, -45.9941f, -38.3653f, -26.4489f, -17.8081f, -11.4307f, - -21.6468f, 9.0710f, 56.6256f, 68.0223f, 58.5665f, 37.6095f, 13.9228f, -1.0286f, -7.3812f, -7.6752f, - 45.1285f, 52.2192f, 35.8172f, 24.0812f, 18.9679f, 16.9917f, 14.5014f, 8.4539f, -0.8742f, -3.9224f, - -36.6106f, -54.0904f, -50.6995f, -17.6751f, 24.5062f, 61.1192f, 77.2085f, 68.1297f, 51.1173f, 30.6627f, - 45.4659f, 77.8448f, 86.8785f, 84.8886f, 78.1169f, 70.7257f, 58.9888f, 47.0442f, 34.4050f, 19.2233f, - -40.9082f, -17.6764f, 44.9914f, 99.5556f, 123.8320f, 129.2527f, 119.7749f, 99.9787f, 72.9475f, 42.1147f -}; - -const float lsf_cdk_wb_vc_stg1_flt[] = -{ - -28.5460f, -28.7607f, -132.3446f, -253.0434f, -312.8796f, -342.8824f, -300.5386f, -244.2990f, -209.7251f, -159.5373f, -112.6287f, -67.3791f, -48.8219f, -29.0922f, -22.2704f, -4.3572f, - -46.5981f, -22.9649f, -50.9384f, -55.9409f, -47.4823f, -67.2740f, -93.7612f, -98.1688f, -103.5437f, -102.1144f, -101.9471f, -86.9149f, -76.1870f, -53.2461f, -51.2004f, -39.3148f, - 12.7666f, 41.7683f, -13.1290f, -96.2977f, -149.3018f, -210.6122f, -234.0799f, -215.3711f, -220.5745f, -210.7746f, -191.5374f, -156.6170f, -137.7840f, -109.8098f, -92.2552f, -56.2013f, - -45.2993f, -13.6438f, -31.2795f, 0.5585f, 26.1751f, 13.9611f, 18.6252f, 28.1510f, 20.3802f, 26.9694f, 32.9577f, 42.5006f, 29.2892f, 25.1029f, 1.3317f, -5.8774f, - -65.7100f, -62.1535f, -124.6012f, -161.3454f, -151.1323f, -164.9561f, -165.1614f, -150.4622f, -139.8421f, -109.2422f, -83.0457f, -55.1891f, -45.0696f, -29.5104f, -29.5390f, -21.1071f, - -75.2456f, -87.4543f, -164.3682f, -176.4217f, -83.4371f, -28.9912f, -6.9410f, 7.5825f, -2.7413f, 1.1408f, 4.1258f, 6.3013f, -0.6780f, -0.2756f, -18.0540f, -14.7263f, - 109.2056f, 132.5509f, 37.4910f, -93.8923f, -199.5966f, -323.5385f, -370.8597f, -259.1066f, -144.1366f, -52.9207f, -7.3753f, 8.7209f, 4.6669f, 18.2182f, 35.3204f, 18.9218f, - 34.9292f, 54.1737f, -19.4212f, -84.9971f, -62.3420f, -22.1402f, -18.0859f, -54.5195f, -107.3912f, -147.4533f, -198.2396f, -216.4862f, -199.3848f, -152.0050f, -94.9586f, -38.9081f, - -43.7524f, -65.5612f, -209.2403f, -339.0183f, -315.2712f, -219.0569f, -129.2175f, -68.7060f, -44.3255f, -17.2217f, 5.9129f, 29.8303f, 18.2167f, 13.0068f, -3.9593f, 4.1232f, - -20.9014f, 30.0658f, 17.8576f, -24.7442f, -27.5837f, -29.5508f, -45.9995f, -42.7483f, -54.9773f, -59.2762f, -57.4101f, -42.5711f, -43.9485f, -38.1621f, -41.1044f, -32.5227f, - -0.5370f, 38.0716f, 14.4030f, -41.8046f, -67.6856f, -96.6404f, -122.3561f, -123.7498f, -138.9439f, -138.4913f, -136.8318f, -124.9522f, -118.9503f, -96.3028f, -81.0357f, -58.1597f, - -19.4244f, 61.2237f, 71.3972f, 25.6367f, 35.9458f, 21.4457f, -1.7383f, 3.2413f, -12.2673f, -20.9311f, -19.4463f, -5.0683f, -9.0711f, -11.3618f, -25.0494f, -19.2853f, - -30.0686f, 7.6179f, -29.1133f, -90.4660f, -97.3464f, -101.9661f, -79.7809f, -41.4927f, -30.2058f, -14.9387f, -1.3463f, 14.7957f, 5.7342f, -1.8387f, -13.7457f, -15.5035f, - -60.0474f, -62.2162f, -94.9658f, -16.5692f, 137.3642f, 195.2581f, 171.5869f, 140.1564f, 102.9256f, 81.4529f, 62.9621f, 57.0500f, 25.7595f, 5.7185f, -17.0122f, -18.2020f, - 186.4318f, 224.6768f, 114.4757f, -1.7200f, -54.2938f, -162.2942f, -260.9445f, -305.8334f, -275.9291f, -196.7974f, -106.2413f, -38.2122f, -9.9698f, -0.0348f, -3.2806f, -1.0904f, - 131.8525f, 182.9257f, 129.5468f, 39.5803f, -1.4035f, -45.6323f, -49.7229f, -34.2829f, -46.2254f, -45.3785f, -41.8506f, -32.6587f, -52.7586f, -51.1091f, -48.4846f, -48.8108f, - -7.2430f, 5.5232f, -74.0471f, -159.3008f, -202.7316f, -252.2241f, -289.9449f, -278.4816f, -262.2343f, -234.1872f, -194.1267f, -147.2734f, -119.3163f, -94.6419f, -70.6759f, -32.5601f, - -22.3081f, -6.0222f, -71.4069f, -57.5585f, 87.3579f, 111.3674f, 19.2319f, -62.1519f, -140.4286f, -175.0389f, -160.2987f, -104.7539f, -80.1002f, -50.0734f, -23.5490f, 1.6408f, - 23.3797f, 81.2481f, 31.3892f, -52.3576f, -81.9250f, -125.5061f, -125.9686f, -77.3511f, -70.4429f, -55.1778f, -44.3888f, -25.9966f, -26.5913f, -23.2118f, -31.8502f, -31.7050f, - -27.1231f, 37.7616f, 25.1095f, 15.1436f, 46.6224f, 72.7080f, 91.0447f, 118.4813f, 115.1246f, 132.4240f, 135.0095f, 145.7460f, 121.1771f, 93.8520f, 46.9298f, 19.6713f, - -19.2617f, 10.4880f, -44.5537f, -114.3566f, -130.3973f, -156.7718f, -173.2891f, -165.3661f, -167.0274f, -147.1746f, -129.2874f, -104.7640f, -95.4641f, -77.5872f, -69.6100f, -49.0499f, - -3.7184f, 35.4165f, -28.7033f, -86.2246f, -61.2082f, -15.9498f, 31.1702f, 56.3138f, 49.9412f, 77.3057f, 94.0143f, 94.3239f, 78.8126f, 62.9187f, 30.4449f, 9.8069f, - 55.4567f, 100.2570f, 28.4890f, -59.9100f, -114.0757f, -166.5609f, -236.0665f, -274.6304f, -256.7512f, -58.8984f, 6.9854f, 2.1456f, 44.3655f, 27.4061f, -65.0542f, -69.1642f, - 95.5202f, 139.3445f, 117.4449f, 81.4589f, 34.9276f, -44.4909f, -90.4718f, -127.2388f, -175.4005f, -220.3445f, -288.6741f, -303.4144f, -260.5738f, -126.2845f, -58.1968f, -29.1673f, - 3.0556f, 18.3576f, -71.4110f, -183.6864f, -237.4567f, -273.2383f, -199.6331f, -69.6698f, -37.7715f, -22.6972f, -8.8733f, 16.1036f, 11.3358f, -3.2045f, -17.9569f, -20.6306f, - 39.1896f, 96.2913f, 80.5943f, 18.4912f, -3.4620f, -34.5205f, -64.0148f, -77.2972f, -99.9022f, -107.3139f, -104.8068f, -92.0120f, -86.4257f, -73.8585f, -70.7371f, -53.2077f, - 81.1530f, 122.0539f, 53.2063f, -53.6774f, -106.3376f, -163.4776f, -180.9786f, -175.0377f, -183.3532f, -183.5190f, -169.4248f, -137.3097f, -123.3554f, -101.5521f, -94.1512f, -61.8612f, - 47.0309f, 137.9525f, 111.1768f, 67.6681f, 63.8415f, 52.4017f, 35.8194f, 35.6828f, 19.7444f, 10.1125f, 6.1064f, 10.9675f, 5.0407f, -0.1812f, -16.8272f, -19.3810f, - 42.6721f, 92.5038f, 31.4316f, -5.1224f, -6.0796f, -41.9120f, -30.0922f, 1.7396f, 15.4681f, 21.9765f, 36.6015f, 47.1275f, 37.4374f, 28.9853f, 9.1342f, 2.7556f, - -25.6593f, 22.2684f, 98.1230f, 166.4577f, 187.4970f, 165.0274f, 123.8612f, 113.1471f, 79.0653f, 48.7839f, 25.8742f, 32.9158f, 10.3013f, 1.0495f, -15.4120f, -15.0391f, - 304.7019f, 354.4388f, 217.4228f, 65.5482f, 65.3717f, 25.9965f, -93.4052f, -188.0092f, -255.0247f, -224.5901f, -158.7919f, -116.2751f, -72.5203f, -57.4171f, -28.9851f, -1.9506f, - 179.5714f, 241.9845f, 193.4582f, 112.7762f, 108.6980f, 80.4323f, 56.9618f, 58.6676f, 36.2938f, 12.8297f, 4.7285f, 10.9217f, 12.0551f, 12.0937f, 1.6504f, -14.7259f -}; - -const float lsf_cdk_wb_vc_stg2_flt[] = -{ - -4.8704f, -25.4945f, -63.8565f, -65.1017f, -4.5396f, 12.9750f, - -51.6246f, -71.2351f, -70.8930f, -49.5365f, -41.5492f, -21.1764f, - -4.1941f, -21.5321f, -43.7546f, -75.1360f, -101.6917f, -51.6149f, - 39.1412f, 15.8593f, -34.7315f, -30.9497f, 5.4101f, -22.1983f, - -27.3812f, -44.2900f, -51.8477f, 17.0318f, 63.3214f, 33.3719f, - -42.1936f, -38.7776f, 26.9794f, 58.3819f, 22.3255f, 7.3631f, - -17.3453f, 32.8013f, 16.4392f, -4.8961f, 34.6309f, 3.7975f, - 20.9889f, 11.0332f, 21.2790f, 43.6082f, 11.3288f, -4.0437f, - -30.7619f, -28.1362f, -7.6918f, -26.0495f, -20.5254f, 20.4943f, - -5.8695f, -15.0159f, -12.0884f, 4.0124f, -37.3326f, -57.6803f, - 31.1085f, 51.7290f, 46.8635f, -11.1193f, -84.1480f, -75.2940f, - 31.7638f, 33.3860f, -2.0831f, -68.1944f, -69.2055f, 16.6054f, - 26.8476f, 11.7277f, -21.2873f, -16.1653f, 77.7471f, 74.9747f, - -11.9492f, -11.8103f, 39.7377f, 110.8560f, 91.1983f, 51.6182f, - -16.9337f, 34.0576f, 97.5442f, 55.3237f, 6.0911f, -14.5976f, - 63.2733f, 65.6975f, 59.3910f, 57.9345f, 46.9389f, 25.4049f -}; - -const float lsf_cdk_wb_vc_stg3_flt[] = -{ - -32.9020f, -78.5896f, -107.4534f, -95.7731f, -74.7222f, -53.0220f, -21.3706f, -6.3135f, 4.4667f, 8.3786f, - -55.7273f, -51.1982f, -23.4921f, -31.8303f, -40.9730f, -44.0985f, -32.5056f, -19.4304f, -11.2363f, -6.8031f, - -1.3625f, -17.5965f, -40.9966f, -56.5415f, -66.9172f, -82.2625f, -98.8410f, -92.9959f, -64.2789f, -34.2565f, - -0.1831f, 28.9371f, 27.3975f, 6.7646f, -26.2844f, -55.3561f, -55.5887f, -25.6472f, 4.2175f, 6.7426f, - -0.1042f, -22.5234f, -18.6769f, 9.5775f, 20.8908f, 1.7399f, -25.4612f, -48.9497f, -58.9339f, -45.8070f, - -59.3842f, -92.5268f, -67.7156f, -8.1650f, 22.6518f, 30.8838f, 30.1565f, 24.4312f, 17.5083f, 9.4537f, - 61.2263f, 100.3160f, 74.2819f, 32.8490f, -21.2300f, -80.0984f, -138.8597f, -144.8649f, -102.7813f, -51.4501f, - 20.9615f, 14.5464f, 12.7374f, 42.2801f, 62.5685f, 59.3555f, 43.2439f, 37.0487f, 22.3288f, 14.0209f, - 6.4664f, -20.5406f, -67.1147f, -81.1455f, -18.3522f, 38.5675f, 31.4978f, 9.2431f, -5.5141f, -0.9299f, - -14.7299f, -8.8186f, -2.0488f, -3.6924f, -11.6375f, -3.0631f, 38.0648f, 50.4570f, 46.9399f, 28.7229f, - 34.6418f, 11.8422f, -31.9716f, -72.1947f, -102.4017f, -89.6780f, -33.2158f, 7.5030f, 18.7080f, 14.6731f, - -62.1236f, -44.3324f, 53.6090f, 72.1405f, 58.0429f, 57.2172f, 43.2329f, 33.7172f, 19.9635f, 6.9351f, - 73.8739f, 68.1656f, 32.4182f, 5.6585f, -7.7073f, 3.9480f, 12.5407f, 12.3801f, -2.4527f, -5.8024f, - -21.3075f, -24.8496f, -17.5965f, 2.9303f, 59.0699f, 104.4524f, 127.5622f, 113.8932f, 89.2660f, 52.1358f, - 4.2469f, 56.7592f, 88.2184f, 81.0948f, 49.2982f, 15.3523f, -8.4240f, -22.2333f, -30.5271f, -24.1128f, - 46.4076f, 80.4091f, 88.4039f, 96.0474f, 97.7032f, 96.0620f, 87.9680f, 71.7615f, 52.3257f, 28.0991f -}; - -const float * const lsf_codebook_flt[2][2][TCXLPC_NUMSTAGES] = -{ - { - { lsf_cdk_wb_gc_stg1_flt, lsf_cdk_wb_gc_stg2_flt, lsf_cdk_wb_gc_stg3_flt }, - { lsf_cdk_wb_vc_stg1_flt, lsf_cdk_wb_vc_stg2_flt, lsf_cdk_wb_vc_stg3_flt } - }, - { - { lsf_cdk_nb_gc_stg1_flt, lsf_cdk_nb_gc_stg2_flt, lsf_cdk_nb_gc_stg3_flt }, - { lsf_cdk_nb_vc_stg1_flt, lsf_cdk_nb_vc_stg2_flt, lsf_cdk_nb_vc_stg3_flt } - } -}; -#endif const Word16 lsf_cdk_nb_gc_stg1[] = /* 14Q1*1.28 */ { @@ -18748,45 +10958,6 @@ const Word16 lsf_offs_ivas[TCXLPC_NUMSTAGES] = { 0, 0, 6 }; // Q0 const Word16 lsf_dims[TCXLPC_NUMSTAGES] = { 16, 8, 12 }; // Q0 const Word16 lsf_offs[TCXLPC_NUMSTAGES] = { 0, 0, 4 }; // Q0 -#ifndef IVAS_FLOAT_FIXED -const float lsf_ind_cdk_nb_gc_stg4_flt[] = -{ - -33.5099f, -17.2439f, - 1.9585f, 6.4210f, - -21.9240f, 24.8014f, - 23.6604f, 49.3421f -}; - -const float lsf_ind_cdk_nb_vc_stg4_flt[] = -{ - -33.5292f, -23.3982f, - 15.6149f, 34.3889f, - -9.2455f, 6.1721f, - 60.7325f, 78.8354f -}; - -const float lsf_ind_cdk_wb_gc_stg4_flt[] = -{ - -31.4516f, -19.9820f, - 9.1071f, 6.9160f, - -17.3554f, 28.1193f, - 31.7476f, 59.9379f -}; - -const float lsf_ind_cdk_wb_vc_stg4_flt[] = -{ - -25.6665f, -20.7100f, - 17.1565f, 9.9963f, - -13.7601f, 37.4813f, - 55.4374f, 66.3001f -}; - -const float * const lsf_ind_codebook_flt[2][2][TCXLPC_IND_NUMSTAGES] = -{ - { { lsf_ind_cdk_wb_gc_stg4_flt }, { lsf_ind_cdk_wb_vc_stg4_flt } }, - { { lsf_ind_cdk_nb_gc_stg4_flt }, { lsf_ind_cdk_nb_vc_stg4_flt } } -}; -#endif const Word16 lsf_ind_cdk_nb_gc_stg4[] = /* 14Q1*1.28 */ { @@ -18835,267 +11006,6 @@ const Word16 min_distance_thr[2][2] = /* 14Q1*1.28 */ /* WB */ { 580, 580 }, /* NB */ {1000, 580 } }; -#ifndef IVAS_FLOAT_FIXED -const float lsf_q_diff_cb_8b_rf_flt[256*16] = -{ - -49.142456f, 13.490689f, -21.704788f, 63.851589f, 17.341200f, 49.889275f, 4.535705f, -49.377617f, 12.881550f, 3.317029f, -45.874687f, -91.048477f, -159.075317f, -244.532806f, -208.950378f, -60.136238f, - -71.911499f, -50.432014f, -131.216339f, -25.763540f, -90.432335f, -140.176178f, -31.643175f, -46.414715f, -23.065298f, -42.936611f, -38.403904f, 15.094532f, -0.061476f, -28.153961f, -21.246065f, 10.218022f, - -134.834076f, -120.343132f, 98.120338f, 51.493057f, -18.822592f, 5.707322f, -93.194328f, 48.820892f, 38.169155f, 22.535019f, 17.952980f, -59.919395f, -154.178802f, -66.216209f, -30.895947f, -30.548832f, - -41.079960f, -11.862259f, -32.120766f, -35.889202f, -28.737438f, 26.212168f, -37.682671f, -117.789268f, -206.368179f, -150.378693f, -26.382723f, -33.924740f, 14.733324f, -7.089695f, 8.373900f, 41.311722f, - -44.370823f, -21.727020f, -164.064880f, 39.315842f, 14.170435f, 2.276680f, -43.158184f, -105.471977f, 46.076225f, -35.652943f, -72.096603f, -88.481071f, -121.452873f, -86.098267f, -92.925804f, -58.238682f, - -62.593822f, -14.669445f, -39.062012f, -12.045748f, -53.345932f, -70.633652f, -100.257874f, -63.507019f, 57.782543f, 62.015087f, 67.188080f, 65.260689f, -49.929119f, -162.794342f, -204.251465f, -104.609535f, - -66.932289f, -18.313484f, -68.981606f, -25.012476f, -94.210236f, 1.026957f, -67.785004f, -35.943043f, -53.149406f, -87.719955f, -112.206566f, -113.875397f, 111.780113f, 102.159576f, 1.001174f, -50.978374f, - -101.098640f, -70.354515f, -151.534393f, -91.954025f, 3.666550f, 78.893501f, 42.150974f, -57.122208f, -56.242603f, -97.829124f, -66.723511f, 11.967057f, 16.204992f, -23.608727f, -19.899971f, 28.121500f, - 10.450438f, 45.892262f, -54.131168f, -16.160269f, -64.032661f, -176.495041f, -5.962820f, -72.027107f, -150.201141f, -32.517159f, 61.674686f, 44.256657f, 46.283817f, -5.180211f, -141.241837f, -167.211639f, - -173.577682f, -92.975533f, -112.498154f, -101.956200f, -66.556870f, -79.061409f, -139.621201f, -1.422741f, -10.495166f, 71.210350f, 49.869511f, -2.298943f, -35.104397f, 24.463161f, -11.476251f, -46.980118f, - -37.676750f, 24.794701f, -40.237633f, 33.943848f, -51.101398f, 166.382629f, 110.829704f, 23.702038f, 23.627102f, -6.121801f, 0.773019f, -142.445435f, -263.982605f, -14.189220f, -131.928268f, -155.050293f, - -30.214348f, -9.421390f, -102.936676f, 83.361900f, -24.453602f, -180.015442f, 92.876984f, -79.562981f, -9.609303f, -34.706200f, -120.354073f, -29.731850f, -81.171555f, 36.295174f, 61.845047f, 47.662693f, - -110.844032f, 83.765533f, -123.206459f, -51.540508f, -51.287010f, -48.821514f, -29.502964f, -6.343169f, 23.775656f, -0.353102f, -23.523582f, -94.919563f, -133.085464f, -118.824188f, -53.901115f, -52.530910f, - -55.833942f, -37.825222f, 21.633268f, -2.833855f, -172.300034f, 74.660912f, -62.712250f, -77.443947f, 114.319824f, 49.023743f, 36.734745f, 53.222221f, -31.211931f, -15.118987f, -37.109795f, -50.964909f, - -2.209181f, 103.944717f, 186.623413f, -64.544991f, -32.391006f, -40.504578f, -24.400692f, 23.758614f, -28.194080f, -40.393677f, -41.950493f, -90.601120f, -169.530365f, -181.697540f, -67.184174f, -66.990860f, - -24.511374f, 34.831326f, 36.412617f, 49.172550f, -16.029377f, -109.529999f, 4.142260f, -20.617449f, -56.997406f, 30.342079f, -83.989975f, 1.144082f, 161.687592f, 61.147705f, -86.482475f, -92.777733f, - -88.158249f, -53.647205f, -131.604202f, 18.409283f, -8.442244f, -74.841873f, -30.877779f, 73.223831f, 26.580759f, -20.676722f, -31.395731f, -93.706764f, -88.946129f, -60.194122f, -118.809082f, -83.768547f, - -27.869957f, -5.078736f, -133.762909f, -274.870483f, 25.990072f, 21.509178f, 36.674843f, -3.828471f, -37.908432f, 2.206993f, -2.133470f, 15.392393f, -76.964806f, -123.400665f, -55.604580f, 13.984759f, - -39.818924f, -24.414286f, -78.231728f, 114.239975f, 68.886200f, 49.643444f, 61.244785f, 24.158489f, -11.322248f, -82.068733f, -152.400940f, -144.792816f, -89.084679f, -107.811325f, -15.021494f, 27.688988f, - -26.188799f, 13.887177f, -74.969177f, 125.939407f, 54.065468f, -29.856068f, 6.488181f, -63.185188f, -96.026291f, -188.663879f, -165.438187f, 203.997070f, 43.201817f, 21.809793f, -74.018494f, -76.644218f, - 14.730933f, 52.225765f, -133.046051f, 73.062096f, -12.101256f, -61.917290f, -85.989738f, -25.391121f, 61.084568f, -56.463966f, 192.920975f, 44.298870f, -151.724915f, 91.825546f, 4.643712f, -14.348310f, - -83.082611f, -43.735950f, -57.932819f, -63.816303f, -127.738678f, -96.165390f, 27.380922f, 106.262009f, 117.074669f, 97.982422f, 63.797035f, 48.936672f, -12.647917f, -65.618805f, -84.200691f, -93.463432f, - -79.058868f, -82.570656f, -23.950100f, -42.977753f, 35.295464f, -60.833336f, -54.265438f, -1.680498f, -73.608223f, -41.047230f, -32.325935f, -36.250416f, -2.680869f, 24.178974f, 12.027203f, 4.833654f, - -70.078651f, -40.907417f, -113.092224f, 27.616556f, -46.329929f, 104.583298f, 82.129387f, 0.280690f, -27.957493f, -79.316704f, 111.977844f, 50.056763f, -19.403173f, 25.433884f, 70.602043f, 28.069981f, - -1.787399f, 19.136635f, -48.166355f, 5.009412f, -62.536564f, 75.527115f, -47.088139f, -11.585875f, -65.448433f, -92.899475f, 107.363365f, -32.311649f, -203.382462f, -152.693619f, -50.552776f, 31.944372f, - 8.727448f, 163.701584f, -151.617279f, -120.834221f, -140.449585f, -168.542450f, -161.597626f, -134.148041f, -44.436928f, 23.024485f, 88.100662f, 153.087036f, 171.657425f, 142.269592f, 72.176025f, 34.152279f, - 24.626226f, 141.228775f, 68.035118f, 32.383106f, 29.076723f, -23.316879f, -11.166278f, 28.757330f, -105.244186f, -168.721451f, 15.529101f, -45.646198f, -99.508888f, 12.179071f, 41.687931f, -6.929618f, - -32.293335f, -15.942890f, 0.017796f, 227.668884f, 35.207336f, -33.792694f, 82.114479f, 15.197913f, -26.902617f, 65.209732f, 1.587932f, -56.761986f, -22.348925f, -26.869337f, 19.428514f, 27.321255f, - -102.949432f, -25.011555f, -147.959137f, -87.200294f, 47.153675f, 18.530943f, -0.166834f, 19.560911f, 89.191528f, 52.157402f, 2.918095f, -61.719532f, -94.293381f, -51.465199f, -1.655222f, -17.656567f, - -38.911335f, 6.948825f, -39.729725f, -51.301937f, -53.620224f, -108.789536f, 155.468872f, 63.620651f, 35.850296f, 70.581047f, 42.754013f, 127.703674f, 66.715858f, -130.426041f, -146.462341f, 74.622078f, - -1.029140f, 54.317455f, 8.387774f, 41.543407f, -10.573199f, 24.244738f, 30.842634f, -26.604139f, -33.421272f, -9.906475f, -31.059523f, 10.844967f, 30.019199f, -202.162201f, -258.204132f, 91.369331f, - -153.889771f, 115.453377f, 72.695793f, -18.096334f, 20.942005f, -35.160381f, -38.443104f, -34.397667f, -48.781742f, -1.410000f, 62.099541f, 79.766754f, 142.615189f, 135.960159f, 96.626495f, 58.906452f, - -79.472115f, -49.353893f, -49.954609f, -155.367615f, -116.776726f, 15.010523f, 18.099497f, -55.247025f, 16.403715f, 87.059982f, -23.132126f, -173.747818f, -144.933502f, -28.767344f, -32.596806f, -0.380802f, - -15.925756f, -5.412324f, -105.707176f, -130.356949f, -98.465538f, -47.166088f, -87.599068f, 42.630928f, -62.413151f, -107.954193f, 158.527435f, 98.763542f, -3.586527f, -6.147307f, -13.222188f, -23.993233f, - -24.975382f, 56.402035f, 52.029133f, -3.636582f, -18.978687f, -30.510057f, -20.777334f, 0.297320f, -75.612679f, -166.890121f, -182.792877f, -17.244802f, 17.907167f, -95.983925f, -107.016418f, 6.600997f, - 13.935800f, 124.014893f, -78.200630f, -86.667000f, 27.445192f, -62.815701f, -53.436100f, -106.422089f, -98.502609f, -122.057808f, -94.039665f, 79.832077f, 85.983383f, 86.996208f, 71.870331f, 101.132660f, - -51.503838f, -34.840988f, -93.907707f, 54.647934f, 85.969376f, -35.794395f, -36.596844f, -102.254219f, -196.495346f, 34.254475f, -15.691520f, -81.330208f, -7.808877f, -105.690956f, -96.873695f, 28.378246f, - 79.900681f, 76.900246f, 101.535088f, 103.327919f, 76.696190f, 36.222244f, -87.911812f, -186.179047f, 47.998817f, 180.776077f, 27.586971f, 68.147926f, 8.632617f, -127.173943f, -218.839523f, -269.181305f, - -51.884178f, -23.658228f, -7.389097f, 51.481766f, -16.066425f, -70.871017f, -193.338547f, 194.566742f, 115.566246f, -35.451885f, -78.933662f, 8.663171f, 16.445974f, -68.275475f, -91.542229f, 1.517690f, - -39.556801f, 39.785755f, -76.877228f, -215.618423f, 126.814384f, 37.883842f, 26.489124f, -32.631229f, -79.764656f, -5.413741f, -44.822353f, -38.384186f, 145.878082f, 205.717392f, 96.100632f, 80.714775f, - -36.383427f, 1.122570f, 179.888214f, -48.044216f, -121.014236f, -85.808846f, -125.241035f, -79.817886f, -0.247583f, 50.953720f, 13.693697f, -5.582759f, -50.636333f, -46.192039f, -66.636848f, -36.257576f, - -122.950089f, -101.489883f, -260.444885f, -20.923767f, -57.475227f, 15.233345f, -42.816353f, -43.372814f, 58.668098f, 2.198759f, -2.974080f, 16.032595f, 93.305153f, 50.504028f, -14.432660f, -50.193291f, - -16.826427f, 8.873464f, -87.595573f, 23.091625f, -3.794562f, 38.739624f, 159.341888f, 57.302864f, 10.663289f, -44.891232f, -143.189377f, -141.278580f, 34.162834f, 67.916397f, -11.724302f, 82.864563f, - 8.689659f, 79.660339f, -106.648331f, -40.056900f, -61.659725f, -89.878143f, 30.882858f, -96.414940f, -87.919632f, 71.567696f, -13.048811f, -99.413971f, 158.306488f, 148.612640f, 101.164139f, 44.707798f, - 51.876743f, 173.028961f, -7.548154f, 42.151535f, -0.306372f, -63.804768f, -65.823441f, -61.424610f, -3.614527f, -0.266337f, -28.529921f, -42.772068f, -92.503525f, -24.051035f, -29.639515f, -52.302032f, - -21.027899f, 32.422092f, -19.221569f, -81.996292f, 170.400146f, 147.834946f, 78.837563f, 54.455120f, -4.170513f, -14.816674f, 66.761642f, 29.512554f, 1.267826f, -7.617690f, -74.421074f, -86.431335f, - -19.333296f, 100.725983f, 62.089886f, 80.720032f, -11.293929f, -156.758041f, 130.283081f, 64.092621f, 10.666490f, 23.035032f, 9.748004f, -82.614822f, -134.818069f, -117.491508f, -98.273796f, 27.608231f, - 3.230417f, 41.808163f, 13.598584f, 214.913864f, 110.737106f, 36.832939f, -14.412317f, -27.091141f, -72.668190f, 5.492285f, 219.188553f, 157.024200f, 139.305466f, 42.584637f, -89.405518f, -147.115540f, - 5.685055f, 57.183292f, -12.697913f, 68.282562f, -33.609550f, -33.049332f, 87.031670f, -39.772167f, -127.605225f, -30.905075f, -129.695374f, -167.423813f, 14.979711f, -80.101776f, -175.781570f, -120.638008f, - -26.057411f, -22.450294f, -86.065346f, -174.294159f, -236.409439f, 106.705414f, 94.844818f, -24.300186f, -47.618366f, -4.900061f, -8.250068f, 26.776390f, 23.026890f, -0.663881f, -8.460385f, 52.523418f, - -239.938965f, -188.228012f, -72.794617f, -24.974373f, 64.134842f, 47.954140f, 37.109238f, 56.990929f, 19.013355f, 2.195176f, -39.343456f, -65.541855f, -48.117985f, 33.679371f, 1.032876f, -8.904166f, - 1.318133f, 23.793682f, -11.594374f, 208.226288f, 86.628777f, -41.451736f, -85.691925f, -59.617199f, -144.367111f, -168.655807f, 108.856461f, 32.739384f, -66.105087f, -32.850475f, 68.247009f, 136.522278f, - 46.231567f, 61.993446f, -37.963066f, 71.883453f, 4.955863f, 90.692329f, -55.423782f, -173.421982f, 91.392097f, 4.265558f, -86.143791f, 11.978693f, -147.210098f, -173.357559f, 47.334595f, 132.379639f, - -8.091352f, 36.792015f, 42.705544f, 0.830618f, -22.491022f, -42.331161f, -6.163970f, 83.671753f, -37.618378f, -48.777485f, 136.386185f, 88.433350f, 121.425102f, 78.104286f, -118.565308f, -236.474899f, - -34.999004f, 35.648041f, 104.321472f, -80.549561f, 88.479385f, 4.159388f, -68.049988f, -110.190895f, -59.762150f, -34.927917f, -42.892593f, -50.185341f, -31.525537f, 28.561077f, 30.799391f, 32.589943f, - -19.395960f, 10.917861f, -33.211983f, 59.916050f, 17.923265f, 69.628220f, -59.527351f, -0.360134f, 20.055620f, -76.225594f, 59.490189f, 219.202728f, 44.065163f, -105.835022f, 149.316025f, 103.121368f, - -26.811831f, 4.917114f, -50.918606f, -51.282066f, -44.665630f, -34.671989f, 54.816383f, -53.930695f, -122.650787f, 9.736618f, -86.848312f, -33.875164f, 28.787636f, -128.559616f, -13.832273f, 240.435959f, - -127.768944f, -120.395676f, -224.640091f, -106.371384f, -110.915848f, -119.944382f, -64.704178f, -86.686111f, 57.449604f, 91.349197f, 96.250694f, 156.740128f, 176.836166f, 127.207031f, 51.964844f, 14.125758f, - -47.998665f, 17.796474f, 29.304367f, 75.164230f, 58.860054f, 113.970734f, 70.417877f, 23.055088f, -25.342611f, -99.771896f, 5.999279f, 51.847668f, -60.419800f, -163.240036f, -99.791527f, -66.431305f, - -0.302659f, 17.211594f, -98.700340f, 53.635334f, -28.992607f, -89.555244f, 112.895592f, -32.920498f, -109.022964f, 150.316772f, 124.435059f, 47.075050f, 111.757408f, 77.910065f, -34.123623f, 33.374477f, - -8.188879f, 23.113052f, -14.419042f, 58.259747f, -4.053533f, 3.542868f, 101.208923f, 41.556973f, 65.754631f, 15.887958f, -6.614230f, -95.157341f, -213.709061f, 82.959053f, 10.967265f, 42.520882f, - -12.848677f, 33.983711f, 26.826427f, 55.942802f, 17.707258f, 59.918518f, 15.309278f, 207.269272f, 99.491982f, 42.829330f, 116.586906f, 97.039436f, -36.674652f, -119.304512f, 74.699173f, 64.565712f, - -127.629143f, 210.633652f, 90.269417f, -15.052937f, 10.047224f, -44.578220f, -32.594685f, -24.894297f, -32.681622f, 36.690662f, 60.424084f, 6.454986f, 7.198017f, 25.681587f, -4.052445f, -25.874166f, - -13.218253f, 25.233515f, -43.822559f, 14.608809f, 50.092663f, 29.797066f, 122.838074f, 60.946331f, -15.227234f, 70.429047f, 49.234367f, 22.393675f, 241.398132f, 68.944763f, -19.084089f, 15.646838f, - -61.749660f, 22.046791f, -33.557991f, -16.016773f, -39.896496f, -65.069405f, -73.831696f, -54.138386f, -41.472534f, -59.811478f, -96.109680f, -119.990692f, -91.886162f, -31.355206f, -9.082160f, -39.052567f, - -27.257662f, 71.028709f, -136.328506f, -98.025055f, -21.314344f, -16.991056f, -34.343781f, -70.373230f, -55.339901f, -30.724577f, -8.068395f, -12.537150f, 6.994465f, -2.531820f, -19.959831f, -32.511631f, - -189.575684f, -170.668686f, 159.468323f, 69.316818f, 9.541554f, -35.932343f, -76.965225f, -73.569916f, -80.277435f, -52.695671f, 36.840542f, 4.612717f, -5.781191f, 68.836777f, 46.053165f, 5.477945f, - 23.076845f, 56.007298f, 58.995125f, 73.648643f, -23.558571f, 31.706146f, 6.650000f, -81.954597f, -43.828186f, -91.444901f, -136.752670f, 3.109934f, -61.638336f, 161.845291f, 158.234512f, 75.812927f, - -29.586615f, 8.254013f, -12.131930f, 42.161793f, -20.277391f, -118.423508f, -194.639008f, -196.011337f, 38.792351f, 37.828663f, -2.185939f, 11.298992f, -6.172924f, -4.559058f, -65.562843f, -27.597832f, - -47.978813f, 22.640007f, -58.066402f, 58.001053f, -47.134541f, 8.486321f, -6.111372f, -31.006121f, 51.575218f, 5.865514f, 17.294910f, -41.168453f, 73.907234f, 13.599236f, -307.273499f, -197.696899f, - -44.109650f, 49.449520f, 84.357780f, -161.258835f, -95.109154f, -44.129417f, -5.148076f, -26.549320f, -4.192320f, -31.172485f, -35.216717f, 42.882584f, 4.978696f, 0.798938f, 44.287029f, 7.057617f, - -44.323925f, -3.754397f, -20.289011f, 35.057964f, 30.896481f, 47.822914f, 57.432564f, -18.862158f, -58.972874f, -40.730820f, -53.210159f, 151.582123f, 189.086823f, -47.681084f, -160.354431f, 18.183973f, - -24.190926f, -8.054521f, -60.337772f, 17.447094f, 52.011765f, 64.135529f, -12.559262f, -64.698524f, -145.641434f, -49.002659f, 27.998568f, 54.442074f, 31.638771f, -105.428864f, -187.366058f, -170.395126f, - -52.519932f, -45.655670f, -54.255409f, 18.195887f, -47.736511f, -25.311331f, -74.233253f, -139.686768f, -7.455135f, 30.180883f, 16.468306f, 73.234703f, 89.610466f, 86.974052f, 38.241241f, -12.159492f, - 27.982965f, 58.867645f, 9.410244f, -37.832794f, -107.431290f, 148.510559f, 114.846024f, 37.929848f, -49.612717f, -97.690834f, -11.054573f, -58.132690f, -120.672997f, -0.656331f, 67.064285f, -17.834682f, - -38.582962f, 4.200229f, -16.068153f, 16.516636f, -13.899181f, 5.986161f, -2.004643f, 12.832077f, -44.597519f, -86.681267f, -38.071716f, -52.322094f, 61.482838f, 23.035675f, 222.921036f, 209.259064f, - -53.377850f, 219.871765f, 18.681116f, -49.476475f, -66.432587f, -11.111042f, 8.136900f, 38.469578f, 83.534767f, 23.165945f, -66.981857f, -119.944641f, -90.701843f, -5.017766f, 13.544878f, 7.416979f, - -26.158424f, 21.733870f, 8.429042f, -7.359868f, -81.261559f, -0.384979f, 107.991409f, -33.468559f, 163.344254f, 171.295059f, 21.148136f, -44.234226f, -50.298836f, -2.045869f, -46.947075f, -69.817322f, - 54.305538f, 77.911476f, 98.722816f, -46.229565f, -143.810577f, -1.355024f, 61.036888f, -13.015687f, -3.865948f, 88.857635f, 7.053370f, 11.180832f, -46.409653f, -90.435066f, -105.360260f, -147.441849f, - 75.489372f, 105.739868f, 60.188259f, 33.809502f, -21.277689f, -21.943260f, -50.937679f, -75.105469f, 43.895504f, -42.176373f, -73.326416f, 343.493774f, 168.802673f, 63.476738f, 36.762135f, 96.509972f, - -43.959518f, -13.900088f, -83.791946f, -2.585726f, -89.923798f, -318.138428f, 56.854568f, 72.487968f, -32.397919f, 28.099873f, -17.146538f, -96.395309f, 0.466646f, -28.547890f, -71.721748f, -40.413429f, - -91.491898f, -100.288185f, -158.042801f, -94.347038f, 41.776943f, 56.555912f, 18.842609f, 21.550163f, -8.122741f, 83.330833f, 83.349388f, 56.535236f, 6.853065f, -16.367655f, 6.860499f, 12.135324f, - -122.978020f, 41.508400f, -57.019398f, 119.866692f, 169.921616f, 82.577713f, 6.609851f, 29.209021f, -35.676617f, -95.016159f, -42.960949f, -61.483852f, -28.365889f, 44.539429f, 11.786313f, -39.760418f, - -35.204288f, -3.827494f, 1.364895f, 53.625450f, 67.540977f, 12.539343f, -62.200562f, -131.499298f, -190.222824f, 97.861145f, 145.009247f, 116.742218f, 39.964626f, 5.113988f, -49.972206f, -22.433067f, - -21.844286f, -3.302132f, -103.041687f, 72.974442f, 0.991044f, 31.884541f, -68.314651f, 15.106439f, 38.181488f, -142.549530f, -177.428543f, 26.987268f, -65.951744f, -49.118980f, 100.179466f, 67.782463f, - -68.886017f, -50.878456f, -101.627640f, 94.751526f, 63.353767f, -35.431698f, 88.086647f, 85.405006f, 1.274280f, -8.066319f, 108.974724f, 81.340332f, 19.295490f, -5.680541f, -76.852966f, -93.998848f, - 0.026969f, 0.110805f, -0.074311f, 0.076925f, 0.017105f, 0.036573f, -0.118072f, 0.068798f, 0.056649f, 0.036456f, 0.063553f, 0.071463f, 0.000525f, -0.019787f, -0.046544f, 0.021337f, - -17.799213f, 17.198961f, -23.454958f, -48.785267f, 32.178555f, 142.656906f, 87.394043f, -46.504601f, -91.326263f, -128.089188f, 168.745255f, 12.046860f, -75.234085f, 321.776276f, 84.140045f, 147.402191f, - -7.771455f, 13.708800f, -83.826019f, -18.597784f, -45.941696f, -97.131195f, 73.443825f, 13.631736f, -35.554703f, 154.701080f, 86.402138f, 6.515917f, -68.449318f, -152.233841f, -30.240294f, -16.017389f, - -55.553074f, -10.045274f, -82.091660f, -104.274841f, -102.906937f, -76.238228f, -59.226723f, -42.700069f, 16.344666f, 35.539070f, 49.328686f, 56.921478f, 131.003021f, 165.738358f, 186.387207f, 144.321213f, - 24.576750f, 51.924622f, 2.034293f, 189.503342f, 148.765106f, 101.905212f, 63.054604f, -22.561197f, -112.342194f, 8.821053f, 33.745621f, -43.875877f, -58.067898f, -146.850281f, -17.419054f, 72.366890f, - -30.276649f, -31.782654f, -80.339973f, 100.106911f, 93.313034f, 4.726528f, -48.094799f, -115.030556f, -191.082672f, 102.985733f, 88.130089f, 19.376783f, 42.609215f, 50.674198f, 152.159012f, 114.587776f, - -137.391373f, 14.609784f, -65.256355f, 1.609928f, 37.473400f, 26.934027f, 24.673132f, 119.508095f, 88.831779f, 43.605965f, 27.401138f, -7.082619f, -78.587341f, -76.090195f, -60.487331f, -49.042698f, - -3.795852f, 48.615219f, -32.316784f, 47.219639f, -71.672012f, -177.180862f, 227.674683f, 121.423073f, 55.595085f, 89.844704f, 18.789379f, 72.883820f, -30.959936f, -1.702511f, 69.411217f, 21.385332f, - -31.896704f, 58.013481f, 15.825336f, 21.007841f, 73.693138f, 2.008733f, 47.849987f, 22.561638f, -56.861252f, -96.624382f, 116.512817f, 122.175636f, 14.970264f, -131.112076f, -137.480362f, 145.503159f, - 3.666602f, 60.865307f, 190.182358f, 42.435371f, -21.053213f, -17.096897f, -76.084404f, -13.743227f, 117.478218f, 140.799774f, 154.908340f, 88.790558f, 92.327370f, 121.949478f, 69.189064f, 33.268280f, - -24.028364f, -0.568868f, -10.598723f, 23.224901f, -10.145369f, 23.696190f, -80.020584f, 133.288193f, 78.874382f, -28.811146f, -74.702332f, -142.888794f, -177.398254f, -126.189499f, -64.583435f, -4.795106f, - -42.301235f, 1.254746f, -92.263153f, -67.414131f, -68.581459f, -105.596657f, -95.386429f, -140.669708f, -167.874496f, -26.571861f, 58.823044f, 95.171120f, 164.426514f, 117.247391f, 67.970955f, 67.381973f, - 12.281957f, 57.241734f, 145.007370f, 102.782562f, 6.108451f, 23.661549f, -109.679001f, 79.513168f, 54.415848f, -107.359993f, -127.692383f, -2.818198f, -116.707993f, 22.176086f, -1.896818f, 13.089568f, - 42.066715f, 109.299110f, 22.366495f, -16.778564f, 21.774530f, -4.182106f, -18.286386f, -52.603218f, -118.524780f, -89.037674f, 118.551682f, 115.277679f, 89.577263f, 130.519241f, 158.623138f, 169.276016f, - -127.461502f, -97.991295f, -154.912262f, 156.017349f, 83.816185f, -40.645927f, -30.617186f, -97.806175f, -64.010101f, 50.553226f, 32.767338f, -3.065530f, 46.381119f, 52.668839f, 32.740833f, -18.864176f, - -35.447090f, 10.117445f, -29.844646f, 121.351227f, 83.683456f, 57.303402f, 15.328587f, 44.133987f, 67.000153f, 104.188065f, 10.872536f, -10.320432f, 63.163109f, -83.689003f, -200.906555f, -56.971607f, - -73.476898f, -50.613533f, 157.811996f, -36.126892f, -3.998129f, -33.125019f, -40.811184f, 75.547150f, -26.170004f, 16.685923f, 89.786247f, -2.189539f, -13.579331f, 56.560184f, 54.771152f, 26.603344f, - -50.784908f, -37.853783f, -22.237158f, -10.529336f, -75.668167f, 170.388672f, 64.201385f, 9.919388f, -25.087654f, -97.517700f, -38.260277f, 51.479713f, 98.044075f, 224.824921f, 125.035980f, 68.006523f, - -13.163634f, 49.532330f, 22.343836f, 23.637941f, -71.608704f, -200.313492f, 22.972029f, -65.936508f, -139.879044f, 109.168282f, 73.714027f, 8.318653f, -33.382645f, -57.808838f, -26.988724f, 70.492950f, - -57.241489f, -35.265514f, -140.595444f, 85.484810f, 13.172671f, -44.652134f, -64.718590f, 80.219849f, 113.279419f, 8.199357f, 46.910881f, 1.842971f, 6.611537f, 108.265114f, 84.200981f, -15.673004f, - -54.020992f, -40.065796f, 68.741219f, 89.963760f, -22.845310f, 156.119400f, 40.349724f, 13.827300f, 99.219742f, -10.468677f, -69.469467f, -91.899101f, -28.343006f, -18.399660f, -48.014648f, 18.084986f, - 39.514809f, 117.259254f, 84.999840f, 3.152317f, -89.788651f, -15.256340f, 128.664642f, 16.396799f, -2.824860f, -2.224188f, -108.113235f, -104.294632f, 285.672485f, 258.659821f, 131.015823f, 46.896381f, - 35.400707f, 199.269470f, -50.829807f, -59.871765f, -112.504417f, -87.914078f, -74.663177f, -14.457950f, 3.730728f, 8.424652f, 34.759491f, 5.061568f, 49.715153f, 29.911200f, -4.833649f, -7.921039f, - 79.273865f, 68.455246f, 143.235184f, 29.923138f, -61.068966f, 27.401043f, -93.697815f, 39.637844f, 278.054901f, 207.706467f, 114.287697f, 191.970261f, 28.365456f, -67.643982f, -126.002037f, -324.593506f, - -38.810867f, 77.219002f, 226.800339f, 84.473801f, -40.547543f, -21.564167f, 131.517456f, 93.058868f, 25.796638f, 24.364828f, -21.709984f, 0.377355f, -100.328873f, -63.233959f, 39.949356f, -20.796144f, - -49.434875f, 13.246425f, 235.871155f, 150.979660f, 94.417747f, 49.695023f, 9.298592f, 42.695667f, 12.962906f, 29.078457f, 141.417770f, 131.790558f, 139.121719f, 102.666374f, 34.500813f, -11.908920f, - -2.108662f, 13.590509f, -38.806015f, -50.421722f, -148.383850f, -9.163120f, 221.518173f, 91.873947f, -57.944500f, 7.884820f, -23.169016f, -6.481791f, 39.176830f, -30.829500f, -216.452530f, -132.310471f, - -60.222321f, -37.813641f, -144.648758f, -74.471680f, -53.668755f, -36.867607f, 163.549622f, 118.314560f, 9.347286f, -64.045303f, 54.008766f, 6.278257f, -3.053545f, 65.511765f, 31.613440f, 28.923603f, - -68.111702f, -58.754192f, -20.550688f, -9.141284f, 178.296661f, 46.222195f, 85.088615f, 25.129522f, 3.565898f, 73.297729f, 22.594685f, -30.790440f, -60.898556f, -59.714981f, -25.799683f, -26.515989f, - 79.872566f, 27.157415f, -193.357193f, 172.950409f, 131.502487f, -2.173946f, -11.273206f, 11.559188f, -135.590240f, -117.606354f, 162.157654f, 74.852615f, 84.181198f, 42.567123f, 72.688606f, 30.169746f, - -22.176310f, 8.126409f, -98.820702f, 162.383163f, 130.916565f, 39.752148f, -32.870506f, -173.600403f, 116.578125f, 45.067692f, -27.598148f, 8.555970f, -3.395607f, -42.335846f, -20.110458f, -40.589352f, - 31.181765f, 77.636864f, 60.341606f, 90.832474f, -9.832494f, -111.538925f, 111.043030f, 140.765152f, 80.575752f, 24.432682f, 81.943199f, 20.720406f, 1.215079f, 4.115319f, -68.575241f, -91.525787f, - -84.731537f, -0.527349f, 25.745188f, 36.190254f, -62.206528f, -86.327141f, -27.536991f, -15.557912f, 32.424694f, 13.717608f, 11.215924f, 22.781013f, 9.574938f, 61.158257f, 61.121010f, 32.403088f, - -18.375742f, 10.047339f, -50.339001f, -6.936292f, 12.167328f, 150.529266f, 222.465683f, 183.672455f, 58.230515f, 30.788654f, -22.198248f, 57.085861f, 28.043667f, -36.177765f, 171.042053f, 134.737167f, - 0.297151f, 95.241844f, 51.197784f, 41.369175f, 33.568478f, 7.960698f, 55.897408f, 15.283177f, 29.098846f, 91.276161f, 20.340677f, -60.202499f, -171.769867f, -193.836426f, 13.407167f, 121.289520f, - -77.249527f, -31.146763f, -86.916313f, 13.008453f, -21.325594f, -35.007175f, -0.394985f, 39.783211f, 158.601135f, 162.017731f, 166.716888f, 164.855255f, 145.650070f, 87.215416f, 13.765621f, -16.071383f, - -11.922022f, 69.904465f, 145.530533f, 137.786896f, 42.237782f, 75.689651f, 121.502434f, 26.309196f, 0.019661f, -62.185799f, -152.175339f, 86.949432f, 41.679405f, 18.519968f, 34.415928f, 25.165304f, - -9.927750f, 11.307752f, -64.252609f, 131.465469f, 47.641304f, 22.456234f, 36.158360f, -40.804043f, -91.170403f, 86.573074f, -47.294422f, 15.884171f, 222.589951f, 158.826157f, 154.847031f, 224.892197f, - 34.394650f, 50.068573f, -4.612890f, 39.353638f, -13.351929f, 82.855324f, -34.119553f, -198.830780f, 169.354126f, 20.893297f, 2.412445f, -82.652008f, -123.564072f, 148.278564f, 67.057632f, 86.445847f, - 8.496761f, 55.847862f, 9.401371f, -12.230957f, -48.765945f, 339.392365f, 127.588539f, -17.772644f, 73.892937f, -37.477283f, 39.123516f, 58.133339f, -42.253559f, -161.082916f, 77.454605f, 125.429886f, - 43.473793f, 173.585449f, 85.007156f, 42.041813f, -61.597820f, 51.345463f, 44.502201f, -8.306359f, -2.903240f, -41.573891f, 114.340172f, 93.989349f, -18.752844f, 33.966118f, 85.911499f, -5.925835f, - 69.373337f, 94.525620f, 55.872551f, -12.796402f, -57.766541f, 205.378647f, 150.999893f, -34.033718f, 46.349552f, 51.589359f, -9.740956f, 165.190857f, 245.511856f, 140.620789f, 33.383125f, -80.622025f, - -24.897663f, 9.583753f, 62.261280f, -111.380074f, -93.574211f, 37.958935f, 11.259578f, -85.749733f, -185.118637f, 15.325944f, -47.716419f, -70.300369f, -64.094902f, -120.984238f, -115.879242f, -5.316128f, - -43.105038f, -38.260498f, -69.155273f, -106.188942f, -215.693817f, -116.750755f, -22.012207f, -17.229620f, 2.833113f, 47.987717f, 6.774336f, -11.583231f, 16.325312f, 30.872992f, 21.988634f, 21.333845f, - -40.281574f, -19.919075f, 83.175934f, 145.520676f, 74.963409f, -17.649036f, -97.185730f, -32.826363f, -53.159214f, -13.556940f, -30.614326f, -68.210266f, -70.881149f, -25.398729f, -57.834473f, -78.295006f, - -54.354683f, -53.242130f, -151.652374f, 75.184731f, -12.681744f, -62.721302f, 39.976120f, -84.622726f, -164.732422f, -81.025864f, -59.992664f, 18.575914f, 59.433632f, 91.230606f, 74.121452f, 15.667545f, - -56.008598f, -36.547680f, -74.135963f, 60.449661f, -43.171642f, 20.404333f, -94.677895f, -134.441208f, -21.513660f, -79.943031f, -11.399878f, -26.450451f, -51.884460f, 13.872990f, -10.700389f, 13.693831f, - -54.557514f, 14.214915f, -109.558357f, -39.927799f, -80.414780f, -21.436823f, -29.838932f, -133.094101f, 41.575626f, 119.561104f, 108.865402f, 113.994164f, 70.534935f, -74.075966f, -153.541779f, 13.645255f, - -19.660948f, 72.645828f, 57.090542f, 10.197439f, -82.249893f, -86.073334f, -65.963997f, 26.606983f, 62.380840f, -79.725609f, -67.844391f, -100.735214f, 103.173157f, 41.282562f, -14.417590f, 97.527374f, - -15.501063f, 10.106770f, 19.181379f, -48.813862f, -54.115250f, 235.424240f, 13.094974f, -96.655479f, -53.639637f, 13.621657f, 1.518511f, 44.934509f, 57.590019f, -41.299301f, -105.937149f, 5.567881f, - -26.978188f, 39.920815f, 39.867668f, -30.284748f, -137.471680f, -12.073587f, -11.821868f, -56.056862f, -109.460243f, -95.643143f, 71.884705f, 3.678432f, -69.469994f, 46.625034f, 21.143269f, -12.124670f, - -235.238770f, -189.902191f, -98.019753f, 1.308181f, 6.093620f, -51.336655f, -74.336411f, -58.007866f, -34.142288f, -23.622774f, 21.920612f, 54.356789f, 118.404907f, 98.866112f, 78.824142f, 48.048695f, - 38.583252f, 140.003342f, 104.366905f, 59.575905f, 16.539742f, 143.487717f, 46.418877f, 67.189468f, -16.257248f, -14.486803f, -37.126595f, -97.505363f, -80.173981f, -94.221985f, -115.390350f, -118.126472f, - 14.582953f, 70.503632f, -14.045506f, -19.149410f, -112.971611f, -166.393768f, 175.770172f, 72.728432f, -123.819260f, -84.734123f, -79.798332f, 15.522896f, 9.189954f, 45.245491f, 67.264786f, 21.392374f, - -30.288527f, 176.278839f, -42.118710f, -113.833649f, 18.178839f, -98.263985f, -5.378097f, -36.394852f, 56.751965f, 34.232403f, -15.896103f, -21.939495f, -36.014275f, -97.239891f, -44.097141f, -21.397247f, - -57.630421f, -14.344311f, -48.722851f, 4.000876f, -85.091949f, 134.974442f, 96.790924f, 44.602585f, 116.120537f, 108.384445f, 134.965012f, 62.810093f, -51.505104f, -66.570000f, 0.324640f, -61.159451f, - 46.961773f, 91.328773f, 255.896439f, 266.543579f, 55.914829f, 1.617108f, 3.187201f, -8.799063f, 27.105843f, 96.940453f, -6.333913f, -40.912540f, -123.896332f, -219.183456f, -147.103104f, -82.445755f, - 4.730723f, 14.597744f, -4.770158f, 50.178673f, -46.408352f, 46.296600f, 159.859604f, 44.269157f, 25.871405f, 18.163599f, -69.356171f, 99.161255f, 145.530502f, 110.339287f, -78.356651f, -249.688126f, - -4.995772f, 7.796484f, -231.294037f, 72.029633f, 33.000286f, -63.268135f, 113.155357f, -3.829946f, -48.667412f, 20.674379f, -19.940260f, -66.963058f, -30.490475f, 1.557967f, -21.697649f, -25.190910f, - -68.609848f, -42.050915f, -81.286026f, -171.873383f, 5.826807f, -37.863060f, 65.958603f, 64.783348f, 16.320978f, 7.862601f, -63.484844f, -35.056782f, 36.112469f, 25.719179f, -27.790937f, -49.815948f, - -52.712395f, 5.407033f, -50.664661f, -57.217823f, 93.290443f, 86.227432f, 47.213612f, 8.067347f, -70.909805f, -102.342758f, -81.671745f, -96.333832f, -76.863091f, -17.267122f, 0.470240f, 11.259017f, - 45.857506f, 61.279209f, -16.262930f, 65.889984f, 39.496490f, 31.019928f, 10.330289f, -12.880993f, -158.328720f, -214.299026f, 136.159515f, 34.651714f, 58.886429f, 52.877373f, 18.637857f, -97.587326f, - -83.695442f, -46.231495f, -126.655914f, 84.273537f, 24.091738f, -77.565994f, -121.072006f, -65.358688f, 13.704159f, 17.912792f, 129.792953f, 45.167286f, -76.637970f, -90.235817f, 29.498278f, 22.527498f, - -38.629421f, -13.281903f, 19.966961f, 21.830301f, -71.014816f, -56.646057f, -183.160706f, 153.295105f, 121.722061f, 122.379555f, 191.160324f, 94.983765f, -38.069660f, -13.902174f, -28.430313f, -3.660168f, - -61.012142f, -16.898062f, -122.156700f, 40.265934f, -4.676280f, 89.712509f, 77.850525f, -22.210423f, 54.780842f, -9.432448f, -77.245964f, 33.276836f, 8.500788f, 24.147732f, -37.488598f, -50.028263f, - -13.981007f, -3.172497f, 12.233177f, -3.165506f, -42.713432f, 159.373047f, 120.601517f, 61.609337f, -95.282997f, 154.044556f, 146.461670f, 105.883102f, 35.354893f, -32.637356f, 13.527010f, 52.834805f, - -59.811607f, 31.116199f, -44.788532f, -25.192825f, 11.671334f, -60.872108f, 94.383209f, 44.916836f, -91.212807f, -106.707802f, -36.229931f, -17.900185f, -138.207123f, -165.818100f, 56.715836f, 45.974777f, - -7.959111f, 85.271294f, 17.490253f, -50.336193f, -56.605679f, -100.320343f, -152.276581f, -135.327911f, 88.408737f, 129.427505f, 125.965462f, 98.592941f, 27.923223f, 7.087426f, 27.595392f, 42.971786f, - -25.500626f, 121.667168f, 83.573936f, 3.791471f, -23.845556f, 49.105648f, 81.526443f, 160.776093f, 22.598379f, -98.819115f, -47.420437f, -16.478176f, 46.472534f, -122.984657f, 0.608375f, 57.243511f, - -12.015658f, -0.135543f, -139.000534f, 151.549393f, 71.025963f, -20.232512f, 95.418777f, -70.840523f, 52.608326f, 22.649012f, -56.357464f, 137.754135f, 50.294880f, -87.514961f, 20.277452f, 193.218811f, - -111.404922f, -69.059303f, -107.005531f, 53.955250f, 56.233429f, 68.297432f, 9.512801f, -94.675659f, 125.887329f, 141.677551f, 37.625774f, -55.039444f, -107.942078f, -106.586906f, -103.690109f, -31.521854f, - -7.459867f, 80.387726f, -22.849117f, -7.418187f, -31.289583f, -58.895996f, 121.585495f, 71.303520f, 69.327995f, 33.343830f, -42.588058f, 246.521713f, 44.359360f, -30.136723f, 45.514824f, 33.970772f, - 13.146280f, 37.437431f, 11.781944f, 221.298462f, 64.525116f, -28.227280f, -2.765812f, -60.692303f, -105.971016f, 145.109314f, 29.132435f, -9.364019f, 92.389153f, -40.417786f, -167.946228f, 91.506371f, - 20.380590f, 124.691406f, -34.959442f, -32.687466f, -68.501457f, -12.932295f, 8.627584f, -95.438469f, 34.264408f, 157.920456f, 94.634033f, 154.451233f, 203.167297f, 140.269073f, 62.590698f, -14.471005f, - -23.798073f, 20.029366f, -28.207727f, -42.335686f, -94.120468f, -119.036964f, -160.177826f, 13.003415f, -10.760310f, -23.243717f, 23.871334f, -25.554195f, -70.506531f, -62.087463f, 52.588543f, 91.934219f, - -45.170189f, -10.087015f, -66.042885f, -262.296326f, 71.659988f, 42.020767f, -0.749665f, 30.568419f, -84.345169f, -88.957222f, 62.976131f, 17.781088f, 35.814819f, 41.151264f, 100.832329f, 51.108604f, - -55.090458f, 141.549744f, 45.250282f, 126.572884f, 51.766277f, -4.223619f, -20.867323f, -46.912258f, 12.903956f, -24.562819f, -59.262470f, -34.927166f, -24.950871f, 4.246840f, 14.226479f, -12.156185f, - -18.676003f, 56.782200f, 24.631006f, 31.817165f, -57.425724f, -164.249939f, -100.221893f, -51.068310f, -151.775375f, -103.694389f, 51.353741f, -14.789831f, 103.796227f, 121.169785f, 67.449203f, 45.746460f, - -9.249492f, -0.717516f, -95.589256f, -58.979927f, 183.596542f, 82.821739f, -44.961880f, -113.124100f, -73.027855f, 24.111319f, -9.787043f, -20.309830f, -9.503817f, -25.950542f, -63.329922f, -49.288395f, - -39.281731f, -8.520073f, 12.045630f, 113.941223f, 56.889790f, 11.705962f, -25.992363f, -25.818201f, 41.962906f, 136.173462f, 158.992706f, 71.041000f, -94.766388f, -115.894958f, -100.844521f, -76.998589f, - -8.995197f, 14.692396f, 10.648182f, 46.508247f, -46.040749f, -30.752420f, -101.055634f, 157.707993f, 120.625099f, -34.914780f, -60.452560f, -125.891411f, -64.873436f, 115.602501f, 134.647278f, 88.401085f, - -16.291512f, 25.577784f, -57.797333f, -93.257050f, 204.563004f, 23.844887f, 18.521849f, -48.872440f, -34.910671f, 52.242157f, 90.209885f, 155.241089f, 122.966759f, 97.500565f, 51.306534f, 61.434639f, - 5.888782f, 91.756126f, 55.121063f, 59.742477f, -13.308426f, -24.613007f, -59.364792f, -131.265594f, -87.939194f, -56.433189f, -38.294590f, 21.820187f, 22.980511f, -26.082766f, -9.050174f, -5.993128f, - -109.033333f, -70.663361f, -105.171837f, -29.390360f, 23.201317f, -1.143196f, -0.591588f, -62.349960f, 177.791931f, 64.124794f, 18.023848f, 85.805557f, 57.960117f, -10.079674f, -10.009348f, -11.720422f, - -1.513953f, 39.937832f, 25.296638f, 52.355652f, 31.179762f, 169.450806f, 131.414230f, 42.987076f, 48.422070f, -2.570796f, -102.850693f, -184.716797f, 126.997742f, 120.658882f, 70.227798f, 51.911579f, - 14.841161f, 42.875328f, -31.856815f, -61.852024f, -95.273911f, -33.013256f, 70.492905f, -26.551783f, -11.850163f, 50.677963f, -74.369408f, 121.694061f, 184.952850f, 83.381836f, 119.151489f, 86.071533f, - -76.190552f, 217.282104f, -47.804283f, 21.103445f, 63.081154f, 35.664818f, 9.597631f, -78.337799f, 33.574825f, 9.579362f, 11.619099f, -66.239075f, -93.457573f, -67.129135f, -28.104412f, -48.758240f, - -32.987583f, 55.155075f, -19.071968f, 25.848909f, 147.531418f, 161.891159f, 100.338860f, 122.278191f, 117.346077f, 121.715561f, 59.932480f, -5.041065f, -11.882968f, 25.816359f, 5.152595f, -6.028398f, - -50.602802f, 47.969971f, 109.523300f, -18.894117f, 104.845932f, 3.333271f, 81.642517f, 48.507870f, 18.322062f, 13.163134f, -27.716911f, -78.545464f, -60.946442f, -21.241007f, -43.533047f, -54.892029f, - 23.136389f, 29.755871f, 115.663109f, 366.295105f, 92.912613f, -56.490879f, -23.877293f, -67.456276f, -41.077976f, 176.197632f, 112.048927f, 87.809334f, 124.036644f, 73.674416f, 55.857883f, -59.281975f, - 36.171646f, 81.249886f, 0.990727f, 62.659752f, -6.243932f, -32.411499f, 103.505295f, -8.062663f, -11.415750f, -33.329777f, -157.624710f, 108.892738f, -52.815735f, -116.408310f, -114.794746f, -108.042885f, - -53.235435f, -53.853008f, -22.214457f, -62.809551f, -184.508316f, 55.657627f, 60.393047f, 8.903349f, 119.629532f, 99.485672f, 93.179787f, 12.529486f, -36.033150f, 91.600227f, 120.306450f, 101.186569f, - -266.389862f, -40.268497f, 58.560471f, -15.688929f, 15.476221f, 40.140427f, 70.106178f, 33.398193f, -55.307781f, -54.812614f, 9.501314f, -32.842312f, 1.404359f, 72.411819f, 48.677658f, 19.896832f, - -30.625458f, -22.088581f, 23.690083f, 147.814285f, 106.761505f, 32.618851f, -56.217175f, -56.086750f, -39.910542f, -27.860449f, 41.870930f, 33.237003f, 14.673645f, 133.780670f, 65.161377f, 29.900471f, - 52.106541f, 97.515167f, -46.684582f, 28.368923f, 50.509525f, -14.864295f, 9.164424f, -87.343681f, -53.357895f, -14.466661f, -124.789276f, 139.007889f, 57.820137f, -198.630005f, 89.412651f, 73.174347f, - -11.813260f, 28.477610f, 43.814209f, 53.005009f, -31.552076f, 12.509279f, -45.665352f, 0.665018f, 89.380127f, 35.962025f, 56.310169f, 231.104538f, 77.507759f, -6.636252f, -114.024948f, -103.220619f, - 3.209964f, 92.323235f, 134.360977f, 72.508331f, -71.873093f, -24.684990f, -70.873833f, -80.898567f, 36.660206f, 107.964767f, 56.888454f, -41.093380f, -94.986824f, 5.479705f, 85.588272f, 86.314072f, - 2.358892f, 19.563696f, -40.146599f, 106.779350f, 84.014519f, 66.932846f, 7.030437f, -25.116844f, 113.391785f, 69.206184f, -40.131550f, 153.922714f, 143.482407f, 34.324108f, 313.322266f, 143.053925f, - -22.836403f, 14.444014f, -49.938580f, -50.887901f, -139.897385f, 96.043907f, 97.666435f, -49.784187f, 51.330086f, 49.973110f, 36.349068f, 19.132963f, -131.961868f, -176.490204f, 84.266121f, 168.514481f, - -37.196350f, -31.474470f, -145.770355f, 73.739777f, -13.749185f, -36.067165f, -73.649986f, 69.205238f, 57.424969f, -29.286839f, 50.821659f, 151.341400f, 196.208405f, 145.900299f, 73.740807f, 59.942463f, - -48.483910f, 109.854485f, 175.905731f, 107.550728f, 182.661041f, 127.042297f, 56.932144f, -4.789718f, -40.474155f, -4.276073f, 15.682971f, -20.523733f, -2.600147f, 47.862274f, 10.863128f, -28.360899f, - -38.357815f, 12.670331f, -18.138870f, 42.676201f, 92.674187f, 36.742359f, 52.514660f, -5.668614f, -115.172440f, 43.835323f, 63.331287f, 56.027485f, 115.062248f, 3.782463f, -26.444477f, 273.927704f, - -70.262749f, -8.360212f, 4.471777f, 3.338549f, 59.435081f, 178.305817f, 71.276756f, -18.074911f, 8.591813f, 75.633720f, 25.886395f, -77.867401f, -98.552505f, 23.158539f, 89.771393f, 55.317135f, - -43.166435f, -20.516071f, -21.639067f, 58.366417f, -37.861000f, 87.507889f, 228.670868f, 168.987442f, 151.971222f, 95.947609f, 62.651642f, 55.564648f, -1.630664f, -52.394417f, -111.610962f, 110.578148f, - -3.820340f, 128.265320f, 241.518845f, 81.778282f, 29.058863f, -34.290600f, -72.192398f, -76.477760f, -66.605965f, -11.854634f, 31.504972f, 41.623680f, 49.260410f, 46.350578f, 25.015730f, 0.466101f, - -74.436829f, -21.117008f, 50.415005f, 41.561440f, 24.320005f, 3.089626f, 84.041313f, 176.202164f, 134.057922f, 109.030365f, 39.151558f, 51.717243f, 205.704620f, 150.353210f, 111.243019f, 26.017376f, - -0.922336f, 8.721625f, 49.901936f, 20.303036f, -45.592381f, -38.354324f, 58.650257f, -53.023918f, -56.784760f, -43.466248f, -124.796875f, -123.479370f, -110.273987f, -34.595661f, -16.564945f, 34.111702f, - -30.525043f, -2.907169f, -178.401764f, -44.677608f, -17.348223f, -31.677353f, -14.556618f, -31.867868f, 20.035357f, 2.716418f, -2.513957f, -41.058819f, -52.201744f, 41.795589f, 65.134628f, 38.667267f, - -92.711220f, -81.188332f, 165.320053f, 146.599762f, 22.146481f, -21.278519f, -40.179806f, -68.613281f, 115.899551f, 67.407913f, 2.306747f, 0.489086f, -1.279717f, 7.199631f, -40.551086f, -8.905237f, - -56.852066f, -32.516693f, -15.849322f, 68.052765f, 92.856277f, 97.140533f, 38.923428f, -64.162766f, -101.875473f, -63.277794f, -78.587120f, -32.074039f, 106.572845f, 95.851845f, 38.376095f, 15.852232f, - -53.858379f, -20.356443f, -84.059586f, -105.614822f, -51.119640f, -2.018013f, -77.954140f, -175.482086f, 79.777809f, 19.744781f, -53.635326f, -51.991280f, -49.052460f, -20.029406f, 16.108711f, 24.346910f, - 65.308319f, 24.882250f, -53.676472f, 35.191555f, -75.052139f, -100.669830f, 139.646332f, 26.502867f, -87.489288f, 144.371918f, 85.639999f, -5.127411f, 49.956379f, -68.622177f, -194.561584f, -257.525238f, - -72.071564f, 88.947922f, 181.188904f, -141.172180f, 21.858112f, 21.690336f, 80.976372f, 74.222694f, 14.965449f, 4.836141f, -13.533607f, 12.946756f, 80.034424f, 18.799646f, -1.797944f, -11.852658f, - -55.483604f, -28.792759f, -51.127789f, -27.386141f, -3.054134f, 270.684784f, 127.849197f, -7.843138f, -46.675968f, -2.273780f, -41.244320f, 107.264915f, 109.052605f, -57.428146f, -94.478180f, 201.012741f, - 58.417904f, 129.794479f, 88.032875f, -43.482414f, 1.503281f, 18.233082f, -4.274224f, -9.935395f, -90.743645f, -138.744934f, 13.047572f, 99.424622f, 79.562485f, -10.939718f, -128.585876f, -119.279457f, - -106.237129f, -91.740143f, 68.612770f, 19.771488f, -23.333853f, 6.881060f, -114.409279f, 37.293667f, 27.547070f, -21.962831f, 62.975277f, 126.174873f, 137.661591f, 88.351982f, 21.489727f, 36.082073f, - 49.864040f, 101.988388f, 41.740952f, -2.001927f, -83.519859f, 222.208069f, 203.213120f, 27.999317f, -8.565958f, -46.465588f, -117.948517f, -54.232327f, 28.665607f, -23.274929f, -55.554726f, -66.254654f, - -52.622940f, -27.317537f, -61.638550f, 130.447021f, 38.187801f, -83.578110f, 91.015823f, 65.975807f, -29.551769f, -55.780457f, -169.249374f, 136.943573f, 43.613983f, 85.860855f, 145.805145f, 83.847832f, - 15.936594f, 90.094734f, -129.895950f, 8.163410f, -8.877759f, -0.308240f, -33.896103f, 62.208805f, 103.766220f, 66.179008f, 27.826544f, -68.158470f, -111.605835f, -60.367783f, -34.454868f, -50.271614f, - -51.554886f, -21.024059f, -18.746723f, 92.973503f, -20.544609f, -4.456210f, 41.285404f, -2.806954f, 202.912384f, 180.625198f, 93.686058f, 105.542542f, -40.283619f, -22.137281f, 28.882605f, 86.878098f, - 166.593475f, 204.373047f, 175.392639f, 6.547530f, -67.728508f, -1.995924f, 104.944130f, 25.587944f, -76.602921f, 2.406351f, -37.560753f, -66.060905f, 82.223129f, -5.690928f, -80.786980f, -192.349823f, - 5.629341f, 24.807444f, 33.959263f, 139.666183f, 67.254204f, 113.142754f, 5.735409f, -36.896606f, 102.640205f, 13.071086f, -75.008644f, 135.153275f, 112.622955f, 93.684708f, 55.722095f, 17.380138f, - -78.392647f, 67.183548f, 41.397549f, 47.879723f, -95.470726f, -223.305008f, 34.429707f, 203.257339f, 81.951591f, 24.905951f, -102.131676f, -172.571976f, 80.404175f, -3.289175f, -63.539902f, -178.667999f, - -8.287517f, 28.750130f, 2.918398f, -190.230972f, 30.998074f, -24.621058f, 57.173183f, 67.070824f, -30.796249f, 125.394531f, 129.483154f, 69.056030f, 61.479782f, 5.587425f, -26.427807f, -42.299709f, - -53.579803f, 3.932101f, 19.298172f, 60.866375f, 203.507217f, 92.185112f, 4.952492f, 26.875463f, 58.186695f, 23.599648f, -55.879227f, -95.170883f, -128.408905f, -56.559254f, -13.179881f, -6.339478f, - 32.887764f, 110.878929f, 47.881824f, 61.743668f, 32.366764f, -43.335995f, 132.176224f, 23.456560f, -170.514435f, 21.666937f, -6.332648f, 200.979141f, 36.371750f, 69.918137f, 54.659019f, -24.744967f, - -48.200562f, -14.369913f, -109.873573f, 132.716415f, 33.534492f, 21.027716f, 29.168337f, -6.307217f, 29.464451f, -16.280748f, -5.903169f, -33.134434f, -163.021179f, -114.629570f, 242.579056f, 153.244400f, - -245.076645f, -119.108864f, 30.076363f, 46.303539f, 62.514118f, -1.635351f, 60.051456f, 85.906593f, 63.114086f, 96.103294f, 94.438263f, 60.414326f, 27.037113f, 46.420849f, 23.188837f, -4.991467f, - 48.128830f, 147.061111f, -19.109028f, -62.073257f, 73.974655f, 35.121407f, 48.858604f, 17.476908f, -27.161577f, -26.075205f, -23.080959f, -22.997204f, 22.060139f, 18.945644f, 12.078902f, 26.152502f, - -11.399143f, 35.660534f, 7.735845f, 28.895029f, 11.763469f, 67.383682f, 32.067547f, 172.807663f, 41.212330f, -64.892891f, 202.612274f, 66.128975f, 24.998840f, 129.758621f, 97.607491f, 64.079475f, - 16.849846f, -8.063315f, -96.246849f, -42.776253f, -61.709106f, 8.576951f, 41.636856f, 4.893633f, -184.455124f, 90.305283f, 214.893326f, 77.557159f, -52.231232f, -59.771557f, 115.499374f, 10.271899f, - -52.432972f, -10.506747f, 32.671928f, 30.160530f, -30.343365f, -108.296562f, -124.741348f, -114.153496f, 22.689064f, 53.387943f, 152.464798f, 195.884613f, 223.508789f, 180.783310f, 88.327431f, 24.891722f, - 44.069721f, 128.580154f, 87.081917f, 97.057877f, 80.764305f, 71.377975f, 76.201828f, 19.052254f, -86.244247f, -55.772846f, -78.071259f, 59.358582f, -18.004076f, -97.394165f, 203.970825f, 128.282730f, - -29.760933f, -17.373451f, -26.997627f, 298.461884f, 135.359589f, -5.173777f, 50.398880f, 16.654043f, -28.228046f, 127.954193f, 88.721756f, 31.046473f, 72.834770f, 51.219566f, 124.174194f, 179.024460f, - -71.473610f, -8.079115f, -80.057495f, 73.607849f, -11.565989f, 6.495467f, 75.740349f, 69.178413f, 172.751343f, 50.800892f, -29.929661f, -55.132294f, -39.521492f, -34.578106f, 29.018955f, 18.790855f, - 4.944071f, 58.298073f, 72.167747f, -20.213915f, -49.029274f, -5.245622f, 135.798645f, 114.233170f, 48.812248f, 154.565750f, 91.869995f, 9.594048f, 29.263868f, 29.942837f, 60.248390f, 56.068134f, - 20.676535f, 129.442535f, 114.557922f, 65.585472f, 9.776167f, 76.209824f, 142.460770f, 65.045479f, 31.220121f, 68.550804f, 85.770195f, 65.380852f, 33.190002f, -80.774033f, -170.538605f, 61.262844f, - -23.503824f, 198.854172f, 14.658221f, 54.346264f, 29.317448f, -15.893962f, 6.081978f, 50.519886f, 129.337723f, 125.421761f, 131.127838f, 197.853912f, 207.257065f, 154.032959f, 90.113098f, 66.989784f, - -62.626553f, 0.772200f, -28.967108f, -85.223953f, -146.385803f, 82.958099f, -24.949381f, 93.786552f, 94.234512f, -39.738564f, -74.894165f, -36.566628f, -39.978264f, 3.580493f, -15.366054f, -32.318130f, - -54.913471f, 12.737958f, -117.342049f, -59.757664f, -14.541400f, -24.570677f, -20.895752f, -18.573147f, -31.541250f, 3.822062f, 63.816460f, 68.993881f, 96.323494f, 113.108215f, 60.914867f, 38.452541f, - -74.699921f, -33.957706f, 274.636505f, 42.985191f, -13.963601f, 35.379383f, 27.960144f, -9.738332f, 15.494253f, -5.034236f, -48.640007f, -28.968740f, -24.268768f, 34.582504f, 11.429268f, 13.275120f, - 32.094368f, 53.997974f, 58.552933f, 60.038021f, 15.307313f, -14.686091f, -79.145950f, -92.266304f, 6.606106f, -31.398434f, 1.153621f, 61.459366f, 211.102783f, 199.088348f, 139.181458f, 90.360237f, - 13.961225f, 107.374969f, -42.851105f, 111.353691f, 85.895554f, -10.314037f, -36.885490f, -48.654755f, -86.748146f, -13.811635f, -28.521486f, -133.376526f, 66.836365f, 63.232780f, 50.980137f, 33.082199f, - 0.719331f, 59.833492f, 52.997120f, 109.368217f, 78.191238f, 181.871460f, 110.776367f, 41.572018f, 32.371555f, 59.911247f, 100.121117f, 147.708542f, 67.625221f, -90.737854f, -184.544220f, -95.008667f, - 17.476965f, 51.444233f, 130.136398f, 86.703789f, -21.260557f, -68.970932f, -246.970169f, 111.624298f, 106.618408f, -70.539291f, -17.852840f, 74.588875f, 22.676432f, 82.200706f, 75.469940f, 86.911079f, - -21.763515f, 88.468819f, 69.462051f, 28.234957f, 137.905060f, 97.628418f, 100.231453f, 71.048729f, -26.023251f, 18.455929f, 100.078911f, 91.618004f, 129.572266f, 162.295929f, 117.883362f, 73.251602f, - 20.503130f, 123.177406f, 98.707054f, -61.945675f, -133.366302f, -42.585499f, 17.451960f, -85.110466f, -109.559792f, 57.105164f, 49.939404f, 71.494247f, 106.595436f, -5.332850f, -10.096909f, 95.286079f, - -98.944687f, -70.735931f, -91.238235f, 77.213318f, 43.834396f, 103.931374f, 14.455284f, -18.546854f, 60.298130f, 69.783432f, 81.150307f, 75.219597f, 117.014557f, 133.318222f, 45.655605f, 44.907104f, - -17.773401f, 16.685305f, 35.210880f, 58.453514f, -39.141315f, 154.492096f, 160.108368f, 54.245167f, 143.091782f, 18.370985f, -46.498653f, 30.260704f, -32.253002f, 114.865051f, 94.643227f, 42.126125f, - 8.305405f, 73.466248f, 71.895737f, 7.841229f, -21.096027f, -83.805069f, 142.372986f, 32.864574f, -67.817047f, 0.273488f, -20.763456f, -39.558540f, 45.929173f, 245.427109f, 63.606354f, -33.662392f, - -9.818366f, 215.528351f, -34.979908f, -46.600666f, -52.985126f, -36.442551f, -23.177917f, 89.040405f, 115.907364f, 85.734955f, 85.459145f, 53.537971f, 38.606289f, 35.117779f, -9.532898f, -46.531116f, - 70.627678f, 109.927406f, 130.617371f, 127.965912f, 68.237038f, 175.485825f, 141.335297f, 101.838699f, 85.440056f, 100.211769f, -9.782224f, -34.040447f, -36.362839f, -103.141747f, -183.433182f, -281.405945f, - 13.631050f, 103.082298f, 153.487061f, 95.539291f, 80.014320f, 47.319462f, -47.897068f, 144.786728f, 150.994034f, 33.507248f, 38.446999f, -11.836577f, -52.710697f, -5.434279f, -6.585646f, -43.525864f, - -46.841568f, -36.090340f, 91.028366f, 223.865204f, 162.487579f, 161.622040f, 92.281693f, 72.600441f, 62.700375f, 116.998756f, 104.000122f, 56.268940f, 3.313947f, 39.044933f, 12.683829f, -66.421524f, - -53.988426f, -4.046704f, -43.765293f, -58.490433f, -61.409744f, 68.780487f, 180.177185f, 130.743820f, 59.566154f, 41.610359f, -29.455439f, -47.845570f, -53.330845f, -194.252975f, -99.193802f, -28.624321f, - -40.226192f, 19.173496f, -102.776230f, -115.559639f, -2.041245f, 17.804632f, 54.120743f, 35.981876f, 107.003677f, 67.225113f, 6.590813f, 31.162287f, 75.625832f, 94.116089f, 68.273361f, 19.100948f, - -81.027779f, -47.543785f, -81.577866f, 147.072006f, 140.771072f, 98.894592f, 98.462875f, 120.500710f, 69.188560f, -27.267778f, -26.730125f, 19.004963f, 28.982193f, 18.988167f, 15.679336f, 0.912693f, - 60.063290f, 68.444176f, -38.306652f, 274.795166f, 81.706596f, 1.653586f, 59.518078f, 81.843979f, 45.452694f, -98.132660f, 99.485909f, 72.635452f, 59.011009f, 43.986206f, 68.393044f, 153.643753f, - -54.196396f, 105.024605f, -46.588734f, 29.173431f, 46.003738f, 53.556526f, -1.795008f, -94.732422f, 74.060417f, 37.018723f, 57.519180f, 40.312252f, 4.980567f, 1.190214f, 65.139198f, 16.854973f, - 83.697479f, 124.012848f, 136.707169f, 105.191093f, 50.574764f, 7.427887f, 165.615936f, 120.431198f, 35.935490f, 146.632690f, 107.372086f, 101.817780f, 178.695389f, 32.956997f, -43.566265f, -170.662201f, - -45.706387f, 22.193432f, 48.583588f, 7.809529f, 108.639076f, 20.145479f, -8.151466f, 16.626425f, 45.076824f, 100.699867f, 56.172535f, 31.245377f, 41.698193f, 43.700226f, 33.969212f, 13.647820f, - 30.930534f, 96.241432f, 20.796177f, 20.642069f, -30.030577f, 105.024353f, 182.286652f, 51.891121f, -23.670610f, 19.259420f, -25.995207f, 144.711807f, 151.061661f, 39.095882f, 216.597061f, 151.033951f, - 55.972961f, 165.229263f, 42.423416f, -9.421596f, 9.304959f, -24.490530f, 65.337448f, 0.772096f, 34.500309f, 28.041000f, 164.460770f, 148.005341f, -44.788933f, -131.866653f, 118.602074f, 174.952545f, - -36.805115f, 2.389628f, -160.064590f, -74.493019f, -34.030777f, -37.621536f, 21.365028f, 11.060207f, 72.113487f, 151.263977f, 203.227783f, 232.426346f, 240.348846f, 198.561386f, 130.545105f, 79.279305f, - -5.590322f, 28.170464f, 31.049704f, 123.245987f, 143.256638f, 251.395782f, 35.744690f, -42.437420f, -26.080673f, 16.841845f, 18.203182f, 83.183998f, 68.937943f, -68.034676f, 4.653465f, 101.861214f, - 75.410370f, 146.164398f, 101.675415f, 188.854752f, 65.271072f, -0.098294f, 44.761238f, -45.286770f, -80.445572f, 95.316223f, -28.573139f, 1.249410f, 194.675003f, 77.615021f, 9.229208f, 122.592499f, - -53.932175f, 216.979111f, -2.220833f, 63.310429f, 91.275101f, 57.843071f, 70.857147f, 42.466930f, 77.749489f, 57.652969f, 21.516739f, -1.124474f, -30.274309f, -13.056955f, 15.011532f, -30.375456f, - 67.425507f, 84.229256f, 101.499359f, 28.049738f, -35.614960f, 320.076202f, 252.214386f, 152.618103f, 138.893570f, 99.840240f, 27.951473f, 49.207226f, 65.402916f, 7.603233f, -14.404366f, -35.147362f, - -19.139826f, 222.586807f, 160.578033f, 15.308187f, 37.928532f, 2.810670f, 89.260468f, 73.903893f, -14.074634f, 9.220748f, 52.358765f, 29.237804f, 68.572754f, 74.369972f, 135.163269f, 53.634529f, - 27.498774f, 55.932766f, 90.594849f, 106.451241f, 66.339134f, 276.491119f, 112.921783f, 68.186401f, 34.717724f, 217.367447f, 183.300674f, 171.332642f, 233.111526f, 113.635857f, -94.105415f, 101.164040f -}; -#endif const Word16 lsf_q_diff_cb_8b_rf[256 * 16] = /* Q6 */ { -3145, 863, -1389, 4087, 1110, 3193, 290, -3160, 824, 212, -2936, -5827, -10181, -15650, -13373, -3849, @@ -19359,25 +11269,6 @@ const Word16 lsf_q_diff_cb_8b_rf[256 * 16] = /* Q6 */ /*----------------------------------------------------------------------------------* * LSF quantization - Scaling factors *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/* stable ISP vector */ -const float stable_ISP[M] = -{ - 0.9808f, 0.9239f, 0.8315f, 0.7071f, 0.5556f, 0.3827f, 0.1951f, 0.0f, -0.195f, -0.3826f, -0.5555f, -0.7071f, -0.8314f, -0.9238f, -0.9808f, 0.045f -}; -#endif - -/* stable ISF vector */ -const float stable_ISF[M] = -{ - 399.846527f, 799.890991f, 1199.888550f, 1600.019531f, 1999.927002f, 2399.963379f, 2799.979736f, 3200.0f, 3599.812256f, 3999.815918f, 4399.827637f, 4799.980469f, 5199.744629f, 5599.576660f, 6000.153320f, 1554.147827f -}; - -/* stable LSP vector (corresponds to GEWB_Ave[]) */ -const float stable_LSP[M] = -{ - 0.9899f, 0.9667f, 0.8998f, 0.7837f, 0.6581f, 0.5009f, 0.3307f, 0.1643f, -0.0224f, -0.1955f, -0.3658f, -0.5200f, -0.6730f, -0.8040f, -0.9057f,-0.9700f -}; /* Stable ISP vector in Q15 */ const Word16 stable_ISP_fx[16] = { 32139, 30274, 27247, 23170, 18206, 12540, 6393, 0, -6390, -12537, -18203, -23170, -27243, -30271, -32139, 1475 }; @@ -19393,13 +11284,6 @@ const Word16 stable_ISF_fx[M] =/*15Q16*/ * LSF quantization - Mean LSF vectors *----------------------------------------------------------------------------------*/ /* These are not used anywhere */ -/* A 16-by-1 matrix */ -const float means_wb_cleanspeech_lsf16k0_flt[16] = {355.08f, 696.48f, 1260.55f, 1735.55f, 2220.70f, 2676.17f, 3123.44f, 3560.94f, 3989.45f, 4399.61f, 4869.14f, 5372.66f, 5894.53f, 6364.45f, 6883.20f, 7302.73f}; -/* A 16-by-1 matrix */ -const float means_swb_cleanspeech_lsf25k6_flt[16] = {614.44f, 1437.24f, 2259.37f, 2994.68f, 3732.57f, 4420.10f, 5187.93f, 5985.97f, 6790.66f, 7523.16f, 8283.87f, 9010.86f, 9757.03f, 10458.90f, 11209.84f, 11888.64f}; -/* A 16-by-1 matrix */ -const float means_swb_cleanspeech_lsf32k0_flt[16] = {739.65f, 1811.71f, 2794.79f, 3708.53f, 4594.87f, 5528.75f, 6583.99f, 7512.05f, 8455.51f, 9352.67f, 10266.73f, 11133.74f, 12067.91f, 12958.21f, 13940.67f, 14794.15f}; - /* Length 16 vector in Scale = 2.56f */ const Word16 means_wb_cleanspeech_lsf16k0[16] = { 727, 1426, 2582, 3554, 4548, 5481, 6397, 7293, 8170, 9010, 9972, 11003, 12072, 13034, 14097, 14956 }; /* Length 16 vector in Scale = 2.56f */ @@ -19407,95 +11291,8 @@ const Word16 means_swb_cleanspeech_lsf25k6[16] = { 786, 1840, 2892, 3833, 4778, /* Length 16 vector in Scale = 2.56f */ const Word16 means_swb_cleanspeech_lsf32k0[16] = { 757, 1855, 2862, 3798, 4705, 5661, 6742, 7692, 8658, 9577, 10513, 11401, 12358, 13269, 14275, 15149 }; -#ifndef IVAS_FLOAT_FIXED -/* An 16-by-1 matrix */ -const float SVWB2_Ave[16] = -{ - 389.8438f, 581.2500f, 1047.6563f, 1493.3594f, 1985.9375f, 2462.8906f, 2923.8281f, 3392.9688f, 3851.9531f, 4298.4375f, 4819.9219f, 5337.5000f, 5893.7500f, 6378.9063f, 6899.6094f, 7325.7813f -}; -/* An 16-by-1 matrix */ -const float IANB_Ave[16] = -{ - 283.5938f, 559.7656f, 973.8281f, 1331.2500f, 1695.3125f, 2037.1094f, 2383.9844f, 2713.6719f, 3035.9375f, 3334.3750f, 3614.0625f, 3910.9375f, 4261.3281f, 4854.2969f, 5467.5781f, 5934.7656f -}; -/* An 16-by-1 matrix */ -const float IAWB_Ave[16] = -{ - 225.3906f, 527.3438f, 986.7188f, 1380.8594f, 1773.0469f, 2150.0000f, 2537.8906f, 2914.0625f, 3298.8281f, 3670.3125f, 4051.1719f, 4421.4844f, 4807.4219f, 5182.8125f, 5566.0156f, 5940.2344f -}; -/* An 16-by-1 matrix */ -const float IAWB2_Ave[16] = -{ - 285.5469f, 694.1406f, 1247.6563f, 1713.2813f, 2198.8281f, 2658.5938f, 3129.6875f, 3579.6875f, 4034.7656f, 4480.0781f, 4973.0469f, 5483.2031f, 5986.7188f, 6460.1563f, 6953.5156f, 7393.3594f -}; -/* An 16-by-1 matrix */ -const float UVNB_Ave[16] = -{ - 397.6563f, 689.0625f, 1115.6250f, 1465.2344f, 1801.1719f, 2113.2813f, 2434.7656f, 2719.1406f, 3001.9531f, 3243.7500f, 3460.5469f, 3642.5781f, 3897.2656f, 4586.3281f, 5351.1719f, 5888.2813f -}; -/* An 16-by-1 matrix */ -const float UVWB_Ave[16] = -{ - 350.7813f, 742.1875f, 1239.0625f, 1636.7188f, 2023.8281f, 2406.6406f, 2786.7188f, 3150.7813f, 3513.6719f, 3862.5000f, 4212.5000f, 4545.3125f, 4893.3594f, 5232.8125f, 5586.3281f, 5930.8594f -}; -/* An 16-by-1 matrix */ -const float SVNB_Ave[16] = -{ - 347.6563f, 495.3125f, 753.9063f, 1133.5938f, 1538.2813f, 1883.9844f, 2278.1250f, 2595.3125f, 2924.6094f, 3203.9063f, 3478.9063f, 3728.5156f, 4214.0625f, 4908.2031f, 5452.7344f, 5930.8594f -}; -/* An 16-by-1 matrix */ -const float SVWB_Ave[16] = -{ - 325.0000f, 487.5000f, 761.3281f, 1204.2969f, 1613.6719f, 1998.8281f, 2413.6719f, 2760.5469f, 3128.1250f, 3485.1563f, 3857.4219f, 4195.7031f, 4603.5156f, 5023.4375f, 5456.2500f, 5878.1250f -}; -/* An 16-by-1 matrix */ -const float TRNB_Ave[16] = -{ - 358.9844f, 521.4844f, 822.6563f, 1227.3438f, 1598.4375f, 1928.9063f, 2306.6406f, 2605.4688f, 2925.7813f, 3202.7344f, 3464.0625f, 3689.0625f, 4118.7500f, 4837.1094f, 5429.6875f, 5920.3125f -}; -/* An 16-by-1 matrix */ -const float TRWB_Ave[16] = -{ - 325.7813f, 517.9688f, 840.2344f, 1305.0781f, 1681.6406f, 2069.9219f, 2467.9688f, 2811.7188f, 3190.2344f, 3543.3594f, 3906.6406f, 4244.9219f, 4637.1094f, 5043.7500f, 5463.2813f, 5877.3438f -}; -/* An 16-by-1 matrix */ -const float TRWB2_Ave[16] = -{ - 369.1406f, 603.9063f, 1119.5313f, 1621.0938f, 2086.7188f, 2565.6250f, 2992.1875f, 3441.0156f, 3864.8438f, 4271.0938f, 4753.9063f, 5303.5156f, 5851.9531f, 6359.3750f, 6880.4688f, 7335.1563f -}; -/* An 16-by-1 matrix */ -const float AUNB_Ave[16] = -{ - 346.4844f, 563.6719f, 920.3125f, 1247.6563f, 1603.5156f, 1933.2031f, 2281.6406f, 2591.7969f, 2905.0781f, 3195.7031f, 3463.6719f, 3702.3438f, 4056.6406f, 4758.5938f, 5413.2813f, 5910.5469f -}; -/* An 16-by-1 matrix */ -const float AUWB_Ave[16] = -{ - 316.4063f, 573.4375f, 967.1875f, 1334.7656f, 1717.1875f, 2086.7188f, 2465.2344f, 2818.3594f, 3191.7969f, 3546.0938f, 3917.9688f, 4284.7656f, 4692.9688f, 5107.4219f, 5525.7813f, 5911.3281f -}; -/* An 16-by-1 matrix */ -const float AUWB2_Ave[16] = -{ - 364.4531f, 681.6406f, 1187.5000f, 1623.8281f, 2101.1719f, 2535.1563f, 2986.7188f, 3408.2031f, 3848.4375f, 4269.5313f, 4771.0938f, 5330.8594f, 5883.5938f, 6366.0156f, 6889.0625f, 7331.2500f -}; -#endif /* An 16-by-1 matrix */ -const float GEWB_Ave[16] = -{ - 289.8438f, 527.3438f, 919.5313f, 1365.2344f, 1736.7188f, 2131.2500f, 2513.2813f, 2863.6719f, 3245.7031f, 3600.7813f, 3962.8906f, 4314.0625f, 4703.9063f, 5102.7344f, 5508.2031f, 5899.6094f -}; -/* An 16-by-1 matrix */ -const float GEWB2_Ave[16] = -{ - 355.0781f, 696.4844f, 1260.5469f, 1735.5469f, 2220.7031f, 2676.1719f, 3123.4375f, 3560.9375f, 3989.4531f, 4399.6094f, 4869.1406f, 5372.6563f, 5894.5313f, 6364.4531f, 6883.2031f, 7302.7344f -}; -/* An 16-by-1 matrix */ -const float GENB_Ave[16] = -{ - 326.5625f, 525.0000f, 881.6406f, 1274.6094f, 1630.0781f, 1965.2344f, 2324.2188f, 2619.9219f, 2935.1563f, 3216.4063f, 3469.1406f, 3687.1094f, 4059.7656f, 4775.7813f, 5412.1094f, 5912.1094f -}; - const Word16 SVWB2_Ave_fx[16] = { 998, 1488, 2682, 3823, 5084, 6305, 7485, 8686, 9861, 11004, 12339, 13664, 15088, 16330, 17663, 18754 }; // Q2.56 /* An 16-by-1 matrix */ const Word16 IANB_Ave_fx[16] = @@ -19542,53 +11339,6 @@ const Word16 AUWB2_Ave_fx[16] = { 933, 1745, 3040, 4157, 5379, 6490, 7646, 8725, -#ifndef IVAS_FLOAT_FIXED -/* An 16-by-1 matrix */ -const float Predictor0[16] = -{ - 0.83499f, 0.83499f, 0.83499f, 0.82999f, 0.82999f, 0.82999f, 0.80499f, 0.80750f, 0.79999f, 0.79300f, 0.80750f, 0.80750f, 0.79300f, 0.78500f, 0.78500f, 0.75500f -}; -/* An 16-by-1 matrix */ -const float Predictor1[16] = -{ - 0.82501f, 0.82501f, 0.82501f, 0.81299f, 0.80301f, 0.81299f, 0.81299f, 0.79749f, 0.79999f, 0.79999f, 0.80750f, 0.82001f, 0.82001f, 0.81500f, 0.82501f, 0.81299f -}; -/* An 16-by-1 matrix */ -const float Predictor2[16] = -{ - 0.73999f, 0.72000f, 0.74799f, 0.73999f, 0.74799f, 0.73300f, 0.73300f, 0.72501f, 0.72501f, 0.73300f, 0.73999f, 0.73999f, 0.72000f, 0.70499f, 0.72000f, 0.70499f -}; -/* An 16-by-1 matrix */ -const float Predictor3[16] = -{ - 0.73999f, 0.73999f, 0.75500f, 0.73999f, 0.74799f, 0.72501f, 0.71500f, 0.70499f, 0.69000f, 0.70499f, 0.72000f, 0.75500f, 0.76300f, 0.75500f, 0.76300f, 0.75800f -}; -/* An 16-by-1 matrix */ -const float Predictor4[16] = -{ - 0.57999f, 0.56000f, 0.58801f, 0.57999f, 0.58801f, 0.57300f, 0.57300f, 0.56500f, 0.56500f, 0.57300f, 0.57999f, 0.57999f, 0.56000f, 0.54501f, 0.54001f, 0.52499f -}; -/* An 16-by-1 matrix */ -const float Predictor5[16] = -{ - 0.72751f, 0.72000f, 0.72000f, 0.72751f, 0.72751f, 0.72000f, 0.72000f, 0.72000f, 0.72751f, 0.73499f, 0.74301f, 0.75000f, 0.75000f, 0.71301f, 0.71301f, 0.71301f -}; -/* An 16-by-1 matrix */ -const float Predictor6[16] = -{ - 0.73499f, 0.72751f, 0.73499f, 0.72000f, 0.72000f, 0.70001f, 0.68301f, 0.66501f, 0.64499f, 0.67001f, 0.68301f, 0.74301f, 0.75000f, 0.72000f, 0.75000f, 0.74301f -}; -/* An 16-by-1 matrix */ -const float Predictor7[16] = -{ - 0.74301f, 0.73499f, 0.74301f, 0.74301f, 0.74301f, 0.73499f, 0.74301f, 0.75000f, 0.75000f, 0.75500f, 0.76501f, 0.74301f, 0.73499f, 0.72751f, 0.71301f, 0.75500f -}; -/* An 16-by-1 matrix */ -const float Predictor8[16] = -{ - 0.75500f, 0.75500f, 0.75500f, 0.75000f, 0.75000f, 0.75000f, 0.73499f, 0.72751f, 0.72000f, 0.71301f, 0.72751f, 0.72751f, 0.71301f, 0.70499f, 0.70499f, 0.67499f -}; -#endif /* Length 16 vector in Q = 15 */ const Word16 Predictor0_fx[16] = { 27361, 27361, 27361, 27197, 27197, 27197, 26378, 26460, 26214, 25985, 26460, 26460, 25985, 25723, 25723, 24740 }; @@ -19609,451 +11359,6 @@ const Word16 Predictor7_fx[16] = { 24347, 24084, 24347, 24347, 24347, 24084, 243 /* Length 16 vector in Q = 15 */ const Word16 Predictor8_fx[16] = { 24740, 24740, 24740, 24576, 24576, 24576, 24084, 23839, 23593, 23364, 23839, 23839, 23364, 23101, 23101, 22118 }; -/* An 16-by-16 matrix */ -const float UVD_MA1[256] = -{ - -117.5781f, -196.4844f, -166.4063f, -73.0469f, -51.1719f, -25.0000f, -17.5781f, -7.8125f, 4.2969f, 21.8750f, 24.6094f, 35.1563f, 42.9688f, 68.3594f, 37.8906f, 12.8906f, - 62.8906f, 137.8906f, 185.1563f, 196.0938f, 276.9531f, 305.4688f, 310.1563f, 298.8281f, 246.8750f, 207.8125f, 158.5938f, 111.3281f, 89.8438f, 56.6406f, 37.8906f, 20.3125f, - -14.4531f, -1.9531f, 80.0781f, 126.1719f, 160.9375f, 136.3281f, 86.3281f, 35.5469f, -2.3438f, -23.0469f, -33.5938f, -43.7500f, -12.5000f, 81.6406f, 28.5156f, 8.9844f, - -106.6406f, -240.2344f, -320.3125f, -310.1563f, -325.7813f, -327.3438f, -321.0938f, -319.9219f, -293.3594f, -273.8281f, -250.3906f, -219.5313f, -152.7344f, -105.8594f, -71.8750f, -24.6094f, - 102.3438f, 65.6250f, 40.6250f, -3.5156f, -30.4688f, -63.6719f, -55.0781f, -77.7344f, -74.6094f, -97.2656f, -95.7031f, -123.8281f, -65.6250f, 208.9844f, 42.5781f, 12.8906f, - -160.1563f, -263.6719f, -266.0156f, -238.6719f, -195.3125f, -154.6875f, -106.6406f, -71.4844f, -18.3594f, 23.4375f, 75.7813f, 139.4531f, 407.8125f, 421.8750f, 130.8594f, 54.6875f, - 60.1563f, 72.2656f, 100.0000f, 92.9688f, 79.2969f, 92.9688f, 109.3750f, 101.5625f, 117.1875f, 104.2969f, 100.7813f, 76.5625f, 47.2656f, -241.4063f, -102.7344f, -23.4375f, - 134.7656f, 275.3906f, 335.5469f, 307.0313f, 290.2344f, 228.1250f, 166.0156f, 104.2969f, 65.6250f, 41.0156f, 28.9063f, 10.9375f, 46.4844f, 104.2969f, 41.0156f, 15.2344f, - -15.2344f, -64.8438f, -89.8438f, -76.5625f, -99.6094f, -107.8125f, -124.2188f, -136.3281f, -151.1719f, -171.0938f, -210.5469f, -239.4531f, -293.7500f, -373.4375f, -528.5156f, -635.9375f, - 194.5313f, 187.1094f, 161.7188f, 90.2344f, 38.2813f, 1.9531f, -7.0313f, -16.0156f, -23.4375f, -30.4688f, -35.5469f, -37.5000f, -31.6406f, 28.1250f, 11.7188f, -3.1250f, - 16.0156f, 46.8750f, 25.3906f, 55.0781f, 45.7031f, 72.6563f, 97.2656f, 116.7969f, 163.2813f, 203.1250f, 221.0938f, 241.4063f, 270.3125f, 226.1719f, 125.3906f, 64.8438f, - -92.1875f, -108.5938f, -26.9531f, 5.0781f, 44.1406f, 141.4063f, 173.8281f, 210.5469f, 196.4844f, 151.1719f, 105.0781f, 67.1875f, 46.8750f, -8.2031f, 0.3906f, 1.5625f, - -40.2344f, -17.9688f, -53.5156f, -51.5625f, -42.1875f, -37.8906f, -26.1719f, -14.4531f, -3.1250f, 16.0156f, 32.0313f, 41.7969f, 16.7969f, -236.3281f, -73.8281f, -21.8750f, - -85.9375f, -123.0469f, -188.2813f, -201.5625f, -191.0156f, -173.8281f, -162.1094f, -141.4063f, -118.7500f, -80.0781f, -53.1250f, -26.5625f, -2.7344f, 51.1719f, 27.3438f, 9.7656f, - -3.9063f, -47.2656f, -82.0313f, -92.5781f, -87.5000f, -117.9688f, -96.0938f, -121.0938f, -105.8594f, -133.9844f, -111.3281f, -142.1875f, 10.9375f, 274.6094f, 52.7344f, 21.0938f, - 46.0938f, 19.5313f, -26.1719f, -64.8438f, -136.3281f, -162.5000f, -172.6563f, -174.2188f, -171.4844f, -164.0625f, -149.2188f, -124.6094f, -95.7031f, -81.6406f, -54.6875f, -32.0313f -}; -/* An 16-by-16 matrix */ -const float UVD_MA2[256] = -{ - -29.2969f, -25.0000f, -58.5938f, -90.2344f, -106.2500f, -108.5938f, -96.8750f, -75.7813f, -60.9375f, -41.7969f, -28.9063f, -16.7969f, -35.9375f, -8.2031f, 3.5156f, 1.9531f, - 153.5156f, 107.4219f, -4.6875f, -60.9375f, -81.2500f, -83.9844f, -63.2813f, -51.5625f, -44.9219f, -42.5781f, -36.7188f, -33.2031f, -40.6250f, -3.9063f, 1.9531f, -0.3906f, - -116.0156f, -151.9531f, -38.6719f, -30.4688f, -25.7813f, -7.4219f, -4.6875f, 3.1250f, 0.0000f, -1.1719f, -5.8594f, -8.5938f, -44.1406f, -32.0313f, -6.2500f, 0.7813f, - 23.0469f, -4.2969f, 1.9531f, -12.8906f, -4.2969f, -23.8281f, -27.3438f, -54.2969f, -55.8594f, -93.3594f, -80.8594f, -87.1094f, 277.7344f, 273.8281f, 55.8594f, 26.5625f, - -76.1719f, 158.5938f, 86.7188f, 19.1406f, -2.3438f, -8.9844f, -2.3438f, 3.5156f, 0.0000f, 5.0781f, 10.1563f, 19.1406f, -17.1875f, -50.3906f, -7.0313f, -2.7344f, - 8.9844f, -11.7188f, -55.0781f, 30.8594f, -7.0313f, -29.6875f, -21.4844f, -5.4688f, 17.1875f, 38.2813f, 34.3750f, 33.5938f, -37.5000f, -137.1094f, -43.7500f, -15.2344f, - 148.4375f, 128.5156f, 91.7969f, 67.5781f, 55.0781f, 28.1250f, 9.7656f, -1.5625f, -2.3438f, -7.4219f, -8.2031f, -12.8906f, -21.4844f, -8.9844f, 1.1719f, -0.3906f, - -31.6406f, -82.0313f, -110.9375f, 61.7188f, 154.6875f, 113.2813f, 63.6719f, 23.0469f, -9.7656f, -8.5938f, -3.9063f, -2.3438f, -17.9688f, -12.5000f, 3.5156f, 1.9531f, - 3.5156f, 13.2813f, -5.8594f, 1.9531f, 8.9844f, -18.7500f, -49.6094f, -94.9219f, -135.5469f, -164.4531f, -177.7344f, -185.5469f, -193.3594f, -175.3906f, -114.8438f, -63.6719f, - -5.0781f, -66.7969f, -162.5000f, -161.7188f, -95.7031f, -9.7656f, 26.9531f, 39.8438f, 40.6250f, 32.8125f, 19.5313f, 12.8906f, -14.8438f, -1.5625f, 0.0000f, 1.9531f, - 19.5313f, 46.0938f, 26.5625f, 14.4531f, 57.4219f, 124.6094f, 144.9219f, 138.6719f, 113.6719f, 79.6875f, 50.7813f, 31.6406f, 8.2031f, 17.9688f, 14.0625f, 8.5938f, - -37.1094f, -42.1875f, 121.4844f, 83.5938f, -10.9375f, -59.7656f, -88.2813f, -75.0000f, -50.3906f, -26.9531f, -16.4063f, -4.2969f, -18.7500f, -6.6406f, 5.0781f, 0.7813f, - -72.2656f, -87.1094f, -40.6250f, 10.1563f, 20.7031f, 34.7656f, 51.5625f, 70.7031f, 100.7813f, 135.1563f, 155.0781f, 173.8281f, 153.1250f, 94.1406f, 48.8281f, 22.6563f, - 32.4219f, 12.8906f, -3.5156f, -31.6406f, 15.6250f, 38.6719f, 21.8750f, 3.1250f, -19.9219f, -33.2031f, -41.4063f, -48.4375f, -76.5625f, 1.9531f, 1.9531f, 0.0000f, - 55.8594f, 57.8125f, 7.4219f, -47.2656f, -96.4844f, -82.4219f, -26.1719f, 32.4219f, 77.3438f, 104.6875f, 113.2813f, 117.1875f, 93.7500f, 64.0625f, 33.5938f, 14.4531f, - -77.3438f, -53.1250f, 144.5313f, 145.3125f, 117.1875f, 93.7500f, 60.9375f, 44.1406f, 30.8594f, 23.4375f, 17.1875f, 11.3281f, -13.6719f, -14.8438f, 2.3438f, 2.7344f -}; -/* An 16-by-16 matrix */ -const float UVWB_MA3[256] = -{ - -10.1563f, 8.9844f, 2.7344f, -2.3438f, -0.3906f, 1.1719f, 15.6250f, 13.6719f, -16.7969f, -9.3750f, 21.8750f, 61.3281f, 103.5156f, 165.2344f, 149.2188f, 101.5625f, - 23.8281f, -117.1875f, -50.7813f, -39.4531f, -3.1250f, 41.4063f, 42.1875f, 44.5313f, 34.3750f, 16.7969f, -0.7813f, -12.8906f, -21.8750f, 26.1719f, 11.3281f, 5.0781f, - -12.1094f, 18.3594f, 17.5781f, -47.2656f, 17.9688f, 8.5938f, 43.3594f, 91.0156f, -100.0000f, -98.4375f, -48.0469f, -27.7344f, -12.1094f, 21.0938f, 21.8750f, 12.8906f, - 7.8125f, -60.1563f, 26.1719f, 77.3438f, -90.6250f, -65.2344f, -33.5938f, -4.6875f, 30.8594f, 45.3125f, 34.3750f, 30.4688f, 17.1875f, 29.2969f, 10.5469f, -2.7344f, - -5.4688f, 59.7656f, -64.8438f, 8.2031f, 41.7969f, 25.0000f, 91.0156f, -87.1094f, -57.4219f, -10.5469f, -0.3906f, 16.7969f, 23.8281f, 27.3438f, 19.5313f, 7.0313f, - 1.1719f, -44.9219f, -3.1250f, 55.8594f, 75.0000f, 75.3906f, -48.4375f, -76.1719f, -77.3438f, -63.2813f, -29.2969f, 5.4688f, 17.5781f, 32.4219f, 30.8594f, 19.1406f, - 4.6875f, -22.2656f, 9.7656f, -11.3281f, -4.2969f, 4.6875f, -2.7344f, -5.0781f, -4.6875f, 12.1094f, 28.9063f, 38.6719f, -3.9063f, -164.4531f, -81.6406f, -43.3594f, - -9.7656f, 44.9219f, 46.4844f, -7.4219f, -45.7031f, -64.0625f, -79.2969f, -92.5781f, -80.4688f, -66.0156f, -42.9688f, -16.0156f, -4.2969f, 5.8594f, 0.3906f, -2.7344f, - -5.0781f, 66.4063f, -55.8594f, -50.0000f, -87.5000f, -36.7188f, 0.3906f, 37.5000f, 56.2500f, 39.8438f, 11.3281f, 0.7813f, -14.4531f, 17.9688f, 2.7344f, -4.6875f, - -4.2969f, 3.9063f, -13.2813f, 14.8438f, 9.3750f, 33.5938f, 58.2031f, 82.4219f, 93.7500f, 108.9844f, 96.4844f, 85.1563f, 60.1563f, 62.8906f, 28.9063f, 5.8594f, - -9.3750f, 25.0000f, 42.9688f, 48.8281f, -9.3750f, 48.0469f, 62.8906f, 64.8438f, 69.1406f, 7.0313f, -43.7500f, -45.3125f, -55.0781f, -45.7031f, -44.1406f, -35.5469f, - -1.5625f, -7.8125f, -6.6406f, -4.2969f, -10.5469f, 5.0781f, -5.8594f, -15.6250f, -22.6563f, -61.3281f, -98.4375f, -110.5469f, -112.5000f, -72.6563f, -63.2813f, -43.7500f, - -7.8125f, 0.7813f, 12.5000f, 17.1875f, -12.1094f, -19.1406f, 3.1250f, 5.0781f, 21.4844f, -23.0469f, -63.2813f, -82.8125f, -23.8281f, 150.0000f, 44.9219f, 14.0625f, - -1.5625f, 16.4063f, -29.2969f, 35.9375f, 104.6875f, -79.2969f, -48.8281f, 3.9063f, 20.3125f, 47.2656f, 28.1250f, -16.7969f, -42.5781f, -18.3594f, -25.7813f, -29.6875f, - -15.2344f, 29.6875f, 104.6875f, -99.2188f, -10.9375f, 33.9844f, 0.7813f, 35.5469f, 33.2031f, 26.5625f, 34.7656f, 37.5000f, 16.4063f, 35.1563f, 15.2344f, 1.5625f, - 0.7813f, 0.7813f, -21.8750f, 2.7344f, 26.1719f, -12.1094f, -85.5469f, -75.0000f, -9.3750f, 57.0313f, 97.2656f, 105.0781f, 81.6406f, 77.7344f, 41.4063f, 12.1094f -}; -/* An 16-by-16 matrix */ -const float SVNB_SN1[256] = -{ - 52.7344f, 42.5781f, 52.7344f, -59.7656f, -214.4531f, 83.5938f, 162.5000f, 76.1719f, 113.6719f, 96.4844f, 39.0625f, -49.6094f, -226.1719f, -62.5000f, -25.7813f, -12.5000f, - -41.7969f, -58.5938f, -107.0313f, -58.2031f, 250.7813f, 232.0313f, 132.0313f, 71.4844f, 31.6406f, -12.1094f, -5.4688f, -58.5938f, -151.1719f, -15.6250f, -17.1875f, -7.0313f, - 28.5156f, 16.4063f, 66.7969f, 132.4219f, 83.2031f, 16.4063f, -53.5156f, -108.2031f, -148.0469f, -172.2656f, -171.8750f, -186.7188f, 105.4688f, 49.2188f, -1.5625f, 2.3438f, - -119.9219f, -187.1094f, -248.4375f, -232.8125f, -39.0625f, 32.4219f, 65.2344f, 78.1250f, 101.5625f, 146.8750f, 204.2969f, 410.5469f, 446.0938f, 191.4063f, 97.2656f, 42.1875f, - -57.8125f, -83.9844f, -126.5625f, -222.6563f, -358.2031f, -267.5781f, -81.2500f, 49.6094f, 111.3281f, 137.8906f, 172.2656f, 367.1875f, 429.6875f, 178.9063f, 89.4531f, 39.0625f, - 166.7969f, 168.7500f, 214.0625f, 166.4063f, 51.9531f, 5.0781f, -3.5156f, -55.0781f, -42.1875f, -56.2500f, -76.1719f, -163.6719f, -286.3281f, -56.2500f, -42.5781f, -17.5781f, - -44.9219f, -85.9375f, -75.7813f, 258.2031f, 350.0000f, 268.7500f, 191.0156f, 137.1094f, 82.4219f, 100.7813f, 57.4219f, 11.7188f, -291.4063f, -306.2500f, -60.9375f, -37.1094f, - 6.2500f, -18.7500f, -34.3750f, -167.9688f, -311.7188f, 14.0625f, 79.6875f, 26.5625f, 67.9688f, 63.2813f, 7.8125f, 23.8281f, 244.9219f, 103.9063f, 39.8438f, 18.7500f, - -98.4375f, -144.5313f, -246.0938f, -239.8438f, 265.6250f, 400.0000f, 339.4531f, 233.5938f, 163.6719f, 101.1719f, 75.3906f, 10.5469f, 35.1563f, 60.9375f, 20.7031f, 10.5469f, - -18.7500f, 12.8906f, 10.1563f, -88.6719f, -217.1875f, -299.2188f, -152.7344f, 90.2344f, 161.3281f, 110.1563f, 88.2813f, 34.7656f, 75.7813f, 73.0469f, 17.1875f, 11.7188f, - -79.6875f, -113.6719f, -134.7656f, -51.1719f, 48.8281f, 28.1250f, 6.2500f, -11.3281f, -41.4063f, -19.1406f, -10.5469f, 71.4844f, 278.9063f, 108.2031f, 44.5313f, 19.1406f, - -4.2969f, 80.0781f, 111.3281f, 26.9531f, -22.6563f, -80.8594f, -117.5781f, -62.5000f, -11.7188f, -0.7813f, 4.6875f, -38.6719f, -226.5625f, -69.5313f, -31.2500f, -16.0156f, - 46.8750f, 73.8281f, 109.7656f, 166.7969f, 91.4063f, 53.9063f, 48.4375f, 49.2188f, 19.5313f, 80.0781f, 47.2656f, 29.6875f, -311.3281f, -470.3125f, -91.7969f, -51.9531f, - 24.6094f, -7.0313f, 57.0313f, 260.1563f, 187.5000f, 92.1875f, 52.3438f, -15.2344f, -37.8906f, -50.7813f, -68.3594f, -147.6563f, -291.4063f, -62.1094f, -41.4063f, -17.9688f, - 150.7813f, 155.8594f, 162.1094f, 61.3281f, -68.3594f, -110.1563f, -123.0469f, -124.2188f, -86.7188f, -87.8906f, -104.2969f, -133.5938f, 123.8281f, 59.3750f, 5.8594f, 5.4688f, - 15.2344f, 21.8750f, 27.7344f, -37.1094f, -151.1719f, -198.8281f, -232.4219f, -182.0313f, -154.2969f, -72.6563f, -9.3750f, 164.4531f, 317.9688f, 114.0625f, 49.6094f, 20.3125f -}; -/* An 16-by-16 matrix */ -const float SVNB_SN2[256] = -{ - -6.2500f, 43.3594f, 43.3594f, -34.7656f, -44.9219f, -157.8125f, -200.7813f, 63.2813f, 108.2031f, 16.0156f, -36.7188f, -34.7656f, 5.8594f, 12.1094f, 0.7813f, 0.7813f, - -32.0313f, -38.6719f, -9.7656f, -112.1094f, -181.2500f, 79.6875f, 7.0313f, -48.0469f, -14.8438f, 21.8750f, 42.5781f, 77.3438f, 62.5000f, 37.5000f, 16.0156f, 7.4219f, - -37.1094f, -24.2188f, -94.5313f, -162.1094f, 124.2188f, 46.0938f, -47.2656f, 17.1875f, 28.9063f, 15.6250f, 33.2031f, 44.5313f, 20.3125f, 14.0625f, 8.2031f, 3.1250f, - 11.3281f, 15.6250f, 16.7969f, 8.9844f, -78.9063f, -58.2031f, 112.5000f, 58.2031f, -7.8125f, -42.5781f, -72.6563f, -107.4219f, -49.6094f, 7.0313f, -9.7656f, -2.3438f, - 7.8125f, 14.0625f, -37.8906f, -89.0625f, 220.7031f, 198.4375f, 52.3438f, 16.4063f, -27.3438f, -92.5781f, -100.7813f, -101.1719f, -48.0469f, -3.5156f, -11.3281f, -3.9063f, - -28.1250f, -66.0156f, 192.1875f, 180.8594f, 75.3906f, 79.6875f, -5.0781f, -29.2969f, -32.0313f, -48.8281f, -70.7031f, -89.8438f, -70.7031f, -3.9063f, -15.6250f, -4.6875f, - -42.1875f, -86.3281f, -89.4531f, 253.1250f, 224.6094f, 112.5000f, 57.0313f, 0.3906f, -5.4688f, -1.5625f, -19.9219f, -46.8750f, -31.6406f, -5.4688f, -6.6406f, -1.9531f, - -77.7344f, -103.1250f, -120.7031f, 81.6406f, 3.1250f, -50.0000f, 9.3750f, -18.3594f, 33.9844f, 100.3906f, 93.7500f, 72.2656f, 36.3281f, 27.3438f, 13.2813f, 6.2500f, - 9.7656f, 32.0313f, -23.4375f, -60.5469f, -158.9844f, -240.2344f, 11.3281f, 39.0625f, -44.1406f, 12.5000f, 80.8594f, 100.7813f, 79.2969f, 43.3594f, 19.1406f, 8.2031f, - 14.4531f, 49.6094f, 37.1094f, 1.5625f, 43.7500f, -17.5781f, -84.7656f, -61.7188f, -108.2031f, -158.9844f, -118.7500f, -59.3750f, 28.1250f, 20.3125f, -2.3438f, 0.0000f, - -11.7188f, -31.6406f, -45.3125f, -162.5000f, -85.5469f, 264.4531f, 210.1563f, 128.1250f, 83.2031f, 23.4375f, -23.4375f, -42.5781f, -30.4688f, 0.0000f, -1.9531f, 0.0000f, - 3.5156f, -5.8594f, 10.1563f, 29.2969f, -68.3594f, -131.2500f, -262.8906f, -228.9063f, 92.9688f, 121.0938f, 77.3438f, 73.8281f, 82.8125f, 49.2188f, 18.7500f, 9.3750f, - -7.0313f, -1.5625f, -31.2500f, 39.8438f, 50.7813f, -45.3125f, -104.6875f, -183.9844f, -221.4844f, -40.6250f, 80.0781f, 86.3281f, 55.8594f, 31.6406f, 11.3281f, 4.6875f, - 1.5625f, 15.2344f, 25.3906f, 44.9219f, 34.3750f, 73.8281f, 53.1250f, 48.4375f, 19.1406f, 41.4063f, 14.4531f, 34.7656f, -146.4844f, -244.5313f, -44.5313f, -28.5156f, - 210.9375f, 205.0781f, 184.3750f, 86.3281f, 46.0938f, -12.1094f, 5.8594f, 2.7344f, -27.7344f, -54.2969f, -42.1875f, -36.3281f, -5.0781f, -1.5625f, -5.0781f, -3.1250f, - -17.1875f, -17.1875f, -55.8594f, -106.2500f, -205.0781f, -142.5781f, 187.1094f, 196.0938f, 121.8750f, 87.8906f, 62.8906f, 28.1250f, 10.9375f, 16.4063f, 10.1563f, 4.6875f -}; -/* An 16-by-16 matrix */ -const float SVWB_SN1[256] = -{ - -27.7344f, -23.8281f, -66.4063f, -219.9219f, -375.7813f, -330.0781f, 72.6563f, 164.4531f, 110.1563f, 134.3750f, 101.5625f, 60.5469f, 72.6563f, 20.3125f, -7.0313f, -4.2969f, - -41.7969f, -54.2969f, -112.8906f, -105.4688f, 307.8125f, 240.2344f, 97.2656f, 67.9688f, -0.3906f, -9.3750f, 62.1094f, 41.4063f, -17.9688f, -71.4844f, -73.0469f, -41.7969f, - -56.2500f, -86.3281f, -83.9844f, 140.2344f, 75.0000f, -13.2813f, -72.6563f, -127.3438f, -100.0000f, -48.4375f, -19.1406f, 32.8125f, 83.5938f, 92.5781f, 72.6563f, 35.5469f, - 85.1563f, 129.6875f, 130.8594f, 16.0156f, -74.6094f, -153.9063f, -239.8438f, -212.1094f, -162.1094f, -148.0469f, -111.3281f, -59.7656f, -33.5938f, -39.4531f, -26.9531f, -5.0781f, - 229.2969f, 240.6250f, 285.9375f, 163.6719f, 105.4688f, 98.4375f, 39.8438f, 15.6250f, 20.7031f, -13.6719f, -22.2656f, -13.2813f, 7.4219f, -5.4688f, -5.8594f, -46.8750f, - -29.6875f, -86.7188f, -49.6094f, 475.0000f, 464.0625f, 318.3594f, 207.8125f, 125.0000f, 121.4844f, 89.0625f, 13.2813f, -23.0469f, -37.5000f, -33.5938f, -17.1875f, -14.8438f, - -68.7500f, -110.1563f, -198.0469f, -177.7344f, 438.2813f, 530.8594f, 376.9531f, 289.8438f, 238.2813f, 175.0000f, 185.1563f, 160.9375f, 72.2656f, 49.6094f, 49.6094f, -9.3750f, - -60.9375f, -87.8906f, 6.2500f, 178.9063f, 165.2344f, 171.0938f, 153.5156f, 156.2500f, 205.0781f, 257.0313f, 266.4063f, 266.0156f, 239.0625f, 171.0938f, 104.2969f, 26.5625f, - 34.7656f, 46.8750f, 67.1875f, 138.6719f, 76.1719f, -3.1250f, -8.5938f, -26.1719f, -42.9688f, -15.6250f, -36.3281f, -63.6719f, -149.2188f, -267.5781f, -361.7188f, -182.8125f, - -88.6719f, -141.4063f, -176.5625f, -225.3906f, -83.2031f, -8.5938f, 21.8750f, 32.0313f, 51.5625f, 84.3750f, 135.9375f, 164.0625f, 139.8438f, 116.7969f, 100.3906f, 55.8594f, - 14.8438f, -30.0781f, 45.7031f, 334.3750f, 189.8438f, 110.1563f, 6.2500f, -60.1563f, -50.7813f, -123.0469f, -241.4063f, -305.8594f, -348.4375f, -212.8906f, -34.3750f, 23.0469f, - 85.1563f, 126.5625f, 90.6250f, -63.2813f, -227.7344f, -215.6250f, 49.2188f, 24.2188f, -15.6250f, -10.5469f, -88.6719f, -135.9375f, -130.4688f, -126.5625f, -92.9688f, -25.3906f, - 32.0313f, 6.2500f, -7.8125f, -210.5469f, -307.4219f, 235.9375f, 132.8125f, 101.1719f, 101.5625f, -20.7031f, -98.0469f, -82.4219f, -4.6875f, 49.6094f, 66.7969f, 38.6719f, - -9.3750f, 65.6250f, 78.9063f, -55.4688f, -87.1094f, -175.0000f, -110.1563f, 47.6563f, 57.8125f, 60.5469f, 141.7969f, 148.4375f, 135.5469f, 102.7344f, 48.4375f, -26.5625f, - 64.4531f, 58.5938f, 88.2813f, 37.1094f, -67.1875f, -100.3906f, -161.3281f, -199.2188f, -208.2031f, -286.7188f, -396.0938f, -471.0938f, -325.7813f, -63.2813f, 2.3438f, 37.8906f, - -30.4688f, -28.1250f, -31.6406f, -125.7813f, -236.3281f, -285.5469f, -289.0625f, -220.3125f, -139.0625f, -85.5469f, -58.9844f, 4.2969f, 78.1250f, 92.5781f, 82.8125f, 66.4063f -}; -/* An 16-by-16 matrix */ -const float SVWB_SN2[256] = -{ - -49.2188f, -59.3750f, -133.5938f, -165.2344f, 121.4844f, 37.1094f, 1.1719f, 11.3281f, -36.3281f, 1.5625f, 88.6719f, 75.3906f, 55.4688f, 46.8750f, 36.3281f, 24.2188f, - 74.2188f, 100.7813f, 149.2188f, 121.0938f, 64.8438f, -4.2969f, -30.0781f, -26.1719f, -84.7656f, -127.7344f, -128.9063f, -147.6563f, -180.0781f, -120.7031f, -55.4688f, -18.3594f, - -6.2500f, -22.6563f, -30.0781f, -132.4219f, -208.5938f, 183.2031f, 155.8594f, 92.5781f, 113.2813f, 52.7344f, 13.2813f, 33.5938f, -5.4688f, -30.0781f, -11.7188f, 3.9063f, - 5.0781f, -1.5625f, 251.5625f, 223.4375f, 160.9375f, 171.0938f, 106.2500f, 111.7188f, 91.4063f, 69.1406f, 46.0938f, 57.4219f, 51.1719f, 53.9063f, 49.6094f, 14.8438f, - -28.5156f, -34.3750f, -43.7500f, 16.4063f, 14.0625f, 55.0781f, 165.6250f, 150.7813f, 196.8750f, 225.0000f, 204.2969f, 188.6719f, 168.3594f, 128.1250f, 91.0156f, 23.0469f, - -46.8750f, -66.0156f, -105.4688f, -173.8281f, -231.6406f, -104.6875f, -51.9531f, -53.9063f, -4.2969f, 21.8750f, 51.9531f, 82.0313f, 64.8438f, 45.3125f, 47.6563f, 53.5156f, - 110.1563f, 144.5313f, 99.6094f, 29.6875f, -34.7656f, -74.6094f, 54.2969f, 31.2500f, 4.6875f, 68.7500f, 72.2656f, 56.6406f, 95.3125f, 98.8281f, 67.5781f, -7.0313f, - 5.0781f, 5.4688f, -16.7969f, 28.5156f, -23.0469f, -105.4688f, -175.0000f, -242.9688f, -23.0469f, 146.0938f, 137.8906f, 114.4531f, 73.8281f, -21.0938f, -77.7344f, -47.6563f, - -29.2969f, -41.4063f, -109.7656f, -121.8750f, 228.5156f, 158.2031f, 72.2656f, 24.2188f, -68.7500f, -124.6094f, -128.9063f, -156.2500f, -163.2813f, -63.2813f, -1.5625f, 30.4688f, - -12.1094f, -4.2969f, -30.8594f, -32.4219f, -34.3750f, -107.0313f, -133.9844f, -168.3594f, -243.3594f, -202.3438f, -57.8125f, -4.2969f, -6.6406f, -8.2031f, 8.2031f, 35.1563f, - -39.4531f, -67.5781f, -93.7500f, 173.4375f, 118.3594f, 47.2656f, 40.6250f, -14.4531f, 72.2656f, 52.3438f, -17.5781f, -53.1250f, -64.0625f, 1.5625f, 59.7656f, 44.5313f, - -3.1250f, 15.6250f, 41.7969f, -29.6875f, -99.2188f, -215.2344f, -262.8906f, 112.5000f, 124.2188f, 9.7656f, 5.4688f, -24.2188f, -37.8906f, -0.7813f, 5.0781f, -7.8125f, - 33.9844f, 49.6094f, 31.2500f, 84.3750f, 131.2500f, 57.4219f, 73.4375f, 64.4531f, -3.9063f, 48.8281f, 75.3906f, 33.9844f, -49.2188f, -154.6875f, -287.5000f, -261.3281f, - 0.7813f, 1.5625f, 37.5000f, 72.2656f, 2.3438f, 24.2188f, -14.4531f, -53.1250f, -69.1406f, -97.6563f, -88.6719f, 78.5156f, 290.6250f, 254.2969f, 137.1094f, 28.9063f, - -6.2500f, -15.2344f, -32.0313f, -69.1406f, -148.4375f, -71.4844f, -9.3750f, -42.5781f, -75.7813f, -158.9844f, -250.3906f, -240.2344f, -61.3281f, 57.0313f, 74.6094f, 65.2344f, - -8.2031f, -4.6875f, -15.2344f, -24.6094f, -62.1094f, -50.0000f, 7.8125f, 2.3438f, 6.2500f, 15.2344f, -23.4375f, -94.9219f, -232.0313f, -286.3281f, -142.1875f, 17.9688f -}; -/* An 16-by-32 matrix */ -const float GEWB_MA1[512] = -{ - 105.0781f, 104.6875f, 162.5000f, 112.1094f, 61.3281f, 2.7344f, -51.5625f, -107.8125f, -188.2813f, -273.8281f, -400.3906f, -527.3438f, -641.4063f, -383.5938f, -125.3906f, -19.1406f, - 92.5781f, 370.7031f, 536.7188f, 479.6875f, 522.2656f, 476.1719f, 438.6719f, 396.8750f, 332.8125f, 293.7500f, 259.3750f, 218.3594f, 175.0000f, 119.5313f, 75.7813f, 32.4219f, - -2.3438f, -68.7500f, -145.7031f, -43.3594f, -86.3281f, -151.1719f, -188.6719f, -249.6094f, -294.1406f, -307.0313f, -302.3438f, -255.8594f, -128.1250f, -44.5313f, -9.7656f, 10.5469f, - 52.7344f, 64.0625f, -1.5625f, -70.7031f, -142.1875f, -206.2500f, -181.2500f, -165.6250f, -153.5156f, -122.6563f, -94.5313f, -72.2656f, -40.6250f, -23.8281f, -12.5000f, -14.4531f, - 5.8594f, -85.1563f, -125.7813f, 260.9375f, 233.2031f, 133.9844f, 76.5625f, -1.9531f, -17.9688f, -62.1094f, -140.2344f, -204.6875f, -245.7031f, -214.0625f, -120.3125f, -37.1094f, - 94.5313f, 180.8594f, 299.6094f, 258.2031f, 217.9688f, 157.4219f, 104.6875f, 74.6094f, 27.7344f, -1.5625f, -19.9219f, -40.2344f, -55.0781f, -68.7500f, -62.8906f, -55.4688f, - -69.9219f, -57.4219f, 279.2969f, 337.8906f, 378.9063f, 364.0625f, 321.0938f, 298.0469f, 235.1563f, 200.7813f, 170.3125f, 144.5313f, 111.3281f, 73.8281f, 41.4063f, 14.0625f, - -19.1406f, -88.6719f, -230.0781f, -364.4531f, -457.8125f, -273.4375f, -96.8750f, -68.3594f, -51.5625f, -51.5625f, -48.8281f, -40.2344f, -18.3594f, -19.1406f, -4.6875f, 23.4375f, - -2.7344f, -88.6719f, -157.8125f, 106.2500f, 32.4219f, -19.5313f, -64.4531f, -124.6094f, -133.9844f, -195.7031f, -285.5469f, -366.7969f, -395.7031f, -237.1094f, -78.9063f, -0.7813f, - -29.6875f, -105.8594f, -258.2031f, -227.3438f, 115.6250f, 33.5938f, -23.4375f, -64.8438f, -130.8594f, -122.6563f, -83.2031f, -111.3281f, -126.5625f, -109.3750f, -64.0625f, -15.2344f, - -103.1250f, -176.5625f, -43.3594f, 66.7969f, 89.4531f, 139.4531f, 138.6719f, 180.0781f, 198.8281f, 201.9531f, 191.0156f, 172.2656f, 135.5469f, 96.0938f, 61.7188f, 29.2969f, - 26.1719f, -19.1406f, -132.8125f, -213.2813f, -296.0938f, -358.9844f, -342.1875f, -283.9844f, -257.0313f, -221.4844f, -192.1875f, -156.2500f, -91.4063f, -54.6875f, -24.6094f, 14.0625f, - -55.4688f, 36.7188f, 200.7813f, 156.2500f, 158.5938f, 151.9531f, 148.0469f, 161.3281f, 152.7344f, 147.2656f, 138.2813f, 122.6563f, 95.7031f, 60.9375f, 36.7188f, 13.2813f, - 37.8906f, -18.3594f, -123.4375f, -242.1875f, -341.4063f, -69.9219f, -80.4688f, -113.2813f, -118.7500f, -200.7813f, -269.5313f, -282.4219f, -196.4844f, -98.4375f, -28.5156f, 15.2344f, - 189.4531f, 263.2813f, 207.8125f, 76.1719f, 14.8438f, -23.4375f, 6.6406f, 20.3125f, 24.6094f, 28.9063f, 33.2031f, 24.2188f, 13.6719f, -3.9063f, -8.5938f, -19.9219f, - -41.0156f, -8.9844f, 112.1094f, 153.9063f, 183.2031f, 237.8906f, 275.7813f, 335.9375f, 364.4531f, 364.4531f, 341.4063f, 308.2031f, 249.2188f, 181.6406f, 116.0156f, 57.8125f, - -87.1094f, -194.9219f, -326.9531f, -317.5781f, -152.7344f, -90.2344f, -69.5313f, -71.0938f, -31.6406f, 0.7813f, 32.8125f, 44.1406f, 51.1719f, 55.4688f, 49.6094f, 41.7969f, - -25.0000f, 105.0781f, 343.3594f, 331.6406f, 395.7031f, 451.9531f, 488.2813f, 522.2656f, 493.3594f, 459.3750f, 409.3750f, 351.5625f, 274.6094f, 196.0938f, 124.2188f, 64.4531f, - 23.8281f, 0.3906f, -77.3438f, -81.6406f, -134.7656f, -162.8906f, -109.3750f, -109.3750f, -119.9219f, -106.2500f, -133.2031f, -163.2813f, -235.9375f, -288.2813f, -346.4844f, -153.9063f, - 17.5781f, 30.0781f, 48.4375f, 59.3750f, 38.6719f, 16.7969f, 7.8125f, -1.5625f, -35.5469f, -33.2031f, -75.0000f, -109.3750f, -212.5000f, -294.5313f, -459.3750f, -506.2500f, - 67.5781f, 26.9531f, -19.1406f, -88.2813f, -134.3750f, -187.1094f, -191.0156f, -241.4063f, -283.9844f, -355.0781f, -438.2813f, -564.8438f, -504.6875f, -192.1875f, -80.0781f, 3.9063f, - -31.2500f, -31.2500f, 132.0313f, 111.3281f, 48.0469f, 18.7500f, -29.6875f, -31.2500f, -41.0156f, -46.0938f, -42.1875f, -31.2500f, -22.6563f, -10.9375f, -3.5156f, -3.1250f, - 28.9063f, -30.8594f, -114.0625f, -241.4063f, -295.3125f, 134.7656f, 84.3750f, 70.3125f, 55.8594f, -28.5156f, -72.6563f, -87.1094f, -78.1250f, -55.8594f, -20.3125f, -8.2031f, - -98.8281f, -202.7344f, -225.7813f, -73.4375f, -37.5000f, -13.6719f, -2.7344f, 10.5469f, 51.9531f, 85.1563f, 100.7813f, 100.7813f, 90.2344f, 70.3125f, 46.8750f, 27.3438f, - 106.6406f, 289.0625f, 371.0938f, 287.5000f, 273.8281f, 248.0469f, 238.6719f, 235.1563f, 221.0938f, 208.2031f, 192.9688f, 174.6094f, 136.7188f, 89.8438f, 51.1719f, 16.4063f, - -39.0625f, -134.7656f, -274.2188f, -137.5000f, 276.9531f, 266.4063f, 189.4531f, 126.5625f, 62.8906f, 43.7500f, 57.8125f, 9.7656f, -34.3750f, -41.4063f, -33.5938f, -39.4531f, - 119.9219f, 103.5156f, 98.8281f, 25.3906f, -24.6094f, -29.2969f, -66.0156f, -110.1563f, -152.3438f, -195.7031f, -214.8438f, -207.8125f, -158.5938f, -115.6250f, -72.6563f, -51.5625f, - -10.1563f, 27.3438f, 19.5313f, -32.8125f, -34.7656f, 10.9375f, 41.4063f, 77.7344f, 119.1406f, 152.7344f, 175.7813f, 183.2031f, 163.6719f, 117.5781f, 74.6094f, 31.2500f, - 8.5938f, 15.2344f, -60.1563f, -166.4063f, -233.2031f, -194.1406f, -62.1094f, -26.9531f, 16.0156f, 37.1094f, 44.5313f, 44.5313f, 38.6719f, 12.8906f, -2.7344f, -15.6250f, - -63.2813f, -139.0625f, -199.6094f, -180.0781f, -185.5469f, -200.3906f, -186.3281f, -189.4531f, -154.2969f, -97.2656f, -53.1250f, -27.7344f, -1.5625f, 12.8906f, 21.0938f, 25.0000f, - -32.0313f, -115.2344f, -219.5313f, 94.1406f, 25.3906f, -63.6719f, -88.6719f, -150.0000f, -92.5781f, -89.4531f, -103.9063f, -87.1094f, -36.7188f, 3.9063f, 16.0156f, 12.1094f, - -40.6250f, -126.1719f, -117.9688f, 286.3281f, 252.3438f, 163.2813f, 105.8594f, 58.2031f, 60.5469f, 60.1563f, 46.4844f, 38.6719f, 34.7656f, 24.6094f, 5.0781f, -6.2500f -}; -/* An 16-by-32 matrix */ -const float GETRNB_SN1[512] = -{ - -46.4844f, -105.8594f, -166.7969f, 174.6094f, 125.3906f, 22.6563f, 14.4531f, -41.0156f, -25.3906f, 38.6719f, 41.4063f, 8.2031f, -108.2031f, 20.7031f, 3.5156f, -2.3438f, - -36.3281f, -94.1406f, -169.1406f, -322.6563f, -401.5625f, 6.6406f, 70.3125f, 53.9063f, 125.0000f, 91.4063f, 59.3750f, 91.7969f, 380.0781f, 232.0313f, 77.7344f, 37.5000f, - -117.1875f, -185.1563f, -216.0156f, -194.1406f, -146.0938f, -90.2344f, -87.5000f, -66.4063f, -56.6406f, 19.9219f, 60.1563f, 278.9063f, 522.6563f, 269.5313f, 105.8594f, 46.0938f, - -44.9219f, -89.0625f, -96.8750f, 3.5156f, -10.5469f, -76.5625f, -93.7500f, -105.0781f, -114.4531f, -121.0938f, -107.8125f, -99.2188f, 300.3906f, 187.8906f, 45.7031f, 23.0469f, - 67.1875f, 22.6563f, 183.2031f, 228.5156f, 200.0000f, 131.2500f, 56.6406f, -20.3125f, -65.2344f, -134.3750f, -148.0469f, -190.2344f, 111.3281f, 147.2656f, 10.5469f, 10.5469f, - 31.6406f, 13.2813f, 224.2188f, 335.5469f, 319.5313f, 274.2188f, 203.5156f, 134.3750f, 69.1406f, 8.9844f, -45.3125f, -107.0313f, -238.6719f, -30.4688f, -23.8281f, -13.6719f, - 29.6875f, 7.4219f, -40.6250f, -151.5625f, -268.3594f, 21.0938f, 108.9844f, 56.2500f, 92.5781f, 87.1094f, 42.9688f, 3.5156f, -130.8594f, 1.5625f, 1.1719f, -3.9063f, - 44.9219f, 148.4375f, 189.8438f, 174.2188f, 151.9531f, 123.4375f, 93.3594f, 97.2656f, 76.9531f, 80.8594f, 63.2813f, 55.0781f, -169.9219f, -592.1875f, -159.7656f, -53.1250f, - -57.0313f, -135.9375f, -166.0156f, 251.9531f, 389.8438f, 308.5938f, 237.8906f, 182.8125f, 110.1563f, 112.1094f, 59.7656f, 33.9844f, -180.0781f, -231.2500f, -34.3750f, -25.0000f, - -97.2656f, -183.9844f, -326.1719f, -250.7813f, 230.0781f, 375.0000f, 346.4844f, 248.8281f, 172.6563f, 111.7188f, 94.5313f, 51.5625f, 55.4688f, 116.7969f, 38.6719f, 17.1875f, - 50.0000f, 14.4531f, -46.8750f, -122.6563f, -223.0469f, -285.1563f, -339.0625f, -217.9688f, -101.1719f, -42.5781f, 3.1250f, 161.3281f, 447.2656f, 231.6406f, 82.0313f, 35.9375f, - 58.9844f, 129.2969f, 104.2969f, 50.7813f, -9.3750f, -34.7656f, -51.9531f, -16.7969f, -29.2969f, 22.2656f, 7.4219f, 36.7188f, -183.2031f, -310.9375f, -48.4375f, -35.1563f, - -132.4219f, -182.8125f, -114.0625f, -13.2813f, 29.6875f, 69.9219f, 90.2344f, 105.0781f, 101.1719f, 109.7656f, 107.4219f, 79.6875f, -36.3281f, 61.3281f, 20.7031f, 6.2500f, - 12.8906f, 68.7500f, 9.7656f, -78.5156f, -121.4844f, -194.1406f, -198.8281f, -94.5313f, -18.3594f, 2.3438f, 33.5938f, 18.7500f, -64.4531f, 68.7500f, 9.3750f, 3.1250f, - 10.5469f, 87.1094f, 180.0781f, 195.3125f, 187.1094f, 185.5469f, 191.0156f, 218.7500f, 248.0469f, 289.4531f, 360.9375f, 526.1719f, 603.9063f, 314.8438f, 108.2031f, 21.0938f, - 199.2188f, 181.2500f, 157.0313f, 44.5313f, -31.2500f, -111.3281f, -113.2813f, -125.3906f, -110.5469f, -143.7500f, -126.9531f, -165.6250f, 151.5625f, 157.0313f, 20.3125f, 14.8438f, - 203.5156f, 239.8438f, 285.9375f, 214.4531f, 167.1875f, 108.5938f, 70.3125f, 31.6406f, 5.4688f, -42.9688f, -79.6875f, -138.6719f, -253.5156f, -12.5000f, -21.8750f, -14.0625f, - 28.1250f, 10.1563f, 102.3438f, 102.7344f, 62.1094f, 44.1406f, 23.4375f, -3.9063f, -28.5156f, -47.2656f, -78.5156f, -128.5156f, -300.0000f, -23.8281f, -23.4375f, -15.2344f, - 33.2031f, 22.2656f, 45.3125f, -15.6250f, -30.4688f, -62.1094f, -60.1563f, -96.4844f, -85.9375f, -142.9688f, -129.2969f, -207.8125f, -13.6719f, 134.3750f, 0.0000f, 9.7656f, - 205.8594f, 358.9844f, 523.0469f, 478.5156f, 464.8438f, 399.6094f, 302.3438f, 225.3906f, 153.5156f, 62.5000f, -1.5625f, -71.8750f, -109.7656f, 11.3281f, -8.2031f, -4.6875f, - -89.8438f, -110.5469f, -132.0313f, -148.0469f, -122.2656f, -114.4531f, -63.6719f, -47.6563f, 5.8594f, 37.8906f, 94.9219f, 65.6250f, 141.0156f, 175.3906f, 39.8438f, 23.8281f, - 147.6563f, 144.1406f, 144.1406f, 53.1250f, 16.4063f, -28.1250f, -28.5156f, -60.1563f, -60.5469f, -101.5625f, -105.4688f, -173.4375f, -219.5313f, 67.5781f, -14.0625f, -3.5156f, - 65.6250f, 42.1875f, -14.0625f, -135.5469f, -218.3594f, -170.3125f, -99.2188f, -102.7344f, -92.1875f, -88.6719f, -96.4844f, -92.9688f, 310.9375f, 190.6250f, 48.0469f, 24.2188f, - -58.9844f, -46.0938f, 63.6719f, 176.5625f, 167.9688f, 189.0625f, 178.1250f, 163.2813f, 147.2656f, 141.7969f, 100.0000f, 71.4844f, -157.4219f, -558.2031f, -149.2188f, -49.2188f, - -79.6875f, -142.9688f, -254.6875f, -200.0000f, 167.1875f, 137.8906f, 71.0938f, 34.3750f, -3.9063f, -36.7188f, -21.0938f, -4.2969f, 312.8906f, 205.8594f, 58.9844f, 29.6875f, - 23.4375f, 30.8594f, -66.0156f, -181.6406f, -308.2031f, -329.6875f, -21.4844f, 70.7031f, 81.6406f, 67.1875f, 82.0313f, 41.7969f, 101.5625f, 155.8594f, 35.5469f, 20.3125f, - -26.9531f, -80.0781f, -147.2656f, -64.0625f, 252.7344f, 228.1250f, 117.9688f, 58.9844f, 12.5000f, -52.7344f, -53.1250f, -87.1094f, -105.0781f, 66.4063f, 1.5625f, 1.9531f, - 14.8438f, 163.2813f, 345.7031f, 382.4219f, 386.7188f, 401.1719f, 339.8438f, 314.0625f, 261.3281f, 209.7656f, 140.6250f, 94.1406f, -131.2500f, -500.3906f, -132.0313f, -43.3594f, - -164.0625f, -273.4375f, -356.2500f, -242.9688f, -131.6406f, -19.9219f, 26.1719f, 67.5781f, 127.3438f, 216.4063f, 299.2188f, 544.9219f, 646.8750f, 349.2188f, 152.3438f, 69.5313f, - -55.0781f, -98.4375f, -198.0469f, -321.0938f, -423.4375f, -330.0781f, -109.3750f, 7.8125f, 58.2031f, 94.5313f, 153.5156f, 371.4844f, 557.8125f, 289.0625f, 118.3594f, 52.7344f, - -46.8750f, -14.4531f, 12.1094f, 41.0156f, 28.1250f, 38.6719f, 20.7031f, 45.7031f, 23.0469f, 66.7969f, 46.8750f, 69.1406f, -161.7188f, -387.8906f, -62.5000f, -38.2813f, - -149.2188f, -239.0625f, -246.4844f, -65.2344f, 1.5625f, 40.6250f, 50.7813f, 55.0781f, 94.5313f, 126.9531f, 135.9375f, 167.9688f, 409.3750f, 254.2969f, 86.7188f, 42.5781f -}; -/* An 16-by-16 matrix */ -const float GETRNB_SN2[256] = -{ - -10.5469f, 27.7344f, 17.5781f, -1.5625f, 10.9375f, 26.9531f, 9.7656f, 36.7188f, 17.5781f, 35.1563f, 17.5781f, 33.9844f, -69.1406f, -221.4844f, -45.3125f, -23.0469f, - -81.2500f, -57.4219f, 207.4219f, 155.8594f, 77.7344f, 44.1406f, -8.2031f, -10.9375f, -13.2813f, -14.8438f, -18.7500f, -17.9688f, -18.3594f, 7.0313f, -0.3906f, -0.3906f, - 26.9531f, -7.8125f, -44.9219f, -138.6719f, -148.4375f, 151.5625f, 148.0469f, 75.3906f, 52.3438f, 14.4531f, -16.4063f, -23.4375f, -13.6719f, 11.3281f, 2.3438f, 1.9531f, - 41.7969f, 34.7656f, -38.2813f, -73.8281f, 148.0469f, 112.8906f, 26.5625f, 8.5938f, -27.7344f, -69.9219f, -73.0469f, -75.0000f, -53.5156f, 1.5625f, -6.6406f, -2.7344f, - -17.1875f, -31.6406f, -144.9219f, -175.0000f, 88.2813f, 29.2969f, -20.3125f, 16.7969f, 15.6250f, 14.0625f, 30.8594f, 46.8750f, 50.7813f, 29.6875f, 14.0625f, 5.8594f, - 51.1719f, 44.9219f, 75.0000f, 69.1406f, 9.7656f, -2.7344f, -8.9844f, -37.1094f, -51.5625f, -71.8750f, -80.4688f, -95.7031f, -78.1250f, -4.6875f, -11.3281f, -4.2969f, - 17.5781f, -9.7656f, -97.2656f, 19.5313f, -73.8281f, -139.8438f, 98.8281f, 56.6406f, -15.2344f, 10.5469f, 13.2813f, -7.8125f, -20.3125f, 5.0781f, 0.3906f, 0.7813f, - -99.2188f, -60.5469f, 8.9844f, -34.7656f, -11.7188f, 8.9844f, -8.9844f, -8.2031f, -17.5781f, -33.5938f, -35.9375f, -42.5781f, -18.7500f, 20.3125f, 1.1719f, 1.1719f, - -96.8750f, -91.0156f, 54.2969f, 83.2031f, 90.6250f, 141.0156f, 136.3281f, 156.6406f, 145.7031f, 117.5781f, 89.8438f, 80.8594f, 79.6875f, 39.4531f, 12.5000f, 5.4688f, - 191.7969f, 213.2813f, 159.7656f, 57.4219f, 13.2813f, -7.0313f, 20.3125f, 23.0469f, 18.7500f, 10.5469f, 5.4688f, 2.7344f, -0.3906f, -14.4531f, -6.2500f, -3.5156f, - 14.0625f, 16.0156f, 0.0000f, -8.2031f, -11.3281f, -25.0000f, -80.8594f, -135.1563f, -201.5625f, -138.6719f, -25.0000f, 28.5156f, 60.9375f, 36.7188f, 11.7188f, 4.2969f, - -10.9375f, -67.5781f, -108.5938f, 197.6563f, 166.7969f, 64.0625f, 43.3594f, 8.2031f, -12.8906f, -23.8281f, -30.4688f, -35.1563f, -12.5000f, 15.2344f, 1.5625f, 1.5625f, - -17.1875f, -23.4375f, -83.9844f, -145.7031f, -189.4531f, -105.4688f, 4.6875f, 58.9844f, 105.8594f, 103.5156f, 83.9844f, 69.5313f, 59.7656f, 27.7344f, 12.5000f, 6.6406f, - 42.9688f, 60.5469f, -11.3281f, -101.1719f, -85.1563f, -71.4844f, -68.3594f, -51.5625f, -33.2031f, -38.2813f, -33.9844f, -36.3281f, -30.0781f, 0.0000f, -3.5156f, -1.5625f, - -45.3125f, -5.4688f, 91.7969f, 0.3906f, -92.9688f, -155.4688f, -163.6719f, -21.4844f, 42.5781f, 30.0781f, 24.2188f, 28.9063f, 28.5156f, 18.3594f, 6.2500f, 3.1250f, - -7.8125f, -42.1875f, -85.5469f, 96.0938f, 7.8125f, -71.8750f, -128.1250f, -175.3906f, -26.1719f, 55.4688f, 48.8281f, 42.9688f, 35.5469f, 28.9063f, 10.9375f, 5.0781f -}; -/* An 16-by-32 matrix */ -const float GETRWB_SN1[512] = -{ - -90.6250f, -74.6094f, 110.1563f, 96.8750f, 134.3750f, 152.3438f, 167.1875f, 191.4063f, 210.1563f, 231.2500f, 242.1875f, 237.1094f, 208.2031f, 145.3125f, 101.9531f, 53.1250f, - -23.0469f, -88.6719f, -163.2813f, -112.5000f, -96.4844f, -175.0000f, -195.7031f, -251.5625f, -296.8750f, -360.1563f, -434.3750f, -470.3125f, -204.2969f, -50.7813f, 4.6875f, 51.1719f, - 54.2969f, 327.3438f, 547.6563f, 518.3594f, 572.2656f, 543.3594f, 535.5469f, 524.2188f, 476.5625f, 448.0469f, 406.6406f, 355.4688f, 286.3281f, 202.3438f, 130.8594f, 70.7031f, - 82.4219f, 57.8125f, -36.7188f, -107.4219f, -189.0625f, -228.9063f, -211.3281f, -247.6563f, -227.7344f, -199.6094f, -165.6250f, -125.7813f, -111.3281f, -116.7969f, -75.7813f, -33.9844f, - 160.1563f, 141.4063f, 131.6406f, 28.5156f, -14.0625f, -44.1406f, -70.3125f, -107.0313f, -145.7031f, -192.5781f, -195.7031f, -184.7656f, -153.5156f, -141.0156f, -105.8594f, -98.0469f, - -33.2031f, -142.9688f, -319.9219f, -207.8125f, 294.1406f, 268.7500f, 161.7188f, 79.2969f, 9.3750f, -16.7969f, 50.3906f, 23.4375f, -39.0625f, -48.0469f, -37.8906f, -44.5313f, - 1.5625f, 14.4531f, 189.0625f, 200.7813f, 132.8125f, 87.8906f, 34.7656f, 23.0469f, 15.6250f, 1.1719f, -1.9531f, -0.3906f, -4.2969f, -19.1406f, -16.7969f, -18.7500f, - -87.1094f, -183.9844f, -258.2031f, -221.4844f, -193.7500f, -202.7344f, -181.2500f, -211.7188f, -189.0625f, -133.9844f, -107.8125f, -72.2656f, -16.7969f, 6.6406f, 32.8125f, 51.9531f, - -41.4063f, -121.8750f, -260.9375f, -289.4531f, 150.3906f, 128.5156f, 47.2656f, -61.3281f, -165.2344f, -277.3438f, -373.8281f, -500.0000f, -446.4844f, -128.9063f, -7.8125f, 51.1719f, - 97.6563f, 61.3281f, 27.7344f, -121.0938f, -215.6250f, -289.0625f, -291.0156f, -303.9063f, -323.0469f, -415.6250f, -521.8750f, -636.3281f, -307.8125f, -76.1719f, -17.1875f, 51.1719f, - 54.6875f, 247.2656f, 378.9063f, 337.5000f, 338.6719f, 297.2656f, 266.7969f, 253.1250f, 223.4375f, 212.5000f, 201.5625f, 183.2031f, 149.6094f, 92.9688f, 55.8594f, 21.4844f, - 45.3125f, 55.8594f, 89.4531f, 52.3438f, -9.7656f, -46.8750f, -90.6250f, -130.0781f, -208.9844f, -250.7813f, -384.7656f, -491.7969f, -731.6406f, -674.6094f, -128.9063f, -3.9063f, - -25.0000f, -32.0313f, -24.2188f, -90.6250f, -120.3125f, -135.1563f, -115.6250f, -106.2500f, -59.7656f, -10.1563f, 42.1875f, 80.0781f, 90.6250f, 61.7188f, 50.3906f, 20.7031f, - 32.0313f, -35.9375f, -120.7031f, -308.9844f, -440.6250f, -101.1719f, -94.9219f, -158.2031f, -143.3594f, -248.8281f, -352.7344f, -423.4375f, -263.6719f, -77.7344f, 6.6406f, 57.0313f, - -96.4844f, -222.2656f, -346.0938f, -296.0938f, -130.4688f, -80.4688f, -61.7188f, -58.5938f, -25.0000f, 22.2656f, 74.2188f, 98.4375f, 101.9531f, 82.0313f, 63.6719f, 50.3906f, - -8.9844f, -124.6094f, -178.9063f, 308.9844f, 280.4688f, 156.2500f, 91.0156f, -31.6406f, -67.9688f, -156.2500f, -296.0938f, -409.3750f, -522.6563f, -405.4688f, -112.5000f, -2.3438f, - 19.5313f, 180.4688f, 118.3594f, -18.3594f, -47.6563f, -52.3438f, 5.8594f, 53.5156f, 69.9219f, 86.7188f, 103.9063f, 97.2656f, 85.5469f, 48.0469f, 31.2500f, 11.7188f, - -45.3125f, -129.6875f, -253.9063f, -431.2500f, -533.9844f, -269.9219f, -146.8750f, -115.2344f, -69.5313f, -77.7344f, -66.4063f, -9.3750f, 48.8281f, 37.1094f, 48.8281f, 65.6250f, - -25.7813f, -122.6563f, -205.4688f, 126.9531f, 60.9375f, -21.8750f, -44.5313f, -112.1094f, -49.2188f, -72.2656f, -114.0625f, -116.4063f, -73.8281f, -31.6406f, 0.3906f, 8.9844f, - 57.4219f, -11.7188f, -113.6719f, -301.1719f, -366.7969f, 102.3438f, 71.0938f, 49.2188f, 49.6094f, -39.0625f, -63.6719f, -52.3438f, -35.5469f, -37.1094f, -20.3125f, -7.4219f, - -87.8906f, -193.7500f, -175.3906f, -23.8281f, 17.9688f, 52.7344f, 71.0938f, 96.4844f, 126.5625f, 157.8125f, 178.5156f, 181.2500f, 164.0625f, 119.1406f, 81.6406f, 41.4063f, - 163.2813f, 121.8750f, 162.1094f, 28.9063f, -60.9375f, -134.7656f, -156.2500f, -247.6563f, -300.3906f, -412.8906f, -532.0313f, -719.1406f, -721.8750f, -183.9844f, -57.4219f, 33.9844f, - 14.8438f, 7.4219f, -90.6250f, -215.6250f, -272.6563f, -367.5781f, -188.6719f, 46.4844f, 21.0938f, -13.2813f, 27.3438f, -26.5625f, -56.2500f, -75.0000f, -98.8281f, -92.1875f, - 31.2500f, -11.7188f, -83.5938f, -61.3281f, -114.0625f, -121.8750f, -110.5469f, -135.5469f, -150.0000f, -145.3125f, -190.2344f, -196.4844f, -291.4063f, -371.0938f, -535.9375f, -251.5625f, - 17.1875f, 21.4844f, 48.4375f, 70.7031f, 48.8281f, 42.5781f, 23.8281f, 11.3281f, -28.5156f, -21.0938f, -80.4688f, -108.5938f, -249.2188f, -362.8906f, -610.5469f, -680.4688f, - 313.2813f, 321.4844f, 283.5938f, 137.8906f, 106.2500f, 47.6563f, 45.7031f, 36.7188f, 31.2500f, 15.6250f, 26.5625f, 18.3594f, 16.4063f, -7.4219f, -10.1563f, -26.9531f, - 19.5313f, -37.8906f, -119.5313f, -260.1563f, -358.5938f, -433.2031f, -439.0625f, -303.1250f, -277.3438f, -284.3750f, -263.6719f, -189.8438f, -58.5938f, -1.1719f, 36.3281f, 62.5000f, - 31.6406f, -56.2500f, -51.1719f, 124.6094f, 88.6719f, -37.5000f, -92.1875f, -201.9531f, -277.7344f, -370.7031f, -480.8594f, -642.1875f, -634.7656f, -173.4375f, -45.7031f, 33.5938f, - -89.8438f, -92.5781f, 228.9063f, 312.1094f, 363.6719f, 399.6094f, 420.7031f, 460.5469f, 442.5781f, 430.0781f, 401.1719f, 355.0781f, 285.5469f, 201.1719f, 128.9063f, 66.7969f, - 175.0000f, 246.8750f, 408.9844f, 305.4688f, 246.4844f, 152.3438f, 60.5469f, -32.0313f, -133.5938f, -267.5781f, -430.8594f, -593.7500f, -694.9219f, -363.6719f, -83.5938f, 13.2813f, - -30.0781f, -137.5000f, -137.8906f, 307.4219f, 366.4063f, 264.4531f, 200.3906f, 137.5000f, 110.9375f, 108.5938f, 96.4844f, 70.7031f, 55.0781f, 28.5156f, 3.1250f, -15.2344f, - 21.0938f, 16.4063f, -26.1719f, -116.4063f, -181.6406f, -231.6406f, -208.2031f, -213.6719f, -244.5313f, -289.4531f, -381.6406f, -514.4531f, -650.3906f, -239.4531f, -46.4844f, 31.2500f -}; -/* An 16-by-16 matrix */ -const float GETRWB_SN2[256] = -{ - -78.9063f, -96.0938f, -139.0625f, -139.0625f, -90.6250f, -64.0625f, -30.8594f, 1.5625f, 30.4688f, 50.7813f, 59.3750f, 64.4531f, 66.4063f, 55.0781f, 35.1563f, 27.3438f, - 14.8438f, 30.4688f, -28.1250f, -72.2656f, -174.2188f, -215.6250f, 105.0781f, 115.2344f, 40.6250f, 30.0781f, -21.0938f, -71.8750f, -65.6250f, -28.1250f, -12.5000f, -0.7813f, - 26.9531f, 36.3281f, 15.2344f, 45.3125f, 39.0625f, 17.9688f, 19.5313f, -0.3906f, -0.7813f, 24.2188f, 3.1250f, -41.0156f, -157.8125f, -256.2500f, -192.9688f, -87.5000f, - -111.3281f, -119.1406f, 102.7344f, 37.8906f, 11.3281f, 12.8906f, -9.3750f, 21.0938f, 13.6719f, 9.7656f, -1.5625f, -2.3438f, -11.7188f, 5.0781f, 7.8125f, 8.2031f, - -10.9375f, -27.3438f, -62.5000f, 13.2813f, 1.9531f, -56.6406f, -103.1250f, -166.0156f, -210.5469f, -128.5156f, -7.4219f, 89.0625f, 160.5469f, 109.3750f, 55.0781f, 19.9219f, - 95.3125f, 95.7031f, 7.4219f, -124.6094f, -180.0781f, -71.8750f, -3.9063f, 18.3594f, 85.9375f, 114.4531f, 120.7031f, 128.9063f, 109.7656f, 54.6875f, 27.7344f, 4.6875f, - -50.0000f, -98.0469f, -146.0938f, 165.6250f, 108.9844f, 26.5625f, 13.6719f, -26.5625f, 5.0781f, 17.5781f, -2.3438f, -16.0156f, -28.5156f, -6.6406f, 3.1250f, 10.5469f, - -21.4844f, -2.7344f, 171.0938f, 195.3125f, 192.5781f, 172.6563f, 111.7188f, 82.4219f, 26.5625f, -15.2344f, -45.7031f, -65.2344f, -70.3125f, -51.1719f, -29.2969f, -24.6094f, - 11.7188f, 12.1094f, 26.9531f, 44.5313f, -67.1875f, -158.9844f, -232.8125f, -152.7344f, 39.8438f, 66.0156f, 61.7188f, 51.1719f, 17.9688f, 1.5625f, -2.3438f, -1.1719f, - 26.9531f, 29.6875f, 12.8906f, 92.9688f, 64.0625f, 46.4844f, 62.5000f, 64.4531f, 106.6406f, 133.5938f, 149.6094f, 163.6719f, 178.1250f, 147.6563f, 102.3438f, 37.5000f, - -21.4844f, 16.7969f, -23.0469f, -106.6406f, -78.1250f, -111.7188f, -112.1094f, -86.3281f, -96.4844f, -95.7031f, -75.7813f, -62.5000f, -50.3906f, -14.0625f, -12.1094f, 1.1719f, - -13.6719f, -17.9688f, -106.2500f, -139.4531f, 189.0625f, 96.0938f, -4.2969f, 8.2031f, -48.0469f, -76.9531f, -39.8438f, -36.7188f, -37.5000f, -8.5938f, 2.3438f, 2.3438f, - -45.7031f, -73.4375f, -98.4375f, -88.6719f, 0.0000f, 179.6875f, 197.6563f, 205.4688f, 195.7031f, 151.9531f, 97.6563f, 51.1719f, -10.9375f, -12.5000f, 9.3750f, 6.6406f, - 155.8594f, 199.6094f, 152.3438f, 57.0313f, 31.2500f, -32.8125f, -31.6406f, -22.2656f, -48.0469f, -53.9063f, -37.1094f, -32.0313f, -19.9219f, -12.8906f, -5.4688f, -17.5781f, - -3.5156f, 4.6875f, 117.1875f, 118.7500f, 71.0938f, 10.5469f, -76.9531f, -100.7813f, -134.3750f, -153.5156f, -150.0000f, -124.2188f, -54.6875f, -1.9531f, -2.3438f, 2.3438f, - 25.0000f, 9.7656f, -2.7344f, -100.0000f, -119.5313f, 148.8281f, 94.9219f, 37.5000f, -6.6406f, -74.2188f, -111.3281f, -96.0938f, -25.3906f, 18.7500f, 14.4531f, 11.3281f -}; -/* An 16-by-16 matrix */ -const float TRWB2_SN1[256] = -{ - -28.9063f, -150.0000f, -298.4375f, -376.5625f, -438.2813f, -356.2500f, -319.9219f, -289.0625f, -284.3750f, -223.4375f, -148.0469f, -123.8281f, -97.6563f, -19.9219f, -26.1719f, 33.2031f, - -121.4844f, -241.4063f, -171.4844f, -42.1875f, 60.9375f, 100.3906f, 157.8125f, 212.1094f, 251.1719f, 284.7656f, 285.9375f, 223.4375f, 174.2188f, 128.5156f, 92.1875f, 64.0625f, - 204.2969f, 605.0781f, 608.2031f, 576.5625f, 536.7188f, 465.6250f, 417.1875f, 360.5469f, 351.9531f, 307.8125f, 280.0781f, 156.6406f, 102.3438f, 2.3438f, -39.0625f, -143.7500f, - -5.0781f, -31.2500f, -73.8281f, -150.7813f, -189.8438f, -139.4531f, -84.3750f, -24.6094f, 25.3906f, 73.8281f, 96.8750f, 75.7813f, 85.1563f, 85.5469f, 80.0781f, 66.0156f, - -40.6250f, -202.7344f, -301.5625f, 192.1875f, 87.5000f, 7.0313f, -79.2969f, -95.3125f, -49.2188f, -85.9375f, -141.4063f, -162.8906f, -105.8594f, -27.7344f, -13.2813f, -19.5313f, - -78.9063f, 48.4375f, 316.7969f, 380.8594f, 517.9688f, 573.4375f, 630.0781f, 596.4844f, 575.7813f, 533.5938f, 476.5625f, 353.9063f, 273.4375f, 198.8281f, 137.1094f, 80.8594f, - -22.2656f, -76.5625f, -92.9688f, -109.7656f, -104.2969f, -93.3594f, -74.2188f, -53.5156f, -10.5469f, 1.5625f, 30.0781f, -69.5313f, -100.0000f, -216.0156f, -261.3281f, -431.6406f, - -71.4844f, -82.4219f, 314.0625f, 308.2031f, 267.5781f, 206.6406f, 187.1094f, 157.4219f, 144.9219f, 122.2656f, 108.9844f, 19.1406f, -7.4219f, -60.9375f, -69.9219f, -130.8594f, - 296.0938f, 331.2500f, 237.5000f, 122.2656f, 105.8594f, 68.7500f, 69.1406f, 28.5156f, 41.4063f, 23.8281f, 23.0469f, -62.1094f, -79.2969f, -112.1094f, -104.6875f, -133.9844f, - 77.7344f, 27.3438f, 37.1094f, -11.3281f, -95.7031f, -160.5469f, -291.0156f, -394.1406f, -575.3906f, -750.3906f, -1028.5156f, -643.7500f, -209.7656f, -110.9375f, -33.9844f, 80.8594f, - 32.0313f, -84.7656f, -179.6875f, -252.3438f, -280.4688f, -320.7031f, -383.9844f, -500.7813f, -617.1875f, -823.4375f, -727.7344f, -237.8906f, -158.9844f, -47.6563f, -19.5313f, 94.9219f, - -51.5625f, 142.1875f, 142.1875f, 132.8125f, 191.0156f, 193.7500f, 232.8125f, 236.7188f, 275.0000f, 295.3125f, 303.5156f, 240.6250f, 203.5156f, 159.7656f, 119.1406f, 82.4219f, - 48.0469f, -73.8281f, -35.5469f, -119.5313f, -124.6094f, -158.9844f, -234.3750f, -265.2344f, -355.8594f, -333.9844f, -221.0938f, -97.2656f, -25.3906f, -0.3906f, -25.3906f, -9.7656f, - 30.8594f, -22.6563f, -40.2344f, -58.5938f, -104.6875f, -103.5156f, -166.4063f, -187.1094f, -239.8438f, -262.1094f, -392.5781f, -538.2813f, -791.7969f, -604.2969f, -221.8750f, -20.3125f, - -107.4219f, -261.3281f, -417.9688f, -428.5156f, -268.7500f, -169.1406f, -132.8125f, -57.8125f, -10.5469f, 75.7813f, 120.7031f, 108.2031f, 89.4531f, 73.4375f, 32.0313f, 49.6094f, - 155.0781f, 524.6094f, 578.9063f, 675.3906f, 772.6563f, 785.9375f, 769.1406f, 723.4375f, 675.3906f, 614.8438f, 549.6094f, 424.6094f, 331.2500f, 248.4375f, 168.3594f, 108.5938f -}; -/* An 16-by-16 matrix */ -const float TRWB2_SN2[256] = -{ - 19.5313f, -25.7813f, -189.8438f, -332.0313f, 196.8750f, 134.7656f, 101.9531f, 3.9063f, -80.8594f, -85.1563f, -67.9688f, -7.0313f, 28.1250f, 26.9531f, 1.1719f, 9.3750f, - -66.7969f, -171.4844f, -246.8750f, 152.3438f, 55.8594f, -34.7656f, -114.0625f, -122.6563f, -88.6719f, -61.3281f, 12.8906f, 70.7031f, 72.2656f, 79.6875f, 50.0000f, 65.2344f, - 178.9063f, 179.2969f, 30.4688f, -97.6563f, -142.5781f, -148.8281f, -137.8906f, -149.2188f, -127.7344f, -110.9375f, -74.6094f, -7.0313f, 1.1719f, 14.4531f, 11.3281f, 37.1094f, - -66.0156f, -88.6719f, -165.2344f, -175.0000f, -189.4531f, -166.4063f, -142.1875f, -110.9375f, -92.9688f, -71.8750f, -89.0625f, -74.2188f, -56.6406f, 6.6406f, 25.3906f, 56.6406f, - -1.5625f, -46.8750f, -66.4063f, -130.0781f, -264.4531f, -305.4688f, -280.8594f, -152.7344f, -43.7500f, 90.6250f, 181.2500f, 153.1250f, 107.4219f, 83.9844f, 47.2656f, 54.2969f, - -36.7188f, -50.7813f, 176.9531f, 115.2344f, -17.5781f, -111.7188f, -173.4375f, -184.7656f, -202.7344f, -167.1875f, -104.6875f, -15.6250f, -4.6875f, 17.9688f, 15.2344f, 46.0938f, - -73.8281f, -95.7031f, 314.4531f, 318.3594f, 202.3438f, 114.4531f, 63.2813f, 42.9688f, -26.1719f, -61.7188f, -87.1094f, -46.8750f, -14.0625f, 5.8594f, 10.1563f, 23.4375f, - 8.9844f, 50.7813f, 41.7969f, 0.0000f, -12.1094f, -25.7813f, 12.8906f, 8.5938f, 39.4531f, -3.9063f, -12.5000f, -90.6250f, -109.7656f, -230.4688f, -262.5000f, -425.3906f, - 19.9219f, 41.4063f, 61.3281f, 51.5625f, 15.6250f, 4.2969f, -28.5156f, -25.7813f, -64.4531f, -114.8438f, -219.1406f, -300.7813f, -289.8438f, -191.0156f, -78.9063f, 1.5625f, - 9.7656f, 89.8438f, 111.7188f, 69.9219f, 29.2969f, 7.0313f, 5.8594f, 9.3750f, 42.5781f, 73.0469f, 121.0938f, 130.4688f, 128.1250f, 113.6719f, 92.5781f, 82.8125f, - -92.9688f, -192.1875f, -214.8438f, 219.9219f, 298.4375f, 238.2813f, 211.7188f, 166.7969f, 145.7031f, 101.9531f, 64.8438f, 66.7969f, 47.6563f, 13.2813f, -8.2031f, -35.9375f, - -140.2344f, -180.4688f, -3.9063f, 8.5938f, -16.4063f, -0.7813f, 30.4688f, 65.2344f, 60.1563f, 60.5469f, 28.9063f, 28.5156f, 25.7813f, 36.7188f, 34.7656f, 49.2188f, - -1.9531f, -42.9688f, -146.0938f, -213.2813f, -150.7813f, -53.1250f, 37.1094f, 119.1406f, 170.7031f, 222.6563f, 240.2344f, 217.9688f, 180.8594f, 130.8594f, 81.6406f, 58.9844f, - 8.9844f, 146.8750f, 114.0625f, 91.7969f, 189.4531f, 202.7344f, 256.6406f, 214.4531f, 186.7188f, 132.0313f, 72.6563f, 2.7344f, -10.9375f, -60.5469f, -37.1094f, -73.4375f, - 64.8438f, 54.2969f, -108.2031f, -279.6875f, -321.0938f, 91.4063f, 124.6094f, 127.3438f, 91.4063f, 14.0625f, -60.5469f, -123.8281f, -96.4844f, -31.2500f, 19.1406f, 45.7031f, - 168.3594f, 333.2031f, 291.0156f, 200.0000f, 126.9531f, 54.2969f, 32.4219f, -12.1094f, -9.7656f, -18.3594f, -6.6406f, -4.6875f, -9.3750f, -16.7969f, -1.9531f, 5.0781f -}; -/* An 16-by-32 matrix */ -const float GEWB2_MA1[512] = -{ - 257.4219f, 661.7188f, 638.2813f, 591.0156f, 509.7656f, 428.9063f, 364.4531f, 314.4531f, 286.3281f, 243.7500f, 205.0781f, 132.4219f, 93.3594f, 19.5313f, -13.6719f, -83.9844f, - 2.3438f, 25.3906f, 48.8281f, 21.4844f, -33.2031f, -49.2188f, -106.2500f, -123.4375f, -198.0469f, -228.9063f, -394.5313f, -499.2188f, -758.2031f, -746.0938f, -166.4063f, 30.4688f, - 109.7656f, 123.0469f, 92.1875f, -1.5625f, -39.8438f, -66.7969f, -90.6250f, -130.8594f, -141.4063f, -166.0156f, -190.6250f, -235.5469f, -261.3281f, -287.5000f, -253.1250f, -231.6406f, - 11.3281f, -98.0469f, -227.3438f, -340.2344f, -378.5156f, -350.3906f, -387.1094f, -420.7031f, -498.0469f, -578.1250f, -389.8438f, -153.5156f, -96.4844f, -3.5156f, 10.9375f, 105.8594f, - -23.4375f, -141.0156f, 156.6406f, 215.6250f, 92.1875f, 13.6719f, -76.5625f, -83.9844f, -193.7500f, -266.7969f, -355.8594f, -320.3125f, -225.0000f, -116.7969f, -93.7500f, -55.0781f, - 162.5000f, 224.2188f, 258.5938f, 136.7188f, 51.9531f, -62.5000f, -168.3594f, -305.0781f, -468.7500f, -645.3125f, -794.9219f, -426.5625f, -175.3906f, -75.0000f, -4.2969f, 102.7344f, - -80.4688f, -237.8906f, -363.6719f, 10.9375f, -89.4531f, -139.8438f, -212.1094f, -180.4688f, -147.2656f, -140.6250f, -131.2500f, -98.0469f, -41.0156f, 13.6719f, 10.1563f, 31.2500f, - 144.1406f, 490.6250f, 539.0625f, 613.6719f, 674.2188f, 674.6094f, 642.1875f, 594.1406f, 527.3438f, 451.5625f, 384.3750f, 292.1875f, 226.5625f, 154.2969f, 99.2188f, 42.1875f, - -57.4219f, -187.1094f, -128.9063f, -28.5156f, -106.2500f, -172.2656f, -267.5781f, -326.9531f, -444.9219f, -569.5313f, -535.1563f, -161.7188f, -81.2500f, -4.6875f, 5.4688f, 83.2031f, - -19.5313f, 39.0625f, -32.0313f, -98.8281f, -2.7344f, 46.4844f, 114.8438f, 153.1250f, 192.9688f, 225.7813f, 230.0781f, 204.2969f, 180.4688f, 149.6094f, 117.1875f, 97.2656f, - -36.7188f, -141.4063f, -224.6094f, -300.7813f, -385.5469f, -390.2344f, -360.1563f, -272.2656f, -227.3438f, -119.1406f, -52.7344f, -12.1094f, -3.1250f, 8.9844f, -12.8906f, 24.2188f, - 11.3281f, -25.0000f, -1.5625f, -48.0469f, -134.3750f, -161.7188f, -265.2344f, -299.6094f, -450.0000f, -547.2656f, -822.2656f, -744.1406f, -227.3438f, -117.1875f, -25.0000f, 87.1094f, - 167.1875f, 386.7188f, 398.0469f, 316.0156f, 266.0156f, 183.5938f, 142.9688f, 69.9219f, 49.2188f, -10.1563f, -55.0781f, -141.7969f, -165.2344f, -209.3750f, -170.7031f, -212.8906f, - -51.9531f, -139.4531f, 142.1875f, 94.1406f, -15.2344f, -88.6719f, -130.4688f, -119.1406f, -166.4063f, -114.0625f, -39.8438f, 33.9844f, 62.1094f, 71.0938f, 62.5000f, 74.2188f, - 218.7500f, 298.4375f, 207.4219f, 60.9375f, 8.5938f, -7.0313f, 8.9844f, -7.8125f, 7.4219f, 0.0000f, 5.0781f, -23.8281f, -13.6719f, -17.1875f, -4.6875f, -18.7500f, - 12.8906f, -91.7969f, -247.6563f, -426.9531f, 53.1250f, -12.1094f, -26.5625f, -111.3281f, -206.6406f, -208.9844f, -180.4688f, -97.2656f, -37.1094f, -20.7031f, -45.3125f, -23.8281f, - -73.4375f, -245.3125f, -349.2188f, 274.2188f, 273.4375f, 145.7031f, 76.5625f, 19.9219f, 37.1094f, -21.8750f, -74.6094f, -70.7031f, -67.5781f, -51.5625f, -45.3125f, -85.1563f, - 14.4531f, -73.4375f, -258.2031f, -424.6094f, -516.4063f, -100.7813f, -72.6563f, -70.7031f, -92.9688f, -145.3125f, -163.2813f, -198.4375f, -169.1406f, -76.9531f, -28.5156f, 10.9375f, - -90.2344f, -86.7188f, 355.8594f, 341.7969f, 261.3281f, 171.8750f, 141.7969f, 117.5781f, 100.3906f, 75.0000f, 57.4219f, 26.5625f, 30.0781f, 16.7969f, 22.2656f, 6.6406f, - -1.5625f, -73.0469f, -139.0625f, -160.1563f, -222.2656f, -194.9219f, -228.1250f, -221.8750f, -257.8125f, -274.6094f, -376.9531f, -469.1406f, -601.5625f, -276.5625f, -98.4375f, 33.9844f, - 85.9375f, 25.0000f, -26.1719f, -139.4531f, -223.4375f, -290.6250f, -356.6406f, -459.3750f, -562.1094f, -739.8438f, -840.6250f, -297.6563f, -163.6719f, -57.0313f, -3.9063f, 109.7656f, - -98.8281f, -244.9219f, -419.9219f, -471.0938f, -281.6406f, -155.4688f, -131.6406f, -73.4375f, -46.0938f, 19.5313f, 48.8281f, 77.3438f, 78.1250f, 74.2188f, 37.5000f, 64.0625f, - -135.9375f, -289.4531f, -333.5938f, -139.4531f, -63.6719f, -40.2344f, -10.1563f, 55.8594f, 90.2344f, 124.2188f, 130.8594f, 126.9531f, 107.0313f, 91.0156f, 65.2344f, 74.2188f, - -55.8594f, -100.0000f, -74.6094f, -109.3750f, -97.6563f, -74.6094f, -32.0313f, 14.4531f, 49.2188f, 39.8438f, 26.1719f, -50.7813f, -78.9063f, -167.9688f, -193.3594f, -316.4063f, - 90.6250f, 41.7969f, -8.5938f, -133.2031f, -194.1406f, -204.2969f, -237.1094f, -252.3438f, -291.4063f, -269.5313f, -186.7188f, -115.2344f, -62.5000f, -30.0781f, -20.7031f, -2.7344f, - -12.8906f, -38.2813f, -100.7813f, -195.7031f, -230.0781f, -171.0938f, -123.4375f, -65.6250f, -22.6563f, 32.0313f, 68.3594f, 85.5469f, 97.2656f, 101.1719f, 92.5781f, 88.2813f, - -153.5156f, -259.7656f, -7.4219f, 72.2656f, 97.2656f, 103.9063f, 147.6563f, 182.8125f, 194.9219f, 198.4375f, 181.2500f, 151.5625f, 121.0938f, 92.9688f, 72.6563f, 56.6406f, - -93.7500f, -38.6719f, 159.3750f, 187.5000f, 270.7031f, 297.2656f, 369.5313f, 368.3594f, 371.4844f, 348.8281f, 305.4688f, 239.4531f, 188.2813f, 137.1094f, 101.5625f, 63.6719f, - -8.9844f, 204.2969f, 345.7031f, 352.7344f, 457.8125f, 502.7344f, 578.9063f, 582.4219f, 576.5625f, 547.6563f, 484.3750f, 392.5781f, 307.4219f, 235.9375f, 169.1406f, 114.0625f, - 102.3438f, 385.9375f, 353.1250f, 285.9375f, 286.7188f, 259.7656f, 279.2969f, 256.2500f, 262.8906f, 240.2344f, 211.3281f, 145.3125f, 110.9375f, 54.2969f, 26.5625f, -32.8125f, - -46.4844f, 174.2188f, 436.7188f, 474.6094f, 535.9375f, 500.0000f, 471.8750f, 386.3281f, 344.1406f, 263.6719f, 217.5781f, 124.6094f, 88.6719f, 8.9844f, -15.2344f, -100.0000f, - -39.8438f, 69.5313f, 148.0469f, 98.4375f, 142.5781f, 124.6094f, 177.7344f, 147.2656f, 161.3281f, 108.5938f, 87.8906f, -14.0625f, -26.1719f, -137.1094f, -146.4844f, -301.5625f -}; -/* An 16-by-16 matrix */ -const float AUNB_SN1[256] = -{ - -70.3125f, -30.8594f, -19.9219f, 15.2344f, 25.7813f, 38.6719f, 18.7500f, 42.1875f, 21.8750f, 49.6094f, 13.2813f, 17.9688f, -183.5938f, -330.0781f, -55.0781f, -35.1563f, - -82.8125f, 32.0313f, 110.9375f, 164.8438f, 162.5000f, 162.5000f, 122.2656f, 112.8906f, 91.0156f, 82.0313f, 42.1875f, 21.4844f, -171.4844f, -516.7969f, -131.2500f, -48.0469f, - -3.5156f, 158.2031f, 207.8125f, 257.4219f, 277.3438f, 311.7188f, 329.6875f, 379.2969f, 418.7500f, 461.3281f, 571.8750f, 747.2656f, 792.1875f, 481.2500f, 214.4531f, 103.5156f, - 29.2969f, 19.1406f, 128.9063f, 192.5781f, 175.0000f, 128.5156f, 79.6875f, 26.1719f, -7.0313f, -52.3438f, -91.7969f, -156.2500f, -236.3281f, -11.7188f, -26.1719f, -14.0625f, - -3.5156f, -2.7344f, -37.1094f, -86.7188f, -125.7813f, -164.4531f, -125.3906f, -91.0156f, -42.9688f, -33.5938f, 26.1719f, -7.4219f, 1.1719f, 134.7656f, 16.0156f, 11.7188f, - 59.7656f, 13.2813f, -67.1875f, -150.7813f, -195.3125f, -214.0625f, -196.4844f, -164.0625f, -123.8281f, -80.8594f, -44.5313f, 71.4844f, 428.1250f, 258.2031f, 77.3438f, 36.7188f, - 240.6250f, 195.7031f, 183.9844f, 85.9375f, 61.3281f, 21.4844f, 1.5625f, -62.8906f, -69.5313f, -122.6563f, -104.2969f, -151.9531f, 84.3750f, 167.5781f, 17.9688f, 14.8438f, - -218.3594f, -333.5938f, -308.2031f, -144.1406f, -59.7656f, 25.0000f, 57.0313f, 115.6250f, 151.5625f, 203.1250f, 224.2188f, 374.2188f, 578.5156f, 350.7813f, 132.8125f, 64.0625f, - 51.1719f, 53.5156f, 45.3125f, 22.2656f, 25.0000f, -8.2031f, -14.8438f, -43.7500f, -48.0469f, -77.7344f, -83.5938f, -148.0469f, -250.3906f, 32.4219f, -20.7031f, -8.2031f, - -39.4531f, -126.5625f, -253.1250f, -312.8906f, -326.1719f, -287.8906f, -195.7031f, -115.6250f, -33.5938f, 56.2500f, 156.2500f, 400.3906f, 586.3281f, 336.3281f, 125.7813f, 58.9844f, - -90.2344f, -155.0781f, -200.0000f, -197.6563f, -120.3125f, -78.1250f, -49.6094f, -35.5469f, -7.0313f, 6.6406f, 36.7188f, 44.5313f, 311.7188f, 244.1406f, 62.8906f, 34.3750f, - -202.3438f, -241.0156f, -78.5156f, 40.2344f, 100.7813f, 108.9844f, 106.6406f, 104.2969f, 109.7656f, 98.0469f, 83.5938f, 44.5313f, 22.6563f, 105.4688f, 27.3438f, 12.1094f, - 6.6406f, -33.5938f, -30.4688f, -32.0313f, -8.5938f, -28.5156f, -66.7969f, -116.7969f, -130.4688f, -168.3594f, -164.8438f, -205.4688f, 201.9531f, 199.6094f, 27.7344f, 20.7031f, - 107.8125f, 71.0938f, -15.6250f, -131.2500f, -180.0781f, -36.3281f, 133.5938f, 104.2969f, 64.8438f, 7.0313f, -16.7969f, -76.5625f, -57.0313f, 92.1875f, 7.0313f, 5.4688f, - 88.6719f, 132.0313f, 87.5000f, 73.4375f, 41.7969f, 31.2500f, 22.2656f, 35.9375f, 13.2813f, 31.2500f, -1.9531f, -1.5625f, -201.1719f, -362.1094f, -67.9688f, -39.0625f, - 285.5469f, 290.6250f, 311.3281f, 263.6719f, 230.4688f, 171.0938f, 128.1250f, 83.9844f, 56.2500f, 9.3750f, -37.5000f, -93.3594f, -189.8438f, -68.3594f, -25.3906f, -16.0156f -}; -/* An 16-by-16 matrix */ -const float AUWB_SN1[256] = -{ - 128.1250f, 53.5156f, 139.8438f, 128.9063f, 71.8750f, 56.6406f, -23.4375f, -114.8438f, -216.7969f, -306.2500f, -369.1406f, -340.6250f, -234.7656f, -131.6406f, -60.5469f, -12.8906f, - 12.5000f, -82.8125f, -190.6250f, -254.2969f, -293.7500f, -342.5781f, -348.4375f, -346.0938f, -333.2031f, -310.5469f, -275.3906f, -214.4531f, -128.9063f, -87.5000f, -49.6094f, -3.5156f, - 145.3125f, 127.7344f, 76.9531f, 12.8906f, 5.0781f, -21.4844f, -33.9844f, -48.4375f, -48.8281f, -57.8125f, -56.2500f, -65.6250f, -68.3594f, -71.8750f, -49.6094f, -48.8281f, - 293.7500f, 283.9844f, 243.3594f, 202.7344f, 175.3906f, 136.7188f, 120.7031f, 112.8906f, 106.2500f, 98.4375f, 72.2656f, 48.4375f, 46.0938f, 13.6719f, 8.5938f, -7.8125f, - 5.4688f, 56.2500f, 115.6250f, 168.7500f, 162.5000f, 126.9531f, 69.1406f, 64.8438f, 58.9844f, 48.0469f, 42.5781f, 40.6250f, 18.3594f, -8.5938f, -17.5781f, -19.1406f, - 121.0938f, 43.7500f, -55.0781f, -206.6406f, -255.4688f, -20.7031f, 63.2813f, -12.8906f, -116.0156f, -215.2344f, -301.5625f, -319.1406f, -210.9375f, -112.1094f, -37.1094f, -2.7344f, - -61.7188f, 94.1406f, 173.0469f, 212.1094f, 218.3594f, 226.1719f, 221.0938f, 236.7188f, 238.2813f, 242.9688f, 235.1563f, 225.7813f, 189.4531f, 129.2969f, 76.9531f, 40.6250f, - -183.9844f, -207.0313f, 14.4531f, 106.2500f, 155.0781f, 172.6563f, 182.0313f, 204.2969f, 219.1406f, 231.2500f, 237.5000f, 225.0000f, 189.4531f, 135.9375f, 86.7188f, 51.9531f, - 63.2813f, 0.0000f, -33.9844f, -33.2031f, -58.9844f, -129.2969f, -160.1563f, -235.5469f, -299.6094f, -402.3438f, -526.5625f, -707.8125f, -677.7344f, -264.8438f, -110.9375f, -2.3438f, - -60.9375f, 14.0625f, 5.8594f, 10.1563f, 16.0156f, 46.0938f, 78.5156f, 103.5156f, 132.4219f, 149.2188f, 164.0625f, 169.9219f, 147.2656f, 103.1250f, 62.1094f, 32.8125f, - -26.9531f, -107.0313f, -160.5469f, -61.7188f, 23.4375f, -21.8750f, -74.2188f, -119.1406f, -144.9219f, -151.9531f, -160.5469f, -158.9844f, -132.0313f, -107.8125f, -67.5781f, -38.6719f, - 0.0000f, -10.1563f, -76.5625f, -148.0469f, -144.1406f, -127.7344f, -75.3906f, -57.8125f, -30.0781f, -3.9063f, 24.6094f, 38.2813f, 38.2813f, 19.1406f, 15.6250f, -1.9531f, - -58.2031f, -168.7500f, -284.7656f, -360.5469f, -362.1094f, -299.2188f, -221.8750f, -177.7344f, -130.0781f, -85.5469f, -47.6563f, -11.3281f, 4.2969f, 3.5156f, 7.8125f, 21.0938f, - 69.1406f, 25.0000f, -23.4375f, -90.6250f, -160.5469f, -215.6250f, -217.5781f, -214.8438f, -198.8281f, -181.2500f, -148.4375f, -129.2969f, -116.0156f, -112.5000f, -83.9844f, -66.4063f, - -6.2500f, 171.4844f, 379.2969f, 431.2500f, 472.2656f, 516.7969f, 523.0469f, 536.7188f, 514.4531f, 477.7344f, 432.4219f, 383.9844f, 305.0781f, 208.9844f, 123.0469f, 58.9844f, - -168.7500f, -283.9844f, -267.9688f, -132.8125f, -60.9375f, -15.6250f, 7.0313f, 39.8438f, 66.0156f, 100.3906f, 119.5313f, 130.8594f, 115.6250f, 83.2031f, 53.5156f, 37.8906f -}; -/* An 16-by-16 matrix */ -const float AUWB2_SN1[256] = -{ - -41.7969f, -174.2188f, -326.1719f, -406.6406f, -450.0000f, -453.5156f, -447.6563f, -378.5156f, -323.4375f, -208.2031f, -98.0469f, -94.5313f, -54.2969f, 67.1875f, 37.1094f, 182.0313f, - 410.9375f, 393.7500f, 410.9375f, 341.7969f, 337.5000f, 292.1875f, 305.8594f, 269.5313f, 294.5313f, 279.2969f, 268.7500f, 133.5938f, 76.1719f, -12.5000f, -98.0469f, -198.8281f, - -121.4844f, -66.4063f, 142.9688f, 246.8750f, 292.1875f, 337.1094f, 383.9844f, 407.0313f, 436.7188f, 464.0625f, 442.5781f, 349.6094f, 284.3750f, 242.5781f, 179.6875f, 163.2813f, - 237.5000f, 205.0781f, 125.7813f, 11.7188f, -92.5781f, -188.6719f, -336.7188f, -460.1563f, -644.9219f, -853.1250f, -1082.0313f, -526.9531f, -167.9688f, -10.9375f, 50.0000f, 219.5313f, - 115.6250f, 66.7969f, -75.0000f, -167.5781f, -190.6250f, -183.5938f, -192.1875f, -184.7656f, -175.0000f, -137.5000f, -94.5313f, -120.7031f, -131.6406f, -82.0313f, -103.5156f, -71.0938f, - 324.6094f, 274.6094f, 178.1250f, 84.7656f, 64.4531f, 25.3906f, 6.6406f, -20.7031f, -26.1719f, -30.4688f, -14.8438f, -86.7188f, -132.8125f, -128.5156f, -136.3281f, -152.7344f, - 63.2813f, -5.0781f, -61.7188f, -130.8594f, -205.4688f, -275.3906f, -385.1563f, -486.3281f, -640.6250f, -839.4531f, -1075.7813f, -525.0000f, -145.3125f, -4.6875f, 52.3438f, 220.3125f, - -30.8594f, -151.9531f, -222.2656f, -273.0469f, -316.7969f, -367.1875f, -413.2813f, -507.4219f, -599.2188f, -811.3281f, -762.8906f, -198.0469f, -84.3750f, 55.8594f, 74.6094f, 237.1094f, - -41.4063f, -45.3125f, -82.0313f, -87.8906f, -126.1719f, -128.9063f, -192.9688f, -191.7969f, -273.4375f, -295.7031f, -412.8906f, -556.2500f, -867.9688f, -589.4531f, -101.1719f, 135.9375f, - -142.9688f, -292.1875f, -459.7656f, -475.0000f, -397.2656f, -272.6563f, -173.4375f, -60.1563f, 3.9063f, 111.3281f, 141.0156f, 110.9375f, 99.6094f, 140.2344f, 73.0469f, 142.5781f, - 30.0781f, 174.6094f, 163.2813f, 185.5469f, 176.9531f, 179.2969f, 185.5469f, 201.1719f, 219.5313f, 253.1250f, 257.0313f, 176.5625f, 143.3594f, 130.4688f, 95.3125f, 79.6875f, - 3.9063f, 76.9531f, 66.4063f, 64.8438f, 56.2500f, 23.4375f, 20.3125f, -0.7813f, -7.8125f, -15.6250f, 7.0313f, -92.9688f, -108.9844f, -169.5313f, -176.1719f, -315.2344f, - -179.6875f, -278.5156f, -213.6719f, -59.7656f, 25.0000f, 94.9219f, 150.7813f, 192.1875f, 242.1875f, 293.7500f, 296.4844f, 209.3750f, 173.8281f, 126.5625f, 58.9844f, -12.5000f, - -96.0938f, -154.6875f, -161.3281f, -144.9219f, -138.2813f, -123.8281f, -119.9219f, -89.0625f, -76.1719f, -39.4531f, -14.0625f, -67.9688f, -76.9531f, -63.2813f, -101.9531f, -136.3281f, - -128.5156f, -93.7500f, 127.3438f, 180.4688f, 167.1875f, 134.3750f, 158.2031f, 146.0938f, 171.4844f, 169.5313f, 182.4219f, 49.6094f, 33.2031f, -60.1563f, -96.8750f, -266.7969f, - -4.6875f, 5.8594f, -86.7188f, -88.6719f, -12.1094f, 48.4375f, 78.1250f, 114.8438f, 139.4531f, 211.3281f, 237.1094f, 179.2969f, 146.8750f, 137.5000f, 110.1563f, 110.5469f -}; -/* An 16-by-16 matrix */ -const float CNG_SN1[256] = -{ - 234.3750f, 640.6250f, 1187.1094f, 1662.8906f, 2153.1250f, 2632.8125f, 3120.7031f, 3581.6406f, 4059.7656f, 4535.9375f, 5031.2500f, 5507.8125f, 6007.0313f, 6466.4063f, 6959.3750f, 7389.8438f, - 464.0625f, 971.4844f, 1463.2813f, 1915.2344f, 2383.9844f, 2836.3281f, 3295.7031f, 3744.9219f, 4209.3750f, 4669.5313f, 5145.3125f, 5607.4219f, 6079.6875f, 6528.1250f, 6997.2656f, 7426.5625f, - 135.1563f, 312.1094f, 882.4219f, 1388.6719f, 1904.6875f, 2412.1094f, 2935.9375f, 3438.6719f, 3934.7656f, 4423.0469f, 4933.9844f, 5444.5313f, 5969.5313f, 6466.0156f, 6959.7656f, 7437.1094f, - 171.4844f, 631.2500f, 1346.0938f, 1852.7344f, 2372.2656f, 2846.8750f, 3341.0156f, 3799.2188f, 4276.1719f, 4728.9063f, 5200.0000f, 5653.9063f, 6113.2813f, 6551.9531f, 6989.8438f, 7412.8906f, - 359.7656f, 703.1250f, 1162.5000f, 1565.2344f, 1994.1406f, 2397.2656f, 2803.9063f, 3183.5938f, 3537.8906f, 3872.6563f, 4300.3906f, 4900.3906f, 5340.2344f, 6055.4688f, 6807.8125f, 7393.3594f, - 350.0000f, 741.7969f, 1185.5469f, 1612.5000f, 2070.7031f, 2511.3281f, 2970.3125f, 3405.8594f, 3861.7188f, 4319.9219f, 4850.3906f, 5320.7031f, 5844.5313f, 6302.7344f, 6826.1719f, 7210.9375f, - 282.0313f, 588.6719f, 991.0156f, 1342.5781f, 1690.6250f, 2027.3438f, 2350.7813f, 2672.2656f, 2963.6719f, 3258.9844f, 3486.3281f, 3715.2344f, 3874.6094f, 4326.1719f, 5317.5781f, 5867.5781f, - 123.0469f, 239.0625f, 652.7344f, 1136.7188f, 1558.5938f, 1985.5469f, 2390.6250f, 2800.7813f, 3198.4375f, 3583.2031f, 3964.0625f, 4369.5313f, 4785.1563f, 5180.4688f, 5582.0313f, 5970.3125f, - 345.7031f, 753.1250f, 1175.7813f, 1551.9531f, 1934.3750f, 2304.6875f, 2675.0000f, 3034.7656f, 3398.8281f, 3753.5156f, 4133.2031f, 4507.8125f, 4885.9375f, 5253.9063f, 5629.6875f, 5995.7031f, - 132.0313f, 398.4375f, 1037.8906f, 1459.3750f, 1890.2344f, 2262.1094f, 2658.5938f, 3031.2500f, 3413.2813f, 3773.0469f, 4151.1719f, 4518.3594f, 4896.0938f, 5260.9375f, 5631.2500f, 5989.8438f, - 439.8438f, 767.1875f, 1171.4844f, 1505.8594f, 1860.9375f, 2190.6250f, 2532.0313f, 2846.0938f, 3167.5781f, 3448.0469f, 3738.2813f, 4159.7656f, 4687.1094f, 5126.9531f, 5555.8594f, 5957.8125f, - 150.3906f, 318.3594f, 781.2500f, 1148.0469f, 1525.7813f, 1905.8594f, 2262.8906f, 2630.4688f, 2992.5781f, 3330.4688f, 3636.3281f, 3963.2813f, 4530.0781f, 5060.5469f, 5510.1563f, 5953.5156f, - 247.2656f, 564.4531f, 937.5000f, 1286.3281f, 1654.2969f, 2019.9219f, 2399.6094f, 2767.1875f, 3147.2656f, 3507.8125f, 3876.5625f, 4267.1875f, 4682.4219f, 5077.3438f, 5475.0000f, 5882.0313f, - 228.1250f, 487.5000f, 878.9063f, 1223.0469f, 1582.0313f, 1921.8750f, 2269.9219f, 2598.4375f, 2918.3594f, 3220.3125f, 3481.6406f, 3703.1250f, 3979.6875f, 4775.3906f, 5418.3594f, 5907.4219f, - 451.9531f, 710.9375f, 1072.2656f, 1369.1406f, 1700.7813f, 1991.0156f, 2317.1875f, 2596.8750f, 2893.7500f, 3138.2813f, 3373.0469f, 3548.0469f, 3897.2656f, 4776.5625f, 5398.0469f, 5901.5625f, - 223.4375f, 547.2656f, 982.0313f, 1367.5781f, 1758.9844f, 2134.7656f, 2526.9531f, 2904.2969f, 3287.5000f, 3643.7500f, 4025.7813f, 4417.5781f, 4815.6250f, 5196.4844f, 5588.2813f, 5961.3281f -}; - /* An 16-by-16 matrix */ const Word16 CNG_SN1_fx[256] = {//Qlog2(2.56) @@ -20075,147 +11380,6 @@ const Word16 CNG_SN1_fx[256] = 572, 1401, 2514, 3501, 4503, 5465, 6469, 7435, 8416, 9328, 10306, 11309, 12328, 13303, 14306, 15261, }; -/* An 16-by-32 matrix */ -const float IAA_MA1[512] = -{ - -68.3594f, -191.4063f, -203.1250f, -246.4844f, -251.9531f, -239.8438f, -238.2813f, -214.0625f, -196.4844f, -168.7500f, -137.8906f, -117.5781f, -92.9688f, -55.0781f, -26.1719f, 10.1563f, - 117.5781f, 158.9844f, 88.6719f, 37.5000f, -4.6875f, -7.0313f, -5.0781f, 0.7813f, 15.2344f, 41.7969f, 48.4375f, 35.9375f, 32.4219f, 39.0625f, 24.2188f, 28.1250f, - -109.3750f, -287.8906f, -222.2656f, -64.0625f, -3.5156f, 39.0625f, 55.0781f, 82.4219f, 98.4375f, 109.7656f, 107.0313f, 84.7656f, 80.4688f, 85.5469f, 45.7031f, 41.4063f, - -103.9063f, -294.1406f, -328.5156f, -229.2969f, -190.2344f, -134.7656f, -102.7344f, -65.2344f, -44.5313f, -11.7188f, 3.1250f, 12.5000f, 13.2813f, 23.8281f, 21.4844f, 40.6250f, - -35.5469f, -53.5156f, -114.4531f, -136.3281f, -137.5000f, -127.3438f, -104.6875f, -96.4844f, -69.5313f, -50.3906f, -21.8750f, -37.5000f, -4.2969f, 85.5469f, 19.1406f, 21.8750f, - -7.0313f, 0.3906f, -12.8906f, -5.4688f, -7.4219f, -1.9531f, -8.5938f, -5.4688f, -16.7969f, -14.4531f, -40.6250f, -55.8594f, -146.4844f, -300.7813f, -74.2188f, -39.0625f, - 28.1250f, -8.5938f, -47.2656f, -85.9375f, -125.0000f, -147.6563f, -195.3125f, -229.2969f, -284.7656f, -310.5469f, -412.5000f, -509.7656f, -660.5469f, -425.7813f, -176.5625f, -23.4375f, - 7.4219f, -108.9844f, -176.9531f, -226.5625f, -229.6875f, -288.6719f, -335.1563f, -407.8125f, -500.3906f, -630.4688f, -359.7656f, -146.8750f, -106.6406f, -32.8125f, -0.7813f, 73.0469f, - 333.2031f, 296.4844f, 230.8594f, 146.8750f, 101.5625f, 47.6563f, 15.2344f, -27.7344f, -51.9531f, -71.8750f, -81.6406f, -116.0156f, -116.7969f, -66.7969f, -48.4375f, -32.4219f, - 103.9063f, 13.2813f, -71.0938f, -143.3594f, -201.5625f, -267.9688f, -344.1406f, -437.8906f, -552.3438f, -716.4063f, -824.2188f, -389.4531f, -202.7344f, -107.0313f, -42.5781f, 53.5156f, - -0.7813f, -3.1250f, 16.4063f, 35.5469f, 67.1875f, 82.4219f, 116.4063f, 131.2500f, 169.1406f, 159.7656f, 213.2813f, 407.4219f, 585.5469f, 405.4688f, 160.1563f, 73.8281f, - 33.5938f, 99.2188f, 101.1719f, 99.2188f, 96.0938f, 85.5469f, 71.8750f, 47.6563f, 30.8594f, 4.2969f, -21.4844f, -66.4063f, -141.7969f, -364.8438f, -144.9219f, -73.4375f, - 65.6250f, 65.2344f, -47.6563f, -95.3125f, -126.9531f, -132.8125f, -140.2344f, -133.9844f, -129.2969f, -113.6719f, -108.5938f, -105.4688f, -106.2500f, -63.2813f, -39.4531f, -17.9688f, - -95.3125f, -179.2969f, -143.3594f, -132.8125f, -115.2344f, -85.9375f, -67.5781f, -41.7969f, -8.5938f, 20.7031f, 40.2344f, 114.4531f, 423.4375f, 315.2344f, 101.5625f, 45.7031f, - -124.6094f, -253.9063f, -267.5781f, -166.7969f, -113.2813f, -41.0156f, 9.7656f, 62.8906f, 118.3594f, 163.2813f, 229.2969f, 419.5313f, 610.5469f, 423.8281f, 156.2500f, 66.4063f, - 57.0313f, 100.3906f, 110.1563f, 115.2344f, 118.3594f, 114.8438f, 116.0156f, 102.3438f, 92.5781f, 75.3906f, 35.9375f, 133.2031f, 476.5625f, 345.3125f, 123.0469f, 56.2500f, - -113.6719f, -217.9688f, 57.4219f, 78.5156f, 110.1563f, 109.3750f, 121.0938f, 117.9688f, 122.2656f, 119.5313f, 114.0625f, 93.3594f, 77.3438f, 73.4375f, 41.4063f, 36.7188f, - -4.2969f, -3.1250f, -60.9375f, -79.6875f, -90.2344f, -97.6563f, -103.5156f, -112.8906f, -105.0781f, -123.4375f, -125.7813f, -175.7813f, -190.6250f, -264.0625f, -303.9063f, -380.0781f, - -45.7031f, -10.5469f, 1.5625f, 37.5000f, 67.9688f, 89.4531f, 105.8594f, 121.0938f, 134.3750f, 141.4063f, 134.3750f, 106.6406f, 81.6406f, 70.3125f, 42.5781f, 41.4063f, - -101.5625f, -113.2813f, 58.9844f, 105.0781f, 158.5938f, 172.6563f, 215.2344f, 230.4688f, 265.2344f, 266.0156f, 351.5625f, 505.0781f, 637.1094f, 442.1875f, 186.3281f, 86.3281f, - -14.4531f, 146.0938f, 153.9063f, 161.7188f, 163.6719f, 154.2969f, 134.7656f, 122.2656f, 110.1563f, 99.6094f, 82.4219f, 49.2188f, 32.8125f, 19.9219f, -3.9063f, -20.7031f, - 157.8125f, 127.7344f, 67.9688f, 10.9375f, -48.4375f, -113.2813f, -191.4063f, -271.4844f, -394.9219f, -433.9844f, -206.6406f, -112.5000f, -71.4844f, -26.9531f, -2.7344f, 55.4688f, - 219.9219f, 293.7500f, 228.5156f, 216.7969f, 200.0000f, 186.7188f, 165.6250f, 154.6875f, 146.8750f, 133.9844f, 117.1875f, 75.7813f, 75.3906f, 63.2813f, 30.4688f, 17.9688f, - -23.0469f, -51.1719f, -13.6719f, 19.1406f, 21.0938f, -4.6875f, -35.9375f, -72.2656f, -94.9219f, -112.8906f, -112.5000f, -134.3750f, -127.3438f, 0.0000f, -14.8438f, 2.3438f, - 193.7500f, 227.3438f, 220.3125f, 200.7813f, 203.5156f, 191.4063f, 189.8438f, 170.3125f, 168.7500f, 125.0000f, 178.1250f, 414.0625f, 594.9219f, 413.2813f, 163.6719f, 75.7813f, - 67.9688f, 30.0781f, 7.0313f, -34.7656f, -43.7500f, -76.5625f, -64.4531f, -96.4844f, -86.7188f, -127.3438f, -129.6875f, -192.9688f, 194.9219f, 241.0156f, 47.2656f, 23.4375f, - 123.0469f, 116.7969f, 89.4531f, 53.5156f, 30.4688f, -1.1719f, -15.6250f, -53.9063f, -77.3438f, -119.9219f, -146.4844f, -196.0938f, -201.1719f, -9.7656f, -34.3750f, -19.1406f, - -90.6250f, -11.3281f, 137.8906f, 155.8594f, 189.4531f, 190.2344f, 204.2969f, 205.4688f, 217.1875f, 218.3594f, 203.1250f, 162.1094f, 128.1250f, 110.5469f, 73.0469f, 64.8438f, - 71.0938f, 150.3906f, 157.4219f, 176.9531f, 201.1719f, 223.4375f, 248.0469f, 269.9219f, 307.4219f, 332.8125f, 450.7813f, 579.2969f, 694.9219f, 480.8594f, 204.6875f, 96.0938f, - -106.6406f, -192.1875f, -72.2656f, -37.8906f, -20.3125f, -19.9219f, -6.6406f, -10.5469f, 5.0781f, 7.8125f, 17.5781f, -7.8125f, 20.3125f, 95.3125f, 22.6563f, 21.8750f, - 7.8125f, -1.1719f, -94.1406f, -104.2969f, -75.7813f, -33.5938f, 1.5625f, 29.2969f, 54.6875f, 74.6094f, 78.1250f, 60.1563f, 53.5156f, 57.0313f, 33.2031f, 30.0781f, - 35.9375f, 245.3125f, 238.6719f, 276.5625f, 275.7813f, 279.6875f, 262.5000f, 271.0938f, 255.8594f, 241.7969f, 214.8438f, 168.7500f, 138.2813f, 110.9375f, 79.6875f, 67.1875f -}; -/* An 16-by-8 matrix */ -const float GESVNB_AR1[128] = -{ - -9.7656f, -25.0000f, -54.6875f, -46.0938f, 105.4688f, 93.7500f, 49.6094f, 27.3438f, 7.8125f, -15.6250f, -21.8750f, -43.3594f, -32.0313f, 25.0000f, 0.7813f, 1.9531f, - 31.6406f, 40.6250f, 27.7344f, 27.3438f, 0.0000f, -19.1406f, -21.0938f, -28.5156f, -23.0469f, -35.9375f, -39.8438f, -78.5156f, -157.8125f, -20.3125f, -15.6250f, -5.8594f, - -43.7500f, -84.7656f, -98.0469f, -78.9063f, -13.2813f, 22.2656f, 22.6563f, 24.2188f, 30.8594f, 49.6094f, 69.1406f, 119.5313f, 204.6875f, 123.0469f, 43.7500f, 20.7031f, - 6.6406f, -2.3438f, 13.2813f, 25.7813f, 5.4688f, -10.1563f, -67.9688f, -76.5625f, -55.4688f, -51.1719f, -39.8438f, -37.8906f, 70.3125f, 60.1563f, 11.3281f, 6.6406f, - 1.9531f, -10.5469f, -41.7969f, -76.9531f, -133.9844f, -130.0781f, -71.0938f, -55.8594f, -35.5469f, -6.6406f, 16.7969f, 46.8750f, 149.6094f, 104.2969f, 32.4219f, 15.6250f, - -0.3906f, -5.8594f, -13.6719f, -21.8750f, -66.0156f, -56.6406f, 33.5938f, 39.4531f, 30.0781f, 18.7500f, 11.3281f, 30.4688f, -3.5156f, 26.5625f, 5.8594f, 3.5156f, - 1.1719f, 3.5156f, 125.0000f, 175.7813f, 150.3906f, 135.9375f, 83.9844f, 60.5469f, 41.0156f, 17.5781f, -5.0781f, -29.2969f, -106.2500f, -50.3906f, -20.3125f, -8.9844f, - 1.5625f, 19.1406f, 21.0938f, 35.1563f, 35.9375f, 39.4531f, 23.0469f, 26.9531f, 7.8125f, 27.3438f, 8.9844f, 16.7969f, -109.3750f, -243.7500f, -44.5313f, -21.4844f -}; -/* An 16-by-8 matrix */ -const float GESVNB_AR2[128] = -{ - -8.5938f, -13.6719f, -12.1094f, -64.8438f, -64.0625f, 84.7656f, 82.8125f, 60.5469f, 64.8438f, 48.0469f, 26.1719f, 12.8906f, -8.2031f, -16.0156f, -1.1719f, -0.3906f, - -5.4688f, -7.8125f, -6.2500f, -27.3438f, -30.0781f, -20.7031f, 8.9844f, -2.7344f, -38.2813f, -48.0469f, -38.6719f, -19.1406f, 139.4531f, 44.5313f, 14.0625f, 7.4219f, - -22.2656f, -46.4844f, -118.3594f, -83.9844f, -12.8906f, -40.2344f, -37.8906f, -45.7031f, -41.0156f, -39.8438f, -26.1719f, -52.3438f, -68.7500f, 44.1406f, 6.2500f, 3.1250f, - -4.6875f, 5.4688f, 11.7188f, -14.4531f, -43.7500f, -88.2813f, -80.4688f, -9.7656f, 48.8281f, 52.3438f, 38.6719f, 32.4219f, 21.4844f, -1.5625f, 3.5156f, 1.5625f, - -7.4219f, 8.9844f, 66.7969f, 22.2656f, 5.0781f, -5.8594f, -10.1563f, -16.4063f, -25.3906f, -26.9531f, -30.0781f, -66.0156f, -137.1094f, -41.0156f, -19.1406f, -8.2031f, - -5.4688f, -3.9063f, 3.1250f, 13.6719f, 62.8906f, 40.6250f, -28.9063f, -39.8438f, -52.7344f, -18.3594f, 17.5781f, 103.1250f, 20.3125f, -26.9531f, -0.3906f, -1.9531f, - 83.2031f, 110.9375f, 89.8438f, 47.2656f, 19.5313f, 4.6875f, 16.7969f, 18.7500f, 10.5469f, -2.7344f, -9.3750f, -15.2344f, 29.2969f, 0.3906f, -3.5156f, -1.1719f, - -29.2969f, -53.5156f, -34.7656f, 107.4219f, 64.0625f, 25.3906f, 48.8281f, 35.5469f, 33.5938f, 35.5469f, 21.8750f, 3.9063f, 3.5156f, -3.9063f, 0.0000f, 0.0000f -}; -/* An 16-by-8 matrix */ -const float GESVWB_AR1[128] = -{ - -1.1719f, -6.2500f, -12.1094f, 0.7813f, -31.6406f, -48.0469f, -88.2813f, -101.5625f, -76.5625f, -47.6563f, -7.8125f, 30.4688f, 69.5313f, 56.6406f, 32.8125f, 17.9688f, - 21.4844f, 16.4063f, 5.8594f, 12.5000f, -18.7500f, -31.6406f, -42.5781f, -53.5156f, -73.0469f, -103.1250f, -128.9063f, -151.1719f, -141.7969f, -68.7500f, -14.8438f, 14.4531f, - -12.5000f, -27.3438f, -56.2500f, -105.0781f, -131.6406f, -71.4844f, 23.0469f, 22.6563f, 17.1875f, 19.1406f, 16.4063f, 19.9219f, 28.1250f, 19.5313f, 10.1563f, 14.8438f, - -7.0313f, -22.6563f, -30.8594f, 48.8281f, 137.5000f, 113.6719f, 70.3125f, 46.0938f, 28.1250f, 9.7656f, -8.9844f, -32.0313f, -72.2656f, -65.2344f, -12.8906f, 2.3438f, - -3.9063f, 52.7344f, 212.5000f, 201.9531f, 201.9531f, 219.1406f, 201.1719f, 206.2500f, 195.3125f, 184.3750f, 161.3281f, 149.6094f, 124.2188f, 85.5469f, 46.0938f, 22.2656f, - -21.0938f, -109.3750f, -239.8438f, -214.0625f, -203.5156f, -203.9063f, -175.0000f, -187.1094f, -178.5156f, -171.0938f, -147.2656f, -138.6719f, -124.2188f, -105.8594f, -86.7188f, -34.7656f, - -24.2188f, -37.5000f, -33.5938f, -3.9063f, 40.6250f, 60.5469f, 46.8750f, 43.7500f, 74.2188f, 103.1250f, 113.6719f, 106.2500f, 90.6250f, 64.8438f, 37.1094f, 10.5469f, - 12.8906f, 23.8281f, 60.5469f, 47.2656f, 3.5156f, -10.9375f, 2.3438f, 40.2344f, 25.0000f, 6.6406f, 1.5625f, -0.7813f, -12.1094f, -34.3750f, -81.6406f, -80.4688f -}; -/* An 16-by-8 matrix */ -const float GESVWB_AR2[128] = -{ - -57.4219f, -127.3438f, -164.4531f, -35.5469f, -8.5938f, -9.7656f, -5.4688f, -8.2031f, 12.5000f, 29.6875f, 40.6250f, 39.8438f, 25.3906f, 18.3594f, 19.5313f, 16.0156f, - -15.2344f, -6.2500f, 23.8281f, -5.0781f, -14.8438f, -21.8750f, 18.3594f, 59.7656f, 76.1719f, 83.2031f, 82.8125f, 85.9375f, 95.7031f, 95.7031f, 81.6406f, 33.5938f, - -13.2813f, -28.5156f, 32.0313f, 151.1719f, 77.7344f, 27.7344f, 21.8750f, -7.0313f, -12.8906f, -21.8750f, -34.3750f, -30.8594f, -1.9531f, 23.0469f, 21.4844f, 11.3281f, - -2.7344f, -8.2031f, -8.2031f, -61.7188f, -48.0469f, 118.7500f, 88.2813f, 65.6250f, 48.4375f, 3.1250f, -29.2969f, -35.5469f, -21.0938f, -1.9531f, 14.4531f, 11.7188f, - -10.1563f, -8.5938f, -26.1719f, -87.8906f, 41.7969f, 14.8438f, -32.0313f, -44.1406f, -83.2031f, -80.0781f, -24.2188f, 10.9375f, 34.7656f, 37.1094f, 20.3125f, 6.6406f, - 88.6719f, 157.8125f, 126.9531f, 52.3438f, 17.5781f, -6.2500f, 1.1719f, -5.8594f, -21.4844f, -25.3906f, -21.4844f, -21.0938f, -7.0313f, -3.1250f, 0.3906f, -5.4688f, - 7.4219f, 11.7188f, 4.6875f, 10.9375f, 18.7500f, 5.0781f, 0.7813f, -18.3594f, -14.8438f, 16.0156f, 11.3281f, -3.1250f, -60.1563f, -123.0469f, -160.5469f, -94.5313f, - 3.1250f, 9.3750f, 11.3281f, -23.8281f, -83.9844f, -128.5156f, -92.5781f, -41.4063f, -4.6875f, -4.6875f, -25.0000f, -46.0938f, -65.2344f, -46.4844f, 3.1250f, 20.3125f -}; -/* An 16-by-32 matrix */ -const float AUWB2_MA1[512] = -{ - 152.7344f, 116.4063f, 69.9219f, -14.4531f, -87.8906f, -151.1719f, -244.9219f, -337.5000f, -475.0000f, -642.1875f, -823.4375f, -314.0625f, -108.2031f, -1.9531f, 47.2656f, 182.8125f, - 137.1094f, 83.2031f, 55.0781f, -29.2969f, -50.7813f, -64.0625f, -129.6875f, -160.1563f, -204.6875f, -223.8281f, -224.6094f, -185.1563f, -129.2969f, -40.2344f, -8.5938f, 78.5156f, - 31.6406f, 341.4063f, 444.1406f, 477.7344f, 485.1563f, 492.9688f, 483.5938f, 462.8906f, 445.7031f, 423.8281f, 387.8906f, 286.3281f, 222.6563f, 165.6250f, 100.0000f, 56.6406f, - -2.3438f, -9.7656f, -41.0156f, -57.4219f, -127.7344f, -133.5938f, -229.2969f, -242.1875f, -372.6563f, -446.4844f, -733.5938f, -804.2969f, -139.0625f, -39.0625f, 52.3438f, 186.3281f, - -76.9531f, -197.2656f, -322.6563f, -407.4219f, -337.1094f, -189.4531f, -115.6250f, -40.2344f, -2.3438f, 69.5313f, 105.0781f, 95.7031f, 90.2344f, 125.0000f, 94.9219f, 161.3281f, - -202.3438f, -236.3281f, 110.1563f, 167.9688f, 207.8125f, 232.8125f, 264.0625f, 292.1875f, 315.6250f, 336.3281f, 325.7813f, 266.0156f, 208.5938f, 194.5313f, 114.4531f, 131.6406f, - -95.3125f, -219.9219f, -281.2500f, -233.9844f, -195.3125f, -192.9688f, -244.9219f, -288.6719f, -401.5625f, -476.1719f, -116.0156f, 3.5156f, 27.7344f, 106.2500f, 111.3281f, 219.9219f, - -175.0000f, -333.5938f, -357.8125f, -202.3438f, -112.1094f, -20.3125f, 21.8750f, 95.7031f, 135.5469f, 204.6875f, 217.5781f, 194.1406f, 162.5000f, 176.5625f, 125.3906f, 170.7031f, - 58.5938f, 44.1406f, 10.9375f, -10.1563f, 0.3906f, -31.2500f, -69.1406f, -88.2813f, -75.3906f, -60.9375f, -24.2188f, -88.6719f, -93.7500f, -149.6094f, -208.9844f, -316.0156f, - -93.7500f, -96.0938f, -67.9688f, -25.7813f, 31.2500f, 58.2031f, 95.3125f, 110.9375f, 161.3281f, 169.5313f, 184.7656f, 61.7188f, 21.8750f, -65.2344f, -127.3438f, -282.4219f, - 51.1719f, -4.2969f, 55.0781f, 12.5000f, 9.3750f, -47.6563f, -155.0781f, -238.2813f, -346.8750f, -317.1875f, 11.7188f, 90.6250f, 119.5313f, 144.9219f, 133.2031f, 174.2188f, - -61.7188f, -212.8906f, -206.6406f, 58.9844f, 55.4688f, -39.4531f, -166.4063f, -279.6875f, -402.7344f, -577.7344f, -605.4688f, -137.5000f, -51.5625f, 56.6406f, 73.0469f, 201.9531f, - 57.8125f, -40.6250f, -173.8281f, -328.5156f, -12.1094f, 71.4844f, -33.5938f, -123.4375f, -240.2344f, -257.8125f, -90.2344f, 32.8125f, 75.0000f, 107.4219f, 78.5156f, 121.4844f, - -71.4844f, -85.9375f, -94.9219f, -71.0938f, -92.5781f, -68.7500f, -103.9063f, -91.0156f, -131.2500f, -132.4219f, -253.9063f, -398.0469f, -645.3125f, -330.4688f, -20.3125f, 151.1719f, - -40.6250f, -45.7031f, -99.2188f, -129.6875f, -74.6094f, 0.3906f, 25.0000f, 71.0938f, 123.8281f, 193.3594f, 244.5313f, 224.2188f, 202.7344f, 198.4375f, 178.1250f, 197.2656f, - -58.9844f, -92.5781f, 192.1875f, 187.1094f, 106.6406f, 54.2969f, 14.0625f, -23.4375f, -46.4844f, 28.9063f, 67.9688f, 73.4375f, 116.4063f, 142.9688f, 135.5469f, 186.7188f, - 61.7188f, 8.9844f, -82.0313f, -175.7813f, -262.8906f, -248.8281f, -165.2344f, -129.2969f, -51.9531f, 5.4688f, 50.0000f, 26.9531f, 24.2188f, 55.8594f, 66.7969f, 122.2656f, - 195.7031f, 153.9063f, 14.4531f, -22.2656f, 26.1719f, 27.3438f, 17.9688f, 13.6719f, 35.9375f, 46.8750f, 131.6406f, 100.7813f, 107.8125f, 110.5469f, 143.7500f, 195.3125f, - 16.4063f, -61.3281f, -155.4688f, -234.3750f, -289.8438f, -304.6875f, -305.0781f, -382.8125f, -455.4688f, -636.3281f, -378.1250f, -58.2031f, -38.6719f, 73.4375f, 81.6406f, 206.6406f, - -93.7500f, 74.2188f, 181.6406f, 212.1094f, 224.6094f, 220.7031f, 236.3281f, 232.8125f, 255.0781f, 233.9844f, 227.7344f, 108.9844f, 79.2969f, -19.9219f, -72.6563f, -230.0781f, - 123.4375f, 144.9219f, 162.8906f, 145.3125f, 114.4531f, 73.8281f, 89.8438f, 60.1563f, 71.8750f, 35.5469f, 36.7188f, -68.3594f, -77.3438f, -139.8438f, -177.3438f, -287.5000f, - 28.1250f, -62.1094f, -141.4063f, -194.9219f, -247.2656f, -269.5313f, -310.1563f, -288.6719f, -258.5938f, -178.1250f, -140.6250f, -132.0313f, -98.0469f, -2.3438f, 19.5313f, 135.1563f, - -78.9063f, -129.6875f, -167.1875f, -180.4688f, -198.4375f, -171.8750f, -215.6250f, -252.7344f, -345.7031f, -475.3906f, -676.9531f, -241.7969f, -63.2813f, 37.1094f, 78.9063f, 199.2188f, - -35.5469f, -152.7344f, -276.9531f, -345.3125f, -395.3125f, -391.0156f, -365.6250f, -278.9063f, -198.8281f, -77.3438f, 16.4063f, 38.6719f, 46.4844f, 101.9531f, 92.9688f, 193.7500f, - -144.5313f, 35.9375f, 185.9375f, 235.9375f, 266.0156f, 297.6563f, 322.6563f, 348.8281f, 364.8438f, 391.0156f, 372.6563f, 305.8594f, 245.7031f, 230.4688f, 160.9375f, 182.4219f, - -75.3906f, -8.5938f, -10.9375f, 17.9688f, 83.5938f, 151.1719f, 196.0938f, 251.1719f, 284.3750f, 337.5000f, 335.5469f, 282.4219f, 226.9531f, 222.2656f, 169.9219f, 188.6719f, - 87.1094f, 113.6719f, 247.2656f, 198.4375f, 136.7188f, 55.0781f, -60.9375f, -185.9375f, -363.2813f, -553.5156f, -706.6406f, -298.4375f, -80.4688f, 30.0781f, 74.6094f, 201.1719f, - -185.5469f, -308.9844f, -162.8906f, 29.2969f, 78.5156f, 133.9844f, 159.3750f, 214.4531f, 239.0625f, 276.1719f, 267.9688f, 223.4375f, 180.8594f, 178.5156f, 125.3906f, 145.7031f, - 328.9063f, 279.6875f, 261.3281f, 231.6406f, 163.6719f, 165.2344f, 145.7031f, 125.3906f, 106.6406f, 109.3750f, 138.2813f, 84.7656f, 75.3906f, 90.6250f, 68.3594f, 114.8438f, - 45.3125f, -23.4375f, -56.2500f, -116.7969f, -164.4531f, -215.2344f, -285.9375f, -371.8750f, -469.9219f, -649.2188f, -779.6875f, -209.7656f, -93.7500f, 21.4844f, 53.9063f, 189.8438f, - -126.1719f, -259.7656f, -267.9688f, -83.5938f, -78.5156f, -101.5625f, -145.7031f, -128.5156f, -130.0781f, -64.4531f, 25.7813f, 37.5000f, 68.3594f, 121.0938f, 113.6719f, 189.8438f, - -7.4219f, 16.7969f, 13.6719f, 15.6250f, 16.4063f, 21.4844f, 24.6094f, 39.4531f, 51.9531f, 75.7813f, 86.7188f, 59.3750f, 45.7031f, 56.6406f, 51.9531f, 83.2031f -}; - -/* An 16-by-16 matrix */ -const float SVWB2_SN1[256] = { - -100.78f, -150.78f, -263.28f, 361.72f, 550.39f, 341.41f, 287.11f, 200.00f, 243.75f, 229.30f, 192.58f, 268.75f, 330.08f, 203.52f, 167.19f, 37.11f, - -12.89f, -35.16f, 408.98f, 260.16f, 128.52f, -23.05f, -126.95f, -110.16f, -278.13f, -305.86f, -89.84f, 10.94f, -138.67f, -169.92f, -194.53f, -137.11f, - 71.48f, 43.36f, 200.39f, 291.41f, 142.58f, 35.55f, -83.98f, -186.33f, -157.03f, -194.14f, -364.06f, -460.94f, -555.47f, -423.83f, -178.13f, -3.52f, - -111.72f, -151.56f, -127.34f, 123.83f, 67.19f, 107.42f, 92.97f, 215.23f, 216.80f, 224.22f, 241.41f, 280.08f, 293.36f, 239.06f, 172.27f, 91.02f, - 37.50f, 69.92f, 79.30f, -43.75f, -181.64f, -230.86f, -83.20f, 48.44f, 12.89f, 75.00f, 95.70f, 36.72f, -16.02f, -114.84f, -198.05f, -253.52f, - -36.72f, -64.45f, 395.31f, 361.72f, 269.14f, 180.08f, 232.03f, 229.30f, 155.47f, 156.25f, 137.11f, 190.23f, 188.67f, 165.63f, 115.23f, 85.55f, - -101.95f, -139.45f, -178.91f, -98.44f, -63.67f, -136.72f, -153.91f, -99.61f, 11.72f, 67.58f, 35.16f, 25.39f, 36.33f, 61.33f, 26.17f, 1.17f, - 16.80f, 39.45f, -19.14f, -233.20f, -333.20f, -307.81f, -222.27f, -209.38f, -304.69f, -237.11f, -66.02f, -48.83f, -29.30f, 37.50f, 38.67f, 60.16f, - 94.14f, 79.30f, 158.20f, 30.86f, -78.91f, -216.80f, -280.47f, -399.61f, -452.73f, -542.97f, -600.78f, -302.73f, -186.72f, -67.58f, -24.61f, 106.25f, - -64.45f, -114.06f, -158.59f, 409.77f, 304.30f, 136.33f, 87.89f, 4.69f, 103.52f, 14.84f, -71.48f, -174.22f, -154.69f, -32.03f, -6.64f, -57.42f, - 29.30f, 17.58f, -96.88f, -325.39f, 284.77f, 162.50f, 195.31f, 69.92f, -45.31f, 6.64f, 30.86f, 95.31f, 103.52f, 30.08f, -27.34f, -16.80f, - 249.61f, 275.78f, 188.67f, -15.63f, -207.03f, -77.73f, -42.58f, -155.86f, -94.92f, -169.53f, -278.52f, -316.80f, -365.23f, -303.52f, -129.69f, 10.16f, - 42.97f, 65.23f, -21.48f, -309.38f, -380.47f, 151.17f, 74.22f, 75.00f, 26.56f, -67.19f, -55.08f, -116.41f, -210.55f, -156.64f, -54.30f, 31.64f, - 57.81f, 120.31f, 65.63f, 20.70f, -111.33f, -105.47f, -83.20f, -70.31f, 53.91f, 78.13f, 76.17f, 25.39f, 185.94f, 263.28f, 248.44f, 195.70f, - 2.34f, 15.23f, -68.75f, 83.20f, 293.75f, 169.53f, 126.17f, 195.70f, 218.75f, 108.20f, 41.80f, -96.09f, -140.23f, -300.00f, -319.53f, -416.02f, - -91.02f, -115.23f, -227.34f, -448.05f, -339.84f, 30.08f, 56.25f, 130.86f, 105.08f, 196.09f, 249.22f, 280.86f, 240.23f, 146.88f, 85.55f, 67.19f -}; - const Word16 SVWB2_SN1_fx[256] = {//Qlog2(2.56) -257, -385, -673, 926, 1408, 874, 735, 512, 624, 587, 493, 688, 845, 521, 428, 95, -32, -90, 1046, 666, 329, -59, -324, -282, -712, -783, -229, 28, -354, -434, -497, -351, @@ -20235,26 +11399,6 @@ const Word16 SVWB2_SN1_fx[256] = {//Qlog2(2.56) -233, -294, -581, -1147, -869, 77, 144, 335, 269, 501, 638, 719, 614, 376, 219, 172 }; -/* An 16-by-16 matrix */ -const float SVWB2_SN2[256] = { - -39.45f, -51.17f, -213.28f, -326.17f, 191.02f, 196.09f, 204.30f, 116.02f, 53.52f, 77.73f, 105.47f, 67.19f, 7.03f, -19.92f, -57.81f, -24.61f, - 130.08f, 137.11f, 55.86f, 55.47f, 18.36f, -53.52f, -51.56f, -126.56f, -84.38f, -12.50f, 41.02f, 103.13f, 211.33f, 166.02f, 133.98f, 59.77f, - -36.33f, -65.63f, 71.88f, 236.33f, 145.70f, 92.58f, 72.66f, 68.36f, 120.31f, 125.78f, 175.00f, 80.08f, -50.39f, -188.28f, -186.33f, -200.00f, - -9.38f, -11.72f, 10.16f, -18.36f, -62.11f, -34.38f, -134.38f, -51.17f, -34.38f, -109.38f, -290.23f, -352.34f, -103.13f, 69.14f, 15.23f, -10.16f, - 101.17f, 97.66f, 44.92f, -29.30f, -72.66f, -127.73f, -140.63f, -92.58f, 104.69f, 208.20f, 92.19f, -133.59f, -217.19f, -130.47f, -71.09f, -11.72f, - 48.05f, 94.53f, 46.48f, 80.08f, 172.27f, 67.19f, 19.53f, -61.72f, -107.03f, -83.98f, -167.19f, -284.77f, -296.48f, -208.20f, -113.28f, -43.75f, - -62.89f, -87.50f, -200.39f, 153.52f, 179.69f, 84.38f, 70.31f, -36.72f, -30.47f, -125.00f, -184.77f, 5.08f, 87.50f, 76.95f, 49.61f, 14.84f, - -14.06f, -25.78f, 140.63f, 64.45f, -72.27f, -220.31f, -266.80f, -139.84f, -247.66f, -23.83f, 156.64f, 52.34f, -90.63f, -103.13f, -67.97f, 12.50f, - -54.69f, -76.95f, -183.98f, -139.06f, -208.20f, -126.56f, -104.69f, -29.69f, 101.95f, 101.17f, 85.16f, 63.28f, 80.47f, 103.91f, 91.41f, 65.63f, - 39.06f, 42.58f, -23.44f, -143.75f, -220.70f, -19.53f, 29.30f, -23.44f, -62.89f, -255.47f, -330.86f, 63.67f, 108.98f, 29.69f, -9.38f, 16.41f, - 4.69f, 34.38f, 48.44f, -21.48f, -35.55f, 77.34f, 113.28f, 82.81f, 94.14f, 71.88f, 3.91f, 6.25f, 219.14f, 264.84f, 241.80f, 136.72f, - -14.84f, -35.55f, 301.56f, 255.47f, 114.06f, 64.84f, 40.63f, 16.80f, -87.50f, -142.58f, -160.55f, -30.47f, -35.16f, -8.20f, 33.59f, 65.63f, - 17.58f, 0.78f, 22.66f, 31.25f, 114.84f, 160.55f, 173.05f, 255.86f, 235.94f, 251.17f, 244.14f, 207.03f, 146.09f, 89.06f, 65.23f, 50.00f, - -68.75f, -48.44f, -71.48f, -51.56f, -101.95f, -49.61f, 136.72f, 179.69f, 166.02f, 101.95f, -29.69f, -156.25f, -236.33f, -197.66f, -47.27f, -19.53f, - -37.50f, -35.94f, -107.42f, -68.75f, -85.94f, -126.56f, -155.86f, -197.27f, -238.67f, -207.42f, 48.44f, 104.69f, 91.80f, 106.64f, 50.39f, 62.50f, - -2.73f, 31.64f, 57.03f, -77.73f, -77.34f, 15.23f, -5.86f, 39.45f, 17.58f, 22.66f, 211.72f, 204.69f, 77.34f, -50.39f, -126.95f, -175.00f -}; - /* An 16-by-16 matrix */ const Word16 SVWB2_SN2_fx[256] = {//Qlog2(2.56) -100, -130, -545, -834, 489, 501, 523, 297, 137, 198, 270, 172, 17, -50, -147, -63, @@ -20275,29 +11419,6 @@ const Word16 SVWB2_SN2_fx[256] = {//Qlog2(2.56) -6, 80, 145, -198, -197, 38, -15, 100, 45, 58, 542, 524, 197, -128, -324, -448 }; -/* An 16-by-8 matrix */ -const float SVWB2_AR1[128] = { - -10.94f, -15.23f, -47.66f, 28.91f, 115.63f, 58.20f, 57.42f, 46.88f, 58.20f, 14.45f, -4.30f, -64.06f, -87.11f, -116.80f, -113.67f, -125.39f, - -8.98f, -11.72f, -53.91f, -124.61f, -150.78f, 62.11f, 48.44f, 20.31f, 12.89f, -17.19f, -5.86f, -30.47f, -37.89f, -21.09f, 15.63f, 25.00f, - -37.89f, -56.25f, -80.08f, -37.89f, 31.64f, 37.50f, 59.38f, 96.48f, 80.47f, 75.78f, 103.52f, 130.08f, 125.39f, 90.63f, 51.56f, 12.50f, - 42.19f, 41.41f, 40.23f, 14.84f, -5.47f, -7.03f, -23.83f, -56.25f, -63.28f, -62.50f, -100.78f, -158.20f, -210.94f, -123.44f, -48.44f, 7.42f, - 8.98f, 4.69f, 13.67f, -5.47f, -20.70f, -41.41f, -56.25f, -103.91f, -135.16f, -184.38f, -157.03f, -11.72f, -1.95f, -16.80f, -34.38f, -3.91f, - -20.70f, -46.09f, -79.30f, 162.11f, 126.95f, 66.80f, 47.27f, -12.11f, 18.75f, -12.11f, -23.44f, -25.78f, 50.00f, 75.78f, 55.08f, 26.56f, - -18.36f, -33.98f, 167.97f, 130.47f, 75.78f, 53.13f, 33.59f, 32.42f, 0.78f, -13.67f, 18.36f, 33.20f, 1.17f, -11.72f, -30.08f, -17.58f, - -1.95f, -5.47f, -3.52f, -15.23f, -53.13f, -94.92f, -84.77f, -21.48f, -15.23f, 70.31f, 74.61f, 23.83f, 16.41f, -1.56f, 2.34f, -14.84f -}; -/* An 16-by-8 matrix */ -const float SVWB2_AR2[128] = { - 4.69f, 6.64f, -17.97f, -60.94f, -128.52f, -114.84f, 16.80f, 55.08f, 23.83f, 5.86f, -3.52f, 11.33f, -28.91f, -16.02f, -14.84f, 6.25f, - -18.36f, -32.03f, -53.13f, 32.42f, -13.28f, -43.36f, -104.69f, -114.84f, 42.58f, 53.13f, 21.09f, -22.66f, -20.31f, 24.22f, 25.00f, 5.47f, - -5.86f, -7.81f, -66.80f, -135.55f, 101.17f, 63.28f, 34.38f, 5.08f, -22.27f, -10.16f, -23.05f, 9.38f, 3.91f, 5.47f, -16.02f, -3.13f, - 13.28f, 15.23f, 54.30f, 61.33f, 12.11f, 25.78f, -5.47f, 20.70f, 24.61f, 11.72f, -3.13f, -0.78f, -71.48f, -133.59f, -134.38f, -101.17f, - 5.47f, 6.64f, 17.97f, 2.73f, -21.48f, -25.00f, -53.13f, -51.95f, -124.22f, -118.36f, 102.34f, 57.42f, -7.81f, -22.27f, -11.72f, 11.72f, - -13.67f, -13.67f, 8.59f, 36.33f, 64.06f, 78.52f, 113.67f, 100.78f, 88.28f, 115.63f, 82.03f, 77.34f, 28.13f, 10.16f, 22.27f, 0.78f, - 13.28f, 26.17f, 28.52f, -3.13f, -40.63f, 17.19f, 12.11f, -5.08f, 27.73f, 28.13f, -7.03f, -19.14f, 167.97f, 146.09f, 85.16f, 35.94f, - 0.78f, -1.17f, 28.91f, 67.19f, 26.56f, -1.56f, -13.67f, -9.77f, -60.94f, -85.55f, -168.75f, -112.50f, -71.09f, -14.06f, 44.53f, 44.14f -}; - /* SVWB2_AR1 * 2.56f */ const Word16 SVWB2_AR1_fx[128] = {//Qlog2(2.56) -28, -38, -122, 74, 296, 148, 146, 120, 148, 36, -11, -163, -223, -299, -290, -320, @@ -20372,23 +11493,12 @@ const Word16 CB_p_lsf[] = }; // Q0 -#ifndef IVAS_FLOAT_FIXED -const float * const ModeMeans[] = {IANB_Ave, UVNB_Ave, SVNB_Ave, GENB_Ave, TRNB_Ave, AUNB_Ave, IAWB_Ave, UVWB_Ave, - SVWB_Ave, GEWB_Ave, TRWB_Ave, AUWB_Ave, IAWB2_Ave, NULL, SVWB2_Ave, GEWB2_Ave, TRWB2_Ave, AUWB2_Ave - }; -const float * const Predictors[] = {Predictor6, NULL, Predictor1, Predictor3, NULL, Predictor6,Predictor5, NULL, Predictor0, - Predictor2, NULL, Predictor5, Predictor7, NULL, Predictor8, Predictor4, NULL, Predictor7 - }; -#endif const Word16 *const ModeMeans_fx[] = { IANB_Ave_fx, UVNB_Ave_fx, SVNB_Ave_fx, GENB_Ave_fx, TRNB_Ave_fx, AUNB_Ave_fx, IAWB_Ave_fx, UVWB_Ave_fx, SVWB_Ave_fx, GEWB_Ave_fx, TRWB_Ave_fx, AUWB_Ave_fx, IAWB2_Ave_fx, NULL, SVWB2_Ave_fx, GEWB2_Ave_fx, TRWB2_Ave_fx, AUWB2_Ave_fx }; //Qlog2(2.56) const Word16 * const Predictors_fx[] = { Predictor6_fx, NULL, Predictor1_fx, Predictor3_fx, NULL, Predictor6_fx,Predictor5_fx, NULL, Predictor0_fx, Predictor2_fx, NULL, Predictor5_fx, Predictor7_fx, NULL, Predictor8_fx, Predictor4_fx, NULL, Predictor7_fx }; // Q15 -const float means_nb_31bits_ma_lsf_float[16] = {336.3281f , 531.2500f , 886.7188f , 1266.7969f , 1629.2969f , 1973.4375f , 2348.4375f , 2646.8750f , 2998.4375f , 3292.1875f , 3591.4062f , 3806.2500f , 4132.8125f , 4652.7344f , 5250.0000f , 5883.2031f}; -const float means_wb_31bits_ma_lsf_float[16] = {319.5312f , 548.0469f , 934.3750f , 1353.5156f , 1730.0781f , 2120.3125f , 2505.4688f , 2860.5469f , 3243.7500f , 3601.9531f , 3969.5312f , 4332.4219f , 4736.3281f , 5137.8906f , 5562.8906f , 5963.2812f}; - const Word16 CBsizes[] = { @@ -20509,12 +11619,6 @@ const Word16 predmode_tab[][6] = {1,1,2,1,0,2} /* should check how is the cb for audio mode at 13.2*/ }; // Q0 -const float * const Quantizers[] = {SVNB_SN1, SVNB_SN2, GETRNB_SN1, GETRNB_SN2, AUNB_SN1,SVWB_SN1, SVWB_SN2, GETRWB_SN1, - GETRWB_SN2, AUWB_SN1,TRWB2_SN1, TRWB2_SN2, AUWB2_SN1, CNG_SN1, SVWB2_SN1, SVWB2_SN2 }; -const float * const Quantizers_p[] = {IAA_MA1, UVD_MA1, UVD_MA2, UVWB_MA3, GESVNB_AR1, GESVNB_AR2, GESVWB_AR1, GESVWB_AR2, - GEWB2_MA1,GEWB_MA1, AUWB2_MA1, SVWB2_AR1, SVWB2_AR2 }; - - const Word16 SVNB_SN1_fx[256] = {//Qlog2(2.56) @@ -21085,7 +12189,6 @@ const Word16 *const Quantizers_fx[] = { SVNB_SN1_fx, SVNB_SN2_fx, GETRNB_SN1_fx, const Word16 *const Quantizers_p_fx[] = { IAA_MA1_fx, UVD_MA1_fx, UVD_MA2_fx, UVWB_MA3_fx, GESVNB_AR1_fx, GESVNB_AR2_fx, GESVWB_AR1_fx, GESVWB_AR2_fx, GEWB2_MA1_fx,GEWB_MA1_fx, AUWB2_MA1_fx, SVWB2_AR1_fx, SVWB2_AR2_fx };//Qlog2(2.56) - const float vals[NO_LEADERS][MAX_NO_VALS]= { {1.0f, 0.0f, 0.0f, 0.0f}, @@ -21294,60 +12397,6 @@ const Word16 pi0[] = 280,70, 8, 1120, 8, 8, 280, 168, 56, 420, 336, 840, 28, 168, 1, 168, 420, 168 }; // Q0 - -const float pl_HQ[] = /* vectors in first layers */ -{ - 1, 1, 0, 0, 0, 0, 0, 0, /* 112, 4, 28 */ - 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 128, 128, 1 */ - 1, 1, 1, 1, 0, 0, 0, 0, /* 1120, 16, 70 */ - 2, 0, 0, 0, 0, 0, 0, 0, /* 16 , 2, 8 */ - 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 5 */ /* 1024,128, 8 */ - 1, 1, 1, 1, 1, 1, 0, 0, /* 1792, 64, 28 */ - 2, 1, 1, 0, 0, 0, 0, 0, /* 1344, 8, 168 */ - 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 3584, 128, 28*/ - 1, 1, 1, 1, 1, 1, 1, 1, /*256, 256, 1*/ - 2, 1, 1, 1, 1, 0, 0, 0, /* 10 */ /* 8960, 32, 280 */ - 2, 2, 0, 0, 0, 0, 0, 0, /* 112, 4, 28 */ - 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 7168, 128, 56 */ - 2.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 1024, 128, 8*/ - 2, 1, 1, 1, 1, 1, 1, 0, /* 7168, 128, 56*/ - 2, 2, 1, 1, 0, 0, 0, 0, /* 15 */ /* 6720, 16, 420 */ - 3, 1, 0, 0, 0, 0, 0, 0, /* 224, 4, 56 */ - 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, /* 8960, 128, 70 */ - 2.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 7168, 128, 56*/ - 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0, 0, /* 26880, 64, 420 */ - 2, 2, 2, 0, 0, 0, 0, 0, /*20 */ /* 448, 8, 56 */ - 3, 1, 1, 1, 0, 0, 0, 0, /* 4480, 16, 280 */ - 1.5, 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, /* 7168, 128, 56 */ - 2.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 21504, 128, 168 */ - 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, /* 7168, 256, 28 */ - 2.0, 2.0, 2.0, 1.0, 1.0, 0, 0, 0, /* 25 */ /* 17920, 32, 560 */ - 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0, 0, /* 10752, 64, 168 */ - 3.0, 2.0, 1.0, 0, 0, 0, 0, 0, /* 2688, 8, 336 */ - 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.5, 0.5, /* 3584, 128, 28 */ - 2.5, 1.5, 1.5, 1.5, 0.5, 0.5, 0.5, 0.5, /* 35840,128,280*/ - 2.5, 2.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /*30 */ /* 3584, 128, 28*/ - 3.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, /* 1024,128, 8 */ - 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0, - 2.0f, 2.0f, 2.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 3.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, - 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, - 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, - 2.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, - 2.5f, 2.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, - 3.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, - 2.0f, 2.0f, 2.0f, 2.0f, 1.0f, 1.0f, 0.0f, 0.0f, - 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, - 3.0f, 2.0f, 2.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 3.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 4.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, - 2.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 0.5f, 0.5f, - 2.5f, 2.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, - 3.5f, 1.5f, 1.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f -}; - const Word16 pl_HQ_fx[] = /* Q1 vectors in first layers */ { 2, 2, 0, 0, 0, 0, 0, 0, /* 112, 4, 28 */ @@ -22266,45 +13315,6 @@ const Word16 sigma_MSLVQ_fx[][16] = {192, 249, 256, 235, 231, 230, 213, 215, 210, 247, 284, 237, 214, 210, 199, 181}, }; -/* An 16-by-34 matrix in Scale = 20.48f */ -const float inv_sigma_MSLVQ[][16] = -{ - {1.0f }, /* IA NB */ - {1.0f }, /* UV NB */ - {0.0238973f, 0.0227556f, 0.0159750f, 0.0138192f, 0.0126968f, 0.0121255f, 0.0117029f, 0.0115510f, 0.0115445f, 0.0117769f, 0.0117364f, 0.0094727f, 0.0078228f, 0.0145661f, 0.0388615f, 0.0590202f }, /* V NB */ - {0.0204391f, 0.0197683f, 0.0140756f, 0.0138005f, 0.0134207f, 0.0128401f, 0.0125644f, 0.0123746f, 0.0125031f, 0.0134207f, 0.0142718f, 0.0112713f, 0.0083934f, 0.0098037f, 0.0269474f, 0.0398444f }, /* G NB */ - {0.0207287f, 0.0208130f, 0.0145455f, 0.0129949f, 0.0123522f, 0.0117431f, 0.0112281f, 0.0108878f, 0.0110583f, 0.0117364f, 0.0122561f, 0.0094074f, 0.0074826f, 0.0118519f, 0.0287640f, 0.0375780f }, /* T NB */ - {0.0116828f, 0.0120612f, 0.0100441f, 0.0094378f, 0.0093773f, 0.0093559f, 0.0098367f, 0.0100441f, 0.0102349f, 0.0103018f, 0.0102966f, 0.0084838f, 0.0078019f, 0.0064954f, 0.0301620f, 0.0684950f }, /* AU NB */ - {1.0f }, - {1.0f }, /* UV WB */ - {0.0226049f, 0.0191581f, 0.0116562f, 0.0101336f, 0.0098320f, 0.0093218f, 0.0093473f, 0.0089237f, 0.0084141f, 0.0079165f, 0.0079689f, 0.0078830f, 0.0073352f, 0.0073117f, 0.0068040f, 0.0077050f }, /* V WB */ - {0.0161769f, 0.0143117f, 0.0105676f, 0.0103070f, 0.0104118f, 0.0098651f, 0.0099466f, 0.0095790f, 0.0092086f, 0.0093473f, 0.0092670f, 0.0088620f, 0.0082814f, 0.0082881f, 0.0081953f, 0.0083592f }, /* G WB */ - {0.0175794f, 0.0175643f, 0.0115315f, 0.0099805f, 0.0098131f, 0.0092128f, 0.0088124f, 0.0084803f, 0.0080535f, 0.0081855f, 0.0079165f, 0.0072779f, 0.0064954f, 0.0062938f, 0.0061761f, 0.0064120f }, /* T WB */ - {0.0117837f, 0.0112837f, 0.0089237f, 0.0084488f, 0.0081045f, 0.0082581f, 0.0086596f, 0.0084245f, 0.0084384f, 0.0084003f, 0.0080693f, 0.0078317f, 0.0072163f, 0.0079844f, 0.0084038f, 0.0091715f }, /* AU WB */ - {1.0f }, - {1.0f }, - {0.0132901f, 0.0118587f, 0.0090340f, 0.0080000f, 0.0074608f, 0.0071235f, 0.0068198f, 0.0062687f, 0.0061985f, 0.0057480f, 0.0053487f, 0.0052365f, 0.0050958f, 0.0054965f, 0.0056187f, 0.0053417f }, /* V 16k */ - {0.0111486f, 0.0107563f, 0.0081920f, 0.0077488f, 0.0076647f, 0.0077900f, 0.0075433f, 0.0071809f, 0.0072470f, 0.0071434f, 0.0065431f, 0.0063543f, 0.0058001f, 0.0055728f, 0.0067568f, 0.0051496f }, /* G 16k */ - {0.0110703f, 0.0092294f, 0.0084211f, 0.0079534f, 0.0073669f, 0.0072470f, 0.0069921f, 0.0068887f, 0.0068587f, 0.0064443f, 0.0058397f, 0.0056778f, 0.0060431f, 0.0061967f, 0.0067258f, 0.0057335f }, /* T 16k */ - {0.0096970f, 0.0089043f, 0.0070257f, 0.0066386f, 0.0066645f, 0.0068564f, 0.0066972f, 0.0068564f, 0.0065140f, 0.0063563f, 0.0057143f, 0.0058481f, 0.0063504f, 0.0059483f, 0.0063860f, 0.0043658f }, /* AU 16k */ - {0.0114222f, 0.0085906f, 0.0097663f, 0.0096924f, 0.0099129f, 0.0104972f, 0.0098273f, 0.0090459f, 0.0081822f, 0.0086780f, 0.0093218f, 0.0091880f, 0.0098320f, 0.0089628f, 0.0089550f, 0.0064120f }, - {0.0062268f, 0.0081561f, 0.0085121f, 0.0077079f, 0.0076361f, 0.0074717f, 0.0071860f, 0.0062534f, 0.0059500f, 0.0061985f, 0.0070451f, 0.0070354f, 0.0075740f, 0.0076992f, 0.0081302f, 0.0062117f }, - {0.0187890f, 0.0095079f, 0.0074663f, 0.0069755f, 0.0063210f, 0.0059466f, 0.0062268f, 0.0060826f, 0.0057641f, 0.0054921f, 0.0058800f, 0.0060484f, 0.0078019f, 0.0103591f, 0.0108763f, 0.0106611f }, - {0.0143820f, 0.0059157f, 0.0084072f, 0.0095522f, 0.0099225f, 0.0101688f, 0.0101186f, 0.0104224f, 0.0102247f, 0.0102400f, 0.0104330f, 0.0100196f, 0.0105949f, 0.0093816f, 0.0085369f, 0.0069096f }, - {0.0073431f, 0.0076618f, 0.0076389f, 0.0075018f, 0.0076134f, 0.0077400f, 0.0074690f, 0.0060182f, 0.0050743f, 0.0035463f, 0.0032705f, 0.0039091f, 0.0025460f, 0.0029703f, 0.0073962f, 0.0103330f }, - {0.0081238f, 0.0083558f, 0.0079165f, 0.0083626f, 0.0085227f, 0.0092211f, 0.0092670f, 0.0089121f, 0.0067435f, 0.0064954f, 0.0078347f, 0.0076964f, 0.0075433f, 0.0066972f, 0.0069119f, 0.0040878f }, - {0.0108302f, 0.0102554f, 0.0106279f, 0.0110763f, 0.0106169f, 0.0104383f, 0.0107676f, 0.0115641f, 0.0119208f, 0.0134826f, 0.0141047f, 0.0144124f, 0.0139795f, 0.0059778f, 0.0139130f, 0.0463348f }, - {0.0227051f, 0.0135271f, 0.0071086f, 0.0082051f, 0.0077196f, 0.0078528f, 0.0086414f, 0.0095389f, 0.0094118f, 0.0090901f, 0.0080000f, 0.0093006f, 0.0116762f, 0.0126108f, 0.0143017f, 0.0178709f }, - {0.0093945f, 0.0100589f, 0.0104543f, 0.0107846f, 0.0106004f, 0.0108590f, 0.0119487f, 0.0118040f, 0.0114734f, 0.0098414f, 0.0109695f, 0.0132728f, 0.0136807f, 0.0139795f, 0.0147021f, 0.0156935f }, - {0.0230891f, 0.0079658f, 0.0093049f, 0.0117095f, 0.0120258f, 0.0123821f, 0.0126811f, 0.0124878f, 0.0124802f, 0.0113525f, 0.0107281f, 0.0122855f, 0.0133594f, 0.0136807f, 0.0151929f, 0.0168421f }, - {0.0066841f, 0.0078498f, 0.0085333f, 0.0089315f, 0.0088162f, 0.0087822f, 0.0092754f, 0.0102094f, 0.0099273f, 0.0088086f, 0.0059535f, 0.0049148f, 0.0064524f, 0.0083900f, 0.0093345f, 0.0095345f }, - {0.0168007f, 0.0115903f, 0.0094334f, 0.0087935f, 0.0074365f, 0.0082647f, 0.0083016f, 0.0099514f, 0.0101436f, 0.0099951f, 0.0075544f, 0.0052125f, 0.0051341f, 0.0128482f, 0.0142817f, 0.0238417f }, - {0.0113274f, 0.0108245f, 0.0108532f, 0.0106889f, 0.0102451f, 0.0107789f, 0.0112281f, 0.0114670f, 0.0112527f, 0.0106224f, 0.0082249f, 0.0082018f, 0.0085619f, 0.0081887f, 0.0060753f, 0.0071210f }, - {0.0115903f, 0.0107676f, 0.0119626f, 0.0116166f, 0.0104277f, 0.0105026f, 0.0110464f, 0.0115576f, 0.0121760f, 0.0122855f, 0.0128240f, 0.0111851f, 0.0069589f, 0.0059397f, 0.0240941f, 0.0361199f }, - {0.0102915f, 0.0098985f, 0.0095790f, 0.0090579f, 0.0091921f, 0.0093049f, 0.0102196f, 0.0107903f, 0.0126342f, 0.0122488f, 0.0129538f, 0.0091839f, 0.0047124f, 0.0050295f, 0.0210700f, 0.0282873f }, - {0.0133594f, 0.0102708f, 0.0099854f, 0.0109052f, 0.0110643f, 0.0111547f, 0.0120188f, 0.0118931f, 0.0122050f, 0.0103696f, 0.0090101f, 0.0107903f, 0.0119766f, 0.0121760f, 0.0128401f, 0.0141047f} -}; - /* An 16-by-33 matrix in Scale = 32768.00f */ const Word16 inv_sigma_MSLVQ_fx[][16] =//Q15 { @@ -22367,29 +13377,6 @@ const float sigma_p[][16] = {55.1269531f, 70.3613281f, 83.1054688f, 87.2070313f, 90.5273438f, 91.4550781f, 94.7265625f, 93.6035156f, 97.6074219f, 98.7304688f, 104.6875000f, 99.6582031f, 95.6054688f, 91.6503906f, 88.4765625f, 78.2226563f, },/* NOT USED ! AU 16k */ {69.5312500f, 80.1757813f, 101.3183594f, 100.9277344f, 106.4941406f, 111.1816406f, 107.6171875f, 112.9882813f, 116.6992188f, 117.1875000f, 120.9472656f, 125.0976563f, 130.7617188f, 128.7109375f, 123.3886719f, 104.9316406f} /* G WB for MA*/ }; -/* An 16-by-19 matrix in Scale = 20.48f */ -const float inv_sigma_p[][16] = -{ - {0.0168560f, 0.0156455f, 0.0143317f, 0.0150699f, 0.0148513f, 0.0145869f, 0.0150147f, 0.0151479f, 0.0151479f, 0.0147126f, 0.0146495f, 0.0118587f, 0.0103539f, 0.0084280f, 0.0226800f, 0.0231937f }, /* IA NB */ - {0.0195234f, 0.0150147f, 0.0144124f, 0.0145765f, 0.0147232f, 0.0143619f, 0.0143518f, 0.0143719f, 0.0190158f, 0.0153869f, 0.0152950f, 0.0145455f, 0.0139986f, 0.0129785f, 0.0128321f, 0.0124498f }, /* U NB */ - {0.0305672f, 0.0286434f, 0.0212448f, 0.0179807f, 0.0166234f, 0.0146390f, 0.0139225f, 0.0137450f, 0.0135450f, 0.0141047f, 0.0144023f, 0.0129538f, 0.0104383f, 0.0134560f, 0.0478505f, 0.0914286f }, /* V NB */ - {0.0185844f, 0.0163057f, 0.0127920f, 0.0131789f, 0.0135539f, 0.0122855f, 0.0123896f, 0.0124121f, 0.0119487f, 0.0129702f, 0.0137912f, 0.0115445f, 0.0082183f, 0.0084909f, 0.0249756f, 0.0591908f }, /* G NB */ - {1.0f }, /* T NB */ - {0.0175342f, 0.0154800f, 0.0139986f, 0.0131789f, 0.0129785f, 0.0126576f, 0.0134207f, 0.0134737f, 0.0137082f, 0.0137265f, 0.0149380f, 0.0135271f, 0.0091225f, 0.0082282f, 0.0420534f, 0.0747445f }, /* AU NB */ - {0.0180282f, 0.0152268f, 0.0139225f, 0.0139605f, 0.0136898f, 0.0134560f, 0.0136807f, 0.0136080f, 0.0135360f, 0.0132901f, 0.0128080f, 0.0121040f, 0.0110943f, 0.0104330f, 0.0151367f, 0.0144940f }, /* IA WB */ - {0.0147126f, 0.0156098f, 0.0151929f, 0.0129949f, 0.0085333f, 0.0068725f, 0.0128724f, 0.0430252f, 0.0123373f, 0.0123299f, 0.0122782f, 0.0117566f, 0.0111003f, 0.0104277f, 0.0108245f, 0.0110226f }, /* U WB */ - {0.0280164f, 0.0253779f, 0.0174446f, 0.0154683f, 0.0147021f, 0.0131114f, 0.0123896f, 0.0121832f, 0.0117431f, 0.0111547f, 0.0111183f, 0.0104864f, 0.0095478f, 0.0094291f, 0.0094991f, 0.0102196f }, /* V WB */ - {0.0162798f, 0.0133073f, 0.0113087f, 0.0121687f, 0.0121327f, 0.0112158f, 0.0112035f, 0.0106169f, 0.0104650f, 0.0104224f, 0.0103018f, 0.0097431f, 0.0093260f, 0.0093133f, 0.0094859f, 0.0101840f }, /* G WB */ - {1.0f }, /* T WB */ - {0.0195606f, 0.0159750f, 0.0139700f, 0.0132385f, 0.0126654f, 0.0125031f, 0.0125876f, 0.0120612f, 0.0121040f, 0.0120329f, 0.0117837f, 0.0116100f, 0.0111608f, 0.0119487f, 0.0125953f, 0.0127840f }, /* AU WB */ - {0.0136990f, 0.0115903f, 0.0111003f, 0.0111608f, 0.0108188f, 0.0110464f, 0.0110464f, 0.0108532f, 0.0102708f, 0.0098651f, 0.0089471f, 0.0090220f, 0.0102503f, 0.0107338f, 0.0107676f, 0.0086414f }, /* IA 16k*/ - {1.0f }, /* U 16k */ - {0.0201150f, 0.0148192f, 0.0113231f, 0.0117743f, 0.0097107f, 0.0100129f, 0.0088214f, 0.0086665f, 0.0086243f, 0.0078801f, 0.0076603f, 0.0078530f, 0.0084880f, 0.0088414f, 0.0092949f, 0.0100591f}, /* V 16k */ - {0.0103278f, 0.0085227f, 0.0075433f, 0.0074365f, 0.0071062f, 0.0073065f, 0.0070572f, 0.0070865f, 0.0069494f, 0.0065515f, 0.0059345f, 0.0059122f, 0.0063093f, 0.0064040f, 0.0067815f, 0.0054803f }, /* G 16k */ - {1.0f }, /* T 16k */ - {0.0181399f, 0.0142124f, 0.0120329f, 0.0114670f, 0.0110464f, 0.0109343f, 0.0105567f, 0.0106834f, 0.0102451f, 0.0101286f, 0.0095522f, 0.0100343f, 0.0104597f, 0.0109110f, 0.0113024f, 0.0127840f },/* NOT USED ! AU 16k */ - {0.0143820f, 0.0124726f, 0.0098699f, 0.0099081f, 0.0093902f, 0.0089943f, 0.0092922f, 0.0088505f, 0.0085690f, 0.0085333f, 0.0082681f, 0.0079938f, 0.0076475f, 0.0077693f, 0.0081045f, 0.0095300f} /* G WB for MA*/ -}; /* An 16-by-19 matrix in Scale = 32768.00f */ const Word16 inv_sigma_p_fx[][16] =//Q15 { @@ -23307,29 +14294,6 @@ const Word16 FixBranch_tbl[4][4][N_STAGE_VQ - 4] = }; // Q0 /* Intra-Prediction */ -#ifndef IVAS_FLOAT_FIXED -const float AR_IntraCoeff[N_STAGE_VQ-1][2][2] = -{ - {{-0.292479f, 0.676331f}, {-0.422648f, 0.217490f}}, - {{ 0.048957f, 0.500476f}, { 0.087301f, 0.287286f}}, - {{ 0.199481f, 0.502784f}, { 0.106762f, 0.420907f}}, - {{ 0.240459f, 0.440504f}, { 0.214255f, 0.396496f}}, - {{ 0.193161f, 0.494850f}, { 0.158690f, 0.306771f}}, - {{ 0.093435f, 0.370662f}, { 0.065526f, 0.148231f}}, - {{ 0.037417f, 0.336906f}, {-0.024246f, 0.187298f}} -}; - -const float SN_IntraCoeff[N_STAGE_VQ-1][2][2] = -{ - {{-0.452324f, 0.808759f}, {-0.524298f, 0.305544f}}, - {{ 0.009663f, 0.606028f}, {-0.013208f, 0.421115f}}, - {{ 0.144877f, 0.673495f}, { 0.080963f, 0.580317f}}, - {{ 0.208225f, 0.633144f}, { 0.215958f, 0.584520f}}, - {{ 0.050822f, 0.767842f}, { 0.076879f, 0.416693f}}, - {{ 0.005058f, 0.550614f}, {-0.006786f, 0.296984f}}, - {{-0.023860f, 0.611144f}, {-0.162706f, 0.576228f}} -}; -#endif const Word16 SN_IntraCoeff_fx[N_STAGE_VQ - 1][2][2] = /* Q15 */ { @@ -23348,128 +14312,24 @@ const Word16 AR_IntraCoeff_fx[N_STAGE_VQ - 1][2][2] = /* Q15 */ {{ 1604, 16400}, { 2861, 9414}}, {{ 6537, 16475}, { 3498, 13792}}, {{ 7879, 14434}, { 7021, 12992}}, - {{ 6329, 16215}, { 5200, 10052}}, - {{ 3062, 12146}, { 2147, 4857}}, - {{ 1226, 11040}, { -794, 6137}} -}; - -#ifndef IVAS_FLOAT_FIXED -const float scale_ARSN[M] = {1.8307f, 1.8404f, 1.8009f, 1.7416f, 1.7240f, 1.7467f, 1.6106f, 1.6497f, 1.5702f, 1.5548f, 1.5745f, 1.6199f, 1.5633f, 1.5239f, 1.5796f, 1.5615f}; -#endif -const Word16 scale_ARSN_fx[M] = /* Q14 */ -{ - 29994, 30153, 29506, 28534, 28246, 28618, 26388, 27029, - 25726, 25474, 25797, 26540, 25613, 24968, 25880, 25584 -}; -#ifndef IVAS_FLOAT_FIXED -const float scale_inv_ARSN[M] = {0.5462f, 0.5434f, 0.5553f, 0.5742f, 0.5800f, 0.5725f, 0.6209f, 0.6062f, 0.6369f, 0.6432f, 0.6351f, 0.6173f, 0.6397f, 0.6562f, 0.6331f, 0.6404f}; -#endif - -const Word16 scale_inv_ARSN_fx[M] = /* Q15 */ -{ - 17898, 17806, 18196, 18815, 19005, 18760, 20342, 19864, - 20870, 21076, 20811, 20228, 20962, 21502, 20745, 20985 -}; - -/* TCVQ Codebook */ -#ifndef IVAS_FLOAT_FIXED -const float AR_TCVQ_CB_SUB1[2][128][2] = -{ - { - {-170.0561F,-169.3847F,},{-90.97870F,48.531700F,},{-148.6968F,17.218300F,},{-107.0229F,-34.21990F,},{-129.8378F,-87.31650F,},{-220.1001F,-234.4751F,},{-129.6736F,52.471700F,},{20.510900F,-288.6602F,}, - {-221.5495F,-0.070200F,},{58.214300F,123.37490F,},{-74.50640F,211.33990F,},{-48.14920F,123.86970F,},{-192.6126F,-247.4666F,},{-206.1983F,104.78470F,},{-125.3893F,-150.7979F,},{-168.7912F,-86.03110F,}, - {-95.16320F,-89.65400F,},{-12.70900F,177.33540F,},{-73.43770F,-250.7212F,},{-51.23060F,-84.00830F,},{-264.2502F,102.67830F,},{-184.2570F,-157.5882F,},{-121.9781F,-62.24850F,},{-132.6231F,115.89740F,}, - {-47.38870F,-84.58990F,},{-2.521300F,94.296500F,},{-79.13010F,-82.28630F,},{-49.25610F,-5.992200F,},{-286.7041F,-146.2168F,},{-178.7492F,-2.262600F,},{-115.8487F,-10.64920F,},{-119.9947F,-216.1283F,}, - {-69.10170F,1.3002000F,},{-68.48210F,-106.6926F,},{24.572700F,141.84890F,},{51.813600F,206.02520F,},{-51.84400F,-72.25850F,},{-175.4067F,-470.9963F,},{-112.2572F,-109.9498F,},{-51.26580F,339.48830F,}, - {-38.93840F,-40.88940F,},{-29.20570F,-69.73790F,},{-55.22180F,51.015500F,},{-12.33040F,42.160700F,},{-31.81780F,63.017700F,},{-174.1785F,-89.95120F,},{-110.4181F,-345.4240F,},{-49.84300F,-64.35890F,}, - {-59.63520F,-175.9810F,},{-69.02910F,-44.58650F,},{-43.97120F,-49.59230F,},{-87.25920F,-138.5465F,},{-96.25540F,-174.5186F,},{-154.7553F,-275.2756F,},{-109.5143F,128.62810F,},{-14.54350F,-25.04360F,}, - {-46.05230F,81.366800F,},{-32.03440F,24.870900F,},{-132.5154F,-143.2318F,},{-22.59640F,-51.55940F,},{-178.7877F,251.71930F,},{-148.7196F,-212.2087F,},{-106.1241F,217.56180F,},{24.099800F,29.423900F,}, - {-119.7589F,-323.8735F,},{121.21500F,173.78130F,},{28.604700F,-10.13160F,},{37.177600F,85.584900F,},{87.071500F,238.62500F,},{109.09800F,76.070100F,},{167.92980F,224.78890F,},{165.46650F,86.241500F,}, - {-9.919200F,0.5865000F,},{126.17610F,92.028000F,},{-38.94060F,-121.2069F,},{4.4071000F,-13.64760F,},{32.528700F,-1.269700F,},{109.85480F,288.47620F,},{193.40720F,153.42400F,},{34.912700F,501.59090F,}, - {12.630000F,53.019400F,},{11.431500F,13.336900F,},{191.94830F,224.70850F,},{40.979900F,-73.55240F,},{5.8897000F,-171.8742F,},{111.18560F,4.0700000F,},{201.66060F,-41.15440F,},{122.30070F,274.89960F,}, - {-2.425900F,-107.2105F,},{-24.07350F,-25.13440F,},{-4.758000F,-49.75210F,},{66.313900F,932.60360F,},{63.427900F,76.575200F,},{131.07660F,161.35400F,},{211.93280F,81.864800F,},{90.057500F,-27.39110F,}, - {-0.656200F,269.81920F,},{38.372300F,52.479100F,},{9.8096000F,55.003200F,},{101.87250F,118.98060F,},{121.92950F,-125.7858F,},{131.37830F,88.916800F,},{218.95100F,305.25590F,},{299.20050F,200.64100F,}, - {-5.459000F,-45.76330F,},{64.972100F,353.45030F,},{-19.39350F,0.4459000F,},{183.81020F,144.04150F,},{134.69810F,96.639400F,},{135.54900F,-149.4564F,},{219.02860F,440.63140F,},{200.41160F,402.24270F,}, - {39.254000F,-5.942300F,},{72.189700F,27.428900F,},{65.129100F,51.010200F,},{47.723500F,14.090300F,},{219.06510F,290.25100F,},{156.45050F,43.423900F,},{232.59480F,-226.2346F,},{263.13970F,83.869400F,}, - {74.758000F,73.874300F,},{14.975400F,-30.59550F,},{167.16620F,0.0965000F,},{101.95820F,53.053900F,},{-11.37910F,-38.59220F,},{158.02420F,120.38810F,},{239.72370F,224.38630F,},{657.07030F,665.65960F,}, - }, - - { - {-368.0999F,-65.52540F,},{-102.2718F,-140.9826F,},{-20.59040F,-66.70470F,},{-95.79090F,184.47330F,},{-837.7641F,-904.4130F,},{-510.6703F,492.69680F,},{-339.6600F,-757.9813F,},{-254.7818F,-220.3240F,}, - {-195.1893F,174.78510F,},{-225.8519F,-77.48110F,},{-216.3949F,43.255000F,},{-38.17870F,-32.99880F,},{-513.7912F,0.1722000F,},{-480.2339F,-631.9721F,},{-338.9732F,89.728000F,},{-150.2896F,414.33830F,}, - {-299.8150F,-389.7000F,},{-78.78780F,-23.51500F,},{-110.4856F,-76.99170F,},{-55.54460F,-127.1259F,},{-217.9132F,295.10380F,},{-475.2952F,178.16700F,},{-313.6053F,299.37920F,},{-383.7671F,290.27470F,}, - {-162.0853F,-139.3168F,},{-10.81860F,411.75810F,},{44.425800F,-95.93580F,},{31.498700F,285.88550F,},{-313.9570F,-197.7654F,},{-439.8449F,-43.63990F,},{-311.4479F,-51.44460F,},{-112.9209F,-79.77700F,}, - {-135.4290F,-11.18290F,},{-14.37020F,-101.2914F,},{-55.36790F,-170.9950F,},{-97.12010F,33.922700F,},{-341.4857F,133.28130F,},{-419.5535F,-1029.264F,},{-261.0493F,-606.2968F,},{-445.1823F,-298.5443F,}, - {-95.70290F,-200.4782F,},{-18.66770F,205.38260F,},{5.2869000F,154.20340F,},{-176.5040F,-252.4035F,},{-172.0901F,-378.6187F,},{-372.2359F,-501.4665F,},{-252.0296F,-151.3651F,},{-287.6742F,43.301600F,}, - {-63.75070F,119.02160F,},{-136.2005F,87.531000F,},{-87.96100F,287.68010F,},{36.839700F,-33.04480F,},{-118.0163F,-214.5814F,},{-365.9238F,-348.5409F,},{-236.4188F,-425.5134F,},{-25.16220F,-39.63130F,}, - {-63.00320F,-82.32200F,},{-152.9630F,-507.2372F,},{-57.66390F,48.660600F,},{5.3785000F,51.097300F,},{-168.7345F,-49.50600F,},{-359.4378F,-199.1688F,},{-233.7651F,-285.0083F,},{33.347500F,60.305100F,}, - {9.5961000F,-60.67060F,},{-22.43980F,93.048400F,},{184.09080F,107.94670F,},{164.32090F,265.57780F,},{-67.49340F,123.30580F,},{233.22030F,704.96710F,},{353.99250F,-262.9922F,},{210.06920F,175.77800F,}, - {-104.2510F,-314.3242F,},{0.9024000F,-7.495400F,},{86.823700F,85.372000F,},{72.376700F,137.49970F,},{-13.00090F,-69.46920F,},{236.74980F,46.279600F,},{374.54780F,-27.20110F,},{136.88650F,-35.73790F,}, - {-34.16180F,16.487600F,},{283.87900F,353.51860F,},{21.261500F,12.921800F,},{123.46920F,17.014100F,},{98.105500F,5.7719000F,},{238.18290F,-47.81850F,},{386.73840F,560.96730F,},{32.152700F,578.18980F,}, - {70.706200F,208.99530F,},{69.254100F,50.614900F,},{273.61320F,220.89670F,},{244.46280F,129.16830F,},{108.85950F,215.41490F,},{265.47770F,276.31920F,},{395.46140F,283.90850F,},{412.94530F,299.13520F,}, - {-5.075000F,-154.7571F,},{142.09250F,160.91980F,},{172.66840F,-70.68220F,},{79.050300F,-150.7248F,},{220.80900F,545.83980F,},{289.05480F,1023.7731F,},{421.94000F,140.86480F,},{436.59640F,74.580500F,}, - {31.476700F,103.73850F,},{84.791000F,-50.67070F,},{136.49490F,394.28200F,},{264.97310F,-186.0375F,},{531.67460F,343.03590F,},{310.71060F,184.35030F,},{494.98260F,403.81940F,},{406.31780F,490.15840F,}, - {137.11870F,78.459100F,},{-26.93550F,-247.3193F,},{-13.90060F,-408.4927F,},{315.74950F,11.906200F,},{507.81160F,-77.48790F,},{313.84650F,400.68920F,},{543.13960F,-127.4566F,},{895.02000F,968.45590F,}, - {65.022700F,5.1458000F,},{203.36110F,32.767800F,},{99.442400F,-280.2416F,},{385.57300F,174.81870F,},{303.53400F,86.087500F,},{316.97760F,81.139300F,},{545.10640F,789.31480F,},{585.50660F,162.80340F,}, - } -}; - -const float AR_TCVQ_CB_SUB2[2][64][2] = -{ - { - {-139.4748F,-20.51230F,},{-205.2710F,65.240700F,},{-90.66390F,99.509000F,},{-51.55990F,-140.1515F,},{-367.2977F,-86.40560F,},{-101.5758F,-506.4093F,},{-467.6164F,-177.7713F,},{-325.3952F,19.243000F,}, - {-51.50950F,-0.580700F,},{-156.7042F,-109.3179F,},{-82.92030F,-84.85600F,},{-75.64660F,36.105400F,},{-226.3753F,-277.4524F,},{-336.8399F,-293.0652F,},{-261.4553F,168.08600F,},{-203.4850F,280.69810F,}, - {-242.0593F,-177.4998F,},{-93.17880F,198.93370F,},{-6.034900F,-224.4959F,},{152.10510F,274.83370F,},{-347.4922F,202.31740F,},{-450.9290F,32.755600F,},{-246.8381F,-399.5943F,},{-242.2880F,-493.4214F,}, - {-104.8258F,-183.7260F,},{-127.2704F,-288.3692F,},{17.116300F,247.94440F,},{28.590000F,141.33180F,},{-88.39520F,-8.409100F,},{-244.1211F,-41.49450F,},{-281.3448F,-44.43050F,},{-435.1837F,-417.8239F,}, - {7.2419000F,-97.64420F,},{32.515300F,38.550200F,},{13.574300F,-6.174500F,},{102.88080F,-123.3195F,},{184.39410F,428.29360F,},{-20.13120F,-127.9658F,},{-97.25060F,379.22250F,},{541.89470F,342.12550F,}, - {3.8567000F,79.183500F,},{339.32440F,253.39800F,},{87.921000F,66.552800F,},{117.63820F,32.476100F,},{490.72400F,188.26100F,},{152.82630F,-303.6073F,},{415.46300F,-125.0126F,},{20.317700F,471.51620F,}, - {120.83170F,146.52980F,},{183.34470F,88.231900F,},{241.62970F,156.33030F,},{23.616600F,-36.17640F,},{130.82320F,95.319300F,},{123.34420F,-25.34570F,},{-17.53680F,-385.5626F,},{253.17360F,-114.7059F,}, - {85.112600F,-25.82990F,},{-42.33470F,-51.85570F,},{195.47230F,-7.405400F,},{322.01970F,63.832500F,},{188.75460F,-173.2249F,},{506.79120F,93.875700F,},{390.46690F,470.76120F,},{243.34080F,526.34460F,}, - }, - - { - {-165.6917F,-377.1008F,},{-17.98370F,-75.86160F,},{7.9923000F,116.25350F,},{-130.2646F,-108.4639F,},{-311.2591F,-203.8264F,},{-339.0670F,-23.57200F,},{-7.653600F,-54.53950F,},{-423.8622F,-353.1093F,}, - {-240.0843F,-95.08200F,},{-143.2687F,8.5443000F,},{-101.9498F,-202.8074F,},{-43.42630F,-10.37850F,},{-291.0372F,55.326100F,},{-189.0665F,-593.2565F,},{-128.3240F,5.0444000F,},{-420.8219F,35.762800F,}, - {-206.5327F,85.114800F,},{-202.6915F,-233.0529F,},{-107.8853F,-28.10810F,},{-33.95630F,-155.5147F,},{-19.77350F,-490.9996F,},{-113.7118F,159.73310F,},{-345.0899F,238.75620F,},{68.787700F,-156.6325F,}, - {-52.29900F,-95.54260F,},{14.606500F,197.56230F,},{9.1784000F,-3.906100F,},{-88.07510F,114.63690F,},{-356.4571F,-517.1363F,},{-68.02240F,-113.1240F,},{-424.2482F,-150.8795F,},{-54.13860F,-30.29230F,}, - {-48.11040F,48.722800F,},{-9.974700F,-288.3043F,},{44.249300F,-134.2835F,},{68.270600F,70.915400F,},{294.67340F,-174.3828F,},{471.33110F,206.81070F,},{363.89680F,386.90480F,},{52.930000F,47.618800F,}, - {104.26640F,127.63530F,},{149.10830F,-71.25040F,},{280.53550F,183.93680F,},{288.38200F,42.039600F,},{61.611600F,50.856600F,},{170.86680F,156.74650F,},{139.90090F,-260.6101F,},{539.24370F,326.70950F,}, - {71.975100F,-6.711500F,},{169.81850F,90.253300F,},{157.30500F,24.483300F,},{59.160200F,-48.84550F,},{-42.61460F,-92.55310F,},{270.15440F,-94.32920F,},{487.06470F,75.464100F,},{345.55540F,126.52380F,}, - {-110.4957F,258.30830F,},{17.373900F,41.055800F,},{60.912700F,355.85580F,},{151.18090F,229.57390F,},{269.34040F,569.72710F,},{259.50450F,412.82330F,},{-14.73050F,568.47830F,},{252.07040F,354.99801F,}, - } + {{ 6329, 16215}, { 5200, 10052}}, + {{ 3062, 12146}, { 2147, 4857}}, + {{ 1226, 11040}, { -794, 6137}} }; -const float AR_TCVQ_CB_SUB3[4][32][2] = +const Word16 scale_ARSN_fx[M] = /* Q14 */ { - { - {-190.2462F,3.7460000F,},{-178.0891F,-156.6944F,},{37.733100F,176.00550F,},{-93.45970F,165.15130F,},{-267.7612F,-511.1700F,},{27.017600F,-276.8829F,},{-118.0160F,-462.8076F,},{188.15520F,-112.6265F,}, - {-112.2084F,-272.1046F,},{-75.63800F,28.803700F,},{-62.17480F,-51.65160F,},{-62.91250F,-122.3795F,},{-315.9380F,163.32500F,},{-335.8190F,-361.7829F,},{-10.02270F,-28.26150F,},{-411.0079F,-169.0698F,}, - {21.274600F,52.847800F,},{41.786600F,-55.20310F,},{131.61950F,-6.998400F,},{157.68690F,287.15550F,},{-42.42940F,-201.8275F,},{281.21280F,-25.80890F,},{-13.25970F,522.18800F,},{-66.78560F,354.06180F,}, - {20.563700F,-135.3851F,},{140.59070F,104.26130F,},{279.11580F,136.98410F,},{39.195800F,51.957500F,},{34.262500F,51.346000F,},{381.14700F,390.58580F,},{491.52390F,213.96490F,},{288.60580F,536.49710F,}, - }, - - { - {-133.0008F,-181.1299F,},{-84.55430F,-304.3680F,},{40.548600F,-157.9567F,},{-35.81290F,-86.14820F,},{-296.9231F,-235.1026F,},{-357.0671F,-316.6972F,},{-258.1654F,-349.4409F,},{-504.7979F,-113.4180F,}, - {-123.9764F,51.459200F,},{-224.7199F,-60.69300F,},{-89.06170F,-50.36220F,},{-100.2134F,190.61760F,},{-111.9099F,-529.1262F,},{-36.32900F,-101.2426F,},{-311.5327F,69.813400F,},{-318.3195F,-534.8423F,}, - {84.270600F,222.53200F,},{-0.942100F,28.769200F,},{213.25620F,65.535600F,},{97.994500F,73.849700F,},{30.130700F,19.067100F,},{-368.2725F,229.34600F,},{148.61930F,481.44170F,},{418.05130F,44.184400F,}, - {45.929700F,-10.41460F,},{151.92930F,-55.78590F,},{7.0662000F,84.175000F,},{287.46830F,226.85480F,},{429.16810F,486.29900F,},{176.48300F,159.59660F,},{579.15160F,254.26680F,},{-68.04440F,453.68870F,}, - }, - - { - {-100.1363F,-189.9851F,},{-26.01900F,223.37290F,},{-2.345900F,62.933400F,},{-66.92170F,59.692200F,},{-463.9627F,-172.0395F,},{-422.4871F,43.361300F,},{-250.2149F,-359.6565F,},{-90.88240F,-37.63640F,}, - {-199.5678F,57.586700F,},{-112.5751F,-36.52960F,},{189.51950F,260.19820F,},{-238.2629F,-142.8535F,},{-139.3418F,-351.6046F,},{-336.3076F,-424.9823F,},{-30.62490F,-40.98700F,},{-103.6085F,-330.2230F,}, - {5.6849000F,7.1876000F,},{31.018100F,-149.6002F,},{-80.41110F,-100.6484F,},{119.56500F,103.01690F,},{11.508400F,27.501500F,},{13.331700F,25.835000F,},{457.61300F,261.34590F,},{52.531100F,28.992900F,}, - {203.48110F,71.918000F,},{51.549200F,32.858000F,},{141.30200F,-35.55590F,},{22.330400F,-70.91510F,},{349.22210F,178.05560F,},{447.99330F,289.70830F,},{82.904000F,107.10660F,},{348.09590F,102.38850F,}, - }, + 29994, 30153, 29506, 28534, 28246, 28618, 26388, 27029, + 25726, 25474, 25797, 26540, 25613, 24968, 25880, 25584 +}; - { - {37.061900F,181.46230F,},{3.6812000F,53.960400F,},{-142.5384F,-250.3814F,},{-155.8055F,67.085000F,},{-97.44510F,-42.54350F,},{-36.71330F,-123.6734F,},{-63.68890F,-97.47460F,},{-233.4995F,-274.8922F,}, - {-72.26240F,14.184600F,},{-183.6676F,-77.60290F,},{25.462700F,93.954700F,},{-40.64230F,-141.5510F,},{-85.75550F,-313.0151F,},{-338.1776F,-25.63660F,},{-363.6425F,-156.2840F,},{-67.37240F,-51.54950F,}, - {-58.24200F,-193.3120F,},{181.77980F,98.461400F,},{-70.01130F,-27.99830F,},{171.39450F,112.01820F,},{321.84770F,218.43910F,},{12.987700F,52.170200F,},{22.943500F,52.400800F,},{34.529100F,56.928800F,}, - {72.765700F,16.633700F,},{26.847700F,-102.3211F,},{104.45050F,-37.68410F,},{15.601300F,31.425000F,},{32.724900F,50.955400F,},{264.88060F,147.81980F,},{316.65590F,175.13690F,},{359.29350F,211.19690F,}, - } +const Word16 scale_inv_ARSN_fx[M] = /* Q15 */ +{ + 17898, 17806, 18196, 18815, 19005, 18760, 20342, 19864, + 20870, 21076, 20811, 20228, 20962, 21502, 20745, 20985 }; -#endif + +/* TCVQ Codebook */ const Word16 AR_TCVQ_CB_SUB1_fx[2][128][2] = /* x2.65 */ {//Qlog2(2.56) @@ -23561,104 +14421,6 @@ const Word16 AR_TCVQ_CB_SUB3_fx[4][32][2] = } }; -#ifndef IVAS_FLOAT_FIXED -const float SN_TCVQ_CB_SUB1[2][128][2] = -{ - { - {-249.7201F,40.935000F,},{-190.5588F,-175.3474F,},{-207.0069F,-316.9469F,},{-163.5806F,-247.6570F,},{-304.9679F,-414.6172F,},{-228.6147F,150.62910F,},{-195.6332F,-287.7428F,},{-190.9146F,-284.4862F,}, - {-274.4084F,-267.7108F,},{-199.2563F,-297.6162F,},{-152.2094F,-112.0928F,},{-148.0732F,-148.0190F,},{-223.7592F,-331.2033F,},{-227.6105F,-303.8584F,},{-195.2056F,-316.4586F,},{-262.2246F,-164.0172F,}, - {-201.5461F,313.27600F,},{-103.5079F,-192.2481F,},{-204.4250F,-221.9848F,},{-76.03550F,1125.8286F,},{-234.5633F,-67.04640F,},{-221.8844F,-339.4012F,},{-194.2347F,258.93820F,},{-251.0932F,-362.9766F,}, - {-135.0324F,-147.6629F,},{-98.67180F,-122.1392F,},{-163.4477F,232.42880F,},{-93.88090F,-181.8259F,},{-165.4640F,-213.2693F,},{-217.3162F,-119.1242F,},{-194.1371F,958.06900F,},{-176.2805F,-91.93370F,}, - {-176.7314F,-261.5485F,},{-143.7121F,-243.8883F,},{-148.1108F,-258.7831F,},{-118.9980F,-33.07910F,},{-214.2710F,155.74650F,},{-213.2181F,-251.6092F,},{-188.9855F,-166.4937F,},{-151.3290F,-213.3292F,}, - {-127.0467F,-214.8412F,},{-89.61480F,46.211900F,},{-32.48210F,392.23270F,},{-46.92120F,181.57460F,},{-113.0420F,-86.90470F,},{-201.7185F,60.547200F,},{-187.6557F,583.69500F,},{-161.9915F,53.907100F,}, - {-163.7852F,-39.11590F,},{-135.6215F,426.20040F,},{-169.3460F,29.788000F,},{-53.86960F,-113.5168F,},{-169.7033F,-280.7249F,},{-200.7809F,368.96580F,},{-184.8111F,-10.30170F,},{-56.33640F,-124.8625F,}, - {-146.8623F,587.82200F,},{-128.5270F,146.07030F,},{-123.4510F,-196.9422F,},{-22.75330F,-2.165400F,},{-105.3485F,-182.0782F,},{-198.0657F,-211.0788F,},{-181.9700F,-70.67280F,},{-100.1089F,-202.3083F,}, - {-76.38740F,283.61110F,},{-34.55220F,-139.0253F,},{-72.58420F,-153.9831F,},{11.931600F,-78.54570F,},{-30.11220F,-124.4284F,},{159.48950F,53.219000F,},{246.00260F,265.74940F,},{341.77020F,533.29990F,}, - {-78.13370F,-74.09460F,},{64.957700F,503.70880F,},{234.41130F,423.72930F,},{107.71920F,181.32610F,},{221.30620F,615.15230F,},{166.00660F,108.59500F,},{260.32690F,147.33710F,},{472.14910F,915.47850F,}, - {-71.05110F,-159.7740F,},{-37.06930F,-55.00150F,},{25.370000F,198.17320F,},{49.636800F,82.767400F,},{132.76160F,91.831000F,},{187.70590F,159.38410F,},{281.83160F,469.86870F,},{434.41380F,295.44770F,}, - {63.308300F,141.27590F,},{54.061700F,294.21520F,},{-65.88060F,-50.19340F,},{72.918300F,-12.50020F,},{26.680200F,-36.36690F,},{206.31630F,1119.4720F,},{306.99130F,308.17540F,},{487.14390F,573.31600F,}, - {-185.9491F,948.56350F,},{7.6792000F,52.069300F,},{0.9533000F,-92.26370F,},{166.57380F,312.24880F,},{153.64230F,230.62340F,},{207.81570F,610.05630F,},{315.18780F,208.51600F,},{550.64840F,410.71780F,}, - {-5.303600F,-102.8303F,},{32.350300F,-61.52830F,},{61.661100F,-14.86550F,},{240.57980F,214.70890F,},{329.97410F,212.08160F,},{209.52500F,92.791300F,},{356.06930F,594.08890F,},{638.68310F,525.05230F,}, - {45.061100F,-21.59060F,},{102.92090F,33.850300F,},{-49.38050F,91.477600F,},{147.03860F,74.554000F,},{179.35820F,1032.6932F,},{211.70910F,362.16160F,},{367.65010F,370.43750F,},{740.51460F,596.78260F,}, - {-7.303000F,724.00010F,},{177.80790F,142.93470F,},{213.00960F,110.61410F,},{324.63510F,326.04950F,},{475.33930F,330.59920F,},{218.87990F,211.76850F,},{395.71800F,253.94620F,},{744.16310F,915.21080F,}, - }, - - { - {-206.2475F,-95.90960F,},{-246.3082F,21.747300F,},{-280.0828F,-108.0290F,},{-15.81770F,518.20420F,},{-394.8764F,-268.7632F,},{-323.0682F,-133.0426F,},{-256.3050F,-624.6605F,},{-387.5242F,-608.8890F,}, - {-175.6982F,364.49880F,},{-210.8799F,823.99400F,},{-233.7273F,-494.8845F,},{-151.1368F,-199.8177F,},{-429.7681F,-772.9858F,},{-317.0574F,-240.9158F,},{-253.5630F,-57.26850F,},{-341.3936F,228.86220F,}, - {-281.1353F,-234.9062F,},{-109.7592F,-108.9512F,},{-225.6748F,247.90130F,},{65.929400F,31.226900F,},{-398.6104F,-52.49470F,},{-310.1716F,101.05650F,},{-249.3468F,320.56650F,},{-354.3097F,16.494000F,}, - {-277.0976F,-595.7491F,},{-188.3772F,523.29140F,},{-90.61150F,-382.6038F,},{40.513800F,903.74660F,},{-358.6226F,-460.4389F,},{-308.4215F,501.50370F,},{-237.7401F,882.27940F,},{-333.4506F,-381.9203F,}, - {-243.6204F,127.42030F,},{-75.62440F,666.13180F,},{-34.39620F,414.18390F,},{149.42210F,464.74430F,},{-162.1738F,5.7292000F,},{-308.1293F,-447.4555F,},{-236.0531F,158.90870F,},{-339.5853F,443.61930F,}, - {-196.4904F,-408.9761F,},{-212.8717F,-310.0990F,},{-50.11780F,183.79020F,},{32.747800F,249.33110F,},{-231.0534F,-589.2890F,},{-273.0207F,681.87410F,},{-234.5115F,-144.0888F,},{-306.1589F,641.38990F,}, - {-86.46690F,-261.1131F,},{-87.17310F,101.82230F,},{-32.13380F,-174.4069F,},{-147.5939F,-474.4269F,},{-289.3846F,378.38780F,},{-269.2454F,-337.1601F,},{-222.4565F,-232.3191F,},{-395.3117F,-157.5576F,}, - {-129.1616F,202.52440F,},{-68.35150F,307.27670F,},{-85.86670F,-1.271900F,},{-17.84710F,-328.4484F,},{-374.8384F,115.94100F,},{-260.0821F,26.484400F,},{-220.8236F,-532.8561F,},{-103.5023F,-8.057100F,}, - {253.68710F,299.43310F,},{99.798300F,140.48320F,},{132.05620F,-133.5340F,},{649.87660F,635.39510F,},{80.181400F,-88.45330F,},{377.92370F,11.967000F,},{475.26380F,362.41510F,},{663.04860F,481.53290F,}, - {125.93200F,564.57300F,},{125.00390F,699.34770F,},{161.43320F,82.756400F,},{388.46600F,81.488500F,},{299.40020F,103.03960F,},{380.48160F,344.82180F,},{479.55360F,94.266000F,},{656.04440F,313.06860F,}, - {29.314100F,121.82290F,},{294.35730F,556.75000F,},{136.00140F,242.52100F,},{251.75710F,185.26940F,},{393.60200F,297.97100F,},{404.77110F,790.64840F,},{528.97090F,207.17710F,},{629.35130F,831.62210F,}, - {63.429500F,363.62860F,},{344.74340F,320.98350F,},{386.67160F,190.67860F,},{240.19720F,-79.32440F,},{753.49380F,482.21660F,},{413.70600F,537.17310F,},{539.83860F,557.06520F,},{800.08120F,624.70540F,}, - {234.99860F,63.354100F,},{148.31920F,320.29180F,},{277.09270F,415.69540F,},{456.34320F,536.84340F,},{214.59280F,227.59820F,},{414.97560F,183.63070F,},{552.78850F,426.47270F,},{818.25130F,872.82940F,}, - {73.162100F,-246.0924F,},{46.113400F,-192.6345F,},{278.84370F,698.09160F,},{506.97560F,263.00580F,},{373.99370F,491.39020F,},{422.46610F,438.95710F,},{570.45150F,307.05580F,},{829.71370F,470.72770F,}, - {13.191300F,-73.93830F,},{20.994200F,-13.84500F,},{311.61780F,0.1251000F,},{291.89030F,929.08090F,},{554.80360F,450.16100F,},{436.77840F,653.52060F,},{582.72210F,893.43050F,},{943.77210F,632.08490F,}, - {452.66180F,701.26420F,},{152.06640F,-49.38430F,},{466.26870F,391.67580F,},{616.44670F,391.50590F,},{505.32310F,142.80040F,},{448.40750F,271.20620F,},{590.86500F,699.51280F,},{1072.8364F,818.59820F,}, - } -}; - -const float SN_TCVQ_CB_SUB2[2][64][2] = -{ - { - {-276.9441F,-237.9956F,},{-240.2330F,-400.5215F,},{-168.0618F,-125.3249F,},{-17.18770F,403.15550F,},{-410.3021F,-12.59720F,},{-401.4485F,-725.0255F,},{-378.9797F,-42.53260F,},{-223.4008F,-557.0544F,}, - {-221.8536F,60.339100F,},{-55.66380F,-73.67660F,},{-31.18270F,208.03420F,},{-14.70030F,-246.7032F,},{-152.7168F,497.98040F,},{-385.0540F,-285.9732F,},{-187.2953F,-199.3057F,},{-377.2813F,37.510600F,}, - {-330.8419F,-541.7451F,},{-349.7656F,237.12440F,},{-143.6113F,-363.2778F,},{-150.6399F,137.64050F,},{-113.2274F,3.7534000F,},{-325.2374F,36.570200F,},{-206.2273F,671.09990F,},{-82.19470F,45.011800F,}, - {-206.7859F,334.70390F,},{-283.9658F,-89.72660F,},{-50.10190F,12.089100F,},{51.980300F,29.857900F,},{-107.5514F,-303.3203F,},{-240.0561F,-533.9766F,},{-132.4427F,-5.247100F,},{-404.3979F,480.69020F,}, - {175.02300F,332.36460F,},{233.95710F,41.575700F,},{430.97410F,434.21950F,},{248.10350F,487.89410F,},{297.34090F,302.33480F,},{207.50040F,-27.75610F,},{281.96760F,184.93040F,},{299.70790F,161.32720F,}, - {100.61040F,107.78600F,},{135.17980F,-148.3558F,},{190.27510F,196.71720F,},{435.19680F,47.673600F,},{344.53480F,606.71120F,},{774.72370F,483.79650F,},{830.43490F,475.25730F,},{680.48470F,492.90810F,}, - {52.827400F,-98.47120F,},{84.402600F,213.06580F,},{195.15830F,-48.72150F,},{538.51170F,746.06460F,},{118.75210F,29.688100F,},{589.58180F,237.71470F,},{602.54520F,540.84130F,},{211.57020F,715.21980F,}, - {-93.92180F,-182.2399F,},{301.03150F,254.59590F,},{356.44790F,109.52270F,},{510.59830F,279.64910F,},{716.35110F,402.13940F,},{409.68830F,191.91910F,},{634.49470F,286.14310F,},{974.51980F,759.27030F,}, - }, - - { - {-284.8923F,-332.8634F,},{-230.3763F,119.65300F,},{-155.3427F,115.29910F,},{-12.21440F,5.0214000F,},{-257.4728F,-29.15460F,},{-235.7490F,-480.0754F,},{-202.7355F,-263.5491F,},{-321.4648F,18.445600F,}, - {-294.7758F,-80.74580F,},{-319.5455F,-165.6476F,},{-275.4234F,-501.8569F,},{-100.6586F,-323.5581F,},{-315.1043F,-276.3239F,},{-71.14410F,-278.0978F,},{-362.3847F,1.2822000F,},{-177.8863F,-448.9796F,}, - {-329.8557F,164.76280F,},{-232.8216F,-393.7935F,},{-196.9382F,-183.5567F,},{-179.3588F,287.84510F,},{-131.8585F,-284.4139F,},{-326.5890F,401.69820F,},{-239.3882F,485.08990F,},{-238.0748F,504.86220F,}, - {-111.2109F,13.897700F,},{-109.4982F,-165.7892F,},{39.187700F,49.242200F,},{-179.4392F,-52.56030F,},{-62.00650F,-58.79660F,},{-112.2621F,74.326700F,},{21.768200F,-102.5222F,},{-103.2492F,-123.8958F,}, - {-2.999300F,235.37390F,},{24.464500F,117.61140F,},{209.73120F,-60.41300F,},{112.71650F,222.38860F,},{75.577500F,-161.0497F,},{337.52400F,31.008400F,},{267.89200F,155.94850F,},{328.81130F,647.32140F,}, - {45.064300F,-82.58150F,},{237.66130F,132.73260F,},{4.8216000F,-253.8600F,},{277.79930F,430.66600F,},{39.273100F,199.22940F,},{139.99440F,-162.6469F,},{494.67560F,176.94150F,},{207.76570F,239.06330F,}, - {-100.0752F,-265.5905F,},{15.938200F,454.44360F,},{233.38360F,309.59500F,},{189.17920F,-23.98650F,},{185.76940F,100.17430F,},{675.38230F,486.70190F,},{472.14070F,579.37430F,},{575.03280F,434.82210F,}, - {152.01630F,129.07580F,},{68.559300F,-151.6359F,},{400.30690F,123.64090F,},{409.88600F,286.04450F,},{578.27810F,432.67370F,},{502.13100F,240.50900F,},{675.71990F,390.09750F,},{781.79560F,651.86880F,}, - } -}; - -const float SN_TCVQ_CB_SUB3[4][32][2] = -{ - { - {-147.1049F,-340.6287F,},{-158.8735F,313.47230F,},{-238.5137F,-175.2864F,},{-154.9957F,-34.27780F,},{-186.0273F,-415.2119F,},{-311.3175F,-97.27870F,},{-102.8572F,-258.6216F,},{-184.6271F,589.29930F,}, - {-279.5144F,121.03210F,},{-240.5628F,-383.6411F,},{-289.7553F,-518.3302F,},{77.502600F,128.26760F,},{-349.3453F,-608.3804F,},{-340.3397F,-491.6917F,},{-276.4456F,-539.0219F,},{-308.0319F,-331.5846F,}, - {25.470200F,-122.3889F,},{-23.10160F,-214.1888F,},{-0.632900F,26.756400F,},{142.04180F,-65.81690F,},{247.83350F,718.83400F,},{90.964100F,-139.8895F,},{485.82500F,582.96200F,},{641.17530F,379.95140F,}, - {79.709900F,202.16160F,},{199.84410F,369.96700F,},{239.35830F,94.047800F,},{423.70620F,282.88420F,},{317.36140F,127.76640F,},{337.65540F,94.710900F,},{217.43590F,208.86400F,},{764.35860F,815.30510F,}, - }, - - { - {-370.2650F,11.518200F,},{-323.1142F,-461.2694F,},{-135.8559F,-129.8608F,},{-14.09620F,84.290400F,},{-567.7608F,-453.9710F,},{-266.5970F,-249.6583F,},{-291.9762F,-592.7589F,},{-274.9419F,479.50260F,}, - {-208.9252F,-386.0126F,},{-214.9314F,-42.54240F,},{-186.7444F,227.07210F,},{-121.1719F,-272.9866F,},{-510.8044F,-87.79140F,},{-302.7620F,-617.7623F,},{-324.5998F,-240.0224F,},{-47.00890F,-86.66380F,}, - {12.928800F,78.024900F,},{47.313200F,-86.25450F,},{183.98160F,182.61360F,},{316.09290F,122.14870F,},{371.33160F,278.26560F,},{168.42590F,-225.2161F,},{775.28210F,548.66520F,},{642.86270F,346.51310F,}, - {51.413000F,448.60110F,},{112.29160F,198.86870F,},{133.44860F,-92.65510F,},{392.28070F,469.91310F,},{124.10680F,-283.7072F,},{583.68000F,286.00210F,},{521.95260F,271.37440F,},{931.01620F,692.52800F,}, - }, - - { - {-341.3078F,-146.2225F,},{-92.54280F,10.245600F,},{6.3784000F,340.04950F,},{-277.1624F,169.62960F,},{15.939400F,-300.4278F,},{-413.4964F,-527.4807F,},{25.713000F,81.620300F,},{-395.4344F,-535.2822F,}, - {-30.72550F,-179.8318F,},{-261.9265F,-367.7827F,},{-4.797200F,22.196000F,},{-63.59540F,-168.5926F,},{-320.1832F,-419.0108F,},{-346.2061F,-53.06720F,},{-127.6520F,-195.8498F,},{-21.51770F,-5.277200F,}, - {254.60570F,253.18280F,},{143.04340F,160.79980F,},{240.36910F,98.565800F,},{60.270300F,84.249700F,},{4.6884000F,24.362900F,},{88.200900F,69.498000F,},{659.95560F,473.75490F,},{293.20990F,70.108000F,}, - {11.956700F,71.243400F,},{109.95050F,-114.0644F,},{-138.5130F,-251.0179F,},{366.76410F,361.08470F,},{241.70930F,34.973000F,},{654.41940F,441.34520F,},{322.92560F,106.27710F,},{605.58650F,564.89110F,}, - }, - - { - {-142.8305F,-357.6638F,},{-135.1517F,-91.95450F,},{-202.7971F,-55.12860F,},{10.622800F,119.25650F,},{-99.61230F,-36.02510F,},{-247.5775F,-381.3310F,},{-193.0612F,-420.8008F,},{-130.4904F,-356.4558F,}, - {-220.9295F,27.109700F,},{40.264600F,84.888100F,},{-115.6413F,-362.4221F,},{-195.5899F,-402.2075F,},{-170.5517F,-393.0729F,},{-56.84850F,-56.71290F,},{-82.37190F,-78.84410F,},{24.433000F,140.77510F,}, - {63.625500F,-48.12080F,},{296.32420F,215.87390F,},{32.041200F,80.732200F,},{-69.63830F,-95.39770F,},{63.503200F,133.94610F,},{450.10010F,363.00900F,},{76.867200F,96.687600F,},{16.700500F,-57.93000F,}, - {66.165600F,144.72830F,},{-183.0404F,-407.2658F,},{268.25850F,163.71400F,},{219.75790F,95.572100F,},{411.11030F,329.38500F,},{101.35990F,133.20170F,},{415.09750F,248.72830F,},{337.80520F,255.31020F,}, - } -}; -#endif const Word16 SN_TCVQ_CB_SUB1_fx[2][128][2] = {//Qlog2(2.56) @@ -23751,63 +14513,6 @@ const Word16 SN_TCVQ_CB_SUB3_fx[4][32][2] = } }; -#ifndef IVAS_FLOAT_FIXED -const float AR_SVQ_CB1[32][8] = -{ - {-0.339000F, 1.5012220F, 6.1853590F, 1.6161480F, 17.3955550F, -42.95738F, 3.77089400F, 65.3032460F}, - {-1.351974F, 0.8601210F, 3.1036570F, -4.589009F, -2.7011160F, 9.0795180F, 109.094322F, -18.118401F}, - {-0.051575F, 0.6542590F, 0.3318340F, 3.1915060F, -28.443743F, -15.45044F, 27.7376230F, -38.083717F}, - {-0.147188F, 0.7379020F, 16.596052F, 29.073309F, -15.221093F, 27.937109F, 10.4191210F, 3.21426900F}, - {-0.174719F, 0.3557820F, 3.3571020F, -2.442146F, 15.4601880F, -25.54004F, -21.377092F, -50.052696F}, - {-0.080591F, -0.031826F, 3.2809340F, -3.976039F, -16.756672F, 41.078621F, -1.8470560F, -49.312294F}, - {0.0404590F, -0.057671F, 4.6628590F, -1.082124F, -38.447117F, -7.158832F, -34.349442F, -28.560730F}, - {-0.191480F, 0.3673300F, -2.228691F, -4.763459F, -19.210003F, -70.05153F, -11.678687F, -5.9500840F}, - {-0.475299F, -0.021802F, 9.2386790F, 30.398779F, 9.72456700F, -26.96944F, -10.201661F, -5.2955280F}, - {-0.118115F, 0.3768040F, -0.202488F, -11.21918F, 8.99932300F, -25.32194F, -49.176136F, 13.3742710F}, - {0.6345730F, -1.451740F, -8.976882F, -2.891539F, -5.2668590F, -0.626124F, -8.6982240F, -1.6381660F}, - {-0.238382F, 0.4619150F, -0.689163F, 17.277664F, -21.009787F, -22.53389F, 41.9676740F, 23.4523370F}, - {0.1244690F, 0.2248090F, -1.099318F, -5.740384F, -21.103287F, 37.994751F, -39.226761F, 15.9438480F}, - {0.1411080F, -0.771317F, -31.48548F, 36.181248F, -5.2501020F, 7.1155840F, -12.062582F, -29.405684F}, - {-0.496825F, 0.9002190F, 0.1078140F, -1.812450F, 64.9175870F, -25.02316F, -18.672247F, 3.00326800F}, - {-0.877380F, -0.101788F, -10.38443F, -42.23261F, 14.1089240F, 1.3607690F, 4.64615900F, -31.426619F}, - {0.0982910F, 0.0130060F, -0.021137F, 1.7109680F, 32.0608750F, -0.580048F, 30.8528560F, 20.9283330F}, - {0.3703540F, -1.599935F, 1.9165930F, -3.437332F, -15.018585F, 112.87896F, 6.09581900F, 6.06509400F}, - {-0.239501F, 0.5997340F, 2.2582460F, -26.70808F, 23.7027260F, 26.134411F, -12.169220F, 39.0906330F}, - {1.1549010F, -2.333077F, 0.9387050F, -0.701751F, -0.2820180F, -2.514828F, -84.775269F, 106.470406F}, - {-0.120044F, 0.4967050F, -16.62750F, -24.21043F, -2.7719380F, -23.45862F, 10.9770750F, 30.4632150F}, - {-0.452348F, 0.9215980F, 4.0024690F, -0.181623F, 29.6472510F, 32.739918F, -21.457884F, -17.419983F}, - {-0.247916F, -0.922579F, 1.4429350F, 1.8360180F, -12.594628F, 29.236597F, 27.3443550F, 68.9287800F}, - {0.7650280F, -0.545622F, -0.185167F, 2.1660980F, 10.6230550F, 11.247939F, -85.990189F, -37.903763F}, - {-0.236738F, 0.4044940F, 35.338413F, -21.96892F, -4.0015380F, -6.422642F, 11.3325710F, 3.03891400F}, - {-0.526660F, 1.1162520F, -3.871234F, -0.059409F, 0.78312500F, -9.391847F, 18.9848520F, -131.23975F}, - {-0.433725F, 0.2320700F, -3.264241F, -3.579835F, 21.6186620F, -52.31819F, 41.0296550F, -17.336693F}, - {-0.150218F, 0.2436480F, -6.385384F, 26.976192F, 20.1004640F, 15.708211F, -20.112616F, 38.2443770F}, - {-0.024170F, 0.8500570F, -4.579786F, -12.50560F, -54.536289F, 19.191902F, 19.6398750F, 10.2497080F}, - {-0.124103F, 1.0465660F, 3.0224720F, 11.137490F, 30.1374190F, 9.5446160F, 29.8574750F, -40.261337F}, - {-0.196671F, 0.7005810F, -9.238495F, -7.187382F, 2.81278600F, 38.941822F, 36.7256850F, 1.86695500F}, - {0.0413730F, -0.259086F, 3.8143860F, 10.183937F, -33.918419F, -13.19506F, -21.927582F, 40.2238810F}, -}; - -const float AR_SVQ_CB2[16][8] = -{ - {-14.44511F, -23.12155F, 81.241760F, -34.49714F, 21.0647720F, 22.618990F, -6.4248760F, -9.472386F}, - {-0.129507F, -38.33505F, 3.5780910F, -25.32102F, -71.163628F, -8.083008F, 7.34998800F, 3.5089460F}, - {-0.531659F, 42.984482F, -2.949942F, 23.185688F, 78.3983150F, 3.3631430F, -14.996096F, -8.493151F}, - {-0.553943F, 15.531711F, -8.511508F, -71.40907F, 18.1345100F, -63.29620F, -15.015837F, -2.255207F}, - {4.7402910F, 0.7143230F, -75.55894F, 25.115595F, -16.831573F, -18.81928F, 4.13968000F, 3.3929720F}, - {-32.50397F, 68.406067F, -3.199107F, -21.32696F, -25.471333F, 25.902178F, 10.0576690F, 2.3217050F}, - {11.180623F, 1.3522740F, 0.9572140F, -3.889576F, -39.069595F, 114.30133F, 29.1799030F, -4.798602F}, - {2.5571490F, -21.08170F, -29.49300F, -35.49685F, 24.4835700F, 46.452934F, -32.716568F, -32.81908F}, - {1.2645100F, 2.9239020F, 2.2633560F, 2.5141150F, -11.900713F, 5.8893120F, -68.704033F, 65.771515F}, - {-4.081663F, 17.567835F, 10.064315F, 22.194927F, -36.000233F, -26.37986F, -45.523380F, -52.28128F}, - {0.0228670F, -14.62688F, -13.12301F, -27.02922F, 41.2410550F, 21.242199F, 47.1964420F, 51.328987F}, - {-9.871984F, -24.99879F, 2.6157990F, 80.172798F, 0.43614800F, 36.480019F, 10.4512970F, 2.2055040F}, - {25.002769F, 10.773156F, 19.834276F, 2.9322950F, -2.5556860F, 6.9424410F, 10.6092970F, 0.1834710F}, - {-7.853089F, 17.244720F, 22.289469F, 30.428480F, -21.601667F, -66.57227F, 34.5492820F, 36.391033F}, - {4.8071940F, -49.02123F, 4.8164340F, 21.801281F, 39.0447200F, -62.45168F, -33.871502F, -1.336098F}, - {-2.572755F, -7.192194F, -2.623712F, -2.309371F, 14.2487590F, -21.16166F, 68.2372970F, -68.92265F}, -}; -#endif const Word16 AR_SVQ_CB1_fx[32][8] = /* x2.56 */ {//Qlog2(2.56) @@ -23865,36 +14570,18 @@ const Word16 AR_SVQ_CB2_fx[16][8] = /* x2.56 */ { -7, -18, -7, -6, 36, -54, 175, -176, } }; -#ifndef IVAS_FLOAT_FIXED -const float W_DTX_HO[HO_HIST_SIZE] = -{ - 0.2f, 0.16f, 0.128f, 0.1024f, 0.08192f, 0.065536f, 0.0524288f, 0.01048576f -}; -#endif const Word16 W_DTX_HO_FX[HO_HIST_SIZE] = /* Q15 */ { 6554, 5243, 4194, 3355, 2684, 2147, 1718, 344 }; -#ifndef IVAS_FLOAT_FIXED -const float ENR_ATT[5] = -{ - 1.7938412f, 1.3952098f, 1.0962363f, 0.9965784f, 0.9965784f -}; -#endif const Word16 ENR_ATT_fx[5] = /*Q8*/ { 459, 357, 281, 255, 255 }; -#ifndef IVAS_FLOAT_FIXED -const float HO_ATT[5] = -{ - 0.5370318f, 0.6165950f, 0.6839116f, 0.7079458f, 0.7079458f -}; -#endif const Word16 HO_ATT_FX[5] = /* Q15 */ { @@ -23908,15 +14595,6 @@ const Word16 uniform_model[] = { MAX_AR_FREQ, MAX_AR_FREQ / 2, 0 }; // Q0 * LSF quantization - mid-frame quantization tables *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float tbl_mid_gen_wb_2b[] = -{ - 0.4656f, 0.6281f, 0.7148f, 0.6457f, 0.6442f, 0.5957f, 0.5953f, 0.5216f, 0.4722f, 0.4609f, 0.4141f, 0.3861f, 0.3809f, 0.3685f, 0.4144f, 0.7097f, - 0.1809f, 0.1051f, 0.2402f, 0.3904f, 0.3790f, 0.4562f, 0.4577f, 0.5524f, 0.6081f, 0.5894f, 0.6131f, 0.6512f, 0.6503f, 0.6465f, 0.6216f, 0.4204f, - 0.4828f, 0.4701f, 0.1855f, 0.2034f, 0.1897f, 0.1691f, 0.1876f, 0.1558f, 0.1762f, 0.1863f, 0.1950f, 0.1997f, 0.2279f, 0.2492f, 0.3031f, 0.2513f, - 0.8591f, 0.9902f, 0.8941f, 0.8507f, 0.8395f, 0.8579f, 0.8529f, 0.8665f, 0.8549f, 0.8490f, 0.8456f, 0.8310f, 0.8161f, 0.7884f, 0.7167f, 0.7381f -}; -#endif const Word16 tbl_mid_gen_wb_2b_fx[] =//Q13 { @@ -23925,27 +14603,6 @@ const Word16 tbl_mid_gen_wb_2b_fx[] =//Q13 3955, 3851, 1520, 1666, 1554, 1385, 1537, 1276, 1443, 1526, 1597, 1636, 1867, 2041, 2483, 2059, 7038, 8112, 7324, 6969, 6877, 7028, 6987, 7098, 7003, 6955, 6927, 6808, 6685, 6459, 5871, 6047, }; -#ifndef IVAS_FLOAT_FIXED -const float tbl_mid_gen_wb_4b[] = -{ - 0.6754f, 0.6266f, 0.2594f, 0.4293f, 0.5988f, 0.6866f, 0.7737f, 0.8446f, 0.8367f, 0.7757f, 0.6525f, 0.4878f, 0.4399f, 0.6822f, 0.8499f, 0.9169f, - 0.5150f, 0.5075f, 0.5972f, 0.7730f, 0.7064f, 0.3579f, 0.3356f, 0.2816f, 0.4175f, 0.5651f, 0.6825f, 0.7629f, 0.8104f, 0.8879f, 0.9649f, 1.0229f, - 0.1213f, 0.0451f, 0.3574f, 0.6272f, 0.5909f, 0.7193f, 0.6508f, 0.6297f, 0.4830f, 0.3821f, 0.4058f, 0.6131f, 0.6461f, 0.4852f, 0.3038f, 0.1367f, - 0.1303f, 0.3017f, 0.7760f, 0.5108f, 0.3865f, 0.3936f, 0.4859f, 0.6171f, 0.6062f, 0.5887f, 0.4692f, 0.2842f, 0.1756f, 0.1119f, 0.3070f, 1.0069f, - 0.4625f, 0.1159f, 0.0638f, 0.2087f, 0.2359f, 0.4036f, 0.4013f, 0.5520f, 0.6631f, 0.6459f, 0.6890f, 0.7467f, 0.7527f, 0.7255f, 0.6874f, 0.2549f, - 0.9602f, 1.0056f, 0.7894f, 0.4936f, 0.4631f, 0.5603f, 0.5964f, 0.6598f, 0.7327f, 0.8236f, 0.8793f, 0.8986f, 0.8523f, 0.7516f, 0.4876f, 0.2617f, - 0.3464f, 0.8811f, 0.9676f, 0.9462f, 0.9284f, 0.9216f, 0.8469f, 0.8365f, 0.7655f, 0.7197f, 0.6851f, 0.6403f, 0.5936f, 0.4461f, 0.3832f, 0.7717f, - 0.5270f, 0.4135f, 0.1264f, 0.3417f, 0.3381f, 0.4151f, 0.3729f, 0.2742f, 0.2817f, 0.2233f, 0.1778f, 0.1230f, 0.1289f, 0.1093f, 0.0955f, 0.0132f, - 0.8746f, 0.9792f, 0.8386f, 0.7884f, 0.7704f, 0.6721f, 0.6808f, 0.5483f, 0.4803f, 0.4591f, 0.3960f, 0.3416f, 0.3050f, 0.2645f, 0.2381f, 0.5810f, - 0.7030f, 0.6592f, 0.1469f, 0.0839f, 0.0790f, 0.1176f, 0.1814f, 0.2442f, 0.3660f, 0.3881f, 0.4437f, 0.5245f, 0.5451f, 0.4541f, 0.3998f, 0.5842f, - 0.1284f, 0.2200f, 0.7487f, 0.7905f, 0.8393f, 0.8522f, 0.8766f, 0.8915f, 0.8712f, 0.8590f, 0.8882f, 0.8786f, 0.8529f, 0.8689f, 0.8129f, 0.7096f, - 0.4999f, 0.7661f, 0.7385f, 0.5921f, 0.3904f, 0.6033f, 0.3976f, 0.1778f, 0.1621f, 0.0616f, 0.0683f, 0.1798f, 0.4865f, 0.7124f, 0.7046f, 0.8980f, - 0.8318f, 0.9070f, 0.4943f, 0.3149f, 0.5268f, 0.2983f, 0.3951f, 0.3793f, 0.3001f, 0.3530f, 0.3117f, 0.2348f, 0.2285f, 0.2525f, 0.4374f, -0.0230f, - 0.0504f, 0.0291f, 0.0302f, 0.0619f, 0.0609f, 0.0660f, 0.0991f, 0.0937f, 0.0830f, 0.0586f, 0.0509f, 0.0374f, 0.0701f, 0.0650f, 0.0893f, 0.2719f, - 1.0371f, 1.1706f, 1.0188f, 0.9709f, 0.9345f, 0.9754f, 0.9875f, 1.0269f, 1.0413f, 1.0355f, 1.0280f, 1.0279f, 1.0333f, 1.0062f, 0.9397f, 0.8962f, - 0.3767f, 0.3565f, 0.3735f, 0.3687f, 0.1498f, -0.0124f, -0.0510f, -0.1065f, -0.0239f, 0.1375f, 0.2156f, 0.3068f, 0.3234f, 0.4213f, 0.5425f, 0.2117f -}; -#endif const Word16 tbl_mid_gen_wb_4b_fx[] = {//Q13 @@ -23967,43 +14624,6 @@ const Word16 tbl_mid_gen_wb_4b_fx[] = 3085, 2920, 3059, 3020, 1227, -101, -417, -872, -195, 1126, 1766, 2513, 2649, 3451, 4444, 1734 }; -#ifndef IVAS_FLOAT_FIXED -const float tbl_mid_gen_wb_5b[] = -{ - 0.7947f, 0.9837f, 0.8671f, 0.7440f, 0.7914f, 0.7161f, 0.7356f, 0.7865f, 0.8401f, 0.8431f, 0.8563f, 0.8033f, 0.6896f, 0.4937f, 0.3437f, 0.3075f, - 0.4612f, 0.2591f, 0.4370f, 0.5153f, 0.3171f, 0.5653f, 0.3472f, 0.5987f, 0.6648f, 0.5528f, 0.6331f, 0.7603f, 0.7581f, 0.6949f, 0.7584f, -0.5701f, - 1.1047f, 1.2127f, 1.0304f, 0.9669f, 0.9211f, 0.9570f, 0.9737f, 1.0175f, 1.0595f, 1.0628f, 1.0624f, 1.0506f, 1.0449f, 1.0223f, 0.9471f, 0.7819f, - 0.5180f, 0.7050f, 0.3588f, 0.7186f, 0.4978f, 0.3805f, 0.6429f, 0.6934f, 0.5602f, 0.2931f, 0.0892f, 0.1234f, 0.2023f, 0.5777f, 0.8607f, 0.4873f, - 0.3062f, 0.3852f, 0.4086f, 0.1959f, 0.5432f, 0.5655f, 0.4243f, 0.7347f, 0.4984f, 0.4668f, 0.6266f, 0.7349f, 0.3971f, 0.1670f, 0.2119f, 1.6488f, - 0.7244f, 0.7778f, 0.5486f, 0.3610f, 0.5400f, 0.8138f, 0.9969f, 1.0270f, 0.9713f, 0.8714f, 0.6736f, 0.3734f, 0.3453f, 0.3443f, 0.3385f, 0.3996f, - 0.6084f, 0.6795f, 0.7118f, 0.5561f, 0.6997f, 0.8225f, 0.8165f, 0.5717f, 0.2765f, 0.5144f, 0.8840f, 1.2194f, 1.1934f, 1.1069f, 0.5796f, 0.2798f, - 0.3175f, 0.6022f, 0.3374f, 0.6010f, 0.4594f, 0.4490f, 0.6831f, 0.2538f, 0.7456f, 0.8330f, 0.6722f, 0.6850f, 0.8292f, 0.6778f, 0.1392f, 1.2199f, - 0.8647f, 0.8161f, 0.6485f, 0.6343f, 0.3797f, 0.6515f, 0.4315f, 0.3022f, 0.3024f, 0.2120f, 0.2551f, 0.4923f, 0.6934f, 0.7993f, 0.8923f, 1.4418f, - 0.9937f, 1.0501f, 0.8747f, 0.8225f, 0.7346f, 0.6469f, 0.6941f, 0.5764f, 0.5015f, 0.5440f, 0.4532f, 0.3822f, 0.3245f, 0.2851f, 0.2747f, 0.9828f, - 0.0887f, 0.2277f, 0.7413f, 0.4800f, 0.2756f, 0.2946f, 0.5888f, 0.6998f, 0.6227f, 0.7478f, 0.5725f, 0.1379f, 0.1431f, 0.1805f, 0.4829f, 0.8794f, - 0.7376f, 0.1250f, 0.6556f, 0.7320f, 0.6059f, 0.6806f, 0.6199f, 0.7132f, 0.8434f, 1.0333f, 1.0499f, 0.7492f, 0.6957f, 0.9826f, 1.2112f, 1.0154f, - 0.3330f, 0.1984f, 0.5798f, 0.6109f, 0.7079f, 0.6028f, 0.7755f, 0.3997f, 0.2174f, 0.3778f, 0.1806f, 0.3828f, 0.6677f, 0.1698f, -0.0764f, 0.2957f, - 0.5380f, 0.3941f, 0.1545f, 0.1817f, 0.1492f, 0.1176f, 0.1401f, 0.1443f, 0.1624f, 0.2161f, 0.1050f, 0.0465f, 0.0992f, 0.1548f, 0.2871f, 0.4829f, - 0.2054f, -0.0147f, 0.0101f, 0.1512f, 0.1155f, 0.1964f, 0.2419f, 0.3925f, 0.4822f, 0.5127f, 0.5489f, 0.5979f, 0.5555f, 0.4388f, 0.2863f, 0.2983f, - 0.1288f, 0.3915f, 0.9106f, 0.8310f, 0.8671f, 0.8521f, 0.9646f, 1.0005f, 0.8326f, 0.7556f, 0.7819f, 0.9050f, 0.9725f, 0.9163f, 0.8449f, 1.2049f, - 0.3862f, 0.9760f, 1.0310f, 1.0706f, 1.0307f, 1.0134f, 0.8999f, 0.8605f, 0.7434f, 0.6955f, 0.6213f, 0.5850f, 0.6099f, 0.5950f, 0.5231f, 0.8160f, - 0.4494f, 0.0389f, 0.0654f, 0.3875f, 0.5487f, 0.6697f, 0.7089f, 0.7020f, 0.6666f, 0.5399f, 0.4341f, 0.4210f, 0.6284f, 0.9229f, 0.7662f, 0.4618f, - 0.2426f, 0.5138f, 0.8489f, 0.7178f, 0.9105f, 0.9475f, 0.5281f, 0.6052f, 0.6291f, 0.2624f, 0.3647f, 0.3014f, 0.1434f, 0.1341f, 0.4881f, 0.4822f, - 0.1594f, 0.2811f, 0.9458f, 1.0056f, 0.7466f, 0.3447f, 0.2163f, 0.1379f, 0.3098f, 0.4083f, 0.6490f, 0.5827f, 0.4478f, 0.6663f, 0.6737f, 0.6829f, - 0.5054f, 0.5285f, 0.4076f, 0.3663f, 0.3258f, -0.0096f, -0.0710f, -0.2110f, -0.0830f, 0.1579f, 0.3359f, 0.4516f, 0.4427f, 0.5405f, 0.6043f, 0.3350f, - 0.6481f, 0.4408f, 0.1212f, 0.4304f, 0.2494f, 0.4807f, 0.2526f, 0.1751f, 0.5094f, 0.3185f, 0.3301f, 0.4504f, 0.4499f, 0.2312f, 0.1710f, -0.2053f, - 0.7435f, 0.5872f, 0.1184f, 0.1298f, 0.2084f, 0.3730f, 0.5612f, 0.8230f, 0.9030f, 0.8439f, 0.8983f, 0.9624f, 0.9242f, 0.8337f, 0.7372f, 0.4667f, - 0.8055f, 0.7332f, 0.1523f, 0.5286f, 0.8466f, 0.4619f, 0.4315f, 0.4763f, 0.3932f, 0.6572f, 0.6947f, 0.7321f, 0.7294f, 0.8217f, 1.1139f, 0.6574f, - 0.0249f, 0.0296f, 0.2452f, 0.4120f, 0.4165f, 0.4159f, 0.3285f, 0.3109f, 0.0730f, -0.0183f, 0.0082f, 0.0305f, 0.0754f, 0.1446f, 0.2425f, 0.1412f, - 0.6086f, 0.9737f, 0.8510f, 0.1865f, 0.0105f, 0.0343f, 0.1827f, 0.3665f, 0.5118f, 0.5408f, 0.5763f, 0.6490f, 0.7326f, 0.7545f, 0.8498f, 0.6690f, - 0.8440f, 0.9721f, 0.6413f, 0.3723f, 0.6549f, 0.3935f, 0.4616f, 0.3716f, 0.3139f, 0.3851f, 0.2738f, 0.1968f, 0.2633f, 0.3083f, 0.3398f, -0.1988f, - 0.8972f, 0.8181f, 0.2972f, 0.2365f, 0.3111f, 0.2415f, 0.3441f, 0.3439f, 0.2514f, 0.3043f, 0.4160f, 0.2861f, 0.1513f, 0.1437f, 0.1116f, 0.4593f, - 0.5325f, 0.3790f, -0.1778f, -0.2148f, 0.0383f, 0.1772f, 0.3178f, 0.2004f, 0.2038f, 0.2017f, 0.2756f, 0.3042f, 0.4692f, 0.5370f, 0.6363f, 0.0806f, - 0.0427f, 0.0436f, 0.0133f, 0.0101f, -0.0678f, -0.1081f, -0.0871f, -0.0717f, -0.0147f, 0.0031f, 0.0231f, 0.0648f, 0.0721f, 0.0178f, 0.0190f, 0.1752f, - 0.0608f, 0.0258f, 0.3738f, 0.8259f, 0.8728f, 0.9939f, 0.9193f, 0.9188f, 0.9589f, 0.8421f, 0.8073f, 0.7910f, 0.6457f, 0.5261f, 0.6520f, 0.5040f, - 0.3360f, 0.8495f, 0.8652f, 0.5642f, 0.3230f, 0.2924f, 0.2144f, 0.0397f, 0.0596f, 0.0316f, -0.0152f, -0.0704f, -0.0675f, 0.0751f, 0.0680f, 0.5636f -}; -#endif const Word16 tbl_mid_gen_wb_5b_fx[] = {//Q13 @@ -24042,68 +14662,6 @@ const Word16 tbl_mid_gen_wb_5b_fx[] = }; -#ifndef IVAS_FLOAT_FIXED -const float tbl_mid_voi_wb_1b[] = -{ - 0.5556f, 0.5614f, 0.5803f, 0.6146f, 0.6082f, 0.6382f, 0.6492f, 0.6840f, 0.6957f, 0.6899f, 0.6887f, 0.7039f, 0.7110f, 0.7170f, 0.7103f, 0.7392f, - 0.4658f, 0.4096f, 0.2833f, 0.3310f, 0.3540f, 0.3314f, 0.3406f, 0.3062f, 0.3059f, 0.3186f, 0.3194f, 0.2953f, 0.3098f, 0.3201f, 0.3667f, 0.3327f -}; -const float tbl_mid_voi_wb_4b[] = -{ - 0.5294f, 0.5170f, 0.4304f, 0.4984f, 0.4290f, 0.6661f, 0.3867f, 0.3063f, 0.5393f, 0.6129f, 0.1603f, 0.3603f, 0.6527f, 0.4752f, 1.0162f, 1.4353f, - 0.5102f, 0.4928f, 0.4840f, 0.4249f, 0.4917f, 0.4009f, 0.3227f, 0.5597f, 0.5797f, 0.3755f, 0.3920f, 0.1344f, 0.5097f, 0.9082f, 0.7013f, -0.5011f, - 0.5175f, 0.4830f, 0.5432f, 0.6072f, 0.6592f, 0.7000f, 0.7624f, 0.8040f, 0.9490f, 0.3295f, 0.3397f, 0.4241f, 0.1642f, -0.0386f, 0.6188f, 0.5986f, - 0.4839f, 0.4651f, 0.3263f, 0.3700f, 0.2745f, 0.3867f, 0.3851f, 0.5132f, 0.8931f, 0.8760f, 1.0596f, 0.8724f, 0.6003f, 0.5049f, 0.3836f, 0.3676f, - 0.4969f, 0.4703f, 0.4758f, 0.4850f, 0.4228f, 0.3513f, 0.7059f, 0.6520f, 0.2106f, 0.0978f, 0.1457f, 0.5174f, 0.8381f, 0.6043f, 0.0969f, 0.7654f, - 0.4801f, 0.4578f, 0.6019f, 0.4476f, 0.4376f, 0.3113f, 0.5259f, 0.7027f, 0.5497f, 0.8644f, 0.5973f, 0.1313f, 0.0133f, 0.2014f, 0.2304f, 1.0817f, - 0.5863f, 0.5892f, 0.6066f, 0.6727f, 0.7041f, 0.5282f, 0.6442f, 0.6023f, 0.8434f, 0.9365f, 0.6537f, 0.4810f, 1.2195f, 1.1746f, 0.9103f, 0.5129f, - 0.5512f, 0.5199f, 0.2983f, 0.5917f, 0.4551f, 0.5614f, 0.6073f, 0.7500f, 0.4989f, 0.5331f, 0.8576f, 0.6138f, 0.2936f, 0.8562f, 1.6316f, 0.7646f, - 0.5793f, 0.5562f, 0.6601f, 0.7161f, 0.5777f, 0.4990f, 0.4840f, 0.4064f, 0.5700f, 0.3790f, 0.7224f, 0.9551f, 0.7356f, 1.1203f, 0.2266f, 1.6149f, - 0.5042f, 0.5144f, 0.3071f, 0.4324f, 0.5917f, 0.4579f, 0.4522f, 0.2905f, 0.5115f, 0.5843f, 0.5678f, 0.6080f, 0.6961f, -0.0033f, -0.3615f, 0.0158f, - 0.5445f, 0.5767f, 0.6388f, 0.5713f, 0.7336f, 0.8816f, 0.7753f, 0.3746f, 0.0739f, 0.7244f, 0.6869f, 0.4683f, 0.4260f, 0.7398f, 0.4341f, 0.3155f, - 0.5650f, 0.5765f, 0.6671f, 0.5102f, 0.5444f, 0.7536f, 0.7220f, 0.8862f, 0.5741f, 0.5022f, 0.4807f, 1.1700f, 0.9869f, 0.4616f, 0.9180f, 0.0763f, - 0.6106f, 0.6861f, 0.7754f, 0.8440f, 0.8752f, 0.9422f, 0.9259f, 1.0264f, 1.0205f, 0.9623f, 0.8996f, 0.8816f, 0.8076f, 0.7327f, 0.6793f, 1.1467f, - 0.4955f, 0.5031f, 0.5100f, 0.5392f, 0.4195f, 0.1782f, 0.1258f, 0.0135f, 0.0714f, 0.2085f, 0.5150f, 0.6615f, 0.3156f, 0.3900f, 0.7506f, 0.3932f, - 0.4143f, 0.3389f, 0.2405f, 0.3305f, 0.3641f, 0.4799f, 0.3964f, 0.2111f, 0.0548f, -0.0133f, -0.0056f, -0.0572f, 0.0485f, 0.2417f, 0.2814f, 0.1920f, - 0.3978f, 0.2283f, 0.0296f, 0.0478f, 0.0913f, 0.0751f, 0.1447f, 0.1568f, 0.2758f, 0.3280f, 0.2700f, 0.2151f, 0.2654f, 0.2303f, 0.2255f, 0.2530f -}; - -const float tbl_mid_voi_wb_5b[] = -{ - 0.5105f, 0.4663f, 0.5008f, 0.6860f, 0.5005f, 0.5466f, 0.4820f, 0.6168f, 0.3562f, 0.3763f, 0.5162f, 0.4556f, 0.2225f, 0.7751f, 2.1033f, 0.5617f, - 0.5323f, 0.4977f, 0.2730f, 0.5039f, 0.3926f, 0.5704f, 0.7351f, 0.7961f, 0.7014f, 0.5227f, 0.3810f, 0.5430f, 0.7882f, 1.5348f, 0.5372f, 0.9516f, - 0.5161f, 0.4988f, 0.5340f, 0.5273f, 0.5461f, 0.5780f, 0.5404f, 0.6856f, 0.7294f, 0.0169f, 0.7186f, 0.4543f, 0.2812f, -0.4187f, 0.6098f, 0.7624f, - 0.5273f, 0.5303f, 0.4892f, 0.5282f, 0.4056f, 0.8344f, 0.4427f, 0.4065f, 0.3812f, 0.4848f, 0.2908f, 0.2198f, 0.7839f, 0.3860f, 1.1033f, 1.7247f, - 0.5119f, 0.5130f, 0.5387f, 0.3300f, 0.5096f, 0.5286f, 0.3192f, 0.9277f, 0.2096f, 0.4280f, 0.6923f, 0.8753f, 0.4327f, 0.2869f, -0.3342f, 0.8895f, - 0.5090f, 0.4776f, 0.5277f, 0.4664f, 0.5432f, 0.8258f, 0.9150f, 0.9896f, 0.9090f, 0.6744f, 0.3770f, 0.2396f, 0.2459f, 0.4065f, 0.1192f, 0.1223f, - 0.5595f, 0.5394f, 0.4375f, 0.5036f, 0.5839f, 0.6266f, 0.3891f, 0.6103f, 0.5874f, 0.5663f, 1.2253f, 0.8567f, 0.6243f, 0.6796f, 0.4019f, -0.7769f, - 0.4793f, 0.4995f, 0.3308f, 0.3321f, 0.2196f, 0.4284f, 0.5544f, 0.4090f, 0.5595f, 0.7174f, 0.7982f, 0.6268f, 0.1198f, 0.4918f, 0.8815f, 0.0723f, - 0.5645f, 0.5575f, 0.5454f, 0.5652f, 0.6970f, 0.6375f, 0.7182f, 0.3128f, 1.0318f, 0.3448f, 0.0133f, 0.7923f, 0.1477f, 0.3566f, 0.8901f, 0.8689f, - 0.5182f, 0.5078f, 0.6249f, 0.5317f, 0.6768f, 0.3704f, 0.1840f, 0.5101f, 0.7289f, 0.2379f, 0.4136f, 0.0748f, 0.6097f, 1.1010f, 0.8246f, -0.0766f, - 0.5988f, 0.6057f, 0.5528f, 0.8575f, 0.5987f, 0.5457f, 0.6180f, 0.4199f, 0.7749f, 0.7449f, 0.5272f, 0.5365f, 0.9174f, 0.7994f, -0.4513f, 0.7950f, - 0.5716f, 0.5605f, 0.6473f, 0.5607f, 0.5092f, 0.6426f, 0.7466f, 0.9075f, 0.5011f, 0.6658f, 0.3106f, 1.0367f, 0.7924f, 0.1091f, 1.0966f, -0.2937f, - 0.4433f, 0.4193f, 0.4868f, 0.5121f, 0.4497f, 0.2652f, 0.8222f, 0.5557f, -0.0414f, 0.0932f, 0.0376f, 0.4227f, 0.7474f, 0.3534f, 0.3456f, 0.6976f, - 0.5268f, 0.5018f, 0.2730f, 0.3274f, 0.1291f, 0.0664f, 0.3102f, 0.2047f, 0.4332f, 0.3378f, 0.4121f, 0.7203f, 0.8165f, 0.7094f, 0.8077f, 0.4042f, - 0.5477f, 0.5231f, 0.6094f, 0.4463f, 0.7288f, 0.5550f, 0.4852f, 0.7322f, 0.6085f, 0.8074f, 0.5868f, 0.2406f, 1.8234f, 0.5357f, 0.7511f, 0.4092f, - 0.5616f, 0.5749f, 0.6051f, 0.5437f, 0.5948f, 0.8798f, 0.7179f, 0.4225f, 0.2786f, 0.2233f, 0.6857f, 1.2117f, 1.2260f, 0.9426f, 0.3945f, 0.5651f, - 0.4840f, 0.4684f, 0.2549f, 0.5206f, 0.6155f, 0.4246f, 0.5436f, 0.3423f, 0.5080f, 0.5930f, 0.5267f, 0.5302f, 0.6339f, -0.2225f, -0.6138f, -0.1388f, - 0.4198f, 0.3463f, 0.3111f, 0.4959f, 0.3487f, 0.3243f, 0.3250f, 0.6211f, 1.2876f, 1.0880f, 0.8094f, 0.7806f, 0.6797f, 0.3919f, 0.2967f, 0.4151f, - 0.4972f, 0.4686f, 0.7088f, 0.6465f, 0.4597f, 0.2859f, 0.3155f, 0.1088f, 0.3838f, 0.3647f, 0.8309f, 0.5647f, 0.4517f, 0.7146f, 0.1884f, 1.9724f, - 0.5113f, 0.4938f, 0.5241f, 0.5526f, 0.4893f, 0.1725f, 0.5946f, 0.7423f, 0.4025f, 0.7991f, 0.6111f, -0.0446f, -0.2892f, 0.1679f, 0.6741f, 1.0726f, - 0.5833f, 0.5838f, 0.6032f, 0.5539f, 0.5489f, 0.3820f, 0.6023f, 0.5336f, 0.8758f, 0.8451f, 1.0522f, 1.2495f, 1.0576f, 1.2314f, 1.3334f, 0.8928f, - 0.6036f, 0.6123f, 0.7860f, 0.7755f, 0.8086f, 0.7890f, 0.8469f, 0.9213f, 0.8550f, 0.8890f, 0.9344f, 0.8727f, 0.9338f, 0.3353f, 0.4170f, 1.8179f, - 0.5830f, 0.6630f, 0.6732f, 0.7561f, 0.6958f, 0.6695f, 0.3412f, 0.6684f, 0.4912f, 1.0853f, 0.3577f, 0.9663f, 0.4184f, 0.9851f, 0.7226f, 1.6406f, - 0.5759f, 0.6087f, 0.5859f, 0.6453f, 0.8016f, 0.8000f, 0.8058f, 0.1508f, -0.1484f, 0.8003f, 0.7444f, 0.4837f, 0.5323f, 0.6758f, 0.6735f, 0.4804f, - 0.5787f, 0.5712f, 0.6827f, 0.5971f, 0.4699f, 0.6927f, 0.7919f, 0.7616f, 0.8621f, 1.4702f, 1.3328f, 0.2976f, 0.4855f, 0.8906f, 1.0309f, 0.8087f, - 0.5932f, 0.7057f, 0.8047f, 0.9032f, 0.9799f, 1.0813f, 0.9935f, 1.0927f, 1.0693f, 0.6721f, 0.7683f, 0.7983f, 0.7954f, 0.9188f, 0.9385f, 0.4985f, - 0.4977f, 0.4603f, 0.4455f, 0.4127f, 0.4110f, 0.4941f, 0.4759f, 0.5349f, 0.3683f, -0.2632f, -0.1787f, -0.2694f, 0.1011f, 0.5906f, 0.2528f, 0.2884f, - 0.4634f, 0.4195f, 0.4343f, 0.4690f, 0.2649f, 0.5263f, 0.3176f, 0.0849f, 0.2367f, 0.3145f, 0.1513f, 0.0400f, -0.0157f, -0.0790f, 0.2078f, 0.3531f, - 0.4901f, 0.4280f, 0.0448f, 0.1648f, 0.4062f, 0.4517f, 0.4672f, 0.2977f, 0.1751f, 0.4745f, 0.2782f, 0.1945f, 0.4484f, 0.6724f, 0.4767f, -0.3629f, - 0.4990f, 0.4870f, 0.4556f, 0.3975f, 0.5759f, 0.1679f, 0.0186f, -0.0121f, -0.0310f, 0.1391f, 0.4368f, 0.4048f, 0.2680f, 0.2939f, 0.6137f, 0.1220f, - 0.4576f, 0.3876f, 0.1800f, 0.0838f, 0.2449f, 0.2391f, 0.1902f, 0.3734f, 0.6560f, 0.6120f, 0.2977f, 0.2925f, 0.3012f, 0.2707f, 0.1258f, 0.9602f, - 0.2486f, 0.0856f, 0.0151f, 0.0339f, 0.0400f, 0.0309f, 0.0806f, 0.0645f, 0.1008f, 0.0578f, 0.0978f, 0.0977f, 0.1286f, 0.1623f, 0.0981f, 0.1181f -}; -#endif const Word16 tbl_mid_voi_wb_1b_fx[] = /* Q13*/ { @@ -24165,63 +14723,6 @@ const Word16 tbl_mid_voi_wb_5b_fx[] =//Q13 2037, 701, 124, 278, 328, 253, 660, 528, 826, 473, 801, 800, 1053, 1330, 804, 967, }; -#ifndef IVAS_FLOAT_FIXED -const float tbl_mid_unv_wb_4b[] = -{ - 0.6335f, 0.3837f, 0.0061f, 0.3077f, 0.6323f, 0.7715f, 0.4749f, 0.4108f, 0.4372f, 0.4293f, 0.4158f, 0.3722f, 0.3496f, 0.1979f, 0.2359f, -0.1160f, - 0.8317f, 0.8118f, 0.2606f, 0.1187f, 0.0552f, 0.1774f, 0.3932f, 0.2072f, 0.3864f, 0.5424f, 0.7232f, 0.7687f, 0.4769f, 0.3494f, 0.4378f, 0.5646f, - 0.3911f, 0.3263f, 0.7933f, 0.5272f, 0.1287f, 0.0682f, 0.5376f, 0.7098f, 0.6191f, 0.8087f, 0.5485f, 0.3026f, 0.2164f, 0.1960f, 0.2562f, 1.0169f, - 0.2349f, 0.3254f, 0.5092f, 0.6735f, 0.7200f, 0.8835f, 0.8933f, 0.9395f, 0.8850f, 0.7653f, 0.7524f, 0.7371f, 0.6408f, 0.5230f, 0.5062f, 0.3452f, - 0.3460f, 0.0962f, 0.0094f, 0.2461f, 0.2226f, 0.3936f, 0.4201f, 0.5459f, 0.7673f, 0.8199f, 0.8280f, 0.8231f, 0.8197f, 0.8607f, 0.8010f, 0.3089f, - 0.7795f, 0.6877f, 0.7032f, 0.6328f, 0.4300f, 0.5229f, 0.2279f, 0.1276f, 0.0707f, 0.1435f, 0.2128f, 0.3172f, 0.6441f, 0.6792f, 0.6553f, 0.9661f, - 0.2191f, 0.1685f, 0.6328f, 1.1384f, 0.9794f, 0.3831f, 0.1536f, 0.2111f, 0.4062f, 0.4802f, 0.6310f, 0.6891f, 0.6434f, 0.7195f, 0.6825f, 0.6281f, - 0.7000f, 0.7134f, 1.0741f, 1.0685f, 0.6870f, 0.6970f, 0.6415f, 0.5947f, 0.6529f, 0.4188f, 0.3670f, 0.3035f, 0.1731f, 0.1189f, 0.1361f, 0.2484f, - 0.5120f, 1.0280f, 0.2212f, 0.7419f, 0.3666f, 0.4217f, 0.8202f, 0.9157f, 0.2588f, 0.2309f, 0.3245f, 0.2828f, 0.2803f, 0.7001f, 0.7999f, 0.5475f, - 0.9854f, 1.3984f, 0.7880f, 0.6188f, 0.6003f, 0.6025f, 0.5882f, 0.6020f, 0.7360f, 0.7624f, 0.7677f, 0.8184f, 0.8239f, 0.6515f, 0.5525f, 0.4851f, - 0.4527f, 0.6817f, 0.5962f, -0.1834f, 0.5938f, 0.2848f, 0.0740f, 0.7295f, 0.7859f, 0.2945f, 0.2364f, 0.4472f, 0.6828f, 0.8532f, 0.7874f, 0.4340f, - 0.4691f, -0.8407f, 0.4513f, 0.4736f, 0.5430f, 0.5205f, 0.7277f, 0.5125f, 0.4374f, 0.4812f, 0.4402f, 0.4600f, 0.5441f, 0.5339f, 0.5000f, 0.5523f, - 0.3114f, 0.8277f, 0.8566f, 0.3543f, 1.1264f, 1.0654f, 0.8704f, 0.2286f, 0.2817f, 0.5363f, 0.4860f, 0.4854f, 0.4885f, 0.4981f, 0.5884f, 0.6849f, - 0.0269f, -0.0212f, -0.0053f, -0.0662f, 0.0548f, 0.1794f, 0.2147f, 0.2311f, 0.1580f, 0.1215f, 0.0883f, 0.0883f, 0.0939f, 0.1213f, 0.1671f, 0.5387f, - 0.2015f, 0.2757f, 0.3759f, 0.3556f, 0.1435f, -0.0599f, -0.1540f, -0.1010f, -0.0265f, 0.1109f, 0.1375f, 0.2138f, 0.2321f, 0.2154f, 0.3242f, 0.0302f, - 0.6567f, 0.8920f, 0.9432f, 0.9931f, 1.0095f, 1.0340f, 1.0733f, 1.0465f, 1.0174f, 1.0278f, 0.9835f, 0.9231f, 0.8690f, 0.9104f, 0.8308f, 0.9015f -}; - -const float tbl_mid_unv_wb_5b[] = -{ - 0.7613f, 0.7719f, 0.1405f, 0.0932f, 0.5149f, 0.7991f, 1.0299f, 1.0621f, 0.9101f, 0.8061f, 0.5653f, 0.3541f, 0.3723f, 0.2189f, 0.2387f, 0.2759f, - 0.6765f, 0.5271f, 0.6522f, 0.6740f, 0.7323f, 0.6686f, 0.6427f, 0.6389f, 0.5635f, 0.4064f, 0.4204f, 0.2217f, -0.0540f, 0.0055f, -0.0003f, 1.0891f, - 0.7776f, 1.0019f, 0.8036f, 0.6873f, 0.6593f, 0.6663f, 0.6333f, 0.6830f, 0.8102f, 0.8412f, 0.8499f, 0.8505f, 0.8562f, 0.7727f, 0.6647f, 0.3785f, - 0.3357f, 0.3489f, 0.6355f, 0.5608f, 0.4041f, 0.4265f, 0.3007f, 0.4162f, 0.4157f, 0.7509f, 0.9377f, 1.0489f, 0.5420f, 0.4535f, 0.3596f, -0.5336f, - 0.1412f, 0.0807f, 0.4569f, 0.7835f, 0.9173f, 1.0155f, 0.9137f, 0.8909f, 0.9678f, 0.9173f, 0.8315f, 0.6923f, 0.6220f, 0.6253f, 0.6100f, 0.4810f, - 0.6266f, 0.4207f, 0.3287f, 0.1977f, 0.2270f, 0.3251f, 0.5619f, 0.7677f, 0.9096f, 0.8856f, 0.9169f, 0.9138f, 1.0827f, 1.0625f, 1.0292f, 0.8096f, - 0.3048f, 0.8186f, 0.8589f, 0.4195f, 1.3250f, 1.0856f, 0.7364f, 0.3688f, 0.3584f, 0.5818f, 0.5060f, 0.5001f, 0.6320f, 0.5961f, 0.7227f, 0.9292f, - -0.0186f, -0.0066f, 0.4828f, 0.1428f, 0.6790f, 0.5731f, 0.1672f, 1.0123f, 0.3792f, 0.2371f, 0.6724f, 0.5954f, 0.4266f, 0.1336f, 0.1317f, 0.6593f, - 0.0588f, 0.0455f, 0.0269f, -0.0433f, -0.0288f, -0.0401f, -0.0520f, -0.0180f, 0.0298f, 0.0687f, 0.0692f, 0.1117f, 0.1235f, 0.0825f, 0.0981f, 0.3321f, - 0.0534f, 0.0996f, 0.3916f, 0.4144f, 0.3053f, 0.4633f, 0.5347f, 0.3117f, 0.0487f, 0.0038f, -0.0633f, -0.0580f, -0.0198f, 0.2142f, 0.3482f, 0.1270f, - 0.2523f, 0.2594f, 0.1522f, 0.2921f, 0.3506f, 0.2707f, 0.4275f, 0.4855f, 0.5752f, 0.5218f, 0.3174f, 0.2905f, 0.2825f, 0.3531f, 0.4339f, 1.7003f, - 0.4843f, -0.0775f, -0.2139f, 0.3039f, 0.0370f, 0.1183f, 0.1276f, 0.3465f, 0.6921f, 0.5677f, 0.6350f, 0.6406f, 0.5105f, 0.5348f, 0.6704f, 0.0065f, - 0.3712f, 0.3044f, 1.1308f, 0.6067f, 0.0439f, -0.4632f, 0.7686f, 0.7904f, 0.5471f, 0.8138f, 0.6427f, 0.3550f, 0.2907f, 0.3527f, 0.4539f, 0.6299f, - 0.4107f, 0.5028f, 0.7238f, 0.3862f, -0.0910f, 1.1435f, 0.2016f, -0.0878f, 0.7719f, 0.6242f, 0.2342f, 0.1538f, 0.3210f, 0.4376f, 0.2715f, 0.3880f, - 0.2006f, 0.1022f, 0.9856f, 1.0177f, 0.5172f, 0.2847f, 0.2673f, -0.1435f, 0.2402f, 0.1511f, 0.2873f, 0.5806f, 0.6432f, 0.7030f, 0.6057f, 0.6605f, - 0.9265f, 0.7899f, 0.3217f, 0.2282f, 0.1476f, 0.1837f, 0.2586f, 0.1089f, 0.2017f, 0.4537f, 0.6116f, 0.4845f, 0.2765f, 0.2964f, 0.4001f, 0.6137f, - 0.8898f, 1.0569f, 1.3651f, 1.0880f, 0.7427f, 0.8146f, 0.7277f, 0.4933f, 0.4686f, 0.3226f, 0.2556f, 0.3925f, 0.3609f, 0.3534f, 0.4061f, 0.6180f, - 0.7097f, -0.6082f, 0.1367f, 0.2578f, 0.5352f, 0.6455f, 0.7388f, 0.5255f, 0.5767f, 0.6179f, 0.4126f, 0.5127f, 0.7127f, 0.8766f, 0.7792f, 0.5824f, - 0.4750f, 0.8985f, 0.5078f, 0.1736f, 0.6068f, 0.1146f, 0.0343f, 0.4376f, 0.5880f, 0.1435f, -0.0373f, 0.0317f, 0.4657f, 1.0099f, 0.8661f, 0.1866f, - 0.9984f, 2.3701f, 0.4294f, 0.4330f, 0.5639f, 0.5165f, 0.4100f, 0.4402f, 0.6263f, 0.5455f, 0.6353f, 0.6244f, 0.6031f, 0.5825f, 0.5097f, 0.6299f, - 0.5541f, 0.6583f, 0.3303f, 0.6556f, 0.1792f, 1.0361f, 1.2642f, 0.3391f, 0.1741f, 0.0453f, 0.9879f, 0.9531f, 0.6357f, 0.7319f, 0.7423f, 0.6173f, - 0.3987f, 0.4249f, -0.6046f, -0.6882f, 0.4910f, 0.6716f, 0.4378f, 0.3805f, 0.3341f, 0.4671f, 0.4465f, 0.4801f, 0.4397f, 0.6006f, 0.6054f, 0.4252f, - 0.4695f, 1.1709f, 0.4102f, 0.7910f, 0.1483f, 0.3870f, 0.6370f, 1.0548f, 0.0811f, 0.3290f, 0.4093f, 0.1806f, 0.2059f, 0.7384f, 0.8635f, 0.5733f, - 0.2723f, 0.5489f, 0.8253f, 0.8299f, 0.7252f, 0.6647f, 0.9867f, 0.9697f, 0.7177f, 0.4570f, 0.3074f, 0.7912f, 0.8034f, 0.7441f, 0.7787f, -0.0162f, - 0.4101f, 0.7419f, 0.1299f, 1.6854f, 0.9991f, 0.4401f, 0.5282f, 0.4610f, 0.7582f, 0.6075f, 0.6122f, 0.5946f, 0.7110f, 0.3059f, 0.2600f, 0.6038f, - 0.6606f, 0.5502f, 0.1162f, 0.5003f, 0.6136f, 0.4821f, 0.4274f, 0.2171f, 0.2387f, 0.2595f, 0.1985f, 0.4479f, 0.5427f, -0.1344f, 0.0898f, -0.3306f, - 0.5889f, 0.9132f, 1.0845f, -0.3197f, -0.3362f, 0.0343f, 0.5076f, 0.3968f, 0.5618f, 0.3596f, 0.4779f, 0.7531f, 0.7416f, 0.4266f, 0.3987f, 0.5340f, - 0.7489f, 0.3257f, 0.8281f, 1.2605f, 0.8413f, 0.6688f, 0.1844f, 0.3748f, 0.7825f, 1.1222f, 0.8489f, 0.1323f, 0.3507f, 0.8581f, 0.9935f, 0.6921f, - 0.8856f, 0.7036f, 0.6252f, 0.7064f, 0.3820f, 0.6683f, -0.3320f, 0.4602f, -0.1010f, 0.1065f, 0.1942f, 0.5670f, 0.8811f, 0.6730f, 0.7053f, 0.7718f, - 0.1447f, -1.5991f, 0.6787f, 0.7162f, 0.5069f, 0.3163f, 0.6009f, 0.4212f, 0.2517f, 0.5189f, 0.5235f, 0.4147f, 0.4682f, 0.2541f, 0.2860f, 0.3872f, - 0.5444f, 0.5385f, 0.4809f, 0.5395f, 1.1487f, -0.3404f, -0.3082f, -0.3512f, -0.2280f, 0.3479f, 0.5481f, 0.4996f, 0.3860f, 0.4747f, 0.4639f, 0.4263f, - 0.7822f, 1.0122f, 1.0295f, 1.0430f, 1.0629f, 1.1165f, 1.1447f, 1.1354f, 1.1063f, 1.0919f, 1.0188f, 0.9977f, 0.8758f, 0.8855f, 0.7471f, 0.9058f -}; -#endif const Word16 tbl_mid_unv_wb_4b_fx[] =//Q13 { @@ -24388,32 +14889,14 @@ const Word16 Da_nq[NB_LEADER+2] = const Word16 skip_bands_SWB_TBE[NUM_SHB_SUBFR+1] = {0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300, 320}; /* bands for SWB TBE quantisation Q0*/ const Word16 skip_bands_WB_TBE[NUM_SHB_SUBFR/2+1] = {0, 10, 20, 30, 40, 50, 60, 70, 80}; /* bands for WB TBE quantisation Q0*/ -#ifndef IVAS_FLOAT_FIXED -const float interpol_frac_shb_flt[NB_SUBFR*2] = { 0.7f, 0.3f, 0.4f, 0.6f, 0.1f, 0.9f, 0.0f, 1.0f }; -#endif const Word16 interpol_frac_shb[NB_SUBFR * 2] = { 22938, 9830, 13107, 19660, 3277, 29490, 0, 32767 /* Q15*/ /*0.7f, 0.3f, 0.4f, 0.6f, 0.1f, 0.9f, 0.0f, 1.0f */ }; /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ -const float AP1_STEEP[ALLPASSSECTIONS_STEEP] = -{ 0.06056541924291f, 0.42943401549235f, 0.80873048306552f }; - -const float AP2_STEEP[ALLPASSSECTIONS_STEEP] = -{ 0.22063024829630f, 0.63593943961708f, 0.94151583095682f }; - const Word16 AP1_STEEP_FX[ALLPASSSECTIONS_STEEP] = { 1985, 14072, 26500 }; /*Q15 Format */ const Word16 AP2_STEEP_FX[ALLPASSSECTIONS_STEEP] = { 7230, 20838, 30852 }; /*Q15 Format */ -#ifndef IVAS_FLOAT_FIXED -const float cos_fb_exc[32] = -{ - 9.536743164062500e-007f,9.353497034680913e-007f,8.810801546133007e-007f,7.929511980364623e-007f,6.743495646333031e-007f,5.298330165715015e-007f,3.649553264040151e-007f,1.860525884467279e-007f, - 0.000000000000000e+000f,-1.860526737118562e-007f,-3.649554116691434e-007f,-5.298331302583392e-007f,-6.743496214767220e-007f,-7.929512548798812e-007f,-8.810802114567196e-007f,-9.353497603115102e-007f, - -9.536743164062500e-007f,-9.353497034680913e-007f,-8.810801546133007e-007f,-7.929511411930434e-007f,-6.743495077898842e-007f,-5.298329597280826e-007f,-3.649552411388868e-007f,-1.860525173924543e-007f, - 0.000000000000000e+000f,1.860527589769845e-007f,3.649554969342717e-007f,5.298331871017581e-007f,6.743496783201408e-007f,7.929513117233000e-007f,8.810802683001384e-007f,9.353497603115102e-007f -}; -#endif const Word16 cos_fb_exc_fx[32] = /* Q15 */ { /*Q35*/ @@ -24422,28 +14905,6 @@ const Word16 cos_fb_exc_fx[32] = /* Q15 */ -32768, -32138, -30274, -27246, -23170, -18205, -12540, -6393, 0, 6393, 12540, 18205, 23170, 27246, 30274, 32138, }; -const float STEPS[4] = { 0.00635f, 0.003175f, 0.0015875f, 0.00079375f}; - -const float recip_order[15] = -{ - 0.0000000f, 1.0000000f, 0.5000000f, 0.3333333f, 0.2500000f, - 0.2000000f, 0.1666667f, 0.1428571f, 0.1250000f, 0.1111111f, - 0.1000000f, 0.0909091f, 0.0833333f, 0.0769231f, 0.0714286f -}; - -#ifndef IVAS_FLOAT_FIXED -const float Hilbert_coeffs[4*NUM_HILBERTS][HILBERT_ORDER1+1] = -{ - { 0.0f, 0.8740234375f, 0.0f, -1.87371826171875f, 0.0f, 1.0f}, /* num_Real[0] */ - {0.72613525390625f, 0.0f, -1.7236328125f, 0.0f, 1.0f, 0.0f}, /* num_Imag[0] */ - { 1.0f, 0.0f, -1.87371826171875f, 0.0f, 0.8740234375f, 0.0f}, /* den_Real[0] */ - { 1.0f, 0.0f, -1.7236328125f, 0.0f, 0.72613525390625f, 0.0f}, /* den_Imag[0] */ - {0.46820068359375f, 0.0f, -1.45599365234375f, 0.0f, 1.0f, 0.0f}, /* num_Real[1] */ - {0.15289306640625f, 0.0f, -1.10711669921875f, 0.0f, 1.0f, 0.0f}, /* num_Imag[1] */ - { 1.0f, 0.0f, -1.45599365234375f, 0.0f, 0.46820068359375f, 0.0f}, /* den_Real[1] */ - { 1.0f, 0.0f, -1.10711669921875f, 0.0f, 0.15289306640625f, 0.0f} /* den_Imag[1] */ -}; -#endif const Word16 Hilbert_coeffs_fx[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1] = /* Q14 */ { @@ -24459,13 +14920,6 @@ const Word16 Hilbert_coeffs_fx[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1] = /* Q14 */ /* Overlap add window for SHB excitation used in analysis and synthesis */ -#ifndef IVAS_FLOAT_FIXED -const float window_shb[L_SHB_LAHEAD]= /* sin, 1, sin */ -{ - 4.618346E-02f, 1.381564E-01f, 2.289505E-01f, 3.177914E-01f, 4.039210E-01f, 4.866045E-01f, 5.651364E-01f, 6.388468E-01f, 7.071068E-01f, 7.693340E-01f, - 8.249975E-01f, 8.736224E-01f, 9.147939E-01f, 9.481606E-01f, 9.734381E-01f, 9.904104E-01f, 9.989330E-01f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f -}; -#endif const Word16 window_shb_fx[L_SHB_LAHEAD] = /*sin, 1, sin */ { @@ -24475,15 +14929,6 @@ const Word16 window_shb_fx[L_SHB_LAHEAD] = /*sin, 1, sin */ }; /* Upsampled overlap add window for SHB excitation used transition generation */ -#ifndef IVAS_FLOAT_FIXED -const float window_shb_32k[2*L_SHB_LAHEAD]= -{ - 4.618346E-02f, 9.216993E-02f, 1.381564E-01f, 1.835534E-01f, 2.289505E-01f, 2.733710E-01f, 3.177914E-01f, 3.608562E-01f, 4.039210E-01f, 4.452628E-01f, - 4.866045E-01f, 5.258704E-01f, 5.651364E-01f, 6.019916E-01f, 6.388468E-01f, 6.729768E-01f, 7.071068E-01f, 7.382205E-01f, 7.693340E-01f, 7.971658E-01f, - 8.249975E-01f, 8.493099E-01f, 8.736224E-01f, 8.942082E-01f, 9.147939E-01f, 9.314773E-01f, 9.481606E-01f, 9.607993E-01f, 9.734381E-01f, 9.819242E-01f, - 9.904104E-01f, 9.946717E-01f, 9.989330E-01f, 9.994665E-01f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f, 1.000000e+000f -}; -#endif const Word16 window_shb_32k_fx[2 * L_SHB_LAHEAD] = { @@ -24495,16 +14940,6 @@ const Word16 window_shb_32k_fx[2 * L_SHB_LAHEAD] = }; /* Short overlap add window for SHB excitation used in anal and synth */ -#ifndef IVAS_FLOAT_FIXED -const float subwin_shb[SHB_OVERLAP_LEN+1]= -{ - 0.000000000f, 0.006155830f, 0.024471742f, 0.054496738f, 0.095491503f, - 0.146446609f, 0.206107374f, 0.273004750f, 0.345491503f, 0.421782767f, - 0.500000000f, 0.578217233f, 0.654508497f, 0.726995250f, 0.793892626f, - 0.853553391f, 0.904508497f, 0.945503262f, 0.975528258f, 0.993844170f, - 1.000000000f -}; -#endif const Word16 subwin_shb_fx[SHB_OVERLAP_LEN + 1] = { @@ -24516,55 +14951,15 @@ const Word16 subwin_shb_fx[SHB_OVERLAP_LEN + 1] = 32767 }; -#ifndef IVAS_FLOAT_FIXED -const float window_wb[L_SHB_LAHEAD/4]=/* sin, 1 */ -{ 2.289505E-001f, 5.651364E-001f, 8.249975E-001f, 9.734381E-001f, 1.000000e+000f}; -#endif const Word16 window_wb_fx[L_SHB_LAHEAD / 4] =/*sin, 1 */ { 7502, 18518, 27034, 31898, 32767 }; /*Q15*/ /* Short overlap add window for SHB excitation used in anal and synth */ -#ifndef IVAS_FLOAT_FIXED -const float subwin_wb[SHB_OVERLAP_LEN/2+1]= -{0.00000000f, 0.15643448f, 0.30901700f, 0.45399052f, 0.58778524f, 0.70710677f, 0.80901700f, 0.89100653f, 0.95105654f, 0.98768836f, 1.0000000f}; -#endif const Word16 subwin_wb_fx[SHB_OVERLAP_LEN / 2 + 1] = { 0, 5126, 10126, 14876, 19261, 23170, 26510, 29197, 31164, 32365, 32767 }; // Q15 /* Window for calculating SHB LPC coeffs */ -#ifndef IVAS_FLOAT_FIXED -const float win_lpc_shb[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5/8]= -{ - 0.0000337210f, 0.0001348794f, 0.0003034616f, 0.0005394449f, 0.0008427974f, 0.0012134782f, 0.0016514373f, 0.0021566156f, 0.0027289450f, 0.0033683483f, - 0.0040747393f, 0.0048480226f, 0.0056880940f, 0.0065948401f, 0.0075681387f, 0.0086078584f, 0.0097138590f, 0.0108859914f, 0.0121240975f, 0.0134280101f, - 0.0147975536f, 0.0162325430f, 0.0177327850f, 0.0192980770f, 0.0209282080f, 0.0226229582f, 0.0243820988f, 0.0262053927f, 0.0280925938f, 0.0300434477f, - 0.0320576912f, 0.0341350526f, 0.0362752518f, 0.0384779999f, 0.0407430000f, 0.0430699465f, 0.0454585255f, 0.0479084149f, 0.0504192842f, 0.0529907947f, - 0.0556225996f, 0.0583143439f, 0.0610656645f, 0.0638761903f, 0.0667455422f, 0.0696733332f, 0.0726591683f, 0.0757026449f, 0.0788033524f, 0.0819608725f, - 0.0851747795f, 0.0884446397f, 0.0917700121f, 0.0951504482f, 0.0985854920f, 0.1020746802f, 0.1056175421f, 0.1092136000f, 0.1128623686f, 0.1165633559f, - 0.1203160626f, 0.1241199826f, 0.1279746028f, 0.1318794033f, 0.1358338573f, 0.1398374315f, 0.1438895859f, 0.1479897739f, 0.1521374423f, 0.1563320319f, - 0.1605729768f, 0.1648597049f, 0.1691916381f, 0.1735681920f, 0.1779887763f, 0.1824527948f, 0.1869596453f, 0.1915087200f, 0.1960994051f, 0.2007310816f, - 0.2054031247f, 0.2101149041f, 0.2148657844f, 0.2196551248f, 0.2244822791f, 0.2293465964f, 0.2342474205f, 0.2391840904f, 0.2441559401f, 0.2491622991f, - 0.2542024921f, 0.2592758392f, 0.2643816562f, 0.2695192543f, 0.2746879405f, 0.2798870178f, 0.2851157847f, 0.2903735361f, 0.2956595627f, 0.3009731516f, - 0.3063135860f, 0.3116801456f, 0.3170721065f, 0.3224887415f, 0.3279293199f, 0.3333931079f, 0.3388793684f, 0.3443873616f, 0.3499163444f, 0.3554655711f, - 0.3610342931f, 0.3666217595f, 0.3722272163f, 0.3778499077f, 0.3834890752f, 0.3891439582f, 0.3948137938f, 0.4004978174f, 0.4061952622f, 0.4119053598f, - 0.4176273399f, 0.4233604308f, 0.4291038591f, 0.4348568502f, 0.4406186280f, 0.4463884155f, 0.4521654343f, 0.4579489052f, 0.4637380481f, 0.4695320822f, - 0.4753302259f, 0.4811316971f, 0.4869357134f, 0.4927414919f, 0.4985482494f, 0.5043552028f, 0.5101615687f, 0.5159665639f, 0.5217694055f, 0.5275693108f, - 0.5333654974f, 0.5391571836f, 0.5449435881f, 0.5507239304f, 0.5564974308f, 0.5622633107f, 0.5680207922f, 0.5737690989f, 0.5795074552f, 0.5852350873f, - 0.5909512225f, 0.5966550899f, 0.6023459200f, 0.6080229454f, 0.6136854001f, 0.6193325205f, 0.6249635449f, 0.6305777137f, 0.6361742697f, 0.6417524579f, - 0.6473115260f, 0.6528507242f, 0.6583693052f, 0.6638665247f, 0.6693416413f, 0.6747939164f, 0.6802226146f, 0.6856270037f, 0.6910063547f, 0.6963599419f, - 0.7016870434f, 0.7069869405f, 0.7122589184f, 0.7175022660f, 0.7227162760f, 0.7279002451f, 0.7330534742f, 0.7381752681f, 0.7432649359f, 0.7483217913f, - 0.7533451519f, 0.7583343404f, 0.7632886838f, 0.7682075137f, 0.7730901667f, 0.7779359842f, 0.7827443127f, 0.7875145034f, 0.7922459131f, 0.7969379034f, - 0.8015898416f, 0.8062011002f, 0.8107710572f, 0.8152990961f, 0.8197846062f, 0.8242269825f, 0.8286256258f, 0.8329799428f, 0.8372893461f, 0.8415532545f, - 0.8457710928f, 0.8499422922f, 0.8540662899f, 0.8581425298f, 0.8621704620f, 0.8661495432f, 0.8700792367f, 0.8739590124f, 0.8777883471f, 0.8815667242f, - 0.8852936341f, 0.8889685740f, 0.8925910483f, 0.8961605683f, 0.8996766527f, 0.9031388271f, 0.9065466245f, 0.9098995853f, 0.9131972572f, 0.9164391954f, - 0.9196249627f, 0.9227541293f, 0.9258262731f, 0.9288409798f, 0.9317978427f, 0.9346964630f, 0.9375364498f, 0.9403174198f, 0.9430389982f, 0.9457008176f, - 0.9483025192f, 0.9508437519f, 0.9533241731f, 0.9557434481f, 0.9581012506f, 0.9603972626f, 0.9626311744f, 0.9648026847f, 0.9669115005f, 0.9689573374f, - 0.9709399196f, 0.9728589795f, 0.9747142583f, 0.9765055057f, 0.9782324802f, 0.9798949488f, 0.9814926873f, 0.9830254801f, 0.9844931206f, 0.9858954107f, - 0.9872321612f, 0.9885031920f, 0.9897083316f, 0.9908474173f, 0.9919202956f, 0.9929268217f, 0.9938668599f, 0.9947402834f, 0.9955469743f, 0.9962868239f, - 0.9969597324f, 0.9975656090f, 0.9981043719f, 0.9985759486f, 0.9989802753f, 0.9993172977f, 0.9995869701f, 0.9997892562f, 0.9999241288f, 0.9999915697f -}; -#endif const Word16 win_lpc_shb_fx[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5 / 8] = { @@ -24595,19 +14990,6 @@ const Word16 win_lpc_shb_fx[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5 / 8] = 32753, 32760, 32765, 32767 }; -#ifndef IVAS_FLOAT_FIXED -const float win_lpc_hb_wb[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5/32]= -{ - 0.000171338f, 0.001541333f, 0.004277569f, 0.008372546f, 0.01381504f, 0.020590133f, 0.028679254f, 0.038060234f, - 0.048707358f, 0.060591444f, 0.073679918f, 0.087936906f, 0.10332333f, 0.119797017f, 0.137312814f, 0.155822712f, - 0.175275976f, 0.195619285f, 0.216796882f, 0.238750718f, 0.26142062f, 0.284744452f, 0.308658284f, 0.33309657f, - 0.357992328f, 0.383277318f, 0.408882237f, 0.434736904f, 0.460770452f, 0.486911526f, 0.513088474f, 0.539229548f, - 0.565263096f, 0.591117763f, 0.616722682f, 0.642007672f, 0.66690343f, 0.691341716f, 0.715255548f, 0.73857938f, - 0.761249282f, 0.783203118f, 0.804380715f, 0.824724024f, 0.844177288f, 0.862687186f, 0.880202983f, 0.89667667f, - 0.912063094f, 0.926320082f, 0.939408556f, 0.951292642f, 0.961939766f, 0.971320746f, 0.979409867f, 0.98618496f, - 0.991627454f, 0.995722431f, 0.998458667f, 0.999828662f -}; -#endif const Word16 win_lpc_hb_wb_fx[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5 / 32] = {//Q15 @@ -24622,21 +15004,6 @@ const Word16 win_lpc_hb_wb_fx[(L_LOOK_12k8 + L_SUBFR + L_FRAME) * 5 / 32] = 32611, 32698, 32751 }; -#ifndef IVAS_FLOAT_FIXED -const float ola_win_shb_switch_fold[L_SUBFR16k] = -{ - 0.009817319f, 0.029448173f, 0.049067674f, 0.068668259f, 0.088242371f, 0.107782463f, 0.127281003f, 0.146730474f, - 0.166123378f, 0.185452238f, 0.204709603f, 0.223888048f, 0.242980180f, 0.261978638f, 0.280876099f, 0.299665277f, - 0.318338928f, 0.336889853f, 0.355310901f, 0.373594970f, 0.391735011f, 0.409724030f, 0.427555093f, 0.445221326f, - 0.462715917f, 0.480032122f, 0.497163266f, 0.514102744f, 0.530844026f, 0.547380657f, 0.563706262f, 0.579814548f, - 0.595699304f, 0.611354407f, 0.626773822f, 0.641951603f, 0.656881899f, 0.671558955f, 0.685977112f, 0.700130812f, - 0.714014598f, 0.727623118f, 0.740951125f, 0.753993482f, 0.766745160f, 0.779201243f, 0.791356929f, 0.803207531f, - 0.814748483f, 0.825975333f, 0.836883753f, 0.847469539f, 0.857728610f, 0.867657010f, 0.877250911f, 0.886506616f, - 0.895420555f, 0.903989293f, 0.912209526f, 0.920078084f, 0.927591935f, 0.934748182f, 0.941544065f, 0.947976965f, - 0.954044402f, 0.959744037f, 0.965073672f, 0.970031253f, 0.974614869f, 0.978822751f, 0.982653279f, 0.986104976f, - 0.989176510f, 0.991866698f, 0.994174502f, 0.996099033f, 0.997639549f, 0.998795456f, 0.999566309f, 0.999951809f -}; -#endif const Word16 ola_win_shb_switch_fold_fx[L_SUBFR16k] = {//Q15 @@ -24653,31 +15020,6 @@ const Word16 ola_win_shb_switch_fold_fx[L_SUBFR16k] = }; /* Window for calculating whitening filter for SHB excitation */ -#ifndef IVAS_FLOAT_FIXED -const float win_flatten[ L_FRAME16k/2]= -{ - 9.57802E-05f, 0.000383084f, 0.000861802f, 0.00153175f, 0.002392671f, 0.003444236f, 0.004686042f, 0.006117614f, - 0.007738401f, 0.009547785f, 0.011545071f, 0.013729494f, 0.016100218f, 0.018656334f, 0.021396862f, 0.024320754f, - 0.027426888f, 0.030714075f, 0.034181054f, 0.037826499f, 0.041649013f, 0.04564713f, 0.049819319f, 0.054163981f, - 0.058679453f, 0.063364004f, 0.068215839f, 0.0732331f, 0.078413864f, 0.083756147f, 0.089257901f, 0.094917019f, - 0.100731333f, 0.106698615f, 0.112816579f, 0.119082881f, 0.12549512f, 0.13205084f, 0.138747529f, 0.145582621f, - 0.152553498f, 0.159657489f, 0.166891873f, 0.174253877f, 0.181740681f, 0.189349417f, 0.197077169f, 0.204920978f, - 0.212877838f, 0.2209447f, 0.229118474f, 0.237396028f, 0.245774191f, 0.254249754f, 0.262819469f, 0.271480052f, - 0.280228187f, 0.28906052f, 0.297973669f, 0.306964218f, 0.316028723f, 0.325163712f, 0.334365684f, 0.343631114f, - 0.352956452f, 0.362338126f, 0.37177254f, 0.381256082f, 0.390785116f, 0.400355993f, 0.409965046f, 0.419608593f, - 0.42928294f, 0.43898438f, 0.448709196f, 0.458453663f, 0.468214047f, 0.477986609f, 0.487767604f, 0.497553287f, - 0.507339906f, 0.517123714f, 0.526900961f, 0.536667901f, 0.546420794f, 0.556155902f, 0.565869495f, 0.575557852f, - 0.585217262f, 0.594844023f, 0.604434447f, 0.61398486f, 0.623491603f, 0.632951034f, 0.642359529f, 0.651713483f, - 0.661009312f, 0.670243455f, 0.679412375f, 0.688512557f, 0.697540517f, 0.706492795f, 0.715365961f, 0.724156616f, - 0.732861391f, 0.741476953f, 0.75f, 0.758427267f, 0.766755524f, 0.774981583f, 0.78310229f, 0.791114534f, - 0.799015247f, 0.8068014f, 0.814470012f, 0.822018143f, 0.829442903f, 0.836741446f, 0.843910977f, 0.850948748f, - 0.857852063f, 0.864618278f, 0.871244799f, 0.87772909f, 0.884068664f, 0.890261093f, 0.896304006f, 0.902195086f, - 0.907932076f, 0.91351278f, 0.918935058f, 0.924196833f, 0.92929609f, 0.934230874f, 0.938999296f, 0.943599527f, - 0.948029807f, 0.952288437f, 0.956373785f, 0.960284288f, 0.964018446f, 0.967574828f, 0.970952073f, 0.974148887f, - 0.977164044f, 0.97999639f, 0.982644839f, 0.985108376f, 0.987386059f, 0.989477014f, 0.99138044f, 0.993095607f, - 0.99462186f, 0.995958613f, 0.997105353f, 0.998061642f, 0.998827114f, 0.999401474f, 0.999784503f, 0.999976054f -}; -#endif const Word16 win_flatten_fx[L_FRAME16k / 2] = /*Q15 */ { @@ -24699,15 +15041,6 @@ const Word16 win_flatten_fx[L_FRAME16k / 2] = /*Q15 */ 32486, 32542, 32592, 32636, 32673, 32704, 32730, 32748, 32761, 32767 }; -const float win_flatten_4k[ L_FRAME16k/8]= -{ - 0.000385482f, 0.003465772f, 0.00960736f, 0.018772382f, 0.030904332f, 0.045928413f, 0.063751996f, 0.084265194f, - 0.107341535f, 0.132838745f, 0.160599627f, 0.190453025f, 0.222214883f, 0.255689379f, 0.290670131f, 0.326941471f, - 0.364279775f, 0.402454839f, 0.441231301f, 0.480370092f, 0.519629908f, 0.558768699f, 0.597545161f, 0.635720225f, - 0.673058529f, 0.709329869f, 0.744310621f, 0.777785117f, 0.809546975f, 0.839400373f, 0.867161255f, 0.892658465f, - 0.915734806f, 0.936248004f, 0.954071587f, 0.969095668f, 0.981227618f, 0.99039264f, 0.996534228f, 0.999614518f -}; - const Word16 win_flatten_4k_fx[L_FRAME16k / 8] = /*Q15 */ { 13, 114, 315, 615, 1013, 1505, 2089, 2761, @@ -24716,267 +15049,6 @@ const Word16 win_flatten_4k_fx[L_FRAME16k / 8] = /*Q15 */ 22055, 23243, 24390, 25486, 26527, 27505, 28415, 29251, 30007, 30679, 31263, 31755, 32153, 32453, 32654, 32755 }; -#ifndef IVAS_FLOAT_FIXED -const float wb_bwe_lsfvq_cbook_8bit[256*6] = -{ - 0.064311408f, 0.10468847f, 0.15634165f, 0.20375369f, 0.28696818f, 0.40275119f, - 0.123011120f, 0.15468679f, 0.22408577f, 0.27191057f, 0.32490698f, 0.37368365f, - 0.062166951f, 0.10810068f, 0.20470853f, 0.26741467f, 0.32058192f, 0.38620580f, - 0.174916950f, 0.19449120f, 0.24146226f, 0.29131976f, 0.38403433f, 0.43426356f, - 0.061881055f, 0.10185221f, 0.16703630f, 0.24048992f, 0.31339988f, 0.37993594f, - 0.177282270f, 0.19826299f, 0.25380750f, 0.29369257f, 0.35085620f, 0.42745721f, - 0.074096108f, 0.12090045f, 0.17319672f, 0.23572965f, 0.34671734f, 0.40846492f, - 0.193731520f, 0.25350369f, 0.27155532f, 0.30359655f, 0.33746877f, 0.40740063f, - 0.108401970f, 0.13491719f, 0.17991717f, 0.21799053f, 0.30440233f, 0.40384627f, - 0.174536930f, 0.19361701f, 0.22834544f, 0.25644155f, 0.32851965f, 0.41061748f, - 0.107099060f, 0.13363550f, 0.17994689f, 0.22695679f, 0.35903688f, 0.43662047f, - 0.137970100f, 0.24785769f, 0.26827308f, 0.30078557f, 0.34276146f, 0.42785187f, - 0.066387915f, 0.12114685f, 0.23766229f, 0.29916662f, 0.34589517f, 0.39398126f, - 0.137657570f, 0.24889487f, 0.27118048f, 0.31891228f, 0.38713554f, 0.45651107f, - 0.128872750f, 0.16127981f, 0.21523141f, 0.25706016f, 0.34536624f, 0.44451874f, - 0.218467830f, 0.25571942f, 0.27589334f, 0.30889302f, 0.36007931f, 0.43548091f, - 0.056956662f, 0.09351124f, 0.14796259f, 0.22055691f, 0.34257293f, 0.42610824f, - 0.180505310f, 0.20235648f, 0.26672026f, 0.30524807f, 0.34745481f, 0.38838059f, - 0.101998340f, 0.13874827f, 0.19761236f, 0.28698298f, 0.36602473f, 0.40947282f, - 0.187859700f, 0.20997279f, 0.27259784f, 0.31595901f, 0.37782186f, 0.41948720f, - 0.080803553f, 0.15174572f, 0.23117477f, 0.28917899f, 0.36979528f, 0.42341956f, - 0.177685260f, 0.19914809f, 0.26693575f, 0.33390045f, 0.38670310f, 0.42635921f, - 0.123052730f, 0.15593820f, 0.23170087f, 0.28281293f, 0.34711335f, 0.43915513f, - 0.209470720f, 0.25584593f, 0.27727828f, 0.32496712f, 0.39502842f, 0.45856840f, - 0.111734840f, 0.14147902f, 0.20349777f, 0.25418848f, 0.31658104f, 0.37184560f, - 0.177056760f, 0.19666426f, 0.25464026f, 0.29941442f, 0.37334871f, 0.45296459f, - 0.109640340f, 0.13537075f, 0.20335155f, 0.26529530f, 0.35213594f, 0.43554990f, - 0.155959700f, 0.25239450f, 0.27483222f, 0.32663911f, 0.37442742f, 0.42423408f, - 0.060802584f, 0.098534495f, 0.17139797f, 0.27724784f, 0.34847788f, 0.40446891f, - 0.131805190f, 0.17878972f, 0.29302125f, 0.34778777f, 0.39172069f, 0.43333138f, - 0.117051780f, 0.14714169f, 0.25283080f, 0.31096928f, 0.35792401f, 0.40593001f, - 0.244642480f, 0.26542671f, 0.31064604f, 0.34894237f, 0.39502788f, 0.45113983f, - 0.057704683f, 0.10158624f, 0.18821861f, 0.25351465f, 0.33014694f, 0.43374062f, - 0.177105410f, 0.19658676f, 0.24332913f, 0.27865263f, 0.33845007f, 0.38627285f, - 0.085525863f, 0.16781621f, 0.24699003f, 0.29584215f, 0.34250327f, 0.39210727f, - 0.189876270f, 0.21305679f, 0.26289427f, 0.30053004f, 0.36670247f, 0.40832210f, - 0.077609843f, 0.14485938f, 0.23309675f, 0.28603452f, 0.33963436f, 0.41664103f, - 0.180406410f, 0.20188257f, 0.27483060f, 0.32204807f, 0.36496152f, 0.40626347f, - 0.109972660f, 0.13794764f, 0.23344532f, 0.30007610f, 0.37112553f, 0.45007031f, - 0.243211860f, 0.26638262f, 0.29846135f, 0.32926348f, 0.38096489f, 0.42680115f, - 0.115753390f, 0.14391596f, 0.21486068f, 0.26084368f, 0.32379458f, 0.41507919f, - 0.172120490f, 0.19028171f, 0.22318579f, 0.25543954f, 0.36796374f, 0.43638971f, - 0.114912990f, 0.14340870f, 0.20702577f, 0.29029375f, 0.38645739f, 0.43383786f, - 0.141428780f, 0.25522990f, 0.28059674f, 0.31690999f, 0.35024347f, 0.40617629f, - 0.075129960f, 0.14698488f, 0.26110380f, 0.31719769f, 0.36377356f, 0.41101429f, - 0.112868350f, 0.24334299f, 0.28096316f, 0.33454465f, 0.41219625f, 0.46410751f, - 0.114073120f, 0.14243275f, 0.23024102f, 0.32882107f, 0.39744618f, 0.44429863f, - 0.221774120f, 0.26274601f, 0.29020551f, 0.34374641f, 0.39126416f, 0.44235948f, - 0.080079738f, 0.13106315f, 0.18837026f, 0.27151645f, 0.37668958f, 0.43255839f, - 0.192999400f, 0.21775426f, 0.26678052f, 0.30557605f, 0.38446194f, 0.43054658f, - 0.135743140f, 0.17819346f, 0.26983813f, 0.31540557f, 0.35817370f, 0.39888741f, - 0.187602960f, 0.21325656f, 0.29023036f, 0.33244221f, 0.37354374f, 0.41305910f, - 0.092309319f, 0.15685370f, 0.21826152f, 0.28145456f, 0.34801734f, 0.40449806f, - 0.182635620f, 0.20695883f, 0.29330586f, 0.34611408f, 0.38827609f, 0.42744945f, - 0.142778630f, 0.18181581f, 0.24718913f, 0.30036890f, 0.36118151f, 0.41174750f, - 0.236204610f, 0.26138275f, 0.28782872f, 0.31976781f, 0.38485547f, 0.44582109f, - 0.116877780f, 0.14600852f, 0.23439658f, 0.29078582f, 0.33978214f, 0.38680132f, - 0.175246750f, 0.19919182f, 0.25508981f, 0.32738942f, 0.40268065f, 0.44634249f, - 0.137050570f, 0.17196927f, 0.22227536f, 0.26698633f, 0.35381724f, 0.42069877f, - 0.206672940f, 0.25909379f, 0.28239012f, 0.33396266f, 0.38073064f, 0.42642507f, - 0.061761568f, 0.10948738f, 0.22960285f, 0.31900229f, 0.37225715f, 0.42291697f, - 0.176470360f, 0.27105045f, 0.30450833f, 0.35896554f, 0.40397125f, 0.45254757f, - 0.121439660f, 0.15285670f, 0.25458177f, 0.31503554f, 0.37326878f, 0.43680361f, - 0.248663160f, 0.27168576f, 0.31107735f, 0.34636713f, 0.40424762f, 0.44219064f, - 0.070101929f, 0.11626106f, 0.17205417f, 0.22172190f, 0.27958755f, 0.35136489f, - 0.177289590f, 0.19891422f, 0.23900178f, 0.26750187f, 0.31516079f, 0.36488918f, - 0.077375897f, 0.14011343f, 0.22628590f, 0.27710762f, 0.32419150f, 0.37404180f, - 0.181505360f, 0.20134192f, 0.25984204f, 0.30768103f, 0.38822145f, 0.43297287f, - 0.074548254f, 0.13055888f, 0.20082796f, 0.24940258f, 0.30161427f, 0.36031073f, - 0.180461770f, 0.19943970f, 0.27094461f, 0.31420032f, 0.37052353f, 0.43473550f, - 0.074096252f, 0.11976634f, 0.19559390f, 0.30014559f, 0.36503791f, 0.41589500f, - 0.226750330f, 0.26034000f, 0.28387883f, 0.31307141f, 0.34924905f, 0.39466978f, - 0.112939270f, 0.14324718f, 0.19444530f, 0.23409602f, 0.28823566f, 0.35312882f, - 0.177658770f, 0.19744005f, 0.23826049f, 0.27114023f, 0.35113598f, 0.44339139f, - 0.114194520f, 0.13976692f, 0.19017221f, 0.23985925f, 0.34337933f, 0.40059157f, - 0.174247680f, 0.25422512f, 0.27291618f, 0.31259836f, 0.35694641f, 0.44284664f, - 0.079551504f, 0.12808054f, 0.20489528f, 0.31763242f, 0.38800666f, 0.43699908f, - 0.125618080f, 0.25750129f, 0.29652463f, 0.33625458f, 0.37097478f, 0.41695760f, - 0.128908580f, 0.16228143f, 0.22845947f, 0.30852429f, 0.38999548f, 0.43734932f, - 0.169819550f, 0.25672921f, 0.27816521f, 0.33356870f, 0.38415880f, 0.45040976f, - 0.057932155f, 0.096138661f, 0.17637437f, 0.28982999f, 0.37938107f, 0.44064176f, - 0.191452430f, 0.21929421f, 0.28254485f, 0.31749442f, 0.35804814f, 0.39526710f, - 0.112918430f, 0.14011863f, 0.23116641f, 0.29091351f, 0.34974963f, 0.42044500f, - 0.190242080f, 0.21680224f, 0.27563442f, 0.33525335f, 0.39940885f, 0.43998378f, - 0.071851696f, 0.13973452f, 0.23632015f, 0.30396344f, 0.38541794f, 0.45171152f, - 0.184630070f, 0.20535151f, 0.28517376f, 0.32789614f, 0.37951171f, 0.43497879f, - 0.132603770f, 0.16874406f, 0.24771421f, 0.29658241f, 0.37943509f, 0.43056925f, - 0.244405020f, 0.26554052f, 0.30099568f, 0.33429706f, 0.39811794f, 0.44169908f, - 0.127688830f, 0.15825875f, 0.20983321f, 0.25719782f, 0.34290920f, 0.39590250f, - 0.186549100f, 0.20879511f, 0.25591707f, 0.29476812f, 0.39344232f, 0.44883705f, - 0.121737520f, 0.15062455f, 0.21825312f, 0.27097532f, 0.35836887f, 0.41602781f, - 0.157742360f, 0.25669794f, 0.28102574f, 0.34671864f, 0.41050850f, 0.46008611f, - 0.073161878f, 0.13388489f, 0.21462934f, 0.27572797f, 0.36075527f, 0.41919188f, - 0.110086280f, 0.24803245f, 0.31035821f, 0.35293169f, 0.39119687f, 0.43174112f, - 0.135783090f, 0.17715049f, 0.27354016f, 0.32581513f, 0.38440836f, 0.44428392f, - 0.241434570f, 0.26676851f, 0.30639927f, 0.35469044f, 0.41439486f, 0.46056301f, - 0.072374815f, 0.13092581f, 0.21330540f, 0.26565725f, 0.32462099f, 0.41762579f, - 0.187292630f, 0.21108778f, 0.25580340f, 0.28624311f, 0.33138816f, 0.37684385f, - 0.098711036f, 0.18228306f, 0.24984319f, 0.31049971f, 0.37903925f, 0.43890093f, - 0.185453530f, 0.20642460f, 0.26094355f, 0.29915816f, 0.37078354f, 0.42966194f, - 0.090091891f, 0.15555244f, 0.20914149f, 0.27320212f, 0.36822053f, 0.42967380f, - 0.201609780f, 0.23445421f, 0.29016518f, 0.32638897f, 0.37174990f, 0.41508051f, - 0.113139770f, 0.14155327f, 0.22791682f, 0.31995140f, 0.37521299f, 0.41972433f, - 0.242912130f, 0.26597026f, 0.30674398f, 0.34632679f, 0.38930327f, 0.42944494f, - 0.126299270f, 0.15994217f, 0.23121635f, 0.27579474f, 0.33301124f, 0.41152335f, - 0.178158900f, 0.19664722f, 0.23704785f, 0.27359930f, 0.39265986f, 0.45771152f, - 0.129551450f, 0.16291546f, 0.22120094f, 0.28045517f, 0.37621782f, 0.42867219f, - 0.187946560f, 0.27082805f, 0.30209272f, 0.33978012f, 0.37078287f, 0.41235280f, - 0.068654959f, 0.13086497f, 0.26542795f, 0.33399948f, 0.38525278f, 0.43688097f, - 0.096004458f, 0.20898133f, 0.30225243f, 0.35934752f, 0.41301071f, 0.45632845f, - 0.123398330f, 0.15749653f, 0.25528304f, 0.31414621f, 0.39506227f, 0.45492910f, - 0.225770510f, 0.26622774f, 0.29947052f, 0.36073788f, 0.40423935f, 0.44409324f, - 0.064717384f, 0.11872284f, 0.20919028f, 0.28301016f, 0.36802144f, 0.44747754f, - 0.193151690f, 0.21918993f, 0.26823232f, 0.30766049f, 0.39674668f, 0.45522504f, - 0.136849720f, 0.17581869f, 0.26349318f, 0.31417345f, 0.36960066f, 0.42791831f, - 0.193061690f, 0.21996506f, 0.29517646f, 0.33806725f, 0.39153706f, 0.44340380f, - 0.098565179f, 0.16979528f, 0.23333485f, 0.30380484f, 0.36654435f, 0.41758552f, - 0.142901030f, 0.21043695f, 0.30522982f, 0.36025073f, 0.40676141f, 0.45003224f, - 0.145613190f, 0.18443712f, 0.24662242f, 0.31447027f, 0.38225381f, 0.42837277f, - 0.251176660f, 0.28085865f, 0.31587424f, 0.34871696f, 0.39445892f, 0.44662421f, - 0.133816690f, 0.17622163f, 0.24380327f, 0.28396237f, 0.32809307f, 0.37532433f, - 0.177315700f, 0.20318793f, 0.27655558f, 0.35488501f, 0.40768754f, 0.44723190f, - 0.130848580f, 0.16442355f, 0.23815274f, 0.28617893f, 0.35951574f, 0.41662766f, - 0.134220490f, 0.26123559f, 0.29436035f, 0.34059452f, 0.38761183f, 0.45385345f, - 0.059422872f, 0.10497064f, 0.21978301f, 0.33427086f, 0.40351136f, 0.45184884f, - 0.142994260f, 0.27380337f, 0.32392882f, 0.36784687f, 0.40465562f, 0.44600403f, - 0.116004830f, 0.14796778f, 0.27228987f, 0.34179617f, 0.39311954f, 0.44016822f, - 0.245996100f, 0.26896363f, 0.31898875f, 0.36352887f, 0.40696431f, 0.44890165f, - 0.072173498f, 0.11864839f, 0.17283789f, 0.22419420f, 0.31759785f, 0.43734225f, - 0.139241880f, 0.17819210f, 0.22803594f, 0.26501417f, 0.32263158f, 0.39061689f, - 0.079146669f, 0.12807914f, 0.20505754f, 0.28451768f, 0.34267396f, 0.39425014f, - 0.185581160f, 0.20673854f, 0.24816327f, 0.28211183f, 0.37238530f, 0.42474096f, - 0.073407181f, 0.12148770f, 0.18750487f, 0.26671948f, 0.34627834f, 0.42100649f, - 0.176786130f, 0.19666658f, 0.25287274f, 0.30668454f, 0.37086389f, 0.41259755f, - 0.085308694f, 0.14425344f, 0.19922831f, 0.25959335f, 0.34555917f, 0.41120310f, - 0.188639580f, 0.26239423f, 0.28521213f, 0.32391588f, 0.35782756f, 0.41337293f, - 0.122131020f, 0.15263056f, 0.20129258f, 0.23778684f, 0.30478596f, 0.39871654f, - 0.175429700f, 0.19423608f, 0.23678906f, 0.27549846f, 0.36067030f, 0.41160394f, - 0.119189400f, 0.14839651f, 0.19721773f, 0.23690964f, 0.32670187f, 0.43820403f, - 0.131684130f, 0.25721459f, 0.28448545f, 0.32294678f, 0.36442816f, 0.44250607f, - 0.085802449f, 0.14103937f, 0.22418659f, 0.30627724f, 0.35842445f, 0.40982625f, - 0.128820440f, 0.25444798f, 0.28309633f, 0.34424530f, 0.39272354f, 0.43691562f, - 0.132605980f, 0.16563241f, 0.21732948f, 0.26659585f, 0.39024087f, 0.45279860f, - 0.234312330f, 0.26289148f, 0.28858043f, 0.31923045f, 0.36693357f, 0.42273091f, - 0.066913619f, 0.11174564f, 0.17118640f, 0.24009352f, 0.37462610f, 0.44981068f, - 0.185639320f, 0.20948515f, 0.27095540f, 0.30761470f, 0.35471667f, 0.41869175f, - 0.125534910f, 0.15639919f, 0.22045213f, 0.29690027f, 0.36034274f, 0.40578263f, - 0.194798190f, 0.22069282f, 0.28234110f, 0.32713553f, 0.38517899f, 0.42816026f, - 0.085073073f, 0.15836545f, 0.24638386f, 0.30374430f, 0.35995427f, 0.43827551f, - 0.185516870f, 0.21322354f, 0.26435247f, 0.32313780f, 0.37976277f, 0.43915130f, - 0.136729910f, 0.17363096f, 0.23523415f, 0.27817766f, 0.36010086f, 0.44481285f, - 0.239499040f, 0.26742173f, 0.29913088f, 0.33337737f, 0.38191519f, 0.45262276f, - 0.109306830f, 0.13962816f, 0.20534886f, 0.27722030f, 0.33992319f, 0.39062291f, - 0.179595260f, 0.19941354f, 0.27015954f, 0.31834604f, 0.38647809f, 0.45654088f, - 0.118738240f, 0.14800700f, 0.21956599f, 0.27258212f, 0.36918433f, 0.44755545f, - 0.176908270f, 0.26077464f, 0.28640628f, 0.35265194f, 0.39663136f, 0.43922160f, - 0.059878687f, 0.10816162f, 0.21481956f, 0.28530654f, 0.34399690f, 0.42289176f, - 0.125298830f, 0.16761966f, 0.29455499f, 0.36736398f, 0.41514581f, 0.45568637f, - 0.132064950f, 0.16520436f, 0.24257245f, 0.31378956f, 0.37122182f, 0.41558003f, - 0.248260440f, 0.27214823f, 0.30690390f, 0.33828614f, 0.40254065f, 0.45821278f, - 0.082464811f, 0.14120604f, 0.19676137f, 0.24440753f, 0.31120215f, 0.41734941f, - 0.183048080f, 0.20313040f, 0.25374041f, 0.28978449f, 0.35392058f, 0.40046587f, - 0.096008750f, 0.19205652f, 0.26031936f, 0.30998267f, 0.36005002f, 0.41374267f, - 0.194524100f, 0.22245612f, 0.26543764f, 0.29833795f, 0.36269526f, 0.43446257f, - 0.096760412f, 0.17681885f, 0.23611019f, 0.28616845f, 0.34521951f, 0.42352547f, - 0.191620720f, 0.21818699f, 0.28052740f, 0.31781127f, 0.36781149f, 0.43254535f, - 0.125638810f, 0.15853683f, 0.23819940f, 0.29029299f, 0.37995224f, 0.45315055f, - 0.243017800f, 0.27328285f, 0.30734326f, 0.33963007f, 0.37608978f, 0.41520298f, - 0.133222750f, 0.16798774f, 0.21402212f, 0.24935760f, 0.32005623f, 0.41682314f, - 0.186885370f, 0.21039202f, 0.25286530f, 0.28529456f, 0.36191248f, 0.44972585f, - 0.114535160f, 0.14259486f, 0.19594154f, 0.24858528f, 0.38835896f, 0.45716846f, - 0.166527800f, 0.26567252f, 0.29289306f, 0.33677574f, 0.37519203f, 0.43541243f, - 0.084944791f, 0.15003156f, 0.24253235f, 0.32251109f, 0.37827375f, 0.43099351f, - 0.119303270f, 0.24856258f, 0.29065368f, 0.36470470f, 0.42883150f, 0.46638276f, - 0.120605420f, 0.15682171f, 0.24962093f, 0.34730291f, 0.41806540f, 0.46035776f, - 0.219732780f, 0.27560250f, 0.30592696f, 0.35044880f, 0.39439534f, 0.45312034f, - 0.077308553f, 0.13464280f, 0.19751880f, 0.25325059f, 0.34806166f, 0.44638905f, - 0.200278980f, 0.22979005f, 0.27661907f, 0.31333340f, 0.38330744f, 0.44013638f, - 0.147984570f, 0.20195322f, 0.26483855f, 0.31025032f, 0.36569269f, 0.42239969f, - 0.195086490f, 0.23098500f, 0.30395854f, 0.34483682f, 0.38586214f, 0.42438066f, - 0.096725831f, 0.15616494f, 0.21843296f, 0.29493721f, 0.35664482f, 0.43073450f, - 0.186832170f, 0.21579466f, 0.30557582f, 0.35804882f, 0.40192237f, 0.44148013f, - 0.131465720f, 0.16604695f, 0.23214633f, 0.30213654f, 0.36326612f, 0.43615662f, - 0.248074080f, 0.27538389f, 0.30784390f, 0.33816285f, 0.38664576f, 0.43811284f, - 0.129804270f, 0.16455588f, 0.24948399f, 0.29846586f, 0.34646629f, 0.39636043f, - 0.166400470f, 0.20256213f, 0.26232918f, 0.34952652f, 0.42374855f, 0.46579300f, - 0.142332960f, 0.18013006f, 0.23247726f, 0.28747540f, 0.37225279f, 0.42277361f, - 0.218164380f, 0.27036123f, 0.29741317f, 0.33658242f, 0.37288172f, 0.43297122f, - 0.070747526f, 0.12972708f, 0.23503772f, 0.30178403f, 0.35944976f, 0.43280902f, - 0.203817720f, 0.28320849f, 0.32265104f, 0.36469291f, 0.39977801f, 0.44224295f, - 0.122382190f, 0.15795076f, 0.27432170f, 0.33024348f, 0.37383108f, 0.41668653f, - 0.246445660f, 0.27118517f, 0.31770823f, 0.35773353f, 0.39648445f, 0.43540417f, - 0.070426224f, 0.12260340f, 0.18382397f, 0.23249431f, 0.29712141f, 0.39919694f, - 0.183126440f, 0.20602093f, 0.24375562f, 0.27361644f, 0.33459363f, 0.41471750f, - 0.088748459f, 0.16327910f, 0.22175401f, 0.26667908f, 0.31866453f, 0.39616098f, - 0.187460500f, 0.20871643f, 0.27548782f, 0.31634516f, 0.39309748f, 0.43994220f, - 0.081379567f, 0.12891936f, 0.18833934f, 0.25567206f, 0.32705903f, 0.38458961f, - 0.191505080f, 0.21728053f, 0.28226653f, 0.32386961f, 0.38391795f, 0.45235836f, - 0.082156793f, 0.13994262f, 0.21264164f, 0.30082758f, 0.36988471f, 0.43363836f, - 0.237145870f, 0.26759673f, 0.29733906f, 0.32792373f, 0.36448143f, 0.40360639f, - 0.128199820f, 0.16341814f, 0.21755898f, 0.25443908f, 0.30439771f, 0.35908714f, - 0.189707910f, 0.21668527f, 0.25769184f, 0.28813697f, 0.34477993f, 0.41777603f, - 0.125467980f, 0.15380570f, 0.20025914f, 0.24632028f, 0.36725388f, 0.42488725f, - 0.203165520f, 0.26241863f, 0.28495340f, 0.32547246f, 0.36743034f, 0.44873687f, - 0.093381965f, 0.15915305f, 0.22155271f, 0.30877697f, 0.38380526f, 0.43903641f, - 0.155729460f, 0.27199100f, 0.30995504f, 0.35152115f, 0.38662749f, 0.43394669f, - 0.141375780f, 0.18067408f, 0.23815984f, 0.29034933f, 0.38882061f, 0.44831617f, - 0.205067360f, 0.26200850f, 0.28831845f, 0.35265548f, 0.41227841f, 0.46066867f, - 0.072047472f, 0.12115468f, 0.18961933f, 0.28488105f, 0.40495409f, 0.46004731f, - 0.198557750f, 0.22705201f, 0.27591618f, 0.31064014f, 0.36695315f, 0.41465139f, - 0.128799860f, 0.16494038f, 0.25362087f, 0.29961433f, 0.35336792f, 0.42859765f, - 0.189710480f, 0.22045927f, 0.29038955f, 0.34755716f, 0.41335089f, 0.45984727f, - 0.087636105f, 0.16804885f, 0.24880519f, 0.32500502f, 0.39871150f, 0.45243576f, - 0.183164490f, 0.20372954f, 0.28663902f, 0.33639693f, 0.39567505f, 0.45029614f, - 0.135442360f, 0.17219131f, 0.25232067f, 0.30812818f, 0.37522467f, 0.44933943f, - 0.237947800f, 0.26313746f, 0.29423846f, 0.33363250f, 0.40548313f, 0.46136835f, - 0.136450240f, 0.17206573f, 0.23044273f, 0.28127300f, 0.34912154f, 0.39454258f, - 0.184673430f, 0.21026600f, 0.27179282f, 0.32517703f, 0.41007950f, 0.46131088f, - 0.120635550f, 0.15057589f, 0.23738282f, 0.29356081f, 0.37244051f, 0.42760875f, - 0.165980800f, 0.26393604f, 0.29879643f, 0.37329254f, 0.42416075f, 0.46364654f, - 0.083243472f, 0.13716891f, 0.20532429f, 0.28573678f, 0.34618078f, 0.42885349f, - 0.124185840f, 0.25817832f, 0.30013923f, 0.35832406f, 0.40788565f, 0.45242538f, - 0.148751310f, 0.21168861f, 0.28155588f, 0.33399871f, 0.39200642f, 0.44392882f, - 0.250092790f, 0.27749655f, 0.31714030f, 0.35382269f, 0.40755488f, 0.45807079f, - 0.090218008f, 0.15844407f, 0.21605547f, 0.26747762f, 0.33611136f, 0.43256724f, - 0.194821460f, 0.22238574f, 0.26892332f, 0.29957274f, 0.34593681f, 0.39087253f, - 0.088872041f, 0.18684006f, 0.27868480f, 0.33185291f, 0.38399584f, 0.43532623f, - 0.187631470f, 0.21132813f, 0.26919143f, 0.30608744f, 0.37267119f, 0.45037854f, - 0.078499578f, 0.14581909f, 0.22353298f, 0.28124283f, 0.35460841f, 0.44710837f, - 0.203049030f, 0.23554188f, 0.29130760f, 0.32976939f, 0.38552827f, 0.43804459f, - 0.132090630f, 0.16828557f, 0.25117965f, 0.33118164f, 0.39126122f, 0.43521955f, - 0.245699330f, 0.28091560f, 0.31693809f, 0.35063725f, 0.38679310f, 0.42687325f, - 0.141120120f, 0.18351512f, 0.24129878f, 0.28194334f, 0.34056397f, 0.42074436f, - 0.176576340f, 0.19930558f, 0.25055988f, 0.30421218f, 0.40924681f, 0.46535353f, - 0.117761100f, 0.14946364f, 0.21764598f, 0.29577606f, 0.40879019f, 0.46136645f, - 0.204842420f, 0.27294301f, 0.30601511f, 0.35160404f, 0.38727312f, 0.43085356f, - 0.073765998f, 0.14878616f, 0.27867445f, 0.35617826f, 0.40839136f, 0.45292538f, - 0.125517660f, 0.25496685f, 0.32758337f, 0.38197773f, 0.42435415f, 0.46126376f, - 0.135962010f, 0.17555426f, 0.24178151f, 0.31425983f, 0.40720232f, 0.45869366f, - 0.213570120f, 0.27094587f, 0.30863435f, 0.37331744f, 0.42018011f, 0.46102471f, - 0.082998736f, 0.14651530f, 0.21003822f, 0.28279492f, 0.38739390f, 0.45279145f, - 0.198570550f, 0.22875204f, 0.28417900f, 0.32642267f, 0.40238371f, 0.45320042f, - 0.141324200f, 0.19351582f, 0.27967266f, 0.32946724f, 0.37612094f, 0.41912905f, - 0.201481430f, 0.23856193f, 0.30309500f, 0.34633198f, 0.40074668f, 0.44775506f, - 0.094264220f, 0.16969966f, 0.23129383f, 0.28788431f, 0.37402386f, 0.44657509f, - 0.190612400f, 0.23544456f, 0.31650278f, 0.36818431f, 0.41389673f, 0.45404931f, - 0.145178650f, 0.19384152f, 0.26072685f, 0.31177170f, 0.38904763f, 0.44618125f, - 0.249738030f, 0.28583093f, 0.32433884f, 0.36184735f, 0.40237550f, 0.44552961f, - 0.144466440f, 0.19269281f, 0.25474986f, 0.29651925f, 0.34405115f, 0.39494788f, - 0.177748120f, 0.20967896f, 0.29994813f, 0.37438345f, 0.42341220f, 0.46196806f, - 0.144017810f, 0.18743776f, 0.25098351f, 0.29549083f, 0.36361608f, 0.43793137f, - 0.191890800f, 0.26774988f, 0.29463282f, 0.34191791f, 0.38746328f, 0.45369258f, - 0.081212845f, 0.13994797f, 0.22358119f, 0.33366778f, 0.41201077f, 0.45855130f, - 0.181044650f, 0.28450829f, 0.33194281f, 0.38005566f, 0.41856023f, 0.45789922f, - 0.136313630f, 0.18429069f, 0.26984493f, 0.34070980f, 0.40759216f, 0.45475266f, - 0.240476170f, 0.27948010f, 0.32327234f, 0.37258368f, 0.41532038f, 0.45744253f -}; -#endif const Word16 wb_bwe_lsfvq_cbook_8bit_fx[256 * 6] = {//Q15 @@ -25238,267 +15310,6 @@ const Word16 wb_bwe_lsfvq_cbook_8bit_fx[256 * 6] = 7880, 9158, 10593, 12209, 13609, 14989, }; -#ifndef IVAS_FLOAT_FIXED -const float swb_tbe_lsfvq_cbook_8b_flt[256*LPC_SHB_ORDER] = -{ - 0.052035f, 0.098557f, 0.128235f, 0.155222f, 0.187634f, 0.220354f, 0.248003f, 0.327378f, 0.416763f, 0.468886f, - 0.050902f, 0.090274f, 0.123988f, 0.172234f, 0.224479f, 0.288101f, 0.337089f, 0.374172f, 0.403673f, 0.442608f, - 0.047188f, 0.089025f, 0.128973f, 0.167152f, 0.212901f, 0.254805f, 0.296290f, 0.362619f, 0.403389f, 0.449070f, - 0.035345f, 0.083282f, 0.158003f, 0.212631f, 0.253206f, 0.293314f, 0.325157f, 0.356067f, 0.389327f, 0.439909f, - 0.049324f, 0.091699f, 0.133308f, 0.177313f, 0.216889f, 0.248068f, 0.286140f, 0.319129f, 0.388743f, 0.452730f, - 0.037590f, 0.074792f, 0.126499f, 0.196718f, 0.236226f, 0.274430f, 0.316669f, 0.363084f, 0.433737f, 0.467349f, - 0.049999f, 0.094260f, 0.156667f, 0.193806f, 0.224624f, 0.253432f, 0.298661f, 0.377723f, 0.419777f, 0.464133f, - 0.038569f, 0.077613f, 0.169806f, 0.204031f, 0.242844f, 0.289350f, 0.336338f, 0.381981f, 0.423438f, 0.462244f, - 0.039797f, 0.077432f, 0.113315f, 0.148404f, 0.200326f, 0.241409f, 0.286872f, 0.359925f, 0.404895f, 0.452684f, - 0.050430f, 0.099036f, 0.143005f, 0.195455f, 0.242036f, 0.281478f, 0.323205f, 0.366833f, 0.402614f, 0.450408f, - 0.039724f, 0.079916f, 0.130839f, 0.179575f, 0.218692f, 0.261122f, 0.320798f, 0.380589f, 0.420132f, 0.460065f, - 0.062070f, 0.105792f, 0.170204f, 0.199290f, 0.234202f, 0.268038f, 0.333250f, 0.390551f, 0.418930f, 0.457810f, - 0.079997f, 0.120714f, 0.160981f, 0.199639f, 0.229158f, 0.259921f, 0.288582f, 0.329020f, 0.380142f, 0.430256f, - 0.045641f, 0.080952f, 0.126548f, 0.172023f, 0.224929f, 0.281759f, 0.360638f, 0.396302f, 0.426277f, 0.459174f, - 0.067880f, 0.101438f, 0.143420f, 0.179072f, 0.220060f, 0.263601f, 0.346964f, 0.387408f, 0.415045f, 0.444299f, - 0.038652f, 0.093084f, 0.143655f, 0.192895f, 0.264359f, 0.309455f, 0.341003f, 0.380032f, 0.409710f, 0.453003f, - 0.050708f, 0.090949f, 0.126797f, 0.165211f, 0.202591f, 0.237959f, 0.282372f, 0.346666f, 0.391780f, 0.440679f, - 0.046423f, 0.087161f, 0.150877f, 0.194305f, 0.229067f, 0.270295f, 0.334805f, 0.371802f, 0.405116f, 0.457953f, - 0.044360f, 0.087261f, 0.139254f, 0.182219f, 0.219289f, 0.261504f, 0.309799f, 0.359196f, 0.408816f, 0.457282f, - 0.034881f, 0.089771f, 0.160723f, 0.208734f, 0.255654f, 0.288616f, 0.323156f, 0.354465f, 0.423951f, 0.466020f, - 0.051086f, 0.093155f, 0.140520f, 0.176030f, 0.216785f, 0.257930f, 0.308053f, 0.359569f, 0.390408f, 0.419868f, - 0.051928f, 0.099511f, 0.144135f, 0.190596f, 0.241070f, 0.289741f, 0.335984f, 0.378008f, 0.417474f, 0.459764f, - 0.041656f, 0.085336f, 0.164968f, 0.198531f, 0.228507f, 0.264871f, 0.318823f, 0.366222f, 0.416159f, 0.459177f, - 0.063772f, 0.119952f, 0.176631f, 0.218406f, 0.251883f, 0.296547f, 0.335911f, 0.368682f, 0.403997f, 0.454099f, - 0.059576f, 0.096358f, 0.126102f, 0.157582f, 0.193300f, 0.225485f, 0.274787f, 0.360048f, 0.430168f, 0.473165f, - 0.050090f, 0.098011f, 0.150107f, 0.194228f, 0.239956f, 0.284161f, 0.328550f, 0.373362f, 0.417904f, 0.459405f, - 0.050455f, 0.091803f, 0.128564f, 0.163400f, 0.213005f, 0.269193f, 0.341329f, 0.387102f, 0.424272f, 0.465410f, - 0.056626f, 0.105111f, 0.157033f, 0.200776f, 0.238054f, 0.282274f, 0.337598f, 0.395108f, 0.431675f, 0.466636f, - 0.041642f, 0.108843f, 0.169446f, 0.197564f, 0.223758f, 0.251886f, 0.303709f, 0.346790f, 0.412135f, 0.456278f, - 0.045415f, 0.088367f, 0.137979f, 0.191624f, 0.240474f, 0.288265f, 0.348450f, 0.394310f, 0.440392f, 0.471964f, - 0.046252f, 0.096877f, 0.163695f, 0.195612f, 0.222631f, 0.252841f, 0.329557f, 0.384350f, 0.432499f, 0.470718f, - 0.053043f, 0.104263f, 0.159826f, 0.209898f, 0.257555f, 0.321633f, 0.369402f, 0.398653f, 0.424938f, 0.462350f, - 0.043656f, 0.081158f, 0.119295f, 0.162597f, 0.202663f, 0.242606f, 0.285262f, 0.336831f, 0.412286f, 0.457530f, - 0.042710f, 0.080739f, 0.129188f, 0.194265f, 0.236487f, 0.281364f, 0.322263f, 0.353819f, 0.398147f, 0.457506f, - 0.034022f, 0.067080f, 0.110067f, 0.161100f, 0.245813f, 0.298294f, 0.336441f, 0.379210f, 0.426400f, 0.464858f, - 0.041504f, 0.104317f, 0.174678f, 0.212809f, 0.241453f, 0.277049f, 0.329887f, 0.379542f, 0.415948f, 0.452461f, - 0.043385f, 0.093120f, 0.156620f, 0.187415f, 0.219909f, 0.252543f, 0.285489f, 0.331396f, 0.421562f, 0.463942f, - 0.032947f, 0.067948f, 0.125627f, 0.195426f, 0.246592f, 0.284364f, 0.333690f, 0.378531f, 0.417714f, 0.452488f, - 0.049156f, 0.104448f, 0.150380f, 0.189623f, 0.226621f, 0.266196f, 0.320491f, 0.363628f, 0.410110f, 0.460970f, - 0.059406f, 0.107544f, 0.158619f, 0.213862f, 0.255056f, 0.305344f, 0.347819f, 0.379775f, 0.414531f, 0.461875f, - 0.042551f, 0.081551f, 0.122191f, 0.173384f, 0.212196f, 0.253318f, 0.299526f, 0.366219f, 0.418377f, 0.460170f, - 0.054564f, 0.097456f, 0.139734f, 0.189857f, 0.240306f, 0.279858f, 0.341376f, 0.385962f, 0.412633f, 0.443663f, - 0.047246f, 0.085779f, 0.123843f, 0.162683f, 0.199213f, 0.237097f, 0.335143f, 0.388883f, 0.421806f, 0.461765f, - 0.053449f, 0.122299f, 0.157276f, 0.197221f, 0.242155f, 0.288987f, 0.338839f, 0.378598f, 0.407019f, 0.443119f, - 0.061169f, 0.096794f, 0.155005f, 0.186632f, 0.216953f, 0.248877f, 0.315884f, 0.372060f, 0.409344f, 0.450829f, - 0.050160f, 0.097186f, 0.144946f, 0.191946f, 0.238536f, 0.282942f, 0.336958f, 0.391570f, 0.431474f, 0.468178f, - 0.070512f, 0.115329f, 0.156141f, 0.186164f, 0.223411f, 0.278915f, 0.315935f, 0.370299f, 0.422165f, 0.463007f, - 0.052587f, 0.101896f, 0.154071f, 0.206102f, 0.254920f, 0.314033f, 0.367686f, 0.401531f, 0.433527f, 0.471797f, - 0.067698f, 0.106830f, 0.141570f, 0.175913f, 0.207186f, 0.239077f, 0.299182f, 0.363370f, 0.402273f, 0.448275f, - 0.050042f, 0.096846f, 0.142801f, 0.189262f, 0.233767f, 0.278335f, 0.328758f, 0.378276f, 0.424023f, 0.463870f, - 0.048564f, 0.093699f, 0.138452f, 0.183259f, 0.224028f, 0.268624f, 0.319818f, 0.373529f, 0.420181f, 0.461720f, - 0.035663f, 0.110208f, 0.182596f, 0.215274f, 0.262474f, 0.305840f, 0.334102f, 0.363985f, 0.391665f, 0.450045f, - 0.052124f, 0.097379f, 0.141664f, 0.187867f, 0.225707f, 0.268701f, 0.306038f, 0.358072f, 0.403022f, 0.453386f, - 0.046364f, 0.094056f, 0.145010f, 0.197890f, 0.235910f, 0.284683f, 0.329466f, 0.366312f, 0.443226f, 0.473416f, - 0.065692f, 0.108572f, 0.157530f, 0.204882f, 0.236869f, 0.270301f, 0.305422f, 0.366582f, 0.418869f, 0.464143f, - 0.081775f, 0.123697f, 0.162035f, 0.213510f, 0.253580f, 0.285130f, 0.316195f, 0.376374f, 0.434072f, 0.472957f, - 0.071914f, 0.116132f, 0.153572f, 0.182184f, 0.211027f, 0.240482f, 0.272342f, 0.368056f, 0.422300f, 0.463416f, - 0.055135f, 0.104947f, 0.151424f, 0.197856f, 0.244545f, 0.291623f, 0.334237f, 0.376193f, 0.417664f, 0.459559f, - 0.047928f, 0.088506f, 0.128407f, 0.196811f, 0.234221f, 0.262202f, 0.339912f, 0.389867f, 0.432755f, 0.470636f, - 0.061209f, 0.130070f, 0.168080f, 0.195727f, 0.232576f, 0.266266f, 0.329227f, 0.384677f, 0.415326f, 0.450918f, - 0.054489f, 0.114179f, 0.160730f, 0.204526f, 0.247099f, 0.288682f, 0.320040f, 0.350371f, 0.393345f, 0.454259f, - 0.050257f, 0.098343f, 0.146333f, 0.195038f, 0.244345f, 0.293566f, 0.353243f, 0.395361f, 0.430313f, 0.469396f, - 0.046313f, 0.098069f, 0.159706f, 0.198648f, 0.234593f, 0.268660f, 0.359439f, 0.425175f, 0.450429f, 0.472752f, - 0.065195f, 0.111302f, 0.163983f, 0.223289f, 0.264603f, 0.313139f, 0.359677f, 0.394680f, 0.421766f, 0.463443f, - 0.049833f, 0.099641f, 0.142577f, 0.172120f, 0.206797f, 0.237530f, 0.271835f, 0.310803f, 0.368226f, 0.442268f, - 0.051561f, 0.092407f, 0.127677f, 0.184605f, 0.228561f, 0.264833f, 0.337058f, 0.373648f, 0.408072f, 0.458254f, - 0.050312f, 0.093979f, 0.133001f, 0.176857f, 0.224745f, 0.262482f, 0.313019f, 0.370051f, 0.406746f, 0.461218f, - 0.056453f, 0.100292f, 0.164556f, 0.206451f, 0.238837f, 0.280290f, 0.320629f, 0.359375f, 0.404283f, 0.462747f, - 0.064422f, 0.107489f, 0.148611f, 0.185763f, 0.218563f, 0.255882f, 0.294328f, 0.331455f, 0.376622f, 0.436460f, - 0.046651f, 0.088769f, 0.126223f, 0.207005f, 0.246095f, 0.284572f, 0.333915f, 0.369094f, 0.423764f, 0.462912f, - 0.056372f, 0.100125f, 0.145020f, 0.186096f, 0.223092f, 0.266834f, 0.309121f, 0.374704f, 0.413627f, 0.455613f, - 0.035065f, 0.084427f, 0.179107f, 0.228245f, 0.259827f, 0.296722f, 0.342853f, 0.375360f, 0.423312f, 0.459834f, - 0.051556f, 0.093559f, 0.131989f, 0.171289f, 0.206668f, 0.242179f, 0.276215f, 0.370322f, 0.418996f, 0.458514f, - 0.064906f, 0.103567f, 0.160614f, 0.209947f, 0.240290f, 0.279374f, 0.314472f, 0.370362f, 0.411818f, 0.440592f, - 0.051333f, 0.093194f, 0.134650f, 0.184715f, 0.225233f, 0.258320f, 0.299595f, 0.380254f, 0.431966f, 0.466464f, - 0.054906f, 0.104680f, 0.156332f, 0.201242f, 0.242115f, 0.293254f, 0.350097f, 0.390361f, 0.417661f, 0.453152f, - 0.057964f, 0.111565f, 0.163839f, 0.193942f, 0.229367f, 0.268561f, 0.301745f, 0.355413f, 0.397475f, 0.426184f, - 0.043021f, 0.099243f, 0.155661f, 0.184626f, 0.228258f, 0.302504f, 0.358238f, 0.390818f, 0.429834f, 0.463440f, - 0.045380f, 0.120045f, 0.163293f, 0.195013f, 0.229454f, 0.271296f, 0.350581f, 0.391168f, 0.420733f, 0.455968f, - 0.047668f, 0.096305f, 0.154868f, 0.214976f, 0.270766f, 0.313434f, 0.350305f, 0.385491f, 0.424396f, 0.457538f, - 0.047251f, 0.089307f, 0.132379f, 0.176882f, 0.213945f, 0.248516f, 0.284924f, 0.345563f, 0.410789f, 0.454839f, - 0.043366f, 0.088702f, 0.144534f, 0.191411f, 0.235903f, 0.273950f, 0.319010f, 0.377616f, 0.422360f, 0.464893f, - 0.045624f, 0.091445f, 0.137199f, 0.184217f, 0.230245f, 0.275709f, 0.321477f, 0.366635f, 0.411549f, 0.456497f, - 0.042352f, 0.097756f, 0.173684f, 0.215934f, 0.261779f, 0.294833f, 0.331844f, 0.376147f, 0.440475f, 0.470683f, - 0.038091f, 0.091036f, 0.161878f, 0.196009f, 0.230216f, 0.262778f, 0.314032f, 0.356498f, 0.393785f, 0.443990f, - 0.045665f, 0.091177f, 0.141352f, 0.193543f, 0.239618f, 0.284706f, 0.341027f, 0.382868f, 0.419859f, 0.463306f, - 0.041904f, 0.103110f, 0.154646f, 0.188554f, 0.225202f, 0.267803f, 0.305332f, 0.349841f, 0.431723f, 0.469552f, - 0.077431f, 0.117466f, 0.168864f, 0.221652f, 0.253857f, 0.294713f, 0.346262f, 0.377031f, 0.425887f, 0.467332f, - 0.064470f, 0.103906f, 0.134849f, 0.160779f, 0.196409f, 0.244298f, 0.314086f, 0.379702f, 0.416731f, 0.463122f, - 0.049451f, 0.112350f, 0.166433f, 0.195509f, 0.227644f, 0.285465f, 0.331780f, 0.367291f, 0.432216f, 0.466286f, - 0.058067f, 0.098622f, 0.137834f, 0.175730f, 0.218379f, 0.270120f, 0.325626f, 0.378807f, 0.443060f, 0.474998f, - 0.052308f, 0.115312f, 0.157669f, 0.200104f, 0.247392f, 0.279777f, 0.322273f, 0.392271f, 0.433586f, 0.467817f, - 0.058782f, 0.111246f, 0.168484f, 0.215834f, 0.244122f, 0.273877f, 0.299244f, 0.338369f, 0.412816f, 0.466858f, - 0.055542f, 0.086661f, 0.144229f, 0.216409f, 0.252097f, 0.297799f, 0.342351f, 0.370742f, 0.429205f, 0.465769f, - 0.063246f, 0.100799f, 0.164514f, 0.204780f, 0.229008f, 0.259317f, 0.319118f, 0.378226f, 0.441896f, 0.474270f, - 0.049656f, 0.100510f, 0.158979f, 0.226797f, 0.269956f, 0.309657f, 0.351457f, 0.393377f, 0.442146f, 0.470304f, - 0.066278f, 0.103915f, 0.139783f, 0.171615f, 0.205432f, 0.233412f, 0.258944f, 0.302518f, 0.408815f, 0.464278f, - 0.048237f, 0.093317f, 0.141389f, 0.189982f, 0.235703f, 0.281926f, 0.328964f, 0.373539f, 0.416565f, 0.460637f, - 0.051115f, 0.089333f, 0.124829f, 0.175556f, 0.227688f, 0.272289f, 0.313617f, 0.356144f, 0.426854f, 0.468024f, - 0.057016f, 0.110189f, 0.160396f, 0.211405f, 0.246994f, 0.287899f, 0.335640f, 0.370610f, 0.408313f, 0.462788f, - 0.045706f, 0.110933f, 0.160922f, 0.208233f, 0.238788f, 0.272099f, 0.299401f, 0.332730f, 0.381907f, 0.454209f, - 0.044199f, 0.080129f, 0.119936f, 0.210423f, 0.254754f, 0.297418f, 0.348033f, 0.383461f, 0.436047f, 0.467678f, - 0.059370f, 0.103993f, 0.152197f, 0.193477f, 0.232752f, 0.273256f, 0.312825f, 0.377850f, 0.411394f, 0.457251f, - 0.059698f, 0.114702f, 0.164424f, 0.210373f, 0.258366f, 0.304006f, 0.349730f, 0.389369f, 0.431678f, 0.467558f, - 0.050972f, 0.099832f, 0.140005f, 0.182190f, 0.219279f, 0.255299f, 0.294189f, 0.366548f, 0.411624f, 0.452662f, - 0.059947f, 0.105101f, 0.147291f, 0.189602f, 0.242184f, 0.277632f, 0.329136f, 0.385035f, 0.415412f, 0.464746f, - 0.050246f, 0.103445f, 0.142498f, 0.184607f, 0.213644f, 0.242299f, 0.319253f, 0.380800f, 0.447847f, 0.479237f, - 0.067193f, 0.115430f, 0.155858f, 0.206126f, 0.252681f, 0.293822f, 0.356656f, 0.397588f, 0.423304f, 0.464089f, - 0.071847f, 0.116894f, 0.157883f, 0.194092f, 0.230547f, 0.274564f, 0.325945f, 0.365502f, 0.398749f, 0.451080f, - 0.071752f, 0.107567f, 0.149280f, 0.194893f, 0.232418f, 0.278702f, 0.361895f, 0.398599f, 0.425587f, 0.457898f, - 0.068739f, 0.115103f, 0.157316f, 0.197895f, 0.237993f, 0.279071f, 0.328650f, 0.383319f, 0.420022f, 0.465113f, - 0.052303f, 0.094829f, 0.144186f, 0.186062f, 0.279484f, 0.319196f, 0.354590f, 0.387530f, 0.437802f, 0.465583f, - 0.055846f, 0.106998f, 0.151640f, 0.182290f, 0.210559f, 0.239134f, 0.274479f, 0.338376f, 0.407908f, 0.453481f, - 0.056627f, 0.103955f, 0.149473f, 0.194316f, 0.238331f, 0.280339f, 0.318046f, 0.371471f, 0.426297f, 0.467870f, - 0.061231f, 0.103217f, 0.144741f, 0.186145f, 0.226738f, 0.267120f, 0.329755f, 0.373349f, 0.417263f, 0.463712f, - 0.045494f, 0.110081f, 0.163067f, 0.227778f, 0.280124f, 0.307836f, 0.336439f, 0.369219f, 0.402807f, 0.456421f, - 0.053383f, 0.102864f, 0.156288f, 0.198372f, 0.233337f, 0.267640f, 0.304209f, 0.356227f, 0.407078f, 0.455673f, - 0.056676f, 0.107005f, 0.155125f, 0.201255f, 0.250254f, 0.297223f, 0.339905f, 0.382321f, 0.423693f, 0.461944f, - 0.054333f, 0.117799f, 0.170332f, 0.204234f, 0.239159f, 0.274313f, 0.314448f, 0.375919f, 0.415366f, 0.461096f, - 0.066036f, 0.136196f, 0.172592f, 0.232898f, 0.276089f, 0.302787f, 0.329116f, 0.395210f, 0.449302f, 0.475747f, - 0.070331f, 0.100716f, 0.133253f, 0.171137f, 0.209264f, 0.237895f, 0.305371f, 0.364686f, 0.438728f, 0.479133f, - 0.049672f, 0.104018f, 0.154836f, 0.206341f, 0.253671f, 0.295628f, 0.338852f, 0.376356f, 0.415621f, 0.460077f, - 0.056211f, 0.101148f, 0.145610f, 0.197140f, 0.227748f, 0.264313f, 0.341533f, 0.388764f, 0.445317f, 0.477085f, - 0.055185f, 0.133050f, 0.180174f, 0.209627f, 0.248220f, 0.279970f, 0.328967f, 0.384183f, 0.427107f, 0.462356f, - 0.090510f, 0.132862f, 0.173536f, 0.213099f, 0.242241f, 0.277461f, 0.307068f, 0.358492f, 0.406083f, 0.445895f, - 0.058962f, 0.100504f, 0.149829f, 0.208057f, 0.234691f, 0.276924f, 0.357507f, 0.397315f, 0.440325f, 0.472359f, - 0.060359f, 0.115102f, 0.165680f, 0.200810f, 0.227294f, 0.259266f, 0.358724f, 0.400750f, 0.443988f, 0.474842f, - 0.057406f, 0.110946f, 0.171732f, 0.222531f, 0.261630f, 0.332974f, 0.376127f, 0.402824f, 0.429325f, 0.465189f, - 0.043822f, 0.082882f, 0.122127f, 0.163180f, 0.199988f, 0.233325f, 0.273271f, 0.326231f, 0.395731f, 0.451164f, - 0.043530f, 0.086208f, 0.128358f, 0.174740f, 0.247178f, 0.286590f, 0.326910f, 0.374201f, 0.412175f, 0.456349f, - 0.044183f, 0.084451f, 0.124772f, 0.160673f, 0.219266f, 0.265006f, 0.316722f, 0.374047f, 0.409896f, 0.451766f, - 0.050936f, 0.101062f, 0.152285f, 0.210171f, 0.245676f, 0.292805f, 0.333955f, 0.366681f, 0.401168f, 0.455315f, - 0.046805f, 0.085866f, 0.127908f, 0.181072f, 0.225619f, 0.265095f, 0.301043f, 0.341348f, 0.395446f, 0.449907f, - 0.042622f, 0.082584f, 0.131883f, 0.184679f, 0.232497f, 0.279794f, 0.335535f, 0.379437f, 0.425137f, 0.465917f, - 0.052394f, 0.096555f, 0.141288f, 0.193157f, 0.229466f, 0.269961f, 0.307875f, 0.369736f, 0.427604f, 0.463768f, - 0.049014f, 0.101187f, 0.157612f, 0.211850f, 0.252631f, 0.293740f, 0.349772f, 0.390796f, 0.430148f, 0.466887f, - 0.061472f, 0.102460f, 0.130638f, 0.154914f, 0.188934f, 0.224962f, 0.289961f, 0.378839f, 0.409509f, 0.454753f, - 0.040355f, 0.111547f, 0.160810f, 0.198176f, 0.232341f, 0.282372f, 0.328114f, 0.365421f, 0.405953f, 0.452666f, - 0.051498f, 0.100439f, 0.143970f, 0.177506f, 0.213658f, 0.248304f, 0.327782f, 0.387335f, 0.423694f, 0.464601f, - 0.068825f, 0.113622f, 0.169531f, 0.214249f, 0.247214f, 0.285172f, 0.328523f, 0.387739f, 0.417886f, 0.464554f, - 0.072521f, 0.113366f, 0.160172f, 0.198528f, 0.226144f, 0.254678f, 0.310546f, 0.354542f, 0.387805f, 0.442152f, - 0.056215f, 0.098619f, 0.133402f, 0.181712f, 0.239008f, 0.278502f, 0.344724f, 0.388895f, 0.423036f, 0.467855f, - 0.062429f, 0.109771f, 0.162502f, 0.196939f, 0.224387f, 0.262071f, 0.323117f, 0.368722f, 0.416985f, 0.462413f, - 0.060110f, 0.108774f, 0.150308f, 0.199802f, 0.264652f, 0.304578f, 0.347395f, 0.390206f, 0.426311f, 0.464915f, - 0.045681f, 0.089659f, 0.149800f, 0.186117f, 0.216751f, 0.246327f, 0.290352f, 0.344660f, 0.389432f, 0.444891f, - 0.050829f, 0.096543f, 0.155589f, 0.190895f, 0.224301f, 0.271682f, 0.326354f, 0.381553f, 0.421373f, 0.457146f, - 0.044771f, 0.084669f, 0.139044f, 0.192501f, 0.226907f, 0.263807f, 0.306407f, 0.377071f, 0.414961f, 0.450916f, - 0.058452f, 0.110406f, 0.157460f, 0.204676f, 0.258762f, 0.290562f, 0.319844f, 0.352065f, 0.432222f, 0.472393f, - 0.056675f, 0.105769f, 0.145256f, 0.189372f, 0.223155f, 0.268584f, 0.316662f, 0.365541f, 0.401645f, 0.434404f, - 0.049272f, 0.094814f, 0.143723f, 0.196904f, 0.246241f, 0.301437f, 0.346313f, 0.383753f, 0.419651f, 0.459244f, - 0.047694f, 0.094350f, 0.151873f, 0.209061f, 0.245856f, 0.275424f, 0.315157f, 0.371735f, 0.428434f, 0.463634f, - 0.070013f, 0.117284f, 0.176432f, 0.220387f, 0.259562f, 0.300623f, 0.342089f, 0.390694f, 0.417372f, 0.462571f, - 0.058921f, 0.104850f, 0.142858f, 0.178126f, 0.210803f, 0.238810f, 0.288098f, 0.384526f, 0.432185f, 0.467076f, - 0.047972f, 0.097327f, 0.148890f, 0.203855f, 0.243240f, 0.283598f, 0.334893f, 0.372088f, 0.412174f, 0.464413f, - 0.053684f, 0.096809f, 0.143044f, 0.181581f, 0.228389f, 0.270800f, 0.322361f, 0.391276f, 0.430659f, 0.466880f, - 0.044586f, 0.122337f, 0.167705f, 0.201662f, 0.240097f, 0.289818f, 0.345058f, 0.382092f, 0.438138f, 0.472021f, - 0.058657f, 0.131647f, 0.175035f, 0.201389f, 0.228297f, 0.262383f, 0.300653f, 0.346236f, 0.427618f, 0.466306f, - 0.038131f, 0.079609f, 0.143124f, 0.213799f, 0.246000f, 0.274980f, 0.350246f, 0.403256f, 0.438897f, 0.468033f, - 0.068699f, 0.115225f, 0.168266f, 0.197077f, 0.222782f, 0.246507f, 0.334509f, 0.387455f, 0.435752f, 0.475064f, - 0.051779f, 0.102976f, 0.156663f, 0.213128f, 0.264735f, 0.326526f, 0.372141f, 0.403846f, 0.432850f, 0.471923f, - 0.060586f, 0.101498f, 0.135493f, 0.173480f, 0.209652f, 0.250462f, 0.291284f, 0.342503f, 0.417229f, 0.462133f, - 0.044335f, 0.086169f, 0.144113f, 0.197628f, 0.235900f, 0.273515f, 0.311798f, 0.358357f, 0.413356f, 0.462417f, - 0.037139f, 0.074523f, 0.116614f, 0.165055f, 0.223223f, 0.273117f, 0.329507f, 0.383426f, 0.435814f, 0.470269f, - 0.047181f, 0.097768f, 0.171023f, 0.205397f, 0.245358f, 0.295311f, 0.336586f, 0.369485f, 0.421233f, 0.465914f, - 0.062309f, 0.104500f, 0.147401f, 0.193110f, 0.228058f, 0.260174f, 0.286437f, 0.328216f, 0.408873f, 0.457704f, - 0.033758f, 0.076535f, 0.146968f, 0.223914f, 0.256314f, 0.293898f, 0.344191f, 0.380044f, 0.429295f, 0.458511f, - 0.053820f, 0.100870f, 0.151208f, 0.199506f, 0.237034f, 0.278242f, 0.317503f, 0.365012f, 0.414293f, 0.458401f, - 0.048959f, 0.115875f, 0.173948f, 0.217520f, 0.259862f, 0.301989f, 0.347552f, 0.382497f, 0.417961f, 0.461917f, - 0.049542f, 0.091687f, 0.132903f, 0.189723f, 0.224344f, 0.257479f, 0.299641f, 0.352070f, 0.426438f, 0.468136f, - 0.074975f, 0.118701f, 0.151425f, 0.178468f, 0.223099f, 0.296570f, 0.342204f, 0.375124f, 0.418237f, 0.461155f, - 0.048862f, 0.101636f, 0.141831f, 0.184422f, 0.217823f, 0.249609f, 0.343243f, 0.399113f, 0.450686f, 0.477330f, - 0.074971f, 0.112223f, 0.157913f, 0.196284f, 0.243594f, 0.305898f, 0.340704f, 0.371399f, 0.418209f, 0.461180f, - 0.047352f, 0.115276f, 0.160725f, 0.193027f, 0.229854f, 0.263731f, 0.301940f, 0.378552f, 0.414083f, 0.446173f, - 0.059846f, 0.105671f, 0.144046f, 0.198296f, 0.245954f, 0.283923f, 0.350516f, 0.391352f, 0.430367f, 0.471737f, - 0.074555f, 0.112890f, 0.160280f, 0.193719f, 0.233102f, 0.266509f, 0.312007f, 0.386544f, 0.420167f, 0.458038f, - 0.067261f, 0.111598f, 0.155216f, 0.207272f, 0.253291f, 0.309808f, 0.375775f, 0.406060f, 0.429646f, 0.466527f, - 0.072015f, 0.113855f, 0.152641f, 0.185966f, 0.212160f, 0.244403f, 0.279304f, 0.353568f, 0.397873f, 0.432053f, - 0.057609f, 0.105877f, 0.148922f, 0.188700f, 0.232036f, 0.282119f, 0.329612f, 0.375947f, 0.416782f, 0.457815f, - 0.050973f, 0.100177f, 0.140092f, 0.185550f, 0.238056f, 0.273150f, 0.321487f, 0.383660f, 0.415638f, 0.456817f, - 0.039806f, 0.126350f, 0.178948f, 0.213873f, 0.255655f, 0.294524f, 0.330344f, 0.360261f, 0.416162f, 0.466911f, - 0.063393f, 0.108247f, 0.149242f, 0.189683f, 0.222867f, 0.262691f, 0.299364f, 0.359972f, 0.412753f, 0.457277f, - 0.050600f, 0.099234f, 0.150035f, 0.198292f, 0.246257f, 0.290806f, 0.336586f, 0.382631f, 0.424274f, 0.463374f, - 0.067312f, 0.111338f, 0.151025f, 0.202518f, 0.240338f, 0.269562f, 0.300697f, 0.385260f, 0.440923f, 0.472259f, - 0.092753f, 0.142329f, 0.176758f, 0.223424f, 0.268502f, 0.296763f, 0.319964f, 0.376238f, 0.441441f, 0.477606f, - 0.057530f, 0.097677f, 0.159509f, 0.201106f, 0.224079f, 0.245637f, 0.286003f, 0.375766f, 0.445386f, 0.477458f, - 0.055718f, 0.105169f, 0.156792f, 0.203385f, 0.244396f, 0.285413f, 0.325547f, 0.384007f, 0.421448f, 0.459753f, - 0.044415f, 0.093549f, 0.159707f, 0.192449f, 0.225942f, 0.267813f, 0.348584f, 0.389866f, 0.428214f, 0.465053f, - 0.073100f, 0.142639f, 0.179538f, 0.209861f, 0.241096f, 0.284495f, 0.333600f, 0.382609f, 0.420087f, 0.454347f, - 0.056150f, 0.133011f, 0.171789f, 0.209798f, 0.243168f, 0.280293f, 0.313300f, 0.361975f, 0.402894f, 0.441400f, - 0.050711f, 0.100022f, 0.148476f, 0.200043f, 0.247876f, 0.305520f, 0.362364f, 0.399378f, 0.431164f, 0.470519f, - 0.050151f, 0.102726f, 0.178139f, 0.214644f, 0.239684f, 0.272465f, 0.350549f, 0.395865f, 0.439724f, 0.472007f, - 0.057321f, 0.112456f, 0.176664f, 0.223544f, 0.265943f, 0.332838f, 0.374528f, 0.400087f, 0.422190f, 0.452780f, - 0.068936f, 0.111462f, 0.152424f, 0.184775f, 0.213783f, 0.241083f, 0.269875f, 0.305906f, 0.384801f, 0.449720f, - 0.047841f, 0.090004f, 0.137440f, 0.184176f, 0.226672f, 0.280565f, 0.332422f, 0.379775f, 0.414877f, 0.455906f, - 0.051208f, 0.095910f, 0.134766f, 0.179194f, 0.228900f, 0.267574f, 0.317929f, 0.370086f, 0.401118f, 0.446217f, - 0.057304f, 0.108307f, 0.167260f, 0.219044f, 0.253957f, 0.285245f, 0.321407f, 0.369771f, 0.413636f, 0.462874f, - 0.062714f, 0.102112f, 0.146902f, 0.188999f, 0.226385f, 0.267241f, 0.309584f, 0.346847f, 0.387502f, 0.451009f, - 0.045352f, 0.084823f, 0.120662f, 0.187181f, 0.252978f, 0.294385f, 0.328589f, 0.369623f, 0.440700f, 0.470814f, - 0.054539f, 0.107161f, 0.151423f, 0.184774f, 0.222621f, 0.270311f, 0.310645f, 0.379532f, 0.421532f, 0.464395f, - 0.041931f, 0.097165f, 0.176126f, 0.244078f, 0.285457f, 0.311564f, 0.343280f, 0.380534f, 0.427693f, 0.465345f, - 0.049656f, 0.089927f, 0.123487f, 0.158143f, 0.207460f, 0.251012f, 0.298147f, 0.386381f, 0.434882f, 0.470227f, - 0.064608f, 0.113031f, 0.152816f, 0.202317f, 0.244207f, 0.281442f, 0.321974f, 0.369506f, 0.411120f, 0.458796f, - 0.041667f, 0.088042f, 0.149426f, 0.187507f, 0.226638f, 0.278825f, 0.313814f, 0.388390f, 0.448889f, 0.473167f, - 0.063255f, 0.112633f, 0.161884f, 0.207517f, 0.248243f, 0.290171f, 0.339946f, 0.392358f, 0.424077f, 0.465045f, - 0.047738f, 0.124639f, 0.167770f, 0.198211f, 0.225569f, 0.260577f, 0.319448f, 0.357208f, 0.390762f, 0.448737f, - 0.056281f, 0.097031f, 0.133672f, 0.175612f, 0.249666f, 0.302816f, 0.358207f, 0.396586f, 0.431468f, 0.464859f, - 0.065840f, 0.114000f, 0.154376f, 0.181022f, 0.219481f, 0.272109f, 0.342283f, 0.390114f, 0.425579f, 0.463533f, - 0.054385f, 0.087287f, 0.133120f, 0.219075f, 0.277198f, 0.318550f, 0.353398f, 0.394571f, 0.451311f, 0.473024f, - 0.050377f, 0.099870f, 0.139986f, 0.179622f, 0.215723f, 0.254691f, 0.298673f, 0.344156f, 0.401375f, 0.451981f, - 0.047282f, 0.095779f, 0.154096f, 0.204588f, 0.238142f, 0.277769f, 0.328001f, 0.383819f, 0.421546f, 0.464335f, - 0.051096f, 0.097245f, 0.143694f, 0.189341f, 0.232614f, 0.275390f, 0.321690f, 0.370345f, 0.414317f, 0.459688f, - 0.057607f, 0.108697f, 0.166883f, 0.217010f, 0.265314f, 0.303576f, 0.339093f, 0.374926f, 0.429392f, 0.466921f, - 0.058130f, 0.096368f, 0.163828f, 0.194469f, 0.230519f, 0.266092f, 0.322506f, 0.379323f, 0.410417f, 0.440281f, - 0.059593f, 0.104108f, 0.143990f, 0.199751f, 0.246890f, 0.283738f, 0.342763f, 0.388274f, 0.417119f, 0.460115f, - 0.044521f, 0.105111f, 0.173587f, 0.207942f, 0.239336f, 0.273945f, 0.308799f, 0.369491f, 0.436878f, 0.469005f, - 0.074773f, 0.133154f, 0.177818f, 0.224283f, 0.264970f, 0.306138f, 0.340046f, 0.370218f, 0.412563f, 0.459546f, - 0.075738f, 0.111821f, 0.145360f, 0.181385f, 0.219465f, 0.256030f, 0.308392f, 0.373355f, 0.418157f, 0.463492f, - 0.056087f, 0.105731f, 0.160372f, 0.206032f, 0.244637f, 0.282396f, 0.334056f, 0.375992f, 0.420837f, 0.468046f, - 0.076209f, 0.108262f, 0.143499f, 0.182696f, 0.233318f, 0.271088f, 0.327756f, 0.373740f, 0.439247f, 0.474235f, - 0.052399f, 0.112281f, 0.162812f, 0.201017f, 0.261354f, 0.299326f, 0.327620f, 0.386801f, 0.447769f, 0.474791f, - 0.074893f, 0.121992f, 0.163699f, 0.207822f, 0.244930f, 0.271999f, 0.296466f, 0.345316f, 0.435127f, 0.476239f, - 0.058176f, 0.105085f, 0.149574f, 0.194188f, 0.249818f, 0.296524f, 0.337963f, 0.402402f, 0.448624f, 0.472243f, - 0.060779f, 0.099068f, 0.167491f, 0.198796f, 0.227494f, 0.254019f, 0.329803f, 0.403981f, 0.450520f, 0.475438f, - 0.052532f, 0.104934f, 0.160049f, 0.218916f, 0.277885f, 0.331831f, 0.371634f, 0.402258f, 0.429073f, 0.470420f, - 0.066857f, 0.108497f, 0.146533f, 0.186402f, 0.214087f, 0.239551f, 0.273028f, 0.339210f, 0.442001f, 0.475864f, - 0.058742f, 0.098634f, 0.140424f, 0.200627f, 0.237759f, 0.274315f, 0.336864f, 0.374803f, 0.415969f, 0.461915f, - 0.055406f, 0.096635f, 0.130990f, 0.174857f, 0.231572f, 0.277597f, 0.327848f, 0.376613f, 0.419923f, 0.465467f, - 0.063142f, 0.117506f, 0.165530f, 0.207973f, 0.252515f, 0.292023f, 0.332960f, 0.374855f, 0.422203f, 0.463402f, - 0.073810f, 0.115150f, 0.161374f, 0.201145f, 0.234138f, 0.271883f, 0.300056f, 0.334944f, 0.401703f, 0.457714f, - 0.037073f, 0.082702f, 0.150719f, 0.196430f, 0.266875f, 0.302676f, 0.341803f, 0.383090f, 0.434380f, 0.469480f, - 0.056987f, 0.107639f, 0.156686f, 0.198247f, 0.233643f, 0.272298f, 0.323545f, 0.383539f, 0.424062f, 0.466175f, - 0.068935f, 0.128609f, 0.175519f, 0.221849f, 0.262138f, 0.308833f, 0.354349f, 0.391305f, 0.431214f, 0.465646f, - 0.058327f, 0.099513f, 0.135693f, 0.173498f, 0.210477f, 0.259223f, 0.309074f, 0.365292f, 0.418318f, 0.460997f, - 0.053768f, 0.108301f, 0.148739f, 0.187783f, 0.248594f, 0.294002f, 0.326224f, 0.362744f, 0.418485f, 0.459503f, - 0.072347f, 0.113391f, 0.145826f, 0.186488f, 0.216571f, 0.246055f, 0.321765f, 0.384969f, 0.449111f, 0.479851f, - 0.068789f, 0.114708f, 0.171724f, 0.209662f, 0.240956f, 0.286235f, 0.354813f, 0.393328f, 0.420976f, 0.466079f, - 0.076792f, 0.122064f, 0.164111f, 0.196669f, 0.228773f, 0.263496f, 0.298068f, 0.369577f, 0.412072f, 0.446788f, - 0.072788f, 0.097673f, 0.130704f, 0.203771f, 0.250741f, 0.295679f, 0.355656f, 0.375931f, 0.431577f, 0.468953f, - 0.084680f, 0.123747f, 0.166460f, 0.199970f, 0.238683f, 0.271627f, 0.332322f, 0.389857f, 0.417976f, 0.454237f, - 0.047850f, 0.120236f, 0.163003f, 0.208247f, 0.285501f, 0.314491f, 0.348042f, 0.393049f, 0.436136f, 0.467946f, - 0.074354f, 0.116190f, 0.158181f, 0.188861f, 0.216650f, 0.247676f, 0.294654f, 0.344099f, 0.416305f, 0.461946f, - 0.053571f, 0.101937f, 0.148655f, 0.194776f, 0.237718f, 0.284302f, 0.333285f, 0.379409f, 0.424284f, 0.464382f, - 0.058960f, 0.099074f, 0.140467f, 0.196967f, 0.231626f, 0.264843f, 0.323752f, 0.385782f, 0.425341f, 0.465240f, - 0.043253f, 0.133255f, 0.191933f, 0.224667f, 0.269958f, 0.309788f, 0.340578f, 0.370291f, 0.414823f, 0.464356f, - 0.055527f, 0.103077f, 0.145933f, 0.195951f, 0.237681f, 0.276359f, 0.307310f, 0.343951f, 0.415470f, 0.466831f, - 0.056607f, 0.103731f, 0.150533f, 0.199143f, 0.247090f, 0.294661f, 0.337006f, 0.380695f, 0.436417f, 0.469044f, - 0.058017f, 0.111478f, 0.184738f, 0.222470f, 0.248826f, 0.274226f, 0.313164f, 0.396522f, 0.439606f, 0.469562f, - 0.059766f, 0.131086f, 0.177741f, 0.250119f, 0.292365f, 0.314884f, 0.343841f, 0.383029f, 0.418571f, 0.469165f, - 0.063549f, 0.123913f, 0.167854f, 0.196007f, 0.222730f, 0.248052f, 0.296431f, 0.381363f, 0.440747f, 0.474918f, - 0.057303f, 0.104523f, 0.145906f, 0.215521f, 0.258023f, 0.293742f, 0.329884f, 0.375696f, 0.425649f, 0.463893f, - 0.062113f, 0.113749f, 0.146593f, 0.190918f, 0.221197f, 0.281815f, 0.352860f, 0.400393f, 0.454168f, 0.477972f, - 0.065394f, 0.121516f, 0.199177f, 0.235275f, 0.266790f, 0.299190f, 0.343026f, 0.386286f, 0.439359f, 0.470243f, - 0.079123f, 0.135214f, 0.178870f, 0.220386f, 0.255756f, 0.285377f, 0.317392f, 0.361228f, 0.405450f, 0.467724f, - 0.056167f, 0.115899f, 0.166770f, 0.207524f, 0.241655f, 0.297597f, 0.366322f, 0.404801f, 0.440200f, 0.470576f, - 0.065840f, 0.126504f, 0.164612f, 0.196957f, 0.220935f, 0.267816f, 0.338526f, 0.391567f, 0.453372f, 0.479359f, - 0.044781f, 0.115425f, 0.177337f, 0.247881f, 0.284229f, 0.319088f, 0.355269f, 0.403159f, 0.444401f, 0.467850f -}; -#endif const Word16 swb_tbe_lsfvq_cbook_8b[256 * LPC_SHB_ORDER] = /* Q15 */ { 1705, 3230, 4202, 5086, 6148, 7221, 8127, 10728, 13656, 15364, @@ -25759,14 +15570,6 @@ const Word16 swb_tbe_lsfvq_cbook_8b[256 * LPC_SHB_ORDER] = /* Q15 */ 1467, 3782, 5811, 8123, 9314, 10456, 11641, 13211, 14562, 15331, }; -#ifndef IVAS_FLOAT_FIXED -const float wac_swb[LPC_SHB_ORDER + 1] = -{ - 1.00030000f, 0.99972246f, 0.99889029f, 0.99750487f, - 0.99556853f, 0.99308446f, 0.99005679f, 0.98649053f, - 0.98239158f, 0.97776669f, 0.97262346f -}; -#endif const Word16 wac_swb_h[LPC_SHB_ORDER] = {//Q15 @@ -25796,13 +15599,6 @@ const Word16 wac_swb_l[LPC_SHB_ORDER] = 30328 }; -#ifndef IVAS_FLOAT_FIXED -const float lbr_wb_bwe_lsfvq_cbook_2bit[4*4] = {0.11829331f, 0.18065347f, 0.27315149f, 0.36268139f, - 0.20006990f, 0.24350365f, 0.33066865f, 0.40078221f, - 0.13430431f, 0.20694768f, 0.32580520f, 0.41176145f, - 0.25797083f, 0.29579351f, 0.36694117f, 0.42482337f - }; -#endif const Word16 lbr_wb_bwe_lsfvq_cbook_2bit_fx[4 * 4] = { @@ -25813,53 +15609,6 @@ const Word16 lbr_wb_bwe_lsfvq_cbook_2bit_fx[4 * 4] = 8453, 9693, 12024, 13921, }; -const float wac[LPC_SHB_ORDER + 1] = { 1.000030000f, 0.999876638f, - 0.999506642f, 0.998890286f, - 0.998028026f, 0.996920500f, - 0.995568526f, 0.993973102f, - 0.992135406f, 0.990056789f, - 0.987738783f - }; - -#ifndef IVAS_FLOAT_FIXED -/* 5-bit TD SWB BWE temporal shaping codebook */ -const float SHBCB_SubGain5bit[128] = -{ - -0.1457681f, -0.4764620f, -0.4013963f, -0.3677013f, - -0.4313035f, -0.3313996f, -0.3050383f, -0.2133066f, - -1.0206577f, -0.9364462f, -0.0586007f, -0.4846374f, - -1.6047017f, -0.3614168f, -0.3000874f, -0.2672006f, - -0.0931186f, -0.4041055f, -0.5172903f, -0.5874190f, - -0.4911704f, -0.2494092f, -0.5456603f, -0.1857298f, - -0.2215641f, -0.3130259f, -0.3029806f, -0.4504822f, - -0.0164831f, -1.1390385f, -1.4790464f, -1.5514144f, - -0.5643114f, -0.4608741f, -0.3408080f, -0.1252954f, - -0.1276388f, -0.2821012f, -0.5614353f, -0.8928169f, - -0.2834879f, -0.1340739f, -0.6259241f, -0.5918277f, - -0.1487753f, -0.5728573f, -0.7163700f, -0.2789117f, - -0.8768165f, -0.6980218f, -0.5036601f, -0.0499640f, - -0.9883066f, -0.9968036f, -1.0402167f, -0.0137106f, - -0.3300310f, -0.5241924f, -0.4624851f, -0.1401303f, - -1.6058040f, -1.3385040f, -0.4591369f, -0.1534372f, - -0.1989556f, -0.2591312f, -0.4850197f, -0.4037134f, - -0.1111035f, -0.3369072f, -0.9321365f, -1.2062822f, - -0.2261946f, -0.2280687f, -0.3570638f, -0.6421078f, - -0.6153073f, -0.2471987f, -0.2481002f, -0.3052209f, - -0.2385272f, -0.6048125f, -0.1758713f, -0.5861754f, - -0.0317327f, -0.6809157f, -0.7702834f, -0.7792925f, - -0.2770282f, -0.3142404f, -0.3788958f, -0.2723185f, - -0.2970077f, -0.4682712f, -0.2584636f, -0.2690060f, - -0.5592654f, -0.8185204f, -0.1815633f, -0.2389702f, - -0.7487352f, -0.4618911f, -0.2345186f, -0.1725288f, - -0.4382800f, -0.2999320f, -0.1591911f, -0.5732270f, - -0.3830038f, -0.1750423f, -0.3638722f, -0.3974119f, - -0.7911282f, -0.0631017f, -0.5198654f, -0.6708761f, - -0.5033713f, -0.4643340f, -0.1527029f, -0.3067638f, - -0.3547296f, -0.3050630f, -0.2355810f, -0.3526833f, - -1.0319320f, -0.3646283f, -0.2706210f, -0.1999401f -}; -#endif - const Word16 SHBCB_SubGain5bit_fx[128] = { /*Q14 */ @@ -25897,44 +15646,6 @@ const Word16 SHBCB_SubGain5bit_fx[128] = -16907, -5974, -4434, -3276, }; -#ifndef IVAS_FLOAT_FIXED -/* 5-bit TD WB BWE temporal shaping codebook */ -const float HBCB_SubGain5bit[128] = -{ - -59.470337f, -69.488670f, -38.659931f, -19.719824f, - -1.7830310f, -4.812642f, -8.744000f, -10.867781f, - -13.246320f, -15.094897f, -15.727152f, -15.801854f, - -7.879738f, -5.120556f, -3.429671f, -7.706632f, - -50.144310f, -60.062901f, -32.317268f, -16.175051f, - -10.900867f, -11.864854f, -9.386131f, -1.335022f, - -13.235695f, -14.241489f, -13.557719f, -11.050961f, - -0.612834f, -7.908495f, -9.054081f, -8.763001f, - -57.235970f, -64.192162f, -30.073193f, -4.640105f, - -10.025522f, -6.857354f, -1.353238f, -6.571805f, - -8.077633f, -9.067668f, -9.157619f, -9.171074f, - -6.871120f, -4.052971f, -7.285939f, -7.970854f, - -44.516933f, -53.591618f, -30.267939f, -10.678650f, - -3.160364f, -7.559843f, -7.367127f, -3.052069f, - -8.343053f, -7.577167f, -3.678010f, -6.135194f, - -7.522539f, -9.290725f, -10.048427f, -8.378534f, - -68.482224f, -75.261124f, -30.160120f, -10.437404f, - -2.787138f, -2.637044f, -5.920231f, -8.091020f, - -7.519012f, -9.081453f, -9.857375f, -10.380337f, - -6.422596f, -6.540410f, -7.954427f, -7.877131f, - -49.924343f, -57.036163f, -26.225056f, -5.391133f, - -8.174749f, -6.656519f, -4.389360f, -2.953642f, - -10.844235f, -10.494500f, -8.072153f, -4.695106f, - -4.305107f, -2.655748f, -7.638941f, -9.281904f, - -56.389565f, -61.898930f, -19.212666f, -8.088096f, - -6.302619f, -2.904698f, -7.059662f, -5.392998f, - -2.423694f, -5.054863f, -7.913060f, -8.444733f, - -3.101384f, -6.855487f, -4.557333f, -6.881396f, - -45.418392f, -52.252014f, -22.952511f, -7.653957f, - -3.941019f, -7.339684f, -4.011926f, -7.481068f, - -6.772878f, -4.939885f, -7.817589f, -3.977276f, - -2.728315f, -6.770474f, -8.485444f, -4.669493f -}; -#endif const Word16 HBCB_SubGain5bit_fx[128] = {//Q8 @@ -25957,20 +15668,6 @@ const Word16 HBCB_SubGain5bit_fx[128] = }; -#ifndef IVAS_FLOAT_FIXED -/* 6 bit Quantizer table for SHB overall gain */ -const float SHBCB_FrameGain64[64]= -{ - 0.044072020f, 0.074116257f, 0.104772820f, 0.137129910f, 0.172361440f, 0.209110170f, 0.248146360f, 0.290349910f, - 0.336033220f, 0.384576680f, 0.436074570f, 0.491054220f, 0.550217560f, 0.613450140f, 0.681455200f, 0.753997600f, - 0.831286250f, 0.914336560f, 1.003638100f, 1.100985500f, 1.205300400f, 1.317519300f, 1.437191800f, 1.566197500f, - 1.704663300f, 1.853099500f, 2.013720200f, 2.190476500f, 2.382512800f, 2.591447500f, 2.818724200f, 3.064693900f, - 3.331486000f, 3.621288500f, 3.936974000f, 4.279052900f, 4.652247100f, 5.063426700f, 5.516226500f, 6.014047700f, - 6.565030700f, 7.179005400f, 7.869640600f, 8.646445300f, 9.521977600f, 10.52553600f, 11.67516800f, 13.00652900f, - 14.56494800f, 16.38657700f, 18.56994600f, 21.17650800f, 24.29317200f, 27.95810000f, 32.33308400f, 37.72507700f, - 44.44091200f, 52.62181300f, 62.89529200f, 76.21739000f, 94.34608600f, 119.5521800f, 160.0594500f, 245.1366400f -}; -#endif const Word32 SHBCB_FrameGain64_fx[64] = { @@ -25986,27 +15683,6 @@ const Word32 SHBCB_FrameGain64_fx[64] = }; /* 4 bit Quantizer table for SHB overall gain */ -#ifndef IVAS_FLOAT_FIXED -const float SHBCB_FrameGain16[16]= -{ - 0.148650413f, - 0.477894376f, - 0.970739390f, - 1.882108080f, - 3.981442531f, - 7.946689290f, - 14.46817648f, - 24.39527659f, - 39.12384197f, - 60.03913602f, - 88.76762784f, - 130.1507349f, - 184.4881647f, - 271.3320980f, - 409.9269865f, - 735.8126500f -}; -#endif const Word32 SHBCB_FrameGain16_fx[16] = { @@ -26016,17 +15692,6 @@ const Word32 SHBCB_FrameGain16_fx[16] = }; /* 18th order elliptic Bandpass filter at 14.15 to 20 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ -#ifndef IVAS_FLOAT_FIXED -const float full_band_bpf_1[6][5] = -{ - { 9.6362039055508E-02f, 9.7862105350605E-02f, 3.0245537519444E-02f, 9.7862105350605E-02f, 9.6362039055508E-02f}, - { 9.6362039055508E-02f, 1.4633143118038E-01f, 1.0233713813742E-01f, 1.4633143118038E-01f, 9.6362039055508E-02f}, - { 9.6362039055508E-02f, 1.6626923151583E-02f, -1.3709502682285E-01f, 1.6626923151583E-02f, 9.6362039055508E-02f}, - { 1.0000000000000E+00f, 2.3991100643722E+00f, 2.9774531499625E+00f, 2.0824517848412E+00f, 8.0090184246950E-01f}, - { 1.0000000000000E+00f, 1.8724727524876E+00f, 2.4558672940808E+00f, 1.6868952908597E+00f, 7.5556052044790E-01f}, - { 1.0000000000000E+00f, 2.5823882989829E+00f, 3.2419903202957E+00f, 2.1041782509434E+00f, 6.8348510539492E-01f} -}; -#endif const Word16 full_band_bpf_1_fx[6][5] = /*in Q13*/ { @@ -26039,17 +15704,6 @@ const Word16 full_band_bpf_1_fx[6][5] = /*in Q13*/ }; /* 12th order elliptic Bandpass filter at 16.3 to 19.8 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ -#ifndef IVAS_FLOAT_FIXED -const float full_band_bpf_2[6][5] = -{ - { 6.0003889556380E-02f, 1.1128037231775E-01f, 1.1894140617207E-01f, 1.1128037231775E-01f, 6.0003889556380E-02f}, - { 6.0003889556380E-02f, 1.4172832594169E-01f, 1.6515046627146E-01f, 1.4172832594169E-01f, 6.0003889556380E-02f}, - { 6.0003889556380E-02f, 3.1639978682801E-02f, -3.7925280401819E-02f, 3.1639978682801E-02f, 6.0003889556380E-02f}, - { 1.0000000000000E+00f, 2.7969061159585E+00f, 3.7380107651703E+00f, 2.5896033662624E+00f, 8.7195105769838E-01f}, - { 1.0000000000000E+00f, 2.4858753840930E+00f, 3.3360972572945E+00f, 2.3002595115472E+00f, 8.4059566462167E-01f}, - { 1.0000000000000E+00f, 2.8681737877693E+00f, 3.8085295994769E+00f, 2.5421873471575E+00f, 7.9182537841461E-01f} -}; -#endif const Word16 full_band_bpf_2_fx[6][5] = /*in Q13*/ { @@ -26062,17 +15716,6 @@ const Word16 full_band_bpf_2_fx[6][5] = /*in Q13*/ }; /* 12th order elliptic Bandpass filter at 15.4 to 20.0 kHz sampled at 48 kHz b0,b1,b2,a0,a1,a2 */ -#ifndef IVAS_FLOAT_FIXED -const float full_band_bpf_3[6][5] = -{ - {7.4636437949154E-02f, 1.0834902081890E-01f, 8.7514468139390E-02f, 1.0834902081890E-01f, 7.4636437949154E-02f}, - {7.4636437949154E-02f, 1.4782752996297E-01f, 1.4824632166087E-01f, 1.4782752996297E-01f, 7.4636437949154E-02f}, - {7.4636437949154E-02f, 2.4020393588811E-02f, -8.1869063979759E-02f, 2.4020393588811E-02f, 7.4636437949154E-02f}, - {1.0000000000000E+00f, 2.6521893008573E+00f, 3.4460829518042E+00f, 2.3910633156124E+00f, 8.3876600358846E-01f}, - {1.0000000000000E+00f, 2.2507856816983E+00f, 2.9756720931932E+00f, 2.0502894449026E+00f, 8.0167514850932E-01f}, - {1.0000000000000E+00f, 2.7689100300130E+00f, 3.5940097427365E+00f, 2.3681560760262E+00f, 7.4233948915492E-01f} -}; -#endif const Word16 full_band_bpf_3_fx[6][5] = /*in Q13*/ { @@ -26085,59 +15728,14 @@ const Word16 full_band_bpf_3_fx[6][5] = /*in Q13*/ }; /* 4-bit/3-bit TD SWB BWE differential LSF scalar quantizer tables */ -#ifndef IVAS_FLOAT_FIXED -const float lsf_q_cb_4b[16] = -{ - 0.01798018f, 0.02359377f, 0.02790103f, 0.03181538f, - 0.03579450f, 0.03974377f, 0.04364637f, 0.04754591f, - 0.05181858f, 0.05624165f, 0.06022101f, 0.06419064f, - 0.06889389f, 0.07539274f, 0.08504436f, 0.10014875f -}; - -const float lsf_q_cb_3b[8] = -{ - 0.02070812f, 0.02978384f, 0.03800822f, 0.04548685f, - 0.05307309f, 0.06137543f, 0.07216742f, 0.09013262f -}; - -const float * const lsf_q_cb[NUM_Q_LSF] = { lsf_q_cb_4b, lsf_q_cb_4b, lsf_q_cb_3b, lsf_q_cb_3b, lsf_q_cb_3b }; -#endif const Word16 lsf_q_cb_size[NUM_Q_LSF] = {16, 16, 8, 8, 8}; // Q0 const Word16 lsf_q_num_bits[NUM_Q_LSF] = { 4, 4, 3, 3, 3 }; // Q0 /* Tables for approximation of upper half of SWB LSFs */ -#ifndef IVAS_FLOAT_FIXED -const float mirror_point_q_cb[MIRROR_POINT_Q_CB_SIZE] = { 0.01436178f, 0.02111641f, 0.02735687f, 0.03712105f }; -#endif const Word16 mirror_point_q_cb_fx[MIRROR_POINT_Q_CB_SIZE] = { 471, 692, 896, 1216 }; // Q15 -#ifndef IVAS_FLOAT_FIXED -const float lsf_grid[4][5] = -{ - { 0.15998503f, 0.31215086f, 0.47349756f, 0.66540429f, 0.84043882f }, - { 0.15614473f, 0.30697672f, 0.45619822f, 0.62493785f, 0.77798001f }, - { 0.14185823f, 0.26648724f, 0.39740108f, 0.55685745f, 0.74688616f }, - { 0.15416561f, 0.27238427f, 0.39376780f, 0.59287916f, 0.86613986f } -}; - -const float grid_smoothing[5] = { 0.2f, 0.35f, 0.5f, 0.75f, 0.8f }; -#endif - -const float allpass_poles_3_ov_2_flt[9] = -{ - 0.072265625000000f, - 0.626983642578125f, - 0.934020996093750f, - 0.778808593750000f, - 0.219360351562500f, - 0.970703125000000f, - 0.872039794921875f, - 0.438964843750000f, - 0.990966796875000f -}; - const Word16 allpass_poles_3_ov_2[9] = /* Q15 */ { 2368, @@ -26151,14 +15749,6 @@ const Word16 allpass_poles_3_ov_2[9] = /* Q15 */ 32472 }; -const float decimate_3_ov_2_lowpass_num[3] = -{ - 0.195271809895833f, - 0.390543619791667f, - 0.195271809895833f -}; - - const Word16 decimate_3_ov_2_lowpass_num_fx[3] = /* Q15 */ { 6399, @@ -26166,13 +15756,6 @@ const Word16 decimate_3_ov_2_lowpass_num_fx[3] = /* Q15 */ 6399 }; -const float decimate_3_ov_2_lowpass_den[3] = -{ - 1.0f, - 0.0f, - 0.171630859375f -}; - const Word16 decimate_3_ov_2_lowpass_den_fx[3] = /* Q15 */ { 32767, @@ -26184,43 +15767,6 @@ const Word16 decimate_3_ov_2_lowpass_den_fx[3] = /* Q15 */ /*------------------------------------------------------------------------------* * WB BWE tables *------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float F_2_5[64] = -{ - 1.1606680f, 0.6594560f, - -4.9874350f, -5.1700310f, - 10.230799f, -0.0125740f, - 10.605126f, 9.7910260f, - -0.3739880f, -0.6027910f, - 6.2753817f, 0.3307670f, - 9.4537100f, 8.8558020f, - 2.9320890f, 2.1643160f, - 3.1332030f, 2.9710870f, - 8.061906f, -0.5905290f, - 15.754963f, 5.0496380f, - 17.227070f, 18.329395f, - -2.4710190f, -3.1725330f, - -1.4136470f, -1.9457110f, - 15.147771f, 14.506490f, - 11.358370f, 11.714662f, - 9.4275510f, -0.1223030f, - 7.0970160f, -1.5805260f, - 12.498663f, 3.1614850f, - 10.349261f, 1.5185040f, - 5.3809850f, -1.7341900f, - 1.1224600f, -2.2397020f, - 12.362551f, 12.133788f, - 4.2788690f, -1.7729040f, - 6.1577130f, 5.4971410f, - 3.3243130f, -2.5710470f, - 19.097071f, 9.3576920f, - 7.6509204f, 7.4404626f, - -0.5055090f, -3.7073090f, - 18.584702f, 11.302494f, - 18.706564f, 18.308905f, - 23.010420f, 22.915377f -}; -#endif const Word16 F_2_5_fx[64] = /*Q10 */ { 1189, 675, -5106, -5293, 10476, -12, 10860, 10026, @@ -26245,12 +15791,6 @@ const Word16 sqrt_swb_bwe_subband_fx_L1[SWB_FENV] = { 16384, 20066, 16384, 20066 const Word16 sqrt_swb_bwe_subband_fx_L2[SWB_FENV / 2] = { 25905, 25905, 25905, 25905, 28378, 28378, 32767 }; /*Q12 */ -const float smooth_factor[SWB_FENV-1] = {0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.05f, 0.0417f, 0.0417f, 0.0417f, 0.0417f, 0.03125f, 0.03125f}; -const float fb_smooth_factor[DIM_FB] = {0.03125f, 0.0250f, 0.015625f}; -#ifndef IVAS_FLOAT_FIXED -const float swb_inv_bwe_subband_width[SWB_FENV] = {0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.0625f, 0.04167f, 0.04167f, 0.04167f, 0.04167f, 0.04167f, 0.03125f, 0.03125f}; -const float fb_inv_bwe_subband_width[DIM_FB] = {0.0250f, 0.0250f, 0.0125f}; -#endif const Word16 swb_bwe_subband[SWB_FENV+1] = {240, 256, 280, 296, 320, 336, 360, 376, 400, 424, 448, 472, 496, 528, 560}; // Q0 const Word16 fb_bwe_subband[DIM_FB + 1] = { 640, 680, 720, 800 }; // Q0 const Word16 fb_bwe_sm_subband[DIM_FB] = { 656, 696, 760 }; // Q0 @@ -26263,347 +15803,6 @@ const Word16 fb_inv_bwe_subband_width_fx[DIM_FB] = { 819, 819, 409 };//Q15 const Word16 fb_bwe_sm_subband_float[DIM_FB] = {656, 696, 760}; // Q0 const Word16 fb_smooth_factor_fx[DIM_FB] = { 1024, 819, 512 };//Q15 -#ifndef IVAS_FLOAT_FIXED -const float EnvCdbk11 [N_CB11 * DIM11] = -{ - -8.6703f, 0.1116f, 4.5639f, 8.2950f, 8.5148f, 4.7195f, 2.8963f, - 5.9419f, -1.2168f, -3.2933f, -5.9491f, -7.6969f, -8.6146f, -9.9275f, - 2.9127f, 7.1689f, 13.5188f, 17.1801f, 16.7640f, 16.3455f, 13.5231f, - 6.3569f, 9.6697f, 11.4712f, 11.0915f, 8.5859f, 6.7523f, 5.1755f, - -2.0082f, -2.8539f, -2.1756f, -0.7832f, 0.3904f, 1.8543f, 2.1094f, - 2.5602f, 3.7358f, 4.9688f, 4.2290f, 3.0234f, 2.6829f, 1.7943f, - 23.3857f, 21.3282f, 18.3157f, 16.3757f, 15.0204f, 14.1209f, 13.2521f, - 13.9500f, 18.9069f, 22.5926f, 24.4781f, 23.1748f, 20.1496f, 17.3157f, - 11.5571f, 8.1506f, 4.6099f, 3.8231f, 4.6089f, 5.3538f, 6.3890f, - 23.5508f, 24.0512f, 25.1225f, 26.4155f, 27.3361f, 27.9432f, 27.5377f, - -3.2117f, 0.8204f, 1.7588f, 0.6950f, -2.4959f, -5.2582f, -6.1620f, - 17.3871f, 16.3436f, 16.0602f, 16.9090f, 18.8782f, 20.4382f, 21.5310f, - 13.3594f, 15.6030f, 16.8792f, 16.4242f, 14.3912f, 12.3198f, 10.3571f, - -14.5849f, -9.0025f, -5.4218f, -1.2669f, 0.0853f, -3.3069f, -4.4553f, - 3.3195f, 1.9941f, 3.5010f, 6.9539f, 8.3192f, 10.5007f, 11.0406f, - 12.8683f, 11.0255f, 9.8051f, 9.8299f, 11.8326f, 13.3332f, 15.0119f, - -13.9167f, -13.3153f, -12.4970f, -11.3929f, -10.0932f, -8.9132f, -7.7378f, - -10.6935f, -12.4430f, -14.6553f, -16.8742f, -17.5158f, -17.6704f, -16.9116f, - -29.4308f, -29.2243f, -28.4494f, -28.0282f, -26.3950f, -24.5370f, -22.9103f, - -19.0168f, -18.8921f, -17.9786f, -17.2745f, -15.9625f, -14.5997f, -12.9787f, - -54.2808f, -53.8105f, -52.6712f, -52.1042f, -50.4929f, -48.4342f, -46.7588f, - 32.8477f, 32.8894f, 32.4420f, 31.6529f, 31.0708f, 30.3821f, 29.2828f, - 28.0454f, 26.7402f, 24.8801f, 23.3249f, 21.7053f, 20.7367f, 19.6371f, - 18.0979f, 15.6543f, 12.7634f, 9.4607f, 8.0952f, 6.9453f, 5.8996f, - 39.5644f, 40.7490f, 41.1718f, 40.9096f, 39.7482f, 38.4272f, 37.4463f, - 11.4554f, 10.5291f, 8.0459f, 5.0217f, 1.6581f, -0.9919f, -3.2238f, - -39.1890f, -38.4633f, -37.2799f, -36.7970f, -35.1580f, -33.2348f, -31.5786f, - 7.1490f, 3.6224f, -0.6163f, -1.5147f, -1.4079f, -1.4364f, -1.1211f, - -85.7873f, -85.5637f, -84.1707f, -83.8699f, -82.0486f, -80.1192f, -78.3737f, - -23.7889f, -23.9925f, -23.1930f, -22.8609f, -21.4574f, -19.9363f, -18.2458f, - -5.3981f, -6.4065f, -8.6148f, -9.9870f, -10.8787f, -11.7942f, -11.6944f, - -5.0767f, -6.1222f, -6.8130f, -6.4157f, -5.5037f, -4.2203f, -3.5243f, -}; - -const float EnvCdbk1st [N_CB1ST * DIM1ST] = -{ - -7.1064f, -4.4453f, 2.9351f, - -1.9308f, 0.6335f, -3.2258f, - -12.4978f, -0.4815f, 9.6818f, - -8.0902f, 0.9278f, -1.6759f, - -7.1051f, 6.9529f, 4.8166f, - 1.1089f, 4.6364f, -4.3871f, - -6.5985f, -2.8197f, -1.8909f, - -4.9078f, 0.2022f, -5.2175f, - -2.3609f, 14.6030f, -5.0669f, - 2.1685f, 1.6108f, 2.9025f, - -2.4455f, -6.5834f, 5.9636f, - 0.5645f, 6.0806f, -0.8753f, - -2.4904f, 5.3534f, 6.2069f, - -4.6416f, 0.1448f, -1.6019f, - -1.6724f, -12.9702f, 7.2641f, - 10.1438f, -0.3729f, -11.2325f, - -2.8994f, -2.2776f, -2.6711f, - 6.2755f, -6.5279f, -7.3185f, - -4.3406f, -3.6577f, -5.3655f, - 1.0746f, -9.0396f, 2.0233f, - 10.4764f, 9.2495f, -1.1811f, - 7.0665f, -2.1678f, -2.2621f, - 12.4715f, -4.9604f, -4.7190f, - 2.9306f, 0.3267f, 0.6027f, - -4.5326f, 1.6741f, 4.2905f, - 3.1882f, -2.3954f, -11.3147f, - 8.4338f, -7.3615f, 4.8623f, - -2.6210f, 1.6649f, 12.4120f, - 3.3880f, -0.5639f, -2.4950f, - 3.2948f, -7.3733f, 8.8713f, - 6.0225f, 1.0109f, -0.5767f, - -6.5622f, 4.0120f, 1.1130f, - 0.6314f, -2.9813f, 6.5088f, - -7.4838f, 4.5892f, -4.7926f, - -1.3492f, -3.5415f, -0.5914f, - 7.7312f, 4.1477f, 1.5695f, - -4.8092f, 9.5178f, 12.2277f, - -9.4609f, 1.4097f, 4.0613f, - -16.8501f, -16.0390f, -16.4874f, - 0.5711f, -4.6892f, -7.1391f, - 1.8938f, 3.4746f, -15.0275f, - 1.5014f, -9.6125f, -11.1128f, - 5.9617f, -2.3434f, 6.2473f, - -3.2715f, -2.2302f, 4.2871f, - 6.9371f, -13.2527f, 15.8528f, - -13.0084f, 9.4873f, 6.7652f, - 1.8265f, -8.3584f, -3.6477f, - 3.2532f, 8.9518f, -4.4112f, - -0.0785f, -4.0189f, 2.5487f, - -1.3509f, 0.6566f, 7.1658f, - -6.7577f, 3.2716f, 8.7273f, - 6.3343f, -6.6206f, -0.7569f, - -12.4925f, -3.0187f, 0.8888f, - 4.1806f, 6.8020f, 1.1128f, - 6.4660f, -0.8290f, -6.3590f, - 8.5089f, 2.3611f, 6.9696f, - 7.0355f, -12.5942f, -3.3116f, - -3.1974f, 1.3584f, 0.7314f, - 0.0624f, 1.1725f, 0.9528f, - 3.0031f, 0.7847f, 6.0715f, - 2.8083f, -1.5392f, 3.0486f, - 1.2144f, 11.1444f, 0.7234f, - 4.5417f, 1.9083f, -3.9930f, - -1.2897f, 1.7931f, 3.4268f, - 0.4267f, -2.1125f, -2.6993f, - -1.9870f, -1.0444f, 1.8659f, - -1.3273f, -1.6306f, -5.4788f, - -3.3603f, -2.6373f, -10.5580f, - 4.0034f, 3.2267f, 0.9765f, - -4.0725f, 3.9372f, -1.6940f, - -4.0711f, -2.4655f, 0.2350f, - -0.6742f, 1.2957f, -8.1420f, - 3.8434f, 3.5916f, -7.9753f, - -4.9118f, -8.9335f, 1.3240f, - 1.4296f, -5.1151f, -0.6183f, - 4.0664f, 4.0592f, 4.2287f, - 13.9299f, 3.5845f, 0.8860f, - 0.2439f, -0.5414f, 3.6573f, - 9.4697f, 2.8531f, -3.9907f, - -2.9106f, 7.6316f, 1.6666f, - -4.2611f, -5.3043f, -1.8686f, - -0.6757f, 8.2847f, -9.2447f, - -8.4955f, 9.9028f, -7.6020f, - -3.4387f, -7.6714f, -6.0496f, - -0.9730f, -4.6977f, -3.6204f, - -9.2868f, -1.7316f, -6.9325f, - -5.6205f, -2.2721f, 7.9555f, - -2.0678f, -14.3696f, -2.1494f, - 2.3769f, -1.1084f, -6.1183f, - 0.7835f, 0.2474f, -1.3438f, - 5.3736f, 0.8512f, 3.1856f, - 9.6507f, -1.3584f, 1.8708f, - -5.4226f, 3.8576f, -10.4452f, - 5.5806f, -13.8209f, 4.3938f, - 3.3739f, -5.2782f, 3.3015f, - 1.1772f, 3.8147f, 1.5955f, - -4.3838f, 13.1395f, 4.3243f, - -0.8337f, 2.8533f, -1.2842f, - 3.2788f, -2.6680f, -0.3603f, - 2.4648f, 4.5784f, 9.2339f, - 2.3348f, 2.6773f, -1.2865f, - -3.0488f, -5.1440f, 1.7493f, - -1.6552f, -0.5978f, -0.7764f, - 3.0011f, -1.2935f, 11.0366f, - 3.4439f, -4.0880f, -3.8069f, - -1.4637f, -7.1676f, -1.1671f, - 11.1758f, -13.1846f, -12.3361f, - 8.1990f, 8.4704f, -10.2721f, - 6.2564f, 7.5395f, 5.6662f, - 5.0554f, 4.9418f, -2.2877f, - -9.7668f, -10.0395f, -10.4193f, - -3.1503f, -5.9735f, 12.7823f, - -2.0408f, 4.1857f, 1.8667f, - 15.7600f, -9.7299f, 1.8762f, - -7.4519f, 9.4311f, -0.6946f, - -6.1047f, -0.5603f, 1.7096f, - 0.8003f, 3.3634f, 5.0259f, - -2.6989f, 3.7629f, -5.3679f, - -9.2139f, -7.9377f, -3.4621f, - 0.6323f, -1.7255f, 0.6234f, - 0.7594f, 9.7404f, 7.6543f, - -9.8933f, -10.0711f, 7.5139f, - 1.0426f, 6.6449f, 3.6587f, - 11.4042f, 11.5230f, 9.3039f, - -2.6163f, 8.2102f, -3.3574f, - -12.2920f, 5.4115f, -0.8387f, - 5.7900f, -2.3232f, 1.6209f, - 0.8904f, 1.1318f, -4.1407f, -}; - -const float EnvCdbk2nd [N_CB2ND * DIM2ND] = -{ - 4.3123f, -7.1616f, -4.3357f, -3.7263f, - 2.9572f, 3.3303f, -0.6874f, 1.1173f, - -3.4084f, -2.2922f, -0.0278f, 5.6960f, - -1.8039f, -2.1619f, -1.3655f, 0.4079f, - 7.5721f, 7.6436f, -5.2359f, -2.7457f, - 4.6943f, -3.0448f, 0.0822f, 7.7951f, - -11.1369f, -0.6607f, 4.0977f, 3.6717f, - -5.2941f, -2.8345f, -6.9855f, 4.2023f, - -2.9965f, -2.5020f, -2.5223f, -3.4361f, - 0.5260f, -3.2518f, -0.7710f, -3.4717f, - -3.2275f, 0.0098f, 1.0879f, -1.9621f, - -2.7904f, 2.1268f, -2.0540f, 1.4661f, - 1.1360f, -4.2031f, -3.1894f, -15.3458f, - -4.5909f, -1.8549f, 8.6689f, -2.5094f, - 0.7713f, -0.8552f, -4.1104f, -6.2533f, - 4.5892f, -0.6343f, -2.7162f, -1.3109f, - 4.3900f, 0.4919f, -9.0866f, -6.1448f, - 4.5483f, -5.1698f, -7.6465f, 4.1951f, - -8.1259f, -8.4044f, 0.4404f, 2.5339f, - -2.4877f, -3.3596f, 2.8155f, 1.0442f, - -2.3782f, 6.4752f, -3.9302f, -5.2807f, - 6.3692f, 8.6921f, 8.3109f, 7.1381f, - -4.3445f, -5.2789f, 7.2494f, 6.4679f, - -8.3291f, 3.9280f, 3.0088f, -5.0540f, - -1.8438f, 3.0318f, 6.4879f, 8.7826f, - -0.4718f, -2.2438f, -5.7862f, -1.2336f, - 10.0184f, -4.2246f, 0.7347f, 1.1461f, - 1.5549f, 10.1485f, 2.7490f, -4.4112f, - 3.9959f, 0.4078f, 2.1473f, 1.9496f, - -1.6255f, 0.4947f, 0.9865f, -7.3990f, - 1.7798f, -10.0697f, 0.7408f, 3.9759f, - -5.8117f, 1.1179f, -4.6947f, -3.5752f, - -4.5471f, 7.3211f, 6.4493f, 1.1780f, - -5.1254f, -6.0444f, -6.3492f, -5.9237f, - 0.6636f, -0.9113f, 3.1921f, 4.7217f, - -4.2586f, 1.3321f, 2.7703f, 2.8306f, - 3.3356f, 3.2010f, -1.0860f, -4.2324f, - -0.0572f, 0.4406f, 1.1161f, 1.1049f, - 4.5545f, -3.5389f, 7.3418f, 1.1747f, - 1.3350f, -0.0281f, -2.2930f, 3.0295f, - -3.0651f, -4.9167f, -4.5557f, 12.4767f, - -6.3679f, -4.1824f, 1.1715f, -4.2173f, - -0.0461f, 0.7412f, -2.1034f, -1.9263f, - 1.3714f, 3.5413f, 7.5363f, -5.9934f, - 1.8748f, 0.1406f, 2.3146f, -2.0562f, - 3.1775f, 4.7516f, 3.8512f, 0.3460f, - 0.3842f, 3.9440f, -8.8737f, 1.0470f, - 10.8029f, -0.3986f, -5.1051f, -3.4119f, - -6.4836f, -1.8259f, -1.4253f, 0.1826f, - 5.8438f, 4.9884f, -0.8889f, -10.9021f, - 6.1138f, -2.6130f, 2.0330f, -6.2434f, - -1.4101f, 4.2119f, 1.7856f, -1.4207f, - 2.1209f, -3.7111f, 0.1093f, 0.9671f, - 7.4373f, 3.1851f, -4.0372f, 4.3934f, - -0.0516f, -7.6212f, 4.2391f, -3.9245f, - -8.6836f, 5.9347f, -2.4382f, 3.3478f, - 4.3786f, 3.2445f, 3.4065f, 5.0603f, - 0.7547f, 8.9234f, -1.6469f, 2.3801f, - -0.6099f, 3.2294f, -2.8632f, 8.0661f, - -13.2408f, -13.2180f, -12.4864f, -12.5763f, - 0.1226f, 3.5019f, 2.1036f, 3.8209f, - -0.0830f, 1.5923f, 5.8683f, 1.5813f, - -2.2786f, -6.4905f, -2.5958f, -0.6420f, - 8.5661f, 3.8130f, 2.3928f, -1.7038f, -}; - -const float EnvCdbk3rd [N_CB3RD * DIM3RD] = -{ - 4.0282f, -9.5862f, 2.9221f, - 10.8219f, 9.5405f, 6.8798f, - -9.1733f, 15.9318f, -3.7461f, - 7.3196f, -2.8702f, -8.7570f, - -0.2304f, 0.1350f, 0.7863f, - -5.9316f, 0.6347f, 7.0661f, - -7.7220f, -4.1510f, -0.4015f, - 9.7056f, 4.7338f, -3.3708f, - 3.4447f, 0.7509f, 0.1539f, - 5.2980f, 3.3256f, 3.8228f, - -5.3770f, -11.5675f, -5.7681f, - 1.9411f, -3.1576f, 2.3162f, - -1.5410f, -2.9216f, -6.1087f, - -3.7107f, -0.7720f, -1.7048f, - -1.9664f, -5.5485f, -0.9158f, - 1.2430f, 3.8485f, -7.4409f, - -0.4624f, 6.9662f, 6.1050f, - 0.8584f, 3.6275f, 1.5624f, - 3.3487f, 0.1438f, -3.8870f, - -3.1533f, 7.5889f, -1.5958f, - -2.9036f, -2.0471f, 2.1555f, - 3.6715f, 6.4176f, -1.1670f, - 3.1461f, -5.5497f, -3.0001f, - -9.1009f, 2.7549f, 0.6103f, - 0.2373f, 0.7927f, 4.7365f, - -0.5389f, 2.0197f, -2.5074f, - 0.2485f, -1.9583f, -1.6996f, - 8.5694f, -2.4399f, 0.6128f, - -6.2513f, 1.3320f, -6.2922f, - 4.4430f, -1.3696f, 9.1921f, - -3.1673f, -6.6975f, 5.9466f, - -3.3971f, 2.3931f, 1.7433f, -}; - -const float EnvCdbk4th [N_CB4TH * DIM4TH] = -{ - 3.9996f, -0.8196f, -0.8101f, 2.3072f, - -1.0920f, -9.7095f, -3.7135f, 3.7429f, - 6.0104f, 4.4383f, 1.6047f, 5.1343f, - 6.8807f, -0.7893f, 5.2292f, 0.7940f, - -9.5225f, -8.2399f, -7.9213f, -8.3027f, - 7.2240f, -5.4987f, -2.6163f, 0.5630f, - -1.8336f, 10.4454f, -6.2079f, -14.0773f, - 6.4124f, -2.7411f, 0.5417f, 9.6735f, - -1.8885f, 1.4517f, -3.3639f, 2.1092f, - -0.4634f, 3.2291f, 3.3717f, 3.7183f, - 0.0901f, 0.3886f, -0.0922f, -1.1829f, - 1.9060f, -8.7228f, -5.5919f, -5.4642f, - 0.2125f, -0.1681f, 0.3767f, -5.9653f, - 4.5684f, 0.5205f, -0.4649f, -2.8002f, - 1.0087f, -4.7453f, -1.7135f, 0.6236f, - -4.0975f, 3.0989f, 3.7884f, -3.0078f, - -7.4785f, -4.8629f, 5.0050f, 1.6473f, - -4.6660f, 3.9258f, 0.6885f, -9.2509f, - -6.3693f, 5.1420f, -4.3946f, -1.4094f, - 4.3917f, 4.4225f, 0.2383f, -8.5391f, - 3.0850f, -8.0277f, 4.5875f, 3.6649f, - 11.6159f, 15.1327f, 9.0448f, 7.9694f, - -1.1705f, 9.7014f, 0.2305f, -3.3610f, - 2.1195f, 5.1060f, -7.2972f, -2.8333f, - 1.5208f, -0.4510f, -3.6906f, -0.5684f, - -7.1756f, -2.2582f, -2.4200f, 3.8082f, - 1.5182f, 6.9508f, 6.7654f, 1.1582f, - 1.4735f, 3.5020f, 6.0723f, 8.8626f, - -3.3340f, 0.1007f, 2.3028f, 5.5202f, - -3.0476f, -3.8494f, 5.4259f, 10.3093f, - 1.2195f, -1.0819f, -3.6514f, -12.8475f, - 6.7971f, 7.2347f, 2.5053f, -2.0263f, - 2.8809f, 3.5069f, -1.8220f, 0.4511f, - 4.6384f, -1.1164f, -5.9159f, -5.1137f, - 0.2896f, -3.1271f, -2.2772f, -3.8561f, - 1.9906f, -2.6068f, 1.6778f, -0.7475f, - 1.6325f, -1.1855f, 3.1499f, 4.9140f, - -4.2298f, -4.1599f, 1.4122f, -8.2593f, - -4.1992f, 0.3220f, 1.0148f, 1.1155f, - -10.0725f, 0.0539f, 0.2930f, -3.3347f, - -2.5810f, -2.4752f, 1.8829f, -2.2701f, - -1.3208f, -1.1970f, 12.7140f, 1.5150f, - -0.8982f, -0.0921f, 4.5338f, 0.8027f, - 1.0017f, 2.1335f, -0.5513f, 5.3882f, - -0.2457f, -3.0283f, -1.8919f, 5.7746f, - -2.0213f, -2.1347f, -1.7599f, 0.3340f, - 5.7553f, -4.6913f, 1.6804f, -7.3915f, - 1.5389f, 3.2468f, 2.4237f, -2.5921f, - 1.3040f, 0.2492f, 6.9277f, -6.1561f, - -6.9638f, 4.9625f, 3.9857f, 3.6889f, - 3.9950f, 0.3810f, -7.4544f, 5.1955f, - -2.1874f, -4.0774f, 1.4863f, 2.7600f, - -1.6673f, -2.7653f, -7.0891f, -0.3532f, - -0.2106f, 8.9759f, -2.0994f, 4.4973f, - -1.9481f, 2.7454f, -3.9753f, 12.9773f, - 0.3607f, 2.7997f, -2.3719f, -4.0297f, - -5.1272f, -5.4413f, -2.2644f, -1.8938f, - 0.1319f, -8.5628f, 3.0773f, -3.3584f, - 10.3160f, 2.4523f, -3.0328f, -1.0118f, - -2.7438f, -0.6207f, -5.7929f, -6.3978f, - -0.1295f, -0.2443f, 0.3800f, 2.1601f, - 2.7023f, 2.0427f, 2.1407f, 1.3633f, - -3.5645f, 0.2107f, -1.7811f, -2.7432f, - -1.3301f, 3.6876f, 0.6120f, 0.3900f, -}; -#endif const Word16 EnvCdbk11_fx[N_CB11 * DIM11] = /*Q8 */ { @@ -26945,43 +16144,6 @@ const Word16 EnvCdbk4th_fx[N_CB4TH * DIM4TH] = /*Q8 */ -341, 944, 157, 100, }; -#ifndef IVAS_FLOAT_FIXED -const float EnvCdbkFB [N_CB_FB * DIM_FB] = -{ - -16.6120f, -9.7056f, -7.3815f, - 12.7223f, -5.3619f, -4.2098f, - 9.6082f, 17.5423f, 19.7838f, - 22.0461f, 24.1701f, 20.8503f, - -96.6904f, -89.9023f, -88.6123f, - 20.9213f, 27.6011f, 27.4229f, - 3.8206f, 7.0540f, 5.3791f, - 15.0749f, 22.8806f, 23.6351f, - 26.7480f, 32.6483f, 31.6408f, - -19.5344f, -13.3342f, -11.0528f, - -27.4315f, -20.0228f, -17.3748f, - -6.7548f, -7.7102f, -9.4666f, - -3.3129f, 6.9621f, 14.9937f, - 15.4388f, 19.6911f, 17.7925f, - 5.2569f, 13.0270f, 15.1931f, - 40.3814f, 47.0644f, 46.7397f, - -10.6760f, -3.9121f, -1.8455f, - -1.9827f, 5.3065f, 7.7240f, - -148.2341f, -141.3109f, -139.3314f, - -179.7394f, -172.2927f, -172.7284f, - 17.6754f, 17.9788f, -4.8806f, - -0.9671f, 3.3663f, 2.9027f, - 11.3567f, 15.3245f, 13.9899f, - 1.5588f, 8.5468f, 10.5230f, - -7.7918f, -0.8556f, 1.6643f, - -5.4487f, 2.0822f, 4.7052f, - -23.9540f, -16.9712f, -14.6548f, - -34.0472f, -27.2912f, -24.7197f, - -2.8087f, 0.4624f, -3.6887f, - -14.1611f, -7.1801f, -4.6916f, - 32.8420f, 38.8016f, 38.3823f, - 7.4425f, 11.3804f, 9.7292f -}; -#endif const Word16 EnvCdbkFB_fx[N_CB_FB * DIM_FB] = /*Q7 */ { @@ -27031,212 +16193,6 @@ const Word16 Mean_env_fx[SWB_FENV] = /*Q8 */ 7327, 7414, 7181, 7160, 6889, 6866, 6746, 6651, 6385, 6152, 5873, 5668, 5435, 5222, }; -#ifndef IVAS_FLOAT_FIXED -const float w_NOR[SWB_FENV] = {1.f,0.97826087f,0.957446809f,0.9375f,0.918367347f,0.9f,0.882352941f,0.865384615f,0.849056604f,0.833333333f,0.818181818f,0.803571429f,0.789473684f,0.775862069f}; -const float Mean_env_fb[DIM_FB] = {13.75f, 6.29f, 3.70f}; -const float Mean_env[SWB_FENV] = {28.62f, 28.96f, 28.05f, 27.97f, 26.91f, 26.82f, 26.35f, 25.98f, 24.94f, 24.03f, 22.94f, 22.14f, 21.23f, 20.40f}; -const float Env_TR_Cdbk1 [N_CB_TR1 * DIM_TR1] = -{ - 0.8936f, -9.1696f, - 32.0275f, 30.1795f, - -1.2201f, 6.6391f, - 38.5962f, 23.2366f, - 34.9278f, 32.6481f, - 15.0969f, 12.8381f, - 9.3963f, 3.1078f, - 14.3113f, 5.5971f, - 11.9502f, 8.6515f, - 2.4150f, 3.4154f, - -21.4020f, -18.1087f, - 8.7368f, 9.8116f, - 16.6597f, 9.4849f, - 25.7150f, 8.0681f, - 17.7652f, 25.6994f, - 44.2378f, 28.6702f, - 41.3199f, 36.1883f, - 33.1667f, 25.2245f, - -5.3921f, -9.7030f, - 13.1902f, 19.8007f, - 28.8781f, 20.0006f, - 18.7409f, 17.3426f, - 21.5070f, 29.7424f, - -13.1680f, -15.5559f, - 10.9594f, 11.5574f, - 8.7570f, 13.8680f, - 5.2123f, 11.9711f, - 8.0290f, -5.2743f, - 3.1843f, 21.5110f, - 19.2978f, 5.6924f, - -7.6163f, -4.0852f, - 2.5510f, -4.4247f, - 3.4072f, -14.1479f, - -6.8577f, 0.9589f, - 22.6250f, 21.6469f, - 15.9534f, 30.0623f, - 17.8474f, 20.3281f, - -3.1654f, -6.0729f, - 39.5602f, 40.5625f, - 44.3017f, 45.7556f, - 24.8628f, 19.5166f, - 33.7547f, 41.1213f, - 23.1020f, 13.1469f, - 17.6623f, 12.7562f, - 20.3773f, 11.0551f, - 31.6668f, 35.0770f, - 15.4383f, 22.8811f, - 22.8419f, 35.1167f, - 25.0950f, 23.1698f, - 20.2523f, 14.9332f, - 24.8694f, 27.0211f, - 13.8576f, 10.4789f, - 6.3835f, 8.1955f, - 10.6597f, -0.3484f, - 27.2026f, 29.9373f, - 12.4182f, 13.9096f, - 24.9543f, 16.3771f, - 15.7197f, 18.8608f, - -1.4782f, 1.6952f, - 36.4783f, 37.1348f, - 29.6594f, 13.6072f, - -26.6995f, -24.6742f, - 20.3405f, 19.6463f, - 44.2412f, 40.9698f, - 28.9498f, 23.7751f, - 39.3428f, 32.2458f, - -23.8252f, -22.0790f, - 27.6318f, 33.9910f, - -47.7664f, -44.4696f, - -44.8104f, -41.2774f, - -50.8776f, -47.8616f, - -50.3099f, -44.0979f, - -54.5008f, -51.0234f, - -63.3373f, -60.1146f, - -45.5444f, -42.1435f, - -48.2447f, -44.8312f, - -49.9558f, -46.6690f, - -59.1385f, -55.6583f, - -44.2409f, -43.8251f, - -46.6791f, -43.3332f, - -46.0956f, -42.6861f, - -92.7279f, -89.3799f, - 49.9817f, 46.4450f, - -14.8152f, -11.2475f, - -106.9255f, -103.4843f, - -46.5934f, -45.0424f, - -47.3033f, -43.9775f, - -80.0456f, -76.6952f, - -56.1359f, -53.1578f, - -49.1835f, -45.8131f, - -54.9042f, -45.8573f, - 36.9949f, 28.4050f, - -43.6866f, -40.3702f, - -52.0047f, -45.5982f, - -47.6930f, -41.4457f, - -52.5989f, -49.8475f, - 30.0399f, 27.7911f, - 10.0141f, 17.5614f, - 21.8223f, 17.7785f, - -3.1767f, -2.1954f, - -17.5132f, -21.5664f, - 6.0779f, 0.3815f, - 0.0063f, 13.5452f, - 5.5074f, 5.2318f, - 15.8166f, 0.6300f, - -17.7247f, -15.7262f, - -38.5381f, -35.6042f, - -6.3132f, -18.4667f, - 9.5978f, 6.4559f, - 2.4632f, 8.4172f, - -70.2432f, -66.7283f, - 10.2658f, 23.7825f, - -42.1539f, -38.8022f, - -48.5397f, -45.1815f, - 16.8840f, 15.6262f, - -6.1500f, 8.4442f, - -31.1246f, -29.6824f, - 5.9496f, 16.3765f, - 21.9557f, 25.5364f, - -9.8102f, -7.7609f, - 48.7145f, 36.0093f, - 34.1627f, 19.4172f, - 14.2249f, 16.2026f, - 19.8782f, 23.2358f, - 1.3653f, -0.3587f, - 27.4538f, 26.1047f, - -9.4912f, -12.5633f, - -15.5232f, -3.4597f -}; - -const float Env_TR_Cdbk2 [N_CB_TR2 * DIM_TR2] = -{ - 10.3071f, 1.4647f, - -1.8782f, 6.6168f, - -9.3764f, -12.9146f, - 0.3372f, -15.6956f, - -5.0830f, 0.1825f, - 2.8660f, 1.1668f, - 3.7385f, -4.0567f, - 8.6094f, 5.8040f, - 1.4099f, -4.4378f, - 10.2655f, -3.2743f, - -7.8499f, 5.0612f, - 1.4560f, 0.4976f, - -2.2400f, 10.1737f, - 2.6910f, -6.0696f, - 6.5484f, -1.4502f, - 5.0708f, 1.0902f, - -3.5214f, 4.2403f, - 6.8248f, -10.6363f, - 0.8362f, -2.5676f, - -2.8563f, -3.5507f, - 6.0370f, -6.4758f, - -1.4405f, -8.6255f, - -4.9844f, 6.8277f, - 4.4568f, -2.0374f, - 0.7265f, -7.3953f, - -4.9226f, -7.8758f, - -1.8669f, -1.9698f, - 5.0262f, 7.3509f, - -0.3770f, -5.4681f, - -5.3582f, -4.5491f, - 3.1235f, -0.5936f, - 1.6121f, -0.9381f, - -0.8137f, -3.3498f, - -0.3523f, -1.5590f, - 1.9211f, 9.8411f, - 3.5654f, 5.3423f, - -1.3437f, 1.1031f, - 1.1914f, 2.0560f, - -0.9800f, 3.3605f, - -4.1634f, 2.2153f, - -10.9385f, -2.6849f, - 0.0040f, 2.6311f, - 0.6873f, 3.4294f, - -2.7967f, -0.5984f, - 2.7559f, 3.2450f, - -4.2294f, -1.6565f, - 1.6359f, 4.6566f, - -0.5137f, 2.2080f, - 2.7641f, -9.3968f, - 2.3449f, -2.5829f, - 6.6876f, 11.5962f, - -7.7096f, 1.4816f, - -2.6264f, 0.8111f, - 0.1002f, 1.1574f, - -7.1116f, -1.9581f, - -2.0027f, 2.4814f, - 1.0402f, 6.7866f, - -0.8642f, 4.8143f, - -13.6639f, 6.3768f, - -1.3155f, -0.2595f, - -2.1558f, -5.5755f, - 5.1910f, 3.3215f, - -2.8061f, -11.5155f, - -0.0134f, 0.0015f -}; - -const float Mean_env_tr[5] = { 27.23f, 23.81f, 23.87f, 19.51f }; -#endif const Word16 Env_TR_Cdbk1_fx[N_CB_TR1 * DIM_TR1] = /*Q8 */ { @@ -27444,9 +16400,6 @@ const Word16 Mean_env_tr_fx[5] = { 6971, 6095, 6111, 4995 }; /*Q8 */ * LR MDCT SWB BWE coding tables *------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float gain_table_SWB_BWE[NB_SWB_SUBBANDS] = {-0.4f, 0.1f, 0.6f, 1.1f}; -#endif const Word16 gain_table_SWB_BWE_fx[NB_SWB_SUBBANDS] = { -6554/*-0.4f*/, 1638/*0.1f*/, 9830/*0.6f*/, 18022/*1.1f*/ }; /* Q14 */ @@ -27502,109 +16455,6 @@ const Word16 subband_search_offsets_16p4kbps_Har[NB_SWB_SUBBANDS_HAR_SEARCH_SB] /*------------------------------------------------------------------------------* * HQ core tables *------------------------------------------------------------------------------*/ -const float wscw16q15[] = -{ - -1.0f, -0.999939f, -0.999878f, -0.999725f, -0.999573f, -0.999359f, -0.999084f, -0.99881f, - -0.998444f, -0.998077f, -0.99765f, -0.997162f, -0.996643f, -0.996094f, -0.995514f, -0.994873f, - -0.994171f, -0.993439f, -0.992676f, -0.991852f, -0.990997f, -0.990112f, -0.989166f, -0.98819f, - -0.987183f, -0.986115f, -0.984985f, -0.983856f, -0.982666f, -0.981415f, -0.980133f, -0.978821f, - -0.977448f, -0.976074f, -0.974609f, -0.973114f, -0.971588f, -0.970032f, -0.968414f, -0.966766f, - -0.965088f, -0.963348f, -0.961548f, -0.959747f, -0.957886f, -0.955994f, -0.954041f, -0.952057f, - -0.950043f, -0.947968f, -0.945862f, -0.943726f, -0.941559f, -0.939331f, -0.937042f, -0.934753f, - -0.932404f, -0.930023f, -0.927582f, -0.92514f, -0.922607f, -0.920074f, -0.91748f, -0.914886f, - -0.912201f, -0.909515f, -0.906769f, -0.903992f, -0.901184f, -0.898315f, -0.895416f, -0.892487f, - -0.889526f, -0.886505f, -0.883453f, -0.880371f, -0.877258f, -0.874084f, -0.87088f, -0.867645f, - -0.86438f, -0.861084f, -0.857727f, -0.85434f, -0.850922f, -0.847473f, -0.843964f, -0.840454f, - -0.836884f, -0.833282f, -0.829651f, -0.825989f, -0.822266f, -0.818512f, -0.814758f, -0.810944f, - -0.807098f, -0.803223f, -0.799286f, -0.795349f, -0.791351f, -0.787354f, -0.783295f, -0.779205f, - -0.775085f, -0.770935f, -0.766754f, -0.762512f, -0.75827f, -0.753998f, -0.749664f, -0.745331f, - -0.740936f, -0.736542f, -0.732086f, -0.727631f, -0.723114f, -0.718567f, -0.71402f, -0.709412f, - 0.704803f, 0.700134f, 0.695435f, 0.690735f, 0.685974f, 0.681213f, 0.676392f, 0.67157f, - 0.666687f, 0.661804f, 0.656891f, 0.651947f, 0.646942f, 0.641937f, 0.636932f, 0.631866f, - 0.62677f, 0.621674f, 0.616516f, 0.611359f, 0.606171f, 0.600952f, 0.595703f, 0.590424f, - 0.585144f, 0.579803f, 0.574463f, 0.569092f, 0.563721f, 0.558289f, 0.552856f, 0.547394f, - 0.541901f, 0.536377f, 0.530853f, 0.525299f, 0.519714f, 0.514099f, 0.508484f, 0.502838f, - 0.497162f, 0.491486f, 0.485748f, 0.480042f, 0.474274f, 0.468506f, 0.462708f, 0.456909f, - 0.45108f, 0.445221f, 0.439362f, 0.433472f, 0.427551f, 0.421631f, 0.41568f, 0.409729f, - 0.403748f, 0.397736f, 0.391724f, 0.385712f, 0.379669f, 0.373596f, 0.367523f, 0.36142f, - 0.355316f, 0.349182f, 0.343048f, 0.336884f, 0.330719f, 0.324524f, 0.318329f, 0.312134f, - 0.305908f, 0.299652f, 0.293427f, 0.28714f, 0.280884f, 0.274597f, 0.26828f, 0.261993f, - 0.255646f, 0.249329f, 0.242981f, 0.236633f, 0.230255f, 0.223877f, 0.217499f, 0.211121f, - 0.204712f, 0.198303f, 0.191895f, 0.185455f, 0.179016f, 0.172577f, 0.166138f, 0.159668f, - 0.153198f, 0.146729f, 0.140259f, 0.133759f, 0.127289f, 0.120789f, 0.114288f, 0.107788f, - 0.101288f, 0.0947571f, 0.0882568f, 0.0817261f, 0.0751953f, 0.0686646f, 0.0621338f, 0.055603f, - 0.0490723f, 0.0425415f, 0.0359802f, 0.0294495f, 0.0229187f, 0.0163574f, 0.00982666f,0.00326538f -}; - -const float wscw16q15_32[160] = -{ - -0.99998795f, -0.99989157f, -0.99969882f, -0.99940971f, -0.99902428f, -0.99854256f, - -0.99796460f, -0.99729046f, -0.99652019f,-0.99565388f, -0.99469160f, -0.99363345f, - -0.99247953f, -0.99122996f, -0.98988485f, -0.98844433f, -0.98690855f, -0.98527764f, - -0.98355177f, -0.98173111f, -0.97981582f, -0.97780610f, -0.97570213f, -0.97350412f, - -0.97121229f, -0.96882685f, -0.96634802f, -0.96377607f, -0.96111122f, -0.95835373f, - -0.95550388f, -0.95256194f, -0.94952818f, -0.94640291f, -0.94318642f, -0.93987902f, - -0.93648104f, -0.93299280f, -0.92941463f, -0.92574689f, -0.92198992f, -0.91814408f, - -0.91420976f, -0.91018732f, -0.90607715f, -0.90187965f, -0.89759523f, -0.89322430f, - -0.88876728f, -0.88422459f, -0.87959669f, -0.87488400f, -0.87008699f, -0.86520612f, - -0.86024186f, -0.85519469f, -0.85006509f, -0.84485357f, -0.83956061f, -0.83418673f, - -0.82873246f, -0.82319831f, -0.81758481f, -0.81189252f, -0.80612197f, -0.80027373f, - -0.79434836f, -0.78834643f, -0.78226851f, -0.77611520f, -0.76988708f, -0.76358476f, - -0.75720885f, -0.75075995f, -0.74423869f, -0.73764570f, -0.73098162f, -0.72424708f, - -0.71744274f, -0.71056925f, 0.70362727f, 0.69661748f, 0.68954054f, 0.68239715f, - 0.67518798f, 0.66791374f, 0.66057513f, 0.65317284f, 0.64570760f, 0.63818013f, - 0.63059115f, 0.62294139f, 0.61523159f, 0.60746249f, 0.59963485f, 0.59174941f, - 0.58380693f, 0.57580819f, 0.56775395f, 0.55964499f, 0.55148209f, 0.54326604f, - 0.53499762f, 0.52667764f, 0.51830690f, 0.50988620f, 0.50141636f, 0.49289819f, - 0.48433252f, 0.47572016f, 0.46706195f, 0.45835873f, 0.44961133f, 0.44082059f, - 0.43198737f, 0.42311251f, 0.41419687f, 0.40524131f, 0.39624670f, 0.38721389f, - 0.37814376f, 0.36903718f, 0.35989504f, 0.35071820f, 0.34150757f, 0.33226402f, - 0.32298845f, 0.31368174f, 0.30434480f, 0.29497853f, 0.28558383f, 0.27616160f, - 0.26671276f, 0.25723821f, 0.24773886f, 0.23821564f, 0.22866946f, 0.21910124f, - 0.20951190f, 0.19990237f, 0.19027357f, 0.18062644f, 0.17096189f, 0.16128086f, - 0.15158430f, 0.14187312f, 0.13214826f, 0.12241068f, 0.11266129f, 0.10290104f, - 0.09313088f, 0.08335174f, 0.07356456f, 0.06377030f, 0.05396989f, 0.04416428f, - 0.03435441f, 0.02454123f, 0.01472568f, 0.00490872f -}; - -const float wscw16q15_16[80] = -{ - -0.99995181f, -0.99956631f, -0.99879546f, -0.99763955f, - -0.99609903f, -0.99417450f, -0.99186670f, -0.98917651f, - -0.98610498f, -0.98265328f, -0.97882275f, -0.97461487f, - -0.97003125f, -0.96507367f, -0.95974404f, -0.95404440f, - -0.94797697f, -0.94154407f, -0.93474818f, -0.92759194f, - -0.92007808f, -0.91220953f, -0.90398929f, -0.89542056f, - -0.88650662f, -0.87725091f, -0.86765701f, -0.85772861f, - -0.84746954f, -0.83688375f, -0.82597533f, -0.81474848f, - -0.80320753f, -0.79135693f, -0.77920124f, -0.76674516f, - -0.75399348f, -0.74095113f, -0.72762312f, -0.71401460f, - 0.70013081f, 0.68597711f, 0.67155895f, 0.65688190f, - 0.64195160f, 0.62677382f, 0.61135441f, 0.59569930f, - 0.57981455f, 0.56370626f, 0.54738066f, 0.53084403f, - 0.51410274f, 0.49716327f, 0.48003212f, 0.46271592f, - 0.44522133f, 0.42755509f, 0.40972403f, 0.39173501f, - 0.37359497f, 0.35531090f, 0.33688985f, 0.31833893f, - 0.29966528f, 0.28087610f, 0.26197864f, 0.24298018f, - 0.22388805f, 0.20470960f, 0.18545224f, 0.16612338f, - 0.14673047f, 0.12728100f, 0.10778246f, 0.08824237f, - 0.06866826f, 0.04906767f, 0.02944817f, 0.00981732f -}; - -const float wscw16q15_8[40] = -{ - -0.999816894531250f, -0.998260498046875f, -0.995178222656250f, -0.990570068359375f, - -0.984436035156250f, -0.976776123046875f, -0.967590332031250f, -0.956939697265625f, - -0.944793701171875f, -0.931213378906250f, -0.916198730468750f, -0.899749755859375f, - -0.881927490234375f, -0.862731933593750f, -0.842224121093750f, -0.820404052734375f, - -0.797332763671875f, -0.773010253906250f, -0.747497558593750f, -0.720855712890625f, - 0.693084716796875f, 0.664245605468750f, 0.634399414062500f, 0.603546142578125f, - 0.571777343750000f, 0.539123535156250f, 0.505645751953125f, 0.471405029296875f, - 0.436401367187500f, 0.400756835937500f, 0.364471435546875f, 0.327636718750000f, - 0.290283203125000f, 0.252502441406250f, 0.214294433593750f, 0.175781250000000f, - 0.137023925781250f, 0.098022460937500f, 0.058868408203125f, 0.019622802734375f, -}; - const Word16 wscw16q15_fx[240] =/*Q15 */ { -32768, -32766, -32764, -32759, -32754, -32747, -32738, -32729, -32717, -32705, -32691, @@ -27671,29 +16521,6 @@ const Word16 wscw16q15_32_fx[160] =/*Q15 */ }; /* Codebook for quantization of norms */ -const float dicn[40] = -{ - 131072.0f, 92681.900024f, - 65536.0f, 46340.950012f, - 32768.0f, 23170.475006f, - 16384.0f, 11585.237503f, - 8192.0f, 5792.618751f, - 4096.0f, 2896.309376f, - 2048.0f, 1448.154688f, - 1024.0f, 724.077344f, - 512.0f, 362.038672f, - 256.0f, 181.019336f, - 128.0f, 90.509668f, - 64.0f, 45.254834f, - 32.0f, 22.627417f, - 16.0f, 11.313708f, - 8.0f, 5.656854f, - 4.0f, 2.828427f, - 2.0f, 1.414214f, - 1.0f, 0.707107f, - 0.5f, 0.353553f, - 0.25f, 0.176777f -}; const Word32 dicn_fx[40] = /* Q=14 */ { 2147483647, 1518500224, @@ -27717,57 +16544,7 @@ const Word32 dicn_fx[40] = /* Q=14 */ 8192, 5793, 4096, 2896 }; -const float dicn_inv[40]= /* Inversion of the codebook for quantization of norms */ -{ - 0.00000762939453f, 0.00001078959322f, - 0.00001525878906f, 0.00002157918644f, - 0.00003051757813f, 0.00004315837288f, - 0.00006103515625f, 0.00008631674575f, - 0.0001220703125f, 0.00017263349151f, - 0.000244140625f, 0.00034526698297f, - 0.00048828125f, 0.00069053396594f, - 0.0009765625f, 0.00138106793188f, - 0.001953125f, 0.00276213586376f, - 0.00390625f, 0.00552427172752f, - 0.0078125f, 0.01104854345505f, - 0.015625f, 0.02209708691010f, - 0.03125f, 0.04419417382019f, - 0.0625f, 0.08838835154664f, - 0.125f, 0.17677670309327f, - 0.25f, 0.35355340618655f, - 0.5f, 0.70710656237316f, - 1.0f, 1.41421312474633f, - 2.0f, 2.82843024949583f, - 4.0f, 5.65684449900157f -}; - -/* Codebook for quantization of peak gain */ -const float dicn_pg[45] = -{ - 131072.0000000f, 110217.9749401f, - 92681.9000237f, 77935.8774888f, - 65536.0000000f, 55108.9874701f, - 46340.9500118f, 38967.9387444f, - 32768.0000000f, 27554.4937350f, - 23170.4750059f, 16384.0000000f, - 11585.2375030f, 8192.0000000f, - 5792.6187515f, 4096.0000000f, - 2896.3093757f, 2048.0000000f, - 1448.1546879f, 1024.0000000f, - 724.0773439f, 512.0000000f, - 362.0386720f, 256.0000000f, - 181.0193360f, 128.0000000f, - 90.5096680f, 64.0000000f, - 45.2548340f, 32.0000000f, - 22.6274170f, 16.0000000f, - 11.3137085f, 8.0000000f, - 5.6568542f, 4.0000000f, - 2.8284271f, 2.0000000f, - 1.4142136f, 1.0000000f, - 0.7071070f, 0.5000000f, - 0.3535530f, 0.2500000f, - 0.176777f -}; + const Word32 dicn_pg_fx[45] = /* Q12 */ { 536870912, 451452834, 379625056, 319225344, 268435456, @@ -27941,10 +16718,6 @@ const Word16 band_end_harm[SFM_N_HARM_FB] =//Q0 144, 160, 176, 192, 208, 224, 256, 288, 320, 368, 416, 464, 512, 576, 640, 704, 800 }; - -const float rat_flt[SFM_N_WB] = {1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, 1.5f, - 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.8f, 0.8f - }; const Word16 rat_fx[SFM_N_WB] = { 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 24576, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 13107, 13107 };//Q14 @@ -27972,562 +16745,6 @@ const Word32 SQRT_DIM_fx[65] = /* sqrt(x) for x = 0, 1, ..., 64. in Q15 */ * HQ core tables for SWB signals *------------------------------------------------------------------------------*/ -const float window_8_16_32kHz[370] = -{ - 0.00009609f, 0.00028765f, 0.00058708f, 0.00099202f, 0.00150079f, 0.00211209f, 0.00282484f, 0.00363808f, - 0.00455097f, 0.00556272f, 0.00667261f, 0.00787994f, 0.00918405f, 0.01058429f, 0.01208004f, 0.01367067f, - 0.01535558f, 0.01713416f, 0.01900581f, 0.02096992f, 0.02302588f, 0.02517309f, 0.02741093f, 0.02973879f, - 0.03215604f, 0.03466206f, 0.03725620f, 0.03993782f, 0.04270627f, 0.04556089f, 0.04850099f, 0.05152591f, - 0.05463496f, 0.05782743f, 0.06110262f, 0.06445980f, 0.06789825f, 0.07141723f, 0.07501599f, 0.07869376f, - 0.08244978f, 0.08628326f, 0.09019341f, 0.09417944f, 0.09824051f, 0.10237582f, 0.10658453f, 0.11086578f, - 0.11521874f, 0.11964252f, 0.12413626f, 0.12869907f, 0.13333005f, 0.13802829f, 0.14279289f, 0.14762290f, - 0.15251740f, 0.15747544f, 0.16249607f, 0.16757831f, 0.17272120f, 0.17792375f, 0.18318496f, 0.18850384f, - 0.19387938f, 0.19931055f, 0.20479633f, 0.21033568f, 0.21592756f, 0.22157091f, 0.22726467f, 0.23300778f, - 0.23879915f, 0.24463771f, 0.25052236f, 0.25645201f, 0.26242554f, 0.26844185f, 0.27449982f, 0.28059832f, - 0.28673623f, 0.29291240f, 0.29912569f, 0.30537495f, 0.31165902f, 0.31797676f, 0.32432698f, 0.33070852f, - 0.33712021f, 0.34326770f, 0.34902538f, 0.35469475f, 0.36039689f, 0.36612343f, 0.37187036f, 0.37763517f, - 0.38341599f, 0.38921132f, 0.39501987f, 0.40084050f, 0.40667214f, 0.41251382f, 0.41836457f, 0.42422351f, - 0.43008975f, 0.43596242f, 0.44184069f, 0.44772373f, 0.45361072f, 0.45950085f, 0.46539332f, 0.47128734f, - 0.47718210f, 0.48307684f, 0.48897077f, 0.49486311f, 0.50075309f, 0.50663994f, 0.51252290f, 0.51840120f, - 0.52427408f, 0.53014079f, 0.53600058f, 0.54185268f, 0.54769636f, 0.55353086f, 0.55935545f, 0.56516939f, - 0.57097193f, 0.57676236f, 0.58253993f, 0.58830393f, 0.59405363f, 0.59978832f, 0.60550728f, 0.61120980f, - 0.61689518f, 0.62256271f, 0.62821170f, 0.63384146f, 0.63945131f, 0.64504055f, 0.65060852f, 0.65615454f, - 0.66167795f, 0.66717809f, 0.67265431f, 0.67810596f, 0.68353240f, 0.68893300f, 0.69430713f, 0.69965417f, - 0.70497350f, 0.71026452f, 0.71552664f, 0.72075927f, 0.72596181f, 0.73113370f, 0.73627436f, 0.74053370f, - 0.74223132f, 0.74645982f, 0.75150351f, 0.75651380f, 0.76149018f, 0.76643212f, 0.77133911f, 0.77621068f, - 0.78104633f, 0.78584558f, 0.79060798f, 0.79533307f, 0.80002041f, 0.80466956f, 0.80928010f, 0.81385162f, - 0.81838372f, 0.82287601f, 0.82732812f, 0.83173967f, 0.83611032f, 0.84043971f, 0.84472753f, 0.84897345f, - 0.85317717f, 0.85733839f, 0.86145684f, 0.86553224f, 0.86956435f, 0.87355292f, 0.87749772f, 0.88139855f, - 0.88525520f, 0.88906748f, 0.89283524f, 0.89655830f, 0.90023654f, 0.90386982f, 0.90745805f, 0.91100112f, - 0.91449896f, 0.91795152f, 0.92135875f, 0.92472064f, 0.92803719f, 0.93130842f, 0.93453436f, 0.93771509f, - 0.94085071f, 0.94394132f, 0.94698708f, 0.94998816f, 0.95294479f, 0.95585723f, 0.95872577f, 0.96155077f, - 0.96433265f, 0.96707190f, 0.96976909f, 0.97242491f, 0.97504018f, 0.97761590f, 0.98015330f, 0.98265393f, - 0.98511982f, 0.98755371f, 0.98995949f, 0.99234319f, 0.99471536f, 0.99709994f, 0.99708681f, 0.99466528f, - 0.99222861f, 0.98975303f, 0.98722813f, 0.98464802f, 0.98200891f, 0.97930819f, 0.97654393f, 0.97371465f, - 0.97081921f, 0.96785667f, 0.96482628f, 0.96172739f, 0.95855948f, 0.95532207f, 0.95201479f, 0.94863729f, - 0.94518926f, 0.94167046f, 0.93808064f, 0.93441963f, 0.93068723f, 0.92688329f, 0.92300768f, 0.91906029f, - 0.91504101f, 0.91094975f, 0.90678646f, 0.90255106f, 0.89824351f, 0.89386377f, 0.88941182f, 0.88488765f, - 0.88029124f, 0.87562260f, 0.87088175f, 0.86606871f, 0.86118350f, 0.85622616f, 0.85119674f, 0.84609529f, - 0.84092187f, 0.83567654f, 0.83035938f, 0.82497048f, 0.81950991f, 0.81397777f, 0.80837415f, 0.80269917f, - 0.79695293f, 0.79113554f, 0.78524714f, 0.77928784f, 0.77325776f, 0.76715706f, 0.76098587f, 0.75474432f, - 0.74843257f, 0.74205077f, 0.73559908f, 0.72907763f, 0.72248661f, 0.71582617f, 0.70909647f, 0.70229768f, - 0.69542998f, 0.68849352f, 0.68148847f, 0.67559894f, 0.67322974f, 0.66727332f, 0.66006356f, 0.65278589f, - 0.64544049f, 0.63802752f, 0.63054716f, 0.62299955f, 0.61538487f, 0.60770327f, 0.59995491f, 0.59213992f, - 0.58425845f, 0.57631064f, 0.56829662f, 0.56021651f, 0.55207043f, 0.54385849f, 0.53558078f, 0.52723738f, - 0.51882839f, 0.51035385f, 0.50181382f, 0.49320834f, 0.48453743f, 0.47580109f, 0.46699931f, 0.45813206f, - 0.44919928f, 0.44020091f, 0.43113683f, 0.42200694f, 0.41281107f, 0.40354904f, 0.39422063f, 0.38482561f, - 0.37536367f, 0.36583448f, 0.35623768f, 0.34657285f, 0.33683949f, 0.32703708f, 0.31716502f, 0.30722265f, - 0.29720921f, 0.28712387f, 0.27696571f, 0.26673368f, 0.25642665f, 0.24604332f, 0.23558226f, 0.22504184f, - 0.21442026f, 0.20371546f, 0.19292514f, 0.18204665f, 0.17107697f, 0.16001264f, 0.14884960f, 0.13758311f, - 0.12620753f, 0.11471608f, 0.10310041f, 0.09135008f, 0.07945161f, 0.06738693f, 0.05513058f, 0.04264380f, - 0.02985996f, 0.01663146f -}; -const float window_256kHz_flt[592] = /*ALDO at 25.6 maybe not needed ?*/ -{ - 0.00002505f, 0.00009623f, 0.00021144f, 0.00036963f, 0.00057004f, 0.00081212f, 0.00109541f, 0.00141951f, - 0.00178408f, 0.00218883f, 0.00263346f, 0.00311775f, 0.00364144f, 0.00420431f, 0.00480616f, 0.00544680f, - 0.00612602f, 0.00684364f, 0.00759949f, 0.00839340f, 0.00922518f, 0.01009468f, 0.01100174f, 0.01194618f, - 0.01292786f, 0.01394661f, 0.01500228f, 0.01609471f, 0.01722376f, 0.01838925f, 0.01959105f, 0.02082899f, - 0.02210292f, 0.02341269f, 0.02475814f, 0.02613912f, 0.02755547f, 0.02900704f, 0.03049367f, 0.03201520f, - 0.03357147f, 0.03516233f, 0.03678761f, 0.03844715f, 0.04014078f, 0.04186836f, 0.04362970f, 0.04542464f, - 0.04725302f, 0.04911467f, 0.05100942f, 0.05293708f, 0.05489750f, 0.05689050f, 0.05891590f, 0.06097352f, - 0.06306319f, 0.06518472f, 0.06733794f, 0.06952266f, 0.07173869f, 0.07398585f, 0.07626395f, 0.07857281f, - 0.08091223f, 0.08328201f, 0.08568197f, 0.08811192f, 0.09057164f, 0.09306095f, 0.09557964f, 0.09812751f, - 0.10070437f, 0.10330999f, 0.10594419f, 0.10860674f, 0.11129745f, 0.11401609f, 0.11676246f, 0.11953635f, - 0.12233753f, 0.12516579f, 0.12802091f, 0.13090267f, 0.13381086f, 0.13674524f, 0.13970559f, 0.14269169f, - 0.14570330f, 0.14874021f, 0.15180217f, 0.15488896f, 0.15800034f, 0.16113609f, 0.16429595f, 0.16747970f, - 0.17068710f, 0.17391790f, 0.17717186f, 0.18044875f, 0.18374831f, 0.18707031f, 0.19041448f, 0.19378059f, - 0.19716839f, 0.20057763f, 0.20400804f, 0.20745938f, 0.21093140f, 0.21442384f, 0.21793644f, 0.22146894f, - 0.22502109f, 0.22859261f, 0.23218326f, 0.23579277f, 0.23942087f, 0.24306730f, 0.24673180f, 0.25041408f, - 0.25411390f, 0.25783097f, 0.26156503f, 0.26531581f, 0.26908303f, 0.27286642f, 0.27666570f, 0.28048060f, - 0.28431085f, 0.28815616f, 0.29201627f, 0.29589088f, 0.29977972f, 0.30368251f, 0.30759896f, 0.31152881f, - 0.31547175f, 0.31942751f, 0.32339581f, 0.32737635f, 0.33136886f, 0.33537304f, 0.33938861f, 0.34341527f, - 0.34689352f, 0.35040979f, 0.35394433f, 0.35749191f, 0.36105010f, 0.36461744f, 0.36819295f, 0.37177588f, - 0.37536568f, 0.37896184f, 0.38256397f, 0.38617170f, 0.38978470f, 0.39340267f, 0.39702533f, 0.40065241f, - 0.40428366f, 0.40791884f, 0.41155771f, 0.41520004f, 0.41884562f, 0.42249422f, 0.42614564f, 0.42979966f, - 0.43345608f, 0.43711469f, 0.44077529f, 0.44443769f, 0.44810168f, 0.45176708f, 0.45543368f, 0.45910129f, - 0.46276972f, 0.46643878f, 0.47010827f, 0.47377802f, 0.47744783f, 0.48111751f, 0.48478688f, 0.48845574f, - 0.49212392f, 0.49579124f, 0.49945749f, 0.50312250f, 0.50678610f, 0.51044808f, 0.51410828f, 0.51776651f, - 0.52142258f, 0.52507633f, 0.52872755f, 0.53237609f, 0.53602175f, 0.53966436f, 0.54330374f, 0.54693971f, - 0.55057209f, 0.55420071f, 0.55782539f, 0.56144595f, 0.56506222f, 0.56867402f, 0.57228118f, 0.57588352f, - 0.57948087f, 0.58307305f, 0.58665990f, 0.59024124f, 0.59381690f, 0.59738672f, 0.60095051f, 0.60450811f, - 0.60805935f, 0.61160407f, 0.61514209f, 0.61867325f, 0.62219738f, 0.62571432f, 0.62922390f, 0.63272595f, - 0.63622033f, 0.63970685f, 0.64318537f, 0.64665571f, 0.65011773f, 0.65357125f, 0.65701613f, 0.66045220f, - 0.66387931f, 0.66729730f, 0.67070601f, 0.67410530f, 0.67749501f, 0.68087499f, 0.68424508f, 0.68760514f, - 0.69095502f, 0.69429456f, 0.69762363f, 0.70094207f, 0.70424975f, 0.70754651f, 0.71083222f, 0.71410673f, - 0.71736991f, 0.72062160f, 0.72386169f, 0.72709002f, 0.73030646f, 0.73351088f, 0.73670315f, 0.73988313f, - 0.74305069f, 0.74620570f, 0.74934804f, 0.75247757f, 0.75559418f, 0.75869773f, 0.76178811f, 0.76486519f, - 0.76792885f, 0.77097898f, 0.77401546f, 0.77703816f, 0.78004699f, 0.78304181f, 0.78602253f, 0.78898904f, - 0.79194121f, 0.79487896f, 0.79780216f, 0.80071072f, 0.80360454f, 0.80648352f, 0.80934755f, 0.81219653f, - 0.81503038f, 0.81784900f, 0.82065230f, 0.82344018f, 0.82621255f, 0.82896934f, 0.83171045f, 0.83443579f, - 0.83714529f, 0.83983887f, 0.84251645f, 0.84517794f, 0.84782328f, 0.85045240f, 0.85306521f, 0.85566165f, - 0.85824166f, 0.86080517f, 0.86335210f, 0.86588241f, 0.86839603f, 0.87089291f, 0.87337298f, 0.87583620f, - 0.87828250f, 0.88071185f, 0.88312419f, 0.88551948f, 0.88789767f, 0.89025873f, 0.89260261f, 0.89492928f, - 0.89723869f, 0.89953083f, 0.90180566f, 0.90406314f, 0.90630327f, 0.90852600f, 0.91073133f, 0.91291923f, - 0.91508969f, 0.91724270f, 0.91937824f, 0.92149632f, 0.92359691f, 0.92568004f, 0.92774569f, 0.92979387f, - 0.93182459f, 0.93383786f, 0.93583369f, 0.93781212f, 0.93977315f, 0.94171681f, 0.94364315f, 0.94555218f, - 0.94744396f, 0.94931853f, 0.95117594f, 0.95301624f, 0.95483951f, 0.95664580f, 0.95843521f, 0.96020781f, - 0.96196370f, 0.96370298f, 0.96542577f, 0.96713221f, 0.96882242f, 0.97049658f, 0.97215486f, 0.97379745f, - 0.97542459f, 0.97703653f, 0.97863356f, 0.98021601f, 0.98178428f, 0.98333882f, 0.98488019f, 0.98640904f, - 0.98792619f, 0.98943268f, 0.99092986f, 0.99241955f, 0.99390438f, 0.99538840f, 0.99687865f, 0.99839048f, - 0.99839048f, 0.99687316f, 0.99536647f, 0.99385512f, 0.99233208f, 0.99079337f, 0.98923638f, 0.98765934f, - 0.98606092f, 0.98444012f, 0.98279615f, 0.98112838f, 0.97943628f, 0.97771944f, 0.97597747f, 0.97421006f, - 0.97241695f, 0.97059790f, 0.96875269f, 0.96688116f, 0.96498313f, 0.96305846f, 0.96110701f, 0.95912868f, - 0.95712335f, 0.95509092f, 0.95303131f, 0.95094444f, 0.94883023f, 0.94668862f, 0.94451953f, 0.94232293f, - 0.94009875f, 0.93784694f, 0.93556747f, 0.93326028f, 0.93092535f, 0.92856264f, 0.92617212f, 0.92375376f, - 0.92130753f, 0.91883342f, 0.91633139f, 0.91380144f, 0.91124353f, 0.90865767f, 0.90604383f, 0.90340200f, - 0.90073218f, 0.89803436f, 0.89530852f, 0.89255467f, 0.88977280f, 0.88696291f, 0.88412500f, 0.88125907f, - 0.87836512f, 0.87544316f, 0.87249319f, 0.86951521f, 0.86650924f, 0.86347528f, 0.86041334f, 0.85732343f, - 0.85420557f, 0.85105976f, 0.84788602f, 0.84468436f, 0.84145481f, 0.83819737f, 0.83491207f, 0.83159893f, - 0.82825795f, 0.82488917f, 0.82149260f, 0.81806828f, 0.81461621f, 0.81113643f, 0.80762895f, 0.80409381f, - 0.80053104f, 0.79694065f, 0.79332267f, 0.78967714f, 0.78600409f, 0.78230354f, 0.77857552f, 0.77482007f, - 0.77103722f, 0.76722699f, 0.76338943f, 0.75952457f, 0.75563243f, 0.75171306f, 0.74776649f, 0.74379276f, - 0.73979190f, 0.73576394f, 0.73170893f, 0.72762691f, 0.72351790f, 0.71938195f, 0.71521909f, 0.71102937f, - 0.70681283f, 0.70256949f, 0.69829940f, 0.69400260f, 0.68967913f, 0.68532903f, 0.68095233f, 0.67654908f, - 0.67211932f, 0.66766308f, 0.66318040f, 0.65867133f, 0.65413589f, 0.64957414f, 0.64498610f, 0.64037182f, - 0.63573134f, 0.63106468f, 0.62637190f, 0.62165301f, 0.61690807f, 0.61213710f, 0.60734015f, 0.60251723f, - 0.59766840f, 0.59279367f, 0.58789308f, 0.58296667f, 0.57801446f, 0.57303647f, 0.56803275f, 0.56300331f, - 0.55794818f, 0.55286738f, 0.54776094f, 0.54262888f, 0.53747121f, 0.53228796f, 0.52707914f, 0.52184477f, - 0.51658486f, 0.51129942f, 0.50598845f, 0.50065198f, 0.49528999f, 0.48990250f, 0.48448950f, 0.47905099f, - 0.47358696f, 0.46809741f, 0.46258232f, 0.45704168f, 0.45147548f, 0.44588369f, 0.44026628f, 0.43462323f, - 0.42895451f, 0.42326008f, 0.41753990f, 0.41179392f, 0.40602210f, 0.40022438f, 0.39440070f, 0.38855100f, - 0.38267520f, 0.37677323f, 0.37084500f, 0.36489043f, 0.35890941f, 0.35290185f, 0.34686763f, 0.34080663f, - 0.33471872f, 0.32860376f, 0.32246161f, 0.31629211f, 0.31009508f, 0.30387035f, 0.29761773f, 0.29133699f, - 0.28502794f, 0.27869032f, 0.27232389f, 0.26592837f, 0.25950348f, 0.25304891f, 0.24656432f, 0.24004937f, - 0.23350366f, 0.22692680f, 0.22031833f, 0.21367779f, 0.20700468f, 0.20029842f, 0.19355844f, 0.18678407f, - 0.17997463f, 0.17312933f, 0.16624735f, 0.15932777f, 0.15236958f, 0.14537166f, 0.13833277f, 0.13125154f, - 0.12412643f, 0.11695568f, 0.10973731f, 0.10246907f, 0.09514831f, 0.08777196f, 0.08033640f, 0.07283723f, - 0.06526908f, 0.05762520f, 0.04989688f, 0.04207239f, 0.03413516f, 0.02605991f, 0.01780324f, 0.00927214f -}; - -const float small_overlap_48_flt[R2_48/7]= -{ - 0.01308960f, 0.03925982f, 0.06540313f, 0.09150162f, 0.11753740f, 0.14349262f, 0.16934950f, 0.19509032f, - 0.22069744f, 0.24615329f, 0.27144045f, 0.29654157f, 0.32143947f, 0.34611706f, 0.37055744f, 0.39474386f, - 0.41865974f, 0.44228869f, 0.46561452f, 0.48862124f, 0.51129309f, 0.53361452f, 0.55557023f, 0.57714519f, - 0.59832460f, 0.61909395f, 0.63943900f, 0.65934582f, 0.67880075f, 0.69779046f, 0.71630194f, 0.73432251f, - 0.75183981f, 0.76884183f, 0.78531693f, 0.80125381f, 0.81664156f, 0.83146961f, 0.84572782f, 0.85940641f, - 0.87249601f, 0.88498764f, 0.89687274f, 0.90814317f, 0.91879121f, 0.92880955f, 0.93819134f, 0.94693013f, - 0.95501994f, 0.96245524f, 0.96923091f, 0.97534232f, 0.98078528f, 0.98555606f, 0.98965139f, 0.99306846f, - 0.99580493f, 0.99785892f, 0.99922904f, 0.99991433f -}; - -const float small_overlap_25_flt[R2_25/7]= -{ - 0.02454123f, 0.07356456f, 0.12241068f, 0.17096189f, 0.21910124f, 0.26671276f, 0.31368174f, 0.35989504f, - 0.40524131f, 0.44961133f, 0.49289819f, 0.53499762f, 0.57580819f, 0.61523159f, 0.65317284f, 0.68954054f, - 0.72424708f, 0.75720885f, 0.78834643f, 0.81758481f, 0.84485357f, 0.87008699f, 0.89322430f, 0.91420976f, - 0.93299280f, 0.94952818f, 0.96377607f, 0.97570213f, 0.98527764f, 0.99247953f, 0.99729046f, 0.99969882f -}; - -const float small_overlap_int_flt[R2_16/7]= -{ - 0.07845910f, 0.15643447f, - 0.23344536f, 0.30901699f, 0.38268343f, 0.45399050f, 0.52249856f, 0.58778525f, 0.64944805f, 0.69778617f, - 0.71630612f, 0.76040597f, 0.80901699f, 0.85264016f, 0.89100652f, 0.92387953f, 0.95105652f, 0.97236992f, - 0.98768834f, 0.99691733f -}; - - -const float half_overlap_48_flt[3*R2_48/7]= -{ - 0.00436331f, 0.01308960f, - 0.02181489f, 0.03053851f, 0.03925982f, 0.04797813f, 0.05669279f, 0.06540313f, 0.07410849f, 0.08280821f, - 0.09150162f, 0.10018806f, 0.10886687f, 0.11753740f, 0.12619897f, 0.13485093f, 0.14349262f, 0.15212339f, - 0.16074257f, 0.16934950f, 0.17794355f, 0.18652404f, 0.19509032f, 0.20364175f, 0.21217767f, 0.22069744f, - 0.22920039f, 0.23768589f, 0.24615329f, 0.25460195f, 0.26303121f, 0.27144045f, 0.27982901f, 0.28819627f, - 0.29654157f, 0.30486430f, 0.31316381f, 0.32143947f, 0.32969065f, 0.33791672f, 0.34611706f, 0.35429104f, - 0.36243804f, 0.37055744f, 0.37864862f, 0.38671096f, 0.39474386f, 0.40274669f, 0.41071885f, 0.41865974f, - 0.42656874f, 0.43444526f, 0.44228869f, 0.45009844f, 0.45787392f, 0.46561452f, 0.47331967f, 0.48098877f, - 0.48862124f, 0.49621650f, 0.50377398f, 0.51129309f, 0.51877326f, 0.52621392f, 0.53361452f, 0.54097447f, - 0.54829323f, 0.55557023f, 0.56280493f, 0.56999676f, 0.57714519f, 0.58424967f, 0.59130965f, 0.59832460f, - 0.60529399f, 0.61221728f, 0.61909395f, 0.62592347f, 0.63270533f, 0.63943900f, 0.64612398f, 0.65275975f, - 0.65934582f, 0.66588167f, 0.67236681f, 0.67880075f, 0.68518299f, 0.69151306f, 0.69779046f, 0.70401472f, - 0.71018538f, 0.71630194f, 0.72236396f, 0.72837097f, 0.73432251f, 0.74021813f, 0.74605738f, 0.75183981f, - 0.75756498f, 0.76323247f, 0.76884183f, 0.77439264f, 0.77988448f, 0.78531693f, 0.79068957f, 0.79600200f, - 0.80125381f, 0.80644460f, 0.81157398f, 0.81664156f, 0.82164694f, 0.82658975f, 0.83146961f, 0.83628616f, - 0.84103901f, 0.84572782f, 0.85035222f, 0.85491187f, 0.85940641f, 0.86383551f, 0.86819881f, 0.87249601f, - 0.87672676f, 0.88089074f, 0.88498764f, 0.88901714f, 0.89297894f, 0.89687274f, 0.90069824f, 0.90445515f, - 0.90814317f, 0.91176204f, 0.91531148f, 0.91879121f, 0.92220097f, 0.92554050f, 0.92880955f, 0.93200787f, - 0.93513521f, 0.93819134f, 0.94117602f, 0.94408902f, 0.94693013f, 0.94969913f, 0.95239580f, 0.95501994f, - 0.95757136f, 0.96004985f, 0.96245524f, 0.96478732f, 0.96704594f, 0.96923091f, 0.97134207f, 0.97337926f, - 0.97534232f, 0.97723111f, 0.97904547f, 0.98078528f, 0.98245040f, 0.98404070f, 0.98555606f, 0.98699637f, - 0.98836151f, 0.98965139f, 0.99086590f, 0.99200495f, 0.99306846f, 0.99405634f, 0.99496852f, 0.99580493f, - 0.99656550f, 0.99725019f, 0.99785892f, 0.99839167f, 0.99884839f, 0.99922904f, 0.99953359f, 0.99976203f, - 0.99991433f, 0.99999048f -}; - -const float half_overlap_25_flt[3*R2_25/7]= -{ - 0.00818114f, 0.02454123f, 0.04089475f, 0.05723732f, 0.07356456f, 0.08987211f, 0.10615561f, 0.12241068f, - 0.13863297f, 0.15481816f, 0.17096189f, 0.18705985f, 0.20310773f, 0.21910124f, 0.23503609f, 0.25090801f, - 0.26671276f, 0.28244610f, 0.29810383f, 0.31368174f, 0.32917568f, 0.34458148f, 0.35989504f, 0.37511224f, - 0.39022901f, 0.40524131f, 0.42014512f, 0.43493645f, 0.44961133f, 0.46416584f, 0.47859608f, 0.49289819f, - 0.50706834f, 0.52110274f, 0.53499762f, 0.54874927f, 0.56235401f, 0.57580819f, 0.58910822f, 0.60225052f, - 0.61523159f, 0.62804795f, 0.64069616f, 0.65317284f, 0.66547466f, 0.67759830f, 0.68954054f, 0.70129818f, - 0.71286806f, 0.72424708f, 0.73543221f, 0.74642045f, 0.75720885f, 0.76779452f, 0.77817464f, 0.78834643f, - 0.79830715f, 0.80805415f, 0.81758481f, 0.82689659f, 0.83598698f, 0.84485357f, 0.85349396f, 0.86190585f, - 0.87008699f, 0.87803519f, 0.88574831f, 0.89322430f, 0.90046115f, 0.90745693f, 0.91420976f, 0.92071783f, - 0.92697940f, 0.93299280f, 0.93875641f, 0.94426870f, 0.94952818f, 0.95453345f, 0.95928317f, 0.96377607f, - 0.96801094f, 0.97198664f, 0.97570213f, 0.97915640f, 0.98234852f, 0.98527764f, 0.98794298f, 0.99034383f, - 0.99247953f, 0.99434953f, 0.99595331f, 0.99729046f, 0.99836060f, 0.99916346f, 0.99969882f, 0.99996653f, -}; - -const float half_overlap_int_flt[3*R2_16/7]= -{ - 0.02617695f, 0.05233596f, 0.07845910f, 0.10452846f, 0.13052619f, 0.15643447f, - 0.18223553f, 0.20791169f, 0.23344536f, 0.25881905f, 0.28401534f, 0.30901699f, 0.33380686f, 0.35836795f, - 0.38268343f, 0.40673664f, 0.43051110f, 0.45399050f, 0.47715876f, 0.50000000f, 0.52249856f, 0.54463904f, - 0.56640624f, 0.58778525f, 0.60876143f, 0.62932039f, 0.64944805f, 0.66913061f, 0.68835458f, 0.70401457f, - 0.71018553f, 0.72537437f, 0.74314483f, 0.76040597f, 0.77714596f, 0.79335334f, 0.80901699f, 0.82412619f, - 0.83867057f, 0.85264016f, 0.86602540f, 0.87881711f, 0.89100652f, 0.90258528f, 0.91354546f, 0.92387953f, - 0.93358043f, 0.94264149f, 0.95105652f, 0.95881973f, 0.96592583f, 0.97236992f, 0.97814760f, 0.98325491f, - 0.98768834f, 0.99144486f, 0.99452190f, 0.99691733f, 0.99862953f, 0.99965732f -}; - -const float window_48kHz[1110] = -{ - 0.00000717f, 0.00002765f, 0.00006087f, 0.00010657f, 0.00016454f, 0.00023464f, 0.00031674f, 0.00041075f, - 0.00051659f, 0.00063416f, 0.00076341f, 0.00090428f, 0.00105670f, 0.00122062f, 0.00139600f, 0.00158279f, - 0.00178095f, 0.00199044f, 0.00221121f, 0.00244323f, 0.00268646f, 0.00294088f, 0.00320644f, 0.00348313f, - 0.00377089f, 0.00406971f, 0.00437956f, 0.00470041f, 0.00503222f, 0.00537498f, 0.00572866f, 0.00609322f, - 0.00646865f, 0.00685492f, 0.00725200f, 0.00765987f, 0.00807851f, 0.00850788f, 0.00894798f, 0.00939876f, - 0.00986022f, 0.01033232f, 0.01081504f, 0.01130837f, 0.01181227f, 0.01232672f, 0.01285171f, 0.01338721f, - 0.01393319f, 0.01448963f, 0.01505652f, 0.01563383f, 0.01622153f, 0.01681961f, 0.01742804f, 0.01804680f, - 0.01867586f, 0.01931521f, 0.01996482f, 0.02062467f, 0.02129474f, 0.02197501f, 0.02266545f, 0.02336603f, - 0.02407675f, 0.02479757f, 0.02552847f, 0.02626943f, 0.02702042f, 0.02778143f, 0.02855244f, 0.02933340f, - 0.03012432f, 0.03092515f, 0.03173588f, 0.03255648f, 0.03338694f, 0.03422723f, 0.03507731f, 0.03593718f, - 0.03680680f, 0.03768616f, 0.03857522f, 0.03947397f, 0.04038238f, 0.04130042f, 0.04222808f, 0.04316532f, - 0.04411212f, 0.04506846f, 0.04603431f, 0.04700965f, 0.04799445f, 0.04898869f, 0.04999234f, 0.05100537f, - 0.05202776f, 0.05305949f, 0.05410053f, 0.05515085f, 0.05621043f, 0.05727924f, 0.05835725f, 0.05944444f, - 0.06054078f, 0.06164624f, 0.06276080f, 0.06388444f, 0.06501711f, 0.06615880f, 0.06730949f, 0.06846913f, - 0.06963771f, 0.07081519f, 0.07200155f, 0.07319676f, 0.07440080f, 0.07561362f, 0.07683522f, 0.07806555f, - 0.07930459f, 0.08055231f, 0.08180868f, 0.08307367f, 0.08434725f, 0.08562940f, 0.08692008f, 0.08821927f, - 0.08952693f, 0.09084304f, 0.09216756f, 0.09350047f, 0.09484173f, 0.09619131f, 0.09754919f, 0.09891534f, - 0.10028971f, 0.10167229f, 0.10306304f, 0.10446193f, 0.10586893f, 0.10728400f, 0.10870712f, 0.11013826f, - 0.11157738f, 0.11302444f, 0.11447943f, 0.11594230f, 0.11741303f, 0.11889158f, 0.12037792f, 0.12187201f, - 0.12337383f, 0.12488334f, 0.12640051f, 0.12792530f, 0.12945769f, 0.13099763f, 0.13254510f, 0.13410005f, - 0.13566247f, 0.13723231f, 0.13880953f, 0.14039412f, 0.14198602f, 0.14358521f, 0.14519166f, 0.14680532f, - 0.14842616f, 0.15005415f, 0.15168925f, 0.15333143f, 0.15498066f, 0.15663689f, 0.15830009f, 0.15997023f, - 0.16164727f, 0.16333117f, 0.16502191f, 0.16671943f, 0.16842371f, 0.17013472f, 0.17185240f, 0.17357674f, - 0.17530768f, 0.17704520f, 0.17878926f, 0.18053981f, 0.18229683f, 0.18406028f, 0.18583011f, 0.18760630f, - 0.18938880f, 0.19117758f, 0.19297259f, 0.19477381f, 0.19658119f, 0.19839469f, 0.20021428f, 0.20203992f, - 0.20387157f, 0.20570919f, 0.20755274f, 0.20940219f, 0.21125750f, 0.21311862f, 0.21498552f, 0.21685816f, - 0.21873650f, 0.22062050f, 0.22251012f, 0.22440532f, 0.22630606f, 0.22821231f, 0.23012402f, 0.23204116f, - 0.23396367f, 0.23589153f, 0.23782470f, 0.23976312f, 0.24170677f, 0.24365560f, 0.24560957f, 0.24756865f, - 0.24953278f, 0.25150194f, 0.25347607f, 0.25545514f, 0.25743911f, 0.25942794f, 0.26142158f, 0.26341999f, - 0.26542314f, 0.26743098f, 0.26944347f, 0.27146056f, 0.27348222f, 0.27550841f, 0.27753908f, 0.27957419f, - 0.28161370f, 0.28365757f, 0.28570575f, 0.28775820f, 0.28981489f, 0.29187576f, 0.29394078f, 0.29600991f, - 0.29808309f, 0.30016029f, 0.30224147f, 0.30432658f, 0.30641558f, 0.30850843f, 0.31060508f, 0.31270549f, - 0.31480962f, 0.31691743f, 0.31902887f, 0.32114389f, 0.32326246f, 0.32538454f, 0.32751007f, 0.32963901f, - 0.33177133f, 0.33390698f, 0.33604591f, 0.33818808f, 0.34033345f, 0.34248196f, 0.34432825f, 0.34619672f, - 0.34807434f, 0.34995817f, 0.35184686f, 0.35373965f, 0.35563601f, 0.35753559f, 0.35943811f, 0.36134336f, - 0.36325118f, 0.36516141f, 0.36707393f, 0.36898864f, 0.37090544f, 0.37282426f, 0.37474501f, 0.37666763f, - 0.37859204f, 0.38051820f, 0.38244605f, 0.38437553f, 0.38630659f, 0.38823918f, 0.39017326f, 0.39210879f, - 0.39404572f, 0.39598401f, 0.39792361f, 0.39986450f, 0.40180663f, 0.40374996f, 0.40569446f, 0.40764009f, - 0.40958682f, 0.41153461f, 0.41348342f, 0.41543322f, 0.41738398f, 0.41933567f, 0.42128825f, 0.42324169f, - 0.42519595f, 0.42715101f, 0.42910683f, 0.43106338f, 0.43302063f, 0.43497855f, 0.43693710f, 0.43889626f, - 0.44085600f, 0.44281628f, 0.44477708f, 0.44673836f, 0.44870009f, 0.45066225f, 0.45262480f, 0.45458771f, - 0.45655096f, 0.45851451f, 0.46047834f, 0.46244241f, 0.46440670f, 0.46637117f, 0.46833580f, 0.47030055f, - 0.47226541f, 0.47423033f, 0.47619530f, 0.47816027f, 0.48012523f, 0.48209014f, 0.48405498f, 0.48601971f, - 0.48798430f, 0.48994874f, 0.49191298f, 0.49387701f, 0.49584078f, 0.49780428f, 0.49976748f, 0.50173034f, - 0.50369284f, 0.50565495f, 0.50761664f, 0.50957789f, 0.51153865f, 0.51349892f, 0.51545865f, 0.51741783f, - 0.51937641f, 0.52133438f, 0.52329171f, 0.52524836f, 0.52720432f, 0.52915954f, 0.53111401f, 0.53306770f, - 0.53502057f, 0.53697261f, 0.53892378f, 0.54087405f, 0.54282340f, 0.54477180f, 0.54671922f, 0.54866564f, - 0.55061103f, 0.55255535f, 0.55449858f, 0.55644070f, 0.55838168f, 0.56032149f, 0.56226010f, 0.56419748f, - 0.56613362f, 0.56806847f, 0.57000202f, 0.57193423f, 0.57386509f, 0.57579455f, 0.57772261f, 0.57964922f, - 0.58157436f, 0.58349801f, 0.58542013f, 0.58734071f, 0.58925971f, 0.59117711f, 0.59309288f, 0.59500700f, - 0.59691943f, 0.59883016f, 0.60073915f, 0.60264638f, 0.60455182f, 0.60645545f, 0.60835724f, 0.61025717f, - 0.61215520f, 0.61405132f, 0.61594549f, 0.61783769f, 0.61972789f, 0.62161608f, 0.62350222f, 0.62538628f, - 0.62726824f, 0.62914809f, 0.63102578f, 0.63290129f, 0.63477461f, 0.63664570f, 0.63851454f, 0.64038110f, - 0.64224536f, 0.64410729f, 0.64596688f, 0.64782408f, 0.64967889f, 0.65153127f, 0.65338119f, 0.65522864f, - 0.65707360f, 0.65891602f, 0.66075590f, 0.66259321f, 0.66442791f, 0.66626000f, 0.66808944f, 0.66991621f, - 0.67174028f, 0.67356164f, 0.67538025f, 0.67719610f, 0.67900916f, 0.68081941f, 0.68262682f, 0.68443137f, - 0.68623303f, 0.68803180f, 0.68982763f, 0.69162050f, 0.69341041f, 0.69519731f, 0.69698119f, 0.69876203f, - 0.70053980f, 0.70231448f, 0.70408605f, 0.70585448f, 0.70761976f, 0.70938186f, 0.71114076f, 0.71289643f, - 0.71464886f, 0.71639803f, 0.71814390f, 0.71988647f, 0.72162570f, 0.72336158f, 0.72509409f, 0.72682320f, - 0.72854889f, 0.73027115f, 0.73198995f, 0.73370527f, 0.73541708f, 0.73712538f, 0.73883014f, 0.74053133f, - 0.74222894f, 0.74392295f, 0.74561334f, 0.74730009f, 0.74898317f, 0.75066257f, 0.75233827f, 0.75401025f, - 0.75567849f, 0.75734297f, 0.75900367f, 0.76066057f, 0.76231366f, 0.76396291f, 0.76560830f, 0.76724982f, - 0.76888745f, 0.77052118f, 0.77215097f, 0.77377682f, 0.77539870f, 0.77701660f, 0.77863050f, 0.78024038f, - 0.78184623f, 0.78344803f, 0.78504575f, 0.78663939f, 0.78822893f, 0.78981434f, 0.79139562f, 0.79297274f, - 0.79454569f, 0.79611446f, 0.79767902f, 0.79923936f, 0.80079547f, 0.80234733f, 0.80389492f, 0.80543823f, - 0.80697724f, 0.80851193f, 0.81004230f, 0.81156833f, 0.81309000f, 0.81460729f, 0.81612020f, 0.81762870f, - 0.81913279f, 0.82063245f, 0.82212766f, 0.82361842f, 0.82510470f, 0.82658650f, 0.82806380f, 0.82953658f, - 0.83100484f, 0.83246856f, 0.83392773f, 0.83538233f, 0.83683236f, 0.83827780f, 0.83971863f, 0.84115485f, - 0.84258645f, 0.84401340f, 0.84543571f, 0.84685336f, 0.84826633f, 0.84967462f, 0.85107821f, 0.85247710f, - 0.85387127f, 0.85526072f, 0.85664542f, 0.85802538f, 0.85940058f, 0.86077102f, 0.86213667f, 0.86349754f, - 0.86485361f, 0.86620487f, 0.86755132f, 0.86889294f, 0.87022973f, 0.87156168f, 0.87288878f, 0.87421101f, - 0.87552839f, 0.87684088f, 0.87814849f, 0.87945122f, 0.88074904f, 0.88204196f, 0.88332997f, 0.88461305f, - 0.88589122f, 0.88716444f, 0.88843273f, 0.88969608f, 0.89095447f, 0.89220791f, 0.89345638f, 0.89469988f, - 0.89593841f, 0.89717197f, 0.89840053f, 0.89962411f, 0.90084270f, 0.90205629f, 0.90326488f, 0.90446846f, - 0.90566704f, 0.90686060f, 0.90804915f, 0.90923267f, 0.91041118f, 0.91158466f, 0.91275311f, 0.91391654f, - 0.91507493f, 0.91622829f, 0.91737662f, 0.91851991f, 0.91965816f, 0.92079138f, 0.92191956f, 0.92304270f, - 0.92416080f, 0.92527386f, 0.92638188f, 0.92748486f, 0.92858281f, 0.92967572f, 0.93076360f, 0.93184645f, - 0.93292426f, 0.93399705f, 0.93506481f, 0.93612755f, 0.93718527f, 0.93823797f, 0.93928566f, 0.94032834f, - 0.94136602f, 0.94239870f, 0.94342639f, 0.94444909f, 0.94546681f, 0.94647956f, 0.94748733f, 0.94849015f, - 0.94948801f, 0.95048093f, 0.95146891f, 0.95245197f, 0.95343011f, 0.95440334f, 0.95537168f, 0.95633513f, - 0.95729371f, 0.95824743f, 0.95919630f, 0.96014034f, 0.96107957f, 0.96201399f, 0.96294363f, 0.96386850f, - 0.96478862f, 0.96570402f, 0.96661470f, 0.96752070f, 0.96842204f, 0.96931873f, 0.97021081f, 0.97109831f, - 0.97198124f, 0.97285966f, 0.97373358f, 0.97460304f, 0.97546808f, 0.97632874f, 0.97718506f, 0.97803710f, - 0.97888489f, 0.97972850f, 0.98056799f, 0.98140340f, 0.98223483f, 0.98306234f, 0.98388601f, 0.98470595f, - 0.98552225f, 0.98633502f, 0.98714441f, 0.98795054f, 0.98875359f, 0.98955376f, 0.99035126f, 0.99114636f, - 0.99193936f, 0.99273065f, 0.99352070f, 0.99431009f, 0.99509960f, 0.99589027f, 0.99668360f, 0.99748189f, - 0.99828914f, 0.99911401f, 0.99911401f, 0.99828759f, 0.99747571f, 0.99666970f, 0.99586557f, 0.99506104f, - 0.99425460f, 0.99344523f, 0.99263215f, 0.99181478f, 0.99099266f, 0.99016542f, 0.98933274f, 0.98849437f, - 0.98765009f, 0.98679972f, 0.98594310f, 0.98508007f, 0.98421052f, 0.98333434f, 0.98245143f, 0.98156170f, - 0.98066506f, 0.97976145f, 0.97885080f, 0.97793305f, 0.97700814f, 0.97607603f, 0.97513666f, 0.97419000f, - 0.97323600f, 0.97227462f, 0.97130583f, 0.97032960f, 0.96934589f, 0.96835468f, 0.96735594f, 0.96634965f, - 0.96533578f, 0.96431430f, 0.96328520f, 0.96224846f, 0.96120406f, 0.96015197f, 0.95909219f, 0.95802469f, - 0.95694946f, 0.95586649f, 0.95477576f, 0.95367726f, 0.95257097f, 0.95145688f, 0.95033498f, 0.94920527f, - 0.94806772f, 0.94692233f, 0.94576909f, 0.94460799f, 0.94343902f, 0.94226217f, 0.94107743f, 0.93988480f, - 0.93868427f, 0.93747583f, 0.93625947f, 0.93503520f, 0.93380299f, 0.93256285f, 0.93131476f, 0.93005873f, - 0.92879475f, 0.92752281f, 0.92624292f, 0.92495505f, 0.92365922f, 0.92235541f, 0.92104362f, 0.91972385f, - 0.91839609f, 0.91706034f, 0.91571660f, 0.91436487f, 0.91300513f, 0.91163740f, 0.91026166f, 0.90887792f, - 0.90748616f, 0.90608640f, 0.90467862f, 0.90326283f, 0.90183902f, 0.90040720f, 0.89896735f, 0.89751949f, - 0.89606360f, 0.89459969f, 0.89312776f, 0.89164780f, 0.89015982f, 0.88866382f, 0.88715979f, 0.88564773f, - 0.88412765f, 0.88259954f, 0.88106340f, 0.87951924f, 0.87796706f, 0.87640684f, 0.87483861f, 0.87326235f, - 0.87167807f, 0.87008576f, 0.86848544f, 0.86687709f, 0.86526073f, 0.86363635f, 0.86200395f, 0.86036353f, - 0.85871510f, 0.85705867f, 0.85539422f, 0.85372176f, 0.85204129f, 0.85035282f, 0.84865635f, 0.84695188f, - 0.84523941f, 0.84351895f, 0.84179049f, 0.84005404f, 0.83830960f, 0.83655718f, 0.83479677f, 0.83302839f, - 0.83125203f, 0.82946769f, 0.82767538f, 0.82587511f, 0.82406687f, 0.82225067f, 0.82042651f, 0.81859440f, - 0.81675434f, 0.81490633f, 0.81305038f, 0.81118649f, 0.80931466f, 0.80743490f, 0.80554721f, 0.80365160f, - 0.80174807f, 0.79983662f, 0.79791726f, 0.79599000f, 0.79405483f, 0.79211177f, 0.79016081f, 0.78820196f, - 0.78623522f, 0.78426061f, 0.78227812f, 0.78028777f, 0.77828954f, 0.77628346f, 0.77426952f, 0.77224773f, - 0.77021809f, 0.76818061f, 0.76613530f, 0.76408216f, 0.76202120f, 0.75995241f, 0.75787581f, 0.75579140f, - 0.75369919f, 0.75159918f, 0.74949138f, 0.74737580f, 0.74525243f, 0.74312128f, 0.74098237f, 0.73883570f, - 0.73668126f, 0.73451908f, 0.73234915f, 0.73017147f, 0.72798607f, 0.72579293f, 0.72359208f, 0.72138350f, - 0.71916722f, 0.71694323f, 0.71471154f, 0.71247217f, 0.71022510f, 0.70797036f, 0.70570794f, 0.70343786f, - 0.70116012f, 0.69887472f, 0.69658167f, 0.69428098f, 0.69197265f, 0.68965669f, 0.68733312f, 0.68500192f, - 0.68266311f, 0.68031670f, 0.67796269f, 0.67560109f, 0.67323190f, 0.67085514f, 0.66847080f, 0.66607889f, - 0.66367943f, 0.66127241f, 0.65885784f, 0.65643574f, 0.65400609f, 0.65156892f, 0.64912423f, 0.64667201f, - 0.64421229f, 0.64174507f, 0.63927035f, 0.63678813f, 0.63429843f, 0.63180125f, 0.62929660f, 0.62678447f, - 0.62426489f, 0.62173785f, 0.61920336f, 0.61666143f, 0.61411206f, 0.61155525f, 0.60899102f, 0.60641937f, - 0.60384030f, 0.60125382f, 0.59865994f, 0.59605866f, 0.59344998f, 0.59083391f, 0.58821046f, 0.58557964f, - 0.58294143f, 0.58029586f, 0.57764293f, 0.57498264f, 0.57231499f, 0.56963999f, 0.56695765f, 0.56426797f, - 0.56157095f, 0.55886660f, 0.55615492f, 0.55343592f, 0.55070960f, 0.54797596f, 0.54523501f, 0.54248675f, - 0.53973118f, 0.53696832f, 0.53419815f, 0.53142069f, 0.52863593f, 0.52584388f, 0.52304455f, 0.52023793f, - 0.51742403f, 0.51460284f, 0.51177438f, 0.50893864f, 0.50609563f, 0.50324534f, 0.50038778f, 0.49752294f, - 0.49465084f, 0.49177147f, 0.48888482f, 0.48599091f, 0.48308973f, 0.48018128f, 0.47726556f, 0.47434256f, - 0.47141230f, 0.46847477f, 0.46552996f, 0.46257788f, 0.45961852f, 0.45665188f, 0.45367796f, 0.45069676f, - 0.44770827f, 0.44471249f, 0.44170942f, 0.43869905f, 0.43568138f, 0.43265640f, 0.42962411f, 0.42658451f, - 0.42353758f, 0.42048333f, 0.41742175f, 0.41435283f, 0.41127656f, 0.40819293f, 0.40510195f, 0.40200359f, - 0.39889786f, 0.39578474f, 0.39266422f, 0.38953629f, 0.38640095f, 0.38325818f, 0.38010797f, 0.37695031f, - 0.37378519f, 0.37061258f, 0.36743249f, 0.36424489f, 0.36104978f, 0.35784713f, 0.35463693f, 0.35141916f, - 0.34819381f, 0.34496085f, 0.34172027f, 0.33847206f, 0.33521618f, 0.33195262f, 0.32868136f, 0.32540237f, - 0.32211564f, 0.31882113f, 0.31551882f, 0.31220868f, 0.30889070f, 0.30556483f, 0.30223106f, 0.29888935f, - 0.29553966f, 0.29218198f, 0.28881626f, 0.28544246f, 0.28206056f, 0.27867052f, 0.27527229f, 0.27186583f, - 0.26845112f, 0.26502809f, 0.26159670f, 0.25815692f, 0.25470869f, 0.25125196f, 0.24778667f, 0.24431278f, - 0.24083023f, 0.23733896f, 0.23383891f, 0.23033001f, 0.22681220f, 0.22328542f, 0.21974958f, 0.21620462f, - 0.21265047f, 0.20908703f, 0.20551423f, 0.20193197f, 0.19834018f, 0.19473875f, 0.19112758f, 0.18750657f, - 0.18387561f, 0.18023459f, 0.17658339f, 0.17292189f, 0.16924994f, 0.16556742f, 0.16187418f, 0.15817007f, - 0.15445492f, 0.15072857f, 0.14699084f, 0.14324154f, 0.13948047f, 0.13570741f, 0.13192214f, 0.12812442f, - 0.12431400f, 0.12049059f, 0.11665391f, 0.11280364f, 0.10893944f, 0.10506094f, 0.10116776f, 0.09725946f, - 0.09333558f, 0.08939561f, 0.08543899f, 0.08146510f, 0.07747327f, 0.07346273f, 0.06943264f, 0.06538204f, - 0.06130985f, 0.05721482f, 0.05309551f, 0.04895024f, 0.04477702f, 0.04057343f, 0.03633653f, 0.03206261f, - 0.02774685f, 0.02338280f, 0.01896129f, 0.01446831f, 0.00987977f, 0.00514389f -}; - -const float short_window_8kHz[80] = -{ - 0.01963369f, 0.05887080f, 0.09801714f, 0.13701234f, 0.17579628f, 0.21430915f, 0.25249158f, 0.29028468f, - 0.32763018f, 0.36447050f, 0.40074883f, 0.43640924f, 0.47139674f, 0.50565737f, 0.53913832f, 0.57178796f, - 0.60355594f, 0.63439328f, 0.66425244f, 0.69308736f, 0.72085360f, 0.74750833f, 0.77301045f, 0.79732065f, - 0.82040144f, 0.84221723f, 0.86273439f, 0.88192126f, 0.89974828f, 0.91618796f, 0.93121493f, 0.94480605f, - 0.95694034f, 0.96759909f, 0.97676588f, 0.98442657f, 0.99056934f, 0.99518473f, 0.99826561f, 0.99980724f, - 0.99980724f, 0.99826561f, 0.99518473f, 0.99056934f, 0.98442657f, 0.97676588f, 0.96759909f, 0.95694034f, - 0.94480605f, 0.93121493f, 0.91618796f, 0.89974828f, 0.88192126f, 0.86273439f, 0.84221723f, 0.82040144f, - 0.79732065f, 0.77301045f, 0.74750833f, 0.72085360f, 0.69308736f, 0.66425244f, 0.63439328f, 0.60355594f, - 0.57178796f, 0.53913832f, 0.50565737f, 0.47139674f, 0.43640924f, 0.40074883f, 0.36447050f, 0.32763018f, - 0.29028468f, 0.25249158f, 0.21430915f, 0.17579628f, 0.13701234f, 0.09801714f, 0.05887080f, 0.01963369f -}; - -const float short_window_16kHz[160] = -{ - 0.00981732f, 0.02944817f, 0.04906767f, 0.06866826f, - 0.08824237f, 0.10778246f, 0.12728100f, 0.14673047f, - 0.16612338f, 0.18545224f, 0.20470960f, 0.22388805f, - 0.24298018f, 0.26197864f, 0.28087610f, 0.29966528f, - 0.31833893f, 0.33688985f, 0.35531090f, 0.37359497f, - 0.39173501f, 0.40972403f, 0.42755509f, 0.44522133f, - 0.46271592f, 0.48003212f, 0.49716327f, 0.51410274f, - 0.53084403f, 0.54738066f, 0.56370626f, 0.57981455f, - 0.59569930f, 0.61135441f, 0.62677382f, 0.64195160f, - 0.65688190f, 0.67155895f, 0.68597711f, 0.70013081f, - 0.71401460f, 0.72762312f, 0.74095113f, 0.75399348f, - 0.76674516f, 0.77920124f, 0.79135693f, 0.80320753f, - 0.81474848f, 0.82597533f, 0.83688375f, 0.84746954f, - 0.85772861f, 0.86765701f, 0.87725091f, 0.88650662f, - 0.89542056f, 0.90398929f, 0.91220953f, 0.92007808f, - 0.92759194f, 0.93474818f, 0.94154407f, 0.94797697f, - 0.95404440f, 0.95974404f, 0.96507367f, 0.97003125f, - 0.97461487f, 0.97882275f, 0.98265328f, 0.98610498f, - 0.98917651f, 0.99186670f, 0.99417450f, 0.99609903f, - 0.99763955f, 0.99879546f, 0.99956631f, 0.99995181f, - 0.99995181f, 0.99956631f, 0.99879546f, 0.99763955f, - 0.99609903f, 0.99417450f, 0.99186670f, 0.98917651f, - 0.98610498f, 0.98265328f, 0.97882275f, 0.97461487f, - 0.97003125f, 0.96507367f, 0.95974404f, 0.95404440f, - 0.94797697f, 0.94154407f, 0.93474818f, 0.92759194f, - 0.92007808f, 0.91220953f, 0.90398929f, 0.89542056f, - 0.88650662f, 0.87725091f, 0.86765701f, 0.85772861f, - 0.84746954f, 0.83688375f, 0.82597533f, 0.81474848f, - 0.80320753f, 0.79135693f, 0.77920124f, 0.76674516f, - 0.75399348f, 0.74095113f, 0.72762312f, 0.71401460f, - 0.70013081f, 0.68597711f, 0.67155895f, 0.65688190f, - 0.64195160f, 0.62677382f, 0.61135441f, 0.59569930f, - 0.57981455f, 0.56370626f, 0.54738066f, 0.53084403f, - 0.51410274f, 0.49716327f, 0.48003212f, 0.46271592f, - 0.44522133f, 0.42755509f, 0.40972403f, 0.39173501f, - 0.37359497f, 0.35531090f, 0.33688985f, 0.31833893f, - 0.29966528f, 0.28087610f, 0.26197864f, 0.24298018f, - 0.22388805f, 0.20470960f, 0.18545224f, 0.16612338f, - 0.14673047f, 0.12728100f, 0.10778246f, 0.08824237f, - 0.06866826f, 0.04906767f, 0.02944817f, 0.00981732f -}; - -const float short_window_32kHz[320] = -{ - 0.00490872f, 0.01472568f, 0.02454123f, 0.03435441f, 0.04416428f, 0.05396989f, - 0.06377030f, 0.07356456f, 0.08335174f, 0.09313088f, 0.10290104f, 0.11266129f, - 0.12241068f, 0.13214826f, 0.14187312f, 0.15158430f, 0.16128086f, 0.17096189f, - 0.18062644f, 0.19027357f, 0.19990237f, 0.20951190f, 0.21910124f, 0.22866946f, - 0.23821564f, 0.24773886f, 0.25723821f, 0.26671276f, 0.27616160f, 0.28558383f, - 0.29497853f, 0.30434480f, 0.31368174f, 0.32298845f, 0.33226402f, 0.34150757f, - 0.35071820f, 0.35989504f, 0.36903718f, 0.37814376f, 0.38721389f, 0.39624670f, - 0.40524131f, 0.41419687f, 0.42311251f, 0.43198737f, 0.44082059f, 0.44961133f, - 0.45835873f, 0.46706195f, 0.47572016f, 0.48433252f, 0.49289819f, 0.50141636f, - 0.50988620f, 0.51830690f, 0.52667764f, 0.53499762f, 0.54326604f, 0.55148209f, - 0.55964499f, 0.56775395f, 0.57580819f, 0.58380693f, 0.59174941f, 0.59963485f, - 0.60746249f, 0.61523159f, 0.62294139f, 0.63059115f, 0.63818013f, 0.64570760f, - 0.65317284f, 0.66057513f, 0.66791374f, 0.67518798f, 0.68239715f, 0.68954054f, - 0.69661748f, 0.70362727f, 0.71056925f, 0.71744274f, 0.72424708f, 0.73098162f, - 0.73764570f, 0.74423869f, 0.75075995f, 0.75720885f, 0.76358476f, 0.76988708f, - 0.77611520f, 0.78226851f, 0.78834643f, 0.79434836f, 0.80027373f, 0.80612197f, - 0.81189252f, 0.81758481f, 0.82319831f, 0.82873246f, 0.83418673f, 0.83956061f, - 0.84485357f, 0.85006509f, 0.85519469f, 0.86024186f, 0.86520612f, 0.87008699f, - 0.87488400f, 0.87959669f, 0.88422459f, 0.88876728f, 0.89322430f, 0.89759523f, - 0.90187965f, 0.90607715f, 0.91018732f, 0.91420976f, 0.91814408f, 0.92198992f, - 0.92574689f, 0.92941463f, 0.93299280f, 0.93648104f, 0.93987902f, 0.94318642f, - 0.94640291f, 0.94952818f, 0.95256194f, 0.95550388f, 0.95835373f, 0.96111122f, - 0.96377607f, 0.96634802f, 0.96882685f, 0.97121229f, 0.97350412f, 0.97570213f, - 0.97780610f, 0.97981582f, 0.98173111f, 0.98355177f, 0.98527764f, 0.98690855f, - 0.98844433f, 0.98988485f, 0.99122996f, 0.99247953f, 0.99363345f, 0.99469160f, - 0.99565388f, 0.99652019f, 0.99729046f, 0.99796460f, 0.99854256f, 0.99902428f, - 0.99940971f, 0.99969882f, 0.99989157f, 0.99998795f, 0.99998795f, 0.99989157f, - 0.99969882f, 0.99940971f, 0.99902428f, 0.99854256f, 0.99796460f, 0.99729046f, - 0.99652019f, 0.99565388f, 0.99469160f, 0.99363345f, 0.99247953f, 0.99122996f, - 0.98988485f, 0.98844433f, 0.98690855f, 0.98527764f, 0.98355177f, 0.98173111f, - 0.97981582f, 0.97780610f, 0.97570213f, 0.97350412f, 0.97121229f, 0.96882685f, - 0.96634802f, 0.96377607f, 0.96111122f, 0.95835373f, 0.95550388f, 0.95256194f, - 0.94952818f, 0.94640291f, 0.94318642f, 0.93987902f, 0.93648104f, 0.93299280f, - 0.92941463f, 0.92574689f, 0.92198992f, 0.91814408f, 0.91420976f, 0.91018732f, - 0.90607715f, 0.90187965f, 0.89759523f, 0.89322430f, 0.88876728f, 0.88422459f, - 0.87959669f, 0.87488400f, 0.87008699f, 0.86520612f, 0.86024186f, 0.85519469f, - 0.85006509f, 0.84485357f, 0.83956061f, 0.83418673f, 0.82873246f, 0.82319831f, - 0.81758481f, 0.81189252f, 0.80612197f, 0.80027373f, 0.79434836f, 0.78834643f, - 0.78226851f, 0.77611520f, 0.76988708f, 0.76358476f, 0.75720885f, 0.75075995f, - 0.74423869f, 0.73764570f, 0.73098162f, 0.72424708f, 0.71744274f, 0.71056925f, - 0.70362727f, 0.69661748f, 0.68954054f, 0.68239715f, 0.67518798f, 0.66791374f, - 0.66057513f, 0.65317284f, 0.64570760f, 0.63818013f, 0.63059115f, 0.62294139f, - 0.61523159f, 0.60746249f, 0.59963485f, 0.59174941f, 0.58380693f, 0.57580819f, - 0.56775395f, 0.55964499f, 0.55148209f, 0.54326604f, 0.53499762f, 0.52667764f, - 0.51830690f, 0.50988620f, 0.50141636f, 0.49289819f, 0.48433252f, 0.47572016f, - 0.46706195f, 0.45835873f, 0.44961133f, 0.44082059f, 0.43198737f, 0.42311251f, - 0.41419687f, 0.40524131f, 0.39624670f, 0.38721389f, 0.37814376f, 0.36903718f, - 0.35989504f, 0.35071820f, 0.34150757f, 0.33226402f, 0.32298845f, 0.31368174f, - 0.30434480f, 0.29497853f, 0.28558383f, 0.27616160f, 0.26671276f, 0.25723821f, - 0.24773886f, 0.23821564f, 0.22866946f, 0.21910124f, 0.20951190f, 0.19990237f, - 0.19027357f, 0.18062644f, 0.17096189f, 0.16128086f, 0.15158430f, 0.14187312f, - 0.13214826f, 0.12241068f, 0.11266129f, 0.10290104f, 0.09313088f, 0.08335174f, - 0.07356456f, 0.06377030f, 0.05396989f, 0.04416428f, 0.03435441f, 0.02454123f, - 0.01472568f, 0.00490872f -}; - -const float short_window_48kHz[480] = -{ - 0.00326538f, 0.00982666f, 0.0163574f, 0.0229187f, 0.0294495f, 0.0359802f, - 0.0425415f, 0.0490723f, 0.055603f, 0.0621338f, 0.0686646f, 0.0751953f, - 0.0817261f, 0.0882568f, 0.0947571f, 0.101288f, 0.107788f, 0.114288f, - 0.120789f, 0.127289f, 0.133759f, 0.140259f, 0.146729f, 0.153198f, - 0.159668f, 0.166138f, 0.172577f, 0.179016f, 0.185455f, 0.191895f, - 0.198303f, 0.204712f, 0.211121f, 0.217499f, 0.223877f, 0.230255f, - 0.236633f, 0.242981f, 0.249329f, 0.255646f, 0.261993f, 0.26828f, - 0.274597f, 0.280884f, 0.28714f, 0.293427f, 0.299652f, 0.305908f, - 0.312134f, 0.318329f, 0.324524f, 0.330719f, 0.336884f, 0.343048f, - 0.349182f, 0.355316f, 0.36142f, 0.367523f, 0.373596f, 0.379669f, - 0.385712f, 0.391724f, 0.397736f, 0.403748f, 0.409729f, 0.41568f, - 0.421631f, 0.427551f, 0.433472f, 0.439362f, 0.445221f, 0.45108f, - 0.456909f, 0.462708f, 0.468506f, 0.474274f, 0.480042f, 0.485748f, - 0.491486f, 0.497162f, 0.502838f, 0.508484f, 0.514099f, 0.519714f, - 0.525299f, 0.530853f, 0.536377f, 0.541901f, 0.547394f, 0.552856f, - 0.558289f, 0.563721f, 0.569092f, 0.574463f, 0.579803f, 0.585144f, - 0.590424f, 0.595703f, 0.600952f, 0.606171f, 0.611359f, 0.616516f, - 0.621674f, 0.62677f, 0.631866f, 0.636932f, 0.641937f, 0.646942f, - 0.651947f, 0.656891f, 0.661804f, 0.666687f, 0.67157f, 0.676392f, - 0.681213f, 0.685974f, 0.690735f, 0.695435f, 0.700134f, 0.704803f, - 0.709412f, 0.71402f, 0.718567f, 0.723114f, 0.727631f, 0.732086f, - 0.736542f, 0.740936f, 0.745331f, 0.749664f, 0.753998f, 0.75827f, - 0.762512f, 0.766754f, 0.770935f, 0.775085f, 0.779205f, 0.783295f, - 0.787354f, 0.791351f, 0.795349f, 0.799286f, 0.803223f, 0.807098f, - 0.810944f, 0.814758f, 0.818512f, 0.822266f, 0.825989f, 0.829651f, - 0.833282f, 0.836884f, 0.840454f, 0.843964f, 0.847473f, 0.850922f, - 0.85434f, 0.857727f, 0.861084f, 0.86438f, 0.867645f, 0.87088f, - 0.874084f, 0.877258f, 0.880371f, 0.883453f, 0.886505f, 0.889526f, - 0.892487f, 0.895416f, 0.898315f, 0.901184f, 0.903992f, 0.906769f, - 0.909515f, 0.912201f, 0.914886f, 0.91748f, 0.920074f, 0.922607f, - 0.92514f, 0.927582f, 0.930023f, 0.932404f, 0.934753f, 0.937042f, - 0.939331f, 0.941559f, 0.943726f, 0.945862f, 0.947968f, 0.950043f, - 0.952057f, 0.954041f, 0.955994f, 0.957886f, 0.959747f, 0.961548f, - 0.963348f, 0.965088f, 0.966766f, 0.968414f, 0.970032f, 0.971588f, - 0.973114f, 0.974609f, 0.976074f, 0.977448f, 0.978821f, 0.980133f, - 0.981415f, 0.982666f, 0.983856f, 0.984985f, 0.986115f, 0.987183f, - 0.98819f, 0.989166f, 0.990112f, 0.990997f, 0.991852f, 0.992676f, - 0.993439f, 0.994171f, 0.994873f, 0.995514f, 0.996094f, 0.996643f, - 0.997162f, 0.99765f, 0.998077f, 0.998444f, 0.99881f, 0.999084f, - 0.999359f, 0.999573f, 0.999725f, 0.999878f, 0.999939f, 0.999969f, - 0.999969f, 0.999939f, 0.999878f, 0.999725f, 0.999573f, 0.999359f, - 0.999084f, 0.99881f, 0.998444f, 0.998077f, 0.99765f, 0.997162f, - 0.996643f, 0.996094f, 0.995514f, 0.994873f, 0.994171f, 0.993439f, - 0.992676f, 0.991852f, 0.990997f, 0.990112f, 0.989166f, 0.98819f, - 0.987183f, 0.986115f, 0.984985f, 0.983856f, 0.982666f, 0.981415f, - 0.980133f, 0.978821f, 0.977448f, 0.976074f, 0.974609f, 0.973114f, - 0.971588f, 0.970032f, 0.968414f, 0.966766f, 0.965088f, 0.963348f, - 0.961548f, 0.959747f, 0.957886f, 0.955994f, 0.954041f, 0.952057f, - 0.950043f, 0.947968f, 0.945862f, 0.943726f, 0.941559f, 0.939331f, - 0.937042f, 0.934753f, 0.932404f, 0.930023f, 0.927582f, 0.92514f, - 0.922607f, 0.920074f, 0.91748f, 0.914886f, 0.912201f, 0.909515f, - 0.906769f, 0.903992f, 0.901184f, 0.898315f, 0.895416f, 0.892487f, - 0.889526f, 0.886505f, 0.883453f, 0.880371f, 0.877258f, 0.874084f, - 0.87088f, 0.867645f, 0.86438f, 0.861084f, 0.857727f, 0.85434f, - 0.850922f, 0.847473f, 0.843964f, 0.840454f, 0.836884f, 0.833282f, - 0.829651f, 0.825989f, 0.822266f, 0.818512f, 0.814758f, 0.810944f, - 0.807098f, 0.803223f, 0.799286f, 0.795349f, 0.791351f, 0.787354f, - 0.783295f, 0.779205f, 0.775085f, 0.770935f, 0.766754f, 0.762512f, - 0.75827f, 0.753998f, 0.749664f, 0.745331f, 0.740936f, 0.736542f, - 0.732086f, 0.727631f, 0.723114f, 0.718567f, 0.71402f, 0.709412f, - 0.704803f, 0.700134f, 0.695435f, 0.690735f, 0.685974f, 0.681213f, - 0.676392f, 0.67157f, 0.666687f, 0.661804f, 0.656891f, 0.651947f, - 0.646942f, 0.641937f, 0.636932f, 0.631866f, 0.62677f, 0.621674f, - 0.616516f, 0.611359f, 0.606171f, 0.600952f, 0.595703f, 0.590424f, - 0.585144f, 0.579803f, 0.574463f, 0.569092f, 0.563721f, 0.558289f, - 0.552856f, 0.547394f, 0.541901f, 0.536377f, 0.530853f, 0.525299f, - 0.519714f, 0.514099f, 0.508484f, 0.502838f, 0.497162f, 0.491486f, - 0.485748f, 0.480042f, 0.474274f, 0.468506f, 0.462708f, 0.456909f, - 0.45108f, 0.445221f, 0.439362f, 0.433472f, 0.427551f, 0.421631f, - 0.41568f, 0.409729f, 0.403748f, 0.397736f, 0.391724f, 0.385712f, - 0.379669f, 0.373596f, 0.367523f, 0.36142f, 0.355316f, 0.349182f, - 0.343048f, 0.336884f, 0.330719f, 0.324524f, 0.318329f, 0.312134f, - 0.305908f, 0.299652f, 0.293427f, 0.28714f, 0.280884f, 0.274597f, - 0.26828f, 0.261993f, 0.255646f, 0.249329f, 0.242981f, 0.236633f, - 0.230255f, 0.223877f, 0.217499f, 0.211121f, 0.204712f, 0.198303f, - 0.191895f, 0.185455f, 0.179016f, 0.172577f, 0.166138f, 0.159668f, - 0.153198f, 0.146729f, 0.140259f, 0.133759f, 0.127289f, 0.120789f, - 0.114288f, 0.107788f, 0.101288f, 0.0947571f, 0.0882568f, 0.0817261f, - 0.0751953f, 0.0686646f, 0.0621338f, 0.055603f, 0.0490723f, 0.0425415f, - 0.0359802f, 0.0294495f, 0.0229187f, 0.0163574f, 0.00982666f, 0.00326538f -}; - const Word16 short_window_48kHz_fx[L_FRAME48k / 2 / 2] = /* second half is symetric and omitted Q15*/ { 107, 322, 536, 751, 965, 1179, 1394, 1608, 1822, 2036, 2250, 2464, 2678, 2892, 3105, 3319, @@ -28721,9 +16938,6 @@ const Word32 pow_getbitsfrompulses_fx[16] = /*Q21 */ }; const Word16 DDP_fx[4] = { 3, 0, 1, 2 };//Q0 -const float DDP[4] = { 3.0f, 0.0f, 1.0f, 2.0f }; - - const Word16 step_tcq[8][STATES] = { {0,4}, {0,4}, {1,5}, {1,5}, {2,6}, {2,6}, {3,7}, {3,7} }; // Q0 const Word16 denc[8][STATES] = { {0,2}, {2,0}, {1,3}, {3,1}, {2,0}, {0,2}, {3,1}, {1,3} }; /* enc trellis Q0*/ const Word16 ddec[8][STATES] = { {0,2}, {1,3}, {2,0}, {3,1}, {2,0}, {3,1}, {0,2}, {1,3} }; /* dec trellis Q0*/ @@ -28744,12 +16958,6 @@ const Word16 nextstate[STATES][2] = {{0, 1}, {2, 3}, {4, 5}, {6, 7}, {0, 1}, {2, *------------------------------------------------------------------------------*/ const Word16 fine_gain_bits[8] = {0, 0, 0, 1, 2, 2, 4, 5}; // Q0 -const float finegain_1[2] = {-0.7448924f, 0.7718827f}; -const float finegain_2[4] = {-1.0847910f, -0.3616628f, 0.3668007f, 1.1455675f}; -const float finegain_3[8] = {-1.0000000f, -0.7142857f, -0.4285714f, -0.1428571f, 0.1428571f, 0.4285714f, 0.7142857f, 1.0000000f}; -const float finegain_4[16] = {-1.3234321f, -1.1164439f, -0.9153915f, -0.7248241f, -0.5453916f, -0.3807825f, -0.2259278f, -0.0836715f, 0.0576803f, 0.1999166f, 0.3715899f, 0.5541582f, 0.7598588f, 0.9764980f, 1.2082281f, 1.4567725f}; -const float finegain_5[32] = {-1.3099370f, -1.1532731f, -0.9939113f, -0.8627403f, -0.7693628f, -0.6901322f, -0.6188556f, -0.5438313f, -0.4899869f, -0.4145289f, -0.3440915f, -0.2936875f, -0.2241453f, -0.1636186f, -0.1052746f, -0.0292431f, 0.0273763f, 0.0848355f, 0.1443042f, 0.2095194f, 0.2794882f, 0.3366661f, 0.4131591f, 0.4740591f, 0.5545165f, 0.6196313f, 0.6719442f, 0.7650533f, 0.9012053f, 1.0432675f, 1.2264170f, 1.5085750f}; -const float * const finegain[5] = { finegain_1, finegain_2, finegain_3, finegain_4, finegain_5 }; const Word16 finegain_1_fx[2] = { -12204, 12647 }; /* Q14 */ const Word16 finegain_2_fx[4] = { -17773, -5925, 6010, 18769 }; /* Q14 */ const Word16 finegain_3_fx[8] = { -16384, -11703, -7022, -2341, 2341, 7022, 11703, 16384 }; /* Q14 */ @@ -29240,28 +17448,28 @@ const Word16 band_width_568_22_6_2_0_0[22] = { 6, 6, 6, 6, 6, 6, 7, 8, 9, 10, 11 const Word16 band_width_640_24_6_4_0_0[24] = { 6, 6, 6, 6, 6, 6, 7,7,8,9,10,11,13,15,18,21,26,32,39,48,59, 74,92,115}; // Q0 /* LR-MDCT: NB configuration tables */ -const Xcore_Config xcore_config_8kHz_007200bps_long = { 13, L_FRAME8k, band_width_160_13_6_2_0_0, 536870912L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0.0f, 0 /*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_008000bps_long = { 14, L_FRAME8k, band_width_160_14_6_3_0_0, 536870912L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0.0f, 0 /*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_013200bps_long = { 17, L_FRAME8k, band_width_160_17_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 2, 12.0f, 24576/*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_016400bps_long = { 18, L_FRAME8k, band_width_160_18_6_4_0_0, 322122547L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0.0f, 0 /*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; +const Xcore_Config xcore_config_8kHz_007200bps_long = { 13, L_FRAME8k, band_width_160_13_6_2_0_0, 536870912L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0 /*p2a_th*/, 13107/*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_008000bps_long = { 14, L_FRAME8k, band_width_160_14_6_3_0_0, 536870912L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0 /*p2a_th*/, 13107/*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_013200bps_long = { 17, L_FRAME8k, band_width_160_17_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 2, 24576/*p2a_th*/, 13107/*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_016400bps_long = { 18, L_FRAME8k, band_width_160_18_6_4_0_0, 322122547L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0 /*p2a_th*/, 13107/*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; -const Xcore_Config xcore_config_8kHz_007200bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0.0f, 0/*p2a_th*/, 0.30f, 9830 /*pd_thresh*/, 0.09f, 2949/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_008000bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 1181116006L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 0, 0.0f, 0/*p2a_th*/, 0.30f, 9830 /*pd_thresh*/, 0.09f, 2949/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_013200bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 751619276L, 24576, 24576/*eref*/, 11469, 11469/*bit_alloc_weight*/, 2, 4, 0, 0.0f, 0/*p2a_th*/, 0.70f, 22938/*pd_thresh*/, 0.11f, 3604/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_8kHz_016400bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 536870912L, 24576, 24576/*eref*/, 11469, 11469/*bit_alloc_weight*/, 2, 6, 0, 0.0f, 0/*p2a_th*/, 0.90f, 22491/*pd_thresh*/, 0.11f, 3604/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; +const Xcore_Config xcore_config_8kHz_007200bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 2, 0, 0/*p2a_th*/,9830 /*pd_thresh*/, 2949/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_008000bps_short = { 4, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_4_6_0_0_0, 1181116006L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 0, 0/*p2a_th*/,9830 /*pd_thresh*/, 2949/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_013200bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 751619276L, 24576, 24576/*eref*/, 11469, 11469/*bit_alloc_weight*/, 2, 4, 0, 0/*p2a_th*/,22938/*pd_thresh*/, 3604/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_8kHz_016400bps_short = { 5, L_FRAME8k / NUM_TIME_SWITCHING_BLOCKS, band_width_40_5_6_0_0_0, 536870912L, 24576, 24576/*eref*/, 11469, 11469/*bit_alloc_weight*/, 2, 6, 0, 0/*p2a_th*/,22491/*pd_thresh*/, 3604/*ld_slope*/, 19661/*ni_coef*/ }; /* LR-MDCT: WB configuration tables */ -const Xcore_Config xcore_config_16kHz_013200bps_long = { 18, L_FRAME16k, band_width_320_18_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13106, 13106/*bit_alloc_weight*/, 2, 6, 3, 12.0f, 24576/*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.12f, 3932/*ld_slope*/, 1.1f, 18022/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_16kHz_016400bps_long = { 20, L_FRAME16k, band_width_320_20_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13106, 13106/*bit_alloc_weight*/, 2, 6, 3, 12.0f, 24576/*p2a_th*/, 0.40f, 13107/*pd_thresh*/, 0.12f, 3932/*ld_slope*/, 1.2f, 19660/*ni_coef*/, 0.32f }; +const Xcore_Config xcore_config_16kHz_013200bps_long = { 18, L_FRAME16k, band_width_320_18_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13106, 13106/*bit_alloc_weight*/, 2, 6, 3, 24576/*p2a_th*/, 13107/*pd_thresh*/, 3932/*ld_slope*/, 18022/*ni_coef*/ }; +const Xcore_Config xcore_config_16kHz_016400bps_long = { 20, L_FRAME16k, band_width_320_20_6_3_0_0, 429496730L, 24576, 24576/*eref*/, 13106, 13106/*bit_alloc_weight*/, 2, 6, 3, 24576/*p2a_th*/, 13107/*pd_thresh*/, 3932/*ld_slope*/, 19660/*ni_coef*/ }; -const Xcore_Config xcore_config_16kHz_013200bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 9830, 9830/*bit_alloc_weight*/, 2, 4, 0, 0.0f, 0 /*p2a_th*/, 0.30f, 9830 /*pd_thresh*/, 0.13f, 4258/*ld_slope*/, 1.1f, 18022/*ni_coef*/, 0.32f }; -const Xcore_Config xcore_config_16kHz_016400bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 11468, 11468/*bit_alloc_weight*/, 2, 8, 0, 0.0f, 0 /*p2a_th*/, 0.30f, 9830 /*pd_thresh*/, 0.13f, 4258/*ld_slope*/, 1.2f, 19660/*ni_coef*/, 0.32f }; +const Xcore_Config xcore_config_16kHz_013200bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 9830, 9830/*bit_alloc_weight*/, 2, 4, 0, 0 /*p2a_th*/, 9830 /*pd_thresh*/, 4258/*ld_slope*/, 18022/*ni_coef*/ }; +const Xcore_Config xcore_config_16kHz_016400bps_short = { 7, L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, band_width_80_7_6_0_0_0, 966367642L, 24576, 24576/*eref*/, 11468, 11468/*bit_alloc_weight*/, 2, 8, 0, 0 /*p2a_th*/, 9830 /*pd_thresh*/, 4258/*ld_slope*/, 19660/*ni_coef*/ }; /* LR-MDCT: SWB configuration tables */ -const Xcore_Config xcore_config_32kHz_013200bps_long = { 22, 568, band_width_568_22_6_2_0_0, 322122547L, 24576, 24576/*eref*/, 6554, 6554/*bit_alloc_weight*/, 2, 4, 5, 14.0f, 28672/*p2a_th*/, 0.40f, 13107 /*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.26f }; -const Xcore_Config xcore_config_32kHz_016400bps_long = { 24, 640, band_width_640_24_6_4_0_0, 322122547L, 24576, 24576/*eref*/, 8192, 8192/*bit_alloc_weight*/, 2, 4, 5, 14.0f, 28672/*p2a_th*/, 0.40f, 13107 /*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.26f }; -const Xcore_Config xcore_config_32kHz_013200bps_short = { 8, 568 / NUM_TIME_SWITCHING_BLOCKS, band_width_142_8_8_0_0_0, 1610612736L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 0, 0.0f, 0 /*p2a_th*/, 0.50f, 16384 /*pd_thresh*/, 0.11f, 3604/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.48f }; -const Xcore_Config xcore_config_32kHz_016400bps_short = { 8, 640 / NUM_TIME_SWITCHING_BLOCKS, band_width_160_8_8_0_0_0, 644245094L, 24576, 24576/*eref*/, 8192, 8192/*bit_alloc_weight*/, 2, 4, 0, 0.0f, 0 /*p2a_th*/, 0.30f, 9830 /*pd_thresh*/, 0.13f, 4260/*ld_slope*/, 1.2f, 19661/*ni_coef*/, 0.32f }; +const Xcore_Config xcore_config_32kHz_013200bps_long = { 22, 568, band_width_568_22_6_2_0_0, 322122547L, 24576, 24576/*eref*/, 6554, 6554/*bit_alloc_weight*/, 2, 4, 5, 28672/*p2a_th*/, 13107 /*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_32kHz_016400bps_long = { 24, 640, band_width_640_24_6_4_0_0, 322122547L, 24576, 24576/*eref*/, 8192, 8192/*bit_alloc_weight*/, 2, 4, 5, 28672/*p2a_th*/, 13107 /*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_32kHz_013200bps_short = { 8, 568 / NUM_TIME_SWITCHING_BLOCKS, band_width_142_8_8_0_0_0, 1610612736L, 24576, 24576/*eref*/, 13107, 13107/*bit_alloc_weight*/, 2, 4, 0, 0 /*p2a_th*/, 16384 /*pd_thresh*/, 3604/*ld_slope*/, 19661/*ni_coef*/ }; +const Xcore_Config xcore_config_32kHz_016400bps_short = { 8, 640 / NUM_TIME_SWITCHING_BLOCKS, band_width_160_8_8_0_0_0, 644245094L, 24576, 24576/*eref*/, 8192, 8192/*bit_alloc_weight*/, 2, 4, 0, 0 /*p2a_th*/, 9830 /*pd_thresh*/, 4260/*ld_slope*/, 19661/*ni_coef*/ }; /* bandwidths */ const Word16 Nb[ NB_SFM] = @@ -32409,18 +20617,10 @@ const float FFT_RotVector_960[1860] = { /* HVQ */ -const float hvq_thr_adj[5] = { 0.7071068f, 0.5000000f, 0.2500000f, 0.5000000f, 0.7071068f}; const Word16 hvq_thr_adj_fx[5] = { 23170, 16384, 8192, 16384, 23170 }; /* Q15 */ const Word16 hvq_index_mapping_fx[4] = { 0, 1, 3, 4 }; -const float hvq_class_c[16] = -{ - -0.2324457f, -0.4390556f, 0.0651793f, 0.2109977f, - 0.1471332f, -0.1351437f, 0.4312476f, -0.1384814f, - -0.1384814f, 0.4312476f, -0.1351437f, 0.1471332f, - 0.2109977f, 0.0651793f, -0.4390556f, -0.2324457f -}; const Word16 hvq_class_c_fx[16] = /* Q15 */ { -7617, -14387, 2136, 6914, @@ -32448,265 +20648,6 @@ const Word16 hvq_cb_search_overlap32k[21] = 128 }; // Q0 -const float hvq_peak_cb[1024] = -{ - -0.6912956f, -0.6271097f, -0.7024875f, 0.4262808f, - -0.7780800f, -0.8390081f, -0.2123103f, 0.1755754f, - -0.6005284f, -0.6187206f, -0.1867433f, 0.5583949f, - -0.1626335f, -0.6971197f, -0.6486326f, 0.4250869f, - -0.8399908f, -0.8860587f, 0.0171807f, 0.2217064f, - -0.7976624f, -0.4009260f, -0.2953390f, 0.2432917f, - -0.0157667f, -0.6356865f, -0.3266405f, 0.8188483f, - -0.8489450f, -0.6545582f, 0.0063441f, 0.1921560f, - -0.4517379f, -0.8665710f, -0.2336057f, 0.1562026f, - 0.4618506f, -0.7325841f, -0.6645442f, 0.7730063f, - -0.3442883f, -0.7223252f, -0.6207414f, -0.0612312f, - -0.4947599f, -0.7362953f, 0.2769519f, 0.6891029f, - -0.6117975f, -0.7841619f, -0.0077496f, 0.1986304f, - -0.5240943f, -0.9067913f, 0.0485043f, 0.2167943f, - -0.5396412f, -0.1256491f, -0.1235545f, 0.6819669f, - -0.8648130f, -0.4241201f, 0.0204877f, 0.2068082f, - -0.5605495f, -0.5470207f, -0.2261054f, 0.1577327f, - -0.6742380f, -0.5969556f, 0.0214089f, 0.1821478f, - -0.2017185f, -0.8361119f, -0.1487647f, 0.2677230f, - -0.9043679f, -0.1694224f, 0.0082920f, 0.2133927f, - -0.2797693f, -0.6069181f, -0.2787998f, 0.1967338f, - -0.7057108f, -0.7816155f, 0.2978523f, 0.1754361f, - -0.3176815f, -0.9099026f, 0.0490125f, 0.2141907f, - -0.4198575f, -0.7583196f, 0.0635993f, 0.2175556f, - -0.5430584f, -0.4931615f, 0.0181889f, 0.2223880f, - -0.6798062f, -0.3401114f, 0.0158910f, 0.1975791f, - -0.4111015f, -0.6318658f, -0.0022674f, 0.2056921f, - 0.0577086f, -0.4957561f, -0.3895008f, 0.4151040f, - -0.0493461f, -0.8356919f, -0.2944458f, 0.0766301f, - -0.6653519f, -0.3581038f, -0.1475882f, -0.0488843f, - -0.2951041f, -0.8518280f, 0.1970185f, 0.1934331f, - -0.7088394f, -0.1404796f, 0.0230110f, 0.1779071f, - -0.2349629f, -0.7451124f, 0.0672633f, 0.1989080f, - -0.8420037f, 0.0843352f, 0.0575119f, 0.2087238f, - -0.4653422f, -0.3204370f, 0.0104996f, 0.2118398f, - -0.4042698f, -0.2978680f, -0.1369022f, 0.1310524f, - -0.3691715f, -0.4627771f, 0.0194469f, 0.1874501f, - -0.7932880f, -0.4999925f, 0.5272518f, 0.1987127f, - -0.3157207f, -0.7989150f, 0.0281708f, -0.0724433f, - -0.4063714f, -0.5531399f, 0.2087681f, 0.2166726f, - -0.6433928f, -0.7400934f, 0.1283951f, -0.2888276f, - -0.6992665f, -0.2153651f, 0.2638986f, 0.2449246f, - 0.0759221f, -0.6326668f, -0.0243810f, 0.4197445f, - -0.1053094f, -0.3928218f, 0.0776661f, 0.5284011f, - 0.0786145f, -0.5979541f, -0.3155530f, 0.1330860f, - -0.2138216f, -0.5920822f, 0.0591093f, 0.2060311f, - 0.5341295f, -0.7605932f, -0.5172090f, 0.2604366f, - -0.1048604f, -0.8851262f, 0.1927255f, 0.1973499f, - -0.5168340f, -0.1512779f, 0.0180467f, 0.2015491f, - 0.0335269f, -0.8175794f, -0.0216168f, 0.1691676f, - -0.1815545f, -0.4323540f, -0.1449728f, 0.1241323f, - -0.3259940f, -0.4574721f, -0.2285515f, -0.1586095f, - 0.0051494f, -0.1975091f, -0.1569577f, 0.4943931f, - -0.6204569f, 0.0525578f, 0.0120660f, 0.1902273f, - -0.4779290f, -0.6992531f, 0.7534508f, 0.4339787f, - -0.1187649f, -0.6976845f, 0.1573026f, 0.1922948f, - -0.2681343f, -0.3088476f, 0.0065871f, 0.2084513f, - -0.3780985f, -0.3375740f, 0.1472063f, 0.1975328f, - -0.2351356f, -0.1280155f, -0.1625378f, 0.2005500f, - -0.0170806f, -0.6339361f, -0.0847550f, 0.0556140f, - -0.2045688f, -0.4398525f, 0.0735149f, 0.1856326f, - -0.3233196f, -0.7640965f, 0.4361117f, 0.1472444f, - 0.0629942f, -0.7853858f, 0.5146322f, 0.6244928f, - -0.0839811f, -0.8881392f, 0.3847862f, 0.2300789f, - -0.2330840f, -0.5500582f, 0.0594403f, 0.0210406f, - -0.3345076f, -0.1781868f, 0.0208460f, 0.1883004f, - -0.7935783f, 0.3725855f, 0.3278117f, 0.4754694f, - -0.0642284f, -0.2632120f, -0.1505273f, 0.2129149f, - -0.3033468f, -0.4616954f, 0.3710885f, 0.2992681f, - -0.4248384f, -0.0016876f, 0.0134380f, 0.1927050f, - -0.0092953f, -0.1855540f, 0.3449483f, 0.7852289f, - -0.3791312f, -0.0964576f, 0.2097941f, 0.3001604f, - -0.0848375f, -0.5015270f, 0.1259740f, 0.1763195f, - 0.5429158f, -0.3354102f, -0.2024174f, 0.6442416f, - 0.3773962f, -0.8102532f, -0.3228953f, -0.0772150f, - -0.2048677f, -0.3115774f, 0.1465945f, 0.1916357f, - -0.1810441f, 0.0864401f, 0.1519246f, 0.5593738f, - 0.0822840f, -0.7269843f, -0.3622333f, -0.4062700f, - 0.1607091f, -0.3317170f, -0.2421061f, 0.1359637f, - -0.0962719f, -0.3355251f, 0.0679005f, 0.1770951f, - 0.0250174f, -0.3651731f, -0.0426421f, 0.1630863f, - -0.1534063f, -0.2206571f, 0.0377216f, 0.1773635f, - -0.0503107f, -0.6410940f, 0.2730565f, 0.1690477f, - -0.4957757f, -0.0244409f, -0.0162808f, -0.0955787f, - -0.2524313f, -0.0397484f, 0.0112025f, 0.1818186f, - -0.8109849f, -0.1058945f, 0.2174591f, -0.2708842f, - -0.1470562f, -0.1641739f, -0.1197168f, 0.0447477f, - 0.0588656f, -0.6303298f, 0.1348466f, 0.1117979f, - 0.0743650f, -0.8166042f, 0.3325572f, 0.1713777f, - -0.2014585f, -0.3172087f, 0.0655640f, 0.0041949f, - 0.4579843f, -0.6991156f, -0.1204969f, 0.1891217f, - -0.2764455f, -0.8453921f, 0.7031553f, 0.1247506f, - 0.2536679f, -0.0081430f, 0.0907404f, 0.7806163f, - -0.1158093f, -0.1102171f, -0.0149151f, 0.1648406f, - 0.2353252f, -0.7899960f, 0.1050820f, 0.0800406f, - -0.7417480f, 0.0943212f, 0.4042825f, 0.0998893f, - -0.0950040f, -0.0430378f, 0.1080511f, 0.3676440f, - 0.0093255f, -0.3641596f, -0.1371177f, -0.0609554f, - -0.5714336f, 0.2519692f, 0.2317291f, 0.2202618f, - -0.4146698f, -0.2566845f, 0.2659634f, -0.0347036f, - -0.3670773f, 0.1802618f, 0.5463926f, 0.6508593f, - -0.0678326f, -0.7015804f, 0.3010046f, -0.0498279f, - -0.0220688f, -0.1813971f, 0.0217875f, 0.1577779f, - 0.0649310f, -0.4638375f, 0.0635012f, 0.0496216f, - -0.0147237f, -0.2600337f, 0.2481463f, 0.3285215f, - 0.0016037f, -0.3668163f, 0.1572298f, 0.1535826f, - 0.0720517f, -0.4195340f, 0.7542142f, 0.8043668f, - 0.0327889f, -0.8709202f, 0.5519686f, 0.1322237f, - 0.0325743f, -0.6758953f, 0.4356905f, 0.1690573f, - 0.0222460f, -0.4592628f, 0.2421902f, 0.1418606f, - -0.5079813f, -0.1937920f, 0.7216264f, 0.2938249f, - -0.0027737f, -0.2586997f, 0.1006489f, 0.1311191f, - 0.1067900f, -0.2263411f, -0.0675541f, 0.0894570f, - -0.1463278f, -0.1350150f, 0.1979781f, 0.1301280f, - -0.2848267f, 0.1030649f, 0.2004989f, 0.1749749f, - 0.0528965f, -0.5370577f, 0.3406753f, 0.1271570f, - -0.0828084f, -0.4938643f, 0.4483900f, 0.1278149f, - -0.7256999f, 0.2998409f, 0.7843215f, 0.4678534f, - 0.0178764f, -0.5886182f, 0.6584490f, 0.3674424f, - 0.3457182f, -0.4777862f, 0.0898507f, 0.2238471f, - 0.2808650f, -0.5159423f, -0.1746428f, -0.1639121f, - -0.2412612f, -0.1413623f, 0.3805663f, 0.1746805f, - -0.0037664f, -0.5041469f, 0.0297737f, -0.2529321f, - 0.0385025f, -0.1210239f, -0.0919721f, -0.0045255f, - 0.0070289f, -0.0661929f, 0.0154059f, 0.1206527f, - -0.0688511f, -0.3501640f, 0.3048728f, 0.0806736f, - 0.1477360f, -0.2446724f, -0.1408905f, -0.0903137f, - 0.7393242f, -0.6937444f, 0.2281068f, 0.5408337f, - 0.2058932f, -0.1764501f, 0.1488327f, 0.2644186f, - -0.2103685f, -0.7390670f, 0.3717342f, -0.4480860f, - 0.0866347f, -0.2311362f, 0.1469333f, 0.0725029f, - 0.0817948f, -0.1216286f, 0.0533709f, 0.0628859f, - -0.0171689f, 0.0986378f, 0.0927410f, 0.1758267f, - 0.0104681f, -0.1266550f, 0.2014265f, 0.1157332f, - 0.1939706f, 0.2196828f, 0.3266076f, 0.7405447f, - -0.7823431f, -0.3710044f, 0.6980741f, -0.4465685f, - 0.0743889f, -0.2648934f, 0.2536655f, 0.0943156f, - 0.2177452f, -0.0949112f, 0.0081777f, 0.1387556f, - 0.1303671f, 0.1490959f, 0.1788726f, 0.4326436f, - 0.3473369f, -0.3169577f, -0.0234188f, 0.0441885f, - 0.0540186f, -0.8776336f, 0.8440490f, 0.1417058f, - -0.0917870f, -0.3147601f, 0.5500574f, 0.1602690f, - 0.2136007f, -0.5448702f, 0.2987510f, 0.0277404f, - 0.0474804f, -0.6571059f, 0.6386938f, 0.0971133f, - 0.8189747f, -0.7255339f, -0.0875124f, 0.1071008f, - -0.3016306f, -0.4416167f, 0.7533376f, 0.0058841f, - -0.1006996f, -0.1797670f, 0.1598059f, -0.1746155f, - -0.2759751f, -0.4375621f, 0.5324653f, -0.2187090f, - -0.0208548f, 0.0007885f, 0.1221271f, -0.0071798f, - 0.0937424f, -0.3872427f, 0.4131232f, 0.0814878f, - 0.1091490f, -0.3197269f, 0.3081368f, 0.0438068f, - 0.5405672f, -0.7493672f, 0.2284625f, 0.0522655f, - 0.2024367f, -0.2027840f, 0.0568407f, -0.0238867f, - 0.0971868f, -0.2548049f, 0.1213150f, -0.1210491f, - 0.2468838f, -0.7298202f, 0.2279600f, -0.2664659f, - 0.0852271f, -0.5106476f, 0.5313835f, 0.0594584f, - -0.1823397f, -0.4332103f, 0.0531194f, -0.6742789f, - 0.1030347f, -0.0238603f, 0.5571925f, 0.5078690f, - 0.1173396f, -0.1079135f, 0.1567269f, 0.0102248f, - 0.0996963f, -0.0219312f, 0.3216055f, 0.2366872f, - -0.3354882f, 0.1576330f, 0.5458030f, 0.1454629f, - 0.1444273f, -0.2365381f, 0.4773806f, 0.2506996f, - 0.1122540f, 0.0514636f, 0.1089756f, 0.0667886f, - -0.3413622f, 0.0448554f, 0.1877440f, -0.3506308f, - 0.1328394f, -0.0670468f, 0.0414011f, -0.0965496f, - 0.1299393f, -0.1839806f, 0.2569631f, -0.0070157f, - 0.1898328f, -0.0451201f, 0.0642396f, -0.0240266f, - -0.1290649f, -0.1413532f, 0.4606663f, -0.0510201f, - 0.0606055f, -0.4923670f, 0.4283018f, -0.1857787f, - 0.2395181f, -0.4428843f, 0.0877497f, -0.3090582f, - 0.1463607f, -0.4354426f, -0.2673760f, -0.7759982f, - 0.0363660f, -0.7473857f, 0.6714249f, -0.1897013f, - 0.0078778f, -0.3179395f, 0.8379888f, 0.3211752f, - -0.0229962f, 0.2191676f, 0.2311431f, 0.1050956f, - 0.1829474f, 0.0992829f, 0.7687454f, 0.7776823f, - 0.1946814f, -0.1941786f, 0.0124760f, -0.2574112f, - -0.1012860f, 0.0992883f, 0.3672758f, 0.0414330f, - 0.0971759f, -0.1978175f, 0.3925655f, -0.0065848f, - 0.7740223f, -0.2335201f, -0.0906675f, 0.1745083f, - 0.1516487f, -0.1042227f, 0.2148387f, -0.0795036f, - 0.0798246f, -0.6448072f, 0.8609363f, 0.0393394f, - 0.0779220f, -0.4600459f, 0.7273327f, 0.0570835f, - 0.4454859f, -0.2072924f, 0.2193948f, 0.1384101f, - 0.1703254f, -0.0609580f, 0.1299055f, -0.1323671f, - 0.1839394f, -0.3244128f, 0.3025059f, -0.1719029f, - 0.1127521f, -0.3544195f, 0.5826200f, 0.0178632f, - 0.1347488f, -0.2685010f, 0.4751232f, -0.0335460f, - -0.0268326f, 0.0229464f, 0.5944858f, 0.1651578f, - 0.1752550f, 0.0136593f, 0.3010034f, 0.0409467f, - 0.6297039f, -0.5169880f, -0.2259630f, -0.5169126f, - -0.3645581f, 0.5447856f, 0.5927204f, 0.1806151f, - 0.3826406f, -0.6356577f, 0.6929637f, 0.0339571f, - 0.1438846f, -0.1324825f, 0.3836886f, -0.1131758f, - 0.1225381f, -0.2508278f, 0.1022063f, -0.5355556f, - 0.1951728f, -0.0473224f, 0.1347071f, -0.2533568f, - 0.7506700f, -0.7468928f, 0.6686158f, 0.2984126f, - 0.1631571f, 0.0422823f, 0.2118532f, -0.1436800f, - -0.0460037f, 0.0633928f, 0.2509617f, -0.3180083f, - 0.1858027f, -0.1040863f, 0.2692820f, -0.1939493f, - 0.2203176f, 0.5295745f, 0.6812901f, 0.7900824f, - 0.2034420f, -0.0552806f, 0.0599414f, -0.4107925f, - 0.2479052f, -0.1359192f, 0.8121924f, 0.3484631f, - 0.1398457f, -0.2176905f, 0.5621405f, -0.1195728f, - -0.0080597f, 0.3218221f, 0.7571263f, 0.3912670f, - 0.2116680f, -0.6982532f, 0.3125198f, -0.7360096f, - 0.0948572f, -0.2203334f, 0.3659414f, -0.3956103f, - 0.1293136f, -0.3171252f, 0.7146217f, -0.0790813f, - 0.1411146f, -0.4510387f, 0.8887131f, -0.0377003f, - 0.2301871f, -0.0353170f, 0.5297350f, 0.0379717f, - 0.6152722f, -0.1928382f, 0.0785710f, -0.1588030f, - 0.1337912f, 0.1823085f, 0.3354832f, -0.0887607f, - 0.0494082f, -0.1225804f, 0.7939893f, 0.0220200f, - 0.1421773f, 0.3523192f, 0.4413828f, 0.1457048f, - -0.0882652f, 0.3232748f, 0.4595339f, -0.1386560f, - 0.0601664f, -0.4816208f, 0.8133457f, -0.3112419f, - 0.1845199f, -0.0171361f, 0.3659768f, -0.2448125f, - 0.1891260f, -0.0106495f, 0.2419292f, -0.3683512f, - 0.6530412f, -0.4171780f, 0.4613151f, 0.0030213f, - 0.1778989f, -0.1239391f, 0.5100323f, -0.2197134f, - -0.2717385f, 0.1272452f, 0.7572512f, -0.2318920f, - 0.3716251f, 0.1855403f, 0.5916812f, 0.3385713f, - 0.1300696f, 0.0471288f, 0.5215391f, -0.1457248f, - -0.2123145f, -0.1802899f, 0.5974199f, -0.7072856f, - 0.2174739f, -0.7171207f, 0.7595373f, -0.5396347f, - 0.1682724f, -0.1652717f, 0.7105864f, -0.1779208f, - 0.1949437f, -0.0545715f, 0.4387951f, -0.3539158f, - 0.1556118f, -0.2676762f, 0.8786431f, -0.1395478f, - 0.1839802f, -0.1270819f, 0.0981727f, -0.8218095f, - 0.1961324f, 0.0044393f, 0.2839973f, -0.5454667f, - 0.1691811f, 0.1170212f, 0.7761239f, -0.0004658f, - 0.2532176f, -0.3257096f, 0.6409724f, -0.4603164f, - 0.1836927f, -0.2327923f, 0.4239208f, -0.6877027f, - 0.8283811f, 0.0514265f, 0.3075364f, 0.1290827f, - 0.1590365f, -0.0471006f, 0.6768611f, -0.3246488f, - 0.1948562f, 0.1742693f, 0.4112475f, -0.3959884f, - 0.1608810f, 0.5362161f, 0.7247152f, 0.1551418f, - -0.0640990f, 0.2785439f, 0.4195016f, -0.6363523f, - -0.4977460f, 0.4795997f, 0.6537622f, -0.7041565f, - 0.1993300f, -0.0009453f, 0.5226769f, -0.5072073f, - 0.1647024f, -0.1025920f, 0.8690643f, -0.2884946f, - 0.1903634f, 0.0383981f, 0.4024816f, -0.6858912f, - 0.3935245f, -0.1394052f, 0.2460183f, -0.8132467f, - 0.0876800f, 0.1823305f, 0.6760031f, -0.4640969f, - 0.1928370f, -0.0154626f, 0.7054892f, -0.5314507f, - 0.7363694f, -0.4335648f, 0.3939214f, -0.6439396f, - 0.2216142f, 0.2584981f, 0.7753125f, -0.2883786f, - 0.1655171f, -0.0354699f, 0.9000988f, -0.4917610f, - 0.6522388f, 0.6980886f, 0.7493314f, 0.5121635f, - 0.2039644f, 0.0748634f, 0.4817260f, -0.8814858f, - 0.1984904f, 0.0331222f, 0.6597681f, -0.7397799f, - 0.6551378f, 0.0189344f, 0.7086707f, -0.2207969f, - 0.3331688f, 0.2704824f, 0.5667230f, -0.6593540f, - 0.2047795f, -0.0638265f, 0.8838190f, -0.7884763f, - 0.2100875f, 0.6368825f, 0.8423747f, -0.2746185f, - 0.2074577f, 0.1714071f, 0.8760290f, -0.6561672f, - 0.1851064f, 0.1440378f, 0.7655031f, -0.8835155f -}; const Word16 hvq_peak_cb_fx[1024] = /* Q15 */ { -22652,-20549,-23019, 13968,-25496,-27493, -6957, 5753,-19678,-20274, @@ -32852,16 +20793,6 @@ const Word16 hvq_cp_huff_tab[52] = const Word16 Num_bands_NB[MAX_SB_NB] = {8,8,2}; // Q0 -const float SmoothingWin_NB875[70] = -{ - 0.00000000f,0.00050347f,0.00201285f,0.00452512f,0.00803521f,0.01253604f,0.01801857f,0.02447174f,0.03188256f,0.04023611f, - 0.04951557f,0.05970223f,0.07077560f,0.08271337f,0.09549150f,0.10908426f,0.12346427f,0.13860257f,0.15446869f,0.17103064f, - 0.18825510f,0.20610736f,0.22455151f,0.24355036f,0.26306567f,0.28305814f,0.30348748f,0.32431260f,0.34549150f,0.36698157f, - 0.38873953f,0.41072154f,0.43288338f,0.45518035f,0.47756758f,0.50000000f,0.52243245f,0.54481965f,0.56711662f,0.58927846f, - 0.61126047f,0.63301843f,0.65450847f,0.67568743f,0.69651252f,0.71694189f,0.73693430f,0.75644964f,0.77544850f,0.79389262f, - 0.81174493f,0.82896936f,0.84553134f,0.86139745f,0.87653571f,0.89091575f,0.90450847f,0.91728663f,0.92922437f,0.94029778f, - 0.95048445f,0.95976388f,0.96811742f,0.97552824f,0.98198146f,0.98746395f,0.99196482f,0.99547487f,0.99798715f,0.99949653f -}; const Word16 SmoothingWin_NB875_fx[70] = /*Q15*/ { 0, 16, 66, 148, 263, 411, 590, 802, 1045, 1318, @@ -32873,11 +20804,6 @@ const Word16 SmoothingWin_NB875_fx[70] = /*Q15*/ 31145, 31450, 31723, 31966, 32178, 32357, 32505, 32620, 32702, 32752 }; -const float SmoothingWin_NB2[16] = -{ - 0.00000000f,0.00960736f,0.03806023f,0.08426519f,0.14644661f,0.22221488f,0.30865828f,0.40245484f,0.50000000f,0.59754516f, - 0.69134172f,0.77778512f,0.85355339f,0.91573481f,0.96193977f,0.99039264f -}; const Word16 SmoothingWin_NB2_fx[16] = {/* Q15 */ 0, 315, 1247, 2761, 4799, 7282, 10114, 13188, 16384, 19580, 22654, 25486, 27969, 30007, 31521, 32453 @@ -32886,20 +20812,9 @@ const Word16 SmoothingWin_NB2_fx[16] = * SC-VBR *----------------------------------------------------------------------------------*/ -const float bp1_num_coef_wb[5] = {0.9329833984375,0,-1.865966796875,0,0.9329833984375}; -const float bp1_den_coef_wb[5] = {1,0,-1.8614501953125,0,0.8704833984375}; - const Word16 bp1_num_coef_wb_fx[5] = { 15286, 0, -30572, 0, 15286, }; /* Q14 */ const Word16 bp1_den_coef_wb_fx[5] = { 16384, 0, -30498, 0, 14262, }; /* Q14 */ - -const float shape1_num_coef[11] = -{ - 0.959381103515625f, -0.074554443359375f, -0.4161376953125f, 0.1317138671875f, - -0.3109130859375f, 0.00146484375f, 0.080535888671875f, -0.109100341796875f, - -0.023681640625f, 0.03192138671875f, 0.012176513671875f -}; - const Word16 shape1_num_coef_fx[11] = /* Q15 */ { 31437, -2443, -13636, 4316, @@ -32907,26 +20822,12 @@ const Word16 shape1_num_coef_fx[11] = /* Q15 */ -776, 1046, 399 }; -const float shape1_den_coef[11] = -{ - 1, 0.0897216796875f, -0.373443603515625f, 0.123046875f, -0.293243408203125f, - -0.06097412109375f, 0.071258544921875f, -0.1190185546875f, -0.048675537109375f, - 0.026153564453125f, 0.007720947265625f -}; - const Word16 shape1_den_coef_fx[11] = { 32767, /* Q15 */ 2940, -12237, 4032, -9609, -1998, 2335, -3900, -1595, 857, 253 }; -const float shape2_num_coef[11] = -{ - 0.938720703125f, 0.000946044921875f, -0.295989990234375f, 0.2904052734375f, - -0.17938232421875f, -0.221221923828125f, -0.3194580078125f, 0.01348876953125f, - 0.10003662109375f, -0.001922607421875f, 0.034027099609375f -}; - const Word16 shape2_num_coef_fx[11] = /* Q15 */ { 30760, 31, -9699, 9516, @@ -32934,26 +20835,12 @@ const Word16 shape2_num_coef_fx[11] = /* Q15 */ 3278, -63, 1115 }; -const float shape2_den_coef[11] = -{ - 1, 0.488861083984375f, -0.02716064453125f, 0.390594482421875f, 0.07159423828125f, - -0.213165283203125f, -0.402587890625f, -0.176849365234375f, -0.028961181640625f, - -0.0455322265625f, -0.00927734375f -}; - const Word16 shape2_den_coef_fx[11] = { 32767, /* Q15 */ 16019, -890, 12799, 2346, -6985, -13192, -5795, -949, -1492, -304 }; -const float shape3_num_coef[11] = -{ - 0.936431884765625f, -0.011688232421875f, -0.303253173828125f, -0.293121337890625f, - -0.183013916015625f, 0.232269287109375f, -0.317169189453125f, -0.010833740234375f, - 0.098846435546875f, 0.0003662109375f, 0.0364990234375f -}; - const Word16 shape3_num_coef_fx[11] = /* Q15 */ { 30685, -383, -9937, -9605, @@ -32961,28 +20848,12 @@ const Word16 shape3_num_coef_fx[11] = /* Q15 */ 3239, 12, 1196 }; -const float shape3_den_coef[11] = -{ - 1, -0.50347900390625f, -0.027801513671875f, -0.395111083984375f, 0.06976318359375f, - 0.22674560546875f, -0.408477783203125f, 0.18511962890625f, -0.03607177734375f, - 0.0482177734375f, -0.008331298828125f -}; - const Word16 shape3_den_coef_fx[11] = { 32767, /* Q15 */ -16498, -911, -12947, 2286, 7430, -13385, 6066, -1182, 1580, -273 }; - - -const float txlpf1_num_coef[11] = -{ - 0.016845703125, 0.024169921875, 0.062744140625, 0.0831298828125, 0.1124267578125, - 0.11767578125, 0.1124267578125, 0.0831298828125, 0.062744140625, 0.024169921875, - 0.016845703125 -}; - const Word16 txlpf1_num_coef_fx[11] = /* Q13 */ { 138, 198, 514, 681, 921, @@ -32990,12 +20861,6 @@ const Word16 txlpf1_num_coef_fx[11] = /* Q13 */ 138, }; -const float txlpf1_den_coef[11] = -{ - 1, -2.3126220703125, 3.8590087890625, -3.8023681640625, 2.989990234375, - -1.5567626953125, 0.6748046875, -0.17529296875, 0.0423583984375, -0.0030517578125, - 0.00048828125 -}; const Word16 txlpf1_den_coef_fx[11] = /* Q13 */ { @@ -33004,12 +20869,6 @@ const Word16 txlpf1_den_coef_fx[11] = /* Q13 */ 4, }; -const float txhpf1_num_coef[11] = -{ - 0.016845703125, -0.024169921875, 0.062744140625, -0.0831298828125, 0.1124267578125, - -0.11767578125, 0.1124267578125, -0.0831298828125, 0.062744140625, -0.024169921875, - 0.016845703125 -}; const Word16 txhpf1_num_coef_fx[11] = /* Q13 */ { @@ -33018,13 +20877,6 @@ const Word16 txhpf1_num_coef_fx[11] = /* Q13 */ 138, }; -const float txhpf1_den_coef[11] = -{ - 1, 2.3126220703125, 3.8590087890625, 3.8023681640625, 2.989990234375, 1.5567626953125, - 0.6748046875, 0.17529296875, 0.0423583984375, 0.0030517578125, 0.00048828125 -}; - - const Word16 txhpf1_den_coef_fx[11] = /* Q13 */ { 8192, 18945, 31613, 31149, 24494, @@ -33033,12 +20885,6 @@ const Word16 txhpf1_den_coef_fx[11] = /* Q13 */ }; /* NELP filter coefficients */ -const float bp1_num_coef_nb_fx_order7_flt[8] = -{ - 0.180780569293627f, 0.821512462016641f, 1.901786162198923f, 2.798216464912205f, - 2.798216464912205f, 1.901786162198923f, 0.821512462016641f, 0.180780569293627f -}; - const Word16 bp1_num_coef_nb_fx_order7[8] = { /* Q = BP1_COEF_NB_QF_ORDER7 = 13 */ @@ -33046,74 +20892,13 @@ const Word16 bp1_num_coef_nb_fx_order7[8] = }; -const float bp1_den_coef_nb_fx_order7_flt[8] = -{ - 1.0f, 1.972212566911875f, 2.906981567843655f, 2.667903533650106f, - 1.784691945273023f, 0.807367818229743f, 0.232764318343094f, 0.032669566591295f -}; - const Word16 bp1_den_coef_nb_fx_order7[8] = { /* Q = BP1_COEF_NB_QF_ORDER7 = 13 */ 8192, 16156, 23814, 21855, 14620, 6614, 1907, 268, }; -/* order 8 LPF for nelp frames when non-native sampling freq inputs used with -max_band NB */ -/* used to suppress frequencies above 4kHz present at the output of filters in pre_proc() */ - -const float num_nelp_lp[NELP_LP_ORDER+1] = -{ - 0.088754442436105f, 0.427948705228526f, 1.097120864220837f, 1.834535180016855f, - 2.164546590741725f, 1.833722723336889f, 1.096120298806107f, 0.427341227067866f, 0.088564563680987f -}; - -const float den_nelp_lp[NELP_LP_ORDER+1] = -{ - 1.000000000000000f, 1.076558216566388f, 2.638952788853937f, 1.485213059043660f, - 1.941109655171129f, 0.433697456681428f, 0.488030665133170f, -0.014677457543018f, 0.043067530202687f -}; - - - -/* NELP gain tables */ -const float UVG1CB_WB[UVG1_CBSIZE][2] = -{ - { -0.271424f, -0.258097f, }, - { 1.546157f, 1.503115f, }, - { 0.454480f, 1.182801f, }, - { 2.182661f, 2.194626f, }, - { 0.504902f, 0.481656f, }, - { 1.416585f, 2.597607f, }, - { 1.193427f, 1.140118f, }, - { 2.649107f, 2.640023f, }, - { 0.132870f, 0.204961f, }, - { 1.708137f, 1.672001f, }, - { 1.274749f, 0.636471f, }, - { 2.405026f, 2.403867f, }, - { 0.666233f, 0.649061f, }, - { 2.081430f, 2.065141f, }, - { 1.734086f, 1.037998f, }, - { 2.969951f, 2.962773f, }, - { -0.014392f, -0.034103f, }, - { 1.417866f, 1.814293f, }, - { 0.842041f, 0.798819f, }, - { 2.308757f, 2.275084f, }, - { 0.139464f, 0.831392f, }, - { 1.952503f, 1.961636f, }, - { 0.844903f, 1.609146f, }, - { 2.790210f, 2.775995f, }, - { 0.368318f, 0.275885f, }, - { 1.825159f, 1.830021f, }, - { 0.998048f, 0.987868f, }, - { 2.529417f, 2.508405f, }, - { 0.908356f, 0.289270f, }, - { 2.184707f, 1.707541f, }, - { 1.341007f, 1.338580f, }, - { 3.185808f, 3.172863f, }, -}; - /* NELP gain tables */ - const Word16 UVG1CB_WB_FX[UVG1_CBSIZE][2] = /* Q13 */ { { -2224, -2114, }, @@ -33150,42 +20935,6 @@ const Word16 UVG1CB_WB_FX[UVG1_CBSIZE][2] = /* Q13 */ { 26098, 25992, }, }; -const float UVG1CB_NB[UVG1_CBSIZE][2] = -{ - { -0.584898f, -0.629564f, }, - { 0.588898f, 0.602697f, }, - { -0.420328f, 0.440621f, }, - { 0.676153f, 1.866763f, }, - { -0.057218f, -0.486523f, }, - { 0.973746f, 0.995785f, }, - { 0.335472f, 0.304245f, }, - { 1.717476f, 1.710655f, }, - { -0.303435f, -0.349463f, }, - { 0.736475f, 0.719210f, }, - { 0.326864f, -0.053863f, }, - { 1.433214f, 1.440908f, }, - { -0.031290f, -0.103346f, }, - { 1.117363f, 1.089082f, }, - { -0.012970f, 0.729895f, }, - { 2.060025f, 2.043535f, }, - { -0.437514f, -0.472825f, }, - { 0.428648f, 1.164362f, }, - { 0.049001f, 0.050772f, }, - { 1.352832f, 1.287837f, }, - { -0.173046f, -0.210522f, }, - { 1.097114f, 0.641427f, }, - { 0.765980f, 0.138765f, }, - { 1.876515f, 1.861232f, }, - { -0.475929f, 0.036795f, }, - { 0.851593f, 0.866113f, }, - { 0.192944f, 0.177338f, }, - { 1.585417f, 1.565396f, }, - { 0.328590f, -0.377592f, }, - { 1.193646f, 1.239326f, }, - { 0.480756f, 0.442872f, }, - { 2.297758f, 2.282144f, }, -}; - const Word16 UVG1CB_NB_FX[UVG1_CBSIZE][2] = /* Q13 */ { { -4791, -5157, }, @@ -33222,74 +20971,6 @@ const Word16 UVG1CB_NB_FX[UVG1_CBSIZE][2] = /* Q13 */ { 18823, 18695, }, }; -const float UVG2CB1_WB[UVG2_CBSIZE][5] = -{ - { 0.223040f, 0.241651f, 0.363680f, 1.453550f, 0.639043f, }, - { 1.367034f, 1.128134f, 0.995599f, 0.852711f, 0.746318f, }, - { 1.203618f, 0.984239f, 0.732146f, 0.524829f, 0.416474f, }, - { 1.885173f, 0.737643f, 0.440409f, 0.360901f, 0.354375f, }, - { 0.285902f, 0.339404f, 1.683466f, 0.632872f, 0.362779f, }, - { 1.014419f, 1.046733f, 1.076532f, 1.102226f, 1.117500f, }, - { 0.886868f, 0.893899f, 0.901808f, 0.906043f, 0.912148f, }, - { 3.225548f, 1.222902f, 0.637340f, 0.530948f, 0.499932f, }, - { 0.907185f, 0.704885f, 0.549973f, 0.479615f, 0.420607f, }, - { 1.743322f, 1.114901f, 0.838360f, 0.725076f, 0.584914f, }, - { 0.697213f, 0.741751f, 0.795735f, 0.849916f, 0.905532f, }, - { 1.447413f, 1.332714f, 1.201884f, 1.085950f, 0.997001f, }, - { 0.239259f, 0.250031f, 0.378390f, 1.388066f, 1.962520f, }, - { 0.858277f, 1.795467f, 2.537226f, 0.883659f, 0.697253f, }, - { 0.634313f, 0.755069f, 0.874414f, 1.167114f, 1.456359f, }, - { 0.479120f, 2.683769f, 1.225698f, 0.698405f, 0.631620f, }, - { 0.194304f, 0.223532f, 0.246663f, 0.286883f, 1.884711f, }, - { 1.085250f, 1.075760f, 1.060584f, 1.037376f, 1.019217f, }, - { 0.355082f, 1.585122f, 0.637538f, 0.429221f, 0.431000f, }, - { 1.537046f, 1.876537f, 1.162872f, 0.718938f, 0.537773f, }, - { 0.366750f, 0.384063f, 0.462624f, 0.727828f, 1.333889f, }, - { 1.159580f, 1.178847f, 1.198408f, 1.203392f, 1.195077f, }, - { 0.889680f, 0.921507f, 0.957437f, 0.985704f, 1.004871f, }, - { 2.209824f, 1.807385f, 1.465675f, 1.158738f, 0.996400f, }, - { 0.380420f, 0.456231f, 0.569092f, 0.732313f, 0.877647f, }, - { 1.140464f, 1.134349f, 1.126392f, 1.111634f, 1.094200f, }, - { 0.552280f, 0.636810f, 0.771019f, 0.949718f, 1.090795f, }, - { 1.356338f, 1.328390f, 1.665898f, 1.744565f, 1.397443f, }, - { 0.358875f, 0.378330f, 0.492142f, 2.726906f, 0.934503f, }, - { 1.339929f, 1.530712f, 1.653071f, 2.002372f, 2.265826f, }, - { 0.848927f, 0.901721f, 1.004240f, 1.088962f, 1.148716f, }, - { 2.655634f, 4.390627f, 2.488829f, 1.779943f, 0.689514f, }, - { 0.323918f, 0.365752f, 0.360473f, 0.406899f, 0.521889f, }, - { 1.089529f, 1.049556f, 0.999532f, 0.947192f, 0.910775f, }, - { 0.778315f, 0.772521f, 0.770412f, 0.757735f, 0.766615f, }, - { 2.382149f, 1.389184f, 0.821738f, 0.560577f, 0.437522f, }, - { 0.422645f, 0.427987f, 3.028798f, 0.996559f, 0.548607f, }, - { 0.943902f, 0.991288f, 1.222348f, 1.287613f, 1.275699f, }, - { 0.976039f, 0.966009f, 0.952110f, 0.937347f, 0.925149f, }, - { 4.404412f, 2.299179f, 1.359051f, 0.845995f, 0.611213f, }, - { 0.527446f, 0.618156f, 0.706851f, 0.629108f, 0.566558f, }, - { 1.233373f, 1.169295f, 1.096161f, 1.026234f, 0.965180f, }, - { 0.825364f, 0.833740f, 0.844135f, 0.853512f, 0.863188f, }, - { 1.505253f, 1.418813f, 1.328096f, 1.229135f, 1.135295f, }, - { 0.693032f, 0.827423f, 1.234705f, 1.845313f, 2.542454f, }, - { 0.945943f, 1.081860f, 1.265427f, 1.540595f, 1.749407f, }, - { 1.052402f, 1.008307f, 0.871943f, 0.749492f, 2.088583f, }, - { 2.146194f, 2.016499f, 1.782081f, 1.524242f, 1.323508f, }, - { 0.290883f, 0.301913f, 0.334033f, 0.442895f, 2.885471f, }, - { 0.606905f, 1.398622f, 1.501382f, 1.030661f, 0.895216f, }, - { 0.980941f, 0.933889f, 0.878940f, 0.827155f, 0.794956f, }, - { 1.832121f, 1.420187f, 1.218118f, 0.992368f, 0.811142f, }, - { 0.349042f, 0.479090f, 1.353992f, 0.999951f, 1.142766f, }, - { 1.316650f, 1.312876f, 1.299885f, 1.276895f, 1.233464f, }, - { 0.986649f, 0.998506f, 1.008895f, 1.015456f, 1.020661f, }, - { 3.044209f, 2.251119f, 1.400128f, 0.883141f, 0.610713f, }, - { 0.606060f, 0.626282f, 0.675680f, 0.754010f, 0.845070f, }, - { 1.271739f, 1.240164f, 1.197404f, 1.148908f, 1.103891f, }, - { 0.766260f, 0.820830f, 0.890415f, 0.954560f, 1.014693f, }, - { 1.742866f, 1.608286f, 1.450560f, 1.281919f, 1.141203f, }, - { 0.419616f, 0.455676f, 1.951458f, 1.863714f, 0.973334f, }, - { 0.875636f, 1.291339f, 1.924261f, 3.300506f, 3.929508f, }, - { 0.588088f, 0.613937f, 0.671033f, 1.786119f, 1.131808f, }, - { 7.419703f, 4.514918f, 3.368681f, 1.171582f, 0.557291f, }, -}; - const Word16 UVG2CB1_WB_FX[UVG2_CBSIZE][5] = /* Q12 */ { { 914, 990, 1490, 5954, 2618, }, @@ -33358,74 +21039,6 @@ const Word16 UVG2CB1_WB_FX[UVG2_CBSIZE][5] = /* Q12 */ { 30391, 18493, 13798, 4799, 2283, }, }; -const float UVG2CB2_WB[UVG2_CBSIZE][5] = -{ - { 0.382157f, 0.339570f, 0.399108f, 1.276274f, 0.654653f, }, - { 0.526317f, 0.624477f, 1.514850f, 1.357657f, 0.962890f, }, - { 0.497765f, 0.587492f, 0.755478f, 0.832206f, 0.968825f, }, - { 1.242760f, 1.236637f, 1.218059f, 1.186075f, 1.163104f, }, - { 0.350569f, 0.423863f, 0.687511f, 0.576640f, 0.586036f, }, - { 1.068227f, 1.080389f, 1.090163f, 1.093335f, 1.096811f, }, - { 1.134662f, 0.996393f, 0.866640f, 0.727742f, 0.651101f, }, - { 0.416366f, 0.476179f, 0.898235f, 1.911077f, 2.415833f, }, - { 0.693081f, 0.445820f, 0.352293f, 0.295523f, 0.303834f, }, - { 0.338564f, 0.344193f, 0.431633f, 2.166267f, 1.070002f, }, - { 0.981922f, 0.923891f, 0.870264f, 0.809574f, 0.755981f, }, - { 2.437343f, 1.744939f, 1.275522f, 0.913573f, 0.738923f, }, - { 1.652469f, 0.575451f, 0.373855f, 0.353600f, 0.379997f, }, - { 1.120803f, 1.140296f, 1.155888f, 1.163382f, 1.169191f, }, - { 1.051700f, 1.024805f, 0.989204f, 0.951249f, 0.920163f, }, - { 0.558571f, 0.622568f, 1.201735f, 2.024839f, 3.632277f, }, - { 0.332205f, 0.361342f, 0.368816f, 0.486187f, 2.551270f, }, - { 0.716016f, 0.764423f, 0.901925f, 1.144217f, 1.269692f, }, - { 0.972618f, 0.744037f, 0.605346f, 0.645594f, 1.346183f, }, - { 1.306825f, 1.337871f, 1.339887f, 1.326540f, 1.327383f, }, - { 0.810386f, 0.703444f, 0.617077f, 0.525349f, 0.470428f, }, - { 1.189609f, 1.159137f, 1.117761f, 1.075965f, 1.039311f, }, - { 1.509928f, 1.073290f, 0.915705f, 0.830047f, 0.707661f, }, - { 0.527199f, 1.969524f, 1.839455f, 1.250142f, 0.888607f, }, - { 0.553059f, 2.484691f, 0.928542f, 0.631924f, 0.595981f, }, - { 0.534157f, 0.538470f, 1.048001f, 3.098313f, 1.438832f, }, - { 0.875629f, 0.891265f, 0.918069f, 0.943470f, 0.966723f, }, - { 3.212350f, 2.380788f, 1.750784f, 1.325976f, 1.309454f, }, - { 1.393980f, 1.018875f, 0.714902f, 0.510150f, 0.433226f, }, - { 0.861995f, 0.935236f, 1.133018f, 1.412823f, 1.616763f, }, - { 1.073054f, 1.063390f, 1.045198f, 1.023854f, 1.003573f, }, - { 0.547694f, 0.604539f, 1.419472f, 0.968088f, 6.634663f, }, - { 0.384404f, 0.407015f, 1.841710f, 0.733522f, 0.484417f, }, - { 0.630723f, 0.612993f, 2.852480f, 1.407572f, 1.173696f, }, - { 0.886615f, 0.844153f, 0.800046f, 0.760230f, 0.725250f, }, - { 2.092080f, 1.654743f, 1.432156f, 1.346378f, 1.255149f, }, - { 0.797508f, 0.740916f, 0.717801f, 0.679101f, 0.657052f, }, - { 0.959244f, 1.037313f, 1.117438f, 1.190695f, 1.260351f, }, - { 1.084782f, 1.018723f, 0.943477f, 0.876418f, 0.814781f, }, - { 0.976114f, 1.153683f, 1.398515f, 1.677934f, 1.925023f, }, - { 1.066698f, 0.689574f, 0.546216f, 0.402266f, 0.342894f, }, - { 0.244053f, 0.249520f, 0.360608f, 0.654699f, 3.729612f, }, - { 0.955958f, 0.940178f, 0.919330f, 0.894537f, 0.876740f, }, - { 3.224046f, 1.094907f, 0.788658f, 0.951478f, 0.890611f, }, - { 2.441966f, 0.858237f, 0.584262f, 0.545170f, 0.539909f, }, - { 1.123818f, 1.180721f, 1.238015f, 1.283992f, 1.321097f, }, - { 0.956697f, 0.985042f, 1.019696f, 1.050902f, 1.078825f, }, - { 0.743688f, 2.034202f, 4.022331f, 2.727508f, 2.650772f, }, - { 0.250845f, 0.245822f, 0.291984f, 0.385336f, 1.449503f, }, - { 0.461815f, 0.591238f, 0.787875f, 0.956948f, 1.806615f, }, - { 0.875089f, 0.862359f, 0.856436f, 0.847061f, 0.839057f, }, - { 1.309442f, 1.502701f, 1.661279f, 1.673280f, 1.662961f, }, - { 0.985927f, 0.857309f, 0.739752f, 0.643488f, 0.569376f, }, - { 1.650427f, 1.495147f, 1.278185f, 1.049539f, 0.900202f, }, - { 1.006963f, 1.593657f, 0.993154f, 0.790603f, 0.850326f, }, - { 1.225572f, 1.441567f, 1.728901f, 2.088278f, 2.349483f, }, - { 0.341446f, 1.432559f, 0.749195f, 0.421280f, 0.404079f, }, - { 1.145314f, 1.033705f, 0.970105f, 0.917177f, 2.347552f, }, - { 0.971156f, 0.977194f, 0.977277f, 0.972506f, 0.966892f, }, - { 0.513513f, 4.115618f, 2.258778f, 1.186578f, 1.154071f, }, - { 1.963588f, 1.292572f, 0.969148f, 0.756260f, 0.630658f, }, - { 1.142688f, 1.247234f, 1.361439f, 1.456244f, 1.531956f, }, - { 1.188195f, 1.119173f, 1.043934f, 0.966349f, 0.898995f, }, - { 0.296171f, 0.760591f, 1.599661f, 5.561118f, 5.121441f, }, -}; - const Word16 UVG2CB2_WB_FX[UVG2_CBSIZE][5] = /* Q12 */ { { 1565, 1391, 1635, 5228, 2681, }, @@ -33494,75 +21107,6 @@ const Word16 UVG2CB2_WB_FX[UVG2_CBSIZE][5] = /* Q12 */ { 1213, 3115, 6552, 22778, 20977, }, }; - -const float UVG2CB1_NB[UVG2_CBSIZE][5] = -{ - { 0.188739f, 0.191757f, 0.191531f, 0.191578f, 0.209839f, }, - { 0.869071f, 0.859505f, 0.832542f, 0.797074f, 0.773080f, }, - { 0.431109f, 0.727906f, 2.508026f, 0.925174f, 0.548901f, }, - { 1.217337f, 1.160289f, 1.097694f, 1.018471f, 0.957574f, }, - { 0.497102f, 0.495688f, 0.490534f, 0.481662f, 0.463058f, }, - { 0.803575f, 0.867673f, 0.944431f, 1.007241f, 1.060698f, }, - { 0.783034f, 0.762224f, 0.738827f, 0.711210f, 0.682893f, }, - { 3.227538f, 1.670940f, 0.968417f, 0.670516f, 0.602001f, }, - { 0.379041f, 0.397159f, 0.339889f, 0.431105f, 0.898154f, }, - { 1.313227f, 1.132838f, 0.938410f, 0.794448f, 0.643291f, }, - { 0.390638f, 0.395881f, 0.593166f, 2.306134f, 1.028762f, }, - { 1.248727f, 1.269418f, 1.296714f, 1.309796f, 1.304405f, }, - { 1.520874f, 0.734382f, 0.485483f, 0.396077f, 0.389855f, }, - { 0.421502f, 0.516180f, 1.720254f, 1.504402f, 1.050148f, }, - { 0.245081f, 0.257874f, 0.449391f, 1.466236f, 1.733604f, }, - { 1.559619f, 2.358229f, 1.100964f, 0.677191f, 0.515930f, }, - { 0.258870f, 0.281444f, 0.341911f, 0.423056f, 0.517793f, }, - { 0.841801f, 0.860159f, 0.881827f, 0.899050f, 0.920338f, }, - { 0.365189f, 0.499345f, 0.710492f, 0.869768f, 0.990808f, }, - { 1.078960f, 1.121199f, 1.170587f, 1.201313f, 1.215423f, }, - { 0.343519f, 1.297406f, 0.680773f, 0.408835f, 0.329668f, }, - { 1.027852f, 1.031491f, 1.031891f, 1.021937f, 1.017812f, }, - { 0.548592f, 2.012860f, 1.072282f, 0.615844f, 0.417353f, }, - { 1.760444f, 1.645651f, 1.491751f, 1.317721f, 1.142677f, }, - { 0.879361f, 0.558186f, 0.385066f, 0.300063f, 0.280186f, }, - { 1.629306f, 1.276033f, 0.873148f, 0.597645f, 0.464031f, }, - { 0.233010f, 0.252664f, 0.263381f, 0.410771f, 2.333462f, }, - { 0.979199f, 1.428996f, 2.192152f, 1.742747f, 1.094684f, }, - { 0.679754f, 0.659549f, 0.643852f, 0.621674f, 0.603191f, }, - { 1.077752f, 0.992367f, 1.129539f, 1.027383f, 2.264297f, }, - { 0.676422f, 0.735375f, 0.819505f, 0.911898f, 0.992613f, }, - { 4.819767f, 2.100243f, 0.962614f, 0.621495f, 0.509149f, }, - { 0.276365f, 0.274270f, 0.270315f, 0.266915f, 0.271854f, }, - { 0.955282f, 0.937005f, 0.911375f, 0.886292f, 0.866125f, }, - { 0.231384f, 0.382150f, 1.480144f, 0.647910f, 0.407074f, }, - { 1.503587f, 1.359087f, 1.192322f, 1.035379f, 0.920358f, }, - { 0.225897f, 0.284201f, 0.386850f, 1.479923f, 0.754288f, }, - { 0.932117f, 0.985694f, 1.055295f, 1.107535f, 1.153749f, }, - { 1.047555f, 0.950740f, 0.840054f, 0.733910f, 0.667261f, }, - { 2.085890f, 1.583746f, 1.211518f, 0.930697f, 0.725212f, }, - { 0.425680f, 0.429169f, 0.415950f, 0.398797f, 0.384700f, }, - { 1.078194f, 1.039819f, 0.987399f, 0.930104f, 0.885793f, }, - { 0.468506f, 0.527117f, 0.811323f, 3.412384f, 1.928112f, }, - { 1.453081f, 1.399223f, 1.322881f, 1.235534f, 1.155194f, }, - { 0.677564f, 0.686571f, 0.612173f, 0.620178f, 1.607781f, }, - { 0.838759f, 0.966836f, 1.138047f, 1.458807f, 1.531620f, }, - { 0.752352f, 0.769151f, 0.792542f, 0.814617f, 0.830990f, }, - { 0.998295f, 3.910764f, 2.022774f, 1.004988f, 0.660092f, }, - { 0.346421f, 0.347923f, 0.341870f, 0.334828f, 0.332826f, }, - { 0.933744f, 0.949722f, 0.965032f, 0.974951f, 0.980120f, }, - { 0.609754f, 0.656553f, 0.694920f, 0.735124f, 0.784513f, }, - { 1.250595f, 1.226482f, 1.191682f, 1.145255f, 1.104473f, }, - { 0.557881f, 0.567717f, 0.565744f, 0.564657f, 0.554475f, }, - { 1.096985f, 1.105627f, 1.102877f, 1.093358f, 1.084804f, }, - { 2.230968f, 0.968956f, 0.615720f, 0.542594f, 0.589697f, }, - { 2.443527f, 2.128707f, 1.780354f, 1.424964f, 1.106474f, }, - { 0.202766f, 0.221654f, 0.253737f, 0.404291f, 1.663403f, }, - { 0.505346f, 1.337503f, 1.263272f, 0.954743f, 0.901882f, }, - { 0.385023f, 0.382150f, 0.399218f, 0.630553f, 3.211494f, }, - { 1.364681f, 1.413025f, 1.445785f, 1.648508f, 1.724301f, }, - { 0.991474f, 0.853670f, 0.661673f, 0.512336f, 0.418893f, }, - { 0.671308f, 0.761259f, 4.046266f, 1.926581f, 0.891469f, }, - { 0.634219f, 0.750043f, 0.930049f, 1.197664f, 1.262605f, }, - { 3.747086f, 2.672835f, 1.889530f, 1.215477f, 0.841197f, }, -}; - const Word16 UVG2CB1_NB_FX[UVG2_CBSIZE][5] = /* Q12 */ { { 773, 785, 785, 785, 860, }, @@ -33628,75 +21172,7 @@ const Word16 UVG2CB1_NB_FX[UVG2_CBSIZE][5] = /* Q12 */ { 4061, 3497, 2710, 2099, 1716, }, { 2750, 3118, 16574, 7891, 3651, }, { 2598, 3072, 3809, 4906, 5172, }, - { 15348, 10948, 7740, 4979, 3446, }, -}; - -const float UVG2CB2_NB[UVG2_CBSIZE][5]= -{ - { 0.234676f, 0.211553f, 0.198300f, 0.188137f, 0.189102f, }, - { 0.621072f, 0.655881f, 0.734889f, 0.880212f, 1.232321f, }, - { 0.372062f, 0.443795f, 0.705281f, 0.739519f, 0.743747f, }, - { 1.024051f, 1.049997f, 1.079370f, 1.098001f, 1.118202f, }, - { 0.494519f, 0.485721f, 0.479727f, 0.474381f, 0.473326f, }, - { 1.059136f, 1.014755f, 0.967436f, 0.915428f, 0.876510f, }, - { 1.887753f, 0.709034f, 0.440367f, 0.343384f, 0.369381f, }, - { 0.393820f, 0.574466f, 2.762395f, 1.407229f, 1.047606f, }, - { 0.370772f, 0.356840f, 0.349999f, 0.327343f, 0.316005f, }, - { 0.397170f, 0.417453f, 0.528104f, 2.356989f, 1.370805f, }, - { 0.566954f, 1.780471f, 0.793633f, 0.493204f, 0.504320f, }, - { 1.212718f, 1.247958f, 1.263151f, 1.270187f, 1.276770f, }, - { 0.388100f, 0.353795f, 0.474245f, 1.451972f, 0.869892f, }, - { 1.891456f, 1.262146f, 0.797925f, 0.583916f, 0.508257f, }, - { 0.969344f, 0.868915f, 0.772349f, 0.677308f, 0.608680f, }, - { 0.486474f, 0.539484f, 0.782305f, 0.907366f, 5.745668f, }, - { 0.289328f, 0.301705f, 0.347406f, 0.516255f, 1.165024f, }, - { 0.960737f, 0.937409f, 0.906673f, 0.874736f, 0.848802f, }, - { 0.400429f, 0.378419f, 0.439385f, 0.636950f, 2.656142f, }, - { 0.992977f, 1.083218f, 1.174551f, 1.247095f, 1.351591f, }, - { 0.359381f, 0.333729f, 0.374249f, 0.520426f, 1.795028f, }, - { 1.052276f, 1.045824f, 1.029194f, 1.005147f, 0.990365f, }, - { 2.640896f, 1.119783f, 0.637471f, 0.504513f, 0.497219f, }, - { 0.510018f, 0.592500f, 1.147016f, 3.572948f, 1.835225f, }, - { 0.617425f, 0.380988f, 0.295255f, 0.238370f, 0.230673f, }, - { 0.709915f, 0.749521f, 0.990016f, 1.431043f, 1.574221f, }, - { 0.653333f, 0.698564f, 0.760571f, 0.804532f, 0.831992f, }, - { 0.715875f, 3.498556f, 1.594958f, 0.912733f, 0.845138f, }, - { 0.898701f, 0.751704f, 0.624648f, 0.525250f, 0.464610f, }, - { 1.375977f, 1.297850f, 1.215381f, 1.145089f, 1.080297f, }, - { 0.561123f, 1.764692f, 1.703012f, 1.037951f, 0.817155f, }, - { 0.611282f, 0.835322f, 1.656358f, 2.071091f, 3.677700f, }, - { 0.305955f, 0.288104f, 0.277282f, 0.266999f, 0.262681f, }, - { 0.842437f, 0.860463f, 0.878879f, 0.890085f, 0.905076f, }, - { 0.415168f, 0.495616f, 1.605015f, 1.158622f, 1.086554f, }, - { 1.144592f, 1.160015f, 1.162718f, 1.153999f, 1.152784f, }, - { 0.726849f, 0.577021f, 0.459744f, 0.381537f, 0.341456f, }, - { 1.240211f, 1.143782f, 1.043599f, 0.936329f, 0.857727f, }, - { 1.329362f, 0.934539f, 0.696166f, 0.547436f, 0.475481f, }, - { 0.470979f, 1.229760f, 4.335935f, 2.037582f, 1.538102f, }, - { 0.448859f, 0.435001f, 0.410153f, 0.387131f, 0.374390f, }, - { 0.753476f, 0.847563f, 0.984091f, 1.208422f, 2.367011f, }, - { 0.781083f, 0.745169f, 0.707134f, 0.671579f, 0.640062f, }, - { 1.421280f, 1.411590f, 1.398311f, 1.358993f, 1.337416f, }, - { 0.377859f, 0.545381f, 1.647399f, 0.625545f, 0.420396f, }, - { 1.635438f, 1.273369f, 1.092522f, 0.862149f, 0.739370f, }, - { 0.921246f, 0.885689f, 0.844748f, 0.800456f, 0.770371f, }, - { 0.385947f, 0.408195f, 0.715197f, 4.936704f, 4.011602f, }, - { 0.295343f, 0.296573f, 0.339012f, 0.409703f, 0.531531f, }, - { 0.943088f, 0.948849f, 0.961247f, 0.966943f, 0.973872f, }, - { 0.376239f, 0.425963f, 0.446486f, 0.849370f, 3.799501f, }, - { 1.085015f, 1.208963f, 1.360517f, 1.478597f, 1.597861f, }, - { 0.600520f, 0.585154f, 0.557646f, 0.520820f, 0.498211f, }, - { 1.173770f, 1.141539f, 1.096824f, 1.055073f, 1.028510f, }, - { 3.669747f, 1.622178f, 0.809242f, 0.707943f, 0.704413f, }, - { 0.977405f, 1.162230f, 1.695878f, 2.019914f, 2.051052f, }, - { 1.221003f, 0.609077f, 0.389066f, 0.326390f, 0.333196f, }, - { 0.836930f, 0.904878f, 0.994299f, 1.088050f, 1.140088f, }, - { 0.812087f, 0.799997f, 0.786734f, 0.767023f, 0.753822f, }, - { 1.504493f, 1.542127f, 1.585432f, 1.577024f, 1.594146f, }, - { 0.649261f, 0.634440f, 0.619454f, 0.606033f, 0.621463f, }, - { 2.088260f, 1.685051f, 1.277621f, 1.004769f, 0.891082f, }, - { 1.133569f, 1.000746f, 0.882781f, 0.781417f, 0.706843f, }, - { 2.340990f, 6.501577f, 3.762808f, 3.059604f, 2.127793f, }, + { 15348, 10948, 7740, 4979, 3446, }, }; const Word16 UVG2CB2_NB_FX[UVG2_CBSIZE][5] = /* Q12 */ @@ -33767,22 +21243,8 @@ const Word16 UVG2CB2_NB_FX[UVG2_CBSIZE][5] = /* Q12 */ { 9589, 26630, 15412, 12532, 8715, }, }; -const float frac_4sf[NB_SUBFR+2] = {0.25f,0.5f,0.75f,1.0f,1.0f,1.0f}; - const Word16 frac_4sf_fx[NB_SUBFR + 2] = { 4,8,12,16,16,16 }; /* Q4 */ -/* ERB table for PPP-ampl-quant */ -const float erb_WB[NUM_ERB_WB+1] = {0.0f, 92.8061f, 185.6121f, 278.4182f, 371.2243f, 464.0304f, 556.8364f, 649.6425f, 746.4f, 853.6f, - 972.5f, 1104.0f, 1251.8f, 1415.8f, 1599.2f, 1804.6f, 2035.2f, 2294.9f, 2588.4f, 2921.2f, 3300.1f, - 3733.7f, 4400.0f, 5300.0f, 6400.0f+1 - }; - -/* ERB table for PPP-ampl-quant */ -const float erb_NB[NUM_ERB_NB+1] = {0.0f, 92.8061f, 185.6121f, 278.4182f, 371.2243f, 464.0304f, 556.8364f, 649.6425f, 746.4f, 853.6f, - 972.5f, 1104.0f, 1251.8f, 1415.8f, 1599.2f, 1804.6f, 2035.2f, 2294.9f, 2588.4f, 2921.2f, 3300.1f, - 3733.7f, 4000.0f+1.0f - }; - /* ERB table for PPP-ampl-quant */ const Word16 erb_WB_fx[NUM_ERB_WB + 1] = { 0, 238, 475, 713, 950, 1188, 1426, 1663, 1911, 2185, 2490, 2826, 3205, 3624, 4094, 4620, 5210, 5875, 6626, 7478, 8448, 9558, 11264, 13568, 16387 };//Q(log2(2.56) @@ -33794,75 +21256,6 @@ const Word16 erb_NB_fx[NUM_ERB_NB + 1] = { 0, 238, 475, 713, 950, 1188, 1426, 16 /*Amplitude and power tables for PPP*/ - -const float AmpCB1_WB[64][10] = -{ - { 0.6903076f, 0.1939697f, -0.0797119f, 0.4355469f, -0.3873291f, -0.2260742f, -0.3911133f, -0.5643311f, -0.2563477f, -0.6229248f, }, - { -0.1126709f, -0.0081787f, -0.8730469f, -0.6052246f, -0.2464600f, -0.2209473f, -1.0415039f, -0.0791016f, 0.8033447f, 0.9818115f, }, - { 0.0195313f, 0.0949707f, -0.1873779f, 0.1053467f, 0.6691895f, 0.2043457f, -0.4365234f, 0.0150146f, -0.3861084f, -0.4388428f, }, - { -0.1040039f, -0.0064697f, -0.1318359f, -0.3275146f, -0.3905029f, -0.1159668f, -0.1651611f, 0.7639160f, -0.1746826f, 0.1524658f, }, - { 0.2513428f, 0.0826416f, 0.0178223f, 0.1234131f, 0.1166992f, -0.2468262f, -0.0030518f, 0.0366211f, 0.0513916f, -0.7152100f, }, - { 0.1253662f, -0.0551758f, -0.8963623f, -0.1284180f, 0.4660645f, 0.1341553f, -0.1226807f, 0.0804443f, -0.0623779f, -0.0803223f, }, - { 0.2552490f, 0.0878906f, -0.0732422f, 0.0177002f, -0.1835938f, -0.2094727f, -0.0539551f, -0.2651367f, -0.1837158f, 0.3298340f, }, - { 0.0892334f, 0.1798096f, -0.0260010f, -0.5029297f, -0.3632813f, 0.0839844f, 0.3912354f, 0.1480713f, 0.0828857f, 0.0283203f, }, - { 0.4482422f, 0.5822754f, -0.1462402f, -0.0363770f, -0.2092285f, -0.4478760f, -0.3458252f, -0.0810547f, -0.2269287f, -0.2905273f, }, - { -0.1427002f, -0.1944580f, -0.0552979f, 0.0360107f, -0.1495361f, -0.3796387f, -0.2167969f, 0.2578125f, 0.3308105f, 0.4068604f, }, - { 0.1247559f, 0.1523438f, 0.1331787f, 0.1420898f, 0.1464844f, 0.2175293f, -0.0987549f, -0.2814941f, -0.3813477f, -0.2678223f, }, - { -0.1912842f, 0.0567627f, 0.2713623f, -0.1588135f, -0.0565186f, -0.2633057f, 0.0889893f, 0.2781982f, -0.2365723f, 0.0744629f, }, - { 0.0533447f, -0.0980225f, -0.1251221f, 0.0946045f, -0.0208740f, -0.0777588f, 0.0198975f, 0.2747803f, 0.0385742f, -0.2030029f, }, - { -0.5032959f, -0.0024414f, -0.3450928f, -0.1866455f, -0.1752930f, 0.4207764f, 0.0096436f, -0.0334473f, 0.2014160f, 0.5001221f, }, - { 0.2891846f, 0.1131592f, 0.0546875f, -0.0548096f, 0.0357666f, -0.0291748f, -0.1254883f, -0.5865479f, 0.1652832f, 0.0526123f, }, - { -0.2708740f, -0.0598145f, -0.4698486f, 0.2000732f, -0.3570557f, 0.0997314f, 0.1812744f, 0.3084717f, 0.6645508f, -0.2434082f, }, - { 0.1801758f, 0.0617676f, -0.2005615f, 0.2445068f, -0.2045898f, -0.0961914f, -0.2052002f, -0.2454834f, 0.1695557f, 0.0551758f, }, - { 0.0723877f, 0.0003662f, -0.1464844f, -0.4866943f, -0.1994629f, -0.5261230f, -0.0837402f, 0.1076660f, 0.7611084f, 0.2954102f, }, - { -0.0239258f, -0.1534424f, -0.2487793f, -0.0607910f, 0.1701660f, 0.0819092f, -0.2810059f, -0.0987549f, -0.0544434f, 0.4448242f, }, - { -0.2005615f, -0.2812500f, -0.1010742f, 0.0128174f, -0.0394287f, -0.4768066f, -0.1171875f, 0.8940430f, 0.3778076f, -0.0959473f, }, - { 0.0115967f, 0.0772705f, 0.1545410f, 0.0915527f, 0.1842041f, -0.2481689f, -0.3825684f, 0.0527344f, 0.1254883f, -0.2227783f, }, - { 0.1535645f, 0.0312500f, -0.3966064f, -0.8383789f, -0.0638428f, -0.0396729f, -0.2171631f, 0.5264893f, 0.3081055f, 0.4190674f, }, - { -0.0732422f, -0.0500488f, -0.0107422f, 0.0500488f, -0.1442871f, -0.1391602f, -0.1767578f, -0.1640625f, -0.6193848f, 0.7390137f, }, - { 0.2678223f, 0.1837158f, -0.0831299f, -0.2939453f, 0.1679688f, 0.1695557f, 0.1475830f, 0.1279297f, -0.5125732f, -0.3587646f, }, - { 0.2264404f, 0.2128906f, -0.1640625f, -0.1746826f, -0.2386475f, -0.2203369f, -0.6093750f, 0.0625000f, 0.0761719f, 0.3355713f, }, - { -0.4206543f, -0.1483154f, -0.4594727f, -0.2647705f, -0.4395752f, -0.1612549f, 0.0081787f, 0.5280762f, 0.8085938f, 0.7099609f, }, - { -0.0407715f, -0.2131348f, -0.0538330f, -0.0920410f, 0.2261963f, 0.4747314f, -0.0726318f, -0.0601807f, 0.0538330f, -0.0989990f, }, - { -0.0058594f, -0.0932617f, -0.1798096f, -0.0833740f, 0.0736084f, -0.2141113f, 0.0952148f, 0.0852051f, 0.1323242f, 0.2091064f, }, - { 0.0683594f, -0.0986328f, -0.0920410f, -0.3527832f, -0.1470947f, -0.0388184f, -0.1246338f, 0.3900146f, 0.6949463f, -0.5618896f, }, - { 0.1639404f, -0.1295166f, -0.2979736f, -0.2177734f, 0.0880127f, 0.0325928f, 0.0277100f, -0.0759277f, 0.3677979f, -0.0937500f, }, - { -0.0576172f, 0.0109863f, 0.0015869f, 0.0354004f, 0.1287842f, 0.1157227f, 0.1973877f, -0.2890625f, -0.1326904f, 0.1346436f, }, - { -0.5839844f, -0.4726563f, 0.6256104f, -0.3073730f, -0.0262451f, 0.8498535f, 0.1336670f, -0.1856689f, 0.2552490f, -0.3615723f, }, - { 0.2789307f, 0.1363525f, 0.1433105f, 0.3216553f, -0.2327881f, -0.1235352f, 0.0993652f, -0.0509033f, -0.2639160f, -0.3424072f, }, - { -0.1450195f, -0.0863037f, -0.0986328f, -0.2144775f, 0.0317383f, -0.1334229f, -0.4830322f, -0.3986816f, 0.5043945f, 0.7299805f, }, - { 0.0216064f, -0.1804199f, 0.1171875f, 0.2476807f, 0.4869385f, 0.0728760f, -0.3737793f, -0.4809570f, -0.2060547f, 0.0288086f, }, - { -0.1903076f, 0.0183105f, 0.2968750f, 0.0424805f, -0.0295410f, -0.2458496f, -0.1253662f, 0.7687988f, -0.3609619f, -0.4833984f, }, - { 0.1330566f, 0.1237793f, -0.1539307f, -0.0908203f, -0.1164551f, -0.1145020f, -0.4532471f, -0.3994141f, 0.6538086f, -0.2875977f, }, - { -0.1756592f, 0.4648438f, -0.2844238f, -0.5416260f, 0.6319580f, -0.4401855f, -0.1687012f, 0.2226563f, 0.0496826f, 0.0396729f, }, - { 0.0792236f, 0.0402832f, 0.0103760f, 0.0251465f, -0.0506592f, 0.0223389f, -0.0788574f, 0.0734863f, -0.3242188f, 0.0986328f, }, - { 0.1268311f, 0.0035400f, -0.3908691f, -0.7529297f, -0.4443359f, 0.4560547f, 0.5106201f, 0.4832764f, 0.0402832f, 0.0413818f, }, - { 0.3297119f, 0.0418701f, 0.1832275f, 0.2293701f, -0.3898926f, -0.5673828f, -0.1989746f, 0.2021484f, -0.1926270f, -0.0102539f, }, - { -0.3741455f, -0.5036621f, 0.0029297f, -0.0317383f, 0.0321045f, -0.2081299f, -0.1573486f, 0.2968750f, 0.1500244f, 0.9132080f, }, - { 0.3156738f, 0.2070313f, 0.0788574f, -0.2164307f, -0.0966797f, 0.2358398f, -0.2329102f, -0.2315674f, -0.1378174f, 0.0136719f, }, - { -0.6917725f, -0.1943359f, 0.2750244f, -0.1196289f, 0.1929932f, 0.0257568f, 0.6441650f, 0.5915527f, -0.0351563f, -0.0194092f, }, - { 0.1166992f, 0.1459961f, 0.0941162f, -0.1187744f, -0.2178955f, -0.0629883f, -0.1239014f, 0.1033936f, 0.0749512f, -0.0965576f, }, - { -0.0539551f, -0.1945801f, -0.5654297f, -0.5361328f, -0.0507813f, 0.1706543f, 0.3137207f, 0.0917969f, 0.0322266f, 0.8020020f, }, - { 0.2020264f, 0.0666504f, 0.1511230f, -0.1662598f, -0.1623535f, -0.2447510f, 0.4382324f, -0.2630615f, -0.0224609f, -0.1494141f, }, - { -0.1772461f, -0.1871338f, -0.0651855f, 0.1232910f, -0.2083740f, 0.0977783f, 0.4428711f, -0.0352783f, 0.2946777f, 0.0161133f, }, - { 0.3226318f, -0.3433838f, -0.5522461f, 0.6215820f, -0.8986816f, 0.0903320f, 0.0522461f, -0.0622559f, 0.0098877f, -0.1475830f, }, - { 0.0751953f, 0.1774902f, 0.2271729f, -0.4831543f, -0.4985352f, 0.0230713f, -0.1488037f, -0.1068115f, 0.4594727f, 0.2546387f, }, - { -0.1896973f, -0.2528076f, 0.1849365f, 0.4140625f, 0.0014648f, -0.0837402f, -0.2946777f, -0.1687012f, 0.0214844f, 0.2056885f, }, - { 0.2508545f, -0.6955566f, 0.1931152f, 0.5025635f, -0.5915527f, -0.3566895f, 0.0744629f, 0.2541504f, 0.5715332f, -0.3035889f, }, - { 0.0424805f, 0.2756348f, -0.0412598f, -0.1683350f, 0.1796875f, 0.0754395f, -0.0246582f, -0.1369629f, -0.0092773f, -0.3012695f, }, - { -0.1484375f, -0.1203613f, -0.0399170f, -0.1759033f, 0.0124512f, 0.0491943f, -0.2569580f, 0.2943115f, 0.1843262f, 0.1572266f, }, - { -0.0872803f, -0.0704346f, 0.1311035f, 0.3092041f, -0.4298096f, -0.4210205f, 0.2612305f, -0.0916748f, -0.0374756f, 0.4644775f, }, - { 0.0192871f, -0.1690674f, -0.0493164f, -0.1682129f, -0.2377930f, 0.4620361f, 0.5146484f, 0.3255615f, -0.2312012f, -0.1903076f, }, - { 0.1265869f, 0.1673584f, 0.1207275f, -0.0250244f, -0.0406494f, -0.5839844f, -0.4185791f, -0.1566162f, 0.4027100f, 0.1048584f, }, - { -0.6008301f, -0.6690674f, -0.1459961f, -0.2133789f, -0.0878906f, 0.0629883f, 0.0137939f, 0.5603027f, 0.8631592f, 0.5303955f, }, - { -0.6993408f, -0.4714355f, 0.4382324f, 0.1785889f, 0.8659668f, 0.6092529f, 0.1042480f, -0.0080566f, -0.1989746f, -0.0837402f, }, - { -0.1126709f, -0.3986816f, -0.2426758f, 0.2862549f, 0.0958252f, -0.1733398f, 0.3666992f, 0.3581543f, -0.1519775f, -0.0079346f, }, - { -0.3291016f, -0.3769531f, -0.1755371f, 0.0749512f, 0.1933594f, -0.0291748f, -0.1894531f, 0.0708008f, 0.7672119f, -0.2042236f, }, - { -0.1950684f, -0.4904785f, -0.2330322f, 0.0911865f, 0.3895264f, 0.0446777f, 0.1790771f, -0.2359619f, 0.3367920f, 0.3422852f, }, - { 0.0632324f, 0.0235596f, -0.1402588f, -0.3793945f, 0.0538330f, 0.1779785f, 0.3406982f, -0.5042725f, 0.3288574f, 0.4116211f, }, - { -0.6131592f, -0.7923584f, 0.2189941f, 0.3343506f, 0.1785889f, 0.7132568f, 0.3502197f, 0.2432861f, -0.1719971f, 0.5898438f, }, -}; - const Word16 AmpCB1_WB_fx[640] = {//Q13 5655, 1589, -653, 3568, -3173, -1852, -3204, -4623, -2100, -5103, @@ -33931,74 +21324,6 @@ const Word16 AmpCB1_WB_fx[640] = -5023, -6491, 1794, 2739, 1463, 5843, 2869, 1993, -1409, 4832 }; -const float AmpCB2_WB[64][NUM_ERB_WB-11] = -{ - { -0.6440430f, -0.9412842f, -0.4294434f, -0.2949219f, -0.0466309f, 0.0389404f, -0.2319336f, -0.1098633f, 0.2105713f, 0.1079102f, 0.4969482f, }, - { -0.4946289f, -0.2966309f, -0.0410156f, 0.2607422f, 0.3669434f, 0.0721436f, -0.4752197f, -0.3333740f, 0.3204346f, 0.2917480f, -0.1278076f, }, - { -0.1077881f, -0.4111328f, -0.5169678f, -0.4548340f, 0.0230713f, -0.2200928f, 0.0957031f, 0.2851563f, 0.0251465f, -0.2612305f, 0.3663330f, }, - { -0.0891113f, -0.2781982f, 0.0103760f, -0.4144287f, 0.5330811f, 0.2702637f, -0.0310059f, -0.3801270f, -0.2866211f, 0.3372803f, 0.0837402f, }, - { -0.9149170f, -0.8078613f, 0.3862305f, -0.4830322f, -0.3272705f, -0.2501221f, 0.2025146f, 0.4436035f, 0.3615723f, 0.1921387f, 0.0462646f, }, - { -0.3024902f, 0.3492432f, 0.0751953f, 0.1372070f, 0.0250244f, -0.3753662f, -0.0424805f, -0.2448730f, -0.0109863f, 0.0928955f, 0.1412354f, }, - { -0.0139160f, -1.1547852f, -0.3400879f, -0.3972168f, -0.1367188f, -0.1831055f, -0.0544434f, 0.3460693f, -0.0383301f, 0.3912354f, 0.2581787f, }, - { -0.1021729f, -0.0318604f, 0.0043945f, 0.0097656f, -0.0592041f, 0.1383057f, 0.2592773f, -0.1258545f, -0.0489502f, -0.3864746f, 0.1397705f, }, - { -0.1972656f, -0.4180908f, -0.3748779f, -0.8411865f, -0.5124512f, 0.2797852f, 0.6298828f, -0.0056152f, 0.1745605f, 0.0341797f, 0.1682129f, }, - { 0.2075195f, -0.2042236f, -0.1374512f, 0.6433105f, 0.6220703f, -0.1190186f, -0.1306152f, 0.1604004f, -0.2916260f, -0.3640137f, 0.0024414f, }, - { -0.3928223f, -0.1088867f, -0.0776367f, -0.1069336f, -0.0368652f, -0.3568115f, -0.3955078f, 0.5030518f, 0.1983643f, -0.0679932f, 0.1213379f, }, - { 0.0664063f, 0.3243408f, 0.8707275f, -0.0333252f, -0.4309082f, -0.1732178f, 0.1746826f, -0.1142578f, -0.3200684f, 0.0369873f, 0.0091553f, }, - { -0.6645508f, -0.6773682f, 0.5106201f, 0.1523438f, 0.4240723f, -0.0963135f, 0.2899170f, -0.2170410f, 0.2026367f, 0.1855469f, -0.1749268f, }, - { -0.4940186f, 0.0648193f, 0.8546143f, 0.0848389f, 0.2305908f, 0.5201416f, -0.3406982f, -0.1900635f, -0.3637695f, -0.0385742f, 0.0506592f, }, - { 0.1384277f, 0.1832275f, -0.8450928f, 0.0635986f, -0.3825684f, -0.2211914f, 0.2255859f, 0.0825195f, -0.2115479f, 0.0895996f, 0.2694092f, }, - { 0.2476807f, -0.0581055f, -0.2412109f, -0.0196533f, 0.0035400f, 0.8724365f, -0.2165527f, 0.0878906f, -0.1306152f, -0.0454102f, -0.1984863f, }, - { -0.7901611f, -0.2988281f, -0.6390381f, -0.3236084f, -0.2197266f, -0.1802979f, -0.0936279f, 0.1629639f, 0.0574951f, 0.5928955f, 0.1083984f, }, - { 0.0723877f, -0.0451660f, 0.0239258f, 0.1107178f, 0.0212402f, 0.0679932f, -0.0878906f, -0.1634521f, 0.1940918f, 0.0045166f, -0.1522217f, }, - { -0.1595459f, 0.0336914f, -0.2122803f, -0.7363281f, -0.3769531f, -0.3050537f, -0.0606689f, -0.0479736f, -0.0694580f, 0.3665771f, 0.3288574f, }, - { 0.4578857f, 0.5678711f, -0.0314941f, -0.1593018f, 0.0213623f, 0.0230713f, -0.0419922f, -0.2906494f, -0.2431641f, 0.0565186f, 0.0645752f, }, - { -0.7781982f, 0.4841309f, -0.4343262f, -0.3663330f, -0.0781250f, 0.3804932f, 0.1367188f, 0.1179199f, 0.1606445f, -0.0684814f, 0.0032959f, }, - { 0.3410645f, 0.3455811f, 0.4287109f, 0.4215088f, -0.0510254f, -0.2830811f, -0.8228760f, -0.4202881f, 0.0097656f, 0.1563721f, 0.2064209f, }, - { 0.1831055f, -0.0721436f, -0.0902100f, 0.2911377f, -0.5708008f, -0.7106934f, -0.1754150f, 0.0891113f, 0.4385986f, -0.0533447f, 0.1330566f, }, - { 0.4268799f, -0.2358398f, 0.3483887f, 0.5930176f, 0.3239746f, 0.1156006f, 0.2293701f, -0.5023193f, 0.3295898f, -0.3774414f, -0.1860352f, }, - { 0.0274658f, -1.0097656f, -0.8222656f, -0.1558838f, 0.3651123f, 0.3641357f, 0.1378174f, -0.2027588f, 0.3438721f, 0.0571289f, 0.0599365f, }, - { -0.0908203f, 0.0476074f, 0.0826416f, 0.9923096f, -0.3820801f, -0.0838623f, -0.0528564f, 0.1816406f, -0.4593506f, -0.0216064f, -0.0709229f, }, - { -0.0932617f, 0.0047607f, 0.1876221f, -0.2689209f, -0.2048340f, 0.0321045f, -0.1481934f, 0.2655029f, -0.2266846f, 0.3780518f, -0.1091309f, }, - { 0.5135498f, -0.2371826f, -0.1018066f, 0.1846924f, -0.5032959f, 0.4859619f, 0.7374268f, 0.0797119f, -0.0924072f, -0.0382080f, -0.3691406f, }, - { -0.5632324f, -0.3831787f, -0.3620605f, 0.0217285f, 0.6049805f, -0.0521240f, -0.0050049f, 0.2900391f, 0.1230469f, -0.1649170f, -0.0112305f, }, - { 0.1193848f, 0.2438965f, 0.6281738f, 0.2525635f, 0.0142822f, -0.2141113f, -0.3364258f, 0.5401611f, 0.0205078f, -0.2205811f, -0.2149658f, }, - { -0.1483154f, 0.0217285f, -0.1906738f, -0.4112549f, -0.1121826f, -0.3144531f, 0.4411621f, 0.6064453f, -0.0036621f, -0.0483398f, -0.1405029f, }, - { -0.1398926f, 0.1059570f, 0.1309814f, -0.0438232f, 0.3334961f, 0.0666504f, 0.5408936f, -0.0391846f, -0.1319580f, 0.1721191f, -0.3923340f, }, - { -0.2827148f, -0.5968018f, -0.3002930f, -0.4692383f, -0.8939209f, -0.1755371f, -0.1816406f, 0.2257080f, 0.4927979f, 0.2955322f, 0.3292236f, }, - { -0.2895508f, -0.2291260f, 0.0817871f, 0.4484863f, -0.1107178f, 0.1083984f, -0.4520264f, 0.0457764f, -0.1560059f, -0.1802979f, 0.3052979f, }, - { -0.1142578f, -0.2053223f, -0.1651611f, -0.0408936f, -0.5419922f, 0.0467529f, -0.3332520f, -0.2600098f, -0.1348877f, 0.1938477f, 0.4077148f, }, - { 0.5878906f, -0.4910889f, 0.0612793f, -0.5061035f, 0.0288086f, 0.5469971f, 0.0718994f, -0.4511719f, 0.1008301f, -0.0118408f, 0.0270996f, }, - { -0.9810791f, -0.2739258f, 0.0173340f, 0.0988770f, -0.2679443f, 0.1605225f, 0.0800781f, 0.2320557f, -0.0592041f, 0.0386963f, 0.1845703f, }, - { 0.1788330f, -0.2473145f, 0.2261963f, 0.1134033f, 0.2038574f, -0.3339844f, -0.0565186f, -0.1020508f, -0.6037598f, -0.0163574f, 0.3380127f, }, - { 0.3627930f, -0.6284180f, -0.3841553f, 0.1114502f, -0.1810303f, 0.0325928f, -0.1904297f, 0.4764404f, 0.1839600f, 0.1348877f, -0.1826172f, }, - { 0.0256348f, -0.1459961f, 0.4594727f, 0.0733643f, 0.1989746f, 0.4689941f, 0.7780762f, -0.1578369f, -0.5560303f, -0.3768311f, 0.0242920f, }, - { -0.2340088f, -0.4066162f, -0.2828369f, -0.2165527f, 0.0584717f, 0.4531250f, 0.3331299f, 0.1597900f, -0.3719482f, -0.0627441f, 0.1051025f, }, - { -0.0260010f, 0.1607666f, -0.2484131f, 0.5333252f, 0.6381836f, 0.1149902f, -0.3725586f, -0.2827148f, -0.4122314f, 0.1370850f, -0.0079346f, }, - { 0.3060303f, 0.3309326f, -0.2558594f, -0.2641602f, -0.3215332f, -0.6365967f, -0.4783936f, 0.1893311f, -0.0057373f, 0.2429199f, 0.2893066f, }, - { 0.2471924f, -0.2930908f, 0.5899658f, -0.4735107f, -0.0197754f, -0.3760986f, 0.0611572f, -0.0622559f, 0.3349609f, -0.1107178f, 0.0308838f, }, - { -0.2131348f, -0.3076172f, 0.4172363f, -0.1783447f, 0.2612305f, 0.3060303f, 0.0164795f, 0.1778564f, 0.3900146f, -0.1558838f, -0.3122559f, }, - { -0.0080566f, 1.3244629f, -0.1993408f, -0.1282959f, -0.4194336f, -0.1973877f, 0.1755371f, -0.1502686f, -0.2128906f, 0.0849609f, -0.0424805f, }, - { 0.4191895f, 0.2589111f, -0.1988525f, -0.3002930f, -0.4962158f, 0.1414795f, -0.1572266f, 0.3470459f, 0.0850830f, -0.1052246f, 0.0004883f, }, - { 0.1179199f, -0.0541992f, -0.2270508f, 0.1770020f, 0.7844238f, 0.6767578f, 0.1777344f, -0.3449707f, -0.1590576f, -0.3391113f, -0.1560059f, }, - { -0.8125000f, -0.3956299f, -0.8646240f, 0.2727051f, 0.0249023f, 0.2139893f, 0.0980225f, 0.0609131f, 0.2003174f, 0.0106201f, 0.1795654f, }, - { -0.1617432f, 0.0485840f, 0.3641357f, 0.5297852f, -0.1687012f, 0.0897217f, -0.0732422f, -0.5701904f, -0.0310059f, 0.2840576f, -0.1230469f, }, - { -0.0175781f, -0.1773682f, -0.2204590f, -0.2037354f, 0.0482178f, -0.4010010f, -0.2200928f, -0.2586670f, 0.1503906f, 0.3557129f, 0.1806641f, }, - { 1.0510254f, 0.2182617f, 0.3227539f, 0.1658936f, 0.4617920f, -0.0134277f, -0.1634521f, -0.1632080f, -0.4183350f, -0.0769043f, -0.1451416f, }, - { -0.3125000f, 0.1191406f, 0.0589600f, -0.3349609f, -0.4459229f, -0.1573486f, 0.3552246f, -0.2974854f, 0.3870850f, 0.1805420f, 0.0191650f, }, - { 0.1004639f, 0.5653076f, -0.2331543f, 0.4560547f, -0.0517578f, -0.0189209f, -0.6677246f, -0.0904541f, 0.4674072f, -0.3410645f, -0.0067139f, }, - { -0.1766357f, -0.4234619f, -0.2376709f, 0.3557129f, -0.0074463f, -0.4187012f, 0.4326172f, -0.2279053f, 0.3645020f, 0.1231689f, -0.1282959f, }, - { 0.0885010f, 0.3580322f, 0.3571777f, 0.7139893f, 0.0313721f, -0.3254395f, 0.7673340f, -0.2785645f, -0.3659668f, -0.3144531f, -0.1190186f, }, - { -0.4461670f, -0.2279053f, -0.6152344f, -0.1757813f, 0.4323730f, -0.0736084f, 0.5866699f, -0.3427734f, -0.1993408f, 0.1694336f, 0.1402588f, }, - { -0.1972656f, -0.2259521f, 0.2590332f, 0.5465088f, 0.3033447f, 0.1679688f, 0.0880127f, 0.2653809f, -0.3750000f, 0.1682129f, -0.3142090f, }, - { -0.0045166f, 0.1613770f, -0.2009277f, -0.4409180f, 0.5423584f, 0.1967773f, -0.4154053f, 0.0867920f, 0.0161133f, 0.0145264f, -0.0277100f, }, - { 0.6175537f, 0.3530273f, 0.1025391f, 0.6667480f, -0.4237061f, -0.1635742f, 0.2559814f, 0.0174561f, 0.2136230f, -0.3725586f, -0.2358398f, }, - { -0.7753906f, -0.5085449f, -0.0787354f, 0.5269775f, 0.0772705f, 0.4493408f, 0.3431396f, 0.2863770f, 0.2897949f, -0.3660889f, -0.1544189f, }, - { -0.0256348f, 0.6243896f, 0.5678711f, 0.1593018f, 0.4521484f, -0.1777344f, -0.0374756f, -0.0557861f, -0.1776123f, -0.4370117f, 0.0822754f, }, - { 0.2703857f, 0.3000488f, -0.3687744f, -0.0080566f, 0.3094482f, -0.0795898f, 0.1496582f, 0.0836182f, 0.1068115f, -0.2139893f, -0.1420898f, }, - { -0.0743408f, 0.4204102f, 0.0687256f, 0.4670410f, 0.1961670f, 0.4636230f, 0.1690674f, 0.4763184f, -0.2429199f, -0.4978027f, -0.3062744f, }, -}; - const Word16 AmpCB2_WB_fx[64 * (NUM_ERB_WB - 13)] = {//Q13 -5276, -7711, -3518, -2416, -382, 319, -1900, -900, 1725, 884, @@ -34074,74 +21399,6 @@ const Word16 AmpCB2_WB_fx[64 * (NUM_ERB_WB - 13)] = 3902, -1990, -4078, -2509 }; -const float AmpCB1_NB[64][10] = -{ - { -0.1654053f, 0.0225830f, -0.0270996f, -0.0269775f, 0.2412109f, 0.3807373f, 0.0659180f, 0.1627197f, -0.4450684f, -0.3065186f, }, - { -0.1195068f, 0.2031250f, 0.2547607f, 0.1160889f, 0.0960693f, -0.2059326f, -0.1043701f, 0.1945801f, 0.1542969f, -0.6091309f, }, - { -0.2388916f, -0.0262451f, -0.1037598f, 0.1671143f, -0.0137939f, 0.3101807f, -0.3544922f, 0.0906982f, 0.0773926f, -0.0802002f, }, - { -0.4196777f, -0.2498779f, 0.0861816f, 0.0103760f, -0.0727539f, -0.0061035f, 0.0258789f, 0.1152344f, 0.0144043f, 0.1684570f, }, - { -0.1468506f, -0.0095215f, -0.0260010f, -0.2210693f, -0.0953369f, -0.2404785f, 0.8065186f, -0.3626709f, 0.0179443f, -0.1810303f, }, - { 0.0046387f, 0.6844482f, 0.6374512f, -0.5574951f, -0.4931641f, -0.2757568f, -0.3796387f, -0.2587891f, 0.1137695f, -0.0288086f, }, - { -0.1284180f, 0.1268311f, -0.1064453f, 0.0407715f, -0.1121826f, 0.3370361f, 0.4052734f, -0.7114258f, 0.0064697f, 0.1297607f, }, - { -0.1298828f, -0.0091553f, -0.1239014f, -0.2608643f, -0.0881348f, 0.0689697f, 0.0767822f, 0.2393799f, -0.0554199f, 0.1057129f, }, - { -0.1083984f, 0.3237305f, 0.2436523f, -0.2648926f, -0.1080322f, 0.4058838f, -0.0787354f, -0.2316895f, -0.1201172f, -0.0784912f, }, - { -0.1230469f, 0.3017578f, 0.2929688f, -0.4526367f, -0.2939453f, -0.1282959f, 0.2476807f, 0.1656494f, -0.0776367f, -0.0573730f, }, - { -0.1595459f, 0.0799561f, 0.0809326f, 0.0035400f, 0.1088867f, -0.0115967f, -0.0111084f, -0.3620605f, -0.1965332f, 0.3243408f, }, - { -0.2655029f, -0.3869629f, -0.4637451f, -0.3741455f, 0.1379395f, 0.1649170f, 0.4655762f, 0.3406982f, 0.1804199f, 0.1855469f, }, - { -0.1618652f, -0.0634766f, -0.0844727f, 0.1097412f, 0.2415771f, -0.0484619f, -0.0496826f, 0.0549316f, -0.0694580f, -0.0745850f, }, - { -0.1499023f, 0.1054688f, 0.3111572f, 0.3743896f, -0.3065186f, -0.5782471f, -0.3297119f, -0.0371094f, 0.0830078f, 0.1740723f, }, - { -0.1306152f, -0.0023193f, -0.1931152f, -0.3433838f, -0.2236328f, 0.3674316f, 0.0305176f, -0.0748291f, 0.4138184f, -0.0208740f, }, - { -0.1770020f, -0.0509033f, -0.0943604f, -0.0794678f, -0.0494385f, -0.2812500f, -0.0952148f, 0.8125000f, -0.3991699f, -0.1613770f, }, - { 0.0085449f, 0.6231689f, 0.3908691f, -0.0101318f, -0.1129150f, -0.0559082f, 0.1468506f, -0.1931152f, -0.5075684f, -0.4431152f, }, - { -0.2077637f, -0.1036377f, -0.0067139f, -0.1203613f, -0.2396240f, -0.1391602f, -0.2370605f, 0.4085693f, 0.4304199f, -0.0531006f, }, - { -0.1744385f, -0.2550049f, -0.1977539f, -0.1551514f, 0.3480225f, 0.2666016f, -0.3017578f, 0.3925781f, 0.3521729f, -0.3566895f, }, - { -0.1485596f, 0.0104980f, -0.0227051f, -0.0340576f, -0.0910645f, 0.1572266f, 0.3681641f, -0.0794678f, -0.3319092f, 0.0386963f, }, - { -0.1595459f, -0.0155029f, -0.1354980f, 0.1695557f, 0.0258789f, 0.2176514f, 0.3197021f, -0.2097168f, 0.2191162f, -0.4987793f, }, - { -0.1580811f, 0.0906982f, 0.0367432f, -0.2225342f, -0.0272217f, -0.0794678f, -0.2165527f, -0.0494385f, 0.2059326f, 0.2479248f, }, - { -0.1055908f, 0.1292725f, -0.0477295f, 0.0616455f, -0.3343506f, -0.3385010f, 0.0019531f, -0.3613281f, 0.3748779f, 0.4058838f, }, - { -0.0965576f, 0.2808838f, 0.0531006f, 0.0130615f, -0.4930420f, 0.0977783f, -0.1494141f, 0.2263184f, -0.1268311f, 0.0618896f, }, - { -0.0632324f, 0.1217041f, 0.1021729f, 0.4041748f, 0.0617676f, 0.1252441f, -0.0283203f, -0.2343750f, -0.4765625f, 0.0495605f, }, - { -0.2266846f, -0.0645752f, -0.0947266f, -0.0854492f, -0.0809326f, -0.1855469f, 0.2073975f, 0.0993652f, 0.2543945f, -0.0582275f, }, - { -0.1636963f, -0.1370850f, -0.3129883f, -0.3398438f, 0.2999268f, 0.3934326f, -0.1170654f, 0.0469971f, -0.2275391f, 0.4582520f, }, - { -0.1649170f, -0.1644287f, -0.2720947f, -0.3518066f, -0.1295166f, -0.1829834f, -0.3696289f, 0.4030762f, 0.2746582f, 0.6761475f, }, - { -0.1168213f, -0.0415039f, 0.0032959f, 0.1840820f, 0.0203857f, -0.4288330f, 0.2061768f, 0.3145752f, -0.2209473f, -0.0629883f, }, - { -0.1295166f, 0.2650146f, 0.2165527f, 0.2479248f, 0.1126709f, -0.2359619f, -0.2001953f, -0.3516846f, 0.1048584f, -0.1018066f, }, - { 0.0498047f, 0.3005371f, 0.2530518f, 0.2572021f, -0.3260498f, 0.1391602f, -0.4268799f, -0.3048096f, 0.3642578f, -0.3304443f, }, - { -0.2150879f, -0.3081055f, -0.2680664f, 0.0340576f, -0.3149414f, 0.0582275f, 0.2814941f, 0.5670166f, 0.0845947f, -0.1109619f, }, - { -0.1329346f, 0.2382813f, 0.3703613f, -0.2185059f, 0.0959473f, -0.1402588f, -0.3804932f, 0.4400635f, -0.2359619f, -0.2302246f, }, - { -0.1170654f, 0.1140137f, 0.0300293f, -0.2657471f, -0.2978516f, 0.1655273f, 0.1063232f, 0.4238281f, 0.3122559f, -0.5507813f, }, - { -0.0954590f, 0.1540527f, 0.1090088f, 0.2415771f, 0.2912598f, -0.2208252f, -0.5318604f, -0.0478516f, -0.2353516f, 0.1923828f, }, - { -0.2137451f, -0.0399170f, -0.1242676f, -0.0753174f, -0.2893066f, -0.3552246f, 0.5163574f, -0.0109863f, -0.1661377f, 0.4389648f, }, - { -0.1304932f, -0.0384521f, -0.0197754f, -0.0413818f, -0.0382080f, 0.0040283f, 0.5717773f, 0.3431396f, -0.3316650f, -0.4497070f, }, - { 0.0848389f, 0.5574951f, -0.0909424f, -0.2821045f, -0.0947266f, -0.3173828f, -0.1009521f, -0.1269531f, -0.1217041f, 0.3027344f, }, - { -0.1890869f, -0.0913086f, -0.0759277f, -0.0317383f, 0.1782227f, 0.1362305f, -0.0368652f, -0.3087158f, 0.2631836f, -0.0051270f, }, - { -0.1608887f, -0.0693359f, -0.0324707f, -0.0544434f, -0.2700195f, 0.3283691f, -0.5699463f, 0.6500244f, -0.2468262f, 0.1657715f, }, - { -0.1601563f, 0.2799072f, 0.1865234f, 0.0861816f, 0.1184082f, -0.0355225f, 0.0467529f, -0.0833740f, -0.1870117f, -0.2249756f, }, - { -0.1683350f, 0.1031494f, 0.1486816f, 0.0482178f, -0.2299805f, 0.0017090f, 0.0825195f, -0.2088623f, 0.0970459f, 0.0354004f, }, - { -0.0905762f, 0.0471191f, -0.0531006f, 0.0501709f, 0.1600342f, 0.0670166f, -0.5103760f, -0.6008301f, 0.1827393f, 0.5450439f, }, - { -0.2102051f, -0.0853271f, -0.2390137f, -0.5036621f, -0.4549561f, -0.0799561f, 0.1895752f, 0.2188721f, 0.6021729f, 0.3729248f, }, - { -0.1538086f, -0.0754395f, 0.0653076f, -0.2451172f, 0.4641113f, -0.4619141f, 0.3084717f, -0.1016846f, 0.0235596f, -0.1296387f, }, - { -0.1057129f, 0.1004639f, 0.1906738f, 0.0179443f, -0.0760498f, -0.2207031f, -0.1341553f, 0.0847168f, -0.0704346f, 0.0909424f, }, - { -0.2785645f, -0.5052490f, -0.3870850f, 0.0092773f, 0.0030518f, -0.1314697f, 0.0582275f, 0.0665283f, 0.7423096f, 0.3959961f, }, - { -0.1625977f, -0.0958252f, 0.0119629f, -0.2052002f, -0.4398193f, -0.4805908f, 0.0639648f, 0.5673828f, 0.1359863f, 0.3109131f, }, - { -0.1397705f, 0.0496826f, 0.2478027f, 0.3808594f, -0.2122803f, -0.0626221f, -0.0632324f, 0.1617432f, -0.2075195f, -0.3491211f, }, - { -0.1741943f, 0.0634766f, -0.1269531f, -0.0966797f, -0.0446777f, -0.2653809f, -0.0637207f, -0.0292969f, 0.6909180f, -0.3861084f, }, - { -0.1768799f, -0.2017822f, -0.1839600f, 0.0709229f, 0.1633301f, -0.3206787f, -0.2274170f, 0.2235107f, 0.1588135f, 0.2570801f, }, - { -0.1528320f, 0.1188965f, 0.0242920f, 0.0083008f, -0.0084229f, -0.1060791f, 0.1054688f, 0.2896729f, -0.7102051f, 0.3507080f, }, - { 0.0031738f, 0.1186523f, 0.0438232f, -0.0684814f, -0.0476074f, 0.0458984f, 0.0274658f, 0.0631104f, 0.0792236f, -0.2156982f, }, - { -0.0797119f, 0.2645264f, 0.1076660f, -0.0852051f, 0.0261230f, -0.4985352f, -0.5046387f, 0.2553711f, 0.3415527f, -0.0638428f, }, - { -0.1223145f, 0.0593262f, 0.0791016f, -0.1320801f, 0.0493164f, -0.1818848f, 0.1904297f, -0.6083984f, 0.6853027f, -0.1759033f, }, - { -0.1250000f, -0.0379639f, 0.0521240f, 0.0434570f, -0.2858887f, 0.0262451f, -0.2822266f, 0.0543213f, -0.2902832f, 0.6239014f, }, - { -0.0693359f, 0.0103760f, 0.1621094f, 0.2254639f, 0.4279785f, 0.1444092f, -0.3077393f, -0.2526855f, -0.0969238f, -0.2296143f, }, - { -0.0592041f, 0.1368408f, 0.1516113f, 0.1588135f, -0.5328369f, -0.2712402f, 0.3176270f, -0.0472412f, 0.1828613f, -0.1640625f, }, - { -0.1552734f, -0.1666260f, -0.2694092f, -0.0260010f, -0.2291260f, 0.3488770f, 0.1036377f, -0.1116943f, 0.0406494f, 0.3037109f, }, - { -0.2464600f, -0.2500000f, -0.1783447f, -0.2355957f, -0.1719971f, -0.0488281f, 0.0598145f, -0.2712402f, 0.1557617f, 0.8917236f, }, - { -0.1867676f, -0.2125244f, -0.3250732f, 0.3856201f, 0.1418457f, -0.1818848f, 0.1850586f, -0.1828613f, 0.1491699f, 0.1022949f, }, - { 0.1617432f, 0.6575928f, 0.4746094f, 0.2373047f, -0.2082520f, -0.3527832f, -0.2325439f, -0.4761963f, -0.3914795f, 0.0251465f, }, - { -0.1722412f, -0.1170654f, -0.0356445f, -0.0483398f, -0.1888428f, -0.0102539f, -0.5377197f, -0.1309814f, 0.6752930f, 0.2192383f, }, - { 0.3857422f, 0.0058594f, -0.2855225f, -0.7182617f, -0.0224609f, -0.0063477f, 0.0157471f, 0.6589355f, 0.0461426f, -0.0391846f, }, -}; - const Word16 AmpCB1_NB_fx[640] = {//Q13 -1355, 185, -222, -221, 1976, 3119, 540, 1333, -3646, -2511, @@ -34210,74 +21467,6 @@ const Word16 AmpCB1_NB_fx[640] = 3160, 48, -2339, -5884, -184, -52, 129, 5398, 378, -321 }; -const float AmpCB2_NB[64][NUM_ERB_NB-11] = -{ - { -0.3272705f, -0.5357666f, -0.5212402f, -0.5770264f, -0.0291748f, 0.2365723f, 0.2133789f, 0.2821045f, 0.5249023f, }, - { -0.4830322f, -0.1585693f, 0.4256592f, 0.1947021f, -0.0460205f, 0.0360107f, -0.1456299f, -0.1938477f, 0.2578125f, }, - { -0.1920166f, -0.7766113f, -0.0615234f, 0.2192383f, -0.3077393f, -0.0083008f, 0.1613770f, 0.1492920f, 0.2762451f, }, - { -0.0614014f, -0.4768066f, 0.4499512f, -0.4759521f, -0.0169678f, 0.2546387f, 0.0058594f, 0.0426025f, 0.0667725f, }, - { -0.7796631f, 0.1635742f, -0.1790771f, -0.1296387f, -0.0235596f, 0.1617432f, -0.1452637f, 0.2922363f, 0.2039795f, }, - { -0.2419434f, -0.3170166f, -0.0476074f, -0.1835938f, 0.2772217f, -0.0462646f, -0.2868652f, 0.4969482f, 0.0085449f, }, - { -0.1165771f, -0.1077881f, -0.2160645f, -0.1300049f, -0.2982178f, -0.2171631f, -0.1343994f, -0.0806885f, 0.7720947f, }, - { 0.2283936f, -0.3262939f, 0.4389648f, 0.4605713f, -0.0831299f, 0.4077148f, -0.1730957f, 0.0855713f, -0.5191650f, }, - { -0.4798584f, -0.2246094f, -0.2915039f, -0.3267822f, -0.4327393f, -0.0050049f, 0.4486084f, 0.4691162f, 0.2683105f, }, - { -0.2091064f, -0.0395508f, 0.0731201f, 0.1614990f, 0.2230225f, -0.5992432f, -0.2036133f, 0.0751953f, 0.3183594f, }, - { 0.0439453f, -0.2159424f, -0.6424561f, -0.1560059f, 0.4260254f, 0.2362061f, 0.1654053f, -0.1584473f, 0.1162109f, }, - { 0.2198486f, 0.0548096f, 0.0306396f, -0.1246338f, -0.4475098f, 0.0584717f, 0.4268799f, 0.1882324f, -0.2727051f, }, - { -0.4167480f, -0.5472412f, -0.7061768f, 0.1716309f, 0.1473389f, 0.3642578f, 0.2156982f, 0.3981934f, -0.0975342f, }, - { -0.3813477f, 0.6392822f, 0.0561523f, 0.2449951f, -0.1861572f, -0.2570801f, -0.0939941f, 0.0666504f, 0.0167236f, }, - { 0.0489502f, -0.1596680f, 0.1182861f, 0.0249023f, -0.1984863f, -0.0718994f, -0.5196533f, 0.2128906f, 0.3461914f, }, - { 0.2908936f, 0.3344727f, -0.0516357f, 0.3864746f, 0.2343750f, -0.0842285f, -0.3662109f, -0.5479736f, 0.3079834f, }, - { -0.8170166f, -0.6268311f, -0.0902100f, -0.2342529f, 0.1499023f, 0.2873535f, 0.4077148f, 0.2321777f, 0.1304932f, }, - { -0.3887939f, -0.3190918f, 0.3374023f, -0.0258789f, -0.2515869f, -0.1680908f, 0.0852051f, 0.4509277f, -0.0152588f, }, - { -0.1164551f, -0.5043945f, -0.0493164f, 0.5245361f, 0.1579590f, 0.2154541f, 0.2985840f, -0.2791748f, -0.1693115f, }, - { -0.0017090f, 0.0620117f, 0.1402588f, 0.0010986f, -0.0533447f, 0.0633545f, -0.0512695f, 0.0549316f, -0.0916748f, }, - { -0.1992188f, -0.1697998f, -0.2695313f, -0.2386475f, -0.1428223f, 0.5881348f, 0.1357422f, 0.1325684f, -0.0954590f, }, - { 0.1632080f, 0.1032715f, -0.4191895f, 0.0694580f, 0.2100830f, -0.0947266f, -0.3323975f, 0.1473389f, 0.1198730f, }, - { -0.1748047f, -0.1082764f, 0.0384521f, -0.3699951f, 0.4213867f, 0.0933838f, -0.1541748f, -0.2619629f, 0.3612061f, }, - { -0.3197021f, 0.1839600f, 0.1601563f, 0.4989014f, 0.3814697f, 0.1998291f, -0.1711426f, -0.0054932f, -0.3897705f, }, - { 0.1705322f, -0.3187256f, -0.4444580f, -0.3024902f, -0.2082520f, 0.0717773f, 0.0242920f, 0.4542236f, 0.1485596f, }, - { -0.1524658f, -0.1459961f, 0.8823242f, 0.1215820f, 0.1072998f, -0.1634521f, 0.0013428f, -0.1185303f, -0.2050781f, }, - { 0.0874023f, -0.0047607f, 0.0284424f, 0.2374268f, 0.1889648f, -0.1801758f, 0.0671387f, -0.2779541f, 0.0374756f, }, - { 0.9049072f, 0.2556152f, -0.1990967f, -0.0694580f, -0.1649170f, -0.0241699f, -0.0589600f, -0.0628662f, -0.1644287f, }, - { -0.0258789f, -0.3233643f, -0.0633545f, 0.0238037f, 0.3593750f, -0.0970459f, 0.1794434f, 0.0798340f, -0.1767578f, }, - { 0.3852539f, 0.1671143f, 0.4841309f, 0.4128418f, -0.3395996f, -0.5194092f, -0.1412354f, -0.0258789f, 0.0478516f, }, - { 0.1051025f, 0.6181641f, 0.5786133f, -0.3067627f, -0.4166260f, -0.0673828f, -0.2805176f, -0.0701904f, 0.1379395f, }, - { 0.1437988f, 0.1914063f, 0.5604248f, 0.1511230f, 0.0447998f, 0.1984863f, 0.0732422f, -0.7188721f, 0.0198975f, }, - { -0.4567871f, -0.4455566f, -0.4774170f, 0.0874023f, 0.1121826f, -0.1832275f, 0.0067139f, 0.2205811f, 0.4639893f, }, - { -0.6800537f, -0.5657959f, 0.1495361f, 0.3919678f, 0.4643555f, 0.1820068f, -0.1105957f, 0.0122070f, 0.0493164f, }, - { -0.2126465f, -0.2292480f, -0.2612305f, 0.2015381f, 0.2001953f, 0.4853516f, -0.4189453f, -0.1402588f, 0.1666260f, }, - { 0.2492676f, 0.0478516f, 0.0937500f, -0.1872559f, 0.1337891f, 0.4652100f, -0.0257568f, -0.2523193f, -0.1605225f, }, - { -0.5086670f, 0.1397705f, -0.3353271f, -0.0181885f, 0.6464844f, -0.0897217f, 0.0534668f, 0.0068359f, -0.0493164f, }, - { -0.0194092f, -0.2641602f, -0.1170654f, 0.4262695f, -0.0842285f, -0.0839844f, -0.1319580f, 0.3371582f, -0.1453857f, }, - { 0.0798340f, 0.2503662f, -0.2617188f, -0.3918457f, -0.2225342f, 0.0906982f, 0.0837402f, -0.0916748f, 0.3031006f, }, - { 0.0195313f, 0.1561279f, 0.3962402f, 0.2287598f, 0.3037109f, 0.1455078f, -0.7296143f, -0.0583496f, 0.0146484f, }, - { -0.0426025f, -0.0079346f, -0.2868652f, -0.0270996f, -0.2048340f, -0.4375000f, 0.1359863f, 0.3990479f, 0.1784668f, }, - { -0.1359863f, -0.0168457f, 0.2880859f, -0.3371582f, 0.0878906f, -0.4665527f, 0.3079834f, 0.0263672f, 0.1428223f, }, - { 0.5368652f, -0.5162354f, -0.2258301f, 0.1552734f, 0.0467529f, 0.2119141f, -0.0467529f, -0.1580811f, 0.0103760f, }, - { -0.0161133f, 0.1383057f, 0.1837158f, 0.1790771f, -0.2916260f, -0.2655029f, 0.4916992f, -0.3359375f, 0.0294189f, }, - { -0.5313721f, -0.2567139f, -0.0686035f, 0.0997314f, 0.4832764f, 0.6678467f, 0.2369385f, -0.1950684f, -0.2867432f, }, - { 0.0245361f, 0.1723633f, -0.0971680f, 0.3406982f, -0.5158691f, 0.3939209f, -0.2431641f, -0.0194092f, -0.0194092f, }, - { 0.4986572f, -0.1890869f, 0.1245117f, -0.2659912f, -0.0947266f, -0.2548828f, -0.0179443f, -0.0051270f, 0.2294922f, }, - { -0.1256104f, 0.6081543f, -0.2509766f, 0.0135498f, 0.1733398f, 0.2613525f, 0.0368652f, -0.3142090f, -0.1203613f, }, - { -0.0582275f, -0.4512939f, -0.2867432f, -0.2519531f, -0.0408936f, -0.0268555f, 0.7149658f, 0.0069580f, -0.0008545f, }, - { -0.6600342f, -0.0666504f, -0.0430908f, 0.3498535f, 0.0167236f, -0.0166016f, 0.4282227f, 0.1210938f, -0.2513428f, }, - { -0.2482910f, -0.1375732f, -0.0230713f, -0.0366211f, -0.2628174f, 0.4401855f, 0.3079834f, -0.4549561f, 0.1862793f, }, - { -0.4635010f, 0.2604980f, 0.5312500f, -0.1123047f, -0.0560303f, 0.3322754f, 0.2177734f, -0.0086670f, -0.3698730f, }, - { -0.1070557f, 0.2401123f, -0.2008057f, -0.5410156f, 0.0625000f, 0.0047607f, 0.2144775f, 0.3509521f, -0.1156006f, }, - { 0.2248535f, 0.1666260f, 0.1831055f, 0.1038818f, 0.0725098f, -0.3530273f, -0.0493164f, 0.4061279f, -0.3757324f, }, - { -0.1922607f, -0.1535645f, -0.1187744f, -0.0233154f, -0.0476074f, 0.0054932f, 0.0765381f, -0.0277100f, 0.1982422f, }, - { -0.0174561f, 0.0262451f, 0.2633057f, 0.5915527f, 0.6512451f, 0.4146729f, -0.0242920f, -0.5423584f, -0.3773193f, }, - { -0.0345459f, -0.0263672f, 0.1510010f, -0.1804199f, -0.6883545f, -0.0946045f, 0.0640869f, 0.2572021f, 0.3013916f, }, - { 0.3581543f, -0.0311279f, 0.2976074f, 0.1005859f, 0.7291260f, -0.2221680f, -0.1623535f, -0.1467285f, -0.2969971f, }, - { 0.1098633f, 0.0793457f, -0.6901855f, 0.3529053f, -0.1878662f, -0.0552979f, 0.2028809f, 0.0281982f, -0.0177002f, }, - { 0.2027588f, 0.0904541f, -0.0405273f, 0.1490479f, 0.2208252f, 0.1151123f, 0.5897217f, -0.1938477f, -0.5638428f, }, - { 0.0079346f, -0.0964355f, -0.1202393f, -0.1090088f, 0.4118652f, 0.3842773f, 0.0352783f, 0.3597412f, -0.6079102f, }, - { -0.0806885f, -0.0521240f, 0.1759033f, 0.9394531f, 0.0192871f, -0.2336426f, -0.2525635f, -0.2095947f, -0.0510254f, }, - { 0.3243408f, 0.5150146f, 0.1837158f, -0.1337891f, 0.0733643f, -0.1789551f, -0.2141113f, -0.0584717f, -0.0194092f, }, - { 0.4123535f, 0.6411133f, 0.6176758f, 0.4884033f, 0.1588135f, 0.0512695f, -0.1547852f, -0.3433838f, -0.5122070f, }, -}; - const Word16 AmpCB2_NB_fx[64 * (NUM_ERB_NB - 13)] = {//Q13 -2681, -4389, -4270, -4727, -239, 1938, 1748, 2311, 4300, -3957, @@ -34340,143 +21529,6 @@ const Word16 AmpCB2_NB_fx[64 * (NUM_ERB_NB - 13)] = 4001, 1301, 420, -1268, -2813, -4196 }; - -const float PowerCB_WB[64][2] = -{ - { -1.6459961f, -0.8359375f, }, - { -0.083007813f, 0.17089844f, }, - { -0.31152344f, -0.45849609f, }, - { 0.02734375f, 0.52441406f, }, - { -0.76123047f, -0.30566406f, }, - { 0.09765625f, 0.16796875f, }, - { -0.19384766f, 0.11621094f, }, - { 0.13867188f, 0.69091797f, }, - { -0.64599609f, -0.91796875f, }, - { -0.265625f, 0.57128906f, }, - { -0.30224609f, -0.12451172f, }, - { 0.28662109f, 0.47558594f, }, - { -0.61621094f, -0.047851563f, }, - { 0.15966797f, 0.073730469f, }, - { 0.020019531f, -0.14746094f, }, - { 0.45947266f, 0.91601563f, }, - { -1.1020508f, -0.60205078f, }, - { 0.013671875f, 0.098632813f, }, - { -0.25390625f, -0.27392578f, }, - { 0.16503906f, 0.51171875f, }, - { -0.52734375f, -0.24169922f, }, - { 0.092773438f, 0.28417969f, }, - { -0.13867188f, -0.01171875f, }, - { 0.28222656f, 0.77392578f, }, - { -0.64648438f, -0.53173828f, }, - { -0.034667969f, 0.27734375f, }, - { -0.22998047f, -0.012695313f, }, - { 0.55664063f, 0.44384766f, }, - { -0.41796875f, -0.0625f, }, - { 0.20751953f, 0.36132813f, }, - { 0.068359375f, 0.005859375f, }, - { 0.77880859f, 0.92333984f, }, - { -1.0625f, -1.1279297f, }, - { -0.15039063f, 0.26416016f, }, - { -0.15380859f, -0.41943359f, }, - { -0.0390625f, 0.64160156f, }, - { -0.87011719f, 0.24902344f, }, - { 0.19677734f, 0.21972656f, }, - { -0.29638672f, 0.28417969f, }, - { 0.070800781f, 0.89697266f, }, - { -0.44921875f, -0.67675781f, }, - { -0.10986328f, 0.42578125f, }, - { -0.19287109f, -0.12597656f, }, - { 0.40478516f, 0.47900391f, }, - { -0.46142578f, 0.16845703f, }, - { 0.31396484f, 0.11767578f, }, - { -0.02734375f, -0.011230469f, }, - { 0.59130859f, 0.72363281f, }, - { -0.87548828f, -0.71240234f, }, - { 0.01953125f, 0.1953125f, }, - { -0.11669922f, -0.22998047f, }, - { 0.25976563f, 0.60449219f, }, - { -0.37792969f, -0.25195313f, }, - { 0.11914063f, 0.40576172f, }, - { -0.076660156f, 0.07421875f, }, - { 0.28125f, 1.1166992f, }, - { -0.453125f, -0.41210938f, }, - { 0.020019531f, 0.37060547f, }, - { -0.078613281f, -0.096679688f, }, - { 0.42626953f, 0.66064453f, }, - { -0.3125f, 0.051269531f, }, - { 0.33935547f, 0.30419922f, }, - { 0.17773438f, -0.08984375f, }, - { 0.60449219f, 1.1943359f, }, -}; - -const float PowerCB_NB[64][2] = -{ - { -1.6352539f, -1.359375f, }, - { -0.3828125f, 0.18798828f, }, - { -0.43505859f, -0.27441406f, }, - { 0.061523438f, 0.44677734f, }, - { -0.74121094f, -0.70214844f, }, - { 0.1484375f, 0.025878906f, }, - { -0.15332031f, -0.21826172f, }, - { 0.33544922f, 0.59521484f, }, - { -1.262207f, -0.88232422f, }, - { -0.031738281f, 0.074707031f, }, - { -0.59521484f, -0.16455078f, }, - { 0.24267578f, 0.34179688f, }, - { -0.43652344f, -0.51318359f, }, - { 0.078613281f, 0.22021484f, }, - { -0.022460938f, -0.25195313f, }, - { 0.48193359f, 0.74169922f, }, - { -1.1118164f, -1.1245117f, }, - { -0.17285156f, 0.21728516f, }, - { -0.25976563f, -0.26367188f, }, - { 0.0024414063f, 0.62060547f, }, - { -0.51123047f, -0.69970703f, }, - { 0.328125f, -0.10986328f, }, - { -0.16357422f, -0.036621094f, }, - { 0.49169922f, 0.515625f, }, - { -0.66503906f, -0.91748047f, }, - { -0.045410156f, 0.17919922f, }, - { -0.22851563f, -0.12646484f, }, - { 0.87890625f, -0.14160156f, }, - { -0.54589844f, -0.38720703f, }, - { 0.20117188f, 0.23046875f, }, - { -0.0043945313f, -0.096191406f, }, - { 0.71826172f, 0.79785156f, }, - { -1.2827148f, -1.3901367f, }, - { -0.13134766f, 0.080078125f, }, - { -0.33642578f, -0.18212891f, }, - { 0.2109375f, 0.45898438f, }, - { -0.78173828f, -0.40966797f, }, - { 0.15185547f, 0.13232422f, }, - { -0.10351563f, -0.12255859f, }, - { 0.26513672f, 0.83691406f, }, - { -0.98339844f, -0.65234375f, }, - { 0.053222656f, 0.11767578f, }, - { -0.38525391f, -0.053710938f, }, - { 0.35595703f, 0.43359375f, }, - { -0.20410156f, -0.62353516f, }, - { 0.125f, 0.32910156f, }, - { 0.10644531f, -0.10595703f, }, - { 0.50146484f, 1.0083008f, }, - { -0.86376953f, -1.1196289f, }, - { -0.13476563f, 0.41650391f, }, - { -0.17578125f, -0.37304688f, }, - { 0.18359375f, 0.60888672f, }, - { -0.62207031f, -0.54785156f, }, - { 0.29394531f, 0.1328125f, }, - { -0.064941406f, -0.015625f, }, - { 0.67089844f, 0.54589844f, }, - { -0.90820313f, -0.87646484f, }, - { -0.011230469f, 0.30273438f, }, - { -0.25634766f, 0.029296875f, }, - { 0.52246094f, 0.26757813f, }, - { -0.33740234f, -0.39013672f, }, - { 0.34228516f, 0.27929688f, }, - { 0.039550781f, 0.0087890625f, }, - { 0.95166016f, 1.0351563f, }, -}; - const Word16 PowerCB_WB_fx[128] = /* Q11 */ { -3371, -1712, @@ -34614,19 +21666,6 @@ const Word16 PowerCB_NB_fx[128] = /* Q11 */ }; -/* sinc for warp/extrapolate./16384., in Q14 */ -const float sinc[8][12] = -{ - {0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,16384.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,0.0f/16384.0f,}, - {-388.0f/16384.0f,484.0f/16384.0f,-638.0f/16384.0f,939.0f/16384.0f,-1773.0f/16384.0f,15966.0f/16384.0f,2281.0f/16384.0f,-1063.0f/16384.0f,694.0f/16384.0f,-514.0f/16384.0f,409.0f/16384.0f,-339.0f/16384.0f,}, - {-701.0f/16384.0f,868.0f/16384.0f,-1134.0f/16384.0f,1639.0f/16384.0f,-2949.0f/16384.0f,14751.0f/16384.0f,4917.0f/16384.0f,-2106.0f/16384.0f,1341.0f/16384.0f,-982.0f/16384.0f,776.0f/16384.0f,-640.0f/16384.0f,}, - {-895.0f/16384.0f,1101.0f/16384.0f,-1427.0f/16384.0f,2029.0f/16384.0f,-3503.0f/16384.0f,12849.0f/16384.0f,7709.0f/16384.0f,-2964.0f/16384.0f,1835.0f/16384.0f,-1328.0f/16384.0f,1042.0f/16384.0f,-856.0f/16384.0f,}, - {-947.0f/16384.0f,1159.0f/16384.0f,-1489.0f/16384.0f,2086.0f/16384.0f,-3476.0f/16384.0f,10430.0f/16384.0f,10430.0f/16384.0f,-3476.0f/16384.0f,2086.0f/16384.0f,-1489.0f/16384.0f,1159.0f/16384.0f,-947.0f/16384.0f,}, - {-856.0f/16384.0f,1042.0f/16384.0f,-1328.0f/16384.0f,1835.0f/16384.0f,-2964.0f/16384.0f,7709.0f/16384.0f,12849.0f/16384.0f,-3503.0f/16384.0f,2029.0f/16384.0f,-1427.0f/16384.0f,1101.0f/16384.0f,-895.0f/16384.0f,}, - {-640.0f/16384.0f,776.0f/16384.0f,-982.0f/16384.0f,1341.0f/16384.0f,-2106.0f/16384.0f,4917.0f/16384.0f,14751.0f/16384.0f,-2949.0f/16384.0f,1639.0f/16384.0f,-1134.0f/16384.0f,868.0f/16384.0f,-701.0f/16384.0f,}, - {-339.0f/16384.0f,409.0f/16384.0f,-514.0f/16384.0f,694.0f/16384.0f,-1063.0f/16384.0f,2281.0f/16384.0f,15966.0f/16384.0f,-1773.0f/16384.0f,939.0f/16384.0f,-638.0f/16384.0f,484.0f/16384.0f,-388.0f/16384.0f,}, -}; - const Word16 sinc_fx[8][12] = /* sinc for warp/extrapolate, in Q14 */ { {0,0,0,0,0,16384,0,0,0,0,0,0,}, @@ -34641,13 +21680,6 @@ const Word16 sinc_fx[8][12] = /* sinc for warp/extrapolate, in Q14 */ /*----------------------------------------------------------------------------------* * Highrate SWB BWE tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float overlap_coefs_48kHz[NSV_OVERLAP*WIDTH_BAND] = -{ 0.30f, 0.34f, 0.36f, 0.39f, 0.42f, 0.44f, 0.46f, 0.475f, 0.49f, 0.51f, 0.54f, 0.57f, 0.62f, 0.72f, 0.83f, 0.95f }; - -const float overlap_coefs[NSV_OVERLAP*WIDTH_BAND] = -{ 0.2700f, 0.3060f, 0.3240f, 0.3510f, 0.3780f, 0.3960f, 0.4140f, 0.4275f, 0.4410f, 0.4590f, 0.4860f, 0.5130f, 0.5580f, 0.6480f, 0.7470f, 0.855f }; -#endif const Word16 overlap_coefs_48kHz_fx[NSV_OVERLAP*WIDTH_BAND] = /* in Q15 */ { 9830, 11141, 11796, 12780, 13763, 14418, 15073, 15565, 16056, 16712, 17695, 18678, 20316, 23593, 27197, 31130 @@ -34658,131 +21690,6 @@ const Word16 overlap_coefs_fx[NSV_OVERLAP*WIDTH_BAND] = /* in Q15 */ 8847, 10027, 10617, 11502, 12386, 12976, 13566, 14008, 14451, 15041, 15925, 16810, 18285, 21234, 24478, 28017 }; -#ifndef IVAS_FLOAT_FIXED -const float swb_hr_env_code1[NUM_ENVLOPE_CODE_HR1*2] = -{ - 0.044983f, 0.041700f, - 0.524276f, 0.469365f, - 0.671757f, 0.605513f, - 0.983501f, 0.855093f, - 1.227874f, 1.132200f, - 1.672212f, 1.432704f, - 2.548211f, 2.361091f, - 3.196961f, 3.306999f, - 2.580753f, 5.217478f, - 4.207751f, 7.243802f, - 3.517157f, 1.738487f, - 4.381567f, 2.753657f, - 4.758266f, 4.696094f, - 6.827988f, 6.106459f, - 4.450459f, 10.131211f, - 7.256045f, 12.488036f, - 6.708720f, 1.953339f, - 6.604030f, 3.699560f, - 10.612728f, 2.537916f, - 9.387467f, 4.241173f, - 7.119045f, 8.281485f, - 9.062854f, 7.086526f, - 8.919388f, 9.762914f, - 11.299319f, 11.763904f, - 11.782217f, 5.879754f, - 14.050457f, 9.665228f, - 11.201525f, 9.001128f, - 14.434753f, 13.236565f, - 14.337260f, 3.904411f, - 20.071049f, 4.335061f, - 18.105812f, 8.223599f, - 22.352287f, 9.603263f, - 7.242756f, 16.564487f, - 11.777528f, 19.167645f, - 11.121798f, 15.455982f, - 14.563579f, 17.359568f, - 17.821218f, 11.894719f, - 17.466026f, 15.296063f, - 21.336960f, 13.455175f, - 20.544336f, 17.125366f, - 9.056358f, 22.338306f, - 11.238424f, 28.832520f, - 13.262732f, 25.143383f, - 16.243559f, 28.256853f, - 15.269305f, 21.539135f, - 16.983515f, 24.699589f, - 19.591730f, 22.689682f, - 20.146198f, 25.888466f, - 17.797417f, 19.453121f, - 21.290621f, 20.186579f, - 24.097319f, 19.086721f, - 23.613092f, 22.545858f, - 23.682005f, 16.328239f, - 26.886553f, 19.402439f, - 26.009769f, 15.632211f, - 28.939930f, 16.240620f, - 25.094482f, 12.366419f, - 27.713383f, 13.263280f, - 28.330946f, 10.329259f, - 30.632830f, 12.851279f, - 25.273802f, 6.138124f, - 29.195339f, 7.222413f, - 32.171322f, 5.019567f, - 31.979000f, 9.473855f, -}; - -const float swb_hr_env_code2[NUM_ENVLOPE_CODE_HR2*2] = -{ - 0.512539f, 0.472507f, - 1.338963f, 1.108591f, - 2.544041f, 1.759765f, - 3.124053f, 3.045299f, - 4.892713f, 3.721097f, - 4.010297f, 5.750862f, - 5.111215f, 2.164709f, - 6.667518f, 3.893404f, - 8.454117f, 2.751430f, - 11.123573f, 3.518174f, - 6.622948f, 5.960704f, - 8.562429f, 5.003579f, - 8.919363f, 7.784057f, - 10.759037f, 5.959438f, - 12.449193f, 8.359519f, - 13.677005f, 11.230577f, - 13.672631f, 5.457414f, - 16.471989f, 3.917684f, - 20.910328f, 6.432810f, - 25.457325f, 8.617220f, - 16.410700f, 7.574456f, - 18.574385f, 10.291498f, - 22.088757f, 12.512156f, - 21.170530f, 17.208714f, - 5.276107f, 9.622470f, - 9.093585f, 11.274686f, - 11.945659f, 15.538144f, - 16.550409f, 15.046564f, - 6.358148f, 17.547396f, - 13.316619f, 21.765524f, - 7.646096f, 26.106720f, - 2.451297f, 31.933104f -}; - -const float swb_hr_env_code3[NUM_ENVLOPE_CODE_HR_TR*N_BANDS_TRANS_BWE_HR] = -{ - 0.799219f, 0.677609f, - 1.754571f, 1.215689f, - 2.846222f, 2.017775f, - 4.379336f, 1.975914f, - 5.935472f, 2.945818f, - 3.938621f, 4.220399f, - 8.080808f, 2.632276f, - 7.579771f, 4.986835f, - 4.956485f, 10.363663f, - 7.739148f, 8.652471f, - 9.238397f, 7.051655f, - 10.205707f, 5.619638f, - 10.645117f, 4.374648f, - 11.660180f, 3.474015f, - 10.845836f, 2.664596f, - 11.724073f, 1.637023f -}; -#endif const Word16 swb_hr_env_code1_fx[NUM_ENVLOPE_CODE_HR1 * 2] = /* in Q9 */ { @@ -34823,7 +21730,6 @@ const Word16 swb_hr_env_code3_fx[NUM_ENVLOPE_CODE_HR_TR*N_BANDS_TRANS_BWE_HR] = 2538, 5306, 3962, 4430, 4730, 3610, 5225, 2877, 5450, 2240, 5970, 1779, 5553, 1364, 6003, 838 }; -#ifdef IVAS_FLOAT_FIXED const Word32 thren_HQ_fx[39] = {//Q14 1805811328, @@ -34866,43 +21772,12 @@ const Word32 thren_HQ_fx[39] = 4870, 3444, }; -#endif -/* Searching thresholds for quantization of norms */ -const float thren_HQ[39] = -{ - 110217.974940f, 77935.877489f, - 55108.987470f, 38967.938744f, - 27554.493735f, 19483.969372f, - 13777.246868f, 9741.984686f, - 6888.623434f, 4870.992343f, - 3444.311717f, 2435.496172f, - 1722.155858f, 1217.748086f, - 861.077929f, 608.874043f, - 430.538965f, 304.437021f, - 215.269482f, 152.218511f, - 107.634741f, 76.109255f, - 53.817371f, 38.054628f, - 26.908685f, 19.027314f, - 13.454343f, 9.513657f, - 6.727171f, 4.756828f, - 3.363586f, 2.378414f, - 1.681793f, 1.189207f, - 0.840896f, 0.594604f, - 0.420448f, 0.297302f, - 0.210224f -}; /*----------------------------------------------------------------------------------* * ACELP/HQ core switching *----------------------------------------------------------------------------------*/ /* short filters for BWE of ACELP->HQ switching frame */ -const float hp12800_16000[21] = -{ - -0.00000000f, 0.00212227f, -0.00632535f, 0.01161181f, -0.01235466f, 0.00000000f, 0.03177450f, -0.08143591f, - 0.13749378f, -0.18212549f, 0.19916883f, -0.18212549f, 0.13749378f, -0.08143591f, 0.03177450f, 0.00000000f, - -0.01235466f, 0.01161181f, -0.00632535f, 0.00212227f, -0.00000000f -}; const Word16 hp12800_16000_fx[21] = {//Q15 -0, 70, -207, 380, -405, 0, 1041, -2668, 4505, @@ -34910,15 +21785,6 @@ const Word16 hp12800_16000_fx[21] = -207, 70, -0 }; -const float hp12800_32000[41] = -{ - -0.00000000f, 0.00136608f, 0.00106650f, -0.00143351f, -0.00317865f, 0.00000000f, 0.00583523f, 0.00477033f, - -0.00620853f, -0.01289218f, -0.00000000f, 0.02060233f, 0.01596749f, -0.02003257f, -0.04092361f, 0.00000000f, - 0.06909412f, 0.05929089f, -0.09152269f, -0.30127931f, 0.60052441f, -0.30127931f, -0.09152269f, 0.05929089f, - 0.06909412f, 0.00000000f, -0.04092361f, -0.02003257f, 0.01596749f, 0.02060233f, -0.00000000f, -0.01289218f, - -0.00620853f, 0.00477033f, 0.00583523f, 0.00000000f, -0.00317865f, -0.00143351f, 0.00106650f, 0.00136608f, - -0.00000000f -}; const Word16 hp12800_32000_fx[41] = {//Q15 -0, 45, 35, -47, -104, 0, 191, 156, @@ -34928,18 +21794,6 @@ const Word16 hp12800_32000_fx[41] = -203, 156, 191, 0, -104, -47, 35, 45, -0 }; - -const float hp12800_48000[61] = -{ - -0.00000000f, 0.00067336f, 0.00101850f, 0.00071064f, -0.00030497f, -0.00156225f, -0.00211804f, -0.00111583f, - 0.00136699f, 0.00388820f, 0.00427438f, 0.00122967f, -0.00413694f, -0.00827775f, -0.00727539f, 0.00000000f, - 0.00994020f, 0.01548435f, 0.01063964f, -0.00437614f, -0.02123403f, -0.02726869f, -0.01372549f, 0.01631621f, - 0.04603958f, 0.05175432f, 0.01589299f, -0.06098444f, -0.15675008f, -0.23604172f, 0.73360516f, -0.23604172f, - -0.15675008f, -0.06098444f, 0.01589299f, 0.05175432f, 0.04603958f, 0.01631621f, -0.01372549f, -0.02726869f, - -0.02123403f, -0.00437614f, 0.01063964f, 0.01548435f, 0.00994020f, 0.00000000f, -0.00727539f, -0.00827775f, - -0.00413694f, 0.00122967f, 0.00427438f, 0.00388820f, 0.00136699f, -0.00111583f, -0.00211804f, -0.00156225f, - -0.00030497f, 0.00071064f, 0.00101850f, 0.00067336f, -0.00000000f -}; const Word16 hp12800_48000_fx[61] =//Q15 { -0, 22, 33, 23, -10, -51, -69, -37, 45, 127, @@ -34950,14 +21804,6 @@ const Word16 hp12800_48000_fx[61] =//Q15 140, 127, 45, -37, -69, -51, -10, 23, 33, 22, -0, }; -const float hp16000_32000[33] = -{ - -0.00000000f, 0.00188788f, -0.00000000f, -0.00386248f, -0.00000000f, 0.00824247f, -0.00000000f, -0.01594711f, - -0.00000000f, 0.02867656f, -0.00000000f, -0.05071856f, -0.00000000f, 0.09801591f, -0.00000000f, -0.31594176f, - 0.50070579f, -0.31594176f, -0.00000000f, 0.09801591f, -0.00000000f, -0.05071856f, -0.00000000f, 0.02867656f, - -0.00000000f, -0.01594711f, -0.00000000f, 0.00824247f, -0.00000000f, -0.00386248f, -0.00000000f, 0.00188788f, - -0.00000000f -}; const Word16 hp16000_32000_fx[33] =//Q15 { -0, 62, -0, -127, -0, 270, -0, -523, -0, 940, @@ -34966,16 +21812,6 @@ const Word16 hp16000_32000_fx[33] =//Q15 -0, 62, -0 }; -const float hp16000_48000[49] = -{ - -0.00000000f, 0.00100660f, 0.00119953f, -0.00000000f, -0.00195325f, -0.00254135f, -0.00000000f, 0.00421805f, - 0.00534416f, 0.00000000f, -0.00829341f, -0.01018351f, -0.00000000f, 0.01504620f, 0.01817861f, 0.00000000f, - -0.02654841f, -0.03231243f, -0.00000000f, 0.04992164f, 0.06470722f, 0.00000000f, -0.13575216f, -0.27474220f, - 0.66706142f, -0.27474220f, -0.13575216f, 0.00000000f, 0.06470722f, 0.04992164f, -0.00000000f, -0.03231243f, - -0.02654841f, 0.00000000f, 0.01817861f, 0.01504620f, -0.00000000f, -0.01018351f, -0.00829341f, 0.00000000f, - 0.00534416f, 0.00421805f, -0.00000000f, -0.00254135f, -0.00195325f, -0.00000000f, 0.00119953f, 0.00100660f, - -0.00000000f -}; const Word16 hp16000_48000_fx[49] =//Q15 { -0, 33, 39, -0, -64, -83, -0, 138, 175, 0, @@ -34985,51 +21821,6 @@ const Word16 hp16000_48000_fx[49] =//Q15 175, 138, -0, -83, -64, -0, 39, 33, -0 }; - -const double cu15[28][3] = -{ - /* xx/3, xx*xx/3, xx*xx*xx/3 xx v */ - /* 0:*/ { 0.0222222222, 0.0014814815, 0.0000987654 }, /* 1/15 */ - /* 1:*/ { 0.0444444444, 0.0059259259, 0.0007901235 }, /* 2/15 */ - /* 2:*/ { 0.0666666667, 0.0133333333, 0.0026666667 }, - /* 3:*/ { 0.0888888889, 0.0237037037, 0.0063209877 }, - /* 4:*/ { 0.1111111111, 0.0370370370, 0.0123456790 }, - /* 5:*/ { 0.1333333333, 0.0533333333, 0.0213333333 }, - /* 6:*/ { 0.1555555556, 0.0725925926, 0.0338765432 }, - /* 7:*/ { 0.1777777778, 0.0948148148, 0.0505679012 }, - /* 8:*/ { 0.2000000000, 0.1200000000, 0.0720000000 }, /* 9/15 */ - /* 9:*/ { 0.2222222222, 0.1481481481, 0.0987654321 }, /* 10/15 */ - /*10:*/ { 0.2444444444, 0.1792592593, 0.1314567901 }, - /*11:*/ { 0.2666666667, 0.2133333333, 0.1706666667 }, - /*12:*/ { 0.2888888889, 0.2503703704, 0.2169876543 }, - /*13:*/ { 0.3111111111, 0.2903703704, 0.2710123457 }, /* 14/15 */ - /*14:*/ { 0.3555555556, 0.3792592593, 0.4045432099 }, /* 16/15 */ - /*15:*/ { 0.3777777778, 0.4281481481, 0.4852345679 }, - /*16:*/ { 0.4000000000, 0.4800000000, 0.5760000000 }, /* 18/15 */ - /*17:*/ { 0.4222222222, 0.5348148148, 0.6774320988 }, - /*18:*/ { 0.4444444444, 0.5925925926, 0.7901234568 }, /* 20/15 */ - /*19:*/ { 0.4666666667, 0.6533333333, 0.9146666667 }, - /*20:*/ { 0.4888888889, 0.7170370370, 1.0516543210 }, - /*21:*/ { 0.5111111111, 0.7837037037, 1.2016790123 }, - /*22:*/ { 0.5333333333, 0.8533333333, 1.3653333333 }, - /*23:*/ { 0.5555555556, 0.9259259259, 1.5432098765 }, - /*24:*/ { 0.5777777778, 1.0014814815, 1.7359012346 }, - /*25:*/ { 0.6000000000, 1.0800000000, 1.9440000000 }, /* 27/15 */ - /*26:*/ { 0.6222222222, 1.1614814815, 2.1680987654 }, - /*27:*/ { 0.6444444444, 1.2459259259, 2.4087901235 }, /* 29/15 */ -}; - -const double cu4[6][3] = -{ - /* xx/3, xx*xx/3, xx*xx*xx/3 */ - /* 0:*/ { 0.0833333333, 0.0208333333, 0.0052083333 }, /*0.25*/ - /* 1:*/ { 0.1666666667, 0.0833333333, 0.0416666667 }, /*0.5*/ - /* 2:*/ { 0.2500000000, 0.1875000000, 0.1406250000 }, /*0.75*/ - /* 3:*/ { 0.4166666667, 0.5208333333, 0.6510416667 }, /*1.25*/ - /* 4:*/ { 0.5000000000, 0.7500000000, 1.1250000000 }, /*1.5*/ - /* 5:*/ { 0.5833333333, 1.0208333333, 1.7864583333 } /*1.75*/ -}; - const Word16 ct2[7][13] = { /* accepted configurations */ @@ -35109,7 +21900,6 @@ const Word16 cu4_fx[6][3] = /*Q13*/ * Used in lib_dec\syn_bfi.c *----------------------------------------------------------------------------------*/ -const float h_high[5] = { -0.0125f, -0.1090f, 0.7813f, -0.1090f, -0.0125f }; const Word16 h_high_fx[5] = { -410, -3572, 25602, -3572, -410 };//Q15 const float sincos_t_rad3[T_SIN_PI_2+1] = @@ -35221,28 +22011,9 @@ const Word16 sincos_t_rad3_fx[T_SIN_PI_2 + 1] = * TCX *----------------------------------------------------------------------------------*/ -const float gain_corr_fac_flt[3] = {1.0208f,1.0103f,1.0052f}; /*pow(10,2^(-n-2)/28)*/ -const float gain_corr_inv_fac_flt[3] = {0.9797f,0.9898f,0.9949f};/*pow(10,-2^(-n-2)/28)*/ const Word16 gain_corr_fac[3] = { 0x4155, 0x40A9, 0x4055 }; /* pow(10, 2^(-n-2)/28) (1Q14) */ const Word16 gain_corr_inv_fac[3] = { 0x7D67, 0x7EB2, 0x7F59 }; /* pow(10,-2^(-n-2)/28) (0Q15) */ -const float inter4_2tcx2_flt[4][4] = -{ - { 0.2325402f, 0.5349195f, 0.2325402f, 0.0000000f }, - { 0.1353017f, 0.5094465f, 0.3400065f, 0.0152453f }, - { 0.0608774f, 0.4391226f, 0.4391226f, 0.0608774f }, - { 0.0152453f, 0.3400065f, 0.5094465f, 0.1353017f } -}; - -const float inter6_2tcx2_flt[6][4] = -{ - { 0.2241379f, 0.5517241f, 0.2241379f, 0.0000000f }, - { 0.1562044f, 0.5388595f, 0.2990011f, 0.0059349f }, - { 0.0991379f, 0.5018346f, 0.3750000f, 0.0240275f }, - { 0.0549361f, 0.4450639f, 0.4450639f, 0.0549361f }, - { 0.0240275f, 0.3750000f, 0.5018346f, 0.0991379f }, - { 0.0059349f, 0.2990011f, 0.5388595f, 0.1562044f } -}; const Word16 inter4_2tcx2[4][4] = { { 7620/*0.2325402f Q15*/, 17528/*0.5349195f Q15*/, 7620/*0.2325402f Q15*/, 0/*0.0000000f Q15*/ }, @@ -35260,114 +22031,6 @@ const Word16 inter6_2tcx2[6][4] = { 194/*0.0059349f Q15*/, 9798/*0.2990011f Q15*/, 17657/*0.5388595f Q15*/, 5119/*0.1562044f Q15*/ } }; -const float inter_core_12_8kHz_output_8kHz_flt[] = -{ - 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, - 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, - 0.0000000f -}; -const float inter_core_12_8kHz_output_16kHz_flt[] = -{ - 0.4279357f, 0.4147958f, 0.3774199f, 0.3214508f, - 0.2548195f, 0.1860321f, 0.1225801f, 0.0699165f, - 0.0312127f, 0.0078047f, 0.0000000f, 0.0000000f, - 0.0000000f -}; -const float inter_core_12_8kHz_output_32kHz_flt[] = -{ - 0.2139679f, 0.2123089f, 0.2073979f, 0.1994284f, - 0.1887100f, 0.1756491f, 0.1607254f, 0.1444646f, - 0.1274097f, 0.1100939f, 0.0930161f, 0.0766219f, - 0.0612900f, 0.0473253f, 0.0349583f, 0.0243509f, - 0.0156063f, 0.0087817f, 0.0039024f, 0.0009753f, - 0.0000000f -}; -const float inter_core_12_8kHz_output_48kHz_flt[] = -{ - 0.1426452f, 0.1421528f, 0.1406841f, 0.1382653f, - 0.1349386f, 0.1307618f, 0.1258066f, 0.1201564f, - 0.1139041f, 0.1071503f, 0.1000000f, 0.0925607f, - 0.0849398f, 0.0772420f, 0.0695677f, 0.0620107f, - 0.0546572f, 0.0475844f, 0.0408600f, 0.0345417f, - 0.0286774f, 0.0233055f, 0.0184558f, 0.0141503f, - 0.0104042f, 0.0072274f, 0.0046257f, 0.0026016f, - 0.0011560f, 0.0002890f, 0.0000000f, 0.0000000f, - 0.0000000f -}; -const float inter_core_16kHz_output_8kHz_flt[] = -{ - 0.5517241f, 0.5388595f, 0.5018346f, 0.4450639f, 0.3750000f, 0.2990011f, - 0.2241379f, 0.1562044f, 0.0991379f, 0.0549361f, 0.0240275f, 0.0059349f, - 0.0000000f -}; -const float inter_core_16kHz_output_16kHz_flt[] = -{ - 0.5517241f, 0.5388595f, 0.5018346f, 0.4450639f, 0.3750000f, 0.2990011f, - 0.2241379f, 0.1562044f, 0.0991379f, 0.0549361f, 0.0240275f, 0.0059349f, - 0.0000000f -}; -const float inter_core_16kHz_output_32kHz_flt[] = -{ - 0.2758621f, 0.2742414f, 0.2694298f, 0.2615753f, 0.2509173f, 0.2377748f, - 0.2225320f, 0.2056203f, 0.1875000f, 0.1686403f, 0.1495006f, 0.1305132f, - 0.1120690f, 0.0945060f, 0.0781022f, 0.0630725f, 0.0495690f, 0.0376861f, - 0.0274680f, 0.0189188f, 0.0120137f, 0.0067120f, 0.0029675f, 0.0007394f, - 0.0000000f -}; -const float inter_core_16kHz_output_48kHz_flt[] = -{ - 0.1839080f, 0.1834272f, 0.1819912f, 0.1796198f, 0.1763457f, 0.1722133f, - 0.1672782f, 0.1616061f, 0.1552712f, 0.1483546f, 0.1409433f, 0.1331275f, - 0.1250000f, 0.1166535f, 0.1081796f, 0.0996670f, 0.0912002f, 0.0828579f, - 0.0747126f, 0.0668293f, 0.0592649f, 0.0520681f, 0.0452794f, 0.0389306f, - 0.0330460f, 0.0276422f, 0.0227295f, 0.0183120f, 0.0143894f, 0.0109575f, - 0.0080092f, 0.0055360f, 0.0035286f, 0.0019783f, 0.0008771f, 0.0002189f, - 0.0000000f -}; -const float inter_core_25_6kHz_output_8kHz_flt[] = -{ - 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, - 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, - 0.0000000f -}; -const float inter_core_25_6kHz_output_16kHz_flt[] = -{ - 0.5349196f, 0.5094466f, 0.4391227f, 0.3400065f, - 0.2325402f, 0.1353016f, 0.0608773f, 0.0152453f, - 0.0000000f -}; -const float inter_core_25_6kHz_output_32kHz_flt[] = -{ - 0.4279357f, 0.4147958f, 0.3774199f, 0.3214508f, - 0.2548195f, 0.1860321f, 0.1225801f, 0.0699165f, - 0.0312127f, 0.0078047f, 0.0000000f, 0.0000000f, - 0.0000000f -}; -const float inter_core_25_6kHz_output_48kHz_flt[] = -{ - 0.2852965f, 0.2813740f, 0.2698819f, 0.2516166f, - 0.2278099f, 0.2000000f, 0.1698781f, 0.1391327f, - 0.1093111f, 0.0817166f, 0.0573517f, 0.0369093f, - 0.0208069f, 0.0092505f, 0.0023118f, 0.0000000f, - 0.0000000f -}; - -const TCX_LTP_FILTER_FLT tcxLtpFilters_flt[12] =//Q15 -{ - { inter_core_12_8kHz_output_8kHz_flt, 2 }, - { inter_core_12_8kHz_output_16kHz_flt, 3 }, - { inter_core_12_8kHz_output_32kHz_flt, 5 }, - { inter_core_12_8kHz_output_48kHz_flt, 8 }, - { inter_core_16kHz_output_8kHz_flt, 2 }, - { inter_core_16kHz_output_16kHz_flt, 2 }, - { inter_core_16kHz_output_32kHz_flt, 4 }, - { inter_core_16kHz_output_48kHz_flt, 6 }, - { inter_core_25_6kHz_output_8kHz_flt, 2 }, - { inter_core_25_6kHz_output_16kHz_flt, 2 }, - { inter_core_25_6kHz_output_32kHz_flt, 3 }, - { inter_core_25_6kHz_output_48kHz_flt, 4 }, -}; - const Word16 inter_core_12_8kHz_output_8kHz[] = { 17528/*0.5349196f Q15*/, 16694/*0.5094466f Q15*/, 14389/*0.4391227f Q15*/, 11141/*0.3400065f Q15*/, @@ -36289,153 +22952,6 @@ const Word16 NumRatioBits[2][17] = } }; // Q0 -const float Ratios_WB_2[32] = - /* 2 */ { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 60, 64, 72 }; - -const float Ratios_WB_3[32] = - /* 3 */ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 44, 48, 54, 60, 68, 78, 80 }; - -const float Ratios_WB_4[32] = - /* 4 */ { 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 48, 52, 54, 68 }; - -const float Ratios_WB_5[32] = - /* 5 */ { 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 40, 44, 48, 54 }; - -const float Ratios_WB_6[32] = - /* 6 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 5.5f, 6, 6.5f, 7, 7.5f, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 34, 40, 41 }; - -const float Ratios_WB_7[32] = - /* 7 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22.5f, 24, 25, 27, 28, 30, 35 }; - -const float Ratios_WB_8[16] = - /* 8 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 5.5f, 6, 7, 8, 9, 10 }; - -const float Ratios_WB_9[16] = - /* 9 */ { 1, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 18, 27 }; - -const float Ratios_WB_10[16] = - /* 10 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 5, 6, 8, 10, 15, 18, 22, 24, 26 }; - -const float Ratios_WB_11[16] = - /* 11 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 5, 6, 8, 10, 12, 13, 14, 18, 21 }; - -const float Ratios_WB_12[16] = - /* 12 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 8, 9, 11, 12, 13.5f, 16, 20 }; - -const float Ratios_WB_13[16] = - /* 13 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 20 }; - -const float Ratios_WB_14[16] = - /* 14 */ { 0.5f, 1, 1.5f, 2, 2.5f, 3, 4, 4.5f, 6, 7.5f, 9, 10, 12, 14, 15, 18 }; - -const float Ratios_WB_15[16] = - /* 15 */ { 0.5f, 1, 1.25f, 1.5f, 1.75f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 8, 9, 14 }; - -const float Ratios_WB_16[4] = - /* 16 */ { 0.5f, 1, 2, 4 }; - -const float Ratios_WB_17[4] = - /* 17 */ { 1, 1.5f, 2, 4 }; - -const float Ratios_WB_18[4] = - /* 18 */ { 1, 2, 3, 4 }; - -const float Ratios_NB_2[32] = - /* 2 */ { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 38, 40 }; - -const float Ratios_NB_3[16] = - /* 3 */ { 0.5f, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 24, 30 }; - -const float Ratios_NB_4[16] = - /* 4 */ { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 30 }; - -const float Ratios_NB_5[16] = - /* 5 */ { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 24, 30 }; - -const float Ratios_NB_6[16] = - /* 6 */ { 2, 2.5f, 3, 3.5f, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20 }; - -const float Ratios_NB_7[16] = - /* 7 */ { 1, 2, 2.5f, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20 }; - -const float Ratios_NB_8[16] = - /* 8 */ { 1, 1.5f, 2, 2.5f, 3, 3.5f, 4, 4.5f, 5, 6, 7, 8, 9, 10, 12, 16 }; - -const float Ratios_NB_9[8] = - /* 9 */ { 1, 2, 3, 4, 5, 6, 8, 10 }; - -const float Ratios_NB_10[8] = - /* 10 */ { 1, 2, 3, 4, 5, 6, 8, 10 }; - -const float Ratios_NB_11[8] = - /* 11 */ { 1, 1.5f, 2, 3, 4, 5, 6, 8 }; - -const float Ratios_NB_12[8] = - /* 12 */ { 1, 2, 2.5f, 3, 4, 5, 6, 8 }; - -const float Ratios_NB_13[4] = - /* 13 */ { 1, 2, 3, 4 }; - -const float Ratios_NB_14[4] = - /* 14 */ { 1, 2, 4, 6 }; - -const float Ratios_NB_15[4] = - /* 15 */ { 1, 2, 3, 4 }; - -const float Ratios_NB_16[4] = - /* 16 */ { 1, 1.5f, 2, 4 }; - -const float Ratios_NB_17[4] = - /* 17 */ { 1, 1.5f, 2, 3 }; - -const float Ratios_NB_18[4] = - /* 18 */ { 0.5f, 1, 2, 3 }; - -const float * const Ratios[2][17] = -{ - /* NB */ - { - Ratios_NB_2, - Ratios_NB_3, - Ratios_NB_4, - Ratios_NB_5, - Ratios_NB_6, - Ratios_NB_7, - Ratios_NB_8, - Ratios_NB_9, - Ratios_NB_10, - Ratios_NB_11, - Ratios_NB_12, - Ratios_NB_13, - Ratios_NB_14, - Ratios_NB_15, - Ratios_NB_16, - Ratios_NB_17, - Ratios_NB_18 - }, - - /* WB */ - { - Ratios_WB_2, - Ratios_WB_3, - Ratios_WB_4, - Ratios_WB_5, - Ratios_WB_6, - Ratios_WB_7, - Ratios_WB_8, - Ratios_WB_9, - Ratios_WB_10, - Ratios_WB_11, - Ratios_WB_12, - Ratios_WB_13, - Ratios_WB_14, - Ratios_WB_15, - Ratios_WB_16, - Ratios_WB_17, - Ratios_WB_18 - } -}; - /* 7Q8 */ const Word16 Ratios_WB_2_fx[32] = /* 2 */{ 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, 6144, 6656, 7168, 7680, 8192, 8704, 9216, 9728, 10240, 15360, 16384, 18432 }; @@ -36608,11 +23124,6 @@ const struct TnsParameters tnsParameters32kHz_Stereo[2]= { 600, 3, /*1.75f, 0.0625f, 4.4f ,*/ 224/*1.75f Q7*/, 2048/*0.0625f Q15*/ ,563 /*4.4f Q7*/ } }; -const float tnsAcfWindow[TNS_MAX_FILTER_ORDER] = -{ - 0.997803f, 0.991211f, 0.980225f, 0.964844f, 0.945068f, 0.920898f, 0.892334f, 0.859375f -}; - const Word16 tnsAcfWindow_fx[TNS_MAX_FILTER_ORDER] = { 32696/*0.997803f Q15*/, 32480/*0.991211f Q15*/, 32120/*0.980225f Q15*/, 31616/*0.964844f Q15*/, 30968/*0.945068f Q15*/, 30176/*0.920898f Q15*/, 29240/*0.892334f Q15*/, 28160/*0.859375f Q15*/ @@ -37161,26 +23672,6 @@ const ParamsBitMap tnsEnabledOnWhiteSWBTCX10BitMap = /** * 4 bit resolution TNS coefficients. */ -const float tnsCoeff4_flt[16]= -{ - -0.99573418F, /* = sin(-8*(EVS_PI/2.0)/(8 + 0.5)) */ - -0.96182564F, /* = sin(-7*(EVS_PI/2.0)/(8 + 0.5)) */ - -0.89516329F, - -0.79801723F, - -0.67369564F, - -0.52643216F, - -0.36124167F, - -0.18374952F, /* = sin(-1*(EVS_PI/2.0)/(8 + 0.5)) */ - 0.00000000F, /* = sin(0*(EVS_PI/2.0)/(8 + 0.5)) */ - 0.20791169F, /* = sin(1*(EVS_PI/2.0)/(8 - 0.5)) */ - 0.40673664F, - 0.58778525F, - 0.74314483F, - 0.86602540F, - 0.95105652F, /* = sin(6*(EVS_PI/2.0)/(8 - 0.5)) */ - 0.99452190F /* = sin(7*(EVS_PI/2.0)/(8 - 0.5)) */ -}; - const Word16 tnsCoeff4[16] = { -32628/*-0.99573418F Q15*/, /* = sin(-8*(PI/2.0)/(8 + 0.5)) */ @@ -37393,189 +23884,6 @@ const Word16 igf_tile_offset_table[IGF_BITRATE_UNKNOWN][2*IGF_MAX_TILES+1] = { / { 1, 2, 416} /*128000 FB (stereo) */ }; -const float igf_whitening_TH_flt[IGF_BITRATE_UNKNOWN][2][IGF_MAX_TILES] = -{ - /* 0: for 9600 kbs WB */ - { - /* medium */ {0.36f, 0.36f, 0.f, 0.f}, - /* strong */ {1.41f, 1.41f, 0.f, 0.f} - }, - /* 1: for 13200 kbs WB RF */ - { - /* medium */ {0.36f, 0.36f, 0.f, 0.f}, - /* strong */ {1.41f, 1.41f, 0.f, 0.f} - }, - /* 2: for 9600 kbs SWB */ - { - /* medium */ {0.84f, 0.89f, 0.f, 0.f}, - /* strong */ {1.30f, 1.25f, 0.f, 0.f} - }, - /* 3: for 13200 kbs SWB */ - { - /* medium */ {0.84f, 0.89f, 0.f, 0.f}, - /* strong */ {1.30f, 1.25f, 0.f, 0.f} - }, - /* 4: for 13200 kbs SWB RF */ - { - /* medium */ {0.84f, 0.89f, 0.f, 0.f}, - /* strong */ {1.30f, 1.25f, 0.f, 0.f} - }, - /* 5: for 16400 kbs SWB */ - { - /* medium */ {0.83f, 0.89f, 0.89f, 0.f}, - /* strong */ {1.31f, 1.19f, 1.19f, 0.f} - }, - /* 6: for 24400 kbs SWB*/ - { - /* medium */ {0.81f, 0.85f, 0.85f, 0.f}, - /* strong */ {1.35f, 1.23f, 1.23f, 0.f} - }, - /* 7: for 32000 kbs SWB */ - { - /* medium */ {0.91f, 0.85f, 0.85f, 0.f}, - /* strong */ {1.34f, 1.35f, 1.35f, 0.f} - }, - /* 8: for 48000 kbs SWB */ - { - /* medium */ {1.15f, 0.f, 0.f, 0.f}, - /* strong */ {1.19f, 0.f, 0.f, 0.f} - }, - /* 9: for 64000 kbs SWB */ - { - /* medium */ {1.15f, 0.f, 0.f, 0.f}, - /* strong */ {1.19f, 0.f, 0.f, 0.f} - }, - /* 10: for 16400 kbs FB */ - { - /* medium */ {0.63f, 0.27f, 0.36f, 0.f}, - /* strong */ {1.53f, 1.32f, 0.67f, 0.f} - }, - /* 11: for 24400 kbs FB */ - { - /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, - /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} - }, - /* 12: for 32000 kbs FB */ - { - /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, - /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} - }, - /* 13: for 48000 kbs FB */ - { - /* medium */ {0.80f, 0.f, 0.f, 0.f}, - /* strong */ {1.00f, 0.f, 0.f, 0.f} - }, - /* 14: for 64000 kbs FB */ - { - /* medium */ {0.80f, 0.f, 0.f, 0.f}, - /* strong */ {1.00f, 0.f, 0.f, 0.f} - }, - /* 15: for 96000 kbs FB */ - { - /* medium */ {0.f, 0.f, 0.f, 0.f}, - /* strong */ {2.82f, 0.f, 0.f, 0.f} - }, - /* 16: for 128000 kbs FB */ - { - /* medium */ {0.f, 0.f, 0.f, 0.f}, - /* strong */ {2.82f, 0.f, 0.f, 0.f} - }, - /* 17: for 13200 kbs WB (stereo) */ - { - /* medium */ {0.80f, 0.75f, 0.f, 0.f}, - /* strong */ {1.50f, 1.45f, 0.f, 0.f} - }, - /* 18: for 16400 kbs WB (stereo) */ - { - /* medium */ {0.90f, 0.85f, 0.f, 0.f}, - /* strong */ {1.60f, 1.50f, 0.f, 0.f} - }, - /* 19: for 13200 kbs SWB (stereo) */ - { - /* medium */ { 0.89f, 0.89f, 0.80f ,0.80f }, - /* strong */ { 1.25f, 1.25f, 1.19f, 1.19f } - }, - /* 20: for 16400 kbs SWB (stereo) */ - { - /* medium */{ 1.05f, 1.05f, 1.10f, 1.10f, 1.05f, 1.05f }, - /* strong */{ 1.70f, 1.70f, 1.65f, 1.65f, 1.6f, 1.5f } - }, - /* 21: for 24400 kbs SWB (stereo) */ - { - /* medium */{ 1.20f, 1.20f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f }, - /* strong */{ 1.70f, 1.70f, 1.70f, 1.70f, 1.55f, 1.45f, 1.20f } - }, - /* 22: for 32000 kbs SWB (stereo) */ - { - /* medium */{ 1.20f, 1.20f, 1.15f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f }, - /* strong */{ 1.80f, 1.80f, 1.80f, 1.80f, 1.65f, 1.55f, 1.45f, 1.20f } - }, - /* 23: for 48000 kbs SWB (stereo) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ - { - /* medium */ {0.75f, 0.70f, 0.50f, 0.f }, - /* strong */ {1.25f, 1.10f, 1.00f, 0.f } - }, - /* 24: for 48000 kbs SWB (stereo TCX10) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ - { - /* medium */ {0.75f, 0.70f, 0.50f, 0.f }, - /* strong */ {1.25f, 1.10f, 1.00f, 0.f } - }, - /* 25: for 64000 kbs SWB (stereo) */ - { - /* medium */ {1.00f, 1.00f, 1.20f, 1.25f}, - /* strong */ {1.50f, 1.50f, 1.60f, 1.60f} - }, - /* 26: for 80000 kbs SWB (stereo) */ - { - /* medium */ { 1.20f, 1.25f, 0.f, 0.f }, - /* strong */ { 1.60f, 1.60f, 0.f, 0.f } - }, - /* 27: for 96000 kbs SWB (stereo) */ - { - /* medium */ {1.15f, 0.f, 0.f, 0.f}, - /* strong */ {1.19f, 0.f, 0.f, 0.f} - }, - /* 28: for 24400 kbs FB (stereo) */ - { - /* medium */{ 1.20f, 1.20f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f, 0.34f, 0.34f }, - /* strong */{ 1.70f, 1.70f, 1.70f, 1.70f, 1.55f, 1.45f, 1.20f, 0.65f, 0.65f } - }, - /* 29: for 32000 kbs FB (stereo) */ - { - /* medium */{ 1.20f, 1.20f, 1.15f, 1.15f, 1.10f, 1.05f, 1.00f, 0.90f, 0.34f, 0.34f }, - /* strong */{ 1.80f, 1.80f, 1.80f, 1.80f, 1.65f, 1.55f, 1.45f, 1.20f, 0.65f, 0.65f } - }, - /* 30: for 48000 kbs FB (stereo) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ - { - /* medium */ {0.78f, 0.31f, 0.34f, 0.34f}, - /* strong */ {1.49f, 1.38f, 0.65f, 0.65f} - }, - /* 31: for 48000 kbs FB (stereo TCX10) */ /* currently not used due to adaptive calculation of thresholds at 48 kbps */ - { - /* medium */ {0.75f, 0.70f, 0.50f, 0.50f }, - /* strong */ {1.25f, 1.10f, 1.00f, 1.00f } - }, - /* 32: for 64000 kbs FB (stereo) */ - { - /* medium */ {1.00f, 1.00f, 1.20f, 1.25f, 0.75f}, - /* strong */ {1.50f, 1.50f, 1.60f, 1.60f, 1.00f} - }, - /* 33: for 80000 kbs FB (stereo) */ - { - /* medium */ { 1.20f, 1.25f, 0.75f, 0.f }, - /* strong */ { 1.60f, 1.60f, 1.00f, 0.f } - }, - /* 34: for 96000 kbs FB (stereo) */ - { - /* medium */ {0.91f, 0.85f, 0.0f, 0.f}, - /* strong */ {1.34f, 1.35f, 0.0f, 0.f} - }, - /* 35: for 128000 kbs FB (stereo) */ - { - /* medium */ {0.f, 0.f, 0.f, 0.f}, - /* strong */ {2.82f, 0.f, 0.f, 0.f} - } -}; const Word16 igf_whitening_TH_ivas_fx[][2][IGF_MAX_TILES] = { /* 0: for 9600 kbs WB */ @@ -38118,21 +24426,6 @@ const IGF_MODE igfMode[IGF_BITRATE_UNKNOWN] = { 48000, 960, 1600, 1 } /*128.0kbs FB CPE 35 */ /* stereo mode */ }; -const float normReciprocal[CHEAP_NORM_SIZE] = -{ - 0.0f, 1.0000000000f, 0.5000000000f, 0.3333333333f, 0.2500000000f, 0.2000000000f, 0.1666666667f, 0.1428571429f, 0.1250000000f, 0.1111111111f, 0.1000000000f, 0.0909090909f, 0.0833333333f, 0.0769230769f, 0.0714285714f, 0.0666666667f, 0.0625000000f, 0.0588235294f, 0.0555555556f, 0.0526315789f, 0.0500000000f, 0.0476190476f, 0.0454545455f, 0.0434782609f, 0.0416666667f, 0.0400000000f, 0.0384615385f, 0.0370370370f, 0.0357142857f, 0.0344827586f, 0.0333333333f, 0.0322580645f, 0.0312500000f, 0.0303030303f, 0.0294117647f, 0.0285714286f, 0.0277777778f, 0.0270270270f, 0.0263157895f, 0.0256410256f, 0.0250000000f, 0.0243902439f, 0.0238095238f, 0.0232558140f, 0.0227272727f, 0.0222222222f, 0.0217391304f, 0.0212765957f, 0.0208333333f, 0.0204081633f, 0.0200000000f, 0.0196078431f, 0.0192307692f, 0.0188679245f, 0.0185185185f, 0.0181818182f, 0.0178571429f, 0.0175438596f, 0.0172413793f, 0.0169491525f, 0.0166666667f, 0.0163934426f, 0.0161290323f, 0.0158730159f, 0.0156250000f, 0.0153846154f, 0.0151515152f, 0.0149253731f, 0.0147058824f, 0.0144927536f, 0.0142857143f, 0.0140845070f, 0.0138888889f, 0.0136986301f, 0.0135135135f, 0.0133333333f, 0.0131578947f, 0.0129870130f, 0.0128205128f, 0.0126582278f, 0.0125000000f, 0.0123456790f, 0.0121951220f, 0.0120481928f, 0.0119047619f, 0.0117647059f, 0.0116279070f, 0.0114942529f, 0.0113636364f, 0.0112359551f, 0.0111111111f, 0.0109890110f, 0.0108695652f, 0.0107526882f, 0.0106382979f, 0.0105263158f, 0.0104166667f, 0.0103092784f, 0.0102040816f, 0.0101010101f, 0.0100000000f, 0.0099009901f, 0.0098039216f, 0.0097087379f, 0.0096153846f, 0.0095238095f, 0.0094339623f, 0.0093457944f, 0.0092592593f, 0.0091743119f, 0.0090909091f, 0.0090090090f, 0.0089285714f, 0.0088495575f, 0.0087719298f, 0.0086956522f, 0.0086206897f, 0.0085470085f, 0.0084745763f, 0.0084033613f, 0.0083333333f, 0.0082644628f, 0.0081967213f, 0.0081300813f, 0.0080645161f, 0.0080000000f, 0.0079365079f, 0.0078740157f, 0.0078125000f, 0.0077519380f, 0.0076923077f, 0.0076335878f, 0.0075757576f, 0.0075187970f, 0.0074626866f, 0.0074074074f, 0.0073529412f, 0.0072992701f, 0.0072463768f, 0.0071942446f, 0.0071428571f, 0.0070921986f, 0.0070422535f, 0.0069930070f, 0.0069444444f, 0.0068965517f, 0.0068493151f, 0.0068027211f, 0.0067567568f, 0.0067114094f, 0.0066666667f, 0.0066225166f, 0.0065789474f, 0.0065359477f, 0.0064935065f, 0.0064516129f, 0.0064102564f, 0.0063694268f, 0.0063291139f, 0.0062893082f, 0.0062500000f -}; - -const float w1N8_float[30] = {0.998795f, -0.049068f, 0.995185f, -0.098017f, 0.989177f, -0.146730f, 0.980785f, -0.195090f, 0.970031f, -0.242980f, 0.956940f, -0.290285f, 0.941544f, -0.336890f, 0.923880f, -0.382683f, 0.903989f, -0.427555f, 0.881921f, -0.471397f, 0.857729f, -0.514103f, 0.831470f, -0.555570f, 0.803208f, -0.595699f, 0.773010f, -0.634393f, 0.740951f, -0.671559f}; -const float w2N8_float[30] = {0.995185f, -0.098017f, 0.980785f, -0.195090f, 0.956940f, -0.290285f, 0.923880f, -0.382683f, 0.881921f, -0.471397f, 0.831470f, -0.555570f, 0.773010f, -0.634393f, 0.707107f, -0.707107f, 0.634393f, -0.773010f, 0.555570f, -0.831470f, 0.471397f, -0.881921f, 0.382683f, -0.923880f, 0.290285f, -0.956940f, 0.195090f, -0.980785f, 0.098017f, -0.995185f}; -const float w3N8_float[30] = {0.989177f, -0.146730f, 0.956940f, -0.290285f, 0.903989f, -0.427555f, 0.831470f, -0.555570f, 0.740951f, -0.671559f, 0.634393f, -0.773010f, 0.514103f, -0.857729f, 0.382683f, -0.923880f, 0.242980f, -0.970031f, 0.098017f, -0.995185f, -0.049068f, -0.998795f, -0.195090f, -0.980785f, -0.336890f, -0.941544f, -0.471397f, -0.881921f, -0.595699f, -0.803208f}; -const float w4N8_float[30] = {0.980785f, -0.195090f, 0.923880f, -0.382683f, 0.831470f, -0.555570f, 0.707107f, -0.707107f, 0.555570f, -0.831470f, 0.382683f, -0.923880f, 0.195090f, -0.980785f, 0.000000f, -1.000000f, -0.195090f, -0.980785f, -0.382683f, -0.923880f, -0.555570f, -0.831470f, -0.707107f, -0.707107f, -0.831470f, -0.555570f, -0.923880f, -0.382683f, -0.980785f, -0.195090f}; -const float w5N8_float[30] = {0.970031f, -0.242980f, 0.881921f, -0.471397f, 0.740951f, -0.671559f, 0.555570f, -0.831470f, 0.336890f, -0.941544f, 0.098017f, -0.995185f, -0.146730f, -0.989177f, -0.382683f, -0.923880f, -0.595699f, -0.803208f, -0.773010f, -0.634393f, -0.903989f, -0.427555f, -0.980785f, -0.195090f, -0.998795f, 0.049068f, -0.956940f, 0.290285f, -0.857729f, 0.514103f}; -const float w6N8_float[30] = {0.956940f, -0.290285f, 0.831470f, -0.555570f, 0.634393f, -0.773010f, 0.382683f, -0.923880f, 0.098017f, -0.995185f, -0.195090f, -0.980785f, -0.471397f, -0.881921f, -0.707107f, -0.707107f, -0.881921f, -0.471397f, -0.980785f, -0.195090f, -0.995185f, 0.098017f, -0.923880f, 0.382683f, -0.773010f, 0.634393f, -0.555570f, 0.831470f, -0.290285f, 0.956940f}; -const float w7N8_float[30] = {0.941544f, -0.336890f, 0.773010f, -0.634393f, 0.514103f, -0.857729f, 0.195090f, -0.980785f, -0.146730f, -0.989177f, -0.471397f, -0.881921f, -0.740951f, -0.671559f, -0.923880f, -0.382683f, -0.998795f, -0.049068f, -0.956940f, 0.290285f, -0.803208f, 0.595699f, -0.555570f, 0.831470f, -0.242980f, 0.970031f, 0.098017f, 0.995185f, 0.427555f, 0.903989f}; -const float * const w_a_float[7] = {w1N8_float, w2N8_float, w3N8_float, w4N8_float, w5N8_float, w6N8_float, w7N8_float}; - - #define STCP( a, b ) {{ WORD322WORD16( a ), WORD322WORD16( b ) }} const PWord16 SineTable512_fx[] =//Q15 @@ -38303,53 +24596,6 @@ const Word16 InvDiffTable[32] = /* Q15 */ 0x290F, 0x27A4, 0x264C, 0x2506, 0x23CF, 0x22A7, 0x218E, 0x2081 }; - -const float tcx_mdct_window_48[420] = -{ - 0.00186999f , 0.00560996f , 0.00934984f , 0.01308960f , 0.01682917f , 0.02056850f , 0.02430755f , 0.02804626f , 0.03178458f , 0.03552244f , - 0.03925982f , 0.04299664f , 0.04673287f , 0.05046843f , 0.05420330f , 0.05793741f , 0.06167070f , 0.06540313f , 0.06913465f , 0.07286520f , - 0.07659473f , 0.08032320f , 0.08405053f , 0.08777669f , 0.09150162f , 0.09522527f , 0.09894760f , 0.10266854f , 0.10638804f , 0.11010605f , - 0.11382252f , 0.11753740f , 0.12125064f , 0.12496217f , 0.12867197f , 0.13237998f , 0.13608611f , 0.13979036f , 0.14349262f , 0.14719291f , - 0.15089111f , 0.15458722f , 0.15828118f , 0.16197290f , 0.16566236f , 0.16934951f , 0.17303430f , 0.17671664f , 0.18039654f , 0.18407391f , - 0.18774869f , 0.19142085f , 0.19509032f , 0.19875708f , 0.20242107f , 0.20608221f , 0.20974047f , 0.21339579f , 0.21704814f , 0.22069745f , - 0.22434367f , 0.22798675f , 0.23162664f , 0.23526330f , 0.23889665f , 0.24252668f , 0.24615330f , 0.24977650f , 0.25339618f , 0.25701234f , - 0.26062489f , 0.26423380f , 0.26783898f , 0.27144048f , 0.27503812f , 0.27863196f , 0.28222188f , 0.28580785f , 0.28938982f , 0.29296774f , - 0.29654160f , 0.30011126f , 0.30367675f , 0.30723801f , 0.31079495f , 0.31434754f , 0.31789574f , 0.32143947f , 0.32497874f , 0.32851344f , - 0.33204356f , 0.33556902f , 0.33908981f , 0.34260586f , 0.34611708f , 0.34962347f , 0.35312498f , 0.35662156f , 0.36011314f , 0.36359966f , - 0.36708114f , 0.37055746f , 0.37402859f , 0.37749448f , 0.38095513f , 0.38441044f , 0.38786036f , 0.39130485f , 0.39474389f , 0.39817739f , - 0.40160531f , 0.40502763f , 0.40844429f , 0.41185522f , 0.41526040f , 0.41865978f , 0.42205328f , 0.42544088f , 0.42882255f , 0.43219820f , - 0.43556780f , 0.43893135f , 0.44228873f , 0.44563991f , 0.44898486f , 0.45232356f , 0.45565590f , 0.45898187f , 0.46230146f , 0.46561456f , - 0.46892112f , 0.47222117f , 0.47551456f , 0.47880134f , 0.48208141f , 0.48535472f , 0.48862126f , 0.49188098f , 0.49513379f , 0.49837968f , - 0.50161862f , 0.50485051f , 0.50807536f , 0.51129311f , 0.51450372f , 0.51770711f , 0.52090323f , 0.52409208f , 0.52727365f , 0.53044778f , - 0.53361452f , 0.53677386f , 0.53992558f , 0.54306978f , 0.54620641f , 0.54933536f , 0.55245668f , 0.55557030f , 0.55867606f , 0.56177408f , - 0.56486416f , 0.56794637f , 0.57102066f , 0.57408696f , 0.57714522f , 0.58019543f , 0.58323747f , 0.58627141f , 0.58929712f , 0.59231454f , - 0.59532380f , 0.59832466f , 0.60131711f , 0.60430121f , 0.60727680f , 0.61024398f , 0.61320257f , 0.61615258f , 0.61909395f , 0.62202674f , - 0.62495077f , 0.62786609f , 0.63077259f , 0.63367027f , 0.63655913f , 0.63943905f , 0.64231002f , 0.64517200f , 0.64802498f , 0.65086889f , - 0.65370369f , 0.65652937f , 0.65934587f , 0.66215312f , 0.66495109f , 0.66773981f , 0.67051917f , 0.67328912f , 0.67604965f , 0.67880082f , - 0.68154240f , 0.68427444f , 0.68699700f , 0.68970984f , 0.69241309f , 0.69510663f , 0.69779050f , 0.70046461f , 0.70312881f , 0.70578331f , - 0.70842785f , 0.71106249f , 0.71368724f , 0.71630198f , 0.71890670f , 0.72150135f , 0.72408593f , 0.72666037f , 0.72922462f , 0.73177868f , - 0.73432255f , 0.73685610f , 0.73937935f , 0.74189228f , 0.74439484f , 0.74688697f , 0.74936867f , 0.75183988f , 0.75430053f , 0.75675064f , - 0.75919020f , 0.76161915f , 0.76403743f , 0.76644498f , 0.76884186f , 0.77122796f , 0.77360326f , 0.77596778f , 0.77832144f , 0.78066421f , - 0.78299606f , 0.78531700f , 0.78762686f , 0.78992575f , 0.79221362f , 0.79449034f , 0.79675603f , 0.79901052f , 0.80125386f , 0.80348599f , - 0.80570680f , 0.80791646f , 0.81011480f , 0.81230175f , 0.81447738f , 0.81664157f , 0.81879437f , 0.82093573f , 0.82306564f , 0.82518393f , - 0.82729077f , 0.82938600f , 0.83146966f , 0.83354163f , 0.83560199f , 0.83765066f , 0.83968759f , 0.84171283f , 0.84372622f , 0.84572780f , - 0.84771764f , 0.84969556f , 0.85166162f , 0.85361582f , 0.85555798f , 0.85748821f , 0.85940647f , 0.86131269f , 0.86320680f , 0.86508894f , - 0.86695892f , 0.86881679f , 0.87066251f , 0.87249607f , 0.87431735f , 0.87612653f , 0.87792331f , 0.87970787f , 0.88148010f , 0.88324010f , - 0.88498765f , 0.88672286f , 0.88844568f , 0.89015603f , 0.89185393f , 0.89353943f , 0.89521235f , 0.89687276f , 0.89852065f , 0.90015596f , - 0.90177864f , 0.90338880f , 0.90498626f , 0.90657103f , 0.90814322f , 0.90970266f , 0.91124934f , 0.91278332f , 0.91430449f , 0.91581285f , - 0.91730851f , 0.91879123f , 0.92026114f , 0.92171818f , 0.92316234f , 0.92459357f , 0.92601186f , 0.92741722f , 0.92880958f , 0.93018895f , - 0.93155533f , 0.93290865f , 0.93424892f , 0.93557620f , 0.93689030f , 0.93819135f , 0.93947929f , 0.94075406f , 0.94201565f , 0.94326407f , - 0.94449931f , 0.94572133f , 0.94693017f , 0.94812572f , 0.94930798f , 0.95047700f , 0.95163274f , 0.95277512f , 0.95390421f , 0.95501995f , - 0.95612234f , 0.95721138f , 0.95828700f , 0.95934916f , 0.96039802f , 0.96143335f , 0.96245527f , 0.96346366f , 0.96445870f , 0.96544015f , - 0.96640813f , 0.96736264f , 0.96830356f , 0.96923089f , 0.97014475f , 0.97104502f , 0.97193170f , 0.97280478f , 0.97366422f , 0.97451007f , - 0.97534233f , 0.97616094f , 0.97696584f , 0.97775710f , 0.97853470f , 0.97929859f , 0.98004884f , 0.98078531f , 0.98150808f , 0.98221713f , - 0.98291242f , 0.98359400f , 0.98426181f , 0.98491579f , 0.98555607f , 0.98618257f , 0.98679525f , 0.98739409f , 0.98797917f , 0.98855042f , - 0.98910779f , 0.98965138f , 0.99018115f , 0.99069703f , 0.99119908f , 0.99168724f , 0.99216151f , 0.99262190f , 0.99306846f , 0.99350113f , - 0.99391985f , 0.99432468f , 0.99471563f , 0.99509263f , 0.99545574f , 0.99580491f , 0.99614018f , 0.99646151f , 0.99676889f , 0.99706233f , - 0.99734181f , 0.99760735f , 0.99785894f , 0.99809659f , 0.99832022f , 0.99852991f , 0.99872565f , 0.99890745f , 0.99907523f , 0.99922901f , - 0.99936891f , 0.99949473f , 0.99960661f , 0.99970454f , 0.99978846f , 0.99985838f , 0.99991435f , 0.99995631f , 0.99998426f , 0.99999827f , -}; - const Word16 tcx_mdct_window_48_fx[420] =//Q15 { 61, 183, 306, 428, 551, 673, 796, 919, 1041, 1163, 1286, 1408, 1531, 1653, 1776, 1898, 2020, 2143, 2265, 2387, 2509, @@ -38393,27 +24639,6 @@ const Word16 tcx_mdct_window_48_fx[420] =//Q15 32582, 32594, 32607, 32619, 32630, 32641, 32652, 32662, 32671, 32680, 32689, 32697, 32705, 32712, 32719, 32726, 32732, 32737, 32742, 32747, 32751, 32755, 32758, 32761, 32763, 32765, 32766, 32767, 32767 }; -const float tcx_mdct_window_half_48[180] = -{ - 0.00436331f , 0.01308960f , 0.02181488f , 0.03053851f , 0.03925982f , 0.04797813f , 0.05669279f , 0.06540313f , 0.07410849f , 0.08280820f , - 0.09150162f , 0.10018806f , 0.10886688f , 0.11753739f , 0.12619896f , 0.13485092f , 0.14349262f , 0.15212339f , 0.16074257f , 0.16934951f , - 0.17794354f , 0.18652403f , 0.19509032f , 0.20364176f , 0.21217766f , 0.22069743f , 0.22920039f , 0.23768589f , 0.24615328f , 0.25460196f , - 0.26303121f , 0.27144045f , 0.27982903f , 0.28819627f , 0.29654157f , 0.30486432f , 0.31316379f , 0.32143945f , 0.32969064f , 0.33791670f , - 0.34611705f , 0.35429105f , 0.36243802f , 0.37055743f , 0.37864861f , 0.38671094f , 0.39474386f , 0.40274671f , 0.41071883f , 0.41865975f , - 0.42656875f , 0.43444523f , 0.44228870f , 0.45009845f , 0.45787391f , 0.46561453f , 0.47331968f , 0.48098877f , 0.48862121f , 0.49621648f , - 0.50377399f , 0.51129311f , 0.51877326f , 0.52621394f , 0.53361452f , 0.54097444f , 0.54829323f , 0.55557024f , 0.56280494f , 0.56999677f , - 0.57714516f , 0.58424968f , 0.59130967f , 0.59832460f , 0.60529399f , 0.61221731f , 0.61909395f , 0.62592345f , 0.63270533f , 0.63943899f , - 0.64612401f , 0.65275973f , 0.65934581f , 0.66588163f , 0.67236680f , 0.67880076f , 0.68518299f , 0.69151300f , 0.69779044f , 0.70401472f , - 0.71018535f , 0.71630198f , 0.72236395f , 0.72837096f , 0.73432249f , 0.74021810f , 0.74605739f , 0.75183982f , 0.75756502f , 0.76323247f , - 0.76884180f , 0.77439266f , 0.77988446f , 0.78531694f , 0.79068959f , 0.79600197f , 0.80125380f , 0.80644459f , 0.81157398f , 0.81664157f , - 0.82164693f , 0.82658976f , 0.83146960f , 0.83628613f , 0.84103900f , 0.84572780f , 0.85035223f , 0.85491186f , 0.85940641f , 0.86383545f , - 0.86819881f , 0.87249601f , 0.87672675f , 0.88089073f , 0.88498765f , 0.88901716f , 0.89297891f , 0.89687276f , 0.90069824f , 0.90445518f , - 0.90814316f , 0.91176200f , 0.91531146f , 0.91879117f , 0.92220098f , 0.92554051f , 0.92880958f , 0.93200785f , 0.93513519f , 0.93819135f , - 0.94117600f , 0.94408906f , 0.94693011f , 0.94969910f , 0.95239580f , 0.95501995f , 0.95757139f , 0.96004987f , 0.96245521f , 0.96478730f , - 0.96704590f , 0.96923089f , 0.97134209f , 0.97337925f , 0.97534233f , 0.97723109f , 0.97904545f , 0.98078525f , 0.98245043f , 0.98404068f , - 0.98555607f , 0.98699635f , 0.98836148f , 0.98965138f , 0.99086589f , 0.99200493f , 0.99306846f , 0.99405634f , 0.99496853f , 0.99580491f , - 0.99656552f , 0.99725020f , 0.99785894f , 0.99839169f , 0.99884838f , 0.99922901f , 0.99953359f , 0.99976200f , 0.99991435f , 0.99999046f , -}; const Word16 tcx_mdct_window_half_48_fx[180] =//Q15 { @@ -38435,15 +24660,7 @@ const Word16 tcx_mdct_window_half_48_fx[180] =//Q15 31759, 31828, 31895, 31960, 32021, 32081, 32138, 32192, 32245, 32294, 32341, 32386, 32428, 32468, 32506, 32540, 32573, 32603, 32630, 32655, 32677, 32697, 32715, 32730, 32742, 32752, 32760, 32765, 32767 }; -const float tcx_mdct_window_trans_48[60] = -{ - 0.01308960f , 0.03925982f , 0.06540313f , 0.09150162f , 0.11753740f , 0.14349262f , 0.16934951f , 0.19509032f , 0.22069745f , 0.24615330f , - 0.27144045f , 0.29654160f , 0.32143945f , 0.34611708f , 0.37055743f , 0.39474389f , 0.41865975f , 0.44228873f , 0.46561453f , 0.48862126f , - 0.51129311f , 0.53361452f , 0.55557024f , 0.57714522f , 0.59832460f , 0.61909395f , 0.63943899f , 0.65934587f , 0.67880076f , 0.69779050f , - 0.71630198f , 0.73432255f , 0.75183982f , 0.76884186f , 0.78531694f , 0.80125386f , 0.81664157f , 0.83146966f , 0.84572780f , 0.85940641f , - 0.87249607f , 0.88498765f , 0.89687276f , 0.90814316f , 0.91879123f , 0.92880958f , 0.93819135f , 0.94693011f , 0.95501995f , 0.96245527f , - 0.96923089f , 0.97534233f , 0.98078531f , 0.98555607f , 0.98965138f , 0.99306846f , 0.99580491f , 0.99785894f , 0.99922901f , 0.99991435f , -}; + const Word16 tcx_mdct_window_trans_48_fx[60] =//Q15 { 428, 1286, 2143, 2998, 3851, 4701, 5549, 6392, 7231, 8065, 8894, @@ -38458,12 +24675,6 @@ const Word16 tcx_mdct_window_trans_48_fx[60] =//Q15 * SWB TBE LSF tables (1.75 kbps) *----------------------------------------------------------------------------------*/ -const float sigma_BWE[] = { - 0.007921463476314f, 0.007777463575548f, 0.008177571366090f, 0.008137429089606f, 0.008964571099066f, - 0.009613750221879f, 0.018255917586799f, 0.018995351636606f, /* for 4 bits first stage */ - 0.008809121277345f, 0.008799007638233f, 0.009070002122415f, 0.009080199707624f, 0.009739951681282f, - 0.010572954192948f, 0.018255917586799f, 0.018995351636606f }; /* for 3 bits first stage */ - const Word32 sigma_BWE_fx[] = {//Q31 17011214, 16701976, 17561200, 17474996, 19251270, 20645372, 39204284, @@ -38472,14 +24683,6 @@ const Word32 sigma_BWE_fx[] = {//Q31 40792208 }; /* for 3 bits first stage */ -const float inv_sigma_BWE[] = { - 126.2392994665869f, 128.5766227364854f, 122.2856952550425f, 122.8889356808437f, 111.5502335749417f, - 104.0176806054527f, 54.7767591108706f, 52.6444584512409f, /* for 4 bits first stage */ - 113.5187005055512f, 113.6491796705346f, 110.2535574416955f, 110.1297363713734f, 102.6699138479089f, - 94.5809450935691f, 54.7767591108706f, 52.6444584512409f /* for 3 bits fiest stage */ - }; - - const Word16 inv_modified_sigma_BWE_fx[] = {//Q1 259, 254, @@ -38517,9 +24720,6 @@ const Word16 modified_sigma_BWE_fx[] =//Q(log2(2.56) 140, 134 }; -const float SHB_LSF_mean[10] = { - 0.04131f, 0.08078f, 0.12348f, 0.16567f, 0.21045f, 0.25449f, 0.30101f, 0.34693f, 0.39605f, 0.44428f -}; const Word16 SHB_LSF_mean_fx[10] = {//Q15 1353, 2646, 4046, @@ -38529,38 +24729,6 @@ const Word16 SHB_LSF_mean_fx[10] = {//Q15 /* 4 bit VQ first stage */ /* An 6-by-16 matrix */ -const float SHB_LSF_VQ4[96] = { - 0.00458f, 0.00158f, -0.01548f, -0.03011f, -0.03405f, -0.02881f, - -0.00563f, -0.00235f, 0.00290f, 0.00711f, 0.01343f, 0.01517f, - -0.00353f, -0.00329f, -0.00335f, -0.00740f, -0.01364f, -0.01809f, - 0.01182f, 0.02439f, 0.03457f, 0.03855f, 0.03844f, 0.03426f, - -0.00393f, -0.01831f, -0.03707f, -0.04240f, -0.04027f, -0.03102f, - 0.01627f, 0.01295f, 0.00453f, -0.00382f, -0.01155f, -0.01531f, - -0.01031f, -0.01803f, -0.01792f, -0.01925f, -0.02185f, -0.02290f, - 0.01540f, 0.02593f, 0.02290f, 0.01553f, 0.00715f, 0.00208f, - 0.00539f, -0.00543f, -0.01244f, 0.01000f, 0.00631f, 0.00066f, - -0.00329f, 0.01043f, 0.01291f, 0.00806f, -0.00054f, -0.00551f, - -0.00337f, -0.01163f, -0.02186f, -0.02214f, -0.00709f, -0.00129f, - 0.00521f, 0.00811f, 0.00835f, 0.01026f, 0.01212f, 0.01374f, - 0.00212f, 0.00871f, 0.01585f, 0.02096f, 0.02002f, 0.01723f, - 0.00368f, 0.00352f, -0.00376f, -0.01167f, -0.00058f, 0.00715f, - -0.01151f, -0.01920f, -0.00905f, -0.00292f, 0.00065f, 0.00195f, - -0.00631f, -0.01393f, 0.01581f, 0.01441f, 0.00548f, 0.00070f -}; - -/* 3 bit VQ first stage */ -const float SHB_LSF_VQ3[48] = { - 0.0085f, 0.0123f, 0.0087f, 0.0020f, -0.0063f, -0.0103f, - 0.0118f, 0.0235f, 0.0256f, 0.0230f, 0.0183f, 0.0136f, - -0.0060f, -0.0139f, -0.0186f, -0.0160f, -0.0063f, -0.0024f, - 0.0012f, 0.0061f, 0.0120f, 0.0157f, 0.0150f, 0.0141f, - -0.0028f, -0.0133f, -0.0299f, -0.0379f, -0.0374f, -0.0298f, - -0.0016f, -0.0030f, -0.0066f, -0.0129f, -0.0183f, -0.0210f, - 0.0039f, 0.0042f, 0.0000f, 0.0016f, 0.0092f, 0.0126f, - -0.0085f, -0.0129f, 0.0003f, 0.0061f, 0.0042f, 0.0022f -}; - -const float *const cb_LSF_BWE[] = { SHB_LSF_VQ4, SHB_LSF_VQ3 }; const Word16 SHB_LSF_VQ4_fx[96] =//Q15 { 150, 51, -507, -986, -1115, -944, @@ -38589,11 +24757,7 @@ const Word16 SHB_LSF_VQ3_fx[48] =//Q15 const Word16 *const cb_LSF_BWE_fx[] = { SHB_LSF_VQ4_fx, SHB_LSF_VQ3_fx }; // Q15 const Word16 mslvq_SHB_min_bits[] = {14, 12}; /* for 4 bits and 3 bits respectively Q0*/ -const float scales_BWE[] = { - 0.932f, 1.677f, 2.811f, /* 14 bits*/ - 0.891f, 1.770f, 3.002f, /* 15 bits */ - 0.849f, 1.769f, 3.226f}; /* 16 bits */ - + const Word16 scales_BWE_fx[] = {//Q13 7634, 13737, 23027, 7299, 14499, @@ -38617,13 +24781,6 @@ const Word8 no_lead_BWE[] = { // Q0 10,9,5, /* 15 bits*/ 16, 11, 5}; /* 16 bits */ - -const float scales_BWE_3b[] = { - 0.958f, 1.741f, 3.532f, /* 12 bits */ - 0.929f, 1.559f, 2.630f, /* 13 bits */ - 0.885f, 1.549f, 2.815f /* 14 bits*/ -}; - const Word16 scales_BWE_3b_fx[] = {//Q13 7847, 14262, 28934, 7610, 12771, @@ -38648,11 +24805,6 @@ const Word8 no_lead_BWE_3b[] = { // Q0 8, 6, 5 /* 14 bits */ }; -const float LastCoefPred_0bit[18] = { - 0.00509f, -0.01367f, -0.00675f, -0.00555f, 0.00160f, 0.04158f, 0.12546f, 0.51500f, -0.00000f, - 0.00817f, -0.00645f, -0.00937f, -0.00726f, 0.00363f, 0.02148f, 0.08237f, 0.20400f, 0.00000f -}; - const Word32 LastCoefPred_0bit_fx[18] =//Q31 { 10930692, -29356102, -14495515, @@ -38661,12 +24813,6 @@ const Word32 LastCoefPred_0bit_fx[18] =//Q31 -20121922, -15590731, 7795365, 46127948, 176888224, 438086656, 0 }; -const float LastCoefPred_1bit[36] = { - 0.01760f, -0.02193f, 0.01160f, 0.00841f, 0.01782f, 0.04071f, 0.10121f, 0.37727f, 0.00451f, - 0.02473f, -0.01250f, 0.00545f, -0.00340f, 0.00952f, 0.01055f, 0.06447f, 0.14326f, 0.00430f, - -0.01490f, -0.01315f, -0.00990f, -0.00583f, -0.01288f, 0.05020f, 0.14868f, 0.68413f, -0.01206f, - -0.01554f, -0.02277f, -0.00474f, 0.00468f, 0.01070f, 0.04327f, 0.09857f, 0.26611f, -0.01164f -}; const Word32 LastCoefPred_1bit_fx[36] = {//Q31 37795712, -47094316, 24910810, @@ -40622,9 +26768,8 @@ const Word16 TecSC_Fx[] = 23999/*0.3662f*2.0f Q15*/, 7065/*0.1078f*2.0f Q15*/, 7825/*0.1194f*2.0f Q15*/, 8448/*0.1289f*2.0f Q15*/, 8946/*0.1365f*2.0f Q15*/, 9254/*0.1412f*2.0f Q15*/ }; -const float TecSC[] = { 0.3662f, 0.1078f, 0.1194f, 0.1289f, 0.1365f, 0.1412f }; -/* clang-format on */ +/* clang-format on */ const Word16 sqrt_table_pitch_search[256 + 1] = /* Q11 */ { 0, 2048, 2896, 3547, 4096, 4579, 5017, 5418, @@ -41810,7 +27955,6 @@ const Word16 band_len_idx[1 + ( MAX_SFM_LEN_FX / 8 )] = { const Word16 band_len_ener_shift[8] = { 1, 2, 2, 2, 3, 3, 4 /*sfm==80*/, 4 /*sfm==96*/ }; /* 96 requires 1 bit more than 48 */ // Q0 /*% sfms=[8,16,24,32,48,64,80,96], round(sqrt(sfms)*2^11) */ const Word16 fine_gain_pred_sqrt_bw[8] = { 5793, 8192, 10033, 11585, 14189, 16384, 18318, 20066 }; /* (Q11) */ -#ifdef IVAS_FLOAT_FIXED const Word16 ivas_band_len_idx[1 + ( MAX_SFM_LEN_FX / 8 )] = { /*sfm/8*/ /*1*/ /*2 */ /*3 */ /*4 */ /*6 */ /*8 */ /*10*/ /*12*/ -1, 0 /*8*/, 1 /*16*/, 2 /*24*/, 3 /*32*/, 4 /*40*/, 5 /*48 */, -1, 6 /*64 */, -1, 7 /*80*/, -1, 8 /*96*/ @@ -41818,7 +27962,6 @@ const Word16 ivas_band_len_idx[1 + ( MAX_SFM_LEN_FX / 8 )] = { const Word16 ivas_band_len_ener_shift[9] = { 1, 2, 2, 2, 3, 3, 3, 4 /*sfm==80*/, 4 /*sfm==96*/ }; // Q0 /* 96 requires 1 bit more than 48 */ const Word16 ivas_fine_gain_pred_sqrt_bw[9] = { 5793, 8192, 10033, 11585, 12953, 14189, 16384, 18318, 20066 }; /* (Q11) */ /*% sfms=[8,16,24,32,40,48,64,80,96], round(sqrt(sfms)*2^11) */ -#endif /*----------------------------------------------------------------------------------* * means of ISFs for WB active speech *----------------------------------------------------------------------------------*/ @@ -41841,7 +27984,6 @@ const Word16 lsp_shb_prev_tbl_fx[LPC_SHB_ORDER] = { 13107, 14746 }; -#ifdef IVAS_FLOAT_FIXED const Word16 ivas_lsp_shb_prev_tbl_fx[LPC_SHB_ORDER] = { /* Q15 */ 1489, @@ -41855,7 +27997,6 @@ const Word16 ivas_lsp_shb_prev_tbl_fx[LPC_SHB_ORDER] = { 13405, 14895 }; -#endif /* These words are subtracted from high/low/value with a shift left by 1. */ /* The value 0x0CCC should never be referenced, low is less/equal high */ @@ -42547,7 +28688,6 @@ const Word16 ivas_sin_az_fx[361] = { // Q15 }; -#ifdef IVAS_FLOAT_FIXED /* Tables required in edxt_fx() */ const Word16 sin_scale_tbl_960[960] = /* Q15 */ { @@ -43930,7 +30070,6 @@ const Word16 cos_scale_tbl_800[800] = { /* Q15 */ 32750, 32752, 32754, 32756, 32757, 32759, 32760, 32761, 32762, 32763, 32764, 32765, 32765, 32766, 32766, 32766 }; -#endif // IVAS_FLOAT_FIXED const Word16 scales_ivas_fx[][MAX_NO_SCALES * 2] = /* 2 subvectors Q11*/ { diff --git a/lib_com/rom_com.h b/lib_com/rom_com.h index 961425a99..822c996b8 100644 --- a/lib_com/rom_com.h +++ b/lib_com/rom_com.h @@ -61,7 +61,6 @@ typedef struct Word16 fac_den_fx; /* denominator of resampling factor Q0 */ Word16 lg_out; /* denominator of resampling factor Q15 */ - const float *filter; /* resampling filter coefficients */ const Word16 *filter_fx; /* resampling filter coefficients Q14 */ int16_t filt_len; /* number of filter coeff. */ @@ -90,20 +89,13 @@ typedef struct Word16 Ngq; // Q0 Word16 p2a_bands; // Q0 - float p2a_th_float; Word16 p2a_th; - float pd_thresh_float; Word16 pd_thresh; - float ld_slope_float; Word16 ld_slope; - float ni_coef_float; Word16 ni_coef; - - float ni_pd_th; - } Xcore_Config; @@ -164,7 +156,6 @@ extern const Word16 ACELP_CDK_BITS[]; * Pre-processing *----------------------------------------------------------------------------------*/ -extern const float inv_tbl[]; /* Table of 1/x values */ extern const Word16 inv_tbl_fx[]; // Q15 extern const Word16 hvq_bwe_fac_fx[16]; // Q15 @@ -182,27 +173,13 @@ extern const Word16 dicnlg2[40]; // Q0 extern const Resampling_cfg resampling_cfg_tbl[]; /* table of resampling configurations */ extern const FrameSizeParams FrameSizeConfig[FRAME_SIZE_NB]; -#ifndef IVAS_FLOAT_FIXED -extern const float h_high[]; /* HP filter for filtering random part of excitation in FEC */ -#endif extern const Word16 h_high_fx[5]; // Q15 extern const Word16 sincos_t_fx[161]; // Q15 extern const Word16 sincos_t_ext_fx[]; // Q15 -#ifdef IVAS_FLOAT_FIXED extern const Word32 crit_bands_fx[]; -#endif // IVAS_FLOAT_FIXED extern const float crit_bands[]; /* Table of critical bands */ -#ifndef IVAS_FLOAT_FIXED -extern const float sincos_t[]; /* FFT - sinus and cosinus tables */ -extern const float inter4_2[]; /* 1/4 resolution interpolation filter */ -#endif -extern const float LP_assym_window[]; /* Assymetric window for LP analysis @12.8kHz */ -extern const float LP_assym_window_16k[]; /* Assymetric window for LP analysis @16kHz */ -extern const float hamcos_window[]; /* Hamming-Cosinus window */ extern const float sincos_t_ext[]; extern const float sincos_t_rad3[]; -extern const float grid50[]; /* Table of grid points for evaluating Chebyshev polynomials */ -extern const float grid40[]; /* Table of grid points for evaluating Chebyshev polynomials */ extern const Word16 sincos_t_rad3_fx[]; // Q15 extern const Word16 fft256_read_indexes[]; /* FFT Q0*/ extern const Word16 inter4_2_fx_Q15[]; // Q15 /* 1/4 resolution interpolation filter */ @@ -211,19 +188,12 @@ extern const Word16 pitch_inter4_1[UP_SAMP * L_INTERPOL1 + 1]; /*1Q14*/ extern const Word16 pitch_inter4_2[PIT_FIR_SIZE2]; /*1Q14*/ extern const Word16 Assym_window_W16fx[]; // Q15 extern const Word16 assym_window_16k_fx[]; // Q15 -#ifdef IVAS_FLOAT_FIXED -extern const Word16 grid50_fx[( GRID50_POINTS - 1 ) / 2 - 1]; // Q15 -extern const Word16 grid40_fx[( GRID40_POINTS - 1 ) / 2 - 1]; // Q15 -extern const Word32 crit_bands_fx[]; /* Table of critical bands Q0*/ -#endif -extern const float grid100[]; /* Table of 100 grid points for evaluating Chebyshev polynomials */ +extern const Word16 grid50_fx[( GRID50_POINTS - 1 ) / 2 - 1]; // Q15 +extern const Word16 grid40_fx[( GRID40_POINTS - 1 ) / 2 - 1]; // Q15 +extern const Word32 crit_bands_fx[]; /* Table of critical bands Q0*/ -extern const float wind_sss[LEN_WIN_SSS]; /* window for modify_sf ana */ extern const Word16 wind_sss_fx[LEN_WIN_SSS]; // Q15 /*window for modify_sf ana*/ - -extern const float filter5_39s320_120[]; /* LP FIR filter for 8kHz signal resampling */ - -extern const Word16 filter5_39s320_120_fx[]; // Q15 +extern const Word16 filter5_39s320_120_fx[]; // Q15 extern const float lag_window_8k_flt[17]; extern const float lag_window_12k8_flt[][17]; @@ -248,24 +218,9 @@ extern const Word16 interpol_frac2_fx[]; // Q15 /* LPC extern const Word16 interpol_frac2_mid_fx[]; // Q15 /* LPC interpolation coefficients with mid-ISFs for two-subframe mode */ extern const Word16 interpol_frac_12k8_fx[]; // Q15 /* LPC interpolation coefficients */ extern const Word16 interpol_frac_fx[NB_SUBFR]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float interpol_frac2[]; /* LPC interpolation coefficients for two-subframe mode */ -extern const float interpol_frac_12k8[]; /* LPC interpolation coefficients */ -#endif -extern const float interpol_isp_amr_wb[]; /* LPC interpolation coefficients for AMR-WB interoperable mode */ -extern const float interpol_frac2_mid[]; /* LPC interpolation coefficients with mid-ISFs for two-subframe mode */ extern const Word16 interpol_isp_amr_wb_fx[]; // Q15 -extern const float interpol_frac_16k[]; /* LPC interpolation coefficients @ 16kHz */ -extern const float interpol_frac_mid[]; /* LPC interpolation coefficients with mid-ISFs */ -extern const float interpol_frac_mid_16k[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz */ -extern const float interpol_frac_mid_relaxprev_12k8[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - relaxed prev frame interp */ -extern const float interpol_frac_mid_FEC[]; /* LPC interpolation coefficients with mid-ISFs - FEC */ -extern const float interpol_frac_mid_relaxprev_16k[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - relaxed prev frame interp */ -extern const float interpol_frac_mid_16k_FEC[]; /* LPC interpolation coefficients with mid-ISFs @ 16kHz - FEC */ -extern const float interpol_frac_mid_relaxprev_pred_12k8[]; -extern const float interpol_frac_mid_relaxprev_pred_16k[]; extern const Word16 interpol_frac_16k_fx[NB_SUBFR16k]; // Q15 extern const Word16 interpol_frac_mid_fx[NB_SUBFR * 3]; // Q15 extern const Word16 interpol_frac_mid_16k_fx[NB_SUBFR16k * 3]; // Q15 @@ -276,23 +231,11 @@ extern const Word16 interpol_frac_mid_16k_FEC_fx[NB_SUBFR16k * 3]; // extern const Word16 interpol_frac_mid_relaxprev_pred_12k8_fx[NB_SUBFR * 3]; // Q15 extern const Word16 interpol_frac_mid_relaxprev_pred_16k_fx[NB_SUBFR16k * 3]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float inter6_2[PIT_FIR_SIZE6_2]; -#endif -#ifdef IVAS_FLOAT_FIXED extern const Word16 pitch_inter6_2[PIT_FIR_SIZE6_2]; /*1Q14*/ -#endif -extern const float inter4_2tcx2_flt[4][4]; -extern const float inter6_2tcx2_flt[6][4]; extern const Word16 inter4_2tcx2[4][4]; // Q15 extern const Word16 inter6_2tcx2[6][4]; // Q15 -typedef struct TCX_LTP_FILTER_FLT -{ - const float *filt; - int16_t length; -} TCX_LTP_FILTER_FLT; -extern const TCX_LTP_FILTER_FLT tcxLtpFilters_flt[12]; // Q15 + typedef struct TCX_LTP_FILTER { const Word16 *filt; @@ -300,54 +243,25 @@ typedef struct TCX_LTP_FILTER } TCX_LTP_FILTER; extern const TCX_LTP_FILTER tcxLtpFilters[12]; -extern const float gain_qua_mless_7b[]; /* Gain quantization - gain quantization table */ -extern const float gain_qua_mless_6b_stereo[]; /* Gain quantization - gain quantization table in IVAS */ -extern const float gain_qua_mless_6b[]; /* Gain quantization - gain quantization table */ -extern const float gain_qua_mless_5b[]; /* Gain quantization - gain quantization table */ extern const Word16 gain_qua_mless_6b_stereo_fx[]; // Q14 /* Gain quantization - gain quantization table in IVAS */ extern const Word16 gain_qua_mless_7b_fx[]; // Q14 extern const Word16 gain_qua_mless_6b_fx[]; // Q14 extern const Word16 gain_qua_mless_5b_fx[]; // Q14 -#ifndef IVAS_FLOAT_FIXED -extern const float pred_gain[]; /* Gain quantization - MA predicition coefficients for gain quantizer */ -extern const float t_qua_gain6b[]; /* Gain quantization - gain quantization table for AMR-WB interoperable mode */ -extern const float t_qua_gain7b[]; /* Gain quantization - gain quantization table for AMR-WB interoperable mode */ -#endif extern const Word16 pred_gain_fx[GAIN_PRED_ORDER]; // Q14 extern const Word16 t_qua_gain6b_fx[64 * 2]; // Q14 extern const Word16 t_qua_gain7b_fx[128 * 2]; // Q14 -extern const float Es_pred_qua_5b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ -extern const float Es_pred_qua_4b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ -extern const float Es_pred_qua_3b[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ -extern const float Es_pred_qua_4b_no_ltp[]; /* Gain quantization - quantization table for scaled innovation energy prediciton */ extern const Word16 Es_pred_qua_5b_fx[32]; // Q8 extern const Word16 Es_pred_qua_4b_fx[16]; // Q8 extern const Word16 Es_pred_qua_3b_fx[8]; // Q8 extern const Word16 Es_pred_qua_4b_no_ltp_fx[16]; // Q8 -extern const float b_1sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ -extern const float b_2sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ -extern const float b_3sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ -extern const float b_4sfr[]; /* Gain quantization - gain estimation constants for gain quantizer at 7.2 and 8.0 kbps */ extern const Word16 b_1sfr_fx[]; // Q12 extern const Word16 b_2sfr_fx[]; // Q12 extern const Word16 b_3sfr_fx[]; // Q12 extern const Word16 b_4sfr_fx[]; // Q12 -extern const float gp_gamma_1sfr_8b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ - -extern const float gp_gamma_1sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_2sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_3sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_4sfr_7b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ - -extern const float gp_gamma_1sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_2sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_3sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ -extern const float gp_gamma_4sfr_6b[]; /* Gain quantization - gain quantization table for gain quantizer at 7.2 and 8.0 kbps */ - extern const Word16 gp_gamma_1sfr_8b_fx[]; // Q14/Q9 extern const Word16 gp_gamma_1sfr_7b_fx[]; // Q14/Q9 extern const Word16 gp_gamma_1sfr_6b_fx[]; // Q14/Q9 @@ -363,13 +277,6 @@ extern const int16_t E_ROM_qua_gain5b_const[]; extern const int16_t E_ROM_qua_gain6b_const[]; extern const int16_t E_ROM_qua_gain7b_const[]; -extern const float gain_qua_mless[]; - -#ifndef IVAS_FLOAT_FIXED -extern const float tbl_gain_trans_tc[]; /* TC - gain quantization table for g_trans */ -#endif -extern const float tbl_gain_code_tc[]; /* TC - code gain quantization table */ -extern const float glottal_cdbk[]; /* TC - table of prototype glottal impulses */ extern const Word16 tbl_gain_code_tc_fx[N_GAIN_CODE_TC]; // Q13 extern const Word16 tbl_gain_code_tc_quant_mean[N_GAIN_CODE_TC - 1]; // Q13 @@ -388,91 +295,42 @@ extern const UWord16 indx_fact[10]; // Q0 extern const Word16 index_len[3]; // Q0 extern const Word16 index_mask_ACELP[3]; // Q0 -#ifndef IVAS_FLOAT_FIXED -extern const float deem_tab[]; /* HF BWE - de-emphasis coefficients */ -extern const float filt_hp[]; -extern const float exp_tab_p[]; /* HF BWE - Table of values exp(-j*w*i) */ -extern const float exp_tab_q[]; /* HF BWE - Table of values exp(-j*w*i) */ -#endif -extern const float fir_6k_8k[]; /* HF BWE - band-pass filter coefficients */ -extern const float HP_gain[]; /* HF BWE - quantization table for 23.85 */ extern const Word16 deem_tab_fx[]; // Q15 extern const Word16 filt_hp_fx[]; // Q15 extern const Word16 exp_tab_p_fx[]; // Q14 extern const Word16 exp_tab_q_fx[]; // Q14 extern const Word16 HP_gain_fx[]; // Q15 -extern const float b_hp400[]; /* HF (6-7kHz) BWE - 400Hz HP filter coefficients */ -extern const float a_hp400[]; /* HF (6-7kHz) BWE - 400Hz HP filter coefficients */ -extern const float fir_6k_7k[]; /* HF (6-7kHz) BWE - 6.0 - 7.0 kHz BP filter coefficients */ extern const Word16 fir_6k_7k_fx[]; // Q15 extern const Word16 no_lead_fx[][MAX_NO_SCALES * 2]; // Q0 extern const Word16 no_lead_p_fx[][MAX_NO_SCALES * 2]; // Q0 -extern const float low_H_flt[]; /* Enhacer - 2.0 - 6.4 kHz impulse response with phase dispersion */ -extern const float mid_H_flt[]; /* Enhancer - 3.2 - 6.4 kHz impulse response with phase dispersion */ -extern const Word16 low_H[64]; // Q14 -extern const Word16 low_H16k[80]; // Q14 -extern const Word16 mid_H[64]; // Q14 -extern const Word16 mid_H16k[80]; // Q14 -extern const float filt_lp[1 + L_FILT]; - -extern const float filt_lp_16kHz[1 + L_FILT16k]; -extern const Word16 filt_lp_fx[1 + L_FILT]; // Q15 -extern const Word16 filt_lp_16kHz_fx[1 + L_FILT16k]; // Q15 - -#ifndef IVAS_FLOAT_FIXED -extern const float tab_hup_l[SIZ_TAB_HUP_L]; /* NB post-filter */ -extern const float tab_hup_s[SIZ_TAB_HUP_S]; /* NB post-filter */ -#endif - -extern const float edct_table_80[]; /* EDCT */ -extern const float edct_table_120[]; /* EDCT */ -extern const float edct_table_320[]; /* EDCT */ -extern const float edct_table_480[]; /* EDCT */ -extern const float edct_table_128[]; /* EDCT */ -extern const float edct_table_160[]; /* EDCT */ -extern const float edct_table_40[]; /* EDCT */ -extern const float edct_table_20[]; /* EDCT */ -extern const float edct_table_64[]; -extern const float edct_table_100[]; /* EDCT */ -extern const float edct_table_200[]; -extern const float edct_table_240[]; -extern const float edct_table_256[]; -extern const float edct_table_400[]; -extern const float edct_table_600[]; /* EDCT */ -extern const Word16 edct_table_80_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_120_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_100_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_320_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_480_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_600_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_128_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_160_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_40_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_20_fx[]; // Q16 /* EDCT */ -extern const Word16 edct_table_64_fx[]; // Q16 -extern const Word16 edct_table_200_fx[]; // Q16 -extern const Word16 edct_table_240_fx[]; // Q16 -extern const Word16 edct_table_256_fx[]; // Q16 -extern const Word16 edct_table_400_fx[]; // Q16 -extern const Word16 edct_table_160_16fx[160]; // Q15 -extern const Word16 edct_table_128_16fx[128]; // Q15 -extern const Word16 edct_table_320_16fx[320]; // Q16 - -#ifndef IVAS_FLOAT_FIXED -extern const float crit_bins_corr[CRIT_NOIS_BAND]; -extern const float crit_bands_loc[]; /* (used only in AMR-WB IO mode) */ -extern const float MAX_SNR_SNR1_tab[]; -extern const float INV_MAX_SNR_tab[]; -extern const float sc_qnoise[]; -extern const float ENR_ATT[5]; -extern const float W_DTX_HO[HO_HIST_SIZE]; -#endif -extern const float mfreq_loc_LD[]; /* LD music post-filter */ -extern const float post_dct_wind[OFFSET2]; -extern const int16_t crit_bins[]; /* (used only in AMR-WB IO mode) */ +extern const Word16 low_H[64]; // Q14 +extern const Word16 low_H16k[80]; // Q14 +extern const Word16 mid_H[64]; // Q14 +extern const Word16 mid_H16k[80]; // Q14 +extern const Word16 filt_lp_fx[1 + L_FILT]; // Q15 +extern const Word16 filt_lp_16kHz_fx[1 + L_FILT16k]; // Q15 +extern const Word16 edct_table_80_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_120_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_100_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_320_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_480_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_600_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_128_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_160_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_40_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_20_fx[]; // Q16 /* EDCT */ +extern const Word16 edct_table_64_fx[]; // Q16 +extern const Word16 edct_table_200_fx[]; // Q16 +extern const Word16 edct_table_240_fx[]; // Q16 +extern const Word16 edct_table_256_fx[]; // Q16 +extern const Word16 edct_table_400_fx[]; // Q16 +extern const Word16 edct_table_160_16fx[160]; // Q15 +extern const Word16 edct_table_128_16fx[128]; // Q15 +extern const Word16 edct_table_320_16fx[320]; // Q16 +extern const Word16 crit_bins[]; /* (used only in AMR-WB IO mode) */ extern const Word16 crit_bins_corr_fx[]; // Q15 extern const Word16 crit_bands_loc_fx[]; // Q0 extern const Word16 mfreq_loc_LD_fx[]; // Q0 @@ -486,9 +344,6 @@ extern const Word16 inv_mfreq_bindiv_LD_M1_fx[]; // Q15 extern const Word16 W_DTX_HO_FX[HO_HIST_SIZE]; // Q15 extern const Word16 ENR_ATT_fx[5]; // Q8 -#ifndef IVAS_FLOAT_FIXED -extern const float HO_ATT[5]; -#endif extern const Word16 HO_ATT_FX[5]; // Q15 extern const Word16 hq_swb_bwe_nb_bits[]; // Q0 @@ -496,13 +351,6 @@ extern const Word16 hq_swb_bwe_nb_bits[]; // Q0 /*----------------------------------------------------------------------------------* * ISF quantization (AMR-WB IO mode) *----------------------------------------------------------------------------------*/ -extern const float mean_isf_amr_wb[M]; /* Mean ISF vector (only in AMR-WB IO mode) */ -extern const float mean_isf_noise_amr_wb[]; /* Mean ISF vector for SID frame (only in AMR-WB IO mode) */ -extern const float gaus_dico[]; /* Gaussian codebook */ -extern const float gaus_dico_swb[]; /* Gaussian codebook for SWB TBE */ -extern const float dico1_isf[]; /* ISF codebook - common 1st stage, 1st split (only in AMR-WB IO mode) */ -extern const float dico2_isf[]; /* ISF codebook - common 1st stage, 2nd split (only in AMR-WB IO mode) */ - extern const Word16 Indirect_dico1[SIZE_BK1]; // Q0 extern const Word16 mean_isf_amr_wb_fx[M]; /*Qlog2(2.56)*/ /* Mean ISF vector (only in AMR-WB IO mode) */ @@ -516,104 +364,48 @@ extern const Word16 dico1_isf_fx[]; /* ISF codebook - common 1st stage, 1st spli extern const Word16 dico2_isf_fx[]; /* ISF codebook - common 1st stage, 2nd split (only in AMR-WB IO mode) Qlog2(2.56)*/ -extern const float dico21_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 1st split (only in AMR-WB IO mode) */ -extern const float dico22_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 2st split (only in AMR-WB IO mode) */ -extern const float dico23_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ -extern const float dico24_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 4th split (only in AMR-WB IO mode) */ -extern const float dico25_isf_46b[]; /* ISF codebook - 46b, 2nd stage, 5th split (only in AMR-WB IO mode) */ - extern const Word16 dico21_isf_46b_fx[]; /* ISF codebook - 46b, 2nd stage, 1st split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico22_isf_46b_fx[]; /* ISF codebook - 46b, 2nd stage, 2st split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico23_isf_46b_fx[]; /* ISF codebook - 46b, 2nd stage, 3rd split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico24_isf_46b_fx[]; /* ISF codebook - 46b, 2nd stage, 4th split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico25_isf_46b_fx[]; /* ISF codebook - 46b, 2nd stage, 5th split (only in AMR-WB IO mode) Qlog2(2.56)*/ -extern const float dico21_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 1st split (only in AMR-WB IO mode) */ -extern const float dico22_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 2nd split (only in AMR-WB IO mode) */ -extern const float dico23_isf_36b[]; /* ISF codebook - 36b, 2nd stage, 3rd split (only in AMR-WB IO mode) */ - extern const Word16 dico21_isf_36b_fx[]; /* ISF codebook - 36b, 2nd stage, 1st split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico22_isf_36b_fx[]; /* ISF codebook - 36b, 2nd stage, 2nd split (only in AMR-WB IO mode) Qlog2(2.56)*/ extern const Word16 dico23_isf_36b_fx[]; /* ISF codebook - 36b, 2nd stage, 3rd split (only in AMR-WB IO mode) Qlog2(2.56)*/ -extern const float dico1_ns_28b[]; /* ISF codebook for SID frames - 28b, 1st split */ -extern const float dico2_ns_28b[]; /* ISF codebook for SID frames - 28b, 2nd spilt */ -extern const float dico3_ns_28b[]; /* ISF codebook for SID frames - 28b, 3rd spilt */ -extern const float dico4_ns_28b[]; /* ISF codebook for SID frames - 28b, 4th spilt */ -extern const float dico5_ns_28b[]; /* ISF codebook for SID frames - 28b, 5th spilt */ - extern const Word16 dico1_ns_28b_fx[]; /*Qlog2(2.56)*/ /* ISF codebook for SID frames - 28b, 1st split Qlog2(2.56)*/ extern const Word16 dico2_ns_28b_fx[]; /*Qlog2(2.56)*/ /* ISF codebook for SID frames - 28b, 2nd spilt Qlog2(2.56)*/ extern const Word16 dico3_ns_28b_fx[]; /*Qlog2(2.56)*/ /* ISF codebook for SID frames - 28b, 3rd spilt Qlog2(2.56)*/ extern const Word16 dico4_ns_28b_fx[]; /*Qlog2(2.56)*/ /* ISF codebook for SID frames - 28b, 4th spilt Qlog2(2.56)*/ extern const Word16 dico5_ns_28b_fx[]; /*Qlog2(2.56)*/ /* ISF codebook for SID frames - 28b, 5th spilt Qlog2(2.56)*/ -extern const float dico1_cng_ev[]; -extern const float dico2_cng_ev[]; -extern const float dico3_cng_ev[]; -extern const float dico4_cng_ev[]; -extern const float dico5_cng_ev[]; - /*----------------------------------------------------------------------------------* * LSF quantization - MSVQ tables *----------------------------------------------------------------------------------*/ -extern const float stable_ISF[]; -extern const float stable_LSP[]; -#ifndef IVAS_FLOAT_FIXED -extern const float stable_ISP[]; -#endif extern const Word16 stable_ISP_fx[]; /*Q15*/ extern const Word16 stable_ISF_fx[]; /*15Q16*/ extern const Word16 stable_LSP_fx[]; /*Q15*/ +extern const Word16 UVWB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 UVNB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 SVWB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 SVNB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 IANB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 IAWB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 IAWB2_Ave_fx[]; // Qlog2(2.56) +extern const Word16 GENB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 GEWB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 GEWB2_Ave_fx[]; // Qlog2(2.56) +extern const Word16 TRWB_Ave_fx[]; // Qlog2(2.56) +extern const Word16 TRWB2_Ave_fx[]; // Qlog2(2.56) -#ifndef IVAS_FLOAT_FIXED -extern const float UVWB_Ave[]; -extern const float UVNB_Ave[]; -extern const float SVWB_Ave[]; -extern const float SVNB_Ave[]; -extern const float IAWB_Ave[]; -extern const float IANB_Ave[]; -extern const float TRWB_Ave[]; -extern const float TRWB2_Ave[]; -#endif -extern const float GENB_Ave[]; -extern const float GEWB_Ave[]; -extern const float GEWB2_Ave[]; -extern const Word16 UVWB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 UVNB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 SVWB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 SVNB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 IANB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 IAWB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 IAWB2_Ave_fx[]; // Qlog2(2.56) -extern const Word16 GENB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 GEWB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 GEWB2_Ave_fx[]; // Qlog2(2.56) -extern const Word16 TRWB_Ave_fx[]; // Qlog2(2.56) -extern const Word16 TRWB2_Ave_fx[]; // Qlog2(2.56) - -extern const float means_wb_cleanspeech_lsf16k0_flt[]; -extern const float means_swb_cleanspeech_lsf25k6_flt[]; -extern const float means_swb_cleanspeech_lsf32k0_flt[]; extern const Word16 means_wb_cleanspeech_lsf16k0[]; // Qlog2(2.56) extern const Word16 means_swb_cleanspeech_lsf25k6[]; // Qlog2(2.56) extern const Word16 means_swb_cleanspeech_lsf32k0[]; // Qlog2(2.56) -extern const float ModeMean12[]; - -#ifndef IVAS_FLOAT_FIXED -extern const float Predictor0[]; -extern const float Predictor1[]; -extern const float Predictor2[]; -extern const float Predictor3[]; -extern const float Predictor4[]; -extern const float Predictor5[]; -extern const float Predictor6[]; -extern const float Predictor7[]; -extern const float Predictor8[]; -#endif + extern const Word16 Predictor0_fx[]; // Q15 extern const Word16 Predictor1_fx[]; // Q15 extern const Word16 Predictor2_fx[]; // Q15 @@ -624,14 +416,10 @@ extern const Word16 Predictor6_fx[]; // Q15 extern const Word16 Predictor7_fx[]; // Q15 extern const Word16 Predictor8_fx[]; // Q15 -extern const float CNG_SN1[]; extern const Word16 CNG_SN1_fx[]; // Qlog2(2.56) extern const Word16 CB_lsf[]; // Q0 extern const Word16 CB_p_lsf[]; // Q0 -#ifndef IVAS_FLOAT_FIXED -extern const float *const ModeMeans[]; -extern const float *const Predictors[]; -#endif + extern const Word16 *const ModeMeans_fx[]; // Qlog2(2.56) extern const Word16 *const Predictors_fx[]; // Q15 extern const Word16 CBsizes[]; // Q0 @@ -652,11 +440,8 @@ extern const Word16 C_VQ[LATTICE_DIM + 1][LATTICE_DIM + 1]; // Q0 extern const float sigma_MSLVQ[][16]; extern const float sigma_p[][16]; -extern const float inv_sigma_MSLVQ[][16]; -extern const float inv_sigma_p[][16]; extern const float scales[][MAX_NO_SCALES * 2]; extern const float scales_p[][MAX_NO_SCALES * 2]; -extern const float pl_HQ[]; extern const Word16 BitsVQ[]; // Q0 extern const Word16 BitsVQ_p[]; // Q0 extern const UWord8 no_lead_idx[][2]; // Q0 @@ -684,9 +469,6 @@ extern const Word32 table_no_cv_fx[]; // Q0 extern const Word16 pl_par[]; // Q0 // extern const Word16 pl_par_fx[]; /* 1 if even number of signs */ - -extern const float *const Quantizers[]; -extern const float *const Quantizers_p[]; extern const Word16 *const Quantizers_p_fx[]; // Qlog2(2.56) extern const Word16 *const Quantizers_fx[]; // Qlog2(2.56) @@ -725,44 +507,22 @@ extern const Word16 BC_TCVQ_BIT_ALLOC_40B[]; // Q0 extern const Word16 NTRANS[4][16]; // Q0 extern const Word16 NTRANS2[4][16]; // Q0 -#ifndef IVAS_FLOAT_FIXED -extern const float AR_IntraCoeff[N_STAGE_VQ - 1][2][2]; -extern const float SN_IntraCoeff[N_STAGE_VQ - 1][2][2]; -#endif extern const Word16 AR_IntraCoeff_fx[N_STAGE_VQ - 1][2][2]; /* Q15 */ extern const Word16 SN_IntraCoeff_fx[N_STAGE_VQ - 1][2][2]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float scale_ARSN[]; -extern const float scale_inv_ARSN[]; -#endif extern const Word16 scale_ARSN_fx[]; /* Q14 */ extern const Word16 scale_inv_ARSN_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float AR_TCVQ_CB_SUB1[2][128][2]; -extern const float AR_TCVQ_CB_SUB2[2][64][2]; -extern const float AR_TCVQ_CB_SUB3[4][32][2]; -#endif extern const Word16 AR_TCVQ_CB_SUB1_fx[2][128][2]; // Qlog2(2.56) extern const Word16 AR_TCVQ_CB_SUB2_fx[2][64][2]; // Qlog2(2.56) extern const Word16 AR_TCVQ_CB_SUB3_fx[4][32][2]; // Qlog2(2.56) -#ifndef IVAS_FLOAT_FIXED -extern const float SN_TCVQ_CB_SUB1[2][128][2]; -extern const float SN_TCVQ_CB_SUB2[2][64][2]; -extern const float SN_TCVQ_CB_SUB3[4][32][2]; -#endif extern const Word16 SN_TCVQ_CB_SUB1_fx[2][128][2]; // Qlog2(2.56) extern const Word16 SN_TCVQ_CB_SUB2_fx[2][64][2]; // Qlog2(2.56) extern const Word16 SN_TCVQ_CB_SUB3_fx[4][32][2]; // Qlog2(2.56) -#ifndef IVAS_FLOAT_FIXED -extern const float AR_SVQ_CB1[32][8]; -extern const float AR_SVQ_CB2[16][8]; -#endif extern const Word16 AR_SVQ_CB1_fx[32][8]; // Qlog2(2.56) extern const Word16 AR_SVQ_CB2_fx[16][8]; // Qlog2(2.56) @@ -773,21 +533,13 @@ extern const Word16 uniform_model[]; * LSF quantization - mid-frame quantization tables *-----------------------------------------------------------------*/ -extern const float tbl_mid_gen_wb_2b[]; -extern const float tbl_mid_gen_wb_4b[]; -extern const float tbl_mid_gen_wb_5b[]; extern const Word16 tbl_mid_gen_wb_2b_fx[]; // Q13 extern const Word16 tbl_mid_gen_wb_4b_fx[]; // Q13 extern const Word16 tbl_mid_gen_wb_5b_fx[]; // Q13 -extern const float tbl_mid_unv_wb_4b[]; -extern const float tbl_mid_unv_wb_5b[]; extern const Word16 tbl_mid_unv_wb_4b_fx[]; // Q13 extern const Word16 tbl_mid_unv_wb_5b_fx[]; // Q13 -extern const float tbl_mid_voi_wb_1b[]; -extern const float tbl_mid_voi_wb_4b[]; -extern const float tbl_mid_voi_wb_5b[]; extern const Word16 tbl_mid_voi_wb_1b_fx[]; // Q13 extern const Word16 tbl_mid_voi_wb_4b_fx[]; // Q13 extern const Word16 tbl_mid_voi_wb_5b_fx[]; // Q13 @@ -795,16 +547,11 @@ extern const Word16 tbl_mid_voi_wb_5b_fx[]; // Q13 * LSF quantization - Mode 2 quantization tables *-----------------------------------------------------------------*/ -extern const float lsf_init[16]; -extern const Word16 lsf_init_fx[16]; /*14Q1*1.28*/ -extern const float means_wb_31bits_ma_lsf_float[16]; -extern const float means_nb_31bits_ma_lsf_float[16]; -extern const float *const lsf_means_float[2]; +extern const Word16 lsf_init_fx[16]; /*14Q1*1.28*/ extern const Word16 means_nb_31bits_ma_lsf[16]; // Q1 extern const Word16 means_wb_31bits_ma_lsf[16]; // Q1 extern const Word16 *lsf_means[2]; // Q1 -extern const float *const lsf_codebook_flt[2][2][TCXLPC_NUMSTAGES]; extern const Word16 *const lsf_codebook[2][2][TCXLPC_NUMSTAGES]; /* 14Q1*1.28 */ extern const Word16 lsf_numbits[TCXLPC_NUMSTAGES]; // Q0 extern const Word16 lsf_dims_ivas[TCXLPC_NUMSTAGES]; // Q0 @@ -812,29 +559,10 @@ extern const Word16 lsf_offs_ivas[TCXLPC_NUMSTAGES]; // Q0 extern const Word16 lsf_dims[TCXLPC_NUMSTAGES]; // Q0 extern const Word16 lsf_offs[TCXLPC_NUMSTAGES]; // Q0 -extern const float dico_lsf_abs_8b_flt[]; extern const Word16 dico_lsf_abs_8b[]; /* 14Q1*1.28 */ -extern const float lsf_q_diff_cb_8b_rf_flt[]; extern const Word16 lsf_q_diff_cb_8b_rf[]; // Q6 -extern const float lsf_cdk_nb_gc_stg1_flt[]; -extern const float lsf_cdk_nb_gc_stg2_flt[]; -extern const float lsf_cdk_nb_gc_stg3_flt[]; -extern const float lsf_ind_cdk_nb_gc_stg4_flt[]; -extern const float lsf_cdk_nb_vc_stg1_flt[]; -extern const float lsf_cdk_nb_vc_stg2_flt[]; -extern const float lsf_cdk_nb_vc_stg3_flt[]; -extern const float lsf_ind_cdk_nb_vc_stg4_flt[]; -extern const float lsf_cdk_wb_gc_stg1_flt[]; -extern const float lsf_cdk_wb_gc_stg2_flt[]; -extern const float lsf_cdk_wb_gc_stg3_flt[]; -extern const float lsf_ind_cdk_wb_gc_stg4_flt[]; -extern const float lsf_cdk_wb_vc_stg1_flt[]; -extern const float lsf_cdk_wb_vc_stg2_flt[]; -extern const float lsf_cdk_wb_vc_stg3_flt[]; -extern const float lsf_ind_cdk_wb_vc_stg4_flt[]; - extern const Word16 lsf_cdk_nb_gc_stg1[]; /* 14Q1*1.28 */ extern const Word16 lsf_cdk_nb_gc_stg2[]; /* 14Q1*1.28 */ extern const Word16 lsf_cdk_nb_gc_stg3[]; /* 14Q1*1.28 */ @@ -853,7 +581,6 @@ extern const Word16 lsf_cdk_wb_vc_stg3[]; /* 14Q1*1.28 */ extern const Word16 lsf_ind_cdk_wb_vc_stg4[]; /* 14Q1*1.28 */ -extern const float *const lsf_ind_codebook_flt[2][2][TCXLPC_IND_NUMSTAGES]; extern const Word16 *const lsf_ind_codebook[2][2][TCXLPC_IND_NUMSTAGES]; /* 14Q1*1.28 */ extern const Word16 lsf_ind_numbits[TCXLPC_IND_NUMSTAGES]; // Q0 extern const Word16 lsf_ind_dims_ivas[TCXLPC_IND_NUMSTAGES]; // Q0 @@ -861,10 +588,6 @@ extern const Word16 lsf_ind_dims[TCXLPC_IND_NUMSTAGES]; // Q0 extern const Word16 lsf_ind_offs[TCXLPC_IND_NUMSTAGES]; // Q0 extern const Word16 min_distance_thr[2][2]; /* 14Q1*1.28 */ -typedef float lsp_unw_triplet_flt[3]; -extern const lsp_unw_triplet_flt p16_gamma0_92to1_float[16]; -extern const lsp_unw_triplet_flt p16_gamma0_94to1_float[16]; - typedef Word16 lsp_unw_triplet[3]; // Q14 extern const lsp_unw_triplet p16_gamma0_92to1[16]; extern const lsp_unw_triplet p16_gamma0_94to1[16]; @@ -892,68 +615,29 @@ extern const Word16 Da_nq[]; /* Codebook number for each absolute leader */ extern const Word16 skip_bands_SWB_TBE[]; /* bands for SWB TBE quantisation Q0*/ extern const Word16 skip_bands_WB_TBE[]; /* bands for WB TBE quantisation Q0*/ -#ifndef IVAS_FLOAT_FIXED -extern const float interpol_frac_shb_flt[]; -#endif +extern const Word16 interpol_frac_shb[NB_SUBFR * 2]; // Q15 extern const Word16 interpol_frac_shb[NB_SUBFR * 2]; // Q15 -extern const float AP1_STEEP[]; /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ -extern const float AP2_STEEP[]; /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ -extern const Word16 AP1_STEEP_FX[]; // Q15 /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ -extern const Word16 AP2_STEEP_FX[]; // Q15 /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ - -extern const float STEPS[]; /* Granuality in conversion from lpc to lsp */ - -#ifndef IVAS_FLOAT_FIXED -extern const float cos_fb_exc[]; -#endif -extern const float recip_order[]; +extern const Word16 AP1_STEEP_FX[]; // Q15 /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ +extern const Word16 AP2_STEEP_FX[]; // Q15 /* All pass filter coeffs for interpolation and decimation by a factor of 2 */ extern const Word16 cos_fb_exc_fx[32]; // Q15 -extern const Word16 win_lpc_shb_fx[]; // Q15 /* Window for calculating SHB LPC coeffs */ -extern const Word16 win_lpc_hb_wb_fx[]; // Q15 -extern const Word16 ola_win_shb_switch_fold_fx[]; // Q15 -extern const Word16 win_flatten_fx[]; // Q15 -extern const Word16 win_flatten_4k_fx[]; // Q15 -extern const float win_flatten_4k[]; /* Window for calculating whitening filter for WB excitation */ -#ifndef IVAS_FLOAT_FIXED -extern const float win_lpc_shb[]; /* Window for calculating SHB LPC coeffs */ -extern const float win_lpc_hb_wb[]; -extern const float ola_win_shb_switch_fold[]; -extern const float win_flatten[]; /* Window for calculating whitening filter for SHB excitation */ -extern const float window_shb[]; /* Overlap add window for SHB excitation used in anal and synth */ -extern const float window_shb_32k[]; /* Upsampled overlap add window for SHB excitation used transition generation */ -extern const float subwin_shb[]; /* Short overlap add window for SHB excitation used in anal and synth */ -extern const float window_wb[]; -extern const float subwin_wb[]; /* Short overlap add window for SHB excitation used in anal and synth */ -#endif -extern const Word16 window_shb_fx[]; // Q15 -extern const Word16 window_shb_32k_fx[]; // Q15 -extern const Word16 subwin_shb_fx[]; // Q15 /* Short overlap add window for SHB excitation used in anal and synth */ -extern const Word16 window_wb_fx[]; // Q15 -extern const Word16 subwin_wb_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float Hilbert_coeffs[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1]; -#endif -extern const Word16 Hilbert_coeffs_fx[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1]; // Q14 +extern const Word16 win_lpc_shb_fx[]; // Q15 /* Window for calculating SHB LPC coeffs */ +extern const Word16 win_lpc_hb_wb_fx[]; // Q15 +extern const Word16 ola_win_shb_switch_fold_fx[]; // Q15 +extern const Word16 win_flatten_fx[]; // Q15 +extern const Word16 win_flatten_4k_fx[]; // Q15 +extern const Word16 window_shb_fx[]; // Q15 +extern const Word16 window_shb_32k_fx[]; // Q15 +extern const Word16 subwin_shb_fx[]; // Q15 /* Short overlap add window for SHB excitation used in anal and synth */ +extern const Word16 window_wb_fx[]; // Q15 +extern const Word16 subwin_wb_fx[]; // Q15 +extern const Word16 Hilbert_coeffs_fx[4 * NUM_HILBERTS][HILBERT_ORDER1 + 1]; // Q14 -extern const float wac[]; -#ifndef IVAS_FLOAT_FIXED -extern const float wac_swb[]; -#endif extern const Word16 wac_swb_h[]; // Q15 extern const Word16 wac_swb_l[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float wb_bwe_lsfvq_cbook_8bit[]; -extern const float lbr_wb_bwe_lsfvq_cbook_2bit[]; -extern const float swb_tbe_lsfvq_cbook_8b_flt[]; -extern const float SHBCB_SubGain5bit[]; /* 5 bit Quantizer table for SHB gain shapes */ -extern const float HBCB_SubGain5bit[]; /* 5-bit TD WB BWE temporal shaping codebook */ -extern const float SHBCB_FrameGain64[]; /* 6 bit Quantizer table for SHB overall gain */ -extern const float SHBCB_FrameGain16[]; -#endif extern const Word16 wb_bwe_lsfvq_cbook_8bit_fx[]; // Q15 extern const Word16 lbr_wb_bwe_lsfvq_cbook_2bit_fx[]; // Q15 extern const Word16 swb_tbe_lsfvq_cbook_8b[]; // Q15 @@ -961,50 +645,23 @@ extern const Word16 SHBCB_SubGain5bit_fx[]; // Q14 extern const Word16 HBCB_SubGain5bit_fx[]; // Q8 extern const Word32 SHBCB_FrameGain64_fx[]; // Q18 extern const Word32 SHBCB_FrameGain16_fx[]; /*Q18*/ -#ifndef IVAS_FLOAT_FIXED -extern const float full_band_bpf_1[][5]; -extern const float full_band_bpf_2[][5]; -extern const float full_band_bpf_3[][5]; -#endif -extern const Word16 full_band_bpf_1_fx[][5]; /*Q13*/ -extern const Word16 full_band_bpf_2_fx[][5]; /*Q13*/ -extern const Word16 full_band_bpf_3_fx[][5]; /*Q13*/ -#ifndef IVAS_FLOAT_FIXED -extern const float lsf_q_cb_4b[]; /* 4 bit differential scalar quantizer table for TD SWB BWE LSFs 1 and 2*/ -extern const float lsf_q_cb_3b[]; /* 3 bit differential scalar quantizer table for TD SWB BWE LSFs 3, 4 and 5*/ -extern const float *const lsf_q_cb[]; /* Codebook array for each LSF */ -#endif -extern const Word16 *const lsf_q_cb_fx[]; // Q15 -extern const Word16 lsf_q_cb_size[]; /* Size of each element of the above Q0*/ -extern const Word16 lsf_q_num_bits[]; /* Size of each element of the above, in bits Q0*/ -extern const Word16 mirror_point_q_cb_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float mirror_point_q_cb[]; /* LSF mirroring point codebook */ -extern const float lsf_grid[4][5]; /* LSF mirroring adjustment grid */ -extern const float grid_smoothing[]; /* LSF mirroring smoothing table */ -#endif -extern const Word16 lsf_grid_fx[4][5]; // Q15 -extern const Word16 grid_smoothing_fx[]; /* LSF mirroring smoothing table Q15*/ +extern const Word16 full_band_bpf_1_fx[][5]; /*Q13*/ +extern const Word16 full_band_bpf_2_fx[][5]; /*Q13*/ +extern const Word16 full_band_bpf_3_fx[][5]; /*Q13*/ +extern const Word16 *const lsf_q_cb_fx[]; // Q15 +extern const Word16 lsf_q_cb_size[]; /* Size of each element of the above Q0*/ +extern const Word16 lsf_q_num_bits[]; /* Size of each element of the above, in bits Q0*/ +extern const Word16 mirror_point_q_cb_fx[]; // Q15 +extern const Word16 lsf_grid_fx[4][5]; // Q15 +extern const Word16 grid_smoothing_fx[]; /* LSF mirroring smoothing table Q15*/ -#ifndef IVAS_FLOAT_FIXED -extern const float overlap_coefs[]; /* HR SWB BWE - overlap coefficients */ -extern const float overlap_coefs_48kHz[]; /* HR SWB BWE - overlap coefficients @48kHz */ -#endif extern const Word16 overlap_coefs_fx[NSV_OVERLAP * WIDTH_BAND]; /* in Q15 */ extern const Word16 overlap_coefs_48kHz_fx[NSV_OVERLAP * WIDTH_BAND]; /* in Q15 */ -#ifndef IVAS_FLOAT_FIXED -extern const float swb_hr_env_code1[]; /* HR SWB BWE - envelope Q table - first two subabnds in non-transient frames */ -extern const float swb_hr_env_code2[]; /* HR SWB BWE - envelope Q table - second two subabnds in non-transient frames*/ -extern const float swb_hr_env_code3[]; /* HR SWB BWE - envelope Q table - two subabnds in transient frames */ -#endif extern const Word16 swb_hr_env_code1_fx[]; /* HR SWB BWE - envelope Q table - first two subabnds in non-transient frames Q9*/ extern const Word16 swb_hr_env_code2_fx[]; /* HR SWB BWE - envelope Q table - second two subabnds in non-transient frames Q9*/ extern const Word16 swb_hr_env_code3_fx[]; /* HR SWB BWE - envelope Q table - two subands in transient frames Q9*/ -extern const float allpass_poles_3_ov_2_flt[]; -extern const float decimate_3_ov_2_lowpass_num[]; -extern const float decimate_3_ov_2_lowpass_den[]; extern const Word16 allpass_poles_3_ov_2[]; /*Q15*/ extern const Word16 decimate_3_ov_2_lowpass_num_fx[]; /*Q15*/ extern const Word16 decimate_3_ov_2_lowpass_den_fx[]; /*Q15*/ @@ -1013,9 +670,6 @@ extern const Word16 decimate_3_ov_2_lowpass_den_fx[]; /*Q15*/ /*------------------------------------------------------------------------------* * WB BWE tables *------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float F_2_5[64]; -#endif extern const Word16 F_2_5_fx[64]; /*Q10*/ /*------------------------------------------------------------------------------* * SWB BWE tables @@ -1028,12 +682,6 @@ extern const Word16 sqrt_swb_bwe_trans_subband_width_fx[]; // Q11 extern const Word16 sqrt_swb_bwe_subband_fx_L1[]; // Q12 extern const Word16 sqrt_swb_bwe_subband_fx_L2[]; // Q12 -extern const float smooth_factor[]; -extern const float fb_smooth_factor[]; -#ifndef IVAS_FLOAT_FIXED -extern const float swb_inv_bwe_subband_width[]; -extern const float fb_inv_bwe_subband_width[]; -#endif extern const Word16 swb_bwe_subband[]; // Q0 extern const Word16 fb_bwe_subband[]; // Q0 extern const Word16 fb_bwe_sm_subband[]; // Q0 @@ -1044,28 +692,12 @@ extern const Word16 fb_bwe_subband_float[]; // Q0 extern const Word16 fb_inv_bwe_subband_width_fx[]; // Q15 extern const Word16 fb_bwe_sm_subband_float[]; // Q0 extern const Word16 fb_smooth_factor_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float EnvCdbk11[]; -extern const float EnvCdbk1st[]; -extern const float EnvCdbk2nd[]; -extern const float EnvCdbk3rd[]; -extern const float EnvCdbk4th[]; -#endif -extern const Word16 EnvCdbk11_fx[]; /*Q8 */ -extern const Word16 EnvCdbk1st_fx[]; /*Q8 */ -extern const Word16 EnvCdbk2nd_fx[]; /*Q8 */ -extern const Word16 EnvCdbk3rd_fx[]; /*Q8 */ -extern const Word16 EnvCdbk4th_fx[]; /*Q8 */ - -#ifndef IVAS_FLOAT_FIXED -extern const float EnvCdbkFB[]; -extern const float Env_TR_Cdbk1[]; -extern const float Env_TR_Cdbk2[]; -extern const float w_NOR[]; -extern const float Mean_env[]; -extern const float Mean_env_fb[]; -extern const float Mean_env_tr[]; -#endif +extern const Word16 EnvCdbk11_fx[]; /*Q8 */ +extern const Word16 EnvCdbk1st_fx[]; /*Q8 */ +extern const Word16 EnvCdbk2nd_fx[]; /*Q8 */ +extern const Word16 EnvCdbk3rd_fx[]; /*Q8 */ +extern const Word16 EnvCdbk4th_fx[]; /*Q8 */ + extern const Word16 EnvCdbkFB_fx[]; /*Q7 */ extern const Word16 Env_TR_Cdbk1_fx[]; /*Q8 */ extern const Word16 Env_TR_Cdbk2_fx[]; /*Q8 */ @@ -1077,19 +709,12 @@ extern const Word16 Mean_env_tr_fx[]; /*Q8 */ * ACEPL/HQ core switching tables *------------------------------------------------------------------------------*/ -extern const float hp12800_32000[]; -extern const float hp16000_32000[]; -extern const float hp12800_48000[]; -extern const float hp16000_48000[]; -extern const float hp12800_16000[]; extern const Word16 hp12800_32000_fx[]; // Q15 extern const Word16 hp16000_32000_fx[]; // Q15 extern const Word16 hp12800_48000_fx[]; // Q15 extern const Word16 hp16000_48000_fx[]; // Q15 extern const Word16 hp12800_16000_fx[]; // Q15 -extern const double cu15[28][3]; -extern const double cu4[6][3]; extern const Word16 cu15_fx[28][3]; // Q13 extern const Word16 cu4_fx[6][3]; // Q13 extern const Word16 ct2[7][13]; // Q0 @@ -1098,30 +723,12 @@ extern const Word16 ct2_fx[7][14]; // Q13 * HQ core tables *------------------------------------------------------------------------------*/ -extern const float window_48kHz[]; -extern const float window_256kHz_flt[]; -extern const float half_overlap_25_flt[]; -extern const float half_overlap_48_flt[]; -extern const float half_overlap_int_flt[]; -extern const float small_overlap_25_flt[]; -extern const float small_overlap_48_flt[]; -extern const float small_overlap_int_flt[]; -extern const float window_8_16_32kHz[]; - -extern const float short_window_48kHz[]; -extern const float short_window_32kHz[]; -extern const float short_window_16kHz[]; -extern const float short_window_8kHz[]; extern const Word16 short_window_48kHz_fx[L_FRAME48k / 2 / 2]; // Q15 extern const Word16 short_window_32kHz_fx[L_FRAME32k / 2 / 2]; // Q15 extern const Word16 short_window_16kHz_fx[L_FRAME16k / 2 / 2]; // Q15 extern const Word16 short_window_8kHz_fx[L_FRAME8k / 2 / 2]; // Q15 extern const Word16 inv_jp2[]; // Q15 -extern const float wscw16q15[]; -extern const float wscw16q15_8[]; -extern const float wscw16q15_16[]; -extern const float wscw16q15_32[]; extern const Word16 wscw16q15_fx[]; /*Q15 */ extern const Word16 wscw16q15_8_fx[]; /*Q15 */ extern const Word16 wscw16q15_16_fx[]; /*Q15 */ @@ -1135,9 +742,8 @@ extern const Word16 band_len_wb[]; // Q0 extern const Word16 band_start_wb[]; // Q0 extern const Word16 band_end_wb[]; // Q0 extern const Word16 band_len_harm_float[]; -extern const Word16 band_start_harm[]; // Q0 -extern const Word16 band_end_harm[]; // Q0 -extern const float rat_flt[SFM_N_WB]; +extern const Word16 band_start_harm[]; // Q0 +extern const Word16 band_end_harm[]; // Q0 extern const Word16 rat_fx[SFM_N_WB]; // Q14 extern const Word16 intl_bw_16[N_INTL_GRP_16]; // Q0 extern const Word16 intl_bw_32[N_INTL_GRP_32]; // Q0 @@ -1148,21 +754,15 @@ extern const Word16 intl_cnt_48[N_INTL_GRP_48]; // Q0 extern const Word16 norm_order_48[NB_SFM]; // Q0 extern const Word16 norm_order_32[SFM_N_SWB]; // Q0 extern const Word16 norm_order_16[SFM_N_WB]; // Q0 -extern const float dicn_pg[45]; -extern const Word32 dicn_pg_fx[]; /*Q12 */ -extern const Word16 expPkEnrg_tbl[45]; // Q0 -extern const Word32 manPkEnrg_tbl[45]; // Q0 -extern const Word32 E_max5_tbl[40]; // Q0 +extern const Word32 dicn_pg_fx[]; /*Q12 */ +extern const Word16 expPkEnrg_tbl[45]; // Q0 +extern const Word32 manPkEnrg_tbl[45]; // Q0 +extern const Word32 E_max5_tbl[40]; // Q0 -extern const float thren_pg[44]; extern const Word32 thren_pg_fx[44]; extern const Word32 dicn_fx[40]; /*Q14 */ -extern const float dicn[40]; -extern const float dicn_inv[40]; -extern const float thren_HQ[39]; -#ifdef IVAS_FLOAT_FIXED -extern const Word32 thren_HQ_fx[39]; /*Q14 */ -#endif + +extern const Word32 thren_HQ_fx[39]; /*Q14 */ extern const Word16 dicnlg2_float[40]; // Q0 extern const Word16 huffnorm[32]; // Q0 extern const Word16 huffsizn[32]; // Q0 @@ -1247,8 +847,6 @@ extern const Word16 LNb[NB_SFM]; // Q0 extern const Word32 pow_getbitsfrompulses_fx[16]; // Q21 extern const Word32 table_logcum_fx[563]; // Q16 extern const Word16 DDP_fx[4]; // Q0 -extern const float DDP[4]; - extern const Word16 step_tcq[8][STATES]; // Q0 extern const Word16 denc[8][STATES]; // Q0 @@ -1262,8 +860,7 @@ extern const Word16 ddec_LSB[4][2]; // Q0 extern const Word16 nextstate[STATES][2]; // Q0 -extern const Word16 fine_gain_bits[]; // Q0 -extern const float *const finegain[]; +extern const Word16 fine_gain_bits[]; // Q0 extern const Word16 *finegain_fx[5]; /* Q14 */ extern const UWord8 hBitsMinus1_N01[2]; // Q0 extern const UWord8 hBitsMinus1_N02[65]; // Q0 @@ -1343,7 +940,6 @@ extern const float gain_att[]; extern const float stab_trans[]; extern const float env_stab_tp[2][2]; extern const float att_step[]; -extern const float gain_qlow[]; extern const Word16 gain_att_fx[40]; // Q15 extern const Word16 att_step_fx[4]; // Q13 extern const int16_t gain_cb_size[]; @@ -1353,9 +949,6 @@ extern const Word16 env_stab_tp_fx[2][2]; // Q15 * SWB BWE for LR MDCT core *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float gain_table_SWB_BWE[NB_SWB_SUBBANDS]; -#endif extern const Word16 gain_table_SWB_BWE_fx[NB_SWB_SUBBANDS]; /*Q14 */ /* HQ_NORMAL mode */ @@ -1379,100 +972,61 @@ extern const Word16 subband_search_offsets_16p4kbps_Har[NB_SWB_SUBBANDS_HAR_SEAR *----------------------------------------------------------------------------------*/ /* NELP filter coefficients */ -extern const float bp1_num_coef_wb[5]; extern const Word16 bp1_num_coef_wb_fx[5]; /* Q14 */ -extern const float bp1_den_coef_wb[5]; extern const Word16 bp1_den_coef_wb_fx[5]; /* Q14 */ -extern const float shape1_num_coef[11]; extern const Word16 shape1_num_coef_fx[11]; /* Q15 */ -extern const float shape1_den_coef[11]; extern const Word16 shape1_den_coef_fx[11]; /* Q15 */ -extern const float shape2_num_coef[11]; extern const Word16 shape2_num_coef_fx[11]; /* Q15 */ -extern const float shape2_den_coef[11]; extern const Word16 shape2_den_coef_fx[11]; /* Q15 */ -extern const float shape3_num_coef[11]; extern const Word16 shape3_num_coef_fx[11]; /* Q15 */ -extern const float shape3_den_coef[11]; extern const Word16 shape3_den_coef_fx[11]; /* Q15 */ -extern const float txlpf1_num_coef[11]; extern const Word16 txlpf1_num_coef_fx[11]; /* Q13 */ -extern const float txlpf1_den_coef[11]; extern const Word16 txlpf1_den_coef_fx[11]; /* Q13 */ -extern const float txhpf1_num_coef[11]; extern const Word16 txhpf1_num_coef_fx[11]; /* Q13 */ -extern const float txhpf1_den_coef[11]; extern const Word16 txhpf1_den_coef_fx[11]; /* Q13 */ -extern const float bp1_num_coef_nb_fx_order7_flt[8]; extern const Word16 bp1_num_coef_nb_fx_order7[8]; /* Q13 */ -extern const float bp1_den_coef_nb_fx_order7_flt[8]; extern const Word16 bp1_den_coef_nb_fx_order7[8]; /* Q13 */ -extern const float num_nelp_lp[NELP_LP_ORDER + 1]; -extern const float den_nelp_lp[NELP_LP_ORDER + 1]; - -extern const float UVG1CB_WB[UVG1_CBSIZE][2]; -extern const float UVG2CB1_WB[UVG2_CBSIZE][5]; -extern const float UVG2CB2_WB[UVG2_CBSIZE][5]; - extern const Word16 UVG1CB_WB_FX[UVG1_CBSIZE][2]; /* Q13 */ extern const Word16 UVG2CB1_WB_FX[UVG2_CBSIZE][5]; /* Q12 */ extern const Word16 UVG2CB2_WB_FX[UVG2_CBSIZE][5]; /* Q12 */ -extern const float UVG1CB_NB[UVG1_CBSIZE][2]; -extern const float UVG2CB1_NB[UVG2_CBSIZE][5]; -extern const float UVG2CB2_NB[UVG2_CBSIZE][5]; - extern const Word16 UVG1CB_NB_FX[UVG1_CBSIZE][2]; /* Q13 */ extern const Word16 UVG2CB1_NB_FX[UVG2_CBSIZE][5]; /* Q12 */ extern const Word16 UVG2CB2_NB_FX[UVG2_CBSIZE][5]; /* Q12 */ -extern const float frac_4sf[NB_SUBFR + 2]; extern const Word16 frac_4sf_fx[NB_SUBFR + 2]; /* Q4 */ -extern const float erb_WB[NUM_ERB_WB + 1]; -extern const float erb_NB[NUM_ERB_NB + 1]; - extern const Word16 erb_WB_fx[NUM_ERB_WB + 1]; // Q(log2(2.56) extern const Word16 erb_NB_fx[NUM_ERB_NB + 1]; // Q(log2(2.56) -extern const float AmpCB1_WB[64][10]; -extern const Word16 AmpCB1_WB_fx[640]; // Q13 -extern const float AmpCB2_WB[64][NUM_ERB_WB - 11]; +extern const Word16 AmpCB1_WB_fx[640]; // Q13 extern const Word16 AmpCB2_WB_fx[64 * ( NUM_ERB_WB - 13 )]; // Q13 -extern const float AmpCB1_NB[64][10]; extern const Word16 AmpCB1_NB_fx[640]; // Q13 -extern const float AmpCB2_NB[64][NUM_ERB_NB - 11]; extern const Word16 AmpCB2_NB_fx[64 * ( NUM_ERB_NB - 13 )]; // Q13 -extern const float PowerCB_WB[64][2]; -extern const float PowerCB_NB[64][2]; extern const Word16 PowerCB_WB_fx[128]; // Q11 extern const Word16 PowerCB_NB_fx[128]; // Q11 -extern const float sinc[8][12]; extern const Word16 sinc_fx[8][12]; -extern const float hvq_thr_adj[5]; extern const Word16 hvq_thr_adj_fx[5]; /* Q15 */ extern const Word16 hvq_index_mapping_fx[4]; -extern const float hvq_peak_cb[1024]; -extern const Word16 hvq_peak_cb_fx[]; /* Q15 */ -extern const float hvq_class_c[16]; +extern const Word16 hvq_peak_cb_fx[]; /* Q15 */ extern const Word16 hvq_class_c_fx[16]; /* Q15 */ extern const Word16 hvq_cb_search_overlap24k[17]; // Q0 extern const Word16 hvq_cb_search_overlap32k[21]; // Q0 @@ -1492,9 +1046,6 @@ extern const Word16 hvq_cp_huff_tab[52]; // Q0 /*------------------------------------------------------------------------------* * GSC mode *------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float sin_table256[]; -#endif extern const Word16 sin_table256_fx[]; // Q15 extern const Word16 gsc_sfm_start[]; // Q0 extern const Word16 gsc_sfm_end[]; // Q0 @@ -1628,18 +1179,11 @@ extern const float FFT_RotVector_960[1860]; /*----------------------------------------------------------------------------------* * FEC for HQ core *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float Asr_LP32[41]; -extern const float Asr_LP16[21]; -extern const float Asr_LP48[61]; -#endif extern const Word16 Asr_LP32_fx[41]; // Q15 extern const Word16 Asr_LP16_fx[21]; // Q15 extern const Word16 Asr_LP48_fx[61]; // Q15 -extern const Word16 Num_bands_NB[]; // Q0 -extern const float SmoothingWin_NB875[]; -extern const float SmoothingWin_NB2[]; +extern const Word16 Num_bands_NB[]; // Q0 extern const Word16 SmoothingWin_NB875_fx[]; /* Q15 */ extern const Word16 SmoothingWin_NB2_fx[]; /* Q15 */ @@ -1649,40 +1193,6 @@ extern const Word16 SmoothingWin_NB2_fx[]; /* Q15 */ extern const Word16 freqTable[2]; // Q0 -extern const float CLDFB80_10_flt[100]; -extern const float CLDFB80_16_flt[160]; -extern const float CLDFB80_20_flt[200]; -extern const float CLDFB80_30_flt[300]; -extern const float CLDFB80_32_flt[320]; -extern const float CLDFB80_40_flt[400]; -extern const float CLDFB80_60_flt[600]; - -/*5ms delay*/ -extern const float LDQMF_10[100]; -extern const float LDQMF_16[160]; -extern const float LDQMF_20[200]; -extern const float LDQMF_30[300]; -extern const float LDQMF_32[320]; -extern const float LDQMF_40[400]; -extern const float LDQMF_60[600]; -extern const float rot_vec_delay_re_LDQMF[60]; -extern const float rot_vec_delay_im_LDQMF[60]; - -extern const float rot_vec_ana_re_L10[5]; -extern const float rot_vec_ana_im_L10[5]; -extern const float rot_vec_ana_re_L16[8]; -extern const float rot_vec_ana_im_L16[8]; -extern const float rot_vec_ana_re_L20[10]; -extern const float rot_vec_ana_im_L20[10]; -extern const float rot_vec_ana_re_L30[15]; -extern const float rot_vec_ana_im_L30[15]; -extern const float rot_vec_ana_re_L32[16]; -extern const float rot_vec_ana_im_L32[16]; -extern const float rot_vec_ana_re_L40[20]; -extern const float rot_vec_ana_im_L40[20]; -extern const float rot_vec_ana_re_L60[30]; -extern const float rot_vec_ana_im_L60[30]; - extern const Word16 CLDFB80_10[100]; // Q.5 extern const Word16 CLDFB80_16[160]; // Q.5 extern const Word16 CLDFB80_20[200]; // Q.5 @@ -1690,7 +1200,6 @@ extern const Word16 CLDFB80_32[320]; // Q.5 extern const Word16 CLDFB80_40[400]; // Q.5 extern const Word16 CLDFB80_60[600]; // Q.5 extern const Word16 CLDFB80_30[300]; // Q.5 -#ifdef IVAS_FLOAT_FIXED extern const Word16 LDQMF_10_enc_fx[100]; extern const Word16 LDQMF_16_enc_fx[160]; extern const Word16 LDQMF_20_enc_fx[200]; @@ -1698,7 +1207,6 @@ extern const Word16 LDQMF_30_enc_fx[300]; extern const Word16 LDQMF_32_enc_fx[320]; extern const Word16 LDQMF_40_enc_fx[400]; extern const Word16 LDQMF_60_enc_fx[600]; -#endif extern const Word16 rRotVectr_10[]; // Q(sqrt(1.0/16.00)) extern const Word16 iRotVectr_10[]; // Q(sqrt(1.0/16.00)) @@ -1723,22 +1231,6 @@ extern const Word16 *cldfb_protoFilter_2_5ms[]; extern const Word16 cldfb_scale_2_5ms[7]; // Q8 extern const Word16 cldfb_scale_5_0ms[7]; // Q8 - -extern const float rot_vec_syn_re_L10[5]; -extern const float rot_vec_syn_im_L10[5]; -extern const float rot_vec_syn_re_L16[8]; -extern const float rot_vec_syn_im_L16[8]; -extern const float rot_vec_syn_re_L20[10]; -extern const float rot_vec_syn_im_L20[10]; -extern const float rot_vec_syn_re_L30[15]; -extern const float rot_vec_syn_im_L30[15]; -extern const float rot_vec_syn_re_L32[16]; -extern const float rot_vec_syn_im_L32[16]; -extern const float rot_vec_syn_re_L40[20]; -extern const float rot_vec_syn_im_L40[20]; -extern const float rot_vec_syn_re_L60[30]; -extern const float rot_vec_syn_im_L60[30]; - extern const Word32 rot_vec_syn_re_L10_fx[5]; // Q31 extern const Word32 rot_vec_syn_im_L10_fx[5]; // Q31 extern const Word32 rot_vec_syn_re_L16_fx[8]; // Q31 @@ -1754,12 +1246,10 @@ extern const Word32 rot_vec_syn_im_L40_fx[20]; // Q31 extern const Word32 rot_vec_syn_re_L60_fx[30]; // Q31 extern const Word32 rot_vec_syn_im_L60_fx[30]; // Q31 -extern const float bpf_weights_16[CLDFB_NO_COL_MAX]; extern const Word16 bpf_weights_16_Fx[16]; // Q15 extern const Word16 bpf_weights_16_ivas_fx[16]; // Q15 extern const Word32 bpf_weights_16_ivas_fx_32[16]; // Q30 -extern const float CNG_details_codebook[64][NUM_ENV_CNG]; extern const Word16 CNG_details_codebook_fx[64][NUM_ENV_CNG]; // Q6 @@ -1768,18 +1258,14 @@ extern const Word16 CNG_details_codebook_fx[64][NUM_ENV_CNG]; // Q6 *----------------------------------------------------------------------------------*/ extern const Word16 d_array[SIZE_SCALE_TABLE_CN]; // Q0 -extern const float m_array_flt[SIZE_SCALE_TABLE_CN]; extern const Word16 m_array[SIZE_SCALE_TABLE_CN]; // Q15 -extern const float msQeqInvAv_thresh_flt[3]; -extern const Word16 msQeqInvAv_thresh[3]; // Q15 -extern const float msNoiseSlopeMax_flt[4]; -extern const Word16 msNoiseSlopeMax[4]; // Q15 - -extern const SCALE_SETUP scaleTableStereo[SIZE_SCALE_TABLE_STEREO]; // Q7 -extern const SCALE_SETUP scaleTableMono[SIZE_SCALE_TABLE_MONO]; // Q7 -extern const SCALE_SETUP scaleTable_cn_only[SIZE_SCALE_TABLE_CN]; // Q14 -extern const SCALE_SETUP scaleTable_cn_dirac[15]; // Q14 -extern const float scaleTable_cn_only_amrwbio_flt[SIZE_SCALE_TABLE_CN_AMRWB][2]; +extern const Word16 msQeqInvAv_thresh[3]; // Q15 +extern const Word16 msNoiseSlopeMax[4]; // Q15 + +extern const SCALE_SETUP scaleTableStereo[SIZE_SCALE_TABLE_STEREO]; // Q7 +extern const SCALE_SETUP scaleTableMono[SIZE_SCALE_TABLE_MONO]; // Q7 +extern const SCALE_SETUP scaleTable_cn_only[SIZE_SCALE_TABLE_CN]; // Q14 +extern const SCALE_SETUP scaleTable_cn_dirac[15]; // Q14 extern const Word16 scaleTable_cn_only_amrwbio[SIZE_SCALE_TABLE_CN_AMRWB][2]; // Q14 extern const Word32 scaleTable_cn_only_amrwbio_fx_by_10f[SIZE_SCALE_TABLE_CN_AMRWB][2]; // Q29 @@ -1796,29 +1282,16 @@ extern const FD_CNG_SETUP FdCngSetup_swb2; extern const Word16 levels_37bits[FD_CNG_stages_37bits]; // Q0 extern const Word16 bits_37bits[FD_CNG_stages_37bits]; // Q0 -extern const float *const cdk_37bits_flt[]; -extern const float *const cdk_37bits_ivas[]; -extern Word16 const *const cdk_37bits[]; // Q7 -extern Word16 const *const ivas_cdk_37bits_fx[]; // Q7 -extern const float fftSineTab640[321]; -extern const Word16 fftSineTab640_fx[321]; // Q15 - -extern const float olapWinAna512[512]; -extern const float olapWinAna640[640]; -#ifdef IVAS_FLOAT_FIXED +extern Word16 const *const cdk_37bits[]; // Q7 +extern Word16 const *const ivas_cdk_37bits_fx[]; // Q7 +extern const Word16 fftSineTab640_fx[321]; // Q15 + extern const Word32 olapWinAna512_fx[512]; // Q30 extern const Word32 olapWinAna640_fx[640]; // Q30 -#endif // IVAS_FLOAT_FIXED -extern const float olapWinSyn256[256]; extern const Word16 olapWinSyn256_fx[256]; // Q15 -extern const float olapWinSyn320[320]; extern const Word16 olapWinSyn320_fx[320]; // Q15 -#ifdef ERI_FDCNGVQ_LOW_ROM_TESTING -extern const float *const cdk_37bits_ivas_orig[]; -#endif - extern const Word8 cdk1_ivas_dct_s0_W8[]; // Q0 extern const Word8 cdk1_ivas_dct_s1_W8[]; // Q0 extern const Word8 cdk1_ivas_dct_s2_W8[]; // Q0 @@ -1831,13 +1304,8 @@ extern const Word16 cdk1_ivas_cols_per_segment[]; // Q0 extern const Word16 cdk1_ivas_trunc_dct_cols_per_segment[]; // Q0 extern const Word16 *stage1_dct_col_syn_shift[]; // Q0 -extern const float cdk1r_tr_midQ_truncQ[]; -#ifdef IVAS_FLOAT_FIXED -extern const Word16 cdk1r_tr_midQ_truncQ_fx[]; // Q10 -#endif -extern const float fdcng_dct_invScaleF[]; -extern const float fdcng_dct_scaleF[]; -extern const Word32 fdcng_dct_scaleF_fx[]; // Q31 +extern const Word16 cdk1r_tr_midQ_truncQ_fx[]; // Q10 +extern const Word32 fdcng_dct_scaleF_fx[]; // Q31 extern const Word16 unique_idctT2_24coeffsQ16[]; // Q16 @@ -1846,9 +1314,6 @@ extern const Word8 idctT2_24_compressed_idx[]; extern const Word16 unique_idctT2_21coeffsQ16[]; // Q16 extern const Word8 idctT2_21_compressed_idx[]; // Q0 - -extern const float idctT2_24_X_matrixFloatQ[]; - extern const Word16 cdk1_ivas_entries_per_segment[]; // Q0 extern const Word16 cdk1_ivas_cum_entries_per_segment[]; // Q0 @@ -1856,21 +1321,10 @@ extern const Word16 cdk1_ivas_cum_entries_per_segment[]; // Q0 extern const Word8 cdk1_ivas_segm_neighbour_fwd[]; // Q0 extern const Word8 cdk1_ivas_segm_neighbour_rev[]; // Q0 - -extern const float cdk_37bits_1[]; -extern const float cdk_37bits_2[]; -extern const float cdk_37bits_3[]; -extern const float cdk_37bits_4[]; -extern const float cdk_37bits_5[]; -extern const float cdk_37bits_6[]; - - /*----------------------------------------------------------------------------------* * TCX *----------------------------------------------------------------------------------*/ -extern const float gain_corr_fac_flt[]; -extern const float gain_corr_inv_fac_flt[]; extern const Word16 gain_corr_fac[]; /*pow(10,2^(-n-2)/28)(1Q14)*/ extern const Word16 gain_corr_inv_fac[]; /*pow(10,-2^(-n-2)/28)(0Q15)*/ @@ -1884,43 +1338,7 @@ extern const SCALE_TCX_SETUP scaleTcxTable[SIZE_SCALE_TABLE_TCX]; // Q15 extern const UWord8 ari_lookup_s17_LC[4096]; // Q0 extern const UWord16 ari_pk_s17_LC_ext[64][18]; // Q0 -extern const Word16 NumRatioBits[2][17]; // Q0 -extern const float Ratios_WB_2[32]; -extern const float Ratios_WB_3[32]; -extern const float Ratios_WB_4[32]; -extern const float Ratios_WB_5[32]; -extern const float Ratios_WB_6[32]; -extern const float Ratios_WB_7[32]; -extern const float Ratios_WB_8[16]; -extern const float Ratios_WB_9[16]; -extern const float Ratios_WB_10[16]; -extern const float Ratios_WB_11[16]; -extern const float Ratios_WB_12[16]; -extern const float Ratios_WB_13[16]; -extern const float Ratios_WB_14[16]; -extern const float Ratios_WB_15[16]; -extern const float Ratios_WB_16[4]; -extern const float Ratios_WB_17[4]; -extern const float Ratios_WB_18[4]; -extern const float Ratios_NB_2[32]; -extern const float Ratios_NB_3[16]; -extern const float Ratios_NB_4[16]; -extern const float Ratios_NB_5[16]; -extern const float Ratios_NB_6[16]; -extern const float Ratios_NB_7[16]; -extern const float Ratios_NB_8[16]; -extern const float Ratios_NB_9[8]; -extern const float Ratios_NB_10[8]; -extern const float Ratios_NB_11[8]; -extern const float Ratios_NB_12[8]; -extern const float Ratios_NB_13[4]; -extern const float Ratios_NB_14[4]; -extern const float Ratios_NB_15[4]; -extern const float Ratios_NB_16[4]; -extern const float Ratios_NB_17[4]; -extern const float Ratios_NB_18[4]; -extern const float *const Ratios[2][17]; - +extern const Word16 NumRatioBits[2][17]; // Q0 extern const Word16 Ratios_WB_2_fx[32]; /* 7Q8 */ extern const Word16 Ratios_WB_3_fx[32]; /* 7Q8 */ extern const Word16 Ratios_WB_4_fx[32]; /* 7Q8 */ @@ -1956,7 +1374,6 @@ extern const Word16 Ratios_NB_16_fx[4]; /* 7Q8 */ extern const Word16 Ratios_NB_17_fx[4]; /* 7Q8 */ extern const Word16 Ratios_NB_18_fx[4]; /* 7Q8 */ extern const Word16 *const Ratios_fx[2][17]; /* 7Q8 */ - extern const Word16 qGains[2][1 << kTcxHmNumGainBits]; /*----------------------------------------------------------------------------------* @@ -1978,7 +1395,6 @@ extern const struct TnsParameters tnsParameters48kHz_grouped[2]; extern const struct TnsParameters tnsParameters32kHz_Stereo[2]; -extern const float tnsAcfWindow[TNS_MAX_FILTER_ORDER]; extern const Word16 tnsAcfWindow_fx[TNS_MAX_FILTER_ORDER]; // Q15 extern const ParamsBitMap tnsEnabledSWBTCX20BitMap; @@ -2023,7 +1439,6 @@ extern const Coding codesTnsOrderTCX10[]; extern const Coding codesTnsOrder[]; extern const Word16 nTnsOrderCodes; // Q0 -extern const float tnsCoeff4_flt[16]; extern const Word16 tnsCoeff4[16]; /*----------------------------------------------------------------------------------* @@ -2039,13 +1454,10 @@ typedef struct igf_mode_type } IGF_MODE; extern const IGF_MODE igfMode[IGF_BITRATE_UNKNOWN]; -extern const Word16 swb_offset_LB_new[IGF_BITRATE_UNKNOWN][IGF_MAX_SFB]; // Q0 -extern const Word16 igf_tile_offset_table[IGF_BITRATE_UNKNOWN][2 * IGF_MAX_TILES + 1]; // Q0 -extern const float igf_whitening_TH_flt[IGF_BITRATE_UNKNOWN][2][IGF_MAX_TILES]; -extern const Word16 igf_whitening_TH[][2][IGF_MAX_TILES]; // Q13 -#ifdef IVAS_FLOAT_FIXED +extern const Word16 swb_offset_LB_new[IGF_BITRATE_UNKNOWN][IGF_MAX_SFB]; // Q0 +extern const Word16 igf_tile_offset_table[IGF_BITRATE_UNKNOWN][2 * IGF_MAX_TILES + 1]; // Q0 +extern const Word16 igf_whitening_TH[][2][IGF_MAX_TILES]; // Q13 extern const Word16 igf_whitening_TH_ivas_fx[IGF_BITRATE_UNKNOWN][2][IGF_MAX_TILES]; // Q13 -#endif // IVAS_FLOAT_FIXED extern const Word16 cf_off_se01_tab[10]; // Q0 extern const Word16 cf_off_se10_tab; // Q0 extern const Word16 cf_off_se02_tab[10][IGF_CTX_COUNT]; // Q0 @@ -2056,9 +1468,6 @@ extern const UWord16 cf_se02_tab[10][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1]; extern const UWord16 cf_se10_tab[IGF_SYMBOLS_IN_TABLE + 1]; // Q0 extern const UWord16 cf_se11_tab[IGF_CTX_COUNT][IGF_CTX_COUNT][IGF_SYMBOLS_IN_TABLE + 1]; // Q0 -extern const float normReciprocal[CHEAP_NORM_SIZE]; -extern const float *const w_a_float[7]; - extern const PWord16 SineTable512_fx[]; // Q15 extern const Word16 ldCoeff[7]; // Q15 extern const UWord32 exp2_tab_long[32]; // Q31 @@ -2067,28 +1476,20 @@ extern const UWord32 exp2x_tab_long[32]; // Q31 extern const Word16 invTable[INV_TABLE_SIZE + 1]; // Q15 extern const Word16 sqrtTable[SQRT_TABLE_SIZE + 1]; // Q15 extern const Word16 invSqrtTable[SQRT_TABLE_SIZE + 1]; // Q15 - -extern const float tcx_mdct_window_48[420]; -extern const Word16 tcx_mdct_window_48_fx[420]; // Q15 -extern const float tcx_mdct_window_half_48[180]; -extern const Word16 tcx_mdct_window_half_48_fx[180]; // Q15 -extern const float tcx_mdct_window_trans_48[60]; -extern const Word16 tcx_mdct_window_trans_48_fx[60]; // Q15 +extern const Word16 tcx_mdct_window_48_fx[420]; // Q15 +extern const Word16 tcx_mdct_window_half_48_fx[180]; // Q15 +extern const Word16 tcx_mdct_window_trans_48_fx[60]; // Q15 /*----------------------------------------------------------------------------------* * SWB TBE LSF tables (1.75 kbps) *----------------------------------------------------------------------------------*/ -extern const float sigma_BWE[]; -extern const Word32 sigma_BWE_fx[]; // Q31 -extern const float inv_sigma_BWE[]; +extern const Word32 sigma_BWE_fx[]; // Q31 extern const Word16 inv_modified_sigma_BWE_fx[]; // Q1 extern const Word16 modified_sigma_BWE_fx[]; // Q(log2(2.56) -extern const float scales_BWE[]; -extern const Word8 no_lead_BWE[]; // Q0 +extern const Word8 no_lead_BWE[]; // Q0 -extern const float scales_BWE_3b[]; extern const Word16 scales_BWE_fx[]; // Q13 extern const Word16 scales_BWE_fx_new[]; // Q11 extern const Word16 scales_BWE_3b_fx[]; // Q13 @@ -2096,17 +1497,11 @@ extern const Word16 scales_BWE_3b_fx_new[]; // Q11 extern const Word8 no_lead_BWE_3b[]; // Q0 extern const Word16 mslvq_SHB_min_bits[]; // Q0 -extern const float SHB_LSF_mean[]; extern const Word16 SHB_LSF_mean_fx[]; // Q15 -extern const float SHB_LSF_VQ3[48]; -extern const float SHB_LSF_VQ4[96]; -extern const float *const cb_LSF_BWE[]; -extern const Word16 SHB_LSF_VQ3_fx[48]; // Q15 -extern const Word16 SHB_LSF_VQ4_fx[96]; // Q15 -extern const Word16 *const cb_LSF_BWE_fx[]; // Q15 -extern const float LastCoefPred_0bit[18]; -extern const float LastCoefPred_1bit[36]; +extern const Word16 SHB_LSF_VQ3_fx[48]; // Q15 +extern const Word16 SHB_LSF_VQ4_fx[96]; // Q15 +extern const Word16 *const cb_LSF_BWE_fx[]; // Q15 extern const Word32 LastCoefPred_0bit_fx[18]; // Q31 extern const Word32 LastCoefPred_1bit_fx[36]; // Q31 extern const Word16 config_LSF_BWE[]; // Q0 @@ -2156,12 +1551,11 @@ extern const Word16 cos_pi_by_127[128]; /* Q15 */ extern const Word16 cos_pi_by_255[256]; /* Q15 */ extern const Word16 cos_pi_by_383[384]; /* Q15 */ -extern const Word16 swb_lsp_prev_interp_init[]; /* Q15 */ -extern const Word16 L_frame_inv[8]; // Q14 -extern const Word16 InvIntTable[65]; // Q15 -extern const Word16 TecLowBandTable[]; // Q0 -extern const Word16 TecSC_Fx[]; // Q15 -extern const float TecSC[]; +extern const Word16 swb_lsp_prev_interp_init[]; /* Q15 */ +extern const Word16 L_frame_inv[8]; // Q14 +extern const Word16 InvIntTable[65]; // Q15 +extern const Word16 TecLowBandTable[]; // Q0 +extern const Word16 TecSC_Fx[]; // Q15 extern const Word16 sqrt_table_pitch_search[256 + 1]; // Q11 /* fft_evs.c */ extern const Word16 RotVector_32[2 * 20]; // Q15 @@ -2187,19 +1581,15 @@ extern const Word16 tab_hup_l_fx[]; // Q15 extern const Word16 mfreq_loc_Q2fx[]; // Q0 extern const Word16 mfreq_loc_div_25[]; // Q0 -extern const Word16 band_len_idx[]; // Q0 -extern const Word16 band_len_ener_shift[]; // Q0 -extern const Word16 fine_gain_pred_sqrt_bw[]; // Q11 -#ifdef IVAS_FLOAT_FIXED +extern const Word16 band_len_idx[]; // Q0 +extern const Word16 band_len_ener_shift[]; // Q0 +extern const Word16 fine_gain_pred_sqrt_bw[]; // Q11 extern const Word16 ivas_band_len_idx[]; // Q0 extern const Word16 ivas_band_len_ener_shift[]; // Q0 extern const Word16 ivas_fine_gain_pred_sqrt_bw[]; // Q11 -#endif -extern const Word16 Mean_isf_wb[]; // Q2.56 -extern const Word16 lsp_shb_prev_tbl_fx[]; // Q15 -#ifdef IVAS_FLOAT_FIXED -extern const Word16 ivas_lsp_shb_prev_tbl_fx[]; // Q15 -#endif +extern const Word16 Mean_isf_wb[]; // Q2.56 +extern const Word16 lsp_shb_prev_tbl_fx[]; // Q15 +extern const Word16 ivas_lsp_shb_prev_tbl_fx[]; // Q15 extern const Word16 tab_ari_qnew[4][4]; // enhancer.c diff --git a/lib_com/stab_est.c b/lib_com/stab_est.c index b08e515f7..d441f6ead 100644 --- a/lib_com/stab_est.c +++ b/lib_com/stab_est.c @@ -41,193 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define BIN_4000 80 /* The frequency bin corresponding to 4kHz */ -#define MAX_SNR1 45.0f -#define INV_MAX_SNR ( 1.0f / ( MAX_SNR1 - 1.0f ) ) /* Max. SNR considered for noise subtraction in voiced segments */ -#define MAX_SNR_SNR1 ( MAX_SNR1 * INV_MAX_SNR ) /* 45 * (1 / (MAX_SNR1-1)) */ -#define MAX_BANDEXC 20 -#define TH_0_MAX ( 1.5f * 3.125f ) -#define TH_1_MAX ( 1.5f * 2.8125f ) -#define TH_2_MAX ( 1.5f * 2.1875f ) -#define TH_3_MAX ( 1.5f * 1.875f ) - -#define TH_UP 0.15625f -#define TH_DW 0.15625f -#define NB_TH3_MIN 30 -#define NB_TH1_MIN 30 - -#define MAX_THR 0.92f - -/*------------------------------------------------------------------------* - * stab_est() - * - * Signal stability estimation based on energy variation - *------------------------------------------------------------------------*/ - -int16_t stab_est( - float etot, /* i : Total energy of the current frame */ - float *lt_diff_etot, /* i/o: Long term total energy variation */ - float *mem_etot, /* i/o: Total energy memory */ - int16_t *nb_thr_3, /* i/o: Number of consecutives frames of level 3 */ - int16_t *nb_thr_1, /* i/o: Number of consecutives frames of level 1 */ - float *thresh, /* i/o: Detection thresold */ - int16_t *last_music_flag, /* i/o: Previous music detection ouptut */ - const int16_t vad_flag /* i : VAD flag */ -) -{ - int16_t i, music_flag2; - float mean_diff; - float ftmp_c, fcorr, dev; - - /*------------------------------------------------------------------------* - * Find mean of the past MAX_LT frames energy variation - *------------------------------------------------------------------------*/ - - mean_diff = 0.0f; - for ( i = 1; i < MAX_LT; i++ ) - { - mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; /* divide by MAX_LT */ - lt_diff_etot[i - 1] = lt_diff_etot[i]; - } - - mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; /* divide by MAX_LT */ - - /*------------------------------------------------------------------------* - * Find statistical deviation of the energy variation history - * against the last 15 frames - *------------------------------------------------------------------------*/ - - fcorr = 0.0f; - for ( i = MAX_LT - 15; i < MAX_LT; i++ ) - { - ftmp_c = lt_diff_etot[i] - mean_diff; - fcorr += ftmp_c * ftmp_c; - } - - lt_diff_etot[i - 1] = etot - *mem_etot; - *mem_etot = etot; - - /*------------------------------------------------------------------------* - * Compute statistical deviation - *------------------------------------------------------------------------*/ - - dev = (float) sqrt( fcorr / ( MAX_LT - 15 ) ); - - /*------------------------------------------------------------------------* - * State machine to decide level of inter-harmonic noise reduction and - * the first bins where this inter-harmonic noise reduction will be applied - * (only if this frame is GOOD or if we are already far from NB_BFI_THR) - * (if music_flag2 is 0, the spectral modification is deactivated, otherwise, it is activated) - *------------------------------------------------------------------------*/ - - music_flag2 = 0; - - /*--------------------------------------------------------------------* - * statistical deviation < Thresh3 and last signal category type >= 3 - * (last category was "tonal" and the new one is "very tonal") - *--------------------------------------------------------------------*/ - - if ( dev < thresh[3] && *last_music_flag >= 3 ) - { - music_flag2 = 4; - *nb_thr_3 += 1; - *nb_thr_1 = 0; - } - - /*--------------------------------------------------------------------* - * statistical deviation < Thresh2 and last signal category type >= 2 - * (last category was "moderatly tonal" and the new one is a "tonal" ) - *--------------------------------------------------------------------*/ - - else if ( dev < thresh[2] && *last_music_flag >= 2 ) - { - music_flag2 = 3; - *nb_thr_3 += 1; - *nb_thr_1 = 0; - } - - /*--------------------------------------------------------------------* - * statistical deviation < Thresh1 and last signal category type >= 1 - * (last category was "slightly tonal" and the new one is a "moderatly tonal") - *--------------------------------------------------------------------*/ - - else if ( dev < thresh[1] && *last_music_flag >= 1 ) - { - music_flag2 = 2; - } - - /*--------------------------------------------------------------------* - * statistical deviation < Thresh0 - * (last category was "not tonal" and the new one is "slightly tonal") - *--------------------------------------------------------------------*/ - - else if ( dev < thresh[0] ) - { - music_flag2 = 1; - } - - /*--------------------------------------------------------------------* - * statistical deviation > Thresh0 - * (Statistical deviation is high: the new tonal category is not tonal) - *--------------------------------------------------------------------*/ - - else - { - *nb_thr_1 += 1; - *nb_thr_3 = 0; - } - - /*------------------------------------------------------------------------* - * Update the thresholds - *------------------------------------------------------------------------*/ - - if ( *nb_thr_3 > NB_TH3_MIN ) - { - /* the number of consecutive categories type 3 or 4 (most tonal and tonal) */ - /* is greater than 30 frames ->increase the deviations thresholds to allow more variation */ - thresh[0] += TH_UP; - thresh[1] += TH_UP; - thresh[2] += TH_UP; - thresh[3] += TH_UP; - } - else if ( *nb_thr_1 > NB_TH1_MIN ) - { - /* the number of consecutive categories type 0 (non tonal frames) */ - /* is greater than 30 frames -> decrease the deviations thresholds to allow less variation */ - thresh[0] -= TH_DW; - thresh[1] -= TH_DW; - thresh[2] -= TH_DW; - thresh[3] -= TH_DW; - } - - /* limitation of the threshold (this local macro stores the highest of the two and it also counts the # of operations) */ - set_max( &thresh[0], TH_0_MIN2 ); - set_max( &thresh[1], TH_1_MIN2 ); - set_max( &thresh[2], TH_2_MIN2 ); - - set_min( &thresh[0], TH_0_MAX ); - set_min( &thresh[1], TH_1_MAX ); - set_min( &thresh[2], TH_2_MAX ); - - set_max( &thresh[3], TH_3_MIN2 ); - set_min( &thresh[3], TH_3_MAX ); - /*------------------------------------------------------------------------* - * Final updates - *------------------------------------------------------------------------*/ - - *last_music_flag = music_flag2; - if ( vad_flag == 0 ) - { - /* overwrite decision in unvoiced frames */ - music_flag2 = 0; - } - - return music_flag2; -} -#endif diff --git a/lib_com/stat_com.h b/lib_com/stat_com.h index ae26bea01..78d358be5 100644 --- a/lib_com/stat_com.h +++ b/lib_com/stat_com.h @@ -54,13 +54,8 @@ struct Decoder_State; typedef struct { -#ifndef IVAS_FLOAT_FIXED - float a[MAXLAG_WI]; - float b[MAXLAG_WI]; -#else - Word16 a_fx[MAXLAG_WI]; /* Q(DTFS_STRUCTURE.Q) */ - Word16 b_fx[MAXLAG_WI]; /* Q(DTFS_STRUCTURE.Q) */ -#endif + Word16 a_fx[MAXLAG_WI]; /* Q(DTFS_STRUCTURE.Q) */ + Word16 b_fx[MAXLAG_WI]; /* Q(DTFS_STRUCTURE.Q) */ Word16 lag; Word16 nH; Word16 nH_4kHz; @@ -69,13 +64,8 @@ typedef struct Word16 nH_fx; // Q0 Word16 nH_4kHz_fx; // Q0 -#ifndef IVAS_FLOAT_FIXED - float upper_cut_off_freq_of_interest; - float upper_cut_off_freq; -#else - Word16 upper_cut_off_freq_of_interest_fx; /* Q0 */ - Word16 upper_cut_off_freq_fx; /* Q0 */ -#endif + Word16 upper_cut_off_freq_of_interest_fx; /* Q0 */ + Word16 upper_cut_off_freq_fx; /* Q0 */ Word32 sampling_rate; Word16 Fs_fx; /* Q0 */ Word16 Q; @@ -134,13 +124,8 @@ typedef struct Word16 voice_tilt; /*Flag for triggering new voice factor tilt*/ -#ifndef IVAS_FLOAT_FIXED - float formant_enh_num_flt; - float formant_enh_den_flt; -#else - Word16 formant_enh_num; /* Q15 */ - Word16 formant_enh_den; /* Q15 */ -#endif + Word16 formant_enh_num; /* Q15 */ + Word16 formant_enh_den; /* Q15 */ Word16 bpf_mode; @@ -170,11 +155,8 @@ typedef struct typedef struct { - Word16 bits; /* bits per subframe */ - Word16 nbiter; /* number of iterations */ -#ifndef IVAS_FLOAT_FIXED - float alp_flt; /* initial energy of all fixed pulses */ -#endif + Word16 bits; /* bits per subframe */ + Word16 nbiter; /* number of iterations */ Word16 alp; /* initial energy of all fixed pulses, exponent = ALP_E Q13*/ Word16 nb_pulse; /* number of pulses */ Word16 fixedpulses; /* number of pulses whose position is determined from correlation and not by iteration */ @@ -207,13 +189,8 @@ typedef struct TNS_filter_structure Word16 spectrumLength; /* Number of subbands covered by the filter. */ Word16 order; /* Filter order. */ Word16 coefIndex[TNS_MAX_FILTER_ORDER]; /* Quantized filter coefficients. */ -#ifndef IVAS_FLOAT_FIXED - float predictionGain_flt; /* Prediction gain. The ratio of a signal and TNS residual energy. */ - float avgSqrCoef_flt; /* Average squared filter coefficient. */ -#else - Word16 predictionGain; /* Prediction gain. The ratio of a signal and TNS residual energy. E(PRED_GAIN_E), Q7 */ - Word16 avgSqrCoef; /* Average squared filter coefficient. E(0), Q15 */ -#endif + Word16 predictionGain; /* Prediction gain. The ratio of a signal and TNS residual energy. E(PRED_GAIN_E), Q7 */ + Word16 avgSqrCoef; /* Average squared filter coefficient. E(0), Q15 */ } STnsFilter; typedef struct /* TNS data describing all active filters. */ @@ -245,28 +222,15 @@ typedef struct typedef struct TCX_config_structure { /* TCX mdct window */ -#ifndef IVAS_FLOAT_FIXED - float tcx_mdct_window_flt[L_MDCT_OVLP_MAX_CORE_FS]; /* Sine window for OL decision and DTX transitions*/ - float tcx_aldo_window_1_flt[L_ALDO_WIN1_MAX_CORE_FS]; /* ALDO window long slope */ - float tcx_aldo_window_2_flt[L_MDCT_OVLP_MAX_CORE_FS]; /* ALDO window short slope */ - float *tcx_aldo_window_1_trunc_flt; /* ALDO window truncated long slope */ -#else PWord16 tcx_mdct_window[L_MDCT_OVLP_MAX_CORE_FS]; /* Sine window for OL decision and DTX transitions*/ Word16 tcx_aldo_window_1[L_FRAME32k * 9 / 32]; /* ALDO window long slope Q15 */ PWord16 tcx_aldo_window_2[L_FRAME32k * 7 / 32]; /* ALDO window short slope */ PWord16 tcx_aldo_window_1_trunc[L_FRAME32k * 7 / 32]; /* ALDO window truncated long slope */ -#endif Word16 last_aldo; -#ifndef IVAS_FLOAT_FIXED - float tcx_mdct_window_half_flt[L_MDCT_HALF_OVLP_MAX_CORE_FS]; - float tcx_mdct_window_minimum_flt[L_MDCT_MIN_OVLP_MAX_CORE_FS]; - float tcx_mdct_window_trans_flt[L_MDCT_MIN_OVLP_MAX_CORE_FS]; /* transition window for ACELP->TCX */ -#else PWord16 tcx_mdct_window_half[L_MDCT_HALF_OVLP_MAX_CORE_FS]; PWord16 tcx_mdct_window_minimum[L_MDCT_MIN_OVLP_MAX_CORE_FS]; PWord16 tcx_mdct_window_trans[L_MDCT_MIN_OVLP_MAX_CORE_FS]; /* transition window for ACELP->TCX */ -#endif Word16 tcx5Size; /* Size of the TCX5 spectrum in number of samples. Always 5ms. */ @@ -281,27 +245,14 @@ typedef struct TCX_config_structure Word16 tcx_mdct_window_delay; /* length of window delay */ Word16 tcx_offset; /* Offset of the folding point relative to the end of the previous synthetised frame */ Word16 tcx_mdct_window_length_old; /* for keeping old value for sample rate switching */ -#ifndef IVAS_FLOAT_FIXED - float tcx_mdct_windowFB_flt[L_MDCT_OVLP_MAX]; - float tcx_aldo_window_1_FB_flt[L_ALDO_WIN1_FB_MAX]; /* ALDO window long slope */ - float tcx_aldo_window_2_FB_flt[L_MDCT_OVLP_MAX]; /* ALDO window short slope */ - float *tcx_aldo_window_1_FB_trunc_flt; /* ALDO window truncated long slope */ -#else PWord16 tcx_mdct_windowFB[L_MDCT_OVLP_MAX]; Word16 tcx_aldo_window_1_FB[L_FRAME_MAX * 9 / 32]; /* ALDO window long slope Q15 */ PWord16 tcx_aldo_window_2_FB[L_FRAME_MAX * 7 / 32]; /* ALDO window short slope */ PWord16 tcx_aldo_window_1_FB_trunc[L_FRAME_MAX * 7 / 32]; /* ALDO window truncated long slope */ -#endif -#ifndef IVAS_FLOAT_FIXED - float tcx_mdct_window_halfFB_flt[L_MDCT_HALF_OVLP_MAX]; - float tcx_mdct_window_minimumFB_flt[L_MDCT_MIN_OVLP_MAX]; - float tcx_mdct_window_transFB_flt[L_MDCT_TRANS_OVLP_MAX]; /* transition window for ACELP->TCX */ -#else PWord16 tcx_mdct_window_halfFB[L_MDCT_HALF_OVLP_MAX]; PWord16 tcx_mdct_window_minimumFB[L_MDCT_MIN_OVLP_MAX]; PWord16 tcx_mdct_window_transFB[L_MDCT_TRANS_OVLP_MAX]; /* transition window for ACELP->TCX */ -#endif Word16 tcx5SizeFB; /* Size of the TCX5 spectrum in number of samples. Always 5ms. */ @@ -325,38 +276,21 @@ typedef struct TCX_config_structure STnsConfig const *pCurrentTnsConfig; /*Quantization*/ -#ifndef IVAS_FLOAT_FIXED - float sq_rounding_flt; /* set the sq deadzone (no deadzone=0.5f) */ -#else - Word16 sq_rounding; /* set the sq deadzone (no deadzone=0.5f) Q15 */ -#endif + Word16 sq_rounding; /* set the sq deadzone (no deadzone=0.5f) Q15 */ Word16 tcxRateLoopOpt; /*Bandwidth*/ -#ifndef IVAS_FLOAT_FIXED - float preemph_fac_flt; /* preemphasis factor */ - float bandwidth_flt; -#else - Word16 preemph_fac; /* preemphasis factor Q15 */ - Word16 bandwidth; /* Q15 */ -#endif + Word16 preemph_fac; /* preemphasis factor Q15 */ + Word16 bandwidth; /* Q15 */ /* Context HM - Residual Quantization*/ Word16 ctx_hm; /* Flag for enabling Context HM */ Word16 resq; /* Flag for enabling Residual Quantization */ Word16 coder_type; /* GC,VC,UC */ -#ifndef IVAS_FLOAT_FIXED - float na_scale_flt; -#else - Word16 na_scale; /* Q15 */ -#endif + Word16 na_scale; /* Q15 */ -#ifndef IVAS_FLOAT_FIXED - float SFM2_flt; -#else - Word32 SFM2; /* Q31 */ -#endif + Word32 SFM2; /* Q31 */ /* Psychoacoustic parameters for LPC in TCX */ PsychoacousticParameters psychParamsTCX10; @@ -373,12 +307,10 @@ typedef struct uint32_t value; Word32 bits_to_follow; } Tastat; -#ifdef IVAS_FLOAT_FIXED typedef struct { Word32 low, high, value; } TastatDec; -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------* * FD CNG common structure * @@ -403,12 +335,8 @@ typedef struct Word32 bitrateFrom; Word32 bitrateTo; -#ifndef IVAS_FLOAT_FIXED - float scale_flt; -#else - Word16 scale; /* EVS implementation Q14 */ - Word16 scale_ivas; /* IVAS implementation Q14 */ -#endif + Word16 scale; /* EVS implementation Q14 */ + Word16 scale_ivas; /* IVAS implementation Q14 */ } SCALE_SETUP; @@ -416,37 +344,6 @@ typedef struct { FD_CNG_SETUP FdCngSetup; -#ifndef IVAS_FLOAT_FIXED - float timeDomainBuffer_flt[L_FRAME16k]; - float fftBuffer_flt[FFTLEN]; - float olapBufferAna_flt[FFTLEN]; - float olapBufferSynth_flt[FFTLEN]; - float olapBufferSynth2_flt[FFTLEN]; - const float *olapWinAna_flt; - const float *olapWinSyn_flt; - const float *fftSineTab_flt; - float msM_win_flt; - float msM_subwin_flt; - float init_old_flt; - float msAlphaCor_flt[2]; /* Correction factor (smoothed) */ - float msSlope_flt[2]; - float msQeqInvAv_flt[2]; - float msPsdSum_flt[2]; - float msPeriodogSum_flt[2]; - float periodog_flt[PERIODOGLEN]; /* Periodogram */ - float cngNoiseLevel_flt[FFTCLDFBLEN]; /* Noise level applied for the CNG in each (sub)band */ - float psize_flt[NPART]; /* Partition sizes */ - float psize_inv_flt[NPART]; /* Inverse of partition sizes */ - float FFTscalingFactor_flt; /* Squared ratio between core signal analysis FFT and noise estimator FFT */ - float scalingFactor_flt; - float CLDFBpsize_inv_flt[NPARTCLDFB]; /* Inverse of CLDFB partition sizes */ - float sidNoiseEst_flt[NPART]; /* Transmitted noise level */ - float[NPART]; - float A_cng_flt[M + 1]; - float exc_cng_flt[L_FRAME16k]; - float likelihood_noisy_speech_flt; - float coherence_flt; /* inter-channel coherence of noise */ -#endif Word16 numSlots; /* Number of time slots in CLDFB matrix */ Word16 regularStopBand; /* Number of CLDFB bands to be considered */ @@ -662,14 +559,9 @@ struct TnsParameters /* Parameters for each TNS filter */ Word16 startLineFrequency; /* Starting lower frequency of the TNS filter [20..16000] */ Word16 nSubdivisions; /* Number of spectrum subdivisions in which the filter operates [1..8) */ -#ifndef IVAS_FLOAT_FIXED - float minPredictionGain_flt; /* Minimum prediction gain required to turn on the TNS filter */ - float minAvgSqrCoef_flt; /* Minimum average square of coefficients required to turn on the TNS filter */ - float minEnergyChange_flt; /* Minimum energy change required to turn on the TNS filter */ -#endif - Word16 minPredictionGain; /* Minimum prediction gain required to turn on the TNS filter. Exponent = PRED_GAIN_E */ - Word16 minAvgSqrCoef; /* Minimum average square of coefficients required to turn on the TNS filter. Exponent = 0 */ - Word16 minEnergyChange; /* Minimum energy change required to turn on the TNS filter. Exponent = 8 */ + Word16 minPredictionGain; /* Minimum prediction gain required to turn on the TNS filter. Exponent = PRED_GAIN_E */ + Word16 minAvgSqrCoef; /* Minimum average square of coefficients required to turn on the TNS filter. Exponent = 0 */ + Word16 minEnergyChange; /* Minimum energy change required to turn on the TNS filter. Exponent = 8 */ }; /**********************************************/ @@ -692,11 +584,7 @@ typedef struct Word32 bitrateFrom; Word32 bitrateTo; -#ifndef IVAS_FLOAT_FIXED - float scale_flt; -#else - Word16 scale; /* Q15 */ -#endif + Word16 scale; /* Q15 */ } SCALE_TCX_SETUP; @@ -728,39 +616,22 @@ typedef struct cldfb_filter_bank_struct Word16 ds; /* delay synthesis */ Word16 da; /* delay analysis */ CLDFB_PROTOTYPE prototype; -#ifndef IVAS_FLOAT_FIXED - const float *p_filter_flt; -#endif const Word16 *p_filter; /*!< Pointer to filter coefficients */ // Q15 Word16 p_filter_sf; // Q0 /* rotation vectors */ -#ifndef IVAS_FLOAT_FIXED - const float *rot_vec_ana_re; - const float *rot_vec_ana_im; - const float *rot_vec_syn_re; - const float *rot_vec_syn_im; -#else - const Word32 *rot_vec_syn_re_fx; // Q29 - const Word32 *rot_vec_syn_im_fx; // Q29 + const Word32 *rot_vec_syn_re_fx; // Q29 + const Word32 *rot_vec_syn_im_fx; // Q29 const Word32 *rot_vec_syn_delay_re_fx; // Q31 const Word32 *rot_vec_syn_delay_im_fx; // Q31 -#endif /* rotation vectors for delay */ -#ifndef IVAS_FLOAT_FIXED - const float *rot_vec_ana_delay_re; - const float *rot_vec_ana_delay_im; - const float *rot_vec_syn_delay_re; - const float *rot_vec_syn_delay_im; -#else - const Word32 *rot_vec_ana_re_fx; // Q29 - const Word32 *rot_vec_ana_im_fx; // Q29 + const Word32 *rot_vec_ana_re_fx; // Q29 + const Word32 *rot_vec_ana_im_fx; // Q29 const Word32 *rot_vec_ana_delay_re_fx; // Q31 const Word32 *rot_vec_ana_delay_im_fx; // Q31 -#endif // Fix variables Word16 *FilterStates; /*!< Pointer to buffer of filter states Q15-FilterStates_eg*/ Word16 FilterStates_e[CLDFB_NO_COL_MAX + 9]; /*!< Filter states time slot exponents */ @@ -778,35 +649,22 @@ typedef struct cldfb_filter_bank_struct /* memory helper states */ -#ifndef IVAS_FLOAT_FIXED - float *memory_flt; -#endif - Word16 *memory; // Qx -#ifdef IVAS_FLOAT_FIXED + Word16 *memory; // Qx Word32 *memory32; // Q_cldfb_state /*because cldfb_state_fx is word32 which is used to assign values*/ -#endif // IVAS_FLOAT_FIXED UWord16 memory_length; /* main filter state */ -#ifndef IVAS_FLOAT_FIXED - float *cldfb_state; -#else - Word32 *cldfb_state_fx; // Q_cldfb_state + Word32 *cldfb_state_fx; // Q_cldfb_state Word16 cldfb_state_length; Word16 cldfb_size; Word16 Q_cldfb_state; -#endif /* other parameters */ Word16 bandsToZero; /* bands not synthesized */ Word16 nab; /* number of active bands */ Word16 filtermode; -#ifndef IVAS_FLOAT_FIXED - float scale_flt; /* scaling of frequency domain */ -#else Word16 scale; /* scaling of frequency domain */ /* Q8 */ -#endif } CLDFB_FILTER_BANK, *HANDLE_CLDFB_FILTER_BANK; @@ -840,15 +698,8 @@ typedef enum *----------------------------------------------------------------------------------*/ typedef struct pfstat_structure { - Word16 on; /* On/off flag */ - Word16 reset; /* reset flag */ -#ifndef IVAS_FLOAT_FIXED - float mem_pf_in_flt[L_SUBFR]; /* Input memory */ - float mem_stp_flt[L_SUBFR]; /* 1/A(gamma1) memory */ - float mem_res2_flt[DECMEM_RES2]; /* A(gamma2) residual */ - float mem_zero_flt[M]; /* null memory to compute i.r. of A(gamma2)/A(gamma1) */ - float gain_prec_flt; /* for gain adjustment */ -#endif + Word16 on; /* On/off flag */ + Word16 reset; /* reset flag */ Word16 mem_pf_in[L_SUBFR]; /* Input memory Qqmem_pf_in */ Word16 mem_stp[L_SUBFR]; /* 1/A(gamma1) memory Qqmem_stp*/ Word16 mem_res2[DECMEM_RES2]; /* A(gamma2) residual Q_syn*/ @@ -887,17 +738,10 @@ typedef struct igf_grid_struct Word16 infoIsRefined; Word16 infoGranuleLen; Word16 infoTransFac; -#ifndef IVAS_FLOAT_FIXED - float whiteningThreshold_flt[2][IGF_MAX_TILES]; - float gFactor_flt; - float fFactor_flt; - float lFactor_flt; -#else - Word16 whiteningThreshold[2][IGF_MAX_TILES]; /* 2Q13 */ - Word16 gFactor; /* 1Q14 */ - Word16 fFactor; /* 1Q14 */ - Word16 lFactor; /* 1Q14 */ -#endif + Word16 whiteningThreshold[2][IGF_MAX_TILES]; /* 2Q13 */ + Word16 gFactor; /* 1Q14 */ + Word16 fFactor; /* 1Q14 */ + Word16 lFactor; /* 1Q14 */ } IGF_GRID, *H_IGF_GRID; diff --git a/lib_com/stat_noise_uv_mod.c b/lib_com/stat_noise_uv_mod.c index 2899052f3..825401325 100644 --- a/lib_com/stat_noise_uv_mod.c +++ b/lib_com/stat_noise_uv_mod.c @@ -39,202 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define TILT_COMP_LIM 0.75f - -/*---------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------*/ - -static float calc_tilt( const float *x, const int16_t len ); - -/*--------------------------------------------------------------------* - * stat_noise_uv_mod() - * - * Modifies excitation signal in stationary noise segments - *--------------------------------------------------------------------*/ - -void stat_noise_uv_mod( - const int16_t coder_type, /* i : coder type */ - float noisiness, /* i : noisiness parameter */ - const float *const lsp_old, /* i : old LSP vector at 4th sfr */ - const float *const lsp_new, /* i : LSP vector at 4th sfr */ - const float *const lsp_mid, /* i : LSP vector at 2nd sfr */ - float *Aq, /* o : A(z) quantized for the 4 subframes */ - float *exc2, /* o : excitation buffer */ - const int16_t bfi, /* i : bad frame indicator */ - float *ge_sm, /* i/o: smoothed excitation gain */ - int16_t *uv_count, /* i/o: unvoiced counter */ - int16_t *act_count, /* i/o: activation counter */ - float lspold_s[], /* i/o: old LSP */ - int16_t *noimix_seed, /* i/o: mixture seed */ - float *st_min_alpha, /* i/o: minimum alpha */ - float *exc_pe, /* i/o: memory of the preemphasis filter */ - const int32_t bitrate, /* i : core bitrate */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t i, k; - int16_t i_subfr; - float exctilt; - float vare, ge, randval; - float alpha, min_alpha; - float lspnew_s[M], oldlsp_mix[M], midlsp_mix[M], newlsp_mix[M]; - float beta; - float noimix_fac; - - alpha = 1.0f; - min_alpha = 0.5f; - - /*---------------------------------------------------------* - * Update minimum mixing factor alpha - *---------------------------------------------------------*/ - - /* Activate modifications for WB/SWB <= 9.6kbps for NB only at 9.6kbps */ - if ( coder_type == INACTIVE && ( bitrate == ACELP_9k60 || ( bitrate < ACELP_9k60 && bwidth > NB ) ) ) - { - if ( !bfi ) - { - min_alpha = max( noisiness / 31.0f * 0.5f + 0.5f, *st_min_alpha - 0.05f ); - *st_min_alpha = min_alpha; - } - else - { - min_alpha = *st_min_alpha; - } - } - - /*---------------------------------------------------------* - * Mix excitation signal with random noise - *---------------------------------------------------------*/ - - /* Activate modifications for WB/SWB <= 9.6kbps for NB only at 9.6kbps */ - if ( coder_type == INACTIVE && ( bitrate == ACELP_9k60 || ( bitrate < ACELP_9k60 && bwidth > NB ) ) ) - { - /* preemphasize the excitation signal with its tilt */ - if ( min_alpha < TILT_COMP_LIM ) - { - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - exctilt = calc_tilt( &exc2[i_subfr], L_SUBFR ); - exctilt = ( TILT_COMP_LIM - min_alpha ) / ( TILT_COMP_LIM - 0.5f ) * exctilt; - - preemph( &exc2[i_subfr], exctilt, L_SUBFR, exc_pe ); - } - } - - /* set the mixing factor alpha */ - ( *uv_count )++; - if ( *uv_count <= START_NG ) - { - *act_count = 3; - alpha = 1; - mvr2r( lsp_new, lspold_s, M ); - } - else - { - *act_count = 0; - if ( *uv_count > FULL_NG ) - { - *uv_count = FULL_NG; - } - - alpha = 1 + ( (float) *uv_count - START_NG ) / ( (float) FULL_NG - START_NG ) * ( min_alpha - 1.0f ); - } - - /* calculate lowpass-filtered excitation gain */ - vare = 0.01f; - for ( i = 0; i < L_FRAME; i++ ) - { - vare += exc2[i] * exc2[i]; - } - - ge = (float) sqrt( vare / (float) L_FRAME ); - if ( *uv_count == 1 ) - { - *ge_sm = ge; - } - else - { - *ge_sm = ISP_SMOOTHING_QUANT_A1 * *ge_sm + ( 1 - ISP_SMOOTHING_QUANT_A1 ) * ge; - } - - /* generate mixture of excitation and noise */ - beta = 2 * ( alpha - 0.5f ); - noimix_fac = ( beta + *ge_sm / ge * ( 1 - beta ) ) / (float) sqrt( alpha * alpha + ( 1 - alpha ) * ( 1 - alpha ) ); - - for ( i = 0; i < L_FRAME; i++ ) - { - randval = ge * (float) sqrt( 12.0f ) * ( (float) own_random( noimix_seed ) / 65536.0f ); - exc2[i] = noimix_fac * ( exc2[i] * alpha + randval * ( 1 - alpha ) ); - } - - /* generate low-pass filtered version of LSP coefficients */ - for ( k = 0; k < M; k++ ) - { - lspnew_s[k] = (float) ISP_SMOOTHING_QUANT_A1 * lspold_s[k] + (float) ( 1 - ISP_SMOOTHING_QUANT_A1 ) * lsp_new[k]; - } - - for ( i = 0; i < M; i++ ) - { - oldlsp_mix[i] = beta * lsp_old[i] + ( 1 - beta ) * lspold_s[i]; - midlsp_mix[i] = beta * lsp_mid[i] + ( 1 - beta ) * 0.5f * ( lspold_s[i] + lspnew_s[i] ); - newlsp_mix[i] = beta * lsp_new[i] + ( 1 - beta ) * lspnew_s[i]; - } - - /* redo the interpolation of LSP coefficients and recalculte A(z) */ - int_lsp4( L_FRAME, oldlsp_mix, midlsp_mix, newlsp_mix, Aq, M, 0 ); - - mvr2r( lspnew_s, lspold_s, M ); - } - else - { - /* active signal - reset counters */ - ( *act_count )++; - if ( *act_count > 3 ) - { - *act_count = 3; - *uv_count = 0; - } - } - - return; -} - -/*---------------------------------------------------------------------------* - * calc_tilt() - * - * Calculate spectral tilt by means of 1st-order LP analysis - *---------------------------------------------------------------------------*/ - -/*! r: estimated tilt */ -static float calc_tilt( - const float *x, /* i : Signal input */ - const int16_t len /* i : length */ -) -{ - int16_t i; - float r0, r1; - - r0 = 0; - r1 = 0; - - for ( i = 0; i < len - 1; i++ ) - { - r0 += x[i] * x[i]; - r1 += x[i] * x[i + 1]; - } - - if ( r0 == 0 ) - { - r0 = 0.005f; - } - - return r1 / r0; -} -#endif diff --git a/lib_com/swb_bwe_com.c b/lib_com/swb_bwe_com.c index f080b8965..d1de09bc7 100644 --- a/lib_com/swb_bwe_com.c +++ b/lib_com/swb_bwe_com.c @@ -41,1518 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * WB_BWE_gain_pred() - * - * predict WB frequency envelopes for 0b WB BWE - *-------------------------------------------------------------------*/ - -int16_t WB_BWE_gain_pred( - float *WB_fenv, /* o : WB frequency envelopes */ - const float *core_dec_freq, /* i : Frequency domain core decoded signal */ - const int16_t coder_type, /* i : coding type */ - const int16_t prev_coder_type, /* i : coding type of last frame */ - const float prev_WB_fenv, /* i : envelope for last frame */ - const float voice_factors[], /* i : voicing factors */ - const float pitch_buf[], /* i : pitch buffer */ - const int32_t last_core_brate, /* i : previous frame core bitrate */ - const float last_wb_bwe_ener, /* i : previous frame wb bwe signal energy */ - const int16_t last_extl, /* i : extl. layer for last frame */ - const float tilt ) -{ - float enerL, alfa = 1.0f; - int16_t n_freq, mode; - int16_t ener_var_flag = 0; - float voice_factor, pitch; - int16_t env_var_flag = 0; - - mode = NORMAL; - - enerL = EPSILON; - for ( n_freq = 128; n_freq < 192; n_freq++ ) - { - enerL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; - } - WB_fenv[0] = EPSILON; - for ( n_freq = 192; n_freq < 224; n_freq++ ) - { - WB_fenv[0] += core_dec_freq[n_freq] * core_dec_freq[n_freq]; - } - - WB_fenv[1] = EPSILON; - for ( n_freq = 224; n_freq < 256; n_freq++ ) - { - WB_fenv[1] += core_dec_freq[n_freq] * core_dec_freq[n_freq]; - } - - voice_factor = sum_f( voice_factors, 4 ); - pitch = sum_f( pitch_buf, 4 ) + EPSILON; - - if ( enerL < 16.0f * max( WB_fenv[0], WB_fenv[1] ) && pitch < 308 ) - { - ener_var_flag = 1; - } - - if ( WB_fenv[0] > 2.0f * WB_fenv[1] ) - { - alfa = max( 2.0f * WB_fenv[1] / WB_fenv[0], 0.1f ); - WB_fenv[0] *= alfa; - } - else if ( 2.0f * WB_fenv[0] < WB_fenv[1] && coder_type != UNVOICED ) - { - alfa = max( 2.0f * WB_fenv[0] / WB_fenv[1], 0.1f ); - WB_fenv[1] *= alfa; - } - - WB_fenv[0] = (float) sqrt( ( WB_fenv[0] + WB_fenv[1] ) / 64 ); - - if ( coder_type != AUDIO && coder_type != UNVOICED && ener_var_flag == 0 ) - { - WB_fenv[0] *= 1.5f; - } - - if ( coder_type != TRANSITION && coder_type != AUDIO && coder_type != UNVOICED && sqrt( enerL ) > 40.0f * WB_fenv[0] && alfa > 0.9f && - !( coder_type == prev_coder_type && WB_fenv[0] > prev_WB_fenv ) ) - { - WB_fenv[0] *= min( (float) ( 0.025f * sqrt( enerL ) / WB_fenv[0] ), 4.0f ); - - if ( WB_fenv[0] > prev_WB_fenv ) - { - WB_fenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv; - } - } - - alfa = min( 1.5f, max( 0.5f, 77.0f * voice_factor / pitch ) ); - if ( sqrt( enerL ) > 64.0f * alfa * WB_fenv[0] && 3.0f * WB_fenv[0] * WB_fenv[0] < sqrt( enerL ) && prev_coder_type != UNVOICED ) - { - env_var_flag = 1; - WB_fenv[0] *= min( (float) ( 0.015625f * sqrt( enerL ) / WB_fenv[0] ), 4.0f ); - - if ( WB_fenv[0] > prev_WB_fenv ) - { - WB_fenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv; - } - } - - if ( coder_type == UNVOICED || prev_coder_type == UNVOICED ) - { - WB_fenv[0] *= 0.5f; - } - - if ( coder_type != AUDIO ) - { - WB_fenv[0] /= max( 1.2f * voice_factor, 1.0f ); - WB_fenv[0] *= min( 2.0f, max( 0.125f, pitch / 400.0f ) ); - } - - if ( last_core_brate > ACELP_8k00 && WB_fenv[0] > last_wb_bwe_ener ) - { - WB_fenv[0] = 0.9f * last_wb_bwe_ener + 0.1f * WB_fenv[0]; - } - - if ( last_extl != WB_BWE && ( tilt < 8.f ) ) - { - WB_fenv[0] *= min( 0.5f, 16.0f * tilt ); - } - - if ( env_var_flag == 1 ) - { - WB_fenv[1] = 1.5f * WB_fenv[0]; - WB_fenv[0] *= 0.75f; - } - else - { - WB_fenv[1] = WB_fenv[0]; - } - - if ( coder_type == UNVOICED || prev_coder_type == UNVOICED ) - { - WB_fenv[1] *= 0.5f; - } - - return ( mode ); -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * calc_normal_length() - * - *-------------------------------------------------------------------*/ - -void calc_normal_length( - const int16_t core, /* i : core */ - const float *sp, /* i : input signal */ - const int16_t mode, /* i : input mode */ - const int16_t extl, /* i : extension layer */ - int16_t *L_swb_norm, /* o : normalize length */ - int16_t *prev_L_swb_norm /* i/o: last normalize length */ -) -{ - int16_t i, n_freq, n_band, THRES; - const float *pit; - float peak, mean, mag; - int16_t L_swb_norm_trans, L_swb_norm_norm, L_swb_norm_harm, L_swb_norm_cur; - int16_t N; - - if ( core == HQ_CORE || extl == SWB_BWE || extl == FB_BWE ) - { - THRES = 8; - } - else - { - THRES = 4; - } - - if ( core == HQ_CORE && ( mode == HQ_HARMONIC || mode == HQ_HVQ ) ) - { - N = 13; - } - else - { - N = 16; - } - - n_band = 0; - pit = sp; - for ( i = 0; i < N; i++ ) - { - peak = 0.0f; - mean = 0; - - for ( n_freq = 0; n_freq < 16; n_freq++ ) - { - mag = (float) fabs( *pit ); - if ( mag > peak ) - { - peak = mag; - } - mean += mag; - pit++; - } - - if ( ( 15 + THRES ) * peak > THRES * mean && peak > 10 ) - { - n_band += 1; - } - } - - if ( core == ACELP_CORE ) - { - L_swb_norm_trans = (int16_t) ( 4 + 0.25f * n_band ); - L_swb_norm_norm = (int16_t) ( 8 + 0.5f * n_band ); - L_swb_norm_harm = max( (int16_t) ( 32 + 2.0f * n_band ), 24 ); - - if ( mode == HARMONIC ) - { - L_swb_norm_cur = L_swb_norm_harm; - } - else if ( mode == NORMAL ) - { - L_swb_norm_cur = L_swb_norm_norm; - } - else - { - L_swb_norm_cur = L_swb_norm_trans; - } - - *L_swb_norm = (int16_t) ( 0.5f * L_swb_norm_cur + 0.5f * ( *prev_L_swb_norm ) ); - *prev_L_swb_norm = L_swb_norm_cur; - } - else - { - if ( mode == HQ_HARMONIC || mode == HQ_HVQ ) - { - L_swb_norm_cur = (int16_t) ( 32 + 2.5f * n_band ); - } - else - { - L_swb_norm_cur = (int16_t) ( 8 + 0.5f * n_band ); - } - - *L_swb_norm = (int16_t) ( 0.1f * L_swb_norm_cur + 0.9f * ( *prev_L_swb_norm ) + 0.5f ); - *prev_L_swb_norm = L_swb_norm_cur; - } - - return; -} -/*-------------------------------------------------------------------* - * calc_tilt_bwe() - * - * calculate tilt parameter - *-------------------------------------------------------------------*/ - -void calc_tilt_bwe( - const float *sp, /* i : input signal */ - float *tilt, /* o : signal tilt */ - const int16_t N /* i : signal length */ -) -{ - int16_t i; - float r0, r1; - - r0 = EPSILON; - for ( i = 0; i < N; i++ ) - { - r0 += sp[i] * sp[i]; - } - - r1 = (float) fabs( sp[1] - sp[0] ); - for ( i = 2; i < N; i++ ) - { - if ( ( sp[i] - sp[i - 1] ) * ( sp[i - 1] - sp[i - 2] ) < 0 ) - { - r1 += (float) fabs( sp[i] - sp[i - 1] ); - } - } - - *tilt = (float) ( r1 / sqrt( r0 ) ); - - return; -} - - -/*-------------------------------------------------------------------* - * calc_norm_envelop() - * - * calculate normalized parameter - *-------------------------------------------------------------------*/ - -void calc_norm_envelop( - const float SWB_signal[], /* i : SWB spectrum */ - float *envelope, /* o : normalized envelope */ - const int16_t L_swb_norm, /* i : length of envelope */ - const int16_t SWB_flength, /* i : Length of input/output */ - const int16_t st_offset /* i : offset */ -) -{ - int16_t i, lookback, env_index, n_freq, n_lag_now, n_lag; - - lookback = L_swb_norm / 2; - env_index = swb_bwe_subband[0] + st_offset; - n_lag_now = L_swb_norm; - for ( n_freq = swb_bwe_trans_subband[0] + st_offset - lookback; n_freq < SWB_flength + st_offset - L_swb_norm; n_freq++ ) - { - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); - } - env_index++; - } - - for ( n_freq = SWB_flength + st_offset - L_swb_norm, i = 0; n_freq < SWB_flength + st_offset - lookback; n_freq++, i++ ) - { - n_lag_now = L_swb_norm - i; - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_freq + n_lag] ); - } - env_index++; - } - - return; -} - - -/*-------------------------------------------------------------------* - * calc_norm_envelop_lf() - * - * calc_envelope of low frequency spectrum - *-------------------------------------------------------------------*/ -static void calc_norm_envelop_lf( - const float SWB_signal[], /* i : SWB spectrum */ - float *envelope, /* o : normalized envelope */ - int16_t *L_swb_norm, /* i/o: length of envelope */ - const int16_t HQ_mode, /* i : HQ mode */ - const int16_t hq_generic_offset, /* i : frequency offset for representing hq swb bwe */ - int16_t *sfreq, /* i : starting frequency index */ - int16_t *efreq ) /* i : ending frequency index */ -{ - int16_t lookback, env_index, n_freq, n_lag_now, n_lag; - - *sfreq = 2; - if ( hq_generic_offset == HQ_GENERIC_FOFFSET_24K4 ) - { - *efreq = 146; - if ( HQ_mode == HQ_GEN_FB ) - { - *efreq = 306; - } - if ( ( 328 - *efreq ) * 2 + 1 < *L_swb_norm ) - { - *L_swb_norm = ( 328 - *efreq ) * 2 + 1; - } - } - else - { - *efreq = 130; - if ( HQ_mode == HQ_GEN_FB ) - { - *efreq = 290; - } - if ( ( 400 - *efreq ) * 2 + 1 < *L_swb_norm ) - { - *L_swb_norm = ( 400 - *efreq ) * 2 + 1; - } - } - - lookback = *L_swb_norm / 2; - env_index = 0; - n_lag_now = *L_swb_norm; - for ( n_freq = 0; n_freq < lookback; n_freq++ ) - { - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < lookback + n_freq; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_lag] ); - } - env_index++; - } - for ( ; n_freq < *efreq; n_freq++ ) - { - /* Apply MA filter */ - envelope[env_index] = EPSILON; - for ( n_lag = 0; n_lag < n_lag_now; n_lag++ ) - { - envelope[env_index] += (float) fabs( SWB_signal[n_freq - lookback + n_lag] ); - } - env_index++; - } - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * WB_BWE_decoding() - * - * WB BWE decoder - *-------------------------------------------------------------------*/ - -void WB_BWE_decoding( - const float *core_dec_freq, /* i : Frequency domain core decoded signal */ - float *WB_fenv, /* i : WB frequency envelopes */ - float *WB_signal, /* o : WB signal in MDCT domain */ - const int16_t WB_flength, /* i : Length of input/output */ - const int16_t mode, /* i : classification for WB signal */ - const int16_t last_extl, /* i : extl. layer for last frame */ - float *prev_Energy, /* i/o: energy for last frame */ - float *prev_WB_fenv, /* i/o: envelope for last frame */ - int16_t *prev_L_wb_norm, /* i/o: length for last frame wb norm */ - const int16_t extl, /* i : extension layer */ - const int16_t coder_type, /* i : coding type */ - const int32_t total_brate, /* i : core layer bitrate */ - int16_t *Seed, /* i/o: random generator seed */ - int16_t *prev_flag, /* i/o: attenu flag of last frame */ - int16_t prev_coder_type /* i : coding type of last frame */ -) -{ - int16_t n_freq, n_band; - int16_t i, L; - float envelope[L_FRAME16k]; - float energy, wfenv[2], EnergyL; - float *pit1; - int16_t L_wb_norm; - float alfa, beta; - int16_t flag = 0; - int16_t core_type = 1; - int16_t signum[L_FRAME16k]; - float inv_L_wb_norm, weight; - - calc_normal_length( ACELP_CORE, core_dec_freq, mode, extl, &L_wb_norm, prev_L_wb_norm ); - - set_f( WB_signal, 0, L_FRAME16k ); - - /* copy excitation */ - if ( coder_type != AUDIO && total_brate <= ACELP_8k00 ) - { - core_type = 0; - } - - if ( core_type == 0 ) - { - mvr2r( &core_dec_freq[160], &WB_signal[240], 80 ); - } - else - { - mvr2r( &core_dec_freq[80], &WB_signal[240], 80 ); - } - - /* calculate envelope */ - calc_norm_envelop( WB_signal, envelope, L_wb_norm, WB_flength, 0 ); - - if ( coder_type != UNVOICED && total_brate <= ACELP_8k00 ) - { - inv_L_wb_norm = 1.0f / L_wb_norm; - weight = ( mode != HARMONIC ) ? max( min( 3.0f * inv_L_wb_norm, 0.5f ), 0.25f ) : 0.25f; - for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) - { - signum[n_freq] = 1; - if ( WB_signal[n_freq] < 0 ) - { - signum[n_freq] = -1; - WB_signal[n_freq] *= signum[n_freq]; - } - - WB_signal[n_freq] = WB_signal[n_freq] - 0.45f * envelope[n_freq] * inv_L_wb_norm; - if ( WB_signal[n_freq] > 0 ) - { - WB_signal[n_freq] *= ( 0.55f - weight ); - } - WB_signal[n_freq] *= signum[n_freq]; - } - } - - /* Normalize with envelope */ - for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) - { - WB_signal[n_freq] /= envelope[n_freq]; - } - - if ( mode == HARMONIC ) - { - L = 4; - } - else - { - L = 1; - } - - if ( coder_type == UNVOICED ) - { - for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) - { - *Seed = (int16_t) ( 12345 * ( *Seed ) + 20101 ); - WB_signal[n_freq] = ( *Seed ) / PCM16_TO_FLT_FAC; - } - } - else - { - for ( n_band = 0; n_band < 4; n_band += L ) - { - energy = EPSILON; - for ( n_freq = swb_bwe_subband[n_band]; n_freq < swb_bwe_subband[n_band + L]; n_freq++ ) - { - energy += WB_signal[n_freq] * WB_signal[n_freq]; - } - - energy = (float) sqrt( ( swb_bwe_subband[n_band + L] - swb_bwe_subband[n_band] ) / energy ); - - for ( n_freq = swb_bwe_subband[n_band]; n_freq < swb_bwe_subband[n_band + L]; n_freq++ ) - { - WB_signal[n_freq] *= energy; - } - } - } - - - EnergyL = 0.0f; - if ( core_type == 1 ) - { - if ( prev_coder_type != AUDIO && total_brate <= ACELP_8k00 ) - { - for ( i = 160; i < 240; i++ ) - { - EnergyL += (float) fabs( core_dec_freq[i] ); - } - } - else - { - for ( i = 80; i < 240; i++ ) - { - EnergyL += (float) fabs( core_dec_freq[i] ); - } - } - - if ( total_brate <= ACELP_8k00 ) - { - alfa = 0.8f; - beta = 1.25f; - } - else - { - alfa = 0.5f; - beta = 2.0f; - } - } - else - { - if ( prev_coder_type == AUDIO ) - { - for ( i = 80; i < 240; i++ ) - { - EnergyL += (float) fabs( core_dec_freq[i] ); - } - } - else - { - for ( i = 160; i < 240; i++ ) - { - EnergyL += (float) fabs( core_dec_freq[i] ); - } - } - - if ( prev_coder_type == coder_type && WB_fenv[0] > prev_WB_fenv[0] ) - { - alfa = 0.4f; - beta = 2.5f; - } - else - { - alfa = 0.6f; - beta = 1.67f; - } - - if ( coder_type == GENERIC || ( EnergyL > 0.5f * ( *prev_Energy ) && EnergyL < 2.0f * ( *prev_Energy ) && *prev_flag == 1 ) ) - { - WB_fenv[0] *= 0.5f; - WB_fenv[1] *= 0.5f; - flag = 1; - } - } - if ( ( mode == HARMONIC && WB_fenv[1] < 0.25f * WB_fenv[0] ) || mode == NORMAL ) - { - if ( last_extl == WB_BWE && ( ( prev_coder_type == AUDIO && coder_type != AUDIO ) || ( prev_coder_type != AUDIO && coder_type == AUDIO ) ) && total_brate <= ACELP_8k00 ) - { - if ( WB_fenv[0] > prev_WB_fenv[0] ) - { - wfenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv[0]; - wfenv[1] = 0.3f * WB_fenv[1] + 0.7f * prev_WB_fenv[1]; - } - else - { - wfenv[0] = 0.5f * WB_fenv[0] + 0.5f * prev_WB_fenv[0]; - wfenv[1] = 0.4f * WB_fenv[1] + 0.4f * prev_WB_fenv[1]; - } - } - else if ( last_extl == WB_BWE && prev_WB_fenv[0] * EnergyL < WB_fenv[0] * ( *prev_Energy ) && WB_fenv[0] > prev_WB_fenv[0] && coder_type != AUDIO && coder_type != UNVOICED && total_brate <= ACELP_8k00 ) - { - wfenv[0] = 0.3f * WB_fenv[0] + 0.7f * prev_WB_fenv[0]; - wfenv[1] = 0.3f * WB_fenv[1] + 0.7f * prev_WB_fenv[1]; - } - else if ( last_extl == WB_BWE && EnergyL > alfa * ( *prev_Energy ) && EnergyL < beta * ( *prev_Energy ) && prev_coder_type != UNVOICED ) - { - wfenv[0] = 0.5f * ( WB_fenv[0] + prev_WB_fenv[0] ); - wfenv[1] = 0.5f * ( WB_fenv[1] + prev_WB_fenv[1] ); - } - else - { - wfenv[0] = WB_fenv[0]; - wfenv[1] = WB_fenv[1]; - } - for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[2]; n_freq++ ) - { - WB_signal[n_freq] *= wfenv[0]; - } - - for ( n_freq = swb_bwe_subband[2]; n_freq < swb_bwe_subband[4]; n_freq++ ) - { - WB_signal[n_freq] *= wfenv[1]; - } - - prev_WB_fenv[0] = wfenv[0]; - prev_WB_fenv[1] = wfenv[1]; - } - else - { - wfenv[0] = 0.5f * ( WB_fenv[0] + WB_fenv[1] ); - - if ( last_extl == WB_BWE && EnergyL > 0.5f * ( *prev_Energy ) && EnergyL < 2.0f * ( *prev_Energy ) ) - { - wfenv[0] = 0.25f * wfenv[0] + 0.375f * ( prev_WB_fenv[0] + prev_WB_fenv[1] ); - } - for ( n_freq = swb_bwe_subband[0]; n_freq < swb_bwe_subband[4]; n_freq++ ) - { - WB_signal[n_freq] *= wfenv[0]; - } - - prev_WB_fenv[0] = wfenv[0]; - prev_WB_fenv[1] = wfenv[0]; - } - - *prev_flag = flag; - *prev_Energy = EnergyL; - pit1 = &WB_signal[240]; - - for ( n_freq = 0; n_freq < 16; n_freq++ ) - { - *( pit1++ ) *= ( 0.2f + n_freq * 0.05f ); - } - - if ( core_type == 1 ) - { - pit1 = &WB_signal[280]; - for ( n_freq = 0; n_freq < 40; n_freq++ ) - { - *( pit1++ ) *= ( 1.0f - n_freq * 0.02f ); - } - } - else - { - pit1 = &WB_signal[300]; - for ( n_freq = 0; n_freq < 20; n_freq++ ) - { - *( pit1++ ) *= ( 1.0f - n_freq * 0.04f ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * SWB_BWE_decoding() - * - * SWB BWE decoder - *-------------------------------------------------------------------*/ - -void SWB_BWE_decoding( - const float *core_dec_freq, /* i : Frequency domain core decoded signal */ - float *SWB_fenv, /* i/o: SWB frequency envelopes */ - float *SWB_signal, /* o : SWB signal in MDCT domain */ - const int16_t SWB_flength, /* i : Length of input/output */ - const int16_t mode, /* i : classification for SWB signal */ - int16_t *frica_flag, /* o : fricative signal flag */ - float *prev_Energy, /* i/o: energy for last frame */ - float *prev_SWB_fenv, /* i/o: envelope for last frame */ - int16_t *prev_L_swb_norm, /* i/o: length for last frame wb norm */ - const float tilt_nb, /* i : tilt of synthesis wb signal */ - int16_t *Seed, /* i/o: random generator seed */ - const int16_t st_offset, /* i : offset value due to different core */ - float *prev_weight, /* i/o: excitation weight value of last frame */ - const int16_t extl, /* i : extension layer */ - const int16_t last_extl /* i : extension layer of last frame */ -) -{ - int16_t n_freq, n_band, L, L_swb_norm; - float *pit1; - float envelope[L_FRAME32k]; - float fenvL, EnergyL, Energy, energy, weight, wfenv, factor; - float mean, factor1, tmp1, tmp2, tmp3, tmp4, tmp_ener; - int16_t signum[L_FRAME32k]; - float inv_L_swb_norm; - - fenvL = EPSILON; - EnergyL = EPSILON; - for ( n_freq = 224 + st_offset; n_freq < swb_bwe_trans_subband[0] + st_offset; n_freq++ ) - { - fenvL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; - } - - for ( n_freq = 16; n_freq < L_FRAME; n_freq++ ) - { - EnergyL += core_dec_freq[n_freq] * core_dec_freq[n_freq]; - } - fenvL = (float) sqrt( fenvL / 16 ); - EnergyL = (float) sqrt( EnergyL / 240 ); - if ( fenvL > 8.0f * SWB_fenv[0] ) - { - fenvL = SWB_fenv[0]; - } - calc_normal_length( ACELP_CORE, core_dec_freq, mode, extl, &L_swb_norm, prev_L_swb_norm ); - - if ( mode == TRANSIENT ) - { - Energy = 0.0f; - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - Energy += SWB_fenv[n_band] * SWB_fenv[n_band]; - } - Energy /= SWB_FENV_TRANS; - - /* Reconstruct excitation from LF signal */ - mvr2r( &core_dec_freq[112], &SWB_signal[240 + st_offset], 128 ); - mvr2r( &core_dec_freq[112], &SWB_signal[368 + st_offset], 128 ); - mvr2r( &core_dec_freq[176], &SWB_signal[496 + st_offset], 64 ); - - /* calculate envelope */ - calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); - - /* Normalize with envelope */ - for ( n_freq = swb_bwe_trans_subband[0] + st_offset; n_freq < swb_bwe_trans_subband[SWB_FENV_TRANS] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] /= envelope[n_freq]; - } - - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - energy = EPSILON; - for ( n_freq = swb_bwe_trans_subband[n_band] + st_offset; n_freq < swb_bwe_trans_subband[n_band + 1] + st_offset; n_freq++ ) - { - energy += SWB_signal[n_freq] * SWB_signal[n_freq]; - } - - tmp_ener = (float) ( sqrt( swb_bwe_trans_subband_width[n_band] / energy ) * SWB_fenv[n_band] ); - - for ( n_freq = swb_bwe_trans_subband[n_band] + st_offset; n_freq < swb_bwe_trans_subband[n_band + 1] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= tmp_ener; - } - } - - for ( n_band = 0; n_band < 8; n_band++ ) - { - prev_SWB_fenv[n_band] = SWB_fenv[n_band / 4] * SWB_fenv[n_band / 4]; - } - - for ( n_band = 0; n_band < 6; n_band++ ) - { - prev_SWB_fenv[8 + n_band] = SWB_fenv[2 + n_band / 3] * SWB_fenv[2 + n_band / 3]; - } - - *prev_weight = 0.5f; - } - else - { - Energy = EPSILON; - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - Energy += SWB_fenv[n_band]; - } - Energy /= SWB_FENV; - if ( last_extl != SWB_BWE && last_extl != FB_BWE ) - { - if ( 16.0f * Energy < EnergyL && extl == FB_BWE ) - { - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - SWB_fenv[n_band] *= 0.2f; - } - fenvL *= 0.2f; - } - mvr2r( SWB_fenv, prev_SWB_fenv, SWB_FENV ); - } - if ( mode == HARMONIC ) - { - mvr2r( core_dec_freq, &SWB_signal[240 + st_offset], 240 ); - mvr2r( &core_dec_freq[128], &SWB_signal[480 + st_offset], 80 ); - - /* calculate envelope */ - calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); - } - else - { - if ( mode == NOISE || ( ( Energy > EnergyL || ( tilt_nb > 7 && Energy > 0.5f * EnergyL ) || tilt_nb > 12 ) && Energy > 75 && fenvL > 25 ) ) - { - for ( n_freq = swb_bwe_subband[0] + st_offset; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) - { - *Seed = (int16_t) ( 12345 * ( *Seed ) + 20101 ); - SWB_signal[n_freq] = ( *Seed ) / PCM16_TO_FLT_FAC; - } - if ( mode != NOISE ) - { - *frica_flag = 1; - } - } - else - { - /* modify SHB frequency envelopes when SHB spectrum is unflat */ - for ( n_band = 0; n_band < 13; n_band++ ) - { - if ( SWB_fenv[n_band] * 0.9f > SWB_fenv[n_band + 1] ) - { - SWB_fenv[n_band + 1] *= ( 0.8f + 0.015f * n_band ); - } - else if ( SWB_fenv[n_band + 1] * 0.9f > SWB_fenv[n_band] ) - { - SWB_fenv[n_band] *= ( 0.8f + 0.015f * n_band ); - } - } - - mvr2r( &core_dec_freq[112], &SWB_signal[240 + st_offset], 128 ); - mvr2r( &core_dec_freq[112], &SWB_signal[368 + st_offset], 128 ); - mvr2r( &core_dec_freq[176], &SWB_signal[496 + st_offset], 64 ); - - tmp1 = (float) ( fabs( SWB_signal[368 + st_offset] ) + fabs( SWB_signal[369 + st_offset] ) ) + EPSILON; - tmp2 = (float) ( fabs( SWB_signal[365 + st_offset] ) + fabs( SWB_signal[366 + st_offset] ) ) + EPSILON; - pit1 = &SWB_signal[368 + st_offset]; - - tmp3 = tmp2 / tmp1; - if ( tmp3 < 0.3 ) - { - tmp3 = 0.3f; - } - - while ( tmp3 < 1 ) - { - *pit1++ *= tmp3; - tmp3 += 0.1f; - } - - pit1 = &SWB_signal[367 + st_offset]; - tmp3 = tmp1 / tmp2; - - if ( tmp3 > 5 ) - { - tmp3 = 5; - while ( tmp3 > 1 ) - { - *pit1-- *= tmp3; - tmp3 -= 0.5f; - } - } - - tmp1 = (float) ( fabs( SWB_signal[496 + st_offset] ) + fabs( SWB_signal[497 + st_offset] ) ) + EPSILON; - tmp2 = (float) ( fabs( SWB_signal[492 + st_offset] ) + fabs( SWB_signal[493 + st_offset] ) + fabs( SWB_signal[494 + st_offset] ) + fabs( SWB_signal[495 + st_offset] ) ) + EPSILON; - pit1 = &SWB_signal[496 + st_offset]; - - tmp3 = tmp2 / tmp1; - if ( tmp3 < 0.3 ) - { - tmp3 = 0.3f; - } - - while ( tmp3 < 1 ) - { - *pit1++ *= tmp3; - tmp3 += 0.1f; - } - - pit1 = &SWB_signal[495 + st_offset]; - - tmp3 = tmp1 / tmp2; - tmp3 = 0.5f * tmp3; - tmp4 = 0.05f * tmp3; - - while ( tmp3 > 1 ) - { - *pit1-- *= tmp3; - tmp3 -= tmp4; - } - - /* calculate envelope */ - calc_norm_envelop( SWB_signal, envelope, L_swb_norm, SWB_flength, st_offset ); - } - } - - /* Normalize with envelope */ - if ( *frica_flag == 0 && mode != NOISE ) - { - L = swb_bwe_subband[0] + st_offset; - inv_L_swb_norm = 1.0f / L_swb_norm; - weight = ( mode != HARMONIC ) ? max( min( 3.0f * inv_L_swb_norm, 0.5f ), 0.2f ) : 0.2f; - weight = 0.4f * weight + 0.6f * ( *prev_weight ); - for ( n_freq = L; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) - { - signum[n_freq] = 1; - if ( SWB_signal[n_freq] < 0 ) - { - signum[n_freq] = -1; - SWB_signal[n_freq] *= signum[n_freq]; - } - - SWB_signal[n_freq] = SWB_signal[n_freq] - envelope[n_freq] * inv_L_swb_norm; - if ( SWB_signal[n_freq] > 0 ) - { - SWB_signal[n_freq] *= ( 1.2f - weight ); - } - SWB_signal[n_freq] *= signum[n_freq]; - } - - for ( n_freq = L; n_freq < swb_bwe_subband[SWB_FENV] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] /= envelope[n_freq]; - } - - *prev_weight = weight; - } - else - { - *prev_weight = max( min( 3.0f / L_swb_norm, 0.5f ), 0.2f ); - } - - if ( mode == HARMONIC ) - { - pit1 = &SWB_signal[swb_bwe_subband[0] + st_offset]; - for ( n_band = 0; n_band < 19; n_band++ ) - { - mean = 0; - for ( n_freq = 0; n_freq < 16; n_freq++ ) - { - mean += (float) fabs( *pit1 ); - pit1++; - } - mean /= 16; - pit1 -= 16; - for ( n_freq = 0; n_freq < 16; n_freq++ ) - { - if ( fabs( *pit1 ) < mean ) - { - *pit1 *= 0.2f; - } - pit1++; - } - } - } - - if ( mode == HARMONIC ) - { - L = 2; - } - else - { - L = 1; - } - - for ( n_band = 0; n_band < SWB_FENV; n_band += L ) - { - energy = EPSILON; - for ( n_freq = swb_bwe_subband[n_band] + st_offset; n_freq < swb_bwe_subband[n_band + L] + st_offset; n_freq++ ) - { - energy += SWB_signal[n_freq] * SWB_signal[n_freq]; - } - - tmp_ener = (float) sqrt( ( swb_bwe_subband[n_band + L] - swb_bwe_subband[n_band] ) / energy ); - - for ( n_freq = swb_bwe_subband[n_band] + st_offset; n_freq < swb_bwe_subband[n_band + L] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= tmp_ener; - } - } - - if ( *prev_Energy > 1.25f * Energy && Energy > 0 ) - { - weight = 0.5f * Energy / ( *prev_Energy ); - } - else - { - weight = 0.5f; - } - - wfenv = weight * prev_SWB_fenv[0] + ( 1 - weight ) * SWB_fenv[0]; - factor = fenvL; - factor1 = ( wfenv - fenvL ) * 0.125f; - for ( n_freq = swb_bwe_subband[0] + st_offset; n_freq < swb_bwe_subband[0] + 8 + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= factor; - factor += factor1; - } - - for ( n_band = 0; n_band < 12; n_band++ ) - { - wfenv = weight * prev_SWB_fenv[n_band + 1] + ( 1 - weight ) * SWB_fenv[n_band + 1]; - factor = SWB_fenv[n_band]; - factor1 = ( wfenv - SWB_fenv[n_band] ) * smooth_factor[n_band]; - for ( ; n_freq < swb_bwe_sm_subband[n_band + 1] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= factor; - factor += factor1; - } - } - - wfenv = weight * prev_SWB_fenv[13] + ( 1 - weight ) * SWB_fenv[13]; - factor = SWB_fenv[12]; - factor1 = ( wfenv - SWB_fenv[12] ) * smooth_factor[12]; - for ( ; n_freq < swb_bwe_sm_subband[13] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= factor; - factor += factor1; - } - - for ( n_band = 13; n_band < SWB_FENV; n_band++ ) - { - wfenv = weight * prev_SWB_fenv[n_band] + ( 1 - weight ) * SWB_fenv[n_band]; - for ( ; n_freq < swb_bwe_subband[n_band + 1] + st_offset; n_freq++ ) - { - SWB_signal[n_freq] *= wfenv; - } - } - - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - prev_SWB_fenv[n_band] = SWB_fenv[n_band]; - } - } - - pit1 = &SWB_signal[240 + st_offset]; - for ( n_freq = 0; n_freq < 4; n_freq++ ) - { - *( pit1++ ) *= 0.5f; - } - *prev_Energy = Energy; - - return; -} - - -/*-------------------------------------------------------------------* - * time_envelop_shaping() - * - * time shaping of the SHB signal - *-------------------------------------------------------------------*/ - -void time_envelop_shaping( - float werr[], /* i/o: SHB synthesis */ - float SWB_tenv[], /* i/o: frequency envelope */ - const int16_t L /* i : frame length */ -) -{ - float *pit; - float Energy; - int16_t i, j; - float tmp_ener; - - pit = werr; - for ( i = 0; i < SWB_TENV; i++ ) - { - Energy = EPSILON; - for ( j = 0; j < L / 4; j++ ) - { - Energy += *pit * *pit; - pit++; - } - Energy = (float) sqrt( 4 * Energy / L ); - - if ( SWB_tenv[i] < 2 && Energy < SWB_tenv[i] ) - { - SWB_tenv[i] = Energy; - } - - pit -= L / 4; - tmp_ener = 1.0f / Energy; - for ( j = 0; j < L / 4; j++ ) - { - *pit *= SWB_tenv[i] * tmp_ener; - pit++; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * time_reduce_pre_echo() - * - * Pre-echo reduction. - *-------------------------------------------------------------------*/ - -void time_reduce_pre_echo( - const float *synth, /* i : ACELP core synthesis */ - float *error, /* o : SHB BWE synthesis */ - float prev_td_energy, /* o : last td energy */ - const int16_t L /* i : subframe length */ -) -{ - int16_t i, j, pos = 0; - float energy; - float energyL[4]; - float tmp_ener; - float *pit; - float tmpi; - - for ( i = 0; i < 4; i++ ) - { - energyL[i] = 0; - for ( j = 0; j < L; j++ ) - { - energyL[i] += synth[L * i + j] * synth[L * i + j]; - } - energyL[i] = (float) sqrt( energyL[i] / L ); - } - - for ( i = 0; i < 3; i++ ) - { - if ( energyL[i + 1] > 1.8f * energyL[i] && energyL[i + 1] > 50 ) - { - pos = i + 1; - break; - } - } - - if ( pos > 0 ) - { - if ( pos < 3 ) - { - pos++; - } - - energy = EPSILON; - j = L * pos; - for ( i = 0; i < j; i++ ) - { - energy += error[i] * error[i]; - } - energy = (float) sqrt( energy / j ); - - if ( prev_td_energy < 0.2f * energy ) - { - prev_td_energy = 0.2f * energy; - } - - tmp_ener = prev_td_energy / energy; - for ( i = 0; i < j; i++ ) - { - error[i] *= tmp_ener; - } - - energy = EPSILON; - for ( i = j; i < ( j + L ); i++ ) - { - energy += error[i] * error[i]; - } - energy = (float) sqrt( energy / L ); - - pit = &error[j]; - tmp_ener = prev_td_energy / energy; - for ( i = 0; i < L; i++ ) - { - tmpi = i / ( 1.0f * L ); - *pit++ *= ( ( 1.0f - tmpi ) * tmp_ener + tmpi ); - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hq_generic_hf_decoding() - * - *-------------------------------------------------------------------*/ -void hq_generic_hf_decoding( - const int16_t HQ_mode, /* i : HQ mode */ - float *coeff_out1, /* i/o: BWE input & temporary buffer */ - const float *hq_generic_fenv, /* i : SWB frequency envelopes */ - float *coeff_out, /* o : SWB signal in MDCT domain */ - const int16_t hq_generic_offset, /* i : frequency offset for representing hq swb bwe*/ - int16_t *prev_L_swb_norm, /* i/o: last normalize length */ - const int16_t hq_generic_exc_clas, /* i : bwe excitation class */ - const int16_t *R ) -{ - int16_t i, n_freq, n_band, L_swb_norm; - float fenvL, energy, wfenv, factor; - float envelope[L_FRAME16k]; - float *pit1; - float tmp1, tmp2, tmp3, tmp4; - float mean_vector[20]; - int16_t k; - int16_t nenv; - int16_t tenv; - float rn_weight0; - int16_t blen, nband_lf, sfidx, efidx; - int16_t bwe_seed; - int16_t signum[L_FRAME16k]; - - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - nenv = SWB_FENV; - } - else - { - nenv = SWB_FENV - 2; - } - - if ( HQ_mode == HQ_GEN_FB ) - { - tenv = nenv + DIM_FB; - } - else - { - tenv = nenv; - } - - fenvL = EPSILON; - for ( n_freq = HQ_GENERIC_ST_FREQ + hq_generic_offset; n_freq < swb_bwe_subband[0] + hq_generic_offset; n_freq++ ) - { - fenvL += coeff_out1[n_freq] * coeff_out1[n_freq]; - } - - fenvL = (float) sqrt( fenvL / 16 ); - - calc_normal_length( HQ_CORE, coeff_out1, HQ_GEN_SWB, -1, &L_swb_norm, prev_L_swb_norm ); - - /* calculate envelope */ - calc_norm_envelop_lf( coeff_out1, envelope, &L_swb_norm, HQ_mode, hq_generic_offset, &sfidx, &efidx ); - - blen = 16; - if ( hq_generic_exc_clas == HQ_GENERIC_EXC0 ) - { - rn_weight0 = 0.8f; - } - else if ( hq_generic_exc_clas == HQ_GENERIC_EXC1 ) - { - rn_weight0 = 0.05f; - } - else - { - rn_weight0 = 0.2f; - } - - nband_lf = ( efidx - sfidx ) / blen; - for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) - { - if ( coeff_out1[n_freq] < 0 ) - { - signum[n_freq] = -1; - coeff_out1[n_freq] *= signum[n_freq]; - } - else - { - signum[n_freq] = 1; - } - } - - /* applying whitening */ - for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) - { - coeff_out1[n_freq] = coeff_out1[n_freq] / envelope[n_freq]; - } - - /* mean vector generation for controlling dynamic range */ - for ( k = 0; k < nband_lf; ++k ) - { - energy = EPSILON; - for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) - { - energy += coeff_out1[i]; - } - mean_vector[k] = energy / blen; - } - - /* dynamic range control */ - for ( k = 0; k < nband_lf; ++k ) - { - for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) - { - coeff_out1[i] = coeff_out1[i] - ( coeff_out1[i] - mean_vector[k] ) * rn_weight0; - } - } - - if ( hq_generic_exc_clas == HQ_GENERIC_EXC0 ) - { - /* applying random sign */ - bwe_seed = R[0] * 8 + R[1] * 4 + R[2] * 2 + R[3]; - for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) - { - coeff_out1[n_freq] = coeff_out1[n_freq] * signum[n_freq] * ( own_random( &bwe_seed ) > 0 ? 1.0f : -1.0f ); - } - } - else - { - for ( n_freq = sfidx; n_freq < efidx; n_freq++ ) - { - coeff_out1[n_freq] = coeff_out1[n_freq] * signum[n_freq]; - } - } - - /* normalizing modified low frequency spectrum */ - for ( k = 0; k < nband_lf; ++k ) - { - energy = EPSILON; - for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) - { - energy += coeff_out1[i] * coeff_out1[i]; - } - energy = (float) sqrt( energy / blen ); - - for ( i = k * blen + sfidx; i < ( k + 1 ) * blen + sfidx; ++i ) - { - coeff_out1[i] /= energy; - } - } - mvr2r( coeff_out1 + HQ_GENERIC_OFFSET, &coeff_out[HQ_GENERIC_HIGH0 + hq_generic_offset], HQ_GENERIC_LEN0 ); - mvr2r( coeff_out1 + HQ_GENERIC_OFFSET, &coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset], HQ_GENERIC_LEN0 ); - - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - mvr2r( &coeff_out1[HQ_GENERIC_LOW0], &coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset], HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2 ); - } - - if ( HQ_mode == HQ_GEN_FB ) - { - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - mvr2r( coeff_out1 + HQ_GENERIC_LOW0 + HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2, &coeff_out[fb_bwe_subband_float[0]], 160 ); - } - else - { - mvr2r( coeff_out1 + HQ_GENERIC_OFFSET + HQ_GENERIC_LEN0, &coeff_out[fb_bwe_subband_float[0]], 160 ); - } - } - tmp1 = EPSILON; - tmp2 = EPSILON; - for ( i = 0; i < 5; ++i ) - { - tmp1 += (float) fabs( coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset + i] ); - tmp2 += (float) fabs( coeff_out[HQ_GENERIC_HIGH1 - 2 + hq_generic_offset - i] ); - } - - pit1 = &coeff_out[HQ_GENERIC_HIGH1 + hq_generic_offset]; - tmp3 = tmp2 / tmp1; - if ( tmp3 < 0.3f ) - { - tmp3 = 0.3f; - } - - while ( tmp3 < 1 ) - { - *pit1++ *= tmp3; - tmp3 += 0.1f; - } - - pit1 = &coeff_out[HQ_GENERIC_HIGH1 - 1 + hq_generic_offset]; - tmp3 = tmp1 / tmp2; - if ( tmp3 > 5 ) - { - tmp3 = 5; - while ( tmp3 > 1 ) - { - *pit1-- *= tmp3; - tmp3 -= 0.5f; - } - } - - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - tmp1 = (float) ( fabs( coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 + 1 + hq_generic_offset] ) ) + EPSILON; - tmp2 = (float) ( fabs( coeff_out[HQ_GENERIC_HIGH2 - 4 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 3 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 2 + hq_generic_offset] ) + fabs( coeff_out[HQ_GENERIC_HIGH2 - 1 + hq_generic_offset] ) ) + - EPSILON; - - pit1 = &coeff_out[HQ_GENERIC_HIGH2 + hq_generic_offset]; - tmp3 = tmp2 / tmp1; - if ( tmp3 < 0.3f ) - { - tmp3 = 0.3f; - } - - while ( tmp3 < 1 ) - { - *pit1++ *= tmp3; - tmp3 += 0.1f; - } - - pit1 = &coeff_out[HQ_GENERIC_HIGH2 - 1 + hq_generic_offset]; - tmp3 = tmp1 / tmp2; - tmp3 = 0.5f * tmp3; - tmp4 = 0.05f * tmp3; - while ( tmp3 > 1 ) - { - *pit1-- *= tmp3; - tmp3 -= tmp4; - } - } - - wfenv = hq_generic_fenv[0]; - for ( n_freq = swb_bwe_subband[0] + hq_generic_offset, i = 0; n_freq < swb_bwe_subband[0] + hq_generic_offset + 8; n_freq++, i++ ) - { - factor = i * 0.125f; - coeff_out[n_freq] *= ( ( 1 - factor ) * fenvL + factor * wfenv ); - } - - for ( n_band = 0; n_band < nenv - 2; n_band++ ) - { - wfenv = hq_generic_fenv[n_band + 1]; - for ( i = 0; n_freq < swb_bwe_sm_subband[n_band + 1] + hq_generic_offset; n_freq++, i++ ) - { - factor = i * smooth_factor[n_band]; - coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[n_band] + factor * wfenv ); - } - } - - wfenv = hq_generic_fenv[nenv - 1]; - for ( i = 0; n_freq < swb_bwe_sm_subband[nenv - 1] + hq_generic_offset; n_freq++, i++ ) - { - factor = i * smooth_factor[nenv - 2]; - - coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[nenv - 2] + factor * wfenv ); - } - - if ( HQ_mode == HQ_GEN_SWB ) - { - for ( n_band = nenv - 1; n_band < nenv; ++n_band ) - { - wfenv = hq_generic_fenv[n_band]; - for ( ; n_freq < swb_bwe_subband[n_band + 1] + hq_generic_offset; n_freq++ ) - { - coeff_out[n_freq] *= wfenv; - } - } - } - else - { - if ( hq_generic_fenv[nenv - 1] - hq_generic_fenv[nenv] > 15.f || hq_generic_fenv[nenv] < 5.f ) - { - wfenv = hq_generic_fenv[nenv - 1]; - for ( i = 0; n_freq < fb_bwe_subband_float[0]; n_freq++, i++ ) - { - coeff_out[n_freq] *= wfenv; - } - - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - wfenv = hq_generic_fenv[n_band + nenv]; - for ( i = 0; n_freq < fb_bwe_subband_float[n_band + 1]; n_freq++, i++ ) - { - coeff_out[n_freq] *= wfenv; - } - } - } - else - { - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - wfenv = hq_generic_fenv[n_band + nenv - 1]; - - for ( i = 0; n_freq < fb_bwe_sm_subband_float[n_band]; n_freq++, i++ ) - { - factor = i * fb_smooth_factor[n_band]; - coeff_out[n_freq] *= ( ( 1 - factor ) * hq_generic_fenv[n_band + nenv] + factor * wfenv ); - } - } - - wfenv = hq_generic_fenv[tenv - 1]; - - for ( ; n_freq < fb_bwe_subband_float[DIM_FB]; n_freq++ ) - { - coeff_out[n_freq] *= wfenv; - } - } - } - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * save_old_syn() - * - * Save and delay the ACELP core synthesis signal by - * DELAY_FD_BWE_ENC_xxkx to be used by SWB BWE - *-------------------------------------------------------------------*/ - -void save_old_syn( - const int16_t L_frame, /* i : frame length */ - const float syn[], /* i : ACELP synthesis */ - float old_syn[], /* o : old synthesis buffer */ - float old_syn_mem[], /* i/o: old synthesis buffer memory */ - const float preemph_fac, /* i : preemphasis factor */ - float *mem_deemph /* i/o: deemphasis filter memory */ -) -{ - int16_t tmps; - - if ( L_frame == L_FRAME ) - { - tmps = NS2SA( 12800, DELAY_FD_BWE_ENC_12k8_NS ); - } - else - { - tmps = NS2SA( 16000, DELAY_FD_BWE_ENC_16k_NS ); - } - - mvr2r( old_syn_mem, old_syn, tmps ); - mvr2r( syn, old_syn + tmps, L_frame - tmps ); - mvr2r( syn + L_frame - tmps, old_syn_mem, tmps ); - - deemph( old_syn, preemph_fac, L_frame, mem_deemph ); - - return; -} -#endif diff --git a/lib_com/swb_bwe_com_fx.c b/lib_com/swb_bwe_com_fx.c index b4f8f0ad9..dd0c8aa30 100644 --- a/lib_com/swb_bwe_com_fx.c +++ b/lib_com/swb_bwe_com_fx.c @@ -743,7 +743,6 @@ Word32 calc_tilt_bwe_fx( /* o : Tilt in Q24 return L_temp; } -#ifdef IVAS_FLOAT_FIXED Word16 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 */ const Word32 *sp, /* i : input signal */ const Word16 exp_sp, /* i : Exp of inp signal Q(15 - exp_sp) */ @@ -822,7 +821,6 @@ Word16 ivas_calc_tilt_bwe_fx( /* o : Tilt in Q24 BASOP_SATURATE_WARNING_ON_EVS return extract_h( L_shl_sat( L_temp, 16 ) ); } -#endif /*-------------------------------------------------------------------* * calc_norm_envelop() diff --git a/lib_com/swb_bwe_com_hr.c b/lib_com/swb_bwe_com_hr.c index 7286ffc4f..b204c8aa9 100644 --- a/lib_com/swb_bwe_com_hr.c +++ b/lib_com/swb_bwe_com_hr.c @@ -45,282 +45,3 @@ * * SWB BWE HR noise filling of zero subbands *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void swb_hr_nonzero_subband_noise_fill( - const float tilt_wb, /* i : tilt of wideband signal */ - float *t_audio, /* i/o: mdct spectrum */ - int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ - const int16_t N, /* i : length of subband */ - const int16_t Nsv /* i : number of subband */ -) -{ - int16_t i, j; - float *ptr; - float min_bwe, max_bwe, tmpF; - - if ( tilt_wb > 5.0f ) - { - for ( i = 0; i < Nsv; i++ ) - { - min_bwe = FLT_MAX; - max_bwe = FLT_MIN; - for ( j = 0; j < N; j++ ) - { - tmpF = (float) fabs( t_audio[i * N + j] ); - - if ( tmpF > 0 ) - { - min_bwe = min( tmpF, min_bwe ); - max_bwe = max( tmpF, max_bwe ); - } - } - - if ( max_bwe == min_bwe && min_bwe > 1.0f ) - { - min_bwe *= 0.5f; - } - - ptr = &t_audio[i * N]; - for ( j = 0; j < N; j++ ) - { - if ( *ptr == 0 ) - { - if ( own_random( bwe_highrate_seed ) > 0 ) - { - *ptr = 0.5f * min_bwe; - } - else - { - *ptr = -0.5f * min_bwe; - } - } - ptr++; - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * swb_hr_noise_fill() - * - * SWB BWE HR noise filling - *-------------------------------------------------------------------*/ - -void swb_hr_noise_fill( - const int16_t is_transient, /* i : transient flag */ - const int16_t spect_start, /* i : spectrum start point */ - const int16_t spect_end, /* i : spectrum end point */ - const float tilt_wb, /* i : tilt of wideband signal */ - const float pitch, /* i : pitch value */ - const int16_t nq[], /* i : AVQ nq index */ - int16_t Nsv, /* i : number of subband */ - int16_t *bwe_highrate_seed, /* i/o: seed of random noise */ - float *t_audio /* i/o: mdct spectrum */ -) -{ - int16_t i, j, k; - float alpha, beta; - int16_t pos_start, pos_end, incr; - - if ( is_transient ) - { - for ( i = 0; i < Nsv; i++ ) - { - if ( nq[i] == 0 ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio[i * WIDTH_BAND + j] = own_random( bwe_highrate_seed ) / 65536.0f; - } - } - } - } - else - { - Nsv = ( spect_end - spect_start ) / WIDTH_BAND; - alpha = 0.25f; - if ( tilt_wb > 5.0f ) - { - beta = 0.25f; - } - else - { - if ( 100 > 0.25f * pitch ) - { - beta = 0.25f; - } - else - { - beta = 100 / pitch; - } - } - - i = 0; - if ( nq[i] == 0 ) - { - i = 1; - while ( i < Nsv && nq[i] == 0 ) - { - i++; - } - - pos_start = i; - - - while ( i < Nsv && nq[i] != 0 ) - { - i++; - } - - pos_end = i - 1; - - if ( pos_end - pos_start > pos_start ) - { - pos_end = 2 * pos_start - 1; - } - - incr = pos_end; - - for ( j = pos_start - 1; j >= 0; j-- ) - { - for ( k = 0; k < WIDTH_BAND; k++ ) - { - t_audio[j * WIDTH_BAND + k] = alpha * t_audio[incr * WIDTH_BAND + k] + beta * own_random( bwe_highrate_seed ) / PCM16_TO_FLT_FAC; - } - - incr = ( incr < pos_start ) ? pos_end : incr - 1; - } - } - - while ( i < Nsv ) - { - if ( nq[i] == 0 ) - { - pos_start = i; - pos_end = i; - - for ( j = pos_start; j < Nsv; j++ ) - { - if ( nq[j] != 0 ) - { - i = j; - pos_end = j; - break; - } - } - - if ( pos_start == pos_end ) - { - i = Nsv; - pos_end = Nsv; - } - - incr = ( pos_start - 1 ); - - for ( j = pos_end - 1; j >= pos_start; j-- ) - { - for ( k = 0; k < WIDTH_BAND; k++ ) - { - t_audio[j * WIDTH_BAND + k] = alpha * t_audio[incr * WIDTH_BAND + k] + beta * own_random( bwe_highrate_seed ) / PCM16_TO_FLT_FAC; - } - incr = ( incr == 0 ) ? ( pos_start - 1 ) : incr - 1; - } - } - else - { - i++; - } - } - } - - swb_hr_nonzero_subband_noise_fill( tilt_wb, t_audio, bwe_highrate_seed, WIDTH_BAND, Nsv ); - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * td_postprocess() - * - * post processing in time domain for td/fd switching - *-------------------------------------------------------------------*/ - -/*! r: gain */ -float td_postprocess( - float hb_synth[], /* i/o: high-band synthesis */ - const int16_t input_frame, /* i : frame length */ - const int16_t last_extl /* i : last extension layer */ -) -{ - int16_t i; - int16_t pos, ind1, ind2; - float max_samp, gain, tmpF; - float alpha, beta, step; - - max_samp = (float) fabs( hb_synth[0] ); - pos = 0; - for ( i = 1; i < input_frame; i++ ) - { - if ( fabs( hb_synth[i] ) > max_samp ) - { - max_samp = (float) fabs( hb_synth[i] ); - pos = i; - } - } - - if ( pos < 160 ) - { - gain = sum2_f( hb_synth + input_frame - 80, 80 ) + EPSILON; - } - else - { - gain = sum2_f( hb_synth, 80 ) + EPSILON; - } - - gain = (float) sqrt( gain / 80 ); - - ind1 = max( 0, pos - 40 ); - ind2 = min( input_frame, pos + 40 ); - tmpF = sum2_f( hb_synth + ind1, ind2 - ind1 ) + EPSILON; - tmpF = (float) sqrt( tmpF / ( ind2 - ind1 ) ); - - gain = min( 1.0f, gain / tmpF ); - - if ( last_extl == SWB_BWE || last_extl == FB_BWE ) - { - for ( i = ind1; i < input_frame; i++ ) - { - hb_synth[i] *= gain; - } - } - else - { - for ( i = ind1; i < ind2; i++ ) - { - hb_synth[i] *= gain; - } - - if ( ind2 != input_frame ) - { - step = 0.0f; - alpha = ( gain > 0.5f ) ? 1.0f : 0.5f; - beta = ( alpha - gain ) / ( input_frame - ind2 ); - - for ( i = ind2; i < input_frame; i++ ) - { - hb_synth[i] *= ( gain + step ); - step += beta; - } - } - } - - return ( gain ); -} -#endif diff --git a/lib_com/swb_bwe_com_lr.c b/lib_com/swb_bwe_com_lr.c index 22d79f157..d1de09bc7 100644 --- a/lib_com/swb_bwe_com_lr.c +++ b/lib_com/swb_bwe_com_lr.c @@ -41,2072 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hf_parinitiz() - * - * - *-------------------------------------------------------------------*/ - -void hf_parinitiz( - const int32_t total_brate, - const int16_t hqswb_clas, - int16_t lowlength, - int16_t highlength, - int16_t wBands[], - const int16_t **subband_search_offset, - const int16_t **subband_offsets, - int16_t *nBands, - int16_t *nBands_search, - int16_t *swb_lowband, - int16_t *swb_highband ) -{ - *swb_lowband = lowlength; - *swb_highband = highlength; - - if ( hqswb_clas == HQ_HARMONIC ) - { - /* Mode dependent initializations (performed every frame in case mode-switching implemented) */ - *nBands = NB_SWB_SUBBANDS_HAR; - *nBands_search = NB_SWB_SUBBANDS_HAR_SEARCH_SB; - - if ( total_brate == HQ_13k20 ) - { - wBands[0] = SWB_SB_BW_LEN0_12KBPS_HAR; - wBands[1] = SWB_SB_BW_LEN1_12KBPS_HAR; - wBands[2] = SWB_SB_BW_LEN2_12KBPS_HAR; - wBands[3] = SWB_SB_BW_LEN3_12KBPS_HAR; - *subband_offsets = subband_offsets_sub5_13p2kbps_Har; - *subband_search_offset = subband_search_offsets_13p2kbps_Har; - } - else - { - wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; - wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; - wBands[2] = SWB_SB_BW_LEN2_16KBPS_HAR; - wBands[3] = SWB_SB_BW_LEN3_16KBPS_HAR; - *subband_offsets = subband_offsets_sub5_16p4kbps_Har; - *subband_search_offset = subband_search_offsets_16p4kbps_Har; - } - } - else - { - /* Mode-dependent initializations (performed every frame in case mode-switching implemented) */ - *nBands = NB_SWB_SUBBANDS; - *nBands_search = NB_SWB_SUBBANDS; - - if ( total_brate == HQ_13k20 ) - { - wBands[0] = SWB_SB_LEN0_12KBPS; - wBands[1] = SWB_SB_LEN1_12KBPS; - wBands[2] = SWB_SB_LEN2_12KBPS; - wBands[3] = SWB_SB_LEN3_12KBPS; - *subband_offsets = subband_offsets_12KBPS; - } - else - { - wBands[0] = SWB_SB_LEN0_16KBPS; - wBands[1] = SWB_SB_LEN1_16KBPS; - wBands[2] = SWB_SB_LEN2_16KBPS; - wBands[3] = SWB_SB_LEN3_16KBPS; - *subband_offsets = subband_offsets_16KBPS; - } - } - return; -} - -/*-------------------------------------------------------------------* - * GetPredictedSignal() - * - * Routine for calculating the predicted signal - *-------------------------------------------------------------------*/ -void GetPredictedSignal( - const float *predBuf, /* i : prediction buffer */ - float *outBuf, /* o : output buffer */ - const int16_t lag, /* i : prediction buffer offset */ - const int16_t fLen, /* i : length of loop (output) */ - const float gain /* i : gain to be applied */ -) -{ - int16_t i; - - predBuf += lag; - - for ( i = 0; i < fLen; i++ ) - { - *outBuf++ = *predBuf++ * gain; - } - - return; -} -/*-------------------------------------------------------------------* - * est_freq_har_decis() - * - * Harmonic frequency decision matrix - *-------------------------------------------------------------------*/ - -static void est_freq_har_decis( - int16_t *har_freq_est1, /* o : harmonic analysis 1*/ - int16_t *har_freq_est2, /* o : harmonic analysis 2*/ - int16_t sharp, /* i : pka-avg for group 1 */ - int16_t sharp1, /* i : pka-avg for group 2 */ - int16_t hfe_est_countk1, /* i : group pks count 1*/ - int16_t hfe_est_countk2, /* i : group pks count 2*/ - int16_t k, /* i : group count */ - int16_t k1, - int16_t k2, - int16_t *prev_frm_hfe2 /* i : harmonic estimation */ -) -{ - int16_t temp_hfe2 = 0; - - if ( k != 0 ) - { - *har_freq_est1 = (int16_t) sharp / k; - } - if ( k1 > 1 ) - { - *har_freq_est2 = (int16_t) sharp1 / k1; - } - else if ( ( k1 < 2 && ( k2 != 0 || k > 1 ) ) ) - { - *har_freq_est2 = *har_freq_est1; - } - else - { - if ( ( hfe_est_countk1 != 0 || hfe_est_countk2 != 0 ) && ( k1 == 0 && k2 == 0 ) ) - { - *har_freq_est2 = ( *har_freq_est1 ); - } - else - { - *har_freq_est2 = 2 * ( *har_freq_est1 ); - } - } - - /* Consider Estimation Error upto 200Hz */ - if ( *prev_frm_hfe2 != 0 && ( (int16_t) abs( *prev_frm_hfe2 - *har_freq_est2 ) < 10 || abs( *prev_frm_hfe2 - 2 * ( *har_freq_est2 ) ) < 10 ) ) - { - *har_freq_est2 = *prev_frm_hfe2; - } - else if ( *prev_frm_hfe2 != 0 && abs( *har_freq_est2 - 2 * ( *prev_frm_hfe2 ) ) < 10 ) - { - *har_freq_est2 = 2 * ( *prev_frm_hfe2 ); - } - else - { - temp_hfe2 = (int16_t) ( *prev_frm_hfe2 + *har_freq_est2 ) / 2; - - if ( abs( temp_hfe2 - *prev_frm_hfe2 ) < 2 ) - { - temp_hfe2 = *prev_frm_hfe2; - *har_freq_est2 = temp_hfe2; - } - } - if ( *har_freq_est2 < *har_freq_est1 && ( k > 1 && k1 < 2 ) ) - { - *har_freq_est2 = *har_freq_est1; - } - return; -} - -/*--------------------------------------------------------------------------* - * har_est() - * - * Harmonic Structure analysis using LF spectrum - *--------------------------------------------------------------------------*/ - -int16_t har_est( - float spectra[], /* i : coded spectrum */ - const int16_t N, /* i : length of the desired spectrum */ - int16_t *har_freq_est1, /* i/o: Estimation harmonics 1 */ - int16_t *har_freq_est2, /* o : Estimation harmonics 2 */ - int16_t *flag_dis, /* i/o: flag for BWE reconstruction */ - int16_t *prev_frm_hfe2, /* i/o: Estimated harmonic update */ - const int16_t subband_search_offset[], /* i : Subband Search range */ - const int16_t sbWidth[], /* i : Subband Search range */ - int16_t *prev_stab_hfe2 /* i/o: Estimated harmonic position */ -) -{ - float peak; - int16_t i, j, q, k, k1, k2; - float input_abs[L_FRAME32k], blk_peak[30]; - int16_t blk_end, blk_st; - int16_t peak_pos, blk_peak_pos[30], diff_peak_pos[30], sharp, sharp1; - int16_t min_har_pos; - int16_t blk_peak_pos_te[30]; - float blk_peak_te[30]; - int16_t temp; - int16_t hfe_est_countk, hfe_est_countk1, hfe_est_countk2; - int16_t r1, r2, r3; - int16_t start_pos; - float blk_peak_max; - int16_t blk_peak_pos_max; - int16_t nlags, ct_hfsb2, sum_diff = 0; - int16_t blk_peak_pos_hfsb2[30], diff_peak_pos_hfsb2[30]; - int16_t rem_hfe2, q_diffpos_hfe2 = 0, diff_posmax_hfe2, q_diffpos_prevhfe2; - int16_t blk_peak_max_idx, blk_peak_pos_max_diff, diff_peak_pos_te[30]; - - rem_hfe2 = 0; - q_diffpos_hfe2 = 0; - diff_posmax_hfe2 = 0; - q_diffpos_prevhfe2 = 0; - - set_s( blk_peak_pos_te, 0, 30 ); - set_s( diff_peak_pos, 0, 30 ); - - r1 = SWB_HAR_RAN1; - r2 = SWB_HAR_RAN2; - r3 = SWB_HAR_RAN3; - start_pos = r1; - - /* Copy the abs values of LF spectrum*/ - for ( i = start_pos; i < N; i++ ) - { - input_abs[i] = (float) fabs( spectra[i] ); - } - - blk_end = (int16_t) N / LR_BLK_LEN; - blk_st = (int16_t) start_pos / LR_BLK_LEN; - - if ( (float) N / (LR_BLK_LEN) -blk_end > 0.0f ) - { - blk_end++; - } - - /* initialization of over buffer for fractional point */ - for ( i = N; i < ( blk_end * LR_BLK_LEN ); i++ ) - { - input_abs[i] = 0.0f; - } - - q = start_pos; - - /* Block Processing, to detect the spectral peaks*/ - for ( i = blk_st; i < blk_end; i++ ) - { - peak = 0.0f; - peak_pos = 0; - - for ( j = 0; j < LR_BLK_LEN; j++, q++ ) - { - if ( input_abs[q] > peak ) - { - peak = input_abs[q]; - peak_pos = q; - } - - if ( i > blk_st && input_abs[q] != 0 && input_abs[q] == peak && ( peak_pos - blk_peak_pos[i - 1] ) < LR_HLF_PK_BLK_LEN ) - { - peak = input_abs[q]; - peak_pos = q; - } - } - - blk_peak[i] = peak; - blk_peak_pos[i] = peak_pos; - } - - for ( i = blk_st; i < blk_end; i++ ) - { - if ( i > blk_st ) - { - if ( blk_peak_pos[i] != 0 && blk_peak_pos[i - 1] != 0 ) - { - if ( ( blk_peak_pos[i] - blk_peak_pos[i - 1] ) < LR_LOWBAND_DIF_PK_LEN ) - { - if ( blk_peak[i] > blk_peak[i - 1] ) - { - blk_peak[i - 1] = 0.0f; - blk_peak_pos[i - 1] = 0; - } - else - { - blk_peak[i] = blk_peak[i - 1]; - blk_peak_pos[i] = blk_peak_pos[i - 1]; - blk_peak[i - 1] = 0.0f; - blk_peak_pos[i - 1] = 0; - } - } - } - } - } - - /* peak counts in each group */ - j = 0; - hfe_est_countk = 0; - hfe_est_countk1 = 0; - hfe_est_countk2 = 0; - for ( i = blk_st; i < blk_end; i++ ) - { - if ( blk_peak_pos[i] != 0 ) - { - blk_peak_pos_te[j] = blk_peak_pos[i]; - if ( blk_peak_pos[i] < r2 ) - { - hfe_est_countk++; - } - else if ( blk_peak_pos[i] < r3 ) - { - hfe_est_countk1++; - } - else - { - hfe_est_countk2++; - } - - blk_peak_te[j] = blk_peak[i]; - j++; - } - } - - min_har_pos = SWB_HAR_RAN1; - temp = 0; - blk_peak_max = blk_peak_te[0]; - blk_peak_pos_max = blk_peak_pos_te[0]; - blk_peak_max_idx = 0; - for ( i = 1; i < j; i++ ) - { - diff_peak_pos[i - 1] = blk_peak_pos_te[i] - blk_peak_pos_te[i - 1]; - if ( diff_peak_pos[i - 1] <= min_har_pos ) - { - min_har_pos = diff_peak_pos[i - 1]; - } - - if ( blk_peak_te[i - 1] > blk_peak_max ) - { - blk_peak_max = blk_peak_te[i - 1]; - blk_peak_pos_max = blk_peak_pos_te[i - 1]; - blk_peak_max_idx = i - 1; - } - - temp++; - } - blk_peak_pos_max_diff = diff_peak_pos[blk_peak_max_idx]; - - /* Decision for BWE reconstruction */ - if ( ( hfe_est_countk < 2 && hfe_est_countk1 < 2 && hfe_est_countk2 < 2 ) || min_har_pos >= SWB_HAR_RAN1 ) - { - *flag_dis = 0; - if ( ( hfe_est_countk == 1 && hfe_est_countk1 == 1 ) && ( hfe_est_countk2 == 1 || hfe_est_countk2 == 0 ) ) - { - *flag_dis = 1; - } - } - for ( i = 0; i < temp; i++ ) - { - if ( blk_peak_pos_max_diff + LR_LOWBAND_DIF_PK_LEN < diff_peak_pos[i] ) - { - diff_peak_pos[i] = 0; - } - } - mvs2s( diff_peak_pos, diff_peak_pos_te, temp ); - set_s( diff_peak_pos, -1, temp ); - j = 0; - for ( i = 0; i < temp; i++ ) - { - if ( diff_peak_pos_te[i] != 0 ) - { - diff_peak_pos[j] = diff_peak_pos_te[i]; - j++; - } - } - temp = j; - /* harmonic estimation analysis to perform BWE Reconstruction */ - if ( *flag_dis ) - { - sharp = 0; - k = 0; - k1 = 0; - sharp1 = 0; - k2 = 0; - - for ( i = 0, q = 1; i < temp; i++, q++ ) - { - if ( ( diff_peak_pos[i] <= ( min_har_pos + LR_LOWBAND_DIF_PK_LEN ) ) && diff_peak_pos[i] > 0 ) - { - sharp += diff_peak_pos[i]; - k++; - } - else if ( ( diff_peak_pos[i] <= ( min_har_pos + 2 * LR_LOWBAND_DIF_PK_LEN ) ) && diff_peak_pos[i] > 0 ) - { - sharp1 += diff_peak_pos[i]; - k1++; - } - else if ( diff_peak_pos[i] > 0 ) - { - k2++; - } - } - - est_freq_har_decis( har_freq_est1, har_freq_est2, sharp, sharp1, hfe_est_countk1, hfe_est_countk2, k, k1, k2, prev_frm_hfe2 ); - - blk_peak_pos_max = blk_peak_pos_te[temp - 1]; - - if ( ( *prev_stab_hfe2 ) > 0 && ( *prev_frm_hfe2 ) > 0 && *prev_stab_hfe2 < N ) - { - rem_hfe2 = *har_freq_est2 % ( *prev_frm_hfe2 ); - diff_posmax_hfe2 = (int16_t) abs( blk_peak_pos_max - *prev_stab_hfe2 ); - if ( rem_hfe2 == 0 ) - { - if ( diff_posmax_hfe2 < 9 || *har_freq_est2 == 0 ) - { - blk_peak_pos_max = *prev_stab_hfe2; - } - else - { - q_diffpos_hfe2 = diff_posmax_hfe2 / ( *har_freq_est2 ); - q_diffpos_prevhfe2 = diff_posmax_hfe2 / ( *prev_frm_hfe2 ); - if ( q_diffpos_hfe2 < 10 || q_diffpos_prevhfe2 < 10 ) - { - blk_peak_pos_max = *prev_stab_hfe2; - } - else - { - *prev_stab_hfe2 = blk_peak_pos_max; - } - } - } - else - { - *prev_stab_hfe2 = blk_peak_pos_max; - } - } - else - { - *prev_stab_hfe2 = blk_peak_pos_max; - } - - if ( *har_freq_est1 == 0 || *har_freq_est2 == 0 ) - { - *flag_dis = 0; - } - } - - if ( *flag_dis == 0 ) - { - if ( *prev_frm_hfe2 != 0 ) - { - *har_freq_est2 = *prev_frm_hfe2; - } - else - { - nlags = (int16_t) pow( 2, bits_lagIndices_mode0_Har[0] ); - ct_hfsb2 = 0; - for ( i = 0; i < j; i++ ) - { - if ( blk_peak_pos_te[i] >= ( subband_search_offset[0] - nlags / 2 ) && blk_peak_pos_te[i] < ( subband_search_offset[0] + sbWidth[0] + nlags / 2 ) ) - { - blk_peak_pos_hfsb2[ct_hfsb2] = blk_peak_pos_te[i]; - ct_hfsb2++; - } - } - - if ( ct_hfsb2 > 1 ) - { - for ( i = 1; i < ct_hfsb2; i++ ) - { - diff_peak_pos_hfsb2[i - 1] = blk_peak_pos_hfsb2[i] - blk_peak_pos_hfsb2[i - 1]; - sum_diff += diff_peak_pos_hfsb2[i - 1]; - } - *har_freq_est2 = sum_diff / ct_hfsb2; - } - else - { - *har_freq_est2 = min_har_pos; - } - } - } - - - return blk_peak_pos_max; -} - - -/*-------------------------------------------------------------------* - * genhf_noise() - * - * - *-------------------------------------------------------------------*/ - -void genhf_noise( - float noise_flr[], /* i : smoothed non tonal */ - float xSynth_har[], /* o : hf non tonal components */ - float *predBuf, /* i : smoothed tonal compone */ - int16_t bands, /* i : total number of subbands in a frame */ - int16_t harmonic_band, /* i : Number of LF harmonic frames */ - int16_t har_freq_est2, /* i : harmonic signal parameter */ - int16_t pos_max_hfe2, /* i : last pulse in core coder */ - int16_t *pul_res, /* o : pulse resolution */ - GainItem pk_sf[], /* o : representative region */ - const int16_t fLenLow, /* i : low frequency length */ - const int16_t fLenHigh, /* i : high frequency length */ - const int16_t sbWidth[], /* i : bandwidth for high bands */ - const int16_t lagIndices[], /* i : correlation indices for most representative */ - const int16_t subband_offsets[], /* i : band offsets for HF reconstruction */ - const int16_t subband_search_offset[] /* i : most representative regions offsets in LF */ -) -{ - int16_t k, j, ii, st_pos, dst_pos; - int16_t nlags[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; - float tmpbuf[L_FRAME32k]; - int16_t hfband_end[NB_SWB_SUBBANDS]; - int16_t rem_hfe, temp_last_peakpos, i, l, pos, res; - float hf_pulse_peaks[160], pulse_peak_sb[320]; - int16_t st_last_peakpos; - - set_f( tmpbuf, 0.0f, L_FRAME32k ); - for ( k = 0; k < 3; k++ ) - { - hfband_end[k] = fLenLow + subband_offsets[k + 1]; - } - hfband_end[3] = fLenLow + fLenHigh; - - rem_hfe = (int16_t) ( fLenLow - pos_max_hfe2 - 1 ) / har_freq_est2; - st_last_peakpos = pos_max_hfe2 + ( rem_hfe * har_freq_est2 ); - temp_last_peakpos = st_last_peakpos; - i = 0; - - for ( k = 0; k < 2; k++ ) - { - nlags[k] = (int16_t) pow( 2, bits_lagIndices_mode0_Har[k] ); - - l = 0; - while ( st_last_peakpos < ( fLenLow + subband_offsets[k] ) ) - { - st_last_peakpos += har_freq_est2; - } - st_last_peakpos -= har_freq_est2; - - if ( k == 0 ) - { - st_pos = subband_search_offset[k] - nlags[k] / 2 + lagIndices[k]; - - /*Copy the LF Smoothed Noise to the HF*/ - for ( j = 0; j < sbWidth[k]; j++ ) - { - xSynth_har[j] = noise_flr[st_pos + j]; - tmpbuf[j] = xSynth_har[j]; - if ( predBuf[st_pos + j] != 0.0f ) - { - hf_pulse_peaks[l] = predBuf[st_pos + j]; - l++; - } - } - } - else - { - st_pos = subband_search_offset[k] + nlags[k] / 2 - lagIndices[k]; - dst_pos = st_pos - sbWidth[k]; - ii = sbWidth[k - 1]; - /*Copy the LF Smoothed Noise floor to the HF*/ - for ( j = st_pos; j > ( dst_pos ) && ii < ( sbWidth[k] + sbWidth[k - 1] ); j-- ) - { - xSynth_har[ii] = noise_flr[j]; - tmpbuf[ii] = xSynth_har[ii]; - if ( predBuf[j] != 0.0f ) - { - hf_pulse_peaks[l] = predBuf[j]; - l++; - } - ii++; - } - } - pos = 0; - for ( j = 0; j < l; j++ ) - { - st_last_peakpos += har_freq_est2; - if ( st_last_peakpos < hfband_end[k] ) - { - pk_sf[k * 8 + pos].nmrValue = hf_pulse_peaks[j]; - pk_sf[k * 8 + pos].gainIndex = st_last_peakpos - fLenLow; - pul_res[k]++; - pulse_peak_sb[i] = hf_pulse_peaks[j]; - i++; - pos++; - } - } - st_last_peakpos = temp_last_peakpos; - } - res = i - 1; - l = 1; - ii = hfband_end[k - 1] - fLenLow - 1; - for ( ; k < ( bands - harmonic_band ); k++ ) - { - for ( j = hfband_end[k - 1] - fLenLow; j < ( hfband_end[k] - fLenLow ); j++ ) - { - xSynth_har[j] = tmpbuf[ii]; - tmpbuf[j] = xSynth_har[j]; - ii--; - } - pos = 0; - while ( st_last_peakpos < hfband_end[k - 1] ) - { - st_last_peakpos += har_freq_est2; - } - while ( st_last_peakpos < hfband_end[k] && pul_res[k] < pul_res[2 - l] && l <= 2 ) - { - pk_sf[k * 8 + pos].nmrValue = pulse_peak_sb[res]; - pk_sf[k * 8 + pos].gainIndex = st_last_peakpos - fLenLow; - pul_res[k]++; - res--; - pos++; - st_last_peakpos += har_freq_est2; - } - l++; - } - - return; -} - -/*-------------------------------------------------------------------* - * SmoothSpec() - * - * Smoothes specified samples using moving average method. The number - * of points in the average is given by 'span'. Note that current - * implementation does not accept 'span' to be smaller than 'fLen'. - *-------------------------------------------------------------------*/ - -static void SmoothSpec( - const float *inBuf, /* i : input */ - float *outBuf, /* o : output */ - const int16_t fLen, /* i : length */ - int16_t span /* i : averaging length */ -) -{ - int16_t i, span1, nItems; - float sum, ispan; - const float *oldPtr, *newPtr; - - /* not accepted */ - if ( span > fLen ) - { - mvr2r( inBuf, outBuf, fLen ); - return; - } - - /* span must be odd */ - if ( ( span & 0x1 ) == 0 ) - { - span--; - } - - span1 = span >> 1; - - /* first sample */ - sum = *inBuf; - *outBuf++ = sum; - - oldPtr = inBuf; - newPtr = inBuf + 2; - - /* handle start */ - inBuf++; - sum += *inBuf; - - for ( i = 1, nItems = 3; i < span1; i++, inBuf++ ) - { - sum += *newPtr++; - *outBuf++ = sum / nItems; - - sum += *newPtr++; - nItems += 2; - } - - ispan = 1.0f / span; - inBuf++; - i++; - sum += *newPtr++; - *outBuf++ = sum * ispan; - - /* moving average */ - for ( ; i < fLen - span1; i++, inBuf++ ) - { - sum += *newPtr++; - sum -= *oldPtr++; - *outBuf++ = sum * ispan; - } - - /* handle end */ - nItems = span - 2; - sum -= *oldPtr++; - - for ( ; i < fLen - 1; i++, inBuf++ ) - { - sum -= *oldPtr++; - *outBuf++ = sum / nItems; - nItems -= 2; - sum -= *oldPtr++; - } - - /* last sample */ - *outBuf = *inBuf; - - return; -} - -/*-------------------------------------------------------------------* - * SpectrumSmoothing() - * - * Smoothing of the low-frequency envelope - *-------------------------------------------------------------------*/ - -void SpectrumSmoothing( - float *inBuf, /* i : input */ - float *outBuf, /* o : output */ - const int16_t fLen, /* i : length */ - const float th_cut /* i : threshold of cut */ -) -{ - int16_t i, k; - float inBuf_pss[L_FRAME32k]; - float outBuf_pss[L_FRAME32k]; - float max_val[L_FRAME32k / L_SB]; - float max_val_norm; - float inBuf_abs; - int16_t j; - int16_t num_subband_smooth; - int16_t m, n; - int16_t cnt_zero_cont; - int16_t n_list[BANDS_MAX]; - int16_t reset_flag; - - num_subband_smooth = (int16_t) fLen / L_SB; - if ( (float) fLen / L_SB - num_subband_smooth > 0.0f ) - { - num_subband_smooth++; - } - - for ( i = 0; i < fLen; i++ ) - { - inBuf_pss[i] = inBuf[i]; - outBuf_pss[i] = 0.0f; - } - - for ( i = fLen; i < fLen + ( num_subband_smooth * L_SB - fLen ); i++ ) - { - inBuf_pss[i] = 0.0f; - outBuf_pss[i] = 0.0f; - } - - j = 0; - for ( i = 0; i < num_subband_smooth; i++ ) - { - max_val[i] = 0; - for ( k = 0; k < L_SB; k++ ) - { - inBuf_abs = (float) fabs( inBuf_pss[j] ); - if ( max_val[i] < inBuf_abs ) - { - max_val[i] = inBuf_abs; - } - - j++; - } - } - - /* convert to maximum amplitude frequency log scale envelope */ - j = 0; - for ( i = 0; i < num_subband_smooth; i++ ) - { - max_val_norm = 0.0f; - if ( max_val[i] != 0.0f ) - { - max_val_norm = 10.0f / max_val[i]; - } - - for ( k = 0; k < L_SB; k++ ) - { - if ( inBuf_pss[j] == 0.0f ) - { - outBuf_pss[j] = 0.0f; - } - else if ( fabs( inBuf_pss[j] ) < max_val[i] ) - { - outBuf_pss[j] = inBuf_pss[j] * max_val_norm; - } - else - { - /* CLIP , for avoiding computational difference */ - outBuf_pss[j] = 10.0f; - if ( inBuf_pss[j] < 0.0f ) - { - outBuf_pss[j] = -10.0f; - } - } - j++; - } - } - k = 0; - m = 0; - n = 0; - reset_flag = 0; - n_list[0] = 0; - for ( j = 0; j < num_subband_smooth; j++ ) - { - cnt_zero_cont = 0; - for ( i = 0; i < L_SB; i++ ) - { - if ( outBuf_pss[k] == 0.0f ) - { - cnt_zero_cont++; - } - else - { - cnt_zero_cont = 0; - } - k++; - } - - if ( cnt_zero_cont != 0 ) - { - if ( j > subband_search_offsets[0] / L_SB && reset_flag == 0 ) - { - n = 0; - reset_flag = 1; - } - n_list[n] = j; - n++; - } - - if ( reset_flag == 1 && n == 1 ) - { - m = 0; - } - - if ( cnt_zero_cont > 3 * L_SB / 4 ) - { - for ( i = 0; i < L_SB; i++ ) - { - if ( outBuf_pss[k - L_SB + i] == 0.0f ) - { - outBuf_pss[k - L_SB + i] = outBuf_pss[n_list[m] * L_SB + i] * 0.5f; - } - } - m++; - } - } - - for ( i = 0; i < fLen; i++ ) - { - outBuf[i] = 0.0f; - if ( fabs( outBuf_pss[i] ) > th_cut ) - { - outBuf[i] = outBuf_pss[i]; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * Get20Log10Spec() - * - * Calculates 20*log10() for the specified samples. Input and output buffers can be the same. - *-------------------------------------------------------------------*/ - -static void Get20Log10Spec( - const float *inBuf, /* i : input */ - float *outBuf, /* o : output */ - const int16_t fLen /* i : loop length */ -) -{ - int16_t i; - - for ( i = 0; i < fLen; i++, inBuf++ ) - { - *outBuf++ = (float) ( 20.0f * log10( fabs( *inBuf + 1.0 ) ) ); - } - - return; -} - -/*-------------------------------------------------------------------* - * convert_lagIndices_pls2smp() - * - * - *-------------------------------------------------------------------*/ - -void convert_lagIndices_pls2smp( - int16_t lagIndices_in[], - int16_t nBands_search, - int16_t lagIndices_out[], - const float sspectra[], - const int16_t sbWidth[], - const int16_t fLenLow ) -{ - int16_t sb; - int16_t i, cnt; - - for ( sb = 0; sb < nBands_search; sb++ ) - { - cnt = 0; - i = 0; - while ( cnt <= lagIndices_in[sb] ) - { - if ( sspectra[subband_search_offsets[sb] + i] != 0.0f ) - { - cnt++; - } - - i++; - - if ( subband_search_offsets[sb] + i + sbWidth[sb] >= fLenLow ) - { - /* over fLenLow, no need for more search */ - break; - } - } - - lagIndices_out[sb] = i - 1 + subband_search_offsets[sb]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * get_usebit_npswb() - * - * - *-------------------------------------------------------------------*/ - -int16_t get_usebit_npswb( - const int16_t hqswb_clas ) -{ - int16_t i; - int16_t bits; - int16_t up_lmt; - const int16_t *bits_req; - - up_lmt = 0; - bits_req = bits_lagIndices_modeNormal; - bits = 0; - if ( hqswb_clas == HQ_NORMAL ) - { - up_lmt = NB_SWB_SUBBANDS; - bits_req = bits_lagIndices_modeNormal; - } - else if ( hqswb_clas == HQ_HARMONIC ) - { - up_lmt = NB_SWB_SUBBANDS_HAR_SEARCH_SB; - bits_req = bits_lagIndices_mode0_Har; - bits = 2; /*noise gain*/ - } - for ( i = 0; i < up_lmt; i++ ) - { - bits += bits_req[i]; - } - - return bits; -} - - -/*-------------------------------------------------------------------* - * SpectrumSmoothing_nss() - * - * - *-------------------------------------------------------------------*/ - -static void SpectrumSmoothing_nss( - const float *inBuf, - float *outBuf, - const int16_t fLen ) -{ - int16_t i, k; - float inBufw[L_FRAME32k + L_SB_NSS]; - float outBufw[L_FRAME32k + L_SB_NSS]; - float temp_sum_1[NUM_SUBBAND_SMOOTH_MAX]; - float temp_sum_2[NUM_SUBBAND_SMOOTH_MAX]; - float temp_sum_3[NUM_SUBBAND_SMOOTH_MAX]; - float temp_sum_log[NUM_SUBBAND_SMOOTH_MAX]; - float temp_sum_smooth[NUM_SUBBAND_SMOOTH_MAX]; - float temp_sum_div[NUM_SUBBAND_SMOOTH_MAX]; - int16_t num_subband_smooth; - float smr, avg_val, r0; - float clip_cof, avg_val2, thre; - float thre_min; - float max_peak; - - /* calculate subband number */ - num_subband_smooth = (int16_t) ( fLen / L_SB_NSS ); - if ( fLen / ( L_SB_NSS + 0.0f ) - num_subband_smooth > 0.0f ) - { - num_subband_smooth++; - } - - /* buffer copy for fractional point */ - for ( i = 0; i < fLen; i++ ) - { - inBufw[i] = inBuf[i]; - outBufw[i] = 0.0f; - } - - /* initialization of over buffer for fractional point */ - for ( i = fLen; i < fLen + L_SB_NSS; i++ ) - { - inBufw[i] = 0.0f; - outBufw[i] = 0.0f; - } - - avg_val = 0.0f; - for ( i = 0; i < fLen; i++ ) - { - r0 = (float) fabs( inBufw[i] ); - avg_val += r0; - } - avg_val /= (float) fLen; - - max_peak = 0.0f; - for ( i = 0; i < fLen; i++ ) - { - r0 = (float) fabs( inBufw[i] ); - if ( max_peak < r0 ) - { - max_peak = r0; - } - } - - smr = 10.0f * (float) log10( max_peak / ( avg_val + 1.0e-20 ) + 1.0e-20 ); - - for ( i = 0; i < num_subband_smooth; i++ ) - { - temp_sum_1[i] = 0.0; - temp_sum_2[i] = 0.0; - - for ( k = 0; k < L_SB_NSS_HALF; k++ ) - { - temp_sum_1[i] += (float) ( fabs( inBufw[k + L_SB_NSS * i] ) ); - } - - for ( k = L_SB_NSS_HALF; k < L_SB_NSS; k++ ) - { - temp_sum_2[i] += (float) ( fabs( inBufw[k + L_SB_NSS * i] ) ); - } - - temp_sum_1[i] *= 0.25f; - temp_sum_2[i] *= 0.25f; - temp_sum_3[i] = temp_sum_1[i] * temp_sum_2[i]; - - if ( temp_sum_3[i] == 0.0f ) - { - temp_sum_3[i] = temp_sum_1[i] + temp_sum_2[i]; - } - } - - Get20Log10Spec( temp_sum_3, temp_sum_log, num_subband_smooth ); - - for ( i = 0; i < num_subband_smooth; i++ ) - { - temp_sum_log[i] *= 0.5f; - } - - SmoothSpec( temp_sum_log, temp_sum_smooth, num_subband_smooth, MA_LEN ); - - for ( i = 0; i < num_subband_smooth; i++ ) - { - temp_sum_div[i] = (float) pow( 10, -1.0f * temp_sum_smooth[i] / 20 ); - } - - for ( i = 0; i < num_subband_smooth; i++ ) - { - for ( k = 0; k < L_SB_NSS; k++ ) - { - outBufw[k + L_SB_NSS * i] = inBufw[k + L_SB_NSS * i] * temp_sum_div[i]; - } - } - - avg_val2 = 0.0f; - for ( i = 0; i < fLen; i++ ) - { - r0 = (float) fabs( outBufw[i] ); - avg_val2 += r0; - } - avg_val2 /= (float) fLen; - - clip_cof = smr - 16.0f; - if ( clip_cof < 0.0f ) - { - clip_cof = 0.0f; - } - clip_cof += 2.5f; - - thre = avg_val2 * clip_cof; - thre_min = avg_val2 * 0.25f; - for ( i = 0; i < fLen; i++ ) - { - if ( fabs( outBufw[i] ) > thre ) - { - if ( outBufw[i] < 0.0f ) - { - outBufw[i] = -1.0f * thre; - } - else - { - outBufw[i] = thre; - } - } - - if ( fabs( outBufw[i] ) < thre_min ) - { - outBufw[i] = 0.0f; - } - } - - for ( i = 0; i < fLen; i++ ) - { - outBuf[i] = outBufw[i]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * get_sigma() - * - * - *-------------------------------------------------------------------*/ - -static float get_sigma( - const float x_abs[], - const float avg, - const int16_t length ) -{ - int16_t i; - float d; - float sigma; - - d = 0; - for ( i = 0; i < length; i++ ) - { - d += x_abs[i] * x_abs[i]; - } - - d /= ( length - 1 ); - d -= avg * avg; - - sigma = (float) sqrt( d ); - - return sigma; -} - -/*--------------------------------------------------------------------------* - * FindNBiggest2_simple() - * - * Finds N biggest components from input - * Maximum value allowed for nIdx is currently 140 and the maximum value of n is currently 20 - *--------------------------------------------------------------------------*/ - -void FindNBiggest2_simple( - const float *inBuf, /* i : input buffer (searched) */ - GainItem *g, /* o : N biggest components found */ - const int16_t nIdx, /* i : search length */ - int16_t *n, /* i : number of components searched (N biggest) */ - const int16_t N_NBIGGESTSEARCH ) -{ - int16_t j; - float abs_in[400]; - float avg_in; - float max_in; - float thr; - int16_t peak_cnt; - float sigma; - - max_in = 0; - avg_in = 0; - for ( j = 0; j < nIdx; j++ ) - { - abs_in[j] = (float) fabs( inBuf[j] ); - - if ( max_in < abs_in[j] ) - { - max_in = abs_in[j]; - } - - avg_in += abs_in[j]; - } - - avg_in /= (float) nIdx; - - peak_cnt = 0; - if ( max_in <= 0.0001f ) - { - for ( j = 0; j < N_NBIGGESTSEARCH; j++ ) - { - g[peak_cnt].nmrValue = 0.0f; - g[peak_cnt].gainIndex = j; - peak_cnt++; - } - } - - sigma = get_sigma( abs_in, avg_in, nIdx ); - thr = avg_in + sigma * 1.15f; - - if ( peak_cnt < N_NBIGGESTSEARCH ) - { - for ( j = 0; j < nIdx; j++ ) - { - if ( abs_in[j] > thr ) - { - g[peak_cnt].nmrValue = abs_in[j]; - g[peak_cnt].gainIndex = j; - abs_in[j] = 0.0f; - peak_cnt++; - } - - if ( peak_cnt == N_NBIGGESTSEARCH ) - { - break; - } - } - } - - thr *= ( 0.3f / N_NBIGGESTSEARCH ) * peak_cnt + 0.7f; - - if ( peak_cnt < N_NBIGGESTSEARCH ) - { - for ( j = 0; j < nIdx; j++ ) - { - if ( abs_in[j] > thr ) - { - g[peak_cnt].nmrValue = abs_in[j]; - g[peak_cnt].gainIndex = j; - abs_in[j] = 0.0f; - peak_cnt++; - } - - if ( peak_cnt == N_NBIGGESTSEARCH ) - { - break; - } - } - } - - thr *= ( 0.6f / N_NBIGGESTSEARCH ) * peak_cnt + 0.3f; - if ( peak_cnt < N_NBIGGESTSEARCH ) - { - for ( j = 0; j < nIdx; j++ ) - { - if ( abs_in[j] > thr ) - { - g[peak_cnt].nmrValue = abs_in[j]; - g[peak_cnt].gainIndex = j; - abs_in[j] = 0.0f; - peak_cnt++; - } - - if ( peak_cnt == N_NBIGGESTSEARCH ) - { - break; - } - } - } - - *n = peak_cnt; - - return; -} - -/*--------------------------------------------------------------------------* - * spectrumsmooth_noiseton() - * - * Spectrum normalization for the the core coder - *--------------------------------------------------------------------------*/ - -float spectrumsmooth_noiseton( - float spectra[], /* i : core coder */ - const float spectra_ni[], /* i : core coder with sparse filling */ - float sspectra[], /* o : Smoothed tonal information from core coder */ - float sspectra_diff[], /* o : non tonal infomration for gap filling */ - float sspectra_ni[], /* o : smoothed core coder */ - const int16_t fLenLow, /* i : low frequency boundaries */ - int16_t *ni_seed /* io : random seed */ -) -{ - float spectra_diff[L_FRAME32k]; - float ni_ratio, ss_min, cut_sig_th, cut_ni_th; - int16_t i, pcnt, sign; - float spectra_rm[L_FRAME32k]; - float cut_input = 0.1f; - float rand_a[L_FRAME32k]; - - /* pre-prepare random array for float-fix interoperability */ - for ( i = 0; i < fLenLow; i++ ) - { - rand_a[i] = own_random( ni_seed ) / PCM16_TO_FLT_FAC; - } - - /*Get the pulse resolution for the core coder*/ - pcnt = 0; - for ( i = 0; i < fLenLow; i++ ) - { - if ( spectra[i] != 0.0 ) - { - pcnt++; - } - } - - ni_ratio = 4.0f * ( pcnt ) / ( fLenLow + 0.0f ); - ni_ratio = min( 0.9f, ni_ratio ); - - ss_min = ni_ratio * 10.0f; - cut_sig_th = ss_min / 4.0f; - cut_sig_th = max( 0.95f, cut_sig_th ); - /*core coder normalization for gap filling*/ - for ( i = 0; i < fLenLow; i++ ) - { - spectra_rm[i] = 0.0f; - if ( fabs( spectra[i] ) > cut_input ) - { - spectra_rm[i] = spectra[i]; - } - } - SpectrumSmoothing( spectra_rm, sspectra, fLenLow, cut_sig_th ); - /*Extract noise informaton from the core coder*/ - mvr2r( sspectra, sspectra_ni, fLenLow ); - for ( i = 0; i < fLenLow; i++ ) - { - spectra_diff[i] = spectra_ni[i] - spectra[i]; - } - cut_ni_th = 0.0f; - /*normalize sparse filled components*/ - for ( i = 0; i < fLenLow; i++ ) - { - spectra_rm[i] = 0.0f; - if ( fabs( spectra_diff[i] ) > cut_input ) - { - spectra_rm[i] = spectra_diff[i]; - } - } - SpectrumSmoothing( spectra_rm, sspectra_diff, fLenLow, cut_ni_th ); - /*Normalized corecoder for Gap filling */ - for ( i = 0; i < fLenLow; i++ ) - { - sign = 1; - if ( sspectra[i] < 0 ) - { - sign = -1; - } - if ( fabs( sspectra[i] ) > ss_min ) - { - sspectra[i] = sign * ( ( 10 - ss_min ) / 10.0f * (float) fabs( sspectra[i] ) + ss_min ); - } - if ( sspectra[i] != 0.0 ) - { - sspectra_ni[i] = sspectra[i]; - } - else - { - sspectra_ni[i] = sspectra_diff[i] * ni_ratio; - } - if ( sspectra_ni[i] == 0.0f ) - { - sspectra_ni[i] = 0.5f * 10.0f * ni_ratio * rand_a[i]; - } - } - - return ( ss_min ); -} - -/*--------------------------------------------------------------------------* - * noiseinj_hf() - * - * level adjustments for the missing bands in the core coder - *--------------------------------------------------------------------------*/ - -void noiseinj_hf( - float xSynth_har[], /* o : gap filled information */ - const float th_g[], /* i : level adjustment information */ - const float band_energy[], /* i : subband energies */ - float *prev_En_sb, /* i/o: band Energies */ - const int16_t p2a_flags[], /* i : Missing bands in the core coder */ - const int16_t BANDS, /* i : total bands */ - const int16_t band_start[], /* i : band start indices */ - const int16_t band_end[], /* i : band end indices */ - const int16_t fLenLow /* i : low frequency bandwidth */ -) -{ - - float *p_En, ni_scale, *p_Enn_sm_sb, En[NB_SWB_SUBBANDS], Enn_sm_sb[NB_SWB_SUBBANDS]; - int16_t k, i; - - int16_t map_pulse_t[L_FRAME32k]; - int16_t map_pulse[L_FRAME32k]; - - set_s( map_pulse_t, 0, band_end[BANDS - 1] + 1 ); - set_s( map_pulse, 0, band_end[BANDS - 1] + 1 ); - /*level adjust the missing bands in the core coder */ - p_En = En; - for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) - { - *p_En = 0.0f; - if ( p2a_flags[k] == 0 ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( fabs( xSynth_har[i - fLenLow] ) <= th_g[k - ( BANDS - NB_SWB_SUBBANDS )] ) - { - *p_En += xSynth_har[i - fLenLow] * xSynth_har[i - fLenLow]; - } - else - { - map_pulse_t[i] = 1; - } - } - *p_En = (float) sqrt( *p_En ); - } - p_En++; - } - - p_En = En; - p_Enn_sm_sb = Enn_sm_sb; - for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) - { - *p_Enn_sm_sb = prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )]; - if ( p2a_flags[k] == 0 ) - { - if ( prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] < 0.8f * band_energy[k] ) - { - *p_Enn_sm_sb = ( 0.15f * ( *p_En ) ) + ( 0.85f * prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] ); - } - else - { - *p_Enn_sm_sb = ( 0.8f * ( *p_En ) ) + ( 0.2f * prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] ); - } - } - - p_Enn_sm_sb++; - p_En++; - } - - p_En = En; - p_Enn_sm_sb = Enn_sm_sb; - map_pulse[fLenLow] = ( map_pulse_t[fLenLow] | map_pulse_t[fLenLow + 1] ); - for ( i = fLenLow + 1; i < band_end[BANDS - 1]; i++ ) - { - map_pulse[i] = ( map_pulse_t[i - 1] | map_pulse_t[i] | map_pulse_t[i + 1] ); - } - map_pulse[i] = ( map_pulse_t[i - 1] | map_pulse_t[i] ); - for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) - { - if ( p2a_flags[k] == 0 && *p_En != 0.0f ) - { - ni_scale = (float) sqrt( ( *p_Enn_sm_sb ) / ( *p_En ) ); - ni_scale = min( 1.25f, ni_scale ); - ni_scale = max( 0.75f, ni_scale ); - ni_scale *= 0.8f; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( fabs( xSynth_har[i - fLenLow] ) <= th_g[k - ( BANDS - NB_SWB_SUBBANDS )] ) - { - if ( map_pulse[i] == 0 ) - { - xSynth_har[i - fLenLow] *= ni_scale; - } - } - } - prev_En_sb[k - ( BANDS - NB_SWB_SUBBANDS )] = *p_Enn_sm_sb; - } - p_Enn_sm_sb++; - p_En++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * noise_extr_corcod() - * - * Spectrum normalization for the core coder - *--------------------------------------------------------------------------*/ - -void noise_extr_corcod( - float spectra[], /* i : core coder */ - const float spectra_ni[], /* i : core coder with sparse filling */ - float sspectra[], /* o : Smoothed tonal information from core coder */ - float sspectra_diff[], /* o : non tonal infomration for gap filling */ - float sspectra_ni[], /* o : smoothed core coder */ - const int16_t fLenLow, /* i : low frequency bands width */ - int16_t prev_hqswb_clas, /* i : classification information */ - float *prev_ni_ratio /* i/o: noise parameter */ -) -{ - int16_t i, pulse_num; - float spectra_diff[L_FRAME32k]; - float ni_ratio, ni_ratio_cur, br_adj; - - /*Spectrum Smoothing for tonal signals*/ - SpectrumSmoothing_nss( spectra, sspectra, fLenLow ); - - mvr2r( sspectra, sspectra_ni, fLenLow ); - /*noise extraction*/ - for ( i = 0; i < fLenLow; i++ ) - { - spectra_diff[i] = spectra_ni[i] - spectra[i]; - } - SpectrumSmoothing_nss( spectra_diff, sspectra_diff, fLenLow ); - /*Smoothing the noise components*/ - br_adj = 0.9f; - pulse_num = 0; - for ( i = 0; i < fLenLow; i++ ) - { - if ( spectra[i] != 0.0f ) - { - pulse_num++; - } - } - ni_ratio_cur = 0.0f; - if ( pulse_num != 0 ) - { - ni_ratio_cur = ( fLenLow - pulse_num ) / ( fLenLow + 0.0f ); - ni_ratio_cur *= br_adj; - } - if ( prev_hqswb_clas == HQ_HARMONIC ) - { - if ( ni_ratio_cur > ( *prev_ni_ratio ) ) - { - ni_ratio = 0.8f * ni_ratio_cur + ( *prev_ni_ratio ) * 0.2f; - } - else - { - ni_ratio = 0.6f * ni_ratio_cur + ( *prev_ni_ratio ) * 0.4f; - } - } - else - { - ni_ratio = 0.7f * ni_ratio_cur; - } - *prev_ni_ratio = ni_ratio; - - for ( i = 0; i < fLenLow; i++ ) - { - sspectra_diff[i] *= ni_ratio; - sspectra_ni[i] = sspectra[i] + sspectra_diff[i]; - } - - return; -} - -/*--------------------------------------------------------------------------* - * ton_ene_est() - * - * band energies for missing bands in the core coder - *--------------------------------------------------------------------------*/ - -void ton_ene_est( - float xSynth_har[], /* i : buffer with non tonal compoents */ - float be_tonal[], /* o : tonal energy of the missing bands */ - float band_energy[], /* i : subband energies */ - int16_t band_start[], /* i : subband start indices */ - int16_t band_end[], /* i : subband end indices */ - int16_t band_width[], /* i : subband widths */ - const int16_t fLenLow, /* i : low frequency width */ - const int16_t fLenHigh, /* i : High frequency width */ - int16_t bands, /* i : total subbands */ - int16_t har_bands, /* i : total number of harmonics bands */ - float ni_lvl, /* i : noise enve for the hf bands */ - GainItem pk_sf[], /* i : subband widths */ - int16_t *pul_res /* i : tonal resolution */ -) -{ - int16_t sb_ton_loc[SWB_HAR_RAN1]; - float sb_ton[SWB_HAR_RAN1], peak[NB_SWB_SUBBANDS]; - int16_t pos, count_pos_st, count_pos_end; - int16_t pul_res_bnd[NB_SWB_SUBBANDS]; - int16_t k, i, j; - float E = 0.0f, E_r = 0.0f, fac, ni_gain[NB_SWB_SUBBANDS], avg_pe[NB_SWB_SUBBANDS]; - - set_s( sb_ton_loc, -1, SWB_HAR_RAN1 ); - set_f( ni_gain, 0.0f, NB_SWB_SUBBANDS ); - set_f( avg_pe, 0.0f, NB_SWB_SUBBANDS ); - set_f( sb_ton, 0.0f, NB_SWB_SUBBANDS ); - set_f( peak, 0.0f, NB_SWB_SUBBANDS ); - /*non tonal adjustments*/ - for ( i = 0; i < fLenHigh; i++ ) - { - xSynth_har[i] *= ni_lvl; - } - - pos = 0; - for ( k = 0; k < bands - har_bands; k++ ) - { - for ( j = 0; j < pul_res[k]; j++ ) - { - sb_ton_loc[pos] = pk_sf[k * 8 + j].gainIndex; - sb_ton[pos] = pk_sf[k * 8 + j].nmrValue; - pos++; - } - } - k = 0; - pos = 0; - do - { - count_pos_st = pos; - while ( sb_ton_loc[pos] <= ( band_end[k + har_bands] - fLenLow ) && sb_ton_loc[pos] >= 0 ) - { - pos++; - } - count_pos_end = pos; - pul_res_bnd[k] = count_pos_end - count_pos_st; - if ( pul_res_bnd[k] > 0 ) - { - peak[k] = (float) fabs( sb_ton[count_pos_st] ); - } - k++; - } while ( k < NB_SWB_SUBBANDS ); - - k = 0; - /*energy calculation for tonal components*/ - for ( i = har_bands; i < bands; i++ ) - { - E = sum2_f( &xSynth_har[band_start[i] - fLenLow], band_width[i] ); /*noise energy*/ - E_r = (float) E / (float) pow( 2.0f, band_energy[i] ); - - if ( E_r < 0.06f ) - { - avg_pe[k] = (float) sqrt( pow( 2.0f, band_energy[i] ) / band_width[i] ); - fac = 0.6f; - if ( pul_res_bnd[k] != 0 ) - { - fac = ( (float) sqrt( E / band_width[i] ) / peak[k] ); - } - ni_gain[k] = fac * avg_pe[k]; - - ni_gain[k] = max( ( ( ni_gain[k] * ni_gain[k] * E_r ) >= 0.12f ) ? 0.05f * ni_gain[k] : 1.0f * ni_gain[k], 1.4f ); - - for ( j = band_start[i]; j <= band_end[i]; j++ ) - { - xSynth_har[j - fLenLow] *= ni_gain[k]; - } - E = sum2_f( &xSynth_har[band_start[i] - fLenLow], band_width[i] ); /*noise energy*/ - } - k++; - be_tonal[i] = (float) pow( 2.0f, band_energy[i] ) - E; /*tonal energy*/ - - if ( be_tonal[i] < 0.0f ) - { - E = 0; - for ( j = ( band_start[i] - fLenLow ); j <= ( band_end[i] - fLenLow ); j++ ) - { - xSynth_har[j] *= 0.25f; - E += xSynth_har[j] * xSynth_har[j]; - } - be_tonal[i] = (float) pow( 2.0f, band_energy[i] ) - E; /*tonal energy*/ - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * Gettonl_scalfact() - * - * Gap filling for the core coder - *--------------------------------------------------------------------------*/ -void Gettonl_scalfact( - float *outBuf, /* o : synthesized spectrum */ - const float *codbuf, /* i : core coder */ - const int16_t fLenLow, /* i : lowband length */ - const int16_t fLenHigh, /* i : highband length */ - int16_t harmonic_band, /* i : total number of Low frequency bands */ - int16_t bands, /* i : total number of subbands in a frame */ - float *band_energy, /* i : band energy of each subband */ - int16_t *band_start, /* i : subband start indices */ - int16_t *band_end, /* i : subband end indices */ - const int16_t p2aflags[], /* i : missing bands in the core coder */ - float be_tonal[], /* i : tonal energy */ - GainItem *pk_sf, /* i : toanl information for Sparse filling */ - int16_t *pul_res_pk /* i : pulse resolution information */ -) -{ - int16_t k, i, band_pos; - int16_t sb_ton_loc[SWB_HAR_RAN1]; - int16_t pos_tmp; - float sb_ton[SWB_HAR_RAN1], est_ton_ene[NB_SWB_SUBBANDS], ton_sf; - float step, enrd_r = 0.9f; - float band_sf[SWB_HAR_RAN1]; - int16_t pos, count_pos_st, count_pos_end, j; - - set_f( est_ton_ene, 0.0f, NB_SWB_SUBBANDS ); - set_s( sb_ton_loc, -1, SWB_HAR_RAN1 ); - /* Get the tonal information for sparse filling */ - pos = 0; - for ( k = 0; k < bands - harmonic_band; k++ ) - { - for ( j = 0; j < pul_res_pk[k]; j++ ) - { - sb_ton_loc[pos] = pk_sf[k * 8 + j].gainIndex; - sb_ton[pos] = pk_sf[k * 8 + j].nmrValue; - pos++; - } - } - k = 0; - pos = 0; - pos_tmp = 0; - - do - { - band_pos = k + harmonic_band; - count_pos_st = pos; - while ( sb_ton_loc[pos] <= ( band_end[band_pos] - fLenLow ) && sb_ton_loc[pos] >= 0 ) - { - pos++; - } - count_pos_end = pos; - for ( i = count_pos_st; i < count_pos_end; i++ ) - { - est_ton_ene[k] += ( sb_ton[i] * sb_ton[i] ); - } - if ( est_ton_ene[k] <= 0.0f ) - { - est_ton_ene[k] = 0.01f; - } - ton_sf = 0.0f; - if ( be_tonal[band_pos] > 0.0f ) - { - ton_sf = (float) sqrt( be_tonal[band_pos] / est_ton_ene[k] ); - } - for ( i = count_pos_st; i < count_pos_end; i++ ) - { - band_sf[pos_tmp] = ton_sf; - pos_tmp++; - } - k++; - } while ( k < NB_SWB_SUBBANDS ); - /* Gap filling for the core coder */ - step = 1.0f / ( 0.077f * fLenHigh ); - pos_tmp = 0; - for ( k = 0; k < bands - harmonic_band; k++ ) - { - band_pos = k + harmonic_band; - if ( be_tonal[band_pos] > 0.0f ) - { - enrd_r *= (float) sqrt( be_tonal[band_pos] / pow( 2.0f, band_energy[band_pos] ) ); - } - else - { - enrd_r = 0.0f; - } - enrd_r -= step; - if ( p2aflags[band_pos] == 1 ) - { - for ( i = band_start[band_pos]; i <= band_end[band_pos]; i++ ) - { - outBuf[i - fLenLow] = codbuf[i]; - } - } - else - { - pos = 0; - pos += pos_tmp; - for ( j = 0; j < pul_res_pk[k]; j++ ) - { - outBuf[pk_sf[k * 8 + j].gainIndex] = pk_sf[k * 8 + j].nmrValue * band_sf[pos] * enrd_r; - pos++; - } - } - pos_tmp += pul_res_pk[k]; - } - - return; -} - - -/*--------------------------------------------------------------------------* - * return_bits_normal2() - * - * - *--------------------------------------------------------------------------*/ - -void return_bits_normal2( - int16_t *bit_budget, - const int16_t p2a_flags[], - const int16_t bands, - const int16_t bits_lagIndices[] ) -{ - int16_t i; - - for ( i = 0; i < NB_SWB_SUBBANDS; i++ ) - { - if ( p2a_flags[bands - NB_SWB_SUBBANDS + i] == 1 ) - { - *bit_budget += bits_lagIndices[i]; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * preset_hq2_swb() - * - * - *--------------------------------------------------------------------------*/ - -void preset_hq2_swb( - const int16_t hqswb_clas, - const int16_t band_end[], - int16_t *har_bands, - int16_t p2a_bands, - const int16_t length, - const int16_t bands, - int16_t *lowlength, - int16_t *highlength, - float m[] ) -{ - if ( hqswb_clas == HQ_HARMONIC ) - { - *har_bands = bands - p2a_bands + 1; - *lowlength = band_end[*har_bands - 1] + 1; - } - else - { - *lowlength = band_end[bands - NB_SWB_SUBBANDS - 1] + 1; - } - - *highlength = ( length - *lowlength ); - set_f( m, 0.0f, length ); - - return; -} - - -/*--------------------------------------------------------------------------* - * post_hq2_swb() - * - * - *--------------------------------------------------------------------------*/ - -void post_hq2_swb( - const float m[], - const int16_t lowlength, - const int16_t highlength, - const int16_t hqswb_clas, - const int16_t har_bands, - const int16_t bands, - const int16_t p2a_flags[], - const int16_t band_start[], - const int16_t band_end[], - float y2[], - int16_t npulses[] ) -{ - int16_t i, k; - - /* copy the scratch buffer to the output */ - mvr2r( &m[lowlength], &y2[lowlength], highlength ); - - if ( hqswb_clas == HQ_HARMONIC ) - { - k = har_bands; - } - else - { - k = bands - NB_SWB_SUBBANDS; - } - - for ( ; k < bands; k++ ) - { - if ( p2a_flags[k] == 0 && npulses[k] == 0 ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( y2[i] != 0.0f ) - { - npulses[k]++; - } - } - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * GetSynthesizedSpecThinOut() - * - * Synthesize the spectrum in generic subband coding - *--------------------------------------------------------------------------*/ - -void GetSynthesizedSpecThinOut( - const float *predBuf, /* i : prediction buffer (i.e., lowband) */ - float *outBuf, /* o : synthesized spectrum */ - const int16_t nBands, /* i : number of subbands calculated */ - const int16_t *sbWidth, /* i : subband lengths */ - const int16_t *lagIndices, /* i : lowband index for each subband */ - const float *lagGains, /* i : first gain for each subband */ - const int16_t predBufLen /* i : lowband length */ -) -{ - int16_t sb; - int16_t fLen, lag; - float *ptr_in_outBuf; - - ptr_in_outBuf = outBuf; - - for ( sb = 0; sb < nBands; sb++ ) - { - fLen = sbWidth[sb]; - lag = lagIndices[sb]; - - if ( lag + fLen > predBufLen ) - { - /* should never happen */ - lag = predBufLen - fLen; - } - - GetPredictedSignal( predBuf, outBuf, lag, fLen, lagGains[sb] ); - outBuf += fLen; - } - - outBuf = ptr_in_outBuf; - - return; -} - - -/*--------------------------------------------------------------------------* - * GetlagGains() - * - * - *--------------------------------------------------------------------------*/ - -void GetlagGains( - const float *predBuf, /* i : predictve buffer */ - const float *band_energy, /* i : band Energies */ - const int16_t nBands, /* i : high frequency bands */ - const int16_t *sbWidth, /* i : high frequency band resolution */ - const int16_t *lagIndices, /* i : correlation indices */ - const int16_t predBufLen, /* i : predictive buffer length */ - float *lagGains /* o : lag gains */ -) -{ - int16_t i; - int16_t sb, fLen, lag; - float outBuf[L_FRAME32k]; - float lagEnergy; - - /* Get the gain information for the missing bands*/ - for ( sb = 0; sb < nBands; sb++ ) - { - fLen = sbWidth[sb]; - lag = lagIndices[sb]; - - if ( lag + fLen > predBufLen ) - { - /* should never happen */ - lag = predBufLen - fLen; - } - - GetPredictedSignal( predBuf, outBuf, lag, fLen, 1.0 ); - - lagEnergy = 0.0f; - for ( i = 0; i < fLen; i++ ) - { - lagEnergy += outBuf[i] * outBuf[i]; - } - - if ( lagEnergy != 0.0f ) - { - lagGains[sb] = (float) sqrt( pow( 2.0f, band_energy[sb] ) / lagEnergy ); - } - else - { - lagGains[sb] = (float) sqrt( pow( 2.0f, band_energy[sb] ) / ( lagEnergy + 0.001f ) ); - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * updat_prev_frm() - * - * - *--------------------------------------------------------------------------*/ - -void updat_prev_frm( - float y2[], /* i/o: core coder buffer */ - float t_audio[], /* o : core coder buffer */ - const int32_t bwe_br, /* i : core bitrate */ - const int16_t length, /* i : frame length coded bw */ - const int16_t inner_frame, /* i : input frame length */ - const int16_t bands, /* i : sub band resolution */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t is_transient, /* i : signal class information */ - const int16_t hqswb_clas, /* i : signal class information */ - int16_t *prev_hqswb_clas, /* o : update signal class information */ - int16_t prev_SWB_peak_pos[], /* o : update core coder last coded peaks*/ - int16_t prev_SWB_peak_pos_tmp[], /* o : update core coder last coded peaks*/ - int16_t *prev_frm_hfe2, /* o : update harmonics */ - int16_t *prev_stab_hfe2, /* o : update harmonics */ - const int16_t bws_cnt /* i : band width detector counter */ -) -{ - int16_t i, k, k1, k2, j; - - /* Copy the coded MDCT coefficient to the output buffer */ - if ( !is_transient ) - { - /* Copy the scratch buffer to the output */ - mvr2r( y2, t_audio, length ); - - /* If the input frame is larger than coded bandwidth, zero out uncoded MDCT coefficients */ - if ( inner_frame > length ) - { - set_f( t_audio + length, 0.0f, inner_frame - length ); - } - } - else /* transient frame */ - { - if ( inner_frame == length || bws_cnt > 0 ) - { - /* Copy the scratch buffer to the output */ - mvr2r( y2, t_audio, length ); - } - else - { - /* un-collapse transient frame and interleave zeros */ - for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - k1 = i * length / NUM_TIME_SWITCHING_BLOCKS; - k2 = i * inner_frame / NUM_TIME_SWITCHING_BLOCKS; - - mvr2r( y2 + k1, t_audio + k2, length / NUM_TIME_SWITCHING_BLOCKS ); - set_f( t_audio + k2 + length / NUM_TIME_SWITCHING_BLOCKS, 0.0f, ( inner_frame - length ) / NUM_TIME_SWITCHING_BLOCKS ); - } - } - } - - /* update */ - if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB ) - { - *prev_hqswb_clas = hqswb_clas; - if ( hqswb_clas != HQ_HARMONIC ) - { - *prev_frm_hfe2 = 0; - *prev_stab_hfe2 = 0; - } - } - else - { - *prev_hqswb_clas = is_transient; - } - - if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && bwidth == SWB && hqswb_clas == HQ_NORMAL ) - { - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - prev_SWB_peak_pos[j] = prev_SWB_peak_pos_tmp[j]; - j++; - } - } - - return; -} -#endif diff --git a/lib_com/swb_tbe_com.c b/lib_com/swb_tbe_com.c index 69497dad4..9b20512a2 100644 --- a/lib_com/swb_tbe_com.c +++ b/lib_com/swb_tbe_com.c @@ -50,2241 +50,202 @@ * Local function prototypes *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define POW_EXC16k_WHTND 1.14e11f /* power of random excitation, length 320 samples, uniform distribution */ -#define THR_ENV_ERROR_PLOSIVE 200.0f /* threshold for envelope error used in plosive detection */ -static void create_random_vector( float output[], const int16_t length, int16_t seed[] ); -static void flip_spectrum( const float input[], float output[], const int16_t length ); -static void Hilbert_transform( float tmp_R[], float tmp_I[], float *tmpi_R, float *tmpi_I, const int16_t length, const int16_t HB_stage_id ); -static void Estimate_mix_factors( const float *shb_res, const float *exc16kWhtnd, const float *White_exc16k, const float pow1, const float pow22, float *vf_modified, int16_t *vf_ind ); -#endif -#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* - * swb_tbe_reset() + * flip_spectrum_and_decimby4() + * * - * Reset the SWB TBE encoder *-------------------------------------------------------------------*/ -void swb_tbe_reset( - float mem_csfilt[], - float mem_genSHBexc_filt_down_shb[], - float state_lpc_syn[], - float syn_overlap[], - float state_syn_shbexc[], - float *tbe_demph, - float *tbe_premph, - float mem_stp_swb[], - float *gain_prec_swb ) -{ - set_f( mem_csfilt, 0, 2 ); - set_f( mem_genSHBexc_filt_down_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( state_lpc_syn, 0.0f, LPC_SHB_ORDER ); - set_f( syn_overlap, 0.0f, L_SHB_LAHEAD ); - set_f( state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); - *tbe_demph = 0.0f; - *tbe_premph = 0.0f; - set_f( mem_stp_swb, 0, LPC_SHB_ORDER ); - *gain_prec_swb = 1.0f; - - return; -} -#endif +void GenSHBSynth_fx_32( + const Word32 *input_synspeech, /* i : input synthesized speech Qx*/ + Word32 *shb_syn_speech_32k, /* o : output highband component Qx*/ + Word32 Hilbert_Mem[], /* i/o: memory Qx*/ + Word32 state_lsyn_filt_shb_local[], /* i/o: memory Qx*/ + const Word16 L_frame, /* i : ACELP frame length */ + Word16 *syn_dm_phase ) +{ + Word32 speech_buf_32k[L_FRAME32k]; + Word16 i; -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * swb_tbe_reset_synth() - * - * Reset the extra parameters needed for synthesis of the SWB TBE output - *-------------------------------------------------------------------*/ + Interpolate_allpass_steep_32( input_synspeech, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k ); -void swb_tbe_reset_synth( - float genSHBsynth_Hilbert_Mem[], - float genSHBsynth_state_lsyn_filt_shb_local[] ) -{ - set_f( genSHBsynth_Hilbert_Mem, 0.0f, HILBERT_MEM_SIZE ); - set_f( genSHBsynth_state_lsyn_filt_shb_local, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); + IF( EQ_16( L_frame, L_FRAME ) ) + { + flip_and_downmix_generic_fx_32( speech_buf_32k, shb_syn_speech_32k, L_FRAME32k, Hilbert_Mem, Hilbert_Mem + HILBERT_ORDER1, Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), syn_dm_phase ); + } + ELSE + { + FOR( i = 0; i < L_FRAME32k; i++ ) + { + // shb_syn_speech_32k[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_32k[i] ) : ( speech_buf_32k[i] ); + IF( i % 2 == 0 ) + { + shb_syn_speech_32k[i] = L_negate( speech_buf_32k[i] ); // Qx + } + ELSE + { + shb_syn_speech_32k[i] = speech_buf_32k[i]; // Qx + } + move32(); + } + } return; } - - -/*-------------------------------------------------------------------* - * tbe_celp_exc_offset_flt() - * - * Compute tbe bwe celp excitation offset - *-------------------------------------------------------------------*/ - -/*! r: offset value */ -int16_t tbe_celp_exc_offset_flt( - const int16_t T0, /* i : Integer pitch */ - const int16_t T0_frac /* i : Fractional part of the pitch */ -) +void ScaleShapedSHB_32( + const Word16 length, /* i : SHB overlap length */ + Word32 *synSHB_fx, /* i/o: synthesized shb signal Q_inp/Q_new */ + Word32 *overlap_fx, /* i/o: buffer for overlap-add Q_inp/Q_new */ + const Word16 *subgain_fx, /* i : subframe gain Q15 */ + const Word32 frame_gain_fx, /* i : frame gain Q18*/ + const Word16 *win_fx, /* i : window Q15 */ + const Word16 *subwin_fx, /* i : subframes window Q15 */ + Word16 *Q_inp, + Word16 *Q_new ) { - int16_t offset; - offset = T0 * HIBND_ACB_L_FAC + (int16_t) ( (float) T0_frac * 0.25f * HIBND_ACB_L_FAC + 2 * HIBND_ACB_L_FAC + 0.5f ) - 2 * HIBND_ACB_L_FAC; - - return offset; -} - + const Word16 *skip; + Word16 i, j, k, l_shb_lahead, l_frame; + Word16 join_length, num_join; + Word32 mod_syn_fx[L_FRAME16k + L_SHB_LAHEAD], L_tmp; + Word16 sum_gain_fx; -/*-------------------------------------------------------------------* - * flip_and_downmix_generic() - * - * flips the spectrum and downmixes the signals, lpf if needed - *-------------------------------------------------------------------*/ + /* initilaization */ + l_frame = L_FRAME16k; + l_shb_lahead = L_SHB_LAHEAD; + move16(); + move16(); + skip = skip_bands_SWB_TBE; -void flip_and_downmix_generic( - float input[], /* i : input spectrum */ - float output[], /* o : output spectrum */ - const int16_t length, /* i : length of spectra */ - float mem1_ext[HILBERT_ORDER1], /* i/o: Hilbert filter memory */ - float mem2_ext[2 * HILBERT_ORDER2], /* i/o: memory */ - float mem3_ext[2 * HILBERT_ORDER2], /* i/o: memory */ - int16_t *phase_state /* i/o: Phase state in case frequency isn't multiple of 50 Hz */ -) -{ - int16_t i, j; - float tmp[L_FRAME32k + HILBERT_ORDER1]; - float tmpi_R[L_FRAME32k]; - float tmpi_I[L_FRAME32k]; - float tmpi2_R[L_FRAME32k + HILBERT_ORDER2]; - float tmpi2_I[L_FRAME32k + HILBERT_ORDER2]; - float tmp_R[L_FRAME32k + HILBERT_ORDER2]; - float tmp_I[L_FRAME32k + HILBERT_ORDER2]; - int16_t k, period; - float recip_period; - float local_negsin_table[L_FRAME16k]; - float local_cos_table[L_FRAME16k]; + IF( EQ_16( length, SHB_OVERLAP_LEN / 2 ) ) + { + skip = skip_bands_WB_TBE; + l_frame = L_FRAME16k / 4; + l_shb_lahead = L_SHB_LAHEAD / 4; + move16(); + move16(); + } - period = 17; /* == (int16_t) (32000.0f / 1850.0f + 0.5f); */ + /* apply gain for each subframe, and store noise output signal using overlap-add */ + set32_fx( mod_syn_fx, 0, l_frame + l_shb_lahead ); - recip_period = 256.0f / (float) period; - for ( i = 0; i < period; i++ ) + IF( EQ_16( length, SHB_OVERLAP_LEN / 2 ) ) { - k = (int16_t) ( i * recip_period + 0.5f ); - if ( k <= 64 ) - { - local_negsin_table[i] = -sincos_t[k]; - local_cos_table[i] = sincos_t[64 - k]; - } - else if ( k <= 128 ) + sum_gain_fx = 0; + move16(); + FOR( k = 0; k < shr( length, 1 ); k++ ) { - local_negsin_table[i] = -sincos_t[128 - k]; - local_cos_table[i] = -sincos_t[k - 64]; + sum_gain_fx = mult_r( subwin_fx[2 * k + 2], subgain_fx[0] ); + mod_syn_fx[skip[0] + k] = Mpy_32_16_1( synSHB_fx[skip[0] + k], sum_gain_fx ); + move32(); // Qx + mod_syn_fx[skip[0] + k + length / 2] = Mpy_32_16_1( synSHB_fx[skip[0] + k + length / 2], subgain_fx[0] ); // Qx + move32(); } - else if ( k <= 192 ) + FOR( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) { - local_negsin_table[i] = sincos_t[k - 128]; - local_cos_table[i] = -sincos_t[192 - k]; + FOR( k = 0; k < length; k++ ) + { + L_tmp = L_mult0( subwin_fx[k + 1], subgain_fx[i] ); + sum_gain_fx = round_fx( L_mac0( L_tmp, subwin_fx[length - k - 1], subgain_fx[i - 1] ) ); + mod_syn_fx[skip[i] + k] = L_shl( Mpy_32_16_1( synSHB_fx[skip[i] + k], sum_gain_fx ), 1 ); // Qx + move32(); + } } - else + FOR( k = 0; k < shr( length, 1 ); k++ ) { - local_negsin_table[i] = sincos_t[256 - k]; - local_cos_table[i] = sincos_t[k - 192]; + sum_gain_fx = mult_r( subwin_fx[length - k * 2 - 2], subgain_fx[i - 1] ); + mod_syn_fx[skip[i] + k] = Mpy_32_16_1( synSHB_fx[skip[i] + k], sum_gain_fx ); // Qx + move32(); } } - - for ( i = 0; i < length; i = i + 2 ) - { - input[i] = -input[i]; - } - - mvr2r( input, tmp + HILBERT_ORDER1, length ); - - mvr2r( mem1_ext, tmp, HILBERT_ORDER1 ); - - /* Hilber transform stage - 0 */ - Hilbert_transform( tmp, tmp, tmpi_R, tmpi_I, length, 0 ); - - mvr2r( mem2_ext, tmpi2_R, HILBERT_ORDER2 ); - mvr2r( mem3_ext, tmpi2_I, HILBERT_ORDER2 ); - - /* Hilber transform stage - 1 */ - Hilbert_transform( tmpi_R, tmpi_I, tmpi2_R, tmpi2_I, length, 1 ); - - mvr2r( tmp + length, mem1_ext, HILBERT_ORDER1 ); - mvr2r( mem2_ext + HILBERT_ORDER2, tmp_R, HILBERT_ORDER2 ); - mvr2r( mem3_ext + HILBERT_ORDER2, tmp_I, HILBERT_ORDER2 ); - - /* Hilber transform stage - 2 */ - Hilbert_transform( tmpi2_R, tmpi2_I, tmpi_R, tmpi_I, length, 2 ); - - mvr2r( tmpi2_R + length, mem2_ext, HILBERT_ORDER2 ); - mvr2r( tmpi2_I + length, mem3_ext, HILBERT_ORDER2 ); - - /* Hilber transform stage - 3 */ - Hilbert_transform( tmpi_R, tmpi_I, tmp_R, tmp_I, length, 3 ); - - mvr2r( tmp_R + length, mem2_ext + HILBERT_ORDER2, HILBERT_ORDER2 ); - mvr2r( tmp_I + length, mem3_ext + HILBERT_ORDER2, HILBERT_ORDER2 ); - - if ( *phase_state >= period ) - { - *phase_state = 0; - } - - for ( i = 0, j = *phase_state; i < length; ) + ELSE { - for ( ; ( j < period ) && ( i < length ); j++, i++ ) + num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; + join_length = i_mult( num_join, length ); + j = 0; + move16(); + move16(); + FOR( k = 0; k < length; k++ ) { - output[i] = tmp_R[i + HILBERT_ORDER2] * local_cos_table[j] + tmp_I[i + HILBERT_ORDER2] * local_negsin_table[j]; + mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], mult_r( subwin_fx[k + 1], subgain_fx[0] ) ); // Qx + move32(); + j = add( j, 1 ); } - - if ( j >= period ) + FOR( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) { - j = 0; - } - } - - *phase_state = j; - - return; -} - -/*---------------------------------------------- - * Hilbert_transform() - * - * Hilbert transform - *------------------------------------------------*/ - -static void Hilbert_transform( - float tmp_R[], /* i : Real component of HB */ - float tmp_I[], /* i : Real component of HB */ - float tmpi_R[], /* o : Real component of HB */ - float tmpi_I[], /* o : Imag. component of HB */ - const int16_t length, /* i : input length */ - const int16_t HB_stage_id /* i : HB transform stage */ -) -{ - int16_t i, hb_filter_stage, offset; - - hb_filter_stage = 2 * HB_stage_id; - offset = ( HB_stage_id == 0 ) ? 1 : 0; + FOR( k = 0; k < join_length - length; k++ ) + { + mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], subgain_fx[i * num_join] ); // Qx + move32(); + j = add( j, 1 ); + } - if ( HB_stage_id == 0 || HB_stage_id == 2 ) - { - for ( i = 0; i < length; i++ ) + FOR( k = 0; k < length; k++ ) + { + L_tmp = L_mult0( subwin_fx[length - k - 1], subgain_fx[i * num_join] ); + mod_syn_fx[j] = L_shl( Mpy_32_16_1( synSHB_fx[j], round_fx( L_mac0( L_tmp, subwin_fx[k + 1], subgain_fx[( i + 1 ) * num_join] ) ) ), 1 ); // Qx + move32(); + j = add( j, 1 ); + } + } + FOR( k = 0; k < join_length - length; k++ ) { - tmpi_R[i] = tmp_R[i + 4] * Hilbert_coeffs[hb_filter_stage][0 + offset] + tmp_R[i + 2] * Hilbert_coeffs[hb_filter_stage][2 + offset] + tmp_R[i] * Hilbert_coeffs[hb_filter_stage][4 + offset]; - - tmpi_I[i] = tmp_I[i + 4 + offset] * Hilbert_coeffs[hb_filter_stage + 1][0] + tmp_I[i + 2 + offset] * Hilbert_coeffs[hb_filter_stage + 1][2] + tmp_I[i + offset] * Hilbert_coeffs[hb_filter_stage + 1][4]; + mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], subgain_fx[( NUM_SHB_SUBGAINS - 1 ) * num_join] ); // Qx + move32(); + j = add( j, 1 ); } - } - else if ( HB_stage_id == 1 || HB_stage_id == 3 ) - { - for ( i = 0; i < length; i++ ) + FOR( k = 0; k < length; k++ ) { - tmpi_R[i + 4] = tmp_R[i] - tmpi_R[i + 2] * Hilbert_coeffs[hb_filter_stage][2] - tmpi_R[i] * Hilbert_coeffs[hb_filter_stage][4]; - - tmpi_I[i + 4] = tmp_I[i] - tmpi_I[i + 2] * Hilbert_coeffs[hb_filter_stage + 1][2] - tmpi_I[i] * Hilbert_coeffs[hb_filter_stage + 1][4]; + mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], mult_r( subwin_fx[length - k - 1], subgain_fx[( NUM_SHB_SUBGAINS - 1 ) * num_join] ) ); // Qx + move32(); + j = add( j, 1 ); } } - return; -} - -/*-------------------------------------------------------------------* - * flip_spectrum() - * - * - *-------------------------------------------------------------------*/ - -void flip_spectrum( - const float input[], /* i : input spectrum */ - float output[], /* o : output spectrum */ - const int16_t length /* i : vector length */ -) -{ - int16_t i; - - for ( i = 0; i < length; i = i + 2 ) + Word16 norm_shift = norm_l( frame_gain_fx ); + if ( frame_gain_fx == 0 ) { - output[i] = -input[i]; - output[i + 1] = input[i + 1]; + norm_shift = 31; + move16(); } - return; -} -#endif - -/*-------------------------------------------------------------------* - * flip_spectrum_and_decimby4() - * - * - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void flip_spectrum_and_decimby4( - const float input[], /* i : input spectrum */ - float output[], /* o : output spectrum */ - const int16_t length, /* i : vector length */ - float mem1[], /* i/o: memory */ - float mem2[], /* i/o: memory */ - const int16_t ramp_flag /* i : flag to trigger slow ramp-up of output following change of core (HQ to ACELP or 12k8 to 16k ACELP) */ -) -{ - int16_t i; - float factor, tmp[L_FRAME16k / 2]; - float input_change[L_FRAME16k]; + norm_shift = s_min( norm_shift, 14 ); + norm_shift = sub( norm_shift, 1 ); - if ( ramp_flag ) - { - factor = 4.0f / length; - for ( i = 0; i < length / 4; i = i + 2 ) - { - input_change[i] = -input[i] * ( i * factor ); - input_change[i + 1] = input[i + 1] * ( ( i + 1.0f ) * factor ); - } - } - else + *Q_new = add( *Q_inp, sub( norm_shift, 13 ) ); // Q_new = Q_inp + min(norm_shift,14) - 14; + move16(); + FOR( i = 0; i < L_SHB_LAHEAD; i++ ) { - i = 0; + overlap_fx[i] = L_shl( overlap_fx[i], sub( *Q_new, *Q_inp ) ); + move32(); } - for ( ; i < length; i = i + 2 ) + FOR( i = 0; i < l_shb_lahead; i++ ) { - input_change[i] = -input[i]; - input_change[i + 1] = input[i + 1]; + synSHB_fx[i] = Mpy_32_32( mod_syn_fx[i], Mpy_32_16_1( L_shl( frame_gain_fx, norm_shift ), win_fx[i] ) ); // Q_new + synSHB_fx[i] = L_add( synSHB_fx[i], overlap_fx[i] ); + synSHB_fx[i + l_shb_lahead] = Mpy_32_32( mod_syn_fx[i], L_shl( frame_gain_fx, norm_shift ) ); // Q_new + move32(); + move32(); + move32(); } - Decimate_allpass_steep( input_change, mem1, length, tmp ); - Decimate_allpass_steep( tmp, mem2, length / 2, output ); - - return; -} - -/*-------------------------------------------------------------------* - * GenShapedWBExcitation() - * - * Synthesize spectrally shaped highband excitation signal for the wideband - *-------------------------------------------------------------------*/ - -void GenShapedWBExcitation( - float *excSHB, /* o : synthesized shaped shb exctiation */ - const float *lpc_shb, /* i : lpc coefficients */ - float *exc4kWhtnd, /* o : whitened synthesized shb excitation */ - float *mem_csfilt, /* i/o: memory */ - float *mem_genSHBexc_filt_down1, /* i/o: memory */ - float *mem_genSHBexc_filt_down2, /* i/o: memory */ - float *mem_genSHBexc_filt_down3, /* i/o: memory */ - float *state_lpc_syn, /* i/o: memory */ - const int16_t coder_type, /* i : coding type */ - const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ - int16_t bwe_seed[], /* i/o: random number generator seed */ - const float voice_factors[], /* i : voicing factor */ - const int16_t uv_flag, /* i : unvoiced flag */ - const int16_t igf_flag ) -{ - int16_t i, j, k; - float wht_fil_mem[LPC_WHTN_ORDER_WB]; - float lpc_whtn[LPC_WHTN_ORDER_WB + 1]; - float R[LPC_WHTN_ORDER_WB + 2]; - float excTmp[L_FRAME16k]; - float excTmp2[L_FRAME16k / 4]; - float exc4k[L_FRAME16k / 4]; - float pow1, pow22, scale; - float excNoisyEnv[L_FRAME16k / 4]; - float csfilt_num2[1] = { 0.05f }; - float csfilt_den2[2] = { 1.0f, -0.96f }; - float temp1, temp2; - float ervec[LPC_WHTN_ORDER_WB + 2]; - float tmp_vfac; - float avg_voice_fac = 0.25f * sum_f( voice_factors, NB_SUBFR ); - - if ( igf_flag && ( coder_type == VOICED || avg_voice_fac > 0.35f ) ) - { - csfilt_num2[0] = 0.2f; - csfilt_den2[1] = -0.8f; - } - else if ( igf_flag && ( coder_type == UNVOICED || avg_voice_fac < 0.2f ) ) + FOR( ; i < l_frame; i++ ) { - csfilt_num2[0] = 0.01f; - csfilt_den2[1] = -0.99f; + synSHB_fx[i] = Mpy_32_32( mod_syn_fx[i], L_shl( frame_gain_fx, norm_shift ) ); // Q_new + move32(); } - set_f( wht_fil_mem, 0, LPC_WHTN_ORDER_WB ); - Decimate_allpass_steep( bwe_exc_extended, mem_genSHBexc_filt_down1, L_FRAME32k, excTmp ); - - flip_spectrum_and_decimby4( excTmp, exc4k, L_FRAME16k, mem_genSHBexc_filt_down2, mem_genSHBexc_filt_down3, 0 ); - - if ( uv_flag ) + FOR( ; i < l_frame + l_shb_lahead; i++ ) { - /* unvoiced signal */ - create_random_vector( exc4kWhtnd, L_FRAME16k / 4, bwe_seed ); - } - else - { - autocorr( exc4k, R, LPC_WHTN_ORDER_WB + 1, L_FRAME16k / 4, win_flatten_4k, 0, 1, 1 ); - - /* Ensure R[0] isn't zero when entering Levinson Durbin */ - R[0] = max( R[0], 1.0e-8f ); - for ( i = 0; i <= LPC_WHTN_ORDER_WB; i++ ) - { - R[i] = R[i] * wac[i]; - } - lev_dur( lpc_whtn, R, LPC_WHTN_ORDER_WB, ervec ); - - fir( exc4k, lpc_whtn, exc4kWhtnd, wht_fil_mem, L_FRAME16k / 4, LPC_WHTN_ORDER_WB, 0 ); - - /* Ensure pow1 is greater than zero when computing normalization */ - for ( i = 0, pow1 = 0.00001f; i < L_FRAME16k / 4; i++ ) - { - excTmp2[i] = (float) ( fabs( exc4kWhtnd[i] ) ); - pow1 += exc4kWhtnd[i] * exc4kWhtnd[i]; - } - - for ( i = 0; i < L_FRAME16k / 4; i++ ) - { - excNoisyEnv[i] = *mem_csfilt + csfilt_num2[0] * excTmp2[i]; - *mem_csfilt = -csfilt_den2[1] * excNoisyEnv[i]; - } - - create_random_vector( exc4k, L_FRAME16k / 4, bwe_seed ); - - /* Ensure pow22 is greater than zero when computing normalization */ - for ( i = 0, pow22 = 0.00001f; i < L_FRAME16k / 4; i++ ) - { - exc4k[i] *= excNoisyEnv[i]; - pow22 += exc4k[i] * exc4k[i]; - } - - if ( coder_type == UNVOICED || ( igf_flag && avg_voice_fac < 0.2f ) ) - { - scale = (float) sqrt( pow1 / pow22 ); - if ( pow22 == 0.f ) - { - scale = 0; - } - - for ( i = 0; i < L_FRAME16k / 4; i++ ) - { - exc4kWhtnd[i] = exc4k[i] * scale; - } - } - else - { - for ( i = 0, k = 0; i < 4; i++ ) - { - - if ( igf_flag && coder_type == VOICED ) - { - tmp_vfac = 2 * voice_factors[i]; - tmp_vfac = min( 1, tmp_vfac ); - } - else - { - tmp_vfac = voice_factors[i]; - } - - temp1 = root_a( tmp_vfac ); - temp2 = root_a_over_b( pow1 * ( 1.0f - tmp_vfac ), pow22 ); - - - for ( j = 0; j < L_FRAME16k / 16; j++, k++ ) - { - exc4kWhtnd[k] = temp1 * exc4kWhtnd[k] + temp2 * exc4k[k]; - } - } - } - } - - syn_filt( lpc_shb, LPC_SHB_ORDER_WB, exc4kWhtnd, excSHB, L_FRAME16k / 4, state_lpc_syn, 1 ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * GenWBSynth() - * - * Generate 16 KHz sampled highband component from synthesized highband - *-------------------------------------------------------------------*/ - -void GenWBSynth( - const float *input_synspeech, /* i : input synthesized speech */ - float *shb_syn_speech_16k, /* o : output highband compnent */ - float *state_lsyn_filt_shb1, /* i/o: memory */ - float *state_lsyn_filt_shb2 /* i/o: memory */ -) -{ - float speech_buf_16k1[L_FRAME16k], speech_buf_16k2[L_FRAME16k]; - - Interpolate_allpass_steep( input_synspeech, state_lsyn_filt_shb1, L_FRAME16k / 4, speech_buf_16k1 ); - - Interpolate_allpass_steep( speech_buf_16k1, state_lsyn_filt_shb2, L_FRAME16k / 2, speech_buf_16k2 ); - - flip_spectrum( speech_buf_16k2, shb_syn_speech_16k, L_FRAME16k ); - - return; -} - -/*-------------------------------------------------------------------* - * PostShortTerm() - * - * Short term processing - *-------------------------------------------------------------------*/ - -void PostShortTerm( - float *sig_in, /* i : input signal (pointer to current subframe */ - float *lpccoeff, /* i : LPC coefficients for current subframe */ - float *sig_out, /* o : postfiltered output */ - float *mem_stp, /* i/o: postfilter memory*/ - float *ptr_mem_stp, /* i/o: pointer to postfilter memory*/ - float *ptr_gain_prec, /* i/o: for gain adjustment*/ - float *mem_zero, /* i/o: null memory to compute h_st*/ - const float formant_fac /* i : Strength of post-filter [0,1] */ -) -{ - float apond1[LPC_SHB_ORDER + 1]; /* denominator coeff.*/ - float apond2[LONG_H_ST]; /* numerator coeff. */ - float sig_ltp[L_SUBFR16k + 1]; /* residual signal */ - float parcor0; - float g1, g2; - - set_f( apond1, 0, LPC_SHB_ORDER + 1 ); - set_f( apond2, 0, LONG_H_ST ); - set_f( sig_ltp, 0, L_SUBFR16k + 1 ); - - /* Obtain post-filter weights */ - g1 = GAMMA0 + GAMMA_SHARP * formant_fac; - g2 = GAMMA0 - GAMMA_SHARP * formant_fac; - - /* Compute weighted LPC coefficients */ - weight_a( lpccoeff, apond1, g1, LPC_SHB_ORDER ); - weight_a( lpccoeff, apond2, g2, LPC_SHB_ORDER ); - - /* Compute A(gamma2) residual */ - residu( apond2, LPC_SHB_ORDER, sig_in, sig_ltp + 1, L_SUBFR16k ); - - /* Save last output of 1/A(gamma1) */ - sig_ltp[0] = *ptr_mem_stp; - - /* Control short term pst filter gain and compute parcor0 */ - calc_st_filt( apond2, apond1, &parcor0, sig_ltp + 1, mem_zero, L_SUBFR16k, SWB_TBE ); - - /* 1/A(gamma1) filtering, mem_stp is updated */ - syn_filt( apond1, LPC_SHB_ORDER, sig_ltp + 1, sig_ltp + 1, L_SUBFR16k, mem_stp, 1 ); - - /* (1 + mu z-1) tilt filtering */ - filt_mu( sig_ltp, sig_out, parcor0, L_SUBFR16k, SWB_TBE ); - - /* gain control */ - scale_st_ivas( sig_in, sig_out, ptr_gain_prec, L_SUBFR16k, SWB_TBE ); - - return; -} - -/*-------------------------------------------------------------------* - * swb_formant_fac() - * - * Find strength of adaptive formant postfilter using tilt of the high - * band. The 2nd lpc coefficient is used as a tilt approximation. - *-------------------------------------------------------------------*/ - -/*! r: Formant filter strength [0,1] */ -float swb_formant_fac( - const float lpc_shb2, /* i : 2nd HB LPC coefficient */ - float *tilt_mem /* i/o: Tilt smoothing memory */ -) -{ - float formant_fac; - float tmp; - - /* Smoothen tilt value */ - tmp = 0.5f * (float) fabs( lpc_shb2 ) + 0.5f * *tilt_mem; - *tilt_mem = tmp; - - /* Map to PF strength */ - formant_fac = ( tmp - SWB_TILT_LOW ) * SWB_TILT_DELTA; - if ( formant_fac > 1.0f ) - { - formant_fac = 1.0f; - } - else if ( formant_fac < 0.0f ) - { - formant_fac = 0.0f; - } - - formant_fac = 1.0f - 0.5f * formant_fac; - - return formant_fac; -} - -void find_td_envelope( - const float inp[], /* i : input signal */ - const int16_t len, /* i : length of the input signal */ - const int16_t len_h, /* i : length of the MA filter */ - float mem_h[], /* i/o: memory of the MA filter, length len_h/2 */ - float out[] /* o : td envelope of the input signal */ -) -{ - int16_t k, K; - float buf_in[L_FRAME16k + MAX_LEN_MA_FILTER], *p_in, *p_out, *p_prev, w; - - assert( len > 0 && len <= L_FRAME16k ); - - K = (int16_t) ( len_h / 2 ); /* length of FIR filter memory = half of the total filter length */ - w = 1.0f / len_h; /* MA filtering coefficient */ - - /* copy filter memory to the input buffer */ - if ( mem_h != NULL ) - { - mvr2r( mem_h, buf_in, K ); - } - else - { - /* no memory available, use the first len_h/2 samples as memory */ - p_in = buf_in; - for ( k = 0; k < K; k++ ) - { - *p_in++ = (float) fabs( inp[k] ) * w; - } - } - - /* take the absolute value of the input signal and copy it to the input buffer */ - /* multiply each value by 1 / filter length */ - p_in = &buf_in[K]; - for ( k = 0; k < len; k++ ) - { - *p_in++ = (float) fabs( inp[k] ) * w; - } - - /* update filter memory from the end of the input buffer */ - if ( mem_h != NULL ) - { - mvr2r( &buf_in[len], mem_h, K ); - } - - /* do MA filtering */ - out[0] = sum_f( buf_in, len_h ); - p_out = &buf_in[0]; /* pointer to leaving sample */ - p_in = &buf_in[len_h]; /* pointer to entering sample*/ - for ( k = 1; k < len - K; k++ ) - { - out[k] = out[k - 1] - *p_out++ + *p_in++; - } - - /* use IIR filtering to extrapolate the last K samples */ - p_in = &buf_in[len - K]; - p_out = &out[len - K]; - p_prev = p_out - 1; - for ( k = 0; k < K; k++ ) - { - *p_out++ = 0.05f * ( *p_in++ ) + 0.95f * ( *p_prev++ ); - } - - return; -} - -/*-------------------------------------------------------------------* - * GenShapedSHBExcitation() - * - * Synthesize spectrally shaped highband excitation signal - *-------------------------------------------------------------------*/ - -void GenShapedSHBExcitation( - float *excSHB, /* o : synthesized shaped shb excitation */ - const float *lpc_shb, /* i : lpc coefficients */ - float *White_exc16k_FB, /* o : white excitation for the Fullband extension */ - float *mem_csfilt, /* i/o: memory */ - float *mem_genSHBexc_filt_down_shb, /* i/o: memory */ - float *state_lpc_syn, /* i/o: memory */ - const int16_t coder_type, /* i : coding type */ - const float *bwe_exc_extended, /* i : bandwidth extended excitation */ - int16_t bwe_seed[], /* i/o: random number generator seed */ - float voice_factors[], /* i : voicing factor */ - const int16_t extl, /* i : extension layer */ - float *tbe_demph, /* i/o: de-emphasis memory */ - float *tbe_premph, /* i/o: pre-emphasis memory */ - float *lpc_shb_sf, /* i : LP coefficients */ - float *shb_ener_sf, - float *shb_res_gshape, - float *shb_res, - int16_t *vf_ind, - const float formant_fac, /* i : Formant sharpening factor [0..1] */ - float fb_state_lpc_syn[], /* i/o: memory */ - float *fb_tbe_demph, /* i/o: fb de-emphasis memory */ - const int32_t total_brate, /* i : bitrate */ - const int16_t prev_bfi, /* i : previous frame was concealed */ - const int16_t element_mode, /* i : element mode */ - const int16_t flag_ACELP16k, /* i : ACELP@16kHz flag */ - float *nlExc16k, /* i/o: NL exc for IC-BWE */ - float *mixExc16k, /* i/o: exc spreading for IC-BWE */ - const int32_t extl_brate, /* i : extension layer bitarte */ - const int16_t MSFlag, /* i : Multi Source flag */ - float EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ - float *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ - float *prev_mix_factor, /* i/o: mixing factor in the previous frame */ - float *Env_error, /* o : error in SHB residual envelope modelling*/ - float Env_error_part[] /* o : per-segment error in SHB residual envelope modelling */ -) -{ - int16_t i, j, k; - float wht_fil_mem[LPC_WHTN_ORDER]; - float lpc_whtn[LPC_WHTN_ORDER + 1]; - float R[LPC_WHTN_ORDER + 2]; - float exc32k[L_FRAME32k], exc16k[L_FRAME16k]; - float pow1, pow22, scale, temp1, temp2; - float excTmp2[L_FRAME16k]; - int16_t nbSubFr; - float excNoisyEnv[L_FRAME16k]; - float csfilt_num2[1] = { 0.2f }; - float csfilt_den2[2] = { 1.0f, -0.8f }; - float varEnvShape; - float ervec[LPC_WHTN_ORDER + 2]; - float exc16kWhtnd[L_FRAME16k]; - float temp = 0.0f; - float *White_exc16k; - float voiceFacEst[NB_SUBFR16k]; - float syn_shb_ener_sf[4], tempSHB[80]; - float zero_mem[LPC_SHB_ORDER]; - float vf_tmp; - float White_exc16k_FB_temp[L_FRAME16k]; - float fb_deemph_fac = 0.48f; - double tempD; - float alpha, step, mem_csfilt_left, mem_csfilt_right, excNoisyEnvLeft[L_FRAME16k], excNoisyEnvRight[L_FRAME16k]; - int16_t cbsize; - float mix_factor, old_fact, new_fact, fact, old_scale, new_scale, step_scale; - float c0, c1, c2, c3, c4, c5, g1, g2, g, den; - float EnvWhiteExc16k[L_FRAME16k], EnvExc16kWhtnd[L_FRAME16k]; - float EnvWhiteExc16k_4k[L_FRAME4k], EnvExc16kWhtnd_4k[L_FRAME4k]; - int16_t flag_plosive; - float delta; - float c0_part[NUM_SHB_SUBGAINS], c1_part[NUM_SHB_SUBGAINS], c2_part[NUM_SHB_SUBGAINS], c3_part[NUM_SHB_SUBGAINS], c4_part[NUM_SHB_SUBGAINS], c5_part[NUM_SHB_SUBGAINS]; - - mix_factor = 0.0f; - - set_f( zero_mem, 0, LPC_SHB_ORDER ); - set_f( wht_fil_mem, 0, LPC_WHTN_ORDER ); - set_f( EnvWhiteExc16k_4k, 0, L_FRAME4k ); - set_f( EnvExc16kWhtnd_4k, 0, L_FRAME4k ); - - /* Mirror the spectrum */ - for ( i = 0; i < L_FRAME32k; i++ ) - { - exc32k[i] = ( ( i % 2 ) == 0 ) ? ( -bwe_exc_extended[i] ) : ( bwe_exc_extended[i] ); - } - - /* Decimate by 2 */ - Decimate_allpass_steep( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); - - autocorr( exc16k, R, LPC_WHTN_ORDER + 1, L_FRAME16k, win_flatten, 0, 1, 1 ); - - /* Ensure R[0] isn't zero when entering Levinson-Durbin */ - R[0] = max( R[0], 1.0e-8f ); - for ( i = 0; i <= LPC_WHTN_ORDER; i++ ) - { - R[i] = R[i] * wac[i]; - } - - /* Ensure R[0] isn't zero when entering Levinson-Durbin */ - R[0] += 1.0e-8f; - - lev_dur( lpc_whtn, R, LPC_WHTN_ORDER, ervec ); - - fir( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0 ); - - if ( extl_brate >= SWB_TBE_2k8 ) - { - for ( i = 0; i < L_FRAME16k; i++ ) - { - exc16kWhtnd[i] *= shb_res_gshape[(int16_t) ( i / 80 )]; - } - } - - for ( k = 0, pow1 = 0.00001f; k < L_FRAME16k; k++ ) - { - excTmp2[k] = (float) ( fabs( exc16kWhtnd[k] ) ); - pow1 += exc16kWhtnd[k] * exc16kWhtnd[k]; - } - - if ( !flag_ACELP16k ) - { - varEnvShape = mean( voice_factors, NB_SUBFR ); - } - else - { - varEnvShape = mean( voice_factors, NB_SUBFR16k ); - } - - if ( extl == FB_TBE ) - { - fb_deemph_fac = max( ( 0.68f - (float) pow( varEnvShape, 3 ) ), 0.48f ); - } - - varEnvShape = 1.09875f - 0.49875f * varEnvShape; - varEnvShape = min( max( varEnvShape, 0.6f ), 0.999f ); - csfilt_num2[0] = 1.0f - varEnvShape; - csfilt_den2[1] = -varEnvShape; - - if ( element_mode == EVS_MONO && *mem_csfilt == 0 && ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) ) - { - /* pre-init smoothing avoid energy drop outs */ - float tmp_scale = 0; - for ( i = 0; i < L_SUBFR16k / 4; i++ ) - { - tmp_scale += excTmp2[i]; - } - - /* don't apply for FB in case the FB start-frame was potentially lost - White_exc16k is very sensitive to enery mismatch between enc - dec */ - /* rather stick to the more conservative approach, to avoid potential clippings */ - if ( !( prev_bfi && extl == FB_TBE ) ) - { - /* use weak smoothing for 1st frame after switching to make filter recover more quickly */ - varEnvShape = 0.8f; - csfilt_num2[0] = 1.0f - varEnvShape; - csfilt_den2[1] = -varEnvShape; - } - *mem_csfilt = varEnvShape * ( tmp_scale / ( L_SUBFR16k / 4 ) ); - } - - if ( MSFlag > 0 ) - { - varEnvShape = 0.995f; - csfilt_num2[0] = 1.0f - varEnvShape; - csfilt_den2[1] = -varEnvShape; - } - - White_exc16k = exc16k; - - /* Track the low band envelope */ - if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) - { - if ( extl_brate != SWB_TBE_1k10 && extl_brate != SWB_TBE_1k75 ) - { - mem_csfilt_left = 0.0f; - mem_csfilt_right = 0.0f; - for ( k = 0; k < L_FRAME16k; k++ ) - { - excNoisyEnvLeft[k] = mem_csfilt_left + csfilt_num2[0] * excTmp2[k]; - mem_csfilt_left = -csfilt_den2[1] * excNoisyEnvLeft[k]; - excNoisyEnvRight[L_FRAME16k - k - 1] = mem_csfilt_right + csfilt_num2[0] * excTmp2[L_FRAME16k - k - 1]; - mem_csfilt_right = -csfilt_den2[1] * excNoisyEnvRight[L_FRAME16k - k - 1]; - } - - alpha = 0.0f; - step = 1.0f / L_FRAME16k; - for ( k = 0; k < L_FRAME16k; k++ ) - { - excNoisyEnv[k] = alpha * excNoisyEnvLeft[k] + ( 1 - alpha ) * excNoisyEnvRight[k]; - alpha += step; - } - } - } - else - { - for ( k = 0; k < L_FRAME16k; k++ ) - { - excNoisyEnv[k] = *mem_csfilt + csfilt_num2[0] * excTmp2[k]; - *mem_csfilt = -csfilt_den2[1] * excNoisyEnv[k]; - } - } - - if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) - { - /* generate gaussian (white) excitation */ - for ( k = 0; k < L_FRAME16k; k++ ) - { - White_exc16k[k] = (float) own_random( &bwe_seed[0] ); - } - - /* normalize the amplitude of the gaussian excitation to that of the LB exc. */ - pow22 = POW_EXC16k_WHTND; - v_multc( White_exc16k, (float) sqrt( pow1 / pow22 ), White_exc16k, L_FRAME16k ); - } - else - { - create_random_vector( White_exc16k, L_FRAME, bwe_seed ); - create_random_vector( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); - - for ( k = 0, pow22 = 0.00001f; k < L_FRAME16k; k++ ) - { - White_exc16k[k] *= excNoisyEnv[k]; - pow22 += White_exc16k[k] * White_exc16k[k]; - } - } - - flag_plosive = 0; - - if ( extl_brate >= SWB_TBE_2k8 || extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) - { - if ( *vf_ind == 20 ) /* encoder side */ - { - if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) - { - /* calculate TD envelopes of exc16kWhtnd and White_exc16k */ - find_td_envelope( White_exc16k, L_FRAME16k, 20, NULL, EnvWhiteExc16k ); - find_td_envelope( exc16kWhtnd, L_FRAME16k, 20, NULL, EnvExc16kWhtnd ); - - for ( k = 0; k < L_FRAME4k; k++ ) - { - EnvWhiteExc16k_4k[k] = EnvWhiteExc16k[4 * k]; - EnvExc16kWhtnd_4k[k] = EnvExc16kWhtnd[4 * k]; - } - - /* calculate the optimal mix factor */ - c0 = c1 = c2 = c3 = c4 = c5 = 0.0f; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - c0_part[i] = sum2_f( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - c1_part[i] = -2.0f * dotp( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - c2_part[i] = sum2_f( &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - c3_part[i] = -2.0f * dotp( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - c4_part[i] = 2.0f * dotp( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], &EnvWhiteExc16k_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - c5_part[i] = sum2_f( &EnvSHBres_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); - - c0 += c0_part[i]; - c1 += c1_part[i]; - c2 += c2_part[i]; - c3 += c3_part[i]; - c4 += c4_part[i]; - c5 += c5_part[i]; - } - - den = 4.0f * c0 * c2 - c4 * c4; - g1 = ( c3 * c4 - 2 * c1 * c2 ) / den; - g2 = ( c1 * c4 - 2 * c0 * c3 ) / den; - - *Env_error = 0.0f; - flag_plosive = 0; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - Env_error_part[i] = c5_part[i] + g1 * g1 * c0_part[i] + g1 * c1_part[i] + g2 * g2 * c2_part[i] + g2 * c3_part[i] + g1 * g2 * c4_part[i]; - *Env_error += Env_error_part[i]; - - if ( Env_error_part[i] > THR_ENV_ERROR_PLOSIVE ) - { - /* envelope error is too high -> likely a plosive */ - flag_plosive = 1; - } - } - - if ( flag_plosive ) - { - /* plosive detected -> set the mixing factor to 0 */ - *vf_ind = 0; - mix_factor = 0.0f; - } - else - { - /* normalize gain */ - g = g2 / ( g1 + g2 ); - - /* quantization of the mixing factor */ - cbsize = 1 << NUM_BITS_SHB_VF; - delta = 1.0f / ( cbsize - 1 ); - if ( g > 1.0f ) - { - g = 1.0f; - } - else if ( g < delta ) - { - /* prevent low gains to be quantized to 0 as this is reserved for plosives */ - g = delta; - } - - *vf_ind = usquant( g, &mix_factor, 0.0f, 1.0f / ( cbsize - 1 ), cbsize ); - } - } - else - { - Estimate_mix_factors( shb_res, exc16kWhtnd, White_exc16k, pow1, pow22, voiceFacEst, vf_ind ); - temp = ( voiceFacEst[0] > 0.7f ) ? 1.0f : 0.8f; - } - } - else /* decoder side */ - { - if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) - { - if ( *vf_ind == 0 ) - { - mix_factor = 0.0f; - flag_plosive = 1; - } - else - { - mix_factor = usdequant( *vf_ind, 0.0f, 1.0f / ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); - } - } - else - { - temp = ( ( *vf_ind * 0.125f ) > 0.7f ) ? 1.0f : 0.8f; - } - } - - if ( extl_brate != SWB_TBE_1k10 && extl_brate != SWB_TBE_1k75 ) - { - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - voice_factors[i] *= temp; - } - } - } - - if ( element_mode >= IVAS_CPE_DFT && nlExc16k != NULL ) - { - /* save buffers for IC-BWE */ - mvr2r( exc16kWhtnd, nlExc16k, L_FRAME16k ); - v_multc( White_exc16k, (float) sqrt( pow1 / pow22 ), mixExc16k, L_FRAME16k ); - } - - mvr2r( White_exc16k, White_exc16k_FB, L_FRAME16k ); - deemph( White_exc16k, PREEMPH_FAC_FLT, L_FRAME16k, tbe_demph ); - - if ( extl_brate == SWB_TBE_1k10 || extl_brate == SWB_TBE_1k75 ) - { - if ( !flag_plosive ) /* use only LB excitation in case of plosives */ - { - /* re-scale gaussian excitation at the beginning to gradually move from old energy to new energy */ - old_scale = (float) sqrt( *prev_pow_exc16kWhtnd / pow1 ); - new_scale = 1.0f; - step_scale = ( new_scale - old_scale ) / ( L_FRAME16k / 2 ); - scale = old_scale; - - /* interpolate between the old and the new value of the mixing factor */ - old_fact = *prev_mix_factor; - new_fact = mix_factor; - step = ( new_fact - old_fact ) / ( L_FRAME16k / 2 ); - fact = old_fact; - - /* mixing of LB and gaussian excitation in the first half of the frame */ - for ( k = 0; k < L_FRAME16k / 2; k++ ) - { - exc16kWhtnd[k] = (float) fact * ( White_exc16k[k] * scale ) + (float) ( 1 - fact ) * exc16kWhtnd[k]; - fact += step; - scale += step_scale; - } - - /* mixing of LB and gaussian excitation in the second half of the frame */ - for ( ; k < L_FRAME16k; k++ ) - { - exc16kWhtnd[k] = (float) new_fact * White_exc16k[k] + (float) ( 1 - new_fact ) * exc16kWhtnd[k]; - } - } - preemph( exc16kWhtnd, PREEMPH_FAC_FLT, L_FRAME16k, tbe_premph ); - } - else - { - if ( coder_type == UNVOICED || MSFlag == 1 ) - { - scale = (float) sqrt( pow1 / pow22 ); - if ( pow22 == 0.f ) - { - scale = 0; - } - for ( k = 0; k < L_FRAME16k; k++ ) - { - exc16kWhtnd[k] = White_exc16k[k] * scale; - } - - preemph( exc16kWhtnd, PREEMPH_FAC_FLT, L_FRAME16k, tbe_premph ); - } - else - { - nbSubFr = ( extl_brate < SWB_TBE_2k8 ) ? NB_SUBFR : NB_SUBFR16k; /* note: this condition is designed based on TBE bitrate rather than internal sampling rate */ - - for ( i = 0, k = 0; i < nbSubFr; i++ ) - { - if ( coder_type == VOICED && extl_brate < SWB_TBE_2k8 ) - { - temp = (float) sqrt( voice_factors[i] ); - temp1 = (float) sqrt( temp ); - temp2 = (float) sqrt( ( pow1 * ( 1.0f - temp ) ) / pow22 ); - if ( pow22 == 0.f ) - { - temp2 = 0; - } - } - else - { - /* Adjust noise mixing for formant sharpening filter */ - vf_tmp = SWB_NOISE_MIX_FAC * formant_fac; - vf_tmp = voice_factors[i] * ( 1.0f - vf_tmp ); - - temp1 = (float) sqrt( vf_tmp ); - temp2 = (float) sqrt( ( pow1 * ( 1.0f - vf_tmp ) ) / pow22 ); - if ( pow22 == 0.f ) - { - temp2 = 0; - } - } - - for ( j = 0; j < L_FRAME16k / nbSubFr; j++, k++ ) - { - exc16kWhtnd[k] = temp1 * exc16kWhtnd[k] + temp2 * White_exc16k[k]; - } - - temp = (float) sqrt( 1.0f - voice_factors[i] ); - temp = PREEMPH_FAC_FLT * temp / ( temp1 + temp ); - - preemph( &exc16kWhtnd[i * L_FRAME16k / nbSubFr], temp, L_FRAME16k / nbSubFr, tbe_premph ); - } - } - } - - if ( extl_brate < SWB_TBE_2k8 ) - { - syn_filt( lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); - } - else - { - set_f( zero_mem, 0, LPC_SHB_ORDER ); - syn_filt( lpc_shb_sf, LPC_SHB_ORDER, exc16kWhtnd, tempSHB, 80, zero_mem, 1 ); - syn_shb_ener_sf[0] = 0.125f * sum2_f( tempSHB, 80 ); - syn_filt( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 80, tempSHB, 80, zero_mem, 1 ); - syn_shb_ener_sf[1] = 0.125f * sum2_f( tempSHB, 80 ); - syn_filt( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 160, tempSHB, 80, zero_mem, 1 ); - syn_shb_ener_sf[2] = 0.125f * sum2_f( tempSHB, 80 ); - syn_filt( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 240, tempSHB, 80, zero_mem, 1 ); - syn_shb_ener_sf[3] = 0.125f * sum2_f( tempSHB, 80 ); - - if ( total_brate <= MAX_ACELP_BRATE ) - { - tempSHB[0] = (float) ( shb_ener_sf[0] ) / ( syn_shb_ener_sf[0] + syn_shb_ener_sf[1] + syn_shb_ener_sf[2] + syn_shb_ener_sf[3] ); - tempD = sqrt( tempSHB[0] ); - - for ( i = 0; i < L_FRAME16k; i++ ) - { - exc16kWhtnd[i] = (float) ( exc16kWhtnd[i] * tempD ); - } - } - - syn_filt( lpc_shb_sf, LPC_SHB_ORDER, exc16kWhtnd, excSHB, 80, state_lpc_syn, 1 ); - syn_filt( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 80, excSHB + 80, 80, state_lpc_syn, 1 ); - syn_filt( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 160, excSHB + 160, 80, state_lpc_syn, 1 ); - syn_filt( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, exc16kWhtnd + 240, excSHB + 240, 80, state_lpc_syn, 1 ); - } - - if ( extl == FB_TBE ) - { - syn_filt( lpc_shb, LPC_SHB_ORDER, White_exc16k_FB, White_exc16k_FB_temp, L_FRAME16k, fb_state_lpc_syn, 1 ); - - for ( i = 0; i < L_FRAME16k; i++ ) - { - White_exc16k_FB_temp[i] *= cos_fb_exc[i % 32]; - } - - flip_spectrum( White_exc16k_FB_temp, White_exc16k_FB, L_FRAME16k ); - - deemph( White_exc16k_FB, fb_deemph_fac, L_FRAME16k, fb_tbe_demph ); - } - else - { - for ( i = 0; i < L_FRAME16k; i++ ) - { - White_exc16k_FB[i] = 0.0f; - } - } - - *prev_pow_exc16kWhtnd = pow1; - *prev_mix_factor = mix_factor; - - return; -} - -/*-------------------------------------------------------------------* - * GenSHBSynth() - * - * Generate 32 KHz sampled highband component from synthesized highband - *-------------------------------------------------------------------*/ - -void GenSHBSynth( - const float *input_synspeech, /* i : input synthesized speech */ - float *shb_syn_speech_32k, /* o : output highband component */ - float Hilbert_Mem[], /* i/o: memory */ - float state_lsyn_filt_shb_local[], /* i/o: memory */ - const int16_t L_frame, /* i : ACELP frame length */ - int16_t *syn_dm_phase ) -{ - float speech_buf_32k[L_FRAME32k]; - int16_t i; - - Interpolate_allpass_steep( input_synspeech, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k ); - - if ( L_frame == L_FRAME ) - { - flip_and_downmix_generic( speech_buf_32k, shb_syn_speech_32k, L_FRAME32k, Hilbert_Mem, Hilbert_Mem + HILBERT_ORDER1, Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), syn_dm_phase ); - } - else - { - for ( i = 0; i < L_FRAME32k; i++ ) - { - shb_syn_speech_32k[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_32k[i] ) : ( speech_buf_32k[i] ); - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void GenSHBSynth_fx_32( - const Word32 *input_synspeech, /* i : input synthesized speech Qx*/ - Word32 *shb_syn_speech_32k, /* o : output highband component Qx*/ - Word32 Hilbert_Mem[], /* i/o: memory Qx*/ - Word32 state_lsyn_filt_shb_local[], /* i/o: memory Qx*/ - const Word16 L_frame, /* i : ACELP frame length */ - Word16 *syn_dm_phase ) -{ - Word32 speech_buf_32k[L_FRAME32k]; - Word16 i; - - Interpolate_allpass_steep_32( input_synspeech, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k ); - - IF( EQ_16( L_frame, L_FRAME ) ) - { - flip_and_downmix_generic_fx_32( speech_buf_32k, shb_syn_speech_32k, L_FRAME32k, Hilbert_Mem, Hilbert_Mem + HILBERT_ORDER1, Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), syn_dm_phase ); - } - ELSE - { - FOR( i = 0; i < L_FRAME32k; i++ ) - { - // shb_syn_speech_32k[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_32k[i] ) : ( speech_buf_32k[i] ); - IF( i % 2 == 0 ) - { - shb_syn_speech_32k[i] = L_negate( speech_buf_32k[i] ); // Qx - } - ELSE - { - shb_syn_speech_32k[i] = speech_buf_32k[i]; // Qx - } - move32(); - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ScaleShapedSHB() - * - * - *-------------------------------------------------------------------*/ - -void ScaleShapedSHB( - const int16_t length, /* i : SHB overlap length */ - float *synSHB, /* i/o: synthesized shb signal */ - float *overlap, /* i/o: buffer for overlap-add */ - const float *subgain, /* i : subframe gain */ - const float frame_gain, /* i : frame gain */ - const float *win, /* i : window */ - const float *subwin /* i : subframes window */ -) -{ - const int16_t *skip; - int16_t i, j, k, l_shb_lahead, l_frame; - int16_t join_length, num_join; - float mod_syn[L_FRAME16k + L_SHB_LAHEAD], sum_gain; - - /* initilaization */ - l_frame = L_FRAME16k; - l_shb_lahead = L_SHB_LAHEAD; - skip = skip_bands_SWB_TBE; - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - skip = skip_bands_WB_TBE; - l_frame = L_FRAME16k / 4; - l_shb_lahead = L_SHB_LAHEAD / 4; - } - - /* apply gain for each subframe, and store noise output signal using overlap-add */ - set_f( mod_syn, 0, l_frame + l_shb_lahead ); - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - sum_gain = 0; - for ( k = 0; k < length / 2; k++ ) - { - sum_gain = subwin[2 * k + 2] * subgain[0]; - mod_syn[skip[0] + k] = synSHB[skip[0] + k] * sum_gain; - mod_syn[skip[0] + k + length / 2] = synSHB[skip[0] + k + length / 2] * subgain[0]; - } - for ( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) - { - for ( k = 0; k < length; k++ ) - { - sum_gain = subwin[k + 1] * subgain[i] + subwin[length - k - 1] * subgain[i - 1]; - mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; - } - } - for ( k = 0; k < length / 2; k++ ) - { - sum_gain = subwin[length - 2 * k - 2] * subgain[i - 1]; - mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; - } - } - else - { - num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; - join_length = num_join * length; - for ( k = 0, j = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * subwin[k + 1] * subgain[0]; - j++; - } - for ( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) - { - for ( k = 0; k < join_length - length; k++ ) - { - mod_syn[j] = synSHB[j] * subgain[i * num_join]; - j++; - } - - for ( k = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * ( subwin[length - k - 1] * subgain[i * num_join] + subwin[k + 1] * subgain[( i + 1 ) * num_join] ); - j++; - } - } - for ( k = 0; k < join_length - length; k++ ) - { - mod_syn[j] = synSHB[j] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; - j++; - } - for ( k = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * subwin[length - k - 1] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; - j++; - } - } - - for ( i = 0; i < l_shb_lahead; i++ ) - { - synSHB[i] = mod_syn[i] * win[i] * frame_gain; - synSHB[i] += overlap[i]; - synSHB[i + l_shb_lahead] = mod_syn[i] * frame_gain; - } - - for ( ; i < l_frame; i++ ) - { - synSHB[i] = mod_syn[i] * frame_gain; - } - - for ( ; i < l_frame + l_shb_lahead; i++ ) - { - overlap[i - l_frame] = mod_syn[i] * win[l_frame + l_shb_lahead - 1 - i] * frame_gain; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void ScaleShapedSHB_32( - const Word16 length, /* i : SHB overlap length */ - Word32 *synSHB_fx, /* i/o: synthesized shb signal Q_inp/Q_new */ - Word32 *overlap_fx, /* i/o: buffer for overlap-add Q_inp/Q_new */ - const Word16 *subgain_fx, /* i : subframe gain Q15 */ - const Word32 frame_gain_fx, /* i : frame gain Q18*/ - const Word16 *win_fx, /* i : window Q15 */ - const Word16 *subwin_fx, /* i : subframes window Q15 */ - Word16 *Q_inp, - Word16 *Q_new ) -{ - const Word16 *skip; - Word16 i, j, k, l_shb_lahead, l_frame; - Word16 join_length, num_join; - Word32 mod_syn_fx[L_FRAME16k + L_SHB_LAHEAD], L_tmp; - Word16 sum_gain_fx; - - /* initilaization */ - l_frame = L_FRAME16k; - l_shb_lahead = L_SHB_LAHEAD; - move16(); - move16(); - skip = skip_bands_SWB_TBE; - - IF( EQ_16( length, SHB_OVERLAP_LEN / 2 ) ) - { - skip = skip_bands_WB_TBE; - l_frame = L_FRAME16k / 4; - l_shb_lahead = L_SHB_LAHEAD / 4; - move16(); - move16(); - } - - /* apply gain for each subframe, and store noise output signal using overlap-add */ - set32_fx( mod_syn_fx, 0, l_frame + l_shb_lahead ); - - IF( EQ_16( length, SHB_OVERLAP_LEN / 2 ) ) - { - sum_gain_fx = 0; - move16(); - FOR( k = 0; k < shr( length, 1 ); k++ ) - { - sum_gain_fx = mult_r( subwin_fx[2 * k + 2], subgain_fx[0] ); - mod_syn_fx[skip[0] + k] = Mpy_32_16_1( synSHB_fx[skip[0] + k], sum_gain_fx ); - move32(); // Qx - mod_syn_fx[skip[0] + k + length / 2] = Mpy_32_16_1( synSHB_fx[skip[0] + k + length / 2], subgain_fx[0] ); // Qx - move32(); - } - FOR( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) - { - FOR( k = 0; k < length; k++ ) - { - L_tmp = L_mult0( subwin_fx[k + 1], subgain_fx[i] ); - sum_gain_fx = round_fx( L_mac0( L_tmp, subwin_fx[length - k - 1], subgain_fx[i - 1] ) ); - mod_syn_fx[skip[i] + k] = L_shl( Mpy_32_16_1( synSHB_fx[skip[i] + k], sum_gain_fx ), 1 ); // Qx - move32(); - } - } - FOR( k = 0; k < shr( length, 1 ); k++ ) - { - sum_gain_fx = mult_r( subwin_fx[length - k * 2 - 2], subgain_fx[i - 1] ); - mod_syn_fx[skip[i] + k] = Mpy_32_16_1( synSHB_fx[skip[i] + k], sum_gain_fx ); // Qx - move32(); - } - } - ELSE - { - num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; - join_length = i_mult( num_join, length ); - j = 0; - move16(); - move16(); - FOR( k = 0; k < length; k++ ) - { - mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], mult_r( subwin_fx[k + 1], subgain_fx[0] ) ); // Qx - move32(); - j = add( j, 1 ); - } - FOR( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) - { - FOR( k = 0; k < join_length - length; k++ ) - { - mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], subgain_fx[i * num_join] ); // Qx - move32(); - j = add( j, 1 ); - } - - FOR( k = 0; k < length; k++ ) - { - L_tmp = L_mult0( subwin_fx[length - k - 1], subgain_fx[i * num_join] ); - mod_syn_fx[j] = L_shl( Mpy_32_16_1( synSHB_fx[j], round_fx( L_mac0( L_tmp, subwin_fx[k + 1], subgain_fx[( i + 1 ) * num_join] ) ) ), 1 ); // Qx - move32(); - j = add( j, 1 ); - } - } - FOR( k = 0; k < join_length - length; k++ ) - { - mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], subgain_fx[( NUM_SHB_SUBGAINS - 1 ) * num_join] ); // Qx - move32(); - j = add( j, 1 ); - } - FOR( k = 0; k < length; k++ ) - { - mod_syn_fx[j] = Mpy_32_16_1( synSHB_fx[j], mult_r( subwin_fx[length - k - 1], subgain_fx[( NUM_SHB_SUBGAINS - 1 ) * num_join] ) ); // Qx - move32(); - j = add( j, 1 ); - } - } - - Word16 norm_shift = norm_l( frame_gain_fx ); - if ( frame_gain_fx == 0 ) - { - norm_shift = 31; - move16(); - } - - norm_shift = s_min( norm_shift, 14 ); - norm_shift = sub( norm_shift, 1 ); - - *Q_new = add( *Q_inp, sub( norm_shift, 13 ) ); // Q_new = Q_inp + min(norm_shift,14) - 14; - move16(); - FOR( i = 0; i < L_SHB_LAHEAD; i++ ) - { - overlap_fx[i] = L_shl( overlap_fx[i], sub( *Q_new, *Q_inp ) ); - move32(); - } - - FOR( i = 0; i < l_shb_lahead; i++ ) - { - synSHB_fx[i] = Mpy_32_32( mod_syn_fx[i], Mpy_32_16_1( L_shl( frame_gain_fx, norm_shift ), win_fx[i] ) ); // Q_new - synSHB_fx[i] = L_add( synSHB_fx[i], overlap_fx[i] ); - synSHB_fx[i + l_shb_lahead] = Mpy_32_32( mod_syn_fx[i], L_shl( frame_gain_fx, norm_shift ) ); // Q_new - move32(); - move32(); - move32(); - } - - FOR( ; i < l_frame; i++ ) - { - synSHB_fx[i] = Mpy_32_32( mod_syn_fx[i], L_shl( frame_gain_fx, norm_shift ) ); // Q_new - move32(); - } - - FOR( ; i < l_frame + l_shb_lahead; i++ ) - { - synSHB_fx[i] = L_shl( synSHB_fx[i], sub( *Q_new, *Q_inp ) ); - overlap_fx[i - l_frame] = Mpy_32_32( mod_syn_fx[i], Mpy_32_16_1( L_shl( frame_gain_fx, norm_shift ), win_fx[l_frame + l_shb_lahead - 1 - i] ) ); // Q_new - move32(); - move32(); - } - - *Q_inp = *Q_new; - move16(); - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * non_linearity() - * - * Apply a non linearity to the SHB excitation - * -------------------------------------------------------------------*/ - -void non_linearity( - const float input[], /* i : input signal */ - float output[], /* o : output signal */ - float old_bwe_exc_extended[], /* i/o: memory bugffer */ - const int16_t length, /* i : input length */ - float *prev_scale, /* i/o: memory */ - const int16_t coder_type, /* i : Coder Type */ - const float *voice_factors, /* i : Voice Factors */ - const int16_t L_frame /* i : ACELP frame length */ -) -{ - int16_t i, j; - - float max_val = 0.0; - float scale, temp; - float scale_step; - float *p_out; - - int16_t en_abs = 0; - float v_fac = 0, ths; - int16_t nframes; - - if ( L_frame == L_FRAME16k ) - { - nframes = 5; - ths = 0.87f; - } - else - { - nframes = 4; - ths = 0.94f; - } - - for ( i = 0; i < nframes; i++ ) - { - v_fac += voice_factors[i]; - } - v_fac /= nframes; - - if ( coder_type == VOICED && v_fac > ths ) - { - en_abs = 1; - } - - p_out = output + NL_BUFF_OFFSET; /* NL_BUFF_OFFSET = 12 */ - /* update buffer memory */ - mvr2r( old_bwe_exc_extended, output, NL_BUFF_OFFSET ); - - for ( i = j = 0; i < length / 2; i++ ) - { - if ( ( temp = (float) fabs( input[i] ) ) > max_val ) - { - max_val = temp; - j = i; - } - } - - if ( max_val > 1.0f ) - { - scale = 0.67f / max_val; - } - else - { - scale = 0.67f; - } - - - if ( *prev_scale <= 0.0 || *prev_scale > 1024.0f * scale ) - { - scale_step = 1.0; - *prev_scale = scale; - } - else - { - scale_step = 1.0f; - if ( j != 0 ) - { - scale_step = (float) exp( 1.0f / (float) j * (float) log( scale / *prev_scale ) ); - } - } - - for ( i = 0; i < length / 2; i++ ) - { - if ( input[i] >= 0.0 ) - { - *p_out++ = ( input[i] * input[i] ) * *prev_scale; - } - else - { - if ( en_abs ) - { - *p_out++ = 1.0f * ( input[i] * input[i] ) * *prev_scale; - } - else - { - *p_out++ = -1.0f * ( input[i] * input[i] ) * *prev_scale; - } - } - - if ( i < j ) - { - *prev_scale *= scale_step; - } - } - - max_val = 0.0f; - for ( i = j = length / 2; i < length; i++ ) - { - if ( ( temp = (float) fabs( input[i] ) ) > max_val ) - { - max_val = temp; - j = i; - } - } - - if ( max_val > 1.0f ) - { - scale = 0.67f / max_val; - } - else - { - scale = 0.67f; - } - - - if ( *prev_scale <= 0.0 || *prev_scale > 1024.0f * scale ) - { - scale_step = 1.0; - *prev_scale = scale; - } - else - { - scale_step = 1.0f; - if ( j != length / 2 ) - { - scale_step = (float) exp( 1.0f / (float) ( j - length / 2 ) * (float) log( scale / *prev_scale ) ); - } - } - - for ( i = length / 2; i < length; i++ ) - { - if ( input[i] >= 0.0 ) - { - *p_out++ = ( input[i] * input[i] ) * *prev_scale; - } - else - { - if ( en_abs ) - { - *p_out++ = 1.0f * ( input[i] * input[i] ) * *prev_scale; - } - else - { - *p_out++ = -1.0f * ( input[i] * input[i] ) * *prev_scale; - } - } - - if ( i < j ) - { - *prev_scale *= scale_step; - } - } - - /* update buffer memory */ - mvr2r( output + L_FRAME32k, old_bwe_exc_extended, NL_BUFF_OFFSET ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * create_random_vector() - * - * creates random number vector - * -------------------------------------------------------------------*/ - -void create_random_vector( - float output[], /* o : output random vector */ - const int16_t length, /* i : length of random vector */ - int16_t seed[] /* i/o: start seed */ -) -{ - int16_t i, j, k; - float scale1, scale2; - - j = (int16_t) ( own_random( &seed[0] ) * 0.0078f ); - j = abs( j ) & 0xff; - k = (int16_t) ( own_random( &seed[1] ) * 0.0078f ); - k = abs( k ) & 0xff; - - while ( k == j ) - { - k = (int16_t) ( own_random( &seed[1] ) * 0.0078f ); - k = abs( k ) & 0xff; - } - - if ( own_random( &seed[0] ) < 0 ) - { - scale1 = -563.154f; /* -200.00f * 0.35f/0.1243f; */ - } - else - { - scale1 = 563.154f; /* 200.00f * 0.35f/0.1243f; */ - } - - if ( own_random( &seed[1] ) < 0 ) - { - scale2 = -225.261f; /* -80.00f * 0.35f/0.1243f; */ - } - else - { - scale2 = 225.261f; /* 80.00f * 0.35f/0.1243f; */ - } - - for ( i = 0; i < length; i++, j++, k++ ) - { - j &= 0xff; - k &= 0xff; - output[i] = scale1 * gaus_dico_swb[j] + scale2 * gaus_dico_swb[k]; - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * interp_code_5over2() - * - * Used to interpolate the excitation from the core sample rate - * of 12.8 kHz to 32 kHz. - * Simple linear interpolator - No need for precision here. - *-------------------------------------------------------------------*/ - -void interp_code_5over2( - const float inp_code[], /* i : input vector */ - float interp_code[], /* o : output vector */ - const int16_t inp_length /* i : length of input vector */ -) -{ - int16_t i, kk, kkp1; - const float factor_i[5] = { 0.2f, 0.6f, 1.0f, 0.6f, 0.2f }; - const float factor_j[5] = { 0.8f, 0.4f, 0.0f, 0.4f, 0.8f }; - - interp_code[0] = inp_code[0]; - interp_code[1] = inp_code[0] * factor_i[3] + inp_code[1] * factor_j[3]; - interp_code[2] = inp_code[0] * factor_i[4] + inp_code[1] * factor_j[4]; - - for ( i = 3, kk = 1, kkp1 = 2; i < ( inp_length - 2 ) * HIBND_ACB_L_FAC; i += 5, kk++, kkp1++ ) - { - interp_code[i] = inp_code[kk] * factor_j[0] + inp_code[kkp1] * factor_i[0]; - interp_code[i + 1] = inp_code[kk] * factor_j[1] + inp_code[kkp1] * factor_i[1]; - interp_code[i + 2] = inp_code[kkp1] * factor_i[2]; - kk++; - kkp1++; - interp_code[i + 3] = inp_code[kk] * factor_i[3] + inp_code[kkp1] * factor_j[3]; - interp_code[i + 4] = inp_code[kk] * factor_i[4] + inp_code[kkp1] * factor_j[4]; - } - - interp_code[i] = inp_code[kk] * factor_j[0]; - interp_code[i + 1] = inp_code[kk] * factor_j[1]; - - return; -} - -/*-------------------------------------------------------------------* - * interp_code_4over2() - * - * Used to interpolate the excitation from the core sample rate - * of 16 kHz to 32 kHz. - * Simple linear interpolator - No need for precision here. - *-------------------------------------------------------------------*/ - -void interp_code_4over2( - const float inp_code[], /* i : input vector */ - float interp_code[], /* o : output vector */ - const int16_t inp_length /* i : length of input vector */ -) -{ - int16_t i, j; - for ( i = j = 0; i < inp_length - 1; i++, j += 2 ) - { - interp_code[j] = inp_code[i]; - interp_code[j + 1] = inp_code[i] * 0.5f + inp_code[i + 1] * 0.5f; - } - - interp_code[j] = inp_code[i]; - interp_code[j + 1] = inp_code[i] * 0.5f; - - return; -} - -/*-------------------------------------------------------------------* - * fb_tbe_reset_synth() - * - * Reset the extra parameters needed for synthesis of the FB TBE output - *-------------------------------------------------------------------*/ - -void fb_tbe_reset_synth( - float fbbwe_hpf_mem[][4], - float *prev_fbbwe_ratio ) -{ - set_f( fbbwe_hpf_mem[0], 0, 4 ); - set_f( fbbwe_hpf_mem[1], 0, 4 ); - set_f( fbbwe_hpf_mem[2], 0, 4 ); - set_f( fbbwe_hpf_mem[3], 0, 4 ); - *prev_fbbwe_ratio = 1.0f; - - return; -} - -/*-------------------------------------------------------------------* - * wb_tbe_extras_reset() - * - * Reset the extra parameters only required for WB TBE encoding - *-------------------------------------------------------------------*/ - -void wb_tbe_extras_reset( - float mem_genSHBexc_filt_down_wb2[], - float mem_genSHBexc_filt_down_wb3[] ) -{ - set_f( mem_genSHBexc_filt_down_wb2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( mem_genSHBexc_filt_down_wb3, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * wb_tbe_extras_reset_synth() - * - * Reset the extra parameters only required for WB TBE synthesis - *-------------------------------------------------------------------*/ - -void wb_tbe_extras_reset_synth( - float state_lsyn_filt_shb[], - float state_lsyn_filt_dwn_shb[], - float mem_resamp_HB[] ) -{ - set_f( state_lsyn_filt_shb, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); - set_f( state_lsyn_filt_dwn_shb, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); - set_f( mem_resamp_HB, 0.0f, INTERP_3_1_MEM_LEN ); - - return; -} - -/*-------------------------------------------------------------------* - * elliptic_bpf_48k_generic() - * - * 18th-order elliptic bandpass filter at 14.0 to 20 kHz sampled at 48 kHz - * Implemented as 3 fourth order sections cascaded. - *-------------------------------------------------------------------*/ - -void elliptic_bpf_48k_generic( - const float input[], /* i : input signal */ - float output[], /* o : output signal */ - float memory[][4], /* i/o: 4 arrays of 4 for memory */ - const float full_band_bpf[][5] /* i : filter coefficients b0,b1,b2,a0,a1,a2 */ -) -{ - int16_t i; - float tmp[L_FRAME48k], tmp2[L_FRAME48k]; - - tmp[0] = memory[0][0] * full_band_bpf[0][4] + memory[0][1] * full_band_bpf[0][3] + memory[0][2] * full_band_bpf[0][2] + memory[0][3] * full_band_bpf[0][1] + input[0] * full_band_bpf[0][0] - full_band_bpf[3][1] * memory[1][3] - full_band_bpf[3][2] * memory[1][2] - full_band_bpf[3][3] * memory[1][1] - full_band_bpf[3][4] * memory[1][0]; - tmp[1] = memory[0][1] * full_band_bpf[0][4] + memory[0][2] * full_band_bpf[0][3] + memory[0][3] * full_band_bpf[0][2] + input[0] * full_band_bpf[0][1] + input[1] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[0] - full_band_bpf[3][2] * memory[1][3] - full_band_bpf[3][3] * memory[1][2] - full_band_bpf[3][4] * memory[1][1]; - tmp[2] = memory[0][2] * full_band_bpf[0][4] + memory[0][3] * full_band_bpf[0][3] + input[0] * full_band_bpf[0][2] + input[1] * full_band_bpf[0][1] + input[2] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[1] - full_band_bpf[3][2] * tmp[0] - full_band_bpf[3][3] * memory[1][3] - full_band_bpf[3][4] * memory[1][2]; - tmp[3] = memory[0][3] * full_band_bpf[0][4] + input[0] * full_band_bpf[0][3] + input[1] * full_band_bpf[0][2] + input[2] * full_band_bpf[0][1] + input[3] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[2] - full_band_bpf[3][2] * tmp[1] - full_band_bpf[3][3] * tmp[0] - full_band_bpf[3][4] * memory[1][3]; - - for ( i = 4; i < L_FRAME48k; i++ ) - { - tmp[i] = input[i - 4] * full_band_bpf[0][4] + input[i - 3] * full_band_bpf[0][3] + input[i - 2] * full_band_bpf[0][2] + input[i - 1] * full_band_bpf[0][1] + input[i] * full_band_bpf[0][0] - full_band_bpf[3][1] * tmp[i - 1] - full_band_bpf[3][2] * tmp[i - 2] - full_band_bpf[3][3] * tmp[i - 3] - full_band_bpf[3][4] * tmp[i - 4]; - } - - memory[0][0] = input[L_FRAME48k - 4]; - memory[0][1] = input[L_FRAME48k - 3]; - memory[0][2] = input[L_FRAME48k - 2]; - memory[0][3] = input[L_FRAME48k - 1]; - - tmp2[0] = memory[1][0] * full_band_bpf[1][4] + memory[1][1] * full_band_bpf[1][3] + memory[1][2] * full_band_bpf[1][2] + memory[1][3] * full_band_bpf[1][1] + tmp[0] * full_band_bpf[1][0] - full_band_bpf[4][1] * memory[2][3] - full_band_bpf[4][2] * memory[2][2] - full_band_bpf[4][3] * memory[2][1] - full_band_bpf[4][4] * memory[2][0]; - tmp2[1] = memory[1][1] * full_band_bpf[1][4] + memory[1][2] * full_band_bpf[1][3] + memory[1][3] * full_band_bpf[1][2] + tmp[0] * full_band_bpf[1][1] + tmp[1] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[0] - full_band_bpf[4][2] * memory[2][3] - full_band_bpf[4][3] * memory[2][2] - full_band_bpf[4][4] * memory[2][1]; - tmp2[2] = memory[1][2] * full_band_bpf[1][4] + memory[1][3] * full_band_bpf[1][3] + tmp[0] * full_band_bpf[1][2] + tmp[1] * full_band_bpf[1][1] + tmp[2] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[1] - full_band_bpf[4][2] * tmp2[0] - full_band_bpf[4][3] * memory[2][3] - full_band_bpf[4][4] * memory[2][2]; - tmp2[3] = memory[1][3] * full_band_bpf[1][4] + tmp[0] * full_band_bpf[1][3] + tmp[1] * full_band_bpf[1][2] + tmp[2] * full_band_bpf[1][1] + tmp[3] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[2] - full_band_bpf[4][2] * tmp2[1] - full_band_bpf[4][3] * tmp2[0] - full_band_bpf[4][4] * memory[2][3]; - - for ( i = 4; i < L_FRAME48k; i++ ) - { - tmp2[i] = tmp[i - 4] * full_band_bpf[1][4] + tmp[i - 3] * full_band_bpf[1][3] + tmp[i - 2] * full_band_bpf[1][2] + tmp[i - 1] * full_band_bpf[1][1] + tmp[i] * full_band_bpf[1][0] - full_band_bpf[4][1] * tmp2[i - 1] - full_band_bpf[4][2] * tmp2[i - 2] - full_band_bpf[4][3] * tmp2[i - 3] - full_band_bpf[4][4] * tmp2[i - 4]; - } - - memory[1][0] = tmp[L_FRAME48k - 4]; - memory[1][1] = tmp[L_FRAME48k - 3]; - memory[1][2] = tmp[L_FRAME48k - 2]; - memory[1][3] = tmp[L_FRAME48k - 1]; - - output[0] = memory[2][0] * full_band_bpf[2][4] + memory[2][1] * full_band_bpf[2][3] + memory[2][2] * full_band_bpf[2][2] + memory[2][3] * full_band_bpf[2][1] + tmp2[0] * full_band_bpf[2][0] - full_band_bpf[5][1] * memory[3][3] - full_band_bpf[5][2] * memory[3][2] - full_band_bpf[5][3] * memory[3][1] - full_band_bpf[5][4] * memory[3][0]; - output[1] = memory[2][1] * full_band_bpf[2][4] + memory[2][2] * full_band_bpf[2][3] + memory[2][3] * full_band_bpf[2][2] + tmp2[0] * full_band_bpf[2][1] + tmp2[1] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[0] - full_band_bpf[5][2] * memory[3][3] - full_band_bpf[5][3] * memory[3][2] - full_band_bpf[5][4] * memory[3][1]; - output[2] = memory[2][2] * full_band_bpf[2][4] + memory[2][3] * full_band_bpf[2][3] + tmp2[0] * full_band_bpf[2][2] + tmp2[1] * full_band_bpf[2][1] + tmp2[2] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[1] - full_band_bpf[5][2] * output[0] - full_band_bpf[5][3] * memory[3][3] - full_band_bpf[5][4] * memory[3][2]; - output[3] = memory[2][3] * full_band_bpf[2][4] + tmp2[0] * full_band_bpf[2][3] + tmp2[1] * full_band_bpf[2][2] + tmp2[2] * full_band_bpf[2][1] + tmp2[3] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[2] - full_band_bpf[5][2] * output[1] - full_band_bpf[5][3] * output[0] - full_band_bpf[5][4] * memory[3][3]; - - for ( i = 4; i < L_FRAME48k; i++ ) - { - output[i] = tmp2[i - 4] * full_band_bpf[2][4] + tmp2[i - 3] * full_band_bpf[2][3] + tmp2[i - 2] * full_band_bpf[2][2] + tmp2[i - 1] * full_band_bpf[2][1] + tmp2[i] * full_band_bpf[2][0] - full_band_bpf[5][1] * output[i - 1] - full_band_bpf[5][2] * output[i - 2] - full_band_bpf[5][3] * output[i - 3] - full_band_bpf[5][4] * output[i - 4]; - } - - memory[2][0] = tmp2[L_FRAME48k - 4]; - memory[2][1] = tmp2[L_FRAME48k - 3]; - memory[2][2] = tmp2[L_FRAME48k - 2]; - memory[2][3] = tmp2[L_FRAME48k - 1]; - - memory[3][0] = output[L_FRAME48k - 4]; - memory[3][1] = output[L_FRAME48k - 3]; - memory[3][2] = output[L_FRAME48k - 2]; - memory[3][3] = output[L_FRAME48k - 1]; - - return; -} - - -/*-------------------------------------------------------------------* - * synthesise_fb_high_band() - * - * Creates the highband output for full band - 14.0 to 20 kHz - * Using the energy shaped white excitation signal from the SWB BWE. - * The excitation signal input is sampled at 16kHz and so is upsampled - * to 48 kHz first. - * Uses a complementary split filter to code the two regions from - * 14kHz to 16kHz and 16 kHz to 20 kHz. - * One of 16 tilt filters is also applied afterwards to further - * refine the spectral shape of the fullband signal. - * The tilt is specified in dB per kHz. N.B. Only negative values are - * accomodated. - *-------------------------------------------------------------------*/ - -void synthesise_fb_high_band( - const float excitation_in[], /* i : full band excitation */ - float output[], /* o : high band speech - 14.0 to 20 kHz */ - const float fb_exc_energy, /* i : full band excitation energy */ - const float ratio_float, /* i : energy ratio */ - const int16_t L_frame, /* i : ACELP frame length */ - const int16_t bfi, /* i : BFI flag */ - float *prev_fbbwe_ratio, /* o : previous frame energy for FEC */ - float bpf_memory[][4] /* i/o: memory for elliptic bpf 48k */ -) -{ - int16_t i, j; - float excitation_in_interp3[L_FRAME48k]; - float tmp[L_FRAME48k]; - float temp1, ratio2; - - /* Interpolate the white energy shaped gaussian excitation from 16 kHz to 48 kHz with zeros */ - /* white excitation from DC to 8 kHz resampled to produce DC to 24 kHz excitation. */ - for ( i = 0, j = 0; i < L_FRAME48k; i += 3, j++ ) - { - excitation_in_interp3[i] = 3.0f * excitation_in[j]; - excitation_in_interp3[i + 1] = 0.0f; - excitation_in_interp3[i + 2] = 0.0f; - } - - if ( L_frame == L_FRAME16k ) - { - /* for 16kHz ACELP core */ - elliptic_bpf_48k_generic( excitation_in_interp3, tmp, bpf_memory, full_band_bpf_3 ); - } - else - { - /* for 12.8kHz ACELP core */ - elliptic_bpf_48k_generic( excitation_in_interp3, tmp, bpf_memory, full_band_bpf_1 ); - } - temp1 = sum2_f( tmp, L_FRAME48k ) + 0.001f; - ratio2 = (float) ( ratio_float * sqrt( fb_exc_energy / temp1 ) ); - - if ( !bfi ) - { - *prev_fbbwe_ratio = ratio_float; - } - else - { - *prev_fbbwe_ratio = ratio_float * 0.5f; - } - for ( i = 0; i < L_FRAME48k; i++ ) - { - output[i] = tmp[i] * ratio2; - } - - return; -} - -/*-------------------------------------------------------------------* - * Estimate_mix_factors() * - * * - * Estimate mix factors for SHB excitation generation * - *-------------------------------------------------------------------*/ - -static void Estimate_mix_factors( - const float *shb_res, /* i : SHB LP residual */ - const float *exc16kWhtnd, /* i : SHB transformed low band excitation */ - const float *White_exc16k, /* i : Modulated envelope shaped white noise */ - const float pow1, /* i : SHB exc. power for normalization */ - const float pow22, /* i : White noise excitation for normalization*/ - float *vf_modified, /* o : Estimated voice factors */ - int16_t *vf_ind /* o : voice factors VQ index */ -) -{ - float shb_res_local[L_FRAME16k], WN_exc_local[L_FRAME16k]; - float pow3, temp_p1_p2, temp_p1_p3; - float temp_numer1[L_FRAME16k], temp_numer2[L_FRAME16k]; - int16_t i, length; - - mvr2r( shb_res, shb_res_local, L_FRAME16k ); - mvr2r( White_exc16k, WN_exc_local, L_FRAME16k ); - - pow3 = dotp( shb_res_local, shb_res_local, L_FRAME16k ); - - pow3 += 0.00001f; - temp_p1_p2 = (float) sqrt( pow1 / pow22 ); - temp_p1_p3 = (float) sqrt( pow1 / pow3 ); - - - for ( i = 0; i < L_FRAME16k; i++ ) - { - WN_exc_local[i] *= temp_p1_p2; - shb_res_local[i] *= temp_p1_p3; - } - for ( i = 0; i < L_FRAME16k; i++ ) - { - temp_numer1[i] = shb_res_local[i] - WN_exc_local[i]; - temp_numer2[i] = exc16kWhtnd[i] - WN_exc_local[i]; - } - - length = L_FRAME16k; - for ( i = 0; i < 1; i++ ) - { - temp_p1_p2 = dotp( temp_numer1 + i * length, temp_numer2 + i * length, length ); - temp_p1_p3 = dotp( temp_numer2 + i * length, temp_numer2 + i * length, length ); - vf_modified[i] = min( max( ( temp_p1_p2 / temp_p1_p3 ), 0.1f ), 0.99f ); - } - - *vf_ind = usquant( vf_modified[0], &temp_p1_p2, 0.125, 0.125, 1 << NUM_BITS_SHB_VF ); - set_f( vf_modified, temp_p1_p2, NB_SUBFR16k ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tbe_celp_exc_flt() * - * * - * Prepare adaptive part of TBE excitation * - *-------------------------------------------------------------------*/ - -void tbe_celp_exc_flt( - const int16_t element_mode, /* i : element mode */ - const int16_t idchan, /* i : channel ID */ - float *bwe_exc, /* i/o: BWE excitation */ - const int16_t L_frame, /* i : frame length */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : fraction of lag */ - float *error, /* i/o: error */ - const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ -) -{ - int16_t i, offset; - - if ( element_mode == IVAS_CPE_TD && idchan == 1 && !tdm_LRTD_flag ) - { - return; - } - - assert( bwe_exc != NULL && "BWE excitation is NULL" ); - - if ( L_frame == L_FRAME ) - { - offset = tbe_celp_exc_offset_flt( T0, T0_frac ); - - for ( i = 0; i < L_subfr * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset + (int16_t) *error]; - } - *error += (float) offset - (float) T0 * HIBND_ACB_L_FAC - 0.25f * HIBND_ACB_L_FAC * (float) T0_frac; - } - else - { - offset = T0 * 2 + (int16_t) ( (float) T0_frac * 0.5f + 4 + 0.5f ) - 4; - for ( i = 0; i < L_subfr * 2; i++ ) - { - bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - offset + (int16_t) *error]; - } - *error += (float) offset - (float) T0 * 2 - 0.5f * (float) T0_frac; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * prep_tbe_exc() * - * * - * Prepare TBE excitation * - *-------------------------------------------------------------------*/ - -void prep_tbe_exc( - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t i_subfr, /* i : subframe index */ - const float gain_pit, /* i : Pitch gain */ - const float gain_code, /* i : algebraic codebook gain */ - const float code[], /* i : algebraic excitation */ - const float voice_fac, /* i : voicing factor */ - float *voice_factors, /* o : TBE voicing factor */ - float bwe_exc[], /* i/o: excitation for TBE */ - const float gain_preQ, /* i : prequantizer excitation gain*/ - const float code_preQ[], /* i : prequantizer excitation */ - const int16_t T0, /* i : integer pitch variables */ - const int16_t coder_type, /* i : coding type */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t element_mode, /* i : element mode */ - const int16_t idchan, /* i : channel ID */ - const int16_t flag_TD_BWE, /* i : flag indicating whether hTD_BWE exists */ - const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ -) -{ - int16_t i; - float tmp_code[2 * L_SUBFR * HIBND_ACB_L_FAC]; - float tmp_code_preInt[L_SUBFR]; - float tmp = 1.0f; - - *voice_factors = VF_0th_PARAM + VF_1st_PARAM * voice_fac + VF_2nd_PARAM * voice_fac * voice_fac; - - if ( ( coder_type == VOICED || T0 > 115.5f ) && core_brate > ACELP_8k00 ) - { - tmp = 1.0f; - *voice_factors *= tmp; - } - - *voice_factors = min( max( 0.000001f, *voice_factors ), 0.999999f ); - - if ( element_mode == IVAS_CPE_TD && idchan == 1 && !tdm_LRTD_flag ) - { - if ( flag_TD_BWE && i_subfr == 0 ) - { - set_f( bwe_exc, 0, L_FRAME32k ); - } - - return; - } - - if ( L_frame == L_FRAME ) - { - interp_code_5over2( code, tmp_code, L_subfr ); - - for ( i = 0; i < L_subfr * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = gain_pit * bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] + - gain_code * tmp_code[i]; - } - } - else - { - for ( i = 0; i < L_subfr; i++ ) - { - tmp_code_preInt[i] = gain_code * code[i] + 2 * gain_preQ * code_preQ[i]; - } - - interp_code_4over2( tmp_code_preInt, tmp_code, L_subfr ); - - for ( i = 0; i < L_subfr * 2; i++ ) - { - bwe_exc[i + i_subfr * 2] = gain_pit * bwe_exc[i + i_subfr * 2] + tmp_code[i]; - } + synSHB_fx[i] = L_shl( synSHB_fx[i], sub( *Q_new, *Q_inp ) ); + overlap_fx[i - l_frame] = Mpy_32_32( mod_syn_fx[i], Mpy_32_16_1( L_shl( frame_gain_fx, norm_shift ), win_fx[l_frame + l_shb_lahead - 1 - i] ) ); // Q_new + move32(); + move32(); } + *Q_inp = *Q_new; + move16(); return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * get_tbe_bits() * - * * - * Determine TBE bit consumption per frame from bitrate * - *-------------------------------------------------------------------*/ - -int16_t get_tbe_bits( - const int32_t total_brate, - const int16_t bwidth, - const int16_t rf_mode ) -{ - int16_t i, bits = 0; - - if ( rf_mode ) - { - /* TBE bits for core, primary frame */ - if ( bwidth == WB && total_brate == ACELP_13k20 ) - { - /* Gain frame: 4, Gain shapes: 0, and LSFs: 2 */ - bits = NUM_BITS_SHB_FrameGain_LBR_WB + NUM_BITS_LBR_WB_LSF; - } - else if ( bwidth == SWB && total_brate == ACELP_13k20 ) - { - /* Gain frame: 5, Gain shapes: 5, and lowrate LSFs: 8 */ - bits = NUM_BITS_SHB_FRAMEGAIN + NUM_BITS_SHB_SUBGAINS + 8; - } - } - else - { - if ( bwidth == WB && total_brate == ACELP_9k60 ) - { - bits = NUM_BITS_LBR_WB_LSF + NUM_BITS_SHB_FrameGain_LBR_WB; - } - else if ( bwidth == SWB || bwidth == FB ) - { - if ( total_brate == ACELP_9k60 ) - { - bits = NUM_BITS_SHB_FRAMEGAIN + NUM_BITS_SHB_SUBGAINS + 8; - } - else if ( total_brate >= ACELP_13k20 && total_brate <= ACELP_32k ) - { - bits = NUM_BITS_SHB_SUBGAINS + NUM_BITS_SHB_FRAMEGAIN + NUM_LSF_GRID_BITS + MIRROR_POINT_BITS; - - for ( i = 0; i < NUM_Q_LSF; i++ ) - { - bits += lsf_q_num_bits[i]; - } - } - - if ( total_brate >= ACELP_24k40 ) - { - bits += NUM_BITS_SHB_ENER_SF + NUM_BITS_SHB_VF + NUM_BITS_SHB_RES_GS * NB_SUBFR16k; - } - - if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) ) - { - bits += BITS_TEC + BITS_TFA; - } - - if ( bwidth == FB ) - { - /* fullband slope */ - bits += 4; - } - } - } - - return bits; -} -#endif diff --git a/lib_com/swb_tbe_com_fx.c b/lib_com/swb_tbe_com_fx.c index c46c84bd4..494dbebd5 100644 --- a/lib_com/swb_tbe_com_fx.c +++ b/lib_com/swb_tbe_com_fx.c @@ -10,9 +10,7 @@ #include "prot.h" #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif #include "options_warnings.h" #define POW_EXC16k_WHTND 1.14e11f /* power of random excitation, length 320 samples, uniform distribution */ @@ -75,7 +73,6 @@ void swb_tbe_reset_fx( * Reset the extra parameters needed for synthesis of the SWB TBE output *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void swb_tbe_reset_synth_ivas_fx( Word32 genSHBsynth_Hilbert_Mem[], Word16 genSHBsynth_state_lsyn_filt_shb_local_fx[], @@ -88,7 +85,6 @@ void swb_tbe_reset_synth_ivas_fx( return; } -#endif void swb_tbe_reset_synth_fx( Word32 genSHBsynth_Hilbert_Mem[], Word16 genSHBsynth_state_lsyn_filt_shb_local_fx[] ) @@ -854,7 +850,6 @@ static void Calc_st_filt_tbe( } } -#ifdef IVAS_FLOAT_FIXED static void Calc_st_filt_tbe_ivas_enc_fx( Word16 *apond2, /* i : coefficients of numerator */ Word16 *apond1, /* i : coefficients of denominator */ @@ -934,7 +929,6 @@ static void Calc_st_filt_tbe_ivas_dec_fx( } } } -#endif static void filt_mu_fx( const Word16 *sig_in, /* i : signal (beginning at sample -1) */ @@ -1163,7 +1157,6 @@ void PostShortTerm_fx( return; } -#ifdef IVAS_FLOAT_FIXED void PostShortTerm_ivas_enc_fx( Word16 *sig_in, /* i : input signal (pointer to current subframe */ Word16 *lpccoeff, /* i : LPC coefficients for current subframe */ @@ -1283,7 +1276,6 @@ void PostShortTerm_ivas_dec_fx( return; } -#endif void flip_spectrum_and_decimby4_fx( const Word16 input[], /* i : input spectrum Q_inp */ @@ -1363,7 +1355,6 @@ void flip_spectrum_and_decimby4_fx( /* CALLED FROM : */ /*==========================================================================*/ -#ifdef IVAS_FLOAT_FIXED void ivas_GenShapedWBExcitation_fx( Word16 *excSHB, /* o : synthesized shaped shb exctiation Q_bwe_exc*/ const Word16 *lpc_shb, /* i : lpc coefficients Q12*/ @@ -1658,7 +1649,6 @@ void ivas_GenShapedWBExcitation_fx( return; } -#endif void GenShapedWBExcitation_fx( Word16 *excSHB, /* o : synthesized shaped shb exctiation Q(Q_bwe_exc) */ @@ -2962,7 +2952,6 @@ void GenShapedSHBExcitation_fx( return; } -#ifdef IVAS_FLOAT_FIXED void GenShapedSHBExcitation_ivas_enc_fx( Word16 *excSHB, /* o : synthesized shaped shb excitation Q_bwe_exc*/ const Word16 *lpc_shb, /* i : lpc coefficients Q12*/ @@ -5168,7 +5157,6 @@ void GenShapedSHBExcitation_ivas_dec_fx( #endif return; } -#endif /*====================================================================================*/ /* FUNCTION : void GenSHBSynth_fx() */ diff --git a/lib_com/syn_12k8.c b/lib_com/syn_12k8.c index 252300794..e7a8ca967 100644 --- a/lib_com/syn_12k8.c +++ b/lib_com/syn_12k8.c @@ -39,33 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------ - * syn_12k8() - * - * perform the synthesis filtering 1/A(z) - *------------------------------------------------------------------*/ - -void syn_12k8( - const int16_t L_frame, /* i : length of the frame */ - const float *Aq, /* i : LP filter coefficients */ - const float *exc, /* i : input signal */ - float *synth, /* o : output signal */ - float *mem, /* i/o: initial filter states */ - const int16_t update_m /* i : update memory flag: 0 --> no memory update */ - ) /* 1 --> update of memory */ -{ - const float *p_Aq; - int16_t i_subfr; - - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - syn_filt( p_Aq, M, &exc[i_subfr], &synth[i_subfr], L_SUBFR, mem, update_m ); - p_Aq += ( M + 1 ); /* interpolated LPC parameters for next subframe */ - } - - return; -} -#endif diff --git a/lib_com/syn_filt.c b/lib_com/syn_filt.c index 612a737ac..0603c1c82 100644 --- a/lib_com/syn_filt.c +++ b/lib_com/syn_filt.c @@ -41,132 +41,3 @@ #include "rom_com.h" #include "wmc_auto.h" #include - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * syn_filt() - * - * perform the synthesis filtering 1/A(z) - *------------------------------------------------------------------*/ - -void syn_filt( - const float a[], /* i : LP filter coefficients */ - const int16_t m, /* i : order of LP filter */ - const float x[], /* i : input signal */ - float y[], /* o : output signal */ - const int16_t l, /* i : size of filtering */ - float mem[], /* i/o: initial filter states */ - const int16_t update_m /* i : update memory flag: 0 --> no memory update */ - ) /* 1 --> update of memory */ -{ - int16_t i, j; - float buf[L_FRAME48k + L_FRAME48k / 2 + TCXLTP_LTP_ORDER]; /* temporary synthesis buffer */ - float s, *yy; - - yy = &buf[0]; - - /*------------------------------------------------------------------* - * copy initial filter states into synthesis buffer and do synthesis - *------------------------------------------------------------------*/ - - for ( i = 0; i < m; i++ ) - { - *yy++ = mem[i]; - } - - /*-----------------------------------------------------------------------* - * Do the filtering - *-----------------------------------------------------------------------*/ - - for ( i = 0; i < l; i++ ) - { - s = x[i]; - for ( j = 1; j <= m; j++ ) - { - s -= a[j] * yy[i - j]; - } - - yy[i] = s; - y[i] = s; - } - - /*------------------------------------------------------------------* - * Update memory if required - *------------------------------------------------------------------*/ - - if ( update_m ) - { - for ( i = 0; i < m; i++ ) - { - mem[i] = yy[l - m + i]; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * synth_mem_updt2_flt() - * - * Update of synthesis filter memories in case of ACELP@12k8 <-> ACELP@16k switching - *--------------------------------------------------------------------*/ - -void synth_mem_updt2_flt( - const int16_t L_frame, /* i : frame length */ - const int16_t last_L_frame, /* i : frame length */ - float old_exc[], /* i/o: excitation buffer */ - float mem_syn_r[], /* i/o: synthesis filter memory */ - float mem_syn2[], /* o : synthesis filter memory for find_target */ - float mem_syn[], /* o : synthesis filter memory for find_target */ - const int16_t dec /* i : flag for decoder indication */ -) -{ - int16_t mem_syn_r_size_old, mem_syn_r_size_new; - int16_t i; - float en1, en2, loc_rat; - - /* Residual and update old_exc */ - if ( dec >= DEC ) - { - lerp_flt( old_exc + L_EXC_MEM_DEC - ( last_L_frame + last_L_frame / 2 ), old_exc + L_EXC_MEM_DEC - ( L_frame + L_frame / 2 ), L_frame + L_frame / 2, last_L_frame + last_L_frame / 2 ); - } - else - { - lerp_flt( old_exc + L_EXC_MEM - last_L_frame, old_exc + L_EXC_MEM - L_frame, L_frame, last_L_frame ); - } - - /*Resamp memory*/ - /*Size of LPC syn memory*/ - mem_syn_r_size_old = (int16_t) ( 1.25 * last_L_frame / 20.f ); - mem_syn_r_size_new = (int16_t) ( 1.25 * L_frame / 20.f ); - - lerp_flt( mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - - if ( dec == DEC_IVAS ) - { - if ( L_frame == L_FRAME16k ) - { - /* find scaling factor */ - en1 = 1.25f * sum2_f( mem_syn2, M ); - en2 = sum2_f( mem_syn_r + L_SYN_MEM - M, M ); - - loc_rat = sqrtf( en2 ) / ( sqrtf( en1 ) + 0.01f ); - /* scale synthesis filter memory */ - for ( i = 0; i < M; i++ ) - { - mem_syn_r[L_SYN_MEM - M + i] *= loc_rat; - } - } - } - - mvr2r( mem_syn_r + L_SYN_MEM - M, mem_syn2, M ); - - if ( mem_syn != NULL ) - { - mvr2r( mem_syn2, mem_syn, M ); - } - - return; -} -#endif diff --git a/lib_com/syn_filt_fx.c b/lib_com/syn_filt_fx.c index 6075e8151..082ccb4c8 100644 --- a/lib_com/syn_filt_fx.c +++ b/lib_com/syn_filt_fx.c @@ -186,7 +186,6 @@ void Syn_filt_s( } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------* * syn_filt_fx: * @@ -273,7 +272,6 @@ void syn_filt_fx( return; } -#endif /* @@ -529,7 +527,6 @@ void E_UTIL_synthesis_fx( const Word16 shift, const Word32 a[], const Word32 x[] * Update of synthesis filter memories in case of ACELP@12k8 <-> ACELP@16k switching *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_synth_mem_updt2_fx( const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ @@ -605,7 +602,6 @@ void ivas_synth_mem_updt2_fx( Copy( mem_syn2, mem_syn, M ); } } -#endif void synth_mem_updt2( const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ diff --git a/lib_com/tcq_position_arith.c b/lib_com/tcq_position_arith.c index 9aff06057..ca921f664 100644 --- a/lib_com/tcq_position_arith.c +++ b/lib_com/tcq_position_arith.c @@ -42,2253 +42,3 @@ #include "basop_util.h" #include "basop_proto_func.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -static void bitstream_save_bit( TCQ_PBITSTREAM pBS, const int16_t bit ); -static uint32_t bitstream_load_bit( TCQ_PBITSTREAM pBS ); -static void bitstream_rollback( TCQ_PBITSTREAM pBS, int16_t numBits ); - -static int32_t ar_make_model( const int16_t *freq, int16_t *model, const int16_t len ); -static int32_t ar_decode( PARCODEC arInst, const int16_t *model ); -static void ar_encode( PARCODEC arInst, const int16_t *model, int32_t symbol ); -static void ar_encode_uniform( PARCODEC arInst, uint16_t data, const int16_t bits ); - -static void set16_fx( - Word16 y[], /* i/o: Vector to set */ - const Word16 a, /* i : Value to set the vector to */ - const Word16 N /* i : Lenght of the vector */ -) -{ - Word16 i; - - FOR( i = 0; i < N; i++ ) - { - y[i] = a; - move16(); - } - - return; -} - -static void set32_fx( - Word32 y[], /* i/o: Vector to set */ - const Word32 a, /* i : Value to set the vector to */ - const Word16 N /* i : Lenght of the vector */ -) -{ - Word16 i; - FOR( i = 0; i < N; i++ ) - { - y[i] = a; - move16(); - } - - return; -} - -Word32 ar_div_ivas( - Word32 num, - Word32 denum ) -{ - Word16 exp1, exp2, exp, i; - Word32 varout; - Word32 sign; - - sign = L_and( L_xor( num, denum ), 0x80000000 ); - - num = L_abs( num ); - denum = L_abs( denum ); - - test(); - IF( L_sub( num, denum ) < 0 || denum == 0 ) - { - return 0; - } - ELSE IF( L_sub( num, denum ) == 0 ) - { - return 1; - } - ELSE - { - exp1 = norm_l( num ); - exp2 = norm_l( denum ); - exp = sub( exp2, exp1 ); - denum = L_shl( denum, exp ); - exp = add( exp, 1 ); - varout = 0; - move32(); - FOR( i = 0; i < exp; i++ ) - { - num = L_sub( num, denum ); - varout = L_shl( varout, 1 ); - IF( num >= 0 ) - { - num = L_shl( num, 1 ); - varout = L_add( varout, 1 ); - } - ELSE - { - num = L_add( num, denum ); - num = L_shl( num, 1 ); - } - } - } - - if ( sign != 0 ) - { - varout = L_negate( varout ); - } - - return varout; -} - -void srt_vec_ind_fx_ivas( - const Word32 *linear, /* linear input */ - Word32 *srt, /* sorted output*/ - Word16 *I, /* index for sorted output */ - Word16 length ) -{ - Word16 pos, npos; - Word16 idxMem; - Word32 valMem; - - /*initialize */ - FOR( pos = 0; pos < length; pos++ ) - { - I[pos] = pos; - move16(); - } - - FOR( pos = 0; pos < length; pos++ ) - { - srt[pos] = linear[pos]; - move32(); - } - - /* now iterate */ - FOR( pos = 0; pos < sub( length, 1 ); pos++ ) - { - FOR( npos = add( pos, 1 ); npos < length; npos++ ) - { - if ( L_sub( srt[npos], srt[pos] ) < 0 ) - { - idxMem = I[pos]; - I[pos] = I[npos]; - I[npos] = idxMem; - move16(); - move16(); - valMem = srt[pos]; - srt[pos] = srt[npos]; - srt[npos] = valMem; - move32(); - move32(); - } - } - } - - return; -} - -static Word32 GetBitsFromPulses_fx( - Word16 m, - Word16 n ) -{ - Word16 i, integer_fx, temp_fx1, temp_fx2, exp1, exp2; - Word32 temp32; - Word32 frac_fx32; - Word32 logCoeff_fx; - Word16 exp = 0; - move16(); - Word32 mantissa_fx = 0; - move32(); - IF( m == 0 ) - { - return 0; - } - - FOR( i = 0; i < min( m, n ); i++ ) - { - logCoeff_fx = L_add( L_shl( i + 1, 16 ), L_sub( table_logcum_fx[n + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[n - i] ) ) ); - logCoeff_fx = L_add( logCoeff_fx, L_sub( table_logcum_fx[m], L_add( table_logcum_fx[i + 1], table_logcum_fx[m - i] ) ) ); /*Q16 */ - - integer_fx = extract_h( logCoeff_fx ); /*Q0 */ - frac_fx32 = L_sub( logCoeff_fx, L_shl( integer_fx, 16 ) ); /*Q16 */ - - /*ln2, 0.987, ln2 * ln2, 0.977 */ - /*temp1 = (long) (frac / 0.0625); */ - /*temp2 = frac - (float)temp1 * 0.0625f; */ - - /* frac = pow(2.0, temp1 * 0.0625) * (1 + 0.693 * temp2 + 0.480 * temp2 * temp2 * 0.5);*/ - /*frac = pow_getbitsfrompulses[temp1] * (1 + 0.693f * temp2 + 0.480f * temp2 * temp2 * 0.5f); */ - - temp_fx1 = extract_h( L_shl( frac_fx32, 4 ) ); - temp_fx2 = extract_l( L_and( frac_fx32, 0xfff ) ); /*Q16 */ - - frac_fx32 = L_add( L_mult( temp_fx2, 22708 ), Mult_32_16( L_mult0( temp_fx2, temp_fx2 ), 7864 ) ); /*Q32 */ - frac_fx32 = L_add( 0x40000000, L_shr( frac_fx32, 2 ) ); /*30 */ - - exp1 = norm_l( pow_getbitsfrompulses_fx[temp_fx1] ); - exp2 = norm_l( frac_fx32 ); - frac_fx32 = Mult_32_32( L_shl( pow_getbitsfrompulses_fx[temp_fx1], exp1 ), L_shl( frac_fx32, exp2 ) ); /*21 + exp1 + 30 + exp2 - 31 */ - frac_fx32 = L_add( L_shr( frac_fx32, add( exp1, exp2 ) ), 1 ); /*20 */ - - IF( sub( exp, integer_fx ) < 0 ) - { - mantissa_fx = L_shr( mantissa_fx, sub( integer_fx, exp ) ); - mantissa_fx = L_add( mantissa_fx, frac_fx32 ); - - exp = integer_fx; - move16(); - } - ELSE - { - mantissa_fx = L_add( mantissa_fx, L_shr( frac_fx32, sub( exp, integer_fx ) ) ); - } - if ( L_sub( mantissa_fx, 0x200000 ) >= 0 ) - { - exp = add( exp, 1 ); - - mantissa_fx = L_shr( mantissa_fx, 1 ); - } - } - - mantissa_fx = L_shl( mantissa_fx, 2 ); /*22 */ - temp_fx1 = extract_h( mantissa_fx ); - temp32 = L_shl( L_sub( mantissa_fx, L_deposit_h( temp_fx1 ) ), 15 ); /*31 */ - exp1 = sub( norm_l( temp32 ), 1 ); - temp32 = ar_div_ivas( L_shl( temp32, exp1 ), temp_fx1 ); /*31 + exp1 */ - temp32 = L_shr( temp32, add( exp1, 1 ) ); /*30 */ - - frac_fx32 = L_sub( 0x40000000, L_shr( temp32, 1 ) ); /*30 */ - frac_fx32 = Mult_32_32( frac_fx32, temp32 ); /*29 */ - frac_fx32 = L_shr( frac_fx32, 13 ); /*16 */ - exp1 = norm_l( temp_fx1 ); - temp_fx1 = Log2_norm_lc( L_shl( temp_fx1, exp1 ) ); /*15 */ - frac_fx32 = L_add( frac_fx32, Mult_32_32( frac_fx32, 950680361 ) ); /* frac_fx32 *= 1/ln(2) */ - return L_add( L_deposit_h( exp ), L_add( L_shl( temp_fx1, 1 ), frac_fx32 ) ); -} - -void decode_position_ari_fx_ivas( - PARCODEC pardec, - Word16 size, - Word16 npulses, - Word16 *nz, - Word32 *position ) -{ - Word16 i, nzp; - Word16 mode_num_nz[TCQ_MAX_BAND_SIZE]; - Word16 prob[TCQ_MAX_BAND_SIZE]; - - Word32 btcq_fx, pnzp_fx; - Word16 integer, frac; - - Word32 cp, scp, fxone, fxp1; - Word16 stpos = 0, pos, ovrflag, temppos, storepos; - move16(); - fxone = 32768; - fxp1 = 512 * 32768; - move32(); - move32(); - temppos = 0; - storepos = 0; - ovrflag = 0; - move16(); - move16(); - move16(); - set16_fx( mode_num_nz, 0, TCQ_MAX_BAND_SIZE ); - set16_fx( prob, 0, TCQ_MAX_BAND_SIZE ); - - FOR( i = 0; i < size; i++ ) - { - position[i] = 0; - move32(); - } - - IF( L_sub( npulses, 1 ) > 0 ) - { - btcq_fx = GetBitsFromPulses_fx( npulses, size ); - FOR( i = 0; i < L_min( npulses, size ); i++ ) - { - /*calculate the probability of #nz */ - - pnzp_fx = L_sub( L_deposit_h( add( i, 1 ) ), btcq_fx ); - pnzp_fx = L_add( pnzp_fx, L_add( L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[size - i] ) ), L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[i + 1], table_logcum_fx[npulses - i] ) ) ) ); - pnzp_fx = L_add( pnzp_fx, 917498 ); /*16 */ - IF( L_sub( pnzp_fx, 0 ) > 0 ) - { - integer = extract_h( pnzp_fx ); - frac = extract_l( L_shr( L_sub( pnzp_fx, L_deposit_h( integer ) ), 1 ) ); /*15 */ - prob[i] = extract_h( L_shl( Pow2( integer, frac ), 16 ) ); /*0 */ - move16(); - if ( prob[i] == 0 ) - { - prob[i] = 1; - move16(); - } - } - ELSE - { - prob[i] = 1; - move16(); - } - } - - ar_make_model( prob, mode_num_nz, min( npulses, size ) ); - *nz = add( 1, (Word16) ar_decode( pardec, mode_num_nz ) ); /*get #nz */ - nzp = *nz; - move16(); - move16(); - IF( EQ_16( nzp, 1 ) ) - { - Word16 tmp; - mode_num_nz[0] = MAX_AR_FREQ; - move16(); - FOR( i = 0; i < size; i++ ) - { - tmp = div_l( L_deposit_h( sub( sub( size, i ), 1 ) ), size ); - mode_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); - move16(); - } - - position[ar_decode( pardec, mode_num_nz )] = 1; - move32(); - } - ELSE - { - Word16 tmp; - mode_num_nz[0] = MAX_AR_FREQ; - move16(); - FOR( ; nzp > 0; nzp-- ) - { - scp = fxp1; - move32(); - temppos = 0; - storepos = 0; - move16(); - move16(); - FOR( i = stpos; i < size; i++ ) - { - ovrflag = 0; - move16(); - IF( EQ_16( nzp, sub( size, i ) ) ) - { - cp = 0; - move32(); - } - ELSE - { - tmp = div_l( L_deposit_h( nzp ), ( size - i ) ); - cp = L_sub( fxone, tmp ); - } - scp = Mult_32_16( scp, extract_l( cp ) ); - mode_num_nz[sub( sub( add( i, 1 ), storepos ), stpos )] = round_fx( L_shl( scp, 6 ) ); - - test(); - test(); - IF( ( mode_num_nz[sub( sub( add( i, 1 ), storepos ), stpos )] == 0 && scp > 0 ) || EQ_16( mode_num_nz[sub( sub( i, storepos ), stpos )], mode_num_nz[sub( sub( add( i, 1 ), storepos ), stpos )] ) ) - { - ovrflag = 1; - move16(); - temppos = (Word16) ar_decode( pardec, mode_num_nz ); - storepos = add( storepos, temppos ); - scp = fxp1; - move32(); - IF( EQ_16( temppos, sub( i, stpos ) ) ) /* esc transmitted */ - { - i = sub( i, 1 ); - } - ELSE - { - BREAK; - } - } - } - IF( !ovrflag ) - { - pos = (Word16) ar_decode( pardec, mode_num_nz ) + storepos; - } - ELSE - { - pos = storepos; - move16(); - } - - position[stpos + pos] = 1; - move32(); - stpos = add( stpos, add( pos, 1 ) ); - } - } - } - ELSE IF( L_sub( npulses, 1 ) == 0 ) - { - Word16 tmp; - *nz = npulses; - nzp = *nz; - move16(); - move16(); - mode_num_nz[0] = MAX_AR_FREQ; - FOR( i = 0; i < size; i++ ) - { - tmp = div_l( L_deposit_h( sub( sub( size, i ), 1 ) ), size ); - mode_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); - move16(); - } - - position[ar_decode( pardec, mode_num_nz )] = 1; - move32(); - } - ELSE - { - *nz = 0; - move16(); - } - - return; -} - - -void decode_magnitude_usq_fx_ivas( - ARCODEC *pardec, - Word16 size, - Word16 npulses, - Word16 nzpos, - Word32 *positions, - Word32 *out ) -{ - Word16 i, magnp, magnzp; - Word16 magns[TCQ_MAX_BAND_SIZE], magncout = 0; - move16(); - Word16 storemagn, ovrflag, pos, tempmagn = 0, mmodel[MAX_PULSES + 2]; - move16(); - Word32 cp, scp, fxone, fxp1; - - fxone = 32768; - move32(); - fxp1 = 512 * 32768; - move32(); - ovrflag = 0; - move16(); - - set16_fx( magns, 1, TCQ_MAX_BAND_SIZE ); - IF( sub( nzpos, npulses ) == 0 ) - { - FOR( i = 0; i < size; i++ ) - { - out[i] = positions[i]; - move32(); - } - return; - } - ELSE IF( sub( nzpos, 1 ) == 0 ) - { - FOR( i = 0; i < size; i++ ) - { - if ( positions[i] != 0 ) - { - out[i] = npulses; - move32(); - return; - } - } - } - - magnzp = sub( nzpos, 1 ); - magnp = sub( npulses, 1 ); - - magncout = 0; - move16(); - set32_fx( out, 0, size ); - set16_fx( mmodel, 0, MAX_PULSES + 2 ); - - mmodel[0] = MAX_AR_FREQ; - move16(); - magncout = 0; - move16(); - FOR( pos = 0; pos < size; pos++ ) - { - scp = fxp1; - move32(); - IF( positions[pos] != 0 ) - { - storemagn = 0; - move16(); - FOR( i = 0; i < magnp; i++ ) - { - ovrflag = 0; - move16(); - IF( EQ_16( magnzp, sub( magnp, i ) ) ) - { - cp = 0; - move32(); - } - ELSE - { - Word16 tmp; - tmp = div_l( L_deposit_h( magnzp ), magnp - i ); - cp = L_sub( fxone, tmp ); - } - - IF( EQ_32( cp, fxone ) ) - { - BREAK; - } - - scp = Mult_32_16( scp, extract_l( cp ) ); - mmodel[sub( add( i, 1 ), storemagn )] = round_fx( L_shl( scp, 6 ) ); - move16(); - IF( ( mmodel[sub( add( i, 1 ), storemagn )] == 0 && scp > 0 ) || EQ_16( mmodel[sub( i, storemagn )], mmodel[sub( add( i, 1 ), storemagn )] ) ) - { - mmodel[sub( add( i, 1 ), storemagn )] = 0; - move16(); - /* read data */ - tempmagn = (Word16) ar_decode( pardec, mmodel ); - storemagn = add( storemagn, tempmagn ); - - IF( LT_16( tempmagn, i ) ) - { - /* just magnitude */ - ovrflag = 1; - move16(); - BREAK; - } - ELSE - { - /* esc code */ - scp = fxp1; - move32(); - i = sub( i, 1 ); - } - } - } - - IF( ovrflag ) - { - out[magncout] = L_deposit_l( add( storemagn, 1 ) ); - move32(); - } - ELSE - { - out[magncout] = L_add( ar_decode( pardec, mmodel ), L_deposit_l( add( storemagn, 1 ) ) ); - move32(); - } - magnp = sub( magnp, (Word16) out[magncout] ); - magnzp = sub( magnzp, 1 ); - magncout = add( magncout, 1 ); - - IF( magnzp == 0 ) /* last magnitude generation */ - { - FOR( pos = add( pos, 1 ); pos < size; pos++ ) - { - IF( positions[pos] != 0 ) - { - out[magncout] = L_deposit_l( add( magnp, 1 ) ); - move32(); - return; - } - ELSE - { - out[magncout] = 0; - move32(); - magncout = add( magncout, 1 ); - } - } - } - ELSE IF( EQ_16( magnzp, magnp ) ) /* rest magnitudes generation */ - { - FOR( pos = add( pos, 1 ); pos < size; pos++ ) - { - out[magncout] = positions[pos]; - move32(); - magncout = add( magncout, 1 ); - } - return; - } - } - ELSE - { - out[magncout] = 0; - move32(); - magncout = add( magncout, 1 ); - } - } - - return; -} - -static Word16 quantize_fx_ivas( - Word16 val, - Word16 D ) -{ - Word16 qval4_fx; - Word16 retval_fx; - - qval4_fx = shr( abs_s( add( val, 512 ) ), 12 ); - retval_fx = add( shl( qval4_fx, 2 ), DDP_fx[D] ); - /* 2nd zero check */ - IF( D == 0 ) - { - if ( sub( abs_s( sub( shl( abs_s( retval_fx ), 10 ), abs_s( val ) ) ), abs_s( val ) ) > 0 ) - { - retval_fx = 0; - move16(); - } - } - - return retval_fx; -} - -void decode_mangitude_tcq_fx_ivas( - ARCODEC *pardec, - Word16 size, - Word16 npulses, - Word16 nzpos, - Word32 *positions, - Word32 *out, - Word32 *surplus_fx ) -{ - Word32 tcq_bits_fx, bits_fx /*, surplus_fx*/; - Word16 prob0_fx, prob1_fx, num, denum, quantum1_fx, quantum2_fx; - Word16 exp, exp1, exp2, tmp16; - Word32 tmp32; - - Word16 i, j, symbol, st; - Word16 leftp = npulses; /*pulsesnum; */ - Word16 leftnz = nzpos; /*nzpos; */ - move16(); - move16(); - Word16 magn_mode[3] = { MAX_AR_FREQ, 0, 0 }; - move16(); - move16(); - move16(); - bits_fx = 0; - move32(); - tcq_bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - ( nzpos - 1 )] ) ); - - IF( sub( nzpos, npulses ) == 0 ) - { - FOR( i = 0; i < size; i++ ) - { - out[i] = positions[i]; - move32(); - } - - return; - } - ELSE IF( sub( nzpos, 1 ) == 0 ) - { - FOR( i = 0; i < size; i++ ) - { - IF( positions[i] != 0 ) - { - out[i] = npulses; - move32(); - return; - } - } - } - st = 0; - move16(); - FOR( i = 0; i < size && leftnz > 1; i++ ) - { - out[i] = positions[i]; - move32(); - IF( positions[i] != 0 ) - { - /*generate the trellis path */ - symbol = 0; - move16(); - FOR( j = 0; j < leftp; j++ ) - { - num = sub( leftnz, 1 ); - denum = sub( leftp, add( j, 1 ) ); - IF( sub( num, denum ) >= 0 ) - { - prob1_fx = MAX_16; - prob0_fx = 0; - move16(); - move16(); - } - ELSE - { - exp1 = sub( norm_s( num ), 1 ); - exp2 = norm_s( denum ); - prob1_fx = div_s( shl( num, exp1 ), shl( denum, exp2 ) ); /*15 + exp1 - exp2 */ - exp = add( 15, sub( exp1, exp2 ) ); - prob1_fx = shl( prob1_fx, sub( 15, exp ) ); - prob0_fx = sub( MAX_16, prob1_fx ); - } - IF( L_sub( sub( leftp, j ), leftnz ) == 0 ) - { - symbol = add( j, 1 ); - BREAK; - } - - quantum1_fx = quantize_fx_ivas( shl( add( j, 1 ), 10 ), ddec[st][0] ); - quantum2_fx = quantize_fx_ivas( shl( add( j, 1 ), 10 ), ddec[st][1] ); - - test(); - if ( sub( quantum1_fx, add( j, 1 ) ) != 0 && sub( quantum2_fx, add( j, 1 ) ) != 0 ) - { - prob0_fx = MAX_16; - move16(); - prob1_fx = 0; - move16(); - } - - test(); - if ( sub( prob0_fx, MAX_16 ) == 0 || sub( prob1_fx, MAX_16 ) == 0 ) - { - symbol = add( j, 1 ); - CONTINUE; - } - - /*magn_mode[1] = (int16_t)(prob1 * MAX_AR_FREQ); */ - magn_mode[1] = mult( prob1_fx, MAX_AR_FREQ ); - move16(); - IF( ar_decode( pardec, magn_mode ) ) - { - exp1 = norm_s( prob1_fx ); - tmp32 = L_deposit_h( shl( prob1_fx, exp1 ) ); /*exp1 + 15 + 16 */ - tmp16 = Log2_norm_lc( tmp32 ); /*15 */ - bits_fx = L_sub( bits_fx, L_sub( tmp16, L_shl( add( exp1, 1 ), 15 ) ) ); /*15 */ - - symbol = add( j, 1 ); - BREAK; - } - ELSE - { - exp1 = norm_s( prob0_fx ); - tmp32 = L_deposit_h( shl( prob0_fx, exp1 ) ); /*exp1 + 15 + 16 */ - tmp16 = Log2_norm_lc( tmp32 ); /*15 */ - bits_fx = L_sub( bits_fx, L_sub( tmp16, L_shl( add( exp1, 1 ), 15 ) ) ); /*15 */ - } - } - out[i] = symbol; - move32(); - /*leftp -= symbol; */ - leftp = sub( leftp, symbol ); - leftnz = sub( leftnz, 1 ); - } - - quantum1_fx = quantize_fx_ivas( (Word16) out[i], ddec[st][0] ); - quantum2_fx = quantize_fx_ivas( (Word16) out[i], ddec[st][1] ); - - /*generate the next state */ - IF( sub( quantum1_fx, (Word16) out[i] ) == 0 ) - { - st = nextstate[st][0]; - } - ELSE - { - st = nextstate[st][1]; - } - move16(); - } - - /*generate the magnitudes */ - FOR( ; i < size; i++ ) - { - out[i] = 0; - move32(); - IF( positions[i] != 0 ) - { - out[i] = add( sub( leftp, leftnz ), 1 ); - move32(); - } - } - - test(); - IF( sub( nzpos, npulses ) != 0 && sub( nzpos, 1 ) > 0 ) - { - /*update the surplus */ - *surplus_fx = L_add( *surplus_fx, L_sub( tcq_bits_fx, L_shl( bits_fx, 1 ) ) ); - move32(); - } - - return; -} - -Word16 GetScale_fx_ivas( - Word16 blen, - Word32 bits_fx /*Q16*/, - Word32 *surplus_fx /*Q16*/ -) -{ - Word16 pulses = MAX_PULSES, p_est, exp, exp1, exp2, magicnum, tmp; - Word32 t, a, b, ab, estbits_fx = 0; - move32(); - magicnum = 24773; /*Q17: 0.188992013101951f; */ - move16(); - t = L_shr( L_mult( magicnum, blen ), 2 ); - exp = norm_l( t ); - a = L_add( L_shl( L_deposit_l( sub( 14, exp ) ), 15 ), L_deposit_l( Log2_norm_lc( L_shl( t, exp ) ) ) ); - - exp1 = sub( norm_l( bits_fx ), 1 ); - exp2 = norm_s( sub( blen, 1 ) ); - - tmp = div_l( L_shl( bits_fx, exp1 ), shl( sub( blen, 1 ), exp2 ) ); - b = L_shr( L_deposit_l( tmp ), sub( exp1, exp2 ) ); - - ab = L_add( a, b ); - - p_est = extract_h( L_shl( Pow2( extract_l( L_shr( ab, 15 ) ), ab & 0x7FFF ), 16 ) ); /* enable saturation of pow2 result */ - - pulses = min( p_est, MAX_PULSES ); - - FOR( ; pulses >= 0; pulses-- ) - { - estbits_fx = GetBitsFromPulses_fx( pulses, blen ); - IF( L_sub( bits_fx, estbits_fx ) >= 0 ) - { - BREAK; - } - } - - if ( surplus_fx != NULL ) - { - *surplus_fx = L_add( *surplus_fx, L_sub( bits_fx, estbits_fx ) ); - move32(); - } - - return pulses; -} - - -void decode_signs_fx_ivas( - ARCODEC *pardec, - Word16 size, - Word32 *out ) -{ - Word16 i; - - FOR( i = 0; i < size; i++ ) - { - if ( out[i] != 0 ) - { - IF( ar_decode( pardec, uniform_model ) > 0 ) - { - out[i] = out[i]; - } - ELSE - { - out[i] = L_negate( out[i] ); - } - - move32(); - } - } - - return; -} - -Word32 encode_position_ari_fx_ivas( - PARCODEC parenc, - float *quants, - Word16 size, - Word32 *est_bits_frame_fx ) -{ - Word16 i; - Word16 nz = 0, pulses = 0; - Word16 prob[TCQ_MAX_BAND_SIZE]; - Word16 model_num_nz[TCQ_MAX_BAND_SIZE]; - float *cur_quants = quants; - Word16 integer, frac; - Word32 /*est_bits_frame_fx, */ btcq_fx = 0, bits_fx = 0, pnzp_fx; - Word32 cp, scp, fxone, fxp1; - Word16 pos; - - fxone = 32768; - fxp1 = 512 * 32768; - - set16_fx( prob, 0, TCQ_MAX_BAND_SIZE ); - set16_fx( model_num_nz, 0, TCQ_MAX_BAND_SIZE ); - - for ( i = 0; i < size; i++ ) - { - pulses = add( pulses, abs_s( (int16_t) cur_quants[i] ) ); - if ( cur_quants[i] != 0 ) - { - nz++; - } - } - - btcq_fx = GetBitsFromPulses_fx( pulses, size ); - /* Estimate TCQ bits */ - bits_fx = L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[nz + 1], table_logcum_fx[size - nz + 1] ) ); - bits_fx = L_add( bits_fx, L_sub( btcq_fx, L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[nz + 1], table_logcum_fx[size - nz + 1] ) ) ) ); - bits_fx = L_sub( bits_fx, L_sub( table_logcum_fx[pulses], L_add( table_logcum_fx[nz], table_logcum_fx[pulses - ( nz - 1 )] ) ) ); - - bits_fx = L_sub( bits_fx, nz ); - *est_bits_frame_fx = L_add( *est_bits_frame_fx, bits_fx ); - - /*caculate the #nz probability */ - for ( i = 0; i < min( pulses, size ); i++ ) - { - pnzp_fx = L_sub( L_deposit_h( add( i, 1 ) ), btcq_fx ); - - pnzp_fx = L_add( pnzp_fx, L_add( L_sub( table_logcum_fx[size + 1], L_add( table_logcum_fx[i + 2], table_logcum_fx[size - i] ) ), L_sub( table_logcum_fx[pulses], L_add( table_logcum_fx[i + 1], table_logcum_fx[pulses - i] ) ) ) ); - - pnzp_fx = L_add( pnzp_fx, 917498 ); /*16 */ - if ( L_sub( pnzp_fx, 0 ) > 0 ) - { - integer = extract_h( pnzp_fx ); - frac = extract_l( L_shr( L_sub( pnzp_fx, L_deposit_h( integer ) ), 1 ) ); /*15 */ - prob[i] = extract_h( L_shl( Pow2( integer, frac ), 16 ) ); /*0 */ - - /*zero probability will incur problems in ar_make_model() */ - if ( prob[i] == 0 ) - { - prob[i] = 1; - } - } - else - { - prob[i] = 1; - } - } - - ar_make_model( prob, model_num_nz, min( pulses, size ) ); - - if ( sub( nz, 1 ) > 0 ) - { - ar_encode( parenc, model_num_nz, nz - 1 ); /*encode #nz */ - - scp = fxp1; - pos = 0; - for ( i = 0; i < size && nz > 0; i++ ) - { - if ( nz == ( size - i ) ) - { - cp = 0; - } - else - { - Word16 tmp; - tmp = div_l( L_deposit_h( nz ), ( size - i ) ); - cp = L_sub( fxone, tmp ); - } - scp = Mult_32_16( scp, extract_l( cp ) ); - model_num_nz[pos + 1] = round_fx( L_shl( scp, 6 ) ); - - if ( ( model_num_nz[pos + 1] == 0 && scp > 0 ) || model_num_nz[pos] == model_num_nz[pos + 1] ) - { - model_num_nz[pos + 1] = 0; - ar_encode( parenc, model_num_nz, pos ); - i--; - scp = fxp1; - pos = 0; - continue; - } - - if ( cur_quants[i] != 0 ) - { - ar_encode( parenc, model_num_nz, pos ); - pos = 0; - scp = fxp1; - nz--; - } - else - { - pos++; - } - } - } - else if ( sub( nz, 1 ) == 0 ) - { - if ( sub( pulses, 1 ) > 0 ) - { - /*temp -= log2_f((float)(model_num_nz[nz-1] - model_num_nz[nz]) / MAX_AR_FREQ); */ - ar_encode( parenc, model_num_nz, 0 ); /*encode #nz */ - } - - pos = 0; - for ( i = 0; i < size; i++ ) - { - Word16 tmp; - tmp = div_l( L_deposit_h( size - i - 1 ), size ); - model_num_nz[i + 1] = round_fx( L_shr( L_deposit_h( tmp ), 1 ) ); - - if ( cur_quants[i] != 0 ) - { - pos = i; - } - } - ar_encode( parenc, model_num_nz, pos ); /* encode pos */ - } - return bits_fx; -} - - -Word32 encode_magnitude_tcq_fx_ivas( - ARCODEC *parenc, - float *magn_fx, - Word16 size, - Word16 npulses, - Word16 nzpos, - Word32 *savedstates, - Word32 *est_frame_bits_fx ) -{ - Word32 tcq_bits_fx, bits_fx /*, est_frame_bits_fx*/; - Word16 prob0_fx, prob1_fx, num, denum, quantum1_fx, quantum2_fx; - Word16 exp, exp1, exp2; - - Word16 i, j; - Word32 st; - Word16 magn_mode[3] = { MAX_AR_FREQ, 0, 0 }; - - Word16 leftp = npulses; /*pulsesnum; */ - Word16 leftnz = nzpos; /*nzpos; */ - - bits_fx = 0; - - tcq_bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - ( nzpos - 1 )] ) ); - - *est_frame_bits_fx = L_add( *est_frame_bits_fx, tcq_bits_fx ); - - if ( sub( nzpos, npulses ) == 0 || sub( nzpos, 1 ) == 0 ) - { - return bits_fx; - } - - st = 0; - for ( i = 0; i < size && leftnz > 1; i++ ) - { - st = savedstates[i]; - if ( magn_fx[i] != 0 ) - { - for ( j = 0; j < leftp; j++ ) - { - /*calculate the two path probs point to next two states */ - num = sub( leftnz, 1 ); - denum = sub( leftp, add( j, 0x1 ) ); - if ( sub( num, denum ) >= 0 ) - { - prob1_fx = MAX_16; - prob0_fx = 0; - } - else - { - exp1 = sub( norm_s( num ), 1 ); - exp2 = norm_s( denum ); - prob1_fx = div_s( shl( num, exp1 ), shl( denum, exp2 ) ); /*15 + exp1 - exp2 */ - exp = 15 + exp1 - exp2; - prob1_fx = shl( prob1_fx, sub( 15, exp ) ); - prob0_fx = sub( MAX_16, prob1_fx ); - } - - quantum1_fx = quantize_fx_ivas( shl( add( j, 1 ), 10 ), ddec[st][0] ); - quantum2_fx = quantize_fx_ivas( shl( add( j, 1 ), 10 ), ddec[st][1] ); - - if ( sub( quantum1_fx, add( j, 1 ) ) != 0 && sub( quantum2_fx, add( j, 1 ) ) != 0 ) - { - prob0_fx = MAX_16; - prob1_fx = 0; - } - if ( sub( prob0_fx, MAX_16 ) == 0 || sub( prob1_fx, MAX_16 ) == 0 ) - { - continue; - } - - magn_mode[1] = mult( prob1_fx, MAX_AR_FREQ ); - if ( sub( j, sub( abs_s( (int16_t) magn_fx[i] ), 1 ) ) < 0 ) - { - ar_encode( parenc, magn_mode, 0 ); - } - else - { - if ( sub( leftp, j ) > leftnz ) - { - ar_encode( parenc, magn_mode, 1 ); - } - break; - } - } - - leftnz--; - leftp = sub( leftp, abs_s( (int16_t) magn_fx[i] ) ); - } - } - - return bits_fx; -} - - -Word32 encode_signs_fx_ivas( - ARCODEC *parenc, - float *magn, - Word16 size, - Word16 npos, - Word32 *est_frame_bits_fx ) -{ - Word32 i, sign; - - *est_frame_bits_fx = L_add( *est_frame_bits_fx, L_deposit_h( npos ) ); - for ( i = 0; i < size; i++ ) - { - if ( magn[i] != 0 ) - { - sign = ( magn[i] > 0 ) ? 1 : 0; - ar_encode_uniform( parenc, (uint16_t) sign, 1 ); - } - } - - return L_deposit_h( npos ); -} - - -Word32 encode_magnitude_usq_fx_ivas( - ARCODEC *parenc, - float *magn_fx, - Word16 size, - Word16 npulses, - Word16 nzpos, - Word32 *est_frame_bits_fx ) -{ - Word16 i, j, k, magnp, magnzp; - Word16 magn_position[MAX_PULSES]; - Word32 /*est_frame_bits_fx, */ bits_fx; - - Word16 pos, model_m[MAX_PULSES + 2]; - Word32 fxone, fxp1, cp, scp; - - fxone = 32768; - fxp1 = 512 * 32768; - - /*estimate fac bits */ - bits_fx = L_sub( table_logcum_fx[npulses], L_add( table_logcum_fx[nzpos], table_logcum_fx[npulses - nzpos + 1] ) ); - - *est_frame_bits_fx = L_add( *est_frame_bits_fx, bits_fx ); - - if ( sub( npulses, nzpos ) == 0 || sub( nzpos, 1 ) == 0 ) - { - return bits_fx; - } - magnp = sub( npulses, 1 ); - magnzp = sub( nzpos, 1 ); - - /*generate the binary sequences of magnitudes */ - k = 0; - for ( i = 0; i < size; i++ ) - { - if ( magn_fx[i] != 0 ) - { - for ( j = 0; j < abs_s( (int16_t) magn_fx[i] ) - 1; j++ ) - { - magn_position[k++] = 0; - } - magn_position[k++] = 1; - } - } - - set16_fx( model_m, 0, MAX_PULSES + 2 ); - scp = fxp1; - model_m[0] = MAX_AR_FREQ; - pos = 0; - for ( i = 0; i < npulses - 1 && magnzp > 0; i++ ) - { - if ( magnzp == magnp ) - { - cp = 0; - } - else - { - Word16 tmp; - tmp = div_l( L_deposit_h( magnzp ), magnp ); - cp = L_sub( fxone, tmp ); - } - scp = Mult_32_16( scp, extract_l( cp ) ); - model_m[pos + 1] = round_fx( L_shl( scp, 6 ) ); - - if ( ( model_m[pos + 1] == 0 && scp > 0 ) || model_m[pos] == model_m[pos + 1] ) - { - model_m[pos + 1] = 0; - - ar_encode( parenc, model_m, pos ); - pos = 0; - i--; - scp = fxp1; - continue; - } - - if ( magn_position[i] != 0 ) - { - ar_encode( parenc, model_m, pos ); - pos = 0; - magnzp--; - scp = fxp1; - } - else - { - pos++; - } - - magnp--; - } - return bits_fx; -} - - -static void transmission_bits( - PARCODEC arInst, - Word16 bit ) -{ - bitstream_save_bit( arInst->bsInst, bit ); - arInst->num_bits = L_add( arInst->num_bits, 1 ); - bit = !bit; - move16(); - FOR( ; arInst->bits_to_follow > 0 && arInst->num_bits < arInst->max_bits; arInst->bits_to_follow-- ) - { - bitstream_save_bit( arInst->bsInst, bit ); - arInst->num_bits = L_add( arInst->num_bits, 1 ); - move32(); - } - - return; -} - -void ar_encoder_start( - PARCODEC arInst, - TCQ_PBITSTREAM bsInst, - Word16 max_bits ) -{ - arInst->bsInst = bsInst; - - arInst->low = 0; - move32(); - arInst->high = AR_TOP; - move32(); - arInst->bits_to_follow = 0; - move16(); - arInst->num_bits = 0; - move32(); - arInst->max_bits = max_bits; - move32(); - - return; -} - - -static void ar_encode( - PARCODEC arInst, - const Word16 *model, - Word32 symbol ) -{ - UWord32 range, high, low; - - high = arInst->high; - low = arInst->low; - - symbol = L_add( symbol, 1 ); - range = high - low + 1; - - high = low + ( range * model[symbol - 1] ) / model[0] - 1; - low = low + ( range * model[symbol] ) / model[0]; - - FOR( ;; ) - { - IF( high < AR_HALF ) - { - transmission_bits( arInst, 0 ); - } - ELSE - { - IF( low >= AR_HALF ) - { - transmission_bits( arInst, 1 ); - - low -= AR_HALF; - high -= AR_HALF; - } - ELSE - { - IF( low >= AR_FIRST && high < AR_THIRD ) - { - arInst->bits_to_follow = add( arInst->bits_to_follow, 1 ); - - low -= AR_FIRST; - high -= AR_FIRST; - } - ELSE - { - BREAK; - } - } - } - - low = low << 1; - high = ( high << 1 ) + 1; - } - - arInst->high = high; - move32(); - arInst->low = low; - move32(); - return; -} - - -static void ar_encode_uniform( - PARCODEC arInst, - UWord16 data, - const Word16 bits ) -{ - Word16 i; - - FOR( i = 0; i < bits; i++ ) - { - ar_encode( arInst, uniform_model, data & 0x1 ); - data >>= 1; - } - - return; -} - - -void ar_encoder_done( - PARCODEC arInst ) -{ - arInst->bits_to_follow = add( arInst->bits_to_follow, 1 ); - move16(); - transmission_bits( arInst, arInst->low >= AR_FIRST ); - - return; -} - - -void ar_decoder_start( - PARCODEC arInst, - TCQ_PBITSTREAM bsInst ) -{ - Word16 i; - - arInst->bsInst = bsInst; - move32(); - move32(); - move32(); - move32(); - move32(); - move16(); - arInst->low = 0; - arInst->high = AR_TOP; - arInst->value = 0; - move32(); - move32(); - move32(); - FOR( i = 0; i < AR_BITS; i++ ) - { - arInst->value = L_add( L_shl( arInst->value, 1 ), bitstream_load_bit( arInst->bsInst ) ); - move32(); - } - - return; -} - - -static Word32 ar_decode( - PARCODEC arInst, - const Word16 *model ) -{ - UWord32 range; - Word16 cum; - Word16 symbol; - - range = (UWord32) L_add( L_sub( arInst->high, arInst->low ), 1 ); - cum = (Word16) ( ( ( (UWord32) L_sub( arInst->value, arInst->low ) + 1 ) * model[0] - 1 ) / range ); - - FOR( symbol = 1; model[symbol] > cum; symbol++ ) - { - ; - } - - arInst->high = arInst->low + ( range * model[symbol - 1] ) / model[0] - 1; - arInst->low = arInst->low + ( range * model[symbol] ) / model[0]; - - FOR( ;; ) - { - IF( GE_32( arInst->high, AR_HALF ) ) - { - IF( GE_32( arInst->low, AR_HALF ) ) - { - arInst->value = L_sub( arInst->value, AR_HALF ); - move32(); - arInst->low = L_sub( arInst->low, AR_HALF ); - move32(); - arInst->high = L_sub( arInst->high, AR_HALF ); - move32(); - } - ELSE - { - IF( GE_32( arInst->low, AR_FIRST ) && LT_32( arInst->high, AR_THIRD ) ) - { - arInst->value = L_sub( arInst->value, AR_FIRST ); - move32(); - arInst->low = L_sub( arInst->low, AR_FIRST ); - move32(); - arInst->high = L_sub( arInst->high, AR_FIRST ); - move32(); - } - ELSE - { - BREAK; - } - } - } - arInst->low = L_shl( arInst->low, 1 ); - move32(); - arInst->high = L_add( L_shl( arInst->high, 1 ), 1 ); - move32(); - arInst->value = L_add( L_shl( arInst->value, 1 ), bitstream_load_bit( arInst->bsInst ) ); - move32(); - } - - return ( sub( symbol, 1 ) ); -} - -void ar_decoder_done( - PARCODEC arInst ) -{ - bitstream_rollback( arInst->bsInst, AR_BITS - 2 ); - - return; -} - - -static Word32 ar_make_model( - const Word16 *freq, - Word16 *model, - const Word16 len ) -{ - Word16 dist; - UWord32 sum = 0; - UWord32 cum = 0; - Word16 i; - - FOR( i = 0; i < len; i++ ) - { - sum += freq[i]; - } - - if ( sum == 0 ) - { - return 0; - } - - FOR( i = len;; i-- ) - { - model[i] = (Word16) ( ( cum * MAX_AR_FREQ ) / sum ); - move16(); - if ( !i ) - { - BREAK; - } - - cum += freq[i - 1]; - } - - - FOR( i = 0; i < sub( len, 1 ); i++ ) - { - dist = sub( model[i], model[i + 1] ); - - if ( dist <= 0 ) - { - model[i + 1] = add( model[i + 1], sub( dist, 1 ) ); - move16(); - } - } - - FOR( i = len; i; i-- ) - { - dist = sub( model[i - 1], model[i] ); - - if ( dist <= 0 ) - { - model[i - 1] = sub( model[i - 1], sub( dist, 1 ) ); - move16(); - } - } - - return ( GT_16( model[0], model[1] ) ); -} - -static void bitstream_save_bit( - TCQ_PBITSTREAM pBS, - const Word16 bit ) -{ - UWord8 cur; - - cur = pBS->buf[pBS->numByte]; - - cur = (UWord8) ( cur | shl( bit, pBS->curPos-- ) ); - pBS->buf[pBS->numByte] = cur; - pBS->numbits = L_add( pBS->numbits, 1 ); - - if ( pBS->curPos < 0 ) - { - pBS->curPos = 7; - move16(); - pBS->numByte = L_add( pBS->numByte, 1 ); - move32(); - } - - return; -} - - -static uint32_t bitstream_load_bit( - TCQ_PBITSTREAM pBS ) -{ - UWord32 bit; - Word16 *curPos; - - /* safety check in case of bit errors */ - if ( GE_32( pBS->numByte, pBS->maxBytes ) ) - { - return 0; - } - - curPos = &pBS->curPos; - move16(); - bit = ( ( pBS->buf[pBS->numByte] >> ( *curPos )-- ) & 0x00000001 ); - - if ( *curPos < 0 ) - { - pBS->numByte = L_add( pBS->numByte, 1 ); - move32(); - *curPos = 7; - move16(); - } - - return bit; -} - - -static void bitstream_rollback( - TCQ_PBITSTREAM pBS, - Word16 numBits ) -{ - WHILE( numBits > 0 ) - { - pBS->curPos = add( pBS->curPos, 1 ); - pBS->numbits = L_sub( pBS->numbits, 1 ); - IF( EQ_16( pBS->curPos, 8 ) ) - { - pBS->curPos = 0; - move16(); - pBS->numByte = L_sub( pBS->numByte, 1 ); - move32(); - } - numBits = sub( numBits, 1 ); - } - - return; -} - - -static float quantize( - float val, - const int16_t D ) -{ - int32_t qval4; - float retval; /* = qval4*4.0f + DD[D]; */ - - qval4 = (int32_t) fabs( ( val + 0.5 ) / 4.0 ); - retval = qval4 * 4.0f + DDP[D]; - - /* 2nd zero check */ - if ( D == 0 ) - { - if ( fabs( fabs( retval ) - fabs( val ) ) > fabs( val ) ) - { - retval = 0; - } - } - - return retval; -} - - -static void TCQnew( - float *v, - float scale, - int16_t length, - float *vout, - int32_t pulses, - int32_t *pulsesout, - int32_t *nzposout, - int32_t *savedstates, - int32_t *lasttrellislevel, - int32_t terminate ) -{ - int16_t i, st, dminpos, position, pulsesnum, nzpos = 0; - float dmin, quantum1, quantum2, curdist1, curdist2, newdist1, newdist2, signq; - - float metric[STATES][TCQ_MAX_BAND_SIZE]; - int16_t path[STATES][TCQ_MAX_BAND_SIZE]; - int16_t quant[STATES][TCQ_MAX_BAND_SIZE]; - int16_t pused[STATES][TCQ_MAX_BAND_SIZE]; - - set_f( *metric, 0.0f, STATES * TCQ_MAX_BAND_SIZE ); - set_s( *path, 0, STATES * TCQ_MAX_BAND_SIZE ); - set_s( *quant, 0, STATES * TCQ_MAX_BAND_SIZE ); - set_s( *pused, 0, STATES * TCQ_MAX_BAND_SIZE ); - - /* Initialize metric */ - for ( st = 1; st < STATES; st++ ) - { - metric[st][0] = 1000; - } - for ( st = 2; st < STATES; st++ ) - { - metric[st][1] = 1000; - } - for ( st = 4; st < STATES; st++ ) - { - metric[st][2] = 1000; - } - - /* Viterbi for input sequence */ - for ( i = 0; i < length; i++ ) /* cycle over symbols */ - { - for ( st = 0; st < STATES; st++ ) /* cycle over conditions */ - { - curdist1 = metric[step_tcq[st][0]][i]; - curdist2 = metric[step_tcq[st][1]][i]; - - /* step 1 */ - quantum1 = quantize( v[i] * scale, denc[st][0] ); - newdist1 = (float) ( quantum1 - fabs( v[i] ) * scale ); - newdist1 *= newdist1; - - if ( quantum1 + pused[step_tcq[st][0]][i] > pulses && terminate ) - { - newdist1 = 10000.0f; /* pulses check */ - } - - /* step 2 */ - quantum2 = quantize( v[i] * scale, denc[st][1] ); - newdist2 = (float) ( quantum2 - fabs( v[i] ) * scale ); - newdist2 *= newdist2; - - if ( quantum2 + pused[step_tcq[st][1]][i] > pulses && terminate ) - { - newdist2 = 10000.0f; /* pulses check */ - } - - /* decision */ - if ( curdist1 + newdist1 < curdist2 + newdist2 ) - { - path[st][i + 1] = step_tcq[st][0]; - metric[st][i + 1] = curdist1 + newdist1; - quant[st][i + 1] = (int16_t) quantize( v[i] * scale, denc[st][0] ); - pused[st][i + 1] = (int16_t) ( pused[step_tcq[st][0]][i] + abs( quant[st][i + 1] ) ); - } - else - { - path[st][i + 1] = step_tcq[st][1]; - metric[st][i + 1] = curdist2 + newdist2; - quant[st][i + 1] = (int16_t) quantize( v[i] * scale, denc[st][1] ); - pused[st][i + 1] = (int16_t) ( pused[step_tcq[st][1]][i] + abs( quant[st][i + 1] ) ); - } - } - } - - /* Find path with minimal metric */ - dminpos = 0; - dmin = metric[dminpos][length]; - for ( i = 1; i < STATES; i++ ) - { - if ( ( dmin > metric[i][length] && pused[i][length] == pulses ) || - ( pused[dminpos][length] != pulses && pused[i][length] == pulses ) ) - { - dmin = metric[i][length]; - dminpos = i; - } - } - - /* Trace back to get output */ - pulsesnum = 0; - position = dminpos; - - for ( i = length; i > 0; i-- ) - { - signq = ( v[i - 1] > 0.0f ) ? ( 1.0f ) : ( -1.0f ); - vout[i - 1] = signq * quant[position][i]; - - position = path[position][i]; - savedstates[i - 1] = position; - - /* calculate output pulses number & nz */ - pulsesnum += (int16_t) fabs( vout[i - 1] ); /*quant[position][i]; */ - if ( fabs( vout[i - 1] ) > 0.0f ) - { - if ( nzpos == 0 ) - { - *lasttrellislevel = i; - } - - nzpos++; - } - } - - if ( pulsesout != NULL ) - { - *pulsesout = pulsesnum; - } - if ( nzposout != NULL ) - { - *nzposout = nzpos; - } - - return; -} - - -float GetISCScale( - float *quants, - int16_t size, - Word32 bits_fx, - float *magn, - float *qscale, - Word32 *surplus_fx, - float *pulses, - int32_t *savedstates, - int16_t noTCQ, - int32_t *nzpout, - int16_t *bcount, - float *abuffer, - float *mbuffer, - float *sbuffer ) -{ - float scale, m, t, actualt, magnbits = 0.0f; - int32_t pulsesnum, pos, terminate, leftp, leftnz, trellislevel, st; - int32_t i, j, nzpos, direction, pulsescurr, nzposcurr, lasttrellislevel; - float dist[TCQ_MAX_BAND_SIZE]; - float aquants[TCQ_MAX_BAND_SIZE]; - float dmin, prob0, prob1, quantum1, quantum2; - float sx2 = 0, sy2 = 0, sxy = 0, g; - int32_t pn = 0; - float pt = 0.f; - int32_t diff; - int16_t sign; - int32_t m_int; - int8_t flag_g1; - - set_f( dist, 0.0f, TCQ_MAX_BAND_SIZE ); - set_f( aquants, 0.0f, TCQ_MAX_BAND_SIZE ); - - if ( bits_fx < 0 ) - { - pulsesnum = 0; - - if ( surplus_fx != NULL ) - { - *surplus_fx = L_add( *surplus_fx, bits_fx ); - } - } - else - { - pulsesnum = GetScale_fx_ivas( size, bits_fx, surplus_fx ); - } - *nzpout = 0; - - if ( pulses != NULL ) - { - *pulses = (float) pulsesnum; - } - - if ( pulsesnum > 0 ) - { - /* Initial quantization */ - for ( i = 0, m = 0; i < size; i++ ) - { - aquants[i] = (float) fabs( quants[i] ); - m += aquants[i]; - } - - scale = ( pulsesnum + EPSILON ) / ( m + EPSILON ); - - for ( i = 0, t = 0.0f; i < size; i++ ) - { - magn[i] = (float) ( (int16_t) ( 0.5f + aquants[i] * scale ) ); - - t += magn[i]; - } - - /* Pulses redistribution */ - while ( t != pulsesnum ) - { - pn = 0; - pt = 0.f; - - - for ( i = 0, nzpos = 0; i < size; i++ ) - { - if ( magn[i] > 0.0f ) - { - pn += (int32_t) magn[i]; - pt += aquants[i]; - } - } - - direction = ( pulsesnum - t > 0 ) ? ( 1 ) : ( -1 ); - - /* new alg */ - { - for ( i = 0; i < size; i++ ) - { - sxy += aquants[i] * magn[i]; - sx2 += aquants[i] * aquants[i]; - sy2 += magn[i] * magn[i]; - } - for ( i = 0; i < size; i++ ) - { - if ( magn[i] > 0.0f ) - { - g = ( pt ) / ( pn + direction + EPSILON ); - } - else - { - g = ( pt + aquants[i] ) / ( pn + direction + EPSILON ); - } - - dist[i] = sx2 - 2.0f * ( sxy + direction * aquants[i] ) * g + g * g * ( sy2 + 2.0f * magn[i] * direction + 1.0f ); - } - } - - { - pos = 0; - dmin = dist[0]; - - /* find min */ - for ( i = 1; i < size; i++ ) - { - if ( dmin > dist[i] ) - { - pos = i; - dmin = dist[i]; - } - } - - magn[pos] += direction; - t += direction; - } - } - - /* calculate actual nz positions */ - actualt = 0.0f; - for ( i = 0, nzpos = 0; i < size; i++ ) - { - if ( magn[i] > 0.0f ) - { - if ( quants[i] < 0 ) - { - magn[i] *= -1; - } - - actualt += aquants[i]; - nzpos++; - } - } - - /* calculate scale */ - if ( actualt > 0 ) - { - scale = pulsesnum / actualt; - } - else - { - scale = FLT_MAX; - } - *qscale = scale; - *nzpout = nzpos; - - if ( ( nzpos != pulsesnum && nzpos > 1 ) && noTCQ == 0 ) - { - terminate = 1; - TCQnew( quants, scale, size, magn, pulsesnum, &pulsescurr, &nzposcurr, savedstates, &lasttrellislevel, terminate ); - - if ( pulsesnum > pulsescurr ) - { - scale *= 1.1f; - } - - if ( pulsesnum < pulsescurr ) - { - scale *= 0.9f; - } - if ( pulsesnum > pulsescurr ) - { - diff = pulsesnum - pulsescurr; - - for ( i = size - 1; i >= 0; i-- ) - { - if ( fabs( magn[i] ) > 0 ) - { - sign = ( magn[i] > 0 ) ? ( 1 ) : ( -1 ); - magn[i] = (float) ( sign * ( fabs( magn[i] ) + diff ) ); - - break; - } - } - } - else if ( pulsesnum < pulsescurr ) - { - diff = pulsescurr - pulsesnum; - - for ( i = size - 1; i >= 0 && diff > 0; i-- ) - { - if ( fabs( magn[i] ) > 0 ) - { - sign = ( magn[i] > 0 ) ? ( 1 ) : ( -1 ); - m_int = (int32_t) fabs( magn[i] ); - - if ( diff < m_int ) - { - magn[i] = (float) ( sign * ( fabs( magn[i] ) - diff ) ); - break; - } - else - { - diff = diff - m_int; - magn[i] = 0; - nzposcurr--; - } - } - } - } - - pulsescurr = pulsesnum; - - /* Magnitudes coding */ - { - leftp = pulsescurr; /*pulsesnum; */ - leftnz = nzposcurr; /*nzpos; */ - trellislevel = 0; - - for ( i = 0; i < size && leftnz > 1; i++ ) - { - if ( magn[i] != 0.0f ) - { - for ( j = 0; j < leftp; j++ ) - { - prob1 = ( leftnz - 1.0f ) / ( leftp - j - 1.0f ); - prob0 = 1.0f - prob1; - - st = savedstates[trellislevel]; - quantum1 = (float) quantize( (float) ( j + 1 ), ddec[st][0] ); - quantum2 = (float) quantize( (float) ( j + 1 ), ddec[st][1] ); - - if ( quantum1 != ( j + 1 ) && quantum2 != ( j + 1 ) ) - { - /* this magnitude is not possible so set probabilities */ - prob0 = 1.0f; - prob1 = 0.0f; - } - - if ( j < fabs( magn[i] ) - 1 ) - { - magnbits -= log2_f( prob0 ); - } - else - { - magnbits -= log2_f( prob1 ); - break; - } - } - - leftnz--; - leftp -= (int32_t) fabs( magn[i] ); - } - - trellislevel++; - } - - /* Update actual occured surplus */ - *nzpout = nzposcurr; - } - } - - if ( *nzpout > 1 && bcount != NULL ) - { - flag_g1 = 0; - - for ( i = 0; i < size; i++ ) - { - if ( fabs( magn[i] ) > 1.0f ) - { - flag_g1 = 1; - } - } - /* prepare vector for TCQ */ - for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) - { - if ( fabs( magn[i] ) > 0.0f ) - { - abuffer[*bcount] = quants[i]; - mbuffer[*bcount] = magn[i]; - sbuffer[*bcount] = scale; - - ( *bcount )++; - } - } - } - - if ( actualt > 0 ) - { - *qscale = pulsesnum / actualt; - } - else - { - *qscale = FLT_MAX; - } - } - - return magnbits; -} - - -void InitLSBTCQ( - Word16 *bcount ) -{ - *bcount = 0; - move16(); - return; -} - - -void TCQLSB( - int16_t bcount, - float *abuffer, - float *mbuffer, - float *sbuffer, - int16_t *dpath ) -{ - int16_t i, st, dminpos, position; - float q = QTCQ; - float dmin, curdist1, curdist2, newdist1, newdist2; - float metric[STATES_LSB][TCQ_LSB_SIZE]; - int16_t path[STATES_LSB][TCQ_LSB_SIZE]; - int16_t quant[STATES_LSB][TCQ_LSB_SIZE]; - int16_t dquant[STATES_LSB][TCQ_LSB_SIZE]; - int16_t qout[TCQ_LSB_SIZE]; - float q1, q2, s1, s2, a1, a2, sign1, sign2; - float dbuffer[MAX_PULSES]; - - set_f( *metric, 0.0f, STATES_LSB * TCQ_LSB_SIZE ); - set_s( *path, 0, STATES_LSB * TCQ_LSB_SIZE ); - set_s( *quant, 0, STATES_LSB * TCQ_LSB_SIZE ); - set_s( *dquant, 0, STATES_LSB * TCQ_LSB_SIZE ); - set_s( qout, 0, TCQ_LSB_SIZE ); - set_f( dbuffer, 0.0f, MAX_PULSES ); - - metric[1][0] = 16777216.0f; - metric[2][0] = 16777216.0f; - metric[3][0] = 16777216.0f; - - for ( i = 0; i < 2 * TCQ_AMP; i += 2 ) - { - q1 = mbuffer[i]; - q2 = mbuffer[i + 1]; - - s1 = sbuffer[i]; - s2 = sbuffer[i + 1]; - - a1 = abuffer[i]; - a2 = abuffer[i + 1]; - - /* cycle over conditions */ - for ( st = 0; st < 4; st++ ) - { - curdist1 = metric[step_LSB[st][0]][i / 2]; - curdist2 = metric[step_LSB[st][1]][i / 2]; - - /* step 1 */ - sign1 = ( denc_LSB[st][0] & 0x1 ) ? ( q ) : ( -q ); - sign2 = ( denc_LSB[st][0] & 0x2 ) ? ( q ) : ( -q ); - newdist1 = ( a1 - ( q1 + sign1 ) / s1 ) * ( a1 - ( q1 + sign1 ) / s1 ) + ( a2 - ( q2 + sign2 ) / s2 ) * ( a2 - ( q2 + sign2 ) / s2 ); - - /* step 2 */ - sign1 = ( denc_LSB[st][1] & 0x1 ) ? ( q ) : ( -q ); - sign2 = ( denc_LSB[st][1] & 0x2 ) ? ( q ) : ( -q ); - newdist2 = ( a1 - ( q1 + sign1 ) / s1 ) * ( a1 - ( q1 + sign1 ) / s1 ) + ( a2 - ( q2 + sign2 ) / s2 ) * ( a2 - ( q2 + sign2 ) / s2 ); - - /* decision */ - if ( curdist1 + newdist1 < curdist2 + newdist2 ) - { - path[st][i / 2 + 1] = step_LSB[st][0]; - metric[st][i / 2 + 1] = curdist1 + newdist1; - quant[st][i / 2 + 1] = 0; - dquant[st][i / 2 + 1] = dqnt_LSB[step_LSB[st][0]][st]; - } - else - { - path[st][i / 2 + 1] = step_LSB[st][1]; - metric[st][i / 2 + 1] = curdist2 + newdist2; - quant[st][i / 2 + 1] = 1; - dquant[st][i / 2 + 1] = dqnt_LSB[step_LSB[st][0]][st]; - } - } - } - - /* Find path with minimal metric */ - dminpos = 0; - dmin = metric[dminpos][i / 2]; - for ( st = 1; st < 4; st++ ) - { - if ( dmin > metric[st][i / 2] ) - { - dmin = metric[st][i / 2]; - dminpos = st; - } - } - - /* Trace back to get output */ - position = dminpos; - - for ( ; i >= 0; i -= 2 ) - { - qout[i / 2] = quant[position][i / 2 + 1]; - dpath[i / 2] = dquant[position][i / 2 + 1]; - - dbuffer[i] = ( denc_LSB[position][qout[i / 2]] & 0x1 ) ? ( q ) : ( -q ); - dbuffer[i + 1] = ( denc_LSB[position][qout[i / 2]] & 0x2 ) ? ( q ) : ( -q ); - - position = path[position][i / 2 + 1]; - } - - /* add decoded sequence to quanta */ - for ( i = 0; i < bcount; i++ ) - { - mbuffer[i] += dbuffer[i]; - } - - return; -} - -void TCQLSBdec( - int16_t *dpath, - float *mbuffer, - int16_t bcount ) -{ - float q = QTCQ; - int16_t i, state = 0; - - for ( i = 0; i < bcount / 2; i++ ) - { - mbuffer[2 * i] = ( ddec_LSB[state][dpath[i]] & 0x1 ) ? ( q ) : ( -q ); - mbuffer[2 * i + 1] = ( ddec_LSB[state][dpath[i]] & 0x2 ) ? ( q ) : ( -q ); - - state = dstep_LSB[state][dpath[i]]; - } - - return; -} - -void SaveTCQdata( - PARCODEC arInst, - Word16 *dpath, - Word16 bcount ) -{ - Word16 i; - - FOR( i = 0; i < bcount; i++ ) - { - ar_encode_uniform( arInst, dpath[i], 1 ); - } - - return; -} - -void LoadTCQdata( - PARCODEC arInst, - Word16 *dpath, - Word16 bcount ) -{ - Word16 i; - - FOR( i = 0; i < bcount; i++ ) - { - dpath[i] = (Word16) ar_decode( arInst, uniform_model ); - move16(); - } - - return; -} - -void RestoreTCQdec( - int32_t *magn, - int16_t size, - int16_t *bcount, - float *mbuffer ) -{ - int16_t i, nzpos = 0, flag_g1 = 0; - - /* calculate actual nz positions */ - for ( i = 0, nzpos = 0; i < size; i++ ) - { - if ( magn[i] != 0 ) - { - nzpos++; - if ( abs( magn[i] ) > 1 ) - { - flag_g1 = 1; - } - magn[i] *= (int32_t) ( 1.0f / QTCQ ); - } - } - - if ( nzpos > 1 ) - { - for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) - { - if ( magn[i] != 0 ) - { - mbuffer[*bcount] = magn[i] + ( 1.0f / QTCQ ) * mbuffer[*bcount]; - magn[i] = round_f( mbuffer[*bcount] ); - ( *bcount )++; - } - } - } - - return; -} - - -void RestoreTCQ( - float *magn, - int16_t size, - int16_t *bcount, - float *mbuffer ) -{ - int16_t i, nzpos = 0, flag_g1 = 0; - - /* calculate actual nz positions */ - for ( i = 0, nzpos = 0; i < size; i++ ) - { - if ( magn[i] != 0.0f ) - { - nzpos++; - if ( fabs( magn[i] ) > 1.0f ) - { - flag_g1 = 1; - } - } - } - - if ( nzpos > 1 ) - { - for ( i = 0; i < size && flag_g1 && *bcount < 2 * TCQ_AMP; i++ ) - { - if ( fabs( magn[i] ) > 0.0f ) - { - magn[i] = mbuffer[*bcount]; - ( *bcount )++; - } - } - } - - return; -} -#endif diff --git a/lib_com/tcx_ltp.c b/lib_com/tcx_ltp.c index 6914874c2..b759cf088 100644 --- a/lib_com/tcx_ltp.c +++ b/lib_com/tcx_ltp.c @@ -45,47 +45,6 @@ * Local constants *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define ALPHA 0.85f - -/*------------------------------------------------------------------- - * tcx_ltp_get_lpc_flt() - * - * - *-------------------------------------------------------------------*/ - -static void tcx_ltp_get_lpc_flt( - float *input, - const int16_t length, - float *A, - const int16_t lpcorder ) -{ - int16_t i, j; - float s, r[TCXLTP_LTP_ORDER + 1]; - - for ( i = 0; i <= lpcorder; i++ ) - { - s = 0.0; - - for ( j = 0; j < length - i; j++ ) - { - s += input[j] * input[j + i]; - } - r[i] = s; - } - - if ( r[0] < 100.0f ) - { - r[0] = 100.0f; - } - r[0] *= 1.0001f; - - lev_dur( A, r, lpcorder, NULL ); - - return; -} -#endif - /*------------------------------------------------------------------- * tcx_ltp_get_zir_flt() @@ -93,124 +52,6 @@ static void tcx_ltp_get_lpc_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_get_zir_flt( - float *zir, - const int16_t length, - float *synth_ltp, - float *synth, - float *A, - const int16_t lpcorder, - const float gain, - const int16_t pitch_int, - const int16_t pitch_fr, - const int16_t pitres, - const int16_t filtIdx ) -{ - float buf[TCXLTP_LTP_ORDER], alpha, step; - float *x0, *x1, s; - float *y0, *y1, s2; - const float *w0, *w1, *v0, *v1; - int16_t i, j, k, L; - - x0 = &synth_ltp[-pitch_int]; - x1 = x0 - 1; - y0 = synth; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitres - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitres]; - L = tcxLtpFilters_flt[filtIdx].length; - - for ( j = 0; j < lpcorder; j++ ) - { - s = 0; - s2 = 0; - for ( i = 0, k = 0; i < L; i++, k += pitres ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - s2 *= ALPHA; - - buf[j] = ( synth[j] - gain * s2 ) - ( synth_ltp[j] - gain * s ); - - - x0++; - x1++; - y0++; - y1++; - } - - set_f( zir, 0.0f, length ); - - syn_filt( A, lpcorder, zir, zir, length, buf, 0 ); - - alpha = 1.f; - step = 1.f / (float) ( length / 2 ); - - for ( j = length / 2; j < length; j++ ) - { - zir[j] *= alpha; - alpha -= step; - } - - return; -} - - -/*------------------------------------------------------------------- - * predict_signal_flt() - * - * - *-------------------------------------------------------------------*/ - -void predict_signal_flt( - const float excI[], /* i : input excitation buffer */ - float excO[], /* o : output excitation buffer */ - const int16_t T0, /* i : integer pitch lag */ - int16_t frac, /* i : fraction of lag */ - const int16_t frac_max, /* i : max fraction */ - const int16_t L_subfr /* i : subframe size */ -) -{ - int16_t j; - float s; - const float *x0, *win; - - x0 = &excI[-T0 - 1]; - frac = -frac; - - if ( frac < 0 ) - { - frac += frac_max; - x0--; - } - - if ( frac_max == 6 ) - { - win = &inter6_2tcx2_flt[frac][0]; - } - else - { - win = &inter4_2tcx2_flt[frac][0]; - } - - for ( j = 0; j < L_subfr; j++ ) - { - s = win[1] * x0[1] + win[2] * x0[2]; - excO[j] = s + win[0] * x0[0] + win[3] * x0[3]; - x0++; - } - - return; -} - -#endif /*------------------------------------------------------------------- * tcx_ltp_synth_filter_flt() @@ -218,67 +59,6 @@ void predict_signal_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_flt( - float *synth_ltp, - float *synth, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - - if ( gain > 0.f ) - { - x0 = &synth_ltp[-pitch_int]; - x1 = x0 - 1; - y0 = synth; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - - L = tcxLtpFilters_flt[filtIdx].length; - - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - s2 *= ALPHA; - synth_ltp[j] = synth[j] - gain * s2 + gain * s; - - x0++; - x1++; - y0++; - y1++; - } - } - else - { - mvr2r( synth, synth_ltp, length ); - } - - return; -} -#endif /*------------------------------------------------------------------- * tcx_ltp_synth_filter_zir_flt() @@ -286,62 +66,6 @@ static void tcx_ltp_synth_filter_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_zir_flt( - float *synth_ltp, - float *synth, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - float *zir, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - - x0 = &synth_ltp[-pitch_int]; - x1 = x0 - 1; - y0 = synth; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - L = tcxLtpFilters_flt[filtIdx].length; - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - s2 *= ALPHA; - - synth_ltp[j] = ( synth[j] - gain * s2 + gain * s ) - zir[j]; - - x0++; - x1++; - y0++; - y1++; - } - - return; -} -#endif - /*------------------------------------------------------------------- * tcx_ltp_synth_filter_fadein_flt() @@ -349,75 +73,6 @@ static void tcx_ltp_synth_filter_zir_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_fadein_flt( - float *synth_ltp, - float *synth, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - float alpha, step; - - if ( gain > 0.f ) - { - x0 = &synth_ltp[-pitch_int]; - x1 = x0 - 1; - y0 = synth; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - L = tcxLtpFilters_flt[filtIdx].length; - - alpha = 0.f; - step = 1.f / (float) ( length ); - - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - s2 *= ALPHA; - - synth_ltp[j] = synth[j] - alpha * gain * s2 + alpha * gain * s; - - alpha += step; - - x0++; - x1++; - y0++; - y1++; - } - } - else - { - mvr2r( synth, synth_ltp, length ); - } - - return; -} -#endif - /*------------------------------------------------------------------- * tcx_ltp_synth_filter_fadeout_flt() @@ -425,198 +80,12 @@ static void tcx_ltp_synth_filter_fadein_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_fadeout_flt( - float *synth_ltp, - float *synth, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - float alpha, step; - - if ( gain > 0.f ) - { - x0 = &synth_ltp[-pitch_int]; - x1 = x0 - 1; - y0 = synth; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - L = tcxLtpFilters_flt[filtIdx].length; - - alpha = 1.f; - step = 1.f / (float) ( length ); - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - s2 *= ALPHA; - synth_ltp[j] = synth[j] - alpha * gain * s2 + alpha * gain * s; - alpha -= step; - - x0++; - x1++; - y0++; - y1++; - } - } - else - { - mvr2r( synth, synth_ltp, length ); - } - - return; -} - - -/*------------------------------------------------------------------- - * tcx_ltp_decode_params_flt() - * - * - *-------------------------------------------------------------------*/ - -int16_t tcx_ltp_decode_params_flt( - int16_t *ltp_param, - int16_t *pitch_int, - int16_t *pitch_fr, - float *gain, - const int16_t pitmin, - const int16_t pitfr1, - const int16_t pitfr2, - const int16_t pitmax, - const int16_t pitres ) -{ - int16_t gainbits = 2; - - /* Decode Pitch and Gain */ - if ( ( ltp_param ) && ( ltp_param[0] ) ) - { - if ( ltp_param[1] < ( ( pitfr2 - pitmin ) * pitres ) ) - { - *pitch_int = pitmin + ( ltp_param[1] / pitres ); - *pitch_fr = ltp_param[1] - ( *pitch_int - pitmin ) * pitres; - } - else if ( ltp_param[1] < ( ( pitfr2 - pitmin ) * pitres + ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ) ) - { - *pitch_int = pitfr2 + ( ( ltp_param[1] - ( pitfr2 - pitmin ) * pitres ) / ( pitres >> 1 ) ); - *pitch_fr = ( ltp_param[1] - ( pitfr2 - pitmin ) * pitres ) - ( *pitch_int - pitfr2 ) * ( pitres >> 1 ); - *pitch_fr = *pitch_fr << 1; /* was *= (pitres>>1); */ - } - else - { - *pitch_int = ltp_param[1] + pitfr1 - ( ( pitfr2 - pitmin ) * pitres ) - ( ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ); - *pitch_fr = 0; - } - *gain = (float) ( ltp_param[2] + 1 ) * 0.625f / (float) ( 1 << gainbits ); - if ( *pitch_int < PIT_MIN_SHORTER ) - { - /*pitch out of range due to bit error */ - *pitch_int = PIT_MIN_SHORTER; - return 1; - } - if ( *pitch_int > PIT_MAX_MAX ) - { - /*pitch out of range due to bit error */ - *pitch_int = PIT_MAX_MAX; - return 1; - } - } - else - { - *pitch_int = pitmax; - *pitch_fr = 0; - *gain = 0.0f; - } - - return 0; -} -#endif /*------------------------------------------------------------------- *tcx_ltp_synth_filter_10_flt() * * ---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_10_flt( - float *out, - float *in, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - float curr_gain, gain_step; - - x0 = &out[-pitch_int]; - x1 = x0 - 1; - y0 = in; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - L = tcxLtpFilters_flt[filtIdx].length; - - curr_gain = gain; - gain_step = -gain / length; - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - out[j] = in[j] - curr_gain * s2 * ALPHA + curr_gain * s; - - x0++; - x1++; - y0++; - y1++; - - curr_gain += gain_step; - } - - return; -} -#endif /*------------------------------------------------------------------- @@ -625,488 +94,9 @@ static void tcx_ltp_synth_filter_10_flt( * ---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tcx_ltp_synth_filter_01_flt( - float *out, - float *in, - const int16_t length, - const int16_t pitch_int, - const int16_t pitch_fr, - const float gain, - const int16_t pitch_res, - const int16_t filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - const float *v0, *v1; - const float *w0, *w1; - int16_t i, j, k, L; - float curr_gain, gain_step; - - x0 = &out[-pitch_int]; - x1 = x0 - 1; - y0 = in; - y1 = y0 - 1; - - assert( filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[filtIdx].filt[pitch_fr]; - w1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - pitch_fr]; - v0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - L = tcxLtpFilters_flt[filtIdx].length; - - curr_gain = 0.0f; - gain_step = gain / length; - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - out[j] = in[j] - curr_gain * s2 * ALPHA + curr_gain * s; - - x0++; - x1++; - y0++; - y1++; - - curr_gain += gain_step; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -#define MAX_TCX_LTP_FILTER_LEN 8 -#define MAX_TRANSITION_LEN 240 /* L_FRAME_48K / 4 */ - -/*------------------------------------------------------------------- - *tcx_ltp_synth_filter_11_unequal_pitch_flt() - * - * blend between two filters by means of OAO - * filter the input signal at the initial subinterval with - * the first filter unit according to parameters associated to - * the preceding update interval with scaling from non-zero gain towards 0 - * followed by the second filter unit according to parameters associated to - * the current update interval with scaling from 0 towards non-zero gain - ---------------------------------------------------------------------*/ - -static void tcx_ltp_synth_filter_11_unequal_pitch_flt( - float *out, - float *in, - const int16_t length, - const int16_t cur_pitch_int, - const int16_t cur_pitch_fr, - const float cur_gain, - const int16_t pitch_res, - const int16_t filtIdx, - const int16_t prev_pitch_int, - const int16_t prev_pitch_fr, - const float prev_gain, - const int16_t prev_pitch_res, - const int16_t prev_filtIdx ) -{ - float *x0, *x1, s; - float *y0, *y1, s2; - float *l0, *l1, s3; - float *m0, *m1, s4; - const float *v0, *v1; - const float *w0, *w1; - const float *p0, *p1; - const float *q0, *q1; - int16_t i, j, k, L; - int16_t prev_L; - float temp_buf[MAX_TRANSITION_LEN + 2 * MAX_TCX_LTP_FILTER_LEN]; - float *temp_ptr; - float gain, gain_step; - - x0 = &out[-prev_pitch_int]; - x1 = x0 - 1; - y0 = in; - y1 = y0 - 1; - - assert( filtIdx >= 0 && prev_filtIdx >= 0 ); - - w0 = &tcxLtpFilters_flt[prev_filtIdx].filt[prev_pitch_fr]; - w1 = &tcxLtpFilters_flt[prev_filtIdx].filt[prev_pitch_res - prev_pitch_fr]; - v0 = &tcxLtpFilters_flt[prev_filtIdx].filt[0]; - v1 = &tcxLtpFilters_flt[prev_filtIdx].filt[prev_pitch_res]; - - prev_L = tcxLtpFilters_flt[prev_filtIdx].length; - - p0 = &tcxLtpFilters_flt[filtIdx].filt[cur_pitch_fr]; - p1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res - cur_pitch_fr]; - q0 = &tcxLtpFilters_flt[filtIdx].filt[0]; - q1 = &tcxLtpFilters_flt[filtIdx].filt[pitch_res]; - - L = tcxLtpFilters_flt[filtIdx].length; - - /* 1. decreasing gain filter. The first filter unit with the parameters associated to the previous interval and scaling towards 0 */ - gain = prev_gain; - gain_step = -prev_gain / length; - - for ( j = 0; j < length; j++ ) - { - s = 0; - s2 = 0; - - for ( i = 0, k = 0; i < prev_L; i++, k += prev_pitch_res ) - { - s += w0[k] * x0[i] + w1[k] * x1[-i]; - s2 += v0[k] * y0[i] + v1[k] * y1[-i]; - } - - out[j] = in[j] - gain * s2 * ALPHA + gain * s; - - x0++; - x1++; - y0++; - y1++; - - gain += gain_step; - } - - mvr2r( out - L, temp_buf, length + L ); - mvr2r( in + length, temp_buf + length + L, L ); - temp_ptr = &temp_buf[0] + L; - - m0 = temp_ptr; - m1 = temp_ptr - 1; - l0 = &out[-cur_pitch_int]; - l1 = l0 - 1; - - /* 2. increasing gain filter. The second filter unit with the parameters associated to the current interval and scaling from 0 towards current gain */ - gain = 0.0f; - gain_step = cur_gain / length; - - for ( j = 0; j < length; j++ ) - { - s3 = 0; - s4 = 0; - - for ( i = 0, k = 0; i < L; i++, k += pitch_res ) - { - s3 += p0[k] * l0[i] + p1[k] * l1[-i]; - s4 += q0[k] * m0[i] + q1[k] * m1[-i]; - } - - out[j] = *( temp_ptr + j ) - gain * s4 * ALPHA + gain * s3; - - l0++; - l1++; - m0++; - m1++; - - gain += gain_step; - } - - return; -} -#endif /*------------------------------------------------------------------- * tcx_ltp_post_flt() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tcx_ltp_post_flt( - Decoder_State *st, - TCX_LTP_DEC_HANDLE hTcxLtpDec, - const int16_t core, - const int16_t output_frame, - const int16_t delay, - float sig[], - const float tcx_buf[] ) -{ - int16_t tmp, L_transition, lpcorder, filtIdx; - int16_t bfi, L_frame_core, SideInfoOnly; - float gain, gain2; - float zir[L_FRAME_PLUS / 4], A[TCXLTP_LTP_ORDER + 1]; - float buf_in[TCXLTP_MAX_DELAY + L_FRAME48k + TCXLTP_MAX_DELAY], buf_out[2 * L_FRAME48k]; - float *sig_in, *sig_out; - int16_t pitch_int, pitch_fr; - int16_t tcx_buf_len; - int32_t total_brate; - - total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->bits_frame_nominal * FRAMES_PER_SEC : st->total_brate ); - filtIdx = 0; /* just to avoid compilation warnings */ - tcx_buf_len = NS2SA( st->output_Fs, TCXLTP_DELAY_NS ); - SideInfoOnly = 0; - - if ( total_brate >= HQ_96k ) - { - SideInfoOnly = 1; - } - - L_frame_core = st->L_frame; - if ( st->element_mode == IVAS_CPE_MDCT ) - { - L_frame_core = L_FRAME; - } - - if ( core == ACELP_CORE ) - { - bfi = 0; - pitch_int = 0; - pitch_fr = 0; - gain = 0.0f; - - L_frame_core = st->L_frame_past; - } - else - { - bfi = st->bfi; - pitch_int = hTcxLtpDec->tcxltp_pitch_int; - pitch_fr = hTcxLtpDec->tcxltp_pitch_fr; - gain = hTcxLtpDec->tcxltp_gain_float; - } - - /******** Init ********/ - - /* Parameters */ - L_transition = output_frame / 4; - lpcorder = TCXLTP_LTP_ORDER; - - - /* Input buffer */ - sig_in = buf_in + tcx_buf_len; - mvr2r( hTcxLtpDec->tcxltp_mem_in_float, buf_in, tcx_buf_len ); - mvr2r( sig, buf_in + tcx_buf_len, output_frame ); - if ( core > ACELP_CORE ) - { - mvr2r( tcx_buf, sig_in + output_frame, tcx_buf_len ); - } - mvr2r( sig + output_frame - tcx_buf_len, hTcxLtpDec->tcxltp_mem_in_float, tcx_buf_len ); - - /* Output buffer */ - sig_out = buf_out + output_frame; - mvr2r( hTcxLtpDec->tcxltp_mem_out_float, buf_out, output_frame ); - - /* TCX-LTP parameters: integer pitch, fractional pitch, gain */ - - if ( !( SideInfoOnly || hTcxLtpDec->tcxltp ) || core == ACELP_CORE ) - { - /* No LTP */ - pitch_int = 0; - pitch_fr = 0; - gain = 0.f; - } - else if ( !bfi ) - { - /* LTP and good frame */ - if ( output_frame != L_frame_core ) - { - tmp = pitch_int * st->pit_res_max + pitch_fr; - tmp = ( tmp * output_frame + L_frame_core / 2 ) / L_frame_core; - pitch_int = tmp / st->pit_res_max; - pitch_fr = tmp % st->pit_res_max; - } - - if ( st->element_mode == EVS_MONO ) /* hard tunings for EVS_MONO, HQ_48k is TCX only */ - { - if ( total_brate == HQ_48k && L_frame_core == L_FRAME16k ) - { - gain *= 0.32f; - } - else if ( total_brate == HQ_48k && L_frame_core == 512 ) - { - gain *= 0.40f; - } - else - { - gain *= 0.64f; - } - } - else if ( ( st->element_mode > IVAS_SCE ) && ( total_brate >= IVAS_96k ) ) - { - gain *= 0.40f; - } - else - { - gain *= 0.64f; - } - } - else - { - /* PLC: [TCX: Fade-out] - * PLC: LTP and bad frame (concealment) */ - if ( st->pit_res_max == st->pit_res_max_past ) /* ensure consistent core SR to previous frame; otherwise, set gain to 0 */ - { - pitch_int = hTcxLtpDec->tcxltp_pitch_int_post_prev; - pitch_fr = hTcxLtpDec->tcxltp_pitch_fr_post_prev; - gain = hTcxLtpDec->tcxltp_gain_post_prev_float * st->hTcxDec->damping_float; - } - else - { - gain = 0.f; - } - } - - if ( SideInfoOnly ) - { - gain = 0.f; - if ( bfi ) - { - hTcxLtpDec->tcxltp_gain_post_prev_float = 0.f; - } - } - gain2 = gain; - - if ( L_frame_core == L_FRAME ) - { - switch ( output_frame ) - { - case L_FRAME8k: - filtIdx = 0; - break; - case L_FRAME16k: - filtIdx = 1; - break; - case L_FRAME32k: - filtIdx = 2; - break; - case L_FRAME48k: - filtIdx = 3; - break; - default: - assert( 0 ); - break; - } - } - else if ( L_frame_core == L_FRAME16k ) - { - switch ( output_frame ) - { - case L_FRAME8k: - filtIdx = 4; - break; - case L_FRAME16k: - filtIdx = 5; - break; - case L_FRAME32k: - filtIdx = 6; - break; - case L_FRAME48k: - filtIdx = 7; - break; - default: - assert( 0 ); - break; - } - } - else if ( L_frame_core == 512 ) - { - switch ( output_frame ) - { - case L_FRAME8k: - filtIdx = 8; - break; - case L_FRAME16k: - filtIdx = 9; - break; - case L_FRAME32k: - filtIdx = 10; - break; - case L_FRAME48k: - filtIdx = 11; - break; - default: - assert( 0 ); - break; - } - } - else - { - filtIdx = -1; - } - - - /******** Previous-frame part ********/ - tcx_ltp_synth_filter_flt( sig_out, sig_in, delay, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev_float, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); - - /******** Transition part - initial subinterval ********/ - - if ( st->element_mode != EVS_MONO ) - { - if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev_float == 0.f ) - { - /* The filtering is deactivated, just copy input to the output */ - mvr2r( sig_in + delay, sig_out + delay, L_transition ); - } - else if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev_float != 0.f ) - { - /* Filtering with the first filter unit */ - tcx_ltp_synth_filter_10_flt( sig_out + delay, sig_in + delay, L_transition, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev_float, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); - } - else if ( gain != 0.f && hTcxLtpDec->tcxltp_gain_post_prev_float == 0.f ) - { - /* Filtering with the second filter unit */ - tcx_ltp_synth_filter_01_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); - } - else if ( gain == hTcxLtpDec->tcxltp_gain_post_prev_float && pitch_int == hTcxLtpDec->tcxltp_pitch_int_post_prev && pitch_fr == hTcxLtpDec->tcxltp_pitch_fr_post_prev && st->pit_res_max == st->pit_res_max_past && filtIdx == hTcxLtpDec->tcxltp_filt_idx_prev ) - { - tcx_ltp_synth_filter_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); - } - else - { - /* Filtering with the first filter unit, followed by the filtering with the second filter unit */ - tcx_ltp_synth_filter_11_unequal_pitch_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx, - hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev_float, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); - } - } - else - { - if ( gain == 0.f && hTcxLtpDec->tcxltp_gain_post_prev_float == 0.f ) - { - mvr2r( sig_in + delay, sig_out + delay, L_transition ); - } - else if ( hTcxLtpDec->tcxltp_gain_post_prev_float == 0.f ) - { - tcx_ltp_synth_filter_fadein_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); - } - else if ( gain == 0.f ) - { - tcx_ltp_synth_filter_fadeout_flt( sig_out + delay, sig_in + delay, L_transition, hTcxLtpDec->tcxltp_pitch_int_post_prev, hTcxLtpDec->tcxltp_pitch_fr_post_prev, hTcxLtpDec->tcxltp_gain_post_prev_float, st->pit_res_max_past, hTcxLtpDec->tcxltp_filt_idx_prev ); - } - else if ( gain == hTcxLtpDec->tcxltp_gain_post_prev_float && pitch_int == hTcxLtpDec->tcxltp_pitch_int_post_prev && pitch_fr == hTcxLtpDec->tcxltp_pitch_fr_post_prev ) - { - tcx_ltp_synth_filter_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); - } - else - { - { - tcx_ltp_get_lpc_flt( sig_out + delay - output_frame, output_frame, A, lpcorder ); - tcx_ltp_get_zir_flt( zir, L_transition, sig_out + delay - lpcorder, sig_in + delay - lpcorder, A, lpcorder, gain, pitch_int, pitch_fr, st->pit_res_max, filtIdx ); - tcx_ltp_synth_filter_zir_flt( sig_out + delay, sig_in + delay, L_transition, pitch_int, pitch_fr, gain, st->pit_res_max, zir, filtIdx ); - } - } - } - - /******** Current-frame part - subsequent subinterval, filtered with the third filter unit ********/ - tcx_ltp_synth_filter_flt( sig_out + ( delay + L_transition ), sig_in + ( delay + L_transition ), output_frame - ( delay + L_transition ), pitch_int, pitch_fr, gain, st->pit_res_max, filtIdx ); - - /******** Output ********/ - - /* copy to output */ - mvr2r( sig_out, sig, output_frame ); - - /* Update */ - hTcxLtpDec->tcxltp_pitch_int_post_prev = pitch_int; - hTcxLtpDec->tcxltp_pitch_fr_post_prev = pitch_fr; - hTcxLtpDec->tcxltp_gain_post_prev_float = gain2; - hTcxLtpDec->tcxltp_filt_idx_prev = filtIdx; - st->pit_res_max_past = st->pit_res_max; - mvr2r( sig_out, hTcxLtpDec->tcxltp_mem_out_float, output_frame ); - - return; -} -#endif diff --git a/lib_com/tcx_mdct.c b/lib_com/tcx_mdct.c index 72d44202b..7d23dd6f7 100644 --- a/lib_com/tcx_mdct.c +++ b/lib_com/tcx_mdct.c @@ -40,218 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * TCX_MDCT_flt() - * - * - *-------------------------------------------------------------------*/ - -void TCX_MDCT_flt( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const int16_t element_mode ) -{ - int16_t i; - float dctInBuffer[N_MAX]; - - /* Init */ - for ( i = 0; i < m / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; - } - - for ( i = 0; i < l / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 + m / 2 + i] = x[i] - x[l - 1 - i]; - } - - for ( i = 0; i < m / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; - } - - for ( i = 0; i < r / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] - x[l + m + r - 1 - i]; - } - - edct( dctInBuffer, y, l / 2 + m + r / 2, element_mode ); - - v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); - - return; -} - - -/*-------------------------------------------------------------------* - * TCX_MDST_flt() - * - * - *-------------------------------------------------------------------*/ - -void TCX_MDST_flt( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const int16_t element_mode ) -{ - int16_t i; - float dctInBuffer[N_MAX]; - - /* Init */ - for ( i = 0; i < m / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; - } - for ( i = 0; i < l / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 + m / 2 + i] = -1.0f * x[i] - x[l - 1 - i]; - } - for ( i = 0; i < m / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; - } - for ( i = 0; i < r / 2; i++ ) - { - dctInBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] + x[l + m + r - 1 - i]; - } - - edst( dctInBuffer, y, l / 2 + m + r / 2, element_mode ); - - v_multc( y, (float) sqrt( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); - - return; -} - - -/*-------------------------------------------------------------------* - * TCX_MDCT_Inverse_flt() - * - * - *-------------------------------------------------------------------*/ - -void TCX_MDCT_Inverse_flt( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const int16_t element_mode ) -{ - int16_t i; - const int16_t L2 = l >> 1, R2 = r >> 1; - float f; - - edct( x, y + L2, L2 + m + R2, element_mode ); - - for ( i = 0; i < R2; i++ ) - { - y[l + m + R2 + i] = -1.0f * y[L2 + i]; /* fold out right end of DCT */ - } - - mvr2r( y + L2 + m + R2, y, L2 ); /* negate, fold out left end of DCT */ - - for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) - { - f = y[L2 + i]; - y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid of DCT */ - y[l + m + R2 - 1 - i] = -1.0f * f; - } - - v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); - - return; -} - - -/*-------------------------------------------------------------------* - * TCX_MDST_Inverse_flt() - * - * - *-------------------------------------------------------------------*/ - -void TCX_MDST_Inverse_flt( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const int16_t element_mode ) -{ - int16_t i; - const int16_t L2 = l >> 1, R2 = r >> 1; - float f; - - edst( x, y + L2, L2 + m + R2, element_mode ); - - mvr2r( y + L2, y + l + m + R2, R2 ); /* negate, fold out right end of DST */ - - for ( i = 0; i < L2; i++ ) - { - y[i] = -1.0f * y[L2 + m + R2 + i]; /* fold out left end of DST */ - } - - for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) - { - f = y[L2 + i]; - y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid of DST */ - y[l + m + R2 - 1 - i] = -1.0f * f; - } - - v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); - - return; -} - - -/*-------------------------------------------------------------------* - * TCX_MDXT_Inverse_flt() - * - * - *-------------------------------------------------------------------*/ - -void TCX_MDXT_Inverse_flt( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const uint16_t kernel_type ) -{ - const float signLeft = ( kernel_type >= MDCT_II ? -1.f : 1.f ); - const float signRight = ( kernel_type & 1 ? 1.f : -1.f ); - int16_t i; - const int16_t L2 = l >> 1, R2 = r >> 1; - float f; - - edxt( x, y + L2, L2 + m + R2, kernel_type, TRUE ); - - for ( i = 0; i < L2; i++ ) - { - y[i] = signLeft * y[L2 + m + R2 + i]; /* fold out the left end */ - } - - for ( i = 0; i < R2; i++ ) - { - y[l + m + R2 + i] = signRight * y[L2 + i]; /* ...and right end */ - } - - for ( i = 0; i < ( ( L2 + m + R2 ) >> 1 ); i++ ) - { - f = y[L2 + i]; - y[L2 + i] = -1.0f * y[l + m + R2 - 1 - i]; /* time-reverse mid */ - y[l + m + R2 - 1 - i] = -1.0f * f; - } - - v_multc( y, (float) sqrt( (float) ( l / 2 + m + r / 2 ) / NORM_MDCT_FACTOR ), y, l + m + r ); - - return; -} -#endif diff --git a/lib_com/tcx_mdct_fx.c b/lib_com/tcx_mdct_fx.c index beb8ba489..26e7e2345 100644 --- a/lib_com/tcx_mdct_fx.c +++ b/lib_com/tcx_mdct_fx.c @@ -298,7 +298,6 @@ void TCX_MDCT_Inverse( } } -#ifdef IVAS_FLOAT_FIXED void TCX_MDST_Inverse_fx( Word32 *x, /* exp(x_e) */ Word16 x_e, @@ -433,5 +432,3 @@ void TCX_MDXT_Inverse_fx( return; } - -#endif // IVAS_FLOAT_FIXED diff --git a/lib_com/tcx_mdct_window.c b/lib_com/tcx_mdct_window.c index 58d1e5895..110a1160d 100644 --- a/lib_com/tcx_mdct_window.c +++ b/lib_com/tcx_mdct_window.c @@ -46,68 +46,6 @@ const PWord16 *getSineWindowTable( Word16 length ); -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * mdct_window_sine_flt() - * - * - *-------------------------------------------------------------------*/ -void mdct_window_sine_flt( - float *window, - const int32_t Fs, - const int16_t n, - const int16_t window_type, - const int16_t element_mode ) -{ - if ( element_mode == EVS_MONO ) - { - Word16 i; - float c; - - c = EVS_PI / ( 2.0f * (float) n ); - - for ( i = 0; i < n; i++ ) - { - window[i] = (float) sin( c * ( 0.5f + (float) i ) ); - } - } - else - { - const float *window_table = 0; - int16_t buf_in_size = 0; - switch ( window_type ) - { - case FULL_OVERLAP: - window_table = tcx_mdct_window_48; - buf_in_size = 420; - BREAK; - case HALF_OVERLAP: - window_table = tcx_mdct_window_half_48; - buf_in_size = 180; - BREAK; - case TRANSITION_OVERLAP: - case MIN_OVERLAP: - window_table = tcx_mdct_window_trans_48; - buf_in_size = 60; - BREAK; - - default: - assert( 0 && "Unsupported window type" ); - BREAK; - } - - if ( Fs == 48000 ) - { - mvr2r( window_table, window, n ); - } - else - { - lerp_flt( window_table, window, n, buf_in_size ); - } - } - return; -} -#endif void mdct_window_sine_IVAS_updated( @@ -239,161 +177,6 @@ void mdct_window_sine( #endif } -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * mdct_window_aldo_flt() - * - * - *-------------------------------------------------------------------*/ - -void mdct_window_aldo_flt( - float *window1, - float *window2, - const Word16 n ) -{ - Word16 i, n1, n2, d; - const float *p1, *p2; - - /* set table pointers and decimation factor */ - switch ( n ) - { - case 320 / 2: - p1 = window_48kHz + 2; - p2 = window_48kHz + 1110 - 3; - d = 6; - break; - case 512 / 2: - p1 = window_256kHz_flt; - p2 = window_256kHz_flt + 592 - 1; - d = 2; - break; - case 640 / 2: - p1 = window_48kHz + 1; - p2 = window_48kHz + 1110 - 2; - d = 3; - break; - case 1024 / 2: - p1 = window_256kHz_flt; - p2 = window_256kHz_flt + 592 - 1; - d = 1; - break; - case 1280 / 2: - p1 = window_48kHz + 1; - p2 = window_48kHz + 1110 - 2; - d = 3; - break; - case 1920 / 2: - p1 = window_48kHz; - p2 = window_48kHz + 1110 - 1; - d = 1; - break; - default: - assert( 0 ); - return; - } - - /* set lengths */ - n1 = n * 23 / 32; /* left slope length */ - n2 = n * 14 / 32; /* right slope length */ - - /* first part (long slope) */ - if ( n != 1280 / 2 ) - { - for ( i = 0; i < n / 2; i++ ) - { - *window1 = *p1; - window1++; - p1 += d; - } - - if ( ( n == 512 / 2 ) || ( n == 320 / 2 ) ) - p1++; - - for ( ; i < n1; i++ ) - { - *window1 = *p1; - window1++; - p1 += d; - } - } - else - { - const float *pi = window_8_16_32kHz; - - for ( i = 0; i < n / 2; i += 2 ) - { - *window1 = *p1; - window1++; - p1 += d; - - *window1 = *pi; - window1++; - pi++; - } - for ( ; i < n1; i += 2 ) - { - *window1 = *pi; - window1++; - pi++; - - *window1 = *p1; - window1++; - p1 += d; - } - } - - /* second part (short slope) */ - - if ( n != 1280 / 2 ) - { - for ( i = 0; i < n2 / 2; i++ ) - { - *window2 = *p2; - window2++; - p2 -= d; - } - - if ( ( n == 512 / 2 ) || ( n == 320 / 2 ) ) - p2--; - - for ( ; i < n2; i++ ) - { - *window2 = *p2; - window2++; - p2 -= d; - } - } - else - { - const float *pi = window_8_16_32kHz + 370 - 1; - - for ( i = 0; i < n2 / 2; i += 2 ) - { - *window2 = *p2; - window2++; - p2 -= d; - - *window2 = *pi; - window2++; - pi--; - } - - for ( ; i < n2; i += 2 ) - { - *window2 = *pi; - window2++; - pi--; - - *window2 = *p2; - window2++; - p2 -= d; - } - } - - return; -} -#endif - void mdct_window_aldo( Word16 *window1, /* Q15 */ diff --git a/lib_com/tcx_utils.c b/lib_com/tcx_utils.c index 942105a94..60c854308 100644 --- a/lib_com/tcx_utils.c +++ b/lib_com/tcx_utils.c @@ -42,966 +42,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tcx_get_windows_flt() - * - * - *-------------------------------------------------------------------*/ -void tcx_get_windows_flt( - TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration */ - const int16_t left_mode, /* i : overlap mode of left window half */ - const int16_t right_mode, /* i : overlap mode of right window half */ - int16_t *left_overlap, /* o : left overlap length */ - const float **left_win, /* o : left overlap window */ - int16_t *right_overlap, /* o : right overlap length */ - const float **right_win, /* o : right overlap window */ - const int16_t fullband /* i : fullband flag */ -) -{ - if ( !fullband ) - { - /* Left part */ - - if ( left_mode == TRANSITION_OVERLAP ) - { - /* ACELP->TCX transition */ - *left_overlap = hTcxCfg->tcx_mdct_window_trans_length; - *left_win = hTcxCfg->tcx_mdct_window_trans_flt; - } - else if ( left_mode == MIN_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_min_length; - *left_win = hTcxCfg->tcx_mdct_window_minimum_flt; - } - else if ( left_mode == HALF_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_half_length; - *left_win = hTcxCfg->tcx_mdct_window_half_flt; - } - else if ( left_mode == FULL_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_length; - *left_win = hTcxCfg->tcx_aldo_window_1_trunc_flt; - } - else - { - assert( !"Not supported overlap" ); - } - - /* Right part */ - - if ( right_mode == MIN_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_min_length; - *right_win = hTcxCfg->tcx_mdct_window_minimum_flt; - } - else if ( right_mode == HALF_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_half_length; - *right_win = hTcxCfg->tcx_mdct_window_half_flt; - } - else if ( right_mode == FULL_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_delay; - *right_win = hTcxCfg->tcx_aldo_window_2_flt; - } - else - { - assert( !"Not supported overlap" ); - } - } - else - { - /* Left part */ - - if ( left_mode == TRANSITION_OVERLAP ) - { - /* ACELP->TCX transition */ - *left_overlap = hTcxCfg->tcx_mdct_window_trans_lengthFB; - *left_win = hTcxCfg->tcx_mdct_window_transFB_flt; - } - else if ( left_mode == MIN_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_min_lengthFB; - *left_win = hTcxCfg->tcx_mdct_window_minimumFB_flt; - } - else if ( left_mode == HALF_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_half_lengthFB; - *left_win = hTcxCfg->tcx_mdct_window_halfFB_flt; - } - else if ( left_mode == RECTANGULAR_OVERLAP ) - { - *left_overlap = 0; - *left_win = NULL; - } - else if ( left_mode == FULL_OVERLAP ) - { - *left_overlap = hTcxCfg->tcx_mdct_window_lengthFB; - *left_win = hTcxCfg->tcx_aldo_window_1_FB_trunc_flt; - } - else - { - assert( !"Not supported overlap" ); - } - - /* Right part */ - - if ( right_mode == MIN_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_min_lengthFB; - *right_win = hTcxCfg->tcx_mdct_window_minimumFB_flt; - } - else if ( right_mode == HALF_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_half_lengthFB; - *right_win = hTcxCfg->tcx_mdct_window_halfFB_flt; - } - else if ( right_mode == RECTANGULAR_OVERLAP ) - { - *right_overlap = 0; - *right_win = NULL; - } - else if ( right_mode == FULL_OVERLAP ) - { - *right_overlap = hTcxCfg->tcx_mdct_window_delayFB; - *right_win = hTcxCfg->tcx_aldo_window_2_FB_flt; - } - else - { - assert( !"Not supported overlap" ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * tcx_windowing_analysis_flt() - * - * - *-------------------------------------------------------------------*/ - -void tcx_windowing_analysis_flt( - const float *signal, /* i : signal vector */ - const int16_t L_frame, /* i : frame length */ - const int16_t left_overlap, /* i : left overlap length */ - const float *left_win, /* i : left overlap window */ - const int16_t right_overlap, /* i : right overlap length */ - const float *right_win, /* i : right overlap window */ - float *output /* o : windowed signal vector */ -) -{ - int16_t w; - - /* Left overlap */ - for ( w = 0; w < left_overlap; w++ ) - { - *output++ = *signal++ * left_win[w]; - } - - /* Non overlapping region */ - for ( w = 0; w < L_frame - ( left_overlap + right_overlap ) / 2; w++ ) - { - *output++ = *signal++; - } - - /* Right overlap */ - for ( w = 0; w < right_overlap; w++ ) - { - *output++ = *signal++ * right_win[right_overlap - 1 - w]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * WindowSignal_flt() - * - * - *-------------------------------------------------------------------*/ - -void WindowSignal_flt( - TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ - int16_t offset, /* i : left folding point offset relative to the input signal pointer */ - const int16_t left_overlap_mode, /* i : overlap mode of left window half */ - const int16_t right_overlap_mode, /* i : overlap mode of right window half */ - int16_t *left_overlap_length, /* o : TCX window left overlap length */ - int16_t *right_overlap_length, /* o : TCX window right overlap length */ - const float in[], /* i : input signal */ - int16_t *L_frame, /* i/o: frame length */ - float out[], /* o : output windowed signal */ - const int16_t truncate_aldo, /* i : nonzero to truncate long ALDO slope */ - const int16_t fullband /* i : fullband flag */ -) -{ - int16_t l, r; - const float *left_win; - const float *right_win; - - /*-----------------------------------------------------------* - * Init * - *-----------------------------------------------------------*/ - - tcx_get_windows_flt( hTcxCfg, left_overlap_mode, right_overlap_mode, &l, &left_win, &r, &right_win, fullband ); - - /* Init lengths */ - - /* if past frame is ACELP */ - if ( left_overlap_mode == TRANSITION_OVERLAP ) - { - /* Increase frame size for 5ms */ - if ( !fullband ) - { - *L_frame += hTcxCfg->tcx5Size; - offset = -hTcxCfg->tcx_mdct_window_trans_length / 2; - } - else - { - *L_frame += hTcxCfg->tcx5SizeFB; - offset = -hTcxCfg->tcx_mdct_window_trans_lengthFB / 2; - } - } - - /*-----------------------------------------------------------* - * Windowing * - *-----------------------------------------------------------*/ - - tcx_windowing_analysis_flt( in - l / 2 + offset, *L_frame, l, left_win, r, right_win, out ); - - if ( left_overlap_mode == FULL_OVERLAP && truncate_aldo ) - { - /* fade truncated ALDO window to avoid discontinuities */ - if ( !fullband ) - { - v_mult( out, hTcxCfg->tcx_mdct_window_minimum_flt, out, hTcxCfg->tcx_mdct_window_min_length ); - } - else - { - v_mult( out, hTcxCfg->tcx_mdct_window_minimumFB_flt, out, hTcxCfg->tcx_mdct_window_min_lengthFB ); - } - } - - *left_overlap_length = l; - *right_overlap_length = r; - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_windowing_synthesis_current_frame_flt() - * - * - *-------------------------------------------------------------------*/ - -void tcx_windowing_synthesis_current_frame_flt( - float *signal, /* i/o: signal vector */ - const float *window, /* i : TCX window vector */ - const float *window_half, /* i : TCX window vector for half-overlap window */ - const float *window_min, /* i : TCX minimum overlap window */ - const int16_t window_length, /* i : TCX window length */ - const int16_t window_half_length, /* i : TCX half window length */ - const int16_t window_min_length, /* i : TCX minimum overlap length */ - const int16_t left_rect, /* i : left part is rectangular */ - const int16_t left_mode, /* i : overlap mode of left window half */ - float *acelp_zir, /* i/o: acelp ZIR */ - const float *old_syn, /* i : old synthesis */ - const float *syn_overl, /* i : overlap synthesis */ - const float *A_zir, - const float *window_trans, - int16_t acelp_zir_len, - const int16_t acelp_mem_len, - const int16_t last_core_bfi, /* i : last mode */ - const int16_t last_is_cng, - const int16_t fullbandScale ) -{ - int16_t i, w, overlap; - float tmp[L_FRAME_MAX / 2]; - - /* Init */ - overlap = window_length >> 1; - - /* Past-frame is TCX concealed as CNG and current-frame is TCX */ - if ( last_is_cng == 1 && left_rect == 0 ) - { - if ( !fullbandScale ) - { - set_zero( acelp_zir, acelp_zir_len ); - syn_filt( A_zir, M, acelp_zir, acelp_zir, acelp_zir_len, signal + overlap + acelp_mem_len - M, 0 ); - } - else - { - lerp_flt( acelp_zir, tmp, acelp_zir_len, acelp_zir_len * FSCALE_DENOM / fullbandScale ); - acelp_zir = tmp; - } - - for ( i = 0; i < acelp_zir_len; i++ ) - { - signal[i] *= (float) ( i ) / (float) ( acelp_zir_len ); - signal[i] += acelp_zir[i] * (float) ( acelp_zir_len - i ) / (float) ( acelp_zir_len ); - } - } - else if ( left_rect == 1 && last_core_bfi == ACELP_CORE ) /* Rectangular window (past-frame is ACELP) */ - { - for ( i = 0; i < overlap - acelp_mem_len; i++ ) - { - signal[i] = 0; - } - - if ( fullbandScale == 0 ) - { - /*OLA with ACELP*/ - for ( i = 0; i < 2 * acelp_mem_len; i++ ) - { - /*window decoded TCX with aliasing*/ - signal[i + overlap - acelp_mem_len] *= window_trans[i]; - /*Time TDAC: 1)forward part of ACELP*/ - signal[i + overlap - acelp_mem_len] += old_syn[acelp_zir_len - 2 * acelp_mem_len + i] * window_trans[2 * acelp_mem_len - i - 1] * window_trans[2 * acelp_mem_len - i - 1]; - - /*Time TDAC: 1)reward part of ACELP*/ - signal[i + overlap - acelp_mem_len] += old_syn[acelp_zir_len - i - 1] * window_trans[i] * window_trans[2 * acelp_mem_len - i - 1]; - } - - for ( i = 0; i < M; i++ ) - { - signal[overlap + acelp_mem_len - M + i] -= old_syn[acelp_zir_len - M + i]; - } - } - - /* ZIR at the end of the ACELP frame */ - acelp_zir_len = 64; - - if ( !fullbandScale ) - { - set_zero( acelp_zir, acelp_zir_len ); - syn_filt( A_zir, M, acelp_zir, acelp_zir, acelp_zir_len, signal + overlap + acelp_mem_len - M, 0 ); - } - else - { - lerp_flt( acelp_zir, tmp, acelp_zir_len * fullbandScale / FSCALE_DENOM, acelp_zir_len ); - acelp_zir_len = acelp_zir_len * fullbandScale / FSCALE_DENOM; - acelp_zir = tmp; - - if ( acelp_zir_len >= 2.0f * 64 ) - { - /* apply a simple low-pass to the ZIR, to avoid potentially unmasked HF content */ - for ( i = 2; i < acelp_zir_len; i++ ) - { - acelp_zir[i] = 0.25f * acelp_zir[i - 2] + 0.35f * acelp_zir[i - 1] + 0.40f * acelp_zir[i]; - } - acelp_zir[acelp_zir_len - 1] = 0.40f * acelp_zir[acelp_zir_len - 1] + 0.35f * acelp_zir[acelp_zir_len - 1] + 0.25f * acelp_zir[acelp_zir_len - 2]; - acelp_zir[acelp_zir_len - 2] = 0.40f * acelp_zir[acelp_zir_len - 2] + 0.35f * acelp_zir[acelp_zir_len - 1] + 0.25f * acelp_zir[acelp_zir_len - 1]; - for ( i = acelp_zir_len - 3; i >= 0; i-- ) - { - acelp_zir[i] = 0.40f * acelp_zir[i] + 0.35f * acelp_zir[i + 1] + 0.25f * acelp_zir[i + 2]; - } - } - } - - for ( i = 0; i < acelp_zir_len; i++ ) - { - /*remove reconstructed ZIR and add ACELP ZIR*/ - signal[i + overlap + acelp_mem_len] -= acelp_zir[i] * (float) ( acelp_zir_len - i ) / (float) acelp_zir_len; - } - } - else if ( left_rect == 1 && last_core_bfi != 0 ) /* Rectangular window (past-frame is TCX) */ - { - for ( i = 0; i < overlap + acelp_mem_len; i++ ) - { - signal[i] = 0; - } - for ( i = 0; i < window_length; i++ ) - { - signal[i + overlap + acelp_mem_len] *= window[i]; - } - } - else if ( left_rect != 1 && last_core_bfi == 0 ) /* Normal window (past-frame is ACELP) */ - { - for ( i = 0; i < window_length; i++ ) - { - signal[i] *= window[i]; - } - - for ( i = 0; i < window_length; i++ ) - { - signal[i] += syn_overl[i]; - } - } - else /* Normal window (past-frame is TCX) */ - { - if ( left_mode == 2 ) - { - /* min. overlap */ - for ( i = 0; i < ( window_length - window_min_length ) / 2; i++ ) - { - signal[i] = 0.0f; - } - for ( w = 0; w < window_min_length; i++, w++ ) - { - signal[i] *= window_min[w]; - } - } - else if ( left_mode == 3 ) - { - /* half OL */ - for ( i = 0; i < ( window_length - window_half_length ) / 2; i++ ) - { - signal[i] = 0.0f; - } - for ( w = 0; w < window_half_length; i++, w++ ) - { - signal[i] *= window_half[w]; - } - } - else - { - /* normal full/maximum overlap */ - for ( i = 0; i < window_length; i++ ) - { - signal[i] *= window[i]; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_windowing_synthesis_past_frame_flt() - * - * - *-------------------------------------------------------------------*/ - -void tcx_windowing_synthesis_past_frame_flt( - float *signal, /* i/o: signal vector */ - const float *window, /* i : TCX window vector */ - const float *window_half, /* i : TCX window vector for half-overlap window */ - const float *window_min, /* i : TCX minimum overlap window */ - const int16_t window_length, /* i : TCX window length */ - const int16_t window_half_length, /* i : TCX half window length */ - const int16_t window_min_length, /* i : TCX minimum overlap length */ - const int16_t right_mode /* i : overlap mode (left_mode of current frame) */ -) -{ - int16_t i, w; - - if ( right_mode == MIN_OVERLAP ) - { - /* min. overlap */ - for ( i = ( window_length - window_min_length ) / 2, w = 0; w < window_min_length; i++, w++ ) - { - signal[i] *= window_min[window_min_length - 1 - w]; - } - for ( ; i < window_length; i++ ) - { - signal[i] = 0.0f; - } - } - else if ( right_mode == HALF_OVERLAP ) - { - /* half OL */ - for ( i = ( window_length - window_half_length ) / 2, w = 0; w < window_half_length; i++, w++ ) - { - signal[i] *= window_half[window_half_length - 1 - w]; - } - for ( ; i < window_length; i++ ) - { - signal[i] = 0.0f; - } - } - else if ( right_mode == FULL_OVERLAP ) - { - /* normal full/maximum overlap */ - for ( i = 0; i < window_length; i++ ) - { - signal[i] *= window[window_length - 1 - i]; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * lpc2mdct_flt() - * - * - *-------------------------------------------------------------------*/ - -void lpc2mdct_flt( - float *lpcCoeffs, - const int16_t lpcOrder, - float mdct_gains[], - const int16_t length, - const int16_t noInverse ) -{ - float RealData[2 * FDNS_NPTS], ImagData[2 * FDNS_NPTS]; - float tmp; - int16_t i, sizeN; - - assert( length <= FDNS_NPTS ); - - sizeN = 2 * length; - - /* ODFT */ - for ( i = 0; i < lpcOrder + 1; i++ ) - { - tmp = (float) ( ( (float) i ) * EVS_PI / (float) ( sizeN ) ); - RealData[i] = (float) ( lpcCoeffs[i] * cos( tmp ) ); - ImagData[i] = (float) ( -lpcCoeffs[i] * sin( tmp ) ); - } - - for ( ; i < sizeN; i++ ) - { - RealData[i] = 0.f; - ImagData[i] = 0.f; - } - - DoFFT( RealData, ImagData, sizeN ); - - if ( noInverse ) - { - for ( i = 0; i < length; i++ ) - { - mdct_gains[i] = (float) ( sqrt( RealData[i] * RealData[i] + ImagData[i] * ImagData[i] ) ); - } - } - else - /* Get amplitude */ - { - for ( i = 0; i < length; i++ ) - { - mdct_gains[i] = (float) ( 1.0f / max( EPSILON, sqrt( RealData[i] * RealData[i] + ImagData[i] * ImagData[i] ) ) ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * mdct_noiseShaping_flt() - * - * - *-------------------------------------------------------------------*/ - -void mdct_noiseShaping_flt( - float x[], - const int16_t lg, - const float gains[], - const int16_t nBands ) -{ - int16_t i, j, k, l; - float g; - int16_t m, n, k1, k2; - - j = 0; - assert( nBands != 0 ); - k = lg / nBands; - m = lg % nBands; - - if ( m ) - { - if ( m <= ( FDNS_NPTS / 2 ) ) - { - n = FDNS_NPTS / m; - k1 = k; - k2 = k + 1; - } - else - { - n = FDNS_NPTS / ( FDNS_NPTS - m ); - k1 = k + 1; - k2 = k; - } - - for ( i = 0; i < lg; ) - { - if ( j % n ) - { - k = k1; - } - else - { - k = k2; - } - g = gains[j++]; - - /* Limit number of loops, if end is reached */ - k = min( k, lg - i ); - - for ( l = 0; l < k; l++ ) - { - x[i++] *= g; - } - } - } - else - { - for ( i = 0; i < lg; ) - { - g = gains[j++]; - - for ( l = 0; l < k; l++ ) - { - x[i++] *= g; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * PsychAdaptLowFreqDeemph_flt() - * - * - *-------------------------------------------------------------------*/ - -void PsychAdaptLowFreqDeemph_flt( - float x[], - const float lpcGains[], - float lf_deemph_factors[] ) -{ - int16_t i; - float max_val, fac, tmp; - - max_val = tmp = lpcGains[0]; - - /* find minimum (tmp) and maximum (max) of LPC gains in low frequencies */ - for ( i = 1; i < 9; i++ ) - { - if ( tmp > lpcGains[i] ) - { - tmp = lpcGains[i]; - } - if ( max_val < lpcGains[i] ) - { - max_val = lpcGains[i]; - } - } - - tmp *= 32.0f; - - if ( ( max_val < tmp ) && ( tmp > FLT_MIN ) ) - { - fac = tmp = (float) pow( max_val / tmp, 0.0078125f ); - - if ( lf_deemph_factors ) - { - /* gradual lowering of lowest 32 bins; DC is lowered by (max/tmp)^1/4 */ - for ( i = 31; i >= 0; i-- ) - { - x[i] *= fac; - lf_deemph_factors[i] *= fac; - fac *= tmp; - } - } - else - { - /* gradual lowering of lowest 32 bins; DC is lowered by (max/tmp)^1/4 */ - for ( i = 31; i >= 0; i-- ) - { - x[i] *= fac; - fac *= tmp; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * AdaptLowFreqDeemph_flt() - * - * - *-------------------------------------------------------------------*/ - -void AdaptLowFreqDeemph_flt( - float x[], - int16_t tcx_lpc_shaped_ari, - const float lpcGains[], - const int16_t lg, - float lf_deemph_factors[] ) -{ - int16_t i, i_max_old, i_max; - - if ( !tcx_lpc_shaped_ari ) - { - /* 1. find first magnitude maximum in lower quarter of spectrum */ - i_max = -1; - - for ( i = 0; i < lg / 4; i++ ) - { - if ( ( x[i] <= -4.0f ) || ( x[i] >= 4.0f ) ) - { - x[i] += ( x[i] < 0.0f ) ? 2.0f : -2.0f; - i_max = i; - break; - } - } - /* 2. expand value range of all xi up to i_max: two extra steps */ - - for ( i = 0; i < i_max; i++ ) - { - x[i] *= 0.5f; - lf_deemph_factors[i] *= 0.5f; - } - /* 3. find first magnitude maximum in lower quarter of spectrum */ - i_max_old = i_max; - - if ( i_max_old > -1 ) - { - i_max = -1; - - for ( i = 0; i < lg / 4; i++ ) - { - if ( ( x[i] <= -4.0f ) || ( x[i] >= 4.0f ) ) - { - x[i] += ( x[i] < 0.0f ) ? 2.0f : -2.0f; - i_max = i; - break; - } - } - } - /* 4. expand value range of all xi up to i_max: two extra steps */ - for ( i = 0; i < i_max; i++ ) - { - x[i] *= 0.5f; - lf_deemph_factors[i] *= 0.5f; - } - /* 5. always expand two lines; lines could be at index 0 and 1! */ - if ( i_max < i_max_old ) - { - i_max = i_max_old; - } - i = i_max + 1; - if ( x[i] < 0.0f ) - { - if ( x[i] > -4.0f ) - { - lf_deemph_factors[i] *= 0.5f; - } - x[i] = ( x[i] <= -4.0f ) ? x[i] + 2.0f : x[i] * 0.5f; - } - else - { - if ( x[i] < 4.0f ) - { - lf_deemph_factors[i] *= 0.5f; - } - x[i] = ( x[i] >= 4.0f ) ? x[i] - 2.0f : x[i] * 0.5f; - } - i++; - if ( x[i] < 0.0f ) - { - if ( x[i] > -4.0f ) - { - lf_deemph_factors[i] *= 0.5f; - } - x[i] = ( x[i] <= -4.0f ) ? x[i] + 2.0f : x[i] * 0.5f; - } - else - { - if ( x[i] < 4.0f ) - { - lf_deemph_factors[i] *= 0.5f; - } - x[i] = ( x[i] >= 4.0f ) ? x[i] - 2.0f : x[i] * 0.5f; - } - } - else - { - PsychAdaptLowFreqDeemph_flt( x, lpcGains, lf_deemph_factors ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_noise_filling_flt() - * - * - *-------------------------------------------------------------------*/ - -void tcx_noise_filling_flt( - float *Q, - const int16_t noiseFillSeed, - const int16_t iFirstLine, - const int16_t lowpassLine, - const int16_t nTransWidth, - const int16_t L_frame, - const float tiltCompFactor, - float fac_ns, - Word16 *infoTCXNoise, - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t i, m, segmentOffset; - int16_t win; /* window coefficient */ - Word16 seed; - float tilt_factor, nrg, tmp1, tmp2; - - /* 16-bit random number generator seed for generating filled lines */ - seed = (Word16) noiseFillSeed; - - tilt_factor = (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / (float) L_frame ); - fac_ns /= (float) ( nTransWidth * nTransWidth ); - - /* find last nonzero line below iFirstLine, use it as start offset */ - i = iFirstLine; - - if ( element_mode == IVAS_CPE_MDCT ) /* ... but only in mono or parametric stereo since it may cause binaural unmasking in discrete stereo */ - { - segmentOffset = i; - } - else - { - for ( ; i > ( iFirstLine >> 1 ); i-- ) - { - if ( Q[i] != 0.0f ) - { - break; - } - } - - fac_ns *= (float) pow( tilt_factor, (float) i ); - segmentOffset = ++i; - } - - nrg = 1e-9f; - win = 0; - - for ( ; i < lowpassLine; i++ ) - { - fac_ns *= tilt_factor; - - if ( Q[i] != 0.0f ) - { - if ( win > 0 ) - { - /* RMS-normalize current noise-filled segment */ - tmp1 = (float) sqrt( ( i - segmentOffset ) / nrg ); - tmp2 = tmp1 * (float) nTransWidth; - - for ( m = segmentOffset; m < i - win; m++ ) - { - Q[m] *= tmp2; - } - - for ( ; win > 0; win-- ) - { - Q[m++] *= tmp1 * (float) win; - } - nrg = 1e-9f; /* start new segment: reset noise segment energy */ - } - segmentOffset = i + 1; - } - else - { - /* line is zero, so fill line and update window and energy */ - if ( win < nTransWidth ) - { - win++; - } - tmp1 = (float) own_random( &seed ); - nrg += tmp1 * tmp1; /* sum up energy of current noise segment */ - Q[i] = tmp1 * (float) win * fac_ns; - - if ( infoTCXNoise ) - { - /* set noiseflags for IGF */ - infoTCXNoise[i] = 1; - } - } - } - - if ( win > 0 ) - { - /* RMS-normalize uppermost noise-filled segment */ - tmp1 = (float) sqrt( ( lowpassLine - segmentOffset ) / nrg ); - tmp2 = tmp1 * (float) nTransWidth; - - for ( m = segmentOffset; m < lowpassLine; m++ ) - { - Q[m] *= tmp2; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * InitTnsConfigs_flt() - * - * - *-------------------------------------------------------------------*/ - -void InitTnsConfigs_flt( - const int16_t bwidth, - const int16_t L_frame, - STnsConfig tnsConfig[2][2], - const int16_t igfStopFreq, - const int32_t total_brate, - const int16_t element_mode, - const int16_t MCT_flag ) -{ - if ( total_brate > ACELP_32k ) - { - InitTnsConfiguration_flt( bwidth, L_frame / 2, &tnsConfig[0][0], igfStopFreq, total_brate, element_mode, MCT_flag ); - } - - InitTnsConfiguration_flt( bwidth, L_frame, &tnsConfig[1][0], igfStopFreq, total_brate, element_mode, MCT_flag ); - - InitTnsConfiguration_flt( bwidth, L_frame + L_frame / 4, &tnsConfig[1][1], igfStopFreq, total_brate, element_mode, MCT_flag ); - - return; -} - - -/*-------------------------------------------------------------------* - * SetAllowTnsOnWhite_flt - * - * set TNS config flag for possible application of TNS in the whitened domain - *-------------------------------------------------------------------*/ - -void SetAllowTnsOnWhite_flt( - STnsConfig tnsConfig[2][2], /* o : updated TNS configurations */ - const int8_t allowTnsOnWhite /* i : flag for TNS in whiteded domain mode */ -) -{ - tnsConfig[0][0].allowTnsOnWhite = allowTnsOnWhite; - tnsConfig[0][1].allowTnsOnWhite = allowTnsOnWhite; - tnsConfig[1][0].allowTnsOnWhite = allowTnsOnWhite; - tnsConfig[1][1].allowTnsOnWhite = allowTnsOnWhite; - - return; -} - - -/*-------------------------------------------------------------------* - * SetTnsConfig_flt() - * - * - *-------------------------------------------------------------------*/ - -void SetTnsConfig_flt( - TCX_CONFIG_HANDLE hTcxCfg, - const int16_t isTCX20, - const int16_t isAfterACELP ) -{ - hTcxCfg->pCurrentTnsConfig = &hTcxCfg->tnsConfig[isTCX20][isAfterACELP]; - assert( hTcxCfg->pCurrentTnsConfig != NULL ); - - return; -} -#endif diff --git a/lib_com/tcx_utils_fx.c b/lib_com/tcx_utils_fx.c index 05607f1c2..64b7defc9 100644 --- a/lib_com/tcx_utils_fx.c +++ b/lib_com/tcx_utils_fx.c @@ -2056,7 +2056,6 @@ void InitTnsConfigs( InitTnsConfiguration( bwidth, add( L_frame, shr( L_frame, 2 ) ), &tnsConfig[1][1], igfStopFreq, total_brate, element_mode, MCT_flag ); } -#ifdef IVAS_FLOAT_FIXED void InitTnsConfigs_ivas_fx( const Word16 bwidth, /*Q0*/ const Word16 L_frame, /*Q0*/ @@ -2073,7 +2072,6 @@ void InitTnsConfigs_ivas_fx( InitTnsConfiguration_ivas_fx( bwidth, L_frame, &tnsConfig[1][0], igfStopFreq, total_brate, element_mode, MCT_flag ); InitTnsConfiguration_ivas_fx( bwidth, add( L_frame, shr( L_frame, 2 ) ), &tnsConfig[1][1], igfStopFreq, total_brate, element_mode, MCT_flag ); } -#endif void SetTnsConfig( diff --git a/lib_com/tec_com_flt.c b/lib_com/tec_com_flt.c index f19893979..3fde444c0 100644 --- a/lib_com/tec_com_flt.c +++ b/lib_com/tec_com_flt.c @@ -42,893 +42,3 @@ #include "prot.h" #include "stat_dec.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * Local constants - *-------------------------------------------------------------------*/ - -#define LOBUF_NO_SMOOTHING_MODE 1 - -#define EPS ( 1e-12f ) -#define ENV_SCALE_OFFSET_1 90.309f /* 10*log10(2^30) */ -#define MAX_TEC_BW_LO ( 12 ) -#define MAX_NB_TEC_LOW_BAND ( 3 ) - - -#define TecSmoothingDeg 5 -#define NbTecLowBand 3 - -#define ratioHiLoFac 1.5894f -#define thRatio 0.3649f -#define thRatio2 2.0288f -#define thCorrCoef 0.8795f -#define ratioHiLoFacDec ( 1.5894f * 0.75f ) - -/*------------------------------------------------------------------- - * calcLoBufferDec() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoBufferDec( - float **pCldfbReal, - float **pCldfbImag, - float *loBuffer, - const int16_t startPos, - const int16_t stopPos, - const int16_t bandOffsetBottom, - const float scaleOffset ) -{ - int16_t slot, k, lb, li, ui; - float nrg, tmp; - - /* calc loTempEnv */ - for ( slot = startPos; slot < stopPos; slot++ ) - { - tmp = 0; - - for ( lb = 0; lb < NbTecLowBand; lb++ ) - { - li = TecLowBandTable[lb]; - ui = TecLowBandTable[lb + 1]; - - nrg = 0; - for ( k = li; k < ui; k++ ) - { - nrg += pCldfbReal[slot][k + bandOffsetBottom] * pCldfbReal[slot][k + bandOffsetBottom] + pCldfbImag[slot][k + bandOffsetBottom] * pCldfbImag[slot][k + bandOffsetBottom]; - } - tmp += (float) log10( nrg * normReciprocal[ui - li] + EPS ); - } - - loBuffer[slot] = 10.0f * tmp / NbTecLowBand + scaleOffset; - } - - return; -} - - -/*------------------------------------------------------------------- - * calcLoBufferEnc() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoBufferEnc( - float **pCldfbPow, - const int16_t startPos, - const int16_t stopPos, - const int16_t bandOffsetBottom, - const float scaleOffset, - float *loBuffer ) -{ - int16_t slot, k, lb, li, ui; - float nrg, tmp; - - /* calc loTempEnv */ - for ( slot = startPos; slot < stopPos; slot++ ) - { - tmp = 0; - - for ( lb = 0; lb < NbTecLowBand; lb++ ) - { - li = TecLowBandTable[lb]; - ui = TecLowBandTable[lb + 1]; - - nrg = 0; - for ( k = li; k < ui; k++ ) - { - nrg += pCldfbPow[slot][k + bandOffsetBottom]; - } - tmp += (float) log10( nrg * normReciprocal[ui - li] + EPS ); - } - - loBuffer[slot] = 10.0f * tmp / NbTecLowBand + scaleOffset; - } - - return; -} - - -/*------------------------------------------------------------------- - * calcLoTempEnv() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoTempEnv( - const float *loBuffer, - const int16_t noCols, - float *loTempEnv, - const float adjFac ) -{ - int16_t slot, i; - - for ( slot = 0; slot < noCols; slot++ ) - { - loTempEnv[slot] = TecSC[0] * loBuffer[slot]; - for ( i = 1; i < TecSmoothingDeg + 1; i++ ) - { - loTempEnv[slot] += TecSC[i] * loBuffer[slot - i]; - } - - loTempEnv[slot] *= adjFac; - } - - return; -} - -/*------------------------------------------------------------------- - * calcHiTempEnv() - * - * - *-------------------------------------------------------------------*/ - -static void calcHiTempEnv( - float **pCldfbPow, - const int16_t startPos, - const int16_t stopPos, - const int16_t lowSubband, - const int16_t highSubband, - const float scaleOffset, - float *hiTempEnv ) -{ - int16_t timeIndex, k; - int16_t bwHigh = highSubband - lowSubband; - - /* set hiTempEnv */ - for ( timeIndex = startPos; timeIndex < stopPos; timeIndex++ ) - { - hiTempEnv[timeIndex] = 0; - for ( k = lowSubband; k < highSubband; k++ ) - { - hiTempEnv[timeIndex] += pCldfbPow[timeIndex][k]; - } - hiTempEnv[timeIndex] = (float) ( 10 * log10( hiTempEnv[timeIndex] / bwHigh + EPS ) + scaleOffset ); - } - - return; -} - - -/*------------------------------------------------------------------- - * calcVar() - * - * - *-------------------------------------------------------------------*/ - -static float calcVar( - const float in[], - const int16_t len, - float *x ) -{ - float xx; - int16_t i; - - xx = 0; - *x = 0; - - for ( i = 0; i < len; i++ ) - { - xx += in[i] * in[i]; - *x += in[i]; - } - - return ( xx - ( *x * *x ) / (float) len ); -} - - -/*------------------------------------------------------------------- - * calcCorrelationCoefficient2() - * - * - *-------------------------------------------------------------------*/ - -static float calcCorrelationCoefficient2( - const float in_vec1[], - const float in_vec2[], - const int16_t len, - float var_x, - float var_y, - float x, - float y ) -{ - int16_t i; - float xy; - float ans; - - xy = 0; - - for ( i = 0; i < len; i++ ) - { - xy += ( in_vec1[i] * in_vec2[i] ); - } - - ans = ( xy - x * y / (float) ( len ) ) / (float) sqrt( var_x * var_y + EPS ); - - return ans; -} - - -/*------------------------------------------------------------------- - * resetTecDec() - * - * - *-------------------------------------------------------------------*/ - -void resetTecDec( - TEC_DEC_HANDLE hTecDec ) -{ - set_f( hTecDec->pGainTemp, 0, CLDFB_NO_COL_MAX ); - - set_f( hTecDec->loBuffer_flt, 0.f, CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG ); - - return; -} - - -/*------------------------------------------------------------------- - * calcLoTempEnv_TBE() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoTempEnv_TBE( - const float *loBuffer, - const int16_t noCols, - float *loTempEnv, - const float adjFac ) -{ - int16_t slot, i; - int16_t delay = 1; - - for ( slot = 0; slot < noCols; slot++ ) - { - loTempEnv[slot] = TecSC[0] * loBuffer[slot - delay]; - - for ( i = 1; i < TecSmoothingDeg + 1; i++ ) - { - loTempEnv[slot] += TecSC[i] * loBuffer[slot - delay - i]; - } - - loTempEnv[slot] *= adjFac; - } - - return; -} - - -/*------------------------------------------------------------------- - * set_TEC_TFA_code() - * - * - *-------------------------------------------------------------------*/ - -void set_TEC_TFA_code( - const int16_t corrFlag, - int16_t *tec_flag, - int16_t *tfa_flag ) -{ - *tec_flag = 0; - if ( *tfa_flag == 0 ) - { - if ( corrFlag == 1 ) - { - *tec_flag = 1; - } - else if ( corrFlag == 2 ) - { - *tec_flag = 1; - *tfa_flag = 1; - } - } - - return; -} - - -/*------------------------------------------------------------------- - * calcLoTempEnv_ns_TBE() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoTempEnv_ns_TBE( - const float *loBuffer, - const int16_t noCols, - float *loTempEnv ) -{ - int16_t slot; - int16_t delay = 1; - float fac = 1.4f; - - for ( slot = 0; slot < noCols; slot++ ) - { - loTempEnv[slot] = fac * loBuffer[slot - delay]; - } - - return; -} - - -/*------------------------------------------------------------------- - * calcLoTempEnv_ns() - * - * - *-------------------------------------------------------------------*/ - -static void calcLoTempEnv_ns( - const float *loBuffer, - const int16_t noCols, - float *loTempEnv ) -{ - int16_t slot; - - for ( slot = 0; slot < noCols; slot++ ) - { - loTempEnv[slot] = loBuffer[slot]; - } - - return; -} - -/*------------------------------------------------------------------- - * calcGainLinear_TBE() - * - * - *-------------------------------------------------------------------*/ - -static void calcGainLinear_TBE( - const float *loTempEnv, - const int16_t startPos, - const int16_t stopPos, - float *pGainTemp ) -{ - int16_t timeIndex; - float ftmp; - - for ( timeIndex = startPos; timeIndex < stopPos; timeIndex++ ) - { - ftmp = loTempEnv[timeIndex]; - pGainTemp[timeIndex] = (float) pow( 10.0, 0.1 * ftmp ); - } - - return; -} - - -/*------------------------------------------------------------------- - * calcGainTemp_TBE() - * - * - *-------------------------------------------------------------------*/ - -void calcGainTemp_TBE( - float **pCldfbRealSrc, - float **pCldfbImagSrc, - float *loBuffer, - const int16_t startPos, /*!< Start position of the current envelope. */ - const int16_t stopPos, /*!< Stop position of the current envelope. */ - const int16_t lowSubband, /* lowSubband */ - float *pGainTemp, - const int16_t code ) -{ - float loTempEnv[16]; - const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; - int16_t slot; - int16_t noCols = stopPos - startPos; - int16_t bandOffset = 0; - float scaleOffset = 0; - - assert( lowSubband >= BW_LO ); - - bandOffset = lowSubband - BW_LO; - - calcLoBufferDec( pCldfbRealSrc, pCldfbImagSrc, loBuffer + MAX_TEC_SMOOTHING_DEG, startPos, stopPos, bandOffset, scaleOffset ); - - if ( code > 0 ) - { - if ( code != 2 ) - { - calcLoTempEnv_TBE( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv, ratioHiLoFacDec ); - } - else - { - calcLoTempEnv_ns_TBE( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv ); - } - - calcGainLinear_TBE( loTempEnv, startPos, stopPos, pGainTemp ); - } - - - for ( slot = 0; slot < MAX_TEC_SMOOTHING_DEG; slot++ ) - { - loBuffer[slot] = loBuffer[slot + stopPos]; - } - - return; -} - - -/*------------------------------------------------------------------- - * setSubfrConfig() - * - * - *-------------------------------------------------------------------*/ - -static void setSubfrConfig( - const int16_t i_offset, - int16_t *k_offset, - int16_t *n_subfr, - const int16_t l_subfr ) -{ - *n_subfr = N_TEC_TFA_SUBFR - i_offset; - *k_offset = i_offset * l_subfr; - - return; -} - - -/*------------------------------------------------------------------- - * calcSubfrNrg() - * - * - *-------------------------------------------------------------------*/ - -static float calcSubfrNrg( - const float *hb_synth, - const int16_t i_offset, - float *enr, - const int16_t k_offset, - const int16_t l_subfr ) -{ - int16_t i, j, k; - float enr_all = 1e-12f; - - for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) - { - enr[i] = 1e-12f; - for ( j = 0; j < l_subfr; j++ ) - { - enr[i] += hb_synth[k] * hb_synth[k]; - k++; - } - enr_all += enr[i]; - } - - return enr_all; -} - - -/*------------------------------------------------------------------- - * procTfa() - * - * - *-------------------------------------------------------------------*/ - -static void procTfa( - float *hb_synth, - const int16_t i_offset, - const int16_t l_subfr ) -{ - int16_t i, j, k; - int16_t k_offset, n_subfr; - float enr[N_TEC_TFA_SUBFR], enr_ave; - - setSubfrConfig( i_offset, &k_offset, &n_subfr, l_subfr ); - - enr_ave = calcSubfrNrg( hb_synth, i_offset, enr, k_offset, l_subfr ) / n_subfr; - - for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) - { - float gain; - - gain = (float) sqrt( enr_ave / enr[i] ); - - for ( j = 0; j < l_subfr; j++ ) - { - hb_synth[k] *= gain; - k++; - } - } - - return; -} - - -/*------------------------------------------------------------------- - * procTec() - * - * - *-------------------------------------------------------------------*/ - -static void procTec( - float *hb_synth, - const int16_t i_offset, - const int16_t l_subfr, - float *gain, - const int16_t code ) -{ - int16_t i, j, k; - int16_t k_offset, n_subfr; - float enr[N_TEC_TFA_SUBFR], enr_ave, gain_ave; - float inv_curr_enr[N_TEC_TFA_SUBFR]; - float max_inv_curr_enr, lower_limit_gain; - float upper_limit_gain; - float tmp; - - setSubfrConfig( i_offset, &k_offset, &n_subfr, l_subfr ); - - enr_ave = calcSubfrNrg( hb_synth, i_offset, enr, k_offset, l_subfr ) / n_subfr; - - gain_ave = ( sum_f( &gain[i_offset], n_subfr ) + 1.0e-12f ) / n_subfr; - - max_inv_curr_enr = 10e-6f; - for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) - { - inv_curr_enr[i] = enr_ave / enr[i]; - gain[i] /= gain_ave; - if ( max_inv_curr_enr < inv_curr_enr[i] ) - { - max_inv_curr_enr = inv_curr_enr[i]; - } - } - - lower_limit_gain = 0.1f; - if ( lower_limit_gain > ( tmp = 1.f / max_inv_curr_enr ) ) - { - lower_limit_gain = tmp * 0.5f; - } - - upper_limit_gain = 1.2f; - if ( code == LOBUF_NO_SMOOTHING_MODE ) - { - upper_limit_gain = 3.0; - } - - for ( i = i_offset, k = k_offset; i < N_TEC_TFA_SUBFR; i++ ) - { - if ( lower_limit_gain > gain[i] ) - { - gain[i] = lower_limit_gain; - } - gain[i] *= inv_curr_enr[i]; - - if ( gain[i] > upper_limit_gain ) - { - gain[i] = upper_limit_gain; - } - - gain[i] = (float) sqrt( gain[i] ); - for ( j = 0; j < l_subfr; j++ ) - { - hb_synth[k] *= gain[i]; - k++; - } - } - - return; -} - - -/*------------------------------------------------------------------- - * procTecTfa_TBE() - * - * - *-------------------------------------------------------------------*/ - -void procTecTfa_TBE( - float *hb_synth, - float *gain, - const int16_t flat_flag, - const int16_t last_core, - const int16_t l_subfr, - const int16_t code ) -{ - int16_t i_offset = 0; - - if ( flat_flag ) - { - procTfa( hb_synth, i_offset, l_subfr ); - } - else - { - if ( last_core != ACELP_CORE ) - { - i_offset = 1; - } - - procTec( hb_synth, i_offset, l_subfr, gain, code ); - } - - return; -} - - -/*------------------------------------------------------------------- - * resetTecEnc() - * - * - *-------------------------------------------------------------------*/ - -void resetTecEnc( - TEC_ENC_HANDLE hTecEnc, - const int16_t flag ) -{ - if ( flag == 0 ) - { - set_f( hTecEnc->loBuffer_flt, 0.f, CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC ); - set_f( hTecEnc->hiTempEnv_flt, 0.f, CLDFB_NO_COL_MAX + DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV ); - set_f( hTecEnc->loTempEnv_flt, 0.f, CLDFB_NO_COL_MAX ); - set_f( hTecEnc->loTempEnv_ns_flt, 0.f, CLDFB_NO_COL_MAX ); - } - else - { - set_f( hTecEnc->loBuffer_flt, 0.f, MAX_TEC_SMOOTHING_DEG ); - } - - return; -} - - -/*------------------------------------------------------------------- - * calcHiEnvLoBuff() - * - * - *-------------------------------------------------------------------*/ - -void calcHiEnvLoBuff( - const int16_t noCols, - const int16_t *pFreqBandTable, /*!< freqbandTable. */ - const int16_t nSfb, /*!< Number of scalefactors. */ - float **pCldfbPow, - float *loBuffer, - float *hiTempEnvOrig ) -{ - const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; - const int16_t lowSubband = pFreqBandTable[0]; - const int16_t highSubband = pFreqBandTable[nSfb]; - - int16_t bandOffsetBottom = lowSubband - BW_LO; - - float scaleOffset = 0; - float *hiTempEnv = hiTempEnvOrig + EXT_DELAY_HI_TEMP_ENV; - - assert( bandOffsetBottom > 0 ); - - /* calc hiTempEnv*/ - calcHiTempEnv( pCldfbPow, 0, noCols, lowSubband, highSubband, scaleOffset, hiTempEnv + DELAY_TEMP_ENV_BUFF_TEC ); - - /* calc loBuffer */ - calcLoBufferEnc( pCldfbPow, 0, noCols, bandOffsetBottom, scaleOffset, loBuffer + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC ); - - return; -} - - -/*------------------------------------------------------------------- - * calcLoEnvCheckCorrHiLo() - * - * - *-------------------------------------------------------------------*/ - -void calcLoEnvCheckCorrHiLo( - const int16_t noCols, - const int16_t *pFreqBandTable, /*!< freqbandTable. */ - float *loBuffer, - float *loTempEnv, - float *loTempEnv_ns, - float *hiTempEnvOrig, - int16_t *corrFlag ) -{ - const int16_t BW_LO = TecLowBandTable[NbTecLowBand]; - const int16_t lowSubband = pFreqBandTable[0]; - int16_t i; - float corrCoef; - int16_t bandOffsetBottom = lowSubband - BW_LO; - float ratio_float; - float hiVar, loVar; - float hiSum, loSum; - int16_t code = 0; /* SET TENTATIVELY */ - float loVar_ns; - float loSum_ns; - float diff_hi_lo_sum; - - float *hiTempEnv = hiTempEnvOrig + EXT_DELAY_HI_TEMP_ENV; - - assert( bandOffsetBottom > 0 ); - - hiVar = calcVar( hiTempEnv, noCols, &hiSum ); - - /* calc loTempEnv */ - calcLoTempEnv( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv, ratioHiLoFac ); - - calcLoTempEnv_ns( loBuffer + MAX_TEC_SMOOTHING_DEG, noCols, loTempEnv_ns ); - - loVar_ns = calcVar( loTempEnv_ns, noCols, &loSum_ns ); - diff_hi_lo_sum = loSum_ns - hiSum; - - if ( hiVar > 800 && loVar_ns > 720 && diff_hi_lo_sum < 100 ) - { - code = 1; - } - - *corrFlag = 0; - - assert( code == 0 || code == 1 ); - - if ( code ) - { - /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* ++++ code == 1 +++++*/ - /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - int16_t maxPosHi, maxPosLo; - float maxHi, maxLo; - - maxHi = hiTempEnv[0]; - maxLo = loTempEnv_ns[0]; - maxPosHi = maxPosLo = 0; - - for ( i = 1; i < noCols; i++ ) - { - if ( maxHi < hiTempEnv[i] ) - { - maxHi = hiTempEnv[i]; - maxPosHi = i; - } - - if ( maxLo < loTempEnv_ns[i] ) - { - maxLo = loTempEnv_ns[i]; - maxPosLo = i; - } - } - - if ( abs( maxPosHi - maxPosLo ) < 2 ) - { - *corrFlag = 2; - } - - { - float feature_max = 0; - int16_t pos_feature_max = 0; - float feature[16]; - - float min_local, max_local; - int16_t j; - int16_t len_window = EXT_DELAY_HI_TEMP_ENV + 1; - float *curr_pos = hiTempEnv; - - feature_max = 0; - pos_feature_max = 0; - - for ( i = 0; i < 16; i++, curr_pos++ ) - { - max_local = min_local = curr_pos[0]; - - for ( j = 1; j < len_window; j++ ) - { - if ( max_local < curr_pos[-j] ) - { - max_local = curr_pos[-j]; - } - - if ( min_local > curr_pos[-j] ) - { - min_local = curr_pos[-j]; - } - } - - feature[i] = max_local - min_local; - - if ( feature_max < feature[i] ) - { - feature_max = feature[i]; - pos_feature_max = i; - } - } - - if ( *corrFlag > 0 ) - { - if ( !( feature_max > 20 && abs( pos_feature_max - maxPosHi ) < 3 ) ) - { - *corrFlag = 0; - } - } - } - } - else - { - /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* ++++ code == 0 ++++*/ - /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - /* calc the variance of loTempEnv */ - loVar = calcVar( loTempEnv, noCols, &loSum ); - - /* calc correlation coefficient between loTempEnv and hiTempEnv */ - corrCoef = calcCorrelationCoefficient2( hiTempEnv, loTempEnv, noCols, hiVar, loVar, hiSum, loSum ); - - ratio_float = hiVar / ( loVar + EPS ); - - if ( corrCoef >= thCorrCoef && ratio_float > thRatio && ratio_float < thRatio2 ) - { - *corrFlag = 1; - } - } - - for ( i = 0; i < MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC; i++ ) - { - loBuffer[i] = loBuffer[noCols + i]; - } - - for ( i = 0; i < DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV; i++ ) - { - hiTempEnvOrig[i] = hiTempEnvOrig[noCols + i]; - } - - return; -} - - -/*------------------------------------------------------------------- - * tecEnc_TBE() - * - * - *-------------------------------------------------------------------*/ - -void tecEnc_TBE( - int16_t *corrFlag, - const float *voicing, - const int16_t coder_type ) -{ - float voice_sum; - float voice_diff; - - /*-----------------------------------------------------------------* - * TEC updates - *-----------------------------------------------------------------*/ - - voice_sum = voicing[0] + voicing[1]; - voice_diff = voicing[0] - voicing[1]; - - if ( voice_diff < 0 ) - { - voice_diff *= -1.0f; - } - - if ( *corrFlag == 1 ) - { - if ( coder_type == INACTIVE || ( ( voice_sum > 0.35 * 2 && voice_sum < 0.55 * 2 ) && ( voice_diff < 0.2 ) ) ) - { - *corrFlag = 0; - } - } - if ( voice_sum > 0.6 * 2 ) - { - *corrFlag = 0; - } - - return; -} -#endif diff --git a/lib_com/tns_base.c b/lib_com/tns_base.c index 6dc678b63..039c7a042 100644 --- a/lib_com/tns_base.c +++ b/lib_com/tns_base.c @@ -12,6 +12,7 @@ #include "rom_com.h" #include "prot_fx.h" #include "basop_util.h" +#include "prot.h" /*---------------------------------------------------------------------------- * Local constants @@ -86,8 +87,8 @@ void InitTnsConfiguration( STnsConfig *pTnsConfig, const Word16 igfStopFreq, const Word32 total_brate, - const int16_t element_mode, - const int16_t is_mct ) + const Word16 element_mode, + const Word16 is_mct ) { Word16 iFilter = 0; move16(); @@ -218,7 +219,6 @@ void InitTnsConfiguration( return; /*TNS_NO_ERROR;*/ } -#ifdef IVAS_FLOAT_FIXED void InitTnsConfiguration_ivas_fx( const Word16 bwidth, /*Q0*/ const Word16 frameLength, /*Q0*/ @@ -357,9 +357,6 @@ void InitTnsConfiguration_ivas_fx( } -#endif - - /*-------------------------------------------------------------------* * ApplyTnsFilter() * @@ -702,6 +699,100 @@ static Word16 DecodeUsingTable( Decoder_State *st, Word16 *pValue /*Q0*/, const /* TNS filter coefficients */ +int16_t DecodeSWBTCX20TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); +} + +// int16_t GetSWBTCX10TnsFilterCoeffBits_flt( const int16_t value, const int16_t index ) +//{ +// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); +// return GetBitsFromTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +// } + +// int16_t EncodeSWBTCX10TnsFilterCoeff_flt( const int16_t value, const int16_t index ) +//{ +// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); +// return EncodeUsingTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +// } + +int16_t DecodeSWBTCX10TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); +} + +// int16_t GetWBTCX20TnsFilterCoeffBits_flt( const int16_t value, const int16_t index ) +//{ +// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); +// return GetBitsFromTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +// } + +// int16_t EncodeWBTCX20TnsFilterCoeff_flt( const int16_t value, const int16_t index ) +//{ +// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); +// return EncodeUsingTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +// } + +int16_t DecodeWBTCX20TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); + return DecodeUsingTable( st, pValue, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); +} + + +/* TNS filter order */ + +// void const *GetTnsFilterOrder_flt( void const *p, const int16_t index, int16_t *pValue ) +//{ +// *pValue = ( (STnsFilter const *) p )[index].order; +// return ( (STnsFilter const *) p )[index].coefIndex; +// } + +// void *SetTnsFilterOrder_flt( void *p, const int16_t index, const int16_t value ) +//{ +// ( (STnsFilter *) p )[index].order = value; +// return ( (STnsFilter *) p )[index].coefIndex; +// } + +// int16_t GetTnsFilterOrderBitsSWBTCX20_flt( const int16_t value, const int16_t index ) +//{ +// (void) index; +// return GetBitsFromTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); +// } + +// int16_t EncodeTnsFilterOrderSWBTCX20_flt( const int16_t value, const int16_t index ) +//{ +// (void) index; +// return EncodeUsingTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); +// } + +int16_t DecodeTnsFilterOrderSWBTCX20_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrderTCX20, nTnsOrderCodes ); +} + +int16_t GetTnsFilterOrderBitsSWBTCX10_flt( const int16_t value, const int16_t index ) +{ + (void) index; + return GetBitsFromTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); +} + +int16_t EncodeTnsFilterOrderSWBTCX10_flt( const int16_t value, const int16_t index ) +{ + (void) index; + return EncodeUsingTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); +} + +int16_t DecodeTnsFilterOrderSWBTCX10_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrderTCX10, nTnsOrderCodes ); +} + + void const *GetTnsFilterCoeff( void const *p, const Word16 index /*Q0*/, Word16 *pValue /*Q0*/ ) { *pValue = ( (Word16 const *) p )[index] + INDEX_SHIFT; @@ -901,7 +992,25 @@ void *SetTnsEnabled( void *p, const Word16 index, const Word16 value ) (void) p, (void) index, (void) value; return NULL; } -#ifdef ADD_IVAS_TNS + +/* Number of TNS filters */ + +void const *GetNumOfTnsFilters_flt( void const *p, const int16_t index, int16_t *pValue ) +{ + *pValue = (int16_t) abs( ( (STnsData const *) p )[index].nFilters ); + return ( (STnsData const *) p )[index].filter; +} + +void *SetNumOfTnsFilters_flt( void *p, const int16_t index, const int16_t value ) +{ + ( (STnsData *) p )[index].nFilters = (int16_t) abs( value ); + return ( (STnsData *) p )[index].filter; +} +int16_t DecodeTnsFilterOrder_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) +{ + (void) index; + return DecodeUsingTable( st, pValue, codesTnsOrder, nTnsOrderCodes ); +} /* TNS on whitened spectra flag */ void const *GetTnsOnWhite( void const *p, const int16_t index, int16_t *pValue ) @@ -916,12 +1025,11 @@ void *SetTnsOnWhite( void *p, const int16_t index, const int16_t value ) return NULL; } -void const *GetTnsEnabledSingleFilter( void const *p, const int16_t index, int16_t *pValue ) -{ - *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; - return ( (STnsData const *) p )[index].filter; -} -#endif +// void const *GetTnsEnabledSingleFilter( void const *p, const int16_t index, int16_t *pValue ) +//{ +// *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; +// return ( (STnsData const *) p )[index].filter; +// } void const *GetTnsEnabledSingleFilter( void const *p, const Word16 index, Word16 *pValue ) { diff --git a/lib_com/tns_base_flt.c b/lib_com/tns_base_flt.c deleted file mode 100644 index ed5d948dc..000000000 --- a/lib_com/tns_base_flt.c +++ /dev/null @@ -1,851 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2024 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#include -#include -#include "options.h" -#include "cnst.h" -#include "rom_com.h" -#include "prot.h" -#include "stat_com.h" -#include "wmc_auto.h" - - -/*---------------------------------------------------------------------------- - * Local constants - *---------------------------------------------------------------------------*/ - -#define HLM_MIN_NRG PCM16_TO_FLT_FAC -#define MAX_SUBDIVISIONS 3 - - -/*---------------------------------------------------------------------------- - * Local prototypes - *---------------------------------------------------------------------------*/ - - -static void Index2Parcor( const int16_t index[], float parCoeff[], const int16_t order ); - -static float FIRLattice( const int16_t order, const float *parCoeff, float *state, float x ); - -static float IIRLattice( const int16_t order, const float *parCoeff, float *state, float x ); - -static void TnsFilter( const float spectrum[], const int16_t numOfLines, const float parCoeff[], const int16_t order, TLinearPredictionFilter_flt filter, float *state, float output[] ); - - -/*-------------------------------------------------------------------* - * InitTnsConfiguration() - * - *-------------------------------------------------------------------*/ - -void InitTnsConfiguration_flt( - const int16_t bwidth, - const int16_t frameLength, - STnsConfig *pTnsConfig, - const int16_t igfStopFreq, - const int32_t total_brate, - const int16_t element_mode, - const int16_t MCT_flag ) -{ - int32_t nSampleRate; - int16_t iFilter; - int16_t *startLineFilter = &pTnsConfig->iFilterBorders[1]; - - nSampleRate = inner_frame_tbl[bwidth] * FRAMES_PER_SEC; - - /* Sanity checks */ - assert( ( nSampleRate > 0 ) && ( frameLength > 0 ) && ( pTnsConfig != NULL ) ); - if ( ( nSampleRate <= 0 ) || ( frameLength <= 0 ) || ( pTnsConfig == NULL ) ) - { - return /*TNS_FATAL_ERROR*/; - } - - /* WMOPS: All initializations are either for safety or static (tables) and thus not to be counted */ - /* Initialize TNS filter flag and maximum order */ - pTnsConfig->maxOrder = TNS_MAX_FILTER_ORDER; - if ( total_brate <= ACELP_32k ) - { - pTnsConfig->nMaxFilters = sizeof( tnsParametersIGF32kHz_LowBR ) / sizeof( tnsParametersIGF32kHz_LowBR[0] ); - - pTnsConfig->pTnsParameters = tnsParametersIGF32kHz_LowBR; - } - else - { - if ( nSampleRate > 32000 && nSampleRate == 100 * frameLength ) - { - pTnsConfig->nMaxFilters = sizeof( tnsParameters48kHz_grouped ) / sizeof( tnsParameters48kHz_grouped[0] ); - pTnsConfig->pTnsParameters = tnsParameters48kHz_grouped; - } - else if ( nSampleRate > 16000 ) - { - if ( ( element_mode > IVAS_SCE ) && ( total_brate >= ( MCT_flag ? IVAS_32k : IVAS_48k ) ) ) - { - pTnsConfig->nMaxFilters = sizeof( tnsParameters32kHz_Stereo ) / sizeof( tnsParameters32kHz_Stereo[0] ); - if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ - { - pTnsConfig->pTnsParameters = tnsParameters32kHz_grouped; - } - else - { - pTnsConfig->pTnsParameters = tnsParameters32kHz_Stereo; - } - } - else - { - pTnsConfig->nMaxFilters = sizeof( tnsParameters32kHz ) / sizeof( tnsParameters32kHz[0] ); - if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ - { - pTnsConfig->pTnsParameters = tnsParameters32kHz_grouped; - } - else - { - pTnsConfig->pTnsParameters = tnsParameters32kHz; - } - } - } - else - { - if ( nSampleRate == 100 * frameLength ) /* sub-frame length is <= 10 ms */ - { - pTnsConfig->nMaxFilters = sizeof( tnsParameters16kHz_grouped ) / sizeof( tnsParameters16kHz_grouped[0] ); - pTnsConfig->pTnsParameters = tnsParameters16kHz_grouped; - } - else - { - pTnsConfig->nMaxFilters = sizeof( tnsParameters16kHz ) / sizeof( tnsParameters16kHz[0] ); - pTnsConfig->pTnsParameters = tnsParameters16kHz; - } - } - } - - assert( pTnsConfig->nMaxFilters <= TNS_MAX_NUM_OF_FILTERS ); - - /* Set starting MDCT line for each filter based on the starting frequencies from the TNS table */ - for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) - { - assert( pTnsConfig->pTnsParameters[iFilter].startLineFrequency < 0.5f * nSampleRate ); - startLineFilter[iFilter] = (int16_t) ( ( frameLength * 2 * pTnsConfig->pTnsParameters[iFilter].startLineFrequency ) / nSampleRate ); - } - if ( igfStopFreq > 0 ) - { - pTnsConfig->iFilterBorders[0] = (int16_t) ( ( frameLength * 2 * igfStopFreq ) / nSampleRate ); - } - else - { - pTnsConfig->iFilterBorders[0] = frameLength; - } - - pTnsConfig->allowTnsOnWhite = 0; - - return /*TNS_NO_ERROR*/; -} - - -/*-------------------------------------------------------------------* - * ApplyTnsFilter() - * - *-------------------------------------------------------------------*/ - -void ApplyTnsFilter_flt( - STnsConfig const *pTnsConfig, - STnsData const *pTnsData, - float spectrum[], - const int16_t fIsAnalysis ) -{ - TLinearPredictionFilter_flt filter; - float state[TNS_MAX_FILTER_ORDER]; - int16_t iFilter; - int16_t stopLine, startLine; - const int16_t *pBorders; - - filter = fIsAnalysis ? FIRLattice : IIRLattice; - set_f( state, 0, TNS_MAX_FILTER_ORDER ); - pBorders = pTnsConfig->iFilterBorders; - - for ( iFilter = pTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - float parCoeff[TNS_MAX_FILTER_ORDER]; - const STnsFilter *pFilter = &pTnsData->filter[iFilter]; - - set_f( parCoeff, 0, TNS_MAX_FILTER_ORDER ); - stopLine = pBorders[iFilter]; - startLine = pBorders[iFilter + 1]; - - Index2Parcor( pFilter->coefIndex, parCoeff, pFilter->order ); - - TnsFilter( &spectrum[startLine], stopLine - startLine, parCoeff, pFilter->order, filter, state, &spectrum[startLine] ); - } - - return /*( pTnsData->nFilters < 0 ) ? TNS_FATAL_ERROR : TNS_NO_ERROR*/; -} - - -/*********************************************************************************************/ -/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ -/*********************************************************************************************/ - -/* Helper functions for hufmann table coding */ - -/** Get number of bits from a Huffman table. - * The table must be sorted by values. - */ -static int16_t GetBitsFromTable( int16_t value, const Coding codes[], const int16_t nSize ) -{ - (void) nSize; - assert( ( value >= 0 ) && ( value < nSize ) && ( nSize >= 0 ) && ( nSize <= 256 ) ); - return codes[value].nBits; -} - -/** Get the code for a value from a Huffman table. - * The table must be sorted by values. - */ -static int16_t EncodeUsingTable( int16_t value, const Coding codes[], const int16_t nSize ) -{ - (void) nSize; - assert( ( value >= 0 ) && ( value < nSize ) && ( nSize >= 0 ) && ( nSize <= 256 ) ); - return codes[value].code; -} - -/** Decode a value from a bitstream using a Huffman table. */ -static int16_t DecodeUsingTable( Decoder_State *st, int16_t *pValue, const Coding codes[], const int16_t nSize ) -{ - uint16_t code = 0; - uint8_t nBits = 0; - int16_t valueIndex = nSize; - - assert( ( nSize >= 0 ) && ( nSize <= 256 ) ); - /* Variable initialization. All are required! */ - while ( valueIndex == nSize ) - { - code = ( code << 1 ) + get_next_indice( st, 1 ); - ++nBits; - if ( nBits > nSize || nBits > 16 ) - { - st->BER_detect = 1; - *pValue = 0; - return -1; - } - for ( valueIndex = 0; valueIndex < nSize; valueIndex++ ) - { - if ( codes[valueIndex].nBits == nBits ) - { - if ( codes[valueIndex].code == code ) - { - break; - } - } - } - /* Loop condition */ - } - - if ( valueIndex < nSize ) - { - *pValue = codes[valueIndex].value; - } - else - { - st->BER_detect = 1; - *pValue = 0; - return -1; - } - - return nBits; -} - -/* TNS filter coefficients */ - -// void const *GetTnsFilterCoeff_flt( void const *p, const int16_t index, int16_t *pValue ) -//{ -// *pValue = ( (int16_t const *) p )[index] + INDEX_SHIFT; -// return NULL; -// } - -// void *SetTnsFilterCoeff_flt( void *p, const int16_t index, const int16_t value ) -//{ -// ( (int16_t *) p )[index] = value - INDEX_SHIFT; -// return NULL; -// } - -// int16_t GetSWBTCX20TnsFilterCoeffBits_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return GetBitsFromTable( value, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); -// } - -// int16_t EncodeSWBTCX20TnsFilterCoeff_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return EncodeUsingTable( value, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); -// } - -int16_t DecodeSWBTCX20TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); - return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX20[index], nTnsCoeffCodes ); -} - -// int16_t GetSWBTCX10TnsFilterCoeffBits_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return GetBitsFromTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); -// } - -// int16_t EncodeSWBTCX10TnsFilterCoeff_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return EncodeUsingTable( value, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); -// } - -int16_t DecodeSWBTCX10TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); - return DecodeUsingTable( st, pValue, codesTnsCoeffSWBTCX10[index], nTnsCoeffCodes ); -} - -// int16_t GetWBTCX20TnsFilterCoeffBits_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return GetBitsFromTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); -// } - -// int16_t EncodeWBTCX20TnsFilterCoeff_flt( const int16_t value, const int16_t index ) -//{ -// assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); -// return EncodeUsingTable( value, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); -// } - -int16_t DecodeWBTCX20TnsFilterCoeff_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - assert( ( index >= 0 ) && ( index < nTnsCoeffTables ) ); - return DecodeUsingTable( st, pValue, codesTnsCoeffWBTCX20[index], nTnsCoeffCodes ); -} - - -/* TNS filter order */ - -// void const *GetTnsFilterOrder_flt( void const *p, const int16_t index, int16_t *pValue ) -//{ -// *pValue = ( (STnsFilter const *) p )[index].order; -// return ( (STnsFilter const *) p )[index].coefIndex; -// } - -// void *SetTnsFilterOrder_flt( void *p, const int16_t index, const int16_t value ) -//{ -// ( (STnsFilter *) p )[index].order = value; -// return ( (STnsFilter *) p )[index].coefIndex; -// } - -// int16_t GetTnsFilterOrderBitsSWBTCX20_flt( const int16_t value, const int16_t index ) -//{ -// (void) index; -// return GetBitsFromTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); -// } - -// int16_t EncodeTnsFilterOrderSWBTCX20_flt( const int16_t value, const int16_t index ) -//{ -// (void) index; -// return EncodeUsingTable( value - 1, codesTnsOrderTCX20, nTnsOrderCodes ); -// } - -int16_t DecodeTnsFilterOrderSWBTCX20_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - (void) index; - return DecodeUsingTable( st, pValue, codesTnsOrderTCX20, nTnsOrderCodes ); -} - -int16_t GetTnsFilterOrderBitsSWBTCX10_flt( const int16_t value, const int16_t index ) -{ - (void) index; - return GetBitsFromTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); -} - -int16_t EncodeTnsFilterOrderSWBTCX10_flt( const int16_t value, const int16_t index ) -{ - (void) index; - return EncodeUsingTable( value - 1, codesTnsOrderTCX10, nTnsOrderCodes ); -} - -int16_t DecodeTnsFilterOrderSWBTCX10_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - (void) index; - return DecodeUsingTable( st, pValue, codesTnsOrderTCX10, nTnsOrderCodes ); -} - -// int16_t GetTnsFilterOrderBits_flt( const int16_t value, const int16_t index ) -//{ -// (void) index; -// return GetBitsFromTable( value - 1, codesTnsOrder, nTnsOrderCodes ); -// } - -// int16_t EncodeTnsFilterOrder_flt( const int16_t value, const int16_t index ) -//{ -// (void) index; -// return EncodeUsingTable( value - 1, codesTnsOrder, nTnsOrderCodes ); -// } - -int16_t DecodeTnsFilterOrder_flt( Decoder_State *st, const int16_t index, int16_t *pValue ) -{ - (void) index; - return DecodeUsingTable( st, pValue, codesTnsOrder, nTnsOrderCodes ); -} - -/* Number of TNS filters */ - -void const *GetNumOfTnsFilters_flt( void const *p, const int16_t index, int16_t *pValue ) -{ - *pValue = (int16_t) abs( ( (STnsData const *) p )[index].nFilters ); - return ( (STnsData const *) p )[index].filter; -} - -void *SetNumOfTnsFilters_flt( void *p, const int16_t index, const int16_t value ) -{ - ( (STnsData *) p )[index].nFilters = (int16_t) abs( value ); - return ( (STnsData *) p )[index].filter; -} - -/* TNS enabled/disabled flag */ - -// void const *GetTnsEnabled_flt( void const *p, const int16_t index, int16_t *pValue ) -//{ -// *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; -// return NULL; -// } - -// void *SetTnsEnabled_flt( void *p, const int16_t index, const int16_t value ) -//{ -// (void) p, (void) index, (void) value; -// return NULL; -// } - -/* TNS on whitened spectra flag */ - -void const *GetTnsOnWhite( void const *p, const int16_t index, int16_t *pValue ) -{ - *pValue = ( (STnsData const *) p )[index].tnsOnWhitenedSpectra > 0 ? 1 : 0; - return NULL; -} - -void *SetTnsOnWhite( void *p, const int16_t index, const int16_t value ) -{ - ( (STnsData *) p )[index].tnsOnWhitenedSpectra = value; - return NULL; -} - -// void const *GetTnsEnabledSingleFilter_flt( void const *p, const int16_t index, int16_t *pValue ) -//{ -// *pValue = ( (STnsData const *) p )[index].nFilters != 0 ? 1 : 0; -// return ( (STnsData const *) p )[index].filter; -// } - -// void *SetTnsEnabledSingleFilter_flt( void *p, const int16_t index, const int16_t value ) -//{ -// ( (STnsData *) p )[index].nFilters = value; -// return ( (STnsData *) p )[index].filter; -// } - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ResetTnsData() - * - *-------------------------------------------------------------------*/ - -void ResetTnsData_flt( - STnsData *pTnsData ) -{ - uint16_t iFilter; - - pTnsData->nFilters = 0; - pTnsData->tnsOnWhitenedSpectra = 0; - - for ( iFilter = 0; iFilter < sizeof( pTnsData->filter ) / sizeof( pTnsData->filter[0] ); iFilter++ ) - { - STnsFilter *const pTnsFilter = &pTnsData->filter[iFilter]; - pTnsFilter->spectrumLength = 0; - pTnsFilter->predictionGain_flt = 1.0f; - pTnsFilter->avgSqrCoef_flt = 0; - pTnsFilter->filterType = TNS_FILTER_OFF; - ClearTnsFilterCoefficients_flt( pTnsFilter ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * ClearTnsFilterCoefficients_flt() - * - *-------------------------------------------------------------------*/ - -void ClearTnsFilterCoefficients_flt( - STnsFilter *pTnsFilter ) -{ - pTnsFilter->order = 0; - set_s( pTnsFilter->coefIndex, 0, TNS_MAX_FILTER_ORDER ); - - return; -} -#endif - -/** Inverse quantization for reflection coefficients. - * - * @param index input quantized values. - * @param parCoeff output reflection coefficients. - * @param order number of coefficients/values. - */ -static void Index2Parcor( - const int16_t index[], - float parCoeff[], - const int16_t order ) -{ - const float *values = tnsCoeff4_flt; - int16_t i; - - for ( i = 0; i < order; i++ ) - { - parCoeff[i] = values[index[i] + INDEX_SHIFT]; - } - - return; -} - -/* Linear prediction analysis filter. */ -static float FIRLattice( - const int16_t order, - const float *parCoeff, - float *state, - float x ) -{ - int16_t i; - float tmpSave; - - tmpSave = x; - for ( i = 0; i < order - 1; i++ ) - { - const float tmp = parCoeff[i] * x + state[i]; - /* Variable initialization */ - x += parCoeff[i] * state[i]; - state[i] = tmpSave; - tmpSave = tmp; - } - - /* last stage: only need half operations */ - x += parCoeff[order - 1] * state[order - 1]; - state[order - 1] = tmpSave; - - return x; -} - -/* Linear prediction synthesis filter. */ -static float IIRLattice( - const int16_t order, - const float *parCoeff, - float *state, - float x ) -{ - int16_t i; - - /* first stage: no need to calculate state[order-1] */ - x -= parCoeff[order - 1] * state[order - 1]; - for ( i = order - 2; i >= 0; i-- ) - { - x -= parCoeff[i] * state[i]; - state[i + 1] = parCoeff[i] * x + state[i]; - } - - state[0] = x; - - return x; -} - -/** TNS analysis/synthesis filter. - * @param spectrum input spectrum values. - * @param numOfLines number of lines in the spectrum. - * @param parCoeff filter (PARCOR) coefficients. - * @param order filter order. - * @param filter function that implements filtering. - By this function it is defined whether analysis or synthesis is performed. - * @param output filtered output spectrum values. - Inplace operation is supported, so it can be equal to spectrum. - */ -static void TnsFilter( - const float spectrum[], - const int16_t numOfLines, - const float parCoeff[], - const int16_t order, - TLinearPredictionFilter_flt filter, - float *state, - float output[] ) -{ - int16_t j; - - assert( ( order >= 0 ) && ( order <= TNS_MAX_FILTER_ORDER ) ); - assert( ( numOfLines > 0 ) || ( ( numOfLines == 0 ) && ( order == 0 ) ) ); - - if ( order == 0 ) - { - if ( ( spectrum != output ) && ( numOfLines > 0 ) ) - { - mvr2r( spectrum, output, numOfLines ); - } - } - else - { - for ( j = 0; j < numOfLines; j++ ) - { - output[j] = filter( order, parCoeff, state, spectrum[j] ); - } - } - - return; -} - - -static void ITF_TnsFilter( - const float spectrum[], - const int16_t numOfLines, - const float A[], - const int16_t order, - float output[] ) -{ - int16_t i, j; - float *p, buf[ITF_MAX_FILTER_ORDER + N_MAX]; - - assert( ( order >= 0 ) && ( order <= ITF_MAX_FILTER_ORDER ) ); - assert( ( numOfLines > 0 ) || ( ( numOfLines == 0 ) && ( order == 0 ) ) ); - - if ( order == 0 ) - { - if ( ( spectrum != output ) && ( numOfLines > 0 ) ) - { - mvr2r( spectrum, output, numOfLines ); - } - } - else - { - p = buf + ITF_MAX_FILTER_ORDER; - - set_f( buf, 0, ITF_MAX_FILTER_ORDER ); - mvr2r( spectrum, p, numOfLines ); - - for ( j = 0; j < numOfLines; j++, p++ ) - { - output[j] = p[0]; - for ( i = 1; i < order; i++ ) - { - output[j] += A[i] * p[-i]; - } - } - } - - return; -} - - -/*********************************************************************************************/ -/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ -/*********************************************************************************************/ - -/* Helper functions for hufmann table coding */ - -/********************************/ -/* Private functions */ -/********************************/ - -/** Autocorrelation to parcor coefficients. - * Conversion of autocorrelation to parcor/reflection coefficients. - * @param input Autocorrelation function/coefficients. - * @param parCoeff output filter (PARCOR) coefficients. - * @param order filter order. - * @return prediction gain. - */ -static float ITF_AutoToLPcoef( - const float input[], - float a[], - const int16_t order ) -{ - int16_t i, j; - float tmp, tmp2; - float workBuffer[2 * ITF_MAX_FILTER_ORDER]; - float parCoeff[ITF_MAX_FILTER_ORDER]; - float *const pWorkBuffer = &workBuffer[order]; /* temp pointer */ - - for ( i = 0; i < order; i++ ) - { - workBuffer[i] = input[i]; - pWorkBuffer[i] = input[i + 1]; - } - - for ( i = 0; i < order; i++ ) - { - if ( workBuffer[0] < 1.0f / 65536.0f ) - { - tmp = 0; - } - else - { - tmp = -pWorkBuffer[i] / workBuffer[0]; - } - - /* compensate for calculation inaccuracies limit reflection coefs to ]-1,1[ */ - tmp = min( 0.999f, max( -0.999f, tmp ) ); - - parCoeff[i] = tmp; - for ( j = i; j < order; j++ ) - { - tmp2 = pWorkBuffer[j] + tmp * workBuffer[j - i]; - workBuffer[j - i] += tmp * pWorkBuffer[j]; - pWorkBuffer[j] = tmp2; - } - } - - /* Convert ParCor / reflection coefficients to LPC */ - a[0] = 1.0f; - a[1] = parCoeff[0]; - - for ( i = 1; i < order; i++ ) - { - for ( j = 0; j < i / 2; j++ ) - { - tmp = a[j + 1]; - a[j + 1] += parCoeff[i] * a[i - 1 - j + 1]; - a[i - 1 - j + 1] += parCoeff[i] * tmp; - } - if ( i & 1 ) - { - a[j + 1] += parCoeff[i] * a[j + 1]; - } - - a[i + 1] = parCoeff[i]; - } - - return ( ( input[0] + 1e-30f ) / ( workBuffer[0] + 1e-30f ) ); -} - - -/*-------------------------------------------------------------------* - * ITF_Apply() - * - *-------------------------------------------------------------------*/ - -void ITF_Apply( - float spectrum[], - const int16_t startLine, - const int16_t stopLine, - const float *A, - const int16_t order ) -{ - ITF_TnsFilter( &spectrum[startLine], stopLine - startLine, A, order, &spectrum[startLine] ); - - return; -} - - -/*-------------------------------------------------------------------* - * ITF_Detect() - * - * - *-------------------------------------------------------------------*/ - -int16_t ITF_Detect( - const float pSpectrum[], - const int16_t startLine, - const int16_t stopLine, - const int16_t maxOrder, - float *A, - float *predictionGain, - int16_t *curr_order ) -{ - float norms[MAX_SUBDIVISIONS]; - int16_t nSubdivisions; - int16_t iStartLine, iEndLine, spectrumLength; - float rxx[ITF_MAX_FILTER_ORDER + 1]; - float fac; - const float *pWindow; - int16_t iSubdivisions, lag; - - nSubdivisions = MAX_SUBDIVISIONS; - set_f( norms, 0.f, MAX_SUBDIVISIONS ); - set_f( rxx, 0.f, ITF_MAX_FILTER_ORDER + 1 ); /* This initialization is required */ - - if ( maxOrder <= 0 ) - { - return 0; - } - - /* Calculate norms for each spectrum part */ - for ( iSubdivisions = 0; iSubdivisions < nSubdivisions; iSubdivisions++ ) - { - iStartLine = startLine + ( stopLine - startLine ) * iSubdivisions / nSubdivisions; - iEndLine = startLine + ( stopLine - startLine ) * ( iSubdivisions + 1 ) / nSubdivisions; - - /* Variable initialization */ - norms[iSubdivisions] = sum2_f( pSpectrum + iStartLine - IGF_START_MN, iEndLine - iStartLine ); - } - - /* Calculate normalized autocorrelation for spectrum subdivision and get TNS filter parameters based on it */ - spectrumLength = stopLine - startLine; - - /* Variable initialization */ - for ( iSubdivisions = 0; ( iSubdivisions < nSubdivisions ) && ( norms[iSubdivisions] > HLM_MIN_NRG ); iSubdivisions++ ) - { - fac = 1.0f / norms[iSubdivisions]; - iStartLine = startLine + spectrumLength * iSubdivisions / nSubdivisions; - iEndLine = startLine + spectrumLength * ( iSubdivisions + 1 ) / nSubdivisions; - pWindow = tnsAcfWindow; - - /* For additional loop condition */ - /* Variable initialization */ - for ( lag = 1; lag <= maxOrder; lag++ ) - { - rxx[lag] += fac * ( *pWindow ) * dotp( pSpectrum + iStartLine - IGF_START_MN, pSpectrum + iStartLine - IGF_START_MN + lag, iEndLine - iStartLine - lag ); - pWindow++; - } - } - - *predictionGain = 0; - if ( iSubdivisions == nSubdivisions ) /* meaning there is no subdivision with low energy */ - { - rxx[0] = (float) nSubdivisions; - - /* Limit the maximum order to spectrum length/4 */ - *predictionGain = ITF_AutoToLPcoef( rxx, A, min( maxOrder, spectrumLength / 4 ) ); - - *curr_order = maxOrder; - } - - return 1; -} diff --git a/lib_com/tools.c b/lib_com/tools.c index 072cfa767..b35819658 100644 --- a/lib_com/tools.c +++ b/lib_com/tools.c @@ -153,7 +153,6 @@ int32_t sum_l( return tmpL; } -#ifdef IVAS_FLOAT_FIXED /*! r: sum of all vector elements */ Word32 sum_l_fx( const Word32 *vec, /* i : input vector */ @@ -172,7 +171,6 @@ Word32 sum_l_fx( return tmpL; } -#endif /*! r: sum of all vector elements */ float sum_f( const float *vec, /* i : input vector */ @@ -197,7 +195,6 @@ float sum_f( *---------------------------------------------------------------------*/ /*! r: sum of all squared vector elements */ -#ifdef IVAS_FLOAT_FIXED Word32 sum2_f_16_fx( const Word16 *vec, /* i : input vector */ const Word16 lvec /* i : length of input vector */ @@ -231,7 +228,6 @@ Word32 sum2_f_16_gb_fx( return tmp; } -#endif float sum2_f( const float *vec, /* i : input vector */ const int16_t lvec /* i : length of input vector */ @@ -249,7 +245,6 @@ float sum2_f( return tmp; } -#ifdef IVAS_FLOAT_FIXED Word32 sum2_16_exp_fx( const Word16 *vec, /* i : input vector Q(15 - exp) */ const Word16 lvec, /* i : length of input vector */ @@ -358,7 +353,6 @@ Word32 sum2_32_fx( return tmp; } -#endif /*-------------------------------------------------------------------* * set_c() @@ -699,7 +693,6 @@ int16_t maximum( /*! r: index of the maximum value in the input vector */ -#ifdef IVAS_FLOAT_FIXED Word16 maximum_s( const Word16 *vec, /* i : input vector */ const Word16 lvec, /* i : length of input vector */ @@ -733,36 +726,6 @@ Word16 maximum_s( return ind; } -#else -int16_t maximum_s( - const int16_t *vec, /* i : input vector */ - const int16_t lvec, /* i : length of input vector */ - int16_t *max /* o : maximum value in the input vector */ -) -{ - int16_t i, ind; - int16_t tmp; - - ind = 0; - tmp = vec[0]; - - for ( i = 1; i < lvec; i++ ) - { - if ( vec[i] > tmp ) - { - ind = i; - tmp = vec[i]; - } - } - - if ( max != NULL ) - { - *max = tmp; - } - - return ind; -} -#endif /*! r: index of the maximum value in the input vector */ Word16 maximum_l( @@ -910,7 +873,6 @@ int16_t minimum( *-------------------------------------------------------------------*/ /*! r: index of the minimum value in the input vector */ -#ifdef IVAS_FLOAT_FIXED Word16 minimum_s( const Word16 *vec, /* i : Input vector */ const Word16 lvec, /* i : Vector length */ @@ -943,35 +905,6 @@ Word16 minimum_s( return ind; } -#else -int16_t minimum_s( - const int16_t *vec, /* i : Input vector */ - const int16_t lvec, /* i : Vector length */ - int16_t *min_val /* o : minimum value in the input vector */ -) -{ - int16_t i, ind, tmp; - - ind = 0; - tmp = vec[0]; - - for ( i = 1; i < lvec; i++ ) - { - if ( vec[i] < tmp ) - { - ind = i; - tmp = vec[i]; - } - } - - if ( min_val != NULL ) - { - *min_val = tmp; - } - - return ind; -} -#endif /*-------------------------------------------------------------------* * minimum_l() @@ -1812,7 +1745,6 @@ void v_sort_float( return; } -#ifdef IVAS_FLOAT_FIXED void sort( UWord16 *x, /* i/o: Vector to be sorted */ UWord16 len /* i/o: vector length */ @@ -1837,28 +1769,6 @@ void sort( return; } -#else -void sort( - uint16_t *x, /* i/o: Vector to be sorted */ - uint16_t len /* i/o: vector length */ -) -{ - int16_t i; - uint16_t j, tempr; - - for ( i = len - 2; i >= 0; i-- ) - { - tempr = x[i]; - for ( j = i + 1; ( j < len ) && ( tempr > x[j] ); j++ ) - { - x[j - 1] = x[j]; - } - x[j - 1] = tempr; - } - - return; -} -#endif /*---------------------------------------------------------------------* * var() diff --git a/lib_com/tools_fx.c b/lib_com/tools_fx.c index 97de24f65..ba3e9c85b 100644 --- a/lib_com/tools_fx.c +++ b/lib_com/tools_fx.c @@ -100,7 +100,6 @@ Word16 float_to_fix16( float number, Word16 Q ) return ret; } -#ifdef IVAS_FLOAT_FIXED Word16 float_to_fix16_thrld( float number, Word16 Q ) { assert( Q >= 0 ); @@ -120,7 +119,6 @@ Word16 float_to_fix16_thrld( float number, Word16 Q ) Word16 ret = (Word16) ( number * ( (UWord16) 1 << Q ) ); return ret; } -#endif float fix16_to_float( Word16 number, Word16 Q ) { @@ -1541,7 +1539,6 @@ void conv_fx( * All vectors are of length L. Only the first L samples of the * convolution are considered. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #ifdef BASOP_NOGLOB /*Critical overflow */ Flag conv_fx_32( #else @@ -1573,7 +1570,6 @@ void conv_fx_32( return Overflow; #endif } -#endif Word16 var_fx( /* o: variance of vector Qx*/ const Word16 *x, /* i: input vector Qx*/ const Word16 Qx, @@ -1722,7 +1718,6 @@ void Vr_subt( * Searches a given codebook to find the nearest neighbour in Euclidean space. * Index of the winning codevector and the winning vector itself are returned. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 vquant_ivas_fx( /* o: index of the winning codevector */ Word32 x[], /* i: vector to quantize Q25 */ const Word32 x_mean[], /* i: vector mean to subtract (0 if none) Q25 */ @@ -1792,7 +1787,6 @@ Word16 vquant_ivas_fx( /* o: index of the winning codevec return idx; } -#endif Word16 vquant_fx( /* o: index of the winning codevector */ Word16 x[], /* i: vector to quantize Q13 */ @@ -4104,7 +4098,6 @@ void delay_signal_fx( return; } -#ifdef IVAS_FLOAT_FIXED void delay_signal_q_adj_fx( Word32 x[], /* i/o: signal to be delayed */ const Word16 len, /* i : length of the input signal */ @@ -4132,7 +4125,6 @@ void delay_signal_q_adj_fx( return; } -#endif // IVAS_FLOAT_FIXED void v_add_fx( const Word32 x1[], /* i : Input vector 1 */ @@ -4463,7 +4455,6 @@ UWord32 mvl2s_r( return noClipping; } -#ifdef IVAS_FLOAT_FIXED Word32 dotp_me_fx( const Word32 x[], /* i : vector x[] */ const Word32 y[], /* i : vector y[] */ @@ -4505,7 +4496,6 @@ Word32 dotp_fixed_guarded( return suma; } -#endif Word32 dotp_fixed_ivas_fx( diff --git a/lib_com/trans_direct.c b/lib_com/trans_direct.c index 982f8bd65..0fe8682da 100644 --- a/lib_com/trans_direct.c +++ b/lib_com/trans_direct.c @@ -40,138 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * direct_transform() - * - * Transformation of the signal to DCT domain - *-------------------------------------------------------------------*/ - -void direct_transform( - const float *in32, /* i : input signal */ - float *out32, /* o : transformation */ - const int16_t is_transient, /* i : is transient */ - const int16_t L, /* i : length */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t i; - int16_t seg; - int16_t segment_length; - - const float *wh; - const float *wl; - float *sh; - float *sl; - float *iseg; - float *oseg; - float dctin32[L_FRAME48k]; - float in32_r16[L_FRAME48k]; - - const float *win; - - - segment_length = L / 2; - - if ( is_transient ) - { - if ( L == L_FRAME48k ) - { - win = wscw16q15; - } - else if ( L == L_FRAME32k ) - { - win = wscw16q15_32; - } - else if ( L == L_FRAME8k ) - { - win = wscw16q15_8; - } - else - { - win = wscw16q15_16; - } - - for ( i = 0; i < L / 2; i++ ) - { - in32_r16[i] = in32[L - 1 - i]; - in32_r16[L - 1 - i] = in32[i]; - } - iseg = in32_r16 - segment_length / 4; - oseg = out32; - - wh = win + segment_length / 4; - wl = win + segment_length / 4 - 1; - sh = iseg + 3 * segment_length / 4; - sl = iseg + 3 * segment_length / 4 - 1; - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[i] = ( ( *wl-- * *sl-- ) - ( *wh++ * *sh++ ) ); - } - - sl = iseg + segment_length / 2 - 1; - - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[segment_length / 4 + i] = -( *sl-- ); - } - - edct( dctin32, oseg, segment_length / 2, element_mode ); - - iseg = iseg + segment_length / 2; - oseg = oseg + segment_length / 2; - - for ( seg = 1; seg < NUM_TIME_SWITCHING_BLOCKS - 1; seg++ ) - { - wh = win + segment_length / 4; - wl = win + segment_length / 4 - 1; - sh = iseg + 3 * segment_length / 4; - sl = iseg + 3 * segment_length / 4 - 1; - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[i] = ( ( *wl-- * *sl-- ) - ( *wh++ * *sh++ ) ); - } - - sh = iseg; - sl = iseg + segment_length / 2 - 1; - wh = win + segment_length / 2 - 1; - wl = win + 0; - - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[segment_length / 4 + i] = ( ( *wl++ * *sl-- ) + ( *wh-- * *sh++ ) ); - } - - edct( dctin32, oseg, segment_length / 2, element_mode ); - - iseg = iseg + segment_length / 2; - oseg = oseg + segment_length / 2; - } - - sh = iseg + 3 * segment_length / 4 - 1; - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[i] = -( *sh-- ); - } - - sh = iseg; - sl = iseg + segment_length / 2 - 1; - wh = win + segment_length / 2 - 1; - wl = win + 0; - - for ( i = 0; i < segment_length / 4; i++ ) - { - dctin32[segment_length / 4 + i] = ( ( *wh-- * *sh++ ) + ( *wl++ * *sl-- ) ); - } - - edct( dctin32, oseg, segment_length / 2, element_mode ); - } - else - { - edct( in32, out32, L, element_mode ); - } - - return; -} -#endif diff --git a/lib_com/trans_inv.c b/lib_com/trans_inv.c index 1c0032bf0..d441f6ead 100644 --- a/lib_com/trans_inv.c +++ b/lib_com/trans_inv.c @@ -41,856 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * Local constants - *--------------------------------------------------------------------------*/ - -#define NUMSF 8 -#define LOG2_NUMSF 3 -#define INV_NUMSF 0.125f - -/*--------------------------------------------------------------------------* - * preecho_sb() - * - * Time-domain sub-band based pre-echo reduction - *--------------------------------------------------------------------------*/ - -void preecho_sb( - const int32_t core_brate, /* i : core bitrate */ - const float wtda_audio[], /* i : imdct signal */ - float *rec_sig, /* i : reconstructed signal, output of the imdct transform */ - const int16_t framelength, /* i : frame length */ - float *memfilt_lb, /* i/o: memory */ - float *mean_prev_hb, /* i/o: memory */ - float *smoothmem, /* i/o: memory */ - float *mean_prev, /* i/o: memory */ - float *mean_prev_nc, /* i/o: memory */ - float *wmold_hb, /* i/o: memory */ - int16_t *prevflag, /* i/o: flag */ - int16_t *pastpre, /* i/o: flag */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t i, j, len3xLp20; - float es_mdct[9]; /* 0..3 (0..7): energy of the 4 (8) subframes, 4..5: (8..10) energy of the future subframes */ - float es_mdct_hb[9]; /* 0..3 (0..7): energy of the 4 (8) subframes, 4..5: (8..10) energy of the future subframes */ - int16_t zcr[9]; /* 0..3 (0..7): zero crossing of the 4 (8) subframes, 4..5: (8..10) zero crossing of the future subframes */ - int16_t maxnzcr[8], cntnzcr; /* max number of samples without zero crossing */ - float plus_es_mdct[64]; /* 8*8 subsubframes */ - float imdct_mem[L_FRAME48k]; /* memory of the imdct transform, used in the next frame */ - - int16_t maxind, stind, stind_hb, cnt2, cnt5, adv, advmem; - int16_t ind2, ind3, pluslim; - float max_es; - float *ptr; - float min_g[13], g, gt[13]; - float min_g_hb[13], gt_hb[13]; - float preechogain[L_FRAME48k + PREECHO_SMOOTH_LEN]; - float preechogain_hb[L_FRAME48k]; - int16_t subframelength, subsubframelength; - float maxcrit, savehalfe, savehalfe_hb; - float rec_sig_lb[L_FRAME48k], rec_sig_hb[L_FRAME48k]; - float eshbmean2, eshbmean3, sxyhb2, sxylb3, sxyhb3; - float *fptr1, *fptr2, *fptr3, *fptr4, *fptr5, *fptr6; - int16_t *sptr1, *sptr2; - float wmold; - float lim16, lim32; - int16_t limzcr, limmaxnzcr; - float max_es_hb; - int16_t num_subsubframes, log2_num_subsubframes; - float ftmp, fattnext; - float sum_plus_es, mean_plus_es[65]; - float last2, last2_hb; - float max_plus_es_mdct; - int16_t nb_flag, smooth_len; - int16_t firstnzcr; - float es_mdct_half[9]; - float es_mdct_quart[9]; - double invsmoothlenp1; /*double just to have bit-exactness with the previous version, otherwise rounding difference of +-1*/ - int16_t subframelength_s2, subframelength_s34; - float oldgain, oldgain_hb; - - if ( core_brate <= HQ_32k ) - { - nb_flag = 0; - if ( bwidth == NB ) - { - nb_flag = 1; - } - - limzcr = 16; - smooth_len = 4; - invsmoothlenp1 = 0.2; - - if ( nb_flag == 1 ) - { - limzcr = 10; - smooth_len = PREECHO_SMOOTH_LEN; - invsmoothlenp1 = INV_PREECHO_SMOOTH_LENP1; - } - - limmaxnzcr = framelength / 24; - num_subsubframes = 8; - log2_num_subsubframes = 3; - - if ( framelength == L_FRAME8k ) - { - num_subsubframes = 4; - log2_num_subsubframes = 2; - } - len3xLp20 = framelength / 2 - (int16_t) ( (float) framelength * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - for ( i = 0; i < len3xLp20; i++ ) - { - imdct_mem[i] = -wtda_audio[len3xLp20 - 1 - i]; - } - - for ( i = 0; i < framelength / 2; i++ ) - { - imdct_mem[len3xLp20 + i] = -wtda_audio[i]; - } - - - subframelength = framelength >> LOG2_NUMSF; - subsubframelength = subframelength >> log2_num_subsubframes; - wmold = *smoothmem; - subframelength_s2 = subframelength / 2; - subframelength_s34 = subframelength * 3 / 4; - - cntnzcr = -1; - - lim16 = 0.1f; - lim32 = 0.01f; - savehalfe = 0.0f; - savehalfe_hb = 0.0f; - - if ( *pastpre == 0 ) - { - /* if past frame mean energies are not known (no preecho_sb in the past frame), limit max attenuation to 1*/ - lim16 = (float) 1; - lim32 = (float) 1; - } - - *pastpre = 2; - fptr1 = rec_sig_lb; - fptr2 = rec_sig; - fptr3 = rec_sig + 1; - fptr4 = rec_sig + 2; - *fptr1 = (float) ( 0.25 * ( *memfilt_lb + *fptr3 ) + 0.5 * *fptr2 ); - fptr1++; - - for ( j = 1; j < framelength - 1; j++ ) - { - *fptr1 = (float) ( 0.25 * ( *fptr2 + *fptr4 ) + 0.5 * *fptr3 ); - fptr1++; - fptr2++; - fptr3++; - fptr4++; - } - - *fptr1 = (float) ( 0.25 * ( *fptr2 ) + 0.5 * *fptr3 ); - fptr1 = rec_sig_lb; - fptr2 = rec_sig; - fptr3 = rec_sig_hb; - - for ( j = 0; j < framelength; j++ ) - { - *fptr3 = *fptr2 - *fptr1; - fptr1++; - fptr2++; - fptr3++; - } - - fptr2--; - *memfilt_lb = *fptr2; - - /* energy of low bands 8 present and 1 future sub-frames */ - fptr1 = es_mdct; - fptr5 = es_mdct_half; - fptr6 = es_mdct_quart; - fptr4 = es_mdct_hb; - fptr2 = rec_sig; - fptr3 = rec_sig_hb; - sptr1 = zcr; - *sptr1 = 0; - sptr2 = maxnzcr; - for ( j = 0; j < NUMSF; j++ ) /* 8 present subframes */ - { - *fptr1 = 100 + *fptr2 * *fptr2; - *fptr4 = 100 + *fptr3 * *fptr3; - - *sptr2 = 0; - firstnzcr = 1; - if ( j == 0 ) - { - firstnzcr = 0; - } - - fptr2++; - fptr3++; - - for ( i = 1; i < subframelength; i++ ) - { - if ( i == subframelength_s2 ) - { - *fptr5 = *fptr1; - } - - if ( i == subframelength_s34 ) - { - *fptr6 = *fptr1; - } - *fptr1 += *fptr2 * *fptr2; - *fptr4 += *fptr3 * *fptr3; - cntnzcr++; - if ( *fptr2 * *( fptr2 - 1 ) < 0 ) - { - ( *sptr1 )++; - if ( cntnzcr > *sptr2 ) - { - *sptr2 = cntnzcr; - } - - if ( ( firstnzcr > 0 ) && ( cntnzcr > maxnzcr[j - 1] ) ) - { - maxnzcr[j - 1] = cntnzcr; - } - - firstnzcr = 0; - cntnzcr = -1; - } - fptr2++; - fptr3++; - } - - if ( cntnzcr > *sptr2 ) - { - *sptr2 = cntnzcr; - } - fptr4++; - sptr1++; - sptr2++; - - if ( ( firstnzcr > 0 ) && ( cntnzcr > maxnzcr[j - 1] ) ) - { - maxnzcr[j - 1] = cntnzcr; - } - - *sptr1 = 0; - if ( ( j < NUMSF - 1 ) && ( *fptr2 * *( fptr2 - 1 ) < 0 ) ) /* zcr between 2 subframes */ - { - ( *sptr1 )++; /* counts for the nexte subframe */ - cntnzcr = -1; - } - - if ( *fptr5 < ( *fptr1 ) / 2 ) - { - *fptr5 = 2 * ( *fptr1 - *fptr5 ); - } - else - { - *fptr5 = *fptr1; - } - fptr1++; - fptr5++; - fptr6++; - } - - fptr2 = imdct_mem; - j = NUMSF; - *fptr1 = 100 + *fptr2 * *fptr2; - *sptr1 = 0; - fptr2++; - for ( i = 1; i < len3xLp20; i++ ) /* one future subframe but 140 samples (not 80) (enough with ALDO window) */ - { - *fptr1 += *fptr2 * *fptr2; - - if ( *fptr2 * *( fptr2 - 1 ) < 0 ) - { - ( *sptr1 )++; - } - - fptr2++; - } - - fptr2 = imdct_mem; - fptr3 = imdct_mem + 1; - fptr4 = imdct_mem + 2; - ftmp = (float) ( -0.25 * ( rec_sig[framelength - 1] + *fptr3 ) + 0.5 * *fptr2 ); - es_mdct_hb[NUMSF] = 100 + ftmp * ftmp; - - for ( j = 1; j < len3xLp20 - 1; j++ ) - { - ftmp = (float) ( -0.25 * ( *fptr2 + *fptr4 ) + 0.5 * *fptr3 ); - es_mdct_hb[NUMSF] += ftmp * ftmp; - fptr2++; - fptr3++; - fptr4++; - } - - ftmp = (float) ( -0.25 * ( *fptr2 ) + 0.5 * *fptr3 ); - es_mdct_hb[NUMSF] += ftmp * ftmp; - max_es_hb = es_mdct_hb[0]; /* for memorising the max energy */ - - max_es = es_mdct[0]; /* for memorising the max energy */ - maxind = 0; - for ( i = 1; i <= NUMSF; i++ ) - { - if ( es_mdct_hb[i] >= max_es_hb ) /* '=' to handle the first window*/ - { - max_es_hb = es_mdct_hb[i]; /* max energy low band, 8 present and 1 future subframes */ - } - - if ( es_mdct[i] >= max_es ) /* '=' to handle the first window*/ - { - max_es = es_mdct[i]; /* max energy low band, 8 present and 1 future subframes */ - maxind = i; - } - } - - cnt2 = cnt5 = 0; - if ( *prevflag != 0 || max_es < subframelength * 10000 ) - { - maxind = 0; - } - - if ( max_es < 4 * *mean_prev ) - { - maxind = 0; - } - *prevflag = 0; - - for ( i = 0; i < maxind; i++ ) /* only subbands before max energy subband are handled */ - { - g = 1; /* default gain */ - min_g[i] = 1; - min_g_hb[i] = 1; - if ( ( es_mdct_half[i] > 100 * ( *mean_prev_nc + 500000 ) ) || /* less then 20% energy in 3/4 of the subframe -> starting onset in the last quarter */ - ( ( es_mdct_half[i] > 10 * ( *mean_prev_nc + 500000 ) ) && - ( ( zcr[i] < limzcr ) || ( es_mdct_quart[i] < es_mdct[i] / 6 ) ) ) ) /* already an offset, plosif, do not touch */ - { - maxind = i; /* no preecho reduction after the first subframe with gain 1 */ - *prevflag = 1; - for ( j = i - 1; j >= 0; j-- ) - { - if ( es_mdct[j] > es_mdct[i] / 2 ) - { - maxind = j; - } - } - } - else - { - if ( es_mdct[i] < max_es / 16 ) - { - g = lim16; - cnt5++; - - if ( es_mdct[i] < max_es / 32 ) - { - g = lim32; - cnt2++; - } - - min_g[i] = (float) sqrt( (double) ( *mean_prev / es_mdct[i] ) ); /*limitation of attenuation gain */ - min_g_hb[i] = (float) sqrt( (double) ( *mean_prev_hb / es_mdct_hb[i] ) ); /*limitation of attenuation gain */ - if ( ( zcr[i] < limzcr / 2 ) || ( maxnzcr[i] > limmaxnzcr ) ) - { - if ( min_g[i] < 1 ) /* *mean_prev < es_mdct[i]) */ - { - *mean_prev = es_mdct[i]; - } - min_g[i] = 1; /* not noise-like, do not touch the amplitude, but may do in HB*/ - } - - if ( min_g[i] > 1 ) /* in fix point will be min_g = min(min_g, 1), weight 1 */ - { - min_g[i] = (float) 1; - } - - if ( min_g_hb[i] > 1 ) /* in fix point will be min_g = min(min_g, 1), weight 1 */ - { - min_g_hb[i] = (float) 1; - } - } - else - { - if ( i > 0 && maxind < NUMSF ) - { - *prevflag = 1; - } - maxind = i; /* no preecho reduction after the first subframe with gain 1*/ - } - } - gt[i] = g; - gt_hb[i] = g; - } - - for ( i = maxind; i <= NUMSF; i++ ) /* also for the first memory subframe */ - { - gt[i] = 1; - min_g[i] = 1; - gt_hb[i] = 1; - min_g_hb[i] = 1; - } - - ind2 = 0; - for ( i = 0; i < NUMSF; i++ ) - { - if ( gt[i] < 1 ) /*gt not yet limited by min_g*/ - { - ind2 = i + 1; /* first subframe with gain = 1 after last gain < 1 --> frame with the attack*/ - } - } - - if ( ( wmold > 0.5 ) && ( ( cnt2 + cnt5 ) < 2 ) ) /* mini either 1 cnt2 (and so also cnt5) or 2 cnt5 */ - { - /* maxind = 0; false alarm, no echo reduction */ - ind2 = 0; - } - - fptr3 = gt; - fptr4 = gt_hb; - fptr5 = min_g; - fptr6 = min_g_hb; - - for ( i = 0; i < ind2; i++ ) /* only subbands before max energy subband are handled*/ - { - if ( *fptr3 < *fptr5 ) /* in fix point will be g = max(g, min_g), weight 1 */ - { - *fptr3 = *fptr5; - } - - if ( *fptr4 < *fptr6 ) /* in fix point will be g = max(g, min_g), weight 1 */ - { - *fptr4 = *fptr6; - } - - fptr1 = preechogain + i * subframelength + smooth_len; - fptr2 = preechogain_hb + i * subframelength; - for ( j = 0; j < subframelength; j++ ) - { - *fptr1 = *fptr3; - *fptr2 = *fptr4; - fptr1++; - fptr2++; - } - - fptr3++; - fptr4++; - fptr5++; - fptr6++; - } - - max_plus_es_mdct = 0; - adv = smooth_len; /* samples needed to have near 1 gain after smoothing at the beggining of the attack subframe*/ - advmem = adv; - - if ( ind2 > 0 || wmold < 1 || *wmold_hb < 1 ) - { - ptr = imdct_mem; - pluslim = num_subsubframes; /* if ind2 == NUMSF */ - - if ( ind2 < NUMSF ) - { - ptr = rec_sig + subframelength * ind2; - pluslim = ( NUMSF - ind2 ) * num_subsubframes; - } - - maxcrit = *mean_prev_nc; - if ( ind2 == 0 ) - { - sum_plus_es = *mean_prev_nc; /* 8 times mean sususb enenrgy (=maxcrit)*/ - pluslim = num_subsubframes; - oldgain = wmold; - oldgain_hb = *wmold_hb; - } - else /* ind2 > 0*/ - { - sum_plus_es = es_mdct[ind2 - 1]; /* 8 times mean sususb enenrgy (=maxcrit)*/ - oldgain = gt[ind2 - 1]; - oldgain_hb = gt_hb[ind2 - 1]; - maxcrit = es_mdct[ind2 - 1] * gt[ind2 - 1] * gt[ind2 - 1]; /* /1 (iso /8) : 8 times of the pevious subframe mean*/ - - if ( ( max_es / 80 > maxcrit ) && ( zcr[ind2] > limzcr ) ) - { - maxcrit = max_es / 80; /* still 10 times smaller then mean max_es*/ - } - } - - for ( j = 0; j < pluslim; j++ ) /* 8 sub-subframes */ - { - plus_es_mdct[j] = 100; - for ( i = 0; i < subsubframelength; i++ ) - { - - ftmp = *ptr * *ptr; - plus_es_mdct[j] += ftmp; - if ( plus_es_mdct[j] > max_plus_es_mdct ) - { - max_plus_es_mdct = plus_es_mdct[j]; - } - ptr++; - } - - sum_plus_es += 4 * plus_es_mdct[j]; - mean_plus_es[j + 1] = sum_plus_es / ( j + 2 ); /* 4/j could be tabulated in fixed point */ - if ( mean_plus_es[j + 1] < maxcrit ) - { - mean_plus_es[j + 1] = maxcrit; - } - } - mean_plus_es[0] = plus_es_mdct[0]; - if ( mean_plus_es[0] < maxcrit ) - { - mean_plus_es[0] = maxcrit; - } - mean_plus_es[pluslim] = -1; - - j = 0; - while ( ( plus_es_mdct[j] < mean_plus_es[j] ) && ( plus_es_mdct[j] < max_plus_es_mdct / 8 ) ) - { - j++; - } - - adv -= j * subsubframelength; - - if ( ind2 < NUMSF ) /* onset not in future frame */ - { - fptr1 = preechogain + ind2 * subframelength + smooth_len; - fptr2 = preechogain_hb + ind2 * subframelength; - - for ( i = 0; i < j * subsubframelength; i++ ) - { - *fptr1 = oldgain; /*keep the gain of the previous subframe*/ - *fptr2 = oldgain_hb; /*keep the gain of the previous subframe*/ - fptr1++; - fptr2++; - } - } - } - - if ( ind2 > 0 ) - { - /* check increasing energy of preecho by regression last 3 subframes (if possible) */ - ind3 = ind2 + ( j >> log2_num_subsubframes ); /* return (with rounding) to subframe basis */ - if ( ind3 > 1 ) - { - /* case of 3 points is simply */ - eshbmean2 = es_mdct_hb[ind3 - 1] + es_mdct_hb[ind3 - 2]; - sxyhb2 = ( es_mdct_hb[ind3 - 1] - es_mdct_hb[ind3 - 2] ); /* / eshbmean2 * 2; 04042013: division not needed, only sign of sxyhb2 is used*/ - - if ( ind3 > 2 ) - { - eshbmean3 = ( eshbmean2 + es_mdct_hb[ind3 - 3] ) / 3; - sxylb3 = ( es_mdct[ind3 - 1] - es_mdct[ind3 - 3] ); /* /eslbmean3 / 2; /2 for 3 points regression calc; 04042013: division not needed, only sign of sxylb3 is used*/ - sxyhb3 = ( es_mdct_hb[ind3 - 1] - es_mdct_hb[ind3 - 3] ) / eshbmean3 / 2; - if ( ( sxyhb3 < 0.2f ) || ( sxylb3 < 0 ) ) - { - ind2 = 0; - adv = advmem; - } - } - else - { - if ( sxyhb2 < 0.0f ) - { - ind2 = 0; - adv = advmem; /* 04042013: small bug corection*/ - } - } - - eshbmean3 = ( eshbmean2 + es_mdct_hb[ind3] ) / 3; /*verif toward future subsubframe*/ - sxyhb3 = ( es_mdct_hb[ind3] - es_mdct_hb[ind3 - 2] ) / eshbmean3 / 2; - if ( sxyhb3 < 0.2f ) - { - ind2 = 0; - adv = advmem; - } - } - } - - stind = ind2 * subframelength - adv; - stind_hb = stind + advmem; - if ( stind < 0 ) - { - stind = 0; - } - - if ( stind_hb < 0 ) - { - stind_hb = 0; - } - - fptr1 = preechogain + stind + smooth_len; - fptr2 = preechogain_hb + stind_hb; - - for ( i = stind + smooth_len; i < framelength; i++ ) /* rest of the gains, without 4 (PREECHO_SMOOTH_LEN) 1 for fadeout */ - { - *( fptr1++ ) = 1; - } - - for ( i = stind_hb; i < framelength; i++ ) /* rest of the gains*/ - { - *( fptr2++ ) = 1; - } - - for ( i = 0; i < smooth_len; i++ ) - { - preechogain[i] = *smoothmem; - } - - fattnext = 1; - if ( stind > framelength ) - { - fattnext = gt[ind2 - 1]; - } - - for ( i = 0; i < smooth_len; i++ ) - { - preechogain[framelength + i] = fattnext; - } - - fptr1 = preechogain; - for ( i = 0; i < framelength; i++ ) - { - fptr2 = fptr1; - for ( j = 1; j <= smooth_len; j++ ) - { - *fptr1 += *( ++fptr2 ); - } - - *fptr1 *= (float) invsmoothlenp1; - fptr1++; - } - - *smoothmem = fattnext; - *wmold_hb = preechogain_hb[framelength - 1]; - - /* apply gain */ - fptr1 = preechogain; - fptr2 = preechogain_hb; - fptr3 = rec_sig; - fptr4 = rec_sig_lb; - fptr5 = rec_sig_hb; - - for ( i = 0; i < framelength; i++ ) - { - *fptr3 = *fptr4 * *fptr1 + *fptr5 * *fptr2; - fptr1++; - fptr2++; - fptr3++; - fptr4++; - fptr5++; - } - - *mean_prev_nc = es_mdct[0]; /* compute mean not corrected by the actual gains*/ - - for ( i = 1; i < NUMSF; i++ ) /* all present subbands */ - { - if ( i == NUMSF / 2 ) - { - savehalfe = *mean_prev_nc; - } - *mean_prev_nc += es_mdct[i]; - } - - if ( savehalfe < *mean_prev_nc / 2 ) - { - *mean_prev_nc = 2 * ( *mean_prev_nc - savehalfe ); - } - *mean_prev_nc = *mean_prev_nc * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ - - for ( i = 0; i < ind2; i++ ) /* only subbands before max energy subband are handled*/ - { - es_mdct[i] = es_mdct[i] * gt[i] * gt[i]; - es_mdct_hb[i] = es_mdct_hb[i] * gt_hb[i] * gt_hb[i]; - } - - *mean_prev = es_mdct[0]; /* compute mean used in next frame to limit gain*/ - *mean_prev_hb = es_mdct_hb[0]; /* compute mean used in next frame to limit gain*/ - - for ( i = 1; i < NUMSF; i++ ) /* all present subbands */ - { - if ( i == NUMSF / 2 ) - { - savehalfe = *mean_prev; - savehalfe_hb = *mean_prev_hb; - } - - *mean_prev += es_mdct[i]; - *mean_prev_hb += es_mdct_hb[i]; - } - - if ( savehalfe < *mean_prev / 2 ) - { - *mean_prev = 2 * ( *mean_prev - savehalfe ); - } - - if ( savehalfe_hb < *mean_prev_hb / 2 ) - { - *mean_prev_hb = 2 * ( *mean_prev_hb - savehalfe_hb ); - } - - *mean_prev = *mean_prev * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ - *mean_prev_hb = *mean_prev_hb * INV_NUMSF; /* >> LOG2_NUMSF in fixpoint */ - last2 = ( es_mdct[NUMSF - 1] + es_mdct[NUMSF - 2] ) / 2; - last2_hb = ( es_mdct_hb[NUMSF - 1] + es_mdct_hb[NUMSF - 2] ) / 2; - - if ( last2 > *mean_prev ) - { - *mean_prev = last2; - } - - if ( last2_hb > *mean_prev_hb ) - { - *mean_prev_hb = last2_hb; - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * inverse_transform() - * - * Inverse transform from the DCT domain to time domain - *--------------------------------------------------------------------------*/ - -void inverse_transform( - const float *in_mdct, /* i : input MDCT vector */ - float *out, /* o : output vector */ - const int16_t is_transient, /* i : transient flag */ - const int16_t L, /* i : output frame length */ - const int16_t L_inner, /* i : length of the transform */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - float out_alias[L_FRAME48k]; - float alias[MAX_SEGMENT_LENGTH]; - const float *in_segment; - float *out_segment; - float tmp; - int16_t ta, seg; - int16_t segment_length; - float in_mdct_modif[L_FRAME48k]; - float *in_segment_modif; - const float *win; - - segment_length = L / 2; - - if ( is_transient ) - { - if ( L == L_FRAME48k ) - { - win = short_window_48kHz; - } - else if ( L == L_FRAME32k ) - { - win = short_window_32kHz; - } - else if ( L == L_FRAME16k ) - { - win = short_window_16kHz; - } - else /* L == L_FRAME8k */ - { - win = short_window_8kHz; - } - - set_f( out_alias, 0.0f, L ); - - in_segment = in_mdct; - in_segment_modif = in_mdct_modif; - - if ( L == L_inner ) - { - mvr2r( in_mdct, in_mdct_modif, L ); - } - else if ( L > L_inner ) - { - for ( seg = 0; seg < NUM_TIME_SWITCHING_BLOCKS; seg++ ) - { - for ( ta = 0; ta < L_inner / NUM_TIME_SWITCHING_BLOCKS; ta++ ) - { - *in_segment_modif++ = *in_segment++; - } - - for ( ta = 0; ta < ( L - L_inner ) / NUM_TIME_SWITCHING_BLOCKS; ta++ ) - { - *in_segment_modif++ = 0; - } - } - } - else /* L < L_inner */ - { - for ( seg = 0; seg < NUM_TIME_SWITCHING_BLOCKS; seg++ ) - { - for ( ta = 0; ta < segment_length / 2; ta++ ) - { - *in_segment_modif++ = *in_segment++; - } - in_segment += ( L_inner - L ) / NUM_TIME_SWITCHING_BLOCKS; - } - } - - out_segment = out_alias - segment_length / 4; - in_segment = in_mdct_modif; - - iedct_short( in_segment, alias, segment_length, element_mode ); - - for ( ta = segment_length / 4; ta < segment_length / 2; ta++ ) - { - out_segment[ta] = alias[ta]; - } - - for ( ta = segment_length / 2; ta < segment_length; ta++ ) - { - out_segment[ta] = alias[ta] * win[ta]; - } - - out_segment = out_segment + segment_length / 2; - in_segment = in_segment + segment_length / 2; - - for ( seg = 1; seg < NUM_TIME_SWITCHING_BLOCKS - 1; seg++ ) - { - iedct_short( in_segment, alias, segment_length, element_mode ); - - for ( ta = 0; ta < segment_length; ta++ ) - { - out_segment[ta] = out_segment[ta] + alias[ta] * win[ta]; - } - - in_segment = in_segment + segment_length / 2; - out_segment = out_segment + segment_length / 2; - } - - iedct_short( in_segment, alias, segment_length, element_mode ); - - for ( ta = 0; ta < segment_length / 2; ta++ ) - { - out_segment[ta] = out_segment[ta] + alias[ta] * win[ta]; - } - - for ( ta = segment_length / 2; ta < 3 * segment_length / 4; ta++ ) - { - out_segment[ta] = alias[ta]; - } - - for ( ta = 0; ta < L / 2; ta++ ) - { - tmp = out_alias[ta]; - out[ta] = out_alias[L - 1 - ta]; - out[L - 1 - ta] = tmp; - } - } - else - { - edct( in_mdct, out, L, element_mode ); - } - - return; -} -#endif diff --git a/lib_com/trans_inv_fx.c b/lib_com/trans_inv_fx.c index 24e87c5a6..050548bc3 100644 --- a/lib_com/trans_inv_fx.c +++ b/lib_com/trans_inv_fx.c @@ -531,11 +531,7 @@ void preecho_sb_fx( tmp_fx1 = norm_l( es_mdct_fx[i] ); tmp_fxL1 = L_shl( es_mdct_fx[i], tmp_fx1 ); tmp_fxL2 = L_shl( mean_prev_fx_loc, tmp_fx1 ); -#ifdef FIX_1013_CRASH_HQ_CORE_DEC tmp_fx1 = round_fx_sat( tmp_fxL1 ); -#else - tmp_fx1 = round_fx( tmp_fxL1 ); -#endif tmp_fx2 = round_fx( tmp_fxL2 ); tmp_fx3 = div_s( tmp_fx2, tmp_fx1 ); min_g_fx[i] = Frac_sqrt( tmp_fx3 ); diff --git a/lib_com/vlpc_2st_com.c b/lib_com/vlpc_2st_com.c index fd11710f1..ccdf49ed3 100644 --- a/lib_com/vlpc_2st_com.c +++ b/lib_com/vlpc_2st_com.c @@ -41,52 +41,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * lsf_weight_2st_flt() - * - * - *------------------------------------------------------------------*/ - -void lsf_weight_2st_flt( - const float *lsfq, - float *w, - const int16_t mode, - const int32_t sr_core ) -{ - int16_t i; - float d[M + 1]; - float freq_max = sr_core / 2.f; - float freq_div = freq_max / (float) M; - - /* compute lsf distance */ - d[0] = lsfq[0]; - for ( i = 1; i < M; i++ ) - { - d[i] = lsfq[i] - lsfq[i - 1]; - } - d[M] = freq_max - lsfq[M - 1]; - - /* weighting function */ - for ( i = 0; i < M; i++ ) - { - assert( d[i] > 0 ); - - if ( mode == 0 ) - { - w[i] = (float) ( 60.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* abs */ - } - else if ( mode == 1 ) - { - w[i] = (float) ( 65.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* mid */ - } - else - { - w[i] = (float) ( 63.0f / ( freq_div / sqrt( d[i] * d[i + 1] ) ) ); /* rel2 */ - } - } - - return; -} -#endif diff --git a/lib_com/weight.c b/lib_com/weight.c index 6ebb2a6ca..fd4f3cb7c 100644 --- a/lib_com/weight.c +++ b/lib_com/weight.c @@ -40,330 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * sfm2mqb() - * - * Map sub-vectors to pbands - *--------------------------------------------------------------------------*/ - -static void sfm2mqb( - int16_t spe[], /* i : sub-vectors */ - int16_t spe2q[], /* o : pbands */ - const int16_t nb_sfm /* i : number of norms */ -) -{ - int16_t tmp, i; - - /* short groups */ - spe2q[0] = spe[0] + 3; - spe2q[1] = spe[1] + 3; - spe2q[2] = spe[2] + 3; - spe2q[3] = spe[3] + 3; - spe2q[4] = spe[4] + 3; - spe2q[5] = spe[5] + 3; - spe2q[6] = spe[6] + 3; - spe2q[7] = spe[7] + 3; - spe2q[8] = spe[8] + 3; - spe2q[9] = spe[9] + 3; - - spe2q[10] = ( ( spe[10] + spe[11] ) >> 1 ) + 4; - spe2q[11] = ( ( spe[12] + spe[13] ) >> 1 ) + 4; - spe2q[12] = ( ( spe[14] + spe[15] ) >> 1 ) + 4; - - spe2q[13] = ( ( spe[16] + spe[17] ) >> 1 ) + 5; - spe2q[14] = ( ( spe[18] + spe[19] ) >> 1 ) + 5; - - tmp = 0; - for ( i = 20; i < 24; i++ ) - { - tmp += spe[i]; - } - spe2q[15] = (int16_t) ( ( (int32_t) tmp * 8192L ) >> 15 ) + 6; - - tmp = 0; - for ( i = 24; i < 27; i++ ) - { - tmp += spe[i]; - } - spe2q[16] = (int16_t) ( ( (int32_t) tmp * 10923L ) >> 15 ) + 6; - - if ( nb_sfm > 27 ) - { - tmp = 0; - for ( i = 27; i < 30; i++ ) - { - tmp += spe[i]; - } - spe2q[17] = (int16_t) ( ( (int32_t) tmp * 10923L ) >> 15 ) + 6; - - if ( nb_sfm > 30 ) - { - tmp = 0; - for ( i = 30; i < 35; i++ ) - { - tmp += spe[i]; - } - spe2q[18] = (int16_t) ( ( (int32_t) tmp * 6553L ) >> 15 ) + 7; - - tmp = 0; - for ( i = 35; i < 44; i++ ) - { - tmp += spe[i]; - } - spe2q[19] = (int16_t) ( ( (int32_t) tmp * 3641L ) >> 15 ) + 8; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * mqb2sfm() - * - * Map pbands to sub-vectors - *--------------------------------------------------------------------------*/ - -static void mqb2sfm( - int16_t spe2q[], /* i : pbands */ - int16_t spe[], /* o : sub-vectors */ - const int16_t lnb_sfm /* i : number of norms */ -) -{ - int16_t i; - - spe[0] = spe2q[0]; - spe[1] = spe2q[1]; - spe[2] = spe2q[2]; - spe[3] = spe2q[3]; - spe[4] = spe2q[4]; - spe[5] = spe2q[5]; - spe[6] = spe2q[6]; - spe[7] = spe2q[7]; - spe[8] = spe2q[8]; - spe[9] = spe2q[9]; - - spe[10] = spe2q[10]; - spe[11] = spe2q[10]; - - spe[12] = spe2q[11]; - spe[13] = spe2q[11]; - - spe[14] = spe2q[12]; - spe[15] = spe2q[12]; - - spe[16] = spe2q[13]; - spe[17] = spe2q[13]; - - spe[18] = spe2q[14]; - spe[19] = spe2q[14]; - for ( i = 20; i < 24; i++ ) - { - spe[i] = spe2q[15]; - } - - for ( i = 24; i < 27; i++ ) - { - spe[i] = spe2q[16]; - } - - if ( lnb_sfm > SFM_N_STA_8k ) - { - for ( i = 27; i < 30; i++ ) - { - spe[i] = spe2q[17]; - } - - if ( lnb_sfm > SFM_N_STA_10k ) - { - for ( i = 30; i < 35; i++ ) - { - spe[i] = spe2q[18]; - } - - for ( i = 35; i < 44; i++ ) - { - spe[i] = spe2q[19]; - } - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * map_quant_weight() - * - * Calculate the quantization weights - *--------------------------------------------------------------------------*/ - -void map_quant_weight( - const int16_t normqlg2[], /* i : quantized norms */ - int16_t wnorm[], /* o : weighted norm */ - const int16_t is_transient /* i : transient flag */ -) -{ - int16_t sfm; - int16_t tmp16; - int16_t spe2q[NUM_MAP_BANDS]; - int16_t spe[NB_SFM]; - - int16_t spe2q_max; - int16_t spe2q_min; - int16_t norm_max; - int16_t shift; - int16_t sum; - int16_t k; - int16_t lnb_sfm, num_map_bands; - - if ( is_transient ) - { - lnb_sfm = NB_SFM; - num_map_bands = NUM_MAP_BANDS; - - for ( sfm = 0; sfm < lnb_sfm; sfm += 4 ) - { - sum = 0; - for ( k = 0; k < 4; k++ ) - { - sum = sum + normqlg2[sfm + k]; - } - sum = sum >> 2; - for ( k = 0; k < 4; k++ ) - { - spe[sfm + k] = sum; - } - } - } - else - { - lnb_sfm = NB_SFM; - num_map_bands = NUM_MAP_BANDS; - - - for ( sfm = 0; sfm < lnb_sfm; sfm++ ) - { - spe[sfm] = normqlg2[sfm]; - } - } - - sfm2mqb( spe, spe2q, lnb_sfm ); - - for ( sfm = 0; sfm < num_map_bands; sfm++ ) - { - spe2q[sfm] = spe2q[sfm] - 10; - } - - /* spectral smoothing */ - for ( sfm = 1; sfm < num_map_bands; sfm++ ) - { - tmp16 = spe2q[sfm - 1] - 4; - if ( spe2q[sfm] < tmp16 ) - { - spe2q[sfm] = tmp16; - } - } - - for ( sfm = num_map_bands - 2; sfm >= 0; sfm-- ) - { - tmp16 = spe2q[sfm + 1] - 8; - if ( spe2q[sfm] < tmp16 ) - { - spe2q[sfm] = tmp16; - } - } - - for ( sfm = 0; sfm < num_map_bands; sfm++ ) - { - if ( spe2q[sfm] < a_map[sfm] ) - { - spe2q[sfm] = a_map[sfm]; - } - } - - /* Saturate by the Absolute Threshold of Hearing */ - spe2q_max = MIN16B; - spe2q_min = MAX16B; - - for ( sfm = 0; sfm < num_map_bands; sfm++ ) - { - spe2q[sfm] = sfm_width[sfm] - spe2q[sfm]; - - if ( spe2q_max < spe2q[sfm] ) - { - spe2q_max = spe2q[sfm]; - } - - if ( spe2q_min > spe2q[sfm] ) - { - spe2q_min = spe2q[sfm]; - } - } - - for ( sfm = 0; sfm < num_map_bands; sfm++ ) - { - spe2q[sfm] = spe2q[sfm] - spe2q_min; - } - - spe2q_max = spe2q_max - spe2q_min; - - if ( spe2q_max == 0 ) - { - norm_max = 0; - } - else - { - if ( spe2q_max < 0 ) - { - spe2q_max = ~spe2q_max; - } - for ( norm_max = 0; spe2q_max < 0x4000; norm_max++ ) - { - spe2q_max <<= 1; - } - } - - shift = norm_max - 13; - for ( sfm = 0; sfm < num_map_bands; sfm++ ) - { - if ( shift < 0 ) - { - spe2q[sfm] = spe2q[sfm] >> ( -shift ); - } - else - { - spe2q[sfm] = spe2q[sfm] << shift; - } - } - - mqb2sfm( spe2q, spe, lnb_sfm ); - - if ( is_transient ) - { - for ( sfm = 0; sfm < lnb_sfm; sfm += 4 ) - { - sum = 0; - for ( k = 0; k < 4; k++ ) - { - sum = sum + spe[sfm + k]; - } - - sum = sum >> 2; - - for ( k = 0; k < 4; k++ ) - { - spe[sfm + k] = sum; - } - } - } - - /* modify the norms for bit-allocation */ - for ( sfm = 0; sfm < lnb_sfm; sfm++ ) - { - wnorm[sfm] = spe[sfm] + normqlg2[sfm]; - } - - return; -} -#endif diff --git a/lib_com/weight_a.c b/lib_com/weight_a.c index b333ac208..e748899a9 100644 --- a/lib_com/weight_a.c +++ b/lib_com/weight_a.c @@ -38,71 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------ - * weight_a() - * - * Weighting of LP filter coefficients, ap[i] = a[i] * (gamma^i) - *------------------------------------------------------------------*/ - -void weight_a( - const float *a, /* i : LP filter coefficients */ - float *ap, /* o : weighted LP filter coefficients */ - const float gamma, /* i : weighting factor */ - const int16_t m /* i : order of LP filter */ -) -{ - float f; - int16_t i; - - ap[0] = a[0]; - f = gamma; - - for ( i = 1; i <= m; i++ ) - { - ap[i] = f * a[i]; - f *= gamma; - } - - return; -} - - -/*------------------------------------------------------------------ - * weight_a_subfr() - * - * Weighting of LP filter coefficients for multiple subframes, - * ap[i] = a[i] * (gamma^i) - *------------------------------------------------------------------*/ - -void weight_a_subfr( - const int16_t nb_subfr, /* i : number of subframes */ - const float *A, /* i : LP filter coefficients */ - float *Aw, /* o : weighted LP filter coefficients */ - const float gamma, /* i : weighting factor */ - const int16_t m /* i : order of LP filter */ -) -{ - int16_t i, j; - float tmp; - - for ( j = 0; j < nb_subfr; j++ ) - { - Aw[j * ( m + 1 )] = A[j * ( m + 1 )]; - } - - /* Smoothing aka spreading aka masking envelope generation */ - tmp = gamma; - for ( i = 1; i < m + 1; i++ ) - { - for ( j = 0; j < nb_subfr; j++ ) - { - Aw[i + j * ( m + 1 )] = A[i + j * ( m + 1 )] * tmp; - } - tmp *= gamma; - } - - return; -} -#endif diff --git a/lib_com/wi.c b/lib_com/wi.c index f128a3012..d1de09bc7 100644 --- a/lib_com/wi.c +++ b/lib_com/wi.c @@ -41,2257 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define WARP_OS_RATE 8 -#define LL 256 -#define LL_OS ( WARP_OS_RATE * LL ) -#define OSLENGTH 12 -#define WI_THRESHLD 0.8 -#define WI_SAMPLE_THLD 20 -#define ERB_CBSIZE1 64 -#define ERB_CBSIZE2 64 - -#define _POLY1( x, c ) ( ( c )[0] * ( x ) + ( c )[1] ) -#define _POLY2( x, c ) ( _POLY1( ( x ), ( c ) ) * ( x ) + ( c )[2] ) -#define _POLY3( x, c ) ( _POLY2( ( x ), ( c ) ) * ( x ) + ( c )[3] ) - - -/*-------------------------------------------------------------------* - * DTFS_new() - * - * DTFS structure initialization. - *-------------------------------------------------------------------*/ - -/*! r: DTFS structure */ -ivas_error DTFS_new( - DTFS_STRUCTURE **dtfs_out ) -{ - int16_t i; - DTFS_STRUCTURE *dtfs = NULL; - - if ( ( dtfs = (DTFS_STRUCTURE *) malloc( sizeof( DTFS_STRUCTURE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTFS (SC-VBR) structure\n" ) ); - } - -#define WMC_TOOL_SKIP - MOVE( 2 ); - LOOP( 1 ); - MOVE( 2 ); - dtfs->lag = 0; - dtfs->nH = 0; - dtfs->nH_4kHz = 0; - dtfs->upper_cut_off_freq_of_interest = 3300.0; - dtfs->upper_cut_off_freq = 4000.0; - - for ( i = 0; i < MAXLAG_WI; i++ ) - { - dtfs->a[i] = dtfs->b[i] = 0.0; - } - - dtfs->sampling_rate = -1; - - *dtfs_out = dtfs; -#undef WMC_TOOL_SKIP - - return IVAS_ERR_OK; -} - - -/*-------------------------------------------------------------------* - * DTFS_copy() - * - * Copy from one DTFS STRUCTURE to another. - *-------------------------------------------------------------------*/ - -void DTFS_copy( - DTFS_STRUCTURE *Xout, /* o : DTFS structure */ - DTFS_STRUCTURE Xinp /* i : DTFS structure */ -) -{ - int16_t k; - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( k = 0; k < MAXLAG_WI; k++ ) - { - MOVE( 1 ); - Xout->a[k] = Xinp.a[k]; - } - LOOP( 1 ); - for ( k = 0; k < MAXLAG_WI; k++ ) - { - MOVE( 1 ); - Xout->b[k] = Xinp.b[k]; - } - MOVE( 1 ); - Xout->lag = Xinp.lag; - Xout->nH = Xinp.nH; - Xout->nH_4kHz = Xinp.nH_4kHz; - Xout->upper_cut_off_freq_of_interest = Xinp.upper_cut_off_freq_of_interest; - Xout->upper_cut_off_freq = Xinp.upper_cut_off_freq; -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_sub() - * - * Difference of A and B coefficients in cartesian domain. - * Equivalent to time domain subtraction. - *-------------------------------------------------------------------*/ - -void DTFS_sub( - DTFS_STRUCTURE *tmp, /* o : output DFTS */ - DTFS_STRUCTURE X1, /* i : DTFS input 1 */ - DTFS_STRUCTURE X2 /* i : DTFS input 2 */ -) -{ - int16_t i; - -#define WMC_TOOL_SKIP - MULT( 1 ); - LOOP( 1 ); - for ( i = 0; i <= X1.lag / 2; i++ ) - { - MOVE( 1 ); - MULT( 1 ); - tmp->a[i] = X1.a[i]; - MOVE( 1 ); - tmp->b[i] = X1.b[i]; - } - MULT( 1 ); - LOOP( 1 ); - for ( i = 0; i <= X2.lag / 2; i++ ) - { - MAC( 1 ); - tmp->a[i] -= X2.a[i]; - ADD( 1 ); - tmp->b[i] -= X2.b[i]; - } - MOVE( 1 ); - tmp->lag = max( X1.lag, X2.lag ); - tmp->nH = max( X1.nH, X2.nH ); - tmp->nH_4kHz = max( X1.nH_4kHz, X2.nH_4kHz ); - tmp->upper_cut_off_freq_of_interest = X1.upper_cut_off_freq_of_interest; - tmp->upper_cut_off_freq = X1.upper_cut_off_freq; -#undef WMC_TOOL_SKIP - - return; -} - -/*-------------------------------------------------------------------* - * DTFS_fast_fs_inv() - * - * DTFS inverse. - *-------------------------------------------------------------------*/ - -static void DTFS_fast_fs_inv( - DTFS_STRUCTURE *X1_DTFS, /* i : DTFS */ - float *out, /* o : time domain output */ - int16_t N /* i : number of output samples */ -) -{ - uint16_t i, M_2 = (uint16_t) min( X1_DTFS->lag >> 1, X1_DTFS->nH ), N_2 = (uint16_t) N >> 1; - float dbuf[256 + 1]; /* N can't be > 256 */ - - if ( N < X1_DTFS->lag ) - { - N = X1_DTFS->lag; - } - -#define WMC_TOOL_SKIP - /* Populate the dbuf array */ - dbuf[1] = X1_DTFS->a[0]; - dbuf[2] = 0.0; - for ( i = 1; i < M_2; i++ ) - { - MAC( 1 ); - dbuf[2 * i + 1] = X1_DTFS->a[i] * N_2; - MAC( 1 ); - dbuf[2 * i + 2] = X1_DTFS->b[i] * N_2; - } - - if ( N_2 != M_2 ) - { - dbuf[2 * i + 1] = X1_DTFS->a[i] * N_2; - dbuf[2 * i + 2] = X1_DTFS->b[i] * N_2; - i++; - } - - /* Zero-padding in the frequency domain */ - for ( ; i < N_2; i++ ) - { - MOVE( 1 ); - MAC( 2 ); - dbuf[2 * i + 1] = dbuf[2 * i + 2] = 0.0; - } - - FUNC( 3 ); - realft( dbuf, N_2, -1 ); - - for ( i = 1; i <= N; i++ ) - { - MULT( 1 ); - ADD( 1 ); - out[i - 1] = dbuf[i] / N_2; - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_alignment_weight() - * - * Estimate the shift to find the best match between the reference - * DTFS and the test DTFS. - *-------------------------------------------------------------------*/ - -/*! r: shift value to shift X2_DTFS by */ -static float DTFS_alignment_weight( - DTFS_STRUCTURE refX1_DTFS, /* i : X1 the reference DTFS to keep fixed */ - DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ - float Eshift, /* i : Expected shift - coarse value */ - const float *LPC1, /* i : LPC to filter to find correlation in spch */ - const float *LPC2 /* i : LPC to filter to find correlation in spch */ -) -{ - /* Eshift is w.r.t X2 */ - int16_t k; - float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n, wcorr; - float pwf = 0.7f, tmplpc[M + 1]; - DTFS_STRUCTURE X1_DTFS; - -#define WMC_TOOL_SKIP - FUNC( 2 ); - DTFS_copy( &X1_DTFS, refX1_DTFS ); - FUNC( 2 ); - DTFS_adjustLag( &X1_DTFS, X2_DTFS.lag ); - FUNC( 3 ); - ADD( 1 ); - DTFS_poleFilter( &X1_DTFS, LPC1, M + 1 ); - MOVE( 1 ); - tmp = 1.0; - LOOP( 1 ); - for ( k = 0, tmp = 1.0; k < M + 1; k++ ) - { - MOVE( 1 ); - MULT( 2 ); - tmplpc[k] = LPC1[k] * ( tmp *= pwf ); - } - - FUNC( 3 ); - DTFS_zeroFilter( &X1_DTFS, tmplpc, M + 1 ); - FUNC( 3 ); - DTFS_poleFilter( &X2_DTFS, LPC2, M + 1 ); - MOVE( 1 ); - LOOP( 1 ); - for ( k = 0, tmp = 1.0; k < M + 1; k++ ) - { - /* can be stored as a table */ - MULT( 1 ); - tmplpc[k] = LPC2[k] * ( tmp *= pwf ); - } - FUNC( 3 ); - DTFS_zeroFilter( &X2_DTFS, tmplpc, M + 1 ); - MOVE( 1 ); - ADD( 1 ); - maxcorr = (float) -HUGE_VAL; - MOVE( 1 ); - fshift = Eshift; - MOVE( 1 ); - MULT( 1 ); - Adiff = max( 6, 0.15f * X2_DTFS.lag ); - LOGIC( 1 ); - if ( X2_DTFS.lag < 60 ) - { - MOVE( 1 ); - diff = 0.25; - } - else - { - MOVE( 1 ); - diff = 0.5; - } - ADD( 1 ); - ADD( 1 ); - LOOP( 1 ); - for ( n = Eshift - Adiff; n <= Eshift + Adiff; n += diff ) - { - MOVE( 2 ); - ADD( 1 ); - corr = tmp = 0.0f; - /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide */ - MULT( 1 ); - tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); - ADD( 1 ); - LOOP( 1 ); - for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) - { - /* Not counting math function cos and sin since they will be implemented as look-up tables */ - MAC( 1 ); - ADD( 1 ); - corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); - MAC( 1 ); - ADD( 1 ); - corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); - } - MOVE( 1 ); - MAC( 2 ); - ABS( 1 ); - wcorr = (float) ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) ); - LOGIC( 1 ); - if ( wcorr > maxcorr ) - { - MOVE( 1 ); - fshift = n; - MOVE( 1 ); - maxcorr = wcorr; - } - } -#undef WMC_TOOL_SKIP - - return fshift; -} - - -/*-------------------------------------------------------------------* - * DTFS_alignment_full() - * - * Shift value for DTFS full alignment. - *-------------------------------------------------------------------*/ - -float DTFS_alignment_full( - DTFS_STRUCTURE X1_DTFS, /* i : reference DTFS */ - DTFS_STRUCTURE X2_DTFS, /* i : DTFS to shift */ - const int16_t num_steps /* i : resolution */ -) -{ - int16_t k; - float maxcorr, corr, tmp, tmp1, fshift, n, diff; - -#define WMC_TOOL_SKIP - LOGIC( 1 ); - if ( X1_DTFS.lag < X2_DTFS.lag ) - { - FUNC( 2 ); - DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); - } - - MOVE( 1 ); - ADD( 1 ); - maxcorr = (float) -HUGE_VAL; - /* bit-exact optimization - 1/num_steps can be constant => should be counted as a multiply */ - MOVE( 1 ); - MULT( 1 ); - diff = (float) X2_DTFS.lag / num_steps; - - LOOP( 1 ); - for ( fshift = n = 0.0; n < (float) X2_DTFS.lag; n += diff ) - { - MOVE( 2 ); - corr = tmp = 0.0f; - MOVE( 1 ); - MULT( 2 ); - tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); - ADD( 1 ); - - LOOP( 1 ); - for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) - - { - MAC( 1 ); - ADD( 2 ); - corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); - MAC( 1 ); - ADD( 1 ); - corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); - } - LOGIC( 1 ); - if ( corr > maxcorr ) - { - MOVE( 1 ); - fshift = n; - MOVE( 1 ); - maxcorr = corr; - } - } -#undef WMC_TOOL_SKIP - - return fshift; -} - - -/*-------------------------------------------------------------------* - * DTFS_phaseShift() - * - * Phase shift the DTFS coefficients. - * ph is the amount of phase shift (between 0 and 2pi), where positive - * value indicates a shift to right, and a negative ph value indicates a - * left shift. - *-------------------------------------------------------------------*/ - -void DTFS_phaseShift( - DTFS_STRUCTURE *X, /* i/o: DTFS to shift */ - float ph /* i : phase to shift */ -) -{ - int16_t k; - float tmp, tmp2 = 0.0f; - -#define WMC_TOOL_SKIP - ADD( 1 ); - LOOP( 1 ); - for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++, tmp2 += ph ) - { - MOVE( 1 ); - ADD( 1 ); - tmp = X->a[k]; - MOVE( 1 ); - MAC( 1 ); - X->a[k] = (float) ( tmp * cos( tmp2 ) - X->b[k] * sin( tmp2 ) ); - MOVE( 1 ); - MAC( 1 ); - X->b[k] = (float) ( tmp * sin( tmp2 ) + X->b[k] * cos( tmp2 ) ); - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_zeroPadd() - * - * Zero-pad the DTFS coefficients. - *-------------------------------------------------------------------*/ - -void DTFS_zeroPadd( - const int16_t N, /* i : Target lag */ - DTFS_STRUCTURE *X /* i/o: DTFS */ -) -{ - int16_t i; - float diff; - -#define WMC_TOOL_SKIP - LOGIC( 1 ); - if ( N == X->lag ) - { -#undef WMC_TOOL_SKIP - return; -#define WMC_TOOL_SKIP - } - ADD( 1 ); - LOOP( 1 ); - for ( i = ( X->lag >> 1 ) + 1; i <= N >> 1; i++ ) - { - MOVE( 2 ); - X->a[i] = X->b[i] = 0.0; - } - MOVE( 1 ); - X->lag = N; - /* recompute nH for new lag */ - X->nH = (int16_t) floor( X->upper_cut_off_freq / ( 12800.0 / X->lag ) ); - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / X->lag; - MULT( 1 ); - ADD( 1 ); - LOGIC( 1 ); - if ( X->upper_cut_off_freq - ( diff * X->nH ) >= diff ) - { - X->nH++; - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_to_fs() - * - * DTFS to Fs conversion. - *-------------------------------------------------------------------*/ - -void DTFS_to_fs( - const float *x, /* i : time domain signal */ - const int16_t N, /* i : Length of input vector */ - DTFS_STRUCTURE *X, /* o : DTFS structure with a, b, lag */ - const int32_t sampling_rate, /* i : sampling rate */ - const int16_t FR_flag /* i : FR flag */ -) -{ - int16_t n; - int16_t nH, k, nH_band, nH_4kHz; - float sum, tmp, diff; - - if ( !FR_flag ) - { - if ( sampling_rate == 16000 ) - { - X->upper_cut_off_freq_of_interest = 4000.0; - X->upper_cut_off_freq = 6400.0; - X->sampling_rate = INT_FS_12k8; - } - else if ( sampling_rate == 8000 ) - { - X->upper_cut_off_freq_of_interest = 3300.0; - X->upper_cut_off_freq = 4000.0; - X->sampling_rate = INT_FS_12k8; - } - } - else - { - X->upper_cut_off_freq_of_interest = 8000.0; - X->upper_cut_off_freq = 8000.0; - X->sampling_rate = INT_FS_16k; - } - -#define WMC_TOOL_SKIP - X->lag = N; - MOVE( 1 ); - MULT( 1 ); - nH_band = (int16_t) floor( X->upper_cut_off_freq / ( 12800.0 / X->lag ) ); - - nH_4kHz = (int16_t) floor( 4000 / ( 12800.0 / X->lag ) ); - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / X->lag; - MULT( 1 ); - ADD( 1 ); - LOGIC( 1 ); - if ( X->upper_cut_off_freq - ( diff * nH_band ) >= diff ) - { - nH_band++; - } - if ( 4000 - ( diff * nH_4kHz ) >= diff ) - { - nH_4kHz++; - } - /* Number of harmonics excluding the ones at 0 and at pi */ - MOVE( 1 ); - MULT( 1 ); - ADD( 1 ); - nH = ( N - 1 ) >> 1; - /* The DC component */ - X->a[0] = 0.0; - X->b[0] = 0.0; - LOOP( 1 ); - for ( n = 0; n < N; n++ ) - { - ADD( 1 ); - X->a[0] += x[n]; - } - MULT( 1 ); - X->a[0] /= N; - - /* Strictly set the DC componet to zero */ - MOVE( 1 ); - X->a[0] = 0.0; - - /* The harmonics excluding the one at pi */ - LOOP( 1 ); - for ( k = 1; k <= nH; k++ ) - { - X->a[k] = x[0]; - X->b[k] = 0.0; - MOVE( 2 ); - MULT( 1 ); - sum = tmp = (float) ( PI2 * k / N ); - LOOP( 1 ); - for ( n = 1; n < N; n++, sum += tmp ) - { - ADD( 1 ); - X->a[k] += (float) ( x[n] * cos( sum ) ); - ADD( 1 ); - X->b[k] += (float) ( x[n] * sin( sum ) ); - } - MULT( 2 ); - X->a[k] *= ( 2.0f / N ); - MULT( 2 ); - X->b[k] *= ( 2.0f / N ); - } - - /* The harmonic at 'pi' */ - LOGIC( 1 ); - if ( N % 2 == 0 ) - { - MOVE( 1 ); - X->a[k] = 0.0; - MOVE( 1 ); - tmp = 1.0; - LOOP( 1 ); - for ( n = 0; n < N; n++, tmp *= -1.0 ) - { - ADD( 1 ); - X->a[k] += x[n] * tmp; - } - MULT( 1 ); - X->a[k] /= N; - MOVE( 1 ); - X->b[k] = 0.0; - } - ADD( 1 ); - LOOP( 1 ); - for ( k = nH_band + 1; k <= min( ( X->lag >> 1 ), ( MAXLAG_WI - 1 ) ); k++ ) - { - MOVE( 1 ); - X->a[k] = 0.0; - MOVE( 1 ); - X->b[k] = 0.0; - } - X->nH = nH_band; - X->nH_4kHz = nH_4kHz; -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_fs_inv() - * - * DTFS Inverse - *-------------------------------------------------------------------*/ - -void DTFS_fs_inv( - DTFS_STRUCTURE *X, /* i : DTFS input */ - float *x, /* o : time domain sig */ - const int16_t N, /* i : Output length */ - float ph0 /* i : phase shift applied to the output */ -) -{ - float phase, tmp; - int16_t k, n; - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( n = 0; n < N; n++ ) - { - MOVE( 1 ); - x[n] = X->a[0]; - MOVE( 2 ); - MAC( 1 ); - tmp = phase = (float) ( PI2 * n / X->lag + ph0 ); - ADD( 1 ); - LOOP( 1 ); - for ( k = 1; k <= min( X->lag >> 1, X->nH ); k++, tmp += phase ) - { - MAC( 1 ); - ADD( 1 ); - x[n] += (float) ( X->a[k] * cos( tmp ) + X->b[k] * sin( tmp ) ); - } - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_transform() - * - * DTFS transform. - *-------------------------------------------------------------------*/ - -static void DTFS_transform( - DTFS_STRUCTURE X, /* i : Starting DTFS to use in WI */ - DTFS_STRUCTURE X2, /* i : Ending DTFS to use in WI */ - const float *phase, /* i : Phase contour */ - float *out, /* o : Output time domain waveform */ - int16_t N, /* i : Number of samples to generate */ - const int16_t FR_flag /* i : Flag to indicate called in FR context */ -) -{ - int16_t i, j, j1; - float w, tmp; - float x1_256[256], x2_256[256]; - float sum1, sum2; - int16_t m, l1, k; - int16_t N1; - float nrg_flag = 0; - float x_r_fx[L_FRAME]; - float temp_w; - ivas_error error; - - DTFS_STRUCTURE *tmp1_dtfs; - DTFS_STRUCTURE *tmp2_dtfs; - DTFS_STRUCTURE *tmp3_dtfs; - - error = IVAS_ERR_OK; - - if ( ( error = DTFS_new( &tmp1_dtfs ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure 1" ); - } - if ( ( error = DTFS_new( &tmp2_dtfs ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure 2" ); - } - if ( ( error = DTFS_new( &tmp3_dtfs ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure 3" ); - } - -#define WMC_TOOL_SKIP - FUNC( 2 ); - DTFS_copy( tmp1_dtfs, X ); - FUNC( 2 ); - DTFS_copy( tmp2_dtfs, X2 ); - FUNC( 3 ); - DTFS_fast_fs_inv( tmp1_dtfs, x1_256, 256 ); - FUNC( 3 ); - DTFS_fast_fs_inv( tmp2_dtfs, x2_256, 256 ); - MOVE( 1 ); - MAC( 1 ); - ADD( 1 ); - LOG( 1 ); - tmp = (float) ( log( 1.0 - WI_THRESHLD ) / ( X.lag - N ) ); - LOOP( 1 ); - for ( i = 0; i < N; i++ ) - { - if ( FR_flag == 0 ) - { - /* should not be counted inside the loop */ - if ( N - WI_SAMPLE_THLD > X.lag ) - { - /* pre-computed and stored in a table */ - MOVE( 1 ); - w = (float) ( 1.0 - exp( -( i + 1 ) * tmp ) ); - } - else - { - /* can be a look-up table */ - MOVE( 1 ); - w = (float) ( i + 1 ) / N; - } - } - else - { - if ( nrg_flag ) - { - w = (float) ( i + 1 ) / N; - } - else - { - if ( N <= tmp2_dtfs->lag ) - { - N = tmp2_dtfs->lag + 1; - } - - N1 = N - tmp2_dtfs->lag; - if ( i < N1 ) - { - w = (float) ( i + 1 ) / N1; - } - else - w = 1.0; - } - } - - /* add sinc interpolation of two time domain waveforms at - appropriate phase position */ - MULT( 1 ); - DIV( 1 ); - FUNC( 1 ); - ADD( 1 ); - j = ( LL_OS * 10 + (int) rint_new( phase[i] * LL_OS / PI2 ) ) % LL_OS; - - if ( j < 0 ) - { - j = 0; - } - - MOVE( 1 ); - DIV( 1 ); - k = j % WARP_OS_RATE; - MOVE( 1 ); - MULT( 1 ); - l1 = j / WARP_OS_RATE; - MOVE( 2 ); - - set_f( x_r_fx, 0.0f, L_FRAME ); - - temp_w = ( 1 - w ); - - for ( j1 = 0; j1 < 12; j1++ ) - { - m = ( 1000 * LL + l1 - OSLENGTH / 2 + j1 ) % LL; - - if ( m < 0 ) - { - m = 0; - } - - x_r_fx[m] = x1_256[m] * temp_w + x2_256[m] * w; - } - - LOOP( 1 ); - for ( j1 = 0, sum1 = sum2 = 0.0; j1 < OSLENGTH; j1++ ) - { - /* mult or div by constants should be done once outside the loop */ - DIV( 1 ); - ADD( 1 ); - m = ( 1000 * LL + l1 - OSLENGTH / 2 + j1 ) % LL; - - if ( m < 0 ) - { - m = 0; - } - - sum1 += x_r_fx[m] * sinc[k][j1]; - } - - out[i] = sum1; - } -#undef WMC_TOOL_SKIP - - free( tmp1_dtfs ); - free( tmp2_dtfs ); - free( tmp3_dtfs ); - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_zeroFilter() - * - * DTFS zero filter response. - *-------------------------------------------------------------------*/ - -void DTFS_zeroFilter( - DTFS_STRUCTURE *X, /* i/o: DTFS to zeroFilter inplace */ - const float *LPC, /* i : LPCs */ - const int16_t N /* i : LPC order */ -) -{ - float tmp, tmp1, tmp2, sum1, sum2; - int16_t k, n; - -#define WMC_TOOL_SKIP - MOVE( 1 ); - MULT( 1 ); - tmp1 = (float) ( PI2 / X->lag ); - LOOP( 1 ); - for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) - { - MOVE( 2 ); - MULT( 1 ); - tmp = tmp2 = k * tmp1; - /* Calculate sum1 and sum2 */ - MOVE( 1 ); - sum1 = 1.0; - MOVE( 1 ); - sum2 = 0.0; - ADD( 1 ); - LOOP( 1 ); - for ( n = 0; n < N; n++, tmp2 += tmp ) - { - MULT( 1 ); - ADD( 2 ); - sum1 += (float) ( LPC[n] * cos( tmp2 ) ); - MULT( 1 ); - ADD( 1 ); - sum2 += (float) ( LPC[n] * sin( tmp2 ) ); - } - /* Calculate the circular convolution */ - MOVE( 1 ); - tmp = X->a[k]; - MOVE( 1 ); - MAC( 1 ); - X->a[k] = tmp * sum1 - X->b[k] * sum2; - MOVE( 1 ); - MAC( 1 ); - X->b[k] = X->b[k] * sum1 + tmp * sum2; - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_poleFilter() - * - * DTFS pole filter response. - *-------------------------------------------------------------------*/ - -void DTFS_poleFilter( - DTFS_STRUCTURE *X, /* i/o: DTFS to poleFilter inplace */ - const float *LPC, /* i : LPCs */ - const int16_t N /* i : LPC order */ -) -{ - float tmp, tmp1, tmp2, sum1, sum2; - int16_t k, n; - -#define WMC_TOOL_SKIP - MOVE( 1 ); - MULT( 1 ); - tmp1 = (float) ( PI2 / X->lag ); - LOOP( 1 ); - for ( k = 0; k <= min( X->lag >> 1, X->nH ); k++ ) - { - MOVE( 2 ); - MULT( 1 ); - tmp = tmp2 = k * tmp1; - /* Calculate sum1 and sum2 */ - MOVE( 1 ); - sum1 = 1.0; - MOVE( 1 ); - sum2 = 0.0; - ADD( 1 ); - LOOP( 1 ); - for ( n = 0; n < N; n++, tmp2 += tmp ) - { - MULT( 1 ); - ADD( 2 ); - sum1 += (float) ( LPC[n] * cos( tmp2 ) ); - MULT( 1 ); - ADD( 1 ); - sum2 += (float) ( LPC[n] * sin( tmp2 ) ); - } - /* Calculate the circular convolution */ - MOVE( 1 ); - tmp = X->a[k]; - MAC( 1 ); - tmp2 = sum1 * sum1 + sum2 * sum2; - MAC( 1 ); - DIV( 1 ); - X->a[k] = ( tmp * sum1 + X->b[k] * sum2 ) / tmp2; - MAC( 1 ); - ADD( 1 ); - X->b[k] = ( -tmp * sum2 + X->b[k] * sum1 ) / tmp2; - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_setEngy() - * - * Set DTFS energy. - *-------------------------------------------------------------------*/ - -static float DTFS_setEngy( - DTFS_STRUCTURE *X_DTFS, /* i/o: DTFS structure to set engy */ - float en2 /* i : Energy to set to */ -) -{ - int16_t k; - float en1, tmp; - -#define WMC_TOOL_SKIP - FUNC( 1 ); - MOVE( 1 ); - en1 = DTFS_getEngy( *X_DTFS ); - LOGIC( 1 ); - if ( en1 == 0.0 ) - { -#undef WMC_TOOL_SKIP - return 0.0; -#define WMC_TOOL_SKIP - } - MOVE( 1 ); - DIV( 1 ); - SQRT( 1 ); - tmp = (float) sqrt( en2 / en1 ); - LOOP( 1 ); - for ( k = 0; k <= min( X_DTFS->lag >> 1, X_DTFS->nH ); k++ ) - { - MULT( 1 ); - X_DTFS->a[k] *= tmp; - MULT( 1 ); - X_DTFS->b[k] *= tmp; - } -#undef WMC_TOOL_SKIP - - return en1; -} - - -/*-------------------------------------------------------------------* - * DTFS_adjustLag() - * - * Adjust DTFS lag based on a target lag. - *-------------------------------------------------------------------*/ - -void DTFS_adjustLag( - DTFS_STRUCTURE *X_DTFS, /* i/o: DTFS to adjust lag for */ - const int16_t N /* i : Target lag */ -) -{ - int16_t k; - float en, diff; - -#define WMC_TOOL_SKIP - LOGIC( 1 ); - if ( N == X_DTFS->lag ) - { -#undef WMC_TOOL_SKIP - return; -#define WMC_TOOL_SKIP - } - - LOGIC( 1 ); - if ( N > X_DTFS->lag ) - { - - FUNC( 2 ); - DTFS_zeroPadd( N, X_DTFS ); - } - else - { - FUNC( 1 ); - MOVE( 1 ); - en = DTFS_getEngy( *X_DTFS ); - ADD( 1 ); - LOOP( 1 ); - for ( k = ( N >> 1 ) + 1; k <= min( X_DTFS->lag >> 1, X_DTFS->nH ); k++ ) - { - MOVE( 1 ); - X_DTFS->a[k] = 0.0; - MOVE( 1 ); - X_DTFS->b[k] = 0.0; - } - FUNC( 2 ); - DTFS_setEngy( X_DTFS, en ); - MOVE( 1 ); - X_DTFS->lag = N; - /* recompute nH for new lag */ - X_DTFS->nH = (int16_t) floor( X_DTFS->upper_cut_off_freq / ( 12800.0 / X_DTFS->lag ) ); - - X_DTFS->nH_4kHz = (int16_t) floor( 4000.0 / ( 12800.0 / X_DTFS->lag ) ); - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / X_DTFS->lag; - MULT( 1 ); - ADD( 1 ); - LOGIC( 1 ); - if ( X_DTFS->upper_cut_off_freq - ( diff * X_DTFS->nH ) >= diff ) - { - X_DTFS->nH++; - } - if ( 4000.0 - ( diff * X_DTFS->nH_4kHz ) >= diff ) - { - X_DTFS->nH_4kHz++; - } - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_getEngy() - * - * Get DTFS energy. - *-------------------------------------------------------------------*/ - -float DTFS_getEngy( - DTFS_STRUCTURE X /* i : DTFS to compute energy of */ -) -{ - int16_t k; - float en; - - en = 0.0f; -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH ); k++ ) - { - MAC( 1 ); - ADD( 1 ); - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } - MULT( 1 ); - en /= 2.0; - MULT( 1 ); - ADD( 1 ); - en += X.a[0] * X.a[0]; - LOGIC( 1 ); - if ( X.lag % 2 == 0 ) - { - MAC( 1 ); - ADD( 1 ); - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } -#undef WMC_TOOL_SKIP - - return en; -} - - -/*-------------------------------------------------------------------* - * DTFS_car2pol() - * - * DTFS cartesian to polar co-ordinates conversion. - *-------------------------------------------------------------------*/ - -void DTFS_car2pol( - DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ -) -{ - int16_t k; - float tmp; - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) - { - MOVE( 1 ); - tmp = X->a[k]; - MOVE( 1 ); - FUNC( 2 ); - MULT( 1 ); - X->a[k] = (float) ( 0.5f * sqrt( tmp * tmp + X->b[k] * X->b[k] ) ); - MOVE( 1 ); - X->b[k] = (float) atan2( X->b[k], tmp ); - } - LOGIC( 1 ); - if ( X->lag % 2 == 0 ) - { - MOVE( 1 ); - tmp = X->a[k]; - FUNC( 2 ); - MOVE( 1 ); - X->a[k] = (float) sqrt( tmp * tmp + X->b[k] * X->b[k] ); - MOVE( 1 ); - X->b[k] = (float) atan2( X->b[k], tmp ); - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_pol2car() - * - * DTFS polar to cartesian co-ordinates conversion. - *-------------------------------------------------------------------*/ - -void DTFS_pol2car( - DTFS_STRUCTURE *X /* i/o: DTFS structure a, b, lag */ -) -{ - int16_t k; - float tmp; - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( k = 1; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++ ) - { - MOVE( 1 ); - tmp = X->b[k]; - MOVE( 1 ); - MULT( 2 ); - X->b[k] = (float) ( 2.0f * X->a[k] * sin( tmp ) ); - MOVE( 1 ); - MULT( 2 ); - X->a[k] = (float) ( 2.0f * X->a[k] * cos( tmp ) ); - } - LOGIC( 1 ); - if ( X->lag % 2 == 0 ) - { - MOVE( 1 ); - tmp = X->b[k]; - MOVE( 1 ); - MULT( 1 ); - X->b[k] = (float) ( X->a[k] * sin( tmp ) ); - MOVE( 1 ); - MULT( 1 ); - X->a[k] = (float) ( X->a[k] * cos( tmp ) ); - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_setEngyHarm() - * - * Adjust DTFS energy based on the input target energy. - *-------------------------------------------------------------------*/ - -/*! r: Input RMS between f1 and f2 before scaling */ -float DTFS_setEngyHarm( - float f1, /* i : lower band freq of input to control energy */ - float f2, /* i : upper band freq of input to control energy */ - float g1, /* i : lower band freq of output to control energy */ - float g2, /* i : upper band freq of output to control energy */ - float en2, /* i : Target Energy to set the DTFS to */ - DTFS_STRUCTURE *X /* i/o: DTFS to adjust the energy of */ -) -{ - int16_t k, count; - float en1, tmp, factor, diff; - - diff = (float) INT_FS_12k8 / X->lag; - - en1 = 0.0f; - count = 0; - -#define WMC_TOOL_SKIP - LOGIC( 1 ); - if ( f1 == 0.0 ) - { - MULT( 1 ); - ADD( 1 ); - en1 += X->a[0] * X->a[0]; - count++; - } - MOVE( 1 ); - ADD( 1 ); - ADD( 1 ); - LOOP( 1 ); - for ( k = 1, tmp = diff; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++, tmp += diff ) - { - if ( X->a[k] < EPSILON ) - { - X->a[k] = 0; - } - - LOGIC( 1 ); - if ( tmp > f1 && tmp <= f2 ) - { - MULT( 1 ); - ADD( 1 ); - en1 += X->a[k] * X->a[k]; - count++; - } - } - - if ( count <= 0.0 ) - { - count = 1; - } - - - DIV( 1 ); - en1 /= count; - - if ( en2 < 0.0 ) - { - en2 = 0.0; - } - - LOGIC( 1 ); - if ( en1 > 0.0 ) - { - MOVE( 1 ); - DIV( 1 ); - SQRT( 1 ); - factor = (float) sqrt( en2 / en1 ); - } - else - { - MOVE( 1 ); - factor = 0.0f; - } - LOGIC( 1 ); - if ( g1 == 0.0 ) - { - MULT( 1 ); - X->a[k] *= factor; - } - MOVE( 1 ); - ADD( 1 ); - ADD( 1 ); - LOOP( 1 ); - for ( k = 1, tmp = diff; k <= min( ( X->lag - 1 ) >> 1, X->nH ); k++, tmp += diff ) - { - ADD( 1 ); - ADD( 1 ); - LOGIC( 1 ); - if ( tmp > g1 && tmp <= g2 ) - { - MULT( 1 ); - X->a[k] *= factor; - } - } -#undef WMC_TOOL_SKIP - - return (float) ( en1 + 1e-20 ); -} - - -/*-------------------------------------------------------------------* - * cubicPhase() - * - * Compute coefficients of cubic phase function - *-------------------------------------------------------------------*/ - -static void cubicPhase( - float ph1, /* i : phase offset */ - float ph2, /* i : phase 2 */ - const float L1, /* i : previous lag */ - const float L2, /* i : current lag */ - int16_t N, /* i : input length */ - float *phOut /* o : cubic phase output */ -) -{ - float coef[4], f1, f2, c1, c2, factor; - int16_t n; - double diff; - -#define WMC_TOOL_SKIP - ADD( 1 ); - N -= (int16_t) L2; - - if ( N <= 0 ) - { - N = 1; - } - - /* Computation of the coefficients of the cubic phase function */ - MOVE( 1 ); - DIV( 1 ); - f1 = (float) ( PI2 / L1 ); - MOVE( 1 ); - DIV( 1 ); - f2 = (float) ( PI2 / L2 ); - MOVE( 1 ); - DIV( 1 ); - ph1 = (float) fmod( (double) ( ph1 ), PI2 ); - MOVE( 1 ); - DIV( 1 ); - ph2 = (float) fmod( (double) ( ph2 ), PI2 ); - MOVE( 1 ); - coef[3] = ph1; - MOVE( 1 ); - coef[2] = f1; - MOVE( 1 ); - MAC( 1 ); - ADD( 1 ); - FUNC( 1 ); - ADD( 1 ); - factor = (float) ( anint( ( ph1 - ph2 + 0.5 * N * ( f2 + f1 ) ) / PI2 ) ); - MOVE( 1 ); - ADD( 1 ); - c1 = f2 - f1; - MOVE( 1 ); - MAC( 1 ); - ADD( 2 ); - c2 = (float) ( ph2 - ph1 - N * f1 + PI2 * factor ); - MOVE( 1 ); - MAC( 1 ); - DIV( 1 ); - coef[0] = ( N * c1 - 2 * c2 ) / ( N * N * N ); - MOVE( 1 ); - MULT( 4 ); - DIV( 1 ); - ADD( 1 ); - coef[1] = ( c1 - 3 * N * N * coef[0] ) / ( 2 * N ); - /* Computation of the phase value at each sample point */ - MOVE( 1 ); - phOut[0] = ph1; - LOOP( 1 ); - for ( n = 1; n < N; n++ ) - { - MOVE( 1 ); - phOut[n] = _POLY3( n, coef ); - } - MOVE( 1 ); - MULT( 1 ); - diff = (float) ( PI2 / L2 ); - ADD( 1 ); - LOOP( 1 ); - for ( ; n < N + (int) L2; n++ ) - { - MOVE( 1 ); - ADD( 2 ); - phOut[n] = (float) ( phOut[n - 1] + diff ); - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_to_erb() - * - * DTFS to ERB conversion - *-------------------------------------------------------------------*/ - -void DTFS_to_erb( - DTFS_STRUCTURE X, /* i : DTFS input */ - float *out /* o : ERB output */ -) -{ - int16_t num_erb; - uint16_t i, j, count[NUM_ERB_WB]; - float freq, diff; - - const float *erb = NULL; - num_erb = NUM_ERB_NB; - if ( X.upper_cut_off_freq == 4000.0 ) - { - num_erb = NUM_ERB_NB; - erb = &( erb_NB[0] ); - } - else if ( X.upper_cut_off_freq == 6400.0 ) - { - num_erb = NUM_ERB_WB; - erb = &( erb_WB[0] ); - } - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - MOVE( 1 ); - count[i] = 0; - MOVE( 1 ); - out[i] = 0.0; - } - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / X.lag; - MOVE( 2 ); - ADD( 1 ); - LOOP( 1 ); - for ( i = j = 0, freq = 0.0; i <= min( X.lag >> 1, X.nH ); i++, freq += diff ) - { - if ( !( freq <= erb[num_erb] ) ) - { - freq = erb[num_erb]; - } - - LOOP( 1 ); - for ( ; j < num_erb; j++ ) - { - LOGIC( 1 ); - if ( freq < erb[j + 1] ) - { - if ( X.a[i] < 0.0f ) - { - X.a[i] = 0.0f; - } - - ADD( 1 ); - out[j] += X.a[i]; - count[j]++; - break; - } - } - } - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - LOGIC( 1 ); - if ( count[i] > 1 ) - { - DIV( 1 ); - out[i] /= count[i]; - } - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * erb_slot() - * - * Estimation of ERB slots. - *-------------------------------------------------------------------*/ - -void erb_slot( - int16_t lag, /* i : input lag */ - int16_t *out, /* o : ERB slots */ - float *mfreq, /* i : ERB frequencies */ - int16_t num_erb /* i : number of ERBs */ -) -{ - uint16_t i, j; - float freq, diff; - int16_t upper_cut_off_freq; - const float *erb = NULL; - int16_t nH_band; - - upper_cut_off_freq = 4000; - if ( num_erb == NUM_ERB_NB ) - { - upper_cut_off_freq = 4000; - erb = &( erb_NB[0] ); - } - else if ( num_erb == NUM_ERB_WB ) - { - upper_cut_off_freq = 6400; - erb = &( erb_WB[0] ); - } - -#define WMC_TOOL_SKIP - MOVE( 1 ); - MULT( 1 ); - nH_band = (int16_t) floor( upper_cut_off_freq / ( 12800.0 / lag ) ); - - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - MOVE( 1 ); - out[i] = 0; - MOVE( 1 ); - mfreq[i] = 0.0; - } - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / lag; - MULT( 1 ); - ADD( 1 ); - LOGIC( 1 ); - if ( upper_cut_off_freq - ( diff * nH_band ) >= diff ) - { - nH_band++; - } - MOVE( 2 ); - ADD( 1 ); - LOOP( 1 ); - for ( i = j = 0, freq = 0.0; i <= min( lag >> 1, nH_band ); i++, freq += diff ) - { - - if ( !( freq <= erb[num_erb] ) ) - { - freq = erb[num_erb]; - } - - MOVE( 1 ); - freq = min( freq, upper_cut_off_freq ); - - LOOP( 1 ); - for ( ; j < num_erb; j++ ) - { - LOGIC( 1 ); - if ( freq < erb[j + 1] ) - { - ADD( 1 ); - mfreq[j] += freq; - out[j]++; - break; - } - } - } - LOOP( 1 ); - for ( j = 0; j < num_erb; j++ ) - { - LOGIC( 1 ); - if ( out[j] > 1 ) - { - DIV( 1 ); - mfreq[j] /= out[j]; - } - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * DTFS_erb_inv() - * - * .DTFS after ERB inverse - *-------------------------------------------------------------------*/ - -void DTFS_erb_inv( - float *in, /* i : ERB inpt */ - int16_t *slot, /* i : ERB slots filled based on lag */ - float *mfreq, /* i : erb frequence edges */ - DTFS_STRUCTURE *X, /* o : DTFS after erb-inv */ - const int16_t num_erb /* i : Number of ERB bands */ -) -{ - int16_t i, j, m = 0; - float diff; - float freq, f[NUM_ERB_WB + 2], amp[NUM_ERB_WB + 2]; - int16_t upper_cut_off_freq = 0; - - const float *erb = NULL; - - if ( num_erb == NUM_ERB_NB ) - { - upper_cut_off_freq = 4000; - erb = &( erb_NB[0] ); - } - else if ( num_erb == NUM_ERB_WB ) - { - upper_cut_off_freq = 6400; - erb = &( erb_WB[0] ); - } - -#define WMC_TOOL_SKIP - MOVE( 1 ); - f[m] = 0.0; - MOVE( 1 ); - amp[m] = 0.0; - m++; - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - LOGIC( 1 ); - if ( slot[i] != 0 ) - { - MOVE( 1 ); - f[m] = mfreq[i]; - MOVE( 1 ); - amp[m] = in[i]; - m++; - } - } - MOVE( 1 ); - f[m] = upper_cut_off_freq; - MOVE( 1 ); - amp[m] = 0.0; - m++; - - MOVE( 1 ); - MULT( 1 ); - diff = 12800.0f / X->lag; - - MOVE( 2 ); - ADD( 1 ); - LOOP( 1 ); - for ( i = 0, j = 1, freq = 0.0; i <= min( X->lag >> 1, X->nH ); i++, freq += diff ) - { - if ( !( freq <= erb[num_erb] ) ) - { - freq = erb[num_erb]; - } - - if ( !( m <= num_erb + 2 ) ) - { - m = num_erb + 2; - } - - LOGIC( 1 ); - if ( freq > upper_cut_off_freq ) - { - MOVE( 1 ); - freq = upper_cut_off_freq; - } - LOOP( 1 ); - for ( ; j < m; j++ ) - { - LOGIC( 1 ); - if ( freq <= f[j] ) - { - MOVE( 1 ); - MAC( 2 ); - ADD( 1 ); - X->a[i] = amp[j] * ( freq - f[j - 1] ) + amp[j - 1] * ( f[j] - freq ); - LOGIC( 1 ); - if ( f[j] != f[j - 1] ) - { - DIV( 1 ); - ADD( 1 ); - X->a[i] /= ( f[j] - f[j - 1] ); - } - break; - } - } - - X->a[0] = 0.0f; - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * LPCPowSpect() - * - * LPC power spectrum - *-------------------------------------------------------------------*/ - -static void LPCPowSpect( - const float *freq, /* i : ERB frequencies */ - const int16_t Nf, /* i : Number of ERBs */ - const float *LPC, /* i : LPC coefficients */ - const int16_t Np, /* i : Number of LPCs */ - float *out /* o : LPC power spectrum */ -) -{ - float w, tmp, Re, Im; - int16_t i, k; - -#define WMC_TOOL_SKIP - LOOP( 1 ); - for ( k = 0; k < Nf; k++ ) - { - MOVE( 1 ); - Re = 1.0; - MOVE( 1 ); - Im = 0.0; - /* Note that freq ranges between [0 UPPER_CUT_OFF_FREQ] */ - MOVE( 1 ); - MULT( 2 ); - tmp = (float) ( freq[k] / 12800.0f * PI2 ); - MOVE( 1 ); - ADD( 1 ); - LOOP( 1 ); - for ( i = 0, w = tmp; i < Np; i++, w += tmp ) - { - MULT( 1 ); - ADD( 2 ); - Re += (float) ( LPC[i] * cos( w ) ); - MULT( 1 ); - ADD( 1 ); - Im -= (float) ( LPC[i] * sin( w ) ); - } - MOVE( 1 ); - MAC( 1 ); - DIV( 1 ); - out[k] = 1.0f / ( Re * Re + Im * Im ); - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * erb_diff() - * - * ERB difference - *-------------------------------------------------------------------*/ - -void erb_diff( - const float *prev_erb, /* i : previous ERB */ - const int16_t pl, /* i : previous lag */ - const float *curr_erb, /* i : current ERB */ - const int16_t l, /* i : current lag */ - const float *curr_lsp, /* i : current LSP coefficients */ - float *out, /* o : ERB difference */ - int16_t *index, /* i : ERB index */ - const int16_t num_erb /* i : Number of ERBs */ -) -{ - int16_t i, j; - int16_t pslot[NUM_ERB_WB], cslot[NUM_ERB_WB], mmseindex; - float tmp, tmp1, t_prev_erb[NUM_ERB_WB], LPC[M + 1], mfreq[NUM_ERB_WB], PowSpect[NUM_ERB_WB], mmse; - const float( *AmpCB1 )[10] = 0; - - if ( num_erb == NUM_ERB_NB ) - { - AmpCB1 = AmpCB1_NB; - } - else if ( num_erb == NUM_ERB_WB ) - { - AmpCB1 = AmpCB1_WB; - } - -#define WMC_TOOL_SKIP - FUNC( 3 ); - erb_slot( l, cslot, mfreq, num_erb ); - FUNC( 3 ); - erb_slot( pl, pslot, t_prev_erb, num_erb ); - MOVE( 1 ); - ADD( 1 ); - LOOP( 1 ); - for ( i = 0, tmp = 1.0f; i < M + 1; i++ ) - { - MOVE( 1 ); - MULT( 2 ); - ADD( 1 ); - LPC[i] = curr_lsp[i] * ( tmp *= 0.78f ); - } - FUNC( 5 ); - ADD( 1 ); - LPCPowSpect( mfreq, num_erb, LPC, M + 1, PowSpect ); - - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - MOVE( 1 ); - t_prev_erb[i] = prev_erb[i]; - } - - LOGIC( 1 ); - if ( pl > l ) - { - MOVE( 1 ); - tmp = t_prev_erb[0]; - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - if ( pslot[i] < 0 ) - { - pslot[i] = 0; - } - - LOGIC( 1 ); - if ( pslot[i] != 0 ) - { - MOVE( 1 ); - tmp = t_prev_erb[i]; - } - else - { - MOVE( 1 ); - t_prev_erb[i] = tmp; - } - } - } - else if ( l > pl ) - { - MOVE( 1 ); - tmp = t_prev_erb[num_erb - 1]; - ADD( 1 ); - LOOP( 1 ); - for ( i = num_erb - 1; i >= 0; i-- ) - { - LOGIC( 1 ); - if ( pslot[i] != 0 ) - { - MOVE( 1 ); - tmp = t_prev_erb[i]; - } - else - { - MOVE( 1 ); - t_prev_erb[i] = tmp; - } - } - } - - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - MOVE( 1 ); - ADD( 1 ); - out[i] = curr_erb[i] - t_prev_erb[i]; - } - - /* First Band Amplitude Search */ - MOVE( 1 ); - mmse = (float) HUGE_VAL; - MOVE( 1 ); - mmseindex = -1; - LOOP( 1 ); - for ( j = 0; j < ERB_CBSIZE1; j++ ) - { - MOVE( 1 ); - tmp = 0.0; - LOOP( 1 ); - for ( i = 1; i < 11; i++ ) - { - LOGIC( 1 ); - if ( cslot[i] != 0 ) - { - ADD( 1 ); - LOGIC( 1 ); - if ( AmpCB1[j][i - 1] < -t_prev_erb[i] ) - { - MOVE( 1 ); - MULT( 1 ); - MULT( 1 ); - tmp1 = PowSpect[i] * SQR( curr_erb[i] ); - } - else - { - MOVE( 1 ); - MAC( 1 ); - MULT( 1 ); - tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB1[j][i - 1] ) ); - } - LOGIC( 1 ); - if ( AmpCB1[j][i - 1] < out[i] ) - { - MULT( 1 ); - tmp1 *= 0.9f; - } - ADD( 1 ); - tmp += tmp1; - } - } - - LOGIC( 1 ); - if ( tmp < mmse ) - { - MOVE( 1 ); - mmse = tmp; - MOVE( 1 ); - mmseindex = j; - } - } - - if ( !( mmseindex < ERB_CBSIZE1 && mmseindex >= 0 ) ) - { - mmseindex = 0; - } - - MOVE( 1 ); - index[0] = mmseindex; - - /* Second Band Amplitude Search */ - MOVE( 1 ); - mmse = (float) HUGE_VAL; - MOVE( 1 ); - mmseindex = -1; - LOOP( 1 ); - for ( j = 0; j < ERB_CBSIZE2; j++ ) - { - MOVE( 1 ); - tmp = 0.0; - for ( i = 11; i < num_erb; i++ ) - { - if ( num_erb == NUM_ERB_NB ) - { - LOGIC( 1 ); - if ( cslot[i] != 0 ) - { - ADD( 1 ); - LOGIC( 1 ); - if ( AmpCB2_NB[j][i - 11] < -t_prev_erb[i] ) - { - MOVE( 1 ); - MULT( 1 ); - MULT( 1 ); - tmp1 = PowSpect[i] * SQR( curr_erb[i] ); - } - else - { - MOVE( 1 ); - MAC( 1 ); - MULT( 1 ); - tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB2_NB[j][i - 11] ) ); - } - - LOGIC( 1 ); - if ( AmpCB2_NB[j][i - 11] < out[i] ) - { - MULT( 1 ); - tmp1 *= 0.9f; - } - ADD( 1 ); - tmp += tmp1; - } - } - else if ( num_erb == NUM_ERB_WB ) - { - if ( cslot[i] != 0 ) - { - ADD( 1 ); - LOGIC( 1 ); - if ( AmpCB2_WB[j][i - 11] < -t_prev_erb[i] ) - { - MOVE( 1 ); - MULT( 1 ); - MULT( 1 ); - tmp1 = PowSpect[i] * SQR( curr_erb[i] ); - } - else - { - MOVE( 1 ); - MAC( 1 ); - MULT( 1 ); - tmp1 = (float) ( PowSpect[i] * SQR( out[i] - AmpCB2_WB[j][i - 11] ) ); - } - - LOGIC( 1 ); - if ( AmpCB2_WB[j][i - 11] < out[i] ) - { - MULT( 1 ); - tmp1 *= 0.9f; - } - ADD( 1 ); - tmp += tmp1; - } - } - } - - LOGIC( 1 ); - if ( tmp < mmse ) - { - MOVE( 1 ); - mmse = tmp; - MOVE( 1 ); - mmseindex = j; - } - } - - if ( !( mmseindex < ERB_CBSIZE2 && mmseindex >= 0 ) ) - { - mmseindex = 0; - } - - MOVE( 1 ); - index[1] = mmseindex; -#undef WMC_TOOL_SKIP - - return; -} - -/*-------------------------------------------------------------------* - * erb_add() - * - * Add current and past ERB - *-------------------------------------------------------------------*/ - -void erb_add( - float *curr_erb, /* i/o: current ERB */ - const int16_t l, /* i : current lag */ - const float *prev_erb, /* i : previous ERB */ - const int16_t pl, /* i : previous lag */ - const int16_t *index, /* i : ERB index */ - const int16_t num_erb /* i : number of ERBs */ -) -{ - int16_t i, pslot[NUM_ERB_WB], cslot[NUM_ERB_WB]; - float tmp, t_prev_erb[NUM_ERB_WB]; - const float( *AmpCB1 )[10] = 0; - - if ( num_erb == NUM_ERB_NB ) - { - AmpCB1 = AmpCB1_NB; - } - else if ( num_erb == NUM_ERB_WB ) - { - AmpCB1 = AmpCB1_WB; - } - -#define WMC_TOOL_SKIP - FUNC( 3 ); - erb_slot( l, cslot, t_prev_erb, num_erb ); - FUNC( 3 ); - erb_slot( pl, pslot, t_prev_erb, num_erb ); - - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - MOVE( 1 ); - t_prev_erb[i] = prev_erb[i]; - } - - LOGIC( 1 ); - if ( pl > l ) - { - MOVE( 1 ); - tmp = t_prev_erb[0]; - LOOP( 1 ); - for ( i = 0; i < num_erb; i++ ) - { - if ( !( pslot[i] >= 0 ) ) - { - pslot[i] = 0; - } - - LOGIC( 1 ); - if ( pslot[i] != 0 ) - { - MOVE( 1 ); - tmp = t_prev_erb[i]; - } - else - { - MOVE( 1 ); - t_prev_erb[i] = tmp; - } - } - } - else if ( l > pl ) - { - MOVE( 1 ); - tmp = t_prev_erb[num_erb - 1]; - ADD( 1 ); - LOOP( 1 ); - for ( i = num_erb - 1; i >= 0; i-- ) - { - LOGIC( 1 ); - if ( pslot[i] != 0 ) - { - MOVE( 1 ); - tmp = t_prev_erb[i]; - } - else - { - MOVE( 1 ); - t_prev_erb[i] = tmp; - } - } - } - - LOOP( 1 ); - for ( i = 1; i < 11; i++ ) - { - LOGIC( 1 ); - if ( cslot[i] != 0 ) - { - MOVE( 1 ); - ADD( 1 ); - curr_erb[i] = (float) ( AmpCB1[index[0]][i - 1] + t_prev_erb[i] ); - MOVE( 1 ); - curr_erb[i] = max( 0.0f, curr_erb[i] ); - } - else - { - MOVE( 1 ); - curr_erb[i] = 0.0; - } - } - LOOP( 1 ); - for ( i = 11; i < ( num_erb - 2 ); i++ ) - { - LOGIC( 1 ); - if ( cslot[i] != 0 ) - { - MOVE( 1 ); - if ( num_erb == NUM_ERB_NB ) - { - ADD( 1 ); - curr_erb[i] = (float) ( AmpCB2_NB[index[1]][i - 11] + t_prev_erb[i] ); - MOVE( 1 ); - curr_erb[i] = max( 0.0f, curr_erb[i] ); - } - else if ( num_erb == NUM_ERB_WB ) - { - ADD( 1 ); - curr_erb[i] = (float) ( AmpCB2_WB[index[1]][i - 11] + t_prev_erb[i] ); - MOVE( 1 ); - curr_erb[i] = max( 0.0f, curr_erb[i] ); - } - } - else - { - MOVE( 1 ); - curr_erb[i] = 0.0f; - } - } -#undef WMC_TOOL_SKIP - - return; -} - - -/*-------------------------------------------------------------------* - * WIsyn() - * - * Synthesis using waveform interpolation - *-------------------------------------------------------------------*/ - -ivas_error WIsyn( - DTFS_STRUCTURE PREVCW, /* i : Prev frame DTFS */ - DTFS_STRUCTURE *CURRCW_DTFS_out, /* i/o: Curr frame DTFS */ - const float *curr_lpc, /* i : LPC */ - float *ph_offset, /* i/o: Phase offset to line up at end of frame */ - float *out, /* o : Waveform Interpolated time domain signal */ - const int16_t N, /* i : Number of output samples to generate */ - const int16_t FR_flag /* i : called for post-smoothing in FR */ -) -{ - DTFS_STRUCTURE *CURRCW_DTFS; - uint16_t I = 1, flag = 0; - float alignment, tmp, *phase; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( phase = (float *) malloc( N * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for WI structure\n" ) ); - } - - if ( ( error = DTFS_new( &CURRCW_DTFS ) ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( error, "Error creating new DTFS structure\n" ); - } - -#define WMC_TOOL_SKIP - FUNC( 2 ); - DTFS_copy( CURRCW_DTFS, *CURRCW_DTFS_out ); - - /* Calculating the expected alignment shift */ - MOVE( 1 ); - MULT( 2 ); - INDIRECT( 1 ); - INDIRECT( 1 ); - alignment = (float) ( *ph_offset / PI2 * PREVCW.lag ); - LOGIC( 1 ); - if ( flag == 1 ) - { - MULT( 1 ); - alignment *= I; - } - /* Calculating the expected alignment shift */ - MOVE( 1 ); - DIV( 1 ); - ADD( 2 ); - DIV( 1 ); - tmp = (float) fmod( ( N % ( ( PREVCW.lag + CURRCW_DTFS->lag ) >> 1 ) + alignment ), CURRCW_DTFS->lag ); - - /* Compute the alignment shift */ - if ( FR_flag == 0 ) - { - FUNC( 5 ); - MOVE( 1 ); - alignment = DTFS_alignment_weight( PREVCW, *CURRCW_DTFS, tmp, curr_lpc, curr_lpc ); - } - else /* FR case */ - { - FUNC( 5 ); - MOVE( 1 ); - alignment = DTFS_alignment_full( PREVCW, *CURRCW_DTFS, CURRCW_DTFS->lag * 2 ); - } - - MOVE( 1 ); - MULT( 2 ); - tmp = (float) ( PI2 * alignment / CURRCW_DTFS->lag ); - FUNC( 2 ); - DTFS_phaseShift( CURRCW_DTFS, tmp ); - FUNC( 2 ); - MULT( 2 ); - DTFS_phaseShift( CURRCW_DTFS_out, (float) ( PI2 * alignment / CURRCW_DTFS->lag ) ); - - /* Compute the cubic phase track and transform to 1-D signal */ - FUNC( 6 ); - cubicPhase( *ph_offset, tmp, (float) PREVCW.lag, (float) CURRCW_DTFS->lag, N, phase ); - - if ( FR_flag == 0 ) - { - FUNC( 6 ); - DTFS_transform( PREVCW, *CURRCW_DTFS, phase, out, N, 0 ); - } - else - { - FUNC( 6 ); - DTFS_transform( PREVCW, *CURRCW_DTFS, phase, out, N, 1 ); - } - - /* Adjust the phase offset and wrap it between 0 and 2pi */ - LOGIC( 1 ); - if ( flag == 2 ) - { - MULT( 1 ); - tmp *= I; - } - MOVE( 1 ); - DIV( 1 ); - *ph_offset = (float) fmod( (double) ( tmp ), PI2 ); -#undef WMC_TOOL_SKIP - - free( phase ); - free( CURRCW_DTFS ); - - return error; -} -#endif diff --git a/lib_com/window.c b/lib_com/window.c index 79e0f9160..ca01f8f20 100644 --- a/lib_com/window.c +++ b/lib_com/window.c @@ -41,38 +41,5 @@ #define WMC_TOOL_SKIP -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * ham_cos_window_flt() - * - * - *-------------------------------------------------------------------*/ -void ham_cos_window_flt( - float *fh, - const int16_t n1, - const int16_t n2 ) -{ - float cc, cte; - int16_t i; - - cte = PI2 / (float) ( 2 * n1 - 1 ); - cc = 0.0f; - for ( i = 0; i < n1; i++ ) - { - *fh++ = 0.54f - 0.46f * (float) cos( cc ); - cc += cte; - } - - cte = PI2 / (float) ( 4 * n2 - 1 ); - cc = 0.0f; - for ( i = 0; i < n2; i++ ) - { - *fh++ = (float) cos( cc ); - cc += cte; - } - - return; -} -#endif #undef WMC_TOOL_SKIP diff --git a/lib_com/window_ola.c b/lib_com/window_ola.c index c237e423b..d441f6ead 100644 --- a/lib_com/window_ola.c +++ b/lib_com/window_ola.c @@ -41,566 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * window_ola() - * - * Windowing, Overlap and Add - *--------------------------------------------------------------------------*/ - - -void window_ola( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, /* i/o: audio from previous frame */ - const int16_t L, /* i : length */ - const int16_t right_mode, - const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ - const int16_t use_bfi_win, /* i : use BFI windowing */ - const int16_t oldHqVoicing, /* i : previous HqVoicing */ - float *oldgapsynth /* i : previous gapsynth */ -) -{ - int16_t i, decimate, decay; - int16_t n, n16, windecay48, windecay16; - float win_right[R2_48]; - float win_int_left[R1_16]; - float win_left[R1_48]; - float win_int_right[R2_16]; - - - float SS2[L_FRAME48k - NS2SA( 48000, N_ZERO_MDCT_NS )]; - float wret2[L_FRAME48k - NS2SA( 48000, N_ZERO_MDCT_NS )]; - - float *paout; - - - n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - n16 = (int16_t) ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; - windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; - decimate = 1; - decay = 0; - - tcx_get_windows_mode1_flt( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); - - if ( L == L_FRAME32k || L == L_FRAME16k ) - { - decimate = 3; - decay = 1; - } - else if ( L == L_FRAME8k ) - { - decimate = 6; - decay = 2; - } - - else if ( L == 512 ) - { - windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; - decimate = 1; - decay = 0; - } - else if ( L == 256 ) - { - windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; - decimate = 2; - decay = 0; - } - - paout = auOut - n; - - if ( use_bfi_win ) - { - if ( L == L_FRAME32k ) - { - for ( i = 0; i < L / 2; i += 2 ) - { - wret2[L / 2 - n + i + 1] = win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; - wret2[L / 2 - n + i] = win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; - } - - for ( i = n; i < L / 2; i += 2 ) - { - wret2[i - n] = win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; - wret2[i + 1 - n] = win_int_left[L_FRAME16k - ( i / 2 ) - 1]; - } - } - else - { - for ( i = 0; i < L / 2; i++ ) - { - wret2[i + L / 2 - n] = win_left[( L / 2 - i - 1 ) * decimate + decay]; - } - - for ( i = n; i < L / 2; i++ ) - { - wret2[i - n] = win_left[( L - i ) * decimate - decay - 1]; - } - } - sinq( EVS_PI / ( 2 * ( L - n ) ), EVS_PI / ( 4 * ( L - n ) ), L - n, SS2 ); - - for ( i = n; i < L / 2; i++ ) - { - paout[i] = ImdctOut[L / 2 + i]; - } - - for ( i = 0; i < L / 2; i++ ) - { - paout[L / 2 + i] = -ImdctOut[L - 1 - i]; - } - - if ( oldHqVoicing ) - { - for ( i = 0; i < L - n; i++ ) - { - auOut[i] = auOut[i] * SS2[i] + oldgapsynth[i + n] * ( SS2[L - n - i - 1] ); - } - } - else - { - for ( i = 0; i < L - n; i++ ) - { - auOut[i] = auOut[i] * SS2[i] + OldauOut[i + n] * ( SS2[L - n - i - 1] ) / ( wret2[i] + 0.01f ); - } - } - } - - if ( L == L_FRAME32k ) - { - if ( use_bfi_win == 0 ) - { - for ( i = n; i < L / 2; i += 2 ) - { - paout[i] = ImdctOut[L / 2 + i] * win_right[( 2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) ) * decimate - 1 - decay - windecay48] + OldauOut[i]; - paout[i + 1] = ImdctOut[L / 2 + i + 1] * win_int_right[2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) - 1 - windecay16] + OldauOut[i + 1]; - } - - for ( i = 0; i < L / 2 - n; i += 2 ) - { - paout[L / 2 + i + 1] = -ImdctOut[L - 1 - ( i + 1 )] * win_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - windecay48] + OldauOut[i + L / 2 + 1]; - paout[L / 2 + i] = -ImdctOut[L - 1 - i] * win_int_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - windecay16] + OldauOut[i + L / 2]; - } - - for ( i = L / 2 - n; i < L / 2; i += 2 ) - { - paout[L / 2 + i + 1] = -ImdctOut[L - 1 - ( i + 1 )] + OldauOut[i + L / 2 + 1]; - paout[L / 2 + i] = -ImdctOut[L - 1 - i] + OldauOut[i + L / 2]; - } - } - - for ( i = 0; i < L / 2; i += 2 ) - { - OldauOut[L / 2 + i + 1] = -ImdctOut[i + 1] * win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; - OldauOut[L / 2 + i] = -ImdctOut[i] * win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; - } - - - for ( i = n; i < L / 2; i += 2 ) - { - OldauOut[i] = -ImdctOut[L / 2 - 1 - i] * win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; - OldauOut[i + 1] = -ImdctOut[L / 2 - 1 - ( i + 1 )] * win_int_left[L_FRAME16k - ( i / 2 ) - 1]; - } - } - else - { - if ( use_bfi_win == 0 ) - { - - for ( i = n; i < L / 2; i++ ) - { - paout[i] = ImdctOut[L / 2 + i] * win_right[( 2 * L - i ) * decimate - 1 - decay - windecay48] + OldauOut[i]; - } - - for ( i = 0; i < L / 2 - n; i++ ) - { - paout[L / 2 + i] = -ImdctOut[L - 1 - i] * win_right[( 3 * L / 2 - 1 - i ) * decimate + decay - windecay48] + OldauOut[i + L / 2]; - } - - for ( i = L / 2 - n; i < L / 2; i++ ) - { - paout[L / 2 + i] = -ImdctOut[L - 1 - i] + OldauOut[i + L / 2]; - } - } - - for ( i = 0; i < L / 2; i++ ) - { - OldauOut[L / 2 + i] = -ImdctOut[i] * win_left[( L / 2 - i - 1 ) * decimate + decay]; - } - - - for ( i = n; i < L / 2; i++ ) - { - OldauOut[i] = -ImdctOut[L / 2 - 1 - i] * win_left[( L - i ) * decimate - decay - 1]; - } - } - - for ( i = 0; i < n; i++ ) - { - OldauOut[i] = -ImdctOut[L / 2 - 1 - i]; - } - for ( i = 0; i < n; i++ ) - { - paout[L + i] = OldauOut[i]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * window_ola_ext() - * - * - *-------------------------------------------------------------------*/ - -void window_ola_ext( - const float *ImdstOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, /* i/o: audio from previous frame */ - const int16_t L, /* i : length */ - const int16_t right_mode, - const int16_t left_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ - const uint16_t kernel_type /* i : transform kernel type */ -) -{ - const float sign_left = ( kernel_type & 1 ? 1.f : -1.f ); - const float sign_right = ( kernel_type >= MDCT_II ? -1.f : 1.f ); - int16_t i, decimate, decay; - int16_t n, n16, windecay48, windecay16; - float win_right[R2_48]; - float win_int_left[R1_16]; - float win_left[R1_48]; - float win_int_right[R2_16]; - float *paout; - - n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - n16 = (int16_t) ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; - windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; - decimate = 1; - decay = 0; - - tcx_get_windows_mode1_flt( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); - - if ( L == L_FRAME32k || L == L_FRAME16k ) - { - decimate = 3; - decay = 1; - } - else if ( L == L_FRAME8k ) - { - decimate = 6; - decay = 2; - } - - else if ( L == 512 ) - { - windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; - decimate = 1; - decay = 0; - } - else if ( L == 256 ) - { - windecay48 = (int16_t) ( 2 * ( (float) 512 * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_25; - decimate = 2; - decay = 0; - } - - paout = auOut - n; - - if ( L == L_FRAME32k ) - { - for ( i = n; i < L / 2; i += 2 ) - { - paout[i] = sign_right * ImdstOut[L / 2 + i] * win_right[( 2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) ) * decimate - 1 - decay - windecay48] + OldauOut[i]; - paout[i + 1] = sign_right * ImdstOut[L / 2 + i + 1] * win_int_right[2 * L_FRAME16k - ( n16 + ( i - n ) / 2 ) - 1 - windecay16] + OldauOut[i + 1]; - } - - for ( i = 0; i < L / 2 - n; i += 2 ) - { - paout[L / 2 + i + 1] = -ImdstOut[L - 1 - ( i + 1 )] * win_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - windecay48] + OldauOut[i + L / 2 + 1]; - paout[L / 2 + i] = -ImdstOut[L - 1 - i] * win_int_right[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - windecay16] + OldauOut[i + L / 2]; - } - - for ( i = L / 2 - n; i < L / 2; i += 2 ) - { - paout[L / 2 + i + 1] = -ImdstOut[L - 1 - ( i + 1 )] + OldauOut[i + L / 2 + 1]; - paout[L / 2 + i] = -ImdstOut[L - 1 - i] + OldauOut[i + L / 2]; - } - - for ( i = 0; i < L / 2; i += 2 ) - { - OldauOut[L / 2 + i + 1] = sign_left * ImdstOut[i + 1] * win_left[( L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay]; - OldauOut[L / 2 + i] = sign_left * ImdstOut[i] * win_int_left[( L_FRAME16k / 2 - i / 2 - 1 )]; - } - - - for ( i = n; i < L / 2; i += 2 ) - { - OldauOut[i] = -ImdstOut[L / 2 - 1 - i] * win_left[( L_FRAME16k - i / 2 ) * decimate - decay - 1]; - OldauOut[i + 1] = -ImdstOut[L / 2 - 1 - ( i + 1 )] * win_int_left[L_FRAME16k - ( i / 2 ) - 1]; - } - } - else - { - for ( i = n; i < L / 2; i++ ) - { - paout[i] = sign_right * ImdstOut[L / 2 + i] * win_right[( 2 * L - i ) * decimate - 1 - decay - windecay48] + OldauOut[i]; - } - - for ( i = 0; i < L / 2 - n; i++ ) - { - paout[L / 2 + i] = -ImdstOut[L - 1 - i] * win_right[( 3 * L / 2 - 1 - i ) * decimate + decay - windecay48] + OldauOut[i + L / 2]; - } - - for ( i = L / 2 - n; i < L / 2; i++ ) - { - paout[L / 2 + i] = -ImdstOut[L - 1 - i] + OldauOut[i + L / 2]; - } - - for ( i = 0; i < L / 2; i++ ) - { - OldauOut[L / 2 + i] = sign_left * ImdstOut[i] * win_left[( L / 2 - i - 1 ) * decimate + decay]; - } - - - for ( i = n; i < L / 2; i++ ) - { - OldauOut[i] = -ImdstOut[L / 2 - 1 - i] * win_left[( L - i ) * decimate - decay - 1]; - } - } - - for ( i = 0; i < n; i++ ) - { - OldauOut[i] = -ImdstOut[L / 2 - 1 - i]; - } - for ( i = 0; i < n; i++ ) - { - paout[L + i] = OldauOut[i]; - } - - return; -} - - -/*---------------------------------------------------------------------* - * core_switching_OLA() - * - * modify window after HQ core decoding - * Overlap ACELP and HQ - *---------------------------------------------------------------------*/ - -void core_switching_OLA( - const float *mem_over_hp, /* i : upsampling filter memory */ - const int16_t last_L_frame, /* i : last L_frame lengthture */ - const int32_t output_Fs, /* i : output sampling rate */ - float *synth, /* i/o: synthesized signal from HQ core */ - const float *synth_subfr_out, /* i : synthesized signal from ACELP core */ - float *synth_subfr_bwe, /* i : synthesized BWE from ACELP core */ - const int16_t output_frame, /* i : output frame length */ - const int16_t bwidth /* i : output bandwidth */ -) -{ - int16_t i, L, Loverlapp, out_filt_length, filt_delay, decimate, decay; - float tmp_buf_switch[SWITCH_MAX_GAP], tmp_buf_switch2[HQ_DELAY_COMP * HQ_DELTA_MAX + 2]; - float delta; - const float *win, *win_int; - - win = window_48kHz; - win_int = window_8_16_32kHz; - decimate = 1; - decay = 0; - - if ( output_frame == L_FRAME32k || output_frame == L_FRAME16k ) - { - decimate = 3; - decay = 1; - } - else if ( output_frame == L_FRAME8k ) - { - decimate = 6; - decay = 2; - } - - /* set multiplication factor according to the sampling rate */ - delta = 1; - if ( output_frame == L_FRAME16k ) - { - delta = 2; - } - else if ( output_frame == L_FRAME32k ) - { - delta = 4; - } - else if ( output_frame == L_FRAME48k ) - { - delta = 6; - } - - set_f( tmp_buf_switch, 0, SWITCH_MAX_GAP ); - set_f( tmp_buf_switch2, 0, HQ_DELAY_COMP * HQ_DELTA_MAX + 2 ); - - Loverlapp = (int16_t) ( delta * SWITCH_OVERLAP_8k ); - - mvr2r( synth_subfr_out, tmp_buf_switch, NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) ); /* copy 6.25 ms subframe */ - - /* conversion from 12.8kHz to output_Fs */ - if ( last_L_frame == L_FRAME ) - { - /* resample filter memory */ - if ( output_frame == L_FRAME8k ) - { - mvr2r( synth_subfr_out + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); /* copy subframe to tmp buffer */ - } - else - { - out_filt_length = modify_Fs_intcub3m_sup( mem_over_hp + 2, NS2SA( 12800, DELAY_CLDFB_NS ), 12800, tmp_buf_switch2, output_Fs, &filt_delay ); - - for ( i = 0; i < filt_delay; i++ ) - { - tmp_buf_switch2[out_filt_length + i - filt_delay] = tmp_buf_switch2[out_filt_length - 1 - filt_delay]; - } - - if ( ( bwidth == NB && output_Fs >= 16000 ) || ( bwidth > NB && output_Fs > 16000 ) ) - { - /* mix cubic and CLDFB resampled buffers in case of resampling to higher frequency rates */ - for ( i = 0; i < out_filt_length; i++ ) - { - float a = (float) i / out_filt_length; - float b = 1.f - a; - - tmp_buf_switch[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i] = a * tmp_buf_switch2[i] + b * synth_subfr_out[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i]; - } - } - else - { - /* copy cubic resampled buffer (memory) */ - mvr2r( tmp_buf_switch2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), out_filt_length ); - } - } - } - else - { - if ( output_frame == L_FRAME16k ) - { - /* no resampling */ - mvr2r( mem_over_hp + 2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); - } - else - { - if ( output_frame == L_FRAME8k ) - { - mvr2r( synth_subfr_out + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), NS2SA( output_Fs, DELAY_CLDFB_NS ) ); /* copy subframe to tmp buffer */ - } - else - { - /* resample filter memory */ - out_filt_length = modify_Fs_intcub3m_sup( mem_over_hp + 2, NS2SA( 16000, DELAY_CLDFB_NS ), 16000, tmp_buf_switch2, output_Fs, &filt_delay ); - - for ( i = 0; i < filt_delay; i++ ) - { - tmp_buf_switch2[out_filt_length + i - filt_delay] = tmp_buf_switch2[out_filt_length - 1 - filt_delay]; - } - - if ( ( bwidth == NB && output_Fs >= 16000 ) || ( bwidth > NB && output_Fs > 16000 ) ) - { - /* mix cubic and CLDFB resampled buffers in case of resampling to higher frequency rates */ - for ( i = 0; i < out_filt_length; i++ ) - { - float a = (float) i / out_filt_length; - float b = 1.f - a; - - tmp_buf_switch[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i] = a * tmp_buf_switch2[i] + b * synth_subfr_out[NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ) + i]; - } - } - else - { - /* copy cubic resampled buffer (memory) */ - mvr2r( tmp_buf_switch2, tmp_buf_switch + NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS ), out_filt_length ); - } - } - } - } - - /* Windowing for overlapadd */ - L = NS2SA( output_Fs, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ); /* 6.25 ms gap + 1.25 ms resamp */ - - set_f( synth, 0, L - Loverlapp ); - - if ( output_frame == L_FRAME32k ) - { - for ( i = 0; i < NS2SA( output_Fs, 10000000.0f - N_ZERO_MDCT_NS ); i += 2 ) - { - synth[L - Loverlapp + i] /= win[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) * decimate + decay - (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; - synth[L - Loverlapp + i + 1] /= win_int[( 3 * L_FRAME16k / 2 - 1 - i / 2 ) - (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; - } - } - else - { - for ( i = 0; i < NS2SA( output_Fs, 10000000.0f - N_ZERO_MDCT_NS ); i++ ) - { - synth[L - Loverlapp + i] /= win[( 3 * output_frame / 2 - 1 - i ) * decimate + decay - (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) )]; - } - } - - - for ( i = 0; i < Loverlapp; i++ ) /* Windowing for overlapadd */ - { - synth[i + (int16_t) ( L - Loverlapp )] *= (float) sin( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); - synth_subfr_bwe[i + (int16_t) ( L - Loverlapp ) - NS2SA( output_Fs, DELAY_CLDFB_NS )] *= (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ) * (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); - tmp_buf_switch[i + (int16_t) ( L - Loverlapp )] *= (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ) * (float) cos( ( i + 1 ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); - } - - /* overlap-add ACELP (tmp_buf_switch) + HQ (synth) */ - for ( i = 0; i < NS2SA( output_Fs, DELAY_CLDFB_NS ); i++ ) - { - synth[i] += tmp_buf_switch[i]; - } - for ( i = NS2SA( output_Fs, DELAY_CLDFB_NS ); i < L; i++ ) - { - synth[i] += tmp_buf_switch[i] + synth_subfr_bwe[i - NS2SA( output_Fs, DELAY_CLDFB_NS )]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * sinq() - * - * Fast sinus generate sin(tmp*i+phi) - *-------------------------------------------------------------------*/ - -void sinq( - const float tmp, /* i : sinus factor cos(tmp*i+phi) */ - const float phi, /* i : sinus phase cos(tmp*i+phi) */ - const int16_t N, /* i : size of output */ - float x[] /* o : output vector */ -) -{ - float A; - int16_t i; - - x[0] = (float) sin( phi ); - x[1] = (float) sin( tmp + phi ); - x[2] = (float) sin( 2 * tmp + phi ); - - if ( fabs( (float) ( tmp ) ) > 0.0001f ) - { - A = ( x[2] + x[0] ) / x[1]; - } - else - { - A = 0; - } - - for ( i = 3; i < N; i++ ) - { - x[i] = A * x[i - 1] - x[i - 2]; - } - - return; -} -#endif diff --git a/lib_com/wtda.c b/lib_com/wtda.c index 3755ebe1b..6bce31db9 100644 --- a/lib_com/wtda.c +++ b/lib_com/wtda.c @@ -41,319 +41,8 @@ #include "rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * mvr2r_inv() - * - * - *--------------------------------------------------------------------------*/ - -static void mvr2r_inv( - const float *in, /* i : input vector */ - float *out, /* o : output vector */ - const int16_t L, /* i : length */ - const int16_t decimate /* i : decimation flag [-1,1] */ -) -{ - int16_t i; - - in = in + (int16_t) ( ( decimate - 1 ) / 2 ); - out = out + L - 1; - - for ( i = 0; i < L; i++ ) - { - *out = *in; - in += decimate; - out--; - } - - return; -} - -/*--------------------------------------------------------------------------* - * mvr2r_dec() - * - * - *--------------------------------------------------------------------------*/ - -static void mvr2r_dec( - const float *in, /* i : input vector */ - float *out, /* o : output vector */ - int16_t L, /* i : length */ - int16_t decimate /* i : decimation flag [-1,1] */ -) -{ - int16_t i; - in = in + (int16_t) ( ( decimate - 1 ) / 2 ); - for ( i = 0; i < L; i++ ) - { - *out = *in; - in += decimate; - out++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * copy_win() - * - * - *--------------------------------------------------------------------------*/ - -static void copy_win( - float *out_win, /* o : output window buffer */ - const int16_t nb_zero, /* i : length of zero padding */ - const float *in_win, /* i : input window */ - const int16_t win_lenght, /* i : length */ - const int16_t nb_one, /* i : length of flat section (ones) */ - const int16_t decimate /* i : input window */ -) -{ - if ( decimate < 0 ) - { - set_f( out_win, 1, nb_one ); - mvr2r_inv( in_win, out_win + nb_one, win_lenght, -decimate ); - set_f( out_win + win_lenght + nb_one, 0, nb_zero ); - } - else - { - set_f( out_win, 0, nb_zero ); - mvr2r_dec( in_win, out_win + nb_zero, win_lenght, decimate ); - set_f( out_win + nb_zero + win_lenght, 1, nb_one ); - } - - return; -} - -/*--------------------------------------------------------------------------* - * tcx_get_windows_mode1_flt() - * - * - *--------------------------------------------------------------------------*/ - -void tcx_get_windows_mode1_flt( - const int16_t left_mode, /* i : overlap mode of left window half */ - const int16_t right_mode, /* i : overlap mode of right window half */ - float *left_win, /* o : left overlap window */ - float *right_win, /* o : right overlap window */ - float *left_win_int, /* o : left overlap window */ - float *right_win_int, /* o : right overlap window */ - const int16_t L /* i : length */ -) -{ - /* Left part */ - if ( left_mode == MIN_OVERLAP || left_mode == TRANSITION_OVERLAP ) - { - if ( L == 256 || L == 512 ) - { - copy_win( left_win, R1_25 - 4 * R2_25 / 7, small_overlap_25_flt, R2_25 / 7, 3 * R2_25 / 7, 1 ); - } - else - { - copy_win( left_win, R1_48 - 4 * R2_48 / 7, small_overlap_48_flt, R2_48 / 7, 3 * R2_48 / 7, 1 ); - copy_win( left_win_int, R1_16 - 4 * R2_16 / 7, small_overlap_int_flt, R2_16 / 7, 3 * R2_16 / 7, 1 ); - } - } - else if ( left_mode == HALF_OVERLAP ) - { - if ( L == 256 || L == 512 ) - { - copy_win( left_win, R1_25 - 5 * R2_25 / 7, half_overlap_25_flt, 3 * R2_25 / 7, 2 * R2_25 / 7, 1 ); - } - else - { - copy_win( left_win, R1_48 - 5 * R2_48 / 7, half_overlap_48_flt, 3 * R2_48 / 7, 2 * R2_48 / 7, 1 ); - copy_win( left_win_int, R1_16 - 5 * R2_16 / 7, half_overlap_int_flt, 3 * R2_16 / 7, 2 * R2_16 / 7, 1 ); - } - } - else if ( left_mode == ALDO_WINDOW ) - { - /* ALDO */ - if ( L == 256 || L == 512 ) - { - mvr2r( window_256kHz_flt, left_win, R1_25 ); - } - else - { - mvr2r( window_48kHz, left_win, R1_48 ); - mvr2r( window_8_16_32kHz, left_win_int, R1_16 ); - } - } - else - { - assert( !"Window not supported" ); - } - - /* Right part */ - if ( right_mode == MIN_OVERLAP || right_mode == TRANSITION_OVERLAP ) - { - - if ( L == 256 || L == 512 ) - { - copy_win( right_win, 3 * R2_25 / 7, small_overlap_25_flt, R2_25 / 7, 3 * R2_25 / 7, -1 ); - } - else - { - copy_win( right_win, 3 * R2_48 / 7, small_overlap_48_flt, R2_48 / 7, 3 * R2_48 / 7, -1 ); - copy_win( right_win_int, 3 * R2_16 / 7, small_overlap_int_flt, R2_16 / 7, 3 * R2_16 / 7, -1 ); - } - } - else if ( right_mode == HALF_OVERLAP ) - { - - if ( L == 256 || L == 512 ) - { - copy_win( right_win, 2 * R2_25 / 7, half_overlap_25_flt, 3 * R2_25 / 7, 2 * R2_25 / 7, -1 ); - } - else - { - copy_win( right_win, 2 * R2_48 / 7, half_overlap_48_flt, 3 * R2_48 / 7, 2 * R2_48 / 7, -1 ); - copy_win( right_win_int, 2 * R2_16 / 7, half_overlap_int_flt, 3 * R2_16 / 7, 2 * R2_16 / 7, -1 ); - } - } - else if ( right_mode == ALDO_WINDOW ) - { - if ( L == 256 || L == 512 ) - { - mvr2r( window_256kHz_flt + R1_25, right_win, R2_25 ); - } - else - { - mvr2r( window_48kHz + R1_48, right_win, R2_48 ); - mvr2r( window_8_16_32kHz + R1_16, right_win_int, R2_16 ); - } - } - else - { - assert( !"Window not supported" ); - } - - return; -} - - -/*--------------------------------------------------------------------------* - * wtda() - * - * Windowing and time-domain aliasing - *--------------------------------------------------------------------------*/ - -void wtda( - const float *new_audio, /* i : input audio */ - float *wtda_audio, /* o : windowed audio */ - float *old_wtda, /* i/o: windowed audio from previous frame */ - const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ - const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ - const int16_t L /* i : length */ -) -{ - int16_t i, decimate, decay; - int16_t n, windecay48, windecay16; - const float *allsig_l, *allsig_r; - float win_right[R2_48]; - float win_int_left[R1_16]; - float win_left[R1_48]; - float win_int_right[R2_16]; - - tcx_get_windows_mode1_flt( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); - - decimate = 1; /* L_FRAME 48k */ - decay = 0; - windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; - - if ( L == L_FRAME32k || L == L_FRAME16k ) - { - decimate = 3; - decay = 1; - } - else if ( L == L_FRAME8k ) - { - decimate = 6; - decay = 2; - } - - n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; - - /* algorithmic delay reduction */ - i = 0; - - if ( old_wtda == NULL ) - { - allsig_r = new_audio + n; - allsig_l = new_audio + n - L; - } - else - { - allsig_r = new_audio + n; - allsig_l = old_wtda + n; - } - - if ( L == L_FRAME32k ) - { - for ( i = 0; i < L / 2 - n; i += 2 ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_int_right[3 * L_FRAME16k / 2 - i / 2 - 1 - windecay16] - allsig_r[L / 2 + i] * win_int_right[3 * L_FRAME16k / 2 + i / 2 - windecay16]; - wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1] * win_right[( 3 * L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay - windecay48] - allsig_r[L / 2 + i + 1] * win_right[( 3 * L_FRAME16k / 2 + 1 + i / 2 ) * decimate - decay - 1 - windecay48]; - } - - for ( i = L / 2 - n; i < L / 2; i += 2 ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1]; - wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1]; - } - for ( i = 0; i < n; i += 2 ) - { - wtda_audio[i + L / 2] = allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - new_audio[n - i - 1]; - wtda_audio[i + L / 2 + 1] = allsig_l[i + 1] * win_int_left[i / 2] - new_audio[n - ( i + 1 ) - 1]; - } - - for ( i = n; i < L / 2; i += 2 ) - { - wtda_audio[i + L / 2] = allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - allsig_l[L - i - 1] * win_left[( L / 2 - i / 2 ) * decimate - 1 - decay]; - wtda_audio[i + L / 2 + 1] = allsig_l[i + 1] * win_int_left[i / 2] - allsig_l[L - ( i + 1 ) - 1] * win_int_left[L / 2 - i / 2 - 1]; - } - } - else - { - for ( i = 0; i < L / 2 - n; i++ ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_right[3 * L / 2 * decimate - ( i + 1 ) * decimate + decay - windecay48] - allsig_r[L / 2 + i] * win_right[3 * L / 2 * decimate - 1 + ( i + 1 ) * decimate - decay - windecay48]; - } - - for ( i = L / 2 - n; i < L / 2; i++ ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1]; - } - - for ( i = 0; i < n; i++ ) - { - wtda_audio[i + L / 2] = allsig_l[i] * win_left[i * decimate + decay] - new_audio[n - i - 1]; - } - - for ( i = n; i < L / 2; i++ ) - { - wtda_audio[i + L / 2] = allsig_l[i] * win_left[i * decimate + decay] - allsig_l[L - i - 1] * win_left[L * decimate - i * decimate - 1 - decay]; - } - } - - if ( old_wtda != NULL ) - { - mvr2r( new_audio, old_wtda, L ); - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED void wtda_fx32( const Word32 *new_audio, /* i : input audio Q11 */ @@ -529,101 +218,3 @@ void wtda_fx32( return; } - -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -void wtda_ext( - const float *new_audio, /* i : input audio */ - float *wtda_audio, /* o : windowed audio */ - const int16_t left_mode, /* i : window overlap of previous frame (0: full, 2: none, or 3: half) */ - const int16_t right_mode, /* i : window overlap of current frame (0: full, 2: none, or 3: half) */ - const int16_t L, /* i : length */ - const uint16_t kernel_type /* i : transform kernel type (0 - 3) */ -) -{ - const float sign_left = ( kernel_type >= 2 ? -1.f : 1.f ); - const float sign_right = ( kernel_type & 1 ? 1.f : -1.f ); - int16_t i, decimate, decay; - int16_t n, windecay48, windecay16; - const float *allsig_l, *allsig_r; - float win_right[R2_48]; - float win_int_left[R1_16]; - float win_left[R1_48]; - float win_int_right[R2_16]; - - tcx_get_windows_mode1_flt( left_mode, right_mode, win_left, win_right, win_int_left, win_int_right, L ); - - decimate = 1; /* L_FRAME 48k */ - decay = 0; - windecay48 = (int16_t) ( 2 * ( (float) L_FRAME48k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_48; - - if ( L == L_FRAME32k || L == L_FRAME16k ) - { - decimate = 3; - decay = 1; - } - else if ( L == L_FRAME8k ) - { - decimate = 6; - decay = 2; - } - - n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - windecay16 = (int16_t) ( 2 * ( (float) L_FRAME16k * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) ) + R1_16; - - allsig_r = new_audio + n; - allsig_l = new_audio + n - L; - - if ( L == L_FRAME32k ) - { - for ( i = 0; i < L / 2 - n; i += 2 ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_int_right[3 * L_FRAME16k / 2 - i / 2 - 1 - windecay16] + sign_right * allsig_r[L / 2 + i] * win_int_right[3 * L_FRAME16k / 2 + i / 2 - windecay16]; - wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1] * win_right[( 3 * L_FRAME16k / 2 - i / 2 - 1 ) * decimate + decay - windecay48] + sign_right * allsig_r[L / 2 + i + 1] * win_right[( 3 * L_FRAME16k / 2 + 1 + i / 2 ) * decimate - decay - 1 - windecay48]; - } - - for ( i = L / 2 - n; i < L / 2; i += 2 ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1]; - wtda_audio[i + 1] = -allsig_r[L / 2 - ( i + 1 ) - 1]; - } - for ( i = 0; i < n; i += 2 ) - { - wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - new_audio[n - i - 1]; - wtda_audio[i + L / 2 + 1] = sign_left * allsig_l[i + 1] * win_int_left[i / 2] - new_audio[n - ( i + 1 ) - 1]; - } - - for ( i = n; i < L / 2; i += 2 ) - { - wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[( i / 2 ) * decimate + decay] - allsig_l[L - i - 1] * win_left[( L / 2 - i / 2 ) * decimate - 1 - decay]; - wtda_audio[i + L / 2 + 1] = sign_left * allsig_l[i + 1] * win_int_left[i / 2] - allsig_l[L - ( i + 1 ) - 1] * win_int_left[L / 2 - i / 2 - 1]; - } - } - else - { - for ( i = 0; i < L / 2 - n; i++ ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1] * win_right[3 * L / 2 * decimate - ( i + 1 ) * decimate + decay - windecay48] + sign_right * allsig_r[L / 2 + i] * win_right[3 * L / 2 * decimate - 1 + ( i + 1 ) * decimate - decay - windecay48]; - } - - for ( i = L / 2 - n; i < L / 2; i++ ) - { - wtda_audio[i] = -allsig_r[L / 2 - i - 1]; - } - - for ( i = 0; i < n; i++ ) - { - wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[i * decimate + decay] - new_audio[n - i - 1]; - } - - for ( i = n; i < L / 2; i++ ) - { - wtda_audio[i + L / 2] = sign_left * allsig_l[i] * win_left[i * decimate + decay] - allsig_l[L - i - 1] * win_left[L * decimate - i * decimate - 1 - decay]; - } - } - - return; -} -#endif diff --git a/lib_com/wtda_fx.c b/lib_com/wtda_fx.c index 1806638bb..5f35a3c29 100644 --- a/lib_com/wtda_fx.c +++ b/lib_com/wtda_fx.c @@ -413,7 +413,6 @@ void wtda_fx( } -#ifdef IVAS_FLOAT_FIXED void wtda_ivas_fx( Word16 *new_audio, /* i : input audio Q0 */ Word16 *Q, /* i/o : Q of input/Output Audio */ @@ -569,10 +568,8 @@ void wtda_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void wtda_ext_fx( const Word16 *new_audio, /* i : input audio (Q_in) */ Word16 *wtda_audio, /* o : windowed audio (Q_in) */ @@ -767,4 +764,3 @@ void wtda_ext_fx( return; } -#endif diff --git a/lib_dec/ACcontextMapping_dec.c b/lib_dec/ACcontextMapping_dec.c index 470e11e64..cf5b4a9b7 100644 --- a/lib_dec/ACcontextMapping_dec.c +++ b/lib_dec/ACcontextMapping_dec.c @@ -43,633 +43,3 @@ #include "wmc_auto.h" #include "ivas_prot.h" /* Range coder header file */ #include - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ACcontextMapping_decode2_no_mem_s17_LC_ivas() - * - * Arithmetic decoder - *-------------------------------------------------------------------*/ - -/*! r: resQBits */ -int16_t ACcontextMapping_decode2_no_mem_s17_LC_ivas( - Decoder_State *st, /* i/o: decoder state */ - int16_t *x, /* o : decoded spectrum */ - int16_t nt, /* i : size of spectrum */ - int16_t nbbits, /* i : bit budget */ - int16_t resQMaxBits, /* i : residual coding maximum bits */ - CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration*/ -) -{ - Tastat as; - int16_t start_bit_pos, lsbs_bit_pos, overflow_bit_pos; - int16_t a, b, a1, b1, a1_i, b1_i, k; - uint16_t t; - int16_t lev, pki, esc_nb; - int16_t rateFlag; - int16_t lastnz, n; - uint16_t r; - int16_t resQBits; - int16_t rest_bits, rest_bits_overflow; - int16_t nt_half; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig, numHoleIndices; - int16_t nbbits_m2; - - set_s( x, 0, nt ); - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; - } - else - { - rateFlag = 0; - } - - /*Decode number of ntuples*/ - start_bit_pos = st->next_bit_pos; - lsbs_bit_pos = start_bit_pos + nbbits - 1; - - n = 0; - k = 1; - nt_half = nt >> 1; - - while ( k < nt_half ) - { - ++n; - k = k << 1; - } - n = get_next_indice( st, n ) + 1; - - /* Init */ - c[0] = c[1] = 0; - - t = 0; - - lastnz = n << 1; - - if ( lastnz > nt || st->BER_detect ) - { - st->BER_detect = 1; - return 0; - } - - if ( hm_cfg ) - { - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - } - else - { - /* unmapped domain */ - ii[0] = 0; - p1 = p2 = 0; - } - - /* Start Decoding */ - - ari_start_decoding_14bits_ivas( st, &as ); - overflow_bit_pos = st->next_bit_pos; - - nbbits_m2 = nbbits + cbitsnew - 2; - rest_bits_overflow = rest_bits = -nbbits_m2; - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - if ( hm_cfg ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - } - else - { - a1_i = get_next_coeff_unmapped_ivas( ii, &idx1 ); - b1_i = get_next_coeff_unmapped_ivas( ii, &idx2 ); - } - - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - esc_nb = 0; - r = 0; - /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ - if ( ( t >= ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ) ) || lsbs_bit_pos <= 0 ) - { - st->BER_detect = 1; - return 0; - } - - a = b = 0; - /* MSBs decoding */ - for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) - { - esc_nb = min( lev, 3 ); - pki = ari_lookup_s17_LC[t + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - ari_decode_14bits_s17_ext_ivas( st, &r, &as, ari_pk_s17_LC_ext[pki] ); - - if ( r < VAL_ESC ) - { - break; - } - - /* LSBs decoding */ - a += get_indice_1( st, lsbs_bit_pos-- ) << lev; - b += get_indice_1( st, lsbs_bit_pos-- ) << lev; - } - - if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) - { - x[a1_i] = 0; - x[b1_i] = 0; - st->BER_detect = 1; - return 0; - } - - /* MSBs contributions */ - b1 = r >> 2; - a1 = r & 0x3; - a += a1 << lev; - b += b1 << lev; - - /* lsbs bits sign bits */ - rest_bits += 2 * lev; - - rest_bits += min( a, 1 ); - rest_bits += min( b, 1 ); - - /* Dectect overflow */ - - if ( st->next_bit_pos - start_bit_pos + rest_bits > 0 ) - { - /* Roll back bitstream position to overflow_bit_pos */ - get_next_indice_tmp( st, overflow_bit_pos - st->next_bit_pos ); - rest_bits = rest_bits_overflow; - x[a1_i] = 0; - x[b1_i] = 0; - break; - } - - overflow_bit_pos = st->next_bit_pos; - rest_bits_overflow = rest_bits; - - /* Store decoded data */ - x[a1_i] = a; - x[b1_i] = b; - - /* Update context for next 2-tuple */ - if ( p1 == p2 ) - { - /* peak-peak or hole-hole context */ - lev = esc_nb - 1; - - if ( lev <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev + 2 ); - } - else - { - t = 13 + lev; - } - - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else - { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], a ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], b ); - } - } - } - - /* Total number of decoded AC bits */ - get_next_indice_tmp( st, -( cbitsnew - 2 ) ); - - /* detect overflow */ - - if ( k != lastnz ) - { - rest_bits += nbbits_m2; - /* Set bitstream position to (start_bit_pos+nbbits-rest_bits) */ - get_next_indice_tmp( st, ( start_bit_pos + nbbits - rest_bits ) - st->next_bit_pos ); - } - - /* Decode signs */ - if ( hm_cfg ) - { - n = nt; - } - else - { - n = lastnz; - } - - for ( k = 0; k < n; k++ ) - { - if ( x[k] > 0 ) - { - x[k] *= 1 - 2 * get_next_indice_1( st ); - } - } - - /* Decode Residual Q */ - resQBits = min( resQMaxBits, lsbs_bit_pos + 1 - st->next_bit_pos ); - - for ( k = 0; k < resQBits; ++k ) - { - x[nt + k] = get_indice_1( st, lsbs_bit_pos - k ); - } - - /* Set bitstream pointer to end of buffer */ - get_next_indice_tmp( st, ( start_bit_pos + nbbits ) - st->next_bit_pos ); - - - return resQBits; -} - - -/*-------------------------------------------------------------------* - * RCcontextMapping_decode2_no_mem_s17_LCS() - * - * Range decoder - *-------------------------------------------------------------------*/ - -/*! r: resQBits */ - -int16_t RCcontextMapping_decode2_no_mem_s17_LCS( - Decoder_State *st, /* i/o: decoder state */ - int16_t *x, /* o : decoded spectrum */ - const int16_t nt, /* i : size of spectrum */ - const int16_t nbbits, /* i : bit budget */ - const int16_t resQMaxBits, /* i : residual coding maximum bits */ - CONTEXT_HM_CONFIG *hm_cfg /* i : context-based harmonic model configuration*/ -) -{ - RangeUniDecState rc_st_dec; /* State of the range decoder */ - int16_t start_bit_pos, lsbs_bit_pos; - int16_t a, b, a1, b1, k; - uint16_t t; - int16_t lev, pki, esc_nb; - int16_t rateFlag; - int16_t lastnz, n; - uint16_t r; - int16_t resQBits; - int16_t rest_bits; - int16_t nt_half; - int16_t nbbits_m2; - int16_t bits_tups; /* No. of bits for coding the no. of tuples */ - - set_s( x, 0, nt ); - - /*Decode number of ntuples*/ - start_bit_pos = st->next_bit_pos; - lsbs_bit_pos = start_bit_pos + nbbits - 1; - n = 0; - k = 1; - nt_half = nt >> 1; - - while ( k < nt_half ) - { - ++n; - k = k << 1; - } - - bits_tups = n; - - n = get_next_indice( st, n ) + 1; - - t = 0; - - lastnz = n << 1; - - if ( lastnz > nt ) - { - st->BER_detect = 1; - return 0; - } - - if ( hm_cfg ) - { - int16_t a1_i, b1_i; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig, numHoleIndices; - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; - } - else - { - rateFlag = 0; - } - - /* Init */ - c[0] = c[1] = 0; - - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - - /* Start Decoding */ - /* Initialize range decoder */ - rc_uni_dec_init( &rc_st_dec, &st->bit_stream[st->next_bit_pos], nbbits ); /* (nbbits + 30) entries are read by the decoder */ - - nbbits_m2 = nbbits; - rest_bits = -nbbits_m2; - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - esc_nb = 0; - r = 0; - - /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ - if ( ( t >= ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ) ) || lsbs_bit_pos <= 0 ) - { - st->BER_detect = 1; - return 0; - } - - a = b = 0; - - /* MSBs decoding */ - for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) - { - esc_nb = min( lev, 3 ); - pki = ari_lookup_s17_LC[t + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 17, 14 ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ - /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ - - if ( r < VAL_ESC ) /* If symbol read corresponds to MSB */ - { - break; - } - - /* LSBs decoding */ - a += get_indice_1( st, lsbs_bit_pos-- ) << lev; - b += get_indice_1( st, lsbs_bit_pos-- ) << lev; - } - - if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) - { - x[a1_i] = 0; - x[b1_i] = 0; - st->BER_detect = 1; - return 0; - } - - /* MSBs contributions */ - b1 = r >> 2; - a1 = r & 0x3; - a += a1 << lev; - b += b1 << lev; - - /* Add 2 LSB bits per bit-plane */ - rest_bits += 2 * lev; - /* Sign bits */ - rest_bits += min( a, 1 ); - rest_bits += min( b, 1 ); - - /* Update bitstream pointer */ - st->next_bit_pos = start_bit_pos + bits_tups + rc_uni_dec_virtual_finish( &rc_st_dec ); - - /* Confirm that there is no overflow */ - - /* Store decoded data */ - x[a1_i] = a; - x[b1_i] = b; - - /* Update context for next 2-tuple */ - if ( p1 == p2 ) - { - /* peak-peak or hole-hole context */ - lev = esc_nb - 1; - - if ( lev <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev + 2 ); - } - else - { - t = 13 + lev; - } - - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else - { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], a ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], b ); - } - } - } - - /* We don't need to finish because virtual_finish() already does the same */ - /*st->next_bit_pos = rc_uni_dec_finish(&rc_st_dec);*/ - - /* Check for bitstream errors */ - assert( rc_st_dec.bit_error_detected == 0 ); - - /* Cross-check: No overflow */ - - /* Decode signs */ - n = nt; - } - else /* if(!hm_cfg) */ - { - int16_t c, rateQ; - uint16_t s; - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2; - } - else - { - rateFlag = 0; - } - - /* Start Decoding */ - /* Initialize range decoder */ - rc_uni_dec_init( &rc_st_dec, &st->bit_stream[st->next_bit_pos], nbbits ); /* (nbbits + 30) entries are read by the decoder */ - - nbbits_m2 = nbbits; - rest_bits = -nbbits_m2; - - t = 0; - s = 0; - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - rateQ = rateFlag + ( k > ( nt_half ) ); - - /* BER detection: Check max value of context t leading to out-of-bound access to ari_lookup_s17_LC[]*/ - if ( ( t >= ( 1 << ( NBITS_CONTEXT ) ) ) || lsbs_bit_pos <= 0 ) - { - st->BER_detect = 1; - return 0; - } - - a = b = 0; - esc_nb = 0; - r = 0; - - /* MSBs decoding */ - for ( lev = 0; lev < 15 && lsbs_bit_pos > 0; ++lev ) - { - esc_nb = min( lev, 3 ); - pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 17, 14 ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ - /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ - - if ( r < VAL_ESC ) /* If symbol read corresponds to MSB */ - { - break; - } - - /* LSBs decoding */ - a += get_indice_1( st, lsbs_bit_pos-- ) << lev; - b += get_indice_1( st, lsbs_bit_pos-- ) << lev; - } - - if ( ( lsbs_bit_pos < -1 && r >= VAL_ESC ) || ( lev > 14 ) ) - { - x[k + 0] = 0; - x[k + 1] = 0; - st->BER_detect = 1; - return 0; - } - - /* MSBs contributions */ - b1 = r >> 2; - a1 = r & 0x3; - a += a1 << lev; - b += b1 << lev; - - /* Add 2 LSB bits per bit-plane */ - rest_bits += 2 * lev; - /* Sign bits */ - rest_bits += min( a, 1 ); - rest_bits += min( b, 1 ); - - /* Update bitstream pointer */ - st->next_bit_pos = start_bit_pos + bits_tups + rc_uni_dec_virtual_finish( &rc_st_dec ); - - /* Confirm that there is no overflow */ - - /* Store decoded data */ - x[k + 0] = a; - x[k + 1] = b; - - /* Update context for next 2-tuple */ - if ( esc_nb < 2 ) - { - c = 1 + ( ( a1 + b1 ) * ( esc_nb + 1 ) ); - } - else - { - c = 12 + esc_nb; - } - - s = s << 4; /*Shift old 4 bits*/ - s = s + c; /*replace last 4 bits*/ - t = s & 0xFF; - } - - /* Decode signs */ - n = lastnz; - } /* end of if(hm_cfg) */ - - for ( k = 0; k < n; k++ ) - { - if ( x[k] > 0 ) - { - x[k] *= 1 - 2 * get_next_indice_1( st ); - } - } - - /* Decode Residual Q */ - resQBits = min( resQMaxBits, lsbs_bit_pos + 1 - st->next_bit_pos ); - - for ( k = 0; k < resQBits; ++k ) - { - x[nt + k] = get_indice_1( st, lsbs_bit_pos - k ); - } - - /* Set bitstream pointer to end of buffer */ - get_next_indice_tmp( st, ( start_bit_pos + nbbits ) - st->next_bit_pos ); - - return resQBits; -} -#endif diff --git a/lib_dec/ACcontextMapping_dec_fx.c b/lib_dec/ACcontextMapping_dec_fx.c index 677e37baf..34e74a06f 100644 --- a/lib_dec/ACcontextMapping_dec_fx.c +++ b/lib_dec/ACcontextMapping_dec_fx.c @@ -20,7 +20,6 @@ * Arithmetic decoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ACcontextMapping_decode2_no_mem_s17_LC( Decoder_State *st, /* i/o: decoder state */ Word16 *x, /* o: decoded spectrum Q0*/ @@ -329,9 +328,7 @@ Word16 ACcontextMapping_decode2_no_mem_s17_LC( return resQBits; } -#endif -#ifdef IVAS_FLOAT_FIXED #define IVAS_CONTEXT_MAPPING #ifdef IVAS_CONTEXT_MAPPING @@ -744,4 +741,3 @@ Word16 RCcontextMapping_decode2_no_mem_s17_LCS_fx( #endif #undef IVAS_CONTEXT_MAPPING -#endif diff --git a/lib_dec/FEC.c b/lib_dec/FEC.c index dc3600728..fc669bf26 100644 --- a/lib_dec/FEC.c +++ b/lib_dec/FEC.c @@ -43,486 +43,6 @@ #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void gain_dec_bfi( float *past_qua_en ); -static void pulseRes_preCalc( Word16 *cond1, Word16 *cond2, Word32 *cond3, Word16 new_pit, Word16 Tc, Word16 L_frame ); - -/*-------------------------------------------------------------------* - * FEC_exc_estim() - * - * Calculation of excitation signal - *-------------------------------------------------------------------*/ - -void FEC_exc_estim( - Decoder_State *st, /* i/o: Decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - float *exc, /* o : pointer to excitation buffer (with past) */ - float *exc2, /* o : total excitation (for synthesis) */ - float *exc_dct_in, /* o : GSC excitation in DCT domain */ - float *pitch_buf, /* o : pitch buffer for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *tmp_tc, /* o : FEC pitch */ - float *bwe_exc, /* o : excitation for SWB TBE */ - float *lsf_new, /* i : ISFs at the end of the frame */ - float *tmp_noise /* o : long-term noise energy */ -) -{ - int16_t i, Tc, new_pit; - float exc2_buf[L_FRAME16k + MODE1_L_FIR_FER - 1]; - float *pt_exc, *pt1_exc, alpha, step, gain_inov, gain, gainCNG, hp_filt[5]; - float fT0, delta, ftmp; - int16_t Diff_len; - int16_t Len, max_len; - int16_t last_bin; - int16_t extrapolationFailed = 1; - float predPitchLag; - Word16 cond1, cond2; - Word32 cond3; - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - gainCNG = (float) sqrt( st->lp_ener ); - - ftmp = 2.0f * st->lp_gainc; - if ( gainCNG > ftmp ) - { - gainCNG = ftmp; - } - - Diff_len = 0; - set_f( exc_dct_in, 0.0f, L_FRAME16k ); - - /*-----------------------------------------------------------------* - * Pitch extrapolation - *-----------------------------------------------------------------*/ - - /* pitch extrapolation */ - pitch_pred_linear_fit_flt( st->nbLostCmpt, st->last_good, st->old_pitch_buf, L_frame == L_FRAME ? &st->old_pitch_buf[2 * NB_SUBFR - 1] : &st->old_pitch_buf[2 * NB_SUBFR16k - 1], &predPitchLag, L_frame == L_FRAME ? PIT_MIN_DOUBLEEXTEND : PIT16k_MIN_EXTEND, L_frame == L_FRAME ? PIT_MAX : PIT16k_MAX, st->mem_pitch_gain_float, 0, 0, &extrapolationFailed, L_frame / L_SUBFR ); - - new_pit = (int16_t) ( predPitchLag + 0.5f ); - - /* initialize FEC pitch to the long-term pitch */ - *tmp_tc = st->bfi_pitch; - if ( L_frame == L_FRAME ) - { - if ( ( ( st->old_pitch_buf[2 * NB_SUBFR - 1] < 1.8f * st->bfi_pitch ) && - ( st->old_pitch_buf[2 * NB_SUBFR - 1] > 0.6f * st->bfi_pitch ) ) || /* last pitch coherent with the past */ - ( st->upd_cnt >= MAX_UPD_CNT ) ) /* or last update too far in the past */ - { - /* take the pitch value of last subframe of the previous frame */ - *tmp_tc = st->old_pitch_buf[2 * NB_SUBFR - 1]; - } - } - else /* L_frame == L_FRAME16k */ - { - if ( ( ( st->old_pitch_buf[2 * NB_SUBFR16k - 1] < 1.8f * st->bfi_pitch ) && - ( st->old_pitch_buf[2 * NB_SUBFR16k - 1] > 0.6f * st->bfi_pitch ) ) || /* last pitch coherent with the past */ - ( st->upd_cnt >= MAX_UPD_CNT ) ) /* or last update too far in the past */ - { - /* take the pitch value of last subframe of the previous frame */ - *tmp_tc = st->old_pitch_buf[2 * NB_SUBFR16k - 1]; - } - } - /* convert pitch period */ - Tc = (int16_t) ( *tmp_tc + 0.5f ); - - pulseRes_preCalc( &cond1, &cond2, &cond3, (Word16) new_pit, (Word16) Tc, (Word16) L_frame ); - - if ( ( cond1 < 0 ) && ( new_pit > 0 ) && ( cond2 != 0 ) && ( cond3 > 0 ) && extrapolationFailed == 0 ) - { - fT0 = *tmp_tc; - delta = (float) ( new_pit - fT0 ) / ( L_frame / L_SUBFR ); /* # of subframes */ - for ( i = 0; i < L_frame / L_SUBFR; i++ ) /* subframe pitch values */ - { - fT0 += delta; - pitch_buf[i] = (int16_t) ( fT0 + 0.5f ); - } - } - else - { - for ( i = 0; i < L_frame / L_SUBFR; i++ ) - { - pitch_buf[i] = *tmp_tc; - } - } - - /*-----------------------------------------------------------------* - * Estimate gain damping factor - *-----------------------------------------------------------------*/ - - alpha = ALPHA_VT; /* rapid convergence to 0 */ - if ( st->last_coder_type == UNVOICED && st->nbLostCmpt <= 3 ) - { - /* last good frame was clearly unvoiced */ - alpha = ALPHA_UU; - } - else if ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) - { - if ( st->hGSCDec->Last_GSC_pit_band_idx > 0 && st->nbLostCmpt > 1 ) - { - alpha = 0.8f; - } - else if ( st->nbLostCmpt <= 5 ) - { - alpha = 0.995f; - } - else - { - alpha = 0.95f; - } - } - else if ( st->last_good == UNVOICED_CLAS ) - { - if ( st->nbLostCmpt <= 1 ) - { - /* If stable, do not decrease the energy, pitch gain = 0 */ - alpha = st->stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ - } - else if ( st->nbLostCmpt == 2 ) - { - alpha = ALPHA_U * 1.5f; /* 0.6 */ - } - else - { - alpha = ALPHA_U; /* 0.4 go rapidly to CNG gain, pitch gain = 0 */ - } - } - else if ( st->last_good == UNVOICED_TRANSITION ) - { - alpha = ALPHA_UT; - } - else if ( st->last_good == ONSET && st->nbLostCmpt <= 3 && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) ) - { - alpha = 0.8f; /* mild convergence to 0 for the first 3 erased frames */ - } - else if ( ( st->last_good == VOICED_CLAS || st->last_good == ONSET ) && st->nbLostCmpt <= 3 ) - { - alpha = ALPHA_V; /* constant for the first 3 erased frames */ - } - else if ( st->last_good == SIN_ONSET ) - { - alpha = ALPHA_S; - } - - if ( st->last_good >= VOICED_CLAS && st->last_good < INACTIVE_CLAS && st->last_coder_type != AUDIO ) - { - if ( st->nbLostCmpt == 1 ) - { - /* if this is the first erased frame, move pitch gain towards 1 for voiced to remove energy fluctuations */ - gain = (float) sqrt( st->lp_gainp ); - if ( gain > 0.98f ) - { - gain = 0.98f; - } - else if ( gain < 0.85f ) - { - gain = 0.85f; - } - - alpha *= gain; - } - else - { - alpha = st->lp_gainp; - } - } - - /*-----------------------------------------------------------------* - * Extrapolate past excitation signal using estimated pitch period - *-----------------------------------------------------------------*/ - - if ( ( st->last_good >= UNVOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) || - ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) ) - { - /* Do pitch-based extrapolation only for stable voiced and audio signals */ - - pt_exc = exc; - pt1_exc = pt_exc - Tc; - - if ( st->nbLostCmpt == 1 ) - { - /* first pitch cycle is low-pass filtered */ - for ( i = 0; i < Tc; i++ ) - { - *pt_exc++ = ( 0.18f * pt1_exc[-1] + 0.64f * pt1_exc[0] + 0.18f * pt1_exc[1] ); - pt1_exc++; - } - } - - /* last pitch cycle of the previous frame is repeatedly copied up to an extra subframe */ - while ( pt_exc < exc + L_frame + L_SUBFR ) - { - *pt_exc++ = *pt1_exc++; - } - - /* resynchronization of excitation based on glottal pulse locations in the last good frame */ - if ( new_pit > 0 ) - { - if ( ( cond1 < 0 ) && ( new_pit > 0 ) && ( cond2 != 0 ) && ( cond3 > 0 ) && extrapolationFailed == 0 ) - { - mvr2r( exc, exc - L_frame - L_SUBFR, L_frame + L_SUBFR ); - PulseResynchronization( exc - L_frame - L_SUBFR, exc, L_frame, L_frame / L_SUBFR, Tc, new_pit ); - } - } - - if ( st->last_good == UNVOICED_TRANSITION && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) ) - { - /* start of the frame gain */ - gain = 0.0f; - - /* end of the frame gain */ - st->lp_gainp = 0.0f; - - step = 0.0f; - } - else - { - /* start of the frame gain */ - gain = 1.0f; - - /* end of the frame gain */ - st->lp_gainp = alpha; - - /* linearly attenuate the gain throughout the frame */ - step = ( 1.0f / L_frame ) * ( gain - st->lp_gainp ); - } - - /* scaling of the harmonic part of excitation */ - for ( i = 0; i < L_frame; i++ ) - { - exc[i] *= gain; - gain -= step; - } - - if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) - { - /* in case the last frame was coded by GSC, convert the excitation signal to frequency domain */ - edct( exc, exc_dct_in, st->L_frame, st->element_mode ); - - /* Reset unvaluable part of the adaptive (pitch) excitation contribution */ - Diff_len = (int16_t) ( mfreq_loc[st->hGSCDec->Last_GSC_pit_band_idx] / BIN_SIZE ); - max_len = st->L_frame - Diff_len; - Len = min( max_len, 80 ); - - for ( i = 0; i < Len; i++ ) - { - exc_dct_in[i + Diff_len] *= sm_table[i]; - } - - for ( ; i < max_len; i++ ) - { - exc_dct_in[i + Diff_len] = 0.0f; - } - - Diff_len++; - } - } - - /*-----------------------------------------------------------------* - * Replicate the last spectrum in case the last good frame was coded by GSC - *-----------------------------------------------------------------*/ - - if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->total_brate <= MAX_GSC_INACTIVE_BRATE && !st->Opt_AMR_WB ) - { - /* Replication of the last spectrum, with a slight downscaling of its dynamic */ - st->GSC_noisy_speech = st->Last_GSC_noisy_speech_flag; - gsc_dec( st, exc_dct_in, st->hGSCDec->Last_GSC_pit_band_idx, Diff_len, 0, st->L_frame / L_SUBFR, st->last_coder_type, &last_bin, lsf_new, NULL, tmp_noise ); - - /* Transform back to time domain */ - edct( exc_dct_in, exc, st->L_frame, st->element_mode ); - } - - /*-----------------------------------------------------------------* - * Construct the random part of excitation - *-----------------------------------------------------------------*/ - - else - { - /* generate the random part of the excitation */ - for ( i = 0; i < L_frame + MODE1_L_FIR_FER - 1; i++ ) - { - exc2_buf[i] = (float) own_random( &st->seed ); - } - - /* start of the frame gain */ - gain = st->lp_gainc; - - /* end of the frame gain */ - st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; - - if ( st->last_good == UNVOICED_TRANSITION && ( st->last_coder_type == GENERIC || st->last_coder_type == TRANSITION ) && gainCNG > 0 ) - { - st->lp_gainc = gainCNG; - } - - /* linearly attenuate the gain throughout the frame */ - step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); - - /* calculate gain to normalize energy */ - pt_exc = exc2_buf + MODE1_L_FIR_FER / 2; - - gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); - - /* attenuate somewhat on unstable unvoiced */ - if ( ( st->last_good == UNVOICED_CLAS || st->last_good == INACTIVE_CLAS ) && st->last_coder_type != UNVOICED ) - { - gain_inov *= 0.8f; - } - - /* scaling of the random part of excitation */ - pt_exc = exc2_buf; - for ( i = 0; i < MODE1_L_FIR_FER / 2; i++ ) - { - /* non-causal ringing of the FIR filter */ - *pt_exc++ *= ( gain_inov * gain ); - } - - for ( i = 0; i < L_frame; i++ ) - { - /* the inner part of the FIR filter */ - *pt_exc++ *= ( gain_inov * gain ); - gain -= step; - } - - for ( i = 0; i < MODE1_L_FIR_FER / 2; i++ ) - { - /* causal ringing of the FIR filter */ - *pt_exc++ *= ( gain_inov * gain ); - } - } - - /*-----------------------------------------------------------------* - * Total excitation - *-----------------------------------------------------------------*/ - - if ( ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) && st->total_brate <= MAX_GSC_INACTIVE_BRATE && !st->Opt_AMR_WB ) - { - /* For GSC - the excitation is already computed */ - mvr2r( exc, exc2, st->L_frame ); - } - else if ( st->last_good >= UNVOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) - { - /* For voiced and generic signals - prepare a HP filter for the random part of excitation */ - for ( i = 0; i < MODE1_L_FIR_FER; i++ ) - { - hp_filt[i] = ( 1.0f - st->tilt_code ) * h_high[i]; - } - - /* HP filter the random part of the excitation and add the adaptive part */ - for ( i = 0; i < L_frame; i++ ) - { - exc2[i] = exc[i] + dotp( &exc2_buf[i], hp_filt, MODE1_L_FIR_FER ); - } - } - else - { - /* For purely unvoiced signals - just copy the unfiltered random part of the excitation */ - mvr2r( exc2_buf + MODE1_L_FIR_FER / 2, exc, L_frame ); - mvr2r( exc2_buf + MODE1_L_FIR_FER / 2, exc2, L_frame ); - } - - if ( st->hBWE_TD != NULL ) - { - if ( L_frame == L_FRAME ) - { - interp_code_5over2( exc, bwe_exc, L_frame ); - } - else - { - interp_code_4over2( exc, bwe_exc, L_frame ); - } - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* Update voicing factors of TBE */ - if ( st->last_coder_type == AUDIO || st->last_good == INACTIVE_CLAS ) - { - if ( st->L_frame == L_FRAME ) - { - set_f( voice_factors, 1.0f, NB_SUBFR ); - } - else - { - set_f( voice_factors, 1.0f, NB_SUBFR16k ); - } - } - else - { - if ( st->L_frame == L_FRAME ) - { - set_f( voice_factors, st->last_voice_factor, NB_SUBFR ); - } - else - { - set_f( voice_factors, st->last_voice_factor, NB_SUBFR16k ); - } - } - - if ( st->Opt_AMR_WB ) - { - /* update buffer of gains for the next frame */ - gain_dec_bfi( st->hAmrwb_IO->past_qua_en ); - } - - st->bfi_pitch = pitch_buf[L_frame / L_SUBFR - 1]; - st->bfi_pitch_frame = st->L_frame; - - return; -} - - -/*-------------------------------------------------------------------* - * gain_dec_bfi() - * - * Estimate past quantized gain prediction residual to be used in - * next frame - *-------------------------------------------------------------------*/ - - -static void gain_dec_bfi( - float *past_qua_en /* i/o: gain quantization memory (4 words) */ -) -{ - int16_t i; - float av_pred_en; - - av_pred_en = 0.0f; - for ( i = 0; i < GAIN_PRED_ORDER; i++ ) - { - av_pred_en += past_qua_en[i]; - } - - av_pred_en = (float) ( av_pred_en * ( 1.0f / (float) GAIN_PRED_ORDER ) - 3.0f ); - - if ( av_pred_en < -14.0f ) - { - av_pred_en = -14.0f; - } - - for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) - { - past_qua_en[i] = past_qua_en[i - 1]; - } - - past_qua_en[0] = av_pred_en; - - return; -} -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - - -#endif #define WMC_TOOL_SKIP /*-------------------------------------------------------------------* @@ -531,54 +51,4 @@ static void gain_dec_bfi( * calculates some conditions for Pulse resynchronization to take place *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void pulseRes_preCalc( - Word16 *cond1, - Word16 *cond2, - Word32 *cond3, - Word16 new_pit, - Word16 Tc, - Word16 L_frame ) -{ - Word16 tmp_pit, tmp_pit_e, tmp_frame, tmp_frame_e; - Word32 tmp_pit2; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - tmp_pit = BASOP_Util_Divide1616_Scale( new_pit /*Q0*/, Tc /*Q0*/, &tmp_pit_e ) /*Q15*/; - tmp_frame = add( extract_l( L_mult0( L_frame, 64 /*1.f/L_SUBFR Q12*/ ) /*Q12*/ ), 4096 /*1.f Q12*/ ); /*Q12*/ - tmp_frame = BASOP_Util_Divide1616_Scale( 4096 /*1.f Q12*/, tmp_frame, &tmp_frame_e ); /*Q15*/ - tmp_frame = shl( tmp_frame, add( tmp_frame_e, 1 ) ); - tmp_frame = sub( 32767 /*1.f Q15*/, tmp_frame ); /*Q15*/ - -#ifndef BASOP_NOGLOB - BASOP_SATURATE_WARNING_OFF -#endif /* ! BASOP_NOGLOB */ - /*To calc Q15 threshold, overflow may happen - do negation and compare with negated value to check also highest possible value*/ -#ifndef BASOP_NOGLOB - tmp_pit = shl( negate( tmp_pit ), tmp_pit_e ); - BASOP_SATURATE_WARNING_ON -#else /* BASOP_NOGLOB */ - tmp_pit = shl_o( negate( tmp_pit ), tmp_pit_e, &Overflow ); -#endif /* BASOP_NOGLOB */ - - *cond1 = sub( tmp_pit, negate( tmp_frame ) ); - - *cond2 = sub( Tc, new_pit ); - - tmp_pit_e = BASOP_Util_Add_MantExp( new_pit, 15 - 0, negate( Tc ), 15 - 0, &tmp_pit ); /*Q15*/ - tmp_pit = abs_s( tmp_pit ); - tmp_pit2 = L_mult( Tc, 4915 /*0.15f Q15*/ ); /*Q16*/ - - BASOP_SATURATE_WARNING_OFF - /*To calc Q15 threshold, overflow may happen - do negation and compare with negated value to check also highest possible value*/ - tmp_pit2 = L_shl( L_negate( tmp_pit2 ), sub( 15 - 16, tmp_pit_e ) ); - BASOP_SATURATE_WARNING_ON - - *cond3 = L_sub( L_mult0( -1, tmp_pit ), tmp_pit2 ); - - return; -} -#endif #undef WMC_TOOL_SKIP diff --git a/lib_dec/FEC_HQ_core.c b/lib_dec/FEC_HQ_core.c index 1ffc43db4..794f6dab3 100644 --- a/lib_dec/FEC_HQ_core.c +++ b/lib_dec/FEC_HQ_core.c @@ -42,1501 +42,9 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local prototypes - *---------------------------------------------------------------------*/ -static int16_t FEC_phase_matching( HQ_NBFEC_HANDLE st, float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB] ); - -static void FEC_phase_matching_nextgood( const float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB], float mean_en_high ); - -static void FEC_phase_matching_burst( const float *ImdctOut, float *auOut, float *OldauOut, float OldauOut_pha[2][N_LEAD_NB], float *prev_oldauOut ); - -static void Repetition_smoothing_nextgood( const float *ImdctOut, float *auOut, float *OldImdctOut, float *OldauOut, int16_t cur_data_use_flag, int16_t overlap_time ); - -static int16_t Repetition_smoothing( const float *ImdctOut, float *auOut, float *OldImdctOut, float *OldauOut, const int16_t L, float *prev_oldauOut, int16_t overlap_time ); - -static void Windowing_1st_NB( float *ImdctOutWin, const float *ImdctOut, const float *win, const float *smoothingWin, const int16_t smoothing_flag ); - -static void Windowing_2nd_NB( float *ImdctOutWin, const float *ImdctOut, const float *win ); - -static void common_overlapping( float *auOut, float *ImdctOutWin, float *OldauOut, const int16_t end1, const int16_t offset1, const int16_t start2, const int16_t end2, const int16_t offset_i2, const int16_t offset2 ); - -static void Smoothing_vector_NB( const float OldauOutnoWin[], const float ImdctOutWin[], const float SmoothingWin[], float auOut[], const int16_t ol_size ); - -static void Smoothing_vector_scaledown_NB( const float OldauOutnoWin[], const float ImdctOutWin[], const float SmoothingWin[], float auOut[], const int16_t ol_size ); - - -/*--------------------------------------------------------------------------* - * Regression_Anal() - * - * - *--------------------------------------------------------------------------*/ - -static void Regression_Anal( - const float *values, /* i : Previous values */ - float *r_p, /* o : Output r[a b] array : y=ax+b */ - const int16_t num_pgf /* i : Number of previous good frame */ -) -{ - int16_t i; - float aindex[MAX_PGF + 1], b_p[MAX_PGF + 1]; - - /* Initialize */ - for ( i = 0; i < num_pgf + 1; i++ ) - { - aindex[i] = 0.f; - b_p[i] = 0.f; - } - - /* [aindex[0] aindex[1]][r[0]]=[b[0]]*/ - /* [aindex[1] aindex[2]][r[1]] [b[1]]*/ - /* r[0] is the y-intercept(initial value). r[1] is slope*/ - - /* r[0] = (b[0]a[2]-a[1]b[1])/(a[0]a[2]-a[1]a[1]) - r[1] = (b[0]a[1]-a[0]b[1])/(a[1]a[1]-a[0]a[2]) */ - - aindex[0] = num_pgf; - for ( i = 1; i < num_pgf + 1; i++ ) - { - aindex[1] += (float) i; - aindex[2] += ( (float) i * (float) i ); - } - /* Calculate b[] */ - for ( i = 0; i < num_pgf; i++ ) - { - b_p[0] += ( values[i] ); - b_p[1] += ( (float) ( num_pgf - i ) * values[i] ); - } - r_p[0] = ( b_p[0] * aindex[2] - aindex[1] * b_p[1] ) / ( aindex[0] * aindex[2] - aindex[1] * aindex[1] ); - r_p[1] = ( b_p[0] * aindex[1] - aindex[0] * b_p[1] ) / ( aindex[1] * aindex[1] - aindex[0] * aindex[2] ); - - return; -} - - -/*--------------------------------------------------------------------------* - * FEC_scaling() - * - * - *--------------------------------------------------------------------------*/ -static void FEC_scaling( - float *old_coeffs, /* i/o: Pointer to old MDCT coeffs. */ - float *t_audio_q, /* o : MDCT coeffs. (for synthesis) */ - float *Norm_gain, /* i : Gain for Norm of each band */ - int16_t *HQ_FEC_seed, /* i/o: Seed for Ransom number Generator */ - int16_t nb_sfm, /* i : Number of sub-band */ - const int16_t *start_band, - const int16_t *end_band ) -{ - int16_t i, j; - - for ( i = 0; i < RANDOM_START; i++ ) - { - for ( j = start_band[i]; j < end_band[i]; j++ ) - { - t_audio_q[j] = Norm_gain[i] * old_coeffs[j]; - } - } - - for ( i = RANDOM_START; i < nb_sfm; i++ ) - { - for ( j = start_band[i]; j < end_band[i]; j++ ) - { - if ( (float) own_random( HQ_FEC_seed ) < 0.f ) - { - t_audio_q[j] = Norm_gain[i] * ( -old_coeffs[j] ); - } - else - { - t_audio_q[j] = Norm_gain[i] * old_coeffs[j]; - } - } - } - return; -} - - -/*--------------------------------------------------------------------------* - * HQ_FEC_processing() - * - * - *--------------------------------------------------------------------------*/ - -void HQ_FEC_processing( - Decoder_State *st, /* i/o: decoder state structure */ - float *t_audio_q, /* o : MDCT coeffs. (for synthesis) */ - int16_t is_transient, /* i : Old flag for transient */ - float ynrm_values[][MAX_PGF], /* i : Old average Norm values for each group of bands */ - float r_p_values[][MAX_ROW], /* i : Computed y-intercept and slope by Regression */ - int16_t num_Sb, /* i : Number of sub-band group */ - int16_t nb_sfm, /* i : Number of sub-band */ - int16_t *Num_bands_p, /* i : Number of coeffs. for each sub-band */ - int16_t output_frame, /* i : Frame size */ - const int16_t *sfm_start, /* i : Start of bands */ - const int16_t *sfm_end /* i : End of bands */ -) -{ - int16_t i, j, k; - float energy_diff; - int16_t mute_start, num_pgf; - int16_t Num_sb_bwe; - float tmp, norm_p[MAX_SB_NB]; - float *norm_values; - float *r_p; - int16_t sfm; - - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; - - - /* Make sure 'energy_MA_Curr[0]' is not zero to prevent a 'div by 0' error. */ - if ( hHQ_nbfec->energy_MA_Curr[0] < 1.0f ) - { - hHQ_nbfec->energy_MA_Curr[0] = 1.0f; /*It seems to be in Q0 the FxP*/ - } - /* Decide the start frame number for adaptive muting */ - /* Normalized energy difference between the current frame and the moving average */ - energy_diff = (float) fabs( ( hHQ_nbfec->energy_MA_Curr[1] - hHQ_nbfec->energy_MA_Curr[0] ) / hHQ_nbfec->energy_MA_Curr[0] ); - - if ( ( energy_diff < ED_THRES ) && ( is_transient == 0 ) ) /* First erasure frame */ - { - mute_start = 5; - } - else - { - mute_start = 2; - } - - if ( st->prev_old_bfi == 1 && st->nbLostCmpt == 1 && output_frame == L_FRAME8k ) - { - st->nbLostCmpt++; - } - - /* Frequency-domain FEC */ - if ( st->nbLostCmpt == 1 ) /* First erasure frame */ - { - if ( is_transient == 0 ) - { - if ( energy_diff < ED_THRES ) - { - for ( i = 0; i < output_frame; i++ ) - { - t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; - } - } - else - { - for ( i = 0; i < output_frame; i++ ) - { - hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; - t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; - } - } - - /* Sign prediction in 4-dim bands up to 1.6 kHz*/ - if ( hHQ_core->old_is_transient[1] == 0 ) - { - if ( hHQ_core->old_is_transient[2] == 0 ) - { - for ( sfm = 0; sfm < HQ_FEC_SIGN_SFM; sfm++ ) - { - if ( hHQ_nbfec->prev_sign_switch[sfm] >= HQ_FEC_SIGN_THRES ) - { - for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) - { - t_audio_q[i + sfm * HQ_FEC_BAND_SIZE] *= -1.0f; - } - } - } - } - else - { - for ( sfm = 0; sfm < HQ_FEC_SIGN_SFM; sfm++ ) - { - if ( hHQ_nbfec->prev_sign_switch[sfm] >= HQ_FEC_SIGN_THRES_TRANS ) - { - for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) - { - t_audio_q[i + sfm * HQ_FEC_BAND_SIZE] *= -1.0f; - } - } - } - } - } - else - { - for ( i = RANDOM_START * 8; i < output_frame; i++ ) - { - if ( (float) own_random( &hHQ_nbfec->HQ_FEC_seed ) < 0.0f ) - { - t_audio_q[i] *= -1.0f; - } - } - } - } - else - { - if ( hHQ_core->old_is_transient[1] ) /* hangover */ - { - for ( i = 0; i < output_frame; i++ ) - { - hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; - t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; - } - } - else - { - for ( i = 0; i < RANDOM_START * 8; i++ ) - { - hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; - t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; - } - - for ( i = RANDOM_START * 8; i < output_frame; i++ ) - { - hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; - if ( (float) own_random( &hHQ_nbfec->HQ_FEC_seed ) < 0.0f ) - { - t_audio_q[i] = ( -hHQ_nbfec->old_coeffs[i] ); - } - else - { - t_audio_q[i] = hHQ_nbfec->old_coeffs[i]; - } - } - } - } - } - else /* st->nbLostCmpt > 1 */ - { - if ( energy_diff < ED_THRES && is_transient == 0 ) - { - num_pgf = 4; - } - else - { - num_pgf = 2; - } - - Num_sb_bwe = num_Sb; - if ( st->nbLostCmpt == 2 ) - { - for ( i = 0; i < Num_sb_bwe; i++ ) - { - norm_values = &ynrm_values[i][0]; - r_p = &r_p_values[i][0]; - Regression_Anal( norm_values, r_p, num_pgf ); - } - } - - /* Fade-out Norm by the result of Regression */ - if ( st->nbLostCmpt >= mute_start ) - { - /* Scaling */ - for ( i = 0; i < output_frame; i++ ) - { - hHQ_nbfec->old_coeffs[i] *= SCALE_DOWN_3dB; - } - } - - k = 0; - for ( i = 0; i < Num_sb_bwe; i++ ) - { - norm_values = &ynrm_values[i][0]; - r_p = &r_p_values[i][0]; - - /* Predict the average energy of each sub-band using Regression */ - /* Linear Regression */ - if ( r_p[1] > MAX_TILT ) - { - r_p[1] = MAX_TILT; - norm_p[i] = (float) ( norm_values[0] + r_p[1] * (float) ( st->nbLostCmpt - 1 ) ); - } - else - { - norm_p[i] = (float) ( r_p[0] + r_p[1] * (float) ( st->nbLostCmpt - 1 + num_pgf ) ); - } - - if ( norm_values[0] != 0.0f && norm_p[i] > 0.0f ) /* Avoid negative value of the predicted energy */ - { - tmp = norm_p[i] / norm_values[0]; /* Pred_new / Old */ - - if ( tmp > 1.0f ) - { - tmp = 1.f; - } - - for ( j = 0; j < Num_bands_p[i]; j++ ) - { - hHQ_nbfec->Norm_gain[k++] = tmp; - } - } - else - { - /* Scale down the last gain with the fixed gain(-3dB) */ - for ( j = 0; j < Num_bands_p[i]; j++ ) - { - hHQ_nbfec->Norm_gain[k++] *= SCALE_DOWN_3dB; - } - } - } - - /* Scaling for core band */ - FEC_scaling( hHQ_nbfec->old_coeffs, t_audio_q, hHQ_nbfec->Norm_gain, &hHQ_nbfec->HQ_FEC_seed, nb_sfm, sfm_start, sfm_end ); - } - - return; -} - - -/*--------------------------------------------------------------------------* - * HQ_FEC_Mem_update() - * - * - *--------------------------------------------------------------------------*/ - -void HQ_FEC_Mem_update( - Decoder_State *st, /* i/o: decoder state structure */ - const float *t_audio_q, - float *normq, - int16_t *ynrm, - const int16_t *Num_bands_p, - const int16_t is_transient, - const int16_t hqswb_clas, - const int16_t c_switching_flag, - const int16_t nb_sfm, - const int16_t num_Sb, - float *mean_en_high, - const int16_t hq_core_type, /* i : normal or low-rate MDCT(HQ) core */ - const int16_t output_frame /* i : Frame size */ -) -{ - int16_t i, j, k; - float tmp; - float tmp_energy = 0; - float *norm_values; - int16_t offset; - int16_t Min_ind; - int16_t Min_value; - float Max_coeff; - int16_t Max_ind; - int16_t stat_mode_curr; - float en_high[MAX_SB_NB]; - - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; - - if ( output_frame == L_FRAME8k ) - { - if ( is_transient ) - { - set_s( hHQ_nbfec->prev_sign_switch_2, 0, HQ_FEC_SIGN_SFM ); - set_s( hHQ_nbfec->prev_sign_switch, 0, HQ_FEC_SIGN_SFM ); - } - else - { - for ( j = 0; j < HQ_FEC_SIGN_SFM; j++ ) - { - hHQ_nbfec->prev_sign_switch[j] = hHQ_nbfec->prev_sign_switch_2[j]; - hHQ_nbfec->prev_sign_switch_2[j] = 0; - - for ( i = 0; i < HQ_FEC_BAND_SIZE; i++ ) - { - tmp = hHQ_nbfec->old_coeffs[i + j * HQ_FEC_BAND_SIZE] * t_audio_q[i + j * HQ_FEC_BAND_SIZE]; - if ( tmp < 0 ) - { - hHQ_nbfec->prev_sign_switch[j]++; - hHQ_nbfec->prev_sign_switch_2[j]++; - } - } - } - } - - /* if LR MDCT core is used, recalculate norms from decoded MDCT spectrum (using code from hq_hr_enc()) */ - if ( ( hqswb_clas == HQ_HVQ ) || ( hq_core_type == LOW_RATE_HQ_CORE ) ) - { - /* First group */ - logqnorm( t_audio_q, ynrm, 32, WID_G1, thren_HQ ); - j = ynrm[0]; - offset = WID_G1; - - for ( i = 1; i < SFM_G1; i++ ) - { - logqnorm( &t_audio_q[offset], &ynrm[i], 40, WID_G1, thren_HQ ); - offset += WID_G1; - } - - /* Second group */ - for ( i = SFM_G1; i < SFM_G1 + 2; i++ ) - { - logqnorm( &t_audio_q[offset], &ynrm[i], 40, WID_G2, thren_HQ ); - offset += WID_G2; - } - } - - /* Memory update for the LGF log2 Norm */ - for ( i = 0; i < nb_sfm; i++ ) - { - normq[i] = dicn[ynrm[i]]; - } - - k = 0; - for ( i = 0; i < num_Sb; i++ ) - { - norm_values = &hHQ_nbfec->ynrm_values[i][0]; - mvr2r( norm_values, &norm_values[1], MAX_PGF - 1 ); - - tmp = 0.f; - for ( j = 0; j < Num_bands_p[i]; j++ ) - { - tmp += (float) normq[k++]; - } - norm_values[0] = tmp / (float) Num_bands_p[i]; - tmp_energy += tmp; - } - - if ( ( c_switching_flag ) || ( ( st->last_core == ACELP_CORE ) && ( st->core == HQ_CORE ) ) ) - { - for ( i = 0; i < MAX_SB_NB; i++ ) - { - for ( j = 1; j < MAX_PGF; j++ ) - { - hHQ_nbfec->ynrm_values[i][j] = hHQ_nbfec->ynrm_values[i][0]; - } - } - } - set_f( hHQ_nbfec->Norm_gain, 1.f, SFM_N_NB ); - - /* hHQ_nbfec->energy_MA_Curr[1]=Energy of the current frame */ - hHQ_nbfec->energy_MA_Curr[1] = tmp_energy / (float) nb_sfm; - - /* Moving Average */ - hHQ_nbfec->energy_MA_Curr[0] = 0.8f * hHQ_nbfec->energy_MA_Curr[0] + 0.2f * hHQ_nbfec->energy_MA_Curr[1]; - - hHQ_nbfec->diff_energy = (float) fabs( ( hHQ_nbfec->energy_MA_Curr[1] - hHQ_nbfec->energy_MA_Curr[0] ) / hHQ_nbfec->energy_MA_Curr[0] ); - /* Classify the stationary mode : 12% */ - if ( ( hHQ_nbfec->diff_energy < ED_THRES_12P ) ) - { - stat_mode_curr = 1; - } - else - { - stat_mode_curr = 0; - } - - /* Apply Hysteresis to prevent frequent mode changing */ - if ( hHQ_nbfec->stat_mode_old == stat_mode_curr ) - { - hHQ_nbfec->stat_mode_out = stat_mode_curr; - } - - hHQ_nbfec->stat_mode_old = stat_mode_curr; - - - /* Find max. band index (Minimum value means maximum energy) */ - Min_ind = 0; - Min_value = 100; - for ( i = 0; i < num_Sb; i++ ) - { - if ( Min_value > ynrm[i] ) - { - Min_value = ynrm[i]; - Min_ind = i; - } - } - - /* Find max. coeff in band 0 */ - Max_ind = 0; - if ( Min_ind == 0 ) - { - Max_coeff = 0.f; - for ( i = 0; i < 8; i++ ) - { - tmp = (float) fabs( t_audio_q[i] ); - if ( Max_coeff < tmp ) - { - Max_coeff = tmp; - Max_ind = i; - } - } - } - - /* Find energy difference from band 16 */ - k = 1; - - for ( i = k; i < num_Sb; i++ ) - { - en_high[i] = 0.f; - for ( j = 0; j < 2; j++ ) - { - en_high[i] += 0.5f * hHQ_nbfec->ynrm_values[i][j + 1]; - } - } - - *mean_en_high = 0.f; - for ( i = k; i < num_Sb; i++ ) - { - *mean_en_high += (float) ( en_high[i] / hHQ_nbfec->ynrm_values[i][0] ); - } - *mean_en_high /= (float) ( num_Sb - k ); - - if ( ( Min_ind < 5 ) && ( abs( Min_ind - hHQ_nbfec->old_Min_ind ) < 2 ) && ( hHQ_nbfec->diff_energy < ED_THRES_90P ) && ( !st->bfi ) && ( !st->prev_bfi ) && ( !st->prev_old_bfi ) && ( !is_transient ) && ( !hHQ_core->old_is_transient[1] ) && ( hHQ_nbfec->prev_last_core == HQ_CORE ) && ( st->last_core == HQ_CORE ) ) - { - if ( ( Min_ind == 0 ) && ( Max_ind < 3 ) ) - { - hHQ_nbfec->phase_mat_flag = 0; - } - else - { - hHQ_nbfec->phase_mat_flag = 1; - } - } - else - { - hHQ_nbfec->phase_mat_flag = 0; - } - - hHQ_nbfec->old_Min_ind = Min_ind; - - for ( i = 0; i < L_FRAME8k; i++ ) - { - hHQ_nbfec->old_coeffs[i] = t_audio_q[i]; - } - } - - hHQ_core->old_is_transient[2] = hHQ_core->old_is_transient[1]; - hHQ_core->old_is_transient[1] = hHQ_core->old_is_transient[0]; - hHQ_core->old_is_transient[0] = is_transient; - - return; -} - -/*--------------------------------------------------------------------------* - * find_best_delay() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t find_best_delay( - float *mu_o, - float *in, - int16_t mind1, - int16_t maxd1, - int16_t lin, - int16_t delta, - int16_t *false_flag - -) -{ - int16_t i, d1, k; - int16_t d1m = 0; - float min_sq_cross, min_corr; - float accA, accB; - float Rxy[MAXDELAY_FEC], Ryy[MAXDELAY_FEC]; - - for ( k = 0, d1 = mind1; k < ( maxd1 - mind1 ) / delta; d1 += delta, k++ ) - { - accA = accB = 0; - for ( i = 0; i < lin; i += delta ) - { - accA += mu_o[d1 + i] * mu_o[d1 + i]; - accB += mu_o[d1 + i] * in[i]; - } - - Rxy[k] = accB; - Ryy[k] = accA; - } - - /* Obtain the best delay values */ - min_sq_cross = -FLT_MAX; - min_corr = 0; - - for ( d1 = 0; d1 < ( maxd1 - mind1 ) / delta; d1++ ) - { - if ( Rxy[d1] * min_corr >= min_sq_cross * Ryy[d1] ) - { - d1m = d1; - min_corr = Ryy[d1]; - min_sq_cross = Rxy[d1]; - } - } - d1m *= delta; - - if ( min_sq_cross <= 0.f || min_corr <= 0.f ) - { - accA = 0.f; - } - else - { - accA = min_sq_cross / min_corr; - } - if ( accA < 0.5 || accA > 1.5 ) - { - *false_flag = 1; - } - else - { - *false_flag = 0; - } - - return d1m; -} - -/*--------------------------------------------------------------------------* - * Search_Max_Corr() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t Search_Max_Corr( - float *mu_o, /* i : *old_auOut_2fr */ - int16_t old_Min_ind, /* i : * Old Minimum index */ - const int16_t L /* i : L/2 */ -) -{ - int16_t pos; - int16_t pos2, delta2; - int16_t lin, delta; - int16_t mind1, maxd1; - float *in; - int16_t false_flag; - int16_t min_d1, max_d1; - - if ( old_Min_ind == 0 ) - { - lin = 8 * L / 20; /* Basic size of the block for phase matching */ - - mind1 = 0; /* min value of delay d1 to search for */ - maxd1 = 12 * L / 20; /* max value of delay d1 to search for */ - - in = mu_o + 2 * L - lin; - - /* generate correlation */ - delta = 2; - delta2 = 1; - - pos = find_best_delay( mu_o, in, mind1, maxd1, lin, delta, &false_flag ); - - if ( false_flag ) - { - return 0; - } - min_d1 = max( mind1, mind1 + pos - delta + 1 ); - max_d1 = min( maxd1, mind1 + pos + delta ); - pos2 = find_best_delay( mu_o, in, min_d1, max_d1, lin, delta2, &false_flag ); - - if ( mind1 > ( mind1 + pos - delta + 1 ) ) - { - pos = pos2; - } - else - { - pos = pos + pos2 - delta + 1; - } - pos = pos + lin + mind1; - } - else - { - lin = 6 * L / 20; - - mind1 = 9 * L / 20; /* min value of delay d1 to search for */ - maxd1 = 14 * L / 20; /* max value of delay d1 to search for */ - - in = mu_o + 2 * L - lin; - - /* generate correlation */ - delta = 2; - delta2 = 1; - - pos = find_best_delay( mu_o, in, mind1, maxd1, lin, delta, &false_flag ); - - if ( false_flag ) - { - return 0; - } - - min_d1 = max( mind1, mind1 + pos - delta + 1 ); - max_d1 = min( maxd1, mind1 + pos + delta ); - pos2 = find_best_delay( mu_o, in, min_d1, max_d1, lin, delta2, &false_flag ); - - if ( mind1 > ( mind1 + pos - delta + 1 ) ) - { - pos = pos2; - } - else - { - pos = pos + pos2 - delta + 1; - } - - pos = pos + lin + mind1; - } - - return pos; -} - -/*--------------------------------------------------------------------------* - * FEC_phase_matching() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t FEC_phase_matching( - HQ_NBFEC_HANDLE st, /* i/o: HQ NB FEC handle */ - float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, - float OldauOut_pha[2][N_LEAD_NB] ) -{ - int16_t i; - float ImdctOutWin[2 * L_FRAME8k]; - int16_t pos, remain; - int16_t ol_size; - float OldauOutnoWin[L_FRAME8k]; - int16_t L_overlap, L; - float OldauOut2[L_FRAME8k]; - float pow1 = 0, pow22 = 0; - float win_NB[L_FRAME8k + 25]; - float SmoothingWin_NB3[24]; - - L = L_FRAME8k; - - for ( i = 0; i < 3 * L / 20; i++ ) - { - SmoothingWin_NB3[i] = SmoothingWin_NB875[i * 3]; - } - - for ( i = 0; i < L + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - set_f( ImdctOutWin, 0.0, 2 * L ); - - /* OLA */ - ol_size = 2 * L / 20; - pos = Search_Max_Corr( st->old_auOut_2fr, st->old_Min_ind, L ); - - if ( pos == 0 ) - { - return 1; - } - - /* Repetition */ - remain = L + N_Z_L_NB - ( ( 2 * L ) - pos ); - mvr2r( &st->old_auOut_2fr[pos], &ImdctOutWin[N_ZERO_NB], ( 2 * L ) - pos ); - - /* OldauOut without windowing */ - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - OldauOutnoWin[i - N_ZERO_NB] = -st->oldIMDCTout[L / 2 - 1 - i]; - } - for ( i = 0; i < L / 2; i++ ) - { - OldauOutnoWin[i + N_ZERO_O_NB] = -st->oldIMDCTout[i]; - } - - mvr2r( OldauOutnoWin, &ImdctOutWin[N_ZERO_NB + ( 2 * L ) - pos], remain ); - - for ( i = 0; i < L; i++ ) - { - pow1 += (float) fabs( st->old_auOut_2fr[L + i] ); - pow22 += (float) fabs( ImdctOutWin[N_ZERO_NB + i] ); - } - if ( pow22 != 0 ) - { - pow1 /= pow22; - for ( i = N_ZERO_NB; i < 2 * L; i++ ) - { - ImdctOutWin[i] *= pow1; - } - } - Smoothing_vector_NB( OldauOutnoWin, &ImdctOutWin[N_ZERO_NB], SmoothingWin_NB2, auOut, ol_size ); - - for ( i = 0; i < L / 2; i++ ) - { - ImdctOutWin[3 * L / 2 + i] *= win_NB[L / 2 - i - 1]; - } - - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - ImdctOutWin[L + i] *= win_NB[( L - 1 - i )]; - } - mvr2r( &ImdctOutWin[N_Z_L_O_NB], &OldauOut_pha[0][0], N_LEAD_NB ); - mvr2r( &ImdctOutWin[ol_size + N_ZERO_NB], &auOut[ol_size], N_Z_L_NB - ol_size ); - mvr2r( &ImdctOutWin[L], &auOut[N_Z_L_NB], N_ZERO_NB ); - mvr2r( &ImdctOutWin[L], OldauOut, L ); - - for ( i = 0; i < L / 2; i++ ) - { - OldauOut2[i] = -ImdctOut[L / 2 - 1 - i]; - OldauOut2[L / 2 + i] = -ImdctOut[i]; - } - - L_overlap = 3 * L / 20; - Smoothing_vector_NB( &ImdctOutWin[N_Z_L_O_NB], &OldauOut2[N_ZERO_NB], SmoothingWin_NB3, &OldauOut_pha[1][0], L_overlap ); - - for ( i = L_overlap; i < N_LEAD_NB; i++ ) - { - OldauOut_pha[1][i] = OldauOut2[i + N_ZERO_NB]; - } - - return 0; -} - -/*--------------------------------------------------------------------------* - * FEC_phase_matching_nextgood() - * - * - *--------------------------------------------------------------------------*/ - -void FEC_phase_matching_nextgood( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, /* i/o: audio from previous frame */ - float OldauOut_pha[2][N_LEAD_NB], - float mean_en_high ) -{ - int16_t i; - float ImdctOutWin[2 * L_FRAME8k]; - int16_t L_overlap, L; - int16_t oldout_pha_idx; - float *OldOut_pha; - float win_NB[L_FRAME8k + 25]; - - L = L_FRAME8k; - for ( i = 0; i < L + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - if ( ( mean_en_high > 2.f ) || ( mean_en_high < 0.5f ) ) - { - oldout_pha_idx = 1; - } - else - { - oldout_pha_idx = 0; - } - - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - L_overlap = N_LEAD_NB; - OldOut_pha = OldauOut_pha[oldout_pha_idx]; - for ( i = 0; i < N_LEAD_NB; i++ ) - { - OldOut_pha[i] *= SmoothingWin_NB875[L_overlap - i - 1]; - } - - if ( oldout_pha_idx == 1 ) - { - /* Use phase matching and overlapping with the Oldauout*/ - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - } - else - { - /* Only use phase matching */ - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - } - - common_overlapping( auOut, ImdctOutWin, OldOut_pha, N_LEAD_NB, 0, N_LEAD_NB, L, N_ZERO_NB, 0 ); - mvr2r( &ImdctOutWin[L], OldauOut, L ); - - return; -} - -/*--------------------------------------------------------------------------* - * FEC_phase_matching_burst() - * - * - *--------------------------------------------------------------------------*/ - -static void FEC_phase_matching_burst( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, /* i/o: audio from previous frame */ - float OldauOut_pha[2][N_LEAD_NB], - float *prev_oldauOut /* i : OldauOut from previous frame */ -) -{ - int16_t i; - int16_t L_overlap; - float OldauOut2[L_FRAME8k]; - float ImdctOutWin[2 * L_FRAME8k]; - int16_t L; - float win_NB[L_FRAME8k + 25]; - float SmoothingWin_NB3[24]; - - L = L_FRAME8k; - - for ( i = 0; i < 3 * L / 20; i++ ) - { - SmoothingWin_NB3[i] = SmoothingWin_NB875[i * 3]; - } - - for ( i = 0; i < L + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - - /* Repetition with old frame to reserve energy */ - common_overlapping( auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); - - /* data transition from OldauOut to auOut using smoothing win*/ - Smoothing_vector_NB( OldauOut_pha[0], auOut, SmoothingWin_NB875, auOut, N_LEAD_NB ); - - /* Update the OldauOut array for next overlapping */ - mvr2r( &ImdctOutWin[N_Z_L_O_NB], &OldauOut_pha[0][0], N_LEAD_NB ); - mvr2r( &ImdctOutWin[L], OldauOut, L ); - v_multc( prev_oldauOut, SCALE_DOWN_3dB, prev_oldauOut, L ); - - for ( i = 0; i < L / 2; i++ ) - { - OldauOut2[i] = -ImdctOut[L / 2 - 1 - i]; - OldauOut2[L / 2 + i] = -ImdctOut[i]; - } - - L_overlap = 3 * L / 20; - Smoothing_vector_NB( &ImdctOutWin[N_Z_L_O_NB], &OldauOut2[N_ZERO_NB], SmoothingWin_NB3, &OldauOut_pha[1][0], L_overlap ); - - for ( i = L_overlap; i < N_LEAD_NB; i++ ) - { - OldauOut_pha[1][i] = OldauOut2[i + N_ZERO_NB]; - } - - return; -} - - -/*--------------------------------------------------------------------------* - * Repetition_smoothing_nextgood() - * - * - *--------------------------------------------------------------------------*/ - -static void Repetition_smoothing_nextgood( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldImdctOut, /* i : input */ - float *OldauOut, /* i/o: audio from previous frame */ - int16_t cur_data_use_flag, /* i : current imdct data use flag */ - int16_t overlap_time ) -{ - int16_t i; - float ImdctOutWin[2 * L_FRAME8k]; - float win_NB[L_FRAME8k + 25]; - int16_t L_overlap; - int16_t ol_size; - int16_t L; - - L = L_FRAME8k; - - for ( i = 0; i < L_FRAME8k + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - OldauOut[i - N_ZERO_NB] = -OldImdctOut[L / 2 - 1 - i]; - } - for ( i = 0; i < L / 2; i++ ) - { - OldauOut[i + N_ZERO_O_NB] = -OldImdctOut[i]; - } - - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - if ( cur_data_use_flag ) - { - ol_size = N_LEAD_NB; - - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - ImdctOutWin[i + L] = -ImdctOut[L / 2 - 1 - i]; - } - for ( i = 0; i < L / 2; i++ ) - { - ImdctOutWin[i + 3 * L / 2] = -ImdctOut[i]; - } - - /*a = (float)(1./(float)(ol_size)); y = ax */ - Smoothing_vector_scaledown_NB( OldauOut, &ImdctOutWin[N_Z_L_O_NB], SmoothingWin_NB875, OldauOut, ol_size ); - - /* Scale down the overlapped signal */ - v_multc( &ImdctOutWin[ol_size + N_Z_L_O_NB], SCALE_DOWN_3dB, &OldauOut[ol_size], N_Z_L_NB - ol_size ); - } - - L_overlap = overlap_time; - for ( i = 0; i < L_overlap; i++ ) - { - OldauOut[i] *= SmoothingWin_NB875[L_overlap - i - 1]; - } - for ( i = L_overlap; i < L; i++ ) - { - OldauOut[i] = 0.f; - } - - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, SmoothingWin_NB875, 1 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - - v_add( &ImdctOutWin[N_ZERO_NB], OldauOut, auOut, L ); - mvr2r( &ImdctOutWin[L], OldauOut, L ); - - return; -} - -/*--------------------------------------------------------------------------* - * Repetition_smoothing() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t Repetition_smoothing( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldImdctOut, /* i : input */ - float *OldauOut, /* i/o: audio from previous frame */ - const int16_t L, /* i : length */ - float *prev_oldauOut, /* i : OldauOut from previous frame */ - int16_t overlap_time /* i : overlap time */ -) -{ - int16_t i; - float ImdctOutWin[2 * L_FRAME8k]; - float pow1 = 0.f; - float pow22 = 0.f; - float OldauOutnoWin[L_FRAME8k]; - float win_NB[L_FRAME8k + 25]; - - for ( i = 0; i < L_FRAME8k + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - - /* Repetition with old frame to reserve energy */ - common_overlapping( auOut, ImdctOutWin, prev_oldauOut, N_Z_L_NB, 0, N_Z_L_NB, L, N_ZERO_NB, 0 ); - - /* OldauOut without windowing */ - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - OldauOutnoWin[i - N_ZERO_NB] = -OldImdctOut[L / 2 - 1 - i]; - } - for ( i = 0; i < L / 2; i++ ) - { - OldauOutnoWin[i + N_ZERO_O_NB] = -OldImdctOut[i]; - } - - /* data transition from OldauOut to auOut using smoothing win*/ - Smoothing_vector_NB( OldauOutnoWin, auOut, SmoothingWin_NB875, auOut, overlap_time ); - - pow1 = sum2_f( &auOut[1 * L / 20], 4 * L / 20 ); - pow22 = sum2_f( &auOut[N_LEAD_NB], 4 * L / 20 ); - - - if ( pow22 > pow1 * 3 ) - { - return 1; - } - - /* Update the OldauOut array for next overlapping */ - mvr2r( &ImdctOutWin[L], OldauOut, L ); - v_multc( prev_oldauOut, SCALE_DOWN_3dB, prev_oldauOut, L ); - - return 0; -} - - -/*--------------------------------------------------------------------------* - * Windowing_1st() - * - * - *--------------------------------------------------------------------------*/ - -static void Windowing_1st_NB( - float *ImdctOutWin, /* o : Output */ - const float *ImdctOut, /* i : Input */ - const float *win, /* i : Window */ - const float *smoothingWin, /* i : Smoothing Window */ - const int16_t smoothing_flag /* i : 1=Smoothing window, 0=Original window */ -) -{ - int16_t i; - int16_t L; - - L = L_FRAME8k; - if ( smoothing_flag == 0 ) - { - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - ImdctOutWin[i] = ImdctOut[L / 2 + i] * win[( 2 * L - 1 - i ) - N_LEAD_O_NB]; - } - - for ( i = 0; i < N_ZERO_O_NB; i++ ) - { - ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i] * win[( 3 * L / 2 - 1 - i ) - N_LEAD_O_NB]; - ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[( L / 2 - i - 1 )]; - } - } - else - { - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - ImdctOutWin[i] = ImdctOut[L / 2 + i] * smoothingWin[( i - N_ZERO_NB )]; /*win[(2*L-i)*decimate-1-decay-14*L_FRAME48k/20];*/ - } - - for ( i = 0; i < N_ZERO_O_NB; i++ ) - { - ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i] * smoothingWin[( i + N_ZERO_O_NB )]; /*win[(3*L/2-1-i)*decimate+decay-L_FRAME48k*14/20];*/ - ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[( L / 2 - i - 1 )]; - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * Windowing_2nd() - * - * - *--------------------------------------------------------------------------*/ - -static void Windowing_2nd_NB( - float *ImdctOutWin, /* o : Output */ - const float *ImdctOut, /* i : Input */ - const float *win /* i : Window */ -) -{ - int16_t i; - int16_t L; - - L = L_FRAME8k; - for ( i = N_ZERO_O_NB; i < L / 2; i++ ) - { - ImdctOutWin[L / 2 + i] = -ImdctOut[L - 1 - i]; - ImdctOutWin[3 * L / 2 + i] = -ImdctOut[i] * win[L / 2 - i - 1]; - } - - for ( i = 0; i < N_ZERO_NB; i++ ) - { - ImdctOutWin[L + i] = -ImdctOut[L / 2 - 1 - i]; - } - - for ( i = N_ZERO_NB; i < L / 2; i++ ) - { - ImdctOutWin[L + i] = -ImdctOut[L / 2 - 1 - i] * win[L - 1 - i]; - } - - return; -} - -/*--------------------------------------------------------------------------* - * common_overlapping() - * - * - *--------------------------------------------------------------------------*/ - -static void common_overlapping( - float *auOut, /* i : Input */ - float *ImdctOutWin, /* o : Output */ - float *OldauOut, /* i : Window */ - const int16_t end1, /* i : Decay */ - const int16_t offset1, - const int16_t start2, - const int16_t end2, - const int16_t offset_i2, - const int16_t offset2 ) -{ - int16_t i; - - /* Common Overlapping */ - for ( i = 0; i < end1; i++ ) - { - auOut[i] = ImdctOutWin[i + N_ZERO_NB] + OldauOut[i + offset1]; - } - for ( i = start2; i < end2; i++ ) - { - auOut[i + offset2] = ImdctOutWin[i + offset_i2]; - } - - return; -} - - -/*--------------------------------------------------------------------------* - * Smoothing_vector() - * - * - *--------------------------------------------------------------------------*/ - -static void Smoothing_vector_NB( - const float OldauOutnoWin[], /* i : Input vector 1 */ - const float ImdctOutWin[], /* i : Input vector 2 */ - const float SmoothingWin[], /* i : Smoothing window */ - float auOut[], /* o : Output vector that contains vector 1 .* vector 2 */ - const int16_t ol_size /* i : Overlap size */ -) -{ - int16_t i; - float weight; - - for ( i = 0; i < ol_size; i++ ) - { - weight = SmoothingWin[i]; - auOut[i] = ( OldauOutnoWin[i] * ( 1.f - weight ) ) + ( ImdctOutWin[i] * weight ); - } - - return; -} - -/*--------------------------------------------------------------------------* - * Smoothing_vector_scaledown() - * - * - *--------------------------------------------------------------------------*/ - -static void Smoothing_vector_scaledown_NB( - const float OldauOutnoWin[], /* i : Input vector 1 */ - const float ImdctOutWin[], /* i : Input vector 2 */ - const float SmoothingWin[], /* i : Smoothing window */ - float auOut[], /* o : Output vector that contains vector 1 .* vector 2 */ - const int16_t ol_size /* i : Overlap size */ -) -{ - int16_t i; - float weight; - - for ( i = 0; i < ol_size; i++ ) - { - weight = SmoothingWin[i]; - auOut[i] = ( OldauOutnoWin[i] * ( 1.f - weight ) ) + ( ImdctOutWin[i] * SCALE_DOWN_3dB * weight ); - } - - return; -} - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * time_domain_FEC_HQ() - * - * - *--------------------------------------------------------------------------*/ - -void time_domain_FEC_HQ( - Decoder_State *st, /* i : Decoder State */ - float *wtda_audio, /* i : input */ - float *out, /* o : output audio */ - const float mean_en_high, /* i : transient flag */ - const int16_t output_frame /* i : Frame size */ -) -{ - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - HQ_NBFEC_HANDLE hHQ_nbfec = st->hHQ_nbfec; - - if ( ( st->nbLostCmpt == 1 ) && ( hHQ_nbfec->phase_mat_flag == 1 ) && ( hHQ_nbfec->phase_mat_next == 0 ) ) - { - if ( FEC_phase_matching( hHQ_nbfec, wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha ) ) - { - window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - hHQ_nbfec->phase_mat_next = 0; - } - else - { - hHQ_nbfec->phase_mat_next = 1; - } - } - else if ( ( st->prev_bfi == 1 ) && ( st->bfi == 0 ) && ( hHQ_nbfec->phase_mat_next == 1 ) ) - { - FEC_phase_matching_nextgood( wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha, mean_en_high ); - hHQ_nbfec->phase_mat_next = 0; - } - else if ( ( st->prev_bfi == 1 ) && ( st->bfi == 1 ) && ( hHQ_nbfec->phase_mat_next == 1 ) ) - { - FEC_phase_matching_burst( wtda_audio, out, hHQ_core->old_out, hHQ_nbfec->old_out_pha, hHQ_nbfec->prev_oldauOut ); - hHQ_nbfec->phase_mat_next = 1; - } - else - { - if ( st->bfi == 0 && st->prev_bfi == 1 ) - { - if ( ( hHQ_nbfec->stat_mode_out == 1 ) || ( hHQ_nbfec->diff_energy < ED_THRES_50P ) ) /* hHQ_nbfec->diff_energyoldIMDCTout, hHQ_core->old_out, st->old_bfi_cnt > 1 ? 1 : 0, N_LEAD_NB ); - } - else if ( st->old_bfi_cnt > 1 ) - { - Next_good_after_burst_erasures( wtda_audio, out, hHQ_core->old_out, N_LEAD_NB ); - } - else - { - window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - } - else /* if(st->bfi == 1) */ - { - if ( ( hHQ_nbfec->stat_mode_out == 1 ) || ( hHQ_nbfec->diff_energy < ED_THRES_50P ) ) - { - if ( Repetition_smoothing( wtda_audio, out, hHQ_nbfec->oldIMDCTout, hHQ_core->old_out, output_frame, hHQ_nbfec->prev_oldauOut, N_LEAD_NB ) ) - { - window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - } - else - { - window_ola( wtda_audio, out, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - } - - hHQ_nbfec->phase_mat_next = 0; - } - - return; -} -#endif - -/*--------------------------------------------------------------------------* - * Next_good_after_burst_erasures() - * - * Windowing, Overlap and Add - *--------------------------------------------------------------------------*/ - -void Next_good_after_burst_erasures( - const float *ImdctOut, /* i : input */ - float *auOut, /* o : output audio */ - float *OldauOut, /* i/o: audio from previous frame */ - const int16_t ol_size /* i : overlap size */ -) -{ - float ImdctOutWin[2 * L_FRAME8k]; - int16_t i, L; - float win_NB[L_FRAME8k + 25]; - - L = L_FRAME8k; - for ( i = 0; i < L + 25; i++ ) - { - win_NB[i] = window_48kHz[i * 6 + 3]; - } - - /* Windowing */ - Windowing_1st_NB( ImdctOutWin, ImdctOut, win_NB, NULL, 0 ); - Windowing_2nd_NB( ImdctOutWin, ImdctOut, win_NB ); - - /* Overlapping with next good frame : Overlapping to remove the discontinuity */ - Smoothing_vector_scaledown_NB( &OldauOut[N_ZERO_NB], &ImdctOutWin[N_Z_L_O_NB], SmoothingWin_NB875, &OldauOut[N_ZERO_NB], ol_size ); - - /* Scale down the overlapped signal */ - v_multc( &ImdctOutWin[ol_size + N_Z_L_O_NB], SCALE_DOWN_3dB, &OldauOut[ol_size + N_ZERO_NB], N_Z_L_NB - ol_size ); - - /* Common Overlapping */ - common_overlapping( auOut, ImdctOutWin, OldauOut, N_Z_L_NB, N_ZERO_NB, 0, N_ZERO_NB, L, N_Z_L_NB ); - mvr2r( &ImdctOutWin[L], OldauOut, L ); - - return; -} - -/*-------------------------------------------------------------------------- - * save_synthesis_hq_fec() - * - * Save synthesis for HQ FEC - *-------------------------------------------------------------------------*/ - -void save_synthesis_hq_fec( - Decoder_State *st, /* i/o: decoder state structure */ - const float *output, /* i : decoded synthesis */ - const int16_t output_frame, /* i : decoded synthesis */ - CPE_DEC_HANDLE hCPE /* i : CPE decoder structure */ -) -{ - int16_t post_hq_delay; - - switch ( st->element_mode ) - { - case EVS_MONO: - post_hq_delay = NS2SA( st->output_Fs, POST_HQ_DELAY_NS ); - break; - case IVAS_SCE: - post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - break; - case IVAS_CPE_DFT: - if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - post_hq_delay = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - } - else - { - post_hq_delay = 0; - } - break; - default: - post_hq_delay = 0; - break; - } - - - if ( ( st->codec_mode == MODE1 && st->hTcxDec != NULL ) && ( ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) || st->core == HQ_CORE ) ) - { - mvr2r( st->hTcxDec->synth_history + output_frame, st->hTcxDec->synth_history, output_frame - post_hq_delay + NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); - mvr2r( output, st->hTcxDec->old_synthFB + output_frame - post_hq_delay, output_frame ); - - if ( st->element_mode == EVS_MONO ) - { - /* reset the remaining buffer, which is read in TCX concealment the necessary samples to fill - this buffer are not available for all cases, the impact on the output is limited */ - set_f( st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, 0.f, post_hq_delay ); - if ( output_frame >= L_FRAME16k ) - { - mvr2r( st->prev_synth_buffer, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); - } - else - { - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - - if ( st->core != ACELP_CORE ) - { - if ( output_frame >= L_FRAME16k ) - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_CLDFB_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - else - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ), NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame - NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - } - } - else - { - if ( st->core != ACELP_CORE ) - { - mvr2r( st->delay_buf_out, st->hTcxDec->old_synthFB + 2 * output_frame - post_hq_delay, post_hq_delay ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + 2 * output_frame, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void save_synthesis_hq_fec_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word32 output_fx[], /* i : decoded synthesis */ @@ -1626,4 +134,3 @@ void save_synthesis_hq_fec_fx( } return; } -#endif diff --git a/lib_dec/FEC_HQ_core_fx.c b/lib_dec/FEC_HQ_core_fx.c index a72d87b8a..01002b56b 100644 --- a/lib_dec/FEC_HQ_core_fx.c +++ b/lib_dec/FEC_HQ_core_fx.c @@ -6,15 +6,12 @@ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 FEC_phase_matching_fx( HQ_NBFEC_HANDLE st_fx, Word32 *ImdctOut_fx, Word16 *auOut_fx, Word16 *OldauOut_fx, Word16 OldauOut_pha_fx[2][N_LEAD_NB] ); static void FEC_phase_matching_nextgood_fx( const Word32 *ImdctOut_fx, Word16 *auOut_fx, Word16 *OldauOut_fx, Word16 OldauOut_pha_fx[2][N_LEAD_NB], Word16 mean_en_high_fx ); static void FEC_phase_matching_burst_fx( const Word32 *ImdctOut_fx, Word16 *auOut_fx, Word16 *OldauOut_fx, Word16 OldauOut_pha_fx[2][N_LEAD_NB], Word16 *prev_oldauOut_fx ); @@ -27,14 +24,12 @@ static void Windowing_2nd_NB_fx( Word16 *ImdctOutWin_fx, const Word32 *ImdctOut_ static void Scaledown_fx( Word16 x[], Word16 y[], Word16 scale_v, const Word16 N ); static void Next_good_after_burst_erasures_fx( const Word32 *ImdctOut_fx, Word16 *auOut_fx, Word16 *OldauOut_fx, const Word16 ol_size ); static void common_overlapping_fx( Word16 *auOut_fx, Word16 *ImdctOutWin_fx, Word16 *OldauOut_fx, Word16 end1, Word16 offset1, Word16 start2, Word16 end2, Word16 offset_i2, Word16 offset2 ); -#endif /*--------------------------------------------------------------------------* * Regression_Anal() * * *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void Regression_Anal_fx( const Word32 *values_fx, /* i : Previous values */ // Q12 @@ -425,9 +420,7 @@ void HQ_FEC_processing_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_HQ_FEC_Mem_update_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word32 *t_audio_q_fx, /*Q12*/ @@ -718,9 +711,7 @@ void ivas_HQ_FEC_Mem_update_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void HQ_FEC_Mem_update_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word32 *t_audio_q_fx, /*Q12*/ @@ -1024,9 +1015,7 @@ void HQ_FEC_Mem_update_fx( #endif return; } -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 find_best_delay_fx( Word16 *mu_o_fx, // Qx Word16 *in_fx, // Qx @@ -1434,9 +1423,7 @@ static void FEC_phase_matching_nextgood_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void FEC_phase_matching_burst_fx( const Word32 *ImdctOut_fx, /* i : input Q6 */ Word16 *auOut_fx, /* o : output audio Q0 */ @@ -2028,7 +2015,6 @@ static void Next_good_after_burst_erasures_fx( return; } -#endif #ifdef ADD_IVAS_HQ_CODE_FEC /*-------------------------------------------------------------------------- diff --git a/lib_dec/FEC_HQ_phase_ecu.c b/lib_dec/FEC_HQ_phase_ecu.c index 7a46d308b..2df90bf11 100644 --- a/lib_dec/FEC_HQ_phase_ecu.c +++ b/lib_dec/FEC_HQ_phase_ecu.c @@ -42,2194 +42,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define FEC_MAX 512 -#define FEC_NB_PULSE_MAX 20 -#define FEC_FFT_MAX_SIZE 512 -#define FEC_DCIM_FILT_SIZE_MAX 60 - -#define PHASE_DITH ( PI2 ) - -#define DELTA_CORR 6 /* Range for phase correction around peak */ -#ifndef IVAS_FLOAT_FIXED -#define THRESH_TR_dB 10.0f -#define THRESH_TR_LIN (float) pow( 10.0f, THRESH_TR_dB / 10.0f ) -#define THRESH_TR_LIN_INV (float) pow( 10.0f, -THRESH_TR_dB / 10.0f ) -#define MAX_INCREASE_GRPOW 0.0f /* maximum amplification in case of transients */ -#define MAX_INCREASE_GRPOW_LIN (float) pow( 10.0f, MAX_INCREASE_GRPOW / 10.0f ) - -#define PHASE_DITH_SCALE (float) pow( 2.0, -16.0 ) /* for scaling random short values to +/- pi */ -#endif // !IVAS_FLOAT_FIXED - -#define BURST_PHDITH_THRESH ( 4 - 1 ) /* speech start phase dither with losses in a row */ -#define BURST_PHDITH_RAMPUP_LEN 2 /* speech ramp up degree of phase dither over a length of frames */ -#define BURST_ATT_THRESH ( 3 - 1 ) /* speech start attenuate with losses in a row */ -#define ATT_PER_FRAME 4 /* speech attenuation in dB */ -#define BETA_MUTE_THR 10 /* time threshold to start beta-noise attenuation */ -#ifndef IVAS_FLOAT_FIXED -#define BETA_MUTE_FAC 0.5f /* attenuation factor per additional bad frame */ -#endif // !IVAS_FLOAT_FIXED - -#define LGW32k 7 -#define LGW16k 6 -#define LGW48k LGW32k + 1 /* Use the same frequency groups as for SWB + 1 */ - -#define L_TRANA_LOG32k 8 -#define L_TRANA_LOG16k 7 - -#define DELTA_CORR_F0_INT 2 /* Constant controls the bin range where Jacobsen is used */ -#ifndef IVAS_FLOAT_FIXED -#define ST_PFIND_SENS 0.93f /* peakfinder sensitivity */ -#endif -#define L_PROT_NS 32000000L /* Prototype frame length in nanoseconds (32 ms) */ -#ifndef IVAS_FLOAT_FIXED -#define PH_ECU_CORR_LIMIT 0.85f /* Correlation limit for IVAS Phase ECU activation */ -#endif // !IVAS_FLOAT_FIXED -#define PH_ECU_N_LIMIT 56 /* fec_alg analysis frame limit for IVAS Phase ECU activation */ -#ifndef IVAS_FLOAT_FIXED -#define PFIND_SENS 0.97f /* peakfinder sensitivity */ -#endif // !IVAS_FLOAT_FIXED - -/*---------------------------------------------------------------------* - * Local functions - *---------------------------------------------------------------------*/ - -static int16_t rand_phase( const int16_t seed, float *sin_F, float *cos_F ); -static float imax2_jacobsen_mag( const float *y_re, const float *y_im ); - -/*-------------------------------------------------------------------* - * mult_rev2() - * - * Multiplication of two vectors second vector is multiplied in reverse order - *-------------------------------------------------------------------*/ - - -static void mult_rev2( - const float x1[], /* i : Input vector 1 */ - const float x2[], /* i : Input vector 2 */ - float y[], /* o : Output vector that contains vector 1 .* vector 2 */ - const int16_t N /* i : Vector length */ -) -{ - int16_t i, j; - - for ( i = 0, j = N - 1; i < N; i++, j-- ) - { - y[i] = x1[i] * x2[j]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * fft_spec2() - * - * Square magnitude of fft spectrum - *-------------------------------------------------------------------*/ - -static void fft_spec2( - float x[], /* i/o: Input vector: complex spectrum -> square magnitude spectrum */ - const int16_t N /* i : Vector length */ -) -{ - int16_t i, j; - - for ( i = 1, j = N - 1; i < N / 2; i++, j-- ) - { - x[i] = x[i] * x[i] + x[j] * x[j]; - } - - x[0] *= x[0]; - x[N / 2] *= x[N / 2]; - - return; -} - - -/*------------------------------------------------------------------* - * rand_phase() - * - * randomized phase in form of sin and cos components - *------------------------------------------------------------------*/ - -/*! r: Updated seed from RNG */ -static int16_t rand_phase( - const int16_t seed, /* i : RNG seed */ - float *sin_F, /* o : random phase sin value */ - float *cos_F /* o : random phase cos value */ -) -{ - const float *sincos = sincos_t_ext + 128; - int16_t seed2 = seed; - own_random( &seed2 ); - - if ( seed2 & 0x40 ) - { - *sin_F = sincos[seed2 >> 8]; - } - else - { - *sin_F = -sincos[seed2 >> 8]; - } - - if ( seed2 & 0x80 ) - { - *cos_F = sincos[-( seed2 >> 8 )]; - } - else - { - *cos_F = -sincos[-( seed2 >> 8 )]; - } - - return seed2; -} - - -/*----------------------------------------------------------------------------- - * imax2_jacobsen_mag() - * - * refine peak interpolation using jacobsen and periodic speca ana windows - *----------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -/*! r: The location, relative to the middle of the 3 given data point, of the maximum. (Q15)*/ -float imax2_jacobsen_mag( - const float *y_re, /* i : The 3 given data points. real part order -1 0 1 */ - const float *y_im /* i : The 3 given data points. imag part order 1 0 -1 (from FFT) */ -) -{ - float posi; - const float *pY; - float y_m1_re, y_0_re, y_p1_re; - float y_m1_im, y_0_im, y_p1_im; - float N_re, N_im; - float D_re, D_im; - float numer, denom; - -/* Jacobsen estimates peak offset relative y_0 using - * X_m1 - X_p1 - * d = REAL ( ------------------- ) * c_jacob - * 2*X_0 - X_m1 -Xp1 - * - * Where c_jacob is a window dependent constant - */ -#define C_JACOB 1.1453f /* % assume 0.1875 hammrect window 'symmetric' */ - - /* Get the bin parameters into variables */ - pY = y_re; - y_m1_re = *pY++; - y_0_re = *pY++; - y_p1_re = *pY++; - - /* Same for imaginary parts - note reverse order from FFT */ - pY = y_im; - y_p1_im = *pY++; - y_0_im = *pY++; - y_m1_im = *pY++; - - /* prepare numerator real and imaginary parts*/ - N_re = y_m1_re - y_p1_re; - N_im = y_m1_im - y_p1_im; - - /* prepare denominator real and imaginary parts */ - - D_re = 2 * y_0_re - y_m1_re - y_p1_re; - D_im = 2 * y_0_im - y_m1_im - y_p1_im; - - /* REAL part of complex division */ - numer = N_re * D_re + N_im * D_im; - denom = D_re * D_re + D_im * D_im; - - test(); - if ( numer != 0 && denom != 0 ) - { - posi = numer / denom * C_JACOB; - } - else - { - posi = 0; /* flat top, division is not possible choose center freq */ - } - - return posi; -} - - -/*------------------------------------------------------------------* - * trans_ana() - * - * Transient analysis - *------------------------------------------------------------------*/ - - -static void trans_ana( - const float *xfp, /* i : Input signal */ - float *mag_chg, /* i/o: Magnitude modification */ - float *ph_dith, /* i/o: Phase dither */ - float *mag_chg_1st, /* i/o: per band magnitude modifier for transients */ - const int16_t output_frame, /* i : Frame length */ - const int16_t time_offs, /* i : Time offset */ - const float est_mus_content, /* i : 0.0=speech_like ... 1.0=Music (==st->env_stab ) */ - const int16_t last_fec, /* i : signal that previous frame was concealed with fec_alg*/ - float *alpha, /* o : Magnitude modification factors for fade to average */ - float *beta, /* o : Magnitude modification factors for fade to average */ - float *beta_mute, /* o : Factor for long-term mute */ - float Xavg[LGW_MAX] /* o : Frequency group average gain to fade to */ -) -{ - const float *w_hamm; - float grp_pow_chg, att_val, att_degree; - float xfp_left[L_TRANA48k], xfp_right[L_TRANA48k]; - float gr_pow_left[LGW_MAX], gr_pow_right[LGW_MAX]; - const float *xfp_; - int16_t Ltrana, Ltrana_2, Lprot, LtranaLog = 0, Lgw, k, burst_len; - int16_t att_always[LGW_MAX]; /* fixed attenuation per frequency group if set to 1*/ - int16_t burst_phdith_thresh; - int16_t burst_att_thresh; - float att_per_frame; - int16_t tr_dec[LGW_MAX]; - - /* check burst error */ - burst_len = time_offs / output_frame + 1; - - set_s( att_always, 0, LGW_MAX ); - *ph_dith = 0.0f; - - /* softly shift attenuation just a bit later for estimated "stable" music_content */ - burst_phdith_thresh = BURST_PHDITH_THRESH + (int16_t) ( est_mus_content * 1.0f + 0.5f ); - burst_att_thresh = BURST_ATT_THRESH + (int16_t) ( est_mus_content * 1.0f + 0.5f ); - att_per_frame = (float) ( ATT_PER_FRAME - (int16_t) ( est_mus_content * 1.0f + 0.5f ) ); /* only slighty less att for music */ - att_per_frame *= 0.1f; - - if ( burst_len > burst_phdith_thresh ) - { - /* increase degree of dither */ - *ph_dith = PHASE_DITH * min( 1.0f, ( (float) burst_len - (float) burst_phdith_thresh ) / (float) BURST_PHDITH_RAMPUP_LEN ); - } - - att_degree = 0; - if ( burst_len > burst_att_thresh ) - { - set_s( att_always, 1, LGW_MAX ); - - /* increase degree of attenuation */ - if ( burst_len - burst_att_thresh <= PH_ECU_MUTE_START ) - { - att_degree = (float) ( burst_len - burst_att_thresh ) * att_per_frame; - } - else - { - att_degree = (float) PH_ECU_MUTE_START * att_per_frame + ( burst_len - burst_att_thresh - PH_ECU_MUTE_START ) * 6.0206f; - } - } - - Lprot = ( 2 * output_frame * 4 ) / 5; /* 4/5==1024/1280, keep mult within short */ - Ltrana = Lprot / QUOT_LPR_LTR; - Ltrana_2 = Ltrana / 2; - - if ( output_frame == L_FRAME48k ) - { - w_hamm = w_hamm48k_2; - Lgw = LGW48k; - } - else if ( output_frame == L_FRAME32k ) - { - w_hamm = w_hamm32k_2; - LtranaLog = L_TRANA_LOG32k; - Lgw = LGW32k; - } - else - { - w_hamm = w_hamm16k_2; - LtranaLog = L_TRANA_LOG16k; - Lgw = LGW16k; - } - - if ( burst_len <= 1 || ( burst_len == 2 && last_fec ) ) - { - set_f( alpha, 1.0f, LGW_MAX ); - set_f( beta, 0.0f, LGW_MAX ); - *beta_mute = BETA_MUTE_FAC_INI_FLT; - - /* apply hamming window */ - v_mult( xfp, w_hamm, xfp_left, Ltrana_2 ); - mult_rev2( xfp + Ltrana_2, w_hamm, xfp_left + Ltrana_2, Ltrana_2 ); - - xfp_ = xfp + Lprot - Ltrana; - v_mult( xfp_, w_hamm, xfp_right, Ltrana_2 ); - mult_rev2( xfp_ + Ltrana_2, w_hamm, xfp_right + Ltrana_2, Ltrana_2 ); - - /* spectrum */ - if ( output_frame == L_FRAME48k ) - { - fft3( xfp_left, xfp_left, Ltrana ); - fft3( xfp_right, xfp_right, Ltrana ); - } - else - { - fft_rel( xfp_left, Ltrana, LtranaLog ); - fft_rel( xfp_right, Ltrana, LtranaLog ); - } - - /* square representation */ - fft_spec2( xfp_left, Ltrana ); - fft_spec2( xfp_right, Ltrana ); - - /* band powers in frequency groups - exclude bin at 0 and at EVS_PI from calculation */ - xfp_left[Ltrana_2] = 0.0f; - xfp_right[Ltrana_2] = 0.0f; - } - - for ( k = 0; k < Lgw; k++ ) - { - if ( burst_len <= 1 || ( burst_len == 2 && last_fec ) ) - { - gr_pow_left[k] = sum_f( xfp_left + gw[k], gw[k + 1] - gw[k] ); - gr_pow_right[k] = sum_f( xfp_right + gw[k], gw[k + 1] - gw[k] ); - - /* check if transient in any of the bands */ - gr_pow_left[k] += FLT_MIN; /* otherwise div by zero may occur */ - gr_pow_right[k] += FLT_MIN; - - Xavg[k] = (float) ( sqrt( 0.5f * ( gr_pow_left[k] + gr_pow_right[k] ) / (float) ( gw[k + 1] - gw[k] ) ) ); - - grp_pow_chg = gr_pow_right[k] / gr_pow_left[k]; - - /* dither phase in case of transient */ - /* separate transition detection and application of forced burst dithering */ - tr_dec[k] = ( grp_pow_chg > THRESH_TR_LIN ) || ( grp_pow_chg < THRESH_TR_LIN_INV ); - - /* magnitude modification */ - if ( tr_dec[k] || att_always[k] ) - { - att_val = min( MAX_INCREASE_GRPOW_LIN, grp_pow_chg ); - att_val = (float) sqrt( att_val ); - mag_chg_1st[k] = att_val; - mag_chg[k] = att_val; - } - else - { - mag_chg_1st[k] = 1.0f; - mag_chg[k] = 1.0f; - } - } - else - { - if ( burst_len < OFF_FRAMES_LIMIT ) - { - mag_chg[k] = mag_chg_1st[k] * (float) pow( 10.0, -att_degree / 20.0 ); - } - else - { - mag_chg[k] = 0; - } - if ( burst_len > BETA_MUTE_THR ) - { - *beta_mute *= BETA_MUTE_FAC; - } - alpha[k] = mag_chg[k]; - beta[k] = (float) ( sqrt( 1.0f - SQR( alpha[k] ) ) * *beta_mute ); - if ( k >= LGW32k - 1 ) - { - beta[k] *= 0.1f; - } - else if ( k >= LGW16k - 1 ) - { - beta[k] *= 0.5f; - } - } - } - - return; -} - - -/*------------------------------------------------------------------* - * peakfinder() - * - * Peak-picking algorithm - *------------------------------------------------------------------*/ - -void peakfinder( - const float *x0, /* i : vector from which the maxima will be found */ - const int16_t len0, /* i : length of input vector */ - int16_t *plocs, /* o : the indicies of the identified peaks in x0 */ - int16_t *cInd, /* o : number of identified peaks */ - const float sel, /* i : The amount above surrounding data for a peak to be identified */ - const int16_t endpoints /* i : Flag to include endpoints in peak search */ -) -{ - float minMag, tempMag, leftMin; - float dx0[L_PROT48k_2], x[L_PROT48k_2 + 1], peakMag[MAX_PLOCS]; - int16_t k, i, len, tempLoc = 0, foundPeak, ii, xInd; - int16_t *ind, indarr[L_PROT48k_2 + 1], peakLoc[MAX_PLOCS]; - - ind = indarr; - - /* Find derivative */ - v_sub( x0 + 1, x0, dx0, len0 - 1 ); - - /* This is so we find the first of repeated values */ - for ( i = 0; i < len0 - 1; i++ ) - { - if ( dx0[i] == 0.0f ) - { - dx0[i] = -1.0e-12f; - } - } - - /* Find where the derivative changes sign - Include endpoints in potential peaks and valleys */ - k = 0; - - if ( endpoints ) - { - x[k] = x0[0]; - ind[k++] = 0; - } - - for ( i = 1; i < len0 - 1; i++ ) - { - if ( dx0[i - 1] * dx0[i] < 0 ) - { - ind[k] = i; - x[k++] = x0[i]; - } - } - - if ( endpoints ) - { - ind[k] = len0 - 1; - x[k++] = x0[len0 - 1]; - } - /* x only has the peaks, valleys, and endpoints */ - len = k; - minimum( x, len, &minMag ); - - if ( ( len > 2 ) || ( !endpoints && ( len > 0 ) ) ) - { - /* Set initial parameters for loop */ - tempMag = minMag; - foundPeak = 0; - leftMin = minMag; - - if ( endpoints ) - { - /* Deal with first point a little differently since tacked it on - Calculate the sign of the derivative since we taked the first point - on it does not necessarily alternate like the rest. */ - - /* The first point is larger or equal to the second */ - if ( x[0] >= x[1] ) - { - ii = -1; - if ( x[1] >= x[2] ) /* x[1] is not extremum -> overwrite with x[0] */ - { - x[1] = x[0]; - ind[1] = ind[0]; - ind++; - len--; - } - } - else /* First point is smaller than the second */ - { - ii = 0; - if ( x[1] < x[2] ) /* x[1] is not extremum -> overwrite with x[0] */ - { - x[1] = x[0]; - ind[1] = ind[0]; - ind++; - len--; - } - } - } - else - { - ii = -1; /* First point is a peak */ - if ( len >= 2 ) - { - if ( x[1] >= x[0] ) - { - ii = 0; /* First point is a valley, skip it */ - } - } - } - *cInd = 0; - - /* Loop through extrema which should be peaks and then valleys */ - while ( ii < len - 1 ) - { - ii++; /* This is a peak */ - - /*Reset peak finding if we had a peak and the next peak is bigger - than the last or the left min was small enough to reset.*/ - if ( foundPeak ) - { - tempMag = minMag; - foundPeak = 0; - } - - /* Make sure we don't iterate past the length of our vector */ - if ( ii == len - 1 ) - { - break; /* We assign the last point differently out of the loop */ - } - - /* Found new peak that was larger than temp mag and selectivity larger - than the minimum to its left. */ - if ( ( x[ii] > tempMag ) && ( x[ii] > leftMin + sel ) ) - { - tempLoc = ii; - tempMag = x[ii]; - } - - ii++; /* Move onto the valley */ - - /* Come down at least sel from peak */ - if ( !foundPeak && ( tempMag > sel + x[ii] ) ) - { - foundPeak = 1; /* We have found a peak */ - leftMin = x[ii]; - peakLoc[*cInd] = tempLoc; /* Add peak to index */ - peakMag[*cInd] = tempMag; - ( *cInd )++; - } - else if ( x[ii] < leftMin ) /* New left minimum */ - { - leftMin = x[ii]; - } - } - - /* Check end point */ - if ( x[len - 1] > tempMag && x[len - 1] > leftMin + sel ) - { - peakLoc[*cInd] = len - 1; - peakMag[*cInd] = x[len - 1]; - ( *cInd )++; - } - else if ( !foundPeak && tempMag > minMag ) /* Check if we still need to add the last point */ - { - peakLoc[*cInd] = tempLoc; - peakMag[*cInd] = tempMag; - ( *cInd )++; - } - - /* Create output */ - for ( i = 0; i < *cInd; i++ ) - { - plocs[i] = ind[peakLoc[i]]; - } - } - else - { - if ( endpoints ) - { - /* This is a monotone function where an endpoint is the only peak */ - xInd = ( x[0] > x[1] ) ? 0 : 1; - peakMag[0] = x[xInd]; - if ( peakMag[0] > minMag + sel ) - { - plocs[0] = ind[xInd]; - *cInd = 1; - } - else - { - *cInd = 0; - } - } - else - { - /* Input constant or all zeros -- no peaks found */ - *cInd = 0; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * imax_pos() - * - * Get interpolated maximum position - *-------------------------------------------------------------------*/ - -/*! r: interpolated maximum position */ -float imax_pos( - const float *y /* i : Input vector for peak interpolation */ -) -{ - float posi, y1, y2, y3, y3_y1, y2i; - float ftmp_den1, ftmp_den2; - /* Seek the extrema of the parabola P(x) defined by 3 consecutive points so that P([-1 0 1]) = [y1 y2 y3] */ - y1 = y[0]; - y2 = y[1]; - y3 = y[2]; - y3_y1 = y3 - y1; - ftmp_den1 = ( y1 + y3 - 2 * y2 ); - ftmp_den2 = ( 4 * y2 - 2 * y1 - 2 * y3 ); - - if ( ftmp_den2 == 0.0f || ftmp_den1 == 0.0f ) - { - return ( 0.0f ); /* early exit with left-most value */ - } - - y2i = -0.125f * SQR( y3_y1 ) / ( ftmp_den1 ) + y2; - /* their corresponding normalized locations */ - posi = y3_y1 / ( ftmp_den2 ); - /* Interpolated maxima if locations are not within [-1,1], calculated extrema are ignored */ - if ( posi >= 1.0f || posi <= -1.0f ) - { - posi = y3 > y1 ? 1.0f : -1.0f; - } - else - { - if ( y1 >= y2i ) - { - posi = ( y1 > y3 ) ? -1.0f : 1.0f; - } - else if ( y3 >= y2i ) - { - posi = 1.0f; - } - } - - return posi + 1.0f; -} - - -/*-------------------------------------------------------------------* - * spec_ana() - * - * Spectral analysis - *-------------------------------------------------------------------*/ - -static void spec_ana( - const float *prevsynth, /* i : Input signal */ - int16_t *plocs, /* o : The indicies of the identified peaks */ - float *plocsi, /* o : Interpolated positions of the identified peaks */ - int16_t *num_plocs, /* o : Number of identified peaks */ - float *X_sav, /* o : Stored fft spectrum */ - const int16_t output_frame, /* i : Frame length */ - const int16_t bwidth, /* i : Encoded bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - float *noise_fac, /* o : for few peaks zeroing valleys decision making */ - const float pcorr ) -{ - int16_t i, Lprot, LprotLog2 = 0, hamm_len2 = 0, Lprot2_1, m; - float *pPlocsi; - int16_t *pPlocs; - int16_t currPlocs, endPlocs, Lprot2p1, nJacob; - int16_t n, k; - int16_t st_point; - int16_t end_point; - - float sig, noise, nsr; - float window_corr_step, window_corr; - const float *w_hamm = NULL; - float xfp[L_PROT48k]; - float Xmax, Xmin, sel; - int16_t stop_band_start; - int16_t stop_band_length; - - Lprot = 2 * output_frame * L_PROT32k / 1280; - Lprot2_1 = Lprot / 2 + 1; - - if ( output_frame == L_FRAME48k ) - { - w_hamm = w_hamm_sana48k_2; - hamm_len2 = L_PROT_HAMM_LEN2_48k; - } - else if ( output_frame == L_FRAME32k ) - { - w_hamm = w_hamm_sana32k_2; - hamm_len2 = L_PROT_HAMM_LEN2_32k; - LprotLog2 = 10; - } - else - { - w_hamm = w_hamm_sana16k_2; - hamm_len2 = L_PROT_HAMM_LEN2_16k; - LprotLog2 = 9; - } - - /* Apply hamming-rect window */ - mvr2r( prevsynth + hamm_len2, xfp + hamm_len2, Lprot - 2 * hamm_len2 ); - if ( element_mode == EVS_MONO ) - { - v_mult( prevsynth, w_hamm, xfp, hamm_len2 ); - mult_rev2( prevsynth + Lprot - hamm_len2, w_hamm, xfp + Lprot - hamm_len2, hamm_len2 ); - } - else - { - window_corr = w_hamm[0]; - window_corr_step = w_hamm[0] / hamm_len2; - for ( i = 0; i < hamm_len2; i++ ) - { - xfp[i] = prevsynth[i] * ( w_hamm[i] - window_corr ); - xfp[Lprot - i - 1] = prevsynth[Lprot - i - 1] * ( w_hamm[i] - window_corr ); - window_corr -= window_corr_step; - } - } - - /* Spectrum */ - if ( output_frame == L_FRAME48k ) - { - fft3( xfp, xfp, Lprot ); - } - else - { - fft_rel( xfp, Lprot, LprotLog2 ); - } - - /* Apply zeroing of non-coded FFT spectrum */ - if ( output_frame > inner_frame_tbl[bwidth] ) - { - stop_band_start = 128 << bwidth; - stop_band_length = Lprot - ( stop_band_start << 1 ); - stop_band_start = stop_band_start + 1; - set_f( xfp + stop_band_start, 0, stop_band_length ); - } - - mvr2r( xfp, X_sav, Lprot ); - - /* Magnitude representation */ - fft_spec2( xfp, Lprot ); - - for ( i = 0; i < Lprot2_1; i++ ) - { - xfp[i] = (float) sqrt( (double) xfp[i] ); - } - - /* Find maxima */ - maximum( xfp, Lprot2_1, &Xmax ); - minimum( xfp, Lprot2_1, &Xmin ); - if ( element_mode == EVS_MONO ) - { - sel = ( Xmax - Xmin ) * ( 1.0f - PFIND_SENS ); - } - else - { - sel = ( Xmax - Xmin ) * ( 1.0f - ST_PFIND_SENS ); - } - - peakfinder( xfp, Lprot2_1, plocs, num_plocs, sel, TRUE ); /* NB peak at xfp[0] and xfp Lprot2_1-1 may occur */ - - /* Currently not the pitch correlation but some LF correlation */ - if ( element_mode != EVS_MONO && *num_plocs > 50 && pcorr < 0.6f ) - { - *num_plocs = 0; - } - - if ( element_mode == EVS_MONO ) - { - /* Refine peaks */ - for ( m = 0; m < *num_plocs; m++ ) - { - if ( plocs[m] == 0 ) - { - plocsi[m] = plocs[m] + imax_pos( &xfp[plocs[m]] ); - } - else if ( plocs[m] == Lprot / 2 ) - { - plocsi[m] = plocs[m] - 2 + imax_pos( &xfp[plocs[m] - 2] ); - } - else - { - plocsi[m] = plocs[m] - 1 + imax_pos( &xfp[plocs[m] - 1] ); - } - } - } - else - { - - Lprot2p1 = Lprot / 2 + 1; - - /* Refine peaks */ - pPlocsi = plocsi; - pPlocs = plocs; - n = *num_plocs; /* number of peaks to process */ - - /* Special case-- The very 1st peak if it is at 0 index position (DC) */ - /* With DELTA_CORR_F0_INT == 2 one needs to handle both *pPlocs==0 and *pPlocs==1 */ - if ( n > 0 && *pPlocs == 0 ) /* Very 1st peak position possible to have a peak at 0/DC index position. */ - { - *pPlocsi++ = *pPlocs + imax_pos( &xfp[*pPlocs] ); - pPlocs++; - n = n - 1; - } - - if ( n > 0 && *pPlocs == 1 ) /* Also 2nd peak position uses DC which makes jacobsen unsuitable. */ - { - *pPlocsi++ = *pPlocs - 1 + imax_pos( &xfp[*pPlocs - 1] ); - currPlocs = *pPlocs++; - n = n - 1; - } - - /* All remaining peaks except the very last two possible integer positions */ - currPlocs = *pPlocs++; - endPlocs = Lprot2p1 - DELTA_CORR_F0_INT; /* last *pPlocs position for Jacobsen */ - - /* precompute number of turns based on endpoint integer location and make into a proper for loop */ - if ( n > 0 ) - { - nJacob = n; - if ( sub( endPlocs, plocs[sub( *num_plocs, 1 )] ) <= 0 ) - { - nJacob = sub( nJacob, 1 ); - } - - for ( k = 0; k < nJacob; k++ ) - { - *pPlocsi++ = currPlocs + imax2_jacobsen_mag( &( X_sav[currPlocs - 1] ), &( X_sav[Lprot - 1 - currPlocs] ) ); - currPlocs = *pPlocs++; - } - n = n - nJacob; - } - - /* At this point there should at most two plocs left to process */ - /* the position before fs/2 and fs/2 both use the same magnitude points */ - if ( n > 0 ) - { - /* [ . . . . . . . ] Lprot/2+1 positions */ - /* | | | */ - /* 0 (Lprot/2-2) (Lprot/2) */ - - if ( currPlocs == ( Lprot2p1 - DELTA_CORR_F0_INT ) ) /* Also 2nd last peak position uses fs/2 which makes jacobsen less suitable. */ - { - *pPlocsi++ = currPlocs - 1 + imax_pos( &xfp[currPlocs - 1] ); - currPlocs = *pPlocs++; - n = n - 1; - } - - /* Here the only remaining point would be a fs/2 plocs */ - /* pXfp = xfp + sub(Lprot2,1); already set just a reminder where it - * whould point */ - if ( n > 0 ) /* fs/2 which makes special case . */ - { - *pPlocsi++ = currPlocs - 2 + imax_pos( &xfp[currPlocs - 2] ); - currPlocs = *pPlocs++; - n = n - 1; - } - } - - /* For few peaks decide noise floor attenuation */ - if ( *num_plocs < 3 && *num_plocs > 0 ) - { - sig = sum_f( xfp, Lprot2_1 ) + EPSILON; - - /*excluding peaks and neighboring bins*/ - for ( i = 0; i < *num_plocs; i++ ) - { - st_point = max( 0, plocs[i] - DELTA_CORR ); - end_point = min( Lprot2_1 - 1, plocs[i] + DELTA_CORR ); - set_f( &xfp[st_point], 0.0f, end_point - st_point + 1 ); - } - noise = sum_f( xfp, Lprot2_1 ) + EPSILON; - nsr = noise / sig; - - if ( nsr < 0.03f ) - { - *noise_fac = 0.5f; - } - else - { - *noise_fac = 1.0f; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * subst_spec() - * - * Substitution spectrum calculation - *-------------------------------------------------------------------*/ - -static void subst_spec( - const int16_t *plocs, /* i : The indicies of the identified peaks */ - const float *plocsi, /* i : Interpolated positions of the identified peaks */ - int16_t *num_plocs, /* i/o: Number of identified peaks */ - const int16_t time_offs, /* i : Time offset */ - float *X, /* i/o: FFT spectrum */ - const float *mag_chg, /* i : Magnitude modification */ - const float ph_dith, /* i : Phase dither */ - const int16_t *is_trans, /* i : Transient flags */ - const int16_t output_frame, /* i : Frame length */ - int16_t *seed, /* i/o: Random seed */ - const float *alpha, /* i : Magnitude modification factors for fade to average */ - const float *beta, /* i : Magnitude modification factors for fade to average */ - float beta_mute, /* i : Factor for long-term mute */ - const float Xavg[LGW_MAX], /* i : Frequency group averages to fade to */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t ph_ecu_lookahead, /* i : Phase ECU lookahead */ - const float noise_fac /* i : noise factor */ - -) -{ - const float *sincos; - int16_t Xph_short; - float corr_phase[MAX_PLOCS], Xph; - float Lprot_1, cos_F, sin_F, tmp; - int16_t Lprot, Lecu, m, i, e, im_ind, delta_corr_up, delta_corr_dn, delta_tmp; - float mag_chg_local; /* for peak attenuation in burst */ - int16_t k; - float one_peak_flag_mask; - float alpha_local; - float beta_local; - - - sincos = sincos_t_ext + 128; - Lprot = (int16_t) ( L_PROT32k * output_frame / 640 ); - Lprot_1 = 1.0f / Lprot; - Lecu = output_frame * 2; - - /* Correction phase of the identified peaks */ - if ( is_trans[0] || is_trans[1] ) - { - *num_plocs = 0; - } - else - { - tmp = PI2 * ( Lecu - ( Lecu - Lprot ) / 2 + NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_ALDO_OLP2_NS ) - ph_ecu_lookahead - output_frame / 2 + time_offs ) * Lprot_1; - for ( m = 0; m < *num_plocs; m++ ) - { - corr_phase[m] = plocsi[m] * tmp; - } - } - one_peak_flag_mask = 1; /* all ones mask -> keep */ - if ( element_mode != EVS_MONO ) - { - if ( ( *num_plocs > 0 ) && sub( *num_plocs, 3 ) < 0 ) - { - one_peak_flag_mask = noise_fac; /* all zeroes mask -> zero */ - } - if ( *num_plocs == 0 ) - { - X[0] = 0; /* reset DC if there are no peaks */ - X[shr( Lprot, 1 )] = 0; /* also reset fs/2 if there are no peaks */ - } - } - - i = 1; - k = 0; - im_ind = Lprot - 1; - for ( m = 0; m < *num_plocs; m++ ) - { - delta_corr_dn = DELTA_CORR; - delta_corr_up = DELTA_CORR; - - if ( m > 0 ) - { - delta_tmp = ( plocs[m] - plocs[m - 1] - 1 ) / 2; - if ( delta_tmp < DELTA_CORR ) - { - delta_corr_dn = delta_tmp; - } - } - - if ( m < *num_plocs - 1 ) - { - delta_tmp = ( plocs[m + 1] - plocs[m] - 1 ) / 2; - if ( delta_tmp < DELTA_CORR ) - { - delta_corr_up = delta_tmp; - } - } - - /* Input Xph */ - while ( i < plocs[m] - delta_corr_dn ) - { - *seed = own_random( seed ); - - if ( *seed & 0x40 ) - { - sin_F = sincos[*seed >> 8]; - } - else - { - sin_F = -sincos[*seed >> 8]; - } - - if ( *seed & 0x80 ) - { - cos_F = sincos[-( *seed >> 8 )]; - } - else - { - cos_F = -sincos[-( *seed >> 8 )]; - } - - if ( element_mode == EVS_MONO ) - { - tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); - X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); - } - else - { - tmp = one_peak_flag_mask * ( X[i] * cos_F - X[im_ind] * sin_F ); - X[im_ind] = one_peak_flag_mask * ( X[i] * sin_F + X[im_ind] * cos_F ); - } - - if ( alpha[k] < 1.0f ) - { - *seed = rand_phase( *seed, &sin_F, &cos_F ); - X[i] = alpha[k] * tmp + beta[k] * Xavg[k] * cos_F; - X[im_ind] = alpha[k] * X[im_ind] + beta[k] * Xavg[k] * sin_F; - } - else - { - X[i] = mag_chg[k] * tmp; - X[im_ind] *= mag_chg[k]; - } - i++; - im_ind--; - if ( i >= ivas_gwlpr[k + 1] ) - { - k++; - } - } - - e = plocs[m] + delta_corr_up; - if ( e > Lprot / 2 - 1 ) - { - e = Lprot / 2 - 1; - } - - Xph = corr_phase[m]; - Xph_short = (int16_t) ( ( (int32_t) ( Xph * 512 / EVS_PI ) ) % 32768 ) & 0x03ff; - if ( Xph_short >= 512 ) - { - sin_F = -sincos_t_ext[Xph_short - 512]; - if ( Xph_short < 768 ) - { - cos_F = -sincos_t_ext[Xph_short - 512 + 256]; - } - else - { - cos_F = sincos_t_ext[-Xph_short + 1024 + 256]; - } - } - else - { - sin_F = sincos_t_ext[Xph_short]; - if ( Xph_short < 256 ) - { - cos_F = sincos_t_ext[Xph_short + 256]; - } - else - { - cos_F = -sincos_t_ext[-Xph_short + 256 + 512]; - } - } - - while ( i <= e ) - { - mag_chg_local = mag_chg[k]; - - if ( ph_dith != 0.0f ) - { - /* Call phase randomization only when needed */ - Xph = corr_phase[m]; - *seed = own_random( seed ); - Xph += *seed * ph_dith * PHASE_DITH_SCALE; /* where ph_dith is 0..2PI, or -2PI (in transient), bin phase scaling factor from trans_ana */ - - if ( ph_dith > 0.0f ) - { - /* up to 6 dB additional att of peaks in non_transient longer bursts, (when peak phase is randomized) */ - /* 0.5~= sqrt((float)pow(10.0,-6/10.0)); ph_dith= 0..2pi,--> scale=1.0 ...5 */ - mag_chg_local *= 0.5f + ( 1.0f - ( 1.0f / PHASE_DITH ) * ph_dith ) * 0.5f; - } - - Xph_short = (int16_t) ( Xph * 512 / EVS_PI ) & 0x03ff; - - if ( Xph_short >= 512 ) - { - sin_F = -sincos_t_ext[Xph_short - 512]; - if ( Xph_short < 768 ) - { - cos_F = -sincos_t_ext[Xph_short - 512 + 256]; - } - else - { - cos_F = sincos_t_ext[-Xph_short + 1024 + 256]; - } - } - else - { - sin_F = sincos_t_ext[Xph_short]; - if ( Xph_short < 256 ) - { - cos_F = sincos_t_ext[Xph_short + 256]; - } - else - { - cos_F = -sincos_t_ext[-Xph_short + 256 + 512]; - } - } - } - - tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); - X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); - if ( alpha[k] < 1.0f ) - { - alpha_local = mag_chg_local; - beta_local = (float) ( beta_mute * sqrt( 1.0f - SQR( alpha_local ) ) ); - if ( k >= LGW32k - 1 ) - { - beta_local *= 0.1f; - } - else if ( k >= LGW16k - 1 ) - { - beta_local *= 0.5f; - } - - *seed = rand_phase( *seed, &sin_F, &cos_F ); - X[i] = alpha_local * tmp + beta_local * Xavg[k] * cos_F; - X[im_ind] = alpha_local * X[im_ind] + beta_local * Xavg[k] * sin_F; - } - else - { - X[i] = mag_chg_local * tmp; - X[im_ind] *= mag_chg_local; - } - - i++; - im_ind--; - if ( i >= ivas_gwlpr[k + 1] ) - { - k++; - } - } - } - - while ( i < Lprot / 2 ) - { - *seed = own_random( seed ); - - if ( *seed & 0x40 ) - { - sin_F = sincos[*seed >> 8]; - } - else - { - sin_F = -sincos[*seed >> 8]; - } - - if ( *seed & 0x80 ) - { - cos_F = sincos[-( *seed >> 8 )]; - } - else - { - cos_F = -sincos[-( *seed >> 8 )]; - } - - - if ( element_mode == EVS_MONO ) - { - tmp = ( X[i] * cos_F - X[im_ind] * sin_F ); - X[im_ind] = ( X[i] * sin_F + X[im_ind] * cos_F ); - } - else - { - tmp = one_peak_flag_mask * ( X[i] * cos_F - X[im_ind] * sin_F ); - X[im_ind] = one_peak_flag_mask * ( X[i] * sin_F + X[im_ind] * cos_F ); - } - - if ( alpha[k] < 1.0f ) - { - *seed = rand_phase( *seed, &sin_F, &cos_F ); - X[i] = alpha[k] * tmp + beta[k] * Xavg[k] * cos_F; - X[im_ind] = alpha[k] * X[im_ind] + beta[k] * Xavg[k] * sin_F; - im_ind--; - } - else - { - X[i] = mag_chg[k] * tmp; - X[im_ind--] *= mag_chg[k]; - } - i++; - - if ( i >= ivas_gwlpr[k + 1] ) - { - k++; - } - } - - return; -} - - -/*-------------------------------------------------------------------------- - * rec_wtda() - * - * Windowing and TDA of reconstructed frame - *--------------------------------------------------------------------------*/ - -static void rec_wtda( - float *X, /* i/o: ECU frame / unwindowed ECU frame */ - float *ecu_rec, /* o : Reconstructed frame in tda domain */ - const int16_t output_frame, /* i : Frame length */ - const int16_t Lprot, /* i : Prototype frame length */ - const float old_dec[270], /* i : end of last decoded for OLA before tda and itda */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t *num_p, /* i : Number of peaks */ - const int16_t *plocs /* i : Peak locations */ -) -{ - int16_t timesh; - int16_t xf_len; - int16_t i; - float *p_ecu; - float g; - float tbl_delta; - float xsubst_[2 * L_FRAME48k]; - const float *w_hamm; - float *pX_start, *pX_end; - float tmp; - int16_t hamm_len2; - float *pNew; - const float *pOldW, *pNewW; - float xfwin[NS2SA( L_FRAME48k * FRAMES_PER_SEC, N_ZERO_MDCT_NS - ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 )]; - const float *pOld; - int16_t copy_len; - int16_t ola_len; - - copy_len = NS2SA( output_frame * FRAMES_PER_SEC, ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 ); /* prototype fill on each side of xsubst to fill MDCT Frame */ - ola_len = NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS - ( 2 * FRAME_SIZE_NS - L_PROT_NS ) / 2 ); /* remaining lengt of LA_ZEROS to overlap add decoded with xsubst */ - - if ( output_frame == L_FRAME48k ) - { - w_hamm = w_hamm_sana48k_2; - hamm_len2 = L_PROT_HAMM_LEN2_48k; - } - else if ( output_frame == L_FRAME32k ) - { - w_hamm = w_hamm_sana32k_2; - hamm_len2 = L_PROT_HAMM_LEN2_32k; - } - else - { - w_hamm = w_hamm_sana16k_2; - hamm_len2 = L_PROT_HAMM_LEN2_16k; - } - - if ( element_mode != EVS_MONO && *num_p > 0 && plocs[0] > 3 ) - { - /* Perform inverse windowing of hammrect */ - pX_start = X; - pX_end = X + Lprot - 1; - for ( i = 0; i < hamm_len2; i++ ) - { - tmp = 1.0f / *w_hamm; - *pX_start *= tmp; - *pX_end *= tmp; - pX_start++; - pX_end--; - w_hamm++; - } - } - - /* extract reconstructed frame with aldo window */ - timesh = NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ) - ( 2 * output_frame - Lprot ) / 2; - - set_f( xsubst_, 0.0f, 2 * output_frame - Lprot + timesh ); - mvr2r( X, xsubst_ + 2 * output_frame - Lprot + timesh, Lprot - timesh ); - - /* Copy and OLA look ahead zero part of MDCT window from decoded signal */ - if ( element_mode != EVS_MONO ) - { - mvr2r( old_dec, xsubst_ + NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ), copy_len ); /* also need to scale to Q0 ?? */ - pOld = old_dec + copy_len; - pNew = xsubst_ + copy_len + NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); - sinq( EVS_PI / ( ola_len * 2 ), 0.0f, ola_len, xfwin ); - v_mult( xfwin, xfwin, xfwin, ola_len ); /* xfwin = sin^2 of 0..pi/4 */ - pOldW = xfwin + ola_len - 1; - pNewW = xfwin; - for ( i = 0; i < ola_len; i++ ) - { - *pNew = *pOld * *pOldW + *pNew * *pNewW; - pOld += 1; - pNew += 1; - pOldW -= 1; - pNewW += 1; - } - } - else - { - /* Smoothen onset of ECU frame */ - xf_len = (int16_t) ( (float) output_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ) - ( output_frame - Lprot / 2 ); - p_ecu = xsubst_ + 2 * output_frame - Lprot + timesh; - tbl_delta = 64.f / xf_len; /* 64 samples = 1/4 cycle in sincos_t */ - for ( i = 0; i < xf_len; i++, p_ecu++ ) - { - g = sincos_t[( (int16_t) ( i * tbl_delta ) )]; - g *= g; - *p_ecu = g * ( *p_ecu ); - } - } - - /* Apply TDA and windowing to ECU frame */ - wtda( xsubst_ + output_frame, ecu_rec, NULL, ALDO_WINDOW, ALDO_WINDOW, output_frame ); - - return; -} - - -/*-------------------------------------------------------------------------- - * rec_frame() - * - * Frame reconstruction - *--------------------------------------------------------------------------*/ - -static void rec_frame( - float *X, /* i/o: FFT spectrum / IFFT of spectrum */ - float *ecu_rec, /* o : Reconstructed frame in tda domain */ - const int16_t output_frame, /* i : Frame length */ - const float *old_dec, /* i : end of last decoded for OLA before tda and itda */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t *num_p, /* i : Number of peaks */ - const int16_t *plocs /* i : Peak locations */ -) -{ - int16_t Lprot, LprotLog2 = 0; - - Lprot = 2 * output_frame * L_PROT32k / 1280; - - if ( output_frame == L_FRAME48k ) - { - LprotLog2 = 9; - } - else if ( output_frame == L_FRAME32k ) - { - LprotLog2 = 10; - } - else - { - LprotLog2 = 9; - } - - /* extend spectrum and IDFT */ - if ( output_frame == L_FRAME48k ) - { - ifft3( X, X, Lprot ); - } - else - { - ifft_rel( X, Lprot, LprotLog2 ); - } - - rec_wtda( X, ecu_rec, output_frame, Lprot, old_dec, element_mode, num_p, plocs ); - - return; -} - - -/*-------------------------------------------------------------------------- - * fir_dwn() - * - * FIR downsampling filter - *--------------------------------------------------------------------------*/ - -static void fir_dwn( - const float x[], /* i : input vector */ - const float h[], /* i : impulse response of the FIR filter */ - float y[], /* o : output vector (result of filtering) */ - const int16_t L, /* i : input vector size */ - const int16_t K, /* i : order of the FIR filter (K+1 coefs.) */ - const int16_t decimation /* i : decimation */ -) -{ - float s; - int16_t i, j, k, mmax; - - k = 0; - - /* do the filtering */ - for ( i = K / 2; i < L; i += decimation ) - { - s = x[i] * h[0]; - - if ( i < K ) - { - mmax = i; - } - else - { - mmax = K; - } - - for ( j = 1; j <= mmax; j++ ) - { - s += h[j] * x[i - j]; - } - - y[k] = s; - k++; - } - - for ( ; i < L + K / 2; i += decimation ) - { - s = 0; - - for ( j = i - L + 1; j <= K; j++ ) - { - s += h[j] * x[i - j]; - } - - y[k] = s; - k++; - } - - return; -} - - -/*-------------------------------------------------------------------------- - * fec_ecu_pitch() - * - * Pitch/correlation analysis and adaptive analysis frame length calculation - *--------------------------------------------------------------------------*/ - -static void fec_ecu_pitch( - const float *prevsynth, /* i : previous synthesis */ - float *prevsynth_LP, /* o : down-sampled synthesis */ - const int16_t L, /* i : Output frame length */ - int16_t *N, /* o : Analysis frame length in 8kHz */ - float *min_corr, /* o : correlation */ - int16_t *decimatefator, /* o : Decimation factor */ - const int16_t HqVoicing /* i : Hq voicing flag */ -) -{ - int16_t i, filt_size; - float accA, accB, accC, Ryy; - int16_t delay_ind, k, cb_start, cb_end, tmp_short, Lon20; - float Asr_LP[FEC_DCIM_FILT_SIZE_MAX + 1]; - - switch ( L ) - { - case L_FRAME48k: - *decimatefator = 6; - filt_size = 60; - mvr2r( Asr_LP48, Asr_LP, filt_size + 1 ); - break; - case L_FRAME32k: - *decimatefator = 4; - filt_size = 40; - mvr2r( Asr_LP32, Asr_LP, filt_size + 1 ); - break; - case L_FRAME16k: - *decimatefator = 2; - filt_size = 20; - mvr2r( Asr_LP16, Asr_LP, filt_size + 1 ); - break; - default: - *decimatefator = 2; - filt_size = 40; - mvr2r( Asr_LP16, Asr_LP, filt_size + 1 ); - break; - } - - /* We need to inverse the ALDO window */ - - /* Resampling to work at 8Khz */ - fir_dwn( prevsynth, Asr_LP, prevsynth_LP, 2 * L, filt_size, *decimatefator ); /* resampling without delay */ - - Lon20 = (int16_t) ( ( L / 20 ) / *decimatefator ); - - /* Correlation analysis */ - *min_corr = 0; - accC = 0; - for ( k = 0; k < 6 * Lon20; k++ ) - { - accC += prevsynth_LP[34 * Lon20 + k] * prevsynth_LP[34 * Lon20 + k]; - } - - if ( HqVoicing == 1 ) - { - cb_start = 0; - cb_end = 33 * Lon20; - } - else - { - cb_start = 0; - cb_end = 28 * Lon20; - } - - tmp_short = 34 * Lon20; - accB = 0; - delay_ind = cb_start; - for ( i = cb_start; i < cb_end; i++ ) /* cb_end = 35 let 6 ms min of loop size */ - { - accA = 0; - if ( i == cb_start ) - { - accB = 0; - for ( k = 0; k < 6 * Lon20; k++ ) - { - accA += prevsynth_LP[i + k] * prevsynth_LP[tmp_short + k]; - accB += prevsynth_LP[i + k] * prevsynth_LP[i + k]; - } - } - else - { - accB = accB - prevsynth_LP[i - 1] * prevsynth_LP[i - 1] + prevsynth_LP[i + 6 * Lon20 - 1] * prevsynth_LP[i + 6 * Lon20 - 1]; - for ( k = 0; k < 6 * Lon20; k++ ) - { - accA += prevsynth_LP[i + k] * prevsynth_LP[tmp_short + k]; - } - } - - /* tests to avoid division by zero */ - if ( accB <= 0 ) - { - accB = 1.0f; - } - - if ( accC <= 0 ) - { - accC = 1.0f; - } - - if ( accB * accC <= 0 ) - { - Ryy = accA; - } - else - { - Ryy = accA / (float) sqrt( ( accB * accC ) ); - } - - if ( Ryy > *min_corr ) - { - *min_corr = Ryy; - delay_ind = i; - } - - if ( HqVoicing == 0 && *min_corr > 0.95f ) - { - break; - } - } - - *N = 40 * Lon20 - delay_ind - 6 * Lon20; - - return; -} - - -/*-------------------------------------------------------------------------- - * fec_ecu_dft() - * - * DFT analysis on adaptive frame length. Analysis frame stretched to - * next power of 2 using linear interpolation. - *--------------------------------------------------------------------------*/ - -static void fec_ecu_dft( - const float *prevsynth_LP, /* i : Downsampled past synthesis (2*160 samples) */ - const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ - float *Tfr, /* o : DFT coefficients, real part */ - float *Tfi, /* o : DFT coefficients, imag part */ - float *sum_Tf_abs, /* o : Sum of magnitude spectrum */ - float *Tf_abs, /* o : Magnitude spectrum */ - int16_t *Nfft, /* o : DFT analysis length 2^(nextpow2(N)) */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - float target[2 * L_FRAME8k], tmp; - int16_t i, Lon20, tmp_short, N_LP, k; - int16_t alignment_point; - - Lon20 = (int16_t) 160 / 20; - if ( element_mode == EVS_MONO ) - { - alignment_point = 2 * 160 - 3 * Lon20; - } - else - { - alignment_point = 2 * 160; - } - - - for ( i = 0; i < N; i++ ) - { - target[i] = prevsynth_LP[alignment_point - N + i]; - } - - /* DFT */ - *sum_Tf_abs = 0; - *Nfft = (int16_t) pow( 2, (int16_t) ceil( log( N ) / log( 2 ) ) ); - tmp = ( (float) N - 1.0f ) / ( (float) *Nfft - 1.0f ); - - set_f( Tfr, 0.0f, *Nfft ); - set_f( Tfi, 0.0f, *Nfft ); - Tfr[0] = target[0]; - Tfr[*Nfft - 1] = target[N - 1]; - for ( i = 1; i < *Nfft - 1; i++ ) /* interpolation for FFT */ - { - tmp_short = (int16_t) floor( i * tmp ); - Tfr[i] = target[tmp_short] + ( (float) i * tmp - ( (float) tmp_short ) ) * ( target[tmp_short + 1] - target[tmp_short] ); - } - - DoRTFTn( Tfr, Tfi, *Nfft ); - N_LP = (int16_t) ceil( *Nfft / 2 ); - - for ( k = 0; k < N_LP; k++ ) - { - Tf_abs[k] = (float) sqrt( Tfr[k] * Tfr[k] + Tfi[k] * Tfi[k] ); - *sum_Tf_abs += Tf_abs[k]; - } - - return; -} -#endif - -/*--------------------------------------------------------------------------* - * singenerator() - * - * fast cosinus generator Amp*cos(2*pi*freq+phi) - *--------------------------------------------------------------------------*/ - -static void singenerator( - const int16_t L, /* i : size of output */ - const float cosfreq, /* i : cosine of 1-sample dephasing at the given frequency */ - const float sinfreq, /* i : sine of 1-sample dephasing at the given frequency */ - const float a_re, /* i : real part of complex spectral coefficient at the given frequency */ - const float a_im, /* i : imag part of complex spectral coefficient at the given frequency */ - float xx[] /* o : output vector */ -) -{ - - float *ptr, L_C0, L_S0, L_C1, L_S1; - float C0, S0, C1, S1; - int16_t i; - - L_C0 = a_re; - S0 = a_im; - - ptr = xx; - - *ptr = *ptr + L_C0; - ptr++; - - for ( i = 0; i < L / 2 - 1; i++ ) - { - C0 = L_C0; - L_C1 = C0 * cosfreq; - L_C1 = L_C1 - S0 * sinfreq; - L_S1 = C0 * sinfreq; - S1 = L_S1 + S0 * cosfreq; - *ptr = *ptr + L_C1; - ptr++; - - C1 = L_C1; - L_C0 = C1 * cosfreq; - L_C0 = L_C0 - S1 * sinfreq; - L_S0 = C1 * sinfreq; - S0 = L_S0 + S1 * cosfreq; - *ptr = *ptr + L_C0; - ptr++; - } - - C0 = L_C0; - L_C1 = C0 * cosfreq; - L_C1 = L_C1 - S0 * sinfreq; - *ptr = *ptr + L_C1; - ptr++; - - return; -} - - -/*-------------------------------------------------------------------------- - * sinusoidal_synthesis() - * - * ECU frame sinusoid generation - *--------------------------------------------------------------------------*/ - -static void sinusoidal_synthesis( - const float *Tfr, /* i : DFT coefficients, real part */ - const float *Tfi, /* i : DFT coefficients, imag part */ - float *Tf_abs, /* i : Magnitude spectrum */ - const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ - const int16_t L, /* i : Output frame length */ - const int16_t decimate_factor, /* i : Downsampling factor */ - const int16_t Nfft, /* i : DFT analysis length 2^(nextpow2(N)) */ - const float sum_Tf_abs, /* i : Sum of magnitude spectrum */ - float *synthesis, /* o : ECU sinusoidal synthesis */ - const int16_t HqVoicing /* i : HQ voicing flag */ -) -{ - int16_t i, k, nb_pulses, indmax = 0, nb_pulses_final; - int16_t pulses[FEC_MAX / 2]; - float a_re[FEC_NB_PULSE_MAX], a_im[FEC_NB_PULSE_MAX], cosfreq, sinfreq; - float freq[FEC_NB_PULSE_MAX], tmp; - float mmax, cumsum; - int16_t Lon20 = 8; - - /* peak selection */ - int16_t PL, cpt; - float old, new_s; - int16_t *p_pulses; - int16_t glued; - - p_pulses = pulses; - nb_pulses = 0; - new_s = Tf_abs[1]; - glued = 1; - cpt = 0; - old = 0; - - PL = 0; - if ( N > Lon20 * 10 || HqVoicing ) - { - PL = 1; - } - while ( cpt <= N / 2 - 1 - 2 ) - { - if ( Tf_abs[cpt] > old && Tf_abs[cpt] > new_s ) - { - glued = cpt; - - for ( i = glued; i < cpt + PL + 1; i++ ) - { - *p_pulses++ = i; - nb_pulses++; - } - old = Tf_abs[cpt + PL]; - new_s = Tf_abs[cpt + 2 + PL]; - cpt = cpt + PL + 1; - glued = 1; - } - else - { - old = Tf_abs[cpt]; - new_s = Tf_abs[cpt + 2]; - cpt++; - glued = 0; - } - } - - - nb_pulses_final = 0; - - /* peak selection : keep the more energetics (max 20) */ - tmp = 1.0f / (float) ( Nfft / 2 ); - cumsum = 0; - for ( i = 0; i < min( FEC_NB_PULSE_MAX, nb_pulses ); i++ ) - { - mmax = 0; - for ( k = 0; k < nb_pulses; k++ ) - { - if ( Tf_abs[pulses[k]] > mmax ) - { - mmax = Tf_abs[pulses[k]]; - indmax = pulses[k]; - } - } - cumsum += Tf_abs[indmax]; - - if ( HqVoicing || cumsum < sum_Tf_abs * 0.7f ) - { - a_re[i] = Tfr[indmax] * tmp; - a_im[i] = Tfi[indmax] * tmp; - freq[i] = (float) indmax * 2 / ( (float) N ); - nb_pulses_final++; - Tf_abs[indmax] = -1; - } - else - { - a_re[i] = Tfr[indmax] * tmp; - a_im[i] = Tfi[indmax] * tmp; - freq[i] = (float) indmax * 2 / ( (float) N ); - nb_pulses_final++; - break; - } - } - - nb_pulses = nb_pulses_final; - - /* sinusoidal synthesis */ - set_f( synthesis, 0.0f, 40 * L / 20 ); - - if ( HqVoicing ) - { - k = 40 * L / 20; - } - else - { - k = 40 * L / 20; - } - - for ( i = 0; i < nb_pulses; i++ ) - { - cosfreq = (float) cos( EVS_PI * freq[i] / (float) decimate_factor ); - sinfreq = (float) sin( EVS_PI * freq[i] / (float) decimate_factor ); - singenerator( k, cosfreq, sinfreq, a_re[i], a_im[i], synthesis ); - } - - return; -} - -/*-------------------------------------------------------------------------- - * fec_noise_filling() - * - * Adds noise component to ECU frame by - * - subtracting the sinusoidal synthesis from the analysis frame - * - copying noise segments at random indices and adding them together - * with an overlap-add operation - * Copying the beginning of the frame from the past synthesis and aligning - * it to be inserted into wtda - *--------------------------------------------------------------------------*/ - -static void fec_noise_filling( - const float *prevsynth, /* i : Past synthesis buffer (length 2*L) */ - float *synthesis, /* i/o: Sinusoidal ECU / Sinusoidal ECU + noise */ - const int16_t L, /* i : Output frame length */ - const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ - const int16_t HqVoicing, /* i : HQ voicing flag */ - float *gapsynth, /* o : Buffer for crossfade to good frame */ - int16_t *ni_seed_forfec, /* i/o: Random seed for picking noise segments */ - const int16_t element_mode, /* i : IVAS element mode */ - const float *old_out ) -{ - float SS[L_FRAME48k / 2], tmp; - int16_t Rnd_N_noise; - int16_t k, kk, i; - int16_t N_noise; - float noisevect[34 * L_FRAME48k / 20]; - const float *p_mdct_ola; - int16_t alignment_point; - - if ( element_mode == EVS_MONO ) - { - alignment_point = 2 * L - 3 * L / 20; - } - else - { - alignment_point = 2 * L; - } - mvr2r( prevsynth + alignment_point - N, noisevect, N ); - - - /* Noise addition on full band */ - /* residual */ - if ( N < L ) - { - N_noise = ( N / 2 ); - for ( k = 0; k < N; k++ ) - { - noisevect[k] = ( noisevect[k] - synthesis[k] ); - } - } - else - { - N_noise = L / 2; - for ( k = 0; k < L; k++ ) - { - noisevect[k] = ( noisevect[N - L + k] - synthesis[N - L + k] ); - } - } - - if ( HqVoicing ) - { - for ( i = 0; i < N; i++ ) - { - noisevect[i] *= 0.25f; - } - } - - kk = 0; - k = 0; - Rnd_N_noise = N_noise; - - while ( k < 2 * L ) - { - if ( kk == 0 ) - { - tmp = ( ( own_random( ni_seed_forfec ) / (PCM16_TO_FLT_FAC) *0.2f ) + 0.5f ); - kk = 1; - } - else - { - tmp = ( ( own_random( ni_seed_forfec ) / (PCM16_TO_FLT_FAC) *0.3f ) + 0.7f ); - kk = 0; - } - - Rnd_N_noise = (int16_t) ( (float) N_noise * tmp ); - - sinq( (const float) EVS_PI / ( 2.0f * (float) Rnd_N_noise ), (const float) EVS_PI / ( 4.0f * (float) Rnd_N_noise ), (const int16_t) Rnd_N_noise, SS ); - - for ( i = 0; i < Rnd_N_noise; i++ ) - { - if ( k < 2 * L ) - { - synthesis[k] += ( noisevect[N_noise - Rnd_N_noise + i] * SS[i] + noisevect[N_noise + i] * SS[Rnd_N_noise - i - 1] ); /* *noisefact; */ - } - k++; - } - } - - if ( element_mode == EVS_MONO ) - { - kk = 7 * L / 20; - p_mdct_ola = prevsynth + 37 * L / 20; - } - else - { - kk = NS2SA( L * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); - p_mdct_ola = old_out + kk; - } - - /* overlappadd with the ms of valid mdct of the last frame */ - sinq( EVS_PI / ( 6.0f * L / 20.0f ), EVS_PI / ( 12.0f * L / 20.0f ), 3 * L / 20, SS ); - - for ( k = 0; k < 3 * L / 20; k++ ) - { - tmp = SS[k] * SS[k]; - synthesis[k] = p_mdct_ola[k] * ( 1 - tmp ) + synthesis[k] * tmp; - } - - mvr2r( synthesis, synthesis + kk, 2 * L - kk ); - mvr2r( synthesis + L, gapsynth, L ); - - mvr2r( prevsynth + alignment_point - kk, synthesis, kk ); - - return; -} - -/*-------------------------------------------------------------------------- - * fec_alg() - * - * Pitch based error-concealment algorithm with adaptive analysis frame - * length - *--------------------------------------------------------------------------*/ - -static void fec_alg( - const float *prevsynth, /* i : previous synthesis */ - const float *prevsynth_LP, /* i : down-sampled synthesis */ - float *ecu_rec, /* o : ECU frame with Windowing/TDA */ - const int16_t output_frame, /* i : Output frame length */ - const int16_t N, /* i : Analysis frame length in 8 kHz (corr. max) */ - const int16_t decimatefactor, /* i : Downsampling factor */ - const int16_t HqVoicing, /* i : HQ voicing flag */ - float *gapsynth, /* o : Buffer for crossfade to good frame */ - int16_t *ni_seed_forfec, /* i/o: Random seed for picking noise segments */ - const int16_t element_mode, /* i : IVAS element mode */ - const float *old_out - -) -{ - int16_t n, Nfft; - float sum_Tf_abs; - float Tfr[FEC_FFT_MAX_SIZE]; - float Tfi[FEC_FFT_MAX_SIZE]; - float Tf_abs[FEC_FFT_MAX_SIZE / 2]; - float synthesis[2 * L_FRAME48k]; - - fec_ecu_dft( prevsynth_LP, N, Tfr, Tfi, &sum_Tf_abs, Tf_abs, &Nfft, element_mode ); - - sinusoidal_synthesis( Tfr, Tfi, Tf_abs, N, output_frame, decimatefactor, Nfft, sum_Tf_abs, synthesis, HqVoicing ); - - fec_noise_filling( prevsynth, synthesis, output_frame, N * decimatefactor, HqVoicing, gapsynth, ni_seed_forfec, element_mode, old_out ); - - n = (int16_t) ( (float) output_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - wtda( synthesis + ( output_frame - n ), ecu_rec, NULL, ALDO_WINDOW, ALDO_WINDOW, output_frame ); - - return; -} - - -/*-------------------------------------------------------------------------- - * hq_phase_ecu() - * - * Main routine for HQ phase ECU - *--------------------------------------------------------------------------*/ - -static void hq_phase_ecu( - const float *prevsynth, /* i : buffer of previously synthesized signal */ - float *ecu_rec, /* o : reconstructed frame in tda domain */ - int16_t *time_offs, /* i/o: Sample offset for consecutive frame losses*/ - float *X_sav, /* i/o: Stored spectrum of prototype frame */ - int16_t *num_p, /* i/o: Number of identified peaks */ - int16_t *plocs, /* i/o: Peak locations */ - float *plocsi, /* i/o: Interpolated peak locations */ - const float env_stab, /* i : Envelope stability parameter */ - int16_t *last_fec, /* i/o: Flag for usage of pitch dependent ECU */ - const int16_t prev_bfi, /* i : indicating burst frame error */ - const int16_t old_is_transient[2], /* i : flags indicating previous transient frames*/ - float *mag_chg_1st, /* i/o: per band magnitude modifier for transients*/ - float Xavg[LGW_MAX], /* i/o: Frequency group average gain to fade to */ - float *beta_mute, /* o : Factor for long-term mute */ - const int16_t bwidth, /* i : Encoded bandwidth */ - const int16_t output_frame, /* i : frame length */ - const float pcorr, /* i : pitch correlation */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t Lprot; - float mag_chg[LGW_MAX], ph_dith, X[L_PROT48k]; - int16_t seed; - float alpha[LGW_MAX], beta[LGW_MAX]; - const float *old_dec; - float noise_fac; - int16_t ph_ecu_lookahead; - - noise_fac = 1.0f; - - if ( element_mode == EVS_MONO ) - { - ph_ecu_lookahead = NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ); - } - else - { - ph_ecu_lookahead = 0; - } - - - Lprot = ( 2 * output_frame * 4 ) / 5; - - if ( !prev_bfi || ( prev_bfi && *last_fec && ( *time_offs == output_frame ) ) ) - { - if ( prev_bfi && *last_fec && element_mode == EVS_MONO ) - { - *time_offs += 0; - } - else - { - *time_offs = 0; - } - - trans_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, *last_fec, alpha, beta, beta_mute, Xavg ); - spec_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, plocs, plocsi, num_p, X_sav, output_frame, bwidth, element_mode, &noise_fac, pcorr ); - - if ( prev_bfi && *last_fec ) - { - *time_offs += output_frame; - } - } - else - { - *time_offs += output_frame; - if ( *time_offs <= 0 ) - { - /* detect wrap around of st->time_offs */ - *time_offs = MAX16B; /* continued muting will ensure that the now fixed seeds are not creating tones */ - } - - trans_ana( prevsynth + 2 * output_frame - Lprot, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, 0, alpha, beta, beta_mute, Xavg ); /* 1.0 stable-music, 0.0 speech-like */ - } - - mvr2r( X_sav, X, Lprot ); - - /* seed for own_rand2 */ - seed = *time_offs; - if ( *num_p > 0 ) - { - seed += plocs[*num_p - 1]; - } - - subst_spec( plocs, plocsi, num_p, *time_offs, X, mag_chg, ph_dith, old_is_transient, output_frame, &seed, alpha, beta, *beta_mute, Xavg, element_mode, ph_ecu_lookahead, noise_fac ); - - /* reconstructed frame in tda domain */ - old_dec = prevsynth + 2 * output_frame - NS2SA( output_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); - rec_frame( X, ecu_rec, output_frame, old_dec, element_mode, num_p, plocs ); - - return; -} - -/*-------------------------------------------------------------------------- - * hq_ecu() - * - * Main routine for HQ ECU - *--------------------------------------------------------------------------*/ - -void hq_ecu( - const float *prevsynth, /* i : buffer of previously synthesized signal */ - float *ecu_rec, /* o : reconstructed frame in tda domain */ - int16_t *time_offs, /* i/o: Sample offset for consecutive frame losses*/ - float *X_sav, /* i/o: Stored spectrum of prototype frame */ - int16_t *num_p, /* i/o: Number of identified peaks */ - int16_t *plocs, /* i/o: Peak locations */ - float *plocsi, /* i/o: Interpolated peak locations */ - const float env_stab, /* i : Envelope stability parameter */ - int16_t *last_fec, /* i/o: Flag for usage of pitch dependent ECU */ - const int16_t ph_ecu_HqVoicing, /* i : HQ Voicing flag */ - int16_t *ph_ecu_active, /* i : Phase ECU active flag */ - float *gapsynth, /* o : Gap synthesis for crossfade to good frame */ - const int16_t prev_bfi, /* i : indicating burst frame error */ - const int16_t old_is_transient[2], /* i : flags indicating previous transient frames*/ - float *mag_chg_1st, /* i/o: per band magnitude modifier for transients*/ - float Xavg[LGW_MAX], /* i/o: Frequency group average gain to fade to */ - float *beta_mute, /* o : Factor for long-term mute */ - const int16_t output_frame, /* i : frame length */ - Decoder_State *st /* i/o: decoder state structure */ -) -{ - int16_t N; - float corr = 0.0f; - int16_t decimatefactor; - float prevsynth_LP[2 * L_FRAME8k]; - HQ_DEC_HANDLE hHQ_core; - const float *fec_alg_input; - int16_t evs_mode_selection; - int16_t ivas_mode_selection; - - hHQ_core = st->hHQ_core; - if ( st->element_mode == EVS_MONO ) - { - fec_alg_input = prevsynth + NS2SA( output_frame * FRAMES_PER_SEC, ACELP_LOOK_NS / 2 - PH_ECU_LOOKAHEAD_NS ); - } - else - { - fec_alg_input = prevsynth - NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ); - } - - /* find pitch and R value */ - if ( !( output_frame < L_FRAME16k ) ) - { - fec_ecu_pitch( fec_alg_input, prevsynth_LP, output_frame, &N, &corr, &decimatefactor, ph_ecu_HqVoicing ); - } - else - { - corr = 0.0f; - decimatefactor = 4; - N = output_frame / 4; - } - - evs_mode_selection = ( st->total_brate >= 48000 && ( output_frame >= L_FRAME16k && !prev_bfi && ( !old_is_transient[0] || old_is_transient[1] ) && - ( ph_ecu_HqVoicing || ( ( ( hHQ_core->env_stab_plc > 0.5 ) && ( corr < 0.6 ) ) || ( hHQ_core->env_stab_plc < 0.5 && ( corr > 0.85 ) ) ) ) ) ) || - ( st->total_brate < 48000 && ( ( ph_ecu_HqVoicing || corr > 0.85 ) && !prev_bfi && ( !old_is_transient[0] || old_is_transient[1] ) ) ); - - ivas_mode_selection = ( N < PH_ECU_N_LIMIT ) || ( corr < PH_ECU_CORR_LIMIT ); - - if ( ( ( st->element_mode == EVS_MONO ) && evs_mode_selection ) || - ( ( st->element_mode != EVS_MONO ) && evs_mode_selection && ivas_mode_selection ) ) - - { - fec_alg( fec_alg_input, prevsynth_LP, ecu_rec, output_frame, N, decimatefactor, ph_ecu_HqVoicing, gapsynth, &hHQ_core->ni_seed_forfec, st->element_mode, st->hHQ_core->old_out ); - *last_fec = 1; - *ph_ecu_active = 0; - *time_offs = output_frame; - } - else - { - hq_phase_ecu( prevsynth - NS2SA( output_frame * FRAMES_PER_SEC, PH_ECU_LOOKAHEAD_NS ), ecu_rec, time_offs, X_sav, num_p, plocs, plocsi, env_stab, last_fec, prev_bfi, old_is_transient, mag_chg_1st, Xavg, beta_mute, st->bwidth, output_frame, corr, st->element_mode ); - - *last_fec = 0; - *ph_ecu_active = 1; - } - - return; -} -#endif diff --git a/lib_dec/FEC_HQ_phase_ecu_fx.c b/lib_dec/FEC_HQ_phase_ecu_fx.c index 690011d0e..f31f20af5 100644 --- a/lib_dec/FEC_HQ_phase_ecu_fx.c +++ b/lib_dec/FEC_HQ_phase_ecu_fx.c @@ -8,9 +8,7 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* * Local constants @@ -47,21 +45,11 @@ #define PFIND_SENS_FX 31785 /* 0.97 in Q15 */ #define CMPLMNT_PFIND_SENS_FX 983 /* (1.0 - pfind_sen) in Q15 */ -#ifdef IVAS_FLOAT_FIXED #define DELTA_CORR_F0_INT 2 /* Constant controls the bin range where Jacobsen is used */ #define L_PROT_NS 32000000L /* Prototype frame length in nanoseconds (32 ms) */ #define PH_ECU_CORR_LIMIT_Q15 27853 /* 0.85 in Q15 */ #define PH_ECU_N_LIMIT 56 /* fec_alg analysis frame limit for IVAS Phase ECU activation */ #define CMPLMNT_ST_PFIND_SENS_FX 2293 /* (1.0 - st_pfind_sen) in Q15 */ -#else -#ifdef IVAS_FEC_ECU_TO_COMPLETE -#define DELTA_CORR_F0_INT 2 /* Constant controls the bin range where Jacobsen is used */ -#define ST_PFIND_SENS 0.93f /* peakfinder sensitivity */ -#define L_PROT_NS 32000000L /* Prototype frame length in nanoseconds (32 ms) */ -#define PH_ECU_CORR_LIMIT 0.85f /* Correlation limit for IVAS Phase ECU activation */ -#define PH_ECU_N_LIMIT 56 /* fec_alg analysis frame limit for IVAS Phase ECU activation */ -#endif -#endif #define FEC_HQ_ECU_POINT5 ( 0x4000 ) /* 0.5 in Q15. Prefix with FEC_HQ namespace to avoid naming conflict. */ #define FEC_HQ_ECU_ROOT2 ( 0x5a83 ) /* sqrt(2) in Q14 */ @@ -70,7 +58,6 @@ #define FEC_HQ_WIN_A0 FEC_HQ_HAMM_A0 #define FEC_HQ_WIN_A1 FEC_HQ_HAMM_A1 -#ifdef IVAS_FLOAT_FIXED static Word16 sqrt2ndOrder( const Word16 ); static void windowing( const Word16 *, Word16 *, const Word16 *, const Word16, const Word16 ); @@ -93,9 +80,7 @@ static void spec_ana_fx( const Word16 *prevsynth, Word16 *plocs, Word32 *plocsi, #endif ); static void subst_spec_fx( const Word16 *, const Word32 *, Word16 *, const Word16, Word16 *, const Word16 *, const Word16, const Word16 *, const Word16, Word16 *, const Word16 *, const Word16 *, Word16, const Word16 * ); -#ifdef IVAS_FLOAT_FIXED static Word16 rand_phase_fx( const Word16 seed, Word16 *sin_F, Word16 *cos_F ); -#endif #ifdef IVAS_FEC_ECU_TO_COMPLETE static float imax2_jacobsen_mag( const float *y_re, const float *y_im ); #endif @@ -105,7 +90,6 @@ static float imax2_jacobsen_mag( const float *y_re, const float *y_im ); * * randomized phase in form of sin and cos components *------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 rand_phase_fx( const Word16 seed, Word16 *sin_F /*Q15*/, Word16 *cos_F /*Q15*/ ) { const Word16 *sincos = sincos_t_ext_fx + 128; // Q15 @@ -130,9 +114,7 @@ static Word16 rand_phase_fx( const Word16 seed, Word16 *sin_F /*Q15*/, Word16 *c return seed2; } -#endif -#ifdef IVAS_FLOAT_FIXED /*! r: The location, relative to the middle of the 3 given data point, of the maximum. (Q15)*/ static Word16 ivas_imax2_jacobsen_mag_fx( const Word16 *y_re, /* i : The 3 given data points. real part order -1 0 1 Qx */ @@ -207,76 +189,6 @@ static Word16 ivas_imax2_jacobsen_mag_fx( return posi; } -#else -#ifdef IVAS_FEC_ECU_TO_COMPLETE -/*----------------------------------------------------------------------------- - * imax2_jacobsen_mag() - * - * refine peak interpolation using jacobsen and periodic speca ana windows - *----------------------------------------------------------------------------*/ - -/*! r: The location, relative to the middle of the 3 given data point, of the maximum. (Q15)*/ -static float imax2_jacobsen_mag( - const float *y_re, /* i : The 3 given data points. real part order -1 0 1 */ - const float *y_im /* i : The 3 given data points. imag part order 1 0 -1 (from FFT) */ -) -{ - float posi; - const float *pY; - float y_m1_re, y_0_re, y_p1_re; - float y_m1_im, y_0_im, y_p1_im; - float N_re, N_im; - float D_re, D_im; - float numer, denom; - - /* Jacobsen estimates peak offset relative y_0 using - * X_m1 - X_p1 - * d = REAL ( ------------------- ) * c_jacob - * 2*X_0 - X_m1 -Xp1 - * - * Where c_jacob is a window dependent constant - */ -#define C_JACOB 1.1453f /* % assume 0.1875 hammrect window 'symmetric' */ - - /* Get the bin parameters into variables */ - pY = y_re; - y_m1_re = *pY++; - y_0_re = *pY++; - y_p1_re = *pY++; - - /* Same for imaginary parts - note reverse order from FFT */ - pY = y_im; - y_p1_im = *pY++; - y_0_im = *pY++; - y_m1_im = *pY++; - - /* prepare numerator real and imaginary parts*/ - N_re = y_m1_re - y_p1_re; - N_im = y_m1_im - y_p1_im; - - /* prepare denominator real and imaginary parts */ - - D_re = 2 * y_0_re - y_m1_re - y_p1_re; - D_im = 2 * y_0_im - y_m1_im - y_p1_im; - - /* REAL part of complex division */ - numer = N_re * D_re + N_im * D_im; - denom = D_re * D_re + D_im * D_im; - - test(); - if ( numer != 0 && denom != 0 ) - { - posi = numer / denom * C_JACOB; - } - else - { - posi = 0; /* flat top, division is not possible choose center freq */ - } - - return posi; -} -#endif -#endif /*----------------------------------------------------------------------------- * fft_spec2_fx() @@ -708,7 +620,6 @@ static void trans_ana_fx( * * Peak-picking algorithm *----------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_peakfinder_fx( const Word16 *x0, /* i : vector from which the maxima will be found */ const Word16 len0, /* i : length of input vector */ @@ -1002,7 +913,6 @@ static void ivas_peakfinder_fx( } } } -#endif static void peakfinder_fx( const Word16 *x0, /* i : vector from which the maxima will be found */ @@ -1427,7 +1337,6 @@ static Word16 imax_fx( /* o: The location, relative to the * Spectral analysis *-----------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_spec_ana_fx( const Word16 *prevsynth, /* i : Input signal */ Word16 *plocs, /* o : The indicies of the identified peaks Q0 */ @@ -1802,7 +1711,6 @@ static void ivas_spec_ana_fx( } } } -#endif static void spec_ana_fx( const Word16 *prevsynth, /* i : Input signal */ @@ -2170,7 +2078,6 @@ static void spec_ana_fx( * Substitution spectrum calculation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_subst_spec_fx( const Word16 *plocs, /* i : The indices of the identified peaks Q0 */ const Word32 *plocsi, /* i : Interpolated positions of the identified peaks Q16 */ @@ -2567,7 +2474,6 @@ static void ivas_subst_spec_fx( } } } -#endif static void subst_spec_fx( const Word16 *plocs, /* i : The indices of the identified peaks Q0 */ @@ -2989,7 +2895,6 @@ static void subst_spec_fx( * Windowing and TDA of reconstructed frame *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_rec_wtda_fx( Word16 *X, /* i : FFT spectrum */ Word32 *ecu_rec, /* o : Reconstructed frame in tda domain */ @@ -3131,7 +3036,6 @@ static void ivas_rec_wtda_fx( return; } -#endif static void rec_wtda_fx( Word16 *X, /* i : FFT spectrum */ @@ -3302,7 +3206,6 @@ static void rec_wtda_fx( * Frame reconstruction *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_rec_frame_fx( Word16 *X, /* i : FFT spectrum */ Word32 *ecu_rec, /* o : Reconstructed frame in tda domain */ @@ -3352,7 +3255,6 @@ static void ivas_rec_frame_fx( return; } -#endif static void rec_frame_fx( Word16 *X, /* i : FFT spectrum */ @@ -3530,7 +3432,6 @@ static void fir_dwn_fx( * Pitch/correlation analysis and adaptive analysis frame length calculation *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void fec_ecu_pitch_ivas_fx( const Word16 *prevsynth_fx, /*Q15 16 */ Word16 *prevsynth_LP_fx, /* Q15 16 */ @@ -3745,7 +3646,6 @@ static void fec_ecu_pitch_ivas_fx( Scale_sig( prevsynth_LP_fx, 320, negate( sub( tmpQLP, 3 ) ) ); return; } -#endif static void fec_ecu_pitch_fx( const Word16 *prevsynth_fx, /*Q15 16 */ @@ -4077,7 +3977,6 @@ static Word16 abs_iter_fx( Word16 re /*Qx*/, Word16 im /*Qx*/, Word16 N ) * next power of 2 using linear interpolation. *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_fec_ecu_dft_fx( const Word16 *prevsynth_LP, /*Qin */ const Word16 N, @@ -4192,7 +4091,6 @@ static void ivas_fec_ecu_dft_fx( move16(); return; } -#endif static void fec_ecu_dft_fx( const Word16 *prevsynth_LP, /*Qin */ @@ -4611,7 +4509,6 @@ static void sinusoidal_synthesis_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void ivas_fec_noise_filling_fx( const Word16 *prevsynth_fx, /*Qsynth */ Word16 *synthesis_fx, /*Qsynth */ @@ -4774,7 +4671,6 @@ static void ivas_fec_noise_filling_fx( Copy( synthesis_fx + L, gapsynth_fx, L ); Copy( prevsynth_fx + sub( alignment_point, kk ), synthesis_fx, kk ); } -#endif static void fec_noise_filling_fx( const Word16 *prevsynth_fx, /*Qsynth */ @@ -4958,7 +4854,6 @@ static void fec_noise_filling_fx( } } -#ifdef IVAS_FLOAT_FIXED static void ivas_fec_alg_fx( const Word16 *prevsynth, /*Qin */ const Word16 *prevsynth_LP, /*Qin */ @@ -5011,7 +4906,6 @@ static void ivas_fec_alg_fx( return; } -#endif static void fec_alg_fx( const Word16 *prevsynth, /*Qin */ @@ -5085,7 +4979,6 @@ static void fec_alg_fx( * Main routine for HQ phase ECU *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_hq_phase_ecu_fx( const Word16 *prevsynth, /* i : buffer of previously synthesized signal Q0 */ Word32 *ecu_rec, /* o : reconstructed frame in tda domain */ @@ -5210,7 +5103,6 @@ static void ivas_hq_phase_ecu_fx( *ph_ecu_active = 1; move16(); } -#endif static void hq_phase_ecu_fx( const Word16 *prevsynth, /* i : buffer of previously synthesized signal Q0 */ @@ -5371,7 +5263,6 @@ static void hq_phase_ecu_fx( * Main routine for HQ ECU *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_hq_ecu_fx( const Word16 *prevsynth, /* i : buffer of previously synthesized signal Q0 */ Word32 *ecu_rec, /* o : reconstructed frame in tda domain */ @@ -5483,7 +5374,6 @@ void ivas_hq_ecu_fx( } return; } -#endif void hq_ecu_fx( const Word16 *prevsynth, /* i : buffer of previously synthesized signal Q0 */ @@ -5774,4 +5664,3 @@ static void windowing_ROM_optimized( pSine += downSamples; /* Increment address counter */ } } -#endif diff --git a/lib_dec/FEC_adapt_codebook.c b/lib_dec/FEC_adapt_codebook.c index e6a07ddba..b2dcc5560 100644 --- a/lib_dec/FEC_adapt_codebook.c +++ b/lib_dec/FEC_adapt_codebook.c @@ -49,447 +49,3 @@ *------------------------------------------------------------------------*/ /*! r: do_WI flag */ -#ifndef IVAS_FLOAT_FIXED -static int16_t FEC_synchro_exc( - const int16_t L_frame, /* i : length of the frame */ - float *exc, /* i/o: exc vector to modify */ - const int16_t desire_puls_pos, /* i : Pulse position send by the encoder */ - const int16_t true_puls_pos, /* i : Present pulse location */ - const int16_t Old_pitch /* i : Pitch use to create temporary adaptive codebook */ -) -{ - float exc_tmp[L_FRAME16k + L_SUBFR], min_energy, *pt_exc, *pt_exc1, ftmp, fact; - int16_t i, j, point_to_remove, point_to_add = -1, nb_min; - int16_t min_pos[L_FRAME16k / PIT_MIN_DOUBLEEXTEND], points_by_pos[L_FRAME16k / PIT_MIN_DOUBLEEXTEND], total_point, tmp_len; - int16_t *pt_pos, pos, start_search, tmp16; - int16_t remaining_len; - - /* Init */ - for ( i = 0; i < L_FRAME16k / PIT_MIN_DOUBLEEXTEND; i++ ) - { - min_pos[i] = 10000; - points_by_pos[i] = 0; - } - - /* Find number of point to remove and number of minimum */ - point_to_remove = true_puls_pos - desire_puls_pos; /* if it is negative it means remove point else it means add point */ - - pos = L_frame - true_puls_pos; - nb_min = pos / Old_pitch; - - /* if Old pitch < 128, must have at least 2 min */ - if ( Old_pitch <= 128 && nb_min < 2 ) - { - nb_min = 2; - } - - /* Must have at least 1 min */ - if ( nb_min == 0 ) - { - /* Safety check, should be very rare but still needed*/ - nb_min = 1; - } - - pt_exc = exc + pos; - - /* Find start_search for minimum energy search*/ - start_search = -3 * Old_pitch / 4; - - if ( start_search + pos < 0 ) - { - /* This case is rare but still need to be taken care*/ - start_search = -pos; - - if ( abs( start_search ) < Old_pitch / 8 ) - { - /* it's not safe to remove/add point inside 1/8 of the pulse position */ - return 0; - } - } - - /* Find min energy in the first pitch section */ - min_energy = 65536 * 65536.0f; - - /* -------------------------------------------------------------------- - * The minimum energy regions are determined by the computing the energy - * using a sliding 5-sample window. The minimum energy position is set - * at the middle of the window at which the energy is at minimum - * --------------------------------------------------------------------*/ - - ftmp = ( pt_exc[start_search] * pt_exc[start_search] ); - ftmp += ( pt_exc[start_search + 1] * pt_exc[start_search + 1] ); - ftmp += ( pt_exc[start_search + 2] * pt_exc[start_search + 2] ); - ftmp += ( pt_exc[start_search + 3] * pt_exc[start_search + 3] ); - ftmp += ( pt_exc[start_search + 4] * pt_exc[start_search + 4] ); - - if ( ftmp < min_energy ) - { - min_energy = ftmp; - min_pos[0] = ( pos + start_search + 2 ); - } - - for ( i = start_search; i < -5; i++ ) - { - ftmp -= pt_exc[i] * pt_exc[i]; - ftmp += pt_exc[i + 5] * pt_exc[i + 5]; - if ( ftmp < min_energy ) - { - min_energy = ftmp; - min_pos[0] = pos + i + 2; - } - } - - for ( j = 1; j < nb_min; j++ ) - { - min_pos[j] = min_pos[j - 1] - Old_pitch; - /* If the first minimum is in the past, forget this minimum */ - if ( min_pos[j] < 0 ) - { - /* Safety check */ - min_pos[j] = -10000; - nb_min = nb_min - 1; - } - } - - /* safety-measure against not properly initialized min_pos[] */ - if ( min_energy >= 65536 * 65536.0f ) - { - return 0; - } - - /*-------------------------------------------------------------------- - * Determine the number of samples to be added or removed at each pitch - * cycle whereby less samples are added/removed at the beginning and - * more towards the end of the frame - * --------------------------------------------------------------------*/ - - if ( nb_min == 1 || abs( point_to_remove ) == 1 ) - { - nb_min = 1; - points_by_pos[0] = (int16_t) abs( point_to_remove ); - } - else - { - /* First position */ - fact = (float) abs( point_to_remove ) / ( nb_min * nb_min ); - - total_point = (int16_t) ( fact + 0.5 ); - points_by_pos[0] = total_point; - - for ( i = 2; i <= nb_min; i++ ) - { - points_by_pos[i - 1] = (int16_t) ( fact * ( i * i ) - total_point + 0.5 ); - total_point += points_by_pos[i - 1]; - - /* ensure a constant increase */ - if ( points_by_pos[i - 1] < points_by_pos[i - 2] ) - { - tmp16 = points_by_pos[i - 2]; - points_by_pos[i - 2] = points_by_pos[i - 1]; - points_by_pos[i - 1] = tmp16; - } - } - } - - /* -------------------------------------------------------------------- - * Sample deletion or insertion is performed in minimum energy regions. - * At the end of this section the last maximum pulse in the concealed - * excitation is forced to align to the actual maximum pulse position - * at the end of the frame which is transmitted in the future frame. - * --------------------------------------------------------------------*/ - - if ( point_to_remove > 0 ) - { - point_to_add = point_to_remove; - } - - pt_exc = exc_tmp; - pt_exc1 = exc; - - i = 0; - pt_pos = min_pos + nb_min - 1; - if ( point_to_add > 0 ) /* add some points */ - { - remaining_len = L_frame; - - for ( i = 0; i < nb_min; i++ ) - { - /* Copy section */ - if ( i == 0 ) - { - /* Compute len to copy */ - tmp_len = *pt_pos; - } - else - { - /* Compute len to copy */ - tmp_len = *pt_pos - *( pt_pos + 1 ) - points_by_pos[i - 1]; - } - - mvr2r( pt_exc1, pt_exc, tmp_len ); - remaining_len -= tmp_len; - pt_exc1 += tmp_len; - pt_exc += tmp_len; - - /* add some points */ - ftmp = -( *pt_exc1 / 20 ); - for ( j = 0; j < points_by_pos[i]; j++ ) - { - *pt_exc++ = ftmp; - ftmp = -ftmp; - } - - remaining_len -= points_by_pos[i]; - pt_pos--; - } - - /* Copy remaining length */ - remaining_len = max( 0, remaining_len ); - mvr2r( pt_exc1, pt_exc, remaining_len ); - - /* Update true excitation buffer*/ - mvr2r( exc_tmp, exc, L_frame ); - } - else /* Remove points */ - { - remaining_len = L_frame; - - for ( i = 0; i < nb_min; i++ ) - { - if ( i == 0 ) - { - /* Compute len to copy */ - tmp_len = *pt_pos; - } - else - { - /* Compute len to copy */ - tmp_len = *pt_pos - *( pt_pos + 1 ) - points_by_pos[i - 1]; - } - - mvr2r( pt_exc1, pt_exc, tmp_len ); - remaining_len -= tmp_len; - pt_exc1 += tmp_len; - pt_exc += tmp_len; - - /* Remove points */ - for ( j = 0; j < points_by_pos[i]; j++ ) - { - pt_exc1++; - } - pt_pos--; - } - - /* Copy remaining length */ - remaining_len = max( 0, remaining_len ); - mvr2r( pt_exc1, pt_exc, remaining_len ); - - /* Update true excitation buffer*/ - mvr2r( exc_tmp, exc, L_frame ); - } - - return 1; -} - - -/*---------------------------------------------------------------------* - * FEC_SinOnset() - * - * Create an artificial onset when it is lost - *---------------------------------------------------------------------*/ - -void FEC_SinOnset( - float *exc, /* i/o: exc vector to modify */ - int16_t puls_pos, /* i : last pulse position desired */ - int16_t T0, - float enr_q, /* i : energy provided by the encoder */ - float *Aq, /* i : A(z) filter */ - const int16_t L_frame /* i : frame length */ -) -{ - int16_t P0, onset_len, sign = 0, i, len, L_subfr; - float h1[L_SUBFR16k], mem[M], exc_tmp[L_FRAME16k + MODE1_L_FIR_FER]; - float *pt_end, *pt_exc, enr_LP, gain; - - L_subfr = L_SUBFR; - if ( L_frame == L_FRAME16k ) - { - L_subfr = L_SUBFR16k; - } - - if ( T0 < 2 * L_subfr ) - { - onset_len = 2 * L_subfr; - } - else - { - onset_len = T0; - } - - - P0 = puls_pos; - - if ( P0 < 0 ) - { - sign = 1; - P0 = -P0; - } - - if ( P0 > PIT_MAX && L_frame == L_FRAME ) - { - P0 = PIT_MAX; /* Should never be the case, however... */ - } - else if ( P0 > PIT16k_MAX && L_frame == L_FRAME16k ) - { - P0 = PIT16k_MAX; /* Should never be the case, however... */ - } - set_f( exc_tmp, 0, L_frame + MODE1_L_FIR_FER ); /* Reset excitation vector */ - - /*--------------------------------------------* - * Find LP filter impulse response energy - *--------------------------------------------*/ - - set_f( h1, 0, L_subfr ); /* Find the impulse response */ - set_f( mem, 0, M ); - h1[0] = 1.0f; - syn_filt( Aq, M, h1, h1, L_subfr, mem, 0 ); - enr_LP = dotp( h1, h1, L_subfr ) + 0.01f; /* Find the impulse response energy */ - - /*------------------------------------------------------------------------------------------* - * Construct the harmonic part as a train of low-pass filtered pulses - *------------------------------------------------------------------------------------------*/ - - pt_exc = exc_tmp + L_frame - 1 - MODE1_L_FIR_FER / 2 - P0; /* beginning of the 1st pulse */ - pt_end = exc_tmp + onset_len; - - len = (int16_t) ( pt_exc - pt_end ); - if ( len > MODE1_L_FIR_FER ) - { - len = MODE1_L_FIR_FER; - } - if ( !sign ) - { - for ( i = 0; i < len; i++ ) - { - /* The filter response would have E=1 in full band. */ - pt_exc[i] += h_low[i]; /* As it is lp filtered, the E is somewhat lower */ - } - } - else - { - for ( i = 0; i < len; i++ ) - { - /* The filter response would have E=1 in full band. */ - pt_exc[i] -= h_low[i]; /* As it is lp filtered, the E is somewhat lower */ - } - } - - gain = (float) sqrt( 1.5 * enr_q / enr_LP ); /* divide by LP filter E, scale by transmitted E */ - gain *= 0.96f; - for ( i = 0; i < L_frame; i++ ) - { - exc_tmp[i] *= gain; - } - - mvr2r( &exc_tmp[L_frame - L_EXC_MEM], exc, L_EXC_MEM ); - - return; -} - -int16_t FEC_enhACB( - const int16_t L_frame, /* i : frame length */ - const int16_t last_L_frame, /* i : frame length of last frame */ - float *exc_io, /* i/o: adaptive codebook memory */ - const int16_t new_pit, /* i : decoded first frame pitch */ - const int16_t puls_pos, /* i : decoder position of the last glottal pulses decoded in the previous frame */ - const float bfi_pitch /* i : pitch used for concealment */ -) -{ - int16_t Tc, P0, sign, pit_search; - int16_t Tlist[10], Terr, diff_pit, dist_Plast; - float ftmp; - float exc[L_FRAME16k + L_SUBFR]; - int16_t do_WI = 1; - - set_f( exc, 0.0f, L_FRAME16k - L_EXC_MEM ); - set_f( exc + L_FRAME16k, 0.0f, L_SUBFR ); - mvr2r( exc_io, exc + L_FRAME16k - L_EXC_MEM, L_EXC_MEM ); - - Tc = (int16_t) bfi_pitch; - mvr2r( exc + L_FRAME16k - Tc, exc + L_FRAME16k, L_SUBFR ); - - /*------------------------------------------------------------ - * Decode phase information transmitted in the bitstream - * (The position of the absolute maximum glottal pulse from - * the end of the frame and its sign) - *------------------------------------------------------------*/ - - P0 = puls_pos; - sign = 0; - if ( P0 < 0 ) - { - sign = 1; - P0 = -P0; - } - - if ( L_frame == L_FRAME ) - { - if ( P0 > PIT_MAX ) - { - P0 = PIT_MAX; /* Should never be the case, however... */ - } - } - else /* L_frame == L_FRAME16k */ - { - if ( P0 > PIT16k_MAX ) - { - P0 = PIT16k_MAX; /* Should never be the case, however... */ - } - } - - /*---------------------------------------------------------------------------------- - * Find the position of the first the maximum(minimum) lp_filtered pulse - * <----- Mem --->|<--------------------- L_frame ------------>|<----- L_SUBFR --->| - * |<-------pit_search----> | | - *----------------------------------------------------------------------------------*/ - - pit_search = Tc; - - Tlist[0] = findpulse( L_frame, exc + L_frame - pit_search, pit_search, DEC, &sign ); - - Terr = (int16_t) abs( pit_search - Tlist[0] - P0 ); - - dist_Plast = Tc - Tlist[0]; - - Tlist[1] = findpulse( L_frame, exc + L_frame - pit_search, pit_search + L_SUBFR, DEC, &sign ); - - if ( Terr > abs( Tlist[1] - Tc + P0 ) ) - { - dist_Plast = Tc - Tlist[1]; - Terr = (int16_t) abs( Tlist[1] - Tc + P0 ); - } - - diff_pit = (int16_t) abs( new_pit - Tc ); - ftmp = (float) (int16_t) ( (float) L_frame / (float) Tc + 0.5 ); - - if ( Terr <= ftmp * diff_pit && Terr != 0 /* If Terr = 0, no resynchronization required */ - && Terr < L_SUBFR ) /* prevent catastrophy search */ - { - /* perform excitation resynchronization here */ - do_WI = FEC_synchro_exc( L_frame, exc, P0, dist_Plast, Tc ); - mvr2r( exc + L_FRAME16k - L_EXC_MEM, exc_io, L_EXC_MEM ); - } - else - { - do_WI = 0; - } - - if ( last_L_frame != L_FRAME16k ) - { - /* This is essential in case of bitrate switching + FEC*/ - do_WI = 0; - } - - return do_WI; -} -#endif diff --git a/lib_dec/FEC_adapt_codebook_fx.c b/lib_dec/FEC_adapt_codebook_fx.c index 9260d428d..fae55ab5b 100644 --- a/lib_dec/FEC_adapt_codebook_fx.c +++ b/lib_dec/FEC_adapt_codebook_fx.c @@ -14,7 +14,6 @@ * * Create an artificial onset when it is lost *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 FEC_SinOnset_fx( Word16 *exc, /* i/o : exc vector to modify */ // Qin = Qold, Qout = Q_exc @@ -536,4 +535,3 @@ Word16 FEC_synchro_exc_fx( /* o : do_WI flag return 1; } -#endif diff --git a/lib_dec/FEC_clas_estim.c b/lib_dec/FEC_clas_estim.c index c6b4cd1a0..4d461a0dc 100644 --- a/lib_dec/FEC_clas_estim.c +++ b/lib_dec/FEC_clas_estim.c @@ -42,761 +42,3 @@ #include "rom_com.h" #include "stat_dec.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define K_COR_DEC 0.8547f /* <-0.29, 0.88> */ -#define C_COR_DEC 0.2479f - -#define K_TILT_DEC 0.8333f /* <-0.35, 0.85> */ -#define C_TILT_DEC 0.2917f - -#define K_ZC_DEC -0.04f /* <63, 38> */ -#define C_ZC_DEC 2.52f - -#define K_ENR_DEC 0.04f /* <-14, 11> */ -#define C_ENR_DEC 0.56f - -#define K_PC_DEC -0.0357f /* <45, 17> */ -#define C_PC_DEC 1.6071f - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ -static float calculate_zero_crossings( const float *synth, const int16_t L_frame ); - -static float calculate_pitch_synchr_norm_correlation( const float *pitch, const float *synth, const int16_t L_frame, const int16_t L_subfr ); - -static float calculate_spectral_tilt( const float *synth, const int16_t nbSubfr, const int16_t L_subfr ); - -static int16_t calculate_classification_result( const int16_t last_good, float fmerit1, const float ener, const int16_t codec_mode ); - -static void FEC_ClassifierCore( const float *synth, const float *pitch, const int16_t L_frame, const int16_t codec_mode, int16_t *clas, float *lp_speech, float *frame_ener, float *ener, float *enern, float *class_para, const float LTP_Gain, const int16_t narrowBand, const SIGNAL_CLASSIFIER_MODE mode ); - -static int16_t FEC_dec_class( Decoder_State *st, float *enr_q ); - -static void FEC_classificationMusic( const int16_t coder_type, int16_t *decision_hyst, int16_t *clas ); - - -/*------------------------------------------------------------------------* - * calculate_zero_crossings() - * - * - *------------------------------------------------------------------------*/ - -static float calculate_zero_crossings( - const float *synth, - const int16_t L_frame ) -{ - int16_t i; - float zc_frame; - - zc_frame = 0.f; - - for ( i = 0; i < L_frame; ++i ) - { - if ( ( synth[i] <= 0.0f ) && ( synth[i - 1] > 0.0f ) ) - { - zc_frame += 1.0f; - } - } - - /* Renormalization for 12.8kHz core*/ - zc_frame *= 256.0f / (float) L_frame; - - return zc_frame; -} - -/*------------------------------------------------------------------------* - * calculate_pitch_synchr_norm_correlation() - * - * - *------------------------------------------------------------------------*/ - -static float calculate_pitch_synchr_norm_correlation( - const float *pitch, - const float *synth, - const int16_t L_frame, - const int16_t L_subfr ) -{ - int16_t T0, pos; - int16_t j, i; - float cor_max[16]; - float enr1t, enr2t, voicing; - - T0 = (int16_t) pitch[3]; - set_zero( cor_max, 16 ); - - if ( T0 > ( 3 * ( L_subfr / 2 ) ) ) - { - T0 = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); - } - - pos = L_frame; - j = 0; - - while ( pos > ( L_frame / L_subfr == 4 ? 3 * L_subfr : 4 * L_subfr ) ) - { - pos -= T0; - - cor_max[j] = dotp( &synth[pos], &synth[pos - T0], T0 ); - enr1t = dotp( &synth[pos - T0], &synth[pos - T0], T0 ); - enr2t = dotp( &synth[pos], &synth[pos], T0 ); - - cor_max[j] *= inv_sqrt( enr1t * enr2t + 0.1f ); - - - if ( ( pos - T0 ) < ( L_frame - L_subfr ) ) - { - T0 = (int16_t) ( 0.5f * ( pitch[2] + pitch[3] ) + 0.5f ); - } - j++; - } - - voicing = cor_max[0]; - - for ( i = 1; i < j; ++i ) - { - voicing += cor_max[i]; - } - - if ( j > 1 ) - { - voicing /= j; - } - - return voicing; -} - - -/*------------------------------------------------------------------------* - * calculate_spectral_tilt() - * - * - *------------------------------------------------------------------------*/ - -static float calculate_spectral_tilt( - const float *synth, - const int16_t nbSubfr, - const int16_t L_subfr ) -{ - int16_t i; - float tilt; - - float enr1t = 0.0f; - float enr2t = 0.0f; - const float *pt1 = synth + L_subfr; - const float *pt2 = synth + L_subfr - 1; - - for ( i = 0; i < nbSubfr - 1; ++i ) - { - enr1t += dotp( pt1, pt1, L_subfr ); - enr2t += dotp( pt1, pt2, L_subfr ); - - pt1 += L_subfr; - pt2 += L_subfr; - } - - tilt = enr2t / ( enr1t + 0.1f ); - - return tilt; -} - -/*------------------------------------------------------------------------* - * calculate_classification_result() - * - * - *------------------------------------------------------------------------*/ - -static int16_t calculate_classification_result( - const int16_t last_good, - float fmerit1, - const float ener, - const int16_t codec_mode ) -{ - int16_t result = UNVOICED_CLAS; - - switch ( last_good ) - { - case VOICED_CLAS: - case ONSET: - case SIN_ONSET: - case VOICED_TRANSITION: - - if ( fmerit1 < 0.39f ) - { - result = UNVOICED_CLAS; - } - else if ( fmerit1 < 0.63f && ( codec_mode == MODE2 || ener < -15.0f ) ) - { - result = VOICED_TRANSITION; - } - else - { - result = VOICED_CLAS; - } - break; - - case UNVOICED_CLAS: - case UNVOICED_TRANSITION: - case INACTIVE_CLAS: /* relevant for MODE2 only */ - - if ( fmerit1 > 0.56f ) - { - result = ONSET; - } - else if ( fmerit1 > 0.45f ) - { - result = UNVOICED_TRANSITION; - } - else - { - result = UNVOICED_CLAS; - } - break; - } - - return result; -} - - -/*------------------------------------------------------------------------* - * FEC_ClassifierCore() - * - * - *------------------------------------------------------------------------*/ - -static void FEC_ClassifierCore( - const float *synth, - const float *pitch, /* i : pitch values for each subframe */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t codec_mode, /* i : codec mode */ - int16_t *clas, /* i/o: frame classification */ - float *lp_speech, /* i/o: long term active speech energy average */ - float *frame_ener, /* o : */ - float *ener, /* o : */ - float *enern, /* o : */ - float *class_para, /* o : classification para. fmerit1 */ - const float LTP_Gain, /* i : */ - const int16_t narrowBand, /* i : */ - const SIGNAL_CLASSIFIER_MODE mode /* i : */ -) -{ - float zc_frame; - float tiltn, corn, zcn, pcn, fmerit1, tilt; - float voicing; - float pc = 0.0f; - - /*------------------------------------------------------------------------* - * Compute the zero crossing rate for all subframes - *------------------------------------------------------------------------*/ - - zc_frame = calculate_zero_crossings( synth, L_frame ); - - /*------------------------------------------------------------------------* - * Compute the normalized correlation pitch-synch at the end of the frame - *------------------------------------------------------------------------*/ - - voicing = calculate_pitch_synchr_norm_correlation( pitch, synth, L_frame, L_SUBFR ); - - /*------------------------------------------------------------------------* - * Compute pitch coherence - *------------------------------------------------------------------------*/ - - pc = 0; /* just to remove MSVC warnings */ - if ( codec_mode == MODE1 || !( LTP_Gain != -1.0f && mode == CLASSIFIER_TCX ) ) - { - pc = (float) fabs( pitch[3] + pitch[2] - pitch[1] - pitch[0] ) * 256.0f / (float) L_frame; - } - - /*------------------------------------------------------------------------* - * Compute spectral tilt - *------------------------------------------------------------------------*/ - - tilt = calculate_spectral_tilt( synth, L_frame / L_SUBFR, L_SUBFR ); - - /*------------------------------------------------------------------------* - * Compute pitch-synchronous energy at the frame end - *------------------------------------------------------------------------*/ - - *ener = frame_energy( L_frame, pitch, synth, *lp_speech, frame_ener ); - - /*------------------------------------------------------------------------* - * transform parameters between 0 & 1 - * find unique merit function - *------------------------------------------------------------------------*/ - - *enern = K_ENR_DEC * *ener + C_ENR_DEC; - tiltn = K_TILT_DEC * tilt + C_TILT_DEC; - corn = K_COR_DEC * voicing + C_COR_DEC; - zcn = K_ZC_DEC * zc_frame + C_ZC_DEC; - - if ( codec_mode == MODE2 && LTP_Gain != -1.0f && mode == CLASSIFIER_TCX ) - { - pcn = LTP_Gain * C_PC_DEC; - } - else - { - pcn = K_PC_DEC * pc + C_PC_DEC; - } - - if ( pcn > 1.0f ) - { - pcn = 1.0f; - } - else if ( pcn < 0.0f ) - { - pcn = 0.0f; - } - - fmerit1 = ( 1.0f / 6.0f ) * ( tiltn + 2.0f * corn + zcn + pcn + *enern ); - - if ( codec_mode == MODE2 && narrowBand ) - { - fmerit1 *= 0.9f; - } - - /*------------------------------------------------------------------------* - * frame classification - *------------------------------------------------------------------------*/ - - if ( codec_mode == MODE1 ) - { - *class_para = fmerit1; - } - *clas = calculate_classification_result( *clas, fmerit1, *ener, codec_mode ); - - return; -} - - -/*------------------------------------------------------------------------* - * FEC_clas_estim() - * - * Estimation of frame class, if not available in the bitstream - *------------------------------------------------------------------------*/ - -void FEC_clas_estim( - const float *syn, - const float *pitch, /* i : pitch values for each subframe */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t coder_type, /* i : coder type */ - const int16_t codec_mode, /* i : codec mode */ - float *mem_syn_clas_estim, /* i/o: memory of the synthesis signal for frame class estimation */ - int16_t *clas, /* i/o: frame classification */ - float *lp_speech, /* i/o: long term active speech energy average */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - int16_t *decision_hyst, /* i/o: hysteresis of the music/speech decision */ - int16_t *locattack, /* i/o: detection of attack (mainly to localized speech burst) */ - int16_t *UV_cnt, /* i/o: number of consecutives frames classified as UV */ - float *LT_UV_cnt, /* i/o: long term consecutives frames classified as UV */ - float *Last_ener, /* i/o: last_energy frame */ - int16_t *amr_io_class, /* i/o: classification for AMR-WB IO mode */ - float *lt_diff_etot, /* i/o: long-term total energy variation */ - float *class_para, /* o : classification para. fmerit1 */ - const float LTP_Gain, /* i : */ - const int16_t narrowBand, /* i : */ - const SIGNAL_CLASSIFIER_MODE mode, /* i : */ - const int16_t bfi, /* i : */ - const float preemph_fac, /* i : */ - const int16_t tcxonly, /* i : */ - const int32_t last_core_brate, /* i : last core bitrate */ - const int16_t FEC_mode /* i : ACELP FEC mode */ -) -{ - float diff_ener; - float mean_diff; - int16_t i; - float ftmp_c, fcorr, dev; - float frame_ener = 0.0f; - float ener = 0.0f; - float enern = 0.0f; - float tmp; - float old_synth[L_SYN_CLAS_ESTIM], *synth; - - /* After Rate Switching st->last_core is reset to 0. Check for last_core_brate is needed */ - if ( ( last_core_brate == SID_1k75 || last_core_brate == ACELP_6k60 || last_core_brate == ACELP_8k85 || last_core_brate == ACELP_12k65 || last_core_brate == ACELP_14k25 || last_core_brate == ACELP_15k85 || last_core_brate == ACELP_18k25 || last_core_brate == ACELP_19k85 || last_core_brate == ACELP_23k05 || last_core_brate == ACELP_23k85 ) && !Opt_AMR_WB && codec_mode == MODE2 && L_frame > L_FRAME ) - { - int16_t oldLenClasBuff, newLenClasBuff; - oldLenClasBuff = (int16_t) ( L_SYN_MEM_CLAS_ESTIM * L_FRAME / L_frame ); - newLenClasBuff = L_SYN_MEM_CLAS_ESTIM; - lerp_flt( &mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLenClasBuff], &mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLenClasBuff], newLenClasBuff, oldLenClasBuff ); - } - - synth = old_synth + L_SYN_MEM_CLAS_ESTIM; /* Set pointer to current frame */ - mvr2r( mem_syn_clas_estim, old_synth, L_SYN_MEM_CLAS_ESTIM ); /* Copy old synthesis into local buffer */ - mvr2r( syn, synth, L_frame ); /* Copy current synthesis into local buffer */ - - /* TCX outputs non-pre-speech */ - if ( codec_mode == MODE2 && mode == CLASSIFIER_TCX ) - { - tmp = syn[-1]; - preemph( synth, preemph_fac, L_frame, &tmp ); - } - - /* Do the classification only - - MODE1: when the class is not transmitted in the bitstream - - MODE2: on good frames (classifier is also called for bfi=1) */ - if ( ( codec_mode == MODE1 && ( FEC_mode == 0 || coder_type <= UNVOICED || Opt_AMR_WB ) ) || ( codec_mode == MODE2 && bfi != 1 && !tcxonly ) ) - { - - /*------------------------------------------------------------------------* - * classification decision depending on coder_type information - *------------------------------------------------------------------------*/ - - if ( coder_type == UNVOICED ) - { - *clas = UNVOICED_CLAS; - } - else if ( coder_type == VOICED ) - { - *clas = VOICED_CLAS; - } - else if ( coder_type == INACTIVE && !Opt_AMR_WB ) - { - *clas = INACTIVE_CLAS; - } - else - { - /*------------------------------------------------------------------------* - * GC, TC and AC frames - *------------------------------------------------------------------------*/ - - FEC_ClassifierCore( synth, pitch, L_frame, codec_mode, clas, lp_speech, &frame_ener, &ener, &enern, class_para, LTP_Gain, narrowBand, mode ); - } - - /*------------------------------------------------------------------------* - * Overwrite classification decision in case of music - *------------------------------------------------------------------------*/ - - if ( codec_mode == MODE1 ) - { - FEC_classificationMusic( coder_type, decision_hyst, clas ); - } - - /*---------------------------------------------------------------------------------* - * Measure energy on active voice frames (to improve FEC performance) - *---------------------------------------------------------------------------------*/ - - if ( *clas == VOICED_CLAS ) - { - if ( ( codec_mode == MODE2 && coder_type == VOICED ) || - ( codec_mode == MODE1 && ( Opt_AMR_WB || ( coder_type != GENERIC && coder_type != TRANSITION ) ) ) ) - { - enern = frame_energy( L_frame, pitch, synth, *lp_speech, &frame_ener ); - } - - *lp_speech = 0.99f * *lp_speech + 0.01f * frame_ener; - } - - if ( codec_mode == MODE1 ) - { - /*---------------------------------------------------------------------------------* - * Overwrite classification decision to UNVOICED_CLAS in case of INACTIVE frame - *---------------------------------------------------------------------------------*/ - - if ( coder_type == INACTIVE && *clas != INACTIVE_CLAS ) - { - *clas = UNVOICED_CLAS; - } - - /*---------------------------------------------------------------------------------* - * Classification refinement to improve noise coding (only in AMR-WB IO mode) - *---------------------------------------------------------------------------------*/ - - if ( Opt_AMR_WB ) - { - *locattack = 0; - - if ( *clas == UNVOICED_CLAS && coder_type != INACTIVE ) - { - /* unvoiced signal but not silence */ - if ( *lp_speech <= 40 ) - { - *UV_cnt = 16; - } - else - { - *UV_cnt -= 8; - } - } - else if ( coder_type != INACTIVE ) - { - /* neither unvoiced nor clean silence */ - ( *UV_cnt )++; - } - - if ( *UV_cnt > 300 ) - { - *UV_cnt = 300; - } - else if ( *UV_cnt < 0 ) - { - *UV_cnt = 0; - } - - /* Update long-term average number of frames between UNVOICED */ - if ( coder_type == INACTIVE ) - { - /* tends to speech if no activity */ - *LT_UV_cnt = 0.95f * *LT_UV_cnt; - - if ( *UV_cnt > 125 ) - { - *UV_cnt = 125; - } - } - else - { - *LT_UV_cnt = 0.9f * *LT_UV_cnt + 0.1f * *UV_cnt; - } - - /*-----------------------------------------------------------------------------* - * Compute frame energy difference - * IF long-term average is high and energy difference is relatively low - * classification is overwritten to AUDIO - * IF energy difference > 6.0dB - * consider an attack - *-----------------------------------------------------------------------------*/ - - diff_ener = ener - *Last_ener; - *Last_ener = ener; - *amr_io_class = *clas; - - if ( *LT_UV_cnt > LT_UV_THR && diff_ener < 12.0f ) - { - *amr_io_class = AUDIO_CLAS; - } - - if ( ( diff_ener > 6.0f && *clas == AUDIO_CLAS ) || ( diff_ener > 9.0f ) ) - { - *locattack = 1; - } - - /*------------------------------------------------------------------------* - * Compute statistical deviation of long-term energy variation and - * overwrite classification, if needed - *------------------------------------------------------------------------*/ - - if ( coder_type != INACTIVE ) - { - /* calculate mean energy variation of past MAX_LT frames */ - mean_diff = 0.0f; - for ( i = 1; i < MAX_LT; i++ ) - { - mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; - lt_diff_etot[i - 1] = lt_diff_etot[i]; - } - mean_diff += lt_diff_etot[i - 1] * INV_MAX_LT; - - /* find statistical deviation of the energy variation history against the last 15 frames */ - fcorr = 0.0f; - for ( i = MAX_LT - 15; i < MAX_LT; i++ ) - { - ftmp_c = lt_diff_etot[i] - mean_diff; - fcorr += ftmp_c * ftmp_c; - } - lt_diff_etot[i - 1] = diff_ener; - - /* compute statistical deviation */ - dev = (float) sqrt( fcorr / ( MAX_LT - 15 ) ); - - /* overwrite classification, if needed */ - if ( *amr_io_class == AUDIO_CLAS && dev > 5.0f ) - { - *amr_io_class = *clas; - *UV_cnt = (int16_t) ( 80 + *UV_cnt * 0.2f ); - } - } - } - } - } - - /* update the memory of synthesis for frame class estimation */ - mvr2r( old_synth + L_frame, mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - - return; -} - - -/*------------------------------------------------------------------------* - * FEC_dec_class() - * - * Decode class and energy information - *------------------------------------------------------------------------*/ - -static int16_t FEC_dec_class( - Decoder_State *st, /* i/o: decoder state structure */ - float *enr_q /* i : decoded energy */ -) -{ - int16_t clas, tmpS; - - clas = ONSET; - - if ( st->coder_type != VOICED ) - { - /* decode the class */ - tmpS = get_next_indice( st, FEC_BITS_CLS ); - - if ( tmpS == 0 ) - { - clas = UNVOICED_CLAS; - } - else if ( tmpS == 1 ) - { - if ( st->last_good >= VOICED_TRANSITION ) - { - clas = VOICED_TRANSITION; - } - else - { - clas = UNVOICED_TRANSITION; - } - } - else if ( tmpS == 2 ) - { - clas = VOICED_CLAS; - } - } - else - { - clas = VOICED_CLAS; - } - - /* decode the energy */ - if ( st->acelp_cfg.FEC_mode > 1 ) - { - tmpS = get_next_indice( st, FEC_BITS_ENR ); - - /* convert from logarithmic to linear domain (the range is 0 : 1.55 : 96 dB) */ - *enr_q = (float) pow( 10.0f, ( (float) tmpS * FEC_ENR_STEP ) / 10.0f ); - } - - return clas; -} - - -/*------------------------------------------------------------------------* - * FEC_classificationMusic() - * - * - *------------------------------------------------------------------------*/ - -static void FEC_classificationMusic( - const int16_t coder_type, /* i : coder type */ - int16_t *decision_hyst, /* i/o: hysteresis of the music/speech decision */ - int16_t *clas /* i/o: frame classification */ -) -{ - if ( coder_type == AUDIO ) - { - ( *decision_hyst ) += 4; - } - else - { - ( *decision_hyst )--; - } - - if ( coder_type == INACTIVE ) - { - *decision_hyst -= 10; - } - - if ( *decision_hyst > 200 ) - { - *decision_hyst = 200; - } - else if ( *decision_hyst < 0 ) - { - *decision_hyst = 0; - } - - if ( *decision_hyst > 16 && *clas < VOICED_CLAS && coder_type == AUDIO ) - { - *clas = VOICED_CLAS; - } - - return; -} - - -/*------------------------------------------------------------------------* - * FEC_pos_dec() - * - * Decode class, energy and last glottal pulse position at higher bitrates - * ( last glottal pulse position is encoded only in GENERIC frames ) - *------------------------------------------------------------------------*/ - -int16_t FEC_pos_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *last_pulse_pos, /* o : last glottal pulse position in the lost ACB */ - float *enr_q, /* o : decoded energy */ - const int16_t nBits_es_Pred /* i : number of bits for Es_pred Q */ - -) -{ - int16_t pitch_index, T0, T0_frac, T0_min, T0_max; - int16_t bit_pos_pitch_index, nBits; - - T0 = 0; - if ( st->coder_type > UNVOICED ) - { - /* decode the clas and energy information */ - if ( st->coder_type < AUDIO ) - { - st->clas_dec = FEC_dec_class( st, enr_q ); - - if ( st->coder_type == GENERIC && st->clas_dec == VOICED_CLAS && ( st->last_good <= UNVOICED_CLAS || st->last_good == INACTIVE_CLAS ) ) - { - st->clas_dec = SIN_ONSET; - } - } - - if ( st->coder_type == GENERIC && st->acelp_cfg.FEC_mode > 2 ) - { - nBits = st->acelp_cfg.pitch_bits[0]; - - /* The first pitch index is located right after the actual position + the last pulse position index + predicted innovation energy index */ - bit_pos_pitch_index = st->next_bit_pos + FEC_BITS_POS + nBits_es_Pred; - if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) - { - /* Harmonic flag is present */ - bit_pos_pitch_index++; - } - - /* retrieve the pitch index */ - pitch_index = get_indice( st, bit_pos_pitch_index, nBits ); - - /* decode pitch period */ - T0_min = PIT_MIN; - T0_max = PIT_MAX; - pit16k_Q_dec_flt( pitch_index, 10, 1, &T0, &T0_frac, &T0_min, &T0_max, &st->BER_detect ); - - /* decode last pulse position */ - *last_pulse_pos = get_next_indice( st, FEC_BITS_POS ); - - /* respect the sign */ - if ( *last_pulse_pos >= 128 ) - { - *last_pulse_pos = -( *last_pulse_pos & 0x7F ); - } - - if ( T0 >= 128 ) - { - *last_pulse_pos *= 2; - } - - if ( st->BER_detect ) - { - *last_pulse_pos = 0; - } - } - } - - return T0; -} -#endif diff --git a/lib_dec/FEC_clas_estim_fx.c b/lib_dec/FEC_clas_estim_fx.c index 8907b4525..4c268186d 100644 --- a/lib_dec/FEC_clas_estim_fx.c +++ b/lib_dec/FEC_clas_estim_fx.c @@ -12,10 +12,8 @@ /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 FEC_dec_class_fx( Decoder_State *st_fx, Word32 *enr_q ); static void Corre( const Word16 *x, const Word16 *y, const Word16 l, Word16 *gain ); -#endif /*---------------------------------------------------------------------* * Local Constants @@ -47,7 +45,6 @@ static void Corre( const Word16 *x, const Word16 *y, const Word16 l, Word16 *gai /* */ /*======================================================================*/ -#ifdef IVAS_FLOAT_FIXED void FEC_clas_estim_fx( Decoder_State *st_fx, /* i/o: decoder state handle */ const Word16 Opt_AMR_WB, @@ -963,4 +960,3 @@ static void Corre( #endif move16(); } -#endif diff --git a/lib_dec/FEC_fx.c b/lib_dec/FEC_fx.c index c2cf11b80..c0976e68a 100644 --- a/lib_dec/FEC_fx.c +++ b/lib_dec/FEC_fx.c @@ -9,7 +9,6 @@ #include "rom_dec.h" /* Decoder static table prototypes */ #include "prot_fx.h" /* Function prototypes */ #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ @@ -879,4 +878,3 @@ void gain_dec_bfi_fx( return; } -#endif diff --git a/lib_dec/FEC_lsf_estim.c b/lib_dec/FEC_lsf_estim.c index 54d3ea811..1fa0758f7 100644 --- a/lib_dec/FEC_lsf_estim.c +++ b/lib_dec/FEC_lsf_estim.c @@ -47,45 +47,3 @@ * - LSP calculation * - A(z) calculation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void FEC_lsf2lsp_interp_flt( - Decoder_State *st, /* i/o: Decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - float *Aq, /* o : calculated A(z) for 4 subframes */ - float *lsf, /* o : estimated LSF vector */ - float *lsp /* o : estimated LSP vector */ -) -{ - /* convert LSFs to LSPs */ - if ( st->Opt_AMR_WB ) - { - isf2isp( lsf, lsp, M, INT_FS_12k8 ); - } - else - { - if ( L_frame == L_FRAME ) - { - lsf2lsp( lsf, lsp, M, INT_FS_12k8 ); - } - else /* L_frame == L_FRAME16k */ - { - lsf2lsp( lsf, lsp, M, INT_FS_16k ); - } - } - - /*----------------------------------------------------------------------* - * Interpolate LSP vector and find A(z) - *----------------------------------------------------------------------*/ - - if ( st->Opt_AMR_WB ) - { - int_lsp( L_frame, st->lsp_old, lsp, Aq, M, interpol_isp_amr_wb, 1 ); - } - else - { - int_lsp( L_frame, st->lsp_old, lsp, Aq, M, interpol_frac_12k8, 0 ); - } - - return; -} -#endif diff --git a/lib_dec/FEC_lsf_estim_fx.c b/lib_dec/FEC_lsf_estim_fx.c index 90140911d..ba248598c 100644 --- a/lib_dec/FEC_lsf_estim_fx.c +++ b/lib_dec/FEC_lsf_estim_fx.c @@ -6,7 +6,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ /*-------------------------------------------------------------------* @@ -57,4 +56,3 @@ void FEC_lsf2lsp_interp( return; } -#endif diff --git a/lib_dec/FEC_pitch_estim.c b/lib_dec/FEC_pitch_estim.c index 725bbca8e..1b9ed9484 100644 --- a/lib_dec/FEC_pitch_estim.c +++ b/lib_dec/FEC_pitch_estim.c @@ -40,51 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------* - * FEC_pitch_estim() - * - * Estimation of pitch for FEC - *------------------------------------------------------------------------*/ - -void FEC_pitch_estim( - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t last_core, /* i : last core */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t clas, /* i : current frame classification */ - const int16_t last_good, /* i : last good clas information */ - const float pitch_buf[], /* i : Floating pitch for each subframe */ - const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ - float *bfi_pitch, /* i/o: update of the estimated pitch for FEC */ - int16_t *bfi_pitch_frame, /* o : frame length when pitch was updated */ - int16_t *upd_cnt, /* i/o: update counter */ - const int16_t coder_type /* i : coder_type */ -) -{ - if ( last_core == HQ_CORE || last_core == TCX_20_CORE || last_core == TCX_10_CORE ) - { - *bfi_pitch = pitch_buf[( L_frame / L_SUBFR ) - 1]; - *bfi_pitch_frame = L_frame; - *upd_cnt = MAX_UPD_CNT; - } - - if ( ( clas == VOICED_CLAS && last_good >= VOICED_TRANSITION ) || ( Opt_AMR_WB && clas == VOICED_CLAS ) ) - { - /* update pitch for FEC if pitch is coherent */ - if ( ( ( pitch_buf[3] < 1.4f * pitch_buf[1] ) && ( pitch_buf[3] > 0.7f * pitch_buf[1] ) && - ( pitch_buf[1] < 1.4f * old_pitch_buf[2 * NB_SUBFR - 1] ) && ( pitch_buf[1] > 0.7f * old_pitch_buf[2 * NB_SUBFR - 1] ) && - ( L_frame == L_FRAME ) ) || - ( ( pitch_buf[3] < 1.4f * pitch_buf[1] ) && ( pitch_buf[3] > 0.7f * pitch_buf[1] ) && - ( pitch_buf[1] < 1.4f * old_pitch_buf[2 * NB_SUBFR16k - 1] ) && ( pitch_buf[1] > 0.7f * old_pitch_buf[2 * NB_SUBFR16k - 1] ) && - ( L_frame == L_FRAME16k ) ) || - ( coder_type == TRANSITION ) ) - { - *bfi_pitch = pitch_buf[( L_frame / L_SUBFR ) - 1]; - *bfi_pitch_frame = L_frame; - *upd_cnt = 0; - } - } - - return; -} -#endif diff --git a/lib_dec/FEC_pitch_estim_fx.c b/lib_dec/FEC_pitch_estim_fx.c index 012057a9d..45304a94c 100644 --- a/lib_dec/FEC_pitch_estim_fx.c +++ b/lib_dec/FEC_pitch_estim_fx.c @@ -34,7 +34,6 @@ /* RETURN ARGUMENTS : */ /* _ None */ /*========================================================================*/ -#ifdef IVAS_FLOAT_FIXED void FEC_pitch_estim_fx( const Word16 Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ const Word16 last_core, /* i : last core */ @@ -113,4 +112,3 @@ void FEC_pitch_estim_fx( } } } -#endif diff --git a/lib_dec/FEC_scale_syn.c b/lib_dec/FEC_scale_syn.c index f48fecced..7d23dd6f7 100644 --- a/lib_dec/FEC_scale_syn.c +++ b/lib_dec/FEC_scale_syn.c @@ -40,404 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -#define SCLSYN_LAMBDA 0.3f - -/*-------------------------------------------------------------------* - * FEC_scale_syn() - * - * Smooth speech energy evolution when recovering after erasure(s) - *-------------------------------------------------------------------*/ - -void FEC_scale_syn( - const int16_t L_frame, /* i : length of the frame */ - int16_t clas, /* i/o: frame classification */ - const int16_t last_good, /* i : last good frame classification */ - float *synth, /* i/o: synthesized speech at Fs = 12k8 Hz */ - const float *pitch, /* i : pitch values for each subframe */ - float enr_old, /* i : energy at the end of previous frame */ - float enr_q, /* i : transmitted energy for current frame */ - const int16_t coder_type, /* i : coder type */ - const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ - int16_t *scaling_flag, /* i/o: flag to indicate energy control of syn */ - float *lp_ener_FEC_av, /* i/o: averaged voiced signal energy */ - float *lp_ener_FEC_max, /* i/o: averaged voiced signal energy */ - const int16_t bfi, /* i : current frame BFI */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t prev_bfi, /* i : previous frame BFI */ - const int32_t last_core_brate, /* i : previous frame core bitrate */ - float *exc, /* i/o: excitation signal without enhancement */ - float *exc2, /* i/o: excitation signal with enhancement */ - const float Aq[], /* i : LP filter coefs */ - float *old_enr_LP, /* i/o: LP filter E of last good voiced frame */ - const float *mem_tmp, /* i : temp. initial synthesis filter states */ - float *mem_syn, /* o : initial synthesis filter states */ - const int16_t avoid_lpc_burst_on_recovery, /* i : if true the excitation energy is limited if LP has big gain */ - const int16_t force_scaling /* i : force scaling */ -) -{ - int16_t i; - float enr1, enr2, gain1, gain2; - float scaling, ener_max, enr2_av, enr2_max; - float enr_LP; - float h1[L_FRAME / 2], tilt, rr0, rr1, pitch_dist, mean_pitch; - int16_t k; - - gain2 = 0.0f; - gain1 = 0.0f; - scaling = 1.0f; - enr_LP = 0.0f; - - /*-----------------------------------------------------------------* - * Find the synthesis filter impulse response on voiced - *-----------------------------------------------------------------*/ - - if ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) - { - if ( L_frame == L_FRAME ) - { - enr_LP = enr_1_Az( Aq + ( NB_SUBFR - 1 ) * ( M + 1 ), L_SUBFR ); - } - else /* L_frame == L_FRAME16k */ - { - enr_LP = enr_1_Az( Aq + ( NB_SUBFR16k - 1 ) * ( M + 1 ), L_SUBFR ); - } - } - - /*-----------------------------------------------------------------* - * Define when to scale the synthesis - *-----------------------------------------------------------------*/ - - if ( bfi ) - { - *scaling_flag = 1; /* Always check synthesis on bad frames */ - } - else if ( prev_bfi ) - { - if ( ( LSF_Q_prediction == AUTO_REGRESSIVE ) || ( LSF_Q_prediction == MOVING_AVERAGE ) ) - { - *scaling_flag = 2; /* Decoded LSFs affected */ - } - else if ( coder_type != TRANSITION ) - { - *scaling_flag = 1; /* SN, but not TC mode - LSF still affected by the interpolation */ - } - else - { - *scaling_flag = 0; /* LSF still possibly affected due to interpolation */ - } - scaling = 1.5f; - } - else - { - if ( ( LSF_Q_prediction == AUTO_REGRESSIVE ) && ( *scaling_flag == 2 ) ) - { - *scaling_flag = 2; /* Continue with energy control till the end of AR prediction */ - } - else if ( *scaling_flag > 0 ) - { - ( *scaling_flag )--; /* If scaling flag was equal to 2, add one control frame to account for the LSF interpolation */ - } - scaling = 2.0f; - } - - /*-----------------------------------------------------------------* - * Find the energy/gain at the end of the frame - *-----------------------------------------------------------------*/ - - fer_energy( L_frame, clas, synth, pitch[( L_frame >> 6 ) - 1], &enr2, L_frame ); - - if ( bfi || ( total_brate == ACELP_7k20 ) || ( total_brate == ACELP_8k00 ) ) - { - /* previous frame erased and no TC frame */ - if ( *scaling_flag > 0 ) - { - enr2 += 0.01f; - - if ( bfi ) /* In all bad frames, limit the gain to 1 */ - { - gain2 = (float) sqrt( enr_old / enr2 ); - if ( gain2 > 1.0f ) - { - gain2 = 1.0f; - } - - /* find the energy/gain at the beginning of the frame */ - fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); - - enr1 += 0.1f; - gain1 = (float) sqrt( enr_old / enr1 ); - if ( gain1 > 1.0f ) - { - gain1 = 1.0f; - } - } - else /* good frame */ - { - if ( enr_q == 0 ) /* If E info (FEC protection bits) is not available in the bitstream */ - { - enr_q = enr2; - - set_f( h1, 0.0f, L_FRAME / 2 ); - h1[0] = 1.0f; - syn_filt( Aq + ( 3 * ( M + 1 ) ), M, h1, h1, L_FRAME / 2, h1 + ( M + 1 ), 0 ); - rr0 = dotp( h1, h1, L_FRAME / 2 - 1 ) + 0.001f; - rr1 = dotp( h1, h1 + 1, L_FRAME / 2 - 1 ); - tilt = rr1 / rr0; - - pitch_dist = 0.0f; - mean_pitch = pitch[0]; - for ( k = 0; k < ( NB_SUBFR - 1 ); k++ ) - { - pitch_dist += abs( (int16_t) ( pitch[k + 1] + 0.5f ) - (int16_t) ( pitch[k] + 0.5f ) ); - mean_pitch += pitch[k + 1]; - } - pitch_dist /= (float) ( NB_SUBFR - 1 ); - mean_pitch /= (float) ( NB_SUBFR ); - - if ( ( tilt > 0.7f ) && /* HF resonnant filter */ - ( ( pitch_dist > 8.0f ) || ( mean_pitch < PIT_MIN ) ) && /* pitch unstable or very short */ - ( ( prev_bfi ) || ( ( coder_type == GENERIC ) && ( LSF_Q_prediction == AUTO_REGRESSIVE ) ) ) ) - { - if ( enr_q > scaling * enr_old ) - { - enr_q = scaling * enr_old; - } - } - else - { - if ( ( clas <= VOICED_TRANSITION ) || ( clas >= INACTIVE_CLAS ) ) - { - ener_max = *lp_ener_FEC_av; - } - else - { - ener_max = *lp_ener_FEC_max; - } - - if ( enr_old > ener_max ) - { - ener_max = enr_old; - } - if ( enr_q > scaling * ener_max ) - { - enr_q = scaling * ener_max; - } - } - } - - gain2 = (float) sqrt( enr_q / enr2 ); - - - /*-----------------------------------------------------------------* - * Find the energy/gain at the beginning of the frame to ensure smooth transition after erasure(s) - *-----------------------------------------------------------------*/ - - if ( ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && ( clas == UNVOICED_CLAS || clas == INACTIVE_CLAS ) ) || - last_core_brate == SID_1k75 || last_core_brate == SID_2k40 || last_core_brate == FRAME_NO_DATA ) && - prev_bfi ) - { - /* voiced -> unvoiced signal transition */ - /* CNG -> active signal transition */ - gain1 = gain2; - } - else - { - /* find the energy at the beginning of the frame */ - fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); - - enr1 += 0.1f; - gain1 = (float) sqrt( enr_old / enr1 ); - if ( gain1 > 1.2f ) - { - /* prevent clipping */ - gain1 = 1.2f; - } - - /* prevent amplifying the unvoiced or inactive part of the frame in case an offset is followed by an onset */ - if ( clas == ONSET && gain1 > gain2 && prev_bfi ) - { - gain1 = gain2; - } - } - - enr2 = enr_q; /* Set the end frame energy to the scaled energy, to be used in the lp_ener_FEC */ - } - - /*------------------------------------------------------------------------------* - * Smooth the energy evolution by exponentially evolving from gain1 to gain2 - *------------------------------------------------------------------------------*/ - - gain2 *= ( 1.0f - AGC ); - for ( i = 0; i < L_frame; i++ ) - { - gain1 = gain1 * AGC + gain2; - exc[i] *= gain1; - exc2[i] *= gain1; - } - - /* smoothing is done in excitation domain, so redo synthesis */ - mvr2r( mem_tmp, mem_syn, M ); - syn_12k8( L_frame, Aq, exc2, synth, mem_syn, 1 ); - } - } - else - { - /* previous frame erased and no TC frame */ - if ( prev_bfi && coder_type != TRANSITION ) - { - enr2 += 0.01f; - if ( enr_q == 0 ) /* If E info (FEC protection bits) is not available in the bitstream */ - { - enr_q = enr2; - - set_f( h1, 0.0f, L_FRAME / 2 ); - h1[0] = 1.0f; - syn_filt( Aq + ( 3 * ( M + 1 ) ), M, h1, h1, L_FRAME / 2, h1 + ( M + 1 ), 0 ); - rr0 = dotp( h1, h1, L_FRAME / 2 - 1 ) + 0.001f; - rr1 = dotp( h1, h1 + 1, L_FRAME / 2 - 1 ); - tilt = rr1 / rr0; - - if ( ( ( ( total_brate == ACELP_13k20 ) || ( total_brate == ACELP_12k85 ) || ( total_brate == ACELP_12k15 ) || ( total_brate == ACELP_11k60 ) || - ( total_brate == ACELP_9k60 ) ) && - ( tilt > 0.7f ) && /* HF resonnant filter */ - ( ( clas == UNVOICED_CLAS ) || ( clas == INACTIVE_CLAS ) ) ) ) /* unvoiced classification */ - { - if ( enr_q > scaling * enr_old ) - { - enr_q = scaling * enr_old; - } - } - else if ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) - { - /* voiced -> voiced recovery */ - if ( ( *old_enr_LP != 0.0f ) && ( enr_LP > 2 * *old_enr_LP ) ) - { - enr_q /= enr_LP; - enr_q *= 2 * *old_enr_LP; - } - else if ( avoid_lpc_burst_on_recovery && enr_LP > 20.0f ) - { - enr_q = (float) ( enr_q * sqrt( 20.0f / enr_LP ) ); - } - } - - if ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) || force_scaling ) - { - if ( enr_q > enr_old ) - { - enr_q = ( 1 - SCLSYN_LAMBDA ) * enr_old + SCLSYN_LAMBDA * enr_q; - } - } - } - - gain2 = (float) sqrt( enr_q / enr2 ); - - /* do not allow E increase if enr_q index == 0 (lower end Q clipping) */ - if ( enr_q < 1.1f ) - { - if ( gain2 > 1.0f ) - { - gain2 = 1.0f; - } - } - else - { - if ( gain2 > 1.2f ) - { - gain2 = 1.2f; - } - } - - /*-----------------------------------------------------------------* - * Find the energy/gain at the beginning of the frame to ensure smooth transition after erasure(s) - *-----------------------------------------------------------------*/ - - if ( clas == SIN_ONSET ) - { - /* allow only slow increase */ - gain1 = 0.5f * gain2; - } - else if ( ( last_good >= VOICED_TRANSITION && last_good < INACTIVE_CLAS && ( clas == UNVOICED_CLAS || clas == INACTIVE_CLAS ) ) || last_core_brate == SID_1k75 || last_core_brate == SID_2k40 || last_core_brate == FRAME_NO_DATA ) - { - /* voiced -> unvoiced signal transition */ - /* CNG -> active signal transition */ - gain1 = gain2; - } - else - { - /* find the energy at the beginning of the frame */ - fer_energy( L_frame, clas, synth, pitch[0], &enr1, 0 ); - - enr1 += 0.1f; - gain1 = (float) sqrt( enr_old / enr1 ); - if ( gain1 > 1.2f ) - { - /* prevent clipping */ - gain1 = 1.2f; - } - if ( avoid_lpc_burst_on_recovery && ( enr_LP > 20.0f ) && ( enr_LP <= 2 * *old_enr_LP ) && ( gain1 > 1.0f ) ) - { - gain1 = 1.0f; - } - - /* prevent amplifying the unvoiced or inactive part of the frame in case an offset is followed by an onset */ - if ( clas == ONSET && gain1 > gain2 ) - { - gain1 = gain2; - } - } - - /*-----------------------------------------------------------------* - * Smooth the energy evolution by exponentially evolving from gain1 to gain2 - *-----------------------------------------------------------------*/ - - gain2 *= ( 1.0f - AGC ); - for ( i = 0; i < L_frame; i++ ) - { - gain1 = gain1 * AGC + gain2; - exc[i] *= gain1; - exc2[i] *= gain1; - } - - /* smoothing is done in excitation domain, so redo synthesis */ - mvr2r( mem_tmp, mem_syn, M ); - syn_12k8( L_frame, Aq, exc2, synth, mem_syn, 1 ); - } - } - - /*-----------------------------------------------------------------* - * Update low-pass filtered energy for voiced frames - *-----------------------------------------------------------------*/ - - if ( !bfi && ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) ) - { - if ( clas == VOICED_TRANSITION ) - { - enr2_av = enr2; - fer_energy( L_frame, VOICED_CLAS, synth, pitch[( L_frame >> 6 ) - 1], &enr2_max, L_frame ); - } - else - { - enr2_max = enr2; - fer_energy( L_frame, UNVOICED_CLAS, synth, pitch[( L_frame >> 6 ) - 1], &enr2_av, L_frame ); - } - - *lp_ener_FEC_av = 0.05f * enr2_av + 0.95f * *lp_ener_FEC_av; - *lp_ener_FEC_max = 0.05f * enr2_max + 0.95f * *lp_ener_FEC_max; - } - - /*-----------------------------------------------------------------* - * Update the LP filter energy for voiced frames - *-----------------------------------------------------------------*/ - - if ( clas >= VOICED_TRANSITION && clas < INACTIVE_CLAS ) - { - *old_enr_LP = enr_LP; - } - - - return; -} -#endif diff --git a/lib_dec/FEC_scale_syn_fx.c b/lib_dec/FEC_scale_syn_fx.c index 21a589c56..f8f3d8346 100644 --- a/lib_dec/FEC_scale_syn_fx.c +++ b/lib_dec/FEC_scale_syn_fx.c @@ -50,7 +50,6 @@ /* _ None */ /*========================================================================*/ -#ifdef IVAS_FLOAT_FIXED void FEC_scale_syn_fx( const Word16 L_frame, /* i : length of the frame */ Word16 *update_flg, /* o: flag indicating re-synthesis after scaling*/ @@ -1296,4 +1295,3 @@ void FEC_scale_syn_ivas_fx( return; } -#endif diff --git a/lib_dec/LD_music_post_filter.c b/lib_dec/LD_music_post_filter.c index dfdd586b4..b2b69cc45 100644 --- a/lib_dec/LD_music_post_filter.c +++ b/lib_dec/LD_music_post_filter.c @@ -42,724 +42,3 @@ #include "prot.h" #include "prot_fx.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define MAX_SNR1 45.0f -#define INV_MAX_SNR ( 1.f / ( MAX_SNR1 - 1.0f ) ) /* max. SNR considered for noise subtraction in voiced segments */ -#define MAX_SNR_SNR1 ( MAX_SNR1 * INV_MAX_SNR ) /* 45 * (1 / (MAX_SNR1-1)) */ - - -#define BIN_1KHZ ( int16_t )( 1000.f / BIN_16kdct ) -#define BIN_2KHZ ( int16_t )( 2000.f / BIN_16kdct ) -#define BIN_4KHZ ( int16_t )( 4000.f / BIN_16kdct ) - -#define MAX_GN_R 0.2f -#define ALPH 1.00f -#define BET ( 1.925f - ALPH ) -#define MAXX 5 - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void spectrum_mod_dct( float data[], const float lf_E[], float lf_EO[], const float noiseE[], const float minGain, float lp_gbin[], const int16_t music_flag, int16_t min_band, const float MAX_GN, const int16_t max_band ); -static void analy_sp_dct( const float dct_in[], float dct_buf[], float *fr_bands, float *lf_E, float *etot ); -static void find_enr_dct( const float data[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, const float bin_freq ); - - -/*------------------------------------------------------------------------* - * LD_music_post_filter() - * - * Music post-filter - *------------------------------------------------------------------------*/ - -void LD_music_post_filter( - MUSIC_POSTFILT_HANDLE hMusicPF, /* i/o: LD music postfilter handle */ - const float dtc_in[], /* i : input synthesis */ - float dtc_out[], /* o : output synthesis */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t coder_type, /* i : Coder type : -1 in case of IO */ - const int16_t Last_coder_type /* i : last Coder type */ -) -{ - float DCT_buf[DCT_L_POST]; - float fr_bands[MBANDS_GN_LD]; - float lf_E[VOIC_BINS_HR]; - float etot, ftmp; - int16_t i, j, k; - int16_t min_band = 0; - float local_min_gain = hMusicPF->LDm_enh_min_ns_gain; - int16_t music_flag2 = 0; - float max_val; - float max_ovf_2k, max_ovf_4k, max_ovf_6k; - float min_g_2k, min_g_4k, min_g_6k; - float m_ave, old_ftmp; - float old_ftmp_1; - float tmp_lfE[DCT_L_POST]; - float MAX_GN = MAX_GN_R; - int16_t MAX_band = MBANDS_GN_LD; - - /*------------------------------------------------------------------------* - * Frequency analysis - *------------------------------------------------------------------------*/ - - analy_sp_dct( dtc_in, DCT_buf, fr_bands, lf_E, &etot ); - - /*------------------------------------------------------------------------* - * Find signal classification - *------------------------------------------------------------------------*/ - - music_flag2 = stab_est( etot, hMusicPF->LDm_lt_diff_etot, &hMusicPF->LDm_mem_etot, &hMusicPF->LDm_nb_thr_3, &hMusicPF->LDm_nb_thr_1, hMusicPF->LDm_thres, &hMusicPF->LDm_last_music_flag, 1 ); - - if ( core_brate < ACELP_6k60 || Last_coder_type != AUDIO ) - { - /* do not perform music improvement on SID frames */ - music_flag2 = 0; - } - - if ( music_flag2 < 4 ) - { - hMusicPF->last_nonfull_music = 0; - } - else - { - ( hMusicPF->last_nonfull_music )++; - } - - hMusicPF->last_nonfull_music = min( 51, hMusicPF->last_nonfull_music ); - - /*------------------------------------------------------------------------* - * Remapping of bands - * Section to "remap" the minimal band and the minimum gain for our needs - *------------------------------------------------------------------------*/ - - if ( music_flag2 > 3 ) - { - min_band = 2; - local_min_gain = 0.25119f; - } - else if ( music_flag2 == 3 ) - { - min_band = 3; - local_min_gain = 0.25119f; - } - else if ( music_flag2 == 2 ) - { - min_band = 4; - local_min_gain = 0.35481f; - } - else if ( music_flag2 == 1 ) - { - min_band = 4; - local_min_gain = 0.50119f; - } - - min_band += 4; - - MAX_GN = 0.1f; - if ( core_brate > ACELP_9k60 ) - { - /* overshoot not allowed, since GSC already matches the energy */ - MAX_GN = 0.0f; - } - - if ( coder_type == AUDIO ) - { - /* with GSC we know for sure that we are in music */ - min_band = min( min_band, 3 ); - } - - /*------------------------------------------------------------------------* - * Approximation of the inter-harmonic noise level - * - sort the bin energy - * - compupte the average energy per band excluding the maximum energy bin - *------------------------------------------------------------------------*/ - - j = 0; - for ( i = 0; i < MBANDS_GN_LD; i++ ) - { - m_ave = 0.0f; - max_val = 0.0f; - - for ( k = j; k < mfreq_bindiv_LD[i] + j; k++ ) - { - m_ave += lf_E[k]; - max_val = max( max_val, lf_E[k] ); - } - - m_ave -= max_val; - m_ave /= mfreq_bindiv_LD[i] - 1; - - hMusicPF->LDm_bckr_noise[i] = m_ave * sc_qnoise[i]; - j += mfreq_bindiv_LD[i]; - } - - i = maximum( lf_E, DCT_L_POST, &m_ave ); - - /*------------------------------------------------------------------------* - * - Normalisation of the energy vector between [0.72, 5], with the form of pow(x,4) - * - Simple LP filtering along the frequency domain - * - LT averaging with the past and in function of the stability factor - *------------------------------------------------------------------------*/ - - m_ave = ALPH / lf_E[i]; - - ftmp = lf_E[0] * m_ave + BET; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp = min( ftmp, MAXX ); - old_ftmp = ftmp; - - ftmp = lf_E[1] * m_ave + BET; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp = min( ftmp, MAXX ); - old_ftmp_1 = ftmp; - tmp_lfE[0] = 0.5f * old_ftmp + 0.5f * ftmp; - - for ( i = 1; i < DCT_L_POST - 1; i++ ) - { - tmp_lfE[i] = 0.333f * old_ftmp + 0.333f * old_ftmp_1; - old_ftmp = old_ftmp_1; - ftmp = lf_E[i + 1] * m_ave + BET; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp *= ftmp; - old_ftmp_1 = min( ftmp, MAXX ); - tmp_lfE[i] += 0.333f * old_ftmp_1; - } - - ftmp = lf_E[i] * m_ave + BET; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp *= ftmp; - ftmp = min( ftmp, MAXX ); - tmp_lfE[i] = 0.5f * old_ftmp + 0.5f * ftmp; - - for ( i = 0; i < BIN_4KHZ; i++ ) - { - hMusicPF->filt_lfE[i] = tmp_lfE[i] * 0.05f + 0.95f * hMusicPF->filt_lfE[i]; - } - - for ( ; i < DCT_L_POST; i++ ) - { - hMusicPF->filt_lfE[i] = tmp_lfE[i] * 0.15f + 0.85f * hMusicPF->filt_lfE[i]; - } - - /*------------------------------------------------------------------------* - * Reduce inter-harmonic noise with SNR based method - * Second stage of spectral shaping modification based on the pow(x,4) energy spectrum - *------------------------------------------------------------------------*/ - - if ( coder_type == AUDIO ) - { - MAX_band = 16; - } - - spectrum_mod_dct( DCT_buf, lf_E, hMusicPF->LDm_enh_lf_EO, hMusicPF->LDm_bckr_noise, local_min_gain, hMusicPF->LDm_enh_lp_gbin, music_flag2, min_band, MAX_GN, MAX_band ); - - i = 0; - if ( music_flag2 >= 1 ) - { - for ( i = 0; i < BIN_1KHZ; i++ ) - { - ftmp = min( 1.0f, hMusicPF->filt_lfE[i] ); - DCT_buf[i] *= ftmp; - } - } - - if ( hMusicPF->last_nonfull_music > 40 ) - { - max_ovf_2k = 1.25f; - max_ovf_4k = 1.5f; - max_ovf_6k = 1.5f; - - min_g_2k = 0.0f; - min_g_4k = 0.0f; - min_g_6k = 0.0f; - - if ( coder_type == AUDIO ) - { - max_ovf_2k = 1.0f; - max_ovf_4k = 1.1f; - max_ovf_6k = 1.25f; - - min_g_2k = 0.75f; - min_g_4k = 0.5f; - min_g_6k = 0.5f; - - if ( core_brate > ACELP_9k60 ) - { - max_ovf_4k = 1.0f; - max_ovf_6k = 1.15f; - - min_g_2k = 0.925f; - min_g_4k = 0.825f; - min_g_6k = 0.75f; - } - } - else if ( core_brate >= ACELP_12k65 ) - { - max_ovf_2k = 1.0f; - max_ovf_4k = 1.25f; - - if ( core_brate > ACELP_15k85 ) - { - max_ovf_4k = 1.0f; - max_ovf_6k = 1.25f; - - min_g_2k = 0.75f; - min_g_4k = 0.5f; - min_g_6k = 0.5f; - } - } - - for ( ; i < BIN_2KHZ; i++ ) - { - ftmp = min( max_ovf_2k, hMusicPF->filt_lfE[i] ); - ftmp = max( min_g_2k, ftmp ); - DCT_buf[i] *= ftmp; - } - - for ( ; i < BIN_4KHZ; i++ ) - { - ftmp = min( max_ovf_4k, hMusicPF->filt_lfE[i] ); - ftmp = max( min_g_4k, ftmp ); - DCT_buf[i] *= ftmp; - } - - if ( coder_type != AUDIO || core_brate > ACELP_8k85 ) - { - /* Do not modify HF when coded with GSC at LR, because the spectrum is just noise */ - for ( ; i < DCT_L_POST; i++ ) - { - ftmp = min( max_ovf_6k, hMusicPF->filt_lfE[i] ); - ftmp = max( min_g_6k, ftmp ); - DCT_buf[i] *= ftmp; - } - } - } - else if ( hMusicPF->last_nonfull_music > 25 ) - { - /* When unsure on content type only slight clean-up allowed, no overshoot allowed */ - for ( ; i < DCT_L_POST; i++ ) - { - ftmp = min( 1.f, hMusicPF->filt_lfE[i] ); - DCT_buf[i] *= ftmp; - } - } - - /* reconstruction of the enhanced synthesis */ - mvr2r( DCT_buf, dtc_out, DCT_L_POST ); -} - -/*---------------------------------------------------------------------------* - * spectrum_mod_dct() - * - * spectrum enhancement according to the output of signal_type_clas() - *---------------------------------------------------------------------------*/ - -static void spectrum_mod_dct( - float data[], /* i/o: DCT spectrum */ - const float lf_E[], /* i : per bin E for first 46 bins (without DC) */ - float lf_EO[], /* i/o: old per bin E for previous half frame */ - const float noiseE[], /* i : per band background noise energy estimate */ - const float minGain, /* i : minimum suppression gain */ - float lp_gbin[], /* i/o: Smoothed suppression gain, per FFT bin */ - const int16_t music_flag, /* i : music ? 1:0 */ - int16_t min_band, - const float MAX_GN, - const int16_t MAX_band ) -{ - float maxNoise; - float binE[VOIC_BINS_HR]; - float gain, minE; - float freq; - float slope; - float inv_noise[MBANDS_GN_LD]; - float *pt_gbin, alpha, tmpN; - int16_t i; - float *pt; - float tmp, shift; - const float *pt2; - - gain = 0.0f; - - /*-----------------------------------------------------------------* - * Compute the inverse of noise - *-----------------------------------------------------------------*/ - - for ( i = 0; i <= MBANDS_GN_LD - 1; i++ ) - { - inv_noise[i] = 1.0f / noiseE[i]; - } - - /*----------------------------------------------------------------------* - * Perform noise reduction for 1 frames - *----------------------------------------------------------------------*/ - - for ( i = 0; i < VOIC_BINS_HR; i++ ) - { - binE[i] = 0.3f * lf_EO[i] + 0.7f * lf_E[i]; - } - mvr2r( lf_E, lf_EO, VOIC_BINS_HR ); /* update */ - - /*----------------------------------------------------------------------* - * Find the maximum noise in a critical band - *----------------------------------------------------------------------*/ - - maxNoise = 0.0f; - for ( i = 0; i <= MBANDS_GN_LD - 1; i++ ) - { - set_max( &maxNoise, noiseE[i] ); - } - - /* pointer initialization */ - pt = &data[0]; - - /*-----------------------------------------------------------------* - * Initialization for active speech frames or VAD hangover frames, - * (exclude Clean speech) - *-----------------------------------------------------------------*/ - - if ( music_flag != 0 ) /* prevent subtraction on clean speech */ - { - if ( maxNoise <= 10.0f ) - { - minE = .5625f; - } - else - { - minE = minGain * minGain; - } - - pt2 = binE; - freq = 0; - - pt_gbin = lp_gbin; - tmp = INV_MAX_SNR; - slope = tmp - tmp * minE; - shift = MAX_SNR_SNR1 * minE - tmp; - for ( i = 0; i < min_band; i++ ) - { - for ( ; freq <= mfreq_loc_LD[i]; freq += BIN_16kdct ) - { - pt2++; - pt++; - *pt_gbin++ = 1.0f; - } - } - - /*-----------------------------------------------------------------* - * Per Frequency MODE1_BIN processing - * For highly voiced and highly pitched speech, use per bin - * subtraction in low frequencies (maximum up to 3700 Hz, - * first 17 critical bands) - *-----------------------------------------------------------------*/ - - for ( ; i < MAX_band /*MBANDS_GN_LD*/; i++ ) - { - - tmp = INV_MAX_SNR_tab[i]; - slope = tmp - tmp * minE; - shift = MAX_SNR_SNR1_tab[i] * minE - tmp; - - tmpN = slope * inv_noise[i]; - tmp = 0.0f; - while ( freq <= mfreq_loc_LD[i] ) - { - gain = 1.0f; - - if ( noiseE[i] >= 0.5f ) /* Do not alter if noise E very low */ - { - gain = tmpN * *pt2 + shift; /* limits: [x,y] = {[1, minE], [MAX_SNR1, 1]}, */ - } - - pt2++; - - if ( gain < minE ) - { - gain = minE; - } - - if ( gain > 1.0f + MAX_GN ) - { - gain = 1.0f + MAX_GN; - } - - /* the gain smoothing control: stronger lp filtering for lower gains */ - alpha = 1.0f - (float) sqrt( gain ); - - *pt_gbin = gain + alpha * *pt_gbin; - *pt++ *= *pt_gbin; - freq += BIN_16kdct; - pt_gbin++; - } - } - } - else - { - freq = BIN_16kdct; - pt_gbin = lp_gbin; - for ( i = 0; i < MBANDS_GN_LD; i++ ) - { - for ( ; freq <= mfreq_loc_LD[i]; freq += BIN_16kdct ) - { - *pt_gbin = 0.9f * *pt_gbin + 0.1f; - pt_gbin++; - } - } - } - - return; -} - -/*----------------------------------------------------------------------------------* - * analy_sp_dct() - * - * Spectral analysis of the current synthesized frame - *----------------------------------------------------------------------------------*/ - -static void analy_sp_dct( - const float dct_in[], /* i : input DCT spectrum */ - float dct_buf[], /* i : output DCT spectrum */ - float *fr_bands, /* o : energy in critical frequency bands */ - float *lf_E, /* o : per bin E for first... */ - float *etot /* o : total input energy */ -) -{ - float Bin_E[DCT_L_POST]; - - *etot = 0.0f; - mvr2r( dct_in, dct_buf, DCT_L_POST ); - - /*-----------------------------------------------------------------* - * Windowing - * Compute spectrum - * find energy per critical frequency band and total energy in dB - *-----------------------------------------------------------------*/ - - find_enr_dct( dct_buf, fr_bands, lf_E, etot, 0, MBANDS_GN_LD, Bin_E, BIN_16kdct ); - - /* find average log total energy over both half-frames */ - *etot = 10.0f * (float) log10( *etot ) - 3.0103f; - - return; -} - -/*------------------------------------------------------------------------* - * find_enr_dct) - * - * find input signal energy for each critical band and first 74 LF bins - * The energy is normalized by the number of frequency bins in a channel - *------------------------------------------------------------------------*/ - -void find_enr_dct( - const float data[], /* i : fft result, for the format see fft_rel.c */ - float band[], /* o : per band energy */ - float *ptE, /* o : per bin energy for low frequencies */ - float *Etot, /* o : total energy */ - const int16_t min_band, /* i : minimum critical band */ - const int16_t max_band, /* i : maximum critical band */ - float *Bin_E, /* o : Per bin energy */ - const float bin_freq /* i : Number of frequency bins */ -) -{ - int16_t i, cnt; - float freq, tmp; - const float *ptR; - - ptR = &data[0]; /* pointer to first real coefficient */ - freq = 0; - for ( i = 0; i < max_band; i++ ) - { - band[i] = 0.0f; - cnt = 0; - while ( freq <= mfreq_loc_LD[i] ) - { - /* energy */ - *ptE = *ptR * *ptR; - - /* normalization - corresponds to FFT normalization by 2/L_FFT */ - *ptE *= 1.0f / ( DCT_L_POST ); - - *Bin_E = *ptE; - Bin_E++; - band[i] += *ptE++; - ptR++; - - freq += bin_freq; - cnt++; - } - - /* normalization per frequency bin */ - band[i] /= cnt; - - if ( band[i] < E_MIN ) - { - band[i] = E_MIN; - } - } - - /*-----------------------------------------------------------------* - * Find the total energy over the input bandwidth - *-----------------------------------------------------------------*/ - - tmp = *Etot; - for ( i = min_band; i <= NB_LIMIT_BAND; i++ ) - { - /* total channel energy */ - tmp += band[i]; - } - - *Etot = tmp; - - return; -} - -/*------------------------------------------------------------------------* - * Prep_music_postP() - * - * Performs the steps needed to do the music post processing - *------------------------------------------------------------------------*/ - -void Prep_music_postP( - float exc_buffer_in[], /* i/o: excitation buffer */ - float dct_buffer_out[], /* o : DCT output buffer */ - float filt_lfE[], /* i/o: long term spectrum energy */ - const int16_t last_core, /* i : last core */ - const float *pitch_buf, /* i : current frame pitch information */ - float *LDm_enh_lp_gbin /* o : smoothed suppression gain, per bin FFT */ -) -{ - int16_t i; - float *pt1; - const float *pt2; - int16_t s_pit, fr_pit; - int16_t offset2; - - offset2 = OFFSET2; - - s_pit = (int16_t) ( pitch_buf[3] ); - fr_pit = (int16_t) ( ( pitch_buf[3] - s_pit ) * 4.0f ); - - /*------------------------------------------------------------* - * Extrapolation of the last future part and windowing - *------------------------------------------------------------*/ - - if ( last_core == HQ_CORE || last_core == TCX_20_CORE || last_core == TCX_10_CORE ) - { - set_f( filt_lfE, 1.0f, DCT_L_POST ); - set_f( LDm_enh_lp_gbin, 1.0f, VOIC_BINS_HR ); - pt1 = exc_buffer_in + offset2 - 1; - pt2 = pt1 + (int16_t) ( pitch_buf[0] + 0.5f ); - for ( i = 0; i < offset2; i++ ) - { - *pt1 = *pt2; - pt1--; - pt2--; - } - } - - pt1 = exc_buffer_in + DCT_L_POST - offset2; - pred_lt4_flt( pt1, pt1, s_pit, fr_pit, offset2, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - pt2 = post_dct_wind; - for ( i = 0; i < offset2; i++ ) - { - *pt1 *= *pt2; - pt1++; - pt2++; - } - - pt1 = exc_buffer_in; - pt2--; - for ( i = 0; i < offset2; i++ ) - { - *pt1 *= *pt2; - pt1++; - pt2--; - } - - edct( exc_buffer_in, dct_buffer_out, DCT_L_POST, EVS_MONO ); - - return; -} - -/*------------------------------------------------------------------------* - * Post_music_postP() - * - * Going back from frequency to time domain from the enhanced spectrum - * to retreive the aligned excitation and redo the synthesis - *------------------------------------------------------------------------*/ - -void Post_music_postP( - float dct_buffer_in[], /* i/o: excitation buffer */ - float exc_buffer_out[], /* o : DCT output buffer */ - float *exc2, /* i/o: Current excitation to be overwriten */ - const float *mem_tmp, /* i : previous frame synthesis memory */ - float *st_mem_syn2, /* i/o: current frame synthesis memory */ - const float *Aq, /* i : LPC filter coefficients */ - float *syn /* i/o: 12k8 synthesis */ - -) -{ - edct( dct_buffer_in, exc_buffer_out, DCT_L_POST, EVS_MONO ); - - mvr2r( exc_buffer_out + OFFSET2, exc2, L_FRAME ); - mvr2r( mem_tmp, st_mem_syn2, M ); - - syn_12k8( L_FRAME, Aq, exc2, syn, st_mem_syn2, 1 ); - - return; -} - - -/*-------------------------------------------------------------------* - * music_postfilt_init_flt() - * - * Initialize LD music postfilter state structure - *-------------------------------------------------------------------*/ - -void music_postfilt_init_flt( - MUSIC_POSTFILT_HANDLE hMusicPF /* i/o: LD music postfilter handle */ -) -{ - int16_t i; - - set_f( hMusicPF->dct_post_old_exc, 0, DCT_L_POST - OFFSET2 ); - - hMusicPF->LDm_enh_min_ns_gain = (float) pow( 10.0f, -12 / 20.0f ); - hMusicPF->LDm_last_music_flag = 0; - set_f( hMusicPF->LDm_lt_diff_etot, 0, MAX_LT ); - hMusicPF->LDm_thres[0] = TH_0_MIN; - hMusicPF->LDm_thres[1] = TH_1_MIN; - hMusicPF->LDm_thres[2] = TH_2_MIN; - hMusicPF->LDm_thres[3] = TH_3_MIN; - hMusicPF->LDm_nb_thr_1 = 0; - hMusicPF->LDm_nb_thr_3 = 0; - hMusicPF->LDm_mem_etot = 0.0f; - - for ( i = 0; i < VOIC_BINS_HR; i++ ) - { - hMusicPF->LDm_enh_lp_gbin[i] = 1.0f; - hMusicPF->LDm_enh_lf_EO[i] = 0.01f; - } - - for ( i = 0; i < MBANDS_GN_LD; i++ ) - { - hMusicPF->LDm_bckr_noise[i] = E_MIN; - } - - set_f( hMusicPF->filt_lfE, 1.0f, DCT_L_POST ); - hMusicPF->last_nonfull_music = 0; - - return; -} -#endif diff --git a/lib_dec/LD_music_post_filter_fx.c b/lib_dec/LD_music_post_filter_fx.c index 37f46301d..042520870 100644 --- a/lib_dec/LD_music_post_filter_fx.c +++ b/lib_dec/LD_music_post_filter_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants @@ -685,7 +684,7 @@ static void spectrum_mod_dct_fx( move16(); FOR( i = 0; i < MBANDS_GN_LD; i++ ) { - FOR( ; freq <= mfreq_loc_LD[i]; freq += BIN_16kdct_fx ) + FOR( ; freq <= mfreq_loc_LD_fx[i]; freq += BIN_16kdct_fx ) { /**pt_gbin = 0.9f* *pt_gbin + 0.1f;*/ *pt_gbin = round_fx( L_mac( L_mult( 29491 /*0.9f in Q15*/, *pt_gbin ), 32767 /*Q15*/, 1638 /*0.1f in Q14*/ ) ); /*Q14*/ @@ -1097,4 +1096,3 @@ void music_postfilt_init( return; } -#endif diff --git a/lib_dec/TonalComponentDetection.c b/lib_dec/TonalComponentDetection.c index 157b0daa1..040d4569d 100644 --- a/lib_dec/TonalComponentDetection.c +++ b/lib_dec/TonalComponentDetection.c @@ -45,803 +45,3 @@ #include "stat_com.h" #include "wmc_auto.h" #include "ivas_prot.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void findStrongestHarmonics( const uint16_t nSamples, const float *powerSpectrum, const float F0, const uint16_t nTotalHarmonics, uint16_t *pHarmonicIndexes, int16_t *pnHarmonics ); -static void CorrectF0( const uint16_t *pHarmonicIndexes, const uint16_t nHarmonics, float *pF0 ); -static void findCandidates( const uint16_t nSamples, const float *MDCTSpectrum, float *thresholdModificationNew, float floorPowerSpectrum ); -static void RefineThresholdsUsingPitch( const uint16_t nSamples, const uint16_t nSamplesCore, const float *powerSpectrum, const float lastPitchLag, const float currentPitchLag, float *pF0, float *thresholdModification ); -static void findTonalComponents( uint16_t *indexOfTonalPeak, uint16_t *lowerIndex, uint16_t *upperIndex, uint16_t *numIndexes, const uint16_t nSamples, const float *powerSpectrum, const float F0, const float *thresholdModification ); - - -/*-------------------------------------------------------------------* - * DetectTonalComponents_flt() - * - * Detect tonal components in the lastMDCTSpectrum, use - * secondLastPowerSpectrum for the precise location of the peaks and - * store them in indexOfTonalPeak. Updates lowerIndex, upperIndex, - * pNumIndexes accordingly. - *-------------------------------------------------------------------*/ - -void DetectTonalComponents_flt( - uint16_t indexOfTonalPeak[], - uint16_t lowerIndex[], - uint16_t upperIndex[], - uint16_t *pNumIndexes, - const float lastPitchLag, - const float currentPitchLag, - const float lastMDCTSpectrum[], - const float scaleFactors[], - const float secondLastPowerSpectrum[], - const uint16_t nSamples, - const uint16_t nSamplesCore, - float floorPowerSpectrum, /* i : lower limit for power spectrum bins */ - const PsychoacousticParameters *psychParamsCurrent ) -{ - float F0; - float thresholdModification[L_FRAME_MAX]; - float *pScaledMdctSpectrum = thresholdModification; - int16_t nBands; - - /* Convert from 16 bit to 32 bit */ - mvr2r( lastMDCTSpectrum, pScaledMdctSpectrum, nSamples ); - if ( psychParamsCurrent == NULL ) - { - nBands = FDNS_NPTS; - mdct_noiseShaping_flt( pScaledMdctSpectrum, nSamplesCore, scaleFactors, nBands ); - } - else - { - sns_shape_spectrum( pScaledMdctSpectrum, psychParamsCurrent, scaleFactors, nSamplesCore ); - nBands = psychParamsCurrent->nBands; - } - - v_multc( pScaledMdctSpectrum + nSamplesCore, scaleFactors[nBands - 1], pScaledMdctSpectrum + nSamplesCore, nSamples - nSamplesCore ); - - /* Find peak candidates in the last frame. */ - findCandidates( nSamples, pScaledMdctSpectrum, thresholdModification, floorPowerSpectrum ); - - /* Refine peak candidates using the pitch information */ - RefineThresholdsUsingPitch( nSamples, nSamplesCore, secondLastPowerSpectrum, lastPitchLag, currentPitchLag, &F0, thresholdModification ); - - /* Find peaks in the second last frame */ - findTonalComponents( indexOfTonalPeak, lowerIndex, upperIndex, pNumIndexes, nSamples, secondLastPowerSpectrum, F0, thresholdModification ); - - return; -} - - -/*-------------------------------------------------------------------* - * RefineTonalComponents_flt() - * - *-------------------------------------------------------------------*/ - -/* When called, the tonal components are already stored in - * indexOfTonalPeak. Detect tonal components in the lastMDCTSpectrum, - * use secondLastPowerSpectrum for the precise location of the peaks and - * then keep in indexOfTonalPeak only the tonal components that are - * again detected Updates indexOfTonalPeak, lowerIndex, upperIndex, - * phaseDiff, phases, pNumIndexes accordingly. */ -void RefineTonalComponents_flt( - uint16_t indexOfTonalPeak[], - uint16_t lowerIndex[], - uint16_t upperIndex[], - float phaseDiff[], - float phases[], - uint16_t *pNumIndexes, - const float lastPitchLag, - const float currentPitchLag, - const float lastMDCTSpectrum[], - const float scaleFactors[], - const float secondLastPowerSpectrum[], - const uint16_t nSamples, - const uint16_t nSamplesCore, - float floorPowerSpectrum, /* i : lower limit for power spectrum bins */ - const PsychoacousticParameters *psychParamsCurrent ) -{ - uint16_t newIndexOfTonalPeak[MAX_NUMBER_OF_IDX]; - uint16_t newLowerIndex[MAX_NUMBER_OF_IDX]; - uint16_t newUpperIndex[MAX_NUMBER_OF_IDX]; - uint16_t newNumIndexes, nPreservedPeaks; - uint16_t iNew, iOld, j; - float *pOldPhase, *pNewPhase; - - DetectTonalComponents_flt( newIndexOfTonalPeak, newLowerIndex, newUpperIndex, &newNumIndexes, lastPitchLag, currentPitchLag, lastMDCTSpectrum, scaleFactors, secondLastPowerSpectrum, - nSamples, nSamplesCore, floorPowerSpectrum, psychParamsCurrent ); - - nPreservedPeaks = 0; - iNew = 0; - pOldPhase = phases; - pNewPhase = phases; - for ( iOld = 0; iOld < *pNumIndexes; iOld++ ) - { - /* We don't want that the old peak index is at the border of the new peak region, that is why >= newUpperIndex and > newLowerIndex */ - while ( ( iNew < newNumIndexes ) && ( indexOfTonalPeak[iOld] >= newUpperIndex[iNew] ) ) - { - ++iNew; - } - - if ( ( iNew < newNumIndexes ) && ( indexOfTonalPeak[iOld] > newLowerIndex[iNew] ) ) - { - newIndexOfTonalPeak[nPreservedPeaks] = indexOfTonalPeak[iOld]; - newLowerIndex[nPreservedPeaks] = lowerIndex[iOld]; - newUpperIndex[nPreservedPeaks] = upperIndex[iOld]; - phaseDiff[nPreservedPeaks] = phaseDiff[iOld]; - - for ( j = lowerIndex[iOld]; j <= upperIndex[iOld]; j++ ) - { - *pNewPhase++ = *pOldPhase++; - } - - ++nPreservedPeaks; - } - else - { - pOldPhase += upperIndex[iOld] - lowerIndex[iOld] + 1; - } - } - - for ( iNew = 0; iNew < nPreservedPeaks; iNew++ ) - { - indexOfTonalPeak[iNew] = newIndexOfTonalPeak[iNew]; - lowerIndex[iNew] = newLowerIndex[iNew]; - upperIndex[iNew] = newUpperIndex[iNew]; - } - - *pNumIndexes = nPreservedPeaks; - - return; -} - - -/*-------------------------------------------------------------------* - * Local functions - *-------------------------------------------------------------------*/ - -static void calcPseudoSpec( - const float *mdctSpec, - const uint16_t nSamples, - float floorPowerSpectrum, - float *powerSpec ) -{ - int16_t k; - float x; - - for ( k = 1; k <= nSamples - 2; k++ ) - { - x = ( mdctSpec[k + 1] - mdctSpec[k - 1] ); /* An MDST estimate */ - x = mdctSpec[k] * mdctSpec[k] + x * x; - powerSpec[k] = max( floorPowerSpectrum, x ); - } - - powerSpec[0] = 0.5f * powerSpec[1]; - powerSpec[nSamples - 1] = 0.5f * powerSpec[nSamples - 2]; - - return; -} - -static void getEnvelope( - const int16_t nSamples, - const float *powerSpec, - float F0, - float *envelope, - float *smoothedSpectrum ) -{ - int16_t nFilterLength, nHalfFilterLength, nSecondHalfFilterLength, n1, n2; - int16_t i; - double sum; /* double is required to avoid precision problems in the optimized version. */ - - if ( F0 == 0 ) - { - nFilterLength = 15; - } - else if ( F0 <= 10.0f ) - { - nFilterLength = 11; - } - else if ( F0 >= 22.0f ) - { - /* For F0 >= 22 peak is isolated well enough with the filter length of 23. - This case is however not triggered due to the limit of pit_min, - but the line is left for security reasons. */ - nFilterLength = 23; - } - else - { - nFilterLength = 1 + 2 * (int16_t) ( F0 / 2 ); - } - - nHalfFilterLength = nFilterLength / 2; - n1 = nHalfFilterLength + 1; - nSecondHalfFilterLength = nFilterLength - nHalfFilterLength; - n2 = nSecondHalfFilterLength - 1; - - assert( ( nFilterLength >= 7 ) && ( nFilterLength <= 23 ) && ( nFilterLength % 2 == 1 ) ); - - sum = 0; - for ( i = 0; i < n2; i++ ) - { - sum += LEVEL_ABOVE_ENVELOPE_FLT * powerSpec[i]; - } - - /* No need for PTR_INIT for powerSpec[i+n2] as we continue from the previous loop */ - for ( i = 0; i < n1; i++ ) - { - sum += LEVEL_ABOVE_ENVELOPE_FLT * powerSpec[i + n2]; - /* 1/(i+nSecondHalfFilterLength) needs to be stored in a table for each filter length */ - envelope[i] = (float) sum / ( i + nSecondHalfFilterLength ); - } - sum /= nFilterLength; /* 1/nFilterLength is from a table */ - - /* No need for PTR_INIT for powerSpec[i+n2] as we continue from the previous loop */ - for ( i = n1; i < nSamples - n2; i++ ) - { - sum += LEVEL_ABOVE_ENVELOPE_FLT * ( powerSpec[i + n2] - powerSpec[i - n1] ) / nFilterLength; /* LEVEL_ABOVE_ENVELOPE_FLT/nFilterLength is from a table */ - envelope[i] = (float) sum; - } - sum *= nFilterLength; - - /* No need for PTR_INIT for powerSpec[i-n1] as we continue from the previous loop */ - for ( i = nSamples - n2; i < nSamples; i++ ) - { - sum -= LEVEL_ABOVE_ENVELOPE_FLT * powerSpec[i - n1]; - /* 1/(nSamples-(i-nHalfFilterLength)) needs to be stored in a table for each filter length */ - envelope[i] = (float) sum / ( nSamples - ( i - nHalfFilterLength ) ); - } - - for ( i = 1; i < nSamples - 1; i++ ) - { - smoothedSpectrum[i] = 0.75f * powerSpec[i - 1] + powerSpec[i] + 0.75f * powerSpec[i + 1]; - } - - smoothedSpectrum[0] = powerSpec[0] + 0.75f * powerSpec[1]; - smoothedSpectrum[nSamples - 1] = 0.75f * powerSpec[nSamples - 2] + powerSpec[nSamples - 1]; - - return; -} - -static void GetF0( - const uint16_t nSamples, /* i*/ - const uint16_t nSamplesCore, /* i*/ - const float *powerSpectrum, /* i*/ - const float pitchLag, /* i*/ - float *pOrigF0, /* i/o*/ - float *pF0 /* i/o*/ -) -{ - float halfPitchLag; - uint16_t rgiStrongHarmonics[MAX_PEAKS_FROM_PITCH]; - int16_t nTotalHarmonics, nStrongHarmonics; - - assert( LAST_HARMONIC_POS_TO_CHECK <= nSamplesCore ); - - /* Use only F0 >= 100 Hz */ - if ( ( pitchLag > 0 ) && ( pitchLag <= 0.5f * nSamplesCore ) ) - { - halfPitchLag = 0.5f * pitchLag; - *pF0 = nSamplesCore / halfPitchLag; - *pOrigF0 = *pF0; - if ( nSamples < 2 * LAST_HARMONIC_POS_TO_CHECK ) - { - nTotalHarmonics = (int16_t) ( nSamples / ( *pF0 ) ); - } - else - { - nTotalHarmonics = (int16_t) ( 2 * LAST_HARMONIC_POS_TO_CHECK / ( *pF0 ) ); /* For correcting F0 we go 2 times the last harmonic position that will be used */ - } - - /* Get in rgiStrongHarmonics all i for which i*F0 are the strongest harmonics */ - findStrongestHarmonics( nSamples, powerSpectrum, *pF0, nTotalHarmonics, rgiStrongHarmonics, &nStrongHarmonics ); - CorrectF0( rgiStrongHarmonics, nStrongHarmonics, pF0 ); - } - else - { - *pF0 = 0; - *pOrigF0 = 0; - } - - return; -} - -static void findStrongestHarmonics( - const uint16_t nSamples, - const float *powerSpectrum, - const float F0, - const uint16_t nTotalHarmonics, - uint16_t *pHarmonicIndexes, - int16_t *pnHarmonics ) -{ - float peaks[MAX_PEAKS_FROM_PITCH], smallestPeak; - uint16_t nPeaksToCheck, nPeaks, iSmallestPeak; - int16_t i, l, k; - - nPeaks = 0; - iSmallestPeak = 0; - smallestPeak = FLT_MAX; - nPeaksToCheck = min( nTotalHarmonics, MAX_PEAKS_FROM_PITCH + 1 ); - - for ( i = 1; i < nPeaksToCheck; i++ ) - { - float newPeak; - - k = (int16_t) ( i * F0 ); - assert( k > 0 && k < 2 * LAST_HARMONIC_POS_TO_CHECK && k < nSamples ); - - newPeak = powerSpectrum[k]; - peaks[nPeaks] = newPeak; - pHarmonicIndexes[nPeaks] = i; - if ( newPeak <= smallestPeak ) - { - iSmallestPeak = nPeaks; - smallestPeak = newPeak; - } - ++nPeaks; - } - - for ( ; i < nTotalHarmonics; i++ ) - { - float newPeak; - - k = (int16_t) ( i * F0 ); - assert( k > 0 && k < 2 * LAST_HARMONIC_POS_TO_CHECK && k < nSamples ); - newPeak = powerSpectrum[k]; - - if ( newPeak > smallestPeak ) - { - peaks[iSmallestPeak] = newPeak; - pHarmonicIndexes[iSmallestPeak] = i; - smallestPeak = newPeak; - for ( l = 0; l < MAX_PEAKS_FROM_PITCH; l++ ) - { - if ( peaks[l] <= smallestPeak ) - { - iSmallestPeak = l; - smallestPeak = peaks[l]; - } - } - } - } - sort( pHarmonicIndexes, nPeaks ); - *pnHarmonics = nPeaks; - - return; -} - -/* Use new F0, for which harmonics are most common in pHarmonicIndexes */ -static void CorrectF0( - const uint16_t *pHarmonicIndexes, - const uint16_t nHarmonics, - float *pF0 ) -{ - int16_t i; - float F0; - uint16_t diff[MAX_PEAKS_FROM_PITCH - 1], sortedDiff[MAX_PEAKS_FROM_PITCH - 1]; - uint16_t iMostCommonDiff, nMostCommonDiff, nSameDiff, iMult; - - for ( i = 0; i < MAX_PEAKS_FROM_PITCH - 1; i++ ) - { - diff[i] = 0; - sortedDiff[i] = 0; - } - - F0 = *pF0; - if ( F0 > 0 && nHarmonics > 0 ) - { - for ( i = 0; i < nHarmonics - 1; i++ ) - { - diff[i] = pHarmonicIndexes[i + 1] - pHarmonicIndexes[i]; - sortedDiff[i] = diff[i]; - } - sort( sortedDiff, nHarmonics - 1 ); - iMostCommonDiff = sortedDiff[0]; - nSameDiff = 1; - i = 1; - if ( sortedDiff[0] * pHarmonicIndexes[0] == 1 ) - { - /* Find how many distances between peaks have length 1 */ - for ( ; i < nHarmonics - 1; i++ ) - { - if ( sortedDiff[i] == 1 ) - { - ++nSameDiff; - } - } - } - nMostCommonDiff = nSameDiff; - - /* If there are at least 3 distances between peaks with length 1 and if the 1st harmonic is in pHarmonicIndexes then keep the original F0 */ - /* Otherwise find the most common distance between peaks */ - if ( nSameDiff < 3 ) - { - /* Find the most common difference */ - for ( i = nSameDiff; i < nHarmonics - 1; i++ ) - { - if ( sortedDiff[i] == sortedDiff[i - 1] ) - { - ++nSameDiff; - } - else - { - if ( nSameDiff > nMostCommonDiff ) - { - nMostCommonDiff = nSameDiff; - iMostCommonDiff = sortedDiff[i - 1]; - } - else - { - if ( ( nSameDiff == nMostCommonDiff ) && ( abs( (int16_t) iMostCommonDiff - (int16_t) pHarmonicIndexes[0] ) > abs( (int16_t) sortedDiff[i - 1] - (int16_t) pHarmonicIndexes[0] ) ) ) - { - nMostCommonDiff = nSameDiff; - iMostCommonDiff = sortedDiff[i - 1]; - } - } - nSameDiff = 1; - } - } - - if ( nSameDiff > nMostCommonDiff ) - { - nMostCommonDiff = nSameDiff; - iMostCommonDiff = sortedDiff[nHarmonics - 2]; - } - } - - /* If there are enough peaks at the same distance */ - if ( nMostCommonDiff >= MAX_PEAKS_FROM_PITCH / 2 ) - { - iMult = 1; - for ( i = 0; i < nHarmonics - 1; i++ ) - { - if ( diff[i] == iMostCommonDiff ) - { - iMult = pHarmonicIndexes[i]; - break; - } - - /* for rare cases of octave mismatch or missing harmonics */ - if ( ( i < nHarmonics - 2 ) && ( diff[i] == diff[i + 1] ) && ( diff[i] + diff[i + 1] == iMostCommonDiff ) ) - { - iMult = pHarmonicIndexes[i]; - break; - } - } - - /* If the real F0 is much higher than the original F0 from the pitch */ - if ( iMult <= 3 ) - { - /* Use iMostCommonDiff, because the lowest pHarmonicIndexes[i] (which is equal to iMult) may not correspond to the new F0, but to it's multiple */ - F0 = iMostCommonDiff * F0; - } - else - { - F0 = 0; - } - } - /* Otherwise if there are at least 3 distances between peaks with length 1 and if the 1st harmonic is in pHarmonicIndexes then keep the original F0 */ - /* Otherwise don't use F0 */ - else if ( ( iMostCommonDiff > 1 ) || ( nMostCommonDiff < 3 ) ) - { - /* Not enough peaks at the same distance => don't use the pitch. */ - F0 = 0; - } - *pF0 = F0; - } - - return; -} - -static void modifyThreshold( - const int16_t i, - float F0, - float threshold, - float *thresholdModification ) -{ - float harmonic, fractional, twoTimesFract; - int16_t k; - - harmonic = i * F0; - k = (int16_t) harmonic; - fractional = harmonic - k; /* Fractional part of the i*F0 */ - twoTimesFract = 2.0f * fractional; /* threshold if the centar of the peek is between k-1 and k, threshold+2 if the centar of the peek is between k and k+1 */ - thresholdModification[k] = threshold; - thresholdModification[k - 1] = threshold + twoTimesFract; - thresholdModification[k + 1] = threshold + 2.0f - twoTimesFract; - - return; -} - -static void modifyThresholds( - float F0, - float origF0, - float *thresholdModification ) -{ - int16_t i, nHarmonics; - - if ( ( F0 == 0 ) && ( origF0 > 0 ) ) - { - nHarmonics = min( MAX_PEAKS_FROM_PITCH, (int16_t) ( LAST_HARMONIC_POS_TO_CHECK / origF0 ) ); - for ( i = 1; i <= nHarmonics; i++ ) - { - modifyThreshold( i, origF0, 0.7f, thresholdModification ); - } - } - else if ( ( F0 > 0 ) && ( origF0 > 0 ) ) - { - nHarmonics = min( MAX_PEAKS_FROM_PITCH, (int16_t) ( LAST_HARMONIC_POS_TO_CHECK / F0 ) ); - - for ( i = (int16_t) ( F0 / origF0 + 0.5f ); i > 0; i-- ) - { - modifyThreshold( i, origF0, 0.35f, thresholdModification ); - } - for ( i = 1; i <= nHarmonics; i++ ) - { - modifyThreshold( i, F0, 0.35f, thresholdModification ); - } - } - - return; -} - -static void findCandidates( - const uint16_t nSamples, - const float *MDCTSpectrum, - float *thresholdModificationNew, - float floorPowerSpectrum /* i : lower limit for power spectrum bins */ -) -{ - float powerSpectrum[L_FRAME_MAX]; - float envelope[L_FRAME_MAX]; - float smoothedSpectrum[L_FRAME_MAX]; - uint16_t upperIdx, lowerIdx; - int16_t k, j; - - calcPseudoSpec( MDCTSpectrum, nSamples, floorPowerSpectrum, powerSpectrum ); - getEnvelope( nSamples, powerSpectrum, 0, envelope, smoothedSpectrum ); - - set_f( thresholdModificationNew, UNREACHABLE_THRESHOLD_FLT, nSamples ); - for ( k = GROUP_LENGTH / 2; k <= nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ); k++ ) - { - if ( smoothedSpectrum[k] > envelope[k] ) - { - /* The check that bin at k is bigger than bins at k-1 and k+1 is needed to avoid deadlocks when the thresholds are low. */ - /* It removes some true peaks, especially if non weighted sum is used for the smoothed spectrum. */ - float biggerNeighbor; - biggerNeighbor = max( powerSpectrum[k - 1], powerSpectrum[k + 1] ); - if ( powerSpectrum[k] >= biggerNeighbor ) - { - /* Find the right foot */ - for ( upperIdx = k + 1; upperIdx < nSamples - 1; upperIdx++ ) - { - if ( powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) - { - /* Side lobes may increase for certain ammount */ - if ( ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) - { - break; - } - /* Check for further decrease after a side lobe increase */ - for ( j = upperIdx + 1; j < nSamples - 1; j++ ) - { - if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[j + 1] ) - { - break; - } - } - /* Side lobe increase must be 2 times smaller than the decrease to the foot */ - /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ - if ( 2.0f * powerSpectrum[upperIdx + 1] * powerSpectrum[j] > powerSpectrum[upperIdx] * powerSpectrum[upperIdx] ) - { - break; - } - upperIdx = j - 1; /* Reinitialize pointers due to the change of upperIdx */ - } - } - /* left foot */ - for ( lowerIdx = k - 1; lowerIdx > 0; lowerIdx-- ) - { - if ( powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) - { - /* Side lobes may increase for certain ammount */ - if ( ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) - { - break; - } - /* Check for further decrease after a side lobe increase */ - for ( j = lowerIdx - 1; j > 0; j-- ) - { - if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[j - 1] ) - { - break; - } - } - /* Side lobe increase must be 2 times smaller than the decrease to the foot */ - /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ - if ( 2.0f * powerSpectrum[lowerIdx - 1] * powerSpectrum[j] > powerSpectrum[lowerIdx] * powerSpectrum[lowerIdx] ) - { - break; - } - lowerIdx = j + 1; /* Reinitialize pointers due to the change of lowerIdx */ - } - } - - /* Check if there is a bigger peak up to the next peak foot */ - for ( j = max( GROUP_LENGTH / 2, lowerIdx ); j <= min( upperIdx, nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ) ); j++ ) - { - if ( powerSpectrum[j] > powerSpectrum[k] ) - { - k = j; /* PTR_INIT for powerSpectrum[k] */ - } - } - - /* Modify thresholds for the following frame */ - for ( j = k - 1; j < k + 2; j++ ) - { - if ( smoothedSpectrum[j] > envelope[j] ) - { - thresholdModificationNew[j] = SMALL_THRESHOLD_FLT; - } - else - { - thresholdModificationNew[j] = BIG_THRESHOLD_FLT; - } - } - /* Jump to the next foot of the peak. */ - k = upperIdx; /* Reinitialize pointers due to the change of k */ - } - } - } - - return; -} - -static void RefineThresholdsUsingPitch( - const uint16_t nSamples, - const uint16_t nSamplesCore, - const float *powerSpectrum, - const float lastPitchLag, - const float currentPitchLag, - float *pF0, - float *thresholdModification ) -{ - int16_t pitchIsStable; - float origF0; - - pitchIsStable = ( fabs( lastPitchLag - currentPitchLag ) < 0.25f ); - if ( pitchIsStable ) - { - GetF0( nSamples, nSamplesCore, powerSpectrum, lastPitchLag, &origF0, pF0 ); - - modifyThresholds( *pF0, origF0, thresholdModification ); - } - else - { - *pF0 = 0; - } - - return; -} - -static void findTonalComponents( - uint16_t *indexOfTonalPeak, /* OUT */ - uint16_t *lowerIndex, /* OUT */ - uint16_t *upperIndex, /* OUT */ - uint16_t *numIndexes, /* OUT */ - const uint16_t nSamples, /* IN */ - const float *powerSpectrum, /* IN */ - const float F0, /* IN */ - const float *thresholdModification /* IN */ -) -{ - float envelope[L_FRAME_MAX]; - float smoothedSpectrum[L_FRAME_MAX]; - - uint16_t nrOfFIS; - uint16_t upperIdx, lowerIdx, lowerBound; - int16_t k, j; - - getEnvelope( nSamples, powerSpectrum, F0, envelope, smoothedSpectrum ); - nrOfFIS = 0; - lowerBound = 0; - for ( k = GROUP_LENGTH / 2; k <= nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ); k++ ) - { - if ( smoothedSpectrum[k] > envelope[k] * thresholdModification[k] ) - { - /* The check that bin at k is bigger than bins at k-1 and k+1 is needed to avoid deadlocks when the thresholds are low. */ - /* It removes some true peaks, especially if non weighted sum is used for the smoothed spectrum. */ - float biggerNeighbor; - biggerNeighbor = max( powerSpectrum[k - 1], powerSpectrum[k + 1] ); - if ( powerSpectrum[k] >= biggerNeighbor ) - { - /* Find the right foot */ - for ( upperIdx = k + 1; upperIdx < nSamples - 1; upperIdx++ ) - { - if ( powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) - { - /* Side lobes may increase for certain ammount */ - if ( ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[upperIdx] < powerSpectrum[upperIdx + 1] ) - { - break; - } - /* Check for further decrease after a side lobe increase */ - for ( j = upperIdx + 1; j < nSamples - 1; j++ ) - { - if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[j + 1] ) - { - break; - } - } - /* Side lobe increase must be 2 times smaller than the decrease to the foot */ - /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ - if ( 2.0f * powerSpectrum[upperIdx + 1] * powerSpectrum[j] > powerSpectrum[upperIdx] * powerSpectrum[upperIdx] ) - { - break; - } - upperIdx = j - 1; /* Reinitialize pointers due to the change of upperIdx */ - } - } - /* left foot */ - for ( lowerIdx = k - 1; lowerIdx > lowerBound; lowerIdx-- ) - { - if ( powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) - { - /* Side lobes may increase for certain ammount */ - if ( ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[lowerIdx] < powerSpectrum[lowerIdx - 1] ) - { - break; - } - /* Check for further decrease after a side lobe increase */ - for ( j = lowerIdx - 1; j > 0; j-- ) - { - if ( powerSpectrum[j] < ALLOWED_SIDE_LOBE_FLUCTUATION_FLT * powerSpectrum[j - 1] ) - { - break; - } - } - /* Side lobe increase must be 2 times smaller than the decrease to the foot */ - /* Eq. to 2.0f*powerSpectrum[lowerIdx-1]/powerSpectrum[lowerIdx] > powerSpectrum[lowerIdx]/powerSpectrum[j] */ - if ( 2.0f * powerSpectrum[lowerIdx - 1] * powerSpectrum[j] > powerSpectrum[lowerIdx] * powerSpectrum[lowerIdx] ) - { - break; - } - lowerIdx = j + 1; /* Reinitialize pointers due to the change of lowerIdx */ - } - } - lowerBound = upperIdx; - - /* Check if there is a bigger peak up to the next peak foot */ - for ( j = max( GROUP_LENGTH / 2, lowerIdx ); j <= min( upperIdx, nSamples - ( GROUP_LENGTH - GROUP_LENGTH / 2 ) ); j++ ) - { - if ( powerSpectrum[j] > powerSpectrum[k] ) - { - k = j; /* PTR_INIT for powerSpectrum[k] */ - } - } - - assert( ( nrOfFIS == 0 ) || ( indexOfTonalPeak[nrOfFIS - 1] < k ) ); - lowerIndex[nrOfFIS] = k - GROUP_LENGTH / 2; - upperIndex[nrOfFIS] = k + ( GROUP_LENGTH - GROUP_LENGTH / 2 - 1 ); - if ( ( nrOfFIS > 0 ) && ( lowerIndex[nrOfFIS] <= upperIndex[nrOfFIS - 1] ) ) - { - int16_t m = ( k + indexOfTonalPeak[nrOfFIS - 1] ) / 2; - upperIndex[nrOfFIS - 1] = m; - lowerIndex[nrOfFIS] = m + 1; - } - indexOfTonalPeak[nrOfFIS++] = k; - if ( nrOfFIS == MAX_NUMBER_OF_IDX ) - { - break; - } - /* Jump to the next foot of the peak. */ - k = upperIdx; /* Reinitialize pointers due to the change of k */ - } - } - } - *numIndexes = nrOfFIS; - - return; -} -#endif diff --git a/lib_dec/TonalComponentDetection_fx.c b/lib_dec/TonalComponentDetection_fx.c index dab3cd359..2f288e938 100644 --- a/lib_dec/TonalComponentDetection_fx.c +++ b/lib_dec/TonalComponentDetection_fx.c @@ -14,7 +14,6 @@ #include "prot_fx.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ @@ -1231,4 +1230,3 @@ static void findTonalComponents( move16(); return; } -#endif diff --git a/lib_dec/acelp_core_dec.c b/lib_dec/acelp_core_dec.c index 8cdad3653..5350d6dbc 100644 --- a/lib_dec/acelp_core_dec.c +++ b/lib_dec/acelp_core_dec.c @@ -47,1396 +47,3 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * acelp_core_dec() - * - * ACELP core decoder - *-------------------------------------------------------------------*/ - -ivas_error acelp_core_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float output[], /* o : synthesis @internal Fs */ - float synth[], /* o : synthesis */ - float save_hb_synth[], /* o : HB synthesis */ - float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ - float *voice_factors, /* o : voicing factors */ - float old_syn_12k8_16k[], /* o : intermediate ACELP synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ - int16_t *unbits, /* o : number of unused bits */ - int16_t *sid_bw, /* o : 0-NB/WB, 1-SWB SID */ - STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ - const float tdm_lspQ_PCh[M], /* i : Q LSPs for primary channel */ - const float tdm_lsfQ_PCh[M], /* i : Q LSFs for primary channel */ - const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ - const int16_t last_element_mode, /* i : last element mode */ - const int32_t last_element_brate, /* i : last element bitrate */ - const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ - const int16_t nchan_out, /* i : number of output channels */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i : stereo CNG handle */ - const int16_t read_sid_info /* i : read SID info flag */ -) -{ - float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ - float syn_tmp[L_FRAME16k + L_SUBFR] = { 0 }, *syn; /* synthesis signal buffer */ - int16_t output_frame; /* frame length at output sampling freq. */ - float lsf_new[M]; /* LSFs at the end of the frame */ - float lsp_new[M]; /* LSPs at the end of the frame */ - float lsp_mid[M]; /* LSPs in the middle of the frame */ - float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ - float old_exc2[L_FRAME16k + L_EXC_MEM], *exc2; /* total excitation buffer */ - float mem_tmp[M]; /* temporary synthesis filter memory */ - float enr_q; /* E information for FER protection */ - float tmp_noise; /* Long term temporary noise energy */ - float Es_pred; /* predicted scaled innov. energy */ - float FEC_pitch; /* FEC pitch */ - float old_bwe_exc[( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 )]; /* excitation buffer */ - float *bwe_exc; /* Excitation for SWB TBE */ - int16_t i, int_fs; - int16_t tc_subfr; - int16_t allow_cn_step; - float temp_buf[L_FRAME16k + L_SYN_MEM]; - int16_t last_pulse_pos; - int16_t T0_tmp; - int16_t do_WI; - float dct_buffer[DCT_L_POST]; - float exc_buffer[DCT_L_POST]; - float dct_exc_tmp[L_FRAME16k]; - float bpf_error_signal[L_FRAME16k]; - int16_t nb_bits; /* number of bits */ - int16_t indice; /* parameter indices to write */ - float gain_buf[NB_SUBFR16k]; - float q_env[20]; - float exc3[L_FRAME16k]; - float syn1_tmp[L_FRAME16k + 2], *syn1; - float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; - float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t LSF_Q_prediction; /* LSF prediction mode */ - float tmpF; - int16_t uc_two_stage_flag; - int16_t tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag; - float *old_exc_s; /* Start of last excitation frame */ - float *p_tdm_Pri_pitch_buf; - int16_t local_element_mode; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( st->element_mode == IVAS_CPE_MDCT && nchan_out == 1 && st->idchan == 1 && last_element_brate <= IVAS_SID_5k2 ) - { - /* In MDCT-Stereo DTX with mono output, we can skip CNG for the second channel, except for the first inactive frame following an active period */ - return error; - } - - push_wmops( "acelp_core_dec" ); - - output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); - - /*----------------------------------------------------------------* - * stereo SID and CNG frames processing - *----------------------------------------------------------------*/ - - if ( st->core_brate <= SID_2k40 && st->element_mode == IVAS_CPE_DFT && nchan_out == 2 ) - { - if ( st->cng_type == FD_CNG ) - { - configureFdCngDec( st->hFdCngDec, st->bwidth, ACELP_14k25, st->L_frame, st->last_L_frame, st->element_mode ); - - /* Only run parameter decoding in SID frames */ - if ( st->core_brate == SID_2k40 ) - { - FdCng_decodeSID( st ); - } - - for ( i = 0; i < NPART; i++ ) - { - st->hFdCngDec->hFdCngCom->sidNoiseEstLp_flt[i] = STEREO_DFT_FD_FILT * st->hFdCngDec->hFdCngCom->sidNoiseEstLp_flt[i] + ( 1 - STEREO_DFT_FD_FILT ) * st->hFdCngDec->hFdCngCom->sidNoiseEst_flt[i]; - } - - ApplyFdCng( NULL, NULL, NULL, NULL, st, 0, 0 ); - } - else - { - configureFdCngDec( st->hFdCngDec, st->bwidth, ACELP_14k25, st->L_frame, st->last_L_frame, st->element_mode ); - - /* decode CNG parameters */ - CNG_dec( st, last_element_mode, Aq, lsp_new, lsf_new, &allow_cn_step, sid_bw, q_env ); - - /* comfort noise generation */ - CNG_exc( st->core_brate, st->L_frame, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, NULL, NULL, &st->lp_ener, st->last_core_brate, &st->first_CNG, &( st->hTdCngDec->cng_ener_seed ), NULL, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, sid_bw, &st->hTdCngDec->cng_ener_seed1, NULL, st->Opt_AMR_WB, st->element_mode ); - - mvr2r( Aq, st->Aq_cng_float, M + 1 ); - - /* update old LSP and LSF vector */ - mvr2r( lsf_new, st->lsf_old, M ); - mvr2r( lsp_new, st->lsp_old, M ); - } - - set_f( output, 0, output_frame ); /* output and synth are not used in DFT domain CNG generation and the decoder output is unaffected if they are left uninitalized */ - set_f( synth, 0, output_frame ); /* They are however read in a few places which causes errors in the valgrind tests. Simplest solution from a code perspective was to set them to zero. */ - - /* CN generation done in DFT domain */ - pop_wmops(); - return error; - } - - /*----------------------------------------------------------------* - * Active frames processing - *----------------------------------------------------------------*/ - - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - /*----------------------------------------------------------------* - * Initialization - *----------------------------------------------------------------*/ - - LSF_Q_prediction = -1; - set_f( syn_tmp, 0, L_SUBFR ); - syn = syn_tmp + L_SUBFR; - syn1_tmp[0] = 0; - syn1_tmp[1] = 0; - syn1 = syn1_tmp + 2; - st->bpf_off = 0; - - if ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || ( st->element_mode == IVAS_CPE_DFT && st->last_core_brate <= SID_2k40 ) || ( st->element_mode == IVAS_CPE_MDCT && st->last_core_brate <= SID_2k40 ) ) - { - /* in case of HQ->ACELP switching, do not apply BPF */ - st->bpf_off = 1; - - if ( st->hPFstat != NULL ) - { - /* in case of core switching, reset post-filter memories */ - st->hPFstat->on = 0; - } - - if ( st->hGSCDec != NULL ) - { - /* reset the GSC pre echo energy threshold in case of switching */ - st->hGSCDec->Last_frame_ener = (float) MAX_32; - } - } - - if ( st->hGSCDec != NULL && st->prev_bfi > 0 ) - { - /* reset the GSC pre echo energy threshold in case of FEC */ - st->hGSCDec->Last_frame_ener = (float) MAX_32; - } - - if ( st->hFdCngDec != NULL && ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( st->last_core_brate == SID_2k40 || st->last_core_brate == FRAME_NO_DATA ) ) - { - set_zero( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, FFTLEN ); - set_zero( hStereoCng->olapBufferSynth22, FFTLEN ); - } - - st->clas_dec = st->last_good; - enr_q = 0.0f; - Es_pred = 0.0f; - tmp_noise = 0.0f; - - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - exc = old_exc + L_EXC_MEM_DEC; - if ( st->hWIDec != NULL ) - { - mvr2r( st->hWIDec->old_exc2, old_exc2, L_EXC_MEM ); - } - else - { - set_f( old_exc2, 0, L_EXC_MEM ); - } - exc2 = old_exc2 + L_EXC_MEM; - if ( st->hBWE_TD != NULL ) - { - mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); - bwe_exc = old_bwe_exc + PIT16k_MAX * 2; - } - else - { - bwe_exc = NULL; - } - - last_pulse_pos = 0; - do_WI = 0; - st->GSC_noisy_speech = 0; - st->relax_prev_lsf_interp = 0; - set_zero( gain_buf, NB_SUBFR16k ); - - if ( st->L_frame == L_FRAME ) - { - st->gamma_float = GAMMA1_FLT; - st->preemph_fac_float = PREEMPH_FAC_FLT; - int_fs = INT_FS_12k8; - } - else - { - st->gamma_float = GAMMA16k_FLT; - st->preemph_fac_float = PREEMPH_FAC_16k_FLT; - int_fs = INT_FS_16k; - } - - /* reset post-filter in case of switching */ - if ( st->hPFstat != NULL && st->hPFstat->on == 0 ) - { - st->hPFstat->reset = 1; - } - - /* TD stereo parameters */ - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - tdm_lp_reuse_flag = hStereoTD->tdm_lp_reuse_flag; - tdm_low_rate_mode = hStereoTD->tdm_low_rate_mode; - tdm_Pitch_reuse_flag = hStereoTD->tdm_Pitch_reuse_flag; - p_tdm_Pri_pitch_buf = hStereoTD->tdm_Pri_pitch_buf; - } - else - { - tdm_lp_reuse_flag = 0; - tdm_low_rate_mode = 0; - if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - tdm_low_rate_mode = 1; - } - tdm_Pitch_reuse_flag = 0; - p_tdm_Pri_pitch_buf = NULL; - } - - /*----------------------------------------------------------------* - * Updates in case of internal sampling rate switching - *----------------------------------------------------------------*/ - - if ( st->last_L_frame != st->L_frame && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - int16_t dec; - - if ( st->hPFstat->on != 0 ) - { - int16_t mem_syn_r_size_old, mem_syn_r_size_new; - - mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); - mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); - lerp_flt( st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - lerp_flt( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - } - - /* convert quantized LSP vector */ - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); - - /* convert old quantized LSF vector */ - lsp2lsf( st->lsp_old, st->lsf_old, M, int_fs ); - - /* FEC - update adaptive LSF mean vector */ - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - - /* Reset LPC mem */ - if ( st->sr_core == INT_FS_16k ) - { - mvr2r( GEWB2_Ave, st->mem_AR, M ); - } - else - { - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - set_zero( st->mem_MA, M ); - - /* update synthesis filter memories */ - dec = DEC; - if ( st->element_mode != EVS_MONO ) - { - dec = DEC_IVAS; - } - synth_mem_updt2_flt( st->L_frame, st->last_L_frame, st->old_exc, st->mem_syn_r_float, st->mem_syn2, NULL, dec ); - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - mvr2r( st->mem_syn2, st->mem_syn1, M ); - mvr2r( st->mem_syn2, st->mem_syn3, M ); - } - - /* update buffer of old subframe pitch values */ - if ( st->last_L_frame != st->L_frame ) - { - if ( st->L_frame == L_FRAME ) - { - if ( st->last_L_frame == L_FRAME32k ) - { - tmpF = (float) 12800 / (float) 32000; - } - else if ( st->last_L_frame == 512 ) - { - tmpF = (float) 12800 / (float) 25600; - } - else /* st->last_L_frame == L_FRAME16k */ - { - tmpF = (float) 12800 / (float) 16000; - } - - for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 1] = tmpF * st->old_pitch_buf[i]; - } - - for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 2] = tmpF * st->old_pitch_buf[i]; - } - } - else - { - if ( st->last_L_frame == L_FRAME32k ) - { - tmpF = (float) 16000 / (float) 32000; - } - else if ( st->last_L_frame == 512 ) - { - tmpF = (float) 16000 / (float) 25600; - } - else /* st->last_L_frame == L_FRAME12k8 */ - { - tmpF = (float) 16000 / (float) 12800; - } - - for ( i = 2 * NB_SUBFR - 1; i >= NB_SUBFR; i-- ) - { - st->old_pitch_buf[i + 2] = tmpF * st->old_pitch_buf[i]; - } - st->old_pitch_buf[NB_SUBFR + 1] = st->old_pitch_buf[NB_SUBFR + 2]; - - for ( i = NB_SUBFR - 1; i >= 0; i-- ) - { - st->old_pitch_buf[i + 1] = tmpF * st->old_pitch_buf[i]; - } - st->old_pitch_buf[0] = st->old_pitch_buf[1]; - } - } - - if ( st->bfi_pitch_frame != st->L_frame ) - { - if ( st->L_frame == L_FRAME ) - { - if ( st->bfi_pitch_frame == L_FRAME32k ) - { - tmpF = (float) 12800 / (float) 32000; - } - else if ( st->bfi_pitch_frame == 512 ) - { - tmpF = (float) 12800 / (float) 25600; - } - else /* st->bfi_pitch_frame == L_FRAME16k */ - { - tmpF = (float) 12800 / (float) 16000; - } - st->bfi_pitch *= tmpF; - st->bfi_pitch_frame = L_FRAME; - } - else - { - if ( st->bfi_pitch_frame == L_FRAME32k ) - { - tmpF = (float) 16000 / (float) 32000; - } - else if ( st->bfi_pitch_frame == 512 ) - { - tmpF = (float) 16000 / (float) 25600; - } - else /* st->bfi_pitch_frame == L_FRAME12k8 */ - { - tmpF = (float) 16000 / (float) 12800; - } - st->bfi_pitch *= tmpF; - st->bfi_pitch_frame = L_FRAME16k; - } - } - - if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - /*----------------------------------------------------------------------* - * GOOD frame - *----------------------------------------------------------------------*/ - - if ( !st->bfi ) - { - - /*----------------------------------------------------------------* - * Decoding of TC subframe classification - *----------------------------------------------------------------*/ - - tc_subfr = -1; - if ( st->coder_type == TRANSITION ) - { - tc_subfr = tc_classif( st ); - } - - /*----------------------------------------------------------------* - * Decoding of GSC IVAS mode - *----------------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO && st->idchan == 0 && !( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && !tdm_low_rate_mode ) - { - if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->total_brate <= MAX_GSC_INACTIVE_BRATE ) ) - { - st->GSC_IVAS_mode = get_next_indice( st, 2 ); - } - } - - /*----------------------------------------------------------------* - * Decoding of inactive CNG frames - *----------------------------------------------------------------*/ - - if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) - { - /* decode CNG parameters */ - if ( st->cng_type == LP_CNG ) - { - CNG_dec( st, last_element_mode, Aq, lsp_new, lsf_new, &allow_cn_step, sid_bw, q_env ); - - /* comfort noise generation */ - local_element_mode = st->element_mode; - if ( ( nchan_out == 1 && st->element_mode == IVAS_CPE_DFT ) || ( st->masa_sid_format == 1 ) ) - { - local_element_mode = IVAS_SCE; /* For DFT Stereo mono decoding, run CNG_exc as in SCE */ - } - CNG_exc( st->core_brate, st->L_frame, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, exc, exc2, &st->lp_ener, st->last_core_brate, &st->first_CNG, &( st->hTdCngDec->cng_ener_seed ), bwe_exc, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, sid_bw, &st->hTdCngDec->cng_ener_seed1, exc3, st->Opt_AMR_WB, local_element_mode ); - mvr2r( Aq, st->Aq_cng_float, M + 1 ); - } - else - { - if ( st->core_brate == SID_2k40 && st->element_mode != IVAS_CPE_MDCT ) - { - FdCng_decodeSID( st ); - *sid_bw = 0; - } - - if ( st->element_mode == IVAS_CPE_DFT ) - { - assert( nchan_out == 1 ); - - for ( i = 0; i < NPART; i++ ) - { - st->hFdCngDec->hFdCngCom->sidNoiseEstLp_flt[i] = STEREO_DFT_FD_FILT * st->hFdCngDec->hFdCngCom->sidNoiseEstLp_flt[i] + ( 1 - STEREO_DFT_FD_FILT ) * st->hFdCngDec->hFdCngCom->sidNoiseEst_flt[i]; - } - ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); - } - - if ( !read_sid_info ) - { - float noise_lvl_highest; - - noise_lvl_highest = st->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[st->hFdCngDec->hFdCngCom->stopFFTbin - st->hFdCngDec->hFdCngCom->startBand - 1]; - for ( int16_t b = st->hFdCngDec->hFdCngCom->stopFFTbin - st->hFdCngDec->hFdCngCom->startBand; b < st->hFdCngDec->hFdCngCom->stopBand; b++ ) - { - st->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[b] = noise_lvl_highest; - } - } - - generate_comfort_noise_dec( NULL, NULL, st, nchan_out ); - - FdCng_exc_flt( st->hFdCngDec->hFdCngCom, &st->CNG_mode, st->L_frame, st->lsp_old, st->first_CNG, st->lspCNG, Aq, lsp_new, lsf_new, exc, exc2, bwe_exc ); - - mvr2r( exc2, exc3, st->L_frame ); - } - - /* update past excitation signals for LD music post-filter */ - if ( st->hMusicPF != NULL ) - { - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - - /* Update music post processing values */ - /* Filter energies update */ - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - } - - - /* synthesis at 12.8kHz sampling rate */ - syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); - syn_12k8( st->L_frame, Aq, exc3, syn1, st->mem_syn3, 1 ); - - /* reset the decoder */ - CNG_reset_dec( st, pitch_buf, voice_factors ); - - /* update st->mem_syn1 for ACELP core switching */ - mvr2r( st->mem_syn3, st->mem_syn1, M ); - - /* update old synthesis for classification */ - mvr2r( syn1 + st->L_frame - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, syn1, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_float, &st->hBWE_FD->mem_deemph_old_syn ); - } - } - - /*----------------------------------------------------------------* - * Decoding of all other frames - *----------------------------------------------------------------*/ - - else - { - /*-----------------------------------------------------------------* - * Configure ACELP bit allocation - *-----------------------------------------------------------------*/ - - nb_bits = 0; - st->acelp_cfg.FEC_mode = 0; - uc_two_stage_flag = 0; - - if ( !st->nelp_mode_dec && !st->ppp_mode_dec ) - { - int16_t tc_subfr_tmp; - - tc_subfr_tmp = tc_subfr; - if ( tc_subfr_tmp < L_SUBFR ) - { - tc_subfr_tmp = 0; - } - - if ( tc_subfr == TC_0_192 ) - { - nb_bits = -1; - } - - config_acelp1_IVAS( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, tc_subfr_tmp, 1, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - - if ( st->coder_type == TRANSITION && tc_subfr < L_SUBFR && st->L_frame == L_FRAME ) - { - config_acelp1_IVAS( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, -1, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, tc_subfr, 2, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - } - } - - /*-----------------------------------------------------------------* - * After CNG period, use the most up-to-date LSPs - *-----------------------------------------------------------------*/ - - if ( st->hTdCngDec != NULL && ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) ) - { - mvr2r( st->lspCNG, st->lsp_old, M ); - lsp2lsf( st->lspCNG, st->lsf_old, M, int_fs ); - } - - /*-----------------------------------------------------------------* - * Reset higher ACELP pre-quantizer in case of switching - *-----------------------------------------------------------------*/ - - if ( !st->use_acelp_preq ) - { - st->mem_preemp_preQ = 0.0f; - st->last_nq_preQ = 0; - st->last_code_preq = 0; - } - st->use_acelp_preq = 0; - - /*-----------------------------------------------------------------* - * LSF de-quantization and interpolation - *-----------------------------------------------------------------*/ - - if ( !tdm_lp_reuse_flag ) - { - lsf_dec( st, tc_subfr, Aq, &LSF_Q_prediction, lsf_new, lsp_new, lsp_mid, tdm_low_rate_mode, tdm_lsfQ_PCh ); - } - else - { - const float *pt_interp_2; - - if ( st->active_cnt != 1 ) - { - int16_t beta_index; - - beta_index = get_next_indice( st, TDM_IC_LSF_PRED_BITS ); - tdm_SCh_lsf_reuse( DEC, st->element_brate, lsf_new, lsp_new, tdm_lsfQ_PCh, NULL, &beta_index ); - } - else - { - mvr2r( tdm_lspQ_PCh, lsp_new, M ); - mvr2r( tdm_lsfQ_PCh, lsf_new, M ); - } - - if ( st->rate_switching_reset ) - { - /* extrapolation in case of unstable LSF convert */ - mvr2r( lsp_new, st->lsp_old, M ); - mvr2r( lsf_new, st->lsf_old, M ); - } - - pt_interp_2 = interpol_frac_12k8; - if ( tdm_low_rate_mode == 1 && st->coder_type > UNVOICED ) - { - pt_interp_2 = interpol_frac2; - } - - if ( st->active_cnt == 1 ) - { - mvr2r( lsp_new, st->lsp_old, M ); - lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); - } - - /* LSP interpolation and conversion of LSPs to A(z) */ - int_lsp( st->L_frame, st->lsp_old, lsp_new, Aq, M, pt_interp_2, 0 ); - /* Check LSF stability (distance between old LSFs and current LSFs) */ - st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); - } - - if ( st->last_core == HQ_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory from last HQ frame */ - old_exc_s = st->old_exc + L_EXC_MEM_DEC - st->L_frame; - tmpF = *old_exc_s; - st->mem_deemph = old_exc_s[st->L_frame - 1]; - preemph( old_exc_s, st->preemph_fac_float, L_FRAME16k, &tmpF ); - mvr2r( old_exc_s + st->L_frame - M, st->mem_syn2, M ); - residu( Aq, M, old_exc_s, old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); - } - - if ( st->last_core != ACELP_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory of old_bwe_exc */ - if ( st->L_frame == L_FRAME ) - { - lerp_flt( old_exc, old_bwe_exc, L_EXC_MEM_DEC * HIBND_ACB_L_FAC, L_EXC_MEM_DEC ); - } - else - { - lerp_flt( old_exc, old_bwe_exc, L_EXC_MEM_DEC * 2, L_EXC_MEM_DEC ); - } - } - - /*-----------------------------------------------------------------* - * FEC - first good frame after lost frame(s) (possibility to correct the ACB) - *-----------------------------------------------------------------*/ - - if ( st->acelp_cfg.FEC_mode > 0 ) - { - last_pulse_pos = 0; - - /* decode the last glottal pulse position */ - T0_tmp = FEC_pos_dec( st, &last_pulse_pos, &enr_q, nb_bits ); - - if ( st->last_core != HQ_CORE || ( st->last_core == HQ_CORE && st->last_con_tcx ) ) - { - if ( st->clas_dec == SIN_ONSET && last_pulse_pos != 0 && st->prev_bfi == 1 ) - { - FEC_SinOnset( old_exc + L_EXC_MEM_DEC - L_EXC_MEM, last_pulse_pos, T0_tmp, enr_q, Aq, st->L_frame ); - } - else if ( ( st->coder_type == GENERIC || st->coder_type == VOICED ) && last_pulse_pos != 0 && st->old_bfi_cnt == 1 && st->hWIDec != NULL ) - { - do_WI = FEC_enhACB( st->L_frame, st->last_L_frame, old_exc + L_EXC_MEM_DEC - L_EXC_MEM, T0_tmp, last_pulse_pos, st->bfi_pitch ); - } - } - } - - /*------------------------------------------------------------* - * In case of first frame after an erasure and transition from voiced to unvoiced or inactive - * redo the LPC interpolation - *------------------------------------------------------------*/ - - if ( st->stab_fac == 0 && st->old_bfi_cnt > 0 && st->clas_dec != VOICED_CLAS && st->clas_dec != ONSET && st->relax_prev_lsf_interp == 0 && !( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) ) - { - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, 2 ); - } - - /*---------------------------------------------------------------* - * Decoding of the scaled predicted innovation energy - *---------------------------------------------------------------*/ - - if ( nb_bits > 0 ) - { - indice = get_next_indice( st, nb_bits ); - Es_pred_dec( &Es_pred, indice, nb_bits, uc_two_stage_flag ); - } - - /*------------------------------------------------------------* - * Decode excitation according to coding type - *------------------------------------------------------------*/ - - if ( tdm_low_rate_mode ) /* tdm stereo low rate mode */ - { - if ( st->coder_type <= UNVOICED ) - { - tdm_low_rate_dec( st, dct_exc_tmp, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, lsf_new ); - } - else /* GENERIC */ - { - decod_gen_2sbfr( st, sharpFlag, Aq, pitch_buf, voice_factors, exc, exc2, bwe_exc, gain_buf, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ); - - if ( st->element_mode == IVAS_CPE_TD ) - { - tmp_noise = st->lp_gainc; - } - } - } - else if ( st->nelp_mode_dec ) - { - /* SC-VBR - NELP frames */ - decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, gain_buf ); - } - else if ( st->coder_type == UNVOICED ) - { - /* UNVOICED frames */ - decod_unvoiced( st, Aq, Es_pred, uc_two_stage_flag, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, gain_buf ); - } - else if ( st->ppp_mode_dec ) - { - /* SC-VBR - PPP frames */ - if ( ( error = decod_ppp( st, Aq, pitch_buf, exc, exc2, voice_factors, bwe_exc, gain_buf, st->bfi ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st->coder_type == TRANSITION ) - { - decod_tran( st, st->L_frame, tc_subfr, Aq, Es_pred, pitch_buf, voice_factors, exc, exc2, bwe_exc, unbits, sharpFlag, gain_buf ); - } - else if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->inactive_coder_type_flag ) ) - { - /* AUDIO and INACTIVE frames (coded by GSC technology) */ - decod_audio( st, dct_exc_tmp, Aq, &tmp_noise, pitch_buf, voice_factors, exc, exc2, bwe_exc, lsf_new, gain_buf, tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ); - } - else - { - /* GENERIC, VOICED and INACTIVE frames (coded by AVQ technology) */ - if ( ( error = decod_gen_voic( st, st->L_frame, sharpFlag, Aq, Es_pred, do_WI, pitch_buf, voice_factors, exc, exc2, bwe_exc, unbits, gain_buf, tdm_Pitch_reuse_flag, p_tdm_Pri_pitch_buf ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st->element_mode == IVAS_CPE_TD ) - { - tmp_noise = st->lp_gainc; - } - } - - - /* synthesis for ACELP core switching and SWB BWE */ - syn_12k8( st->L_frame, Aq, exc, temp_buf, st->mem_syn1, 1 ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, temp_buf, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_float, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /*-----------------------------------------------------------------* - * Apply energy matching when switching to inactive frames - *-----------------------------------------------------------------*/ - - inact_switch_ematch( exc2, dct_exc_tmp, st->hGSCDec->lt_ener_per_band, st->coder_type, st->L_frame, st->total_brate, st->bfi, st->last_core, st->last_codec_mode, tdm_low_rate_mode, st->element_mode ); - - /*------------------------------------------------------------* - * Decode information and modify the excitation signal of stationary unvoiced frames - *------------------------------------------------------------*/ - - if ( !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && st->nelp_mode_dec != 1 && !( st->element_mode == IVAS_SCE && tdm_low_rate_mode ) ) - { - stat_noise_uv_dec( st, lsp_new, lsp_mid, Aq, exc2, uc_two_stage_flag ); - } - - /*------------------------------------------------------------* - * Save filter memory in case the synthesis is redone after scaling - * Synthesis at 12k8 Hz sampling rate - *------------------------------------------------------------*/ - - /* update past excitation signals for LD music post-filter */ - if ( st->hMusicPF != NULL ) - { - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - mvr2r( st->hMusicPF->dct_post_old_exc, exc_buffer, DCT_L_POST - OFFSET2 ); - } - - if ( ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) || ( st->GSC_IVAS_mode >= 1 && st->L_frame == L_FRAME ) ) - { - int16_t last_coder_type = st->last_coder_type; - - if ( ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) || ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 0 ) ) - { - last_coder_type = AUDIO; - } - - /* Extrapolation of the last future part, windowing and high resolution DCT transform */ - Prep_music_postP( exc_buffer, dct_buffer, st->hMusicPF->filt_lfE, st->last_core, pitch_buf, st->hMusicPF->LDm_enh_lp_gbin ); - - /* LD music post-filter */ - LD_music_post_filter( st->hMusicPF, dct_buffer, dct_buffer, st->core_brate, AUDIO, last_coder_type ); - - /* Inverse DCT transform, retrieval of the aligned excitation, re-synthesis */ - mvr2r( st->mem_syn2, mem_tmp, M ); - Post_music_postP( dct_buffer, exc_buffer, exc2, st->mem_syn2, st->mem_syn2, Aq, syn ); - } - else - { - /* Core synthesis at 12.8kHz or 16kHz */ - mvr2r( st->mem_syn2, mem_tmp, M ); - syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); - - if ( st->hMusicPF != NULL ) - { - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - } - } - - /*------------------------------------------------------------* - * FEC - Estimate the classification information - *------------------------------------------------------------*/ - - FEC_clas_estim( syn, pitch_buf, st->L_frame, st->coder_type, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, st->Opt_AMR_WB, &st->decision_hyst, NULL, NULL, NULL, NULL, NULL, NULL, temp_buf, 0, 0, 0, 0, 0, 0, st->last_core_brate, st->acelp_cfg.FEC_mode ); - - /*------------------------------------------------------------* - * FEC - Estimate pitch - *------------------------------------------------------------*/ - - FEC_pitch_estim( st->Opt_AMR_WB, st->last_core, st->L_frame, st->clas_dec, st->last_good, pitch_buf, st->old_pitch_buf, &st->bfi_pitch, &st->bfi_pitch_frame, &st->upd_cnt, st->coder_type ); - - /*------------------------------------------------------------* - * FEC - Smooth the speech energy evolution when recovering after a BAD frame - * (smoothing is performed in the excitation domain and signal is resynthesized after) - *------------------------------------------------------------*/ - - FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av_float, &st->lp_ener_FEC_max_float, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP_float, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); - - /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ - if ( ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->total_brate <= ACELP_7k20 ) || ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) - { - fer_energy( st->L_frame, st->clas_dec, syn, pitch_buf[( ( st->L_frame ) >> 6 ) - 1], &st->enr_old, st->L_frame ); - } - } - - } /* End of GOOD FRAME */ - - /*----------------------------------------------------------------* - * BAD frame - *----------------------------------------------------------------*/ - - else - { - /* SC-VBR */ - if ( st->last_nelp_mode_dec == 1 ) - { - st->nelp_mode_dec = 1; - } - - /* long burst frame erasures */ - if ( st->nbLostCmpt > 5 && st->clas_dec >= VOICED_CLAS && st->clas_dec < INACTIVE_CLAS ) - { - st->last_good = VOICED_TRANSITION; - } - - /* LSF estimation and A(z) calculation */ - lsf_dec_bfi_flt( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, st->L_frame, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); - - FEC_lsf2lsp_interp_flt( st, st->L_frame, Aq, lsf_new, lsp_new ); - - if ( st->nelp_mode_dec == 1 ) - { - /* SC-VBR */ - decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, gain_buf ); - FEC_pitch = pitch_buf[3]; - } - else - { - /* calculation of excitation signal */ - FEC_exc_estim( st, st->L_frame, exc, exc2, dct_exc_tmp, pitch_buf, voice_factors, &FEC_pitch, bwe_exc, lsf_new, &tmp_noise ); - - tmp_noise = st->lp_gainc; - - /* SC-VBR */ - st->prev_gain_pit_dec = st->lp_gainp; - } - - /* synthesis for ACELP core switching and SWB BWE */ - syn_12k8( st->L_frame, Aq, exc, temp_buf, st->mem_syn1, 1 ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, temp_buf, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_float, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /* Apply energy matching when switching to inactive frames */ - inact_switch_ematch( exc2, dct_exc_tmp, st->hGSCDec->lt_ener_per_band, st->coder_type, st->L_frame, st->total_brate, st->bfi, st->last_core, st->last_codec_mode, tdm_low_rate_mode, st->element_mode ); - - /* update past excitation signals for LD music post-filter */ - if ( st->hMusicPF != NULL ) - { - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - - /* Update music post processing values */ - /* Filter energies update */ - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - /* Update circular buffer, keep last energy difference unchanged */ - for ( i = 1; i < MAX_LT; i++ ) - { - st->hMusicPF->LDm_lt_diff_etot[i - 1] = st->hMusicPF->LDm_lt_diff_etot[i]; - } - } - - /* synthesis at 12k8 Hz sampling rate */ - if ( ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) - { - mvr2r( st->mem_syn2, mem_tmp, M ); - } - syn_12k8( st->L_frame, Aq, exc2, syn, st->mem_syn2, 1 ); - - /* update buffer for classifier */ - if ( st->hWIDec != NULL ) - { - mvr2r( exc2 + st->L_frame - L_EXC_MEM, st->hWIDec->old_exc2, L_EXC_MEM ); - mvr2r( syn + st->L_frame - L_EXC_MEM, st->hWIDec->old_syn2, L_EXC_MEM ); - } - mvr2r( syn + st->L_frame - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - - /*------------------------------------------------------------* - * FEC - Smooth the speech energy evolution when recovering after a BAD frame - * (smoothing is performed in the excitation domain and signal is resynthesized after) - *------------------------------------------------------------*/ - - if ( ( st->total_brate == ACELP_7k20 ) || ( st->total_brate == ACELP_8k00 ) ) - { - FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av_float, &st->lp_ener_FEC_max_float, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP_float, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); - } - - /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ - fer_energy( st->L_frame, st->last_good, syn, FEC_pitch, &st->enr_old, st->L_frame ); - - if ( st->nelp_mode_dec != 1 ) - { - /* modify the excitation signal of stationary unvoiced frames */ - stat_noise_uv_mod( st->coder_type, 0, st->lsp_old, lsp_new, lsp_new, Aq, exc2, 1, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); - } - } - - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME ) - { - mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - else - { - mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - } - - /*--------------------------------------------------------* - * Apply NB postfilter in case of 8kHz output - *--------------------------------------------------------*/ - - if ( st->last_bwidth == NB && st->hPFstat != NULL ) - { - if ( st->bwidth == NB ) - { - st->hPFstat->on = 1; - nb_post_filt_ivas( st->L_frame, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, st->coder_type, st->BER_detect, 0 ); - } - else - { - st->hPFstat->on = 0; - nb_post_filt_ivas( st->L_frame, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, AUDIO, st->BER_detect, 0 ); - } - } - else - { - st->psf_lp_noise = st->lp_noise_float; - } - - /*------------------------------------------------------------------* - * Perform fixed deemphasis through 1/(1 - g*z^-1) - *-----------------------------------------------------------------*/ - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn + st->L_frame - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - deemph( syn, st->preemph_fac_float, st->L_frame, &( st->mem_deemph ) ); - - AGC_dec( syn, st->agc_mem2, st->L_frame ); - - if ( st->hTcxDec != NULL ) - { - mvr2r( syn + st->L_frame / 2, st->hTcxDec->old_syn_Overl_float, st->L_frame / 2 ); - } - mvr2r( syn + st->L_frame - M - 1, st->syn_float, M + 1 ); - - /*------------------------------------------------------------------* - * Formant post-filter - *-----------------------------------------------------------------*/ - - if ( st->hPFstat != NULL && st->last_bwidth >= WB && ( st->core_brate > ACELP_24k40 || st->element_mode > EVS_MONO ) && st->core_brate <= ACELP_32k ) - { - mvr2r( syn, temp_buf + L_SYN_MEM, L_FRAME16k ); - - st->hPFstat->on = 1; - formant_post_filt_ivas( st->hPFstat, temp_buf + L_SYN_MEM, Aq, syn, st->L_frame, L_SUBFR, st->lp_noise_float, st->total_brate, 0 ); - } - else if ( st->hPFstat != NULL && st->last_bwidth >= WB ) - { - if ( st->hPFstat->on ) - { - mvr2r( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - M, temp_buf, M ); - mvr2r( syn, temp_buf + M, L_SUBFR ); - residu( Aq, M, temp_buf + M, temp_buf + M + L_SUBFR, L_SUBFR ); - syn_filt( Aq, M, temp_buf + M + L_SUBFR, temp_buf, L_SUBFR, st->hPFstat->mem_stp_flt + L_SYN_MEM - M, 0 ); - scale_st_ivas( syn, temp_buf, &st->hPFstat->gain_prec_flt, L_SUBFR, -1 ); - mvr2r( temp_buf, syn, L_SUBFR / 2 ); - blend_subfr2_flt( temp_buf + L_SUBFR / 2, syn + L_SUBFR / 2, syn + L_SUBFR / 2 ); - } - st->hPFstat->on = 0; - } - - /*----------------------------------------------------------------* - * Comfort noise addition - *----------------------------------------------------------------*/ - - if ( ( st->hFdCngDec != NULL || st->idchan == 1 ) && st->element_mode != IVAS_CPE_MDCT ) - { - if ( st->element_mode == IVAS_CPE_TD || st->flag_cna || ( st->cng_type == FD_CNG && st->total_brate <= ACELP_32k ) || ( st->cng_type == LP_CNG && st->core_brate <= SID_2k40 ) ) - { - /*VAD only for non inactive frame*/ - st->VAD = st->VAD && ( st->coder_type != INACTIVE ); - - if ( st->idchan == 0 && ( st->flag_cna || ( st->cng_type == FD_CNG && st->total_brate <= ACELP_32k ) || ( st->cng_type == LP_CNG && st->core_brate <= SID_2k40 ) ) ) - { - /*Noisy speech detector*/ - noisy_speech_detection( st->hFdCngDec, st->VAD, syn ); - - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; - } - - if ( st->idchan == 0 ) - { - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - } - - if ( st->element_mode != IVAS_CPE_TD && !st->cng_ism_flag ) - { - /*Noise estimate*/ - - ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); - } - - if ( !st->cna_dirac_flag ) - { - /* CNA: Generate additional comfort noise to mask potential coding artefacts */ - if ( st->flag_cna && !( st->coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->GSC_noisy_speech ) ) ) - { - if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) - { - if ( hStereoCng->flag_cna_fade ) - { - generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 1, hStereoCng, nchan_out ); - hStereoCng->flag_cna_fade = 0; - } - else - { - if ( st->element_mode != last_element_mode && st->idchan == 0 ) - { - /* Clear memory for secondary channel CNA */ - set_f( hStereoCng->olapBufferSynth22, 0.0f, st->hFdCngDec->hFdCngCom->frameSize / 2 ); - } - - generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 0, hStereoCng, nchan_out ); - } - } - else if ( st->element_mode != IVAS_CPE_DFT ) - { - if ( st->idchan == 0 ) - { - if ( st->element_mode != last_element_mode ) - { - set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, 0.0f, st->hFdCngDec->hFdCngCom->fftlen ); - } - generate_masking_noise( syn, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, hStereoCng, nchan_out ); - } - } - } - else if ( st->flag_cna && st->coder_type == AUDIO && ( ( st->last_core == ACELP_CORE && !( st->last_coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->Last_GSC_noisy_speech_flag ) ) ) || st->last_core == TCX_20_CORE ) ) - { - if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) - { - generate_stereo_masking_noise( syn, st, hStereoTD, flag_sec_CNA, 1, hStereoCng, nchan_out ); - hStereoCng->flag_cna_fade = 1; - } - else - { - v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt + 5 * st->hFdCngDec->hFdCngCom->frameSize / 4, (float) ( st->hFdCngDec->hFdCngCom->fftlen / 2 ), temp_buf, st->hFdCngDec->hFdCngCom->frameSize / 2 ); - v_add( temp_buf, syn, syn, st->hFdCngDec->hFdCngCom->frameSize / 2 ); - } - } - else - { - if ( hStereoCng != NULL ) - { - hStereoCng->flag_cna_fade = 1; - hStereoCng->enableSecCNA = 0; - } - } - - if ( st->element_mode == IVAS_CPE_TD ) - { - /*Noise estimate*/ - if ( st->idchan == 0 && ( nchan_out == 2 || ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) ) - { - ApplyFdCng( syn, NULL, realBuffer, imagBuffer, st, 0, ( st->coder_type == AUDIO && !st->GSC_noisy_speech ) ); - } - } - } - } - - if ( !st->cna_dirac_flag ) - { - if ( st->flag_cna == 0 && st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && !( st->last_coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->Last_GSC_noisy_speech_flag ) ) ) || st->last_core == AMR_WB_CORE ) ) - { - v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt + 5 * st->L_frame / 4, 256.f, temp_buf, st->L_frame / 2 ); - v_add( temp_buf, syn, syn, st->L_frame / 2 ); - } - - if ( st->flag_cna == 0 || ( st->coder_type == AUDIO && !( st->element_mode > EVS_MONO && st->GSC_noisy_speech ) ) ) - { - if ( st->idchan == 0 ) - { - set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); - } - if ( hStereoCng != NULL && st->idchan == 0 ) - { - set_f( hStereoCng->olapBufferSynth22, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); - } - } - } - } - - - /*----------------------------------------------------------------* - * Resample to the output sampling rate (8/16/32/48 kHz) - * Bass post-filter - *----------------------------------------------------------------*/ - - /* check if the CLDFB works on the right sample rate */ - if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) - { - resampleCldfb_ivas( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); - resampleCldfb_ivas( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); - - if ( st->ini_frame > 0 ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - } - - /* analyze pitch coherence for bass post-filter */ - bpf_pitch_coherence( st, pitch_buf ); - - if ( !( st->element_mode == IVAS_CPE_MDCT && st->bpf_off ) ) - { - if ( st->L_frame != st->last_L_frame && st->last_codec_mode != MODE2 ) - { - if ( st->L_frame == L_FRAME ) - { - retro_interp5_4( st->hBPF->pst_old_syn ); - } - else if ( st->L_frame == L_FRAME16k ) - { - retro_interp4_5( syn, st->hBPF->pst_old_syn ); - } - } - - /* bass post-filter */ - bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, st->L_frame, pitch_buf, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, st->coder_type, bpf_error_signal ); - } - - if ( st->element_mode != IVAS_CPE_DFT || use_cldfb_for_dft ) - { - float realBufferSave[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float imagBufferSave[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float *pRealSave[CLDFB_NO_COL_MAX], *pImagSave[CLDFB_NO_COL_MAX]; - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - pRealSave[i] = realBufferSave[i]; - pImagSave[i] = imagBufferSave[i]; - } - if ( st->p_bpf_noise_buf_float ) - { - mvr2r( bpf_error_signal, st->p_bpf_noise_buf_float, st->L_frame ); - } - - /* analysis of the synthesis at internal sampling rate */ - cldfbAnalysis_ivas( syn, realBuffer, imagBuffer, -1, st->cldfbAna ); - - /* analysis and add the BPF error signal */ - addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : -1, realBuffer, imagBuffer, st->cldfbBPF ); - - /* set output mask for upsampling */ - if ( st->bwidth == NB ) - { - /* set NB mask for upsampling */ - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; - } - else if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) - { - /* in case of BW switching, re-init to default */ - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - - if ( !st->cng_sba_flag || st->element_mode == IVAS_CPE_MDCT ) - { - /*WB/SWB-FD_CNG*/ - if ( ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && ( st->cng_type == FD_CNG ) && ( st->hFdCngDec->hFdCngCom->numCoreBands < st->cldfbSyn->no_channels ) ) - { - generate_comfort_noise_dec_hf( realBuffer, imagBuffer, st->hFdCngDec->hFdCngCom, st->cng_ism_flag ); - - if ( st->hFdCngDec->hFdCngCom->regularStopBand < st->cldfbSyn->no_channels ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->hFdCngDec->hFdCngCom->regularStopBand; - } - else - { - st->cldfbSyn->bandsToZero = 0; - } - } - } - - if ( save_hb_synth != NULL ) - { - /* save and then zero-out lowband */ - for ( int16_t j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) - { - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - realBufferSave[i][j] = realBuffer[i][j]; - imagBufferSave[i][j] = imagBuffer[i][j]; - if ( j < st->hFdCngDec->hFdCngCom->numCoreBands && i < st->hFdCngDec->hFdCngCom->numSlots ) - { - realBuffer[i][j] = 0.0f; - imagBuffer[i][j] = 0.0f; - } - } - } - - cldfbSynthesis_ivas( realBuffer, imagBuffer, save_hb_synth, -1, st->cldfbSynHB ); - - /* restore lowband */ - for ( int16_t j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) - { - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - realBuffer[i][j] = realBufferSave[i][j]; - imagBuffer[i][j] = imagBufferSave[i][j]; - } - } - - cldfbSynthesis_ivas( pRealSave, pImagSave, synth, -1, st->cldfbSyn ); - } - else - { - /* synthesis of the combined signal */ - cldfbSynthesis_ivas( realBuffer, imagBuffer, synth, -1, st->cldfbSyn ); - } - - /* save synthesis - needed in case of core switching */ - mvr2r( synth, st->previoussynth, output_frame ); - } - else - { - int16_t nSamples = NS2SA( st->L_frame * FRAMES_PER_SEC, FRAME_SIZE_NS /*DELAY_CLDFB_NS*/ ); /* IVAS-64: optimization is likely possible here (don't resample the whole frame) */ - - /* analysis of the synthesis at internal sampling rate - needed for DFT stereo -> TD stereo switching */ - cldfbAnalysis_ivas( syn + st->L_frame - nSamples, realBuffer, imagBuffer, nSamples, st->cldfbAna ); - - /* analysis and add the BPF error signal - needed for DFT stereo -> TD stereo switching */ - addBassPostFilter( bpf_error_signal + st->L_frame - nSamples, st->bpf_off ? 0 : nSamples, realBuffer, imagBuffer, st->cldfbBPF ); - - /* synthesis of the combined signal - needed for DFT stereo -> TD stereo switching */ - cldfbSynthesis_ivas( realBuffer, imagBuffer, synth /*dummy*/, NS2SA( st->output_Fs, FRAME_SIZE_NS /*DELAY_CLDFB_NS*/ ), st->cldfbSyn ); - - if ( st->p_bpf_noise_buf_float ) - { - mvr2r( bpf_error_signal, st->p_bpf_noise_buf_float, st->L_frame ); - } - - set_f( synth, 0.0f, output_frame ); - } - - /* Copy output signal */ - if ( st->element_mode > EVS_MONO ) - { - mvr2r( syn, output, st->L_frame ); - } - - /*-----------------------------------------------------------------* - * Bandwidth extension 6kHz-7kHz - *-----------------------------------------------------------------*/ - - if ( st->hBWE_zero != NULL ) - { - if ( ( st->L_frame == L_FRAME && st->bwidth != NB && output_frame >= L_FRAME16k && - ( st->extl == -1 || st->extl == SWB_CNG || ( st->extl == WB_BWE && st->extl_brate == 0 && st->coder_type != AUDIO ) ) ) ) - { - hf_synth( st->hBWE_zero, st->core_brate, output_frame, Aq, exc2, syn, synth ); - } - else - { - hf_synth_reset( st->hBWE_zero ); - } - } - - /*-----------------------------------------------------------------* - * Populate parameters for SWB TBE - *-----------------------------------------------------------------*/ - - if ( st->hBWE_TD != NULL ) - { - if ( ( !st->bfi && st->prev_bfi ) || ( st->last_vbr_hw_BWE_disable_dec == 1 && st->vbr_hw_BWE_disable_dec == 0 ) || ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->last_extl != SWB_TBE && st->last_extl != WB_TBE && st->last_extl != FB_TBE ) || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && !st->tdm_LRTD_flag ) ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - } - - if ( !st->ppp_mode_dec && ( st->idchan == 0 || st->element_mode != IVAS_CPE_TD || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) ) - { - non_linearity( bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); - } - - if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - } - } - - /*----------------------------------------------------------------------* - * Updates - *----------------------------------------------------------------------*/ - - updt_dec( st, old_exc, pitch_buf, Es_pred, Aq, lsf_new, lsp_new, voice_factors, old_bwe_exc, gain_buf ); - - if ( st->core_brate > SID_2k40 && st->hTdCngDec != NULL && st->hFdCngDec != NULL ) - { - /* update CNG parameters in active frames */ - - cng_params_upd( lsp_new, exc, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); - - /* Set 16k LSP flag for CNG buffer */ - st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - } - - pop_wmops(); - return error; -} -#endif diff --git a/lib_dec/acelp_core_dec_fx.c b/lib_dec/acelp_core_dec_fx.c index 01093178e..a41a0c813 100644 --- a/lib_dec/acelp_core_dec_fx.c +++ b/lib_dec/acelp_core_dec_fx.c @@ -10,7 +10,6 @@ #include "ivas_prot_fx.h" #include "ivas_cnst.h" /* Common constants */ #include "cnst.h" /* Common constants */ -#ifdef IVAS_FLOAT_FIXED /*==========================================================================*/ /* FUNCTION : void acelp_core_dec_fx () */ /*--------------------------------------------------------------------------*/ @@ -1936,4 +1935,3 @@ ivas_error acelp_core_dec_fx( return IVAS_ERR_OK; } -#endif diff --git a/lib_dec/acelp_core_dec_ivas_fx.c b/lib_dec/acelp_core_dec_ivas_fx.c index 12be03035..4d3a91a93 100644 --- a/lib_dec/acelp_core_dec_ivas_fx.c +++ b/lib_dec/acelp_core_dec_ivas_fx.c @@ -47,7 +47,6 @@ #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * acelp_core_dec_ivas_fx() * @@ -2208,5 +2207,3 @@ static void rescale_fdCngDec( HANDLE_FD_CNG_DEC hFdCngDec, Word16 Exp_diff ) { Scale_sig32( hFdCngDec->hFdCngCom->sidNoiseEstLp, NPART, Exp_diff ); } - -#endif diff --git a/lib_dec/acelp_core_switch_dec.c b/lib_dec/acelp_core_switch_dec.c index a7a2eb75b..fd4f3cb7c 100644 --- a/lib_dec/acelp_core_switch_dec.c +++ b/lib_dec/acelp_core_switch_dec.c @@ -40,596 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ -static void decod_gen_voic_core_switch( Decoder_State *st, const int16_t L_frame, const int16_t sharpFlag, const float *Aq, float *exc, const int32_t core_brate ); - -/*-------------------------------------------------------------------* - * acelp_core_switch_dec() - * - * ACELP core decoder in the first ACELP->HQ switching frame - *-------------------------------------------------------------------*/ - -ivas_error acelp_core_switch_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float *synth_subfr_out, /* o : synthesized ACELP subframe */ - float *tmp_synth_bwe, /* o : synthesized ACELP subframe BWE */ - const int16_t output_frame, /* i : input frame legth */ - const int16_t core_switching_flag, /* i : core switching flag */ - float *mem_synth, /* o : synthesis to overlap */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - int16_t i, delta, L_frame_for_cs, decode_bwe; - int16_t d1m, ind1, fdelay, gapsize; - int32_t cbrate; - float synth_intFreq[2 * L_SUBFR]; - float old_exc[L_EXC_DEC], *exc; - float tmp_mem2[2 * L_FILT48k], gain; - float hb_synth_tmp[NS2SA( 48000, 10000000L )]; - const float *hp_filter; - float Aq[2 * ( M + 1 )]; - float bpf_error_signal[2 * L_SUBFR]; - float *realBuffer[CLDFB_NO_COL_MAX_SWITCH], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH]; - float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX]; - ivas_error error; - - error = IVAS_ERR_OK; - - /*----------------------------------------------------------------* - * Initializations - *----------------------------------------------------------------*/ - - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - d1m = 0; - gain = 0; - - mvr2r( st->old_Aq_12_8, Aq, M + 1 ); - mvr2r( st->old_Aq_12_8, Aq + ( M + 1 ), M + 1 ); - - set_f( mem_synth, 0, NS2SA( 16000, DELAY_CLDFB_NS ) + 2 ); - - /* set multiplication factor according to the sampling rate */ - delta = 1; - if ( output_frame == L_FRAME32k ) - { - delta = 2; - } - else if ( output_frame == L_FRAME48k ) - { - delta = 3; - } - - /*----------------------------------------------------------------* - * set switching frame bitrate - *----------------------------------------------------------------*/ - - if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - exc = old_exc + L_EXC_MEM_DEC; - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - - if ( st->last_L_frame == L_FRAME ) - { - if ( st->core_brate > ACELP_24k40 ) - { - cbrate = ACELP_24k40; - } - else - { - cbrate = st->core_brate; - } - L_frame_for_cs = L_FRAME; - } - else - { - if ( st->core_brate <= ACELP_8k00 ) - { - cbrate = ACELP_8k00; - } - else if ( st->core_brate <= ACELP_14k80 ) - { - cbrate = ACELP_14k80; - } - else - { - cbrate = min( st->core_brate, ACELP_22k60 ); - } - - L_frame_for_cs = L_FRAME16k; - } - - /*----------------------------------------------------------------* - * Excitation decoding - *----------------------------------------------------------------*/ - - config_acelp1_IVAS( DEC, st->total_brate, cbrate, st->core, -1, -1, st->last_L_frame, -1, &( st->acelp_cfg ), st->next_bit_pos, GENERIC, -1, -1, &decode_bwe /* dummy */, &i, st->element_mode, &i /*dummy*/, 0, 0, st->idchan, st->active_cnt, 0, 0, 0 /*st->GSC_IVAS_mode*/ ); - - decod_gen_voic_core_switch( st, L_frame_for_cs, 0, Aq, exc, cbrate ); - - /*----------------------------------------------------------------* - * synthesis, deemphasis, postprocessing and resampling - *----------------------------------------------------------------*/ - - /* synthesis and deemphasis */ - syn_12k8( 2 * L_SUBFR, Aq, exc, synth_intFreq, st->mem_syn2, 1 ); - - if ( st->hPFstat->on && st->last_bwidth == NB ) - { - float tmp_noise, pitch_buf_tmp[2]; - tmp_noise = 0; - - for ( i = 0; i < 2; i++ ) - { - pitch_buf_tmp[i] = L_SUBFR; - } - - nb_post_filt_ivas( 2 * L_SUBFR, L_SUBFR, st->hPFstat, &tmp_noise, 0, synth_intFreq, Aq, pitch_buf_tmp, AUDIO, st->BER_detect, 0 ); - } - - if ( L_frame_for_cs == L_FRAME ) - { - deemph( synth_intFreq, PREEMPH_FAC_FLT, 2 * L_SUBFR, &st->mem_deemph ); - } - else - { - deemph( synth_intFreq, PREEMPH_FAC_16k_FLT, 2 * L_SUBFR, &st->mem_deemph ); - } - - AGC_dec( synth_intFreq, st->agc_mem2, 2 * L_SUBFR ); - - if ( st->hPFstat->on && st->last_bwidth != NB ) - { - mvr2r( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - M, bpf_error_signal, M ); /*bpf_error_signal used as temporary buffer*/ - mvr2r( synth_intFreq, bpf_error_signal + M, L_SUBFR ); - residu( Aq, M, bpf_error_signal + M, old_exc, L_SUBFR ); - syn_filt( Aq, M, old_exc, bpf_error_signal, L_SUBFR, st->hPFstat->mem_stp_flt + L_SYN_MEM - M, 0 ); - scale_st_ivas( synth_intFreq, bpf_error_signal, &st->hPFstat->gain_prec_flt, L_SUBFR, -1 ); - mvr2r( bpf_error_signal, synth_intFreq, L_SUBFR / 2 ); - blend_subfr2_flt( bpf_error_signal + L_SUBFR / 2, synth_intFreq + L_SUBFR / 2, synth_intFreq + L_SUBFR / 2 ); - } - st->hPFstat->on = 0; - - if ( st->flag_cna ) - { - generate_masking_noise( synth_intFreq, st->hFdCngDec->hFdCngCom, 2 * L_SUBFR, 0, 0, 0, st->element_mode, NULL, nchan_out ); - } - - /*----------------------------------------------------------------* - * Resample to the output sampling rate (8/16/32/48 kHz) - * Bass post-filter - *----------------------------------------------------------------*/ - - /* bass post-filter */ - bass_psfilter( st->hBPF, st->Opt_AMR_WB, synth_intFreq, 2 * L_SUBFR, NULL, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, GENERIC, bpf_error_signal ); - - /* CLDFB analysis of the synthesis at internal sampling rate */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbAna ) ) != IVAS_ERR_OK ) - { - return error; - } - - cldfbAnalysis_ivas( synth_intFreq, realBuffer, imagBuffer, NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), st->cldfbAna ); - cldfb_restore_memory_ivas( st->cldfbAna ); - - /* CLDFB analysis and add the BPF error signal */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbBPF ) ) != IVAS_ERR_OK ) - { - return error; - } - - addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), realBuffer, imagBuffer, st->cldfbBPF ); - cldfb_restore_memory_ivas( st->cldfbBPF ); - - /* CLDFB synthesis of the combined signal */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbSyn ) ) != IVAS_ERR_OK ) - { - return error; - } - - cldfbSynthesis_ivas( realBuffer, imagBuffer, synth_subfr_out, NS2SA( st->output_Fs, SWITCH_GAP_LENGTH_NS + DELAY_CLDFB_NS ), st->cldfbSyn ); - cldfb_restore_memory_ivas( st->cldfbSyn ); - - mvr2r( synth_intFreq + NS2SA( L_frame_for_cs * FRAMES_PER_SEC, SWITCH_GAP_LENGTH_NS - DELAY_CLDFB_NS ) - 2, mem_synth, NS2SA( L_frame_for_cs * FRAMES_PER_SEC, DELAY_CLDFB_NS ) + 2 ); /* need for switching (-2 is due to 0 delay filtering) */ - - /*----------------------------------------------------------------* - * BWE decoding - *----------------------------------------------------------------*/ - - decode_bwe = 0; - if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) - { - /* Decoding of BWE */ - d1m = get_next_indice( st, AUDIODELAYBITS ); - ind1 = get_next_indice( st, NOOFGAINBITS1 ); - gain = usdequant( ind1, MINVALUEOFFIRSTGAIN, DELTAOFFIRSTGAIN ); - decode_bwe = 1; - } - - - if ( decode_bwe && !( ( output_frame == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || output_frame == L_FRAME8k ) ) - { - set_f( tmp_mem2, 0, 2 * L_FILT48k ); - - hp_filter = hp16000_48000; - fdelay = 48; - if ( st->output_Fs == 16000 ) - { - if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_16000; - fdelay = 20; - } - } - else if ( st->output_Fs == 32000 ) - { - - if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_32000; - fdelay = 40; - } - else - { - hp_filter = hp16000_32000; - fdelay = 32; - } - } - else if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_48000; - fdelay = 60; - } - - /* safety check in case of bit errors */ - i = MAX_D1M_16k; - if ( st->last_L_frame == L_FRAME ) - { - i = MAX_D1M_12k8; - } - - if ( d1m >= i ) - { - d1m = i - 1; - gain = 0; /* force muting */ - st->BER_detect = 1; - } - - i = NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ); - mvr2r( st->old_synth_sw, hb_synth_tmp, i ); - set_f( hb_synth_tmp + i, 0, NS2SA( st->output_Fs, 10000000L ) - i ); - fir( hb_synth_tmp, hp_filter, hb_synth_tmp, tmp_mem2, output_frame >> 1, fdelay, 0 ); /* put the 40 past samples into the memory */ - set_f( tmp_synth_bwe, 0, SWITCH_MAX_GAP ); - - gapsize = delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ); - for ( i = 0; i < gapsize; i++ ) - { - tmp_synth_bwe[i] = hb_synth_tmp[i + d1m * delta + fdelay] * gain; - } - } - else - { - set_f( tmp_synth_bwe, 0, SWITCH_MAX_GAP ); - } - } - - return error; -} - - -/*-------------------------------------------------------------------* - * acelp_core_switch_dec_bfi() - * - * ACELP core decoder in the first ACELP->HQ switching frame in case of BAD frame - *-------------------------------------------------------------------*/ - -ivas_error acelp_core_switch_dec_bfi( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - int16_t i; - float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ - float syn[L_FRAME16k]; /* synthesis signal buffer */ - float lsf_new[M]; /* LSFs at the end of the frame */ - float lsp_new[M]; /* LSPs at the end of the frame */ - float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ - float old_exc2[L_FRAME16k + L_EXC_MEM], *exc2; /* total excitation buffer */ - float tmp_noise; /* Long term temporary noise energy */ - float FEC_pitch; /* FEC pitch */ - float old_bwe_exc[( ( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 )]; /* excitation buffer */ - float *bwe_exc; /* Excitation for SWB TBE */ - float tmp_float[NBPSF_PIT_MAX]; - float tmp_float2[M]; - float tmp_float3; - float tmp_float4[L_TRACK_HIST]; - int16_t tmp_float5[L_TRACK_HIST]; - int16_t tmp_float6[L_TRACK_HIST]; - float tmp_float7; - - float voice_factors[NB_SUBFR16k]; - float pitch_buf[NB_SUBFR16k]; - float *realBuffer[CLDFB_NO_COL_MAX_SWITCH_BFI], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH_BFI]; - float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH_BFI][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH_BFI][CLDFB_NO_CHANNELS_MAX]; - ivas_error error; - - error = IVAS_ERR_OK; - - /*----------------------------------------------------------------* - * Initialization - *----------------------------------------------------------------*/ - - /* initialize CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH_BFI; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - st->bpf_off = 1; - st->clas_dec = st->last_good; - tmp_noise = 0.0f; - - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - exc = old_exc + L_EXC_MEM_DEC; - - if ( st->hWIDec != NULL ) - { - mvr2r( st->hWIDec->old_exc2, old_exc2, L_EXC_MEM ); - } - else - { - set_f( old_exc2, 0, L_EXC_MEM ); - } - exc2 = old_exc2 + L_EXC_MEM; - - if ( st->hBWE_TD != NULL ) - { - mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); - bwe_exc = old_bwe_exc + PIT16k_MAX * 2; - } - else - { - bwe_exc = NULL; - } - - st->GSC_noisy_speech = 0; - st->relax_prev_lsf_interp = 0; - - /* SC-VBR */ - if ( st->last_nelp_mode_dec == 1 ) - { - st->nelp_mode_dec = 1; - } - - mvr2r( st->mem_AR, tmp_float, M ); - mvr2r( st->mem_MA, tmp_float2, M ); - - /* LSF estimation and A(z) calculation */ - lsf_dec_bfi_flt( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, st->L_frame, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); - - FEC_lsf2lsp_interp_flt( st, st->L_frame, Aq, lsf_new, lsp_new ); - - mvr2r( tmp_float, st->mem_AR, M ); - mvr2r( tmp_float2, st->mem_MA, M ); - - /*----------------------------------------------------------------* - * Excitation decoding - *----------------------------------------------------------------*/ - - if ( st->nelp_mode_dec == 1 ) - { - /* SC-VBR */ - decod_nelp( st, &tmp_noise, pitch_buf, exc, exc2, voice_factors, bwe_exc, st->bfi, tmp_float2 ); - FEC_pitch = pitch_buf[3]; - } - else - { - tmp_float[0] = st->bfi_pitch; - tmp_float[1] = (float) st->bfi_pitch_frame; - tmp_float[2] = st->lp_gainp; - tmp_float[3] = st->lp_gainc; - tmp_float[4] = st->upd_cnt; - tmp_float[5] = st->seed; - - /* calculation of excitation signal */ - FEC_exc_estim( st, st->L_frame, exc, exc2, syn /* dummy buffer */, pitch_buf, voice_factors, &FEC_pitch, bwe_exc, lsf_new, &tmp_noise ); - - st->seed = (int16_t) tmp_float[5]; - st->bfi_pitch = tmp_float[0]; - st->bfi_pitch_frame = (int16_t) tmp_float[1]; - st->lp_gainp = tmp_float[2]; - st->lp_gainc = tmp_float[3]; - st->upd_cnt = (int16_t) tmp_float[4]; - } - - /*------------------------------------------------------------------* - * Synthesis - *-----------------------------------------------------------------*/ - - mvr2r( st->mem_syn2, tmp_float, M ); - syn_12k8( st->L_frame, Aq, exc2, syn, tmp_float, 1 ); - - tmp_float[0] = st->enr_old; - fer_energy( st->L_frame, st->last_good, syn, FEC_pitch, tmp_float, st->L_frame ); - - /*------------------------------------------------------------------* - * Perform fixed deemphasis through 1/(1 - g*z^-1) - *-----------------------------------------------------------------*/ - - mvr2r( &( st->mem_deemph ), tmp_float, 1 ); - if ( st->L_frame == L_FRAME ) - { - deemph( syn, PREEMPH_FAC_FLT, L_FRAME, tmp_float ); - } - else - { - deemph( syn, PREEMPH_FAC_16k_FLT, L_FRAME16k, tmp_float ); - } - - /*----------------------------------------------------------------* - * Bass post-filter - *----------------------------------------------------------------*/ - - st->bpf_off = 1; - mvr2r( st->hBPF->pst_old_syn, tmp_float, NBPSF_PIT_MAX ); - tmp_float3 = st->stab_fac_smooth; - mvr2r( st->hBPF->mem_mean_pit, tmp_float4, L_TRACK_HIST ); - mvs2s( st->hBPF->Track_on_hist, tmp_float5, L_TRACK_HIST ); - mvs2s( st->hBPF->vibrato_hist, tmp_float6, L_TRACK_HIST ); - tmp_float7 = st->hBPF->psf_att; - - /* apply bass post-filter */ - bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, st->L_frame, pitch_buf, st->bpf_off, st->stab_fac, &tmp_float3, st->coder_type, old_exc /* tmp buffer */ ); - - mvr2r( tmp_float, st->hBPF->pst_old_syn, NBPSF_PIT_MAX ); - mvr2r( tmp_float4, st->hBPF->mem_mean_pit, L_TRACK_HIST ); - mvs2s( tmp_float5, st->hBPF->Track_on_hist, L_TRACK_HIST ); - mvs2s( tmp_float6, st->hBPF->vibrato_hist, L_TRACK_HIST ); - st->hBPF->psf_att = tmp_float7; - - /*----------------------------------------------------------------* - * Resampling to the output sampling frequency - *----------------------------------------------------------------*/ - - /* CLDFB analysis of the synthesis at internal sampling rate */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbAna ) ) != IVAS_ERR_OK ) - { - return error; - } - - cldfbAnalysis_ivas( syn, realBuffer, imagBuffer, st->L_frame / 2, st->cldfbAna ); - cldfb_restore_memory_ivas( st->cldfbAna ); - - /* CLDFB synthesis of the combined signal */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbSyn ) ) != IVAS_ERR_OK ) - { - return error; - } - - cldfbSynthesis_ivas( realBuffer, imagBuffer, st->hHQ_core->fer_samples, (int16_t) ( st->output_Fs * 0.01f ), st->cldfbSyn ); - cldfb_restore_memory_ivas( st->cldfbSyn ); - - return error; -} - - -/*-------------------------------------------------------------------* - * decod_gen_voic_core_switch() - * - * Decode excitation signal in the first ACELP->HQ switching frame - *-------------------------------------------------------------------*/ - -static void decod_gen_voic_core_switch( - Decoder_State *st, /* i/o: decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t sharpFlag, /* i : flag for formant sharpening */ - const float *Aq, /* i : LP filter coefficient */ - float *exc, /* i/o: adapt. excitation exc */ - const int32_t core_brate /* i : switching frame bitrate */ -) -{ - int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ - float gain_pit; /* pitch gain */ - float gain_code; /* gain/normalized gain of the algebraic excitation */ - float norm_gain_code; /* normalized gain of the algebraic excitation */ - float gain_inov; /* Innovation gain */ - float voice_fac; /* voicing factor */ - float code[L_SUBFR]; /* algebraic codevector */ - float pitch; /* pointer to floating pitch */ - int16_t i; /* tmp variables */ - int16_t pitch_limit_flag; - float tmpF; - - /* initializations */ - if ( L_frame == L_FRAME ) - { - T0_max = PIT_MAX; - T0_min = PIT_MIN; - } - else /* L_frame == L_FRAME16k */ - { - T0_max = PIT16k_MAX; - T0_min = PIT16k_MIN; - } - - /*----------------------------------------------------------------------* - * Decode pitch lag - *----------------------------------------------------------------------*/ - - pitch = pit_decode_flt( st, core_brate, 0, L_frame, 0, GENERIC, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, 0, NULL ); - - /*--------------------------------------------------------------* - * Find the adaptive codebook vector. - *--------------------------------------------------------------*/ - - pred_lt4_flt( &exc[0], &exc[0], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*--------------------------------------------------------------* - * LP filtering of the adaptive excitation - *--------------------------------------------------------------*/ - - lp_filt_exc_dec( st, MODE1, 0, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, core_brate, 0, L_frame, sharpFlag, 0, Aq, st->tilt_code, pitch, code, L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - gain_dec_mless( st, L_frame, TRANSITION, 0, -1, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - else - { - gain_dec_mless( st, L_frame, GENERIC, 0, -1, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - - st->tilt_code = est_tilt( exc, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - if ( st->prev_bfi ) - { - gain_code = min( gain_code, 0.5f * gain_code + 0.5f * st->lp_gainc ); - } - - for ( i = 0; i < L_SUBFR; i++ ) - { - tmpF = gain_pit * exc[i]; - exc[i] = tmpF + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * long term prediction on the 2nd sub frame - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[L_SUBFR], &exc[L_SUBFR], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i + L_SUBFR] *= gain_pit; - } - - return; -} -#endif diff --git a/lib_dec/acelp_core_switch_dec_fx.c b/lib_dec/acelp_core_switch_dec_fx.c index a40fff278..8224a74eb 100644 --- a/lib_dec/acelp_core_switch_dec_fx.c +++ b/lib_dec/acelp_core_switch_dec_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ #include "prot.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ @@ -601,7 +600,6 @@ ivas_error acelp_core_switch_dec_bfi_fx( return error; } -#ifdef IVAS_FLOAT_FIXED ivas_error acelp_core_switch_dec_bfi_ivas_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 synth_out[], /* o : synthesis Q_syn */ @@ -857,7 +855,6 @@ ivas_error acelp_core_switch_dec_bfi_ivas_fx( return error; } -#endif /*-------------------------------------------------------------------* * decod_gen_voic_core_switch() @@ -1008,4 +1005,3 @@ static void decod_gen_voic_core_switch_fx( return; } -#endif diff --git a/lib_dec/amr_wb_dec.c b/lib_dec/amr_wb_dec.c index 7a5baa92c..d441f6ead 100644 --- a/lib_dec/amr_wb_dec.c +++ b/lib_dec/amr_wb_dec.c @@ -41,809 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * amr_wb_dec() - * - * AMR-WB decoder - *------------------------------------------------------------------*/ - -ivas_error amr_wb_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ - float *output /* o : synthesis output */ -) -{ - int16_t i; - int16_t vad_flag; - float ftmp; - float old_exc[L_EXC_DEC], *exc; /* excitation signal buffer */ - float syn_tmp[L_FRAME + 2], *syn; /* synthesis signal buffer */ - float synth_out[L_FRAME48k]; /* synthesis output */ - int16_t output_frame; /* frame length at output sampling freq. */ - float lsf_new[M]; /* LSFs at the end of the frame */ - float lsp_new[M]; /* LSPs at the end of the frame */ - float Aq[NB_SUBFR * ( M + 1 )]; /* A(q) quantized for the 4 subframes */ - float exc2[L_FRAME]; /* total excitation buffer */ - float mem_tmp[M]; /* temporary synthesis filter memory */ - float pitch_buf[NB_SUBFR]; /* floating pitch for each subframe */ - float enr_q; /* E information for FER protection */ - float tmp_noise; /* Long term temporary noise energy */ - float FEC_pitch; /* FEC pitch */ - float dummy_buf[L_FRAME32k]; /* dummy buffer - no usage */ - int16_t allow_cn_step; - int16_t locattack, amr_io_class; - int16_t tmps; - float xsp_tmp[M]; - float tmp_buffer[L_FRAME48k]; - float dct_buffer[DCT_L_POST]; - float frame_e; - float exc_buffer[DCT_L_POST]; - float class_para; - float voice_factors[NB_SUBFR]; - int16_t hf_gain[NB_SUBFR]; - int16_t delay_comp; - int16_t nZeros; - float tmp; - int16_t last_core_ori; - int16_t sid_bw = 0; - float bpf_error_signal[L_FRAME]; - float ng_ener; - float gain_buf[NB_SUBFR16k]; - float q_env[20]; - float exc3[L_FRAME]; - float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; - float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t flag_cna; - int16_t waveadj_rec = 0; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - ivas_error error; - - push_wmops( "amr_wb_dec" ); - - error = IVAS_ERR_OK; - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - st->idchan = 0; - - syn_tmp[0] = 0; - syn_tmp[1] = 0; - syn = syn_tmp + 2; - - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - set_f( gain_buf, 0, NB_SUBFR16k ); - - st->use_partial_copy = 0; - st->rf_frame_type = RF_NO_DATA; - st->rf_flag = 0; - st->rf_flag_last = 0; - - st->L_frame = L_FRAME; - st->nb_subfr = NB_SUBFR; - st->core = AMR_WB_CORE; - st->core_brate = st->total_brate; - st->extl = -1; - st->bwidth = WB; - st->coder_type = GENERIC; - output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); /* frame length of the input signal */ - - st->bpf_off = 0; - if ( st->last_core == HQ_CORE ) - { - st->bpf_off = 1; - st->hPFstat->on = 0; - } - st->igf = 0; - - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->fscale_old = st->fscale; - st->fscale = sr2fscale( st->sr_core ); - - /* Initialization in case that the first frame is the good received AMR-WB (IO) frame */ - if ( st->ini_frame == 0 ) - { - st->last_core = AMR_WB_CORE; - mvr2r( mean_isf_amr_wb, st->lsf_old, M ); - isf2isp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); - } - - /* Updates in case of EVS primary mode -> AMR-WB IO mode switching */ - if ( st->last_core != AMR_WB_CORE ) - { - updt_IO_switch_dec( output_frame, st ); - } - - /* Updates in case of HQ -> AMR-WB IO switching */ - if ( ( error = core_switching_pre_dec( st, output_frame, -1, -1, EVS_MONO, -1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - - last_core_ori = st->last_core; - set_s( hf_gain, 0, NB_SUBFR ); - - enr_q = 0.0f; - tmp_noise = 0.0f; - amr_io_class = UNVOICED_CLAS; - - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - exc = old_exc + L_EXC_MEM_DEC; - - /* reset post-filter in case of switching */ - if ( st->hPFstat->on == 0 ) - { - st->hPFstat->reset = 1; - } - - if ( st->bfi ) - { - st->nbLostCmpt++; - } - else - { - st->nbLostCmpt = 0; - } - - /* PLC: [TCX: Fade-out-recovery] - * PLC: overlapping part needs to be attenuated for first good frame */ - if ( !st->bfi && st->prev_bfi && ( st->last_codec_mode == MODE2 ) && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) ) - { - v_multc( st->hHQ_core->old_out, st->hPlcInfo->recovery_gain_float, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); - } - - /*-----------------------------------------------------------------* - * switching from ACELP@16k core to AMR-WB IO mode - *-----------------------------------------------------------------*/ - - st->rate_switching_reset = 0; - - if ( st->last_core != AMR_WB_CORE && st->last_L_frame == L_FRAME16k && st->last_core != HQ_CORE ) - { - /* in case of switching, do not apply BPF */ - st->bpf_off = 1; - if ( st->hPFstat->on != 0 ) - { - int16_t mem_syn_r_size_old, mem_syn_r_size_new; - - mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); - mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); - lerp_flt( st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - lerp_flt( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - } - - /* convert old quantized LSP vector */ - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, L_FRAME, 1 ); - - /* convert old quantized LSF vector */ - lsp2lsf( st->lsp_old, st->lsf_old, M, INT_FS_12k8 ); - - /* FEC - update adaptive LSF mean vector */ - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - - /* Reset LPC mem */ - mvr2r( GEWB_Ave, st->mem_AR, M ); - set_zero( st->mem_MA, M ); - - /* update synthesis filter memories */ - - synth_mem_updt2_flt( L_FRAME, st->last_L_frame, st->old_exc, st->mem_syn_r_float, st->mem_syn2, NULL, DEC ); - mvr2r( st->old_exc, old_exc, L_EXC_MEM_DEC ); - mvr2r( st->mem_syn2, st->mem_syn1, M ); - mvr2r( st->mem_syn2, st->mem_syn3, M ); - - /* LSP -> ISP */ - mvr2r( stable_ISP, xsp_tmp, M ); - lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); - } - - /* update buffer of old subframe pitch values */ - if ( st->last_L_frame != L_FRAME ) - { - if ( st->last_L_frame == L_FRAME32k ) - { - tmp = (float) 12800 / (float) 32000; - } - else if ( st->last_L_frame == 512 ) - { - tmp = (float) 12800 / (float) 25600; - } - else /* st->last_L_frame == L_FRAME16k */ - { - tmp = (float) 12800 / (float) 16000; - } - - for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 1] = tmp * st->old_pitch_buf[i]; - } - - for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 2] = tmp * st->old_pitch_buf[i]; - } - } - - if ( st->bfi_pitch_frame != L_FRAME ) - { - if ( st->bfi_pitch_frame == L_FRAME32k ) - { - tmp = (float) 12800 / (float) 32000; - } - else if ( st->bfi_pitch_frame == 512 ) - { - tmp = (float) 12800 / (float) 25600; - } - else /* st->bfi_pitch_frame == L_FRAME16k */ - { - tmp = (float) 12800 / (float) 16000; - } - - st->bfi_pitch *= tmp; - st->bfi_pitch_frame = L_FRAME; - } - - if ( st->last_bwidth == NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - /*----------------------------------------------------------------------* - * GOOD frame - *----------------------------------------------------------------------*/ - - if ( !st->bfi ) - { - /*----------------------------------------------------------------* - * Processing of FRAME_NO_DATA frames - * Decoding of SID frames - *----------------------------------------------------------------*/ - - if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_1k75 ) - { - /* decode CNG parameters */ - CNG_dec( st, EVS_MONO, Aq, lsp_new, lsf_new, &allow_cn_step, &sid_bw, q_env ); - - /* comfort noise generation */ - CNG_exc( st->core_brate, L_FRAME, &st->hTdCngDec->Enew, &st->hTdCngDec->cng_seed, exc, exc2, &st->lp_ener, st->last_core_brate, &st->first_CNG, &st->hTdCngDec->cng_ener_seed, dummy_buf, allow_cn_step, &st->hTdCngDec->last_allow_cn_step, st->hTdCngDec->num_ho, q_env, st->hTdCngDec->lp_env, st->hTdCngDec->old_env, st->hTdCngDec->exc_mem, st->hTdCngDec->exc_mem1, &sid_bw, &st->hTdCngDec->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); - set_f( voice_factors, 1.0f, NB_SUBFR ); - class_para = 0.0f; - - /* update past excitation signals for LD music post-filter */ - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - - /* synthesis at 12k8 Hz sampling rate */ - syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); - syn_12k8( st->L_frame, Aq, exc2, dummy_buf, st->mem_syn3, 1 ); - - /* reset the decoder */ - CNG_reset_dec( st, pitch_buf, dummy_buf + L_FRAME ); - - /* update st->mem_syn1 for ACELP core switching */ - mvr2r( st->mem_syn3, st->mem_syn1, M ); - if ( output_frame != L_FRAME8k ) - { - frame_e = 10.0f * (float) log10( dotp( syn, syn, L_FRAME ) / (float) L_FRAME ); - st->psf_lp_noise = 0.99f * st->psf_lp_noise + 0.01f * frame_e; - } - - /* update old synthesis for classification */ - mvr2r( syn + L_FRAME - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - - /* Update music post processing values */ - /* Filter energies update */ - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - - vad_flag = 0; - } - - /*----------------------------------------------------------------* - * Decoding of all other frames - *----------------------------------------------------------------*/ - - else - { - /*-----------------------------------------------------------------* - * After CNG period, use the most up-to-date ISPs - *-----------------------------------------------------------------*/ - - if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 ) - { - mvr2r( st->lspCNG, st->lsp_old, M ); - isp2isf( st->lspCNG, st->lsf_old, M, INT_FS_12k8 ); - set_f( old_exc, 0, L_EXC_MEM_DEC ); - } - - /*------------------------------------------------------------* - * Extracts VAD information from the bitstream in AMR-WB IO mode - *------------------------------------------------------------*/ - - vad_flag = get_next_indice( st, 1 ); - - if ( vad_flag == 0 ) - { - st->coder_type = INACTIVE; - } - else - { - st->coder_type = GENERIC; - } - - /*-----------------------------------------------------------------* - * ISF de-quantization and interpolation - *-----------------------------------------------------------------*/ - - isf_dec_amr_wb( st, Aq, lsf_new, lsp_new ); - - /*------------------------------------------------------------* - * Decode excitation - *------------------------------------------------------------*/ - - decod_amr_wb( st, Aq, pitch_buf, exc, exc2, hf_gain, voice_factors, gain_buf ); - - /* synthesis for ACELP core switching and SWB BWE */ - syn_12k8( L_FRAME, Aq, exc, tmp_buffer, st->mem_syn1, 1 ); - - /*------------------------------------------------------------* - * Update long-term energies for FEC - * Update ISP vector for CNG - *------------------------------------------------------------*/ - - if ( st->coder_type == INACTIVE ) - { - if ( st->unv_cnt > 20 ) - { - ftmp = st->lp_gainc * st->lp_gainc; - st->lp_ener = 0.7f * st->lp_ener + 0.3f * ftmp; - for ( i = 0; i < M; i++ ) - { - st->lspCNG[i] = (float) ( 0.9f * st->lspCNG[i] + 0.1f * lsp_new[i] ); - } - } - else - { - st->unv_cnt++; - } - } - else - { - st->unv_cnt = 0; - } - - /*------------------------------------------------------------* - * Save filter memory in case the synthesis is redone after scaling - * Core synthesis at 12k8 Hz - *------------------------------------------------------------*/ - - mvr2r( st->mem_syn2, mem_tmp, M ); - syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); - - /*------------------------------------------------------------* - * FEC - Estimate the classification information - *------------------------------------------------------------*/ - - FEC_clas_estim( syn, pitch_buf, st->L_frame, st->coder_type, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, st->Opt_AMR_WB, &st->decision_hyst, &locattack, &st->hAmrwb_IO->UV_cnt, &st->hAmrwb_IO->LT_UV_cnt, &st->hAmrwb_IO->Last_ener, &amr_io_class, st->hAmrwb_IO->lt_diff_etot, &class_para, 0, 0, CLASSIFIER_ACELP, 0, 0, 0, st->last_core_brate, -1 ); - - /* update past excitation signals for LD music post-filter */ - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - mvr2r( st->hMusicPF->dct_post_old_exc, exc_buffer, DCT_L_POST - OFFSET2 ); - - if ( output_frame != L_FRAME8k ) - { - if ( st->coder_type == INACTIVE ) - { - frame_energy( L_FRAME, pitch_buf, syn, 0.0f, &frame_e ); - st->psf_lp_noise = 0.99f * st->psf_lp_noise + 0.01f * frame_e; - } - } - - if ( amr_io_class != UNVOICED_CLAS && st->coder_type != INACTIVE && st->psf_lp_noise < 15.0f ) - { - int16_t tmp_coder_type = AUDIO; - if ( st->last_coder_type == INACTIVE || st->last_coder_type == UNVOICED ) - { - tmp_coder_type = INACTIVE; - } - /* Extrapolation of the last future part, windowing and high resolution DCT transform */ - Prep_music_postP( exc_buffer, dct_buffer, st->hMusicPF->filt_lfE, st->last_core, pitch_buf, st->hMusicPF->LDm_enh_lp_gbin ); - - /* LD music post-filter */ - LD_music_post_filter( st->hMusicPF, dct_buffer, dct_buffer, st->core_brate, -1, tmp_coder_type ); - - /* Inverse DCT transform, retrieval of the aligned excitation, re-synthesis */ - Post_music_postP( dct_buffer, exc_buffer, exc2, mem_tmp, st->mem_syn2, Aq, syn ); - } - else - { - /*------------------------------------------------------------* - * Improvement for unvoiced and audio signals - *------------------------------------------------------------*/ - - improv_amr_wb_gs( amr_io_class, st->coder_type, st->core_brate, &st->hGSCDec->seed_tcx, st->hAmrwb_IO->old_Aq, st->mem_syn2, st->hAmrwb_IO->lt_voice_fac, locattack, Aq, exc2, mem_tmp, syn, pitch_buf, st->hAmrwb_IO->Last_ener, st->rate_switching_reset, st->last_coder_type, 0 ); - - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - } - - /*------------------------------------------------------------* - * FEC - Estimate pitch - *------------------------------------------------------------*/ - - FEC_pitch_estim( 1, st->last_core, L_FRAME, st->clas_dec, st->last_good, pitch_buf, st->old_pitch_buf, &st->bfi_pitch, &st->bfi_pitch_frame, &st->upd_cnt, GENERIC ); - - /*------------------------------------------------------------* - * FEC - Smooth the speech energy evolution when recovering after a BAD frame - * (smoothing is performed in the excitation domain and signal is resynthesized after) - *------------------------------------------------------------*/ - - FEC_scale_syn( L_FRAME, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, -1, MOVING_AVERAGE, &st->scaling_flag, &st->lp_ener_FEC_av_float, &st->lp_ener_FEC_max_float, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP_float, mem_tmp, st->mem_syn2, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), 0 ); - - /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ - fer_energy( L_FRAME, st->clas_dec, syn, pitch_buf[3], &st->enr_old, L_FRAME ); - } - - } /* End of GOOD FRAME */ - - /*----------------------------------------------------------------* - * BAD frame - *----------------------------------------------------------------*/ - - else - { - /* long burst frame erasures */ - if ( st->nbLostCmpt > 5 && st->clas_dec >= VOICED_CLAS ) - { - st->last_good = VOICED_TRANSITION; - } - - vad_flag = st->last_vad; - amr_io_class = st->last_good; - class_para = 0.0f; - - /* LSF estimation and A(z) calculation */ - lsf_dec_bfi_flt( MODE1, lsf_new, st->lsf_old, st->lsf_adaptive_mean, NULL, st->mem_MA, st->mem_AR, st->stab_fac, st->last_coder_type, L_FRAME, st->last_good, st->nbLostCmpt, 0, NULL, NULL, NULL, st->hGSCDec->Last_GSC_pit_band_idx, st->Opt_AMR_WB, st->bwidth ); - - FEC_lsf2lsp_interp_flt( st, L_FRAME, Aq, lsf_new, lsp_new ); - - /* calculation of excitation signal */ - FEC_exc_estim( st, L_FRAME, exc, exc2, tmp_buffer, pitch_buf, voice_factors, &FEC_pitch, dummy_buf, lsf_new, &tmp_noise ); - - /* synthesis for ACELP core switching and SWB BWE */ - syn_12k8( L_FRAME, Aq, exc, tmp_buffer, st->mem_syn1, 1 ); - - /* update past excitation signals */ - mvr2r( st->hMusicPF->dct_post_old_exc + L_FRAME, st->hMusicPF->dct_post_old_exc, DCT_L_POST - L_FRAME - OFFSET2 ); - mvr2r( exc2, st->hMusicPF->dct_post_old_exc + ( DCT_L_POST - L_FRAME - OFFSET2 ), L_FRAME ); - - /* Update music post processing values */ - /* Update circular buffer, keep last energy difference unchanged */ - for ( i = 1; i < MAX_LT; i++ ) - { - st->hMusicPF->LDm_lt_diff_etot[i - 1] = st->hMusicPF->LDm_lt_diff_etot[i]; - } - /* Filter energies update */ - for ( i = 0; i < DCT_L_POST; i++ ) - { - st->hMusicPF->filt_lfE[i] = 0.3f + 0.7f * st->hMusicPF->filt_lfE[i]; - } - - /* synthesis at 12k8 Hz sampling rate */ - mvr2r( st->mem_syn2, mem_tmp, M ); - syn_12k8( L_FRAME, Aq, exc2, syn, st->mem_syn2, 1 ); - - /* update old synthesis for classification */ - mvr2r( syn + L_FRAME - L_SYN_MEM_CLAS_ESTIM, st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - - - /*------------------------------------------------------------* - * FEC - Smooth the speech energy evolution when recovering after a BAD frame - * (smoothing is performed in the excitation domain and signal is resynthesized after) - *------------------------------------------------------------*/ - - FEC_scale_syn( L_FRAME, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, enr_q, -1, MOVING_AVERAGE, &st->scaling_flag, &st->lp_ener_FEC_av_float, &st->lp_ener_FEC_max_float, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, Aq, &st->old_enr_LP_float, mem_tmp, st->mem_syn2, 0, 0 ); - - /* estimate the pitch-synchronous speech energy per sample to be used when normal operation recovers */ - fer_energy( L_FRAME, st->last_good, syn, FEC_pitch, &st->enr_old, L_FRAME ); - } - - /*--------------------------------------------------------* - * NB post-filter - *--------------------------------------------------------*/ - - if ( output_frame == L_FRAME8k || st->last_bwidth == NB ) - { - if ( output_frame == L_FRAME8k ) - { - st->hPFstat->on = 1; - nb_post_filt_ivas( L_FRAME, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, st->coder_type, st->BER_detect, 0 ); - } - else - { - st->hPFstat->on = 0; - nb_post_filt_ivas( L_FRAME, L_SUBFR, st->hPFstat, &st->psf_lp_noise, tmp_noise, syn, Aq, pitch_buf, AUDIO, st->BER_detect, 0 ); - } - } - - /*------------------------------------------------------------------* - * Perform fixed deemphasis through 1/(1 - g*z^-1) - *-----------------------------------------------------------------*/ - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn + L_FRAME - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - - - deemph( syn, PREEMPH_FAC_FLT, L_FRAME, &( st->mem_deemph ) ); - AGC_dec( syn, st->agc_mem2, L_FRAME ); - if ( st->hTcxDec != NULL ) - { - mvr2r( syn + L_FRAME / 2, st->hTcxDec->old_syn_Overl_float, L_FRAME / 2 ); - } - mvr2r( syn + L_FRAME - M - 1, st->syn_float, M + 1 ); - - /*------------------------------------------------------------------* - * Formant post-filter - *-----------------------------------------------------------------*/ - - mvr2r( syn, tmp_buffer + L_SYN_MEM, L_FRAME ); - - if ( output_frame != L_FRAME8k && st->last_bwidth != NB ) - { - st->hPFstat->on = 1; - formant_post_filt_ivas( st->hPFstat, tmp_buffer + L_SYN_MEM, Aq, syn, L_FRAME, L_SUBFR, st->psf_lp_noise, st->total_brate, amr_io_class == AUDIO_CLAS ); - } - - /*----------------------------------------------------------------* - * Comfort Noise Addition - *----------------------------------------------------------------*/ - - flag_cna = 0; - if ( st->psf_lp_noise >= 15.f || st->coder_type == INACTIVE ) - { - /*VAD only for non inactive frame*/ - st->VAD = ( st->VAD && ( st->coder_type != INACTIVE ) ); - - ApplyFdCng( syn, NULL, NULL, NULL, st, 0, 0 ); - - st->hFdCngDec->hFdCngCom->frame_type_previous = st->m_frame_type; - - /*Noisy speech detector*/ - noisy_speech_detection( st->hFdCngDec, st->VAD, syn ); - - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; - - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - - if ( st->flag_cna && ( st->psf_lp_noise >= 15.f ) ) - { - flag_cna = 1; - generate_masking_noise( syn, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, AMR_WB_CORE, 0, 0, st->element_mode, NULL, -1 ); - } - else if ( st->flag_cna ) - { - generate_masking_noise_update_seed( st->hFdCngDec->hFdCngCom ); - } - } - else if ( st->flag_cna ) - { - generate_masking_noise_update_seed( st->hFdCngDec->hFdCngCom ); - } - - if ( flag_cna == 0 ) - { - if ( st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == AMR_WB_CORE ) ) - { - v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt + 5 * L_FRAME / 4, 256.f, tmp_buffer, L_FRAME / 2 ); - v_add( tmp_buffer, syn, syn, L_FRAME / 2 ); - } - set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, 0.f, L_FRAME * 2 ); - } - - /*----------------------------------------------------------------* - * Change the sampling frequency to 8/16/32 kHz - * Bass post-filter - *----------------------------------------------------------------*/ - - /* check if the cldfb works on the right sample rate */ - if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != L_FRAME ) - { - /* resample to ACELP internal sampling rate */ - resampleCldfb_ivas( st->cldfbAna, INT_FS_12k8 ); - resampleCldfb_ivas( st->cldfbBPF, INT_FS_12k8 ); - - if ( st->ini_frame > 0 ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - } - - /* bass post-filter */ - bass_psfilter( st->hBPF, st->Opt_AMR_WB, syn, L_FRAME, pitch_buf, st->bpf_off, st->stab_fac, &st->stab_fac_smooth, GENERIC, bpf_error_signal ); - - /* analysis of the synthesis at internal sampling rate */ - cldfbAnalysis_ivas( syn, realBuffer, imagBuffer, -1, st->cldfbAna ); - - /* analysis and add the BPF error signal */ - addBassPostFilter( bpf_error_signal, st->bpf_off ? 0 : -1, realBuffer, imagBuffer, st->cldfbBPF ); - - if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) - { - /* in case of BW switching, re-init to default */ - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - - cldfb_synth_set_bandsToZero_flt( st, realBuffer, imagBuffer, CLDFB_NO_COL_MAX ); - - /* synthesis of the combined signal */ - cldfbSynthesis_ivas( realBuffer, imagBuffer, synth_out, -1, st->cldfbSyn ); - - /* save synthesis - needed in case of core switching */ - mvr2r( synth_out, st->previoussynth, output_frame ); - - /*--------------------------------------------------------* - * calculate the average frame energy - *--------------------------------------------------------*/ - - fer_energy( L_FRAME, st->clas_dec, syn, pitch_buf[3], &ng_ener, L_FRAME ); - - /*--------------------------------------------------------* - * optimized for NO_S@-26dBov with street noise @ SNR=25dB - *--------------------------------------------------------*/ - - ng_ener = 10.0f * (float) log10( ng_ener + 0.01f ) - 90.3087f + 15; - st->ng_ener_ST = 0.7f * st->ng_ener_ST + 0.3f * ng_ener; - - /*-----------------------------------------------------------------* - * Bandwidth extension 6kHz-8kHz - *-----------------------------------------------------------------*/ - - if ( output_frame >= L_FRAME16k && ( ( st->cldfbSyn->bandsToZero - st->cldfbSyn->no_channels + 10 ) != 0 || st->last_flag_filter_NB != 1 ) ) - { - hf_synth_amr_wb( st->hAmrwb_IO, st->hBWE_zero, st->core_brate, output_frame, Aq, exc2, syn, &amr_io_class, synth_out, class_para, hf_gain, voice_factors, pitch_buf, st->ng_ener_ST, lsf_new ); - } - else - { - hf_synth_amr_wb_reset( st->hAmrwb_IO, st->hBWE_zero ); - } - - /*----------------------------------------------------------------------* - * Updates - *----------------------------------------------------------------------*/ - - updt_dec( st, old_exc, pitch_buf, 0, Aq, lsf_new, lsp_new, voice_factors, dummy_buf, gain_buf ); - - /* update old_Aq[] - needed in improv_amr_wb_gs_fx() */ - mvr2r( Aq, st->hAmrwb_IO->old_Aq, NB_SUBFR * ( M + 1 ) ); - - if ( !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) - { - waveadj_rec = 1; - } - - st->last_vad = vad_flag; - - /* Update main codec parameters */ - updt_dec_common( st, -1, -1, NULL ); - - /*----------------------------------------------------------------* - * Overlap of ACELP synthesis with old MDCT memory - *----------------------------------------------------------------*/ - - if ( st->bfi ) - { - /* calculate another loss frame to fill gap in case of switching frame loss */ - if ( ( error = acelp_core_switch_dec_bfi( st ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - if ( last_core_ori == HQ_CORE ) - { - nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); - - if ( st->prev_bfi && st->hHQ_core->HqVoicing ) - { - mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + nZeros, NS2SA( st->output_Fs, 6000000 ) ); - } - - /* copy the HQ/ACELP delay synchroniation buffer to the beginning of ACELP frame */ - mvr2r( st->delay_buf_out, synth_out, delay_comp ); - - tmp = 1.0f / (float) NS2SA( st->output_Fs, 6000000 ); - for ( i = 0; i < NS2SA( st->output_Fs, 6000000 ); i++ ) - { - synth_out[i + delay_comp] = ( 1 - tmp * (float) i ) * st->hHQ_core->old_out[i + nZeros] + tmp * (float) i * synth_out[i + delay_comp]; - } - } - - /*----------------------------------------------------------------* - * HP filtering - * Final synthesis output - *----------------------------------------------------------------*/ - - /* Delay ACELP synthesis by DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS delay */ - if ( output_frame >= L_FRAME16k ) - { - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); - delay_signal_float( synth_out, output_frame, st->prev_synth_buffer, tmps ); - } - - if ( waveadj_rec ) - { - tmps = 0; - if ( output_frame >= L_FRAME16k ) - { - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); - } - waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut_float, synth_out + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); - } - - /* HP filter */ - hp20_flt( synth_out, output_frame, mem_hp20_out, st->output_Fs ); - - /* save synthesis for core switching */ - mvr2r( synth_out + NS2SA( st->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st->old_synth_sw, NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); - - /* TCX-LTP Postfilter: used in AMR-WB IO to update memories and to avoid discontinuities when the past frame was TCX */ - tcx_ltp_post_flt( st, hTcxLtpDec, ACELP_CORE, output_frame, 0, synth_out, NULL ); - - /* final output of synthesis signal */ - mvr2r( synth_out, output, output_frame ); - - pop_wmops(); - - return error; -} - -/*------------------------------------------------------------------* - * amr_wb_dec_init() - * - * AMR-WB decoder initialization - *------------------------------------------------------------------*/ - -void amr_wb_dec_init( - AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ -) -{ - /* gain quantization memory (used in AMR-WB IO mode) */ - set_f( hAmrwb_IO->past_qua_en, -14.0f, GAIN_PRED_ORDER ); - - /* Improvement of unvoiced and audio signals in AMR-WB IO mode */ - hAmrwb_IO->UV_cnt = 30; - hAmrwb_IO->LT_UV_cnt = 60.0f; - set_f( hAmrwb_IO->lt_diff_etot, 0, MAX_LT ); - hAmrwb_IO->Last_ener = 0.0f; - - set_f( hAmrwb_IO->old_Aq, 0, NB_SUBFR * ( M + 1 ) ); - hAmrwb_IO->old_Aq[0] = 1.0f; - hAmrwb_IO->old_Aq[M + 1] = 1.0f; - hAmrwb_IO->old_Aq[2 * ( M + 1 )] = 1.0f; - hAmrwb_IO->old_Aq[3 * ( M + 1 )] = 1.0f; - - hAmrwb_IO->lt_voice_fac = 0.0f; - - return; -} -#endif diff --git a/lib_dec/amr_wb_dec_fx.c b/lib_dec/amr_wb_dec_fx.c index c17c0f603..72ceb6cd3 100644 --- a/lib_dec/amr_wb_dec_fx.c +++ b/lib_dec/amr_wb_dec_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" #include "prot_fx.h" #include "basop_util.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * amr_wb_dec_fx() * @@ -1148,5 +1147,3 @@ void amr_wb_dec_init_fx( move16(); return; } - -#endif diff --git a/lib_dec/ari_dec.c b/lib_dec/ari_dec.c index 2102356fa..8dedcea1e 100644 --- a/lib_dec/ari_dec.c +++ b/lib_dec/ari_dec.c @@ -55,55 +55,7 @@ * Start ArCo decoding *-------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ari_start_decoding_14bits_ivas( - Decoder_State *st, - Tastat *s ) -{ - uint32_t val; - - val = get_next_indice( st, cbitsnew ); - - s->low = 0; - s->high = ari_q4new; - s->value = val; - - return; -} - -/*--------------------------------------------------------------- - * ari_start_decoding_14bits_prm_ivas() - * - * Start ArCo decoding - *-------------------------------------------------------------*/ - -int16_t ari_start_decoding_14bits_prm_ivas( - const int16_t *ptr, - int16_t bp, - Tastat *s ) -{ - int32_t val; - int16_t i; - const int16_t *p; - - val = 0; - p = ptr + bp; - for ( i = 0; i < cbitsnew; i++ ) - { - val = ( val << 1 ) | *( p + i ); - } - - s->low = 0; - s->high = ari_q4new; - s->value = val; - - bp = bp + i; - - return bp; -} -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED Word16 ari_start_decoding_14bits_prm_ivas_fx( const Word16 *ptr, Word16 bp, @@ -130,10 +82,8 @@ Word16 ari_start_decoding_14bits_prm_ivas_fx( return add( bp, i ); } -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ari_decode_14bits_pow_ivas( Word16 *ptr, Word16 bp, @@ -386,569 +336,3 @@ Word16 ari_decode_14bits_sign_ivas( return bp; } -#else -/*--------------------------------------------------------------- - * ari_decode_14bits_s17_ext_ivas() - * - * Only for 17 symbols with new extended Tables: - * based on tri's optimization - * based on extended Tables which need less branches for coding - *-------------------------------------------------------------*/ - -void ari_decode_14bits_s17_ext_ivas( - Decoder_State *st, - uint16_t *res, - Tastat *s, - const uint16_t *cum_freq ) -{ - uint16_t symbol; - int32_t low, high; - uint32_t range, value, cum; - const uint16_t *p; - - /* read s->low,high,value sequentially */ - low = s->low; - high = s->high; - value = s->value; - - range = high - low + 1; /* keep: tmp=low-1 */ - cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); - - p = cum_freq; - - /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ - /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ - /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ - - if ( p[8] * range > cum ) - { - p += 8; - } - /* */ - if ( p[4] * range > cum ) - { - p += 4; - } - /* */ - if ( p[2] * range > cum ) - { - p += 2; - } - /* */ - if ( p[1] * range > cum ) - { - p += 1; - if ( ( p == cum_freq + 15 ) && ( p[1] * range > cum ) ) - { - p += 1; - } - } - - symbol = (uint16_t) ( p - cum_freq ); - - high = low + mul_sbc_14bits_ivas( range, cum_freq[symbol] ) - 1; - low += mul_sbc_14bits_ivas( range, cum_freq[symbol + 1] ); - - for ( ;; ) - { - if ( high >= ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high < ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high + 1; - - value = ( value << 1 ) | get_next_indice_1( st ); - } - - s->low = low; - s->high = high; - s->value = value; - - *res = symbol; - - return; -} - - -/*--------------------------------------------------------------- - * ari_decode_14bits_s27_ext_ivas() - * - * Only for 17 symbols with new extended Tables: - * based on tri's optimization - * based on extended Tables which need less branches for coding - * copied from ari_decode_14bits_s17_ext_ivas, with changes marked - *-------------------------------------------------------------*/ - -void ari_decode_14bits_s27_ext_ivas( - Decoder_State *st, - uint16_t *res, - Tastat *s, - const uint16_t *cum_freq ) -{ - uint16_t symbol; - int32_t low, high; - uint32_t range, value, cum; - uint16_t il, ih, im; - - /* read s->low,high,value sequentially */ - low = s->low; - high = s->high; - value = s->value; - - range = high - low + 1; /* keep: tmp=low-1 */ - cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); - - - /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ - /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ - /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ - - /* begin change when compared with ari_decode_14bits_s17_ext_ivas, - starting with line: if (p[8] * range > cum) { */ - il = 0; - ih = 27; - - /* do a five step binary search, using the interval [il, ih) */ - im = 13; /* (il + ih) >> 1 */ - if ( cum_freq[im] * range > cum ) - { - il = im; - } - else - { - ih = im; - } - - im = ( il + ih ) >> 1; - if ( cum_freq[im] * range > cum ) - { - il = im; - } - else - { - ih = im; - } - - im = ( il + ih ) >> 1; - if ( cum_freq[im] * range > cum ) - { - il = im; - } - else - { - ih = im; - } - - im = ( il + ih ) >> 1; - if ( cum_freq[im] * range > cum ) - { - il = im; - } - else - { - ih = im; - } - - if ( ih - il > 1 ) /* if the interval has more than one symbol */ - { - /* here, only ih == il + 2 is possible, which means two symbols in the interval */ - im = il + 1; /* (il + ih) >> 1 */ - if ( cum_freq[im] * range > cum ) - { - il = im; - } - } - - symbol = il; - /* end change when compared with ari_decode_14bits_s17_ext_ivas, - ending with line: symbol = p - cum_freq; */ - - high = low + mul_sbc_14bits_ivas( range, cum_freq[symbol] ) - 1; - low += mul_sbc_14bits_ivas( range, cum_freq[symbol + 1] ); - - for ( ;; ) - { - if ( high >= ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high < ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high + 1; - - value = ( value << 1 ) | get_next_indice_1( st ); - } - - s->low = low; - s->high = high; - s->value = value; - - *res = symbol; - - return; -} - - -/*--------------------------------------------------------------- - * ari_decode_14bits_bit_ext_ivas() - * - * Only for decoding one bit with uniform probability: - * based on tri's optimization - * copied from ari_decode_14bits_s17_ext_ivas, with changes marked - * the equivalent cum_freq table used is {16384, 8192, 0} - *-------------------------------------------------------------*/ - -void ari_decode_14bits_bit_ext_ivas( - Decoder_State *st, - uint16_t *res, - Tastat *s ) -{ - uint16_t symbol; - int32_t low, high; - uint32_t range, value, cum; - - /* read s->low,high,value sequentially */ - low = s->low; - high = s->high; - value = s->value; - - range = high - low + 1; /* keep: tmp=low-1 */ - cum = ( ( ( (uint32_t) ( value - low + 1 ) ) << stat_bitsnew ) - ( (uint32_t) 1 ) ); - - - /* Note: For each indirect addressing p[i], we assume a tmp pointer init followed by a costfree reading the value */ - /* If the value multiplied by range is greater than cum, the pointer p is set to the tmp pointer */ - /* tmp_p = p+8; if (tmp_p[0]*range>cum) p = tmp_p; */ - - /* begin change when compared with ari_decode_14bits_s17_ext_ivas, - starting with line: if (p[8] * range > cum) { */ - symbol = 0; - - if ( ( range << 13 ) > cum ) - { - symbol = 1; - } - - if ( symbol == 0 ) - { - /* high is unchanged */ - low = low + ( range >> 1 ); - } - else - { - high = low + ( range >> 1 ) - 1; - /* low is unchanged */ - } - /* end change when compared with ari_decode_14bits_s17_ext_ivas, - ending with line: low += mul_sbc_14bits_ivas(range, cum_freq[symbol + 1]); */ - - - for ( ;; ) - { - if ( high >= ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high < ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high + 1; - - value = ( value << 1 ) | get_next_indice_1( st ); - } - - s->low = low; - s->high = high; - s->value = value; - - *res = symbol; - - return; -} - -/*------------------------------------------------------------------------ - * Function: ari_decode_14bits_pow_ivas() - * - * Decode a symbol which follows the exponential distribution. That is, - * symbols are in the following intervals - * - * p(x = 0) = 1 - exp(- 0.5 * base * 2) - * p(x = q>0) = exp(- (q-0.5)*base* 2) - exp(- (q+0.5)*base*2 ) - * - *-------------------------------------------------------------------------*/ - -int16_t ari_decode_14bits_pow_ivas( - const int16_t *ptr, - int16_t bp, - int16_t bits, - int16_t *res, - Tastat *s, - uint16_t base ) -{ - uint16_t symbol; - int32_t low, high; - uint32_t range, value, cum; - Word16 pows[12]; /* "base" to the power of 2, 4, 8,... 2^12 */ - Word16 lowlim, highlim = 0, testval; - int16_t k; - - low = s->low; - high = s->high + 1; - value = s->value; - lowlim = 0; - symbol = 0; - - range = high - low; - - /* the value read from bitstream */ - assert( value >= (uint32_t) low ); - cum = ( ( ( (uint32_t) ( value - low ) ) << stat_bitsnew ) + ( 1 << stat_bitsnew ) - 1 ); - - /* search for the interval where "cum" fits */ - if ( ( ( base >> 1 ) * range ) > cum ) /* below pow-1 */ - { - pows[0] = testval = base; - /* increase exponent until it is smaller than "cum" */ - for ( k = 1; k < 12; k++ ) - { - highlim = testval; - pows[k] = mult_r( pows[k - 1], pows[k - 1] ); - move16(); - testval = mult_r( pows[k], base ); - if ( ( ( testval >> 1 ) * range ) <= cum ) /* found! big range is [lowlim,testval], (now narrow it down) */ - { - lowlim = testval; - k--; - symbol = 1 << k; - break; - } - } - assert( k < 12 ); /* maximum 2^10-1*/ - /* narrow the range down */ - for ( k--; k > 0; k-- ) - { - testval = mult_r( highlim, pows[k] ); - if ( ( ( testval >> 1 ) * range ) <= cum ) - { - lowlim = testval; - symbol -= 1 << ( k - 1 ); - } - else - { - highlim = testval; - } - } - highlim >>= 1; - lowlim >>= 1; - } - else /* trivial case, above pow-1, that is, first symbol */ - { - symbol = 0; - lowlim = base >> 1; - highlim = 16384; - } - - - high = low + mul_sbc_14bits_ivas( range, highlim ); - - low += mul_sbc_14bits_ivas( range, lowlim ); - - /*ptr init for ptr*/ - for ( ; bp < bits; ) - { - if ( high > ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high <= ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high; - - assert( abs( ptr[bp] ) <= 1 && "AC expects reading binary values!!!" ); - - value = ( value << 1 ) | ptr[bp++]; - } - - if ( !( bp != bits || !( ( s->low == low ) && ( s->high == high ) && ( s->value == value ) ) ) ) - { - /* This should not happen except of bit errors. */ - s->high = s->low = 0; - *res = 0; - return -1; - } - - s->low = low; - s->high = high - 1; - s->value = value; - - *res = symbol; - - return bp; -} - - -/*------------------------------------------------------------------------ - * Function: ari_decode_14bits_sign_ivas() - * - * Decode a sign with equal probabilities. - *-------------------------------------------------------------------------*/ - -int16_t ari_decode_14bits_sign_ivas( - const int16_t *ptr, - int16_t bp, - int16_t bits, - uint16_t *res, - Tastat *s ) -{ - uint16_t symbol; - int32_t low, high; - uint32_t range, value, cum; - - low = s->low; - high = s->high + 1; - value = s->value; - - range = high - low; - - if ( bp < bits ) - { - assert( value >= (uint32_t) low ); - cum = ( ( ( (uint32_t) ( value - low ) ) << stat_bitsnew ) + ( 1 << stat_bitsnew ) - 1 ); - if ( 8192 * range > cum ) - { - symbol = 2; - high = low + ( range >> 1 ); - } - else - { - symbol = 1; - low += range >> 1; - } - - /*ptr init for ptr*/ - for ( ; bp < bits; ) - { - if ( high > ari_q2new ) - { - if ( low >= ari_q2new ) - { - value -= ari_q2new; - low -= ari_q2new; - high -= ari_q2new; - } - else - { - if ( low >= ari_q1new && high <= ari_q3new ) - { - value -= ari_q1new; - low -= ari_q1new; - high -= ari_q1new; - } - else - { - break; - } - } - } - low += low; - high += high; - - assert( abs( ptr[bp] ) <= 1 && "AC expects reading binary values!!!" ); - - value = ( value << 1 ) | ptr[bp++]; - } - } - else - { - cum = value - low; - range >>= 1; - if ( range > cum ) - { - symbol = 2; - high = low + range; - } - else - { - symbol = 1; - low += range; - } - } - - s->low = low; - s->high = high - 1; - s->value = value; - - *res = symbol; - - return bp; -} -#endif diff --git a/lib_dec/ari_hm_dec.c b/lib_dec/ari_hm_dec.c index 1611f0b91..f2bd6f46c 100644 --- a/lib_dec/ari_hm_dec.c +++ b/lib_dec/ari_hm_dec.c @@ -44,41 +44,7 @@ #include "rom_com.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * DecodeIndex() - * - * - *-------------------------------------------------------------------*/ - -int16_t DecodeIndex( - Decoder_State *st, - const int16_t Bandwidth, - int16_t *PeriodicityIndex ) -{ - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - if ( ( hTcxDec->tcx_hm_LtpPitchLag > 0 ) && ( hTcxLtpDec->tcxltp_gain_float > kLtpHmGainThr_FLT ) ) - { - int16_t LtpPitchIndex = ( ( hTcxDec->tcx_hm_LtpPitchLag + ( 1 << ( kLtpHmFractionalResolution - 1 ) ) ) >> kLtpHmFractionalResolution ) - 2; - *PeriodicityIndex = kLtpHmFlag; - *PeriodicityIndex |= get_next_indice( st, NumRatioBits[Bandwidth][LtpPitchIndex] ); - ++*PeriodicityIndex; - *PeriodicityIndex |= LtpPitchIndex << 9; - - return NumRatioBits[Bandwidth][LtpPitchIndex]; - } - else - { - *PeriodicityIndex = get_next_indice( st, 8 ); - - return 8; - } -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 DecodeIndex_fx( Decoder_State *st, @@ -115,36 +81,12 @@ DecodeIndex_fx( return 8; } } -#endif /*-------------------------------------------------------------------* * tcx_hm_dequantize_gain() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t tcx_hm_dequantize_gain( - const int16_t coder_type, /* i : GC/VC coder type */ - const int16_t gain_idx, /* i : quantization index */ - Word16 *gain /* o : dequantized gain (Q11) */ -) -{ - assert( 0 <= coder_type && coder_type <= UNVOICED ); - - /* safety check in case of bit errors */ - if ( !( 0 <= gain_idx && gain_idx < ( 1 << kTcxHmNumGainBits ) ) ) - { - *gain = 0; - move16(); - return 1; - } - - *gain = qGains[coder_type][gain_idx]; - move16(); - - return 0; -} -#else static Word16 tcx_hm_dequantize_gain_fx( Word16 coder_type, /* i : coder type Q0 */ @@ -169,71 +111,12 @@ static Word16 tcx_hm_dequantize_gain_fx( return 0; } -#endif /*-------------------------------------------------------------------* * tcx_hm_decode_ivas() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tcx_hm_decode_ivas( - const int16_t L_frame, /* i : number of spectral lines */ - Word32 env[], /* i/o: envelope shape (Q16) */ - const int16_t targetBits, /* i : target bit budget */ - const int16_t coder_type, /* i : GC/VC coder type */ - const int16_t prm_hm[], /* i : HM parameters */ - const int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ - int16_t *hm_bits /* o : bit consumption */ -) -{ - int16_t lag; - int32_t tmpL; - int16_t NumTargetBits, fract_res; - Word16 p[2 * kTcxHmParabolaHalfWidth + 1], gain; - - *hm_bits = 0; - - if ( !( coder_type == VOICED || coder_type == GENERIC ) ) - { - /* A bit error was encountered */ - *hm_bits = -1; - return; - } - - NumTargetBits = CountIndexBits_ivas( L_frame >= 256, prm_hm[1] ) + targetBits; - - if ( coder_type == VOICED ) - { - NumTargetBits += kTcxHmNumGainBits; - } - *hm_bits = NumTargetBits - targetBits + 1; - - /* Convert the index to lag */ - UnmapIndex_ivas( prm_hm[1], L_frame >= 256, LtpPitchLag, ( NumTargetBits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL ); - lag = (int16_t) tmpL; - - /* Render the harmonic model */ - if ( tcx_hm_render_ivas( lag, fract_res, p ) ) - { - /* A bit error was encountered */ - *hm_bits = -1; - return; - } - - /* Dequantize gain */ - - if ( tcx_hm_dequantize_gain( coder_type == VOICED, prm_hm[2], &gain ) ) - { - /* A bit error was encountered */ - *hm_bits = -1; - return; - } - tcx_hm_modify_envelope_ivas( gain, lag, fract_res, p, env, L_frame ); - - return; -} -#else void tcx_hm_decode( const Word16 L_frame, /* i : number of spectral lines */ Word32 env[], /* i/o: envelope shape (Q16) */ @@ -307,4 +190,3 @@ void tcx_hm_decode( return; } -#endif diff --git a/lib_dec/arith_coder_dec.c b/lib_dec/arith_coder_dec.c index d144323f0..a9579d5d2 100644 --- a/lib_dec/arith_coder_dec.c +++ b/lib_dec/arith_coder_dec.c @@ -52,72 +52,7 @@ *-------------------------------------------------------*/ /*! r: number of bits consumed */ -#ifndef IVAS_FLOAT_FIXED -static int16_t tcx_arith_decode( - const int16_t L_frame, /* i : number of spectral lines */ - const Word16 envelope[], /* i : scaled envelope (Q15-e) */ - Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ - const int16_t target_bits, /* i : target bit budget */ - const int16_t prm[], /* i : bitstream parameters */ - float q_spectrum[] /* o : scalar quantized spectrum */ -) -{ - int16_t bp, k, q; - uint16_t s; - Tastat as; - uint16_t exp_k; - Word16 tmp; - - bp = ari_start_decoding_14bits_prm_ivas( prm, 0, &as ); - tmp = sub( envelope_e, 1 ); - - for ( k = 0; k < L_frame; ++k ) - { - if ( envelope[k] == 0 ) /* safety check in case of bit errors */ - { - set_zero( q_spectrum, L_frame ); - - return -1; - } - else - { - exp_k = expfp_evs( negate( envelope[k] ), tmp ); - } - - /* decode line magnitude */ - bp = ari_decode_14bits_pow_ivas( prm, bp, target_bits, &q, &as, exp_k ); - - if ( q ) - { - /* line is non-zero, decode sign */ - bp = ari_decode_14bits_sign_ivas( prm, bp, target_bits, &s, &as ); - q_spectrum[k] = (float) q * ( 3 - 2 * s ); - } - else - { - /* line is zero, no sign needed */ - q_spectrum[k] = 0.0f; - } - if ( as.high <= as.low ) - { - if ( bp < target_bits ) /* safety check in case of bit errors */ - { - bp = -1; - } - break; /* no bits left, so exit loop */ - } - } - for ( ; k < L_frame; k++ ) - { - q_spectrum[k] = 0.0f; - } - - return bp; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static Word16 tcx_arith_decode_ivas_fx( const Word16 L_frame, /* i : number of spectral lines */ const Word16 envelope[], /* i : scaled envelope (Q15-envelope_e) */ @@ -186,115 +121,13 @@ static Word16 tcx_arith_decode_ivas_fx( return bp; } -#endif /*-------------------------------------------------------* * tcx_arith_decode_envelope() * * *-------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tcx_arith_decode_envelope( - Decoder_State *st, /* i/o: coder state */ - float q_spectrum[], /* o : quantised MDCT coefficients */ - const int16_t L_frame, /* i : frame or MDCT length */ - int16_t L_spec, /* i : length w/o BW limitation */ - const Word16 A_ind[], /* i : quantised LPC coefficients */ - const int16_t target_bits, /* i : number of available bits */ - const int16_t prm[], /* i : bitstream parameters */ - const int16_t use_hm, /* i : use HM in current frame? */ - const int16_t prm_hm[], /* i : HM parameter area */ - int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a*/ - int16_t *arith_bits, /* o : bits used for ari. coding */ - int16_t *signaling_bits, /* o : bits used for signaling */ - const int16_t low_complexity /* i : low-complexity flag */ -) -{ - Word32 env[N_MAX_ARI]; /* unscaled envelope (Q16) */ - Word16 *envelope; /* scaled envelope (Q15-e) */ - Word16 envelope_e; - int16_t L_spec_core; - TCX_CONFIG_HANDLE hTcxCfg; - TCX_DEC_HANDLE hTcxDec; - int16_t k; - float gamma_w, gamma_uw; - int16_t hm_bits; - - if ( L_spec > N_MAX_ARI || ( st->element_mode == EVS_MONO && ( target_bits > ( ACELP_13k20 / FRAMES_PER_SEC ) ) ) || ( st->element_mode == IVAS_SCE && ( st->bits_frame_nominal > ( LPC_SHAPED_ARI_MAX_RATE / FRAMES_PER_SEC ) ) ) || ( st->element_mode > IVAS_SCE && ( st->bits_frame_nominal > ( LPC_SHAPED_ARI_MAX_RATE_CPE / FRAMES_PER_SEC ) ) ) || ( target_bits <= 0 ) ) - { - /* this could happen in case of bit errors */ - st->BER_detect = 1; - L_spec = N_MAX_ARI; - *signaling_bits = 0; - *arith_bits = 0; - set_zero( q_spectrum, L_frame ); - - return; - } - - hTcxCfg = st->hTcxCfg; - hTcxDec = st->hTcxDec; - *signaling_bits = 0; - - assert( hTcxDec->enableTcxLpc ); - gamma_w = 1.0f; - gamma_uw = 1.0f / st->gamma_float; - -#define WMC_TOOL_SKIP - tcx_arith_render_envelope_ivas( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac_flt ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); -#undef WMC_TOOL_SKIP - - if ( use_hm ) - { - if ( prm_hm[0] ) - { - tcx_hm_decode_ivas( L_spec, env, target_bits, st->coder_type, prm_hm, tcxltp_pitch, &hm_bits ); - - if ( hm_bits < 0 ) - { - st->BER_detect = 1; - *signaling_bits = 0; - *arith_bits = 0; - set_zero( q_spectrum, L_frame ); - - return; - } - } - else - { - hm_bits = 1; - } - *signaling_bits += hm_bits; - } - - L_spec_core = L_spec; - if ( st->igf ) - { - L_spec_core = min( L_spec_core, st->hIGFDec->infoIGFStartLine ); - } - - envelope = (Word16 *) env; - tcx_arith_scale_envelope_ivas( L_spec, L_spec_core, env, target_bits, low_complexity, envelope, &envelope_e ); - - *arith_bits = tcx_arith_decode( L_spec, envelope, envelope_e, target_bits, prm, q_spectrum ); - - /* safety check in case of bit errors */ - if ( *arith_bits < 0 ) - { - st->BER_detect = 1; - set_zero( q_spectrum, L_frame ); - } - - for ( k = L_spec; k < L_frame; ++k ) - { - q_spectrum[k] = 0; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void tcx_arith_decode_envelope_ivas_fx( Decoder_State *st, /* i/o: coder state */ Word32 q_spectrum[], /* o : quantised MDCT coefficients Q(31-q_spectrum_e) */ @@ -415,4 +248,3 @@ void tcx_arith_decode_envelope_ivas_fx( return; } -#endif diff --git a/lib_dec/arith_coder_dec_fx.c b/lib_dec/arith_coder_dec_fx.c index 61bb24b66..68736867d 100644 --- a/lib_dec/arith_coder_dec_fx.c +++ b/lib_dec/arith_coder_dec_fx.c @@ -10,7 +10,6 @@ #include "prot_fx.h" /* Returns: number of bits consumed */ -#ifdef IVAS_FLOAT_FIXED static Word16 tcx_arith_decode_fx( Word16 L_frame, /* i: number of spectral lines Q0 */ const Word16 envelope[], /* i: scaled envelope Q15-e */ @@ -96,9 +95,7 @@ static Word16 tcx_arith_decode_fx( return bp; } -#endif -#ifdef IVAS_FLOAT_FIXED void tcx_arith_decode_envelope_fx( Word32 q_spectrum[], /* o: quantised MDCT coefficients Q31-e */ Word16 *q_spectrum_e, /* o: MDCT exponent Q0 */ @@ -220,4 +217,3 @@ void tcx_arith_decode_envelope_fx( set32_fx( q_spectrum + L_spec, 0, sub( L_frame, L_spec ) ); } -#endif diff --git a/lib_dec/avq_dec.c b/lib_dec/avq_dec.c index 8fc098d2d..27bb2c324 100644 --- a/lib_dec/avq_dec.c +++ b/lib_dec/avq_dec.c @@ -40,387 +40,3 @@ #include "cnst.h" #include "wmc_auto.h" #include - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local prototypes - *-------------------------------------------------------------------*/ - -static void read_cv( Decoder_State *st, uint16_t *I, int16_t *kv, int16_t nq, int16_t *nbits ); - -/*-----------------------------------------------------------------* - * AVQ_demuxdec() - * - * Demultiplex and decode subvectors using - * split algebraic vector dequantizer based on RE8 latice. - *-----------------------------------------------------------------*/ - -void AVQ_demuxdec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t xriq[], /* o : decoded subvectors [0..8*Nsv-1]*/ - int16_t *nb_bits, /* i/o: number of allocated bits */ - const int16_t Nsv, /* i : number of subvectors */ - int16_t nq[], /* i/o: AVQ nq index */ - int16_t avq_bit_sFlag, /* i : flag for AVQ bit saving solution */ - int16_t trgtSvPos /* i : target SV for AVQ bit savings */ -) -{ - int16_t i, j, bits; - uint16_t I[NSV_MAX]; - int16_t code[8]; - int16_t *kv; - int16_t nq_est, unused_bits_idx; - int16_t bitsMod; - int16_t underflow; - int16_t unusedbitsFlag; - int16_t svOrder[NSV_MAX], k, nullVec, dummy_bits; - - kv = xriq; /* reuse vector to save memory */ - bits = *nb_bits; - bitsMod = 0; - underflow = 0; - unusedbitsFlag = 0; - nullVec = 0; - dummy_bits = 0; - svOrder[Nsv - 1] = trgtSvPos; - svOrder[0] = 0; - svOrder[1] = 1; - i = 2; - j = i; - if ( avq_bit_sFlag == 2 ) - { - j = i + 1; - } - - while ( i < Nsv - 1 ) - { - svOrder[i] = j; - i++; - j++; - } - - for ( i = 0; i < NSV_MAX; i++ ) - { - I[i] = (uint16_t) -1; - } - - for ( i = 0; i < Nsv; i++ ) - { - k = svOrder[i]; - if ( avq_bit_sFlag == 2 && bits % 5 == 4 && bits > 8 && bits < 30 && k >= trgtSvPos && i < Nsv - 1 ) - { - ordr_esti( Nsv - i, &trgtSvPos, &svOrder[i], Nsv ); - k = svOrder[i]; - avq_bit_sFlag = 1; - } - - if ( k == trgtSvPos && avq_bit_sFlag > 0 ) - { - if ( ( *nb_bits - bits ) == 7 || bits < BIT_SAVING_LOW_THR || bits >= BIT_SAVING_HIGH_THR ) - { - avq_bit_sFlag = 0; - } - else - { - break; - } - } - - nq[k] = 0; /* initialization and also forced if the budget is exceeded */ - - if ( bits > 8 ) - { - /* read the unary code including the stop bit for nq[i] */ - nq[k] = -1; - do - { - ( nq[k] )++; - - if ( 5 * nq[k] + 4 == bits ) - { - break; - } - } while ( get_next_indice_1( st ) ); - - if ( 5 * nq[k] + 4 == bits ) /* check the overflow */ - { - bits++; /* overflow stop bit */ - } - - /* check for potential bit errors */ - if ( nq[k] > NB_SPHERE ) - { - st->BER_detect = 1; - set_s( xriq, 0, Nsv * 8 ); - set_s( nq, 0, Nsv ); - *nb_bits = 0; - - return; - } - - bits -= nq[k]; - bits--; /* count the stop bit */ - - if ( nq[k] > 0 ) - { - nq[k]++; - } - - /* read codebook indices (rank I and event. Voronoi index kv) */ - read_cv( st, &I[k], &kv[k * 8], nq[k], &bits ); - } - } /* for */ - - /* Bit Saving Solution */ - if ( avq_bit_sFlag > 0 && bits > 8 ) - { - i = svOrder[Nsv - 1]; - nq[i] = 0; - bitsMod = bits % 5; - if ( i != Nsv - 1 ) - { - nullVec = 0; - for ( j = i; j < Nsv - 1; j++ ) - { - if ( nq[svOrder[j]] == 0 ) - { - nullVec++; - } - } - nq_est = bits / 5; - if ( ( bitsMod > 0 || ( nullVec == 4 && nq_est == 5 ) ) && bitsMod != 4 && ( bits + nullVec ) >= 5 * nq_est + 4 && nq[svOrder[Nsv - 2]] == 0 ) /* dummy bits */ - { - dummy_bits = 5 - bitsMod; - bits = bits + dummy_bits; /* add dummy bits */ - bitsMod = 0; - } - else if ( nq_est > 4 && ( ( bitsMod == 0 && nullVec > 3 && nullVec < 6 ) || ( bitsMod == 4 && nullVec == 5 ) ) && nq[svOrder[Nsv - 2]] == 0 ) /* wasted bits 4, 5 for nq 6,7..*/ - { - underflow = 0; - if ( ( bitsMod + nullVec ) % 5 != 0 ) - { - underflow = 1; - } - dummy_bits = nullVec + underflow; - bits = bits + dummy_bits; /* add dummy bits */ - bitsMod = 0; - } - } - underflow = 1; - if ( bitsMod != 4 ) - { - underflow = 0; - bits -= bitsMod; - } - bits += underflow; - - /* read the unary code for unused bit*/ - unused_bits_idx = -1; - do - { - ( unused_bits_idx )++; - if ( 5 * unused_bits_idx + 4 == bits - 1 ) - { - break; - } - } while ( get_next_indice_1( st ) ); - - unusedbitsFlag = 0; - - if ( dummy_bits == 0 ) - { - if ( unused_bits_idx == 0 && bits > BIT_SAVING_LOW_THR ) - { - unusedbitsFlag = 1; - } - else if ( unused_bits_idx == 1 && bits > BIT_SAVING_LOW_THR ) - { - unusedbitsFlag = -1; - } - } - - /*Compute AVQ code book number from unused Bits */ - nq_est = (int16_t) ceil( 0.2f * ( bits - 5 * ( unusedbitsFlag + unused_bits_idx ) ) ); - - if ( nq_est == 1 ) - { - nq_est = 0; - } - bits -= underflow; - - bits -= unused_bits_idx; - - if ( nq_est != 0 ) - { - bits--; - } - - nq[i] = nq_est; - /* read codebook indices (rank I and event. Voronoi index kv) */ - read_cv( st, &I[i], &kv[i * 8], nq[i], &bits ); - - bits -= dummy_bits; - - if ( bitsMod != 4 ) - { - bits += bitsMod; - } - } - - /* decode all subvectors */ - for ( i = 0; i < Nsv; i++ ) - { - /* multi-rate RE8 decoder */ - re8_dec( nq[i], I[i], &kv[8 * i], code ); - - /* write decoded RE8 vector to decoded subvector #i */ - for ( j = 0; j < 8; j++ ) - { - xriq[i * 8 + j] = code[j]; - } - } - - *nb_bits = bits; - - return; -} - -/*-----------------------------------------------------------------* - * AVQ_dec_lpc_ivas() - * - * Demultiplex and decode subvectors for LPC dequantization - * using split algebraic vector dequantizer - *-----------------------------------------------------------------*/ - -void AVQ_dec_lpc_ivas( - const int16_t indx[], /* i : index[] (4 bits per words) */ - int16_t nvecq[], /* o : vector quantized */ - const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ -) -{ - int16_t i, l, n, nq, nk, pos, ival, c[8], kv[8]; - int32_t I; - - /* last index word */ - pos = Nsv - 1; - - for ( l = 0; l < Nsv; l++ ) - { - pos += indx[l]; - } - - /* decode all subvectors */ - for ( l = Nsv - 1; l >= 0; l-- ) - { - nq = indx[l]; /* quantizer number (0,2,3..n) */ - - nk = 0; - n = nq; - - if ( nq > 4 ) - { - nk = ( nq - 3 ) >> 1; - n = nq - nk * 2; - } - - /* read n groups of 4-bit for Voronoi index (k[]) */ - for ( i = 0; i < 8; i++ ) - { - kv[i] = 0; - } - - while ( nk-- > 0 ) - { - ival = ( indx[pos--] & 0x0F ); - ival <<= 4; - ival += ( indx[pos--] & 0x0F ); - - for ( i = 7; i >= 0; i-- ) - { - kv[i] <<= 1; - kv[i] += ( ival & 0x01 ); - ival >>= 1; - } - } - - /* read n groups of 4-bit for base codebook index (I) */ - I = 0; - while ( n-- > 0 ) - { - I <<= 4; - I += ( indx[pos--] & 0x0F ); - } - - /* multi-rate RE8 decoder */ - re8_dec( nq, (int16_t) I, kv, c ); - - /* write decoded RE8 vector */ - for ( i = 0; i < 8; i++ ) - { - nvecq[( l * 8 ) + i] = c[i]; - } - } - - return; -} - - -/*-----------------------------------------------------------------* - * read_cv() - * - * read codebook indices (rank I and event. Voronoi index kv) - *-----------------------------------------------------------------*/ - - -static void read_cv( - Decoder_State *st, /* i/o: decoder state structure */ - uint16_t *I, /* o : rank I code book index */ - int16_t *kv, /* o : Voronoi index kv */ - int16_t nq, /* i : AVQ nq index */ - int16_t *nbits /* i/o: bits available */ -) - -{ - int16_t j, bits, order_v; - - bits = *nbits; - - /* read codebook indices (rank I and event. Voronoi index kv) */ - if ( nq == 0 ) /* Q0 */ - { - /* nothing to read */ - } - else if ( nq < 5 ) /* Q2, Q3, Q4 */ - { - *I = get_next_indice( st, 4 * nq ); - bits -= ( 4 * nq ); - } - else if ( nq % 2 == 0 ) /* Q4 + Voronoi extensions r=1,2,3,... */ - { - *I = get_next_indice( st, 4 * 4 ); - bits -= 4 * 4; - order_v = (int16_t) ( nq / 2 ) - 2; - - for ( j = 0; j < 8; j++ ) - { - kv[j] = get_next_indice( st, order_v ); - } - bits -= 8 * order_v; - } - else /* Q3 + Voronoi extensions r=1,2,3,... */ - { - *I = get_next_indice( st, 4 * 3 ); - bits -= 4 * 3; - order_v = (int16_t) ( nq / 2 ) - 1; - - for ( j = 0; j < 8; j++ ) - { - kv[j] = get_next_indice( st, order_v ); - } - bits -= 8 * order_v; - } - *nbits = bits; - - return; -} -#endif diff --git a/lib_dec/avq_dec_fx.c b/lib_dec/avq_dec_fx.c index a2d6f1d8b..a13678a97 100644 --- a/lib_dec/avq_dec_fx.c +++ b/lib_dec/avq_dec_fx.c @@ -14,9 +14,7 @@ * Local prototypes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void read_cv_fx( Decoder_State *st, UWord16 *I, Word16 *kv, Word16 nq, Word16 *nbits ); -#endif /*-----------------------------------------------------------------* * AVQ_demuxdec() @@ -25,7 +23,6 @@ static void read_cv_fx( Decoder_State *st, UWord16 *I, Word16 *kv, Word16 nq, Wo * split algebraic vector dequantizer based on RE8 latice. *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void AVQ_demuxdec_fx( Decoder_State *st, /* i/o: decoder state structure */ Word16 xriq[], /* o : decoded subvectors [0..8*Nsv-1] Q0*/ @@ -328,7 +325,6 @@ void AVQ_demuxdec_fx( return; } -#endif /*-----------------------------------------------------------------* @@ -338,7 +334,6 @@ void AVQ_demuxdec_fx( * using split algebraic vector dequantizer *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void AVQ_dec_lpc( Word16 *indx, /* input: index[] (4 bits per words) Q0*/ Word16 *nvecq, /* output: vector quantized Q0*/ @@ -420,7 +415,6 @@ void AVQ_dec_lpc( return; } -#endif /*-----------------------------------------------------------------* * read_cv_fx() @@ -428,7 +422,6 @@ void AVQ_dec_lpc( * read codebook indices (rank I and event. Voronoi index kv) *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void read_cv_fx( Decoder_State *st, /* i/o: decoder state structure */ UWord16 *I, /* o : rank I code book index Q0*/ @@ -487,4 +480,3 @@ static void read_cv_fx( return; } -#endif diff --git a/lib_dec/bass_psfilter.c b/lib_dec/bass_psfilter.c index f32e8db9d..a33149fff 100644 --- a/lib_dec/bass_psfilter.c +++ b/lib_dec/bass_psfilter.c @@ -45,18 +45,12 @@ #include "rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* * Local constants *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define K_PC_DEC -0.0357f /* <45, 17> */ -#define C_PC_DEC 1.6071f -#endif #define NBPSF_L_EXTRA 120 #define BPF_STOP_STOPBAND_16 16 @@ -68,336 +62,11 @@ * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t Pit_track( const float syn[], int16_t T ); - -/*---------------------------------------------------------------------* - * bass_psfilter_init() - * - * Initialisation of postfiltering variables - *---------------------------------------------------------------------*/ -void bass_psfilter_init( - BPF_DEC_HANDLE hBPF /* o : BPF data handle */ -) -{ - /* post-filter memories */ - hBPF->pst_mem_deemp_err = 0.0f; - hBPF->pst_lp_ener = 0.0f; - set_f( hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); - - set_s( hBPF->Track_on_hist, 0, L_TRACK_HIST ); - set_s( hBPF->vibrato_hist, 0, L_TRACK_HIST ); - set_f( hBPF->mem_mean_pit, 80, L_TRACK_HIST ); - hBPF->psf_att = 1.0f; - - return; -} -#endif /*---------------------------------------------------------------------* * bass_psfilter() * * Perform low-frequency postfiltering *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void bass_psfilter( - BPF_DEC_HANDLE hBPF, /* o : BPF data handle */ - const int16_t Opt_AMR_WB, /* i : AMR-WB IO flag */ - const float synth_in[], /* i : input synthesis (at 16kHz) */ - const int16_t L_frame, /* i : length of the last frame */ - const float pitch_buf[], /* i : pitch for every subfr [0,1,2,3] */ - const int16_t bpf_off, /* i : do not use BPF when set to 1 */ - float v_stab, /* i : stability factor */ - float *v_stab_smooth, /* i/o: smoothed stability factor */ - const int16_t coder_type, /* i : coder_type */ - float bpf_noise_buf[] /* o : BPF error signal (at int_fs) */ -) -{ - int16_t i, i_subfr, T; - float gain, alpha, corr, ener; - float syn_buf[NBPSF_PIT_MAX + L_FRAME16k + NBPSF_PIT_MAX], *syn; - float syn2_buf[L_FRAME16k], *syn2; - float err[L_HALFR16k]; - int16_t T_sf[NB_SUBFR16k]; - int16_t nb_subfr, T_update; - float delta_v_stab; - int16_t dist_pit_diff, idx_pit_min, idx_pit_max, vibrato, Track_on; - float loc_pit_max, loc_pit_min, diff_pit; - float TrackOnR, vibratR, alp_tmp; - int16_t subfr_len; - int16_t nbpsf_pit_max; - - subfr_len = ( L_frame == L_FRAME8k ) ? STEREO_DFT_L_SUBFR_8k : L_SUBFR; - nbpsf_pit_max = ( L_frame == L_FRAME8k ) ? STEREO_DFT_NBPSF_PIT_MAX_8k : NBPSF_PIT_MAX; - - Track_on = 0; - T_update = 01; - vibrato = 0; - nb_subfr = L_frame / subfr_len; - - /*------------------------------------------------------- - * Initialize pointers to various synthesis buffers - * - * |--------------------syn_buf--------------------------------| - * |-----old_syn-----|-------synth_in--------|----extrapol---- | - * |--NBPSF_PIT_MAX--| sf1 | sf2 | sf3 | sf4 |--NBPSF_PIT_MAX--| - * |------syn2_buf---------| - * |------L_frame----------| - * |----bpf_noise_buf------| - * - *-------------------------------------------------------*/ - - mvr2r( hBPF->pst_old_syn, syn_buf, nbpsf_pit_max ); - mvr2r( synth_in, syn_buf + nbpsf_pit_max, L_frame ); - - if ( !( pitch_buf == NULL || bpf_off ) ) - { - for ( i = L_TRACK_HIST - 1; i > 0; i-- ) - { - hBPF->mem_mean_pit[i] = hBPF->mem_mean_pit[i - 1]; - } - - hBPF->mem_mean_pit[i] = mean( pitch_buf, nb_subfr ); - } - - idx_pit_min = minimum( hBPF->mem_mean_pit, L_TRACK_HIST, &loc_pit_min ); - idx_pit_max = maximum( hBPF->mem_mean_pit, L_TRACK_HIST, &loc_pit_max ); - - dist_pit_diff = (int16_t) abs( idx_pit_max - idx_pit_min ); - diff_pit = loc_pit_max - loc_pit_min; - - if ( L_frame == L_FRAME16k || L_frame == L_FRAME8k ) - { - diff_pit *= 0.8f; - } - - if ( coder_type != INACTIVE && diff_pit >= 2.0f && diff_pit < 10 && dist_pit_diff >= 3 ) - { - vibrato = 1; - } - - TrackOnR = (float) sum_s( hBPF->Track_on_hist, L_TRACK_HIST ) / L_TRACK_HIST; - vibratR = (float) sum_s( hBPF->vibrato_hist, L_TRACK_HIST ); - alp_tmp = 1.0f - TrackOnR; - - if ( vibrato ) - { - vibratR = vibratR * vibratR * -0.009f + 1.0f; - alp_tmp *= vibratR; - } - - alp_tmp = max( 0.1f, alp_tmp ); - - if ( alp_tmp > hBPF->psf_att ) - { - hBPF->psf_att = 0.05f * alp_tmp + 0.95f * hBPF->psf_att; - } - else - { - hBPF->psf_att = 0.4f * alp_tmp + 0.6f * hBPF->psf_att; - } - - if ( pitch_buf == NULL || bpf_off ) - { - /* do not use BPF for HQ core */ - T_update = L_frame == L_FRAME8k ? 40 : 80; - set_s( T_sf, 0, 5 ); - syn = &syn_buf[nbpsf_pit_max + L_frame]; - for ( i = 0; i < nbpsf_pit_max; i++ ) - { - syn[i] = syn[i - T_update]; - } - } - else - { - /* extrapolation of synth_in */ - for ( i = 0; i < nb_subfr; i++ ) - { - /* copy subframe pitch values [1,2,3,4] of the current frame */ - T_sf[i] = ( L_frame == L_FRAME8k ) ? (int16_t) ( pitch_buf[i] / 2 + 0.5f ) : (int16_t) ( pitch_buf[i] + 0.5f ); - - if ( L_frame == L_FRAME16k || L_frame == L_FRAME8k ) - { - /* Safety check, should be very rare */ - if ( T_sf[i] > nbpsf_pit_max ) - { - T_sf[i] = nbpsf_pit_max; - } - } - else - { - if ( T_sf[i] > PIT_MAX ) - { - T_sf[i] = PIT_MAX; - } - } - } - - T = T_sf[nb_subfr - 1]; - syn = &syn_buf[nbpsf_pit_max + L_frame]; - for ( i = 0; i < nbpsf_pit_max; i++ ) - { - syn[i] = syn[i - T]; - } - } - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += subfr_len ) - { - T = T_sf[i_subfr / subfr_len]; - - /* Pitch limitation already done in the previous loop */ - syn = &syn_buf[nbpsf_pit_max + i_subfr]; - syn2 = &syn2_buf[i_subfr]; - - if ( T != 0 ) - { - if ( T >= PIT_MIN && Opt_AMR_WB ) - { - T = Pit_track( syn, T ); - - if ( T != T_sf[i_subfr / L_SUBFR] ) - { - Track_on = 1; - } - } - - /* symetric pitch prediction : phase is opposite between harmonic */ - for ( i = 0; i < subfr_len; i++ ) - { - syn2[i] = 0.5f * ( syn[i - T] + syn[i + T] ); - } - - /* gain of prediction */ - corr = 0.0001f; - for ( i = 0; i < subfr_len; i++ ) - { - corr += syn[i] * syn2[i]; - } - - ener = 0.0001f; - for ( i = 0; i < subfr_len; i++ ) - { - ener += syn2[i] * syn2[i]; - } - gain = corr / ener; - - /* error of prediction for noise estimator */ - for ( i = 0; i < subfr_len; i++ ) - { - err[i] = syn[i] - ( gain * syn2[i] ); - } - - /* alpha = post-filtering factor (0=OFF, 1=100%) */ - ener = (float) ( ener + pow( 10.0, 0.1 * hBPF->pst_lp_ener ) ); /* limit alpha (post-filtering) when noise is high */ - alpha = corr / ener; - if ( alpha > 0.5f ) - { - alpha = 0.5f; - } - - alpha *= ( hBPF->psf_att ); - if ( alpha > 0.3f && Track_on ) - { - alpha = 0.3f; - } - else if ( alpha > 0.4f && vibrato ) - { - alpha = 0.4f; - } - - if ( alpha < 0.0f ) - { - alpha = 0.0f; - } - - *v_stab_smooth = 0.8f * v_stab + 0.2f * ( *v_stab_smooth ); - delta_v_stab = (float) fabs( *v_stab_smooth - v_stab ); - v_stab = (float) pow( v_stab, 0.5f ); - alpha = ( 1.0f + 0.15f * v_stab - 2.0f * delta_v_stab ) * alpha; - - for ( i = 0; i < subfr_len; i++ ) - { - syn2[i] = alpha * ( syn[i] - syn2[i] ); - } - } - - else - { - /* symetric pitch prediction : phase is opposite between harmonic */ - for ( i = 0; i < subfr_len; i++ ) - { - syn2[i] = 0.5f * ( syn[i - T_update] + syn[i + T_update] ); - } - - if ( coder_type == AUDIO ) /* GSC mode without temporal component */ - { - Track_on = 1; - } - else - { - Track_on = 0; - } - - /* gain of prediction */ - corr = 0.0001f; - for ( i = 0; i < subfr_len; i++ ) - { - corr += syn[i] * syn2[i]; - } - ener = 0.0001f; - for ( i = 0; i < subfr_len; i++ ) - { - ener += syn2[i] * syn2[i]; - } - - gain = corr / ener; - - /* error of prediction for noise estimator */ - for ( i = 0; i < subfr_len; i++ ) - { - err[i] = syn[i] - ( gain * syn2[i] ); - } - - /* alpha = post-filtering factor (0=OFF, 1=100%) */ - alpha = 0.0f; - - *v_stab_smooth = 0.8f * v_stab + 0.2f * ( *v_stab_smooth ); - - set_f( syn2, 0.0f, subfr_len ); - } - - /* low-frequency noise estimator (lp_ener is average in dB) */ - deemph( err, 0.9f, subfr_len, &( hBPF->pst_mem_deemp_err ) ); /* +20dB at 50Hz */ - - ener = 0.0001f; - for ( i = 0; i < subfr_len; i++ ) - { - ener += err[i] * err[i]; - } - ener = (float) ( 10.0 * log10( ener ) ); - hBPF->pst_lp_ener = (float) ( 0.99f * hBPF->pst_lp_ener + 0.01f * ener ); - - /* just write out the error signal */ - mvr2r( syn2, bpf_noise_buf + i_subfr, subfr_len ); - } - - /*-------------------------------------------------------* - * update memory for next frame - *-------------------------------------------------------*/ - - for ( i = L_TRACK_HIST - 1; i > 0; i-- ) - { - hBPF->Track_on_hist[i] = hBPF->Track_on_hist[i - 1]; - hBPF->vibrato_hist[i] = hBPF->vibrato_hist[i - 1]; - } - - hBPF->Track_on_hist[i] = Track_on; - hBPF->vibrato_hist[i] = vibrato; - - mvr2r( syn_buf + L_frame, hBPF->pst_old_syn, nbpsf_pit_max ); - - return; -} -#endif /*---------------------------------------------------------------------* * Pit_track() @@ -406,52 +75,6 @@ void bass_psfilter( *---------------------------------------------------------------------*/ /*! r: Pitch */ -#ifndef IVAS_FLOAT_FIXED -static int16_t Pit_track( - const float syn[], /* i : synthesis [-NBPSF_PIT_MAX..L_HALFR16k] */ - int16_t T /* i : pitch period (>= PIT_MIN) */ -) -{ - int16_t i, T2; - float tmp, corr, ener, cn; - const float *v1, *v2; - - /*----------------------------------------------------------------* - * Test pitch/2 to avoid continuous pitch doubling - * (short pitch is limited to PIT_MIN (34 = 376Hz) by the encoder - *----------------------------------------------------------------*/ - - T2 = T >> 1; - - v1 = &syn[-NBPSF_L_EXTRA]; - v2 = &syn[-T2 - NBPSF_L_EXTRA]; - - ener = 0.01f; - for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) - { - ener += v1[i] * v1[i]; - } - corr = 0.01f; - for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) - { - corr += v1[i] * v2[i]; - } - tmp = 0.01f; - for ( i = 0; i < L_HALFR16k + NBPSF_L_EXTRA; i++ ) - { - tmp += v2[i] * v2[i]; - } - - /* cn = normalized correlation of pitch/2 */ - cn = corr / (float) sqrt( ener * tmp ); - if ( cn > 0.95f ) - { - T = T2; - } - - return ( T ); -} -#endif /*---------------------------------------------------------------------* @@ -460,68 +83,7 @@ static int16_t Pit_track( * Add BPF component in cldfb domain *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void addBassPostFilter( - const float *harm_timeIn, - const int16_t samplesToProcess, - float **rAnalysis, - float **iAnalysis, - HANDLE_CLDFB_FILTER_BANK cldfb ) -{ - float *tmp_R[CLDFB_NO_COL_MAX]; - float *tmp_I[CLDFB_NO_COL_MAX]; - float cldfbBufferReal[CLDFB_NO_COL_MAX][20]; - float cldfbBufferImag[CLDFB_NO_COL_MAX][20]; - int16_t i, b; - int16_t maxBand; - const float *weights; - int16_t nCol = cldfb->no_col; - int16_t nColToProcess = nCol; - int16_t nChan = cldfb->no_channels; - - if ( samplesToProcess > -1 ) - { - nColToProcess = ( ( samplesToProcess + cldfb->no_channels - 1 ) / cldfb->no_channels ); - } - - assert( nCol == 16 ); - - weights = bpf_weights_16; - - if ( nChan > BPF_STOP_STOPBAND_16 ) - { - maxBand = BPF_STOP_STOPBAND_16; - } - else - { - maxBand = nChan; - } - - for ( i = 0; i < nColToProcess; i++ ) - { - tmp_R[i] = cldfbBufferReal[i]; - tmp_I[i] = cldfbBufferImag[i]; - } - - /* do the analysis of filtered signal */ - cldfbAnalysis_ivas( harm_timeIn, tmp_R, tmp_I, samplesToProcess, cldfb ); - /* now do the subtraction */ - for ( i = 0; i < nColToProcess; i++ ) - { - /* loop over low frequency bands */ - for ( b = 0; b < maxBand; b++ ) - { - rAnalysis[i][b] -= weights[b] * tmp_R[i][b]; - iAnalysis[i][b] -= weights[b] * tmp_I[i][b]; - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void addBassPostFilter_ivas_fx( const Word32 *harm_timeIn_fx, // Qx const Word16 samplesToProcess, @@ -586,77 +148,8 @@ void addBassPostFilter_ivas_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * res_bpf_adapt() - * - * Analyze BPF output and decide if it should be applied on DFT stereo - * residual signal - *---------------------------------------------------------------------*/ - -/*! r: Decision to enable or disable BPF on DFT stereo residual */ -int16_t res_bpf_adapt( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo decoder handle */ - const float *bpf_error_signal_8k, /* i : BPF modification signal */ - float res_buf[STEREO_DFT_N_8k] /* i : residual buffer */ -) -{ - float error_nrg; - float tmp; - float res_hb_nrg; - float bpf_error_ratio; - int16_t res_bpf_flag; - int16_t i; - int16_t i_start; - int16_t i_end; - float bw_inv; - - if ( hStereoDft->res_cod_band_max == 6 ) - { - i_start = 39; - i_end = 64; - bw_inv = 0.04f; /* 1/(64 - 39) */ - } - else - { - i_start = 28; - i_end = 40; - bw_inv = 0.083f; /* 1/(40 - 28) */ - } - - /* Measure energy of high frequency band in MDCT domain */ - res_hb_nrg = EPSILON; - for ( i = i_start; i < i_end; i++ ) - { - res_hb_nrg += res_buf[i] * res_buf[i]; - } - res_hb_nrg *= bw_inv; - res_hb_nrg = STEREO_DFT_BPF_ADAPT_ALPHA * res_hb_nrg + ( 1 - STEREO_DFT_BPF_ADAPT_ALPHA ) * hStereoDft->res_hb_nrg_mem; - hStereoDft->res_hb_nrg_mem = res_hb_nrg; - - /* Measure energy of discontinuities at subframe boundaries */ - error_nrg = 0; - for ( i = 0; i < L_FRAME8k; i += STEREO_DFT_L_SUBFR_8k ) - { - tmp = bpf_error_signal_8k[i] - hStereoDft->bpf_error_signal_last; - error_nrg += tmp * tmp; - hStereoDft->bpf_error_signal_last = bpf_error_signal_8k[i + STEREO_DFT_L_SUBFR_8k - 1]; - } - error_nrg *= 0.2f; /* Division by 5 for average value */ - bpf_error_ratio = min( 2, error_nrg / res_hb_nrg ); /* Form decision variable and apply limit */ - bpf_error_ratio = STEREO_DFT_BPF_ADAPT_BETA * bpf_error_ratio + ( 1 - STEREO_DFT_BPF_ADAPT_BETA ) * hStereoDft->bpf_error_ratio_mem; - // printf("\n%f\n", bpf_error_ratio); - hStereoDft->bpf_error_ratio_mem = bpf_error_ratio; - - res_bpf_flag = bpf_error_ratio < 1; - - return res_bpf_flag; -} - -#endif /*---------------------------------------------------------------------* * res_bpf_adapt_ivas_fx() * @@ -665,7 +158,6 @@ int16_t res_bpf_adapt( *---------------------------------------------------------------------*/ /*! r: Decision to enable or disable BPF on DFT stereo residual */ -#ifdef IVAS_FLOAT_FIXED Word16 res_bpf_adapt_ivas_fx( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo decoder handle */ const Word32 *bpf_error_signal_8k, /* i : BPF modification signal */ @@ -749,50 +241,7 @@ Word16 res_bpf_adapt_ivas_fx( return res_bpf_flag; } -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * bpf_pitch_coherence() - * - * Analyse pitch coherence - *---------------------------------------------------------------------*/ - -void bpf_pitch_coherence( - Decoder_State *st, /* i/o: decoder state structure */ - const float pitch_buf[] /* i : pitch for every subfr [0,1,2,3] */ -) -{ - int16_t nb_subfr; - float pc, pcn1, pcn2, pcn3; - - nb_subfr = st->L_frame / L_SUBFR; - - if ( st->clas_dec > UNVOICED_CLAS && st->element_mode != EVS_MONO ) - { - pc = (float) fabs( st->old_pitch_buf[nb_subfr + 3] + st->old_pitch_buf[nb_subfr + 2] - st->old_pitch_buf[nb_subfr] - st->old_pitch_buf[nb_subfr + 1] ) * 256.0f / (float) st->L_frame; - pcn1 = K_PC_DEC * pc + C_PC_DEC; - pcn1 = max( min( pcn1, 1.0f ), 0.0f ); - - pc = (float) fabs( pitch_buf[nb_subfr - 1] + pitch_buf[nb_subfr - 2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) st->L_frame; - pcn2 = K_PC_DEC * pc + C_PC_DEC; - pcn2 = max( min( pcn2, 1.0f ), 0.0f ); - - pc = (float) fabs( st->old_pitch_buf[nb_subfr + 3] + st->old_pitch_buf[nb_subfr + 2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) st->L_frame; - pcn3 = K_PC_DEC * pc + C_PC_DEC; - pcn3 = max( min( pcn3, 1.0f ), 0.0f ); - - if ( pcn1 + pcn2 + pcn3 < 2.5f ) - { - st->hBPF->psf_att = 0.4f; - set_s( &st->hBPF->Track_on_hist[L_TRACK_HIST - nb_subfr], 1, nb_subfr ); - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void bpf_pitch_coherence_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word32 pitch_buf[] /* i : pitch for every subfr [0,1,2,3] Q20 */ @@ -866,4 +315,3 @@ void bpf_pitch_coherence_ivas_fx( return; } -#endif diff --git a/lib_dec/bass_psfilter_fx.c b/lib_dec/bass_psfilter_fx.c index acaf13a49..0f290fc8f 100644 --- a/lib_dec/bass_psfilter_fx.c +++ b/lib_dec/bass_psfilter_fx.c @@ -21,16 +21,13 @@ /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 Pit_track_fx( Word16 syn[], Word16 T ); -#endif /*---------------------------------------------------------------------* * bass_psfilter_init() * * Initialisation of postfiltering variables *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void bass_psfilter_init_fx( BPF_DEC_HANDLE hBPF /* o : BPF data handle */ ) @@ -49,7 +46,6 @@ void bass_psfilter_init_fx( return; } -#endif /*=========================================================================*/ /* FUNCTION : void bass_psfilter_fx () */ @@ -79,7 +75,6 @@ void bass_psfilter_init_fx( /* CALLED FROM : TX/RX */ /*=========================================================================*/ -#ifdef IVAS_FLOAT_FIXED void bass_psfilter_fx( BPF_DEC_HANDLE hBPF, /* i/o: BPF data handle */ const Word16 Opt_AMR_WB, /* i : AMR-WB IO flag Q0*/ @@ -749,7 +744,6 @@ void bass_psfilter_fx( return; } -#endif /*==============================================================================*/ /* FUNCTION : Word16 Pit_track_fx ( ) */ @@ -766,7 +760,6 @@ void bass_psfilter_fx( /* CALLED FROM : TX/RX */ /*==============================================================================*/ -#ifdef IVAS_FLOAT_FIXED static Word16 Pit_track_fx( /* o : Pitch */ Word16 syn[], /* i : synthesis [-PIT_MAX..L_SUBFR] st_fx->Q_syn2 */ Word16 T /* i : pitch period (>= PIT_MIN) Q0 */ @@ -889,7 +882,6 @@ static Word16 Pit_track_fx( /* o : Pitch */ return T; } -#endif /*---------------------------------------------------------------------* * addBassPostFilter() @@ -897,7 +889,6 @@ static Word16 Pit_track_fx( /* o : Pitch */ * Add BPF component in cldfb domain *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void addBassPostFilter_fx( const Word16 *harm_timeIn_Fx, /* timeIn_e */ Word32 **rAnalysis_Fx, /* Qx - 5 */ @@ -990,7 +981,6 @@ void addBassPostFilter_fx( return; } -#endif #ifdef ADD_BPF_ADAPT /*---------------------------------------------------------------------* diff --git a/lib_dec/cng_dec.c b/lib_dec/cng_dec.c index 83854f3ae..515dd295a 100644 --- a/lib_dec/cng_dec.c +++ b/lib_dec/cng_dec.c @@ -45,877 +45,3 @@ /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void shb_CNG_decod( Decoder_State *st, const float *synth, float *shb_synth, const int16_t sid_bw ); - - -/*---------------------------------------------------------------------* - * CNG_dec() - * - * Decoding of CNG parameters - *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void CNG_dec( - Decoder_State *st, /* i/o: State structure */ - const int16_t last_element_mode, /* i : last element mode */ - float Aq[], /* o : LP coefficients */ - float *lsp_new, /* i/o: current frame LSPs */ - float *lsf_new, /* i/o: current frame LSFs */ - int16_t *allow_cn_step, /* o : allow CN step */ - int16_t *sid_bw, /* i : 0-NB/WB, 1-SWB SID */ - float *q_env ) -{ - int16_t i, enr_index, num_bits; - TD_CNG_DEC_HANDLE hTdCngDec; - float step; - float enr, weights; - int16_t m = 0; - int16_t ptr, j, k; - int16_t m1; - float tmp[HO_HIST_SIZE * M]; - int16_t burst_ho_cnt = 0; - int16_t ll, s_ptr; - float lsf_tmp[M]; - float C[M]; - float max_val[2]; - int16_t max_idx[2]; - float ftmp; - float lsp_tmp[M]; - float dev; - float max_dev; - float dist; - int16_t env_idx[2]; - float enr1; - float env[NUM_ENV_CNG]; - float tmp_env[HO_HIST_SIZE * NUM_ENV_CNG]; - int16_t LSF_Q_prediction; /* o : LSF prediction mode - just temporary variable in CNG */ - int16_t tmp1; - - hTdCngDec = st->hTdCngDec; - - /*-----------------------------------------------------------------* - * Decode CNG spectral envelope (only in SID frame) - *-----------------------------------------------------------------*/ - - if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) - { - /* de-quantize the LSF vector */ - if ( st->Opt_AMR_WB ) - { - isf_dec_amr_wb( st, Aq, lsf_new, lsp_new ); - } - else - { - lsf_dec( st, 0, Aq, &LSF_Q_prediction, lsf_new, lsp_new, 0, 0, NULL ); - } - } - else - { - /* Use old LSP vector */ - mvr2r( st->lsp_old, lsp_new, M ); - mvr2r( st->lsf_old, lsf_new, M ); - } - - /* Initialize the CNG spectral envelope in case of the very first CNG frame */ - if ( st->first_CNG == 0 ) - { - mvr2r( st->lsp_old, st->lspCNG, M ); - } - - /*-----------------------------------------------------------------* - * Decode residual signal energy - *-----------------------------------------------------------------*/ - - *allow_cn_step = 0; - if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) - { - if ( st->core_brate == SID_2k40 ) - { - step = STEP_SID; - } - else - { - step = STEP_AMR_WB_SID; - } - - /* intialize the energy quantization parameters */ - if ( !st->Opt_AMR_WB ) - { - num_bits = 7; - } - else - { - num_bits = 6; - } - - /* decode the energy index */ - enr_index = get_next_indice( st, num_bits ); - - if ( st->last_core_brate <= SID_2k40 || st->prev_bfi == 1 ) - { - tmp1 = hTdCngDec->old_enr_index + 20; - } - else - { - tmp1 = hTdCngDec->old_enr_index + 40; - } - if ( ( enr_index > tmp1 ) && ( hTdCngDec->old_enr_index >= 0 ) ) /* Likely bit error , and not startup */ - { - enr_index = tmp1; - enr_index = min( enr_index, 127 ); - if ( st->Opt_AMR_WB != 0 ) - { - enr_index = min( enr_index, 63 ); - } - } - - if ( st->last_core_brate > SID_2k40 && - st->first_CNG != 0 && - hTdCngDec->old_enr_index >= 0 && - enr_index > hTdCngDec->old_enr_index + 1 ) - { - *allow_cn_step = 1; - } - hTdCngDec->old_enr_index = enr_index; - if ( enr_index == 0 ) - { - enr_index = -5; - } - hTdCngDec->Enew = enr_index / step - 2.0f; - - /* find the new energy value */ - hTdCngDec->Enew = (float) ( pow( 2.0, hTdCngDec->Enew ) ); - - /* decode SID type */ - if ( st->core_brate == SID_2k40 ) - { - burst_ho_cnt = get_next_indice( st, 3 ); - - *sid_bw = get_next_indice( st, 1 ); - - if ( *sid_bw == 0 ) - { - env_idx[0] = get_next_indice( st, 6 ); - - /* get quantized res_env_details */ - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - q_env[i] = CNG_details_codebook[env_idx[0]][i]; - } - } - } - - /* Reset CNG history if CNG frame length is changed */ - if ( st->bwidth == WB && st->first_CNG && st->L_frame != st->last_CNG_L_frame ) - { - hTdCngDec->ho_hist_size = 0; - } - } - - /*---------------------------------------------------------------------* - * CNG spectral envelope update - * Find A(z) coefficients - *---------------------------------------------------------------------*/ - - if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 || st->last_core_brate == SID_2k40 ) - { - /* Reset hangover counter if not first SID period */ - if ( st->core_brate > FRAME_NO_DATA ) - { - hTdCngDec->num_ho = 0; - } - - /* Update LSPs if last SID energy not outlier or insufficient number of hangover frames */ - if ( hTdCngDec->num_ho < 3 || hTdCngDec->Enew < 1.5f * st->lp_ener ) - { - for ( i = 0; i < M; i++ ) - { - /* AR low-pass filter */ - st->lspCNG[i] = CNG_ISF_FACT * st->lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; - } - } - } - else - { - /* Update CNG_mode, if allowed */ - if ( ( st->Opt_AMR_WB || st->bwidth == WB ) && ( !st->first_CNG || hTdCngDec->act_cnt2 >= MIN_ACT_CNG_UPD ) ) - { - if ( st->last_active_brate > ACELP_16k40 ) - { - st->CNG_mode = -1; - } - else - { - st->CNG_mode = get_cng_mode_ivas( st->last_active_brate ); - } - } - - /* If first sid after active burst update LSF history from circ buffer */ - burst_ho_cnt = min( burst_ho_cnt, hTdCngDec->ho_circ_size ); - hTdCngDec->act_cnt = 0; - s_ptr = hTdCngDec->ho_circ_ptr - burst_ho_cnt + 1; - if ( s_ptr < 0 ) - { - s_ptr += hTdCngDec->ho_circ_size; - } - - for ( ll = burst_ho_cnt; ll > 0; ll-- ) - { - if ( ++( hTdCngDec->ho_hist_ptr ) == HO_HIST_SIZE ) - { - hTdCngDec->ho_hist_ptr = 0; - } - /* Conversion between 12.8k and 16k LSPs */ - if ( ( st->L_frame == L_FRAME16k && hTdCngDec->ho_16k_lsp[s_ptr] == 0 ) || ( st->L_frame == L_FRAME && hTdCngDec->ho_16k_lsp[s_ptr] == 1 ) ) - { - lsp_convert_poly( &hTdCngDec->ho_lsp_circ[s_ptr * M], st->L_frame, 0 ); - } - - /* update circular buffers */ - mvr2r( &( hTdCngDec->ho_lsp_circ[s_ptr * M] ), &( hTdCngDec->ho_lsp_hist[hTdCngDec->ho_hist_ptr * M] ), M ); - mvr2r( &( hTdCngDec->ho_ener_circ[s_ptr] ), &( hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] ), 1 ); - hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; - mvr2r( &( hTdCngDec->ho_env_circ[s_ptr * NUM_ENV_CNG] ), &( hTdCngDec->ho_env_hist[hTdCngDec->ho_hist_ptr * NUM_ENV_CNG] ), NUM_ENV_CNG ); - - hTdCngDec->ho_hist_size++; - if ( hTdCngDec->ho_hist_size > HO_HIST_SIZE ) - { - hTdCngDec->ho_hist_size = HO_HIST_SIZE; - } - - s_ptr++; - - if ( s_ptr == hTdCngDec->ho_circ_size ) - { - s_ptr = 0; - } - } - - if ( hTdCngDec->ho_hist_size > 0 ) - { - *allow_cn_step |= ( st->first_CNG || st->element_mode == EVS_MONO ) && ( hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] > 4.0f * st->lp_ener ); - } - - if ( last_element_mode == IVAS_CPE_TD ) - { - *allow_cn_step = 1; - } - - if ( !*allow_cn_step && hTdCngDec->ho_hist_size > 0 ) - { - ptr = hTdCngDec->ho_hist_ptr; - mvr2r( &( hTdCngDec->ho_lsp_hist[ptr * M] ), tmp, M ); - m1 = 0; - if ( ( hTdCngDec->ho_sid_bw & 0x1L ) == 0 ) - { - mvr2r( &hTdCngDec->ho_env_hist[ptr * NUM_ENV_CNG], tmp_env, NUM_ENV_CNG ); - m1 = 1; - } - enr = W_DTX_HO[0] * hTdCngDec->ho_ener_hist[ptr]; - weights = W_DTX_HO[0]; - m = 1; - for ( k = 1; k < hTdCngDec->ho_hist_size; k++ ) - { - ptr--; - if ( ptr < 0 ) - { - ptr = HO_HIST_SIZE - 1; - } - - if ( hTdCngDec->ho_ener_hist[ptr] < hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] * BUF_H_NRG && - hTdCngDec->ho_ener_hist[ptr] > hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] * BUF_L_NRG ) - { - enr += W_DTX_HO[k] * hTdCngDec->ho_ener_hist[ptr]; - weights += W_DTX_HO[k]; - mvr2r( &hTdCngDec->ho_lsp_hist[ptr * M], &tmp[m * M], M ); - if ( ( hTdCngDec->ho_sid_bw & ( 0x1L << k ) ) == 0 ) - { - mvr2r( &hTdCngDec->ho_env_hist[ptr * NUM_ENV_CNG], &tmp_env[m1 * NUM_ENV_CNG], NUM_ENV_CNG ); - m1++; - } - m++; - } - } - - enr /= weights; - st->lp_ener = enr; - - set_f( max_val, 0.0f, 2 ); - set_s( max_idx, 0, 2 ); - - for ( i = 0; i < m; i++ ) - { - if ( st->L_frame == L_FRAME ) - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); - ftmp = 6400.0f / ( M + 1 ); - C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); - } - else - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); - ftmp = 8000.0f / ( M + 1 ); - C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); - } - - C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); - - for ( j = 0; j < M - 1; j++ ) - { - C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); - } - - C[i] *= 0.0588235f; /* 1/M+1 */ - - if ( C[i] > max_val[0] ) - { - max_val[1] = max_val[0]; - max_idx[1] = max_idx[0]; - max_val[0] = C[i]; - max_idx[0] = i; - } - else if ( C[i] > max_val[1] ) - { - max_val[1] = C[i]; - max_idx[1] = i; - } - } - - if ( m == 1 ) - { - mvr2r( tmp, lsp_tmp, M ); - } - else if ( m < 4 ) - { - for ( i = 0; i < M; i++ ) - { - lsp_tmp[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_tmp[i] += tmp[j * M + i]; - } - - lsp_tmp[i] -= tmp[max_idx[0] * M + i]; - lsp_tmp[i] /= (float) ( m - 1 ); - } - } - else - { - for ( i = 0; i < M; i++ ) - { - lsp_tmp[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_tmp[i] += tmp[j * M + i]; - } - - lsp_tmp[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); - lsp_tmp[i] /= (float) ( m - 2 ); - } - } - - dist = 0.0f; - max_dev = 0.0f; - for ( i = 0; i < M; i++ ) - { - dev = (float) fabs( lsp_tmp[i] - lsp_new[i] ); - dist += dev; - if ( dev > max_dev ) - { - max_dev = dev; - } - } - - if ( dist > 0.4f || max_dev > 0.1f ) - { - for ( i = 0; i < M; i++ ) - { - st->lspCNG[i] = lsp_tmp[i]; - } - } - else - { - for ( i = 0; i < M; i++ ) - { - /* AR low-pass filter */ - st->lspCNG[i] = 0.8f * lsp_tmp[i] + ( 1 - 0.8f ) * lsp_new[i]; - } - } - if ( m1 > 0 ) - { - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] = 0; - for ( j = 0; j < m1; j++ ) - { - env[i] += tmp_env[j * NUM_ENV_CNG + i]; - } - - env[i] /= (float) m1; - env[i] = env[i] - 2 * st->lp_ener; - } - mvr2r( env, hTdCngDec->lp_env, NUM_ENV_CNG ); - } - } - else - { - mvr2r( lsp_new, st->lspCNG, M ); /* use newly analyzed parameters */ - } - } - - if ( st->core_brate == SID_1k75 || st->core_brate == SID_2k40 ) - { - /* Update hangover memory during CNG */ - if ( !*allow_cn_step && ( hTdCngDec->Enew < 1.5f * st->lp_ener ) ) - { - /* update the pointer to circular buffer of old LSP vectors */ - if ( ++( hTdCngDec->ho_hist_ptr ) == HO_HIST_SIZE ) - { - hTdCngDec->ho_hist_ptr = 0; - } - - /* update the circular buffer of old LSP vectors with the new LSP vector */ - mvr2r( lsp_new, &( hTdCngDec->ho_lsp_hist[( hTdCngDec->ho_hist_ptr ) * M] ), M ); - - /* update the hangover energy buffer */ - hTdCngDec->ho_ener_hist[hTdCngDec->ho_hist_ptr] = hTdCngDec->Enew; - - if ( st->core_brate == SID_2k40 && *sid_bw == 0 ) - { - enr1 = (float) log10( hTdCngDec->Enew * st->L_frame + 0.1f ) / (float) log10( 2.0f ); - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - /* get quantized envelope */ - env[i] = (float) ( pow( 2.0f, ( enr1 - q_env[i] ) ) + 2 * hTdCngDec->Enew ); - } - hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; - mvr2r( env, &( hTdCngDec->ho_env_hist[( hTdCngDec->ho_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); - } - else if ( *sid_bw != 0 ) - { - hTdCngDec->ho_sid_bw = ( hTdCngDec->ho_sid_bw & 0x3fffffffL ) << 1; - hTdCngDec->ho_sid_bw |= 0x1L; - } - if ( ++( hTdCngDec->ho_hist_size ) > HO_HIST_SIZE ) - { - hTdCngDec->ho_hist_size = HO_HIST_SIZE; - } - } - - /* Update the frame length memory */ - st->last_CNG_L_frame = st->L_frame; - - if ( st->core_brate != SID_1k75 ) - { - hTdCngDec->num_ho = m; - } - } - - if ( st->Opt_AMR_WB ) - { - isp2a( st->lspCNG, Aq, M ); - } - else - { - lsp2a_stab( st->lspCNG, Aq, M ); - } - - for ( i = 1; i < st->L_frame / L_SUBFR; i++ ) - { - mvr2r( Aq, &Aq[i * ( M + 1 )], M + 1 ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * swb_CNG_dec() - * - * Comfort noise generation for SHB signal - *---------------------------------------------------------------------*/ - -void swb_CNG_dec( - Decoder_State *st, /* i/o: State structure */ - const float *synth, /* i : ACELP core synthesis at 32kHz */ - float *shb_synth, /* o : high-band CNG synthesis */ - const int16_t sid_bw /* i : 0-NB/WB, 1-SWB SID */ -) -{ - if ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) - { - /* SHB SID decoding and CNG */ - if ( st->cng_type == LP_CNG && st->extl == SWB_CNG ) - { - shb_CNG_decod( st, synth, shb_synth, sid_bw ); - } - st->last_vad = 0; - st->hTdCngDec->burst_cnt = 0; - } - else - { - st->last_vad = 1; - st->hTdCngDec->burst_cnt++; - if ( st->hTdCngDec->burst_cnt > 10 ) - { - st->hTdCngDec->burst_cnt = 0; - } - } - - return; -} - -/*---------------------------------------------------------------------* - * shb_CNG_decod() - * - * Main routine of SHB SID decoding and CNG - *---------------------------------------------------------------------*/ - -static void shb_CNG_decod( - Decoder_State *st, /* i/o: State structure */ - const float *synth, /* i : ACELP core synthesis at 32kHz */ - float *shb_synth, /* o : high-band CNG synthesis */ - const int16_t sid_bw /* i : 0-NB/WB, 1-SWB SID */ -) -{ - int16_t i; - int16_t idx_ener; - TD_CNG_DEC_HANDLE hTdCngDec; - float shb_lpcCNG[LPC_SHB_ORDER + 1]; - float shb_lspCNG[LPC_SHB_ORDER]; - float excTmp[L_FRAME16k]; - float excSHB[L_FRAME16k]; - float ener_excSHB; - float wb_ener; - float gain; - float shb_syn16k[L_FRAME16k]; - float ftmp; - float step; - float interp; - float ener; - int16_t allow_cn_step = 0; - - hTdCngDec = st->hTdCngDec; - - if ( !st->bfi ) - { - if ( st->core_brate == SID_2k40 && sid_bw == 1 ) - { - idx_ener = get_next_indice( st, 4 ); - - if ( idx_ener == 0 ) - { - idx_ener = -15; - } - - /* de-quantization of SHB CNG parameters */ - if ( st->element_mode == EVS_MONO ) - { - hTdCngDec->last_shb_cng_ener = ( (float) idx_ener / 0.9f - 6.0f ) * (float) log10( 2.0f ) * 10.0f; - } - else - { - hTdCngDec->last_shb_cng_ener = ( (float) idx_ener / 0.7f - 6.0f ) * (float) log10( 2.0f ) * 10.0f; - } - } - } - - /* SHB spectrum estimation */ - interp = ( (float) hTdCngDec->shb_dtx_count ) / 32; - interp = min( interp, 1.0f ); - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - shb_lspCNG[i] = interp * hTdCngDec->lsp_shb_prev[i]; - shb_lspCNG[i] += ( 1 - interp ) * hTdCngDec->lsp_shb_prev_prev[i]; - } - - if ( hTdCngDec->shb_dtx_count < 1000 ) - { - hTdCngDec->shb_dtx_count++; - } - - lsp2a( shb_lpcCNG, shb_lspCNG, LPC_SHB_ORDER ); - shb_lpcCNG[0] = 1.0f; - - mvr2r( shb_lpcCNG, st->hTdCngDec->shb_lpcCNG, LPC_SHB_ORDER + 1 ); - - /* SHB energy estimation */ - wb_ener = 0.001f; - - if ( st->element_mode != IVAS_CPE_DFT ) - { - for ( i = 0; i < L_FRAME32k; i++ ) - { - wb_ener += synth[i] * synth[i]; - } - } - - wb_ener /= L_FRAME32k; - wb_ener = 10 * (float) log10( wb_ener ); - - if ( st->first_CNG == 0 ) - { - hTdCngDec->wb_cng_ener = wb_ener; - } - if ( fabs( wb_ener - hTdCngDec->wb_cng_ener ) > 12.0f ) - { - allow_cn_step = 1; - } - - if ( allow_cn_step == 1 ) - { - hTdCngDec->wb_cng_ener = wb_ener; - } - else - { - ftmp = wb_ener - hTdCngDec->wb_cng_ener; - hTdCngDec->wb_cng_ener += 0.9f * ftmp; - } - if ( st->core_brate == SID_2k40 && sid_bw == 1 && !st->bfi ) - { - hTdCngDec->last_wb_cng_ener = hTdCngDec->wb_cng_ener; - - if ( st->first_CNG == 0 ) - { - hTdCngDec->shb_cng_ener = hTdCngDec->last_shb_cng_ener; - } - } - - gain = hTdCngDec->wb_cng_ener - hTdCngDec->last_wb_cng_ener; - if ( gain > 15 ) - { - gain = 15; - } - step = gain + hTdCngDec->last_shb_cng_ener - hTdCngDec->shb_cng_ener; - if ( allow_cn_step == 1 || st->last_core_brate > SID_2k40 ) - { - hTdCngDec->shb_cng_ener += step; - } - else - { - hTdCngDec->shb_cng_ener += 0.25f * step; - } - /* generate white noise excitation */ - for ( i = 0; i < L_FRAME16k; i++ ) - { - excTmp[i] = (float) own_random( &hTdCngDec->swb_cng_seed ); - } - - /* synthesis filtering */ - syn_filt( shb_lpcCNG, LPC_SHB_ORDER, excTmp, excSHB, L_FRAME16k, st->hBWE_TD->state_lpc_syn, 1 ); - - /* synthesis signal gain shaping */ - ener_excSHB = 0.001f; - for ( i = 0; i < L_FRAME16k; i++ ) - { - ener_excSHB += excSHB[i] * excSHB[i]; - } - - if ( st->last_vad == 1 ) - { - if ( hTdCngDec->burst_cnt > 3 && st->last_core != HQ_CORE ) - { - hTdCngDec->trans_cnt = 5; - } - else - { - hTdCngDec->trans_cnt = 0; - } - } - - if ( hTdCngDec->trans_cnt > 0 ) - { - i = (int16_t) ( (float) hTdCngDec->trans_cnt / 15.0f * 255 ); - ener = hTdCngDec->shb_cng_ener + sin_table256[i] * ( hTdCngDec->last_shb_ener - hTdCngDec->shb_cng_ener ); - hTdCngDec->trans_cnt--; - } - else - { - ener = hTdCngDec->shb_cng_ener; - } - - - gain = (float) sqrt( pow( 10, 0.1f * ener ) * L_FRAME16k / ener_excSHB ); - - st->hTdCngDec->shb_cng_gain = ener; - - for ( i = 0; i < L_FRAME16k; i++ ) - { - shb_syn16k[i] = gain * excSHB[i]; - } - - /* generate 32kHz SHB signal (12.8 - 14.4kHz) from 12.8kHz signal */ - GenSHBSynth( shb_syn16k, shb_synth, st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, st->L_frame, &( st->hBWE_TD->syn_dm_phase ) ); - - if ( st->output_Fs == 48000 ) - { - interpolate_3_over_2_allpass( shb_synth, L_FRAME32k, shb_synth, hTdCngDec->interpol_3_2_cng_dec ); - } - - ResetSHBbuffer_Dec( st->hBWE_TD, st->extl ); - - return; -} -#endif - - -/*-------------------------------------------------------------------* - * td_cng_dec_init() - * - * - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void td_cng_dec_init( - DEC_CORE_HANDLE st /* i/o: decoder state structure */ -) -{ - int16_t i; - TD_CNG_DEC_HANDLE hTdCngDec; - - hTdCngDec = st->hTdCngDec; - - hTdCngDec->cng_seed = RANDOM_INITSEED; - hTdCngDec->cng_ener_seed = RANDOM_INITSEED; - hTdCngDec->cng_ener_seed1 = RANDOM_INITSEED; - hTdCngDec->old_enr_index = -1; -#ifndef IVAS_FLOAT_FIXED - hTdCngDec->Enew = 0.0f; - mvr2r( st->lsp_old, st->lspCNG, M ); -#endif - hTdCngDec->last_allow_cn_step = 0; - hTdCngDec->shb_cng_ener = -6.02f; - if ( st->element_mode != EVS_MONO ) - { - set_f( hTdCngDec->shb_lpcCNG, 0.0f, LPC_SHB_ORDER + 1 ); - hTdCngDec->shb_lpcCNG[0] = 1.0f; - hTdCngDec->shb_cng_gain = -82.0; /* a dB value approximately corresponding to shb index 0(used as index -15) */ - } - - hTdCngDec->wb_cng_ener = -6.02f; - hTdCngDec->last_wb_cng_ener = -6.02f; - hTdCngDec->last_shb_cng_ener = -6.02f; - hTdCngDec->swb_cng_seed = RANDOM_INITSEED; - hTdCngDec->ho_hist_ptr = -1; - hTdCngDec->ho_sid_bw = 0; - set_f( hTdCngDec->ho_lsp_hist, 0, HO_HIST_SIZE * M ); - set_f( hTdCngDec->ho_ener_hist, 0, HO_HIST_SIZE ); - set_f( hTdCngDec->ho_env_hist, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngDec->ho_hist_size = 0; - hTdCngDec->act_cnt = 0; - hTdCngDec->ho_circ_ptr = -1; - set_f( hTdCngDec->ho_lsp_circ, 0, HO_HIST_SIZE * M ); - set_f( hTdCngDec->ho_ener_circ, 0, HO_HIST_SIZE ); - set_f( hTdCngDec->ho_env_circ, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngDec->ho_circ_size = 0; - - set_s( hTdCngDec->ho_16k_lsp, 0, HO_HIST_SIZE ); - st->CNG_mode = -1; - hTdCngDec->act_cnt2 = 0; - hTdCngDec->num_ho = 0; - set_f( hTdCngDec->lp_env, 0.0f, NUM_ENV_CNG ); - set_f( hTdCngDec->exc_mem, 0.0f, 24 ); - set_f( hTdCngDec->exc_mem1, 0.0f, 30 ); - set_f( hTdCngDec->old_env, 0.0f, NUM_ENV_CNG ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - if ( st->element_mode != EVS_MONO ) - { - hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) ( i + 1 ) ) / ( (float) ( LPC_SHB_ORDER + 1 ) ); - } - else - { - hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) i ) / ( (float) LPC_SHB_ORDER ); - } - hTdCngDec->lsp_shb_prev_prev[i] = hTdCngDec->lsp_shb_prev[i]; - } - - hTdCngDec->shb_dtx_count = 0; - hTdCngDec->trans_cnt = 0; - hTdCngDec->burst_cnt = 0; - - hTdCngDec->last_shb_ener = 0.001f; - - - set_f( hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN ); - - return; -} -#else -void td_cng_dec_init( - DEC_CORE_HANDLE st /* i/o: decoder state structure */ -) -{ - int16_t i; - TD_CNG_DEC_HANDLE hTdCngDec; - - hTdCngDec = st->hTdCngDec; - - hTdCngDec->cng_seed = RANDOM_INITSEED; - hTdCngDec->cng_ener_seed = RANDOM_INITSEED; - hTdCngDec->cng_ener_seed1 = RANDOM_INITSEED; - hTdCngDec->old_enr_index = -1; - hTdCngDec->Enew = 0.0f; - mvr2r( st->lsp_old, st->lspCNG, M ); - hTdCngDec->last_allow_cn_step = 0; - hTdCngDec->shb_cng_ener = -6.02f; - if ( st->element_mode != EVS_MONO ) - { - set_f( hTdCngDec->shb_lpcCNG, 0.0f, LPC_SHB_ORDER + 1 ); - hTdCngDec->shb_lpcCNG[0] = 1.0f; - hTdCngDec->shb_cng_gain = -82.0; /* a dB value approximately corresponding to shb index 0(used as index -15) */ - } - - hTdCngDec->wb_cng_ener = -6.02f; - hTdCngDec->last_wb_cng_ener = -6.02f; - hTdCngDec->last_shb_cng_ener = -6.02f; - hTdCngDec->swb_cng_seed = RANDOM_INITSEED; - hTdCngDec->ho_hist_ptr = -1; - hTdCngDec->ho_sid_bw = 0; - set_f( hTdCngDec->ho_lsp_hist, 0, HO_HIST_SIZE * M ); - set_f( hTdCngDec->ho_ener_hist, 0, HO_HIST_SIZE ); - set_f( hTdCngDec->ho_env_hist, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngDec->ho_hist_size = 0; - hTdCngDec->act_cnt = 0; - hTdCngDec->ho_circ_ptr = -1; - set_f( hTdCngDec->ho_lsp_circ, 0, HO_HIST_SIZE * M ); - set_f( hTdCngDec->ho_ener_circ, 0, HO_HIST_SIZE ); - set_f( hTdCngDec->ho_env_circ, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngDec->ho_circ_size = 0; - - set_s( hTdCngDec->ho_16k_lsp, 0, HO_HIST_SIZE ); - st->CNG_mode = -1; - hTdCngDec->act_cnt2 = 0; - hTdCngDec->num_ho = 0; - set_f( hTdCngDec->lp_env, 0.0f, NUM_ENV_CNG ); - set_f( hTdCngDec->exc_mem, 0.0f, 24 ); - set_f( hTdCngDec->exc_mem1, 0.0f, 30 ); - set_f( hTdCngDec->old_env, 0.0f, NUM_ENV_CNG ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - if ( st->element_mode != EVS_MONO ) - { - hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) ( i + 1 ) ) / ( (float) ( LPC_SHB_ORDER + 1 ) ); - } - else - { - hTdCngDec->lsp_shb_prev[i] = 0.5f * ( (float) i ) / ( (float) LPC_SHB_ORDER ); - } - hTdCngDec->lsp_shb_prev_prev[i] = hTdCngDec->lsp_shb_prev[i]; - } - - hTdCngDec->shb_dtx_count = 0; - hTdCngDec->trans_cnt = 0; - hTdCngDec->burst_cnt = 0; - - hTdCngDec->last_shb_ener = 0.001f; - - - set_f( hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN ); - - return; -} -#endif -#endif diff --git a/lib_dec/cng_dec_fx.c b/lib_dec/cng_dec_fx.c index 70b05672f..1ca8f8ac3 100644 --- a/lib_dec/cng_dec_fx.c +++ b/lib_dec/cng_dec_fx.c @@ -10,7 +10,6 @@ #include "prot_fx.h" #include "ivas_cnst.h" -#ifdef IVAS_FLOAT_FIXED /*Temporary location to be move in prot* when merge is done*/ void E_LPC_f_isp_a_conversion( const Word16 *isp, Word16 *a, const Word16 m ); void E_LPC_f_lsp_a_conversion( const Word16 *isp, Word16 *a, const Word16 m ); @@ -2275,4 +2274,3 @@ void td_cng_dec_init_ivas_fx( return; } -#endif diff --git a/lib_dec/core_dec_init.c b/lib_dec/core_dec_init.c index 2ae22c470..48464fb35 100644 --- a/lib_dec/core_dec_init.c +++ b/lib_dec/core_dec_init.c @@ -47,726 +47,17 @@ * * Initialization of state variables *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void open_decoder_LPD( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t total_brate, /* i : total bitrate */ - const int32_t last_total_brate, /* i : last total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t last_element_mode, /* i : last element mode */ - const int16_t is_init /* i : indicate call during initialization */ -) -{ - int16_t i; - int16_t mem_syn_r_size_old; - int16_t mem_syn_r_size_new; - int16_t fscaleFB; - int16_t encoderLookahead, encoderLookaheadFB; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - if ( st->codec_mode != MODE1 ) /*already updated in MODE1*/ - { - st->fscale_old = st->fscale; - } - - st->sr_core = getCoreSamplerateMode2_flt( st->element_mode, total_brate, bwidth, st->flag_ACELP16k, st->rf_flag, st->is_ism_format ); - st->fscale = sr2fscale( st->sr_core ); - fscaleFB = sr2fscale( st->output_Fs ); - - /* initializing variables for frame lengths etc. right in the beginning */ - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - if ( st->ini_frame == 0 ) - { - st->last_L_frame = st->L_frame_past = st->L_frame; - } - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); - if ( st->ini_frame == 0 ) - { - st->L_frameTCX_past = st->hTcxDec->L_frameTCX; - } - } - - st->tcxonly = getTcxonly_ivas( st->element_mode, total_brate, MCT_flag, st->is_ism_format ); - - /* the TD TCX PLC in MODE1 still runs with 80ms subframes */ - if ( ( st->element_mode == EVS_MONO && st->L_frame == L_FRAME16k && total_brate <= ACELP_32k ) || ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k && total_brate <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == 32000 || st->sr_core == 16000 ) ) ) - { - st->nb_subfr = NB_SUBFR16k; - } - else - { - st->nb_subfr = NB_SUBFR; - } - st->bits_frame = (int16_t) ( ( (float) st->L_frame / (float) st->fscale ) * (float) FSCALE_DENOM / 128.0f * (float) total_brate / 100.0f + 0.49f ); - st->TcxBandwidth_float = getTcxBandwidth_flt( bwidth ); - st->narrowBand = ( bwidth == NB ) ? 1 : 0; - encoderLookahead = ( L_LOOK_12k8 * st->fscale ) / FSCALE_DENOM; - encoderLookaheadFB = ( L_LOOK_12k8 * fscaleFB ) / FSCALE_DENOM; - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - st->pit_res_max = initPitchLagParameters( 12800, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); - hTcxDec->pit_max_TCX = (int16_t) ( st->pit_max * st->output_Fs / 12800 ); - hTcxDec->pit_min_TCX = (int16_t) ( st->pit_min * st->output_Fs / 12800 ); - } - else - { - st->pit_res_max = initPitchLagParameters( st->sr_core, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); - if ( hTcxDec != NULL ) - { - hTcxDec->pit_max_TCX = (int16_t) ( st->pit_max * st->output_Fs / st->sr_core ); - hTcxDec->pit_min_TCX = (int16_t) ( st->pit_min * st->output_Fs / st->sr_core ); - } - } - - if ( st->ini_frame == 0 ) - { - st->pit_res_max_past = st->pit_res_max; - } - - /*Preemphasis param*/ - if ( st->fscale < ( 16000 * FSCALE_DENOM ) / 12800 ) - { - st->preemph_fac_float = PREEMPH_FAC_FLT; /*NB*/ - } - else if ( st->fscale < ( 24000 * FSCALE_DENOM ) / 12800 ) - { - st->preemph_fac_float = PREEMPH_FAC_16k_FLT; /*WB*/ - } - else - { - st->preemph_fac_float = PREEMPH_FAC_SWB_FLT; /*SWB*/ - } - - if ( st->sr_core == INT_FS_16k ) - { - st->gamma_float = GAMMA16k_FLT; - } - else if ( st->sr_core > INT_FS_16k && st->element_mode == IVAS_CPE_MDCT ) - { - st->gamma_float = GAMMA16k_FLT; - } - else - { - st->gamma_float = GAMMA1_FLT; - } - - /* LPC quantization */ - if ( st->sr_core <= INT_FS_16k && st->tcxonly == 0 ) - { - st->lpcQuantization = 1; - } - else - { - st->lpcQuantization = 0; - } - - if ( st->tcxonly == 0 ) - { - st->numlpc = 1; - } - else - { - st->numlpc = 2; - } - - /* Initialize TBE */ - st->prev_coder_type = GENERIC; - if ( st->hBWE_TD != NULL ) - { - set_f( st->hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); - st->hBWE_TD->prev_tilt_para = 0.0f; - set_zero( st->hBWE_TD->cur_sub_Aq, M + 1 ); - } - - if ( st->hIGFDec != NULL ) - { - if ( !is_init || st->element_mode != IVAS_CPE_MDCT ) - { - init_tcx_cfg( st->hTcxCfg, total_brate, st->sr_core, st->output_Fs, st->L_frame, st->bwidth, st->hTcxDec->L_frameTCX, st->fscale, encoderLookahead, encoderLookaheadFB, st->preemph_fac_float, st->tcxonly, st->rf_flag, st->igf, st->hIGFDec->infoIGFStopFreq, st->element_mode, st->ini_frame, MCT_flag ); - } - else - { - st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - st->hTcxCfg->last_aldo = 1; - } - } - - if ( st->hTECDec != NULL ) - { - resetTecDec( st->hTECDec ); - } - - if ( st->element_mode != IVAS_SCE ) - { - st->flag_cna = 0; - } - if ( st->ini_frame == 0 ) - { - st->flag_cna = 0; - st->last_flag_cna = 0; - } - - /* Static vectors to zero */ - if ( st->ini_frame == 0 ) - { - st->last_is_cng = 0; - - st->rate_switching_reset = 0; - - if ( st->hTcxDec != NULL ) - { - reset_tcx_overl_buf( st->hTcxDec ); - - set_zero( st->hTcxDec->syn_OverlFB_float, L_FRAME_MAX / 2 ); - set_zero( st->hTcxDec->old_synth_float, OLD_SYNTH_INTERNAL_DEC ); - - set_zero( st->hTcxDec->synth_history, L_PROT48k + L_FRAME_MAX ); - } - - set_zero( st->syn_float, M + 1 ); - - set_zero( st->mem_syn_r_float, L_SYN_MEM ); - - mem_syn_r_size_old = 0; /* just to avoid MSVC warnings */ - mem_syn_r_size_new = 0; /* just to avoid MSVC warnings */ - - st->con_tcx = 0; - } - else - { - /* Reset old_synth in case of core sampling rate switching and Mode 1/2 switching*/ - if ( st->hTcxDec != NULL && ( ( st->L_frame != st->last_L_frame ) || ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) ) ) - { - set_zero( st->hTcxDec->old_synth_float, OLD_SYNTH_INTERNAL_DEC ); - } - - /*Compute size of old and new memories*/ - mem_syn_r_size_old = (int16_t) ( 1.25 * st->last_L_frame / 20.f ); - mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); - - /*Reset LPC mem*/ - if ( ( st->L_frame != st->last_L_frame ) || ( st->last_core == AMR_WB_CORE ) || ( st->last_core == HQ_CORE ) ) - { - set_zero( st->mem_MA, M ); - if ( st->sr_core == INT_FS_16k ) - { - mvr2r( GEWB2_Ave, st->mem_AR, M ); - } - else - { - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - } - - /*Mode 1/2 switching*/ - if ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) - { - mvr2r( st->lsp_old, st->lspold_uw_float, M ); - mvr2r( st->lsf_old, st->lsfold_uw_float, M ); - set_zero( st->syn_float, M ); - } - if ( st->last_core == AMR_WB_CORE ) - { - st->last_core = ACELP_CORE; - st->last_core_bfi = ACELP_CORE; - } - - if ( ( ( st->element_mode != IVAS_CPE_DFT ) || ( st->element_mode == IVAS_CPE_DFT && st->prev_bfi ) ) && st->last_codec_mode == MODE1 && st->last_core == ACELP_CORE ) - { - /* Switching from Mode 1 ACELP */ - st->last_core_bfi = ACELP_CORE; - acelp_plc_mdct_transition( st ); - } - - if ( st->last_codec_mode == MODE2 && - st->L_frame != st->last_L_frame && - ( ( st->m_frame_type == SID_FRAME && st->last_core > ACELP_CORE ) || - ( st->last_core > ACELP_CORE && st->core > ACELP_CORE ) || st->prev_bfi ) ) - { - lerp_flt( st->hHQ_core->old_outLB, st->hHQ_core->old_outLB, st->L_frame, st->last_L_frame ); - } - - /* Rate switching */ - if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) - { - /* Switching from MDCT */ - - /*Reset of ACELP memories*/ - st->rate_switching_reset = 1; - st->tilt_code = TILT_CODE_FLT; - set_zero( st->old_exc, L_EXC_MEM_DEC ); - set_zero( st->syn_float, 1 + M ); - set_zero( st->mem_syn2, M ); - - /*OLA -> zero */ - if ( st->hTcxDec != NULL ) - { - reset_tcx_overl_buf( st->hTcxDec ); - } - - if ( st->hTcxCfg != NULL ) - { - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->syn_OverlFB_float, st->hTcxCfg->tcx_mdct_window_lengthFB ); - st->hTcxCfg->last_aldo = 1; /*It was previously ALDO*/ - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - } - - /*OLA for Mode 2 TCX always reset in Mode switching cases*/ - if ( st->hHQ_core != NULL ) - { - set_f( st->hHQ_core->old_outLB, 0, st->L_frame ); - } - - st->last_core_bfi = TCX_20_CORE; - - if ( st->hPFstat != NULL ) - { - st->hPFstat->on = 0; - } - - /* reset CLDFB memories */ - cldfb_reset_memory_ivas( st->cldfbAna ); - cldfb_reset_memory_ivas( st->cldfbBPF ); - cldfb_reset_memory_ivas( st->cldfbSyn ); - if ( st->cldfbSynHB != NULL ) - { - cldfb_reset_memory_ivas( st->cldfbSynHB ); - } - } - else if ( ( st->L_frame != st->last_L_frame ) && ( st->L_frame <= L_FRAME16k ) && ( st->last_L_frame <= L_FRAME16k ) ) /* Rate switching between 12.8 and 16 kHz*/ - { - /*Interpolation of ACELP memories*/ - - /* convert quantized LSP vector */ - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); - lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); - - lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); - mvr2r( st->lsp_old, st->lspold_uw_float, M ); - mvr2r( st->lsf_old, st->lsfold_uw_float, M ); - - if ( !st->last_con_tcx ) - { - synth_mem_updt2_flt( st->L_frame, st->last_L_frame, st->old_exc, st->mem_syn_r_float, st->mem_syn2, NULL, DEC ); - } - - /*mem of deemphasis stayed unchanged.*/ - } - else if ( st->L_frame != st->last_L_frame ) /* Rate switching involving TCX only modes */ - { - /*Partial reset of ACELP memories*/ - st->rate_switching_reset = 1; - - /*reset partly some memories*/ - st->tilt_code = TILT_CODE_FLT; - if ( !st->last_con_tcx ) - { - set_zero( st->old_exc, L_EXC_MEM_DEC ); - } - set_zero( st->old_Aq_12_8, M + 1 ); - - /*Resamp others memories*/ - /*Size of LPC syn memory*/ - lerp_flt( st->mem_syn_r_float + L_SYN_MEM - mem_syn_r_size_old, st->mem_syn_r_float + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - mvr2r( st->mem_syn_r_float + L_SYN_MEM - M, st->mem_syn2, M ); - } - /* update of lsf_old only needed in BASOP */ - /* else if( !st->tcxonly && (st->L_frame == L_FRAME16k) && (st->last_total_brate > ACELP_32k) ) */ - /* { */ - /* lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); */ - /* } */ - } - - if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->old_synth_len = 2 * st->L_frame; - st->hTcxDec->old_synth_lenFB = 2 * st->hTcxDec->L_frameTCX; - } - - /* bass pf reset */ - st->bpf_gain_param = 0; - if ( st->hBPF != NULL ) - { - set_f( st->hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); - } - - /* Formant postfilter */ - if ( st->ini_frame == 0 ) - { - /* do nothing */ - } - else if ( st->last_codec_mode == MODE2 ) - { - if ( !st->tcxonly ) - { - if ( st->hPFstat->on ) - { - lerp_flt( st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - lerp_flt( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - } - else - { - set_zero( st->hPFstat->mem_stp_flt, L_SYN_MEM ); - set_zero( st->hPFstat->mem_pf_in_flt, L_SYN_MEM ); - st->hPFstat->reset = 1; - st->hPFstat->gain_prec_flt = 1.f; - } - } - else if ( st->hPFstat->on ) - { - lerp_flt( st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - lerp_flt( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - } - } - else - { - /*codec mode switching*/ - - /*reset post-filter except for Narrowband*/ - if ( ( (int16_t) ( st->output_Fs / FRAMES_PER_SEC ) ) != L_FRAME8k ) - { - if ( st->hPFstat != NULL ) - { - st->hPFstat->reset = 1; - if ( st->hPFstat->on != 0 ) - { - st->hPFstat->reset = 0; - lerp_flt( st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_stp_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - lerp_flt( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_old, st->hPFstat->mem_pf_in_flt + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - } - } - } - else - { - /*feed last value old_synth as it is used for pre-emphasis mem*/ - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->old_synth_float[st->hTcxDec->old_synth_len - 1] = st->syn_float[M]; - } - if ( st->hBPF != NULL ) - { - st->hBPF->pst_old_syn[NBPSF_PIT_MAX - 1] = st->syn_float[M]; - } - } - } - - /* lsf and lsp initialization */ - if ( st->ini_frame == 0 ) - { - mvr2r( st->lsp_old, st->lspold_uw_float, M ); - mvr2r( st->lsf_old, st->lsfold_uw_float, M ); - - set_zero( st->lsf_cng_float, M ); - } - - st->seed_tcx_plc = RANDOM_INITSEED; - st->past_gpit_float = 0.0f; - st->past_gcode_float = 0.0f; - st->gc_threshold = 0.0f; - - lsf2lsp( st->lsf_cng_float, st->lspold_cng_float, M, INT_FS_12k8 ); - lsp2a_stab( st->lspold_cng_float, st->Aq_cng_float, M ); - st->plcBackgroundNoiseUpdated = 0; - mvr2r( st->lsf_old, st->lsf_q_cng_float, M ); - mvr2r( st->lsf_old, st->old_lsf_q_cng_float, M ); - mvr2r( st->lsp_old, st->lsp_q_cng_float, M ); - mvr2r( st->lsp_old, st->old_lsp_q_cng_float, M ); - set_zero( st->mem_syn_unv_back_float, M ); - st->last_gain_syn_deemph_float = 1.f; - - if ( st->last_codec_mode == MODE1 || st->ini_frame == 0 ) - { - /* this assumes that MODE1 fades out in the frequency domain - - otherwise some data from MODE1 would be needed here */ - st->last_concealed_gain_syn_deemph_float = 1.f; - if ( hTcxDec != NULL ) - { - hTcxDec->conceal_eof_gain_float = 1.0f; - } - } - /* Post processing */ - set_zero( st->mem_Aq_float, NB_SUBFR16k * ( M + 1 ) ); - - st->lp_ener_bfi = 60.0f; - if ( st->ini_frame == 0 ) - { - st->prev_bfi = 0; - st->last_core_bfi = -1; - if ( st->hTcxDec != NULL ) - { - hTcxDec->tcxConceal_recalc_exc = 0; - } - } - st->prev_old_bfi = 0; - - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->noise_filling_index[0] = st->hTcxDec->noise_filling_index[1] = 0; - st->hTcxDec->tnsActive[0] = st->hTcxDec->tnsActive[1] = 0; - set_f( st->hTcxDec->ltpGainMemory, 0.0f, N_LTP_GAIN_MEMS ); - } - - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - - st->clas_dec = UNVOICED_CLAS; - - if ( !st->last_con_tcx ) - { - st->old_enr_LP_float = 0.0f; /* LP filter E of last good voiced frame or local LP filter E in TD TCX PLC */ - } - - if ( st->prev_bfi ) - { - /* calculate energy at the end of the previous frame */ - if ( st->core == ACELP_CORE && st->last_core == HQ_CORE ) - { - fer_energy( st->hTcxDec->L_frameTCX, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); - } - } - else - { - st->last_good = UNVOICED_CLAS; /* last good received frame for concealment */ - st->enr_old = 0.0f; /* energy at the end of the previous frame */ - } - st->lp_gainc = 0.0f; - st->lp_gainp = 0.0f; - - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->prev_widow_left_rect = 0; - - if ( is_init || MCT_flag || !( st->element_mode == IVAS_CPE_MDCT && st->element_mode == last_element_mode ) ) - { - st->hTcxDec->CngLevelBackgroundTrace_bfi = PLC_MIN_CNG_LEV_FLT; - st->hTcxDec->NoiseLevelIndex_bfi = PLC_MIN_STAT_BUFF_SIZE - 1; - st->hTcxDec->CurrLevelIndex_bfi = 0; - st->hTcxDec->LastFrameLevel_bfi = PLC_MIN_CNG_LEV_FLT; - set_f( st->hTcxDec->NoiseLevelMemory_bfi, PLC_MIN_CNG_LEV_FLT, PLC_MIN_STAT_BUFF_SIZE ); - - st->hTcxDec->cummulative_damping_tcx_float = 1.0f; - } - } - - st->cummulative_damping_float = 1.0f; - - for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) - { - st->old_pitch_buf[i] = (float) st->pit_min; - } - - for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) - { - st->mem_pitch_gain_float[i] = 1.f; - } - - st->old_fpitch_float = (float) st->pit_min; - - st->rate_switching_init = 1; - - st->reset_mem_AR = 0; - - /* For phase dispersion */ - set_zero( st->dispMem, 8 ); - - st->voice_fac_float = -1; /* purely unvoiced */ - - /* TCX-LTP */ - if ( hTcxLtpDec != NULL ) - { - tcxltp_dec_init( hTcxLtpDec, st->ini_frame, st->last_codec_mode, st->element_mode, st->pit_max, st->sr_core ); - } - - /* TCX */ - if ( hTcxDec != NULL ) - { - st->old_fpitchFB_float = (float) hTcxDec->pit_min_TCX; - - if ( st->ini_frame == 0 || ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) ) - { - hTcxDec->tcxltp_last_gain_unmodified_float = 0.f; - } - - /* TCX */ - hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_flag, st->element_mode ); - - hTcxDec->envWeighted = 0; - } - - if ( st->hBPF != NULL ) - { - st->hBPF->pst_mem_deemp_err = 0.0f; - } - - if ( st->tcxonly ) - { - st->p_bpf_noise_buf_float = NULL; - } - else - { - st->p_bpf_noise_buf_float = st->bpf_noise_buf_float; - } - - if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) - { - st->tec_tfa = 1; - } - else - { - st->tec_tfa = 0; - } - - st->tec_flag = 0; - st->tfa_flag = 0; - - /* needed in decoder to read the bitstream */ - st->enableGplc = 0; - - st->flagGuidedAcelp = 0; - st->tonal_mdct_plc_active = 0; - st->T0_4th = L_SUBFR; - st->guidedT0 = st->T0_4th; - - if ( st->hPlcInfo != NULL && total_brate >= HQ_48k && st->element_mode == EVS_MONO ) - { - st->enablePlcWaveadjust = 1; - - if ( st->hTcxDec != NULL && ( st->ini_frame == 0 || last_total_brate < HQ_48k || st->last_codec_mode == MODE1 || st->force_lpd_reset ) ) - { - concealment_init( st->hTcxDec->L_frameTCX, st->hPlcInfo ); - } - } - else - { - st->enablePlcWaveadjust = 0; - } - - /* PLC: [TCX: Tonal Concealment] */ - if ( st->hTonalMDCTConc != NULL && !( st->element_mode > EVS_MONO && st->ini_frame != 0 && st->hTonalMDCTConc->nSamples == st->hTcxDec->L_frameTCX ) ) - { - st->hTonalMDCTConc->nScaleFactors = 0; - st->hTonalMDCTConc->nSamples = 0; - st->hTonalMDCTConc->lastPcmOut_float = 0x0; - st->hTonalMDCTConc->lastBlockData.tonalConcealmentActive = 0; - st->hTonalMDCTConc->lastBlockData.nSamples = 0; - - TonalMDCTConceal_Init_ivas( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); - } - - st->last_tns_active = 0; - st->second_last_tns_active = 0; - st->second_last_core = -1; - - if ( st->hTcxCfg != NULL && - st->element_mode != EVS_MONO ) - { - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( is_init ? total_brate : st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode ); - } - if ( hTcxDec != NULL ) - { - hTcxDec->tcxltp_second_last_pitch_float = st->old_fpitch_float; - hTcxDec->tcxltp_third_last_pitch_float = st->old_fpitch_float; - } - - if ( ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) - { - st->dec_glr = 1; - } - else - { - st->dec_glr = 0; - } - - st->dec_glr_idx = 0; - - st->VAD = 0; - if ( hTcxDec != NULL ) - { - hTcxDec->enableTcxLpc = 1; - - hTcxDec->old_gaintcx_bfi_float = 0.0f; - - hTcxDec->tcx_hm_LtpPitchLag = -1; - } - - if ( st->hTcxCfg != NULL ) - { - st->hTcxCfg->na_scale_flt = 1.f; - } - - return; -} - -#endif /*-----------------------------------------------------------------------* * tcxltp_dec_init() * * Initialization TCX-LTP handle *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tcxltp_dec_init( - TCX_LTP_DEC_HANDLE hTcxLtpDec, - const int16_t ini_frame, - const int16_t last_codec_mode, - const int16_t element_mode, - const int16_t pit_max, - const int32_t sr_core ) -{ - hTcxLtpDec->tcxltp_gain_float = 0.0f; - - hTcxLtpDec->tcxltp = getTcxLtp( sr_core ); - - if ( ini_frame == 0 || ( last_codec_mode == MODE1 && element_mode == EVS_MONO ) ) - { - - hTcxLtpDec->tcxltp_pitch_int = pit_max; - hTcxLtpDec->tcxltp_pitch_fr = 0; - - if ( ini_frame == 0 ) - { - set_f( hTcxLtpDec->tcxltp_mem_in_float, 0.0f, TCXLTP_MAX_DELAY ); - set_f( hTcxLtpDec->tcxltp_mem_out_float, 0.0f, L_FRAME48k ); - hTcxLtpDec->tcxltp_pitch_int_post_prev = 0; - hTcxLtpDec->tcxltp_pitch_fr_post_prev = 0; - hTcxLtpDec->tcxltp_gain_post_prev_float = 0.f; - hTcxLtpDec->tcxltp_filt_idx_prev = -1; - } - } - - return; -} -#endif /*-----------------------------------------------------------------------* * reset_tcx_overl_buf() * * Reset TCX core overlap buffers *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void reset_tcx_overl_buf( - TCX_DEC_HANDLE hTcxDec /* i/o: TCX decoder handle */ -) -{ - set_zero( hTcxDec->old_syn_Overl_float, L_FRAME32k / 2 ); - set_zero( hTcxDec->syn_Overl_TDAC_float, L_FRAME32k / 2 ); - set_zero( hTcxDec->syn_Overl_float, L_FRAME32k / 2 ); - set_zero( hTcxDec->syn_Overl_TDACFB_float, L_FRAME_MAX / 2 ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void reset_tcx_overl_buf_fx( TCX_DEC_HANDLE hTcxDec /* i/o: TCX decoder handle */ ) @@ -785,49 +76,9 @@ void reset_tcx_overl_buf_fx( move16(); return; } -#endif /*-----------------------------------------------------------------------* * acelp_plc_mdct_transition() * * Prepare MDCT OLA memories in TCX/HQ after ACELP PLC *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void acelp_plc_mdct_transition( - Decoder_State *st /* i/o: Decoder state */ -) -{ - float *w; - int16_t W1, nz, delay_comp; - int16_t i; - - /*PLC*/ - if ( st->prev_bfi != 0 && st->hTcxCfg != NULL ) - { - W1 = st->hTcxCfg->tcx_mdct_window_lengthFB; - w = st->hTcxCfg->tcx_mdct_windowFB_flt; - - nz = NS2SA( st->output_Fs, N_ZERO_MDCT_NS ); - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); /*CLDFB delay*/ - mvr2r( st->hHQ_core->fer_samples + delay_comp, st->hTcxDec->syn_OverlFB_float, st->hTcxDec->L_frameTCX / 2 ); - lerp_flt( st->hHQ_core->fer_samples + delay_comp, st->hTcxDec->syn_Overl_float, st->L_frame / 2, st->hTcxDec->L_frameTCX / 2 ); /*ACELP(bfi)->TCX(rect)*/ - /*old_out needed for MODE1 routine and syn_Overl_TDAC for MODE2 routine*/ - set_f( st->hHQ_core->old_out, 0, nz ); - mvr2r( st->hHQ_core->fer_samples + delay_comp, st->hHQ_core->old_out + nz, W1 ); - - for ( i = 0; i < W1; i++ ) - { - st->hHQ_core->old_out[i + nz] *= w[W1 - 1 - i] * w[W1 - 1 - i]; - } - set_f( &st->hHQ_core->old_out[W1 + nz], 0, nz ); - - lerp_flt( st->hHQ_core->old_out, st->hHQ_core->old_outLB, st->L_frame, st->hTcxDec->L_frameTCX ); - - mvr2r( st->hHQ_core->old_out + nz, st->hTcxDec->syn_Overl_TDACFB_float, st->hTcxDec->L_frameTCX / 2 ); - nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); - mvr2r( st->hHQ_core->old_outLB + nz, st->hTcxDec->syn_Overl_TDAC_float, st->L_frame / 2 ); - } - - return; -} -#endif diff --git a/lib_dec/core_dec_init_fx.c b/lib_dec/core_dec_init_fx.c index 6842fe16f..c0a83460a 100644 --- a/lib_dec/core_dec_init_fx.c +++ b/lib_dec/core_dec_init_fx.c @@ -18,7 +18,6 @@ * * Initialization of state variables *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void open_decoder_LPD_fx( Decoder_State *st, const Word32 total_brate, /* Q0 */ @@ -1123,7 +1122,6 @@ void open_decoder_LPD_fx( return; } -#ifdef IVAS_FLOAT_FIXED void tcxltp_dec_init_fx( TCX_LTP_DEC_HANDLE hTcxLtpDec, /* Q0 */ const Word16 ini_frame, /* Q0 */ @@ -1169,9 +1167,7 @@ void tcxltp_dec_init_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void acelp_plc_mdct_transition_fx( Decoder_State *st /* i/o: Decoder state */ ) @@ -1229,9 +1225,7 @@ void acelp_plc_mdct_transition_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void open_decoder_LPD_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word32 total_brate, /* i : total bitrate Q0*/ @@ -2197,5 +2191,3 @@ void open_decoder_LPD_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED -#endif diff --git a/lib_dec/core_dec_reconf.c b/lib_dec/core_dec_reconf.c index 2599303f3..f8f6d6a6f 100644 --- a/lib_dec/core_dec_reconf.c +++ b/lib_dec/core_dec_reconf.c @@ -41,156 +41,3 @@ #include "rom_dec.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * reconfig_decoder_LPD_ivas() - * - * - *---------------------------------------------------------------------*/ - -void reconfig_decoder_LPD_ivas( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t bits_frame, /* i : bit budget */ - const int16_t bwidth, /* i : audio bandwidth */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t L_frame_old /* i : frame length */ -) -{ - int16_t i; - uint16_t newLen, oldLen; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - st->bits_frame = bits_frame; - - if ( bwidth == NB ) - { - st->narrowBand = 1; - } - else if ( bwidth > NB ) - { - st->narrowBand = 0; - } - - BITS_ALLOC_init_config_acelp_IVAS( st->total_brate, st->narrowBand, st->nb_subfr, &( st->acelp_cfg ) ); - - - /*Configuration of partial copy*/ - st->acelp_cfg_rf.mode_index = 1; - st->acelp_cfg_rf.midLpc = 0; - st->acelp_cfg_rf.midLpc_enable = 0; - st->acelp_cfg_rf.pre_emphasis = 0; - st->acelp_cfg_rf.formant_enh = 1; - st->acelp_cfg_rf.formant_tilt = 1; - st->acelp_cfg_rf.voice_tilt = 1; - st->acelp_cfg_rf.formant_enh_num_flt = FORMANT_SHARPENING_G1_FLT; - st->acelp_cfg_rf.formant_enh_den_flt = FORMANT_SHARPENING_G2_FLT; - - if ( st->element_mode != IVAS_SCE ) - { - st->flag_cna = getCnaPresent( st->element_mode, st->element_brate, total_brate, bwidth ); - } - - /* TCX-LTP */ - if ( hTcxLtpDec != NULL ) - { - hTcxLtpDec->tcxltp = getTcxLtp( st->sr_core ); - } - - /*Scale TCX for non-active frames to adjust loudness with ACELP*/ - if ( st->hTcxCfg != NULL ) - { - st->hTcxCfg->na_scale_flt = 1.f; - - if ( bwidth < SWB && !( st->tcxonly ) ) - { - for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) - { - if ( ( bwidth == scaleTcxTable[i].bwmode ) && - ( total_brate >= scaleTcxTable[i].bitrateFrom ) && - ( total_brate < scaleTcxTable[i].bitrateTo ) ) - { - if ( st->rf_flag ) - { - i--; - } - st->hTcxCfg->na_scale_flt = scaleTcxTable[i].scale_flt; - break; - } - } - } - } - - /*if its not the first frame resample overlap buffer to new sampling rate */ - if ( st->ini_frame != 0 ) - { - if ( st->hTcxCfg != NULL && st->fscale != st->fscale_old && !( st->element_mode == EVS_MONO && st->last_codec_mode == MODE1 && st->last_core == ACELP_CORE && st->prev_bfi != 0 ) ) - /* no resempling is needed here when recovering from mode 1 - ACELP PLC, since the buffers are already sampled with the - correct sampling rate in open_decoder_LPD() */ - { - newLen = st->hTcxCfg->tcx_mdct_window_length; - oldLen = st->hTcxCfg->tcx_mdct_window_length_old; - - if ( ( st->prev_bfi && st->last_core_bfi == ACELP_CORE ) || st->last_core == ACELP_CORE ) - { - newLen = st->L_frame / 2; - oldLen = L_frame_old / 2; - } -#ifndef IVAS_FLOAT_FIXED - if ( st->hTcxDec != NULL ) - { - lerp_flt( st->hTcxDec->old_syn_Overl_float, st->hTcxDec->old_syn_Overl_float, newLen, oldLen ); - lerp_flt( st->hTcxDec->syn_Overl_float, st->hTcxDec->syn_Overl_float, newLen, oldLen ); - - if ( st->prev_bfi && st->last_core_bfi == ACELP_CORE ) - { - lerp_flt( st->hTcxDec->syn_Overl_TDAC_float, st->hTcxDec->syn_Overl_TDAC_float, newLen, oldLen ); - } - } -#endif - } - - if ( st->L_frame <= L_FRAME16k ) - { - if ( st->last_L_frame <= L_FRAME16k ) - { - if ( st->L_frame != st->last_L_frame ) - { - if ( st->L_frame > st->last_L_frame ) - { - oldLen = L_SYN_MEM_CLAS_ESTIM * st->last_L_frame / st->L_frame; - newLen = L_SYN_MEM_CLAS_ESTIM; - } - else - { - oldLen = L_SYN_MEM_CLAS_ESTIM; - newLen = L_SYN_MEM_CLAS_ESTIM * st->L_frame / st->last_L_frame; - } - lerp_flt( &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLen], &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLen], newLen, oldLen ); - } - } - else - { - set_zero( st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); - } - } - } - - if ( st->element_mode > IVAS_SCE ) - { - hTcxDec->enableTcxLpc = ( st->numlpc == 1 ) && ( st->lpcQuantization == 1 ) && ( total_brate <= LOWRATE_TCXLPC_MAX_BR_CPE || st->rf_flag ); - } - else - { - hTcxDec->enableTcxLpc = ( st->numlpc == 1 ) && ( st->lpcQuantization == 1 ) && ( total_brate <= LOWRATE_TCXLPC_MAX_BR || st->rf_flag ); - } - - if ( st->ini_frame == 0 ) - { - hTcxDec->envWeighted = 0; - } - - return; -} -#endif diff --git a/lib_dec/core_dec_reconf_fx.c b/lib_dec/core_dec_reconf_fx.c index ca9130393..2eee8cd9f 100644 --- a/lib_dec/core_dec_reconf_fx.c +++ b/lib_dec/core_dec_reconf_fx.c @@ -10,7 +10,6 @@ #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED void reconfig_decoder_LPD_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 bits_frame, /* i : bit budget Q0*/ @@ -193,9 +192,7 @@ void reconfig_decoder_LPD_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void reconfig_decoder_LPD_fx( Decoder_State *st, /* i/o: decoder state structure */ Word16 bits_frame, /* i : bit budget Q0*/ @@ -389,4 +386,3 @@ void reconfig_decoder_LPD_fx( return; } -#endif diff --git a/lib_dec/core_dec_switch.c b/lib_dec/core_dec_switch.c index 2c1adef8d..9fb0cf788 100644 --- a/lib_dec/core_dec_switch.c +++ b/lib_dec/core_dec_switch.c @@ -46,181 +46,3 @@ * * *-------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void mode_switch_decoder_LPD( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t bwidth, /* i : audio bandwidth */ - const int32_t total_brate, /* i : total bitrate */ - const int32_t last_total_brate, /* i : last frame total bitrate */ - const int16_t frame_size_index, /* i : index determining the frame size */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ - const int16_t last_element_mode /* i : last element mode */ -) -{ - int16_t fscale, switchWB; - int32_t sr_core; - int16_t bSwitchFromAmrwbIO; - int16_t frame_size; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - switchWB = 0; - bSwitchFromAmrwbIO = 0; - if ( st->last_core == AMR_WB_CORE ) - { - bSwitchFromAmrwbIO = 1; - } - sr_core = getCoreSamplerateMode2_flt( st->element_mode, total_brate, bwidth, st->flag_ACELP16k, st->rf_flag, st->is_ism_format ); - - fscale = sr2fscale( sr_core ); - - /* set number of coded lines */ - st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( bwidth ); - - if ( ( bwidth >= WB ) && ( fscale == ( FSCALE_DENOM * 16000 ) / 12800 ) && ( fscale == st->fscale ) ) - { - if ( ( ( total_brate > ACELP_32k ) && ( st->tcxonly == 0 ) ) || ( ( total_brate <= ACELP_32k ) && ( st->tcxonly == 1 ) ) ) - { - switchWB = 1; - } - } - - if ( st->last_L_frame > L_FRAME16k && total_brate <= ACELP_32k ) - { - switchWB = 1; /*force init when coming from MODE1*/ - } - - st->igf = getIgfPresent( st->element_mode, total_brate, bwidth, st->rf_flag ); - - if ( st->hIGFDec != NULL ) - { - st->hIGFDec->infoIGFStopFreq = -1; - } - - if ( st->igf && ( st->idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) - { - /* switch IGF configuration */ - IGFDecSetMode_flt( st->hIGFDec, total_brate, bwidth, st->element_mode, -1, -1, st->rf_flag ); - } - - if ( fscale != st->fscale || switchWB || bSwitchFromAmrwbIO || st->last_codec_mode == MODE1 || st->force_lpd_reset ) - { - open_decoder_LPD( st, total_brate, last_total_brate, bwidth, MCT_flag, last_element_mode, 0 ); - } - else - { - assert( fscale > ( FSCALE_DENOM / 2 ) ); - st->fscale_old = st->fscale; - st->fscale = fscale; - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); - } - - if ( st->hTcxCfg != NULL ) - { - st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, total_brate, st->rf_flag ); - st->hTcxCfg->resq = getResq( total_brate ); - } - - hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_flag, st->element_mode ); - - if ( bwidth == NB ) - { - st->narrowBand = 1; - } - else - { - st->narrowBand = 0; - } - st->TcxBandwidth_float = getTcxBandwidth_flt( bwidth ); - - if ( st->hTcxCfg != NULL ) - { - st->hTcxCfg->pCurrentTnsConfig = NULL; - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( total_brate, st->igf, st->element_mode ); - } - - if ( st->hTcxCfg->fIsTNSAllowed && st->hIGFDec != NULL && st->hTcxCfg != NULL ) - { - InitTnsConfigs_flt( bwidth, st->hTcxCfg->tcx_coded_lines, st->hTcxCfg->tnsConfig, st->hIGFDec->infoIGFStopFreq, total_brate, st->element_mode, MCT_flag ); - - SetAllowTnsOnWhite_flt( st->hTcxCfg->tnsConfig, st->element_mode == IVAS_CPE_MDCT ); - } - } - - frame_size = FrameSizeConfig[frame_size_index].frame_net_bits; - reconfig_decoder_LPD_ivas( st, frame_size, bwidth, total_brate, st->last_L_frame ); - - if ( hTcxDec->envWeighted && !hTcxDec->enableTcxLpc ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); - hTcxDec->envWeighted = 0; - } - - /* update PLC LSF memories */ - lsp2lsf( st->lsp_old, st->lsfoldbfi1, M, st->sr_core ); - mvr2r( st->lsfoldbfi1, st->lsfoldbfi0, M ); - mvr2r( st->lsfoldbfi1, st->lsf_adaptive_mean, M ); - - if ( st->igf && st->hBWE_TD != NULL ) - { - /* reset TBE */ - if ( ( st->bwidth == WB && st->last_extl != WB_TBE ) || - ( st->bwidth == SWB && st->last_extl != SWB_TBE ) || - ( st->bwidth == FB && st->last_extl != FB_TBE ) ) - { - TBEreset_dec( st ); - } - else - { - set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - st->hBWE_TD->gain_prec_swb = 1.0f; - } - } - - if ( bwidth == SWB && ( total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) - { - if ( st->tec_tfa == 0 && st->hTECDec != NULL ) - { - set_zero( st->hTECDec->loBuffer_flt, MAX_TEC_SMOOTHING_DEG ); - } - st->tec_tfa = 1; - } - else - { - st->tec_tfa = 0; - } - - st->tec_flag = 0; - st->tfa_flag = 0; - - /* needed in decoder to read the bitstream */ - if ( bwidth >= WB && total_brate == ACELP_24k40 && st->element_mode == EVS_MONO ) - { - st->enableGplc = 1; - } - else - { - st->enableGplc = 0; - } - - if ( ( total_brate == ACELP_9k60 || total_brate == ACELP_16k40 || total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) - { - st->dec_glr = 1; - } - else - { - st->dec_glr = 0; - } - - st->dec_glr_idx = 0; - - return; -} -#endif diff --git a/lib_dec/core_dec_switch_fx.c b/lib_dec/core_dec_switch_fx.c index 10c763093..c7d2c5265 100644 --- a/lib_dec/core_dec_switch_fx.c +++ b/lib_dec/core_dec_switch_fx.c @@ -10,7 +10,6 @@ #include "rom_com.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED void mode_switch_decoder_LPD_fx( Decoder_State *st, /* i/o: decoder state structure */ Word16 bwidth, /* i : audio bandwidth Q0*/ @@ -505,4 +504,3 @@ void mode_switch_decoder_LPD_ivas_fx( move16(); st->dec_glr_idx = 0; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/core_switching_dec.c b/lib_dec/core_switching_dec.c index 9a1e0202c..323deae0a 100644 --- a/lib_dec/core_switching_dec.c +++ b/lib_dec/core_switching_dec.c @@ -44,25 +44,18 @@ #include "ivas_cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED #include "debug.h" /*---------------------------------------------------------------------* * Local prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void core_switch_lb_upsamp( Decoder_State *st, float *output ); -static void smoothTransitionDtxToTcx( float synth[], const int16_t output_frame, const int16_t delay_comp ); -#endif /*---------------------------------------------------------------------* * core_switching_pre_dec() * * Preprocessing/preparation for ACELP/HQ core switching *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error core_switching_pre_dec_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 output_frame, /* i : frame length */ @@ -741,1302 +734,207 @@ ivas_error core_switching_pre_dec_ivas_fx( return error; } -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -ivas_error core_switching_pre_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t output_frame, /* i : frame length */ - const int32_t last_core_brate_st0, /* i : channel 0 last core bitrate */ - const int16_t nchan_out, /* i : number of output channels */ - const int16_t last_element_mode, /* i : last_element_mode */ - const int32_t last_element_brate /* i : last element bitrate */ -) -{ - int16_t i, oldLenClasBuff, newLenClasBuff; - ivas_error error; - float tmp; +/*---------------------------------------------------------------------* + * core_switching_hq_prepare_dec() + * + * Preprocessing in the first HQ frame after ACELP frame + * Modify bit allocation for HQ core by removing ACELP subframe budget + *---------------------------------------------------------------------*/ - error = IVAS_ERR_OK; +/*---------------------------------------------------------------------* + * bandwidth_switching_detect() + * + * Classification for band-width switching + *---------------------------------------------------------------------*/ - /* Codec mode switching */ - if ( st->last_codec_mode == MODE2 || ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) && st->element_mode > EVS_MONO ) ) +void bandwidth_switching_detect_ivas_fx( + Decoder_State *st_fx /* i/o: encoder state structure */ +) +{ + test(); + test(); + IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_TD ) && EQ_16( st_fx->idchan, 1 ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) { - mvr2r( st->mem_syn2, st->mem_syn1, M ); - set_f( st->agc_mem2, 0, 2 ); - st->mem_deemph = st->syn_float[M]; - st->bpf_off = 1; - if ( st->hBPF != NULL ) - { - set_f( st->hBPF->pst_old_syn, 0, NBPSF_PIT_MAX ); - st->hBPF->pst_mem_deemp_err = 0; - } - st->psf_lp_noise = st->lp_noise_float; + /* there is no BWE in TD stereo secondary channel and in MDCT stereo, IGF is part of the core decoding -> no BW switching -> reset BWS counters */ + st_fx->prev_bws_cnt = 0; + st_fx->bws_cnt = 0; + st_fx->bws_cnt1 = 0; + move16(); + move16(); + move16(); - /* reset old HB synthesis buffer */ - if ( st->last_L_frame == L_FRAME ) + return; + } + /* update band-width switching counter */ + test(); + test(); + test(); + test(); + IF( GE_16( st_fx->bws_cnt1, N_NS2W_FRAMES ) ) + { + st_fx->bws_cnt1 = 0; + move16(); + } + ELSE IF( GT_32( st_fx->total_brate, ACELP_9k60 ) && LT_32( st_fx->last_core_brate, ACELP_9k60 ) && EQ_16( st_fx->bwidth, SWB ) && EQ_16( st_fx->last_bwidth, WB ) && ( st_fx->last_low_rate_mode == 0 ) ) + { + st_fx->bws_cnt1 = add( st_fx->bws_cnt1, 1 ); + move16(); + } + ELSE IF( st_fx->bws_cnt1 > 0 ) + { + IF( LT_16( st_fx->bwidth, st_fx->last_bwidth ) ) { - st->old_bwe_delay = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); + st_fx->bws_cnt = sub( shl( sub( N_NS2W_FRAMES, st_fx->bws_cnt1 ), 1 ), 1 ); + move16(); } - else + ELSE { - st->old_bwe_delay = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); + st_fx->bws_cnt = 0; + move16(); } - set_f( st->hb_prev_synth_buffer, 0, NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ); - if ( st->hBWE_TD != NULL && st->last_core != ACELP_CORE ) + IF( LT_16( st_fx->bwidth, st_fx->last_bwidth ) ) { - /* reset BWE memories */ - set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; + st_fx->bws_cnt1 = 0; + move16(); } - - /* reset upd_cnt */ - st->upd_cnt = MAX_UPD_CNT; - - st->igf = 0; - - if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) + ELSE { - hf_synth_reset( st->hBWE_zero ); + IF( EQ_16( st_fx->bwidth, SWB ) ) + { + st_fx->bws_cnt1 = add( st_fx->bws_cnt1, 1 ); + move16(); + } + ELSE + { + st_fx->bws_cnt1 = 0; + move16(); + } } + } - if ( st->hBWE_FD != NULL ) + /* update band-width switching counter */ + test(); + test(); + test(); + IF( GE_16( st_fx->bws_cnt, N_WS2N_FRAMES ) ) + { + st_fx->bws_cnt = 0; + move16(); + } + ELSE IF( LT_32( st_fx->total_brate, ACELP_9k60 ) && GT_32( st_fx->last_core_brate, ACELP_9k60 ) && LT_16( st_fx->bwidth, st_fx->last_bwidth ) && EQ_16( st_fx->bwidth, WB ) ) + { + st_fx->bws_cnt = add( st_fx->bws_cnt, 1 ); + move16(); + } + ELSE IF( st_fx->bws_cnt > 0 ) + { + IF( GT_16( st_fx->bwidth, st_fx->last_bwidth ) ) { - set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); + st_fx->bws_cnt1 = shr( sub( N_WS2N_FRAMES, st_fx->bws_cnt ), 1 ); + move16(); } - - if ( st->hHQ_core != NULL ) + ELSE { - set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); - set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); - - set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); - st->hHQ_core->last_max_pos_pulse = 0; - - if ( st->output_Fs > 16000 ) - { - set_f( st->hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); - } - - /* pre-echo */ - st->hHQ_core->pastpre = 0; + st_fx->bws_cnt1 = 0; + move16(); } - /* reset the GSC pre echo energy threshold in case of switching */ - if ( st->hGSCDec != NULL ) + IF( GT_16( st_fx->bwidth, st_fx->last_bwidth ) ) { - st->hGSCDec->Last_frame_ener = (float) MAX_32; + st_fx->bws_cnt = 0; + move16(); } - - if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) + ELSE { - if ( st->element_mode == EVS_MONO ) + IF( EQ_16( st_fx->bwidth, WB ) ) { - st->last_core = HQ_CORE; - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, st->prev_synth_buffer, NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); + st_fx->bws_cnt = add( st_fx->bws_cnt, 1 ); + move16(); } - - if ( st->hHQ_core != NULL ) + ELSE { - set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); - st->hHQ_core->last_max_pos_pulse = 0; - - set_s( st->hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - st->hHQ_core->prev_frm_hfe2 = 0; - st->hHQ_core->prev_stab_hfe2 = 0; + st_fx->bws_cnt = 0; + move16(); } } + } - if ( st->prev_bfi != 0 ) - { - int16_t delay_comp; - - /*switch off Hq Voicing as it was not updated in MODE2*/ - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->oldHqVoicing = 0; - st->hHQ_core->HqVoicing = 0; - } - - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - - if ( !st->last_con_tcx && st->last_core_bfi == ACELP_CORE && st->core == HQ_CORE ) - { - float *realBuffer[CLDFB_NO_COL_MAX_SWITCH], *imagBuffer[CLDFB_NO_COL_MAX_SWITCH]; - float realBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX_SWITCH][CLDFB_NO_CHANNELS_MAX]; - - for ( i = 0; i < CLDFB_NO_COL_MAX_SWITCH; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - /* CLDFB analysis of the synthesis at internal sampling rate */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbAna ) ) != IVAS_ERR_OK ) - { - return error; - } - - cldfbAnalysis_ivas( st->hTcxDec->syn_Overl_float, realBuffer, imagBuffer, delay_comp, st->cldfbAna ); - cldfb_restore_memory_ivas( st->cldfbAna ); + return; +} - /* CLDFB synthesis of the combined signal */ - if ( ( error = cldfb_save_memory_ivas( st->cldfbSyn ) ) != IVAS_ERR_OK ) - { - return error; - } - cldfbSynthesis_ivas( realBuffer, imagBuffer, st->hHQ_core->fer_samples, delay_comp, st->cldfbSyn ); - cldfb_restore_memory_ivas( st->cldfbSyn ); - } +/*---------------------------------------------------------------------* + * bw_switching_pre_proc() + * + * Band-width switching pre-processing + *---------------------------------------------------------------------*/ +void ivas_bw_switching_pre_proc_fx( + Decoder_State *st, /* i/o: decoder state structure */ + const Word32 last_element_brate, /* i : last element bitrate */ + const Word16 nchan_out /* i : number of output channels */, + Word32 *old_syn_12k8_16k_fx, + Word16 Q, + Word16 Q_audio ) +{ + Word16 i; + Word32 syn_dct_fx[L_FRAME]; - if ( !st->last_con_tcx && st->last_core_bfi == ACELP_CORE && st->core == HQ_CORE ) - { - lerp_flt( st->hTcxDec->syn_Overl_float, st->hHQ_core->fer_samples + delay_comp, output_frame / 2, st->last_L_frame / 2 ); - /*Set to zero the remaining part*/ - set_f( st->hHQ_core->fer_samples + delay_comp + output_frame / 2, 0, ( output_frame / 2 ) - delay_comp ); - } - } - st->use_acelp_preq = 0; - st->reset_mem_AR = 0; - } + Flag Overflow = 0; + move32(); - /*FEC*/ - if ( st->L_frame <= L_FRAME16k ) + IF( st->element_mode > EVS_MONO ) { - if ( st->last_L_frame <= L_FRAME16k && st->core != HQ_CORE ) - { - if ( st->L_frame != st->last_L_frame ) - { - if ( st->L_frame > st->last_L_frame ) - { - oldLenClasBuff = L_SYN_MEM_CLAS_ESTIM * st->last_L_frame / st->L_frame; - newLenClasBuff = L_SYN_MEM_CLAS_ESTIM; - } - else - { - oldLenClasBuff = L_SYN_MEM_CLAS_ESTIM; - newLenClasBuff = L_SYN_MEM_CLAS_ESTIM * st->L_frame / st->last_L_frame; - } - lerp_flt( &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - oldLenClasBuff], &st->mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM - newLenClasBuff], newLenClasBuff, oldLenClasBuff ); - } - } - else + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( ( st->core == ACELP_CORE ) && !( EQ_16( st->bfi, 1 ) && EQ_16( st->con_tcx, 1 ) ) && st->hBWE_FD != NULL && !( LE_32( st->core_brate, SID_2k40 ) && EQ_16( st->element_mode, IVAS_CPE_DFT ) && EQ_16( nchan_out, 2 ) ) && !( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && EQ_16( nchan_out, 1 ) && EQ_16( st->idchan, 1 ) && LE_32( last_element_brate, IVAS_SID_5k2 ) ) ) { - set_zero( st->mem_syn_clas_estim, L_SYN_MEM_CLAS_ESTIM ); + /* Calculate tilt of the ACELP core synthesis - needed in SWB BWE decoding */ + Word16 old_syn_12k8_16k_tmp_16fx[L_FRAME16k]; + Copy_Scale_sig_32_16( old_syn_12k8_16k_fx, old_syn_12k8_16k_tmp_16fx, st->L_frame, sub( -1, Q ) ); + st->tilt_wb_fx = round_fx_sat( L_shl_sat( calc_tilt_bwe_fx( old_syn_12k8_16k_tmp_16fx, -1, st->L_frame ), sub( Q, 8 ) ) ); // Q24+(Q-8) - 16 + move16(); } - } - /* Here we only handle cases where last_ppp and last_nelp not updated when coming from CodecB or other cores - within ACELP_CORE if switching from another bitarate to vbr, last_ppp and last_nelp is always updated in the previous frame */ - if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 ) ) - { - st->last_ppp_mode_dec = 0; - st->last_nelp_mode_dec = 0; + return; } - /* Handle state reset of stat_noise_uv_mod memory */ - if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 || st->last_total_brate <= PPP_NELP_2k80 ) ) - { - st->act_count = 3; - st->uv_count = 0; - } - if ( ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && st->last_core == HQ_CORE ) || ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || ( st->element_mode == IVAS_CPE_MDCT && last_element_mode == IVAS_CPE_DFT ) ) && nchan_out == 2 && - st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA && ( last_core_brate_st0 == FRAME_NO_DATA || last_core_brate_st0 == SID_2k40 ) ) ) + test(); + test(); + IF( ( st->core == ACELP_CORE ) && !( EQ_16( st->bfi, 1 ) && EQ_16( st->con_tcx, 1 ) ) ) { - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - st->hPFstat->reset = 1; - } + /*----------------------------------------------------------------------* + * Calculate tilt of the ACELP core synthesis + *----------------------------------------------------------------------*/ - if ( st->L_frame == L_FRAME16k ) - { - mvr2r( TRWB2_Ave, st->lsf_old, M ); /* init of LSP */ - mvr2r( TRWB2_Ave, st->lsfoldbfi1, M ); - mvr2r( TRWB2_Ave, st->lsfoldbfi0, M ); - mvr2r( TRWB2_Ave, st->lsf_adaptive_mean, M ); - lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_16k ); - } - else + st->tilt_wb_fx = ivas_calc_tilt_bwe_fx( old_syn_12k8_16k_fx, Q, st->L_frame ); + move16(); + /*-------------------------------------------------------------------------------* + * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis + *-------------------------------------------------------------------------------*/ + edct_fx( old_syn_12k8_16k_fx, syn_dct_fx, L_FRAME, &Q ); + Word64 W_tmp = 0; + move64(); + Word32 tmp; + Word16 shift; + FOR( i = 0; i < L_FRAME / 2; i++ ) { - mvr2r( TRWB_Ave, st->lsf_old, M ); /* init of LSP */ - mvr2r( TRWB_Ave, st->lsfoldbfi1, M ); - mvr2r( TRWB_Ave, st->lsfoldbfi0, M ); - mvr2r( TRWB_Ave, st->lsf_adaptive_mean, M ); - lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); + W_tmp = W_add( W_tmp, W_shr( W_mult0_32_32( syn_dct_fx[i], syn_dct_fx[i] ), Q ) ); } - - if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && nchan_out == 2 && st->core_brate > SID_2k40 && ( last_core_brate_st0 == FRAME_NO_DATA || last_core_brate_st0 == SID_2k40 ) && st->hTcxDec != NULL ) - { - /* Last frame was Stereo CNG and the synthesis memory is outdated -- reset */ - set_f( st->hTcxDec->old_syn_Overl_float, 0.0f, L_FRAME32k / 2 ); - set_f( st->hFdCngDec->hFdCngCom->olapBufferAna_flt, 0.0f, FFTLEN ); - } - - set_f( st->agc_mem2, 0, 2 ); - st->mem_deemph = 0; - if ( !st->last_con_tcx ) - { - set_f( st->mem_syn2, 0.0f, M ); - } - set_f( st->mem_syn1, 0.0f, M ); - if ( st->hBWE_TD != NULL ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - } - - /* Reset ACELP parameters */ - set_zero( st->mem_MA, M ); - if ( st->sr_core == INT_FS_16k ) - { - mvr2r( GEWB2_Ave, st->mem_AR, M ); - } - else - { - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - st->tilt_code = 0.0f; - st->gc_threshold = 0.0f; - set_f( st->dispMem, 0, 8 ); - - st->last_coder_type = GENERIC; - - fer_energy( output_frame, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); - st->lp_gainp = 0.0f; - st->lp_gainc = (float) sqrt( st->lp_ener ); - - st->last_voice_factor = 0; - st->Last_GSC_noisy_speech_flag = 0; - - /* reset CLDFB memories */ - cldfb_reset_memory_ivas( st->cldfbAna ); - cldfb_reset_memory_ivas( st->cldfbBPF ); - cldfb_reset_memory_ivas( st->cldfbSyn ); - - /* reset TBE memories */ - if ( !st->last_con_tcx && !( ( st->last_core == HQ_CORE ) && st->element_mode > EVS_MONO ) ) - { - set_f( st->old_exc, 0, L_EXC_MEM_DEC ); - } - else if ( st->L_frame < L_FRAME16k ) - { - /* resample from 16kHz to 12.8kHZ */ - synth_mem_updt2_flt( st->L_frame, L_FRAME16k, st->old_exc, st->mem_syn_r_float, st->mem_syn2, NULL, DEC ); - } - - if ( st->hBWE_TD != NULL ) - { - set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); - } - - if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) - { - hf_synth_reset( st->hBWE_zero ); - } - - if ( st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - } - } - - if ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) - { - if ( st->hBWE_TD != NULL ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); - } - - st->tilt_code = 0.0f; - st->gc_threshold = 0.0f; - set_f( st->dispMem, 0, 8 ); - - st->last_coder_type = GENERIC; - - fer_energy( output_frame, UNVOICED_CLAS, st->previoussynth, -1, &st->enr_old, 1 ); - st->lp_gainp = 0.0f; - st->lp_gainc = (float) sqrt( st->lp_ener ); - - st->last_voice_factor = 0; - st->Last_GSC_noisy_speech_flag = 0; - - if ( st->output_Fs >= 16000 && st->hBWE_zero != NULL ) - { - hf_synth_reset( st->hBWE_zero ); - } - - if ( st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - } - - if ( nchan_out == 1 && st->element_mode == IVAS_CPE_DFT && st->element_brate <= IVAS_24k4 && last_element_brate > IVAS_24k4 ) - { - /* update cldbf state with previous frame TCX synthesis when going from a bitrate with residual coding to a bitrate without it */ - int16_t offset; - offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; - mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB - offset, st->cldfbAna->cldfb_state, offset ); - } - } - - if ( st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE || ( ( st->element_mode != EVS_MONO ) && ( st->last_core != HQ_CORE ) ) ) ) - { - set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); - set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); - - set_f( st->hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( st->hHQ_core->last_env, 0, BANDS_MAX ); - st->hHQ_core->last_max_pos_pulse = 0; - - set_s( st->hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - st->hHQ_core->prev_frm_hfe2 = 0; - st->hHQ_core->prev_stab_hfe2 = 0; - if ( st->output_Fs > 16000 ) - { - set_f( st->hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); - } - - if ( st->element_mode != EVS_MONO ) - { - /* Estimate mem_env_delta to reinit env_stab */ - tmp = max( 0, ENV_STAB_EST1 + ( ENV_STAB_EST2 * st->stab_fac_smooth_lt ) + ( ENV_STAB_EST3 * st->log_energy_diff_lt ) ); - st->hHQ_core->mem_env_delta = (int16_t) min( MAX16B, (int32_t) ( tmp * ( 1 << 12 ) ) ); /* Convert to Q12 and handle saturation */ - - if ( st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) - { - set_f( st->hHQ_core->old_out, 0, output_frame ); - set_f( st->hHQ_core->old_outLB, 0, L_FRAME16k ); - } - - st->hHQ_core->no_att_hangover = 0; - st->hHQ_core->energy_lt = 300.0f; - - set_s( st->hHQ_core->old_is_transient, 0, 3 ); - set_f( st->hHQ_core->prev_noise_level, 0.0f, 2 ); - st->hHQ_core->prev_R = 0; - set_s( st->hHQ_core->mem_norm + 1, 39, SFM_N_ENV_STAB - 1 ); - st->hHQ_core->prev_hqswb_clas = HQ_NORMAL; - st->hHQ_core->prev_ni_ratio = 0.5f; - set_f( st->hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); - } - else - { - set_f( st->hHQ_core->old_out, 0, output_frame ); - set_f( st->hHQ_core->old_outLB, 0, L_FRAME16k ); - } - } - - /* handle switching cases where preecho_sb was not called in the last frame (memory not up to date) */ - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->pastpre--; - if ( st->hHQ_core->pastpre <= 0 ) - { - reset_preecho_dec( st->hHQ_core ); - } - } - - if ( st->core_brate == FRAME_NO_DATA ) - { - st->VAD = 0; - st->m_frame_type = ZERO_FRAME; - } - else if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) - { - st->VAD = 0; - st->m_frame_type = SID_FRAME; - } - else - { - st->VAD = 1; - st->m_frame_type = ACTIVE_FRAME; - } - - /*switch on CNA on active frames*/ - if ( st->element_mode == EVS_MONO ) /* for IVAS modes, st->flag_cna is set earlier */ - { - if ( st->VAD && ( ( st->core != AMR_WB_CORE && st->total_brate <= CNA_MAX_BRATE ) || ( st->core == AMR_WB_CORE && st->total_brate <= ACELP_8k85 ) ) ) - { - st->flag_cna = 1; - } - else if ( st->VAD || ( ( st->cng_type == FD_CNG ) && ( st->L_frame == L_FRAME16k ) ) ) - { - st->flag_cna = 0; - } - } - - if ( st->core == AMR_WB_CORE ) - { - st->cng_type = LP_CNG; - } - - /* Reconfigure CNG */ - if ( st->hFdCngDec && ( ( st->last_L_frame != st->L_frame ) || ( st->hFdCngDec->hFdCngCom->frameSize != st->L_frame ) || st->ini_frame == 0 || st->bwidth != st->last_bwidth ) ) - { - /* || st->last_core == AMR_WB_CORE || st->last_codec_mode == MODE2)){*/ - if ( st->core != AMR_WB_CORE ) - { - configureFdCngDec( st->hFdCngDec, st->bwidth, st->rf_flag == 1 && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); - } - else - { - configureFdCngDec( st->hFdCngDec, WB, ACELP_8k00, st->L_frame, st->last_L_frame, st->element_mode ); - - if ( st->VAD ) - { - st->hFdCngDec->hFdCngCom->CngBitrate = st->total_brate; - } - } - if ( st->last_L_frame != st->L_frame && st->L_frame <= L_FRAME16k && st->last_L_frame <= L_FRAME16k ) - { - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - lerp_flt( st->hFdCngDec->hFdCngCom->olapBufferAna_flt + st->last_L_frame, st->hFdCngDec->hFdCngCom->olapBufferAna_flt + st->L_frame, st->L_frame, st->last_L_frame ); - } - - lerp_flt( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, st->L_frame * 2, st->last_L_frame * 2 ); - - if ( st->total_brate <= SID_2k40 && st->last_total_brate <= SID_2k40 ) - { - lerp_flt( st->hFdCngDec->hFdCngCom->olapBufferSynth_flt, st->hFdCngDec->hFdCngCom->olapBufferSynth_flt, st->L_frame * 2, st->last_L_frame * 2 ); - - if ( st->L_frame == L_FRAME ) - { - for ( i = 0; i < st->L_frame * 2; i++ ) - { - st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[i] = st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[i] * 0.6250f; - } - } - else - { - for ( i = 0; i < st->L_frame * 2; i++ ) - { - st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[i] = st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[i] * 1.6f; - } - } - } - } - } - - return error; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * core_switching_post_dec() - * - * Postprocessing for ACELP/HQ core switching - *---------------------------------------------------------------------*/ -ivas_error core_switching_post_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float *synth, /* i/o: output synthesis */ - float *output, /* i/o: LB synth/upsampled LB synth */ - float output_mem[], /* i : OLA memory from last TCX/HQ frame */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ - const int16_t output_frame, /* i : frame length */ - const int16_t core_switching_flag, /* i : ACELP->HQ switching flag */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - const int16_t nchan_out, /* i : number of output channels */ - const int16_t last_element_mode /* i : element mode of previous frame */ -) -{ - int16_t i, delay_comp, delta; - float tmpF; - float tmpDelta; - float synth_subfr_out[SWITCH_MAX_GAP], synth_subfr_bwe[SWITCH_MAX_GAP]; - float mem_synth[NS2SA( 16000, DELAY_CLDFB_NS ) + 2]; - int16_t nZeros; - int16_t offset; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( st->core == ACELP_CORE && st->bfi && st->hHQ_core != NULL && !st->con_tcx ) - { - if ( ( error = acelp_core_switch_dec_bfi( st ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* set multiplication factor according to the sampling rate */ - delta = 1; - if ( output_frame == L_FRAME16k ) - { - delta = 2; - } - else if ( output_frame == L_FRAME32k ) - { - delta = 4; - } - else if ( output_frame == L_FRAME48k ) - { - delta = 6; - } - - /* set delay compensation between HQ synthesis and ACELP synthesis */ - delay_comp = delta * HQ_DELAY_COMP; - - /* Core switching done in DFT domain afterward*/ - if ( ( st->element_mode != IVAS_CPE_DFT || use_cldfb_for_dft ) && ( !sba_dirac_stereo_flag || ( sba_dirac_stereo_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) ) - { - if ( st->core == HQ_CORE || st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->core == ACELP_CORE && st->bfi == 1 && st->con_tcx == 1 ) ) - { - st->use_acelp_preq = 0; - if ( st->hBWE_FD != NULL ) - { - st->hBWE_FD->mem_deemph_old_syn = 0.0f; - } - - if ( st->element_mode == EVS_MONO && st->core == HQ_CORE ) /* ACELP->HQ-CORE */ - { - if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - if ( ( error = acelp_core_switch_dec( st, synth_subfr_out, synth_subfr_bwe, output_frame, core_switching_flag, mem_synth, nchan_out ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( core_switching_flag && st->last_core == HQ_CORE && st->prev_bfi ) - { - mvr2r( st->delay_buf_out, synth_subfr_out, delay_comp ); - } - } - - /* delay HQ synthesis to synchronize with ACELP synthesis */ - delay_signal_float( synth, output_frame, st->delay_buf_out, delay_comp ); - - if ( st->element_mode == EVS_MONO && st->core == HQ_CORE ) /* ACELP->HQ-CORE */ - { - if ( core_switching_flag && st->last_L_frame == st->last_L_frame_ori && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - core_switching_OLA( mem_synth, st->last_L_frame, st->output_Fs, synth, synth_subfr_out, synth_subfr_bwe, output_frame, st->bwidth ); - } - else if ( core_switching_flag && st->last_core == HQ_CORE && st->prev_bfi ) /* HQ | ACELP | TRANSITION with ACELP frame lost */ - { - /* Overlap between old->out[] (stocked in st->fer_samples[]) and good HQ frame on L/2 */ - nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); - tmpDelta = 1.0f / (float) ( output_frame >> 1 ); - for ( i = 0; i < ( output_frame >> 1 ); i++ ) - { - tmpF = (float) i * tmpDelta; - synth[i + delay_comp] = ( 1 - tmpF ) * st->hHQ_core->fer_samples[i + nZeros] + synth[i + delay_comp] * tmpF; - } - } - else if ( ( !core_switching_flag && st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) || /* ACELP | TRANSITION | HQ with TRANSITION lost */ - ( core_switching_flag && st->prev_bfi && st->last_L_frame != st->last_L_frame_ori ) ) /* ACELP@12k8 | ACELP@16k | TRANSITION with ACELP@16k lost */ - { - /* Overlap between CELP estimation (BFI) and good HQ frame on L/2 */ - tmpDelta = 1.0f / (float) ( output_frame >> 1 ); - for ( i = 0; i < ( output_frame >> 1 ); i++ ) - { - tmpF = (float) i * tmpDelta; - synth[i] = synth[i] * tmpF + ( 1 - tmpF ) * st->hHQ_core->fer_samples[i]; - } - } - } - else if ( ( ( st->last_core == ACELP_CORE || st->last_core_bfi == ACELP_CORE ) && !( st->prev_bfi == 1 && st->last_con_tcx == 1 ) ) || st->last_core == AMR_WB_CORE ) /*ACELP->TCX/HQ*/ - { - /* if this is first active MDCT-Stereo frame after a CNG frame and output format is mono DMX, this should only be done for the zero-th channel, the other one will simply be copied over after this function */ - if ( ( ( st->last_core_brate != SID_2k40 && st->last_core_brate != FRAME_NO_DATA ) || ( st->element_mode != IVAS_CPE_DFT && st->element_mode != IVAS_CPE_TD ) || nchan_out == 1 ) && !( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 && ( nchan_out == 1 || last_element_mode == IVAS_CPE_DFT ) ) ) - { - core_switch_lb_upsamp( st, output ); - } - - mvr2r( st->previoussynth, synth, delay_comp ); - - /* Overlap between TCX-LB and TCX-FB*/ - tmpDelta = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); - for ( i = 0; i < tmpDelta; i++ ) - { - synth[i + delay_comp] = ( synth[i + delay_comp] * i + ( tmpDelta - i ) * st->previoussynth[i + delay_comp] ) / tmpDelta; - } - - if ( ( st->element_mode == IVAS_CPE_MDCT || ( ivas_format == ISM_FORMAT && st->core == TCX_20_CORE /* <- means TCX in general, TCX10 is forbidden after ACELP */ ) ) && st->last_core_brate <= SID_2k40 && st->core_brate > SID_2k40 ) - { - /* smooth transitions to avoid pops in car noise items */ - smoothTransitionDtxToTcx( synth, output_frame, delay_comp ); - } - - /* Reset memories of CLDFBs */ - if ( st->cldfbAna != NULL ) - { - if ( st->cldfbAna->no_channels * st->cldfbAna->no_col != st->L_frame ) - { - configureCldfb_ivas( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); - configureCldfb_ivas( st->cldfbBPF, min( 16000, st->L_frame * FRAMES_PER_SEC ) ); - } - - cldfb_reset_memory_ivas( st->cldfbAna ); - cldfb_reset_memory_ivas( st->cldfbBPF ); - } - cldfb_reset_memory_ivas( st->cldfbSyn ); - - /* Update memories for CLDFB ana for eventual next ACELP frame */ - if ( st->cldfbAna != NULL ) - { - delta = st->cldfbAna->no_channels; - offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; - for ( i = 0; i < delta; i++ ) - { - st->cldfbAna->cldfb_state[offset - delta + i] = - output[st->L_frame - delta + i] * ( (float) ( i + 1 ) ) / ( (float) delta ); - } - } - } - else if ( st->element_mode != EVS_MONO ) - { - /* Reset memories of CLDFBs */ - if ( st->cldfbAna != NULL ) - { - if ( st->cldfbAna->no_channels * st->cldfbAna->no_col != st->L_frame ) - { - configureCldfb_ivas( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); - configureCldfb_ivas( st->cldfbBPF, min( 16000, st->L_frame * FRAMES_PER_SEC ) ); - } - - cldfb_reset_memory_ivas( st->cldfbAna ); - cldfb_reset_memory_ivas( st->cldfbBPF ); - } - - if ( st->cldfbSyn != NULL ) - { - cldfb_reset_memory_ivas( st->cldfbSyn ); - } - - /* Update memories for CLDFB ana for eventual next ACELP frame */ - /* Analysis CLDF memory is fed with ramped signal for last slot */ - if ( st->cldfbAna != NULL ) - { - delta = st->cldfbAna->no_channels; - offset = st->cldfbAna->p_filter_length - st->cldfbAna->no_channels; - for ( i = 0; i < delta; i++ ) - { - st->cldfbAna->cldfb_state[offset - delta + i] = - output[st->L_frame - delta + i] * ( (float) ( i + 1 ) ) / ( (float) delta ); - } - } - } - - if ( st->hBWE_TD != NULL ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; - } - - if ( st->hHQ_core != NULL && !( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->core_brate <= HQ_32k ) ) - { - set_f( st->hHQ_core->prev_env, 0, SFM_N_WB ); - set_f( st->hHQ_core->prev_normq, 0, SFM_N_WB ); - } - - mvr2r( synth, st->previoussynth, output_frame ); - - /*Set post-filtering flag to zero*/ - if ( st->hBPF != NULL ) - { - st->hPFstat->on = 0; - } - } - else - { - /* MDCT to ACELP transition */ - if ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) - { - nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); - mvr2r( st->delay_buf_out, synth, delay_comp ); /* copy the HQ/ACELP delay synchronization buffer at the beginning of ACELP frame */ - - if ( st->prev_bfi && st->hHQ_core != NULL && st->hHQ_core->HqVoicing && st->last_core == HQ_CORE ) - { - mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + nZeros, NS2SA( st->output_Fs, 3000000 ) ); - } - - tmpF = 1.0f / (float) NS2SA( st->output_Fs, 3000000 ); - - if ( st->element_mode == IVAS_CPE_TD && st->hHQ_core == NULL ) - { - for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) - { - synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * output_mem[i] + tmpF * (float) i * synth[i + delay_comp]; - } - } - else if ( st->element_mode == IVAS_CPE_MDCT && st->core_brate <= SID_2k40 && st->prev_bfi ) - { - for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) - { - synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + nZeros] * st->hTcxDec->conceal_eof_gain_float + tmpF * (float) i * synth[i + delay_comp]; - } - } - else - { - for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) - { - synth[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + nZeros] + tmpF * (float) i * synth[i + delay_comp]; - } - } - } - - set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->oldHqVoicing = 0; - } - } - } - else - { - /* memory update needed for DFT stereo -> TD stereo switching */ - mvr2r( synth + output_frame - delay_comp, st->delay_buf_out, delay_comp ); - } - - /* reset SWB BWE buffers */ - if ( st->bws_cnt == 0 || ( st->bws_cnt > 0 && st->coder_type != INACTIVE && st->coder_type != AUDIO ) ) - { - st->attenu1 = 0.1f; - } - - if ( st->hBWE_FD != NULL && - ( ( st->last_extl != SWB_BWE && st->extl == SWB_BWE ) || ( st->last_extl != FB_BWE && st->extl == FB_BWE ) || - ( ( st->last_core == HQ_CORE || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_extl == SWB_TBE ) && st->extl < 0 && st->core == ACELP_CORE ) || ( st->last_core == ACELP_CORE && st->core == ACELP_CORE && ( ( st->prev_coder_type != INACTIVE && st->coder_type != INACTIVE ) || ( st->prev_coder_type != AUDIO && st->coder_type == AUDIO ) ) && st->bws_cnt > 0 ) ) ) - { - set_f( st->hBWE_FD->old_wtda_swb, 0, output_frame ); - - if ( st->last_extl != WB_BWE ) - { - st->hBWE_FD->prev_mode = NORMAL; - } - - st->hBWE_FD->prev_Energy = 0.0f; - st->hBWE_FD->prev_L_swb_norm = 8; - st->hBWE_FD->prev_frica_flag = 0; - set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); - st->hBWE_FD->prev_td_energy = 0.0f; - st->hBWE_FD->prev_weight = 0.2f; - st->hBWE_FD->prev_fb_ener_adjust = 0.0f; - } - - /* reset WB BWE buffers */ - if ( st->last_extl != WB_BWE && st->extl == WB_BWE && st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->old_wtda_swb, 0, output_frame ); - - if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) - { - st->hBWE_FD->prev_mode = NORMAL; - } - - st->hBWE_FD->prev_Energy_wb = 0.0f; - st->hBWE_FD->prev_L_swb_norm = 8; - set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); - st->hBWE_FD->prev_flag = 0; - } - - /* reset TBE buffers */ - if ( st->hBWE_TD != NULL ) - { - /* reset SWB TBE buffers */ - if ( ( ( st->extl == SWB_TBE || st->extl == FB_TBE || st->extl == SWB_CNG ) && - ( st->L_frame != st->last_L_frame || ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) || st->last_core == HQ_CORE ) ) || - ( st->bwidth < st->last_bwidth && st->last_extl != SWB_TBE ) || st->old_ppp_mode || ( ( st->prev_coder_type == AUDIO || st->prev_coder_type == INACTIVE ) && st->bws_cnt > 0 ) || ( st->bws_cnt == 0 && st->prev_bws_cnt == N_WS2N_FRAMES ) ) - { - swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); - - /* reset GainShape delay for SWB TBE FEC */ - set_f( st->hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); - - swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); - - if ( output_frame == L_FRAME16k ) - { - set_f( st->hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); /* reset in case that SWB TBE layer is transmitted, but the output is 16kHz sampled */ - } - - set_f( st->hBWE_TD->int_3_over_2_tbemem_dec, 0.0f, INTERP_3_2_MEM_LEN ); - st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; - st->hBWE_TD->prev_mix_factor = 1.0f; - } - else if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && ( ( st->element_mode == IVAS_CPE_TD && st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || ( st->element_mode != IVAS_CPE_TD && st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) || ( st->last_codec_mode != MODE1 ) || ( st->rf_flag != st->rf_flag_last ) ) ) - { - set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - st->hBWE_TD->gain_prec_swb = 1.0f; - } - else if ( st->hBWE_TD != NULL && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) - { - TBEreset_dec( st ); - } - - /* reset FB TBE buffers */ - if ( ( st->L_frame != st->last_L_frame || st->last_extl != FB_TBE ) && st->extl == FB_TBE ) - { - set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - st->hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); - } - - /* reset WB TBE buffers */ - if ( st->last_extl != WB_TBE && st->extl == WB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) - { - wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - wb_tbe_extras_reset_synth( st->hBWE_TD->state_lsyn_filt_shb, st->hBWE_TD->state_lsyn_filt_dwn_shb, st->hBWE_TD->mem_resamp_HB ); - - set_f( st->hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); - set_f( st->hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_csfilt, 0, 2 ); - } - } - - /* Interp_3_2 CNG buffers reset */ - if ( st->hTdCngDec != NULL && st->output_Fs == 48000 && ( st->last_core_brate > SID_2k40 ) && ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && st->hTdCngDec != NULL ) - { - set_f( st->hTdCngDec->interpol_3_2_cng_dec, 0.0f, INTERP_3_2_MEM_LEN ); - } - - return error; -} - -#endif -/*---------------------------------------------------------------------* - * core_switching_hq_prepare_dec() - * - * Preprocessing in the first HQ frame after ACELP frame - * Modify bit allocation for HQ core by removing ACELP subframe budget - *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void core_switching_hq_prepare_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *num_bits, /* i/o: bit budget update */ - const int16_t output_frame /* i : output frame length */ -) -{ - int32_t cbrate; - - if ( st->last_core == HQ_CORE && st->prev_bfi ) - { - mvr2r( st->hHQ_core->old_out, st->hHQ_core->fer_samples, output_frame ); - } - - /* set switching frame bitrate */ - if ( st->last_L_frame == L_FRAME ) - { - if ( st->core_brate > ACELP_24k40 ) - { - cbrate = ACELP_24k40; - } - else - { - cbrate = st->core_brate; - } - - /* subtract ACELP switching frame bits */ - if ( st->core_brate >= ACELP_11k60 ) - { - ( *num_bits )--; /* LP_FLAG bit */ - } - - *num_bits -= ACB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* pitch bits*/ - *num_bits -= gain_bits_tbl[BIT_ALLOC_IDX( cbrate, TRANSITION, 0, 0 )]; /* gain bits */ - *num_bits -= FCB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ - } - else /* L_frame == L_FRAME16k */ - { - if ( st->core_brate <= ACELP_8k00 ) - { - cbrate = ACELP_8k00; - } - else if ( st->core_brate <= ACELP_14k80 ) - { - cbrate = ACELP_14k80; - } - else - { - cbrate = min( st->core_brate, ACELP_22k60 ); - } - - /* subtract ACELP switching frame bits */ - if ( st->core_brate >= ACELP_11k60 ) - { - /* subtract one bit for LP filtering flag */ - ( *num_bits )--; - } - *num_bits -= ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* pitch bits*/ - *num_bits -= gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* gain bits */ - *num_bits -= FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ - } - - /* subtract BWE bits */ - if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) - { - *num_bits -= ( NOOFGAINBITS1 + AUDIODELAYBITS ); - } - - /* reset state of old_out if switching */ - set_f( st->hHQ_core->old_out, 0.0f, output_frame ); - - return; -} -#endif - -/*---------------------------------------------------------------------* - * bandwidth_switching_detect() - * - * Classification for band-width switching - *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void bandwidth_switching_detect( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - if ( ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) || st->element_mode == IVAS_CPE_MDCT ) - { - /* there is no BWE in TD stereo secondary channel and in MDCT stereo, IGF is part of the core decoding -> no BW switching -> reset BWS counters */ - st->prev_bws_cnt = 0; - st->bws_cnt = 0; - st->bws_cnt1 = 0; - - return; - } - - /* update band-width switching counter */ - if ( st->bws_cnt1 >= N_NS2W_FRAMES ) - { - st->bws_cnt1 = 0; - } - else if ( st->total_brate > ACELP_9k60 && st->last_core_brate < ACELP_9k60 && st->bwidth == SWB && st->last_bwidth == WB && st->last_low_rate_mode == 0 ) - { - st->bws_cnt1++; - } - else if ( st->bws_cnt1 > 0 ) - { - st->bws_cnt = st->bwidth < st->last_bwidth ? 2 * ( N_NS2W_FRAMES - st->bws_cnt1 ) - 1 : 0; - st->bws_cnt1 = st->bwidth < st->last_bwidth ? 0 : ( ( st->bwidth == SWB ) ? st->bws_cnt1 + 1 : 0 ); - } - - /* update band-width switching counter */ - if ( st->bws_cnt >= N_WS2N_FRAMES ) - { - st->bws_cnt = 0; - } - else if ( st->total_brate < ACELP_9k60 && st->last_core_brate > ACELP_9k60 && st->bwidth < st->last_bwidth && st->bwidth == WB ) - { - st->bws_cnt++; - } - else if ( st->bws_cnt > 0 ) - { - st->bws_cnt1 = st->bwidth > st->last_bwidth ? ( ( N_WS2N_FRAMES - st->bws_cnt ) >> 1 ) : 0; - st->bws_cnt = st->bwidth > st->last_bwidth ? 0 : ( ( st->bwidth == WB ) ? st->bws_cnt + 1 : 0 ); - } - - return; -} -#else -void bandwidth_switching_detect_ivas_fx( - Decoder_State *st_fx /* i/o: encoder state structure */ -) -{ - test(); - test(); - IF( ( EQ_16( st_fx->element_mode, IVAS_CPE_TD ) && EQ_16( st_fx->idchan, 1 ) ) || EQ_16( st_fx->element_mode, IVAS_CPE_MDCT ) ) - { - /* there is no BWE in TD stereo secondary channel and in MDCT stereo, IGF is part of the core decoding -> no BW switching -> reset BWS counters */ - st_fx->prev_bws_cnt = 0; - st_fx->bws_cnt = 0; - st_fx->bws_cnt1 = 0; - move16(); - move16(); - move16(); - - return; - } - /* update band-width switching counter */ - test(); - test(); - test(); - test(); - IF( GE_16( st_fx->bws_cnt1, N_NS2W_FRAMES ) ) - { - st_fx->bws_cnt1 = 0; - move16(); - } - ELSE IF( GT_32( st_fx->total_brate, ACELP_9k60 ) && LT_32( st_fx->last_core_brate, ACELP_9k60 ) && EQ_16( st_fx->bwidth, SWB ) && EQ_16( st_fx->last_bwidth, WB ) && ( st_fx->last_low_rate_mode == 0 ) ) - { - st_fx->bws_cnt1 = add( st_fx->bws_cnt1, 1 ); - move16(); - } - ELSE IF( st_fx->bws_cnt1 > 0 ) - { - IF( LT_16( st_fx->bwidth, st_fx->last_bwidth ) ) - { - st_fx->bws_cnt = sub( shl( sub( N_NS2W_FRAMES, st_fx->bws_cnt1 ), 1 ), 1 ); - move16(); - } - ELSE - { - st_fx->bws_cnt = 0; - move16(); - } - - IF( LT_16( st_fx->bwidth, st_fx->last_bwidth ) ) - { - st_fx->bws_cnt1 = 0; - move16(); - } - ELSE - { - IF( EQ_16( st_fx->bwidth, SWB ) ) - { - st_fx->bws_cnt1 = add( st_fx->bws_cnt1, 1 ); - move16(); - } - ELSE - { - st_fx->bws_cnt1 = 0; - move16(); - } - } - } - - /* update band-width switching counter */ - test(); - test(); - test(); - IF( GE_16( st_fx->bws_cnt, N_WS2N_FRAMES ) ) - { - st_fx->bws_cnt = 0; - move16(); - } - ELSE IF( LT_32( st_fx->total_brate, ACELP_9k60 ) && GT_32( st_fx->last_core_brate, ACELP_9k60 ) && LT_16( st_fx->bwidth, st_fx->last_bwidth ) && EQ_16( st_fx->bwidth, WB ) ) - { - st_fx->bws_cnt = add( st_fx->bws_cnt, 1 ); - move16(); - } - ELSE IF( st_fx->bws_cnt > 0 ) - { - IF( GT_16( st_fx->bwidth, st_fx->last_bwidth ) ) - { - st_fx->bws_cnt1 = shr( sub( N_WS2N_FRAMES, st_fx->bws_cnt ), 1 ); - move16(); - } - ELSE - { - st_fx->bws_cnt1 = 0; - move16(); - } - - IF( GT_16( st_fx->bwidth, st_fx->last_bwidth ) ) - { - st_fx->bws_cnt = 0; - move16(); - } - ELSE - { - IF( EQ_16( st_fx->bwidth, WB ) ) - { - st_fx->bws_cnt = add( st_fx->bws_cnt, 1 ); - move16(); - } - ELSE - { - st_fx->bws_cnt = 0; - move16(); - } - } - } - - return; -} -#endif - - -/*---------------------------------------------------------------------* - * bw_switching_pre_proc() - * - * Band-width switching pre-processing - *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void bw_switching_pre_proc( - Decoder_State *st, /* i/o: decoder state structure */ - const float *old_syn_12k8_16k, /* i : ACELP core synthesis at 12.8kHz or 16kHz */ - const int32_t last_element_brate, /* i : last element bitrate */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - int16_t i; - float syn_dct[L_FRAME]; - - if ( st->element_mode > EVS_MONO ) - { - if ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) && st->hBWE_FD != NULL && !( st->core_brate <= SID_2k40 && st->element_mode == IVAS_CPE_DFT && nchan_out == 2 ) && !( st->element_mode == IVAS_CPE_MDCT && nchan_out == 1 && st->idchan == 1 && last_element_brate <= IVAS_SID_5k2 ) ) - { - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); - } - - return; - } - - if ( st->core == ACELP_CORE && !( st->bfi == 1 && st->con_tcx == 1 ) ) - { - /*----------------------------------------------------------------------* - * Calculate tilt of the ACELP core synthesis - *----------------------------------------------------------------------*/ - - calc_tilt_bwe( old_syn_12k8_16k, &st->tilt_wb, st->L_frame ); - - /*-------------------------------------------------------------------------------* - * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis - *-------------------------------------------------------------------------------*/ - - edct( old_syn_12k8_16k, syn_dct, L_FRAME, st->element_mode ); - - st->enerLL = EPSILON; - for ( i = 0; i < L_FRAME / 2; i++ ) - { - st->enerLL += syn_dct[i] * syn_dct[i]; - } - st->enerLL = (float) sqrt( st->enerLL / 128 ); - - st->enerLH = EPSILON; - for ( ; i < L_FRAME; i++ ) - { - st->enerLH += syn_dct[i] * syn_dct[i]; - } - st->enerLH = (float) sqrt( st->enerLH / 128 ); - } - else - { - if ( st->hHQ_core->old_is_transient[0] ) - { - st->enerLL = EPSILON; - for ( i = 0; i < 32; i++ ) - { - st->enerLL += st->t_audio_q[i] * st->t_audio_q[i]; - } - st->enerLL = (float) sqrt( st->enerLL / 32 ); - - st->enerLH = EPSILON; - for ( ; i < 64; i++ ) - { - st->enerLH += st->t_audio_q[i] * st->t_audio_q[i]; - } - st->enerLH = (float) sqrt( st->enerLH / 32 ); - } - else - { - st->enerLL = EPSILON; - for ( i = 0; i < L_FRAME / 2; i++ ) - { - st->enerLL += st->t_audio_q[i] * st->t_audio_q[i]; - } - st->enerLL = (float) sqrt( st->enerLL / 128 ); - - st->enerLH = EPSILON; - for ( ; i < L_FRAME; i++ ) - { - st->enerLH += st->t_audio_q[i] * st->t_audio_q[i]; - } - st->enerLH = (float) sqrt( st->enerLH / 128 ); - } - } - - if ( st->last_bwidth == 0 && st->extl <= SWB_CNG ) - { - st->prev_ener_shb = 0.0f; - if ( st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->prev_SWB_fenv, 0, SWB_FENV ); - } - } - else if ( ( ( st->core == ACELP_CORE && ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || st->last_core == TCX_20_CORE ) ) || ( st->core == st->last_core && st->extl != st->last_extl ) ) && st->last_bwidth >= SWB ) - { - st->attenu1 = 0.1f; - } - - if ( st->last_core == HQ_CORE || ( st->last_core == ACELP_CORE && !( st->last_extl == WB_TBE || st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) && st->core_brate > ACELP_8k00 ) ) - { - st->prev_fractive = 0; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void ivas_bw_switching_pre_proc_fx( - Decoder_State *st, /* i/o: decoder state structure */ - const Word32 last_element_brate, /* i : last element bitrate */ - const Word16 nchan_out /* i : number of output channels */, - Word32 *old_syn_12k8_16k_fx, - Word16 Q, - Word16 Q_audio ) -{ - Word16 i; - Word32 syn_dct_fx[L_FRAME]; - - - Flag Overflow = 0; - move32(); - - IF( st->element_mode > EVS_MONO ) - { - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - IF( ( st->core == ACELP_CORE ) && !( EQ_16( st->bfi, 1 ) && EQ_16( st->con_tcx, 1 ) ) && st->hBWE_FD != NULL && !( LE_32( st->core_brate, SID_2k40 ) && EQ_16( st->element_mode, IVAS_CPE_DFT ) && EQ_16( nchan_out, 2 ) ) && !( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && EQ_16( nchan_out, 1 ) && EQ_16( st->idchan, 1 ) && LE_32( last_element_brate, IVAS_SID_5k2 ) ) ) - { - /* Calculate tilt of the ACELP core synthesis - needed in SWB BWE decoding */ - Word16 old_syn_12k8_16k_tmp_16fx[L_FRAME16k]; - Copy_Scale_sig_32_16( old_syn_12k8_16k_fx, old_syn_12k8_16k_tmp_16fx, st->L_frame, sub( -1, Q ) ); - st->tilt_wb_fx = round_fx_sat( L_shl_sat( calc_tilt_bwe_fx( old_syn_12k8_16k_tmp_16fx, -1, st->L_frame ), sub( Q, 8 ) ) ); // Q24+(Q-8) - 16 - move16(); - } - - return; - } - - - test(); - test(); - IF( ( st->core == ACELP_CORE ) && !( EQ_16( st->bfi, 1 ) && EQ_16( st->con_tcx, 1 ) ) ) - { - /*----------------------------------------------------------------------* - * Calculate tilt of the ACELP core synthesis - *----------------------------------------------------------------------*/ - - st->tilt_wb_fx = ivas_calc_tilt_bwe_fx( old_syn_12k8_16k_fx, Q, st->L_frame ); - move16(); - /*-------------------------------------------------------------------------------* - * Calculate frequency energy of 0~3.2kHz and 3.2~6.4kHz the ACELP core synthesis - *-------------------------------------------------------------------------------*/ - edct_fx( old_syn_12k8_16k_fx, syn_dct_fx, L_FRAME, &Q ); - Word64 W_tmp = 0; - move64(); - Word32 tmp; - Word16 shift; - FOR( i = 0; i < L_FRAME / 2; i++ ) - { - W_tmp = W_add( W_tmp, W_shr( W_mult0_32_32( syn_dct_fx[i], syn_dct_fx[i] ), Q ) ); - } - shift = W_norm( W_tmp ); - W_tmp = W_shl( W_tmp, shift ); - tmp = W_extract_h( W_tmp ); - tmp = L_shr( tmp, 8 ); + shift = W_norm( W_tmp ); + W_tmp = W_shl( W_tmp, shift ); + tmp = W_extract_h( W_tmp ); + tmp = L_shr( tmp, 8 ); tmp = getSqrtWord32( tmp ); st->enerLL_fx = tmp; @@ -2156,82 +1054,12 @@ void ivas_bw_switching_pre_proc_fx( return; } -#endif /*---------------------------------------------------------------------* * core_switch_lb_upsamp() * * Resample HQ/TCX-LB to the output sampling rate (8/16/32/48 kHz) *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void core_switch_lb_upsamp( - Decoder_State *st, /* i/o: Decoder state */ - float *output /* i/o: LB synth/upsampled LB synth */ -) -{ - int16_t i; - float *realBuffer[CLDFB_OVRLP_MIN_SLOTS], *imagBuffer[CLDFB_OVRLP_MIN_SLOTS]; - float realBufferTmp[CLDFB_OVRLP_MIN_SLOTS][CLDFB_NO_CHANNELS_MAX]; - float imagBufferTmp[CLDFB_OVRLP_MIN_SLOTS][CLDFB_NO_CHANNELS_MAX]; - - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < CLDFB_OVRLP_MIN_SLOTS; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - /* check if the CLDFB works on the right sample rate */ - if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) - { - resampleCldfb_ivas( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); - - if ( st->cldfbBPF != NULL && st->L_frame <= L_FRAME16k ) - { - resampleCldfb_ivas( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); - } - - if ( st->ini_frame > 0 ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - } - - /* analysis of the synthesis at internal sampling rate */ - cldfbAnalysis_ivas( output, realBuffer, imagBuffer, CLDFB_OVRLP_MIN_SLOTS * st->cldfbAna->no_channels, st->cldfbAna ); - - /* analysis and add the BPF error signal */ - if ( st->p_bpf_noise_buf_float ) - { - addBassPostFilter( st->p_bpf_noise_buf_float, st->bpf_off ? 0 : CLDFB_OVRLP_MIN_SLOTS * st->cldfbBPF->no_channels, realBuffer, imagBuffer, st->cldfbBPF ); - } - - /* set output mask for upsampling */ - if ( st->bwidth == NB ) - { - /* set NB mask for upsampling */ - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; - } - else if ( st->cldfbSyn->bandsToZero != st->cldfbSyn->no_channels - st->cldfbAna->no_channels ) - { - /* in case of BW switching, re-init to default */ - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->cldfbAna->no_channels; - } - - /* synthesis of the combined signal */ - cldfbSynthesis_ivas( realBuffer, imagBuffer, output, CLDFB_OVRLP_MIN_SLOTS * st->cldfbSyn->no_channels, st->cldfbSyn ); - - /* save synthesis - needed in case of core switching */ - if ( st->hTcxDec != NULL ) - { - mvr2r( output, st->previoussynth, st->hTcxDec->L_frameTCX ); - } - - return; -} -#endif /*---------------------------------------------------------------------* * smoothTransitionDtxToTcx() @@ -2242,61 +1070,3 @@ static void core_switch_lb_upsamp( #define TRANSITION_SMOOTHING_LEN_16k 15 #define TRANSITION_SMOOTHING_LEN_32k 31 #define TRANSITION_SMOOTHING_LEN_48k 47 - -#ifndef IVAS_FLOAT_FIXED -static void smoothTransitionDtxToTcx( - float synth[], /* i/o: synthesis */ - const int16_t output_frame, /* i : output frame length */ - const int16_t delay_comp /* i : delay compensation in samples */ -) -{ - int16_t i, filter_len; - float w, mem, step, fade_in; - float smoothing_input_buffer[2 * NS2SA( 48000, DELAY_CLDFB_NS ) + TRANSITION_SMOOTHING_LEN_48k]; - float smoothing_out_buffer[2 * NS2SA( 48000, DELAY_CLDFB_NS ) + TRANSITION_SMOOTHING_LEN_48k]; - - filter_len = TRANSITION_SMOOTHING_LEN_16k; - if ( output_frame == L_FRAME32k ) - { - filter_len = TRANSITION_SMOOTHING_LEN_32k; - } - else if ( output_frame == L_FRAME48k ) - { - filter_len = TRANSITION_SMOOTHING_LEN_48k; - } - - /* prepare buffer */ - for ( i = 0; i < filter_len / 2; i++ ) - { - smoothing_input_buffer[i] = synth[0]; - } - mvr2r( synth, smoothing_input_buffer + filter_len / 2, 2 * delay_comp + filter_len / 2 ); - - /* apply Mean filter */ - w = 1.f / filter_len; - mem = sum_f( smoothing_input_buffer, filter_len ); - for ( i = 0; i < 2 * delay_comp; i++ ) - { - smoothing_out_buffer[i] = w * mem; - mem = mem - smoothing_input_buffer[i] + smoothing_input_buffer[i + filter_len]; - } - - /* apply fades around transition */ - step = 1.f / delay_comp; - fade_in = 0.f; - for ( i = 0; i < delay_comp; i++ ) - { - synth[i] = smoothing_out_buffer[i] * fade_in + synth[i] * ( 1 - fade_in ); - fade_in += step; - } - - fade_in = 0.f; - for ( ; i < 2 * delay_comp; i++ ) - { - synth[i] = synth[i] * fade_in + smoothing_out_buffer[i] * ( 1 - fade_in ); - fade_in += step; - } - - return; -} -#endif diff --git a/lib_dec/core_switching_dec_fx.c b/lib_dec/core_switching_dec_fx.c index 9fe83efc7..88379f731 100644 --- a/lib_dec/core_switching_dec_fx.c +++ b/lib_dec/core_switching_dec_fx.c @@ -8,9 +8,7 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ #include "basop_util.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* @@ -23,12 +21,9 @@ static void core_switch_lb_upsamp( Decoder_State *st, float *output ); static void smoothTransitionDtxToTcx( float synth[], const int16_t output_frame, const int16_t delay_comp ); #endif -#ifdef IVAS_FLOAT_FIXED static void smoothTransitionDtxToTcx_fx( Word16 synth[], const Word16 output_frame, const Word16 delay_comp ); static void core_switch_lb_upsamp_fx( Decoder_State *st, Word32 *output ); -#endif -#ifdef IVAS_FLOAT_FIXED void bandwidth_switching_detect_fx( Decoder_State *st_fx /* i/o: encoder state structure */ ) @@ -143,7 +138,6 @@ void bandwidth_switching_detect_fx( return; } -#endif /*---------------------------------------------------------------------* * Calc_freq_ener_fx() @@ -151,7 +145,6 @@ void bandwidth_switching_detect_fx( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 Calc_freq_ener_fx( Word32 L_tmp, /* 2 * st->Q_syn2 */ const Word16 Q_syn2 ) @@ -177,7 +170,6 @@ static Word32 Calc_freq_ener_fx( } return enerLL_fx; } -#endif /*---------------------------------------------------------------------* * bw_switching_pre_proc_fx() @@ -185,7 +177,6 @@ static Word32 Calc_freq_ener_fx( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void bw_switching_pre_proc_fx( const Word16 *old_syn_12k8_16k_fx, /* i : ACELP core synthesis at 12.8kHz or 16kHz Qx*/ Decoder_State *st_fx /* i/o: decoder state structure */ @@ -357,7 +348,6 @@ void bw_switching_pre_proc_fx( } return; } -#endif #ifdef IVAS_CODE_SWITCHING @@ -507,7 +497,6 @@ static void smoothTransitionMdctStereoDtx( * * Preprocessing/preparation for ACELP/HQ core switching *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error core_switching_pre_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 output_frame /* i : frame length Q0*/ @@ -1153,7 +1142,6 @@ ivas_error core_switching_pre_dec_fx( return error; } -#endif /*---------------------------------------------------------------------* * core_switching_post_dec() @@ -1161,7 +1149,6 @@ ivas_error core_switching_pre_dec_fx( * Postprocessing for ACELP/HQ core switching *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error core_switching_post_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 *synth, /* i/o: output synthesis Qsynth*/ @@ -1571,9 +1558,7 @@ ivas_error core_switching_post_dec_fx( return error; } -#endif -#ifdef IVAS_FLOAT_FIXED ivas_error core_switching_post_dec_ivas_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 *synth, /* i/o: output synthesis Qsynth*/ @@ -2240,7 +2225,6 @@ ivas_error core_switching_post_dec_ivas_fx( return error; } -#endif /*---------------------------------------------------------------------* * core_switching_hq_prepare_dec() @@ -2249,7 +2233,6 @@ ivas_error core_switching_post_dec_ivas_fx( * - modify bit allocation for HQ core by removing CELP subframe budget *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void core_switching_hq_prepare_dec_fx( Decoder_State *st_fx, /* i/o: encoder state structure */ Word16 *num_bits, /* i/o: bit budget update Q0*/ @@ -2328,9 +2311,7 @@ void core_switching_hq_prepare_dec_fx( set16_fx( st_fx->hHQ_core->old_out_fx, 0, output_frame ); return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void core_switch_lb_upsamp_fx( Decoder_State *st, /* i/o: Decoder state */ Word32 *output /* i/o: LB synth/upsampled LB synth Q10*/ @@ -2498,4 +2479,3 @@ static void smoothTransitionDtxToTcx_fx( return; } -#endif diff --git a/lib_dec/d_gain2p.c b/lib_dec/d_gain2p.c index 59b879058..bcdeaa041 100644 --- a/lib_dec/d_gain2p.c +++ b/lib_dec/d_gain2p.c @@ -41,248 +41,3 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * Mode2_gain_dec_mless_flt - * - * Decoding of pitch and codebook gains without updating long term energies - *-------------------------------------------------------------------------*/ - -static void Mode2_gain_dec_mless_flt( - const int16_t index, /* i : index of quantizer */ - const float code[], /* i : Innovative code vector */ - const int16_t lcode, /* i : Subframe size */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codebook gain */ - float mean_ener, /* i : mean_ener defined in open-loop (2 bits) */ - float *past_gpit, /* i/o: past gain of pitch */ - float *past_gcode, /* i/o: past energy of code */ - float *gain_inov, /* o : un-scaled innovation gain */ - const int16_t coder_type /* i : coder type for number of bits */ -) -{ - int16_t i; - float ener_code, gcode0; - const Word16 *t_qua_gain; - - ener_code = 0.0f; - - if ( coder_type == 0 ) - { - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - } - else - { - ener_code = 0.01f; - - for ( i = 0; i < lcode; i++ ) - { - ener_code += code[i] * code[i]; - } - *gain_inov = (float) sqrt( (float) lcode / ener_code ); - } - - /*-----------------------------------------------------------------* - * Select the gains quantization table - *-----------------------------------------------------------------*/ - - if ( coder_type == 0 ) - { - t_qua_gain = E_ROM_qua_gain5b_const; - } - else if ( coder_type == 1 ) - { - t_qua_gain = E_ROM_qua_gain6b_const; - } - else - { - t_qua_gain = E_ROM_qua_gain7b_const; - } - - /*-----------------------------------------------------------------* - * decode pitch gain - *-----------------------------------------------------------------*/ - - *gain_pit = (float) ( t_qua_gain[index * 2] ) / ( 1 << 14 ); - - /*-----------------------------------------------------------------* - * calculate the predicted gain code - *-----------------------------------------------------------------*/ - - if ( coder_type == 0 ) - { - ener_code = 10 * (float) log10( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - gcode0 = (float) pow( 10, 0.05 * ( mean_ener - ener_code ) ); - } - else - { - ener_code = (float) ( -10.0 * log10( (float) lcode / ener_code ) ); - gcode0 = mean_ener - ener_code; - gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); /* predicted gain */ - } - - /*-----------------------------------------------------------------* - * decode normalized codebook gain - *-----------------------------------------------------------------*/ - - *gain_code = (float) ( t_qua_gain[index * 2 + 1] ) / ( 1 << 11 ) * gcode0; - - *past_gpit = *gain_pit; - *past_gcode = *gain_code / *gain_inov; - - return; -} - - -/*---------------------------------------------------------------------* - * gain_dec_uv - * - * Decoding of pitch and codebook gains for Unvoiced mode - *---------------------------------------------------------------------*/ - -static void gain_dec_uv( - const int16_t index, /* i/o: Quantization index vector */ - const float *code, /* i : algebraic code excitation */ - const int16_t lcode, /* i : Subframe size */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codebook gain */ - float *past_gpit, /* i/o: past gain of pitch */ - float *past_gcode, /* i/o: past energy of code */ - float *gain_inov /* o : unscaled innovation gain */ -) -{ - /*-----------------------------------------------------------------* - * Innovation energy (without gain) - *-----------------------------------------------------------------*/ - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - - /*-----------------------------------------------------------------* - * Decode pitch gain - *-----------------------------------------------------------------*/ - *gain_pit = 0.0f; - - /*-----------------------------------------------------------------* - * Decode codebook gain - *-----------------------------------------------------------------*/ - - *gain_code = (float) pow( 10.f, ( ( ( index * 1.9f ) - 30.f ) / 20.f ) ); - - /*-----------------------------------------------------------------* - * past gains for error concealment - *-----------------------------------------------------------------*/ - - *past_gpit = *gain_pit; - *past_gcode = *gain_code; - *gain_code *= *gain_inov; - - return; -} - -/*---------------------------------------------------------------------* - * gain_dec_gacelp_uv - * - * Decoding of pitch and codebook gains for Unvoiced mode - *---------------------------------------------------------------------*/ - -void gain_dec_gacelp_uv( - int16_t index, /* i/o: Quantization index vector */ - const float *code, /* i : algebraic code excitation */ - const float *code2, /* i : algebraic code excitation */ - const float mean_ener, /* i : mean energy */ - const int16_t lcode, /* i : Subframe size */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codebook gain */ - float *gain_code2, /* o : Quantized codebook gain */ - float *past_gpit, /* i/o: past gain of pitch */ - float *past_gcode, /* i/o: past energy of code */ - float *gain_inov /* o : unscaled innovation gain */ -) -{ - float pred_nrg_frame, norm_code2; - float gcode, gcode2; - int16_t index2; - - pred_nrg_frame = (float) pow( 10.0, mean_ener / 20.0 ); - - /*-----------------------------------------------------------------* - * Prediction gains - *-----------------------------------------------------------------*/ - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - gcode = pred_nrg_frame * ( *gain_inov ); - - norm_code2 = 1.0f / (float) sqrt( ( dotp( code2, code2, lcode ) + 0.01f ) / lcode ); - gcode2 = pred_nrg_frame * ( norm_code2 ); - - /*-----------------------------------------------------------------* - * Decode pitch gain - *-----------------------------------------------------------------*/ - - *gain_pit = 0.0f; - *past_gpit = *gain_pit; - - /*-----------------------------------------------------------------* - * past gains for error concealment - *-----------------------------------------------------------------*/ - - index2 = index >> 5; - index = index & 0x1F; - - *gain_code = (float) pow( 10.f, ( ( ( index * 1.25f ) - 20.f ) / 20.f ) ) * gcode; - *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); - - *past_gcode = *gain_code / *gain_inov; /*unscaled gain*/ - - return; -} - -/*---------------------------------------------------------------------* - * decode_acelp_gains - * - * - *---------------------------------------------------------------------*/ - -void decode_acelp_gains( - const float *code, - const int16_t gains_mode, - const float mean_ener_code, - float *gain_pit, - float *gain_code, - int16_t **pt_indice, - float *past_gpit, - float *past_gcode, - float *gain_inov, - const int16_t L_subfr, - float *code2, - float *gain_code2 ) -{ - int16_t index = 0; - - index = **pt_indice; - ( *pt_indice )++; - - if ( ( ( gains_mode > 0 ) && ( gains_mode < 4 ) ) ) - { - /* EVS gains quantizer (5bits/subfr) */ - Mode2_gain_dec_mless_flt( index, code, L_subfr, gain_pit, gain_code, mean_ener_code, past_gpit, past_gcode, gain_inov, gains_mode - 1 ); - } - else if ( gains_mode == 6 ) - { - /* UV gains quantizer (6bits/subfr) */ - gain_dec_uv( index, code, L_subfr, gain_pit, gain_code, past_gpit, past_gcode, gain_inov ); - } - else if ( gains_mode == 7 ) - { - /* GACELP_UV gains quantizer (7=5-2bits/subfr) */ - gain_dec_gacelp_uv( index, code, code2, mean_ener_code, L_subfr, gain_pit, gain_code, gain_code2, past_gpit, past_gcode, gain_inov ); - } - else - { - IVAS_ERROR( IVAS_ERR_INTERNAL, "invalid gains coding for acelp!" ); - } - - return; -} -#endif diff --git a/lib_dec/d_gain2p_fx.c b/lib_dec/d_gain2p_fx.c index fe916acf3..3af3affc3 100644 --- a/lib_dec/d_gain2p_fx.c +++ b/lib_dec/d_gain2p_fx.c @@ -8,7 +8,6 @@ #include "basop_util.h" #include "stl.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Decoding of pitch and codebook gains (see q_gain2_plus.c) * *-------------------------------------------------------------------*/ @@ -428,4 +427,3 @@ void d_gain_pred_fx( return; } -#endif diff --git a/lib_dec/dec2t32.c b/lib_dec/dec2t32.c index a794e5618..6b94be229 100644 --- a/lib_dec/dec2t32.c +++ b/lib_dec/dec2t32.c @@ -53,79 +53,3 @@ * * See cod2t32.c for more details of the algebraic code. *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void dec_acelp_2t32( - Decoder_State *st, /* i/o: decoder state structure */ - float code[] /* o : algebraic (fixed) codebook excitation */ -) -{ - int16_t index, i0, i1; - - index = get_next_indice( st, 12 ); - - set_f( code, 0.0f, L_SUBFR ); - - /*-----------------------------------------------------------------* - * decode the positions and signs of pulses and build the codeword - *-----------------------------------------------------------------*/ - - i0 = ( ( index >> 6 ) & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T; - i1 = ( ( index & ( NB_POS_FCB_2T - 1 ) ) * NB_TRACK_FCB_2T ) + 1; - code[i0] = -1.0f; - if ( ( index & 0x800 ) == 0 ) - { - code[i0] = 1.0f; - } - - code[i1] = -1.0f; - if ( ( index & 0x20 ) == 0 ) - { - code[i1] = 1.0f; - } - - return; -} - -/*----------------------------------------------------------------------------------* - * dec_acelp_1t64() - * - * 7 bits algebraic codebook. - * 1 track x 64 positions per track = 64 samples. - * - * The pulse can have 64 possible positions and two (2) possible amplitudes: +1 or -1. - *----------------------------------------------------------------------------------*/ - -void dec_acelp_1t64( - Decoder_State *st, /* i/o: decoder state structure */ - float code[], /* o : algebraic (fixed) codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t pos, sgn; - - /*-----------------------------------------------------------------* - * decode the positions and signs of pulses and build the codeword - *-----------------------------------------------------------------*/ - - if ( L_subfr == L_SUBFR ) - { - pos = get_next_indice( st, 7 ); - } - else /* L_subfr == 2*L_SUBFR */ - { - pos = get_next_indice( st, 8 ); - } - - sgn = -1; - if ( pos >= L_subfr ) - { - pos -= L_subfr; - sgn = 1; - } - - set_f( code, 0.0f, L_subfr ); - code[pos] = sgn; - - return; -} -#endif diff --git a/lib_dec/dec2t32_fx.c b/lib_dec/dec2t32_fx.c index d6f822765..71b284562 100644 --- a/lib_dec/dec2t32_fx.c +++ b/lib_dec/dec2t32_fx.c @@ -32,7 +32,6 @@ /* CALLED FROM : */ /*==========================================================================*/ -#ifdef IVAS_FLOAT_FIXED void dec_acelp_2t32_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 code[] /* o: algebraic (fixed) codebook excitation */ @@ -129,4 +128,3 @@ void dec_acelp_1t64_fx( move16(); return; } -#endif diff --git a/lib_dec/dec4t64.c b/lib_dec/dec4t64.c index 90e870436..e931b0a68 100644 --- a/lib_dec/dec4t64.c +++ b/lib_dec/dec4t64.c @@ -41,975 +41,3 @@ #include "ivas_prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void add_pulses( const int16_t pos[], const int16_t nb_pulse, const int16_t track, float code[] ); -static void dec_1p_N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_2p_2N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_3p_3N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_4p_4N1( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_4p_4N( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_5p_5N( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void dec_6p_6N2( const int32_t index, const int16_t N, const int16_t offset, int16_t pos[] ); -static void fcb_decode_PI( int32_t code_index, int16_t sector_6p[], const int16_t pulse_num ); - -/*----------------------------------------------------------------------------------* - * dec_acelp_4t64() - * - * 20, 36 bits algebraic codebook decoder. - * 4 tracks x 16 positions per track = 64 samples. - * - * 20 bits --> 4 pulses in a frame of 64 samples. - * 36 bits --> 8 pulses in a frame of 64 samples. - * - * All pulses can have two (2) possible amplitudes: +1 or -1. - * Each pulse can have sixteen (16) possible positions. - * - * See cod4t64.c for more details of the algebraic code. - *----------------------------------------------------------------------------------*/ - -void dec_acelp_4t64( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t nbbits, /* i : number of bits per codebook */ - float code[], /* o : algebraic (fixed) codebook excitation */ - const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ -) -{ - int16_t i, k, pos[7]; - int32_t L_index; - int16_t ind1[NB_TRACK_FCB_4T], ind2[NB_TRACK_FCB_4T]; - PulseConfig config; - int16_t indexing_indices[6], wordcnt, bitcnt; - - if ( !Opt_AMR_WB ) - { - switch ( nbbits ) - { - case 20: - config.nb_pulse = 4; - break; - - case 28: - config.nb_pulse = 6; - break; - - case 36: - config.nb_pulse = 8; - break; - - case 43: - config.nb_pulse = 10; - break; - - case 50: - config.nb_pulse = 12; - break; - - case 62: - config.nb_pulse = 16; - break; - - - case 87: - config.nb_pulse = 26; - break; - } - config.bits = nbbits; - config.codetrackpos = TRACKPOS_FIXED_FIRST; - - - wordcnt = nbbits >> 4; - bitcnt = nbbits & 15; - for ( i = 0; i < wordcnt; i++ ) - { - indexing_indices[i] = get_next_indice( st, 16 ); - } - if ( bitcnt ) - { - indexing_indices[i] = get_next_indice( st, bitcnt ); - } - D_ACELP_indexing_ivas( code, config, NB_TRACK_FCB_4T, indexing_indices, &st->BER_detect ); - } - else - { - for ( i = 0; i < L_SUBFR; i++ ) - { - code[i] = 0.0f; - } - - if ( nbbits == 20 ) - { - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = get_next_indice( st, 5 ); - dec_1p_N1( L_index, 4, 0, pos ); - add_pulses( pos, 1, k, code ); - } - } - else if ( nbbits == 36 ) - { - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = get_next_indice( st, 9 ); - dec_2p_2N1( L_index, 4, 0, pos ); - add_pulses( pos, 2, k, code ); - } - } - else if ( nbbits == 44 ) /* AMR-WB pulse indexing */ - { - for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) - { - L_index = get_next_indice( st, 13 ); - dec_3p_3N1( L_index, 4, 0, pos ); - add_pulses( pos, 3, k, code ); - } - - for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = get_next_indice( st, 9 ); - dec_2p_2N1( L_index, 4, 0, pos ); - add_pulses( pos, 2, k, code ); - } - } - else if ( nbbits == 52 ) /* AMR-WB pulse indexing */ - { - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = get_next_indice( st, 13 ); - dec_3p_3N1( L_index, 4, 0, pos ); - add_pulses( pos, 3, k, code ); - } - } - else if ( nbbits == 64 ) /* AMR-WB pulse indexing */ - { - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - ind1[k] = get_next_indice( st, 2 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - ind2[k] = get_next_indice( st, 14 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = ( ( ind1[k] << 14 ) + ind2[k] ); - dec_4p_4N( L_index, 4, 0, pos ); - add_pulses( pos, 4, k, code ); - } - } - else if ( nbbits == 72 ) - { - for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) - { - ind1[k] = get_next_indice( st, 10 ); - } - - for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) - { - ind1[k] = get_next_indice( st, 2 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) - { - ind2[k] = get_next_indice( st, 10 ); - } - - for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) - { - ind2[k] = get_next_indice( st, 14 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T - 2; k++ ) - { - L_index = ( ( ind1[k] << 10 ) + ind2[k] ); - dec_5p_5N( L_index, 4, 0, pos ); - add_pulses( pos, 5, k, code ); - } - - for ( k = 2; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = ( ( ind1[k] << 14 ) + ind2[k] ); - dec_4p_4N( L_index, 4, 0, pos ); - add_pulses( pos, 4, k, code ); - } - } - else if ( nbbits == 88 ) - { - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - ind1[k] = get_next_indice( st, 11 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - ind2[k] = get_next_indice( st, 11 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = ( ( ind1[k] << 11 ) + ind2[k] ); - dec_6p_6N2( L_index, 4, 0, pos ); - add_pulses( pos, 6, k, code ); - } - } - } - - return; -} - -/*-------------------------------------------------------* - * add_pulses() - * - * Add decoded pulses to the codeword - *-------------------------------------------------------*/ - -static void add_pulses( - const int16_t pos[], /* i : pulse position */ - const int16_t nb_pulse, /* i : nb. of pulses */ - const int16_t track, /* i : no. of the tracks */ - float code[] /* i/o: decoded codevector */ -) -{ - int16_t i, k; - - for ( k = 0; k < nb_pulse; k++ ) - { - i = ( ( pos[k] & ( NB_POS_FCB_4T - 1 ) ) * NB_TRACK_FCB_4T ) + track; - if ( ( pos[k] & NB_POS_FCB_4T ) == 0 ) - { - code[i] += 1.0f; - } - else - { - code[i] -= 1.0f; - } - } - - return; -} - -/*-------------------------------------------------------* - * dec_1p_N1() - * - * Decode 1 pulse with N+1 bits - *-------------------------------------------------------*/ - -void dec_1p_N1( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t i, pos1; - int32_t mask; - - mask = ( ( 1 << N ) - 1 ); - - pos1 = (int16_t) ( index & mask ) + offset; - - i = (int16_t) ( index >> N ) & 1; - - if ( i == 1 ) - { - pos1 += NB_POS_FCB_4T; - } - - pos[0] = pos1; - - return; -} - -/*-------------------------------------------------------* - * dec_2p_2N1() - * - * Decode 2 pulses with 2*N+1 bits: - *-------------------------------------------------------*/ - -void dec_2p_2N1( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t i, pos1, pos2; - int32_t mask; - - mask = ( ( 1 << N ) - 1 ); - - pos1 = (int16_t) ( ( index >> N ) & mask ) + offset; - i = (int16_t) ( index >> ( 2 * N ) ) & 1; - pos2 = (int16_t) ( index & mask ) + offset; - if ( ( pos2 - pos1 ) < 0 ) - { - if ( i == 1 ) - { - pos1 += NB_POS_FCB_4T; - } - else - { - pos2 += NB_POS_FCB_4T; - } - } - else - { - if ( i == 1 ) - { - pos1 += NB_POS_FCB_4T; - pos2 += NB_POS_FCB_4T; - } - } - - pos[0] = pos1; - pos[1] = pos2; - - return; -} - -/*-------------------------------------------------------* - * dec_3p_3N1() - * - * Decode 3 pulses with 3*N+1 bits: - *-------------------------------------------------------*/ - -static void dec_3p_3N1( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t j; - int32_t idx, mask; - - mask = ( ( 1 << ( ( 2 * N ) - 1 ) ) - 1 ); - idx = index & mask; - j = offset; - - if ( ( ( index >> ( ( 2 * N ) - 1 ) ) & 1 ) == 1 ) - { - j += ( 1 << ( N - 1 ) ); - } - - dec_2p_2N1( idx, N - 1, j, pos ); - mask = ( ( 1 << ( N + 1 ) ) - 1 ); - idx = ( index >> ( 2 * N ) ) & mask; - dec_1p_N1( idx, N, offset, pos + 2 ); - - return; -} - -/*-------------------------------------------------------* - * dec_4p_4N1() - * - * Decode 4 pulses with 4*N+1 bits: - *-------------------------------------------------------*/ - -static void dec_4p_4N1( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t j; - int32_t mask, idx; - - mask = ( ( 1 << ( ( 2 * N ) - 1 ) ) - 1 ); - idx = index & mask; - j = offset; - - if ( ( ( index >> ( ( 2 * N ) - 1 ) ) & 1 ) == 1 ) - { - j += ( 1 << ( N - 1 ) ); - } - - dec_2p_2N1( idx, N - 1, j, pos ); - mask = ( ( 1 << ( ( 2 * N ) + 1 ) ) - 1 ); - idx = ( index >> ( 2 * N ) ) & mask; - dec_2p_2N1( idx, N, offset, pos + 2 ); - - return; -} - -/*-------------------------------------------------------* - * dec_4p_4N() - * - * Decode 4 pulses with 4*N bits: - *-------------------------------------------------------*/ - -static void dec_4p_4N( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t j, n_1; - - n_1 = N - 1; - j = offset + ( 1 << n_1 ); - switch ( ( index >> ( ( 4 * N ) - 2 ) ) & 3 ) - { - case 0: - { - if ( ( ( index >> ( ( 4 * n_1 ) + 1 ) ) & 1 ) == 0 ) - { - dec_4p_4N1( index, n_1, offset, pos ); - } - else - { - dec_4p_4N1( index, n_1, j, pos ); - } - break; - } - case 1: - { - dec_1p_N1( ( index >> ( ( 3 * n_1 ) + 1 ) ), n_1, offset, pos ); - dec_3p_3N1( index, n_1, j, pos + 1 ); - break; - } - case 2: - { - dec_2p_2N1( ( index >> ( ( 2 * n_1 ) + 1 ) ), n_1, offset, pos ); - dec_2p_2N1( index, n_1, j, pos + 2 ); - break; - } - case 3: - { - dec_3p_3N1( ( index >> ( n_1 + 1 ) ), n_1, offset, pos ); - dec_1p_N1( index, n_1, j, pos + 3 ); - break; - } - } - - return; -} - -/*-------------------------------------------------------* - * dec_5p_5N() - * - * Decode 5 pulses with 5*N bits: - *-------------------------------------------------------*/ - -static void dec_5p_5N( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t j, n_1; - int32_t idx; - - n_1 = N - 1; - j = offset + ( 1 << n_1 ); - idx = ( index >> ( ( 2 * N ) + 1 ) ); - - if ( ( ( index >> ( ( 5 * N ) - 1 ) ) & 1 ) == 0 ) - { - dec_3p_3N1( idx, n_1, offset, pos ); - dec_2p_2N1( index, N, offset, pos + 3 ); - } - else - { - dec_3p_3N1( idx, n_1, j, pos ); - dec_2p_2N1( index, N, offset, pos + 3 ); - } - - return; -} - -/*-------------------------------------------------------* - * dec_6p_6N2() - * - * Decode 6 pulses with 6*N+2 bits: - *-------------------------------------------------------*/ - -static void dec_6p_6N2( - const int32_t index, /* i : quantization index */ - const int16_t N, /* i : nb. of bits */ - const int16_t offset, /* i : pulse position offset */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t j, n_1, offsetA, offsetB; - - n_1 = N - 1; - j = offset + ( 1 << n_1 ); - offsetA = offsetB = j; - if ( ( ( index >> ( ( 6 * N ) - 5 ) ) & 1 ) == 0 ) - { - offsetA = offset; - } - else - { - offsetB = offset; - } - - switch ( ( index >> ( ( 6 * N ) - 4 ) ) & 3 ) - { - case 0: - { - dec_5p_5N( index >> N, n_1, offsetA, pos ); - dec_1p_N1( index, n_1, offsetA, pos + 5 ); - break; - } - - case 1: - { - dec_5p_5N( index >> N, n_1, offsetA, pos ); - dec_1p_N1( index, n_1, offsetB, pos + 5 ); - break; - } - - case 2: - { - dec_4p_4N( index >> ( ( 2 * n_1 ) + 1 ), n_1, offsetA, pos ); - dec_2p_2N1( index, n_1, offsetB, pos + 4 ); - break; - } - - case 3: - { - dec_3p_3N1( index >> ( ( 3 * n_1 ) + 1 ), n_1, offset, pos ); - dec_3p_3N1( index, n_1, j, pos + 3 ); - break; - } - } - - return; -} - -/*---------------------------------------------------------------------* - * fcb_decode_class_all_p() - * - * Get the position number and the pulse number on every position - *---------------------------------------------------------------------*/ - -/*! r: The index of pulse positions */ -static int32_t fcb_decode_class_all_p( - int32_t *code_index, /* i : fcb index information */ - int16_t sector_6p_num[], /* o : Number of pulses for each position */ - const int16_t pulse_num, /* i : Number of pulses on a track. */ - int16_t *pos_num /* o : Number of positions which have pulses on the track.*/ -) -{ - int16_t i, j, k; - int32_t mn9; - int16_t pulse_pos_num; - for ( i = 1; i <= pulse_num; i++ ) - { - if ( ( *code_index ) < PI_offset[pulse_num][i] ) - { - break; - } - } - - ( *code_index ) -= PI_offset[pulse_num][i - 1]; - - pulse_pos_num = pulse_num - i + 2; - j = (int16_t) ( ( *code_index ) >> pulse_pos_num ); - - k = (int16_t) ( j / PI_select_table[16][pulse_pos_num] ); - mn9 = j - k * PI_select_table[16][pulse_pos_num]; - if ( ( pulse_pos_num < pulse_num ) && ( pulse_pos_num > 1 ) ) - { - for ( i = 0; i < pulse_pos_num; i++ ) - { - sector_6p_num[i] = 1; - } - sector_6p_num[k]++; - } - else - { - if ( pulse_pos_num == 1 ) - { - sector_6p_num[0] = (int16_t) pulse_num; - } - else - { - for ( i = 0; i < pulse_num; i++ ) - { - sector_6p_num[i] = 1; - } - } - } - - *pos_num = pulse_pos_num; - - return mn9; -} - -/*---------------------------------------------------------------------* - * fcb_decode_position() - * - * Decode the pulse position not same to the others - *---------------------------------------------------------------------*/ - -static void fcb_decode_position( - int32_t index, /* i : position index information */ - int16_t pos_vector[], /* o : the positon vector */ - const int16_t pos_num /* i : number of positions */ -) -{ - int16_t i, l; - int32_t k; - int16_t temp; - - k = index; - l = 0; - temp = pos_num; - for ( i = 0; i < pos_num - 1; i++ ) - { - k = PI_select_table[16 - l][temp] - k; - - for ( ; PI_select_table[16 - l][temp] >= k; l += 2 ) - { - ; - } - - if ( k > PI_select_table[17 - l][temp] ) - { - l--; - } - - k = PI_select_table[17 - l][temp--] - k; - pos_vector[i] = (int16_t) ( l - 1 ); - } - pos_vector[i] = (int16_t) ( l + k ); - - return; -} - - -/*---------------------------------------------------------------------* - * fcb_decode_PI() - * - * decode fcb pulse index - *---------------------------------------------------------------------*/ - -/*! r: return pulse position number */ - -static void fcb_decode_PI( - int32_t code_index, /* i : fcb index information */ - int16_t sector_6p[], /* o : decoded pulse position */ - const int16_t pulse_num /* i : pulse number for the track */ -) -{ - int16_t i, l; - int32_t mn9; - int16_t pulse_pos_num; - int16_t sector_6p_temp[7], sector_6p_num_temp[7]; - int16_t *sector_6p_ptr0; - int16_t *sector_6p_ptr1; - - /*get the position number and the pulse number on every position */ - mn9 = fcb_decode_class_all_p( &code_index, sector_6p_num_temp, pulse_num, &pulse_pos_num ); - - /* rebuild the vector*/ - /* decode the pulse position not same to the others*/ - fcb_decode_position( mn9, sector_6p_temp, pulse_pos_num ); - for ( i = pulse_pos_num - 1; i >= 0; i-- ) - { - sector_6p_temp[i] += ( ( code_index & 0x1 ) << 4 ); - code_index = code_index >> 1; - } - - /* decode the pulse position maybe some pulse position same to other pulse */ - sector_6p_ptr0 = §or_6p[pulse_num]; - sector_6p_ptr1 = §or_6p_temp[pulse_pos_num]; - for ( i = 0; i < pulse_pos_num; i++ ) - { - sector_6p_ptr1--; - for ( l = 0; l < sector_6p_num_temp[pulse_pos_num - 1 - i]; l++ ) - { - *--sector_6p_ptr0 = *sector_6p_ptr1; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * Read FCB index * - *---------------------------------------------------------------------*/ - -void D_ACELP_decode_43bit( - uint16_t idxs[], - float code[], - int16_t *pulsestrack ) -{ - int32_t ps[8]; - int16_t pos[7]; - int32_t joint_index; - int32_t joint_offset = 3611648; /*offset for 3 pulses per track*/ - - set_f( code, 0.0f, L_SUBFR ); - - ps[3] = idxs[0] & 0x1ff; - ps[2] = ( ( idxs[1] & 3 ) << 7 ) + ( idxs[0] >> 9 ); - joint_index = ( ( idxs[2] << 16 ) + idxs[1] ) >> 2; - - if ( joint_index >= joint_offset ) - { - joint_index = joint_index - joint_offset; - } - - ps[0] = joint_index / 5472; - ps[1] = joint_index - ps[0] * 5472; - fcb_decode_PI( ps[0], pos, 3 ); - add_pulses( pos, pulsestrack[0], 0, code ); - fcb_decode_PI( ps[1], pos, 3 ); - add_pulses( pos, pulsestrack[1], 1, code ); - - dec_2p_2N1( ps[2], 4, 0, pos ); - add_pulses( pos, pulsestrack[2], 2, code ); - dec_2p_2N1( ps[3], 4, 0, pos ); - add_pulses( pos, pulsestrack[3], 3, code ); - - return; -} - -/*-------------------------------------------------------* - * dec_1p_N1() - * - * Decode 1 pulse with N+1 bits - *-------------------------------------------------------*/ - -static void dec_1p_N1_L_subfr( - const int32_t index, /* i : quantization index */ - const int16_t nb_pos, /* i : number of positions */ - const int16_t N, /* i : nb. of bits */ - int16_t pos[] /* o : pulse position */ -) -{ - int16_t i, pos1; - int32_t mask; - - mask = ( ( 1 << N ) - 1 ); - pos1 = (int16_t) ( index & mask ); - i = (int16_t) ( index >> N ) & 1; - - if ( i == 1 ) - { - pos1 += nb_pos; - } - - pos[0] = pos1; - - return; -} - -/*-------------------------------------------------------* - * add_pulses() - * - * Add decoded pulses to the codeword - *-------------------------------------------------------*/ - - -static void add_pulses_L_subfr( - const int16_t nb_pos, /* i : number of positions */ - const int16_t pos[], /* i : pulse position */ - const int16_t nb_pulse, /* i : nb. of pulses */ - const int16_t track, /* i : no. of the tracks */ - float code[] /* i/o: decoded codevector */ -) -{ - int16_t i, k; - - for ( k = 0; k < nb_pulse; k++ ) - { - i = ( ( pos[k] & ( nb_pos - 1 ) ) * NB_TRACK_FCB_4T ) + track; - if ( ( pos[k] & nb_pos ) == 0 ) - { - code[i] += 1.0f; - } - else - { - code[i] -= 1.0f; - } - } - - return; -} - -/*----------------------------------------------------------------------------------* - * dec_acelp_fast() - * - * fast algebraic codebook decoder - *----------------------------------------------------------------------------------*/ - -void dec_acelp_fast( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t cdk_index, /* i : codebook index */ - float code[], /* o : algebraic (fixed) codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t k, pos[7], skip_track; - int32_t L_index; - PulseConfig config; - - skip_track = -1; - set_f( code, 0.0f, L_subfr ); - - if ( L_subfr == L_SUBFR ) - { - config = PulseConfTable[cdk_index]; - - if ( cdk_index == 2 ) - { - dec_acelp_2t32( st, code ); - } - else if ( config.nb_pulse == 2 ) - { - /* 10 bits, 2 pulses, 4 tracks 1010 (used only even tracks) */ - for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 ) - { - L_index = get_next_indice( st, 5 ); - dec_1p_N1( L_index, 4, 0, pos ); - add_pulses( pos, 1, k, code ); - } - } - else if ( config.nb_pulse == 3 ) - { - if ( config.codetrackpos == TRACKPOS_FIXED_FIRST ) - { - /* 15 bits, 3 pulses, 4 tracks 1110 fixed track to first ? */ - for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ ) - { - L_index = get_next_indice( st, 5 ); - dec_1p_N1( L_index, 4, 0, pos ); - add_pulses( pos, 1, k, code ); - } - } - else if ( config.codetrackpos == TRACKPOS_FREE_THREE ) - { - /* 17 bits, 3 pulses, 4 tracks (used all tracks) - 1110, 1101, 1011, 0111 */ - skip_track = get_next_indice( st, 2 ); - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - if ( k != skip_track ) - { - L_index = get_next_indice( st, 5 ); - dec_1p_N1( L_index, 4, 0, pos ); - add_pulses( pos, 1, k, code ); - } - } - } - } - else - { - if ( config.bits == 20 ) - { - skip_track = -1; - } - else if ( config.codetrackpos == TRACKPOS_FIXED_FIRST ) - { - skip_track = 0; - } - else if ( config.codetrackpos == TRACKPOS_FREE_ONE ) - { - skip_track = get_next_indice( st, 2 ); - } - - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - if ( k == skip_track ) - { - L_index = get_next_indice( st, 9 ); - dec_2p_2N1( L_index, 4, 0, pos ); - add_pulses( pos, 2, k, code ); - } - else - { - L_index = get_next_indice( st, 5 ); - dec_1p_N1( L_index, 4, 0, pos ); - add_pulses( pos, 1, k, code ); - } - } - } - } - else /* L_subfr == 2*L_SUBFR */ - { - config.bits = cdk_index; - - if ( cdk_index == 14 ) - { - /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ - int16_t index, i0, i1; - - index = get_next_indice( st, 14 ); - - i0 = ( ( index >> 7 ) & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T; - i1 = ( ( index & ( NB_POS_FCB_2T_128 - 1 ) ) * NB_TRACK_FCB_2T ) + 1; - - code[i0] = -1.0f; - if ( ( index & 0x2000 ) == 0 ) - { - code[i0] = 1.0f; - } - - code[i1] = -1.0f; - if ( ( index & 0x40 ) == 0 ) - { - code[i1] = 1.0f; - } - } - else if ( cdk_index == 12 ) - { - /* 12 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ - for ( k = 0; k < NB_TRACK_FCB_4T - 1; k += 2 ) - { - L_index = get_next_indice( st, 6 ); - dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); - add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); - } - } - else if ( cdk_index == 18 ) - { - /* 18 bits, 3 pulses, 4 tracks: 1110 (used first three tracks) */ - for ( k = 0; k < NB_TRACK_FCB_4T - 1; k++ ) - { - L_index = get_next_indice( st, 6 ); - dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); - add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); - } - } - else if ( cdk_index == 20 ) - { - /* 20 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ - skip_track = get_next_indice( st, 2 ); - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - if ( k != skip_track ) - { - L_index = get_next_indice( st, 6 ); - dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); - add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); - } - } - } - else if ( cdk_index == 24 ) - { - /* 24 bits, 4 pulses, 4 tracks: 1111 */ - for ( k = 0; k < NB_TRACK_FCB_4T; k++ ) - { - L_index = get_next_indice( st, 6 ); - dec_1p_N1_L_subfr( L_index, NB_POS_FCB_4T_128, 5, pos ); - add_pulses_L_subfr( NB_POS_FCB_4T_128, pos, 1, k, code ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/dec4t64_fx.c b/lib_dec/dec4t64_fx.c index 32774bd8e..58f9048c4 100644 --- a/lib_dec/dec4t64_fx.c +++ b/lib_dec/dec4t64_fx.c @@ -7,7 +7,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" /* Static table prototypes */ #include "assert.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local functions *-------------------------------------------------------------------*/ @@ -1268,4 +1267,3 @@ void dec_acelp_fast_fx( return; } -#endif diff --git a/lib_dec/dec_LPD.c b/lib_dec/dec_LPD.c index e45e44b47..9af4fa20e 100644 --- a/lib_dec/dec_LPD.c +++ b/lib_dec/dec_LPD.c @@ -52,739 +52,3 @@ * * Core decoder MODE2 *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decoder_LPD( - Decoder_State *st, /* i/o: decoder memory state pointer */ - float signal_out[], /* o : signal with LPD delay (7 subfrs) */ - float signal_outFB[], /* o : synthesis @output_FS */ - int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ - float *bpf_noise_buf, /* i/o: BPF noise buffer */ - int16_t bfi, /* i : BFI flag */ - int16_t *bitsRead, /* o : number of read bits */ - int16_t param[], /* o : buffer of parameters */ - float *pitch_buf, /* i/o: floating pitch values for each subfr*/ - float *voice_factors, /* o : voicing factors */ - float *ptr_bwe_exc /* o : excitation for SWB TBE */ -) -{ - int16_t *prm; - int16_t param_lpc[NPRM_LPC_NEW]; - float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synth; - float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synthFB; - float lsf[( NB_DIV + 1 ) * M], lsp[( NB_DIV + 1 ) * M], lspmid[M], lsfmid[M]; - float Aq[( NB_SUBFR16k + 1 ) * ( M + 1 )]; - int16_t pitch[NB_SUBFR16k]; - float pit_gain[NB_SUBFR16k]; - int16_t i, k; - int16_t past_core_mode, offset; - int16_t L_frame, nb_subfr, L_frameTCX; - Word16 Aind[M + 1], lspind[M]; - float tmp_old[M + 1], tmp_new[M + 1], enr_old, enr_new; - float lspnew_uw[NB_DIV * M], lsfnew_uw[NB_DIV * M]; - float lsf_q_1st_rf[M], lsf_q_rf[M], lsp_q_rf[M]; - float lsp_diff; - int16_t LSF_Q_prediction; /* o : LSF prediction mode */ - int16_t tcx_last_overlap_mode, tcx_current_overlap_mode; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - /*--------------------------------------------------------------------------------* - * Initializations - *--------------------------------------------------------------------------------*/ - - prm = param; /* to avoid compilation warnings */ - LSF_Q_prediction = -1; /* to avoid compilation warnings */ - enr_old = 0.0f; - enr_new = 0.0f; - - if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) - { - bfi = st->bfi; - } - - past_core_mode = st->last_core_bfi; - - /*Adjust bit per frame*/ - if ( !bfi ) - { - st->bits_frame_core = st->bits_frame - ( *bitsRead ); - } - - /* Framing parameters */ - L_frame = st->L_frame; - L_frameTCX = st->hTcxDec->L_frameTCX; - nb_subfr = st->nb_subfr; - - /* Initialize pointers */ - synth = synth_buf + st->hTcxDec->old_synth_len; - synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; - mvr2r( st->hTcxDec->old_synth_float, synth_buf, st->hTcxDec->old_synth_len ); - mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); - set_zero( synth, L_FRAME_PLUS + M ); - set_zero( synthFB, L_FRAME_PLUS + M ); - - - /*For post-processing (post-filtering+blind BWE)*/ - if ( st->tcxonly == 0 ) - { - /* for bass postfilter */ - set_s( pitch, L_SUBFR, nb_subfr ); - set_zero( pit_gain, nb_subfr ); - } - - /* PLC: [Common: Memory update] - * PLC: Update the number of lost frames */ - if ( bfi ) - { - st->nbLostCmpt++; - } - - /*--------------------------------------------------------------------------------* - * BITSTREAM DECODING - *--------------------------------------------------------------------------------*/ - - if ( !bfi ) - { - st->second_last_core = st->last_core; - tcx_last_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; - tcx_current_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - - dec_prm_ivas( st, param, param_lpc, total_nbbits, bitsRead ); - - if ( !st->rate_switching_init && ( st->last_codec_mode ) == MODE2 && st->BER_detect ) - { - st->coder_type = st->last_coder_type; - st->last_core = st->second_last_core; - st->hTcxCfg->tcx_last_overlap_mode = tcx_last_overlap_mode; - st->hTcxCfg->tcx_curr_overlap_mode = tcx_current_overlap_mode; - st->bfi = 1; - bfi = 1; - st->flagGuidedAcelp = 0; - st->nbLostCmpt++; - st->core_brate = st->last_core_brate; - st->core = GetPLCModeDecision( st ); - } - } - else - { - if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) - { - dec_prm_ivas( st, param, param_lpc, total_nbbits, bitsRead ); - } - - if ( st->nbLostCmpt > 1 ) - { - st->flagGuidedAcelp = 0; - } - /* PLC: [Common: mode decision] - * PLC: Decide which Concealment to use. Update pitch lags if needed */ - st->core = GetPLCModeDecision( st ); - } - - /* PLC: [Common: Memory update] - * PLC: Update the number of lost frames */ - if ( !bfi ) - { - if ( st->prev_bfi == 1 ) - { - st->prev_nbLostCmpt = st->nbLostCmpt; - } - else - { - st->prev_nbLostCmpt = 0; - } - - st->nbLostCmpt = 0; - } - - /*--------------------------------------------------------------------------------* - * LPC PARAMETERS - *--------------------------------------------------------------------------------*/ - - if ( ( bfi == 0 ) || ( bfi == 1 && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) ) - { - if ( st->use_partial_copy && ( st->rf_frame_type < RF_TCXFD || st->rf_frame_type > RF_TCXTD2 ) ) - { - if ( hTcxDec->envWeighted ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); - hTcxDec->envWeighted = 0; - } - - /* first stage VQ, 8 bits; reuse TCX high rate codebook */ - set_f( lsf_q_1st_rf, 0.0f, M ); - vlpc_1st_dec_flt( param_lpc[0], lsf_q_1st_rf, st->sr_core ); - - /* second stage vq */ - /* quantized lsf from two stages */ - v_add( lsf_q_1st_rf, lsf_q_diff_cb_8b_rf_flt + M * param_lpc[1], lsf_q_rf, M ); - - v_sort_float( lsf_q_rf, 0, M - 1 ); - reorder_lsf( lsf_q_rf, LSF_GAP, M, st->sr_core ); - - /* current n-th ACELP frame and its corresponding partial copy */ - lsf2lsp( lsf_q_rf, lsp_q_rf, M, st->sr_core ); - - /* copy the old and current lsfs and lsps into the lsf[] and lsp[] buffer for interpolation */ - mvr2r( st->lsf_old, &lsf[0], M ); - mvr2r( st->lsp_old, &lsp[0], M ); - mvr2r( lsf_q_rf, &lsf[M], M ); - mvr2r( lsp_q_rf, &lsp[M], M ); - lsp_diff = 0.0f; - - for ( i = 0; i < M; i++ ) - { - lsp_diff += (float) fabs( lsp[i + M] - lsp[i] ); - } - - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && lsp_diff < 1.6f && lsp_diff > 0.12f && st->next_coder_type == GENERIC && !st->prev_use_partial_copy && st->last_coder_type == UNVOICED && st->rf_frame_type >= RF_GENPRED ) - { - mvr2r( &lsp[0], &lsp[M], M ); - } - - /* update mem_MA and mem_AR memories */ - lsf_update_memory_float( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); - mvr2r( &lsf[M], st->mem_AR, M ); - - for ( k = 0; k < st->numlpc; ++k ) - { - mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); - mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); - } - } - else if ( ( hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) || ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) ) - { - int16_t tcx_lpc_cdk; - - if ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) - { - tcx_lpc_cdk = tcxlpc_get_cdk_float( GENERIC ); - } - else - { - tcx_lpc_cdk = tcxlpc_get_cdk_float( st->coder_type ); - } - - mvr2r( st->lsf_old, &lsf[0], M ); - mvr2r( st->lsp_old, &lsp[0], M ); - - D_lsf_tcxlpc_ivas( param_lpc, &lsf[M], lspind, st->narrowBand, tcx_lpc_cdk, st->mem_MA ); - - lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); - - lsf_update_memory_float( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); - mvr2r( &lsf[M], st->mem_AR, M ); - hTcxDec->envWeighted = 1; - - E_LPC_lsp_unweight_float( &lsp[M], lspnew_uw, lsfnew_uw, 1.0f / st->gamma_float ); - } - else - { - if ( hTcxDec->envWeighted ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); - hTcxDec->envWeighted = 0; - } - - /* Unquantize LPC */ - if ( st->core == TCX_20_CORE ) - { - lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, AUDIO, &LSF_Q_prediction ); - } - else - { - lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, st->coder_type, &LSF_Q_prediction ); - - if ( st->prev_use_partial_copy && st->last_core == ACELP_CORE && st->core == ACELP_CORE && st->prev_rf_frame_type >= RF_GENPRED && st->coder_type == UNVOICED ) - { - if ( st->lpcQuantization && st->acelp_cfg.midLpc ) - { - mvr2r( lspmid, &lsp[0], M ); - mvr2r( &lsp[M], lspmid, M ); - } - } - } - - for ( k = 0; k < st->numlpc; ++k ) - { - mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); - mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); - } - } - - /* PLC: [LPD: LPC concealment] built the moving average for the LPC concealment */ - for ( k = 0; k < st->numlpc; k++ ) - { - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsfnew_uw[k * M + i] ) / 3; - st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; - st->lsfoldbfi0[i] = lsfnew_uw[k * M + i]; - } - } - } - else - { - /* PLC: [LPD: LPC concealment] Conceal the LPC from the lost frame */ - const float *lsfBase; /* base for differential lsf coding */ - - if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) - { - st->numlpc = 1; - } - else - { - st->numlpc = 2; - } - - if ( st->nbLostCmpt == 1 ) - { - mvr2r( st->lsf_old, st->old_lsf_q_cng_float, M ); - mvr2r( st->lsp_old, st->old_lsp_q_cng_float, M ); - } - - - lsfBase = PlcGetlsfBase_flt( st->lpcQuantization, st->narrowBand, st->sr_core ); - - dlpc_bfi_flt( st->L_frame, lsfnew_uw, st->lsfold_uw_float, st->last_good, st->nbLostCmpt, st->mem_MA, st->mem_AR, &( st->stab_fac ), st->lsf_adaptive_mean, st->numlpc, st->lsf_cng_float, st->plcBackgroundNoiseUpdated, st->lsf_q_cng_float, st->old_lsf_q_cng_float, lsfBase ); - - hTcxDec->envWeighted = 0; - - mvr2r( st->lspold_uw_float, lsp, M ); - mvr2r( st->lsfold_uw_float, lsf, M ); - - for ( k = 0; k < st->numlpc; k++ ) - { - mvr2r( &lsfnew_uw[k * M], &lsf[( k + 1 ) * M], M ); - - lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); - lsf2lsp( st->lsf_q_cng_float, st->lsp_q_cng_float, M, st->sr_core ); - - mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); - } - } - - /*--------------------------------------------------------------* - * Rate switching - *---------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( &( lsf[M] ), &( lsf[0] ), M ); - mvr2r( &( lsp[M] ), &( lsp[0] ), M ); - mvr2r( &( lsf[M] ), st->lsf_old, M ); - mvr2r( &( lsp[M] ), st->lsp_old, M ); - mvr2r( &( lsf[M] ), lsfmid, M ); - mvr2r( &( lsp[M] ), lspmid, M ); - lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); - } - - if ( st->enablePlcWaveadjust ) - { - if ( st->core == ACELP_CORE ) - { - st->tonality_flag = 0; - } - - if ( bfi ) - { - st->hPlcInfo->nbLostCmpt++; - } - } - - /*--------------------------------------------------------------------------------* - * ACELP - *--------------------------------------------------------------------------------*/ - - if ( st->prev_bfi != 0 && bfi == 0 && st->coder_type == VOICED && st->prev_nbLostCmpt > 4 ) - { - st->dec_glr_idx = 1; - st->reset_mem_AR = 1; - } - - if ( st->core == ACELP_CORE ) - { - if ( !st->tcxonly ) - { - /* Set pointer to parameters */ - prm = param; - - /* Stability Factor */ - if ( !bfi ) - { - st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); - } - - if ( !bfi && st->prev_bfi ) - { - /* check if LSP interpolation can be relaxed or if LPC power can be diffused*/ - lsp2a_stab( &lsp[0], tmp_old, M ); - enr_old = enr_1_Az( tmp_old, 2 * L_SUBFR ); - - lsp2a_stab( &lsp[M], tmp_new, M ); - enr_new = enr_1_Az( tmp_new, 2 * L_SUBFR ); - } - - if ( !bfi && ( st->dec_glr_idx == 1 || ( !( st->safety_net ) && enr_new >= 256.f && enr_new > 2 * enr_old ) ) && st->prev_bfi ) - { - RecLpcSpecPowDiffuseLc_flt( &lsp[M], &lsp[0], &lsf[M], st, st->dec_glr_idx == 1 ? 1 : 0 ); - int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); - mvr2r( &lsf[M], lsfnew_uw, M ); - } - else - { - /* LPC Interpolation for ACELP */ - if ( !bfi && st->acelp_cfg.midLpc ) - { - st->relax_prev_lsf_interp = 0; - - if ( st->prev_bfi ) - { - /* check if LSP interpolation can be relaxed */ - if ( enr_new < ( 0.25f * enr_old ) ) - { - /* don't use safety_net as this is getting impacted with lsf_restruct */ - if ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == SIN_ONSET || st->clas_dec == INACTIVE_CLAS || st->coder_type == GENERIC || st->coder_type == TRANSITION ) - { - st->relax_prev_lsf_interp = 1; - } - else - { - st->relax_prev_lsf_interp = -1; - } - } - } - - if ( st->stab_fac == 0 && st->old_bfi_cnt > 0 && st->clas_dec != VOICED_CLAS && st->clas_dec != ONSET && st->relax_prev_lsf_interp == 0 ) - { - st->relax_prev_lsf_interp = 2; - } - int_lsp4( L_frame, &lsp[0], lspmid, &lsp[M], Aq, M, st->relax_prev_lsf_interp ); - } - else - { - int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); - int_lsp( L_frame, st->old_lsp_q_cng_float, st->lsp_q_cng_float, st->Aq_cng_float, M, interpol_frac_12k8, 0 ); - } - } - } - - if ( bfi && st->last_core != ACELP_CORE ) - { - /* PLC: [TCX: TD PLC] */ - con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); - lerp_flt( synthFB, synth, st->L_frame, st->hTcxDec->L_frameTCX ); - st->con_tcx = 1; - set_f( &st->mem_pitch_gain_float[2], st->lp_gainp, st->nb_subfr ); - } - else - { - /* ACELP decoder */ - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME ) - { - mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - else - { - mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - } - - if ( bfi ) - { - /* PLC: [ACELP: general] - * PLC: Use the ACELP like concealment */ - con_acelp( Aq, st->core_ext_mode, &synth[0], pitch, pit_gain, st->stab_fac, st, pitch_buf, voice_factors, ptr_bwe_exc ); - mvr2r( &st->mem_pitch_gain_float[2], &st->mem_pitch_gain_float[st->nb_subfr + 2], st->nb_subfr ); - set_zero( &st->mem_pitch_gain_float[2], st->nb_subfr ); - } - else - { - decoder_acelp( st, prm, Aq, st->acelp_cfg, &synth[0], pitch, pit_gain, st->stab_fac, pitch_buf, voice_factors, LSF_Q_prediction, ptr_bwe_exc ); - - if ( st->flagGuidedAcelp > 0 ) - { - st->guidedT0 = max( min( st->T0_4th + st->guidedT0, NBPSF_PIT_MAX ), PIT_MIN_16k ); - } - - for ( i = 0; i < st->nb_subfr; i++ ) - { - st->mem_pitch_gain_float[2 + ( 2 * st->nb_subfr - 1 ) - i] = st->mem_pitch_gain_float[2 + ( st->nb_subfr - 1 ) - i]; - st->mem_pitch_gain_float[2 + ( st->nb_subfr - 1 ) - i] = pit_gain[i]; - } - } - } - - /* LPC for ACELP/BWE */ - if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) - { - mvr2r( Aq, st->mem_Aq_float, nb_subfr * ( M + 1 ) ); - } - - /* PLC: [TCX: Tonal Concealment] */ - /* Signal that this frame is not TCX */ - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, 0, 0, 0, 0 ); - - if ( !bfi ) - { - st->second_last_tns_active = st->last_tns_active; - st->last_tns_active = 0; - hTcxDec->tcxltp_last_gain_unmodified_float = 0.0f; - } - } - - - /*--------------------------------------------------------------------------------* - * TCX20 - *--------------------------------------------------------------------------------*/ - - if ( st->core == TCX_20_CORE ) - { - /* Set pointer to parameters */ - prm = param; - - /* Stability Factor */ - if ( !bfi ) - { - st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); - } - - if ( hTcxDec->enableTcxLpc ) - { - /* Convert quantized lsp to A */ - lsp2a_stab( &lsp[M], Aq, M ); - } - else - { - if ( !st->tcxonly ) - { - if ( !bfi && st->prev_bfi && !( st->safety_net ) && st->rate_switching_reset ) - { - /* diffuse LPC power on rate switching*/ - RecLpcSpecPowDiffuseLc_flt( &lsp[M], &lsp[0], &lsf[M], st, 0 ); - int_lsp( L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); - mvr2r( &lsf[M], lsfnew_uw, M ); - } - else - { - /* LPC Interpolation for TCX */ - E_LPC_int_lpc_tcx_float( &lsp[0], &lsp[M], Aq ); - } - } - else - { - lsp2a_stab( &lsp[M], Aq, M ); - } - } - - if ( !bfi && hTcxDec->tcx_lpc_shaped_ari ) - { - basop_E_LPC_f_lsp_a_conversion( lspind, Aind, M ); - } - - /* TCX decoder */ - decoder_tcx( st, prm, Aq, Aind, &synth[0], &synthFB[0], bfi, 0, 0 ); - } - - /*--------------------------------------------------------------------------------* - * TCX10 - *--------------------------------------------------------------------------------*/ - - if ( st->core == TCX_10_CORE ) - { - prm = NULL; /* just to avoid MSVC warnings */ - - for ( k = 0; k < 2; k++ ) - { - /* Set pointer to parameters */ - prm = param + ( k * DEC_NPRM_DIV ); - - /* Stability Factor */ - if ( !bfi ) - { - st->stab_fac = lsf_stab( &lsf[( k + 1 ) * M], &lsf[k * M], 0, st->L_frame ); - } - - lsp2a_stab( &lsp[( k + 1 ) * M], Aq, M ); - IGFDecRestoreTCX10SubFrameData_flt( st->hIGFDec, k ); - - /* TCX decoder */ - decoder_tcx( st, prm, Aq, Aind, &synth[k * L_frame / 2], &synthFB[k * L_frameTCX / 2], bfi, k, 0 ); - } - } - - if ( st->core == TCX_10_CORE || st->core == TCX_20_CORE ) - { - if ( st->enablePlcWaveadjust || /* bfi */ - ( st->last_total_brate >= HQ_48k && /* recovery */ - st->last_codec_mode == MODE2 ) ) - { - /* waveform adjustment */ - concealment_signal_tuning( st, bfi, synthFB, past_core_mode ); - - if ( ( bfi || st->prev_bfi ) && st->hPlcInfo->Pitch && st->hPlcInfo->concealment_method == TCX_NONTONAL ) - { - lerp_flt( synthFB, synth, L_frame, L_frameTCX ); - - if ( !bfi && st->prev_bfi ) - { - st->hPlcInfo->Pitch = 0; - } - } - } - - if ( !bfi ) - { - TonalMDCTConceal_SaveTimeSignal_ivas( st->hTonalMDCTConc, synthFB, L_frameTCX ); - } - - decoder_tcx_post( st, synth, synthFB, Aq, bfi, 0 ); - - if ( st->core == TCX_20_CORE ) - { - /* LPC Interpolation for BWE/post-processing */ - if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) - { - int_lsp( L_frame, st->lspold_uw_float, lspnew_uw, Aq, M, interpol_frac_12k8, 0 ); - mvr2r( Aq, st->mem_Aq_float, nb_subfr * ( M + 1 ) ); - } - } - } - - - /* PLC: [Common: Classification] */ - /* the classifier buffer is always updated if the sr is at - 16000 or below - the classification itself is just performed if(!st->tcxonly ) */ - if ( st->sr_core <= INT_FS_16k ) - { - if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->tcxonly && st->bfi ) ) - { - float pitch_C[4]; - - /* note: the classifier needs the pitch only for tcx_only == 0, i.e. not for TCX10 */ - pitch_C[0] = pitch_C[1] = pitch_C[2] = pitch_C[3] = (float) floor( st->old_fpitch_float + 0.5f ); - - FEC_clas_estim( synth, pitch_C, st->L_frame, st->tcxonly ? GENERIC : st->core_ext_mode, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, hTcxLtpDec->tcxltp ? hTcxDec->tcxltp_last_gain_unmodified_float : -1.0f, st->narrowBand, CLASSIFIER_TCX, bfi, st->preemph_fac_float, st->tcxonly, st->last_core_brate, -1 ); - } - } - - /*--------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------*/ - - if ( bfi && st->last_core != ACELP_CORE ) - { - /* Update FEC_scale_syn parameters */ - if ( hTcxLtpDec->tcxltp_gain_float == 0 ) - { - fer_energy( L_frame, UNVOICED, synth, (float) ( L_frame / 2 ), &st->enr_old, L_frame ); - } - else - { - fer_energy( L_frame, st->clas_dec, synth, st->old_fpitch_float, &st->enr_old, L_frame ); - } - } - - if ( !bfi && st->clas_dec >= VOICED_TRANSITION && st->clas_dec < INACTIVE_CLAS ) - { - if ( st->core == ACELP_CORE ) - { - offset = ( st->nb_subfr - 1 ) * ( M + 1 ); - } - else - { - /* TCX */ - offset = 0; - } - - /* use latest LPC set */ - st->old_enr_LP_float = enr_1_Az( Aq + offset, L_SUBFR ); - } - - - /* Update */ - mvr2r( synth_buf + L_frame, st->hTcxDec->old_synth_float, st->hTcxDec->old_synth_len ); - mvr2r( st->hTcxDec->old_synthFB + L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), st->hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); - mvr2r( synth_bufFB + L_frameTCX, st->hTcxDec->old_synthFB, st->hTcxDec->old_synth_lenFB ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - - mvr2r( &lspnew_uw[( st->numlpc - 1 ) * M], st->lspold_uw_float, M ); - mvr2r( &lsfnew_uw[( st->numlpc - 1 ) * M], st->lsfold_uw_float, M ); - - if ( bfi == 1 ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); /* for recovery */ - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); /* for recovery */ - } - else - { - mvr2r( &lsp[st->numlpc * M], st->lsp_old, M ); - mvr2r( &lsf[st->numlpc * M], st->lsf_old, M ); - } - mvr2r( st->lsp_q_cng_float, st->old_lsp_q_cng_float, M ); - mvr2r( st->lsf_q_cng_float, st->old_lsf_q_cng_float, M ); - - /* Update MODE1 CNG parameters */ - if ( !st->tcxonly && st->hTdCngDec != NULL ) - { - /* update CNG parameters in active frames */ - if ( st->bwidth == NB && hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) - { - float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; - assert( st->L_frame == L_FRAME ); - mvr2r( synth + L_FRAME - L_LP, buf, L_LP ); - tmp = synth[L_FRAME - L_LP - 1]; - preemph( buf, st->preemph_fac_float, L_LP, &tmp ); - autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); - lag_wind_flt( r, M, INT_FS_12k8, LAGW_WEAK ); - lev_dur( A, r, M, NULL ); - a2lsp_stab( A, lsptmp, &lspnew_uw[0] ); - residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); - - if ( st->hTdCngDec != NULL ) - { - cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); - } - } - else if ( st->hTdCngDec != NULL ) - { - cng_params_upd( &lsp[M], st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); - } - - /* Set 16k LSP flag for CNG buffer */ - st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - } - - st->last_is_cng = 0; - - /* Postfiltering */ - post_decoder_flt( st, synth_buf, pit_gain, pitch, signal_out, bpf_noise_buf ); - - if ( signal_outFB ) - { - mvr2r( synthFB, signal_outFB, L_frameTCX ); - } - - if ( st->enablePlcWaveadjust ) - { - if ( !bfi ) - { - st->hPlcInfo->nbLostCmpt = 0; - } - - if ( st->core == ACELP_CORE ) /* may happen only if bfi==1 */ - { - set_state_ivas( st->hPlcInfo->Transient, st->core, MAX_POST_LEN ); - } - } - - - return; -} -#endif diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 516662308..9c2e014b4 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" #include "basop_util.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /* #if defined(_WIN32) && (_MSC_VER <= 1200) /\* disable global optimizations to overcome an internal compiler error *\/ */ #if defined( _MSC_VER ) && ( _MSC_VER <= 1200 ) /* disable global optimizations to overcome an internal compiler error */ @@ -991,4 +990,3 @@ void decoder_LPD_fx( return; } -#endif diff --git a/lib_dec/dec_ace.c b/lib_dec/dec_ace.c index ebdab29ea..da306d76e 100644 --- a/lib_dec/dec_ace.c +++ b/lib_dec/dec_ace.c @@ -40,504 +40,3 @@ #include #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decoder_acelp() - * - * Decode ACELP frame MODE2 - *-------------------------------------------------------------------*/ - -void decoder_acelp( - Decoder_State *st, /* i/o: coder memory state */ - int16_t prm[], /* i : parameters */ - const float A[], /* i : coefficients NxAz[M+1] */ - ACELP_config acelp_cfg, /* i : ACELP config */ - float synth[], /* i/o: synthesis */ - int16_t *pT, /* o : pitch for all subframe */ - float *pgainT, /* o : pitch gain for all subfr */ - const float stab_fac, /* i : stability of isf */ - float *pitch_buffer, /* i/o: pitch values for each subfr.*/ - float *voice_factors, /* o : voicing factors */ - const int16_t LSF_Q_prediction, /* i : LSF prediction mode */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - int16_t i, i_subfr, L_frame; - int16_t T0, T0_frac, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res; - float tmp, gain_pit, gain_code, Es_pred; - float code[L_SUBFR]; - float mem_syn[M], *syn, syn_buf[M + L_FRAME16k + L_FRAME16k / 2]; - float *exc, exc_buf[L_EXC_MEM_DEC + L_FRAME16k + 1]; - float exc2[L_FRAME16k]; - const float *p_A; - float *pt_pitch, pitch_buf[NB_SUBFR16k]; - float gain_inov; - float mem_back[M]; - float h1[L_FRAME16k / 4 + 1]; - float mem[M]; - const float *pA; - float gain_code2; - float code2[L_SUBFR]; - int16_t lp_flag; - float error = 0.0f; - float gain_preQ = 0; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - PulseConfig config; - float weights[5]; - - float prev_gain_pit; - float tmp_noise; /* Long term temporary noise energy */ - - float gain_code_tmp; - float gain_pit_tmp; - float gain_code_pre; - - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - gain_inov = 0; /* to avoid compilation warnings */ - T0 = 0; /* to avoid compilation warnings */ - T0_frac = 0; /* to avoid compilation warnings */ - T0_res = 0; /* to avoid compilation warnings */ - - /*------------------------------------------------------------------------* - * Initializations * - *------------------------------------------------------------------------*/ - - gain_code_pre = 0; - set_f( code_preQ, 0.f, L_SUBFR ); - - gain_pit = 0; - gain_code = 0; - gain_code2 = 0.f; - - prev_gain_pit = 0; - tmp_noise = 0; - - if ( st->nb_subfr == NB_SUBFR ) - { - weights[0] = 0.1f; - weights[1] = 0.2f; - weights[2] = 0.3f; - weights[3] = 0.4f; - } - else /*nb_subfr == NB_SUBFR16k */ - { - weights[0] = (float) 1 / 15; - weights[1] = (float) 2 / 15; - weights[2] = (float) 3 / 15; - weights[3] = (float) 4 / 15; - weights[4] = (float) 5 / 15; - } - - st->lp_gainp = 0; - st->lp_gainc = 0; - - - /* Framing parameters */ - L_frame = st->L_frame; - - /*------------------------------------------------------------------------* - * Previous frame is TCX * - *------------------------------------------------------------------------*/ - /* Reset phase dispersion */ - - if ( st->last_core_bfi > ACELP_CORE ) - { - set_zero( st->dispMem, 8 ); - } - - /* Update of synthesis filter memories in case of 12k8 core */ - if ( st->prev_bfi && st->last_con_tcx && st->L_frame < L_FRAME16k ) - { - synth_mem_updt2_flt( st->L_frame, L_FRAME16k, st->old_exc, st->mem_syn_r_float, st->mem_syn2, NULL, DEC ); - } - - if ( st->last_con_tcx && st->old_enr_LP_float ) - { - float enr_LP, ratio_float; - - /* rescale excitation buffer if LPC energies differs too much */ - enr_LP = enr_1_Az( A, L_SUBFR ); - - ratio_float = st->old_enr_LP_float / enr_LP; - if ( ratio_float < 0.8 ) - { - v_multc( st->old_exc, ratio_float, st->old_exc, L_EXC_MEM_DEC ); - } - } - - /*------------------------------------------------------------------------* - * Initialize buffers * - *------------------------------------------------------------------------*/ - - mvr2r( st->mem_syn2, mem_back, M ); - - /* set ACELP synthesis memory */ - mvr2r( st->mem_syn2, mem_syn, M ); - - /* set excitation memory*/ - exc = exc_buf + L_EXC_MEM_DEC; - mvr2r( st->old_exc, exc_buf, L_EXC_MEM_DEC ); - *( exc + L_frame ) = 0.f; - - /* Init syn buffer */ - syn = syn_buf + M; - mvr2r( st->mem_syn2, syn_buf, M ); - - /*------------------------------------------------------------------------* - * Fast recovery flag - *------------------------------------------------------------------------*/ - - if ( st->prev_bfi && st->coder_type == VOICED ) - { - /*Force BPF to be applied fully*/ - st->bpf_gain_param = 3; - } - - /*------------------------------------------------------------------------* - * - decode mean_ener_code for gain decoder (d_gain2.c) * - *------------------------------------------------------------------------*/ - - if ( acelp_cfg.nrg_mode > 0 ) - { - Es_pred_dec( &Es_pred, prm[0], acelp_cfg.nrg_bits, acelp_cfg.nrg_mode > 1 ); - prm++; - } - else - { - Es_pred = 0.f; - } - - /*------------------------------------------------------------------------* - * Loop for every subframe in the analysis frame * - *------------------------------------------------------------------------* - * To find the pitch and innovation parameters. The subframe size is * - * L_SUBFR and the loop is repeated L_frame/L_SUBFR times. * - * - compute impulse response of weighted synthesis filter (h1[]) * - * - compute the target signal for pitch search * - * - find the closed-loop pitch parameters * - * - encode the pitch delay * - * - update the impulse response h1[] by including fixed-gain pitch * - * - find target vector for codebook search * - * - correlation between target vector and impulse response * - * - codebook search * - * - encode codebook address * - * - VQ of pitch and codebook gains * - * - find synthesis speech * - * - update states of weighting filter * - *------------------------------------------------------------------------*/ - - p_A = A; - pt_pitch = pitch_buf; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) - { - if ( i_subfr == 0 ) - { - decod_nelp( st, &tmp_noise, pt_pitch, exc, exc2, voice_factors, bwe_exc, 0 /*st->bfi*/, pgainT ); - set_f( pitch_buffer, L_SUBFR, NB_SUBFR ); - } - } - else - { - /*-------------------------------------------------------* - * - Decode adaptive codebook. * - *-------------------------------------------------------*/ - - if ( st->use_partial_copy && st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] == 0 ) - { - gain_pit = prev_gain_pit; - } - - if ( acelp_cfg.ltp_bits != 0 ) - { - /* pitch lag decoding */ - *pt_pitch = Mode2_pit_decode_flt( acelp_cfg.ltp_mode, i_subfr, L_SUBFR, &prm, &T0, &T0_frac, &T0_res, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); - - /* find pitch excitation */ - if ( st->pit_res_max == 6 && !( st->use_partial_copy ) ) - { - if ( T0_res == ( st->pit_res_max >> 1 ) ) - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); - } - else - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); - } - } - else - { - if ( T0_res == ( st->pit_res_max >> 1 ) ) - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - else - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - } - - /* LP filtering of the adaptive excitation*/ - lp_flag = acelp_cfg.ltf_mode; - - if ( acelp_cfg.ltf_mode == NORMAL_OPERATION ) - { - lp_flag = *prm; - prm++; - } - - lp_filt_exc_dec( st, MODE2, i_subfr, L_SUBFR, L_frame, lp_flag, exc ); - } - else - { - /* No adaptive codebook (UC) */ - set_zero( exc + i_subfr, L_SUBFR ); - - T0 = L_SUBFR; - T0_frac = 0; - T0_res = 1; - pitch_buf[i_subfr / L_SUBFR] = (float) L_SUBFR; - } - - if ( st->igf ) - { - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, 0 ); - } - - pitch_buffer[i_subfr / L_SUBFR] = (float) T0 + (float) T0_frac / (float) T0_res; - - /*-------------------------------------------------------* - * - Decode innovative codebook. * - *-------------------------------------------------------*/ - - if ( st->use_partial_copy && ( st->rf_frame_type == RF_ALLPRED || ( st->rf_frame_type == RF_GENPRED && ( i_subfr == L_SUBFR || i_subfr == 3 * L_SUBFR ) ) ) ) - { - set_f( code, 0.0f, L_SUBFR ); - } - else - { - config = PulseConfTable[acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]]; - D_ACELP_indexing_ivas( code, config, NB_TRACK_FCB_4T, prm, &st->BER_detect ); - ( prm ) += 8; - - /*-------------------------------------------------------* - * - Add the fixed-gain pitch contribution to code[]. * - *-------------------------------------------------------*/ - - cb_shape( acelp_cfg.pre_emphasis, acelp_cfg.pitch_sharpening, acelp_cfg.phase_scrambling, acelp_cfg.formant_enh, acelp_cfg.formant_tilt, acelp_cfg.formant_enh_num_flt, acelp_cfg.formant_enh_den_flt, p_A, code, st->tilt_code, pitch_buf[i_subfr / L_SUBFR], L_SUBFR ); - } - - /*-------------------------------------------------------* - * - Generate Gaussian excitation * - *-------------------------------------------------------*/ - - if ( acelp_cfg.gains_mode[i_subfr / L_SUBFR] == 7 && !st->use_partial_copy ) - { - gaus_L2_dec_flt( code2, st->tilt_code, p_A, acelp_cfg.formant_enh_num_flt, &( st->seed_acelp ) ); - } - else - { - gain_code2 = 0.f; - set_zero( code2, L_SUBFR ); - } - - /*-------------------------------------------------* - * - Decode codebooks gains. * - *-------------------------------------------------*/ - - if ( st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] != 0 ) - { - decode_acelp_gains( code, acelp_cfg.gains_mode[i_subfr / L_SUBFR], Es_pred, &gain_pit, &gain_code, &prm, &( st->past_gpit_float ), &( st->past_gcode_float ), &gain_inov, L_SUBFR, code2, &gain_code2 ); - } - - if ( st->use_partial_copy && st->rf_frame_type == RF_ALLPRED ) - { - st->past_gcode_float = 0.0f; - } - - if ( st->use_partial_copy && st->rf_frame_type == RF_NOPRED ) - { - st->past_gpit_float = 0.004089f; - } - - /*----------------------------------------------------------* - * Update parameters for the next subframe. * - * - tilt of code: 0.0 (unvoiced) to 0.5 (voiced) * - *----------------------------------------------------------*/ - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &( st->voice_fac_float ), L_SUBFR, acelp_cfg.voice_tilt ); - - pgainT[i_subfr / L_SUBFR] = gain_pit; - - /*-------------------------------------------------------* - * - Find the total excitation. * - *-------------------------------------------------------*/ - - gain_code_tmp = gain_code; - gain_pit_tmp = gain_pit; - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && ( st->use_partial_copy || st->prev_use_partial_copy ) ) - { - if ( i_subfr > 0 && gain_pit > 1.23f && st->prev_tilt_code_dec > 0.2f && st->next_coder_type == VOICED && ( st->use_partial_copy || st->prev_use_partial_copy ) ) - { - gain_pit *= ( 0.8f - i_subfr / 640.0f ); - } - - else if ( !st->prev_use_partial_copy && st->last_coder_type == UNVOICED && st->next_coder_type != UNVOICED && gain_code < gain_code_pre ) - { - gain_code = 0.0f; - } - } - - gain_code_pre = gain_code; - st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc2[i + i_subfr] += gain_code2 * code2[i]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - gain_code = gain_code_tmp; - gain_pit = gain_pit_tmp; - - if ( st->igf != 0 ) - { - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, st->voice_fac_float, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, 0 ); - } - - /*---------------------------------------------------------* - * Enhance the excitation * - *---------------------------------------------------------*/ - - enhancer( MODE2, -1, acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], 0, st->coder_type, L_frame, st->voice_fac_float, stab_fac, st->past_gcode_float, gain_inov, &( st->gc_threshold ), code, &exc2[i_subfr], gain_pit, st->dispMem ); - - } /* !RF_NELP frame partial copy */ - - /*----------------------------------------------------------* - * - compute the synthesis speech * - *----------------------------------------------------------*/ - - syn_filt( p_A, M, &exc2[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); - - /*-----------------------------------------------------------------* - * update lp_filtered gains for the case of frame erasure - *-----------------------------------------------------------------*/ - - st->lp_gainp += weights[i_subfr / L_SUBFR] * st->past_gpit_float; - st->lp_gainc += weights[i_subfr / L_SUBFR] * st->past_gcode_float; - - /*----------------------------------------------------------* - * - update pitch lag for guided ACELP * - *----------------------------------------------------------*/ - - if ( st->enableGplc && ( i_subfr / L_SUBFR ) == ( L_frame / L_SUBFR ) - 1 ) - { - st->T0_4th = T0; - } - - /*----------------------------------------------------------* - * - Update LPC coeffs * - *----------------------------------------------------------*/ - - p_A += ( M + 1 ); - pt_pitch++; - /* copy current gain for next subframe use, in case there is no explicit encoding */ - prev_gain_pit = gain_pit; - - } /* end of subframe loop */ - - if ( st->BER_detect ) - { - for ( i = 0; i < L_frame; i++ ) - { - exc[i] = 0.0f; - } - int_lsp( L_frame, st->old_lsp_q_cng_float, st->lsp_q_cng_float, st->Aq_cng_float, M, interpol_frac_12k8, 0 ); - - p_A = st->Aq_cng_float; - if ( st->last_good < UNVOICED_TRANSITION ) - { - mvr2r( st->mem_syn2, mem_syn, M ); - } - else - { - set_zero( mem_syn, M ); - } - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - syn_filt( p_A, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); - p_A += ( M + 1 ); - } - } - - tmp = 0; - pA = A + ( st->nb_subfr - 1 ) * ( M + 1 ); - set_zero( h1, L_SUBFR + 1 ); - set_zero( mem, M ); - h1[0] = 1.0f; - syn_filt( pA, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ - deemph( h1, st->preemph_fac_float, L_SUBFR, &tmp ); /* impulse response of deemph */ - /* impulse response level = gain introduced by synthesis+deemphasis */ - st->last_gain_syn_deemph_float = (float) sqrt( dotp( h1, h1, L_SUBFR ) ); - - /*-----------------------------------------------------------* - * PLC: [ACELP: Fade-out] - * PLC: update the background level - *-----------------------------------------------------------*/ - - /* Do the classification */ - FEC_clas_estim( syn, pitch_buf, st->L_frame, st->core_ext_mode, st->codec_mode, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, CLASSIFIER_ACELP, 0, st->preemph_fac_float, st->tcxonly, st->last_core_brate, -1 ); - - /* Update Pitch Lag memory */ - mvr2r( &st->old_pitch_buf[L_frame / L_SUBFR], st->old_pitch_buf, L_frame / L_SUBFR ); - mvr2r( pitch_buf, &st->old_pitch_buf[L_frame / L_SUBFR], L_frame / L_SUBFR ); - - FEC_scale_syn( st->L_frame, st->clas_dec, st->last_good, syn, pitch_buf, st->enr_old, 0, st->coder_type, LSF_Q_prediction, &st->scaling_flag, &st->lp_ener_FEC_av_float, &st->lp_ener_FEC_max_float, st->bfi, st->total_brate, st->prev_bfi, st->last_core_brate, exc, exc2, A, &st->old_enr_LP_float, mem_back, mem_syn, st->last_con_tcx && ( st->L_frameTCX_past != st->L_frame ) && ( st->last_core != ACELP_CORE ), ( st->clas_dec == ONSET || ( st->last_good >= VOICED_TRANSITION && st->last_good < INACTIVE_CLAS ) ) ); - - /* update ACELP synthesis memory */ - mvr2r( mem_syn, st->mem_syn2, M ); - mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - - tmp = st->syn_float[M]; - deemph( syn, st->preemph_fac_float, L_frame, &tmp ); - mvr2r( syn + L_frame - ( L_frame / 2 ), st->hTcxDec->old_syn_Overl_float, L_frame / 2 ); - mvr2r( syn + L_frame - M - 1, st->syn_float, M + 1 ); - mvr2r( syn, synth, L_frame ); - - if ( st->hBWE_TD != NULL ) - { - mvr2r( syn, st->hBWE_TD->old_core_synth, L_frame ); - } - - /* update old_exc */ - mvr2r( exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); - - /* Output pitch parameters for bass post-filter */ - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - *pT++ = (int16_t) ( pitch_buf[i_subfr / L_SUBFR] + 0.5f ); - } - - /* Update TCX-LTP */ - hTcxDec->tcxltp_last_gain_unmodified_float = 0.f; - - /*Update MODE1*/ - mvr2r( p_A - ( M + 1 ), st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = Es_pred; - - hTcxDec->tcxltp_third_last_pitch_float = hTcxDec->tcxltp_second_last_pitch_float; - hTcxDec->tcxltp_second_last_pitch_float = st->old_fpitch_float; - st->old_fpitch_float = pitch_buf[( L_frame / L_SUBFR ) - 1]; - - return; -} -#endif diff --git a/lib_dec/dec_ace_fx.c b/lib_dec/dec_ace_fx.c index 864c87805..df518a395 100644 --- a/lib_dec/dec_ace_fx.c +++ b/lib_dec/dec_ace_fx.c @@ -17,7 +17,6 @@ * * Decode ACELP frame MODE2 *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void decoder_acelp_fx( Decoder_State *st, Word16 prm[], /* i : parameters */ @@ -756,5 +755,3 @@ void decoder_acelp_fx( return; } - -#endif diff --git a/lib_dec/dec_acelp.c b/lib_dec/dec_acelp.c index cb735709a..7cae62391 100644 --- a/lib_dec/dec_acelp.c +++ b/lib_dec/dec_acelp.c @@ -44,325 +44,3 @@ /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void D_ACELP_decode_arithtrack_ivas( float v[], uint32_t s, int16_t p, const int16_t trackstep, const int16_t tracklen ); - -/*---------------------------------------------------------------------* - * Function D_ACELP_indexing_ivas() - * - *---------------------------------------------------------------------*/ - -void D_ACELP_indexing_ivas( - float code[], - PulseConfig config, - const int16_t num_tracks, - int16_t index[], - int16_t *BER_detect ) -{ - int16_t track, pulses, k, pulsestrack[NB_TRACK_FCB_4T]; - uint32_t s; - uint32_t index_n[NB_TRACK_FCB_4T]; - uint16_t trackpos, idxs[MAX_IDX_LEN]; - int16_t restpulses, wordcnt; - - assert( num_tracks == NB_TRACK_FCB_4T ); - - wordcnt = ( config.bits + 15 ) >> 4; /* ceil(bits/16) */ - - /* check if some tracks have more pulses */ - restpulses = config.nb_pulse & ( num_tracks - 1 ); - - /* cast to short */ - for ( k = 0; k < wordcnt; k++ ) - { - idxs[k] = (uint16_t) index[k]; - } - - if ( restpulses ) - { - /* check if we need to code track positions */ - switch ( config.codetrackpos ) - { - case TRACKPOS_FREE_THREE: - /* Find track with less pulses */ - trackpos = idxs[0] & 3; - longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); - - /* set number of pulses per track */ - set_s( pulsestrack, ( config.nb_pulse >> 2 ) + 1, 4 ); - pulsestrack[trackpos]--; /* this one has less pulses */ - break; - case TRACKPOS_FREE_ONE: - /* Find track with more pulses */ - trackpos = idxs[0] & 3; - longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); - - /* set number of pulses per track */ - set_s( pulsestrack, ( config.nb_pulse >> 2 ), 4 ); - pulsestrack[trackpos]++; /* this one has more pulses */ - break; - case TRACKPOS_FIXED_EVEN: - /* Pulses on even tracks */ - pulsestrack[0] = ( config.nb_pulse + 1 ) >> 1; - pulsestrack[1] = 0; - pulsestrack[2] = config.nb_pulse >> 1; - pulsestrack[3] = 0; - break; - case TRACKPOS_FIXED_FIRST: - /* set number of pulses per track */ - set_s( pulsestrack, config.nb_pulse / num_tracks, 4 ); - for ( k = 0; k < restpulses; k++ ) - { - pulsestrack[k]++; - } - break; - case TRACKPOS_FIXED_TWO: - /* 1100, 0110, 0011, 1001 */ - /* Find track with less pulses */ - trackpos = idxs[0] & 3; - longshiftright( idxs, 2, idxs, wordcnt, wordcnt ); - - /* set number of pulses per track */ - set_s( pulsestrack, ( config.nb_pulse >> 2 ), 4 ); - pulsestrack[trackpos]++; - trackpos++; - trackpos &= 3; - pulsestrack[trackpos]++; - break; - default: - assert( 0 ); - break; - } - } - else - { - /* set number of pulses per track */ - set_s( pulsestrack, ( config.nb_pulse / num_tracks ), num_tracks ); - } - - if ( config.bits == 43 ) - { - D_ACELP_decode_43bit( idxs, code, pulsestrack ); - } - else - { - fcb_pulse_track_joint_decode_ivas( idxs, wordcnt, index_n, pulsestrack, num_tracks ); - - for ( track = num_tracks - 1; track >= 1; track-- ) - { - pulses = pulsestrack[track]; - - if ( pulses ) - { - s = index_n[track]; - - /* decode state to actual pulse positions on track */ - /*D_ACELP_decode_arithtrack_old(code+track, s, pulses, 4); */ - D_ACELP_decode_arithtrack_ivas( code + track, s, pulses, num_tracks, 16 ); - } - else - { - /* track is empty */ - for ( k = track; k < 16 * num_tracks; k += num_tracks ) - { - code[k] = 0.0f; - } - } - } - s = index_n[0]; - pulses = pulsestrack[0]; - /* safety check in case of bit errors */ - if ( s >= pulsestostates[16][pulses - 1] ) - { - set_f( code, 0.0f, L_SUBFR ); - *BER_detect = 1; - return; - } - if ( pulses ) - { - D_ACELP_decode_arithtrack_ivas( code, s, pulses, num_tracks, 16 ); - } - else - { - /* track is empty */ - for ( k = 0; k < 16 * num_tracks; k += num_tracks ) - { - code[k] = 0.0f; - } - } - } - - return; -} - - -static void D_ACELP_decode_arithtrack_ivas( - float v[], - uint32_t s, - int16_t p, - const int16_t trackstep, - const int16_t tracklen ) -{ - int16_t k; - - for ( k = (tracklen) -1; k >= 0; k-- ) - { - v[k * trackstep] = 0.0f; /* default: there is no pulse here */ - while ( ( p ) && ( s >= pulsestostates[k][p - 1] ) ) - { - s -= pulsestostates[k][p - 1]; - if ( v[k * trackstep] ) - { - /* there is a pulse here already = sign is known */ - if ( v[k * trackstep] > 0.0f ) - { - v[k * trackstep]++; /* place one more pulse here */ - } - else - { - v[k * trackstep]--; /* place one more pulse here */ - } - } - else - { - /* this is the first pulse here -> determine sign */ - if ( s & 1 ) - { - v[k * trackstep] = -1.0f; /* place a negative pulse here */ - } - else - { - v[k * trackstep] = +1.0f; /* place a negative pulse here */ - } - s >>= 1; - } - p--; /* one pulse placed, so one less left */ - } - } - - return; -} - -void fcb_pulse_track_joint_decode_ivas( - uint16_t *idxs, - const int16_t wordcnt, - uint32_t *index_n, - const int16_t *pulse_num, - const int16_t track_num ) -{ - int16_t hi_to_low[10] = { 0, 0, 0, 3, 9, 5, 3, 1, 8, 8 }; - - uint64_t index; - int16_t indx_flag, indx_flag_1; - int16_t track, track_num1, pulse_num0, pulse_num1; - int64_t indx_tmp, div_tmp; /* must be long */ - int16_t indx_flag_2; - - indx_flag = 0; - indx_flag_1 = 0; - indx_flag_2 = 0; - for ( track = 0; track < track_num; track++ ) - { - indx_flag += ( pulse_num[track] >> 2 ); - indx_flag_1 += ( pulse_num[track] >> 1 ); - indx_flag_2 += ( pulse_num[track] >> 3 ); - } - - if ( indx_flag >= track_num ) - { - hi_to_low[4] = 9; - } - else - { - hi_to_low[4] = 1; - } - - if ( indx_flag_2 >= 1 ) - { - hi_to_low[7] = 9; - } - else - { - hi_to_low[7] = 1; - } - - if ( indx_flag_1 >= track_num ) - { - if ( indx_flag >= track_num ) - { - index = 0; - if ( indx_flag_2 >= 1 ) - { - for ( track = ( wordcnt - 1 ); track >= 6; track-- ) - { - index = ( index << 16 ) + idxs[track]; - } - index_n[3] = ( ( (uint32_t) idxs[5] ) << 8 ) + ( ( idxs[4] >> 8 ) & 0xff ); - index_n[2] = ( ( ( (uint32_t) idxs[4] ) << 16 ) + idxs[3] ) & 0xffffffUL; - index_n[1] = ( ( (uint32_t) idxs[2] ) << 8 ) + ( ( idxs[1] >> 8 ) & 0xff ); - index_n[0] = ( ( ( (uint32_t) idxs[1] ) << 16 ) + idxs[0] ) & 0xffffffUL; - } - else - { - for ( track = ( wordcnt - 1 ); track >= track_num; track-- ) - { - index = ( index << 16 ) + idxs[track]; - } - for ( track = 0; track < track_num; track++ ) - { - index_n[track] = idxs[track]; - } - } - } - else - { - index = 0; - for ( track = ( wordcnt - 1 ); track >= 2; track-- ) - { - index = ( index << 16 ) + idxs[track]; - } - - index_n[3] = idxs[1] & 0xff; - index_n[2] = idxs[1] >> 8; - index_n[1] = idxs[0] & 0xff; - index_n[0] = idxs[0] >> 8; - } - - track_num1 = track_num - 1; - pulse_num1 = pulse_num[track_num1]; - index = ( index << hi_to_low[pulse_num1] ) + ( index_n[track_num1] >> low_len[pulse_num1] ); - for ( track = ( track_num - 1 ); track > 0; track-- ) - { - track_num1 = track - 1; - pulse_num0 = pulse_num[track_num1]; - pulse_num1 = pulse_num[track]; - index = ( index << hi_to_low[pulse_num0] ) + ( index_n[track_num1] >> low_len[pulse_num0] ); - - div_tmp = index / indx_fact[pulse_num1]; - indx_tmp = index - div_tmp * indx_fact[pulse_num1]; - index_n[track] = (uint32_t) ( ( index_n[track] & low_mask[pulse_num1] ) + ( indx_tmp << low_len[pulse_num1] ) ); - index = div_tmp; - } - pulse_num1 = pulse_num[0]; - index_n[0] = (uint32_t) ( ( index_n[0] & low_mask[pulse_num1] ) + ( index << low_len[pulse_num1] ) ); - } - else - { - index = 0; - for ( track = ( wordcnt - 1 ); track >= 0; track-- ) - { - index = ( index << 16 ) + idxs[track]; - } - for ( track = 3; track > 0; track-- ) - { - pulse_num1 = pulse_num[track]; - index_n[track] = index & index_mask_ACELP[pulse_num1]; - index = index >> index_len[pulse_num1]; - } - index_n[0] = (uint32_t) index; - } - - return; -} -#endif diff --git a/lib_dec/dec_acelp_fx.c b/lib_dec/dec_acelp_fx.c index f65ee4bf7..07750469f 100644 --- a/lib_dec/dec_acelp_fx.c +++ b/lib_dec/dec_acelp_fx.c @@ -10,7 +10,6 @@ #include "prot_fx.h" #include "rom_com.h" #include "rom_basop_util.h" -#ifdef IVAS_FLOAT_FIXED #define _1_CODE 0x200 /*codebook excitation Q9 */ /*---------------------------------------------------------------------* @@ -384,5 +383,3 @@ void fcb_pulse_track_joint_decode_fx( UWord16 *idxs, Word16 wordcnt, UWord32 *in return; } - -#endif diff --git a/lib_dec/dec_acelp_tcx_main.c b/lib_dec/dec_acelp_tcx_main.c index 26f182e35..4e5d4e3ae 100644 --- a/lib_dec/dec_acelp_tcx_main.c +++ b/lib_dec/dec_acelp_tcx_main.c @@ -41,442 +41,3 @@ #include "options.h" #include "stat_dec.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decode_frame_type_flt() - * - * - *--------------------------------------------------------------------*/ - -static void decode_frame_type_flt( - Decoder_State *st, /* i/o: decoder state structure */ - STEREO_CNG_DEC_HANDLE hStereoCng /* i/o: Stereo CNG data structure */ -) -{ - int16_t frame_size_index, n; - int32_t total_brate; - - frame_size_index = 0; - total_brate = st->total_brate; - - /* Get Frame Type (NULL,SID,ACTIVE) and Frame Mode (2kbps, 4kbps,...) */ - - if ( st->mdct_sw == MODE1 ) - { - st->m_frame_type = ACTIVE_FRAME; - - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) - { - frame_size_index = n; - break; - } - } - } - else - { - /* ZERO Frame */ - if ( st->total_brate == FRAME_NO_DATA ) - { - st->bwidth = st->last_bwidth; - st->m_frame_type = ZERO_FRAME; - } - - /* SID frame */ - else if ( st->total_brate == SID_2k40 ) - { - uint16_t frame_len_indicator; - - st->cng_type = get_next_indice( st, 1 ); - - if ( st->cng_type != FD_CNG ) - { - st->BER_detect = 1; - st->cng_type = FD_CNG; - } - st->m_frame_type = SID_FRAME; - frame_size_index = 1; - st->bwidth = get_next_indice( st, 2 ); - - frame_len_indicator = get_next_indice( st, 1 ); - if ( st->bwidth == NB ) - { - if ( frame_len_indicator ) - { - st->BER_detect = 1; - } - frame_len_indicator = 0; - } - if ( frame_len_indicator == 0 ) - { - st->L_frame = L_FRAME; - st->total_brate = ACELP_9k60; - } - else - { - st->L_frame = L_FRAME16k; - if ( st->last_total_brate == ACELP_16k40 || st->last_total_brate == ACELP_24k40 ) - { - st->total_brate = st->last_total_brate; - } - else - { - st->total_brate = 16400; - } - } - - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) - { - frame_size_index = n; - break; - } - } - } - /* EVS MODES */ - else - { - /* Get Frame mode */ - st->m_frame_type = ACTIVE_FRAME; - - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) - { - frame_size_index = n; - break; - } - } - - if ( st->rf_flag == 0 ) - { - /* Get bandwidth info */ - st->bwidth = get_next_indice( st, FrameSizeConfig[frame_size_index].bandwidth_bits ); - st->bwidth += FrameSizeConfig[frame_size_index].bandwidth_min; - } - else - { - st->bwidth += FrameSizeConfig[frame_size_index].bandwidth_min; - } - - if ( st->bwidth > FB ) - { - st->bwidth = FB; - st->BER_detect = 1; - } - - if ( st->bwidth > SWB && st->total_brate < ACELP_16k40 ) - { - st->bwidth = SWB; - st->BER_detect = 1; - } - - /* Get reserved bit */ - if ( FrameSizeConfig[frame_size_index].reserved_bits && st->rf_flag == 0 ) - { - if ( get_next_indice( st, 1 ) != 0 ) - { - st->BER_detect = 1; - } - assert( FrameSizeConfig[frame_size_index].reserved_bits == 1 ); - } - } - } - - st->rate_switching_init = 0; - - if ( st->last_codec_mode != MODE2 || !st->BER_detect ) - { - /* Mode or Rate Change */ - if ( ( st->m_frame_type == ACTIVE_FRAME || st->m_frame_type == SID_FRAME ) && ( ( st->total_brate != st->last_total_brate ) || ( st->bwidth != st->last_bwidth ) || ( st->last_codec_mode == MODE1 ) || ( st->rf_flag != st->rf_flag_last ) || st->force_lpd_reset ) ) - { - st->rate_switching_init = 1; - - /* Reconf Core */ - mode_switch_decoder_LPD( st, st->bwidth, st->total_brate, st->last_total_brate, frame_size_index, 0, st->element_mode ); - - /* Reconf. CLDFB: check if the CLDFB works on the right sample rate */ - if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) - { - resampleCldfb_ivas( st->cldfbAna, ( st->L_frame * FRAMES_PER_SEC ) ); - if ( st->L_frame <= L_FRAME16k ) - { - resampleCldfb_ivas( st->cldfbBPF, ( st->L_frame * FRAMES_PER_SEC ) ); - } - } - if ( st->bwidth == NB ) - { - int16_t nBand_nb = (int16_t) ( 8000 * st->cldfbSyn->no_channels / st->output_Fs ); - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - nBand_nb; - } - else - { - st->cldfbSyn->bandsToZero = 0; - } - - /*Reconf Frequency-domain based CNG*/ - configureFdCngDec( st->hFdCngDec, st->bwidth, st->rf_flag == 1 && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); - if ( st->last_L_frame != st->L_frame && st->L_frame <= L_FRAME16k && st->last_L_frame <= L_FRAME16k ) - { - lerp_flt( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, st->L_frame * 2, st->last_L_frame * 2 ); - if ( st->m_frame_type == SID_FRAME && st->hFdCngDec->hFdCngCom->frame_type_previous != ACTIVE_FRAME ) - { - lerp_flt( st->hFdCngDec->hFdCngCom->olapBufferSynth_flt, st->hFdCngDec->hFdCngCom->olapBufferSynth_flt, st->L_frame * 2, st->last_L_frame * 2 ); - lerp_flt( hStereoCng->olapBufferSynth22, hStereoCng->olapBufferSynth22, st->L_frame * 2, st->last_L_frame * 2 ); - - if ( st->L_frame == L_FRAME ) - { - for ( n = 0; n < st->L_frame * 2; n++ ) - { - st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[n] = st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[n] * 1.25f; - } - } - else - { - for ( n = 0; n < st->L_frame * 2; n++ ) - { - st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[n] = st->hFdCngDec->hFdCngCom->olapBufferSynth_flt[n] / 1.25f; - } - } - } - } - - if ( st->bwidth != st->last_bwidth ) - { - st->hFdCngDec->hFdCngCom->msFrCnt_init_counter = 0; - st->hFdCngDec->hFdCngCom->init_old_flt = FLT_MAX; - } - - if ( st->tcxonly ) - { - st->p_bpf_noise_buf = NULL; - } - else - { - st->p_bpf_noise_buf = st->bpf_noise_buf; - } - } - } - - st->total_brate = total_brate; - - return; -} - - -/*-------------------------------------------------------------------* - * dec_acelp_tcx_frame() - * - * Main decoding function - *--------------------------------------------------------------------*/ - -void dec_acelp_tcx_frame( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *concealWholeFrame, /* i/o: concealment flag */ - float *output, /* o : synthesis */ - float *bpf_noise_buf, /* i/o: BPF noise buffer */ - float *pcmbufFB, /* o : synthesis @output_FS */ - float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ - float *voice_factors, /* o : voicing factors */ - float pitch_buf[], /* o : floating pitch for each subframe */ - STEREO_CNG_DEC_HANDLE hStereoCng /* i : stereo CNG handle */ -) -{ - int16_t i; - int16_t start_bit_pos; - int16_t tmp; - int16_t bitsRead; - int16_t param[DEC_NPRM_DIV * NB_DIV]; - float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ - float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ - - push_wmops( "dec_acelp_tcx_frame" ); - - start_bit_pos = st->next_bit_pos; - if ( st->rf_flag == 1 ) - { - start_bit_pos -= 2; - } - - /* -------------------------------------------------------------- */ - /* IDENTIFY FRAME TYPE */ - /* -------------------------------------------------------------- */ - - st->m_old_frame_type = st->m_frame_type; - - if ( *concealWholeFrame == 0 ) - { - uint8_t m_frame_type = st->m_frame_type; - int16_t bwidth = st->bwidth; - int16_t cng_type = st->cng_type; - int16_t L_frame = st->L_frame; - int32_t total_brate = st->last_total_brate; - - decode_frame_type_flt( st, hStereoCng ); - - st->force_lpd_reset = 0; - - if ( ( st->last_codec_mode ) == MODE2 && ( st->BER_detect || ( st->prev_bfi && st->m_frame_type == ZERO_FRAME && st->m_old_frame_type == ACTIVE_FRAME ) ) ) - { - /* Copy back parameters from previous frame, because there is a high risk they are corrupt - * Do concealment with configuration used in previous frame */ - st->m_frame_type = m_frame_type; - st->bwidth = bwidth; - st->cng_type = cng_type; - st->L_frame = L_frame; - if ( st->ini_frame != 0 ) - { - st->total_brate = total_brate; - } - - *concealWholeFrame = 1; - st->m_decodeMode = DEC_CONCEALMENT_EXT; - st->BER_detect = 0; - - if ( ( st->bwidth != st->last_bwidth ) || ( st->rf_flag != st->rf_flag_last ) || ( st->total_brate != st->last_total_brate ) ) - { - st->force_lpd_reset = 1; - } - - st->core_brate = st->last_core_brate; - st->bfi = 1; - if ( st->ini_frame == 0 && st->hTcxCfg != NULL ) - { - st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( SWB ); - } - } - else - { - st->core_brate = st->total_brate; - bpf_noise_buf = st->p_bpf_noise_buf_float; - } - } - - if ( *concealWholeFrame != 0 ) - { - /* add two zero bytes for arithmetic coder flush */ - for ( i = 0; i < 8 * 2; i++ ) - { - st->bit_stream[i] = 0; - } - } - - if ( !( st->m_frame_type == SID_FRAME || st->m_frame_type == ZERO_FRAME ) ) - { - - /* -------------------------------------------------------------- */ - /* DECODE CORE */ - /* -------------------------------------------------------------- */ - int32_t nbits_total; - nbits_total = st->total_brate / FRAMES_PER_SEC; - if ( *concealWholeFrame ) - { - - tmp = 0; /*to avoid empty counting */ - } - - - tmp = (int16_t) ( nbits_total - ( st->next_bit_pos - start_bit_pos ) ); - - bitsRead = 0; - - /* update old BWE excitation buffer */ - if ( st->hBWE_TD != NULL ) - { - set_f( old_bwe_exc + PIT16k_MAX * 2, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 ); - ptr_bwe_exc = old_bwe_exc + PIT16k_MAX * 2; - mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); - } - else - { - ptr_bwe_exc = NULL; - } - - /* Decode the LPD data */ - if ( st->m_decodeMode == DEC_NO_FRAM_LOSS ) - { - decoder_LPD( st, output, pcmbufFB, &tmp, bpf_noise_buf, 0, &bitsRead, param, pitch_buf, voice_factors, ptr_bwe_exc ); - - if ( !st->rate_switching_init && ( st->last_codec_mode ) == MODE2 && !( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) && st->bfi ) - { - *concealWholeFrame = 1; - st->m_decodeMode = DEC_CONCEALMENT_EXT; - st->BER_detect = 0; - } - } - else if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) - { - decoder_LPD( st, output, pcmbufFB, NULL, bpf_noise_buf, 1, /* bfi - st->bfi can be 0 here - MODE2 stays in PLC when DTX appears after a loss */ - &bitsRead, NULL, pitch_buf, voice_factors, ptr_bwe_exc ); - } - - if ( st->hBWE_TD != NULL ) - { - if ( ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) || ( ( st->last_vbr_hw_BWE_disable_dec == 1 ) && ( st->vbr_hw_BWE_disable_dec == 0 ) ) ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - } - - if ( st->core == ACELP_CORE && st->igf && st->con_tcx == 0 ) - { - non_linearity( ptr_bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); - - /* update the old BWE exe memory */ - mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); - } - else - { - set_f( st->hBWE_TD->old_bwe_exc_extended, 0, NL_BUFF_OFFSET ); - set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); /* reset old non_linear exc during igf frames */ - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - } - } - - /* for ACELP mode, skip core data to read TD-BWE side info */ - if ( ( !st->bfi ) && st->core == ACELP_CORE && st->total_brate > 0 ) - { - nbits_total = st->total_brate / FRAMES_PER_SEC; - /* target bs-position "-2", because of earlier "start_bit_pos -= 2;", which are included in "st->rf_target_bits"*/ - /* from "-2" to "-3" as flag-bit not considered in rf_target_bits */ - if ( st->rf_flag ) - { - get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - 3 - get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ) - st->next_bit_pos ) ); - } - else - { - get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ) - st->next_bit_pos ) ); - } - tbe_read_bitstream( st ); - } - - if ( *concealWholeFrame ) - { - /*"LPD dec - All BFI"*/ - - tmp = 0; /*to avoid empty counting */ - } - - /* updates */ - st->last_voice_factor = voice_factors[st->nb_subfr - 1]; - st->last_coder_type = st->coder_type; - } - else - { - if ( st->m_frame_type == SID_FRAME ) - { - /* Decode the FD-CNG bitstream */ - FdCng_decodeSID( st ); - } - - /* updates */ - st->last_voice_factor = 0; - st->last_coder_type = INACTIVE; - } - - pop_wmops(); - return; -} -#endif diff --git a/lib_dec/dec_acelp_tcx_main_fx.c b/lib_dec/dec_acelp_tcx_main_fx.c index 9a14aaf7b..7edd23549 100644 --- a/lib_dec/dec_acelp_tcx_main_fx.c +++ b/lib_dec/dec_acelp_tcx_main_fx.c @@ -10,7 +10,6 @@ #include "stat_com.h" #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED static void decode_frame_type_fx( Decoder_State *st #ifdef IVAS_CODE_CNG , @@ -555,4 +554,3 @@ Word16 dec_acelp_tcx_frame_fx( return 0; } -#endif diff --git a/lib_dec/dec_amr_wb.c b/lib_dec/dec_amr_wb.c index 495af3162..0874e988a 100644 --- a/lib_dec/dec_amr_wb.c +++ b/lib_dec/dec_amr_wb.c @@ -46,126 +46,3 @@ * * Decode excitation signal in AMR-WB IO mode *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decod_amr_wb( - Decoder_State *st, /* i/o: decoder static memory */ - const float *Aq, /* i : LP filter coefficients */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ - float *voice_factors, /* o : voicing factors */ - float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ - float gain_pit; /* pitch gain */ - float gain_code; /* gain/normalized gain of the algebraic excitation */ - float norm_gain_code; /* normalized gain of the algebraic excitation */ - float gain_inov; /* Innovation gain */ - float voice_fac; /* voicing factor */ - float code[L_SUBFR]; /* algebraic codevector */ - const float *p_Aq; /* Pointer to frame LP coefficient */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t i_subfr, i; /* tmp variables */ - int16_t pitch_limit_flag; - int16_t lp_flag; - - /*-----------------------------------------------------------------* - * Select LP filtering flag - *-----------------------------------------------------------------*/ - - if ( st->core_brate < ACELP_11k60 ) - { - lp_flag = LOW_PASS; - } - else - { - lp_flag = NORMAL_OPERATION; - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - st->hAmrwb_IO->lt_voice_fac = 0.0f; - pitch_limit_flag = 0; /* always restrained pitch Q range in IO mode */ - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------------* - * Decode pitch lag - *----------------------------------------------------------------------*/ - - *pt_pitch = pit_decode_flt( st, st->core_brate, 1, L_FRAME, i_subfr, -1, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, 0, NULL ); - - /*--------------------------------------------------------------* - * Find the adaptive codebook vector - *--------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*--------------------------------------------------------------* - * LP filtering of the adaptive excitation - *--------------------------------------------------------------*/ - - lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_FRAME, lp_flag, exc ); - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 1, L_FRAME, 0, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - gain_dec_amr_wb( st, st->core_brate, &gain_pit, &gain_code, st->hAmrwb_IO->past_qua_en, &gain_inov, code, &norm_gain_code ); - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_FRAME ); - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*----------------------------------------------------------------* - * Excitation enhancements - *----------------------------------------------------------------*/ - - enhancer( MODE1, st->core_brate, -1, 1, -1, L_FRAME, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); - - /*-----------------------------------------------------------------* - * HF gain modification factors at 23.85 kbps - *-----------------------------------------------------------------*/ - - if ( st->core_brate == ACELP_23k85 ) - { - hf_gain[i_subfr / L_SUBFR] = get_next_indice( st, 4 ); - } - - voice_fac = VF_0th_PARAM + VF_1st_PARAM * voice_fac + VF_2nd_PARAM * voice_fac * voice_fac; - voice_factors[i_subfr / L_SUBFR] = min( max( 0.0f, voice_fac ), 1.0f ); - - p_Aq += ( M + 1 ); - pt_pitch++; - - st->hAmrwb_IO->lt_voice_fac += 0.25f * voice_fac; - gain_buf[i_subfr / L_SUBFR] = gain_pit; - } - - return; -} -#endif diff --git a/lib_dec/dec_amr_wb_fx.c b/lib_dec/dec_amr_wb_fx.c index 5e047e425..baea98a2c 100644 --- a/lib_dec/dec_amr_wb_fx.c +++ b/lib_dec/dec_amr_wb_fx.c @@ -7,7 +7,6 @@ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * decod_amr_wb_fx() @@ -165,4 +164,3 @@ void decod_amr_wb_fx( return; } -#endif diff --git a/lib_dec/dec_gen_voic.c b/lib_dec/dec_gen_voic.c index eb2ff8f98..fd4f3cb7c 100644 --- a/lib_dec/dec_gen_voic.c +++ b/lib_dec/dec_gen_voic.c @@ -40,256 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * decod_gen_voic() - * - * Decode generic (GC), voiced (VC) and AMR-WB IO frames - *---------------------------------------------------------------------*/ - -ivas_error decod_gen_voic( - Decoder_State *st, /* i/o: decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - const float *Aq, /* i : LP filter coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const int16_t do_WI, /* i : FEC fast recovery flag */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - float *bwe_exc, /* o : excitation for SWB TBE */ - int16_t *unbits, /* number of unused bits */ - float *gain_buf, /* o : floating pitch gain for each subframe */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - int16_t T0 = PIT_MIN, T0_frac = 0, T0_min, T0_max; /* integer pitch variables */ - float gain_pit = 0.0f; /* pitch gain */ - float gain_code = 0.0f; /* gain/normalized gain of the algebraic excitation */ - float norm_gain_code = 0.0f; /* normalized gain of the algebraic excitation */ - float gain_inov = 0; /* Innovation gain */ - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - float voice_fac; /* voicing factor */ - float code[L_SUBFR]; /* algebraic codevector */ - - const float *p_Aq; /* Pointer to frame LP coefficient */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t i_subfr, i; /* tmp variables */ - float error_flag = 0.0f; - float gain_preQ = 0; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - float norm_gain_preQ; - int16_t pitch_limit_flag; - - DTFS_STRUCTURE *PREVP, *CURRP; - int16_t shft_prev = 0, shft_curr = 0; - float ph_offset, dummy2[2], out[L_FRAME16k], enratio = 0.0f; - float sp_enratio, curr_spch_nrg, prev_spch_nrg, curr_res_nrg, prev_res_nrg, syn_tmp[L_FRAME16k], mem_tmp[M]; - int16_t harm_flag_acelp; - ivas_error error; - - error = IVAS_ERR_OK; - - /* read harmonicity flag */ - harm_flag_acelp = 0; - if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) - { - harm_flag_acelp = get_next_indice( st, 1 ); - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - norm_gain_preQ = 0.0f; - gain_preQ = 0; - set_f( code_preQ, 0, L_SUBFR ); - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------------* - * Decode pitch lag - *----------------------------------------------------------------------*/ - - *pt_pitch = pit_decode_flt( st, st->core_brate, 0, L_frame, i_subfr, st->coder_type, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_SUBFR, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - /*--------------------------------------------------------------* - * Find the adaptive codebook vector - *--------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error_flag, st->tdm_LRTD_flag ); - - /*--------------------------------------------------------------* - * LP filtering of the adaptive excitation - *--------------------------------------------------------------*/ - - lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); - - /*-----------------------------------------------------------------* - * Transform-domain contribution decoding (active frames) - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->coder_type != INACTIVE ) - { - gain_code = 0.0f; - transf_cdbk_dec( st, harm_flag_acelp, i_subfr, Es_pred, gain_code, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); - } - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - if ( st->core_brate <= ACELP_8k00 ) - { - gain_dec_lbr( st, st->coder_type, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, L_SUBFR ); - } - else if ( st->core_brate > ACELP_32k ) - { - gain_dec_SQ( st, i_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - else - { - gain_dec_mless( st, L_frame, st->coder_type, i_subfr, -1, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Transform-domain contribution decoding (inactive frames) - *-----------------------------------------------------------------*/ - - if ( st->total_brate >= MAX_GSC_INACTIVE_BRATE && st->coder_type == INACTIVE ) - { - transf_cdbk_dec( st, 0, i_subfr, Es_pred, gain_code, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); - } - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, gain_pit, norm_gain_code + norm_gain_preQ, &st->lp_gainp, &st->lp_gainc, L_frame ); - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Add the ACELP pre-quantizer contribution - *-----------------------------------------------------------------*/ - - /* if( (coder_type == GENERIC && st->core_brate >= MIN_BRATE_AVQ_EXC) || (coder_type == INACTIVE && st->total_brate > MAX_GSC_INACTIVE_BRATE) ) */ - if ( gain_preQ != 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] += gain_preQ * code_preQ[i]; - exc[i + i_subfr] += gain_preQ * code_preQ[i]; - } - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - /*----------------------------------------------------------------* - * Excitation enhancements (update of total excitation signal) - *----------------------------------------------------------------*/ - - if ( st->core_brate > ACELP_32k || st->coder_type == INACTIVE ) - { - mvr2r( exc + i_subfr, exc2 + i_subfr, L_SUBFR ); - } - else - { - enhancer( MODE1, st->core_brate, -1, 0, st->coder_type, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); - } - - p_Aq += ( M + 1 ); - pt_pitch++; - gain_buf[i_subfr / L_SUBFR] = gain_pit; - st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; - } - - /* FEC fast recovery */ - if ( do_WI ) - { - shft_prev = L_EXC_MEM - (int16_t) rint_new( st->bfi_pitch ); - prev_res_nrg = sum2_f( st->hWIDec->old_exc2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ) ) + 1e-6f; - prev_spch_nrg = sum2_f( st->hWIDec->old_syn2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ) ) + 1e-6f; - - mvr2r( st->mem_syn2, mem_tmp, M ); - syn_12k8( st->L_frame, Aq, exc2, syn_tmp, mem_tmp, 1 ); - - shft_curr = st->L_frame - (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ); - curr_res_nrg = sum2_f( exc2 + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ) ); - curr_spch_nrg = sum2_f( syn_tmp + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ) ); - - enratio = curr_res_nrg / prev_res_nrg; - sp_enratio = curr_spch_nrg / prev_spch_nrg; - - if ( enratio > 0.25f && - enratio < 15.0f && - sp_enratio > 0.15f && - st->bfi_pitch < 150 && - pitch_buf[NB_SUBFR16k - 1] < 150 ) - { - if ( ( error = DTFS_new( &PREVP ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = DTFS_new( &CURRP ) ) != IVAS_ERR_OK ) - { - return error; - } - - DTFS_to_fs( st->hWIDec->old_exc2 + shft_prev, (int16_t) rint_new( st->bfi_pitch ), PREVP, (int16_t) st->output_Fs, do_WI ); - DTFS_to_fs( exc2 + shft_curr, (int16_t) rint_new( pitch_buf[NB_SUBFR16k - 1] ), CURRP, (int16_t) st->output_Fs, do_WI ); - - ph_offset = 0.0f; - if ( ( error = WIsyn( *PREVP, CURRP, dummy2, &ph_offset, out, st->L_frame, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - mvr2r( out, exc2, st->L_frame ); - mvr2r( exc2, exc, st->L_frame ); - - /* update bwe_exc for SWB-TBE */ - if ( st->hBWE_TD != NULL ) - { - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - interp_code_4over2( exc + i_subfr, bwe_exc + ( i_subfr * 2 ), L_SUBFR ); - } - } - - free( PREVP ); - free( CURRP ); - } - } - - /* SC-VBR */ - st->prev_gain_pit_dec = gain_pit; - - return error; -} -#endif diff --git a/lib_dec/dec_gen_voic_fx.c b/lib_dec/dec_gen_voic_fx.c index 363c3a2d8..1cfff9b84 100644 --- a/lib_dec/dec_gen_voic_fx.c +++ b/lib_dec/dec_gen_voic_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "stl.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*======================================================================*/ /* FUNCTION : decod_gen_voic_fx() */ @@ -1051,4 +1050,3 @@ ivas_error decod_gen_voic_ivas_fx( return error; } -#endif diff --git a/lib_dec/dec_higher_acelp.c b/lib_dec/dec_higher_acelp.c index d3d0876fd..2a9bb28cb 100644 --- a/lib_dec/dec_higher_acelp.c +++ b/lib_dec/dec_higher_acelp.c @@ -41,193 +41,10 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-----------------------------------------------------------------* * transf_cdbk_dec() * * Transform domain contribution decoding *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void transf_cdbk_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ - const int16_t i_subfr, /* i : subframe index */ - const float Es_pred, /* i : predicited scaled innovation energy */ - const float gain_code, /* i : innovative excitation gain */ - float *gain_preQ, /* o : prequantizer excitation gain */ - float *norm_gain_preQ, /* o : normalized prequantizer excitation gain */ - float code_preQ[], /* o : prequantizer excitation */ - int16_t *unbits /* o : number of AVQ unused bits */ -) -{ - int16_t i, index, nBits, Nsv; - int16_t x_norm[L_SUBFR]; - float Ecode; - int16_t nq[L_SUBFR / WIDTH_BAND]; - int16_t avq_bit_sFlag; - int16_t trgtSvPos; - - avq_bit_sFlag = 0; - if ( st->element_mode > EVS_MONO ) - { - avq_bit_sFlag = 1; - } - - /*--------------------------------------------------------------* - * Set bit-allocation - *--------------------------------------------------------------*/ - - Nsv = 8; - nBits = st->acelp_cfg.AVQ_cdk_bits[i_subfr / L_SUBFR]; - - /* increase # of AVQ allocated bits by unused bits from the previous subframe */ - nBits += ( *unbits ); - - /*--------------------------------------------------------------* - * Dequantize prequantizer excitation gain - *--------------------------------------------------------------*/ - - index = get_next_indice( st, G_AVQ_BITS ); - - if ( st->coder_type == INACTIVE ) - { - if ( st->core_brate > 56000 ) - { - *gain_preQ = usdequant( index, G_AVQ_MIN_INACT_64k, G_AVQ_DELTA_INACT_64k ); - } - else if ( st->core_brate > 42000 ) - { - *gain_preQ = usdequant( index, G_AVQ_MIN_INACT_48k, G_AVQ_DELTA_INACT_48k ); - } - else - { - *gain_preQ = usdequant( index, G_AVQ_MIN_INACT, G_AVQ_DELTA_INACT ); - } - - *gain_preQ *= gain_code; - } - else - { - if ( st->core_brate > ACELP_24k40 && st->core_brate <= 42000 ) - { - *gain_preQ = gain_dequant( index, 0.1f * G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); - } - else - { - *gain_preQ = gain_dequant( index, G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); - } - if ( Es_pred < 0 ) - { - *gain_preQ *= (float) ( 0.25f * fabs( Es_pred ) ); - } - else - { - *gain_preQ *= Es_pred; - } - } - - trgtSvPos = Nsv - 1; - if ( avq_bit_sFlag && nBits > 85 && !harm_flag_acelp && ( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) - { - trgtSvPos = 2; - avq_bit_sFlag = 2; - } - - /*--------------------------------------------------------------* - * Encode and multiplex subvectors into bitstream - *--------------------------------------------------------------*/ - - AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, avq_bit_sFlag, trgtSvPos ); - - /* save # of AVQ unused bits for next subframe */ - *unbits = nBits; - - /*--------------------------------------------------------------* - * iDCT transform - *--------------------------------------------------------------*/ - - set_f( code_preQ, 0.0f, L_SUBFR ); - for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) - { - code_preQ[i] = (float) ( x_norm[i] ); - } - - if ( st->coder_type == INACTIVE || st->core_brate > MAX_BRATE_AVQ_EXC_TD || harm_flag_acelp ) - { - edct2( L_SUBFR, 1, code_preQ, code_preQ, ip_edct2_64, w_edct2_64 ); - } - - /*--------------------------------------------------------------* - * Preemphasise - *--------------------------------------------------------------*/ - - /* in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ - if ( ( nq[7] != 0 ) && ( st->last_nq_preQ - nq[0] > 7 ) ) - { - st->mem_preemp_preQ /= 16; - } - - st->last_nq_preQ = nq[7]; - - /* TD pre-quantizer: in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ - if ( st->element_mode > EVS_MONO && st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp && code_preQ[0] != 0 ) - { - if ( fabs( (float) ( st->last_code_preq ) ) > 16.0f * (float) fabs( code_preQ[0] ) ) - { - st->mem_preemp_preQ /= 16; - } - else if ( fabs( (float) ( st->last_code_preq ) ) > 8.0f * (float) fabs( code_preQ[0] ) ) - { - st->mem_preemp_preQ /= 8; - } - } - - st->last_code_preq = (int16_t) code_preQ[L_SUBFR - 1]; - - preemph( code_preQ, FAC_PRE_AVQ, L_SUBFR, &st->mem_preemp_preQ ); - - /*--------------------------------------------------------------* - * Compute normalized prequantizer excitation gain for FEC - *--------------------------------------------------------------*/ - - Ecode = ( sum2_f( code_preQ, L_SUBFR ) + 0.01f ) / L_SUBFR; - - /* somewhat attenuate pre-quantizer normalized gain for FEC */ - *norm_gain_preQ = 0.8f * ( *gain_preQ ) * (float) sqrt( Ecode ); - - st->use_acelp_preq = 1; - - return; -} - -/*-----------------------------------------------------------* - * gain_dequant() - * - * Returns decoded gain quantized between the specified - * range using the specified number of levels. - *-----------------------------------------------------------*/ - -/*! r: decoded gain */ -float gain_dequant( - int16_t index, /* i : quantization index */ - const float min_val, /* i : value of lower limit */ - const float max_val, /* i : value of upper limit */ - const int16_t bits /* i : number of bits to dequantize */ -) -{ - float gain, c_min, c_mult; - int16_t levels; - - levels = 1 << bits; - - c_min = (float) log10( min_val ); - c_mult = (float) ( ( levels - 1 ) / ( log10( max_val ) - c_min ) ); - - gain = (float) pow( 10.0, ( ( (float) index ) / c_mult ) + c_min ); - - return ( gain ); -} -#endif diff --git a/lib_dec/dec_higher_acelp_fx.c b/lib_dec/dec_higher_acelp_fx.c index ea1501a7c..49789732c 100644 --- a/lib_dec/dec_higher_acelp_fx.c +++ b/lib_dec/dec_higher_acelp_fx.c @@ -14,7 +14,6 @@ * transf_cdbk_dec() * Transform domain contribution decoding *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void transf_cdbk_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ @@ -260,7 +259,6 @@ void transf_cdbk_dec_fx( return; } -#endif /*==========================================================================*/ /* FUNCTION : Word16 gain_dequant_fx () */ @@ -285,7 +283,6 @@ void transf_cdbk_dec_fx( /*--------------------------------------------------------------------------*/ /* CALLED FROM : */ /*==========================================================================*/ -#ifdef IVAS_FLOAT_FIXED Word16 gain_dequant_fx( /* o: decoded gain */ Word16 index, /* i: quantization index */ const Word16 min_val, /* i: value of lower limit */ @@ -346,4 +343,3 @@ Word16 gain_dequant_fx( /* o: decoded gain */ return ( gain ); } -#endif diff --git a/lib_dec/dec_nelp.c b/lib_dec/dec_nelp.c index a9cddbf15..e7a8ca967 100644 --- a/lib_dec/dec_nelp.c +++ b/lib_dec/dec_nelp.c @@ -39,64 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decod_nelp() - * - * Decode unvoiced NELP - *-------------------------------------------------------------------*/ - -void decod_nelp( - Decoder_State *st, /* i/o: decoder static memory */ - float *tmp_noise, /* o : long term temporary noise energy */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *exc, /* o : adapt. excitation exc */ - float *exc2, /* o : adapt. excitation/total exc */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t bfi, /* i : bad frame indicator */ - float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - int16_t i, coder_type; - float exc_nelp[L_FRAME]; - - *tmp_noise = 0; - - if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) - { - coder_type = UNVOICED; - } - else - { - coder_type = st->coder_type; - } - - nelp_decoder( st, exc_nelp, exc, bfi, coder_type, gain_buf ); - - mvr2r( exc_nelp, exc, L_FRAME ); - mvr2r( exc_nelp, exc2, L_FRAME ); - - st->tilt_code = 0.0f; /* purely unvoiced */ - set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); - st->prev_tilt_code_dec = st->tilt_code; - - st->dispMem[0] = 0; - st->prev_gain_pit_dec = 0.0; - st->dispMem[2] = st->prev_gain_pit_dec; - - for ( i = 3; i < 7; i++ ) - { - st->dispMem[i] = st->dispMem[i - 1]; - } - - set_f( pitch_buf, L_SUBFR, NB_SUBFR ); - if ( st->hBWE_TD != NULL ) - { - interp_code_5over2( exc2, bwe_exc, L_FRAME ); - } - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - - return; -} -#endif diff --git a/lib_dec/dec_nelp_fx.c b/lib_dec/dec_nelp_fx.c index 7083919c4..fe882ffbc 100644 --- a/lib_dec/dec_nelp_fx.c +++ b/lib_dec/dec_nelp_fx.c @@ -5,7 +5,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*======================================================================*/ /* FUNCTION : decod_nelp_fx() */ /*-----------------------------------------------------------------------*/ @@ -100,4 +99,3 @@ void decod_nelp_fx( } return; } -#endif diff --git a/lib_dec/dec_pit_exc.c b/lib_dec/dec_pit_exc.c index 7c95ecde1..e5ee5c0c0 100644 --- a/lib_dec/dec_pit_exc.c +++ b/lib_dec/dec_pit_exc.c @@ -46,297 +46,3 @@ * * Decode pitch-only contribution (used by the GSC technology) *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void dec_pit_exc( - Decoder_State *st, /* i/o: decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - const float *Aq, /* i : LP filter coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *code, /* o : innovation */ - float *exc, /* i/o: adapt. excitation exc */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - float *gain_buf, /* o : floating pitch gain for each subframe */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ - float gain_pit; /* pitch gain */ - float gain_code; /* gain/normalized gain of the algebraic excitation */ - float norm_gain_code; /* normalized gain of the algebraic excitation */ - float gain_inov; /* Innovation gain */ - float voice_fac; /* voicing factor */ - int16_t L_subfr, pit_idx; - const float *p_Aq; /* Pointer to frame LP coefficient */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t i_subfr, i; /* tmp variables */ - int32_t Local_BR, Pitch_BR; - int16_t Pitch_CT, pitch_limit_flag; - int16_t nbits; - float *pt_gain; /* Pointer to floating gain values for each subframe */ - int16_t use_fcb; - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - use_fcb = 0; - if ( st->GSC_IVAS_mode > 0 && ( st->GSC_noisy_speech || st->core_brate > GSC_H_RATE_STG ) ) - { - Local_BR = ACELP_8k00; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_8k00; - if ( st->L_frame == L_FRAME16k ) - { - Local_BR = ACELP_14k80; - if ( st->GSC_IVAS_mode > 0 ) - { - Local_BR = ACELP_9k60; - } - Pitch_BR = st->core_brate; - } - } - else if ( st->GSC_noisy_speech ) - { - Local_BR = ACELP_7k20; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_7k20; - if ( L_frame == L_FRAME16k ) - { - Pitch_BR = st->core_brate; - } - } - else - { - Local_BR = ACELP_7k20; - Pitch_CT = AUDIO; - Pitch_BR = st->core_brate; - - if ( L_frame == L_FRAME16k ) - { - Local_BR = ACELP_13k20; - Pitch_CT = GENERIC; - } - } - - gain_code = 0; - pitch_limit_flag = 1; /* always extended pitch Q range */ - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - L_subfr = st->L_frame / nb_subfr; - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - pt_gain = gain_buf; /* pointer to the gain buffer */ - - if ( ( ( st->core_brate >= MIN_RATE_FCB || ( st->GSC_noisy_speech == 1 && ( ( st->L_frame == L_FRAME && st->core_brate >= ACELP_13k20 ) || ( st->L_frame == L_FRAME16k && st->core_brate >= GSC_H_RATE_STG ) || st->GSC_IVAS_mode == 0 ) ) ) && L_subfr == L_SUBFR ) ) - { - use_fcb = 1; - } - else if ( st->GSC_IVAS_mode > 0 && L_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) - { - use_fcb = 2; - st->acelp_cfg.fcb_mode = 1; - set_s( st->acelp_cfg.gains_mode, 6, 4 ); - set_s( st->acelp_cfg.pitch_bits, 9, 4 ); - set_s( st->acelp_cfg.fixed_cdk_index, 14, 5 ); - } - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) - { - /*----------------------------------------------------------------------* - * Decode pitch lag - *----------------------------------------------------------------------*/ - - *pt_pitch = pit_decode_flt( st, Pitch_BR, 0, L_frame, i_subfr, Pitch_CT, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, L_subfr, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - /*--------------------------------------------------------------* - * Find the adaptive codebook vector. - *--------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_subfr + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - if ( use_fcb == 1 ) - { - inov_decode( st, Local_BR, 0, L_frame, 1, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - gain_dec_mless( st, L_frame, LOCAL_CT, i_subfr, -1, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - } - else if ( use_fcb == 2 ) - { - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 0, L_FRAME, 0, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, 2 * L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - gain_dec_lbr( st, GENERIC, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, 2 * L_SUBFR ); - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); - } - else - { - nbits = 5; - if ( st->core_brate < MIN_RATE_FCB ) - { - nbits = 4; - } - - set_f( code, 0, L_SUBFR ); - gain_code = 0.0f; - st->tilt_code = 0.0f; - - pit_idx = get_next_indice( st, nbits ); - - gain_pit = 0.5853f + dic_gp[pit_idx]; - - if ( st->BER_detect ) /* Bitstream is corrupted, use the past pitch gain */ - { - gain_pit = st->lp_gainp; - } - } - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - if ( use_fcb != 0 ) - { - for ( i = 0; i < L_subfr; i++ ) - { - exc[i + i_subfr] = gain_pit * exc[i + i_subfr] + gain_code * code[i]; - } - } - else - { - for ( i = 0; i < L_subfr; i++ ) - { - exc[i + i_subfr] = gain_pit * exc[i + i_subfr]; - } - } - - if ( L_subfr == 5 * L_SUBFR ) - { - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = gain_pit; - st->lp_gainc = 0; - - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - - p_Aq += 5 * ( M + 1 ); - } - else if ( L_subfr == 5 * L_SUBFR / 2 ) - { - if ( i_subfr == 0 ) - { - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - p_Aq += 2 * ( M + 1 ); - - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = ( 3.0f / 15.0f ) * gain_pit; - st->lp_gainc = 0; - } - else - { - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - p_Aq += 3 * ( M + 1 ); - - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = ( 12.0f / 15.0f ) * gain_pit; - st->lp_gainc = 0; - } - } - else if ( L_subfr == 2 * L_SUBFR ) - { - p_Aq += 2 * ( M + 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_gain = gain_pit; - pt_gain++; - *pt_gain = *( pt_gain - 1 ); - pt_gain++; - - if ( i_subfr == 0 ) - { - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = ( 3.0f / 10.0f ) * gain_pit; - st->lp_gainc = 0; - } - else - { - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = ( 7.0f / 10.0f ) * gain_pit; - st->lp_gainc = 0; - } - } - else if ( L_subfr == 4 * L_SUBFR ) - { - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_gain = gain_pit; - pt_gain++; - *pt_gain = *( pt_gain - 1 ); - pt_gain++; - *pt_gain = *( pt_gain - 1 ); - pt_gain++; - *pt_gain = *( pt_gain - 1 ); - pt_gain++; - p_Aq += 4 * ( M + 1 ); - - /* update gains for FEC - equivalent to lp_gain_updt() */ - st->lp_gainp = gain_pit; - st->lp_gainc = 0; - } - else - { - p_Aq += ( M + 1 ); - pt_pitch++; - *pt_gain = gain_pit; - pt_gain++; - - lp_gain_updt( i_subfr, gain_pit, 0, &st->lp_gainp, &st->lp_gainc, L_frame ); - } - } - - return; -} -#endif diff --git a/lib_dec/dec_pit_exc_fx.c b/lib_dec/dec_pit_exc_fx.c index d04dc1b30..f3bb07aef 100644 --- a/lib_dec/dec_pit_exc_fx.c +++ b/lib_dec/dec_pit_exc_fx.c @@ -6,7 +6,6 @@ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*==========================================================================*/ /* FUNCTION : void dec_pit_exc_fx() */ @@ -879,4 +878,3 @@ void dec_pit_exc_ivas_fx( return; } -#endif diff --git a/lib_dec/dec_post.c b/lib_dec/dec_post.c index f4b8c3b63..10836b779 100644 --- a/lib_dec/dec_post.c +++ b/lib_dec/dec_post.c @@ -53,261 +53,24 @@ * Local function prototypes *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void Dec_postfilt( const int16_t L_subfr, PFSTAT *pfstat, const int16_t t0, const float *signal_ptr, const float *coeff, float *sig_out, const float gamma1, const float gamma2, const float gain_factor, const int16_t disable_hpf ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void pst_ltp( const int16_t t0, const float *ptr_sig_in, float *ptr_sig_pst0, float gain_factor, const int16_t L_subfr ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void search_del( const int16_t t0, const float *ptr_sig_in, int16_t *ltpdel, int16_t *phase, float *num_gltp, float *den_gltp, float *y_up, int16_t *off_yup, const int16_t L_subfr ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void filt_plt( const float *s_in, const float *s_ltp, float *s_out, const float gain_plt, const int16_t L_subfr ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void compute_ltp_l( const float *s_in, const int16_t ltpdel, const int16_t phase, float *y_up, float *num, float *den, const int16_t L_subfr ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t select_ltp( const float num1, const float den1, const float num2, const float den2 ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void modify_pst_param( const float psf_lp_noise, float *g1, float *g2, const int16_t coder_type, float *gain_factor ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void Dec_formant_postfilt( PFSTAT *pfstat, const float *signal_ptr, const float *coeff, float *sig_out, const float gamma1, const float gamma2, const int16_t l_subfr ); -#endif - /*--------------------------------------------------------------------------* * Function Init_post_filter_ivas() * * Post-filter initialization *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void Init_post_filter_ivas( - PFSTAT_HANDLE hPFstat /* i/o: post-filter state memories handle */ -) -{ - /* It is off by default */ - hPFstat->on = 0; - - /* Reset */ - hPFstat->reset = 0; - - /* Initialize arrays and pointers */ - set_zero( hPFstat->mem_pf_in_flt, L_SUBFR ); - - /* res2 = A(gamma2) residual */ - set_zero( hPFstat->mem_res2_flt, DECMEM_RES2 ); - - /* 1/A(gamma1) memory */ - set_zero( hPFstat->mem_stp_flt, L_SUBFR ); - - /* null memory to compute i.r. of A(gamma2)/A(gamma1) */ - set_zero( hPFstat->mem_zero_flt, M ); - - /* for gain adjustment */ - hPFstat->gain_prec_flt = 1.0f; - - return; -} -#endif /*-------------------------------------------------------------------------- * nb_post_filt_ivas() * * Main routine to perform post filtering of NB signals *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void nb_post_filt_ivas( - const int16_t L_frame, /* i : frame length */ - const int16_t L_subfr, /* i : sub-frame length */ - PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ - float *psf_lp_noise, /* i/o: long term noise energy */ - const float tmp_noise, /* i : noise energy */ - float *synth, /* i/o: synthesis */ - const float *Aq, /* i : LP filter coefficient */ - const float *pitch_buf, /* i : floating pitch for each subframe */ - const int16_t coder_type, /* i : coder_type */ - const int16_t BER_detect, /* i : BER detect flag */ - const int16_t disable_hpf /* i : flag to disabled HPF */ -) -{ - int16_t t0_first, i, j; - const float *p_Aq; - float *pf_in, post_G1, post_G2, gain_factor; - float pf_in_buffer[M + L_FRAME16k]; - - if ( !BER_detect ) - { - /* update long-term background noise energy during inactive frames */ - if ( coder_type == INACTIVE ) - { - *psf_lp_noise = 0.95f * *psf_lp_noise + 0.05f * tmp_noise; - } - } - - /* set post-filter input */ - modify_pst_param( *psf_lp_noise, &post_G1, &post_G2, coder_type, &gain_factor ); - - if ( hPFstat->reset ) - { - set_zero( hPFstat->mem_res2_flt, DECMEM_RES2 ); - mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_pf_in_flt, L_SYN_MEM ); - mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_stp_flt, L_SYN_MEM ); - hPFstat->gain_prec_flt = 1.0f; - hPFstat->reset = 0; - return; - } - - pf_in = &pf_in_buffer[M]; - mvr2r( hPFstat->mem_pf_in_flt + L_SYN_MEM - M, &pf_in[-M], M ); - mvr2r( synth, pf_in, L_frame ); - mvr2r( &synth[L_frame - L_SYN_MEM], hPFstat->mem_pf_in_flt, L_SYN_MEM ); - - /* deactivation of the post filter in case of AUDIO because it causes problems to singing sequences */ - if ( coder_type == AUDIO ) - { - post_G1 = 1.f; - post_G2 = 1.f; - gain_factor = 1.f; - } - - /* run the post filter */ - p_Aq = Aq; - for ( i = 0, j = 0; i < L_frame; i += L_subfr, j++ ) - { - t0_first = (int16_t) ( pitch_buf[j] + 0.5f ); - - Dec_postfilt( L_subfr, hPFstat, t0_first, &pf_in[i], p_Aq, &synth[i], post_G1, post_G2, gain_factor, disable_hpf ); - - p_Aq += ( M + 1 ); - } - - return; -} -#endif /*-------------------------------------------------------------------------- * formant_post_filt_ivas: * * WB and SWB formant post-filtering *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void formant_post_filt_ivas( - PFSTAT_HANDLE hPFstat, /* i/o: Post filter related memories */ - float *synth_in, /* i : 12k8 synthesis */ - const float *Aq, /* i : LP filter coefficient */ - float *synth_out, /* i/o: input signal */ - const int16_t L_frame, /* i : frame length */ - const int16_t L_subfr, /* i : sub-frame length */ - const float lp_noise, /* i : background noise energy */ - const int32_t brate, /* i : bitrate */ - const int16_t off_flag /* i : off flag */ -) -{ - int16_t i_subfr; - const float *p_Aq; - float post_G1, post_G2; - - /*default parameter for noisy speech and high bitrates*/ - if ( L_frame == L_FRAME ) - { - post_G2 = 0.7f; - if ( lp_noise < LP_NOISE_THRESH_FLT ) /* Clean speech */ - { - if ( brate < ACELP_13k20 ) /*Low rates*/ - { - post_G1 = 0.8f; - } - else if ( brate < ACELP_24k40 ) - { - post_G1 = 0.75f; - } - else - { - post_G1 = 0.72f; - } - } - else /*Noisy speech*/ - { - if ( brate < ACELP_15k85 ) /*Low rates*/ - { - post_G1 = 0.75f; - } - else /*High rates*/ - { - post_G1 = 0.7f; - } - } - } - else - { - post_G2 = 0.76f; - if ( lp_noise >= LP_NOISE_THRESH_FLT ) - { - post_G1 = 0.76f; - } - else if ( brate == ACELP_13k20 ) - { - post_G1 = 0.82f; - } - else if ( brate == ACELP_16k40 ) - { - post_G1 = 0.80f; - } - else if ( brate == ACELP_24k40 || brate == ACELP_32k ) - { - post_G1 = 0.78f; - } - else - { - post_G1 = 0.76f; - } - } - - /* Switch off post-filter*/ - if ( off_flag ) - { - post_G1 = post_G2; - } - - /* Reset post filter */ - if ( hPFstat->reset ) - { - hPFstat->reset = 0; - mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_pf_in_flt, L_SYN_MEM ); - mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_stp_flt, L_SYN_MEM ); - hPFstat->gain_prec_flt = 1.f; - mvr2r( synth_in, synth_out, L_frame ); - - return; - } - - /* input memory*/ - mvr2r( hPFstat->mem_pf_in_flt, synth_in - L_SYN_MEM, L_SYN_MEM ); - mvr2r( &synth_in[L_frame - L_SYN_MEM], hPFstat->mem_pf_in_flt, L_SYN_MEM ); - - /* run the post filter */ - p_Aq = Aq; - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) - { - Dec_formant_postfilt( hPFstat, &synth_in[i_subfr], p_Aq, &synth_out[i_subfr], post_G1, post_G2, L_subfr ); - - p_Aq += ( M + 1 ); - } - - return; -} -#endif /*---------------------------------------------------------------------------- * Dec_postfilt() @@ -332,76 +95,6 @@ void formant_post_filt_ivas( * 1. search around 1st subframe delay (3 integer values) * 2. search around best integer with fract. delays (1/8) *----------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void Dec_postfilt( - const int16_t L_subfr, /* i : sub-frame length */ - PFSTAT *pfstat, /* i/o: Post filter related memories */ - const int16_t t0, /* i : pitch delay given by coder */ - const float *signal_ptr, /* i : input signal (pointer to current subframe */ - const float *coeff, /* i : LPC coefficients for current subframe */ - float *sig_out, /* o : postfiltered output */ - const float gamma1, /* i : short term postfilt. den. weighting factor*/ - const float gamma2, /* i : short term postfilt. num. weighting factor*/ - const float gain_factor, /* i : Gain Factor */ - const int16_t disable_hpf /* i : flag to disable HPF */ -) -{ - float apond1[M + 1]; /* s.t. denominator coeff. */ - float apond2[LONG_H_ST]; - float sig_ltp[L_SUBFR + 1]; /* H0 output signal */ - float res2[SIZ_RES2]; - float *sig_ltp_ptr; - float *res2_ptr; - float *ptr_mem_stp; - float parcor0; - - /* Init pointers and restore memories */ - res2_ptr = res2 + DECMEM_RES2; - ptr_mem_stp = pfstat->mem_stp_flt + L_SYN_MEM - 1; - mvr2r( pfstat->mem_res2_flt, res2, DECMEM_RES2 ); - - /* Compute weighted LPC coefficients */ - weight_a( coeff, apond1, gamma1, M ); - weight_a( coeff, apond2, gamma2, M ); - set_f( &apond2[M + 1], 0, LONG_H_ST - ( M + 1 ) ); - - /* Compute A(gamma2) residual */ - residu( apond2, M, signal_ptr, res2_ptr, L_subfr ); - - /* Harmonic filtering */ - sig_ltp_ptr = sig_ltp + 1; - - if ( !disable_hpf ) - { - pst_ltp( t0, res2_ptr, sig_ltp_ptr, gain_factor, L_subfr ); - } - else - { - mvr2r( res2_ptr, sig_ltp_ptr, L_subfr ); - } - - /* Save last output of 1/A(gamma1) */ - /* (from preceding subframe) */ - sig_ltp[0] = *ptr_mem_stp; - - /* Controls short term pst filter gain and compute parcor0 */ - calc_st_filt( apond2, apond1, &parcor0, sig_ltp_ptr, pfstat->mem_zero_flt, L_subfr, -1 ); - - syn_filt( apond1, M, sig_ltp_ptr, sig_ltp_ptr, L_subfr, pfstat->mem_stp_flt + L_SYN_MEM - M, 0 ); - mvr2r( sig_ltp_ptr + L_SUBFR - L_SYN_MEM, pfstat->mem_stp_flt, L_SYN_MEM ); - - /* Tilt filtering */ - filt_mu( sig_ltp, sig_out, parcor0, L_subfr, -1 ); - - /* Gain control */ - scale_st_ivas( signal_ptr, sig_out, &( pfstat->gain_prec_flt ), L_subfr, -1 ); - - /* Update for next subframe */ - mvr2r( &res2[L_subfr], pfstat->mem_res2_flt, DECMEM_RES2 ); - - return; -} -#endif /*---------------------------------------------------------------------------- * Dec_formant_postfilt @@ -418,52 +111,6 @@ static void Dec_postfilt( * k1 = 1st parcor calculated on {hi} * gamma3 = gamma3_minus if k1<0, gamma3_plus if k1>0 *----------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void Dec_formant_postfilt( - PFSTAT_HANDLE hPFstat, /* i/o: states strucure */ - const float *signal_ptr, /* i : input signal (pointer to current subframe */ - const float *coeff, /* i : LPC coefficients for current subframe */ - float *sig_out, /* o : postfiltered output */ - const float gamma1, /* i : short term postfilt. den. weighting factor*/ - const float gamma2, /* i : short term postfilt. num. weighting factor*/ - const int16_t l_subfr /* i : subframe length */ -) -{ - /* Local variables and arrays */ - float apond1[M + 1]; /* s.t. denominator coeff. */ - float apond2[LONG_H_ST]; - float res2[L_SUBFR]; - float resynth[L_SUBFR + 1]; - float parcor0; - - /* Compute weighted LPC coefficients */ - weight_a( coeff, apond1, gamma1, M ); - weight_a( coeff, apond2, gamma2, M ); - - set_zero( &apond2[M + 1], LONG_H_ST - ( M + 1 ) ); - - /* Compute A(gamma2) residual */ - residu( apond2, M, signal_ptr, res2, l_subfr ); - - /* Controls short term pst filter gain and compute parcor0 */ - calc_st_filt( apond2, apond1, &parcor0, res2, hPFstat->mem_zero_flt, l_subfr, -1 ); - - /* 1/A(gamma1) filtering, mem_stp is updated */ - resynth[0] = *( hPFstat->mem_stp_flt + L_SYN_MEM - 1 ); - - syn_filt( apond1, M, res2, &( resynth[1] ), l_subfr, hPFstat->mem_stp_flt + L_SYN_MEM - M, 0 ); - - mvr2r( &( resynth[1] ) + l_subfr - L_SYN_MEM, hPFstat->mem_stp_flt, L_SYN_MEM ); - - /* Tilt filtering */ - filt_mu( resynth, sig_out, parcor0, l_subfr, -1 ); - - /* Gain control */ - scale_st_ivas( signal_ptr, sig_out, &hPFstat->gain_prec_flt, l_subfr, -1 ); - - return; -} -#endif /*---------------------------------------------------------------------------- * pst_ltp() @@ -471,75 +118,6 @@ static void Dec_formant_postfilt( * Perform harmonic postfilter *----------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void pst_ltp( - const int16_t t0, /* i : pitch delay given by coder */ - const float *ptr_sig_in, /* i : postfilter input filter (residu2) */ - float *ptr_sig_pst0, /* o : harmonic postfilter output */ - float gain_factor, /* i : gain factor */ - const int16_t L_subfr /* i : sub-frame length */ -) -{ - int16_t ltpdel, phase; - float num_gltp, den_gltp; - float num2_gltp, den2_gltp; - float gain_plt; - float y_up[SIZ_Y_UP]; - const float *ptr_y_up; - int16_t off_yup; - - /* Suboptimal delay search */ - search_del( t0, ptr_sig_in, <pdel, &phase, &num_gltp, &den_gltp, y_up, &off_yup, L_subfr ); - - if ( num_gltp == 0.0f ) - { - mvr2r( ptr_sig_in, ptr_sig_pst0, L_subfr ); - } - else - { - if ( phase == 0 ) - { - ptr_y_up = ptr_sig_in - ltpdel; - } - else - { - /* filtering with long filter */ - compute_ltp_l( ptr_sig_in, ltpdel, phase, ptr_sig_pst0, &num2_gltp, &den2_gltp, L_subfr ); - - if ( select_ltp( num_gltp, den_gltp, num2_gltp, den2_gltp ) == 1 ) - { - /* select short filter */ - ptr_y_up = y_up + ( ( phase - 1 ) * ( L_subfr + 1 ) + off_yup ); - } - else - { - /* select long filter */ - num_gltp = num2_gltp; - den_gltp = den2_gltp; - ptr_y_up = ptr_sig_pst0; - } - } - - if ( num_gltp >= den_gltp ) - { - /* beta bounded to 1 */ - gain_plt = MIN_GPLT; - } - else - { - gain_plt = den_gltp / ( den_gltp + ( (float) 0.5 ) * num_gltp ); - } - - /* decrease gain in noisy condition */ - gain_plt += ( ( 1.0f - gain_plt ) * gain_factor ); - - /* filtering by H0(z) = harmonic filter */ - filt_plt( ptr_sig_in, ptr_y_up, ptr_sig_pst0, gain_plt, L_subfr ); - } - - return; -} -#endif /*---------------------------------------------------------------------------- * search_del() @@ -547,288 +125,6 @@ static void pst_ltp( * Computes best (shortest) integer LTP delay + fine search *---------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void search_del( - const int16_t t0, /* i : pitch delay given by coder */ - const float *ptr_sig_in, /* i : input signal (with delay line) */ - int16_t *ltpdel, /* o : delay = *ltpdel - *phase / f_up */ - int16_t *phase, /* o : phase */ - float *num_gltp, /* o : numerator of LTP gain */ - float *den_gltp, /* o : denominator of LTP gain */ - float *y_up, /* o : LT delayed signal if fract. delay*/ - int16_t *off_yup, /* o : offset in y_up */ - const int16_t L_subfr /* i : sub-frame length */ -) -{ - const float *ptr_h; - float tab_den0[F_UP_PST - 1], tab_den1[F_UP_PST - 1]; - float *ptr_den0, *ptr_den1; - const float *ptr_sig_past, *ptr_sig_past0; - const float *ptr1; - int16_t i, n, ioff, i_max; - float ener, num, numsq, den0, den1; - float den_int, num_int; - float den_max, num_max, numsq_max; - int16_t phi_max; - int16_t lambda, phi; - float temp0, temp1; - float *ptr_y_up; - - /*------------------------------------- - * Computes energy of current signal - *-------------------------------------*/ - - ener = 0.0f; - for ( i = 0; i < L_subfr; i++ ) - { - ener += ptr_sig_in[i] * ptr_sig_in[i]; - } - - if ( ener < 0.1f ) - { - *num_gltp = 0.0f; - *den_gltp = 1.0f; - *ltpdel = 0; - *phase = 0; - - return; - } - - /*------------------------------------- - * Selects best of 3 integer delays - * Maximum of 3 numerators around t0 - *-------------------------------------*/ - - lambda = t0 - 1; - ptr_sig_past = ptr_sig_in - lambda; - num_int = -1.0e30f; - i_max = 0; - - for ( i = 0; i < 3; i++ ) - { - num = 0.0f; - for ( n = 0; n < L_subfr; n++ ) - { - num += ptr_sig_in[n] * ptr_sig_past[n]; - } - if ( num > num_int ) - { - i_max = i; - num_int = num; - } - ptr_sig_past--; - } - - if ( num_int <= 0.0f ) - { - *num_gltp = 0.0f; - *den_gltp = 1.0f; - *ltpdel = 0; - *phase = 0; - - return; - } - - /* Calculates denominator for i_max */ - lambda += i_max; - ptr_sig_past = ptr_sig_in - lambda; - den_int = (float) 0.; - for ( n = 0; n < L_subfr; n++ ) - { - den_int += ptr_sig_past[n] * ptr_sig_past[n]; - } - - if ( den_int < (float) 0.1 ) - { - *num_gltp = (float) 0.; - *den_gltp = (float) 1.; - *ltpdel = 0; - *phase = 0; - return; - } - - /*---------------------------------- - * Select best phase around lambda - * Compute y_up & denominators - *----------------------------------*/ - - ptr_y_up = y_up; - den_max = den_int; - ptr_den0 = tab_den0; - ptr_den1 = tab_den1; - ptr_h = tab_hup_s; - ptr_sig_past0 = ptr_sig_in + LH_UP_S - 1 - lambda; /* points on lambda_max+1 */ - - /* loop on phase */ - for ( phi = 1; phi < F_UP_PST; phi++ ) - { - /* Computes criterion for (lambda+1) - phi/F_UP_PST */ - /* and lambda - phi/F_UP_PST */ - ptr_sig_past = ptr_sig_past0; - /* computes y_up[n] */ - for ( n = 0; n <= L_subfr; n++ ) - { - ptr1 = ptr_sig_past++; - temp0 = (float) 0.; - for ( i = 0; i < LH2_S; i++ ) - { - temp0 += ptr_h[i] * ptr1[-i]; - } - ptr_y_up[n] = temp0; - } - - /* compute den0 (lambda+1) and den1 (lambda) */ - /* part common to den0 and den1 */ - temp0 = (float) 0.; - for ( n = 1; n < L_subfr; n++ ) - { - temp0 += ptr_y_up[n] * ptr_y_up[n]; - } - - /* den0 */ - den0 = temp0 + ptr_y_up[0] * ptr_y_up[0]; - *ptr_den0++ = den0; - - /* den1 */ - den1 = temp0 + ptr_y_up[L_subfr] * ptr_y_up[L_subfr]; - *ptr_den1++ = den1; - if ( fabs( ptr_y_up[0] ) > fabs( ptr_y_up[L_subfr] ) ) - { - if ( den0 > den_max ) - { - den_max = den0; - } - } - else - { - if ( den1 > den_max ) - { - den_max = den1; - } - } - ptr_y_up += ( L_subfr + 1 ); - ptr_h += LH2_S; - } - if ( den_max < 0.1f ) - { - *num_gltp = 0.0f; - *den_gltp = 1.0f; - *ltpdel = 0; - *phase = 0; - return; - } - - /* Computation of the numerators */ - /* and selection of best num*num/den */ - /* for non null phases */ - - /* Initialize with null phase */ - num_max = num_int; - den_max = den_int; - numsq_max = num_max * num_max; - phi_max = 0; - ioff = 1; - - ptr_den0 = tab_den0; - ptr_den1 = tab_den1; - ptr_y_up = y_up; - - /* if den_max = 0 : will be selected and declared unvoiced */ - /* if num!=0 & den=0 : will be selected and declared unvoiced */ - /* degenerated seldom cases, switch off LT is OK */ - - /* Loop on phase */ - for ( phi = 1; phi < F_UP_PST; phi++ ) - { - - /* computes num for lambda+1 - phi/F_UP_PST */ - num = 0.0f; - for ( n = 0; n < L_subfr; n++ ) - { - num += ptr_sig_in[n] * ptr_y_up[n]; - } - if ( num < 0.0f ) - { - num = 0.0f; - } - numsq = num * num; - - /* selection if num/sqrt(den0) max */ - den0 = *ptr_den0++; - temp0 = numsq * den_max; - temp1 = numsq_max * den0; - if ( temp0 > temp1 ) - { - num_max = num; - numsq_max = numsq; - den_max = den0; - ioff = 0; - phi_max = phi; - } - - /* computes num for lambda_max - phi/F_UP_PST */ - ptr_y_up++; - num = (float) 0.; - for ( n = 0; n < L_subfr; n++ ) - { - num += ptr_sig_in[n] * ptr_y_up[n]; - } - if ( num < (float) 0. ) - { - num = (float) 0.; - } - numsq = num * num; - - /* selection if num/sqrt(den1) max */ - den1 = *ptr_den1++; - temp0 = numsq * den_max; - temp1 = numsq_max * den1; - if ( temp0 > temp1 ) - { - num_max = num; - numsq_max = numsq; - den_max = den1; - ioff = 1; - phi_max = phi; - } - ptr_y_up += L_subfr; - } - - /*--------------------------------------------------- - * test if normalized crit0[iopt] > THRESHCRIT - *--------------------------------------------------*/ - - if ( ( num_max == 0.0f ) || ( den_max <= 0.1f ) ) - { - *num_gltp = 0.0f; - *den_gltp = 1.0f; - *ltpdel = 0; - *phase = 0; - return; - } - - /* comparison num * num */ - /* with ener * den x THRESCRIT */ - temp1 = den_max * ener * THRESCRIT; - if ( numsq_max >= temp1 ) - { - *ltpdel = lambda + 1 - ioff; - *off_yup = ioff; - *phase = phi_max; - *num_gltp = num_max; - *den_gltp = den_max; - } - else - { - *num_gltp = 0.0f; - *den_gltp = 1.0f; - *ltpdel = 0; - *phase = 0; - } - - return; -} -#endif /*---------------------------------------------------------------------------- * filt_plt() @@ -836,28 +132,6 @@ static void search_del( * Perform long term postfilter *----------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void filt_plt( - const float *s_in, /* i : input signal with past */ - const float *s_ltp, /* i : filtered signal with gain 1 */ - float *s_out, /* o : output signal */ - const float gain_plt, /* i : filter gain */ - const int16_t L_subfr /* i : the length of subframe */ -) -{ - int16_t n; - float gain_plt_1; - - gain_plt_1 = (float) 1. - gain_plt; - - for ( n = 0; n < L_subfr; n++ ) - { - s_out[n] = gain_plt * s_in[n] + gain_plt_1 * s_ltp[n]; - } - - return; -} -#endif /*---------------------------------------------------------------------------- * compute_ltp_l() @@ -866,60 +140,6 @@ static void filt_plt( * with long interpolation filter *----------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void compute_ltp_l( - const float *s_in, /* i : input signal with past */ - const int16_t ltpdel, /* i : delay factor */ - const int16_t phase, /* i : phase factor */ - float *y_up, /* o : delayed signal */ - float *num, /* o : numerator of LTP gain */ - float *den, /* o : denominator of LTP gain */ - const int16_t L_subfr /* i : the length of subframe */ -) -{ - const float *ptr_h; - int16_t n, i; - const float *ptr2; - float temp; - - /* Filtering with long filter */ - ptr_h = tab_hup_l + ( phase - 1 ) * LH2_L; - ptr2 = s_in - ltpdel + LH_UP_L; - - /* Compute y_up */ - for ( n = 0; n < L_subfr; n++ ) - { - temp = 0.0f; - for ( i = 0; i < LH2_L; i++ ) - { - temp += ptr_h[i] * *ptr2--; - } - y_up[n] = temp; - ptr2 += LH2_L_P1; - } - - /* Compute num */ - *num = 0.0f; - for ( n = 0; n < L_subfr; n++ ) - { - *num += y_up[n] * s_in[n]; - } - - if ( *num < 0.0f ) - { - *num = 0.0f; - } - - /* Compute den */ - *den = 0.0f; - for ( n = 0; n < L_subfr; n++ ) - { - *den += y_up[n] * y_up[n]; - } - - return; -} -#endif /*---------------------------------------------------------------------------- * select_ltp() @@ -930,29 +150,6 @@ static void compute_ltp_l( *----------------------------------------------------------------------------*/ /*! r: 1 = 1st gain, 2 = 2nd gain */ -#ifndef IVAS_FLOAT_FIXED -static int16_t select_ltp( - const float num1, /* i : numerator of gain1 */ - const float den1, /* i : denominator of gain1 */ - const float num2, /* i : numerator of gain2 */ - const float den2 /* i : denominator of gain2 */ -) -{ - if ( den2 == (float) 0. ) - { - return ( 1 ); - } - - if ( num2 * num2 * den1 > num1 * num1 * den2 ) - { - return ( 2 ); - } - else - { - return ( 1 ); - } -} -#endif /*------------------------------------------------------------------------------------ @@ -960,65 +157,3 @@ static int16_t select_ltp( * * Modify gamma1 and gamma2 values in function of the long-term noise level *-----------------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void modify_pst_param( - const float psf_lp_noise, /* i : Long term noise energy */ - float *g1, /* o : Gamma1 used in post filter */ - float *g2, /* o : Gamma2 used in post filter */ - const int16_t coder_type, /* i : coder type */ - float *gain_factor /* o : Gain factor applied in post filtering */ -) -{ - float ftmp; - - if ( coder_type != INACTIVE && psf_lp_noise < LP_NOISE_THR ) - { - ftmp = psf_lp_noise * BG1 + CG1; - if ( ftmp > POST_G1 ) - { - ftmp = POST_G1; - } - else if ( ftmp < POST_G1_MIN ) - { - ftmp = POST_G1_MIN; - } - *g1 = ftmp; - - ftmp = psf_lp_noise * BG2 + CG2; - if ( ftmp > POST_G2 ) - { - ftmp = POST_G2; - } - else if ( ftmp < POST_G2_MIN ) - { - ftmp = POST_G2_MIN; - } - *g2 = ftmp; - } - else - { - *g1 = POST_G1_NOIS; - *g2 = POST_G2_NOIS; - } - - /* Set gain_factor of the harmonic filtering */ - ftmp = ( psf_lp_noise - K_LP_NOISE ) * C_LP_NOISE; - - if ( ftmp >= 0.25f ) - { - /* the noise is really high */ - *gain_factor = 0.25f; - } - else if ( ftmp < 0 ) - { - *gain_factor = 0.0f; - } - else - { - *gain_factor = ftmp; - } - - return; -} -#endif diff --git a/lib_dec/dec_post_fx.c b/lib_dec/dec_post_fx.c index 296b5cef7..27abd7b2d 100644 --- a/lib_dec/dec_post_fx.c +++ b/lib_dec/dec_post_fx.c @@ -8,7 +8,6 @@ #include "rom_dec.h" #include "rom_com.h" #include "cnst.h" -#ifdef IVAS_FLOAT_FIXED #define FORMAT_POST_FILT_G1 24576 /*0.75f Q15*/ /*0.75f*/ /*denominator 0.9,0.75,0.15,0.9*/ #define FORMAT_POST_FILT_G2 22938 /*0.7f Q15*/ /*0.7f*/ /*numerator 0.75,0.7,0.1,0.7*/ #define FORMAT_POST_FILT_G1_MAX 26214 /*0.8f Q15*/ /*for low bit-rates on clean speech*/ @@ -381,7 +380,6 @@ void formant_post_filt_fx( } } -#ifdef IVAS_FLOAT_FIXED void formant_post_filt_ivas_fx( PFSTAT_HANDLE hPFstat, /* i : core decoder parameters */ Word16 *synth_in, /* i : 12k8 synthesis */ @@ -506,7 +504,6 @@ void formant_post_filt_ivas_fx( p_Aq += ( M + 1 ); } } -#endif /*---------------------------------------------------------------------------- * Dec_formant_postfilt_fx * @@ -601,7 +598,6 @@ static void Dec_formant_postfilt_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void Dec_formant_postfilt_ivas_fx( PFSTAT_HANDLE hPFstat, /* i : core decoder parameters */ Word16 *signal_ptr, /* i : input signal (pointer to current subframe Q14*/ @@ -681,7 +677,6 @@ static void Dec_formant_postfilt_ivas_fx( return; } -#endif /*------------------------------------------------------------------------------------ * modify_pst_param() * @@ -1603,7 +1598,6 @@ static void calc_st_filt_local_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void calc_st_filt_ivas_fx( Word16 *apond2, /* i : coefficients of numerator Q12 */ Word16 *apond1, /* i : coefficients of denominator Q12 */ @@ -1658,7 +1652,6 @@ static void calc_st_filt_ivas_fx( return; } -#endif /*---------------------------------------------------------------------------- * filt_mu * @@ -1746,7 +1739,6 @@ void Filt_mu_fx( return; } -#ifdef IVAS_FLOAT_FIXED void Filt_mu_ivas_fx( Word16 *sig_in, /* i : signal (beginning at sample -1) */ Word16 *sig_out, /* o : signal with tilt */ @@ -1848,7 +1840,6 @@ void Filt_mu_ivas_fx( return; } -#endif /*---------------------------------------------------------------------------- * scale_st_fx() * @@ -1998,4 +1989,3 @@ void blend_subfr2_fx( return; } -#endif diff --git a/lib_dec/dec_ppp.c b/lib_dec/dec_ppp.c index 12237849a..e7a8ca967 100644 --- a/lib_dec/dec_ppp.c +++ b/lib_dec/dec_ppp.c @@ -39,71 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * decod_ppp() - * - * PPP decoder - *-------------------------------------------------------------------*/ - -ivas_error decod_ppp( - Decoder_State *st, /* i/o: state structure */ - const float Aq[], /* i : 12k8 Lp coefficient */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - float *gain_buf, /* o : floating pitch gain for each subframe */ - const int16_t bfi /* i : BFI flag */ -) -{ - int16_t k; - float p_Aq_old[M + 1], excQ_ppp[L_FRAME], p_Aq_curr[M], LPC_de_old[M + 1]; - float LPC_de_curr[M + 1], pitch[NB_SUBFR]; - ivas_error error; - - error = IVAS_ERR_OK; - - /* call voiced decoder at this point */ - for ( k = 0; k < M; k++ ) - { - p_Aq_curr[k] = Aq[k + ( 3 * ( M + 1 ) ) + 1]; - } - - lsp2a_stab( st->lsp_old, p_Aq_old, M ); - - deemph_lpc( p_Aq_curr, p_Aq_old, LPC_de_curr, LPC_de_old, 0 ); - - /* last frame-end lpc and curr frame-end lpc */ - if ( ( error = ppp_voiced_decoder( st, excQ_ppp, LPC_de_curr, exc, pitch, bfi ) ) != IVAS_ERR_OK ) - { - return error; - } - - - st->tilt_code = st->prev_tilt_code_dec; - - mvr2r( excQ_ppp, exc, L_FRAME ); - mvr2r( exc, exc2, L_FRAME ); - - st->dispMem[0] = 2; - st->dispMem[2] = st->prev_gain_pit_dec; - - for ( k = 3; k < 7; k++ ) - { - st->dispMem[k] = st->dispMem[k - 1]; - } - - mvr2r( pitch, pitch_buf, NB_SUBFR ); - - if ( st->hBWE_TD != NULL ) - { - interp_code_5over2( exc2, bwe_exc, L_FRAME ); - } - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - set_f( gain_buf, 0, NB_SUBFR16k ); - - return error; -} -#endif diff --git a/lib_dec/dec_ppp_fx.c b/lib_dec/dec_ppp_fx.c index 189ecc2b7..4849e147a 100644 --- a/lib_dec/dec_ppp_fx.c +++ b/lib_dec/dec_ppp_fx.c @@ -6,7 +6,6 @@ #include #include "options.h" /* Compilation switches */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*===================================================================*/ /* FUNCTION : void decod_ppp_fx () */ /*-------------------------------------------------------------------*/ @@ -112,4 +111,3 @@ ivas_error decod_ppp_fx( set16_fx( gain_buf, 0, NB_SUBFR16k ); return error; } -#endif diff --git a/lib_dec/dec_prm.c b/lib_dec/dec_prm.c index b6a2b7d82..33c62a67a 100644 --- a/lib_dec/dec_prm.c +++ b/lib_dec/dec_prm.c @@ -48,7 +48,6 @@ * * get TCX mode *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void getTCXMode_ivas_fx( Decoder_State *st, /* i/o: decoder memory state */ Decoder_State *st0, /* i : bitstream */ @@ -225,201 +224,12 @@ void getTCXMode_ivas_fx( return; } -#else -void getTCXMode_ivas( - Decoder_State *st, /* i/o: decoder memory state */ - Decoder_State *st0, /* i : bitstream */ - const Word16 MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - UWord16 ind; - - IF( st->tcxonly ) - { - /* get core */ -#ifdef IVAS_FLOAT_FIXED - ind = get_next_indice_fx( st0, 1 ); /* Store decoder memory of last_core */ -#else - ind = get_next_indice( st0, 1 ); -#endif // IVAS_FLOAT_FIXED - - st->core = add( ind, TCX_20_CORE ); - - /* get class */ -#ifdef IVAS_FLOAT_FIXED - ind = get_next_indice_fx( st0, 2 ); -#else - ind = get_next_indice( st0, 2 ); -#endif // IVAS_FLOAT_FIXED - - st->clas_dec = ONSET; - IF( ind == 0 ) - { - st->clas_dec = UNVOICED_CLAS; - } - ELSE IF( ind == 1 ) - { - IF( GE_16( st->last_good, VOICED_TRANSITION ) ) - { - st->clas_dec = VOICED_TRANSITION; - } - ELSE - { - st->clas_dec = UNVOICED_TRANSITION; - } - } - ELSE IF( ind == 2 ) - { - st->clas_dec = VOICED_CLAS; - } - - st->coder_type = INACTIVE; - IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) && !MCT_flag ) - { -#ifdef IVAS_FLOAT_FIXED - st->VAD = get_next_indice_fx( st0, 1 ); -#else - st->VAD = get_next_indice( st0, 1 ); -#endif // IVAS_FLOAT_FIXED - } - ELSE - { - st->VAD = 0; - } - } - ELSE - { - IF( EQ_16( st->mdct_sw, MODE1 ) ) - { - /* 2 bits instead of 3 as TCX is already signaled */ - st->core = TCX_20_CORE; -#ifdef IVAS_FLOAT_FIXED - st->hTcxCfg->coder_type = get_next_indice_fx( st0, 2 ); -#else - st->hTcxCfg->coder_type = get_next_indice( st0, 2 ); -#endif // IVAS_FLOAT_FIXED - st->coder_type = st->hTcxCfg->coder_type; - } - ELSE - { - IF( EQ_16( st->mdct_sw_enable, MODE2 ) ) - { - -#ifdef IVAS_FLOAT_FIXED - IF( get_next_indice_1_fx( st0 ) ) -#else - IF( get_next_indice_1( st0 ) ) /* TCX */ -#endif // IVAS_FLOAT_FIXED - { -#ifdef IVAS_FLOAT_FIXED - ind = get_next_indice_fx( st0, 3 ); -#else - ind = get_next_indice( st0, 3 ); -#endif - assert( !( ind & 4 ) || !"HQ_CORE encountered in dec_prm_ivas" ); - st->core = TCX_20_CORE; - st->hTcxCfg->coder_type = ind; - st->coder_type = st->hTcxCfg->coder_type; - } - ELSE /* ACELP */ - { - st->core = ACELP_CORE; -#ifdef IVAS_FLOAT_FIXED - st->coder_type = get_next_indice_fx( st0, 2 ); -#else - st->coder_type = get_next_indice( st0, 2 ); -#endif // IVAS_FLOAT_FIXED - } - } - ELSE - { - IF( EQ_16( st->rf_flag, 1 ) ) - { - IF( !st->use_partial_copy ) - { -#ifdef IVAS_FLOAT_FIXED - ind = get_next_indice_fx( st0, 1 ); -#else - ind = get_next_indice( st0, 1 ); -#endif // IVAS_FLOAT_FIXED - IF( ind == 0 ) - { - st->core = ACELP_CORE; - } - ELSE - { - st->core = TCX_20_CORE; - st->hTcxCfg->coder_type = st->coder_type; - } - } - } - ELSE - { -#ifdef IVAS_FLOAT_FIXED - ind = get_next_indice_fx( st, 3 ); -#else - ind = get_next_indice( st, 3 ); -#endif // IVAS_FLOAT_FIXED - IF( LT_16( ind, ACELP_MODE_MAX ) ) - { - st->core = ACELP_CORE; - st->coder_type = ind; - } - ELSE - { - st->core = TCX_20_CORE; - st->hTcxCfg->coder_type = sub( ind, ACELP_MODE_MAX ); - st->coder_type = st->hTcxCfg->coder_type; - } - } - } - } - - IF( EQ_16( st->element_mode, EVS_MONO ) ) - { - IF( st->igf && EQ_16( st->core, ACELP_CORE ) ) - { -#ifdef IVAS_FLOAT_FIXED - st->bits_frame_core = sub( st->bits_frame_core, get_tbe_bits_fx( st->total_brate, st->bwidth, st->rf_flag ) ); -#else - st->bits_frame_core -= get_tbe_bits( st->total_brate, st->bwidth, st->rf_flag ); -#endif // IVAS_FLOAT_FIXED - } - - IF( st->rf_flag ) - { - st->bits_frame_core = sub( st->bits_frame_core, add( st->rf_target_bits, 1 ) ); /* +1 as flag-bit not considered in rf_target_bits */ - } - } - - /* Inactive frame detection on non-DTX mode */ - IF( EQ_16( st->coder_type, INACTIVE ) ) - { - st->VAD = 0; - } - ELSE - { - st->VAD = 1; - } - } - - /*Core extended mode mapping for correct PLC classification*/ - st->core_ext_mode = st->coder_type; - IF( EQ_16( st->coder_type, INACTIVE ) ) - { - st->core_ext_mode = UNVOICED; - } - - return; -} -#endif /*-------------------------------------------------------------------* * getTCXWindowing_ivas() * * get TCX transform type for each subframe *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void getTCXWindowing_ivas_fx( const Word16 core, /* i : current core */ const Word16 last_core, /* i : last frame core */ @@ -500,86 +310,6 @@ void getTCXWindowing_ivas_fx( return; } -#else -void getTCXWindowing_ivas( - const Word16 core, /* i : current core */ - const Word16 last_core, /* i : last frame core */ - const Word16 element_mode, /* i : element mode */ - TCX_CONFIG_HANDLE hTcxCfg, /* i/o: TCX configuration handle */ - Decoder_State *st0 /* i : bitstream */ -) -{ - Word16 overlap_code; - - /* Set the last overlap mode based on the previous and current frame type and coded overlap mode */ - IF( EQ_16( last_core, ACELP_CORE ) || EQ_16( last_core, AMR_WB_CORE ) ) - { - hTcxCfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; - } - ELSE IF( EQ_16( core, TCX_10_CORE ) && EQ_16( hTcxCfg->tcx_curr_overlap_mode, ALDO_WINDOW ) ) - { - hTcxCfg->tcx_last_overlap_mode = FULL_OVERLAP; - } - ELSE IF( NE_16( core, TCX_10_CORE ) && EQ_16( hTcxCfg->tcx_curr_overlap_mode, FULL_OVERLAP ) ) - { - hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - } - ELSE - { - hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; - } - - /* Set the current overlap mode based on the current frame type and coded overlap mode */ - hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - - IF( NE_16( core, ACELP_CORE ) ) - { - overlap_code = 0; -#ifdef IVAS_FLOAT_FIXED - IF( get_next_indice_fx( st0, 1 ) ) - { - overlap_code = add( 2, get_next_indice_fx( st0, 1 ) ); - } -#else - if ( get_next_indice( st0, 1 ) ) - { - overlap_code = 2 + get_next_indice( st0, 1 ); - } -#endif - - assert( MIN_OVERLAP == 2 && HALF_OVERLAP == 3 ); - hTcxCfg->tcx_curr_overlap_mode = overlap_code; - - /*TCX10 : always symmetric windows*/ - IF( EQ_16( core, TCX_20_CORE ) && EQ_16( overlap_code, 0 ) && NE_16( last_core, ACELP_CORE ) && NE_16( last_core, AMR_WB_CORE ) ) - { - hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - } - } - - IF( NE_16( element_mode, EVS_MONO ) && EQ_16( core, TCX_10_CORE ) ) - { - /* also read last overlap */ - overlap_code = 0; - -#ifdef IVAS_FLOAT_FIXED - IF( get_next_indice_fx( st0, 1 ) ) - { - overlap_code = add( 2, get_next_indice_fx( st0, 1 ) ); - } -#else - if ( get_next_indice( st0, 1 ) ) - { - overlap_code = 2 + get_next_indice( st0, 1 ); - } -#endif - - hTcxCfg->tcx_last_overlap_mode = overlap_code; - } - - return; -} -#endif /*-------------------------------------------------------------------* * getLPCparam_ivas() @@ -587,844 +317,12 @@ void getTCXWindowing_ivas( * get LPC parameters *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void getLPCparam_ivas( - Decoder_State *st, /* i/o: decoder memory state */ - int16_t param_lpc[], /* o : LTP parameters */ - Decoder_State *st0, /* i : bitstream */ - const int16_t ch, /* i : channel */ - const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ -) -{ - if ( st->use_partial_copy == 0 ) - { - /* Number of sets of LPC parameters (does not include mid-lpc) */ - if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) - { - st->numlpc = 1; - } - else - { - st->numlpc = 2; - } - - /* Decode LPC parameters */ - if ( st->hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) - { - int16_t tcx_lpc_cdk; - tcx_lpc_cdk = tcxlpc_get_cdk_float( st->coder_type ); - dec_lsf_tcxlpc_ivas( st0, ¶m_lpc, st->narrowBand, tcx_lpc_cdk ); - } - else - { - if ( st->lpcQuantization == 0 ) - { - decode_lpc_avq( st0, st->numlpc, param_lpc, ch, st->element_mode, sns_low_br_mode ); - } - else if ( st->lpcQuantization == 1 ) - { - if ( st->sr_core == INT_FS_16k && st->coder_type == VOICED && st->core == ACELP_CORE ) - { - assert( st->element_mode == EVS_MONO ); - - lsf_bctcvq_decprm_ivas( st0, param_lpc ); - } - else - { - lsf_msvq_ma_decprm_ivas( st0, param_lpc ); - } - } - else - { - assert( 0 ); - } - } - } - else - { - st->numlpc = 1; - - if ( st->rf_frame_type == RF_TCXFD ) - { - param_lpc[0] = 0; - param_lpc[1] = get_next_indice( st0, lsf_numbits[0] ); /* VQ 1 */ - param_lpc[2] = get_next_indice( st0, lsf_numbits[1] ); /* VQ 2 */ - param_lpc[3] = get_next_indice( st0, lsf_numbits[2] ); /* VQ 3 */ - } - else if ( st->rf_frame_type >= RF_ALLPRED && st->rf_frame_type <= RF_NELP ) - { - /* LSF indices */ - param_lpc[0] = get_next_indice( st0, 8 ); /* VQ 1 */ - param_lpc[1] = get_next_indice( st0, 8 ); /* VQ 2 */ - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * getTCXparam_ivas() - * - * get TCX core parameters - *-------------------------------------------------------------------*/ - -void getTCXparam_ivas( - Decoder_State *st, /* i/o: Decoder State handle */ - Decoder_State *st0, /* i : bitstream */ - CONTEXT_HM_CONFIG hm_cfg, /* i/o: HM config */ - int16_t param[], /* o : decoded parameters */ - const int16_t bits_common, /* i : number of common bits */ - const int16_t start_bit_pos, /* i : position of the start bit */ - const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ - int16_t p_param[2], /* o : pointer to parameters for next round of bs reading*/ - int16_t nTnsBitsTCX10[2], - const int16_t pre_past_flag ) -{ - int16_t ix, j, k, core, last_core, nSubframes; - int16_t lg, lgFB, flag_ctx_hm, hm_size; - int16_t PeriodicityIndex, useHarmonicModel; - int16_t tcxltp_prm_0, tcxltp_prm_1, tcxltp_prm_2, nbits_igf, nbits_tcx; - int16_t *prm, *prms; - int16_t nTnsParams, nTnsBits; - int16_t pre_part, post_part; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - - if ( pre_past_flag == 0 ) - { - pre_part = 1; - post_part = 0; - } - else if ( pre_past_flag == 1 ) - { - pre_part = 0; - post_part = 1; - } - else - { - pre_part = 1; - post_part = 1; - } - - /* initialization */ - tcxltp_prm_0 = 0; - tcxltp_prm_1 = 0; - tcxltp_prm_2 = 0; - nbits_igf = 0; - - PeriodicityIndex = 0; - useHarmonicModel = 0; - - core = st->core; - last_core = st->last_core; - - nSubframes = 1; - if ( core == TCX_10_CORE ) - { - nSubframes = 2; - } - - if ( st->element_mode < IVAS_CPE_MDCT && st->igf && core == TCX_10_CORE ) - { - /* get IGF */ - for ( k = 0; k < nSubframes; k++ ) - { - ix = st->next_bit_pos; - - IGFDecReadLevel_flt( st->hIGFDec, st0, IGF_GRID_LB_SHORT, 1 - k ); - - IGFDecReadData_flt( st->hIGFDec, st0, IGF_GRID_LB_SHORT, 1 - k ); - - IGFDecStoreTCX10SubFrameData_flt( st->hIGFDec, k ); - - nbits_igf += st0->next_bit_pos - ix; - } - } - - /* loop over subframes */ - for ( k = 0; k < nSubframes; k++ ) - { - flag_ctx_hm = 0; - - prm = param + ( k * DEC_NPRM_DIV ); - j = 0; - - nbits_tcx = st0->next_bit_pos - start_bit_pos; - - if ( pre_part && st->enablePlcWaveadjust && k == ( nSubframes - 1 ) ) - { - st->tonality_flag = get_next_indice( st0, 1 ); - } - - if ( post_part ) - { - /* TCX Gain */ - prm[j++] = get_next_indice( st0, NBITS_TCX_GAIN ); - - /* TCX Noise Filling = NBITS_NOISE_FILL_LEVEL bits */ - prm[j++] = get_next_indice( st0, NBITS_NOISE_FILL_LEVEL ); - } - else - { - j += 1 + NOISE_FILL_RANGES; - } - - /* LTP data */ - if ( pre_part ) - { - if ( ( k == 0 ) && ( hTcxLtpDec->tcxltp || ( st->sr_core > 25600 ) ) ) /* PLC pitch info for HB */ - { - prm[j] = get_next_indice( st0, 1 ); - - if ( prm[j] ) - { - prm[j + 1] = get_next_indice( st0, 9 ); - prm[j + 2] = get_next_indice( st0, 2 ); - - tcxltp_prm_0 = prm[j]; - tcxltp_prm_1 = prm[j + 1]; - tcxltp_prm_2 = prm[j + 2]; - } - st->BER_detect = st->BER_detect | tcx_ltp_decode_params_flt( &prm[j], &( hTcxLtpDec->tcxltp_pitch_int ), &( hTcxLtpDec->tcxltp_pitch_fr ), &( hTcxLtpDec->tcxltp_gain_float ), st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max ); - - hTcxDec->tcxltp_last_gain_unmodified_float = hTcxLtpDec->tcxltp_gain_float; - - if ( core == TCX_20_CORE && !st->tcxonly && hTcxLtpDec->tcxltp_pitch_int < st->L_frame ) - { - hTcxDec->tcx_hm_LtpPitchLag = ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( hTcxLtpDec->tcxltp_pitch_int * st->pit_res_max + hTcxLtpDec->tcxltp_pitch_fr ); - } - else - { - hTcxDec->tcx_hm_LtpPitchLag = -1; - } - j += 3; - } - else - { - prm[j++] = tcxltp_prm_0; - prm[j++] = tcxltp_prm_1; - prm[j++] = tcxltp_prm_2; - } - } - - /* TCX spectral data */ - lg = st->L_frame >> ( nSubframes - 1 ); - lgFB = st->hTcxCfg->tcx_coded_lines >> ( nSubframes - 1 ); - - if ( post_part && k == 0 && st->last_core_from_bs == ACELP_CORE ) - { - /* ACE->TCX transition */ - lg += st->hTcxCfg->tcx_offset; - lgFB += lgFB >> ( 3 - nSubframes ); - - if ( st->hTcxCfg->lfacNext < 0 ) - { - lg -= st->hTcxCfg->lfacNext; - } - } - - if ( pre_part ) - { - /* TNS data */ - nTnsParams = 0; - nTnsBits = 0; - - if ( st->hTcxCfg->fIsTNSAllowed ) - { - if ( core == TCX_10_CORE && last_core == ACELP_CORE && k == 0 ) - { - st0->BER_detect = 1; - last_core = TCX_20_CORE; - } - - SetTnsConfig_flt( st->hTcxCfg, core == TCX_20_CORE, ( st->last_core_from_bs == ACELP_CORE ) && ( k == 0 ) ); - ix = 0; - if ( no_param_tns ) - { - ix = get_next_indice( st0, 1 ); /* common_tns_data[] for subframe k */ - } - if ( ix ) - { - prm[j] = no_param_tns[k] * -1; /* - signals common TNS and its size */ - nTnsParams = no_param_tns[k]; - } - else - { - ReadTnsData_ivas( st->hTcxCfg->pCurrentTnsConfig, st0, &nTnsBits, prm + j, &nTnsParams ); - } - hTcxDec->tnsActive[k] = ( prm[j] != 0 ? 1 : 0 ) * nTnsParams; - if ( nTnsBitsTCX10 != NULL ) - { - nTnsBitsTCX10[k] = nTnsBits + ( no_param_tns ? 1 : 0 ); - } - - j += nTnsParams; - } - - if ( post_part ) - { - if ( core == TCX_20_CORE ) - { - hm_size = (int16_t) ( 2.0f * st->TcxBandwidth_float * (float) lg ); - - if ( hTcxDec->tcx_lpc_shaped_ari && st->last_core_from_bs != ACELP_CORE ) - { - dec_prm_hm_ivas( st0, &prm[j], hm_size ); - } - - nbits_tcx = st->bits_frame_core - ( st0->next_bit_pos - start_bit_pos ); - } - else - { - hm_size = (int16_t) ( 2.0f * st->TcxBandwidth_float * (float) lgFB ); - - nbits_tcx = ( ( st->bits_frame_core - bits_common - nbits_igf + 1 - k ) >> 1 ) - ( ( st0->next_bit_pos - start_bit_pos ) - nbits_tcx ); - } - - /*Context HM flag*/ - if ( st->hTcxCfg->ctx_hm && !( st->last_core_from_bs == ACELP_CORE && k == 0 ) ) - { - useHarmonicModel = get_next_indice( st0, 1 ); - prm[j] = useHarmonicModel; - nbits_tcx--; - - if ( useHarmonicModel ) - { - ix = DecodeIndex( st0, hm_size >= 256, prm + j + 1 ); - flag_ctx_hm = 1; - - PeriodicityIndex = *( prm + j + 1 ); - if ( st->element_mode == EVS_MONO ) - { - ConfigureContextHm_ivas( lgFB, nbits_tcx, PeriodicityIndex, hTcxDec->tcx_hm_LtpPitchLag, &hm_cfg ); - } - nbits_tcx -= ix; - } - } - } - j += NPRM_CTX_HM; - - /* read IGF payload */ - if ( post_part && core == TCX_20_CORE ) - { - if ( st->igf ) - { - ix = st->next_bit_pos; - IGFDecReadLevel_flt( st->hIGFDec, st0, ( st->last_core_from_bs == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - - IGFDecReadData_flt( st->hIGFDec, st0, ( st->last_core_from_bs == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - - nbits_tcx -= ( st0->next_bit_pos - ix ); - } - nbits_tcx = st->bits_frame_core - ( st0->next_bit_pos - start_bit_pos ); - } - else if ( p_param != NULL ) - { - p_param[k] = j; - } - } - else - { - j = p_param[k]; - - nbits_tcx = st->bits_frame_channel; - if ( st->core == TCX_10_CORE ) - { - nbits_tcx = nTnsBitsTCX10[k] - NBITS_TCX_GAIN - NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; - } - } - - if ( post_part ) - { - if ( hTcxDec->tcx_lpc_shaped_ari && core == TCX_20_CORE ) - { - prm[j++] = nbits_tcx; /* store length of buffer */ - prms = &prm[j]; - for ( ix = 0; ix < nbits_tcx; ix++ ) - { - prms[ix] = get_next_indice_1( st0 ); - } - for ( ix = 0; ix < 32; ix++ ) - { - prms[ix + nbits_tcx] = 1; - } - j += nbits_tcx; - } - else - { - if ( st->element_mode > EVS_MONO ) - { - if ( useHarmonicModel ) - { - ConfigureContextHm_ivas( lgFB, nbits_tcx, PeriodicityIndex, hTcxDec->tcx_hm_LtpPitchLag, &hm_cfg ); - } - hTcxDec->resQBits[k] = RCcontextMapping_decode2_no_mem_s17_LCS( st0, prm + j, lgFB, nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg : NULL ); - } - else - { - hTcxDec->resQBits[k] = ACcontextMapping_decode2_no_mem_s17_LC_ivas( st0, prm + j, lgFB, nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg : NULL ); - } - } - } - } - - return; -} - - -/*-----------------------------------------------------------------* - * dec_prm_hm_ivas() - * - * - *-----------------------------------------------------------------*/ - -void dec_prm_hm_ivas( - Decoder_State *st, - int16_t *prm_hm, - const int16_t hm_size ) -{ - /* Disable HM for non-GC,VC modes */ - if ( st->hTcxCfg->coder_type != VOICED && st->hTcxCfg->coder_type != GENERIC ) - { - prm_hm[0] = 0; - - return; - } - - prm_hm[1] = -1; - prm_hm[2] = 0; - - /* Flag */ - prm_hm[0] = get_next_indice( st, 1 ); - - if ( prm_hm[0] ) - { - /* Periodicity index */ - DecodeIndex( st, hm_size >= 256, &prm_hm[1] ); - - /* Gain index */ - if ( st->hTcxCfg->coder_type == VOICED ) - { - prm_hm[2] = get_next_indice( st, kTcxHmNumGainBits ); - } - } - - return; -} -#endif - -/*-----------------------------------------------------------------* - * Function dec_prm_ivas() * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * +/*-----------------------------------------------------------------* + * Function dec_prm_ivas() * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * * SQ is used for TCX modes * * decode parameters according to selected mode * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void dec_prm_ivas( - Decoder_State *st, /* i/o: decoder memory state */ - int16_t param[], /* o : decoded parameters */ - int16_t param_lpc[], /* o : LPC parameters */ - int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ - int16_t *bitsRead ) -{ - int16_t j, n, sfr, core, nb_subfr; - int16_t *prm; - int16_t start_bit_pos, bits_common, acelp_target_bits; - int16_t ix, j_old, wordcnt, bitcnt; - CONTEXT_HM_CONFIG hm_cfg; - int16_t indexBuffer[N_MAX + 1]; - int16_t ind; - int16_t ltp_mode, gains_mode; - int16_t prm_ltp[LTPSIZE]; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - /*--------------------------------------------------------------------------------* - * INIT - *--------------------------------------------------------------------------------*/ - - hm_cfg.indexBuffer = indexBuffer; - - core = st->core; - - if ( st->mdct_sw == MODE1 ) - { - start_bit_pos = 0; /* count from frame start */ - - /* Adjust st->bits_frame_core not to subtract MODE2 bandwidth signaling */ - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == st->total_brate / FRAMES_PER_SEC ) - { - st->bits_frame_core += FrameSizeConfig[n].bandwidth_bits; - break; - } - } - } - else - { - if ( st->rf_flag == 1 ) - { - /*Inherent adjustment to accommodate the compact packing used in the RF mode*/ - start_bit_pos = st->next_bit_pos - 2; - } - else - { - start_bit_pos = st->next_bit_pos; - } - } - - /* Framing parameters */ - nb_subfr = st->nb_subfr; - - /* Initialize pointers */ - prm = param; - - /* Init counters */ - j = 0; - - /* Init LTP data */ - if ( hTcxDec != NULL ) - { - hTcxDec->tcx_hm_LtpPitchLag = -1; - hTcxLtpDec->tcxltp_gain_float = 0.0f; - } - - /*--------------------------------------------------------------------------------* - * core-coder header - *--------------------------------------------------------------------------------*/ - - /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ - getTCXMode_ivas( st, st, 0 /* <- MCT_flag */ ); - core = st->core; - - /* Decode last_core for error concealment */ - if ( !( core == ACELP_CORE && st->hTcxCfg->lfacNext <= 0 ) && !st->use_partial_copy ) - { - - st->last_core_from_bs = get_next_indice( st, 1 ); - /* - need to introduce special error handling for lost transition frames from CNG: - in such cases, the bitstream reader continues with CNG, setting bfi = 0, total_brate = 0 - this might result in a not matching last_core transmitted in the BS - we should use this - only for interpreting the bitstream and re-use the internal state for the proper - transition handling; still, for voiced onsets rather stick to wrong windowing... - */ - if ( ( !( ( st->last_total_brate == 0 ) && ( st->clas_dec != VOICED_CLAS ) ) ) && ( st->last_core_from_bs != st->last_core ) ) - { - st->last_core = st->last_core_from_bs; - } - - /*for TCX 10 force last_core to be TCX since ACELP as previous core is forbidden*/ - if ( core == TCX_10_CORE ) - { - st->last_core = TCX_20_CORE; - st->last_core_from_bs = TCX_20_CORE; - } - } - - if ( st->rf_flag && st->use_partial_copy && !st->tcxonly ) - { - int32_t nbits_total; - nbits_total = st->total_brate / FRAMES_PER_SEC; - st->bits_frame_core = st->rf_target_bits; - /* offset the indices to read the acelp partial copy */ - get_next_indice_tmp( st, (int16_t) ( start_bit_pos + nbits_total - st->rf_target_bits - 3 - st->next_bit_pos ) ); - } - - if ( !st->use_partial_copy ) - { - getTCXWindowing_ivas( st->core, st->last_core, st->element_mode, st->hTcxCfg, st ); - - if ( st->enableGplc ) /* SIDE INFO. DECODING */ - { - int16_t pitchDiff; - int16_t bits_per_subfr, search_range; - bits_per_subfr = 4; - search_range = 8; - st->flagGuidedAcelp = get_next_indice( st, 1 ); - - pitchDiff = 0; - if ( st->flagGuidedAcelp ) - { - pitchDiff = get_next_indice( st, bits_per_subfr ); - st->guidedT0 = ( pitchDiff - search_range ); - } - if ( pitchDiff == 0 && st->flagGuidedAcelp ) - { - st->flagGuidedAcelp = 0; - } - } - else - { - st->flagGuidedAcelp = 0; - } - - if ( st->dec_glr ) - { - if ( core == ACELP_CORE ) - { - st->dec_glr_idx = get_next_indice( st, G_LPC_RECOVERY_BITS ); - } - else - { - st->dec_glr_idx = -1; - } - } - } - - /*--------------------------------------------------------------------------------* - * LPC parameters - *--------------------------------------------------------------------------------*/ - - /*Initialization of LPC Mid flag*/ - if ( ( st->lpcQuantization == 1 && st->coder_type == VOICED ) || ( st->use_partial_copy ) ) - { - ( &( st->acelp_cfg ) )->midLpc = 0; - } - else - { - ( &( st->acelp_cfg ) )->midLpc = st->acelp_cfg.midLpc_enable; - } - - getLPCparam_ivas( st, param_lpc, st, -1, 0 ); - - bits_common = st->next_bit_pos - start_bit_pos; - - /*--------------------------------------------------------------------------------* - * ACELP parameters - *--------------------------------------------------------------------------------*/ - - if ( core == ACELP_CORE && st->use_partial_copy == 0 ) - { - int16_t tmp; - - /* Target Bits */ - - /* needed in decoder to read the bitstream */ - acelp_target_bits = st->bits_frame_core - bits_common; - - /* Configure ACELP */ - tmp = BITS_ALLOC_config_acelp_IVAS( acelp_target_bits, st->coder_type, &( st->acelp_cfg ), st->narrowBand, st->nb_subfr ); - if ( tmp < 0 ) - { - /* erroneous configuration, resulting from a corrupt bitstream */ - st->BER_detect = 1; - } - - /* Adaptive BPF (2 bits)*/ - n = ACELP_BPF_BITS[st->acelp_cfg.bpf_mode]; - if ( n != 0 ) - { - st->bpf_gain_param = get_next_indice( st, n ); - } - else - { - st->bpf_gain_param = ( st->acelp_cfg.bpf_mode ) * 2; - } - - /* Mean energy (2 or 3 bits) */ - n = ACELP_NRG_BITS[st->acelp_cfg.nrg_mode]; - if ( n != 0 ) - { - prm[j++] = get_next_indice( st, n ); - } - - /* Subframe parameters */ - for ( sfr = 0; sfr < nb_subfr; sfr++ ) - { - /* Pitch lag (4, 5, 6, 8 or 9 bits) */ - n = ACELP_LTP_BITS_SFR[st->acelp_cfg.ltp_mode][sfr]; - - if ( n != 0 ) - { - prm[j] = get_next_indice( st, n ); - j++; - } - - /* Adaptive codebook filtering (1 bit) */ - if ( st->acelp_cfg.ltf_mode == 2 ) - { - prm[j] = get_next_indice( st, 1 ); - j++; - } - - /* Innovative codebook */ - { - /* Decode pulse positions. */ - j_old = j; - - wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) / 16; - bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) & 15; - - /* sanity check - can happen in case of bit errors */ - if ( ( st->acelp_cfg.fixed_cdk_index[sfr] >= ACELP_FIXED_CDK_NB ) || ( st->acelp_cfg.fixed_cdk_index[sfr] < 0 ) ) - { - st->acelp_cfg.fixed_cdk_index[sfr] = 0; - st->BER_detect = 1; - } - - for ( ix = 0; ix < wordcnt; ix++ ) - { - prm[j] = get_next_indice( st, 16 ); - j++; - } - - if ( bitcnt ) - { - prm[j] = get_next_indice( st, bitcnt ); - } - j = j_old + 8; - } - - /* Gains (5b, 6b or 7b / subfr) */ - n = ACELP_GAINS_BITS[st->acelp_cfg.gains_mode[sfr]]; - prm[j++] = get_next_indice( st, n ); - } /*end of subfr loop*/ - } - else if ( st->rf_frame_type >= RF_ALLPRED && st->use_partial_copy ) - { - int16_t tmp = BITS_ALLOC_config_acelp_IVAS( st->rf_target_bits, /* target bits ranges from 56 to 72 depending on rf_type */ - st->rf_frame_type, /* already offset by 4 to parse the config elements for partial copy */ - &( st->acelp_cfg ), /* acelp_cfg_rf*/ - 0, /* is narrowBand */ - st->nb_subfr ); - if ( tmp < 0 ) - { - /* erroneous configuration, resulting from a corrupt bitstream */ - st->BER_detect = 1; - } - - /* rf_frame_type NELP: 7 */ - if ( st->rf_frame_type == RF_NELP ) - { - /* NELP gain indices */ - st->rf_indx_nelp_iG1 = get_next_indice( st, 5 ); - st->rf_indx_nelp_iG2[0] = get_next_indice( st, 6 ); - st->rf_indx_nelp_iG2[1] = get_next_indice( st, 6 ); - - /* NELP filter selection index */ - st->rf_indx_nelp_fid = get_next_indice( st, 2 ); - - /* tbe gainFr */ - st->rf_indx_tbeGainFr = get_next_indice( st, 5 ); - } - else - { - /* rf_frame_type ALL_PRED: 4, NO_PRED: 5, GEN_PRED: 6*/ - /* ES pred */ - prm[j++] = get_next_indice( st, 3 ); - - ltp_mode = ACELP_LTP_MODE[1][1][st->rf_frame_type]; - gains_mode = ACELP_GAINS_MODE[1][1][st->rf_frame_type]; - - /* Subframe parameters */ - for ( sfr = 0; sfr < nb_subfr; sfr++ ) - { - /* Pitch lag (5, or 8 bits) */ - n = ACELP_LTP_BITS_SFR[ltp_mode][sfr]; - if ( n != 0 ) - { - prm[j++] = get_next_indice( st, n ); - } - - - /*Innovative codebook*/ - if ( ( st->rf_frame_type == RF_NOPRED ) || ( st->rf_frame_type == RF_GENPRED && ( sfr == 0 || sfr == 2 ) ) ) - { - /* NOTE: FCB actual bits need to be backed up as well */ - /*n = ACELP_FIXED_CDK_BITS(st->rf_indx_fcb[fec_offset][sfr]) & 15;*/ - prm[j] = get_next_indice( st, 7 ); - j = j + 8; - } - - /* Gains (5b, 6b or 7b / subfr) */ - if ( sfr == 0 || sfr == 2 ) - { - n = ACELP_GAINS_BITS[gains_mode]; - prm[j++] = get_next_indice( st, n ); - } - } - st->rf_indx_tbeGainFr = get_next_indice( st, 2 ); - } - } - - /*--------------------------------------------------------------------------------* - * TCX20/10 parameters - *--------------------------------------------------------------------------------*/ - - if ( ( core == TCX_20_CORE || core == TCX_10_CORE ) && st->use_partial_copy == 0 ) - { - getTCXparam_ivas( st, st, hm_cfg, param, bits_common, start_bit_pos, NULL, NULL, NULL, -1 ); - } - - if ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy == 1 ) - { - /* classification */ - ind = get_next_indice( st, 2 ); - st->clas_dec = ONSET; - if ( ind == 0 ) - { - st->clas_dec = UNVOICED_CLAS; - } - else if ( ind == 1 ) - { - if ( st->last_good >= VOICED_TRANSITION ) - { - st->clas_dec = VOICED_TRANSITION; - } - else - { - st->clas_dec = UNVOICED_TRANSITION; - } - } - else if ( ind == 2 ) - { - st->clas_dec = VOICED_CLAS; - } - - if ( st->rf_frame_type == RF_TCXFD ) - { - /* TCX Gain */ - hTcxDec->old_gaintcx_bfi_float = get_next_indice( st, NBITS_TCX_GAIN ); - } - else - { - /* LTP data */ - if ( hTcxLtpDec->tcxltp ) - { - if ( st->rf_frame_type == RF_TCXTD2 || st->rf_frame_type == RF_TCXTD1 ) - { - prm_ltp[0] = 1; /* LTP active*/ - prm_ltp[1] = get_next_indice( st, 9 ); - prm_ltp[2] = 3; /* max ampl. quantizer output (2bits), anyway not used later*/ - - if ( !st->prev_bfi ) - { - st->BER_detect = st->BER_detect | - tcx_ltp_decode_params_flt( &prm_ltp[0], &( hTcxLtpDec->tcxltp_pitch_int ), &( hTcxLtpDec->tcxltp_pitch_fr ), &( hTcxLtpDec->tcxltp_gain_float ), st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max ); - - hTcxDec->tcxltp_last_gain_unmodified_float = hTcxLtpDec->tcxltp_gain_float; - } - } - } - } - } - - if ( !st->use_partial_copy ) - { - if ( *total_nbbits - bitsRead[0] < ( st->next_bit_pos - start_bit_pos ) ) - { - st->BER_detect = 1; - st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; - } - bitsRead[0] = st->next_bit_pos - start_bit_pos; - } - return; -} -#endif diff --git a/lib_dec/dec_prm_fx.c b/lib_dec/dec_prm_fx.c index 194e6bba6..73edd3b3b 100644 --- a/lib_dec/dec_prm_fx.c +++ b/lib_dec/dec_prm_fx.c @@ -11,7 +11,6 @@ #include "stl.h" #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * getLPCparam_ivas() * @@ -1743,4 +1742,3 @@ void dec_prm_fx( return; } -#endif diff --git a/lib_dec/dec_tcx.c b/lib_dec/dec_tcx.c index 3481c797d..ae0474f3d 100644 --- a/lib_dec/dec_tcx.c +++ b/lib_dec/dec_tcx.c @@ -49,1511 +49,19 @@ #include "ivas_prot_fx.h" #include "debug.h" -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * decoder_tcx() - * - * - *-----------------------------------------------------------------*/ - -void decoder_tcx( - Decoder_State *st, /* i/o: coder memory state */ - int16_t prm[], /* i : parameters */ - float A[], /* i : coefficients NxAz[M+1] */ - Word16 Aind[], /* i : frame-independent coefficients Az[M+1] */ - float synth[], /* i/o: synthesis @internal_FS */ - float synthFB[], /* i/o: synthesis @output_FS */ - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t frame_cnt, /* i : frame counter in the super frame */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - float x[N_MAX]; - float gainlpc2[FDNS_NPTS]; - float gain_tcx; - int16_t fUseTns, L_frame_glob, L_frameTCX_glob; - STnsData tnsData; - int16_t tcx_offset, tcx_offsetFB, L_frame, L_frameTCX; - int16_t left_rect, L_spec, tmp_concealment_method, nf_seed; - const int16_t *prm_sqQ; - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - - L_spec = st->hTcxCfg->tcx_coded_lines; - L_frame_glob = st->L_frame; - L_frameTCX_glob = st->hTcxDec->L_frameTCX; - if ( st->core == TCX_10_CORE ) - { - L_spec /= 2; - L_frame_glob /= 2; - L_frameTCX_glob /= 2; - } - - tmp_concealment_method = 0; - nf_seed = 0; - fUseTns = 0; /* flag that is set if TNS data is present */ - - set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); - - init_tcx_info( st, L_frame_glob, L_frameTCX_glob, frame_cnt, bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); - - decoder_tcx_invQ( st, prm, A, Aind, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &xn_buf[0], &fUseTns, &tnsData, &gain_tcx, &prm_sqQ, &nf_seed, bfi, frame_cnt ); - - decoder_tcx_noisefilling( st, NULL, A, L_frameTCX_glob, L_spec, L_frame, L_frameTCX, &x[0], &gainlpc2[0], &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, 0, frame_cnt ); - - decoder_tcx_noiseshaping_igf( st, L_spec, L_frame, L_frameTCX, left_rect, &x[0], &gainlpc2[0], &tmp_concealment_method, bfi ); - - decoder_tcx_tns( st, L_frame_glob, L_spec, L_frame, L_frameTCX, &x[0], fUseTns, &tnsData, bfi, frame_cnt, 0 ); - - decoder_tcx_imdct( st, L_frame_glob, L_frameTCX_glob, L_spec, tcx_offset, tcx_offsetFB, L_frame, L_frameTCX, left_rect, &x[0], &xn_buf[0], MDCT_IV, - fUseTns, &synth[0], &synthFB[0], bfi, frame_cnt, sba_dirac_stereo_flag ); - - return; -} - -#endif -/*-------------------------------------------------------------------* - * decoder_tcx_post() - * - * - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decoder_tcx_post( - Decoder_State *st, /* i/o: decoder memory state */ - float *synth, /* i/o: synthesis */ - float *synthFB, /* i/o: FB synthesis */ - float *A, /* i : A(z) filter coefficients */ - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t i; - float level_syn, gainCNG = 0.0f, step; - float xn_buf[L_FRAME_MAX]; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - /* TCX output */ - mvr2r( synth, xn_buf, st->L_frame ); - - /* first TCX frame after ACELP; overwrite ltp initialization done during acelp PLC */ - if ( !bfi && st->prev_bfi && !st->last_core ) - { - hTcxDec->tcxltp_last_gain_unmodified_float = 0.0f; - } - - if ( st->hTcxLtpDec != NULL && st->element_mode > EVS_MONO && ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == INACTIVE_CLAS ) ) - { - /* deactivate TCX LTP for non-voiced frames */ - st->hTcxLtpDec->tcxltp = 0; - st->hTcxLtpDec->tcxltp_gain_float = 0.0f; - } - - if ( bfi && !st->use_partial_copy ) - { - /* run lpc gain compensation not for waveform adjustment */ - if ( !st->enablePlcWaveadjust || ( st->hPlcInfo != NULL && st->hPlcInfo->concealment_method == TCX_TONAL ) ) - { - float gainHelperFB = hTcxDec->gainHelper_float; - float stepCompensateFB = hTcxDec->stepCompensate_float * st->L_frame / hTcxDec->L_frameTCX; - - for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) - { - synthFB[i] *= gainHelperFB; - gainHelperFB -= stepCompensateFB; - } - } - - for ( i = 0; i < st->L_frame; i++ ) - { - xn_buf[i] *= hTcxDec->gainHelper_float; - hTcxDec->gainHelper_float -= hTcxDec->stepCompensate_float; - } - } - - /* PLC: [TCX: Fade-out] - * PLC: estimate and update CNG energy */ - level_syn = (float) sqrt( ( dotp( synthFB, synthFB, hTcxDec->L_frameTCX ) ) / hTcxDec->L_frameTCX ); - - /* PLC: [TCX: Fade-out] - * PLC: update or retrieve the background level */ - if ( bfi == 0 && st->tcxonly && ( st->element_mode != IVAS_CPE_MDCT || MCT_flag ) && st->clas_dec == UNVOICED_CLAS ) - { - minimumStatistics( hTcxDec->NoiseLevelMemory_bfi, &hTcxDec->NoiseLevelIndex_bfi, &hTcxDec->CurrLevelIndex_bfi, &hTcxDec->CngLevelBackgroundTrace_bfi, &hTcxDec->LastFrameLevel_bfi, level_syn, PLC_MIN_CNG_LEV_FLT, PLC_MIN_STAT_BUFF_SIZE ); - } - - /* PLC: [TCX: Fade-out] - * PLC: fade-out in time domain */ - if ( bfi ) - { - float conceal_eof_gainFB; - - if ( st->tcxonly ) - { - gainCNG = hTcxDec->CngLevelBackgroundTrace_bfi / ( level_syn + 0.01f ); - - if ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) - { - if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME + MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN ) - { - gainCNG = 0.f; - } - else if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME ) - { - gainCNG *= 1.f - (float) ( st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME ) / MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN; - } - } - } - else - { - gainCNG = st->cngTDLevel_float / ( level_syn + 0.01f ); - } - if ( st->nbLostCmpt == 1 ) - { - hTcxDec->conceal_eof_gain_float = 1.0f; - } - - step = ( hTcxDec->conceal_eof_gain_float - ( hTcxDec->conceal_eof_gain_float * hTcxDec->damping_float + gainCNG * ( 1 - hTcxDec->damping_float ) ) ) / st->L_frame; - { - float stepFB = step * st->L_frame / hTcxDec->L_frameTCX; - conceal_eof_gainFB = hTcxDec->conceal_eof_gain_float; - - for ( i = 0; i < hTcxDec->L_frameTCX; i++ ) - { - synthFB[i] *= conceal_eof_gainFB; - conceal_eof_gainFB -= stepFB; - } - } - - for ( i = 0; i < st->L_frame; i++ ) - { - xn_buf[i] *= hTcxDec->conceal_eof_gain_float; - hTcxDec->conceal_eof_gain_float -= step; - } - - /* run lpc gain compensation not for waveform adjustment */ - if ( st->hPlcInfo != NULL ) - { - if ( ( !st->enablePlcWaveadjust || st->hPlcInfo->concealment_method == TCX_TONAL ) && !st->use_partial_copy ) - { - st->hPlcInfo->recovery_gain_float = conceal_eof_gainFB * st->last_concealed_gain_syn_deemph_float; - } - else - { - st->hPlcInfo->recovery_gain_float = conceal_eof_gainFB; - } - st->hPlcInfo->step_concealgain = step * st->L_frame / hTcxDec->L_frameTCX; - } - } - - - /*-----------------------------------------------------------* - * Memory update * - *-----------------------------------------------------------*/ - - /* Update synth, exc and old_Aq */ - tcx_decoder_memory_update_flt( st, xn_buf, synth, A ); - - - /* PLC: [TCX: Memory update] */ - st->old_pitch_buf[0] = st->old_pitch_buf[st->nb_subfr]; - st->old_pitch_buf[1] = st->old_pitch_buf[st->nb_subfr + 1]; - mvr2r( &st->old_pitch_buf[st->nb_subfr + 2], &st->old_pitch_buf[2], st->nb_subfr ); - set_f( &st->old_pitch_buf[st->nb_subfr + 2], st->old_fpitch_float, st->nb_subfr ); - st->bfi_pitch = st->old_fpitch_float; - st->bfi_pitch_frame = st->L_frame; - - st->mem_pitch_gain_float[2 * st->nb_subfr + 1] = st->mem_pitch_gain_float[st->nb_subfr + 1]; - st->mem_pitch_gain_float[2 * st->nb_subfr] = st->mem_pitch_gain_float[st->nb_subfr]; - - for ( i = 0; i < st->nb_subfr; i++ ) - { - st->mem_pitch_gain_float[2 * st->nb_subfr - 1 - i] = st->mem_pitch_gain_float[st->nb_subfr - 1 - i]; - st->mem_pitch_gain_float[st->nb_subfr - 1 - i] = hTcxDec->tcxltp_last_gain_unmodified_float; - } - - return; -} - - -/*-------------------------------------------------------------------* - * IMDCT() - * - * - *-------------------------------------------------------------------*/ -void IMDCT( - float *x, - float *old_syn_overl, - float *syn_Overl_TDAC, - float *xn_buf, - const float *tcx_aldo_window_1_trunc, - const float *tcx_aldo_window_2, - const float *tcx_mdct_window_half, - const float *tcx_mdct_window_minimum, - const float *tcx_mdct_window_trans, - const int16_t tcx_mdct_window_half_length, - const int16_t tcx_mdct_window_min_length, - int16_t index, - const uint16_t kernel_type, /* i : TCX transform kernel type */ - const int16_t left_rect, - const int16_t tcx_offset, - const int16_t overlap, - const int16_t L_frame, - const int16_t L_frameTCX, - const int16_t L_spec_TCX5, - const int16_t L_frame_glob, - const int16_t frame_cnt, - const int16_t bfi, - float *old_out, - const int16_t FB_flag, - Decoder_State *st, - const int16_t fullbandScale, - float *acelp_zir ) -{ - int16_t i, nz, aldo, w, L_win, L_ola; - float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - - aldo = 0; - - /* number of zero for ALDO windows*/ - nz = NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) * L_frame / L_frameTCX; - - if ( st->element_mode != EVS_MONO && frame_cnt == 0 && !bfi && st->prev_bfi && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && !hTcxCfg->last_aldo ) - { - v_multc( old_syn_overl, hTcxDec->conceal_eof_gain_float * st->last_concealed_gain_syn_deemph_float, old_syn_overl, overlap ); - } - - if ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && st->tcxonly ) - { - /* Mode decision in PLC - - last OL curr OL left TCX-10 right TCX-10 - ------------------------------------------------------------- - 0 0 2x TCX-5* 1x TCX-10 - 0 2 1x TCX-10 1x TCX-10 - 0 3 1x TCX-10 1x TCX-10 - 2 0 2x TCX-5 1x TCX-10 - 2 2 2x TCX-5 2x TCX-5 - 2 3 2x TCX-5 2x TCX-5 - 3 0 2x TCX-5 1x TCX-10 - 3 2 2x TCX-5 2x TCX-5 - 3 3 2x TCX-5 2x TCX-5 - */ - - if ( ( !bfi && hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || ( bfi && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) ) - { - /* minimum or half overlap, two transforms, grouping into one window */ - L_win = L_frame >> 1; - L_ola = ( hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? tcx_mdct_window_min_length : tcx_mdct_window_half_length; - - set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); - set_zero( xn_buf, tcx_offset + ( L_ola >> 1 ) ); /* zero left end of buffer */ - - for ( w = 0; w < 2; w++ ) - { - if ( kernel_type == MDST_IV || ( kernel_type & w ) ) - { - TCX_MDST_Inverse_flt( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - else if ( kernel_type != 0 && w == 0 ) /* type 1 or 2 */ - { - - TCX_MDXT_Inverse_flt( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, kernel_type ); - } - else - { - TCX_MDCT_Inverse_flt( x + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - - tcx_windowing_synthesis_current_frame_flt( win, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, ( w > 0 ) ? 0 : left_rect, ( w > 0 ) || ( w == 0 && index == 2 ) ? MIN_OVERLAP : hTcxCfg->tcx_last_overlap_mode, acelp_zir, hTcxDec->old_syn_Overl_float, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, ( w > 0 ) || ( frame_cnt > 0 ) ? 1 : st->last_core, ( w > 0 ) || ( frame_cnt > 0 ) ? 0 : st->last_is_cng, fullbandScale ); - - if ( w > 0 ) - { - tcx_windowing_synthesis_past_frame_flt( xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, MIN_OVERLAP ); - } - - /* add part of current sub-window overlapping with previous window */ - v_add( win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, L_ola ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_ola, xn_buf + tcx_offset + ( L_ola >> 1 ) + w * L_win, L_win ); - } - - /* To assure that no garbage values are passed to overlap */ - set_zero( xn_buf + L_frame + tcx_offset + ( L_ola >> 1 ), overlap - tcx_offset - ( L_ola >> 1 ) ); - - if ( st->prev_bfi && frame_cnt == 0 && st->last_core != st->last_core_bfi && st->last_core_bfi == ACELP_CORE ) - { - tcx_windowing_synthesis_past_frame_flt( old_syn_overl, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, hTcxCfg->tcx_last_overlap_mode ); - v_add( xn_buf, old_syn_overl, xn_buf, overlap ); - } - } - else if ( !bfi && ( frame_cnt == 0 ) && ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) - - { - /* special overlap attempt, two transforms, grouping into one window */ - L_win = L_frame >> 1; - L_ola = tcx_mdct_window_min_length; - - set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); - - /* 1st TCX-5 window, special MDCT with minimum overlap on right side */ - if ( kernel_type == MDST_IV ) - { - TCX_MDST_Inverse_flt( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); - } - else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ - { - TCX_MDXT_Inverse_flt( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, kernel_type ); - } - else - { - TCX_MDCT_Inverse_flt( x, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); - } - - set_zero( xn_buf, ( overlap >> 1 ) ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_win, xn_buf + ( overlap >> 1 ), L_win + ( L_ola >> 1 ) ); - - /* 2nd TCX-5 window, regular MDCT with minimum overlap on both sides */ - if ( kernel_type & 1 ) - { - TCX_MDST_Inverse_flt( x + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - else - { - TCX_MDCT_Inverse_flt( x + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - - tcx_windowing_synthesis_current_frame_flt( win, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, 0, - /* left_rect */ MIN_OVERLAP, /* left_mode */ acelp_zir, hTcxDec->old_syn_Overl_float, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_win, tcx_offset < 0 ? -tcx_offset : 0, 1, /* st->last_mode_bfi */ 0, /* st->last_is_cng */ fullbandScale ); - - tcx_windowing_synthesis_past_frame_flt( xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, L_ola, tcx_mdct_window_half_length, tcx_mdct_window_min_length, 2 ); - - /* add part of current sub-window overlapping with previous window */ - v_add( win, xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), L_ola ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_ola, xn_buf + ( overlap >> 1 ) + L_win + ( L_ola >> 1 ), L_win ); - - /* extra folding-out on left side of win, for perfect reconstruction */ - if ( kernel_type >= MDCT_II ) - { - for ( w = ( overlap >> 1 ); w < overlap; w++ ) - { - xn_buf[overlap - 1 - w] = xn_buf[w]; - } - } - else - { - for ( w = ( overlap >> 1 ); w < overlap; w++ ) - { - xn_buf[overlap - 1 - w] = -1.0f * xn_buf[w]; - } - } - tcx_windowing_synthesis_current_frame_flt( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, 0, /* left_mode */ acelp_zir, hTcxDec->old_syn_Overl_float, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, 2 * L_win, tcx_offset < 0 ? -tcx_offset : 0, st->last_core_bfi, st->last_is_cng, fullbandScale ); - } - else - { - /* default, i.e. maximum overlap, single transform, no grouping */ - if ( kernel_type == MDST_IV ) - { - TCX_MDST_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - } - else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ - { - TCX_MDXT_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, kernel_type ); - } - else - { - TCX_MDCT_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - } - - tcx_windowing_synthesis_current_frame_flt( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, !bfi && ( frame_cnt > 0 ) && ( index == 0 ) && ( st->last_core != ACELP_CORE ) ? MIN_OVERLAP : index, acelp_zir, hTcxDec->old_syn_Overl_float, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_frame_glob >> 1, tcx_offset < 0 ? -tcx_offset : 0, ( frame_cnt > 0 /*|| (st->last_con_tcx )*/ ) ? 1 : st->last_core_bfi, ( frame_cnt > 0 ) ? 0 : st->last_is_cng, fullbandScale ); - - } /* tcx_last_overlap_mode != FULL_OVERLAP */ - } - else - { - /* frame is TCX-20 or not TCX-only */ - assert( frame_cnt == 0 ); - if ( hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - float tmp[L_FRAME_PLUS]; - if ( kernel_type != MDCT_IV ) /* inverse transform */ - { - if ( kernel_type == MDST_IV ) - { - edst( x, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); - } - else /* type 1 or 2 */ - { - edxt( x, xn_buf + overlap / 2 + nz, L_frame, kernel_type, TRUE ); - } - v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); - window_ola_ext( tmp, xn_buf, old_out, L_frame, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, kernel_type ); - } - else - { - edct( x, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); - - v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); - window_ola( tmp, xn_buf, old_out, L_frame, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); - } - aldo = 1; - } - else - { - int16_t acelp_mem_len = tcx_offset < 0 ? -tcx_offset : 0; - - if ( kernel_type == MDST_IV ) - { - TCX_MDST_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - } - else if ( kernel_type != MDCT_IV ) /* type 1 or 2 */ - { - TCX_MDXT_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, kernel_type ); - } - else - { - TCX_MDCT_Inverse_flt( x, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - } - - /*-----------------------------------------------------------* - * Windowing, overlap and add * - *-----------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_MDCT && ( st->last_core_brate <= SID_2k40 || st->last_core == ACELP_CORE ) && !fullbandScale ) - { - float buf[L_FRAME_MAX / 4]; - const int16_t analysis_len = L_frame_glob / 4; - - /* get the first 5 ms of non-aliased TCX syntesis */ - mvr2r( xn_buf + overlap / 2 + 2 * acelp_mem_len, &buf[0], analysis_len ); - - /* get LPC from that signal part to use for acelp zir smoothing */ - - float window_buf[L_FRAME_MAX / 4]; - float r[M + 1]; - ham_cos_window_flt( &window_buf[0], analysis_len / 2, analysis_len / 2 ); - autocorr( &buf[0], &r[0], M, analysis_len, &window_buf[0], 0, 0, 0 ); - lag_wind_flt( r, M, L_frame_glob * FRAMES_PER_SEC, LAGW_STRONG ); - lev_dur( &st->old_Aq_12_8[0], &r[0], M, NULL ); - } - - /* Window current frame */ - tcx_windowing_synthesis_current_frame_flt( xn_buf, tcx_aldo_window_2, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, left_rect, hTcxCfg->tcx_last_overlap_mode, acelp_zir, hTcxDec->old_syn_Overl_float, syn_Overl_TDAC, st->old_Aq_12_8, tcx_mdct_window_trans, L_frame_glob >> 1, acelp_mem_len, st->last_core_bfi, st->last_is_cng, fullbandScale ); - } - } /* TCX-20 and TCX-only */ - - /* Window and overlap-add past frame if past frame is TCX */ - if ( ( frame_cnt != 0 ) || ( st->last_core_bfi > ACELP_CORE ) ) - { - if ( ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && ( st->tcxonly ) ) || - ( hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) - { - if ( !bfi && ( frame_cnt > 0 ) && ( index == 0 ) && ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( st->last_core != ACELP_CORE ) ) - { - index = MIN_OVERLAP; /* use minimum overlap between the two TCX-10 windows */ - } - - if ( hTcxCfg->last_aldo ) - { - for ( i = 0; i < overlap - tcx_mdct_window_min_length; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz]; - } - - /* fade truncated ALDO window */ - if ( L_frameTCX == hTcxDec->L_frameTCX >> 1 && st->element_mode == IVAS_CPE_MDCT && frame_cnt == 0 && hTcxCfg->tcx_last_overlap_mode == FULL_OVERLAP ) - { - for ( ; i < overlap; i++ ) /* perfectly reconstructing ALDO shortening */ - { - xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz]; - } - for ( i = 0; i < tcx_mdct_window_min_length; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset + overlap] += old_out[i + nz + overlap] * tcx_mdct_window_minimum[tcx_mdct_window_min_length - 1 - i]; - } - } - else - { - for ( ; i < overlap; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset] += old_out[i + nz] * tcx_mdct_window_minimum[overlap - 1 - i]; - } - } - } - else - { - tcx_windowing_synthesis_past_frame_flt( old_syn_overl, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, ( index == 0 || hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? hTcxCfg->tcx_last_overlap_mode : index ); - - if ( bfi ) - { - for ( i = 0; i < tcx_mdct_window_half_length; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset] += old_syn_overl[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; - } - } - else if ( !left_rect ) - { - for ( i = 0; i < overlap; i++ ) - { - xn_buf[i] += old_syn_overl[i]; - } - } - else - { - for ( i = 0; i < overlap; i++ ) - { - xn_buf[i + ( overlap >> 1 )] += old_syn_overl[i]; - } - } - } - } - } - - if ( !aldo && ( ( ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && frame_cnt > 0 ) || L_frameTCX != ( hTcxDec->L_frameTCX >> 1 ) ) ) - { - /* Compute windowed synthesis in case of switching to ALDO windows in next frame */ - mvr2r( xn_buf + L_frame - nz, old_out, nz + overlap ); - set_zero( old_out + nz + overlap, nz ); - - tcx_windowing_synthesis_past_frame_flt( old_out + nz, tcx_aldo_window_1_trunc, tcx_mdct_window_half, tcx_mdct_window_minimum, overlap, tcx_mdct_window_half_length, tcx_mdct_window_min_length, hTcxCfg->tcx_curr_overlap_mode ); - - /* If current overlap mode = FULL_OVERLAP -> ALDO_WINDOW */ - if ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) - { - if ( kernel_type & 1 ) - { - for ( i = 0; i < nz; i++ ) - { - old_out[nz + overlap + i] = -1.0f * xn_buf[L_frame - 1 - i] * tcx_aldo_window_1_trunc[-1 - i]; - } - } - else - { - for ( i = 0; i < nz; i++ ) - { - old_out[nz + overlap + i] = xn_buf[L_frame - 1 - i] * tcx_aldo_window_1_trunc[-1 - i]; - } - } - aldo = 1; - } - } - - if ( FB_flag ) - { - hTcxCfg->last_aldo = aldo; - } - - /* Smoothing between the ACELP PLC and TCX Transition frame. Using the shape of the half overlap window for the crossfading. */ - if ( left_rect && ( frame_cnt == 0 ) && ( st->last_core_bfi == ACELP_CORE ) && st->prev_bfi ) - { - if ( FB_flag ) - { - for ( i = 0; i < tcx_mdct_window_half_length; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset] *= tcx_mdct_window_half[i]; - xn_buf[i + overlap / 2 - tcx_offset] += hTcxDec->syn_OverlFB_float[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; - } - } - else - { - for ( i = 0; i < tcx_mdct_window_half_length; i++ ) - { - xn_buf[i + overlap / 2 - tcx_offset] *= tcx_mdct_window_half[i]; - xn_buf[i + overlap / 2 - tcx_offset] += hTcxDec->syn_Overl_float[i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i] * tcx_mdct_window_half[tcx_mdct_window_half_length - 1 - i]; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * decoder_tcx_invQ - * - * TCX: inverse quantization - *-------------------------------------------------------------------*/ - -void decoder_tcx_invQ( - Decoder_State *st, /* i/o: coder memory state */ - int16_t prm[], /* i : parameters */ - float A[], /* i : coefficients NxAz[M+1] */ - Word16 Aind[], /* i : frame-independent coefficients Az[M+1] */ - const int16_t L_spec, - const int16_t L_frame, - const int16_t L_frameTCX, - float x[], - float gainlpc2[], - float xn_buf[], - int16_t *fUseTns, /* o : flag that is set if TNS data is present */ - STnsData *tnsData, - float *gain_tcx, - const int16_t **prm_sqQ1, - int16_t *nf_seed, - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t frame_cnt /* i : frame counter in the super frame */ -) -{ - int16_t i, index; - int16_t start_zeroing; - float Ap[M + 2]; - - int16_t noiseFillingSize; - int16_t tnsSize; /* number of tns parameters put into prm */ - - float gamma1; - float gamma; - float gainCompensate = 1.f; - float h1[L_FRAME_MAX / 4 + 1]; - float mem[M]; - float tmp2; - int16_t arith_bits, signaling_bits; - const int16_t *prm_ltp, *prm_tns, *prm_hm, *prm_sqQ, *prm_target; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - - tnsSize = 0; - prm_target = NULL; /* just to suppress MSVC warnigs */ - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - /* Init lengths */ - gamma1 = st->gamma_float; - - if ( hTcxDec->enableTcxLpc ) - { - gamma1 = 1.0f; - } - - noiseFillingSize = L_spec; - if ( st->igf ) - { - noiseFillingSize = st->hIGFDec->infoIGFStartLine; - } - - prm_ltp = &prm[1 + NOISE_FILL_RANGES]; - prm_tns = prm_ltp + LTPSIZE; - - /*-----------------------------------------------------------* - * Read TCX parameters * - *-----------------------------------------------------------*/ - - index = 0; - - if ( !bfi ) - { - index = prm[0]; - - /* read noise level (fac_ns) */ - st->hTcxDec->noise_filling_index[frame_cnt] = prm[1]; - } - - /* read TNS data */ - if ( !bfi && hTcxCfg->fIsTNSAllowed ) - { - *fUseTns = DecodeTnsData_ivas( hTcxCfg->pCurrentTnsConfig, prm_tns, &tnsSize, tnsData ); - } - else - { - *fUseTns = 0; - } - - prm_hm = prm_tns + tnsSize; - prm_sqQ = prm_hm + NPRM_CTX_HM; - *prm_sqQ1 = prm_sqQ; - - /*-----------------------------------------------------------* - * Spectrum data * - *-----------------------------------------------------------*/ - - if ( !bfi ) - { - /*-----------------------------------------------------------* - * Context HM * - *-----------------------------------------------------------*/ - - if ( hTcxCfg->ctx_hm && ( ( st->last_core_from_bs != ACELP_CORE ) || ( frame_cnt > 0 ) ) ) - { - st->last_ctx_hm_enabled = prm_hm[0]; - - for ( i = 0; i < L_spec; i++ ) - { - /* no context harmonic model, copy MDCT coefficients to x */ - x[i] = (float) prm_sqQ[i]; - } - } - else /* hTcxCfg->ctx_hm == 0 */ - { - if ( hTcxDec->tcx_lpc_shaped_ari ) /* low rates: envelope based arithmetic coder */ - { - prm_target = prm_sqQ; - prm_sqQ = prm_target + 1; - - tcx_arith_decode_envelope( st, x, L_frame, L_spec, Aind, *prm_target, prm_sqQ, st->last_core_from_bs != ACELP_CORE, prm_hm, /* HM parameter area */ hTcxDec->tcx_hm_LtpPitchLag, &arith_bits, &signaling_bits, ( st->bwidth > WB ) ? 1 : 0 ); - - hTcxDec->resQBits[frame_cnt] = *prm_target - arith_bits; - - /* Noise filling seed */ - for ( i = 0; i < noiseFillingSize; ++i ) - { - *nf_seed += (int16_t) ( abs( (int16_t) x[i] ) * i * 2 ); - } - } - else /* TCX-only: context based arithmetic coder */ - { - for ( i = 0; i < L_spec; i++ ) - { - x[i] = (float) prm_sqQ[i]; - } - - for ( i = L_spec; i < L_frameTCX; i++ ) - { - x[i] = 0.0f; - } - } - - } /* else of if hTcxCfg->ctx_hm */ - - start_zeroing = ( st->last_core != st->last_core_from_bs ) ? min( L_spec, L_frame ) : L_spec; - - if ( frame_cnt == 0 && st->last_core == ACELP_CORE && st->last_core_from_bs != ACELP_CORE ) - { - int16_t L_spec_con = L_spec + ( st->hTcxCfg->tcx_coded_lines >> 2 ); - - for ( i = start_zeroing; i < L_spec_con; i++ ) - { - x[i] = 0.0f; - } - - start_zeroing = L_spec_con; - } - - for ( i = start_zeroing; i < max( L_frame, L_frameTCX ); i++ ) - { - x[i] = 0.0f; - } - - /*-----------------------------------------------------------* - * adaptive low frequency deemphasis. * - *-----------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - weight_a( A, Ap, gamma1, M ); - lpc2mdct_flt( Ap, M, gainlpc2, FDNS_NPTS, 0 ); - } - - /* initialize LF deemphasis factors in xn_buf */ - if ( !st->tcxonly || ( hTcxCfg->resq && hTcxDec->tcx_lpc_shaped_ari ) ) - { - for ( i = 0; i < max( L_spec, L_frameTCX ); i++ ) - { - xn_buf[i] = 1.0f; - } - } - - if ( !st->tcxonly ) - { - AdaptLowFreqDeemph_flt( x, hTcxDec->tcx_lpc_shaped_ari, gainlpc2, L_frame, xn_buf /* LF deemphasis factors */ ); - } - } - - hTcxDec->damping_float = 0.f; - - if ( bfi == 0 ) - { - /*-----------------------------------------------------------* - * Compute global gain * - *-----------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO ) - { - float ener; - - /*To be in sync with encoder gain computating*/ - ener = (float) sqrt( (float) L_spec / (float) NORM_MDCT_FACTOR ); - *gain_tcx = (float) pow( 10.0f, ( (float) index ) / 28.0f ) / ener; - } - else - { - *gain_tcx = (float) pow( 10.0f, index / 28.0f ) * (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); - } - - hTcxDec->old_gaintcx_bfi_float = *gain_tcx; - - hTcxDec->cummulative_damping_tcx_float = 1.0f; - } - else /* bfi = 1 */ - { - /* PLC: [TCX: Fade-out] - * derivation of damping factor */ - if ( st->use_partial_copy ) - { - if ( st->rf_frame_type == RF_TCXFD ) - { - *gain_tcx = (float) pow( 10.0f, (int16_t) hTcxDec->old_gaintcx_bfi_float / 28.0f ) * (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); - hTcxDec->old_gaintcx_bfi_float = *gain_tcx; - } - else - { - *gain_tcx = hTcxDec->old_gaintcx_bfi_float; - } - - hTcxDec->damping_float = 1; - } - else - { - *gain_tcx = hTcxDec->old_gaintcx_bfi_float; - hTcxDec->damping_float = Damping_fact_flt( st->coder_type, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), st->last_core ); - } - - hTcxDec->cummulative_damping_tcx_float *= hTcxDec->damping_float; - } - - if ( bfi ) - { - if ( hTcxDec->envWeighted ) - { - gamma = st->gamma_float; - } - else - { - gamma = gamma1; - } - - /* PLC: [TCX: Fade-out] - * PLC: invert LPC weighting in case of PLC */ - - if ( hTcxDec->enableTcxLpc ) - { - gamma = hTcxDec->cummulative_damping_tcx_float * ( st->gamma_float - 1 ) + 1; - } - else - { - gamma = hTcxDec->cummulative_damping_tcx_float * ( gamma1 - 1 ) + 1; - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - weight_a( A, Ap, gamma, M ); - lpc2mdct_flt( Ap, M, gainlpc2, FDNS_NPTS, 0 ); - } - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - tmp2 = 0; - set_zero( h1, L_SUBFR + 1 ); - set_zero( mem, M ); - h1[0] = 1.0f; - syn_filt( Ap, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ - deemph( h1, st->preemph_fac_float, L_SUBFR, &tmp2 ); /* impulse response of deemph */ - } - - /* impulse response level = gain introduced by synthesis+deemphasis */ - if ( !bfi ) - { - if ( st->element_mode == IVAS_CPE_MDCT ) - { - st->last_gain_syn_deemph_float = 0.0; - } - else - { - st->last_gain_syn_deemph_float = (float) sqrt( dotp( h1, h1, L_SUBFR ) ); - } - - /*for avoiding compiler warnings*/ - hTcxDec->gainHelper_float = 1.f; - hTcxDec->stepCompensate_float = 0.f; - } - else if ( st->core == TCX_20_CORE || frame_cnt == 1 ) - { - if ( st->element_mode == IVAS_CPE_MDCT ) - { - gainCompensate = 1.0f; - } - else - { - gainCompensate = st->last_gain_syn_deemph_float / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); - } - - if ( st->nbLostCmpt == 1 ) - { - hTcxDec->stepCompensate_float = ( 1.f - gainCompensate ) / st->L_frame; - hTcxDec->gainHelper_float = 1.f; - } - else - { - hTcxDec->stepCompensate_float = ( st->last_concealed_gain_syn_deemph_float - gainCompensate ) / st->L_frame; - hTcxDec->gainHelper_float = st->last_concealed_gain_syn_deemph_float; - } - st->last_concealed_gain_syn_deemph_float = gainCompensate; - } - - /*-----------------------------------------------------------* - * Residual inv. Q. * - *-----------------------------------------------------------*/ - - if ( !bfi && hTcxCfg->resq ) - { - if ( hTcxDec->tcx_lpc_shaped_ari ) - { - /* envelope based arithmetic coder */ - const int16_t *prm_resq; - prm_resq = prm_sqQ + *prm_target /* = targetBits */ - hTcxDec->resQBits[frame_cnt]; - i = tcx_ari_res_invQ_spec_flt( x, L_spec, prm_resq, hTcxDec->resQBits[frame_cnt], 0, hTcxCfg->sq_rounding_flt, xn_buf /* LF deemphasis factors */ ); - } - else - { - /* context based arithmetic coder */ - i = tcx_res_invQ_gain_flt( gain_tcx, &prm_sqQ[L_spec], hTcxDec->resQBits[frame_cnt] ); - tcx_res_invQ_spec_flt( x, L_spec, &prm_sqQ[L_spec], hTcxDec->resQBits[frame_cnt], i, hTcxCfg->sq_rounding_flt, st->tcxonly ? NULL : xn_buf /* LF deemphasis factors */ ); - } - } - - if ( !bfi && st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) - { - if ( hTcxLtpDec->tcxltp && ( hTcxLtpDec->tcxltp_gain_float > 0.0f ) && !( *fUseTns ) ) - { - PsychAdaptLowFreqDeemph_flt( x, gainlpc2, NULL ); - } - } - - if ( !bfi && !st->tcxonly ) - { - /* Replication of ACELP formant enhancement for low rates */ - if ( st->total_brate < ACELP_13k20 ) - { - if ( st->element_mode == IVAS_CPE_MDCT ) - { - assert( !"Not adapted to warped scale" ); - } - tcxFormantEnhancement_flt( xn_buf, gainlpc2, x, L_frame ); - } - } - - /*-----------------------------------------------------------* - * Add gain to the lpc gains * - *-----------------------------------------------------------*/ - - if ( st->VAD == 0 ) - { - *gain_tcx *= hTcxCfg->na_scale_flt; - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - v_multc( gainlpc2, *gain_tcx, gainlpc2, FDNS_NPTS ); - } - - return; -} - -/*-------------------------------------------------------------------* - * decoder_tcx_noisefilling() - * - * TCX: core noise filling, IGF updates - *-------------------------------------------------------------------*/ - -void decoder_tcx_noisefilling( - Decoder_State *st, /* i/o: coder memory state */ - float concealment_noise[L_FRAME48k], - const float A[], /* i : coefficients NxAz[M+1] */ - const int16_t L_frameTCX_glob, - const int16_t L_spec, - const int16_t L_frame, - const int16_t L_frameTCX, - float x[], - float gainlpc2[], - int16_t *temp_concealment_method, - const float gain_tcx, - const int16_t *prm_sqQ, - int16_t nf_seed, - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t MCT_flag, - const int16_t frame_cnt /* i : frame counter in the super frame*/ -) -{ - int16_t i; - int16_t firstLine; - float fac_ns; - int16_t noiseFillingSize; - int16_t noiseTransWidth = MIN_NOISE_FILLING_HOLE; - float tmp2; - int32_t sum_word32; - int16_t infoIGFStartLine; - float f, noiseTiltFactor, smooth_gain; - float E_2ndlast, E_last; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - int32_t total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ); - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - /* Init lengths */ - infoIGFStartLine = get_igf_startline_flt( st, L_frame, L_frameTCX ); - - noiseFillingSize = L_spec; - if ( st->igf ) - { - noiseFillingSize = st->hIGFDec->infoIGFStartLine; - } - - fac_ns = (float) hTcxDec->noise_filling_index[frame_cnt] * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); - - /*-----------------------------------------------------------* - * Noise filling. * - *-----------------------------------------------------------*/ - - if ( !bfi && ( fac_ns > 0.0f ) ) - { - firstLine = tcxGetNoiseFillingTilt_flt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_flag ), &noiseTiltFactor ); - - if ( st->tcxonly ) - { - if ( st->element_mode == IVAS_CPE_MDCT ) - { - if ( frame_cnt == 0 ) - { - mvr2r( hTcxDec->ltpGainMemory, &hTcxDec->ltpGainMemory[1], N_LTP_GAIN_MEMS - 1 ); - hTcxDec->ltpGainMemory[0] = hTcxLtpDec->tcxltp_gain_float; - } - - smooth_gain = dotp( hTcxDec->ltpGainMemory, nf_tw_smoothing_coeffs, N_LTP_GAIN_MEMS ); - noiseTransWidth = HOLE_SIZE_FROM_LTP_FLT( max( smooth_gain, ( hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) ? 0.3125f * st->last_ctx_hm_enabled : 0 ) ); - } - else - { - noiseTransWidth = HOLE_SIZE_FROM_LTP_FLT( max( hTcxLtpDec->tcxltp_gain_float, ( hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) ? 0.3125f * st->last_ctx_hm_enabled : 0 ) ); - } - - if ( L_frame == st->L_frame >> 1 ) - { - noiseTransWidth = 3; /* minimum transition fading for noise filling in TCX-10 */ - } - } - - if ( !hTcxDec->tcx_lpc_shaped_ari ) - { - for ( i = 0; i < L_spec; i++ ) - { - nf_seed += (int16_t) ( abs( prm_sqQ[i] ) * i * 2 ); - } - } - tcx_noise_filling_flt( x, nf_seed, firstLine, noiseFillingSize, noiseTransWidth, L_frame, noiseTiltFactor, fac_ns, st->igf ? st->hIGFDec->infoTCXNoise_ptr : NULL, st->element_mode ); - - st->seed_tcx_plc = nf_seed; - } - - if ( st->enablePlcWaveadjust ) - { - if ( bfi ) - { - if ( st->nbLostCmpt == 1 ) - { - st->hPlcInfo->concealment_method = TCX_NONTONAL; - - /* tonal/non-tonal decision */ - if ( st->hPlcInfo->Transient[0] == 1 && st->hPlcInfo->Transient[1] == 1 && st->hPlcInfo->Transient[2] == 1 ) - { - sum_word32 = 0; - - for ( i = 9; i >= 0; i-- ) - { - sum_word32 += st->hPlcInfo->TCX_Tonality[i]; - } - - if ( sum_word32 >= 6 ) - { - st->hPlcInfo->concealment_method = TCX_TONAL; - } - } - - if ( st->tonal_mdct_plc_active ) - { - st->hPlcInfo->concealment_method = TCX_TONAL; - } - } - - if ( L_frameTCX > hTcxDec->L_frameTCX ) - { - st->hPlcInfo->concealment_method = TCX_TONAL; - } - - *temp_concealment_method = st->hPlcInfo->concealment_method; - - if ( st->core == TCX_10_CORE ) - { - *temp_concealment_method = TCX_TONAL; - } - } - - /* get the starting location of the subframe in the frame */ - if ( st->core == TCX_10_CORE ) - { - st->hPlcInfo->subframe = frame_cnt * L_frameTCX_glob; - } - } - - /* PLC: [TCX: Tonal Concealment] */ - /* PLC: [TCX: Fade-out] - * PLC: Fade out to white noise */ - if ( st->hTonalMDCTConc != NULL ) - { - if ( !bfi && st->element_mode != IVAS_CPE_MDCT ) - { - TonalMDCTConceal_SaveFreqSignal_ivas( st->hTonalMDCTConc, x, L_frameTCX, L_frame, gainlpc2, infoIGFStartLine ); - } - else if ( bfi ) - { - - if ( !st->enablePlcWaveadjust || ( *temp_concealment_method == TCX_TONAL ) ) - { - /* set f to 1 to not fade out */ - /* set f to 0 to immediately switch to white noise */ - if ( st->tcxonly && ( st->element_mode != IVAS_CPE_MDCT || MCT_flag ) ) - { - f = 1.0f; - } - else - { - f = hTcxDec->cummulative_damping_tcx_float; - } - - if ( ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && ( st->tcxonly ) && ( !st->tonal_mdct_plc_active ) && ( st->nbLostCmpt == 1 ) && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) - { - E_2ndlast = E_last = EPSILON; - if ( st->element_mode > EVS_MONO ) - { - for ( i = 0; i < L_frameTCX; i = i + 2 ) - { - E_2ndlast += st->hTonalMDCTConc->lastBlockData.spectralData_float[i] * st->hTonalMDCTConc->lastBlockData.spectralData_float[i]; - E_last += st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1] * st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1]; - } - } - else - { - for ( i = 0; i < infoIGFStartLine; i = i + 2 ) - { - E_2ndlast += st->hTonalMDCTConc->lastBlockData.spectralData_float[i] * st->hTonalMDCTConc->lastBlockData.spectralData_float[i]; - E_last += st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1] * st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1]; - } - } - tmp2 = E_2ndlast / E_last; - - /* replace higher energy TCX5 frame by lower one to avoid energy fluctuation */ - if ( tmp2 > 2 ) - { - if ( st->element_mode > EVS_MONO ) - { - for ( i = 0; i < L_frameTCX; i = i + 2 ) - { - st->hTonalMDCTConc->lastBlockData.spectralData_float[i] = st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1]; - } - } - else - { - for ( i = 0; i < infoIGFStartLine; i = i + 2 ) - { - st->hTonalMDCTConc->lastBlockData.spectralData_float[i] = st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1]; - } - } - } - else if ( tmp2 < 0.5 ) - { - if ( st->element_mode > EVS_MONO ) - { - for ( i = 0; i < L_frameTCX; i = i + 2 ) - { - st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1] = st->hTonalMDCTConc->lastBlockData.spectralData_float[i]; - } - } - else - { - for ( i = 0; i < infoIGFStartLine; i = i + 2 ) - { - st->hTonalMDCTConc->lastBlockData.spectralData_float[i + 1] = st->hTonalMDCTConc->lastBlockData.spectralData_float[i]; - } - } - } - } - - noiseTiltFactor = 1.0f; - tcxGetNoiseFillingTilt_flt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_flag ), &noiseTiltFactor ); - - if ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) - { - TonalMDCTConceal_InsertNoise_ivas( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, concealment_noise, hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); - } - else - { - TonalMDCTConceal_InsertNoise_ivas( st->hTonalMDCTConc, x, st->tonal_mdct_plc_active, &st->seed_tcx_plc, noiseTiltFactor, f, NULL, hTcxDec->CngLevelBackgroundTrace_bfi, infoIGFStartLine ); - } - } - } - } - - /*------------------------- SPLIT 2 noise filling ------------------------*/ - if ( !bfi ) - { - if ( st->element_mode == IVAS_CPE_MDCT ) - { - v_multc( x, gain_tcx, x, L_spec ); - } - } - - if ( L_spec < L_frame ) - { - set_zero( x + L_spec, L_frame - L_spec ); - } - else if ( L_spec > L_frameTCX ) - { - set_zero( x + L_frameTCX, L_spec - L_frameTCX ); - } - - if ( bfi && ( !st->enablePlcWaveadjust || ( *temp_concealment_method == TCX_TONAL ) ) && st->igf && ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) && ( st->tcxonly ) && ( !st->tonal_mdct_plc_active ) && ( st->nbLostCmpt == 1 ) && ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && ( hTcxCfg->tcx_curr_overlap_mode != FULL_OVERLAP ) ) - { - IGFDecCopyLPCFlatSpectrum_flt( st->hIGFDec, x, IGF_GRID_LB_SHORT ); - /* also replace flat spectrum for the second TCX10 sub frame */ - IGFDecUpdateInfo_flt( st->hIGFDec, 1, IGF_GRID_LB_SHORT ); - IGFDecCopyLPCFlatSpectrum_flt( st->hIGFDec, x, IGF_GRID_LB_SHORT ); - IGFDecUpdateInfo_flt( st->hIGFDec, 0, IGF_GRID_LB_SHORT ); - mvs2s( st->hIGFDec->igfData.igf_curr_subframe[0][0], st->hIGFDec->igfData.igf_curr_subframe[1][0], IGF_MAX_SFB ); - } - else if ( bfi && st->igf && ( frame_cnt == 0 ) && ( L_frameTCX == hTcxDec->L_frameTCX >> 1 ) ) - { - /* copy second to first subframe */ - IGFDecReplicateTCX10State_flt( st->hIGFDec ); - } - - if ( st->element_mode != EVS_MONO ) - { - if ( bfi ) - { - nf_seed = st->seed_tcx_plc; - } - else if ( nf_seed == 0 ) - { - nf_seed = *st->hIGFDec->igfData.igfInfo.nfSeed; - } - } - - if ( st->igf ) - { - *st->hIGFDec->igfData.igfInfo.nfSeed = (int16_t) ( nf_seed * 31821L + 13849L ); - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decoder_tcx_noiseshaping_igf() - * - * TCX: FDNS and IGF application - *-------------------------------------------------------------------*/ - -void decoder_tcx_noiseshaping_igf( - Decoder_State *st, /* i/o: coder memory state */ - const int16_t L_spec, - const int16_t L_frame, - const int16_t L_frameTCX, - const int16_t left_rect, - float x[], - const float gainlpc2[], - int16_t *temp_concealment_method, - const int16_t bfi /* i : Bad frame indicator */ -) -{ - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - /*-----------------------------------------------------------* - * Noise shaping in frequency domain (1/Wz) * - *-----------------------------------------------------------*/ - - if ( st->igf && ( !bfi || ( st->element_mode == IVAS_CPE_MDCT && st->prev_bfi ) ) ) - { - if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) - { - IGFDecCopyLPCFlatSpectrum_flt( st->hIGFDec, x, IGF_GRID_LB_SHORT ); - } - else - { - IGFDecCopyLPCFlatSpectrum_flt( st->hIGFDec, x, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM ); - } - } - /* LPC gains already available */ - - if ( st->element_mode != IVAS_CPE_MDCT && ( !st->enablePlcWaveadjust || !bfi || ( *temp_concealment_method == TCX_TONAL ) ) ) - { - mdct_noiseShaping_flt( x, L_frame, gainlpc2, FDNS_NPTS ); - - if ( !bfi ) - { - v_multc( x + L_frame, gainlpc2[FDNS_NPTS - 1], x + L_frame, L_spec - L_frame ); - } - - set_zero( x + L_spec, L_frameTCX - L_spec ); - } - - /* PLC: [TCX: Tonal Concealment] */ - if ( bfi && st->tonal_mdct_plc_active && st->element_mode != IVAS_CPE_MDCT ) - { - TonalMDCTConceal_Apply_ivas( st->hTonalMDCTConc, x, st->hTcxCfg->psychParamsCurrent ); - } - - if ( st->hTonalMDCTConc != NULL && st->element_mode != IVAS_CPE_MDCT ) - { - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, L_frameTCX, ( hTcxDec->tcxltp_last_gain_unmodified_float > 0 ) ? st->old_fpitch_float : 0, bfi, bfi && st->tonal_mdct_plc_active ); - } - - if ( st->enablePlcWaveadjust ) - { - /* spectrum concealment */ - if ( bfi && *temp_concealment_method == TCX_NONTONAL ) - { - concealment_decode( st->core, x, st->hPlcInfo ); - } - - /* update spectrum buffer, tonality flag, etc. */ - concealment_update( bfi, st->core, st->tonality_flag, x, st->hPlcInfo ); - } - - /*-----------------------------------------------------------* - * IGF * - *-----------------------------------------------------------*/ - - if ( st->igf && !( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) ) - { - if ( st->element_mode != IVAS_CPE_MDCT ) - { - IGFDecApplyMono_flt( st->hIGFDec, x, ( st->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, bfi, st->element_mode ); - } - } - - if ( st->igf && ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) ) - { - if ( st->element_mode != IVAS_CPE_MDCT ) - { - IGFDecApplyMono_flt( st->hIGFDec, x, IGF_GRID_LB_SHORT, bfi, st->element_mode ); - } - } - - return; -} - -#endif - -/*-------------------------------------------------------------------* - * decoder_tcx_tns() - * - * TCX: TNS application - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decoder_tcx_tns( - Decoder_State *st, /* i/o: coder memory state */ - const int16_t L_frame_glob, /* i : frame length */ - const int16_t L_spec, - const int16_t L_frame, - const int16_t L_frameTCX, - float x[N_MAX], - const int16_t fUseTns, /* i : flag that is set if TNS data is present */ - STnsData *tnsData, - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t frame_cnt, /* i : frame counter in the super frame */ - const int16_t whitenedDomain ) -{ - int16_t index, isTCX5, L; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - - index = hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ - - isTCX5 = 0; - L = L_frameTCX; - - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) - { - if ( frame_cnt && !bfi && st->last_core != ACELP_CORE ) - { - /* fix sub-window overlap */ - hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; - } - - if ( ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 ) || ( L_spec > L_frameTCX ) ) - { - L = L_spec; - } - - if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || - ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || - ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && - !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) - { - isTCX5 = 1; - - tcx5SpectrumDeinterleaving( L >> 1, x ); - } - } - - - /*-----------------------------------------------------------* - * Temporal Noise Shaping Synthesis * - *-----------------------------------------------------------*/ - - if ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 && tnsData->tnsOnWhitenedSpectra == whitenedDomain ) - { - /* Apply TNS to get the reconstructed signal */ - SetTnsConfig_flt( hTcxCfg, L_frame_glob == st->L_frame, ( st->last_core == ACELP_CORE ) && ( frame_cnt == 0 ) ); - - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && isTCX5 ) - { - tcx5TnsGrouping( L >> 1, hTcxCfg->tnsConfig[0][0].iFilterBorders[0] >> 1, x ); - } - - ApplyTnsFilter_flt( hTcxCfg->pCurrentTnsConfig, tnsData, x, 0 ); - - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && isTCX5 ) - { - if ( st->element_mode == EVS_MONO || L_spec < L_frameTCX ) /* todo: this is temporary to maintain EVS BE, this is a bug and should be fixed also for EVS (see issue 13) */ - { - tcx5TnsUngrouping( L_frameTCX >> 1, hTcxCfg->tnsConfig[0][0].iFilterBorders[0] >> 1, x, DEC ); - } - else - { - tcx5TnsUngrouping( L >> 1, hTcxCfg->tnsConfig[0][0].iFilterBorders[0] >> 1, x, DEC ); - } - } - } - - if ( whitenedDomain && isTCX5 ) - { - tcx5SpectrumInterleaving( L >> 1, x ); - } +/*-------------------------------------------------------------------* + * decoder_tcx_post() + * + * + *-------------------------------------------------------------------*/ - /* restore index */ - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && frame_cnt && !bfi && st->last_core != ACELP_CORE ) - { - /* restore sub-window overlap */ - hTcxCfg->tcx_last_overlap_mode = index; - } - return; -} -#endif +/*-------------------------------------------------------------------* + * decoder_tcx_tns() + * + * TCX: TNS application + *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void decoder_tcx_tns_fx( Decoder_State *st, /* i/o: coder memory state */ const Word16 L_frame_glob, /* i : frame length */ @@ -1688,231 +196,8 @@ void decoder_tcx_tns_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decoder_tcx_imdct() - * - * TCX: ITF and IMDCT - *-------------------------------------------------------------------*/ - -void decoder_tcx_imdct( - Decoder_State *st, /* i/o: coder memory state */ - const int16_t L_frame_glob, /* i : frame length */ - const int16_t L_frameTCX_glob, - const int16_t L_spec, - const int16_t tcx_offset, - const int16_t tcx_offsetFB, - const int16_t L_frame, - const int16_t L_frameTCX, - const int16_t left_rect, - float x[N_MAX], - float xn_buf[], - const uint16_t kernelType, /* i : TCX transform kernel type */ - const int16_t fUseTns, /* i : flag that is set if TNS data is present */ - float synth[], /* i/o: synth[-M..L_frame] */ - float synthFB[], - const int16_t bfi, /* i : Bad frame indicator */ - const int16_t frame_cnt, /* i : frame counter in the super frame */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - int16_t j, L, overlap, curr_order, startLine, endLine, isTCX5; - int16_t overlapFB; - float x_tmp[L_FRAME_PLUS]; - float xn_bufFB[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - float acelp_zir[L_FRAME_MAX / 2]; - float x_itf[N_MAX_TCX - IGF_START_MN]; - float A_itf[ITF_MAX_FILTER_ORDER + 1]; - float predictionGain; - int16_t index, proc; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - /* Init lengths */ - overlap = hTcxCfg->tcx_mdct_window_length; - overlapFB = hTcxCfg->tcx_mdct_window_lengthFB; - - index = hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly && frame_cnt && !bfi && st->last_core != ACELP_CORE ) - { - /* fix sub-window overlap */ - hTcxCfg->tcx_last_overlap_mode = hTcxCfg->tcx_curr_overlap_mode; - } - - if ( st->igf ) - { - proc = st->hIGFDec->flatteningTrigger; - - if ( proc && fUseTns != 0 ) - { - proc = 0; - } - - if ( proc ) - { - startLine = st->hIGFDec->infoIGFStartLine; - endLine = st->hIGFDec->infoIGFStopLine; - curr_order = 0; - predictionGain = 0; - L = L_frameTCX; - isTCX5 = 0; - - /* interleave again for ITF */ - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) - { - if ( ( hTcxCfg->fIsTNSAllowed && fUseTns != 0 && bfi != 1 ) || ( L_spec > L_frameTCX ) ) - { - L = L_spec; - } - - if ( ( ( !bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || - ( ( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( index == 0 ) ) ) ) || - ( ( bfi ) && ( ( hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) && - !( hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) ) ) - { - isTCX5 = 1; - - tcx5SpectrumInterleaving( L >> 1, x ); - } - } - - for ( j = startLine; j < endLine; j++ ) - { - if ( st->hIGFDec->flag_sparse[j - IGF_START_MN] == 2 ) - { - x_itf[j - IGF_START_MN] = x[j]; - x[j] = st->hIGFDec->virtualSpec_float[j - IGF_START_MN]; - } - } - - ITF_Detect( x + IGF_START_MN, startLine, endLine, 8 /*maxOrder*/, A_itf, &predictionGain, &curr_order ); - - ITF_Apply( x, startLine, endLine, A_itf, curr_order ); - - for ( j = startLine; j < endLine; j++ ) - { - if ( st->hIGFDec->flag_sparse[j - IGF_START_MN] == 2 ) - { - x[j] = x_itf[j - IGF_START_MN]; - } - } - - /* deinterleave */ - if ( isTCX5 ) - { - tcx5SpectrumDeinterleaving( L >> 1, x ); - } - } - } - - /*-----------------------------------------------------------* - * Prepare OLA buffer after waveadjustment. * - * Compute inverse MDCT of x[]. * - *-----------------------------------------------------------*/ - - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - set_f( x_tmp, 0.0f, L_FRAME_PLUS ); - mvr2r( x, x_tmp, min( L_FRAME48k, max( L_spec, max( L_frame, L_frameTCX ) ) ) ); - mvr2r( x, xn_bufFB, min( L_FRAME48k, max( L_spec, max( L_frame, L_frameTCX ) ) ) ); - } - else if ( st->element_mode == EVS_MONO ) - { - mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); - } - else - { - mvr2r( x, x_tmp, max( L_spec, max( L_frame, L_frameTCX ) ) ); - mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); - } - - if ( st->igf ) - { - set_zero( xn_bufFB + st->hIGFDec->infoIGFStartLine, L_frameTCX - st->hIGFDec->infoIGFStartLine ); - } - - if ( st->element_mode != IVAS_CPE_DFT && !sba_dirac_stereo_flag ) - { - IMDCT( xn_bufFB, hTcxDec->syn_Overl_float, hTcxDec->syn_Overl_TDAC_float, xn_buf, hTcxCfg->tcx_aldo_window_1_trunc_flt, hTcxCfg->tcx_aldo_window_2_flt, - hTcxCfg->tcx_mdct_window_half_flt, hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_min_length, index, - kernelType, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, frame_cnt, bfi, st->hHQ_core->old_outLB, 0, st, 0, acelp_zir ); - } - - /* Generate additional comfort noise to mask potential coding artefacts */ - if ( st->flag_cna && st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT && !st->cna_dirac_flag ) - { - generate_masking_noise_mdct( x, st->hFdCngDec->hFdCngCom ); - } - - if ( st->element_mode == IVAS_CPE_DFT || sba_dirac_stereo_flag ) - { - mvr2r( x, xn_bufFB, max( L_spec, max( L_frame, L_frameTCX ) ) ); - - - IMDCT( xn_bufFB, hTcxDec->syn_Overl_float, hTcxDec->syn_Overl_TDAC_float, xn_buf, hTcxCfg->tcx_aldo_window_1_trunc_flt, hTcxCfg->tcx_aldo_window_2_flt, hTcxCfg->tcx_mdct_window_half_flt, hTcxCfg->tcx_mdct_window_minimum_flt, hTcxCfg->tcx_mdct_window_trans_flt, hTcxCfg->tcx_mdct_window_half_length, hTcxCfg->tcx_mdct_window_min_length, index, - kernelType, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, frame_cnt, bfi, st->hHQ_core->old_outLB, 0, st, 0, acelp_zir ); - } - - if ( st->element_mode != EVS_MONO ) - { - IMDCT( x_tmp, hTcxDec->syn_OverlFB_float, hTcxDec->syn_Overl_TDACFB_float, xn_bufFB, hTcxCfg->tcx_aldo_window_1_FB_trunc_flt, hTcxCfg->tcx_aldo_window_2_FB_flt, - hTcxCfg->tcx_mdct_window_halfFB_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index, - kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); - } - else - { - IMDCT( x, hTcxDec->syn_OverlFB_float, hTcxDec->syn_Overl_TDACFB_float, xn_bufFB, hTcxCfg->tcx_aldo_window_1_FB_trunc_flt, hTcxCfg->tcx_aldo_window_2_FB_flt, hTcxCfg->tcx_mdct_window_halfFB_flt, hTcxCfg->tcx_mdct_window_minimumFB_flt, hTcxCfg->tcx_mdct_window_transFB_flt, hTcxCfg->tcx_mdct_window_half_lengthFB, hTcxCfg->tcx_mdct_window_min_lengthFB, index, - kernelType, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, frame_cnt, bfi, st->hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); - } - - /* PLC: [TCX: Tonal Concealment] */ - if ( !bfi ) - { - st->second_last_tns_active = st->last_tns_active; - st->last_tns_active = hTcxCfg->fIsTNSAllowed & fUseTns; - hTcxDec->tcxltp_third_last_pitch_float = hTcxDec->tcxltp_second_last_pitch_float; - hTcxDec->tcxltp_second_last_pitch_float = st->old_fpitch_float; - st->old_fpitch_float = hTcxLtpDec->tcxltp_pitch_int + hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max; - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - st->old_fpitch_float *= (float) L_frame_glob / (float) L_FRAME; - } - - if ( st->element_mode > EVS_MONO ) - { - st->old_fpitchFB_float = st->old_fpitch_float * (float) L_frameTCX_glob / (float) L_frame_glob; - } - else - { - st->old_fpitchFB_float = st->old_fpitch_float * (float) L_frameTCX / (float) L_frame; - } - } - - /* Update old_syn_overl */ - if ( !hTcxCfg->last_aldo ) - { - mvr2r( xn_buf + L_frame, hTcxDec->syn_Overl_float, overlap ); - mvr2r( xn_bufFB + L_frameTCX, hTcxDec->syn_OverlFB_float, overlapFB ); - } - /* Output */ - mvr2r( xn_buf + ( overlap >> 1 ) - tcx_offset, synth, L_frame_glob ); - mvr2r( xn_bufFB + ( overlapFB >> 1 ) - tcx_offsetFB, synthFB, L_frameTCX_glob ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void decoder_tcx_imdct_fx( Decoder_State *st, /* i/o: coder memory state */ const Word16 L_frame_glob, /* i : frame length */ @@ -2204,211 +489,9 @@ void decoder_tcx_imdct_fx( return; } -#endif /*-------------------------------------------------------------------* * init_tcx_info() * * Initialize lengths for TCX processing, update IGF subframe info *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void init_tcx_info( - Decoder_State *st, /* i/o: coder memory state */ - const int16_t L_frame_glob, /* i : global frame length */ - const int16_t L_frameTCX_glob, /* i : FB global frame length */ - const int16_t frame_cnt, /* i : frame counter in the super_frame */ - const int16_t bfi, /* i : bad frame indicator */ - int16_t *tcx_offset, /* o : folding point offset relative to the end of the previous frame */ - int16_t *tcx_offsetFB, /* o : FB folding point offset relative to the end of the previous frame*/ - int16_t *L_frame, /* o : frame length */ - int16_t *L_frameTCX, /* o : TCX frame length */ - int16_t *left_rect, /* o : left part is rectangular */ - int16_t *L_spec /* o : spectrum length */ -) -{ - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - - /* Init lengths */ - *tcx_offset = hTcxCfg->tcx_offset; - *tcx_offsetFB = hTcxCfg->tcx_offsetFB; - - if ( bfi ) - { - /* PLC: [TCX: Memory update] - * PLC: Init buffers */ - - assert( st->L_frame_past > 0 ); - *L_frame = st->L_frame_past; - *L_frameTCX = st->L_frameTCX_past; - - *left_rect = hTcxDec->prev_widow_left_rect; - - if ( *left_rect ) - { - *tcx_offset = hTcxCfg->lfacNext; - *tcx_offsetFB = hTcxCfg->lfacNextFB; - *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; - } - } - else - { - if ( frame_cnt == 0 && st->last_core == ACELP_CORE ) - { - if ( !st->prev_bfi ) - { - hTcxCfg->last_aldo = 0; - } - - /* if past frame is ACELP */ - *L_frame = L_frame_glob + *tcx_offset; - *L_frameTCX = L_frameTCX_glob + *tcx_offsetFB; - if ( st->last_core == st->last_core_from_bs ) - { - /* case: last frame was lost and concealed as CNG */ - /* using the longer transition spec length causes reading of uninitialized data */ - *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; - } - - assert( hTcxCfg->lfacNext <= 0 ); - *L_frame -= hTcxCfg->lfacNext; - *L_frameTCX -= hTcxCfg->lfacNextFB; - *tcx_offset = hTcxCfg->lfacNext; - *tcx_offsetFB = hTcxCfg->lfacNextFB; - - *left_rect = 1; - hTcxDec->prev_widow_left_rect = 1; - } - else - { - *L_frame = L_frame_glob; - *L_frameTCX = L_frameTCX_glob; - *left_rect = 0; - hTcxDec->prev_widow_left_rect = 0; - } - - st->L_frame_past = *L_frame; - st->L_frameTCX_past = *L_frameTCX; - } - - if ( st->igf ) - { - if ( ( *L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) - { - IGFDecUpdateInfo_flt( st->hIGFDec, frame_cnt, IGF_GRID_LB_SHORT ); - } - else - { - IGFDecUpdateInfo_flt( st->hIGFDec, frame_cnt, ( st->last_core == ACELP_CORE || ( *left_rect && st->bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM ); - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decoder_tcx_IGF_mono() - * - * TCX: apply mono IGF - *-------------------------------------------------------------------*/ - -void decoder_tcx_IGF_mono( - Decoder_State *st, /* i/o: coder memory state */ - float x[], /* o : de-quatized coefficients */ - const int16_t L_frame, /* i : frame length */ - const int16_t left_rect, /* i : left part is rectangular */ - const int16_t bfi, /* i : bad frame indicator */ - const int16_t frame_cnt /* i : frame counter in the super_frame */ -) -{ - int16_t igfGridIdx; - - IGFDecUpdateInfo_flt( st->hIGFDec, frame_cnt, ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ? IGF_GRID_LB_SHORT : ( st->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN - : IGF_GRID_LB_NORM ); - - if ( st->igf ) - { - igfGridIdx = IGF_GRID_LB_SHORT; - /*st->hIGFDec.igfData.igfInfo.nfSeed = (int16_t)(*nf_seed * 31821L + 13849L);*/ - if ( !( L_frame == st->L_frame >> 1 ) && st->tcxonly ) - { - igfGridIdx = ( st->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM; - } - - IGFDecApplyMono_flt( st->hIGFDec, x, igfGridIdx, bfi, st->element_mode ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decoder_tcx_IGF_stereo() - * - * TCX: apply stereo IGF processing - *-------------------------------------------------------------------*/ - -void decoder_tcx_IGF_stereo( - Decoder_State **sts, /* i/o: coder memory states */ - STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - float *x[CPE_CHANNELS][NB_DIV], /* o : de-quatized coefficients */ - const int16_t L_frame, /* i : frame length */ - const int16_t left_rect, /* i : left part is rectangular */ - const int16_t k, /* i : Subframe index */ - const int16_t bfi, /* i : bad frame indicator */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t coreMsMask[N_MAX]; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - int16_t core, sfb, igfGridIdx; - - core = sts[0]->core; - - /* assumptions: stereo filling was already done on the flattened spectra - * IGF region is always coded M/S, never L/R (to be done in the encoder) - * for residual bands with stereo filling infoTcxNoise is set to zero - * both channels have the same IGF configuration - */ - - - /* initialization */ - sfbConf = ( core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - - if ( sts[0]->last_core == ACELP_CORE ) - { - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - /* create line wise ms mask for the core bands */ - set_s( coreMsMask, 0, N_MAX ); - - for ( sfb = 0; sfb < sfbConf->sfbCnt; sfb++ ) - { - set_s( &coreMsMask[sfbConf->sfbOffset[sfb]], ms_mask[k][sfb], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); - } - - IGFDecUpdateInfo_flt( sts[0]->hIGFDec, k, ( L_frame == sts[0]->L_frame >> 1 ) && ( sts[0]->tcxonly ) ? IGF_GRID_LB_SHORT : ( sts[0]->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN - : IGF_GRID_LB_NORM ); - - IGFDecUpdateInfo_flt( sts[1]->hIGFDec, k, ( L_frame == sts[1]->L_frame >> 1 ) && ( sts[1]->tcxonly ) ? IGF_GRID_LB_SHORT : ( sts[1]->last_core == ACELP_CORE || left_rect ) ? IGF_GRID_LB_TRAN - : IGF_GRID_LB_NORM ); - - if ( sts[0]->igf ) - { - igfGridIdx = IGF_GRID_LB_SHORT; - if ( !( L_frame == sts[0]->L_frame >> 1 ) && ( sts[0]->tcxonly ) ) - { - igfGridIdx = ( sts[0]->last_core == ACELP_CORE || ( left_rect && bfi ) ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM; - } - - IGFDecApplyStereo_flt( sts[0]->hIGFDec, sts[1]->hIGFDec, x[0][k], x[1][k], igfGridIdx, coreMsMask, hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS, bfi, MCT_flag ); - } - - return; -} -#endif diff --git a/lib_dec/dec_tcx_fx.c b/lib_dec/dec_tcx_fx.c index 33b967071..cf2b3f711 100644 --- a/lib_dec/dec_tcx_fx.c +++ b/lib_dec/dec_tcx_fx.c @@ -15,7 +15,6 @@ #include "ivas_prot_fx.h" #include "ivas_rom_com.h" #include "ivas_rom_com_fx.h" -#ifdef IVAS_FLOAT_FIXED extern const Word16 T_DIV_L_Frame[]; /*0Q15 * 2^-7 */ static Word32 CalculateAbsEnergy_fx( /* o : normalized result Q31 */ @@ -1607,7 +1606,6 @@ void decoder_tcx_post_fx( Decoder_State *st_fx, } } -#ifdef IVAS_FLOAT_FIXED void decoder_tcx_post_ivas_fx( Decoder_State *st_fx, Word16 *synth, // Q_syn Word16 *synthFB, // Q_syn @@ -1961,7 +1959,6 @@ void decoder_tcx_post_ivas_fx( Decoder_State *st_fx, move16(); } } -#endif static Word32 CalculateAbsEnergy_fx( /* o : normalized result Q31 */ const Word32 L_off, /* i : initial sum value Qn */ @@ -2779,7 +2776,6 @@ void IMDCT_fx( Word32 *x, Word16 x_e, Word16 *old_syn_overl, Word16 *syn_Overl_T } } -#ifdef IVAS_FLOAT_FIXED void IMDCT_ivas_fx( Word32 *x_fx, // Q(q_x) Word16 q_x, @@ -3414,7 +3410,6 @@ void IMDCT_ivas_fx( return; } -#endif void init_tcx_info_fx( Decoder_State *st, /* i/o: coder memory state */ @@ -3754,7 +3749,6 @@ void decoder_tcx_IGF_stereo_fx( } -#ifdef IVAS_FLOAT_FIXED void decoder_tcx_ivas_fx( Decoder_State *st, Word16 prm[], @@ -3876,7 +3870,6 @@ void decoder_tcx_ivas_fx( // Scale_sig( st->hHQ_core->old_out_fx, L_FRAME48k, ( sub( st->hHQ_core->Q_old_wtda, st->Q_syn ) ) ); Scale_sig( st->hTcxDec->old_syn_Overl, 320, ( -2 + st->Q_syn ) ); // Scaling to Q-2 } -#endif /*-------------------------------------------------------------------* * decoder_tcx_invQ_fx @@ -5124,4 +5117,3 @@ void decoder_tcx_noiseshaping_igf_fx( return; } -#endif diff --git a/lib_dec/dec_tran.c b/lib_dec/dec_tran.c index ed158a00f..88f93c733 100644 --- a/lib_dec/dec_tran.c +++ b/lib_dec/dec_tran.c @@ -45,154 +45,3 @@ * * Decode transition (TC) frames *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decod_tran( - Decoder_State *st, /* i/o: decoder static memory */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t tc_subfr, /* i : TC subframe index */ - const float *Aq, /* i : LP filter coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - float *pitch_buf, /* o : floating pitch values for each subframe*/ - float *voice_factors, /* o : voicing factors */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - float *bwe_exc, /* i/o: excitation for SWB TBE */ - int16_t *unbits, /* i/o: number of unused bits */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ - float gain_code; /* Quantized algebraic codeebook gain */ - float norm_gain_code; /* normalized algebraic codeebook gain */ - float gain_pit = 0; /* Quantized pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_inov; /* inovation gain */ - float code[L_SUBFR]; /* algebraic codevector */ - const float *p_Aq; /* pointer to lp filter coefficient */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t i_subfr, i; /* tmp variables */ - int16_t position; /* TC related flag */ - float gain_preQ = 0; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - int16_t Jopt_flag; /* flag indicating zero adaptive contribtuion */ - float norm_gain_preQ; - - gain_preQ = 0; - set_f( code_preQ, 0, L_SUBFR ); - - /*----------------------------------------------------------------* - * ACELP subframe loop - *----------------------------------------------------------------*/ - - p_Aq = Aq; - pt_pitch = pitch_buf; - Jopt_flag = 0; - norm_gain_preQ = 0.0f; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - /*------------------------------------------------------------* - * TC : subframe determination & - * adaptive/glottal part of excitation construction - *------------------------------------------------------------*/ - - transition_dec( st, L_frame, i_subfr, tc_subfr, &Jopt_flag, exc, &T0, &T0_frac, &T0_min, &T0_max, &pt_pitch, &position, bwe_exc ); - - /*-----------------------------------------------------------------* - * Transform domain contribution decoding - active frames - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) - { - transf_cdbk_dec( st, 0, i_subfr, Es_pred, 0, &gain_preQ, &norm_gain_preQ, code_preQ, unbits ); - } - - /*-----------------------------------------------------------------* - * ACELP codebook search + pitch sharpening - *-----------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); - - /*-----------------------------------------------------------------* - * De-quantize the gains - * Update tilt of code: 0.0 (unvoiced) to 0.5 (voiced) - *-----------------------------------------------------------------*/ - - if ( Jopt_flag == 0 ) - { - /* 2/3-bit decoding */ - gain_dec_tc( st, i_subfr, Es_pred, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - else - { - /* 5-bit decoding */ - if ( st->core_brate > ACELP_32k ) - { - gain_dec_SQ( st, i_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - else - { - gain_dec_mless( st, L_frame, st->coder_type, i_subfr, tc_subfr, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - } - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, gain_pit, norm_gain_code + norm_gain_preQ, &st->lp_gainp, &st->lp_gainc, L_frame ); - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Add the ACELP pre-quantizer contribution - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] += gain_preQ * code_preQ[i]; - exc[i + i_subfr] += gain_preQ * code_preQ[i]; - } - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - /*----------------------------------------------------------------* - * Excitation enhancements (update of total excitation signal) - *----------------------------------------------------------------*/ - - if ( st->core_brate > ACELP_32k ) - { - mvr2r( exc + i_subfr, exc2 + i_subfr, L_SUBFR ); - } - else - { - enhancer( MODE1, st->core_brate, -1, 0, st->coder_type, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); - } - - p_Aq += ( M + 1 ); - pt_pitch++; - st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; - gain_buf[i_subfr / L_SUBFR] = gain_pit; - } - - /* SC-VBR */ - st->prev_gain_pit_dec = gain_pit; - - return; -} -#endif diff --git a/lib_dec/dec_tran_fx.c b/lib_dec/dec_tran_fx.c index c597f683b..d21109dce 100644 --- a/lib_dec/dec_tran_fx.c +++ b/lib_dec/dec_tran_fx.c @@ -5,7 +5,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #define Q3_4 ( 4 << Q3 ) #define Q3_17 ( 17 << Q3 ) @@ -302,4 +301,3 @@ void decod_tran_fx( return; } -#endif diff --git a/lib_dec/dec_uv.c b/lib_dec/dec_uv.c index 513f32a8d..e748899a9 100644 --- a/lib_dec/dec_uv.c +++ b/lib_dec/dec_uv.c @@ -38,132 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * decod_unvoiced() - * - * Decode unvoiced (UC) frames - *-------------------------------------------------------------------*/ - -void decod_unvoiced( - Decoder_State *st, /* i/o: decoder static memory */ - const float *Aq, /* i : LP filter coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ - float *tmp_noise, /* o : long term temporary noise energy */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *exc, /* o : adapt. excitation exc */ - float *exc2, /* o : adapt. excitation/total exc */ - float *bwe_exc, /* i/o: excitation for SWB TBE */ - float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - float gain_pit = 0; /* Quantized pitch gain */ - float gain_code; /* Quantized algebraic codeebook gain */ - float gain_inov; /* inovation gain */ - float norm_gain_code; /* normalized algebraic codeebook gain */ - float voice_fac; /* Voicing factor */ - float code[L_SUBFR]; /* algebraic codevector */ - int16_t i_subfr; - float *pt_pitch; - const float *p_Aq; - int16_t i; - int16_t index; - float gain_code2; - float code2[L_SUBFR]; - - if ( st->last_ppp_mode_dec == 1 || st->last_nelp_mode_dec == 1 ) - { - /* SC_VBR - reset the decoder, to avoid memory not updated issue for this unrealistic case */ - CNG_reset_dec( st, pitch_buf, voice_factors ); - } - - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - if ( !uc_two_stage_flag ) - { - /*----------------------------------------------------------------* - * Unvoiced subframe processing - *----------------------------------------------------------------*/ - - gaus_dec( st, i_subfr, code, &norm_gain_code, &st->lp_gainp, &st->lp_gainc, &gain_inov, &st->tilt_code, &voice_fac, &gain_pit, pt_pitch, exc, &gain_code, exc2 ); - } - else - { - /*----------------------------------------------------------------* - * Unvoiced subframe processing in two stages - *----------------------------------------------------------------*/ - - /* No adaptive codebook (UC) */ - set_zero( exc + i_subfr, L_SUBFR ); - - *pt_pitch = (float) L_SUBFR; - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 0, L_FRAME, 1, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, L_SUBFR ); - - /*-------------------------------------------------------* - * Generate Gaussian excitation * - *-------------------------------------------------------*/ - - gaus_L2_dec_flt( code2, st->tilt_code, p_Aq, FORMANT_SHARPENING_G1_FLT, &( st->seed_acelp ) ); - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - index = get_next_indice( st, st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] ); - gain_dec_gacelp_uv( index, code, code2, Es_pred, L_SUBFR, &gain_pit, &gain_code, &gain_code2, &( st->past_gpit_float ), &norm_gain_code, &gain_inov ); - - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_FRAME ); - - /*-------------------------------------------------------* - * - Find the total excitation. * - *-------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc2[i + i_subfr] += gain_code2 * code2[i]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - } - - *tmp_noise = norm_gain_code; - - /*----------------------------------------------------------------* - * Excitation enhancements (update of total excitation signal) - *----------------------------------------------------------------*/ - - enhancer( MODE1, st->core_brate, uc_two_stage_flag, 0, UNVOICED, L_FRAME, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); - - voice_factors[i_subfr / L_SUBFR] = 0.0f; - - if ( st->hBWE_TD != NULL ) - { - interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); - } - - p_Aq += ( M + 1 ); - pt_pitch++; - st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; - } - - /* SC-VBR */ - st->prev_gain_pit_dec = gain_pit; - - set_f( gain_buf, 0, NB_SUBFR ); - - return; -} -#endif diff --git a/lib_dec/dec_uv_fx.c b/lib_dec/dec_uv_fx.c index bdddeb791..352738d5f 100644 --- a/lib_dec/dec_uv_fx.c +++ b/lib_dec/dec_uv_fx.c @@ -5,7 +5,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED static void gain_dec_gacelp_uv_fx( Word16 index, /* i : Quantization index vector Q0 */ Word16 *code, /* i : algebraic code excitation Q9 */ @@ -393,4 +392,3 @@ static void gain_dec_gacelp_uv_fx( return; } -#endif diff --git a/lib_dec/decision_matrix_dec.c b/lib_dec/decision_matrix_dec.c index 97a4e6f59..a96d130cb 100644 --- a/lib_dec/decision_matrix_dec.c +++ b/lib_dec/decision_matrix_dec.c @@ -48,523 +48,3 @@ * Read ACELP signaling bits from the bitstream * Set extension layers *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decision_matrix_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *sharpFlag, /* o : formant sharpening flag */ - int16_t *hq_core_type, /* o : HQ core type */ - int16_t *core_switching_flag /* o : ACELP->HQ switching frame flag */ -) -{ - int16_t start_idx; - int16_t ppp_nelp_mode; - int32_t ind; - int16_t nBits; - int16_t tmp; - - /* init */ - st->core = -1; - st->core_brate = 0; - st->extl = -1; - st->extl_brate = 0; - st->ppp_mode_dec = 0; - st->nelp_mode_dec = 0; - st->igf = 0; - - if ( st->total_brate > ACELP_8k00 ) - { - st->vbr_hw_BWE_disable_dec = 0; - } - - if ( st->mdct_sw == MODE2 ) - { - st->core = HQ_CORE; - } - else - { - if ( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) - { - st->core = ACELP_CORE; - st->core_brate = st->total_brate; - - if ( st->total_brate != FRAME_NO_DATA ) - { - st->cng_type = get_next_indice( st, 1 ); - - if ( st->cng_type == LP_CNG ) - { - st->L_frame = L_FRAME; - - if ( get_next_indice( st, 1 ) == 1 ) - { - st->L_frame = L_FRAME16k; - } - } - else - { - st->bwidth = get_next_indice( st, 2 ); - - if ( get_next_indice( st, 1 ) == 0 ) - { - st->L_frame = L_FRAME; - } - else - { - st->L_frame = L_FRAME16k; - } - } - } - - if ( st->output_Fs >= 32000 && st->bwidth >= SWB ) - { - st->extl = SWB_CNG; - } - - if ( st->total_brate == FRAME_NO_DATA && st->prev_bfi && !st->bfi && st->L_frame > L_FRAME16k ) - { - st->L_frame = st->last_CNG_L_frame; - } - - return; - } - - /* SC-VBR */ - else if ( st->total_brate == PPP_NELP_2k80 ) - { - st->core = ACELP_CORE; - st->core_brate = PPP_NELP_2k80; - st->L_frame = L_FRAME; - st->fscale = sr2fscale( INT_FS_12k8 ); - - if ( st->ini_frame == 0 ) - { - /* avoid switching of internal ACELP Fs in the very first frame */ - st->last_L_frame = st->L_frame; - st->last_core = st->core; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - } - - st->vbr_hw_BWE_disable_dec = 1; - - get_next_indice( st, 1 ); - - ppp_nelp_mode = get_next_indice( st, 2 ); - - /* 0 - PPP_NB, 1 - PPP_WB, 2 - NELP_NB, 3 - NELP_WB */ - if ( ppp_nelp_mode == 0 ) - { - st->ppp_mode_dec = 1; - st->coder_type = VOICED; - st->bwidth = NB; - } - else if ( ppp_nelp_mode == 1 ) - { - st->ppp_mode_dec = 1; - st->coder_type = VOICED; - st->bwidth = WB; - } - else if ( ppp_nelp_mode == 2 ) - { - st->nelp_mode_dec = 1; - st->coder_type = UNVOICED; - st->bwidth = NB; - } - else if ( ppp_nelp_mode == 3 ) - { - st->nelp_mode_dec = 1; - st->coder_type = UNVOICED; - st->bwidth = WB; - } - - return; - } - - /*---------------------------------------------------------------------* - * ACELP/HQ core selection - *---------------------------------------------------------------------*/ - - if ( st->total_brate < ACELP_24k40 ) - { - st->core = ACELP_CORE; - } - else if ( st->total_brate >= ACELP_24k40 && st->total_brate <= ACELP_64k ) - { - /* read the ACELP/HQ core selection bit */ - tmp = get_next_indice( st, 1 ); - - if ( tmp == 0 ) - { - st->core = ACELP_CORE; - } - else - { - st->core = HQ_CORE; - } - } - } - - /*-----------------------------------------------------------------* - * Read ACELP signaling bits from the bitstream - *-----------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - start_idx = 0; - while ( acelp_sig_tbl[start_idx] != st->total_brate ) - { - start_idx++; - if ( start_idx >= MAX_ACELP_SIG ) - { - st->BER_detect = 1; - start_idx = 0; - break; - } - } - - /* skip the bitrate */ - start_idx += 1; - - /* retrieve the number of bits */ - nBits = (int16_t) acelp_sig_tbl[start_idx++]; - - start_idx += get_next_indice( st, nBits ); - if ( start_idx >= MAX_ACELP_SIG ) - { - ind = 0; - st->BER_detect = 1; - } - else - { - /* retrieve the signaling indice */ - ind = acelp_sig_tbl[start_idx]; - - /* convert signaling indice into signaling information */ - st->coder_type = ind & 0x7; - if ( st->coder_type == LR_MDCT ) - { - st->core = HQ_CORE; - st->bwidth = ( ind >> 3 ) & 0x7; - } - else - { - st->bwidth = ( ind >> 3 ) & 0x7; - *sharpFlag = ( ind >> 6 ) & 0x1; - } - } - - /* detect corrupted signaling (due to bit errors) */ - if ( ( st->BER_detect ) || - ( ind >= 1 << 7 ) || - ( st->total_brate <= ACELP_13k20 && st->bwidth == FB ) || - ( st->total_brate >= ACELP_32k && st->bwidth == NB ) || - ( st->total_brate >= ACELP_32k && !( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) || - ( st->total_brate < ACELP_13k20 && st->bwidth != NB && st->coder_type == LR_MDCT ) || - ( st->total_brate >= ACELP_13k20 && st->coder_type == UNVOICED ) || - ( st->total_brate >= ACELP_13k20 && st->coder_type == AUDIO && st->bwidth == NB ) ) - { - st->BER_detect = 0; - st->bfi = 1; - if ( st->ini_frame == 0 ) - { - st->core = ACELP_CORE; - st->L_frame = L_FRAME; - st->last_core = st->core; - st->last_core_brate = st->core_brate; - } - else if ( st->last_total_brate == -1 ) /* can happen in case of BER when no good frame was received before */ - { - st->coder_type = st->last_coder_type; - st->bwidth = st->last_bwidth; - st->total_brate = st->last_total_brate_ber; - if ( st->last_core == AMR_WB_CORE ) - { - st->core = ACELP_CORE; - st->codec_mode = MODE1; - } - else if ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) - { - st->core = st->last_core_bfi; - st->codec_mode = MODE2; - } - else - { - st->core = st->last_core; - st->codec_mode = MODE1; - } - st->core_brate = st->last_core_brate; - st->extl = st->last_extl; - st->extl_brate = st->total_brate - st->core_brate; - } - else - { - st->coder_type = st->last_coder_type; - st->bwidth = st->last_bwidth; - st->total_brate = st->last_total_brate; - if ( st->last_core == AMR_WB_CORE ) - { - st->core = ACELP_CORE; - st->codec_mode = MODE1; - } - else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) - { - st->core = st->last_core; - st->codec_mode = MODE2; - } - else - { - st->core = st->last_core; - st->codec_mode = MODE1; - } - st->core_brate = st->last_core_brate; - st->extl = st->last_extl; - st->extl_brate = st->total_brate - st->core_brate; - } - return; - } - } - - /*-----------------------------------------------------------------* - * Set extension layers - *-----------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE && st->bwidth == WB && st->total_brate < ACELP_9k60 ) - { - if ( st->vbr_hw_BWE_disable_dec == 0 ) - { - st->extl = WB_BWE; - } - } - else if ( st->core == ACELP_CORE && st->bwidth == WB && st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_16k40 ) - { - /* read the WB TBE/BWE selection bit */ - if ( get_next_indice( st, 1 ) ) - { - st->extl = WB_BWE; - st->extl_brate = WB_BWE_0k35; - } - else - { - st->extl = WB_TBE; - st->extl_brate = WB_TBE_1k05; - } - } - else if ( st->core == ACELP_CORE && ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate >= ACELP_13k20 ) - { - if ( st->total_brate >= ACELP_48k ) - { - st->extl = SWB_BWE_HIGHRATE; - if ( st->bwidth == FB ) - { - st->extl = FB_BWE_HIGHRATE; - } - - st->extl_brate = SWB_BWE_16k; - } - - /* read the SWB TBE/BWE selection bit */ - else - { - tmp = get_next_indice( st, 1 ); - - if ( tmp ) - { - st->extl = SWB_BWE; - st->extl_brate = SWB_BWE_1k6; - } - else - { - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = SWB_TBE_2k8; - } - } - } - - /* set FB TBE and FB BWE extension layers */ - if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) - { - if ( st->extl == SWB_BWE ) - { - st->extl = FB_BWE; - st->extl_brate = FB_BWE_1k8; - } - else if ( st->extl == SWB_TBE ) - { - st->extl = FB_TBE; - st->extl_brate = FB_TBE_3k0; - } - } - } - - /* set core bitrate */ - st->core_brate = st->total_brate - st->extl_brate; - - /*-----------------------------------------------------------------* - * Read HQ signaling bits from the bitstream - * Set HQ core type - *-----------------------------------------------------------------*/ - - if ( st->core == HQ_CORE ) - { - if ( st->mdct_sw != MODE2 ) - { - /* skip the HQ/TCX core switching flag */ - get_next_indice_tmp( st, 1 ); - } - - /* read ACELP->HQ core switching flag */ - *core_switching_flag = get_next_indice( st, 1 ); - - if ( *core_switching_flag == 1 ) - { - st->last_L_frame_ori = st->last_L_frame; - - /* read ACELP L_frame info */ - if ( get_next_indice( st, 1 ) == 0 ) - { - st->last_L_frame = L_FRAME; - } - else - { - st->last_L_frame = L_FRAME16k; - } - } - - if ( st->mdct_sw != MODE2 ) - { - /* read/set band-width (needed for different I/O sampling rate support) */ - if ( st->total_brate > ACELP_16k40 ) - { - ind = get_next_indice( st, 2 ); - - if ( ind == 0 ) - { - st->bwidth = NB; - } - else if ( ind == 1 ) - { - st->bwidth = WB; - } - else if ( ind == 2 ) - { - st->bwidth = SWB; - } - else - { - st->bwidth = FB; - } - } - } - - /* detect bit errors in signaling */ - if ( ( ( st->total_brate >= ACELP_24k40 && st->bwidth == NB ) || - ( st->core == HQ_CORE && st->total_brate <= LRMDCT_CROSSOVER_POINT && st->bwidth == FB ) ) ) - { - st->bfi = 1; - - st->core_brate = st->total_brate; - st->extl = -1; - st->extl_brate = 0; - if ( st->last_core == AMR_WB_CORE ) - { - st->core = ACELP_CORE; - st->L_frame = L_FRAME; - st->codec_mode = MODE1; - st->last_L_frame = L_FRAME; - - if ( st->total_brate >= ACELP_16k40 ) - { - st->total_brate = ACELP_13k20; - st->core_brate = st->total_brate; - } - } - else - { - /* make sure, we are in a valid configuration wrt to bandwidth */ - st->bwidth = WB; - } - } - - /* set HQ core type */ - *hq_core_type = NORMAL_HQ_CORE; - if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) - { - *hq_core_type = LOW_RATE_HQ_CORE; - } - else if ( st->bwidth == NB ) - { - *hq_core_type = LOW_RATE_HQ_CORE; - } - } - - /*-----------------------------------------------------------------* - * Set ACELP frame length - *-----------------------------------------------------------------*/ - - if ( st->core_brate == FRAME_NO_DATA ) - { - /* prevent "L_frame" changes in CNG segments */ - st->L_frame = st->last_L_frame; - } - else if ( st->core_brate == SID_2k40 && st->bwidth == WB && st->first_CNG && st->hTdCngDec->act_cnt2 < MIN_ACT_CNG_UPD ) - { - /* prevent "L_frame" changes in SID frame after short segment of active frames */ - st->L_frame = st->last_CNG_L_frame; - } - else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && st->bwidth == WB ) || ( st->total_brate >= ACELP_32k && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) - { - st->L_frame = L_FRAME16k; - } - else - { - st->L_frame = L_FRAME; - } - - if ( st->L_frame == L_FRAME16k ) - { - st->nb_subfr = NB_SUBFR16k; - } - else - { - st->nb_subfr = NB_SUBFR; - } - - st->extl_orig = st->extl; - st->extl_brate_orig = st->extl_brate; - - if ( st->output_Fs == 8000 ) - { - st->extl = -1; - } - else if ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k ) - { - st->extl = -1; - st->extl_brate = 0; - } - - if ( st->ini_frame == 0 ) - { - /* avoid switching of internal ACELP Fs in the very first frame */ - st->last_L_frame = st->L_frame; - st->last_core = st->core; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - } - - /*-----------------------------------------------------------------* - * set inactive coder_type flag in ACELP core - *-----------------------------------------------------------------*/ - - st->inactive_coder_type_flag = 0; /* AVQ by default */ - if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE ) - { - st->inactive_coder_type_flag = 1; /* GSC */ - } - - return; -} -#endif diff --git a/lib_dec/decision_matrix_dec_fx.c b/lib_dec/decision_matrix_dec_fx.c index 5d9beccff..9c0020223 100644 --- a/lib_dec/decision_matrix_dec_fx.c +++ b/lib_dec/decision_matrix_dec_fx.c @@ -17,7 +17,6 @@ * Read ACELP signaling bits from the bitstream * Set extension layers *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void decision_matrix_dec_fx( Decoder_State *st, /* i/o: decoder state structure */ Word16 *sharpFlag, /* o : formant sharpening flag Q0 */ @@ -716,4 +715,3 @@ void decision_matrix_dec_fx( return; } -#endif diff --git a/lib_dec/dlpc_avq.c b/lib_dec/dlpc_avq.c index 94b3172f0..3514dda88 100644 --- a/lib_dec/dlpc_avq.c +++ b/lib_dec/dlpc_avq.c @@ -45,281 +45,3 @@ * * Variable bitrate multiple LPC un-quantizer *------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -int16_t dlpc_avq( - int16_t *index, /* i : Quantization indices */ - float *LSF_Q, /* o : Quantized LSF vectors */ - const int16_t numlpc, /* i : Number of sets of lpc */ - const int32_t sr_core /* i : internal sampling rate */ -) -{ - int16_t i, nbi, last; - int16_t *p_index, q_type; - - /* Last LPC index */ - if ( numlpc == 1 ) - { - last = 0; - } - else - { - last = M; - } - - p_index = index; - - /* Decode last LPC */ - for ( i = 0; i < M; i++ ) - { - LSF_Q[last + i] = 0.0f; - } - - vlpc_1st_dec_flt( p_index[0], &LSF_Q[last], sr_core ); - p_index++; - vlpc_2st_dec_flt( &LSF_Q[last], &p_index[0], 0, sr_core ); - nbi = 2 + p_index[0] + p_index[1]; - p_index += nbi; - - /* Decode intermediate LPC (512 framing) */ - - if ( numlpc == 2 ) - { - q_type = p_index[0]; - p_index++; - - if ( q_type == 0 ) - { - - for ( i = 0; i < M; i++ ) - { - LSF_Q[i] = 0.0f; - } - vlpc_1st_dec_flt( p_index[0], &LSF_Q[0], sr_core ); - p_index++; - vlpc_2st_dec_flt( &LSF_Q[0], &p_index[0], 0, sr_core ); - } - else if ( q_type == 1 ) - { - for ( i = 0; i < M; i++ ) - { - LSF_Q[i] = LSF_Q[M + i]; - } - - vlpc_2st_dec_flt( &LSF_Q[0], &p_index[0], 3, sr_core ); - } - - nbi = 2 + p_index[0] + p_index[1]; - p_index += nbi; - } - - return (int16_t) ( p_index - index ); -} - -/*------------------------------------------------------------------* - * unary_decode() - * - * - *------------------------------------------------------------------*/ - -static int16_t unary_decode( - Decoder_State *st, - int16_t *ind ) -{ - int16_t start_bit_pos; - - start_bit_pos = st->next_bit_pos; - - /* Index bits */ - *ind = 0; - - while ( get_next_indice_1( st ) && !st->BER_detect ) - { - *ind += 1; - } - - if ( *ind != 0 ) - { - *ind += 1; - } - - return st->next_bit_pos - start_bit_pos; -} - - -/*------------------------------------------------------------------* - * pack4bits() - * - * - *------------------------------------------------------------------*/ - -static int16_t pack4bits( - int16_t nbits, - Decoder_State *st, - int16_t *prm ) -{ - int16_t i; - - i = 0; - - while ( nbits > 4 ) - { - prm[i] = get_next_indice( st, 4 ); - nbits -= 4; - i++; - } - prm[i] = get_next_indice( st, nbits ); - i++; - - return ( i ); -} - - -/*------------------------------------------------------------------* - * decode_lpc_avq() - * - * - *------------------------------------------------------------------*/ - -int16_t decode_lpc_avq( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t numlpc, /* i : Number of sets of lpc */ - int16_t *param_lpc, /* o : lpc parameters */ - const int16_t ch, /* i : channel */ - const int16_t element_mode, /* i : element mode */ - const int16_t sns_low_br_mode /* i : SNS low-bitrate mode */ -) -{ - int16_t k, j; - int16_t nb, qn1, qn2, avqBits, q_type; - int16_t start_bit_pos; - int16_t stereo_mode = 0; - - j = 0; - start_bit_pos = st->next_bit_pos; - - for ( k = 0; k < numlpc; k++ ) - { - /* Decode quantizer type */ - - if ( k == 0 ) - { - q_type = 0; - nb = 0; - } - else - { - nb = 1; - q_type = get_next_indice( st, nb ); - param_lpc[j++] = q_type; - } - - if ( element_mode == IVAS_CPE_MDCT && k == 0 ) - { - if ( ch == 0 ) - { - stereo_mode = param_lpc[j]; - } - else - { - stereo_mode = ch; - } - param_lpc[j++] = stereo_mode; - } - - /* Decode quantization indices */ - - if ( q_type == 0 ) - { - /* Absolute quantizer with 1st stage stochastic codebook */ - if ( element_mode == IVAS_CPE_MDCT ) - { - if ( stereo_mode != 3 ) - { - param_lpc[j++] = get_next_indice( st, SNS_ABS_QUANT_BITS ); - } - else - { - param_lpc[j++] = get_next_indice( st, 1 ) - 2; - } - } - else - { - param_lpc[j++] = get_next_indice( st, LPC_ABS_QUANT_BITS ); - } - } - - /* - * 2nd stage decoding is skipped if: - * - we are in low bitrate mode and no joint SNS coding is used - * - OR the side-SNS-is-zero flag is set for joint SNS - */ - if ( element_mode != IVAS_CPE_MDCT || ( !( sns_low_br_mode && ( stereo_mode == 0 || stereo_mode == 1 ) ) && !( q_type == 0 && param_lpc[j - 1] == -2 ) ) ) - { - /* 2 bits to specify Q2,Q3,Q4,ext */ - qn1 = 2 + get_next_indice( st, 2 ); - qn2 = 2 + get_next_indice( st, 2 ); - - /* Unary code */ - /* Q5 = 0, Q6=10, Q0=110, Q7=1110, ... */ - - if ( qn1 > 4 ) - { - nb = unary_decode( st, &qn1 ); - - if ( nb == 1 ) - qn1 += 5; - else if ( nb == 2 ) - qn1 += 4; - else if ( nb == 3 ) - qn1 = 0; - else - qn1 += 3; - } - - if ( qn2 > 4 ) - { - nb = unary_decode( st, &qn2 ); - - if ( nb == 1 ) - qn2 += 5; - else if ( nb == 2 ) - qn2 += 4; - else if ( nb == 3 ) - qn2 = 0; - else - qn2 += 3; - } - - /* check for potential bit errors */ - if ( qn1 > NB_SPHERE || qn2 > NB_SPHERE ) - { - qn1 = 0; - qn2 = 0; - st->BER_detect = 1; - } - - param_lpc[j] = qn1; - j++; - param_lpc[j] = qn2; - j++; - - /* Decode Split-by-2 algebraic VQ */ - avqBits = 4 * qn1; - pack4bits( avqBits, st, ¶m_lpc[j] ); - j += qn1; - - avqBits = 4 * qn2; - pack4bits( avqBits, st, ¶m_lpc[j] ); - j += qn2; - } - else - { - param_lpc[j++] = 0; - param_lpc[j++] = 0; - } - } - - return st->next_bit_pos - start_bit_pos; -} -#endif diff --git a/lib_dec/dlpc_avq_fx.c b/lib_dec/dlpc_avq_fx.c index c38d0b9a3..3d9a00b7f 100644 --- a/lib_dec/dlpc_avq_fx.c +++ b/lib_dec/dlpc_avq_fx.c @@ -7,7 +7,6 @@ #include "options.h" #include #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /* Constants */ #define M 16 /* length of LPC */ @@ -522,4 +521,3 @@ Word16 decode_lpc_avq_ivas_fx( return sub( st->next_bit_pos, start_bit_pos ); } -#endif diff --git a/lib_dec/dlpc_stoch.c b/lib_dec/dlpc_stoch.c index 6d18ffbda..c1956b8d9 100644 --- a/lib_dec/dlpc_stoch.c +++ b/lib_dec/dlpc_stoch.c @@ -47,75 +47,3 @@ * * *------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void lpc_unquantize( - Decoder_State *st, - float *lsf, - float *lsp, - int16_t *param_lpc, - float *lspmid, - float *lsfmid, - const int16_t coder_type, - int16_t *LSF_Q_prediction /* o : LSF prediction mode */ -) -{ - int16_t nb_indices, k; - - mvr2r( st->lsf_old, &lsf[0], M ); - mvr2r( st->lsp_old, &lsp[0], M ); - - nb_indices = 0; - if ( st->lpcQuantization == 0 ) - { - nb_indices = dlpc_avq( param_lpc, &lsf[M], st->numlpc, st->sr_core ); - - for ( k = 0; k < st->numlpc; k++ ) - { - lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); - } - } - else if ( st->lpcQuantization == 1 ) - { - if ( st->sr_core == INT_FS_16k && coder_type == UNVOICED ) - { - lsf_end_dec( st, GENERIC, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices, NULL ); - } - else - { - if ( st->core == TCX_20_CORE ) - { - lsf_end_dec( st, AUDIO, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices, NULL ); - } - else - { - lsf_end_dec( st, coder_type, 1 - st->narrowBand /* st->bwidth */, ENDLSF_NBITS, &lsf[M], param_lpc, LSF_Q_prediction, &nb_indices, NULL ); - } - } - - lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); - } - else - { - assert( 0 ); - } - - st->seed_acelp = 0; - for ( k = nb_indices - 1; k >= 0; k-- ) - { - /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ - st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[k] ) * 31821L + 13849L ); - } - - /* Decoded mid-frame lsf */ - if ( st->lpcQuantization && st->acelp_cfg.midLpc && st->core == ACELP_CORE && st->rate_switching_reset == 0 ) - { - midlsf_dec_flt( &lsf[0], &lsf[M], param_lpc[nb_indices], lsfmid, M, coder_type, &( st->mid_lsf_int ), st->prev_bfi, st->safety_net ); - - reorder_lsf( lsfmid, LSF_GAP_MID, M, st->sr_core ); - lsf2lsp( lsfmid, lspmid, M, st->sr_core ); - } - - - return; -} -#endif diff --git a/lib_dec/dlpc_stoch_fx.c b/lib_dec/dlpc_stoch_fx.c index af0e9ee3a..d4f3daeb8 100644 --- a/lib_dec/dlpc_stoch_fx.c +++ b/lib_dec/dlpc_stoch_fx.c @@ -9,7 +9,6 @@ #include "options.h" #include "basop_util.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /* Constants */ #define M 16 @@ -92,4 +91,3 @@ void lpc_unquantize_fx( return; } -#endif diff --git a/lib_dec/er_dec_acelp.c b/lib_dec/er_dec_acelp.c index 7d49094ad..68731d8f1 100644 --- a/lib_dec/er_dec_acelp.c +++ b/lib_dec/er_dec_acelp.c @@ -40,685 +40,3 @@ #include #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * con_acelp() - * - * Concealment function for ACELP and TD-TCX - *--------------------------------------------------------------------*/ - -void con_acelp( - float A[], /* i : coefficients NxAz[M+1] */ - const int16_t coder_type, /* i : ACELP coder type */ - float synth[], /* i/o: synthesis */ - int16_t *pT, /* o : pitch for all subframe */ - float *pgainT, /* o : pitch gain for all subfr */ - float stab_fac, /* i : stability of isf */ - Decoder_State *st, /* i/o: coder memory state */ - float pitch_buffer[], /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - int16_t i, i_subfr, L_frame, T0; - float tmp_deemph; - float mem_syn[M], mem_syn2[M], mem[M], *syn; - float *noise_buf; - float *exc, *harmonic_exc_buf, buf[L_EXC_MEM_DEC + M + L_FRAME16k + L_FRAME16k / 2], *p_A; - float pitch_buf[NB_SUBFR16k]; - float alpha = 0.0f; - float step, gain, gainCNG, gain_inov, ftmp; - float *pt_exc, tmp_tc, predPitchLag; - float pc = 0.f; - int16_t extrapolationFailed, tmpSeed, Tc; - float *pt1_exc; - float *w = st->hTcxCfg->tcx_mdct_window_flt; - int16_t W1, W2, j; - int16_t l_fir_fer = L_FIR_FER; - float lpFiltAdapt[3]; - float hp_filt[3]; - int16_t nSubframes; - float exc_unv[L_FRAME16k + L_FRAME16k / 2]; - float syn_unv[L_FRAME16k + L_FRAME16k / 2]; - float mem_syn_unv[M]; - float gain_lpc[NB_SUBFR16k]; - float h1[L_SUBFR + 1]; - float gainSynthDeemph; - float tmp = 0.f; - int16_t fUseExtrapolatedPitch; - - /* Framing parameters */ - - L_frame = st->L_frame; - - fUseExtrapolatedPitch = 0; - extrapolationFailed = 1; - - /*------------------------------------------------------------------------* - * Initialize buffers * - *------------------------------------------------------------------------*/ - - /* set ACELP synthesis memory */ - mvr2r( st->mem_syn2, mem_syn, M ); - - /* set excitation memory*/ - harmonic_exc_buf = buf + M; - exc = harmonic_exc_buf + L_EXC_MEM_DEC; - mvr2r( st->old_exc, harmonic_exc_buf, L_EXC_MEM_DEC ); - exc[L_frame] = 0.0f; - - /*------------------------------------------------------------------------* - * PLC: [ACELP:Extrapolate Pitch Lag] - *------------------------------------------------------------------------*/ - - if ( st->flagGuidedAcelp == 1 ) - { - T0 = st->guidedT0; - } - - pitch_pred_linear_fit_flt( st->nbLostCmpt, st->last_good, st->old_pitch_buf, &st->old_fpitch_float, &predPitchLag, st->pit_min, st->pit_max, st->mem_pitch_gain_float, 0, st->plc_use_future_lag, &extrapolationFailed, st->nb_subfr ); - T0 = (int16_t) ( predPitchLag + 0.5f ); - - if ( extrapolationFailed ) - { - /*------------------------------------------------------------------------* - * - Construct adaptive codebook from side information * - *------------------------------------------------------------------------*/ - - if ( st->flagGuidedAcelp == 0 ) - { - nSubframes = 0; - } - else - { - nSubframes = 2; - /* Construct adaptive codebook with T0, T0_frac, T0_res, gain_pit for 2 sub-frames */ - for ( i = 0; i < 2 * L_SUBFR; i++ ) - { - exc[i] = exc[i - st->guidedT0]; - } - } - } - else - { - nSubframes = 0; - } - - - if ( nSubframes > 0 ) - { - tmp_tc = (float) st->guidedT0; /* take the transmit pitch*/ - } - else - { - tmp_tc = st->old_fpitch_float; /* take the previous frame last pitch*/ - } - - /* PLC: [ACELP: Fade-out] - * PLC: calculate damping factor */ - alpha = Damping_fact_flt( coder_type, st->nbLostCmpt, st->last_good, stab_fac, &( st->lp_gainp ), 0 ); - - if ( st->nbLostCmpt == 1 ) - { - st->cummulative_damping_float = 1.0f; - } - else - { - st->cummulative_damping_float *= alpha; - } - - /*-----------------------------------------------------------------* - * PLC: [ACELP: adaptive codebook] - * PLC: Construct the harmonic part of excitation - *-----------------------------------------------------------------*/ - - if ( st->last_good >= UNVOICED_TRANSITION ) - { - - /*---------------------------------------------------------------* - * Last pitch cycle of the previous frame is repeatedly copied. * - *---------------------------------------------------------------*/ - - Tc = (int16_t) ( tmp_tc + 0.5f ); - - if ( ( T0 > 0 ) && ( T0 != Tc ) && ( abs( T0 - Tc ) < 0.15f * Tc ) && extrapolationFailed == 0 ) - { - fUseExtrapolatedPitch = 1; - } - - if ( st->enableGplc ) - { - pt_exc = &exc[nSubframes * L_SUBFR]; - } - else - { - pt_exc = exc; - } - pt1_exc = pt_exc - Tc; - - if ( fUseExtrapolatedPitch != 0 ) - { - /* Required because later pt1_exc[1] used in filtering points to exc[0]. To make it safe also for GPL pt_exc is used instead of exc */ - pt_exc[0] = 0; - pt_exc = harmonic_exc_buf; - assert( pt_exc < pt1_exc - 1 ); - } - - if ( st->nbLostCmpt == 1 ) - { - /* pitch cycle is first low-pass filtered */ - /*get filter coefficients*/ - genPlcFiltBWAdap( st->sr_core, &lpFiltAdapt[0], 0, st->cummulative_damping_float ); - for ( i = 0; i < Tc; i++ ) - { - *pt_exc++ = ( lpFiltAdapt[0] * pt1_exc[-1] + lpFiltAdapt[1] * pt1_exc[0] + lpFiltAdapt[2] * pt1_exc[1] ); - pt1_exc++; - } - } - else - { - /* copy the first pitch cycle without low-pass filtering */ - for ( i = 0; i < Tc; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - } - - if ( fUseExtrapolatedPitch != 0 ) - { - pt1_exc = harmonic_exc_buf; - } - - for ( i = 0; i < L_frame + ( 1 - nSubframes ) * L_SUBFR - Tc; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - - /*-------------------------------------------------------* - * PLC: [ACELP: adaptive codebook] - * PLC: Resync pulse positions. - *-------------------------------------------------------*/ - - if ( nSubframes > 0 ) - { - pitch_buf[0] = (float) st->guidedT0; - pitch_buf[1] = (float) st->guidedT0; - } - - if ( nSubframes > 0 ) - { - pitch_buf[3] = pitch_buf[2] = pitch_buf[1]; /* do not resync on second half of frame */ - if ( st->nb_subfr == 5 ) - { - /* for guidedacelp cases and nSubframes=2, set pitch_buf[4] to avoid memory_access issues in post_decoder() */ - pitch_buf[4] = pitch_buf[3]; - } - } - else - { - if ( fUseExtrapolatedPitch != 0 ) - { - get_subframe_pitch_flt( st->nb_subfr, st->old_fpitch_float, predPitchLag, pitch_buf ); - - PulseResynchronization( harmonic_exc_buf, exc, L_frame, st->nb_subfr, st->old_fpitch_float, predPitchLag ); - } - else - { - set_f( pitch_buf, st->old_fpitch_float, st->nb_subfr ); - } - } - - /*------------------------------------------------------------* - * PLC: [ACELP: adaptive codebook] - * PLC: Create the harmonic part needed for the overlap-add. - *------------------------------------------------------------*/ - - pt_exc = exc + L_frame; - pt1_exc = pt_exc - ( ( T0 == 0 ) ? Tc : T0 ); - - for ( i = 0; i < L_frame / 2; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - - /*-------------------------------------------------------* - * PLC: [ACELP: adaptive codebook] - * PLC: update the floating point pitch for consecutive loss - *-------------------------------------------------------*/ - - if ( fUseExtrapolatedPitch != 0 ) - { - - if ( st->flagGuidedAcelp == 1 ) - { - st->old_fpitch_float = (float) T0; - } - else - { - st->old_fpitch_float = predPitchLag; - } - } - - /*-------------------------------------------------------* - * PLC: [ACELP: adaptive BPF] - * PLC: Accommodate the BPF - *-------------------------------------------------------*/ - - st->bpf_gain_param = 3; /*full BPF*/ - - /*-------------------------------------------------------* - * PLC: [ACELP: adaptive codebook] - * PLC: Calculate the initial gain and fade out step. - *-------------------------------------------------------*/ - - pc = (float) fabs( pitch_buf[3] + pitch_buf[2] - pitch_buf[1] - pitch_buf[0] ) * 256.0f / (float) L_frame; - - if ( ( st->last_good <= UNVOICED_TRANSITION ) && ( coder_type == GENERIC ) && ( pc > 6 ) ) - { - gain = 0.0f; - st->lp_gainp = 0.0f; - } - else - { - gain = 1.0f; /* start-of-the-frame gain */ - st->lp_gainp = alpha; - } - - step = ( 1.0f / L_frame ) * ( gain - st->lp_gainp ); - - /*-------------------------------------------------------* - * PLC: [ACELP: Fade-out] - * Apply fade out - *-------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < st->nb_subfr; i_subfr++ ) - { - pgainT[i_subfr] = gain; - - for ( i = i_subfr * L_SUBFR; i < ( i_subfr + 1 ) * L_SUBFR; i++ ) - { - exc[i] *= gain; - gain -= step; - } - } - - for ( ; i < L_frame + ( L_frame / 2 ); i++ ) - { - exc[i] *= gain; - gain -= step; - } - - for ( i = 0; i < st->nb_subfr; i++ ) - { - pT[i] = (int16_t) ( pitch_buf[i] + 0.5f ); - pitch_buffer[i] = pitch_buf[i]; - } - - /* update old exc without random part*/ - mvr2r( harmonic_exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); - } - else - { - /* No harmonic part */ - set_zero( &exc[0], L_frame + L_frame / 2 ); - - for ( i = 0; i < st->nb_subfr; i++ ) - { - pitch_buf[i] = st->pit_max; - pgainT[i] = 0.f; - pT[i] = L_SUBFR; - pitch_buffer[i] = L_SUBFR; - } - - st->bpf_gain_param = 0; /*no BPF*/ - } - - /*-----------------------------------------------------------------* - * Construct the random part of excitation - *-----------------------------------------------------------------*/ - noise_buf = buf; - tmpSeed = st->seed_acelp; - - for ( i = 0; i < L_frame + l_fir_fer - 1; i++ ) - { - noise_buf[i] = (float) own_random( &tmpSeed ); - } - st->seed_acelp = tmpSeed; - - for ( ; i < L_frame + ( L_frame / 2 ) + l_fir_fer - 1; i++ ) - { - noise_buf[i] = (float) own_random( &tmpSeed ); - } - - /*get filter coefficients*/ - genPlcFiltBWAdap( st->sr_core, &hp_filt[0], 1, st->cummulative_damping_float ); - - /* PLC: [ACELP: Fade-out] - * PLC: retrieve background level */ - tmp = 1.0f; - gainSynthDeemph = getLevelSynDeemph( &( tmp ), A, L_SUBFR, st->preemph_fac_float, L_frame / L_SUBFR ); - gainCNG = st->cngTDLevel_float / gainSynthDeemph; - - gain = st->lp_gainc; /* start-of-the-frame gain */ - - ftmp = 2.0f * gain; - - if ( gainCNG > ftmp ) - { - gainCNG = ftmp; - } - - st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; /* end-of-the-frame gain */ - - if ( ( st->last_good == UNVOICED_TRANSITION ) && ( coder_type == GENERIC ) ) - { - st->lp_gainc = gainCNG; - } - - highPassFiltering( st->last_good, L_frame + l_fir_fer / 2, noise_buf, hp_filt, l_fir_fer ); - - /* Find energy normalization factor */ - pt_exc = noise_buf + l_fir_fer / 2; - gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); - - /* PLC: [ACELP: Fade-out] - * PLC: Linearly attenuate the gain through the frame */ - step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); - - if ( ( st->last_good == UNVOICED_CLAS ) && ( coder_type != UNVOICED ) ) /* Attenuate somewhat on unstable unvoiced */ - { - gain_inov *= 0.8f; - } - - if ( st->last_good >= UNVOICED_TRANSITION ) - { - float tilt_code; - - tilt_code = (float) ( 0.10f * ( 1.0f + st->voice_fac_float ) ); - gain_inov *= ( 1.f - tilt_code ); - } - - pt_exc = noise_buf; - - /* non-causal ringing of the FIR filter */ - - for ( i = 0; i < l_fir_fer / 2; i++ ) - { - *pt_exc++ *= ( gain_inov * gain ); - } - - /* Actual filtered random part of excitation */ - - for ( i = 0; i < L_frame; i++ ) - { - *pt_exc++ *= ( gain_inov * gain ); - gain -= step; - } - - for ( i = 0; i < ( L_frame / 2 ) + l_fir_fer / 2; i++ ) - { - *pt_exc++ *= ( gain_inov * gain ); - } - - st->past_gcode_float = gain; - - if ( st->last_good < UNVOICED_TRANSITION ) - { - mvr2r( noise_buf + l_fir_fer / 2, exc, L_frame + L_frame / 2 ); - mvr2r( harmonic_exc_buf + L_frame, st->old_exc, L_EXC_MEM_DEC ); - mvr2r( exc, exc_unv, L_frame + ( L_frame / 2 ) ); /* Update exc_unv */ - } - else - { - mvr2r( noise_buf + l_fir_fer / 2, exc_unv, L_frame + ( L_frame / 2 ) ); /* Update exc_unv */ - } - - /* Compute total excitation in noisebuffer to save memories */ - if ( st->last_good >= UNVOICED_TRANSITION ) - { - for ( i = 0; i < L_frame + 1; i++ ) - { - noise_buf[i] = exc[i] + exc_unv[i]; - } - } - else - { - noise_buf = exc_unv; - } - - if ( st->hBWE_TD != NULL ) - { - if ( L_frame == L_FRAME ) - { - interp_code_5over2( noise_buf, bwe_exc, L_frame ); - set_f( voice_factors, st->last_voice_factor, NB_SUBFR ); - } - else - { - interp_code_4over2( noise_buf, bwe_exc, L_frame ); - set_f( voice_factors, st->last_voice_factor, NB_SUBFR16k ); - } - } - - /*----------------------------------------------------------* - * - compute the synthesis speech * - *----------------------------------------------------------*/ - - /* Init syn buffer */ - syn = buf + M; - mvr2r( st->mem_syn2, buf, M ); - - if ( st->nbLostCmpt == 1 ) - { - - if ( st->last_good < UNVOICED_TRANSITION ) - { - mvr2r( st->mem_syn2, mem_syn_unv, M ); - } - else - { - set_zero( mem_syn_unv, M ); - } - } - else - { - mvr2r( st->mem_syn_unv_back_float, mem_syn_unv, M ); - } - - /* voiced synth */ - - if ( st->last_good >= UNVOICED_TRANSITION ) - { - p_A = A; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - tmp = 0; - set_zero( h1, L_SUBFR + 1 ); - set_zero( mem, M ); - h1[0] = 1.0f; - syn_filt( p_A, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ - deemph( h1, st->preemph_fac_float, L_SUBFR, &tmp ); /* impulse response of deemph */ - /* impulse response level = gain introduced by synthesis+deemphasis */ - gain_lpc[i_subfr / L_SUBFR] = 1.f / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); - p_A += ( M + 1 ); - } - - j = 0; - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i_subfr + i] *= st->last_gain_syn_deemph_float * gain_lpc[j]; - } - j++; - } - - for ( i = L_frame; i < L_frame + L_frame / 2; i++ ) - { - exc[i] *= st->last_gain_syn_deemph_float * gain_lpc[3]; - } - p_A = A; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - syn_filt( p_A, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, mem_syn, 1 ); - p_A += ( M + 1 ); - } - - mvr2r( mem_syn, mem_syn2, M ); - - /* synthesize ola*/ - syn_filt( p_A - ( M + 1 ), M, &exc[L_frame], &syn[L_frame], ( L_frame / 2 ), mem_syn2, 0 ); - } - - /* unvoiced synth */ - tmp = 0; - p_A = st->Aq_cng_float; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - set_zero( h1, L_SUBFR + 1 ); - set_zero( mem, M ); - h1[0] = 1.0f; - syn_filt( p_A, M, h1, h1, L_SUBFR, mem, 0 ); /* impulse response of LPC */ - deemph( h1, st->preemph_fac_float, L_SUBFR, &tmp ); /* impulse response of deemph */ - /* impulse response level = gain introduced by synthesis+deemphasis */ - gain_lpc[i_subfr / L_SUBFR] = 1.f / (float) sqrt( dotp( h1, h1, L_SUBFR ) ); - p_A += ( M + 1 ); - } - - j = 0; - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc_unv[i_subfr + i] *= st->last_gain_syn_deemph_float * gain_lpc[j]; - } - j++; - } - - for ( i = L_frame; i < L_frame + L_frame / 2; i++ ) - { - exc_unv[i] *= st->last_gain_syn_deemph_float * gain_lpc[j - 1]; - } - p_A = st->Aq_cng_float; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - syn_filt( p_A, M, &exc_unv[i_subfr], &syn_unv[i_subfr], L_SUBFR, mem_syn_unv, 1 ); - p_A += ( M + 1 ); - } - - mvr2r( mem_syn_unv, st->mem_syn_unv_back_float, M ); - - if ( st->last_good < UNVOICED_TRANSITION ) - { - mvr2r( mem_syn_unv, mem_syn, M ); - } - - /* unvoiced for ola */ - syn_filt( p_A - ( M + 1 ), M, &exc_unv[i_subfr], &syn_unv[i_subfr], ( L_frame / 2 ), mem_syn_unv, 0 ); - - /* add separate synthesis buffers */ - if ( st->last_good >= UNVOICED_TRANSITION ) - { - for ( i = 0; i < L_frame; i++ ) - { - syn[i] += syn_unv[i]; - } - } - else - { - mvr2r( syn_unv, syn, L_frame + L_frame / 2 ); - } - - - /* update buffer for the classification */ - FEC_clas_estim( syn, pitch_buf, st->L_frame, coder_type, st->codec_mode, st->mem_syn_clas_estim, &( st->clas_dec ), &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, 0, 1, st->preemph_fac_float, st->tcxonly, st->last_core_brate, -1 ); - - /* Update Pitch Lag memory */ - mvr2r( &st->old_pitch_buf[L_frame / L_SUBFR], st->old_pitch_buf, L_frame / L_SUBFR ); - mvr2r( pitch_buf, &st->old_pitch_buf[L_frame / L_SUBFR], L_frame / L_SUBFR ); - - /*updating enr_old parameters*/ - fer_energy( L_frame, st->last_good, syn, tmp_tc, &( st->enr_old ), 1 ); - - /* update ACELP synthesis memory */ - mvr2r( mem_syn, st->mem_syn2, M ); - mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - - /* Deemphasis and output synth */ - tmp_deemph = st->syn_float[M]; - deemph( syn, st->preemph_fac_float, L_frame + L_frame / 2, &tmp_deemph ); - - mvr2r( syn, synth, L_frame ); - mvr2r( syn + L_frame - L_frame / 2, st->hTcxDec->old_syn_Overl_float, L_frame / 2 ); - - - /* save last half frame if next frame is TCX */ - mvr2r( syn + L_frame, st->hTcxDec->syn_Overl_TDAC_float, L_frame / 2 ); - mvr2r( syn + L_frame - M - 1, st->syn_float, 1 + M ); - - /* update old_Aq */ - mvr2r( p_A - ( M + 1 ), st->old_Aq_12_8, M + 1 ); - - mvr2r( syn + L_frame, st->hTcxDec->syn_Overl_float, L_frame / 2 ); - - W1 = st->hTcxCfg->tcx_mdct_window_length; - W2 = st->hTcxCfg->tcx_mdct_window_length / 2; - - st->hTcxCfg->tcx_curr_overlap_mode = FULL_OVERLAP; - { - int16_t n = (int16_t) ( (float) L_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - mvr2r( syn + L_frame - n, st->hHQ_core->old_outLB, L_frame - n ); - - for ( i = 0; i < W1; i++ ) - { - st->hHQ_core->old_outLB[i + n] *= w[W1 - 1 - i] * w[W1 - 1 - i]; - } - set_zero( &st->hHQ_core->old_outLB[W1 + n], n ); - } - - /* create aliasing and windowing */ - - for ( i = 0; i < W1; i++ ) - { - buf[i] = st->hTcxDec->syn_Overl_TDAC_float[i] * w[W1 - 1 - i]; - } - - for ( i = 0; i < W2; i++ ) - { - st->hTcxDec->syn_Overl_TDAC_float[i] = buf[i] + buf[W1 - 1 - i]; /* A-D */ - } - - for ( i = 0; i < W2; i++ ) - { - st->hTcxDec->syn_Overl_TDAC_float[W2 + i] = buf[W2 + i] + buf[W1 - 1 - W2 - i]; /* B-C */ - } - - for ( i = 0; i < W1; i++ ) - { - st->hTcxDec->syn_Overl_TDAC_float[i] *= w[W1 - 1 - i]; - } - - /* update memory for full band */ - lerp_flt( st->hTcxDec->syn_Overl_TDAC_float, st->hTcxDec->syn_Overl_TDACFB_float, st->hTcxDec->L_frameTCX / 2, L_frame / 2 ); - lerp_flt( st->hTcxDec->syn_Overl_float, st->hTcxDec->syn_OverlFB_float, st->hTcxDec->L_frameTCX / 2, L_frame / 2 ); - lerp_flt( st->hHQ_core->old_outLB, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX, L_frame ); - - /* copy total excitation exc2 as 16kHz for acelp mode1 decoding */ - if ( st->hWIDec != NULL ) - { - lerp_flt( exc, st->hWIDec->old_exc2, L_EXC_MEM, L_frame ); - lerp_flt( syn, st->hWIDec->old_syn2, L_EXC_MEM, L_frame ); - } - st->bfi_pitch = pitch_buf[st->nb_subfr - 1]; - st->bfi_pitch_frame = L_frame; - - return; -} -#endif diff --git a/lib_dec/er_dec_acelp_fx.c b/lib_dec/er_dec_acelp_fx.c index 6ef740761..f61e782e3 100644 --- a/lib_dec/er_dec_acelp_fx.c +++ b/lib_dec/er_dec_acelp_fx.c @@ -11,7 +11,6 @@ #include "prot_fx.h" #include "basop_util.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED extern const Word16 T_DIV_L_Frame[]; /*0Q15 * 2^-7 */ /*Table 2^7 * 1/L_frame */ @@ -1218,4 +1217,3 @@ static void memsynPrecission_fx( Word16 nbLostCmpt, Word16 *mem_syn /*Qx*/, Word } } } -#endif diff --git a/lib_dec/er_dec_tcx.c b/lib_dec/er_dec_tcx.c index cf05eaf57..2d8fdd56a 100644 --- a/lib_dec/er_dec_tcx.c +++ b/lib_dec/er_dec_tcx.c @@ -43,612 +43,3 @@ #include "prot.h" #include "rom_dec.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * con_tcx() - * - * - *-----------------------------------------------------------------*/ - -void con_tcx( - Decoder_State *st, /* i/o: coder memory state */ - float synth[], /* i/o: synth[] */ - const float coh, /* i : coherence of stereo signal */ - int16_t *noise_seed, /* i/o: noise seed for stereo */ - const int16_t only_left, /* i : TD-PLC only in left channel */ - const float A_cng[] /* i : CNG LP filter coefficients */ -) -{ - int16_t i, n, L_frame, L_subfr, fLowPassFilter, T0; - int16_t offset = 0; - int16_t mem_syn_r_size_old, mem_syn_r_size_new; - float *noise; - float mem_syn[M], *syn; - float *exc, buf[OLD_EXC_SIZE_DEC + L_FRAME_MAX + L_FRAME_MAX / NB_SUBFR + 1 + L_FRAME_MAX / 2]; - float pre_emph_buf; - float pitch_buf[NB_SUBFR16k], hp_filt[L_FIR_FER2]; - float predPitchLag, alpha = 0.0f; - float tmp_deemph, step, gain, gainCNG, gain_inov, ftmp; - float *pt_exc, *pt1_exc; - int16_t Tc, tmpSeed; - int16_t fUseExtrapolatedPitch = 0; - float *ana_window; - float r[M + 1], A_local[M + 1], mem; - float *w; - int16_t W1, W2; - int16_t extrapolationFailed = 1; - float gainSynthDeemph; - float tmp = 0.f; - float old_pitch_buf[2 * NB_SUBFR16k + 2]; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - /* Framing parameters */ - L_frame = hTcxDec->L_frameTCX; - L_subfr = hTcxDec->L_frameTCX / st->nb_subfr; - w = st->hTcxCfg->tcx_mdct_windowFB_flt; - W1 = st->hTcxCfg->tcx_mdct_window_lengthFB; - W2 = st->hTcxCfg->tcx_mdct_window_lengthFB / 2; - - /* take the previous frame last pitch */ - Tc = (int16_t) ( st->old_fpitchFB_float + 0.5f ); - - set_zero( buf, OLD_EXC_SIZE_DEC + L_FRAME_MAX + L_FRAME_MAX / NB_SUBFR + 1 + L_FRAME_MAX / 2 ); - - v_multc( st->old_pitch_buf, (float) L_frame / st->L_frame, old_pitch_buf, 2 * NB_SUBFR16k + 2 ); - - /* set excitation memory*/ - exc = buf + OLD_EXC_SIZE_DEC; - - tmp_deemph = synth[-1]; - pre_emph_buf = synth[-1]; - - if ( st->nbLostCmpt == 1 || hTcxDec->tcxConceal_recalc_exc ) - { - /* apply pre-emphasis to the signal */ - mem = synth[-( L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M ) - 1]; - - preemph( &synth[-( L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M )], st->preemph_fac_float, L_frame / 2 + hTcxDec->pit_max_TCX + 2 * M, &mem ); - st->lp_gainc = 0.0f; - - st->lp_gainp = get_gain_flt( synth - 2 * L_subfr, synth - 2 * L_subfr - Tc, 2 * L_subfr, NULL ); - - if ( st->lp_gainp < 0.0f ) - { - st->lp_gainp = 0.0f; - } - - if ( st->lp_gainp > 1.0f ) - { - st->lp_gainp = 1.0f; - } - ana_window = buf; - ham_cos_window_flt( ana_window, 3 * L_frame / 4, L_frame / 4 ); - - /* Autocorrelation */ - autocorr( &( synth[-L_frame - 1] ), r, M, L_frame, ana_window, 0, 0, 0 ); - - /* Lag windowing */ - lag_wind_flt( r, M, st->output_Fs, LAGW_STRONG ); - - /* Levinson Durbin */ - lev_dur( A_local, r, M, NULL ); - - /* copy for multiple frame loss */ - mvr2r( A_local, st->old_Aq_12_8, M + 1 ); - - /* Residu */ - assert( ( 2 * L_subfr + Tc + 1 + M ) <= st->hTcxDec->old_synth_lenFB ); - residu( A_local, M, &( synth[-( 2 * L_subfr + Tc + 1 + M )] ), &( exc[-( 2 * L_subfr + Tc + 1 + M )] ), 2 * L_subfr + Tc + 1 + M ); - } - else - { - /* apply pre-emphasis to the signal */ - mem = synth[-L_frame - 1]; - - preemph( &synth[-L_frame], st->preemph_fac_float, L_frame, &mem ); - mvr2r( st->old_Aq_12_8, A_local, M + 1 ); - offset = L_frame / 2; - - if ( st->last_good >= UNVOICED_TRANSITION ) - { - i = max( Tc - L_frame / 2, 0 ); - mvr2r( st->hTcxDec->old_excFB, &( exc[-i] ), offset + i ); - } - else - { - mvr2r( st->hTcxDec->old_excFB, &( exc[-2 * L_subfr] ), 2 * L_subfr + offset ); - } - } - - /*-----------------------------------------------------------------* - * PLC: Construct the harmonic part of excitation - *-----------------------------------------------------------------*/ - - if ( st->last_good != UNVOICED_CLAS && !( ( st->last_good == UNVOICED_TRANSITION ) && ( st->core_ext_mode == GENERIC ) ) ) - { - if ( st->nbLostCmpt == 1 || hTcxDec->tcxConceal_recalc_exc ) - { - st->lp_gainc = 0.0f; - - for ( i = 0; i < 2 * L_subfr; i++ ) - { - st->lp_gainc += ( exc[i - 2 * L_subfr] - st->lp_gainp * exc[i - 2 * L_subfr - Tc] ) * ( exc[i - 2 * L_subfr] - st->lp_gainp * exc[i - 2 * L_subfr - Tc] ); - } - st->lp_gainc = (float) sqrt( st->lp_gainc / ( 2.0f * L_subfr ) ); - } - if ( ( st->nbLostCmpt == 1 ) && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy ) - { - predPitchLag = ( hTcxLtpDec->tcxltp_pitch_int + hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max ) * (float) hTcxDec->L_frameTCX / (float) st->L_frame; - T0 = (int16_t) ( predPitchLag + 0.5f ); - - if ( ( T0 > 0 ) && ( T0 != Tc ) && ( (float) abs( T0 - Tc ) < 0.15f * Tc ) ) - { - fUseExtrapolatedPitch = 1; - } - } - else - { - pitch_pred_linear_fit_flt( st->nbLostCmpt, st->last_good, old_pitch_buf, &( st->old_fpitchFB_float ), &predPitchLag, hTcxDec->pit_min_TCX, hTcxDec->pit_max_TCX, st->mem_pitch_gain_float, st->output_Fs > 25600, st->plc_use_future_lag, &extrapolationFailed, st->nb_subfr ); - - T0 = (int16_t) ( predPitchLag + 0.5f ); - - if ( ( T0 > 0 ) && ( T0 != Tc ) && ( (float) abs( T0 - Tc ) < 0.15f * Tc ) && extrapolationFailed == 0 ) - { - fUseExtrapolatedPitch = 1; - } - } - - fLowPassFilter = 0; - pt_exc = exc + offset; - - pt1_exc = pt_exc - Tc; - - if ( fUseExtrapolatedPitch != 0 ) - { - pt_exc = buf; - } - - if ( st->stab_fac < 1 && st->nbLostCmpt == 1 ) - { - /* pitch cycle is first low-pass filtered */ - for ( i = 0; i < Tc; i++ ) - { - if ( st->output_Fs <= 16000 ) - { - *pt_exc++ = ( 0.0053f * pt1_exc[-5] + 0.0000f * pt1_exc[-4] + -0.0440f * pt1_exc[-3] + 0.0000f * pt1_exc[-2] + 0.2637f * pt1_exc[-1] + 0.5500f * pt1_exc[0] + 0.2637f * pt1_exc[1] + 0.0000f * pt1_exc[2] + -0.0440f * pt1_exc[3] + 0.0000f * pt1_exc[4] + 0.0053f * pt1_exc[5] ); - } - else /*(st->output_Fs >= 32000)*/ - { - *pt_exc++ = ( -0.0053f * pt1_exc[-5] + -0.0037f * pt1_exc[-4] + -0.0140f * pt1_exc[-3] + 0.0180f * pt1_exc[-2] + 0.2668f * pt1_exc[-1] + 0.4991f * pt1_exc[0] + 0.2668f * pt1_exc[1] + 0.0180f * pt1_exc[2] + -0.0140f * pt1_exc[3] + -0.0037f * pt1_exc[4] + -0.0053f * pt1_exc[5] ); - } - pt1_exc++; - } - fLowPassFilter = 1; - } - else - { - /* copy the first pitch cycle without low-pass filtering */ - for ( i = 0; i < Tc; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - fLowPassFilter = 1; - } - - if ( fUseExtrapolatedPitch != 0 ) - { - pt1_exc = buf; - } - - for ( i = 0; i < L_frame - fLowPassFilter * Tc + L_subfr; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - - if ( fUseExtrapolatedPitch != 0 ) - { - get_subframe_pitch_flt( st->nb_subfr, st->old_fpitch_float, predPitchLag * st->L_frame / L_frame, pitch_buf ); - - PulseResynchronization( buf, exc, L_frame, st->nb_subfr, st->old_fpitchFB_float, predPitchLag ); - } - else - { - set_f( pitch_buf, st->old_fpitch_float, st->nb_subfr ); - } - - if ( st->nbLostCmpt == 1 ) - { - pt_exc = exc + L_frame; - pt1_exc = pt_exc - ( ( T0 == 0 ) ? Tc : T0 ); - - for ( i = 0; i < L_frame / 2; i++ ) - { - *pt_exc++ = *pt1_exc++; - } - } - - if ( fUseExtrapolatedPitch != 0 ) - { - st->old_fpitchFB_float = predPitchLag; - } - st->bpf_gain_param = 0; - - /* PLC: calculate damping factor */ - alpha = Damping_fact_flt( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), ACELP_CORE ); - - if ( st->nbLostCmpt == 1 ) - { - st->cummulative_damping_float = 1; - } - else - { - st->cummulative_damping_float *= alpha; - } - - gain = 1.0f; - if ( st->rf_frame_type == RF_TCXTD1 && st->use_partial_copy == 1 ) - { - gain = 0.5f; - } - - step = ( 1.0f / ( L_frame + ( L_frame / 2 ) ) ) * ( gain - alpha ); - - /* PLC: Apply fade out */ - for ( i = offset; i < L_frame + ( L_frame / 2 ); i++ ) - { - exc[i] *= gain; - gain -= step; - } - - offset = max( ( (int16_t) ( st->old_fpitchFB_float + 0.5f ) ) - L_frame / 2, 0 ); - mvr2r( exc + L_frame - offset, st->hTcxDec->old_excFB, L_frame / 2 + offset ); - - /* copy old_exc as 16kHz for acelp decoding */ - if ( st->nbLostCmpt == 1 ) - { - lerp_flt( exc - L_frame / 2, st->old_exc, L_EXC_MEM_DEC, L_frame + L_frame / 2 ); - } - else - { - mvr2r( st->old_exc + L_FRAME16k, st->old_exc, L_FRAME16k / 2 ); - lerp_flt( exc, st->old_exc + L_FRAME16k / 2, L_FRAME16k, L_frame ); - } - } - else - { - /* No harmonic part */ - set_zero( &exc[0], L_frame + L_frame / 2 ); - - if ( st->nbLostCmpt == 1 ) - { - st->lp_gainc = 0.0f; - - for ( i = 0; i < 2 * L_subfr; i++ ) - { - st->lp_gainc += ( exc[i - 2 * L_subfr] ) * ( exc[i - 2 * L_subfr] ); - } - st->lp_gainc = (float) sqrt( st->lp_gainc / ( 2.0f * L_subfr ) ); - } - - set_f( pitch_buf, (float) L_SUBFR, st->nb_subfr ); - - /* PLC: calculate damping factor */ - alpha = Damping_fact_flt( st->core_ext_mode, st->nbLostCmpt, st->last_good, st->stab_fac, &( st->lp_gainp ), ACELP_CORE ); - } - - /*-----------------------------------------------------------------* - * Construct the random part of excitation - *-----------------------------------------------------------------*/ - - if ( coh != -1.f ) - { - int16_t tmpSeed1; - float alpha_coh; - float random1, random2; - - tmpSeed1 = *noise_seed; - noise = buf; - - alpha_coh = sqrtf( ( 1 - coh ) / ( 1 + coh ) ); - if ( st->idchan == 1 ) - { - alpha_coh = -alpha_coh; - } - - for ( i = 0; i < L_frame + L_FIR_FER2 - 1; i++ ) - { - random1 = (float) own_random( &tmpSeed1 ); - random2 = (float) own_random( &tmpSeed1 ); - noise[i] = random1 + alpha_coh * random2; - } - - if ( st->idchan == 1 || only_left ) - { - *noise_seed = tmpSeed1; - } - - for ( ; i < L_frame + ( L_frame / 2 ) + 2 * L_FIR_FER2; i++ ) - { - random1 = (float) own_random( &tmpSeed1 ); - random2 = (float) own_random( &tmpSeed1 ); - noise[i] = random1 + alpha_coh * random2; - } - } - else - { - tmpSeed = st->seed_acelp; - noise = buf; - - for ( i = 0; i < L_frame + L_FIR_FER2 - 1; i++ ) - { - noise[i] = (float) own_random( &tmpSeed ); - } - st->seed_acelp = tmpSeed; - - for ( ; i < L_frame + ( L_frame / 2 ) + 2 * L_FIR_FER2; i++ ) - { - noise[i] = (float) own_random( &tmpSeed ); - } - } - - if ( st->last_good == VOICED_CLAS || st->last_good == ONSET ) - { - mem = noise[0]; - preemph( &noise[1], st->output_Fs <= 16000 ? 0.2f : 0.6f, L_frame + ( L_frame / 2 ) + L_FIR_FER2, &mem ); - } - - /* high rate filter tuning */ - if ( st->output_Fs <= 16000 ) - { - for ( i = 0; i < L_FIR_FER2; i++ ) - { - hp_filt[i] = h_high3_16_flt[i]; - } - } - else /*(st->output_Fs==32000)*/ - { - for ( i = 0; i < L_FIR_FER2; i++ ) - { - hp_filt[i] = h_high3_32_flt[i]; - } - } - - if ( st->nbLostCmpt == 1 ) - { - highPassFiltering( st->last_good, L_frame + L_frame / 2 + L_FIR_FER2, noise, hp_filt, L_FIR_FER2 ); - } - else - { - if ( st->last_good > UNVOICED_TRANSITION ) - { - for ( i = 0; i < L_frame + L_frame / 2 + L_FIR_FER2; i++ ) - { - noise[i] = ( 1 - st->cummulative_damping_float ) * noise[i] + st->cummulative_damping_float * dotp( &noise[i], hp_filt, L_FIR_FER2 ); - } - } - } - - /* PLC: [TCX: Fade-out] retrieve background level */ - tmp = 1.0f; - if ( A_cng != NULL ) - { - gainSynthDeemph = getLevelSynDeemph( &( tmp ), A_cng, L_frame / 4, st->preemph_fac_float, 1 ) / 4.f; - } - else - { - gainSynthDeemph = getLevelSynDeemph( &( tmp ), A_local, L_frame / 4, st->preemph_fac_float, 1 ); - } - if ( st->tcxonly ) - { - gainCNG = hTcxDec->CngLevelBackgroundTrace_bfi / gainSynthDeemph; - - if ( st->element_mode == IVAS_CPE_MDCT && A_cng != NULL ) - { - if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME + MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN ) - { - gainCNG = 0.f; - } - else if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME ) - { - gainCNG *= 1.f - (float) ( st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME ) / MDCT_ST_PLC_FADEOUT_TO_ZERO_LEN; - } - } - } - else - { - gainCNG = st->cngTDLevel_float / gainSynthDeemph; - } - gain = st->lp_gainc; /* start-of-the-frame gain */ - - if ( st->rf_frame_type == RF_TCXTD1 && st->use_partial_copy == 1 ) - { - gain *= 0.7f; - } - - ftmp = 2.0f * gain; - - if ( gainCNG > ftmp ) - { - gainCNG = ftmp; - } - - st->lp_gainc = alpha * st->lp_gainc + ( 1.0f - alpha ) * gainCNG; /* end-of-the-frame gain */ - - /* PLC: [TCX: Fade-out] Linearly attenuate the gain through the frame */ - step = ( 1.0f / L_frame ) * ( gain - st->lp_gainc ); - pt_exc = noise + L_FIR_FER2 / 2; - - gain_inov = 1.0f / (float) sqrt( dotp( pt_exc, pt_exc, L_frame ) / L_frame + 0.01f ); /* normalize energy */ - - if ( ( st->last_good == UNVOICED_CLAS ) && ( st->core_ext_mode != UNVOICED ) ) - { - gain_inov *= 0.8f; - } - else if ( !( ( st->last_good == UNVOICED_CLAS ) || ( st->last_good == UNVOICED_TRANSITION ) ) ) - { - gain_inov *= ( 1.1f - 0.75f * st->lp_gainp ); - } - st->lp_gainp = alpha; - pt_exc = noise; /* non-causal ringing of the FIR filter */ - - for ( i = 0; i < L_FIR_FER2 / 2; i++ ) - { - *pt_exc++ *= ( gain_inov * gain ); - } - - for ( i = 0; i < L_frame + L_FIR_FER2 / 2; i++ ) /* Actual filtered random part of excitation */ - { - *pt_exc++ *= ( gain_inov * gain ); - gain -= step; - } - - for ( i = 0; i < ( L_frame / 2 ); i++ ) /* causal ringing of the FIR filter */ - { - *pt_exc++ *= ( gain_inov * gain ); - } - - /*-----------------------------------------------------------------* - * Construct the total excitation - *-----------------------------------------------------------------*/ - - if ( st->last_good >= UNVOICED_TRANSITION ) - { - for ( i = 0; i < ( L_frame + L_frame / 2 ); i++ ) - { - exc[i] += noise[i + ( L_FIR_FER2 / 2 )]; - } - } - else - { - mvr2r( noise + L_FIR_FER2 / 2, exc, L_frame + L_frame / 2 ); - mvr2r( exc + L_frame - 2 * L_subfr, st->hTcxDec->old_excFB, 2 * L_subfr + L_frame / 2 ); - - /* copy old_exc as 16kHz for acelp decoding */ - if ( st->nbLostCmpt == 1 ) - { - lerp_flt( exc, st->old_exc, L_EXC_MEM_DEC, L_frame + L_frame / 2 ); - } - else - { - mvr2r( st->old_exc + L_FRAME16k, st->old_exc, L_FRAME16k / 2 ); - lerp_flt( exc, st->old_exc + L_FRAME16k / 2, L_FRAME16k, L_frame ); - } - } - - /* Update Pitch Lag memory */ - mvr2r( &st->old_pitch_buf[st->nb_subfr], st->old_pitch_buf, st->nb_subfr ); - mvr2r( pitch_buf, &st->old_pitch_buf[st->nb_subfr], st->nb_subfr ); - - /*----------------------------------------------------------* - * - compute the synthesis speech * - *----------------------------------------------------------*/ - - syn = buf + M; - mvr2r( synth - M, buf, M ); - mvr2r( buf, mem_syn, M ); - - if ( A_cng != NULL ) - { - float alpha_delayed; - - alpha_delayed = 1.0f; - if ( st->nbLostCmpt > MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE ) - { - alpha_delayed = Damping_fact_flt( st->core_ext_mode, st->nbLostCmpt - MDCT_ST_PLC_FADEOUT_DELAY_4_LSP_FADE, st->last_good, st->stab_fac, &( st->lp_gainp ), ACELP_CORE ); - } - - if ( st->plcBackgroundNoiseUpdated && alpha_delayed != 1.0f ) - { - float lsp_local[M], lsp_fade[M], alpha_inv; - - alpha_inv = 1.0f - alpha_delayed; - - a2lsp_stab( A_local, lsp_local, lsp_local ); - - for ( i = 0; i < M; i++ ) - { - lsp_fade[i] = alpha_delayed * lsp_local[i] + alpha_inv * st->lspold_cng_float[i]; - } - - lsp2a_stab( lsp_fade, A_local, M ); - } - } - - syn_filt( A_local, M, &exc[0], &syn[0], L_frame + ( L_frame / 2 ), mem_syn, 1 ); - - n = (int16_t) ( (float) L_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - /* update ACELP synthesis memory */ - mem_syn_r_size_old = (int16_t) ( 1.25 * L_frame / 20.f ); - - /* copy mem_syn as 16kHz */ - mem_syn_r_size_new = (int16_t) ( 1.25 * L_FRAME16k / 20.f ); - mvr2r( syn + L_frame - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - lerp_flt( st->mem_syn_r_float + L_SYN_MEM - mem_syn_r_size_old, st->mem_syn_r_float + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - mvr2r( st->mem_syn_r_float + L_SYN_MEM - M, st->mem_syn2, M ); - - /* Deemphasis and output synth and ZIR */ - deemph( syn, st->preemph_fac_float, L_frame + L_frame / 2, &tmp_deemph ); - mvr2r( syn + L_frame - M - 1, st->syn_float, 1 + M ); - - - lerp_flt( syn + L_frame - L_frame / 2, st->hTcxDec->old_syn_Overl_float, st->L_frame / 2, L_frame / 2 ); - mvr2r( syn + L_frame - n, st->hHQ_core->old_out, L_frame - n ); - - for ( i = 0; i < W1; i++ ) - { - st->hHQ_core->old_out[i + n] *= w[W1 - 1 - i] * w[W1 - 1 - i]; - } - set_zero( &st->hHQ_core->old_out[W1 + n], n ); - - mvr2r( syn, synth, L_frame ); - - mvr2r( syn + L_frame, st->hTcxDec->syn_OverlFB_float, L_frame / 2 ); - - /* copy total excitation exc2 as 16kHz for ACELP MODE1 decoding */ - if ( st->hWIDec != NULL ) - { - lerp_flt( exc, st->hWIDec->old_exc2, L_EXC_MEM, L_frame ); - lerp_flt( syn, st->hWIDec->old_syn2, L_EXC_MEM, L_frame ); - } - st->bfi_pitch = pitch_buf[st->nb_subfr - 1]; - st->bfi_pitch_frame = st->L_frame; - - /* create aliasing and windowing need for transition to TCX10/5 */ - mvr2r( syn + L_frame, st->hTcxDec->syn_Overl_TDACFB_float, L_frame / 2 ); - - for ( i = 0; i < W1; i++ ) - { - buf[i] = st->hTcxDec->syn_Overl_TDACFB_float[i] * w[W1 - 1 - i]; - } - - for ( i = 0; i < W2; i++ ) - { - st->hTcxDec->syn_Overl_TDACFB_float[i] = buf[i] + buf[W1 - 1 - i]; /* A-D */ - } - - for ( i = 0; i < W2; i++ ) - { - st->hTcxDec->syn_Overl_TDACFB_float[W2 + i] = buf[W2 + i] + buf[W1 - 1 - W2 - i]; /* B-C */ - } - - for ( i = 0; i < W1; i++ ) - { - st->hTcxDec->syn_Overl_TDACFB_float[i] *= w[W1 - 1 - i]; - } - - st->hTcxCfg->tcx_curr_overlap_mode = FULL_OVERLAP; - synth[-1] = pre_emph_buf; - - /* update memory for low band */ - lerp_flt( st->hTcxDec->syn_OverlFB_float, st->hTcxDec->syn_Overl_float, st->L_frame / 2, L_frame / 2 ); - lerp_flt( st->hTcxDec->syn_Overl_TDACFB_float, st->hTcxDec->syn_Overl_TDAC_float, st->L_frame / 2, L_frame / 2 ); - lerp_flt( st->hHQ_core->old_out, st->hHQ_core->old_outLB, st->L_frame, L_frame ); - - st->old_enr_LP_float = enr_1_Az( A_local, L_SUBFR ); - - return; -} -#endif diff --git a/lib_dec/er_dec_tcx_fx.c b/lib_dec/er_dec_tcx_fx.c index 53cd15c4f..352c46ad6 100644 --- a/lib_dec/er_dec_tcx_fx.c +++ b/lib_dec/er_dec_tcx_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" #include "basop_util.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED /***************************************************** calcGainc calculates st->lp_gainc @@ -1158,7 +1157,6 @@ void con_tcx_fx( return; } -#ifdef IVAS_FLOAT_FIXED void con_tcx_ivas_fx( Decoder_State *st, /* i/o: coder memory state */ Word16 synth[], @@ -2165,5 +2163,3 @@ void con_tcx_ivas_fx( return; } -#endif -#endif diff --git a/lib_dec/er_scale_syn.c b/lib_dec/er_scale_syn.c index 44a379b2e..a45d9a0bd 100644 --- a/lib_dec/er_scale_syn.c +++ b/lib_dec/er_scale_syn.c @@ -47,95 +47,3 @@ * * Estimate damping factor *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float Damping_fact_flt( - const int16_t coder_type, - const int16_t nbLostCmpt, - int16_t last_good, - float stab_fac, - float *lp_gainp, - const int16_t core ) -{ - float alpha, gain; - - if ( core == ACELP_CORE ) - { - alpha = ALPHA_VT; /* rapid convergence to 0 */ - if ( ( coder_type == UNVOICED ) && ( nbLostCmpt <= 3 ) ) /* Clear unvoiced last good frame */ - { - alpha = ALPHA_UU; - } - else if ( last_good == UNVOICED_CLAS ) - { - if ( nbLostCmpt == 1 ) - { - /* If stable, do not decrease the energy, pitch gain = 0 */ - alpha = stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; /* [0.8, 1.0] */ - } - else if ( nbLostCmpt == 2 ) - { - alpha = ALPHA_U * 1.5f; /* 0.6 */ - } - else - { - alpha = ALPHA_U; /* 0.4 go rapidly to CNG gain, pitch gain = 0 */ - } - } - else if ( last_good == UNVOICED_TRANSITION ) - { - alpha = ALPHA_UT; - } - else if ( ( last_good == ONSET ) && ( nbLostCmpt <= 3 ) && ( coder_type == GENERIC ) ) - { - alpha = 0.8f; - } - else if ( ( ( last_good == VOICED_CLAS ) || ( last_good == ONSET ) ) && ( nbLostCmpt <= 3 ) ) - { - alpha = ALPHA_V; /* constant for the first 3 erased frames */ - } - if ( last_good >= VOICED_CLAS ) - { - if ( nbLostCmpt == 1 ) /* if first erased frame in a block, reset harmonic gain */ - { - gain = (float) sqrt( *lp_gainp ); /* move pitch gain towards 1 for voiced to remove energy fluctuations */ - - if ( gain > 0.98f ) - { - gain = 0.98f; - } - else if ( gain < 0.85f ) - { - gain = 0.85f; - } - alpha *= gain; - } - else if ( nbLostCmpt == 2 ) - { - alpha = ( 0.6f + 0.35f * stab_fac ) * *lp_gainp; - } - else - { - *lp_gainp *= ( 0.7f + 0.2f * stab_fac ); - alpha = *lp_gainp; - } - } - } - else - { - if ( nbLostCmpt < 2 ) - { - alpha = ( 0.7f + 0.3f * stab_fac ); - } - else if ( nbLostCmpt == 2 ) - { - alpha = ( 0.45f + 0.4f * stab_fac ); - } - else - { - alpha = 0.35f + 0.4f * stab_fac; - } - } - - return alpha; -} -#endif diff --git a/lib_dec/er_scale_syn_fx.c b/lib_dec/er_scale_syn_fx.c index 509fd071b..6061ac099 100644 --- a/lib_dec/er_scale_syn_fx.c +++ b/lib_dec/er_scale_syn_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" #include "basop_util.h" #include "cnst.h" -#ifdef IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* * Damping_fact_fx() @@ -136,4 +135,3 @@ Word16 Damping_fact_fx( /* o : damping factor } return alpha; } -#endif diff --git a/lib_dec/er_sync_exc.c b/lib_dec/er_sync_exc.c index 68cc16665..8b2b54876 100644 --- a/lib_dec/er_sync_exc.c +++ b/lib_dec/er_sync_exc.c @@ -41,297 +41,3 @@ #include "prot.h" #include "cnst.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *--------------------------------------------------------------------*/ - -#define NB_PULSES_MAX 15 - - -/*-------------------------------------------------------------------* - * GetMinimumPosition() - * - * Get the location of the minimum energy in the given signal. - *--------------------------------------------------------------------*/ - -/*! r: Index of the position of the minimum energy, that is the position i where filter(x[i-filterLength/2],...,x[i+(filterLength-filterLength/2)-1]) is at maximum. */ -static int16_t GetMinimumPosition( - const float *x, /* i : input signal */ - const int16_t length, /* i : length of the filter length used for the energy calculation */ - int16_t filterLength /* i : length of the filter length used for the energy calculation */ -) -{ - int16_t iMinEnergyPos, center, i; - float energy; - - filterLength = min( filterLength, length ); - center = filterLength / 2; - iMinEnergyPos = center; - if ( filterLength > 0 ) - { - energy = 0; - center += 1; /* To avoid adding 1 in the loop */ - for ( i = 0; i < length - filterLength; i++ ) - { - energy -= x[i] * x[i]; - energy += x[i + filterLength] * x[i + filterLength]; - if ( energy < 0 ) - { - energy = 0; - iMinEnergyPos = i + center; - } - } - } - - return iMinEnergyPos; -} - - -static void AddSamples( - const float *old_exc, - float *new_exc, - const int16_t L_frame, - const int16_t n_samples_to_add, - const int16_t min_pos[], - const int16_t points_by_pos[], - const int16_t nb_min ) -{ - float *pt_dest; - const float *pt_src; - int16_t last_min_pos, i, j; - - pt_dest = new_exc; - pt_src = old_exc; - last_min_pos = 0; - for ( i = 0; i < nb_min; i++ ) - { - float ftmp; - - /* Copy section */ - for ( j = min_pos[i] - last_min_pos; j > 0; j-- ) - { - *pt_dest++ = *pt_src++; - } - - /* Add some samples */ - ftmp = -( *pt_src / 20 ); - for ( j = 0; j < points_by_pos[i]; j++ ) - { - *pt_dest++ = ftmp; - ftmp = -ftmp; - } - - /* Prepare for the next loop iteration */ - last_min_pos = min_pos[i]; - } - - /* Copy remaining length */ - for ( j = L_frame - n_samples_to_add - last_min_pos; j > 0; j-- ) - { - *pt_dest++ = *pt_src++; - } - - return; -} - - -static void RemoveSamples( - const float *old_exc, - float *new_exc, - const int16_t L_frame, - const int16_t n_samples_to_add, - const int16_t min_pos[], - const int16_t points_by_pos[], - const int16_t nb_min ) -{ - float *pt_dest; - const float *pt_src; - int16_t last_min_pos, i, j; - - pt_dest = new_exc + L_frame; - last_min_pos = L_frame - n_samples_to_add; - for ( i = nb_min - 1; i >= 0; i-- ) - { - /* Compute len to copy */ - /* Copy section, removing some samples */ - pt_src = old_exc + last_min_pos; - for ( j = last_min_pos - ( min_pos[i] + points_by_pos[i] ); j > 0; j-- ) - { - *--pt_dest = *--pt_src; - } - - /* Prepare for the next loop iteration */ - last_min_pos = min_pos[i]; - } - - /* Copy remaining length */ - pt_src = old_exc + last_min_pos; - for ( j = last_min_pos; j > 0; j-- ) - { - *--pt_dest = *--pt_src; - } - - return; -} - - -/*-------------------------------------------------------------------* - * PulseResynchronization() - * - * Resynchronize glottal pulse positions of the signal in src_exc and store it in dst_exc - *--------------------------------------------------------------------*/ - -void PulseResynchronization( - const float *src_exc, /* i : Input excitation buffer */ - float *dst_exc, /* o : output excitation buffer */ - const int16_t nFrameLength, /* i : frame length */ - const int16_t nSubframes, /* i : Number of subframes */ - const float pitchStart, /* i : Pitch at the end of the last frame */ - const float pitchEnd /* i : Pitch at the end of the current frame */ -) -{ - int16_t T0, i, k; - float pitchDelta, samplesDelta, perCycleDeltaDelta, cycleDelta, freqStart, fractionalLeft, absPitchDiff; - int16_t roundedPitchStart, nSamplesDelta, nSamplesDeltaRemain, iMinPos1, iMinPos[NB_PULSES_MAX + 1], iDeltaSamples[NB_PULSES_MAX + 1], maxDeltaSamples, roundedCycleDelta; - - assert( ( nFrameLength > 0 ) && ( nFrameLength > pitchStart ) && ( nSubframes > 1 ) && ( nSubframes <= 5 ) && ( nFrameLength % nSubframes == 0 ) && ( pitchStart > 0 ) && ( pitchEnd > 0 ) && ( pitchEnd / pitchStart > 1 - 2.0f / ( nSubframes + 1 ) ) && ( src_exc != NULL ) && ( dst_exc != NULL ) && ( src_exc < dst_exc ) ); - - pitchDelta = ( pitchEnd - pitchStart ) / nSubframes; - roundedPitchStart = (int16_t) ( pitchStart + 0.5f ); - freqStart = 1.0f / roundedPitchStart; - - /* Calculate number of samples to be removed (if negative) or added (if positive) */ - samplesDelta = 0.5f * pitchDelta * nFrameLength * ( nSubframes + 1 ) * freqStart; - samplesDelta -= nFrameLength * ( 1.0f - pitchStart * freqStart ); - - /* To have enough samples in the buffer of length nFrameLength*(nSubframes+1)/nSubframes, pitchEnd/pitchEnd must be bigger than (nSubframes-1)/(nSubframes+1)=1-2/(nSubframes+1) */ - /* Thus nSubframes must be bigger than 1 */ - nSamplesDelta = (int16_t) floor( samplesDelta + 0.5f ); - nSamplesDeltaRemain = (int16_t) abs( nSamplesDelta ); - - /* Find the location of the glottal pulse */ - T0 = maximumAbs( src_exc, roundedPitchStart, NULL ); - - /* Get the index of the last pulse in the resynchronized frame */ - k = (int16_t) ceil( ( nFrameLength - nSamplesDelta - T0 ) * freqStart - 1 ); - if ( ( k >= 0 ) && ( k + 1 <= NB_PULSES_MAX ) ) - { - absPitchDiff = (float) fabs( roundedPitchStart - pitchEnd ); - - /* Calculate the delta of the samples to be added/removed between consecutive cycles */ - perCycleDeltaDelta = ( absPitchDiff * ( nFrameLength - samplesDelta ) - (float) fabs( samplesDelta ) * roundedPitchStart ) / ( ( k + 1 ) * ( T0 + 0.5f * k * roundedPitchStart ) ); - - /* Calculate the integer number of samples to be added/removed in each pitch cycle */ - cycleDelta = max( 0, ( absPitchDiff - ( k + 1 ) * perCycleDeltaDelta ) * T0 * freqStart ); - roundedCycleDelta = (int16_t) ( cycleDelta ); - iDeltaSamples[0] = roundedCycleDelta; - fractionalLeft = cycleDelta - roundedCycleDelta; - nSamplesDeltaRemain -= roundedCycleDelta; - for ( i = 1; i <= k; i++ ) - { - cycleDelta = ( absPitchDiff - ( k + 1 - i ) * perCycleDeltaDelta ) + fractionalLeft; - cycleDelta = max( 0, cycleDelta ); - - /* Make sure that the number of samples increases */ - if ( roundedCycleDelta > cycleDelta ) - { - iDeltaSamples[i] = roundedCycleDelta; - roundedCycleDelta = (int16_t) ( cycleDelta ); - iDeltaSamples[i - 1] = roundedCycleDelta; - } - else - { - roundedCycleDelta = (int16_t) ( cycleDelta ); - iDeltaSamples[i] = roundedCycleDelta; - } - fractionalLeft = cycleDelta - roundedCycleDelta; - nSamplesDeltaRemain -= roundedCycleDelta; - } - - iDeltaSamples[k + 1] = max( 0, nSamplesDeltaRemain ); - maxDeltaSamples = max( iDeltaSamples[k], iDeltaSamples[k + 1] ); - - /* Find the location of the minimum energy between the first two pulses */ - iMinPos1 = T0 + GetMinimumPosition( src_exc + T0, min( roundedPitchStart, ( nSubframes + 1 ) * nFrameLength / nSubframes - T0 ), maxDeltaSamples ); - if ( nSamplesDelta < 0 ) - { - /* Find the location of the minimum energy before the first pulse */ - if ( iMinPos1 > roundedPitchStart + iDeltaSamples[0] / 2 ) - { - iMinPos[0] = iMinPos1 - roundedPitchStart - iDeltaSamples[0] / 2; - } - else - { - iMinPos[0] = GetMinimumPosition( src_exc, T0, iDeltaSamples[0] ) - iDeltaSamples[0] / 2; - } - - /* Find the location of the minimum energy between the pulses */ - for ( i = 1; i <= k; i++ ) - { - iMinPos[i] = iMinPos1 + ( i - 1 ) * roundedPitchStart - iDeltaSamples[i] / 2; - } - - /* Find the location of the minimum energy after the last pulse */ - if ( iMinPos1 + k * roundedPitchStart + iDeltaSamples[k + 1] - iDeltaSamples[k + 1] / 2 < nFrameLength - nSamplesDelta ) - { - iMinPos[k + 1] = iMinPos1 + k * roundedPitchStart - iDeltaSamples[k + 1] / 2; - } - else - { - iMinPos[k + 1] = T0 + k * roundedPitchStart + GetMinimumPosition( src_exc + T0 + k * roundedPitchStart, nFrameLength - nSamplesDelta - ( T0 + k * roundedPitchStart ), iDeltaSamples[k + 1] ) - iDeltaSamples[k + 1] / 2; - } - - if ( iMinPos[k + 1] + iDeltaSamples[k + 1] > nFrameLength - nSamplesDelta ) - { - iDeltaSamples[k] += iMinPos[k + 1] + iDeltaSamples[k + 1] - ( nFrameLength - nSamplesDelta ); - iDeltaSamples[k + 1] = nFrameLength - nSamplesDelta - iMinPos[k + 1]; - } - - /* Remove samples at the given positions */ - RemoveSamples( src_exc, dst_exc, nFrameLength, nSamplesDelta, iMinPos, iDeltaSamples, k + 2 ); - } - else - { - /* Find the location of the minimum energy before the first pulse */ - if ( iMinPos1 > roundedPitchStart ) - { - iMinPos[0] = iMinPos1 - roundedPitchStart; - } - else - { - iMinPos[0] = GetMinimumPosition( src_exc, T0, iDeltaSamples[0] ); - } - - /* Find the location of the minimum energy between the pulses */ - for ( i = 1; i <= k; i++ ) - { - iMinPos[i] = iMinPos1; - iMinPos1 += roundedPitchStart; - } - - /* Find the location of the minimum energy after the last pulse */ - if ( iMinPos1 < nFrameLength - nSamplesDelta ) - { - iMinPos[k + 1] = iMinPos1; - } - else - { - iMinPos[k + 1] = T0 + k * roundedPitchStart + GetMinimumPosition( src_exc + T0 + k * roundedPitchStart, nFrameLength - nSamplesDelta - ( T0 + k * roundedPitchStart ), iDeltaSamples[k + 1] ); - } - - if ( iMinPos[k + 1] + iDeltaSamples[k + 1] > nFrameLength - nSamplesDelta ) - { - iDeltaSamples[k] += iMinPos[k + 1] + iDeltaSamples[k + 1] - ( nFrameLength - nSamplesDelta ); - iDeltaSamples[k + 1] = nFrameLength - nSamplesDelta - iMinPos[k + 1]; - } - - /* Add samples at the given positions */ - AddSamples( src_exc, dst_exc, nFrameLength, nSamplesDelta, iMinPos, iDeltaSamples, k + 2 ); - } - } - - return; -} -#endif diff --git a/lib_dec/er_sync_exc_fx.c b/lib_dec/er_sync_exc_fx.c index ac04d048c..19ae2edcc 100644 --- a/lib_dec/er_sync_exc_fx.c +++ b/lib_dec/er_sync_exc_fx.c @@ -11,7 +11,6 @@ #include "prot_fx.h" #include "basop32.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * * Perform resynchronisation of the last glottal pulse in voiced lost frame @@ -549,4 +548,3 @@ void PulseResynchronization_fx( } } } -#endif diff --git a/lib_dec/er_util.c b/lib_dec/er_util.c index aa9f77287..88c1af13f 100644 --- a/lib_dec/er_util.c +++ b/lib_dec/er_util.c @@ -41,299 +41,3 @@ #include "cnst.h" #include "stat_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * minimumStatistics() - * - * - *---------------------------------------------------------------------*/ - -void minimumStatistics( - float *noiseLevelMemory, - int16_t *noiseLevelIndex, - int16_t *currLevelIndex, - float *noiseEstimate, - float *lastFrameLevel, - float currentFrameLevel, - const float minLev, - const int16_t buffSize ) -{ - float aOpt, f; - int16_t p, i; - - if ( currentFrameLevel < minLev ) - { - currentFrameLevel = minLev; - } - /* compute optimal factor aOpt for recursive smoothing of frame minima */ - if ( *lastFrameLevel >= *noiseEstimate ) - { - aOpt = *noiseEstimate / *lastFrameLevel; - } - else - { - aOpt = *lastFrameLevel / *noiseEstimate; - } - aOpt *= aOpt; - *lastFrameLevel = currentFrameLevel; - /* recursively compute smoothed frame minima using optimal factor aOpt */ - f = currentFrameLevel * ( 1.0f - aOpt ); - f += aOpt * noiseLevelMemory[( *currLevelIndex ? *currLevelIndex : buffSize ) - 1]; - /* if current frame min is a new local min, set index to current index */ - p = *noiseLevelIndex; - if ( noiseLevelMemory[p] >= f ) - { - noiseLevelMemory[*currLevelIndex] = f; - p = *currLevelIndex; - } - else - { - noiseLevelMemory[*currLevelIndex] = f; - /* current min is not a new min, so check if min must be re-searched */ - if ( p != *currLevelIndex ) - { - f = noiseLevelMemory[p]; /* min is still in memory, so return it */ - } - else - { - /* p == currLevelIndex; min was removed from memory, re-search min */ - for ( i = *currLevelIndex + 1; i < buffSize; i++ ) - { - if ( f >= noiseLevelMemory[i] ) - { - f = noiseLevelMemory[i]; - p = i; - } - } - for ( i = 0; i <= *currLevelIndex; i++ ) - { - if ( f >= noiseLevelMemory[i] ) - { - f = noiseLevelMemory[i]; - p = i; - } - } - } - } - /* update local-minimum-value index and current circular-buffer index */ - *noiseLevelIndex = p; - p = *currLevelIndex + 1; - *currLevelIndex = ( p == buffSize ) ? 0 : p; - - *noiseEstimate = f; - - return; -} - -/*---------------------------------------------------------------------* - * getLevelSynDeemph() - * - * PLC: [ACELP: Fade-out] - * PLC: getLevelSynDeemph: derives on frame or subframe basis the level - * of LPC synthesis and deeemphasis based on the given input - *----------------------------------------------------------------------*/ - -float getLevelSynDeemph( - const float h1Init[], /* i : input value or vector to be processed */ - const float A[], /* i : LPC coefficients */ - const int16_t lenLpcExc, /* i : length of the LPC excitation buffer */ - const float preemph_fac, /* i : preemphasis factor */ - const int16_t numLoops /* i : number of loops */ -) -{ - float levelSynDeemphSub; - float levelSynDeemph = 0; - float h1[L_FRAME_PLUS / 4]; - float mem[M]; - float tmp = 0; - int16_t loop; - - for ( loop = 0; loop < numLoops; loop++ ) - { - set_zero( h1, lenLpcExc ); - set_zero( mem, M ); - - h1[0] = *h1Init; - - syn_filt( A, M, h1, h1, lenLpcExc, mem, 0 ); - deemph( h1, preemph_fac, lenLpcExc, &tmp ); - A += ( M + 1 ); - - /* gain introduced by synthesis+deemphasis */ - levelSynDeemphSub = (float) sqrt( dotp( h1, h1, lenLpcExc ) ); - - /* mean of the above across all subframes */ - levelSynDeemph += ( 1.0f / (float) numLoops ) * levelSynDeemphSub; - } - - return levelSynDeemph; -} - - -/*--------------------------------------------------------------------- - * genPlcFiltBWAdap() - * - * - *---------------------------------------------------------------------*/ - -void genPlcFiltBWAdap( - const int32_t sr_core, /* i : core sampling rate */ - float *lpFiltAdapt, /* o : filter coefficients for filtering codebooks in case of flc */ - const int16_t type, /* i : type of filter, either 0 : lowpass or 1 : highpass */ - const float alpha /* i : fade out factor [0 1) used decrease filter tilt */ -) -{ - float a; - - switch ( sr_core ) - { - case INT_FS_16k: - a = 0.4000f; - break; - default: - a = 0.2813f; /*sr_core = INT_FS_12k8 */ - break; - } - - switch ( type ) - { - case 0: - *lpFiltAdapt++ = a / ( 2.f * a + 1.f ); - *lpFiltAdapt++ = 1.f / ( 2.f * a + 1.f ); - *lpFiltAdapt = a / ( 2.f * a + 1.f ); - break; - case 1: - a *= alpha; - *lpFiltAdapt++ = -a / ( 2.f * a + 1.f ); - *lpFiltAdapt++ = 1.f / ( 2.f * a + 1.f ); - *lpFiltAdapt = -a / ( 2.f * a + 1.f ); - break; - default: - IVAS_ERROR( IVAS_ERR_INTERNAL, "PLC: Filter type neither lowpass nor highpass." ); - break; - } - - return; -} - -/*------------------------------------------------------------------ - * highPassFiltering() - * - * PLC: [ACELP: general] - * PLC: high pass filtering - *-----------------------------------------------------------------*/ - -void highPassFiltering( - const int16_t last_good, /* i : last classification type */ - const int16_t L_buffer, /* i : buffer length */ - float exc2[], /* i/o: unvoiced excitation before the high pass filtering */ - const float hp_filt[], /* i : high pass filter coefficients */ - const int16_t l_fir_fer /* i : high pass filter length */ -) -{ - int16_t i; - - if ( last_good > UNVOICED_TRANSITION ) - { - for ( i = 0; i < L_buffer; i++ ) - { - exc2[i] = dotp( &exc2[i], hp_filt, l_fir_fer ); - } - } - - return; -} - -/*--------------------------------------------------------------------- - * GetPLCModeDecision() - * - * PLC: [Common: mode decision] - * PLC: Decide which Concealment to use. Update pitch lags if needed - *--------------------------------------------------------------------*/ - -int16_t GetPLCModeDecision( - Decoder_State *st /* i/o: decoder memory state pointer */ -) -{ - int16_t core; - int16_t numIndices = 0; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - if ( st->flagGuidedAcelp == 1 ) - { - /* update mem_lag according to info available on future frame */ - st->old_pitch_buf[2 * st->nb_subfr] = (float) st->guidedT0; - st->old_pitch_buf[2 * st->nb_subfr + 1] = (float) st->guidedT0; - st->mem_pitch_gain_float[0] = st->mem_pitch_gain_float[1] = 1.f; - } - if ( ( st->last_core > ACELP_CORE && hTcxDec->tcxltp_last_gain_unmodified_float != 0 ) || ( st->flagGuidedAcelp == 1 ) ) - { - /* no updates needed here, because already updated in last good frame */ - st->plc_use_future_lag = 1; - } - else - { - st->plc_use_future_lag = 0; - } - if ( st->last_core == -1 ) - { - if ( st->Opt_AMR_WB ) - { - core = ACELP_CORE; - } - else - { - core = TCX_20_CORE; - } - st->last_core = ACELP_CORE; - st->tonal_mdct_plc_active = 0; - } - else - { - core = ACELP_CORE; - if ( st->nbLostCmpt > 1 ) - { - core = st->last_core_bfi; - } - - /* no FD TCX PLC after a TCX transition frame: the appropriate framing is not implemented */ - if ( st->nbLostCmpt == 1 ) - { - st->tonal_mdct_plc_active = 0; - if ( !( st->rf_flag && st->use_partial_copy && ( st->rf_frame_type == RF_TCXTD1 || st->rf_frame_type == RF_TCXTD2 ) ) ) - { - if ( st->hTonalMDCTConc != NULL && st->last_core == TCX_20_CORE && st->second_last_core == TCX_20_CORE && ( ( st->old_fpitch_float <= 0.5f * st->L_frame ) || ( hTcxDec->tcxltp_last_gain_unmodified_float <= 0.4f ) ) - /* it is fine to call the detection even if no ltp information - is available, meaning that st->old_fpitch == - st->tcxltp_second_last_pitch == st->L_frame */ - && ( st->old_fpitch_float == hTcxDec->tcxltp_second_last_pitch_float ) && !st->last_tns_active && !st->second_last_tns_active ) - { - - TonalMDCTConceal_Detect_ivas( st->hTonalMDCTConc, ( hTcxDec->tcxltp_last_gain_unmodified_float > 0 ) ? st->old_fpitch_float : 0, &numIndices, - ( st->element_mode == IVAS_CPE_MDCT ? &( st->hTcxCfg->psychParamsTCX20 ) : st->hTcxCfg->psychParamsCurrent ) ); - - if ( ( numIndices > 10 ) || ( ( numIndices > 5 ) && ( fabs( hTcxDec->tcxltp_third_last_pitch_float - hTcxDec->tcxltp_second_last_pitch_float ) < 0.5f ) ) || ( ( numIndices > 0 ) && ( ( st->last_good <= UNVOICED_TRANSITION ) || ( hTcxDec->tcxltp_last_gain_unmodified_float <= 0.4f ) ) && ( fabs( hTcxDec->tcxltp_third_last_pitch_float - hTcxDec->tcxltp_second_last_pitch_float ) < 0.5f ) ) ) - { - core = TCX_20_CORE; - st->tonal_mdct_plc_active = 1; - } - else if ( st->last_good <= UNVOICED_TRANSITION || hTcxDec->tcxltp_last_gain_unmodified_float <= 0.4f ) - { - core = TCX_20_CORE; - } - } - else if ( st->last_core != ACELP_CORE ) - { - if ( st->last_good <= UNVOICED_TRANSITION || hTcxDec->tcxltp_last_gain_unmodified_float <= 0.4f ) - { - core = st->last_core; - } - } - } - } - } - - return core; -} -#endif diff --git a/lib_dec/er_util_fx.c b/lib_dec/er_util_fx.c index c2c766d9e..7452e9bf6 100644 --- a/lib_dec/er_util_fx.c +++ b/lib_dec/er_util_fx.c @@ -8,7 +8,6 @@ #include "prot_fx.h" #include "basop_util.h" #include -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" @@ -378,7 +377,6 @@ void highPassFiltering_fx( * PLC: [Common: mode decision] * PLC: Decide which Concealment to use. Update pitch lags if needed *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 GetPLCModeDecision_ivas_fx( Decoder_State *st /* i/o: decoder memory state pointer */ ) @@ -505,7 +503,6 @@ Word16 GetPLCModeDecision_ivas_fx( } return core; /*Q0*/ } -#endif Word16 GetPLCModeDecision_fx( Decoder_State *st /* i/o: decoder memory state pointer */ @@ -649,4 +646,3 @@ Word16 GetPLCModeDecision_fx( } return core; } -#endif diff --git a/lib_dec/evs_dec.c b/lib_dec/evs_dec.c index 6daf1f3b6..d441f6ead 100644 --- a/lib_dec/evs_dec.c +++ b/lib_dec/evs_dec.c @@ -41,903 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * evs_dec() - * - * Principal decoder routine - *--------------------------------------------------------------------------*/ - -ivas_error evs_dec( - Decoder_State *st, /* i/o: Decoder state structure */ - float mem_hp20_out[L_HP20_MEM], /* i/o: HP filter memory for synthesis */ - float *output, /* o : output synthesis signal */ - FRAME_MODE frameMode /* i : Decoder frame mode */ -) -{ - int16_t i, output_frame; - int16_t sharpFlag; - float synth[L_FRAME48k]; - float hb_synth[L_FRAME48k]; - float tmp_buffer[L_FRAME48k]; - int16_t tmps, incr; - float bwe_exc_extended[L_FRAME32k + NL_BUFF_OFFSET]; - float voice_factors[NB_SUBFR16k]; - float fb_exc[L_FRAME16k]; - int16_t core_switching_flag; - float old_syn_12k8_16k[L_FRAME16k]; - float tmp, tmpF; - float pitch_buf[NB_SUBFR16k]; - int16_t unbits; - int16_t hq_core_type; - int16_t sid_bw; - int16_t delay_comp, delta, delay_tdbwe; - int16_t concealWholeFrame; /* status after decoding */ - int16_t concealWholeFrameTmp; - float pcmbufFB[L_FRAME_MAX]; - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - ivas_error error; - - error = IVAS_ERR_OK; - - push_wmops( "evs_dec" ); - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - st->idchan = 0; - st->flag_ACELP16k = set_ACELP_flag_IVAS( EVS_MONO, -1, st->total_brate, 0, 0, -1, -1 ); - - tmps = 0; - delay_tdbwe = 0; - sid_bw = -1; - concealWholeFrameTmp = -1; - if ( !st->bfi ) - { - st->extl = -1; - } - - output_frame = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); - - core_switching_flag = 0; - sharpFlag = 0; - unbits = 0; - - st->use_partial_copy = 0; - st->rf_flag = 0; - - if ( st->bfi == 1 ) - { - hq_core_type = st->hHQ_core->last_hq_core_type; - st->coder_type = st->last_coder_type; - } - else - { - hq_core_type = -1; - st->coder_type = INACTIVE; - } - - /* PLC: [TCX: Fade-out-recovery] - * PLC: overlapping part needs to be attenuated for first good frame */ - if ( !st->bfi && st->prev_bfi && ( st->last_codec_mode == MODE2 ) && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) ) - { - v_multc( st->hHQ_core->old_out, st->hPlcInfo->recovery_gain_float, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); - v_multc( st->hHQ_core->old_outLB, st->hPlcInfo->recovery_gain_float, st->hHQ_core->old_outLB, st->L_frame ); - - if ( !st->hTcxCfg->last_aldo ) - { - v_multc( st->hTcxDec->syn_OverlFB_float, st->hPlcInfo->recovery_gain_float, st->hTcxDec->syn_OverlFB_float, st->hTcxCfg->tcx_mdct_window_lengthFB ); - v_multc( st->hTcxDec->syn_Overl_float, st->hPlcInfo->recovery_gain_float, st->hTcxDec->syn_Overl_float, st->hTcxCfg->tcx_mdct_window_length ); - } - } - - set_f( voice_factors, 0.f, NB_SUBFR16k ); - - set_f( hb_synth, 0.0f, L_FRAME48k ); - - st->rate_switching_reset = 0; - - if ( !st->bfi ) - { - st->flagGuidedAcelp = 0; - } - - /*----------------------------------------------------------------* - * Updates in case of AMR-WB IO mode -> EVS primary mode switching - *----------------------------------------------------------------*/ - - if ( st->last_core == AMR_WB_CORE ) - { - updt_IO_switch_dec( output_frame, st ); - } - - if ( frameMode != FRAMEMODE_MISSING ) /* frame mode normal or future frame */ - { - getPartialCopyInfo_float( st, &sharpFlag ); - frameMode = st->bfi; - } - - if ( st->rf_frame_type == RF_NO_DATA && st->use_partial_copy ) - { - /* the partial copy is a RF FRAME_NO_DATA frame and should follow the concealment path*/ - st->bfi = 1; - st->codec_mode = st->last_codec_mode; - frameMode = FRAMEMODE_MISSING; - st->use_partial_copy = 0; - } - - /* if previous frame was concealed via ACELP, drop TCX partial copy info and continue ACELP concealment */ - if ( st->use_partial_copy && st->core == TCX_20_CORE && st->prev_bfi && st->last_core == ACELP_CORE ) - { - st->bfi = 1; - st->codec_mode = st->last_codec_mode; - frameMode = FRAMEMODE_MISSING; - st->use_partial_copy = 0; - st->core = ACELP_CORE; - } - - /* if previous frame was HQ Core/TCX10/TCX20 (high bitrate), drop partial copy info and continue HQ Core/TCX10/TCX20 concealment */ - if ( st->use_partial_copy && ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || ( st->last_core == TCX_20_CORE && getTcxonly_ivas( EVS_MONO, st->last_total_brate, 0, 0 ) ) ) ) - { - st->bfi = 1; - st->codec_mode = st->last_codec_mode; - frameMode = FRAMEMODE_MISSING; - st->use_partial_copy = 0; - st->core = st->last_core; - } - - /*------------------------------------------------------------------* - * Decoding - *-----------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 ) - { - /*------------------------------------------------------------------* - * Decision matrix (selection of technologies) - *-----------------------------------------------------------------*/ - - /* decision matrix (selection of technologies) */ - if ( st->bfi != 1 ) - { - decision_matrix_dec( st, &sharpFlag, &hq_core_type, &core_switching_flag ); - - if ( st->bfi != 1 ) - { - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->fscale_old = st->fscale; - st->fscale = sr2fscale( st->sr_core ); - } - else - { - frameMode = FRAMEMODE_MISSING; - } - } - } - - if ( st->codec_mode == MODE1 ) - { - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - if ( st->bfi == 1 ) - { - st->nbLostCmpt++; - } - else - { - st->nbLostCmpt = 0; - } - st->enablePlcWaveadjust = 0; - - /*---------------------------------------------------------------------* - * Detect bandwidth switching - *---------------------------------------------------------------------*/ - - bandwidth_switching_detect( st ); - - /*---------------------------------------------------------------------* - * Preprocessing (preparing) for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - if ( ( error = core_switching_pre_dec( st, output_frame, -1, -1, EVS_MONO, -1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*---------------------------------------------------------------------* - * ACELP core decoding - * HQ core decoding - *---------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - /* ACELP core decoder */ - if ( ( error = acelp_core_dec( st, NULL, synth, NULL, bwe_exc_extended, voice_factors, old_syn_12k8_16k, sharpFlag, pitch_buf, &unbits, &sid_bw, NULL, NULL, NULL, 0, EVS_MONO, 0, 0, 1, NULL, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* HQ core decoder */ - hq_core_dec( st, synth, output_frame, hq_core_type, core_switching_flag, NULL ); - } - - /*---------------------------------------------------------------------* - * Postprocessing for ACELP/MDCT core switching - *---------------------------------------------------------------------*/ - - if ( ( error = core_switching_post_dec( st, synth, NULL, NULL, 0, MONO_FORMAT, output_frame, core_switching_flag, 0, -1, EVS_MONO ) ) != IVAS_ERR_OK ) - { - return error; - } - - - /*---------------------------------------------------------------------* - * Pre-processing for bandwidth switching - *---------------------------------------------------------------------*/ - push_wmops( "BWE_decoding" ); - bw_switching_pre_proc( st, old_syn_12k8_16k, -1, 1 ); - - /*---------------------------------------------------------------------* - * WB TBE decoding - * WB BWE decoding - *---------------------------------------------------------------------*/ - - if ( st->extl == WB_TBE ) - { - /* WB TBE decoder */ - wb_tbe_dec( st, bwe_exc_extended, voice_factors, hb_synth ); - } - - if ( st->extl == WB_BWE && st->bws_cnt == 0 ) - { - /* WB BWE decoder */ - wb_bwe_dec_flt( st, NULL, synth, hb_synth, 0, output_frame, voice_factors, pitch_buf ); - } - - /*---------------------------------------------------------------------* - * SWB(FB) TBE decoding - * SWB(FB) BWE decoding - *---------------------------------------------------------------------*/ - - if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && st->output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) - { - /* SWB TBE decoder */ - swb_tbe_dec( st, NULL, bwe_exc_extended, voice_factors, old_syn_12k8_16k, fb_exc, hb_synth, pitch_buf ); - - /* FB TBE decoder */ - if ( output_frame == L_FRAME48k && st->extl == FB_TBE ) - { - fb_tbe_dec( st, fb_exc, hb_synth, NULL, L_FRAME48k ); - } - } - else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( st->output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) - { - /* SWB BWE decoder */ - swb_bwe_dec_flt( st, NULL, synth, hb_synth, 0, output_frame ); - } - else if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) - { - swb_bwe_dec_hr( st, old_syn_12k8_16k, hb_synth, output_frame, unbits, pitch_buf ); - } - - /*---------------------------------------------------------------------* - * FEC - recovery after lost HQ core (smoothing of the BWE component) - *---------------------------------------------------------------------*/ - - if ( st->prev_bfi && st->last_core == HQ_CORE && st->extl != -1 ) - { - tmp = FRAC_BWE_SMOOTH / output_frame; - - for ( i = 0; i < output_frame / FRAC_BWE_SMOOTH; i++ ) - { - hb_synth[i] *= ( i * tmp ); - } - } - - /*---------------------------------------------------------------------* - * SWB CNG - *---------------------------------------------------------------------*/ - - if ( output_frame >= L_FRAME32k ) - { - /* SHB CNG decoder */ - swb_CNG_dec( st, synth, hb_synth, sid_bw ); - } - - pop_wmops(); - - /*----------------------------------------------------------------* - * Delay ACELP core synthesis to be synchronized with the components of bandwidth extension layers - *----------------------------------------------------------------*/ - - if ( output_frame >= L_FRAME16k ) - { - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); - delay_signal_float( synth, output_frame, st->prev_synth_buffer, tmps ); - } - - if ( st->core == ACELP_CORE && !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) - { - tmps = 0; - if ( output_frame >= L_FRAME16k ) - { - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); - } - - waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut_float, synth + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); - st->hPlcInfo->Pitch = 0; - } - - /*----------------------------------------------------------------* - * Addition of BWE components to the ACELP core synthesis - *----------------------------------------------------------------*/ - - if ( st->extl != -1 || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) - { - /* Calculate an additional delay of extension layer components to be synchronized with ACELP synthesis */ - if ( st->L_frame == L_FRAME ) - { - /* TBE on top of ACELP@12.8kHz */ - tmps = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); - } - else - { - if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) - { - /* HR SWB BWE on top of ACELP@16kHz */ - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); - } - else - { - /* TBE on top of ACELP@16kHz */ - tmps = NS2SA( st->output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); - } - } - - /* Smooth transitions when switching between different technologies */ - if ( ( st->extl != st->last_extl || ( st->extl == st->last_extl && ( st->core ^ st->last_core ) == HQ_CORE ) ) && !( st->extl == SWB_CNG && st->last_extl == SWB_TBE ) ) - { - /* switching between BWE and TBE technologies */ - incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); - for ( i = 0; i < tmps; i++ ) - { - hb_synth[i] *= sin_table256[i * incr]; - } - - set_f( st->hb_prev_synth_buffer, 0.0f, tmps ); - } - else if ( tmps < st->old_bwe_delay ) - { - /* the previous frame was TBE on top of ACELP@16kHz and the current frame is TBE on top of ACELP@12.8kHz */ - incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); - for ( i = 0; i < tmps; i++ ) - { - tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr] + - st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; - } - - mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); - } - else if ( tmps > st->old_bwe_delay ) - { - /* the previous frame was TBE on top of ACELP@12.8kHz and the current frame is TBE on top of ACELP@16kHz */ - incr = (int16_t) ( L_FRAME / ( st->old_bwe_delay + 0.5f ) ); - for ( i = 0; i < st->old_bwe_delay; i++ ) - { - tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr]; - } - - for ( ; i < tmps; i++ ) - { - tmp_buffer[i] = 0.0f; - } - - for ( i = 0; i < st->old_bwe_delay; i++ ) - { - tmp_buffer[tmps - 1 - i] += st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; - } - - mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); - } - - /* Delay hb_synth */ - delay_signal_float( hb_synth, output_frame, st->hb_prev_synth_buffer, tmps ); - - st->old_bwe_delay = tmps; - if ( ( st->ppp_mode_dec || ( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) && st->L_frame == st->last_L_frame && ( st->bws_cnt > 1 || st->last_extl != -1 ) ) - { - mvr2r( st->hBWE_TD->old_hb_synth, hb_synth, output_frame ); - } - else - { - mvr2r( hb_synth, st->hBWE_TD->old_hb_synth, output_frame ); - } - - /* Add the delayed hb_synth component to the delayed ACELP synthesis */ - v_add( synth, hb_synth, synth, output_frame ); - - /* SWB CNG/DTX - calculate SHB energy */ - if ( output_frame >= L_FRAME32k && st->extl > SWB_CNG && st->hTdCngDec != NULL ) - { - st->hTdCngDec->last_shb_ener = 0.001f; - for ( i = 0; i < output_frame; i++ ) - { - st->hTdCngDec->last_shb_ener += hb_synth[i] * hb_synth[i]; - } - st->hTdCngDec->last_shb_ener /= (float) output_frame; - st->hTdCngDec->last_shb_ener = 10 * (float) log10( st->hTdCngDec->last_shb_ener ); - } - } - - /* TCX-LTP Postfilter: used in Mode 1 to update memories and to avoid discontinuities when the past frame was TCX */ - tcx_ltp_post_flt( st, hTcxLtpDec, ACELP_CORE, output_frame, 0, synth, NULL ); - - /* final output of synthesis signal */ - mvr2r( synth, output, output_frame ); - } - else /* Mode 2 */ - { - - /* -------------------------------------------------------------- * - * Mode 2 concealment - * -------------------------------------------------------------- */ - - concealWholeFrame = 0; - - if ( frameMode == FRAMEMODE_NORMAL ) - { - st->m_decodeMode = DEC_NO_FRAM_LOSS; - } - - if ( frameMode == FRAMEMODE_MISSING ) - { - if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) - { - st->m_decodeMode = DEC_NO_FRAM_LOSS; - } - else - { - st->m_decodeMode = DEC_CONCEALMENT_EXT; - } - } - - if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) - { - concealWholeFrame = 1; - } - - /* -------------------------------------------------------------- * - * Decode core - * -------------------------------------------------------------- */ - - dec_acelp_tcx_frame( st, &concealWholeFrame, output, st->p_bpf_noise_buf_float, pcmbufFB, bwe_exc_extended, voice_factors, pitch_buf, NULL ); - - concealWholeFrameTmp = concealWholeFrame; - if ( st->bfi ) - { - frameMode = FRAMEMODE_MISSING; - } - - if ( st->igf ) - { - /* TBE for Mode 2 interface */ - if ( ( st->bfi == 0 || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) - { - switch ( st->bwidth ) - { - case WB: - st->extl = WB_TBE; - st->extl_brate = WB_TBE_0k35; - break; - case SWB: - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - - if ( st->total_brate < ACELP_13k20 ) - { - st->extl_brate = SWB_TBE_0k95; - } - else if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = SWB_TBE_2k8; - } - - break; - - case FB: - st->extl = FB_TBE; - st->extl_brate = FB_TBE_1k8; - - if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = FB_TBE_3k0; - } - - break; - } - } - else - { - st->extl = IGF_BWE; - st->extl_brate = 0; - } - - if ( st->output_Fs == 8000 || ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k ) ) - { - st->extl = -1; - } - - st->core_brate = st->total_brate - st->extl_brate; - - st->bws_cnt = 0; - st->bws_cnt1 = 0; - st->tilt_wb = 0; - - if ( st->m_frame_type == ACTIVE_FRAME ) - { - if ( ( st->bfi == 0 || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) - { - if ( st->extl == WB_TBE ) - { - wb_tbe_dec( st, bwe_exc_extended, voice_factors, hb_synth ); - } - else if ( st->extl == SWB_TBE || st->extl == FB_TBE ) - { - /* SWB TBE decoder */ - swb_tbe_dec( st, NULL, bwe_exc_extended, voice_factors, st->hBWE_TD->old_core_synth, fb_exc, hb_synth, pitch_buf ); - - if ( st->extl == FB_TBE && output_frame == L_FRAME48k ) - { - fb_tbe_dec( st, fb_exc, hb_synth, NULL, L_FRAME48k ); - } - } - mvr2r( hb_synth, st->hBWE_TD->old_hb_synth, output_frame ); - } - else - { - if ( st->last_core == ACELP_CORE ) - { - if ( ( st->bwidth == SWB || st->bwidth == FB ) && - ( ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) && st->last_codec_mode == MODE2 ) ) - { - GenTransition( st->hBWE_TD, hb_synth, st->output_Fs, EVS_MONO, st->L_frame, st->rf_flag, st->total_brate ); - } - else if ( st->bwidth == WB && st->last_extl == WB_TBE ) - { - GenTransition_WB( st->hBWE_TD, hb_synth, st->output_Fs ); - } - - TBEreset_dec( st ); - } - else if ( st->last_codec_mode == MODE1 ) - { - swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); - - if ( st->extl == FB_TBE ) - { - set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - st->hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); - } - swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); - } - } - } - } - - - if ( st->m_frame_type != ACTIVE_FRAME ) - { - st->extl = -1; - st->extl_brate = 0; - } - - /* -------------------------------------------------------------- * - * Postprocessing - * -------------------------------------------------------------- */ - { - float *realBuffer[CLDFB_NO_COL_MAX], *imagBuffer[CLDFB_NO_COL_MAX]; - float realBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], imagBufferTmp[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - set_f( realBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - set_f( imagBufferTmp[i], 0, CLDFB_NO_CHANNELS_MAX ); - realBuffer[i] = realBufferTmp[i]; - imagBuffer[i] = imagBufferTmp[i]; - } - - st->cldfbSyn->nab = min( st->cldfbAna->no_channels, st->cldfbSyn->no_channels ); - st->cldfbAna->nab = 0; - - if ( st->hFdCngDec != NULL && ( st->sr_core == 8000 || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) && st->total_brate <= ACELP_32k ) - { - /* -------------------------------------------------------------- * - * In CLDFB domain: - * - perform noise estimation during active frames - * - do CNG during inactive frames - * -------------------------------------------------------------- */ - - noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, output ); - - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; - - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - - ApplyFdCng( output, NULL, realBuffer, imagBuffer, st, concealWholeFrame, 0 ); - - /* Generate additional comfort noise to mask potential coding artefacts */ - if ( st->m_frame_type == ACTIVE_FRAME && st->flag_cna ) - { - generate_masking_noise( output, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, NULL, -1 ); - } - } - - if ( st->flag_cna == 0 && st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == TCX_20_CORE || st->last_core == AMR_WB_CORE ) ) - { - v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt + 5 * st->L_frame / 4, 256.f, tmp_buffer, st->L_frame / 2 ); - v_add( tmp_buffer, output, output, st->L_frame / 2 ); - } - - if ( st->m_frame_type == ACTIVE_FRAME ) - { - cldfbAnalysis_ivas( output, realBuffer, imagBuffer, -1, st->cldfbAna ); - } - else - { - float timeDomainBuffer[L_FRAME16k]; - float A[M + 1]; - - mvr2r( st->hFdCngDec->hFdCngCom->timeDomainBuffer_flt, timeDomainBuffer, st->L_frame ); - mvr2r( st->hFdCngDec->hFdCngCom->A_cng_flt, A, M + 1 ); - - update_decoder_LPD_cng_flt( st, timeDomainBuffer, A, st->p_bpf_noise_buf_float ); - - /* Generate additional comfort noise to mask potential coding artefacts */ - if ( st->flag_cna ) - { - generate_masking_noise( timeDomainBuffer, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, NULL, -1 ); - } - else if ( st->L_frame == L_FRAME16k && st->last_flag_cna == 1 && ( ( st->last_core == ACELP_CORE && st->last_coder_type != AUDIO ) || st->last_core == TCX_20_CORE || st->last_core == AMR_WB_CORE ) ) - { - v_multc( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt + 5 * st->L_frame / 4, 256.f, tmp_buffer, st->L_frame / 2 ); - v_add( tmp_buffer, timeDomainBuffer, timeDomainBuffer, st->L_frame / 2 ); - } - - /* check if the CLDFB works on the right sample rate */ - if ( ( st->cldfbAna->no_channels * st->cldfbAna->no_col ) != st->L_frame ) - { - resampleCldfb_ivas( st->cldfbAna, ( st->L_frame * FRAMES_PER_SEC ) ); - resampleCldfb_ivas( st->cldfbBPF, ( st->L_frame * FRAMES_PER_SEC ) ); - } - - st->cldfbSyn->bandsToZero = 0; - if ( st->bwidth == NB && st->cldfbSyn->no_channels > 10 ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - 10; - } - else if ( st->hFdCngDec->hFdCngCom->regularStopBand < st->cldfbSyn->no_channels ) - { - st->cldfbSyn->bandsToZero = st->cldfbSyn->no_channels - st->hFdCngDec->hFdCngCom->regularStopBand; - } - cldfbAnalysis_ivas( timeDomainBuffer, realBuffer, imagBuffer, -1, st->cldfbAna ); - } - - if ( st->flag_cna == 0 ) - { - set_f( st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, 0.f, st->hFdCngDec->hFdCngCom->fftlen ); - } - - if ( st->p_bpf_noise_buf_float ) - { - addBassPostFilter( st->p_bpf_noise_buf_float, -1, realBuffer, imagBuffer, st->cldfbBPF ); - } - - if ( st->output_Fs > 8000 && st->hTECDec != NULL ) - { - calcGainTemp_TBE( realBuffer, imagBuffer, st->hTECDec->loBuffer_flt, 0, st->cldfbAna->no_col, st->cldfbAna->no_channels, st->hTECDec->pGainTemp, st->tec_flag ); - } - - /* set high band buffers to zero. Covering the current frame and the overlap area. */ - if ( st->m_frame_type == ACTIVE_FRAME ) - { - for ( i = 0; i < CLDFB_NO_COL_MAX; i++ ) - { - set_f( &realBuffer[i][st->cldfbSyn->nab], 0.f, st->cldfbSyn->no_channels - st->cldfbSyn->nab ); - set_f( &imagBuffer[i][st->cldfbSyn->nab], 0.f, st->cldfbSyn->no_channels - st->cldfbSyn->nab ); - } - } - - cldfbSynthesis_ivas( realBuffer, imagBuffer, output, -1, st->cldfbSyn ); - - /* set multiplication factor according to the sampling rate */ - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - delay_tdbwe = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ); - - /* MODE1 MDCT to ACELP 2 transition */ - if ( st->last_codec_mode == MODE1 && st->last_core_bfi > ACELP_CORE ) - { - mvr2r( st->delay_buf_out, output, delay_comp ); /* copy the HQ/ACELP delay synchronization buffer at the beginning of ACELP frame */ - - if ( st->core == ACELP_CORE ) - { - tmpF = 1.0f / (float) NS2SA( st->output_Fs, 3000000 ); - if ( st->prev_bfi && st->hHQ_core->HqVoicing ) - { - mvr2r( st->hHQ_core->fer_samples, st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), NS2SA( st->output_Fs, 3000000 ) ); - } - for ( i = 0; i < NS2SA( st->output_Fs, 3000000 ); i++ ) - { - output[i + delay_comp] = ( 1 - tmpF * (float) i ) * st->hHQ_core->old_out[i + NS2SA( st->output_Fs, N_ZERO_MDCT_NS )] + tmpF * (float) i * output[i + delay_comp]; - } - } - else - { - if ( st->output_Fs == 8000 ) - { - mvr2r( st->delay_buf_out, st->hTcxDec->FBTCXdelayBuf_float, delay_comp ); - } - else - { - mvr2r( st->prev_synth_buffer, st->hTcxDec->FBTCXdelayBuf_float, delay_tdbwe ); - mvr2r( st->delay_buf_out, st->hTcxDec->FBTCXdelayBuf_float + delay_tdbwe, delay_comp ); - } - } - } - - /* set delay compensation between HQ synthesis and ACELP synthesis */ - if ( st->core == ACELP_CORE && !st->con_tcx ) - { - set_f( st->delay_buf_out, 0, delay_comp ); - mvr2r( output, st->previoussynth, output_frame ); - } - else - { - mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB - delay_comp, st->delay_buf_out, delay_comp ); - - if ( st->output_Fs == 8000 ) - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, st->previoussynth, delay_comp ); - } - else - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float + delay_tdbwe, st->previoussynth, delay_comp ); - } - - mvr2r( pcmbufFB, st->previoussynth + delay_comp, output_frame - delay_comp ); - } - - /* Delay compensation for TBE */ - if ( output_frame >= L_FRAME16k ) - { - delay_signal_float( output, output_frame, st->prev_synth_buffer, delay_tdbwe ); - } - - if ( st->igf && st->m_frame_type == ACTIVE_FRAME ) - { - if ( !st->bfi && st->core == ACELP_CORE && ( st->tec_flag || st->tfa_flag ) && st->output_Fs > 8000 && st->hTECDec != NULL ) - { - procTecTfa_TBE( hb_synth, st->hTECDec->pGainTemp, st->tfa_flag, st->last_core, (int16_t) ( output_frame / N_TEC_TFA_SUBFR ), st->tec_flag == 2 ? 1 : 0 ); - } - - if ( ( ( ( !st->bfi || st->last_core == ACELP_CORE ) && st->core == ACELP_CORE ) || - ( st->last_core == ACELP_CORE && st->bwidth != NB && st->last_codec_mode == MODE2 ) ) && - ( st->output_Fs > 8000 ) ) - { - /* Add the delayed hb_synth component to the delayed core synthesis */ - v_add( output, hb_synth, output, output_frame ); - } - } - } - - /* set delay */ - if ( st->output_Fs == 8000 ) - { - tmps = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - } - else - { - tmps = NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS ); - } - delta = NS2SA( st->output_Fs, TCXLTP_DELAY_NS ); - - /* TCX/ACELP/HQ-CORE->TCX */ - if ( ( st->bfi && st->last_core > ACELP_CORE ) || st->core > ACELP_CORE ) - { - /* TCX / HQ-CORE / TD-TCX-PLC -> TCX / TD-TCX-PLC */ - if ( st->last_core_bfi > ACELP_CORE || ( st->bfi && st->last_core > ACELP_CORE ) || ( st->prev_bfi && st->last_con_tcx ) ) - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, output, tmps ); - mvr2r( pcmbufFB, output + tmps, st->hTcxDec->L_frameTCX - tmps ); - } - /* ACELP -> TCX */ - else - { - /*cross-fading between LB-TCX and FB-TCX over 2.3125ms*/ - for ( i = 0; i < tmps; i++ ) - { - output[i + tmps] = ( output[i + tmps] * ( tmps - i ) + pcmbufFB[i] * i ) / tmps; - } - mvr2r( pcmbufFB + tmps, output + 2 * tmps, st->hTcxDec->L_frameTCX - 2 * tmps ); - } - - mvr2r( pcmbufFB + st->hTcxDec->L_frameTCX - tmps, st->hTcxDec->FBTCXdelayBuf_float, tmps ); - - if ( st->bfi && st->last_core > ACELP_CORE ) - { - if ( st->output_Fs == 8000 ) - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, st->delay_buf_out, NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - } - else - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, st->prev_synth_buffer, NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ) ); - mvr2r( st->hTcxDec->FBTCXdelayBuf_float + NS2SA( st->output_Fs, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS ), st->delay_buf_out, NS2SA( st->output_Fs, DELAY_CLDFB_NS ) ); - } - } - } - /* TCX/TD TCX PLC->ACELP */ - else if ( st->last_codec_mode == MODE2 && st->last_core > ACELP_CORE ) - { - mvr2r( st->hTcxDec->FBTCXdelayBuf_float, output, delta ); - for ( i = delta; i < tmps; i++ ) - { - output[i] = ( output[i] * ( i - delta ) + st->hTcxDec->FBTCXdelayBuf_float[i] * ( tmps - i ) ) / ( tmps - delta ); - } - } - - tcx_ltp_post_flt( st, hTcxLtpDec, st->core, output_frame, NS2SA( st->output_Fs, ACELP_LOOK_NS ) + tmps, output, st->hTcxDec->FBTCXdelayBuf_float ); - - } /* end of Mode 2 */ - - /*----------------------------------------------------------------* - * Save synthesis for HQ FEC - *----------------------------------------------------------------*/ - save_synthesis_hq_fec( st, output, output_frame, NULL ); - - - /*----------------------------------------------------------------* - * HP filtering - *----------------------------------------------------------------*/ - - hp20_flt( output, output_frame, mem_hp20_out, st->output_Fs ); - - /*--------------------------------------------------------* - * Updates - *--------------------------------------------------------*/ - - if ( st->last_is_cng == 0 && st->codec_mode == MODE2 ) - { - st->bfi = 0; - if ( st->use_partial_copy && st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 ) - { - if ( frameMode == FRAMEMODE_MISSING ) - { - st->bfi = 1; - } - } - else if ( st->m_decodeMode == DEC_CONCEALMENT_EXT ) - { - st->bfi = 1; - } - - updt_dec_common( st, -1, concealWholeFrameTmp, output ); - } - else - { - if ( st->codec_mode == MODE2 ) - { - st->bfi = 0; - } - - updt_dec_common( st, hq_core_type, concealWholeFrameTmp, output ); - } - - - pop_wmops(); - return error; -} -#endif diff --git a/lib_dec/evs_dec_fx.c b/lib_dec/evs_dec_fx.c index d0a5d1d12..5e027e652 100644 --- a/lib_dec/evs_dec_fx.c +++ b/lib_dec/evs_dec_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "basop_util.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * evs_dec_fx() * @@ -1510,4 +1509,3 @@ ivas_error evs_dec_fx( return IVAS_ERR_OK; } -#endif diff --git a/lib_dec/fd_cng_dec.c b/lib_dec/fd_cng_dec.c index 81a5ae151..ea716c867 100644 --- a/lib_dec/fd_cng_dec.c +++ b/lib_dec/fd_cng_dec.c @@ -53,31 +53,21 @@ /*------------------------------------------------------------------- * Local constants *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define DELTA_MASKING_NOISE 1e-20f -#define ST_PERIODOG_FACT 0.9 /* short-term filter factor for periodogram */ -#define CNA_ACT_DN_FACT 0.7 /* downward updating factor for CNA during active frames */ -#endif // IVAS_FLOAT_FIXED - -#define DELTA_MASKING_NOISE_Q15 0 -#define CNA_ACT_DN_LARGE_PARTITION 50 /* index of the first larger partition */ -#define FIRST_CNA_NOISE_UPD_FRAMES 5 /* minimum number of CN initialization frames */ -#define LOG_10_BASE_2 1783446566 /* Q29 */ -#ifdef IVAS_FLOAT_FIXED + +#define DELTA_MASKING_NOISE_Q15 0 +#define CNA_ACT_DN_LARGE_PARTITION 50 /* index of the first larger partition */ +#define FIRST_CNA_NOISE_UPD_FRAMES 5 /* minimum number of CN initialization frames */ +#define LOG_10_BASE_2 1783446566 /* Q29 */ #define GAIN_Q_OFFSET_IVAS_FX 45 #define LOG_10_BASE_2_BY_10_Q31 713378606 #define TWO_BY_THREE_Q31 1431655765 #define ONE_BY_FRAMES_PER_SEC_Q15 656 #define NB_LAST_BAND_SCALE_Q31 1717986918 #define SWB_13k2_LAST_BAND_SCALE_Q31 1717986918 -#endif /*------------------------------------------------------------------- * Local fucntions declarations *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void perform_noise_estimation_dec( const float *timeDomainInput, float *power_spectrum, HANDLE_FD_CNG_DEC hFdCngDec, const int16_t element_mode, const int16_t bwidth, const int16_t L_frame, const int16_t last_L_frame, const int32_t last_core_brate, const int16_t VAD ); -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * createFdCngDec() @@ -85,281 +75,12 @@ static void perform_noise_estimation_dec( const float *timeDomainInput, float *p * Create an instance of type FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error createFdCngDec( - HANDLE_FD_CNG_DEC *hFdCngDec ) -{ - HANDLE_FD_CNG_DEC hs; - ivas_error error; - error = IVAS_ERR_OK; - - /* Set output to NULL in case of errors and early return */ - *hFdCngDec = NULL; - - /* Allocate memory */ - if ( ( hs = (HANDLE_FD_CNG_DEC) malloc( sizeof( FD_CNG_DEC ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for FD CNG DEC structure" ); - } - - if ( ( error = createFdCngCom_flt( &( hs->hFdCngCom ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hFdCngDec = hs; - - return error; -} -#endif /*------------------------------------------------------------------- * initFdCngDec() * * Initialize an instance of type FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void initFdCngDec( - DEC_CORE_HANDLE st /* i/o: decoder state structure */ -) -{ - HANDLE_FD_CNG_DEC hFdCngDec; - - hFdCngDec = st->hFdCngDec; - - /* Initialize common */ - initFdCngCom_flt( hFdCngDec->hFdCngCom, st->cldfbSyn->scale_flt ); - - /* Set some counters and flags */ - hFdCngDec->flag_dtx_mode = 0; - hFdCngDec->lp_noise_float = -20.f; - hFdCngDec->lp_speech_float = 25.f; - - /* Initialize noise estimation algorithm */ - set_f( hFdCngDec->bandNoiseShape_float, 0.0f, FFTLEN2 ); - set_f( hFdCngDec->partNoiseShape_float, 0.0f, NPART ); - set_f( hFdCngDec->msPeriodog_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msAlpha_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msBminWin_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msBminSubWin_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msPsd_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msNoiseFloor_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msNoiseEst_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msMinBuf_float, FLT_MAX, MSNUMSUBFR * NPART_SHAPING ); - set_f( hFdCngDec->msCurrentMin_float, FLT_MAX, NPART_SHAPING ); - set_f( hFdCngDec->msCurrentMinOut_float, FLT_MAX, NPART_SHAPING ); - set_f( hFdCngDec->msCurrentMinSubWindow_float, FLT_MAX, NPART_SHAPING ); - set_s( hFdCngDec->msLocalMinFlag, 0, NPART_SHAPING ); - set_s( hFdCngDec->msNewMinFlag, 0, NPART_SHAPING ); - set_f( hFdCngDec->msPsdFirstMoment_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msPsdSecondMoment_float, 0.0f, NPART_SHAPING ); - hFdCngDec->msPeriodogBufPtr = 0; - set_f( hFdCngDec->msPeriodogBuf_float, 0.0f, MSBUFLEN * NPART_SHAPING ); - set_f( hFdCngDec->msLogPeriodog_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->msLogNoiseEst_float, 0.0f, NPART_SHAPING ); - set_f( hFdCngDec->psize_shaping_float, 0.0f, NPART_SHAPING ); - hFdCngDec->nFFTpart_shaping = 0; - - set_f( hFdCngDec->hFdCngCom->sidNoiseEstLp_flt, 0.0f, NPART ); - - set_f( hFdCngDec->smoothed_psd, 0.0f, L_FRAME16k ); - set_f( hFdCngDec->msPeriodog_ST, 0.0f, NPART_SHAPING ); - - hFdCngDec->ms_last_inactive_bwidth = NB; - hFdCngDec->ms_cnt_bw_up = 0; - - hFdCngDec->cna_LR_LT = 0.5f; - hFdCngDec->cna_ILD_LT = 0.0f; - hFdCngDec->first_cna_noise_updated = 0; - hFdCngDec->first_cna_noise_update_cnt = 0; - hFdCngDec->cna_nbands = CNA_INIT_NBANDS; - mvs2s( cna_init_bands, hFdCngDec->cna_band_limits, CNA_INIT_NBANDS + 1 ); - hFdCngDec->cna_act_fact = 1.0f; - hFdCngDec->cna_rescale_fact = 0.0f; - hFdCngDec->cna_seed = 5687; - set_zero( hFdCngDec->cna_cm, STEREO_DFT_BAND_MAX ); - set_zero( hFdCngDec->cna_g_state, STEREO_DFT_BAND_MAX ); - - st->CNG_mode = -1; - mvr2r( st->lsp_old, st->lspCNG, M ); - - return; -} - -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * configureFdCngDec() - * - * Configure an instance of type FD_CNG - *-------------------------------------------------------------------*/ - -void configureFdCngDec( - HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: Contains the variables related to the FD-based CNG process */ - const int16_t bwidth, - const int32_t total_brate, - const int16_t L_frame, - const int16_t last_L_frame, - const int16_t element_mode ) -{ - int16_t j, stopBandFR; - HANDLE_FD_CNG_COM hsCom = hFdCngDec->hFdCngCom; - - hsCom->CngBandwidth = bwidth; - if ( hsCom->CngBandwidth == FB ) - { - hsCom->CngBandwidth = SWB; - } - if ( total_brate != FRAME_NO_DATA && total_brate != SID_2k40 ) - { - hsCom->CngBitrate = total_brate; - } - else if ( hsCom->CngBitrate == -1 ) - { - /* set minimum active CBR bitrate if CngBitrate is uninitialized */ - if ( element_mode > EVS_MONO ) - { - hsCom->CngBitrate = IVAS_13k2; - } - else - { - hsCom->CngBitrate = ACELP_7k20; - } - } - - /* FD-CNG config for MDCT-Stereo is always the same (since for > 48 kbps only) */ - /* This may need adjustment in the future if 2TC DTX for some mode uses MDCT-Stereo DTX for lower bitrates too */ - if ( element_mode == IVAS_CPE_MDCT ) - { - hsCom->CngBitrate = IVAS_48k; - } - hsCom->numSlots = 16; - - /* NB configuration */ - if ( bwidth == NB ) - { - hsCom->FdCngSetup = FdCngSetup_nb; - hsCom->numCoreBands = 16; - hsCom->regularStopBand = 16; - } - - /* WB configuration */ - else if ( bwidth == WB ) - { - /* FFT 6.4kHz, no CLDFB */ - if ( hsCom->CngBitrate <= ACELP_8k00 && L_frame == L_FRAME ) - { - hsCom->FdCngSetup = FdCngSetup_wb1; - hsCom->numCoreBands = 16; - hsCom->regularStopBand = 16; - } - /* FFT 6.4kHz, CLDFB 8.0kHz */ - else if ( hsCom->CngBitrate <= ACELP_13k20 || L_frame == L_FRAME ) - { - hsCom->FdCngSetup = FdCngSetup_wb2; - hsCom->numCoreBands = 16; - hsCom->regularStopBand = 20; - if ( L_frame == L_FRAME16k ) - { - hsCom->FdCngSetup = FdCngSetup_wb2; - hsCom->numCoreBands = 20; - hsCom->regularStopBand = 20; - hsCom->FdCngSetup.fftlen = 640; - hsCom->FdCngSetup.stopFFTbin = 256; - } - } - /* FFT 8.0kHz, no CLDFB */ - else - { - hsCom->FdCngSetup = FdCngSetup_wb3; - hsCom->numCoreBands = 20; - hsCom->regularStopBand = 20; - } - } - - /* SWB/FB configuration */ - else - { - /* FFT 6.4kHz, CLDFB 14kHz */ - if ( L_frame == L_FRAME ) - { - hsCom->FdCngSetup = FdCngSetup_swb1; - hsCom->numCoreBands = 16; - hsCom->regularStopBand = 35; - } - /* FFT 8.0kHz, CLDFB 16kHz */ - else - { - hsCom->FdCngSetup = FdCngSetup_swb2; - hsCom->numCoreBands = 20; - hsCom->regularStopBand = 40; - if ( last_L_frame == L_FRAME && element_mode == IVAS_CPE_DFT ) - { - hsCom->regularStopBand = 35; - } - } - } - - - hsCom->fftlen = hsCom->FdCngSetup.fftlen; - hsCom->stopFFTbin = hsCom->FdCngSetup.stopFFTbin; - - /* Configure the SID quantizer and the Comfort Noise Generator */ - - hsCom->startBand = 2; - hsCom->stopBand = hsCom->FdCngSetup.sidPartitions[hsCom->FdCngSetup.numPartitions - 1] + 1; - initPartitions_flt( hsCom->FdCngSetup.sidPartitions, hsCom->FdCngSetup.numPartitions, hsCom->startBand, hsCom->stopBand, hsCom->part, &hsCom->npart, hsCom->midband, hsCom->psize_flt, hsCom->psize_inv_flt, 0 ); - - if ( hsCom->stopFFTbin == 160 ) - { - hsCom->nFFTpart = 17; - } - else if ( hsCom->stopFFTbin == 256 ) - { - hsCom->nFFTpart = 20; - } - else - { - hsCom->nFFTpart = 21; - } - hsCom->nCLDFBpart = hsCom->npart - hsCom->nFFTpart; - for ( j = 0; j < hsCom->nCLDFBpart; j++ ) - { - hsCom->CLDFBpart[j] = hsCom->part[j + hsCom->nFFTpart] - ( hsCom->stopFFTbin - hsCom->startBand ); - hsCom->CLDFBpsize_inv_flt[j] = hsCom->psize_inv_flt[j + hsCom->nFFTpart]; - } - - stopBandFR = (int16_t) floor( 1000.f /*Hz*/ / 25.f /*Hz/Bin*/ ); - if ( stopBandFR > hsCom->stopFFTbin ) - { - stopBandFR = hsCom->stopFFTbin; - } - initPartitions_flt( hsCom->FdCngSetup.shapingPartitions, hsCom->FdCngSetup.numShapingPartitions, hsCom->startBand, hsCom->stopFFTbin, hFdCngDec->part_shaping, &hFdCngDec->npart_shaping, hFdCngDec->midband_shaping, hFdCngDec->psize_shaping_float, hFdCngDec->psize_inv_shaping_float, stopBandFR ); - - hFdCngDec->nFFTpart_shaping = hFdCngDec->npart_shaping; - - switch ( hsCom->fftlen ) - { - case 512: - hsCom->fftSineTab_flt = NULL; - hsCom->olapWinAna_flt = olapWinAna512; - hsCom->olapWinSyn_flt = olapWinSyn256; - break; - case 640: - hsCom->fftSineTab_flt = fftSineTab640; - hsCom->olapWinAna_flt = olapWinAna640; - hsCom->olapWinSyn_flt = olapWinSyn320; - break; - default: - assert( !"Unsupported FFT length for FD-based CNG" ); - break; - } - hsCom->frameSize = hsCom->fftlen >> 1; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void configureFdCngDec_ivas_fx( HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: Contains the variables related to the FD-based CNG process */ const Word16 bwidth, /*Q0*/ @@ -578,29 +299,12 @@ void configureFdCngDec_ivas_fx( return; } -#endif /*------------------------------------------------------------------- * deleteFdCngDec() * * Delete the instance of type FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void deleteFdCngDec( - HANDLE_FD_CNG_DEC *hFdCngDec ) -{ - HANDLE_FD_CNG_DEC hsDec = *hFdCngDec; - - IF( hsDec != NULL ) - { - deleteFdCngCom_flt( &( hsDec->hFdCngCom ) ); - free( hsDec ); - *hFdCngDec = NULL; - } - - return; -} -#endif // !IVAS_FLOAT_FIXED /*------------------------------------------------------------------- @@ -608,1307 +312,154 @@ void deleteFdCngDec( * * Apply the CLDFB-based CNG at the decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ApplyFdCng( - float *timeDomainInput, - float *powerSpectrum, - float **realBuffer, /* i/o: Real part of the buffer */ - float **imagBuffer, /* i/o: Imaginary part of the buffer */ - Decoder_State *st, - const int16_t concealWholeFrame, - const int16_t is_music ) + +/*------------------------------------------------------------------- + * FdCng_decodeSID() + * + * Decode the FD-CNG bitstream + *-------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------- + * FdCng_decodeSID_ivas_fx() + * + * Decode the FD-CNG bitstream + *-------------------------------------------------------------------*/ + +void FdCng_decodeSID_ivas_fx( + Decoder_State *st /* i/o: decoder state structure */ +) { - HANDLE_FD_CNG_DEC hFdCngDec = st->hFdCngDec; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *sidNoiseEst_flt = hFdCngCom->sidNoiseEst_flt; - int16_t j, k; - float factor; - float lsp_cng[M]; - int16_t L_frame, last_L_frame; - int32_t sr_core; - - push_wmops( "ApplyFdCng" ); - - /* limit L_frame and core Fs values for MDCT-Stereo modes which can have higher core sampling than 16kHz, but use a downsampled buffer */ - L_frame = min( st->L_frame, L_FRAME16k ); - last_L_frame = min( st->last_L_frame, L_FRAME16k ); - sr_core = min( st->sr_core, INT_FS_16k ); - - if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME ) - { - hFdCngCom->inactive_frame_counter = 0; - } + Word16 N; + Word32 *sidNoiseEst; + Word32 gain; + Word16 i, index; + Word32 v[32]; + Word16 indices[32]; + HANDLE_FD_CNG_COM hFdCngCom; + Word32 *invTrfMatrix_fx; + Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; + Word16 tmp16; - if ( st->element_mode == IVAS_CPE_TD ) + IF( st->element_mode == EVS_MONO ) { - hFdCngDec->flag_dtx_mode = hFdCngDec->flag_dtx_mode || st->first_CNG; + tmp16 = GAIN_Q_OFFSET_EVS_FX_Q0; + move16(); } - - switch ( st->m_frame_type ) + ELSE { + tmp16 = GAIN_Q_OFFSET_IVAS_FX_Q0; + move16(); + } - case ACTIVE_FRAME: - /************************** - * ACTIVE_FRAME at DECODER * - **************************/ - - hFdCngCom->inactive_frame_counter = 0; - hFdCngCom->sid_frame_counter = 0; - /* set noise estimation inactive during concealment, as no update with noise generated by concealment should be performed. */ - /* set noise estimation inactive when we have bit errors, as no update with noise generated by corrupt frame (biterror) should be performed. */ - if ( concealWholeFrame == 0 && - ( timeDomainInput == NULL || - ( *timeDomainInput( -FLT_MAX ) && - *( timeDomainInput + hFdCngCom->frameSize - 1 ) < FLT_MAX && - *( timeDomainInput + hFdCngCom->frameSize - 1 ) > ( -FLT_MAX ) ) ) && - ( ( ( ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT && hFdCngDec->flag_dtx_mode ) || !st->VAD || ( st->ini_frame < 100 && st->is_ism_format ) ) && - !( st->cng_type == LP_CNG && hFdCngDec->flag_dtx_mode ) && ( is_music == 0 ) ) || - ( st->element_mode == IVAS_CPE_TD ) ) && - ( !st->BER_detect ) ) - { - /* Perform noise estimation at the decoder */ - perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); + const Word16 gain_q_offset = tmp16; /* Q0 */ + move16(); - if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT ) - { - /* Update the shaping parameters */ - scalebands_flt( hFdCngDec->msNoiseEst_float, hFdCngDec->part_shaping, hFdCngDec->nFFTpart_shaping, hFdCngDec->midband_shaping, hFdCngDec->nFFTpart_shaping, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngDec->bandNoiseShape_float, 1 ); - } + invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /*Q31*/ - /* Update CNG levels */ - if ( hFdCngDec->flag_dtx_mode && st->cng_type == FD_CNG ) - { - bandcombinepow_flt( hFdCngDec->bandNoiseShape_float, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngCom->part, hFdCngCom->nFFTpart, hFdCngCom->psize_inv_flt, hFdCngDec->partNoiseShape_float ); /* This needs to be done only once per inactive phase */ + hFdCngCom = ( st->hFdCngDec )->hFdCngCom; - j = 0; - for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) - { - factor = ( hFdCngCom->sidNoiseEst_flt[k] + DELTA ) / ( hFdCngDec->partNoiseShape_float[k] + DELTA ); - for ( ; j <= hFdCngCom->part[k]; j++ ) - { - cngNoiseLevel_flt[j] = hFdCngDec->bandNoiseShape_float[j] * factor; - } - } - } - else - { - /* This sets the new CNG levels until a SID update overwrites it */ - if ( !( st->element_mode == IVAS_CPE_TD ) || ( st->element_mode == IVAS_CPE_TD && !hFdCngDec->flag_dtx_mode && !st->VAD ) ) - { - mvr2r( hFdCngDec->bandNoiseShape_float, cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); /* This sets the new CNG levels until a SID update overwrites it */ - } - } + sidNoiseEst = hFdCngCom->sidNoiseEst; /*Q16*/ - if ( st->element_mode == IVAS_CPE_MDCT && timeDomainInput == NULL ) - { - st->hTcxDec->CngLevelBackgroundTrace_bfi = sqrtf( sum_f( cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / NORM_MDCT_FACTOR ); - } - else - { - st->hTcxDec->CngLevelBackgroundTrace_bfi = (float) sqrt( ( sum_f( cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / L_frame ); - } - st->cngTDLevel_float = (float) sqrt( ( sum_f( cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / st->L_frame ); - } - else if ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) - { - if ( hFdCngCom->active_frame_counter > 0 ) - { - /* Perform noise estimation in active frames in the decoder for downward updates */ - perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); - } - } + N = hFdCngCom->npart; /*Q0*/ + move16(); + gain = 0; + move32(); + hFdCngCom->sid_frame_counter = add( hFdCngCom->sid_frame_counter, 1 ); + move16(); - if ( ( concealWholeFrame == 1 ) && ( st->nbLostCmpt == 1 ) ) - { - /* update lsf cng estimate for concealment. Do that during concealment, in order to avoid addition clean channel complexity*/ + /* Read bitstream */ + FOR( i = 0; i < FD_CNG_stages_37bits; i++ ) + { + indices[i] = get_next_indice_fx( st, bits_37bits[i] ); /*Q0*/ + move16(); + } - /* always set psychParameters for MDCT-Stereo ... */ - if ( st->element_mode == IVAS_CPE_MDCT && st->hTonalMDCTConc != NULL ) - { - st->hTonalMDCTConc->psychParams = ( st->core == TCX_20_CORE ) ? &st->hTonalMDCTConc->psychParamsTCX20 : &st->hTonalMDCTConc->psychParamsTCX10; - } + index = get_next_indice_fx( st, 7 ); - /* ... but do actual computations only if sufficient energy in noise shape */ - if ( sum_f( cngNoiseLevel_flt + hFdCngCom->startBand, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) > 0.01f ) - { - if ( st->element_mode == IVAS_CPE_MDCT && st->core != ACELP_CORE ) - { - TonalMdctConceal_whiten_noise_shape_ivas( st, L_frame, ON_FIRST_LOST_FRAME ); - } - else if ( st->element_mode != IVAS_CPE_MDCT || st->core == ACELP_CORE ) - { - lpc_from_spectrum_flt( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, 0.f ); - a2lsp_stab( hFdCngCom->A_cng_flt, lsp_cng, st->lspold_cng_float ); - mvr2r( lsp_cng, st->lspold_cng_float, M ); - lsp2lsf( lsp_cng, st->lsf_cng_float, M, sr_core ); - } - st->plcBackgroundNoiseUpdated = 1; - } - } - break; + /* MSVQ decoder */ - case SID_FRAME: - hFdCngDec->flag_dtx_mode = 1; - /* FALLTHRU */ + IF( st->element_mode != EVS_MONO ) + { + create_IDCT_N_Matrix_fx( invTrfMatrix_fx, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); + msvq_dec_fx( ivas_cdk_37bits_fx, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix_fx, v, NULL, 7 ); + } + ELSE + { /* Legacy EVS_MONO MSVQ tables */ + msvq_dec_fx( cdk_37bits, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 0, NULL, v, NULL, 7 ); + } - case ZERO_FRAME: - if ( st != NULL && st->cng_type == LP_CNG ) - { - /* Perform noise estimation on inactive phase at the decoder */ - perform_noise_estimation_dec( timeDomainInput, powerSpectrum, hFdCngDec, st->element_mode, st->bwidth, L_frame, last_L_frame, st->last_core_brate, st->VAD ); + /* Decode gain */ + // gain = ((float)index - gain_q_offset) / 1.5f; + gain = L_mult0( sub( index, gain_q_offset ), 21845 ); // Q15 - if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_DFT ) - { - /* Update the shaping parameters */ - scalebands_flt( hFdCngDec->msNoiseEst_float, hFdCngDec->part_shaping, hFdCngDec->nFFTpart_shaping, hFdCngDec->midband_shaping, hFdCngDec->nFFTpart_shaping, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngDec->bandNoiseShape_float, 1 ); - } + /* Apply gain and undo log */ + Word16 res_exp[NPART]; + Word16 max_res_exp = 0; + move16(); + FOR( i = 0; i < N; i++ ) + { + sidNoiseEst[i] = BASOP_util_Pow2( Mpy_32_32( L_add( v[i], gain ), LOG_10_BASE_2_BY_10_Q31 ), Q16, &res_exp[i] ); /*Q31 - res_exp[i]*/ + move32(); + if ( LT_16( max_res_exp, res_exp[i] ) ) + { + max_res_exp = res_exp[i]; + move16(); + } + } - /* This sets the new CNG levels until a SID update overwrites it */ - mvr2r( hFdCngDec->bandNoiseShape_float, cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); /* This sets the new CNG levels until a SID update overwrites it */ - - st->cngTDLevel_float = (float) sqrt( ( sum_f( cngNoiseLevel_flt, hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 * hFdCngCom->fftlen ) / L_frame ); - break; - } - - hFdCngCom->inactive_frame_counter++; - - /************************************* - * SID_FRAME or ZERO_FRAME at DECODER * - *************************************/ - - /* Detect first non-active frame */ - if ( hFdCngCom->inactive_frame_counter == 1 ) - { - /* Compute the fine spectral structure of the comfort noise shape using the decoder-side noise estimates */ - bandcombinepow_flt( hFdCngDec->bandNoiseShape_float, hFdCngCom->stopFFTbin - hFdCngCom->startBand, hFdCngCom->part, hFdCngCom->nFFTpart, hFdCngCom->psize_inv_flt, hFdCngDec->partNoiseShape_float ); - - if ( st->element_mode == IVAS_CPE_DFT ) - { - mvr2r( st->hFdCngDec->hFdCngCom->sidNoiseEst_flt, st->hFdCngDec->hFdCngCom->sidNoiseEstLp_flt, NPART ); - } - } - - if ( st->m_frame_type == SID_FRAME ) - { - if ( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) - { - /* At initialization, interpolate the bin/band-wise levels from the partition levels */ - scalebands_flt( sidNoiseEst_flt, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, cngNoiseLevel_flt, 1 ); - } - else - { - if ( st->element_mode == IVAS_CPE_DFT ) - { - sidNoiseEst_flt = hFdCngCom->sidNoiseEstLp_flt; - } - - /* Interpolate the CLDFB band levels from the SID (partition) levels */ - if ( hFdCngCom->regularStopBand > hFdCngCom->numCoreBands ) - { - scalebands_flt( sidNoiseEst_flt, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, cngNoiseLevel_flt, 0 ); - } - - - /* Shape the SID noise levels in each FFT bin */ - j = 0; - for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) - { - factor = ( sidNoiseEst_flt[k] + DELTA ) / ( hFdCngDec->partNoiseShape_float[k] + DELTA ); - for ( ; j <= hFdCngCom->part[k]; j++ ) - { - cngNoiseLevel_flt[j] = hFdCngDec->bandNoiseShape_float[j] * factor; - } - } - } - } - else if ( st->element_mode == IVAS_CPE_DFT ) - { - if ( !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) - { - sidNoiseEst_flt = hFdCngCom->sidNoiseEstLp_flt; - j = 0; - for ( k = 0; k < hFdCngCom->nFFTpart; k++ ) - { - factor = ( sidNoiseEst_flt[k] + DELTA ) / ( hFdCngDec->partNoiseShape_float[k] + DELTA ); - for ( ; j <= hFdCngCom->part[k]; j++ ) - { - cngNoiseLevel_flt[j] = hFdCngDec->bandNoiseShape_float[j] * factor; - } - } - } - } - if ( st->codec_mode == MODE2 ) - { - /* Generate comfort noise during SID or zero frames */ - generate_comfort_noise_dec( realBuffer, imagBuffer, st, -1 ); - } - - break; - - default: - break; - } - - pop_wmops(); - - return; -} - - -/*------------------------------------------------------------------- - * perform_noise_estimation_dec() - * - * Perform noise estimation at the decoder - *-------------------------------------------------------------------*/ - -static void perform_noise_estimation_dec( - const float *timeDomainInput, - float *power_spectrum, - HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure containing all buffers and variables */ - const int16_t element_mode, /* i : element mode */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t L_frame, /* i : frame length at internal Fs */ - const int16_t last_L_frame, /* i : frame length of the last frame at internal Fs */ - const int32_t last_core_brate, /* i : previous frame core bitrate */ - const int16_t VAD /* i : VAD flag in the decoder */ -) -{ - float *ptr_r; - float *ptr_i; - int16_t startBand = hFdCngDec->hFdCngCom->startBand; - int16_t stopFFTbin = hFdCngDec->hFdCngCom->stopFFTbin; - float *fftBuffer = hFdCngDec->hFdCngCom->fftBuffer_flt; - float *periodog_flt = hFdCngDec->hFdCngCom->periodog_flt; - float *ptr_per = periodog_flt; - float *msPeriodog = hFdCngDec->msPeriodog_float; - float *msNoiseEst = hFdCngDec->msNoiseEst_float; - - int16_t *part = hFdCngDec->part_shaping; - int16_t npart = hFdCngDec->npart_shaping; - int16_t nFFTpart = hFdCngDec->nFFTpart_shaping; - float *psize_inv_flt = hFdCngDec->psize_inv_shaping_float; - float *psize_flt = hFdCngDec->psize_shaping_float; - float *msLogPeriodog = hFdCngDec->msLogPeriodog_float; - float *msLogNoiseEst = hFdCngDec->msLogNoiseEst_float; - int16_t i; - float enr, enr_tot, enr_tot0, enr_ratio, alpha; - int16_t p; - float temp, ftemp, delta; - float wght; - - if ( !( element_mode == IVAS_CPE_MDCT && power_spectrum != NULL ) ) - { - /* Perform STFT analysis */ - AnalysisSTFT_flt( timeDomainInput, fftBuffer, hFdCngDec->hFdCngCom ); - } - - if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) - { - /* Calculate periodogram (squared magnitude in each FFT bin) */ - if ( startBand == 0 ) - { - ( *ptr_per ) = fftBuffer[0] * fftBuffer[0]; - ptr_per++; - ptr_r = fftBuffer + 2; - } - else - { - ptr_r = fftBuffer + 2 * startBand; - } - - ptr_i = ptr_r + 1; - - for ( ; ptr_per < periodog_flt + stopFFTbin - startBand; ptr_per++ ) - { - ( *ptr_per ) = ( *ptr_r ) * ( *ptr_r ) + ( *ptr_i ) * ( *ptr_i ); - ptr_r += 2; - ptr_i += 2; - } - - /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ - v_multc( periodog_flt, 4.f / (float) ( hFdCngDec->hFdCngCom->fftlen * hFdCngDec->hFdCngCom->fftlen ), periodog_flt, stopFFTbin - startBand ); - - /* Combine bins of power spectrum into partitions */ - i = 0; - for ( p = 0; p < npart; p++ ) - { - - /* calculate mean over all bins in power partition */ - temp = 0; - for ( ; i <= part[p]; i++ ) - { - temp += periodog_flt[i]; - } - msPeriodog[p] = temp * psize_inv_flt[p]; - } - - /* compensate for the loss of variance - don't do when first noise update is not completed yet due to risk of msPeriodog[p] < 0 */ - if ( hFdCngDec->first_cna_noise_updated ) - { - i = 0; - for ( p = 0; p < npart; p++ ) - { - /* calculate variance over all bins in power partition */ - temp = 0; - for ( ; i <= part[p]; i++ ) - { - delta = periodog_flt[i] - msPeriodog[p]; - temp += delta * delta; - } - temp *= psize_inv_flt[p]; - - /* compensate for the loss of variance */ - msPeriodog[p] = (float) ( msPeriodog[p] + sqrt( temp ) * rand_gauss_flt( &ftemp, &hFdCngDec->cna_seed ) ); - - if ( msPeriodog[p] < 1e-5f ) - { - msPeriodog[p] = 1e-5f; - } - } - } - - /* calculate total energy (short-term and long-term) */ - enr_tot = sum_f( msPeriodog, npart ) + EPSILON; - enr_tot0 = sum_f( msNoiseEst, npart ) + EPSILON; - - /* update short-term periodogram on larger partitions */ - for ( p = CNA_ACT_DN_LARGE_PARTITION; p < npart; p++ ) - { - if ( L_frame != last_L_frame || last_core_brate <= SID_2k40 ) - { - /* core Fs has changed or last frame was SID/NO_DATA -> re-initialize short-term periodogram */ - hFdCngDec->msPeriodog_ST[p] = msPeriodog[p]; - } - else - { - hFdCngDec->msPeriodog_ST[p] = (float) ( ST_PERIODOG_FACT * hFdCngDec->msPeriodog_ST[p] + ( 1 - ST_PERIODOG_FACT ) * msPeriodog[p] ); - } - } - - /* core Fs has changed -> partitions have changed -> re-calculate long-term periodogram */ - /* part L_FRAME16k L_FRAME */ - /* ... */ - /* [55] 146 146 */ - /* [56] 174 160 */ - /* [57] 210 174 */ - /* [58] 254 190 */ - /* [59] 306 210 */ - /* [60] 317 230 */ - /* [61] 253 */ - - if ( last_L_frame == L_FRAME16k && L_frame == L_FRAME ) - { - msNoiseEst[61] = msNoiseEst[58]; - msNoiseEst[60] = min( msNoiseEst[58], msNoiseEst[57] ); - msNoiseEst[59] = msNoiseEst[57]; - msNoiseEst[58] = msNoiseEst[56]; - msNoiseEst[57] = msNoiseEst[56]; - msNoiseEst[56] = min( msNoiseEst[56], msNoiseEst[55] ); - } - else if ( last_L_frame == L_FRAME && L_frame == L_FRAME16k ) - { - msNoiseEst[56] = min( msNoiseEst[56], msNoiseEst[57] ); - msNoiseEst[57] = min( msNoiseEst[58], msNoiseEst[59] ); - msNoiseEst[58] = min( msNoiseEst[60], msNoiseEst[61] ); - msNoiseEst[59] = 0.0f; - msNoiseEst[60] = 0.0f; - msNoiseEst[61] = 0.0f; - - hFdCngDec->ms_cnt_bw_up = FIRST_CNA_NOISE_UPD_FRAMES; - } - - /* Smooth with IIR filter */ - if ( !hFdCngDec->first_cna_noise_updated ) - { - if ( !VAD ) - { - /* background noise update with moving average */ - alpha = 1.0f / ( hFdCngDec->first_cna_noise_update_cnt + 1 ); - for ( p = 0; p < npart; p++ ) - { - msNoiseEst[p] = ( 1 - alpha ) * msNoiseEst[p] + alpha * msPeriodog[p]; - } - - /* check, if we reached the required number of first CNA noise update frames */ - if ( hFdCngDec->first_cna_noise_update_cnt < FIRST_CNA_NOISE_UPD_FRAMES - 1 ) - { - hFdCngDec->first_cna_noise_update_cnt++; - } - else - { - hFdCngDec->first_cna_noise_updated = 1; - if ( hFdCngDec->hFdCngCom->msFrCnt_init_counter == 0 ) - { - hFdCngDec->hFdCngCom->msFrCnt_init_counter = 1; - } - } - } - else - { - hFdCngDec->first_cna_noise_update_cnt = 0; - } - } - else - { - hFdCngDec->hFdCngCom->msFrCnt_init_counter = 1; - if ( VAD ) - { - /* no updates during active frames except for significant energy drops */ - enr_ratio = enr_tot / enr_tot0; - if ( enr_ratio < 0.5f ) - { - /* total energy significantly decreases during active frames -> downward update */ - wght = lin_interp( enr_ratio, 0.0f, 0.8f, 0.5f, 0.95f, 1 ); - for ( p = 0; p < npart; p++ ) - { - if ( msPeriodog[p] < msNoiseEst[p] ) - { - msNoiseEst[p] = wght * msNoiseEst[p] + ( 1 - wght ) * msPeriodog[p]; - } - } - } - else - { - /* energy significantly decreases in one of the larger partitions during active frames -> downward update */ - for ( p = CNA_ACT_DN_LARGE_PARTITION; p < npart; p++ ) - { - if ( hFdCngDec->msPeriodog_ST[p] < msNoiseEst[p] ) - { - msNoiseEst[p] = (float) ( CNA_ACT_DN_FACT * msNoiseEst[p] + ( 1 - CNA_ACT_DN_FACT ) * hFdCngDec->msPeriodog_ST[p] ); - } - } - } - } - else - { - - if ( bwidth >= WB && hFdCngDec->ms_last_inactive_bwidth == NB ) - { - /* bandwidth increased -> set counter for fast initilization */ - hFdCngDec->ms_cnt_bw_up = FIRST_CNA_NOISE_UPD_FRAMES; - } - hFdCngDec->ms_last_inactive_bwidth = bwidth; - /* update background noise during inactive frames */ - ptr_per = msNoiseEst; - for ( p = 0; p < npart; p++ ) - { - enr = msPeriodog[p]; - alpha = 0.95f; - /* bandwidth increased -> do fast re-initilization */ - if ( hFdCngDec->ms_cnt_bw_up > 0 && p > 55 ) - { - alpha = 1.0f / ( hFdCngDec->ms_cnt_bw_up + 1 ); - } - else if ( enr < *ptr_per && part[p] == 1 ) - { - /* faster downward update for single-bin partitions */ - alpha = 0.8f; - } - else if ( enr > 2.0f * ( *ptr_per ) ) - { - /* prevent abrupt upward updates */ - enr = 2.0f * ( *ptr_per ); - } - - /* IIR smoothing */ - *ptr_per *= alpha; - *ptr_per += ( 1 - alpha ) * enr; - ptr_per++; - } - - if ( hFdCngDec->ms_cnt_bw_up > 0 ) - { - hFdCngDec->ms_cnt_bw_up--; - } - } - } - - mvr2r( msNoiseEst, hFdCngDec->msPsd_float, npart ); - - /* Expand partitions into bins of power spectrum */ - scalebands_flt( msNoiseEst, part, nFFTpart, hFdCngDec->midband_shaping, nFFTpart, stopFFTbin - startBand, hFdCngDec->bandNoiseShape_float, 1 ); - - mvr2r( hFdCngDec->bandNoiseShape_float, &hFdCngDec->smoothed_psd[startBand], stopFFTbin - startBand ); - set_zero( &hFdCngDec->smoothed_psd[stopFFTbin], L_FRAME16k - stopFFTbin ); - } - else - { - if ( element_mode == IVAS_CPE_MDCT && power_spectrum != NULL ) - { - /* use power spectrum calculated in the MDCT-domain instead of calculating new power spectrum */ - periodog_flt = power_spectrum; - } - else - { - /* Compute the squared magnitude in each FFT bin */ - if ( startBand == 0 ) - { - ( *ptr_per ) = fftBuffer[0] * fftBuffer[0]; /* DC component */ - ptr_per++; - ptr_r = fftBuffer + 2; - } - else - { - ptr_r = fftBuffer + 2 * startBand; - } - - ptr_i = ptr_r + 1; - - for ( ; ptr_per < periodog_flt + stopFFTbin - startBand; ptr_per++ ) - { - ( *ptr_per ) = ( *ptr_r ) * ( *ptr_r ) + ( *ptr_i ) * ( *ptr_i ); - ptr_r += 2; - ptr_i += 2; - } - /* Nyquist frequency is discarded */ - - /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ - v_multc( periodog_flt, 4.f / (float) ( hFdCngDec->hFdCngCom->fftlen * hFdCngDec->hFdCngCom->fftlen ), periodog_flt, stopFFTbin - startBand ); - } - - /* Adjust to the desired frequency resolution by averaging over spectral partitions for SID transmission */ - bandcombinepow_flt( periodog_flt, stopFFTbin - startBand, part, npart, psize_inv_flt, msPeriodog ); - - /* Compress MS inputs */ - compress_range_flt( msPeriodog, msLogPeriodog, npart ); - - /* Call the minimum statistics routine for noise estimation */ - minimum_statistics_flt( npart, nFFTpart, psize_flt, msLogPeriodog, hFdCngDec->msNoiseFloor_float, msLogNoiseEst, hFdCngDec->msAlpha_float, hFdCngDec->msPsd_float, hFdCngDec->msPsdFirstMoment_float, hFdCngDec->msPsdSecondMoment_float, hFdCngDec->msMinBuf_float, hFdCngDec->msBminWin_float, hFdCngDec->msBminSubWin_float, hFdCngDec->msCurrentMin_float, hFdCngDec->msCurrentMinOut_float, hFdCngDec->msCurrentMinSubWindow_float, hFdCngDec->msLocalMinFlag, hFdCngDec->msNewMinFlag, hFdCngDec->msPeriodogBuf_float, &( hFdCngDec->msPeriodogBufPtr ), hFdCngDec->hFdCngCom, - DEC, element_mode ); - - /* Expand MS outputs */ - expand_range_flt( msLogNoiseEst, msNoiseEst, npart ); - } - - return; -} -#endif - -/*------------------------------------------------------------------- - * FdCng_decodeSID() - * - * Decode the FD-CNG bitstream - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void FdCng_decodeSID( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - int16_t N; - float *sidNoiseEst_flt; - float gain; - int16_t i, index; - float v[32]; - int16_t indices[32]; - HANDLE_FD_CNG_COM hFdCngCom; - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - - const float gain_q_offset = ( st->element_mode == EVS_MONO ) ? GAIN_Q_OFFSET_EVS : GAIN_Q_OFFSET_IVAS; - - invTrfMatrix = (float *) tmpRAM; - - hFdCngCom = ( st->hFdCngDec )->hFdCngCom; - - sidNoiseEst_flt = hFdCngCom->sidNoiseEst_flt; - - N = hFdCngCom->npart; - gain = 0.0f; - hFdCngCom->sid_frame_counter++; - - /* Read bitstream */ - for ( i = 0; i < FD_CNG_stages_37bits; i++ ) - { - indices[i] = get_next_indice( st, bits_37bits[i] ); - } - - index = get_next_indice( st, 7 ); - - /* MSVQ decoder */ - - if ( st->element_mode != EVS_MONO ) - { - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix, v, NULL ); - } - else - { /* Legacy EVS_MONO MSVQ tables */ - msvq_dec_float( cdk_37bits_flt, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 0, NULL, v, NULL ); - } - - - /* Decode gain */ - gain = ( (float) index - gain_q_offset ) / 1.5f; - - /* Apply gain and undo log */ - for ( i = 0; i < N; i++ ) - { - sidNoiseEst_flt[i] = (float) pow( 10.f, ( v[i] + gain ) / 10.f ); - } - - /* NB last band energy compensation */ - - if ( hFdCngCom->CngBandwidth == NB ) - { - sidNoiseEst_flt[N - 1] *= NB_LAST_BAND_SCALE_FLT; - } - - if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) - { - sidNoiseEst_flt[N - 1] *= SWB_13k2_LAST_BAND_SCALE_FLT; - } - - scalebands_flt( sidNoiseEst_flt, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel_flt, 1 ); - - lpc_from_spectrum_flt( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, st->preemph_fac_float ); - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * FdCng_decodeSID_ivas_fx() - * - * Decode the FD-CNG bitstream - *-------------------------------------------------------------------*/ - -void FdCng_decodeSID_ivas_fx( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - Word16 N; - Word32 *sidNoiseEst; - Word32 gain; - Word16 i, index; - Word32 v[32]; - Word16 indices[32]; - HANDLE_FD_CNG_COM hFdCngCom; - Word32 *invTrfMatrix_fx; - Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - Word16 tmp16; - - IF( st->element_mode == EVS_MONO ) - { - tmp16 = GAIN_Q_OFFSET_EVS_FX_Q0; - move16(); - } - ELSE - { - tmp16 = GAIN_Q_OFFSET_IVAS_FX_Q0; - move16(); - } - - const Word16 gain_q_offset = tmp16; /* Q0 */ - move16(); - - invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /*Q31*/ - - hFdCngCom = ( st->hFdCngDec )->hFdCngCom; - - sidNoiseEst = hFdCngCom->sidNoiseEst; /*Q16*/ - - N = hFdCngCom->npart; /*Q0*/ - move16(); - gain = 0; - move32(); - hFdCngCom->sid_frame_counter = add( hFdCngCom->sid_frame_counter, 1 ); - move16(); - - /* Read bitstream */ - FOR( i = 0; i < FD_CNG_stages_37bits; i++ ) - { - indices[i] = get_next_indice_fx( st, bits_37bits[i] ); /*Q0*/ - move16(); - } - - index = get_next_indice_fx( st, 7 ); - - /* MSVQ decoder */ - - IF( st->element_mode != EVS_MONO ) - { - create_IDCT_N_Matrix_fx( invTrfMatrix_fx, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); - msvq_dec_fx( ivas_cdk_37bits_fx, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix_fx, v, NULL, 7 ); - } - ELSE - { /* Legacy EVS_MONO MSVQ tables */ - msvq_dec_fx( cdk_37bits, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 0, NULL, v, NULL, 7 ); - } - - - /* Decode gain */ - // gain = ((float)index - gain_q_offset) / 1.5f; - gain = L_mult0( sub( index, gain_q_offset ), 21845 ); // Q15 - - /* Apply gain and undo log */ - Word16 res_exp[NPART]; - Word16 max_res_exp = 0; - move16(); - FOR( i = 0; i < N; i++ ) - { - sidNoiseEst[i] = BASOP_util_Pow2( Mpy_32_32( L_add( v[i], gain ), LOG_10_BASE_2_BY_10_Q31 ), Q16, &res_exp[i] ); /*Q31 - res_exp[i]*/ - move32(); - if ( LT_16( max_res_exp, res_exp[i] ) ) - { - max_res_exp = res_exp[i]; - move16(); - } - } - - FOR( i = 0; i < N; i++ ) - { - sidNoiseEst[i] = L_shr( sidNoiseEst[i], sub( max_res_exp, res_exp[i] ) ); /*Q31 - max_res_exp*/ - move32(); - } - - hFdCngCom->sidNoiseEstExp = max_res_exp; - move16(); - - /* NB last band energy compensation */ - - IF( hFdCngCom->CngBandwidth == NB ) - { - sidNoiseEst[( N - 1 )] = Mpy_32_16_1( sidNoiseEst[( N - 1 )], NB_LAST_BAND_SCALE ); /*Q31 - max_res_exp*/ - move32(); - } - - test(); - IF( EQ_16( hFdCngCom->CngBandwidth, SWB ) && LE_32( hFdCngCom->CngBitrate, ACELP_13k20 ) ) - { - sidNoiseEst[( N - 1 )] = Mpy_32_16_1( sidNoiseEst[( N - 1 )], SWB_13k2_LAST_BAND_SCALE ); /*Q31 - max_res_exp*/ - move32(); - } - - scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, sub( hFdCngCom->stopBand, hFdCngCom->startBand ), hFdCngCom->cngNoiseLevel, 1 ); - hFdCngCom->cngNoiseLevelExp = hFdCngCom->sidNoiseEstExp; - move16(); - - lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, st->preemph_fac ); - - return; -} -#endif - -/*------------------------------------------------------------------- - * noisy_speech_detection() - * - * - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void noisy_speech_detection( - HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ - const int16_t vad, /* i : VAD flag */ - const float syn[] /* i : input time-domain frame */ -) -{ - float tmp; - - if ( vad == 0 ) - { - tmp = dotp( hFdCngDec->msNoiseEst_float, hFdCngDec->psize_shaping_float, hFdCngDec->nFFTpart_shaping ); - hFdCngDec->lp_noise_float = 0.995f * hFdCngDec->lp_noise_float + 0.005f * 10.f * (float) log10( tmp + DELTA ); - } - else - { - tmp = dotp( syn, syn, hFdCngDec->hFdCngCom->frameSize ) * 2.f / hFdCngDec->hFdCngCom->frameSize; - hFdCngDec->lp_speech_float = 0.995f * hFdCngDec->lp_speech_float + 0.005f * 10.f * (float) log10( tmp + DELTA ); - } - - tmp = hFdCngDec->lp_speech_float - 45.f; - if ( hFdCngDec->lp_noise_float < tmp ) - { - hFdCngDec->lp_noise_float = tmp; - } - - hFdCngDec->hFdCngCom->flag_noisy_speech = ( hFdCngDec->lp_speech_float - hFdCngDec->lp_noise_float ) < 28.f; - - return; -} -#endif - -/*------------------------------------------------------------------- - * generate_comfort_noise_dec() - * - * Generate the comfort noise based on the target noise level - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void generate_comfort_noise_dec( - float **bufferReal, /* o : Real part of input bands */ - float **bufferImag, /* o : Imaginary part of input bands */ - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - int16_t i, j; - float *ptr_r, *ptr_i; - HANDLE_FD_CNG_DEC hFdCngDec = st->hFdCngDec; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *ptr_level = cngNoiseLevel_flt; - int16_t *seed = &( hFdCngCom->seed ); - int16_t *seed2; - float c1, c2; - float tmp1, tmp2; - float scale, scaleCldfb; - float *fftBuffer = hFdCngCom->fftBuffer_flt; - float *timeDomainOutput = hFdCngCom->timeDomainBuffer_flt; - int16_t tcx_transition; - float enr, att; - - scale = 1.f; - scaleCldfb = CLDFB_SCALING_FLT / hFdCngCom->scalingFactor_flt; - - c1 = (float) sqrt( hFdCngCom->coherence_flt ); - c2 = (float) sqrt( 1 - hFdCngCom->coherence_flt ); - - seed2 = &( hFdCngCom->seed2 ); - if ( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 ) - { - seed2 = &( hFdCngCom->seed3 ); - } - - /* Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin */ - - if ( hFdCngCom->startBand == 0 ) - { - if ( st->element_mode == IVAS_CPE_MDCT || ( st->element_mode == IVAS_SCE && st->cng_ism_flag ) ) - { - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - fftBuffer[0] = tmp1 * c1 + tmp2 * c2; - } - else - { - rand_gauss_flt( &fftBuffer[0], seed ); - } - fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ - ptr_level++; - ptr_r = fftBuffer + 2; - } - else - { - fftBuffer[0] = 0.f; - set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngCom->startBand - 1 ) ); - ptr_r = fftBuffer + 2 * hFdCngCom->startBand; - } - - ptr_i = ptr_r + 1; - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand; ptr_level++ ) - { - /* Real part in FFT bins */ - if ( st->element_mode == IVAS_CPE_MDCT || ( st->element_mode == IVAS_SCE && st->cng_ism_flag ) ) - { - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - *ptr_r = tmp1 * c1 + tmp2 * c2; - } - else - { - rand_gauss_flt( ptr_r, seed ); - } - ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_r += 2; - - /* Imaginary part in FFT bins */ - if ( st->element_mode == IVAS_CPE_MDCT || ( st->element_mode == IVAS_SCE && st->cng_ism_flag ) ) - { - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - *ptr_i = tmp1 * c1 + tmp2 * c2; - } - else - { - rand_gauss_flt( ptr_i, seed ); - } - ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_i += 2; - } - - /* Remaining FFT bins are set to zero */ - set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); - - /* Nyquist frequency is discarded */ - fftBuffer[1] = 0.f; - - /* If previous frame is active, reset the overlap-add buffer */ - tcx_transition = 0; - if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME ) - { - set_f( hFdCngCom->olapBufferSynth_flt, 0.0f, hFdCngCom->fftlen ); - if ( ( st->core > ACELP_CORE && st->codec_mode == MODE2 ) || st->codec_mode == MODE1 ) - { - tcx_transition = 1; - } - } - - /* Perform STFT synthesis */ - SynthesisSTFT_flt( fftBuffer, timeDomainOutput, hFdCngCom->olapBufferSynth_flt, hFdCngCom->olapWinSyn_flt, tcx_transition, hFdCngCom, st->element_mode, nchan_out ); - - /* update CNG excitation energy for LP_CNG */ - - /* calculate the residual signal energy */ - enr = dotp( hFdCngCom->exc_cng_flt, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize ) / hFdCngCom->frameSize; - - /* convert log2 of residual signal energy */ - enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); - - /* decrease the energy in case of WB input */ - if ( st->bwidth != NB ) - { - if ( st->bwidth == WB ) - { - if ( st->CNG_mode >= 0 ) - { - /* Bitrate adapted attenuation */ - att = ENR_ATT[st->CNG_mode]; - } - else - { - /* Use least attenuation for higher bitrates */ - att = ENR_ATT[4]; - } - } - else - { - att = 1.5f; - } - - enr -= att; - } - - st->lp_ener = (float) ( 0.8f * st->lp_ener + 0.2f * pow( 2.0f, enr ) ); - - /* Generate Gaussian random noise in real and imaginary parts of the CLDFB bands - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each band */ - - if ( bufferReal != NULL && hFdCngCom->numCoreBands < hFdCngCom->regularStopBand ) - { - for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) - { - for ( i = 0; i < hFdCngCom->numSlots; i++ ) - { - /* Real part in CLDFB band */ - if ( st->element_mode == IVAS_CPE_MDCT || ( st->element_mode == IVAS_SCE && st->cng_ism_flag ) ) - { - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - bufferReal[i][j] = tmp1 * c1 + tmp2 * c2; - } - else - { - rand_gauss_flt( &bufferReal[i][j], seed ); - } - bufferReal[i][j] *= (float) sqrt( ( scaleCldfb * *ptr_level ) * 0.5f ); - - /* Imaginary part in CLDFB band */ - if ( st->element_mode == IVAS_CPE_MDCT || ( st->element_mode == IVAS_SCE && st->cng_ism_flag ) ) - { - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - bufferImag[i][j] = tmp1 * c1 + tmp2 * c2; - } - else - { - rand_gauss_flt( &bufferImag[i][j], seed ); - } - bufferImag[i][j] *= (float) sqrt( ( scaleCldfb * *ptr_level ) * 0.5f ); - } - ptr_level++; - } - } - - /* Overlap-add when previous frame is active */ - if ( hFdCngCom->frame_type_previous == ACTIVE_FRAME && st->codec_mode == MODE2 ) - { - float noise[2048], old_exc_ener = 0.f, gain = 0.f, tmp; - int16_t N = hFdCngCom->frameSize; - int16_t seed_loc = hFdCngCom->seed; - float *old_exc, old_Aq[M + 1], *old_syn_pe, old_syn; - - if ( st->core > ACELP_CORE ) - { - tcx_windowing_synthesis_current_frame_flt( timeDomainOutput, st->hTcxCfg->tcx_mdct_window_flt, /*Keep sine windows for limiting Time modulation*/ - st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, st->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, NULL, NULL, NULL, NULL, NULL, N / 2, st->hTcxCfg->tcx_offset < 0 ? -st->hTcxCfg->tcx_offset : 0, 1, 0, 0 ); - - if ( st->hTcxCfg->last_aldo ) - { - for ( i = 0; i < ( hFdCngCom->frameSize - NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); i++ ) - { - timeDomainOutput[i] += st->hHQ_core->old_outLB[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )]; - } - } - else - { - - tcx_windowing_synthesis_past_frame_flt( st->hTcxDec->syn_Overl_float, st->hTcxCfg->tcx_mdct_window_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_last_overlap_mode ); - - - for ( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) - { - timeDomainOutput[i] += st->hTcxDec->syn_Overl_float[i]; - } - } - } - else - { - mvr2r( st->old_Aq_12_8, old_Aq, M + 1 ); - old_exc = st->old_exc + L_EXC_MEM_DEC - ( N / 2 ); - old_syn_pe = st->mem_syn2; - old_syn = st->syn_float[M]; - - for ( i = 0; i < N / 2; i++ ) - { - old_exc_ener += old_exc[i] * old_exc[i]; - } - - old_exc_ener = (float) sqrt( old_exc_ener / (float) ( N / 2 ) ); - - for ( i = 0; i < N; i++ ) - { - rand_gauss_flt( &( noise[i] ), &( seed_loc ) ); - gain += noise[i] * noise[i]; - } + FOR( i = 0; i < N; i++ ) + { + sidNoiseEst[i] = L_shr( sidNoiseEst[i], sub( max_res_exp, res_exp[i] ) ); /*Q31 - max_res_exp*/ + move32(); + } - gain = old_exc_ener / (float) sqrt( gain / (float) N ); + hFdCngCom->sidNoiseEstExp = max_res_exp; + move16(); - for ( i = 0; i < N; i++ ) - { - noise[i] *= gain; - } + /* NB last band energy compensation */ - syn_filt( old_Aq, M, noise, noise, N, old_syn_pe, 0 ); + IF( hFdCngCom->CngBandwidth == NB ) + { + sidNoiseEst[( N - 1 )] = Mpy_32_16_1( sidNoiseEst[( N - 1 )], NB_LAST_BAND_SCALE ); /*Q31 - max_res_exp*/ + move32(); + } - tmp = old_syn; + test(); + IF( EQ_16( hFdCngCom->CngBandwidth, SWB ) && LE_32( hFdCngCom->CngBitrate, ACELP_13k20 ) ) + { + sidNoiseEst[( N - 1 )] = Mpy_32_16_1( sidNoiseEst[( N - 1 )], SWB_13k2_LAST_BAND_SCALE ); /*Q31 - max_res_exp*/ + move32(); + } - deemph( noise, st->preemph_fac_float, N, &tmp ); + scalebands( sidNoiseEst, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, sub( hFdCngCom->stopBand, hFdCngCom->startBand ), hFdCngCom->cngNoiseLevel, 1 ); + hFdCngCom->cngNoiseLevelExp = hFdCngCom->sidNoiseEstExp; + move16(); - for ( i = 0; i < N / 2; i++ ) - { - timeDomainOutput[i] += noise[i] * hFdCngCom->olapWinSyn_flt[N / 2 + i]; - } - } - } + lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, st->preemph_fac ); return; } -#endif -#ifndef IVAS_FLOAT_FIXED + /*------------------------------------------------------------------- - * generate_comfort_noise_dec_hf() + * noisy_speech_detection() + * * - * Generate the comfort noise based on the target noise level for the CLDFB part *-------------------------------------------------------------------*/ -void generate_comfort_noise_dec_hf( - float **bufferReal, /* o : Real part of input bands */ - float **bufferImag, /* o : Imaginary part of input bands */ - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const int16_t cng_coh_flag /* i : CNG Flag for coherence handling */ -) -{ - int16_t i, j; - float *ptr_level; - - int16_t *seed = &( hFdCngCom->seed ); - float scale = CLDFB_SCALING_FLT / hFdCngCom->scalingFactor_flt; - - int16_t *seed2 = &( hFdCngCom->seed ); - - float tmp1, tmp2, c1 = 0.f, c2 = 0.f; - - if ( cng_coh_flag ) - { - seed2 = &( hFdCngCom->seed2 ); - - c1 = (float) sqrt( hFdCngCom->coherence_flt ); - c2 = (float) sqrt( 1 - hFdCngCom->coherence_flt ); - } - - ptr_level = hFdCngCom->cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand; - /* - Generate Gaussian random noise in real and imaginary parts of the CLDFB bands - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each band - */ - if ( hFdCngCom->numCoreBands < hFdCngCom->regularStopBand ) - { - for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) - { - for ( i = 0; i < hFdCngCom->numSlots; i++ ) - { - if ( cng_coh_flag ) - { - /* Real part in CLDFB band */ - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - bufferReal[i][j] = tmp1 * c1 + tmp2 * c2; - bufferReal[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - - /* Imaginary part in CLDFB band */ - rand_gauss_flt( &tmp1, seed ); - rand_gauss_flt( &tmp2, seed2 ); - bufferImag[i][j] = tmp1 * c1 + tmp2 * c2; - bufferImag[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - } - else - { - /* Real part in CLDFB band */ - rand_gauss_flt( &bufferReal[i][j], seed ); - bufferReal[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - /* Imaginary part in CLDFB band */ - rand_gauss_flt( &bufferImag[i][j], seed ); - bufferImag[i][j] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - } - } - ptr_level++; - } - } - - return; -} -#endif +/*------------------------------------------------------------------- + * generate_comfort_noise_dec() + * + * Generate the comfort noise based on the target noise level + *-------------------------------------------------------------------*/ /*------------------------------------------------------------------- * generate_masking_noise() * * Generate additional comfort noise (kind of noise filling) *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void generate_masking_noise( - float *timeDomainBuffer, /* i/o: time-domain signal */ - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const int16_t length, /* i : frame size */ - const int16_t core, /* i : core */ - const int16_t return_noise, /* i : noise is returned instead of added */ - const int16_t secondary, /* i : flag to indicate secondary noise generation */ - const int16_t element_mode, /* i : element mode */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i : stereo CNG handle */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *ptr_level = cngNoiseLevel_flt; - float *fftBuffer = hFdCngCom->fftBuffer_flt; - int16_t i; - float maskingNoise[L_FRAME16k]; - float *ptr_r; - float *ptr_i; - int16_t startBand = hFdCngCom->startBand; - int16_t *seed = &( hFdCngCom->seed ); - float scale = 1.f; - - /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ - if ( hFdCngCom->likelihood_noisy_speech_flt > DELTA_MASKING_NOISE ) - { - if ( core != AMR_WB_CORE ) - { - /* Compute additional CN level */ - for ( i = 0; i < SIZE_SCALE_TABLE_CN; i++ ) - { - if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_only[i].bwmode ) && - ( hFdCngCom->CngBitrate >= scaleTable_cn_only[i].bitrateFrom ) && - ( hFdCngCom->CngBitrate < scaleTable_cn_only[i].bitrateTo ) ) - { - break; - } - } - - scale *= (float) pow( 10.f, -scaleTable_cn_only[i].scale_flt / 10.f ) - 1.f; - } - else - { - /* Compute additional CN level */ - for ( i = 0; i < SIZE_SCALE_TABLE_CN_AMRWB; i++ ) - { - if ( hFdCngCom->CngBitrate >= scaleTable_cn_only_amrwbio_flt[i][0] ) - { - break; - } - } - - if ( i < SIZE_SCALE_TABLE_CN_AMRWB ) - { - scale *= (float) pow( 10.f, -scaleTable_cn_only_amrwbio_flt[i][1] / 10.f ) - 1.f; - } - else - { - scale = 0.f; - } - } - - /* Exclude clean speech */ - scale *= hFdCngCom->likelihood_noisy_speech_flt; - - /* Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin */ - if ( startBand == 0 ) - { - rand_gauss_flt( &fftBuffer[0], seed ); - ptr_r = fftBuffer + 2; - fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ - ptr_level++; - } - else - { - fftBuffer[0] = 0.f; - set_f( fftBuffer + 2, 0.0f, 2 * ( startBand - 1 ) ); - ptr_r = fftBuffer + 2 * startBand; - } - ptr_i = ptr_r + 1; - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, seed ); - ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, seed ); - ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_i += 2; - } - - /* Remaining FFT bins are set to zero */ - set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); - /* Nyquist frequency is discarded */ - fftBuffer[1] = 0.f; - } - else - { - /* very low level case - update random seeds and reset FFT buffer; don't fully skip SynthesisSTFT_flt(), because of the buffer updates done there... */ - generate_masking_noise_update_seed( hFdCngCom ); - - set_f( fftBuffer, 0.f, hFdCngCom->fftlen ); - } - - /* Perform STFT synthesis */ - if ( secondary ) - { - SynthesisSTFT_flt( fftBuffer, maskingNoise, hStereoCng->olapBufferSynth22, hFdCngCom->olapWinSyn_flt, 0, hFdCngCom, element_mode, nchan_out ); - } - else - { - SynthesisSTFT_flt( fftBuffer, maskingNoise, hFdCngCom->olapBufferSynth2_flt, hFdCngCom->olapWinSyn_flt, 0, hFdCngCom, element_mode, nchan_out ); - } - - /* Add some comfort noise on top of decoded signal */ - if ( return_noise ) - { - mvr2r( maskingNoise, timeDomainBuffer, min( hFdCngCom->frameSize, length ) ); - } - else - { - v_add( maskingNoise, timeDomainBuffer, timeDomainBuffer, min( hFdCngCom->frameSize, length ) ); - } - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------- * generate_masking_noise_ivas_fx() * @@ -2061,277 +612,31 @@ void generate_masking_noise_ivas_fx( ELSE { SynthesisSTFT_fx( fftBuffer_fx, maskingNoise_fx, hFdCngCom->olapBufferSynth2_fx, hFdCngCom->olapWinSyn_fx, 0, hFdCngCom, element_mode, nchan_out ); - } - *exp_out = sub( *exp_out, Q9 ); - move16(); - - /* Add some comfort noise on top of decoded signal */ - IF( return_noise ) - { - Copy32( maskingNoise_fx, timeDomainBuffer, s_min( hFdCngCom->frameSize, length ) ); /*Q31 - *exp_out*/ - } - ELSE - { - v_add_fixed( maskingNoise_fx, timeDomainBuffer, timeDomainBuffer, s_min( hFdCngCom->frameSize, length ), 0 ); /*Q31 - *exp_out*/ - } - - return; -} -#endif - -/*------------------------------------------------------------------- - * generate_masking_noise_update_seed() - * - * Update seed for scenarios where generate_masking_noise() is - * not called based on signal statistics - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void generate_masking_noise_update_seed( - HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *ptr_level = cngNoiseLevel_flt; - int16_t startBand = hFdCngCom->startBand; - int16_t *seed = &( hFdCngCom->seed ); - float tmp = 0; - - /* - Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin - */ - if ( startBand == 0 ) - { - rand_gauss_flt( &tmp, seed ); - ptr_level++; - } - - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( &tmp, seed ); - rand_gauss_flt( &tmp, seed ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * generate_masking_noise_mdct() - * - * Generate additional comfort noise (kind of noise filling) - *-------------------------------------------------------------------*/ - -void generate_masking_noise_mdct( - float *mdctBuffer, /* i/o: time-domain signal */ - HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ -) -{ - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - int16_t i; - float maskingNoise[2 * L_FRAME16k]; - float *ptr_r; - float *ptr_level = cngNoiseLevel_flt; - int16_t startBand = hFdCngCom->startBand; - int16_t *seed = &( hFdCngCom->seed ); - float scale = 1.f; - - /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ - if ( hFdCngCom->likelihood_noisy_speech_flt > DELTA_MASKING_NOISE ) - { - for ( i = 0; i < SIZE_SCALE_TABLE_CN; i++ ) - { - if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_only[i].bwmode ) && - ( hFdCngCom->CngBitrate >= scaleTable_cn_only[i].bitrateFrom ) && - ( hFdCngCom->CngBitrate < scaleTable_cn_only[i].bitrateTo ) ) - { - break; - } - } - - scale *= (float) pow( 10.f, -scaleTable_cn_only[i].scale_flt / 10.f ) - 1.f; - - /* Exclude clean speech */ - scale *= hFdCngCom->likelihood_noisy_speech_flt; - - /* - Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin - */ - if ( startBand == 0 ) - { - rand_gauss_flt( &maskingNoise[0], seed ); - maskingNoise[0] *= (float) sqrt( scale * *ptr_level * 0.5f ); /* DC component in FFT */ - ptr_level++; - ptr_r = maskingNoise + 1; - } - else - { - maskingNoise[0] = 0.f; - set_f( maskingNoise + 1, 0.0f, ( startBand - 1 ) ); - ptr_r = maskingNoise + startBand; - } - - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) - { - /* MDCT bins */ - rand_gauss_flt( ptr_r, seed ); - ( *ptr_r ) *= (float) sqrt( scale * *ptr_level * 0.5f ); - ptr_r += 1; - } - - /*re-normalization of energy level: M/sqrt(2)*/ - v_multc( maskingNoise, (float) sqrt( NORM_MDCT_FACTOR ), maskingNoise, hFdCngCom->stopFFTbin ); - - /* Add some comfort noise on top of decoded signal */ - v_add( maskingNoise, mdctBuffer, mdctBuffer, hFdCngCom->stopFFTbin ); - } - else - { - /* very low level case - just update random seeds */ - if ( startBand == 0 ) - { - rand_gauss_flt( &maskingNoise[0], seed ); - ptr_level++; - } - - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - startBand; ptr_level++ ) - { - rand_gauss_flt( &maskingNoise[0], seed ); - } - } - - return; -} - -/*------------------------------------------------------------------- - * generate_stereo_masking_noise() - * - * Generate additional comfort noise (kind of noise filling) - *-------------------------------------------------------------------*/ - -void generate_stereo_masking_noise( - float *syn, /* i/o: time-domain signal */ - Decoder_State *st, /* i/o: decoder state structure */ - STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i : TD stereo structure */ - const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ - const int16_t fadeOut, /* i : only fade out of previous state */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ - const int16_t nchan_out /* i : number of output channels */ -) -{ - HANDLE_FD_CNG_COM hFdCngCom; - float gamma, scale, SP_ratio; - float Np[L_FRAME16k]; - float Ns[L_FRAME16k]; - float N1[L_FRAME16k]; - float N2[L_FRAME16k]; - int16_t i; - - if ( st->idchan == 0 ) - { - hFdCngCom = st->hFdCngDec->hFdCngCom; - mvr2r( hFdCngCom->olapBufferSynth2_flt, Np, hFdCngCom->frameSize / 2 ); - mvr2r( hStereoCng->olapBufferSynth22, Ns, hFdCngCom->frameSize / 2 ); - set_f( &Np[hFdCngCom->frameSize / 2], 0.0f, hFdCngCom->frameSize / 2 ); - set_f( &Ns[hFdCngCom->frameSize / 2], 0.0f, hFdCngCom->frameSize / 2 ); - - if ( !fadeOut ) - { - generate_masking_noise( N1, hFdCngCom, hFdCngCom->frameSize, 0, 1, 0, st->element_mode, hStereoCng, nchan_out ); - /* Generate masking noise for secondary channel */ - if ( flag_sec_CNA ) - { - generate_masking_noise( N2, hFdCngCom, hFdCngCom->frameSize, 0, 1, 1, st->element_mode, hStereoCng, nchan_out ); - gamma = hStereoCng->c_PS_LT * hStereoCng->c_PS_LT; - scale = 1.0f; - if ( gamma < 0.9f ) - { - gamma = gamma / ( 1 - gamma ); - gamma = (float) sqrt( gamma + 1 ) - (float) sqrt( gamma ); - scale = 1.0f / (float) sqrt( 1 + gamma * gamma ); - } - else - { - gamma = 0.0f; - } - - for ( i = 0; i < 2 * hFdCngCom->frameSize / 4; i++ ) - { - Np[i] += scale * ( N1[i] + gamma * N2[i] ); - Ns[i] += scale * sign( hStereoCng->c_PS_LT ) * ( N1[i] - gamma * N2[i] ); - } - for ( ; i < hFdCngCom->frameSize; i++ ) - { - Np[i] = scale * ( N1[i] + gamma * N2[i] ); - Ns[i] = scale * sign( hStereoCng->c_PS_LT ) * ( N1[i] - gamma * N2[i] ); - } - scale *= (float) ( hFdCngCom->fftlen / 2 ); - for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) - { - hFdCngCom->olapBufferSynth2_flt[i] = scale * ( hFdCngCom->olapBufferSynth2_flt[i + 5 * hFdCngCom->frameSize / 4] + gamma * hStereoCng->olapBufferSynth22[i + 5 * hFdCngCom->frameSize / 4] ); - hStereoCng->olapBufferSynth22[i] = sign( hStereoCng->c_PS_LT ) * scale * ( hFdCngCom->olapBufferSynth2_flt[i + 5 * hFdCngCom->frameSize / 4] - gamma * hStereoCng->olapBufferSynth22[i + 5 * hFdCngCom->frameSize / 4] ); - } - } - else - { - for ( i = 0; i < hFdCngCom->frameSize / 2; i++ ) - { - Np[i] += N1[i]; - } - mvr2r( &N1[hFdCngCom->frameSize / 2], &Np[hFdCngCom->frameSize / 2], hFdCngCom->frameSize / 2 ); - scale = (float) ( hFdCngCom->fftlen / 2 ); - for ( i = 0; i < hFdCngCom->frameSize; i++ ) - { - hFdCngCom->olapBufferSynth2_flt[i] = scale * hFdCngCom->olapBufferSynth2_flt[i + 5 * hFdCngCom->frameSize / 4]; - } - } - } - else - { - set_f( hFdCngCom->olapBufferSynth2_flt, 0.0f, hFdCngCom->frameSize / 2 ); - set_f( hStereoCng->olapBufferSynth22, 0.0f, hFdCngCom->frameSize / 2 ); - } - if ( flag_sec_CNA ) - { - mvr2r( Ns, hStereoCng->maskingNoiseS, hFdCngCom->frameSize ); - hStereoCng->enableSecCNA = 1; - } - else - { - set_f( hStereoCng->olapBufferSynth22, 0.0f, hFdCngCom->frameSize ); - } + } + *exp_out = sub( *exp_out, Q9 ); + move16(); - /* add masking noise */ - v_add( Np, syn, syn, hFdCngCom->frameSize ); + /* Add some comfort noise on top of decoded signal */ + IF( return_noise ) + { + Copy32( maskingNoise_fx, timeDomainBuffer, s_min( hFdCngCom->frameSize, length ) ); /*Q31 - *exp_out*/ } - else if ( hStereoCng->enableSecCNA ) + ELSE { - SP_ratio = hStereoTD->SP_ratio_LT; /* Use long-term SP ratio based on L/R synthesis */ - /* scale and add masking noise */ - for ( i = 0; i < *hStereoCng->frameSize / 4; i++ ) - { - scale = ( ( hStereoTD->prevSP_ratio * ( *hStereoCng->frameSize / 4 - (float) i ) + SP_ratio * (float) i ) / ( *hStereoCng->frameSize / 4 ) ); - syn[i] += scale * hStereoCng->maskingNoiseS[i]; - } - for ( ; i < *hStereoCng->frameSize / 2; i++ ) - { - syn[i] += SP_ratio * hStereoCng->maskingNoiseS[i]; - } - for ( ; i < *hStereoCng->frameSize; i++ ) - { - syn[i] += SP_ratio * hStereoCng->maskingNoiseS[i]; - } - hStereoTD->prevSP_ratio = SP_ratio; + v_add_fixed( maskingNoise_fx, timeDomainBuffer, timeDomainBuffer, s_min( hFdCngCom->frameSize, length ), 0 ); /*Q31 - *exp_out*/ } return; } -#endif -#ifdef IVAS_FLOAT_FIXED + +/*------------------------------------------------------------------- + * generate_masking_noise_update_seed() + * + * Update seed for scenarios where generate_masking_noise() is + * not called based on signal statistics + *-------------------------------------------------------------------*/ + + /*------------------------------------------------------------------- * generate_stereo_masking_noise_fx() * @@ -2525,130 +830,6 @@ void generate_stereo_masking_noise_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * generate_masking_noise_hf_cldfb() - * - * Generate additional comfort noise (kind of noise filling) - *-------------------------------------------------------------------*/ - -void generate_masking_noise_lb_dirac( - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - float *tdBuffer, /* i/o: time-domain signal, if NULL no LB-CNA */ - const int16_t nCldfbTs, /* i : number of CLDFB slots that will be rendered */ - const int16_t cna_flag /* i : CNA flag for LB and HB */ -) -{ - int16_t i; - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *fftBuffer = hFdCngCom->fftBuffer_flt; - float *ptr_r; - float *ptr_i; - float *ptr_level; - int16_t *seed = &( hFdCngCom->seed ); - float scale; - int16_t n_samples_out, n_samples_start, n_samples_out_loop; - - push_wmops( "fd_cng_dirac" ); - - /* Init */ - scale = 0.f; - n_samples_out = hFdCngCom->frameSize / DEFAULT_JBM_CLDFB_TIMESLOTS * nCldfbTs; - n_samples_start = 0; - - /*LB CLDFB - CNA from STFT*/ - if ( cna_flag ) - { - /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ - if ( hFdCngCom->likelihood_noisy_speech_flt > DELTA_MASKING_NOISE ) - { - /* Compute additional CN level */ - for ( i = 0; i < 15; i++ ) - { - if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_dirac[i].bwmode ) && - ( hFdCngCom->CngBitrate >= scaleTable_cn_dirac[i].bitrateFrom ) && - ( hFdCngCom->CngBitrate < scaleTable_cn_dirac[i].bitrateTo ) ) - { - break; - } - } - - scale = (float) pow( 10.f, -scaleTable_cn_dirac[i].scale_flt / 10.f ) - 1.f; - scale *= hFdCngCom->likelihood_noisy_speech_flt; - } - } - - /* LB CLDFB - CNA from STFT: CNA applied only in channel 0*/ - if ( cna_flag && tdBuffer != NULL ) - { - while ( n_samples_out > 0 ) - { - n_samples_out_loop = min( hFdCngCom->frameSize, n_samples_out ); - if ( scale != 0 ) - { - /*Generate LF comfort noise only at first slot, for the whole frame*/ - ptr_level = cngNoiseLevel_flt; - - /* Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin */ - if ( hFdCngCom->startBand == 0 ) - { - rand_gauss_flt( &fftBuffer[0], seed ); - ptr_r = fftBuffer + 2; - fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ - ptr_level++; - } - else - { - fftBuffer[0] = 0.f; - set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngCom->startBand - 1 ) ); - ptr_r = fftBuffer + 2 * hFdCngCom->startBand; - } - ptr_i = ptr_r + 1; - - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand; ptr_level++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, seed ); - ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, seed ); - ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_i += 2; - } - - /* Remaining FFT bins are set to zero */ - set_f( fftBuffer + 2 * hFdCngCom->stopFFTbin, 0.0f, hFdCngCom->fftlen - 2 * hFdCngCom->stopFFTbin ); - /* Nyquist frequency is discarded */ - fftBuffer[1] = 0.f; - - /* Perform STFT synthesis */ - SynthesisSTFT_dirac_flt( fftBuffer, tdBuffer + n_samples_start, hFdCngCom->olapBufferSynth2_flt, hFdCngCom->olapWinSyn_flt, n_samples_out_loop, hFdCngCom ); - } - - else - { - /* very low level case - update random seeds */ - generate_masking_noise_update_seed( hFdCngCom ); - - set_f( fftBuffer, 0.f, hFdCngCom->fftlen ); - - /* Perform STFT synthesis */ - SynthesisSTFT_dirac_flt( fftBuffer, tdBuffer + n_samples_start, hFdCngCom->olapBufferSynth2_flt, hFdCngCom->olapWinSyn_flt, n_samples_out_loop, hFdCngCom ); - } - n_samples_out -= hFdCngCom->frameSize; - n_samples_start += hFdCngCom->frameSize; - } - } - - pop_wmops(); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_lb_dirac_fx( HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ Word32 *tdBuffer, /* i/o: time-domain signal, if NULL no LB-CNA Q11*/ @@ -2781,109 +962,6 @@ void generate_masking_noise_lb_dirac_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * generate_masking_noise_hf_cldfb() - * - * Generate additional comfort noise (kind of noise filling) - *-------------------------------------------------------------------*/ - -void generate_masking_noise_dirac( - HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i : filterbank state */ - float *tdBuffer, /* i/o: time-domain signal, if NULL no LB-CNA */ - float *Cldfb_RealBuffer, /* o : CLDFD real buffer */ - float *Cldfb_ImagBuffer, /* o : CLDFD imaginary buffer */ - const int16_t slot_index, /* i : CLDFB slot index */ - const int16_t cna_flag, /* i : CNA flag for LB and HB */ - const int16_t fd_cng_flag /* i : FD-CNG flag for HB */ -) -{ - int16_t i; - float *ptr_level; - int16_t *seed = &( hFdCngCom->seed ); - float scale; - - push_wmops( "fd_cng_dirac" ); - - /* Init */ - scale = 0.f; - - /* Resample CLDFB memories if necessary*/ - if ( ( h_cldfb->no_channels * h_cldfb->no_col ) != hFdCngCom->frameSize ) - { - resampleCldfb_ivas( h_cldfb, hFdCngCom->frameSize * FRAMES_PER_SEC ); - } - - set_zero( Cldfb_RealBuffer, CLDFB_NO_CHANNELS_MAX ); - set_zero( Cldfb_ImagBuffer, CLDFB_NO_CHANNELS_MAX ); - - /*LB CLDFB - CNA from STFT*/ - if ( cna_flag ) - { - /* skip noise generating if level is very low, to avoid problems with possibly running into denormals */ - if ( hFdCngCom->likelihood_noisy_speech_flt > DELTA_MASKING_NOISE ) - { - /* Compute additional CN level */ - for ( i = 0; i < 15; i++ ) - { - if ( ( hFdCngCom->CngBandwidth == scaleTable_cn_dirac[i].bwmode ) && - ( hFdCngCom->CngBitrate >= scaleTable_cn_dirac[i].bitrateFrom ) && - ( hFdCngCom->CngBitrate < scaleTable_cn_dirac[i].bitrateTo ) ) - { - break; - } - } - - scale = (float) pow( 10.f, -scaleTable_cn_dirac[i].scale_flt / 10.f ) - 1.f; - scale *= hFdCngCom->likelihood_noisy_speech_flt; - } - } - /* LB CLDFB - CNA from STFT: CNA applied only in channel 0*/ - if ( cna_flag && tdBuffer != NULL ) - { - if ( scale != 0 ) - { - /* LF CLDFB*/ - cldfbAnalysis_ts_ivas( &( tdBuffer[hFdCngCom->numCoreBands * slot_index] ), Cldfb_RealBuffer, Cldfb_ImagBuffer, hFdCngCom->numCoreBands, h_cldfb ); - } - else - { - /* LB ana CLDFB*/ - cldfbAnalysis_ts_ivas( &( tdBuffer[hFdCngCom->numCoreBands * slot_index] ), Cldfb_RealBuffer, Cldfb_ImagBuffer, hFdCngCom->numCoreBands, h_cldfb ); - } - } - - /*HF CLDFB - CNA and/or FD-CNG*/ - if ( fd_cng_flag ) - { - scale += 1.f; - } - if ( scale != 0 ) - { - scale *= CLDFB_SCALING_FLT * ( h_cldfb->scale_flt * h_cldfb->scale_flt * 8.f ); - ptr_level = hFdCngCom->cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand; - - for ( i = hFdCngCom->numCoreBands; i < hFdCngCom->regularStopBand; i++ ) - { - /* Real part in CLDFB band */ - rand_gauss_flt( &Cldfb_RealBuffer[i], seed ); - Cldfb_RealBuffer[i] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - /* Imaginary part in CLDFB band */ - rand_gauss_flt( &Cldfb_ImagBuffer[i], seed ); - Cldfb_ImagBuffer[i] *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - - ptr_level++; - } - } - - pop_wmops(); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_dirac_ivas_fx( HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i : filterbank state */ @@ -3002,7 +1080,6 @@ void generate_masking_noise_dirac_ivas_fx( return; } -#endif /*------------------------------------------------------------------- @@ -3012,7 +1089,6 @@ void generate_masking_noise_dirac_ivas_fx( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void FdCngDecodeMDCTStereoSID_fx( CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ ) @@ -3167,108 +1243,6 @@ void FdCngDecodeMDCTStereoSID_fx( return; } -#else -void FdCngDecodeMDCTStereoSID( - CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ -) -{ - DEC_CORE_HANDLE sts[CPE_CHANNELS]; - HANDLE_FD_CNG_COM hFdCngCom; - float *ms_ptr[CPE_CHANNELS]; - float *lr_ptr[CPE_CHANNELS]; - float logNoiseEst[CPE_CHANNELS][NPART]; - float gain[CPE_CHANNELS]; - int16_t indices[FD_CNG_stages_37bits]; - int16_t N, i, ch, p, stages; - int16_t is_out_ms; - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - - invTrfMatrix = (float *) tmpRAM; - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); - - is_out_ms = 0; - if ( hCPE->hCoreCoder[0]->cng_sba_flag ) - { - is_out_ms = 1; - } - - N = 0; /* to avoid compilation warning */ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch] = hCPE->hCoreCoder[ch]; - ms_ptr[ch] = &logNoiseEst[ch][0]; - lr_ptr[ch] = &sts[ch]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[0]; - } - - /* decode noise shapes and gains */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch] = hCPE->hCoreCoder[ch]; - hFdCngCom = ( sts[ch]->hFdCngDec )->hFdCngCom; - N = hFdCngCom->npart; - hFdCngCom->sid_frame_counter++; - - if ( ch ) - { - stages = FD_CNG_JOINT_stages_25bits; - } - else - { - stages = FD_CNG_stages_37bits; - } - - /* read bitstream */ - for ( i = 0; i < stages; i++ ) - { - indices[i] = get_next_indice( sts[ch], bits_37bits[i] ); - } - { - gain[ch] = ( (float) get_next_indice( sts[ch], 7 ) - GAIN_Q_OFFSET_IVAS ) / 1.5f; - } - - /* MSVQ decoder */ - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix, ms_ptr[ch], NULL ); - } - - dtx_read_padding_bits( sts[1], ( IVAS_SID_5k2 - 4400 ) / FRAMES_PER_SEC ); - - if ( sts[0]->hFdCngDec->hFdCngCom->no_side_flag ) - { - set_zero( ms_ptr[1], NPART ); - } - - if ( is_out_ms == 0 ) - { - inverseMS( N, ms_ptr[0], ms_ptr[1], 1.f ); - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - hFdCngCom = sts[ch]->hFdCngDec->hFdCngCom; - for ( p = 0; p < N; p++ ) - { - lr_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); - } - - scalebands_flt( hFdCngCom->sidNoiseEst_flt, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel_flt, 1 ); - - lpc_from_spectrum_flt( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, sts[ch]->preemph_fac_float ); - } - - if ( hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_SID_5k2 ) - { - /* create proper M noise shape in channel zero after gains have been applied */ - for ( p = 0; p < N; p++ ) - { - sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] ); - } - } - - return; -} -#endif /*------------------------------------------------------------------- @@ -3277,7 +1251,6 @@ void FdCngDecodeMDCTStereoSID( * Decode FD-CNG parameters for CNG in 2TC DirAC mode from the bitstream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void FdCngDecodeDiracMDCTStereoSID_fx( CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ ) @@ -3411,86 +1384,3 @@ void FdCngDecodeDiracMDCTStereoSID_fx( return; } -#else -void FdCngDecodeDiracMDCTStereoSID( - CPE_DEC_HANDLE hCPE /* i/o: CPE decoder state structure */ -) -{ - DEC_CORE_HANDLE sts[CPE_CHANNELS]; - HANDLE_FD_CNG_COM hFdCngCom; - float *ms_ptr[CPE_CHANNELS]; - float *lr_ptr[CPE_CHANNELS]; - float logNoiseEst[CPE_CHANNELS][NPART]; - float gain[CPE_CHANNELS]; - int16_t indices[FD_CNG_stages_37bits]; - int16_t N, i, ch, p; - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - - - invTrfMatrix = (float *) tmpRAM; /* dynamically filled */ - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch] = hCPE->hCoreCoder[ch]; - ms_ptr[ch] = &logNoiseEst[ch][0]; - lr_ptr[ch] = &sts[ch]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[0]; - ( sts[ch]->hFdCngDec )->hFdCngCom->sid_frame_counter++; - } - - /* decode noise shapes and gains */ - hFdCngCom = ( sts[0]->hFdCngDec )->hFdCngCom; - N = hFdCngCom->npart; - - /* read bitstream */ - for ( i = 0; i < FD_CNG_stages_37bits; i++ ) - { - indices[i] = get_next_indice( sts[0], bits_37bits[i] ); - } - gain[0] = ( (float) get_next_indice( sts[0], 7 ) - GAIN_Q_OFFSET_IVAS ) / 1.5f; - gain[1] = gain[0]; - - /* MSVQ decoder */ - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix, ms_ptr[0], NULL ); - mvr2r( ms_ptr[0], ms_ptr[1], N ); - - /*inverseMS( N, ms_ptr[0], ms_ptr[1], 1.f );*/ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - hFdCngCom = sts[ch]->hFdCngDec->hFdCngCom; - for ( p = 0; p < N; p++ ) - { - lr_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); - } - - /* NB last band energy compensation */ - if ( hFdCngCom->CngBandwidth == NB ) - { - lr_ptr[ch][N - 1] *= NB_LAST_BAND_SCALE_FLT; - } - else if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) - { - lr_ptr[ch][N - 1] *= SWB_13k2_LAST_BAND_SCALE_FLT; - } - - scalebands_flt( hFdCngCom->sidNoiseEst_flt, hFdCngCom->part, hFdCngCom->npart, hFdCngCom->midband, hFdCngCom->nFFTpart, hFdCngCom->stopBand - hFdCngCom->startBand, hFdCngCom->cngNoiseLevel_flt, 1 ); - - lpc_from_spectrum_flt( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, sts[ch]->preemph_fac_float ); - } - sts[0]->hFdCngDec->hFdCngCom->coherence_flt = 0.0f; - sts[1]->hFdCngDec->hFdCngCom->coherence_flt = 0.0f; - - if ( hCPE->nchan_out == 1 ) - { - /* create proper M noise shape in channel zero after gains have been applied */ - for ( p = 0; p < N; p++ ) - { - sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] ); - } - } - - return; -} -#endif diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index c1d6382b6..2bb2a39ec 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -13,10 +13,8 @@ #include "ivas_prot_fx.h" #include "basop_util.h" #include "rom_basop_util.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_dec.h" #include "ivas_prot_fx.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -46,7 +44,6 @@ const Word16 stages_37bits = FD_CNG_stages_37bits; Function: create an instance of type FD_CNG */ -#ifdef IVAS_FLOAT_FIXED ivas_error createFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) { HANDLE_FD_CNG_DEC hs; @@ -68,9 +65,7 @@ ivas_error createFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) *hFdCngDec = hs; return error; } -#endif -#ifdef IVAS_FLOAT_FIXED void initFdCngDec_ivas_fx( DEC_CORE_HANDLE st, /* i/o: decoder state structure */ Word16 scale /*Q15*/ ) @@ -302,7 +297,6 @@ void initFdCngDec_fx( #endif return; } -#endif /* configureFdCngDec_fx @@ -1202,7 +1196,6 @@ Word16 ApplyFdCng_fx( return 0; } -#ifdef IVAS_FLOAT_FIXED Word16 ApplyFdCng_ivas_fx( Word16 *timeDomainInput, /* i : pointer to time domain input Q*/ Word16 Q, @@ -1930,7 +1923,6 @@ Word16 ApplyFdCng_ivas_fx( return 0; } -#endif // IVAS_FLOAT_FIXED /* perform_noise_estimation_dec_fx @@ -2402,7 +2394,6 @@ void perform_noise_estimation_dec_fx( } } -#ifdef IVAS_FLOAT_FIXED void perform_noise_estimation_dec_ivas_fx( const Word16 *timeDomainInput, /* i: pointer to time domain input Q*/ const Word16 Q, @@ -3188,7 +3179,6 @@ void perform_noise_estimation_dec_ivas_fx( expand_range( hFdCngDec->msLogNoiseEst, hFdCngDec->msNoiseEst, &hFdCngDec->msNoiseEst_exp, npart ); } } -#endif // IVAS_FLOAT_FIXED /* @@ -3207,7 +3197,6 @@ void perform_noise_estimation_dec_ivas_fx( Returns: void */ -#ifdef IVAS_FLOAT_FIXED void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) { Word16 i, N, index; @@ -3329,7 +3318,6 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) lpc_from_spectrum( st, st->startBand, st->stopFFTbin, preemph_fac ); } -#endif /* noisy_speech_detection_fx @@ -3351,7 +3339,6 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) void */ -#ifdef IVAS_FLOAT_FIXED void noisy_speech_detection_fx( HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ const Word16 vad, /*Q0*/ @@ -3461,9 +3448,7 @@ void noisy_speech_detection_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED void generate_comfort_noise_dec_fx( Word32 **bufferReal, /* o : matrix to real part of input bands bufferScale*/ Word32 **bufferImag, /* o : matrix to imaginary part of input bands bufferScale*/ @@ -4624,7 +4609,6 @@ void generate_comfort_noise_dec_hf_ivas_fx( return; } -#endif /* @@ -4643,7 +4627,6 @@ void generate_comfort_noise_dec_hf_ivas_fx( void */ -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_fx( Word16 *timeDomainBuffer, /* i/o : pointer to time domain output buffer 15Q0 */ Word16 Q, @@ -4825,7 +4808,6 @@ void generate_masking_noise_fx( } } } -#endif /*------------------------------------------------------------------- * generate_masking_noise_update_seed_fx() @@ -4834,7 +4816,6 @@ void generate_masking_noise_fx( * not called based on signal statistics *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_update_seed_fx( HANDLE_FD_CNG_COM hFdCngCom /* i/o : pointer to FD_CNG_COM structure */ ) @@ -4862,12 +4843,10 @@ void generate_masking_noise_update_seed_fx( return; } -#endif /************************************************************ * Generate additional comfort noise (kind of noise filling) * ************************************************************/ -#ifdef IVAS_FLOAT_FIXED void generate_masking_noise_mdct_fx( Word32 *mdctBuffer, /* i/o: time-domain signal Q31 - mdctBuffer_e*/ Word16 *mdctBuffer_e, /* i/o: exponent time-domain signal */ @@ -5154,7 +5133,6 @@ void generate_masking_noise_mdct_ivas_fx( return; } -#endif #ifdef IVAS_CODE_CNG diff --git a/lib_dec/gain_dec.c b/lib_dec/gain_dec.c index c0aea3813..d441f6ead 100644 --- a/lib_dec/gain_dec.c +++ b/lib_dec/gain_dec.c @@ -41,658 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Es_pred_dec() - * - * Decoding of scaled predicted innovation energy to be used in all subframes - *---------------------------------------------------------------------*/ - -void Es_pred_dec( - float *Es_pred, /* o : predicted scaled innovation energy */ - const int16_t enr_idx, /* i : indice */ - const int16_t nb_bits, /* i : number of bits */ - const int16_t no_ltp /* i : no LTP flag */ -) -{ - if ( !no_ltp ) - { - switch ( nb_bits ) - { - case 5: - *Es_pred = Es_pred_qua_5b[enr_idx]; - break; - case 4: - *Es_pred = Es_pred_qua_4b[enr_idx]; - break; - case 3: - *Es_pred = Es_pred_qua_3b[enr_idx]; - break; - default: - *Es_pred = Es_pred_qua_5b[enr_idx]; - break; - } - } - else - { - *Es_pred = Es_pred_qua_4b_no_ltp[enr_idx]; - } - - return; -} - - -/*--------------------------------------------------------------------------* - * lp_gain_updt() - * - * Update of LP pitch and code gains (FEC) - *-------------------------------------------------------------------------*/ - -void lp_gain_updt( - const int16_t i_subfr, /* i : subframe number */ - const float gain_pit, /* i : Decoded gain pitch */ - const float norm_gain_code, /* i : Normalised gain code */ - float *lp_gainp, /* i/o: LP-filtered pitch gain(FEC) */ - float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ - const int16_t L_frame /* i : length of the frame */ -) -{ - if ( L_frame == L_FRAME ) - { - if ( i_subfr == 0 ) - { - *lp_gainp = 0.1f * gain_pit; - *lp_gainc = 0.1f * norm_gain_code; - } - else if ( i_subfr == L_SUBFR ) - { - *lp_gainp += 0.2f * gain_pit; - *lp_gainc += 0.2f * norm_gain_code; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - *lp_gainp += 0.3f * gain_pit; - *lp_gainc += 0.3f * norm_gain_code; - } - else /* i_subfr == 3*L_SUBFR */ - { - *lp_gainp += 0.4f * gain_pit; - *lp_gainc += 0.4f * norm_gain_code; - } - } - else - { - if ( i_subfr == 0 ) - { - *lp_gainp = ( 1.0f / 15.0f ) * gain_pit; - *lp_gainc = ( 1.0f / 15.0f ) * norm_gain_code; - } - else if ( i_subfr == L_SUBFR ) - { - *lp_gainp += ( 2.0f / 15.0f ) * gain_pit; - *lp_gainc += ( 2.0f / 15.0f ) * norm_gain_code; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - *lp_gainp += ( 3.0f / 15.0f ) * gain_pit; - *lp_gainc += ( 3.0f / 15.0f ) * norm_gain_code; - } - else if ( i_subfr == 3 * L_SUBFR ) - { - *lp_gainp += ( 4.0f / 15.0f ) * gain_pit; - *lp_gainc += ( 4.0f / 15.0f ) * norm_gain_code; - } - else /* i_subfr == 4*L_SUBFR */ - { - *lp_gainp += ( 5.0f / 15.0f ) * gain_pit; - *lp_gainc += ( 5.0f / 15.0f ) * norm_gain_code; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * gain_dec_tc() - * - * Decoding of pitch and codebook gains and updating long term energies - *---------------------------------------------------------------------*/ - -void gain_dec_tc( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t i_subfr, /* i : subframe number */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *code, /* i : algebraic code excitation */ - float *gain_pit, /* o : pitch gain */ - float *gain_code, /* o : Quantized codeebook gain */ - float *gain_inov, /* o : unscaled innovation gain */ - float *norm_gain_code /* o : norm. gain of the codebook excit. */ -) -{ - int16_t index, nBits; - float Ecode, gcode0; - float Ei; - - *gain_pit = 0; - - /*----------------------------------------------------------------* - * find number of bits for gain dequantization - *----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; - - /*-----------------------------------------------------------------* - * calculate the predicted gain code - *-----------------------------------------------------------------*/ - - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - /*------------------------------------------------------------------------------------------* - * Select the gain quantization table and dequantize the gain - *------------------------------------------------------------------------------------------*/ - - index = get_next_indice( st, nBits ); - - if ( nBits > 3 ) - { - *gain_code = gain_dequant( index, G_CODE_MIN, G_CODE_MAX, nBits ); - } - else /* nBits == 3 */ - { - *gain_code = tbl_gain_code_tc[index]; - } - - /*-----------------------------------------------------------------* - * decode normalized codebook gain - *-----------------------------------------------------------------*/ - - *gain_code *= gcode0; - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*---------------------------------------------------------------------* - * gain_dec_amr_wb() - * - * Decoding of pitch and fixed codebook gains (used also in AMR-WB IO mode) - *---------------------------------------------------------------------*/ - -void gain_dec_amr_wb( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t core_brate, /* i : core bitrate */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codeebook gain */ - float *past_qua_en, /* i/o: gain quantization memory (4 words) */ - float *gain_inov, /* o : unscaled innovation gain */ - const float *code, /* i : algebraic code excitation */ - float *norm_gain_code /* o : norm. gain of the codebook excitation */ -) -{ - int16_t i, index; - int16_t nbits; - float gcode0, qua_en; - const float *t_qua_gain; - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); - - /*-----------------------------------------------------------------* - * Select the gain quantization table - *-----------------------------------------------------------------*/ - - if ( core_brate < ACELP_12k65 ) - { - nbits = 6; - t_qua_gain = t_qua_gain6b; - } - else - { - nbits = 7; - t_qua_gain = t_qua_gain7b; - } - - /*-----------------------------------------------------------------* - * predicted code gain - *-----------------------------------------------------------------*/ - - /* start with predicting code energy in dB */ - gcode0 = MEAN_ENER; - for ( i = 0; i < GAIN_PRED_ORDER; i++ ) - { - gcode0 += pred_gain[i] * past_qua_en[i]; - } - gcode0 += (float) ( 20.0 * log10( *gain_inov ) ); - - /* convert from energy in dB to gain */ - gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); - - /*-----------------------------------------------------------------* - * Decode pitch gain - *-----------------------------------------------------------------*/ - - index = get_next_indice( st, nbits ); - *gain_pit = t_qua_gain[index * 2]; - - /*-----------------------------------------------------------------* - * Decode code gain - *-----------------------------------------------------------------*/ - - qua_en = t_qua_gain[index * 2 + 1]; - *gain_code = qua_en * gcode0; - - /*-----------------------------------------------------------------* - * update table of past quantized energies - *-----------------------------------------------------------------*/ - - for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) - { - past_qua_en[i] = past_qua_en[i - 1]; - } - past_qua_en[0] = (float) ( 20.0 * log10( qua_en ) ); - - /*-----------------------------------------------------------------* - * Normalized code gain - *-----------------------------------------------------------------*/ - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*--------------------------------------------------------------------------* - * gain_dec_mless() - * - * Decoding of pitch and codebook gains without updating long term energies - *-------------------------------------------------------------------------*/ - -void gain_dec_mless( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t coder_type, /* i : coding type */ - const int16_t i_subfr, /* i : subframe number */ - const int16_t tc_subfr, /* i : TC subframe index */ - const float *code, /* i : algebraic code excitation */ - const float Es_pred, /* i : predicted scaled innov. energy */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codeebook gain */ - float *gain_inov, /* o : unscaled innovation gain */ - float *norm_gain_code /* o : norm. gain of the codebook excitation */ -) -{ - int16_t index, nBits; - float gcode0, Ei, Ecode; - const float *qua_table; - - /*-----------------------------------------------------------------* - * decode pitch gain - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; - - if ( ( tc_subfr == 3 * L_SUBFR && i_subfr == 3 * L_SUBFR && L_frame == L_FRAME ) || - ( tc_subfr == 4 * L_SUBFR && i_subfr == 4 * L_SUBFR && L_frame == L_FRAME16k ) ) - { - /* decode pitch gain */ - index = get_next_indice( st, nBits >> 1 ); - Ei = ( G_PITCH_MAX_TC192 - G_PITCH_MIN_TC192 ) / ( ( 1 << ( nBits >> 1 ) ) - 1 ); /* set quantization step */ - *gain_pit = usdequant( index, G_PITCH_MIN_TC192, Ei ); - - /* calculate the predicted gain code */ - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - /* decode normalized codebook gain */ - index = get_next_indice( st, ( nBits + 1 ) >> 1 ); - *gain_code = gain_dequant( index, G_CODE_MIN_TC192, G_CODE_MAX_TC192, ( nBits + 1 ) >> 1 ); - *gain_code *= gcode0; - } - else - { - switch ( nBits ) - { - case 7: - { - qua_table = gain_qua_mless_7b; - break; - } - case 6: - { - qua_table = gain_qua_mless_6b; - - if ( st->element_mode > EVS_MONO ) - { - qua_table = gain_qua_mless_6b_stereo; - } - - break; - } - case 5: - { - qua_table = gain_qua_mless_5b; - break; - } - default: - { - qua_table = gain_qua_mless_6b; - break; - } - } - - if ( coder_type == INACTIVE && nBits == 6 ) - { - nBits--; - } - - index = get_next_indice( st, nBits ); - - *gain_pit = qua_table[index * 2]; - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - - /*-----------------------------------------------------------------* - * calculate the predicted gain code - *-----------------------------------------------------------------*/ - - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - /*-----------------------------------------------------------------* - * decode normalized codebook gain - *-----------------------------------------------------------------*/ - - *gain_code = qua_table[index * 2 + 1] * gcode0; - } - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*--------------------------------------------------------------------------* - * gain_dec_lbr() - * - * Decoding of pitch and codebook gains in ACELP at 6.6 and 7.5 kbps - *-------------------------------------------------------------------------*/ - -void gain_dec_lbr( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t coder_type, /* i : coding type */ - const int16_t i_subfr, /* i : subframe index */ - const float *code, /* i : algebraic excitation */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : gain of the innovation (used for normalization) */ - float *norm_gain_code, /* o : norm. gain of the codebook excitation */ - float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t index, nBits, n_pred, ctype; - float gcode0, aux[10], Ecode; - const float *b, *cdbk = 0; - - Ecode = ( dotp( code, code, L_subfr ) + 0.01f ) / L_subfr; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - - /*-----------------------------------------------------------------* - * select the codebook, size and number of bits - * set the gains searching range - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.gains_mode[i_subfr / L_subfr]; - - ctype = 2 * ( coder_type - 1 ); - - /*-----------------------------------------------------------------* - * calculate prediction of gcode - * search for the best codeword - *-----------------------------------------------------------------*/ - - if ( i_subfr == 0 ) - { - b = b_1sfr; - n_pred = 2; - - switch ( nBits ) - { - case 8: - { - cdbk = gp_gamma_1sfr_8b; - break; - } - case 7: - { - cdbk = gp_gamma_1sfr_7b; - break; - } - case 6: - { - cdbk = gp_gamma_1sfr_6b; - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) - 0.5f * (float) log10( Ecode ) ); - - /* retrieve the codebook index and calculate both gains */ - index = get_next_indice( st, nBits ); - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - gains_mem[0] = *gain_code; - gains_mem[3] = *gain_pit; - } - else if ( i_subfr == L_SUBFR || L_subfr == 2 * L_SUBFR ) - { - b = b_2sfr; - n_pred = 4; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_2sfr_7b; - break; - } - case 6: - { - cdbk = gp_gamma_2sfr_6b; - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = gains_mem[3]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* retrieve the codebook index and calculate both gains */ - index = get_next_indice( st, nBits ); - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - gains_mem[1] = *gain_code; - gains_mem[4] = *gain_pit; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - b = b_3sfr; - n_pred = 6; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_3sfr_7b; - break; - } - case 6: - { - cdbk = gp_gamma_3sfr_6b; - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = (float) log10( gains_mem[1] ); - aux[4] = gains_mem[3]; - aux[5] = gains_mem[4]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* retrieve the codebook index and calculate both gains */ - index = get_next_indice( st, nBits ); - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - - gains_mem[2] = *gain_code; - gains_mem[5] = *gain_pit; - } - else if ( i_subfr == 3 * L_SUBFR ) - { - b = b_4sfr; - n_pred = 8; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_4sfr_7b; - break; - } - case 6: - { - cdbk = gp_gamma_4sfr_6b; - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = (float) log10( gains_mem[1] ); - aux[4] = (float) log10( gains_mem[2] ); - aux[5] = gains_mem[3]; - aux[6] = gains_mem[4]; - aux[7] = gains_mem[5]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* retrieve the codebook index and calculate both gains */ - index = get_next_indice( st, nBits ); - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - } - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*--------------------------------------------------------------------------* - * gain_dec_SQ() - * - * Decoding of pitch and codebook gains using scalar quantizers - *-------------------------------------------------------------------------*/ - -void gain_dec_SQ( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t i_subfr, /* i : subframe number */ - const float *code, /* i : algebraic code excitation */ - const float Es_pred, /* i : predicted scaled innov. energy */ - float *gain_pit, /* o : Quantized pitch gain */ - float *gain_code, /* o : Quantized codeebook gain */ - float *gain_inov, /* o : unscaled innovation gain */ - float *norm_gain_code /* o : norm. gain of the codebook excitation */ -) -{ - int16_t index, nBits; - float gcode0, Ei, Ecode; - int16_t tmp16; - /*-----------------------------------------------------------------* - * get number of bits - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; - - /*-----------------------------------------------------------------* - * decode pitch gain - *-----------------------------------------------------------------*/ - - index = get_next_indice( st, nBits >> 1 ); - /*Ei = (G_PITCH_MAX - G_PITCH_MIN) / ((1 << (nBits>>1)) - 1);*/ /* set quantization step */ - tmp16 = div_s( 1, ( ( 1 << ( nBits >> 1 ) ) - 1 ) ); /* Q15*/ - Ei = (float) mult_r( (int16_t) ( G_PITCH_MAX * 8192.0f + 0.5f ), tmp16 ) / 8192.0f; - - *gain_pit = usdequant( index, G_PITCH_MIN, Ei ); - - /*-----------------------------------------------------------------* - * calculate the predicted gain code - *-----------------------------------------------------------------*/ - - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - /*-----------------------------------------------------------------* - * decode normalized codebook gain - *-----------------------------------------------------------------*/ - - index = get_next_indice( st, ( nBits + 1 ) >> 1 ); - *gain_code = gain_dequant( index, G_CODE_MIN, G_CODE_MAX, ( nBits + 1 ) >> 1 ); - *gain_code *= gcode0; - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - - -/*-------------------------------------------------* - * gain_dec_gaus() - * - * Decoding of gains for Gaussian codebook - *-------------------------------------------------*/ - -/*! r: quantized codebook gain */ -float gain_dec_gaus( - const int16_t index, /* i : quantization index */ - const int16_t bits, /* i : number of bits to quantize */ - const float lowBound, /* i : lower bound of quantizer (dB) */ - const float topBound, /* i : upper bound of quantizer (dB) */ - const float gain_inov, /* i : unscaled innovation gain */ - float *norm_gain_code /* o : gain of normalized gaus. excit. */ -) -{ - float gain, enr, stepSize; - - /*-----------------------------------------------------------------* - * quantize linearly the log E - *-----------------------------------------------------------------*/ - - stepSize = ( topBound - lowBound ) / ( (float) ( 1 << bits ) ); - - /*-----------------------------------------------------------------* - * Gaussian codebook gain - *-----------------------------------------------------------------*/ - - enr = (float) index * stepSize + lowBound; /* quantized codebook gain in dB */ - gain = (float) pow( 10.0f, enr / 20.0f ); - - *norm_gain_code = gain / gain_inov; - - return gain; -} -#endif diff --git a/lib_dec/gain_dec_fx.c b/lib_dec/gain_dec_fx.c index c1566bf41..210fae39e 100644 --- a/lib_dec/gain_dec_fx.c +++ b/lib_dec/gain_dec_fx.c @@ -990,7 +990,6 @@ void gain_dec_lbr_fx( return; } -#ifdef IVAS_FLOAT_FIXED void gain_dec_lbr_ivas_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 coder_type, /* i : coding type */ @@ -1375,7 +1374,6 @@ void gain_dec_lbr_ivas_fx( return; } -#endif /*====================================================================== */ /* FUNCTION : lp_gain_updt_fx() */ diff --git a/lib_dec/gaus_dec.c b/lib_dec/gaus_dec.c index b7a89bec9..d441f6ead 100644 --- a/lib_dec/gaus_dec.c +++ b/lib_dec/gaus_dec.c @@ -41,227 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void gaus_dec2v( Decoder_State *st, float *code, const int16_t lg, const int16_t nb_bits ); - -static void dec_2pos( int16_t index, int16_t *ind1, int16_t *ind2, float *sign1, float *sign2, const int16_t n ); - - -/*---------------------------------------------------------------------* - * gaus_dec() - * - * no adaptive excitation constructed - * - decode the codebook indices, - * - find the excitation - *---------------------------------------------------------------------*/ - -void gaus_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t i_subfr, /* i : subframe index */ - float *code, /* o : unvoiced excitation */ - float *norm_gain_code, /* o : gain of the normalized gaussian excitation*/ - float *lp_gainp, /* i/o: LP-filtered pitch gain (FEC) */ - float *lp_gainc, /* i/o: LP-filtered code gain (FEC) */ - float *gain_inov, /* o : unscaled innovation gain */ - float *tilt_code, /* o : synthesis excitation spectrum tilt */ - float *voice_fac, /* o : estimated voicing factor */ - float *gain_pit, /* o : pitch gain */ - float *pt_pitch, /* o : floating pitch buffer */ - float *exc, /* o : excitation signal frame */ - float *gain_code, /* o : gain of the gaussian excitation */ - float *exc2 /* o : Scaled excitation signal frame */ -) -{ - int16_t i, idx, nb_bits; - - /*----------------------------------------------------------------* - * Decode Gaussian excitation - *----------------------------------------------------------------*/ - - nb_bits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; - - gaus_dec2v( st, code, L_SUBFR, nb_bits >> 1 ); - - /*-----------------------------------------------------------------* - * Decode gain of Gaussian excitation and normalized Gaussian excitation - *-----------------------------------------------------------------*/ - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); - - nb_bits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; - idx = get_next_indice( st, nb_bits ); - - /* safety check in case of bit errors */ - if ( idx > 78 && st->element_mode == EVS_MONO ) - { - idx = 78; - st->BER_detect = 1; - } - - *gain_code = gain_dec_gaus( idx, nb_bits, -30.0f, 190.0f, *gain_inov, norm_gain_code ); - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, 0.0f, *norm_gain_code, lp_gainp, lp_gainc, L_FRAME ); /* supposes that gain_dec_gaus() is used for ACELP@12k8 only */ - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - *tilt_code = 0.0f; - *voice_fac = -1.0f; /* only unvoiced */ - *gain_pit = 0.0f; /* needed for BASS postfitler */ - *pt_pitch = (float) L_SUBFR; /* floating pitch buffer */ - - /*-----------------------------------------------------------------* - * Construct scaled excitation - *-----------------------------------------------------------------*/ - - set_f( &exc2[i_subfr], 0, L_SUBFR ); - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i + i_subfr] = *gain_code * code[i]; - } - - return; -} - -/*-----------------------------------------------------* - * gaus_dec2v() - * - * decoder of Gaussian Codebook for unvoiced - * consisting of addition of 2 Gaussian vectors - * - * One Gaussian vector of 190 values - *-----------------------------------------------------*/ - -static void gaus_dec2v( - Decoder_State *st, /* i/o: decoder state structure */ - float *code, /* o : decoded gaussian codevector */ - const int16_t lg, /* i : codevector length */ - const int16_t nb_bits /* i : nb ob bits per track (max 6)*/ -) -{ - int16_t i, ind1, ind2, idx, index_delta; - int16_t nvec, step; - float sign1, sign2; - float *pt1, *pt2; - float gaus_dico2[190]; - float delta; - - nvec = 1 << nb_bits; - step = 0x80 >> nb_bits; - - idx = get_next_indice( st, 2 * nb_bits + 1 ); - index_delta = get_next_indice( st, 3 ); - - dec_2pos( idx, &ind1, &ind2, &sign1, &sign2, nvec ); - - delta = STEP_DELTA * (float) ( index_delta ); - if ( delta > 0.0f ) - { - gaus_dico2[0] = gaus_dico[0]; - for ( i = 1; i < 190; i++ ) - { - gaus_dico2[i] = ( gaus_dico[i] - delta * gaus_dico[i - 1] ) / ( 1 + delta * delta ); - } - } - else - { - for ( i = 0; i < 190; i++ ) - { - gaus_dico2[i] = gaus_dico[i]; - } - } - - pt1 = &gaus_dico2[ind1 * step]; - pt2 = &gaus_dico2[ind2 * step]; - - for ( i = 0; i < lg; i++ ) - { - code[i] = pt1[i] * sign1 + pt2[i] * sign2; - } - - return; -} - -/*-----------------------------------------------------* - * dec_2pos() - * - * Decode the codevectors positions and signs - *-----------------------------------------------------*/ - -static void dec_2pos( - int16_t index, /* i : quantization index */ - int16_t *ind1, /* o : 1st vector index */ - int16_t *ind2, /* o : 2nd vector index */ - float *sign1, /* o : 1st vector sign */ - float *sign2, /* o : 2nd vector sign */ - const int16_t n /* i : nb. of vectors in cb. */ -) -{ - int16_t i; - - i = index & 1; - if ( i == 0 ) - { - *sign1 = 1.0f; - } - else - { - *sign1 = -1.0f; - } - - index = index >> 1; - - *ind1 = index / n; - *ind2 = index - ( *ind1 * n ); - if ( *ind1 > *ind2 ) - { - *sign2 = -*sign1; - } - else - { - *sign2 = *sign1; - } - - return; -} - - -/*-----------------------------------------------------* - * gaus_L2_dec_flt : - * - * decoder of Gaussian Codebook for unvoiced as Layer 2 - * - * One Gaussian vector - *-----------------------------------------------------*/ - -void gaus_L2_dec_flt( - float *code, /* o : decoded gaussian codevector */ - float tilt_code, - const float *Aq, - float formant_enh_num, - int16_t *seed_acelp /* i/o: random seed */ -) -{ - int16_t i; - - /*Generate white gaussian noise using central limit theorem method (N only 4 as E_util_random is not purely uniform)*/ - for ( i = 0; i < L_SUBFR; i++ ) - { - code[i] = (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - } - - /*Shape the gaussian excitation*/ - cb_shape( 1, 0, 0, 1, 0, formant_enh_num, FORMANT_SHARPENING_G2_FLT, Aq, code, tilt_code, 0, L_SUBFR ); - - return; -} -#endif diff --git a/lib_dec/gs_dec.c b/lib_dec/gs_dec.c index 69bcd1de5..79457ca5d 100644 --- a/lib_dec/gs_dec.c +++ b/lib_dec/gs_dec.c @@ -48,680 +48,3 @@ * * Decode audio (AC) frames *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decod_audio( - Decoder_State *st, /* i/o: decoder static memory */ - float dct_epit[], /* o : GSC excitation in DCT domain */ - const float *Aq, /* i : LP filter coefficient */ - float *tmp_noise, /* o : long term temporary noise energy */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - float *bwe_exc, /* o : excitation for SWB TBE */ - float *lsf_new, /* i : ISFs at the end of the frame */ - float *gain_buf, /* o : floating pitch gain for each subframe */ - const int16_t tdm_lp_reuse_flag, /* i : LPC reuse flag */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - int16_t tmp_nb_bits_tot, pit_band_idx; - GSC_DEC_HANDLE hGSCDec; - float code[4 * L_SUBFR]; - int16_t Diff_len, nb_subfr, i; - int16_t nb_frame_flg; - float Es_pred = 0.0f; - int16_t Len, max_len; - int16_t attack_flag; - float low_pit; - int16_t last_bin; - int16_t nbits; - float exc_wo_nf[L_FRAME16k]; - int16_t nb_bits; /* number of bits */ - int16_t indice; /* parameter indices to read */ - - hGSCDec = st->hGSCDec; - - /*---------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - Diff_len = 0; - - /* decode GSC attack flag (used to reduce possible pre-echo) */ - attack_flag = get_next_indice( st, 1 ); - - /* decode GSC SWB speech flag */ - if ( st->GSC_IVAS_mode >= 1 || ( st->coder_type != INACTIVE && ( ( st->element_mode == EVS_MONO && st->total_brate >= ACELP_13k20 ) || - ( st->element_mode > EVS_MONO && st->total_brate > MIN_BRATE_GSC_NOISY_FLAG && st->bwidth >= SWB && !st->flag_ACELP16k ) ) ) ) - { - st->GSC_noisy_speech = get_next_indice( st, 1 ); - } - - /* safety check in case of bit errors */ - if ( st->GSC_noisy_speech && st->bwidth < SWB && st->GSC_IVAS_mode == 0 ) - { - st->BER_detect = 1; - st->GSC_noisy_speech = 0; - } - - /* set bit-allocation */ - config_acelp1_IVAS( DEC, st->total_brate, st->core_brate, st->core, st->extl_orig, st->extl_brate_orig, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), st->next_bit_pos, st->coder_type, -1, 1, &nb_bits, NULL, st->element_mode, &nbits /*dummy*/, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - - /*---------------------------------------------------------------* - * Decode energy dynamics - *---------------------------------------------------------------*/ - - if ( st->GSC_IVAS_mode >= 1 || ( st->GSC_noisy_speech == 1 && st->GSC_IVAS_mode == 0 ) ) - { - nb_subfr = NB_SUBFR; - hGSCDec->cor_strong_limit = 0; - hGSCDec->noise_lev = NOISE_LEVEL_SP3; - - if ( st->GSC_IVAS_mode >= 1 ) - { - if ( st->core_brate < GSC_L_RATE_STG && st->GSC_IVAS_mode < 3 ) - { - nb_subfr = 2; - } - hGSCDec->noise_lev = NOISE_LEVEL_SP2; - - if ( st->GSC_IVAS_mode == 3 ) /* Music like */ - { - hGSCDec->noise_lev = NOISE_LEVEL_SP0; - } - else if ( st->GSC_noisy_speech == 0 ) /* speech like but not noisy */ - { - hGSCDec->noise_lev = NOISE_LEVEL_SP3; - } - } - } - else - { - if ( st->core_brate <= ACELP_8k00 ) - { - hGSCDec->noise_lev = get_next_indice( st, 2 ) + NOISE_LEVEL_SP2; - } - else - { - hGSCDec->noise_lev = get_next_indice( st, 3 ) + NOISE_LEVEL_SP0; - } - - /*---------------------------------------------------------------* - * Decode number of subframes - *---------------------------------------------------------------*/ - - if ( st->L_frame == L_FRAME16k && ( st->core_brate <= ACELP_13k20 || st->coder_type == INACTIVE ) ) - { - hGSCDec->cor_strong_limit = 0; - nb_subfr = 1; - } - else - { - hGSCDec->cor_strong_limit = 1; - nb_subfr = SWNB_SUBFR; - if ( st->core_brate >= ACELP_9k60 ) - { - nbits = 1; - - if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) - { - nbits = 2; - } - - nb_frame_flg = get_next_indice( st, nbits ); - - if ( ( nb_frame_flg & 0x1 ) == 0 ) - { - nb_subfr = 2 * SWNB_SUBFR; - hGSCDec->cor_strong_limit = 0; - } - else if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) - { - nb_subfr = 2 * SWNB_SUBFR; /* cor_strong already set to 1 */ - } - - if ( ( nb_frame_flg >> 1 ) == 1 ) - { - nb_subfr *= 2; - } - } - } - } - - if ( st->L_frame == L_FRAME16k && nb_subfr == NB_SUBFR ) - { - nb_subfr = NB_SUBFR16k; - } - - /*---------------------------------------------------------------* - * Decode the last band where the adaptive (pitch) contribution is significant - *---------------------------------------------------------------*/ - - if ( st->core_brate < CFREQ_BITRATE ) - { - if ( st->core_brate < ACELP_9k60 && st->coder_type == INACTIVE ) - { - nbits = 1; - } - else - { - nbits = 3; - } - } - else - { - nbits = 4; - } - - if ( st->core_brate < ACELP_9k60 && st->coder_type != INACTIVE ) - { - pit_band_idx = 1; - } - else - { - pit_band_idx = get_next_indice( st, nbits ); - } - - if ( pit_band_idx != 0 ) - { - if ( st->core_brate < ACELP_9k60 ) - { - pit_band_idx = 7 + BAND1k2; /* At low rate, if pitch model is chosen, then for to be use on extented and constant frequency range */ - } - else - { - pit_band_idx += BAND1k2; - } - - /* detect bit errors in the bitstream */ - if ( pit_band_idx > 13 ) /* The maximum decodable index is 10 + BAND1k2 (3) = 13 */ - { - pit_band_idx = 13; - st->BER_detect = 1; - } - - Diff_len = (int16_t) ( mfreq_loc[pit_band_idx] / BIN_SIZE ); - } - - hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; - - /*--------------------------------------------------------------------------------------* - * Decode adaptive (pitch) excitation contribution - * Reset unvaluable part of the adaptive (pitch) excitation contribution - *--------------------------------------------------------------------------------------*/ - - if ( pit_band_idx > BAND1k2 ) - { - /*---------------------------------------------------------------* - * Decode adaptive (pitch) excitation contribution - *---------------------------------------------------------------*/ - - if ( !( st->GSC_IVAS_mode > 0 && st->L_frame / nb_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) && - ( ( st->core_brate >= MIN_RATE_FCB || st->GSC_noisy_speech ) && - ( ( nb_subfr == NB_SUBFR && st->L_frame == L_FRAME ) || ( nb_subfr == NB_SUBFR16k && st->L_frame == L_FRAME16k ) ) ) ) - { - if ( st->element_mode > EVS_MONO ) - { - nb_bits = 5; - } - else - { - nb_bits = Es_pred_bits_tbl[BIT_ALLOC_IDX( st->core_brate, GENERIC, -1, -1 )]; - } - - indice = get_next_indice( st, nb_bits ); - Es_pred_dec( &Es_pred, indice, nb_bits, 0 ); - } - - dec_pit_exc( st, st->L_frame, Aq, Es_pred, pitch_buf, code, exc, nb_subfr, gain_buf, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - if ( st->core_brate < ACELP_9k60 ) - { - minimum( pitch_buf, st->L_frame >> 6, &low_pit ); - - if ( low_pit < 64 ) - { - pit_band_idx = 9 + BAND1k2; - if ( st->bwidth == NB ) - { - pit_band_idx = 7 + BAND1k2; - } - } - else if ( low_pit < 128 ) - { - pit_band_idx = 5 + BAND1k2; - } - else - { - pit_band_idx = 3 + BAND1k2; - } - Diff_len = (int16_t) ( mfreq_loc[pit_band_idx] / BIN_SIZE ); - hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; - } - - /*---------------------------------------------------------------* - * DCT transform - *---------------------------------------------------------------*/ - - edct( exc, dct_epit, st->L_frame, st->element_mode ); - - /*---------------------------------------------------------------* - * Reset unvaluable part of the adaptive (pitch) excitation contribution - *---------------------------------------------------------------*/ - - max_len = st->L_frame - Diff_len; - - if ( st->bwidth == NB ) - { - max_len = 160 - Diff_len; - } - - Len = 80; - if ( max_len < 80 ) - { - Len = max_len; - } - - if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) - { - for ( i = 0; i < max_len; i++ ) - { - dct_epit[i + Diff_len] = 0.0f; - } - } - else - { - for ( i = 0; i < Len; i++ ) - { - dct_epit[i + Diff_len] *= sm_table[i]; - } - for ( ; i < max_len; i++ ) - { - dct_epit[i + Diff_len] = 0.0f; - } - } - - st->bfi_pitch = (int16_t) ( mean( pitch_buf, nb_subfr ) + 0.5f ); - st->bfi_pitch_frame = st->L_frame; - Diff_len++; - st->bpf_off = 0; - } - else - { - /* No adaptive (pitch) excitation contribution */ - st->bpf_off = 1; - - set_f( dct_epit, 0.0f, st->L_frame ); - - if ( st->L_frame == L_FRAME16k ) - { - set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); - } - else - { - set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); - } - - set_f( gain_buf, 0.f, NB_SUBFR16k ); - - st->bfi_pitch = L_SUBFR; - st->bfi_pitch_frame = st->L_frame; - st->lp_gainp = 0.0f; - st->lp_gainc = 0.0f; - st->tilt_code = 0; - pit_band_idx = 0; - Diff_len = 0; - } - - /*--------------------------------------------------------------------------------------* - * GSC decoder - *--------------------------------------------------------------------------------------*/ - - /* find the current total number of bits used */ - tmp_nb_bits_tot = st->next_bit_pos; - - if ( st->extl_brate_orig > 0 ) - { - /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ - tmp_nb_bits_tot--; - } - - if ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 && st->idchan == 0 ) - { - tmp_nb_bits_tot += 5; /* for noisiness */ - } - - if ( st->idchan == 1 ) - { - tmp_nb_bits_tot += TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; - if ( st->tdm_LRTD_flag == 1 ) - { - tmp_nb_bits_tot -= STEREO_BITS_TCA; - } - } - - gsc_dec( st, dct_epit, pit_band_idx, Diff_len, tmp_nb_bits_tot, nb_subfr, st->coder_type, &last_bin, lsf_new, exc_wo_nf, tmp_noise ); - - /*--------------------------------------------------------------------------------------* - * iDCT transform - *--------------------------------------------------------------------------------------*/ - - edct( dct_epit, exc, st->L_frame, st->element_mode ); - - edct( exc_wo_nf, exc_wo_nf, st->L_frame, st->element_mode ); - - /*----------------------------------------------------------------------* - * Remove potential pre-echo in case an onset has been detected - *----------------------------------------------------------------------*/ - - pre_echo_att( &hGSCDec->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Update BWE excitation - *--------------------------------------------------------------------------------------*/ - - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME16k ) - { - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - interp_code_4over2( exc, bwe_exc, st->L_frame ); - } - else - { - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - interp_code_5over2( exc, bwe_exc, L_FRAME ); - } - } - - /*--------------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------------*/ - - mvr2r( exc, exc2, st->L_frame ); - mvr2r( exc_wo_nf, exc, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Channel aware mode parameters - *--------------------------------------------------------------------------------------*/ - - set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); - - return; -} - -/*-------------------------------------------------------------------* - * gsc_dec() - * - * Generic audio signal decoder - *-------------------------------------------------------------------*/ - -void gsc_dec( - Decoder_State *st, /* i/o: State structure */ - float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ - const int16_t pit_band_idx, /* i : bin position of the cut-off frequency */ - const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ - const int16_t bits_used, /* i : Number of bit used before frequency Q */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - const int16_t coder_type, /* i : coding type */ - int16_t *last_bin, /* i : last bin of bit allocation */ - const float *lsf_new, /* i : ISFs at the end of the frame */ - float *exc_wo_nf, /* o : excitation (in f domain) without noisefill */ - float *tmp_noise /* o : long-term noise energy */ -) -{ - int16_t i, j, bit, nb_subbands, pvq_len; - GSC_DEC_HANDLE hGSCDec; - int16_t bitallocation_band[MBANDS_GN_BITALLOC16k]; - int16_t bitallocation_exc[2]; - float Ener_per_bd_iQ[MBANDS_GN16k]; - int16_t max_ener_band[MBANDS_GN_BITALLOC16k]; - float exc_diffQ[L_FRAME16k]; - int16_t bits_per_bands[MBANDS_GN_BITALLOC16k]; /*Q3*/ - float concat_out[L_FRAME16k]; - int16_t npulses[NB_SFM]; - int16_t maxpulse[NB_SFM]; - float mean_gain; - int16_t Mbands_gn = 16; - int16_t seed_init; - float max_eq, max_eq_val; - - hGSCDec = st->hGSCDec; - - /*--------------------------------------------------------------------------------------* - * Initialization - *--------------------------------------------------------------------------------------*/ - - bit = bits_used; - if ( coder_type == INACTIVE && ( st->tdm_LRTD_flag == 1 || st->element_mode == IVAS_SCE ) && st->core_brate <= GSC_LRES_GAINQ_LIMIT ) - { - bit += GSC_LRES_NB_NITS; - } - - if ( st->L_frame == L_FRAME16k ) - { - Mbands_gn = MBANDS_GN16k; - } - - set_f( exc_diffQ, 0.0f, st->L_frame ); - set_f( Ener_per_bd_iQ, 0.0f, Mbands_gn ); - - /*--------------------------------------------------------------------------------------* - * Gain decoding - *--------------------------------------------------------------------------------------*/ - - if ( st->bfi || st->BER_detect ) - { - /* copy old gain */ - mvr2r( hGSCDec->old_y_gain, Ener_per_bd_iQ, Mbands_gn ); - mean_gain = st->lp_gainc / 10.0f; - for ( i = 0; i < Mbands_gn; i++ ) - { - Ener_per_bd_iQ[i] += mean_gain; - } - - st->lp_gainc *= 0.98f; - } - else - { - i = 0; - while ( i < SIZE_BRATE_INTERMED_TBL ) - { - if ( st->core_brate <= brate_intermed_tbl[i] ) - { - break; - } - i++; - } - - if ( st->element_mode > EVS_MONO && coder_type == AUDIO && st->core_brate <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation is mapped to 8 kb/s instead of 9.6 kb/s in this case */ - { - i--; - } - mean_gain = gsc_gaindec( st, Ener_per_bd_iQ, brate_intermed_tbl[i], hGSCDec->old_y_gain, coder_type, st->bwidth ); - - st->lp_gainc = 10.0f * mean_gain; - } - - *tmp_noise = st->lp_gainc; - - *last_bin = 0; - if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) - { - bitallocation_exc[0] = 0; - bitallocation_exc[1] = 0; - } - - set_s( bitallocation_band, 0, MBANDS_GN ); - - if ( st->bfi || st->BER_detect ) - { - max_eq = 1.0f; - - /*--------------------------------------------------------------------------------------* - * Copy old spectrum - * reduce spectral dynamic - * save spectrum - *--------------------------------------------------------------------------------------*/ - - if ( st->last_good == INACTIVE_CLAS || st->Last_GSC_noisy_speech_flag == 1 ) - { - for ( i = 0; i < st->L_frame; i++ ) - { - hGSCDec->Last_GSC_spectrum[i] = 0.8f * own_random( &hGSCDec->seed_tcx ) / PCM16_TO_FLT_FAC + 0.2f * hGSCDec->Last_GSC_spectrum[i]; - } - - mvr2r( hGSCDec->Last_GSC_spectrum, exc_diffQ, st->L_frame ); - } - - mvr2r( hGSCDec->Last_GSC_spectrum, exc_diffQ, st->L_frame ); - - for ( i = 0; i < st->L_frame; i++ ) - { - hGSCDec->Last_GSC_spectrum[i] *= 0.75f; - } - } - else - { - /*--------------------------------------------------------------------------------------* - * PVQ decoder - *--------------------------------------------------------------------------------------*/ - - bands_and_bit_alloc( hGSCDec->cor_strong_limit, hGSCDec->noise_lev, st->core_brate, Diff_len, bit, &bit, Ener_per_bd_iQ, max_ener_band, bits_per_bands, &nb_subbands, NULL, NULL, &pvq_len, coder_type, st->bwidth, st->GSC_noisy_speech, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); - - set_s( npulses, 0, NB_SFM ); - - if ( bit == 0 ) - { - set_zero( concat_out, L_FRAME16k ); - } - else - { - pvq_core_dec( st, gsc_sfm_start, gsc_sfm_end, gsc_sfm_size, concat_out, bit, nb_subbands, bits_per_bands, NULL, npulses, maxpulse, ACELP_CORE ); - } - - max_eq = 0.0f; - max_eq_val = 1.0f; - - if ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && coder_type <= UNVOICED ) - { - j = emaximum( concat_out, nb_subbands * 16, &max_eq ); - max_eq = (float) ( max_eq_val / ( fabs( concat_out[j] ) + 0.01f ) ); - max_eq = min( max_eq_val, max_eq ); - } - - seed_init = 0; - for ( j = 0; j < nb_subbands; j++ ) - { - mvr2r( concat_out + j * 16, exc_diffQ + max_ener_band[j] * 16, 16 ); - - if ( max_ener_band[j] > *last_bin ) - { - *last_bin = max_ener_band[j]; - } - - bitallocation_band[max_ener_band[j]] = 1; - - seed_init += npulses[j]; - } - - if ( st->last_coder_type != AUDIO /* First audio frame */ - && st->last_coder_type != UNVOICED ) /* last_coder_type == INACTIVE is overwritten in update_dec to UNVOICED */ - { - for ( j = 0; j < nb_subbands * 16; j++ ) - { - if ( concat_out[j] > 0 ) - { - seed_init = (int16_t) ( (int32_t) seed_init * 8 ); - } - if ( concat_out[j] < 0 ) - { - seed_init = (int16_t) ( (int32_t) seed_init + 3 ); - } - } - - hGSCDec->seed_tcx = seed_init; - } - - if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) - { - if ( exc_diffQ[L_FRAME8k - 2] != 0 ) - { - bitallocation_exc[0] = 1; - } - - if ( exc_diffQ[L_FRAME8k - 1] != 0 ) - { - bitallocation_exc[1] = 1; - } - } - - mvr2r( exc_diffQ, hGSCDec->Last_GSC_spectrum, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Skip adaptive (pitch) contribution frequency band (no noise added over the time contribution) - * Find x pulses between 1.6-3.2kHz to code in the spectrum of the residual signal - * Gain is based on the inter-correlation gain between the pulses found and residual signal - *--------------------------------------------------------------------------------------*/ - - if ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 1 ) - { - for ( i = 64; i < st->L_frame; i++ ) - { - exc_diffQ[i] *= max_eq; - } - } - else if ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && coder_type <= UNVOICED ) - { - for ( i = 0; i < L_FRAME; i++ ) - { - exc_diffQ[i] *= max_eq; - } - } - else - { - freq_dnw_scaling( hGSCDec->cor_strong_limit, coder_type, hGSCDec->noise_lev, st->core_brate, exc_diffQ, st->L_frame ); - } - } - - /*--------------------------------------------------------------------------------------* - * Estimate noise level - *--------------------------------------------------------------------------------------*/ - - highband_exc_dct_in( st->core_brate, mfreq_bindiv_loc, *last_bin, Diff_len, hGSCDec->noise_lev, pit_band_idx, exc_diffQ, &hGSCDec->seed_tcx, Ener_per_bd_iQ, nb_subfr, exc_dct_in, st->last_coder_type, bitallocation_band, lsf_new, hGSCDec->last_exc_dct_in, &hGSCDec->last_ener, hGSCDec->last_bitallocation_band, bitallocation_exc, st->bfi, coder_type, st->bwidth, exc_wo_nf, st->GSC_noisy_speech, hGSCDec->lt_ener_per_band, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); - - exc_dct_in[0] = 0; - - return; -} - -/*-------------------------------------------------------------------* - * GSC_dec_init_ivas() - * - * Initialize GSC decoder state structure - *-------------------------------------------------------------------*/ - -void GSC_dec_init_ivas( - GSC_DEC_HANDLE hGSCDec /* i/o: GSC data handle */ -) -{ - hGSCDec->seed_tcx = 15687; - hGSCDec->cor_strong_limit = 1; - set_f( hGSCDec->old_y_gain, 0, MBANDS_GN16k ); - hGSCDec->noise_lev = NOISE_LEVEL_SP0; - set_f( hGSCDec->Last_GSC_spectrum, 0.0f, L_FRAME16k ); - hGSCDec->Last_GSC_pit_band_idx = 0; - - set_f( hGSCDec->lt_ener_per_band, 1.0f, MBANDS_GN16k ); - set_f( hGSCDec->last_exc_dct_in, 0, L_FRAME16k ); - hGSCDec->last_ener = 0.0f; - set_s( hGSCDec->last_bitallocation_band, 0, 6 ); - - hGSCDec->Last_frame_ener = (float) MAX_32; - - return; -} -#endif diff --git a/lib_dec/gs_dec_amr_wb.c b/lib_dec/gs_dec_amr_wb.c index 0f0040121..d441f6ead 100644 --- a/lib_dec/gs_dec_amr_wb.c +++ b/lib_dec/gs_dec_amr_wb.c @@ -41,394 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define BAND3k 15 -#define BIN_1k2 48 -#define BAND_2k 12 -#define BAND_0k4 4 -#ifndef IVAS_FLOAT_FIXED -#define ALP 0.7f -#define MALP ( 1.0f - ALP ) -#define ALPMY ( 0.86f ) -#define ALPY 1.5f -#endif // !IVAS_FLOAT_FIXED - -#define CONTR_LIMIT 3012 /* Threshold to allow an increase in the contribution length */ - - -/*-------------------------------------------------------------------* - * NoiseFill() - * - * noise fill function for unvoiced/inactive frames (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void NoiseFill( - float *exc_diffQ, /* i/o: Noise per band */ - int16_t *seed_tcx, /* i : Seed for noise */ - const int16_t Mbands_gn /* i : number of bands */ -) -{ - int16_t StartBin, NB_Qbins, i_band, k; - StartBin = 0; - NB_Qbins = 0; - - for ( i_band = 0; i_band < Mbands_gn; i_band++ ) - { - StartBin += NB_Qbins; - NB_Qbins = crit_bins[i_band]; - for ( k = StartBin; k < NB_Qbins + StartBin; k++ ) - { - exc_diffQ[k] += 0.75f * ( (float) own_random( seed_tcx ) / PCM16_TO_FLT_FAC ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * Ener_per_band() - * - * Computed the energy per band (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void Ener_per_band( - const float exc_diff[], /* i : target signal */ - float y_gain4[] /* o : Energy per band to quantize */ -) -{ - float etmp; - const float *pt; - int16_t i, j; - - pt = exc_diff; - for ( j = 0; j < CRIT_NOIS_BAND; j++ ) - { - etmp = 0.01f; - for ( i = 0; i < crit_bins[j]; i++ ) - { - etmp += ( *pt * *pt ); - pt++; - } - etmp = max( etmp, .01f ); - y_gain4[j] = (float) sqrt( etmp ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * Apply_gain() - * - * Rescaling of the modified excitation vector (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void Apply_gain( - float exc_diffQ[], /* i/o: Quantized excitation */ - float Ener_per_bd_iQ[], /* o : Target ener per band */ - float Ener_per_bd_yQ[] /* o : Ener per band for norm vector */ -) -{ - int16_t i, i_band; - int16_t StartBin, NB_Qbins; - float y_gain; - - /*------------------------------------------------------------------ - * For all the bands - * Find the energy ratio between modified vector and original vector - *------------------------------------------------------------------*/ - - StartBin = 0; - NB_Qbins = 0; - for ( i_band = 0; i_band < CRIT_NOIS_BAND; i_band++ ) - { - StartBin += NB_Qbins; - NB_Qbins = crit_bins[i_band]; - y_gain = (float) ( Ener_per_bd_iQ[i_band] / Ener_per_bd_yQ[i_band] ); - - /*------------------------------------------------------------------ - * For bands below 400 Hz or for unvoiced/inactive frames - * only apply the energy ratio - *------------------------------------------------------------------*/ - - for ( i = StartBin; i < NB_Qbins + StartBin; i++ ) - { - exc_diffQ[i] *= y_gain; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * normalize_spec() - * - * Spectrum normalization (zeroed of bins below a certain threshold) (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void normalize_spec( - float fac_up, /* i : Core bitrate */ - float fy_norm[], /* i/o: Frequency quantized parameter */ - const int16_t L_frame /* i : Section length */ -) -{ - float max_val; - int16_t idx, j; - - idx = emaximum( fy_norm, L_frame, &max_val ); - - if ( fy_norm[idx] == 0 ) /* we can't use max(fy_norm[idx],1) because fy_norm[idx] can be negative */ - { - fy_norm[idx] = 1; - } - max_val = (float) fabs( fac_up / fy_norm[idx] ); - for ( j = 0; j < L_frame; j++ ) - { - fy_norm[j] *= max_val; - } - - return; -} - -/*-------------------------------------------------------------------* - * gs_dec_amr_wb() - * - * Modification of decoded excitation vector depending of the content type (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void gs_dec_amr_wb( - const int32_t core_brate, /* i : bitrate allocated to the core */ - int16_t *seed_tcx, /* i/o: seed used for noise generation */ - const float dct_in[], /* i : cdt of residual signal */ - float dct_out[], /* i/o: dct of pitch only excitation */ - const float pitch[], /* i : pitch buffer */ - const float voice_fac, /* i : gain pitch */ - const int16_t clas, /* i : signal frame class */ - const int16_t coder_type, /* i : coder type */ - const int16_t VeryLowRateSTflag /* i : Enable the noise enhancement for very low rate stereo generic mode */ -) -{ - int16_t i, mDiff_len; - float exc_diffQ[L_FRAME16k]; - int16_t j; - float etmp14; - float ftmp, ftmp1; - float Ener_per_bd_iQ[CRIT_NOIS_BAND]; - float Ener_per_bd_yQ[CRIT_NOIS_BAND]; - - /*--------------------------------------------------------------------------------------* - * compute the energy per band for the decoded excitation (in frequency domain) - *--------------------------------------------------------------------------------------*/ - - Ener_per_band( dct_in, Ener_per_bd_iQ ); - - /*--------------------------------------------------------------------------------------* - * adjust quantization noise for the low level to compensate for the poor 6 bit gainQ - *--------------------------------------------------------------------------------------*/ - - if ( core_brate < ACELP_12k65 ) - { - ftmp = 0; - for ( i = 0; i < CRIT_NOIS_BAND; i++ ) - { - ftmp = max( Ener_per_bd_iQ[i], ftmp ); - } - - if ( ( coder_type == INACTIVE || clas == VOICED_TRANSITION ) && ftmp < 20.0f ) - { - for ( i = 0; i < CRIT_NOIS_BAND; i++ ) - { - Ener_per_bd_iQ[i] *= crit_bins_corr[i]; - } - } - } - - /*--------------------------------------------------------------------------------------* - * Find the length of the temporal contribution, with a minimum contribution of 1.2kHz - *--------------------------------------------------------------------------------------*/ - - minimum( pitch, NB_SUBFR, &etmp14 ); - etmp14 = 12800.0f / etmp14; - etmp14 *= 8.0f; - - if ( etmp14 <= CONTR_LIMIT && ( VeryLowRateSTflag || core_brate >= ACELP_12k65 ) ) - { - etmp14 *= 2; - } - - mDiff_len = (int16_t) ( etmp14 + 0.5f ); - etmp14 = PCM16_TO_FLT_FAC; - j = 0; - for ( i = 0; i < CRIT_NOIS_BAND; i++ ) - { - if ( fabs( crit_bands_loc[i] - mDiff_len ) < etmp14 ) - { - etmp14 = (float) fabs( crit_bands_loc[i] - mDiff_len ); - j += crit_bins[i]; - } - } - - mDiff_len = j; - - if ( mDiff_len < BIN_1k2 ) - { - mDiff_len = BIN_1k2; - } - - if ( ( VeryLowRateSTflag && ( clas == VOICED_CLAS || clas == AUDIO_CLAS ) ) ) /* Do not apply normalization on VOICED signal in case of stereo */ - { - mvr2r( dct_in, exc_diffQ, L_FRAME ); - - /* normalization of the spectrum and noise fill */ - normalize_spec( 1.0f, exc_diffQ + mDiff_len, L_FRAME - mDiff_len ); - } - else - { - mvr2r( dct_in, exc_diffQ, mDiff_len ); - set_f( exc_diffQ + mDiff_len, 0, L_FRAME - mDiff_len ); - - /* normalization of the spectrum and noise fill */ - normalize_spec( 4, exc_diffQ, mDiff_len ); - } - NoiseFill( exc_diffQ, seed_tcx, CRIT_NOIS_BAND ); - - - /*--------------------------------------------------------------------------------------* - * Recompute energy per band of the modified excitation vector (in frequency domain) - *--------------------------------------------------------------------------------------*/ - - Ener_per_band( exc_diffQ, Ener_per_bd_yQ ); - - /*--------------------------------------------------------------------------------------* - * Compute tilt factor and amplify HF accordingly - *--------------------------------------------------------------------------------------*/ - - ftmp = ( 0.5f * ( 1.0f - voice_fac ) ); /* 1=unvoiced, 0=voiced */ - - for ( i = 240; i < L_FRAME; i++ ) - { - ftmp1 = ftmp * ( 0.067f * i - 15.0f ); - ftmp1 = max( 1.0f, ftmp1 ); - exc_diffQ[i] *= ftmp1; - } - - /*--------------------------------------------------------------------------------------* - * Match the energy of the modified excitation vector to the decoded excitation - *--------------------------------------------------------------------------------------*/ - - Apply_gain( exc_diffQ, Ener_per_bd_iQ, Ener_per_bd_yQ ); - - /*--------------------------------------------------------------------------------------* - * Copy to the output vector - *--------------------------------------------------------------------------------------*/ - - mvr2r( exc_diffQ, dct_out, L_FRAME ); - - return; -} - -/*-------------------------------------------------------------------* - * improv_amr_wb_gs() - * - * Modify the decoded excitation to increase quality of - * unvoiced and audio signals (used only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -void improv_amr_wb_gs( - const int16_t clas, /* i : signal frame class */ - const int16_t coder_type, /* i : coder type */ - const int32_t core_brate, /* i : bitrate allocated to the core */ - int16_t *seed_tcx, /* i/o: Seed used for noise generation */ - float *old_Aq, /* i/o: old LPC filter coefficient */ - float *mem_syn2, /* i/o: synthesis memory */ - const float lt_voice_fac, /* i/o: long term voice factor */ - const int16_t locattack, /* i : Flag for a detected attack */ - float *Aq, /* i/o: Decoded LP filter coefficient */ - float *exc2, /* i/o: Decoded complete excitation */ - float *mem_tmp, /* i/o: synthesis temporary memory */ - float *syn, /* i/o: Decoded synthesis to be updated */ - const float *pitch_buf, /* i : Decoded pitch buffer */ - const float Last_ener, /* i : Last energy */ - const int16_t rate_switching_reset, /* i : rate switching reset flag */ - const int16_t last_coder_type, /* i : Last coder_type */ - const int16_t VeryLowRateSTflag /* i : Enable the noise enhancement for very low rate stereo generic mode */ -) -{ - int16_t i; - float dct_exc_in[L_FRAME], dct_exc_out[L_FRAME]; - float Aq_orig[NB_SUBFR * ( M + 1 )], enr_LP_old, enr_LP_new; - - /*------------------------------------------------------------* - * Condition to enter the section on excitation modification - *------------------------------------------------------------*/ - - /* Enter the modification for all inactive frames and also for unvoiced frames if bitrate is below 8k85 */ - if ( VeryLowRateSTflag || - ( ( locattack == 0 && core_brate <= ACELP_12k65 ) && - ( ( core_brate < ACELP_8k85 && clas != AUDIO_CLAS && ( clas == UNVOICED_CLAS || clas == VOICED_TRANSITION ) ) || coder_type == INACTIVE ) ) ) - { - /*------------------------------------------------------------* - * two differents paths: - * unvoiced or inactive - * generic audio sound - * LP filter smoothing for inactive parts - *------------------------------------------------------------*/ - *seed_tcx = (int16_t) ( (int16_t) ( pitch_buf[0] * 64.0f ) * (int16_t) ( pitch_buf[3] * 64.0f ) ); - - if ( coder_type == INACTIVE && Last_ener > -3.0f && last_coder_type == UNVOICED && rate_switching_reset == 0 ) - { - mvr2r( Aq, Aq_orig, NB_SUBFR * ( M + 1 ) ); - - for ( i = 0; i < NB_SUBFR * ( M + 1 ); i++ ) - { - Aq[i] = ALP * old_Aq[i] + MALP * Aq[i]; - } - - /* check the smoothed LP filter stability */ - enr_LP_old = enr_1_Az( old_Aq, L_SUBFR ); - for ( i = 0; i < NB_SUBFR; i++ ) - { - enr_LP_new = enr_1_Az( Aq + i * ( M + 1 ), L_SUBFR ); - - if ( enr_LP_new > 128 * enr_LP_old ) - { - /* filter is unstable, do not modify the excitation */ - mvr2r( Aq_orig, Aq, NB_SUBFR * ( M + 1 ) ); - return; - } - - enr_LP_old = enr_LP_new; - } - } - - /*------------------------------------------------------------* - * Find frequency representation of the excitation - * Do the excitation modification according to the content - * Go back to time domain -> Overwrite excitation - *------------------------------------------------------------*/ - - edct( exc2, dct_exc_in, L_FRAME, EVS_MONO ); - - set_f( exc2, 0, L_FRAME ); - set_f( dct_exc_out, 0, L_FRAME ); - - gs_dec_amr_wb( core_brate, seed_tcx, dct_exc_in, dct_exc_out, pitch_buf, lt_voice_fac, clas, coder_type, VeryLowRateSTflag ); - - edct( dct_exc_out, exc2, L_FRAME, EVS_MONO ); - - /*------------------------------------------------------------* - * Redo core synthesis at 12k8 Hz with the modified excitation - *------------------------------------------------------------*/ - - mvr2r( mem_tmp, mem_syn2, M ); - syn_12k8( L_FRAME, Aq, exc2, syn, mem_syn2, 1 ); - } - - return; -} -#endif diff --git a/lib_dec/gs_dec_amr_wb_fx.c b/lib_dec/gs_dec_amr_wb_fx.c index 9778acec0..a4aef88dd 100644 --- a/lib_dec/gs_dec_amr_wb_fx.c +++ b/lib_dec/gs_dec_amr_wb_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ @@ -533,4 +532,3 @@ void improv_amr_wb_gs_fx( return; } -#endif diff --git a/lib_dec/gs_dec_fx.c b/lib_dec/gs_dec_fx.c index 2d92427cc..bbf067419 100644 --- a/lib_dec/gs_dec_fx.c +++ b/lib_dec/gs_dec_fx.c @@ -9,7 +9,6 @@ #include "prot.h" #include "prot_fx.h" #include "ivas_cnst.h" -#ifdef IVAS_FLOAT_FIXED /*=========================================================================*/ /* FUNCTION : void decod_audio_fx(); */ /*-------------------------------------------------------------------------*/ @@ -1792,4 +1791,3 @@ void GSC_dec_init_ivas_fx( return; } -#endif diff --git a/lib_dec/hdecnrm.c b/lib_dec/hdecnrm.c index 907926b68..56e7b45fe 100644 --- a/lib_dec/hdecnrm.c +++ b/lib_dec/hdecnrm.c @@ -49,23 +49,6 @@ /* Context based Huffman decoding for indices of quantized norms */ /*--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: decoded index */ -static int16_t decode_huff_context( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t *hufftab, /* i : Huffman table */ - int16_t *rbits /* i/o: the number of read bits */ -) -{ - while ( *hufftab > 0 ) - { - *rbits += ( *hufftab & 0xf ); - hufftab += ( *hufftab >> 4 ) + get_next_indice( st, *hufftab & 0xf ); - } - - return ( -*hufftab ); -} -#endif /*--------------------------------------------------------------------------*/ /* Function hdecnrm() */ @@ -73,79 +56,6 @@ static int16_t decode_huff_context( /* Huffman decoding for indices of quantized norms */ /*--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hdecnrm( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t N, /* i : number of norms */ - int16_t *index /* o : indices of quantized norms */ -) -{ - int16_t i, j, k, n, m; - int16_t temp; - int16_t *pidx; - - pidx = index; - - m = N - 1; - for ( i = 0; i < m; i++ ) - { - j = 0; - k = 0; - if ( get_next_indice_1( st ) ) - { - j = 1; - } - - if ( get_next_indice_1( st ) ) - { - k = 1; - } - n = j * 2 + k; - j = j * 4; - temp = 16 + n - j; - - if ( get_next_indice_1( st ) ) - { - temp = 12 + n + j; - - if ( get_next_indice_1( st ) ) - { - j = 0; - if ( get_next_indice_1( st ) ) - { - j = 1; - } - - temp = 8 + n; - - if ( j != 0 ) - { - temp += 12; - } - - if ( get_next_indice_1( st ) ) - { - temp = n; - - if ( get_next_indice_1( st ) ) - { - temp = n + 4; - } - - if ( j != 0 ) - { - temp += 24; - } - } - } - } - - *pidx++ = temp; - } - - return; -} -#endif /*-------------------------------------------------------------------------- * huff_dec() @@ -153,48 +63,6 @@ void hdecnrm( * Huffman decoding *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void huff_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t N, /* i : Number of codewords to decode */ - const int16_t buffer_len, /* i : Number of bits to read */ - const int16_t num_lengths, /* i : Number of different huffman codeword lengths */ - const int16_t *thres, /* i : Threshold of first codeword of each length */ - const int16_t *offset, /* i : Offset for first codeword */ - const int16_t *huff_tab, /* i : Huffman table order by codeword lengths */ - int16_t *index /* o : Decoded index */ -) -{ - int16_t i, j, k; - uint16_t val; - int16_t last_bits = buffer_len; - - val = 0; - j = 0; - for ( i = 0; i < N; i++ ) - { - last_bits = buffer_len - j; - val <<= last_bits; - val &= ( 1 << buffer_len ) - 1; /* 0xFFF; */ - val |= get_next_indice( st, last_bits ); - - /* Find codeword length */ - j = num_lengths - 1; - while ( val < thres[j] ) - { - j--; - } - k = ( val - thres[j] ) >> j; - *index++ = huff_tab[offset[j] + k]; - } - - /* Put back unused bits */ - st->next_bit_pos -= j; - - return; -} -#endif - /*-------------------------------------------------------------------------- * hdecnrm_context() @@ -202,45 +70,6 @@ void huff_dec( * Huffman decoding for indices of quantized norms *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hdecnrm_context( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t N, /* i : number of norms */ - int16_t *index, /* o : indices of quantized norms */ - int16_t *n_length /* o : decoded stream length */ -) -{ - int16_t i, prevj; - - prevj = index[0] + OFFSET_NORM; - for ( i = 1; i < N; i++ ) - { - if ( prevj > HTH_NORM ) - { - /* above */ - index[i] = decode_huff_context( st, hntable, n_length ); - index[i] = 31 - index[i]; - } - else - { - if ( prevj < LTH_NORM ) - { - /* less */ - index[i] = decode_huff_context( st, hntable, n_length ); - } - else - { - /* equal */ - index[i] = decode_huff_context( st, hetable, n_length ); - } - } - prevj = index[i]; - } - - return; -} -#endif - /*-------------------------------------------------------------------------- * hdecnrm_resize() @@ -248,164 +77,9 @@ void hdecnrm_context( * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hdecnrm_resize( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t N, /* i : number of SFMs */ - int16_t *index /* o : norm quantization index vector */ -) -{ - int16_t i, j, k, m; - int16_t temp; - int16_t *pidx; - - pidx = index; - - m = N - 1; - for ( i = 0; i < m; i++ ) - { - j = 0; - k = 0; - - for ( j = 0; j < 11; j++ ) - { - if ( get_next_indice_1( st ) ) - { - k++; - } - else - { - break; - } - } - - if ( k == 11 ) - { - temp = 25; - } - else if ( k == 10 ) - { - temp = 5; - } - else if ( k == 9 ) - { - temp = 6; - } - else - { - if ( get_next_indice_1( st ) ) - { - temp = 16 + k; - } - else - { - temp = 15 - k; - } - } - - *pidx++ = temp; - } - - return; -} -#endif - /*-------------------------------------------------------------------------- * hdecnrm_trans() * * Huffman decoding for indices of quantized norms *--------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void hdecnrm_tran( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t N, /* i : number of norms */ - int16_t *index /* o : indices of quantized norms */ -) -{ - int16_t i, j, k, n, m; - int16_t temp; - int16_t *pidx; - int16_t l; - - pidx = index; - - m = N - 1; - for ( i = 0; i < m; i++ ) - { - j = 0; - k = 0; - if ( get_next_indice_1( st ) ) - { - j = 1; - } - - if ( get_next_indice_1( st ) ) - { - k = 1; - } - - n = k * 2 + j; - l = k * 4; - if ( ( j == 0 && k == 0 ) || ( j == 1 && k == 0 ) || ( j == 1 && k == 1 ) ) - { - temp = 15 + l - n; - } - else - { - if ( get_next_indice_1( st ) ) - { - temp = 15 + n - l; - } - else - { - temp = 15 + l - n; - if ( get_next_indice_1( st ) ) - { - for ( k = 0; k < 3; ) - { - if ( get_next_indice_1( st ) ) - { - k++; - } - else - { - break; - } - } - - if ( k == 0 || k == 3 ) - { - temp -= 5; - if ( k == 3 ) - { - temp--; - } - } - else if ( k == 1 ) - { - temp++; - } - else - { - temp += 2; - if ( get_next_indice_1( st ) ) - { - temp++; - if ( get_next_indice_1( st ) ) - { - temp++; - } - } - } - } - } - } - - *pidx++ = temp; - } - - return; -} -#endif diff --git a/lib_dec/hdecnrm_fx.c b/lib_dec/hdecnrm_fx.c index 291aa87fb..aa6c041cc 100644 --- a/lib_dec/hdecnrm_fx.c +++ b/lib_dec/hdecnrm_fx.c @@ -5,7 +5,6 @@ #include "options.h" /* Compilation switches */ #include "prot_fx.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------*/ /* Function hdecnrm_fx */ /* ~~~~~~~~~~~~~~~~~~~~ */ @@ -395,4 +394,3 @@ move16(); return; } -#endif diff --git a/lib_dec/hf_synth.c b/lib_dec/hf_synth.c index b2589a9bc..8070239de 100644 --- a/lib_dec/hf_synth.c +++ b/lib_dec/hf_synth.c @@ -41,457 +41,14 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "basop32.h" -#endif /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void hp400_12k8( float signal[], const int16_t lg, float mem[] ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void filt_6k_7k( float signal[], const int16_t lg, float mem[] ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void hf_synthesis( ZERO_BWE_DEC_HANDLE hBWE_zero, const int32_t core_brate, const int16_t output_frame, const float Aq[], const float exc[], float synth[], float synth16k[] ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void hf_synthesis_amr_wb( const int32_t core_brate, const int16_t output_subfr, const float Ap[], float exc16k[], float synth_out[], float *mem_syn_hf, float *delay_syn_hf, float *mem_hp_interp, float p_r, float hf_gain_i, float til, float voice_factors, const float exc[] ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void envelope( AMRWB_IO_DEC_HANDLE hAmrwb_IO, const int32_t core_brate, const float Aq[], float Ap[], float *r, float tilt0, float tilt, float voice_factor ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void AdaptiveStartBand( int16_t *start_band, const int32_t core_brate, const float *lsf, const float voicing_fac, const int16_t clas, int16_t *voicing_flag, int16_t *start_band_old, float *OptCrit_old ); -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hf_synth_init() - * - * hf synthesis filters initialization - * - initialization of 400 Hz high pass filter - * - initialization of band pass 6kHz to 7kHz FIR filter - *-------------------------------------------------------------------*/ - -void hf_synth_init( - ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ -) -{ - hBWE_zero->seed2 = RANDOM_INITSEED; - - set_f( hBWE_zero->mem_hp400, 0, 4 ); - set_f( hBWE_zero->mem_hf, 0, ( L_FIR - 1 ) ); - - set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); - set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); - set_f( hBWE_zero->delay_syn_hf, 0, NS2SA( 16000, DELAY_CLDFB_NS ) ); - - - return; -} - -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hf_synth_amr_wb_init() - * - * hf synthesis filters initialization - * - initialization of 1600 Hz low pass filter - * - initialization of band pass 6kHz to 8kHz FIR filter for noise and line resampled signals - *-------------------------------------------------------------------*/ - -void hf_synth_amr_wb_init( - AMRWB_IO_DEC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO data handle */ -) -{ - hAmrwb_IO->prev_r = 0.0f; - hAmrwb_IO->fmerit_w_sm = 0.0f; - hAmrwb_IO->frame_count = 0; - hAmrwb_IO->ne_min = -30.0f; - hAmrwb_IO->fmerit_m_sm = 0.0f; - hAmrwb_IO->voice_fac_amr_wb_hf_float = 0.0f; - hAmrwb_IO->unvoicing = 0.0f; - hAmrwb_IO->unvoicing_sm = 1.0f; - hAmrwb_IO->unvoicing_flag = 0; - hAmrwb_IO->voicing_flag = 0; - hAmrwb_IO->start_band_old = 160; - hAmrwb_IO->OptCrit_old = 1.0f; - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hf_synth_amr_wb_reset() - * - * reset of HF synthesis filters - * - needed in switching scenarios - *-------------------------------------------------------------------*/ - -void hf_synth_amr_wb_reset( - AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ - ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ -) -{ - int16_t i; - - for ( i = 0; i < L_FRAME16k; i++ ) - { - own_random( &( hBWE_zero->seed2 ) ); - } - - set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); - set_f( hBWE_zero->delay_syn_hf, 0.0, NS2SA( 16000, DELAY_CLDFB_NS ) ); - set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); - - hAmrwb_IO->prev_r = 0.0f; - hAmrwb_IO->fmerit_w_sm = 0.0f; - hAmrwb_IO->frame_count = 0; - hAmrwb_IO->ne_min = -30.0f; - hAmrwb_IO->fmerit_m_sm = 0.0f; - hAmrwb_IO->voice_fac_amr_wb_hf_float = 0.0f; - hAmrwb_IO->unvoicing = 0.0f; - hAmrwb_IO->unvoicing_sm = 1.0f; - hAmrwb_IO->unvoicing_flag = 0; - hAmrwb_IO->voicing_flag = 0; - hAmrwb_IO->start_band_old = 160; - hAmrwb_IO->OptCrit_old = 1.0f; - - return; -} - -/*-------------------------------------------------------------------* - * hf_synth_amr_wb() - * - * HF synthesis in AMR-WB IO - *-------------------------------------------------------------------*/ - -void hf_synth_amr_wb( - AMRWB_IO_DEC_HANDLE hAmrwb_IO, /* i/o: AMR-WB IO data handle */ - ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t output_frame, /* i : output frame length */ - const float *Aq, /* i : quantized Az */ - const float *exc, /* i : excitation at 12.8 kHz */ - float *synth, /* i/o: synthesis signal at 12.8k */ - int16_t *amr_io_class, /* i : signal class (determined by FEC algorithm) */ - float *synth_out, /* i/o: output signal at output Fs */ - float fmerit, /* i : classify parameter from FEC */ - const int16_t *hf_gain, /* i : decoded HF gain */ - const float *voice_factors, /* i : voicing factors */ - const float pitch_buf[], /* i : pitch buffer */ - const float ng_ener_ST, /* i : Noise gate - short-term energy */ - const float *lsf_new /* i : ISF vector */ -) -{ - const float *p_Aq; - float *p_Ap; - int16_t i, j, i_subfr, output_subfr; - float Ap[( M16k + 1 ) * NB_SUBFR]; - float exc16k[L_FRAME16k], dct_exc[L_FRAME], dct_hb[L_FRAME16k]; - float ener, tmp, scale; - float alpha, beta, sub_gain[NB_SUBFR]; - int16_t core_type = 1; - float pitch_var_cur, voice_fac, fmerit_m, fmerit_w; - int16_t start_band; - float til[NB_SUBFR], til0[NB_SUBFR]; - float enr1, enr2; - float *pt1, *pt2; - float e_subfr1[NB_SUBFR], e_subfr2[NB_SUBFR], e_subfr3[NB_SUBFR]; - float HF_corr_gain[NB_SUBFR]; - float filt_weight[80]; - int16_t filt_weight_coeff; - float gamma; - float hb_ener, g, hb_tonal[80], tonal_ener, hb_amb[80], inv_g; - int16_t fb, fn, signum[80]; - - pt1 = (float *) synth + 1; - pt2 = (float *) synth; - for ( i = 0; i < NB_SUBFR; i++ ) - { - enr1 = 0.0f; - enr2 = 0.0f; - enr1 = dotp( pt2, pt2, L_SUBFR ); - enr2 = dotp( pt1, pt2, ( L_SUBFR - 1 ) ); - til[i] = enr2 / ( enr1 + 0.1f ); - til0[i] = til[i]; - pt1 += L_SUBFR; - pt2 += L_SUBFR; - } - - output_subfr = output_frame / NB_SUBFR; - - if ( *amr_io_class != 7 ) - { - core_type = 0; - } - - /* modify LF parameters for excitation weighting or sub-frame gains calculating */ - pitch_var_cur = (float) ( fabs( pitch_buf[0] - pitch_buf[1] ) + fabs( pitch_buf[1] - pitch_buf[2] ) + fabs( pitch_buf[2] - pitch_buf[3] ) ); - - if ( hAmrwb_IO->frame_count > FRAME_COUNT_HF_SYNTH && *amr_io_class == UNVOICED_CLAS ) - { - hAmrwb_IO->frame_count = 0; - hAmrwb_IO->ne_min = -30.0f; - } - else - { - if ( hAmrwb_IO->frame_count > 2 * FRAME_COUNT_HF_SYNTH ) - { - hAmrwb_IO->frame_count = 2 * FRAME_COUNT_HF_SYNTH; - } - else - { - ( hAmrwb_IO->frame_count )++; - } - - if ( ng_ener_ST < hAmrwb_IO->ne_min ) - { - hAmrwb_IO->ne_min = ng_ener_ST; - } - } - - voice_fac = 0.0f; - for ( i = 0; i < NB_SUBFR; i++ ) - { - voice_fac += voice_factors[i]; - } - voice_fac *= 0.25f; - - fmerit_w = fmerit > 0.35f ? 0.35f : ( fmerit < 0.15f ? 0.15f : fmerit ); - if ( core_type == 1 ) - { - fmerit_w *= 0.5f; - } - - fmerit_w *= ( 1.0f + voice_fac ); - hAmrwb_IO->fmerit_w_sm = 0.9f * ( hAmrwb_IO->fmerit_w_sm ) + 0.1f * fmerit_w; - fmerit_w = hAmrwb_IO->fmerit_w_sm; - - fmerit_m = ( 2.0f - ( fmerit < 0.5f ? 1.0f : fmerit ) ); - hAmrwb_IO->fmerit_m_sm = 0.5f * ( hAmrwb_IO->fmerit_m_sm ) + 0.5f * fmerit_m; - fmerit_m = hAmrwb_IO->fmerit_m_sm; - - for ( i = 0; i < NB_SUBFR; i++ ) - { - if ( pitch_var_cur < 10 && ( til[i] ) < 0 ) - { - til[i] = 0.2f; - } - - til[i] = ( 1.0f - ( til[i] ) ) < 0.8f ? 0.8f : ( 1.0f - ( til[i] ) ); - til[i] += ( 30.0f + hAmrwb_IO->ne_min ) * 0.007f; - til[i] *= fmerit_m; - } - - /* predict LPC coefficients and calculate sub-frame gains */ - p_Aq = Aq; - p_Ap = Ap; - for ( i = 0; i < NB_SUBFR; i++ ) - { - envelope( hAmrwb_IO, core_brate, p_Aq, p_Ap, &sub_gain[i], til0[i], til[i], voice_factors[i] ); - - p_Aq += ( M + 1 ); - p_Ap += ( M + 1 ); - } - - /* rate dependent adaptive start band */ - AdaptiveStartBand( &start_band, core_brate, lsf_new, voice_fac, *amr_io_class, &hAmrwb_IO->voicing_flag, &hAmrwb_IO->start_band_old, &hAmrwb_IO->OptCrit_old ); - - /* DCT transform of LF excitation */ - edct( exc, dct_exc, L_FRAME, EVS_MONO ); - - set_f( dct_hb, 0.0f, L_FRAME16k ); - - /* copy excitation from LF */ - for ( i = 200; i < 240; i++ ) - { - dct_hb[i] = dct_exc[i]; - } - - hb_ener = 0.01f; - for ( i = 240; i < L_FRAME16k; i++ ) - { - dct_hb[i] = dct_exc[i + start_band - 240]; - signum[i - 240] = 1; - if ( dct_hb[i] < 0 ) - { - signum[i - 240] = -1; - } - dct_hb[i] *= signum[i - 240]; - hb_ener += dct_hb[i] * dct_hb[i]; - } - - fmerit_w *= ( 1.1f - start_band * 0.00625f ); - alpha = (float) sqrt( fmerit_w ); - beta = 1.0f - fmerit_w; - gamma = max( 0.3f, min( 1.0f, ( 1.05f - alpha * 0.95f ) ) ); - tonal_ener = 0.01f; - for ( i = 0; i < 8; i++ ) - { - fb = 0; - fn = i + 8; - tmp = 0; - for ( j = 0; j < fn; j++ ) - { - tmp += dct_hb[j + 240]; - } - hb_amb[i] = tmp / fn; - hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; - if ( hb_tonal[i] > 0 ) - { - tonal_ener += hb_tonal[i] * hb_tonal[i]; - } - } - for ( ; i < L_SUBFR16k - 8; i++ ) - { - fb = i - 7; - tmp = 0; - for ( j = fb; j < fb + 15; j++ ) - { - tmp += dct_hb[j + 240]; - } - hb_amb[i] = tmp / 15; - hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; - if ( hb_tonal[i] > 0 ) - { - tonal_ener += hb_tonal[i] * hb_tonal[i]; - } - } - for ( ; i < L_SUBFR16k; i++ ) - { - fb = i - 7; - fn = L_SUBFR16k - i + 7; - tmp = 0; - for ( j = fb; j < L_SUBFR16k; j++ ) - { - tmp += dct_hb[j + 240]; - } - hb_amb[i] = tmp / fn; - hb_tonal[i] = dct_hb[i + 240] - hb_amb[i]; - if ( hb_tonal[i] > 0 ) - { - tonal_ener += hb_tonal[i] * hb_tonal[i]; - } - } - g = beta * ( hb_ener - tonal_ener ) / ( hb_ener - beta * tonal_ener ); - if ( g < 0.01f && g > -0.01f ) - { - inv_g = sign( g ) * 100; - } - else - { - inv_g = 1 / g; - } - ener = 0.01f; - for ( i = 0; i < L_SUBFR16k; i++ ) - { - if ( hb_tonal[i] > 0 ) - { - hb_tonal[i] *= g; - } - hb_amb[i] *= inv_g; - dct_hb[i + 240] = hb_tonal[i] + hb_amb[i]; - dct_hb[i + 240] *= signum[i]; - ener += dct_hb[i + 240] * dct_hb[i + 240]; - } - scale = (float) ( gamma * sqrt( hb_ener / ener ) ); - - if ( core_brate == ACELP_6k60 ) - { - filt_weight_coeff = 60; - } - else if ( core_brate == ACELP_8k85 ) - { - filt_weight_coeff = 40; - } - else - { - filt_weight_coeff = 20; - } - - for ( i = 0; i < filt_weight_coeff; i++ ) - { - filt_weight[i] = (float) ( -0.999 / ( filt_weight_coeff - 1 ) ) * i + 1.0f; - } - - for ( i = 240; i < L_FRAME16k; i++ ) - { - dct_hb[i] *= scale; - - if ( core_brate < ACELP_23k85 && i > 255 ) - { - dct_hb[i] *= 0.59525f; - } - - if ( i >= L_FRAME16k - filt_weight_coeff ) - { - dct_hb[i] *= filt_weight[i - L_FRAME16k + filt_weight_coeff]; - } - } - - for ( i = 200; i < 256; i++ ) - { - dct_hb[i] *= filt_hp[i - 200]; - - if ( core_brate < ACELP_23k85 ) - { - dct_hb[i] *= deem_tab[i - 200]; - } - } - - if ( core_brate == ACELP_23k85 ) - { - for ( i = 0; i < NB_SUBFR; i++ ) - { - HF_corr_gain[i] = 2 * HP_gain[hf_gain[i]]; - } - } - - /* inverse DCT transform of HF excitation */ - set_f( exc16k, 0.0f, L_FRAME16k ); - edct( dct_hb, exc16k, L_FRAME16k, EVS_MONO ); - - /* energy weighting in consecutive subframes */ - ener = sum2_f( exc, L_FRAME ) + 0.01f; - tmp = sum2_f( exc16k, L_FRAME16k ) + 0.01f; - - for ( i = 0; i < NB_SUBFR; i++ ) - { - e_subfr1[i] = sum2_f( &exc[i * L_SUBFR], L_SUBFR ) + 0.01f; - e_subfr2[i] = sum2_f( &exc16k[i * L_SUBFR16k], L_SUBFR16k ) + 0.01f; - e_subfr3[i] = ( e_subfr1[i] / ener ) * tmp; - - for ( j = i * L_SUBFR16k; j < ( i + 1 ) * L_SUBFR16k; j++ ) - { - exc16k[j] *= (float) sqrt( e_subfr3[i] / e_subfr2[i] ); - } - } - - p_Ap = Ap; - i = 0; - for ( i_subfr = 0; i_subfr < L_FRAME16k; i_subfr += L_SUBFR16k ) - { - /* synthesis of the HF signal */ - hf_synthesis_amr_wb( core_brate, output_subfr, p_Ap, &exc16k[i_subfr], &synth_out[i * output_subfr], hBWE_zero->mem_syn_hf, hBWE_zero->delay_syn_hf, hBWE_zero->mem_hp_interp, sub_gain[i], HF_corr_gain[i], til0[i], voice_factors[i], &exc[i * L_SUBFR] ); - - p_Ap += ( M + 1 ); - i++; - } - - return; -} -#endif /*-----------------------------------------------------------------------------------* * hf_synthesis_amr_wb() * @@ -500,93 +57,6 @@ void hf_synth_amr_wb( * - Set energy of high band *-----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void hf_synthesis_amr_wb( - const int32_t core_brate, /* i : core bitrate */ - const int16_t output_subfr, /* i : output sub-frame length */ - const float Ap[], /* i : quantized Aq */ - float exc16k[], /* i : excitation at 12.8 kHz */ - float synth_out[], /* i/o: synthesis signal at output Fs */ - float *mem_syn_hf, /* i/o: HF synthesis memory */ - float *delay_syn_hf, /* i/o: HF synthesis memory */ - float *mem_hp_interp, /* i/o: interpol. memory */ - float p_r, /* i : sub-frame gain */ - float HF_corr_gain, /* i : HF gain index */ - float til0, - float voice_factors, - const float exc[] ) -{ - int16_t i; - float HF_syn[L_SUBFR16k], upsampled_HF_syn[L_FRAME48k / NB_SUBFR]; - float ener, tmp, scale, exc2385[L_SUBFR16k]; - - if ( core_brate == ACELP_23k85 ) - { - ener = ( sum2_f( exc, L_SUBFR ) + 0.01f ) / 5; - tmp = sum2_f( exc16k, L_SUBFR16k ) + 0.01f; - scale = (float) sqrt( ener / tmp ); - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - exc2385[i] = exc16k[i] * scale * HF_corr_gain; - } - } - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - exc16k[i] *= p_r; - } - - if ( core_brate == ACELP_23k85 ) - { - ener = ( sum2_f( exc16k, L_SUBFR16k ) + 0.01f ) * 0.3f; - tmp = sum2_f( exc2385, L_SUBFR16k ) + 0.01f; - scale = (float) sqrt( ener / tmp ); - - if ( scale > 1.0f || til0 < 0.0f ) - { - mvr2r( exc2385, exc16k, L_SUBFR16k ); - } - else - { - for ( i = 0; i < L_SUBFR16k; i++ ) - { - exc16k[i] = exc2385[i] * max( min( 1.0f, ( 1 - til0 ) * ( 1.6f - voice_factors ) ), scale ); - } - } - } - - syn_filt( Ap, M, exc16k, HF_syn, L_SUBFR16k, mem_syn_hf, 1 ); - - /*-----------------------------------------------------------------* - * Resample to output sampling rate - * Synchronize LB and HB components (delay componsation) - * Add synthesised high band to speech synthesis - *-----------------------------------------------------------------*/ - - /* compensate CLDFB resampling delay */ - delay_signal_float( HF_syn, L_SUBFR16k, delay_syn_hf, NS2SA( 16000, DELAY_CLDFB_NS ) ); - - /* interpolate the HF synthesis */ - if ( output_subfr == L_FRAME48k / NB_SUBFR ) /* 48kHz sampled output */ - { - interpolate_3_over_1_allpass( HF_syn, L_SUBFR16k, upsampled_HF_syn, mem_hp_interp ); - } - else if ( output_subfr == L_FRAME32k / NB_SUBFR ) /* 32kHz sampled output */ - { - Interpolate_allpass_steep( HF_syn, mem_hp_interp, L_SUBFR16k, upsampled_HF_syn ); - } - else /* 16kHz sampled output */ - { - mvr2r( HF_syn, upsampled_HF_syn, L_SUBFR16k ); - } - - v_add( synth_out, upsampled_HF_syn, synth_out, output_subfr ); - - return; -} -#endif - /*-----------------------------------------------------------------------------------* * EnhanceClass() @@ -594,48 +64,6 @@ static void hf_synthesis_amr_wb( * *-----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t EnhanceClass( - const float qq, - const float pp, - const float tilt0, /* i : spectrum tilt */ - const float tilt, /* i : spectrum tilt */ - const float voice_factor, /* i : voice factor */ - float *voice_fac, /* i/o: smoothed voiced parameter */ - float *unvoicing, /* i/o: unvoiced parameter */ - float *unvoicing_sm, /* i/o: smoothed unvoiced parameter */ - int16_t *unvoicing_flag /* i/o: unvoiced flag */ -) -{ - float unvoicing_tmp; - - /* Decide (*unvoicing_flag) to allow BWE enhancement when qq>pp */ - *voice_fac = 0.75f * ( *voice_fac ) + 0.25f * voice_factor; - unvoicing_tmp = ( ( 1.0f - tilt0 ) / 2.0f ) * ( 1 - *voice_fac ) * min( tilt / 1.5f, 1.0f ); - *unvoicing = 0.5f * ( *unvoicing ) + 0.5f * unvoicing_tmp; - - if ( *unvoicing_sm > *unvoicing ) - { - *unvoicing_sm = 0.9f * ( *unvoicing_sm ) + 0.1f * ( *unvoicing ); - } - else - { - *unvoicing_sm = 0.99f * ( *unvoicing_sm ) + 0.01f * ( *unvoicing ); - } - - if ( *unvoicing - *unvoicing_sm > 0.1f ) - { - *unvoicing_flag = 1; - } - - if ( *unvoicing - *unvoicing_sm < 0.05f ) - { - *unvoicing_flag = 0; - } - - return ( *unvoicing_flag && qq > pp ); -} -#endif /*-----------------------------------------------------------------------------------* * envelope() @@ -643,143 +71,6 @@ static int16_t EnhanceClass( * *-----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void envelope( - AMRWB_IO_DEC_HANDLE hAmrwb_IO, - const int32_t core_brate, /* i : core bitrate */ - const float Aq[], /* i : de-quant. LPC coefficents */ - float Ap[], /* o : extended LPC coefficents */ - float *sub_gain, /* o : sub-frame gain */ - float tilt0, /* i : spectrum tilt */ - float tilt, /* i : spectrum tilt */ - float voice_factor /* i : voice factor */ -) -{ - float px, py, rx, ry, pp, rr; - int16_t i, Unvoicing_flag; - float alpha; - float est_level1, est_level2, qx, qy, qq, env_level[3]; - float As[3], k1, k2; - - /* LPC envelope weighting */ - if ( core_brate == ACELP_6k60 ) - { - weight_a( Aq, Ap, 0.9f, M ); - } - else - { - weight_a( Aq, Ap, 0.6f, M ); - } - - /* LPC envelope level estimate */ - pp = 0.0f; - px = 0.0f; - py = 0.0f; - rr = 0.0f; - rx = 0.0f; - ry = 0.0f; - for ( i = 0; i < 17; i++ ) - { - px += Ap[i] * exp_tab_p[i]; - py += Ap[i] * exp_tab_p[33 - i]; - rx += Aq[i] * exp_tab_q[i]; - ry += Aq[i] * exp_tab_q[33 - i]; - } - - pp = 1.0f / ( (float) sqrt( px * px + py * py ) ); - rr = 1.0f / ( (float) sqrt( rx * rx + ry * ry ) ); - - for ( i = 0; i < 3; i++ ) - { - As[i] = Aq[i]; - } - - if ( As[2] == -1 ) - { - k2 = -0.6f; - k1 = 0.99f; - if ( As[1] < 0 ) - { - k1 = -k1; - } - } - else - { - k1 = As[1] / ( 1 + As[2] ); - k2 = As[2]; - if ( k2 > 0.6f ) - { - k2 = 0.6f; - } - if ( k2 < -0.6f ) - { - k2 = -0.6f; - } - if ( k1 > 0.99f ) - { - k1 = 0.99f; - } - if ( k1 < -0.99f ) - { - k1 = -0.99f; - } - } - - As[1] = ( 1 + k2 ) * k1; - As[2] = k2; - - qq = 0.0f; - qx = 0.0f; - qy = 0.0f; - for ( i = 0; i < 3; i++ ) - { - qx += As[i] * exp_tab_q[i]; - qy += As[i] * exp_tab_q[33 - i]; - } - - qq = 1.0f / ( (float) sqrt( qx * qx + qy * qy ) ); - - Unvoicing_flag = EnhanceClass( rr, pp, tilt0, tilt, voice_factor, &hAmrwb_IO->voice_fac_amr_wb_hf_float, &hAmrwb_IO->unvoicing, &hAmrwb_IO->unvoicing_sm, &hAmrwb_IO->unvoicing_flag ); - - alpha = 0.0f; - if ( Unvoicing_flag ) - { - if ( rr > ( hAmrwb_IO->prev_r ) ) - { - rr = 0.5f * rr + 0.5f * ( hAmrwb_IO->prev_r ); - } - - hAmrwb_IO->prev_r = rr; - rr *= min( 1.0f, tilt * ( 1.6f - voice_factor ) ); - qq *= max( 1.0f, tilt * ( 1.6f - voice_factor ) ); - rr = min( rr, qq ); - rr = max( rr, pp ); - } - else - { - if ( rr < 1.0f && ( hAmrwb_IO->prev_r ) < 1.0f ) - { - alpha = ( 1 - rr * rr ); - } - - rr = alpha * ( hAmrwb_IO->prev_r ) + ( 1 - alpha ) * rr; - hAmrwb_IO->prev_r = rr; - - est_level1 = qq * min( 1.0f, tilt * ( 1.6f - voice_factor ) ); - env_level[0] = pp; - env_level[1] = qq; - env_level[2] = rr; - v_sort_float( env_level, 0, 2 ); - rr = env_level[0]; - est_level2 = rr * ( 1.0f + (float) fabs( tilt - 1 ) * ( 1.6f - voice_factor ) ); - rr = min( est_level1, est_level2 ); - } - - *sub_gain = min( 5.0f, rr / pp ); - - return; -} -#endif /*---------------------------------------------------------------------* * AdaptiveStartBand() @@ -787,310 +78,6 @@ static void envelope( * adaptively select the start band of bandwidth extension *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void AdaptiveStartBand( - int16_t *start_band, /* o : start point of copied band */ - const int32_t core_brate, /* i : core bitrate */ - const float *lsf, /* i : lsf frequency */ - const float voicing_fac, /* i : voicing factors */ - const int16_t clas, /* i : signal class (determined by FEC algorithm)*/ - int16_t *voicing_flag, - int16_t *start_band_old, - float *OptCrit_old ) -{ - float lsf_diff[M], Crit, OptCrit = 1.0f, W; - int16_t i, pos, M2, voicing_flag_old; - int16_t tmp1, tmp2; - - /*voicing switching flag : to avoid switching start band frequently in VOICED or AUDIO area*/ - voicing_flag_old = *voicing_flag; - if ( voicing_fac > 0.4f || ( voicing_fac > 0.3f && clas >= VOICED_CLAS ) || clas == AUDIO_CLAS ) - { - *voicing_flag = 1; - } - - if ( voicing_fac < 0.2f && clas < VOICED_CLAS ) - { - *voicing_flag = 0; - } - - /* rate adaptive start band */ - *start_band = 160; - if ( core_brate < ACELP_23k05 ) - { - for ( i = 1; i < ( M - 1 ); i++ ) - { - lsf_diff[i] = lsf[i] - lsf[i - 1]; - } - - W = SQR( 1.0f * core_brate / ACELP_19k85 ) / 6000.0f; - - if ( clas == AUDIO_CLAS ) - { - W *= 0.75f; - } - - pos = 2; - M2 = M - 2; - if ( *voicing_flag == 1 ) - { - if ( core_brate <= ACELP_8k85 ) - { - M2 = M - 8; - } - else if ( core_brate <= ACELP_12k65 ) - { - M2 = M - 6; - } - else if ( core_brate <= ACELP_15k85 ) - { - M2 = M - 4; - } - } - - for ( i = 2; i < M2; i++ ) - { - Crit = lsf_diff[i] * max( 1.0f - lsf[i] * W, 0.001f ); - if ( Crit <= OptCrit || i == 2 ) - { - OptCrit = Crit; - pos = i; - } - } - /* *start_band = (int16_t)( (0.5f*(lsf[pos]+lsf[pos-1])*40/1000.0f - 40) + 0.5f ); */ - /* emulate BASOP precision: */ - tmp1 = (int16_t) ( ( 0.02f * lsf[pos] ) + 0.5f ); - tmp2 = (int16_t) ( ( 0.02f * lsf[pos - 1] ) + 0.5f ); - *start_band = tmp1 + tmp2 - 40; - *start_band = min( max( *start_band, 40 ), 160 ); - - if ( voicing_flag_old != *voicing_flag || ( *voicing_flag == 0 && OptCrit < *OptCrit_old ) || - ( OptCrit < 0.7f * ( *OptCrit_old ) && *OptCrit_old > 64 ) ) - { - *OptCrit_old = OptCrit; - if ( abs( ( *start_band ) - ( *start_band_old ) ) < 20 && *voicing_flag == 1 && voicing_flag_old == 1 ) - { - *start_band = *start_band_old; - } - } - else - { - if ( OptCrit < ( *OptCrit_old ) && ( *voicing_flag ) == 1 ) - { - *OptCrit_old = OptCrit; - } - - *start_band = *start_band_old; - } - - if ( clas == AUDIO_CLAS ) - { - *start_band = min( *start_band, 120 ); - } - - if ( *start_band % 2 != 0 ) - { - *start_band -= 1; - } - } - - *start_band_old = *start_band; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * hf_synth_reset() - * - * Reset of HF synthesis filters (needed in switching scenarios) - *-------------------------------------------------------------------*/ - -void hf_synth_reset( - ZERO_BWE_DEC_HANDLE hBWE_zero /* o : zero BWE decoder handle */ -) -{ - int16_t i; - - for ( i = 0; i < L_FRAME16k; i++ ) - { - own_random( &( hBWE_zero->seed2 ) ); - } - - set_f( hBWE_zero->mem_hf, 0.0f, ( L_FIR - 1 ) ); - set_f( hBWE_zero->mem_syn_hf, 0.0f, M ); - set_f( hBWE_zero->mem_hp400, 0.0f, 4 ); - set_f( hBWE_zero->delay_syn_hf, 0.0f, NS2SA( 16000, DELAY_CLDFB_NS ) ); - set_f( hBWE_zero->mem_hp_interp, 0, INTERP_3_1_MEM_LEN ); - - return; -} - - -/*---------------------------------------------------------------------* - * hf_synth() - * - * High frequency regeneration - *---------------------------------------------------------------------*/ - -void hf_synth( - ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t output_frame, /* i : output frame length */ - const float *Aq, /* i : quantized Az */ - const float *exc, /* i : excitation at 12.8 kHz */ - float *synth, /* i/o: 12.8kHz synthesis signal */ - float *synth16k /* i/o: 16kHz synthesis signal */ -) -{ - const float *p_Aq; - int16_t i_subfr, output_subfr; - - output_subfr = output_frame / NB_SUBFR; - - p_Aq = Aq; - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - hf_synthesis( hBWE_zero, core_brate, output_subfr, p_Aq, &exc[i_subfr], &synth[i_subfr], &synth16k[i_subfr * output_subfr / L_SUBFR] ); - p_Aq += ( M + 1 ); - } - - return; -} - - -/*-----------------------------------------------------------------------------------* - * hf_synthesis() - * - * HF noise synthesis - * - Generate HF noise between 6 and 7 kHz. - * - Set energy of noise according to synthesis tilt. - * tilt > 0.8 ==> - 14 dB (voiced) - * tilt 0.5 ==> - 6 dB (voiced or noise) - * tilt < 0.0 ==> 0 dB (noise) - *-----------------------------------------------------------------------------------*/ - -static void hf_synthesis( - ZERO_BWE_DEC_HANDLE hBWE_zero, /* o : zero BWE decoder handle */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t output_subfr, /* i : output sub-frame length */ - const float Aq[], /* i : quantized Aq */ - const float exc[], /* i : excitation at 12.8 kHz */ - float synth[], /* i/o: 12.8kHz synthesis signal */ - float synth16k[] /* i/o: 16kHz synthesis signal */ -) -{ - int16_t i; - float tmp, ener, fac, scale; - float HF_exc[L_SUBFR16k], HF_syn[L_SUBFR16k], upsampled_HF_syn[L_FRAME48k / NB_SUBFR]; - float Ap[M16k + 1]; - - /*-----------------------------------------------------------------* - * generate white noise vector - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - HF_exc[i] = (float) own_random( &( hBWE_zero->seed2 ) ); - } - - /*-----------------------------------------------------------------* - * calculate energy scaling factor so that white noise would have the - * same energy as exc12k8 - * note: the scaling factor should be multiplied by L_SUBFR16k / L_SUBFR for - * correctness but it will have only negligible impact so it has been left like this - *-----------------------------------------------------------------*/ - - ener = sum2_f( exc, L_SUBFR ) + 0.01f; - tmp = sum2_f( HF_exc, L_SUBFR16k ) + 0.01f; - scale = (float) ( sqrt( ener / tmp ) ); - - /*-----------------------------------------------------------------* - * calculate energy scaling factor to respect tilt of synth12k8 - * (tilt: 1=voiced, -1=unvoiced) - *-----------------------------------------------------------------*/ - - hp400_12k8( synth, L_SUBFR, hBWE_zero->mem_hp400 ); - - ener = 0.001f; - tmp = 0.001f; - - for ( i = 1; i < L_SUBFR; i++ ) - { - ener += synth[i] * synth[i]; - tmp += synth[i] * synth[i - 1]; - } - - fac = tmp / ener; - fac = (float) ( 1.0f - fac ); - - if ( core_brate == SID_2k40 || core_brate == FRAME_NO_DATA ) - { - /* emphasize HF noise in CNG */ - fac *= 2.0f; - } - - if ( fac < 0.1f ) - { - fac = 0.1f; - } - - if ( fac > 1.0f ) - { - fac = 1.0f; - } - - scale *= fac; - /*-----------------------------------------------------------------* - * modify HF excitation according to both calculated scaling factors - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - HF_exc[i] *= scale; - } - - /*-----------------------------------------------------------------* - * high pass filtering (0.94ms of delay) - *-----------------------------------------------------------------*/ - - filt_6k_7k( HF_exc, L_SUBFR16k, hBWE_zero->mem_hf ); - - /*-----------------------------------------------------------------* - * synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz - *-----------------------------------------------------------------*/ - - weight_a( Aq, Ap, 0.6f, M ); - syn_filt( Ap, M, HF_exc, HF_syn, L_SUBFR16k, hBWE_zero->mem_syn_hf, 1 ); - - /*-----------------------------------------------------------------* - * Add filtered HF noise to speech synthesis - *-----------------------------------------------------------------*/ - - /* delay by 5 samples @16kHz to compensate CLDFB resampling delay (20samples) and HP filtering delay (roughly 15 samples) */ - delay_signal_float( HF_syn, L_SUBFR16k, hBWE_zero->delay_syn_hf, NS2SA( 16000, DELAY_CLDFB_NS ) - 15 ); - - /* interpolate the HF synthesis */ - if ( output_subfr == L_FRAME48k / NB_SUBFR ) /* 48kHz sampled output */ - { - interpolate_3_over_1_allpass( HF_syn, L_SUBFR16k, upsampled_HF_syn, hBWE_zero->mem_hp_interp ); - } - else if ( output_subfr == L_FRAME32k / NB_SUBFR ) /* 32kHz sampled output */ - { - Interpolate_allpass_steep( HF_syn, hBWE_zero->mem_hp_interp, L_SUBFR16k, upsampled_HF_syn ); - } - else /* 16kHz sampled output */ - { - mvr2r( HF_syn, upsampled_HF_syn, L_SUBFR16k ); - } - - v_add( synth16k, upsampled_HF_syn, synth16k, output_subfr ); - - return; -} - -#endif /*-----------------------------------------------------------------------* * hp400_12k8() @@ -1113,43 +100,6 @@ static void hf_synthesis( * float a[3] = {1.000000000, 1.787109375, -0.864257812}; *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void hp400_12k8( - float signal[], /* i/o: signal */ - const int16_t lg, /* i : length of signal */ - float mem[] /* i/o: filter memory [4] */ -) -{ - int16_t i; - float x0, x1, x2; - float yy0, yy1, y2; - - - yy1 = mem[0]; - y2 = mem[1]; - x0 = mem[2]; - x1 = mem[3]; - - for ( i = 0; i < lg; i++ ) - { - x2 = x1; - x1 = x0; - x0 = signal[i]; - yy0 = yy1 * a_hp400[1] + y2 * a_hp400[2] + x0 * b_hp400[0] + x1 * b_hp400[1] + x2 * b_hp400[2]; - - signal[i] = yy0; - y2 = yy1; - yy1 = yy0; - } - - mem[0] = yy1; - mem[1] = y2; - mem[2] = x0; - mem[3] = x1; - - return; -} -#endif /*-------------------------------------------------------------------* * filt_6k_7k() @@ -1160,44 +110,3 @@ static void hp400_12k8( * dB loss : -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB * (gain = 4.0) *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void filt_6k_7k( - float signal[], /* i/o: signal */ - const int16_t lg, /* i : signal length */ - float mem[] /* i/o: filter memory */ -) -{ - int16_t i, j; - float s, x[L_FRAME48k / NB_SUBFR + ( L_FIR - 1 )]; - - for ( i = 0; i < ( L_FIR - 1 ); i++ ) - { - x[i] = mem[i]; - } - - for ( i = 0; i < lg; i++ ) - { - x[i + ( L_FIR - 1 )] = signal[i]; - } - - for ( i = 0; i < lg; i++ ) - { - s = 0.0; - for ( j = 0; j < L_FIR; j++ ) - { - s += x[i + j] * fir_6k_7k[j]; - } - - /* gain of coef = 4.0 */ - signal[i] = (float) ( s * 0.25 ); - } - - for ( i = 0; i < L_FIR - 1; i++ ) - { - mem[i] = x[i + lg]; - } - - return; -} -#endif diff --git a/lib_dec/hq_classifier_dec.c b/lib_dec/hq_classifier_dec.c index 06678866c..0fe8682da 100644 --- a/lib_dec/hq_classifier_dec.c +++ b/lib_dec/hq_classifier_dec.c @@ -40,66 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_classifier_dec() - * - * HQ mode selector (decision_matrix) - *--------------------------------------------------------------------------*/ - -/*! r: Consumed bits */ -int16_t hq_classifier_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t length, /* i : Frame length */ - int16_t *is_transient, /* o : Transient flag */ - int16_t *hqswb_clas /* o : HQ class */ -) -{ - int16_t bits; - int32_t max_brate; - - max_brate = HQ_32k; - if ( st->element_mode > EVS_MONO ) - { - max_brate = HQ_48k; - } - - if ( ( ( length == L_SPEC32k ) || ( length == L_SPEC48k ) ) && core_brate <= max_brate ) - { - *hqswb_clas = get_next_indice( st, 2 ); - bits = 2; - } - else if ( length == L_SPEC16k_EXT || length == L_SPEC48k_EXT ) - { - *hqswb_clas = HQ_NORMAL; - bits = 0; - } - else - { - *hqswb_clas = get_next_indice( st, 1 ); - bits = 1; - } - - *is_transient = 0; - if ( *hqswb_clas == HQ_TRANSIENT ) - { - *is_transient = 1; - } - - if ( st->core_brate <= HQ_32k && *hqswb_clas == HQ_NORMAL ) - { - if ( length == L_SPEC32k ) - { - *hqswb_clas = HQ_GEN_SWB; - } - else if ( length == L_SPEC48k ) - { - *hqswb_clas = HQ_GEN_FB; - } - } - - return bits; -} -#endif diff --git a/lib_dec/hq_classifier_dec_fx.c b/lib_dec/hq_classifier_dec_fx.c index e67d5f663..5ff5dec58 100644 --- a/lib_dec/hq_classifier_dec_fx.c +++ b/lib_dec/hq_classifier_dec_fx.c @@ -4,9 +4,7 @@ #include #include "options.h" /* Compilation switches */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* * hq_classifier_dec() @@ -14,7 +12,6 @@ * HQ mode selector (decision_matrix) *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_hq_classifier_dec_fx( /* o : Consumed bits Q0 */ Decoder_State *st_fx, /* i/o: decoder state structure */ const Word32 core_brate, /* i : Core bit rate Q0 */ @@ -83,9 +80,7 @@ Word16 ivas_hq_classifier_dec_fx( /* o : Consumed bits return bits; } -#endif -#ifdef IVAS_FLOAT_FIXED Word16 hq_classifier_dec_fx( /* o : Consumed bits Q0 */ Decoder_State *st_fx, /* i/o: decoder state structure */ const Word32 core_brate, /* i : Core bit rate Q0 */ @@ -165,4 +160,3 @@ Word16 hq_classifier_dec_fx( /* o : Consumed bits return bits; } -#endif diff --git a/lib_dec/hq_conf_fec.c b/lib_dec/hq_conf_fec.c index 0a21d82a6..fd4f3cb7c 100644 --- a/lib_dec/hq_conf_fec.c +++ b/lib_dec/hq_conf_fec.c @@ -40,30 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_configure_bfi() - * - * Initialization of HQ bands and subframes - *--------------------------------------------------------------------------*/ - -void hq_configure_bfi( - int16_t *nb_sfm, /* o : Number of sub bands */ - int16_t *num_Sb, /* o : Number of FEC sub bands ? */ - int16_t *num_bands_p, /* o : FEC sub bands */ - const int16_t **sfmsize, /* o : Subband bandwidths */ - const int16_t **sfm_start, /* o : Subband start coefficients */ - const int16_t **sfm_end /* o : Subband end coefficients */ -) -{ - *num_Sb = MAX_SB_NB; - *nb_sfm = SFM_N_NB; - mvs2s( Num_bands_NB, num_bands_p, *num_Sb ); - *sfmsize = band_len_wb; - *sfm_start = band_start_wb; - *sfm_end = band_end_wb; - - return; -} -#endif diff --git a/lib_dec/hq_conf_fec_fx.c b/lib_dec/hq_conf_fec_fx.c index adcd83076..06bf82897 100644 --- a/lib_dec/hq_conf_fec_fx.c +++ b/lib_dec/hq_conf_fec_fx.c @@ -9,7 +9,6 @@ #include "cnst.h" -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * hq_configure_bfi_fx() * @@ -37,4 +36,3 @@ void hq_configure_bfi_fx( move16(); return; } -#endif diff --git a/lib_dec/hq_core_dec.c b/lib_dec/hq_core_dec.c index 503b1396f..5a1f34a11 100644 --- a/lib_dec/hq_core_dec.c +++ b/lib_dec/hq_core_dec.c @@ -48,581 +48,9 @@ * * HQ core decoder *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hq_core_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float synth[], /* o : output synthesis */ - const int16_t output_frame, /* i : output frame length */ - const int16_t hq_core_type, /* i : HQ core type */ - const int16_t core_switching_flag, /* i : ACELP->HQ switching frame flag */ - float *output /* o : LB synthesis in case of ACELP-HQ switch */ -) -{ - int16_t num_bits, is_transient, hqswb_clas, inner_frame; - int16_t i, j, flag_uv, num_Sb, nb_sfm; - int16_t ynrm[NB_SFM], num_bands_p[MAX_SB_NB]; - float ener_match, mean_en_high; - float t_audio_q[L_FRAME48k_EXT], wtda_audio[2 * L_FRAME48k]; - float wtda_audio_LB[2 * L_FRAME16k]; - int16_t delay_comp; - float normq[NB_SFM], SWB_fenv[SWB_FENV + DIM_FB]; - const int16_t *sfmsize, *sfm_start, *sfm_end; - float gapsynth[L_FRAME48k]; - - HQ_DEC_HANDLE hHQ_core; - HQ_NBFEC_HANDLE hHQ_nbfec; - - TCX_DEC_HANDLE hTcxDec; - TCX_CONFIG_HANDLE tcx_cfg; - int16_t index, left_rect, tcx_offsetFB, overlapFB, L_frameTCX; - int16_t tcx_offset, overlap, L_frame, L_spec, fscaleFB; - int16_t L_frameTCX_glob, L_frame_glob; - float acelp_zir[L_FRAME_MAX / 2]; - int16_t encoderLookahead, encoderLookaheadFB; - int16_t hq_recovery_flag; - int16_t mdctWindowLength; - int16_t mdctWindowLengthFB; - - push_wmops( "hq_core_dec" ); - /*-------------------------------------------------------------------------- - * Initializations - *--------------------------------------------------------------------------*/ - - hHQ_core = st->hHQ_core; - hHQ_nbfec = st->hHQ_nbfec; - - set_f( t_audio_q, 0.0f, L_FRAME48k_EXT ); - set_f( gapsynth, 0.0f, L_FRAME48k ); - set_s( num_bands_p, 0, MAX_SB_NB ); - set_s( ynrm, 39, NB_SFM ); /* Initialize to the smallest value */ - mean_en_high = 0.0f; - sfm_start = sfm_end = NULL; - num_Sb = nb_sfm = 0; - - hTcxDec = st->hTcxDec; - - if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) - { - st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - } - else - { - st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - } - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - - hq_recovery_flag = ( st->last_core == ACELP_CORE ) && st->prev_bfi && ( st->element_mode > EVS_MONO ); /* ACELP -> HQtrans -> HQ; with HQtrans lost */ - - /*-------------------------------------------------------------------------- - * Find the number of bits for transform-domain coding - *--------------------------------------------------------------------------*/ - - /* set the total bit-budget */ - num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - - /* Set default spectrum length */ - L_spec = l_spec_tbl[st->bwidth]; - - if ( !st->bfi ) - { - if ( core_switching_flag ) - { - if ( st->element_mode != EVS_MONO ) - { - L_spec = l_spec_ext_tbl[st->bwidth]; - } - else - { - /* Preprocessing in the first HQ frame after ACELP frame */ - core_switching_hq_prepare_dec( st, &num_bits, output_frame ); - - /* During ACELP->HQ core switching, limit the HQ core bitrate to 48kbps */ - if ( num_bits > HQ_48k / FRAMES_PER_SEC ) - { - num_bits = (int16_t) ( HQ_48k / FRAMES_PER_SEC ); - } - } - } - - if ( hq_recovery_flag ) - { - acelp_plc_mdct_transition( st ); - } - - /* subtract signaling bits */ - num_bits -= st->next_bit_pos; - - /* set FEC parameters */ - flag_uv = 1 - hHQ_core->HqVoicing; - - /* subtract the number of bits for pitch & gain at higher bitrates */ - if ( !( core_switching_flag ) && st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) - { - hHQ_core->HqVoicing = get_next_indice( st, 1 ); - num_bits -= 1; - } - else - { - hHQ_core->HqVoicing = 0; - if ( st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) - { - hHQ_core->HqVoicing = 1; - } - } - } - else - { - flag_uv = 0; - } - - /* set inner frame (== coded bandwidth) length */ - inner_frame = inner_frame_tbl[st->bwidth]; - - if ( st->bfi == 0 ) - { - if ( output_frame >= L_FRAME16k ) - { - hHQ_core->ph_ecu_HqVoicing = hHQ_core->HqVoicing; - } - else - { - hHQ_core->ph_ecu_HqVoicing = 0; - } - } - - if ( output_frame == L_FRAME8k ) - { - hq_configure_bfi( &nb_sfm, &num_Sb, num_bands_p, &sfmsize, &sfm_start, &sfm_end ); - } - - /*-------------------------------------------------------------------------- - * transform-domain decoding - *--------------------------------------------------------------------------*/ - - if ( st->bfi ) - { - is_transient = hHQ_core->old_is_transient[0]; - if ( output_frame >= L_FRAME16k ) - { - hq_ecu( st->hTcxDec->prev_good_synth, t_audio_q, &hHQ_core->time_offs, hHQ_core->X_sav, &hHQ_core->num_p, hHQ_core->plocs, hHQ_core->plocsi, hHQ_core->env_stab, &hHQ_core->last_fec, hHQ_core->ph_ecu_HqVoicing, &hHQ_core->ph_ecu_active, gapsynth, st->prev_bfi, hHQ_core->old_is_transient, hHQ_core->mag_chg_1st, hHQ_core->Xavg, &hHQ_core->beta_mute, output_frame, st ); - } - else - { - HQ_FEC_processing( st, t_audio_q, is_transient, hHQ_nbfec->ynrm_values, hHQ_nbfec->r_p_values, num_Sb, nb_sfm, num_bands_p, output_frame, sfm_start, sfm_end ); - } - - hHQ_core->old_is_transient[2] = hHQ_core->old_is_transient[1]; - hHQ_core->old_is_transient[1] = hHQ_core->old_is_transient[0]; - - if ( output_frame >= L_FRAME16k ) - { - /* keep st->previoussynth updated as in FEC_HQ_pitch_analysis but no LP analysis */ - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - mvr2r( st->previoussynth + delay_comp, st->previoussynth, output_frame - delay_comp ); - mvr2r( st->delay_buf_out, st->previoussynth + output_frame - delay_comp, delay_comp ); - - flag_uv = 1; /* disable costly pitch out synthesis in bfi frame */ - hHQ_core->HqVoicing = 1 - flag_uv; /* safety setting for HQ->ACELP switch logic */ - set_f( hHQ_core->fer_samples, 0.0f, L_FRAME48k ); /* safety, create a known signal state for HQ->ACELP switch logic */ - } - } - else - { - if ( hq_core_type == LOW_RATE_HQ_CORE ) - { - if ( st->prev_bfi == 1 ) - { - set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( hHQ_core->last_env, 0, BANDS_MAX ); - hHQ_core->last_max_pos_pulse = 0; - } - - /* HQ low rate decoder */ - hq_lr_dec( st, t_audio_q, inner_frame, num_bits, &is_transient ); - - hqswb_clas = is_transient; - } - else - { - /* HQ high rate decoder */ - hq_hr_dec( st, t_audio_q, L_spec, num_bits, ynrm, &is_transient, &hqswb_clas, SWB_fenv, core_switching_flag ); - } - - if ( st->element_mode == EVS_MONO || ( !core_switching_flag && !hq_recovery_flag ) ) - { - /* scaling (coefficients are in nominal level) */ - if ( output_frame != NORM_MDCT_FACTOR ) - { - ener_match = (float) sqrt( (float) output_frame / (float) NORM_MDCT_FACTOR ); - - for ( i = 0; i < inner_frame; i++ ) - { - t_audio_q[i] *= ener_match; - } - } - } - - HQ_FEC_Mem_update( st, t_audio_q, normq, ynrm, num_bands_p, is_transient, hqswb_clas, core_switching_flag, nb_sfm, num_Sb, &mean_en_high, hq_core_type, output_frame ); - } - - /*-------------------------------------------------------------------------- - * Attenuate HFs in case of band-width switching (from higher BW to lower BW) - *--------------------------------------------------------------------------*/ - - /* attenuate HFs in case of band-width switching */ - if ( st->bws_cnt1 > 0 ) - { - ener_match = (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - - if ( is_transient ) - { - for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - for ( j = inner_frame_tbl[st->bwidth - 1] / NUM_TIME_SWITCHING_BLOCKS; j < inner_frame / NUM_TIME_SWITCHING_BLOCKS; j++ ) - { - t_audio_q[i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + j] *= ener_match; - } - } - } - else - { - for ( i = inner_frame_tbl[st->bwidth - 1]; i < inner_frame; i++ ) - { - t_audio_q[i] *= ener_match; - } - } - } - - /* WB/SWB bandwidth switching */ - if ( is_transient ) - { - mvr2r( t_audio_q + 240, st->t_audio_q, 80 ); - } - else - { - mvr2r( t_audio_q, st->t_audio_q, L_FRAME ); - } - - /*-------------------------------------------------------------------------- - * Inverse transform - * Overlap-add - * Pre-echo reduction - *--------------------------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO && ( core_switching_flag || hq_recovery_flag ) ) - { - /* Initializations for TCX MDCT framework, to be used for switching frame */ - tcx_cfg = st->hTcxCfg; - L_frameTCX_glob = hTcxDec->L_frameTCX; - L_frame_glob = st->L_frame; - L_spec = hTcxDec->L_frameTCX; - st->fscale = sr2fscale( st->sr_core ); - fscaleFB = sr2fscale( st->output_Fs ); - encoderLookahead = ( L_LOOK_12k8 * st->fscale ) / FSCALE_DENOM; - encoderLookaheadFB = ( L_LOOK_12k8 * fscaleFB ) / FSCALE_DENOM; - mdctWindowLength = getMdctWindowLength( st->fscale ); - mdctWindowLengthFB = (int16_t) ( mdctWindowLength * st->output_Fs / st->sr_core ); - if ( core_switching_flag ) - { - tcx_cfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; - tcx_cfg->tcx_curr_overlap_mode = FULL_OVERLAP; - } - else - { - tcx_cfg->tcx_last_overlap_mode = ALDO_WINDOW; - tcx_cfg->tcx_curr_overlap_mode = ALDO_WINDOW; - st->last_core = HQ_CORE; /* Needed to decode non-transition frame */ - } - - init_tcx_window_cfg( tcx_cfg, st->sr_core, st->output_Fs, st->L_frame, hTcxDec->L_frameTCX, encoderLookahead, encoderLookaheadFB, mdctWindowLength, mdctWindowLengthFB, st->element_mode ); - - init_tcx_info( st, L_frame_glob, L_frameTCX_glob, 0, st->bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); - - overlap = tcx_cfg->tcx_mdct_window_length; - overlapFB = tcx_cfg->tcx_mdct_window_lengthFB; - index = tcx_cfg->tcx_last_overlap_mode; - - /* LB synthesis */ - IMDCT( t_audio_q, hTcxDec->syn_Overl_float, hTcxDec->syn_Overl_TDAC_float, wtda_audio, tcx_cfg->tcx_aldo_window_1_trunc_flt, tcx_cfg->tcx_aldo_window_2_flt, tcx_cfg->tcx_mdct_window_half_flt, tcx_cfg->tcx_mdct_window_minimum_flt, tcx_cfg->tcx_mdct_window_trans_flt, tcx_cfg->tcx_mdct_window_half_length, tcx_cfg->tcx_mdct_window_min_length, index, - MDCT_IV, left_rect, tcx_offset, overlap, L_frame, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frame_glob, 0, st->bfi, hHQ_core->old_outLB, 0, st, 0, acelp_zir ); - - mvr2r( wtda_audio + ( overlap >> 1 ) - tcx_offset, output, L_frame_glob ); - - /* FB synthesis */ - IMDCT( t_audio_q, hTcxDec->syn_OverlFB_float, hTcxDec->syn_Overl_TDACFB_float, wtda_audio, tcx_cfg->tcx_aldo_window_1_FB_trunc_flt, tcx_cfg->tcx_aldo_window_2_FB_flt, tcx_cfg->tcx_mdct_window_halfFB_flt, tcx_cfg->tcx_mdct_window_minimumFB_flt, tcx_cfg->tcx_mdct_window_transFB_flt, tcx_cfg->tcx_mdct_window_half_lengthFB, tcx_cfg->tcx_mdct_window_min_lengthFB, index, - MDCT_IV, left_rect, tcx_offsetFB, overlapFB, L_frameTCX, L_frameTCX, max( L_frameTCX, L_spec ) >> 1, L_frameTCX_glob, 0, st->bfi, hHQ_core->old_out, 1, st, FSCALE_DENOM * L_frameTCX_glob / L_frame_glob, acelp_zir ); - - mvr2r( wtda_audio + ( overlapFB >> 1 ) - tcx_offsetFB, synth, L_frameTCX_glob ); - - if ( !core_switching_flag ) - { - st->last_core = ACELP_CORE; /* Restore last core */ - } - } - else - { - if ( output_frame == L_FRAME8k || st->bfi == 0 ) - { - if ( ( output_frame != inner_frame ) && ( st->bfi == 1 ) ) - { - inverse_transform( t_audio_q, wtda_audio, is_transient, output_frame, output_frame, st->element_mode ); - } - else - { - inverse_transform( t_audio_q, wtda_audio, is_transient, output_frame, inner_frame, st->element_mode ); - } - } - - if ( st->element_mode > EVS_MONO ) - { - if ( st->bfi ) - { - /* Rough resampling, but reduces energy loss in case of switch to ACELP in first good frame */ - lerp_flt( t_audio_q, wtda_audio_LB, st->L_frame, inner_frame ); - v_multc( t_audio_q, 0.5f, wtda_audio_LB, st->L_frame ); - } - else - { - /* LB synthesis for potential switch to ACELP */ - ener_match = (float) sqrt( (float) st->L_frame / (float) output_frame ); - v_multc( t_audio_q, ener_match, t_audio_q, inner_frame ); - inverse_transform( t_audio_q, wtda_audio_LB, is_transient, st->L_frame, inner_frame, st->element_mode ); - } - } - - if ( output_frame == L_FRAME8k ) - { - if ( st->bfi == 0 && st->prev_bfi == 0 ) - { - mvr2r( hHQ_core->old_out + (int16_t) ( N_ZERO_MDCT_NS * output_frame / FRAME_SIZE_NS ), hHQ_nbfec->prev_oldauOut, output_frame - (int16_t) ( N_ZERO_MDCT_NS * output_frame / FRAME_SIZE_NS ) ); - } - else if ( st->prev_bfi == 1 ) - { - set_f( hHQ_nbfec->prev_oldauOut, 0.0f, output_frame ); - } - - if ( ( st->prev_bfi == 1 || st->bfi == 1 ) && !hHQ_core->old_is_transient[2] && st->last_core == HQ_CORE && st->last_codec_mode == MODE1 ) - { - time_domain_FEC_HQ( st, wtda_audio, synth, mean_en_high, output_frame ); - } - else - { - window_ola( wtda_audio, synth, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - hHQ_nbfec->phase_mat_next = 0; - } - - if ( ( !st->bfi && !st->prev_bfi ) || ( !( output_frame >= L_FRAME16k ) ) ) - { - preecho_sb( st->core_brate, wtda_audio, synth, output_frame, &hHQ_core->memfilt_lb, &hHQ_core->mean_prev_hb, &hHQ_core->smoothmem, &hHQ_core->mean_prev, &hHQ_core->mean_prev_nc, &hHQ_core->wmold_hb, &hHQ_core->prevflag, &hHQ_core->pastpre, st->bwidth ); - } - } - else - { - if ( st->bfi && output_frame >= L_FRAME16k ) - { - window_ola( t_audio_q, synth, hHQ_core->old_out, output_frame, ALDO_WINDOW, ALDO_WINDOW, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - else - { - window_ola( wtda_audio, synth, hHQ_core->old_out, output_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - - if ( st->element_mode > EVS_MONO ) - { - /* LB synthesis for potential switch to ACELP */ - window_ola( wtda_audio_LB, output, hHQ_core->old_outLB, L_FRAME16k, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, st->prev_bfi && !hHQ_core->ph_ecu_active, hHQ_core->oldHqVoicing, hHQ_core->oldgapsynth ); - } - - if ( ( !st->bfi && !st->prev_bfi ) || ( !( output_frame >= L_FRAME16k ) ) ) - { - preecho_sb( st->core_brate, wtda_audio, synth, output_frame, &hHQ_core->memfilt_lb, &hHQ_core->mean_prev_hb, &hHQ_core->smoothmem, &hHQ_core->mean_prev, &hHQ_core->mean_prev_nc, &hHQ_core->wmold_hb, &hHQ_core->prevflag, &hHQ_core->pastpre, st->bwidth ); - } - } - } - - if ( !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) - { - waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut_float, synth, 0, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); - } - - if ( output_frame >= L_FRAME16k ) - { - if ( hHQ_core->ph_ecu_HqVoicing ) - { - hHQ_core->oldHqVoicing = 1; - mvr2r( gapsynth, hHQ_core->oldgapsynth, L_FRAME48k ); - } - else - { - hHQ_core->oldHqVoicing = 0; - } - } - else - { - hHQ_core->oldHqVoicing = 0; - } - - if ( st->nbLostCmpt == FRAMECTTOSTART_MDCT ) - { - hHQ_core->HqVoicing = 0; - } - - if ( output_frame == L_FRAME8k ) - { - mvr2r( wtda_audio, hHQ_nbfec->oldIMDCTout, L_FRAME8k / 2 ); - mvr2r( hHQ_nbfec->old_auOut_2fr + output_frame, hHQ_nbfec->old_auOut_2fr, output_frame ); - mvr2r( synth, hHQ_nbfec->old_auOut_2fr + output_frame, output_frame ); - } - - - /* update buffer of old subframe pitch values */ - if ( st->last_core == HQ_CORE && st->L_frame != st->last_L_frame ) - { - set_f( &st->old_pitch_buf[st->L_frame / L_SUBFR], (float) L_SUBFR, st->L_frame / L_SUBFR ); - } - mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); - set_f( &st->old_pitch_buf[st->L_frame / L_SUBFR], (float) L_SUBFR, st->L_frame / L_SUBFR ); - mvr2r( &st->mem_pitch_gain_float[2], &st->mem_pitch_gain_float[st->L_frame / L_SUBFR + 2], st->L_frame / L_SUBFR ); - set_zero( &st->mem_pitch_gain_float[2], st->L_frame / L_SUBFR ); - - /* Move LB excitation to old_exc memory in case of switch HQ->ACELP */ - if ( st->element_mode > EVS_MONO ) - { - mvr2r( output, st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); - } - - pop_wmops(); - return; -} -#endif /*-------------------------------------------------------------------* * hq_core_dec_init() * * Initialize HQ core state structure *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void HQ_core_dec_init_flt( - HQ_DEC_HANDLE hHQ_core /* i/o: HQ core data handle */ -) -{ - - set_f( hHQ_core->old_out, 0, L_FRAME48k ); - set_f( hHQ_core->old_outLB, 0, L_FRAME32k ); - set_s( hHQ_core->old_is_transient, 0, 3 ); - - hHQ_core->oldHqVoicing = 0; - - set_f( hHQ_core->prev_noise_level, 0.0f, 2 ); - hHQ_core->prev_R = 0; - set_f( hHQ_core->prev_coeff_out, 0, L_HQ_WB_BWE ); - set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - - /* HQ GENERIC */ - hHQ_core->hq_generic_seed = RANDOM_INITSEED; - - hHQ_core->mem_norm[0] = 31; - set_s( hHQ_core->mem_norm + 1, 39, SFM_N_ENV_STAB - 1 ); - hHQ_core->mem_env_delta = 0; - hHQ_core->no_att_hangover = 0; - hHQ_core->energy_lt = 300.0f; - - hHQ_core->HqVoicing = 0; - set_f( hHQ_core->fer_samples, 0, L_FRAME48k ); - set_f( hHQ_core->prev_env, 0, SFM_N_WB ); - set_f( hHQ_core->prev_normq, 0, SFM_N_WB ); - hHQ_core->prev_hqswb_clas = HQ_NORMAL; - - set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( hHQ_core->last_env, 0, BANDS_MAX ); - hHQ_core->last_max_pos_pulse = 0; - hHQ_core->prev_frm_hfe2 = 0; - hHQ_core->prev_stab_hfe2 = 0; - hHQ_core->prev_ni_ratio = 0.5f; - set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); - - - /*----------------------------------------------------------------------------------* - * HQ FEC - *----------------------------------------------------------------------------------*/ - - set_f( hHQ_core->X_sav, 0.0f, PH_ECU_SPEC_SIZE ); - hHQ_core->num_p = 0; - hHQ_core->ph_ecu_active = 0; - hHQ_core->ni_seed_forfec = 0; - hHQ_core->last_fec = 0; - hHQ_core->ph_ecu_HqVoicing = 0; - set_f( hHQ_core->oldgapsynth, 0.0f, L_FRAME48k ); - hHQ_core->env_stab = 0.75f; - hHQ_core->mem_norm_hqfec[0] = 31; - set_s( hHQ_core->mem_norm_hqfec + 1, 39, SFM_N_ENV_STAB - 1 ); - hHQ_core->mem_env_delta_hqfec = 0; - hHQ_core->env_stab_plc = 0.0f; - set_f( hHQ_core->env_stab_state_p, 1.0f / NUM_ENV_STAB_PLC_STATES, NUM_ENV_STAB_PLC_STATES ); - hHQ_core->envstabplc_hocnt = 0; - - set_f( hHQ_core->mag_chg_1st, 1.0f, LGW_MAX ); - set_f( hHQ_core->Xavg, 0.0f, LGW_MAX ); - hHQ_core->beta_mute = BETA_MUTE_FAC_INI_FLT; - - hHQ_core->time_offs = 0; - hHQ_core->ber_occured_in_pvq = 0; - - hHQ_core->last_hq_core_type = -1; - - reset_preecho_dec( hHQ_core ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * HQ_nbfec_init_flt() - * - * Initialize HQ NB FEC state structure - *-------------------------------------------------------------------*/ - -void HQ_nbfec_init_flt( - HQ_NBFEC_HANDLE hHQ_nbfec /* i/o: HQ NB FEC data handle */ -) -{ - int16_t i, j; - - hHQ_nbfec->prev_last_core = -1; - - set_f( hHQ_nbfec->old_coeffs, 0, L_FRAME8k ); - set_f( hHQ_nbfec->old_auOut_2fr, 0, L_FRAME8k * 2 ); - set_f( hHQ_nbfec->old_out_pha[0], 0, N_LEAD_NB ); - set_f( hHQ_nbfec->old_out_pha[1], 0, N_LEAD_NB ); - - hHQ_nbfec->phase_mat_flag = 0; - hHQ_nbfec->phase_mat_next = 0; - hHQ_nbfec->old_Min_ind = 0; - hHQ_nbfec->diff_energy = 0.f; - set_f( hHQ_nbfec->oldIMDCTout, 0.f, L_FRAME8k / 2 ); - set_f( hHQ_nbfec->prev_oldauOut, 0.f, L_FRAME8k ); - hHQ_nbfec->stat_mode_out = 0; - hHQ_nbfec->stat_mode_old = 0; - - for ( i = 0; i < MAX_SB_NB; i++ ) - { - for ( j = 0; j < MAX_PGF; j++ ) - { - hHQ_nbfec->ynrm_values[i][j] = 0.f; - } - for ( j = 0; j < MAX_ROW; j++ ) - { - hHQ_nbfec->r_p_values[i][j] = 0.f; - } - } - set_f( hHQ_nbfec->Norm_gain, 1.f, SFM_N_NB ); - set_f( hHQ_nbfec->energy_MA_Curr, 100.f, 2 ); - hHQ_nbfec->HQ_FEC_seed = RANDOM_INITSEED; - - set_s( hHQ_nbfec->prev_sign_switch, 0, HQ_FEC_SIGN_SFM ); - set_s( hHQ_nbfec->prev_sign_switch_2, 0, HQ_FEC_SIGN_SFM ); - - return; -} -#endif diff --git a/lib_dec/hq_core_dec_fx.c b/lib_dec/hq_core_dec_fx.c index a08764173..daa8804d7 100644 --- a/lib_dec/hq_core_dec_fx.c +++ b/lib_dec/hq_core_dec_fx.c @@ -6,11 +6,8 @@ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot.h" #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------- * hq_core_dec() * @@ -1406,5 +1403,3 @@ void HQ_nbfec_init_fx( return; } - -#endif diff --git a/lib_dec/hq_env_dec.c b/lib_dec/hq_env_dec.c index e806f1b62..fc894ba6c 100644 --- a/lib_dec/hq_env_dec.c +++ b/lib_dec/hq_env_dec.c @@ -39,165 +39,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------* - * decode_envelope_indices() - * - * Decode envelope indices - *------------------------------------------------------------------------*/ - -/*! r: Number of bits */ -int16_t decode_envelope_indices( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t start_norm, /* i : starting band index */ - const int16_t num_sfm, /* i : Number of subbands */ - const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ - int16_t *difidx, /* o : Diff indices/encoded diff indices */ - const int16_t flag_HQ2, /* i : indicator of HQ2 core */ - const int16_t is_transient /* i : transient flag */ -) -{ - int16_t hcode_l; - int16_t i; - int16_t LCmode; - - if ( flag_HQ2 == LOW_RATE_HQ_CORE || flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) - { - LCmode = get_next_indice( st, BITS_DE_HMODE ); - difidx[start_norm] = get_next_indice( st, BITS_DE_FCOMP ); - } - else - { - LCmode = get_next_indice( st, 2 ); - difidx[start_norm] = get_next_indice( st, NORM0_BITS ); - } - - if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) - { - hcode_l = 0; - if ( LCmode == 1 ) - { - hdecnrm_tran( st, num_sfm, &difidx[start_norm + 1] ); - for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) - { - hcode_l += huffsizn_tran[difidx[i]]; - } - } - else - { - hdecnrm_context( st, num_sfm, &difidx[start_norm], &hcode_l ); - } - } - else - { - hcode_l = 0; - if ( LCmode == 0 ) - { - hdecnrm_context( st, num_sfm, &difidx[start_norm], &hcode_l ); - } - else if ( LCmode == 1 ) - { - hdecnrm_resize( st, num_sfm, &difidx[start_norm + 1] ); - - for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) - { - hcode_l += resize_huffsizn[difidx[i]]; - } - - for ( i = start_norm + 2; i < start_norm + num_sfm; i++ ) - { - if ( difidx[i - 1] > 17 ) - { - difidx[i] = difidx[i] - min( difidx[i - 1] - 17, 3 ); - } - - if ( difidx[i - 1] < 13 ) - { - difidx[i] = difidx[i] - max( difidx[i - 1] - 13, -3 ); - } - } - } - else if ( LCmode == 2 ) - { - hdecnrm( st, num_sfm, &difidx[start_norm + 1] ); - for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) - { - hcode_l += huffsizn[difidx[i]]; - } - } - else - { - for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) - { - difidx[i] = get_next_indice( st, NORMI_BITS ); - } - hcode_l = numnrmibits; - } - } - - return hcode_l; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------* - * dequantize_norms() - * - * De-quantization of norms - *------------------------------------------------------------------------*/ - -/*! r: Number of bits */ -void dequantize_norms( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t start_norm, /* i : First SDE encoded norm */ - const int16_t num_sfm, /* i : Number of norms */ - const int16_t is_transient, /* i : Transient flag */ - int16_t *ynrm, /* o : Decoded norm indices */ - int16_t *normqlg2 /* o : Log2 of decoded norms */ -) -{ - int16_t i, j, k; - int16_t idxbuf[NB_SFM]; - - /* First sub-frame */ - normqlg2[start_norm] = dicnlg2_float[ynrm[start_norm]]; - - /* Other sub-frames */ - if ( is_transient ) - { - /* Recover quantization indices and quantized norms */ - idxbuf[0] = ynrm[0]; - for ( i = 1; i < num_sfm; i++ ) - { - idxbuf[i] = ynrm[i] + idxbuf[i - 1] - 15; - /* safety check in case of bit errors */ - if ( idxbuf[i] < 0 || idxbuf[i] > 39 ) - { - idxbuf[i] = 39; - st->BER_detect = 1; - } - } - - recovernorm( idxbuf, ynrm, normqlg2, num_sfm ); - } - else - { - for ( i = start_norm + 1; i < start_norm + num_sfm; i++ ) - { - j = i - 1; - k = ynrm[j] - 15; - ynrm[i] = ynrm[i] + k; - /* safety check in case of bit errors */ - if ( ynrm[i] < 0 || ynrm[i] > 39 ) - { - ynrm[i] = 39; - st->BER_detect = 1; - } - normqlg2[i] = dicnlg2_float[ynrm[i]]; - } - } - - return; -} -#endif diff --git a/lib_dec/hq_env_dec_fx.c b/lib_dec/hq_env_dec_fx.c index 677221f31..7c5af1b2a 100644 --- a/lib_dec/hq_env_dec_fx.c +++ b/lib_dec/hq_env_dec_fx.c @@ -7,7 +7,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------* * decode_envelope_indices_fx() * @@ -142,9 +141,7 @@ Word16 decode_envelope_indices_fx( /* o : Number of b return hcode_l; } -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------* * dequantize_norms_fx() * @@ -221,4 +218,3 @@ void dequantize_norms_fx( return; } -#endif diff --git a/lib_dec/hq_hr_dec.c b/lib_dec/hq_hr_dec.c index a814232b3..fd4f3cb7c 100644 --- a/lib_dec/hq_hr_dec.c +++ b/lib_dec/hq_hr_dec.c @@ -40,262 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hq_pred_hb_bws() - * - * HQ core HB band-width switching handling - *--------------------------------------------------------------------------*/ - -static void hq_pred_hb_bws( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t *ynrm, /* i : norm quantization index vector */ - const int16_t length, /* i : frame length */ - const int16_t hqswb_clas, /* i : HQ SWB class */ - const float *SWB_fenv /* i : SWB frequency envelopes */ -) -{ - int16_t i; - - /* SWB switching to WB */ - if ( length >= L_FRAME32k ) /* wb switch to swb */ - { - /* calculate the switching parameters */ - if ( ( hqswb_clas != HQ_GEN_SWB && st->core_brate <= HQ_32k ) || st->core_brate > HQ_32k ) - { - st->prev_ener_shb = 0.0f; - for ( i = 25; i < SFM_N_HARM; i++ ) - { - st->prev_ener_shb += dicn[ynrm[i]]; - } - st->prev_ener_shb /= 6; - } - else - { - st->prev_ener_shb = 0.0f; - for ( i = 0; i < SWB_FENV - 3; i++ ) - { - st->prev_ener_shb += SWB_fenv[i]; - } - st->prev_ener_shb /= ( SWB_FENV - 3 ); - } - } - - if ( st->last_inner_frame >= L_FRAME32k && st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->prev_SWB_fenv, st->prev_ener_shb, SWB_FENV ); - } - - return; -} - - -/*--------------------------------------------------------------------------* - * hq_hr_dec() - * - * HQ high rate decoding routine - *--------------------------------------------------------------------------*/ - -void hq_hr_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float *t_audio_q, /* o : transform-domain coefficients */ - const int16_t length, /* i : frame length */ - const int16_t num_bits, /* i : number of available bits */ - int16_t *ynrm, /* o : norm quantization index vector */ - int16_t *is_transient, /* o : transient flag */ - int16_t *hqswb_clas, /* o : HQ SWB class */ - float *SWB_fenv, /* o : SWB frequency envelopes */ - const int16_t core_switching_flag /* i : Core switching flag */ -) -{ - int16_t nb_sfm; - int16_t sum, hcode_l; - int16_t sfmsize[NB_SFM], sfm_start[NB_SFM], sfm_end[NB_SFM]; - int16_t num_sfm, numnrmibits; - int16_t nf_idx; - int16_t normqlg2[NB_SFM], R[NB_SFM]; - int16_t pulses[NB_SFM], maxpulse[NB_SFM]; - float env_stab; - int16_t Rsubband[NB_SFM]; /*Q3*/ - int16_t start_norm, Npeaks = 0; - float noise_level[HVQ_BWE_NOISE_BANDS]; - int16_t peak_idx[HVQ_MAX_PEAKS]; - int16_t hq_generic_offset; - int16_t num_env_bands; - int16_t hq_generic_exc_clas = 0; - int16_t core_sfm; - int16_t har_freq_est1, har_freq_est2; - int16_t flag_dis; - const int16_t *subband_search_offset; - int16_t wBands[2]; - int16_t b_delta_env; - int16_t n_band; - int16_t bits_left; - - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - bits_left = num_bits; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - set_s( pulses, 0, NB_SFM ); - set_s( maxpulse, 0, NB_SFM ); - flag_dis = 1; - har_freq_est1 = 0; - har_freq_est2 = 0; - set_s( peak_idx, 0, HVQ_MAX_PEAKS_32k ); - - /*------------------------------------------------------------------* - * Decode classification - *------------------------------------------------------------------*/ - bits_left -= hq_classifier_dec( st, st->core_brate, length, is_transient, hqswb_clas ); - - /*------------------------------------------------------------------* - * set quantization parameters - *------------------------------------------------------------------*/ - - hq_configure( length, *hqswb_clas, st->core_brate, &num_sfm, &nb_sfm, &start_norm, &num_env_bands, &numnrmibits, &hq_generic_offset, sfmsize, sfm_start, sfm_end ); - - /*------------------------------------------------------------------* - * Unpacking bitstream - *------------------------------------------------------------------*/ - - nf_idx = 0; - if ( !*is_transient && *hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && st->core_brate <= HQ_32k ) ) - { - nf_idx = get_next_indice( st, 2 ); - } - - - /*------------------------------------------------------------------* - * Decode envelope - *------------------------------------------------------------------*/ - - hcode_l = decode_envelope_indices( st, start_norm, num_env_bands, numnrmibits, ynrm, NORMAL_HQ_CORE, *is_transient ); - bits_left -= hcode_l + NORM0_BITS + FLAGS_BITS; - - dequantize_norms( st, start_norm, num_env_bands, *is_transient, ynrm, normqlg2 ); - - if ( *hqswb_clas == HQ_GEN_SWB || *hqswb_clas == HQ_GEN_FB ) - { - hq_generic_exc_clas = swb_bwe_gain_deq_flt( st, HQ_CORE, NULL, SWB_fenv, st->core_brate >= HQ_32k, *hqswb_clas ); /* Use (st->core_brate >= HQ_32k) to be consistent with hq_configure */ - if ( hq_generic_exc_clas == HQ_GENERIC_SP_EXC ) - { - bits_left++; /* conditional 1 bit saving for representing FD3 BWE excitation class */ - } - map_hq_generic_fenv_norm( *hqswb_clas, SWB_fenv, ynrm, normqlg2, num_env_bands, nb_sfm, hq_generic_offset ); - } - - env_stab = 0; - if ( *hqswb_clas == HQ_HVQ ) - { - hHQ_core->mem_env_delta = 0; - } - else if ( length == L_FRAME32k || ( core_switching_flag && ( st->element_mode != EVS_MONO ) && length == L_SPEC32k_EXT ) ) - { - env_stab = env_stability( ynrm, SFM_N_ENV_STAB, hHQ_core->mem_norm, &hHQ_core->mem_env_delta, core_switching_flag && ( st->element_mode != EVS_MONO ) ); - } - else - { - hHQ_core->mem_norm[0] = 31; - hHQ_core->mem_env_delta = 0; - } - - if ( *hqswb_clas == HQ_HVQ ) - { - hHQ_core->env_stab = 1.0f; /* stable by definition */ - } - else - { - if ( length == L_FRAME32k || ( core_switching_flag && ( st->element_mode != EVS_MONO ) && length == L_SPEC32k_EXT ) ) - { - hHQ_core->env_stab = env_stab; /* calculated stability */ - } - else - { - hHQ_core->env_stab = env_stability( ynrm, SFM_N_ENV_STAB_WB, hHQ_core->mem_norm_hqfec, &hHQ_core->mem_env_delta_hqfec, core_switching_flag && ( st->element_mode != EVS_MONO ) ); - } - } - hHQ_core->env_stab_plc = env_stab_smo( min( hHQ_core->env_stab, 1.0f - stab_trans[L_STAB_TBL - 1] ), hHQ_core->env_stab_state_p, &hHQ_core->envstabplc_hocnt ); - - /*------------------------------------------------------------------* - * Bit allocation - *------------------------------------------------------------------*/ - - hq_bit_allocation( st->core_brate, length, *hqswb_clas, &bits_left, normqlg2, nb_sfm, sfmsize, noise_level, R, Rsubband, &sum, &core_sfm, num_env_bands ); - - if ( st->bws_cnt1 > 0 && *hqswb_clas == HQ_GEN_SWB && st->core_brate < HQ_32k ) - { - if ( st->L_frame == L_FRAME16k ) - { - for ( n_band = 0; n_band < 4; n_band++ ) - { - SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - } - - for ( n_band = 4; n_band < SWB_FENV; n_band++ ) - { - SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - } - - if ( *hqswb_clas == HQ_GEN_SWB || *hqswb_clas == HQ_GEN_FB ) - { - b_delta_env = get_nor_delta_hf( st, ynrm, Rsubband, num_env_bands, nb_sfm, core_sfm ); - sum -= b_delta_env; - } - - /*------------------------------------------------------------------* - * Decode spectral fine structure using HVQ/PVQ - *------------------------------------------------------------------*/ - - if ( *hqswb_clas == HQ_HVQ ) - { - hvq_dec( st, bits_left, st->core_brate, ynrm, R, noise_level, peak_idx, &Npeaks, t_audio_q, st->core ); - } - else - { - pvq_core_dec( st, sfm_start, sfm_end, sfmsize, t_audio_q, sum, nb_sfm, Rsubband, R, pulses, maxpulse, HQ_CORE ); - } - - if ( *hqswb_clas == HQ_HVQ || *hqswb_clas == HQ_HARMONIC ) - { - subband_search_offset = subband_search_offsets_13p2kbps_Har; - wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; - wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; - - har_est( t_audio_q, 300, &har_freq_est1, &har_freq_est2, &flag_dis, &hHQ_core->prev_frm_hfe2, subband_search_offset, wBands, &hHQ_core->prev_stab_hfe2 ); - - hHQ_core->prev_frm_hfe2 = har_freq_est2; - } - - /* reset LR-HQ memories */ - hHQ_core->prev_frm_hfe2 = 0; - hHQ_core->prev_stab_hfe2 = 0; - - /*------------------------------------------------------------------* - * Spectral filling - *------------------------------------------------------------------*/ - - fill_spectrum( t_audio_q, R, *is_transient, ynrm, SWB_fenv, hq_generic_offset, nf_idx, length, env_stab, &hHQ_core->no_att_hangover, &hHQ_core->energy_lt, &hHQ_core->hq_generic_seed, hq_generic_exc_clas, core_sfm, *hqswb_clas, noise_level, st->core_brate, hHQ_core->prev_noise_level, &( hHQ_core->prev_R ), hHQ_core->prev_coeff_out, peak_idx, Npeaks, pulses, hHQ_core->old_is_transient[0], hHQ_core->prev_normq, hHQ_core->prev_env, st->prev_bfi, sfmsize, sfm_start, sfm_end, &st->hBWE_FD->prev_L_swb_norm, hHQ_core->prev_hqswb_clas, num_sfm, num_env_bands, st->element_mode ); - - enforce_zero_for_min_envelope( *hqswb_clas, ynrm, t_audio_q, nb_sfm, sfm_start, sfm_end ); - - if ( *is_transient ) - { - de_interleave_spectrum( t_audio_q, length ); - } - - /*------------------------------------------------------------------* - * WB/SWB bandwidth switching - *------------------------------------------------------------------*/ - - hq_pred_hb_bws( st, ynrm, length, *hqswb_clas, SWB_fenv ); - - /* update */ - hHQ_core->prev_hqswb_clas = *hqswb_clas; - - return; -} -#endif diff --git a/lib_dec/hq_hr_dec_fx.c b/lib_dec/hq_hr_dec_fx.c index 0b18d677f..02d58f7bf 100644 --- a/lib_dec/hq_hr_dec_fx.c +++ b/lib_dec/hq_hr_dec_fx.c @@ -5,9 +5,7 @@ #include "options.h" /* Compilation switches */ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------------------* * hq_pred_hb_bws() @@ -15,7 +13,6 @@ * HQ core HB band-width switching handling *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_hq_pred_hb_bws_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word16 *ynrm, /* i : norm quantization index vector Q0*/ @@ -137,13 +134,11 @@ void hq_pred_hb_bws_fx( return; } -#endif /*--------------------------------------------------------------------------* * hq_hr_dec_fx() * * HQ High rate decoding routine *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_hq_hr_dec_fx( Decoder_State *st_fx, /* i/o: decoder state structure fx */ Word32 *t_audio_q, /* o : transform-domain coefficients Q12 */ @@ -673,4 +668,3 @@ void hq_hr_dec_fx( return; } -#endif diff --git a/lib_dec/hq_lr_dec.c b/lib_dec/hq_lr_dec.c index 665d489f5..dd5876ea9 100644 --- a/lib_dec/hq_lr_dec.c +++ b/lib_dec/hq_lr_dec.c @@ -49,911 +49,12 @@ * Local function prototypes *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t p2a_threshold_dequant( Decoder_State *st, int16_t *p2a_flags, const int16_t bands, const int16_t p2a_bands ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void mdct_spectrum_fine_gain_dec( Decoder_State *st, float y2[], const int16_t band_start[], const int16_t band_end[], const int16_t k_sort[], const int16_t bands, const Word32 L_qint, const int16_t Ngq, const int16_t gqlevs, const int16_t gqbits ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static float band_energy_dequant( Decoder_State *st, float band_energy[], const int16_t bands, const Word32 L_qint, const Word16 eref_fx, const int16_t is_transient ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void spt_shorten_domain_set_dec( Decoder_State *st, const int16_t p2a_flags[], const int16_t new_band_start[], const int16_t new_band_end[], const int16_t new_band_width[], const int16_t bands, int16_t band_start[], int16_t band_end[], int16_t band_width[], int16_t *bit_budget ); -#endif /*-------------------------------------------------------------------* * hq_lr_dec() * * HQ low rate decoding routine *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hq_lr_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float yout[], /* o : transform-domain output coefs. */ - const int16_t inner_frame, /* i : inner frame length */ - int16_t num_bits, /* i : number of available bits */ - int16_t *is_transient /* o : transient flag */ -) -{ - int16_t i, k1, pbits, p2a_flags[BANDS_MAX], bit_budget, bands, length, gqlevs, gqbits, Ngq, p2a_bands, ni_seed; - int16_t band_start[BANDS_MAX], band_end[BANDS_MAX], band_width[BANDS_MAX]; - int16_t k_sort[BANDS_MAX], npulses[BANDS_MAX]; - int32_t inp_vector[L_FRAME48k]; - float ni_coef, ni_pd_th, pd_thresh, ld_slope; - float ebits, Rk[BANDS_MAX], band_energy[BANDS_MAX], y2[L_FRAME48k], p2a_th; - Word32 Rk_fx[BANDS_MAX]; - Word32 L_qint; /* Q29 */ - Word16 eref_fx; /* Q10 */ - Word16 bit_alloc_weight_fx; /* Q13 */ - float y2_ni[L_FRAME48k], y2_org[L_FRAME48k]; - int16_t hqswb_clas = 0; - int16_t lowlength, highlength, har_bands = 0; - float m[L_FRAME32k]; - float Ep[BANDS_MAX], enerH = 0.0f, enerL = 0.0f; - int16_t lowband, highband, bw_low = 0, bw_high = 20; - float Ep_tmp[BANDS_MAX]; - float band_energy_tmp[BANDS_MAX]; - int16_t last_bitalloc_max_band[2]; - int32_t bwe_br; - int16_t trans_bit, p2a_flags_tmp[BANDS_MAX]; - int16_t adjustFlag = 0; - int16_t prev_SWB_peak_pos_tmp[SPT_SHORTEN_SBNUM]; - int16_t j, k; - int16_t flag_spt; - int16_t org_band_start[SPT_SHORTEN_SBNUM]; - int16_t org_band_end[SPT_SHORTEN_SBNUM]; - int16_t org_band_width[SPT_SHORTEN_SBNUM]; - int16_t new_band_start[SPT_SHORTEN_SBNUM]; - int16_t new_band_end[SPT_SHORTEN_SBNUM]; - int16_t new_band_width[SPT_SHORTEN_SBNUM]; - Word32 L_tmp, L_tmp2, L_tmp3; - Word16 exp, tmp, exp2, tmp1, tmp2, tmp3, alpha_fx, frac1; - Word32 enerH_fx; - Word32 enerL_fx; - Word32 Ep_fx[BANDS_MAX]; - Word32 Ep_avrg_fx, Ep_vari_fx; - Word32 Ep_avrgL_fx; - Word32 Ep_peak_fx; - Word32 Ep_tmp_fx[BANDS_MAX]; - Word16 gama_fx; /*Q15 0.85f; */ - Word16 beta_fx; /*Q14 1.05f; */ - Word32 L_band_energy[BANDS_MAX], L_band_energy_tmp[BANDS_MAX]; - UWord16 lo; - Word16 Q_band_energy; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - - set_s( last_bitalloc_max_band, 0, 2 ); - set_f( y2, 0.0f, L_FRAME48k ); - set_l( inp_vector, 0, inner_frame ); - flag_spt = 0; - set_s( prev_SWB_peak_pos_tmp, 0, SPT_SHORTEN_SBNUM ); - bwe_br = st->core_brate; - - - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - hqswb_clas = get_next_indice( st, 2 ); - num_bits -= 2; - - *is_transient = 0; - if ( hqswb_clas == HQ_TRANSIENT ) - { - *is_transient = 1; - } - } - else - { - /* decode transient flag */ - *is_transient = get_next_indice( st, 1 ); - num_bits--; - } - - - /* Configure decoder for different bandwidths, bitrates, etc. */ - hq2_core_configure( inner_frame, num_bits, *is_transient, &bands, &length, band_width, band_start, band_end, &L_qint, &eref_fx, &bit_alloc_weight_fx, &gqlevs, &Ngq, &p2a_bands, &p2a_th, &pd_thresh, &ld_slope, &ni_coef, &ni_pd_th, bwe_br ); - - highlength = band_end[bands - 1]; - har_bands = bands; - - if ( st->bwidth == SWB && *is_transient == 0 && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - /* reserve bits for HQ_NORMAL and HQ_HARMONIC */ - if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) - { - num_bits -= get_usebit_npswb( hqswb_clas ); - } - - if ( hqswb_clas == HQ_NORMAL ) - { - flag_spt = 1; - } - } - - if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) - { - if ( hHQ_core->prev_hqswb_clas != HQ_NORMAL ) - { - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - hHQ_core->prev_SWB_peak_pos[j] = 0; - j++; - } - } - } - - /* Spectral energy calculation/quantization */ - ebits = band_energy_dequant( st, band_energy, bands, L_qint, eref_fx, *is_transient ); - - /* simple check: band_energy is too large, Abnormal Situation of bit errors */ - for ( k = 0; k < bands; k++ ) - { - /* Max: 45.0(737279,Q14) at 32kHz, highest band, Min: -6.600037(-108135,Q14) at 8kHz(NB),8kbps, is_transient (-6.7f is safty-threshold) */ - if ( band_energy[k] > 45.0f || band_energy[k] < -6.7f ) - { - st->BER_detect = 1; - set_f( yout, 0, inner_frame ); - return; - } - } - - for ( i = 0; i < bands; i++ ) - { - L_band_energy[i] = (Word32) ( band_energy[i] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - /* First pass bit budget for TCQ of spectral band information */ - gqbits = (int16_t) log2_f( (float) gqlevs ); - bit_budget = num_bits - (int16_t) ceil( ebits ) - Ngq * gqbits; - - pbits = 0; - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - if ( hqswb_clas == HQ_HARMONIC ) - { - set_s( p2a_flags, 1, har_bands ); - } - else - { - /* High band tonality detector based on per band peak-to-average ratio */ - pbits = p2a_threshold_dequant( st, p2a_flags, bands, p2a_bands ); - bit_budget -= pbits; - - if ( hqswb_clas == HQ_NORMAL ) - { - return_bits_normal2( &bit_budget, p2a_flags, bands, bits_lagIndices_modeNormal ); - } - } - } - else - { - /* High band tonality detector based on per band peak-to-average ratio */ - pbits = p2a_threshold_dequant( st, p2a_flags, bands, p2a_bands ); - bit_budget -= pbits; - } - - if ( flag_spt == 1 ) - { - /* initialize the desired parameters for SPT */ - spt_shorten_domain_band_save( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); - spt_shorten_domain_pre( band_start, band_end, hHQ_core->prev_SWB_peak_pos, bands, bwe_br, new_band_start, new_band_end, new_band_width ); - spt_shorten_domain_set_dec( st, p2a_flags, new_band_start, new_band_end, new_band_width, bands, band_start, band_end, band_width, &bit_budget ); - } - - /* safety check in case of bit errors */ - if ( bit_budget < 2 ) - { - st->BER_detect = 1; - set_f( yout, 0, inner_frame ); - return; - } - -#define WMC_TOOL_SKIP - /* Estimate number of bits per sub-band */ - Q_band_energy = SWB_BWE_LR_Qbe; - FOR( i = 0; i < bands; i++ ) - { - L_tmp = L_shl( L_band_energy[i], sub( 16, Q_band_energy ) ); /*Q16 */ - - frac1 = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - L_tmp = Pow2( 30, frac1 ); - exp = sub( exp, 30 ); - Ep_fx[i] = L_shl( L_tmp, sub( exp, 6 ) ); /* Q -6 */ - Ep[i] = (float) ( Ep_fx[i] / pow( 2.0, -6 ) ); - } - - FOR( i = 0; i < bands; i++ ) - { - L_tmp2 = Ep_fx[i]; - L_tmp = L_max( 1, L_tmp2 ); - exp = norm_l( L_tmp ); - tmp = extract_h( L_shl( L_tmp, exp ) ); - - L_tmp3 = (Word32) band_width[i]; - exp2 = norm_l( L_tmp3 ); - tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); - - exp2 = sub( exp, exp2 ); /* Denormalize and substract */ - - tmp3 = sub( tmp2, tmp ); - IF( tmp3 > 0 ) - { - tmp2 = shr( tmp2, 1 ); - } - IF( tmp3 > 0 ) - { - exp2 = add( exp2, 1 ); - } - tmp = div_s( tmp2, tmp ); - L_tmp = L_deposit_h( tmp ); - L_tmp = Isqrt_lc1( L_tmp, &exp2 ); - move32(); /*Q(31-exp2) */ - Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ - Ep_tmp[i] = (float) ( Ep_tmp_fx[i] / pow( 2.0, 13 ) ); - } -#undef WMC_TOOL_SKIP - - if ( *is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) - { - /* decode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ - j = 0; - for ( i = 0; i < 2; i++ ) - { - last_bitalloc_max_band[i] = get_next_indice( st, 1 ); - } - -#define WMC_TOOL_SKIP - lowband = 6; - move16(); - trans_bit = 2; - move16(); - bit_budget = sub( bit_budget, trans_bit ); - gama_fx = 27852; /*Q15 0.85f;*/ - beta_fx = 17203; - move16(); /*Q14 1.05f; */ - set_s( &p2a_flags_tmp[bands - trans_bit], 0, 2 ); - - IF( st->core_brate == ACELP_13k20 ) - { - beta_fx = 13107; - move16(); /*14 1.25f; */ - gama_fx = 31130; - move16(); /*0.95f; */ - mvs2s( &p2a_flags[sub( bands, trans_bit )], &p2a_flags_tmp[sub( bands, trans_bit )], trans_bit ); - } - - /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ - Ep_vari_fx = 0; - move32(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { - Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ - } - ELSE - { - Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q15 */ - } - } - } - /* modify the last p2a_bands subbands band_energies */ - k = bands; - mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ - Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_peak_fx, shl( sub( bands, lowband ), 9 ), &L_tmp2, &lo ); - Mpy_32_16_ss( Ep_avrg_fx, 1126, &L_tmp3, &lo ); - - IF( ( ( L_sub( L_tmp, L_shr( Ep_avrgL_fx, 1 ) ) < 0 && st->core_brate == ACELP_13k20 ) || st->core_brate < ACELP_13k20 ) && - L_sub( L_tmp2, L_tmp3 ) < 0 && L_sub( L_tmp2, L_shr( Ep_avrg_fx, 7 ) ) > 0 ) - { - FOR( i = lowband; i < bands; i++ ) - { - Mpy_32_16_ss( Ep_avrg_fx, 24576, &L_tmp, &lo ); - IF( L_sub( L_shr( Ep_tmp_fx[i], 1 ), L_tmp ) < 0 ) - { - Mpy_32_16_ss( Ep_peak_fx, sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +4 = 15) */ - L_tmp2 = L_add( L_tmp, 13107 ); /*15 */ - tmp2 = extract_l( L_min( L_max( L_tmp2, 16384 ), gama_fx ) ); /*15 = 15 */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_band_energy_tmp[i], &lo ); - } - } - } - ELSE - { - FOR( i = sub( bands, trans_bit ); i < bands; i++ ) - { - alpha_fx = 16384; - move16(); /*Q14 */ - IF( sub( p2a_flags_tmp[i], 1 ) == 0 ) - { - Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_vari_fx, 3277, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 12, exp ) ); /*Q(13+exp-15 +12-exp +4 = 14) */ - - tmp2 = extract_h( Ep_avrg_fx ); /*Q13-16=-3 */ - IF( tmp2 != 0 ) - { - exp = norm_s( tmp2 ); - tmp2 = shl( tmp2, exp ); /*Q(exp) */ - tmp2 = div_s( 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp2 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_vari_fx, 6554, &L_tmp2, &lo ); - Mpy_32_16_ss( L_tmp2, tmp2, &L_tmp2, &lo ); - L_tmp2 = L_shl( L_tmp2, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +3 = 14) */ - L_tmp = L_min( L_tmp, L_tmp2 ); /*14 */ - tmp = extract_l( L_min( L_tmp, 13107 ) ); /*14 */ - alpha_fx = add( 16384, tmp ); - } - IF( sub( last_bitalloc_max_band[j++], 1 ) == 0 ) - { - Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-2 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q(13+exp-15 +14-exp+2 = 14) */ - L_tmp = L_max( L_tmp, 16384 ); /*14 */ - tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ -#else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ - L_tmp = L_max( L_tmp, 16384 ); /*14 */ - tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ -#endif /* BASOP_NOGLOB */ - } - ELSE - { - tmp2 = extract_h( Ep_avrg_fx ); /*13 -16 =-3 */ - IF( tmp2 != 0 ) - { - exp = norm_s( tmp2 ); - tmp2 = shl( tmp2, exp ); /*Q(exp) */ - tmp2 = div_s( 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp2 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp2, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 19, exp ) ); /*Q(13+exp-15 +19-exp +3 = 20) */ - Mpy_32_16_ss( L_tmp, shl( sub( bands, lowband ), 9 ), &L_tmp, &lo ); - L_tmp = L_max( L_tmp, 13926 ); /*14 */ - tmp2 = extract_l( L_min( L_tmp, 16384 ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp2 ), 1 ); /*14+14-15+1 =14 */ - } - Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q(Q_band_energy+14-15 +1= Q_band_energy) */ - } - } - lowband = 3; - move16(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ - } - ELSE - { - Ep_avrgL_fx = L_add( Ep_avrgL_fx, L_shr( Ep_tmp_fx[i], 1 ) ); /*Q12 */ - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q13 */ - } - } - } - Mpy_32_16_ss( Ep_peak_fx, 28262, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp2, &lo ); - IF( L_sub( L_shr( Ep_avrg_fx, 2 ), L_tmp2 ) > 0 && L_sub( L_shr( Ep_avrg_fx, 4 ), L_tmp2 ) < 0 && L_sub( L_tmp, Ep_avrgL_fx ) > 0 ) - { - adjustFlag = 1; - move16(); - FOR( i = 0; i < lowband; i++ ) - { - tmp = extract_h( Ep_avrgL_fx ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, 18842, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - L_tmp = L_shl( L_tmp, sub( 27, exp ) ); /*Q14 0.5 */ - tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ -#else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ - tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ -#endif /* BASOP_NOGLOB */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ -#else /* BASOP_NOGLOB */ - L_band_energy_tmp[i] = L_shl_o( L_tmp, 1, &Overflow ); /*Q_band_energy */ -#endif /* BASOP_NOGLOB */ - } - } -#undef WMC_TOOL_SKIP - - for ( i = 0; i < bands; i++ ) - { - band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); - } - else if ( *is_transient == 0 && inner_frame == L_FRAME16k ) - { -#define WMC_TOOL_SKIP - bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ - /* decode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ - for ( i = 0; i < 2; i++ ) - { - last_bitalloc_max_band[i] = get_next_indice( st, 1 ); - } - FOR( i = 0; i < bands; i++ ) - { -#ifndef BASOP_NOGLOB - Ep_tmp_fx[i] = L_shl( Ep_tmp_fx[i], 2 ); -#else /* BASOP_NOGLOB */ - Ep_tmp_fx[i] = L_shl_o( Ep_tmp_fx[i], 2, &Overflow ); -#endif /* BASOP_NOGLOB */ - } - IF( st->core_brate == ACELP_13k20 ) - { - lowband = 8; - move16(); - highband = 15; - move16(); - bw_low = sub( band_start[highband], band_start[lowband] ); - bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); - } - ELSE - { - lowband = 8; - move16(); - highband = 16; - move16(); - bw_low = sub( band_start[highband], band_start[lowband] ); - bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); - } - /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ - enerL_fx = 0; - move32(); - enerH_fx = 0; - move32(); - Ep_vari_fx = 0; - move32(); - Ep_avrg_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 && add( sub( i, bands ), p2a_bands ) < 0 ) - { -#ifndef BASOP_NOGLOB - Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_vari_fx = L_add_o( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ), &Overflow ); /*Q15 */ - Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - } - - IF( sub( i, highband ) >= 0 ) - { - enerH_fx = L_add( enerH_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ - } - ELSE IF( sub( i, lowband ) >= 0 ) - { - enerL_fx = L_add( enerL_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ - } - } - - enerL = (float) ( enerL_fx / pow( 2.0, -4 ) ); - enerH = (float) ( enerH_fx / pow( 2.0, -4 ) ); - /* modify the last p2a_bands subbands band_energies */ - k = bands; - mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ - - L_tmp = L_max( enerH_fx, enerL_fx ); - tmp = s_max( bw_low, bw_high ); - i = norm_l( L_tmp ); - j = norm_s( tmp ); - Mpy_32_16_ss( L_shl( enerH_fx, i ), shl( bw_low, j ), &L_tmp, &lo ); - Mpy_32_16_ss( L_shl( enerL_fx, i ), shl( bw_high, j ), &L_tmp2, &lo ); - L_tmp2 = L_sub( L_tmp, L_tmp2 ); - - FOR( i = sub( bands, p2a_bands ); i < bands; i++ ) - { - IF( sub( p2a_flags[i], 1 ) == 0 || L_tmp2 > 0 ) - { - tmp = sub( bands, p2a_bands ); - tmp = sub( tmp, lowband ); /*Q0 */ - -#ifndef BASOP_NOGLOB - tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ -#else - tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp1 != 0 ) - { - exp = norm_s( tmp1 ); - tmp1 = shl( tmp1, exp ); /*Q(exp) */ - tmp1 = div_s( 16384, tmp1 ); /*Q(15+14-exp = 29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp1 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, 16384, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 32, exp ) ); /*Q15 */ - tmp = extract_l( L_min( L_tmp, 6554 ) ); /*Q15 */ - Mpy_32_16_ss( Ep_vari_fx, tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 15, exp ) ); /*Q15 */ - tmp = extract_l( L_shr( L_min( L_tmp, 13107 ), 1 ) ); /*Q14 */ - alpha_fx = add( tmp, 16384 ); /*Q14 */ - } - ELSE - { - alpha_fx = 16384; - move16(); /*Q14 */ - } - - IF( add( sub( i, bands ), p2a_bands ) > 0 ) - { - tmp = sub( bands, p2a_bands ); - IF( sub( last_bitalloc_max_band[sub( i, add( tmp, 1 ) )], 1 ) == 0 ) - { - tmp = sub( tmp, lowband ); - Mpy_32_16_ss( Ep_tmp_fx[i], tmp, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - tmp = extract_h( L_shl( L_tmp, 16 ) ); /*Q0 */ -#else - tmp = extract_h( L_shl_o( L_tmp, 16, &Overflow ) ); /*Q0 */ -#endif - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q14 */ - tmp = extract_l( L_min( L_max( L_tmp, 16384 ), 20480 ) ); /*Q14 */ - L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ - alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ - } - ELSE - { - tmp = sub( tmp, lowband ); - -#ifndef BASOP_NOGLOB - tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ -#else - tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp1 != 0 ) - { - exp = norm_s( tmp1 ); - tmp1 = shl( tmp1, exp ); /*Q(exp) */ - tmp1 = div_s( 16384, tmp1 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp1 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 29, exp ) ); /*Q14 */ - tmp = extract_l( L_min( L_max( L_tmp, 13926 ), 16384 ) ); /*Q14 */ - L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ - alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ - } - } - Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q Q_band_energy */ - } - lowband = 6; - move16(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { -#ifndef BASOP_NOGLOB - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - } - ELSE - { -#ifndef BASOP_NOGLOB - Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q15 */ - } - } - } - - Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_peak_fx, 19661, &L_tmp2, &lo ); - Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp3, &lo ); - - IF( ( L_sub( L_shr( Ep_avrgL_fx, 1 ), Ep_avrg_fx ) > 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 && L_sub( L_shr( Ep_avrgL_fx, 1 ), L_tmp2 ) < 0 ) || - ( L_sub( L_shr( Ep_avrg_fx, 1 ), Ep_avrgL_fx ) > 0 && L_sub( L_shr( Ep_avrg_fx, 3 ), L_tmp3 ) < 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 ) ) - { - adjustFlag = 1; - move16(); - FOR( i = 0; i < lowband; i++ ) - { -#ifndef BASOP_NOGLOB - tmp = extract_h( L_shl( Ep_avrgL_fx, 1 ) ); /*Q0 */ -#else - tmp = extract_h( L_shl_o( Ep_avrgL_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 28, exp ) ); /*Q14 0.5 */ - tmp = extract_l( L_min( L_tmp, 19661 ) ); /* Q14 */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ - } - } -#undef WMC_TOOL_SKIP - - for ( i = 0; i < bands; i++ ) - { - band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); - } - else if ( st->bwidth == SWB && hqswb_clas == HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - hq2_bit_alloc_har( band_energy, bit_budget, bands, Rk_fx, p2a_bands, bwe_br, p2a_flags, band_width ); - } - else - { - hq2_bit_alloc( band_energy, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, num_bits, hqswb_clas, st->bwidth, *is_transient ); - } - - if ( bit_budget < 0 ) - { - st->BER_detect = 1; - bit_budget = 0; - } - - tcq_core_LR_dec( st, inp_vector, bit_budget, bands, band_start, band_width, Rk_fx, npulses, k_sort, p2a_flags, p2a_bands, last_bitalloc_max_band, inner_frame, adjustFlag, is_transient ); - - /* Prepare floating Rk for next modules */ - for ( k = 0; k < bands; k++ ) - { - Rk[k] = WORD322FL_SCALE( Rk_fx[k], SWB_BWE_LR_QRk - 1 ); - } - - /* Denormalize the coded MDCT spectrum */ - mdct_spectrum_denorm( inp_vector, y2, band_start, band_end, band_width, band_energy, npulses, bands, ld_slope, pd_thresh ); - - /* Apply fine gain to denormalized coded spectrum */ - mdct_spectrum_fine_gain_dec( st, y2, band_start, band_end, k_sort, bands, L_qint, Ngq, gqlevs, gqbits ); - - /*restore the band information */ - if ( flag_spt == 1 ) - { - spt_shorten_domain_band_restore( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); - } - - mvr2r( y2, y2_org, L_FRAME32k ); - - /* Inject noise into components having relatively low pulse energy per band */ - ni_seed = npulses[0] + npulses[1] + npulses[2] + npulses[3]; - - for ( i = 0; i < band_end[bands - 1] + 1; i++ ) - y2_ni[i] = y2[i]; - hq2_noise_inject( y2_ni, band_start, band_end, band_width, Ep, Rk, npulses, ni_seed, bands, 0, bw_low, bw_high, enerL, enerH, hHQ_core->last_ni_gain, hHQ_core->last_env, &hHQ_core->last_max_pos_pulse, p2a_flags, p2a_bands, hqswb_clas, st->bwidth, bwe_br ); - - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) - { - preset_hq2_swb( hqswb_clas, band_end, &har_bands, p2a_bands, length, bands, &lowlength, &highlength, m ); - - /*Gap filling for the core coder*/ - swb_bwe_dec_lr( st, y2, m, bwe_br, bands, band_start, band_end, band_energy, p2a_flags, hqswb_clas, lowlength, highlength, har_bands, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, band_width, y2_ni, &ni_seed ); - - post_hq2_swb( m, lowlength, highlength, hqswb_clas, har_bands, bands, p2a_flags, band_start, band_end, y2, npulses ); - - if ( hqswb_clas == HQ_NORMAL ) - { - spt_swb_peakpos_tmp_save( y2, bands, band_start, band_end, prev_SWB_peak_pos_tmp ); - for ( k = 0; k < SPT_SHORTEN_SBNUM; k++ ) - { - if ( p2a_flags[bands - SPT_SHORTEN_SBNUM + k] == 0 || npulses[bands - SPT_SHORTEN_SBNUM + k] == 0 ) - { - prev_SWB_peak_pos_tmp[k] = 0; - } - } - } - - mvr2r( y2_ni, y2, lowlength ); - } - else - { - mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* HQ_TRANSIENT */ - } - } - else - { - mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* NB, WB */ - } - - - /* bandwidth switching */ - if ( !( st->last_inner_frame >= L_FRAME16k && st->bws_cnt > 0 ) ) - { - k1 = *is_transient ? bands - 2 : bands - 6; - st->prev_ener_shb = 0.0f; - - for ( i = k1; i < bands; i++ ) - { - st->prev_ener_shb += Ep_tmp[i] / ( bands - k1 ); - } - } - - if ( st->last_inner_frame >= L_FRAME32k && st->hBWE_FD != NULL ) - { - set_f( st->hBWE_FD->prev_SWB_fenv, st->prev_ener_shb, SWB_FENV ); - } - - updat_prev_frm( y2, yout, bwe_br, length, inner_frame, bands, st->bwidth, *is_transient, hqswb_clas, &hHQ_core->prev_hqswb_clas, hHQ_core->prev_SWB_peak_pos, prev_SWB_peak_pos_tmp, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, st->bws_cnt ); - - return; -} -#endif /*------------------------------------------------------------------------------------ * small_symbol_dec_tran() @@ -961,35 +62,6 @@ void hq_lr_dec( * Huffman decoding of differential energies *--------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: bits */ -static int16_t small_symbol_dec_tran( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *qbidx, /* o : output of dequantized differential energy */ - const int16_t bands, /* i : number of bands */ - const int16_t is_transient /* i : transient flag */ -) -{ - int16_t i, bits; - int16_t difidx[BANDS_MAX]; - - /* Decoding differential energies*/ - bits = decode_envelope_indices( st, 0, bands, 0, difidx, LOW_RATE_HQ_CORE_TRAN, is_transient ); - bits += BITS_DE_FCOMP; - - /* counting 1 bit for band_energy_huff_coding_mode */ - bits += BITS_DE_HMODE; - - /* converting to original values */ - for ( i = 0; i < bands; i++ ) - { - qbidx[i] = difidx[i] - LRMDCT_BE_OFFSET; - } - - return ( bits ); -} -#endif - /*-------------------------------------------------------------------------- * small_symbol_dec() @@ -997,71 +69,6 @@ static int16_t small_symbol_dec_tran( * Huffman decoding of differential energies (MSB and LSB) *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: bits */ -static int16_t small_symbol_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *qbidx, /* o : output of dequantized differential energy */ - const int16_t bands, /* i : number of bands */ - const int16_t is_transient ) -{ - int16_t i, LSB, bits; - int16_t difidx[BANDS_MAX]; - - /* Decoding MSB bits */ - bits = decode_envelope_indices( st, 0, bands, 0, difidx, LOW_RATE_HQ_CORE, is_transient ); - bits += BITS_DE_FCOMP; - - /* counting 1 bit for band_energy_huff_coding_mode */ - bits += BITS_DE_HMODE; - - /* Decoding LSB bit packing */ - for ( i = 0; i < bands; ++i ) - { - LSB = get_next_indice( st, BITS_DE_LSB ); - difidx[i] = ( difidx[i] << 1 ) | LSB; - } - - /* counting bits for LSB */ - bits += bands; - - /* converting to original values */ - for ( i = 1; i < bands; ++i ) - { - qbidx[i] = difidx[i] - DE_OFFSET1; - } - - qbidx[0] = difidx[0] - DE_OFFSET0; - - return ( bits ); -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * decode_huff_8s() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t decode_huff_8s( - Decoder_State *st, - const int16_t *hufftab, - int16_t *rbits ) -{ - int16_t bit; - - while ( *hufftab > 0 ) - { - *rbits += ( *hufftab & 0xf ); - bit = get_next_indice( st, *hufftab & 0xf ); - hufftab += ( *hufftab >> 4 ) + bit; - } - - return ( -*hufftab ); -} -#endif - /*-------------------------------------------------------------------------- * large_symbol_dec() @@ -1069,115 +76,6 @@ static int16_t decode_huff_8s( * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: bits */ -static int16_t large_symbol_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *qbidx, /* o : output of dequantized differential energy */ - const int16_t bands /* i : number of bands */ -) -{ - int16_t i, bits; - int16_t LSB[BANDS_MAX]; - int16_t basic_shift, cntbits, ns2mode; - int16_t pos_outlyer; - int16_t ns2mode0, ns2mode1; - - cntbits = BITS_DE_8SMODE; - ns2mode = get_next_indice( st, BITS_DE_8SMODE ); - - if ( ns2mode == 0 ) - { - ns2mode0 = get_next_indice( st, BITS_DE_8SMODE_N0 ); - ns2mode1 = get_next_indice( st, BITS_DE_8SMODE_N1 ); - cntbits += BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; - - if ( ns2mode0 == 0 ) - { - if ( ns2mode1 == 1 ) - { - pos_outlyer = get_next_indice( st, BITS_DE_8SPOS ); - cntbits += BITS_DE_8SPOS; - qbidx[pos_outlyer] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; - cntbits += BITS_ABS_ENG; - } - else - { - pos_outlyer = -1; - } - - for ( i = 0; i < pos_outlyer; ++i ) - { - bits = 0; - qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; - cntbits += bits; - } - - for ( i = pos_outlyer + 1; i < bands; ++i ) - { - bits = 0; - qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; - cntbits += bits; - } - } - else - { - if ( ns2mode1 == 1 ) - { - pos_outlyer = get_next_indice( st, BITS_DE_8SPOS ); - cntbits += BITS_DE_8SPOS; - qbidx[0] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; - cntbits += BITS_ABS_ENG; - qbidx[pos_outlyer] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; - cntbits += BITS_ABS_ENG; - } - else - { - pos_outlyer = 0; - qbidx[0] = get_next_indice( st, BITS_ABS_ENG ) - ABS_ENG_OFFSET; - cntbits += BITS_ABS_ENG; - } - - for ( i = 1; i < pos_outlyer; ++i ) - { - bits = 0; - qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; - cntbits += bits; - } - - for ( i = pos_outlyer + 1; i < bands; ++i ) - { - bits = 0; - qbidx[i] = ( decode_huff_8s( st, hestable, &bits ) - 4 ); - cntbits += bits; - } - } - } - else - { - basic_shift = get_next_indice( st, BITS_MAX_DEPTH ); - cntbits += BITS_MAX_DEPTH; - - for ( i = 0; i < bands; ++i ) - { - bits = 0; - qbidx[i] = decode_huff_8s( st, hestable, &bits ) - 4; - qbidx[i] = qbidx[i] << basic_shift; - cntbits += bits; - } - - for ( i = 0; i < bands; ++i ) - { - LSB[0] = get_next_indice( st, basic_shift ); - qbidx[i] += LSB[0]; - cntbits += basic_shift; - } - } - - return cntbits; /* xx bits for diff. energies + 1 bit for LC coding mode */ -} -#endif - /*--------------------------------------------------------------------------* * band_energy_dequant() @@ -1185,84 +83,6 @@ static int16_t large_symbol_dec( * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float band_energy_dequant( - Decoder_State *st, /* i/o: decoder state structure */ - float band_energy[], - const int16_t bands, - const Word32 L_qint, /* Q29 */ - const Word16 eref_fx, /* Q10 */ - const int16_t is_transient ) -{ - int16_t k; - int16_t deng_cmode; - int16_t bq0; - int16_t bq1[BANDS_MAX], bq2[BANDS_MAX]; - float deng_bits; - Word32 L_band_energy[BANDS_MAX]; /* SWB_BWE_LR_Qbe */ - Word16 exp_normd; - Word16 rev_qint_fx; - Word16 Qrev_qint; - - /* parsing energy difference coding mode */ - deng_cmode = get_next_indice( st, BITS_DE_CMODE ); - - if ( deng_cmode == 0 ) - { - deng_bits = (float) large_symbol_dec( st, bq2, bands ); - - /* counting 1 bit for deng coding mode */ - deng_bits += BITS_DE_CMODE; - } - else - { - if ( is_transient ) - { - deng_bits = (float) small_symbol_dec_tran( st, bq2, bands, is_transient ); - } - else - { - deng_bits = (float) small_symbol_dec( st, bq2, bands, is_transient ); - } - - /* counting 1 bit for deng coding mode */ - deng_bits += BITS_DE_CMODE; - } - -#define WMC_TOOL_SKIP - /* Get the reference energy */ - exp_normd = norm_l( L_qint ); - rev_qint_fx = div_s( 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ - Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); - - bq0 = (int16_t) round_fx( L_shl( L_mult( eref_fx, rev_qint_fx ), sub( 5, Qrev_qint ) ) ); /* 16-(10+Qrev_qint+1) */ -#undef WMC_TOOL_SKIP - - /* Reconstruct quantized spectrum */ - bq1[0] = bq2[0] + bq0; - for ( k = 1; k < bands; k++ ) - { - bq1[k] = bq2[k] + bq1[k - 1]; - } - - for ( k = 0; k < bands; k++ ) - { -#define WMC_TOOL_SKIP - L_band_energy[k] = L_mls( L_qint, bq1[k] ); - move32(); /* 29+0-15 -> Qbe(Q14) */ - band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); -#undef WMC_TOOL_SKIP - } - - if ( is_transient ) - { - reverse_transient_frame_energies( band_energy, bands ); - } - - return ( deng_bits ); -} -#endif - /*--------------------------------------------------------------------------* * p2a_threshold_dequant() @@ -1270,30 +90,6 @@ static float band_energy_dequant( * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t p2a_threshold_dequant( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *p2a_flags, - const int16_t bands, - const int16_t p2a_bands ) -{ - int16_t j, k; - - for ( k = 0; k < bands - p2a_bands; k++ ) - { - p2a_flags[k] = 1; - } - - j = 0; - for ( k = bands - p2a_bands; k < bands; k++ ) - { - p2a_flags[k] = get_next_indice( st, 1 ); - j++; - } - - return ( j ); -} -#endif /*--------------------------------------------------------------------------* * mdct_spectrum_fine_gain_dec() @@ -1301,114 +97,9 @@ static int16_t p2a_threshold_dequant( * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void mdct_spectrum_fine_gain_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float y2[], - const int16_t band_start[], - const int16_t band_end[], - const int16_t k_sort[], - const int16_t bands, - const Word32 L_qint, - const int16_t Ngq, - const int16_t gqlevs, - const int16_t gqbits ) -{ - int16_t i, k, imin; - float gamma; - float gain_table[MAX_GQLEVS]; - Word16 exp_normn, exp_normd; - Word16 delta_fx, Qdelta; - Word32 L_delta, L_q; - Word32 L_temp; - Word16 gain_table_fx[MAX_GQLEVS]; - Word16 Qgt; - Word16 temp_lo_fx, temp_hi_fx; - -#define WMC_TOOL_SKIP - /* Fine gain quantization on only the most significant energy bands */ - /*delta = qint / gqlevs; */ - exp_normn = norm_l( L_qint ); - exp_normn = sub( exp_normn, 1 ); - exp_normd = norm_s( gqlevs ); - delta_fx = div_l( L_shl( L_qint, exp_normn ), shl( gqlevs, exp_normd ) ); - Qdelta = add( sub( exp_normn, exp_normd ), 28 ); /* 29+exp_normn-(exp_normd)-1; */ - L_delta = L_shl( L_deposit_h( delta_fx ), sub( 13, Qdelta ) ); - /*q = (-qint + delta) / 2.0f; */ - L_q = L_shr( L_sub( L_delta, L_qint ), 1 ); - - FOR( i = 0; i < gqlevs; i++ ) - { - /*gain_table[i] = (float) pow (2.0f, q * 0.5f); */ - L_temp = L_shr( L_shr( L_q, 1 ), sub( 29, 16 ) ); - temp_lo_fx = L_Extract_lc( L_temp, &temp_hi_fx ); - Qgt = sub( 14, temp_hi_fx ); - gain_table_fx[i] = extract_l( Pow2( 14, temp_lo_fx ) ); /* Qgt */ - - /*q += delta; */ - L_q = L_add( L_q, L_delta ); - gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ - gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); - } -#undef WMC_TOOL_SKIP - - for ( k = bands - Ngq; k < bands; k++ ) - { - imin = get_next_indice( st, gqbits ); - gamma = gain_table[imin]; - - for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) - { - y2[i] *= gamma; - } - } - - return; -} -#endif /*--------------------------------------------------------------------------* * spt_shorten_domain_set_dec() * * update the shorten band information based on p2a analysis *--------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void spt_shorten_domain_set_dec( - Decoder_State *st, /* i : decoder state structure */ - const int16_t p2a_flags[], /* i : p2a anlysis information */ - const int16_t new_band_start[], /* i : new band start position */ - const int16_t new_band_end[], /* i : new band end position */ - const int16_t new_band_width[], /* i : new subband band width */ - const int16_t bands, /* i : total number of subbands */ - int16_t band_start[], /* o : band start position */ - int16_t band_end[], /* o : band end position */ - int16_t band_width[], /* o : sub band band width */ - int16_t *bit_budget /* i/o: bit budget */ -) -{ - int16_t j, k; - int16_t spt_shorten_flag[SPT_SHORTEN_SBNUM]; - - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - spt_shorten_flag[j] = 0; - if ( p2a_flags[k] == 1 ) - { - spt_shorten_flag[j] = get_next_indice( st, 1 ); - *bit_budget -= 1; - if ( spt_shorten_flag[j] == 1 ) - { - band_start[k] = new_band_start[j]; - band_end[k] = new_band_end[j]; - band_width[k] = new_band_width[j]; - } - } - - j++; - } - - return; -} -#endif diff --git a/lib_dec/hq_lr_dec_fx.c b/lib_dec/hq_lr_dec_fx.c index c51a2fde5..cf7aee8f0 100644 --- a/lib_dec/hq_lr_dec_fx.c +++ b/lib_dec/hq_lr_dec_fx.c @@ -13,7 +13,6 @@ /*--------------------------------------------------------------------------* * Local function prototypes *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 p2a_threshold_dequant_fx( Decoder_State *st_fx, Word16 *p2a_flags, const Word16 bands, const Word16 p2a_bands ); static void mdct_spectrum_fine_gain_dec_fx( Decoder_State *st_fx, Word32 L_y2[], const Word16 band_start[], const Word16 band_end[], const Word16 k_sort[], const Word16 bands, const Word32 L_qint, const Word16 Ngq, const Word16 gqlevs, const Word16 gqbits ); @@ -1398,4 +1397,3 @@ static void mdct_spectrum_fine_gain_dec_fx( return; } -#endif diff --git a/lib_dec/igf_dec.c b/lib_dec/igf_dec.c index 451b7e29b..785dc6a86 100644 --- a/lib_dec/igf_dec.c +++ b/lib_dec/igf_dec.c @@ -43,9 +43,7 @@ #include "stat_dec.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -55,35 +53,6 @@ *-------------------------------------------------------------------*/ /*! r: number of noise bands */ -#ifndef IVAS_FLOAT_FIXED -static int16_t IGF_replaceTCXNoise_1_flr( - const float *in, /* i : MDCT spectrum */ - const int16_t *TCXNoise, /* i : tcx noise indicator vector */ - const int16_t start, /* i : start MDCT subband index */ - const int16_t stop, /* i : stop MDCT subband index */ - float *totalNoiseNrg /* o : measured noise energy */ -) -{ - int16_t sb; - int16_t noise; - float nE; - float val; - - noise = 0; - nE = FLT_MIN; - - for ( sb = start; sb < stop; sb++ ) - { - val = in[sb] * TCXNoise[sb]; - nE += val * val; - noise += TCXNoise[sb]; - } - - *totalNoiseNrg = nE; - - return noise; -} -#endif /*-------------------------------------------------------------------* @@ -92,45 +61,6 @@ static int16_t IGF_replaceTCXNoise_1_flr( * replaces TCX noise *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_replaceTCXNoise_2_flt( - float *in, /* i/o: MDCT spectrum */ - const int16_t *TCXNoise, /* i : tcx noise indicator vector */ - const int16_t start, /* i : start MDCT subband index */ - const int16_t stop, /* i : stop MDCT subband index */ - float totalNoiseNrg, /* i : measured noise energy */ - int16_t *nfSeed /* i/o: random generator noise seed */ -) -{ - int16_t sb; - float rE; - float g; - float val; - - rE = FLT_MIN; - for ( sb = start; sb < stop; sb++ ) - { - if ( TCXNoise[sb] ) - { - val = (float) own_random( nfSeed ); - in[sb] = val; - rE += val * val; - } - } - - g = (float) sqrt( totalNoiseNrg / rE ); - - for ( sb = start; sb < stop; sb++ ) - { - if ( TCXNoise[sb] ) - { - in[sb] *= g; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * IGF_replaceTCXNoise_2_new_flt() @@ -138,57 +68,6 @@ static void IGF_replaceTCXNoise_2_flt( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_replaceTCXNoise_2_new_flt( - float *in, /* i/o: MDCT spectrum */ - const int16_t *TCXNoise, /* i : tcx noise indicator vector */ - const int16_t start, /* i : start MDCT subband index */ - const int16_t stop, /* i : stop MDCT subband index */ - float totalNoiseNrg, /* i : measured noise energy */ - int16_t n_noise_bands, /* i : number of noise bands in src */ - int16_t *nfSeed /* i/o: random generator noise seed */ -) -{ - int16_t sb; - float rE; - float g; - float val; - int16_t n_noise_bands_tile; - float noise_band_ratio; - - rE = FLT_MIN; - n_noise_bands_tile = 0; - for ( sb = start; sb < stop; sb++ ) - { - if ( TCXNoise[sb] ) - { - val = (float) own_random( nfSeed ); - in[sb] = val; - rE += val * val; - n_noise_bands_tile++; - } - } - - rE = max( rE, 1.f ); - - if ( n_noise_bands_tile ) - { - noise_band_ratio = (float) n_noise_bands_tile / n_noise_bands; - g = (float) sqrt( totalNoiseNrg * noise_band_ratio / rE ); - - for ( sb = start; sb < stop; sb++ ) - { - if ( TCXNoise[sb] ) - { - in[sb] *= g; - } - } - } - - return; -} -#endif - /*-------------------------------------------------------------------* * IGF_decode_whitening_level_flt() @@ -196,38 +75,6 @@ static void IGF_replaceTCXNoise_2_new_flt( * reads whitening levels *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_decode_whitening_level_flt( - Decoder_State *st, /* i : decoder state */ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i/o: instance handle of IGF Deccoder */ - const int16_t p /* i : tile index, p = [0, 3] */ -) -{ - int16_t tmp; - - tmp = get_next_indice( st, 1 ); - - if ( tmp == 1 ) - { - tmp = get_next_indice( st, 1 ); - if ( tmp == 1 ) - { - hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_STRONG; - } - else - { - hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_OFF; - } - } - else - { - hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_MID; - } - - return; -} -#endif - /*-------------------------------------------------------------------* * IGF_getMDCTSquare_flt() @@ -235,25 +82,6 @@ static void IGF_decode_whitening_level_flt( * square the MDCT spectrum *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_getMDCTSquare_flt( - const int16_t startLine, /* i : start MDCT subband index */ - const int16_t stopLine, /* i : stop MDCT subband index */ - const float *pSpectralData, /* i : MDCT spectrum */ - float *pSpecDataSqaure /* o : Squared MDCT spectrum */ -) -{ - int16_t i; - - for ( i = startLine; i < stopLine; i++ ) - { - pSpecDataSqaure[i] = pSpectralData[i] * pSpectralData[i]; - } - - return; -} -#endif - /*-------------------------------------------------------------------* * IGF_calcSfbEnergy_flt() @@ -261,32 +89,6 @@ static void IGF_getMDCTSquare_flt( * calculate energy per SFB *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_calcSfbEnergy_flt( - const int16_t startSfb, /* i : start sfb index */ - const int16_t stopSfb, /* i : stop sfb index */ - const int16_t *swb_offset, /* i : IGF swb offset table */ - const float *pPowerSpectrum, /* i : power spectrum */ - float *sfbEnergy /* o : SFB energies, will be initialized inside this function */ -) -{ - int16_t sfb; - int16_t line; - - for ( sfb = startSfb; sfb < stopSfb; sfb++ ) - { - sfbEnergy[sfb] = 0.f; - - for ( line = swb_offset[sfb]; line < swb_offset[sfb + 1]; line++ ) - { - sfbEnergy[sfb] += pPowerSpectrum[line]; - } - } - - return; -} -#endif - /*-------------------------------------------------------------------* * IGF_setLinesToZero_flt() @@ -294,671 +96,6 @@ static void IGF_calcSfbEnergy_flt( * set power spectrum values to zero, needed for energy calculation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_setLinesToZero_flt( - const int16_t startLine, /* i : start MDCT subband index */ - const int16_t stopLine, /* i : stop MDCT subband index */ - const float *pSpectralData, /* i : original MDCT spectrum */ - float *squareSpecIGF /* i/o: prepared IGF energy spectrum */ -) -{ - int16_t i; - - for ( i = startLine; i < stopLine; i++ ) - { - if ( pSpectralData[i] != 0.f ) - { - squareSpecIGF[i] = 0.f; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGF_prep_flt() - * - * prepare IGF spectrum - *-------------------------------------------------------------------*/ - -static void IGF_prep_flt( - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i : IGF private data handle */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t *TCXNoise, /* i : TCX noise vector */ - float *igf_spec, /* o : prepared IGF spectrum */ - float *src_spec, /* i : source spectrum */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - H_IGF_GRID hGrid; - H_IGF_INFO hInfo; - int16_t i, tb, sfb, strt_cpy, tile_idx; - int16_t *swb_offset; - float *sel_spec; - - hInfo = &hPrivateData->igfInfo; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - swb_offset = hGrid->swb_offset; - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - int16_t tile_width, stop; - - strt_cpy = hGrid->sbWrap[tile_idx]; - - if ( element_mode > EVS_MONO ) - { - tile_width = swb_offset[hGrid->sfbWrap[tile_idx + 1]] - swb_offset[hGrid->sfbWrap[tile_idx]]; - stop = strt_cpy + tile_width; - } - else - { - stop = hGrid->startLine; - } - - if ( IGF_WHITENING_STRONG == hPrivateData->currWhiteningLevel[tile_idx] ) - { - float abs_sum; - abs_sum = 0.f; - - for ( i = strt_cpy; i < stop; i++ ) - { - abs_sum += (float) fabs( src_spec[i] ); - } - - tb = swb_offset[hGrid->sfbWrap[tile_idx]]; - - if ( abs_sum > 0.f ) - { - for ( i = strt_cpy; i < stop; i++ ) - { - igf_spec[tb++] = own_random( hInfo->nfSeed ); - } - } - else - { - for ( i = strt_cpy; i < stop; i++ ) - { - igf_spec[tb++] = 0.f; - } - } - } - else - { - if ( IGF_WHITENING_MID == hPrivateData->currWhiteningLevel[tile_idx] ) - { - if ( element_mode > EVS_MONO ) - { - if ( hPrivateData->n_noise_bands ) - { - IGF_replaceTCXNoise_2_new_flt( igf_spec, TCXNoise, strt_cpy, stop, hPrivateData->totalNoiseNrg_float, hPrivateData->n_noise_bands, hInfo->nfSeed ); - } - } - else - { - if ( hPrivateData->n_noise_bands ) - { - IGF_replaceTCXNoise_2_flt( igf_spec, TCXNoise, hGrid->minSrcSubband, hGrid->startLine, hPrivateData->totalNoiseNrg_float, hInfo->nfSeed ); - } - } - - sel_spec = igf_spec; - } - else - { - if ( element_mode > EVS_MONO ) - { - if ( hPrivateData->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_new_flt( src_spec, TCXNoise, strt_cpy, stop, hPrivateData->totalNoiseNrg_off_float, hPrivateData->n_noise_bands_off, hInfo->nfSeed ); - } - } - else - { - if ( hPrivateData->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_flt( src_spec, TCXNoise, hGrid->minSrcSubband, hGrid->startLine, hPrivateData->totalNoiseNrg_off_float, hInfo->nfSeed ); - } - } - - sel_spec = src_spec; - } - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) - { - igf_spec[tb] = sel_spec[strt_cpy]; - strt_cpy++; - } - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * IGF_prepStereo_flt() - * - * - *-------------------------------------------------------------------*/ - -static void IGF_prepStereo_flt( - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataL, /* i : IGF private data handle */ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataR, /* i : IGF private data handle */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t *TCXNoiseL, /* i : TCX noise vector */ - const int16_t *TCXNoiseR, /* i : TCX noise vector */ - float *igf_specL, /* o : prepared IGF spectrum */ - float *igf_specR, /* o : prepared IGF spectrum */ - float *src_specL, /* i : source spectrum */ - float *src_specR, /* i : source spectrum */ - const int16_t *coreMsMask /* i : line wise ms Mask */ -) -{ - H_IGF_GRID hGrid; - H_IGF_INFO hInfoL, hInfoR; - int16_t tb, sfb, strt_cpy, tile_idx; - int16_t *swb_offset; - float *sel_specL = NULL; - float *sel_specR = NULL; - const float c = SQRT2_OVER_2; /* M/S scaling factor */ - - hInfoL = &hPrivateDataL->igfInfo; - hInfoR = &hPrivateDataR->igfInfo; - hGrid = &hPrivateDataL->igfInfo.grid[igfGridIdx]; - swb_offset = hGrid->swb_offset; - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - int16_t tile_width, stop; - strt_cpy = hGrid->sbWrap[tile_idx]; - - tile_width = swb_offset[hGrid->sfbWrap[tile_idx + 1]] - swb_offset[hGrid->sfbWrap[tile_idx]]; - stop = strt_cpy + tile_width; - - if ( IGF_WHITENING_STRONG == hPrivateDataL->currWhiteningLevel[tile_idx] ) - { - tb = swb_offset[hGrid->sfbWrap[tile_idx]]; - - for ( tb = swb_offset[hGrid->sfbWrap[tile_idx]]; tb < swb_offset[hGrid->sfbWrap[tile_idx + 1]]; tb++ ) - { - igf_specL[tb] = own_random( hInfoL->nfSeed ); - } - } - else - { - if ( IGF_WHITENING_MID == hPrivateDataL->currWhiteningLevel[tile_idx] ) - { - if ( hPrivateDataL->n_noise_bands ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_float, hPrivateDataL->n_noise_bands, hInfoL->nfSeed ); - } - sel_specL = igf_specL; - } - else - { - if ( hPrivateDataL->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_off_float, hPrivateDataL->n_noise_bands_off, hInfoL->nfSeed ); - } - sel_specL = src_specL; - } - - if ( IGF_WHITENING_MID == hPrivateDataL->currWhiteningLevel[tile_idx] ) - { - if ( hPrivateDataR->n_noise_bands ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_float, hPrivateDataR->n_noise_bands, hInfoR->nfSeed ); - } - sel_specR = igf_specR; - } - else - { - if ( hPrivateDataR->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_off_float, hPrivateDataR->n_noise_bands_off, hInfoR->nfSeed ); - } - sel_specR = src_specR; - } - - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) - { - - if ( coreMsMask[tb] == 0 ) - { - if ( coreMsMask[strt_cpy] == 0 ) /* LR->LR */ - { - igf_specL[tb] = sel_specL[strt_cpy]; - } - else /* MS/DR -> LR */ - { - igf_specL[tb] = ( sel_specL[strt_cpy] + sel_specR[strt_cpy] ) * c; - } - } - else - { - if ( coreMsMask[strt_cpy] == 0 ) /* LR->MS/DR */ - { - igf_specL[tb] = ( sel_specL[strt_cpy] + sel_specR[strt_cpy] ) * c; - } - else /* MS/DR -> MS/DR */ - { - igf_specL[tb] = sel_specL[strt_cpy]; - } - } - strt_cpy++; - } - } - } - - strt_cpy = hGrid->sbWrap[tile_idx]; - - if ( IGF_WHITENING_STRONG == hPrivateDataR->currWhiteningLevel[tile_idx] ) - { - tb = swb_offset[hGrid->sfbWrap[tile_idx]]; - - for ( tb = swb_offset[hGrid->sfbWrap[tile_idx]]; tb < swb_offset[hGrid->sfbWrap[tile_idx + 1]]; tb++ ) - { - igf_specR[tb] = own_random( hInfoR->nfSeed ); - } - } - else - { - if ( hPrivateDataR->currWhiteningLevel[tile_idx] != hPrivateDataL->currWhiteningLevel[tile_idx] ) - { - if ( IGF_WHITENING_MID == hPrivateDataR->currWhiteningLevel[tile_idx] ) - { - if ( hPrivateDataL->n_noise_bands ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_float, hPrivateDataL->n_noise_bands, hInfoL->nfSeed ); - } - sel_specL = igf_specL; - } - else - { - if ( hPrivateDataL->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specL, TCXNoiseL, strt_cpy, stop, hPrivateDataL->totalNoiseNrg_off_float, hPrivateDataL->n_noise_bands_off, hInfoL->nfSeed ); - } - sel_specL = src_specL; - } - - if ( IGF_WHITENING_MID == hPrivateDataR->currWhiteningLevel[tile_idx] ) - { - if ( hPrivateDataR->n_noise_bands ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_float, hPrivateDataR->n_noise_bands, hInfoR->nfSeed ); - } - sel_specR = igf_specR; - } - else - { - if ( hPrivateDataR->n_noise_bands_off ) - { - IGF_replaceTCXNoise_2_new_flt( igf_specR, TCXNoiseR, strt_cpy, stop, hPrivateDataR->totalNoiseNrg_off_float, hPrivateDataR->n_noise_bands_off, hInfoR->nfSeed ); - } - sel_specR = src_specR; - } - } - - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) - { - - if ( coreMsMask[tb] == 0 ) - { - if ( coreMsMask[strt_cpy] == 0 ) /* LR->LR */ - { - igf_specR[tb] = sel_specR[strt_cpy]; - } - else /* MS/DR -> LR */ - { - igf_specR[tb] = ( sel_specL[strt_cpy] - sel_specR[strt_cpy] ) * c; - } - } - else - { - if ( coreMsMask[strt_cpy] == 0 ) /* LR->MS/DR */ - { - igf_specR[tb] = ( sel_specL[strt_cpy] - sel_specR[strt_cpy] ) * c; - } - else /* MS/DR -> MS/DR */ - { - igf_specR[tb] = sel_specR[strt_cpy]; - } - } - strt_cpy++; - } - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * IGF_calc_flt() - * - * calculates IGF energies - *-------------------------------------------------------------------*/ - -static void IGF_calc_flt( - const IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i/o: IGF private data handle */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const float *spectrum, /* i : MDCT spectrum */ - const float *igf_spec /* i : prepared IGF spectrum */ -) -{ - H_IGF_GRID hGrid; - float *igf_pN; - float *igf_sN; - float tmp[N_MAX_TCX]; - - set_zero( tmp, N_MAX_TCX ); - - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - igf_pN = hPrivateData->igf_pN_float; - igf_sN = hPrivateData->igf_sN_float; - - IGF_getMDCTSquare_flt( hGrid->startLine, hGrid->stopLine, spectrum, tmp ); - IGF_calcSfbEnergy_flt( hGrid->startSfb, hGrid->stopSfb, hGrid->swb_offset, tmp, igf_sN ); - IGF_getMDCTSquare_flt( hGrid->startLine, hGrid->stopLine, igf_spec, tmp ); - IGF_setLinesToZero_flt( hGrid->startLine, hGrid->stopLine, spectrum, tmp ); - IGF_calcSfbEnergy_flt( hGrid->startSfb, hGrid->stopSfb, hGrid->swb_offset, tmp, igf_pN ); - - return; -} - - -/*-------------------------------------------------------------------* - * IGF_appl_flt() - * - * apply IGF - *-------------------------------------------------------------------*/ - -static void IGF_appl_flt( - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData, /* i : IGF private data handle */ - const int16_t igfGridIdx, /* i : in case of ACELP->TCX switching, use 1.25 framelength*/ - float *pSpectralData, /* i/o: Q31 | MDCT spectrum */ - const float *igf_spec, /* i : Q31 | prepared IGF spectrum */ - float *virtualSpec, /* o : Q31 | virtual IGF spectrum, used for temp flattening */ - int16_t *flag_sparse, /* o : Q0 | temp flattening indicator */ - const int16_t bfi_apply_damping /* i : flag to indicate if damping for lost frames should be applied */ -) -{ - H_IGF_GRID hGrid; - int16_t tb; /* target subband */ - int16_t sfb, s_sfb, start_sfb, stop_sfb; - int16_t *swb_offset; - int16_t hopsize; - float tmp, dE; - float dN[IGF_MAX_SFB + 1]; - float gain[IGF_MAX_SFB]; - float dS[IGF_MAX_SFB]; - float width; - float sNlocal; - float E, sum, val; - float w0, w1, w2; - float *sN, *pN; - float gFactor; /* general SCF adaption */ - float fFactor; /* first SCF adaption */ - float lFactor; /* last SCF adaption */ - int16_t idx, idx1; - - /* initialize variables */ - w0 = 0.201f; - w1 = 0.389f; - w2 = 0.410f; - dE = 0.f; - - - /* more inits */ - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - sN = hPrivateData->igf_sN_float; - pN = hPrivateData->igf_pN_float; - start_sfb = hGrid->startSfb; - stop_sfb = hGrid->stopSfb; - gFactor = hGrid->gFactor_flt; - fFactor = hGrid->fFactor_flt; - lFactor = hGrid->lFactor_flt; - swb_offset = hGrid->swb_offset; - - - /* collect energy below hGrid->startLine: */ - for ( tb = hGrid->startLine - 24; tb < hGrid->startLine; tb++ ) - { - dE += pSpectralData[tb] * pSpectralData[tb]; - } - dE = (float) sqrt( dE / 24. ); - - hopsize = 2; - hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_OFF ) ? 4 : hopsize; - hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_MID ) ? 2 : hopsize; - hopsize = ( hPrivateData->currWhiteningLevel[0] == IGF_WHITENING_STRONG ) ? 1 : hopsize; - hopsize = min( hopsize, hPrivateData->igfInfo.maxHopsize ); - - if ( hPrivateData->restrict_hopsize ) - { - hopsize = min( hopsize, 2 ); - } - - if ( hopsize > 1 ) - { - for ( sfb = start_sfb; sfb < stop_sfb; sfb += hopsize ) - { - for ( tb = sfb + 1; tb < min( ( sfb + hopsize ), stop_sfb ); tb++ ) - { - sN[sfb] += sN[tb]; - pN[sfb] += pN[tb]; - sN[tb] = 0.f; - pN[tb] = 0.f; - } - } - } - - /* IGF_rescale_SCF */ - if ( hGrid->infoIsRefined ) - { - for ( sfb = start_sfb; sfb < stop_sfb; sfb += 2 ) - { - width = (float) ( swb_offset[sfb + 2] - swb_offset[sfb] ); - - tmp = (float) hPrivateData->igf_curr[sfb >> 1]; - tmp = (float) pow( 2.0, 0.25 * tmp - 4.0 ); - tmp = tmp * tmp; - - sNlocal = sN[sfb] + sN[sfb + 1]; - sNlocal /= width; - - tmp = (float) max( 0.001 * sNlocal, tmp - sNlocal ); - dN[sfb] = (float) sqrt( tmp ); - dN[sfb + 1] = dN[sfb]; - } - } - else - { - for ( sfb = start_sfb; sfb < stop_sfb; sfb++ ) - { - width = (float) ( swb_offset[sfb + 1] - swb_offset[sfb] ); - - tmp = (float) hPrivateData->igf_curr[sfb]; - tmp = (float) pow( 2.0, 0.25 * tmp - 4.0 ); - tmp = tmp * tmp; - - sNlocal = sN[sfb]; - sNlocal /= width; - - tmp = (float) max( 0.001 * sNlocal, tmp - sNlocal ); - dN[sfb] = (float) sqrt( tmp ); - } - } - - dS[start_sfb] = dN[start_sfb]; - /* first value with adaption to core energy: */ - if ( dE < dN[start_sfb] ) - { - dS[start_sfb] = dN[start_sfb] + fFactor * ( dE - dN[start_sfb] ); - } - /* last value with less energy: */ - dS[stop_sfb - 1] = lFactor * dN[stop_sfb - 1]; - - if ( hGrid->infoIsRefined && hopsize == 1 ) - { - /* apply filter to absolute energy values: */ - for ( sfb = start_sfb + 1; sfb < stop_sfb - 1; sfb++ ) - { - dS[sfb] = w0 * dN[sfb - 1] + w1 * dN[sfb] + w2 * dN[sfb + 1]; - } - } - else - { - for ( sfb = start_sfb + 1; sfb < stop_sfb - 1; sfb++ ) - { - dS[sfb] = dN[sfb]; - } - } - - for ( sfb = start_sfb; sfb < stop_sfb; sfb += hopsize ) - { - E = 0.f; - sum = 0; - for ( tb = 0; tb < hopsize; tb++ ) - { - idx1 = min( sfb + tb + 1, stop_sfb ); - idx = min( sfb + tb, stop_sfb ); - width = (float) ( swb_offset[idx1] - swb_offset[idx] ); - idx = min( sfb + tb, stop_sfb - 1 ); - val = dS[idx]; - E += val * val * width; - sum += width; - } - - dS[sfb] = (float) sqrt( ( E * hopsize ) / sum ); - dN[sfb] = gFactor * dS[sfb]; - - width = (float) ( swb_offset[sfb + 1] - swb_offset[sfb] ); - dN[sfb] = dN[sfb] * dN[sfb] * width; - gain[sfb] = 0.f; - - if ( pN[sfb] > 1.e-20f ) - { - gain[sfb] = (float) sqrt( dN[sfb] / pN[sfb] ); - } - - for ( s_sfb = sfb + 1; s_sfb < min( sfb + hopsize, stop_sfb ); s_sfb++ ) - { - gain[s_sfb] = gain[sfb]; - } - } - - /* tiling */ - for ( sfb = start_sfb; sfb < stop_sfb; sfb++ ) - { - - if ( bfi_apply_damping && hPrivateData->frameLossCounter > 0 ) - { - gain[sfb] = min( gain[sfb], 12.f ); - - if ( hPrivateData->frameLossCounter < 5 ) - { - gain[sfb] -= gain[sfb] / 8 * hPrivateData->frameLossCounter; - } - else - { - gain[sfb] /= 2; - } - } - - for ( tb = swb_offset[sfb]; tb < swb_offset[sfb + 1]; tb++ ) - { - if ( pSpectralData[tb] == 0.f ) - { - pSpectralData[tb] = igf_spec[tb] * gain[sfb]; - flag_sparse[tb - IGF_START_MN] = 1; - } - else - { - virtualSpec[tb - IGF_START_MN] = igf_spec[tb] * gain[sfb]; - flag_sparse[tb - IGF_START_MN] = 2; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * IGF_getWhiteSpectralData_flt() - * - * spectral whitening - *-------------------------------------------------------------------*/ - -static void IGF_getWhiteSpectralData_flt( - const float *in, /* i : MDCT spectrum */ - float *out, /* o : whitened spectrum */ - const int16_t start, /* i : start MDCT subband index */ - const int16_t stop, /* i : stop MDCT subband index */ - const int16_t level /* i : whitening strength */ -) -{ - int16_t i; - int16_t n; - int16_t j; - float div; - float ak; - - /* inits */ - div = 0.0f; - - for ( i = start; i < stop - level; i++ ) - { - ak = 1e-3f; - for ( j = i - level; j < i + level + 1; j++ ) - { - ak += in[j] * in[j]; - } - ak /= (float) ( level * 2 + 1 ); - - - n = (int16_t) max( 0.f, ( log( ak ) * INV_LOG_2 ) ); /* INV_LOG_2 = 1 / (float)log(2.0f)) */ - n >>= 1; /* sqrt() */ - div = (float) ( pow( 2.0f, (float) ( 21 - n ) ) ); - - - out[i] = in[i] * div; /* same as shift */ - } - - for ( ; i < stop; i++ ) - { - ak = 1e-3f; - - for ( j = i - level; j < stop; j++ ) - { - ak += in[j] * in[j]; - } - ak /= (float) ( stop - ( i - level ) ); - - - n = (int16_t) max( 0.f, ( log( ak ) * INV_LOG_2 ) ); /* INV_LOG_2 = 1 / (float)log(2.0f)) */ - n >>= 1; /* sqrt() */ - div = (float) ( pow( 2.0f, (float) ( 21 - n ) ) ); - - - out[i] = in[i] * div; /* same as shift */ - } - - return; -} -#endif /*-------------------------------------------------------------------* * IGF_RefineGrid_flt() @@ -966,42 +103,6 @@ static void IGF_getWhiteSpectralData_flt( * refines the IGF grid *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_RefineGrid_flt( - H_IGF_GRID hGrid /* i/o: IGF grid handle */ -) -{ - int16_t a[IGF_MAX_SFB + 1]; /* +1: because in for-loop one value too much will be extrapolated */ - int16_t sfb; - - set_s( a, 0, IGF_MAX_SFB + 1 ); - - - hGrid->infoIsRefined = 1; - for ( sfb = 0; sfb < hGrid->swb_offset_len; sfb++ ) - { - a[sfb * 2 + 0] = hGrid->swb_offset[sfb]; - a[sfb * 2 + 1] = (int16_t) round_f( hGrid->swb_offset[sfb] + 0.45f * ( hGrid->swb_offset[sfb + 1] - hGrid->swb_offset[sfb] ) ); - if ( a[sfb * 2 + 1] & 1 ) - { - a[sfb * 2 + 1]--; - } - } - hGrid->stopSfb = hGrid->stopSfb * 2; - for ( sfb = 0; sfb <= hGrid->stopSfb; sfb++ ) - { - hGrid->swb_offset[sfb] = a[sfb]; - } - - for ( sfb = 0; sfb <= hGrid->nTiles; sfb++ ) - { - hGrid->sfbWrap[sfb] *= 2; - } - - return; -} -#endif - /*-------------------------------------------------------------------* * IGFDecReadData_flt() @@ -1009,638 +110,32 @@ static void IGF_RefineGrid_flt( * reads whitening information from the bitstream *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFDecReadData_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ - Decoder_State *st, /* i : decoder state */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t p; - int16_t nT; - int16_t tmp; - - if ( hIGFDec != NULL ) - { - hPrivateData = &hIGFDec->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - nT = hGrid->nTiles; - tmp = -1; - - for ( p = 0; p < IGF_MAX_TILES; p++ ) - { - hPrivateData->currWhiteningLevel[p] = IGF_WHITENING_OFF; - } - - if ( isIndepFrame ) - { - tmp = 0; - } - else - { - tmp = get_next_indice( st, 1 ); - } - if ( tmp == 1 ) - { - for ( p = 0; p < nT; p++ ) - { - hPrivateData->currWhiteningLevel[p] = hPrivateData->prevWhiteningLevel[p]; - } - } - else - { - IGF_decode_whitening_level_flt( st, hPrivateData, 0 ); - if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) - { - tmp = 0; - } - else - { - tmp = get_next_indice( st, 1 ); - } - - if ( tmp == 1 ) - { - for ( p = 1; p < nT; p++ ) - { - IGF_decode_whitening_level_flt( st, hPrivateData, p ); - } - } - else - { - for ( p = 1; p < nT; p++ ) - { - hPrivateData->currWhiteningLevel[p] = hPrivateData->currWhiteningLevel[0]; - } - } - } - for ( p = 0; p < IGF_MAX_TILES; p++ ) - { - hPrivateData->prevWhiteningLevel[p] = hPrivateData->currWhiteningLevel[p]; - } - - /* IGF_decode_temp_flattening_trigger()*/ - hIGFDec->flatteningTrigger = get_next_indice( st, 1 ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecReadLevel_flt() - * - * read the IGF level information from the bitstream - *-------------------------------------------------------------------*/ - -/*! r: return igfAllZero flag indicating if no envelope is transmitted */ -int16_t IGFDecReadLevel_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Deccoder */ - Decoder_State *st, /* i : decoder state */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t isIndepFrame /* i : if 1: arith dec force reset, if 0: no reset */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t m_igfSfbStart; - int16_t IGFAllZero; - - IGFAllZero = 1; - - if ( hIGFDec != NULL ) - { - hPrivateData = &hIGFDec->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - m_igfSfbStart = hGrid->startSfb; - IGFAllZero = get_next_indice( st, 1 ); - - if ( IGFAllZero == 0 ) - { - mvs2s( hPrivateData->igf_curr, hPrivateData->igf_prev, hGrid->stopSfb ); - - IGFSCFDecoderDecode_ivas( &hPrivateData->hArithSCFdec, st, &hPrivateData->igf_curr[m_igfSfbStart], igfGridIdx, isIndepFrame ); - } - else - { - IGFSCFDecoderReset_ivas( &hPrivateData->hArithSCFdec ); - - set_s( &hPrivateData->igf_curr[m_igfSfbStart], 0, hGrid->stopSfb - m_igfSfbStart ); - } - } - - hIGFDec->infoIGFAllZero = IGFAllZero; - - return IGFAllZero; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecApplyMono_flt() - * - * apply the IGF decoder in mono - *-------------------------------------------------------------------*/ - -void IGFDecApplyMono_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ - float *spectrum, /* i/o: MDCT spectrum */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t bfi, /* i : frame loss == 1, frame good == 0 */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t i, whiteningLevel, nLinesToReset; - float igf_spec[IGF_MAX_GRANULE_LEN]; - int16_t nShift; - - set_zero( igf_spec, IGF_MAX_GRANULE_LEN ); - - /* initialize variables */ - if ( element_mode > EVS_MONO ) - { - whiteningLevel = IGF_MID_WHITENING_LEVEL2; - } - else - { - whiteningLevel = IGF_MID_WHITENING_LEVEL; - } - - nShift = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; - set_s( hIGFDec->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - set_f( hIGFDec->virtualSpec_float, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - - hPrivateData = &hIGFDec->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - hPrivateData->totalNoiseNrg_float = 0.f; - hPrivateData->n_noise_bands = 0; - hPrivateData->totalNoiseNrg_off_float = 0.f; - hPrivateData->n_noise_bands_off = 0; - hPrivateData->restrict_hopsize = 0; - - /* concealment counter */ - if ( bfi ) - { - hPrivateData->frameLossCounter++; - } - else - { - hPrivateData->frameLossCounter = 0; - } - - /* skip IGF processing if all IGF levels are zero */ - if ( !hIGFDec->infoIGFAllZero ) - { - for ( i = 0; i < hGrid->nTiles; i++ ) - { - if ( hPrivateData->currWhiteningLevel[i] == IGF_WHITENING_MID ) - { - if ( element_mode == EVS_MONO || !bfi ) - { - IGF_getWhiteSpectralData_flt( hPrivateData->pSpecFlat_float, igf_spec, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); - } - else - { - mvr2r( hPrivateData->pSpecFlat_float, igf_spec, hGrid->startLine ); - } - - hPrivateData->n_noise_bands = IGF_replaceTCXNoise_1_flr( igf_spec, hIGFDec->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateData->totalNoiseNrg_float ); - break; - } - } - - for ( i = 0; i < hGrid->nTiles; i++ ) - { - if ( hPrivateData->currWhiteningLevel[i] == IGF_WHITENING_OFF ) - { - hPrivateData->n_noise_bands_off = IGF_replaceTCXNoise_1_flr( hPrivateData->pSpecFlat_float, hIGFDec->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateData->totalNoiseNrg_off_float ); - break; - } - } - - /* apply IGF in three steps: */ - IGF_prep_flt( hPrivateData, igfGridIdx, hIGFDec->infoTCXNoise_ptr, igf_spec, hPrivateData->pSpecFlat_float, element_mode ); - IGF_calc_flt( hPrivateData, igfGridIdx, spectrum, igf_spec ); - IGF_appl_flt( hPrivateData, igfGridIdx, spectrum, igf_spec, hIGFDec->virtualSpec_float, hIGFDec->flag_sparse, 1 ); - } - - /* reset TCX noise indicator vector */ - nLinesToReset = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; - nLinesToReset = IGF_START_MX / nLinesToReset; - set_s( (int16_t *) ( hIGFDec->infoTCXNoise_ptr ), 0, nLinesToReset ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecApplyStereo_flt() - * - * apply the IGF decoder in stereo - *-------------------------------------------------------------------*/ - -void IGFDecApplyStereo_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDecL, /* i : instance handle of IGF Decoder */ - const IGF_DEC_INSTANCE_HANDLE hIGFDecR, /* i : instance handle of IGF Decoder */ - float *spectrumL, /* i/o: L MDCT spectrum */ - float *spectrumR, /* i/o: R MDCT spectrum */ - const int16_t igfGridIdx, /* i : in case of CELP->TCX switching, use 1.25 framelength */ - const int16_t *coreMsMask, - const int16_t restrict_hopsize, - const int16_t bfi, /* i : frame loss == 1, frame good == 0 */ - const int16_t bfi_apply_damping ) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateDataL, hPrivateDataR; - H_IGF_GRID hGrid; - int16_t i, whiteningLevel, nLinesToReset; - float igf_specL[IGF_MAX_GRANULE_LEN], igf_specR[IGF_MAX_GRANULE_LEN]; - int16_t nShift; - - set_f( igf_specL, 0.f, IGF_MAX_GRANULE_LEN ); - set_f( igf_specR, 0.f, IGF_MAX_GRANULE_LEN ); - - /* initialize variables */ - whiteningLevel = IGF_MID_WHITENING_LEVEL2; - - nShift = igfGridIdx == IGF_GRID_LB_SHORT ? 2 : 1; - set_s( hIGFDecL->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - set_s( hIGFDecR->flag_sparse, 0, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - set_f( hIGFDecL->virtualSpec_float, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - set_f( hIGFDecR->virtualSpec_float, 0.f, ( N_MAX_TCX - IGF_START_MN ) / nShift ); - - hPrivateDataL = &hIGFDecL->igfData; - hGrid = &hPrivateDataL->igfInfo.grid[igfGridIdx]; - hPrivateDataL->totalNoiseNrg_float = 0.f; - hPrivateDataL->n_noise_bands = 0; - hPrivateDataL->totalNoiseNrg_off_float = 0.f; - hPrivateDataL->n_noise_bands_off = 0; - hPrivateDataL->restrict_hopsize = restrict_hopsize; - - hPrivateDataR = &hIGFDecR->igfData; - hPrivateDataR->totalNoiseNrg_float = 0.f; - hPrivateDataR->n_noise_bands = 0; - hPrivateDataR->totalNoiseNrg_off_float = 0.f; - hPrivateDataR->n_noise_bands_off = 0; - hPrivateDataR->restrict_hopsize = restrict_hopsize; - - /* concealment counter */ - if ( bfi ) - { - hPrivateDataL->frameLossCounter++; - hPrivateDataR->frameLossCounter++; - } - else - { - hPrivateDataL->frameLossCounter = 0; - hPrivateDataR->frameLossCounter = 0; - } - - /* skip IGF processing if all IGF levels are zero */ - if ( !hIGFDecL->infoIGFAllZero || !hIGFDecR->infoIGFAllZero ) - { - for ( i = 0; i < hGrid->nTiles; i++ ) - { - if ( hPrivateDataL->currWhiteningLevel[i] == IGF_WHITENING_MID || hPrivateDataR->currWhiteningLevel[i] == IGF_WHITENING_MID ) - { - if ( !bfi ) - { - IGF_getWhiteSpectralData_flt( hPrivateDataL->pSpecFlat_float, igf_specL, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); - } - else - { - mvr2r( hPrivateDataL->pSpecFlat_float, igf_specL, hGrid->startLine ); - } - - hPrivateDataL->n_noise_bands = IGF_replaceTCXNoise_1_flr( igf_specL, hIGFDecL->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataL->totalNoiseNrg_float ); - - if ( !bfi ) - { - IGF_getWhiteSpectralData_flt( hPrivateDataR->pSpecFlat_float, igf_specR, hGrid->minSrcSubband, hGrid->startLine, whiteningLevel ); - } - else - { - mvr2r( hPrivateDataR->pSpecFlat_float, igf_specR, hGrid->startLine ); - } - - hPrivateDataR->n_noise_bands = IGF_replaceTCXNoise_1_flr( igf_specR, hIGFDecR->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataR->totalNoiseNrg_float ); - - break; - } - } - - for ( i = 0; i < hGrid->nTiles; i++ ) - { - if ( hPrivateDataL->currWhiteningLevel[i] == IGF_WHITENING_OFF || hPrivateDataR->currWhiteningLevel[i] == IGF_WHITENING_OFF ) - { - hPrivateDataL->n_noise_bands_off = IGF_replaceTCXNoise_1_flr( hPrivateDataL->pSpecFlat_float, hIGFDecL->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataL->totalNoiseNrg_off_float ); - - hPrivateDataR->n_noise_bands_off = IGF_replaceTCXNoise_1_flr( hPrivateDataR->pSpecFlat_float, hIGFDecR->infoTCXNoise_ptr, hGrid->minSrcSubband, hGrid->startLine, &hPrivateDataR->totalNoiseNrg_off_float ); - break; - } - } - - /* apply IGF in three steps: */ - IGF_prepStereo_flt( hPrivateDataL, hPrivateDataR, igfGridIdx, hIGFDecL->infoTCXNoise_ptr, hIGFDecR->infoTCXNoise_ptr, igf_specL, igf_specR, hPrivateDataL->pSpecFlat_float, hPrivateDataR->pSpecFlat_float, coreMsMask ); - - IGF_calc_flt( hPrivateDataL, igfGridIdx, spectrumL, igf_specL ); - IGF_calc_flt( hPrivateDataR, igfGridIdx, spectrumR, igf_specR ); - IGF_appl_flt( hPrivateDataL, igfGridIdx, spectrumL, igf_specL, hIGFDecL->virtualSpec_float, hIGFDecL->flag_sparse, bfi_apply_damping ); - IGF_appl_flt( hPrivateDataR, igfGridIdx, spectrumR, igf_specR, hIGFDecR->virtualSpec_float, hIGFDecR->flag_sparse, bfi_apply_damping ); - } - - /* reset TCX noise indicator vector */ - nLinesToReset = ( igfGridIdx == IGF_GRID_LB_SHORT ) ? 2 : 1; - nLinesToReset = IGF_START_MX / nLinesToReset; - set_s( (int16_t *) ( hIGFDecL->infoTCXNoise_ptr ), 0, nLinesToReset ); - set_s( (int16_t *) ( hIGFDecR->infoTCXNoise_ptr ), 0, nLinesToReset ); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecSetMode_flt() - * - * set mode is used to init the IGF dec with a new bitrate - *-------------------------------------------------------------------*/ - -void IGFDecSetMode_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i : instance handle of IGF Decoder */ - const int32_t total_brate, /* i : bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t defaultStartLine, /* i : default start subband index */ - const int16_t defaultStopLine, /* i : default stop subband index */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - - hPrivateData = &hIGFDec->igfData; - hIGFDec->isIGFActive = 0; - - if ( IGFCommonFuncsIGFConfiguration_flt( total_brate, bwidth, element_mode, &hPrivateData->igfInfo, rf_mode ) ) - { - IGFSCFDecoderOpen_ivas( &hPrivateData->hArithSCFdec, &hPrivateData->igfInfo, total_brate, bwidth, element_mode, rf_mode ); - - hIGFDec->infoIGFAllZero = 0; - hIGFDec->isIGFActive = 1; - hIGFDec->infoIGFStopLine = hPrivateData->igfInfo.grid[0].stopLine; - hIGFDec->infoIGFStartLine = hPrivateData->igfInfo.grid[0].startLine; - hIGFDec->infoIGFStopFreq = hPrivateData->igfInfo.grid[0].stopFrequency; - hIGFDec->infoIGFStartFreq = hPrivateData->igfInfo.grid[0].startFrequency; - - /* no refinement if maxHopsize is 1 */ - if ( hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_96000 && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_96000_CPE && - hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_128000 && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_128000_CPE ) - { - IGF_RefineGrid_flt( &hPrivateData->igfInfo.grid[IGF_GRID_LB_NORM] ); - IGF_RefineGrid_flt( &hPrivateData->igfInfo.grid[IGF_GRID_LB_TRAN] ); - IGF_RefineGrid_flt( &hPrivateData->igfInfo.grid[IGF_GRID_LB_SHORT] ); - } - /* IGFDecOutInformation(hIGFDec); */ - } - else - { - hIGFDec->infoIGFStopLine = defaultStopLine; - hIGFDec->infoIGFStartLine = defaultStartLine; - hIGFDec->infoIGFStopFreq = -1; - hIGFDec->infoIGFStartFreq = -1; - IVAS_ERROR( IVAS_ERR_INTERNAL, "IGFDecSetMode_flt: initialization error!" ); - } - - hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; - hIGFDec->infoTCXNoise_ptr = &hIGFDec->infoTCXNoise_evs[0]; - hIGFDec->virtualSpec_float = &hIGFDec->virtualSpecBuf[0]; - hIGFDec->igfData.pSpecFlat_float = &hIGFDec->igfData.pSpecFlatBuf[0]; - hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; - - return; -} -#endif /*-------------------------------------------------------------------* * IGFDecUpdateInfo_flt() * * updates the start/stop frequency of IGF according to igfGridIdx *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFDecUpdateInfo_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ - const int16_t subFrameIdx, /* i : index of subframe */ - const int16_t igfGridIdx /* i : IGF grid index */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - - hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; - hIGFDec->infoTCXNoise_ptr = &hIGFDec->infoTCXNoise_evs[0]; - hIGFDec->virtualSpec_float = &hIGFDec->virtualSpecBuf[0]; - hIGFDec->igfData.pSpecFlat_float = &hIGFDec->igfData.pSpecFlatBuf[0]; - hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; - - if ( igfGridIdx == IGF_GRID_LB_SHORT ) - { - IGFDecRestoreTCX10SubFrameData_flt( hIGFDec, subFrameIdx ); - } - - hPrivateData = &hIGFDec->igfData; - if ( hIGFDec->isIGFActive ) - { - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - hIGFDec->infoIGFStartFreq = hGrid->startFrequency; - hIGFDec->infoIGFStopFreq = hGrid->stopFrequency; - hIGFDec->infoIGFStartLine = hGrid->startLine; - hIGFDec->infoIGFStopLine = hGrid->stopLine; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecReplicateTCX10State_flt() - * - * - *-------------------------------------------------------------------*/ - -void IGFDecReplicateTCX10State_flt( - IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: instance handle of IGF Decoder */ -) -{ - mvs2s( &hIGFDec->flag_sparseBuf[( N_MAX_TCX - IGF_START_MN ) / 2], &hIGFDec->flag_sparseBuf[0], ( N_MAX_TCX - IGF_START_MN ) / 2 ); - mvs2s( &hIGFDec->infoTCXNoise_evs[( IGF_START_MX ) / 2], &hIGFDec->infoTCXNoise_evs[0], ( IGF_START_MX ) / 2 ); - mvr2r( &hIGFDec->virtualSpecBuf[( N_MAX_TCX - IGF_START_MN ) / 2], &hIGFDec->virtualSpecBuf[0], ( N_MAX_TCX - IGF_START_MN ) / 2 ); - mvr2r( &hIGFDec->igfData.pSpecFlatBuf[IGF_START_MX / 2], &hIGFDec->igfData.pSpecFlatBuf[0], IGF_START_MX / 2 ); - - hIGFDec->igfData.igfInfo.nfSeedBuf[0] = hIGFDec->igfData.igfInfo.nfSeedBuf[1]; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGFDecCopyLPCFlatSpectrum_flt() - * - * copy the LPC flat spectrum to IGF buffer - *-------------------------------------------------------------------*/ - -void IGFDecCopyLPCFlatSpectrum_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ - const float *pSpectrumFlat, /* i : LPC flattend spectrum from TCX dec */ - const int16_t igfGridIdx /* i : IGF grid index */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t i; - - if ( hIGFDec ) - { - hPrivateData = &hIGFDec->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - - for ( i = hGrid->minSrcSubband - IGF_MID_WHITENING_LEVEL2; i < hGrid->startLine; i++ ) - { - hPrivateData->pSpecFlat_float[i] = pSpectrumFlat[i] * 1024.f; - } - } - return; -} -#endif /*-------------------------------------------------------------------* * IGFDecStoreTCX10SubFrameData_flt() * * store the IGF bitstream information for TCX10 subframes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFDecStoreTCX10SubFrameData_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ - const int16_t subFrameIdx /* i : index of subframe */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - - hPrivateData = &hIGFDec->igfData; - - /* store igf energies for subframe*/ - mvs2s( hPrivateData->igf_curr, hPrivateData->igf_curr_subframe[subFrameIdx][0], IGF_MAX_SFB ); - mvs2s( hPrivateData->igf_prev, hPrivateData->igf_prev_subframe[subFrameIdx], IGF_MAX_SFB ); - - /* store spectral whitening information for current subframe */ - mvs2s( hPrivateData->currWhiteningLevel, hPrivateData->currWhiteningLevel_subframe[subFrameIdx], IGF_MAX_TILES ); - mvs2s( hPrivateData->prevWhiteningLevel, hPrivateData->prevWhiteningLevel_subframe[subFrameIdx], IGF_MAX_TILES ); - - /* store flattening trigger for current subframe */ - hPrivateData->igf_flatteningTrigger_subframe[subFrameIdx] = hIGFDec->flatteningTrigger; - - return; -} -#endif /*-------------------------------------------------------------------* * IGFDecRestoreTCX10SubFrameData_flt() * * restore the IGF bitstream information for TCX10 subframes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFDecRestoreTCX10SubFrameData_flt( - const IGF_DEC_INSTANCE_HANDLE hIGFDec, /* i/o: instance handle of IGF Decoder */ - const int16_t subFrameIdx /* i : index of subframe */ -) -{ - IGF_DEC_PRIVATE_DATA_HANDLE hPrivateData; - - hPrivateData = &hIGFDec->igfData; - - /* store igf energies for subframe*/ - mvs2s( hPrivateData->igf_curr_subframe[subFrameIdx][0], hPrivateData->igf_curr, IGF_MAX_SFB ); - mvs2s( hPrivateData->igf_prev_subframe[subFrameIdx], hPrivateData->igf_prev, IGF_MAX_SFB ); - - /* store spectral whitening information for current subframe */ - mvs2s( hPrivateData->currWhiteningLevel_subframe[subFrameIdx], hPrivateData->currWhiteningLevel, IGF_MAX_TILES ); - mvs2s( hPrivateData->prevWhiteningLevel_subframe[subFrameIdx], hPrivateData->prevWhiteningLevel, IGF_MAX_TILES ); - - /* restore flattening trigger for current subframe */ - hIGFDec->flatteningTrigger = hPrivateData->igf_flatteningTrigger_subframe[subFrameIdx]; - hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[subFrameIdx * ( N_MAX_TCX - IGF_START_MN ) / 2]; - hIGFDec->infoTCXNoise_ptr = &hIGFDec->infoTCXNoise_evs[subFrameIdx * ( IGF_START_MX ) / 2]; - hIGFDec->virtualSpec_float = &hIGFDec->virtualSpecBuf[subFrameIdx * ( N_MAX_TCX - IGF_START_MN ) / 2]; - hIGFDec->igfData.pSpecFlat_float = &hIGFDec->igfData.pSpecFlatBuf[subFrameIdx * IGF_START_MX / 2]; - hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[subFrameIdx]; - - return; -} -#endif /*-----------------------------------------------------------------------* * init_igf_dec_flt() * * Initialize IGF decoder parameters *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void init_igf_dec_flt( - IGF_DEC_INSTANCE_HANDLE hIGFDec /* i/o: IGF decoder handle */ -) -{ - set_s( (int16_t *) ( hIGFDec->infoTCXNoise_evs ), 0, IGF_START_MX ); - set_f( hIGFDec->igfData.pSpecFlatBuf, 0, IGF_START_MX ); - hIGFDec->igfData.igfInfo.nfSeedBuf[0] = 9733; - hIGFDec->igfData.igfInfo.nfSeedBuf[1] = 9733; - hIGFDec->igfData.igfInfo.nfSeed = &hIGFDec->igfData.igfInfo.nfSeedBuf[0]; - hIGFDec->igfData.pSpecFlat_float = &hIGFDec->igfData.pSpecFlatBuf[0]; - hIGFDec->flag_sparse = &hIGFDec->flag_sparseBuf[0]; - hIGFDec->infoTCXNoise_ptr = &hIGFDec->infoTCXNoise_evs[0]; - hIGFDec->virtualSpec_float = &hIGFDec->virtualSpecBuf[0]; - - return; -} -#endif /*-----------------------------------------------------------------------* * get_igf_startline_flt() * * *-----------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -/*! r: IGF start line */ -int16_t get_igf_startline_flt( - Decoder_State *st, /* i : decoder state */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_frameTCX /* i : full band frame length */ -) -{ - int16_t igf_startline; - - if ( st->igf == 0 ) - { - if ( st->narrowBand == 0 ) - { - /* minimum needed for output with sampling rates lower then the - nominal sampling rate */ - igf_startline = min( L_frameTCX, L_frame ); - } - else - { - igf_startline = L_frameTCX; - } - } - else - { - igf_startline = min( st->hIGFDec->infoIGFStartLine, L_frameTCX ); - } - - return igf_startline; -} -#endif diff --git a/lib_dec/igf_dec_fx.c b/lib_dec/igf_dec_fx.c index cc407c72f..7dd389164 100644 --- a/lib_dec/igf_dec_fx.c +++ b/lib_dec/igf_dec_fx.c @@ -16,11 +16,8 @@ #include "stat_dec.h" #include "basop_util.h" #define MID 57 /* (.89*1<<6)*/ -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED /**********************************************************************/ /* get scalefactor of an Word32 array with condition **************************************************************************/ @@ -4417,4 +4414,3 @@ Word16 get_igf_startline( return igf_startline; } -#endif diff --git a/lib_dec/igf_scf_dec.c b/lib_dec/igf_scf_dec.c index 244a73d11..1c0985cf4 100644 --- a/lib_dec/igf_scf_dec.c +++ b/lib_dec/igf_scf_dec.c @@ -39,291 +39,3 @@ #include "prot.h" #include "stat_dec.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGFSCFDecoderOpen_ivas() - * - * initialization of an instance of this module, pass a ptr to a hPublicData - *---------------------------------------------------------------------*/ - -void IGFSCFDecoderOpen_ivas( - IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data */ - H_IGF_INFO hIgfInfo, /* i : IGF info handle */ - const int32_t total_brate, - const int16_t bwidth, - const int16_t element_mode, - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - - hPublicData->scfCountLongBlock[0] = hIgfInfo->grid[0].swb_offset_len - 1; - hPublicData->scfCountLongBlock[1] = hIgfInfo->grid[1].swb_offset_len - 1; - hPublicData->scfCountLongBlock[2] = hIgfInfo->grid[2].swb_offset_len - 1; - hPublicData->t = 0; /* protect against the invalid request of starting decoding with a dependent block */ - - IGFCommonFuncsIGFGetCFTables_flt( total_brate, bwidth, element_mode, rf_mode, &hPublicData->cf_se00, &hPublicData->cf_se01, &hPublicData->cf_off_se01, &hPublicData->cf_se02, &hPublicData->cf_off_se02, &hPublicData->cf_se10, &hPublicData->cf_off_se10, &hPublicData->cf_se11, &hPublicData->cf_off_se11 ); - - return; -} - -/*---------------------------------------------------------------------* - * quant_ctx() - * - * - *---------------------------------------------------------------------*/ - -static int16_t quant_ctx( - const int16_t ctx ) -{ - /* - ctx ... -5 -4 -3 -2 -1 0 1 2 3 4 5 ... - Q(ctx)... -3 -3 -3 -2 -1 0 1 2 3 3 3 ... - */ - if ( abs( ctx ) <= 3 ) - { - return ctx; - } - else if ( ctx > 3 ) - { - return 3; - } - else - { - /* ctx < -3 */ - return -3; - } -} - -/*---------------------------------------------------------------------* - * arith_decode_bits() - * - * - *---------------------------------------------------------------------*/ - -static int16_t arith_decode_bits( - Tastat *ac_state, /* i/o: arith coding state */ - Decoder_State *st, /* i : pointer to decoder state */ - const int16_t nBits /* i : number of bits to decode */ -) -{ - int16_t i, x; - uint16_t bit; - - x = 0; - for ( i = 0; i < nBits; ++i ) - { - /* decode one bit using the new raw AC function */ - ari_decode_14bits_bit_ext_ivas( st, &bit, ac_state ); - x = ( x << 1 ) | bit; - } - - return x; -} - - -/*---------------------------------------------------------------------* - * arith_decode_residual() - * - * - *---------------------------------------------------------------------*/ - -static int16_t arith_decode_residual( - Tastat *ac_state, /* i/o: arith coding state */ - Decoder_State *st, /* i : pointer to decoder state */ - const uint16_t *cumulativeFrequencyTable, /* i : cumulative frequency table to be used */ - const int16_t tableOffset /* i : offset used to align the table */ -) -{ - uint16_t val; - int16_t x, extra, extra_tmp; - - /* decode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ - ari_decode_14bits_s27_ext_ivas( st, &val, ac_state, cumulativeFrequencyTable ); - - /* meaning of the values of val: */ - /* esc_{0} IGF_MIN_ENC_SEPARATE ... IGF_MAX_ENC_SEPARATE esc_{IGF_SYMBOLS_IN_TABLE - 1} */ - if ( ( val != 0 ) && ( val != IGF_SYMBOLS_IN_TABLE - 1 ) ) - { - x = ( val - 1 ) + IGF_MIN_ENC_SEPARATE; - - - x -= tableOffset; - return x; - } - - /* decode one of the tails of the distribution */ - /* decode extra with 4 bits */ - extra = arith_decode_bits( ac_state, st, 4 ); - if ( extra == 15 ) - { - /* escape code 15 to indicate extra >= 15 */ - /* decode addtional extra with 6 bits */ - extra_tmp = arith_decode_bits( ac_state, st, 6 ); - if ( extra_tmp == 63 ) - { - /* escape code 63 to indicate extra_tmp >= 63 */ - /* decode safety extra with 7 bits */ - extra_tmp = 63 + arith_decode_bits( ac_state, st, 7 ); - } - extra = 15 + extra_tmp; - } - - if ( val == 0 ) - { - /* escape code 0 to indicate x <= IGF_MIN_ENC_SEPARATE - 1 */ - x = ( IGF_MIN_ENC_SEPARATE - 1 ) - extra; - } - else - { - /* escape code (IGF_SYMBOLS_IN_TABLE - 1) to indicate x >= IGF_MAX_ENC_SEPARATE + 1 */ - x = ( IGF_MAX_ENC_SEPARATE + 1 ) + extra; - } - - x -= tableOffset; - - return x; -} - - -/*---------------------------------------------------------------------* - * decode_sfe_vector() - * - * - *---------------------------------------------------------------------*/ - -static void decode_sfe_vector( - IGFSCFDEC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ - Decoder_State *st, /* i : pointer to decoder state */ - const int16_t t, /* i : frame counter reset to 0 at each independent frame */ - const int16_t *prev_x, /* i : previous vector */ - int16_t *x, /* i/o: current vector to decode */ - const int16_t length /* i : number of elements to decode */ -) -{ - /* - f - ^ - | d a x - | c b - | e --> t - */ - uint16_t pred; - int16_t f, ctx, ctx_f, ctx_t; - - for ( f = 0; f < length; f++ ) - { - if ( t == 0 ) - { - if ( f == 0 ) - { - /* decode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ - ari_decode_14bits_s27_ext_ivas( st, &pred, &hPrivateData->acState, hPrivateData->cf_se00 ); - x[f] = pred << 2; - x[f] += arith_decode_bits( &hPrivateData->acState, st, 2 ); /* LSBs as 2 bit raw */ - } - else if ( f == 1 ) - { - pred = x[f - 1]; /* pred = b */ - x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, hPrivateData->cf_se01, hPrivateData->cf_off_se01 ); - } - else - { - /* f >= 2 */ - pred = x[f - 1]; /* pred = b */ - ctx = quant_ctx( x[f - 1] - x[f - 2] ); /* Q(b - e) */ - x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, &hPrivateData->cf_se02[( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx )], hPrivateData->cf_off_se02[IGF_CTX_OFFSET + ctx] ); - } - } - else - { - /* t == 1 */ - if ( f == 0 ) - { - pred = prev_x[f]; /* pred = a */ - x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, hPrivateData->cf_se10, hPrivateData->cf_off_se10 ); - } - else - { - /* (t == 1) && (f >= 1) */ - pred = prev_x[f] + x[f - 1] - prev_x[f - 1]; /* pred = a + b - c */ - ctx_f = quant_ctx( prev_x[f] - prev_x[f - 1] ); /* Q(a - c) */ - ctx_t = quant_ctx( x[f - 1] - prev_x[f - 1] ); /* Q(b - c) */ - x[f] = pred + arith_decode_residual( &hPrivateData->acState, st, &hPrivateData->cf_se11[( IGF_SYMBOLS_IN_TABLE + 1 ) * IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx_f )], hPrivateData->cf_off_se11[IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_CTX_OFFSET + ctx_f )] ); - } - } - if ( x[f] < 0 ) - { - x[f] = 0; - st->BER_detect = 1; - } - if ( x[f] > 91 ) - { - x[f] = 91; - st->BER_detect = 1; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * IGFSCFDecoderReset_ivas() - * - * resets the internal decoder memory (context memory) - *---------------------------------------------------------------------*/ - -void IGFSCFDecoderReset_ivas( - IGFSCFDEC_INSTANCE_HANDLE hPublicData /* i/o: handle to public data or NULL in case there was no instance created */ -) -{ - /* reset of coder */ - hPublicData->t = 0; - - /* we do not need to fill hPublicData->prev with zeros, because when t = 0 no previous information is used */ - - return; -} - - -/*---------------------------------------------------------------------* - * IGFSCFDecoderDecode_ivas() - * - * main IGF decoder function - *---------------------------------------------------------------------*/ - -void IGFSCFDecoderDecode_ivas( - IGFSCFDEC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ - Decoder_State *st, /* i/o: pointer to decoder state */ - int16_t *sfe, /* o : ptr to an array which will contain the decoded quantized coefficients */ - const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const int16_t indepFlag /* i : if 1 on input the decoder will be forced to reset, - if 0 on input the decoder will be forced to encode without a reset */ -) -{ - /* insert data */ - hPublicData->bitsRead = st->next_bit_pos; - ari_start_decoding_14bits_ivas( st, &hPublicData->acState ); /* start AC decoding */ - - /* check if coder needs a reset and do it if neccessary */ - if ( indepFlag ) - { - /* reset of coder */ - IGFSCFDecoderReset_ivas( hPublicData ); - } - - decode_sfe_vector( hPublicData, st, hPublicData->t, hPublicData->prev, sfe, hPublicData->scfCountLongBlock[igfGridIdx] ); - - get_next_indice_tmp( st, -14 ); /* finish decoding (arith_decode_flush) return back the least significant 14 bits to the bitstream */ - - /* advance history */ - mvs2s( sfe, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); - hPublicData->t++; - - hPublicData->bitsRead = st->next_bit_pos - hPublicData->bitsRead; - - return; -} -#endif diff --git a/lib_dec/igf_scf_dec_fx.c b/lib_dec/igf_scf_dec_fx.c index 73af50879..1ddb9950a 100644 --- a/lib_dec/igf_scf_dec_fx.c +++ b/lib_dec/igf_scf_dec_fx.c @@ -12,7 +12,6 @@ #include "stat_dec.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /**********************************************************************/ /** initialization of an instance of this module **************************************************************************/ @@ -332,4 +331,3 @@ void IGFSCFDecoderDecode( hPublicData->bitsRead = sub( st->next_bit_pos, hPublicData->bitsRead ); move16(); } -#endif diff --git a/lib_dec/init_dec.c b/lib_dec/init_dec.c index 4e4e2c3ba..3c20d7b27 100644 --- a/lib_dec/init_dec.c +++ b/lib_dec/init_dec.c @@ -48,718 +48,18 @@ * * Initialization of static variables for the decoder *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error init_decoder( - Decoder_State *st, /* o : Decoder static variables structure */ - const int16_t idchan, /* i : channel ID */ - const MC_MODE mc_mode /* i : MC mode */ -) -{ - int16_t i; - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * General parameters - *-----------------------------------------------------------------*/ - - st->codec_mode = MODE1; - st->last_codec_mode = MODE1; - st->core = ACELP_CORE; - st->L_frame = L_FRAME; - st->extl = -1; - st->extl_orig = -1; - st->extl_brate_orig = 0; - st->last_bits_frame_nominal = -1; - st->total_brate = ACELP_8k00; - st->last_total_brate = -1; - st->last_total_brate_ber = -1; - st->core_brate = ACELP_8k00; - st->ini_frame = 0; - st->bwidth = NB; - st->last_bwidth = NB; - st->extl_brate = 0; - - st->coder_type = GENERIC; - st->last_coder_type = GENERIC; - st->inactive_coder_type_flag = 0; - st->last_L_frame = st->L_frame; - st->last_core_brate = st->core_brate; - st->last_core = -1; - st->last_extl = st->extl; - - st->flag_ACELP16k = set_ACELP_flag_IVAS( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 ); - - /*-----------------------------------------------------------------* - * ACELP core parameters - *-----------------------------------------------------------------*/ - - /* LSF initilalizations */ - mvr2r( GEWB_Ave, st->mem_AR, M ); - - set_f( st->mem_MA, 0, M ); - set_f( st->dispMem, 0, 8 ); - - st->tilt_code = 0.0f; - st->gc_threshold = 0.0f; - st->last_good = UNVOICED_CLAS; - st->clas_dec = UNVOICED_CLAS; - st->low_rate_mode = 0; - st->last_low_rate_mode = 0; - - st->lp_gainp = 0.0f; - st->lp_gainc = 0.0f; - - set_f( st->old_exc, 0, L_EXC_MEM_DEC ); - - /* AVQ pre-quantizer memory */ - st->mem_preemp_preQ = 0.0f; - st->last_nq_preQ = 0; - st->last_code_preq = 0; - st->use_acelp_preq = 0; - - st->mem_deemph = 0.0f; - - set_f( st->mem_syn1, 0, M ); - set_f( st->mem_syn2, 0, M ); - st->stab_fac = 0.0f; - st->stab_fac_smooth = 0.0f; - set_f( st->agc_mem2, 0, 2 ); - set_f( st->mem_syn3, 0, M ); - st->stab_fac_smooth_lt = 0.0f; - st->log_energy_diff_lt = 0.0f; - st->log_energy_old = 0.0f; - - mvr2r( GEWB_Ave, st->lsf_old, M ); - lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); - - st->mid_lsf_int = 0; - st->safety_net = 0; - - /* FEC */ - st->scaling_flag = 0; - st->lp_ener_FEC_av_float = 5.0e5f; - st->lp_ener_FEC_max_float = 5.0e5f; - st->prev_bfi = 0; - st->lp_ener_bfi = 60.0f; - st->old_enr_LP_float = 0.0f; - st->lp_ener = 0.0f; - st->enr_old = 0.0f; - st->bfi_pitch = (float) L_SUBFR; - st->bfi_pitch_frame = L_FRAME; - set_f( st->mem_syn_clas_estim, 0.0f, L_SYN_MEM_CLAS_ESTIM ); - st->last_con_tcx = 0; - - for ( i = 0; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i] = (float) L_SUBFR; - } - - st->upd_cnt = MAX_UPD_CNT; - - mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); - mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); - mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); - - st->seed_acelp = RANDOM_INITSEED; - st->seed = RANDOM_INITSEED; - st->nbLostCmpt = 0; - st->decision_hyst = 0; - - /* Stationary noise UV modification */ - st->unv_cnt = 0; - st->ge_sm = 10; - st->uv_count = 0; - st->act_count = 3; - mvr2r( st->lsp_old, st->lspold_s, M ); - st->noimix_seed = RANDOM_INITSEED; - st->min_alpha = 1; - st->exc_pe = 0; - - st->prev_coder_type = GENERIC; - st->tilt_wb = 0.0f; - - st->last_voice_factor = 0.0f; - set_f( st->prev_synth_buffer, 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); - - st->old_bfi_cnt = 0; - - /*-----------------------------------------------------------------* - * parameters for AC mode (GSC) - *-----------------------------------------------------------------*/ - - st->GSC_noisy_speech = 0; - st->GSC_IVAS_mode = 0; - st->Last_GSC_noisy_speech_flag = 0; - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); - } - - GSC_dec_init_ivas( st->hGSCDec ); - } - else - { - st->hGSCDec = NULL; - } - - /*-----------------------------------------------------------------* - * parameters for fast recovery (WI) - *-----------------------------------------------------------------*/ - - if ( st->output_Fs == 16000 && st->element_mode == EVS_MONO ) - { - if ( ( st->hWIDec = (WI_DEC_HANDLE) malloc( sizeof( WI_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FEC WI\n" ) ); - } - - set_f( st->hWIDec->old_exc2, 0, L_EXC_MEM ); - set_f( st->hWIDec->old_syn2, 0, L_EXC_MEM ); - } - else - { - st->hWIDec = NULL; - } - - /*-----------------------------------------------------------------* - * NB/formant post-filter - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); - } - - Init_post_filter_ivas( st->hPFstat ); - st->psf_lp_noise = 0.0f; - } - else - { - st->hPFstat = NULL; - } - - /*-----------------------------------------------------------------* - * HF (6-7kHz) (zero) BWE parameters - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); - } - - hf_synth_init( st->hBWE_zero ); - } - else - { - st->hBWE_zero = NULL; - } - - - /*-----------------------------------------------------------------* - * LD music post-filter - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); - } - - music_postfilt_init_flt( st->hMusicPF ); - } - else - { - st->hMusicPF = NULL; - } - - /*-----------------------------------------------------------------* - * CNG and DTX - *-----------------------------------------------------------------*/ - - st->first_CNG = 0; - st->cng_type = -1; - st->last_vad = 0; - st->last_active_brate = ACELP_7k20; - st->last_CNG_L_frame = L_FRAME; - - st->active_cnt = 20; - - if ( idchan == 0 && ( st->element_mode == EVS_MONO || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) ) - { - if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); - } - - td_cng_dec_init( st ); - } - else - { - st->hTdCngDec = NULL; - } - - st->masa_sid_format = 0; - - /*-----------------------------------------------------------------* - * HQ core parameters - *-----------------------------------------------------------------*/ - - st->prev_old_bfi = 0; - set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); - set_f( st->previoussynth, 0, L_FRAME48k ); - - if ( st->element_mode == EVS_MONO ) - { - set_f( st->old_synth_sw, 0.0f, NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); - } - - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT || st->element_mode == IVAS_SCE || st->element_mode == EVS_MONO ) ) - { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); - } - - /* HQ core initialization */ - HQ_core_dec_init_flt( st->hHQ_core ); - - if ( st->element_mode == EVS_MONO ) - { - /* HQ NB FEC initialization */ - if ( ( st->hHQ_nbfec = (HQ_NBFEC_HANDLE) malloc( sizeof( HQ_NBFEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ NB FEC\n" ) ); - } - HQ_nbfec_init_flt( st->hHQ_nbfec ); - } - else - { - st->hHQ_nbfec = NULL; - } - } - else - { - st->hHQ_core = NULL; - st->hHQ_nbfec = NULL; - } - - /*-----------------------------------------------------------------* - * TBE parameters - *-----------------------------------------------------------------*/ - - if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } - - td_bwe_dec_init( st->hBWE_TD, st->extl, st->output_Fs ); - } - else - { - st->hBWE_TD = NULL; - } - - st->old_bwe_delay = -1; - set_f( st->hb_prev_synth_buffer, 0, NS2SA( 48000, DELAY_BWE_TOTAL_NS ) ); - - /*-----------------------------------------------------------------* - * SWB BWE parameters - *-----------------------------------------------------------------*/ - - if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - - fd_bwe_dec_init_flt( st->hBWE_FD ); - } - else - { - st->hBWE_FD = NULL; - } - - /*-----------------------------------------------------------------* - * WB/SWB bandwidth switching parameters - *-----------------------------------------------------------------*/ - - st->tilt_swb = 0.0f; - st->prev_ener_shb = 0.0f; - st->prev_enerLH = 0.0f; - st->enerLH = 0.0f; - st->enerLL = 0.0f; - st->prev_enerLL = 0.0f; - st->prev_fractive = 0; - st->prev_bws_cnt = 0; - st->bws_cnt = N_WS2N_FRAMES; - st->bws_cnt1 = N_NS2W_FRAMES; - st->attenu1 = 0.1f; - st->last_inner_frame = L_FRAME8k; - - /*-----------------------------------------------------------------* - * HR SWB BWE parameters - *-----------------------------------------------------------------*/ - - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hBWE_FD_HR = (HR_BWE_DEC_HANDLE) malloc( sizeof( HR_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HR BWE\n" ) ); - } - - hr_bwe_dec_init_flt( st->hBWE_FD_HR ); - } - else - { - st->hBWE_FD_HR = NULL; - } - - /*----------------------------------------------------------------------------------* - * AMR-WB IO mode parameters - *----------------------------------------------------------------------------------*/ - - if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) - { - if ( ( st->hAmrwb_IO = (AMRWB_IO_DEC_HANDLE) malloc( sizeof( AMRWB_IO_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); - } - - /* AMR-WB IO init */ - amr_wb_dec_init( st->hAmrwb_IO ); - - /* AMR-WB IO HF synth init */ - hf_synth_amr_wb_init( st->hAmrwb_IO ); - } - else - { - st->hAmrwb_IO = NULL; - } - - /*-----------------------------------------------------------------* - * channel-aware mode parameters - *-----------------------------------------------------------------*/ - - set_f( st->tilt_code_dec, 0.0f, NB_SUBFR16k ); - - st->use_partial_copy = 0; - st->prev_use_partial_copy = 0; - st->rf_flag = 0; - st->rf_flag_last = 0; - st->prev_rf_frame_type = 0; - st->next_coder_type = 0; - - st->rf_target_bits = 0; - - st->rf_indx_nelp_fid = 0; - st->rf_indx_nelp_iG1 = 0; - st->rf_indx_nelp_iG2[0] = 0; - st->rf_indx_nelp_iG2[1] = 0; - st->rf_indx_tbeGainFr = 0; - - /*-----------------------------------------------------------------* - * Bass post-filter parameters - *-----------------------------------------------------------------*/ - - st->bpf_off = 0; - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); - } - - bass_psfilter_init( st->hBPF ); - } - else - { - st->hBPF = NULL; - } - - /*-----------------------------------------------------------------* - * FD BPF & resampling tools parameters - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - /* open analysis for max. sampling rate 48kHz */ - if ( ( error = openCldfb_ivas( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* open analysis BPF for max. internal sampling rate 16kHz */ - if ( ( error = openCldfb_ivas( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - st->cldfbAna = NULL; - st->cldfbBPF = NULL; - } - - /* open synthesis for output sampling rate */ - if ( ( error = openCldfb_ivas( &st->cldfbSyn, CLDFB_SYNTHESIS, st->output_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - - st->cldfbSynHB = NULL; - - st->last_active_bandsToZero_bwdec = 0; - st->perc_bwddec_float = 0.0f; - st->last_flag_filter_NB = 0; - st->active_frame_cnt_bwddec = 0; - st->total_frame_cnt_bwddec = 0; - set_s( st->flag_buffer, 0, 20 ); - st->avg_nrg_LT_float = 0.0f; - - /*-----------------------------------------------------------------* - * Noise gate parameters - *-----------------------------------------------------------------*/ - - st->ng_ener_ST = -51.0f; - - st->old_Es_pred = 0; - set_f( st->old_Aq_12_8 + 1, 0, M ); - st->old_Aq_12_8[0] = 1; - - /*-----------------------------------------------------------------* - * SC-VBR parameters - *-----------------------------------------------------------------*/ - - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hSC_VBR = (SC_VBR_DEC_HANDLE) malloc( sizeof( SC_VBR_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); - } - - sc_vbr_dec_init_flt( st->hSC_VBR ); - } - else - { - st->hSC_VBR = NULL; - } - - st->last_ppp_mode_dec = 0; - st->old_ppp_mode = 0; - st->ppp_mode_dec = 0; - st->last_nelp_mode_dec = 0; - st->nelp_mode_dec = 0; - st->prev_gain_pit_dec = 0.0f; - st->prev_tilt_code_dec = 0.0f; - st->vbr_hw_BWE_disable_dec = 0; - st->last_vbr_hw_BWE_disable_dec = 0; - - - /*-----------------------------------------------------------------* - * TCX core - *-----------------------------------------------------------------*/ - - /* TCX-LTP */ - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) - { - if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); - } - } - else - { - st->hTcxLtpDec = NULL; - } - - /* TCX core */ - - if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) - { - if ( ( st->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxDec\n" ) ); - } - - set_f( st->hTcxDec->FBTCXdelayBuf_float, 0.0f, 111 ); - - st->hTcxDec->old_synthFB = st->hTcxDec->synth_history + NS2SA( st->output_Fs, PH_ECU_MEM_NS ); - st->hTcxDec->prev_good_synth = st->hTcxDec->old_synthFB + NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ); - } - else - { - st->hTcxDec = NULL; - } - - /* TCX config. data structure */ - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) - { - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); - } - } - else - { - st->hTcxCfg = NULL; - } - - /* Tonal MDCT concealment data structure */ - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) - { - if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TonalMDCTConcealment\n" ) ); - } - } - else - { - st->hTonalMDCTConc = NULL; - } - - /*-----------------------------------------------------------------* - * IGF - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) ) - { - if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) ); - } - - st->igf = 0; - init_igf_dec_flt( st->hIGFDec ); - } - else - { - st->hIGFDec = NULL; - } - - /*-----------------------------------------------------------------* - * Mode 2 initialization - *-----------------------------------------------------------------*/ - - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hPlcInfo = (T_PLCInfo_HANDLE) malloc( sizeof( T_PLCInfo ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PLC handle\n" ) ); - } - } - else - { - st->hPlcInfo = NULL; - } - - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hTECDec = (TEC_DEC_HANDLE) malloc( sizeof( TEC_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); - } - } - else - { - st->hTECDec = NULL; - } - - /* Init Core Decoder */ - open_decoder_LPD( st, st->total_brate, st->last_total_brate, st->bwidth, 0, st->element_mode, 1 ); - - /* PLC mode initialization */ - st->m_decodeMode = DEC_NO_FRAM_LOSS; - - /* Init bandwidth / frame_type */ - st->m_frame_type = ACTIVE_FRAME; - st->m_old_frame_type = ACTIVE_FRAME; - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) ) - { - resampleCldfb_ivas( st->cldfbAna, st->L_frame * FRAMES_PER_SEC ); - resampleCldfb_ivas( st->cldfbBPF, st->L_frame * FRAMES_PER_SEC ); - } - - /*-----------------------------------------------------------------* - * FD-CNG decoder - *-----------------------------------------------------------------*/ - - if ( ( st->element_mode == IVAS_CPE_MDCT || idchan == 0 ) && mc_mode != MC_MODE_MCT && mc_mode != MC_MODE_PARAMUPMIX ) - { - /* Create FD_CNG instance */ - if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Init FD-CNG */ - initFdCngDec( st ); - } - else - { - st->hFdCngDec = NULL; - } - - st->cngTDLevel_float = 0.f; - st->lp_noise_float = -20.0f; - st->force_lpd_reset = 0; - - /*-----------------------------------------------------------------* - * IVAS parameters - *-----------------------------------------------------------------*/ - - st->tdm_LRTD_flag = 0; - st->cna_dirac_flag = 0; - st->cng_sba_flag = 0; - st->cng_ism_flag = 0; - - return error; -} -#endif /*----------------------------------------------------------------------* * reset_preecho_dec() * * Initialization of static variables for pre-echo *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void reset_preecho_dec( - HQ_DEC_HANDLE hHQ_core /* i/o: HQ decoder handle */ -) -{ - hHQ_core->memfilt_lb = 0; - hHQ_core->mean_prev_hb = 0; - hHQ_core->smoothmem = 1; - hHQ_core->mean_prev = 0; - hHQ_core->mean_prev_nc = 0; - hHQ_core->wmold_hb = 1; - hHQ_core->prevflag = 0; - hHQ_core->pastpre = 0; - - return; -} -#endif /*----------------------------------------------------------------------* * destroy_cldfb_decoder_flt() * * Free memory which was allocated in init_decoder() *----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void destroy_cldfb_decoder_ivas_fx( Decoder_State *st /* o : Decoder static variables structure */ ) @@ -774,20 +74,3 @@ void destroy_cldfb_decoder_ivas_fx( return; } -#else // IVAS_FLOAT_FIXED - -void destroy_cldfb_decoder_flt( - Decoder_State *st /* o : Decoder static variables structure */ -) -{ - /* CLDFB BPF & resampling tools */ - deleteCldfb_ivas( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */ - deleteCldfb_ivas( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */ - deleteCldfb_ivas( &st->cldfbSyn ); /* delete synthesis at output sampling rate */ - deleteCldfb_ivas( &st->cldfbSynHB ); - - deleteFdCngDec( &st->hFdCngDec ); - - return; -} -#endif diff --git a/lib_dec/init_dec_fx.c b/lib_dec/init_dec_fx.c index 4cdefd6b0..d709ff5fc 100644 --- a/lib_dec/init_dec_fx.c +++ b/lib_dec/init_dec_fx.c @@ -9,7 +9,6 @@ #include "stl.h" /* required for wmc_tool */ #include "basop_util.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" /*----------------------------------------------------------------------* @@ -1823,4 +1822,3 @@ void destroy_cldfb_decoder_fx( return; } -#endif diff --git a/lib_dec/inov_dec.c b/lib_dec/inov_dec.c index 03831b28c..84f371717 100644 --- a/lib_dec/inov_dec.c +++ b/lib_dec/inov_dec.c @@ -48,148 +48,3 @@ * * Decode the algebraic innovation and do pitch sharpening *----------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void inov_decode( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - const int16_t i_subfr, /* i : subframe index */ - const float *p_Aq, /* i : LP filter coefficients */ - const float tilt_code, /* i : tilt of the excitation of previous subframe */ - const float pt_pitch, /* i : pointer to current subframe fractional pitch*/ - float *code, /* o : algebraic excitation */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t nBits; - float g1, g2; - - if ( L_frame == L_FRAME ) - { - g1 = FORMANT_SHARPENING_G1_FLT; - g2 = FORMANT_SHARPENING_G2_FLT; - } - else - { - g1 = FORMANT_SHARPENING_G1_16k_FLT; - g2 = FORMANT_SHARPENING_G2_16k_FLT; - } - - if ( !Opt_AMR_WB ) - { - if ( st->acelp_cfg.fcb_mode ) - { - int16_t i; - int16_t indexing_indices[8], wordcnt, bitcnt; - PulseConfig config; - - if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] >= 0 ) - { - if ( L_subfr == 2 * L_SUBFR ) - { - nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr]; - - if ( nBits == 8 ) - { - dec_acelp_1t64( st, code, L_subfr ); - } - else - { - dec_acelp_fast( st, nBits, code, L_subfr ); - } - } - else if ( ( st->idchan == 1 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 7 ) || ( st->idchan == 0 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 3 ) ) - { - if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] == 0 ) - { - dec_acelp_1t64( st, code, L_SUBFR ); - } - else - { - dec_acelp_fast( st, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], code, L_SUBFR ); - } - } - else - { - wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) >> 4; - bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) & 15; - - for ( i = 0; i < wordcnt; i++ ) - { - indexing_indices[i] = get_next_indice( st, 16 ); - } - if ( bitcnt ) - { - indexing_indices[i] = get_next_indice( st, bitcnt ); - } - config = PulseConfTable[st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]]; - D_ACELP_indexing_ivas( code, config, NB_TRACK_FCB_4T, indexing_indices, &st->BER_detect ); - } - } - else - { - set_f( code, 0.0f, L_SUBFR ); - } - } - else - { - nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; - - if ( nBits == 7 ) - { - dec_acelp_1t64( st, code, L_SUBFR ); - } - else if ( nBits == 12 ) - { - dec_acelp_2t32( st, code ); - } - else - { - dec_acelp_4t64( st, nBits, code, Opt_AMR_WB ); - } - } - } - else - { - if ( core_brate == ACELP_6k60 ) - { - dec_acelp_2t32( st, code ); - } - else if ( core_brate == ACELP_8k85 ) - { - dec_acelp_4t64( st, 20, code, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_12k65 ) - { - dec_acelp_4t64( st, 36, code, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_14k25 ) - { - dec_acelp_4t64( st, 44, code, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_15k85 ) - { - dec_acelp_4t64( st, 52, code, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_18k25 ) - { - dec_acelp_4t64( st, 64, code, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_19k85 ) - { - dec_acelp_4t64( st, 72, code, Opt_AMR_WB ); - } - else - { - dec_acelp_4t64( st, 88, code, Opt_AMR_WB ); - } - } - - cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, code, tilt_code, pt_pitch, L_subfr ); - - return; -} -#endif diff --git a/lib_dec/inov_dec_fx.c b/lib_dec/inov_dec_fx.c index 96ebf8ec7..ef65c4fcd 100644 --- a/lib_dec/inov_dec_fx.c +++ b/lib_dec/inov_dec_fx.c @@ -7,7 +7,6 @@ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED /*======================================================================*/ /* FUNCTION : inov_decode_fx() */ /*-----------------------------------------------------------------------*/ @@ -377,4 +376,3 @@ void inov_decode_ivas_fx( cb_shape_fx( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, code, tilt_code, shr( add( pt_pitch, 26 ), 6 ), 0, L_subfr ); return; } -#endif diff --git a/lib_dec/ivas_agc_dec.c b/lib_dec/ivas_agc_dec.c index 6296e6c12..3bfbcee10 100644 --- a/lib_dec/ivas_agc_dec.c +++ b/lib_dec/ivas_agc_dec.c @@ -35,244 +35,3 @@ #include #include "options.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -#include "prot.h" -#include "ivas_prot.h" - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_agc_dec_init() - * - * AGC decoder initialization call - * - *-----------------------------------------------------------------------------------------*/ - -static void ivas_agc_dec_init( - ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ - const int16_t output_frame, - const int16_t delay ) -{ - int16_t i; - ivas_agc_dec_chan_state_t *ptrG = hAgcDec->gain_state; - ivas_agc_chan_data_t *ptr = hAgcDec->gain_data; - - hAgcDec->agc_com.in_delay = delay; - hAgcDec->agc_com.num_coeff = IVAS_SPAR_MAX_DMX_CHS; - ivas_agc_calcGainParams( &hAgcDec->agc_com.absEmin, &hAgcDec->agc_com.betaE, &hAgcDec->agc_com.maxAttExp, hAgcDec->agc_com.num_coeff ); - - ivas_agc_initWindowFunc( hAgcDec->agc_com.winFunc, output_frame - hAgcDec->agc_com.in_delay ); - - for ( i = 0; i < IVAS_SPAR_MAX_DMX_CHS; i++ ) - { - /* gain_state */ - ptrG->lastGain = 1.f; - ptrG->gainExpVal = 0; - ptrG++; - - /* gain_data */ - ptr->absGainExp = hAgcDec->agc_com.absEmin; - ptr->absGainExpCurr = hAgcDec->agc_com.absEmin; - ptr++; - } - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_spar_agc_dec_open() - * - * Allocate and initialize SPAR AGC decoder handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_agc_dec_open( - ivas_agc_dec_state_t **hAgcDec, /* i/o: SPAR AGC decoder handle */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - ivas_agc_dec_state_t *hAgc; - int16_t output_frame, delay; - - if ( ( hAgc = (ivas_agc_dec_state_t *) malloc( sizeof( ivas_agc_dec_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); - } - - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - delay = NS2SA( output_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); - - if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * ( output_frame - delay ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); - } - - if ( ( hAgc->gain_state = (ivas_agc_dec_chan_state_t *) malloc( sizeof( ivas_agc_dec_chan_state_t ) * FOA_CHANNELS ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); - } - - if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) malloc( sizeof( ivas_agc_chan_data_t ) * FOA_CHANNELS ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AGC decoder" ); - } - - ivas_agc_dec_init( hAgc, output_frame, delay ); - - *hAgcDec = hAgc; - - return IVAS_ERR_OK; -} - - -/*------------------------------------------------------------------------- - * ivas_spar_agc_dec_close() - * - * Deallocate SPAR AGC decoder handle - *------------------------------------------------------------------------*/ - -void ivas_spar_agc_dec_close( - ivas_agc_dec_state_t **hAgcDec /* i/o: SPAR AGC decoder handle */ -) -{ - ivas_agc_dec_state_t *hAgc; - - if ( hAgcDec == NULL || *hAgcDec == NULL ) - { - return; - } - - hAgc = *hAgcDec; - - free( hAgc->agc_com.winFunc ); - hAgc->agc_com.winFunc = NULL; - - free( hAgc->gain_state ); - hAgc->gain_state = NULL; - - free( hAgc->gain_data ); - hAgc->gain_data = NULL; - - free( *hAgcDec ); - *hAgcDec = NULL; - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_agc_dec_process() - * - * AGC decoder - *-----------------------------------------------------------------------------------------*/ - -void ivas_agc_dec_process( - ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ - float *pcm_in[], /* i : input audio channels */ - float *pcm_out[], /* o : output audio channels */ - const int16_t n_channels, /* i : number of channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i, idx; - uint16_t offset; - float gainLast, gain; - ivas_agc_dec_state_t *pState = hAgcDec; - - offset = output_frame - pState->agc_com.in_delay; - - for ( i = 0; i < n_channels; i++ ) - { - pState->gain_state[i].gainExpVal = pState->gain_data[i].absGainExp - pState->gain_data[i].absGainExpCurr; - - if ( ( pState->gain_state[i].gainExpVal > (int32_t) ( pState->agc_com.maxAttExp + 1 ) ) || ( pState->gain_state[i].gainExpVal < -1 ) ) - { - /* Such conditions indicate packet loss, better reset and do nothing*/ - pState->gain_data[i].absGainExp = pState->agc_com.absEmin; - pState->gain_state[i].gainExpVal = 0; - } - - pState->gain_state[i].lastGain = powf( pState->agc_com.winFunc[offset - 1], ( -1.f * (float) ( pState->gain_data[i].absGainExp - pState->agc_com.absEmin ) ) ); - gainLast = 1.f / pState->gain_state[i].lastGain; - - if ( pState->gain_state[i].gainExpVal != 0 ) - { - for ( idx = 0; idx < output_frame; idx++ ) - { - if ( idx >= pState->agc_com.in_delay ) - { - gain = powf( pState->agc_com.winFunc[idx - pState->agc_com.in_delay], (float) ( -1 * pState->gain_state[i].gainExpVal ) ) * gainLast; - } - else - { - gain = gainLast; - } - - pcm_out[i][idx] = pcm_in[i][idx] * gain; - } - - pState->gain_state[i].lastGain *= powf( pState->agc_com.winFunc[offset - 1], (float) pState->gain_state[i].gainExpVal ); - } - else - { - gain = gainLast; - for ( idx = 0; idx < output_frame; idx++ ) - { - pcm_out[i][idx] = pcm_in[i][idx] * gain; - } - } - pState->gain_data[i].absGainExp = pState->gain_data[i].absGainExpCurr; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * ivas_agc_read_bits() - * - * decode AGC parameters - *-----------------------------------------------------------------------------------------*/ - -void ivas_agc_read_bits( - ivas_agc_dec_state_t *hAgcDec, /* i/o: AGC decoder handle */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ - const int16_t n_channels, /* i : number of channels */ - const int16_t AGC_flag /* i : AGC on/off flag */ -) -{ - int16_t i; - int16_t per_ch_bit[FOA_CHANNELS]; - ivas_agc_dec_state_t *pState = hAgcDec; - - set_s( per_ch_bit, 0, FOA_CHANNELS ); - - /* read AGC parameters */ - if ( AGC_flag == 1 ) - { - per_ch_bit[0] = 1; - - assert( AGC_BITS_PER_CH == ( pState->agc_com.betaE + 1 ) ); - for ( i = 0; i < n_channels; i++ ) - { - if ( per_ch_bit[i] == 1 ) - { - pState->gain_data[i].absGainExpCurr = get_next_indice( st0, (int16_t) pState->agc_com.betaE ); - } - else - { - pState->gain_data[i].absGainExpCurr = (int32_t) pState->agc_com.absEmin; - } - } - } - else - { - for ( i = 0; i < n_channels; i++ ) - { - pState->gain_data[i].absGainExpCurr = (int32_t) pState->agc_com.absEmin; - } - } - - - return; -} -#endif diff --git a/lib_dec/ivas_agc_dec_fx.c b/lib_dec/ivas_agc_dec_fx.c index f620f59f3..cad6ae2bf 100644 --- a/lib_dec/ivas_agc_dec_fx.c +++ b/lib_dec/ivas_agc_dec_fx.c @@ -32,7 +32,6 @@ #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "prot.h" #include "prot_fx.h" @@ -378,4 +377,3 @@ void ivas_agc_read_bits_fx( return; } -#endif diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index fa0a6c053..36246f739 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -43,7 +43,6 @@ #include "ivas_rom_com.h" #include "ivas_rom_binauralRenderer.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" @@ -52,75 +51,6 @@ #define NUM_TAPS_F0_5 ( Word16 )( 48 ) // (Word16) ceil( 0.5f * hBinRenConvModule->numTaps ) #define NUM_TAPS_F0_4 ( Word16 )( 39 ) // (Word16) ceil( 0.4f * hBinRenConvModule->numTaps ) #define NUM_TAPS_F0_3 ( Word16 )( 29 ) // (Word16) ceil( 0.3f * hBinRenConvModule->numTaps ) -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * ivas_binRenderer_filterModule() - * - * - *-------------------------------------------------------------------------*/ - -static void ivas_binRenderer_filterModule( - float out_Conv_CLDFB_real[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : real part of Binaural signals */ - float out_Conv_CLDFB_imag[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : imag part of Binaural signals */ - float CLDFB_real[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : real part of LS signals */ - float CLDFB_imag[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : imag part of LS signals */ - const int16_t numTimeSlots, /* i : number of time slots to process */ - BINAURAL_RENDERER_HANDLE hBinRenderer /* i/o: fastconv binaural renderer handle */ -) -{ - int16_t bandIdx, k, chIdx, tapIdx; - float *filterStatesLeftRealPtr, *filterStatesLeftImagPtr; - const float *filterTapsLeftRealPtr, *filterTapsLeftImagPtr, *filterTapsRightRealPtr, *filterTapsRightImagPtr; - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - filterStatesLeftRealPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx][0] ); - filterStatesLeftImagPtr = (float *) &( hBinRenderer->hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx][0] ); - - filterTapsLeftRealPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx]; - filterTapsLeftImagPtr = hBinRenderer->hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx]; - filterTapsRightRealPtr = hBinRenderer->hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx]; - filterTapsRightImagPtr = hBinRenderer->hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx]; - - for ( k = 0; k < numTimeSlots; k++ ) - { - float outRealLeft = 0.0f, outRealRight = 0.0f, outImagLeft = 0.0f, outImagRight = 0.0f; - - for ( tapIdx = hBinRenderer->hBinRenConvModule->numTapsArray[bandIdx] - 1; tapIdx > 0; tapIdx-- ) - { - filterStatesLeftRealPtr[tapIdx] = filterStatesLeftRealPtr[tapIdx - 1]; - filterStatesLeftImagPtr[tapIdx] = filterStatesLeftImagPtr[tapIdx - 1]; - - /* Left Real and Imag */ - outRealLeft += ( filterStatesLeftRealPtr[tapIdx] * filterTapsLeftRealPtr[tapIdx] ) - ( filterStatesLeftImagPtr[tapIdx] * filterTapsLeftImagPtr[tapIdx] ); - outImagLeft += ( filterStatesLeftRealPtr[tapIdx] * filterTapsLeftImagPtr[tapIdx] ) + ( filterStatesLeftImagPtr[tapIdx] * filterTapsLeftRealPtr[tapIdx] ); - - /* Right Real and Imag*/ - outRealRight += ( filterStatesLeftRealPtr[tapIdx] * filterTapsRightRealPtr[tapIdx] ) - ( filterStatesLeftImagPtr[tapIdx] * filterTapsRightImagPtr[tapIdx] ); - outImagRight += ( filterStatesLeftRealPtr[tapIdx] * filterTapsRightImagPtr[tapIdx] ) + ( filterStatesLeftImagPtr[tapIdx] * filterTapsRightRealPtr[tapIdx] ); - } - - filterStatesLeftRealPtr[0] = CLDFB_real[chIdx][k][bandIdx]; - filterStatesLeftImagPtr[0] = CLDFB_imag[chIdx][k][bandIdx]; - - - /* Left Real and Imag */ - out_Conv_CLDFB_real[0][k][bandIdx] += outRealLeft + ( filterStatesLeftRealPtr[0] * filterTapsLeftRealPtr[0] ) - ( filterStatesLeftImagPtr[0] * filterTapsLeftImagPtr[0] ); - out_Conv_CLDFB_imag[0][k][bandIdx] += outImagLeft + ( filterStatesLeftRealPtr[0] * filterTapsLeftImagPtr[0] ) + ( filterStatesLeftImagPtr[0] * filterTapsLeftRealPtr[0] ); - - /* Right Real and Imag */ - out_Conv_CLDFB_real[1][k][bandIdx] += outRealRight + ( filterStatesLeftRealPtr[0] * filterTapsRightRealPtr[0] ) - ( filterStatesLeftImagPtr[0] * filterTapsRightImagPtr[0] ); - out_Conv_CLDFB_imag[1][k][bandIdx] += outImagRight + ( filterStatesLeftRealPtr[0] * filterTapsRightImagPtr[0] ) + ( filterStatesLeftImagPtr[0] * filterTapsRightRealPtr[0] ); - } - } - } - - return; -} -#else /*------------------------------------------------------------------------- * ivas_binRenderer_filterModule_fx() * @@ -239,14 +169,12 @@ static void ivas_binRenderer_filterModule_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_binRenderer_convModuleOpen() * * Open convolution module handle of fastconv binaural renderer *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_binRenderer_convModuleOpen( BINAURAL_RENDERER_HANDLE hBinRenderer, const Word16 renderer_type, @@ -535,268 +463,12 @@ static ivas_error ivas_binRenderer_convModuleOpen( return IVAS_ERR_OK; } -#else - -static ivas_error ivas_binRenderer_convModuleOpen( - BINAURAL_RENDERER_HANDLE hBinRenderer, - const int16_t renderer_type, - const int16_t isLoudspeaker, - const AUDIO_CONFIG input_config, - const HRTFS_FASTCONV_HANDLE hHrtf ) -{ - int16_t bandIdx, chIdx; - BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hBinRenConvModule = (BINRENDERER_CONV_MODULE_HANDLE) malloc( sizeof( BINRENDERER_CONV_MODULE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( !isLoudspeaker ) - { - hBinRenderer->nInChannels = audioCfg2channels( input_config ); - } - else - { - /* Note: needs to be revisited if multiple LFE support is required */ - hBinRenderer->nInChannels = ( audioCfg2channels( input_config ) - isLoudspeaker ); - } - - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - hBinRenConvModule->numTaps = BINAURAL_NTAPS_MAX; - - /* Use variable order filtering */ - bandIdx = 0; - for ( ; bandIdx < 5; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = hBinRenConvModule->numTaps; - } - for ( ; bandIdx < 10; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceilf( 0.6f * hBinRenConvModule->numTaps ); - } - for ( ; bandIdx < 20; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceilf( 0.5f * hBinRenConvModule->numTaps ); - } - for ( ; bandIdx < 30; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceilf( 0.4f * hBinRenConvModule->numTaps ); - } - for ( ; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceilf( 0.3f * hBinRenConvModule->numTaps ); - } - } - else - { - if ( hBinRenderer->ivas_format == SBA_FORMAT ) - { - hBinRenConvModule->numTaps = BINAURAL_NTAPS_SBA; - } - else - { - hBinRenConvModule->numTaps = BINAURAL_NTAPS; - } - - /* Use fixed order filtering */ - bandIdx = 0; - for ( ; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - hBinRenConvModule->numTapsArray[bandIdx] = hBinRenConvModule->numTaps; - } - } - - /* allocate memory for filter states */ - if ( ( hBinRenConvModule->filterTapsLeftReal = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsLeftImag = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsRightReal = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsRightImag = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - if ( ( hBinRenConvModule->filterTapsLeftReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsLeftImag[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsRightReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterTapsRightImag[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - } - - - if ( ( hBinRenConvModule->filterStatesLeftReal = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterStatesLeftImag = (float ***) malloc( hBinRenderer->conv_band * sizeof( float ** ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - if ( ( hBinRenConvModule->filterStatesLeftReal[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterStatesLeftImag[bandIdx] = (float **) malloc( hBinRenderer->nInChannels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - if ( ( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] = (float *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - - if ( ( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] = (float *) malloc( hBinRenConvModule->numTapsArray[bandIdx] * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Convolution Module \n" ) ); - } - } - } - - /* set memories */ - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - int16_t tmp = 0; - - if ( isLoudspeaker ) - { - if ( input_config == IVAS_AUDIO_CONFIG_5_1 ) - { - tmp = channelIndex_CICP6[chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_7_1 ) - { - tmp = channelIndex_CICP12[chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_5_1_2 ) - { - tmp = channelIndex_CICP14[chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_5_1_4 ) - { - tmp = channelIndex_CICP16[chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - tmp = channelIndex_CICP19[chIdx]; - } - } - - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - /* set the memories to zero */ - set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); - set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTapsArray[bandIdx] ); - if ( isLoudspeaker ) - { - hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = hHrtf->leftBRIRReal[bandIdx][tmp]; - hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = hHrtf->leftBRIRImag[bandIdx][tmp]; - hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = hHrtf->rightBRIRReal[bandIdx][tmp]; - hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = hHrtf->rightBRIRImag[bandIdx][tmp]; - } - } - else - { - /* set the memories to zero */ - set_zero( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx], hBinRenConvModule->numTaps ); - set_zero( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx], hBinRenConvModule->numTaps ); - if ( isLoudspeaker ) - { - hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = hHrtf->leftHRIRReal[bandIdx][tmp]; - hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = hHrtf->leftHRIRImag[bandIdx][tmp]; - hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = hHrtf->rightHRIRReal[bandIdx][tmp]; - hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = hHrtf->rightHRIRImag[bandIdx][tmp]; - } - else - { - if ( input_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - /* HOA3 filter coefficients */ - hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = hHrtf->leftHRIRReal_HOA3[bandIdx][chIdx]; - hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = hHrtf->leftHRIRImag_HOA3[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = hHrtf->rightHRIRReal_HOA3[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = hHrtf->rightHRIRImag_HOA3[bandIdx][chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_HOA2 ) - { - /* HOA2 filter coefficients */ - hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = hHrtf->leftHRIRReal_HOA2[bandIdx][chIdx]; - hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = hHrtf->leftHRIRImag_HOA2[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = hHrtf->rightHRIRReal_HOA2[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = hHrtf->rightHRIRImag_HOA2[bandIdx][chIdx]; - } - else if ( input_config == IVAS_AUDIO_CONFIG_FOA ) - { - /* FOA filter coefficients */ - hBinRenConvModule->filterTapsLeftReal[bandIdx][chIdx] = hHrtf->leftHRIRReal_FOA[bandIdx][chIdx]; - hBinRenConvModule->filterTapsLeftImag[bandIdx][chIdx] = hHrtf->leftHRIRImag_FOA[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightReal[bandIdx][chIdx] = hHrtf->rightHRIRReal_FOA[bandIdx][chIdx]; - hBinRenConvModule->filterTapsRightImag[bandIdx][chIdx] = hHrtf->rightHRIRImag_FOA[bandIdx][chIdx]; - } - else - { - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - } - } - } - } - - - hBinRenderer->hBinRenConvModule = hBinRenConvModule; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * ivas_init_binaural_hrtf() * * initialize memory for HrtfFastConv structure elements *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_init_binaural_hrtf_fx( HRTFS_FASTCONV *HrtfFastConv /* i/o: FASTCONV HRTF structure */ ) @@ -851,61 +523,12 @@ void ivas_init_binaural_hrtf_fx( return; } -#else -void ivas_init_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv /* i/o: FASTCONV HRTF structure */ -) -{ - Word16 i; - - HrtfFastConv->leftHRIRReal_HOA3 = NULL; - HrtfFastConv->leftHRIRImag_HOA3 = NULL; - HrtfFastConv->rightHRIRReal_HOA3 = NULL; - HrtfFastConv->rightHRIRImag_HOA3 = NULL; - HrtfFastConv->FASTCONV_HOA3_latency_s = 0x00; - - HrtfFastConv->leftHRIRReal = NULL; - HrtfFastConv->leftHRIRImag = NULL; - HrtfFastConv->rightHRIRReal = NULL; - HrtfFastConv->rightHRIRImag = NULL; - HrtfFastConv->FASTCONV_HRIR_latency_s = 0x00; - - HrtfFastConv->leftBRIRReal = NULL; - HrtfFastConv->leftBRIRImag = NULL; - HrtfFastConv->rightBRIRReal = NULL; - HrtfFastConv->rightBRIRImag = NULL; - HrtfFastConv->FASTCONV_BRIR_latency_s = 0x00; - - HrtfFastConv->leftHRIRReal_HOA2 = NULL; - HrtfFastConv->leftHRIRImag_HOA2 = NULL; - HrtfFastConv->rightHRIRReal_HOA2 = NULL; - HrtfFastConv->rightHRIRImag_HOA2 = NULL; - HrtfFastConv->FASTCONV_HOA2_latency_s = 0x00; - - HrtfFastConv->leftHRIRReal_FOA = NULL; - HrtfFastConv->leftHRIRImag_FOA = NULL; - HrtfFastConv->rightHRIRReal_FOA = NULL; - HrtfFastConv->rightHRIRImag_FOA = NULL; - HrtfFastConv->FASTCONV_FOA_latency_s = 0x00; - - HrtfFastConv->allocate_init_flag = 0x00; - - FOR( i = 0; i < CLDFB_NO_CHANNELS_MAX; i++ ) - { - HrtfFastConv->fastconvReverberationTimes[i] = 0x00; - HrtfFastConv->fastconvReverberationEneCorrections[i] = 0x00; - } - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_alloc_pppMem() * * Allocate memory for tripple pointer elements *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_alloc_pppMem_fx( Word32 ****pppMem, /*Qx*/ const Word16 dim1, @@ -941,52 +564,12 @@ IF( allocate_init_flag == 0 ) return IVAS_ERR_OK; } -#else -static ivas_error ivas_alloc_pppMem( - float ****pppMem, - const int16_t dim1, - const int16_t dim2, - const int16_t dim3, - const int16_t allocate_init_flag ) -{ - int16_t i, j; - float ***localMem = NULL; - - if ( ( localMem = (float ***) malloc( dim1 * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF memory" ); - } - - for ( i = 0; i < dim1; i++ ) - { - if ( ( localMem[i] = (float **) malloc( dim2 * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF memory" ); - } - if ( allocate_init_flag == 0 ) - { - for ( j = 0; j < dim2; j++ ) - { - if ( ( localMem[i][j] = (float *) malloc( dim3 * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF memory" ); - } - } - } - } - - *pppMem = localMem; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * ivas_allocate_binaural_hrtf() * * Allocate memory for HrtfFastConv structure elements *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_allocate_binaural_hrtf_fx( HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ const AUDIO_CONFIG input_config, /* i : input audio configuration */ @@ -1152,172 +735,23 @@ ivas_error ivas_allocate_binaural_hrtf_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_allocate_binaural_hrtf( - HRTFS_FASTCONV *HrtfFastConv, /* i/o: FASTCONV HRTF structure */ - const AUDIO_CONFIG input_config, /* i : input audio configuration */ - const BINAURAL_INPUT_AUDIO_CONFIG bin_input_config, /* i : binaural input audio config */ - const RENDERER_TYPE renderer_type, /* i : renderer type */ - const int16_t allocate_init_flag /* i : Memory allocation flag */ + +/*-------------------------------------------------------------------------* + * ivas_binaural_HRTF_open() + * + * + *-------------------------------------------------------------------------*/ +static ivas_error ivas_binaural_hrtf_open_fx( + HRTFS_FASTCONV_HANDLE *hHrtfFastConv, /* i : fastconv HRTF handle */ + const AUDIO_CONFIG input_config, /* i : output configuration */ + const RENDERER_TYPE renderer_type /* i : renderer type */ ) { - if ( input_config == IVAS_AUDIO_CONFIG_HOA3 || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA3 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA3 != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA3" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA3" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA3" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_HOA3, BINAURAL_CONVBANDS, HOA3_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA3" ); - } - } - } - - if ( input_config == IVAS_AUDIO_CONFIG_HOA2 || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) - { - if ( ( HrtfFastConv->leftHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->leftHRIRImag_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRReal_HOA2 != NULL ) && ( HrtfFastConv->rightHRIRImag_HOA2 != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_HOA2" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_HOA2" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_HOA2" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_HOA2, BINAURAL_CONVBANDS, HOA2_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_HOA2" ); - } - } - } - - if ( input_config == IVAS_AUDIO_CONFIG_FOA || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) - { - if ( ( HrtfFastConv->leftHRIRReal_FOA != NULL ) && ( HrtfFastConv->leftHRIRImag_FOA != NULL ) && ( HrtfFastConv->rightHRIRReal_FOA != NULL ) && ( HrtfFastConv->rightHRIRImag_FOA != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal_FOA" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag_FOA" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal_FOA" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag_FOA, BINAURAL_CONVBANDS, FOA_CHANNELS, BINAURAL_NTAPS_SBA, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag_FOA" ); - } - } - } - - if ( renderer_type == RENDERER_BINAURAL_FASTCONV || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - if ( ( HrtfFastConv->leftHRIRReal != NULL ) && ( HrtfFastConv->leftHRIRImag != NULL ) && ( HrtfFastConv->rightHRIRReal != NULL ) && ( HrtfFastConv->rightHRIRImag != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRReal" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftHRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftHRIRImag" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRReal" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightHRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightHRIRImag" ); - } - } - } - - if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || bin_input_config == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - if ( ( HrtfFastConv->leftBRIRReal != NULL ) && ( HrtfFastConv->leftBRIRImag != NULL ) && ( HrtfFastConv->rightBRIRReal != NULL ) && ( HrtfFastConv->rightBRIRImag != NULL ) ) - { - return IVAS_ERR_OK; - } - else - { - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftBRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRReal" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->leftBRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for leftBRIRImag" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightBRIRReal, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRReal" ); - } - if ( IVAS_ERR_OK != ivas_alloc_pppMem( &HrtfFastConv->rightBRIRImag, BINAURAL_CONVBANDS, HRTF_LS_CHANNELS, BINAURAL_NTAPS_MAX, allocate_init_flag ) ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for rightBRIRImag" ); - } - } - } - - return IVAS_ERR_OK; -} -#endif - -/*-------------------------------------------------------------------------* - * ivas_binaural_HRTF_open() - * - * - *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_binaural_hrtf_open_fx( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv, /* i : fastconv HRTF handle */ - const AUDIO_CONFIG input_config, /* i : output configuration */ - const RENDERER_TYPE renderer_type /* i : renderer type */ -) -{ - Word16 i, j; - ivas_error error; - - test(); - IF( hHrtfFastConv != NULL && *hHrtfFastConv != NULL ) + Word16 i, j; + ivas_error error; + + test(); + IF( hHrtfFastConv != NULL && *hHrtfFastConv != NULL ) { /* Tables already loaded from file */ return IVAS_ERR_OK; @@ -1430,241 +864,6 @@ static ivas_error ivas_binaural_hrtf_open_fx( return IVAS_ERR_OK; } -#else -static ivas_error ivas_binaural_hrtf_open( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv, /* i : fastconv HRTF handle */ - const AUDIO_CONFIG input_config, /* i : output configuration */ - const RENDERER_TYPE renderer_type /* i : renderer type */ -) -{ - int16_t i, j; - ivas_error error; - - if ( hHrtfFastConv != NULL && *hHrtfFastConv != NULL ) - { - /* Tables already loaded from file */ - return IVAS_ERR_OK; - } - else - { - /* Initialise tables from ROM */ - HRTFS_FASTCONV *HrtfFastConv; - - if ( ( HrtfFastConv = (HRTFS_FASTCONV *) malloc( sizeof( HRTFS_FASTCONV ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for FastConv HRTF tables" ); - } - - ivas_init_binaural_hrtf( HrtfFastConv ); - - if ( input_config == IVAS_AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - HrtfFastConv->FASTCONV_HRIR_latency_s = FASTCONV_HRIR_latency_s; - } - if ( input_config == IVAS_AUDIO_CONFIG_HOA2 ) - { - HrtfFastConv->FASTCONV_HOA2_latency_s = FASTCONV_HOA2_latency_s; - } - if ( input_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - HrtfFastConv->FASTCONV_HOA3_latency_s = FASTCONV_HOA3_latency_s; - } - if ( input_config == IVAS_AUDIO_CONFIG_FOA ) - { - HrtfFastConv->FASTCONV_FOA_latency_s = FASTCONV_FOA_latency_s; - } - if ( input_config == IVAS_AUDIO_CONFIG_BINAURAL || renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - HrtfFastConv->FASTCONV_BRIR_latency_s = FASTCONV_BRIR_latency_s; - } - - HrtfFastConv->allocate_init_flag = 1; - - if ( ( error = ivas_allocate_binaural_hrtf( HrtfFastConv, input_config, BINAURAL_INPUT_AUDIO_CONFIG_INVALID, renderer_type, HrtfFastConv->allocate_init_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - HrtfFastConv->leftHRIRReal[i][j] = leftHRIRReal[i][j]; - HrtfFastConv->leftHRIRImag[i][j] = leftHRIRImag[i][j]; - HrtfFastConv->rightHRIRReal[i][j] = rightHRIRReal[i][j]; - HrtfFastConv->rightHRIRImag[i][j] = rightHRIRImag[i][j]; - } - } - else if ( renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - HrtfFastConv->leftBRIRReal[i][j] = leftBRIRReal[i][j]; - HrtfFastConv->leftBRIRImag[i][j] = leftBRIRImag[i][j]; - HrtfFastConv->rightBRIRReal[i][j] = rightBRIRReal[i][j]; - HrtfFastConv->rightBRIRImag[i][j] = rightBRIRImag[i][j]; - } - } - if ( input_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - HrtfFastConv->leftHRIRReal_HOA3[i][j] = leftHRIRReal_HOA3[i][j]; - HrtfFastConv->leftHRIRImag_HOA3[i][j] = leftHRIRImag_HOA3[i][j]; - HrtfFastConv->rightHRIRReal_HOA3[i][j] = rightHRIRReal_HOA3[i][j]; - HrtfFastConv->rightHRIRImag_HOA3[i][j] = rightHRIRImag_HOA3[i][j]; - } - } - if ( input_config == IVAS_AUDIO_CONFIG_HOA2 ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - HrtfFastConv->leftHRIRReal_HOA2[i][j] = leftHRIRReal_HOA2[i][j]; - HrtfFastConv->leftHRIRImag_HOA2[i][j] = leftHRIRImag_HOA2[i][j]; - HrtfFastConv->rightHRIRReal_HOA2[i][j] = rightHRIRReal_HOA2[i][j]; - HrtfFastConv->rightHRIRImag_HOA2[i][j] = rightHRIRImag_HOA2[i][j]; - } - } - if ( input_config == IVAS_AUDIO_CONFIG_FOA ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - HrtfFastConv->leftHRIRReal_FOA[i][j] = leftHRIRReal_FOA[i][j]; - HrtfFastConv->leftHRIRImag_FOA[i][j] = leftHRIRImag_FOA[i][j]; - HrtfFastConv->rightHRIRReal_FOA[i][j] = rightHRIRReal_FOA[i][j]; - HrtfFastConv->rightHRIRImag_FOA[i][j] = rightHRIRImag_FOA[i][j]; - } - } - } - mvr2r( fastconvReverberationTimes, HrtfFastConv->fastconvReverberationTimes, CLDFB_NO_CHANNELS_MAX ); - mvr2r( fastconvReverberationEneCorrections, HrtfFastConv->fastconvReverberationEneCorrections, CLDFB_NO_CHANNELS_MAX ); - - *hHrtfFastConv = HrtfFastConv; - } - - return IVAS_ERR_OK; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * ivas_binaural_obtain_DMX() - * - * - *-------------------------------------------------------------------------*/ - -static void ivas_binaural_obtain_DMX( - const int16_t numTimeSlots, - BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: fastconv binaural renderer handle */ - float RealBuffer[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Contains the LS signals */ - float ImagBuffer[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Contains the LS signals */ - float realDMX[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float imagDMX[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] ) -{ - int16_t chIdx, bandIdx, k; - - if ( hBinRenderer->ivas_format == MC_FORMAT ) - { - /* Obtain the downmix */ - float P_in[CLDFB_NO_CHANNELS_MAX]; - float P_out, factEQ; - int16_t chOutIdx; - float temp1, temp2; - - for ( k = 0; k < numTimeSlots; k++ ) - { - for ( chOutIdx = 0; chOutIdx < BINAURAL_CHANNELS; chOutIdx++ ) - { - set_zero( realDMX[chOutIdx][k], CLDFB_NO_CHANNELS_MAX ); - set_zero( imagDMX[chOutIdx][k], CLDFB_NO_CHANNELS_MAX ); - } - } - - for ( chOutIdx = 0; chOutIdx < BINAURAL_CHANNELS; chOutIdx++ ) - { - set_zero( P_in, hBinRenderer->conv_band ); - - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - float dmxConst = hBinRenderer->hReverb->dmxmtx[chOutIdx][chIdx]; - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - temp1 = RealBuffer[chIdx][k][bandIdx] * dmxConst; - temp2 = ImagBuffer[chIdx][k][bandIdx] * dmxConst; - realDMX[chOutIdx][k][bandIdx] += temp1; - imagDMX[chOutIdx][k][bandIdx] += temp2; - - P_in[bandIdx] += temp1 * temp1 + temp2 * temp2; - } - } - } - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - P_out = 0.f; - for ( k = 0; k < numTimeSlots; k++ ) - { - temp1 = realDMX[chOutIdx][k][bandIdx]; - temp2 = imagDMX[chOutIdx][k][bandIdx]; - P_out += temp1 * temp1 + temp2 * temp2; - } - factEQ = sqrtf( P_in[bandIdx] / ( P_out + 1e-20f ) ); - if ( ( factEQ <= 1e-20f ) || ( P_in[bandIdx] <= 1e-20f ) || ( P_out <= 1e-20f ) ) - { - factEQ = 1.0f; - } - - factEQ = max( min( factEQ, 2.0f ), 0.5f ); - for ( k = 0; k < numTimeSlots; k++ ) - { - realDMX[chOutIdx][k][bandIdx] *= factEQ; - imagDMX[chOutIdx][k][bandIdx] *= factEQ; - } - } - } - } - else if ( hBinRenderer->ivas_format == SBA_FORMAT || hBinRenderer->ivas_format == MASA_FORMAT ) - { - float *outRealLeftPtr, *outImagLeftPtr, *outRealRightPtr, *outImagRightPtr; - float *inRealPtr, *inImagPtr; - - /*compute DMX */ - for ( k = 0; k < numTimeSlots; k++ ) - { - outRealLeftPtr = realDMX[0][k]; - outImagLeftPtr = imagDMX[0][k]; - outRealRightPtr = realDMX[1][k]; - outImagRightPtr = imagDMX[1][k]; - set_zero( outRealLeftPtr, CLDFB_NO_CHANNELS_MAX ); - set_zero( outImagLeftPtr, CLDFB_NO_CHANNELS_MAX ); - set_zero( outRealRightPtr, CLDFB_NO_CHANNELS_MAX ); - set_zero( outImagRightPtr, CLDFB_NO_CHANNELS_MAX ); - - for ( chIdx = 0; chIdx < hBinRenderer->nInChannels; chIdx++ ) - { - float foa_const = hBinRenderer->hReverb->foa_enc[chIdx][1]; - - inRealPtr = (float *) &( RealBuffer[chIdx][k][0] ); - inImagPtr = (float *) &( ImagBuffer[chIdx][k][0] ); - - for ( bandIdx = 0; bandIdx < hBinRenderer->conv_band; bandIdx++ ) - { - outRealLeftPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f + foa_const ); - outImagLeftPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f + foa_const ); - - outRealRightPtr[bandIdx] += inRealPtr[bandIdx] * ( 1.f - foa_const ); - outImagRightPtr[bandIdx] += inImagPtr[bandIdx] * ( 1.f - foa_const ); - } - } - } - } - - return; -} -#else /*-------------------------------------------------------------------------* * ivas_binaural_obtain_DMX_fx() * @@ -1807,240 +1006,30 @@ static void ivas_binaural_obtain_DMX_fx( } } - return; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_binRenderer_open() - * - * Open fastconv binaural renderer handle - *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_binRenderer_open_fx( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - BINAURAL_RENDERER_HANDLE hBinRenderer; - Word16 convBand, chIdx, k; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - IF( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Renderer\n" ) ); - } - - hBinRenderer->hInputSetup = &st_ivas->hIntSetup; - - /* Define of head rotation has to be done in binRendeder in CLDFB*/ - hBinRenderer->rotInCldfb = 0; - move16(); - test(); - if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_FORMAT ) ) - { - hBinRenderer->rotInCldfb = 1; - move16(); - } - - - /* Declare some common variables needed for renderer */ - /* Which format used for binaural rendering (needed for late reverb) ? MC or SBA */ - IF( st_ivas->hIntSetup.is_loudspeaker_setup ) - { - hBinRenderer->ivas_format = MC_FORMAT; - move32(); - } - ELSE - { - hBinRenderer->ivas_format = SBA_FORMAT; - move32(); - } - hBinRenderer->max_band = extract_l( Mpy_32_32( Mpy_32_32( BINAURAL_MAXBANDS_Q25, L_shl( st_ivas->hDecoderConfig->output_Fs, Q6 ) ), ONE_BY_48000_Q31 ) ); - move16(); - - convBand = hBinRenderer->max_band; - move16(); - - hBinRenderer->timeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; /* Corresponds to 5 msec sound to motion latency */ - move16(); - - IF( GT_16( convBand, BINAURAL_CONVBANDS ) ) - { - hBinRenderer->conv_band = BINAURAL_CONVBANDS; - move16(); - } - ELSE - { - hBinRenderer->conv_band = convBand; - move16(); - } - - /*LFE rendering switched off by default*/ - hBinRenderer->render_lfe = 0; - move16(); - - test(); - if ( NE_32( st_ivas->ivas_format, ISM_FORMAT ) && st_ivas->hIntSetup.is_loudspeaker_setup ) - { - hBinRenderer->render_lfe = 1; - move16(); - } - - /* Load HRTF tables */ - IF( NE_32( ( error = ivas_binaural_hrtf_open_fx( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && ( st_ivas->hIntSetup.is_loudspeaker_setup == 0 ) ) - { - IVAS_OUTPUT_SETUP out_setup; - - /* Allocate memories and buffers needed for convolutional module in CICP19 */ - IF( NE_32( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, IVAS_AUDIO_CONFIG_7_1_4, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) - { - return error; - } - - ivas_output_init( &out_setup, IVAS_AUDIO_CONFIG_7_1_4 ); - - IF( st_ivas->hoa_dec_mtx == NULL ) - { - IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( out_setup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - hBinRenderer->hoa_dec_mtx = st_ivas->hoa_dec_mtx; - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s_fx; - move32(); - } - ELSE - { - /* Allocate memories and buffers needed for convolutional module */ - IF( NE_32( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) - { - IF( EQ_32( hBinRenderer->ivas_format, MC_FORMAT ) ) - { - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HRIR_latency_s_fx; - move32(); - } - ELSE - { - IF( EQ_16( hBinRenderer->nInChannels, 16 ) ) - { - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HOA3_latency_s_fx; - move32(); - } - ELSE IF( EQ_16( hBinRenderer->nInChannels, 9 ) ) - { - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HOA2_latency_s_fx; - move32(); - } - ELSE IF( EQ_16( hBinRenderer->nInChannels, 4 ) ) - { - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_FOA_latency_s_fx; - move32(); - } - ELSE - { - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - } - } - ELSE - { - /* same value for MC or HOA both use MC BRIR*/ - st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s_fx; - move32(); - } - } - - /* Allocate memories needed for reverb module */ - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) && EQ_32( st_ivas->hIntSetup.output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - IF( NE_32( ( error = ivas_binaural_reverb_open_fastconv_fx( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* initialize the dmx matrix */ - FOR( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - FOR( k = 0; k < hBinRenderer->nInChannels; k++ ) - { - hBinRenderer->hReverb->dmxmtx_fx[chIdx][k] = dmxmtx_table_fx[chIdx][k]; - move32(); - } - } - } - ELSE - { - hBinRenderer->hReverb = NULL; - } - - hBinRenderer->hEFAPdata = NULL; - - IF( hBinRenderer->hReverb != NULL ) - { - test(); - test(); - IF( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) - { - FOR( k = 0; k < 11; k++ ) - { - ivas_dirac_dec_get_response_fx( extract_l( L_shr_r( ls_azimuth_CICP19_fx[k], 22 ) ), extract_l( L_shr_r( ls_elevation_CICP19_fx[k], 22 ) ), hBinRenderer->hReverb->foa_enc_fx[k], 1, Q29 ); - // Q29: hBinRenderer->hReverb->foa_enc_fx[k] - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth_fx, st_ivas->hIntSetup.ls_elevation_fx, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* Copy handles to bin renderer handle*/ - hBinRenderer->hEFAPdata = st_ivas->hEFAPdata; - } - } - - /* Copy the handles to main handle */ - st_ivas->hBinRenderer = hBinRenderer; - - return error; + return; } -#else -ivas_error ivas_binRenderer_open( + +/*------------------------------------------------------------------------- + * ivas_binRenderer_open() + * + * Open fastconv binaural renderer handle + *-------------------------------------------------------------------------*/ +ivas_error ivas_binRenderer_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { BINAURAL_RENDERER_HANDLE hBinRenderer; - int16_t convBand, chIdx, k; + Word16 convBand, chIdx, k; ivas_error error; error = IVAS_ERR_OK; + move32(); /*-----------------------------------------------------------------* * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) + IF( ( hBinRenderer = (BINAURAL_RENDERER_HANDLE) malloc( sizeof( BINAURAL_RENDERER ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Renderer\n" ) ); } @@ -2049,150 +1038,176 @@ ivas_error ivas_binRenderer_open( /* Define of head rotation has to be done in binRendeder in CLDFB*/ hBinRenderer->rotInCldfb = 0; - if ( st_ivas->ivas_format == MC_FORMAT || st_ivas->ivas_format == SBA_FORMAT ) + move16(); + test(); + if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_FORMAT ) ) { hBinRenderer->rotInCldfb = 1; + move16(); } /* Declare some common variables needed for renderer */ /* Which format used for binaural rendering (needed for late reverb) ? MC or SBA */ - if ( st_ivas->hIntSetup.is_loudspeaker_setup ) + IF( st_ivas->hIntSetup.is_loudspeaker_setup ) { hBinRenderer->ivas_format = MC_FORMAT; + move32(); } - else + ELSE { hBinRenderer->ivas_format = SBA_FORMAT; + move32(); } - hBinRenderer->max_band = (int16_t) ( ( BINAURAL_MAXBANDS * st_ivas->hDecoderConfig->output_Fs ) / 48000 ); + hBinRenderer->max_band = extract_l( Mpy_32_32( Mpy_32_32( BINAURAL_MAXBANDS_Q25, L_shl( st_ivas->hDecoderConfig->output_Fs, Q6 ) ), ONE_BY_48000_Q31 ) ); + move16(); + convBand = hBinRenderer->max_band; + move16(); hBinRenderer->timeSlots = MAX_PARAM_SPATIAL_SUBFRAMES; /* Corresponds to 5 msec sound to motion latency */ + move16(); - if ( convBand > BINAURAL_CONVBANDS ) + IF( GT_16( convBand, BINAURAL_CONVBANDS ) ) { hBinRenderer->conv_band = BINAURAL_CONVBANDS; + move16(); } - else + ELSE { hBinRenderer->conv_band = convBand; + move16(); } /*LFE rendering switched off by default*/ hBinRenderer->render_lfe = 0; + move16(); - if ( st_ivas->ivas_format != ISM_FORMAT && st_ivas->hIntSetup.is_loudspeaker_setup ) + test(); + if ( NE_32( st_ivas->ivas_format, ISM_FORMAT ) && st_ivas->hIntSetup.is_loudspeaker_setup ) { hBinRenderer->render_lfe = 1; + move16(); } /* Load HRTF tables */ - if ( ( error = ivas_binaural_hrtf_open( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_binaural_hrtf_open_fx( &st_ivas->hHrtfFastConv, st_ivas->hIntSetup.output_config, st_ivas->renderer_type ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM && ( st_ivas->hIntSetup.is_loudspeaker_setup == 0 ) ) + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) && ( st_ivas->hIntSetup.is_loudspeaker_setup == 0 ) ) { IVAS_OUTPUT_SETUP out_setup; /* Allocate memories and buffers needed for convolutional module in CICP19 */ - if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, IVAS_AUDIO_CONFIG_7_1_4, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, 1, IVAS_AUDIO_CONFIG_7_1_4, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) { return error; } ivas_output_init( &out_setup, IVAS_AUDIO_CONFIG_7_1_4 ); - if ( st_ivas->hoa_dec_mtx == NULL ) + IF( st_ivas->hoa_dec_mtx == NULL ) { - if ( ( error = ivas_sba_get_hoa_dec_matrix( out_setup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( out_setup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) { return error; } } hBinRenderer->hoa_dec_mtx = st_ivas->hoa_dec_mtx; - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s_fx; + move32(); } - else + ELSE { /* Allocate memories and buffers needed for convolutional module */ - if ( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_binRenderer_convModuleOpen( hBinRenderer, st_ivas->renderer_type, st_ivas->hIntSetup.is_loudspeaker_setup, st_ivas->hIntSetup.output_config, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) { - if ( hBinRenderer->ivas_format == MC_FORMAT ) + IF( EQ_32( hBinRenderer->ivas_format, MC_FORMAT ) ) { - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_HRIR_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HRIR_latency_s_fx; + move32(); } - else + ELSE { - if ( hBinRenderer->nInChannels == 16 ) + IF( EQ_16( hBinRenderer->nInChannels, 16 ) ) { - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_HOA3_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HOA3_latency_s_fx; + move32(); } - else if ( hBinRenderer->nInChannels == 9 ) + ELSE IF( EQ_16( hBinRenderer->nInChannels, 9 ) ) { - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_HOA2_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_HOA2_latency_s_fx; + move32(); } - else if ( hBinRenderer->nInChannels == 4 ) + ELSE IF( EQ_16( hBinRenderer->nInChannels, 4 ) ) { - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_FOA_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_FOA_latency_s_fx; + move32(); } - else + ELSE { return IVAS_ERR_INVALID_INPUT_FORMAT; } } } - else + ELSE { /* same value for MC or HOA both use MC BRIR*/ - st_ivas->binaural_latency_ns = (int32_t) ( st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s * 1000000000.f ); + st_ivas->binaural_latency_ns = st_ivas->hHrtfFastConv->FASTCONV_BRIR_latency_s_fx; + move32(); } } /* Allocate memories needed for reverb module */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) && EQ_32( st_ivas->hIntSetup.output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { - if ( ( error = ivas_binaural_reverb_open_fastconv( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_binaural_reverb_open_fastconv_fx( &( hBinRenderer->hReverb ), hBinRenderer->conv_band, hBinRenderer->timeSlots, &( st_ivas->hRenderConfig->roomAcoustics ), st_ivas->hIntSetup.output_config, st_ivas->hDecoderConfig->output_Fs, st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) { return error; } /* initialize the dmx matrix */ - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) + FOR( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) { - for ( k = 0; k < hBinRenderer->nInChannels; k++ ) + FOR( k = 0; k < hBinRenderer->nInChannels; k++ ) { - hBinRenderer->hReverb->dmxmtx[chIdx][k] = dmxmtx_table[chIdx][k]; + hBinRenderer->hReverb->dmxmtx_fx[chIdx][k] = dmxmtx_table_fx[chIdx][k]; + move32(); } } } - else + ELSE { hBinRenderer->hReverb = NULL; } hBinRenderer->hEFAPdata = NULL; - if ( hBinRenderer->hReverb != NULL ) + IF( hBinRenderer->hReverb != NULL ) { - if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) + test(); + test(); + IF( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) { - for ( k = 0; k < 11; k++ ) + FOR( k = 0; k < 11; k++ ) { - ivas_dirac_dec_get_response( (int16_t) ls_azimuth_CICP19[k], (int16_t) ls_elevation_CICP19[k], hBinRenderer->hReverb->foa_enc[k], 1 ); + ivas_dirac_dec_get_response_fx( extract_l( L_shr_r( ls_azimuth_CICP19_fx[k], 22 ) ), extract_l( L_shr_r( ls_elevation_CICP19_fx[k], 22 ) ), hBinRenderer->hReverb->foa_enc_fx[k], 1, Q29 ); + // Q29: hBinRenderer->hReverb->foa_enc_fx[k] } } - else if ( st_ivas->ivas_format == MC_FORMAT && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) + ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth_fx, st_ivas->hIntSetup.ls_elevation_fx, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } @@ -2207,14 +1222,12 @@ ivas_error ivas_binRenderer_open( return error; } -#endif /*------------------------------------------------------------------------- * ivas_binRenderer_convModuleClose() * * Close convolution module handle of fastconv binaural renderer *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_binRenderer_convModuleClose_fx( BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ ) @@ -2295,86 +1308,12 @@ static void ivas_binRenderer_convModuleClose_fx( return; } -#else -static void ivas_binRenderer_convModuleClose( - BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ -) -{ - Word16 bandIdx, chIdx; - - BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; - - hBinRenConvModule = ( *hBinRenderer )->hBinRenConvModule; - - IF( hBinRenConvModule == NULL ) - { - return; - } - - FOR( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) - { - free( hBinRenConvModule->filterTapsLeftReal[bandIdx] ); - hBinRenConvModule->filterTapsLeftReal[bandIdx] = NULL; - - free( hBinRenConvModule->filterTapsLeftImag[bandIdx] ); - hBinRenConvModule->filterTapsLeftImag[bandIdx] = NULL; - - free( hBinRenConvModule->filterTapsRightReal[bandIdx] ); - hBinRenConvModule->filterTapsRightReal[bandIdx] = NULL; - - free( hBinRenConvModule->filterTapsRightImag[bandIdx] ); - hBinRenConvModule->filterTapsRightImag[bandIdx] = NULL; - } - - free( hBinRenConvModule->filterTapsLeftReal ); - hBinRenConvModule->filterTapsLeftReal = NULL; - - free( hBinRenConvModule->filterTapsLeftImag ); - hBinRenConvModule->filterTapsLeftImag = NULL; - - free( hBinRenConvModule->filterTapsRightReal ); - hBinRenConvModule->filterTapsRightReal = NULL; - - free( hBinRenConvModule->filterTapsRightImag ); - hBinRenConvModule->filterTapsRightImag = NULL; - - FOR( bandIdx = 0; bandIdx < ( *hBinRenderer )->conv_band; bandIdx++ ) - { - FOR( chIdx = 0; chIdx < ( *hBinRenderer )->nInChannels; chIdx++ ) - { - free( hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] ); - hBinRenConvModule->filterStatesLeftReal[bandIdx][chIdx] = NULL; - - free( hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] ); - hBinRenConvModule->filterStatesLeftImag[bandIdx][chIdx] = NULL; - } - - free( hBinRenConvModule->filterStatesLeftReal[bandIdx] ); - hBinRenConvModule->filterStatesLeftReal[bandIdx] = NULL; - - free( hBinRenConvModule->filterStatesLeftImag[bandIdx] ); - hBinRenConvModule->filterStatesLeftImag[bandIdx] = NULL; - } - - free( hBinRenConvModule->filterStatesLeftReal ); - hBinRenConvModule->filterStatesLeftReal = NULL; - - free( hBinRenConvModule->filterStatesLeftImag ); - hBinRenConvModule->filterStatesLeftImag = NULL; - - free( ( *hBinRenderer )->hBinRenConvModule ); - ( *hBinRenderer )->hBinRenConvModule = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_binRenderer_close() * * Close fastconv binaural renderer memories *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_binRenderer_close_fx( BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ ) @@ -2400,39 +1339,12 @@ void ivas_binRenderer_close_fx( return; } -#else -void ivas_binRenderer_close( - BINAURAL_RENDERER_HANDLE *hBinRenderer /* i/o: fastconv binaural renderer handle */ -) -{ - IF( hBinRenderer == NULL || *hBinRenderer == NULL ) - { - return; - } - - IF( ( *hBinRenderer )->hBinRenConvModule != NULL ) - { - ivas_binRenderer_convModuleClose( hBinRenderer ); - } - - IF( ( *hBinRenderer )->hReverb != NULL ) - { - ivas_binaural_reverb_close( &( ( *hBinRenderer )->hReverb ) ); - } - - free( *hBinRenderer ); - *hBinRenderer = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_free_pppHrtfMem() * * Free fastconv binaural renderer hrtf memories *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_free_pppHrtfMem_fx( Word32 ****ppppHRIR, /*Qx*/ const Word16 dim, @@ -2461,43 +1373,12 @@ static void ivas_free_pppHrtfMem_fx( return; } -#else -static void ivas_free_pppHrtfMem( - float ****ppppHRIR, - const int16_t dim, - const int16_t alloc_init ) -{ - int16_t i, j; - - if ( *ppppHRIR != NULL ) - { - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - if ( alloc_init == 0 ) - { - for ( j = 0; j < dim; j++ ) - { - free( ( *ppppHRIR )[i][j] ); - ( *ppppHRIR )[i][j] = NULL; - } - } - free( ( *ppppHRIR )[i] ); - ( *ppppHRIR )[i] = NULL; - } - free( *ppppHRIR ); - *ppppHRIR = NULL; - } - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_binaural_hrtf_close() * * Close fastconv binaural renderer hrtf memories *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_binaural_hrtf_close( HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ ) @@ -2540,99 +1421,12 @@ void ivas_binaural_hrtf_close( return; } -#else -void ivas_binaural_hrtf_close( - HRTFS_FASTCONV_HANDLE *hHrtfFastConv /* i : fastconv HRTF handle */ -) -{ - int16_t allocate_init_flag; - - if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) - { - return; - } - - allocate_init_flag = ( *hHrtfFastConv )->allocate_init_flag; - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftBRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRReal, HRTF_LS_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightBRIRImag, HRTF_LS_CHANNELS, allocate_init_flag ); - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA3, HOA3_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA3, HOA3_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA3, HOA3_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA3, HOA3_CHANNELS, allocate_init_flag ); - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_HOA2, HOA2_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_HOA2, HOA2_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_HOA2, HOA2_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_HOA2, HOA2_CHANNELS, allocate_init_flag ); - - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRReal_FOA, FOA_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->leftHRIRImag_FOA, FOA_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRReal_FOA, FOA_CHANNELS, allocate_init_flag ); - ivas_free_pppHrtfMem( &( *hHrtfFastConv )->rightHRIRImag_FOA, FOA_CHANNELS, allocate_init_flag ); - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_binaural_add_LFE() * * The functions adds the LFE to the left and right channels after binaural rendering *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_binaural_add_LFE( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - int16_t output_frame, /* i : length of input frame */ - float *input_f[], /* i : transport channels */ - float *output_f[] /* o : synthesized core-coder transport channels/DirAC output */ -) -{ - - int16_t render_lfe, idx_lfe; - float gain; - - if ( st_ivas->hBinRenderer != NULL ) - { - render_lfe = st_ivas->hBinRenderer->render_lfe; - } - else - { - render_lfe = TRUE; - } - - if ( render_lfe ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) - { - gain = GAIN_LFE; - } - else - { - gain = ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hHrtfCrend != NULL ) ) ? st_ivas->hCrendWrapper->hHrtfCrend->gain_lfe : GAIN_LFE; - } - - for ( idx_lfe = 0; idx_lfe < st_ivas->hIntSetup.num_lfe; idx_lfe++ ) - { - v_multc( input_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], gain, input_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_frame ); - /* copy LFE to left and right channels */ - v_add( output_f[0], input_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_f[0], output_frame ); - v_add( output_f[1], input_f[st_ivas->hIntSetup.index_lfe[idx_lfe]], output_f[1], output_frame ); - } - } - - return; -} - -#else void ivas_binaural_add_LFE_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word16 output_frame, /* i : length of input frame */ @@ -2694,14 +1488,12 @@ void ivas_binaural_add_LFE_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_binRenderer() * * Fastconv binaural renderer main function *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_binRenderer_fx( BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined head and external orientation handle*/ @@ -2832,97 +1624,3 @@ void ivas_binRenderer_fx( pop_wmops(); return; } -#else -void ivas_binRenderer( - BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined head and external orientation handle*/ - const int16_t numTimeSlots, /* i : number of time slots to render */ - float Cldfb_RealBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float Cldfb_ImagBuffer_Binaural[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Binaural signals */ - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ -) -{ - int16_t chIdx, k; - - push_wmops( "fastconv_binaural_rendering" ); - - /* Compute Convolution */ - /* memory reset for the binaural output */ - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - set_zero( Cldfb_RealBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); - set_zero( Cldfb_ImagBuffer_Binaural[chIdx][k], CLDFB_NO_CHANNELS_MAX ); - } - } - - /* Head rotation in HOA3 or CICPx */ - if ( hCombinedOrientationData != NULL && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] && hBinRenderer->rotInCldfb ) - { - if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 ) - { - /* Rotation in SHD (HOA3) */ - if ( hCombinedOrientationData->shd_rot_max_order == -1 ) - { - rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx], hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, 3 ); - } - else if ( hCombinedOrientationData->shd_rot_max_order > 0 ) - { - rotateFrame_shd_cldfb( RealBuffer, ImagBuffer, hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx], hBinRenderer->hInputSetup->nchan_out_woLFE, numTimeSlots, hCombinedOrientationData->shd_rot_max_order ); - } - } - else - { - /* Rotation in SD (CICPx) */ - rotateFrame_sd_cldfb( hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx], RealBuffer, ImagBuffer, hBinRenderer->hInputSetup, hBinRenderer->hEFAPdata, numTimeSlots, hBinRenderer->conv_band ); - } - } - - /* HOA decoding to CICP19 if needed*/ - if ( hBinRenderer->hInputSetup->is_loudspeaker_setup == 0 && hBinRenderer->nInChannels != 16 ) - { - ivas_sba2mc_cldfb( *( hBinRenderer->hInputSetup ), RealBuffer, ImagBuffer, hBinRenderer->nInChannels, hBinRenderer->conv_band, numTimeSlots, hBinRenderer->hoa_dec_mtx ); - } - - ivas_binRenderer_filterModule( Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, RealBuffer, ImagBuffer, numTimeSlots, hBinRenderer ); - - - /* Obtain the binaural dmx and compute the reverb */ - if ( hBinRenderer->hReverb != NULL ) - { - float reverbRe[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float reverbIm[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float inRe[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float inIm[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - - ivas_binaural_obtain_DMX( numTimeSlots, hBinRenderer, RealBuffer, ImagBuffer, inRe, inIm ); - - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - set_zero( reverbRe[chIdx][k], hBinRenderer->max_band ); - set_zero( reverbIm[chIdx][k], hBinRenderer->max_band ); - } - } - - ivas_binaural_reverb_processSubframe( hBinRenderer->hReverb, BINAURAL_CHANNELS, numTimeSlots, inRe, inIm, reverbRe, reverbIm ); - - /* Add the conv module and reverb module output */ - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - for ( k = 0; k < numTimeSlots; k++ ) - { - /* Combine first and second parts to generate binaural output signal with room effect */ - v_add( Cldfb_RealBuffer_Binaural[chIdx][k], reverbRe[chIdx][k], Cldfb_RealBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); - v_add( Cldfb_ImagBuffer_Binaural[chIdx][k], reverbIm[chIdx][k], Cldfb_ImagBuffer_Binaural[chIdx][k], hBinRenderer->conv_band ); - } - } - } - - pop_wmops(); - return; -} -#endif diff --git a/lib_dec/ivas_core_dec.c b/lib_dec/ivas_core_dec.c index 73b877015..e7708a747 100644 --- a/lib_dec/ivas_core_dec.c +++ b/lib_dec/ivas_core_dec.c @@ -41,10 +41,8 @@ #include "ivas_prot_fx.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -52,7 +50,6 @@ * * Principal IVAS core decoder routine, where number of core channels is 1 or 2 *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_core_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ @@ -1639,692 +1636,3 @@ ivas_error ivas_core_dec_fx( pop_wmops(); return error; } -#else -ivas_error ivas_core_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - const int16_t n_channels, /* i : number of channels to be decoded */ - float *output[], /* o : output synthesis signal */ - float hb_synth[][L_FRAME48k], /* o : output HB synthesis signal */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - int16_t i, n, output_frame; - Decoder_State **sts, *st; - STEREO_ICBWE_DEC_HANDLE hStereoICBWE; - STEREO_TD_DEC_DATA_HANDLE hStereoTD; - int16_t sharpFlag[CPE_CHANNELS]; - float synth[CPE_CHANNELS][L_FRAME48k]; - float tmp_buffer[L_FRAME48k]; - int16_t tmps, incr; - float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; - float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; - int16_t core_switching_flag[CPE_CHANNELS]; - float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; - float tmp; - float pitch_buf[CPE_CHANNELS][NB_SUBFR16k]; - int16_t unbits[CPE_CHANNELS]; - int16_t sid_bw[CPE_CHANNELS]; - FRAME_MODE frameMode[CPE_CHANNELS]; - float tdm_lspQ_PCh[M], tdm_lsfQ_PCh[M]; - int16_t tdm_LRTD_flag; - int32_t element_brate, output_Fs; - int32_t last_element_brate; - int16_t use_cldfb_for_dft; - float *p_output_mem; - int16_t flag_sec_CNA; - int16_t read_sid_info; - int16_t last_element_mode; - int16_t nchan_out; - float *save_hb_synth; - ivas_error error; - - error = IVAS_ERR_OK; - push_wmops( "ivas_core_dec" ); - - /*------------------------------------------------------------------* - * General initialization - *-----------------------------------------------------------------*/ - - use_cldfb_for_dft = 0; - tdm_LRTD_flag = -1; - read_sid_info = 1; /* read SID by default */ - - if ( hSCE != NULL ) - { - sts = hSCE->hCoreCoder; - hStereoICBWE = NULL; - element_brate = hSCE->element_brate; - last_element_brate = hSCE->last_element_brate; /* note: this parameter is unused */ - last_element_mode = IVAS_SCE; - hStereoTD = NULL; - p_output_mem = NULL; - nchan_out = 1; - if ( st_ivas != NULL && st_ivas->ivas_format == ISM_FORMAT ) - { - if ( st_ivas->hISMDTX.sce_id_dtx != hSCE->sce_id ) - { - read_sid_info = 0; - } - } - } - else - { - sts = hCPE->hCoreCoder; - element_brate = hCPE->element_brate; - last_element_brate = hCPE->last_element_brate; - last_element_mode = hCPE->last_element_mode; - hStereoICBWE = hCPE->hStereoICBWE; - hStereoTD = hCPE->hStereoTD; - p_output_mem = hCPE->output_mem[1]; - nchan_out = hCPE->nchan_out; - - if ( hCPE->hStereoTD != NULL ) - { - tdm_LRTD_flag = hCPE->hCoreCoder[0]->tdm_LRTD_flag; - } - - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - use_cldfb_for_dft = ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ? 1 : 0; - } - } - - output_Fs = sts[0]->output_Fs; - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - - for ( n = 0; n < n_channels; n++ ) - { - st = sts[n]; - - /*------------------------------------------------------------------* - * Initialization per core-decoder channel - *-----------------------------------------------------------------*/ - - frameMode[n] = FRAMEMODE_NORMAL; - st->rate_switching_reset = 0; - - st->mdct_sw = MODE1; - - sid_bw[n] = -1; - core_switching_flag[n] = 0; - sharpFlag[n] = 0; - unbits[n] = 0; - st->GSC_IVAS_mode = 0; - st->element_brate = element_brate; - - st->use_partial_copy = 0; - st->rf_flag = 0; - st->rf_frame_type = RF_NO_DATA; - - if ( st->bfi == 1 ) - { - frameMode[n] = FRAMEMODE_MISSING; - st->coder_type = st->last_coder_type; - } - else - { - if ( !( st->element_mode == IVAS_CPE_TD && n == 1 ) ) /* coder_type for SCh in TD stereo is already read in tdm_configure_dec() */ - { - st->coder_type = INACTIVE; - } - st->extl = -1; - st->flagGuidedAcelp = 0; - } - -#ifdef NONBE_MDCT_ST_PLC_DO_NOT_SCALE_OLD_OUT_IF_FIRST_GOOD_IS_SID - if ( !st->bfi && st->prev_bfi && st->total_brate > SID_2k40 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hTcxDec != NULL ) -#else - if ( !st->bfi && st->prev_bfi && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hTcxDec != NULL ) -#endif - { - v_multc( st->hHQ_core->old_out, st->hTcxDec->conceal_eof_gain_float * st->last_concealed_gain_syn_deemph_float, st->hHQ_core->old_out, st->hTcxDec->L_frameTCX ); - v_multc( st->hHQ_core->old_outLB, st->hTcxDec->conceal_eof_gain_float * st->last_concealed_gain_syn_deemph_float, st->hHQ_core->old_outLB, st->L_frame ); - } - - set_f( voice_factors[n], 0.f, NB_SUBFR16k ); - set_f( hb_synth[n], 0.0f, L_FRAME48k ); - - /*------------------------------------------------------------------* - * Decision matrix (selection of technologies) - *-----------------------------------------------------------------*/ - - if ( st->bfi != 1 ) - { - ivas_decision_matrix_dec( st, &sharpFlag[n], &core_switching_flag[n], element_brate, nchan_out ); - - synchonize_channels_mdct_sid( sts, n ); - - if ( st->bfi != 1 ) /* note: st->bfi can be changed from 0 to 1 in ivas_decision_matrix_dec() when BER is detected */ - { - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->fscale_old = st->fscale; - st->fscale = sr2fscale( st->sr_core ); - } - else - { - frameMode[n] = FRAMEMODE_MISSING; - } - } - else if ( st->element_mode >= IVAS_SCE && st->prev_bfi == 1 && st->last_con_tcx == 1 ) - { - st->core = TCX_20_CORE; - } - } /* n_channels loop */ - - /* MDCT stereo -> DFT stereo switching */ - if ( hCPE != NULL && hCPE->last_element_mode == IVAS_CPE_MDCT && hCPE->element_mode == IVAS_CPE_DFT ) - { - int16_t ovl, fade_len; - if ( sts[0]->L_frame != sts[0]->last_L_frame ) - { - lerp_flt( sts[0]->hHQ_core->old_outLB, sts[0]->hHQ_core->old_outLB, sts[0]->L_frame, sts[0]->last_L_frame ); - } - if ( sts[0]->L_frame != L_FRAME16k ) - { - ovl = (int16_t) ( STEREO_DFT32MS_OVL_16k * ( (float) sts[0]->L_frame / L_FRAME16k ) ); - lerp_flt( hCPE->input_mem_LB[0], hCPE->input_mem_LB[0], ovl, STEREO_DFT32MS_OVL_16k ); - - fade_len = (int16_t) ( STEREO_MDCT2DFT_FADE_LEN_48k * ( (float) sts[0]->L_frame / L_FRAME16k ) ); - lerp_flt( hCPE->old_outLB_mdct, hCPE->old_outLB_mdct, fade_len, STEREO_MDCT2DFT_FADE_LEN_48k ); - } - } - - if ( hCPE != NULL && hCPE->hStereoCng != NULL ) - { - hCPE->hStereoCng->flag_cna_fade = 0; - } - - if ( sba_dirac_stereo_flag && hSCE && sts[0]->total_brate <= SID_2k40 && sts[0]->cng_type == FD_CNG ) - { - save_hb_synth = hSCE->save_hb_synth; - } - else - { - save_hb_synth = NULL; - } - - /*------------------------------------------------------------------* - * Decode SID for MDCT-Stereo DTX mode - *-----------------------------------------------------------------*/ - - if ( sts[0]->element_mode == IVAS_CPE_MDCT && sts[0]->total_brate == SID_2k40 ) - { - if ( sts[0]->cng_sba_flag ) - { - FdCngDecodeDiracMDCTStereoSID( hCPE ); - } - else - { - FdCngDecodeMDCTStereoSID( hCPE ); - } - } - - /*------------------------------------------------------------------* - * Sanity check in combined format coding - *-----------------------------------------------------------------*/ - - if ( hCPE != NULL && hCPE->element_mode == IVAS_CPE_DFT && hCPE->brate_surplus > 0 ) - { - ivas_combined_format_brate_sanity( hCPE->element_brate, sts[0]->core, sts[0]->total_brate, &( sts[0]->core_brate ), &( sts[0]->inactive_coder_type_flag ), &tmps ); - } - - /*------------------------------------------------------------------* - * Core Decoding - *-----------------------------------------------------------------*/ - - for ( n = 0; n < n_channels; n++ ) - { - st = sts[n]; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - if ( st->bfi == 1 ) - { - st->nbLostCmpt++; - } - else - { - if ( st->prev_bfi == 1 ) - { - st->prev_nbLostCmpt = st->nbLostCmpt; - } - else - { - st->prev_nbLostCmpt = 0; - } - - st->nbLostCmpt = 0; - } - st->enablePlcWaveadjust = 0; - - if ( n == 1 ) - { - sts[1]->BER_detect |= sts[0]->BER_detect; - } - - /*---------------------------------------------------------------------* - * Detect bandwidth switching - *---------------------------------------------------------------------*/ - - bandwidth_switching_detect( st ); - - /*---------------------------------------------------------------------* - * Preprocessing (preparing) for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - if ( ( error = core_switching_pre_dec( st, output_frame, sts[0]->last_core_brate, nchan_out, last_element_mode, last_element_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - flag_sec_CNA = -1; - if ( hCPE != NULL ) - { - flag_sec_CNA = sts[1]->flag_cna; - } - - /*---------------------------------------------------------------------* - * ACELP core decoding - * TCX core decoding - * HQ core decoding - *---------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - /* ACELP core decoder */ - if ( ( error = acelp_core_dec( st, output[n], synth[n], save_hb_synth, bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], sharpFlag[n], pitch_buf[n], &unbits[n], &sid_bw[n], hStereoTD, tdm_lspQ_PCh, tdm_lsfQ_PCh, use_cldfb_for_dft, last_element_mode, last_element_brate, flag_sec_CNA, nchan_out, hCPE == NULL ? NULL : hCPE->hStereoCng, read_sid_info ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE ) && st->element_mode != IVAS_CPE_MDCT ) - { - /* TCX decoder */ - stereo_tcx_core_dec( st, frameMode[n], output[n], synth[n], pitch_buf[n], sba_dirac_stereo_flag, hStereoTD, last_element_mode, flag_sec_CNA, hCPE == NULL ? NULL : hCPE->hStereoCng, nchan_out, st_ivas == NULL ? 0 : st_ivas->ivas_format ); - } - - if ( st->core == HQ_CORE ) - { - /* HQ core decoder */ - hq_core_dec( st, synth[n], output_frame, NORMAL_HQ_CORE, core_switching_flag[n], output[n] ); - } - - /*---------------------------------------------------------------------* - * TD stereo updates - *---------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_TD && n == 0 ) - { - td_stereo_param_updt( st->lsp_old, st->lsf_old, st->old_pitch_buf + st->nb_subfr, tdm_lspQ_PCh, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); - } - - } /* n_channels loop */ - - /*---------------------------------------------------------------------* - * MDCT stereo: joint TCX Core Decoding - *---------------------------------------------------------------------*/ - - if ( sts[0]->element_mode == IVAS_CPE_MDCT ) - { - /* active-frame decoding */ - if ( sts[0]->core_brate > SID_2k40 ) - { - if ( hMCT ) - { - pop_wmops(); - - return error; - } - else - { - stereo_mdct_core_dec( st_ivas, hCPE, output, synth ); - } - } - /* for inactive frames with mono output, copy and (if necessary) downmix buffers */ - else if ( hCPE->nchan_out == 1 ) - { - updateBuffersForDmxMdctStereo( hCPE, output_frame, output, synth ); - } - -#ifdef NONBE_MDCT_ST_DTX_SKIP_DEWHITENING_OF_NOISE_SHAPES_ON_SID_FRAMES - - /* On first good active frame after frameloss undo the whitening of the bg noise shape */ - if ( sts[0]->core_brate > SID_2k40 && sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) -#else - if ( sts[0]->bfi == 0 && sts[0]->prev_bfi == 1 ) - /* On first good frame after frameloss undo the whitening of the bg noise shape */ -#endif - { - for ( n = 0; n < n_channels; ++n ) - { - if ( sts[n]->last_core_bfi != ACELP_CORE ) - { - TonalMdctConceal_whiten_noise_shape_ivas( sts[n], L_FRAME16k, ON_FIRST_GOOD_FRAME ); - } - } - } - } - - /*---------------------------------------------------------------------* - * Stereo CNG updates - *---------------------------------------------------------------------*/ - - if ( sts[0]->element_mode == IVAS_CPE_TD && hCPE->hStereoCng != NULL ) - { - stereo_cng_compute_PScorr( output, &hCPE->hStereoCng->c_PS_LT, sts[0]->L_frame, sts[1]->L_frame ); - } - - /*---------------------------------------------------------------------* - * Postprocessing, BWEs and updates - *---------------------------------------------------------------------*/ - - for ( n = 0; n < n_channels; n++ ) - { - st = sts[n]; - - /*---------------------------------------------------------------------* - * TD-BWE for ACELP to TCX transitions - *---------------------------------------------------------------------*/ - - if ( st->last_core == ACELP_CORE && ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) && st->hBWE_TD != NULL ) - { - if ( ( st->bwidth == SWB || st->bwidth == FB ) && ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) ) - { - GenTransition( st->hBWE_TD, hb_synth[n], output_Fs, st->element_mode, st->L_frame, st->rf_flag, st->total_brate ); - } - else if ( st->bwidth == WB && st->last_extl == WB_TBE ) - { - GenTransition_WB( st->hBWE_TD, hb_synth[n], output_Fs ); - } - } - - /*---------------------------------------------------------------------* - * Postprocessing for ACELP/MDCT core switching - *---------------------------------------------------------------------*/ - - /* save synth and output in case of SBA DirAC stereo output as core switching is done outside of core decoder */ - if ( sba_dirac_stereo_flag && st->element_mode != IVAS_CPE_MDCT && !( st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) - { - mvr2r( synth[n], hSCE->save_synth, output_frame ); - } - - if ( ( error = core_switching_post_dec( st, synth[n], output[n], p_output_mem, ( st_ivas != NULL ) ? st_ivas->ivas_format : UNDEFINED_FORMAT, use_cldfb_for_dft, output_frame, 0 /*core_switching_flag*/, sba_dirac_stereo_flag, nchan_out, ( hCPE != NULL ) ? hCPE->last_element_mode : IVAS_SCE ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* for FD-CNG we need the delay compensation in the synth, so do this afterwards */ - if ( sba_dirac_stereo_flag && hSCE && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) - { - mvr2r( synth[n], hSCE->save_synth, output_frame ); - } - - /* if we transition from inactive to active coding in MDCT-Stereo DTX and the output format is mono DMX, we need to sync the upsampled buffer between channels here */ - if ( n == 0 && st->element_mode == IVAS_CPE_MDCT && st->last_core == ACELP_CORE && st->core != ACELP_CORE && ( nchan_out == 1 || ( hCPE != NULL && hCPE->last_element_mode == IVAS_CPE_DFT ) ) ) - { - mvr2r( sts[0]->previoussynth, sts[1]->previoussynth, st->hTcxDec->L_frameTCX ); - } - - /*---------------------------------------------------------------------* - * Pre-processing for bandwidth switching - *---------------------------------------------------------------------*/ - - bw_switching_pre_proc( st, old_syn_12k8_16k[n], last_element_brate, nchan_out ); - - /*---------------------------------------------------------------------* - * WB TBE decoding - * WB BWE decoding - *---------------------------------------------------------------------*/ - - if ( st->extl == WB_TBE ) - { - /* WB TBE decoder */ - wb_tbe_dec( st, bwe_exc_extended[n], voice_factors[n], hb_synth[n] ); - } - else if ( st->element_mode == IVAS_CPE_TD && n == 1 && !tdm_LRTD_flag && st->extl != -1 && st->bws_cnt == 0 && st->extl_brate == 0 ) - { - /* do nothing */ - } - else if ( st->extl == WB_BWE && st->bws_cnt == 0 ) - { - /* WB BWE decoder */ - wb_bwe_dec_flt( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame, voice_factors[n], pitch_buf[n] ); - } - - /*---------------------------------------------------------------------* - * SWB(FB) TBE decoding - * SWB(FB) BWE decoding - *---------------------------------------------------------------------*/ - - if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->coder_type != AUDIO && st->coder_type != INACTIVE && st->core_brate >= SID_2k40 && st->core == ACELP_CORE && !st->con_tcx && output_Fs >= 32000 && st->bwidth > NB && st->bws_cnt > 0 ) ) - { - /* SWB TBE decoder */ - swb_tbe_dec( st, hStereoICBWE, bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], tmp_buffer /*fb_exc*/, hb_synth[n], pitch_buf[n] ); - - /* FB TBE decoder */ - if ( st->extl == FB_TBE ) - { - fb_tbe_dec( st, tmp_buffer /*fb_exc*/, hb_synth[n], tmp_buffer /*fb_synth_ref*/, output_frame ); - } - } - else if ( st->extl == SWB_BWE || st->extl == FB_BWE || ( output_Fs >= 32000 && st->core == ACELP_CORE && st->bwidth > NB && st->bws_cnt > 0 && !st->ppp_mode_dec && !( st->nelp_mode_dec == 1 && st->bfi == 1 ) ) ) - { - /* SWB BWE decoder */ - swb_bwe_dec_flt( st, output[n], synth[n], hb_synth[n], use_cldfb_for_dft, output_frame ); - } - - /*---------------------------------------------------------------------* - * FEC - recovery after lost HQ core (smoothing of the BWE component) - *---------------------------------------------------------------------*/ - - if ( st->prev_bfi && st->last_core == HQ_CORE && st->extl != -1 ) - { - tmp = FRAC_BWE_SMOOTH / output_frame; - - for ( i = 0; i < output_frame / FRAC_BWE_SMOOTH; i++ ) - { - hb_synth[n][i] *= ( i * tmp ); - } - } - - /*---------------------------------------------------------------------* - * SWB CNG - *---------------------------------------------------------------------*/ - - if ( ( output_frame >= L_FRAME32k && st->hTdCngDec != NULL ) || ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB && st->hTdCngDec != NULL ) ) - { - /* SHB CNG decoder */ - swb_CNG_dec( st, synth[n], hb_synth[n], sid_bw[n] ); - } - - /*-------------------------------------------------------------------* - * Inter-channel BWE decoding - *-------------------------------------------------------------------*/ - - if ( n == 0 && st->element_mode >= IVAS_CPE_DFT ) - { - stereo_icBWE_dec( hCPE, hb_synth[0], hb_synth[1], tmp_buffer /*fb_synth_ref*/, voice_factors[0], output_frame ); - } - - if ( st->element_mode == EVS_MONO ) - { - /*----------------------------------------------------------------* - * BFI waveform adjustment - *----------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE && !st->bfi && st->prev_bfi && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 && ( st->last_core_bfi == TCX_20_CORE || st->last_core_bfi == TCX_10_CORE ) && st->hPlcInfo->concealment_method == TCX_NONTONAL && st->hPlcInfo->nbLostCmpt < 4 ) - { - tmps = NS2SA( output_Fs, DELAY_CLDFB_NS ); - - waveform_adj2( st->hPlcInfo, st->hTonalMDCTConc->secondLastPcmOut_float, synth[n] + tmps, tmps, st->hPlcInfo->nbLostCmpt + 1, st->bfi ); - - st->hPlcInfo->Pitch = 0; - } - } - - /*----------------------------------------------------------------* - * Transition and synchronization of BWE components - *----------------------------------------------------------------*/ - - if ( ( st->extl != -1 && ( st->extl != IGF_BWE || st->last_core == ACELP_CORE ) ) || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) - { - /* Calculate an additional delay of extension layer components to be synchronized with ACELP synthesis */ - if ( st->L_frame == L_FRAME ) - { - /* TBE on top of ACELP@12.8kHz */ - tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_12k8_NS ); - } - else - { - if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) - { - /* HR SWB BWE on top of ACELP@16kHz */ - tmps = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); - } - else - { - /* TBE on top of ACELP@16kHz */ - tmps = NS2SA( output_Fs, MAX_DELAY_TBE_NS - DELAY_SWB_TBE_16k_NS ); - } - } - - /* Smooth transitions when switching between different technologies */ - if ( !( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) && st->last_core == ACELP_CORE ) && - ( st->extl != st->last_extl || ( st->extl == st->last_extl && ( st->core ^ st->last_core ) == HQ_CORE ) ) && !( st->extl == SWB_CNG && st->last_extl == SWB_TBE ) && ( st->element_mode != IVAS_CPE_TD || ( hCPE->element_mode == IVAS_CPE_TD && tdm_LRTD_flag ) ) ) - { - /* switching between BWE and TBE technologies */ - incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); - for ( i = 0; i < tmps; i++ ) - { - hb_synth[n][i] *= sin_table256[i * incr]; - } - - set_f( st->hb_prev_synth_buffer, 0.0f, tmps ); - } - else if ( tmps < st->old_bwe_delay ) - { - /* the previous frame was TBE on top of ACELP@16kHz and the current frame is TBE on top of ACELP@12.8kHz */ - incr = (int16_t) ( L_FRAME / ( tmps + 0.5f ) ); - for ( i = 0; i < tmps; i++ ) - { - tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr] + - st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; - } - - mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); - } - else if ( tmps > st->old_bwe_delay ) - { - /* the previous frame was TBE on top of ACELP@12.8kHz and the current frame is TBE on top of ACELP@16kHz */ - incr = (int16_t) ( L_FRAME / ( st->old_bwe_delay + 0.5f ) ); - for ( i = 0; i < st->old_bwe_delay; i++ ) - { - tmp_buffer[i] = st->hb_prev_synth_buffer[i] * sin_table256[255 - i * incr]; - } - - for ( ; i < tmps; i++ ) - { - tmp_buffer[i] = 0.0f; - } - - for ( i = 0; i < st->old_bwe_delay; i++ ) - { - tmp_buffer[tmps - 1 - i] += st->hb_prev_synth_buffer[st->old_bwe_delay - 1 - i] * sin_table256[i * incr]; - } - - mvr2r( tmp_buffer, st->hb_prev_synth_buffer, tmps ); - } - - if ( ( st->element_mode != IVAS_CPE_TD && !use_cldfb_for_dft ) || ( hCPE->element_mode == IVAS_CPE_TD && tdm_LRTD_flag ) ) - { - /* Delay hb_synth */ - delay_signal_float( hb_synth[n], output_frame, st->hb_prev_synth_buffer, tmps ); - } - else - { - mvr2r( hb_synth[n] + output_frame - tmps, st->hb_prev_synth_buffer, tmps ); - } - - st->old_bwe_delay = tmps; - if ( st->hBWE_TD != NULL ) - { - mvr2r( hb_synth[n], st->hBWE_TD->old_hb_synth, output_frame ); - } - - /* SWB CNG/DTX - calculate SHB energy */ - if ( output_frame >= L_FRAME32k && st->extl > SWB_CNG && st->core == ACELP_CORE && st->hTdCngDec != NULL ) - { - st->hTdCngDec->last_shb_ener = sum2_f( hb_synth[n], output_frame ) + 0.001f; - st->hTdCngDec->last_shb_ener /= (float) output_frame; - st->hTdCngDec->last_shb_ener = 10 * log10f( st->hTdCngDec->last_shb_ener ); - } - } - - if ( sba_dirac_stereo_flag && st->element_mode != IVAS_CPE_MDCT ) - { - /* for SBA DirAC stereo output DFT Stereo core switching and updates are done in ivas_sba_dirac_stereo_dec() as hCPE is not available at this point */ - break; - } - - /*----------------------------------------------------------------* - * Post-processing - * - TCX-LTP Postfilter (except DFT stereo) - * - core switching in DFT stereo - * - updates for potential TD->DFT stereo switching - *----------------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_DFT ) - { - if ( st->element_mode != IVAS_CPE_MDCT || sba_dirac_stereo_flag ) - { - ivas_post_proc( hSCE, hCPE, n, synth[n], NULL, output_frame, sba_dirac_stereo_flag ); - } - - /* update OLA buffers - needed for switching to DFT stereo */ - if ( !sba_dirac_stereo_flag ) - { - stereo_td2dft_update( hCPE, n, output[n], synth[n], hb_synth[n], output_frame ); - } - } - else /* IVAS_CPE_DFT */ - { - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - stereo_mdct2dft_update( hCPE, output[0], synth[0] ); - } - - stereo_dft_dec_core_switching( hCPE, output[0], synth[0], hb_synth[0], DFT, output_frame, use_cldfb_for_dft, 0 ); - - if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - /* mono output for non-residual coding modes uses CLDFB instead of DFT - requires DFT buffer update in case of bitrate switching */ - stereo_td2dft_update( hCPE, n, output[n], synth[n], hb_synth[n], output_frame ); - } - } - - mvr2r( synth[n], output[n], output_frame ); - - /*--------------------------------------------------------* - * Common updates - *--------------------------------------------------------*/ - - /* Save synthesis for HQ FEC */ - save_synthesis_hq_fec( st, output[n], output_frame, hCPE ); - - /* Updates */ - updt_dec_common( st, NORMAL_HQ_CORE, -1, output[n] ); - - } /* n_channels loop */ - - - pop_wmops(); - return error; -} -#endif diff --git a/lib_dec/ivas_corecoder_dec_reconfig.c b/lib_dec/ivas_corecoder_dec_reconfig.c index 8b83d8702..56a45ddb0 100644 --- a/lib_dec/ivas_corecoder_dec_reconfig.c +++ b/lib_dec/ivas_corecoder_dec_reconfig.c @@ -33,10 +33,8 @@ #include "options.h" #include "ivas_cnst.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED #include "prot.h" #include #include "wmc_auto.h" @@ -48,7 +46,6 @@ * Allocate, initialize, and configure SCE/CPE/MCT handles in case of bitrate switching *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_corecoder_dec_reconfig_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nSCE_old, /* i : number of SCEs in previous frame */ @@ -466,328 +463,6 @@ ivas_error ivas_corecoder_dec_reconfig_fx( return error; } -#else -ivas_error ivas_corecoder_dec_reconfig( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nSCE_old, /* i : number of SCEs in previous frame */ - int16_t nCPE_old, /* i : number of CPEs in previous frame */ - const int16_t nchan_transport_old, /* i : number of TCs in previous frame */ - const int16_t sba_dirac_stereo_flag_old, /* i : signal stereo rendering using DFT upmix in previous frame */ - const int32_t brate_SCE, /* i : bitrate to be set for the SCEs */ - const int32_t brate_CPE /* i : bitrate to be set for the CPEs */ -) -{ - int16_t n, sce_id, cpe_id, output_frame; - int16_t nSCE_existing, nCPE_existing; - int32_t ivas_total_brate; - int16_t nchan_transport_real; - MC_MODE last_mc_mode; - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - int16_t prev_bfi; - Decoder_State *st0; - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - hDecoderConfig = st_ivas->hDecoderConfig; - ivas_total_brate = hDecoderConfig->ivas_total_brate; - output_frame = (int16_t) ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - error = IVAS_ERR_OK; - - if ( st_ivas->ivas_format == MC_FORMAT ) - { - last_mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ), st_ivas->hDecoderConfig->last_ivas_total_brate ); /* NB: this assumes that LS config remains the same between frames */ - } - else - { - last_mc_mode = MC_MODE_NONE; - } - - nchan_transport_real = st_ivas->nchan_transport; - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - nchan_transport_real += st_ivas->nchan_ism; - } - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SCE/CPE/MCT handles - *-----------------------------------------------------------------*/ - - /* remove dummy CPE element for DFT stereo-like upmix */ - if ( ( st_ivas->ivas_format == SBA_FORMAT && sba_dirac_stereo_flag_old && nchan_transport_old == 1 && ( !st_ivas->sba_dirac_stereo_flag || st_ivas->nchan_transport > 1 ) ) || - ( st_ivas->ivas_format == MC_FORMAT && last_mc_mode == MC_MODE_MCMASA && sba_dirac_stereo_flag_old && nchan_transport_old == 1 && ( !st_ivas->sba_dirac_stereo_flag || st_ivas->nchan_transport > 1 ) ) ) - { - st_ivas->hCPE[0]->hCoreCoder[0] = NULL; - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - destroy_cpe_dec( st_ivas->hCPE[0] ); - st_ivas->hCPE[0] = NULL; - - if ( st_ivas->hSCE[0] != NULL ) - { - free( st_ivas->hSCE[0]->save_synth ); - st_ivas->hSCE[0]->save_synth = NULL; - - free( st_ivas->hSCE[0]->save_hb_synth ); - st_ivas->hSCE[0]->save_hb_synth = NULL; - } - } - - if ( nchan_transport_real == nchan_transport_old && st_ivas->nSCE == nSCE_old && st_ivas->nCPE == nCPE_old ) - { - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - st_ivas->hSCE[sce_id]->element_brate = brate_SCE; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = brate_CPE; - - /* prepare bitstream buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - } - - if ( st_ivas->nCPE > 1 ) - { - if ( ( error = mct_dec_reconfigure( st_ivas, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - st0 = ( nSCE_old > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; - prev_bfi = st0->prev_bfi; - nSCE_existing = min( nSCE_old, st_ivas->nSCE ); - nCPE_existing = min( nCPE_old, st_ivas->nCPE ); - - /* destroy superfluous core coder elements */ - for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) - { - destroy_sce_dec( st_ivas->hSCE[sce_id] ); - st_ivas->hSCE[sce_id] = NULL; - } - - if ( sba_dirac_stereo_flag_old && nCPE_old == 0 && st_ivas->hCPE[0] ) - { - st_ivas->hCPE[0]->hCoreCoder[0] = 0; /* this has been deallocated as part of the SCE it actually belongs to */ - destroy_cpe_dec( st_ivas->hCPE[0] ); - st_ivas->hCPE[0] = NULL; - } - - for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) - { - /* don't deallocate first CPE in case of mono/stereo output of 1 TC SBA, only deallocate core coder */ - if ( cpe_id == 0 && st_ivas->sba_dirac_stereo_flag && sba_dirac_stereo_flag_old ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( st_ivas->hCPE[cpe_id]->hCoreCoder[n] != NULL ) - { - destroy_core_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - - free( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - st_ivas->hCPE[cpe_id]->hCoreCoder[n] = NULL; - } - } - continue; - } - destroy_cpe_dec( st_ivas->hCPE[cpe_id] ); - st_ivas->hCPE[cpe_id] = NULL; - } - - /* the CPE-internal settings depend from ivas_format and mc_mode, so clean-up when switching between mc_modes */ - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode != last_mc_mode && ( st_ivas->mc_mode == MC_MODE_MCMASA || last_mc_mode == MC_MODE_MCMASA ) ) - { - for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) - { - destroy_cpe_dec( st_ivas->hCPE[cpe_id] ); - st_ivas->hCPE[cpe_id] = NULL; - } - nCPE_old = 0; - nCPE_existing = min( nCPE_old, st_ivas->nCPE ); - } - if ( st_ivas->nCPE <= 1 && st_ivas->hMCT != NULL ) - { - ivas_mct_dec_close( &st_ivas->hMCT ); - } - - /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles from the first CPE*/ - if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) - { - free( st_ivas->hCPE[0]->hStereoMdct ); - st_ivas->hCPE[0]->hStereoMdct = NULL; - } - - for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) - { - st_ivas->hSCE[sce_id]->element_brate = brate_SCE; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - for ( ; sce_id < st_ivas->nSCE; sce_id++ ) - { - if ( ( error = create_sce_dec( st_ivas, sce_id, brate_SCE ) ) != IVAS_ERR_OK ) - { - return error; - } - st_ivas->hSCE[sce_id]->hCoreCoder[0]->prev_bfi = prev_bfi; - } - if ( st_ivas->sba_dirac_stereo_flag && sba_dirac_stereo_flag_old && st_ivas->nchan_transport == 1 && nSCE_old == 0 ) - { - st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - } - - for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = brate_CPE; - - /* prepare bitstream buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - } - for ( ; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hOutSetup.separateChannelEnabled ) - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - - if ( ( error = create_cpe_dec( st_ivas, cpe_id, brate_CPE ) ) != IVAS_ERR_OK ) - { - return error; - } - st_ivas->hCPE[cpe_id]->hCoreCoder[0]->prev_bfi = prev_bfi; - st_ivas->hCPE[cpe_id]->hCoreCoder[1]->prev_bfi = prev_bfi; - } - - if ( st_ivas->nCPE > 1 && nCPE_old <= 1 ) - { - if ( nCPE_old == 1 ) - { - /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handles for MCT */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; - st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); - st_ivas->hCPE[0]->hCoreCoder[n]->igf = 0; - } - } - - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->hMCT != NULL && st_ivas->nCPE > 1 ) - { - if ( ( error = mct_dec_reconfigure( st_ivas, st_ivas->nchan_transport != nchan_transport_old ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ - if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) - { - if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->use_itd = 0; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->reverse_dmx = 0; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->smooth_ratio = 1.f; - set_s( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->prev_ms_mask[0], 0, MAX_SFB ); - set_s( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->prev_ms_mask[1], 0, MAX_SFB ); - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->lastCoh = 1.f; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->mdct_stereo_mode[0] = SMDCT_DUAL_MONO; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->IGFStereoMode[0] = -1; - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->IGFStereoMode[1] = -1; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - /* reset mct_chan_mode */ - st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - } - - /* create dummy CPE element for DFT stereo-like upmix */ - if ( ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->sba_dirac_stereo_flag && !sba_dirac_stereo_flag_old ) || - ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->sba_dirac_stereo_flag && !sba_dirac_stereo_flag_old ) ) - { - /* if at least one CPE is already available, only allocate DFT Stereo struct */ - if ( st_ivas->nCPE > 0 ) - { - if ( ( error = stereo_dft_dec_create( &( st_ivas->hCPE[0]->hStereoDft ), st_ivas->hCPE[0]->element_brate, st_ivas->hDecoderConfig->output_Fs, st_ivas->sba_dirac_stereo_flag, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - } - /* otherwise create extra dummy CPE */ - else - { - if ( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - set_f( st_ivas->hCPE[0]->hStereoDft->buff_LBTCX_mem, 0, NS2SA( 16000, STEREO_DFT32MS_OVL_NS ) ); - - st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - - if ( st_ivas->hSCE[0]->save_synth == NULL ) - { - if ( ( st_ivas->hSCE[0]->save_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo output\n" ) ); - } - set_zero( st_ivas->hSCE[0]->save_synth, output_frame ); - } - - if ( st_ivas->hSCE[0]->save_hb_synth == NULL ) - { - if ( ( st_ivas->hSCE[0]->save_hb_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate HB memory for stereo output\n" ) ); - } - set_zero( st_ivas->hSCE[0]->save_hb_synth, output_frame ); - } - } - - /*-----------------------------------------------------------------* - * Set CNA/CNG flags - *-----------------------------------------------------------------*/ - - if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) - { - ivas_sba_set_cna_cng_flag( st_ivas ); - } - - /* special case, if the decoder goes from 1TC DTX to 2TC active frame (in case the bitstream started with an SBA SID frame), allocate DTX memories */ - if ( hDecoderConfig->last_ivas_total_brate <= IVAS_SID_5k2 && st_ivas->nCPE >= 1 ) - { - if ( ( error = initMdctStereoDtxData( st_ivas->hCPE[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#endif /*-------------------------------------------------------------------* @@ -796,7 +471,6 @@ ivas_error ivas_corecoder_dec_reconfig( * Allocate, initialize, and configure HP20 memory handles in case of bitrate switching *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_hp20_dec_reconfig_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nchan_hp20_old /* i : number of HP20 filters in previous frame */ @@ -876,91 +550,12 @@ ivas_error ivas_hp20_dec_reconfig_fx( return error; } -#else -ivas_error ivas_hp20_dec_reconfig( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nchan_hp20_old /* i : number of HP20 filters in previous frame */ -) -{ - int16_t i, nchan_hp20; - float **old_mem_hp20_out; - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * HP20 memories - *-----------------------------------------------------------------*/ - - nchan_hp20 = getNumChanSynthesis( st_ivas ); - - if ( nchan_hp20 > nchan_hp20_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_out = st_ivas->mem_hp20_out; - st_ivas->mem_hp20_out = NULL; - - if ( ( st_ivas->mem_hp20_out = (float **) malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < nchan_hp20_old; i++ ) - { - st_ivas->mem_hp20_out[i] = old_mem_hp20_out[i]; - old_mem_hp20_out[i] = NULL; - } - /* create additional hp20 memories */ - for ( ; i < nchan_hp20; i++ ) - { - if ( ( st_ivas->mem_hp20_out[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); - } - - free( old_mem_hp20_out ); - old_mem_hp20_out = NULL; - } - else if ( nchan_hp20 < nchan_hp20_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_out = st_ivas->mem_hp20_out; - st_ivas->mem_hp20_out = NULL; - - if ( ( st_ivas->mem_hp20_out = (float **) malloc( nchan_hp20 * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < nchan_hp20; i++ ) - { - st_ivas->mem_hp20_out[i] = old_mem_hp20_out[i]; - old_mem_hp20_out[i] = NULL; - } - /* remove superfluous hp20 memories */ - for ( ; i < nchan_hp20_old; i++ ) - { - free( old_mem_hp20_out[i] ); - old_mem_hp20_out[i] = NULL; - } - - free( old_mem_hp20_out ); - old_mem_hp20_out = NULL; - } - - return error; -} -#endif /*-------------------------------------------------------------------* * ivas_cldfb_dec_reconfig() * * Allocate, initialize, and configure CLDFB handles in case of bitrate switching *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_cldfb_dec_reconfig_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nchan_transport_old, /* i : number of TCs in previous frame */ @@ -1061,87 +656,3 @@ ivas_error ivas_cldfb_dec_reconfig_fx( } return IVAS_ERR_OK; } -#else -ivas_error ivas_cldfb_dec_reconfig( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nchan_transport_old, /* i : number of TCs in previous frame */ - int16_t numCldfbAnalyses_old, /* i : number of CLDFB analysis instances in previous frame */ - const int16_t numCldfbSyntheses_old /* i : number of CLDFB synthesis instances in previous frame */ -) -{ - int16_t i, numCldfbAnalyses, numCldfbSyntheses; - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - - hDecoderConfig = st_ivas->hDecoderConfig; - - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); - - /* special case, if there was one transport channel in the previous frame and more than one in the current frame, - remove the second CLDFB here, it was for CNA/CNG */ - if ( st_ivas->ivas_format == SBA_FORMAT && nchan_transport_old == 1 && numCldfbAnalyses_old == 2 && st_ivas->nchan_transport > 1 ) - { - deleteCldfb_ivas( &( st_ivas->cldfbAnaDec[1] ) ); - numCldfbAnalyses_old--; - } - - /* resample CLDFB analysis instances */ - for ( i = 0; i < min( numCldfbAnalyses, numCldfbAnalyses_old ); i++ ) - { - if ( ( st_ivas->cldfbAnaDec[i]->no_channels * st_ivas->cldfbAnaDec[i]->no_col ) != ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ) ) - { - resampleCldfb_ivas( st_ivas->cldfbAnaDec[i], hDecoderConfig->output_Fs ); - } - } - - /* Analysis*/ - if ( numCldfbAnalyses_old > numCldfbAnalyses ) - { - /* delete superfluous CLDFB synthesis instances */ - for ( i = numCldfbAnalyses; i < numCldfbAnalyses_old; i++ ) - { - deleteCldfb_ivas( &( st_ivas->cldfbAnaDec[i] ) ); - } - } - else if ( numCldfbAnalyses_old < numCldfbAnalyses ) - { - /* create additional CLDFB synthesis instances */ - for ( i = numCldfbAnalyses_old; i < numCldfbAnalyses; i++ ) - { - if ( ( error = openCldfb_ivas( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, hDecoderConfig->output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* Synthesis */ - if ( numCldfbSyntheses_old > numCldfbSyntheses ) - { - /* delete superfluous CLDFB synthesis instances */ - for ( i = numCldfbSyntheses; i < numCldfbSyntheses_old; i++ ) - { - deleteCldfb_ivas( &( st_ivas->cldfbSynDec[i] ) ); - } - } - else if ( numCldfbSyntheses_old < numCldfbSyntheses ) - { - /* create additional CLDFB synthesis instances */ - for ( i = numCldfbSyntheses_old; i < numCldfbSyntheses; i++ ) - { - if ( ( error = openCldfb_ivas( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, hDecoderConfig->output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* CLDFB Interpolation weights */ - if ( st_ivas->ivas_format == SBA_FORMAT && ( numCldfbAnalyses_old != numCldfbAnalyses || numCldfbSyntheses_old != numCldfbSyntheses || nchan_transport_old != st_ivas->nchan_transport ) && numCldfbAnalyses != 0 && numCldfbSyntheses != 0 ) - { - ivas_spar_get_cldfb_gains( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_cpe_dec.c b/lib_dec/ivas_cpe_dec.c index 298ffde1a..bc61a3baa 100644 --- a/lib_dec/ivas_cpe_dec.c +++ b/lib_dec/ivas_cpe_dec.c @@ -48,916 +48,12 @@ * Local function prototypes *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void read_stereo_mode_and_bwidth( CPE_DEC_HANDLE hCPE, const Decoder_Struct *st_ivas ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void stereo_mode_combined_format_dec( const Decoder_Struct *st_ivas, CPE_DEC_HANDLE hCPE ); -#endif - /*--------------------------------------------------------------------------* * ivas_cpe_dec() * * Channel Pair Element (CPE) decoding routine *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_cpe_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - float *output[CPE_CHANNELS], /* o : output synthesis signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - int16_t i, n, n_channels; - int16_t nb_bits, last_core; - int16_t last_bwidth; - int16_t tdm_ratio_idx; - float outputHB[CPE_CHANNELS][L_FRAME48k]; /* 'float' buffer for output HB synthesis, both channels */ - float res_buf[STEREO_DFT_N_8k]; - CPE_DEC_HANDLE hCPE; - Decoder_State **sts; - int32_t ivas_total_brate; - ivas_error error; - int32_t cpe_brate; - int32_t element_brate_ref; - - error = IVAS_ERR_OK; - - push_wmops( "ivas_cpe_dec" ); - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - hCPE = st_ivas->hCPE[cpe_id]; - sts = hCPE->hCoreCoder; - - last_core = sts[0]->last_core; - last_bwidth = sts[0]->last_bwidth; - - sts[0]->BER_detect |= st_ivas->BER_detect; - sts[1]->BER_detect |= st_ivas->BER_detect; - - element_brate_ref = hCPE->element_brate; - - /*------------------------------------------------------------------* - * Read stereo technology info & audio bandwidth - *-----------------------------------------------------------------*/ - - stereo_mode_combined_format_dec( st_ivas, hCPE ); - - read_stereo_mode_and_bwidth( hCPE, st_ivas ); - - /*----------------------------------------------------------------* - * dynamically allocate data structures depending on the actual stereo mode - *----------------------------------------------------------------*/ - - if ( ( error = stereo_memory_dec( ivas_total_brate, hCPE, nb_bits_metadata, st_ivas->hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->mc_mode, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - n_channels = CPE_CHANNELS; - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - n_channels = 1; /* in DFT stereo, only M channel is coded */ - } - - tdm_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; - - for ( n = 0; n < n_channels; n++ ) - { - sts[n]->idchan = n; - sts[n]->element_mode = hCPE->element_mode; - - if ( !st_ivas->bfi ) - { - sts[n]->tdm_LRTD_flag = 0; - } - - /* TD stereo parameters */ - if ( hCPE->hStereoTD != NULL ) - { - hCPE->hStereoTD->tdm_lp_reuse_flag = 0; - hCPE->hStereoTD->tdm_low_rate_mode = 0; - hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; - } - } - - /*----------------------------------------------------------------* - * Resets/updates in case of stereo switching - *----------------------------------------------------------------*/ - - stereo_switching_dec( hCPE, ivas_total_brate ); - - /*----------------------------------------------------------------* - * Configuration of stereo decoder - *----------------------------------------------------------------*/ - - /* Force to MODE1 in IVAS */ - for ( n = 0; n < n_channels; n++ ) - { - sts[n]->codec_mode = MODE1; - } - - if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || sts[0]->ini_frame == 0 || ( ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) ) ) - { - if ( st_ivas->hQMetaData != NULL && ivas_total_brate > IVAS_SID_5k2 ) - { - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, (int32_t) ( 0.7f * st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC ), &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - else - { - /* Note: This only works for stereo operation. If DTX would be applied for multiple CPEs a different bitrate signaling is needed */ - if ( ivas_total_brate <= IVAS_SID_5k2 ) - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, ivas_total_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - } - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->tdm_LRTD_flag ) - { - sts[0]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - sts[1]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - } - else - { - stereo_dft_config( NULL, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - - /*----------------------------------------------------------------* - * Set bitrates per channel - * Set bitstream buffers per channel - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( !st_ivas->bfi ) - { - /* Update DFT Stereo memories */ - stereo_dft_dec_update( hCPE->hStereoDft, output_frame, 0 ); - - if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_5k2 ) - { - if ( ivas_total_brate == FRAME_NO_DATA ) - { - hCPE->hCoreCoder[n]->core_brate = ivas_total_brate; - hCPE->hCoreCoder[0]->total_brate = ivas_total_brate; - } - else - { - hCPE->hCoreCoder[n]->core_brate = SID_2k40; - } - } - - /* read DFT Stereo side info */ - nb_bits = (int16_t) ( ( hCPE->element_brate ) / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal ); - cpe_brate = st_ivas->hCPE[0]->element_brate; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - sts[1]->bit_stream = sts[0]->bit_stream + cpe_brate / FRAMES_PER_SEC - 1 - nb_bits_metadata; - sts[1]->bit_stream += hCPE->brate_surplus / FRAMES_PER_SEC; - } - else - { - sts[1]->bit_stream = sts[0]->bit_stream + ivas_total_brate / FRAMES_PER_SEC - 1 - nb_bits_metadata; - } - - if ( ivas_total_brate == IVAS_SID_5k2 ) - { - nb_bits -= SID_FORMAT_NBITS; - sts[1]->bit_stream -= SID_FORMAT_NBITS; - /* set total bitrate of Stereo CNG parameters for BER detection */ - sts[1]->total_brate = IVAS_SID_5k2 - SID_2k40; - } - - if ( ( ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) || ( st_ivas->ivas_format == MASA_ISM_FORMAT && cpe_brate < MASA_STEREO_MIN_BITRATE ) ) && ivas_total_brate > IVAS_SID_5k2 ) - { - sts[0]->total_brate = hCPE->element_brate; /* Only mono downmix was transmitted in this case */ - } - else - { - if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - nb_bits -= nb_bits_metadata; - if ( hCPE->brate_surplus < 0 ) - { - nb_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); - } - } - - stereo_dft_dec_read_BS( ivas_total_brate, hCPE->element_brate, &sts[0]->total_brate, sts[1], hCPE->hStereoDft, sts[0]->bwidth, output_frame, res_buf, &nb_bits, hCPE->hStereoCng->coh, st_ivas->ivas_format ); - } - - /* subtract metadata bitbudget */ - sts[0]->total_brate -= ( nb_bits_metadata * FRAMES_PER_SEC ); - - /* subtract bit-rate for combined format coding */ - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) - { - sts[0]->total_brate += hCPE->brate_surplus; - } - } - else - { - hCPE->hStereoDft->sg_mem_corrupt = 1; - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* signal bitrate for BW selection in the SCh */ - sts[0]->bits_frame_channel = 0; - sts[1]->bits_frame_channel = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); - sts[1]->bits_frame_channel += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); - if ( st_ivas->hQMetaData != NULL ) - { - sts[1]->bits_frame_channel -= st_ivas->hQMetaData->metadata_max_bits; - } - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - /* compute bit-rate surplus per channel in combined format coding */ - int32_t brate_surplus[CPE_CHANNELS]; - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - brate_surplus[0] = ( ( hCPE->brate_surplus / FRAMES_PER_SEC ) >> 1 ) * FRAMES_PER_SEC; - brate_surplus[1] = hCPE->brate_surplus - brate_surplus[0]; - } - - if ( is_DTXrate( ivas_total_brate ) == 1 && ( sts[0]->first_CNG == 0 || sts[1]->first_CNG == 0 ) ) - { - if ( ( error = initMdctStereoDtxData( hCPE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* this is just for initialization, the true values of "total_brate" and "bits_frame_channel" are set later */ - for ( n = 0; n < n_channels; n++ ) - { - if ( ivas_total_brate == IVAS_SID_5k2 ) - - { - sts[n]->total_brate = SID_2k40; - sts[1]->bit_stream = sts[0]->bit_stream + SID_2k40 / FRAMES_PER_SEC; - } - else - { - /*total bitrate must be set to the element bitrate to avoid false BER if bits read are larger than half the bitrate*/ - sts[n]->total_brate = hCPE->element_brate; - } - sts[n]->bits_frame_nominal = (int16_t) ( sts[n]->total_brate / FRAMES_PER_SEC ); - sts[n]->bits_frame_channel = (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) / n_channels ); - - /* subtract bit-rate for combined format coding */ - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - sts[n]->bits_frame_channel += (int16_t) ( brate_surplus[n] / FRAMES_PER_SEC ); - sts[n]->total_brate += brate_surplus[n]; - } - } - - if ( !st_ivas->hMCT ) - { - if ( st_ivas->ivas_format == SBA_FORMAT && ivas_total_brate == IVAS_SID_5k2 ) - { - for ( n = 0; n < n_channels; n++ ) - { - sts[n]->bits_frame_channel -= nb_bits_metadata / n_channels; - } - } - else - { - /* subtract metadata bitbudget */ - sts[0]->bits_frame_channel -= nb_bits_metadata; - } - } - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - for ( n = 0; n < n_channels; n++ ) - { - /* set ACELP12k8 / ACELP16k flag for flexible ACELP core */ - sts[n]->flag_ACELP16k = set_ACELP_flag_IVAS( hCPE->element_mode, hCPE->element_brate, sts[n]->total_brate, n, ( hCPE->hStereoTD != NULL ? hCPE->hStereoTD->tdm_LRTD_flag : 0 ), sts[n]->bwidth, sts[n]->cng_type ); - } - - for ( n = 0; n < n_channels; n++ ) - { - /* set VAD flag */ - if ( is_DTXrate( ivas_total_brate ) == 1 ) - { - sts[n]->VAD = 0; - sts[n]->active_cnt = 0; - if ( sts[1] != NULL ) - { - sts[1]->active_cnt = 0; - } - } - else - { - sts[n]->VAD = 1; - sts[n]->active_cnt++; - sts[n]->active_cnt = min( sts[n]->active_cnt, 100 ); - } - - /* set CNA flag */ - if ( ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->element_brate <= CNA_MAX_BRATE_DFT_STEREO ) || hCPE->element_brate <= CNA_MAX_BRATE_STEREO ) - { - sts[n]->flag_cna = 1; - } - else - { - sts[n]->flag_cna = 0; - } - } - - /* configure TD stereo decoder */ - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( !st_ivas->bfi ) - { - tdm_configure_dec( st_ivas->ivas_format, st_ivas->ism_mode, hCPE, &tdm_ratio_idx, nb_bits_metadata ); - - sts[1]->bit_stream = sts[0]->bit_stream + ( sts[0]->total_brate / FRAMES_PER_SEC ); - } - else - { - sts[1]->coder_type = sts[1]->last_coder_type; - tdm_ratio_idx = hCPE->hStereoTD->tdm_last_ratio_idx; - } - } - - /*----------------------------------------------------------------* - * Core Decoder - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode != IVAS_CPE_DFT || ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) - { - if ( ( error = ivas_core_dec( st_ivas, NULL, hCPE, st_ivas->hMCT, n_channels, output, outputHB, NULL, st_ivas->sba_dirac_stereo_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->hMCT ) - { - pop_wmops(); - - return error; - } - - /*----------------------------------------------------------------* - * Stereo decoder & upmixing - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT && !( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) - { - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; - set_f( DFT[0], 0.0f, STEREO_DFT_BUF_MAX ); - set_f( DFT[1], 0.0f, STEREO_DFT_BUF_MAX ); - - - /* core decoder */ - if ( ( error = ivas_core_dec( NULL, NULL, hCPE, st_ivas->hMCT, n_channels, output, outputHB, DFT, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* DFT Stereo residual decoding */ - if ( hCPE->hStereoDft->res_cod_band_max > 0 && !st_ivas->bfi ) - { - stereo_dft_dec_res( hCPE, res_buf, output[1] ); - - stereo_dft_dec_analyze( hCPE, output[1], DFT, 1, L_FRAME8k, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); - } - - /* DFT stereo CNG */ - stereo_dtf_cng( hCPE, ivas_total_brate, DFT, output_frame ); - - /* decoding */ - if ( hCPE->nchan_out == 1 ) - { - stereo_dft_unify_dmx( hCPE->hStereoDft, sts[0], DFT, hCPE->input_mem[1], hCPE->hStereoCng->prev_sid_nodata ); - } - else - { - stereo_dft_dec( hCPE->hStereoDft, sts[0], DFT, hCPE->input_mem[1], hCPE->hStereoCng, 0, 0, 0, 0, 0, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - - /* synthesis iFFT */ - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - stereo_dft_dec_synthesize( hCPE, DFT, n, output[n], output_frame ); - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->last_element_mode != IVAS_CPE_TD && sts[0]->tdm_LRTD_flag ) - { - hCPE->hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; - } - - /* TD stereo upmixing */ - stereo_tdm_combine( hCPE, output[0], output[1], output_frame, 0, tdm_ratio_idx ); - if ( sts[0]->tdm_LRTD_flag ) - { - stereo_tdm_combine( hCPE, outputHB[0], outputHB[1], output_frame, 1, tdm_ratio_idx ); - } - - hCPE->hStereoCng->last_tdm_idx = hCPE->hStereoTD->tdm_last_ratio_idx; - hCPE->hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; - - if ( hCPE->nchan_out == 1 ) - { - /* Scale the Right channel with the gain */ - stereo_tca_scale_R_channel( hCPE, output[1], output_frame ); - - /* stereo to mono downmix */ - for ( i = 0; i < output_frame; i++ ) - { - output[0][i] = ( output[0][i] + output[1][i] ) * 0.5f; - } - } - } - - /*----------------------------------------------------------------* - * Update parameters for stereo CNA - *----------------------------------------------------------------*/ - - stereo_cna_update_params( hCPE, output, output_frame, tdm_ratio_idx ); - - /*----------------------------------------------------------------* - * Synthesis synchronization between CPE modes - *----------------------------------------------------------------*/ - - if ( !st_ivas->sba_dirac_stereo_flag ) - { - synchro_synthesis( ivas_total_brate, hCPE, output, output_frame, 0 ); - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->nchan_out == 1 && ( is_DTXrate( ivas_total_brate ) == 0 || ( is_DTXrate( ivas_total_brate ) == 1 && is_DTXrate( st_ivas->hDecoderConfig->last_ivas_total_brate ) == 0 ) ) ) - { - applyDmxMdctStereo( hCPE, output, output_frame ); - } - - /*----------------------------------------------------------------* - * IC-BWE: output LB and HB mix in ACELP mode - *----------------------------------------------------------------*/ - - stereo_icBWE_decproc( hCPE, output, outputHB, last_core, last_bwidth, output_frame ); - - smooth_dft2td_transition( hCPE, output, output_frame ); - - /*----------------------------------------------------------------* - * Temporal ICA, stereo adjustment and upmix - *----------------------------------------------------------------*/ - - stereo_tca_dec( hCPE, output, output_frame ); - - /*----------------------------------------------------------------* - * Common Stereo updates - *----------------------------------------------------------------*/ - - hCPE->last_element_brate = hCPE->element_brate; - hCPE->last_element_mode = hCPE->element_mode; - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - hCPE->element_brate = element_brate_ref; - } - - if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) - { - stereo_cng_dec_update( hCPE, ivas_total_brate ); - } - - st_ivas->BER_detect |= sts[0]->BER_detect; - st_ivas->BER_detect |= sts[1]->BER_detect; - - - pop_wmops(); - return error; -} - -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * create_cpe_dec() - * - * Create, allocate and initialize IVAS decoder CPE handle - *-------------------------------------------------------------------------*/ - -ivas_error create_cpe_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - const int32_t element_brate /* i : element bitrate */ -) -{ - int16_t i, n; - CPE_DEC_HANDLE hCPE; - Decoder_State *st; - int32_t output_Fs; - ivas_error error; - int32_t cpe_brate; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * Allocate CPE handle - *-----------------------------------------------------------------*/ - - if ( ( hCPE = (CPE_DEC_HANDLE) malloc( sizeof( CPE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialization - general parameters - *-----------------------------------------------------------------*/ - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - - hCPE->cpe_id = cpe_id; - - hCPE->element_brate = element_brate; - hCPE->last_element_brate = hCPE->element_brate; - hCPE->element_mode = st_ivas->element_mode_init; - hCPE->last_element_mode = st_ivas->element_mode_init; - - hCPE->hStereoDft = NULL; - hCPE->hStereoDftDmx = NULL; - hCPE->hStereoTD = NULL; - hCPE->hStereoMdct = NULL; - hCPE->hStereoTCA = NULL; - hCPE->hStereoICBWE = NULL; - hCPE->hStereoCng = NULL; - - hCPE->stereo_switching_counter = 10; - hCPE->NbFrameMod = 7; - hCPE->lt_es_em = 0.0f; - - /* Note: nchan_out is considered to be related to the structure. This is nchan_out for CPE and for MASA_format is always 2. */ - if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT || st_ivas->ivas_format == MC_FORMAT ) - { - hCPE->nchan_out = CPE_CHANNELS; - } - else - { - hCPE->nchan_out = min( CPE_CHANNELS, st_ivas->hDecoderConfig->nchan_out ); - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) - { - cpe_brate = element_brate; - } - else - { - cpe_brate = st_ivas->hDecoderConfig->ivas_total_brate; - } - - if ( ( ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE ) || - ( st_ivas->ivas_format == MASA_ISM_FORMAT && cpe_brate < MASA_STEREO_MIN_BITRATE ) ) && - st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) - { - hCPE->nchan_out = 1; - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - set_f( hCPE->prev_hb_synth[n], 0, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); - set_f( hCPE->prev_synth[n], 0, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ) ); - } - - hCPE->brate_surplus = 0; - - /*-----------------------------------------------------------------* - * DFT stereo I/O Buffers: allocate and initialize - *-----------------------------------------------------------------*/ - - for ( i = 0; i < CPE_CHANNELS; i++ ) - { - if ( st_ivas->ivas_format == STEREO_FORMAT || st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT || - ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) || st_ivas->sba_dirac_stereo_flag ) - { - if ( ( hCPE->input_mem[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->input_mem[i], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - - if ( ( hCPE->input_mem_LB[i] = (float *) malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->input_mem_LB[i], STEREO_DFT32MS_OVL_16k ); - - if ( i == 0 ) - { - if ( ( hCPE->input_mem_BPF[0] = (float *) malloc( sizeof( float ) * STEREO_DFT32MS_OVL_16k ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->input_mem_BPF[0], STEREO_DFT32MS_OVL_16k ); - } - - if ( ( hCPE->output_mem[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->output_mem[i], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - - if ( i < hCPE->nchan_out ) - { - if ( ( hCPE->prev_synth_chs[i] = (float *) malloc( sizeof( float ) * NS2SA( output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->prev_synth_chs[i], NS2SA( output_Fs, FRAME_SIZE_NS ) ); - } - else - { - hCPE->prev_synth_chs[i] = NULL; - } - } - else - { - hCPE->input_mem[i] = NULL; - hCPE->input_mem_LB[i] = NULL; - if ( i == 0 ) - { - hCPE->input_mem_BPF[0] = NULL; - } - hCPE->output_mem[i] = NULL; - hCPE->prev_synth_chs[i] = NULL; - } - } - - /*-----------------------------------------------------------------* - * CoreCoder, 2 instances: allocate and initialize - *-----------------------------------------------------------------*/ - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( st_ivas->sba_dirac_stereo_flag && st_ivas->nchan_transport == 1 ) - { - /* for SBA DirAC stereo output CPE element is only used for upmix, core coder is found in SCE element used for core decoding */ - break; - } - - if ( ( st = (DEC_CORE_HANDLE) malloc( sizeof( Decoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - - copy_decoder_config( st_ivas, st ); - - st->total_brate = hCPE->element_brate / ( CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - st->is_ism_format = 0; - - if ( ( error = init_decoder( st, n, st_ivas->mc_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - - hCPE->hCoreCoder[n] = st; - } - - /*-----------------------------------------------------------------* - * DFT stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT || ( st_ivas->sba_dirac_stereo_flag && hCPE->cpe_id == 0 ) ) - { - if ( ( error = stereo_dft_dec_create( &( hCPE->hStereoDft ), hCPE->element_brate, output_Fs, st_ivas->sba_dirac_stereo_flag, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * DFT stereo mono DMX initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode != IVAS_CPE_MDCT && hCPE->nchan_out == 1 ) - { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); - } - - stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); - } - - /*-----------------------------------------------------------------* - * Temporal inter-channel alignment initialization - *-----------------------------------------------------------------*/ - - if ( ( hCPE->element_mode != IVAS_CPE_MDCT || ( st_ivas->ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) ) && hCPE->nchan_out != 1 ) - { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - - stereo_tca_init_dec( hCPE->hStereoTCA ); - } - - /*-----------------------------------------------------------------* - * Stereo IC BWE initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode != IVAS_CPE_MDCT && !( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 ) ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE\n" ) ); - } - - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - - /*-----------------------------------------------------------------* - * TD stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); - } - - stereo_td_init_dec( hCPE->hStereoTD, hCPE->last_element_mode ); - } - - /*-----------------------------------------------------------------* - * MDCT stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) - { - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo MDCT\n" ) ); - } - - if ( st_ivas->ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) - { - hCPE->hStereoMdct->use_itd = 1; - } - else - { - hCPE->hStereoMdct->use_itd = 0; - } - - hCPE->hStereoMdct->reverse_dmx = 0; - hCPE->hStereoMdct->smooth_ratio = 1.f; - set_s( hCPE->hStereoMdct->prev_ms_mask[0], 0, MAX_SFB ); - set_s( hCPE->hStereoMdct->prev_ms_mask[1], 0, MAX_SFB ); - hCPE->hStereoMdct->lastCoh = 1.f; - hCPE->hStereoMdct->mdct_stereo_mode[0] = SMDCT_DUAL_MONO; - hCPE->hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; - hCPE->hStereoMdct->IGFStereoMode[0] = -1; - hCPE->hStereoMdct->IGFStereoMode[1] = -1; - } - - /*-----------------------------------------------------------------* - * Stereo CNG initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); - } - stereo_cng_init_dec( hCPE->hStereoCng, &hCPE->hCoreCoder[0]->hFdCngDec->hFdCngCom->frameSize ); - } - - st_ivas->hCPE[cpe_id] = hCPE; - - return error; -} - - -/*------------------------------------------------------------------------- - * destroy_cpe_dec() - * - * Destroy and deallocate IVAS decoder CPE handle - *-------------------------------------------------------------------------*/ - -void destroy_cpe_dec( - CPE_DEC_HANDLE hCPE /* i/o: CPE decoder structure */ -) -{ - int16_t n; - Decoder_State *st; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st = hCPE->hCoreCoder[n]; - - if ( st != NULL ) - { - destroy_core_dec( st ); - - free( st ); - st = NULL; - } - } - - if ( hCPE->hStereoDft != NULL ) - { - stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); - hCPE->hStereoDft = NULL; - } - - if ( hCPE->hStereoDftDmx != NULL ) - { - free( hCPE->hStereoDftDmx ); - hCPE->hStereoDftDmx = NULL; - } - - if ( hCPE->hStereoTD != NULL ) - { - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; - } - - if ( hCPE->hStereoMdct != NULL ) - { - free( hCPE->hStereoMdct ); - hCPE->hStereoMdct = NULL; - } - - if ( hCPE->hStereoTCA != NULL ) - { - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; - } - - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - - if ( hCPE->input_mem_LB[0] != NULL ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - free( hCPE->input_mem_LB[n] ); - hCPE->input_mem_LB[n] = NULL; - free( hCPE->input_mem[n] ); - hCPE->input_mem[n] = NULL; - free( hCPE->output_mem[n] ); - hCPE->output_mem[n] = NULL; - - if ( hCPE->prev_synth_chs[n] != NULL ) - { - free( hCPE->prev_synth_chs[n] ); - hCPE->prev_synth_chs[n] = NULL; - } - } - free( hCPE->input_mem_BPF[0] ); - hCPE->input_mem_BPF[0] = NULL; - } - - if ( hCPE->hStereoCng != NULL ) - { - free( hCPE->hStereoCng ); - hCPE->hStereoCng = NULL; - } - - free( hCPE ); - - return; -} -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * read_stereo_mode_and_bwidth() @@ -965,159 +61,9 @@ void destroy_cpe_dec( * Read stereo technology info & audio bandwidth *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void read_stereo_mode_and_bwidth( - CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ - const Decoder_Struct *st_ivas /* i : decoder main structure */ -) -{ - Decoder_State **sts; - - /*-----------------------------------------------------------------* - * BFI or NO_DATA frame: Use stereo parameters from last (active) frame - *-----------------------------------------------------------------*/ - - if ( st_ivas->bfi || st_ivas->hDecoderConfig->ivas_total_brate < IVAS_SID_5k2 ) - { - hCPE->element_mode = hCPE->last_element_mode; - } - - /*-----------------------------------------------------------------* - * SID frame: get element mode from SID side info - *-----------------------------------------------------------------*/ - - else if ( st_ivas->hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) - { - switch ( st_ivas->sid_format ) - { - case SID_DFT_STEREO: - hCPE->element_mode = IVAS_CPE_DFT; - /* Read CNG type */ - hCPE->hCoreCoder[0]->cng_type = get_next_indice( hCPE->hCoreCoder[0], 1 ); - - /* Read BW information in SID */ - hCPE->hCoreCoder[0]->bwidth = get_next_indice( hCPE->hCoreCoder[0], 2 ); - break; - case SID_MDCT_STEREO: - /* 2TC SBA DTX also uses MDCT-Stereo DTX */ - case SID_SBA_2TC: - hCPE->element_mode = IVAS_CPE_MDCT; - break; - case SID_SBA_1TC: - assert( !"Forbidden value for SID format in CPE (SBA 1TC), should have already been adressed earlier" ); - break; - case SID_MASA_1TC: - hCPE->element_mode = IVAS_SCE; - break; - case SID_MASA_2TC: - /* 2TC MASA DTX uses MDCT or DFT based core */ - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - hCPE->element_mode = IVAS_CPE_DFT; - } - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - /* Read CNG type */ - hCPE->hCoreCoder[0]->cng_type = get_next_indice( hCPE->hCoreCoder[0], 1 ); - - /* Read BW information in SID */ - hCPE->hCoreCoder[0]->bwidth = get_next_indice( hCPE->hCoreCoder[0], 2 ); - } - break; - default: - /* this is what has been done for all modes previously, may need adaptation in the future */ - hCPE->element_mode = hCPE->last_element_mode; - break; - } - } - - /*-----------------------------------------------------------------* - * active frame: read element mode and audio bandwidth info - *-----------------------------------------------------------------*/ - - else - { - sts = hCPE->hCoreCoder; - if ( st_ivas->hMCT && hCPE->cpe_id != 0 ) - { - sts[0]->bwidth = st_ivas->hCPE[0]->hCoreCoder[0]->bwidth; - sts[1]->bwidth = st_ivas->hCPE[0]->hCoreCoder[0]->bwidth; - } - else - { - /* read stereo technology info */ - if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && st_ivas->hMCT == NULL ) - { - hCPE->element_mode = get_next_indice( sts[0], NBITS_ELEMENT_MODE ) + IVAS_CPE_DFT; - } - else - { - hCPE->element_mode = IVAS_CPE_MDCT; - } - - /* read the bandwidth */ - if ( hCPE->element_brate < MIN_BRATE_FB_STEREO ) - { - /* WB and SWB are supported */ - sts[0]->bwidth = get_next_indice( sts[0], 1 ) + WB; - sts[1]->bwidth = sts[0]->bwidth; - } - else - { - /* WB, SWB and FB are supported */ - sts[0]->bwidth = get_next_indice( sts[0], NBITS_BWIDTH ); - sts[1]->bwidth = sts[0]->bwidth; - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_mode_combined_format_dec() * * Set stereo format in a combined format *-------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void stereo_mode_combined_format_dec( - const Decoder_Struct *st_ivas, /* i : decoder main structure */ - CPE_DEC_HANDLE hCPE /* i/o: CPE handle */ -) -{ - int32_t element_brate_ref; - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - element_brate_ref = hCPE->element_brate; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && - ( ( st_ivas->nchan_ism == 3 && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_96k ) || - ( st_ivas->nchan_ism == 4 && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_128k ) ) ) - { - if ( !st_ivas->bfi ) - { - /* read OMASA stereo mode signalling */ - if ( get_next_indice( hCPE->hCoreCoder[0], NBITS_ELEMENT_MODE ) ) - { - hCPE->element_mode = IVAS_CPE_MDCT; - } - else - { - hCPE->element_mode = IVAS_CPE_DFT; - } - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - hCPE->element_brate = IVAS_64k; - hCPE->brate_surplus -= ( hCPE->element_brate - element_brate_ref ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_cpe_dec_fx.c b/lib_dec/ivas_cpe_dec_fx.c index d62b24f81..d8ebe8d4b 100644 --- a/lib_dec/ivas_cpe_dec_fx.c +++ b/lib_dec/ivas_cpe_dec_fx.c @@ -33,7 +33,6 @@ #include #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "cnst.h" #include "ivas_cnst.h" #include "rom_com.h" @@ -1526,4 +1525,3 @@ static void stereo_mode_combined_format_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 25f97c89e..70d0a21a7 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -47,18 +47,3 @@ * * Principal IVAS decoder routine *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - int16_t *data /* o : output synthesis signal */ -) -{ - // TODO: move here function ivas_jbm_dec_tc() and rename it to ivas_dec() - st_ivas->ivas_format = UNDEFINED_FORMAT; // temp. to avoid compilation warnings - move32(); - data[0] = 0; // temp. to avoid compilation warnings - move16(); - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_dec/ivas_decision_matrix_dec.c b/lib_dec/ivas_decision_matrix_dec.c index ec8de4900..6196d31fb 100644 --- a/lib_dec/ivas_decision_matrix_dec.c +++ b/lib_dec/ivas_decision_matrix_dec.c @@ -39,9 +39,7 @@ #include "ivas_cnst.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-----------------------------------------------------------------* * ivas_decision_matrix_dec() @@ -50,431 +48,9 @@ * Read ACELP signaling bits from the bitstream * Set extension layers *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 get_next_index_4_by_15[16] = { 0, 2184, 4369, 6553, 8738, 10922, 13107, 15291, 17476, 19660, 21845, 24029, 26214, 28398, 30583, 32767 }; -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_decision_matrix_dec( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *sharpFlag, /* o : formant sharpening flag */ - int16_t *core_switching_flag, /* o : ACELP->HQ switching frame flag */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t nchan_out /* i : Number of output channels */ -) -{ - int16_t tmp; - int32_t icbwe_brate; - - /* init */ - icbwe_brate = 0; - st->core = -1; - st->core_brate = 0; - st->extl = -1; - st->extl_brate = 0; - st->ppp_mode_dec = 0; - st->nelp_mode_dec = 0; - st->igf = 0; - st->vbr_hw_BWE_disable_dec = 0; - - /*-----------------------------------------------------------------* - * Read SID signaling bits from the bitstream - *-----------------------------------------------------------------*/ - - if ( ( st->idchan == 0 && ( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) ) || ( st->element_mode == IVAS_CPE_MDCT && st->total_brate <= SID_2k40 ) ) - { - st->core = ACELP_CORE; - st->core_brate = st->total_brate; - - if ( st->total_brate == SID_2k40 && !( st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT ) ) - { - if ( st->element_mode != IVAS_CPE_DFT ) - { - st->cng_type = get_next_indice( st, 1 ); - - if ( st->cng_type == FD_CNG ) - { - st->bwidth = get_next_indice( st, 2 ); - } - } - if ( get_next_indice( st, 1 ) ) - { - st->L_frame = L_FRAME16k; - } - else - { - st->L_frame = L_FRAME; - } - } - else if ( st->total_brate == SID_2k40 && st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT && st->cng_sba_flag == 0 ) - { - /* read channel coherence */ - st->hFdCngDec->hFdCngCom->coherence_flt = (float) get_next_indice( st, 4 ) / 15.f; - - /* read flag for no side noise shape */ - st->hFdCngDec->hFdCngCom->no_side_flag = get_next_indice( st, 1 ); - } - - if ( ( st->output_Fs >= 32000 && st->bwidth >= SWB ) || ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB && nchan_out == 2 && st->L_frame < L_FRAME16k ) ) - { - st->extl = SWB_CNG; - } - - if ( st->total_brate == FRAME_NO_DATA && st->prev_bfi && !st->bfi && st->L_frame > L_FRAME16k ) - { - st->L_frame = st->last_CNG_L_frame; - } - - return; - } - - /*---------------------------------------------------------------------* - * ACELP/HQ core selection - *---------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - /* minimal signaling for the secondary channel, most of the parameters are deduced from the primary channel */ - st->core = ACELP_CORE; - } - else if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - /* ISM Low-rate mode -> always WB, ACELP core, IC coder_type */ - st->core = ACELP_CORE; - } - else if ( st->element_mode == IVAS_CPE_MDCT ) - { - st->core = TCX_20_CORE; - } - else - { - st->core = ACELP_CORE; - - if ( st->element_mode == IVAS_CPE_TD || st->total_brate >= STEREO_TCX_MIN_RATE ) - { - /* ACELP/transform core selection bit */ - if ( get_next_indice( st, 1 ) ) - { - st->core = HQ_CORE; - } - else - { - st->core = ACELP_CORE; - } - } - } - - /*-----------------------------------------------------------------* - * Read ACELP signaling bits from the bitstream - *-----------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - /* ISM Low-rate mode */ - st->bwidth = WB; - st->coder_type = INACTIVE; - *sharpFlag = 0; - } - else if ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) - { - *sharpFlag = 0; - if ( st->coder_type == GENERIC || st->coder_type == VOICED ) - { - *sharpFlag = 1; - } - - st->core_brate = st->total_brate; - st->codec_mode = MODE1; - - if ( st->idchan == 1 && ( st->tdm_LRTD_flag == 0 || st->bits_frame_channel < IVAS_16k4 / FRAMES_PER_SEC ) ) - { - st->bwidth = WB; /* only WB in the secondary channel */ - } - } - else - { - if ( element_brate < FRMT_SHP_MIN_BRATE_IVAS ) - { - st->coder_type = get_next_indice( st, 3 ); - *sharpFlag = 0; - - if ( element_brate < IVAS_24k4 && ( st->coder_type == VOICED || st->coder_type == GENERIC || st->coder_type == TRANSITION ) ) - { - *sharpFlag = 1; - } - } - else - { - /* get coder_type info */ - st->coder_type = get_next_indice( st, 3 ); - - /* get sharpening flag */ - *sharpFlag = get_next_indice( st, 1 ); - } - } - } - - /*-----------------------------------------------------------------* - * Set extension layers - *-----------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - if ( st->bwidth == WB && st->low_rate_mode ) - { - st->extl = WB_BWE; - if ( st->total_brate >= MIN_BRATE_WB_BWE ) - { - st->extl_brate = WB_BWE_0k35; - } - } - else if ( st->bwidth == WB && ( st->total_brate < MIN_BRATE_WB_BWE || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) ) - { - if ( st->vbr_hw_BWE_disable_dec == 0 ) - { - st->extl = WB_BWE; - } - } - else if ( st->bwidth == WB && st->total_brate >= MIN_BRATE_WB_BWE && !st->flag_ACELP16k ) - { - /* read the WB TBE/BWE selection bit */ - if ( get_next_indice( st, 1 ) ) - { - st->extl = WB_BWE; - st->extl_brate = WB_BWE_0k35; - } - else - { - st->extl = WB_TBE; - if ( st->total_brate < MIN_BRATE_WB_TBE_1k05 || ( st->element_mode == IVAS_CPE_TD && st->total_brate < MIN_TDM_BRATE_WB_TBE_1k05 ) ) - { - st->extl_brate = WB_TBE_0k35; - } - else - { - st->extl_brate = WB_TBE_1k05; - } - } - } - else if ( st->bwidth == SWB || st->bwidth == FB ) - { - if ( st->total_brate >= MIN_BRATE_SWB_BWE || ( st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->tdm_LRTD_flag ) || ( element_brate < IVAS_16k4 && st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB ) ) - { - /* read the SWB TBE/BWE selection bit */ - tmp = get_next_indice( st, 1 ); - - if ( tmp ) - { - st->extl = SWB_BWE; - st->extl_brate = SWB_BWE_1k6; - } - else - { - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) - { - st->extl_brate = SWB_TBE_2k8; - } - else if ( st->tdm_LRTD_flag == 1 && st->element_mode == IVAS_CPE_TD ) - { - if ( st->element_brate < IVAS_24k4 ) - { - st->extl_brate = SWB_TBE_1k10; - } - else - { - st->extl_brate = SWB_TBE_1k75; - } - } - else if ( st->total_brate < MIN_BRATE_SWB_TBE_1k60 ) - { - st->extl_brate = SWB_TBE_0k95; - } - } - } - else - { - st->extl = WB_BWE; - st->extl_brate = 0; - } - - /* set FB TBE and FB BWE extension layers */ - if ( st->bwidth == FB ) - { - if ( st->extl == SWB_BWE ) - { - st->extl = FB_BWE; - st->extl_brate = FB_BWE_1k8; - } - else if ( st->extl == SWB_TBE ) - { - st->extl = FB_TBE; - st->extl_brate = FB_TBE_1k8; - if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) - { - st->extl_brate = FB_TBE_3k0; - } - } - } - - /* set IC-BWE bitrate */ - if ( st->element_mode == IVAS_CPE_TD && !( st->bwidth >= SWB && st->tdm_LRTD_flag ) ) - { - icbwe_brate = STEREO_BITS_ICBWE * FRAMES_PER_SEC; - if ( st->flag_ACELP16k == 0 ) - { - icbwe_brate = ( STEREO_BITS_ICBWE - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; - } - } - else if ( st->element_mode == IVAS_CPE_DFT ) - { - icbwe_brate = STEREO_BITS_ICBWE_DFT * FRAMES_PER_SEC; - if ( st->flag_ACELP16k == 0 ) - { - icbwe_brate = ( STEREO_BITS_ICBWE_DFT - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; - } - } - - if ( st->element_mode >= IVAS_CPE_DFT && st->core == ACELP_CORE && ( st->extl == SWB_TBE || st->extl == FB_TBE ) && !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) - { - icbwe_brate += STEREO_ICBWE_MSFLAG_BITS * FRAMES_PER_SEC; - } - } - } - - /* set core bitrate */ - st->core_brate = st->total_brate - st->extl_brate - icbwe_brate; - - /*-----------------------------------------------------------------* - * Read transform core (TCX vs. HQ) signaling bit from the bitstream - *-----------------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_MDCT && !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && st->core == HQ_CORE ) - { - if ( get_next_indice( st, 1 ) ) - { - st->core = TCX_20_CORE; - } - else - { - st->core = HQ_CORE; - } - } - - if ( st->element_mode != IVAS_CPE_MDCT && st->core == TCX_20_CORE ) - { - st->extl = IGF_BWE; - st->extl_brate = 0; - } - - /*-----------------------------------------------------------------* - * Read ACELP->HQ core switching flag - *-----------------------------------------------------------------*/ - - if ( st->core == HQ_CORE || st->core == TCX_20_CORE ) - { - if ( st->core == HQ_CORE ) - { - /* read ACELP->HQ core switching flag */ - *core_switching_flag = get_next_indice( st, 1 ); - } - else - { - *core_switching_flag = 0; - } - - if ( *core_switching_flag == 1 ) - { - st->last_core_from_bs = ACELP_CORE; - - if ( st->core == st->last_core ) - { - /* A mismatch between the core_switching_flag and the st->core/st->last_core - indicates a frame was lost. If prev_bfi is not set the frame loss - occured during CNG and the prev_bfi needs to be set. */ - st->prev_bfi = 1; - } - } - else - { - st->last_core_from_bs = HQ_CORE; /* Could also be TCX, but it does not make any difference */ - } - - st->last_L_frame_ori = st->last_L_frame; - } - - /*-----------------------------------------------------------------* - * Set ACELP frame length - *-----------------------------------------------------------------*/ - - if ( st->core_brate == FRAME_NO_DATA ) - { - /* prevent "L_frame" changes in CNG segments */ - st->L_frame = st->last_L_frame; - } - else if ( st->core_brate == SID_2k40 && st->bwidth == WB && st->first_CNG && st->hTdCngDec->act_cnt2 < MIN_ACT_CNG_UPD ) - { - /* prevent "L_frame" changes in SID frame after short segment of active frames */ - st->L_frame = st->last_CNG_L_frame; - } - else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && st->bwidth == WB ) || st->flag_ACELP16k ) - { - st->L_frame = L_FRAME16k; - } - else - { - st->L_frame = L_FRAME; - } - - if ( st->L_frame == L_FRAME16k ) - { - st->nb_subfr = NB_SUBFR16k; - } - else - { - st->nb_subfr = NB_SUBFR; - } - - /*-----------------------------------------------------------------* - * set inactive coder_type flag in ACELP core - *-----------------------------------------------------------------*/ - - st->inactive_coder_type_flag = 0; /* AVQ by default */ - if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE ) - { - st->inactive_coder_type_flag = 1; /* GSC */ - } - - /*-----------------------------------------------------------------* - * Reconfigure in case when output_Fs < input_Fs - *-----------------------------------------------------------------*/ - - st->extl_orig = st->extl; - st->extl_brate_orig = st->extl_brate; - - if ( st->output_Fs == 16000 && st->L_frame == L_FRAME16k && st->extl != IGF_BWE ) - { - st->extl = -1; - st->extl_brate = 0; - } - - if ( st->ini_frame == 0 ) - { - /* avoid switching of internal ACELP Fs in the very first frame */ - st->last_L_frame = st->L_frame; - st->last_core = st->core; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_decision_matrix_dec_fx( Decoder_State *st, /* i/o: decoder state structure */ Word16 *sharpFlag, /* o : formant sharpening flag */ @@ -1057,4 +633,3 @@ void ivas_decision_matrix_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 787379e9f..95cca12a0 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -43,16 +43,13 @@ #include "ivas_rom_dec.h" #include "ivas_rom_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_dirac_dec_config_internal_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const DIRAC_CONFIG_FLAG flag_config_inp /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ @@ -129,65 +126,7 @@ static ivas_error ivas_dirac_dec_config_internal_fx( return error; } -#else -static ivas_error ivas_dirac_dec_config_internal( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const DIRAC_CONFIG_FLAG flag_config_inp /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ -) -{ - DIRAC_DEC_HANDLE hDirAC; - ivas_error error; - DIRAC_CONFIG_FLAG flag_config; - - flag_config = ( flag_config_inp == DIRAC_RECONFIGURE_MODE ) ? DIRAC_RECONFIGURE : flag_config_inp; - error = IVAS_ERR_OK; - - hDirAC = NULL; - - if ( flag_config == DIRAC_RECONFIGURE ) - { - hDirAC = st_ivas->hDirAC; - } - else if ( flag_config == DIRAC_OPEN ) - { - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hDirAC = (DIRAC_DEC_HANDLE) malloc( sizeof( DIRAC_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); - } - - st_ivas->hDirAC = hDirAC; - } - - /*-----------------------------------------------------------------* - * DirAC main configuration - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_dirac_config( (void *) st_ivas, DEC ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( flag_config == DIRAC_OPEN ) - { - hDirAC->spar_to_dirac_write_idx = ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) ? DELAY_DIRAC_PARAM_DEC_SFR : 0; - hDirAC->dithering_seed = DIRAC_DITH_SEED; - st_ivas->hDirAC = hDirAC; - } - return error; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_dirac_rend_config_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const DIRAC_CONFIG_FLAG flag_config_inp, /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ @@ -1020,5152 +959,2623 @@ static ivas_error ivas_dirac_rend_config_fx( return error; } -#else -static ivas_error ivas_dirac_rend_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const DIRAC_CONFIG_FLAG flag_config_inp, /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ - const int16_t dec_param_estim_old ) +/*------------------------------------------------------------------------- + * ivas_dirac_dec_config() + * + * Open or reconfigure decoder DirAC/MASA handle + *-------------------------------------------------------------------------*/ +ivas_error ivas_dirac_dec_config_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const DIRAC_CONFIG_FLAG flag_config_inp /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ +) { - DIRAC_DEC_HANDLE hDirAC; - int16_t nchan_out_woLFE; - int16_t nchan_transport; - int16_t nchan_transport_old; - int16_t num_outputs_dir_old; - int16_t num_outputs_diff_old; - int16_t num_protos_diff_old; - float *proto_frame_f_old; - int16_t proto_signal_decorr_on_old; - uint16_t i, j, k; - float ls_azimuth[MAX_OUTPUT_CHANNELS]; - float ls_elevation[MAX_OUTPUT_CHANNELS]; - int32_t output_Fs, ivas_total_brate; ivas_error error; - int16_t nchan_transport_orig; - int16_t hodirac_flag; - DIRAC_CONFIG_FLAG flag_config; - DIRAC_REND_HANDLE hDirACRend; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; + Word32 output_Fs; + Word16 hodirac_flag; + Word16 sparfoa_flag; + DIRAC_CONFIG_FLAG dec_config_flag; + DIRAC_CONFIG_FLAG rend_config_flag; + DIRAC_CONFIG_FLAG common_rend_config_flag; + Word16 need_dirac_rend; + Word16 need_parambin; + Word16 dec_param_estim_old; + Word16 dec_param_estim_new; - flag_config = ( flag_config_inp == DIRAC_RECONFIGURE_MODE ) ? DIRAC_RECONFIGURE : flag_config_inp; error = IVAS_ERR_OK; + move32(); - hDirACRend = NULL; - output_Fs = st_ivas->hDecoderConfig->output_Fs; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ); - - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - if ( flag_config == DIRAC_RECONFIGURE ) - { - hDirACRend = st_ivas->hDirACRend; - } - else if ( flag_config == DIRAC_OPEN ) + /* Solve and setup flags for inits */ + IF( EQ_16( flag_config_inp, DIRAC_RECONFIGURE_MODE ) ) { - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hDirACRend = (DIRAC_REND_HANDLE) malloc( sizeof( DIRAC_REND_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC renderer\n" ) ); - } - - nchan_transport_old = 0; + dec_config_flag = DIRAC_RECONFIGURE; + move32(); } - - nchan_transport_old = 0; - num_outputs_dir_old = 0; - num_outputs_diff_old = 0; - num_protos_diff_old = 0; - - nchan_transport_orig = st_ivas->nchan_transport; - if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) + ELSE { - st_ivas->nchan_transport = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + dec_config_flag = flag_config_inp; + move32(); } - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && ivas_total_brate > IVAS_SID_5k2 ) + output_Fs = st_ivas->hDecoderConfig->output_Fs; + move32(); + hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); + IF( EQ_32( dec_config_flag, DIRAC_RECONFIGURE ) ) { - nchan_transport = 1; + dec_param_estim_old = st_ivas->hDirAC->hConfig->dec_param_estim; + move16(); } - if ( flag_config == DIRAC_RECONFIGURE && ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) ) + ELSE { - int16_t tmp1, tmp2, tmp3; - ivas_sba_config( ivas_total_brate, st_ivas->sba_analysis_order, -1, &nchan_transport_old, st_ivas->sba_planar, &tmp1, &tmp2, &tmp3 ); + dec_param_estim_old = FALSE; + move16(); } - /*-----------------------------------------------------------------* - * output setup: for parametric binaural renderer, use output setup, otherwise internal setup - *-----------------------------------------------------------------*/ - - hDirACRend->hOutSetup = st_ivas->hIntSetup; - nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; - - if ( hDirACRend->hOutSetup.ls_azimuth != NULL && hDirACRend->hOutSetup.ls_elevation != NULL ) + sparfoa_flag = 0; + move16(); + test(); + test(); + if ( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && EQ_16( st_ivas->ivas_format, SBA_FORMAT ) && !hodirac_flag ) { - mvr2r( hDirACRend->hOutSetup.ls_azimuth, ls_azimuth, nchan_out_woLFE ); - mvr2r( hDirACRend->hOutSetup.ls_elevation, ls_elevation, nchan_out_woLFE ); + sparfoa_flag = 1; + move16(); } - if ( hDirACRend->hOutSetup.ambisonics_order == -1 ) - { - hDirACRend->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; /* Order 3 is used by default in DirAC for SHD processing */ - if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - hDirACRend->hOutSetup.ambisonics_order = SBA_FOA_ORDER; - } - } - else if ( hDirACRend->hOutSetup.ambisonics_order >= SBA_FOA_ORDER ) + IF( NE_32( ( error = ivas_dirac_dec_config_internal_fx( st_ivas, dec_config_flag ) ), IVAS_ERR_OK ) ) { - mvr2r( ls_azimuth_4d4, ls_azimuth, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); - mvr2r( ls_elevation_4d4, ls_elevation, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); + return error; } - if ( hDirACRend->hOutSetup.separateChannelEnabled && ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1 || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1 || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1_2 || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1_4 || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 || ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + /* This is required for parambin */ + test(); + test(); + if ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - /* Remove the channel of the separated signal from the output setup of the spatial synthesis */ - hDirACRend->hOutSetup.nchan_out_woLFE--; - nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; - mvr2r( &ls_azimuth[hDirACRend->hOutSetup.separateChannelIndex + 1], &ls_azimuth[hDirACRend->hOutSetup.separateChannelIndex], nchan_out_woLFE - hDirACRend->hOutSetup.separateChannelIndex ); - mvr2r( &ls_elevation[hDirACRend->hOutSetup.separateChannelIndex + 1], &ls_elevation[hDirACRend->hOutSetup.separateChannelIndex], nchan_out_woLFE - hDirACRend->hOutSetup.separateChannelIndex ); + st_ivas->hDirAC->hConfig->dec_param_estim = FALSE; + move16(); } - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - st_ivas->nchan_transport = nchan_transport_orig; + dec_param_estim_new = st_ivas->hDirAC->hConfig->dec_param_estim; + move16(); - if ( nchan_transport_orig > 2 && hDirACRend->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC && !hodirac_flag ) - { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; - hDirACRend->panningConf = DIRAC_PANNING_VBAP; - } - else if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO ) + /* Setup renderers and meta */ + /* First, free everything if in reconfig and not the active renderer */ + need_parambin = 0; + move16(); + SWITCH( st_ivas->renderer_type ) { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_MONO; - hDirACRend->panningConf = DIRAC_PANNING_HOA3; - nchan_out_woLFE = 1; + case RENDERER_BINAURAL_PARAMETRIC: + case RENDERER_BINAURAL_PARAMETRIC_ROOM: + case RENDERER_STEREO_PARAMETRIC: + need_parambin = 1; + move16(); + BREAK; + default: + need_parambin = 0; + move16(); } - else if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirACRend->hOutSetup.is_loudspeaker_setup ) + + IF( !need_parambin ) { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; - hDirACRend->panningConf = DIRAC_PANNING_VBAP; + ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); } - else if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && !hDirACRend->hOutSetup.is_loudspeaker_setup && st_ivas->nchan_transport > 1 ) + + need_dirac_rend = 0; + move16(); + SWITCH( st_ivas->renderer_type ) { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_SHD; - hDirACRend->panningConf = DIRAC_PANNING_HOA3; + case RENDERER_DIRAC: + case RENDERER_BINAURAL_FASTCONV: + case RENDERER_BINAURAL_FASTCONV_ROOM: + case RENDERER_SBA_LINEAR_ENC: + case RENDERER_SBA_LINEAR_DEC: + case RENDERER_OSBA_AMBI: + case RENDERER_OSBA_LS: + need_dirac_rend = 1; + move16(); + BREAK; + default: + need_dirac_rend = 0; + move16(); } - else + + IF( !need_dirac_rend ) { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_GAIN_SHD; - hDirACRend->panningConf = DIRAC_PANNING_HOA3; + ivas_dirac_rend_close_fx( &st_ivas->hDirACRend ); } - if ( flag_config == DIRAC_OPEN ) + IF( !sparfoa_flag ) { - if ( ( hDirACRend->frequency_axis = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) + IF( st_ivas->hSpatParamRendCom == NULL ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + common_rend_config_flag = DIRAC_OPEN; + move32(); } - set_f( hDirACRend->frequency_axis, 0.0f, hSpatParamRendCom->num_freq_bands ); - ivas_dirac_dec_get_frequency_axis( hDirACRend->frequency_axis, output_Fs, hSpatParamRendCom->num_freq_bands ); - } - - if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->mc_mode == MC_MODE_MCMASA ) && hDirACRend->panningConf == DIRAC_PANNING_HOA3 && nchan_transport == 2 ) - { - if ( ( flag_config == DIRAC_RECONFIGURE && hDirACRend->masa_stereo_type_detect == NULL ) || flag_config == DIRAC_OPEN ) + ELSE { - if ( ( hDirACRend->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } + common_rend_config_flag = flag_config_inp; + move32(); } - ivas_masa_init_stereotype_detection( hDirACRend->masa_stereo_type_detect ); - } - else - { - if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->masa_stereo_type_detect != NULL ) + IF( NE_32( ( error = ivas_spat_hSpatParamRendCom_config_fx( &st_ivas->hSpatParamRendCom, common_rend_config_flag, dec_param_estim_new, + st_ivas->ivas_format, st_ivas->mc_mode, output_Fs, hodirac_flag, 0 ) ), + IVAS_ERR_OK ) ) { - free( hDirACRend->masa_stereo_type_detect ); + return error; + } + IF( need_dirac_rend ) + { + IF( st_ivas->hDirACRend == NULL ) + { + rend_config_flag = DIRAC_OPEN; + move32(); + } + ELSE + { + rend_config_flag = flag_config_inp; + move32(); + } + IF( NE_32( ( error = ivas_dirac_rend_config_fx( st_ivas, rend_config_flag, dec_param_estim_old ) ), IVAS_ERR_OK ) ) + { + return error; + } } - hDirACRend->masa_stereo_type_detect = NULL; - } - hSpatParamRendCom->numIsmDirections = 0; /* By default, no ism directions, set correct number runtime when needed */ + IF( need_parambin ) + { + IF( NE_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) + { + IF( NE_32( ( error = ivas_dirac_dec_binaural_copy_hrtfs_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) + { + return error; + } + } - /*-----------------------------------------------------------------* - * (re)configure sub-modules - *-----------------------------------------------------------------*/ + IF( st_ivas->hDiracDecBin == NULL ) + { + IF( NE_32( ( error = ivas_dirac_dec_init_binaural_data_fx( st_ivas, st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) + { + return error; + } + } + ELSE + { + /* This is required to keep BE in rate switching. This probably means that 1TC and 2TC MASA perform differently. */ + test(); + test(); + IF( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params != NULL && !( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) && st_ivas->nSCE > 0 ) ) + { + ivas_dirac_dec_decorr_close_fx( &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params, &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ); // done + } - /* prototype signal computation */ - if ( flag_config == DIRAC_RECONFIGURE ) - { - num_outputs_dir_old = hDirACRend->num_outputs_dir; - num_outputs_diff_old = hDirACRend->num_outputs_diff; - num_protos_diff_old = hDirACRend->num_protos_diff; - } + IF( NE_32( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ), IVAS_ERR_OK ) ) + { + return error; + } - /* allocate output setup related arrays */ - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) - { - /* Directional and diffuses components in output LS format */ - hDirACRend->num_outputs_diff = nchan_out_woLFE; - hDirACRend->num_outputs_dir = nchan_out_woLFE; - } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - /* Directional and diffuses components in SHD */ - /* Diffuseness components up to 1st order */ - hDirACRend->num_outputs_diff = ( min( hDirACRend->hOutSetup.ambisonics_order, 1 ) + 1 ) * ( min( hDirACRend->hOutSetup.ambisonics_order, 1 ) + 1 ); - hDirACRend->num_outputs_dir = ivas_sba_get_nchan( hDirACRend->hOutSetup.ambisonics_order, 0 ); - } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) - { - hDirACRend->num_outputs_diff = DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS; - hDirACRend->num_outputs_dir = nchan_out_woLFE; - } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - hDirACRend->num_outputs_diff = 1; /* There is one output channel in mono */ - hDirACRend->num_outputs_dir = 2; /* Two channels are pre-rendered for stereo type detection */ - } - else - { - assert( 0 && "DirAC: not existing synthesis methods!" ); - } + IF( !st_ivas->hDiracDecBin->useTdDecorr ) - if ( flag_config == DIRAC_OPEN ) - { - num_outputs_dir_old = hDirACRend->num_outputs_dir; - if ( ( hDirACRend->proto_index_dir = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - num_outputs_diff_old = hDirACRend->num_outputs_diff; - if ( ( hDirACRend->proto_index_diff = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } + { + IF( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params == NULL ) + { + Word16 frequency_axis_fx[CLDFB_NO_CHANNELS_MAX]; + ivas_dirac_dec_get_frequency_axis_fx( frequency_axis_fx, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSpatParamRendCom->num_freq_bands ); - if ( hDirACRend->num_outputs_dir != num_outputs_dir_old && flag_config == DIRAC_RECONFIGURE ) - { - free( hDirACRend->proto_index_dir ); - if ( ( hDirACRend->proto_index_dir = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params ), &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ), st_ivas->hSpatParamRendCom->num_freq_bands, BINAURAL_CHANNELS, BINAURAL_CHANNELS, + DIRAC_SYNTHESIS_PSD_LS, frequency_axis_fx, BINAURAL_CHANNELS, st_ivas->hDecoderConfig->output_Fs ) ), + IVAS_ERR_OK ) ) + { + return error; + } + } + } + st_ivas->hDiracDecBin->reqularizationFactor_fx = configure_reqularization_factor_fx( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); + move16(); + } } } - set_s( hDirACRend->proto_index_dir, 0, hDirACRend->num_outputs_dir ); - if ( hDirACRend->num_outputs_diff != num_outputs_diff_old && flag_config == DIRAC_RECONFIGURE ) - { - free( hDirACRend->proto_index_diff ); - if ( ( hDirACRend->proto_index_diff = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - set_s( hDirACRend->proto_index_diff, 0, hDirACRend->num_outputs_diff ); - hDirACRend->sba_map_tc = sba_map_tc; + return error; +} + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_close() + * + * Close DirAC memories + *------------------------------------------------------------------------*/ +void ivas_dirac_dec_close_fx( + DIRAC_DEC_HANDLE *hDirAC_out ) +{ + DIRAC_DEC_HANDLE hDirAC; - if ( ( st_ivas->ivas_format == SBA_FORMAT ) || ( st_ivas->ivas_format == SBA_ISM_FORMAT ) ) + test(); + IF( hDirAC_out == NULL || *hDirAC_out == NULL ) { - if ( st_ivas->sba_order > SBA_FOA_ORDER && ivas_total_brate >= IVAS_512k ) - { - hDirACRend->sba_map_tc = sba_map_tc_512; - } + return; } - if ( nchan_transport == 1 ) + hDirAC = *hDirAC_out; + + /* Config & CLDFB */ + IF( hDirAC->hConfig != NULL ) { - hDirACRend->num_protos_ambi = 1; - hDirACRend->num_protos_dir = 1; - hDirACRend->num_protos_diff = 1; + free( hDirAC->hConfig ); + hDirAC->hConfig = NULL; } - else if ( nchan_transport == 2 ) + + free( *hDirAC_out ); + *hDirAC_out = NULL; + + return; +} +/*------------------------------------------------------------------------- + * ivas_dirac_dec_read_BS_fx() + * + * Read DirAC parameters from the bitstream + *------------------------------------------------------------------------*/ +void ivas_dirac_dec_read_BS_fx( + const Word32 ivas_total_brate, /* i : IVAS total bitrate */ + Decoder_State *st, /* i/o: decoder state structure */ + DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial rendering data handle */ + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata */ + Word16 *nb_bits, /* o : number of bits read */ + const Word16 last_bit_pos, /* i : last read bitstream position */ + const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ + Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +) +{ + Word16 i, j, b, dir, orig_dirac_bands; + Word16 next_bit_pos_orig; + Word32 quo, rem; + + test(); + test(); + IF( !st->bfi && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - hDirACRend->num_protos_ambi = 2; - hDirACRend->num_protos_diff = 1; - hDirACRend->num_protos_dir = 2; - hDirACRend->proto_index_dir[1] = 1; - } - else if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO ) + next_bit_pos_orig = st->next_bit_pos; + move16(); + iDiv_and_mod_32( ivas_total_brate, FRAMES_PER_SEC, &quo, &rem, 0 ); + st->next_bit_pos = extract_l( L_sub( quo, 1 ) ); + move16(); + if ( last_bit_pos > 0 ) { - /* Following the foa rendering for code compatibility */ - hDirACRend->num_protos_ambi = 2; - hDirACRend->num_protos_dir = 2; - hDirACRend->num_protos_diff = 3; - hDirACRend->proto_index_dir[0] = 0; - hDirACRend->proto_index_diff[0] = 0; + st->next_bit_pos = last_bit_pos; + move16(); } - else + /* 1 bit flag for signaling metadata to read */ + b = st->bit_stream[( st->next_bit_pos )--]; + move16(); + ( *nb_bits )++; + + IF( EQ_16( b, 1 ) ) /* WB 4TCs condition, no other metadata to read*/ { - hDirACRend->num_protos_ambi = 2; - hDirACRend->num_protos_diff = 3; + orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + move16(); + + hQMetaData->sba_inactive_mode = 1; + move16(); - for ( k = 0; k < hDirACRend->num_outputs_diff; k++ ) + /* if we start with a SID frame, we need to init the azi/ele arrays.*/ + IF( st->ini_frame == 0 ) { - if ( ls_azimuth[k] > 0.0f ) - { - hDirACRend->proto_index_diff[k] = 1; - } - else if ( ls_azimuth[k] < 0.0f ) - { - hDirACRend->proto_index_diff[k] = 2; - } - else + FOR( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { - hDirACRend->proto_index_diff[k] = 0; + set32_fx( hQMetaData->q_direction[0].band_data[b].azimuth_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + set32_fx( hQMetaData->q_direction[0].band_data[b].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); } } + *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ) ); + move16(); - if ( hDirACRend->hOutSetup.is_loudspeaker_setup ) + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - hDirACRend->num_protos_dir = 3; - mvs2s( hDirACRend->proto_index_diff, hDirACRend->proto_index_dir, nchan_out_woLFE ); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[1].azimuth_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation_fx[i] = hQMetaData->q_direction[0].band_data[1].elevation_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; + move16(); } - else + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - hDirACRend->num_protos_dir = 2; - hDirACRend->proto_index_dir[1] = 1; + FOR( j = ( orig_dirac_bands - 2 ); j >= 0; j-- ) + { + hQMetaData->q_direction[0].band_data[j].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[0].azimuth_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].elevation_fx[i] = hQMetaData->q_direction[0].band_data[0].elevation_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; + move16(); + } } + + hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; + move16(); } - } - else /* nchan_transport > 2 */ - { - hDirACRend->num_protos_ambi = 4; - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) + ELSE { - hDirACRend->num_protos_diff = hDirACRend->num_outputs_diff; - for ( k = 0; k < hDirACRend->num_outputs_diff; k++ ) + hQMetaData->sba_inactive_mode = 0; + move16(); + hQMetaData->is_masa_ivas_format = 0; + move16(); + IF( hQMetaData->useLowerRes ) { - hDirACRend->proto_index_diff[k] = k; + hQMetaData->q_direction[0].cfg.nblocks = 1; + move16(); } - - hDirACRend->num_protos_dir = hDirACRend->num_outputs_dir; - for ( k = 0; k < hDirACRend->num_outputs_dir; k++ ) + ELSE { - hDirACRend->proto_index_dir[k] = k; + hQMetaData->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + move16(); } + *nb_bits = add( *nb_bits, ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), hodirac_flag ) ); + move16(); } - else - { - hDirACRend->num_protos_diff = 1; - hDirACRend->num_protos_dir = nchan_transport; - for ( k = 0; k < min( hDirACRend->num_outputs_dir, hDirACRend->num_protos_dir ); k++ ) - { - if ( hDirACRend->sba_map_tc[k] < hDirACRend->num_outputs_dir ) - { - hDirACRend->proto_index_dir[hDirACRend->sba_map_tc[k]] = k; - } - } - } + st->next_bit_pos = next_bit_pos_orig; + move16(); } - - /* direct/diffuse responses */ - if ( flag_config == DIRAC_OPEN ) + ELSE IF( !st->bfi && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - if ( ( hDirACRend->diffuse_response_function = (float *) malloc( sizeof( float ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - /* reallocate static memory */ - else if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->num_outputs_dir != num_outputs_dir_old ) - { - free( hDirACRend->diffuse_response_function ); - hDirACRend->diffuse_response_function = NULL; - if ( ( hDirACRend->diffuse_response_function = (float *) malloc( sizeof( float ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - - if ( ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) || ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) || ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) ) - { - initDiffuseResponses( hDirACRend->diffuse_response_function, nchan_out_woLFE, hDirACRend->hOutSetup.output_config, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, st_ivas->ivas_format, &hDirACRend->num_ele_spk_no_diffuse_rendering, st_ivas->transport_config ); - } - else - { - initDiffuseResponses( hDirACRend->diffuse_response_function, hDirACRend->num_outputs_dir, IVAS_AUDIO_CONFIG_FOA, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, st_ivas->ivas_format, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) - { - if ( flag_config == DIRAC_OPEN ) - { - if ( ( hDirACRend->hoa_encoder = (float *) malloc( nchan_out_woLFE * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - else if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->hoa_encoder && ( hDirACRend->num_outputs_diff != num_outputs_diff_old ) ) - { - free( hDirACRend->hoa_encoder ); - hDirACRend->hoa_encoder = NULL; - if ( ( hDirACRend->hoa_encoder = (float *) malloc( nchan_out_woLFE * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - set_f( hDirACRend->hoa_encoder, 0.0f, nchan_out_woLFE * hDirACRend->num_outputs_diff ); - compute_hoa_encoder_mtx( ls_azimuth, ls_elevation, hDirACRend->hoa_encoder, hDirACRend->num_outputs_diff, hDirACRend->hOutSetup.ambisonics_order ); - } - else - { - if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->hoa_encoder ) - { - free( hDirACRend->hoa_encoder ); - } - hDirACRend->hoa_encoder = NULL; - } - - /* VBAP */ - if ( flag_config == DIRAC_OPEN ) - { - st_ivas->hVBAPdata = NULL; - } + next_bit_pos_orig = st->next_bit_pos; + move16(); - if ( hDirACRend->panningConf == DIRAC_PANNING_VBAP ) - { - if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata != NULL ) - { - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - if ( ( error = vbap_init_data( &( st_ivas->hVBAPdata ), ls_azimuth, ls_elevation, nchan_out_woLFE, st_ivas->ivas_format ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata != NULL ) - { - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - hDirACRend->hoa_decoder = NULL; - } - else if ( flag_config == DIRAC_RECONFIGURE && st_ivas->hVBAPdata != NULL ) - { - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } + /* subtract mode signaling bits, since bitstream was moved after mode reading */ + iDiv_and_mod_32( ivas_total_brate, FRAMES_PER_SEC, &quo, &rem, 0 ); + st->next_bit_pos = extract_l( L_sub( L_sub( quo, 1 ), SID_FORMAT_NBITS ) ); + move16(); + /* 1 bit flag for signaling metadata to read */ + b = st->bit_stream[( st->next_bit_pos )--]; + move16(); + ( *nb_bits )++; + hQMetaData->sba_inactive_mode = 1; + move16(); + orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + move16(); - /* HOA panning/dec */ - if ( flag_config == DIRAC_OPEN ) - { - hDirACRend->hoa_decoder = NULL; - if ( ( hDirACRend->panningConf == DIRAC_PANNING_HOA3 ) || st_ivas->ivas_format == SBA_FORMAT || ( nchan_transport > 2 ) ) + /* if we start with a SID frame, we need to init the azi/ele arrays.*/ + IF( st->ini_frame == 0 ) { - if ( hDirACRend->hOutSetup.is_loudspeaker_setup ) + FOR( dir = 0; dir < hQMetaData->no_directions; dir++ ) { - if ( st_ivas->hoa_dec_mtx != NULL ) - { - free( st_ivas->hoa_dec_mtx ); - st_ivas->hoa_dec_mtx = NULL; - } - if ( ( error = ivas_sba_get_hoa_dec_matrix( hDirACRend->hOutSetup, &st_ivas->hoa_dec_mtx, hDirACRend->hOutSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + FOR( b = 0; b < hQMetaData->q_direction[dir].cfg.nbands; b++ ) { - return error; + set32_fx( hQMetaData->q_direction[dir].band_data[b].azimuth_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + set32_fx( hQMetaData->q_direction[dir].band_data[b].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); } - - hDirACRend->hoa_decoder = st_ivas->hoa_dec_mtx; } } - } - - /* decorrelation */ - proto_signal_decorr_on_old = ( flag_config == DIRAC_RECONFIGURE ) ? hDirACRend->proto_signal_decorr_on : 0; - hDirACRend->proto_signal_decorr_on = 1; - if ( ( nchan_transport > 2 ) && ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) ) - { - /*switch off decorrelation for 4 transport channels*/ - hDirACRend->proto_signal_decorr_on = 0; - } - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - hDirACRend->proto_signal_decorr_on = 0; - } - - if ( ( flag_config == DIRAC_OPEN && hDirACRend->proto_signal_decorr_on ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirACRend->proto_signal_decorr_on && !proto_signal_decorr_on_old ) ) ) - { - if ( ( error = ivas_dirac_dec_decorr_open( &( hDirACRend->h_freq_domain_decorr_ap_params ), &( hDirACRend->h_freq_domain_decorr_ap_state ), hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, hDirACRend->synthesisConf, hDirACRend->frequency_axis, nchan_transport > 2 ? 4 : nchan_transport, output_Fs ) ) != IVAS_ERR_OK ) + *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ) ); + move16(); + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - return error; + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[1].azimuth_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation_fx[i] = hQMetaData->q_direction[0].band_data[1].elevation_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; + move16(); } - } - else if ( flag_config == DIRAC_RECONFIGURE && ( !hDirACRend->proto_signal_decorr_on && proto_signal_decorr_on_old ) ) - { - ivas_dirac_dec_decorr_close( &hDirACRend->h_freq_domain_decorr_ap_params, &hDirACRend->h_freq_domain_decorr_ap_state ); - } - else if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->proto_signal_decorr_on && proto_signal_decorr_on_old ) - { - if ( nchan_transport != nchan_transport_old || hDirACRend->num_outputs_diff != num_outputs_diff_old || flag_config_inp == DIRAC_RECONFIGURE_MODE ) + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - /* close and reopen the decorrelator */ - ivas_dirac_dec_decorr_close( &hDirACRend->h_freq_domain_decorr_ap_params, &hDirACRend->h_freq_domain_decorr_ap_state ); - - if ( ( error = ivas_dirac_dec_decorr_open( &( hDirACRend->h_freq_domain_decorr_ap_params ), &( hDirACRend->h_freq_domain_decorr_ap_state ), hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, hDirACRend->synthesisConf, hDirACRend->frequency_axis, nchan_transport > 2 ? 4 : nchan_transport, output_Fs ) ) != IVAS_ERR_OK ) + FOR( j = ( orig_dirac_bands - 2 ); j >= 0; j-- ) { - return error; + hQMetaData->q_direction[0].band_data[j].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[0].azimuth_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].elevation_fx[i] = hQMetaData->q_direction[0].band_data[0].elevation_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; + move16(); } } - } - - /* output synthesis */ - if ( flag_config == DIRAC_OPEN ) - { - if ( ( ivas_dirac_dec_output_synthesis_open( hSpatParamRendCom, hDirACRend, st_ivas->renderer_type, nchan_transport, output_Fs, hodirac_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = hDirACRend->proto_signal_decorr_on; - } - else if ( ( flag_config == DIRAC_RECONFIGURE ) && ( ( nchan_transport != nchan_transport_old ) || ( hDirACRend->num_outputs_diff != num_outputs_diff_old ) ) ) - { - ivas_dirac_dec_output_synthesis_close( hDirACRend ); - if ( ( ivas_dirac_dec_output_synthesis_open( hSpatParamRendCom, hDirACRend, st_ivas->renderer_type, nchan_transport, output_Fs, hodirac_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = hDirACRend->proto_signal_decorr_on; - } + hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; + move16(); - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = 0; + st->next_bit_pos = next_bit_pos_orig; + move16(); } - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->proto_frame_f ) - { - free( hDirACRend->proto_frame_f ); - } - hDirACRend->proto_frame_f = NULL; - } - else + test(); + IF( hDirAC != NULL && hSpatParamRendCom != NULL ) { - if ( flag_config == DIRAC_OPEN || ( flag_config == DIRAC_RECONFIGURE && hDirACRend->proto_frame_f == NULL ) ) - { - if ( ( hDirACRend->proto_frame_f = (float *) malloc( sizeof( float ) * 2 * hDirACRend->num_protos_diff * hSpatParamRendCom->num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - else if ( flag_config == DIRAC_RECONFIGURE && ( hDirACRend->num_protos_diff != num_protos_diff_old ) ) - { - proto_frame_f_old = hDirACRend->proto_frame_f; - free( proto_frame_f_old ); - if ( ( hDirACRend->proto_frame_f = (float *) malloc( sizeof( float ) * 2 * hDirACRend->num_protos_diff * hSpatParamRendCom->num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } + ivas_qmetadata_to_dirac_fx( hQMetaData, hDirAC, NULL, hSpatParamRendCom, ivas_total_brate, SBA_FORMAT, hodirac_flag, dirac_to_spar_md_bands ); } - if ( flag_config == DIRAC_OPEN ) - { - hDirACRend->buffer_energy = NULL; - } + return; +} +/*-----------------------------------------------------------------------* + * ivas_qmetadata_to_dirac() + * + * Copy qmetedata to DirAC parameters for rendering + *-----------------------------------------------------------------------*/ +void ivas_qmetadata_to_dirac_fx( + const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ + DIRAC_DEC_HANDLE hDirAC, /* i : DirAC decoder structure */ + MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ + const Word32 ivas_total_brate, /* i : IVAS total bitrate */ + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ + Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands Q0*/ +) +{ + Word16 block, band; + Word16 *seed_ptr; + Word16 band_start, band_end, diff_idx; + Word16 b, ele, azi; + Word32 azimuth_fx, elevation_fx; + Word32 diffuseness_fx; + IVAS_QDIRECTION *q_direction; + Word16 *band_mapping; + Word16 *band_grouping; + Word16 start_band; + Word16 nbands = 0; + move16(); + Word16 nblocks = 0; + move16(); + Word16 qBand_idx; + Word16 idx_sec = 0; + move16(); + Word16 no_secs = 1; + move16(); + q_direction = &( hQMetaData->q_direction[0] ); - if ( ( flag_config == DIRAC_OPEN && hDirAC->hConfig->dec_param_estim == TRUE ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->hConfig->dec_param_estim == TRUE && dec_param_estim_old == FALSE ) ) ) + hSpatParamRendCom->numParametricDirections = hQMetaData->no_directions; + move16(); + hSpatParamRendCom->numSimultaneousDirections = add( hSpatParamRendCom->numParametricDirections, hSpatParamRendCom->numIsmDirections ); + move16(); + test(); + IF( hMasa != NULL && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - hDirACRend->index_buffer_intensity = 0; + Word16 meta_write_index; + band_mapping = hMasa->data.band_mapping; + move16(); - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) + meta_write_index = add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) % hSpatParamRendCom->dirac_md_buffer_length; + + FOR( band = 0; band < hMasa->config.numCodingBands; ++band ) { - if ( ( hDirACRend->buffer_intensity_real[i][j] = (float *) malloc( CLDFB_NO_CHANNELS_MAX * sizeof( float ) ) ) == NULL ) + FOR( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); + hSpatParamRendCom->azimuth[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].azimuth_fx[block], 6 ) ); + move16(); + hSpatParamRendCom->elevation[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].elevation_fx[block], 6 ) ); + move16(); + hSpatParamRendCom->energy_ratio1_fx[meta_write_index][b] = q_direction->band_data[band].energy_ratio_fx[block]; + move32(); + hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = L_sub( ONE_IN_Q30, q_direction->band_data[band].energy_ratio_fx[block] ); + move32(); + + IF( q_direction->coherence_band_data != NULL ) + { + hSpatParamRendCom->spreadCoherence_fx[meta_write_index][b] = ivas_divde_255[q_direction->coherence_band_data[band].spread_coherence[block]]; + move16(); + } + ELSE + { + hSpatParamRendCom->spreadCoherence_fx[meta_write_index][b] = 0; + move16(); + } + + IF( hQMetaData->surcoh_band_data != NULL ) + { + hSpatParamRendCom->surroundingCoherence_fx[meta_write_index][b] = ivas_divde_255[hQMetaData->surcoh_band_data[band].surround_coherence[block]]; /*q15*/ + move16(); + } + ELSE + { + hSpatParamRendCom->surroundingCoherence_fx[meta_write_index][b] = 0; + move16(); + } } - set_f( hDirACRend->buffer_intensity_real[i][j], 0.0f, CLDFB_NO_CHANNELS_MAX ); } } - if ( hDirACRend->buffer_energy == NULL ) + + test(); + test(); + test(); + IF( EQ_32( hQMetaData->no_directions, 2 ) ) { - if ( ( hDirACRend->buffer_energy = (float *) malloc( DIRAC_NO_COL_AVG_DIFF * CLDFB_NO_CHANNELS_MAX * sizeof( float ) ) ) == NULL ) + q_direction = &( hQMetaData->q_direction[1] ); + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - set_f( hDirACRend->buffer_energy, 0.0f, DIRAC_NO_COL_AVG_DIFF * CLDFB_NO_CHANNELS_MAX ); - } - else if ( ( flag_config == DIRAC_OPEN && hDirAC->hConfig->dec_param_estim == FALSE ) || ( flag_config == DIRAC_RECONFIGURE && ( hDirAC->hConfig->dec_param_estim == FALSE && dec_param_estim_old == TRUE ) ) ) - { - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( flag_config == DIRAC_RECONFIGURE && hDirACRend->buffer_intensity_real[i][j] ) + meta_write_index = ( add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) ) % hSpatParamRendCom->dirac_md_buffer_length; + + FOR( band = 0; band < hMasa->config.numCodingBands; ++band ) { - free( hDirACRend->buffer_intensity_real[i][j] ); + FOR( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) + { + hSpatParamRendCom->azimuth2[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].azimuth_fx[block], 6 ) ); + move16(); + hSpatParamRendCom->elevation2[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].elevation_fx[block], 6 ) ); + move16(); + hSpatParamRendCom->energy_ratio2_fx[meta_write_index][b] = q_direction->band_data[band].energy_ratio_fx[block]; + move32(); + hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = L_sub( hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b], q_direction->band_data[band].energy_ratio_fx[block] ); + move32(); + + /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */ + if ( hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] < 0 ) + { + hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = 0; + move32(); + } + + IF( q_direction->coherence_band_data != NULL ) + { + hSpatParamRendCom->spreadCoherence2_fx[meta_write_index][b] = ivas_divde_255[q_direction->coherence_band_data[band].spread_coherence[block]]; + move16(); + } + ELSE + { + hSpatParamRendCom->spreadCoherence2_fx[meta_write_index][b] = 0; + move16(); + } + } } - hDirACRend->buffer_intensity_real[i][j] = NULL; } } - if ( hDirACRend->buffer_energy != NULL ) + ELSE IF( hSpatParamRendCom->azimuth2 != NULL && hSpatParamRendCom->elevation2 != NULL && hSpatParamRendCom->energy_ratio2_fx != NULL && hSpatParamRendCom->spreadCoherence2_fx != NULL ) { - free( hDirACRend->buffer_energy ); - hDirACRend->buffer_energy = NULL; - } - } - - /* output synthesis */ - ivas_dirac_dec_output_synthesis_init( hSpatParamRendCom, hDirACRend, nchan_out_woLFE, hodirac_flag ); + /* zero out old dir2 data */ + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) + { + meta_write_index = add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) % hSpatParamRendCom->dirac_md_buffer_length; + set16_fx( hSpatParamRendCom->azimuth2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); + set16_fx( hSpatParamRendCom->elevation2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - /* Allocate stack memory */ - if ( flag_config != DIRAC_OPEN ) - { - ivas_dirac_free_mem( &( hDirACRend->stack_mem ) ); - } - if ( ( error = ivas_dirac_alloc_mem( hDirACRend, st_ivas->renderer_type, hSpatParamRendCom->num_freq_bands, &( hDirACRend->stack_mem ), hodirac_flag ) ) != IVAS_ERR_OK ) - { - return error; + set32_fx( hSpatParamRendCom->energy_ratio2_fx[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); + set16_fx( hSpatParamRendCom->spreadCoherence2_fx[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); + } + } } - - if ( flag_config == DIRAC_OPEN ) + ELSE /* SBA mode/SID/Zero frame*/ { - st_ivas->hDirACRend = hDirACRend; - } - - return error; -} -#endif -/*------------------------------------------------------------------------- - * ivas_dirac_dec_config() - * - * Open or reconfigure decoder DirAC/MASA handle - *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_config_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const DIRAC_CONFIG_FLAG flag_config_inp /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ -) -{ - ivas_error error; - Word32 output_Fs; - Word16 hodirac_flag; - Word16 sparfoa_flag; - DIRAC_CONFIG_FLAG dec_config_flag; - DIRAC_CONFIG_FLAG rend_config_flag; - DIRAC_CONFIG_FLAG common_rend_config_flag; - Word16 need_dirac_rend; - Word16 need_parambin; - Word16 dec_param_estim_old; - Word16 dec_param_estim_new; - - error = IVAS_ERR_OK; - move32(); + Word16 tmp_write_idx_param_band; + Word16 tmp_write_idx_band; - /* Solve and setup flags for inits */ - IF( EQ_16( flag_config_inp, DIRAC_RECONFIGURE_MODE ) ) - { - dec_config_flag = DIRAC_RECONFIGURE; - move32(); - } - ELSE - { - dec_config_flag = flag_config_inp; + Word32 diffuseness_sec_fx = 0; move32(); - } - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - move32(); - hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - IF( EQ_32( dec_config_flag, DIRAC_RECONFIGURE ) ) - { - dec_param_estim_old = st_ivas->hDirAC->hConfig->dec_param_estim; - move16(); - } - ELSE - { - dec_param_estim_old = FALSE; - move16(); - } - sparfoa_flag = 0; - move16(); - test(); - test(); - if ( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && EQ_16( st_ivas->ivas_format, SBA_FORMAT ) && !hodirac_flag ) - { - sparfoa_flag = 1; + /* ungroup */ + seed_ptr = &hDirAC->dithering_seed; + nblocks = q_direction->cfg.nblocks; move16(); - } - - IF( NE_32( ( error = ivas_dirac_dec_config_internal_fx( st_ivas, dec_config_flag ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* This is required for parambin */ - test(); - test(); - if ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - st_ivas->hDirAC->hConfig->dec_param_estim = FALSE; + nbands = hDirAC->band_grouping[hDirAC->hConfig->nbands]; move16(); - } - - dec_param_estim_new = st_ivas->hDirAC->hConfig->dec_param_estim; - move16(); + band_grouping = hDirAC->band_grouping; - /* Setup renderers and meta */ - /* First, free everything if in reconfig and not the active renderer */ - need_parambin = 0; - move16(); - SWITCH( st_ivas->renderer_type ) - { - case RENDERER_BINAURAL_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC_ROOM: - case RENDERER_STEREO_PARAMETRIC: - need_parambin = 1; - move16(); - BREAK; - default: - need_parambin = 0; + test(); + IF( LE_32( ivas_total_brate, IVAS_SID_5k2 ) && NE_32( ivas_format, SBA_FORMAT ) ) + { + /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/ + start_band = 0; move16(); - } - - IF( !need_parambin ) - { - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - } - - need_dirac_rend = 0; - move16(); - SWITCH( st_ivas->renderer_type ) - { - case RENDERER_DIRAC: - case RENDERER_BINAURAL_FASTCONV: - case RENDERER_BINAURAL_FASTCONV_ROOM: - case RENDERER_SBA_LINEAR_ENC: - case RENDERER_SBA_LINEAR_DEC: - case RENDERER_OSBA_AMBI: - case RENDERER_OSBA_LS: - need_dirac_rend = 1; + hDirAC->hConfig->nbands = 5; move16(); - BREAK; - default: - need_dirac_rend = 0; + ivas_dirac_config_bands_fx( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL ); + nbands = 5; move16(); - } - - IF( !need_dirac_rend ) - { - ivas_dirac_rend_close_fx( &st_ivas->hDirACRend ); - } - - IF( !sparfoa_flag ) - { - IF( st_ivas->hSpatParamRendCom == NULL ) - { - common_rend_config_flag = DIRAC_OPEN; - move32(); } ELSE { - common_rend_config_flag = flag_config_inp; - move32(); - } - IF( NE_32( ( error = ivas_spat_hSpatParamRendCom_config_fx( &st_ivas->hSpatParamRendCom, common_rend_config_flag, dec_param_estim_new, - st_ivas->ivas_format, st_ivas->mc_mode, output_Fs, hodirac_flag, 0 ) ), - IVAS_ERR_OK ) ) - { - return error; - } - IF( need_dirac_rend ) - { - IF( st_ivas->hDirACRend == NULL ) + start_band = hDirAC->hConfig->enc_param_start_band; + move16(); + IF( EQ_32( ivas_format, SBA_FORMAT ) ) { - rend_config_flag = DIRAC_OPEN; - move32(); + hDirAC->hConfig->nbands = IVAS_MAX_NUM_BANDS; + move16(); } ELSE { - rend_config_flag = flag_config_inp; - move32(); + hDirAC->hConfig->nbands = q_direction->cfg.nbands; + move16(); } - IF( NE_32( ( error = ivas_dirac_rend_config_fx( st_ivas, rend_config_flag, dec_param_estim_old ) ), IVAS_ERR_OK ) ) + + ivas_dirac_config_bands_fx( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft ); + + nbands = hDirAC->hConfig->nbands; + move16(); + if ( hQMetaData->q_direction[0].cfg.nblocks == 0 ) { - return error; + /* No transmission -> no copy from qmetadata buffers*/ + nbands = start_band; + move16(); } } - IF( need_parambin ) + /* Low-Bands with no spatial data transmitted, analysis at decoder side */ + FOR( band = 0; band < start_band; band++ ) { - IF( NE_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_binaural_copy_hrtfs_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) - { - return error; - } - } + band_start = band_grouping[band]; + move16(); + band_end = band_grouping[band + 1]; + move16(); + tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; + move16(); - IF( st_ivas->hDiracDecBin == NULL ) + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) { - IF( NE_32( ( error = ivas_dirac_dec_init_binaural_data_fx( st_ivas, st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) + FOR( b = band_start; b < band_end; b++ ) { - return error; - } - } - ELSE - { - /* This is required to keep BE in rate switching. This probably means that 1TC and 2TC MASA perform differently. */ - test(); - test(); - IF( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params != NULL && !( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) && st_ivas->nSCE > 0 ) ) - { - ivas_dirac_dec_decorr_close_fx( &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params, &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ); // done - } - - IF( NE_32( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( !st_ivas->hDiracDecBin->useTdDecorr ) + tmp_write_idx_band = tmp_write_idx_param_band; + move16(); - { - IF( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params == NULL ) - { - Word16 frequency_axis_fx[CLDFB_NO_CHANNELS_MAX]; - ivas_dirac_dec_get_frequency_axis_fx( frequency_axis_fx, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSpatParamRendCom->num_freq_bands ); + hSpatParamRendCom->spreadCoherence_fx[block][b] = 0; + move16(); + hSpatParamRendCom->surroundingCoherence_fx[block][b] = 0; + move16(); + hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = 0; + move32(); + hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; + move32(); + hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; + move16(); - IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params ), &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ), st_ivas->hSpatParamRendCom->num_freq_bands, BINAURAL_CHANNELS, BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, frequency_axis_fx, BINAURAL_CHANNELS, st_ivas->hDecoderConfig->output_Fs ) ), - IVAS_ERR_OK ) ) - { - return error; - } - } + tmp_write_idx_band = add( tmp_write_idx_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; } - st_ivas->hDiracDecBin->reqularizationFactor_fx = configure_reqularization_factor_fx( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); - move16(); } } - } - - - return error; -} -#else -ivas_error ivas_dirac_dec_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const DIRAC_CONFIG_FLAG flag_config_inp /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ -) -{ - ivas_error error; - int32_t output_Fs; - int16_t hodirac_flag; - int16_t sparfoa_flag; - DIRAC_CONFIG_FLAG dec_config_flag; - DIRAC_CONFIG_FLAG rend_config_flag; - DIRAC_CONFIG_FLAG common_rend_config_flag; - int16_t need_dirac_rend; - int16_t need_parambin; - int16_t dec_param_estim_old; - int16_t dec_param_estim_new; - - error = IVAS_ERR_OK; - - /* Solve and setup flags for inits */ - dec_config_flag = ( flag_config_inp == DIRAC_RECONFIGURE_MODE ) ? DIRAC_RECONFIGURE : flag_config_inp; - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - hodirac_flag = ivas_get_hodirac_flag( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - dec_param_estim_old = ( dec_config_flag == DIRAC_RECONFIGURE ) ? st_ivas->hDirAC->hConfig->dec_param_estim : FALSE; - - sparfoa_flag = 0; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA && st_ivas->ivas_format == SBA_FORMAT && !hodirac_flag ) - { - sparfoa_flag = 1; - } - - if ( ( error = ivas_dirac_dec_config_internal( st_ivas, dec_config_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* This is required for parambin */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - st_ivas->hDirAC->hConfig->dec_param_estim = FALSE; - } - - dec_param_estim_new = st_ivas->hDirAC->hConfig->dec_param_estim; - - /* Setup renderers and meta */ - /* First, free everything if in reconfig and not the active renderer */ - need_parambin = 0; - switch ( st_ivas->renderer_type ) - { - case RENDERER_BINAURAL_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC_ROOM: - case RENDERER_STEREO_PARAMETRIC: - need_parambin = 1; - break; - default: - need_parambin = 0; - } - - if ( !need_parambin ) - { - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - } - - need_dirac_rend = 0; - switch ( st_ivas->renderer_type ) - { - case RENDERER_DIRAC: - case RENDERER_BINAURAL_FASTCONV: - case RENDERER_BINAURAL_FASTCONV_ROOM: - case RENDERER_SBA_LINEAR_ENC: - case RENDERER_SBA_LINEAR_DEC: - case RENDERER_OSBA_AMBI: - case RENDERER_OSBA_LS: - need_dirac_rend = 1; - break; - default: - need_dirac_rend = 0; - } - - if ( !need_dirac_rend ) - { - ivas_dirac_rend_close( &st_ivas->hDirACRend ); - } - - if ( !sparfoa_flag ) - { - common_rend_config_flag = st_ivas->hSpatParamRendCom == NULL ? DIRAC_OPEN : flag_config_inp; - if ( ( error = ivas_spat_hSpatParamRendCom_config( &st_ivas->hSpatParamRendCom, common_rend_config_flag, dec_param_estim_new, - st_ivas->ivas_format, st_ivas->mc_mode, output_Fs, hodirac_flag, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( need_dirac_rend ) + /* Bands with spatial data transmitted */ + if ( hodirac_flag ) { - rend_config_flag = st_ivas->hDirACRend == NULL ? DIRAC_OPEN : flag_config_inp; - if ( ( error = ivas_dirac_rend_config( st_ivas, rend_config_flag, dec_param_estim_old ) ) != IVAS_ERR_OK ) - { - return error; - } + no_secs = DIRAC_HO_NUMSECTORS; + move16(); } - if ( need_parambin ) + FOR( idx_sec = 0; idx_sec < no_secs; idx_sec++ ) { - if ( st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC ) + FOR( band = start_band; band < nbands; band++ ) { - if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - } + band_start = band_grouping[band]; + move16(); + band_end = band_grouping[band + 1]; + move16(); + tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; + move16(); - if ( st_ivas->hDiracDecBin == NULL ) - { - if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) + IF( EQ_32( ivas_format, SBA_FORMAT ) ) { - return error; + qBand_idx = sub( dirac_to_spar_md_bands[band], start_band ); } - } - else - { - /* This is required to keep BE in rate switching. This probably means that 1TC and 2TC MASA perform differently. */ - if ( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params != NULL && !( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nSCE > 0 ) ) + ELSE { - ivas_dirac_dec_decorr_close( &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params, &st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ); + qBand_idx = band; + move16(); } + diff_idx = q_direction->band_data[qBand_idx].energy_ratio_index[0]; + move16(); - if ( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ) != IVAS_ERR_OK ) + diffuseness_fx = L_sub( ONE_IN_Q30, q_direction->band_data[qBand_idx].energy_ratio_fx[0] ); + + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) { - return error; - } + Word16 block_qmetadata; + + block_qmetadata = s_min( block, sub( nblocks, 1 ) ); + block_qmetadata = s_max( block_qmetadata, 0 ); - if ( !st_ivas->hDiracDecBin->useTdDecorr ) - { - if ( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params == NULL ) + if ( q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata] < 0 ) { - float frequency_axis[CLDFB_NO_CHANNELS_MAX]; + q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata] = L_add( q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata], 1509949440 /*360.0F in Q22*/ ); + move32(); + } - ivas_dirac_dec_get_frequency_axis( frequency_axis, st_ivas->hDecoderConfig->output_Fs, st_ivas->hSpatParamRendCom->num_freq_bands ); - if ( ( error = ivas_dirac_dec_decorr_open( &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_params ), &( st_ivas->hDiracDecBin->h_freq_domain_decorr_ap_state ), st_ivas->hSpatParamRendCom->num_freq_bands, BINAURAL_CHANNELS, BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, frequency_axis, BINAURAL_CHANNELS, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } + test(); + IF( hMasa == NULL && hodirac_flag ) + { + azimuth_fx = q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata]; + move32(); + elevation_fx = q_direction[idx_sec].band_data[qBand_idx].elevation_fx[block_qmetadata]; + move32(); + diffuseness_fx = L_sub( ONE_IN_Q30, q_direction[0].band_data[qBand_idx].energy_ratio_fx[block_qmetadata] ); + diffuseness_sec_fx = q_direction[1].band_data[qBand_idx].energy_ratio_fx[block_qmetadata]; + move32(); + assert( diffuseness_sec_fx < 1073849216 /*1.0001f in Q30*/ && diffuseness_sec_fx > -107374 /*-0.0001f in Q30*/ ); } - } + ELSE + { + azimuth_fx = q_direction->band_data[qBand_idx].azimuth_fx[block_qmetadata]; + move32(); + elevation_fx = q_direction->band_data[qBand_idx].elevation_fx[block_qmetadata]; + move32(); + } + FOR( b = band_start; b < band_end; b++ ) + { + tmp_write_idx_band = tmp_write_idx_param_band; + move16(); - st_ivas->hDiracDecBin->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); - } - } - } + IF( hodirac_flag ) + { + azi = extract_h( L_shr( ( L_add( azimuth_fx, ONE_IN_Q21 ) ), 6 ) ); + ele = extract_h( L_shr( ( L_add( elevation_fx, ONE_IN_Q21 ) ), 6 ) ); + /*addition of one to compensate precision loss*/ + if ( azi < 0 ) + { + azi = add( azi, 1 ); + } + if ( ele < 0 ) + { + ele = add( ele, 1 ); + } + } + ELSE + { + Word16 tmp1, tmp4; + Word16 a, b_tmp; + Word16 exp_factor = 0; + move16(); + a = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor - return error; -} -#endif + tmp1 = mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 -/*------------------------------------------------------------------------- - * ivas_dirac_dec_close() - * - * Close DirAC memories - *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_close( - DIRAC_DEC_HANDLE *hDirAC_out ) -{ - DIRAC_DEC_HANDLE hDirAC; + Word32 tmp1_32 = L_deposit_h( tmp1 ); + Word16 final_1_exp; + Word32 final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, exp_factor + 5, &final_1_exp ); + b_tmp = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor + tmp4 = mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 - if ( hDirAC_out == NULL || *hDirAC_out == NULL ) - { - return; - } + Word32 tmp4_32 = L_deposit_h( tmp4 ); + Word16 final_2_exp; + Word32 final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, exp_factor + 4, &final_2_exp ); - hDirAC = *hDirAC_out; - /* Config & CLDFB */ - if ( hDirAC->hConfig != NULL ) - { - free( hDirAC->hConfig ); - hDirAC->hConfig = NULL; - } + final_1_32 = BASOP_Util_Add_Mant32Exp( final_1_32, final_1_exp, ONE_IN_Q30, 0, &final_1_exp ); /*0.5 in q31*/ + final_2_32 = BASOP_Util_Add_Mant32Exp( final_2_32, final_2_exp, ONE_IN_Q30, 0, &final_2_exp ); - free( *hDirAC_out ); - *hDirAC_out = NULL; + azi = extract_h( L_shr( final_1_32, sub( sub( 31, final_1_exp ), 16 ) ) ); + ele = extract_h( L_shr( final_2_32, sub( sub( 31, final_2_exp ), 16 ) ) ); - return; -} + /*addition of one to compensate precision loss*/ + if ( azi < 0 ) + { + azi = add( azi, 1 ); + } + if ( ele < 0 ) + { + ele = add( ele, 1 ); + } + /* limit the elevation to [-90, 90] */ + ele = s_min( 90, ele ); + ele = s_max( -90, ele ); + } -#else -void ivas_dirac_dec_close_fx( - DIRAC_DEC_HANDLE *hDirAC_out ) -{ - DIRAC_DEC_HANDLE hDirAC; + test(); + IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) && q_direction->coherence_band_data != NULL ) + { + hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = ivas_divde_255[q_direction->coherence_band_data[qBand_idx].spread_coherence[block]]; + move16(); + } + ELSE + { + hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + } - test(); - IF( hDirAC_out == NULL || *hDirAC_out == NULL ) - { - return; - } + test(); + IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) && q_direction->coherence_band_data != NULL ) + { + hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = ivas_divde_255[hQMetaData->surcoh_band_data[qBand_idx].surround_coherence[0]]; + move16(); + } + ELSE + { + hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + } - hDirAC = *hDirAC_out; - /* Config & CLDFB */ - IF( hDirAC->hConfig != NULL ) - { - free( hDirAC->hConfig ); - hDirAC->hConfig = NULL; - } + hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = q_direction->band_data[qBand_idx].energy_ratio_fx[0]; + move32(); + hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = diffuseness_fx; + move32(); - free( *hDirAC_out ); - *hDirAC_out = NULL; + IF( hodirac_flag ) + { + IF( idx_sec == 0 ) + { + hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; + move16(); + hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; + move16(); + hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; + move32(); + } + ELSE + { + assert( idx_sec == 1 ); + hSpatParamRendCom->elevation2[tmp_write_idx_band][b] = ele; + move16(); + hSpatParamRendCom->azimuth2[tmp_write_idx_band][b] = azi; + move16(); + hSpatParamRendCom->energy_ratio2_fx[tmp_write_idx_band][b] = L_sub( ONE_IN_Q30, diffuseness_sec_fx ); + move32(); + } + } + ELSE + { + hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; + move16(); + hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; + move16(); + } + } + tmp_write_idx_param_band = add( tmp_write_idx_param_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; + + + } /* for ( block =...) */ + } /* for ( band = ...) */ + } /* for ( idx_sec = ...)*/ + + /* Bands not transmitted -> zeroed*/ + FOR( b = band_grouping[band]; b < hSpatParamRendCom->num_freq_bands; b++ ) + { + tmp_write_idx_band = hSpatParamRendCom->dirac_bs_md_write_idx; + move16(); + + FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) + { + hSpatParamRendCom->spreadCoherence_fx[block][b] = 0; + move16(); + hSpatParamRendCom->surroundingCoherence_fx[block][b] = 0; + move16(); + hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = 0; + move32(); + hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->energy_ratio1_fx[block][b] = 0; + move32(); + hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; + move32(); + hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; + move16(); + hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; + move16(); + tmp_write_idx_band = add( tmp_write_idx_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; + } + } + } + /* update buffer write index */ + hSpatParamRendCom->dirac_bs_md_write_idx = add( hSpatParamRendCom->dirac_bs_md_write_idx, MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; + move16(); return; } -#endif /*------------------------------------------------------------------------- - * ivas_dirac_dec_read_BS_fx() + * ivas_dirac_dec_set_md_map() * - * Read DirAC parameters from the bitstream + * Set metadata index mapping for DirAC *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_dirac_dec_read_BS_fx( - const Word32 ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial rendering data handle */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata */ - Word16 *nb_bits, /* o : number of bits read */ - const Word16 last_bit_pos, /* i : last read bitstream position */ - const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ +void ivas_dirac_dec_set_md_map( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const Word16 nCldfbTs /* i : number of CLDFB time slots */ ) { - Word16 i, j, b, dir, orig_dirac_bands; - Word16 next_bit_pos_orig; - Word32 quo, rem; + Word16 num_slots_in_subfr; + DIRAC_DEC_HANDLE hDirAC; + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; + + hDirAC = st_ivas->hDirAC; + hSpatParamRendCom = st_ivas->hSpatParamRendCom; + + /* adapt subframes */ + hSpatParamRendCom->num_slots = nCldfbTs; + move16(); + hSpatParamRendCom->slots_rendered = 0; + move16(); + num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; + move16(); + hSpatParamRendCom->subframes_rendered = 0; + move16(); + ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpatParamRendCom->subframe_nbslots, &hSpatParamRendCom->nb_subframes ); + + /* copy also to tc buffer */ + /* only for non-combined formats and combinded formats w/o discrete objects */ test(); test(); - IF( !st->bfi && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) + test(); + IF( ( NE_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) || NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) && !( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) { - next_bit_pos_orig = st->next_bit_pos; + st_ivas->hTcBuffer->nb_subframes = hSpatParamRendCom->nb_subframes; move16(); - iDiv_and_mod_32( ivas_total_brate, FRAMES_PER_SEC, &quo, &rem, 0 ); - st->next_bit_pos = extract_l( L_sub( quo, 1 ) ); + Copy( hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpatParamRendCom->nb_subframes ); + } + + /* set mapping according to dirac_read_idx */ + + set16_fx( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); + + test(); + test(); + IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) + { + ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); + } + ELSE IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) + { + ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); + } + ELSE + { + ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, hSpatParamRendCom->dirac_read_idx, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); + } + + test(); + test(); + IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) + { + Word64 tmp_fx; + Word16 sf_idx, slot_idx, slot_idx_abs; + Word32 quo, rem; + + slot_idx_abs = 0; move16(); - if ( last_bit_pos > 0 ) + FOR( sf_idx = 0; sf_idx < hSpatParamRendCom->nb_subframes; sf_idx++ ) { - st->next_bit_pos = last_bit_pos; + tmp_fx = 0; + move64(); + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[sf_idx]; slot_idx++ ) + { + tmp_fx = W_add_nosat( tmp_fx, W_deposit32_l( L_deposit_l( hSpatParamRendCom->render_to_md_map[slot_idx_abs] ) ) ); + slot_idx_abs = add( slot_idx_abs, 1 ); + } + iDiv_and_mod_32( W_extract_l( W_shl_nosat( tmp_fx, 16 ) ), hSpatParamRendCom->subframe_nbslots[sf_idx], &quo, &rem, 0 ); + hSpatParamRendCom->render_to_md_map[sf_idx] = add( round_fx( quo ), hSpatParamRendCom->dirac_read_idx ) % hSpatParamRendCom->dirac_md_buffer_length; move16(); } - /* 1 bit flag for signaling metadata to read */ - b = st->bit_stream[( st->next_bit_pos )--]; - move16(); - ( *nb_bits )++; - IF( EQ_16( b, 1 ) ) /* WB 4TCs condition, no other metadata to read*/ - { - orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; - move16(); + set16_fx( &hSpatParamRendCom->render_to_md_map[hSpatParamRendCom->nb_subframes], 0, sub( MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME, hSpatParamRendCom->nb_subframes ) ); + } - hQMetaData->sba_inactive_mode = 1; - move16(); + return; +} - /* if we start with a SID frame, we need to init the azi/ele arrays.*/ - IF( st->ini_frame == 0 ) - { - FOR( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - set32_fx( hQMetaData->q_direction[0].band_data[b].azimuth_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - set32_fx( hQMetaData->q_direction[0].band_data[b].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ) ); - move16(); +void ivas_dirac_dec_set_md_map_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const Word16 nCldfbTs /* i : number of CLDFB time slots */ +) +{ + Word16 num_slots_in_subfr; + DIRAC_DEC_HANDLE hDirAC; + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[1].azimuth_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation_fx[i] = hQMetaData->q_direction[0].band_data[1].elevation_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; - move16(); - } - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - FOR( j = ( orig_dirac_bands - 2 ); j >= 0; j-- ) - { - hQMetaData->q_direction[0].band_data[j].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[0].azimuth_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].elevation_fx[i] = hQMetaData->q_direction[0].band_data[0].elevation_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; - move16(); - } - } - - hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; - move16(); - } - ELSE - { - hQMetaData->sba_inactive_mode = 0; - move16(); - hQMetaData->is_masa_ivas_format = 0; - move16(); - IF( hQMetaData->useLowerRes ) - { - hQMetaData->q_direction[0].cfg.nblocks = 1; - move16(); - } - ELSE - { - hQMetaData->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; - move16(); - } - *nb_bits = add( *nb_bits, ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), hodirac_flag ) ); - move16(); - } + hDirAC = st_ivas->hDirAC; + hSpatParamRendCom = st_ivas->hSpatParamRendCom; - st->next_bit_pos = next_bit_pos_orig; - move16(); - } - ELSE IF( !st->bfi && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) - { - next_bit_pos_orig = st->next_bit_pos; - move16(); + /* adapt subframes */ + hSpatParamRendCom->num_slots = nCldfbTs; + move16(); + hSpatParamRendCom->slots_rendered = 0; + move16(); + num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; + move16(); + hSpatParamRendCom->subframes_rendered = 0; + move16(); - /* subtract mode signaling bits, since bitstream was moved after mode reading */ - iDiv_and_mod_32( ivas_total_brate, FRAMES_PER_SEC, &quo, &rem, 0 ); - st->next_bit_pos = extract_l( L_sub( L_sub( quo, 1 ), SID_FORMAT_NBITS ) ); - move16(); - /* 1 bit flag for signaling metadata to read */ - b = st->bit_stream[( st->next_bit_pos )--]; - move16(); - ( *nb_bits )++; - hQMetaData->sba_inactive_mode = 1; - move16(); - orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; - move16(); + ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpatParamRendCom->subframe_nbslots, &hSpatParamRendCom->nb_subframes ); - /* if we start with a SID frame, we need to init the azi/ele arrays.*/ - IF( st->ini_frame == 0 ) - { - FOR( dir = 0; dir < hQMetaData->no_directions; dir++ ) - { - FOR( b = 0; b < hQMetaData->q_direction[dir].cfg.nbands; b++ ) - { - set32_fx( hQMetaData->q_direction[dir].band_data[b].azimuth_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - set32_fx( hQMetaData->q_direction[dir].band_data[b].elevation_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - *nb_bits = add( *nb_bits, ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ) ); + /* copy also to tc buffer */ + /* only for non-combined formats and combinded formats w/o discrete objects */ + test(); + test(); + test(); + IF( ( NE_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) || NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) && !( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) + { + st_ivas->hTcBuffer->nb_subframes = hSpatParamRendCom->nb_subframes; move16(); - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[1].azimuth_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation_fx[i] = hQMetaData->q_direction[0].band_data[1].elevation_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; - move16(); - } - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - FOR( j = ( orig_dirac_bands - 2 ); j >= 0; j-- ) - { - hQMetaData->q_direction[0].band_data[j].azimuth_fx[i] = hQMetaData->q_direction[0].band_data[0].azimuth_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].elevation_fx[i] = hQMetaData->q_direction[0].band_data[0].elevation_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; - move16(); - } - } + Copy( hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpatParamRendCom->nb_subframes ); + } - hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; - move16(); + /* set mapping according to dirac_read_idx */ - st->next_bit_pos = next_bit_pos_orig; - move16(); - } + set16_fx( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); test(); - IF( hDirAC != NULL && hSpatParamRendCom != NULL ) + test(); + IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) { - ivas_qmetadata_to_dirac_fx( hQMetaData, hDirAC, NULL, hSpatParamRendCom, ivas_total_brate, SBA_FORMAT, hodirac_flag, dirac_to_spar_md_bands ); + ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); } - - return; -} -#else -void ivas_dirac_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - DIRAC_DEC_HANDLE hDirAC, /* i/o: decoder DirAC handle */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial rendering data handle */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata */ - int16_t *nb_bits, /* o : number of bits read */ - const int16_t last_bit_pos, /* i : last read bitstream position */ - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ -) -{ - int16_t i, j, b, dir, orig_dirac_bands; - int16_t next_bit_pos_orig; - if ( !st->bfi && ivas_total_brate > IVAS_SID_5k2 ) + ELSE IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) { - next_bit_pos_orig = st->next_bit_pos; - st->next_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 ); - if ( last_bit_pos > 0 ) - { - st->next_bit_pos = last_bit_pos; - } - /* 1 bit flag for signaling metadata to read */ - b = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits )++; - - if ( b == 1 ) /* WB 4TCs condition, no other metadata to read*/ - { - orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; - - hQMetaData->sba_inactive_mode = 1; - - /* if we start with a SID frame, we need to init the azi/ele arrays.*/ - if ( st->ini_frame == 0 ) - { - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - set_zero( hQMetaData->q_direction[0].band_data[b].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); - set_zero( hQMetaData->q_direction[0].band_data[b].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } + ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); + } + ELSE + { + ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, hSpatParamRendCom->dirac_read_idx, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); + } - *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ); - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; - } - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - for ( j = orig_dirac_bands - 2; j >= 0; j-- ) - { - hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; - hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; - hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; - } - } + test(); + test(); + IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) + { + Word16 sf_idx, slot_idx, slot_idx_abs; + Word32 tmp_fx; + Word32 num; + Word16 denom, norm_denom, exp_denom, exp_num, norm_num, exp; + Word32 ans, ans_fix_32; + Word16 ans_fix_16, exp_final; - hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; - } - else + slot_idx_abs = 0; + move16(); + FOR( sf_idx = 0; sf_idx < hSpatParamRendCom->nb_subframes; sf_idx++ ) { - hQMetaData->sba_inactive_mode = 0; - hQMetaData->is_masa_ivas_format = 0; - if ( hQMetaData->useLowerRes ) - { - hQMetaData->q_direction[0].cfg.nblocks = 1; - } - else + tmp_fx = 0; + move32(); + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[sf_idx]; slot_idx++ ) { - hQMetaData->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; + tmp_fx = L_add( tmp_fx, L_deposit_h( hSpatParamRendCom->render_to_md_map[slot_idx_abs] ) ); + slot_idx_abs = add( slot_idx_abs, 1 ); } - *nb_bits += ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), hodirac_flag ); - } - - - st->next_bit_pos = next_bit_pos_orig; - } - else if ( !st->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - next_bit_pos_orig = st->next_bit_pos; + exp_denom = 15, exp_num = 31; + move16(); + move16(); + norm_num = norm_l( tmp_fx ); + num = L_shl( tmp_fx, norm_num ); + exp_num = sub( exp_num, norm_num ); - /* subtract mode signaling bits, since bitstream was moved after mode reading */ - st->next_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 - SID_FORMAT_NBITS ); - /* 1 bit flag for signaling metadata to read */ - b = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits )++; - hQMetaData->sba_inactive_mode = 1; - orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; + norm_denom = norm_s( hSpatParamRendCom->subframe_nbslots[sf_idx] ); + denom = shl( hSpatParamRendCom->subframe_nbslots[sf_idx], norm_denom ); + exp_denom = sub( exp_denom, norm_denom ); - /* if we start with a SID frame, we need to init the azi/ele arrays.*/ - if ( st->ini_frame == 0 ) - { - for ( dir = 0; dir < hQMetaData->no_directions; dir++ ) - { - for ( b = 0; b < hQMetaData->q_direction[dir].cfg.nbands; b++ ) - { - set_zero( hQMetaData->q_direction[dir].band_data[b].azimuth, MAX_PARAM_SPATIAL_SUBFRAMES ); - set_zero( hQMetaData->q_direction[dir].band_data[b].elevation, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } + exp = sub( exp_num, exp_denom ); - *nb_bits += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), 0, NULL, SBA_FORMAT ); - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio_index[0]; - } - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - for ( j = orig_dirac_bands - 2; j >= 0; j-- ) + IF( GT_32( num, L_deposit_l( denom ) ) ) { - hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; - hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; - hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio_index[0]; + num = L_shr( num, 1 ); + exp = add( exp, 1 ); } - } - - hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; - st->next_bit_pos = next_bit_pos_orig; - } + ans = div_l( num, denom ); + ans_fix_32 = BASOP_Util_Add_Mant32Exp( ans, exp, L_deposit_h( hSpatParamRendCom->dirac_read_idx ), 15 /*31 - 16*/, &exp_final ); + ans_fix_16 = round_fx( L_shr( ans_fix_32, sub( sub( Q31, exp_final ), Q16 ) ) ); - if ( hDirAC != NULL && hSpatParamRendCom != NULL ) - { - ivas_qmetadata_to_dirac( hQMetaData, hDirAC, NULL, hSpatParamRendCom, ivas_total_brate, SBA_FORMAT, hodirac_flag, dirac_to_spar_md_bands ); + hSpatParamRendCom->render_to_md_map[sf_idx] = ans_fix_16 % hSpatParamRendCom->dirac_md_buffer_length; // Q0 + move16(); + } + set16_fx( &hSpatParamRendCom->render_to_md_map[hSpatParamRendCom->nb_subframes], 0, sub( MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME, hSpatParamRendCom->nb_subframes ) ); } return; } -#endif -/*-----------------------------------------------------------------------* - * ivas_qmetadata_to_dirac() +/*------------------------------------------------------------------------- + * ivas_dirac_dec_render_fx() * - * Copy qmetedata to DirAC parameters for rendering - *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_qmetadata_to_dirac_fx( - const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ - DIRAC_DEC_HANDLE hDirAC, /* i : DirAC decoder structure */ - MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - const Word32 ivas_total_brate, /* i : IVAS total bitrate */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - Word16 *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands Q0*/ + * DirAC decoding renderer process + *------------------------------------------------------------------------*/ + +void ivas_dirac_dec_render_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ + const Word16 nchan_transport, /* i : number of transport channels */ + const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ + UWord16 *nSamplesRendered, /* o : number of CLDFB slots rendered */ + UWord16 *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ + Word32 *output_fx[] /* o : rendered time signal Q(6-1)*/ ) { - Word16 block, band; - Word16 *seed_ptr; - Word16 band_start, band_end, diff_idx; - Word16 b, ele, azi; - Word32 azimuth_fx, elevation_fx; - Word32 diffuseness_fx; - IVAS_QDIRECTION *q_direction; - Word16 *band_mapping; - Word16 *band_grouping; - Word16 start_band; - Word16 nbands = 0; - move16(); - Word16 nblocks = 0; - move16(); - Word16 qBand_idx; - Word16 idx_sec = 0; - move16(); - Word16 no_secs = 1; + Word16 slots_to_render, first_sf, last_sf, subframe_idx; + UWord16 slot_size, n_samples_sf, ch, nchan_intern; + Word16 temp = 0; move16(); - q_direction = &( hQMetaData->q_direction[0] ); + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; + Word32 *output_f_local_fx[MAX_OUTPUT_CHANNELS]; + Word32 output_f_local_buff_fx[MAX_OUTPUT_CHANNELS][L_FRAME48k] = { 0 }; // VE2SB: TBV - hSpatParamRendCom->numParametricDirections = hQMetaData->no_directions; - move16(); - hSpatParamRendCom->numSimultaneousDirections = add( hSpatParamRendCom->numParametricDirections, hSpatParamRendCom->numIsmDirections ); - move16(); - test(); - IF( hMasa != NULL && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) + hSpatParamRendCom = st_ivas->hSpatParamRendCom; + + nchan_intern = add( st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hIntSetup.num_lfe ); + FOR( ch = 0; ch < nchan_intern; ch++ ) { - Word16 meta_write_index; - band_mapping = hMasa->data.band_mapping; - move16(); + output_f_local_fx[ch] = output_f_local_buff_fx[ch]; + set_zero_fx( output_f_local_fx[ch], nSamplesAsked ); + } + slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); // cL - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) % hSpatParamRendCom->dirac_md_buffer_length; - FOR( band = 0; band < hMasa->config.numCodingBands; ++band ) - { - FOR( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) - { - hSpatParamRendCom->azimuth[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].azimuth_fx[block], 6 ) ); - move16(); - hSpatParamRendCom->elevation[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].elevation_fx[block], 6 ) ); - move16(); - hSpatParamRendCom->energy_ratio1_fx[meta_write_index][b] = q_direction->band_data[band].energy_ratio_fx[block]; - move32(); - hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = L_sub( ONE_IN_Q30, q_direction->band_data[band].energy_ratio_fx[block] ); - move32(); + /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ + slots_to_render = s_min( sub( hSpatParamRendCom->num_slots, hSpatParamRendCom->slots_rendered ), idiv1616( nSamplesAsked, slot_size ) ); - IF( q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence_fx[meta_write_index][b] = ivas_divde_255[q_direction->coherence_band_data[band].spread_coherence[block]]; - move16(); - } - ELSE - { - hSpatParamRendCom->spreadCoherence_fx[meta_write_index][b] = 0; - move16(); - } + *nSamplesRendered = i_mult( slots_to_render, slot_size ); + move16(); - IF( hQMetaData->surcoh_band_data != NULL ) - { - hSpatParamRendCom->surroundingCoherence_fx[meta_write_index][b] = ivas_divde_255[hQMetaData->surcoh_band_data[band].surround_coherence[block]]; /*q15*/ - move16(); - } - ELSE - { - hSpatParamRendCom->surroundingCoherence_fx[meta_write_index][b] = 0; - move16(); - } - } - } - } + first_sf = hSpatParamRendCom->subframes_rendered; + move16(); + last_sf = first_sf; + move16(); - test(); - test(); - test(); - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - q_direction = &( hQMetaData->q_direction[1] ); - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = ( add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) ) % hSpatParamRendCom->dirac_md_buffer_length; + WHILE( slots_to_render > 0 ) + { + slots_to_render = sub( slots_to_render, hSpatParamRendCom->subframe_nbslots[last_sf] ); + last_sf = add( last_sf, 1 ); + } - FOR( band = 0; band < hMasa->config.numCodingBands; ++band ) - { - FOR( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) - { - hSpatParamRendCom->azimuth2[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].azimuth_fx[block], 6 ) ); - move16(); - hSpatParamRendCom->elevation2[meta_write_index][b] = extract_h( L_shr( q_direction->band_data[band].elevation_fx[block], 6 ) ); - move16(); - hSpatParamRendCom->energy_ratio2_fx[meta_write_index][b] = q_direction->band_data[band].energy_ratio_fx[block]; - move32(); - hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = L_sub( hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b], q_direction->band_data[band].energy_ratio_fx[block] ); - move32(); + FOR( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) + { +#ifdef MSAN_FIX + ivas_dirac_dec_render_sf_fx( st_ivas, output_f_local_fx, nchan_transport, NULL, NULL ); +#else + ivas_dirac_dec_render_sf_fx( st_ivas, output_f_local, nchan_transport, NULL, NULL ); +#endif // MSAN_FIX - /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */ - if ( hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] < 0 ) - { - hSpatParamRendCom->diffuseness_vector_fx[meta_write_index][b] = 0; - move32(); - } + n_samples_sf = i_mult( hSpatParamRendCom->subframe_nbslots[subframe_idx], hSpatParamRendCom->slot_size ); - IF( q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence2_fx[meta_write_index][b] = ivas_divde_255[q_direction->coherence_band_data[band].spread_coherence[block]]; - move16(); - } - ELSE - { - hSpatParamRendCom->spreadCoherence2_fx[meta_write_index][b] = 0; - move16(); - } - } - } - } - } - ELSE IF( hSpatParamRendCom->azimuth2 != NULL && hSpatParamRendCom->elevation2 != NULL && hSpatParamRendCom->energy_ratio2_fx != NULL && hSpatParamRendCom->spreadCoherence2_fx != NULL ) + FOR( ch = 0; ch < nchan_intern; ch++ ) { - /* zero out old dir2 data */ - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = add( hSpatParamRendCom->dirac_bs_md_write_idx, block ) % hSpatParamRendCom->dirac_md_buffer_length; - set16_fx( hSpatParamRendCom->azimuth2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - set16_fx( hSpatParamRendCom->elevation2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - - set32_fx( hSpatParamRendCom->energy_ratio2_fx[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - set16_fx( hSpatParamRendCom->spreadCoherence2_fx[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - } + output_f_local_fx[ch] += n_samples_sf; } - } - ELSE /* SBA mode/SID/Zero frame*/ - { - Word16 tmp_write_idx_param_band; - Word16 tmp_write_idx_band; - Word32 diffuseness_sec_fx = 0; - move32(); - - /* ungroup */ - seed_ptr = &hDirAC->dithering_seed; - nblocks = q_direction->cfg.nblocks; - move16(); - nbands = hDirAC->band_grouping[hDirAC->hConfig->nbands]; - move16(); - band_grouping = hDirAC->band_grouping; + /* update combined orientation access index */ + ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); + } + FOR( ch = 0; ch < nchan_intern; ch++ ) + { test(); - IF( LE_32( ivas_total_brate, IVAS_SID_5k2 ) && NE_32( ivas_format, SBA_FORMAT ) ) + test(); + IF( !( ( st_ivas->hDirACRend->hOutSetup.separateChannelEnabled ) && ( ( EQ_16( st_ivas->hDirACRend->hOutSetup.separateChannelIndex, ch ) || EQ_16( add( st_ivas->hDirACRend->hOutSetup.separateChannelIndex, 1 ), ch ) ) ) ) ) { - /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/ - start_band = 0; - move16(); - hDirAC->hConfig->nbands = 5; - move16(); - ivas_dirac_config_bands_fx( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL ); - nbands = 5; - move16(); + Copy32( output_f_local_buff_fx[ch], output_fx[ch], *nSamplesRendered ); } - ELSE - { - start_band = hDirAC->hConfig->enc_param_start_band; - move16(); - IF( EQ_32( ivas_format, SBA_FORMAT ) ) - { - hDirAC->hConfig->nbands = IVAS_MAX_NUM_BANDS; - move16(); - } - ELSE - { - hDirAC->hConfig->nbands = q_direction->cfg.nbands; - move16(); - } + } - ivas_dirac_config_bands_fx( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft ); + IF( EQ_16( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->num_slots ) ){ + IF( EQ_16( st_ivas->hDirAC->hConfig->dec_param_estim, 1 ) ){ + temp = add( hSpatParamRendCom->dirac_read_idx, DEFAULT_JBM_CLDFB_TIMESLOTS ); + hSpatParamRendCom->dirac_read_idx = sub( temp, i_mult( idiv1616( temp, hSpatParamRendCom->dirac_md_buffer_length ), hSpatParamRendCom->dirac_md_buffer_length ) ); // Q0 +} +ELSE +{ + temp = add( hSpatParamRendCom->dirac_read_idx, DEFAULT_JBM_SUBFRAMES_5MS ); + hSpatParamRendCom->dirac_read_idx = sub( temp, i_mult( idiv1616( temp, hSpatParamRendCom->dirac_md_buffer_length ), hSpatParamRendCom->dirac_md_buffer_length ) ); // Q0 +} +} - nbands = hDirAC->hConfig->nbands; - move16(); - if ( hQMetaData->q_direction[0].cfg.nblocks == 0 ) - { - /* No transmission -> no copy from qmetadata buffers*/ - nbands = start_band; - move16(); - } - } +*nSamplesAvailableNext = i_mult( sub( hSpatParamRendCom->num_slots, hSpatParamRendCom->slots_rendered ), slot_size ); // Q0 +move16(); - /* Low-Bands with no spatial data transmitted, analysis at decoder side */ - FOR( band = 0; band < start_band; band++ ) - { - band_start = band_grouping[band]; - move16(); - band_end = band_grouping[band + 1]; - move16(); - tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; - move16(); - - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - FOR( b = band_start; b < band_end; b++ ) - { - tmp_write_idx_band = tmp_write_idx_param_band; - move16(); - - hSpatParamRendCom->spreadCoherence_fx[block][b] = 0; - move16(); - hSpatParamRendCom->surroundingCoherence_fx[block][b] = 0; - move16(); - hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = 0; - move32(); - hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; - move32(); - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; - move16(); - - tmp_write_idx_band = add( tmp_write_idx_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - - /* Bands with spatial data transmitted */ - if ( hodirac_flag ) - { - no_secs = DIRAC_HO_NUMSECTORS; - move16(); - } - - FOR( idx_sec = 0; idx_sec < no_secs; idx_sec++ ) - { - FOR( band = start_band; band < nbands; band++ ) - { - band_start = band_grouping[band]; - move16(); - band_end = band_grouping[band + 1]; - move16(); - tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; - move16(); - - IF( EQ_32( ivas_format, SBA_FORMAT ) ) - { - qBand_idx = sub( dirac_to_spar_md_bands[band], start_band ); - } - ELSE - { - qBand_idx = band; - move16(); - } - diff_idx = q_direction->band_data[qBand_idx].energy_ratio_index[0]; - move16(); - - diffuseness_fx = L_sub( ONE_IN_Q30, q_direction->band_data[qBand_idx].energy_ratio_fx[0] ); - - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - Word16 block_qmetadata; - - block_qmetadata = s_min( block, sub( nblocks, 1 ) ); - block_qmetadata = s_max( block_qmetadata, 0 ); - - - if ( q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata] < 0 ) - { - q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata] = L_add( q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata], 1509949440 /*360.0F in Q22*/ ); - move32(); - } - - test(); - IF( hMasa == NULL && hodirac_flag ) - { - azimuth_fx = q_direction[idx_sec].band_data[qBand_idx].azimuth_fx[block_qmetadata]; - move32(); - elevation_fx = q_direction[idx_sec].band_data[qBand_idx].elevation_fx[block_qmetadata]; - move32(); - diffuseness_fx = L_sub( ONE_IN_Q30, q_direction[0].band_data[qBand_idx].energy_ratio_fx[block_qmetadata] ); - diffuseness_sec_fx = q_direction[1].band_data[qBand_idx].energy_ratio_fx[block_qmetadata]; - move32(); - assert( diffuseness_sec_fx < 1073849216 /*1.0001f in Q30*/ && diffuseness_sec_fx > -107374 /*-0.0001f in Q30*/ ); - } - ELSE - { - azimuth_fx = q_direction->band_data[qBand_idx].azimuth_fx[block_qmetadata]; - move32(); - elevation_fx = q_direction->band_data[qBand_idx].elevation_fx[block_qmetadata]; - move32(); - } - FOR( b = band_start; b < band_end; b++ ) - { - tmp_write_idx_band = tmp_write_idx_param_band; - move16(); - - IF( hodirac_flag ) - { - azi = extract_h( L_shr( ( L_add( azimuth_fx, ONE_IN_Q21 ) ), 6 ) ); - ele = extract_h( L_shr( ( L_add( elevation_fx, ONE_IN_Q21 ) ), 6 ) ); - /*addition of one to compensate precision loss*/ - if ( azi < 0 ) - { - azi = add( azi, 1 ); - } - if ( ele < 0 ) - { - ele = add( ele, 1 ); - } - } - ELSE - { - Word16 tmp1, tmp4; - Word16 a, b_tmp; - - Word16 exp_factor = 0; - move16(); - a = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor - - tmp1 = mult( a, dirac_dithering_azi_scale_fx[diff_idx] ); // exp_factor + 5 - - Word32 tmp1_32 = L_deposit_h( tmp1 ); - Word16 final_1_exp; - Word32 final_1_32 = BASOP_Util_Add_Mant32Exp( azimuth_fx, 9, tmp1_32, exp_factor + 5, &final_1_exp ); - b_tmp = rand_triangular_signed_fx( seed_ptr, &exp_factor ); // q = exp_factor - tmp4 = mult( b_tmp, dirac_dithering_ele_scale_fx[diff_idx] ); // exp_factor + 4 - - Word32 tmp4_32 = L_deposit_h( tmp4 ); - Word16 final_2_exp; - Word32 final_2_32 = BASOP_Util_Add_Mant32Exp( elevation_fx, 9, tmp4_32, exp_factor + 4, &final_2_exp ); - - - final_1_32 = BASOP_Util_Add_Mant32Exp( final_1_32, final_1_exp, ONE_IN_Q30, 0, &final_1_exp ); /*0.5 in q31*/ - final_2_32 = BASOP_Util_Add_Mant32Exp( final_2_32, final_2_exp, ONE_IN_Q30, 0, &final_2_exp ); - - azi = extract_h( L_shr( final_1_32, sub( sub( 31, final_1_exp ), 16 ) ) ); - ele = extract_h( L_shr( final_2_32, sub( sub( 31, final_2_exp ), 16 ) ) ); - - /*addition of one to compensate precision loss*/ - if ( azi < 0 ) - { - azi = add( azi, 1 ); - } - if ( ele < 0 ) - { - ele = add( ele, 1 ); - } - /* limit the elevation to [-90, 90] */ - ele = s_min( 90, ele ); - ele = s_max( -90, ele ); - } - - test(); - IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) && q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = ivas_divde_255[q_direction->coherence_band_data[qBand_idx].spread_coherence[block]]; - move16(); - } - ELSE - { - hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - } - - test(); - IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) && q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = ivas_divde_255[hQMetaData->surcoh_band_data[qBand_idx].surround_coherence[0]]; - move16(); - } - ELSE - { - hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - } - - - hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = q_direction->band_data[qBand_idx].energy_ratio_fx[0]; - move32(); - hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = diffuseness_fx; - move32(); - - IF( hodirac_flag ) - { - IF( idx_sec == 0 ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; - move16(); - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; - move16(); - hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; - move32(); - } - ELSE - { - assert( idx_sec == 1 ); - hSpatParamRendCom->elevation2[tmp_write_idx_band][b] = ele; - move16(); - hSpatParamRendCom->azimuth2[tmp_write_idx_band][b] = azi; - move16(); - hSpatParamRendCom->energy_ratio2_fx[tmp_write_idx_band][b] = L_sub( ONE_IN_Q30, diffuseness_sec_fx ); - move32(); - } - } - ELSE - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; - move16(); - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; - move16(); - } - } - tmp_write_idx_param_band = add( tmp_write_idx_param_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - - - } /* for ( block =...) */ - } /* for ( band = ...) */ - } /* for ( idx_sec = ...)*/ - - /* Bands not transmitted -> zeroed*/ - FOR( b = band_grouping[band]; b < hSpatParamRendCom->num_freq_bands; b++ ) - { - tmp_write_idx_band = hSpatParamRendCom->dirac_bs_md_write_idx; - move16(); - - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - hSpatParamRendCom->spreadCoherence_fx[block][b] = 0; - move16(); - hSpatParamRendCom->surroundingCoherence_fx[block][b] = 0; - move16(); - hSpatParamRendCom->diffuseness_vector_fx[tmp_write_idx_band][b] = 0; - move32(); - hSpatParamRendCom->spreadCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->surroundingCoherence_fx[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->energy_ratio1_fx[block][b] = 0; - move32(); - hSpatParamRendCom->energy_ratio1_fx[tmp_write_idx_band][b] = 0; - move32(); - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; - move16(); - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; - move16(); - - tmp_write_idx_band = add( tmp_write_idx_band, 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - /* update buffer write index */ - hSpatParamRendCom->dirac_bs_md_write_idx = add( hSpatParamRendCom->dirac_bs_md_write_idx, MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; - move16(); - return; -} -#else -void ivas_qmetadata_to_dirac( - const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ - DIRAC_DEC_HANDLE hDirAC, /* i : DirAC decoder structure */ - MASA_DECODER_HANDLE hMasa, /* i : MASA decoder structure */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - int16_t *dirac_to_spar_md_bands /* o : DirAC->SPAR MD bands */ -) -{ - int16_t block, band; - int16_t *seed_ptr; - int16_t band_start, band_end, diff_idx; - float diffuseness; - int16_t b, ele, azi; - float azimuth, elevation; - IVAS_QDIRECTION *q_direction; - int16_t *band_mapping; - int16_t *band_grouping; - int16_t start_band; - int16_t nbands = 0; - int16_t nblocks = 0; - int16_t qBand_idx; - int16_t idx_sec = 0; - int16_t no_secs = 1; - - q_direction = &( hQMetaData->q_direction[0] ); - hSpatParamRendCom->numParametricDirections = hQMetaData->no_directions; - hSpatParamRendCom->numSimultaneousDirections = hSpatParamRendCom->numParametricDirections + hSpatParamRendCom->numIsmDirections; - - if ( hMasa != NULL && ivas_total_brate > IVAS_SID_5k2 ) - { - int16_t meta_write_index; - band_mapping = hMasa->data.band_mapping; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = ( hSpatParamRendCom->dirac_bs_md_write_idx + block ) % hSpatParamRendCom->dirac_md_buffer_length; - - for ( band = 0; band < hMasa->config.numCodingBands; ++band ) - { - for ( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) - { - hSpatParamRendCom->azimuth[meta_write_index][b] = (int16_t) q_direction->band_data[band].azimuth[block]; - hSpatParamRendCom->elevation[meta_write_index][b] = (int16_t) q_direction->band_data[band].elevation[block]; - hSpatParamRendCom->energy_ratio1[meta_write_index][b] = q_direction->band_data[band].energy_ratio[block]; - hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = 1.0f - q_direction->band_data[band].energy_ratio[block]; - - if ( q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence[meta_write_index][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; - } - else - { - hSpatParamRendCom->spreadCoherence[meta_write_index][b] = 0.0f; - } - - if ( hQMetaData->surcoh_band_data != NULL ) - { - hSpatParamRendCom->surroundingCoherence[meta_write_index][b] = hQMetaData->surcoh_band_data[band].surround_coherence[block] / 255.0f; - } - else - { - hSpatParamRendCom->surroundingCoherence[meta_write_index][b] = 0.0f; - } - } - } - } - - if ( hQMetaData->no_directions == 2 ) - { - q_direction = &( hQMetaData->q_direction[1] ); - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = ( hSpatParamRendCom->dirac_bs_md_write_idx + block ) % hSpatParamRendCom->dirac_md_buffer_length; - - for ( band = 0; band < hMasa->config.numCodingBands; ++band ) - { - for ( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) - { - hSpatParamRendCom->azimuth2[meta_write_index][b] = (int16_t) q_direction->band_data[band].azimuth[block]; - hSpatParamRendCom->elevation2[meta_write_index][b] = (int16_t) q_direction->band_data[band].elevation[block]; - hSpatParamRendCom->energy_ratio2[meta_write_index][b] = q_direction->band_data[band].energy_ratio[block]; - hSpatParamRendCom->diffuseness_vector[meta_write_index][b] -= q_direction->band_data[band].energy_ratio[block]; - - /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */ - if ( hSpatParamRendCom->diffuseness_vector[meta_write_index][b] < 0.0f ) - { - hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = 0.0f; - } - - if ( q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence2[meta_write_index][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f; - } - else - { - hSpatParamRendCom->spreadCoherence2[meta_write_index][b] = 0.0f; - } - } - } - } - } - else if ( hSpatParamRendCom->azimuth2 != NULL && hSpatParamRendCom->elevation2 != NULL && hSpatParamRendCom->energy_ratio2 != NULL && hSpatParamRendCom->spreadCoherence2 != NULL ) - { - /* zero out old dir2 data */ - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - meta_write_index = ( hSpatParamRendCom->dirac_bs_md_write_idx + block ) % hSpatParamRendCom->dirac_md_buffer_length; - set_s( hSpatParamRendCom->azimuth2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - set_s( hSpatParamRendCom->elevation2[meta_write_index], 0, hSpatParamRendCom->num_freq_bands ); - set_zero( hSpatParamRendCom->energy_ratio2[meta_write_index], hSpatParamRendCom->num_freq_bands ); - set_zero( hSpatParamRendCom->spreadCoherence2[meta_write_index], hSpatParamRendCom->num_freq_bands ); - } - } - } - else /* SBA mode/SID/Zero frame*/ - { - int16_t tmp_write_idx_param_band; - int16_t tmp_write_idx_band; - float diffuseness_sec = 0.f; - - /* ungroup */ - seed_ptr = &hDirAC->dithering_seed; - nblocks = q_direction->cfg.nblocks; - nbands = hDirAC->band_grouping[hDirAC->hConfig->nbands]; - band_grouping = hDirAC->band_grouping; - - if ( ivas_total_brate <= IVAS_SID_5k2 && ivas_format != SBA_FORMAT ) - { - /* SID/zero-frame: 1 direction, 5 bands, nblocks re-generated out of SID decoder*/ - start_band = 0; - hDirAC->hConfig->nbands = 5; - ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, NULL, 0, 0, NULL ); - nbands = 5; - } - else - { - start_band = hDirAC->hConfig->enc_param_start_band; - if ( ivas_format == SBA_FORMAT ) - { - hDirAC->hConfig->nbands = IVAS_MAX_NUM_BANDS; - } - else - { - hDirAC->hConfig->nbands = q_direction->cfg.nbands; - } - - ivas_dirac_config_bands( hDirAC->band_grouping, hDirAC->hConfig->nbands, nbands, dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hDirAC->hConfig->enc_param_start_band, hDirAC->hFbMdft ); - - nbands = hDirAC->hConfig->nbands; - if ( hQMetaData->q_direction[0].cfg.nblocks == 0 ) - { - /* No transmission -> no copy from qmetadata buffers*/ - nbands = start_band; - } - } - - /* Low-Bands with no spatial data transmitted, analysis at decoder side */ - for ( band = 0; band < start_band; band++ ) - { - band_start = band_grouping[band]; - band_end = band_grouping[band + 1]; - tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - for ( b = band_start; b < band_end; b++ ) - { - tmp_write_idx_band = tmp_write_idx_param_band; - hSpatParamRendCom->spreadCoherence[block][b] = 0.0f; - hSpatParamRendCom->surroundingCoherence[block][b] = 0.0f; - - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = 0.f; - - hSpatParamRendCom->spreadCoherence[tmp_write_idx_band][b] = 0.0f; - hSpatParamRendCom->surroundingCoherence[tmp_write_idx_band][b] = 0.0f; - hSpatParamRendCom->energy_ratio1[tmp_write_idx_band][b] = 0; - tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - - /* Bands with spatial data transmitted */ - if ( hodirac_flag ) - { - no_secs = DIRAC_HO_NUMSECTORS; - } - - for ( idx_sec = 0; idx_sec < no_secs; idx_sec++ ) - { - for ( band = start_band; band < nbands; band++ ) - { - band_start = band_grouping[band]; - band_end = band_grouping[band + 1]; - tmp_write_idx_param_band = hSpatParamRendCom->dirac_bs_md_write_idx; - - if ( ivas_format == SBA_FORMAT ) - { - qBand_idx = dirac_to_spar_md_bands[band] - start_band; - } - else - { - qBand_idx = band; - } - diffuseness = 1.0f - q_direction->band_data[qBand_idx].energy_ratio[0]; - diff_idx = q_direction->band_data[qBand_idx].energy_ratio_index[0]; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - int16_t block_qmetadata; - - block_qmetadata = min( block, nblocks - 1 ); - block_qmetadata = max( block_qmetadata, 0 ); - - if ( q_direction[idx_sec].band_data[qBand_idx].azimuth[block_qmetadata] < 0.f ) - { - q_direction[idx_sec].band_data[qBand_idx].azimuth[block_qmetadata] += 360.f; - } - - if ( hMasa == NULL && hodirac_flag ) - { - azimuth = q_direction[idx_sec].band_data[qBand_idx].azimuth[block_qmetadata]; - elevation = q_direction[idx_sec].band_data[qBand_idx].elevation[block_qmetadata]; - diffuseness = 1.f - q_direction[0].band_data[qBand_idx].energy_ratio[block_qmetadata]; - diffuseness_sec = q_direction[1].band_data[qBand_idx].energy_ratio[block_qmetadata]; - assert( diffuseness_sec < 1.0001f && diffuseness_sec > -0.0001f ); - } - else - { - azimuth = q_direction->band_data[qBand_idx].azimuth[block_qmetadata]; - elevation = q_direction->band_data[qBand_idx].elevation[block_qmetadata]; - } - - for ( b = band_start; b < band_end; b++ ) - { - tmp_write_idx_band = tmp_write_idx_param_band; - - if ( hodirac_flag ) - { - azi = (int16_t) ( azimuth + 0.5f ); - ele = (int16_t) ( elevation + 0.5f ); - } - else - { - azi = (int16_t) ( azimuth + rand_triangular_signed( seed_ptr ) * dirac_dithering_azi_scale[diff_idx] + 0.5f ); - ele = (int16_t) ( elevation + rand_triangular_signed( seed_ptr ) * dirac_dithering_ele_scale[diff_idx] + 0.5f ); - /* limit the elevation to [-90, 90] */ - ele = min( 90, ele ); - ele = max( -90, ele ); - } - - if ( ivas_total_brate > IVAS_SID_5k2 && q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->spreadCoherence[tmp_write_idx_band][b] = q_direction->coherence_band_data[qBand_idx].spread_coherence[block] / 255.0f; - } - else - { - hSpatParamRendCom->spreadCoherence[tmp_write_idx_band][b] = 0.0f; - } - - if ( ivas_total_brate > IVAS_SID_5k2 && q_direction->coherence_band_data != NULL ) - { - hSpatParamRendCom->surroundingCoherence[tmp_write_idx_band][b] = hQMetaData->surcoh_band_data[qBand_idx].surround_coherence[0] / 255.0f; - } - else - { - hSpatParamRendCom->surroundingCoherence[tmp_write_idx_band][b] = 0.0f; - } - - hSpatParamRendCom->energy_ratio1[tmp_write_idx_band][b] = q_direction->band_data[qBand_idx].energy_ratio[0]; - - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = diffuseness; - - if ( hodirac_flag ) - { - if ( idx_sec == 0 ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; - hSpatParamRendCom->energy_ratio1[tmp_write_idx_band][b] = 0.f; // not in use - } - else - { - assert( idx_sec == 1 ); - hSpatParamRendCom->elevation2[tmp_write_idx_band][b] = ele; - hSpatParamRendCom->azimuth2[tmp_write_idx_band][b] = azi; - hSpatParamRendCom->energy_ratio2[tmp_write_idx_band][b] = 1.f - diffuseness_sec; - } - } - else - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi; - } - } - tmp_write_idx_param_band = ( tmp_write_idx_param_band + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - - } /* for ( block =...) */ - } /* for ( band = ...) */ - } /* for ( idx_sec = ...)*/ - - /* Bands not transmitted -> zeroed*/ - for ( b = band_grouping[band]; b < hSpatParamRendCom->num_freq_bands; b++ ) - { - tmp_write_idx_band = hSpatParamRendCom->dirac_bs_md_write_idx; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - - hSpatParamRendCom->spreadCoherence[block][b] = 0.0f; - hSpatParamRendCom->surroundingCoherence[block][b] = 0.0f; - hSpatParamRendCom->energy_ratio1[block][b] = 0; - - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = 0; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = 0; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = 0.f; - hSpatParamRendCom->spreadCoherence[tmp_write_idx_band][b] = 0.0f; - hSpatParamRendCom->surroundingCoherence[tmp_write_idx_band][b] = 0.0f; - hSpatParamRendCom->energy_ratio1[tmp_write_idx_band][b] = 0; - tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - - /* update buffer write index */ - hSpatParamRendCom->dirac_bs_md_write_idx = ( hSpatParamRendCom->dirac_bs_md_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; - - return; -} - -#endif -/*------------------------------------------------------------------------- - * ivas_dirac_dec_set_md_map() - * - * Set metadata index mapping for DirAC - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_dirac_dec_set_md_map( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const Word16 nCldfbTs /* i : number of CLDFB time slots */ -) -{ - Word16 num_slots_in_subfr; - DIRAC_DEC_HANDLE hDirAC; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - /* adapt subframes */ - hSpatParamRendCom->num_slots = nCldfbTs; - move16(); - hSpatParamRendCom->slots_rendered = 0; - move16(); - num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; - move16(); - hSpatParamRendCom->subframes_rendered = 0; - move16(); - - ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpatParamRendCom->subframe_nbslots, &hSpatParamRendCom->nb_subframes ); - - /* copy also to tc buffer */ - /* only for non-combined formats and combinded formats w/o discrete objects */ - test(); - test(); - test(); - IF( ( NE_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) || NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) && !( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) - { - st_ivas->hTcBuffer->nb_subframes = hSpatParamRendCom->nb_subframes; - move16(); - Copy( hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpatParamRendCom->nb_subframes ); - } - - /* set mapping according to dirac_read_idx */ - - set16_fx( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - - test(); - test(); - IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) - { - ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - ELSE IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - ELSE - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, hSpatParamRendCom->dirac_read_idx, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - - test(); - test(); - IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - Word64 tmp_fx; - Word16 sf_idx, slot_idx, slot_idx_abs; - Word32 quo, rem; - - slot_idx_abs = 0; - move16(); - FOR( sf_idx = 0; sf_idx < hSpatParamRendCom->nb_subframes; sf_idx++ ) - { - tmp_fx = 0; - move64(); - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[sf_idx]; slot_idx++ ) - { - tmp_fx = W_add_nosat( tmp_fx, W_deposit32_l( L_deposit_l( hSpatParamRendCom->render_to_md_map[slot_idx_abs] ) ) ); - slot_idx_abs = add( slot_idx_abs, 1 ); - } - iDiv_and_mod_32( W_extract_l( W_shl_nosat( tmp_fx, 16 ) ), hSpatParamRendCom->subframe_nbslots[sf_idx], &quo, &rem, 0 ); - hSpatParamRendCom->render_to_md_map[sf_idx] = add( round_fx( quo ), hSpatParamRendCom->dirac_read_idx ) % hSpatParamRendCom->dirac_md_buffer_length; - move16(); - } - - set16_fx( &hSpatParamRendCom->render_to_md_map[hSpatParamRendCom->nb_subframes], 0, sub( MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME, hSpatParamRendCom->nb_subframes ) ); - } - - return; -} -#else -void ivas_dirac_dec_set_md_map( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nCldfbTs /* i : number of CLDFB time slots */ -) -{ - int16_t num_slots_in_subfr; - DIRAC_DEC_HANDLE hDirAC; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - /* adapt subframes */ - hSpatParamRendCom->num_slots = nCldfbTs; - hSpatParamRendCom->slots_rendered = 0; - num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; - hSpatParamRendCom->subframes_rendered = 0; - - ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpatParamRendCom->subframe_nbslots, &hSpatParamRendCom->nb_subframes ); - - /* copy also to tc buffer */ - /* only for non-combined formats and combinded formats w/o discrete objects */ - if ( ( st_ivas->ivas_format != MASA_ISM_FORMAT || st_ivas->ism_mode != ISM_MASA_MODE_DISC ) && !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) ) - { - st_ivas->hTcBuffer->nb_subframes = hSpatParamRendCom->nb_subframes; - mvs2s( hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpatParamRendCom->nb_subframes ); - } - - /* set mapping according to dirac_read_idx */ - - set_s( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - - if ( st_ivas->ivas_format == MASA_FORMAT ) - { - ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - else if ( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - else - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, hSpatParamRendCom->dirac_read_idx, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - - if ( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - float tmp; - int16_t sf_idx, slot_idx, slot_idx_abs; - - slot_idx_abs = 0; - for ( sf_idx = 0; sf_idx < hSpatParamRendCom->nb_subframes; sf_idx++ ) - { - tmp = 0.0f; - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[sf_idx]; slot_idx++ ) - { - tmp += (float) hSpatParamRendCom->render_to_md_map[slot_idx_abs]; - slot_idx_abs++; - } - hSpatParamRendCom->render_to_md_map[sf_idx] = ( (int16_t) roundf( tmp / (float) hSpatParamRendCom->subframe_nbslots[sf_idx] ) + hSpatParamRendCom->dirac_read_idx ) % hSpatParamRendCom->dirac_md_buffer_length; - } - - set_s( &hSpatParamRendCom->render_to_md_map[hSpatParamRendCom->nb_subframes], 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME - hSpatParamRendCom->nb_subframes ); - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -void ivas_dirac_dec_set_md_map_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const Word16 nCldfbTs /* i : number of CLDFB time slots */ -) -{ - Word16 num_slots_in_subfr; - DIRAC_DEC_HANDLE hDirAC; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - /* adapt subframes */ - hSpatParamRendCom->num_slots = nCldfbTs; - move16(); - hSpatParamRendCom->slots_rendered = 0; - move16(); - num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; - move16(); - hSpatParamRendCom->subframes_rendered = 0; - move16(); - - ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpatParamRendCom->subframe_nbslots, &hSpatParamRendCom->nb_subframes ); - - /* copy also to tc buffer */ - /* only for non-combined formats and combinded formats w/o discrete objects */ - test(); - test(); - test(); - IF( ( NE_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) || NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) && !( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) ) - { - st_ivas->hTcBuffer->nb_subframes = hSpatParamRendCom->nb_subframes; - move16(); - Copy( hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpatParamRendCom->nb_subframes ); - } - - /* set mapping according to dirac_read_idx */ - - set16_fx( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - - test(); - test(); - IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) - { - ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - ELSE IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, 0, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - ELSE - { - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, num_slots_in_subfr, hSpatParamRendCom->dirac_read_idx, hSpatParamRendCom->dirac_md_buffer_length, hSpatParamRendCom->render_to_md_map ); - } - - test(); - test(); - IF( hDirAC == NULL || hDirAC->hConfig == NULL || hDirAC->hConfig->dec_param_estim == 0 ) - { - Word16 sf_idx, slot_idx, slot_idx_abs; - Word32 tmp_fx; - Word32 num; - Word16 denom, norm_denom, exp_denom, exp_num, norm_num, exp; - Word32 ans, ans_fix_32; - Word16 ans_fix_16, exp_final; - - slot_idx_abs = 0; - move16(); - FOR( sf_idx = 0; sf_idx < hSpatParamRendCom->nb_subframes; sf_idx++ ) - { - tmp_fx = 0; - move32(); - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[sf_idx]; slot_idx++ ) - { - tmp_fx = L_add( tmp_fx, L_deposit_h( hSpatParamRendCom->render_to_md_map[slot_idx_abs] ) ); - slot_idx_abs = add( slot_idx_abs, 1 ); - } - - exp_denom = 15, exp_num = 31; - move16(); - move16(); - norm_num = norm_l( tmp_fx ); - num = L_shl( tmp_fx, norm_num ); - exp_num = sub( exp_num, norm_num ); - - norm_denom = norm_s( hSpatParamRendCom->subframe_nbslots[sf_idx] ); - denom = shl( hSpatParamRendCom->subframe_nbslots[sf_idx], norm_denom ); - exp_denom = sub( exp_denom, norm_denom ); - - exp = sub( exp_num, exp_denom ); - - IF( GT_32( num, L_deposit_l( denom ) ) ) - { - num = L_shr( num, 1 ); - exp = add( exp, 1 ); - } - - ans = div_l( num, denom ); - ans_fix_32 = BASOP_Util_Add_Mant32Exp( ans, exp, L_deposit_h( hSpatParamRendCom->dirac_read_idx ), 15 /*31 - 16*/, &exp_final ); - ans_fix_16 = round_fx( L_shr( ans_fix_32, sub( sub( Q31, exp_final ), Q16 ) ) ); - - hSpatParamRendCom->render_to_md_map[sf_idx] = ans_fix_16 % hSpatParamRendCom->dirac_md_buffer_length; // Q0 - move16(); - } - set16_fx( &hSpatParamRendCom->render_to_md_map[hSpatParamRendCom->nb_subframes], 0, sub( MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME, hSpatParamRendCom->nb_subframes ) ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * ivas_dirac_dec_render_fx() - * - * DirAC decoding renderer process - *------------------------------------------------------------------------*/ - -void ivas_dirac_dec_render_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const Word16 nchan_transport, /* i : number of transport channels */ - const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ - UWord16 *nSamplesRendered, /* o : number of CLDFB slots rendered */ - UWord16 *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - Word32 *output_fx[] /* o : rendered time signal Q(6-1)*/ -) -{ - Word16 slots_to_render, first_sf, last_sf, subframe_idx; - UWord16 slot_size, n_samples_sf, ch, nchan_intern; - Word16 temp = 0; - move16(); - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - Word32 *output_f_local_fx[MAX_OUTPUT_CHANNELS]; - Word32 output_f_local_buff_fx[MAX_OUTPUT_CHANNELS][L_FRAME48k] = { 0 }; // VE2SB: TBV - - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - nchan_intern = add( st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hIntSetup.num_lfe ); - FOR( ch = 0; ch < nchan_intern; ch++ ) - { - output_f_local_fx[ch] = output_f_local_buff_fx[ch]; - set_zero_fx( output_f_local_fx[ch], nSamplesAsked ); - } - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); // cL - - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = s_min( sub( hSpatParamRendCom->num_slots, hSpatParamRendCom->slots_rendered ), idiv1616( nSamplesAsked, slot_size ) ); - - *nSamplesRendered = i_mult( slots_to_render, slot_size ); - move16(); - - first_sf = hSpatParamRendCom->subframes_rendered; - move16(); - last_sf = first_sf; - move16(); - - WHILE( slots_to_render > 0 ) - { - slots_to_render = sub( slots_to_render, hSpatParamRendCom->subframe_nbslots[last_sf] ); - last_sf = add( last_sf, 1 ); - } - - FOR( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { -#ifdef MSAN_FIX - ivas_dirac_dec_render_sf_fx( st_ivas, output_f_local_fx, nchan_transport, NULL, NULL ); -#else - ivas_dirac_dec_render_sf_fx( st_ivas, output_f_local, nchan_transport, NULL, NULL ); -#endif // MSAN_FIX - - n_samples_sf = i_mult( hSpatParamRendCom->subframe_nbslots[subframe_idx], hSpatParamRendCom->slot_size ); - - FOR( ch = 0; ch < nchan_intern; ch++ ) - { - output_f_local_fx[ch] += n_samples_sf; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - FOR( ch = 0; ch < nchan_intern; ch++ ) - { - test(); - test(); - IF( !( ( st_ivas->hDirACRend->hOutSetup.separateChannelEnabled ) && ( ( EQ_16( st_ivas->hDirACRend->hOutSetup.separateChannelIndex, ch ) || EQ_16( add( st_ivas->hDirACRend->hOutSetup.separateChannelIndex, 1 ), ch ) ) ) ) ) - { - Copy32( output_f_local_buff_fx[ch], output_fx[ch], *nSamplesRendered ); - } - } - - IF( EQ_16( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->num_slots ) ){ - IF( EQ_16( st_ivas->hDirAC->hConfig->dec_param_estim, 1 ) ){ - temp = add( hSpatParamRendCom->dirac_read_idx, DEFAULT_JBM_CLDFB_TIMESLOTS ); - hSpatParamRendCom->dirac_read_idx = sub( temp, i_mult( idiv1616( temp, hSpatParamRendCom->dirac_md_buffer_length ), hSpatParamRendCom->dirac_md_buffer_length ) ); // Q0 -} -ELSE -{ - temp = add( hSpatParamRendCom->dirac_read_idx, DEFAULT_JBM_SUBFRAMES_5MS ); - hSpatParamRendCom->dirac_read_idx = sub( temp, i_mult( idiv1616( temp, hSpatParamRendCom->dirac_md_buffer_length ), hSpatParamRendCom->dirac_md_buffer_length ) ); // Q0 -} -} - -*nSamplesAvailableNext = i_mult( sub( hSpatParamRendCom->num_slots, hSpatParamRendCom->slots_rendered ), slot_size ); // Q0 -move16(); - -return; -} -#else -/*------------------------------------------------------------------------- - * ivas_dirac_dec_render() - * - * DirAC decoding renderer process - *------------------------------------------------------------------------*/ - -void ivas_dirac_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t nchan_transport, /* i : number of transport channels */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t slots_to_render, first_sf, last_sf, subframe_idx; - uint16_t slot_size, n_samples_sf, ch, nchan_intern; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - float output_f_local_buff[MAX_OUTPUT_CHANNELS][L_FRAME48k]; // VE2SB: TBV - - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - nchan_intern = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - for ( ch = 0; ch < nchan_intern; ch++ ) - { - output_f_local[ch] = output_f_local_buff[ch]; - set_zero( output_f_local_buff[ch], nSamplesAsked ); - } - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered, nSamplesAsked / slot_size ); - *nSamplesRendered = slots_to_render * slot_size; - first_sf = hSpatParamRendCom->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hSpatParamRendCom->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - ivas_dirac_dec_render_sf( st_ivas, output_f_local, nchan_transport, NULL, NULL ); - n_samples_sf = hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->slot_size; - for ( ch = 0; ch < nchan_intern; ch++ ) - { - output_f_local[ch] += n_samples_sf; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - for ( ch = 0; ch < nchan_intern; ch++ ) - { - if ( !( ( st_ivas->hDirACRend->hOutSetup.separateChannelEnabled ) && ( st_ivas->hDirACRend->hOutSetup.separateChannelIndex == ch || st_ivas->hDirACRend->hOutSetup.separateChannelIndex + 1 == ch ) ) ) - { - mvr2r( output_f_local_buff[ch], output_f[ch], *nSamplesRendered ); - } - } - - if ( hSpatParamRendCom->slots_rendered == hSpatParamRendCom->num_slots ) - { - if ( st_ivas->hDirAC->hConfig->dec_param_estim == 1 ) - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_CLDFB_TIMESLOTS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - else - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_SUBFRAMES_5MS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - - *nSamplesAvailableNext = ( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered ) * slot_size; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * ivas_dirac_dec_render_sf_fx() - * - * DirAC decoding renderer process - *------------------------------------------------------------------------*/ - -void ivas_dirac_dec_render_sf_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - Word32 *output_buf_fx[], /* i/o: synthesized core-coder transport channels/DirAC output Q(6-1)*/ - const Word16 nchan_transport, /* i : number of transport channels */ - Word32 *pppQMfFrame_ts_re_fx[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], /*Q6*/ - Word32 *pppQMfFrame_ts_im_fx[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] /*Q6*/ -) -{ - Word16 i, ch, idx_in, idx_lfe; - DIRAC_DEC_HANDLE hDirAC; - DIRAC_REND_HANDLE hDirACRend; - Word16 subframe_idx; - Word16 slot_idx, index_slot; - Word16 hodirac_flag; - Word16 slot_idx_start, slot_idx_start_cldfb_synth, md_idx; - - /*CLDFB: last output channels reserved to LFT for CICPx*/ - Word32 Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word32 Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word32 Cldfb_RealBuffer_Binaural_fx[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word32 Cldfb_ImagBuffer_Binaural_fx[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word16 index = 0, num_freq_bands = 0; - move16(); - move16(); - - /* local copies of azi, ele, diffuseness */ - Word16 azimuth[CLDFB_NO_CHANNELS_MAX]; - Word16 elevation[CLDFB_NO_CHANNELS_MAX]; - Word32 diffuseness_vector_fx[CLDFB_NO_CHANNELS_MAX]; - Word32 *p_Rmat_fx; - Word32 *reference_power_fx, *reference_power_smooth_fx, *onset_filter_fx, *onset_filter_subframe_fx; - Word32 dirEne_fx; - Word32 surCohEner_fx; - Word32 surCohRatio_fx[CLDFB_NO_CHANNELS_MAX]; - Word16 surCohRatio_q_fx = 0, temp_q = 0; - move16(); - move16(); - Word32 Cldfb_RealBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - Word32 Cldfb_ImagBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - Word16 cldfb_buf_q; - Word16 offset, buff_len; - Word16 q_cldfb, q_temp_cldfb = 0; - move16(); - Word16 proto_length = 0; - move16(); - Word16 q_proto_direct_buffer[CLDFB_SLOTS_PER_SUBFRAME]; - Word16 q_proto_diffuse_buffer[CLDFB_SLOTS_PER_SUBFRAME]; - Word16 size, size_ho; - - DIRAC_DEC_STACK_MEM DirAC_mem; - Word32 *p_onset_filter_fx = NULL; - uint16_t coherence_flag; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - Word16 scale = 0; - move16(); - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - Word16 num_channels_dir, exp; - Word16 q_diffuseness_vector = Q31, q_reference_power_smooth = Q31; - move16(); - move16(); - Word16 proto_power_smooth_len = 0; - move16(); - Word16 tmp1; - - push_wmops( "ivas_dirac_dec_render" ); - - /* Initialize aux buffers */ - hDirAC = st_ivas->hDirAC; - hDirACRend = st_ivas->hDirACRend; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - DirAC_mem = hDirACRend->stack_mem; - - reference_power_fx = DirAC_mem.reference_power_fx; - IF( DirAC_mem.reference_power_fx == NULL ) - { - reference_power_smooth_fx = NULL; - } - ELSE - { - reference_power_smooth_fx = DirAC_mem.reference_power_fx + hSpatParamRendCom->num_freq_bands; - } - onset_filter_fx = DirAC_mem.onset_filter_fx; - IF( DirAC_mem.onset_filter_fx == NULL ) - { - onset_filter_subframe_fx = NULL; - } - ELSE - { - onset_filter_subframe_fx = DirAC_mem.onset_filter_fx + hSpatParamRendCom->num_freq_bands; - } - q_cldfb = Q11; - move16(); - set16_fx( q_proto_direct_buffer, hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, CLDFB_SLOTS_PER_SUBFRAME ); - set16_fx( q_proto_diffuse_buffer, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, CLDFB_SLOTS_PER_SUBFRAME ); - set_zero_fx( surCohRatio_fx, CLDFB_NO_CHANNELS_MAX ); - - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - IF( hDirACRend->masa_stereo_type_detect ) - { - hDirACRend->masa_stereo_type_detect->subtract_power_y_fx = 0; - move32(); - hDirACRend->masa_stereo_type_detect->q_subtract_power_y = Q31; - move16(); - } - } - - test(); - IF( ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) ) - { - IF( hDirACRend->h_output_synthesis_psd_params.max_band_decorr != 0 ) - { - DIRAC_OUTPUT_SYNTHESIS_STATE *state = &( hDirACRend->h_output_synthesis_psd_state ); - tmp1 = L_norm_arr( state->proto_power_diff_smooth_fx, state->proto_power_diff_smooth_len ); - - scale_sig32( state->proto_power_diff_smooth_fx, state->proto_power_diff_smooth_len, tmp1 ); // Q(proto_power_diff_smooth_q + tmp1) - state->proto_power_diff_smooth_q = add( state->proto_power_diff_smooth_q, tmp1 ); - move16(); - } - } - - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - num_channels_dir = hDirACRend->num_outputs_dir; - move16(); - hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - if ( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) - { - num_channels_dir = hDirACRend->hOutSetup.nchan_out_woLFE; - move16(); - } - - test(); - test(); - IF( h_dirac_output_synthesis_params->use_onset_filters && ( NE_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) - { - tmp1 = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( tmp1, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); // tmp1 - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = tmp1; - move16(); - } - - test(); - IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - Word16 shift; - shift = L_norm_arr( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), shift ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + shift - h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, shift ); - move16(); - shift = L_norm_arr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), shift ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + shift - h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, shift ); - move16(); - tmp1 = L_norm_arr( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), tmp1 ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + tmp1 - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, tmp1 ); - move16(); - } - - - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - FOR( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) - { - st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11; - move16(); - } - } - ELSE IF( !( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) - { - Word16 outchannels; - idx_lfe = 0; - move16(); - idx_in = 0; - move16(); - outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); - - test(); - test(); - test(); - test(); - test(); - test(); - test(); - IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || - ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) - { - outchannels = add( outchannels, 1 ); - } - - test(); - IF( ( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) ) - { - FOR( ch = 0; ch < outchannels; ch++ ) - { - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) - { - IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) - { - idx_lfe = add( idx_lfe, 1 ); - } - } - } - } - ELSE - { - FOR( ch = 0; ch < outchannels; ch++ ) - { - - test(); - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) - { - test(); - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) - { - Word16 cldfbSynIdx; - cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); - st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = Q11; - move16(); - } - } - ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) - { - } - ELSE - { - st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = Q11; - move16(); - idx_in = add( idx_in, 1 ); - } - } - } - } - - size = imult1616( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ); - IF( hodirac_flag ) - { - size_ho = imult1616( size, DIRAC_HO_NUMSECTORS ); - } - ELSE - { - size_ho = size; - move16(); - } - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q = Q26; - move16(); - - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - Word16 shift; - shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho, shift ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth + shift) - hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth = add( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth, shift ); - move16(); - - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev = Q26; - move16(); - - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_fx, imult1616( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth = Q26; - move16(); - - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev = Q26; - move16(); - } - ELSE - { - Word16 shift; - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q = Q26; - move16(); - - shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_auto_dir_smooth_prev_fx, size_ho ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_dir_smooth_prev_fx, size_ho, shift ); // Q( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev+ shift) - hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev, shift ); - move16(); - shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, shift ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev + shift) - hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, shift ); - move16(); - tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev+ tmp1) - hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev, tmp1 ); - move16(); - tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, imult1616( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, imult1616( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q tmp1) - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q, tmp1 ); - move16(); - IF( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx != 0 ) - { - tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, imult1616( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, imult1616( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q+ tmp1) - hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q, tmp1 ); - move16(); - } - } - - hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - - test(); - test(); - IF( st_ivas->hQMetaData != NULL && NE_32( st_ivas->ivas_format, SBA_FORMAT ) && NE_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - coherence_flag = st_ivas->hQMetaData->coherence_flag; - move16(); - } - ELSE - { - coherence_flag = 0; - move16(); - } - /* Subframe loop */ - slot_idx_start = hSpatParamRendCom->slots_rendered; - move16(); - slot_idx_start_cldfb_synth = 0; - move16(); - - subframe_idx = hSpatParamRendCom->subframes_rendered; - move16(); - IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) - { - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - move16(); - } - ELSE - { - md_idx = hSpatParamRendCom->render_to_md_map[slot_idx_start]; - move16(); - } - - /* copy parameters into local buffers*/ - IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) - { - Copy32( hSpatParamRendCom->diffuseness_vector_fx[hSpatParamRendCom->render_to_md_map[subframe_idx]], diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands ); - q_diffuseness_vector = Q30; - move16(); - Copy( hSpatParamRendCom->azimuth[hSpatParamRendCom->render_to_md_map[subframe_idx]], azimuth, hSpatParamRendCom->num_freq_bands ); - Copy( hSpatParamRendCom->elevation[hSpatParamRendCom->render_to_md_map[subframe_idx]], elevation, hSpatParamRendCom->num_freq_bands ); - } - ELSE - { - set32_fx( diffuseness_vector_fx, 0, hSpatParamRendCom->num_freq_bands ); - q_diffuseness_vector = Q31; - move16(); - } - - IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - set_zero_fx( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands ); - } - ELSE - { - set_zero_fx( onset_filter_subframe_fx, hSpatParamRendCom->num_freq_bands ); - } - - test(); - IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] ) - { - p_Rmat_fx = &st_ivas->hCombinedOrientationData->Rmat_fx[st_ivas->hCombinedOrientationData->subframe_idx][0][0]; - - IF( st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) - { - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - move16(); - IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) - { - rotateAziEle_DirAC_fx( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat_fx ); - } - } - } - ELSE - { - p_Rmat_fx = 0; - move32(); - } - - IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) - { - Word16 *masa_band_mapping; - /* compute response */ - IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - ivas_dirac_dec_compute_power_factors_fx( hSpatParamRendCom->num_freq_bands, - diffuseness_vector_fx, - hDirACRend->h_output_synthesis_psd_params.max_band_decorr, - hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx ); - - hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q = Q29; - move16(); - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q = Q29; - move16(); - - IF( coherence_flag ) - { - FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - dirEne_fx = hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i]; // Q29 - move32(); - surCohEner_fx = Mpy_32_16_1( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i], hSpatParamRendCom->surroundingCoherence_fx[md_idx][i] ); // Q29 + Q15 - Q15 = Q29 - - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i] = L_sub( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i], surCohEner_fx ); // Q29 - move32(); - hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i] = L_add( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i], surCohEner_fx ); // Q29 - move32(); - - surCohRatio_fx[i] = BASOP_Util_Divide3232_Scale_cadence( surCohEner_fx, ( L_add( EPSILLON_FX, L_add( dirEne_fx, surCohEner_fx ) ) ), &temp_q ); - move32(); - surCohRatio_fx[i] = L_shl( surCohRatio_fx[i], sub( temp_q, 16 ) ); // Q15 - move32(); - } - } - ELSE - { - set_zero_fx( surCohRatio_fx, hSpatParamRendCom->num_freq_bands ); - } - surCohRatio_q_fx = Q15; - move16(); - } - ELSE - { - Word16 max_exp_direct, max_exp_diffusion; - max_exp_direct = 0; - move16(); - max_exp_diffusion = 0; - move16(); - ivas_dirac_dec_compute_gain_factors_fx( hSpatParamRendCom->num_freq_bands, - hSpatParamRendCom->diffuseness_vector_fx[md_idx], - hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, - &max_exp_direct, &max_exp_diffusion ); - - hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q = sub( Q31, max_exp_direct ); - move16(); - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q = sub( Q31, max_exp_diffusion ); - move16(); - - IF( coherence_flag ) - { - FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - surCohRatio_fx[i] = L_deposit_l( hSpatParamRendCom->surroundingCoherence_fx[md_idx][i] ); - move32(); - } - } - ELSE - { - set_zero_fx( surCohRatio_fx, hSpatParamRendCom->num_freq_bands ); - } - surCohRatio_q_fx = Q15; - move16(); - } - - IF( st_ivas->hMasa == NULL ) - { - masa_band_mapping = NULL; - } - ELSE - { - masa_band_mapping = st_ivas->hMasa->data.band_mapping; - } - test(); - test(); - IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && EQ_16( st_ivas->hCombinedOrientationData->shd_rot_max_order, 1 ) ) - { - ivas_dirac_dec_compute_directional_responses_fx( hSpatParamRendCom, - hDirACRend, - st_ivas->hVBAPdata, - masa_band_mapping, - st_ivas->hMasaIsmData, - azimuth, - elevation, - md_idx, - surCohRatio_fx, - surCohRatio_q_fx, - st_ivas->hCombinedOrientationData->shd_rot_max_order, - p_Rmat_fx, - hodirac_flag ); - } - ELSE - { - ivas_dirac_dec_compute_directional_responses_fx( hSpatParamRendCom, - hDirACRend, - st_ivas->hVBAPdata, - masa_band_mapping, - st_ivas->hMasaIsmData, - azimuth, - elevation, - md_idx, - surCohRatio_fx, - surCohRatio_q_fx, - 0, - NULL, - hodirac_flag ); - } - } - - test(); - IF( ( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) && EQ_16( nchan_transport, 2 ) ) ) - { - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - index_slot = add( slot_idx_start, slot_idx ); - offset = i_mult( hSpatParamRendCom->num_freq_bands, index_slot ); - /* CLDFB Analysis*/ - FOR( ch = 0; ch < nchan_transport; ch++ ) - { - q_temp_cldfb = Q11; - move16(); - cldfbAnalysis_ts_fx_fixed_q( &st_ivas->hTcBuffer->tc_fx[hDirACRend->sba_map_tc[ch]][offset], - Cldfb_RealBuffer_Temp_fx[ch][slot_idx], - Cldfb_ImagBuffer_Temp_fx[ch][slot_idx], - hSpatParamRendCom->num_freq_bands, - st_ivas->cldfbAnaDec[ch], &q_temp_cldfb ); - } - q_cldfb = q_temp_cldfb; - move16(); - } - - test(); - IF( ( NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && NE_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) ) - { - ivas_omasa_preProcessStereoTransportsForMovedObjects_fx( st_ivas, Cldfb_RealBuffer_Temp_fx, Cldfb_ImagBuffer_Temp_fx, &cldfb_buf_q, hSpatParamRendCom->num_freq_bands, subframe_idx ); - } - } - - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - index_slot = add( slot_idx_start, slot_idx ); - IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) ) - { - md_idx = hSpatParamRendCom->render_to_md_map[index_slot]; - move16(); - } - ELSE - { - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - move16(); - } - test(); - test(); - IF( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) - { - FOR( ch = 0; ch < nchan_transport; ch++ ) - { - Copy32( pppQMfFrame_ts_re_fx[ch][slot_idx], Cldfb_RealBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); - Copy32( pppQMfFrame_ts_im_fx[ch][slot_idx], Cldfb_ImagBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); - } - q_cldfb = Q6; - move16(); - } - ELSE IF( ( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) && EQ_16( nchan_transport, 2 ) ) ) - { - FOR( ch = 0; ch < nchan_transport; ch++ ) - { - Copy32( Cldfb_RealBuffer_Temp_fx[ch][slot_idx], Cldfb_RealBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); - Copy32( Cldfb_ImagBuffer_Temp_fx[ch][slot_idx], Cldfb_ImagBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); - } - } - ELSE - { - /* CLDFB Analysis*/ - offset = i_mult( hSpatParamRendCom->num_freq_bands, index_slot ); - FOR( ch = 0; ch < nchan_transport; ch++ ) - { - q_temp_cldfb = Q11; - move16(); - cldfbAnalysis_ts_fx_fixed_q( &st_ivas->hTcBuffer->tc_fx[hDirACRend->sba_map_tc[ch]][offset], - Cldfb_RealBuffer_fx[ch][0], - Cldfb_ImagBuffer_fx[ch][0], - hSpatParamRendCom->num_freq_bands, - st_ivas->cldfbAnaDec[ch], &q_temp_cldfb ); - } - q_cldfb = q_temp_cldfb; - move16(); - } - - /* CNG in DirAC, extra CLDFB ana for CNA*/ - test(); - test(); - test(); - test(); - IF( EQ_16( st_ivas->nchan_transport, 1 ) && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && !( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) ) - { - Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; - Word16 Q_input = Q11; - move16(); - q_temp_cldfb = Q11; - move16(); - test(); - test(); - test(); - generate_masking_noise_dirac_ivas_fx( st->hFdCngDec->hFdCngCom, - st_ivas->cldfbAnaDec[1], - st_ivas->hTcBuffer->tc_fx[1], - Cldfb_RealBuffer_fx[1][0], - Cldfb_ImagBuffer_fx[1][0], - index_slot, - st->cna_dirac_flag && st->flag_cna, - ( ( ( st->core_brate == FRAME_NO_DATA ) || EQ_32( st->core_brate, SID_2k40 ) ) ) && EQ_16( st->cng_type, FD_CNG ) && st->cng_sba_flag, Q_input, &q_temp_cldfb ); - Scale_sig32( Cldfb_RealBuffer_fx[1][0], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_temp_cldfb ) ); // Q6 - Scale_sig32( Cldfb_ImagBuffer_fx[1][0], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_temp_cldfb ) ); // Q6 - } - - /* LFE synthesis */ - test(); - test(); - test(); - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled && !( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && hDirACRend->hOutSetup.num_lfe == 0 ) ) - { - ivas_lfe_synth_with_cldfb_fx( st_ivas->hMasa->hMasaLfeSynth, - Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS - 1], Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS - 1], - slot_idx, - md_idx, - nchan_transport, q_cldfb ); - } - - /*-----------------------------------------------------------------* - * protoype signal computation - *-----------------------------------------------------------------*/ - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - test(); - test(); - IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) - { - protoSignalComputation_shd_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, - reference_power_fx, &DirAC_mem.reference_power_q, - slot_idx, nchan_transport, - hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - p_Rmat_fx, q_cldfb ); - } - ELSE - { - protoSignalComputation_shd_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, - reference_power_fx, &DirAC_mem.reference_power_q, - slot_idx, nchan_transport, - hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - 0, q_cldfb ); - } - - q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; - move16(); - q_proto_diffuse_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q; - move16(); - } - ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - protoSignalComputation2_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, hDirACRend->proto_frame_f_fx, - &hDirACRend->proto_frame_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - reference_power_fx, - &DirAC_mem.reference_power_q, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, - 0, slot_idx, hSpatParamRendCom->num_freq_bands, hDirACRend->masa_stereo_type_detect, - q_cldfb ); - - q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; - move16(); - - proto_length = i_mult( 6, hSpatParamRendCom->num_freq_bands ); - proto_power_smooth_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); - } - ELSE - { - SWITCH( nchan_transport ) - { - case 11: - case 8: - case 6: - case 4: - protoSignalComputation4_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - hDirACRend->proto_frame_f_fx, - &hDirACRend->proto_frame_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - reference_power_fx, - &DirAC_mem.reference_power_q, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, - slot_idx, hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - hDirACRend->hoa_decoder, - nchan_transport, - hDirACRend->sba_map_tc, q_cldfb ); - proto_length = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); - proto_power_smooth_len = i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ); - BREAK; - case 2: - protoSignalComputation2_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, hDirACRend->proto_frame_f_fx, - &hDirACRend->proto_frame_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - reference_power_fx, - &DirAC_mem.reference_power_q, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, - hDirACRend->hOutSetup.is_loudspeaker_setup, - slot_idx, - hSpatParamRendCom->num_freq_bands, - hDirACRend->masa_stereo_type_detect, - q_cldfb ); - proto_length = i_mult( 6, hSpatParamRendCom->num_freq_bands ); - IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) - { - proto_power_smooth_len = i_mult( 3, hSpatParamRendCom->num_freq_bands ); - } - ELSE - { - proto_power_smooth_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); - } - BREAK; - case 1: - protoSignalComputation1_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - hDirACRend->proto_frame_f_fx, - &hDirACRend->proto_frame_f_q, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, - reference_power_fx, - &DirAC_mem.reference_power_q, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, - &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, - slot_idx, - hDirACRend->num_protos_diff, - hSpatParamRendCom->num_freq_bands, q_cldfb ); - proto_length = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_protos_diff ) ); - proto_power_smooth_len = hSpatParamRendCom->num_freq_bands; - move16(); - BREAK; - default: - return; - } - q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; - move16(); - } - - /*-----------------------------------------------------------------* - * Compute DirAC parameters at decoder side - *-----------------------------------------------------------------*/ - IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) ) - { - Copy( &hSpatParamRendCom->azimuth[md_idx][hDirAC->hConfig->enc_param_start_band], &azimuth[hDirAC->hConfig->enc_param_start_band], sub( hSpatParamRendCom->num_freq_bands, hDirAC->hConfig->enc_param_start_band ) ); - Copy( &hSpatParamRendCom->elevation[md_idx][hDirAC->hConfig->enc_param_start_band], &elevation[hDirAC->hConfig->enc_param_start_band], sub( hSpatParamRendCom->num_freq_bands, hDirAC->hConfig->enc_param_start_band ) ); - - test(); - test(); - IF( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) - { - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - move16(); - rotateAziEle_DirAC_fx( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat_fx ); - } - - /*hDirACRend->index_buffer_intensity = ( hDirACRend->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1 */ - IF( hDirACRend->index_buffer_intensity == 0 ) - { - hDirACRend->index_buffer_intensity = 1; - move16(); - } - ELSE - { - hDirACRend->index_buffer_intensity = add( sub( hDirACRend->index_buffer_intensity, i_mult( idiv1616( hDirACRend->index_buffer_intensity, DIRAC_NO_COL_AVG_DIFF ), DIRAC_NO_COL_AVG_DIFF ) ), 1 ); /* averaging_length = 32 */ - move16(); - } - - index = hDirACRend->index_buffer_intensity; - move16(); - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - move16(); - - computeIntensityVector_dec_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, - q_cldfb, num_freq_bands, - hDirACRend->buffer_intensity_real_fx[0][index - 1], - hDirACRend->buffer_intensity_real_fx[1][index - 1], - hDirACRend->buffer_intensity_real_fx[2][index - 1], - &hDirACRend->q_buffer_intensity_real[index - 1] ); - - computeDirectionAngles_fx( hDirACRend->buffer_intensity_real_fx[0][index - 1], - hDirACRend->buffer_intensity_real_fx[1][index - 1], - hDirACRend->buffer_intensity_real_fx[2][index - 1], - hDirACRend->q_buffer_intensity_real[index - 1], - num_freq_bands, azimuth, elevation ); - - Copy32( reference_power_fx, &( hDirACRend->buffer_energy_fx[i_mult( sub( index, 1 ), num_freq_bands )] ), num_freq_bands ); - hDirACRend->q_buffer_energy[index - 1] = DirAC_mem.reference_power_q; - move16(); - - computeDiffuseness_fixed( hDirACRend->buffer_intensity_real_fx, hDirACRend->buffer_energy_fx, num_freq_bands, hSpatParamRendCom->diffuseness_vector_fx[md_idx], hDirACRend->q_buffer_intensity_real, hDirACRend->q_buffer_energy, &hSpatParamRendCom->q_diffuseness_vector ); - } +return; +} - /*-----------------------------------------------------------------* - * frequency domain decorrelation - *-----------------------------------------------------------------*/ - IF( EQ_16( hDirACRend->proto_signal_decorr_on, 1 ) ) - { - /* decorrelate prototype frame */ - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - ivas_dirac_dec_decorr_process_fx( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx[imult1616( imult1616( imult1616( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), hDirACRend->num_outputs_diff )], - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx[( ( ( slot_idx * 2 ) * hSpatParamRendCom->num_freq_bands ) * hDirACRend->num_outputs_diff ) + ( ( 2 * hSpatParamRendCom->num_freq_bands ) * s_min( 4, nchan_transport ) )], - &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, - onset_filter_fx, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); +/*------------------------------------------------------------------------- + * ivas_dirac_dec_render_sf_fx() + * + * DirAC decoding renderer process + *------------------------------------------------------------------------*/ - v_multc_fixed( onset_filter_fx, 536870912 /* 0.25f in Q31 */, onset_filter_fx, hSpatParamRendCom->num_freq_bands ); +void ivas_dirac_dec_render_sf_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + Word32 *output_buf_fx[], /* i/o: synthesized core-coder transport channels/DirAC output Q(6-1)*/ + const Word16 nchan_transport, /* i : number of transport channels */ + Word32 *pppQMfFrame_ts_re_fx[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], /*Q6*/ + Word32 *pppQMfFrame_ts_im_fx[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] /*Q6*/ +) +{ + Word16 i, ch, idx_in, idx_lfe; + DIRAC_DEC_HANDLE hDirAC; + DIRAC_REND_HANDLE hDirACRend; + Word16 subframe_idx; + Word16 slot_idx, index_slot; + Word16 hodirac_flag; + Word16 slot_idx_start, slot_idx_start_cldfb_synth, md_idx; - v_add_fixed( onset_filter_fx, onset_filter_subframe_fx, onset_filter_subframe_fx, hSpatParamRendCom->num_freq_bands, 0 ); /* Q31 */ - p_onset_filter_fx = onset_filter_subframe_fx; - } - ELSE - { - scale = L_norm_arr( hDirACRend->proto_frame_f_fx, proto_length ); - Scale_sig32( hDirACRend->proto_frame_f_fx, proto_length, scale ); // Q(proto_frame_f_q+scale) - hDirACRend->proto_frame_f_q = add( hDirACRend->proto_frame_f_q, scale ); - move16(); - ivas_dirac_dec_decorr_process_fx( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - hDirACRend->proto_frame_f_fx, - hDirACRend->proto_frame_f_q, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - DirAC_mem.frame_dec_f_fx, - &DirAC_mem.frame_dec_f_q, - onset_filter_fx, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); + /*CLDFB: last output channels reserved to LFT for CICPx*/ + Word32 Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word32 Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word32 Cldfb_RealBuffer_Binaural_fx[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word32 Cldfb_ImagBuffer_Binaural_fx[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word16 index = 0, num_freq_bands = 0; + move16(); + move16(); - hDirACRend->proto_frame_dec_f_fx = DirAC_mem.frame_dec_f_fx; - hDirACRend->proto_frame_dec_f_q = DirAC_mem.frame_dec_f_q; - move16(); - hDirACRend->proto_frame_dec_f_len = DirAC_mem.frame_dec_f_len; - move16(); - p_onset_filter_fx = onset_filter_fx; - } - } - ELSE - { - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - set32_fx( onset_filter_subframe_fx, ONE_IN_Q31, hSpatParamRendCom->num_freq_bands ); - p_onset_filter_fx = onset_filter_subframe_fx; - } - ELSE - { - /* no frequency domain decorrelation: use prototype frame */ - hDirACRend->proto_frame_dec_f_fx = hDirACRend->proto_frame_f_fx; - hDirACRend->proto_frame_dec_f_len = hDirACRend->proto_frame_f_len; - move16(); - hDirACRend->proto_frame_dec_f_q = hDirACRend->proto_frame_f_q; - move16(); - p_onset_filter_fx = NULL; - } - } + /* local copies of azi, ele, diffuseness */ + Word16 azimuth[CLDFB_NO_CHANNELS_MAX]; + Word16 elevation[CLDFB_NO_CHANNELS_MAX]; + Word32 diffuseness_vector_fx[CLDFB_NO_CHANNELS_MAX]; + Word32 *p_Rmat_fx; + Word32 *reference_power_fx, *reference_power_smooth_fx, *onset_filter_fx, *onset_filter_subframe_fx; + Word32 dirEne_fx; + Word32 surCohEner_fx; + Word32 surCohRatio_fx[CLDFB_NO_CHANNELS_MAX]; + Word16 surCohRatio_q_fx = 0, temp_q = 0; + move16(); + move16(); + Word32 Cldfb_RealBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + Word32 Cldfb_ImagBuffer_Temp_fx[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + Word16 cldfb_buf_q; + Word16 offset, buff_len; + Word16 q_cldfb, q_temp_cldfb = 0; + move16(); + Word16 proto_length = 0; + move16(); + Word16 q_proto_direct_buffer[CLDFB_SLOTS_PER_SUBFRAME]; + Word16 q_proto_diffuse_buffer[CLDFB_SLOTS_PER_SUBFRAME]; + Word16 size, size_ho; - /*-----------------------------------------------------------------* - * output synthesis - *-----------------------------------------------------------------*/ - test(); - IF( ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) ) - { - DIRAC_OUTPUT_SYNTHESIS_STATE *state; - Word16 diffuse_start; - state = &( hDirACRend->h_output_synthesis_psd_state ); - diffuse_start = i_mult( i_mult( slot_idx, 2 ), i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); + DIRAC_DEC_STACK_MEM DirAC_mem; + Word32 *p_onset_filter_fx = NULL; + uint16_t coherence_flag; + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; + Word16 scale = 0; + move16(); + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + Word16 num_channels_dir, exp; + Word16 q_diffuseness_vector = Q31, q_reference_power_smooth = Q31; + move16(); + move16(); + Word16 proto_power_smooth_len = 0; + move16(); + Word16 tmp1; - exp = getScaleFactor32( hDirACRend->proto_frame_dec_f_fx, hDirACRend->proto_frame_dec_f_len ); - scale_sig32( hDirACRend->proto_frame_dec_f_fx, hDirACRend->proto_frame_dec_f_len, exp ); // hDirACRend->proto_frame_dec_f_q + exp - hDirACRend->proto_frame_dec_f_q = add( hDirACRend->proto_frame_dec_f_q, exp ); - move16(); - exp = getScaleFactor32( state->proto_diffuse_buffer_f_fx, diffuse_start ); - scale_sig32( state->proto_diffuse_buffer_f_fx, diffuse_start, exp ); // state->proto_diffuse_buffer_f_q + exp - state->proto_diffuse_buffer_f_q = add( state->proto_diffuse_buffer_f_q, exp ); - move16(); - /*Compute diffuse prototypes*/ - ivas_dirac_dec_compute_diffuse_proto_fx( hDirACRend, hSpatParamRendCom->num_freq_bands, slot_idx ); - } + push_wmops( "ivas_dirac_dec_render" ); - /*Compute PSDs*/ - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - num_channels_dir = hDirACRend->num_outputs_dir; - move16(); + /* Initialize aux buffers */ + hDirAC = st_ivas->hDirAC; + hDirACRend = st_ivas->hDirACRend; + hSpatParamRendCom = st_ivas->hSpatParamRendCom; - if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) - { - num_channels_dir = hDirACRend->hOutSetup.nchan_out_woLFE; - move16(); - } + DirAC_mem = hDirACRend->stack_mem; - test(); - test(); - IF( ( h_dirac_output_synthesis_params->use_onset_filters && ( NE_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) ) - { - Scale_sig32( h_dirac_output_synthesis_state->diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->diffuse_power_factor_q ) ); // Q31 - h_dirac_output_synthesis_state->diffuse_power_factor_q = Q31; - move16(); + reference_power_fx = DirAC_mem.reference_power_fx; + IF( DirAC_mem.reference_power_fx == NULL ) + { + reference_power_smooth_fx = NULL; + } + ELSE + { + reference_power_smooth_fx = DirAC_mem.reference_power_fx + hSpatParamRendCom->num_freq_bands; + } + onset_filter_fx = DirAC_mem.onset_filter_fx; + IF( DirAC_mem.onset_filter_fx == NULL ) + { + onset_filter_subframe_fx = NULL; + } + ELSE + { + onset_filter_subframe_fx = DirAC_mem.onset_filter_fx + hSpatParamRendCom->num_freq_bands; + } + q_cldfb = Q11; + move16(); + set16_fx( q_proto_direct_buffer, hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, CLDFB_SLOTS_PER_SUBFRAME ); + set16_fx( q_proto_diffuse_buffer, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, CLDFB_SLOTS_PER_SUBFRAME ); + set_zero_fx( surCohRatio_fx, CLDFB_NO_CHANNELS_MAX ); - exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_diff_smooth + exp - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, exp ); + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) + { + IF( hDirACRend->masa_stereo_type_detect ) + { + hDirACRend->masa_stereo_type_detect->subtract_power_y_fx = 0; + move32(); + hDirACRend->masa_stereo_type_detect->q_subtract_power_y = Q31; move16(); } + } - test(); - IF( ( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) + test(); + IF( ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) ) + { + IF( hDirACRend->h_output_synthesis_psd_params.max_band_decorr != 0 ) { - scale_sig32( h_dirac_output_synthesis_state->direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->direct_power_factor_q ) ); // Q31 - h_dirac_output_synthesis_state->direct_power_factor_q = Q31; - move16(); + DIRAC_OUTPUT_SYNTHESIS_STATE *state = &( hDirACRend->h_output_synthesis_psd_state ); + tmp1 = L_norm_arr( state->proto_power_diff_smooth_fx, state->proto_power_diff_smooth_len ); - scale_sig32( h_dirac_output_synthesis_state->diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->diffuse_power_factor_q ) ); // Q31 - h_dirac_output_synthesis_state->diffuse_power_factor_q = Q31; + scale_sig32( state->proto_power_diff_smooth_fx, state->proto_power_diff_smooth_len, tmp1 ); // Q(proto_power_diff_smooth_q + tmp1) + state->proto_power_diff_smooth_q = add( state->proto_power_diff_smooth_q, tmp1 ); move16(); + } + } - scale_sig32( h_dirac_output_synthesis_state->direct_responses_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, h_dirac_output_synthesis_state->direct_responses_q ) ); // Q31 - h_dirac_output_synthesis_state->direct_responses_q = Q31; - move16(); + h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); + num_channels_dir = hDirACRend->num_outputs_dir; + move16(); + hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); + if ( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) + { + num_channels_dir = hDirACRend->hOutSetup.nchan_out_woLFE; + move16(); + } - scale_sig32( h_dirac_output_synthesis_state->direct_responses_square_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, h_dirac_output_synthesis_state->direct_responses_square_q ) ); // Q31 - h_dirac_output_synthesis_state->direct_responses_square_q = Q31; - move16(); + test(); + test(); + IF( h_dirac_output_synthesis_params->use_onset_filters && ( NE_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) + { + tmp1 = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( tmp1, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); // tmp1 + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = tmp1; + move16(); + } - exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, exp - h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, exp ); - move16(); - exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth+ exp - h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, exp ); - move16(); - exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_diff_smooth+ exp - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, exp ); + test(); + IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + Word16 shift; + shift = L_norm_arr( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), shift ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + shift + h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, shift ); + move16(); + shift = L_norm_arr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), shift ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + shift + h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, shift ); + move16(); + tmp1 = L_norm_arr( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_channels_dir, hSpatParamRendCom->num_freq_bands ), tmp1 ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth + tmp1 + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, tmp1 ); + move16(); + } + + + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + FOR( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) + { + st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11; move16(); } + } + ELSE IF( !( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) + { + Word16 outchannels; + idx_lfe = 0; + move16(); + idx_in = 0; + move16(); + outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); test(); test(); - IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order > 0 ) - { - ivas_dirac_dec_output_synthesis_process_slot_fx( reference_power_fx, - DirAC_mem.reference_power_q, - p_onset_filter_fx, - azimuth, - elevation, - hSpatParamRendCom->diffuseness_vector_fx[md_idx], - hSpatParamRendCom->q_diffuseness_vector, - hSpatParamRendCom, - hDirACRend, - st_ivas->hCombinedOrientationData->shd_rot_max_order, - p_Rmat_fx, - st_ivas->hVBAPdata, - hDirACRend->hOutSetup, - nchan_transport, - md_idx, - hodirac_flag, - hDirAC->hConfig->dec_param_estim ); - } - ELSE - { - ivas_dirac_dec_output_synthesis_process_slot_fx( reference_power_fx, - DirAC_mem.reference_power_q, - p_onset_filter_fx, - azimuth, - elevation, - hSpatParamRendCom->diffuseness_vector_fx[md_idx], - hSpatParamRendCom->q_diffuseness_vector, - hSpatParamRendCom, - hDirACRend, - 0, - 0, - st_ivas->hVBAPdata, - hDirACRend->hOutSetup, - nchan_transport, - md_idx, - hodirac_flag, - hDirAC->hConfig->dec_param_estim ); - } - - IF( hDirAC->hConfig->dec_param_estim ) + test(); + test(); + test(); + test(); + test(); + IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || + ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) { - Word16 fac; - Flag flag = 0; - move32(); - fac = BASOP_Util_Divide3232_Scale( 1, hSpatParamRendCom->subframe_nbslots[subframe_idx], &exp ); - fac = shl_o( fac, exp, &flag ); - - IF( LT_16( q_diffuseness_vector, hSpatParamRendCom->q_diffuseness_vector ) ) - { - scale_sig32( hSpatParamRendCom->diffuseness_vector_fx[md_idx], hSpatParamRendCom->num_freq_bands, sub( q_diffuseness_vector, hSpatParamRendCom->q_diffuseness_vector ) ); // q_diffuseness_vector - hSpatParamRendCom->q_diffuseness_vector = q_diffuseness_vector; - move16(); - } - ELSE - { - scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( hSpatParamRendCom->q_diffuseness_vector, q_diffuseness_vector ) ); // q_diffuseness_vector - q_diffuseness_vector = hSpatParamRendCom->q_diffuseness_vector; - move16(); - } - v_multc_acc_32_16( hSpatParamRendCom->diffuseness_vector_fx[md_idx], fac, diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands ); + outchannels = add( outchannels, 1 ); } - IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + test(); + IF( ( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) ) { - IF( LT_16( q_reference_power_smooth, DirAC_mem.reference_power_q ) ) + FOR( ch = 0; ch < outchannels; ch++ ) { - Word32 temp; - FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) { - temp = L_shl( reference_power_fx[i], sub( q_reference_power_smooth, DirAC_mem.reference_power_q ) ); - test(); - IF( temp == 0 && ( reference_power_fx[i] != 0 ) ) - { - reference_power_fx[i] = 1; - } - ELSE + IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) { - reference_power_fx[i] = temp; + idx_lfe = add( idx_lfe, 1 ); } - move32(); } - DirAC_mem.reference_power_q = q_reference_power_smooth; - move16(); } - ELSE + } + ELSE + { + FOR( ch = 0; ch < outchannels; ch++ ) { - Word32 temp; - FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) + + test(); + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) { - temp = L_shl( reference_power_smooth_fx[i], sub( DirAC_mem.reference_power_q, q_reference_power_smooth ) ); test(); - IF( temp == 0 && ( reference_power_smooth_fx[i] != 0 ) ) - { - reference_power_smooth_fx[i] = 1; - } - ELSE + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) { - reference_power_smooth_fx[i] = temp; + Word16 cldfbSynIdx; + cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); + st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = Q11; + move16(); } - move32(); } - q_reference_power_smooth = DirAC_mem.reference_power_q; - move16(); + ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) + { + } + ELSE + { + st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = Q11; + move16(); + idx_in = add( idx_in, 1 ); + } } - v_add_fixed( reference_power_fx, reference_power_smooth_fx, reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands, 1 ); - q_reference_power_smooth = sub( q_reference_power_smooth, 1 ); } } - minimum_s( q_proto_direct_buffer, hSpatParamRendCom->subframe_nbslots[subframe_idx], &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q ); + size = imult1616( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ); + IF( hodirac_flag ) + { + size_ho = imult1616( size, DIRAC_HO_NUMSECTORS ); + } + ELSE + { + size_ho = size; + move16(); + } + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q = Q26; + move16(); + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - minimum_s( q_proto_diffuse_buffer, hSpatParamRendCom->subframe_nbslots[subframe_idx], &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q ); + Word16 shift; + shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho, shift ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth + shift) + hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth = add( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth, shift ); + move16(); + + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev = Q26; + move16(); + + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_fx, imult1616( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth = Q26; + move16(); + + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev = Q26; + move16(); } - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + ELSE { - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, nchan_transport ) ); - buff_len = i_mult( 2, i_mult( nchan_transport, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + Word16 shift; + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q = Q26; + move16(); - offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); - buff_len = i_mult( 2, i_mult( hDirACRend->num_outputs_diff, hSpatParamRendCom->num_freq_bands ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, q_proto_diffuse_buffer[slot_idx] ) ); // proto_diffuse_buffer_f_q - } - ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - offset = i_mult( slot_idx, i_mult( 4, hSpatParamRendCom->num_freq_bands ) ); - buff_len = i_mult( 4, hSpatParamRendCom->num_freq_bands ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q - } - ELSE + shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_auto_dir_smooth_prev_fx, size_ho ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_dir_smooth_prev_fx, size_ho, shift ); // Q( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev+ shift) + hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_dir_smooth_prev, shift ); + move16(); + shift = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, shift ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev + shift) + hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, shift ); + move16(); + tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, imult1616( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev+ tmp1) + hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev = add( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev, tmp1 ); + move16(); + tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, imult1616( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, imult1616( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q tmp1) + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q, tmp1 ); + move16(); + IF( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx != 0 ) { - SWITCH( nchan_transport ) - { - case 11: - case 8: - case 6: - case 4: - offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); - buff_len = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q - BREAK; - case 2: - IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) - { - offset = i_mult( i_mult( i_mult( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), 3 ); - buff_len = i_mult( 6, hSpatParamRendCom->num_freq_bands ); - } - ELSE - { - offset = i_mult( i_mult( i_mult( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), 2 ); - buff_len = i_mult( 4, hSpatParamRendCom->num_freq_bands ); - } - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q - BREAK; - case 1: - offset = i_mult( slot_idx, i_mult( 2, hSpatParamRendCom->num_freq_bands ) ); - buff_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q - BREAK; - } + tmp1 = L_norm_arr( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, imult1616( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, imult1616( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), tmp1 ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q+ tmp1) + hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q, tmp1 ); + move16(); } - q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + } + + hodirac_flag = ivas_get_hodirac_flag_fx( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); + + test(); + test(); + IF( st_ivas->hQMetaData != NULL && NE_32( st_ivas->ivas_format, SBA_FORMAT ) && NE_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) + { + coherence_flag = st_ivas->hQMetaData->coherence_flag; + move16(); + } + ELSE + { + coherence_flag = 0; move16(); } + /* Subframe loop */ + slot_idx_start = hSpatParamRendCom->slots_rendered; + move16(); + slot_idx_start_cldfb_synth = 0; + move16(); - ivas_dirac_dec_output_synthesis_get_interpolator_fx( &hDirACRend->h_output_synthesis_psd_params, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + subframe_idx = hSpatParamRendCom->subframes_rendered; + move16(); + IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) + { + md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; + move16(); + } + ELSE + { + md_idx = hSpatParamRendCom->render_to_md_map[slot_idx_start]; + move16(); + } - size = i_mult( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ); - IF( hodirac_flag ) + /* copy parameters into local buffers*/ + IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) { - size_ho = i_mult( size, DIRAC_HO_NUMSECTORS ); + Copy32( hSpatParamRendCom->diffuseness_vector_fx[hSpatParamRendCom->render_to_md_map[subframe_idx]], diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands ); + q_diffuseness_vector = Q30; + move16(); + Copy( hSpatParamRendCom->azimuth[hSpatParamRendCom->render_to_md_map[subframe_idx]], azimuth, hSpatParamRendCom->num_freq_bands ); + Copy( hSpatParamRendCom->elevation[hSpatParamRendCom->render_to_md_map[subframe_idx]], elevation, hSpatParamRendCom->num_freq_bands ); } ELSE { - size_ho = size; + set32_fx( diffuseness_vector_fx, 0, hSpatParamRendCom->num_freq_bands ); + q_diffuseness_vector = Q31; move16(); } - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth, Q26 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth ) ); // Q26 - hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth = Q26; - move16(); - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev ) ); // Q26 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_fx, size_ho, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_q ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth ) ); // Q26 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ) ); // Q26 - } - IF( NE_16( q_diffuseness_vector, Q30 ) ) - { - scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( Q30, q_diffuseness_vector ) ); // Q30 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 - } + set_zero_fx( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands ); + } + ELSE + { + set_zero_fx( onset_filter_subframe_fx, hSpatParamRendCom->num_freq_bands ); + } - ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( Cldfb_RealBuffer_fx, - Cldfb_ImagBuffer_fx, - hSpatParamRendCom, - hDirACRend, - nchan_transport, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - p_onset_filter_fx, - diffuseness_vector_fx, - hodirac_flag, - hDirAC->hConfig->dec_param_estim, - &hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, - &hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ); + test(); + IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] ) + { + p_Rmat_fx = &st_ivas->hCombinedOrientationData->Rmat_fx[st_ivas->hCombinedOrientationData->subframe_idx][0][0]; - test(); - IF( hDirACRend->hOutSetup.is_loudspeaker_setup && hDirACRend->hoa_decoder != NULL ) - { - FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) - { - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 - scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 - } - } - } - ELSE + IF( st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) { - FOR( ch = 0; ch < hDirACRend->num_outputs_dir; ch++ ) + num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; + move16(); + IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) { - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 - scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 - } + rotateAziEle_DirAC_fx( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat_fx ); } } } ELSE { - /* Determine encoding quality based additional smoothing factor */ - Word32 qualityBasedSmFactor_fx = ONE_IN_Q31; + p_Rmat_fx = 0; move32(); - Word16 q_Cldfb = 0; - move16(); - - IF( st_ivas->hMasa != NULL ) - { - qualityBasedSmFactor_fx = L_mult( st_ivas->hMasa->data.dir_decode_quality_fx, st_ivas->hMasa->data.dir_decode_quality_fx ); /* (Q15, Q15) -> Q31 */ - } + } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_fx, size, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_q ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q, Q31 ) ) - { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q ) ); // Q31 - } - IF( NE_16( q_diffuseness_vector, Q31 ) ) - { - Scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( Q31, q_diffuseness_vector ) ); // Q31 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q, Q31 ) ) + IF( ( hDirAC->hConfig->dec_param_estim == FALSE ) ) + { + Word16 *masa_band_mapping; + /* compute response */ + IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_square_fx, i_mult( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q ) ); // Q31 - } + ivas_dirac_dec_compute_power_factors_fx( hSpatParamRendCom->num_freq_bands, + diffuseness_vector_fx, + hDirACRend->h_output_synthesis_psd_params.max_band_decorr, + hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, + hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx ); - exp = L_norm_arr( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands ); - scale_sig32( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands, exp ); // q_reference_power_smooth + exp - q_reference_power_smooth = add( q_reference_power_smooth, exp ); - IF( LT_16( q_reference_power_smooth, hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_fx, hSpatParamRendCom->num_freq_bands, sub( q_reference_power_smooth, hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q ) ); // q_reference_power_smooth - hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q = q_reference_power_smooth; + hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q = Q29; move16(); - } - ELSE - { - Word32 temp; - FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) + hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q = Q29; + move16(); + + IF( coherence_flag ) { - temp = L_shl( reference_power_smooth_fx[i], sub( hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q, q_reference_power_smooth ) ); - test(); - IF( temp == 0 && ( reference_power_smooth_fx[i] != 0 ) ) - { - reference_power_smooth_fx[i] = 1; - } - ELSE + FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) { - reference_power_smooth_fx[i] = temp; - } - move32(); - } + dirEne_fx = hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i]; // Q29 + move32(); + surCohEner_fx = Mpy_32_16_1( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i], hSpatParamRendCom->surroundingCoherence_fx[md_idx][i] ); // Q29 + Q15 - Q15 = Q29 - q_reference_power_smooth = hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q; - move16(); - } + hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i] = L_sub( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx[i], surCohEner_fx ); // Q29 + move32(); + hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i] = L_add( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx[i], surCohEner_fx ); // Q29 + move32(); - IF( hDirACRend->masa_stereo_type_detect != NULL ) - { - IF( LT_16( hDirACRend->masa_stereo_type_detect->q_subtract_power_y, hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth ) ) - { - hDirACRend->masa_stereo_type_detect->subtract_power_y_smooth_fx = L_shr( hDirACRend->masa_stereo_type_detect->subtract_power_y_smooth_fx, sub( hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth, hDirACRend->masa_stereo_type_detect->q_subtract_power_y ) ); // q_subtract_power_y - move32(); - hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth = hDirACRend->masa_stereo_type_detect->q_subtract_power_y; - move16(); + surCohRatio_fx[i] = BASOP_Util_Divide3232_Scale_cadence( surCohEner_fx, ( L_add( EPSILLON_FX, L_add( dirEne_fx, surCohEner_fx ) ) ), &temp_q ); + move32(); + surCohRatio_fx[i] = L_shl( surCohRatio_fx[i], sub( temp_q, 16 ) ); // Q15 + move32(); + } } ELSE { - hDirACRend->masa_stereo_type_detect->subtract_power_y_fx = L_shr( hDirACRend->masa_stereo_type_detect->subtract_power_y_fx, sub( hDirACRend->masa_stereo_type_detect->q_subtract_power_y, hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth ) ); // q_subtract_power_y - move32(); - hDirACRend->masa_stereo_type_detect->q_subtract_power_y = hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth; - move16(); + set_zero_fx( surCohRatio_fx, hSpatParamRendCom->num_freq_bands ); } + surCohRatio_q_fx = Q15; + move16(); } - - exp = getScaleFactor32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, proto_power_smooth_len ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, proto_power_smooth_len, exp ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q + exp) - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, exp ); - move16(); - IF( LT_16( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q ) ) + ELSE { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, i_mult( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q ) ); // proto_power_smooth_q - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q; + Word16 max_exp_direct, max_exp_diffusion; + max_exp_direct = 0; + move16(); + max_exp_diffusion = 0; + move16(); + ivas_dirac_dec_compute_gain_factors_fx( hSpatParamRendCom->num_freq_bands, + hSpatParamRendCom->diffuseness_vector_fx[md_idx], + hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, + hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, + &max_exp_direct, &max_exp_diffusion ); + + hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q = sub( Q31, max_exp_direct ); move16(); - } - ELSE - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, i_mult( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q ) ); // proto_power_smooth_prev_q - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q; + hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q = sub( Q31, max_exp_diffusion ); move16(); - } - exp = getScaleFactor32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), exp ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q + exp) - hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, exp ); - move16(); - IF( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx != 0 ) - { - IF( LT_16( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q ) ) + IF( coherence_flag ) { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q ) ); // proto_power_diff_smooth_q - hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q = hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q; - move16(); + FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) + { + surCohRatio_fx[i] = L_deposit_l( hSpatParamRendCom->surroundingCoherence_fx[md_idx][i] ); + move32(); + } } ELSE { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q ) ); // proto_power_diff_smooth_prev_q - hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q = hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q; - move16(); + set_zero_fx( surCohRatio_fx, hSpatParamRendCom->num_freq_bands ); } + surCohRatio_q_fx = Q15; + move16(); } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q, Q26 ) ) - { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 - } - IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q, Q26 ) ) + IF( st_ivas->hMasa == NULL ) { - scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 + masa_band_mapping = NULL; } - IF( hDirACRend->proto_signal_decorr_on ) + ELSE { - Scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q ) ); // proto_direct_buffer_f_q - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; - move16(); + masa_band_mapping = st_ivas->hMasa->data.band_mapping; } - - ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( Cldfb_RealBuffer_fx, - Cldfb_ImagBuffer_fx, - hSpatParamRendCom, - hDirACRend, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - diffuseness_vector_fx, - reference_power_smooth_fx, - &q_reference_power_smooth, - qualityBasedSmFactor_fx, - hDirAC->hConfig->enc_param_start_band, - &q_Cldfb ); - - Word16 sh = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q; - move16(); - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = 31; - move16(); - FOR( i = 0; i < proto_power_smooth_len; i++ ) + test(); + test(); + IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && EQ_16( st_ivas->hCombinedOrientationData->shd_rot_max_order, 1 ) ) { - IF( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx[i] != 0 ) - { - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = sh; - move16(); - } + ivas_dirac_dec_compute_directional_responses_fx( hSpatParamRendCom, + hDirACRend, + st_ivas->hVBAPdata, + masa_band_mapping, + st_ivas->hMasaIsmData, + azimuth, + elevation, + md_idx, + surCohRatio_fx, + surCohRatio_q_fx, + st_ivas->hCombinedOrientationData->shd_rot_max_order, + p_Rmat_fx, + hodirac_flag ); } - - FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) + ELSE { - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, q_Cldfb ) ); // Q6 - scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, q_Cldfb ) ); // Q6 - } + ivas_dirac_dec_compute_directional_responses_fx( hSpatParamRendCom, + hDirACRend, + st_ivas->hVBAPdata, + masa_band_mapping, + st_ivas->hMasaIsmData, + azimuth, + elevation, + md_idx, + surCohRatio_fx, + surCohRatio_q_fx, + 0, + NULL, + hodirac_flag ); } } - /*-----------------------------------------------------------------* - * CLDFB synthesis (and binaural rendering) - *-----------------------------------------------------------------*/ - - index_slot = slot_idx_start_cldfb_synth; - move16(); - test(); - test(); - IF( ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) - { - /* render objects in combined format onto the CICP19 channels for BINAURAL_ROOM_IR */ - test(); - test(); - IF( ( ( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) && EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) - { - Word16 in_ch; - FOR( in_ch = 0; in_ch < st_ivas->nchan_ism; in_ch++ ) - { - Word16 j, k, j2, l; - Word16 num_objects, nchan_out_woLFE, lfe_index; - Word16 az1, el1; - Word16 n_slots_to_render; - Word16 n_samples_to_render; - Word16 interp_offset; - - Word32 gain_fx, prev_gain_fx; - - num_objects = st_ivas->nchan_ism; - move16(); - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - move16(); - n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; - move16(); - n_samples_to_render = imult1616( hSpatParamRendCom->num_freq_bands, n_slots_to_render ); - interp_offset = st_ivas->hTcBuffer->n_samples_rendered; - move16(); - - test(); - IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) - { - ivas_jbm_dec_get_adapted_linear_interpolator_fx( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator_fx ); - interp_offset = 0; - move16(); - } - FOR( i = 0; i < num_objects; i++ ) - { - /* Combined rotation: rotate the object positions depending the head and external orientations */ - test(); - IF( st_ivas->hCombinedOrientationData != NULL && EQ_16( st_ivas->hCombinedOrientationData->enableCombinedOrientation[0], 1 ) ) - { - Word16 az_q0 = extract_l( L_shr( st_ivas->hIsmMetaData[i]->azimuth_fx, Q22 ) ); - Word16 el_q0 = extract_l( L_shr( st_ivas->hIsmMetaData[i]->elevation_fx, Q22 ) ); - Word32 az1_32, el1_32; - rotateAziEle_fixed( az_q0, el_q0, &az1_32, &el1_32, st_ivas->hCombinedOrientationData->Rmat_fx[0], st_ivas->hIntSetup.is_planar_setup ); - az1 = extract_h( az1_32 ); - el1 = extract_h( el1_32 ); - - IF( st_ivas->hEFAPdata != NULL ) - { - const Word32 azi_fx = L_shl( az1, Q22 ); // Q0 -> Q22 - const Word32 ele_fx = L_shl( el1, Q22 ); // Q0 -> Q22 - efap_determine_gains_fx( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains_fx[i], azi_fx, ele_fx, EFAP_MODE_EFAP ); - } - } - - lfe_index = 0; - move16(); - for ( j = 0, j2 = 0; j < nchan_out_woLFE; j++, j2++ ) - { - test(); - IF( ( st_ivas->hIntSetup.num_lfe > 0 && ( EQ_16( st_ivas->hIntSetup.index_lfe[lfe_index], j ) ) ) ) - { - IF( LT_16( lfe_index, sub( st_ivas->hIntSetup.num_lfe, 1 ) ) ) - { - lfe_index = add( lfe_index, 1 ); - j2 = add( j2, 1 ); - } - ELSE - { - j2 = add( j2, 1 ); - } - } - gain_fx = st_ivas->hIsmRendererData->gains_fx[i][j]; - move32(); - prev_gain_fx = st_ivas->hIsmRendererData->prev_gains_fx[i][j]; - move32(); - test(); - IF( ( L_abs( gain_fx ) > 0 || L_abs( prev_gain_fx ) > 0 ) ) - { - Word32 *tc_re_fx, *tc_im_fx; - Word16 *w1_fx, w2_fx; - w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[interp_offset]; - tc_re_fx = pppQMfFrame_ts_re_fx[nchan_transport + i][0]; - move32(); - tc_im_fx = pppQMfFrame_ts_im_fx[nchan_transport + i][0]; - move32(); - FOR( k = 0; k < n_slots_to_render; k++ ) - { - Word32 g_fx; - w2_fx = sub( MAX16B, *w1_fx ); - g_fx = L_add( Mpy_32_16_1( gain_fx, *w1_fx ), Mpy_32_16_1( prev_gain_fx, w2_fx ) ); // Q15 - FOR( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ ) - { - Word32 tmp; - tmp = Mpy_32_32( g_fx, *tc_re_fx ); - Cldfb_RealBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l] = L_add( Cldfb_RealBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l], tmp ); - move32(); - tc_re_fx++; - tmp = Mpy_32_32( g_fx, *tc_im_fx ); - Cldfb_ImagBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l] = L_add( Cldfb_ImagBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l], tmp ); - move32(); - tc_re_fx++; - } - w1_fx += hSpatParamRendCom->num_freq_bands; - } - } - /* update here only in case of head rotation */ - test(); - IF( st_ivas->hCombinedOrientationData != NULL && EQ_16( st_ivas->hCombinedOrientationData->enableCombinedOrientation[0], 1 ) ) - { - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = gain_fx; - move32(); - } - } - } - } - } - - /* Perform binaural rendering */ - Word16 input_q; - input_q = Q6; - move16(); - - ivas_binRenderer_fx( st_ivas->hBinRenderer, - st_ivas->hCombinedOrientationData, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, - Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, &input_q ); - - Scale_sig32( Cldfb_RealBuffer_Binaural_fx[0][0], i_mult( BINAURAL_CHANNELS, i_mult( MAX_PARAM_SPATIAL_SUBFRAMES, CLDFB_NO_CHANNELS_MAX ) ), sub( Q6, input_q ) ); // Q6 - Scale_sig32( Cldfb_ImagBuffer_Binaural_fx[0][0], i_mult( BINAURAL_CHANNELS, i_mult( MAX_PARAM_SPATIAL_SUBFRAMES, CLDFB_NO_CHANNELS_MAX ) ), sub( Q6, input_q ) ); // Q6 - - /* Inverse CLDFB*/ - FOR( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) - { - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - Word32 *synth_fx = &output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands]; - Word32 *RealBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; - Word32 *ImagBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; - FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + IF( ( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) && EQ_16( nchan_transport, 2 ) ) ) + { + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + index_slot = add( slot_idx_start, slot_idx ); + offset = i_mult( hSpatParamRendCom->num_freq_bands, index_slot ); + /* CLDFB Analysis*/ + FOR( ch = 0; ch < nchan_transport; ch++ ) { - RealBuffer_fx[i] = Cldfb_RealBuffer_Binaural_fx[ch][i]; - move32(); - ImagBuffer_fx[i] = Cldfb_ImagBuffer_Binaural_fx[ch][i]; - move32(); + q_temp_cldfb = Q11; + move16(); + cldfbAnalysis_ts_fx_fixed_q( &st_ivas->hTcBuffer->tc_fx[hDirACRend->sba_map_tc[ch]][offset], + Cldfb_RealBuffer_Temp_fx[ch][slot_idx], + Cldfb_ImagBuffer_Temp_fx[ch][slot_idx], + hSpatParamRendCom->num_freq_bands, + st_ivas->cldfbAnaDec[ch], &q_temp_cldfb ); } - - scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[ch]->Q_cldfb_state ) ); // Q6-1 - st_ivas->cldfbSynDec[ch]->Q_cldfb_state = ( Q6 - 1 ); + q_cldfb = q_temp_cldfb; move16(); + } - cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, synth_fx, i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ), st_ivas->cldfbSynDec[ch] ); + test(); + IF( ( NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && NE_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) ) + { + ivas_omasa_preProcessStereoTransportsForMovedObjects_fx( st_ivas, Cldfb_RealBuffer_Temp_fx, Cldfb_ImagBuffer_Temp_fx, &cldfb_buf_q, hSpatParamRendCom->num_freq_bands, subframe_idx ); + } + } - Word16 no_col = st_ivas->cldfbSynDec[ch]->no_col; + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + index_slot = add( slot_idx_start, slot_idx ); + IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) ) + { + md_idx = hSpatParamRendCom->render_to_md_map[index_slot]; move16(); - Word16 no_channels = st_ivas->cldfbSynDec[ch]->no_channels; + } + ELSE + { + md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; move16(); - Word16 samplesToProcess = i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + } + test(); + test(); + IF( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) + { + FOR( ch = 0; ch < nchan_transport; ch++ ) + { + Copy32( pppQMfFrame_ts_re_fx[ch][slot_idx], Cldfb_RealBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); + Copy32( pppQMfFrame_ts_im_fx[ch][slot_idx], Cldfb_ImagBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); + } + q_cldfb = Q6; move16(); - IF( GT_16( samplesToProcess, -1 ) ) + } + ELSE IF( ( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) && EQ_16( nchan_transport, 2 ) ) ) + { + FOR( ch = 0; ch < nchan_transport; ch++ ) { - Word16 tmp, tmp_e; - tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[ch]->no_channels, 1 ) ), st_ivas->cldfbSynDec[ch]->no_channels, &tmp_e ); - tmp = shr( tmp, 15 - tmp_e ); - no_col = s_min( no_col, tmp ); + Copy32( Cldfb_RealBuffer_Temp_fx[ch][slot_idx], Cldfb_RealBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); + Copy32( Cldfb_ImagBuffer_Temp_fx[ch][slot_idx], Cldfb_ImagBuffer_fx[ch][0], hSpatParamRendCom->num_freq_bands ); } - Word16 synth_len = imult1616( no_col, no_channels ); - - scale_sig32( synth_fx, synth_len, ( Q11 - ( Q6 - 1 ) ) ); // Q11 } - } - ELSE IF( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) - { - FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) + ELSE { - FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + /* CLDFB Analysis*/ + offset = i_mult( hSpatParamRendCom->num_freq_bands, index_slot ); + FOR( ch = 0; ch < nchan_transport; ch++ ) { - Copy32( Cldfb_RealBuffer_fx[ch][slot_idx], pppQMfFrame_ts_re_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); // Q6 - Copy32( Cldfb_ImagBuffer_fx[ch][slot_idx], pppQMfFrame_ts_im_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); // Q6 + q_temp_cldfb = Q11; + move16(); + cldfbAnalysis_ts_fx_fixed_q( &st_ivas->hTcBuffer->tc_fx[hDirACRend->sba_map_tc[ch]][offset], + Cldfb_RealBuffer_fx[ch][0], + Cldfb_ImagBuffer_fx[ch][0], + hSpatParamRendCom->num_freq_bands, + st_ivas->cldfbAnaDec[ch], &q_temp_cldfb ); } + q_cldfb = q_temp_cldfb; + move16(); } - } - ELSE - { - Word32 *RealBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; - Word32 *ImagBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; - Word16 outchannels; - - idx_in = 0; - move16(); - idx_lfe = 0; - move16(); - - outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); + /* CNG in DirAC, extra CLDFB ana for CNA*/ test(); test(); test(); test(); + IF( EQ_16( st_ivas->nchan_transport, 1 ) && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && !( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) ) + { + Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; + Word16 Q_input = Q11; + move16(); + q_temp_cldfb = Q11; + move16(); + test(); + test(); + test(); + generate_masking_noise_dirac_ivas_fx( st->hFdCngDec->hFdCngCom, + st_ivas->cldfbAnaDec[1], + st_ivas->hTcBuffer->tc_fx[1], + Cldfb_RealBuffer_fx[1][0], + Cldfb_ImagBuffer_fx[1][0], + index_slot, + st->cna_dirac_flag && st->flag_cna, + ( ( ( st->core_brate == FRAME_NO_DATA ) || EQ_32( st->core_brate, SID_2k40 ) ) ) && EQ_16( st->cng_type, FD_CNG ) && st->cng_sba_flag, Q_input, &q_temp_cldfb ); + Scale_sig32( Cldfb_RealBuffer_fx[1][0], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_temp_cldfb ) ); // Q6 + Scale_sig32( Cldfb_ImagBuffer_fx[1][0], CLDFB_NO_CHANNELS_MAX, sub( Q6, q_temp_cldfb ) ); // Q6 + } + + /* LFE synthesis */ test(); test(); test(); - IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || - ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled && !( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && hDirACRend->hOutSetup.num_lfe == 0 ) ) { - outchannels = add( outchannels, 1 ); + ivas_lfe_synth_with_cldfb_fx( st_ivas->hMasa->hMasaLfeSynth, + Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS - 1], Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS - 1], + slot_idx, + md_idx, + nchan_transport, q_cldfb ); } - test(); - IF( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + /*-----------------------------------------------------------------* + * protoype signal computation + *-----------------------------------------------------------------*/ + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - Word32 tmp_separated_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - Word32 tmp_lfe_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - const Word16 subframe_start_sample = imult1616( index_slot, hSpatParamRendCom->num_freq_bands ); - const Word16 num_samples_subframe = imult1616( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - - /* Move the separated and the LFE channels to temporary variables as spatial synthesis may overwrite current channels */ - Copy32( &( output_buf_fx[st_ivas->hOutSetup.separateChannelIndex][subframe_start_sample] ), tmp_separated_fx, num_samples_subframe ); - Copy32( &( output_buf_fx[LFE_CHANNEL][subframe_start_sample] ), tmp_lfe_fx, num_samples_subframe ); - FOR( ch = 0; ch < outchannels; ch++ ) + test(); + test(); + IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) + { + protoSignalComputation_shd_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, + reference_power_fx, &DirAC_mem.reference_power_q, + slot_idx, nchan_transport, + hDirACRend->num_outputs_diff, + hSpatParamRendCom->num_freq_bands, + p_Rmat_fx, q_cldfb ); + } + ELSE { + protoSignalComputation_shd_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, + reference_power_fx, &DirAC_mem.reference_power_q, + slot_idx, nchan_transport, + hDirACRend->num_outputs_diff, + hSpatParamRendCom->num_freq_bands, + 0, q_cldfb ); + } - test(); - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) - { - /* Move the LFE channel to the correct place */ - Copy32( tmp_lfe_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); + q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + move16(); + q_proto_diffuse_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q; + move16(); + } + ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) + { + protoSignalComputation2_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, hDirACRend->proto_frame_f_fx, + &hDirACRend->proto_frame_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + reference_power_fx, + &DirAC_mem.reference_power_q, + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, + 0, slot_idx, hSpatParamRendCom->num_freq_bands, hDirACRend->masa_stereo_type_detect, + q_cldfb ); - IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) - { - idx_lfe = add( idx_lfe, 1 ); - } - } - ELSE IF( ( st_ivas->hLsSetupCustom->separate_ch_found ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) - { - /* Move the separated channel to the correct place. Thus, the separated channel is - * combined with the synthesized channels here when there is a matching channel. */ - Copy32( tmp_separated_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); - } - ELSE - { - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + move16(); + + proto_length = i_mult( 6, hSpatParamRendCom->num_freq_bands ); + proto_power_smooth_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); + } + ELSE + { + SWITCH( nchan_transport ) + { + case 11: + case 8: + case 6: + case 4: + protoSignalComputation4_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + hDirACRend->proto_frame_f_fx, + &hDirACRend->proto_frame_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + reference_power_fx, + &DirAC_mem.reference_power_q, + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, + slot_idx, hDirACRend->num_outputs_diff, + hSpatParamRendCom->num_freq_bands, + hDirACRend->hoa_decoder, + nchan_transport, + hDirACRend->sba_map_tc, q_cldfb ); + proto_length = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); + proto_power_smooth_len = i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ); + BREAK; + case 2: + protoSignalComputation2_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, hDirACRend->proto_frame_f_fx, + &hDirACRend->proto_frame_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + reference_power_fx, + &DirAC_mem.reference_power_q, + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, + hDirACRend->hOutSetup.is_loudspeaker_setup, + slot_idx, + hSpatParamRendCom->num_freq_bands, + hDirACRend->masa_stereo_type_detect, + q_cldfb ); + proto_length = i_mult( 6, hSpatParamRendCom->num_freq_bands ); + IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) { - RealBuffer_fx[i] = Cldfb_RealBuffer_fx[idx_in][i]; - move32(); - ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[idx_in][i]; - move32(); + proto_power_smooth_len = i_mult( 3, hSpatParamRendCom->num_freq_bands ); } - cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe, st_ivas->cldfbSynDec[idx_in] ); - - IF( !st_ivas->hLsSetupCustom->separate_ch_found ) + ELSE { - /* Pan the separated channel and mix with the synthesized channels. Thus, the separated channel - * is combined with the synthesized channels here when there is no matching channel. */ - v_multc_acc_32_16( tmp_separated_fx, st_ivas->hLsSetupCustom->separate_ch_gains_fx[idx_in], &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); + proto_power_smooth_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); } - - idx_in = add( idx_in, 1 ); - } + BREAK; + case 1: + protoSignalComputation1_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + hDirACRend->proto_frame_f_fx, + &hDirACRend->proto_frame_f_q, + hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, + reference_power_fx, + &DirAC_mem.reference_power_q, + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, + &hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, + slot_idx, + hDirACRend->num_protos_diff, + hSpatParamRendCom->num_freq_bands, q_cldfb ); + proto_length = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_protos_diff ) ); + proto_power_smooth_len = hSpatParamRendCom->num_freq_bands; + move16(); + BREAK; + default: + return; } + q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + move16(); } - ELSE + + /*-----------------------------------------------------------------* + * Compute DirAC parameters at decoder side + *-----------------------------------------------------------------*/ + IF( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) ) { - FOR( ch = 0; ch < outchannels; ch++ ) + Copy( &hSpatParamRendCom->azimuth[md_idx][hDirAC->hConfig->enc_param_start_band], &azimuth[hDirAC->hConfig->enc_param_start_band], sub( hSpatParamRendCom->num_freq_bands, hDirAC->hConfig->enc_param_start_band ) ); + Copy( &hSpatParamRendCom->elevation[md_idx][hDirAC->hConfig->enc_param_start_band], &elevation[hDirAC->hConfig->enc_param_start_band], sub( hSpatParamRendCom->num_freq_bands, hDirAC->hConfig->enc_param_start_band ) ); + + test(); + test(); + IF( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) { + num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; + move16(); + rotateAziEle_DirAC_fx( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat_fx ); + } - test(); - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) - { - test(); - test(); - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) - { - FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) - { - RealBuffer_fx[i] = Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS - 1][i]; - move32(); - ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS - 1][i]; - move32(); - } - Word16 cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); - Word16 samplesToProcess = i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - Word32 *p_out = &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ); + /*hDirACRend->index_buffer_intensity = ( hDirACRend->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1 */ + IF( hDirACRend->index_buffer_intensity == 0 ) + { + hDirACRend->index_buffer_intensity = 1; + move16(); + } + ELSE + { + hDirACRend->index_buffer_intensity = add( sub( hDirACRend->index_buffer_intensity, i_mult( idiv1616( hDirACRend->index_buffer_intensity, DIRAC_NO_COL_AVG_DIFF ), DIRAC_NO_COL_AVG_DIFF ) ), 1 ); /* averaging_length = 32 */ + move16(); + } - scale_sig32( st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_state_fx, st_ivas->cldfbSynDec[cldfbSynIdx]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state ) ); // Q6-1 - st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = ( Q6 - 1 ); - move16(); - cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, p_out, samplesToProcess, st_ivas->cldfbSynDec[cldfbSynIdx] ); + index = hDirACRend->index_buffer_intensity; + move16(); + num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; + move16(); - // Calculating length of output - Word16 no_col = st_ivas->cldfbSynDec[cldfbSynIdx]->no_col; - move16(); - Word16 no_channels = st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels; - move16(); - IF( GT_16( samplesToProcess, -1 ) ) - { - Word16 tmp, tmp_e; - tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels, 1 ) ), st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels, &tmp_e ); - tmp = shr( tmp, 15 - tmp_e ); - no_col = s_min( no_col, tmp ); - } - Word16 synth_len = imult1616( no_col, no_channels ); + computeIntensityVector_dec_fx( Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, + q_cldfb, num_freq_bands, + hDirACRend->buffer_intensity_real_fx[0][index - 1], + hDirACRend->buffer_intensity_real_fx[1][index - 1], + hDirACRend->buffer_intensity_real_fx[2][index - 1], + &hDirACRend->q_buffer_intensity_real[index - 1] ); - scale_sig32( p_out, synth_len, ( Q11 - ( Q6 - 1 ) ) ); // Q11 - } - ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && hDirACRend->hOutSetup.separateChannelEnabled ) - { - /* LFE has been synthesized in the time domain, do nothing. */ - } - ELSE - { - set32_fx( &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), 0, imult1616( hSpatParamRendCom->subframe_nbslots[subframe_idx], hSpatParamRendCom->num_freq_bands ) ); - } - IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) - { - idx_lfe = add( idx_lfe, 1 ); - } - } - ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) - { - /* The separated channel is already set to output_f[hOutSetup.separateChannelIndex]. Thus, the separated - * channel is combined with the synthesized channels here. */ - } - ELSE - { - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - Word32 *p_out = &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ); - Word16 samplesToProcess, out_len; - FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) - { - RealBuffer_fx[i] = Cldfb_RealBuffer_fx[idx_in][i]; // Q6 - move32(); - ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[idx_in][i]; // Q6 - move32(); - } - samplesToProcess = imult1616( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + computeDirectionAngles_fx( hDirACRend->buffer_intensity_real_fx[0][index - 1], + hDirACRend->buffer_intensity_real_fx[1][index - 1], + hDirACRend->buffer_intensity_real_fx[2][index - 1], + hDirACRend->q_buffer_intensity_real[index - 1], + num_freq_bands, azimuth, elevation ); - // Calculating length of processed output - Word16 no_col = st_ivas->cldfbSynDec[idx_in]->no_col; - move16(); - Word16 no_channels = st_ivas->cldfbSynDec[idx_in]->no_channels; - move16(); - IF( GT_16( samplesToProcess, -1 ) ) - { - Word16 tmp, tmp_e; - tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[idx_in]->no_channels, 1 ) ), st_ivas->cldfbSynDec[idx_in]->no_channels, &tmp_e ); - tmp = shr( tmp, 15 - tmp_e ); - no_col = s_min( no_col, tmp ); - } - out_len = imult1616( no_col, no_channels ); + Copy32( reference_power_fx, &( hDirACRend->buffer_energy_fx[i_mult( sub( index, 1 ), num_freq_bands )] ), num_freq_bands ); + hDirACRend->q_buffer_energy[index - 1] = DirAC_mem.reference_power_q; + move16(); - // Scaling cldfb_state to Q6-1 - scale_sig32( st_ivas->cldfbSynDec[idx_in]->cldfb_state_fx, st_ivas->cldfbSynDec[idx_in]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state ) ); - st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = ( Q6 - 1 ); - move16(); + computeDiffuseness_fixed( hDirACRend->buffer_intensity_real_fx, hDirACRend->buffer_energy_fx, num_freq_bands, hSpatParamRendCom->diffuseness_vector_fx[md_idx], hDirACRend->q_buffer_intensity_real, hDirACRend->q_buffer_energy, &hSpatParamRendCom->q_diffuseness_vector ); + } - cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, p_out, samplesToProcess, st_ivas->cldfbSynDec[idx_in] ); + /*-----------------------------------------------------------------* + * frequency domain decorrelation + *-----------------------------------------------------------------*/ + IF( EQ_16( hDirACRend->proto_signal_decorr_on, 1 ) ) + { + /* decorrelate prototype frame */ + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + ivas_dirac_dec_decorr_process_fx( hSpatParamRendCom->num_freq_bands, + hDirACRend->num_outputs_diff, + hDirACRend->num_protos_diff, + hDirACRend->synthesisConf, + nchan_transport, + &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx[imult1616( imult1616( imult1616( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), hDirACRend->num_outputs_diff )], + hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, + hDirACRend->num_protos_diff, + hDirACRend->proto_index_diff, + &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx[( ( ( slot_idx * 2 ) * hSpatParamRendCom->num_freq_bands ) * hDirACRend->num_outputs_diff ) + ( ( 2 * hSpatParamRendCom->num_freq_bands ) * s_min( 4, nchan_transport ) )], + &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, + onset_filter_fx, + hDirACRend->h_freq_domain_decorr_ap_params, + hDirACRend->h_freq_domain_decorr_ap_state ); - // Scaling output from Q6-1 to Q11 - Scale_sig32( p_out, out_len, ( Q11 - ( Q6 - 1 ) ) ); + v_multc_fixed( onset_filter_fx, 536870912 /* 0.25f in Q31 */, onset_filter_fx, hSpatParamRendCom->num_freq_bands ); - idx_in = add( idx_in, 1 ); - } + v_add_fixed( onset_filter_fx, onset_filter_subframe_fx, onset_filter_subframe_fx, hSpatParamRendCom->num_freq_bands, 0 ); /* Q31 */ + p_onset_filter_fx = onset_filter_subframe_fx; + } + ELSE + { + scale = L_norm_arr( hDirACRend->proto_frame_f_fx, proto_length ); + Scale_sig32( hDirACRend->proto_frame_f_fx, proto_length, scale ); // Q(proto_frame_f_q+scale) + hDirACRend->proto_frame_f_q = add( hDirACRend->proto_frame_f_q, scale ); + move16(); + ivas_dirac_dec_decorr_process_fx( hSpatParamRendCom->num_freq_bands, + hDirACRend->num_outputs_diff, + hDirACRend->num_protos_diff, + hDirACRend->synthesisConf, + nchan_transport, + hDirACRend->proto_frame_f_fx, + hDirACRend->proto_frame_f_q, + hDirACRend->num_protos_diff, + hDirACRend->proto_index_diff, + DirAC_mem.frame_dec_f_fx, + &DirAC_mem.frame_dec_f_q, + onset_filter_fx, + hDirACRend->h_freq_domain_decorr_ap_params, + hDirACRend->h_freq_domain_decorr_ap_state ); + + hDirACRend->proto_frame_dec_f_fx = DirAC_mem.frame_dec_f_fx; + hDirACRend->proto_frame_dec_f_q = DirAC_mem.frame_dec_f_q; + move16(); + hDirACRend->proto_frame_dec_f_len = DirAC_mem.frame_dec_f_len; + move16(); + p_onset_filter_fx = onset_filter_fx; + } + } + ELSE + { + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + set32_fx( onset_filter_subframe_fx, ONE_IN_Q31, hSpatParamRendCom->num_freq_bands ); + p_onset_filter_fx = onset_filter_subframe_fx; + } + ELSE + { + /* no frequency domain decorrelation: use prototype frame */ + hDirACRend->proto_frame_dec_f_fx = hDirACRend->proto_frame_f_fx; + hDirACRend->proto_frame_dec_f_len = hDirACRend->proto_frame_f_len; + move16(); + hDirACRend->proto_frame_dec_f_q = hDirACRend->proto_frame_f_q; + move16(); + p_onset_filter_fx = NULL; } } - } - hSpatParamRendCom->slots_rendered = add( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - move16(); - hSpatParamRendCom->subframes_rendered = add( hSpatParamRendCom->subframes_rendered, 1 ); - move16(); + /*-----------------------------------------------------------------* + * output synthesis + *-----------------------------------------------------------------*/ + test(); + IF( ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) ) + { + DIRAC_OUTPUT_SYNTHESIS_STATE *state; + Word16 diffuse_start; + state = &( hDirACRend->h_output_synthesis_psd_state ); + diffuse_start = i_mult( i_mult( slot_idx, 2 ), i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); + exp = getScaleFactor32( hDirACRend->proto_frame_dec_f_fx, hDirACRend->proto_frame_dec_f_len ); + scale_sig32( hDirACRend->proto_frame_dec_f_fx, hDirACRend->proto_frame_dec_f_len, exp ); // hDirACRend->proto_frame_dec_f_q + exp + hDirACRend->proto_frame_dec_f_q = add( hDirACRend->proto_frame_dec_f_q, exp ); + move16(); + exp = getScaleFactor32( state->proto_diffuse_buffer_f_fx, diffuse_start ); + scale_sig32( state->proto_diffuse_buffer_f_fx, diffuse_start, exp ); // state->proto_diffuse_buffer_f_q + exp + state->proto_diffuse_buffer_f_q = add( state->proto_diffuse_buffer_f_q, exp ); + move16(); + /*Compute diffuse prototypes*/ + ivas_dirac_dec_compute_diffuse_proto_fx( hDirACRend, hSpatParamRendCom->num_freq_bands, slot_idx ); + } - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q = hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev; - move16(); - hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q = hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev; + /*Compute PSDs*/ + h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); + num_channels_dir = hDirACRend->num_outputs_dir; move16(); - } - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - FOR( i = 0; i < st_ivas->hDecoderConfig->nchan_out; i++ ) + if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) { - scale_sig32( st_ivas->cldfbSynDec[i]->cldfb_state_fx, st_ivas->cldfbSynDec[i]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[i]->Q_cldfb_state ) ); // Q11 - st_ivas->cldfbSynDec[i]->Q_cldfb_state = Q11; + num_channels_dir = hDirACRend->hOutSetup.nchan_out_woLFE; move16(); } - } - ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - } - ELSE - { - Word16 outchannels; - idx_lfe = 0; - move16(); - idx_in = 0; - move16(); - outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); test(); test(); + IF( ( h_dirac_output_synthesis_params->use_onset_filters && ( NE_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) ) + { + Scale_sig32( h_dirac_output_synthesis_state->diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->diffuse_power_factor_q ) ); // Q31 + h_dirac_output_synthesis_state->diffuse_power_factor_q = Q31; + move16(); + + exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_diff_smooth + exp + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, exp ); + move16(); + } + test(); + IF( ( EQ_16( hDirAC->hConfig->dec_param_estim, TRUE ) && NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) ) + { + scale_sig32( h_dirac_output_synthesis_state->direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->direct_power_factor_q ) ); // Q31 + h_dirac_output_synthesis_state->direct_power_factor_q = Q31; + move16(); + + scale_sig32( h_dirac_output_synthesis_state->diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, h_dirac_output_synthesis_state->diffuse_power_factor_q ) ); // Q31 + h_dirac_output_synthesis_state->diffuse_power_factor_q = Q31; + move16(); + + scale_sig32( h_dirac_output_synthesis_state->direct_responses_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, h_dirac_output_synthesis_state->direct_responses_q ) ); // Q31 + h_dirac_output_synthesis_state->direct_responses_q = Q31; + move16(); + + scale_sig32( h_dirac_output_synthesis_state->direct_responses_square_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, h_dirac_output_synthesis_state->direct_responses_square_q ) ); // Q31 + h_dirac_output_synthesis_state->direct_responses_square_q = Q31; + move16(); + + exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, exp + h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, exp ); + move16(); + exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_dir_smooth+ exp + h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = add( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, exp ); + move16(); + exp = getScaleFactor32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, i_mult( num_channels_dir, hSpatParamRendCom->num_freq_bands ), exp ); // h_dirac_output_synthesis_state->q_cy_auto_diff_smooth+ exp + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = add( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, exp ); + move16(); + } + test(); test(); - test(); - test(); - IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || - EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || - ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order > 0 ) { - outchannels = add( outchannels, 1 ); + ivas_dirac_dec_output_synthesis_process_slot_fx( reference_power_fx, + DirAC_mem.reference_power_q, + p_onset_filter_fx, + azimuth, + elevation, + hSpatParamRendCom->diffuseness_vector_fx[md_idx], + hSpatParamRendCom->q_diffuseness_vector, + hSpatParamRendCom, + hDirACRend, + st_ivas->hCombinedOrientationData->shd_rot_max_order, + p_Rmat_fx, + st_ivas->hVBAPdata, + hDirACRend->hOutSetup, + nchan_transport, + md_idx, + hodirac_flag, + hDirAC->hConfig->dec_param_estim ); + } + ELSE + { + ivas_dirac_dec_output_synthesis_process_slot_fx( reference_power_fx, + DirAC_mem.reference_power_q, + p_onset_filter_fx, + azimuth, + elevation, + hSpatParamRendCom->diffuseness_vector_fx[md_idx], + hSpatParamRendCom->q_diffuseness_vector, + hSpatParamRendCom, + hDirACRend, + 0, + 0, + st_ivas->hVBAPdata, + hDirACRend->hOutSetup, + nchan_transport, + md_idx, + hodirac_flag, + hDirAC->hConfig->dec_param_estim ); } - test(); - IF( ( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) ) + IF( hDirAC->hConfig->dec_param_estim ) { - FOR( ch = 0; ch < outchannels; ch++ ) + Word16 fac; + Flag flag = 0; + move32(); + fac = BASOP_Util_Divide3232_Scale( 1, hSpatParamRendCom->subframe_nbslots[subframe_idx], &exp ); + fac = shl_o( fac, exp, &flag ); + + IF( LT_16( q_diffuseness_vector, hSpatParamRendCom->q_diffuseness_vector ) ) { - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) - { - IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) - { - idx_lfe = add( idx_lfe, 1 ); - } - } + scale_sig32( hSpatParamRendCom->diffuseness_vector_fx[md_idx], hSpatParamRendCom->num_freq_bands, sub( q_diffuseness_vector, hSpatParamRendCom->q_diffuseness_vector ) ); // q_diffuseness_vector + hSpatParamRendCom->q_diffuseness_vector = q_diffuseness_vector; + move16(); + } + ELSE + { + scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( hSpatParamRendCom->q_diffuseness_vector, q_diffuseness_vector ) ); // q_diffuseness_vector + q_diffuseness_vector = hSpatParamRendCom->q_diffuseness_vector; + move16(); } + v_multc_acc_32_16( hSpatParamRendCom->diffuseness_vector_fx[md_idx], fac, diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands ); } - ELSE + + IF( NE_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - FOR( ch = 0; ch < outchannels; ch++ ) + IF( LT_16( q_reference_power_smooth, DirAC_mem.reference_power_q ) ) { - - test(); - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) + Word32 temp; + FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) { + temp = L_shl( reference_power_fx[i], sub( q_reference_power_smooth, DirAC_mem.reference_power_q ) ); test(); - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) + IF( temp == 0 && ( reference_power_fx[i] != 0 ) ) { - Word16 cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); - scale_sig32( st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_state_fx, st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state ) ); // Q11 - st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = Q11; - move16(); + reference_power_fx[i] = 1; + } + ELSE + { + reference_power_fx[i] = temp; } + move32(); } - ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled == 0 ) || NE_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) + DirAC_mem.reference_power_q = q_reference_power_smooth; + move16(); + } + ELSE + { + Word32 temp; + FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) { - scale_sig32( st_ivas->cldfbSynDec[idx_in]->cldfb_state_fx, st_ivas->cldfbSynDec[idx_in]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state ) ); // Q11 - st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = Q11; - move16(); - idx_in = add( idx_in, 1 ); + temp = L_shl( reference_power_smooth_fx[i], sub( DirAC_mem.reference_power_q, q_reference_power_smooth ) ); + test(); + IF( temp == 0 && ( reference_power_smooth_fx[i] != 0 ) ) + { + reference_power_smooth_fx[i] = 1; + } + ELSE + { + reference_power_smooth_fx[i] = temp; + } + move32(); } + q_reference_power_smooth = DirAC_mem.reference_power_q; + move16(); } + v_add_fixed( reference_power_fx, reference_power_smooth_fx, reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands, 1 ); + q_reference_power_smooth = sub( q_reference_power_smooth, 1 ); } - test(); - IF( !hDirACRend->hOutSetup.separateChannelEnabled || NE_32( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + } + + minimum_s( q_proto_direct_buffer, hSpatParamRendCom->subframe_nbslots[subframe_idx], &hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q ); + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + minimum_s( q_proto_diffuse_buffer, hSpatParamRendCom->subframe_nbslots[subframe_idx], &hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q ); + } + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, nchan_transport ) ); + buff_len = i_mult( 2, i_mult( nchan_transport, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + + offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); + buff_len = i_mult( 2, i_mult( hDirACRend->num_outputs_diff, hSpatParamRendCom->num_freq_bands ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q, q_proto_diffuse_buffer[slot_idx] ) ); // proto_diffuse_buffer_f_q + } + ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) + { + offset = i_mult( slot_idx, i_mult( 4, hSpatParamRendCom->num_freq_bands ) ); + buff_len = i_mult( 4, hSpatParamRendCom->num_freq_bands ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + } + ELSE { - Word16 tmp_lfe_idx = 0; - move16(); - FOR( ch = 0; ch < outchannels; ch++ ) + SWITCH( nchan_transport ) { - test(); - IF( ( hDirACRend->hOutSetup.num_lfe > 0 ) && ( EQ_16( hDirACRend->hOutSetup.index_lfe[tmp_lfe_idx], ch ) ) ) - { - IF( LT_16( tmp_lfe_idx, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) + case 11: + case 8: + case 6: + case 4: + offset = i_mult( i_mult( slot_idx, 2 ), i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); + buff_len = i_mult( 2, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->num_outputs_diff ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + BREAK; + case 2: + IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) { - tmp_lfe_idx = add( tmp_lfe_idx, 1 ); + offset = i_mult( i_mult( i_mult( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), 3 ); + buff_len = i_mult( 6, hSpatParamRendCom->num_freq_bands ); } - } + ELSE + { + offset = i_mult( i_mult( i_mult( slot_idx, 2 ), hSpatParamRendCom->num_freq_bands ), 2 ); + buff_len = i_mult( 4, hSpatParamRendCom->num_freq_bands ); + } + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + BREAK; + case 1: + offset = i_mult( slot_idx, i_mult( 2, hSpatParamRendCom->num_freq_bands ) ); + buff_len = i_mult( 2, hSpatParamRendCom->num_freq_bands ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_fx + offset, buff_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, q_proto_direct_buffer[slot_idx] ) ); // proto_direct_buffer_f_q + BREAK; } } + q_proto_direct_buffer[slot_idx] = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + move16(); } - pop_wmops(); - - return; -} -#else -/*------------------------------------------------------------------------- - * ivas_dirac_dec_render_sf() - * - * DirAC decoding renderer process - *------------------------------------------------------------------------*/ - -void ivas_dirac_dec_render_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], - float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] ) -{ - int16_t i, ch, idx_in, idx_lfe; - DIRAC_DEC_HANDLE hDirAC; - DIRAC_REND_HANDLE hDirACRend; - float dirEne; - float surCohEner; - float surCohRatio[CLDFB_NO_CHANNELS_MAX]; - int16_t subframe_idx; - int16_t slot_idx, index_slot; - int16_t hodirac_flag; - float *p_Rmat; - int16_t slot_idx_start, slot_idx_start_cldfb_synth, md_idx; - - /*CLDFB: last output channels reserved to LFT for CICPx*/ - float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_RealBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - int16_t index, num_freq_bands; - - /* local copies of azi, ele, diffuseness */ - int16_t azimuth[CLDFB_NO_CHANNELS_MAX]; - int16_t elevation[CLDFB_NO_CHANNELS_MAX]; - float diffuseness_vector[CLDFB_NO_CHANNELS_MAX]; - - DIRAC_DEC_STACK_MEM DirAC_mem; - float *reference_power, *reference_power_smooth; - float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL; - uint16_t coherence_flag; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - push_wmops( "ivas_dirac_dec_render" ); - - /* Initialize aux buffers */ - hDirAC = st_ivas->hDirAC; - hDirACRend = st_ivas->hDirACRend; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - DirAC_mem = hDirACRend->stack_mem; - - reference_power = DirAC_mem.reference_power; - reference_power_smooth = ( DirAC_mem.reference_power == NULL ) ? NULL : DirAC_mem.reference_power + hSpatParamRendCom->num_freq_bands; - onset_filter = DirAC_mem.onset_filter; - onset_filter_subframe = ( DirAC_mem.onset_filter == NULL ) ? NULL : DirAC_mem.onset_filter + hSpatParamRendCom->num_freq_bands; - - hodirac_flag = ivas_get_hodirac_flag( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - if ( st_ivas->hQMetaData != NULL && st_ivas->ivas_format != SBA_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) - { - coherence_flag = st_ivas->hQMetaData->coherence_flag; - } - else - { - coherence_flag = 0; - } - - - /* Subframe loop */ - slot_idx_start = hSpatParamRendCom->slots_rendered; - slot_idx_start_cldfb_synth = 0; - - subframe_idx = hSpatParamRendCom->subframes_rendered; - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - } - else - { - md_idx = hSpatParamRendCom->render_to_md_map[slot_idx_start]; - } - - /* copy parameters into local buffers*/ - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - mvs2s( hSpatParamRendCom->azimuth[hSpatParamRendCom->render_to_md_map[subframe_idx]], azimuth, hSpatParamRendCom->num_freq_bands ); - mvs2s( hSpatParamRendCom->elevation[hSpatParamRendCom->render_to_md_map[subframe_idx]], elevation, hSpatParamRendCom->num_freq_bands ); - mvr2r( hSpatParamRendCom->diffuseness_vector[hSpatParamRendCom->render_to_md_map[subframe_idx]], diffuseness_vector, hSpatParamRendCom->num_freq_bands ); - } - else - { - set_zero( diffuseness_vector, hSpatParamRendCom->num_freq_bands ); - } + ivas_dirac_dec_output_synthesis_get_interpolator_fx( &hDirACRend->h_output_synthesis_psd_params, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + size = i_mult( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ); + IF( hodirac_flag ) { - set_zero( reference_power_smooth, hSpatParamRendCom->num_freq_bands ); + size_ho = i_mult( size, DIRAC_HO_NUMSECTORS ); } - else + ELSE { - set_zero( onset_filter_subframe, hSpatParamRendCom->num_freq_bands ); + size_ho = size; + move16(); } - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] ) + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - p_Rmat = &st_ivas->hCombinedOrientationData->Rmat[st_ivas->hCombinedOrientationData->subframe_idx][0][0]; - if ( st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth, Q26 ) ) { - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - rotateAziEle_DirAC( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat ); - } + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth ) ); // Q26 + hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth = Q26; + move16(); } - } - else - { - p_Rmat = 0; - } - - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - /* compute response */ - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, Q26 ) ) { - ivas_dirac_dec_compute_power_factors( hSpatParamRendCom->num_freq_bands, - diffuseness_vector, - hDirACRend->h_output_synthesis_psd_params.max_band_decorr, - hDirACRend->h_output_synthesis_psd_state.direct_power_factor, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor ); - - if ( coherence_flag ) - { - for ( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - dirEne = hDirACRend->h_output_synthesis_psd_state.direct_power_factor[i]; - surCohEner = hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor[i] * hSpatParamRendCom->surroundingCoherence[md_idx][i]; - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor[i] -= surCohEner; - hDirACRend->h_output_synthesis_psd_state.direct_power_factor[i] += surCohEner; - - surCohRatio[i] = surCohEner / ( 1e-12f + dirEne + surCohEner ); - } - } - else - { - set_zero( surCohRatio, hSpatParamRendCom->num_freq_bands ); - } + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx, size_ho, sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev ) ); // Q26 } - else + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q, Q31 ) ) { - ivas_dirac_dec_compute_gain_factors( hSpatParamRendCom->num_freq_bands, - hSpatParamRendCom->diffuseness_vector[md_idx], - hDirACRend->h_output_synthesis_psd_params.max_band_decorr, - hDirACRend->h_output_synthesis_psd_state.direct_power_factor, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor ); - - if ( coherence_flag ) - { - for ( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - surCohRatio[i] = hSpatParamRendCom->surroundingCoherence[md_idx][i]; - } - } - else - { - set_zero( surCohRatio, hSpatParamRendCom->num_freq_bands ); - } + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q ) ); // Q31 } - - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 1 ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_q, Q31 ) ) { - ivas_dirac_dec_compute_directional_responses( hSpatParamRendCom, - hDirACRend, - st_ivas->hVBAPdata, - st_ivas->hMasa == NULL ? NULL : st_ivas->hMasa->data.band_mapping, - st_ivas->hMasaIsmData, - azimuth, - elevation, - md_idx, - surCohRatio, - st_ivas->hCombinedOrientationData->shd_rot_max_order, - p_Rmat, - hodirac_flag ); + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_fx, size_ho, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_q ) ); // Q31 } - else + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q, Q31 ) ) { - ivas_dirac_dec_compute_directional_responses( hSpatParamRendCom, - hDirACRend, - st_ivas->hVBAPdata, - st_ivas->hMasa == NULL ? NULL : st_ivas->hMasa->data.band_mapping, - st_ivas->hMasaIsmData, - azimuth, - elevation, - md_idx, - surCohRatio, - 0, - NULL, - hodirac_flag ); + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q ) ); // Q31 } - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && nchan_transport == 2 ) - { - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth, Q26 ) ) { - index_slot = slot_idx_start + slot_idx; - - /* CLDFB Analysis*/ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - cldfbAnalysis_ts_ivas( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ), - Cldfb_RealBuffer_Temp[ch][slot_idx], - Cldfb_ImagBuffer_Temp[ch][slot_idx], - hSpatParamRendCom->num_freq_bands, - st_ivas->cldfbAnaDec[ch] ); - } + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth ) ); // Q26 } - - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev, Q26 ) ) { - ivas_omasa_preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, hSpatParamRendCom->num_freq_bands, subframe_idx ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth_prev_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ) ); // Q26 } - } - - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - index_slot = slot_idx_start + slot_idx; - if ( hDirAC->hConfig->dec_param_estim == TRUE ) + IF( NE_16( q_diffuseness_vector, Q30 ) ) { - md_idx = hSpatParamRendCom->render_to_md_map[index_slot]; + scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( Q30, q_diffuseness_vector ) ); // Q30 } - else + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q, Q26 ) ) { - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 } - if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q, Q26 ) ) { - for ( ch = 0; ch < nchan_transport; ch++ ) - { - mvr2r( pppQMfFrame_ts_re[ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); - mvr2r( pppQMfFrame_ts_im[ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); - } + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, i_mult( hDirACRend->num_outputs_diff, hDirACRend->h_output_synthesis_psd_params.max_band_decorr ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT && nchan_transport == 2 ) + + ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( Cldfb_RealBuffer_fx, + Cldfb_ImagBuffer_fx, + hSpatParamRendCom, + hDirACRend, + nchan_transport, + hSpatParamRendCom->subframe_nbslots[subframe_idx], + p_onset_filter_fx, + diffuseness_vector_fx, + hodirac_flag, + hDirAC->hConfig->dec_param_estim, + &hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, + &hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev ); + + test(); + IF( hDirACRend->hOutSetup.is_loudspeaker_setup && hDirACRend->hoa_decoder != NULL ) { - for ( ch = 0; ch < nchan_transport; ch++ ) + FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) { - mvr2r( Cldfb_RealBuffer_Temp[ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); - mvr2r( Cldfb_ImagBuffer_Temp[ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 + scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 + } } } - else + ELSE { - /* CLDFB Analysis*/ - for ( ch = 0; ch < nchan_transport; ch++ ) + FOR( ch = 0; ch < hDirACRend->num_outputs_dir; ch++ ) { - cldfbAnalysis_ts_ivas( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ), - Cldfb_RealBuffer[ch][0], - Cldfb_ImagBuffer[ch][0], - hSpatParamRendCom->num_freq_bands, - st_ivas->cldfbAnaDec[ch] ); + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 + scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, add( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, sub( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev, 33 ) ) ) ); // Q6 + } } } + } + ELSE + { + /* Determine encoding quality based additional smoothing factor */ + Word32 qualityBasedSmFactor_fx = ONE_IN_Q31; + move32(); + Word16 q_Cldfb = 0; + move16(); - /* CNG in DirAC, extra CLDFB ana for CNA*/ - if ( st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && !( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) ) + IF( st_ivas->hMasa != NULL ) { - Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; - - generate_masking_noise_dirac( st->hFdCngDec->hFdCngCom, - st_ivas->cldfbAnaDec[1], - st_ivas->hTcBuffer->tc[1], - Cldfb_RealBuffer[1][0], - Cldfb_ImagBuffer[1][0], - index_slot, - st->cna_dirac_flag && st->flag_cna, - ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && st->cng_type == FD_CNG && st->cng_sba_flag ); + qualityBasedSmFactor_fx = L_mult( st_ivas->hMasa->data.dir_decode_quality_fx, st_ivas->hMasa->data.dir_decode_quality_fx ); /* (Q15, Q15) -> Q31 */ } - /* LFE synthesis */ - if ( st_ivas->mc_mode == MC_MODE_MCMASA && !hDirACRend->hOutSetup.separateChannelEnabled && !( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && hDirACRend->hOutSetup.num_lfe == 0 ) ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q, Q31 ) ) { - ivas_lfe_synth_with_cldfb( st_ivas->hMasa->hMasaLfeSynth, - Cldfb_RealBuffer, Cldfb_ImagBuffer, - Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS - 1], Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS - 1], - slot_idx, - md_idx, - nchan_transport ); + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_power_factor_q ) ); // Q31 } - - /*-----------------------------------------------------------------* - * protoype signal computation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_q, Q31 ) ) { - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) - { - protoSignalComputation_shd( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f, - reference_power, slot_idx, nchan_transport, - hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - p_Rmat ); - } - else - { - protoSignalComputation_shd( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f, - reference_power, slot_idx, nchan_transport, - hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - 0 ); - } + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_fx, size, sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_q ) ); // Q31 + } + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q, Q31 ) ) + { + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_fx, h_dirac_output_synthesis_state->diff_dir_power_factor_len, sub( Q31, hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor_q ) ); // Q31 } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) + IF( NE_16( q_diffuseness_vector, Q31 ) ) { - protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - 0, slot_idx, hSpatParamRendCom->num_freq_bands, hDirACRend->masa_stereo_type_detect ); + Scale_sig32( diffuseness_vector_fx, hSpatParamRendCom->num_freq_bands, sub( Q31, q_diffuseness_vector ) ); // Q31 } - else + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q, Q31 ) ) { - switch ( nchan_transport ) - { - case 11: - case 8: - case 6: - case 4: - protoSignalComputation4( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - slot_idx, hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - hDirACRend->hoa_decoder, - nchan_transport, - hDirACRend->sba_map_tc ); - break; - case 2: - protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - hDirACRend->hOutSetup.is_loudspeaker_setup, - slot_idx, - hSpatParamRendCom->num_freq_bands, - hDirACRend->masa_stereo_type_detect ); - break; - case 1: - protoSignalComputation1( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - slot_idx, - hDirACRend->num_protos_diff, - hSpatParamRendCom->num_freq_bands ); - break; - default: - return; - } + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.direct_responses_square_fx, i_mult( hDirACRend->num_outputs_dir, hSpatParamRendCom->num_freq_bands ), sub( Q31, hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q ) ); // Q31 } - - /*-----------------------------------------------------------------* - * Compute DirAC parameters at decoder side - *-----------------------------------------------------------------*/ - - if ( hDirAC->hConfig->dec_param_estim == TRUE ) + exp = L_norm_arr( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands ); + scale_sig32( reference_power_smooth_fx, hSpatParamRendCom->num_freq_bands, exp ); // q_reference_power_smooth + exp + q_reference_power_smooth = add( q_reference_power_smooth, exp ); + IF( LT_16( q_reference_power_smooth, hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q ) ) + { + scale_sig32( hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_fx, hSpatParamRendCom->num_freq_bands, sub( q_reference_power_smooth, hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q ) ); // q_reference_power_smooth + hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q = q_reference_power_smooth; + move16(); + } + ELSE { - mvs2s( &hSpatParamRendCom->azimuth[md_idx][hDirAC->hConfig->enc_param_start_band], &azimuth[hDirAC->hConfig->enc_param_start_band], hSpatParamRendCom->num_freq_bands - hDirAC->hConfig->enc_param_start_band ); - mvs2s( &hSpatParamRendCom->elevation[md_idx][hDirAC->hConfig->enc_param_start_band], &elevation[hDirAC->hConfig->enc_param_start_band], hSpatParamRendCom->num_freq_bands - hDirAC->hConfig->enc_param_start_band ); - if ( ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && st_ivas->hCombinedOrientationData->shd_rot_max_order == 0 ) + Word32 temp; + FOR( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) { - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - rotateAziEle_DirAC( azimuth, elevation, num_freq_bands, hSpatParamRendCom->num_freq_bands, p_Rmat ); + temp = L_shl( reference_power_smooth_fx[i], sub( hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q, q_reference_power_smooth ) ); + test(); + IF( temp == 0 && ( reference_power_smooth_fx[i] != 0 ) ) + { + reference_power_smooth_fx[i] = 1; + } + ELSE + { + reference_power_smooth_fx[i] = temp; + } + move32(); } - hDirACRend->index_buffer_intensity = ( hDirACRend->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ - - index = hDirACRend->index_buffer_intensity; - - num_freq_bands = hDirAC->band_grouping[hDirAC->hConfig->enc_param_start_band]; - - computeIntensityVector_dec( Cldfb_RealBuffer, - Cldfb_ImagBuffer, - num_freq_bands, - hDirACRend->buffer_intensity_real[0][index - 1], - hDirACRend->buffer_intensity_real[1][index - 1], - hDirACRend->buffer_intensity_real[2][index - 1] ); - - computeDirectionAngles( hDirACRend->buffer_intensity_real[0][index - 1], - hDirACRend->buffer_intensity_real[1][index - 1], - hDirACRend->buffer_intensity_real[2][index - 1], - num_freq_bands, - azimuth, - elevation ); - - mvr2r( reference_power, &( hDirACRend->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness( hDirACRend->buffer_intensity_real, hDirACRend->buffer_energy, num_freq_bands, hSpatParamRendCom->diffuseness_vector[md_idx] ); + q_reference_power_smooth = hDirACRend->h_output_synthesis_psd_state.reference_power_smooth_prev_q; + move16(); } - - /*-----------------------------------------------------------------* - * frequency domain decorrelation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->proto_signal_decorr_on == 1 ) + IF( hDirACRend->masa_stereo_type_detect != NULL ) { - /* decorrelate prototype frame */ - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + IF( LT_16( hDirACRend->masa_stereo_type_detect->q_subtract_power_y, hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth ) ) { - ivas_dirac_dec_decorr_process( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff + 2 * hSpatParamRendCom->num_freq_bands * min( 4, nchan_transport ), - onset_filter, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); - - v_multc( onset_filter, 0.25f, onset_filter, hSpatParamRendCom->num_freq_bands ); - v_add( onset_filter, onset_filter_subframe, onset_filter_subframe, hSpatParamRendCom->num_freq_bands ); - p_onset_filter = onset_filter_subframe; + hDirACRend->masa_stereo_type_detect->subtract_power_y_smooth_fx = L_shr( hDirACRend->masa_stereo_type_detect->subtract_power_y_smooth_fx, sub( hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth, hDirACRend->masa_stereo_type_detect->q_subtract_power_y ) ); // q_subtract_power_y + move32(); + hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth = hDirACRend->masa_stereo_type_detect->q_subtract_power_y; + move16(); } - else + ELSE { - ivas_dirac_dec_decorr_process( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - hDirACRend->proto_frame_f, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - DirAC_mem.frame_dec_f, - onset_filter, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); - - hDirACRend->proto_frame_dec_f = DirAC_mem.frame_dec_f; - p_onset_filter = onset_filter; + hDirACRend->masa_stereo_type_detect->subtract_power_y_fx = L_shr( hDirACRend->masa_stereo_type_detect->subtract_power_y_fx, sub( hDirACRend->masa_stereo_type_detect->q_subtract_power_y, hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth ) ); // q_subtract_power_y + move32(); + hDirACRend->masa_stereo_type_detect->q_subtract_power_y = hDirACRend->masa_stereo_type_detect->q_subtract_power_y_smooth; + move16(); } } - else + + exp = getScaleFactor32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, proto_power_smooth_len ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, proto_power_smooth_len, exp ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q + exp) + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, exp ); + move16(); + IF( LT_16( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q ) ) + { + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_fx, i_mult( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q ) ); // proto_power_smooth_q + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q; + move16(); + } + ELSE + { + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx, i_mult( hDirACRend->num_protos_dir, hSpatParamRendCom->num_freq_bands ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q ) ); // proto_power_smooth_prev_q + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_prev_q; + move16(); + } + + exp = getScaleFactor32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ) ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), exp ); // Q(hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q + exp) + hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q = add( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, exp ); + move16(); + IF( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx != 0 ) { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + IF( LT_16( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q ) ) { - set_f( onset_filter_subframe, 1.f, hSpatParamRendCom->num_freq_bands ); - p_onset_filter = onset_filter_subframe; + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q ) ); // proto_power_diff_smooth_q + hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q = hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q; + move16(); } - else + ELSE { - /* no frequency domain decorrelation: use prototype frame */ - hDirACRend->proto_frame_dec_f = hDirACRend->proto_frame_f; - p_onset_filter = NULL; + scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_fx, i_mult( hDirACRend->h_output_synthesis_psd_params.max_band_decorr, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q, hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q ) ); // proto_power_diff_smooth_prev_q + hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_q = hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth_prev_q; + move16(); } } - /*-----------------------------------------------------------------* - * output synthesis - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q, Q26 ) ) { - /*Compute diffuse prototypes*/ - ivas_dirac_dec_compute_diffuse_proto( hDirACRend, hSpatParamRendCom->num_freq_bands, slot_idx ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_fx, size, sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q ) ); // Q26 } - - /*Compute PSDs*/ - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] && st_ivas->hCombinedOrientationData->shd_rot_max_order > 0 ) + IF( NE_16( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q, Q26 ) ) { - ivas_dirac_dec_output_synthesis_process_slot( reference_power, - p_onset_filter, - azimuth, - elevation, - hSpatParamRendCom->diffuseness_vector[md_idx], - hSpatParamRendCom, - hDirACRend, - st_ivas->hCombinedOrientationData->shd_rot_max_order, - p_Rmat, - st_ivas->hVBAPdata, - hDirACRend->hOutSetup, - nchan_transport, - md_idx, - hodirac_flag, - hDirAC->hConfig->dec_param_estim ); + scale_sig32( hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_fx, i_mult( hSpatParamRendCom->num_freq_bands, hDirACRend->hOutSetup.nchan_out_woLFE ), sub( Q26, hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q ) ); // Q26 } - else + IF( hDirACRend->proto_signal_decorr_on ) { - ivas_dirac_dec_output_synthesis_process_slot( reference_power, - p_onset_filter, - azimuth, - elevation, - hSpatParamRendCom->diffuseness_vector[md_idx], - hSpatParamRendCom, - hDirACRend, - 0, - 0, - st_ivas->hVBAPdata, - hDirACRend->hOutSetup, - nchan_transport, - md_idx, - hodirac_flag, - hDirAC->hConfig->dec_param_estim ); + Scale_sig32( hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_fx, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_len, sub( hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q, hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q ) ); // proto_direct_buffer_f_q + hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f_q = hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f_q; + move16(); } - if ( hDirAC->hConfig->dec_param_estim ) - { - float fac = 1.0f / (float) hSpatParamRendCom->subframe_nbslots[subframe_idx]; - v_multc_acc( hSpatParamRendCom->diffuseness_vector[md_idx], fac, diffuseness_vector, hSpatParamRendCom->num_freq_bands ); - } + ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( Cldfb_RealBuffer_fx, + Cldfb_ImagBuffer_fx, + hSpatParamRendCom, + hDirACRend, + hSpatParamRendCom->subframe_nbslots[subframe_idx], + diffuseness_vector_fx, + reference_power_smooth_fx, + &q_reference_power_smooth, + qualityBasedSmFactor_fx, + hDirAC->hConfig->enc_param_start_band, + &q_Cldfb ); - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) + Word16 sh = hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q; + move16(); + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = 31; + move16(); + FOR( i = 0; i < proto_power_smooth_len; i++ ) { - v_add( reference_power, reference_power_smooth, reference_power_smooth, hSpatParamRendCom->num_freq_bands ); + IF( hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_fx[i] != 0 ) + { + hDirACRend->h_output_synthesis_psd_state.proto_power_smooth_q = sh; + move16(); + } } - } - - ivas_dirac_dec_output_synthesis_get_interpolator( &hDirACRend->h_output_synthesis_psd_params, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( Cldfb_RealBuffer, - Cldfb_ImagBuffer, - hSpatParamRendCom, - hDirACRend, - nchan_transport, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - p_onset_filter, - diffuseness_vector, - hodirac_flag, - hDirAC->hConfig->dec_param_estim ); - } - else - { - /* Determine encoding quality based additional smoothing factor */ - float qualityBasedSmFactor = 1.0f; - if ( st_ivas->hMasa != NULL ) + FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) { - qualityBasedSmFactor = st_ivas->hMasa->data.dir_decode_quality; - qualityBasedSmFactor *= qualityBasedSmFactor; + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + { + scale_sig32( Cldfb_RealBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, q_Cldfb ) ); // Q6 + scale_sig32( Cldfb_ImagBuffer_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands, sub( Q6, q_Cldfb ) ); // Q6 + } } - - ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( Cldfb_RealBuffer, - Cldfb_ImagBuffer, - hSpatParamRendCom, - hDirACRend, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - diffuseness_vector, - reference_power_smooth, - qualityBasedSmFactor, - hDirAC->hConfig->enc_param_start_band ); } /*-----------------------------------------------------------------* @@ -6173,250 +3583,502 @@ void ivas_dirac_dec_render_sf( *-----------------------------------------------------------------*/ index_slot = slot_idx_start_cldfb_synth; + move16(); - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + test(); + test(); + IF( ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) { /* render objects in combined format onto the CICP19 channels for BINAURAL_ROOM_IR */ - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + test(); + test(); + IF( ( ( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) && EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) ) { - int16_t in_ch; - for ( in_ch = 0; in_ch < st_ivas->nchan_ism; in_ch++ ) + Word16 in_ch; + FOR( in_ch = 0; in_ch < st_ivas->nchan_ism; in_ch++ ) { - int16_t j, k, j2, l; - int16_t num_objects, nchan_out_woLFE, lfe_index; - int16_t az1, el1; - int16_t n_slots_to_render; - int16_t n_samples_to_render; - int16_t interp_offset; - float gain, prev_gain; + Word16 j, k, j2, l; + Word16 num_objects, nchan_out_woLFE, lfe_index; + Word16 az1, el1; + Word16 n_slots_to_render; + Word16 n_samples_to_render; + Word16 interp_offset; + + Word32 gain_fx, prev_gain_fx; num_objects = st_ivas->nchan_ism; + move16(); nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; + move16(); n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; - n_samples_to_render = hSpatParamRendCom->num_freq_bands * n_slots_to_render; + move16(); + n_samples_to_render = imult1616( hSpatParamRendCom->num_freq_bands, n_slots_to_render ); interp_offset = st_ivas->hTcBuffer->n_samples_rendered; + move16(); - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) + test(); + IF( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { - ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); + ivas_jbm_dec_get_adapted_linear_interpolator_fx( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator_fx ); interp_offset = 0; + move16(); } - - for ( i = 0; i < num_objects; i++ ) + FOR( i = 0; i < num_objects; i++ ) { /* Combined rotation: rotate the object positions depending the head and external orientations */ - if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] == 1 ) + test(); + IF( st_ivas->hCombinedOrientationData != NULL && EQ_16( st_ivas->hCombinedOrientationData->enableCombinedOrientation[0], 1 ) ) { - rotateAziEle( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &az1, &el1, st_ivas->hCombinedOrientationData->Rmat[0], st_ivas->hIntSetup.is_planar_setup ); - if ( st_ivas->hEFAPdata != NULL ) + Word16 az_q0 = extract_l( L_shr( st_ivas->hIsmMetaData[i]->azimuth_fx, Q22 ) ); + Word16 el_q0 = extract_l( L_shr( st_ivas->hIsmMetaData[i]->elevation_fx, Q22 ) ); + Word32 az1_32, el1_32; + rotateAziEle_fixed( az_q0, el_q0, &az1_32, &el1_32, st_ivas->hCombinedOrientationData->Rmat_fx[0], st_ivas->hIntSetup.is_planar_setup ); + az1 = extract_h( az1_32 ); + el1 = extract_h( el1_32 ); + + IF( st_ivas->hEFAPdata != NULL ) { - efap_determine_gains( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains[i], az1, el1, EFAP_MODE_EFAP ); + const Word32 azi_fx = L_shl( az1, Q22 ); // Q0 -> Q22 + const Word32 ele_fx = L_shl( el1, Q22 ); // Q0 -> Q22 + efap_determine_gains_fx( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains_fx[i], azi_fx, ele_fx, EFAP_MODE_EFAP ); } } lfe_index = 0; + move16(); for ( j = 0, j2 = 0; j < nchan_out_woLFE; j++, j2++ ) { - if ( ( st_ivas->hIntSetup.num_lfe > 0 ) && ( st_ivas->hIntSetup.index_lfe[lfe_index] == j ) ) + test(); + IF( ( st_ivas->hIntSetup.num_lfe > 0 && ( EQ_16( st_ivas->hIntSetup.index_lfe[lfe_index], j ) ) ) ) { - ( lfe_index < ( st_ivas->hIntSetup.num_lfe - 1 ) ) ? ( lfe_index++, j2++ ) : j2++; + IF( LT_16( lfe_index, sub( st_ivas->hIntSetup.num_lfe, 1 ) ) ) + { + lfe_index = add( lfe_index, 1 ); + j2 = add( j2, 1 ); + } + ELSE + { + j2 = add( j2, 1 ); + } } - - gain = st_ivas->hIsmRendererData->gains[i][j]; - prev_gain = st_ivas->hIsmRendererData->prev_gains[i][j]; - if ( fabsf( gain ) > 0.0f || fabsf( prev_gain ) > 0.0f ) + gain_fx = st_ivas->hIsmRendererData->gains_fx[i][j]; + move32(); + prev_gain_fx = st_ivas->hIsmRendererData->prev_gains_fx[i][j]; + move32(); + test(); + IF( ( L_abs( gain_fx ) > 0 || L_abs( prev_gain_fx ) > 0 ) ) { - float *tc_re, *tc_im; - float *w1, w2; - - w1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; - tc_re = pppQMfFrame_ts_re[nchan_transport + i][0]; - tc_im = pppQMfFrame_ts_im[nchan_transport + i][0]; - - for ( k = 0; k < n_slots_to_render; k++ ) + Word32 *tc_re_fx, *tc_im_fx; + Word16 *w1_fx, w2_fx; + w1_fx = &st_ivas->hIsmRendererData->interpolator_fx[interp_offset]; + tc_re_fx = pppQMfFrame_ts_re_fx[nchan_transport + i][0]; + move32(); + tc_im_fx = pppQMfFrame_ts_im_fx[nchan_transport + i][0]; + move32(); + FOR( k = 0; k < n_slots_to_render; k++ ) { - float g; - - w2 = 1.0f - *w1; - g = ( *w1 * gain + w2 * prev_gain ); - - for ( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ ) + Word32 g_fx; + w2_fx = sub( MAX16B, *w1_fx ); + g_fx = L_add( Mpy_32_16_1( gain_fx, *w1_fx ), Mpy_32_16_1( prev_gain_fx, w2_fx ) ); // Q15 + FOR( l = 0; l < hSpatParamRendCom->num_freq_bands; l++ ) { - Cldfb_RealBuffer[j2][0][k * hSpatParamRendCom->num_freq_bands + l] += g * *( tc_re++ ); - Cldfb_ImagBuffer[j2][0][k * hSpatParamRendCom->num_freq_bands + l] += g * *( tc_im++ ); + Word32 tmp; + tmp = Mpy_32_32( g_fx, *tc_re_fx ); + Cldfb_RealBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l] = L_add( Cldfb_RealBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l], tmp ); + move32(); + tc_re_fx++; + tmp = Mpy_32_32( g_fx, *tc_im_fx ); + Cldfb_ImagBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l] = L_add( Cldfb_ImagBuffer_fx[j2][0][k * hSpatParamRendCom->num_freq_bands + l], tmp ); + move32(); + tc_re_fx++; } - w1 += hSpatParamRendCom->num_freq_bands; + w1_fx += hSpatParamRendCom->num_freq_bands; } } - /* update here only in case of head rotation */ - if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] == 1 ) + test(); + IF( st_ivas->hCombinedOrientationData != NULL && EQ_16( st_ivas->hCombinedOrientationData->enableCombinedOrientation[0], 1 ) ) { - st_ivas->hIsmRendererData->prev_gains[i][j] = gain; + st_ivas->hIsmRendererData->prev_gains_fx[i][j] = gain_fx; + move32(); } } } } } - /* Perform binaural rendering */ - ivas_binRenderer( st_ivas->hBinRenderer, + Word16 input_q; + input_q = Q6; + move16(); + + ivas_binRenderer_fx( st_ivas->hBinRenderer, + st_ivas->hCombinedOrientationData, + hSpatParamRendCom->subframe_nbslots[subframe_idx], + Cldfb_RealBuffer_Binaural_fx, Cldfb_ImagBuffer_Binaural_fx, + Cldfb_RealBuffer_fx, Cldfb_ImagBuffer_fx, &input_q ); - st_ivas->hCombinedOrientationData, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + Scale_sig32( Cldfb_RealBuffer_Binaural_fx[0][0], i_mult( BINAURAL_CHANNELS, i_mult( MAX_PARAM_SPATIAL_SUBFRAMES, CLDFB_NO_CHANNELS_MAX ) ), sub( Q6, input_q ) ); // Q6 + Scale_sig32( Cldfb_ImagBuffer_Binaural_fx[0][0], i_mult( BINAURAL_CHANNELS, i_mult( MAX_PARAM_SPATIAL_SUBFRAMES, CLDFB_NO_CHANNELS_MAX ) ), sub( Q6, input_q ) ); // Q6 /* Inverse CLDFB*/ - for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) + FOR( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) { /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word32 *synth_fx = &output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands]; + Word32 *RealBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word32 *ImagBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; + FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + { + RealBuffer_fx[i] = Cldfb_RealBuffer_Binaural_fx[ch][i]; + move32(); + ImagBuffer_fx[i] = Cldfb_ImagBuffer_Binaural_fx[ch][i]; + move32(); + } + + scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[ch]->Q_cldfb_state ) ); // Q6-1 + st_ivas->cldfbSynDec[ch]->Q_cldfb_state = ( Q6 - 1 ); + move16(); + + cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, synth_fx, i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ), st_ivas->cldfbSynDec[ch] ); - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + Word16 no_col = st_ivas->cldfbSynDec[ch]->no_col; + move16(); + Word16 no_channels = st_ivas->cldfbSynDec[ch]->no_channels; + move16(); + Word16 samplesToProcess = i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + move16(); + IF( GT_16( samplesToProcess, -1 ) ) { - RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; - ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; + Word16 tmp, tmp_e; + tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[ch]->no_channels, 1 ) ), st_ivas->cldfbSynDec[ch]->no_channels, &tmp_e ); + tmp = shr( tmp, 15 - tmp_e ); + no_col = s_min( no_col, tmp ); } + Word16 synth_len = imult1616( no_col, no_channels ); - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[ch] ); + scale_sig32( synth_fx, synth_len, ( Q11 - ( Q6 - 1 ) ) ); // Q11 } } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) + ELSE IF( ( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) ) { - for ( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) + FOR( ch = 0; ch < hDirACRend->hOutSetup.nchan_out_woLFE; ch++ ) { - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + FOR( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) { - mvr2r( Cldfb_RealBuffer[ch][slot_idx], pppQMfFrame_ts_re[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); - mvr2r( Cldfb_ImagBuffer[ch][slot_idx], pppQMfFrame_ts_im[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); + Copy32( Cldfb_RealBuffer_fx[ch][slot_idx], pppQMfFrame_ts_re_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); // Q6 + Copy32( Cldfb_ImagBuffer_fx[ch][slot_idx], pppQMfFrame_ts_im_fx[ch][slot_idx], hSpatParamRendCom->num_freq_bands ); // Q6 } } } - else + ELSE { - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t outchannels; + Word32 *RealBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word32 *ImagBuffer_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word16 outchannels; idx_in = 0; + move16(); idx_lfe = 0; + move16(); - outchannels = hDirACRend->hOutSetup.nchan_out_woLFE + hDirACRend->hOutSetup.num_lfe; - if ( hDirACRend->hOutSetup.separateChannelEnabled && ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1 || - hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1 || - hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1_2 || - hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_5_1_4 || - hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_7_1_4 || - ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); + + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || + ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) { - outchannels++; + outchannels = add( outchannels, 1 ); } - if ( hDirACRend->hOutSetup.separateChannelEnabled && hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + test(); + IF( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - float tmp_separated[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - float tmp_lfe[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - const int16_t subframe_start_sample = index_slot * hSpatParamRendCom->num_freq_bands; - const int16_t num_samples_subframe = hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx]; + Word32 tmp_separated_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + Word32 tmp_lfe_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + const Word16 subframe_start_sample = imult1616( index_slot, hSpatParamRendCom->num_freq_bands ); + const Word16 num_samples_subframe = imult1616( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); /* Move the separated and the LFE channels to temporary variables as spatial synthesis may overwrite current channels */ - mvr2r( &( output_f[st_ivas->hOutSetup.separateChannelIndex][subframe_start_sample] ), tmp_separated, num_samples_subframe ); - mvr2r( &( output_f[LFE_CHANNEL][subframe_start_sample] ), tmp_lfe, num_samples_subframe ); - - for ( ch = 0; ch < outchannels; ch++ ) + Copy32( &( output_buf_fx[st_ivas->hOutSetup.separateChannelIndex][subframe_start_sample] ), tmp_separated_fx, num_samples_subframe ); + Copy32( &( output_buf_fx[LFE_CHANNEL][subframe_start_sample] ), tmp_lfe_fx, num_samples_subframe ); + FOR( ch = 0; ch < outchannels; ch++ ) { - if ( ( hDirACRend->hOutSetup.num_lfe > 0 ) && ( hDirACRend->hOutSetup.index_lfe[idx_lfe] == ch ) ) + + test(); + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) { /* Move the LFE channel to the correct place */ - mvr2r( tmp_lfe, &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + Copy32( tmp_lfe_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); - if ( idx_lfe < ( hDirACRend->hOutSetup.num_lfe - 1 ) ) + IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) { - idx_lfe++; + idx_lfe = add( idx_lfe, 1 ); } } - else if ( ( st_ivas->hLsSetupCustom->separate_ch_found ) && ( hDirACRend->hOutSetup.separateChannelIndex == ch ) ) + ELSE IF( ( st_ivas->hLsSetupCustom->separate_ch_found ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) { /* Move the separated channel to the correct place. Thus, the separated channel is * combined with the synthesized channels here when there is a matching channel. */ - mvr2r( tmp_separated, &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + Copy32( tmp_separated_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); } - else + ELSE { /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) { - RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; + RealBuffer_fx[i] = Cldfb_RealBuffer_fx[idx_in][i]; + move32(); + ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[idx_in][i]; + move32(); } - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][subframe_start_sample] ), num_samples_subframe, st_ivas->cldfbSynDec[idx_in] ); + cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe, st_ivas->cldfbSynDec[idx_in] ); - if ( !st_ivas->hLsSetupCustom->separate_ch_found ) + IF( !st_ivas->hLsSetupCustom->separate_ch_found ) { /* Pan the separated channel and mix with the synthesized channels. Thus, the separated channel * is combined with the synthesized channels here when there is no matching channel. */ - v_multc_acc( tmp_separated, st_ivas->hLsSetupCustom->separate_ch_gains[idx_in], &( output_f[ch][subframe_start_sample] ), num_samples_subframe ); + v_multc_acc_32_16( tmp_separated_fx, st_ivas->hLsSetupCustom->separate_ch_gains_fx[idx_in], &( output_buf_fx[ch][subframe_start_sample] ), num_samples_subframe ); } - idx_in++; + idx_in = add( idx_in, 1 ); } } } - else + ELSE { - for ( ch = 0; ch < outchannels; ch++ ) + FOR( ch = 0; ch < outchannels; ch++ ) { - if ( ( hDirACRend->hOutSetup.num_lfe > 0 ) && ( hDirACRend->hOutSetup.index_lfe[idx_lfe] == ch ) ) + + test(); + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) { - if ( st_ivas->mc_mode == MC_MODE_MCMASA && !hDirACRend->hOutSetup.separateChannelEnabled ) + test(); + test(); + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) { - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + { + RealBuffer_fx[i] = Cldfb_RealBuffer_fx[MAX_OUTPUT_CHANNELS - 1][i]; + move32(); + ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[MAX_OUTPUT_CHANNELS - 1][i]; + move32(); + } + Word16 cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); + Word16 samplesToProcess = i_mult( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + Word32 *p_out = &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ); + + scale_sig32( st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_state_fx, st_ivas->cldfbSynDec[cldfbSynIdx]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state ) ); // Q6-1 + st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = ( Q6 - 1 ); + move16(); + cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, p_out, samplesToProcess, st_ivas->cldfbSynDec[cldfbSynIdx] ); + + // Calculating length of output + Word16 no_col = st_ivas->cldfbSynDec[cldfbSynIdx]->no_col; + move16(); + Word16 no_channels = st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels; + move16(); + IF( GT_16( samplesToProcess, -1 ) ) { - RealBuffer[i] = Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS - 1][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS - 1][i]; + Word16 tmp, tmp_e; + tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels, 1 ) ), st_ivas->cldfbSynDec[cldfbSynIdx]->no_channels, &tmp_e ); + tmp = shr( tmp, 15 - tmp_e ); + no_col = s_min( no_col, tmp ); } - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[hDirACRend->hOutSetup.nchan_out_woLFE + idx_lfe] ); + Word16 synth_len = imult1616( no_col, no_channels ); + + scale_sig32( p_out, synth_len, ( Q11 - ( Q6 - 1 ) ) ); // Q11 } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA && hDirACRend->hOutSetup.separateChannelEnabled ) + ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && hDirACRend->hOutSetup.separateChannelEnabled ) { /* LFE has been synthesized in the time domain, do nothing. */ } - else + ELSE { - set_zero( &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->num_freq_bands ); + set32_fx( &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), 0, imult1616( hSpatParamRendCom->subframe_nbslots[subframe_idx], hSpatParamRendCom->num_freq_bands ) ); } - - if ( idx_lfe < ( hDirACRend->hOutSetup.num_lfe - 1 ) ) + IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) { - idx_lfe++; + idx_lfe = add( idx_lfe, 1 ); } } - else if ( ( hDirACRend->hOutSetup.separateChannelEnabled ) && ( hDirACRend->hOutSetup.separateChannelIndex == ch ) ) + ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled ) && EQ_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) { /* The separated channel is already set to output_f[hOutSetup.separateChannelIndex]. Thus, the separated * channel is combined with the synthesized channels here. */ } - else + ELSE { /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + Word32 *p_out = &( output_buf_fx[ch][index_slot * hSpatParamRendCom->num_freq_bands] ); + Word16 samplesToProcess, out_len; + FOR( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) + { + RealBuffer_fx[i] = Cldfb_RealBuffer_fx[idx_in][i]; // Q6 + move32(); + ImagBuffer_fx[i] = Cldfb_ImagBuffer_fx[idx_in][i]; // Q6 + move32(); + } + samplesToProcess = imult1616( hSpatParamRendCom->num_freq_bands, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + + // Calculating length of processed output + Word16 no_col = st_ivas->cldfbSynDec[idx_in]->no_col; + move16(); + Word16 no_channels = st_ivas->cldfbSynDec[idx_in]->no_channels; + move16(); + IF( GT_16( samplesToProcess, -1 ) ) + { + Word16 tmp, tmp_e; + tmp = BASOP_Util_Divide1616_Scale( add( samplesToProcess, sub( st_ivas->cldfbSynDec[idx_in]->no_channels, 1 ) ), st_ivas->cldfbSynDec[idx_in]->no_channels, &tmp_e ); + tmp = shr( tmp, 15 - tmp_e ); + no_col = s_min( no_col, tmp ); + } + out_len = imult1616( no_col, no_channels ); + + // Scaling cldfb_state to Q6-1 + scale_sig32( st_ivas->cldfbSynDec[idx_in]->cldfb_state_fx, st_ivas->cldfbSynDec[idx_in]->p_filter_length, sub( ( Q6 - 1 ), st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state ) ); + st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = ( Q6 - 1 ); + move16(); + + cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, p_out, samplesToProcess, st_ivas->cldfbSynDec[idx_in] ); + + // Scaling output from Q6-1 to Q11 + Scale_sig32( p_out, out_len, ( Q11 - ( Q6 - 1 ) ) ); + + idx_in = add( idx_in, 1 ); + } + } + } + } + + hSpatParamRendCom->slots_rendered = add( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); + move16(); + hSpatParamRendCom->subframes_rendered = add( hSpatParamRendCom->subframes_rendered, 1 ); + move16(); + + + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + { + hDirACRend->h_output_synthesis_psd_state.gains_dir_prev_q = hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev; + move16(); + hDirACRend->h_output_synthesis_psd_state.gains_diff_prev_q = hDirACRend->h_output_synthesis_psd_state.q_cy_auto_diff_smooth_prev; + move16(); + } + + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + FOR( i = 0; i < st_ivas->hDecoderConfig->nchan_out; i++ ) + { + scale_sig32( st_ivas->cldfbSynDec[i]->cldfb_state_fx, st_ivas->cldfbSynDec[i]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[i]->Q_cldfb_state ) ); // Q11 + st_ivas->cldfbSynDec[i]->Q_cldfb_state = Q11; + move16(); + } + } + ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) + { + } + ELSE + { + Word16 outchannels; + idx_lfe = 0; + move16(); + idx_in = 0; + move16(); + outchannels = add( hDirACRend->hOutSetup.nchan_out_woLFE, hDirACRend->hOutSetup.num_lfe ); + + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( hDirACRend->hOutSetup.separateChannelEnabled && ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || + EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || + ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hLsSetupCustom->separate_ch_found ) ) ) + { + outchannels = add( outchannels, 1 ); + } + + test(); + IF( ( hDirACRend->hOutSetup.separateChannelEnabled && EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) ) + { + FOR( ch = 0; ch < outchannels; ch++ ) + { + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) + { + IF( LT_16( idx_lfe, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) + { + idx_lfe = add( idx_lfe, 1 ); + } + } + } + } + ELSE + { + FOR( ch = 0; ch < outchannels; ch++ ) + { + + test(); + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 && ( EQ_16( hDirACRend->hOutSetup.index_lfe[idx_lfe], ch ) ) ) ) + { + test(); + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) && !hDirACRend->hOutSetup.separateChannelEnabled ) + { + Word16 cldfbSynIdx = add( hDirACRend->hOutSetup.nchan_out_woLFE, idx_lfe ); + scale_sig32( st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_state_fx, st_ivas->cldfbSynDec[cldfbSynIdx]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state ) ); // Q11 + st_ivas->cldfbSynDec[cldfbSynIdx]->Q_cldfb_state = Q11; + move16(); + } + } + ELSE IF( ( hDirACRend->hOutSetup.separateChannelEnabled == 0 ) || NE_16( hDirACRend->hOutSetup.separateChannelIndex, ch ) ) + { + scale_sig32( st_ivas->cldfbSynDec[idx_in]->cldfb_state_fx, st_ivas->cldfbSynDec[idx_in]->cldfb_size, sub( Q11, st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state ) ); // Q11 + st_ivas->cldfbSynDec[idx_in]->Q_cldfb_state = Q11; + move16(); + idx_in = add( idx_in, 1 ); + } + } + } + test(); + IF( !hDirACRend->hOutSetup.separateChannelEnabled || NE_32( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + { + Word16 tmp_lfe_idx = 0; + move16(); + FOR( ch = 0; ch < outchannels; ch++ ) + { + test(); + IF( ( hDirACRend->hOutSetup.num_lfe > 0 ) && ( EQ_16( hDirACRend->hOutSetup.index_lfe[tmp_lfe_idx], ch ) ) ) + { + IF( LT_16( tmp_lfe_idx, sub( hDirACRend->hOutSetup.num_lfe, 1 ) ) ) { - RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; + tmp_lfe_idx = add( tmp_lfe_idx, 1 ); } - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[idx_in] ); - idx_in++; } } } } - hSpatParamRendCom->slots_rendered += hSpatParamRendCom->subframe_nbslots[subframe_idx]; - hSpatParamRendCom->subframes_rendered++; pop_wmops(); return; } -#endif diff --git a/lib_dec/ivas_dirac_output_synthesis_cov.c b/lib_dec/ivas_dirac_output_synthesis_cov.c index 949612a29..5aa649ecd 100644 --- a/lib_dec/ivas_dirac_output_synthesis_cov.c +++ b/lib_dec/ivas_dirac_output_synthesis_cov.c @@ -48,10 +48,8 @@ #include "ivas_rom_dec.h" #include "wmc_auto.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -60,7 +58,6 @@ * Sets up the state and parameters for the Covariance Synthesis *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_output_synthesis_cov_open_fx( DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: hanlde for the covariance synthesis state */ @@ -203,124 +200,8 @@ ivas_error ivas_dirac_dec_output_synthesis_cov_open_fx( move16(); return IVAS_ERR_OK; } -#else -ivas_error ivas_dirac_dec_output_synthesis_cov_open( - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ - DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: hanlde for the covariance synthesis state */ - const int16_t max_band_decorr, /* i : uppermost frequency band where decorrelation is applied */ - const int16_t interp_length, /* i : length for interpolating the mixing matrices in time slots */ - const int16_t num_param_bands, /* i : number of parameter bands */ - const int16_t num_param_bands_residual, /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ - const int16_t nchan_in, /* i : number of input (transport) channels */ - const int16_t nchan_out, /* i : number of output channels */ - const float *proto_matrix /* i : the prototype (upmix) matrix (only used if mode == 1) */ -) -{ - int16_t idx; - - h_dirac_output_synthesis_params->max_band_decorr = max_band_decorr; - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - /* buffer length and interpolator */ -#ifdef IVAS_FLOAT_FIXED - h_dirac_output_synthesis_params->alpha_synthesis_fx = NULL; -#endif // IVAS_FLOAT_FIXED - h_dirac_output_synthesis_params->alpha_synthesis = NULL; - if ( ( h_dirac_output_synthesis_params->proto_matrix = (float *) malloc( nchan_out * nchan_in * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - - /* cov buffers */ - for ( idx = 0; idx < num_param_bands; idx++ ) - { - - if ( ( h_dirac_output_synthesis_state->cx_old[idx] = (float *) malloc( nchan_in * nchan_in * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - if ( ( h_dirac_output_synthesis_state->cy_old[idx] = (float *) malloc( nchan_out * nchan_out * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - if ( ( h_dirac_output_synthesis_state->mixing_matrix_old[idx] = (float *) malloc( nchan_out * nchan_in * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - set_zero( h_dirac_output_synthesis_state->cx_old[idx], nchan_in * nchan_in ); - set_zero( h_dirac_output_synthesis_state->cy_old[idx], nchan_out * nchan_out ); - set_zero( h_dirac_output_synthesis_state->mixing_matrix_old[idx], nchan_out * nchan_in ); - if ( ( h_dirac_output_synthesis_state->mixing_matrix[idx] = (float *) malloc( nchan_out * nchan_in * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis matrix\n" ) ); - } - set_zero( h_dirac_output_synthesis_state->mixing_matrix[idx], nchan_out * nchan_in ); - } - for ( ; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - h_dirac_output_synthesis_state->cx_old[idx] = NULL; - h_dirac_output_synthesis_state->cy_old[idx] = NULL; - h_dirac_output_synthesis_state->mixing_matrix_old[idx] = NULL; - h_dirac_output_synthesis_state->mixing_matrix[idx] = NULL; - } - for ( idx = 0; idx < num_param_bands_residual; idx++ ) - { - if ( ( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = (float *) malloc( nchan_out * nchan_out * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - set_zero( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx], nchan_out * nchan_out ); - - if ( ( h_dirac_output_synthesis_state->mixing_matrix_res[idx] = (float *) malloc( nchan_out * nchan_out * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis matrix\n" ) ); - } - set_zero( h_dirac_output_synthesis_state->mixing_matrix_res[idx], nchan_out * nchan_out ); - } - for ( ; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = NULL; - h_dirac_output_synthesis_state->mixing_matrix_res[idx] = NULL; - } - - /*-----------------------------------------------------------------* - * prepare processing parameters - *-----------------------------------------------------------------*/ - - /* compute interpolator */ -#ifdef IVAS_FLOAT_FIXED - IF( ( h_dirac_output_synthesis_params->interpolator_fx = (Word16 *) malloc( interp_length * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - for ( idx = 1; idx <= interp_length; ++idx ) - { - h_dirac_output_synthesis_params->interpolator_fx[idx - 1] = div_s( idx, interp_length ); - } -#endif - if ( ( h_dirac_output_synthesis_params->interpolator = (float *) malloc( interp_length * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis covariance\n" ) ); - } - - for ( idx = 1; idx <= interp_length; ++idx ) - { - h_dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) interp_length; - } - - mvr2r( proto_matrix, h_dirac_output_synthesis_params->proto_matrix, nchan_in * nchan_out ); - - return IVAS_ERR_OK; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_dirac_dec_output_synthesis_get_interpolator_fx() * @@ -345,28 +226,6 @@ void ivas_dirac_dec_output_synthesis_get_interpolator_fx( return; } -#else -/*-------------------------------------------------------------------* - * ivas_dirac_dec_output_synthesis_get_interpolator() - * - * - *-------------------------------------------------------------------*/ - -void ivas_dirac_dec_output_synthesis_get_interpolator( - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i/o: handle for the covariance synthesis parameters */ - const uint16_t interp_length /* i : interpolator length */ -) -{ - int16_t idx; - - for ( idx = 1; idx <= interp_length; ++idx ) - { - h_dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) interp_length; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -374,7 +233,6 @@ void ivas_dirac_dec_output_synthesis_get_interpolator( * * initialize the states for the covariance synthesis *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_cov_init_fx( DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: pointer to the state of the covariance synthesis */ const Word16 nchan_in, /* i : number of input (tranport) channels */ @@ -409,36 +267,6 @@ void ivas_dirac_dec_output_synthesis_cov_init_fx( return; } -#else -void ivas_dirac_dec_output_synthesis_cov_init( - DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state, /* i/o: pointer to the state of the covariance synthesis */ - const int16_t nchan_in, /* i : number of input (tranport) channels */ - const int16_t nchan_out, /* i : number of output channels */ - const int16_t n_param_bands, /* i : number of total parameter bands */ - const int16_t n_param_bands_res /* i : number of parameter bands with a residual mixing matrix (i.e. decorrelation */ -) -{ - - int16_t idx; - - /* initialize buffers */ - for ( idx = 0; idx < n_param_bands; idx++ ) - { - set_zero( h_dirac_output_synthesis_state->cx_old[idx], nchan_in * nchan_in ); - set_zero( h_dirac_output_synthesis_state->cy_old[idx], nchan_out * nchan_out ); - set_zero( h_dirac_output_synthesis_state->mixing_matrix_old[idx], nchan_out * nchan_in ); - set_zero( h_dirac_output_synthesis_state->mixing_matrix[idx], nchan_out * nchan_in ); - } - - for ( idx = 0; idx < n_param_bands_res; idx++ ) - { - set_zero( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx], nchan_out * nchan_out ); - set_zero( h_dirac_output_synthesis_state->mixing_matrix_res[idx], nchan_out * nchan_out ); - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -447,7 +275,6 @@ void ivas_dirac_dec_output_synthesis_cov_init( * deallocate dynamic memory in the covariance synthesis state *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_cov_close_fx( DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i : handle for the covariance synthesis parameters */ DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state /* i/o: handle for the covariance synthesis state */ @@ -557,82 +384,6 @@ void ivas_dirac_dec_output_synthesis_cov_close_fx( } return; } -#else -void ivas_dirac_dec_output_synthesis_cov_close( - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params, /* i : handle for the covariance synthesis parameters */ - DIRAC_OUTPUT_SYNTHESIS_COV_STATE *h_dirac_output_synthesis_state /* i/o: handle for the covariance synthesis state */ -) -{ - int16_t idx; - - /*-----------------------------------------------------------------* - * memory deallocation - *-----------------------------------------------------------------*/ - - /* free interpolator */ - if ( h_dirac_output_synthesis_params->interpolator != NULL ) - { - free( h_dirac_output_synthesis_params->interpolator ); - h_dirac_output_synthesis_params->interpolator = NULL; - } - - /* free alpha */ - if ( h_dirac_output_synthesis_params->alpha_synthesis != NULL ) - { - free( h_dirac_output_synthesis_params->alpha_synthesis ); - h_dirac_output_synthesis_params->alpha_synthesis = NULL; - } - - /* free proto_matrix */ - if ( h_dirac_output_synthesis_params->proto_matrix != NULL ) - { - free( h_dirac_output_synthesis_params->proto_matrix ); - h_dirac_output_synthesis_params->proto_matrix = NULL; - } - - /* free cov buffers */ - for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) - { - if ( h_dirac_output_synthesis_state->cx_old[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->cx_old[idx] ); - h_dirac_output_synthesis_state->cx_old[idx] = NULL; - } - - if ( h_dirac_output_synthesis_state->cy_old[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->cy_old[idx] ); - h_dirac_output_synthesis_state->cy_old[idx] = NULL; - } - - if ( h_dirac_output_synthesis_state->mixing_matrix_old[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->mixing_matrix_old[idx] ); - h_dirac_output_synthesis_state->mixing_matrix_old[idx] = NULL; - } - - if ( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] ); - h_dirac_output_synthesis_state->mixing_matrix_res_old[idx] = NULL; - } - - if ( h_dirac_output_synthesis_state->mixing_matrix[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->mixing_matrix[idx] ); - h_dirac_output_synthesis_state->mixing_matrix[idx] = NULL; - } - - if ( h_dirac_output_synthesis_state->mixing_matrix_res[idx] != NULL ) - { - free( h_dirac_output_synthesis_state->mixing_matrix_res[idx] ); - h_dirac_output_synthesis_state->mixing_matrix_res[idx] = NULL; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot() @@ -640,96 +391,6 @@ void ivas_dirac_dec_output_synthesis_cov_close( * collect the multi channel input covariance for one filter bank time slot *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( - float *RealBuffer, /* i : input channel filter bank samples (real part) */ - float *ImagBuffer, /* i : input channel filter bank samples (imaginary part */ - float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (real part) */ - float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* o : accumulated input covariance (imaginary part) */ - PARAM_MC_DEC_HANDLE hParamMC, /* i : handle to Parametric MC state */ - const int16_t nchan_in /* i : number of input channels */ -) -{ - int16_t param_band, band_idx, ch_idx; - int16_t brange[2]; - float real_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; - float imag_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; - float real_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float imag_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - - /* estimate input covariance */ - for ( param_band = 0; param_band < hParamMC->num_param_bands_synth; param_band++ ) - { - /* Already stack here instead of in the process_subframe */ - - /* collect input frame */ - int16_t num_bands; - brange[0] = hParamMC->band_grouping[param_band]; - brange[1] = hParamMC->band_grouping[param_band + 1]; - num_bands = brange[1] - brange[0]; - - for ( band_idx = 0; band_idx < num_bands; band_idx++ ) - { - int16_t band = brange[0] + band_idx; - for ( ch_idx = 0; ch_idx < nchan_in; ch_idx++ ) - { - real_in_buffer[band_idx + num_bands * ch_idx] = RealBuffer[ch_idx * hParamMC->num_freq_bands + band]; - imag_in_buffer[band_idx + num_bands * ch_idx] = ImagBuffer[ch_idx * hParamMC->num_freq_bands + band]; - } - } - -#ifdef IVAS_FLOAT_FIXED - Word32 real_in_buffer_fx[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; - Word32 imag_in_buffer_fx[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * MAX_TRANSPORT_CHANNELS]; - Word32 real_buffer_fx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - Word32 imag_buffer_fx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - Word16 real_exp, imag_exp, input_exp, output_exp; - Word16 shift = find_guarded_bits_fx( num_bands + 1 ); - - f2me_buf( real_in_buffer, real_in_buffer_fx, &real_exp, num_bands * nchan_in ); - f2me_buf( imag_in_buffer, imag_in_buffer_fx, &imag_exp, num_bands * nchan_in ); - - IF( real_exp > imag_exp ) - { - FOR( Word16 i = 0; i < num_bands * nchan_in; ++i ) - { - imag_in_buffer_fx[i] = L_shr( imag_in_buffer_fx[i], real_exp - imag_exp ); - } - input_exp = real_exp; - } - ELSE - { - FOR( Word16 i = 0; i < num_bands * nchan_in; ++i ) - { - real_in_buffer_fx[i] = L_shr( real_in_buffer_fx[i], imag_exp - real_exp ); - } - input_exp = imag_exp; - } - - FOR( Word16 i = 0; i < num_bands * nchan_in; ++i ) - { - real_in_buffer_fx[i] = L_shr( real_in_buffer_fx[i], shift ); - imag_in_buffer_fx[i] = L_shr( imag_in_buffer_fx[i], shift ); - } - - input_exp += shift; - - cmplx_matrix_square_fx( real_in_buffer_fx, imag_in_buffer_fx, num_bands, nchan_in, real_buffer_fx, imag_buffer_fx, input_exp, &output_exp ); - - me2f_buf( real_buffer_fx, output_exp, real_buffer, nchan_in * nchan_in ); - me2f_buf( imag_buffer_fx, output_exp, imag_buffer, nchan_in * nchan_in ); -#else - cmplx_matrix_square( real_in_buffer, imag_in_buffer, num_bands, nchan_in, real_buffer, imag_buffer ); -#endif - - v_add( cx[param_band], real_buffer, cx[param_band], nchan_in * nchan_in ); - - v_add( cx_imag[param_band], imag_buffer, cx_imag[param_band], nchan_in * nchan_in ); - } - - return; -} -#else /*-------------------------------------------------------------------* * ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot() * @@ -847,7 +508,6 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot() @@ -856,123 +516,6 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot_fx( * samples with the covariance synthesis *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( - float *Cldfb_RealBuffer_in, /* i : input channel filter bank samples (real part) */ - float *Cldfb_ImagBuffer_in, /* i : input channel filter bank samples (imaginary part) */ - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (real part) */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : output channel filter bank samples (imaginary part) */ - float *mixing_matrix[], /* i : parameter band wise mixing matrices (direct part) */ - float *mixing_matrix_res[], /* i : parameter band wise mixing matrices (residual part) */ - const uint16_t slot_idx_sfr, /* i : time slot index for the current slot within the current subframe */ - const uint16_t slot_idx_tot, /* i : time slot index for the current slot within the frame */ - const int16_t nX, /* i : number of input channels */ - const int16_t nY, /* i : number of output channels */ - PARAM_MC_DEC_HANDLE hParamMC /* i : handle to the Parametric MC decoder state */ -) -{ - int16_t param_band_idx, band, ch_idx; - float mixing_matrix_smooth[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float mixing_matrix_res_smooth[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float mixing_matrix_buffer[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - int16_t have_residual; - float input_f_real[PARAM_MC_MAX_TRANSPORT_CHANS]; - float input_f_imag[PARAM_MC_MAX_TRANSPORT_CHANS]; - float output_f_real[MAX_CICP_CHANNELS]; - float output_f_imag[MAX_CICP_CHANNELS]; - float diff_f_real[MAX_CICP_CHANNELS]; - float diff_f_imag[MAX_CICP_CHANNELS]; - int16_t brange[2]; - DIRAC_OUTPUT_SYNTHESIS_COV_STATE h_synthesis_state = hParamMC->h_output_synthesis_cov_state; - - set_zero( input_f_real, PARAM_MC_MAX_TRANSPORT_CHANS ); - set_zero( input_f_imag, PARAM_MC_MAX_TRANSPORT_CHANS ); - set_zero( output_f_real, MAX_CICP_CHANNELS ); - set_zero( output_f_imag, MAX_CICP_CHANNELS ); - set_zero( diff_f_real, MAX_CICP_CHANNELS ); - set_zero( diff_f_imag, MAX_CICP_CHANNELS ); - - for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) - { - /* final mixing */ - have_residual = 0; - brange[0] = hParamMC->band_grouping[param_band_idx]; - brange[1] = hParamMC->band_grouping[param_band_idx + 1]; - - if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) - { - have_residual = 1; - } - - /* mixing matrix interpolation*/ - v_multc( mixing_matrix[param_band_idx], hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_smooth, nY * nX ); - v_multc( h_synthesis_state.mixing_matrix_old[param_band_idx], 1.0f - hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_buffer, nY * nX ); - v_add( mixing_matrix_smooth, mixing_matrix_buffer, mixing_matrix_smooth, nY * nX ); - - if ( have_residual ) - { - /* residual mixing matrix interpolation*/ - v_multc( mixing_matrix_res[param_band_idx], hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_res_smooth, nY * nY ); - v_multc( h_synthesis_state.mixing_matrix_res_old[param_band_idx], 1.0f - hParamMC->h_output_synthesis_params.interpolator[slot_idx_tot], mixing_matrix_buffer, nY * nY ); - v_add( mixing_matrix_res_smooth, mixing_matrix_buffer, mixing_matrix_res_smooth, nY * nY ); - } - - for ( band = brange[0]; band < brange[1]; band++ ) - { - assert( band >= 0 ); - - if ( have_residual ) - { - /* collect diffuse prototypes */ - assert( band < hParamMC->h_output_synthesis_params.max_band_decorr ); - for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - diff_f_real[ch_idx] = Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band]; - diff_f_imag[ch_idx] = Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band]; - } - - /* apply residual mixing */ - matrix_product( mixing_matrix_res_smooth, nY, nY, 0, diff_f_real, nY, 1, 0, output_f_real ); - matrix_product( mixing_matrix_res_smooth, nY, nY, 0, diff_f_imag, nY, 1, 0, output_f_imag ); - - for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] = output_f_real[ch_idx]; - Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] = output_f_imag[ch_idx]; - } - } - else - { - for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] = 0.0f; - Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] = 0.0f; - } - } - - /* collect input signals, still in cldfb buffers */ - for ( ch_idx = 0; ch_idx < nX; ch_idx++ ) - { - input_f_real[ch_idx] = Cldfb_RealBuffer_in[ch_idx * hParamMC->num_freq_bands + band]; - input_f_imag[ch_idx] = Cldfb_ImagBuffer_in[ch_idx * hParamMC->num_freq_bands + band]; - } - - /* apply mixing matrix */ - matrix_product( mixing_matrix_smooth, nY, nX, 0, input_f_real, nX, 1, 0, output_f_real ); - matrix_product( mixing_matrix_smooth, nY, nX, 0, input_f_imag, nX, 1, 0, output_f_imag ); - - /* collect output */ - for ( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - Cldfb_RealBuffer[ch_idx][slot_idx_sfr][band] += output_f_real[ch_idx]; - Cldfb_ImagBuffer[ch_idx][slot_idx_sfr][band] += output_f_imag[ch_idx]; - } - } - } - - return; -} -#else void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot_fx( Word32 *Cldfb_RealBuffer_in_fx, /*Q6*/ Word32 *Cldfb_ImagBuffer_in_fx, /*Q6*/ @@ -1091,321 +634,59 @@ void ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot_fx( Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band] = output_f_real_fx[ch_idx]; // Q6 move32(); Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band] = output_f_imag_fx[ch_idx]; // Q6 - move32(); - } - } - ELSE - { - FOR( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band] = 0; - move32(); - Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band] = 0; - move32(); - } - } - - /* collect input signals, still in cldfb buffers */ - FOR( ch_idx = 0; ch_idx < nX; ch_idx++ ) - { - - input_f_real_fx[ch_idx] = Cldfb_RealBuffer_in_fx[ch_idx * hParamMC->num_freq_bands + band]; // Q6 - move32(); - input_f_imag_fx[ch_idx] = Cldfb_ImagBuffer_in_fx[ch_idx * hParamMC->num_freq_bands + band]; // Q6 - move32(); - } - - /* apply mixing matrix */ - - matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_real_fx, 25, nX, 1, 0, output_f_real_fx, &output_f_real_e ); - scale_sig32( output_f_real_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_real_e ) ) ); // Q6 - - - matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_imag_fx, 25, nX, 1, 0, output_f_imag_fx, &output_f_imag_e ); - scale_sig32( output_f_imag_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_imag_e ) ) ); // Q6 - - /* collect output */ - FOR( ch_idx = 0; ch_idx < nY; ch_idx++ ) - { - Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band] = L_add( Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band], output_f_real_fx[ch_idx] ); - move32(); - Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band] = L_add( Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band], output_f_imag_fx[ch_idx] ); - move32(); - } - } - } - - return; -} - -#endif -/*-------------------------------------------------------------------* - * computeMixingMatrices() - * - * compute a mixing matrix using the convariance synthesis approach - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -int16_t computeMixingMatrices( - const int16_t num_inputs, /* i : number of input channels */ - const int16_t num_outputs, /* i : number of output channels */ - const float *Cx, /* i : input channel covariance matrix */ - const float *Cy, /* i : target covariance matrix */ - const float *Q, /* i : prototype matrix (usually a upmix matrix) */ - const int16_t energy_compensation_flag, /* i : flag indicating that the energy compensation should be performed (i.e. no residual mixing matrix will follow) */ - const float reg_Sx, /* i : regularization factor for the input channel singular values */ - const float reg_ghat, /* i : regularization factor for the normalization matrix */ - float *mixing_matrix, /* o : resulting mixing matrix */ - float *Cr /* o : residual covariance matrix */ -) -{ - int16_t i, j; - int16_t out = EXIT_SUCCESS; - int16_t nL, nC; - int16_t lengthCx = num_inputs; - int16_t lengthCy = num_outputs; - float *Cr_p, *Cy_tilde_p; - const float *Cy_p; - float *adj; - float limit; - float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_s_buffer[MAX_OUTPUT_CHANNELS]; - float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float Kx[MAX_TRANSPORT_CHANNELS * MAX_TRANSPORT_CHANNELS]; - float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float Kx_reg_inv[MAX_TRANSPORT_CHANNELS * MAX_TRANSPORT_CHANNELS]; - float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; - float G_hat[MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - - push_wmops( "dirac_cov_mix_mat" ); - - set_zero( svd_s_buffer, MAX_OUTPUT_CHANNELS ); - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - set_zero( svd_in_buffer[i], MAX_OUTPUT_CHANNELS ); - set_zero( svd_u_buffer[i], MAX_OUTPUT_CHANNELS ); - set_zero( svd_v_buffer[i], MAX_OUTPUT_CHANNELS ); - } - - /*-----------------------------------------------------------------* - * Decomposition of Cy - *-----------------------------------------------------------------*/ - - /* Processing the SVD */ - - mat2svdMat( Cy, svd_in_buffer, lengthCy, lengthCy, 0 ); - - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCy, lengthCy ); - - /* Computing Ky */ - for ( i = 0; i < lengthCy; ++i ) - { - for ( j = 0; j < lengthCy; ++j ) - { - Ky[i + j * lengthCy] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); - } - } - - /*-----------------------------------------------------------------* - * Decomposition of Cx - *-----------------------------------------------------------------*/ - - /* Processing the SVD */ - - mat2svdMat( Cx, svd_in_buffer, lengthCx, lengthCx, 0 ); - - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCx, lengthCx ); - - /* Computing Kx */ - for ( i = 0; i < lengthCx; ++i ) - { - for ( j = 0; j < lengthCx; ++j ) - { - Kx[i + j * lengthCx] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); - } - } - - /* Sx = sqrt(Sx) */ - for ( i = 0; i < lengthCx; ++i ) - { - svd_s_buffer[i] = sqrtf( svd_s_buffer[i] ); - } - - /*-----------------------------------------------------------------* - * Regularization of Sx - *-----------------------------------------------------------------*/ - - maximum( svd_s_buffer, lengthCx, &limit ); - limit = limit * reg_Sx + EPSILON; - - for ( i = 0; i < lengthCx; ++i ) - { - svd_s_buffer[i] = ( ( svd_s_buffer[i] > limit ) ? svd_s_buffer[i] : limit ); - } - - limit = 0.0f; - - /*-----------------------------------------------------------------* - * regularized Kx-1 - *-----------------------------------------------------------------*/ - - for ( i = 0; i < lengthCx; ++i ) - { - float reg_fac = ( 1.0f / svd_s_buffer[i] ); - - for ( j = 0; j < lengthCx; ++j ) - { - Kx_reg_inv[i + j * lengthCx] = reg_fac * svd_u_buffer[j][i]; - } - } - - /*-----------------------------------------------------------------* - * normalization matrix G hat - *-----------------------------------------------------------------*/ - - /* Computing Q*Cx*Q' */ - matrix_product( Q, lengthCy, lengthCx, 0, Cx, lengthCx, lengthCx, 0, Q_Cx ); - - matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); - - /* Computing Cy_hat_diag */ - for ( i = 0; i < lengthCy; ++i ) - { - if ( Cy_hat_diag[i] > limit ) - { - limit = Cy_hat_diag[i]; - } - } - - limit = limit * reg_ghat + EPSILON; - - /* Computing G_hat */ - for ( i = 0; i < lengthCy; ++i ) - { - if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ - { - Cy_hat_diag[i] = limit; - } - - G_hat[i] = sqrtf( Cy[i + i * lengthCy] / Cy_hat_diag[i] ); - } - - /*-----------------------------------------------------------------* - * Formulate optimal P - *-----------------------------------------------------------------*/ - - /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ - matrix_product( Kx, lengthCx, lengthCx, 1, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); - - matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); - - matrix_product( mat_mult_buffer2, lengthCx, lengthCy, 0, Ky, lengthCy, lengthCy, 0, mat_mult_buffer1 ); - - if ( lengthCx < lengthCy ) - { - mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 1 ); - nL = lengthCy; - nC = lengthCx; - - svd( svd_in_buffer, svd_v_buffer, svd_s_buffer, svd_u_buffer, nL, nC ); - } - else - { - - mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 0 ); - nL = lengthCx; - nC = lengthCy; - - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, nL, nC ); - } - - /* Actually Processing P */ - - /* can be skipped: lambda is always column-truncated identity matrix, so this operation just - truncates V to num_input_channel columns */ - - - svdMat2mat( svd_v_buffer, mat_mult_buffer1, lengthCy, lengthCx ); - svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); - - matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, - mat_mult_buffer2, lengthCx, lengthCx, 1, - mat_mult_buffer3 ); - - /************************ Formulate M **********************/ - - matrix_product( Ky, lengthCy, lengthCy, 0, mat_mult_buffer3, lengthCy, lengthCx, 0, mat_mult_buffer1 ); - matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, lengthCx, 0, mixing_matrix ); - - /*-----------------------------------------------------------------* - * Formulate Cr - *-----------------------------------------------------------------*/ - - /* Compute Cy_tilde = M*Cx*M' */ - matrix_product( mixing_matrix, lengthCy, lengthCx, 0, Cx, lengthCx, lengthCx, 0, mat_mult_buffer1 ); - matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, mat_mult_buffer2 ); - - /* Compute Cr = Cy - Cy_tilde */ - Cr_p = Cr; - Cy_p = Cy; - Cy_tilde_p = mat_mult_buffer2; - for ( i = 0; i < lengthCy; ++i ) - { - for ( j = 0; j < lengthCy; ++j ) - { - *( Cr_p++ ) = *( Cy_p++ ) - *( Cy_tilde_p++ ); - } - - /* Avoid Meaningless negative main diagonal elements */ - if ( Cr[i + i * lengthCy] < 0.0f ) - { - Cr[i + i * lengthCy] = 0.0f; - } - } - - /*-----------------------------------------------------------------* - * Energy Compensation - *-----------------------------------------------------------------*/ - - if ( energy_compensation_flag == 1 ) - { - adj = svd_s_buffer; - Cy_tilde_p = mat_mult_buffer2; - for ( i = 0; i < lengthCy; ++i ) - { - /* Avoid correction for very small energies, - main diagonal elements of Cy_tilde_p may be negative */ - if ( Cy_tilde_p[i + i * lengthCy] < 0.0f ) - { - adj[i] = 1.0f; + move32(); + } } - else + ELSE { - adj[i] = sqrtf( Cy[i + lengthCy * i] / ( Cy_tilde_p[i + i * lengthCy] + EPSILON ) ); + FOR( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band] = 0; + move32(); + Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band] = 0; + move32(); + } } - if ( adj[i] > 4.0f ) + /* collect input signals, still in cldfb buffers */ + FOR( ch_idx = 0; ch_idx < nX; ch_idx++ ) { - adj[i] = 4.0f; + + input_f_real_fx[ch_idx] = Cldfb_RealBuffer_in_fx[ch_idx * hParamMC->num_freq_bands + band]; // Q6 + move32(); + input_f_imag_fx[ch_idx] = Cldfb_ImagBuffer_in_fx[ch_idx * hParamMC->num_freq_bands + band]; // Q6 + move32(); } - } + /* apply mixing matrix */ + + matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_real_fx, 25, nX, 1, 0, output_f_real_fx, &output_f_real_e ); + scale_sig32( output_f_real_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_real_e ) ) ); // Q6 + + + matrix_product_mant_exp_fx( mixing_matrix_smooth_fx, mixing_matrix_smooth_e, nY, nX, 0, input_f_imag_fx, 25, nX, 1, 0, output_f_imag_fx, &output_f_imag_e ); + scale_sig32( output_f_imag_fx, MAX_CICP_CHANNELS, sub( 6, sub( 31, output_f_imag_e ) ) ); // Q6 - diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); - mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); + /* collect output */ + FOR( ch_idx = 0; ch_idx < nY; ch_idx++ ) + { + Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band] = L_add( Cldfb_RealBuffer_fx[ch_idx][slot_idx_sfr][band], output_f_real_fx[ch_idx] ); + move32(); + Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band] = L_add( Cldfb_ImagBuffer_fx[ch_idx][slot_idx_sfr][band], output_f_imag_fx[ch_idx] ); + move32(); + } + } } - pop_wmops(); - return out; + return; } +/*-------------------------------------------------------------------* + * computeMixingMatrices() + * + * compute a mixing matrix using the convariance synthesis approach + *-------------------------------------------------------------------*/ -#else Word16 computeMixingMatrices_fx( const Word16 num_inputs, /* i : number of input channels */ const Word16 num_outputs, /* i : number of output channels */ @@ -1937,7 +1218,6 @@ Word16 computeMixingMatrices_fx( return out; } -#endif /*-------------------------------------------------------------------* * computeMixingMatricesResidual() @@ -1945,200 +1225,6 @@ Word16 computeMixingMatrices_fx( * compute a residual mixing matrix using the covariance synthesis approach *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t computeMixingMatricesResidual( - const int16_t num_outputs, /* i : number of output channels */ - const float *Cx, /* i : vector containing the diagonal diffuse prototype covariance */ - const float *Cy, /* i : matrix containing the missing cov (Cr from computeMixingMatrices()) */ - const float reg_Sx, /* i : regularization factor for the input channel singular values */ - const float reg_ghat, /* i : regularization factor for the normalization matrix */ - float *mixing_matrix /* o : resulting residual mixing matrix */ -) -{ - int16_t i, j; - int16_t out = EXIT_SUCCESS; - int16_t lengthCx = num_outputs; - int16_t lengthCy = num_outputs; - float *adj; - float limit; - float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_s_buffer[MAX_OUTPUT_CHANNELS]; - float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float Kx[MAX_OUTPUT_CHANNELS]; - float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float Kx_reg_inv[MAX_OUTPUT_CHANNELS]; - float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; - float G_hat[MAX_OUTPUT_CHANNELS]; - float Cy_tilde[MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - - push_wmops( "dirac_cov_mix_mat_r" ); - - /*-----------------------------------------------------------------* - * Decomposition of Cy - *-----------------------------------------------------------------*/ - - /* Processing the SVD */ - - /* linear array to svd buffer */ - mat2svdMat( Cy, svd_in_buffer, lengthCy, lengthCy, 0 ); - - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCy, lengthCy ); - - /* Computing Ky */ - for ( i = 0; i < lengthCy; ++i ) - { - for ( j = 0; j < lengthCy; ++j ) - { - Ky[i + j * lengthCy] = svd_u_buffer[i][j] * sqrtf( svd_s_buffer[j] ); - } - } - - /*-----------------------------------------------------------------* - * Decomposition of Cx - *-----------------------------------------------------------------*/ - - /* Processing the SVD of Cx*/ - /* Cx is a diagonal matrix, so SVD would lead to the sorted diagonal as S and u - * would be just indicating the sorting index, so go straight to Kx as the - * square root of the diagonal of Cx */ - - /* Computing Kx */ - for ( i = 0; i < lengthCx; ++i ) - { - Kx[i] = sqrtf( Cx[i] ); - } - - /*-----------------------------------------------------------------* - * Regularization of Sx - *-----------------------------------------------------------------*/ - - maximum( Kx, lengthCx, &limit ); - limit = limit * reg_Sx + EPSILON; - - for ( i = 0; i < lengthCx; ++i ) - { - float reg_fac = ( 1.0f / ( ( Kx[i] > limit ) ? Kx[i] : limit ) ); - Kx_reg_inv[i] = reg_fac; - } - - limit = 0.0f; - - /*-----------------------------------------------------------------* - * regularized Kx-1 - *-----------------------------------------------------------------*/ - - /*-----------------------------------------------------------------* - * normalization matrix G hat - *-----------------------------------------------------------------*/ - - /* Computing Cy_hat_diag */ - mvr2r( Cx, Cy_hat_diag, num_outputs ); - - for ( i = 0; i < lengthCy; ++i ) - { - if ( Cy_hat_diag[i] > limit ) - { - limit = Cy_hat_diag[i]; - } - } - - limit = limit * reg_ghat + EPSILON; - - /* Computing G_hat */ - for ( i = 0; i < lengthCy; ++i ) - { - if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ - { - Cy_hat_diag[i] = limit; - } - G_hat[i] = sqrtf( Cy[i + i * lengthCy] / Cy_hat_diag[i] ); - } - - /*-----------------------------------------------------------------* - * Formulate optimal P - *-----------------------------------------------------------------*/ - - for ( i = 0; i < num_outputs; i++ ) - { - Kx[i] *= G_hat[i]; - } - - for ( i = 0; i < num_outputs; i++ ) - { - float fac = Kx[i]; - - for ( j = 0; j < num_outputs; j++ ) - { - mat_mult_buffer1[i + j * num_outputs] = Ky[i + j * num_outputs] * fac; - } - } - - mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, lengthCy, 0 ); - - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, lengthCx, lengthCy ); - - /* Actually Processing P */ - - svdMat2mat( svd_v_buffer, mat_mult_buffer1, lengthCy, lengthCx ); - svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); - - matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, - mat_mult_buffer2, lengthCx, lengthCx, 1, - mat_mult_buffer3 ); - - /*-----------------------------------------------------------------* - * Formulate M - *-----------------------------------------------------------------*/ - - matrix_product( Ky, lengthCy, lengthCy, 0, mat_mult_buffer3, lengthCy, lengthCx, 0, mat_mult_buffer1 ); - - for ( i = 0; i < num_outputs; i++ ) - { - float fac = Kx_reg_inv[i]; - - for ( j = 0; j < num_outputs; j++ ) - { - mixing_matrix[j + i * num_outputs] = mat_mult_buffer1[j + i * num_outputs] * fac; - } - } - - /*-----------------------------------------------------------------* - * Formulate Cr - *-----------------------------------------------------------------*/ - - /* Compute Cy_tilde = M*Cx*M' */ - matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx, lengthCx, mat_mult_buffer1 ); - matrix_product_diag( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, Cy_tilde ); - - /*-----------------------------------------------------------------* - * Energy Compensation - *-----------------------------------------------------------------*/ - - adj = svd_s_buffer; - - for ( i = 0; i < lengthCy; ++i ) - { - adj[i] = sqrtf( Cy[i + lengthCy * i] / ( Cy_tilde[i] + EPSILON ) ); - if ( adj[i] > 4.0f ) - { - adj[i] = 4.0f; - } - } - - diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); - - mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); - - pop_wmops(); - - return out; -} - -#else Word16 computeMixingMatricesResidual_fx( const Word32 num_outputs, /* i : number of output channels */ const Word32 *Cx_fx, /* i : vector containing the diagonal diffuse prototype covariance Q(31-Cx_e) */ @@ -2554,7 +1640,6 @@ Word16 computeMixingMatricesResidual_fx( return out; } -#endif /*-------------------------------------------------------------------* @@ -2562,7 +1647,6 @@ Word16 computeMixingMatricesResidual_fx( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 computeMixingMatricesISM_fx( const Word16 num_inputs, const Word16 num_responses, @@ -2945,180 +2029,3 @@ Word16 computeMixingMatricesISM_fx( return out; } -#else -int16_t computeMixingMatricesISM( - const int16_t num_inputs, - const int16_t num_responses, - const int16_t num_outputs, - const float *responses, - const float *ener, - const float *Cx_diag, - const float *Cy_diag, - const float *Q, - const int16_t energy_compensation_flag, - const float reg_Sx, - const float reg_ghat, - float *mixing_matrix ) -{ - int16_t i, out; - int16_t lengthCx, lengthCy; - float *Cy_tilde_p; - float *adj; - float limit; - float svd_in_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_u_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float svd_s_buffer[MAX_OUTPUT_CHANNELS]; - float svd_v_buffer[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; - float Kx[MAX_TRANSPORT_CHANNELS]; - float Ky[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float Kx_reg_inv[MAX_TRANSPORT_CHANNELS]; - float Q_Cx[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float Cy_hat_diag[MAX_OUTPUT_CHANNELS]; - float G_hat[MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer1[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer2[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - float mat_mult_buffer3[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - int16_t nL, nC; - - push_wmops( "dirac_cov_mix_mat" ); - - out = EXIT_SUCCESS; - lengthCx = num_inputs; - lengthCy = num_outputs; - - set_zero( svd_s_buffer, MAX_OUTPUT_CHANNELS ); - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - set_zero( svd_in_buffer[i], MAX_OUTPUT_CHANNELS ); - set_zero( svd_u_buffer[i], MAX_OUTPUT_CHANNELS ); - set_zero( svd_v_buffer[i], MAX_OUTPUT_CHANNELS ); - } - - /* Decomposition of Cy = Ky*Ky' */ - /* Ky = responses*diag(ener) */ - matrix_diag_product( responses, lengthCy, num_responses, 0, ener, num_responses, Ky ); - - /* Decomposition of Cx -> Computing Kx */ - v_sqrt( Cx_diag, Kx, lengthCx ); - - /* Regularization of Sx */ - maximum( Kx, lengthCx, &limit ); - limit = limit * reg_Sx + EPSILON; - - for ( i = 0; i < lengthCx; ++i ) - { - svd_s_buffer[i] = ( ( Kx[i] > limit ) ? Kx[i] : limit ); - } - - limit = 0.0f; - - /* regularized Kx-1 */ - - for ( i = 0; i < lengthCx; ++i ) - { - float reg_fac = ( 1.0f / svd_s_buffer[i] ); - Kx_reg_inv[i] = reg_fac; - } - - /************************ normalization matrix G hat **********************/ - - /* Computing Q*Cx*Q' */ - matrix_diag_product( Q, lengthCy, lengthCx, 0, Cx_diag, lengthCx, Q_Cx ); - matrix_product_diag( Q_Cx, lengthCy, lengthCx, 0, Q, lengthCy, lengthCx, 1, Cy_hat_diag ); - - /* Computing Cy_hat_diag */ - for ( i = 0; i < lengthCy; ++i ) - { - if ( Cy_hat_diag[i] > limit ) - { - limit = Cy_hat_diag[i]; - } - } - - - limit = limit * reg_ghat + EPSILON; - - /* Computing G_hat */ - for ( i = 0; i < lengthCy; ++i ) - { - if ( limit > Cy_hat_diag[i] ) /* Computing Cy_hat_diag = max(Cy_hat_diag,limit) */ - { - Cy_hat_diag[i] = limit; - } - G_hat[i] = sqrtf( Cy_diag[i] / Cy_hat_diag[i] ); - } - - /************************ Formulate optimal P **********************/ - - /* Computing the input matrix Kx'*Q'*G_hat'*Ky */ - diag_matrix_product( Kx, lengthCx, Q, lengthCy, lengthCx, 1, mat_mult_buffer1 ); - matrix_diag_product( mat_mult_buffer1, lengthCx, lengthCy, 0, G_hat, lengthCy, mat_mult_buffer2 ); - matrix_product( mat_mult_buffer2, lengthCx, lengthCy, 0, Ky, lengthCy, num_responses, 0, mat_mult_buffer1 ); - - if ( lengthCx < num_responses ) - { - mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 1 ); - nL = num_responses; - nC = lengthCx; - svd( svd_in_buffer, svd_v_buffer, svd_s_buffer, svd_u_buffer, nL, nC ); - } - else - { - mat2svdMat( mat_mult_buffer1, svd_in_buffer, lengthCx, num_responses, 0 ); - nL = lengthCx; - nC = num_responses; - svd( svd_in_buffer, svd_u_buffer, svd_s_buffer, svd_v_buffer, nL, nC ); - } - - /* Actually Processing P */ - - /* can be skipped: lambda is always column-truncated identity matrix, so this operation just truncates V to num_input_channel columns */ - svdMat2mat( svd_v_buffer, mat_mult_buffer1, num_responses, lengthCx ); - svdMat2mat( svd_u_buffer, mat_mult_buffer2, lengthCx, lengthCx ); - - matrix_product( mat_mult_buffer1, num_responses, lengthCx, 0, mat_mult_buffer2, lengthCx, lengthCx, 1, mat_mult_buffer3 ); - - /************************ Formulate M **********************/ - - matrix_product( Ky, lengthCy, num_responses, 0, mat_mult_buffer3, num_responses, lengthCx, 0, mat_mult_buffer1 ); - - matrix_diag_product( mat_mult_buffer1, lengthCy, lengthCx, 0, Kx_reg_inv, lengthCx, mixing_matrix ); - - /*********************** Energy Compensation ****************/ - - /* Compute Cy_tilde = M*Cx*M' */ - matrix_diag_product( mixing_matrix, lengthCy, lengthCx, 0, Cx_diag, lengthCx, mat_mult_buffer1 ); - matrix_product( mat_mult_buffer1, lengthCy, lengthCx, 0, mixing_matrix, lengthCy, lengthCx, 1, mat_mult_buffer2 ); - - if ( energy_compensation_flag == 1 ) - { - adj = svd_s_buffer; - Cy_tilde_p = mat_mult_buffer2; - for ( i = 0; i < lengthCy; ++i ) - { - /* Avoid correction for very small energies, main diagonal elements of Cy_tilde_p may be negative */ - if ( Cy_tilde_p[i + i * lengthCy] < 0.0f ) - { - adj[i] = 1.0f; - } - else - { - adj[i] = sqrtf( Cy_diag[i] / ( Cy_tilde_p[i + i * lengthCy] + EPSILON ) ); - } - - if ( adj[i] > 4.0f ) - { - adj[i] = 4.0f; - } - } - - diag_matrix_product( adj, lengthCy, mixing_matrix, lengthCy, lengthCx, 0, mat_mult_buffer3 ); - - mvr2r( mat_mult_buffer3, mixing_matrix, lengthCy * lengthCx ); - } - - pop_wmops(); - - return out; -} -#endif diff --git a/lib_dec/ivas_entropy_decoder.c b/lib_dec/ivas_entropy_decoder.c index 56a2ec358..5f64c1123 100644 --- a/lib_dec/ivas_entropy_decoder.c +++ b/lib_dec/ivas_entropy_decoder.c @@ -39,9 +39,7 @@ #include #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------------------------* diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 1206d0ed1..1075cb682 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -41,21 +41,15 @@ #include #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error ivas_read_format( Decoder_Struct *st_ivas, int16_t *num_bits_read ); -#else static ivas_error ivas_read_format( Decoder_Struct *st_ivas, Word16 *num_bits_read ); -#endif static ivas_error doSanityChecks_IVAS( Decoder_Struct *st_ivas ); @@ -66,7 +60,6 @@ static ivas_error doSanityChecks_IVAS( Decoder_Struct *st_ivas ); * IVAS decoder setup *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dec_setup( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ UWord16 *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ @@ -558,550 +551,152 @@ ivas_error ivas_dec_setup( return error; } -#else -ivas_error ivas_dec_setup( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ - int16_t *data /* o : output synthesis signal */ + + +/*-------------------------------------------------------------------* + * ivas_read_format() + * + * Read IVAS format signaling + *-------------------------------------------------------------------*/ + +static ivas_error ivas_read_format( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + Word16 *num_bits_read /* o : number of IVAS signaling bits read from the bitstream */ ) { - int16_t k, idx, num_bits_read; - int16_t nchan_ism, element_mode_flag; - Decoder_State *st; - int32_t ivas_total_brate; + Word16 k, idx; + Word32 ivas_total_brate; ivas_error error; error = IVAS_ERR_OK; - - num_bits_read = 0; - element_mode_flag = 0; + move32(); ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + move32(); - /*-------------------------------------------------------------------* - * Read IVAS format - *-------------------------------------------------------------------*/ - - ivas_read_format( st_ivas, &num_bits_read ); - - /*-------------------------------------------------------------------* - * Read other signling (ISM/MC mode, number of channels, etc.) - *-------------------------------------------------------------------*/ - - if ( is_DTXrate( ivas_total_brate ) == 0 ) + *num_bits_read = 0; + move16(); + test(); + test(); + IF( !st_ivas->bfi && is_DTXrate( ivas_total_brate ) == 0 ) { - /*-------------------------------------------------------------------* - * Read IVAS format related signaling: - * - in ISM : read number of objects - * - in SBA : read SBA planar flag and SBA order - * - in MASA : read number of TC - * - in MC : read LS setup - *-------------------------------------------------------------------*/ - - if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - element_mode_flag = 1; - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) + /* read IVAS format */ + k = 0; + move16(); + if ( st_ivas->bit_stream[*num_bits_read] ) { - /* read the number of objects */ - st_ivas->nchan_transport = 1; - nchan_ism = 1; - k = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - 1 ); - while ( st_ivas->bit_stream[k] && nchan_ism < MAX_NUM_OBJECTS ) - { - nchan_ism++; - k--; - } - - st_ivas->nchan_ism = nchan_ism; - - if ( ( error = ivas_ism_dec_config( st_ivas, st_ivas->ism_mode, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } + k = 1; + move16(); } - else if ( st_ivas->ivas_format == SBA_FORMAT ) + k = shl( k, 1 ); + ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); + move16(); + if ( st_ivas->bit_stream[*num_bits_read] ) { - /* read Ambisonic (SBA) planar flag */ - st_ivas->sba_planar = st_ivas->bit_stream[num_bits_read]; - num_bits_read += SBA_PLANAR_BITS; - - /* read Ambisonic (SBA) order */ - st_ivas->sba_order = st_ivas->bit_stream[num_bits_read + 1]; - st_ivas->sba_order += 2 * st_ivas->bit_stream[num_bits_read]; - - num_bits_read += SBA_ORDER_BITS; - if ( st_ivas->ini_frame > 0 && ivas_total_brate != st_ivas->last_active_ivas_total_brate && ivas_total_brate > IVAS_SID_5k2 ) - { - if ( ( error = ivas_sba_dec_reconfigure( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* set Ambisonic (SBA) order used for analysis and coding */ - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); - - ivas_sba_config( ivas_total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init ); - } + k = add( k, 1 ); } - else if ( st_ivas->ivas_format == MASA_FORMAT ) + ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); + move16(); + SWITCH( k ) { - /* read number of MASA transport channels */ - if ( st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 1] ) - { - st_ivas->nchan_transport = 2; - element_mode_flag = 1; - } - else - { - st_ivas->nchan_transport = 1; - } + case 0: + st_ivas->ivas_format = STEREO_FORMAT; + move32(); + BREAK; + case 1: + st_ivas->ivas_format = MC_FORMAT; + move32(); + BREAK; + case 2: + st_ivas->ivas_format = ISM_FORMAT; + move32(); - if ( st_ivas->ini_frame > 0 ) - { - /* reconfigure in case a change of operation mode is detected */ - if ( ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) || ( st_ivas->ini_active_frame == 0 ) ) + IF( GE_32( ivas_total_brate, IVAS_24k4 ) ) { - if ( st_ivas->last_ivas_format == MASA_FORMAT ) + IF( st_ivas->bit_stream[*num_bits_read] ) { - if ( st_ivas->ini_active_frame == 0 && ivas_total_brate != FRAME_NO_DATA && ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->nCPE == 1 ) + ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); + move16(); + IF( st_ivas->bit_stream[*num_bits_read] ) { - st_ivas->hCPE[0]->nchan_out = 1; + st_ivas->ivas_format = SBA_ISM_FORMAT; + move32(); } - else + ELSE { - - if ( ( error = ivas_masa_dec_reconfigure( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } + st_ivas->ivas_format = MASA_ISM_FORMAT; + move32(); } } - else - { - if ( ( error = ivas_omasa_dec_config( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } + ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); + move16(); } - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - st_ivas->nchan_transport = 2; /* always 2 MASA transport channels */ - - /* for the DISC mode the number of objects are written at the end of the bitstream, in the MASA metadata */ - st_ivas->nchan_ism = 2 * st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1] + st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 2] + 1; - st_ivas->ism_mode = ivas_omasa_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism ); - - if ( st_ivas->ini_frame > 0 ) - { - /* reconfigure in case a change of operation mode is detected */ - if ( ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) || ( st_ivas->ini_active_frame == 0 ) ) + BREAK; + case 3: + IF( st_ivas->bit_stream[*num_bits_read] ) { - if ( ( error = ivas_omasa_dec_config( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } + st_ivas->ivas_format = MASA_FORMAT; + move32(); } - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - /* the number of objects is written at the end of the bitstream, in the SBA metadata */ - st_ivas->nchan_ism = 2 * st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1] + st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 2] + 1; - - if ( ivas_total_brate < IVAS_24k4 || ivas_total_brate >= IVAS_256k ) - { - /* read Ambisonic (SBA) planar flag */ - st_ivas->sba_planar = st_ivas->bit_stream[num_bits_read]; - num_bits_read += SBA_PLANAR_BITS; - } - - st_ivas->sba_order = st_ivas->bit_stream[num_bits_read + 1]; - st_ivas->sba_order += 2 * st_ivas->bit_stream[num_bits_read]; - num_bits_read += SBA_ORDER_BITS; - - /* read Ambisonic (SBA) order */ - if ( ivas_total_brate < IVAS_256k ) - { - st_ivas->sba_order = 3; - } - - if ( st_ivas->ini_frame > 0 && ivas_total_brate != st_ivas->last_active_ivas_total_brate ) - { - if ( ( error = ivas_sba_dec_reconfigure( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) + ELSE { - return error; - } - } - else - { - /* set Ambisonic (SBA) order used for analysis and coding */ - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); - - ivas_sba_config( ivas_total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init ); + st_ivas->ivas_format = SBA_FORMAT; + move32(); + /* read Ambisonic (SBA) planar flag */ + st_ivas->sba_planar = st_ivas->bit_stream[( *num_bits_read ) + 1]; + move16(); - /*correct number of CPEs for discrete ISM coding*/ - if ( st_ivas->ini_frame > 0 && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - st_ivas->nCPE += ( st_ivas->nchan_ism + 1 ) >> 1; + /* read Ambisonic (SBA) order */ + st_ivas->sba_order = st_ivas->bit_stream[( *num_bits_read ) + 2 + SBA_PLANAR_BITS]; + move16(); + st_ivas->sba_order = add( st_ivas->sba_order, shl( st_ivas->bit_stream[( *num_bits_read ) + 1 + SBA_PLANAR_BITS], 1 ) ); + move16(); + if ( st_ivas->sba_order == 0 ) + { + st_ivas->ivas_format = SBA_ISM_FORMAT; + move32(); + } } - } + ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); + move16(); - if ( ivas_total_brate >= IVAS_256k ) - { - st_ivas->ism_mode = ISM_SBA_MODE_DISC; - } - else - { - st_ivas->ism_mode = ISM_MODE_NONE; - } + BREAK; } - else if ( st_ivas->ivas_format == MC_FORMAT ) + } + ELSE IF( ( st_ivas->bfi == 0 ) && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) + { + /* read IVAS format in SID frame */ + idx = 0; + move16(); + FOR( k = 0; k < SID_FORMAT_NBITS; k++ ) { - /* read MC configuration */ - idx = 0; - for ( k = 0; k < MC_LS_SETUP_BITS; k++ ) - { - if ( st_ivas->bit_stream[num_bits_read + k] ) - { - idx += 1 << ( MC_LS_SETUP_BITS - 1 - k ); - } - } - num_bits_read += MC_LS_SETUP_BITS; - - /* select MC format mode; reconfigure the MC format decoder */ - if ( ( error = ivas_mc_dec_config( st_ivas, idx, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } + idx += st_ivas->bit_stream[k] << ( SID_FORMAT_NBITS - 1 - k ); } - /*-------------------------------------------------------------------* - * Read element mode - *-------------------------------------------------------------------*/ + ( *num_bits_read ) = add( *num_bits_read, SID_FORMAT_NBITS ); + move16(); + st_ivas->sid_format = idx; + move16(); - if ( st_ivas->ini_frame == 0 && element_mode_flag ) - { - /* read stereo technology info */ - if ( ivas_total_brate < MIN_BRATE_MDCT_STEREO ) - { - /* 1 bit */ - if ( st_ivas->bit_stream[num_bits_read] ) - { - st_ivas->element_mode_init = 1 + IVAS_CPE_DFT; - } - else - { - st_ivas->element_mode_init = 0 + IVAS_CPE_DFT; - } - } - else - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - } - } - else if ( ivas_total_brate == IVAS_SID_5k2 ) - { - switch ( st_ivas->sid_format ) + SWITCH( idx ) { case SID_DFT_STEREO: - st_ivas->element_mode_init = IVAS_CPE_DFT; - break; case SID_MDCT_STEREO: - st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; + st_ivas->ivas_format = STEREO_FORMAT; + move32(); + BREAK; case SID_ISM: - st_ivas->element_mode_init = IVAS_SCE; - break; - case SID_MASA_1TC: - st_ivas->element_mode_init = IVAS_SCE; - st_ivas->nchan_transport = 1; - break; - case SID_MASA_2TC: - if ( st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1 - SID_FORMAT_NBITS] == 1 ) - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - else - { - st_ivas->element_mode_init = IVAS_CPE_DFT; - } - st_ivas->nchan_transport = 2; - break; - case SID_SBA_1TC: - st_ivas->element_mode_init = IVAS_SCE; - break; - case SID_SBA_2TC: - st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; - } - - if ( st_ivas->ini_frame > 0 && st_ivas->ivas_format == SBA_FORMAT ) - { - int16_t nchan_transport_old, nchan_transport; - nchan_transport_old = st_ivas->nchan_transport; - nchan_transport = ( st_ivas->sid_format == SID_SBA_2TC ) ? 2 : 1; - - if ( ( nchan_transport_old != nchan_transport ) ) - { - /*Setting the default bitrate for the reconfig function*/ - if ( st_ivas->sid_format == SID_SBA_2TC ) - { - st_ivas->hDecoderConfig->ivas_total_brate = IVAS_48k; - } - else - { - st_ivas->hDecoderConfig->ivas_total_brate = IVAS_24k4; - } - - if ( ( error = ivas_sba_dec_reconfigure( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->last_active_ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate; - } - } - - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - ISM_MODE last_ism_mode = st_ivas->ism_mode; - - /* read the number of objects */ - st_ivas->nchan_transport = 1; - nchan_ism = 1; - k = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - 1 ) - SID_FORMAT_NBITS; - while ( st_ivas->bit_stream[k] && nchan_ism < MAX_NUM_OBJECTS ) - { - nchan_ism++; - k--; - } - k--; - - if ( st_ivas->ini_frame > 0 && nchan_ism != st_ivas->nchan_ism ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); - } - - st_ivas->nchan_ism = nchan_ism; - - /* read ism_mode */ - st_ivas->ism_mode = ISM_MODE_DISC; - if ( nchan_ism > 2 ) - { - k -= nchan_ism; /* SID metadata flags */ - idx = st_ivas->bit_stream[k]; - st_ivas->ism_mode = (ISM_MODE) ( idx + 1 ); - } - - if ( st_ivas->ini_frame == 0 ) - { - last_ism_mode = st_ivas->ism_mode; - } - - if ( ( error = ivas_ism_dec_config( st_ivas, last_ism_mode, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /*-------------------------------------------------------------------* - * Initialize decoder in the first good frame based on IVAS format - * and number of transport channels - *-------------------------------------------------------------------*/ - - if ( st_ivas->ini_frame == 0 && st_ivas->ivas_format != UNDEFINED_FORMAT ) - { - if ( ( error = doSanityChecks_IVAS( st_ivas ) ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( error, "Sanity checks failed" ); - } - - if ( ( error = ivas_init_decoder( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - - /*----------------------------------------------------------------* - * Reset bitstream pointers - *----------------------------------------------------------------*/ - - ivas_set_bitstream_pointers( st_ivas ); - - reset_elements( st_ivas ); - - /* update bitstream buffer pointer -> take into account already read bits */ - if ( ( st_ivas->nSCE > 0 ) || ( st_ivas->nCPE > 0 ) ) - { - st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; - st->next_bit_pos = num_bits_read; - st->total_brate = ACELP_8k00; /* only temporary initialization - this is needed for get_next_indice() in the frame following NO_DATA frame */ - } - - return error; -} - - -#endif - - -/*-------------------------------------------------------------------* - * ivas_read_format() - * - * Read IVAS format signaling - *-------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_read_format( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - Word16 *num_bits_read /* o : number of IVAS signaling bits read from the bitstream */ -) -{ - Word16 k, idx; - Word32 ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - move32(); - - *num_bits_read = 0; - move16(); - test(); - test(); - IF( !st_ivas->bfi && is_DTXrate( ivas_total_brate ) == 0 ) - { - /* read IVAS format */ - k = 0; - move16(); - if ( st_ivas->bit_stream[*num_bits_read] ) - { - k = 1; - move16(); - } - k = shl( k, 1 ); - ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); - move16(); - if ( st_ivas->bit_stream[*num_bits_read] ) - { - k = add( k, 1 ); - } - ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); - move16(); - SWITCH( k ) - { - case 0: - st_ivas->ivas_format = STEREO_FORMAT; - move32(); - BREAK; - case 1: - st_ivas->ivas_format = MC_FORMAT; - move32(); - BREAK; - case 2: - st_ivas->ivas_format = ISM_FORMAT; - move32(); - - IF( GE_32( ivas_total_brate, IVAS_24k4 ) ) - { - IF( st_ivas->bit_stream[*num_bits_read] ) - { - ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); - move16(); - IF( st_ivas->bit_stream[*num_bits_read] ) - { - st_ivas->ivas_format = SBA_ISM_FORMAT; - move32(); - } - ELSE - { - st_ivas->ivas_format = MASA_ISM_FORMAT; - move32(); - } - } - - ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); - move16(); - } - BREAK; - case 3: - IF( st_ivas->bit_stream[*num_bits_read] ) - { - st_ivas->ivas_format = MASA_FORMAT; - move32(); - } - ELSE - { - st_ivas->ivas_format = SBA_FORMAT; - move32(); - /* read Ambisonic (SBA) planar flag */ - st_ivas->sba_planar = st_ivas->bit_stream[( *num_bits_read ) + 1]; - move16(); - - /* read Ambisonic (SBA) order */ - st_ivas->sba_order = st_ivas->bit_stream[( *num_bits_read ) + 2 + SBA_PLANAR_BITS]; - move16(); - st_ivas->sba_order = add( st_ivas->sba_order, shl( st_ivas->bit_stream[( *num_bits_read ) + 1 + SBA_PLANAR_BITS], 1 ) ); - move16(); - if ( st_ivas->sba_order == 0 ) - { - st_ivas->ivas_format = SBA_ISM_FORMAT; - move32(); - } - } - ( *num_bits_read ) = add( ( *num_bits_read ), 1 ); - move16(); - - BREAK; - } - } - ELSE IF( ( st_ivas->bfi == 0 ) && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) - { - /* read IVAS format in SID frame */ - idx = 0; - move16(); - FOR( k = 0; k < SID_FORMAT_NBITS; k++ ) - { - idx += st_ivas->bit_stream[k] << ( SID_FORMAT_NBITS - 1 - k ); - } - - ( *num_bits_read ) = add( *num_bits_read, SID_FORMAT_NBITS ); - move16(); - st_ivas->sid_format = idx; - move16(); - - SWITCH( idx ) - { - case SID_DFT_STEREO: - case SID_MDCT_STEREO: - st_ivas->ivas_format = STEREO_FORMAT; - move32(); - BREAK; - case SID_ISM: - st_ivas->ivas_format = ISM_FORMAT; - move32(); - BREAK; - case SID_MULTICHANNEL: - st_ivas->ivas_format = MC_FORMAT; - move32(); - BREAK; - case SID_SBA_1TC: - st_ivas->ivas_format = SBA_FORMAT; - move32(); + st_ivas->ivas_format = ISM_FORMAT; + move32(); + BREAK; + case SID_MULTICHANNEL: + st_ivas->ivas_format = MC_FORMAT; + move32(); + BREAK; + case SID_SBA_1TC: + st_ivas->ivas_format = SBA_FORMAT; + move32(); st_ivas->element_mode_init = IVAS_SCE; move16(); BREAK; @@ -1159,166 +754,6 @@ static ivas_error ivas_read_format( return error; } -#else -static ivas_error ivas_read_format( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - int16_t *num_bits_read /* o : number of IVAS signaling bits read from the bitstream */ -) -{ - int16_t k, idx; - int32_t ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - *num_bits_read = 0; - - if ( !st_ivas->bfi && is_DTXrate( ivas_total_brate ) == 0 ) - { - /* read IVAS format */ - k = 0; - if ( st_ivas->bit_stream[*num_bits_read] ) - { - k = 1; - } - k <<= 1; - ( *num_bits_read )++; - - if ( st_ivas->bit_stream[*num_bits_read] ) - { - k += 1; - } - ( *num_bits_read )++; - - switch ( k ) - { - case 0: - st_ivas->ivas_format = STEREO_FORMAT; - break; - case 1: - st_ivas->ivas_format = MC_FORMAT; - break; - case 2: - st_ivas->ivas_format = ISM_FORMAT; - - if ( ivas_total_brate >= IVAS_24k4 ) - { - if ( st_ivas->bit_stream[*num_bits_read] ) - { - ( *num_bits_read )++; - if ( st_ivas->bit_stream[*num_bits_read] ) - { - st_ivas->ivas_format = SBA_ISM_FORMAT; - } - else - { - st_ivas->ivas_format = MASA_ISM_FORMAT; - } - } - - ( *num_bits_read )++; - } - break; - case 3: - if ( st_ivas->bit_stream[*num_bits_read] ) - { - st_ivas->ivas_format = MASA_FORMAT; - } - else - { - st_ivas->ivas_format = SBA_FORMAT; - /* read Ambisonic (SBA) planar flag */ - st_ivas->sba_planar = st_ivas->bit_stream[( *num_bits_read ) + 1]; - - /* read Ambisonic (SBA) order */ - st_ivas->sba_order = st_ivas->bit_stream[( *num_bits_read ) + 2 + SBA_PLANAR_BITS]; - st_ivas->sba_order += 2 * st_ivas->bit_stream[( *num_bits_read ) + 1 + SBA_PLANAR_BITS]; - if ( st_ivas->sba_order == 0 ) - { - st_ivas->ivas_format = SBA_ISM_FORMAT; - } - } - ( *num_bits_read )++; - - break; - } - } - else if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - /* read IVAS format in SID frame */ - idx = 0; - for ( k = 0; k < SID_FORMAT_NBITS; k++ ) - { - idx += st_ivas->bit_stream[k] << ( SID_FORMAT_NBITS - 1 - k ); - } - - ( *num_bits_read ) += SID_FORMAT_NBITS; - st_ivas->sid_format = idx; - - switch ( idx ) - { - case SID_DFT_STEREO: - case SID_MDCT_STEREO: - st_ivas->ivas_format = STEREO_FORMAT; - break; - case SID_ISM: - st_ivas->ivas_format = ISM_FORMAT; - - break; - case SID_MULTICHANNEL: - st_ivas->ivas_format = MC_FORMAT; - break; - case SID_SBA_1TC: - st_ivas->ivas_format = SBA_FORMAT; - st_ivas->element_mode_init = IVAS_SCE; - break; - case SID_SBA_2TC: - st_ivas->ivas_format = SBA_FORMAT; - st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; - case SID_MASA_1TC: - st_ivas->ivas_format = MASA_FORMAT; - st_ivas->element_mode_init = IVAS_SCE; - break; - case SID_MASA_2TC: - st_ivas->ivas_format = MASA_FORMAT; - if ( st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1] == 1 ) - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - else - { - st_ivas->element_mode_init = IVAS_CPE_DFT; - } - break; - default: - /* This should actually be impossible, since only 3 bits are read, so if this happens something is broken */ - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Invalid value %c found in SID format field.", st_ivas->sid_format ); - } - - if ( st_ivas->ivas_format == SBA_FORMAT ) - { - if ( st_ivas->sba_analysis_order == 0 ) - { - st_ivas->sba_analysis_order = SBA_FOA_ORDER; - } - } - - /* reset bitstream handle to avoid BER detection after reading the 2400 kbps for ch0 */ - st_ivas->bit_stream += ( *num_bits_read ); - ( *num_bits_read ) = 0; - } - else - { - /* In SID/NO_DATA frames, use the previous frame IVAS format */ - } - - return error; -} - -#endif /*-------------------------------------------------------------------* @@ -1330,7 +765,6 @@ static ivas_error ivas_read_format( /*! r: number of channels to be synthesised */ -#ifdef IVAS_FLOAT_FIXED Word16 getNumChanSynthesis( Decoder_Struct *st_ivas /* i : IVAS decoder structure */ ) @@ -1365,39 +799,6 @@ Word16 getNumChanSynthesis( return n; } -#else -int16_t getNumChanSynthesis( - Decoder_Struct *st_ivas /* i : IVAS decoder structure */ -) -{ - int16_t n; - - n = st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE; - - if ( st_ivas->sba_dirac_stereo_flag ) - { - n = CPE_CHANNELS; - } - else if ( ( st_ivas->hMCT != NULL || st_ivas->ivas_format == SBA_FORMAT ) && st_ivas->ivas_format != SBA_ISM_FORMAT ) - { - n = st_ivas->nchan_transport; - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - n = st_ivas->nchan_transport + st_ivas->nchan_ism; - } - else - { - n = st_ivas->nchan_transport; - } - } - - return n; -} - -#endif /*-------------------------------------------------------------------* * copy_decoder_config() @@ -1405,7 +806,6 @@ int16_t getNumChanSynthesis( * Copy IVAS configuration structure to the CoreCoder state structure *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void copy_decoder_config( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ Decoder_State *st /* o : decoder state structure */ @@ -1431,1748 +831,207 @@ void copy_decoder_config( return; } -#else -void copy_decoder_config( - Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ - Decoder_State *st /* o : decoder state structure */ -) -{ - st->output_Fs = st_ivas->hDecoderConfig->output_Fs; - st->Opt_AMR_WB = st_ivas->hDecoderConfig->Opt_AMR_WB; - st->codec_mode = st_ivas->codec_mode; - st->ini_frame = st_ivas->ini_frame; - - st->bfi = st_ivas->bfi; - - st->writeFECoffset = st_ivas->writeFECoffset; - - st->element_mode = st_ivas->element_mode_init; - - return; -} - -#endif /*-------------------------------------------------------------------* * ivas_init_decoder_front() * * Set decoder parameters to initial values *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_init_decoder_front( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - /*-----------------------------------------------------------------* - * Resets - *-----------------------------------------------------------------*/ - - st_ivas->nSCE = 0; - move16(); - st_ivas->nCPE = 0; - move16(); - st_ivas->nCPE_old = 0; - move16(); - st_ivas->nchan_transport = -1; - move16(); - st_ivas->ism_mode = ISM_MODE_NONE; - move32(); - st_ivas->mc_mode = MC_MODE_NONE; - move32(); - st_ivas->sba_dirac_stereo_flag = 0; - move16(); - - /* HRTF binauralization latency in ns */ - st_ivas->binaural_latency_ns = 0; - move32(); - - /*-------------------------------------------------------------------* - * Allocate and initialize Custom loudspeaker layout handle - *--------------------------------------------------------------------*/ - - IF( st_ivas->hDecoderConfig->Opt_LsCustom ) - { - IF( EQ_32( ( error = ivas_ls_custom_open_fx( &( st_ivas->hLsSetupCustom ) ) ), IVAS_ERR_OK ) ) - { - set_zero_fx( ( st_ivas->hLsSetupCustom )->ls_azimuth_fx, MAX_OUTPUT_CHANNELS ); - set_zero_fx( ( st_ivas->hLsSetupCustom )->ls_elevation_fx, MAX_OUTPUT_CHANNELS ); - } - ELSE - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize Head-Tracking handle - *--------------------------------------------------------------------*/ - - IF( st_ivas->hDecoderConfig->Opt_Headrotation ) - { - IF( NE_32( ( error = ivas_headTrack_open_fx( &( st_ivas->hHeadTrackData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - error = ivas_orient_trk_SetTrackingType_fx( st_ivas->hHeadTrackData->OrientationTracker, st_ivas->hDecoderConfig->orientation_tracking ); - IF( NE_32( ( error ), IVAS_ERR_OK ) ) - { - return error; - } - } - /*-------------------------------------------------------------------* - * Allocate and initialize external orientation handle - *--------------------------------------------------------------------*/ - - IF( st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - IF( NE_32( ( error = ivas_external_orientation_open( &( st_ivas->hExtOrientationData ), st_ivas->hDecoderConfig->render_framesize ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize combined orientation handle - *--------------------------------------------------------------------*/ - test(); - IF( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - IF( NE_32( ( error = ivas_combined_orientation_open( &( st_ivas->hCombinedOrientationData ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->render_framesize ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate HRTF binary handle - *--------------------------------------------------------------------*/ - - IF( st_ivas->hDecoderConfig->Opt_HRTF_binary ) - { - IF( NE_32( ( error = ivas_HRTF_binary_open_fx( &( st_ivas->hHrtfTD ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_HRTF_CRend_binary_open_fx( &( st_ivas->hSetOfHRTF ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_HRTF_fastconv_binary_open_fx( &st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_HRTF_parambin_binary_open_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize Binaural Renderer configuration handle - *--------------------------------------------------------------------*/ - test(); - test(); - IF( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL ) || EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) || EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - IF( NE_32( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_render_config_init_from_rom_fx( &st_ivas->hRenderConfig ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - return error; -} -#else -ivas_error ivas_init_decoder_front( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * Resets - *-----------------------------------------------------------------*/ - - st_ivas->nSCE = 0; - st_ivas->nCPE = 0; - st_ivas->nchan_transport = -1; - - st_ivas->ism_mode = ISM_MODE_NONE; - st_ivas->mc_mode = MC_MODE_NONE; - - st_ivas->sba_dirac_stereo_flag = 0; - - /* HRTF binauralization latency in ns */ - st_ivas->binaural_latency_ns = 0; - - /*-------------------------------------------------------------------* - * Allocate and initialize Custom loudspeaker layout handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_LsCustom ) - { - if ( ( error = ivas_ls_custom_open( &( st_ivas->hLsSetupCustom ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize Head-Tracking handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_Headrotation ) - { - if ( ( error = ivas_headTrack_open( &( st_ivas->hHeadTrackData ) ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = ivas_orient_trk_SetTrackingType( st_ivas->hHeadTrackData->OrientationTracker, st_ivas->hDecoderConfig->orientation_tracking ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize external orientation handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - if ( ( error = ivas_external_orientation_open( &( st_ivas->hExtOrientationData ), st_ivas->hDecoderConfig->render_framesize ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize combined orientation handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - if ( ( error = ivas_combined_orientation_open( &( st_ivas->hCombinedOrientationData ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->render_framesize ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate HRTF binary handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_HRTF_binary ) - { - if ( ( error = ivas_HRTF_binary_open( &( st_ivas->hHrtfTD ) ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = ivas_HRTF_CRend_binary_open( &( st_ivas->hSetOfHRTF ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_HRTF_fastconv_binary_open( &st_ivas->hHrtfFastConv ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_HRTF_parambin_binary_open( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-------------------------------------------------------------------* - * Allocate and initialize Binaural Renderer configuration handle - *--------------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_render_config_init_from_rom( &st_ivas->hRenderConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} - -#endif - - -/*-------------------------------------------------------------------* - * ivas_init_decoder() - * - * Initialize IVAS decoder state structure - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_init_decoder_fx( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - Word16 i, n, k; - Word16 sce_id, cpe_id; - Word16 numCldfbAnalyses, numCldfbSyntheses; - Word16 granularity, n_channels_transport_jbm; - Word32 output_Fs, ivas_total_brate; - Word32 binauralization_delay_ns; - AUDIO_CONFIG output_config; - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - Word32 ism_total_brate; - - error = IVAS_ERR_OK; - move32(); - output_Fs = st_ivas->hDecoderConfig->output_Fs; - move32(); - hDecoderConfig = st_ivas->hDecoderConfig; - output_config = hDecoderConfig->output_config; - ivas_total_brate = hDecoderConfig->ivas_total_brate; - move32(); - hDecoderConfig->last_ivas_total_brate = ivas_total_brate; - move32(); - st_ivas->last_active_ivas_total_brate = ivas_total_brate; - move32(); - /*-----------------------------------------------------------------* - * Set number of output channels for EXTERNAL output config. - *-----------------------------------------------------------------*/ - - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - hDecoderConfig->nchan_out = audioCfg2channels( IVAS_AUDIO_CONFIG_HOA3 ); - move16(); - hDecoderConfig->nchan_out = add( hDecoderConfig->nchan_out, st_ivas->nchan_ism ); - move16(); - } - ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - hDecoderConfig->nchan_out = add( st_ivas->nchan_transport, st_ivas->nchan_ism ); - move16(); - } - ELSE IF( !EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - hDecoderConfig->nchan_out = st_ivas->nchan_transport; - move16(); - } - - st_ivas->hOutSetup.nchan_out_woLFE = hDecoderConfig->nchan_out; - move16(); - } - - /*-----------------------------------------------------------------* - * Set output and intern setup & renderer selection - *-----------------------------------------------------------------*/ - - st_ivas->intern_config = output_config; - move32(); - ivas_output_init( &( st_ivas->hOutSetup ), output_config ); - test(); - IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) ) - { - st_ivas->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; - move16(); - st_ivas->intern_config = IVAS_AUDIO_CONFIG_7_1_4; - move32(); - st_ivas->hOutSetup.output_config = st_ivas->intern_config; - move32(); - st_ivas->hOutSetup.nchan_out_woLFE = audioCfg2channels( st_ivas->intern_config ); - move16(); - } - test(); - IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - st_ivas->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; - move32(); - st_ivas->intern_config = IVAS_AUDIO_CONFIG_HOA3; - move32(); - st_ivas->hOutSetup.output_config = IVAS_AUDIO_CONFIG_HOA3; - move32(); - st_ivas->hOutSetup.nchan_out_woLFE = audioCfg2channels( IVAS_AUDIO_CONFIG_HOA3 ); - move16(); - } - - /* Only initialize transport setup if it is used */ - IF( NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_INVALID ) ) - { - ivas_output_init( &( st_ivas->hTransSetup ), st_ivas->transport_config ); - } - - test(); - IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - - ivas_mcmasa_set_separate_channel_mode_fx( &( st_ivas->hOutSetup.separateChannelEnabled ), &( st_ivas->hOutSetup.separateChannelIndex ), ivas_total_brate ); - } - - ivas_renderer_select( st_ivas ); - - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - IF( EQ_16( ( error = ivas_ls_custom_output_init_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - st_ivas->hOutSetup.ls_azimuth_fx = st_ivas->hLsSetupCustom->ls_azimuth_fx; - move32(); - st_ivas->hOutSetup.ls_elevation_fx = st_ivas->hLsSetupCustom->ls_elevation_fx; - move32(); - st_ivas->hIntSetup.ls_azimuth_fx = st_ivas->hLsSetupCustom->ls_azimuth_fx; - move32(); - st_ivas->hIntSetup.ls_elevation_fx = st_ivas->hLsSetupCustom->ls_elevation_fx; - move32(); - } - ELSE - { - return error; - } - } - - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - - test(); - IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - ivas_mcmasa_set_separate_channel_mode_fx( &( st_ivas->hIntSetup.separateChannelEnabled ), &( st_ivas->hIntSetup.separateChannelIndex ), ivas_total_brate ); - - test(); - IF( EQ_32( st_ivas->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.separateChannelEnabled ) - { - st_ivas->hLsSetupCustom->separate_ch_found = 0; - move16(); - IF( GE_16( st_ivas->hOutSetup.nchan_out_woLFE, MCMASA_MIN_SPEAKERS_SEPARATE_CENTER ) ) - { - /* check for a speaker at (0, 0) if minimum speaker count is available */ - FOR( i = 0; i < st_ivas->hOutSetup.nchan_out_woLFE; i++ ) - { - test(); - IF( ( L_shr( st_ivas->hOutSetup.ls_azimuth_fx[i], Q22 ) == 0 ) && ( L_shr( st_ivas->hOutSetup.ls_elevation_fx[i], Q22 ) == 0 ) ) - { - st_ivas->hIntSetup.separateChannelIndex = i; - move16(); - st_ivas->hLsSetupCustom->separate_ch_found = 1; - move16(); - BREAK; - } - } - } - } - } - - - /*-----------------------------------------------------------------* - * Allocate and initialize SCE/CPE and other handles - *-----------------------------------------------------------------*/ - - IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) - { - st_ivas->nSCE = 1; /* in mono, there is always only one SCE */ - move16(); - st_ivas->nCPE = 0; - move16(); - st_ivas->nCPE_old = 0; - move16(); - st_ivas->nchan_transport = 1; - move16(); - sce_id = 0; - move16(); - - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, STEREO_FORMAT ) ) - { - st_ivas->nchan_transport = CPE_CHANNELS; - move16(); - st_ivas->intern_config = IVAS_AUDIO_CONFIG_STEREO; - move32(); - - st_ivas->nSCE = 0; - move16(); - st_ivas->nCPE = 1; /* in stereo, there is always only one CPE */ - move16(); - st_ivas->nCPE_old = 0; - move16(); - cpe_id = 0; - move16(); - - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < st_ivas->nchan_transport; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - - /* init EFAP for custom LS output and set hTransSetup */ - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hOutSetup.ls_azimuth_fx, st_ivas->hOutSetup.ls_elevation_fx, st_ivas->hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - - ivas_output_init( &( st_ivas->hTransSetup ), IVAS_AUDIO_CONFIG_STEREO ); - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) ) - { - Word32 element_brate_tmp[MAX_NUM_OBJECTS]; - - st_ivas->nSCE = st_ivas->nchan_transport; /* "st_ivas->nchan_transport" is known from ivas_dec_setup */ - move16(); - st_ivas->nCPE = 0; - move16(); - st_ivas->nCPE_old = 0; - move16(); - st_ivas->ism_extmeta_active = -1; - move16(); - st_ivas->ism_extmeta_cnt = 0; - move16(); - IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - st_ivas->nchan_transport = MAX_PARAM_ISM_WAVE; - move16(); - st_ivas->nSCE = MAX_PARAM_ISM_WAVE; - move16(); - - IF( NE_32( ( error = ivas_param_ism_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nSCE, element_brate_tmp ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, element_brate_tmp[sce_id] ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - - st_ivas->hSCE[sce_id]->hCoreCoder[0]->is_ism_format = 1; - move16(); - } - - st_ivas->hISMDTX.sce_id_dtx = 0; - move16(); - - IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed2 = st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed3; - move16(); - } - ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MODE_DISC ) ) - { - FOR( sce_id = 0; sce_id < st_ivas->nSCE; ++sce_id ) - { - st_ivas->hSCE[sce_id]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed2 = add( 2, sce_id ); - move16(); - } - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) ) - { - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_spar_dec_open_fx( st_ivas, 0 ) ), IVAS_ERR_OK ) ) - { - return error; - } -#ifdef MSAN_FIX - set16_fx( st_ivas->hSpar->hFbMixer->cldfb_cross_fade_fx, 0, CLDFB_NO_COL_MAX ); -#endif - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) && st_ivas->hOutSetup.is_loudspeaker_setup ) - { - IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - Word16 hodirac_flag = ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ); - IF( hodirac_flag ) - { - IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, IVAS_MAX_NUM_BANDS, st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - - test(); - test(); - IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; - move16(); - } - ELSE - { - Word16 band_grouping[IVAS_MAX_NUM_BANDS + 1]; - - st_ivas->hSpar->enc_param_start_band = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - move16(); - IF( ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ) ) - { - st_ivas->hSpar->enc_param_start_band = 0; - move16(); - set8_fx( (Word8 *) st_ivas->hQMetaData->twoDirBands, (Word8) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); - st_ivas->hQMetaData->numTwoDirBands = (UWord8) st_ivas->hQMetaData->q_direction[0].cfg.nbands; - move16(); - } - - ivas_dirac_config_bands_fx( band_grouping, IVAS_MAX_NUM_BANDS, extract_l( Mpy_32_32_r( st_ivas->hDecoderConfig->output_Fs, INV_CLDFB_BANDWIDTH_Q31 ) ), - st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); - } - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - move16(); - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, (res_dec) *CPE_CHANNELS ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - /* create CPE element for DFT Stereo like upmix */ - test(); - IF( st_ivas->sba_dirac_stereo_flag && ( st_ivas->nCPE == 0 ) ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); - - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - } - - IF( GT_16( st_ivas->nCPE, 1 ) ) - { - IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /* set CNA/CNG flags */ - ivas_sba_set_cna_cng_flag( st_ivas ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) - { - /* if we start in ISM_MODE_NONE in MASA_ISM, that appears as normal MASA, but we may change to a mode with ISMs */ - st_ivas->ism_extmeta_active = -1; - move16(); - st_ivas->ism_extmeta_cnt = 0; - move16(); - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - /* set CNA/CNG flags */ - ivas_sba_set_cna_cng_flag( st_ivas ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - Word32 temp_brate[MAX_SCE]; - st_ivas->ism_extmeta_active = -1; - move16(); - st_ivas->ism_extmeta_cnt = 0; - move16(); - - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - move16(); - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_spar_dec_open_fx( st_ivas, 0 ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) && st_ivas->hOutSetup.is_loudspeaker_setup ) - { - IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - Word16 hodirac_flag = ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ); - IF( hodirac_flag ) - { - IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, IVAS_MAX_NUM_BANDS, st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - - test(); - test(); - IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; - move16(); - } - ELSE - { - Word16 band_grouping[IVAS_MAX_NUM_BANDS + 1]; - - st_ivas->hSpar->enc_param_start_band = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - move16(); - IF( ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ) ) - { - st_ivas->hSpar->enc_param_start_band = 0; - move16(); - set8_fx( (Word8 *) st_ivas->hQMetaData->twoDirBands, (Word8) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); - st_ivas->hQMetaData->numTwoDirBands = (UWord8) st_ivas->hQMetaData->q_direction[0].cfg.nbands; - move16(); - } - - ivas_dirac_config_bands_fx( band_grouping, IVAS_MAX_NUM_BANDS, extract_l( Mpy_32_32_r( st_ivas->hDecoderConfig->output_Fs, INV_CLDFB_BANDWIDTH_Q31 ) ), - st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); - } - - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - - IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - st_ivas->nCPE_old = st_ivas->nCPE; - move16(); - st_ivas->nCPE = add( st_ivas->nCPE, shr( add( st_ivas->nchan_ism, 1 ), 1 ) ); - move16(); - st_ivas->element_mode_init = IVAS_CPE_MDCT; - move16(); - } - - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - /* create CPE element for DFT Stereo like upmix */ - test(); - IF( st_ivas->sba_dirac_stereo_flag && st_ivas->nCPE == 0 ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - } - - IF( GT_16( st_ivas->nCPE, 1 ) ) - { - IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nchan_ism, temp_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_osba_data_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /* set CNA/CNG flags */ - ivas_sba_set_cna_cng_flag( st_ivas ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - st_ivas->ism_extmeta_active = -1; - move16(); - st_ivas->ism_extmeta_cnt = 0; - move16(); - - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - k = 0; - move16(); - ism_total_brate = 0; - move32(); - - WHILE( ( k < SIZE_IVAS_BRATE_TBL ) && ( ivas_total_brate != ivas_brate_tbl[k] ) ) - { - k = add( k, 1 ); - } - test(); - IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) - { - /* one separated object */ - st_ivas->nSCE = 1; - move16(); - ism_total_brate = sep_object_brate[k - 2][0]; - move32(); - IF( NE_32( ( error = create_sce_dec( st_ivas, 0, ism_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[0]->hCoreCoder[0] ); - - IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, 1, NULL ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - Word32 temp_brate[MAX_SCE]; - st_ivas->nSCE = st_ivas->nchan_ism; /* number of objects */ - move16(); - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - temp_brate[sce_id] = sep_object_brate[k - 2][st_ivas->nSCE - 1]; - move32(); - ism_total_brate = L_add( ism_total_brate, temp_brate[sce_id] ); - - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, temp_brate[sce_id] ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - - IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nchan_ism, temp_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_omasa_data_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( NE_32( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate - ism_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[0]->hCoreCoder[n] ); - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) - { - IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) ) - { - /* init EFAP for custom LS setup */ - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels_fx( ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ) ); - move16(); - st_ivas->nSCE = 0; - move16(); - st_ivas->nCPE = shr( st_ivas->nchan_transport, 1 ); - move16(); - st_ivas->nCPE_old = 0; - move16(); - st_ivas->element_mode_init = IVAS_CPE_MDCT; - move16(); - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, sub( st_ivas->nchan_transport, 1 ), &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) - { - /* init EFAP for custom LS setup */ - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - st_ivas->nSCE = 0; - move16(); - st_ivas->nCPE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS >> 1; - move16(); - st_ivas->nCPE_old = 0; - move16(); - st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; - move16(); - - IF( NE_32( ( error = ivas_mc_paramupmix_dec_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->element_mode_init = IVAS_CPE_MDCT; - move16(); - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, sub( st_ivas->nchan_transport, 1 ), &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) - { - /* init EFAP for custom LS setup */ - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - IF( NE_32( ( error = ivas_param_mc_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hParamMC->proto_matrix_int_e = 0; - move16(); - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); - - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - IF( GT_16( st_ivas->nCPE, 1 ) ) - { - IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - Word32 brate_sce, brate_cpe; - - ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - - { - return error; - } - - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - move16(); - test(); - IF( NE_32( st_ivas->renderer_type, RENDERER_DISABLE ) && NE_32( st_ivas->renderer_type, RENDERER_MCMASA_MONO_STEREO ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - test(); - test(); - IF( EQ_32( st_ivas->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.separateChannelEnabled && !st_ivas->hLsSetupCustom->separate_ch_found ) - { - /* If no speaker matching the separated channel, compute panning gains for the separated channel. */ - IF( st_ivas->hVBAPdata == NULL ) - { - /* Distribute signal to all channels if VBAP is not properly initialized. */ - Word16 inv_sqr, sqr, exp = 15, exp_sqr; - move16(); - IF( EQ_16( st_ivas->hLsSetupCustom->num_spk, 1 ) ) - { - inv_sqr = 32767; // (1.0f in Q15)-1 - move16(); - } - ELSE - { - sqr = Sqrt16( st_ivas->hLsSetupCustom->num_spk, &exp ); - inv_sqr = BASOP_Util_Divide1616_Scale( 32767, sqr, &exp_sqr ); - exp_sqr = sub( exp_sqr, exp ); - IF( ( exp < 0 ) ) - { - inv_sqr = shr( inv_sqr, exp ); // exp_sqr - } - ELSE - { - inv_sqr = shl( inv_sqr, exp ); // exp_sqr - } - } - set16_fx( st_ivas->hLsSetupCustom->separate_ch_gains_fx, inv_sqr, st_ivas->hLsSetupCustom->num_spk ); - } - } - - - ivas_mcmasa_split_brate_fx( st_ivas->hOutSetup.separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); - - FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, brate_sce ) ), IVAS_ERR_OK ) ) - { - return error; - } - - reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); - } - - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; /* element_mode_init was IVAS_SCE for SCE initialization */ - move16(); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, brate_cpe ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); - } - } - - /* create CPE element for DFT Stereo like upmix */ - IF( st_ivas->sba_dirac_stereo_flag ) - { - Word32 res_dec, res_frac; - iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); - IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->hCPE[0]->hCoreCoder[0] = st_ivas->hSCE[0]->hCoreCoder[0]; /* don't allocate unnecessary core coder, simply point to core coder of SCE element */ - st_ivas->hCPE[0]->hCoreCoder[1] = NULL; - } - - /* set CNA/CNG flags */ - test(); - test(); - IF( EQ_16( st_ivas->nchan_transport, 1 ) && ( ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) ) - { - st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; - move16(); - st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag = 1; - move16(); - } - } - } - - - /*-----------------------------------------------------------------* - * Allocate and initialize HP20 filter memories - *-----------------------------------------------------------------*/ - - /* set number of output channels used for synthesis/decoding */ - n = getNumChanSynthesis( st_ivas ); - - IF( n > 0 ) - { - IF( ( st_ivas->mem_hp20_out_fx = (Word32 **) malloc( n * sizeof( Word32 * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - } - ELSE - { - st_ivas->mem_hp20_out_fx = NULL; - } - - FOR( i = 0; i < n; i++ ) - { - IF( ( st_ivas->mem_hp20_out_fx[i] = (Word32 *) malloc( ( L_HP20_MEM + 2 ) * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - set32_fx( st_ivas->mem_hp20_out_fx[i], 0, L_HP20_MEM + 2 ); - } - - /*-------------------------------------------------------------------* - * Allocate and initialize rendering handles - *--------------------------------------------------------------------*/ - test(); - test(); - test(); - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - IF( NE_32( ( error = ivas_binRenderer_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - /* ParamISM is handled separately from other common config */ - ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) && ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) ) - { - IF( NE_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - IF( NE_32( ( error = ivas_dirac_dec_binaural_copy_hrtfs_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( NE_32( ( error = ivas_dirac_dec_init_binaural_data_fx( st_ivas, st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) - { - Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; - Word16 num_src; - IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) - { - return error; - } - Word16 nchan_rend = num_src; - move16(); - test(); - IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ - } - FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) - { - TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; - if ( Src_p->SrcSpatial_p != NULL ) - { - Src_p->SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; - SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - - IF( EQ_32( st_ivas->hIntSetup.output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - IF( NE_32( ( error = ivas_reverb_open_fx( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac_fx, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); - - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - - - IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) - { - IF( NE_32( ( error = ivas_ls_setup_conversion_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MONO_DOWNMIX ) ) - { - IF( NE_32( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) && EQ_32( st_ivas->ivas_format, MC_FORMAT ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) - { - IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth_fx, st_ivas->hIntSetup.ls_elevation_fx, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( NE_32( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, - st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ), - IVAS_ERR_OK ) ) - { - return error; - } - - st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns; - move32(); - - test(); - IF( ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) && ( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) ) - { - granularity = NS2SA_FX2( output_Fs, CLDFB_SLOT_NS ); - - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - - - IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, MC_PARAMUPMIX_MAX_INPUT_CHANS, MC_PARAMUPMIX_MAX_INPUT_CHANS, granularity ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - granularity = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); - - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - - IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - - IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - /* Allocate TD renderer for the objects in DISC mode */ - Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; - Word16 num_src; - IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) - { - return error; - } - Word16 nchan_rend = num_src; - move16(); - test(); - if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ - } - FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) - { - TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; - if ( Src_p->SrcSpatial_p != NULL ) - { - Src_p->SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; - SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - - /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) && ( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) ) - { - /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - test(); - IF( ( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) && - ( EQ_32( st_ivas->ism_mode, ISM_MODE_DISC ) || EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) && - ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || - EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) || - EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || - EQ_32( st_ivas->renderer_type, RENDERER_OSBA_STEREO ) || - EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || - EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || - EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || - EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) || - EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) ) - { - IF( NE_32( ( error = ivas_ism_renderer_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - test(); - test(); - IF( ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - /* Allocate TD renderer for the objects in DISC mode */ - Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; - Word16 num_src; - IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) - { - return error; - } - Word16 nchan_rend = num_src; - move16(); - - test(); - if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ - } - FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) - { - TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; - if ( Src_p->SrcSpatial_p != NULL ) - { - Src_p->SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; - SrcSpatial_p->q_Pos_p = Q31; - move16(); - } - } - } +) +{ + ivas_error error; + error = IVAS_ERR_OK; + move32(); /*-----------------------------------------------------------------* - * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay + * Resets *-----------------------------------------------------------------*/ - test(); - IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) + + st_ivas->nSCE = 0; + move16(); + st_ivas->nCPE = 0; + move16(); + st_ivas->nCPE_old = 0; + move16(); + st_ivas->nchan_transport = -1; + move16(); + st_ivas->ism_mode = ISM_MODE_NONE; + move32(); + st_ivas->mc_mode = MC_MODE_NONE; + move32(); + st_ivas->sba_dirac_stereo_flag = 0; + move16(); + + /* HRTF binauralization latency in ns */ + st_ivas->binaural_latency_ns = 0; + move32(); + + /*-------------------------------------------------------------------* + * Allocate and initialize Custom loudspeaker layout handle + *--------------------------------------------------------------------*/ + + IF( st_ivas->hDecoderConfig->Opt_LsCustom ) { - binauralization_delay_ns = st_ivas->binaural_latency_ns; - move32(); - IF( st_ivas->hBinRenderer != NULL ) + IF( EQ_32( ( error = ivas_ls_custom_open_fx( &( st_ivas->hLsSetupCustom ) ) ), IVAS_ERR_OK ) ) { - IF( st_ivas->hBinRenderer->render_lfe ) - { - { - /* Account for filterbank delay */ - binauralization_delay_ns = L_add( binauralization_delay_ns, IVAS_FB_DEC_DELAY_NS ); - } - } - ELSE - { - binauralization_delay_ns = 0; - move32(); - } + set_zero_fx( ( st_ivas->hLsSetupCustom )->ls_azimuth_fx, MAX_OUTPUT_CHANNELS ); + set_zero_fx( ( st_ivas->hLsSetupCustom )->ls_elevation_fx, MAX_OUTPUT_CHANNELS ); } - - IF( NE_32( ( error = ivas_create_lfe_dec_fx( &st_ivas->hLFE, output_Fs, binauralization_delay_ns ) ), IVAS_ERR_OK ) ) + ELSE { return error; } - - set32_fx( st_ivas->hLFE->prevsynth_buf_fx, 0, LFE_PLC_BUFLEN ); - set32_fx( st_ivas->hLFE->prior_out_buffer_fx, 0, L_FRAME48k ); } - /*-----------------------------------------------------------------* - * CLDFB handles for rendering - *-----------------------------------------------------------------*/ - - ivas_init_dec_get_num_cldfb_instances_ivas_fx( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); + /*-------------------------------------------------------------------* + * Allocate and initialize Head-Tracking handle + *--------------------------------------------------------------------*/ - FOR( i = 0; i < numCldfbAnalyses; i++ ) + IF( st_ivas->hDecoderConfig->Opt_Headrotation ) { - IF( NE_32( ( error = openCldfb_ivas_fx( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_headTrack_open_fx( &( st_ivas->hHeadTrackData ) ) ), IVAS_ERR_OK ) ) + { + return error; + } + error = ivas_orient_trk_SetTrackingType_fx( st_ivas->hHeadTrackData->OrientationTracker, st_ivas->hDecoderConfig->orientation_tracking ); + IF( NE_32( ( error ), IVAS_ERR_OK ) ) { return error; } } - FOR( ; i < MAX_INTERN_CHANNELS; i++ ) - { - st_ivas->cldfbAnaDec[i] = NULL; - } + /*-------------------------------------------------------------------* + * Allocate and initialize external orientation handle + *--------------------------------------------------------------------*/ - FOR( i = 0; i < numCldfbSyntheses; i++ ) + IF( st_ivas->hDecoderConfig->Opt_ExternalOrientation ) { - IF( NE_32( ( error = openCldfb_ivas_fx( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_external_orientation_open( &( st_ivas->hExtOrientationData ), st_ivas->hDecoderConfig->render_framesize ) ), IVAS_ERR_OK ) ) { return error; } } - FOR( ; i < MAX_OUTPUT_CHANNELS; i++ ) - { - st_ivas->cldfbSynDec[i] = NULL; - } - /* CLDFB Interpolation weights */ - test(); - test(); + /*-------------------------------------------------------------------* + * Allocate and initialize combined orientation handle + *--------------------------------------------------------------------*/ test(); - IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) && !st_ivas->sba_dirac_stereo_flag && NE_16( st_ivas->hDecoderConfig->nchan_out, 1 ) ) + IF( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) { - Word16 Q_cldfbSynDec = Q11; - move16(); - ivas_spar_get_cldfb_gains_fx( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); - - FOR( i = 0; i < st_ivas->cldfbAnaDec[0]->cldfb_state_length; i++ ) - { - st_ivas->cldfbAnaDec[0]->cldfb_state_fx[i] = L_shr( st_ivas->cldfbAnaDec[0]->cldfb_state_fx[i], 16 ); // Scaling down from 27 to 11 - move32(); - } - st_ivas->cldfbAnaDec[0]->Q_cldfb_state = Q11; - move16(); - FOR( i = 0; i < st_ivas->cldfbSynDec[0]->cldfb_state_length; i++ ) + IF( NE_32( ( error = ivas_combined_orientation_open( &( st_ivas->hCombinedOrientationData ), st_ivas->hDecoderConfig->output_Fs, st_ivas->hDecoderConfig->render_framesize ) ), IVAS_ERR_OK ) ) { - st_ivas->cldfbSynDec[0]->cldfb_state_fx[i] = L_shr( st_ivas->cldfbSynDec[0]->cldfb_state_fx[i], sub( 21, Q_cldfbSynDec ) ); // Scaling down from 21 to Q_cldfbSynDec - move32(); + return error; } - st_ivas->cldfbSynDec[0]->Q_cldfb_state = Q11; - move16(); } - /*-----------------------------------------------------------------* - * Allocate and initialize limiter struct - *-----------------------------------------------------------------*/ + /*-------------------------------------------------------------------* + * Allocate HRTF binary handle + *--------------------------------------------------------------------*/ - IF( NE_32( ( error = ivas_limiter_open_fx( &st_ivas->hLimiter, hDecoderConfig->nchan_out, output_Fs ) ), IVAS_ERR_OK ) ) + IF( st_ivas->hDecoderConfig->Opt_HRTF_binary ) { - return error; - } - - /*-----------------------------------------------------------------* - * Allocate and initialize JBM struct + buffer - *-----------------------------------------------------------------*/ - - IF( st_ivas->hTcBuffer == NULL ) + IF( NE_32( ( error = ivas_HRTF_binary_open_fx( &( st_ivas->hHrtfTD ) ) ), IVAS_ERR_OK ) ) + { + return error; + } - { - /* no module has yet open the TC buffer, open a default one */ - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); + IF( NE_32( ( error = ivas_HRTF_CRend_binary_open_fx( &( st_ivas->hSetOfHRTF ) ) ), IVAS_ERR_OK ) ) + { + return error; + } - IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_HRTF_fastconv_binary_open_fx( &st_ivas->hHrtfFastConv ) ), IVAS_ERR_OK ) ) { return error; } - } - IF( st_ivas->hTcBuffer == NULL ) - { - /* we need the handle anyway, but without the buffer*/ - IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_NONE, 0, 0, 0, 1 ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_HRTF_parambin_binary_open_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) { return error; } } - IF( st_ivas->hJbmMetadata == NULL ) + /*-------------------------------------------------------------------* + * Allocate and initialize Binaural Renderer configuration handle + *--------------------------------------------------------------------*/ + test(); + test(); + IF( EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL ) || EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) || EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { - IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) + IF( NE_32( ( error = ivas_render_config_open( &( st_ivas->hRenderConfig ) ) ), IVAS_ERR_OK ) ) { - IF( NE_32( ( error = ivas_jbm_dec_metadata_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } + return error; } - } - /*-----------------------------------------------------------------* - * Allocate floating-point output audio buffers - *-----------------------------------------------------------------*/ - st_ivas->p_out_len = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - move16(); - FOR( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) - { - /* note: these are intra-frame heap memories */ - IF( ( st_ivas->p_output_fx[n] = (Word32 *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( Word32 ) ) ) == NULL ) + IF( NE_32( ( error = ivas_render_config_init_from_rom_fx( &st_ivas->hRenderConfig ) ), IVAS_ERR_OK ) ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) ); + return error; } - set32_fx( st_ivas->p_output_fx[n], 0, 48000 / FRAMES_PER_SEC ); } - FOR( ; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - st_ivas->p_output_fx[n] = NULL; - } return error; } -#else -ivas_error ivas_init_decoder( + + +/*-------------------------------------------------------------------* + * ivas_init_decoder() + * + * Initialize IVAS decoder state structure + *-------------------------------------------------------------------*/ +ivas_error ivas_init_decoder_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { - int16_t i, n, k; - int16_t sce_id, cpe_id; - int16_t numCldfbAnalyses, numCldfbSyntheses; - int16_t granularity, n_channels_transport_jbm; - int32_t output_Fs, ivas_total_brate; - int32_t binauralization_delay_ns; + Word16 i, n, k; + Word16 sce_id, cpe_id; + Word16 numCldfbAnalyses, numCldfbSyntheses; + Word16 granularity, n_channels_transport_jbm; + Word32 output_Fs, ivas_total_brate; + Word32 binauralization_delay_ns; AUDIO_CONFIG output_config; DECODER_CONFIG_HANDLE hDecoderConfig; ivas_error error; - int32_t ism_total_brate; + Word32 ism_total_brate; error = IVAS_ERR_OK; - + move32(); output_Fs = st_ivas->hDecoderConfig->output_Fs; + move32(); hDecoderConfig = st_ivas->hDecoderConfig; output_config = hDecoderConfig->output_config; ivas_total_brate = hDecoderConfig->ivas_total_brate; - + move32(); hDecoderConfig->last_ivas_total_brate = ivas_total_brate; + move32(); st_ivas->last_active_ivas_total_brate = ivas_total_brate; - + move32(); /*-----------------------------------------------------------------* * Set number of output channels for EXTERNAL output config. *-----------------------------------------------------------------*/ - if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) { hDecoderConfig->nchan_out = audioCfg2channels( IVAS_AUDIO_CONFIG_HOA3 ); - hDecoderConfig->nchan_out += st_ivas->nchan_ism; + move16(); + hDecoderConfig->nchan_out = add( hDecoderConfig->nchan_out, st_ivas->nchan_ism ); + move16(); } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - hDecoderConfig->nchan_out = st_ivas->nchan_transport + st_ivas->nchan_ism; + hDecoderConfig->nchan_out = add( st_ivas->nchan_transport, st_ivas->nchan_ism ); + move16(); } - else if ( !( st_ivas->ism_mode == ISM_MODE_PARAM ) ) + ELSE IF( !EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { hDecoderConfig->nchan_out = st_ivas->nchan_transport; + move16(); } st_ivas->hOutSetup.nchan_out_woLFE = hDecoderConfig->nchan_out; + move16(); } /*-----------------------------------------------------------------* @@ -3180,43 +1039,63 @@ ivas_error ivas_init_decoder( *-----------------------------------------------------------------*/ st_ivas->intern_config = output_config; - + move32(); ivas_output_init( &( st_ivas->hOutSetup ), output_config ); - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) + test(); + IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) ) { st_ivas->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; + move16(); st_ivas->intern_config = IVAS_AUDIO_CONFIG_7_1_4; + move32(); st_ivas->hOutSetup.output_config = st_ivas->intern_config; + move32(); st_ivas->hOutSetup.nchan_out_woLFE = audioCfg2channels( st_ivas->intern_config ); + move16(); } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) + test(); + IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_32( output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { st_ivas->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; + move32(); st_ivas->intern_config = IVAS_AUDIO_CONFIG_HOA3; + move32(); st_ivas->hOutSetup.output_config = IVAS_AUDIO_CONFIG_HOA3; + move32(); st_ivas->hOutSetup.nchan_out_woLFE = audioCfg2channels( IVAS_AUDIO_CONFIG_HOA3 ); + move16(); } /* Only initialize transport setup if it is used */ - if ( st_ivas->transport_config != IVAS_AUDIO_CONFIG_INVALID ) + IF( NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_INVALID ) ) { ivas_output_init( &( st_ivas->hTransSetup ), st_ivas->transport_config ); } - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + test(); + IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); + ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hOutSetup.separateChannelEnabled ), &( st_ivas->hOutSetup.separateChannelIndex ), ivas_total_brate ); + ivas_mcmasa_set_separate_channel_mode_fx( &( st_ivas->hOutSetup.separateChannelEnabled ), &( st_ivas->hOutSetup.separateChannelIndex ), ivas_total_brate ); } ivas_renderer_select( st_ivas ); - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - if ( ( error = ivas_ls_custom_output_init( st_ivas ) ) != IVAS_ERR_OK ) + IF( EQ_16( ( error = ivas_ls_custom_output_init_fx( st_ivas ) ), IVAS_ERR_OK ) ) + { + st_ivas->hOutSetup.ls_azimuth_fx = st_ivas->hLsSetupCustom->ls_azimuth_fx; + move32(); + st_ivas->hOutSetup.ls_elevation_fx = st_ivas->hLsSetupCustom->ls_elevation_fx; + move32(); + st_ivas->hIntSetup.ls_azimuth_fx = st_ivas->hLsSetupCustom->ls_azimuth_fx; + move32(); + st_ivas->hIntSetup.ls_elevation_fx = st_ivas->hLsSetupCustom->ls_elevation_fx; + move32(); + } + ELSE { return error; } @@ -3224,23 +1103,29 @@ ivas_error ivas_init_decoder( ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + test(); + IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hIntSetup.separateChannelEnabled ), &( st_ivas->hIntSetup.separateChannelIndex ), ivas_total_brate ); + ivas_mcmasa_set_separate_channel_mode_fx( &( st_ivas->hIntSetup.separateChannelEnabled ), &( st_ivas->hIntSetup.separateChannelIndex ), ivas_total_brate ); - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.separateChannelEnabled ) + test(); + IF( EQ_32( st_ivas->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.separateChannelEnabled ) { st_ivas->hLsSetupCustom->separate_ch_found = 0; - if ( st_ivas->hOutSetup.nchan_out_woLFE >= MCMASA_MIN_SPEAKERS_SEPARATE_CENTER ) + move16(); + IF( GE_16( st_ivas->hOutSetup.nchan_out_woLFE, MCMASA_MIN_SPEAKERS_SEPARATE_CENTER ) ) { /* check for a speaker at (0, 0) if minimum speaker count is available */ - for ( i = 0; i < st_ivas->hOutSetup.nchan_out_woLFE; i++ ) + FOR( i = 0; i < st_ivas->hOutSetup.nchan_out_woLFE; i++ ) { - if ( st_ivas->hOutSetup.ls_azimuth[i] == 0.0f && st_ivas->hOutSetup.ls_elevation[i] == 0.0f ) + test(); + IF( ( L_shr( st_ivas->hOutSetup.ls_azimuth_fx[i], Q22 ) == 0 ) && ( L_shr( st_ivas->hOutSetup.ls_elevation_fx[i], Q22 ) == 0 ) ) { st_ivas->hIntSetup.separateChannelIndex = i; + move16(); st_ivas->hLsSetupCustom->separate_ch_found = 1; - break; + move16(); + BREAK; } } } @@ -3252,43 +1137,56 @@ ivas_error ivas_init_decoder( * Allocate and initialize SCE/CPE and other handles *-----------------------------------------------------------------*/ - if ( st_ivas->ivas_format == MONO_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, MONO_FORMAT ) ) { st_ivas->nSCE = 1; /* in mono, there is always only one SCE */ + move16(); st_ivas->nCPE = 0; + move16(); + st_ivas->nCPE_old = 0; + move16(); st_ivas->nchan_transport = 1; + move16(); sce_id = 0; + move16(); - if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate ) ), IVAS_ERR_OK ) ) { return error; } reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, STEREO_FORMAT ) ) { st_ivas->nchan_transport = CPE_CHANNELS; + move16(); st_ivas->intern_config = IVAS_AUDIO_CONFIG_STEREO; + move32(); st_ivas->nSCE = 0; + move16(); st_ivas->nCPE = 1; /* in stereo, there is always only one CPE */ + move16(); + st_ivas->nCPE_old = 0; + move16(); cpe_id = 0; + move16(); - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < st_ivas->nchan_transport; n++ ) + FOR( n = 0; n < st_ivas->nchan_transport; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } /* init EFAP for custom LS output and set hTransSetup */ - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hOutSetup.ls_azimuth, st_ivas->hOutSetup.ls_elevation, st_ivas->hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hOutSetup.ls_azimuth_fx, st_ivas->hOutSetup.ls_elevation_fx, st_ivas->hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } @@ -3296,34 +1194,41 @@ ivas_error ivas_init_decoder( ivas_output_init( &( st_ivas->hTransSetup ), IVAS_AUDIO_CONFIG_STEREO ); } } - else if ( st_ivas->ivas_format == ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) ) { - int32_t element_brate_tmp[MAX_NUM_OBJECTS]; + Word32 element_brate_tmp[MAX_NUM_OBJECTS]; st_ivas->nSCE = st_ivas->nchan_transport; /* "st_ivas->nchan_transport" is known from ivas_dec_setup */ + move16(); st_ivas->nCPE = 0; + move16(); + st_ivas->nCPE_old = 0; + move16(); st_ivas->ism_extmeta_active = -1; + move16(); st_ivas->ism_extmeta_cnt = 0; - - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + move16(); + IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { st_ivas->nchan_transport = MAX_PARAM_ISM_WAVE; + move16(); st_ivas->nSCE = MAX_PARAM_ISM_WAVE; + move16(); - if ( ( error = ivas_param_ism_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_param_ism_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, st_ivas->nSCE, element_brate_tmp ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nSCE, element_brate_tmp ) ), IVAS_ERR_OK ) ) { return error; } - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { - if ( ( error = create_sce_dec( st_ivas, sce_id, element_brate_tmp[sce_id] ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, element_brate_tmp[sce_id] ) ), IVAS_ERR_OK ) ) { return error; } @@ -3331,78 +1236,103 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); st_ivas->hSCE[sce_id]->hCoreCoder[0]->is_ism_format = 1; + move16(); } st_ivas->hISMDTX.sce_id_dtx = 0; + move16(); - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed2 = st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed3; + move16(); } - else if ( st_ivas->ism_mode == ISM_MODE_DISC ) + ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MODE_DISC ) ) { - for ( sce_id = 0; sce_id < st_ivas->nSCE; ++sce_id ) + FOR( sce_id = 0; sce_id < st_ivas->nSCE; ++sce_id ) { - st_ivas->hSCE[sce_id]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed2 = 2 + sce_id; + st_ivas->hSCE[sce_id]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed2 = add( 2, sce_id ); + move16(); } } } - else if ( st_ivas->ivas_format == SBA_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) ) { - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_spar_dec_open( st_ivas, 0 ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_spar_dec_open_fx( st_ivas, 0 ) ), IVAS_ERR_OK ) ) { return error; } - - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->hOutSetup.is_loudspeaker_setup ) +#ifdef MSAN_FIX + set16_fx( st_ivas->hSpar->hFbMixer->cldfb_cross_fade_fx, 0, CLDFB_NO_COL_MAX ); +#endif + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) && st_ivas->hOutSetup.is_loudspeaker_setup ) { - if ( ( error = ivas_sba_get_hoa_dec_matrix( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), - st_ivas->ivas_format ) ) != IVAS_ERR_OK ) + Word16 hodirac_flag = ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ); + IF( hodirac_flag ) { - return error; + IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, IVAS_MAX_NUM_BANDS, st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) + { + return error; + } + } + ELSE + { + IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) + { + return error; + } } - if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO ) + + test(); + test(); + IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) ) { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) { return error; } st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; + move16(); } - else + ELSE { - int16_t band_grouping[IVAS_MAX_NUM_BANDS + 1]; + Word16 band_grouping[IVAS_MAX_NUM_BANDS + 1]; - st_ivas->hSpar->enc_param_start_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - if ( ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ) + st_ivas->hSpar->enc_param_start_band = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + move16(); + IF( ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ) ) { st_ivas->hSpar->enc_param_start_band = 0; - - set_c( (int8_t *) st_ivas->hQMetaData->twoDirBands, (int8_t) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); - st_ivas->hQMetaData->numTwoDirBands = (uint8_t) st_ivas->hQMetaData->q_direction[0].cfg.nbands; + move16(); + set8_fx( (Word8 *) st_ivas->hQMetaData->twoDirBands, (Word8) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); + st_ivas->hQMetaData->numTwoDirBands = (UWord8) st_ivas->hQMetaData->q_direction[0].cfg.nbands; + move16(); } - ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ), - st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); + ivas_dirac_config_bands_fx( band_grouping, IVAS_MAX_NUM_BANDS, extract_l( Mpy_32_32_r( st_ivas->hDecoderConfig->output_Fs, INV_CLDFB_BANDWIDTH_Q31 ) ), + st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); } st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + move16(); + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { - if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3410,23 +1340,29 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, (res_dec) *CPE_CHANNELS ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } /* create CPE element for DFT Stereo like upmix */ - if ( st_ivas->sba_dirac_stereo_flag && st_ivas->nCPE == 0 ) + test(); + IF( st_ivas->sba_dirac_stereo_flag && ( st_ivas->nCPE == 0 ) ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); + + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3435,9 +1371,9 @@ ivas_error ivas_init_decoder( st_ivas->hCPE[0]->hCoreCoder[1] = NULL; } - if ( st_ivas->nCPE > 1 ) + IF( GT_16( st_ivas->nCPE, 1 ) ) { - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } @@ -3446,32 +1382,39 @@ ivas_error ivas_init_decoder( /* set CNA/CNG flags */ ivas_sba_set_cna_cng_flag( st_ivas ); } - else if ( st_ivas->ivas_format == MASA_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) { /* if we start in ISM_MODE_NONE in MASA_ISM, that appears as normal MASA, but we may change to a mode with ISMs */ st_ivas->ism_extmeta_active = -1; + move16(); st_ivas->ism_extmeta_cnt = 0; - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + move16(); + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) { return error; } } - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { - if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3479,14 +1422,16 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } @@ -3495,67 +1440,88 @@ ivas_error ivas_init_decoder( /* set CNA/CNG flags */ ivas_sba_set_cna_cng_flag( st_ivas ); } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) { - int32_t temp_brate[MAX_SCE]; + Word32 temp_brate[MAX_SCE]; st_ivas->ism_extmeta_active = -1; + move16(); st_ivas->ism_extmeta_cnt = 0; + move16(); st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + move16(); + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_spar_dec_open( st_ivas, 0 ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_spar_dec_open_fx( st_ivas, 0 ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC && st_ivas->hOutSetup.is_loudspeaker_setup ) + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) && st_ivas->hOutSetup.is_loudspeaker_setup ) { - if ( ( error = ivas_sba_get_hoa_dec_matrix( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( st_ivas->hOutSetup, &st_ivas->hoa_dec_mtx, st_ivas->hIntSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), - st_ivas->ivas_format ) ) != IVAS_ERR_OK ) + Word16 hodirac_flag = ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ); + IF( hodirac_flag ) { - return error; + IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, IVAS_MAX_NUM_BANDS, st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) + { + return error; + } + } + ELSE + { + IF( NE_32( ( error = ivas_dirac_sba_config_fx( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), st_ivas->ivas_format ) ), IVAS_ERR_OK ) ) + { + return error; + } } - if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO ) + + test(); + test(); + IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) ) { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) { return error; } st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; + move16(); } - else + ELSE { - int16_t band_grouping[IVAS_MAX_NUM_BANDS + 1]; + Word16 band_grouping[IVAS_MAX_NUM_BANDS + 1]; - st_ivas->hSpar->enc_param_start_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - if ( ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ) + st_ivas->hSpar->enc_param_start_band = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + move16(); + IF( ivas_get_hodirac_flag_fx( ivas_total_brate, st_ivas->sba_analysis_order ) ) { st_ivas->hSpar->enc_param_start_band = 0; - - set_c( (int8_t *) st_ivas->hQMetaData->twoDirBands, (int8_t) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); - st_ivas->hQMetaData->numTwoDirBands = (uint8_t) st_ivas->hQMetaData->q_direction[0].cfg.nbands; + move16(); + set8_fx( (Word8 *) st_ivas->hQMetaData->twoDirBands, (Word8) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); + st_ivas->hQMetaData->numTwoDirBands = (UWord8) st_ivas->hQMetaData->q_direction[0].cfg.nbands; + move16(); } - ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ), - st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); + ivas_dirac_config_bands_fx( band_grouping, IVAS_MAX_NUM_BANDS, extract_l( Mpy_32_32_r( st_ivas->hDecoderConfig->output_Fs, INV_CLDFB_BANDWIDTH_Q31 ) ), + st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); } - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { - if ( ( error = create_sce_dec( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3563,29 +1529,38 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) { - st_ivas->nCPE += ( st_ivas->nchan_ism + 1 ) >> 1; + st_ivas->nCPE_old = st_ivas->nCPE; + move16(); + st_ivas->nCPE = add( st_ivas->nCPE, shr( add( st_ivas->nchan_ism, 1 ), 1 ) ); + move16(); st_ivas->element_mode_init = IVAS_CPE_MDCT; + move16(); } - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, st_ivas->nchan_transport, &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } /* create CPE element for DFT Stereo like upmix */ - if ( st_ivas->sba_dirac_stereo_flag && st_ivas->nCPE == 0 ) + test(); + IF( st_ivas->sba_dirac_stereo_flag && st_ivas->nCPE == 0 ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3594,22 +1569,22 @@ ivas_error ivas_init_decoder( st_ivas->hCPE[0]->hCoreCoder[1] = NULL; } - if ( st_ivas->nCPE > 1 ) + IF( GT_16( st_ivas->nCPE, 1 ) ) { - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) { - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, st_ivas->nchan_ism, temp_brate ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nchan_ism, temp_brate ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_osba_data_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_osba_data_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } @@ -3618,52 +1593,59 @@ ivas_error ivas_init_decoder( /* set CNA/CNG flags */ ivas_sba_set_cna_cng_flag( st_ivas ); } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) { st_ivas->ism_extmeta_active = -1; + move16(); st_ivas->ism_extmeta_cnt = 0; + move16(); - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } k = 0; + move16(); ism_total_brate = 0; - while ( k < SIZE_IVAS_BRATE_TBL && ivas_total_brate != ivas_brate_tbl[k] ) + move32(); + + WHILE( ( k < SIZE_IVAS_BRATE_TBL ) && ( ivas_total_brate != ivas_brate_tbl[k] ) ) { - k++; + k = add( k, 1 ); } - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + test(); + IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { /* one separated object */ st_ivas->nSCE = 1; - + move16(); ism_total_brate = sep_object_brate[k - 2][0]; - if ( ( error = create_sce_dec( st_ivas, 0, ism_total_brate ) ) != IVAS_ERR_OK ) + move32(); + IF( NE_32( ( error = create_sce_dec( st_ivas, 0, ism_total_brate ) ), IVAS_ERR_OK ) ) { return error; } reset_indices_dec( st_ivas->hSCE[0]->hCoreCoder[0] ); - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, 1, NULL ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, 1, NULL ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - int32_t temp_brate[MAX_SCE]; + Word32 temp_brate[MAX_SCE]; st_ivas->nSCE = st_ivas->nchan_ism; /* number of objects */ - - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + move16(); + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { temp_brate[sce_id] = sep_object_brate[k - 2][st_ivas->nSCE - 1]; - ism_total_brate += temp_brate[sce_id]; + move32(); + ism_total_brate = L_add( ism_total_brate, temp_brate[sce_id] ); - if ( ( error = create_sce_dec( st_ivas, sce_id, temp_brate[sce_id] ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, temp_brate[sce_id] ) ), IVAS_ERR_OK ) ) { return error; } @@ -3671,199 +1653,240 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, st_ivas->nchan_ism, temp_brate ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ism_metadata_dec_create_fx( st_ivas, st_ivas->nchan_ism, temp_brate ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_omasa_data_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_omasa_data_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate - ism_total_brate ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_cpe_dec( st_ivas, 0, ivas_total_brate - ism_total_brate ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[0]->hCoreCoder[n] ); } } - else if ( st_ivas->ivas_format == MC_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) { - if ( st_ivas->mc_mode == MC_MODE_MCT ) + IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) ) { /* init EFAP for custom LS setup */ - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth, st_ivas->hLsSetupCustom->ls_elevation, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } } - st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ) ); + st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels_fx( ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ) ); + move16(); st_ivas->nSCE = 0; - st_ivas->nCPE = st_ivas->nchan_transport / CPE_CHANNELS; - + move16(); + st_ivas->nCPE = shr( st_ivas->nchan_transport, 1 ); + move16(); + st_ivas->nCPE_old = 0; + move16(); st_ivas->element_mode_init = IVAS_CPE_MDCT; - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + move16(); + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / ( st_ivas->nchan_transport - 1 ) * CPE_CHANNELS ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, sub( st_ivas->nchan_transport, 1 ), &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) { /* init EFAP for custom LS setup */ - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth, st_ivas->hLsSetupCustom->ls_elevation, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } } st_ivas->nSCE = 0; - st_ivas->nCPE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS / CPE_CHANNELS; + move16(); + st_ivas->nCPE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS >> 1; + move16(); + st_ivas->nCPE_old = 0; + move16(); st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; + move16(); - if ( ( error = ivas_mc_paramupmix_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_mc_paramupmix_dec_open( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } st_ivas->element_mode_init = IVAS_CPE_MDCT; - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + move16(); + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ( ivas_total_brate / ( st_ivas->nchan_transport - 1 ) * CPE_CHANNELS ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, sub( st_ivas->nchan_transport, 1 ), &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, L_shl( res_dec, 1 ) ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) { /* init EFAP for custom LS setup */ - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth, st_ivas->hLsSetupCustom->ls_elevation, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hLsSetupCustom->ls_azimuth_fx, st_ivas->hLsSetupCustom->ls_elevation_fx, st_ivas->hLsSetupCustom->num_spk, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } } - - if ( ( error = ivas_param_mc_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_param_mc_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + st_ivas->hParamMC->proto_matrix_int_e = 0; + move16(); + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); + + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } - if ( st_ivas->nCPE > 1 ) + IF( GT_16( st_ivas->nCPE, 1 ) ) { - if ( ( error = create_mct_dec( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_mct_dec_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - int32_t brate_sce, brate_cpe; + Word32 brate_sce, brate_cpe; - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); + ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } - if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_masa_dec_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) + { return error; } st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - if ( st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_MCMASA_MONO_STEREO ) + move16(); + test(); + IF( NE_32( st_ivas->renderer_type, RENDERER_DISABLE ) && NE_32( st_ivas->renderer_type, RENDERER_MCMASA_MONO_STEREO ) ) { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_config_fx( st_ivas, DIRAC_OPEN ) ), IVAS_ERR_OK ) ) { return error; } } - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.separateChannelEnabled && !st_ivas->hLsSetupCustom->separate_ch_found ) + test(); + test(); + IF( EQ_32( st_ivas->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.separateChannelEnabled && !st_ivas->hLsSetupCustom->separate_ch_found ) { /* If no speaker matching the separated channel, compute panning gains for the separated channel. */ - if ( st_ivas->hVBAPdata == NULL ) + IF( st_ivas->hVBAPdata == NULL ) { /* Distribute signal to all channels if VBAP is not properly initialized. */ - set_f( st_ivas->hLsSetupCustom->separate_ch_gains, inv_sqrt( st_ivas->hLsSetupCustom->num_spk ), st_ivas->hLsSetupCustom->num_spk ); - } - else - { - vbap_determine_gains( st_ivas->hVBAPdata, st_ivas->hLsSetupCustom->separate_ch_gains, 0, 0, 0 ); + Word16 inv_sqr, sqr, exp = 15, exp_sqr; + move16(); + IF( EQ_16( st_ivas->hLsSetupCustom->num_spk, 1 ) ) + { + inv_sqr = 32767; // (1.0f in Q15)-1 + move16(); + } + ELSE + { + sqr = Sqrt16( st_ivas->hLsSetupCustom->num_spk, &exp ); + inv_sqr = BASOP_Util_Divide1616_Scale( 32767, sqr, &exp_sqr ); + exp_sqr = sub( exp_sqr, exp ); + IF( ( exp < 0 ) ) + { + inv_sqr = shr( inv_sqr, exp ); // exp_sqr + } + ELSE + { + inv_sqr = shl( inv_sqr, exp ); // exp_sqr + } + } + set16_fx( st_ivas->hLsSetupCustom->separate_ch_gains_fx, inv_sqr, st_ivas->hLsSetupCustom->num_spk ); } } - ivas_mcmasa_split_brate( st_ivas->hOutSetup.separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) + ivas_mcmasa_split_brate_fx( st_ivas->hOutSetup.separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); + + FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { - if ( ( error = create_sce_dec( st_ivas, sce_id, brate_sce ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = create_sce_dec( st_ivas, sce_id, brate_sce ) ), IVAS_ERR_OK ) ) { return error; } @@ -3871,25 +1894,27 @@ ivas_error ivas_init_decoder( reset_indices_dec( st_ivas->hSCE[sce_id]->hCoreCoder[0] ); } - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) + FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { st_ivas->element_mode_init = IVAS_CPE_MDCT; /* element_mode_init was IVAS_SCE for SCE initialization */ - - if ( ( error = create_cpe_dec( st_ivas, cpe_id, brate_cpe ) ) != IVAS_ERR_OK ) + move16(); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, brate_cpe ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { reset_indices_dec( st_ivas->hCPE[cpe_id]->hCoreCoder[n] ); } } /* create CPE element for DFT Stereo like upmix */ - if ( st_ivas->sba_dirac_stereo_flag ) + IF( st_ivas->sba_dirac_stereo_flag ) { - if ( ( error = create_cpe_dec( st_ivas, cpe_id, ivas_total_brate / ( st_ivas->nSCE + st_ivas->nCPE ) ) ) != IVAS_ERR_OK ) + Word32 res_dec, res_frac; + iDiv_and_mod_32( ivas_total_brate, add( st_ivas->nSCE, st_ivas->nCPE ), &res_dec, &res_frac, 0 ); + IF( NE_32( ( error = create_cpe_dec( st_ivas, cpe_id, res_dec ) ), IVAS_ERR_OK ) ) { return error; } @@ -3899,10 +1924,14 @@ ivas_error ivas_init_decoder( } /* set CNA/CNG flags */ - if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) + test(); + test(); + IF( EQ_16( st_ivas->nchan_transport, 1 ) && ( ( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) ) { st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; + move16(); st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag = 1; + move16(); } } } @@ -3915,265 +1944,380 @@ ivas_error ivas_init_decoder( /* set number of output channels used for synthesis/decoding */ n = getNumChanSynthesis( st_ivas ); - if ( n > 0 ) + IF( n > 0 ) { - if ( ( st_ivas->mem_hp20_out = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) + IF( ( st_ivas->mem_hp20_out_fx = (Word32 **) malloc( n * sizeof( Word32 * ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } } - else + ELSE { - st_ivas->mem_hp20_out = NULL; + st_ivas->mem_hp20_out_fx = NULL; } - for ( i = 0; i < n; i++ ) + FOR( i = 0; i < n; i++ ) { - if ( ( st_ivas->mem_hp20_out[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) + IF( ( st_ivas->mem_hp20_out_fx[i] = (Word32 *) malloc( ( L_HP20_MEM + 2 ) * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); } - - set_f( st_ivas->mem_hp20_out[i], 0.0f, L_HP20_MEM ); + set32_fx( st_ivas->mem_hp20_out_fx[i], 0, L_HP20_MEM + 2 ); } /*-------------------------------------------------------------------* * Allocate and initialize rendering handles *--------------------------------------------------------------------*/ - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + test(); + test(); + test(); + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { - - if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_binRenderer_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - /* ParamISM is handled separately from other common config */ - else if ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) + ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) && ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) ) { - if ( st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC ) + IF( NE_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_binaural_copy_hrtfs_fx( &st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_init_binaural_data_fx( st_ivas, st_ivas->hHrtfParambin ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) { - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) + Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; + Word16 num_src; + IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) { return error; } + Word16 nchan_rend = num_src; + move16(); + test(); + IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + { + nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ + } + FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) + { + TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; + if ( Src_p->SrcSpatial_p != NULL ) + { + Src_p->SrcSpatial_p->q_Pos_p = Q31; + move16(); + } + TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; + SrcSpatial_p->q_Pos_p = Q31; + move16(); + } - if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + IF( EQ_32( st_ivas->hIntSetup.output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { - if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_reverb_open_fx( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac_fx, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ), IVAS_ERR_OK ) ) { return error; } } granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ) != IVAS_ERR_OK ) + n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); + + + IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_MC ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) { - if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ls_setup_conversion_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MONO_DOWNMIX ) ) { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM && st_ivas->ivas_format == MC_FORMAT && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) && EQ_32( st_ivas->ivas_format, MC_FORMAT ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = efap_init_data_fx( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth_fx, st_ivas->hIntSetup.ls_elevation_fx, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ), IVAS_ERR_OK ) ) { return error; } } - if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, - st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, + st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ), + IVAS_ERR_OK ) ) { return error; } st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns; + move32(); - if ( ( st_ivas->ivas_format == MC_FORMAT ) && ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) + test(); + IF( ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) && ( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) ) { - granularity = NS2SA( output_Fs, CLDFB_SLOT_NS ); + granularity = NS2SA_FX2( output_Fs, CLDFB_SLOT_NS ); + + n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, MC_PARAMUPMIX_MAX_INPUT_CHANS, MC_PARAMUPMIX_MAX_INPUT_CHANS, granularity ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, MC_PARAMUPMIX_MAX_INPUT_CHANS, MC_PARAMUPMIX_MAX_INPUT_CHANS, granularity ) ), IVAS_ERR_OK ) ) { return error; } } - else + ELSE { - granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); + granularity = NS2SA_FX2( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas ); + n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, granularity ) ), IVAS_ERR_OK ) ) { return error; } } } - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { /* Allocate TD renderer for the objects in DISC mode */ - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) + Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; + Word16 num_src; + IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) { return error; } + Word16 nchan_rend = num_src; + move16(); + test(); + if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + { + nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ + } + FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) + { + TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; + if ( Src_p->SrcSpatial_p != NULL ) + { + Src_p->SrcSpatial_p->q_Pos_p = Q31; + move16(); + } + TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; + SrcSpatial_p->q_Pos_p = Q31; + move16(); + } /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - if ( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - if ( st_ivas->renderer_type == RENDERER_DIRAC && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) && ( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) ) { /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - if ( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } } - if ( ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && - ( st_ivas->ism_mode == ISM_MODE_DISC || st_ivas->ism_mode == ISM_SBA_MODE_DISC ) && - ( st_ivas->renderer_type == RENDERER_TD_PANNING || - st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX || - st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || - st_ivas->renderer_type == RENDERER_OSBA_STEREO || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || - st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( ( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) && + ( EQ_32( st_ivas->ism_mode, ISM_MODE_DISC ) || EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) && + ( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || + EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) || + EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || + EQ_32( st_ivas->renderer_type, RENDERER_OSBA_STEREO ) || + EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || + EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || + EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || + EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) || + EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) ) { - if ( ( error = ivas_ism_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ism_renderer_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } } - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) { - if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + test(); + test(); + IF( ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) && EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) { /* Allocate TD renderer for the objects in DISC mode */ - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) + Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; + Word16 num_src; + IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) ) { return error; } + Word16 nchan_rend = num_src; + move16(); + + test(); + if ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) && NE_32( st_ivas->transport_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) + { + nchan_rend = sub( nchan_rend, 1 ); /* Skip LFE channel -- added to the others */ + } + FOR( Word16 nS = 0; nS < nchan_rend; nS++ ) + { + TDREND_SRC_t *Src_p = st_ivas->hBinRendererTd->Sources[SrcInd[nS]]; + if ( Src_p->SrcSpatial_p != NULL ) + { + Src_p->SrcSpatial_p->q_Pos_p = Q31; + move16(); + } + TDREND_SRC_SPATIAL_t *SrcSpatial_p = st_ivas->hBinRendererTd->Sources[nS]->SrcSpatial_p; + SrcSpatial_p->q_Pos_p = Q31; + move16(); + } } } /*-----------------------------------------------------------------* * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay *-----------------------------------------------------------------*/ - - if ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) + test(); + IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) { binauralization_delay_ns = st_ivas->binaural_latency_ns; - if ( st_ivas->hBinRenderer != NULL ) + move32(); + IF( st_ivas->hBinRenderer != NULL ) { - if ( st_ivas->hBinRenderer->render_lfe ) + IF( st_ivas->hBinRenderer->render_lfe ) { { /* Account for filterbank delay */ - binauralization_delay_ns += IVAS_FB_DEC_DELAY_NS; + binauralization_delay_ns = L_add( binauralization_delay_ns, IVAS_FB_DEC_DELAY_NS ); } } - else + ELSE { binauralization_delay_ns = 0; + move32(); } } - if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, output_Fs, binauralization_delay_ns ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_create_lfe_dec_fx( &st_ivas->hLFE, output_Fs, binauralization_delay_ns ) ), IVAS_ERR_OK ) ) { return error; } - set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); - set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); + set32_fx( st_ivas->hLFE->prevsynth_buf_fx, 0, LFE_PLC_BUFLEN ); + set32_fx( st_ivas->hLFE->prior_out_buffer_fx, 0, L_FRAME48k ); } /*-----------------------------------------------------------------* * CLDFB handles for rendering *-----------------------------------------------------------------*/ - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); + ivas_init_dec_get_num_cldfb_instances_ivas_fx( st_ivas, &numCldfbAnalyses, &numCldfbSyntheses ); - for ( i = 0; i < numCldfbAnalyses; i++ ) + FOR( i = 0; i < numCldfbAnalyses; i++ ) { - if ( ( error = openCldfb_ivas( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = openCldfb_ivas_fx( &( st_ivas->cldfbAnaDec[i] ), CLDFB_ANALYSIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ), IVAS_ERR_OK ) ) { return error; } } - for ( ; i < MAX_INTERN_CHANNELS; i++ ) + FOR( ; i < MAX_INTERN_CHANNELS; i++ ) { st_ivas->cldfbAnaDec[i] = NULL; } - for ( i = 0; i < numCldfbSyntheses; i++ ) + FOR( i = 0; i < numCldfbSyntheses; i++ ) { - if ( ( error = openCldfb_ivas( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = openCldfb_ivas_fx( &( st_ivas->cldfbSynDec[i] ), CLDFB_SYNTHESIS, output_Fs, CLDFB_PROTOTYPE_5_00MS ) ), IVAS_ERR_OK ) ) { return error; } } - for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) + FOR( ; i < MAX_OUTPUT_CHANNELS; i++ ) { st_ivas->cldfbSynDec[i] = NULL; } /* CLDFB Interpolation weights */ - if ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && !st_ivas->sba_dirac_stereo_flag && st_ivas->hDecoderConfig->nchan_out != 1 ) + test(); + test(); + test(); + IF( ( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) && !st_ivas->sba_dirac_stereo_flag && NE_16( st_ivas->hDecoderConfig->nchan_out, 1 ) ) { - ivas_spar_get_cldfb_gains( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); + Word16 Q_cldfbSynDec = Q11; + move16(); + ivas_spar_get_cldfb_gains_fx( st_ivas->hSpar, st_ivas->cldfbAnaDec[0], st_ivas->cldfbSynDec[0], hDecoderConfig ); + + FOR( i = 0; i < st_ivas->cldfbAnaDec[0]->cldfb_state_length; i++ ) + { + st_ivas->cldfbAnaDec[0]->cldfb_state_fx[i] = L_shr( st_ivas->cldfbAnaDec[0]->cldfb_state_fx[i], 16 ); // Scaling down from 27 to 11 + move32(); + } + st_ivas->cldfbAnaDec[0]->Q_cldfb_state = Q11; + move16(); + FOR( i = 0; i < st_ivas->cldfbSynDec[0]->cldfb_state_length; i++ ) + { + st_ivas->cldfbSynDec[0]->cldfb_state_fx[i] = L_shr( st_ivas->cldfbSynDec[0]->cldfb_state_fx[i], sub( 21, Q_cldfbSynDec ) ); // Scaling down from 21 to Q_cldfbSynDec + move32(); + } + st_ivas->cldfbSynDec[0]->Q_cldfb_state = Q11; + move16(); } /*-----------------------------------------------------------------* * Allocate and initialize limiter struct *-----------------------------------------------------------------*/ - if ( ( error = ivas_limiter_open( &st_ivas->hLimiter, hDecoderConfig->nchan_out, output_Fs ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_limiter_open_fx( &st_ivas->hLimiter, hDecoderConfig->nchan_out, output_Fs ) ), IVAS_ERR_OK ) ) { return error; } @@ -4182,32 +2326,32 @@ ivas_error ivas_init_decoder( * Allocate and initialize JBM struct + buffer *-----------------------------------------------------------------*/ - if ( st_ivas->hTcBuffer == NULL ) + IF( st_ivas->hTcBuffer == NULL ) { /* no module has yet open the TC buffer, open a default one */ - n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels( st_ivas ); + n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas ); - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, ivas_jbm_dec_get_tc_buffer_mode( st_ivas ), n_channels_transport_jbm, n_channels_transport_jbm, n_channels_transport_jbm, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ), IVAS_ERR_OK ) ) { return error; } } - if ( st_ivas->hTcBuffer == NULL ) + IF( st_ivas->hTcBuffer == NULL ) { /* we need the handle anyway, but without the buffer*/ - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_NONE, 0, 0, 0, 1 ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_NONE, 0, 0, 0, 1 ) ), IVAS_ERR_OK ) ) { return error; } } - if ( st_ivas->hJbmMetadata == NULL ) + IF( st_ivas->hJbmMetadata == NULL ) { - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) + IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - if ( ( error = ivas_jbm_dec_metadata_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_jbm_dec_metadata_open( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } @@ -4217,34 +2361,31 @@ ivas_error ivas_init_decoder( /*-----------------------------------------------------------------* * Allocate floating-point output audio buffers *-----------------------------------------------------------------*/ - - for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) + st_ivas->p_out_len = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + move16(); + FOR( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) { /* note: these are intra-frame heap memories */ - if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) + IF( ( st_ivas->p_output_fx[n] = (Word32 *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) ); } + set32_fx( st_ivas->p_output_fx[n], 0, 48000 / FRAMES_PER_SEC ); } - for ( ; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) + FOR( ; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) { - st_ivas->p_output_f[n] = NULL; + st_ivas->p_output_fx[n] = NULL; } - - return error; } -#endif - /*------------------------------------------------------------------------- * destroy_core_dec() * * Close core decoder handles *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void destroy_core_dec_fx( DEC_CORE_HANDLE hCoreCoder /* i/o: core decoder structure */ ) @@ -4348,314 +2489,85 @@ void destroy_core_dec_fx( hCoreCoder->hTcxDec = NULL; } - IF( hCoreCoder->hTcxCfg != NULL ) - { - free( hCoreCoder->hTcxCfg ); - hCoreCoder->hTcxCfg = NULL; - } - - IF( hCoreCoder->hTonalMDCTConc != NULL ) - { - free( hCoreCoder->hTonalMDCTConc ); - hCoreCoder->hTonalMDCTConc = NULL; - } - - IF( hCoreCoder->hIGFDec != NULL ) - { - free( hCoreCoder->hIGFDec ); - hCoreCoder->hIGFDec = NULL; - } - - IF( hCoreCoder->hPlcInfo != NULL ) - { - free( hCoreCoder->hPlcInfo ); - hCoreCoder->hPlcInfo = NULL; - } - - IF( hCoreCoder->hHQ_core != NULL ) - { - free( hCoreCoder->hHQ_core ); - hCoreCoder->hHQ_core = NULL; - } - - IF( hCoreCoder->hHQ_nbfec != NULL ) - { - free( hCoreCoder->hHQ_nbfec ); - hCoreCoder->hHQ_nbfec = NULL; - } - - return; -} -#else -void destroy_core_dec( - DEC_CORE_HANDLE hCoreCoder /* i/o: core decoder structure */ -) -{ - destroy_cldfb_decoder_flt( hCoreCoder ); - - if ( hCoreCoder->hGSCDec != NULL ) - { - free( hCoreCoder->hGSCDec ); - hCoreCoder->hGSCDec = NULL; - } - - if ( hCoreCoder->hPFstat != NULL ) - { - free( hCoreCoder->hPFstat ); - hCoreCoder->hPFstat = NULL; - } - - if ( hCoreCoder->hMusicPF != NULL ) - { - free( hCoreCoder->hMusicPF ); - hCoreCoder->hMusicPF = NULL; - } - - if ( hCoreCoder->hBPF != NULL ) - { - free( hCoreCoder->hBPF ); - hCoreCoder->hBPF = NULL; - } - - if ( hCoreCoder->hBWE_zero != NULL ) - { - free( hCoreCoder->hBWE_zero ); - hCoreCoder->hBWE_zero = NULL; - } - - if ( hCoreCoder->hTdCngDec != NULL ) - { - free( hCoreCoder->hTdCngDec ); - hCoreCoder->hTdCngDec = NULL; - } - - if ( hCoreCoder->hSC_VBR != NULL ) - { - free( hCoreCoder->hSC_VBR ); - hCoreCoder->hSC_VBR = NULL; - } - - if ( hCoreCoder->hAmrwb_IO != NULL ) - { - free( hCoreCoder->hAmrwb_IO ); - hCoreCoder->hAmrwb_IO = NULL; - } - - if ( hCoreCoder->hBWE_TD != NULL ) - { - free( hCoreCoder->hBWE_TD ); - hCoreCoder->hBWE_TD = NULL; - } - - if ( hCoreCoder->hBWE_FD != NULL ) - { - free( hCoreCoder->hBWE_FD ); - hCoreCoder->hBWE_FD = NULL; - } - - if ( hCoreCoder->hBWE_FD_HR != NULL ) - { - free( hCoreCoder->hBWE_FD_HR ); - hCoreCoder->hBWE_FD_HR = NULL; - } - - if ( hCoreCoder->hWIDec != NULL ) - { - free( hCoreCoder->hWIDec ); - hCoreCoder->hWIDec = NULL; - } - - if ( hCoreCoder->hTECDec != NULL ) - { - free( hCoreCoder->hTECDec ); - hCoreCoder->hTECDec = NULL; - } - - if ( hCoreCoder->hTcxLtpDec != NULL ) - { - free( hCoreCoder->hTcxLtpDec ); - hCoreCoder->hTcxLtpDec = NULL; - } - - if ( hCoreCoder->hTcxDec != NULL ) - { - free( hCoreCoder->hTcxDec ); - hCoreCoder->hTcxDec = NULL; - } - - if ( hCoreCoder->hTcxCfg != NULL ) - { - free( hCoreCoder->hTcxCfg ); - hCoreCoder->hTcxCfg = NULL; - } - - if ( hCoreCoder->hTonalMDCTConc != NULL ) - { - free( hCoreCoder->hTonalMDCTConc ); - hCoreCoder->hTonalMDCTConc = NULL; - } - - if ( hCoreCoder->hIGFDec != NULL ) - { - free( hCoreCoder->hIGFDec ); - hCoreCoder->hIGFDec = NULL; - } - - if ( hCoreCoder->hPlcInfo != NULL ) - { - free( hCoreCoder->hPlcInfo ); - hCoreCoder->hPlcInfo = NULL; - } - - if ( hCoreCoder->hHQ_core != NULL ) - { - free( hCoreCoder->hHQ_core ); - hCoreCoder->hHQ_core = NULL; - } - - if ( hCoreCoder->hHQ_nbfec != NULL ) - { - free( hCoreCoder->hHQ_nbfec ); - hCoreCoder->hHQ_nbfec = NULL; - } - - return; -} - -#endif - -/*------------------------------------------------------------------------- - * ivas_initialize_handles_dec() - * - * NULL initialization of handles - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void ivas_initialize_handles_dec( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - Word16 i; - - FOR( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - st_ivas->cldfbAnaDec[i] = NULL; - } - - FOR( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - st_ivas->cldfbSynDec[i] = NULL; - } - - /* SCE handles */ - FOR( i = 0; i < MAX_SCE; i++ ) - { - st_ivas->hSCE[i] = NULL; - } - - /* CPE handles */ - FOR( i = 0; i < MAX_CPE; i++ ) - { - st_ivas->hCPE[i] = NULL; - } - - st_ivas->bit_stream = NULL; - st_ivas->mem_hp20_out_fx = NULL; - st_ivas->hLimiter = NULL; - - /* ISM metadata handles */ - FOR( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - st_ivas->hIsmMetaData[i] = NULL; - } - - /* spatial coding handles */ - st_ivas->hDirAC = NULL; - st_ivas->hParamIsmDec = NULL; - st_ivas->hSpar = NULL; - st_ivas->hMasa = NULL; - st_ivas->hQMetaData = NULL; - st_ivas->hMCT = NULL; - st_ivas->hMCParamUpmix = NULL; - st_ivas->hParamMC = NULL; - st_ivas->hLFE = NULL; - - /* rendering handles */ - st_ivas->hBinRenderer = NULL; - st_ivas->hDiracDecBin = NULL; - st_ivas->hDirACRend = NULL; - st_ivas->hSpatParamRendCom = NULL; - st_ivas->hLsSetUpConversion = NULL; - st_ivas->hEFAPdata = NULL; - st_ivas->hVBAPdata = NULL; - st_ivas->hIsmRendererData = NULL; - st_ivas->hBinRendererTd = NULL; - st_ivas->hMonoDmxRenderer = NULL; - st_ivas->hCrendWrapper = NULL; - st_ivas->hReverb = NULL; - st_ivas->hSetOfHRTF = NULL; - st_ivas->hHrtfFastConv = NULL; - st_ivas->hHrtfParambin = NULL; - st_ivas->hoa_dec_mtx = NULL; - st_ivas->hMasaIsmData = NULL; - st_ivas->hSbaIsmData = NULL; + IF( hCoreCoder->hTcxCfg != NULL ) + { + free( hCoreCoder->hTcxCfg ); + hCoreCoder->hTcxCfg = NULL; + } - st_ivas->hHeadTrackData = NULL; - st_ivas->hHrtfTD = NULL; - st_ivas->hLsSetupCustom = NULL; - st_ivas->hRenderConfig = NULL; - st_ivas->hExtOrientationData = NULL; - st_ivas->hCombinedOrientationData = NULL; + IF( hCoreCoder->hTonalMDCTConc != NULL ) + { + free( hCoreCoder->hTonalMDCTConc ); + hCoreCoder->hTonalMDCTConc = NULL; + } + IF( hCoreCoder->hIGFDec != NULL ) + { + free( hCoreCoder->hIGFDec ); + hCoreCoder->hIGFDec = NULL; + } - /* JBM handles */ - st_ivas->hTcBuffer = NULL; - st_ivas->hJbmMetadata = NULL; + IF( hCoreCoder->hPlcInfo != NULL ) + { + free( hCoreCoder->hPlcInfo ); + hCoreCoder->hPlcInfo = NULL; + } - /* floating-point output audio buffers */ - FOR( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) + IF( hCoreCoder->hHQ_core != NULL ) { - st_ivas->p_output_fx[i] = NULL; + free( hCoreCoder->hHQ_core ); + hCoreCoder->hHQ_core = NULL; + } + + IF( hCoreCoder->hHQ_nbfec != NULL ) + { + free( hCoreCoder->hHQ_nbfec ); + hCoreCoder->hHQ_nbfec = NULL; } return; } -#else + +/*------------------------------------------------------------------------- + * ivas_initialize_handles_dec() + * + * NULL initialization of handles + *-------------------------------------------------------------------------*/ + void ivas_initialize_handles_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { - int16_t i; + Word16 i; - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) + FOR( i = 0; i < MAX_INTERN_CHANNELS; i++ ) { st_ivas->cldfbAnaDec[i] = NULL; } - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + FOR( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) { st_ivas->cldfbSynDec[i] = NULL; } /* SCE handles */ - for ( i = 0; i < MAX_SCE; i++ ) + FOR( i = 0; i < MAX_SCE; i++ ) { st_ivas->hSCE[i] = NULL; } /* CPE handles */ - for ( i = 0; i < MAX_CPE; i++ ) + FOR( i = 0; i < MAX_CPE; i++ ) { st_ivas->hCPE[i] = NULL; } st_ivas->bit_stream = NULL; - st_ivas->mem_hp20_out = NULL; + st_ivas->mem_hp20_out_fx = NULL; st_ivas->hLimiter = NULL; /* ISM metadata handles */ - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) + FOR( i = 0; i < MAX_NUM_OBJECTS; i++ ) { st_ivas->hIsmMetaData[i] = NULL; } @@ -4704,16 +2616,14 @@ void ivas_initialize_handles_dec( st_ivas->hJbmMetadata = NULL; /* floating-point output audio buffers */ - for ( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) + FOR( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) { - st_ivas->p_output_f[i] = NULL; + st_ivas->p_output_fx[i] = NULL; } return; } -#endif - /*------------------------------------------------------------------------- * ivas_destroy_dec() @@ -4721,7 +2631,6 @@ void ivas_initialize_handles_dec( * Close IVAS decoder handles *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_destroy_dec_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -4816,7 +2725,7 @@ void ivas_destroy_dec_fx( ivas_masa_dec_close_fx( &( st_ivas->hMasa ) ); /* Qmetadata handle */ - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); /* MCT handle */ ivas_mct_dec_close( &st_ivas->hMCT ); @@ -4866,262 +2775,46 @@ void ivas_destroy_dec_fx( ivas_osba_data_close_fx( &st_ivas->hSbaIsmData ); /* OMASA structure */ - ivas_omasa_data_close_fx( &st_ivas->hMasaIsmData ); - /* Head track data handle */ - ivas_headTrack_close_fx( &st_ivas->hHeadTrackData ); - - /* External orientation data handle */ - ivas_external_orientation_close_fx( &st_ivas->hExtOrientationData ); - - /* Combined orientation data handle */ - ivas_combined_orientation_close_fx( &st_ivas->hCombinedOrientationData ); - - /* Time Domain binaural renderer handle */ - IF( st_ivas->hBinRendererTd != NULL ) - { - ivas_td_binaural_close_fx( &st_ivas->hBinRendererTd ); - } - ELSE IF( st_ivas->hHrtfTD != NULL ) - { - BSplineModelEvalDealloc_fx( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); - ivas_HRTF_binary_close_fx( &st_ivas->hHrtfTD ); - } - - /* CRend binaural renderer handle */ - ivas_HRTF_CRend_binary_close_fx( &st_ivas->hSetOfHRTF ); - - /* Fastconv HRTF memories */ - ivas_binaural_hrtf_close( &st_ivas->hHrtfFastConv ); - - /* Fastconv HRTF filters */ - ivas_HRTF_fastconv_binary_close_fx( &st_ivas->hHrtfFastConv ); - - /* Parametric binauralizer HRTF filters */ - ivas_HRTF_parambin_binary_close_fx( &st_ivas->hHrtfParambin ); - - /* Config. Renderer */ - ivas_render_config_close( &( st_ivas->hRenderConfig ) ); - - /* Limiter struct */ - ivas_limiter_close_fx( &( st_ivas->hLimiter ) ); - - IF( st_ivas->hDecoderConfig != NULL ) - { - free( st_ivas->hDecoderConfig ); - st_ivas->hDecoderConfig = NULL; - } - - ivas_jbm_dec_tc_buffer_close( &st_ivas->hTcBuffer ); - - IF( st_ivas->hJbmMetadata != NULL ) - { - free( st_ivas->hJbmMetadata ); - st_ivas->hJbmMetadata = NULL; - } - - /* floating-point output audio buffers */ - FOR( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) - { - - IF( st_ivas->p_output_fx[i] != NULL ) - { - free( st_ivas->p_output_fx[i] ); - st_ivas->p_output_fx[i] = NULL; - } - } - - /* main IVAS handle */ - free( st_ivas ); - - return; -} -#else -void ivas_destroy_dec( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t i; - - /* CLDFB handles */ - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - if ( st_ivas->cldfbAnaDec[i] != NULL ) - { - deleteCldfb_ivas( &( st_ivas->cldfbAnaDec[i] ) ); - } - } - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - if ( st_ivas->cldfbSynDec[i] != NULL ) - { - deleteCldfb_ivas( &( st_ivas->cldfbSynDec[i] ) ); - } - } - - /* SCE handles */ - for ( i = 0; i < MAX_SCE; i++ ) - { - if ( st_ivas->hSCE[i] != NULL ) - { - destroy_sce_dec( st_ivas->hSCE[i] ); - st_ivas->hSCE[i] = NULL; - } - } - - /* CPE handles */ - for ( i = 0; i < MAX_CPE; i++ ) - { - if ( st_ivas->hCPE[i] != NULL ) - { - /* set pointer to NULL as core coder already deallocated in destroy_sce_dec() */ - if ( st_ivas->sba_dirac_stereo_flag && st_ivas->nchan_transport == 1 ) - { - st_ivas->hCPE[i]->hCoreCoder[0] = NULL; - st_ivas->hCPE[i]->hCoreCoder[1] = NULL; - } - destroy_cpe_dec( st_ivas->hCPE[i] ); - st_ivas->hCPE[i] = NULL; - } - } - - /* HP20 filter handles */ - if ( st_ivas->mem_hp20_out != NULL ) - { - for ( i = 0; i < getNumChanSynthesis( st_ivas ); i++ ) - { - free( st_ivas->mem_hp20_out[i] ); - st_ivas->mem_hp20_out[i] = NULL; - } - free( st_ivas->mem_hp20_out ); - st_ivas->mem_hp20_out = NULL; - } - - /* ISM metadata handles */ - ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); - - /* ISM renderer handle */ - ivas_ism_renderer_close( &( st_ivas->hIsmRendererData ) ); - - /* DirAC handle */ - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ), &( st_ivas->hSpatParamRendCom ), st_ivas->hDecoderConfig->output_config ); - } - else - { - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - } - - /* SPAR handle */ - ivas_spar_dec_close( &( st_ivas->hSpar ), st_ivas->hDecoderConfig->output_Fs, 0 ); - - /* HOA decoder matrix */ - if ( st_ivas->hoa_dec_mtx != NULL ) - { - free( st_ivas->hoa_dec_mtx ); - st_ivas->hoa_dec_mtx = NULL; - } - - /* MASA decoder structure */ - ivas_masa_dec_close( &( st_ivas->hMasa ) ); - - /* Qmetadata handle */ - ivas_qmetadata_close( &st_ivas->hQMetaData ); - - /* MCT handle */ - ivas_mct_dec_close( &st_ivas->hMCT ); - - /* LFE handle */ - ivas_lfe_dec_close( &( st_ivas->hLFE ) ); - - /* Param-Upmix MC handle */ - ivas_mc_paramupmix_dec_close( &( st_ivas->hMCParamUpmix ) ); - - /* Parametric MC handle */ - ivas_param_mc_dec_close( &st_ivas->hParamMC ); - - /* EFAP handle */ - efap_free_data( &st_ivas->hEFAPdata ); - - /* VBAP handle */ - vbap_free_data( &( st_ivas->hVBAPdata ) ); - - /* Fastconv binaural renderer handle */ - ivas_binRenderer_close( &st_ivas->hBinRenderer ); - - - /* Parametric binaural renderer handle */ - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - - /* Crend handle */ - - ivas_rend_closeCrend( &( st_ivas->hCrendWrapper ) ); - - /* Reverb handle */ - ivas_reverb_close( &st_ivas->hReverb ); - - /* LS config converter handle */ - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - - /* Custom LS configuration handle */ - if ( st_ivas->hLsSetupCustom != NULL ) - { - free( st_ivas->hLsSetupCustom ); - st_ivas->hLsSetupCustom = NULL; - } - - /* Mono downmix structure */ - ivas_mono_dmx_renderer_close( &st_ivas->hMonoDmxRenderer ); - - /* OSBA structure */ - ivas_osba_data_close( &st_ivas->hSbaIsmData ); - - /* OMASA structure */ - ivas_omasa_data_close( &st_ivas->hMasaIsmData ); - + ivas_omasa_data_close_fx( &st_ivas->hMasaIsmData ); /* Head track data handle */ - ivas_headTrack_close( &st_ivas->hHeadTrackData ); + ivas_headTrack_close_fx( &st_ivas->hHeadTrackData ); /* External orientation data handle */ - ivas_external_orientation_close( &st_ivas->hExtOrientationData ); + ivas_external_orientation_close_fx( &st_ivas->hExtOrientationData ); /* Combined orientation data handle */ - ivas_combined_orientation_close( &st_ivas->hCombinedOrientationData ); + ivas_combined_orientation_close_fx( &st_ivas->hCombinedOrientationData ); /* Time Domain binaural renderer handle */ - if ( st_ivas->hBinRendererTd != NULL ) + IF( st_ivas->hBinRendererTd != NULL ) { - ivas_td_binaural_close( &st_ivas->hBinRendererTd ); + ivas_td_binaural_close_fx( &st_ivas->hBinRendererTd ); } - else if ( st_ivas->hHrtfTD != NULL ) + ELSE IF( st_ivas->hHrtfTD != NULL ) { - BSplineModelEvalDealloc( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); - - ivas_HRTF_binary_close( &st_ivas->hHrtfTD ); + BSplineModelEvalDealloc_fx( &st_ivas->hHrtfTD->ModelParams, &st_ivas->hHrtfTD->ModelEval ); + ivas_HRTF_binary_close_fx( &st_ivas->hHrtfTD ); } /* CRend binaural renderer handle */ - ivas_HRTF_CRend_binary_close( &st_ivas->hSetOfHRTF ); + ivas_HRTF_CRend_binary_close_fx( &st_ivas->hSetOfHRTF ); /* Fastconv HRTF memories */ ivas_binaural_hrtf_close( &st_ivas->hHrtfFastConv ); /* Fastconv HRTF filters */ - ivas_HRTF_fastconv_binary_close( &st_ivas->hHrtfFastConv ); + ivas_HRTF_fastconv_binary_close_fx( &st_ivas->hHrtfFastConv ); /* Parametric binauralizer HRTF filters */ - ivas_HRTF_parambin_binary_close( &st_ivas->hHrtfParambin ); + ivas_HRTF_parambin_binary_close_fx( &st_ivas->hHrtfParambin ); /* Config. Renderer */ ivas_render_config_close( &( st_ivas->hRenderConfig ) ); /* Limiter struct */ - ivas_limiter_close( &( st_ivas->hLimiter ) ); + ivas_limiter_close_fx( &( st_ivas->hLimiter ) ); - if ( st_ivas->hDecoderConfig != NULL ) + IF( st_ivas->hDecoderConfig != NULL ) { free( st_ivas->hDecoderConfig ); st_ivas->hDecoderConfig = NULL; @@ -5129,19 +2822,20 @@ void ivas_destroy_dec( ivas_jbm_dec_tc_buffer_close( &st_ivas->hTcBuffer ); - if ( st_ivas->hJbmMetadata != NULL ) + IF( st_ivas->hJbmMetadata != NULL ) { free( st_ivas->hJbmMetadata ); st_ivas->hJbmMetadata = NULL; } /* floating-point output audio buffers */ - for ( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) + FOR( i = 0; i < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; i++ ) { - if ( st_ivas->p_output_f[i] != NULL ) + + IF( st_ivas->p_output_fx[i] != NULL ) { - free( st_ivas->p_output_f[i] ); - st_ivas->p_output_f[i] = NULL; + free( st_ivas->p_output_fx[i] ); + st_ivas->p_output_fx[i] = NULL; } } @@ -5151,8 +2845,6 @@ void ivas_destroy_dec( return; } -#endif - /*-------------------------------------------------------------------* * ivas_init_dec_get_num_cldfb_instances() @@ -5161,7 +2853,6 @@ void ivas_destroy_dec( *-------------------------------------------------------------------*/ /*! r: number of cldfb instances */ -#ifdef IVAS_FLOAT_FIXED void ivas_init_dec_get_num_cldfb_instances( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ Word16 *numCldfbAnalyses, /* o : number of needed CLDFB analysis instances */ @@ -5426,212 +3117,6 @@ void ivas_init_dec_get_num_cldfb_instances( return; } -#else -void ivas_init_dec_get_num_cldfb_instances( - Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ - int16_t *numCldfbAnalyses, /* o : number of needed CLDFB analysis instances */ - int16_t *numCldfbSyntheses /* o : number of needed CLDFB synthesis instances */ -) -{ - IVAS_FORMAT ivas_format; - *numCldfbAnalyses = st_ivas->nchan_transport; - *numCldfbSyntheses = st_ivas->hDecoderConfig->nchan_out; - - ivas_format = ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ? SBA_FORMAT : st_ivas->ivas_format; /* treat ISM_SBA_MODE_NONE just like SBA_FORMAT */ - - switch ( st_ivas->renderer_type ) - { - case RENDERER_BINAURAL_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC_ROOM: - case RENDERER_STEREO_PARAMETRIC: - if ( st_ivas->nchan_transport == 1 ) - { - *numCldfbAnalyses = st_ivas->nchan_transport + 1; - } - - if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hOutSetup.separateChannelEnabled ) - { - *numCldfbAnalyses = st_ivas->nchan_transport + 1; - } - - if ( ivas_format == SBA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - *numCldfbAnalyses += st_ivas->nchan_ism; - } - } - - if ( ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - *numCldfbAnalyses += st_ivas->nchan_ism; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - *numCldfbAnalyses = st_ivas->nchan_transport + 1; - } - } - if ( st_ivas->hDiracDecBin->useTdDecorr ) - { - *numCldfbAnalyses += 2; - } - break; - case RENDERER_NON_DIEGETIC_DOWNMIX: - case RENDERER_MONO_DOWNMIX: - if ( ivas_format == ISM_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - /* CLDFB not used in rendering */ - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - } - break; - case RENDERER_DIRAC: - if ( ivas_format == SBA_FORMAT ) - { - *numCldfbAnalyses = st_ivas->hSpar->hFbMixer->fb_cfg->num_in_chans; - - if ( st_ivas->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC ) - { - *numCldfbSyntheses = st_ivas->hOutSetup.nchan_out_woLFE; - } - else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA ) - { - *numCldfbSyntheses = st_ivas->hSpar->hFbMixer->fb_cfg->num_out_chans; - } - else - { - *numCldfbSyntheses = MAX_OUTPUT_CHANNELS; - } - } - if ( ivas_format != SBA_FORMAT ) - { - if ( st_ivas->nchan_transport > 2 && st_ivas->sba_planar ) - { - *numCldfbAnalyses = st_ivas->nchan_transport + 1; - } - else if ( st_ivas->nchan_transport == 1 && st_ivas->hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - *numCldfbAnalyses = st_ivas->nchan_transport + 1; - } - } - break; - case RENDERER_MC_PARAMMC: - if ( st_ivas->hDecoderConfig->nchan_out <= 2 ) - { - /* CLDFB not used in rendering */ - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - } - else - { - *numCldfbSyntheses = param_mc_get_num_cldfb_syntheses( st_ivas ); - } - break; - case RENDERER_PARAM_ISM: - /* Already correct with no exception */ - break; - case RENDERER_DISABLE: - /* CLDFB not used */ - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - break; - case RENDERER_MC: - case RENDERER_SBA_LINEAR_DEC: - case RENDERER_TD_PANNING: - case RENDERER_BINAURAL_OBJECTS_TD: - case RENDERER_MCMASA_MONO_STEREO: - case RENDERER_BINAURAL_MIXER_CONV: - case RENDERER_BINAURAL_MIXER_CONV_ROOM: - case RENDERER_BINAURAL_FASTCONV: - case RENDERER_BINAURAL_FASTCONV_ROOM: - case RENDERER_OSBA_STEREO: - case RENDERER_OSBA_AMBI: - case RENDERER_OSBA_LS: - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - if ( st_ivas->sba_dirac_stereo_flag ) - { - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - } - else - { - *numCldfbAnalyses = st_ivas->hSpar->hFbMixer->fb_cfg->num_in_chans; - - if ( st_ivas->hOutSetup.is_loudspeaker_setup && st_ivas->renderer_type == RENDERER_DIRAC ) - { - *numCldfbSyntheses = st_ivas->hOutSetup.nchan_out_woLFE; - } - else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA ) - { - *numCldfbSyntheses = st_ivas->hSpar->hFbMixer->fb_cfg->num_out_chans; - } - else - { - *numCldfbSyntheses = MAX_OUTPUT_CHANNELS; - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - *numCldfbAnalyses = st_ivas->nchan_ism + st_ivas->hSpar->hFbMixer->fb_cfg->num_in_chans; - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - /* do nothing for ParamMC */ - } - else - { - /* CLDFB not used in rendering */ - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - } - break; - case RENDERER_SBA_LINEAR_ENC: - if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - *numCldfbSyntheses = param_mc_get_num_cldfb_syntheses( st_ivas ); - } - else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - *numCldfbSyntheses = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - *numCldfbAnalyses = st_ivas->nchan_transport; - *numCldfbSyntheses = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - } - else - { - /* CLDFB not used in rendering */ - *numCldfbAnalyses = 0; - *numCldfbSyntheses = 0; - } - break; - default: - assert( 0 && "Renderer not handled for CLDFB reservation." ); - } - - if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - *numCldfbAnalyses = max( MC_PARAMUPMIX_MAX_INPUT_CHANS, *numCldfbAnalyses ); - } - else - { - *numCldfbAnalyses = max( MC_PARAMUPMIX_MIN_CLDFB, *numCldfbAnalyses ); - } - *numCldfbSyntheses = max( MC_PARAMUPMIX_MIN_CLDFB, *numCldfbSyntheses ); - } - - return; -} - -#endif /*---------------------------------------------------------------------* @@ -5641,7 +3126,6 @@ void ivas_init_dec_get_num_cldfb_instances( * not in conflict with the IVAS format *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error doSanityChecks_IVAS( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -5772,118 +3256,3 @@ static ivas_error doSanityChecks_IVAS( return IVAS_ERR_OK; } -#else -static ivas_error doSanityChecks_IVAS( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int32_t output_Fs; - AUDIO_CONFIG output_config; - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - output_config = st_ivas->hDecoderConfig->output_config; - - /*-----------------------------------------------------------------* - * Sanity checks - *-----------------------------------------------------------------*/ - - if ( output_Fs == 8000 ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "8kHz output sampling rate is not supported in IVAS." ); - } - - assert( st_ivas->ivas_format != UNDEFINED_FORMAT && "\n IVAS format undefined" ); - assert( st_ivas->ivas_format != MONO_FORMAT && "\n Wrong IVAS format: MONO" ); - - /* Verify output configuration compatible with non-diegetic panning */ - if ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan && ( st_ivas->ivas_format != MONO_FORMAT ) && ( st_ivas->transport_config != IVAS_AUDIO_CONFIG_ISM1 ) ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Error: Non-diegetic panning not supported in this IVAS format" ); - } - - /* Verify stereo output configuration */ - if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - if ( output_config != IVAS_AUDIO_CONFIG_MONO && output_config != IVAS_AUDIO_CONFIG_STEREO && output_config != IVAS_AUDIO_CONFIG_5_1 && output_config != IVAS_AUDIO_CONFIG_7_1 && output_config != IVAS_AUDIO_CONFIG_5_1_2 && output_config != IVAS_AUDIO_CONFIG_5_1_4 && output_config != IVAS_AUDIO_CONFIG_7_1_4 && output_config != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Wrong output configuration specified for Stereo!" ); - } - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - /* Verify ISM output configuration */ - if ( output_config == IVAS_AUDIO_CONFIG_INVALID ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for ISM" ); - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT ) - { - /* Verify SBA output coniguration */ - if ( output_config == IVAS_AUDIO_CONFIG_INVALID ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for SBA" ); - } - } - else if ( st_ivas->ivas_format == MASA_FORMAT ) - { - if ( output_config == IVAS_AUDIO_CONFIG_INVALID ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for MASA!" ); - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - /* Verify MC output configuration */ - if ( output_config == IVAS_AUDIO_CONFIG_INVALID || output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for Multi-channel" ); - } - } - - - if ( st_ivas->hDecoderConfig->Opt_Headrotation ) - { - if ( !( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - return IVAS_ERROR( IVAS_ERR_HEAD_ROTATION_NOT_SUPPORTED, "Wrong set-up: Head-rotation not supported in this configuration" ); - } - } - - if ( st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - if ( !( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - return IVAS_ERROR( IVAS_ERR_EXT_ORIENTATION_NOT_SUPPORTED, "Wrong set-up: External orientation not supported in this configuration" ); - } - } - - if ( st_ivas->hDecoderConfig->Opt_dpid_on ) - { - if ( !( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - return IVAS_ERROR( IVAS_ERR_DIRECTIVITY_NOT_SUPPORTED, "Wrong set-up: Directivity is not supported in this output configuration." ); - } - } - - if ( st_ivas->hDecoderConfig->Opt_aeid_on ) - { - if ( output_config != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - return IVAS_ERROR( IVAS_ERR_ACOUSTIC_ENVIRONMENT_NOT_SUPPORTED, "Wrong set-up: Acoustic environment is not supported in this output configuration." ); - } - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for combined MASA and ISM format" ); - } - } - - - return IVAS_ERR_OK; -} - -#endif diff --git a/lib_dec/ivas_init_dec_fx.c b/lib_dec/ivas_init_dec_fx.c index 745c5c65d..b0dbe97b4 100644 --- a/lib_dec/ivas_init_dec_fx.c +++ b/lib_dec/ivas_init_dec_fx.c @@ -1,5 +1,4 @@ #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED void ivas_init_dec_get_num_cldfb_instances_ivas_fx( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ Word16 *numCldfbAnalyses, /* o : number of needed CLDFB analysis instances */ @@ -261,4 +260,3 @@ void ivas_init_dec_get_num_cldfb_instances_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 9718c7106..a5f7f7b06 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -37,10 +37,8 @@ #include "ivas_prot_fx.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* @@ -49,7 +47,6 @@ * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_ism_bitrate_switching_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nchan_transport_old, /* i : last number of transport channels */ @@ -398,308 +395,6 @@ static ivas_error ivas_ism_bitrate_switching_dec_fx( return error; } -#endif -#ifndef IVAS_FLOAT_FIXED -static ivas_error ivas_ism_bitrate_switching_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nchan_transport_old, /* i : last number of transport channels */ - const ISM_MODE last_ism_mode, /* i : last ISM mode */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - int16_t *data /* o : output synthesis signal */ -) -{ - ivas_error error; - int32_t element_brate_tmp[MAX_NUM_OBJECTS]; - int16_t nSCE_old, nCPE_old; - int16_t numCldfbAnalyses_old, numCldfbSyntheses_old, ism_mode; - TC_BUFFER_MODE tc_buffer_mode_new; - int16_t tc_nchan_tc_new; - int16_t tc_nchan_allocate_new; - int16_t tc_granularity_new; - int16_t nchan_out_buff, nchan_out_buff_old; - AUDIO_CONFIG intern_config_old; - IVAS_OUTPUT_SETUP hIntSetupOld; - RENDERER_TYPE renderer_type_old; - - error = IVAS_ERR_OK; - nCPE_old = st_ivas->nCPE; - nSCE_old = st_ivas->nSCE; - - /* temporarily set the ism mode back to the old one, otherwise this can give wrong results*/ - ism_mode = st_ivas->ism_mode; - st_ivas->ism_mode = last_ism_mode; - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - st_ivas->ism_mode = ism_mode; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - - if ( ( error = ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nchan_ism, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->nSCE = st_ivas->nchan_transport; - - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SCE/CPE/MCT handles - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_corecoder_dec_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, 0, st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport, ( st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * HP20 memories - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_hp20_dec_reconfig( st_ivas, nchan_transport_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* save old IntSetup, might be needed for JBM flushing...*/ - intern_config_old = st_ivas->intern_config; - hIntSetupOld = st_ivas->hIntSetup; - tc_granularity_new = 1; - renderer_type_old = st_ivas->renderer_type; - - /*-----------------------------------------------------------------* - * Initialize the needed renderer struct and destroy the unnecessary renderer struct - *-----------------------------------------------------------------*/ - - /* select the renderer */ - ivas_renderer_select( st_ivas ); - - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - - if ( ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) && ( st_ivas->ism_mode == ISM_MODE_DISC ) ) - { - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->hDecoderConfig->output_config ); - } - - { - /* transfer subframe info from DirAC or ParamMC to central tc buffer */ - if ( last_ism_mode == ISM_MODE_PARAM && st_ivas->hSpatParamRendCom != NULL && ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE ) ) - { - st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpatParamRendCom->nb_subframes; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered; - st_ivas->hTcBuffer->num_slots = st_ivas->hSpatParamRendCom->num_slots; - st_ivas->hTcBuffer->slots_rendered = st_ivas->hSpatParamRendCom->slots_rendered; - mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - - /* JBM: when granularity goes down (e.g. Discrete ISM with TD Obj Renderer -> ParamISM with binaural fastconv - render what still fits in the new granularity */ - tc_granularity_new = ivas_jbm_dec_get_render_granularity_flt( st_ivas->renderer_type, st_ivas->ivas_format, st_ivas->mc_mode, st_ivas->hDecoderConfig->output_Fs ); - - if ( tc_granularity_new < st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_flush_renderer( st_ivas, tc_granularity_new, renderer_type_old, intern_config_old, &hIntSetupOld, MC_MODE_NONE, last_ism_mode, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - /* JBM: when granularity goes up set samples to discard at the beginning of the frame */ - else if ( tc_granularity_new > st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_set_discard_samples( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( st_ivas->ism_mode != last_ism_mode ) - { - /* EFAP handle */ - efap_free_data( &st_ivas->hEFAPdata ); - } - - /*-----------------------------------------------------------------* - * Switching between ParamISM and DiscISM - *-----------------------------------------------------------------*/ - - /* switching from ParamISM to DiscISM */ - if ( st_ivas->ism_mode == ISM_MODE_DISC && last_ism_mode == ISM_MODE_PARAM ) - { - /* Deallocate the ParamISM struct */ - ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ), &( st_ivas->hSpatParamRendCom ), st_ivas->hDecoderConfig->output_config ); - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - /* close the parametric binaural renderer */ - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - /* Open the TD Binaural renderer */ - if ( st_ivas->hHrtfTD == NULL || st_ivas->hBinRendererTd == NULL ) - { - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_reverb_open( &st_ivas->hReverb, st_ivas->hDecoderConfig->output_config, NULL, st_ivas->hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - else - { - /* close the ISM renderer and reinitialize */ - ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); - - if ( ( error = ivas_ism_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - /* close the parametric binaural renderer */ - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - - /* Open Crend Binaural renderer */ - if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns; - } - } - - /* switching from Discrete ISM to ParamISM */ - if ( st_ivas->ism_mode == ISM_MODE_PARAM && last_ism_mode == ISM_MODE_DISC ) - { - /* Allocate and initialize the ParamISM struct */ - if ( ( error = ivas_param_ism_dec_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - /* open the parametric binaural renderer */ - if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Close the TD Binaural renderer */ - if ( st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE ) - { - ivas_td_binaural_close( &st_ivas->hBinRendererTd ); - st_ivas->hHrtfTD = NULL; - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - ivas_reverb_close( &st_ivas->hReverb ); - } - } - } - else - { - /* Close the ISM renderer */ - ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); - } - - if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - /* open the parametric binaural renderer */ - if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* close the crend binaural renderer */ - ivas_rend_closeCrend( &( st_ivas->hCrendWrapper ) ); - } - } - - /*-----------------------------------------------------------------* - * CLDFB instances - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_cldfb_dec_reconfig( st_ivas, nchan_transport_old, numCldfbAnalyses_old, numCldfbSyntheses_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * floating-point output audio buffers - *-----------------------------------------------------------------*/ - - { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - - if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * JBM TC buffers - *-----------------------------------------------------------------*/ - { - int16_t tc_nchan_full_new; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - - hTcBuffer = st_ivas->hTcBuffer; - tc_buffer_mode_new = ivas_jbm_dec_get_tc_buffer_mode( st_ivas ); - tc_nchan_tc_new = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - tc_nchan_allocate_new = tc_nchan_tc_new; - tc_nchan_full_new = tc_nchan_tc_new; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - tc_nchan_allocate_new = 2 * BINAURAL_CHANNELS; - tc_nchan_full_new = tc_nchan_allocate_new; - } - - if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - tc_nchan_full_new = 0; - } - - /* reconfigure buffer */ - if ( hTcBuffer->tc_buffer_mode != tc_buffer_mode_new || hTcBuffer->nchan_transport_jbm != tc_nchan_tc_new || - hTcBuffer->nchan_buffer_full != tc_nchan_full_new || hTcBuffer->nchan_transport_internal != tc_nchan_allocate_new ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_reconfigure( st_ivas, tc_buffer_mode_new, tc_nchan_tc_new, tc_nchan_allocate_new, tc_nchan_full_new, tc_granularity_new ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* transfer subframe info from central tc buffer to ParamMC or McMASA (DirAC) */ - if ( st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hSpatParamRendCom->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hSpatParamRendCom->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - st_ivas->hSpatParamRendCom->num_slots = st_ivas->hTcBuffer->num_slots; - st_ivas->hSpatParamRendCom->slots_rendered = st_ivas->hTcBuffer->slots_rendered; - - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpatParamRendCom->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - } - - return error; -} -#endif /*------------------------------------------------------------------------- * ivas_ism_dec_config() @@ -708,7 +403,6 @@ static ivas_error ivas_ism_bitrate_switching_dec( * - reconfigure the ISM format decoder *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ism_dec_config_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const ISM_MODE last_ism_mode, /* i/o: last ISM mode */ @@ -825,102 +519,3 @@ ivas_error ivas_ism_dec_config_fx( } return error; } -#else -ivas_error ivas_ism_dec_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const ISM_MODE last_ism_mode, /* i/o: last ISM mode */ - uint16_t *nSamplesRendered, /* o : number of samples flushed when the renderer granularity changes */ - int16_t *data /* o : output synthesis signal */ -) -{ - int32_t ivas_total_brate; - ivas_error error; - int16_t nchan_transport_old; - - error = IVAS_ERR_OK; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - /* Assumes that num of input objects are constant */ - nchan_transport_old = st_ivas->nchan_ism; - - if ( last_ism_mode == ISM_MODE_PARAM ) - { - nchan_transport_old = MAX_PARAM_ISM_WAVE; - } - - if ( !st_ivas->bfi && ivas_total_brate != IVAS_SID_5k2 && ivas_total_brate != FRAME_NO_DATA ) - { - /* select ISM format mode */ - st_ivas->ism_mode = ivas_ism_mode_select( st_ivas->nchan_ism, ivas_total_brate ); - - st_ivas->nchan_transport = st_ivas->nchan_ism; - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - st_ivas->nchan_transport = MAX_PARAM_ISM_WAVE; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - st_ivas->hDecoderConfig->nchan_out = st_ivas->nchan_ism; - } - } - - if ( st_ivas->ini_active_frame != 0 ) - { - /* ISM bit-rate switching */ - { - if ( ( st_ivas->ism_mode != last_ism_mode ) || ( st_ivas->hDecoderConfig->ivas_total_brate != st_ivas->hDecoderConfig->last_ivas_total_brate ) ) - { - if ( ( error = ivas_ism_bitrate_switching_dec( st_ivas, nchan_transport_old, last_ism_mode, nSamplesRendered, - data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - } - else if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - st_ivas->nchan_transport = st_ivas->nchan_ism; - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - st_ivas->nchan_transport = MAX_PARAM_ISM_WAVE; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - st_ivas->hDecoderConfig->nchan_out = st_ivas->nchan_ism; - } - } - - /* ISM mode switching */ - if ( st_ivas->ism_mode != last_ism_mode ) - { - if ( ( error = ivas_ism_bitrate_switching_dec( st_ivas, nchan_transport_old, last_ism_mode, nSamplesRendered, - data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - switch ( st_ivas->nchan_ism ) - { - case 1: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_ISM1; - break; - case 2: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_ISM2; - break; - case 3: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_ISM3; - break; - case 4: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_ISM4; - break; - default: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_INVALID; - break; - } - - return error; -} - -#endif diff --git a/lib_dec/ivas_ism_dtx_dec.c b/lib_dec/ivas_ism_dtx_dec.c index 9f7af820f..106653e48 100644 --- a/lib_dec/ivas_ism_dtx_dec.c +++ b/lib_dec/ivas_ism_dtx_dec.c @@ -38,16 +38,13 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * ivas_ism_dtx_dec_fx() * * ISM DTX Metadata decoding routine *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_dtx_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word16 *nb_bits_metadata /* o : number of metadata bits */ @@ -150,96 +147,6 @@ void ivas_ism_dtx_dec_fx( return; } -#else -void ivas_ism_dtx_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - int16_t *nb_bits_metadata /* o : number of metadata bits */ -) -{ - int16_t ch, nchan_ism, nchan_ism_prev; - int32_t ivas_total_brate; - int16_t md_diff_flag[MAX_NUM_OBJECTS]; - int16_t flag_noisy_speech, sce_id_dtx; - Decoder_State *st; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - - nchan_ism_prev = st_ivas->nchan_ism; - - if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - /* 'nchan_ism' was read in ivas_dec_setup() */ - nchan_ism = st_ivas->nchan_ism; - - /* ism_mode was read in ivas_dec_setup() as well as reconfiguration ivas_ism_dec_config() */ - } - else - { - nchan_ism = nchan_ism_prev; - } - - /* Metadata decoding and dequantization */ - ivas_ism_metadata_sid_dec( st_ivas->hSCE, ivas_total_brate, st_ivas->bfi, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, - &flag_noisy_speech, &sce_id_dtx, st_ivas->hIsmMetaData, nb_bits_metadata ); - - if ( ivas_total_brate == IVAS_SID_5k2 && !st_ivas->bfi ) - { - if ( st_ivas->hParamIsmDec != NULL ) - { - st_ivas->hParamIsmDec->hParamIsm->flag_noisy_speech = flag_noisy_speech; - } - - st_ivas->hISMDTX.sce_id_dtx = sce_id_dtx; - } - - set_s( md_diff_flag, 1, nchan_ism ); - - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - for ( ch = 0; ch < nchan_ism; ch++ ) - { - st_ivas->hParamIsmDec->azimuth_values[ch] = st_ivas->hIsmMetaData[ch]->azimuth; - st_ivas->hParamIsmDec->elevation_values[ch] = st_ivas->hIsmMetaData[ch]->elevation; - } - } - - /* synch common seed between SCEs */ - if ( st_ivas->ism_mode == ISM_MODE_DISC ) - { - for ( ch = 0; ch < nchan_ism; ++ch ) - { - st_ivas->hSCE[ch]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed = st_ivas->hSCE[st_ivas->hISMDTX.sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->seed; - } - } - - update_last_metadata( nchan_ism, st_ivas->hIsmMetaData, md_diff_flag ); - - st_ivas->hISMDTX.ism_dtx_hangover_cnt = 0; - - if ( ivas_total_brate == IVAS_SID_5k2 && !st_ivas->bfi ) - { - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) - { - nb_bits_metadata[ch] = nb_bits_metadata[sce_id_dtx]; - } - } - - if ( !st_ivas->bfi ) - { - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) - { - st = st_ivas->hSCE[ch]->hCoreCoder[0]; - st->bit_stream = st_ivas->hSCE[0]->hCoreCoder[0]->bit_stream; - st->next_bit_pos = 0; /* note: needed in paramISM -> discISM switching */ - st->cng_ism_flag = 1; - st->L_frame = min( st->L_frame, L_FRAME16k ); /* note: needed for switching from active frame with L_frame=640 to CNG in object with no SID */ - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -248,7 +155,6 @@ void ivas_ism_dtx_dec( * for DTX frames where the energy of the sent noise estimate of the dominant object * is near silence, limit the other objects CNG energies to the same level *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_dtx_limit_noise_energy_for_near_silence_fx( SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder structures */ const Word16 sce_id_dtx, /* i : SCE DTX ID */ @@ -293,42 +199,3 @@ void ivas_ism_dtx_limit_noise_energy_for_near_silence_fx( } return; } -#else -void ivas_ism_dtx_limit_noise_energy_for_near_silence( - SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder structures */ - const int16_t sce_id_dtx, /* i : SCE DTX ID */ - const int16_t nchan_transport /* i : number of transport channels */ -) -{ - float fac, cng_noise_nrg_obj, cng_noise_nrg_dominant; - int16_t ch, cng_noise_level_len; - HANDLE_FD_CNG_COM hFdCngCom; - - hFdCngCom = hSCE[sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom; - cng_noise_level_len = hFdCngCom->stopFFTbin - hFdCngCom->startBand; - cng_noise_nrg_dominant = dotp( hFdCngCom->cngNoiseLevel_flt, hFdCngCom->cngNoiseLevel_flt, cng_noise_level_len ); - - if ( cng_noise_nrg_dominant < 1.f ) - { - for ( ch = 0; ch < nchan_transport; ch++ ) - { - if ( ch == sce_id_dtx ) - { - continue; - } - - hFdCngCom = hSCE[ch]->hCoreCoder[0]->hFdCngDec->hFdCngCom; - cng_noise_level_len = hFdCngCom->stopFFTbin - hFdCngCom->startBand; - cng_noise_nrg_obj = dotp( hFdCngCom->cngNoiseLevel_flt, hFdCngCom->cngNoiseLevel_flt, cng_noise_level_len ); - - if ( cng_noise_nrg_obj > cng_noise_nrg_dominant ) - { - fac = sqrtf( cng_noise_nrg_dominant / cng_noise_nrg_obj ); - v_multc( hFdCngCom->cngNoiseLevel_flt, fac, hFdCngCom->cngNoiseLevel_flt, cng_noise_level_len ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_ism_metadata_dec.c b/lib_dec/ivas_ism_metadata_dec.c index 750a0a23e..ae33f2794 100644 --- a/lib_dec/ivas_ism_metadata_dec.c +++ b/lib_dec/ivas_ism_metadata_dec.c @@ -48,13 +48,8 @@ /*-----------------------------------------------------------------------* * Local functions *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void decode_angle_indices_fx( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, const Word16 non_diegetic_flag, Word16 *flag_abs_azimuth ); static Word16 decode_radius_fx( DEC_CORE_HANDLE st0, Word16 *last_radius_idx, Word16 *flag_abs_radius ); -#else -static void decode_angle_indices( DEC_CORE_HANDLE st0, ISM_METADATA_ANGLE_HANDLE angle, const int16_t non_diegetic_flag, int16_t *flag_abs_azimuth ); -static int16_t decode_radius( DEC_CORE_HANDLE st0, int16_t *last_radius_idx, int16_t *flag_abs_radius ); -#endif /*-------------------------------------------------------------------------* @@ -75,68 +70,6 @@ static int16_t decode_radius( DEC_CORE_HANDLE st0, int16_t *last_radius_idx, int * Smooth the metadata evolution *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ism_metadata_smooth( - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int32_t ism_total_brate, /* i : ISms total bitrate */ - const int16_t nchan_ism /* i : number of objects */ -) -{ - ISM_METADATA_HANDLE hIsmMetaData; - int16_t ch; - float diff; - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMetaData = hIsmMeta[ch]; - - /* smooth azimuth */ - diff = hIsmMetaData->last_true_azimuth - hIsmMetaData->last_azimuth; - - if ( diff > ISM_AZIMUTH_MAX ) - { - diff -= ( ISM_AZIMUTH_MAX - ISM_AZIMUTH_MIN ); - hIsmMetaData->last_azimuth += ( ISM_AZIMUTH_MAX - ISM_AZIMUTH_MIN ); - } - else if ( diff < ISM_AZIMUTH_MIN ) - { - diff += ( ISM_AZIMUTH_MAX - ISM_AZIMUTH_MIN ); - } - - if ( ism_total_brate > IVAS_SID_5k2 && fabsf( diff ) > IVAS_ISM_DTX_HO_MAX * CNG_MD_MAX_DIFF_AZIMUTH ) - { - /* skip the smoothing */ - } - else if ( fabsf( diff ) > CNG_MD_MAX_DIFF_AZIMUTH ) - { - hIsmMetaData->azimuth = hIsmMetaData->last_azimuth + sign( diff ) * CNG_MD_MAX_DIFF_AZIMUTH; - } - else if ( diff != 0 ) - { - hIsmMetaData->azimuth = hIsmMetaData->last_true_azimuth; - } - - if ( hIsmMetaData->azimuth > ISM_AZIMUTH_MAX ) - { - hIsmMetaData->azimuth -= ( ISM_AZIMUTH_MAX - ISM_AZIMUTH_MIN ); - } - - /* smooth elevation */ - diff = hIsmMetaData->last_true_elevation - hIsmMetaData->last_elevation; - - if ( ism_total_brate > IVAS_SID_5k2 && diff > IVAS_ISM_DTX_HO_MAX * CNG_MD_MAX_DIFF_ELEVATION ) - { - /* skip the smoothing */ - } - else if ( fabsf( diff ) > CNG_MD_MAX_DIFF_ELEVATION ) - { - hIsmMetaData->elevation = hIsmMetaData->last_elevation + sign( diff ) * CNG_MD_MAX_DIFF_ELEVATION; - } - } - - return; -} -#else static void ism_metadata_smooth_fx( ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ const Word32 ism_total_brate, /* i : ISms total bitrate */ @@ -222,7 +155,6 @@ static void ism_metadata_smooth_fx( return; } -#endif /*-------------------------------------------------------------------------* @@ -231,949 +163,445 @@ static void ism_metadata_smooth_fx( * decode and dequantize ISM metadata *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_metadata_dec( - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t nchan_ism, /* i : number of ISM channels */ - int16_t *nchan_transport, /* o : number of transport channels */ +ivas_error ivas_ism_metadata_dec_fx( + const Word32 ism_total_brate, /* i : ISM total bitrate */ + const Word16 nchan_ism, /* i : number of ISM channels */ + Word16 *nchan_transport, /* o : number of transport channels */ ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ - const int16_t bfi, /* i : bfi flag */ - int16_t nb_bits_metadata[], /* o : number of metadata bits */ + const Word16 bfi, /* i : bfi flag */ + Word16 nb_bits_metadata[], /* o : number of metadata bits */ ISM_MODE ism_mode, /* i : ISM mode */ ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ - int16_t *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ - int16_t *ism_extmeta_cnt, /* i/o: Number of change frames observed */ - DEC_CORE_HANDLE st0 /* i : core-coder handle */ -) + Word16 *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ + Word16 *ism_extmeta_cnt, /* i/o: Number of change frames observed */ + DEC_CORE_HANDLE st0 ) /* i : core-coder handle */ { - int16_t ch, nb_bits_start = 0, last_bit_pos; - int16_t idx_radius; - int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; - int16_t ism_extmeta_bitstream; - int16_t non_diegetic_flag_global; - float yaw, pitch, radius; - int16_t flag_abs_radius; - int16_t flag_abs_orientation; - int16_t flag_abs_position; - int16_t idx_angle1; - int16_t idx_angle2; - int16_t next_bit_pos_orig; - uint16_t i, bstr_meta[MAX_BITS_ISM_METADATA], *bstr_orig; + Word16 ch, nb_bits_start = 0, last_bit_pos; + Word16 idx_radius; + Word32 element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; + Word16 ism_extmeta_bitstream; + Word16 non_diegetic_flag_global; + Word32 yaw_fx, pitch_fx; // Q22 + Word16 radius_fx; // Q9 + Word16 flag_abs_radius; + Word16 flag_abs_orientation; + Word16 flag_abs_position; + Word16 idx_angle1; + Word16 idx_angle2; + Word16 next_bit_pos_orig; + UWord16 i, bstr_meta[MAX_BITS_ISM_METADATA], *bstr_orig; ISM_METADATA_HANDLE hIsmMetaData; - int16_t nchan_transport_prev, ism_metadata_flag_global; - int16_t null_metadata_flag[MAX_NUM_OBJECTS]; - int16_t lowrate_metadata_flag[MAX_NUM_OBJECTS]; - int16_t ism_imp[MAX_NUM_OBJECTS]; - int16_t nbands, nblocks; - int16_t md_diff_flag[MAX_NUM_OBJECTS]; + Word16 nchan_transport_prev, ism_metadata_flag_global; + Word16 null_metadata_flag[MAX_NUM_OBJECTS]; + Word16 lowrate_metadata_flag[MAX_NUM_OBJECTS]; + Word16 ism_imp[MAX_NUM_OBJECTS]; + Word16 nbands, nblocks; + Word16 md_diff_flag[MAX_NUM_OBJECTS]; ivas_error error; + Word32 res_dec, res_frac; + move16(); push_wmops( "ism_meta_dec" ); /* initialization */ ism_metadata_flag_global = 0; + move16(); nchan_transport_prev = *nchan_transport; - - last_bit_pos = (int16_t) ( ( ism_total_brate / FRAMES_PER_SEC ) - 1 ); + move16(); + iDiv_and_mod_32( ism_total_brate, FRAMES_PER_SEC, &res_dec, &res_frac, 0 ); + last_bit_pos = extract_l( L_sub( res_dec, 1 ) ); bstr_orig = st0->bit_stream; next_bit_pos_orig = st0->next_bit_pos; + move16(); st0->next_bit_pos = 0; + move16(); ism_extmeta_bitstream = 0; + move16(); non_diegetic_flag_global = 0; - set_s( null_metadata_flag, 0, nchan_ism ); - set_s( lowrate_metadata_flag, 0, nchan_ism ); + move16(); + set16_fx( null_metadata_flag, 0, nchan_ism ); + set16_fx( lowrate_metadata_flag, 0, nchan_ism ); /* reverse the bitstream for easier reading of indices */ - for ( i = 0; i < min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) + FOR( i = 0; i < s_min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) { bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; + move16(); } st0->bit_stream = bstr_meta; st0->total_brate = ism_total_brate; /* needed for BER detection in get_next_indice() */ + move32(); - if ( !bfi ) + IF( !bfi ) { /*----------------------------------------------------------------* * Read ISM common signaling *----------------------------------------------------------------*/ - if ( ism_mode == ISM_SBA_MODE_DISC ) + test(); + IF( EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) { /* number of objects was read in ivas_dec_setup() */ - st0->next_bit_pos += NO_BITS_MASA_ISM_NO_OBJ; + st0->next_bit_pos = add( st0->next_bit_pos, NO_BITS_MASA_ISM_NO_OBJ ); + move32(); } - else if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) + ELSE IF( NE_32( ism_mode, ISM_MASA_MODE_DISC ) && NE_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { /* number of objects was read in ivas_dec_setup() */ - st0->next_bit_pos += nchan_ism; + st0->next_bit_pos = add( st0->next_bit_pos, nchan_ism ); + move16(); ism_mode = ivas_ism_mode_select( nchan_ism, ism_total_brate ); } - if ( ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) { *nchan_transport = MAX_PARAM_ISM_WAVE; + move16(); } - else if ( ism_mode == ISM_MODE_DISC ) + ELSE IF( EQ_32( ism_mode, ISM_MODE_DISC ) ) { *nchan_transport = nchan_ism; + move16(); } - if ( *nchan_transport != nchan_transport_prev ) + IF( NE_32( *nchan_transport, nchan_transport_prev ) ) { return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); } /* read extended metadata presence flag */ - if ( ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) && ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) + test(); + test(); + IF( ( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) && GE_32( ism_total_brate, ISM_EXTENDED_METADATA_BRATE ) ) { - ism_extmeta_bitstream = get_next_indice( st0, ISM_EXTENDED_METADATA_BITS ); + ism_extmeta_bitstream = get_next_indice_fx( st0, ISM_EXTENDED_METADATA_BITS ); /* read global non-diegetic object flag */ - if ( ism_extmeta_bitstream ) + IF( ism_extmeta_bitstream ) { - non_diegetic_flag_global = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); + non_diegetic_flag_global = get_next_indice_fx( st0, ISM_METADATA_IS_NDP_BITS ); } } /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ - if ( *ism_extmeta_active == -1 || *ism_extmeta_active == ism_extmeta_bitstream ) /* If first frame or bitstream matches internal state */ + test(); + IF( EQ_16( *ism_extmeta_active, -1 ) || EQ_16( *ism_extmeta_active, ism_extmeta_bitstream ) ) /* If first frame or bitstream matches internal state */ { *ism_extmeta_active = ism_extmeta_bitstream; + move16(); *ism_extmeta_cnt = 0; + move16(); } - else + ELSE { ( *ism_extmeta_cnt )++; - if ( *ism_extmeta_cnt == ISM_METADATA_RS_MAX_FRAMES ) /* ISM_METADATA_RS_MAX_FRAMES change frames observed - update state */ + IF( EQ_16( *ism_extmeta_cnt, ISM_METADATA_RS_MAX_FRAMES ) ) /* ISM_METADATA_RS_MAX_FRAMES change frames observed - update state */ { *ism_extmeta_active = ism_extmeta_bitstream; + move16(); *ism_extmeta_cnt = 0; + move16(); } } /* Read ISM metadata flags (one per object) */ - for ( ch = 0; ch < *nchan_transport; ch++ ) + FOR( ch = 0; ch < *nchan_transport; ch++ ) { - if ( ism_mode == ISM_SBA_MODE_DISC ) + test(); + IF( EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) { - ism_imp[ch] = get_next_indice( st0, 1 ); + ism_imp[ch] = get_next_indice_fx( st0, 1 ); + move16(); } - else if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + ELSE IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { /* ISM importance flag is already read in ivas_masa_decode() */ ism_imp[ch] = hIsmMeta[ch]->ism_imp; + move16(); } - else + ELSE { - ism_imp[ch] = get_next_indice( st0, ISM_METADATA_FLAG_BITS ); + ism_imp[ch] = get_next_indice_fx( st0, ISM_METADATA_FLAG_BITS ); + move16(); } - if ( ism_imp[ch] > ISM_NO_META ) + IF( GT_16( ism_imp[ch], ISM_NO_META ) ) { hIsmMeta[ch]->ism_metadata_flag = 1; + move16(); } - else + ELSE { hIsmMeta[ch]->ism_metadata_flag = 0; + move16(); } - ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + ism_metadata_flag_global = s_or( ism_metadata_flag_global, hIsmMeta[ch]->ism_metadata_flag ); } - for ( ; ch < nchan_ism; ch++ ) + FOR( ; ch < nchan_ism; ch++ ) { hIsmMeta[ch]->ism_metadata_flag = 1; - ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; + move16(); + ism_metadata_flag_global = s_or( ism_metadata_flag_global, hIsmMeta[ch]->ism_metadata_flag ); } /* read ISM_NO_META class signalling */ - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) + test(); + IF( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) { - for ( ch = 0; ch < *nchan_transport; ch++ ) + FOR( ch = 0; ch < *nchan_transport; ch++ ) { - if ( ism_imp[ch] == ISM_NO_META ) + IF( EQ_16( ism_imp[ch], ISM_NO_META ) ) { /* low-rate ISM_NO_META frame */ - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { null_metadata_flag[ch] = hIsmMeta[ch]->ism_md_null_flag; + move16(); } - else + ELSE { - null_metadata_flag[ch] = get_next_indice( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); + null_metadata_flag[ch] = get_next_indice_fx( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); + move16(); } } } - for ( ch = 0; ch < *nchan_transport; ch++ ) + FOR( ch = 0; ch < *nchan_transport; ch++ ) { - if ( ism_imp[ch] == ISM_NO_META ) + IF( EQ_16( ism_imp[ch], ISM_NO_META ) ) { - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { lowrate_metadata_flag[ch] = hIsmMeta[ch]->ism_md_lowrate_flag; + move16(); if ( null_metadata_flag[ch] == 0 ) { - ism_metadata_flag_global |= lowrate_metadata_flag[ch]; + ism_metadata_flag_global = s_or( ism_metadata_flag_global, lowrate_metadata_flag[ch] ); } } - else if ( ism_mode != ISM_SBA_MODE_DISC ) + ELSE IF( NE_32( ism_mode, ISM_SBA_MODE_DISC ) ) { - if ( null_metadata_flag[ch] ) + IF( null_metadata_flag[ch] ) { /* read the true ISM class */ - ism_imp[ch] = get_next_indice( st0, ISM_METADATA_FLAG_BITS ); + ism_imp[ch] = get_next_indice_fx( st0, ISM_METADATA_FLAG_BITS ); + move16(); } - else + ELSE { /* read presence of MD in low-rate ISM_NO_META frame flag */ - lowrate_metadata_flag[ch] = get_next_indice( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); + lowrate_metadata_flag[ch] = get_next_indice_fx( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); + move16(); - ism_metadata_flag_global |= lowrate_metadata_flag[ch]; + ism_metadata_flag_global = s_or( ism_metadata_flag_global, lowrate_metadata_flag[ch] ); } } } } } - if ( ism_metadata_flag_global ) + IF( ism_metadata_flag_global ) { /*----------------------------------------------------------------* * Metadata decoding and dequantization, loop over all objects *----------------------------------------------------------------*/ - int16_t total_bits_metadata = 0, bits_metadata_ism = 0; - int16_t nb_bits_objcod_read; + Word16 total_bits_metadata = 0, bits_metadata_ism = 0; + move16(); + move16(); + Word16 nb_bits_objcod_read; - if ( ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) { nb_bits_start = st0->next_bit_pos; + move16(); } - for ( ch = 0; ch < nchan_ism; ch++ ) + FOR( ch = 0; ch < nchan_ism; ch++ ) { hIsmMetaData = hIsmMeta[ch]; - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + test(); + test(); + if ( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { nb_bits_start = st0->next_bit_pos; + move16(); } flag_abs_position = 0; + move16(); flag_abs_orientation = 0; + move16(); flag_abs_radius = 0; + move16(); - if ( hIsmMeta[ch]->ism_metadata_flag || lowrate_metadata_flag[ch] ) + test(); + IF( hIsmMeta[ch]->ism_metadata_flag || lowrate_metadata_flag[ch] ) { - if ( non_diegetic_flag_global ) + IF( non_diegetic_flag_global ) { /* read non-diegetic flag for each object */ - hIsmMetaData->non_diegetic_flag = get_next_indice( st0, ISM_METADATA_IS_NDP_BITS ); + hIsmMetaData->non_diegetic_flag = get_next_indice_fx( st0, ISM_METADATA_IS_NDP_BITS ); + move16(); } - else + ELSE { hIsmMetaData->non_diegetic_flag = 0; + move16(); } - if ( hIsmMetaData->non_diegetic_flag ) + IF( hIsmMetaData->non_diegetic_flag ) { /* Panning gain decoding */ - decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->non_diegetic_flag, &flag_abs_position ); + decode_angle_indices_fx( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->non_diegetic_flag, &flag_abs_position ); idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; - idx_angle2 = 1 << ( ISM_ELEVATION_NBITS - 1 ); + move16(); + idx_angle2 = shl( 1, ( ISM_ELEVATION_NBITS - 1 ) ); /* Panning gain dequantization */ - hIsmMetaData->azimuth = ism_dequant_meta( idx_angle1, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - hIsmMetaData->elevation = 0.0f; + hIsmMetaData->azimuth_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); + hIsmMetaData->elevation_fx = 0; + move32(); + move32(); /* save for smoothing metadata evolution */ - hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; - hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; + hIsmMetaData->last_true_azimuth_fx = hIsmMetaData->azimuth_fx; + move32(); + hIsmMetaData->last_true_elevation_fx = hIsmMetaData->elevation_fx; + move32(); } - else + ELSE { - decode_angle_indices( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_position ); + decode_angle_indices_fx( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_position ); idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; + move16(); idx_angle2 = hIsmMetaData->position_angle.last_angle2_idx; + move16(); /* Azimuth/Elevation dequantization */ - if ( ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) { hParamIsm->azi_index[ch] = idx_angle1; + move16(); hParamIsm->ele_index[ch] = idx_angle2; + move16(); } - else /* ISM_MODE_DISC */ + ELSE /* ISM_MODE_DISC */ { - hIsmMetaData->azimuth = ism_dequant_meta( idx_angle1, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - hIsmMetaData->elevation = ism_dequant_meta( idx_angle2, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); + hIsmMetaData->azimuth_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); + hIsmMetaData->elevation_fx = ism_dequant_meta_fx( idx_angle2, ism_elevation_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_ELEVATION_NBITS ) ); + move32(); + move32(); /* radius/raw/pitch dequantization */ - if ( ism_extmeta_bitstream ) + IF( ism_extmeta_bitstream ) { - decode_angle_indices( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_orientation ); + decode_angle_indices_fx( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_orientation ); idx_angle1 = hIsmMetaData->orientation_angle.last_angle1_idx; + move16(); idx_angle2 = hIsmMetaData->orientation_angle.last_angle2_idx; - yaw = ism_dequant_meta( idx_angle1, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - pitch = ism_dequant_meta( idx_angle2, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); + move16(); + yaw_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); + pitch_fx = ism_dequant_meta_fx( idx_angle2, ism_elevation_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_ELEVATION_NBITS ) ); - idx_radius = decode_radius( st0, &hIsmMetaData->last_radius_idx, &flag_abs_radius ); - radius = usdequant( idx_radius, ISM_RADIUS_MIN, ISM_RADIUS_DELTA ); - if ( *ism_extmeta_active == 1 ) + idx_radius = decode_radius_fx( st0, &hIsmMetaData->last_radius_idx, &flag_abs_radius ); + radius_fx = usdequant_fx( idx_radius, ISM_RADIUS_MIN_Q9, ISM_RADIUS_DELTA_Q8 ); + IF( EQ_16( *ism_extmeta_active, 1 ) ) { - hIsmMetaData->yaw = yaw; - hIsmMetaData->pitch = pitch; - hIsmMetaData->radius = radius; + hIsmMetaData->yaw_fx = yaw_fx; + move32(); + hIsmMetaData->pitch_fx = pitch_fx; + move32(); + hIsmMetaData->radius_fx = radius_fx; + move16(); } } - else + ELSE { - if ( *ism_extmeta_active == 0 ) + IF( *ism_extmeta_active == 0 ) { - hIsmMetaData->yaw = 0.0f; - hIsmMetaData->pitch = 0.0f; - hIsmMetaData->radius = 1.0f; + hIsmMetaData->yaw_fx = 0; + move32(); + hIsmMetaData->pitch_fx = 0; + move32(); + hIsmMetaData->radius_fx = 512; /* 1.0f in Q9 */ + move16(); } } } /* save for smoothing metadata evolution */ - hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; - hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; + hIsmMetaData->last_true_azimuth_fx = hIsmMetaData->azimuth_fx; + move32(); + hIsmMetaData->last_true_elevation_fx = hIsmMetaData->elevation_fx; + move32(); } } /* save number of metadata bits read */ - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + test(); + test(); + IF( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { - nb_bits_metadata[ch] = st0->next_bit_pos - nb_bits_start; + nb_bits_metadata[ch] = sub( st0->next_bit_pos, nb_bits_start ); + move16(); } } - if ( ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) { - hParamIsm->flag_noisy_speech = get_next_indice( st0, 1 ); + hParamIsm->flag_noisy_speech = get_next_indice_fx( st0, 1 ); + move16(); /* Loop over multiwave to read the object indices from bitstream */ - for ( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) + FOR( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) { - for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + FOR( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) { - for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + FOR( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) { - hParamIsm->obj_indices[nbands][nblocks][ch] = get_next_indice( st0, PARAM_ISM_OBJ_IND_NBITS ); + hParamIsm->obj_indices[nbands][nblocks][ch] = get_next_indice_fx( st0, PARAM_ISM_OBJ_IND_NBITS ); + move16(); } } } /* Loop over all bands to read power ratio's from bitstream */ - for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) + FOR( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) { - for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) + FOR( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) { - hParamIsm->power_ratios_idx[nbands][nblocks] = get_next_indice( st0, PARAM_ISM_POW_RATIO_NBITS ); + hParamIsm->power_ratios_idx[nbands][nblocks] = get_next_indice_fx( st0, PARAM_ISM_POW_RATIO_NBITS ); + move16(); } } /* save number of metadata bits read */ - total_bits_metadata = st0->next_bit_pos - nb_bits_start; + total_bits_metadata = sub( st0->next_bit_pos, nb_bits_start ); /* bits per ISM*/ - bits_metadata_ism = (int16_t) ( total_bits_metadata / *nchan_transport ); + + // total_bits_metadata / *nchan_transport + Word16 tmp, tmp_e; + tmp = BASOP_Util_Divide1616_Scale( total_bits_metadata, *nchan_transport, &tmp_e ); + bits_metadata_ism = shr( tmp, sub( 15, tmp_e ) ); // Q0 nb_bits_objcod_read = 0; - for ( ch = 0; ch < *nchan_transport; ch++ ) + move16(); + FOR( ch = 0; ch < *nchan_transport; ch++ ) { - if ( ch == *nchan_transport - 1 ) + IF( EQ_16( ch, sub( *nchan_transport, 1 ) ) ) { - nb_bits_metadata[ch] = total_bits_metadata - nb_bits_objcod_read; + nb_bits_metadata[ch] = sub( total_bits_metadata, nb_bits_objcod_read ); + move16(); } - else - { - nb_bits_metadata[ch] = bits_metadata_ism; - nb_bits_objcod_read += bits_metadata_ism; - } - } - } - } - else - { - set_s( nb_bits_metadata, 0, *nchan_transport ); - } - } - else /* BFI */ - { - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; - } - - set_s( nb_bits_metadata, 0, *nchan_transport ); - - if ( ism_mode == ISM_MODE_PARAM ) - { - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hParamIsm->azi_index[ch] = hParamIsm->azi_index[ch] + hParamIsm->last_az_sgn[ch] * hParamIsm->last_az_diff[ch]; - hParamIsm->ele_index[ch] = hParamIsm->ele_index[ch] + hParamIsm->last_el_sgn[ch] * hParamIsm->last_el_diff[ch]; - hIsmMeta[ch]->position_angle.last_angle1_idx = hParamIsm->azi_index[ch]; - hIsmMeta[ch]->position_angle.last_angle2_idx = hParamIsm->ele_index[ch]; - } - } - } - - if ( hISMDTX.ism_dtx_hangover_cnt < IVAS_ISM_DTX_HO_MAX ) - { - ism_metadata_smooth( hIsmMeta, ism_total_brate, nchan_ism ); - hISMDTX.ism_dtx_hangover_cnt += 1; - } - - if ( ism_mode == ISM_SBA_MODE_DISC ) - { - /* set the bitstream pointer to its original position */ - nb_bits_metadata[0] = st0->next_bit_pos; - st0->bit_stream = bstr_orig; - st0->next_bit_pos = next_bit_pos_orig; - - /* updates*/ - set_s( md_diff_flag, 1, nchan_ism ); - - update_last_metadata( nchan_ism, hIsmMeta, md_diff_flag ); - pop_wmops(); - return IVAS_ERR_OK; - } - - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - ism_metadata_flag_global = 1; - } - - /*----------------------------------------------------------------* - * Configuration and decision about bitrates per channel - *----------------------------------------------------------------*/ - - if ( !bfi ) - { - int16_t masa_ism_flag = 0; - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - masa_ism_flag = 1; - - for ( ch = 0; ch < *nchan_transport; ch++ ) - { - element_brate[ch] = hSCE[ch]->element_brate; - } - } - - if ( ( error = ivas_ism_config( ism_total_brate, *nchan_transport, nchan_ism, hIsmMeta, ism_extmeta_bitstream, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, masa_ism_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( ch = 0; ch < *nchan_transport; ch++ ) - { - hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; - - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( ism_imp[ch] == ISM_NO_META && ( ( total_brate[ch] < ACELP_8k00 && element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) || - ( total_brate[ch] <= ACELP_16k_LOW_LIMIT && element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) ) ) - { - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 1; - } - } - - if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) - { - hSCE[ch]->element_brate = element_brate[ch]; - } - hSCE[ch]->hCoreCoder[0]->total_brate = total_brate[ch]; - } - - for ( ; ch < nchan_ism; ch++ ) - { - hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; - } - } - else - { - for ( ch = 0; ch < *nchan_transport; ch++ ) - { - hSCE[ch]->element_brate = hSCE[ch]->last_element_brate; - hSCE[ch]->hCoreCoder[0]->total_brate = hSCE[ch]->hCoreCoder[0]->last_total_brate; - } - } - - /*----------------------------------------------------------------* - * Set bitsream pointers - *----------------------------------------------------------------*/ - - /* set the bitstream pointer to its original position */ - st0->bit_stream = bstr_orig; - st0->next_bit_pos = next_bit_pos_orig; - - /* set bitstream pointers for each ISM */ - for ( ch = 1; ch < *nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->bit_stream = hSCE[ch - 1]->hCoreCoder[0]->bit_stream + ( hSCE[ch - 1]->hCoreCoder[0]->total_brate / FRAMES_PER_SEC ); - } - - /*----------------------------------------------------------------* - * Updates - *----------------------------------------------------------------*/ - - set_s( md_diff_flag, 1, nchan_ism ); - - update_last_metadata( nchan_ism, hIsmMeta, md_diff_flag ); - - for ( ch = 0; ch < *nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->cng_ism_flag = 0; - } - - pop_wmops(); - - return IVAS_ERR_OK; -} -#else -ivas_error ivas_ism_metadata_dec_fx( - const Word32 ism_total_brate, /* i : ISM total bitrate */ - const Word16 nchan_ism, /* i : number of ISM channels */ - Word16 *nchan_transport, /* o : number of transport channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_DEC_HANDLE hSCE[], /* i/o: SCE decoder handles */ - const Word16 bfi, /* i : bfi flag */ - Word16 nb_bits_metadata[], /* o : number of metadata bits */ - ISM_MODE ism_mode, /* i : ISM mode */ - ISM_DTX_DATA_DEC hISMDTX, /* i/o: ISM DTX structure */ - const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Config Handle */ - Word16 *ism_extmeta_active, /* i/o: Extended metadata active in renderer */ - Word16 *ism_extmeta_cnt, /* i/o: Number of change frames observed */ - DEC_CORE_HANDLE st0 ) /* i : core-coder handle */ -{ - Word16 ch, nb_bits_start = 0, last_bit_pos; - Word16 idx_radius; - Word32 element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; - Word16 ism_extmeta_bitstream; - Word16 non_diegetic_flag_global; - Word32 yaw_fx, pitch_fx; // Q22 - Word16 radius_fx; // Q9 - Word16 flag_abs_radius; - Word16 flag_abs_orientation; - Word16 flag_abs_position; - Word16 idx_angle1; - Word16 idx_angle2; - Word16 next_bit_pos_orig; - UWord16 i, bstr_meta[MAX_BITS_ISM_METADATA], *bstr_orig; - ISM_METADATA_HANDLE hIsmMetaData; - Word16 nchan_transport_prev, ism_metadata_flag_global; - Word16 null_metadata_flag[MAX_NUM_OBJECTS]; - Word16 lowrate_metadata_flag[MAX_NUM_OBJECTS]; - Word16 ism_imp[MAX_NUM_OBJECTS]; - Word16 nbands, nblocks; - Word16 md_diff_flag[MAX_NUM_OBJECTS]; - ivas_error error; - Word32 res_dec, res_frac; - move16(); - - push_wmops( "ism_meta_dec" ); - - /* initialization */ - ism_metadata_flag_global = 0; - move16(); - nchan_transport_prev = *nchan_transport; - move16(); - iDiv_and_mod_32( ism_total_brate, FRAMES_PER_SEC, &res_dec, &res_frac, 0 ); - last_bit_pos = extract_l( L_sub( res_dec, 1 ) ); - bstr_orig = st0->bit_stream; - next_bit_pos_orig = st0->next_bit_pos; - move16(); - st0->next_bit_pos = 0; - move16(); - ism_extmeta_bitstream = 0; - move16(); - non_diegetic_flag_global = 0; - move16(); - set16_fx( null_metadata_flag, 0, nchan_ism ); - set16_fx( lowrate_metadata_flag, 0, nchan_ism ); - - /* reverse the bitstream for easier reading of indices */ - FOR( i = 0; i < s_min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) - { - bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; - move16(); - } - st0->bit_stream = bstr_meta; - st0->total_brate = ism_total_brate; /* needed for BER detection in get_next_indice() */ - move32(); - - IF( !bfi ) - { - /*----------------------------------------------------------------* - * Read ISM common signaling - *----------------------------------------------------------------*/ - test(); - IF( EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) - { - /* number of objects was read in ivas_dec_setup() */ - st0->next_bit_pos = add( st0->next_bit_pos, NO_BITS_MASA_ISM_NO_OBJ ); - move32(); - } - ELSE IF( NE_32( ism_mode, ISM_MASA_MODE_DISC ) && NE_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - /* number of objects was read in ivas_dec_setup() */ - st0->next_bit_pos = add( st0->next_bit_pos, nchan_ism ); - move16(); - - ism_mode = ivas_ism_mode_select( nchan_ism, ism_total_brate ); - } - - IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) - { - *nchan_transport = MAX_PARAM_ISM_WAVE; - move16(); - } - ELSE IF( EQ_32( ism_mode, ISM_MODE_DISC ) ) - { - *nchan_transport = nchan_ism; - move16(); - } - - IF( NE_32( *nchan_transport, nchan_transport_prev ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "wrong number of objects signalled!" ); - } - - /* read extended metadata presence flag */ - test(); - test(); - IF( ( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) && GE_32( ism_total_brate, ISM_EXTENDED_METADATA_BRATE ) ) - { - ism_extmeta_bitstream = get_next_indice_fx( st0, ISM_EXTENDED_METADATA_BITS ); - - /* read global non-diegetic object flag */ - IF( ism_extmeta_bitstream ) - { - non_diegetic_flag_global = get_next_indice_fx( st0, ISM_METADATA_IS_NDP_BITS ); - } - } - - /* Apply hysteresis in case rate switching causes fluctuation in presence of extended metadata */ - test(); - IF( EQ_16( *ism_extmeta_active, -1 ) || EQ_16( *ism_extmeta_active, ism_extmeta_bitstream ) ) /* If first frame or bitstream matches internal state */ - { - *ism_extmeta_active = ism_extmeta_bitstream; - move16(); - *ism_extmeta_cnt = 0; - move16(); - } - ELSE - { - ( *ism_extmeta_cnt )++; - IF( EQ_16( *ism_extmeta_cnt, ISM_METADATA_RS_MAX_FRAMES ) ) /* ISM_METADATA_RS_MAX_FRAMES change frames observed - update state */ - { - *ism_extmeta_active = ism_extmeta_bitstream; - move16(); - *ism_extmeta_cnt = 0; - move16(); - } - } - - /* Read ISM metadata flags (one per object) */ - FOR( ch = 0; ch < *nchan_transport; ch++ ) - { - test(); - IF( EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) - { - ism_imp[ch] = get_next_indice_fx( st0, 1 ); - move16(); - } - ELSE IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - /* ISM importance flag is already read in ivas_masa_decode() */ - ism_imp[ch] = hIsmMeta[ch]->ism_imp; - move16(); - } - ELSE - { - ism_imp[ch] = get_next_indice_fx( st0, ISM_METADATA_FLAG_BITS ); - move16(); - } - - IF( GT_16( ism_imp[ch], ISM_NO_META ) ) - { - hIsmMeta[ch]->ism_metadata_flag = 1; - move16(); - } - ELSE - { - hIsmMeta[ch]->ism_metadata_flag = 0; - move16(); - } - - ism_metadata_flag_global = s_or( ism_metadata_flag_global, hIsmMeta[ch]->ism_metadata_flag ); - } - - FOR( ; ch < nchan_ism; ch++ ) - { - hIsmMeta[ch]->ism_metadata_flag = 1; - move16(); - ism_metadata_flag_global = s_or( ism_metadata_flag_global, hIsmMeta[ch]->ism_metadata_flag ); - } - - /* read ISM_NO_META class signalling */ - test(); - IF( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) ) - { - FOR( ch = 0; ch < *nchan_transport; ch++ ) - { - IF( EQ_16( ism_imp[ch], ISM_NO_META ) ) - { - /* low-rate ISM_NO_META frame */ - test(); - IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - null_metadata_flag[ch] = hIsmMeta[ch]->ism_md_null_flag; - move16(); - } - ELSE - { - null_metadata_flag[ch] = get_next_indice_fx( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); - move16(); - } - } - } - - FOR( ch = 0; ch < *nchan_transport; ch++ ) - { - IF( EQ_16( ism_imp[ch], ISM_NO_META ) ) - { - test(); - IF( EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - lowrate_metadata_flag[ch] = hIsmMeta[ch]->ism_md_lowrate_flag; - move16(); - - if ( null_metadata_flag[ch] == 0 ) - { - ism_metadata_flag_global = s_or( ism_metadata_flag_global, lowrate_metadata_flag[ch] ); - } - } - ELSE IF( NE_32( ism_mode, ISM_SBA_MODE_DISC ) ) - { - IF( null_metadata_flag[ch] ) - { - /* read the true ISM class */ - ism_imp[ch] = get_next_indice_fx( st0, ISM_METADATA_FLAG_BITS ); - move16(); - } - ELSE - { - /* read presence of MD in low-rate ISM_NO_META frame flag */ - lowrate_metadata_flag[ch] = get_next_indice_fx( st0, ISM_METADATA_INACTIVE_FLAG_BITS ); - move16(); - - ism_metadata_flag_global = s_or( ism_metadata_flag_global, lowrate_metadata_flag[ch] ); - } - } - } - } - } - - IF( ism_metadata_flag_global ) - { - /*----------------------------------------------------------------* - * Metadata decoding and dequantization, loop over all objects - *----------------------------------------------------------------*/ - - Word16 total_bits_metadata = 0, bits_metadata_ism = 0; - move16(); - move16(); - Word16 nb_bits_objcod_read; - - IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) - { - nb_bits_start = st0->next_bit_pos; - move16(); - } - - FOR( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMetaData = hIsmMeta[ch]; - test(); - test(); - test(); - if ( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - nb_bits_start = st0->next_bit_pos; - move16(); - } - flag_abs_position = 0; - move16(); - flag_abs_orientation = 0; - move16(); - flag_abs_radius = 0; - move16(); - - test(); - IF( hIsmMeta[ch]->ism_metadata_flag || lowrate_metadata_flag[ch] ) - { - IF( non_diegetic_flag_global ) - { - /* read non-diegetic flag for each object */ - hIsmMetaData->non_diegetic_flag = get_next_indice_fx( st0, ISM_METADATA_IS_NDP_BITS ); - move16(); - } - ELSE - { - hIsmMetaData->non_diegetic_flag = 0; - move16(); - } - - IF( hIsmMetaData->non_diegetic_flag ) - { - /* Panning gain decoding */ - decode_angle_indices_fx( st0, &( hIsmMetaData->position_angle ), hIsmMetaData->non_diegetic_flag, &flag_abs_position ); - idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; - move16(); - idx_angle2 = shl( 1, ( ISM_ELEVATION_NBITS - 1 ) ); - - /* Panning gain dequantization */ - hIsmMetaData->azimuth_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); - hIsmMetaData->elevation_fx = 0; - move32(); - move32(); - - /* save for smoothing metadata evolution */ - hIsmMetaData->last_true_azimuth_fx = hIsmMetaData->azimuth_fx; - move32(); - hIsmMetaData->last_true_elevation_fx = hIsmMetaData->elevation_fx; - move32(); - } - ELSE - { - decode_angle_indices_fx( st0, &( hIsmMetaData->position_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_position ); - idx_angle1 = hIsmMetaData->position_angle.last_angle1_idx; - move16(); - idx_angle2 = hIsmMetaData->position_angle.last_angle2_idx; - move16(); - - /* Azimuth/Elevation dequantization */ - IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) - { - hParamIsm->azi_index[ch] = idx_angle1; - move16(); - hParamIsm->ele_index[ch] = idx_angle2; - move16(); - } - ELSE /* ISM_MODE_DISC */ - { - hIsmMetaData->azimuth_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); - hIsmMetaData->elevation_fx = ism_dequant_meta_fx( idx_angle2, ism_elevation_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_ELEVATION_NBITS ) ); - move32(); - move32(); - - /* radius/raw/pitch dequantization */ - IF( ism_extmeta_bitstream ) - { - decode_angle_indices_fx( st0, &( hIsmMetaData->orientation_angle ), hIsmMeta[ch]->non_diegetic_flag, &flag_abs_orientation ); - idx_angle1 = hIsmMetaData->orientation_angle.last_angle1_idx; - move16(); - idx_angle2 = hIsmMetaData->orientation_angle.last_angle2_idx; - move16(); - yaw_fx = ism_dequant_meta_fx( idx_angle1, ism_azimuth_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_AZIMUTH_NBITS ) ); - pitch_fx = ism_dequant_meta_fx( idx_angle2, ism_elevation_borders_fx, ISM_Q_STEP_FX, ISM_Q_STEP_BORDER_FX, ( 1 << ISM_ELEVATION_NBITS ) ); - - idx_radius = decode_radius_fx( st0, &hIsmMetaData->last_radius_idx, &flag_abs_radius ); - radius_fx = usdequant_fx( idx_radius, ISM_RADIUS_MIN_Q9, ISM_RADIUS_DELTA_Q8 ); - IF( EQ_16( *ism_extmeta_active, 1 ) ) - { - hIsmMetaData->yaw_fx = yaw_fx; - move32(); - hIsmMetaData->pitch_fx = pitch_fx; - move32(); - hIsmMetaData->radius_fx = radius_fx; - move16(); - } - } - ELSE - { - IF( *ism_extmeta_active == 0 ) - { - hIsmMetaData->yaw_fx = 0; - move32(); - hIsmMetaData->pitch_fx = 0; - move32(); - hIsmMetaData->radius_fx = 512; /* 1.0f in Q9 */ - move16(); - } - } - } - /* save for smoothing metadata evolution */ - hIsmMetaData->last_true_azimuth_fx = hIsmMetaData->azimuth_fx; - move32(); - hIsmMetaData->last_true_elevation_fx = hIsmMetaData->elevation_fx; - move32(); - } - } - /* save number of metadata bits read */ - test(); - test(); - test(); - IF( EQ_32( ism_mode, ISM_MODE_DISC ) || EQ_32( ism_mode, ISM_SBA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_DISC ) || EQ_32( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - nb_bits_metadata[ch] = sub( st0->next_bit_pos, nb_bits_start ); - move16(); - } - } - - IF( EQ_32( ism_mode, ISM_MODE_PARAM ) ) - { - hParamIsm->flag_noisy_speech = get_next_indice_fx( st0, 1 ); - move16(); - - /* Loop over multiwave to read the object indices from bitstream */ - FOR( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) - { - FOR( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) - { - FOR( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) - { - hParamIsm->obj_indices[nbands][nblocks][ch] = get_next_indice_fx( st0, PARAM_ISM_OBJ_IND_NBITS ); - move16(); - } - } - } - - /* Loop over all bands to read power ratio's from bitstream */ - FOR( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) - { - FOR( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) - { - hParamIsm->power_ratios_idx[nbands][nblocks] = get_next_indice_fx( st0, PARAM_ISM_POW_RATIO_NBITS ); - move16(); - } - } - - /* save number of metadata bits read */ - total_bits_metadata = sub( st0->next_bit_pos, nb_bits_start ); - - /* bits per ISM*/ - - // total_bits_metadata / *nchan_transport - Word16 tmp, tmp_e; - tmp = BASOP_Util_Divide1616_Scale( total_bits_metadata, *nchan_transport, &tmp_e ); - bits_metadata_ism = shr( tmp, sub( 15, tmp_e ) ); // Q0 - - nb_bits_objcod_read = 0; - move16(); - FOR( ch = 0; ch < *nchan_transport; ch++ ) - { - IF( EQ_16( ch, sub( *nchan_transport, 1 ) ) ) - { - nb_bits_metadata[ch] = sub( total_bits_metadata, nb_bits_objcod_read ); - move16(); - } - ELSE + ELSE { nb_bits_metadata[ch] = bits_metadata_ism; move16(); @@ -1353,7 +781,6 @@ ivas_error ivas_ism_metadata_dec_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -1362,7 +789,6 @@ ivas_error ivas_ism_metadata_dec_fx( * Create, allocate, initialize and configure IVAS decoder ISM metadata handles *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ism_metadata_dec_create_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 n_ISms, /* i : number of objects */ @@ -1425,56 +851,6 @@ ivas_error ivas_ism_metadata_dec_create_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_ism_metadata_dec_create( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t n_ISms, /* i : number of objects */ - int32_t element_brate_tmp[] /* o : element bitrate per object */ -) -{ - int16_t ch; - ivas_error error; - - /* allocate ISM metadata handles */ - for ( ch = 0; ch < MAX_NUM_OBJECTS; ch++ ) - { - if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM MetaData\n" ) ); - } - - st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; - st_ivas->hIsmMetaData[ch]->position_angle.last_angle1_idx = 0; - st_ivas->hIsmMetaData[ch]->position_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle1_idx = 0; - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle2_idx = 1 << ( ISM_ELEVATION_NBITS - 1 ); - st_ivas->hIsmMetaData[ch]->last_radius_idx = 8; /* Init to radius 1.0 */ - - st_ivas->hIsmMetaData[ch]->last_true_azimuth = 0; - st_ivas->hIsmMetaData[ch]->last_true_elevation = 0; - st_ivas->hIsmMetaData[ch]->last_azimuth = 0; - st_ivas->hIsmMetaData[ch]->last_elevation = 0; - - st_ivas->hIsmMetaData[ch]->ism_imp = -1; - st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; - st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; - - ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); - } - - if ( element_brate_tmp != NULL ) - { - if ( ( error = ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, n_ISms, n_ISms, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - st_ivas->hISMDTX.ism_dtx_hangover_cnt = IVAS_ISM_DTX_HO_MAX; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -1483,7 +859,6 @@ ivas_error ivas_ism_metadata_dec_create( * Decoding of a position/orientation angle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void decode_angle_indices_fx( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ @@ -1650,154 +1025,6 @@ static void decode_angle_indices_fx( return; } -#else -static void decode_angle_indices( - DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ - ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ - const int16_t non_diegetic_flag, /* i : Non diegetic flag */ - int16_t *flag_abs_angle1 /* o : Azimuth/yaw encoding mode */ -) -{ - int16_t idx_angle1, nbits_diff_angle1, diff, sgn; - int16_t idx_angle2, nbits_diff_angle2; - - /*----------------------------------------------------------------* - * Azimuth/yaw decoding and dequantization - *----------------------------------------------------------------*/ - - /* Decode azimuth/yaw index */ - if ( get_next_indice( st0, 1 ) == 1 ) /* azimuth_abs_flag */ - { - idx_angle1 = get_next_indice( st0, ISM_AZIMUTH_NBITS ); - *flag_abs_angle1 = 1; - } - else - { - diff = 0; - sgn = 1; - - if ( get_next_indice( st0, 1 ) == 0 ) - { - nbits_diff_angle1 = 1; - } - else - { - nbits_diff_angle1 = 1; - - if ( get_next_indice( st0, 1 ) == 1 ) /* negative sign */ - { - sgn = -1; - } - - nbits_diff_angle1++; - - /* read until the stop bit */ - while ( ( nbits_diff_angle1 < ISM_AZIMUTH_NBITS - 1 ) && ( get_next_indice( st0, 1 ) == 1 ) ) - { - diff++; - nbits_diff_angle1++; - } - - if ( nbits_diff_angle1 < ISM_AZIMUTH_NBITS - 1 ) - { - /* count stop bit */ - nbits_diff_angle1++; - } - } - idx_angle1 = angle->last_angle1_idx + sgn * diff; - } - - /* azimuth/yaw is on a circle - check for diff coding for -180° -> 180° and vice versa changes */ - if ( idx_angle1 > ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) - { - idx_angle1 -= ( 1 << ISM_AZIMUTH_NBITS ) - 1; /* +180° -> -180° */ - } - else if ( idx_angle1 < 0 ) - { - idx_angle1 += ( 1 << ISM_AZIMUTH_NBITS ) - 1; /* -180° -> +180° */ - } - - /* +180° == -180° */ - if ( idx_angle1 == ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) - { - idx_angle1 = 0; - } - - /* sanity check in case of FER or BER */ - if ( idx_angle1 < 0 || idx_angle1 > ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) - { - idx_angle1 = angle->last_angle1_idx; - } - - /*----------------------------------------------------------------* - * Elevation/pitch decoding and dequantization - *----------------------------------------------------------------*/ - - if ( non_diegetic_flag == 0 ) - { - /* Decode elevation/pitch index */ - if ( *flag_abs_angle1 == 0 && get_next_indice( st0, 1 ) == 1 ) /* elevation_abs_flag */ - { - idx_angle2 = get_next_indice( st0, ISM_ELEVATION_NBITS ); - } - else - { - diff = 0; - sgn = 1; - - if ( get_next_indice( st0, 1 ) == 0 ) - { - nbits_diff_angle2 = 1; - } - else - { - nbits_diff_angle2 = 1; - - if ( get_next_indice( st0, 1 ) == 1 ) /* negative sign */ - { - sgn = -1; - } - - nbits_diff_angle2++; - - /* read until the stop bit */ - while ( ( nbits_diff_angle2 < ISM_ELEVATION_NBITS ) && ( get_next_indice( st0, 1 ) == 1 ) ) - { - diff++; - nbits_diff_angle2++; - } - - if ( nbits_diff_angle2 < ISM_ELEVATION_NBITS ) - { - /* count stop bit */ - nbits_diff_angle2++; - } - } - - idx_angle2 = angle->last_angle2_idx + sgn * diff; - } - - /* sanity check in case of FER or BER */ - if ( idx_angle2 < 0 || idx_angle2 > ( 1 << ISM_ELEVATION_NBITS ) - 1 ) - { - idx_angle2 = angle->last_angle2_idx; - } - } - else - { - idx_angle2 = angle->last_angle2_idx; /* second MD parameter is not transmitted for non-diegetic object */ - } - - /*----------------------------------------------------------------* - * Final updates - *----------------------------------------------------------------*/ - - angle->last_angle2_idx = idx_angle2; - angle->last_angle1_idx = idx_angle1; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1806,7 +1033,6 @@ static void decode_angle_indices( * Radius decoding and dequantization *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 decode_radius_fx( DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ Word16 *last_radius_idx, /* i/o: last radius index */ @@ -1877,69 +1103,6 @@ static Word16 decode_radius_fx( return idx_radius; } -#else -static int16_t decode_radius( - DEC_CORE_HANDLE st0, /* i/o: bitstream handle */ - int16_t *last_radius_idx, /* i/o: last radius index */ - int16_t *flag_abs_radius /* o : Radius encoding mode */ -) -{ - int16_t idx_radius, nbits_diff_radius, diff, sgn; - - /* Decode radius index */ - if ( get_next_indice( st0, 1 ) == 1 ) /* elevation_abs_flag */ - { - *flag_abs_radius = 1; - idx_radius = get_next_indice( st0, ISM_RADIUS_NBITS ); - } - else - { - diff = 0; - sgn = 1; - - if ( get_next_indice( st0, 1 ) == 0 ) - { - nbits_diff_radius = 1; - } - else - { - nbits_diff_radius = 1; - - if ( get_next_indice( st0, 1 ) == 1 ) /* negative sign */ - { - sgn = -1; - } - - nbits_diff_radius++; - - /* read until the stop bit */ - while ( ( nbits_diff_radius < ISM_RADIUS_NBITS ) && ( get_next_indice( st0, 1 ) == 1 ) ) - { - diff++; - nbits_diff_radius++; - } - - if ( nbits_diff_radius < ISM_RADIUS_NBITS ) - { - /* count stop bit */ - nbits_diff_radius++; - } - } - idx_radius = *last_radius_idx + sgn * diff; - } - - /* sanity check in case of FER or BER */ - if ( idx_radius < 0 || idx_radius > ( 1 << ISM_RADIUS_NBITS ) - 1 ) - { - idx_radius = *last_radius_idx; - } - - /* Final updates */ - *last_radius_idx = idx_radius; - - return idx_radius; -} -#endif /*-------------------------------------------------------------------* @@ -1948,171 +1111,6 @@ static int16_t decode_radius( * Decode ISM metadata in SID frame *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_metadata_sid_dec( - SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE decoder structure */ - const int32_t ism_total_brate, /* i : ISM total bitrate */ - const int16_t bfi, /* i : bfi flag */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t nchan_transport, /* i : number of transport channels*/ - const ISM_MODE ism_mode, /* i : ISM mode */ - int16_t *flag_noisy_speech, /* o : noisy speech flag */ - int16_t *sce_id_dtx, /* o : SCE DTX ID */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - int16_t nb_bits_metadata[] /* o : number of metadata bits */ -) -{ - int16_t i, ch, last_bit_pos; - float q_step, q_step_border; - int16_t idx, idx_azimuth, idx_elevation; - int16_t nBits_azimuth, nBits_elevation, nBits_coh, nBits_sce_id; - int16_t md_diff_flag[MAX_NUM_OBJECTS]; - ISM_MODE ism_mode_bstr; - DEC_CORE_HANDLE st0; - ISM_METADATA_HANDLE hIsmMetaData; - int16_t next_bit_pos_orig; - uint16_t bstr_meta[IVAS_SID_5k2 / FRAMES_PER_SEC], *bstr_orig; - - if ( ism_total_brate == FRAME_NO_DATA ) - { - ism_metadata_smooth( hIsmMeta, ism_total_brate, nchan_ism ); - - return; - } - - /* initialization */ - st0 = hSCE[0]->hCoreCoder[0]; - - last_bit_pos = (int16_t) ( ( ism_total_brate / FRAMES_PER_SEC ) - 1 - SID_FORMAT_NBITS ); - bstr_orig = st0->bit_stream; - next_bit_pos_orig = st0->next_bit_pos; - st0->next_bit_pos = 0; - - /* reverse the bitstream for easier reading of indices */ - for ( i = 0; i < min( MAX_BITS_ISM_METADATA, last_bit_pos ); i++ ) - { - bstr_meta[i] = st0->bit_stream[last_bit_pos - i]; - } - st0->bit_stream = bstr_meta; - st0->total_brate = ism_total_brate; /* needed for BER detection in get_next_indice() */ - - if ( !bfi ) - { - /*----------------------------------------------------------------* - * ISm common signaling - *----------------------------------------------------------------*/ - - /* number of objects was already read in ivas_ism_get_dtx_dec() */ - /* update the position in the bitstream */ - st0->next_bit_pos += nchan_ism; - - /* read SID metadata flag( one per object ) */ - for ( ch = 0; ch < nchan_ism; ch++ ) - { - md_diff_flag[ch] = get_next_indice( st0, 1 ); - } - - /*----------------------------------------------------------------* - * Set quantization bits based on the number of coded objects - *----------------------------------------------------------------*/ - - ivas_get_ism_sid_quan_bitbudget( nchan_ism, &nBits_azimuth, &nBits_elevation, &q_step, &q_step_border, &nBits_coh, &nBits_sce_id ); - - /*----------------------------------------------------------------* - * Spatial parameters, loop over TCs - 1 - *----------------------------------------------------------------*/ - - *flag_noisy_speech = 0; - *sce_id_dtx = 0; - - /* read ISM mode flag to explicitly signal number of spatial parameters */ - if ( nchan_ism > 2 ) - { - idx = get_next_indice( st0, 1 ); - ism_mode_bstr = (ISM_MODE) ( idx + 1 ); - /* note: ISM mode was already read and used for configuration in in ivas_ism_dtx_dec() */ - - if ( ism_mode_bstr == ISM_MODE_PARAM ) - { - /* read noisy speech flag */ - *flag_noisy_speech = get_next_indice( st0, 1 ); - nBits_sce_id = 1; - } - } - - if ( nchan_transport > 1 ) - { - /* read sce id */ - *sce_id_dtx = get_next_indice( st0, nBits_sce_id ); - - /* decode the coherence */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - if ( ch == *sce_id_dtx ) - { - hSCE[ch]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence_flt = 1.0f; - continue; - } - - idx = get_next_indice( st0, nBits_coh ); - hSCE[ch]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence_flt = (float) ( idx ) / (float) ( ( 1 << nBits_coh ) - 1 ); - } - } - - if ( ism_mode == ISM_MODE_PARAM ) - { - hSCE[*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence_flt = hSCE[!*sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence_flt; - } - - /*----------------------------------------------------------------* - * Metadata decoding and dequantization, loop over all objects - *----------------------------------------------------------------*/ - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMetaData = hIsmMeta[ch]; - if ( md_diff_flag[ch] == 1 ) - { - /* Azimuth decoding */ - idx_azimuth = get_next_indice( st0, nBits_azimuth ); - hIsmMetaData->azimuth = ism_dequant_meta( idx_azimuth, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); - - /* Elevation decoding */ - idx_elevation = get_next_indice( st0, nBits_elevation ); - hIsmMetaData->elevation = ism_dequant_meta( idx_elevation, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); - - /* update last indexes to correspond to active frames coding */ - if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) - { - hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); - hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); - } - else - { - hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); - hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); - } - - /* save for smoothing metadata evolution */ - hIsmMetaData->last_true_azimuth = hIsmMetaData->azimuth; - hIsmMetaData->last_true_elevation = hIsmMetaData->elevation; - } - } - - /* take into account padding bits as metadata bits to keep later bitrate checks valid */ - nb_bits_metadata[*sce_id_dtx] = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC; - - /* set the bitstream pointer to its original position */ - st0->bit_stream = bstr_orig; - st0->next_bit_pos = next_bit_pos_orig; - } - - /* smooth the metadata evolution */ - ism_metadata_smooth( hIsmMeta, ism_total_brate, nchan_ism ); - - return; -} -#else void ivas_ism_metadata_sid_dec_fx( SCE_DEC_HANDLE hSCE[MAX_SCE], /* i/o: SCE decoder structure */ const Word32 ism_total_brate, /* i : ISM total bitrate */ @@ -2298,4 +1296,3 @@ void ivas_ism_metadata_sid_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_ism_param_dec.c b/lib_dec/ivas_ism_param_dec.c index 19fa6bc62..e118a3d15 100644 --- a/lib_dec/ivas_ism_param_dec.c +++ b/lib_dec/ivas_ism_param_dec.c @@ -43,15 +43,12 @@ #include "ivas_prot_fx.h" #include "prot_fx.h" #include "debug.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* * Local function definitions *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_dec_dequant_DOA_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ const Word16 nchan_ism /* i : number of ISM channels */ @@ -75,31 +72,7 @@ static void ivas_param_ism_dec_dequant_DOA_fx( return; } -#else -static void ivas_param_ism_dec_dequant_DOA( - PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ - const int16_t nchan_ism /* i : number of ISM channels */ -) -{ - int16_t i; - PARAM_ISM_CONFIG_HANDLE hParamIsm; - - hParamIsm = hParamIsmDec->hParamIsm; - - assert( nchan_ism <= MAX_NUM_OBJECTS ); - - /* Get the azimuth and elevation values */ - for ( i = 0; i < nchan_ism; i++ ) - { - hParamIsmDec->azimuth_values[i] = ism_dequant_meta( hParamIsm->azi_index[i], ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - hParamIsmDec->elevation_values[i] = ism_dequant_meta( hParamIsm->ele_index[i], ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_dec_dequant_powrat_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec /* i/o: decoder ParamISM handle */ ) @@ -121,32 +94,8 @@ static void ivas_param_ism_dec_dequant_powrat_fx( } return; } -#else -static void ivas_param_ism_dec_dequant_powrat( - PARAM_ISM_DEC_HANDLE hParamIsmDec /* i/o: decoder ParamISM handle */ -) -{ - int16_t band_idx, slot_idx; - PARAM_ISM_CONFIG_HANDLE hParamIsm; - - hParamIsm = hParamIsmDec->hParamIsm; - - /* Get the power ratio values */ - for ( band_idx = 0; band_idx < hParamIsm->nbands; band_idx++ ) - { - for ( slot_idx = 0; slot_idx < hParamIsm->nblocks[band_idx]; slot_idx++ ) - { - hParamIsmDec->power_ratios[band_idx][slot_idx][0] = (float) ( hParamIsm->power_ratios_idx[band_idx][slot_idx] ) / (float) ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) / 2.0f + 0.5f; - hParamIsmDec->power_ratios[band_idx][slot_idx][1] = 1.0f - hParamIsmDec->power_ratios[band_idx][slot_idx][0]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_ism_get_interpolator_fx( const Word16 subframe_nbslots, Word16 *interpolator /*Q15*/ @@ -163,24 +112,8 @@ static void ivas_ism_get_interpolator_fx( return; } -#else -static void ivas_ism_get_interpolator( - const int16_t subframe_nbslots, - float *interpolator ) -{ - int16_t interp_idx = 0; - - for ( interp_idx = 0; interp_idx < subframe_nbslots; interp_idx++ ) - { - interpolator[interp_idx] = (float) ( interp_idx + 1 ) / (float) subframe_nbslots; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_ism_get_proto_matrix_fx( IVAS_OUTPUT_SETUP hOutSetup, const Word16 nchan_transport, @@ -234,56 +167,7 @@ static void ivas_ism_get_proto_matrix_fx( return; } -#else -static void ivas_ism_get_proto_matrix( - IVAS_OUTPUT_SETUP hOutSetup, - const int16_t nchan_transport, - float *proto_matrix ) -{ - int16_t idx; - - /* compute proto_matrix */ - switch ( nchan_transport ) - { - case 2: - { - if ( hOutSetup.nchan_out_woLFE ) - { - for ( idx = 0; idx < hOutSetup.nchan_out_woLFE; idx++ ) - { - if ( hOutSetup.ls_azimuth[idx] > 0.0f ) - { - proto_matrix[idx] = 1.0f; - proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 0.0f; - } - else if ( hOutSetup.ls_azimuth[idx] < 0.0f ) - { - proto_matrix[idx] = 0.0f; - proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 1.0f; - } - else - { - proto_matrix[idx] = 0.5f; - proto_matrix[idx + hOutSetup.nchan_out_woLFE] = 0.5f; - } - } - } - else - { - assert( 0 && "Error: number of output channels not supported" ); - } - break; - } - - default: - assert( 0 && "Error: number of transport channels not supported" ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_collect_slot_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ Word32 *Cldfb_RealBuffer_in_fx, /*Q(31-exp_real)*/ @@ -373,41 +257,8 @@ static void ivas_param_ism_collect_slot_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_ism_collect_slot( - PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ - float *Cldfb_RealBuffer_in, - float *Cldfb_ImagBuffer_in, - const int16_t ch, - float ref_power[], - float cx_diag[][PARAM_ISM_MAX_DMX] ) -{ - int16_t band_idx, bin_idx; - int16_t brange[2]; - float tmp; - - /* loop over parameter bands to collect transport channel energies */ - for ( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) - { - brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; - brange[1] = hParamIsmDec->hParamIsm->band_grouping[band_idx + 1]; - for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) - { - tmp = 0.0f; - tmp += ( Cldfb_RealBuffer_in[bin_idx] * Cldfb_RealBuffer_in[bin_idx] ); - tmp += ( Cldfb_ImagBuffer_in[bin_idx] * Cldfb_ImagBuffer_in[bin_idx] ); - cx_diag[bin_idx][ch] += tmp; - ref_power[bin_idx] += tmp; - } - } - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_compute_mixing_matrix_fx( const Word16 nchan_ism, /* i : number of ISM channels */ PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ @@ -565,105 +416,7 @@ static void ivas_param_ism_compute_mixing_matrix_fx( return; } -#else -static void ivas_param_ism_compute_mixing_matrix( - const int16_t nchan_ism, /* i : number of ISM channels */ - PARAM_ISM_DEC_HANDLE hParamIsmDec, /* i/o: decoder ParamISM handle */ - ISM_DTX_DATA_DEC hISMDTX, /* i : ISM DTX handle */ - float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN], - const int16_t nchan_transport, - const int16_t nchan_out_woLFE, - float cx_diag[][PARAM_ISM_MAX_DMX], - float ref_power[], - float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX] ) -{ - int16_t band_idx, bin_idx; - int16_t i, w, obj_indx; - int16_t brange[2]; - float direct_power[MAX_NUM_OBJECTS]; - float cy_diag[PARAM_ISM_MAX_CHAN]; - float cy_diag_tmp[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN]; - float *dir_res_ptr; - float *proto_matrix; - float response_matrix[PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS]; - int16_t num_wave; - - proto_matrix = hParamIsmDec->hParamIsmRendering->proto_matrix; - - assert( ( nchan_ism == 3 ) || ( nchan_ism == 4 ) ); - assert( nchan_transport == 2 ); - - if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) - { - num_wave = nchan_ism; - } - else - { - num_wave = MAX_PARAM_ISM_WAVE; - } - set_zero( response_matrix, PARAM_ISM_MAX_CHAN * MAX_NUM_OBJECTS ); - - /* loop over parameter bands to compute the mixing matrix */ - for ( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) - { - brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; - brange[1] = hParamIsmDec->hParamIsm->band_grouping[band_idx + 1]; - - /* Compute covaraince matrix from direct response*/ - for ( w = 0; w < num_wave; w++ ) - { - set_zero( cy_diag_tmp[w], nchan_out_woLFE ); - - if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) - { - dir_res_ptr = direct_response[w]; - } - else - { - obj_indx = hParamIsmDec->hParamIsm->obj_indices[band_idx][0][w]; - dir_res_ptr = direct_response[obj_indx]; - } - mvr2r( dir_res_ptr, response_matrix + w * nchan_out_woLFE, nchan_out_woLFE ); - /* we only need the diagonal of Cy*/ - matrix_product_diag( dir_res_ptr, nchan_out_woLFE, 1, 0, dir_res_ptr, 1, nchan_out_woLFE, 0, cy_diag_tmp[w] ); - } - - for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) - { - - set_zero( cy_diag, nchan_out_woLFE ); - for ( w = 0; w < num_wave; w++ ) - { - if ( hParamIsmDec->hParamIsm->flag_noisy_speech || hISMDTX.dtx_flag ) - { - direct_power[w] = ( 1.0f / nchan_ism ) * ref_power[bin_idx]; - } - else - { - direct_power[w] = hParamIsmDec->power_ratios[band_idx][0][w] * ref_power[bin_idx]; - } - - if ( direct_power[w] != 0.f ) - { - for ( i = 0; i < nchan_out_woLFE; i++ ) - { - cy_diag[i] += direct_power[w] * cy_diag_tmp[w][i]; - } - } - direct_power[w] = sqrtf( direct_power[w] ); - } - - /* Compute mixing matrix */ - computeMixingMatricesISM( nchan_transport, num_wave, nchan_out_woLFE, response_matrix, direct_power, cx_diag[bin_idx], cy_diag, proto_matrix, 1, - PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix[bin_idx] ); - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_render_slot_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, @@ -768,87 +521,8 @@ static void ivas_param_ism_render_slot_fx( return; } -#else -static void ivas_param_ism_render_slot( - PARAM_ISM_DEC_HANDLE hParamIsmDec, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - float *Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX], - float *Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX], - float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], - const int16_t interpolator_idx, - const int16_t out_slot_idx, - const int16_t num_ch_LS, - const int16_t nchan_transport ) -{ - int16_t outchIdx, inchIdx, bin_idx; - float tmp_1, mixing_matrix_smooth; - - tmp_1 = hParamIsmDec->hParamIsmRendering->interpolator[interpolator_idx]; - - for ( bin_idx = 0; bin_idx < hSpatParamRendCom->num_freq_bands; bin_idx++ ) - { - /* smooth the mixing matrix */ - for ( outchIdx = 0; outchIdx < num_ch_LS; outchIdx++ ) - { - for ( inchIdx = 0; inchIdx < nchan_transport; inchIdx++ ) - { - mixing_matrix_smooth = tmp_1 * mixing_matrix[bin_idx][outchIdx + inchIdx * num_ch_LS] + - ( 1 - tmp_1 ) * hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_old[bin_idx][outchIdx + inchIdx * num_ch_LS]; - - Cldfb_RealBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_RealBuffer_in[inchIdx][bin_idx]; - Cldfb_ImagBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_ImagBuffer_in[inchIdx][bin_idx]; - } - } - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_ism_rendering( - PARAM_ISM_DEC_HANDLE hParamIsmDec, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - float Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][4][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][4][CLDFB_NO_CHANNELS_MAX], - float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], - const int16_t out_slot_idx, - const int16_t slot_idx, - const int16_t num_ch_LS, - const int16_t nchan_transport ) -{ - int16_t outchIdx, inchIdx, bin_idx; - float tmp_1, mixing_matrix_smooth; - - tmp_1 = hParamIsmDec->hParamIsmRendering->interpolator[slot_idx]; - - for ( bin_idx = 0; bin_idx < hSpatParamRendCom->num_freq_bands; bin_idx++ ) - { - /* smooth the mixing matrix */ - for ( outchIdx = 0; outchIdx < num_ch_LS; outchIdx++ ) - { - for ( inchIdx = 0; inchIdx < nchan_transport; inchIdx++ ) - { - mixing_matrix_smooth = tmp_1 * mixing_matrix[bin_idx][outchIdx + inchIdx * num_ch_LS] + - ( 1 - tmp_1 ) * hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_old[bin_idx][outchIdx + inchIdx * num_ch_LS]; - - Cldfb_RealBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_RealBuffer_in[inchIdx][slot_idx][bin_idx]; - Cldfb_ImagBuffer[outchIdx][out_slot_idx][bin_idx] += mixing_matrix_smooth * Cldfb_ImagBuffer_in[inchIdx][slot_idx][bin_idx]; - } - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_param_ism_rendering_init_fx( PARAM_ISM_RENDERING_HANDLE hParamIsmRendering, IVAS_OUTPUT_SETUP hOutSetup, @@ -892,46 +566,7 @@ static ivas_error ivas_param_ism_rendering_init_fx( return IVAS_ERR_OK; } -#else -static ivas_error ivas_param_ism_rendering_init( - PARAM_ISM_RENDERING_HANDLE hParamIsmRendering, - IVAS_OUTPUT_SETUP hOutSetup, - const int16_t nchan_transport, - const int16_t subframe_nbslots, - AUDIO_CONFIG output_config ) -{ - int16_t bin_idx; - - /* initialization of mixing matrix buffer for smoothing */ - for ( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) - { - set_zero( hParamIsmRendering->mixing_matrix_lin_old[bin_idx], PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); - } - - /* memory allocation for proto matrix and interpolator */ - if ( ( hParamIsmRendering->proto_matrix = (float *) malloc( hOutSetup.nchan_out_woLFE * nchan_transport * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for proto matrix\n" ) ); - } - if ( ( hParamIsmRendering->interpolator = (float *) malloc( subframe_nbslots * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) ); - } - - if ( !( output_config == IVAS_AUDIO_CONFIG_EXTERNAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - /* computation of proto matrix */ - ivas_ism_get_proto_matrix( hOutSetup, nchan_transport, hParamIsmRendering->proto_matrix ); - } - - /* computation of interpolator*/ - ivas_ism_get_interpolator( subframe_nbslots, hParamIsmRendering->interpolator ); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_update_mixing_matrix_fx( PARAM_ISM_DEC_HANDLE hParamIsmDec, Word32 mixing_matrix_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], /*Q(31-mixing_matrix_exp)*/ @@ -966,36 +601,6 @@ static void ivas_param_ism_update_mixing_matrix_fx( return; } -#else -static void ivas_param_ism_update_mixing_matrix( - PARAM_ISM_DEC_HANDLE hParamIsmDec, - float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX], - const int16_t nchan_in, - const int16_t nchan_out ) -{ - int16_t inchIdx, outchIdx, bin_idx, band_idx; - int16_t brange[2]; - - for ( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) - { - brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; - brange[1] = hParamIsmDec->hParamIsm->band_grouping[band_idx + 1]; - - for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) - { - for ( inchIdx = 0; inchIdx < nchan_in; inchIdx++ ) - { - for ( outchIdx = 0; outchIdx < nchan_out; outchIdx++ ) - { - hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_old[bin_idx][outchIdx + inchIdx * nchan_out] = mixing_matrix[bin_idx][outchIdx + inchIdx * nchan_out]; - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -1003,7 +608,6 @@ static void ivas_param_ism_update_mixing_matrix( * * Open Param ISM handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_param_ism_dec_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -1243,229 +847,24 @@ ivas_error ivas_param_ism_dec_open_fx( pop_wmops(); return error; } -#else -ivas_error ivas_param_ism_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t i; - PARAM_ISM_DEC_HANDLE hParamIsmDec; - IVAS_OUTPUT_SETUP hOutSetup; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - AUDIO_CONFIG output_config; - int32_t output_Fs; - ivas_error error; - - error = IVAS_ERR_OK; - - push_wmops( "ivas_param_ism_dec_open" ); - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - if ( ( hParamIsmDec = (PARAM_ISM_DEC_HANDLE) malloc( sizeof( PARAM_ISM_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM\n" ) ); - } +/*-------------------------------------------------------------------------* + * ivas_param_ism_dec_close() + * + * Close Param ISM handle + *-------------------------------------------------------------------------*/ - if ( ( hSpatParamRendCom = (SPAT_PARAM_REND_COMMON_DATA_HANDLE) malloc( sizeof( SPAT_PARAM_REND_COMMON_DATA ) ) ) == NULL ) +void ivas_param_ism_dec_close_fx( + PARAM_ISM_DEC_HANDLE *hParamIsmDec_out, /* i/o: decoder DirAC handle */ + SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: common spatial renderer data */ + AUDIO_CONFIG output_config /* i : output audio configuration */ +) +{ + test(); + IF( hParamIsmDec_out != NULL && *hParamIsmDec_out != NULL ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - /* Assign memory to Param Object handle */ - if ( ( hParamIsmDec->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM\n" ) ); - } - - if ( ( hParamIsmDec->hParamIsmRendering = (PARAM_ISM_RENDERING_HANDLE) malloc( sizeof( PARAM_ISM_RENDERING_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM Rendering handle\n" ) ); - } - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - output_config = st_ivas->hDecoderConfig->output_config; - - ivas_param_ism_config( hParamIsmDec->hParamIsm, st_ivas->nchan_ism ); - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - hSpatParamRendCom->slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); - set_s( hSpatParamRendCom->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( hSpatParamRendCom->subframe_nbslots, JBM_CLDFB_SLOTS_IN_SUBFRAME, DEFAULT_JBM_SUBFRAMES_5MS ); - hSpatParamRendCom->nb_subframes = DEFAULT_JBM_SUBFRAMES_5MS; - hSpatParamRendCom->subframes_rendered = 0; - hSpatParamRendCom->slots_rendered = 0; - hSpatParamRendCom->num_slots = DEFAULT_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME; - hSpatParamRendCom->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - - hParamIsmDec->hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; - - for ( i = 0; i < ( hParamIsmDec->hParamIsm->nbands + 1 ); i++ ) - { - hParamIsmDec->hParamIsm->band_grouping[i] = Param_ISM_band_grouping[i]; - - if ( hParamIsmDec->hParamIsm->band_grouping[i] > hSpatParamRendCom->num_freq_bands ) - { - hParamIsmDec->hParamIsm->band_grouping[i] = hSpatParamRendCom->num_freq_bands; - } - } - - /*-----------------------------------------------------------------* - * output setup - *-----------------------------------------------------------------*/ - - /* hIntSetup and hOutSetup differs only for Binaural rendering */ - if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - /* nchan_out is essential for memory initialization for CLDFB Synthesis */ - st_ivas->hIntSetup.nchan_out_woLFE = st_ivas->nchan_ism; - st_ivas->hIntSetup.is_loudspeaker_setup = 1; - } - - hOutSetup = st_ivas->hIntSetup; - - if ( !( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - /* Initialize Param ISM Rendering handle */ - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - if ( ( error = ivas_param_ism_rendering_init( hParamIsmDec->hParamIsmRendering, hOutSetup, st_ivas->nchan_transport, MAX_JBM_CLDFB_TIMESLOTS, output_config ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_param_ism_rendering_init( hParamIsmDec->hParamIsmRendering, hOutSetup, st_ivas->nchan_transport, CLDFB_NO_COL_MAX, output_config ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( !( output_config == IVAS_AUDIO_CONFIG_EXTERNAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || - output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - /* Initialize efap handle */ - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), hOutSetup.ls_azimuth, hOutSetup.ls_elevation, hOutSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Azi and Ele values are transmitted once per frame per object */ - set_zero( hParamIsmDec->azimuth_values, MAX_NUM_OBJECTS ); - set_zero( hParamIsmDec->elevation_values, MAX_NUM_OBJECTS ); - - hSpatParamRendCom->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; - hSpatParamRendCom->dirac_bs_md_write_idx = 0; - hSpatParamRendCom->dirac_read_idx = 0; - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_dirac_allocate_parameters( hSpatParamRendCom, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_dirac_allocate_parameters( hSpatParamRendCom, 2 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - st_ivas->hISMDTX.dtx_flag = 0; - - st_ivas->hParamIsmDec = hParamIsmDec; - st_ivas->hSpatParamRendCom = hSpatParamRendCom; - - - if ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX && st_ivas->renderer_type != RENDERER_DISABLE ) - { - int16_t nchan_transport = st_ivas->nchan_transport; - int16_t nchan_full = 0; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) - { - nchan_full = nchan_transport; - hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; - hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; - } - else - { - int16_t n_slots_to_alloc; - if ( st_ivas->hDecoderConfig->Opt_tsm == 1 ) - { - n_slots_to_alloc = MAX_JBM_CLDFB_TIMESLOTS; - } - else - { - n_slots_to_alloc = CLDFB_SLOTS_PER_SUBFRAME * MAX_PARAM_SPATIAL_SUBFRAMES; - } - if ( ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); - } - set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); - - if ( ( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = (float *) malloc( n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM JBM Rendering handle\n" ) ); - } - set_zero( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc, n_slots_to_alloc * nchan_transport * hSpatParamRendCom->num_freq_bands ); - } - - if ( st_ivas->hTcBuffer == NULL ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, nchan_transport, nchan_transport, nchan_full, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; - hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; - if ( st_ivas->hTcBuffer == NULL ) - { - int16_t nchan_to_allocate = st_ivas->hDecoderConfig->nchan_out; - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_BUFFER, nchan_to_allocate, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - pop_wmops(); - return error; -} -#endif - -/*-------------------------------------------------------------------------* - * ivas_param_ism_dec_close() - * - * Close Param ISM handle - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void ivas_param_ism_dec_close_fx( - PARAM_ISM_DEC_HANDLE *hParamIsmDec_out, /* i/o: decoder DirAC handle */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: common spatial renderer data */ - AUDIO_CONFIG output_config /* i : output audio configuration */ -) -{ - test(); - IF( hParamIsmDec_out != NULL && *hParamIsmDec_out != NULL ) - { - PARAM_ISM_DEC_HANDLE hParamIsmDec; - hParamIsmDec = *hParamIsmDec_out; + PARAM_ISM_DEC_HANDLE hParamIsmDec; + hParamIsmDec = *hParamIsmDec_out; /* Config & CLDFB */ IF( hParamIsmDec->hParamIsm != NULL ) @@ -1480,369 +879,52 @@ void ivas_param_ism_dec_close_fx( /* Param ISM Rendering */ IF( hParamIsmDec->hParamIsmRendering->interpolator_fx != NULL ) { - free( hParamIsmDec->hParamIsmRendering->interpolator_fx ); - hParamIsmDec->hParamIsmRendering->interpolator_fx = NULL; - } - IF( hParamIsmDec->hParamIsmRendering->proto_matrix_fx != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->proto_matrix_fx ); - hParamIsmDec->hParamIsmRendering->proto_matrix_fx = NULL; - } - } - IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx ); - hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; - } - IF( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx ); - hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; - } - IF( hParamIsmDec->hParamIsmRendering != NULL ) - { - free( hParamIsmDec->hParamIsmRendering ); - hParamIsmDec->hParamIsmRendering = NULL; - } - - free( *hParamIsmDec_out ); - *hParamIsmDec_out = NULL; - } - - test(); - IF( hSpatParamRendCom_out != NULL && *hSpatParamRendCom_out != NULL ) - { - test(); - test(); - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - ivas_dirac_deallocate_parameters_fx( *hSpatParamRendCom_out, 1 ); - ivas_dirac_deallocate_parameters_fx( *hSpatParamRendCom_out, 2 ); - } - - free( *hSpatParamRendCom_out ); - *hSpatParamRendCom_out = NULL; - } - - return; -} -#else // IVAS_FLOAT_FIXED -void ivas_param_ism_dec_close( - PARAM_ISM_DEC_HANDLE *hParamIsmDec_out, /* i/o: decoder DirAC handle */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: common spatial renderer data */ - AUDIO_CONFIG output_config /* i : output audio configuration */ -) -{ - if ( hParamIsmDec_out != NULL && *hParamIsmDec_out != NULL ) - { - PARAM_ISM_DEC_HANDLE hParamIsmDec; - hParamIsmDec = *hParamIsmDec_out; - - /* Config & CLDFB */ - if ( hParamIsmDec->hParamIsm != NULL ) - { - free( hParamIsmDec->hParamIsm ); - hParamIsmDec->hParamIsm = NULL; - } - - if ( !( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - /* Param ISM Rendering */ - if ( hParamIsmDec->hParamIsmRendering->interpolator != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->interpolator ); - hParamIsmDec->hParamIsmRendering->interpolator = NULL; - } - if ( hParamIsmDec->hParamIsmRendering->proto_matrix != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->proto_matrix ); - hParamIsmDec->hParamIsmRendering->proto_matrix = NULL; - } - } - - if ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc ); - hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL; - } - if ( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc != NULL ) - { - free( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc ); - hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL; - } - - if ( hParamIsmDec->hParamIsmRendering != NULL ) - { - free( hParamIsmDec->hParamIsmRendering ); - hParamIsmDec->hParamIsmRendering = NULL; - } - - free( *hParamIsmDec_out ); - *hParamIsmDec_out = NULL; - } - - if ( hSpatParamRendCom_out != NULL && *hSpatParamRendCom_out != NULL ) - { - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - ivas_dirac_deallocate_parameters( *hSpatParamRendCom_out, 1 ); - ivas_dirac_deallocate_parameters( *hSpatParamRendCom_out, 2 ); - } - - free( *hSpatParamRendCom_out ); - *hSpatParamRendCom_out = NULL; - } - - return; -} - -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * ivas_param_ism_dec() - * - * Param ISM decoder - *-------------------------------------------------------------------------*/ - -void ivas_param_ism_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[] /* i/o: synthesized core-coder transport channels/DirAC output*/ -) -{ - int16_t ch, nchan_transport, nchan_out, nchan_out_woLFE, i; - int16_t subframe_idx, slot_idx, index_slot, bin_idx; - int32_t ivas_total_brate; - int16_t output_frame; - float *p_tc[PARAM_ISM_MAX_DMX]; - float ref_power[CLDFB_NO_CHANNELS_MAX]; - float cx_diag[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_DMX]; - /* CLDFB Input Buffers */ - float Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - - /* CLDFB Output Buffers */ - float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - - /* Direct Response/EFAP Gains */ - float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN]; - - /* Covariance Rendering */ - float mixing_matrix[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; - - PARAM_ISM_DEC_HANDLE hParamIsmDec; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - IVAS_OUTPUT_SETUP hSetup; - - /* Initialization */ - hParamIsmDec = st_ivas->hParamIsmDec; - assert( hParamIsmDec ); - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - assert( hSpatParamRendCom ); - for ( i = 0; i < PARAM_ISM_MAX_DMX; i++ ) - { - p_tc[i] = output_f[i]; - } - output_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out = st_ivas->nchan_ism; - nchan_out_woLFE = nchan_out; - st_ivas->hDecoderConfig->nchan_out = nchan_out; - } - else - { - nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - } - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - hSetup = st_ivas->hIntSetup; - - push_wmops( "ivas_param_ism_dec" ); - - /* set buffers to zero */ - for ( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) - { - set_zero( cx_diag[bin_idx], PARAM_ISM_MAX_DMX ); - } - set_zero( ref_power, CLDFB_NO_CHANNELS_MAX ); - - /* Frame-level Processing */ - /* De-quantization */ - if ( !( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) ) - { - ivas_param_ism_dec_dequant_DOA( hParamIsmDec, st_ivas->nchan_ism ); - ivas_param_ism_dec_dequant_powrat( hParamIsmDec ); - st_ivas->hISMDTX.dtx_flag = 0; - } - else - { - st_ivas->hISMDTX.dtx_flag = 1; - } - - /* obtain the direct response using EFAP */ - if ( !( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - for ( i = 0; i < st_ivas->nchan_ism; i++ ) - { - efap_determine_gains( st_ivas->hEFAPdata, direct_response[i], hParamIsmDec->azimuth_values[i], hParamIsmDec->elevation_values[i], EFAP_MODE_EFAP ); - } - } - else - { - int16_t j; - - for ( i = 0; i < st_ivas->nchan_ism; i++ ) - { - for ( j = 0; j < nchan_out_woLFE; j++ ) - { - if ( i == j ) - { - direct_response[i][j] = 1.0f; - } - else - { - direct_response[i][j] = 0.0f; - } - } - } - - for ( j = 0; j < nchan_out_woLFE; j++ ) - { - if ( hParamIsmDec->azimuth_values[j] > 0.0f ) - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 1.0f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 0.0f; + free( hParamIsmDec->hParamIsmRendering->interpolator_fx ); + hParamIsmDec->hParamIsmRendering->interpolator_fx = NULL; } - else + IF( hParamIsmDec->hParamIsmRendering->proto_matrix_fx != NULL ) { - if ( hParamIsmDec->azimuth_values[j] < 0.0f ) - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 0.0f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 1.0f; - } - else /* == 0.0f */ - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 0.5f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 0.5f; - } + free( hParamIsmDec->hParamIsmRendering->proto_matrix_fx ); + hParamIsmDec->hParamIsmRendering->proto_matrix_fx = NULL; } } - } - - ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, p_tc ); - - for ( ch = 0; ch < nchan_transport; ch++ ) - { - /* CLDFB Analysis */ - for ( slot_idx = 0; slot_idx < CLDFB_NO_COL_MAX; slot_idx++ ) + IF( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx != NULL ) { - cldfbAnalysis_ts_ivas( &( output_f[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), Cldfb_RealBuffer_in[ch][slot_idx], Cldfb_ImagBuffer_in[ch][slot_idx], hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); - - ivas_param_ism_collect_slot( hParamIsmDec, Cldfb_RealBuffer_in[ch][slot_idx], Cldfb_ImagBuffer_in[ch][slot_idx], ch, ref_power, cx_diag ); + free( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx ); + hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx = NULL; } - } - - /* Obtain Mixing Matrix on a frame-level */ - for ( bin_idx = 0; bin_idx < hSpatParamRendCom->num_freq_bands; bin_idx++ ) - { - set_f( mixing_matrix[bin_idx], 0.0f, nchan_transport * nchan_out_woLFE ); - } - - /* Compute mixing matrix */ - ivas_param_ism_compute_mixing_matrix( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response, nchan_transport, nchan_out_woLFE, cx_diag, ref_power, mixing_matrix ); - - /* subframe loop for synthesis*/ - for ( subframe_idx = 0; subframe_idx < hSpatParamRendCom->nb_subframes; subframe_idx++ ) - { - uint16_t slot_idx_start = subframe_idx * hSpatParamRendCom->subframe_nbslots[subframe_idx]; - uint16_t idx_in; - uint16_t idx_lfe; - - /* Set some memories to zero */ - for ( ch = 0; ch < nchan_out_woLFE; ch++ ) + IF( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx != NULL ) { - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - set_f( Cldfb_RealBuffer[ch][slot_idx], 0.0f, hSpatParamRendCom->num_freq_bands ); - set_f( Cldfb_ImagBuffer[ch][slot_idx], 0.0f, hSpatParamRendCom->num_freq_bands ); - } + free( hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx ); + hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx = NULL; } - - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) + IF( hParamIsmDec->hParamIsmRendering != NULL ) { - index_slot = slot_idx_start + slot_idx; - - /* Compute bandwise rendering to target LS using covariance rendering */ - ivas_param_ism_rendering( hParamIsmDec, hSpatParamRendCom, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, - Cldfb_RealBuffer, Cldfb_ImagBuffer, mixing_matrix, slot_idx, index_slot, - nchan_out_woLFE, nchan_transport ); + free( hParamIsmDec->hParamIsmRendering ); + hParamIsmDec->hParamIsmRendering = NULL; } - /* CLDFB Synthesis */ - idx_in = 0; - idx_lfe = 0; - - for ( ch = 0; ch < nchan_out; ch++ ) - { - if ( ( hSetup.num_lfe > 0 ) && ( hSetup.index_lfe[idx_lfe] == ch ) ) - { - set_zero( &( output_f[ch][slot_idx_start * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->num_freq_bands ); - if ( idx_lfe < ( hSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - float *RealBuffer[16]; - float *ImagBuffer[16]; - - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) - { - RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; - } - - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][slot_idx_start * hSpatParamRendCom->num_freq_bands] ), - hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[ch] ); - - idx_in++; - } - } + free( *hParamIsmDec_out ); + *hParamIsmDec_out = NULL; } - /* copy the memories */ - /* store mixing matrix for next subframe */ - ivas_param_ism_update_mixing_matrix( hParamIsmDec, mixing_matrix, nchan_transport, nchan_out_woLFE ); - - /* store MetaData parameters */ - for ( ch = 0; ch < st_ivas->nchan_ism; ch++ ) + test(); + IF( hSpatParamRendCom_out != NULL && *hSpatParamRendCom_out != NULL ) { - if ( st_ivas->hParamIsmDec->azimuth_values[ch] > 180.0f ) - { - st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hParamIsmDec->azimuth_values[ch] - 360.0f; - } - else + test(); + test(); + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) { - st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hParamIsmDec->azimuth_values[ch]; + ivas_dirac_deallocate_parameters_fx( *hSpatParamRendCom_out, 1 ); + ivas_dirac_deallocate_parameters_fx( *hSpatParamRendCom_out, 2 ); } - st_ivas->hIsmMetaData[ch]->elevation = st_ivas->hParamIsmDec->elevation_values[ch]; + free( *hSpatParamRendCom_out ); + *hSpatParamRendCom_out = NULL; } - pop_wmops(); - return; } -#endif /*-------------------------------------------------------------------------* @@ -1850,7 +932,6 @@ void ivas_param_ism_dec( * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -1976,107 +1057,12 @@ void ivas_ism_dec_digest_tc_fx( return; } -#else -void ivas_ism_dec_digest_tc( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - if ( st_ivas->renderer_type == RENDERER_TD_PANNING || - st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->renderer_type == RENDERER_OSBA_STEREO || - ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM && st_ivas->hDecoderConfig->Opt_Headrotation == 0 ) ) - { - int16_t i, num_objects; - int16_t azimuth, elevation; - - /* we have a full frame interpolator, adapt it */ - /* for BE testing */ - if ( ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ) == st_ivas->hTcBuffer->n_samples_available ) - { - int16_t interpolator_length = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - st_ivas->hIsmRendererData->interpolator[0] = 0.0f; - for ( i = 1; i < interpolator_length; i++ ) - { - st_ivas->hIsmRendererData->interpolator[i] = st_ivas->hIsmRendererData->interpolator[i - 1] + 1.f / ( interpolator_length - 1 ); - } - } - else - { - for ( i = 0; i < interpolator_length; i++ ) - { - st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length - 1 ); - } - } - } - else - { - ivas_jbm_dec_get_adapted_linear_interpolator( (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ), st_ivas->hTcBuffer->n_samples_available, st_ivas->hIsmRendererData->interpolator ); - } - - /* also get the gains here */ - num_objects = st_ivas->nchan_transport; - for ( i = 0; i < num_objects; i++ ) - { - mvr2r( st_ivas->hIsmRendererData->gains[i], st_ivas->hIsmRendererData->prev_gains[i], MAX_OUTPUT_CHANNELS ); - - if ( st_ivas->intern_config == IVAS_AUDIO_CONFIG_STEREO ) - { - ivas_ism_get_stereo_gains( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &st_ivas->hIsmRendererData->gains[i][0], &st_ivas->hIsmRendererData->gains[i][1] ); - } - else - { - // TODO tmu review when #215 is resolved - azimuth = (int16_t) floorf( st_ivas->hIsmMetaData[i]->azimuth + 0.5f ); - elevation = (int16_t) floorf( st_ivas->hIsmMetaData[i]->elevation + 0.5f ); - - if ( ( st_ivas->renderer_type == RENDERER_TD_PANNING || - st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) && - st_ivas->hCombinedOrientationData == NULL ) - { - if ( st_ivas->hIntSetup.is_planar_setup ) - { - /* If no elevation support in output format, then rendering should be done with zero elevation */ - elevation = 0; - } - - if ( st_ivas->hEFAPdata != NULL ) - { - efap_determine_gains( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains[i], azimuth, elevation, EFAP_MODE_EFAP ); - } - } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - /*get HOA gets for direction (ACN/SN3D)*/ - ivas_dirac_dec_get_response( azimuth, elevation, st_ivas->hIsmRendererData->gains[i], st_ivas->hIntSetup.ambisonics_order ); - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_param_ism_dec_digest_tc() * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ @@ -2235,234 +1221,75 @@ void ivas_param_ism_dec_digest_tc_fx( ivas_ism_param_dec_tc_gain_ajust_fx( st_ivas, output_frame, fade_len, transport_channels, &q_tc ); IF( NE_16( q_tc, q_tc_in ) ) { - FOR( i = 0; i < 2; i++ ) - { - scale_sig32( transport_channels[i], output_frame, sub( q_tc_in, q_tc ) ); // q_tc_in - } - q_tc = q_tc_in; - move16(); - } - } - - FOR( ch = 0; ch < nchan_transport; ch++ ) - { - /* CLDFB Analysis */ - FOR( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) - { - IF( st_ivas->hDecoderConfig->Opt_tsm ) - { - Word32 RealBuffer_fx[CLDFB_NO_CHANNELS_MAX]; - Word32 ImagBuffer_fx[CLDFB_NO_CHANNELS_MAX]; - q_tc = q_tc_in; - move16(); - cldfbAnalysis_ts_fx_fixed_q( &( transport_channels[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), RealBuffer_fx, ImagBuffer_fx, hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch], &q_tc ); - Copy32( RealBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); - Copy32( ImagBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); - hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = sub( 31, q_tc ); - move16(); - hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = sub( 31, q_tc ); - move16(); - } - Word16 scale_factor_real, scale_factor_imag; - Word16 current_idx; - exp_real_tmp = hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp; - move16(); - exp_imag_tmp = hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp; - move16(); - current_idx = add( imult1616( imult1616( slot_idx, hSpatParamRendCom->num_freq_bands ), nchan_transport ), imult1616( ch, hSpatParamRendCom->num_freq_bands ) ); - scale_factor_real = getScaleFactor32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands ); - scale_factor_imag = getScaleFactor32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands ); - scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, scale_factor_real ); // Q(31-(exp_real_tmp-scale_factor_real)) - scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, scale_factor_imag ); // Q(31-(exp_imag_tmp-scale_factor_imag)) - exp_real_tmp = sub( exp_real_tmp, scale_factor_real ); - exp_imag_tmp = sub( exp_imag_tmp, scale_factor_imag ); - ivas_param_ism_collect_slot_fx( hParamIsmDec, - &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], - exp_real_tmp, - &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], - exp_imag_tmp, - ch, - ref_power_fx, &exp_ref_power, cx_diag_fx, &exp_cx_diag ); - - exp_real_tmp = add( exp_real_tmp, scale_factor_real ); - exp_imag_tmp = add( exp_imag_tmp, scale_factor_imag ); - scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, -scale_factor_real ); // Q(31-(exp_real_tmp)) - scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, -scale_factor_imag ); // Q(31-(exp_imag_tmp)) - } - } - /* Obtain Mixing Matrix on a frame-level */ - FOR( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) - { - set32_fx( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[bin_idx], 0, PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); - } - - /* Compute mixing matrix */ - ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, - hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ); - - pop_wmops(); - - return; -} -#else -void ivas_param_ism_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ - float *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ -) -{ - int16_t ch, nchan_transport, nchan_out, nchan_out_woLFE, i; - int16_t slot_idx, bin_idx; - int32_t ivas_total_brate; - int16_t output_frame; - float ref_power[CLDFB_NO_CHANNELS_MAX]; - float cx_diag[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_DMX]; - /* Direct Response/EFAP Gains */ - float direct_response[MAX_NUM_OBJECTS][PARAM_ISM_MAX_CHAN]; - PARAM_ISM_DEC_HANDLE hParamIsmDec; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - int16_t fade_len; - - /* Initialization */ - hParamIsmDec = st_ivas->hParamIsmDec; - assert( hParamIsmDec ); - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - assert( hSpatParamRendCom ); - output_frame = nCldfbSlots * hSpatParamRendCom->num_freq_bands; - fade_len = output_frame / 2; - - nchan_transport = st_ivas->nchan_transport; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out = st_ivas->nchan_ism; - nchan_out_woLFE = nchan_out; - st_ivas->hDecoderConfig->nchan_out = nchan_out; - } - else - { - nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - } - - push_wmops( "ivas_param_ism_dec" ); - - /* general setup */ - ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbSlots, hParamIsmDec->hParamIsmRendering->interpolator ); - - ivas_dirac_dec_set_md_map( st_ivas, nCldfbSlots ); - - /* set buffers to zero */ - for ( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) - { - set_zero( cx_diag[bin_idx], PARAM_ISM_MAX_DMX ); - } - set_zero( ref_power, CLDFB_NO_CHANNELS_MAX ); - - /* Frame-level Processing */ - /* De-quantization */ - if ( !( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) ) - { - ivas_param_ism_dec_dequant_DOA( hParamIsmDec, st_ivas->nchan_ism ); - ivas_param_ism_dec_dequant_powrat( hParamIsmDec ); - st_ivas->hISMDTX.dtx_flag = 0; - } - else - { - st_ivas->hISMDTX.dtx_flag = 1; - } - - /* obtain the direct response using EFAP */ - if ( !( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - for ( i = 0; i < st_ivas->nchan_ism; i++ ) - { - efap_determine_gains( st_ivas->hEFAPdata, direct_response[i], hParamIsmDec->azimuth_values[i], hParamIsmDec->elevation_values[i], EFAP_MODE_EFAP ); - } - } - else - { - int16_t j; - - for ( i = 0; i < st_ivas->nchan_ism; i++ ) - { - for ( j = 0; j < nchan_out_woLFE; j++ ) - { - if ( i == j ) - { - direct_response[i][j] = 1.0f; - } - else - { - direct_response[i][j] = 0.0f; - } - } - } - - for ( j = 0; j < nchan_out_woLFE; j++ ) - { - if ( hParamIsmDec->azimuth_values[j] > 0.0f ) - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 1.0f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 0.0f; - } - else - { - if ( hParamIsmDec->azimuth_values[j] < 0.0f ) - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 0.0f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 1.0f; - } - else /* == 0.0f */ - { - hParamIsmDec->hParamIsmRendering->proto_matrix[j] = 0.5f; - hParamIsmDec->hParamIsmRendering->proto_matrix[nchan_out_woLFE + j] = 0.5f; - } + FOR( i = 0; i < 2; i++ ) + { + scale_sig32( transport_channels[i], output_frame, sub( q_tc_in, q_tc ) ); // q_tc_in } + q_tc = q_tc_in; + move16(); } } - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - /*TODO : FhG to check*/ - ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, fade_len, transport_channels_f ); - } - - for ( ch = 0; ch < nchan_transport; ch++ ) + FOR( ch = 0; ch < nchan_transport; ch++ ) { /* CLDFB Analysis */ - for ( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) + FOR( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) { - if ( st_ivas->hDecoderConfig->Opt_tsm ) + IF( st_ivas->hDecoderConfig->Opt_tsm ) { - - float RealBuffer[CLDFB_NO_CHANNELS_MAX]; - float ImagBuffer[CLDFB_NO_CHANNELS_MAX]; - - cldfbAnalysis_ts_ivas( &( transport_channels_f[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), RealBuffer, ImagBuffer, hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); - mvr2r( RealBuffer, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); - mvr2r( ImagBuffer, &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); + Word32 RealBuffer_fx[CLDFB_NO_CHANNELS_MAX]; + Word32 ImagBuffer_fx[CLDFB_NO_CHANNELS_MAX]; + q_tc = q_tc_in; + move16(); + cldfbAnalysis_ts_fx_fixed_q( &( transport_channels[ch][hSpatParamRendCom->num_freq_bands * slot_idx] ), RealBuffer_fx, ImagBuffer_fx, hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch], &q_tc ); + Copy32( RealBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); + Copy32( ImagBuffer_fx, &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], hSpatParamRendCom->num_freq_bands ); + hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp = sub( 31, q_tc ); + move16(); + hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp = sub( 31, q_tc ); + move16(); } + Word16 scale_factor_real, scale_factor_imag; + Word16 current_idx; + exp_real_tmp = hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_exp; + move16(); + exp_imag_tmp = hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_exp; + move16(); + current_idx = add( imult1616( imult1616( slot_idx, hSpatParamRendCom->num_freq_bands ), nchan_transport ), imult1616( ch, hSpatParamRendCom->num_freq_bands ) ); + scale_factor_real = getScaleFactor32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands ); + scale_factor_imag = getScaleFactor32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands ); + scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, scale_factor_real ); // Q(31-(exp_real_tmp-scale_factor_real)) + scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, scale_factor_imag ); // Q(31-(exp_imag_tmp-scale_factor_imag)) + exp_real_tmp = sub( exp_real_tmp, scale_factor_real ); + exp_imag_tmp = sub( exp_imag_tmp, scale_factor_imag ); + ivas_param_ism_collect_slot_fx( hParamIsmDec, + &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], + exp_real_tmp, + &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], + exp_imag_tmp, + ch, + ref_power_fx, &exp_ref_power, cx_diag_fx, &exp_cx_diag ); - ivas_param_ism_collect_slot( hParamIsmDec, &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[slot_idx * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands], ch, ref_power, cx_diag ); + exp_real_tmp = add( exp_real_tmp, scale_factor_real ); + exp_imag_tmp = add( exp_imag_tmp, scale_factor_imag ); + scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, -scale_factor_real ); // Q(31-(exp_real_tmp)) + scale_sig32( &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc_fx[current_idx], hSpatParamRendCom->num_freq_bands, -scale_factor_imag ); // Q(31-(exp_imag_tmp)) } } - /* Obtain Mixing Matrix on a frame-level */ - for ( bin_idx = 0; bin_idx < hSpatParamRendCom->num_freq_bands; bin_idx++ ) + FOR( bin_idx = 0; bin_idx < CLDFB_NO_CHANNELS_MAX; bin_idx++ ) { - set_f( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin[bin_idx], 0.0f, nchan_transport * nchan_out_woLFE ); + set32_fx( hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx[bin_idx], 0, PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX ); } /* Compute mixing matrix */ - ivas_param_ism_compute_mixing_matrix( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response, nchan_transport, nchan_out_woLFE, cx_diag, ref_power, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin ); + ivas_param_ism_compute_mixing_matrix_fx( st_ivas->nchan_ism, hParamIsmDec, st_ivas->hISMDTX, direct_response_fx, nchan_transport, nchan_out_woLFE, cx_diag_fx, exp_cx_diag, ref_power_fx, exp_ref_power, + hParamIsmDec->hParamIsmRendering->mixing_matrix_lin_fx, hParamIsmDec->hParamIsmRendering->exp_mixing_matrix_lin_fx ); pop_wmops(); return; } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* @@ -2471,60 +1298,6 @@ void ivas_param_ism_dec_digest_tc( * *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_param_dec_tc_gain_ajust( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamples, /* i : number of samples to be compensate */ - const uint16_t nFadeLength, /* i : length of the crossfade in samples */ - float *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output*/ -) - -{ - int16_t i; - float gain, ene_tc, ene_sum, grad; - float last_gain; - - ene_tc = 0.0f; - ene_sum = 0.0f; - last_gain = st_ivas->hParamIsmDec->hParamIsm->last_dmx_gain; - - for ( i = 0; i < nSamples; i++ ) - { - ene_tc += transport_channels_f[0][i] * transport_channels_f[0][i] + transport_channels_f[1][i] * transport_channels_f[1][i]; /* L*L + R*R */ - ene_sum += ( transport_channels_f[0][i] + transport_channels_f[1][i] ) * ( transport_channels_f[0][i] + transport_channels_f[1][i] ); /* (L+R)*(L+R) */ - } - gain = sqrtf( ene_tc / ( ene_sum + EPSILON ) ); - if ( st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame > 1 ) - { - /* Smoothing */ - gain = 0.75f * gain + 0.25f * last_gain; - /* 10ms ramp */ - grad = ( gain - last_gain ) / (float) nFadeLength; /* slope between two consecutive gains, 480 samples length */ - for ( i = 0; i < ( nFadeLength ); i++ ) - { - transport_channels_f[0][i] *= ( last_gain + i * grad ); - transport_channels_f[1][i] *= ( last_gain + i * grad ); - } - for ( ; i < nSamples; i++ ) - { - transport_channels_f[0][i] *= gain; - transport_channels_f[1][i] *= gain; - } - } - else - { - for ( i = 0; i < nSamples; i++ ) - { - transport_channels_f[0][i] *= gain; - transport_channels_f[1][i] *= gain; - } - } - - st_ivas->hParamIsmDec->hParamIsm->last_dmx_gain = gain; - - return; -} -#else void ivas_ism_param_dec_tc_gain_ajust_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamples, /* i : number of samples to be compensate */ @@ -2679,14 +1452,12 @@ void ivas_ism_param_dec_tc_gain_ajust_fx( move16(); return; } -#endif /*-------------------------------------------------------------------------* * ivas_ism_param_dec_render_sf() * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_ism_param_dec_render_sf_fx( Decoder_Struct *st_ivas, IVAS_OUTPUT_SETUP hSetup, @@ -2830,96 +1601,6 @@ static void ivas_ism_param_dec_render_sf_fx( return; } -#else -static void ivas_ism_param_dec_render_sf( - Decoder_Struct *st_ivas, - IVAS_OUTPUT_SETUP hSetup, - const int16_t nchan_transport, - const int16_t nchan_out, - const int16_t nchan_out_woLFE, - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t ch, slot_idx, i, index_slot; - /* CLDFB Output Buffers */ - float Cldfb_RealBuffer[PARAM_ISM_MAX_CHAN][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[PARAM_ISM_MAX_CHAN][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float *Cldfb_RealBuffer_in[PARAM_ISM_MAX_DMX]; - float *Cldfb_ImagBuffer_in[PARAM_ISM_MAX_DMX]; - PARAM_ISM_DEC_HANDLE hParamIsmDec; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - Word16 slot_idx_start; - Word16 idx_in; - Word16 idx_lfe; - Word16 subframe_idx; - - hParamIsmDec = st_ivas->hParamIsmDec; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - slot_idx_start = hSpatParamRendCom->slots_rendered; - subframe_idx = hSpatParamRendCom->subframes_rendered; - - /* Set some memories to zero */ - for ( ch = 0; ch < nchan_out_woLFE; ch++ ) - { - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - set_f( Cldfb_RealBuffer[ch][slot_idx], 0.0f, hSpatParamRendCom->num_freq_bands ); - set_f( Cldfb_ImagBuffer[ch][slot_idx], 0.0f, hSpatParamRendCom->num_freq_bands ); - } - } - - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - index_slot = slot_idx_start + slot_idx; - - for ( ch = 0; ch < nchan_transport; ch++ ) - { - Cldfb_RealBuffer_in[ch] = &hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc[index_slot * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands]; - Cldfb_ImagBuffer_in[ch] = &hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc[index_slot * hSpatParamRendCom->num_freq_bands * nchan_transport + ch * hSpatParamRendCom->num_freq_bands]; - } - - /* Compute bandwise rendering to target LS using covariance rendering */ - ivas_param_ism_render_slot( hParamIsmDec, hSpatParamRendCom, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, - Cldfb_RealBuffer, Cldfb_ImagBuffer, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, index_slot, slot_idx, nchan_out_woLFE, nchan_transport ); - } - - /* CLDFB Synthesis */ - idx_in = 0; - idx_lfe = 0; - - for ( ch = 0; ch < nchan_out; ch++ ) - { - if ( ( hSetup.num_lfe > 0 ) && ( hSetup.index_lfe[idx_lfe] == ch ) ) - { - set_zero( output_f[ch], hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->num_freq_bands ); - if ( idx_lfe < ( hSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - float *RealBuffer[16]; - float *ImagBuffer[16]; - - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) - { - RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; - } - - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, output_f[ch], hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[ch] ); - idx_in++; - } - } - - hSpatParamRendCom->slots_rendered += hSpatParamRendCom->subframe_nbslots[subframe_idx]; - hSpatParamRendCom->subframes_rendered++; - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -2927,7 +1608,6 @@ static void ivas_ism_param_dec_render_sf( * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_dec_render_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ @@ -3036,101 +1716,12 @@ void ivas_param_ism_dec_render_fx( return; } -#else -void ivas_param_ism_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t ch, slots_to_render, first_sf, last_sf, subframe_idx; - uint16_t slot_size, n_samples_sf; - PARAM_ISM_DEC_HANDLE hParamIsmDec; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - IVAS_OUTPUT_SETUP hSetup; - int16_t nchan_transport, nchan_out, nchan_out_woLFE; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - - hParamIsmDec = st_ivas->hParamIsmDec; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - hSetup = st_ivas->hIntSetup; - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out = st_ivas->nchan_ism; - nchan_out_woLFE = nchan_out; - st_ivas->hDecoderConfig->nchan_out = nchan_out; - } - else - { - nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - } - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered, nSamplesAsked / slot_size ); - *nSamplesRendered = slots_to_render * slot_size; - first_sf = hSpatParamRendCom->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hSpatParamRendCom->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] = &output_f[ch][0]; - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - ivas_ism_param_dec_render_sf( st_ivas, hSetup, nchan_transport, nchan_out, nchan_out_woLFE, output_f_local ); - n_samples_sf = hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->slot_size; - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] += n_samples_sf; - } - } - - if ( hSpatParamRendCom->slots_rendered == hSpatParamRendCom->num_slots ) - { - /* copy the memories */ - /* store mixing matrix for next subframe */ - ivas_param_ism_update_mixing_matrix( hParamIsmDec, hParamIsmDec->hParamIsmRendering->mixing_matrix_lin, nchan_transport, nchan_out_woLFE ); - - /* store MetaData parameters */ - for ( ch = 0; ch < st_ivas->nchan_ism; ch++ ) - { - if ( st_ivas->hParamIsmDec->azimuth_values[ch] > 180.0f ) - { - st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hParamIsmDec->azimuth_values[ch] - 360.0f; - } - else - { - st_ivas->hIsmMetaData[ch]->azimuth = st_ivas->hParamIsmDec->azimuth_values[ch]; - } - - st_ivas->hIsmMetaData[ch]->elevation = st_ivas->hParamIsmDec->elevation_values[ch]; - } - } - - *nSamplesAvailableNext = ( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered ) * slot_size; - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_param_ism_params_to_masa_param_mapping() * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_params_to_masa_param_mapping_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -3283,123 +1874,3 @@ void ivas_param_ism_params_to_masa_param_mapping_fx( } return; } -#else -void ivas_param_ism_params_to_masa_param_mapping( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - PARAM_ISM_DEC_HANDLE hParamIsmDec; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - int16_t nBins; - int16_t band_idx, bin_idx, sf_idx; - int16_t brange[2]; - int16_t azimuth[2]; - int16_t elevation[2]; - float power_ratio[2]; - int32_t ivas_total_brate; - - hParamIsmDec = st_ivas->hParamIsmDec; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - nBins = hSpatParamRendCom->num_freq_bands; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - if ( !( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) ) - { - ivas_param_ism_dec_dequant_DOA( hParamIsmDec, st_ivas->nchan_ism ); - ivas_param_ism_dec_dequant_powrat( hParamIsmDec ); - st_ivas->hISMDTX.dtx_flag = 0; - } - else - { - st_ivas->hISMDTX.dtx_flag = 1; - } - - if ( st_ivas->nchan_ism > 1 ) - { - if ( st_ivas->hISMDTX.dtx_flag ) - { - float energy_ratio; - energy_ratio = powf( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->coherence_flt, 2.0f ); - - hSpatParamRendCom->numSimultaneousDirections = 1; - azimuth[0] = (int16_t) roundf( hParamIsmDec->azimuth_values[0] ); - elevation[0] = (int16_t) roundf( hParamIsmDec->elevation_values[0] ); - - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - for ( bin_idx = 0; bin_idx < nBins; bin_idx++ ) - { - hSpatParamRendCom->azimuth[sf_idx][bin_idx] = azimuth[0]; - hSpatParamRendCom->elevation[sf_idx][bin_idx] = elevation[0]; - - hSpatParamRendCom->energy_ratio1[sf_idx][bin_idx] = energy_ratio; - - hSpatParamRendCom->spreadCoherence[sf_idx][bin_idx] = 0.0f; - hSpatParamRendCom->surroundingCoherence[sf_idx][bin_idx] = 0.0; - } - } - } - else - { - hSpatParamRendCom->numSimultaneousDirections = 2; - for ( band_idx = 0; band_idx < hParamIsmDec->hParamIsm->nbands; band_idx++ ) - { - brange[0] = hParamIsmDec->hParamIsm->band_grouping[band_idx]; - brange[1] = hParamIsmDec->hParamIsm->band_grouping[band_idx + 1]; - - azimuth[0] = (int16_t) roundf( hParamIsmDec->azimuth_values[hParamIsmDec->hParamIsm->obj_indices[band_idx][0][0]] ); - elevation[0] = (int16_t) roundf( hParamIsmDec->elevation_values[hParamIsmDec->hParamIsm->obj_indices[band_idx][0][0]] ); - power_ratio[0] = hParamIsmDec->power_ratios[band_idx][0][0]; - - azimuth[1] = (int16_t) roundf( hParamIsmDec->azimuth_values[hParamIsmDec->hParamIsm->obj_indices[band_idx][0][1]] ); - elevation[1] = (int16_t) roundf( hParamIsmDec->elevation_values[hParamIsmDec->hParamIsm->obj_indices[band_idx][0][1]] ); - power_ratio[1] = hParamIsmDec->power_ratios[band_idx][0][1]; - - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - for ( bin_idx = brange[0]; bin_idx < brange[1]; bin_idx++ ) - { - hSpatParamRendCom->azimuth[sf_idx][bin_idx] = azimuth[0]; - hSpatParamRendCom->elevation[sf_idx][bin_idx] = elevation[0]; - hSpatParamRendCom->energy_ratio1[sf_idx][bin_idx] = power_ratio[0]; - hSpatParamRendCom->azimuth2[sf_idx][bin_idx] = azimuth[1]; - hSpatParamRendCom->elevation2[sf_idx][bin_idx] = elevation[1]; - hSpatParamRendCom->energy_ratio2[sf_idx][bin_idx] = power_ratio[1]; - } - } - } - - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - for ( bin_idx = 0; bin_idx < nBins; bin_idx++ ) - { - hSpatParamRendCom->spreadCoherence[sf_idx][bin_idx] = 0.0f; - hSpatParamRendCom->spreadCoherence2[sf_idx][bin_idx] = 0.0f; - hSpatParamRendCom->surroundingCoherence[sf_idx][bin_idx] = 0.0; - } - } - } - } - else - { - hSpatParamRendCom->numSimultaneousDirections = 1; - azimuth[0] = (int16_t) roundf( hParamIsmDec->azimuth_values[0] ); - elevation[0] = (int16_t) roundf( hParamIsmDec->elevation_values[0] ); - - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - for ( bin_idx = 0; bin_idx < nBins; bin_idx++ ) - { - hSpatParamRendCom->azimuth[sf_idx][bin_idx] = azimuth[0]; - hSpatParamRendCom->elevation[sf_idx][bin_idx] = elevation[0]; - hSpatParamRendCom->energy_ratio1[sf_idx][bin_idx] = 1.0f; - hSpatParamRendCom->spreadCoherence[sf_idx][bin_idx] = 0.0f; - hSpatParamRendCom->surroundingCoherence[sf_idx][bin_idx] = 0.0; - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index 68998a30e..2f2a0fda5 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -52,67 +52,6 @@ * Open struct for object rendering, reserve memory, and init values. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_renderer_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t i; - uint16_t interpolator_length; - uint16_t init_interpolator_length; - ivas_error error; - - if ( ( st_ivas->hIsmRendererData = (ISM_RENDERER_HANDLE) malloc( sizeof( ISM_RENDERER_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer\n" ) ); - } - - if ( st_ivas->hIntSetup.is_loudspeaker_setup && st_ivas->hIntSetup.ls_azimuth != NULL && st_ivas->hIntSetup.ls_elevation != NULL && st_ivas->hEFAPdata == NULL ) - { - if ( ( error = efap_init_data( &( st_ivas->hEFAPdata ), st_ivas->hIntSetup.ls_azimuth, st_ivas->hIntSetup.ls_elevation, st_ivas->hIntSetup.nchan_out_woLFE, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - set_f( st_ivas->hIsmRendererData->prev_gains[i], 0.0f, MAX_OUTPUT_CHANNELS ); - set_f( st_ivas->hIsmRendererData->gains[i], 0.0f, MAX_OUTPUT_CHANNELS ); - } - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - init_interpolator_length = NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_CLDFB_TIMESLOTS * CLDFB_SLOT_NS ); - interpolator_length = (uint16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - } - else - { - init_interpolator_length = (uint16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - interpolator_length = init_interpolator_length; - } - - if ( ( st_ivas->hIsmRendererData->interpolator = (float *) malloc( sizeof( float ) * init_interpolator_length ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer interpolator\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - if ( ( st_ivas->hIsmRendererData->interpolator_fx = (Word16 *) malloc( sizeof( Word16 ) * init_interpolator_length ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer interpolator\n" ) ); - } - st_ivas->hIsmRendererData->interpolator_len = init_interpolator_length; -#endif - - for ( i = 0; i < interpolator_length; i++ ) - { - st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length - 1 ); - } - - return IVAS_ERR_OK; -} - -#else #define SIN_NEG_30_DEGREES_Q15 ( (Word16) 0xC000 ) #define SIN_30_DEGREES_Q15 ( (Word16) 0x4000 ) @@ -183,7 +122,6 @@ ivas_error ivas_ism_renderer_open_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------------* @@ -191,28 +129,6 @@ ivas_error ivas_ism_renderer_open_fx( * * Close struct for object rendering. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_renderer_close( - ISM_RENDERER_HANDLE *hIsmRendererData /* i/o: ISM renderer handle */ -) -{ - IF( hIsmRendererData == NULL || *hIsmRendererData == NULL ) - { - return; - } - - IF( ( *hIsmRendererData )->interpolator != NULL ) - { - free( ( *hIsmRendererData )->interpolator ); - ( *hIsmRendererData )->interpolator = NULL; - } - - free( *hIsmRendererData ); - *hIsmRendererData = NULL; - - return; -} -#else void ivas_ism_renderer_close( ISM_RENDERER_HANDLE *hIsmRendererData /* i/o: ISM renderer handle */ ) @@ -234,144 +150,12 @@ void ivas_ism_renderer_close( return; } -#endif /*-------------------------------------------------------------------------* * ivas_ism_render_sf() * * Object rendering process *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ism_render_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[], /* i/o: core-coder transport channels/object output */ - const int16_t n_samples_to_render /* i : output frame length per channel */ -) -{ - int16_t i, j, k, j2; - float g2, *tc; -#ifndef IVAS_FLOAT_FIXED - float *g1; -#endif - int16_t num_objects, nchan_out_woLFE, lfe_index; - int16_t azimuth, elevation; - int16_t tc_offset; - int16_t interp_offset; - float gain, prev_gain; - float tc_local[MAX_NUM_OBJECTS][L_FRAME48k]; - float *p_tc[MAX_NUM_OBJECTS]; - - num_objects = st_ivas->nchan_transport; - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - num_objects = st_ivas->nchan_ism; - } - - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - - tc_offset = st_ivas->hTcBuffer->n_samples_rendered; - interp_offset = st_ivas->hTcBuffer->n_samples_rendered; - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - for ( i = 0; i < num_objects; i++ ) - { - p_tc[i] = &st_ivas->hTcBuffer->tc[i][tc_offset]; - } - } - else - { - for ( i = 0; i < num_objects; i++ ) - { - mvr2r( &output_f[i][tc_offset], tc_local[i], n_samples_to_render ); - p_tc[i] = tc_local[i]; - } - } - - for ( i = 0; i < nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; i++ ) - { - set_f( output_f[i], 0.0f, n_samples_to_render ); - } - - if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] == 1 ) - { - ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); - interp_offset = 0; - } - - for ( i = 0; i < num_objects; i++ ) - { - /* Combined rotation: rotate the object positions depending the head and external orientations */ - if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] == 1 ) - { - rotateAziEle( st_ivas->hIsmMetaData[i]->azimuth, st_ivas->hIsmMetaData[i]->elevation, &azimuth, &elevation, st_ivas->hCombinedOrientationData->Rmat[0], st_ivas->hIntSetup.is_planar_setup ); - if ( st_ivas->hEFAPdata != NULL ) - { -#ifdef IVAS_FLOAT_FIXED - float gains[MAX_OUTPUT_CHANNELS]; - fixedToFloat_arrL( st_ivas->hIsmRendererData->gains_fx[i], gains, Q30, MAX_OUTPUT_CHANNELS ); - efap_determine_gains( st_ivas->hEFAPdata, gains, azimuth, elevation, EFAP_MODE_EFAP ); -#else - efap_determine_gains( st_ivas->hEFAPdata, st_ivas->hIsmRendererData->gains[i], azimuth, elevation, EFAP_MODE_EFAP ); -#endif - } - } - - lfe_index = 0; - for ( j = 0, j2 = 0; j < nchan_out_woLFE; j++, j2++ ) - { - if ( ( st_ivas->hIntSetup.num_lfe > 0 ) && ( st_ivas->hIntSetup.index_lfe[lfe_index] == j ) ) - { - ( lfe_index < ( st_ivas->hIntSetup.num_lfe - 1 ) ) ? ( lfe_index++, j2++ ) : j2++; - } - -#ifdef IVAS_FLOAT_FIXED - gain = fix_to_float( st_ivas->hIsmRendererData->gains_fx[i][j], Q30 ); - prev_gain = fix_to_float( st_ivas->hIsmRendererData->prev_gains_fx[i][j], Q30 ); -#else - gain = st_ivas->hIsmRendererData->gains[i][j]; - prev_gain = st_ivas->hIsmRendererData->prev_gains[i][j]; -#endif - if ( fabsf( gain ) > 0.0f || fabsf( prev_gain ) > 0.0f ) - { -#ifdef IVAS_FLOAT_FIXED - Word16 *g1_fx; - g1_fx = &st_ivas->hIsmRendererData->interpolator_fx[interp_offset]; -#else - g1 = &st_ivas->hIsmRendererData->interpolator[interp_offset]; -#endif - tc = p_tc[i]; - for ( k = 0; k < n_samples_to_render; k++ ) - { -#ifdef IVAS_FLOAT_FIXED - g2 = 1.0f - fix16_to_float( *g1_fx, Q15 ); - output_f[j2][k] += ( fix16_to_float( *g1_fx, Q15 ) * gain + g2 * prev_gain ) * *( tc++ ); - g1_fx++; -#else - g2 = 1.0f - *g1; - output_f[j2][k] += ( *( g1++ ) * gain + g2 * prev_gain ) * *( tc++ ); -#endif - } - } - - /* update here only in case of head rotation */ - if ( st_ivas->hCombinedOrientationData != NULL && st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] == 1 ) - { -#ifdef IVAS_FLOAT_FIXED - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = float_to_fix( gain, Q30 ); -#else - st_ivas->hIsmRendererData->prev_gains[i][j] = gain; -#endif - } - } - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_to_render ); - - return; -} -#else void ivas_ism_render_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output_fx[], /* i/o: core-coder transport channels/object output Q11*/ @@ -499,7 +283,6 @@ void ivas_ism_render_sf_fx( return; } -#endif /*-------------------------------------------------------------------------* @@ -508,7 +291,6 @@ void ivas_ism_render_sf_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_get_stereo_gains_fx( const Word16 aziDeg, /* i : object azimuth Q0*/ const Word16 eleDeg, /* i : object elevation Q0*/ @@ -557,7 +339,7 @@ void ivas_ism_get_stereo_gains_fx( } ELSE /* Tangent panning law */ { - get_panning_gain( sin_az_cos_el, gains ); + get_panning_gain_fx( sin_az_cos_el, gains ); } *left_gain_fx = gains[0]; @@ -567,48 +349,6 @@ void ivas_ism_get_stereo_gains_fx( return; } -#else -void ivas_ism_get_stereo_gains( - const float azimuth, /* i : object azimuth */ - const float elevation, /* i : object elevation */ - float *left_gain, /* o : left channel gain */ - float *right_gain /* o : right channel gain */ -) -{ - float aziRad, eleRad; - float y, mappedX, aziRadMapped, A, A2, A3; - const float LsAngleRad = 30.0f * PI_OVER_180; - - /* Convert azi and ele to an azi value of the cone of confusion */ - aziRad = azimuth * PI_OVER_180; - eleRad = elevation * PI_OVER_180; - y = ( sinf( aziRad ) * cosf( eleRad ) ); - mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); - aziRadMapped = atan2f( y, mappedX ); - - /* Determine the amplitude panning gains */ - if ( aziRadMapped >= LsAngleRad ) - { /* Left side */ - *left_gain = 1.0f; - *right_gain = 0.0f; - } - else if ( aziRadMapped <= -LsAngleRad ) - { /* Right side */ - *left_gain = 0.0f; - *right_gain = 1.0f; - } - else /* Tangent panning law */ - { - A = tanf( aziRadMapped ) / tanf( LsAngleRad ); - A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); - A3 = 1.0f / ( A2 * A2 + 1.0f ); - *left_gain = sqrtf( A3 ); - *right_gain = sqrtf( 1.0f - A3 ); - } - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_masa_oism_separate_object_renderer_open() @@ -616,64 +356,6 @@ void ivas_ism_get_stereo_gains( * Open structures, reserve memory, and init values. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_separate_object_renderer_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t interpolator_length; - int16_t i; - int16_t init_interpolator_length; - - if ( ( st_ivas->hIsmRendererData = (ISM_RENDERER_HANDLE) malloc( sizeof( ISM_RENDERER_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for MASA ISM renderer \n" ) ); - } - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - set_f( st_ivas->hIsmRendererData->prev_gains[i], 0.0f, MAX_OUTPUT_CHANNELS ); - } - - init_interpolator_length = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ); - interpolator_length = init_interpolator_length; - - st_ivas->hIsmRendererData->interpolator = (float *) malloc( sizeof( float ) * init_interpolator_length ); - - for ( i = 0; i < interpolator_length; i++ ) - { - st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length ); - } - st_ivas->hIsmRendererData->interpolator_length = interpolator_length; - - st_ivas->hMasaIsmData->delayBuffer_size = (int16_t) ( ( st_ivas->hDecoderConfig->output_Fs / 50 ) / MAX_PARAM_SPATIAL_SUBFRAMES ); - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - st_ivas->hMasaIsmData->delayBuffer_nchan = 1; - } - else - { - st_ivas->hMasaIsmData->delayBuffer_nchan = st_ivas->nchan_ism; - } - - if ( ( st_ivas->hMasaIsmData->delayBuffer = (float **) malloc( st_ivas->hMasaIsmData->delayBuffer_nchan * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for MASA ISM delay buffer \n" ) ); - } - - for ( i = 0; i < st_ivas->hMasaIsmData->delayBuffer_nchan; i++ ) - { - if ( ( st_ivas->hMasaIsmData->delayBuffer[i] = (float *) malloc( st_ivas->hMasaIsmData->delayBuffer_size * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for MASA ISM delay buffer \n" ) ); - } - set_zero( st_ivas->hMasaIsmData->delayBuffer[i], st_ivas->hMasaIsmData->delayBuffer_size ); - } - - return IVAS_ERR_OK; -} -#else ivas_error ivas_omasa_separate_object_renderer_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -741,7 +423,6 @@ ivas_error ivas_omasa_separate_object_renderer_open( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------------* @@ -750,36 +431,6 @@ ivas_error ivas_omasa_separate_object_renderer_open( * Close structures, free memory. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_separate_object_renderer_close( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t i; - - if ( st_ivas->hMasaIsmData != NULL ) - { - if ( st_ivas->hMasaIsmData->delayBuffer != NULL ) - { - for ( i = 0; i < st_ivas->hMasaIsmData->delayBuffer_nchan; i++ ) - { - if ( st_ivas->hMasaIsmData->delayBuffer[i] != NULL ) - { - free( st_ivas->hMasaIsmData->delayBuffer[i] ); - st_ivas->hMasaIsmData->delayBuffer[i] = NULL; - } - } - - free( st_ivas->hMasaIsmData->delayBuffer ); - st_ivas->hMasaIsmData->delayBuffer = NULL; - } - } - - ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); - - return; -} -#else void ivas_omasa_separate_object_renderer_close( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -808,7 +459,6 @@ void ivas_omasa_separate_object_renderer_close( return; } -#endif /*-------------------------------------------------------------------------* @@ -817,168 +467,6 @@ void ivas_omasa_separate_object_renderer_close( * Rendering separated objects and mixing them to the parametrically rendered signals for JBM *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_separate_object_render_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const uint16_t nSamplesRendered, /* i : number of samples rendered */ - float input_f_in[][L_FRAME48k], /* i : separated object signal */ - float *output_f[], /* o : rendered time signal */ - const int16_t subframes_rendered, /* i : number of subframes rendered */ - const int16_t slots_rendered /* i : number of CLDFB slots rendered */ -) -{ - VBAP_HANDLE hVBAPdata; - DIRAC_REND_HANDLE hDirACRend; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - int16_t nchan_out_woLFE, num_lfe; - ISM_RENDERER_HANDLE hRendererData; - int16_t j, k, j2; - int16_t obj; - float gains[MAX_OUTPUT_CHANNELS]; - float g1, g2; - int16_t lfe_index; - int16_t azimuth, elevation; - int16_t num_objects; - uint8_t single_separated; - float *input_f[MAX_TRANSPORT_CHANNELS]; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - int16_t offsetSamples; - int16_t n_samples_sf, md_idx; - int16_t slots_to_render, first_sf, last_sf, subframe_idx; - - hVBAPdata = st_ivas->hVBAPdata; - hDirACRend = st_ivas->hDirACRend; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; - num_lfe = st_ivas->hIntSetup.num_lfe; - hRendererData = st_ivas->hIsmRendererData; - lfe_index = hDirACRend->hOutSetup.index_lfe[0]; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - single_separated = 1; - num_objects = 1; - } - else - { - single_separated = 0; - num_objects = st_ivas->nchan_ism; - } - - offsetSamples = slots_rendered * hSpatParamRendCom->slot_size; - - for ( j = 0; j < nchan_out_woLFE + num_lfe; j++ ) - { - output_f_local[j] = output_f[j]; - } - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - for ( obj = 0; obj < num_objects; obj++ ) - { - input_f[obj] = &st_ivas->hTcBuffer->tc[obj + 2][offsetSamples]; - } - } - else - { - for ( obj = 0; obj < num_objects; obj++ ) - { - input_f[obj] = input_f_in[obj]; - } - } - - slots_to_render = nSamplesRendered / hSpatParamRendCom->slot_size; - first_sf = subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hSpatParamRendCom->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( obj = 0; obj < num_objects; obj++ ) - { - /* Delay the signal to match CLDFB delay. Delay the whole buffer with the first rendering call of the stretched buffer. */ - if ( slots_rendered == 0 ) - { - int16_t tcBufferSize; - - tcBufferSize = hSpatParamRendCom->num_slots * hSpatParamRendCom->slot_size; - delay_signal_float( input_f[obj], tcBufferSize, st_ivas->hMasaIsmData->delayBuffer[obj], st_ivas->hMasaIsmData->delayBuffer_size ); - } - offsetSamples = 0; - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - n_samples_sf = hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->slot_size; - if ( n_samples_sf != hRendererData->interpolator_length ) - { - for ( k = 0; k < n_samples_sf; k++ ) - { - hRendererData->interpolator[k] = (float) k / ( (float) n_samples_sf ); - } - hRendererData->interpolator_length = n_samples_sf; - } - - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - - if ( single_separated ) - { - azimuth = st_ivas->hMasaIsmData->azimuth_separated_ism[md_idx]; - elevation = st_ivas->hMasaIsmData->elevation_separated_ism[md_idx]; - } - else - { - azimuth = st_ivas->hMasaIsmData->azimuth_ism[obj][md_idx]; - elevation = st_ivas->hMasaIsmData->elevation_ism[obj][md_idx]; - } - - if ( st_ivas->hOutSetup.is_planar_setup ) - { - /* If no elevation support in output format, then rendering should be done with zero elevation */ - elevation = 0; - } - - if ( hVBAPdata != NULL ) - { - vbap_determine_gains( hVBAPdata, gains, azimuth, elevation, 1 ); - } - else - { - ivas_dirac_dec_get_response( azimuth, elevation, gains, hDirACRend->hOutSetup.ambisonics_order ); - } - - for ( j = 0; j < nchan_out_woLFE; j++ ) - { - if ( hDirACRend->hOutSetup.num_lfe > 0 ) - { - j2 = j + ( j >= lfe_index ); - } - else - { - j2 = j; - } - - if ( fabsf( gains[j] ) > 0.0f || fabsf( hRendererData->prev_gains[obj][j] ) > 0.0f ) - { - for ( k = 0; k < n_samples_sf; k++ ) - { - g1 = hRendererData->interpolator[k]; - g2 = 1.0f - g1; - output_f_local[j2][k + offsetSamples] += ( g1 * gains[j] + g2 * hRendererData->prev_gains[obj][j] ) * input_f[obj][k + offsetSamples]; - } - } - hRendererData->prev_gains[obj][j] = gains[j]; - } - - offsetSamples += n_samples_sf; - } - } - - return; -} -#else void ivas_omasa_separate_object_render_jbm_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const UWord16 nSamplesRendered, /* i : number of samples rendered */ @@ -1166,4 +654,3 @@ void ivas_omasa_separate_object_render_jbm_fx( return; } -#endif diff --git a/lib_dec/ivas_jbm_dec.c b/lib_dec/ivas_jbm_dec.c index 26740e3ae..d69fa8525 100644 --- a/lib_dec/ivas_jbm_dec.c +++ b/lib_dec/ivas_jbm_dec.c @@ -53,29 +53,15 @@ * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_dec_copy_tc( Decoder_Struct *st_ivas, const Word16 nSamplesForRendering, Word16 *nSamplesResidual, Word32 *data, Word32 *tc_digest_f[], Word16 data_q ); -#else -static void ivas_jbm_dec_copy_tc( Decoder_Struct *st_ivas, const int16_t nSamplesForRendering, int16_t *nSamplesResidual, float *data, float *tc_digest_f[] ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_jbm_dec_tc_buffer_playout( Decoder_Struct *st_ivas, const uint16_t nSamplesAsked, uint16_t *nSamplesRendered, float *output[] ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_dec_tc_buffer_playout_fx( Decoder_Struct *st_ivas, const UWord16 nSamplesAsked, UWord16 *nSamplesRendered, Word32 *output_fx[] ); -#endif static void ivas_jbm_dec_copy_masa_meta_to_buffer( Decoder_Struct *st_ivas ); -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_masa_sf_to_slot_map( Decoder_Struct *st_ivas, const Word16 nCldfbTs ); -#else -static void ivas_jbm_masa_sf_to_slot_map( Decoder_Struct *st_ivas, const int16_t nCldfbTs ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ceil_fx16( Word16 inp, Word16 Q ); static Word16 ceil_fx16( Word16 inp, Word16 Q ) { @@ -86,7 +72,6 @@ static Word16 ceil_fx16( Word16 inp, Word16 Q ) } return ret; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_tc() @@ -94,7 +79,6 @@ static Word16 ceil_fx16( Word16 inp, Word16 Q ) * Principal IVAS JBM decoder routine, decoding of metadata and transport channels *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_jbm_dec_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *data_fx /*Q11*/ @@ -193,7 +177,7 @@ ivas_error ivas_jbm_dec_tc_fx( /* HP filtering */ FOR( n = 0; n < s_min( nchan_out, st_ivas->nchan_transport ); n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } test(); @@ -277,7 +261,7 @@ ivas_error ivas_jbm_dec_tc_fx( } /* HP filtering */ - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } test(); @@ -643,7 +627,7 @@ ivas_error ivas_jbm_dec_tc_fx( /* HP filtering */ FOR( n = 0; n < nchan_remapped; n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) ) @@ -823,7 +807,7 @@ ivas_error ivas_jbm_dec_tc_fx( FOR( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } Word16 output_q = 11; @@ -1064,7 +1048,7 @@ ivas_error ivas_jbm_dec_tc_fx( /* HP filtering */ FOR( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } nchan_remapped = ivas_sba_remapTCs_fx( &p_output_fx[sba_ch_idx], st_ivas, output_frame ); @@ -1165,7 +1149,7 @@ ivas_error ivas_jbm_dec_tc_fx( { IF( NE_16( n, LFE_CHANNEL ) ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } } @@ -1223,7 +1207,7 @@ ivas_error ivas_jbm_dec_tc_fx( { IF( NE_16( n, LFE_CHANNEL ) ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } } @@ -1289,7 +1273,7 @@ ivas_error ivas_jbm_dec_tc_fx( /* HP filtering */ FOR( n = 0; n < st_ivas->nchan_transport; n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } /* Rendering */ @@ -1523,7 +1507,7 @@ ivas_error ivas_jbm_dec_tc_fx( /* HP filtering */ FOR( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) { - hp20_fix32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); + hp20_fx_32( p_output_fx[n], output_frame, st_ivas->mem_hp20_out_fx[n], output_Fs ); } IF( EQ_32( st_ivas->renderer_type, RENDERER_MCMASA_MONO_STEREO ) ) @@ -1590,1851 +1574,303 @@ ivas_error ivas_jbm_dec_tc_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_jbm_dec_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *data /* o : transport channel signals */ -) -{ - int16_t n, output_frame, nchan_out; - Decoder_State *st; /* used for bitstream handling */ - float *p_output[MAX_TRANSPORT_CHANNELS]; /* 'float' buffer for output synthesis */ - int16_t nchan_remapped; - int16_t nb_bits_metadata[MAX_SCE + 1]; - int32_t output_Fs, ivas_total_brate; - AUDIO_CONFIG output_config; - ivas_error error; - int16_t num_md_sub_frames; - int32_t ism_total_brate; - - push_wmops( "ivas_jbm_dec_tc" ); - - /*----------------------------------------------------------------* - * Initialization of local vars after struct has been set - *----------------------------------------------------------------*/ - output_Fs = st_ivas->hDecoderConfig->output_Fs; - nchan_out = st_ivas->hTcBuffer->nchan_transport_jbm; - output_config = st_ivas->hDecoderConfig->output_config; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); +/*--------------------------------------------------------------------------* + * ivas_jbm_dec_feed_tc_to_renderer() + * + * Feed decoded transport channels and metadata to the IVAS JBM renderer routine + *--------------------------------------------------------------------------*/ +void ivas_jbm_dec_feed_tc_to_renderer_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const Word16 nSamplesForRendering, /* i : number of TC samples available for rendering */ + Word16 *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ + Word32 *data_fx /* i : transport channels Q11*/ +) +{ + Word32 data_f_fx[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k] = { 0 }; /* Word32 buffer for transport channels that will be directly converted with the CLDFB */ + Word32 *p_data_f_fx[MAX_CLDFB_DIGEST_CHANNELS]; + Word16 i; - for ( n = 0; n < MAX_TRANSPORT_CHANNELS; n++ ) + FOR( i = 0; i < MAX_CLDFB_DIGEST_CHANNELS; i++ ) { - p_output[n] = st_ivas->p_output_f[n]; - if ( p_output[n] != NULL ) - { - set_zero( p_output[n], L_FRAME48k ); - } + set_zero_fx( data_f_fx[i], MAX_JBM_L_FRAME48k ); } - - if ( !st_ivas->hDecoderConfig->Opt_tsm ) + if ( st_ivas->hTcBuffer ) { - for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) - { - st_ivas->hTcBuffer->tc[n] = st_ivas->p_output_f[n]; - } + st_ivas->hTcBuffer->q_tc_fx = 11; + move16(); } + Word16 n, n_render_timeslots; - /*----------------------------------------------------------------* - * Decoding + pre-rendering - *----------------------------------------------------------------*/ + push_wmops( "ivas_jbm_dec_feed_tc_to_rendererer" ); + FOR( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) + { + p_data_f_fx[n] = &data_f_fx[n][0]; + } - if ( st_ivas->bfi && st_ivas->ini_frame == 0 ) + IF( st_ivas->hDecoderConfig->Opt_tsm ) { - /* zero output when first frame(s) is lost */ - for ( n = 0; n < nchan_out; n++ ) - { - set_f( p_output[n], 0.0f, output_frame ); - } + ivas_jbm_dec_copy_tc( st_ivas, nSamplesForRendering, nSamplesResidual, data_fx, p_data_f_fx, 11 ); } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) + ELSE { - st_ivas->hCPE[0]->element_brate = ivas_total_brate; - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } + *nSamplesResidual = 0; + move16(); + } + n_render_timeslots = idiv1616( st_ivas->hTcBuffer->n_samples_available, st_ivas->hTcBuffer->n_samples_granularity ); - /* HP filtering */ - for ( n = 0; n < min( nchan_out, st_ivas->nchan_transport ); n++ ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } + test(); + IF( EQ_16( st_ivas->hTcBuffer->tc_buffer_mode, TC_BUFFER_MODE_BUFFER ) ) + { + ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - if ( st_ivas->renderer_type == RENDERER_MC && st_ivas->hDecoderConfig->nchan_out == 1 ) + test(); + test(); + IF( ( EQ_16( st_ivas->ivas_format, MASA_FORMAT ) || EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) && EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - ivas_ls_setup_conversion( st_ivas, st_ivas->nchan_transport, output_frame, p_output, p_output ); + ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots ); } } - else if ( st_ivas->ivas_format == ISM_FORMAT ) + ELSE IF( EQ_16( st_ivas->ivas_format, STEREO_FORMAT ) ) { - /* Metadata decoding and configuration */ - if ( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) + ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); + } + ELSE IF( EQ_16( st_ivas->ivas_format, ISM_FORMAT ) ) + { + /* Rendering */ + IF( EQ_16( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { - ivas_ism_dtx_dec( st_ivas, nb_bits_metadata ); - - /* decode dominant object first so the noise energy of the other objects can be limited */ - if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &p_output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) != IVAS_ERR_OK ) + test(); + test(); + test(); + IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - return error; - } + ivas_dirac_dec_set_md_map_fx( st_ivas, n_render_timeslots ); - ivas_ism_dtx_limit_noise_energy_for_near_silence( st_ivas->hSCE, st_ivas->hISMDTX.sce_id_dtx, st_ivas->nchan_transport ); - } - else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, st_ivas->hParamIsmDec->hParamIsm, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) - { - return error; + ivas_param_ism_params_to_masa_param_mapping_fx( st_ivas ); } - } - else /* ISM_MODE_DISC */ - { - if ( ( error = ivas_ism_metadata_dec( ivas_total_brate, st_ivas->nchan_ism, &( st_ivas->nchan_transport ), st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) + ELSE IF( EQ_16( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_16( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { - return error; - } - } - for ( n = 0; n < st_ivas->nchan_transport; n++ ) - { - /* for DTX frames, dominant object has already been decoded before */ - if ( !( ( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) && n == st_ivas->hISMDTX.sce_id_dtx ) ) - { - if ( ( error = ivas_sce_dec( st_ivas, n, &p_output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK ) - { - return error; - } + ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx, Q11 ); } - - /* HP filtering */ - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); } - - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) + ELSE /* ISM_MODE_DISC */ { - ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); + ivas_ism_dec_digest_tc_fx( st_ivas ); } - else if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) + } + ELSE IF( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, MASA_FORMAT ) ) + { + IF( st_ivas->hSCE[0] ) { - /* loudness correction */ - ivas_dirac_dec_binaural_sba_gain( p_output, st_ivas->nchan_transport, output_frame ); + Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); + IF( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) + { + shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); + } + scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) + st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); } + ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) + ELSE IF( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) { - set_s( nb_bits_metadata, 0, MAX_SCE ); - - /* read parameters from the bitstream */ - if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hQMetaData != NULL ) + IF( EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) { - st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; + ivas_ism_dec_digest_tc_fx( st_ivas ); - if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + test(); + test(); + test(); + test(); + /* delay the objects here for all renderers where it is needed */ + IF( + EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || + EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) || + EQ_16( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || + EQ_16( st_ivas->renderer_type, RENDERER_OSBA_LS ) || + EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - return error; + FOR( n = 0; n < st_ivas->nchan_ism; n++ ) + { + delay_signal_fx( st_ivas->hTcBuffer->tc_fx[n], st_ivas->hTcBuffer->n_samples_available, st_ivas->hSbaIsmData->delayBuffer_fx[n], st_ivas->hSbaIsmData->delayBuffer_size ); + } } - if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - ivas_jbm_dec_copy_masa_meta_to_buffer( st_ivas ); - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT ) - { - if ( ( error = ivas_spar_dec( st_ivas, nb_bits_metadata ) ) != IVAS_ERR_OK ) + IF( !st_ivas->sba_dirac_stereo_flag ) { - return error; + IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) + { + Word16 temp, temp_e; + temp = BASOP_Util_Divide1616_Scale( st_ivas->hTcBuffer->n_samples_granularity, st_ivas->hSpatParamRendCom->slot_size, &temp_e ); + n_render_timeslots = extract_l( L_shr( L_mult0( n_render_timeslots, temp ), sub( 15, temp_e ) ) ); + } + + IF( st_ivas->hSCE[0] ) + { + Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); + if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) + { + shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); + } + scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) + st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); + } + ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } } - - if ( st_ivas->nchan_transport == CPE_CHANNELS && st_ivas->nCPE >= 1 ) + ELSE { - st_ivas->hCPE[0]->brate_surplus = 0; - st_ivas->hCPE[0]->element_brate = ivas_total_brate; - } + ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - /* core-decoding of transport channels */ - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + IF( st_ivas->hSCE[0] ) { - return error; + Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); + if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) + { + shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); + } + scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) + st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); } + ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } - else if ( st_ivas->nCPE == 1 ) + } + ELSE IF( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) + { + test(); + IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) && EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } + n_render_timeslots = i_mult( n_render_timeslots, idiv1616( st_ivas->hTcBuffer->n_samples_granularity, st_ivas->hSpatParamRendCom->slot_size ) ); } - else if ( st_ivas->nCPE > 1 ) + + IF( st_ivas->hSCE[0] ) { - if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) + Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); + if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) { - return error; + shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); } + scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31- (st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp - shift) + st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); + move16(); } + ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - /* TCs remapping */ - nchan_remapped = st_ivas->nchan_transport; - if ( st_ivas->sba_dirac_stereo_flag ) + IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - nchan_remapped = nchan_out; - - if ( st_ivas->ivas_format == SBA_FORMAT ) - { - ivas_agc_dec_process( st_ivas->hSpar->hAgcDec, p_output, p_output, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, output_frame ); - - if ( st_ivas->hSpar->hPCA != NULL ) - { - ivas_pca_dec( st_ivas->hSpar->hPCA, output_frame, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, ivas_total_brate, st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, p_output ); - } - - ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); - } - - ivas_sba_dirac_stereo_dec( st_ivas, p_output, output_frame, st_ivas->ivas_format == MC_FORMAT ); + ivas_ism_dec_digest_tc_fx( st_ivas ); } - else if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && ( ivas_total_brate > IVAS_SID_5k2 || ( ivas_total_brate <= IVAS_SID_5k2 && st_ivas->nCPE > 0 && st_ivas->hCPE[0]->nchan_out == 1 ) ) ) + } + ELSE IF( EQ_16( st_ivas->ivas_format, MC_FORMAT ) ) + { + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCT ) ) { - nchan_remapped = 1; /* Only one channel transported */ + ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); } - - /* HP filtering */ - for ( n = 0; n < nchan_remapped; n++ ) + ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); + ivas_mc_paramupmix_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } - - if ( st_ivas->ivas_format == SBA_FORMAT ) + ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) { - nchan_remapped = ivas_sba_remapTCs( p_output, st_ivas, output_frame ); - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + Word16 nchan_transport = st_ivas->nchan_transport; + move16(); + Word16 nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); + Word16 nchan_out_cov; + test(); + test(); + IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( st_ivas->sba_analysis_order, ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - ivas_sba_mix_matrix_determiner( st_ivas->hSpar, p_output, st_ivas->bfi, nchan_remapped, output_frame, num_md_sub_frames ); + nchan_out_cov = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); } - else if ( st_ivas->renderer_type != RENDERER_DISABLE ) + ELSE IF( EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_CLDFB ) ) { - ivas_spar_dec_agc_pca( st_ivas, p_output, output_frame ); + nchan_out_cov = nchan_out_transport; + move16(); } - } - - if ( st_ivas->ivas_format == MASA_FORMAT ) - { - ivas_masa_prerender( st_ivas, p_output, output_frame, nchan_remapped ); - } - else if ( st_ivas->ivas_format == SBA_FORMAT && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - /* loudness correction */ - ivas_dirac_dec_binaural_sba_gain( p_output, nchan_remapped, output_frame ); - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - int16_t nchan_ism, nchan_transport_ism; - int16_t dirac_bs_md_write_idx; - - set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); - - /* Set the number of objects for the parametric rendering */ - dirac_bs_md_write_idx = 0; - if ( st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hSpatParamRendCom->numIsmDirections = 0; - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) - { - st_ivas->hSpatParamRendCom->numIsmDirections = st_ivas->nchan_ism; - } - - dirac_bs_md_write_idx = st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx; /* Store the write-index for this frame */ - } - - /* MASA metadata decoding */ - if ( ( error = ivas_masa_decode( st_ivas, st_ivas->hCPE[0]->hCoreCoder[0], &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Configuration of combined-format bit-budget distribution */ - ivas_set_surplus_brate_dec( st_ivas, &ism_total_brate ); - - st_ivas->hCPE[0]->hCoreCoder[0]->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] ); - - /* set ISM parameters and decode ISM metadata in OMASA format */ - if ( ( error = ivas_omasa_ism_metadata_dec( st_ivas, ism_total_brate, &nchan_ism, &nchan_transport_ism, dirac_bs_md_write_idx, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* decode ISM channels */ - for ( n = 0; n < nchan_transport_ism; n++ ) - { - if ( ( error = ivas_sce_dec( st_ivas, n, &p_output[st_ivas->nchan_transport + n], output_frame, nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* decode MASA channels */ - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hCPE[0]->nchan_out == 1 ) - { - mvr2r( p_output[0], p_output[1], output_frame ); /* Copy mono signal to stereo output channels */ - } - - /* HP filtering */ - for ( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); - } - else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - /* sanity check in case of bitrate switching */ - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Incorrect output configuration specified for combined MASA and ISM format" ); - } - - ivas_omasa_rearrange_channels( p_output, nchan_transport_ism, output_frame ); - - ivas_jbm_dec_copy_masa_meta_to_buffer( st_ivas ); - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - int16_t nchan_ism, sba_ch_idx; - - set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); - nchan_ism = st_ivas->nchan_ism; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - /* set ISM parameters and decode ISM metadata in OSBA format */ - if ( ( error = ivas_osba_ism_metadata_dec( st_ivas, ivas_total_brate, &nchan_ism, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - sba_ch_idx = st_ivas->nchan_ism; - } - else - { - nb_bits_metadata[1] += NO_BITS_MASA_ISM_NO_OBJ; - sba_ch_idx = 0; - } - - /* SBA metadata decoding */ - if ( ( error = ivas_spar_dec( st_ivas, nb_bits_metadata ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->nchan_transport == CPE_CHANNELS && st_ivas->nCPE >= 1 ) - { - st_ivas->hCPE[0]->element_brate = ivas_total_brate; - } - - /* core-decoding of transport channels */ - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE == 1 ) - { - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE > 1 ) - { - if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->sba_dirac_stereo_flag ) - { - ivas_agc_dec_process( st_ivas->hSpar->hAgcDec, &p_output[sba_ch_idx], &p_output[sba_ch_idx], st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, output_frame ); - - if ( st_ivas->hSpar->hPCA != NULL ) - { - ivas_pca_dec( st_ivas->hSpar->hPCA, output_frame, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, &p_output[sba_ch_idx] ); - } - - ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); - - ivas_sba_dirac_stereo_dec( st_ivas, &p_output[sba_ch_idx], output_frame, 0 ); - } - - /* HP filtering */ - for ( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - - nchan_remapped = ivas_sba_remapTCs( &p_output[sba_ch_idx], st_ivas, output_frame ); - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) - { - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - - ivas_sba_mix_matrix_determiner( st_ivas->hSpar, &p_output[sba_ch_idx], st_ivas->bfi, nchan_remapped, output_frame, num_md_sub_frames ); - } - else if ( st_ivas->renderer_type != RENDERER_DISABLE && !st_ivas->sba_dirac_stereo_flag ) - { - ivas_spar_dec_agc_pca( st_ivas, &p_output[sba_ch_idx], output_frame ); - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) - { - /* loudness correction */ - ivas_dirac_dec_binaural_sba_gain( &p_output[sba_ch_idx], nchan_remapped, output_frame ); - } - else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); - - /* add W */ - for ( n = 0; n < nchan_out; n++ ) - { - v_add( p_output[n], p_output[n + max( nchan_out, nchan_ism )], p_output[n], output_frame ); - } - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - st = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; - - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - /* LFE channel decoder */ - ivas_lfe_dec( st_ivas->hLFE, st, output_frame, st_ivas->bfi, p_output[LFE_CHANNEL] ); - - if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* HP filtering */ - for ( n = 0; n < st_ivas->nchan_transport; n++ ) - { - if ( n != LFE_CHANNEL ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - } - - if ( st_ivas->transport_config != st_ivas->intern_config && ( st_ivas->intern_config == IVAS_AUDIO_CONFIG_FOA || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA2 || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA3 ) ) - { - if ( ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) >= ( st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe ) ) - { - ivas_mc2sba( st_ivas->hTransSetup, p_output, p_output, output_frame, st_ivas->hIntSetup.ambisonics_order, GAIN_LFE ); - } - } - - if ( ( st_ivas->renderer_type == RENDERER_MC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) && ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) >= ( st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ) ) - { - if ( st_ivas->renderer_type == RENDERER_MC ) - { - ivas_ls_setup_conversion( st_ivas, st_ivas->nchan_transport, output_frame, p_output, p_output ); - } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - ivas_mc2sba( st_ivas->hIntSetup, p_output, p_output, output_frame, st_ivas->hOutSetup.ambisonics_order, 0.f ); - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - /* LFE channel decoder */ - ivas_lfe_dec( st_ivas->hLFE, st, output_frame, st_ivas->bfi, p_output[LFE_CHANNEL] ); - - ivas_mc_paramupmix_dec_read_BS( st_ivas, st, st_ivas->hMCParamUpmix, &nb_bits_metadata[0] ); - - if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* HP filtering */ - for ( n = 0; n < st_ivas->nchan_transport; n++ ) - { - if ( n != LFE_CHANNEL ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - } - - /* Rendering */ - if ( st_ivas->renderer_type == RENDERER_MC && ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - /* Compensate loudness for not doing full upmix */ - for ( n = 4; n < 8; n++ ) - { - v_multc( p_output[n], 2.0f, p_output[n], output_frame ); - } - - if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - ivas_ls_setup_conversion( st_ivas, audioCfg2channels( IVAS_AUDIO_CONFIG_5_1_2 ), output_frame, p_output, p_output ); - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - /* read Parametric MC parameters from the bitstream */ - ivas_param_mc_dec_read_BS( ivas_total_brate, st, st_ivas->hParamMC, &nb_bits_metadata[0] ); - - if ( st_ivas->nCPE == 1 ) - { - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE > 1 ) - { - if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* HP filtering */ - for ( n = 0; n < st_ivas->nchan_transport; n++ ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - - /* Rendering */ - if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - ivas_ls_setup_conversion( st_ivas, st_ivas->nchan_transport, output_frame, p_output, p_output ); - } - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - if ( st_ivas->hOutSetup.separateChannelEnabled ) - { - st = st_ivas->hCPE[0]->hCoreCoder[0]; /* Metadata is always with CPE in the case of separated channel */ - } - - /* read McMASA parameters from the bitstream */ - if ( ( error = ivas_masa_decode( st_ivas, st, &nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hOutSetup.separateChannelEnabled ) - { - /* Decode the transport audio signals */ - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Identify the index of the separated channel, always LFE_CHANNEL-1 here */ - n = LFE_CHANNEL - 1; - - /* Decode the separated channel to output[n] to be combined with the synthesized channels */ - if ( ( error = ivas_sce_dec( st_ivas, 0, &p_output[n], output_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Delay the separated channel to sync with CLDFB delay of the DirAC synthesis, and synthesize the LFE signal. */ - if ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || - output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || - output_config == IVAS_AUDIO_CONFIG_5_1_2 || ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) - { - ivas_lfe_synth_with_filters( st_ivas->hMasa->hMasaLfeSynth, p_output, output_frame, n, LFE_CHANNEL ); - } - else if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe == 0 ) - { - /* Delay the separated channel to sync with the DirAC rendering */ - delay_signal_float( p_output[n], output_frame, st_ivas->hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, st_ivas->hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size ); - } - } - else - { - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE == 1 ) - { - if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( st_ivas->sba_dirac_stereo_flag ) /* use the flag to trigger the DFT upmix */ - { - ivas_sba_dirac_stereo_dec( st_ivas, p_output, output_frame, 1 ); - } - - /* HP filtering */ - for ( n = 0; n < getNumChanSynthesis( st_ivas ); n++ ) - { - hp20_flt( p_output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); - } - - if ( st_ivas->renderer_type == RENDERER_MCMASA_MONO_STEREO ) - { - ivas_mono_stereo_downmix_mcmasa( st_ivas, p_output, output_frame ); - } - } - } - - /*----------------------------------------------------------------* - * Write IVAS transport channels - *----------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_tsm == 1 ) - { - ivas_syn_output_f( p_output, output_frame, st_ivas->hTcBuffer->nchan_transport_jbm, data ); - } - else - { - /* directly copy to tc buffers */ - ivas_jbm_dec_copy_tc_no_tsm( st_ivas, p_output, output_frame ); - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - if ( !st_ivas->bfi ) /* do not update if first frame(s) are lost or NO_DATA */ - { - st_ivas->hDecoderConfig->last_ivas_total_brate = ivas_total_brate; - st_ivas->last_active_ivas_total_brate = ( ivas_total_brate <= IVAS_SID_5k2 ) ? st_ivas->last_active_ivas_total_brate : ivas_total_brate; - } - - if ( st_ivas->ini_frame < MAX_FRAME_COUNTER && !( st_ivas->bfi && st_ivas->ini_frame == 0 ) ) /* keep "st_ivas->ini_frame = 0" until first good received frame */ - { - st_ivas->ini_frame++; - } - - if ( st_ivas->ini_active_frame < MAX_FRAME_COUNTER && !( st_ivas->bfi && st_ivas->ini_frame == 0 ) && ivas_total_brate > IVAS_SID_5k2 ) /* needed in MASA decoder in case the first active frame is BFI, and there were SID-frames decoded before */ - { - st_ivas->ini_active_frame++; - } - - st_ivas->last_ivas_format = st_ivas->ivas_format; - - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif - - -/*--------------------------------------------------------------------------* - * ivas_jbm_dec_feed_tc_to_renderer() - * - * Feed decoded transport channels and metadata to the IVAS JBM renderer routine - *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_jbm_dec_feed_tc_to_renderer_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const Word16 nSamplesForRendering, /* i : number of TC samples available for rendering */ - Word16 *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ - Word32 *data_fx /* i : transport channels Q11*/ -) -{ - Word32 data_f_fx[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k] = { 0 }; /* Word32 buffer for transport channels that will be directly converted with the CLDFB */ - Word32 *p_data_f_fx[MAX_CLDFB_DIGEST_CHANNELS]; - Word16 i; - - FOR( i = 0; i < MAX_CLDFB_DIGEST_CHANNELS; i++ ) - { - set_zero_fx( data_f_fx[i], MAX_JBM_L_FRAME48k ); - } - if ( st_ivas->hTcBuffer ) - { - st_ivas->hTcBuffer->q_tc_fx = 11; - move16(); - } - Word16 n, n_render_timeslots; - - push_wmops( "ivas_jbm_dec_feed_tc_to_rendererer" ); - FOR( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) - { - p_data_f_fx[n] = &data_f_fx[n][0]; - } - - IF( st_ivas->hDecoderConfig->Opt_tsm ) - { - ivas_jbm_dec_copy_tc( st_ivas, nSamplesForRendering, nSamplesResidual, data_fx, p_data_f_fx, 11 ); - } - ELSE - { - *nSamplesResidual = 0; - move16(); - } - n_render_timeslots = idiv1616( st_ivas->hTcBuffer->n_samples_available, st_ivas->hTcBuffer->n_samples_granularity ); - - test(); - IF( EQ_16( st_ivas->hTcBuffer->tc_buffer_mode, TC_BUFFER_MODE_BUFFER ) ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - test(); - test(); - IF( ( EQ_16( st_ivas->ivas_format, MASA_FORMAT ) || EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) && EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots ); - } - } - ELSE IF( EQ_16( st_ivas->ivas_format, STEREO_FORMAT ) ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - } - ELSE IF( EQ_16( st_ivas->ivas_format, ISM_FORMAT ) ) - { - /* Rendering */ - IF( EQ_16( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - test(); - test(); - test(); - IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_16( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - ivas_dirac_dec_set_md_map_fx( st_ivas, n_render_timeslots ); - - ivas_param_ism_params_to_masa_param_mapping_fx( st_ivas ); - } - ELSE IF( EQ_16( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_16( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - - ivas_param_ism_dec_digest_tc_fx( st_ivas, n_render_timeslots, p_data_f_fx, Q11 ); - } - } - ELSE /* ISM_MODE_DISC */ - { - ivas_ism_dec_digest_tc_fx( st_ivas ); - } - } - ELSE IF( EQ_16( st_ivas->ivas_format, SBA_FORMAT ) || EQ_16( st_ivas->ivas_format, MASA_FORMAT ) ) - { - IF( st_ivas->hSCE[0] ) - { - Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); - IF( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) - { - shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); - } - scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); - } - ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - ELSE IF( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - - IF( EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - ivas_ism_dec_digest_tc_fx( st_ivas ); - - test(); - test(); - test(); - test(); - /* delay the objects here for all renderers where it is needed */ - IF( - EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || - EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) || - EQ_16( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || - EQ_16( st_ivas->renderer_type, RENDERER_OSBA_LS ) || - EQ_16( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - FOR( n = 0; n < st_ivas->nchan_ism; n++ ) - { - delay_signal_fx( st_ivas->hTcBuffer->tc_fx[n], st_ivas->hTcBuffer->n_samples_available, st_ivas->hSbaIsmData->delayBuffer_fx[n], st_ivas->hSbaIsmData->delayBuffer_size ); - } - } - - IF( !st_ivas->sba_dirac_stereo_flag ) - { - IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) - { - Word16 temp, temp_e; - temp = BASOP_Util_Divide1616_Scale( st_ivas->hTcBuffer->n_samples_granularity, st_ivas->hSpatParamRendCom->slot_size, &temp_e ); - n_render_timeslots = extract_l( L_shr( L_mult0( n_render_timeslots, temp ), sub( 15, temp_e ) ) ); - } - - IF( st_ivas->hSCE[0] ) - { - Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); - if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) - { - shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); - } - scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); - } - ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - ELSE - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - IF( st_ivas->hSCE[0] ) - { - Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); - if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) - { - shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); - } - scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); - } - ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - ELSE IF( EQ_16( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - test(); - IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) && EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - n_render_timeslots = i_mult( n_render_timeslots, idiv1616( st_ivas->hTcBuffer->n_samples_granularity, st_ivas->hSpatParamRendCom->slot_size ) ); - } - - IF( st_ivas->hSCE[0] ) - { - Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); - if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) - { - shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); - } - scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31- (st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp - shift) - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); - move16(); - } - ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - - IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - ivas_ism_dec_digest_tc_fx( st_ivas ); - } - } - ELSE IF( EQ_16( st_ivas->ivas_format, MC_FORMAT ) ) - { - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCT ) ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - } - ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) - { - ivas_mc_paramupmix_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) - { - - Word16 nchan_transport = st_ivas->nchan_transport; - move16(); - Word16 nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - Word16 nchan_out_cov; - test(); - test(); - IF( EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_16( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - nchan_out_cov = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - } - ELSE IF( EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_CLDFB ) ) - { - nchan_out_cov = nchan_out_transport; - move16(); - } - ELSE IF( EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); - } - ELSE - { - nchan_out_cov = nchan_out_transport; - move16(); - } - - scale_sig32( st_ivas->hParamMC->proto_matrix_int_fx, st_ivas->hParamMC->proto_matrix_int_len, -1 ); // Q(31-1) - st_ivas->hParamMC->proto_matrix_int_e = 1; - move16(); - - ivas_param_mc_dec_digest_tc_fx( st_ivas, (UWord8) n_render_timeslots, (Word32 **) p_data_f_fx, Q11 ); - - scale_sig32( st_ivas->hParamMC->proto_matrix_int_fx, st_ivas->hParamMC->proto_matrix_int_len, 1 ); // Q(31-1+1) - - Word16 shift; - FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->num_param_bands_synth; param_band_idx++ ) - { - shift = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_fx[param_band_idx], s_min( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_len, nchan_transport * nchan_transport ) ); - scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_fx[param_band_idx], s_min( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_len, i_mult( nchan_transport, nchan_transport ) ), shift ); // Q(31-cx_old_e+shift) - st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_e[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_e[param_band_idx], shift ); - move16(); - - shift = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_fx[param_band_idx], nchan_out_cov * nchan_out_cov ); - scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_fx[param_band_idx], i_mult( nchan_out_cov, nchan_out_cov ), shift ); // Q(31-cy_old_e+shift) - st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_e[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_e[param_band_idx], shift ); - move16(); - } - } - ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - IF( st_ivas->hSCE[0] ) - { - Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); - if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) - { - shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); - } - scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) - st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); - move16(); - } - ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - - pop_wmops(); - return; -} -#else -void ivas_jbm_dec_feed_tc_to_renderer( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ - int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ - float *data /* i : transport channels */ -) -{ - float data_f[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k]; /* 'float' buffer for transport channels that will be directly converted with the CLDFB */ - float *p_data_f[MAX_CLDFB_DIGEST_CHANNELS]; - int16_t n, n_render_timeslots; - - push_wmops( "ivas_jbm_dec_feed_tc_to_rendererer" ); - for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) - { - p_data_f[n] = &data_f[n][0]; - } - - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - ivas_jbm_dec_copy_tc( st_ivas, nSamplesForRendering, nSamplesResidual, data, p_data_f ); - } - else - { - *nSamplesResidual = 0; - } - n_render_timeslots = st_ivas->hTcBuffer->n_samples_available / st_ivas->hTcBuffer->n_samples_granularity; - - if ( st_ivas->hTcBuffer->tc_buffer_mode == TC_BUFFER_MODE_BUFFER ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - ivas_jbm_masa_sf_to_slot_map( st_ivas, n_render_timeslots ); - } - } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - /* Rendering */ - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - ivas_dirac_dec_set_md_map( st_ivas, n_render_timeslots ); - - ivas_param_ism_params_to_masa_param_mapping( st_ivas ); - } - else if ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - ivas_param_ism_dec_digest_tc( st_ivas, n_render_timeslots, p_data_f ); - } - } - else /* ISM_MODE_DISC */ - { - ivas_ism_dec_digest_tc( st_ivas ); - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) - { - ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - ivas_ism_dec_digest_tc( st_ivas ); - - /* delay the objects here for all renderers where it is needed */ - if ( - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - delay_signal_float( st_ivas->hTcBuffer->tc[n], st_ivas->hTcBuffer->n_samples_available, st_ivas->hSbaIsmData->delayBuffer[n], st_ivas->hSbaIsmData->delayBuffer_size ); - } - } - - if ( !st_ivas->sba_dirac_stereo_flag ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - n_render_timeslots *= ( st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size ); - } - - ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - else - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - n_render_timeslots *= ( st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size ); - } - - ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - ivas_ism_dec_digest_tc( st_ivas ); - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - ivas_mc_paramupmix_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - ivas_param_mc_dec_digest_tc( st_ivas, (uint8_t) n_render_timeslots, p_data_f ); - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); - } - } - - pop_wmops(); - return; -} -#endif - -/*--------------------------------------------------------------------------* - * ivas_dec_render() - * - * Principal IVAS JBM rendering routine - *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_jbm_dec_render_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const UWord16 nSamplesAsked, /* i : number of samples wanted */ - UWord16 *nSamplesRendered, /* o : number of samples rendered */ - UWord16 *nSamplesAvailableNext, /* o : number of samples still available in the rendering pipeline */ - Word16 *data /* o : output synthesis signal Q0*/ -) -{ - Word16 n, nchan_out; - Word16 nchan_transport; - Word16 nchan_remapped; - Word32 output_Fs; - AUDIO_CONFIG output_config; - Word16 nSamplesAskedLocal; - ivas_error error; - Word32 *p_output_fx[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; - Word32 *p_tc_fx[MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS]; - Word16 subframe_len, gd_bits, exp, nchan_in, i, j; - const Word16 output_q_factor = Q11; - move16(); - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - push_wmops( "ivas_dec_render" ); - /*----------------------------------------------------------------* - * Initialization of local vars after struct has been set - *----------------------------------------------------------------*/ - - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - output_Fs = st_ivas->hDecoderConfig->output_Fs; - move32(); - nchan_out = st_ivas->hDecoderConfig->nchan_out; - move16(); - nchan_transport = st_ivas->hTcBuffer->nchan_transport_jbm; - move16(); - output_config = st_ivas->hDecoderConfig->output_config; - move32(); - nSamplesAskedLocal = add( nSamplesAsked, st_ivas->hTcBuffer->n_samples_discard ); - move16(); - - FOR( n = 0; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - p_output_fx[n] = st_ivas->p_output_fx[n]; - } - IF( !st_ivas->hDecoderConfig->Opt_tsm ) - { - FOR( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) - { - p_tc_fx[n] = p_output_fx[n]; - } - - FOR( n = 0; n < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - st_ivas->hTcBuffer->tc_fx[n] = st_ivas->p_output_fx[n]; - } - } - ELSE - { - FOR( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) - { - p_tc_fx[n] = &st_ivas->hTcBuffer->tc_fx[n][st_ivas->hTcBuffer->n_samples_rendered]; - } - } - -#ifdef MSAN_FIX - st_ivas->hTcBuffer->no_channels = st_ivas->hTcBuffer->nchan_buffer_full; - move16(); -#endif // MSAN_FIX - /*----------------------------------------------------------------* - * Update combined orientation access index - *----------------------------------------------------------------*/ - - IF( st_ivas->hCombinedOrientationData != NULL ) - { - /* take the discard samples into account here to make sure head rotation stays on the correct 5ms grid */ - st_ivas->hCombinedOrientationData->cur_subframe_samples_rendered_start = sub( st_ivas->hCombinedOrientationData->cur_subframe_samples_rendered_start, st_ivas->hTcBuffer->n_samples_discard ); - move16(); - - ivas_combined_orientation_set_to_start_index( st_ivas->hCombinedOrientationData ); - } - - /*----------------------------------------------------------------* - * Rendering - *----------------------------------------------------------------*/ - test(); - IF( EQ_32( st_ivas->ivas_format, UNDEFINED_FORMAT ) ) - { - assert( 0 ); - } - ELSE IF( EQ_32( st_ivas->hTcBuffer->tc_buffer_mode, TC_BUFFER_MODE_BUFFER ) ) - { - Word16 slot_size, tmp, e; - - slot_size = st_ivas->hTcBuffer->n_samples_granularity; - move16(); - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - tmp = BASOP_Util_Divide1616_Scale( nSamplesAsked, slot_size, &e ); - tmp = shr( tmp, sub( 15, e ) ); - - ivas_jbm_dec_tc_buffer_playout_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, STEREO_FORMAT ) ) - { - /* Rendering */ - IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - - ivas_ls_setup_conversion_fx( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc_fx, p_output_fx ); - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) ) - { - /* Rendering */ - IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, st_ivas->nchan_transport, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) ) - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - ivas_apply_non_diegetic_panning_fx( p_output_fx, st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, *nSamplesRendered ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - ivas_param_ism_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); - - IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - /* Convert CICP19 -> Ambisonics */ - ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); - } - } - } - ELSE /* ISM_MODE_DISC */ - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - - test(); - test(); - /* Loudspeaker or Ambisonics rendering */ - IF( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - /* Convert to CICPxx; used also for ISM->CICP19->binaural_room rendering */ - ivas_ism_render_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) ) - { - ivas_apply_non_diegetic_panning_fx( p_output_fx, st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, *nSamplesRendered ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) - { - /* Convert to Ambisonics; used also for ISM->HOA3->binaural rendering */ -#ifdef MSAN_FIX - FOR( i = 0; i < st_ivas->nchan_transport; i++ ) - { - FOR( j = 0; j < 16; j++ ) - { - st_ivas->hIsmRendererData->gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q30 -> Q29 - move32(); - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q30 -> Q29 - move32(); - } - } -#else - FOR( i = 0; i < 15; i++ ) - { - FOR( j = 0; j < 16; j++ ) - { - st_ivas->hIsmRendererData->gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q30 -> Q29 - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q30 -> Q29 - } - } -#endif - ivas_ism2sba_sf_fx( st_ivas->hTcBuffer->tc_fx, p_output_fx, st_ivas->hIsmRendererData, st_ivas->nchan_transport, *nSamplesRendered, st_ivas->hTcBuffer->n_samples_rendered, st_ivas->hIntSetup.ambisonics_order ); - Word16 sba_num_chans = imult1616( add( st_ivas->hIntSetup.ambisonics_order, 1 ), add( st_ivas->hIntSetup.ambisonics_order, 1 ) ); - FOR( j = 0; j < sba_num_chans; j++ ) - { - scale_sig32( p_output_fx[j], *nSamplesRendered, sub( Q11, sub( add( output_q_factor, 29 ), 31 ) ) ); // Q11 - } - - -#ifdef MSAN_FIX - FOR( i = 0; i < st_ivas->nchan_transport; i++ ) - { - FOR( j = 0; j < 16; j++ ) - { - st_ivas->hIsmRendererData->gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q29 -> Q30 - move32(); - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q29 -> Q30 - move32(); - } - } -#else - FOR( i = 0; i < 15; i++ ) - { - FOR( j = 0; j < 16; j++ ) - { - st_ivas->hIsmRendererData->gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q29 -> Q30 - st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q29 -> Q30 - } - } -#endif - } - - /* Binaural rendering */ - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) - { - IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - st_ivas->hCrendWrapper->p_io_qfactor = &st_ivas->hCrendWrapper->io_qfactor; - subframe_len = imult1616( st_ivas->hTcBuffer->subframe_nbslots[0], st_ivas->hTcBuffer->n_samples_granularity ); - gd_bits = find_guarded_bits_fx( subframe_len ); - exp = 13; - move16(); - nchan_in = 12; - move16(); - nchan_out = 2; - move16(); - exp = sub( exp, gd_bits ); - *st_ivas->hCrendWrapper->p_io_qfactor = exp; - move16(); - FOR( i = 0; i < nchan_in; i++ ) - { - scale_sig32( p_output_fx[i], *nSamplesRendered, negate( sub( 11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 - } - IF( NE_32( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, st_ivas->hTcBuffer, p_output_fx, p_output_fx, *nSamplesRendered, output_Fs ) ), IVAS_ERR_OK ) ) - { - return error; - } - FOR( i = 0; i < nchan_out; i++ ) - { - scale_sig32( p_output_fx[i], *nSamplesRendered, sub( 11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 - } - } - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) - { - nchan_remapped = nchan_transport; - move16(); - test(); - test(); - /* Loudspeakers, Ambisonics or Binaural rendering */ - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) - { - IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) ) - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - FOR( n = 0; n < nchan_remapped; n++ ) - { - Copy32( st_ivas->hTcBuffer->tc_fx[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output_fx[n], *nSamplesRendered ); - } - IF( NE_32( ( error = ivas_sba_linear_renderer_fx( p_output_fx, *nSamplesRendered, nchan_remapped, 0, output_config, st_ivas->hOutSetup ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) - { - ivas_dirac_dec_render_fx( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); - } - } - ELSE - { - IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - nchan_remapped = st_ivas->nchan_transport; - move16(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - test(); - IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) ) - { - IF( NE_32( ( error = ivas_omasa_dirac_td_binaural_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) - { - ivas_omasa_dirac_rend_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - nchan_remapped = nchan_transport; - move16(); - /* Loudspeakers, Ambisonics or Binaural rendering */ - IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) - { - SPAR_DEC_HANDLE hSpar; - hSpar = st_ivas->hSpar; - hSpar->hMdDec->Q_mixer_mat = 30; - move16(); - - IF( NE_32( ( error = ivas_osba_dirac_td_binaural_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_OSBA_STEREO ) ) - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - - test(); - /* shift SBA channels to avoid overwrite by ISM upmix in 1 object case and non-TSM unified channel memory*/ - IF( EQ_16( st_ivas->nchan_ism, 1 ) && EQ_16( st_ivas->hDecoderConfig->Opt_tsm, 0 ) ) - { - Copy32( p_tc_fx[2], p_output_fx[3], *nSamplesRendered ); - Copy32( p_tc_fx[1], p_output_fx[2], *nSamplesRendered ); - p_tc_fx[1] = p_output_fx[2]; - p_tc_fx[2] = p_output_fx[3]; - } - - /* render objects */ - ivas_ism_render_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ); - - /* add already rendered SBA part */ - FOR( n = 0; n < nchan_out; n++ ) - { - v_add_fixed( p_output_fx[n], p_tc_fx[n + st_ivas->nchan_ism], p_output_fx[n], *nSamplesRendered, 0 ); - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - IF( NE_32( ( error = ivas_osba_render_sf_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) /*EXT output = individual objects + HOA3*/ - { - IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output_fx[st_ivas->nchan_ism], 960 ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( n = 0; n < st_ivas->nchan_ism; n++ ) - { - Copy32( st_ivas->hTcBuffer->tc_fx[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output_fx[n], *nSamplesRendered ); - } - } - ELSE - { - IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); - } - ELSE - { - IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - FOR( n = st_ivas->hIntSetup.nchan_out_woLFE - 1; n >= 0; n-- ) - { - Copy32( p_output_fx[n], p_output_fx[n + st_ivas->nchan_ism], *nSamplesRendered ); - } - FOR( n = 0; n < st_ivas->nchan_ism; n++ ) - { - set32_fx( p_output_fx[n], 0, *nSamplesRendered ); - } - } - } - } - ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) - { - IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) ) - { - Word16 crendInPlaceRotation = FALSE; - move16(); - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - - test(); - test(); - test(); - IF( NE_32( st_ivas->transport_config, st_ivas->intern_config ) && ( EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_FOA ) || EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_HOA2 ) || EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_HOA3 ) ) ) - { - IF( LT_16( add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ), add( st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hIntSetup.num_lfe ) ) ) - { - crendInPlaceRotation = TRUE; - move16(); - - ivas_mc2sba_fx( st_ivas->hTransSetup, p_tc_fx, p_output_fx, *nSamplesRendered, st_ivas->hIntSetup.ambisonics_order, GAIN_LFE_FX ); - } - } - - test(); - /* Rendering */ - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - st_ivas->hCrendWrapper->p_io_qfactor = &st_ivas->hCrendWrapper->io_qfactor; - subframe_len = imult1616( st_ivas->hTcBuffer->subframe_nbslots[0], st_ivas->hTcBuffer->n_samples_granularity ); - gd_bits = find_guarded_bits_fx( subframe_len ); - exp = 13; - move16(); - IF( NE_32( ( error = getAudioConfigNumChannels( st_ivas->intern_config, &nchan_in ) ), IVAS_ERR_OK ) ) - { - return error; - } - IF( NE_32( ( error = getAudioConfigNumChannels( st_ivas->hOutSetup.output_config, &nchan_out ) ), IVAS_ERR_OK ) ) - { - return error; - } - exp = sub( exp, gd_bits ); - *st_ivas->hCrendWrapper->p_io_qfactor = exp; - move16(); - - FOR( i = 0; i < nchan_in; i++ ) - { - scale_sig32( p_output_fx[i], *nSamplesRendered, negate( sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 - IF( st_ivas->hDecoderConfig->Opt_tsm ) - { - scale_sig32( p_tc_fx[i], *nSamplesRendered, negate( sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 - } - } - IF( NE_32( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig, st_ivas->hCombinedOrientationData, - &st_ivas->hIntSetup, st_ivas->hEFAPdata, st_ivas->hTcBuffer, crendInPlaceRotation ? p_output_fx : p_tc_fx, p_output_fx, *nSamplesRendered, output_Fs ) ), - IVAS_ERR_OK ) ) - { - return error; - } - - ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_tc_fx, p_output_fx ); - - FOR( i = 0; i < nchan_in; i++ ) - { - scale_sig32( p_output_fx[i], *nSamplesRendered, sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 - IF( st_ivas->hDecoderConfig->Opt_tsm ) - { - scale_sig32( p_tc_fx[i], *nSamplesRendered, sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 - } - } - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) - { - *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - move16(); - - ivas_ls_setup_conversion_fx( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc_fx, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - ivas_mc2sba_fx( st_ivas->hIntSetup, p_tc_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) - { - IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) - { - return error; - } - - ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_tc_fx, p_output_fx ); - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) - { - ivas_mc_paramupmix_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_tc_fx, p_output_fx ); - - test(); - test(); - /* Rendering */ - IF( ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) && !st_ivas->hDecoderConfig->Opt_Headrotation ) - { - ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_output_fx, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) - { - ivas_ls_setup_conversion_fx( st_ivas, MC_PARAMUPMIX_MAX_INPUT_CHANS, *nSamplesRendered, p_output_fx, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) - { - IF( NE_32( ( error = ivas_td_binaural_renderer_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) - { - return error; - } - - ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_output_fx, p_output_fx ); - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) - { - Word16 channel_active_fx[MAX_OUTPUT_CHANNELS]; - Word16 nchan_out_cov; - Word16 nchan_out_cldfb = 0; - move16(); - - set16_fx( channel_active_fx, 0, MAX_CICP_CHANNELS ); - Word16 nchan_transport_tmp = st_ivas->nchan_transport; - move16(); - output_Fs = st_ivas->hDecoderConfig->output_Fs; - move32(); - Word16 nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - nchan_out_cldfb = BINAURAL_CHANNELS; - move16(); - set16_fx( channel_active_fx, 1, BINAURAL_CHANNELS ); - nchan_out_cov = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - } - ELSE IF( EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_CLDFB ) ) - { - nchan_out_cov = nchan_out_transport; - move16(); - nchan_out_cldfb = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); - } - ELSE IF( EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); - nchan_out_cldfb = nchan_out_cov; - move16(); - set16_fx( channel_active_fx, 1, nchan_out_cov ); - } - ELSE - { - nchan_out_cov = nchan_out_transport; - move16(); - nchan_out_cldfb = nchan_out_transport; - move16(); - set16_fx( channel_active_fx, 1, nchan_out_cov ); - } - IF( st_ivas->hParamMC->max_band_decorr > 0 ) - { - Word16 tmp; - tmp = L_norm_arr( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_fx, st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_len ); - scale_sig32( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_fx, st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_len, tmp ); // Q(st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer+ tmp) - st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer = add( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer, tmp ); - move16(); - } - /* CLDFB synthesis */ - FOR( Word16 ch = 0; ch < nchan_out_cldfb; ch++ ) - { - IF( st_ivas->cldfbSynDec[ch] ) - { - scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, ( Q5 - Q11 ) ); // Q5 - st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q5; - move16(); - } - } - Word16 tempp; - FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->num_param_bands_synth; param_band_idx++ ) - { - tempp = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_len ); - scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_len, tempp ); // Q(31-(st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx]- tempp)) - st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx], tempp ); - move16(); - - IF( LT_16( st_ivas->hParamMC->band_grouping[param_band_idx], st_ivas->hParamMC->h_output_synthesis_params.max_band_decorr ) ) - { - tempp = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_len ); - scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_len, tempp ); // Q(31- (st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx] - tempp)) - st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx], tempp ); - move16(); - } - } - - ivas_param_mc_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, channel_active_fx ); - - FOR( int ch = 0; ch < nchan_out_cldfb; ch++ ) - { - IF( st_ivas->cldfbSynDec[ch] ) - { - scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, Q11 - Q5 ); // Q11 - st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11; - move16(); - } - } - IF( EQ_16( st_ivas->hParamMC->slots_rendered, st_ivas->hParamMC->num_slots ) ) - { - FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->hMetadataPMC->nbands_coded; param_band_idx++ ) - { - IF( LT_16( st_ivas->hParamMC->band_grouping[param_band_idx], st_ivas->hParamMC->h_output_synthesis_params.max_band_decorr ) ) - { - Copy32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[param_band_idx], imult1616( nchan_transport_tmp, nchan_out_cov ) ); - st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[param_band_idx] = st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx]; - move16(); - } - Copy32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[param_band_idx], imult1616( nchan_transport_tmp, nchan_out_cov ) ); - st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[param_band_idx] = st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx]; - move16(); - } - } - } - ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - Word16 offset = imult1616( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->slot_size ); - nchan_remapped = st_ivas->nchan_transport; - move16(); - - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) - { - ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); - } - ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) /* rendering to CICPxx and Ambisonics */ - { - ivas_dirac_dec_render_fx( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); - - test(); - test(); - test(); - IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) - { - /* we still need to copy the separate channel if available */ - IF( st_ivas->hOutSetup.separateChannelEnabled ) - { - Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); - } - - ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); - } - ELSE IF( EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_5_1 ) && ( EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1 ) ) ) - { - FOR( n = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; n < ( st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); n++ ) - { - set32_fx( p_output_fx[n], 0, *nSamplesRendered ); - } - } + ELSE IF( EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) + { + nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); } - - /* copy discrete C and TD LFE from internal TC to output */ - IF( st_ivas->hOutSetup.separateChannelEnabled ) + ELSE { - test(); - test(); - test(); - test(); - test(); - test(); - test(); - IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1 ) || - EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || - EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || ( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && GT_16( st_ivas->hOutSetup.num_lfe, 0 ) ) ) - { - Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL] + offset, p_output_fx[LFE_CHANNEL], *nSamplesRendered ); - Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); - } - ELSE IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.num_lfe == 0 ) - { - /* Delay the separated channel to sync with the DirAC rendering */ - Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); - } + nchan_out_cov = nchan_out_transport; + move16(); } - } - } - /*----------------------------------------------------------------* - * Write IVAS output channels - * - compensation for saturation - * - float to integer conversion - *----------------------------------------------------------------*/ + scale_sig32( st_ivas->hParamMC->proto_matrix_int_fx, st_ivas->hParamMC->proto_matrix_int_len, -1 ); // Q(31-1) + st_ivas->hParamMC->proto_matrix_int_e = 1; + move16(); - st_ivas->hTcBuffer->n_samples_available = sub( st_ivas->hTcBuffer->n_samples_available, *nSamplesRendered ); - st_ivas->hTcBuffer->n_samples_rendered = add( st_ivas->hTcBuffer->n_samples_rendered, *nSamplesRendered ); - move16(); - move16(); + ivas_param_mc_dec_digest_tc_fx( st_ivas, (UWord8) n_render_timeslots, (Word32 **) p_data_f_fx, Q11 ); - /* update global combined orientation start index */ - ivas_combined_orientation_update_start_index( st_ivas->hCombinedOrientationData, *nSamplesRendered ); + scale_sig32( st_ivas->hParamMC->proto_matrix_int_fx, st_ivas->hParamMC->proto_matrix_int_len, 1 ); // Q(31-1+1) - IF( st_ivas->hTcBuffer->n_samples_discard > 0 ) - { - FOR( n = 0; n < s_min( MAX_OUTPUT_CHANNELS, ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ) ); n++ ) - { - p_output_fx[n] += st_ivas->hTcBuffer->n_samples_discard; - } - *nSamplesRendered = sub( (Word16) *nSamplesRendered, st_ivas->hTcBuffer->n_samples_discard ); - move16(); - st_ivas->hTcBuffer->n_samples_discard = 0; - move16(); - } + Word16 shift; + FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->num_param_bands_synth; param_band_idx++ ) + { + shift = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_fx[param_band_idx], s_min( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_len, nchan_transport * nchan_transport ) ); + scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_fx[param_band_idx], s_min( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_len, i_mult( nchan_transport, nchan_transport ) ), shift ); // Q(31-cx_old_e+shift) + st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_e[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.cx_old_e[param_band_idx], shift ); + move16(); - { - IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) ) + shift = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_fx[param_band_idx], nchan_out_cov * nchan_out_cov ); + scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_fx[param_band_idx], i_mult( nchan_out_cov, nchan_out_cov ), shift ); // Q(31-cy_old_e+shift) + st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_e[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.cy_old_e[param_band_idx], shift ); + move16(); + } + } + ELSE IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { -#ifndef DISABLE_LIMITER - ivas_limiter_dec_fx( st_ivas->hLimiter, p_output_fx, nchan_out, *nSamplesRendered, st_ivas->BER_detect, output_q_factor ); -#endif + IF( st_ivas->hSCE[0] ) + { + Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); + if ( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) + { + shift = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, 4 ); + } + scale_sig32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN, shift ); // Q(31-cngNoiseLevelExp+shift) + st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp = sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ); + move16(); + } + ivas_sba_dec_digest_tc_fx( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } } - ivas_syn_output_fx( p_output_fx, output_q_factor, *nSamplesRendered, nchan_out, data ); - - *nSamplesAvailableNext = st_ivas->hTcBuffer->n_samples_available; - move16(); - pop_wmops(); - return IVAS_ERR_OK; + return; } -#else -ivas_error ivas_jbm_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const uint16_t nSamplesAsked, /* i : number of samples wanted */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of samples still available in the rendering pipeline */ - int16_t *data /* o : output synthesis signal */ + +/*--------------------------------------------------------------------------* + * ivas_dec_render() + * + * Principal IVAS JBM rendering routine + *--------------------------------------------------------------------------*/ +ivas_error ivas_jbm_dec_render_fx( + Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ + const UWord16 nSamplesAsked, /* i : number of samples wanted */ + UWord16 *nSamplesRendered, /* o : number of samples rendered */ + UWord16 *nSamplesAvailableNext, /* o : number of samples still available in the rendering pipeline */ + Word16 *data /* o : output synthesis signal Q0*/ ) { - int16_t n, nchan_out; - int16_t nchan_transport; - int16_t nchan_remapped; - int32_t output_Fs; + Word16 n, nchan_out; + Word16 nchan_transport; + Word16 nchan_remapped; + Word32 output_Fs; AUDIO_CONFIG output_config; - int16_t nSamplesAskedLocal; + Word16 nSamplesAskedLocal; ivas_error error; - float *p_output[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; - float *p_tc[MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS]; + Word32 *p_output_fx[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; + Word32 *p_tc_fx[MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS]; + Word16 subframe_len, gd_bits, exp, nchan_in, i, j; + const Word16 output_q_factor = Q11; + move16(); SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; push_wmops( "ivas_dec_render" ); @@ -3444,44 +1880,53 @@ ivas_error ivas_jbm_dec_render( hSpatParamRendCom = st_ivas->hSpatParamRendCom; output_Fs = st_ivas->hDecoderConfig->output_Fs; + move32(); nchan_out = st_ivas->hDecoderConfig->nchan_out; + move16(); nchan_transport = st_ivas->hTcBuffer->nchan_transport_jbm; + move16(); output_config = st_ivas->hDecoderConfig->output_config; - nSamplesAskedLocal = nSamplesAsked + st_ivas->hTcBuffer->n_samples_discard; + move32(); + nSamplesAskedLocal = add( nSamplesAsked, st_ivas->hTcBuffer->n_samples_discard ); + move16(); - for ( n = 0; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) + FOR( n = 0; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) { - p_output[n] = st_ivas->p_output_f[n]; + p_output_fx[n] = st_ivas->p_output_fx[n]; } - - if ( !st_ivas->hDecoderConfig->Opt_tsm ) + IF( !st_ivas->hDecoderConfig->Opt_tsm ) { - for ( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) + FOR( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) { - p_tc[n] = p_output[n]; + p_tc_fx[n] = p_output_fx[n]; } - for ( n = 0; n < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; n++ ) + FOR( n = 0; n < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; n++ ) { - st_ivas->hTcBuffer->tc[n] = p_output[n]; + st_ivas->hTcBuffer->tc_fx[n] = st_ivas->p_output_fx[n]; } } - else + ELSE { - for ( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) + FOR( n = 0; n < st_ivas->hTcBuffer->nchan_buffer_full; n++ ) { - p_tc[n] = &st_ivas->hTcBuffer->tc[n][st_ivas->hTcBuffer->n_samples_rendered]; + p_tc_fx[n] = &st_ivas->hTcBuffer->tc_fx[n][st_ivas->hTcBuffer->n_samples_rendered]; } } +#ifdef MSAN_FIX + st_ivas->hTcBuffer->no_channels = st_ivas->hTcBuffer->nchan_buffer_full; + move16(); +#endif // MSAN_FIX /*----------------------------------------------------------------* * Update combined orientation access index *----------------------------------------------------------------*/ - if ( st_ivas->hCombinedOrientationData != NULL ) + IF( st_ivas->hCombinedOrientationData != NULL ) { /* take the discard samples into account here to make sure head rotation stays on the correct 5ms grid */ - st_ivas->hCombinedOrientationData->cur_subframe_samples_rendered_start -= st_ivas->hTcBuffer->n_samples_discard; + st_ivas->hCombinedOrientationData->cur_subframe_samples_rendered_start = sub( st_ivas->hCombinedOrientationData->cur_subframe_samples_rendered_start, st_ivas->hTcBuffer->n_samples_discard ); + move16(); ivas_combined_orientation_set_to_start_index( st_ivas->hCombinedOrientationData ); } @@ -3489,361 +1934,619 @@ ivas_error ivas_jbm_dec_render( /*----------------------------------------------------------------* * Rendering *----------------------------------------------------------------*/ - - if ( st_ivas->ivas_format == UNDEFINED_FORMAT ) + test(); + IF( EQ_32( st_ivas->ivas_format, UNDEFINED_FORMAT ) ) { assert( 0 ); } - else if ( st_ivas->hTcBuffer->tc_buffer_mode == TC_BUFFER_MODE_BUFFER ) + ELSE IF( EQ_32( st_ivas->hTcBuffer->tc_buffer_mode, TC_BUFFER_MODE_BUFFER ) ) { - ivas_jbm_dec_tc_buffer_playout( st_ivas, nSamplesAskedLocal, nSamplesRendered, p_output ); + Word16 slot_size, tmp, e; + + slot_size = st_ivas->hTcBuffer->n_samples_granularity; + move16(); + + /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ + tmp = BASOP_Util_Divide1616_Scale( nSamplesAsked, slot_size, &e ); + tmp = shr( tmp, sub( 15, e ) ); + + ivas_jbm_dec_tc_buffer_playout_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, p_output_fx ); } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, STEREO_FORMAT ) ) { /* Rendering */ - if ( st_ivas->renderer_type == RENDERER_MC ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - ivas_ls_setup_conversion( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc, p_output ); + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + + ivas_ls_setup_conversion_fx( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc_fx, p_output_fx ); } } - else if ( st_ivas->ivas_format == ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, ISM_FORMAT ) ) { /* Rendering */ - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) + IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, st_ivas->nchan_transport, p_output ); + ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, st_ivas->nchan_transport, p_output_fx ); } - else if ( st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) ) { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - ivas_apply_non_diegetic_panning( p_output, st_ivas->hDecoderConfig->non_diegetic_pan_gain, *nSamplesRendered ); + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + ivas_apply_non_diegetic_panning_fx( p_output_fx, st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, *nSamplesRendered ); } - else if ( st_ivas->renderer_type == RENDERER_PARAM_ISM || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_PARAM_ISM ) || EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { - ivas_param_ism_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); + ivas_param_ism_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { /* Convert CICP19 -> Ambisonics */ - ivas_mc2sba( st_ivas->hIntSetup, p_output, p_output, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0.f ); + ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); } } } - else /* ISM_MODE_DISC */ + ELSE /* ISM_MODE_DISC */ { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + test(); + test(); /* Loudspeaker or Ambisonics rendering */ - if ( st_ivas->renderer_type == RENDERER_TD_PANNING || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_TD_PANNING ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) { /* Convert to CICPxx; used also for ISM->CICP19->binaural_room rendering */ - ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered ); + ivas_ism_render_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ); } - else if ( st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_NON_DIEGETIC_DOWNMIX ) ) { - ivas_apply_non_diegetic_panning( p_output, st_ivas->hDecoderConfig->non_diegetic_pan_gain, *nSamplesRendered ); + ivas_apply_non_diegetic_panning_fx( p_output_fx, st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, *nSamplesRendered ); } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) { /* Convert to Ambisonics; used also for ISM->HOA3->binaural rendering */ - ivas_ism2sba_sf( st_ivas->hTcBuffer->tc, p_output, st_ivas->hIsmRendererData, st_ivas->nchan_transport, *nSamplesRendered, st_ivas->hTcBuffer->n_samples_rendered, st_ivas->hIntSetup.ambisonics_order ); +#ifdef MSAN_FIX + FOR( i = 0; i < st_ivas->nchan_transport; i++ ) + { + FOR( j = 0; j < 16; j++ ) + { + st_ivas->hIsmRendererData->gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q30 -> Q29 + move32(); + st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q30 -> Q29 + move32(); + } + } +#else + FOR( i = 0; i < 15; i++ ) + { + FOR( j = 0; j < 16; j++ ) + { + st_ivas->hIsmRendererData->gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q30 -> Q29 + st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shr( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q30 -> Q29 + } + } +#endif + ivas_ism2sba_sf_fx( st_ivas->hTcBuffer->tc_fx, p_output_fx, st_ivas->hIsmRendererData, st_ivas->nchan_transport, *nSamplesRendered, st_ivas->hTcBuffer->n_samples_rendered, st_ivas->hIntSetup.ambisonics_order ); + Word16 sba_num_chans = imult1616( add( st_ivas->hIntSetup.ambisonics_order, 1 ), add( st_ivas->hIntSetup.ambisonics_order, 1 ) ); + FOR( j = 0; j < sba_num_chans; j++ ) + { + scale_sig32( p_output_fx[j], *nSamplesRendered, sub( Q11, sub( add( output_q_factor, 29 ), 31 ) ) ); // Q11 + } + + +#ifdef MSAN_FIX + FOR( i = 0; i < st_ivas->nchan_transport; i++ ) + { + FOR( j = 0; j < 16; j++ ) + { + st_ivas->hIsmRendererData->gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q29 -> Q30 + move32(); + st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q29 -> Q30 + move32(); + } + } +#else + FOR( i = 0; i < 15; i++ ) + { + FOR( j = 0; j < 16; j++ ) + { + st_ivas->hIsmRendererData->gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->gains_fx[i][j], 1 ); // Q29 -> Q30 + st_ivas->hIsmRendererData->prev_gains_fx[i][j] = L_shl( st_ivas->hIsmRendererData->prev_gains_fx[i][j], 1 ); // Q29 -> Q30 + } + } +#endif } /* Binaural rendering */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) + { + IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) + { + return error; + } + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) { - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, *nSamplesRendered ) ) != IVAS_ERR_OK ) + st_ivas->hCrendWrapper->p_io_qfactor = &st_ivas->hCrendWrapper->io_qfactor; + subframe_len = imult1616( st_ivas->hTcBuffer->subframe_nbslots[0], st_ivas->hTcBuffer->n_samples_granularity ); + gd_bits = find_guarded_bits_fx( subframe_len ); + exp = 13; + move16(); + nchan_in = 12; + move16(); + nchan_out = 2; + move16(); + exp = sub( exp, gd_bits ); + *st_ivas->hCrendWrapper->p_io_qfactor = exp; + move16(); + FOR( i = 0; i < nchan_in; i++ ) { - return error; + scale_sig32( p_output_fx[i], *nSamplesRendered, negate( sub( 11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 } - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) - { - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, st_ivas->hTcBuffer, p_output, p_output, *nSamplesRendered, output_Fs ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, NULL, NULL, st_ivas->hTcBuffer, p_output_fx, p_output_fx, *nSamplesRendered, output_Fs ) ), IVAS_ERR_OK ) ) { return error; } + FOR( i = 0; i < nchan_out; i++ ) + { + scale_sig32( p_output_fx[i], *nSamplesRendered, sub( 11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 + } } } } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, SBA_FORMAT ) || EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) { nchan_remapped = nchan_transport; - + move16(); + test(); + test(); /* Loudspeakers, Ambisonics or Binaural rendering */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); + ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); } - else if ( st_ivas->ivas_format == MASA_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MASA_FORMAT ) ) { - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_DEC ) ) { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - for ( n = 0; n < nchan_remapped; n++ ) + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + FOR( n = 0; n < nchan_remapped; n++ ) { - mvr2r( st_ivas->hTcBuffer->tc[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output[n], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output_fx[n], *nSamplesRendered ); } - - if ( ( error = ivas_sba_linear_renderer( p_output, *nSamplesRendered, nchan_remapped, 0, output_config, st_ivas->hOutSetup ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_linear_renderer_fx( p_output_fx, *nSamplesRendered, nchan_remapped, 0, output_config, st_ivas->hOutSetup ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_DIRAC ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) { - ivas_dirac_dec_render( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); + ivas_dirac_dec_render_fx( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); } } - else + ELSE { - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) { return error; } } } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) { nchan_remapped = st_ivas->nchan_transport; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + move16(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) + test(); + IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) ) { - if ( ( error = ivas_omasa_dirac_td_binaural_jbm( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_omasa_dirac_td_binaural_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ) ), IVAS_ERR_OK ) ) { return error; } } - else + ELSE { - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); + ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); } } - else if ( st_ivas->renderer_type == RENDERER_DIRAC ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) { - ivas_omasa_dirac_rend_jbm( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); + ivas_omasa_dirac_rend_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); } } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, SBA_ISM_FORMAT ) ) { nchan_remapped = nchan_transport; - + move16(); /* Loudspeakers, Ambisonics or Binaural rendering */ - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) + IF( EQ_32( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) ) { - if ( ( error = ivas_osba_dirac_td_binaural_jbm( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + SPAR_DEC_HANDLE hSpar; + hSpar = st_ivas->hSpar; + hSpar->hMdDec->Q_mixer_mat = 30; + move16(); + + IF( NE_32( ( error = ivas_osba_dirac_td_binaural_jbm_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->renderer_type == RENDERER_OSBA_STEREO ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_OSBA_STEREO ) ) { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + test(); /* shift SBA channels to avoid overwrite by ISM upmix in 1 object case and non-TSM unified channel memory*/ - if ( st_ivas->nchan_ism == 1 && st_ivas->hDecoderConfig->Opt_tsm == 0 ) + IF( EQ_16( st_ivas->nchan_ism, 1 ) && EQ_16( st_ivas->hDecoderConfig->Opt_tsm, 0 ) ) { - mvr2r( p_tc[2], p_output[3], *nSamplesRendered ); - mvr2r( p_tc[1], p_output[2], *nSamplesRendered ); - p_tc[1] = p_output[2]; - p_tc[2] = p_output[3]; + Copy32( p_tc_fx[2], p_output_fx[3], *nSamplesRendered ); + Copy32( p_tc_fx[1], p_output_fx[2], *nSamplesRendered ); + p_tc_fx[1] = p_output_fx[2]; + p_tc_fx[2] = p_output_fx[3]; } /* render objects */ - ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered ); + ivas_ism_render_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ); /* add already rendered SBA part */ - for ( n = 0; n < nchan_out; n++ ) + FOR( n = 0; n < nchan_out; n++ ) { - v_add( p_output[n], p_tc[n + st_ivas->nchan_ism], p_output[n], *nSamplesRendered ); + v_add_fixed( p_output_fx[n], p_tc_fx[n + st_ivas->nchan_ism], p_output_fx[n], *nSamplesRendered, 0 ); } } - else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_OSBA_AMBI ) || EQ_32( st_ivas->renderer_type, RENDERER_OSBA_LS ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) { - if ( ( error = ivas_osba_render_sf( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_osba_render_sf_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ) ), IVAS_ERR_OK ) ) { return error; } } - else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) /*EXT output = individual objects + HOA3*/ + ELSE IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) /*EXT output = individual objects + HOA3*/ { - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output[st_ivas->nchan_ism] ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output_fx[st_ivas->nchan_ism], 960 ) ), IVAS_ERR_OK ) ) { return error; } - for ( n = 0; n < st_ivas->nchan_ism; n++ ) + FOR( n = 0; n < st_ivas->nchan_ism; n++ ) { - mvr2r( st_ivas->hTcBuffer->tc[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output[n], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output_fx[n], *nSamplesRendered ); } } - else + ELSE { - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) { return error; } } } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) { - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); + ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); } - else + ELSE { - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, 960 ) ), IVAS_ERR_OK ) ) { return error; } - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) + IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - for ( n = st_ivas->hIntSetup.nchan_out_woLFE - 1; n >= 0; n-- ) + FOR( n = st_ivas->hIntSetup.nchan_out_woLFE - 1; n >= 0; n-- ) { - mvr2r( p_output[n], p_output[n + st_ivas->nchan_ism], *nSamplesRendered ); + Copy32( p_output_fx[n], p_output_fx[n + st_ivas->nchan_ism], *nSamplesRendered ); } - for ( n = 0; n < st_ivas->nchan_ism; n++ ) + FOR( n = 0; n < st_ivas->nchan_ism; n++ ) { - set_zero( p_output[n], *nSamplesRendered ); + set32_fx( p_output_fx[n], 0, *nSamplesRendered ); } } } } - else if ( st_ivas->ivas_format == MC_FORMAT ) + ELSE IF( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) { - if ( st_ivas->mc_mode == MC_MODE_MCT ) + IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) ) { - int16_t crendInPlaceRotation = FALSE; - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - if ( st_ivas->transport_config != st_ivas->intern_config && ( st_ivas->intern_config == IVAS_AUDIO_CONFIG_FOA || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA2 || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA3 ) ) + Word16 crendInPlaceRotation = FALSE; + move16(); + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); + + test(); + test(); + test(); + IF( NE_32( st_ivas->transport_config, st_ivas->intern_config ) && ( EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_FOA ) || EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_HOA2 ) || EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_HOA3 ) ) ) { - if ( ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) < ( st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe ) ) + IF( LT_16( add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ), add( st_ivas->hIntSetup.nchan_out_woLFE, st_ivas->hIntSetup.num_lfe ) ) ) { crendInPlaceRotation = TRUE; - ivas_mc2sba( st_ivas->hTransSetup, p_tc, p_output, *nSamplesRendered, st_ivas->hIntSetup.ambisonics_order, GAIN_LFE ); + move16(); + + ivas_mc2sba_fx( st_ivas->hTransSetup, p_tc_fx, p_output_fx, *nSamplesRendered, st_ivas->hIntSetup.ambisonics_order, GAIN_LFE_FX ); } } + test(); /* Rendering */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) + { + st_ivas->hCrendWrapper->p_io_qfactor = &st_ivas->hCrendWrapper->io_qfactor; + subframe_len = imult1616( st_ivas->hTcBuffer->subframe_nbslots[0], st_ivas->hTcBuffer->n_samples_granularity ); + gd_bits = find_guarded_bits_fx( subframe_len ); + exp = 13; + move16(); + IF( NE_32( ( error = getAudioConfigNumChannels( st_ivas->intern_config, &nchan_in ) ), IVAS_ERR_OK ) ) + { + return error; + } + IF( NE_32( ( error = getAudioConfigNumChannels( st_ivas->hOutSetup.output_config, &nchan_out ) ), IVAS_ERR_OK ) ) + { + return error; + } + exp = sub( exp, gd_bits ); + *st_ivas->hCrendWrapper->p_io_qfactor = exp; + move16(); + + FOR( i = 0; i < nchan_in; i++ ) + { + scale_sig32( p_output_fx[i], *nSamplesRendered, negate( sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 + IF( st_ivas->hDecoderConfig->Opt_tsm ) + { + scale_sig32( p_tc_fx[i], *nSamplesRendered, negate( sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ) ); // Q11 + } + } + IF( NE_32( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig, st_ivas->hCombinedOrientationData, + &st_ivas->hIntSetup, st_ivas->hEFAPdata, st_ivas->hTcBuffer, crendInPlaceRotation ? p_output_fx : p_tc_fx, p_output_fx, *nSamplesRendered, output_Fs ) ), + IVAS_ERR_OK ) ) + { + return error; + } + + ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_tc_fx, p_output_fx ); + + FOR( i = 0; i < nchan_in; i++ ) + { + scale_sig32( p_output_fx[i], *nSamplesRendered, sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 + IF( st_ivas->hDecoderConfig->Opt_tsm ) + { + scale_sig32( p_tc_fx[i], *nSamplesRendered, sub( Q11, *st_ivas->hCrendWrapper->p_io_qfactor ) ); // Q11 + } + } + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) { + *nSamplesRendered = s_min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); + move16(); - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig, st_ivas->hCombinedOrientationData, - &st_ivas->hIntSetup, st_ivas->hEFAPdata, st_ivas->hTcBuffer, crendInPlaceRotation ? p_output : p_tc, p_output, *nSamplesRendered, output_Fs ) ) != IVAS_ERR_OK ) + ivas_ls_setup_conversion_fx( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc_fx, p_output_fx ); + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) + { + ivas_mc2sba_fx( st_ivas->hIntSetup, p_tc_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) + { + IF( NE_32( ( error = ivas_td_binaural_renderer_sf_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) + { + return error; + } + ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_tc_fx, p_output_fx ); + } + } + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) + { + ivas_mc_paramupmix_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_tc_fx, p_output_fx ); + test(); + test(); + /* Rendering */ + IF( ( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) && !st_ivas->hDecoderConfig->Opt_Headrotation ) + { + ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_output_fx, p_output_fx ); + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC ) ) + { + ivas_ls_setup_conversion_fx( st_ivas, MC_PARAMUPMIX_MAX_INPUT_CHANS, *nSamplesRendered, p_output_fx, p_output_fx ); + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) + { + ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); + } + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_OBJECTS_TD ) ) + { + IF( NE_32( ( error = ivas_td_binaural_renderer_fx( st_ivas, p_output_fx, *nSamplesRendered ) ), IVAS_ERR_OK ) ) { return error; } - ivas_binaural_add_LFE( st_ivas, *nSamplesRendered, p_tc, p_output ); + ivas_binaural_add_LFE_fx( st_ivas, *nSamplesRendered, p_output_fx, p_output_fx ); + } + } + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) + { + Word16 channel_active_fx[MAX_OUTPUT_CHANNELS]; + Word16 nchan_out_cov; + Word16 nchan_out_cldfb = 0; + move16(); + + set16_fx( channel_active_fx, 0, MAX_CICP_CHANNELS ); + Word16 nchan_transport_tmp = st_ivas->nchan_transport; + move16(); + output_Fs = st_ivas->hDecoderConfig->output_Fs; + move32(); + Word16 nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_FASTCONV_ROOM ) ) + { + nchan_out_cldfb = BINAURAL_CHANNELS; + move16(); + set16_fx( channel_active_fx, 1, BINAURAL_CHANNELS ); + nchan_out_cov = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); + } + ELSE IF( EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_CLDFB ) ) + { + nchan_out_cov = nchan_out_transport; + move16(); + nchan_out_cldfb = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); + } + ELSE IF( EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_32( st_ivas->hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) + { + nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); + nchan_out_cldfb = nchan_out_cov; + move16(); + set16_fx( channel_active_fx, 1, nchan_out_cov ); + } + ELSE + { + nchan_out_cov = nchan_out_transport; + move16(); + nchan_out_cldfb = nchan_out_transport; + move16(); + set16_fx( channel_active_fx, 1, nchan_out_cov ); } - else if ( st_ivas->renderer_type == RENDERER_MC ) + IF( st_ivas->hParamMC->max_band_decorr > 0 ) { - *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); - ivas_ls_setup_conversion( st_ivas, st_ivas->nchan_transport, *nSamplesRendered, p_tc, p_output ); + Word16 tmp; + tmp = L_norm_arr( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_fx, st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_len ); + scale_sig32( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_fx, st_ivas->hParamMC->h_freq_domain_decorr_ap_state->decorr_buffer_len, tmp ); // Q(st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer+ tmp) + st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer = add( st_ivas->hParamMC->h_freq_domain_decorr_ap_state->q_decorr_buffer, tmp ); + move16(); } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + /* CLDFB synthesis */ + FOR( Word16 ch = 0; ch < nchan_out_cldfb; ch++ ) { - ivas_mc2sba( st_ivas->hIntSetup, p_tc, p_output, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0.f ); + IF( st_ivas->cldfbSynDec[ch] ) + { + scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, ( Q5 - Q11 ) ); // Q5 + st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q5; + move16(); + } } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + Word16 tempp; + FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->num_param_bands_synth; param_band_idx++ ) { - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, *nSamplesRendered ) ) != IVAS_ERR_OK ) + tempp = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_len ); + scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_len, tempp ); // Q(31-(st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx]- tempp)) + st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx], tempp ); + move16(); + + IF( LT_16( st_ivas->hParamMC->band_grouping[param_band_idx], st_ivas->hParamMC->h_output_synthesis_params.max_band_decorr ) ) { - return error; + tempp = getScaleFactor32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_len ); + scale_sig32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_len, tempp ); // Q(31- (st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx] - tempp)) + st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx] = sub( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx], tempp ); + move16(); } - - ivas_binaural_add_LFE( st_ivas, *nSamplesRendered, p_tc, p_output ); } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - ivas_mc_paramupmix_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_tc, p_output ); + ivas_param_mc_dec_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx, channel_active_fx ); - /* Rendering */ - if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && !st_ivas->hDecoderConfig->Opt_Headrotation ) + FOR( int ch = 0; ch < nchan_out_cldfb; ch++ ) { + IF( st_ivas->cldfbSynDec[ch] ) { - ivas_binaural_add_LFE( st_ivas, *nSamplesRendered, p_output, p_output ); + scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, Q11 - Q5 ); // Q11 + st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11; + move16(); } } - else if ( st_ivas->renderer_type == RENDERER_MC ) - { - ivas_ls_setup_conversion( st_ivas, MC_PARAMUPMIX_MAX_INPUT_CHANS, *nSamplesRendered, p_output, p_output ); - } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - ivas_mc2sba( st_ivas->hIntSetup, p_output, p_output, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0.f ); - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) + IF( EQ_16( st_ivas->hParamMC->slots_rendered, st_ivas->hParamMC->num_slots ) ) { - if ( ( error = ivas_td_binaural_renderer( st_ivas, p_output, *nSamplesRendered ) ) != IVAS_ERR_OK ) + FOR( Word16 param_band_idx = 0; param_band_idx < st_ivas->hParamMC->hMetadataPMC->nbands_coded; param_band_idx++ ) { - return error; + IF( LT_16( st_ivas->hParamMC->band_grouping[param_band_idx], st_ivas->hParamMC->h_output_synthesis_params.max_band_decorr ) ) + { + Copy32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[param_band_idx], imult1616( nchan_transport_tmp, nchan_out_cov ) ); + st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[param_band_idx] = st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp[param_band_idx]; + move16(); + } + Copy32( st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx[param_band_idx], st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[param_band_idx], imult1616( nchan_transport_tmp, nchan_out_cov ) ); + st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[param_band_idx] = st_ivas->hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp[param_band_idx]; + move16(); } - - ivas_binaural_add_LFE( st_ivas, *nSamplesRendered, p_output, p_output ); } } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - ivas_param_mc_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - int16_t offset = hSpatParamRendCom->slots_rendered * hSpatParamRendCom->slot_size; + Word16 offset = imult1616( hSpatParamRendCom->slots_rendered, hSpatParamRendCom->slot_size ); nchan_remapped = st_ivas->nchan_transport; + move16(); - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC ) || EQ_32( st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM ) || EQ_32( st_ivas->renderer_type, RENDERER_STEREO_PARAMETRIC ) ) { - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); + ivas_dirac_dec_binaural_render_fx( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output_fx ); } - else if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) /* rendering to CICPxx and Ambisonics */ + ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) || EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) /* rendering to CICPxx and Ambisonics */ { - ivas_dirac_dec_render( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); + ivas_dirac_dec_render_fx( st_ivas, nchan_remapped, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output_fx ); - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) + test(); + test(); + test(); + IF( EQ_32( st_ivas->renderer_type, RENDERER_SBA_LINEAR_ENC ) ) { /* we still need to copy the separate channel if available */ - if ( st_ivas->hOutSetup.separateChannelEnabled ) + IF( st_ivas->hOutSetup.separateChannelEnabled ) { - mvr2r( st_ivas->hTcBuffer->tc[LFE_CHANNEL - 1] + offset, p_output[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); } - ivas_mc2sba( st_ivas->hIntSetup, p_output, p_output, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0.f ); + ivas_mc2sba_fx( st_ivas->hIntSetup, p_output_fx, p_output_fx, *nSamplesRendered, st_ivas->hOutSetup.ambisonics_order, 0 ); } - else if ( st_ivas->intern_config == IVAS_AUDIO_CONFIG_5_1 && ( output_config == IVAS_AUDIO_CONFIG_5_1_2 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1 ) ) + ELSE IF( EQ_32( st_ivas->intern_config, IVAS_AUDIO_CONFIG_5_1 ) && ( EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1 ) ) ) { - for ( n = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; n < st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; n++ ) + FOR( n = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; n < ( st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); n++ ) { - set_zero( p_output[n], *nSamplesRendered ); + set32_fx( p_output_fx[n], 0, *nSamplesRendered ); } } } /* copy discrete C and TD LFE from internal TC to output */ - if ( st_ivas->hOutSetup.separateChannelEnabled ) + IF( st_ivas->hOutSetup.separateChannelEnabled ) { - if ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || - output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || - output_config == IVAS_AUDIO_CONFIG_5_1_2 || ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) + test(); + test(); + test(); + test(); + test(); + test(); + test(); + IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1 ) || + EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_4 ) || EQ_32( output_config, IVAS_AUDIO_CONFIG_7_1_4 ) || + EQ_32( output_config, IVAS_AUDIO_CONFIG_5_1_2 ) || ( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && GT_16( st_ivas->hOutSetup.num_lfe, 0 ) ) ) { - mvr2r( st_ivas->hTcBuffer->tc[LFE_CHANNEL] + offset, p_output[LFE_CHANNEL], *nSamplesRendered ); - mvr2r( st_ivas->hTcBuffer->tc[LFE_CHANNEL - 1] + offset, p_output[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL] + offset, p_output_fx[LFE_CHANNEL], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); } - else if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe == 0 ) + ELSE IF( EQ_32( output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) && st_ivas->hOutSetup.num_lfe == 0 ) { /* Delay the separated channel to sync with the DirAC rendering */ - mvr2r( st_ivas->hTcBuffer->tc[LFE_CHANNEL - 1] + offset, p_output[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); + Copy32( st_ivas->hTcBuffer->tc_fx[LFE_CHANNEL - 1] + offset, p_output_fx[st_ivas->hOutSetup.separateChannelIndex], *nSamplesRendered ); } } } @@ -3855,40 +2558,43 @@ ivas_error ivas_jbm_dec_render( * - float to integer conversion *----------------------------------------------------------------*/ - st_ivas->hTcBuffer->n_samples_available -= *nSamplesRendered; - st_ivas->hTcBuffer->n_samples_rendered += *nSamplesRendered; + st_ivas->hTcBuffer->n_samples_available = sub( st_ivas->hTcBuffer->n_samples_available, *nSamplesRendered ); + st_ivas->hTcBuffer->n_samples_rendered = add( st_ivas->hTcBuffer->n_samples_rendered, *nSamplesRendered ); + move16(); + move16(); /* update global combined orientation start index */ ivas_combined_orientation_update_start_index( st_ivas->hCombinedOrientationData, *nSamplesRendered ); - if ( st_ivas->hTcBuffer->n_samples_discard > 0 ) + IF( st_ivas->hTcBuffer->n_samples_discard > 0 ) { - for ( n = 0; n < min( MAX_OUTPUT_CHANNELS, ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ) ); n++ ) + FOR( n = 0; n < s_min( MAX_OUTPUT_CHANNELS, ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ) ); n++ ) { - p_output[n] += st_ivas->hTcBuffer->n_samples_discard; + p_output_fx[n] += st_ivas->hTcBuffer->n_samples_discard; } - *nSamplesRendered -= st_ivas->hTcBuffer->n_samples_discard; + *nSamplesRendered = sub( (Word16) *nSamplesRendered, st_ivas->hTcBuffer->n_samples_discard ); + move16(); st_ivas->hTcBuffer->n_samples_discard = 0; + move16(); } { - if ( st_ivas->ivas_format != MONO_FORMAT ) + IF( NE_32( st_ivas->ivas_format, MONO_FORMAT ) ) { #ifndef DISABLE_LIMITER - ivas_limiter_dec( st_ivas->hLimiter, p_output, nchan_out, *nSamplesRendered, st_ivas->BER_detect ); + ivas_limiter_dec_fx( st_ivas->hLimiter, p_output_fx, nchan_out, *nSamplesRendered, st_ivas->BER_detect, output_q_factor ); #endif } } - ivas_syn_output( p_output, *nSamplesRendered, nchan_out, data ); - + ivas_syn_output_fx( p_output_fx, output_q_factor, *nSamplesRendered, nchan_out, data ); *nSamplesAvailableNext = st_ivas->hTcBuffer->n_samples_available; + move16(); pop_wmops(); return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_dec_flush_renderer() @@ -3896,7 +2602,6 @@ ivas_error ivas_jbm_dec_render( * Flush samples if renderer granularity changes on a bitrate change *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_jbm_dec_flush_renderer_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 tc_granularity_new, /* i : new renderer granularity */ @@ -4141,246 +2846,12 @@ ivas_error ivas_jbm_dec_flush_renderer_fx( set16_fx( st_ivas->hSpatParamRendCom->render_to_md_map, last_dirac_md_idx, n_slots_still_available ); /* render the last subframe */ - IF( NE_32( ( error = ivas_osba_dirac_td_binaural_jbm_fx( st_ivas, (UWord16) hTcBuffer->n_samples_granularity, nSamplesRendered, &nSamplesAvailableNext, p_output_fx, L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - return IVAS_ERROR( IVAS_ERR_WRONG_MODE, "Wrong IVAS format in VoIP renderer flushing!" ); - } -#ifdef CR_FIX_JBM_FLUSH_OFFSET - hTcBuffer->n_samples_rendered = hTcBuffer->n_samples_granularity; -#endif - } - - /* update global combined orientation start index */ - ivas_combined_orientation_update_start_index( st_ivas->hCombinedOrientationData, *nSamplesRendered ); - - *nSamplesRendered = n_samples_to_render; - move16(); - /* Only write out the valid data*/ - { - IF( NE_16( st_ivas->ivas_format, MONO_FORMAT ) ) - { -#ifndef DISABLE_LIMITER - Word16 ch_idx, exp = 11; - move16(); - FOR( ch_idx = 0; ch_idx < MAX_CICP_CHANNELS; ch_idx++ ) - { - p_output_fx[ch_idx] = output_fx[ch_idx]; - } - ivas_limiter_dec_fx( st_ivas->hLimiter, p_output_fx, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, st_ivas->BER_detect, exp ); -#endif - } - } - - ivas_syn_output_fx( p_output_fx, Q11, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, data ); - return IVAS_ERR_OK; -} -#else -ivas_error ivas_jbm_dec_flush_renderer( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t tc_granularity_new, /* i : new renderer granularity */ - const RENDERER_TYPE renderer_type_old, /* i : old renderer type */ - const AUDIO_CONFIG intern_config_old, /* i : old internal config */ - const IVAS_OUTPUT_SETUP_HANDLE hIntSetupOld, /* i : old internal output setup */ - const MC_MODE mc_mode_old, /* i : old MC mode */ - const ISM_MODE ism_mode_old, /* i : old ISM mode */ - uint16_t *nSamplesRendered, /* o : number of samples flushed */ - int16_t *data /* o : output synthesis signal */ -) -{ - ivas_error error; - int16_t n_samples_still_available; - int16_t n_slots_still_available; - int16_t n_samples_to_render; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - float output[MAX_CICP_CHANNELS][L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - float *p_output[MAX_CICP_CHANNELS]; - - if ( !st_ivas->hDecoderConfig->Opt_tsm ) - { - return IVAS_ERR_OK; - } - - *nSamplesRendered = 0; - hTcBuffer = st_ivas->hTcBuffer; - - /* get number of possible slots in new granularity */ - n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; - n_slots_still_available = n_samples_still_available / tc_granularity_new; - *nSamplesRendered = n_slots_still_available * tc_granularity_new; - n_samples_to_render = *nSamplesRendered; - n_samples_still_available -= n_samples_to_render; - assert( n_samples_still_available < tc_granularity_new ); - - /* update combined orientation access index */ - ivas_combined_orientation_set_to_start_index( st_ivas->hCombinedOrientationData ); - - if ( n_slots_still_available ) - { - int16_t ch_idx; - - /* render what is still there with zero padding */ - for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) - { - /* move it at the beginning of the TC buffer with zero padding */ - mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch_idx], n_samples_to_render ); - set_zero( hTcBuffer->tc[ch_idx] + n_samples_to_render, hTcBuffer->n_samples_granularity - n_samples_to_render ); - mvr2r( hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_rendered + n_samples_to_render, hTcBuffer->tc[ch_idx] + hTcBuffer->n_samples_granularity, n_samples_still_available ); - } - - /* simple change of the slot info */ - hTcBuffer->num_slots = 1; - hTcBuffer->nb_subframes = 1; - hTcBuffer->subframes_rendered = 0; - hTcBuffer->slots_rendered = 0; - hTcBuffer->subframe_nbslots[0] = 1; - hTcBuffer->n_samples_buffered = hTcBuffer->n_samples_granularity + n_samples_still_available; - hTcBuffer->n_samples_available = 0; - hTcBuffer->n_samples_flushed = n_samples_to_render; -#ifdef CR_FIX_JBM_FLUSH_OFFSET - hTcBuffer->n_samples_rendered = 0; -#else - hTcBuffer->n_samples_rendered = hTcBuffer->n_samples_granularity; -#endif - - for ( ch_idx = 0; ch_idx < MAX_CICP_CHANNELS; ch_idx++ ) - { - p_output[ch_idx] = output[ch_idx]; - } - - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - if ( ism_mode_old == ISM_MODE_DISC ) - { - /* Binaural rendering */ - if ( renderer_type_old == RENDERER_BINAURAL_OBJECTS_TD ) - { - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( renderer_type_old == RENDERER_BINAURAL_MIXER_CONV_ROOM ) - { - /* Convert to CICPxx; used also for ISM->CICP19->binaural_room rendering */ - set_f( st_ivas->hIsmRendererData->interpolator, 1.0f, hTcBuffer->n_samples_granularity ); - - ivas_ism_render_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ); - - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, st_ivas->hDecoderConfig, NULL, - NULL, NULL, st_ivas->hTcBuffer, p_output, p_output, hTcBuffer->n_samples_granularity, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - return IVAS_ERROR( IVAS_ERR_WRONG_MODE, "Wrong ISM_MODE in VoIP renderer flushing!" ); - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - if ( mc_mode_old == MC_MODE_MCT ) - { - if ( renderer_type_old == RENDERER_BINAURAL_MIXER_CONV || renderer_type_old == RENDERER_BINAURAL_MIXER_CONV_ROOM ) - { - if ( ( error = ivas_rend_crendProcessSubframe( st_ivas->hCrendWrapper, intern_config_old, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig, st_ivas->hCombinedOrientationData, - hIntSetupOld, st_ivas->hEFAPdata, st_ivas->hTcBuffer, hTcBuffer->tc, p_output, hTcBuffer->n_samples_granularity, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - ivas_binaural_add_LFE( st_ivas, hTcBuffer->n_samples_granularity, st_ivas->hTcBuffer->tc, p_output ); - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) - { - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - - ivas_binaural_add_LFE( st_ivas, hTcBuffer->n_samples_granularity, st_ivas->hTcBuffer->tc, p_output ); - } - } - else - { - return IVAS_ERROR( IVAS_ERR_WRONG_MODE, "Wrong MC_MODE in VoIP renderer flushing!" ); - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) - { - if ( ism_mode_old == ISM_MASA_MODE_DISC ) - { - float *tc_local[MAX_TRANSPORT_CHANNELS]; - - for ( ch_idx = 0; ch_idx < st_ivas->nchan_ism; ch_idx++ ) - { - tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx + 2][hTcBuffer->n_samples_rendered]; - mvr2r( st_ivas->hMasaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hMasaIsmData->delayBuffer_size ); - } - - if ( st_ivas->nchan_ism > 0 ) - { - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_output, hTcBuffer->n_samples_granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - for ( ch_idx = 0; ch_idx < st_ivas->hDecoderConfig->nchan_out; ch_idx++ ) - { - set_zero( p_output[ch_idx], (int16_t) ( *nSamplesRendered ) ); - } - st_ivas->hTcBuffer->slots_rendered += 1; - st_ivas->hTcBuffer->subframes_rendered += 1; - } - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - float *tc_local[MAX_TRANSPORT_CHANNELS]; - int16_t last_spar_md_idx; - int16_t last_dirac_md_idx; - uint16_t nSamplesAvailableNext; - - last_spar_md_idx = st_ivas->hSpar->render_to_md_map[st_ivas->hSpar->slots_rendered - 1]; - last_dirac_md_idx = st_ivas->hSpatParamRendCom->render_to_md_map[st_ivas->hSpatParamRendCom->slots_rendered - 1]; - /* copy from ISM delay buffer to the correct place in tcs */ - for ( ch_idx = 0; ch_idx < st_ivas->nchan_ism; ch_idx++ ) - { - tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx + 2][hTcBuffer->n_samples_rendered]; - mvr2r( st_ivas->hSbaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hSbaIsmData->delayBuffer_size ); - } - - /* transfer adapted sf info from hTcBuffer to SPAR and DirAC */ - st_ivas->hSpar->nb_subframes = 1; - st_ivas->hSpar->subframes_rendered = 0; - st_ivas->hSpar->subframe_nbslots[0] = JBM_CLDFB_SLOTS_IN_SUBFRAME; - st_ivas->hSpar->slots_rendered = 0; - st_ivas->hSpar->num_slots = JBM_CLDFB_SLOTS_IN_SUBFRAME; - st_ivas->hSpatParamRendCom->nb_subframes = 1; - st_ivas->hSpatParamRendCom->subframes_rendered = 0; - st_ivas->hSpatParamRendCom->subframe_nbslots[0] = JBM_CLDFB_SLOTS_IN_SUBFRAME; - st_ivas->hSpatParamRendCom->slots_rendered = 0; - st_ivas->hSpatParamRendCom->num_slots = JBM_CLDFB_SLOTS_IN_SUBFRAME; - - /* also adapt md maps, just use the last index */ - set_s( st_ivas->hSpar->render_to_md_map, last_spar_md_idx, n_slots_still_available ); - set_s( st_ivas->hSpatParamRendCom->render_to_md_map, last_dirac_md_idx, n_slots_still_available ); - - /* render the last subframe */ - if ( ( error = ivas_osba_dirac_td_binaural_jbm( st_ivas, (uint16_t) hTcBuffer->n_samples_granularity, nSamplesRendered, &nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_osba_dirac_td_binaural_jbm_fx( st_ivas, (UWord16) hTcBuffer->n_samples_granularity, nSamplesRendered, &nSamplesAvailableNext, p_output_fx, L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES ) ), IVAS_ERR_OK ) ) { return error; } } - else + ELSE { return IVAS_ERROR( IVAS_ERR_WRONG_MODE, "Wrong IVAS format in VoIP renderer flushing!" ); } @@ -4393,24 +2864,26 @@ ivas_error ivas_jbm_dec_flush_renderer( ivas_combined_orientation_update_start_index( st_ivas->hCombinedOrientationData, *nSamplesRendered ); *nSamplesRendered = n_samples_to_render; - + move16(); /* Only write out the valid data*/ { - if ( st_ivas->ivas_format != MONO_FORMAT ) + IF( NE_16( st_ivas->ivas_format, MONO_FORMAT ) ) { #ifndef DISABLE_LIMITER - ivas_limiter_dec( st_ivas->hLimiter, p_output, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, st_ivas->BER_detect ); + Word16 ch_idx, exp = 11; + move16(); + FOR( ch_idx = 0; ch_idx < MAX_CICP_CHANNELS; ch_idx++ ) + { + p_output_fx[ch_idx] = output_fx[ch_idx]; + } + ivas_limiter_dec_fx( st_ivas->hLimiter, p_output_fx, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, st_ivas->BER_detect, exp ); #endif } } - ivas_syn_output( p_output, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, - data ); - - + ivas_syn_output_fx( p_output_fx, Q11, *nSamplesRendered, st_ivas->hDecoderConfig->nchan_out, data ); return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* @@ -4422,7 +2895,6 @@ ivas_error ivas_jbm_dec_flush_renderer( ivas_error ivas_jbm_dec_set_discard_samples( Decoder_Struct *st_ivas /* i/o: main IVAS decoder structre */ ) -#ifdef IVAS_FLOAT_FIXED { Word16 nMaxSlotsPerSubframe, nSlotsInFirstSubframe; Word16 temp, temp_e; @@ -4444,23 +2916,6 @@ ivas_error ivas_jbm_dec_set_discard_samples( return IVAS_ERR_OK; } -#else -{ - int16_t nMaxSlotsPerSubframe, nSlotsInFirstSubframe; - - /* render first frame with front zero padding and discarding those samples */ - nMaxSlotsPerSubframe = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / st_ivas->hTcBuffer->n_samples_granularity; - nSlotsInFirstSubframe = nMaxSlotsPerSubframe - st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1]; - if ( nSlotsInFirstSubframe > 0 ) - { - st_ivas->hTcBuffer->n_samples_discard = ( nMaxSlotsPerSubframe - nSlotsInFirstSubframe ) * st_ivas->hTcBuffer->n_samples_granularity; - /* set last subframes number to max to ensure correct continuation */ - st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1] = nMaxSlotsPerSubframe; - } - - return IVAS_ERR_OK; -} -#endif /*--------------------------------------------------------------------------* @@ -4468,42 +2923,6 @@ ivas_error ivas_jbm_dec_set_discard_samples( * * Get an interpolator that is adapted to time scale modified IVAS frame *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_jbm_dec_get_adapted_linear_interpolator( - const int16_t default_interp_length, /* i : default length of the (full-frame) interpolator */ - const int16_t interp_length, /* i : length of the interpolator to be created */ - float *interpolator /* o : the interpolator */ -) -{ - int16_t jbm_segment_len, idx; - float dec; - - jbm_segment_len = ( default_interp_length >> 1 ); - dec = 1.0f / default_interp_length; - - interpolator[interp_length - 1] = 1.0f; - for ( idx = interp_length - 2; idx >= jbm_segment_len; idx-- ) - { - interpolator[idx] = max( 0.0f, interpolator[idx + 1] - dec ); - } - - if ( interpolator[idx + 1] > 0.0f ) - { - dec = interpolator[idx + 1] / ( jbm_segment_len + 1 ); - for ( ; idx >= 0; idx-- ) - { - interpolator[idx] = interpolator[idx + 1] - dec; - } - } - else - { - set_f( interpolator, 0.0f, idx + 1 ); - } - - return; -} -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_get_adapted_linear_interpolator_fx( const Word16 default_interp_length, /* i : default length of the (full-frame) interpolator */ const Word16 interp_length, /* i : length of the interpolator to be created */ @@ -4544,7 +2963,6 @@ void ivas_jbm_dec_get_adapted_linear_interpolator_fx( return; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_adapted_subframes() @@ -4552,7 +2970,6 @@ void ivas_jbm_dec_get_adapted_linear_interpolator_fx( * Get an interpolator that is adapted to time scale modified IVAS frame *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_get_adapted_subframes( const Word16 nCldfbTs, /* i : number of time slots in the current frame */ Word16 *subframe_nbslots, /* i/o: subframe grid */ @@ -4598,52 +3015,12 @@ void ivas_jbm_dec_get_adapted_subframes( return; } -#else -void ivas_jbm_dec_get_adapted_subframes( - const int16_t nCldfbTs, /* i : number of time slots in the current frame */ - int16_t *subframe_nbslots, /* i/o: subframe grid */ - int16_t *nb_subframes /* i/o: number of subframes in the frame */ -) -{ - uint16_t nSlotsInLastSubframe, nSlotsInFirstSubframe; - uint16_t nCldfbSlotsLocal = nCldfbTs; - - /* get last subframe size from previous frame, determine how many slots have to be processed - in the first subframe (i.e. potential leftover of a 5ms subframe) */ - nSlotsInFirstSubframe = ( PARAM_MC_MAX_NSLOTS_IN_SUBFRAME - subframe_nbslots[*nb_subframes - 1] ); - *nb_subframes = 0; - if ( nSlotsInFirstSubframe > 0 ) - { - *nb_subframes = 1; - nCldfbSlotsLocal -= nSlotsInFirstSubframe; - } - - *nb_subframes += (int16_t) ceilf( (float) nCldfbSlotsLocal / (float) PARAM_MC_MAX_NSLOTS_IN_SUBFRAME ); - nSlotsInLastSubframe = nCldfbSlotsLocal % PARAM_MC_MAX_NSLOTS_IN_SUBFRAME; - - set_s( subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( subframe_nbslots, PARAM_MC_MAX_NSLOTS_IN_SUBFRAME, *nb_subframes ); - - if ( nSlotsInFirstSubframe > 0 ) - { - subframe_nbslots[0] = nSlotsInFirstSubframe; - } - - if ( nSlotsInLastSubframe > 0 ) - { - subframe_nbslots[*nb_subframes - 1] = nSlotsInLastSubframe; - } - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_adapted_linear_interpolator() * * Get an meta data map adapted to a time scale modified IVAS frame *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_get_md_map( const Word16 default_len, /* i : default frame length in metadata slots */ const Word16 len, /* i : length of the modfied frames in metadata slots */ @@ -4691,49 +3068,6 @@ void ivas_jbm_dec_get_md_map( return; } -#else -void ivas_jbm_dec_get_md_map( - const int16_t default_len, /* i : default frame length in metadata slots */ - const int16_t len, /* i : length of the modfied frames in metadata slots */ - const int16_t subframe_len, /* i : default length of a subframe */ - const int16_t offset, /* i : current read offset into the md buffer */ - const int16_t buf_len, /* i : length of the metadata buffer */ - int16_t *map /* o : metadata index map */ -) -{ - int16_t jbm_segment_len, map_idx, src_idx, src_idx_map; - float dec, src_idx_f; - - jbm_segment_len = ( default_len >> 1 ); - dec = 1.0f / default_len; - - for ( map_idx = len - 1, src_idx = default_len - 1; map_idx >= jbm_segment_len; map_idx--, src_idx-- ) - { - src_idx_map = max( 0, src_idx / subframe_len ); - map[map_idx] = ( offset + src_idx_map ) % buf_len; - } - - /* changed part (first segment), interpolate index to parameters - (we do not want to interpolate and smooth acutal direction/diffuseness values even more) */ - if ( src_idx >= 0 ) - { - dec = ( (float) ( src_idx + 1 ) ) / ( (float) jbm_segment_len ); - src_idx_f = (float) ( src_idx + 1 ) - dec; - for ( ; map_idx >= 0; map_idx-- ) - { - src_idx = max( 0, ( (int16_t) round_f( src_idx_f ) ) / subframe_len ); - map[map_idx] = ( offset + src_idx ) % buf_len; - src_idx_f -= dec; - } - } - else - { - set_s( map, offset, map_idx + 1 ); - } - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_md_map_even_spacing() @@ -4741,7 +3075,6 @@ void ivas_jbm_dec_get_md_map( * Get an meta data map adapted to a time scale modified IVAS frame. Distribute slots evenly across the modified frame. *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_get_md_map_even_spacing( const Word16 len, /* i : length of the modfied frames in metadata slots */ const Word16 subframe_len, /* i : default length of a subframe */ @@ -4809,214 +3142,14 @@ void ivas_jbm_dec_get_md_map_even_spacing( return; } -#else -void ivas_jbm_dec_get_md_map_even_spacing( - const int16_t len, /* i : length of the modfied frames in metadata slots */ - const int16_t subframe_len, /* i : default length of a subframe */ - const int16_t offset, /* i : current read offset into the md buffer */ - const int16_t buf_len, /* i : length of the metadata buffer */ - int16_t *map /* o : metadata index map */ -) -{ - int16_t map_idx, sf_idx, sf_length, increment, subframes_written; - float decimal, decimal_sum, eps; - int16_t subframe_map_length[MAX_PARAM_SPATIAL_SUBFRAMES]; - - /* subframe map length */ - sf_length = len / subframe_len; - if ( len % subframe_len == 0 ) - { - /* even subframes */ - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - subframe_map_length[sf_idx] = sf_length; - } - } - else - { - /* uneven subframes */ - decimal = ( (float) len / (float) subframe_len ) - (float) sf_length; - decimal_sum = decimal; - eps = 0.001f; - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - increment = (int16_t) floorf( decimal_sum + eps ); - subframe_map_length[sf_idx] = sf_length + increment; - if ( increment > 0 ) - { - decimal_sum -= 1.0f; - } - decimal_sum += decimal; - } - } - - /* map slots to subframes */ - sf_idx = 0; - subframes_written = 0; - for ( map_idx = 0; map_idx < len; map_idx++ ) - { - map[map_idx] = ( offset + sf_idx ) % buf_len; - if ( map_idx - subframes_written >= subframe_map_length[sf_idx] - 1 ) - { - subframes_written += subframe_map_length[sf_idx]; - ++sf_idx; - } - } - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_num_tc_channels() * * Get the number of transport channels provided by the JBM transport channel decode function *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_jbm_dec_get_num_tc_channels( - Decoder_Struct *st_ivas /* i : IVAS decoder handle */ -) -{ - int16_t num_tc; - int32_t ivas_total_brate; - AUDIO_CONFIG output_config; - - - if ( st_ivas->renderer_type == RENDERER_DISABLE ) - { - num_tc = st_ivas->hDecoderConfig->nchan_out; - } - else - { - num_tc = st_ivas->nchan_transport; - } - output_config = st_ivas->hDecoderConfig->output_config; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - if ( st_ivas->ivas_format == MONO_FORMAT ) - { - num_tc = st_ivas->hDecoderConfig->nchan_out; - } - else if ( st_ivas->ivas_format == STEREO_FORMAT && st_ivas->hDecoderConfig->nchan_out == 1 ) - { - num_tc = 1; - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - num_tc = 1; - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) - { - if ( st_ivas->sba_dirac_stereo_flag ) - { - num_tc = CPE_CHANNELS; - } - else if ( st_ivas->ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && ( ivas_total_brate > IVAS_SID_5k2 || ( ivas_total_brate <= IVAS_SID_5k2 && st_ivas->nCPE > 0 && st_ivas->hCPE[0] != NULL && st_ivas->hCPE[0]->nchan_out == 1 ) ) ) - { - num_tc = 1; /* Only one channel transported */ - } - - if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL && st_ivas->nchan_transport == 2 && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) - { - num_tc = CPE_CHANNELS; - } - if ( st_ivas->ivas_format == SBA_FORMAT ) - { - - if ( num_tc == 3 ) - { - num_tc++; - } - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - num_tc++; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - num_tc += st_ivas->nchan_ism; - } - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( st_ivas->sba_dirac_stereo_flag ) - { - num_tc = CPE_CHANNELS; - } - if ( ( st_ivas->sba_planar && num_tc >= 3 ) || ( num_tc == 3 ) ) - { - num_tc++; - } - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - num_tc += st_ivas->nchan_ism; - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) - { - num_tc = 1; - } - else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - num_tc = 2; - } - else if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - /* do all static dmx already in the TC decoder if less channels than transported... */ - if ( st_ivas->transport_config != st_ivas->intern_config && ( st_ivas->intern_config == IVAS_AUDIO_CONFIG_FOA || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA2 || st_ivas->intern_config == IVAS_AUDIO_CONFIG_HOA3 ) ) - { - if ( ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) >= ( st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe ) ) - { - num_tc = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - } - } - else if ( ( st_ivas->renderer_type == RENDERER_MC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) && ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) >= ( st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ) ) - { - num_tc = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - num_tc = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - if ( st_ivas->hOutSetup.separateChannelEnabled ) - { - num_tc++; - } - if ( st_ivas->hOutSetup.separateChannelEnabled && ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || - output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || - output_config == IVAS_AUDIO_CONFIG_5_1_2 || ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) ) - { - /* LFE is synthesized in TD with the TCs*/ - num_tc++; - } - } - } - else if ( st_ivas->ivas_format == MONO_FORMAT && st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX ) - { - num_tc = MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN; - } - - return num_tc; -} -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED Word16 ivas_jbm_dec_get_num_tc_channels_fx( Decoder_Struct *st_ivas /* i : IVAS decoder handle */ ) @@ -5202,7 +3335,6 @@ Word16 ivas_jbm_dec_get_num_tc_channels_fx( return num_tc; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_copy_tc() @@ -5210,7 +3342,6 @@ Word16 ivas_jbm_dec_get_num_tc_channels_fx( * Copy interleaved transport chnannels to the correct buffers, update the TC * buffer handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_dec_copy_tc( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nSamplesForRendering, /* i : number of samples to digest */ @@ -5252,75 +3383,23 @@ static void ivas_jbm_dec_copy_tc( FOR( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) { Copy32( hTcBuffer->tc_fx[ch], tc_digest_f[ch], n_samples_still_available ); - FOR( m = 0; m < nSamplesForRendering; m++ ) - { - tc_digest_f[ch][n_samples_still_available + m] = data[( m * st_ivas->hTcBuffer->nchan_transport_jbm ) + ch]; // data_q - move32(); - } - Copy32( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_fx[ch], *nSamplesResidual ); - } - } - hTcBuffer->q_tc_fx = data_q; - move16(); - hTcBuffer->n_samples_rendered = 0; - move16(); - hTcBuffer->subframes_rendered = 0; - move16(); - - return; -} -#else -static void ivas_jbm_dec_copy_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nSamplesForRendering, /* i : number of samples to digest */ - int16_t *nSamplesResidual, /* o : number of samples that will be left for the next frame */ - float *data, /* i : (interleaved) transport channel samples */ - float *tc_digest_f[] /* o : samples that will be directly digested (e.g. by CLDFB) */ -) -{ - int16_t ch; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - int16_t n_samples_still_available, m; - int16_t n_ch_full_copy; - int16_t n_ch_res_copy; - - hTcBuffer = st_ivas->hTcBuffer; - n_samples_still_available = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_rendered; - hTcBuffer->n_samples_buffered = n_samples_still_available + nSamplesForRendering + hTcBuffer->n_samples_discard; - hTcBuffer->n_samples_available = hTcBuffer->n_samples_granularity * ( hTcBuffer->n_samples_buffered / hTcBuffer->n_samples_granularity ); - *nSamplesResidual = hTcBuffer->n_samples_buffered - hTcBuffer->n_samples_available; - n_ch_full_copy = min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); - n_ch_res_copy = hTcBuffer->nchan_transport_jbm - hTcBuffer->nchan_buffer_full; - - for ( ch = 0; ch < n_ch_full_copy; ch++ ) - { - set_zero( hTcBuffer->tc[ch], hTcBuffer->n_samples_discard ); - mvr2r( hTcBuffer->tc[ch] + hTcBuffer->n_samples_rendered, hTcBuffer->tc[ch] + hTcBuffer->n_samples_discard, n_samples_still_available ); - for ( m = 0; m < nSamplesForRendering; m++ ) - { - hTcBuffer->tc[ch][n_samples_still_available + hTcBuffer->n_samples_discard + m] = data[m * st_ivas->hTcBuffer->nchan_transport_jbm + ch]; - } - } - - if ( n_ch_res_copy > 0 ) - { - for ( ; ch < hTcBuffer->nchan_transport_jbm; ch++ ) - { - mvr2r( hTcBuffer->tc[ch], tc_digest_f[ch], n_samples_still_available ); - for ( m = 0; m < nSamplesForRendering; m++ ) + FOR( m = 0; m < nSamplesForRendering; m++ ) { - tc_digest_f[ch][n_samples_still_available + m] = data[m * st_ivas->hTcBuffer->nchan_transport_jbm + ch]; + tc_digest_f[ch][n_samples_still_available + m] = data[( m * st_ivas->hTcBuffer->nchan_transport_jbm ) + ch]; // data_q + move32(); } - mvr2r( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc[ch], *nSamplesResidual ); + Copy32( tc_digest_f[ch] + hTcBuffer->n_samples_available, hTcBuffer->tc_fx[ch], *nSamplesResidual ); } } - + hTcBuffer->q_tc_fx = data_q; + move16(); hTcBuffer->n_samples_rendered = 0; + move16(); hTcBuffer->subframes_rendered = 0; + move16(); return; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_render_granularity() @@ -5329,38 +3408,8 @@ static void ivas_jbm_dec_copy_tc( *--------------------------------------------------------------------------*/ /*! r: render granularity */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_jbm_dec_get_render_granularity_flt( - const RENDERER_TYPE rendererType, /* i : renderer type */ - const IVAS_FORMAT ivas_format, /* i : ivas format */ - const MC_MODE mc_mode, /* i : MC mode */ - const int32_t output_Fs /* i : sampling rate */ -) -{ - int16_t render_granularity; - - if ( rendererType == RENDERER_BINAURAL_OBJECTS_TD || rendererType == RENDERER_BINAURAL_MIXER_CONV || rendererType == RENDERER_BINAURAL_MIXER_CONV_ROOM ) - { - if ( ( ivas_format == MC_FORMAT ) && ( mc_mode == MC_MODE_PARAMUPMIX ) ) - { - render_granularity = NS2SA( output_Fs, CLDFB_SLOT_NS ); - } - else - { - render_granularity = NS2SA( output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - else - { - render_granularity = NS2SA( output_Fs, CLDFB_SLOT_NS ); - } - return render_granularity; -} -#endif // !IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED Word16 ivas_jbm_dec_get_render_granularity( const RENDERER_TYPE rendererType, /* i : renderer type */ const IVAS_FORMAT ivas_format, /* i : ivas format */ @@ -5391,7 +3440,6 @@ Word16 ivas_jbm_dec_get_render_granularity( return render_granularity; } -#endif /*--------------------------------------------------------------------------* @@ -5400,128 +3448,7 @@ Word16 ivas_jbm_dec_get_render_granularity( * open and initialize JBM transport channel buffer *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_jbm_dec_tc_buffer_open( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const TC_BUFFER_MODE tc_buffer_mode, /* i : buffer mode */ - const int16_t nchan_transport_jbm, /* i : number of real transport channels */ - const int16_t nchan_transport_internal, /* i : number of totally buffered channels */ - const int16_t nchan_full, /* i : number of channels to fully store */ - const int16_t n_samples_granularity /* i : granularity of the renderer/buffer */ -) -{ - int16_t nsamp_to_allocate; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - int16_t nMaxSlotsPerSubframe; - int16_t nchan_residual; - int16_t ch_idx; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hTcBuffer = (DECODER_TC_BUFFER_HANDLE) malloc( sizeof( DECODER_TC_BUFFER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); - } - - hTcBuffer->tc_buffer_mode = tc_buffer_mode; - hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; - hTcBuffer->nchan_transport_internal = nchan_transport_internal; - hTcBuffer->nchan_buffer_full = nchan_full; - nchan_residual = nchan_transport_internal - nchan_full; - hTcBuffer->n_samples_granularity = n_samples_granularity; - hTcBuffer->n_samples_available = 0; - hTcBuffer->n_samples_buffered = 0; - hTcBuffer->n_samples_rendered = 0; - hTcBuffer->slots_rendered = 0; - hTcBuffer->subframes_rendered = 0; - hTcBuffer->n_samples_discard = 0; - hTcBuffer->n_samples_flushed = 0; - hTcBuffer->nb_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; - nsamp_to_allocate = 0; - nMaxSlotsPerSubframe = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / hTcBuffer->n_samples_granularity; - hTcBuffer->num_slots = nMaxSlotsPerSubframe * MAX_PARAM_SPATIAL_SUBFRAMES; - set_s( hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, MAX_PARAM_SPATIAL_SUBFRAMES ); - - if ( hTcBuffer->tc_buffer_mode == TC_BUFFER_MODE_NONE ) - { - hTcBuffer->tc_buffer = NULL; - - for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = NULL; - } - } - else - { - int16_t n_samp_full, n_samp_residual; - int32_t offset; - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); - n_samp_residual = hTcBuffer->n_samples_granularity - 1; - } - else - { - n_samp_full = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - n_samp_residual = 0; - } - - nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; - nsamp_to_allocate += nchan_residual * n_samp_residual; - - if ( nsamp_to_allocate == 0 ) - { - hTcBuffer->tc_buffer = NULL; - - for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = NULL; - } - } - else - { - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - if ( ( hTcBuffer->tc_buffer = (float *) malloc( nsamp_to_allocate * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); - } - set_zero( hTcBuffer->tc_buffer, nsamp_to_allocate ); - - offset = 0; - for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; - offset += n_samp_full; - } - for ( ; ch_idx < hTcBuffer->nchan_transport_internal; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; - offset += n_samp_residual; - } - for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = NULL; - } - } - else - { - hTcBuffer->tc_buffer = NULL; - } - } - } - - st_ivas->hTcBuffer = hTcBuffer; - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_jbm_dec_tc_buffer_open_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const TC_BUFFER_MODE tc_buffer_mode, /* i : buffer mode */ @@ -5664,7 +3591,6 @@ ivas_error ivas_jbm_dec_tc_buffer_open_fx( return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* @@ -5673,113 +3599,7 @@ ivas_error ivas_jbm_dec_tc_buffer_open_fx( * open and initialize JBM transport channel buffer *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_jbm_dec_tc_buffer_reconfigure( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const TC_BUFFER_MODE tc_buffer_mode, /* i : new buffer mode */ - const int16_t nchan_transport_jbm, /* i : new number of real transport channels */ - const int16_t nchan_transport_internal, /* i : new number of totally buffered channels */ - const int16_t nchan_full, /* i : new number of channels to fully store */ - const int16_t n_samples_granularity /* i : new granularity of the renderer/buffer */ -) -{ - int16_t nsamp_to_allocate, n_samp_full, n_samp_residual, offset, nchan_residual; - int16_t ch_idx; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - - hTcBuffer = st_ivas->hTcBuffer; - - - /* if granularity changes, adapt subframe_nb_slots */ - if ( n_samples_granularity != hTcBuffer->n_samples_granularity ) - { - int16_t nMaxSlotsPerSubframeNew; - - nMaxSlotsPerSubframeNew = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / n_samples_granularity; - /* if samples were flushed, take that into account here */ - if ( n_samples_granularity < hTcBuffer->n_samples_granularity && hTcBuffer->n_samples_flushed > 0 ) - { - hTcBuffer->subframe_nbslots[hTcBuffer->subframes_rendered - 1] = hTcBuffer->n_samples_flushed / n_samples_granularity; - hTcBuffer->n_samples_flushed = 0; - } - else - { - hTcBuffer->subframe_nbslots[hTcBuffer->subframes_rendered - 1] = nMaxSlotsPerSubframeNew; - } - } - - hTcBuffer->tc_buffer_mode = tc_buffer_mode; - hTcBuffer->nchan_transport_jbm = nchan_transport_jbm; - hTcBuffer->nchan_transport_internal = nchan_transport_internal; - hTcBuffer->nchan_buffer_full = nchan_full; - nchan_residual = nchan_transport_internal - nchan_full; - hTcBuffer->n_samples_granularity = n_samples_granularity; - - /* realloc buffers */ - if ( hTcBuffer->tc_buffer != NULL ) - { - free( hTcBuffer->tc_buffer ); - hTcBuffer->tc_buffer = NULL; - } - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - n_samp_full = ( NS2SA( st_ivas->hDecoderConfig->output_Fs, MAX_JBM_L_FRAME_NS ) + hTcBuffer->n_samples_granularity - 1 ); - n_samp_residual = hTcBuffer->n_samples_granularity - 1; - } - else - { - n_samp_full = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - n_samp_residual = 0; - } - nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; - nsamp_to_allocate += nchan_residual * n_samp_residual; - - if ( nsamp_to_allocate == 0 ) - { - hTcBuffer->tc_buffer = NULL; - for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = NULL; - } - } - else - { - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - if ( ( hTcBuffer->tc_buffer = (float *) malloc( nsamp_to_allocate * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM TC Buffer\n" ) ); - } - set_zero( hTcBuffer->tc_buffer, nsamp_to_allocate ); - - offset = 0; - for ( ch_idx = 0; ch_idx < hTcBuffer->nchan_buffer_full; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; - offset += n_samp_full; - } - for ( ; ch_idx < hTcBuffer->nchan_transport_internal; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; - offset += n_samp_residual; - } - for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) - { - hTcBuffer->tc[ch_idx] = NULL; - } - } - else - { - hTcBuffer->tc_buffer = NULL; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_jbm_dec_tc_buffer_reconfigure_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const TC_BUFFER_MODE tc_buffer_mode, /* i : new buffer mode */ @@ -5910,7 +3730,6 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure_fx( return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* @@ -5918,42 +3737,7 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure_fx( * * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_jbm_dec_tc_buffer_playout( - Decoder_Struct *st_ivas, - const uint16_t nSamplesAsked, - uint16_t *nSamplesRendered, - float *output[] ) -{ - int16_t ch_idx, slot_size, slots_to_render, first_sf, last_sf; - - slot_size = st_ivas->hTcBuffer->n_samples_granularity; - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( st_ivas->hTcBuffer->num_slots - st_ivas->hTcBuffer->slots_rendered, nSamplesAsked / slot_size ); - st_ivas->hTcBuffer->slots_rendered += slots_to_render; - *nSamplesRendered = (uint16_t) slots_to_render * slot_size; - first_sf = st_ivas->hTcBuffer->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= st_ivas->hTcBuffer->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( ch_idx = 0; ch_idx < st_ivas->hTcBuffer->nchan_transport_jbm; ch_idx++ ) - { - mvr2r( st_ivas->hTcBuffer->tc[ch_idx] + st_ivas->hTcBuffer->n_samples_rendered, output[ch_idx], *nSamplesRendered ); - } - - st_ivas->hTcBuffer->subframes_rendered = last_sf; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_dec_tc_buffer_playout_fx( Decoder_Struct *st_ivas, const UWord16 nSamplesAsked, @@ -5995,7 +3779,6 @@ static void ivas_jbm_dec_tc_buffer_playout_fx( return; } -#endif /*--------------------------------------------------------------------------* @@ -6004,7 +3787,6 @@ static void ivas_jbm_dec_tc_buffer_playout_fx( * Close JBM transport channel buffer *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_tc_buffer_close( DECODER_TC_BUFFER_HANDLE *phTcBuffer /* i/o: TC buffer handle */ ) @@ -6030,41 +3812,12 @@ void ivas_jbm_dec_tc_buffer_close( return; } -#else -void ivas_jbm_dec_tc_buffer_close( - DECODER_TC_BUFFER_HANDLE *phTcBuffer /* i/o: TC buffer handle */ -) -{ - int16_t i; - - if ( *phTcBuffer != NULL ) - { - for ( i = 0; i < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; i++ ) - { - ( *phTcBuffer )->tc[i] = NULL; - } - - if ( ( *phTcBuffer )->tc_buffer != NULL ) - { - free( ( *phTcBuffer )->tc_buffer ); - ( *phTcBuffer )->tc_buffer = NULL; - } - - free( *phTcBuffer ); - *phTcBuffer = NULL; - } - - return; -} - -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_td_renderers_adapt_subframes() * * Close JBM transport channel buffer *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_td_renderers_adapt_subframes( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -6084,95 +3837,53 @@ void ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas->hTcBuffer->num_slots = nSlotsAvailable; move16(); /* st_ivas->hTcBuffer->n_samples_available = nSlotsAvailable * st_ivas->hTcBuffer->n_samples_granularity; */ - st_ivas->hTcBuffer->n_samples_available = i_mult( nSlotsAvailable, st_ivas->hTcBuffer->n_samples_granularity ); - move16(); - nSlotsInFirstSubframe = sub( nMaxSlotsPerSubframe, st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1] ); - st_ivas->hTcBuffer->nb_subframes = 0; - move16(); - - IF( nSlotsInFirstSubframe > 0 ) - { - st_ivas->hTcBuffer->nb_subframes = 1; - move16(); - nSlotsAvailable = sub( nSlotsAvailable, nSlotsInFirstSubframe ); - } - - s1 = sub( norm_s( nSlotsAvailable ), 1 ); - s2 = norm_s( nMaxSlotsPerSubframe ); - - tmp1 = shl( nSlotsAvailable, s1 ); - tmp2 = shl( nMaxSlotsPerSubframe, s2 ); - - tmp = div_s( tmp1, tmp2 ); - st_ivas->hTcBuffer->nb_subframes = add( st_ivas->hTcBuffer->nb_subframes, ceil_fx16( tmp, sub( 15, sub( s2, s1 ) ) ) ); - move16(); - - nSlotsInLastSubframe = nSlotsAvailable % nMaxSlotsPerSubframe; - move16(); - set16_fx( st_ivas->hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set16_fx( st_ivas->hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, st_ivas->hTcBuffer->nb_subframes ); - - if ( nSlotsInFirstSubframe > 0 ) - { - st_ivas->hTcBuffer->subframe_nbslots[0] = nSlotsInFirstSubframe; - move16(); - } - - if ( nSlotsInLastSubframe > 0 ) - { - st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1] = nSlotsInLastSubframe; - move16(); - } - - st_ivas->hTcBuffer->slots_rendered = 0; - move16(); - st_ivas->hTcBuffer->subframes_rendered = 0; - move16(); - - return; -} -#else - -void ivas_jbm_dec_td_renderers_adapt_subframes( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t nMaxSlotsPerSubframe, nSlotsAvailable; - uint16_t nSlotsInLastSubframe, nSlotsInFirstSubframe; - - nMaxSlotsPerSubframe = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) / st_ivas->hTcBuffer->n_samples_granularity; - nSlotsAvailable = st_ivas->hTcBuffer->n_samples_available / st_ivas->hTcBuffer->n_samples_granularity; - st_ivas->hTcBuffer->num_slots = nSlotsAvailable; - st_ivas->hTcBuffer->n_samples_available = nSlotsAvailable * st_ivas->hTcBuffer->n_samples_granularity; - nSlotsInFirstSubframe = nMaxSlotsPerSubframe - st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1]; + st_ivas->hTcBuffer->n_samples_available = i_mult( nSlotsAvailable, st_ivas->hTcBuffer->n_samples_granularity ); + move16(); + nSlotsInFirstSubframe = sub( nMaxSlotsPerSubframe, st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1] ); st_ivas->hTcBuffer->nb_subframes = 0; + move16(); - if ( nSlotsInFirstSubframe > 0 ) + IF( nSlotsInFirstSubframe > 0 ) { st_ivas->hTcBuffer->nb_subframes = 1; - nSlotsAvailable -= nSlotsInFirstSubframe; + move16(); + nSlotsAvailable = sub( nSlotsAvailable, nSlotsInFirstSubframe ); } - st_ivas->hTcBuffer->nb_subframes += (int16_t) ceilf( (float) nSlotsAvailable / (float) nMaxSlotsPerSubframe ); + + s1 = sub( norm_s( nSlotsAvailable ), 1 ); + s2 = norm_s( nMaxSlotsPerSubframe ); + + tmp1 = shl( nSlotsAvailable, s1 ); + tmp2 = shl( nMaxSlotsPerSubframe, s2 ); + + tmp = div_s( tmp1, tmp2 ); + st_ivas->hTcBuffer->nb_subframes = add( st_ivas->hTcBuffer->nb_subframes, ceil_fx16( tmp, sub( 15, sub( s2, s1 ) ) ) ); + move16(); + nSlotsInLastSubframe = nSlotsAvailable % nMaxSlotsPerSubframe; - set_s( st_ivas->hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( st_ivas->hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, st_ivas->hTcBuffer->nb_subframes ); + move16(); + set16_fx( st_ivas->hTcBuffer->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); + set16_fx( st_ivas->hTcBuffer->subframe_nbslots, nMaxSlotsPerSubframe, st_ivas->hTcBuffer->nb_subframes ); if ( nSlotsInFirstSubframe > 0 ) { st_ivas->hTcBuffer->subframe_nbslots[0] = nSlotsInFirstSubframe; + move16(); } if ( nSlotsInLastSubframe > 0 ) { st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1] = nSlotsInLastSubframe; + move16(); } st_ivas->hTcBuffer->slots_rendered = 0; + move16(); st_ivas->hTcBuffer->subframes_rendered = 0; + move16(); return; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_get_tc_buffer_mode() * @@ -6182,7 +3893,6 @@ void ivas_jbm_dec_td_renderers_adapt_subframes( TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) -#ifdef IVAS_FLOAT_FIXED { TC_BUFFER_MODE buffer_mode; buffer_mode = TC_BUFFER_MODE_BUFFER; @@ -6279,86 +3989,6 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( return buffer_mode; } -#else -{ - TC_BUFFER_MODE buffer_mode; - buffer_mode = TC_BUFFER_MODE_BUFFER; - - switch ( st_ivas->renderer_type ) - { - /* all renderers where we are done after TC decoding (might include DMX to mono/stereo */ - case RENDERER_DISABLE: - case RENDERER_MCMASA_MONO_STEREO: - case RENDERER_OSBA_STEREO: - case RENDERER_MONO_DOWNMIX: - buffer_mode = TC_BUFFER_MODE_BUFFER; - break; - case RENDERER_TD_PANNING: - case RENDERER_BINAURAL_OBJECTS_TD: - case RENDERER_BINAURAL_FASTCONV: - case RENDERER_BINAURAL_FASTCONV_ROOM: - case RENDERER_BINAURAL_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC_ROOM: - case RENDERER_STEREO_PARAMETRIC: - case RENDERER_DIRAC: - case RENDERER_PARAM_ISM: - case RENDERER_BINAURAL_MIXER_CONV: - case RENDERER_BINAURAL_MIXER_CONV_ROOM: - case RENDERER_OSBA_AMBI: - case RENDERER_OSBA_LS: - buffer_mode = TC_BUFFER_MODE_RENDERER; - break; - case RENDERER_NON_DIEGETIC_DOWNMIX: - if ( st_ivas->ivas_format == MONO_FORMAT ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - } - else - { - buffer_mode = TC_BUFFER_MODE_RENDERER; - } - break; - case RENDERER_MC_PARAMMC: - if ( st_ivas->hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; /* TCs are already the DMX to mono or stereo */ - } - else - { - buffer_mode = TC_BUFFER_MODE_RENDERER; - } - break; - case RENDERER_MC: - if ( ivas_jbm_dec_get_num_tc_channels( st_ivas ) != st_ivas->hDecoderConfig->nchan_out ) - { - buffer_mode = TC_BUFFER_MODE_RENDERER; - } - break; - case RENDERER_SBA_LINEAR_ENC: - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT && ( st_ivas->renderer_type == RENDERER_MC || st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) && ( st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe ) >= ( st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ) ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - } - else - { - buffer_mode = TC_BUFFER_MODE_RENDERER; - } - break; - case RENDERER_SBA_LINEAR_DEC: - if ( st_ivas->ivas_format == SBA_FORMAT && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - } - else - { - buffer_mode = TC_BUFFER_MODE_RENDERER; - } - break; - } - - return buffer_mode; -} -#endif /*--------------------------------------------------------------------------* @@ -6366,79 +3996,7 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( * * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_jbm_dec_copy_tc_no_tsm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *tc[], /* i : transport channels */ - const int16_t output_frame /* i : output frame size */ -) -{ - int16_t n_ch_full_copy; - int16_t n_ch_cldfb; - int16_t ch_idx; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - - hTcBuffer = st_ivas->hTcBuffer; - hTcBuffer->n_samples_buffered = output_frame; - hTcBuffer->n_samples_available = hTcBuffer->n_samples_buffered; - n_ch_full_copy = min( hTcBuffer->nchan_transport_jbm, hTcBuffer->nchan_buffer_full ); - n_ch_cldfb = hTcBuffer->nchan_transport_jbm - hTcBuffer->nchan_buffer_full; - - /* copy full tcs*/ - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - for ( ch_idx = 0; ch_idx < n_ch_full_copy; ch_idx++ ) - { - mvr2r( tc[ch_idx], st_ivas->hTcBuffer->tc[ch_idx], hTcBuffer->n_samples_buffered ); - } - } - ch_idx = 0; - - /* CLDFB ana for ParamMC/ParamISM */ - if ( n_ch_cldfb > 0 ) - { - float *cldfb_real_buffer; - float *cldfb_imag_buffer; - int16_t cldfb_ch, slot_idx, num_freq_bands; - - cldfb_real_buffer = NULL; - cldfb_imag_buffer = NULL; - num_freq_bands = 0; - - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - cldfb_real_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc; - cldfb_imag_buffer = st_ivas->hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc; - num_freq_bands = st_ivas->hSpatParamRendCom->num_freq_bands; - ivas_ism_param_dec_tc_gain_ajust( st_ivas, output_frame, output_frame / 2, tc ); - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - cldfb_real_buffer = st_ivas->hParamMC->Cldfb_RealBuffer_tc; - cldfb_imag_buffer = st_ivas->hParamMC->Cldfb_ImagBuffer_tc; - num_freq_bands = st_ivas->hParamMC->num_freq_bands; - } - /* CLDFB Analysis*/ - - for ( cldfb_ch = 0; cldfb_ch < n_ch_cldfb; cldfb_ch++, ch_idx++ ) - { - for ( slot_idx = 0; slot_idx < DEFAULT_JBM_CLDFB_TIMESLOTS; slot_idx++ ) - { - cldfbAnalysis_ts_ivas( &( tc[ch_idx][num_freq_bands * slot_idx] ), - &cldfb_real_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], - &cldfb_imag_buffer[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands], - num_freq_bands, st_ivas->cldfbAnaDec[cldfb_ch] ); - } - } - } - hTcBuffer->n_samples_rendered = 0; - hTcBuffer->subframes_rendered = 0; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_jbm_dec_copy_tc_no_tsm_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle Q0 */ Word32 *tc_fx[], /* i : transport channels Q11 */ @@ -6524,7 +4082,6 @@ void ivas_jbm_dec_copy_tc_no_tsm_fx( return; } -#endif /*--------------------------------------------------------------------------* * ivas_jbm_dec_metadata_open() @@ -6534,7 +4091,6 @@ void ivas_jbm_dec_copy_tc_no_tsm_fx( ivas_error ivas_jbm_dec_metadata_open( Decoder_Struct *st_ivas ) -#ifdef IVAS_FLOAT_FIXED { JBM_METADATA_HANDLE hJbmMetadata; IF( ( hJbmMetadata = (JBM_METADATA_HANDLE) malloc( sizeof( JBM_METADATA ) ) ) == NULL ) @@ -6557,25 +4113,6 @@ ivas_error ivas_jbm_dec_metadata_open( return IVAS_ERR_OK; } -#else -{ - JBM_METADATA_HANDLE hJbmMetadata; - if ( ( hJbmMetadata = (JBM_METADATA_HANDLE) malloc( sizeof( JBM_METADATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM metadata handle\n" ) ); - } - hJbmMetadata->sf_write_idx = 0; - hJbmMetadata->sf_md_buffer_length = MASA_JBM_RINGBUFFER_FRAMES * MAX_PARAM_SPATIAL_SUBFRAMES; - - hJbmMetadata->slot_write_idx = 0; - hJbmMetadata->slot_read_idx = 0; - hJbmMetadata->slot_md_buffer_length = MASA_JBM_RINGBUFFER_FRAMES * MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME; - - st_ivas->hJbmMetadata = hJbmMetadata; - - return IVAS_ERR_OK; -} -#endif /*--------------------------------------------------------------------------* @@ -6586,7 +4123,6 @@ ivas_error ivas_jbm_dec_metadata_open( static void ivas_jbm_dec_copy_masa_meta_to_buffer( Decoder_Struct *st_ivas ) -#ifdef IVAS_FLOAT_FIXED { Word16 sf, dir, band; JBM_METADATA_HANDLE hJbmMetadata; @@ -6627,42 +4163,6 @@ static void ivas_jbm_dec_copy_masa_meta_to_buffer( return; } -#else -{ - int16_t sf, dir, band; - JBM_METADATA_HANDLE hJbmMetadata; - MASA_DECODER_EXT_OUT_META *extOutMeta; - int16_t write_idx; - - hJbmMetadata = st_ivas->hJbmMetadata; - extOutMeta = st_ivas->hMasa->data.extOutMeta; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - write_idx = ( hJbmMetadata->sf_write_idx + sf ) % hJbmMetadata->sf_md_buffer_length; - - for ( dir = 0; dir < MASA_MAXIMUM_DIRECTIONS; dir++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - hJbmMetadata->directionIndexBuffer[dir][write_idx][band] = extOutMeta->directionIndex[dir][sf][band]; - hJbmMetadata->directToTotalRatioBuffer[dir][write_idx][band] = extOutMeta->directToTotalRatio[dir][sf][band]; - hJbmMetadata->spreadCoherenceBuffer[dir][write_idx][band] = extOutMeta->spreadCoherence[dir][sf][band]; - } - } - - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - hJbmMetadata->diffuseToTotalRatioBuffer[write_idx][band] = extOutMeta->diffuseToTotalRatio[sf][band]; - hJbmMetadata->surroundCoherenceBuffer[write_idx][band] = extOutMeta->surroundCoherence[sf][band]; - } - - hJbmMetadata->numberOfDirections[write_idx] = extOutMeta->descriptiveMeta.numberOfDirections; - } - - return; -} -#endif /*--------------------------------------------------------------------------* @@ -6670,7 +4170,6 @@ static void ivas_jbm_dec_copy_masa_meta_to_buffer( * * Map input MASA metadata subframes to slots in JBM processing *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_jbm_masa_sf_to_slot_map( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nCldfbTs /* i : number of CLDFB time slots */ @@ -6708,39 +4207,6 @@ static void ivas_jbm_masa_sf_to_slot_map( return; } -#else -static void ivas_jbm_masa_sf_to_slot_map( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nCldfbTs /* i : number of CLDFB time slots */ -) -{ - int16_t sf_to_slot_map[MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME]; - int16_t num_slots_in_subfr; - JBM_METADATA_HANDLE hJbmMetadata; - int16_t slot_idx; - int16_t write_idx, sf_index; - - /* Set values */ - hJbmMetadata = st_ivas->hJbmMetadata; - num_slots_in_subfr = CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES; - - /* Map input subframes to slots */ - ivas_jbm_dec_get_md_map_even_spacing( nCldfbTs, num_slots_in_subfr, 0, MAX_PARAM_SPATIAL_SUBFRAMES, sf_to_slot_map ); - - for ( slot_idx = 0; slot_idx < nCldfbTs; slot_idx++ ) - { - write_idx = ( hJbmMetadata->slot_write_idx + slot_idx ) % hJbmMetadata->slot_md_buffer_length; - sf_index = ( hJbmMetadata->sf_write_idx + sf_to_slot_map[slot_idx] ) % hJbmMetadata->sf_md_buffer_length; - - hJbmMetadata->sf_to_slot_map[write_idx] = sf_index; - } - - hJbmMetadata->sf_write_idx = ( hJbmMetadata->sf_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hJbmMetadata->sf_md_buffer_length; - hJbmMetadata->slot_write_idx = ( hJbmMetadata->slot_write_idx + nCldfbTs ) % hJbmMetadata->slot_md_buffer_length; - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_jbm_masa_sf_to_sf_map() @@ -6751,7 +4217,6 @@ static void ivas_jbm_masa_sf_to_slot_map( void ivas_jbm_masa_sf_to_sf_map( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) -#ifdef IVAS_FLOAT_FIXED { Word16 sf_to_sf_map[MAX_PARAM_SPATIAL_SUBFRAMES]; JBM_METADATA_HANDLE hJbmMetadata; @@ -6825,65 +4290,3 @@ void ivas_jbm_masa_sf_to_sf_map( return; } -#else -{ - int16_t sf_to_sf_map[MAX_PARAM_SPATIAL_SUBFRAMES]; - JBM_METADATA_HANDLE hJbmMetadata; - MASA_DECODER_EXT_OUT_META *extOutMeta; - int16_t slot_read_idx, sf_read_idx; - int16_t sf_idx; - int16_t dir, band; - uint8_t numberOfDirections; - - /* Set values */ - hJbmMetadata = st_ivas->hJbmMetadata; - extOutMeta = st_ivas->hMasa->data.extOutMeta; - - /* Map slots to subframes */ - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - slot_read_idx = ( hJbmMetadata->slot_read_idx + 2 ) % hJbmMetadata->slot_md_buffer_length; /* Take the latter one of the middle slots of the output subframe */ - sf_to_sf_map[sf_idx] = hJbmMetadata->sf_to_slot_map[slot_read_idx]; - hJbmMetadata->slot_read_idx = ( hJbmMetadata->slot_read_idx + CLDFB_SLOTS_PER_SUBFRAME ) % hJbmMetadata->slot_md_buffer_length; - } - - /* Copy mapped metadata to the EXT meta buffer for writing */ - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - sf_read_idx = sf_to_sf_map[sf_idx]; - - for ( dir = 0; dir < MASA_MAXIMUM_DIRECTIONS; dir++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - extOutMeta->directionIndex[dir][sf_idx][band] = hJbmMetadata->directionIndexBuffer[dir][sf_read_idx][band]; - extOutMeta->directToTotalRatio[dir][sf_idx][band] = hJbmMetadata->directToTotalRatioBuffer[dir][sf_read_idx][band]; - extOutMeta->spreadCoherence[dir][sf_idx][band] = hJbmMetadata->spreadCoherenceBuffer[dir][sf_read_idx][band]; - } - } - - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - extOutMeta->diffuseToTotalRatio[sf_idx][band] = hJbmMetadata->diffuseToTotalRatioBuffer[sf_read_idx][band]; - extOutMeta->surroundCoherence[sf_idx][band] = hJbmMetadata->surroundCoherenceBuffer[sf_read_idx][band]; - } - } - - /* Determine the number of directions for the frame to be written */ - numberOfDirections = 0; - for ( sf_idx = 0; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - sf_read_idx = sf_to_sf_map[sf_idx]; - - if ( hJbmMetadata->numberOfDirections[sf_read_idx] == 1 ) - { - numberOfDirections = 1; - break; - } - } - - extOutMeta->descriptiveMeta.numberOfDirections = numberOfDirections; - - return; -} -#endif diff --git a/lib_dec/ivas_lfe_dec.c b/lib_dec/ivas_lfe_dec.c index df9bf4748..a9ed90a8a 100644 --- a/lib_dec/ivas_lfe_dec.c +++ b/lib_dec/ivas_lfe_dec.c @@ -34,443 +34,3 @@ #include #include "options.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -#include "prot.h" -#include "ivas_prot.h" -#include "ivas_rom_com.h" - - -/*------------------------------------------------------------------------------------------* - * Local constants - *------------------------------------------------------------------------------------------*/ - -/* Delay handling of LFE: overall_lfe_delay = max(11.5, BLOCK_OFFSET_MS); */ -#define BLOCK_OFFSET_MS 12 - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_lfe_dec_delay_adjust() - * - * Adjusts the input to be passed to filtering block taking into consideration - * LFE delay calculated during initialization time - *-----------------------------------------------------------------------------------------*/ - -static void ivas_lfe_dec_delay_adjust( - LFE_DEC_HANDLE hLFE, - float *pInbuf, - float output_lfe_ch[] ) -{ - int16_t i, diff, loop_counter; - int16_t fade_len, dct_len, zero_pad_len; - float tmp_buffer[L_FRAME48k]; - - diff = hLFE->lfe_prior_buf_len - hLFE->pWindow_state->fade_len; - loop_counter = diff < 0 ? 0 : diff; - fade_len = hLFE->pWindow_state->fade_len; - dct_len = hLFE->pWindow_state->dct_len; - zero_pad_len = hLFE->pWindow_state->zero_pad_len; - - for ( i = 0; i < loop_counter; i++ ) - { - tmp_buffer[i] = hLFE->prior_out_buffer[i]; - } - - for ( i = 0; i < fade_len; i++ ) - { - tmp_buffer[i + loop_counter] = hLFE->prior_out_buffer[i + loop_counter] + pInbuf[i]; - } - loop_counter += fade_len; - - for ( i = 0; i < fade_len + ( zero_pad_len << 1 ); i++ ) - { - tmp_buffer[i + loop_counter] = pInbuf[i + fade_len]; - } - - for ( i = 0; i < hLFE->lfe_prior_buf_len; i++ ) - { - hLFE->prior_out_buffer[i] = tmp_buffer[i + dct_len]; - } - - for ( i = 0; i < dct_len; i++ ) - { - output_lfe_ch[i] = tmp_buffer[i]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_lfe_dec_windowing() - * - * LFE windowing block, input is passed through Fielder window - *-----------------------------------------------------------------------------------------*/ - -static void ivas_lfe_dec_windowing( - LFE_DEC_HANDLE hLFE, - float *pInbuf ) -{ - int16_t i; - int16_t fade_len; - int16_t zero_pad_len; - const float *pWindow_coeffs; - - fade_len = hLFE->pWindow_state->fade_len; - zero_pad_len = hLFE->pWindow_state->zero_pad_len; - pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; - - for ( i = 0; i < fade_len; i++ ) - { - pInbuf[i] = pInbuf[zero_pad_len + i] * pWindow_coeffs[i]; - } - - for ( i = 0; i < zero_pad_len * 2; i++ ) - { - pInbuf[fade_len + i] = pInbuf[zero_pad_len + fade_len + i]; - } - - for ( i = 0; i < fade_len; i++ ) - { - pInbuf[zero_pad_len * 2 + fade_len + i] = pInbuf[zero_pad_len * 3 + fade_len + i] * pWindow_coeffs[fade_len - i - 1]; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_lfe_dec_dequant() - * - * LDE de-quatization block, calls arithmetic deccoding block inside - *-----------------------------------------------------------------------------------------*/ - -static int16_t ivas_lfe_dec_dequant( - LFE_DEC_HANDLE hLFE, - Decoder_State *st0, - float *pOut_buf, - int16_t *num_dct_pass_bins ) -{ - int16_t shift_bits, i; - int16_t quant_strategy; - int16_t coding_strategy; - int16_t base2_bit_size; - int16_t lfe_bits; - int16_t all_zeros_dct; - int16_t min_shift_bits; - int16_t shift; - int16_t sign_bits[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - int16_t abs_values[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - int16_t values[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - int16_t num_dct_coeffs, num_groups; - - all_zeros_dct = get_next_indice( st0, 1 ); - lfe_bits = st0->next_bit_pos; - shift_bits = IVAS_LFE_SHIFT_BITS; - min_shift_bits = 0; - shift = 0; - - if ( all_zeros_dct == 1 ) - { - for ( i = 0; i < IVAS_LFE_MAX_NUM_DCT_COEFFS; i++ ) - { - pOut_buf[i] = 0.0f; - } - } - else - { - float two_pow_shift_by_4; - Tastat as; - int16_t iii, extra_bits_read; - - extra_bits_read = 0; - quant_strategy = get_next_indice( st0, 1 ); - *num_dct_pass_bins = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy]; - num_dct_coeffs = (int16_t) ( *num_dct_pass_bins * IVAS_LFE_NUM_COEFFS_IN_SUBGRP ); - num_groups = ( num_dct_coeffs / ( 2 * IVAS_LFE_NUM_COEFFS_IN_SUBGRP ) ); - min_shift_bits = ivas_lfe_min_shift_tbl[quant_strategy]; - shift = get_next_indice( st0, shift_bits ) + min_shift_bits * IVAS_LFE_SHIFTS_PER_DOUBLE; - - for ( i = 0; i < num_dct_coeffs; i++ ) - { - sign_bits[i] = get_next_indice( st0, 1 ); - } - - coding_strategy = get_next_indice( st0, 1 ); - - if ( coding_strategy ) - { - for ( iii = 0; iii < num_groups; iii++ ) - { - base2_bit_size = hLFE->lfe_dec_indices_coeffs_tbl[quant_strategy][iii]; - for ( i = 0; i < 4; i++ ) - { - abs_values[iii * 4 + i] = get_next_indice( st0, base2_bit_size ); - } - } - } - else - { - for ( iii = 0; iii < num_groups; iii++ ) - { - extra_bits_read = 0; - ivas_ari_start_decoding_14bits_ext_1_lfe( st0, &as, &extra_bits_read ); - - for ( i = 0; i < 4; i++ ) - { - abs_values[iii * 4 + i] = ivas_ari_decode_14bits_bit_ext_1_lfe( st0, &as, hLFE->cum_freq_models[quant_strategy][iii], &extra_bits_read ); - } - ivas_ari_done_decoding_14bits_ext_1_lfe( st0, extra_bits_read ); - } - } - - for ( i = 0; i < num_dct_coeffs; i++ ) - { - values[i] = abs_values[i]; - if ( sign_bits[i] > 0 ) - { - values[i] = -abs_values[i] - 1; - } - } - - two_pow_shift_by_4 = powf( 2, ( -shift / (float) IVAS_LFE_SHIFTS_PER_DOUBLE ) ); - - for ( i = 0; i < num_groups; i++ ) - { - pOut_buf[2 * i] = values[4 * i] * two_pow_shift_by_4; - pOut_buf[2 * i + 1] = values[4 * i + 1] * two_pow_shift_by_4; - - pOut_buf[2 * i + *num_dct_pass_bins] = values[4 * i + 2] * two_pow_shift_by_4; - pOut_buf[2 * i + *num_dct_pass_bins + 1] = values[4 * i + 3] * two_pow_shift_by_4; - } - } - - lfe_bits = st0->next_bit_pos - lfe_bits; - - return lfe_bits; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_lfe_dec() - * - * LFE channel decoder - *-----------------------------------------------------------------------------------------*/ - -void ivas_lfe_dec( - LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t bfi, /* i : BFI flag */ - float output_lfe_ch[] /* o : output LFE synthesis */ -) -{ - int16_t num_dct_pass_bins; - int16_t i, j, dct_len; - float out[L_FRAME48k]; - float t_audio[L_FRAME48k]; - float lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - - dct_len = hLFE->pWindow_state->dct_len; - num_dct_pass_bins = IVAS_LFE_MAX_NUM_DCT_PASS_BINS; - - if ( bfi == 0 ) - { - ivas_lfe_dec_dequant( hLFE, st0, lfe_dct, &num_dct_pass_bins ); - - set_zero( t_audio, dct_len ); - mvr2r( lfe_dct, t_audio, num_dct_pass_bins ); - ivas_imdct( t_audio, out, dct_len ); - ivas_lfe_dec_windowing( hLFE, out ); - ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch ); - - set_zero( t_audio, dct_len ); - mvr2r( &lfe_dct[num_dct_pass_bins], t_audio, num_dct_pass_bins ); - - ivas_imdct( t_audio, out, dct_len ); - ivas_lfe_dec_windowing( hLFE, out ); - ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch + dct_len ); - - mvr2r( hLFE->prevsynth_buf + L_FRAME_1k6, hLFE->prevsynth_buf, LFE_PLC_BUFLEN - L_FRAME_1k6 ); - - j = 0; - for ( i = 0; i < L_FRAME_1k6; i++ ) - { - hLFE->prevsynth_buf[i + LFE_PLC_BUFLEN - L_FRAME_1k6] = output_lfe_ch[j]; - j += output_frame / L_FRAME_1k6; - } - - hLFE->bfi_count = 0; - } - else - { - /* note: in BFI branch, buffer 't_audio' is in time-domain ('wtda' signal) */ - hLFE->bfi_count++; - ivas_lfe_tdplc( hLFE, hLFE->prevsynth_buf, t_audio, output_frame ); - - ivas_itda( t_audio, out, dct_len ); - ivas_lfe_dec_windowing( hLFE, out ); - ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch ); - - ivas_itda( t_audio + dct_len, out, dct_len ); - ivas_lfe_dec_windowing( hLFE, out ); - ivas_lfe_dec_delay_adjust( hLFE, out, output_lfe_ch + dct_len ); - - mvr2r( hLFE->prevsynth_buf + L_FRAME_1k6, hLFE->prevsynth_buf, LFE_PLC_BUFLEN - L_FRAME_1k6 ); - - j = 0; - for ( i = 0; i < L_FRAME_1k6; i++ ) - { - hLFE->prevsynth_buf[i + LFE_PLC_BUFLEN - L_FRAME_1k6] = output_lfe_ch[j]; - j += output_frame / L_FRAME_1k6; - } - } - - if ( hLFE->filter_state.order > 0 ) - { - /* Low Pass Filter */ - ivas_filter_process( &hLFE->filter_state, output_lfe_ch, output_frame ); - } - - /* add delay to make overall max(block_offset, 11.5) */ - if ( hLFE->lfe_addl_delay > 0 ) - { - delay_signal_float( output_lfe_ch, output_frame, hLFE->lfe_delay_buf, hLFE->lfe_addl_delay ); - } - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_create_lfe_dec() - * - * Create, allocate and initialize IVAS decoder LFE handle - *-------------------------------------------------------------------------*/ - -ivas_error ivas_create_lfe_dec( - LFE_DEC_HANDLE *hLFE_out, /* o : IVAS LFE decoder structure */ - const int32_t output_Fs, /* i : output sampling rate */ - const int32_t binauralization_delay_ns /* i : additional LFE delay to sync with binaural renderer */ -) -{ - float low_pass_delay_dec_out, block_offset_s; - int16_t filt_order, output_frame; - LFE_DEC_HANDLE hLFE; - float lfe_addl_delay_s; - int16_t i, j; - int16_t add_delay_sa; - - low_pass_delay_dec_out = 0; - block_offset_s = 0; - - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - - /*-----------------------------------------------------------------* - * Allocate LFE handle - *-----------------------------------------------------------------*/ - - if ( ( hLFE = (LFE_DEC_HANDLE) malloc( sizeof( LFE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); - } - - /*-----------------------------------------------------------------* - * LFE Window: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); - } - - ivas_lfe_window_init( hLFE->pWindow_state, output_Fs, output_frame ); - - /* Initialization for entropy coding */ - hLFE->cum_freq_models[0][0] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg1; - hLFE->cum_freq_models[0][1] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg2; - hLFE->cum_freq_models[0][2] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg3; - hLFE->cum_freq_models[0][3] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg4; - hLFE->cum_freq_models[1][0] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg1; - hLFE->cum_freq_models[1][1] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg2; - hLFE->cum_freq_models[1][2] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg3; - hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; - - /* delay calculation */ - hLFE->lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; - - block_offset_s = BLOCK_OFFSET_MS * 0.001f; - filt_order = 0; - low_pass_delay_dec_out = 0; - hLFE->filter_state.order = filt_order; - hLFE->lfe_block_delay_s = hLFE->lfe_block_delay_s + low_pass_delay_dec_out; - hLFE->lfe_prior_buf_len = NS2SA( output_Fs, IVAS_LFE_FADE_NS ); - - hLFE->bfi_count = 0; - - lfe_addl_delay_s = block_offset_s - hLFE->lfe_block_delay_s; - lfe_addl_delay_s = max( 0.0f, lfe_addl_delay_s ); - add_delay_sa = (int16_t) roundf( (float) binauralization_delay_ns * output_Fs / 1000000000.f ); - hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ) + add_delay_sa; - hLFE->lfe_block_delay_s += lfe_addl_delay_s + add_delay_sa / output_Fs; - - if ( hLFE->lfe_addl_delay > 0 ) - { - if ( ( hLFE->lfe_delay_buf = (float *) malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE additional delay buffer\n" ) ); - } - set_zero( (float *) hLFE->lfe_delay_buf, hLFE->lfe_addl_delay ); - } - else - { - hLFE->lfe_delay_buf = NULL; - } - - /* Initialization base2 bits for each subgroup for no entropy coding */ - for ( i = 0; i < IVAS_MAX_NUM_QUANT_STRATS; i++ ) - { - for ( j = 0; j < IVAS_MAX_NUM_DCT_COEF_GROUPS; j++ ) - { - hLFE->lfe_dec_indices_coeffs_tbl[i][j] = - (int16_t) ceilf( log2f( (float) ( ivas_lfe_num_ele_in_coder_models[i][j] + 1 ) ) ); - } - } - - *hLFE_out = hLFE; - - return IVAS_ERR_OK; -} - - -/*------------------------------------------------------------------------- - * ivas_lfe_dec_close() - * - * Destroy IVAS decoder LFE handle - *-------------------------------------------------------------------------*/ - -void ivas_lfe_dec_close( - LFE_DEC_HANDLE *hLFE /* i/o: LFE decoder handle */ -) -{ - if ( hLFE == NULL || *hLFE == NULL ) - { - return; - } - - free( ( *hLFE )->pWindow_state ); - ( *hLFE )->pWindow_state = NULL; - - if ( ( *hLFE )->lfe_delay_buf != NULL ) - { - free( ( *hLFE )->lfe_delay_buf ); - ( *hLFE )->lfe_delay_buf = NULL; - } - - free( ( *hLFE ) ); - ( *hLFE ) = NULL; - - return; -} -#endif -#endif diff --git a/lib_dec/ivas_lfe_dec_fx.c b/lib_dec/ivas_lfe_dec_fx.c index c952e23b8..ec58c45c0 100644 --- a/lib_dec/ivas_lfe_dec_fx.c +++ b/lib_dec/ivas_lfe_dec_fx.c @@ -32,7 +32,6 @@ #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "prot.h" #include "prot_fx.h" #include "ivas_prot.h" @@ -571,4 +570,3 @@ void ivas_lfe_dec_close_fx( return; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_lfe_plc.c b/lib_dec/ivas_lfe_plc.c index 96ee0967c..8ae40e2be 100644 --- a/lib_dec/ivas_lfe_plc.c +++ b/lib_dec/ivas_lfe_plc.c @@ -44,295 +44,3 @@ /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - -#define LFE_PLC_DSF ( 48000 / LFE_PLC_FS ) -#define LFE_PLC_LPCORD ( MAX_LP_FILTER_ORDER ) -#define POW_THR ( 1.0e-8f ) -#define LFE_PLC_RECLEN_48K ( ( IVAS_LFE_NUM_COEFFS_IN_SUBGRP + 1 ) * L_FRAME48k / IVAS_LFE_NUM_COEFFS_IN_SUBGRP + LFE_PLC_FDEL ) -#define LFE_PLC_RECLEN ( ( LFE_PLC_RECLEN_48K / LFE_PLC_DSF ) ) -#define LFE_PLC_MUTE_THR ( 10 ) -#define LFE_PLC_BURST_ATT ( powf( powf( 10.0f, -3.0f / 20.0f ), 1.0f / ( LFE_PLC_FS * 20 / 1000 ) ) ) /* attenuate 3dB per frame starting with 10th consecutive loss */ -#define EPS_STOP 1e-5f - -/*---------------------------------------------------------------------* - * lfeplc_lev_dur() - * - * Wiener-Levinson-Durbin algorithm to compute LP parameters from the autocorrelations - * of input signal - *---------------------------------------------------------------------*/ - -/*! r: stability flag */ -static int16_t lfeplc_lev_dur( - float *a_out, /* o : LP coefficients (a[0] = 1.0) */ - const float *r, /* i : vector of autocorrelations */ - const int16_t m /* i : order of LP filter */ -) -{ - int16_t i, j, l; - float buf[TCXLTP_LTP_ORDER]; - float *rc; /* reflection coefficients 0,...,m-1 */ - float s, at, err; - float a[LFE_PLC_LPCORD + 1]; - - set_f( a, 0.f, LFE_PLC_LPCORD + 1 ); - set_f( a_out, 0.f, LFE_PLC_LPCORD + 1 ); - rc = &buf[0]; - a[0] = 1.f; - err = r[0]; - a_out[0] = a[0]; - rc[0] = ( -r[1] ) / r[0]; - s = r[1]; - a[1] = rc[0]; - a_out[1] = a[1]; - - i = 1; - while ( i < m ) - { - for ( j = 1; j <= i / 2; j++ ) - { - l = i - j; - at = a[j] + rc[i - 1] * a[l]; - a[l] += rc[i - 1] * a[j]; - a[j] = at; - } - - a[i] = rc[i - 1]; - err += rc[i - 1] * s; - s = 0.f; - i++; - for ( j = 0; j < i; j++ ) - { - s += r[i - j] * a[j]; - } - rc[i - 1] = ( -s ) / err; - if ( fabsf( rc[i - 1] ) > 0.99945f ) - { - return 1; - } - else - { - for ( j = 0; j <= m; j++ ) - { - a_out[j] = a[j]; - } - } - } - - return 0; -} - - -/*-----------------------------------------------------------------------------------------* - * Function check_stab() - * - * LPC filter stability check applying given sharpening value delta - *-----------------------------------------------------------------------------------------*/ - -static uint16_t check_stab( - const float *a, - const float delta ) -{ - float amod[LFE_PLC_LPCORD], refl[LFE_PLC_LPCORD]; - float fac; - float fac1; - int16_t i; - uint16_t stable; - - fac = 1.0f + delta; - fac1 = fac; - - for ( i = 0; i < LFE_PLC_LPCORD; i++ ) - { - amod[i] = a[i] * fac; - fac *= fac1; - } - - stable = a2rc( amod, refl, LFE_PLC_LPCORD ); - - return stable; -} - - -/*-----------------------------------------------------------------------------------------* - * Function find_max_delta() - * - * Find maximum LPC filter sharpening by iteration to get a filter that is almost instable - *-----------------------------------------------------------------------------------------*/ - - -static float find_max_delta( - float *a ) -{ - float delta; - float eps; - float fac; - uint16_t stable; - - delta = 0.0f; - eps = 0.01f; - fac = 2; - stable = FALSE; - - while ( check_stab( a, eps ) ) - { - - eps *= fac; - stable = TRUE; - } - fac = 0.5f; - - if ( stable ) - { - eps *= fac; - } - - while ( !stable ) - { - eps *= fac; - stable = check_stab( a, eps ); - } - - /* must be stable with current eps */ - delta = eps; - eps *= fac; - - while ( 1 ) - { - delta += eps; - stable = check_stab( a, delta ); - - if ( !stable ) - { - if ( fabsf( eps ) > EPS_STOP ) - { - eps = -fabsf( eps ) * fac; - } - else - { - eps = -fabsf( eps ); - } - } - else - { - if ( fabsf( eps ) < EPS_STOP ) - { - break; - } - eps = fabsf( eps ) * fac; - } - } - - return delta; -} - - -/*-----------------------------------------------------------------------------------------* - * Function recover_samples() - * - * recover lost samples by extrapolation of signal buffer - *-----------------------------------------------------------------------------------------*/ - -static void recover_samples( - const int16_t bfi_count, - float *outbuf, - float *rec_frame ) -{ - int16_t i; - float zeroes[LFE_PLC_RECLEN]; - float delta, fac, att; - float r[LFE_PLC_LPCORD + 1], a[LFE_PLC_LPCORD + 1]; - - autocorr( outbuf, r, LFE_PLC_LPCORD, LFE_PLC_BUFLEN, hamm_lfe_plc, 0, 1, 1 ); - - if ( r[0] < POW_THR * LFE_PLC_BUFLEN ) - { - set_zero( rec_frame, LFE_PLC_RECLEN ); - return; - } - - lfeplc_lev_dur( a, r, LFE_PLC_LPCORD ); - - delta = find_max_delta( a + 1 ); - - fac = 1.0f + delta; - att = 1.0f; - - if ( bfi_count >= LFE_PLC_MUTE_THR ) - { - att = LFE_PLC_BURST_ATT; - fac *= att; - } - - for ( i = 1; i <= LFE_PLC_LPCORD; i++ ) - { - a[i] = a[i] * fac; - fac *= att * ( 1.0f + delta ); - } - - set_zero( zeroes, LFE_PLC_RECLEN ); - - syn_filt( a, LFE_PLC_LPCORD, zeroes, rec_frame, LFE_PLC_RECLEN, outbuf + LFE_PLC_BUFLEN - LFE_PLC_LPCORD, 0 ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_lfe_tdplc() - * - * MDCT interface recover lost samples by extrapolation of signal buffer - *-----------------------------------------------------------------------------------------*/ - -void ivas_lfe_tdplc( - LFE_DEC_HANDLE hLFE, /* i/o: LFE decoder handle */ - float *prevsynth, /* i : previous frame synthesis */ - float *ytda, /* o : output time-domain buffer */ - const int16_t output_frame /* i : output frame length */ -) -{ - float rec_frame_us[LFE_PLC_RECLEN_48K], input_tda[L_FRAME48k]; - float rec_frame[LFE_PLC_RECLEN], mem[2 * LFE_PLC_FDEL / LFE_PLC_DSF]; - int32_t output_Fs; - int16_t i, fade_len, full_len, dct_len, zero_pad_len, plc_fdel, rec_frame_len; - const float *pWindow_coeffs; - - output_Fs = output_frame * FRAMES_PER_SEC; - fade_len = hLFE->pWindow_state->fade_len; - full_len = hLFE->pWindow_state->full_len; - dct_len = hLFE->pWindow_state->dct_len; - zero_pad_len = hLFE->pWindow_state->zero_pad_len; - pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; - - plc_fdel = (int16_t) ( LFE_PLC_FDEL * output_Fs / 48000 ); - rec_frame_len = (int16_t) ( LFE_PLC_RECLEN_48K * output_Fs / 48000 ); - recover_samples( hLFE->bfi_count, prevsynth, rec_frame ); - - set_zero( mem, 2 * LFE_PLC_FDEL / LFE_PLC_DSF ); - - modify_Fs( prevsynth + LFE_PLC_BUFLEN - LFE_PLC_FDEL / LFE_PLC_DSF, LFE_PLC_FDEL / LFE_PLC_DSF, LFE_PLC_FS, rec_frame_us, 48000, mem, 0 ); - modify_Fs( rec_frame, LFE_PLC_RECLEN, LFE_PLC_FS, rec_frame_us, 48000, mem, 0 ); - - /*samples are generated with 48k sampling rate - and then converted to required sampling rate by simple decimation - as signal is already bandlimited*/ - - /*decimation to correct sampling rate*/ - if ( output_Fs != 48000 ) - { - for ( i = 0; i < rec_frame_len; i++ ) - { - rec_frame_us[i] = rec_frame_us[( i * 48000 ) / output_Fs]; - } - } - - for ( i = 0; i < 2; i++ ) - { - ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, output_frame, input_tda, rec_frame_us + plc_fdel, rec_frame_us + plc_fdel + fade_len + i * dct_len ); - ivas_tda( input_tda, ytda + i * dct_len, dct_len ); - } - - return; -} - -#endif diff --git a/lib_dec/ivas_lfe_plc_fx.c b/lib_dec/ivas_lfe_plc_fx.c index 7db91b681..6e3969255 100644 --- a/lib_dec/ivas_lfe_plc_fx.c +++ b/lib_dec/ivas_lfe_plc_fx.c @@ -38,23 +38,20 @@ #include "ivas_rom_com.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#define LFE_PLC_DSF ( 48000 / LFE_PLC_FS ) -#define LFE_PLC_LPCORD ( MAX_LP_FILTER_ORDER ) -#define LFE_PLC_MAXITER ( 10 ) -#define LFE_PLC_RECLEN_48K ( ( IVAS_LFE_NUM_COEFFS_IN_SUBGRP + 1 ) * L_FRAME48k / IVAS_LFE_NUM_COEFFS_IN_SUBGRP + LFE_PLC_FDEL ) -#define LFE_PLC_RECLEN ( ( LFE_PLC_RECLEN_48K / LFE_PLC_DSF ) ) -#define LFE_PLC_MUTE_THR ( 10 ) -#define MAX_LEN_LP 960 -#ifdef IVAS_FLOAT_FIXED +#define LFE_PLC_DSF ( 48000 / LFE_PLC_FS ) +#define LFE_PLC_LPCORD ( MAX_LP_FILTER_ORDER ) +#define LFE_PLC_MAXITER ( 10 ) +#define LFE_PLC_RECLEN_48K ( ( IVAS_LFE_NUM_COEFFS_IN_SUBGRP + 1 ) * L_FRAME48k / IVAS_LFE_NUM_COEFFS_IN_SUBGRP + LFE_PLC_FDEL ) +#define LFE_PLC_RECLEN ( ( LFE_PLC_RECLEN_48K / LFE_PLC_DSF ) ) +#define LFE_PLC_MUTE_THR ( 10 ) +#define MAX_LEN_LP 960 #define POW_THR_Q50 ( 11258999 ) #define EPS_STOP_Q31 ( 21475 ) #define LFE_PLC_BURST_ATT_Q31 ( 2124429696 ) @@ -1040,4 +1037,3 @@ void ivas_lfe_tdplc_fx( return; } -#endif diff --git a/lib_dec/ivas_ls_custom_dec.c b/lib_dec/ivas_ls_custom_dec.c index 19e2c167f..25badc608 100644 --- a/lib_dec/ivas_ls_custom_dec.c +++ b/lib_dec/ivas_ls_custom_dec.c @@ -34,10 +34,8 @@ #include "ivas_prot.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*-----------------------------------------------------------------------* @@ -45,32 +43,6 @@ * * Allocate Custom LS layout handle *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ls_custom_open( - LSSETUP_CUSTOM_HANDLE *hLsSetupCustom /* o : Custom loudspeaker setup handle */ -) -{ - /* Allocate handle */ - if ( ( *hLsSetupCustom = (LSSETUP_CUSTOM_HANDLE) malloc( sizeof( LSSETUP_CUSTOM_STRUCT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Custom LS layout memory\n" ) ); - } - - ( *hLsSetupCustom )->num_spk = -1; - ( *hLsSetupCustom )->is_planar_setup = -1; - - set_zero( ( *hLsSetupCustom )->ls_azimuth, MAX_OUTPUT_CHANNELS ); - set_zero( ( *hLsSetupCustom )->ls_elevation, MAX_OUTPUT_CHANNELS ); - - ( *hLsSetupCustom )->num_lfe = -1; - set_s( ( *hLsSetupCustom )->lfe_idx, -1, MAX_OUTPUT_CHANNELS ); - - ( *hLsSetupCustom )->separate_ch_found = -1; - set_f( ( *hLsSetupCustom )->separate_ch_gains, 0.0f, MAX_OUTPUT_CHANNELS ); - - return IVAS_ERR_OK; -} -#else ivas_error ivas_ls_custom_open_fx( LSSETUP_CUSTOM_HANDLE *hLsSetupCustom /* o : Custom loudspeaker setup handle */ ) @@ -99,7 +71,6 @@ ivas_error ivas_ls_custom_open_fx( set16_fx( ( *hLsSetupCustom )->separate_ch_gains_fx, 0, MAX_OUTPUT_CHANNELS ); return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------------* * ivas_output_init_ls_custom() @@ -107,32 +78,7 @@ ivas_error ivas_ls_custom_open_fx( * Setup an IVAS_OUTPUT_SETUP_HANDLE from a custom loudspeaker setup *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_ls_custom_setup( - IVAS_OUTPUT_SETUP_HANDLE hOutSetup, /* o : IVAS output setup handle */ -#ifdef IVAS_FLOAT_FIXED - LSSETUP_CUSTOM_STRUCT *hLsSetupCustom /* i : Custom loudspeaker setup handle */ // Removed const temporarily. Can be added later. -#else - const LSSETUP_CUSTOM_STRUCT *hLsSetupCustom /* i : Custom loudspeaker setup handle */ // Removed const temporarily. Can be added later. -#endif // IVAS_FLOAT_FIXED -) -{ - hOutSetup->output_config = IVAS_AUDIO_CONFIG_LS_CUSTOM; - hOutSetup->nchan_out_woLFE = hLsSetupCustom->num_spk; - hOutSetup->ls_azimuth = hLsSetupCustom->ls_azimuth; - hOutSetup->ls_elevation = hLsSetupCustom->ls_elevation; - hOutSetup->num_lfe = hLsSetupCustom->num_lfe; - hOutSetup->index_lfe[0] = hLsSetupCustom->lfe_idx[0]; /* IVAS_OUTPUT_SETUP only supports 1 LFE */ - - hOutSetup->is_loudspeaker_setup = TRUE; - hOutSetup->is_planar_setup = (int8_t) hLsSetupCustom->is_planar_setup; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void ivas_ls_custom_setup_fx( IVAS_OUTPUT_SETUP_HANDLE hOutSetup, /* o : IVAS output setup handle */ const LSSETUP_CUSTOM_STRUCT *hLsSetupCustom /* i : Custom loudspeaker setup handle */ @@ -161,7 +107,6 @@ void ivas_ls_custom_setup_fx( return; } -#endif /*-----------------------------------------------------------------------* * ivas_ls_custom_output_init() @@ -169,26 +114,7 @@ void ivas_ls_custom_setup_fx( * Initialize decoder output handles *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ls_custom_output_init( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - if ( st_ivas->hLsSetupCustom == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - st_ivas->hDecoderConfig->nchan_out = st_ivas->hLsSetupCustom->num_spk + st_ivas->hLsSetupCustom->num_lfe; - - ivas_ls_custom_setup( &( st_ivas->hOutSetup ), st_ivas->hLsSetupCustom ); - ivas_ls_custom_setup( &( st_ivas->hIntSetup ), st_ivas->hLsSetupCustom ); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ls_custom_output_init_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -206,4 +132,3 @@ ivas_error ivas_ls_custom_output_init_fx( return IVAS_ERR_OK; } -#endif diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 87f156270..999eae9aa 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -58,31 +58,6 @@ * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void index_16bits( IVAS_QMETADATA_HANDLE hQMetaData, SPHERICAL_GRID_DATA *Sph_Grid16 ); - -static void create_masa_ext_out_meta( MASA_DECODER *hMasa, IVAS_QMETADATA_HANDLE hQMetaData, const int16_t nchan_transport ); - -static void replicate_subframes( IVAS_QMETADATA_HANDLE hQMetaData ); - -static void restore_lowbitrate_masa( IVAS_QMETADATA_HANDLE hQMetaData, const int16_t low_bitrate_mode, const int16_t numCodingBands ); - -static ivas_error init_lfe_synth_data( Decoder_Struct *st_ivas, MASA_DECODER_HANDLE hMasa ); - -static void compute_foa_cov_matrix( float foaCov[FOA_CHANNELS][FOA_CHANNELS], float inCov[FOA_CHANNELS][FOA_CHANNELS], float mixMtx[FOA_CHANNELS][FOA_CHANNELS] ); - -static int16_t decode_lfe_to_total_energy_ratio( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, uint16_t *bitstream, int16_t *index, const int32_t ivas_total_brate ); - -static ivas_error ivas_masa_dec_config( Decoder_Struct *st_ivas ); - -static int16_t ivas_decode_masaism_metadata( IVAS_QMETADATA_HANDLE hQMetaData, MASA_DECODER_HANDLE hMasa, MASA_ISM_DATA_HANDLE hMasaIsmData, const int16_t nchan_ism, uint16_t *bit_stream, int16_t *next_bit_pos, const int16_t idx_separated_object, const int16_t ism_imp, const int16_t dirac_bs_md_write_idx, const int16_t dirac_md_buffer_length ); - -static void decode_index_slice( int16_t index, int16_t *ratio_idx_ism, const int16_t nchan_ism, const int16_t K ); - -static void decode_ism_ratios( uint16_t *bit_stream, int16_t *next_bit_pos, float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const int16_t nchan_ism, const int16_t nbands, const int16_t nblocks, const int16_t idx_separated_object ); - -static void read_ism_ratio_index( int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const int16_t nchan_ism, const int16_t numCodingBands, const int16_t sf, int16_t ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], uint16_t *bit_stream, int16_t *next_bit_pos, float *masa_to_total_energy_ratio, const int16_t idx_sep_obj, int16_t *num_zeros ); -#else static Word16 rint_fx( Word32 num ); static void index_16bits_fx( IVAS_QMETADATA_HANDLE hQMetaData, SPHERICAL_GRID_DATA *Sph_Grid16 ); @@ -108,978 +83,507 @@ static void decode_index_slice_fx( Word16 index, Word16 *ratio_idx_ism, const Wo static void decode_ism_ratios_fx( UWord16 *bit_stream, Word16 *next_bit_pos, Word32 masa_to_total_energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const Word16 nchan_ism, const Word16 nbands, const Word16 nblocks, const Word16 idx_separated_object ); static void read_ism_ratio_index_fx( Word16 ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const Word16 nchan_ism, const Word16 numCodingBands, const Word16 sf, Word16 ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], UWord16 *bit_stream, Word16 *next_bit_pos, const Word32 *masa_to_total_energy_ratio_fx, const Word16 idx_sep_obj, Word16 *num_zeros ); -#endif -#ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* - * ivas_masa_decode() + * ivas_masa_decode_fx() * * MASA metadata decoder *-----------------------------------------------------------------------*/ -ivas_error ivas_masa_decode( +ivas_error ivas_masa_decode_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ Decoder_State *st, /* i/o: decoder state structure with bitstream */ - int16_t *nb_bits_read /* o : number of bits read */ + Word16 *nb_bits_read /* o : number of bits read Q0*/ ) { - uint16_t byteBuffer; - int16_t next_bit_pos_orig; - int32_t masa_brate, ivas_total_brate; + UWord16 byteBuffer; + Word16 next_bit_pos_orig; + Word32 masa_brate, ivas_total_brate; MASA_DECODER_HANDLE hMasa; IVAS_QMETADATA_HANDLE hQMetaData; IVAS_FORMAT ivas_format; - int16_t low_bitrate_mode, tmp_elem_mode; + Word16 low_bitrate_mode, tmp_elem_mode; ivas_error error; - int16_t obj; - int16_t i, ch, ism_imp; - int16_t dirac_bs_md_write_idx; - int32_t masa_total_brate; + Word16 obj; + Word16 i, ch, ism_imp; + Word16 dirac_bs_md_write_idx, tmp; + Word32 masa_total_brate; dirac_bs_md_write_idx = 0; + move16(); ism_imp = 0; + move16(); error = IVAS_ERR_OK; + move16(); ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; + move32(); low_bitrate_mode = -1; /* This means that LBR mode is not used. */ + move16(); - if ( st_ivas->hOutSetup.separateChannelEnabled || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + test(); + test(); + test(); + IF( st_ivas->hOutSetup.separateChannelEnabled || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { masa_brate = st_ivas->hCPE[0]->element_brate; + move32(); } - else + ELSE { masa_brate = ivas_total_brate; + move32(); } hMasa = st_ivas->hMasa; hQMetaData = st_ivas->hQMetaData; ivas_format = st_ivas->ivas_format; + move32(); + + hMasa->data.dir_decode_quality_fx = MAX16B; /* Set to default of max quality */ /* 1.0f in Q15 */ + move16(); - hMasa->data.dir_decode_quality = 1.0f; /* Set to default of max quality */ hQMetaData->is_masa_ivas_format = 1; + move16(); *nb_bits_read = 0; + move16(); + next_bit_pos_orig = st->next_bit_pos; - if ( masa_brate == IVAS_SID_5k2 ) + move16(); + + /* masa_brate / FRAMES_PER_SEC */ + tmp = extract_l( Mpy_32_32( masa_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ); // Q0 + + IF( EQ_32( masa_brate, IVAS_SID_5k2 ) ) { - st->next_bit_pos = (int16_t) ( ( masa_brate / FRAMES_PER_SEC ) - 1 - SID_FORMAT_NBITS ); + st->next_bit_pos = sub( sub( tmp, 1 ), SID_FORMAT_NBITS ); } - else + ELSE { - st->next_bit_pos = (int16_t) ( ( masa_brate / FRAMES_PER_SEC ) - 1 ); + st->next_bit_pos = sub( tmp, 1 ); } + move16(); - if ( !st->bfi && ivas_total_brate > IVAS_SID_5k2 ) + test(); + test(); + test(); + test(); + test(); + IF( st->bfi == 0 && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + test(); + IF( NE_32( ivas_format, MC_FORMAT ) || NE_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - if ( ivas_format != MASA_ISM_FORMAT ) + IF( NE_32( ivas_format, MASA_ISM_FORMAT ) ) { /* number of transport channels is always 2 for MASA_ISM format */ /* the number of MASA transport channels was read in ivas_dec_setup() */ - st->next_bit_pos -= MASA_TRANSP_BITS; - *nb_bits_read += MASA_TRANSP_BITS; + st->next_bit_pos = sub( st->next_bit_pos, MASA_TRANSP_BITS ); + *nb_bits_read = add( *nb_bits_read, MASA_TRANSP_BITS ); + move16(); } - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MODE_NONE ) + test(); + IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) && NE_32( st_ivas->ism_mode, ISM_MODE_NONE ) ) { /* the number of objects was read */ - st->next_bit_pos -= NO_BITS_MASA_ISM_NO_OBJ; - *nb_bits_read += NO_BITS_MASA_ISM_NO_OBJ; + st->next_bit_pos = sub( st->next_bit_pos, NO_BITS_MASA_ISM_NO_OBJ ); + *nb_bits_read = add( *nb_bits_read, NO_BITS_MASA_ISM_NO_OBJ ); + move16(); + move16(); - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { /* read index of separated object */ /* nchan_ism should be > 1*/ byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - st_ivas->hMasaIsmData->idx_separated_ism = 2 * byteBuffer + st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + st_ivas->hMasaIsmData->idx_separated_ism = extract_l( L_add( L_shl( byteBuffer, 1 ), st->bit_stream[( st->next_bit_pos )--] ) ); + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); } - else + ELSE { st_ivas->hMasaIsmData->idx_separated_ism = -1; + move16(); } /* read ISM importance flag (one per object) */ - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { ism_imp = 0; - for ( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) + move16(); + + FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) { byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - ism_imp = ( ism_imp << 1 ) + byteBuffer; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); } st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; + move16(); } - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { ism_imp = 0; - for ( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) + move16(); + FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) { byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - ism_imp = ( ism_imp << 1 ) + byteBuffer; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); + move16(); } st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; + move16(); /* reset */ st_ivas->hIsmMetaData[0]->ism_md_null_flag = 0; + move16(); st_ivas->hIsmMetaData[0]->ism_md_lowrate_flag = 0; - if ( st_ivas->hIsmMetaData[0]->ism_imp == ISM_NO_META ) + move16(); + IF( EQ_16( st_ivas->hIsmMetaData[0]->ism_imp, ISM_NO_META ) ) { /* read flags */ st_ivas->hIsmMetaData[0]->ism_md_null_flag = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read ) += ISM_METADATA_MD_FLAG_BITS; + move16(); + *nb_bits_read = add( *nb_bits_read, ISM_METADATA_MD_FLAG_BITS ); + move16(); st_ivas->hIsmMetaData[0]->ism_md_lowrate_flag = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read ) += ISM_METADATA_INACTIVE_FLAG_BITS; + move16(); + *nb_bits_read = add( *nb_bits_read, ISM_METADATA_INACTIVE_FLAG_BITS ); + move16(); } } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + ELSE IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - for ( ch = 0; ch < st_ivas->nchan_ism; ch++ ) + FOR( ch = 0; ch < st_ivas->nchan_ism; ch++ ) { ism_imp = 0; - for ( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) + move16(); + FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) { byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - ism_imp = ( ism_imp << 1 ) + byteBuffer; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); } st_ivas->hIsmMetaData[ch]->ism_imp = ism_imp; + move16(); /* reset */ st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; + move16(); st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; - if ( st_ivas->hIsmMetaData[ch]->ism_imp == ISM_NO_META ) + move16(); + IF( EQ_16( st_ivas->hIsmMetaData[ch]->ism_imp, ISM_NO_META ) ) { /* read flags */ st_ivas->hIsmMetaData[ch]->ism_md_null_flag = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read ) += ISM_METADATA_MD_FLAG_BITS; + move16(); + *nb_bits_read = add( *nb_bits_read, ISM_METADATA_MD_FLAG_BITS ); + move16(); st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read ) += ISM_METADATA_INACTIVE_FLAG_BITS; + move16(); + *nb_bits_read = add( *nb_bits_read, ISM_METADATA_INACTIVE_FLAG_BITS ); + move16(); } } st_ivas->flag_omasa_brate = 0; - if ( st_ivas->nchan_ism >= 3 && ivas_total_brate == IVAS_128k ) + move16(); + test(); + IF( GE_16( st_ivas->nchan_ism, 3 ) && EQ_32( ivas_total_brate, IVAS_128k ) ) { st_ivas->flag_omasa_brate = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read ) += 1; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); } } } /* read the MASA_ISM_FORMAT bit */ byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - if ( byteBuffer == 1 ) + move16(); + IF( EQ_32( byteBuffer, 1 ) ) { hMasa->config.input_ivas_format = MASA_ISM_FORMAT; } - else + ELSE { hMasa->config.input_ivas_format = MASA_FORMAT; } + move32(); + /* reserved bit */ byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - *nb_bits_read += MASA_HEADER_BITS; + move16(); + *nb_bits_read = add( *nb_bits_read, MASA_HEADER_BITS ); /* read number of directions */ byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - hMasa->config.numberOfDirections = (uint8_t) ( byteBuffer + 1 ); + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + hMasa->config.numberOfDirections = (UWord8) L_add( byteBuffer, 1 ); + move16(); } - else + ELSE { hMasa->config.numberOfDirections = 1; + move16(); } - if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) + test(); + IF( NE_32( ivas_format, MC_FORMAT ) || NE_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { /* read subframe mode */ byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; - hMasa->config.joinedSubframes = (uint8_t) byteBuffer; + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); + hMasa->config.joinedSubframes = (UWord8) byteBuffer; + move16(); } - else + ELSE { hMasa->config.joinedSubframes = FALSE; + move16(); } - if ( st_ivas->mc_mode == MC_MODE_MCMASA ) + IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - *nb_bits_read += decode_lfe_to_total_energy_ratio( hMasa->hMasaLfeSynth, st->bit_stream, &st->next_bit_pos, ivas_total_brate ); + *nb_bits_read = add( *nb_bits_read, decode_lfe_to_total_energy_ratio_fx( hMasa->hMasaLfeSynth, st->bit_stream, &st->next_bit_pos, ivas_total_brate ) ); + move16(); } /* Once we know incoming configuration, we can config decoder further based on bitrate etc. */ - if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + if ( NE_32( ( error = ivas_masa_dec_config_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } /* If we are under metadata bit budget limit and joined subframes is not signalled, then read LBR mode. */ - if ( hMasa->config.max_metadata_bits < MINIMUM_BIT_BUDGET_NORMAL_META && hMasa->config.joinedSubframes == FALSE ) + test(); + IF( LT_32( hMasa->config.max_metadata_bits, MINIMUM_BIT_BUDGET_NORMAL_META ) && EQ_16( hMasa->config.joinedSubframes, FALSE ) ) { /* read low bitrate mode */ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - ( *nb_bits_read )++; + byteBuffer = st->bit_stream[st->next_bit_pos]; + move16(); + st->next_bit_pos = sub( st->next_bit_pos, 1 ); + move16(); + *nb_bits_read = add( *nb_bits_read, 1 ); + move16(); low_bitrate_mode = byteBuffer; + move16(); - if ( low_bitrate_mode == 1 ) + IF( EQ_16( low_bitrate_mode, 1 ) ) { hQMetaData->q_direction[0].cfg.nblocks = 1; + move16(); } - else + ELSE { hQMetaData->q_direction[0].cfg.nbands = 1; + move16(); } } /* Remove already read bits from the bit budget */ - hQMetaData->metadata_max_bits -= *nb_bits_read; + hQMetaData->metadata_max_bits = sub( hQMetaData->metadata_max_bits, *nb_bits_read ); + move16(); - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) { - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) + IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { - if ( st_ivas->hDirAC != NULL ) + IF( st_ivas->hDirAC != NULL ) { - *nb_bits_read += ivas_decode_masaism_metadata( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, - st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx, st_ivas->hSpatParamRendCom->dirac_md_buffer_length ); - - for ( obj = 0; obj <= st_ivas->nchan_ism; obj++ ) + *nb_bits_read = add( *nb_bits_read, ivas_decode_masaism_metadata_fx( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, + st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx, st_ivas->hSpatParamRendCom->dirac_md_buffer_length ) ); + move16(); + FOR( obj = 0; obj <= st_ivas->nchan_ism; obj++ ) { - if ( st_ivas->hMasaIsmData->idx_separated_ism == obj ) + IF( EQ_16( st_ivas->hMasaIsmData->idx_separated_ism, obj ) ) { - int16_t sf; - int16_t meta_write_index; + Word16 sf; + Word16 meta_write_index; - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { - meta_write_index = ( st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx + sf ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; + meta_write_index = add( st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx, sf ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->azimuth_ism[obj][meta_write_index]; + move16(); st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->elevation_ism[obj][meta_write_index]; + move16(); } } } } - else + ELSE { - *nb_bits_read += ivas_decode_masaism_metadata( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, - st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); + *nb_bits_read = add( *nb_bits_read, ivas_decode_masaism_metadata_fx( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, + st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, 0, MAX_PARAM_SPATIAL_SUBFRAMES ) ); + move16(); } } } masa_total_brate = ivas_total_brate; - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) + move32(); + test(); + IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - masa_total_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); + masa_total_brate = calculate_cpe_brate_MASA_ISM_fx( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); } - if ( masa_total_brate >= IVAS_384k ) + IF( GE_32( masa_total_brate, IVAS_384k ) ) { - if ( masa_total_brate >= IVAS_512k ) + IF( GE_32( masa_total_brate, IVAS_512k ) ) { - *nb_bits_read += ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 16, 4, hMasa->config.numCodingBands ); + *nb_bits_read = add( *nb_bits_read, + ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 16, 4, hMasa->config.numCodingBands ) ); + move16(); } - else + ELSE { - *nb_bits_read += ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 11, 3, hMasa->config.numCodingBands ); + *nb_bits_read = add( *nb_bits_read, + ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 11, 3, hMasa->config.numCodingBands ) ); + move16(); } } - else + ELSE { - *nb_bits_read += ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &st->next_bit_pos, 0 ); + *nb_bits_read = add( *nb_bits_read, + ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &st->next_bit_pos, 0 ) ); + move16(); } - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + test(); + IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) && NE_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && NE_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { /* Modify spatial metadata based on the MASA-to-total energy ratios */ - ivas_omasa_modify_masa_energy_ratios( hQMetaData, st_ivas->hMasaIsmData->masa_to_total_energy_ratio ); + ivas_omasa_modify_masa_energy_ratios_fx( hQMetaData, st_ivas->hMasaIsmData->masa_to_total_energy_ratio_fx ); } /* Get direction decoding quality. EC 1 and 2 are handled by the default value. */ - if ( hQMetaData->ec_flag == 2 ) + if ( EQ_16( hQMetaData->ec_flag, 2 ) ) { - hMasa->data.dir_decode_quality = hQMetaData->dir_comp_ratio; + hMasa->data.dir_decode_quality_fx = hQMetaData->dir_comp_ratio_fx; /* Q15 */ + move16(); } hMasa->config.coherencePresent = !hQMetaData->all_coherence_zero; + move16(); - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) + IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) { - index_16bits( hQMetaData, hMasa->data.sph_grid16 ); + index_16bits_fx( hQMetaData, hMasa->data.sph_grid16 ); } /* If LBR mode is not disabled, then we restore metadata to 5 bands and 4 subframes based on the LBR mode. */ - if ( low_bitrate_mode != -1 ) + IF( NE_16( low_bitrate_mode, -1 ) ) { - restore_lowbitrate_masa( hQMetaData, low_bitrate_mode, hMasa->config.numCodingBands ); + restore_lowbitrate_masa_fx( hQMetaData, low_bitrate_mode, hMasa->config.numCodingBands ); } - else if ( hMasa->config.joinedSubframes == TRUE ) + ELSE IF( EQ_16( hMasa->config.joinedSubframes, TRUE ) ) { - replicate_subframes( hQMetaData ); + replicate_subframes_fx( hQMetaData ); } } - else if ( !st->bfi && ivas_format == MASA_FORMAT && ivas_total_brate == IVAS_SID_5k2 ) + ELSE IF( st->bfi == 0 && EQ_32( ivas_format, MASA_FORMAT ) && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - if ( hQMetaData->q_direction == NULL ) + IF( hQMetaData->q_direction == NULL ) { /* replicate ivas_masa_dec_config() in case that first good received frame is SID frame */ - if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + if ( NE_32( ( error = ivas_masa_dec_config_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } - ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, st_ivas->ivas_format, st_ivas->ism_mode, 0 ); + ivas_masa_set_elements_fx( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, st_ivas->ivas_format, st_ivas->ism_mode, 0 ); hQMetaData->metadata_max_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC; + move16(); - if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 5, 1, 0 ) ) != IVAS_ERR_OK ) + if ( NE_32( ( error = ivas_qmetadata_allocate_memory_fx( hQMetaData, 5, 1, 0 ) ), IVAS_ERR_OK ) ) { return error; } hQMetaData->numTwoDirBands = hMasa->config.numTwoDirBands; + move16(); hQMetaData->useLowerRes = 0; + move16(); hQMetaData->q_direction->cfg.nbands = 5; + move16(); hQMetaData->q_direction->cfg.nblocks = 4; + move16(); - if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) + test(); + IF( EQ_32( ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) { - hQMetaData->q_direction->cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); + hQMetaData->q_direction->cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ); } - else + ELSE { hQMetaData->q_direction->cfg.mc_ls_setup = MC_LS_SETUP_INVALID; } + move16(); } tmp_elem_mode = -1; - *nb_bits_read += ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format ); - if ( st_ivas->nchan_transport == 2 ) + move16(); + + *nb_bits_read = add( *nb_bits_read, + ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format ) ); + move16(); + + IF( EQ_16( st_ivas->nchan_transport, 2 ) ) { assert( st_ivas->nCPE > 0 ); st_ivas->hCPE[0]->element_mode = tmp_elem_mode; + move16(); } - *nb_bits_read += SID_FORMAT_NBITS; + *nb_bits_read = add( *nb_bits_read, SID_FORMAT_NBITS ); + move16(); } - else if ( !st->bfi && ivas_format == MASA_FORMAT && ivas_total_brate == FRAME_NO_DATA ) + ELSE IF( st->bfi == 0 && EQ_32( ivas_format, MASA_FORMAT ) && EQ_32( ivas_total_brate, FRAME_NO_DATA ) ) { - if ( hQMetaData->q_direction == NULL ) + IF( hQMetaData->q_direction == NULL ) { - if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) + IF( ( error = ivas_masa_dec_config_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } } } - if ( st_ivas->hDirAC != NULL ) + IF( st_ivas->hDirAC != NULL ) { dirac_bs_md_write_idx = st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx; /* Store the write-index for this frame */ - ivas_qmetadata_to_dirac( hQMetaData, st_ivas->hDirAC, hMasa, st_ivas->hSpatParamRendCom, ivas_total_brate, ivas_format, 0, 0 ); + move16(); + + ivas_qmetadata_to_dirac_fx( hQMetaData, st_ivas->hDirAC, hMasa, st_ivas->hSpatParamRendCom, ivas_total_brate, ivas_format, 0, 0 ); } - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) + IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) { - if ( hQMetaData->q_direction == NULL ) - { - if ( ( error = ivas_masa_dec_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->hDirAC != NULL ) - { - int16_t b; - int16_t block; - int16_t meta_write_index; - - for ( i = 0; i < st_ivas->hSpatParamRendCom->numIsmDirections; i++ ) - { - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; - - for ( b = 0; b < st_ivas->hSpatParamRendCom->num_freq_bands; b++ ) - { - st_ivas->hSpatParamRendCom->diffuseness_vector[meta_write_index][b] -= st_ivas->hMasaIsmData->energy_ratio_ism[i][meta_write_index][b]; - } - } - } - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; - - for ( b = 0; b < st_ivas->hSpatParamRendCom->num_freq_bands; b++ ) - { - st_ivas->hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = max( 0.0f, st_ivas->hSpatParamRendCom->diffuseness_vector[meta_write_index][b] ); - } - } - } - } - - st->next_bit_pos = next_bit_pos_orig; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - int32_t cpe_brate; - cpe_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); - - if ( st_ivas->nCPE == 1 && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = cpe_brate < MASA_STEREO_MIN_BITRATE ? 1 : 0; - - if ( ivas_total_brate <= IVAS_SID_5k2 ) - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 0; - } - } - } - else - { - if ( ivas_format == MASA_FORMAT && st_ivas->nCPE == 1 && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = ivas_total_brate < MASA_STEREO_MIN_BITRATE ? 1 : 0; - - if ( ivas_total_brate <= IVAS_SID_5k2 ) - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 0; - } - } - } - - if ( ivas_format == MASA_FORMAT && st_ivas->nCPE == 1 ) - { - st_ivas->hCPE[0]->hCoreCoder[0]->masa_sid_format = 0; - - if ( st_ivas->hDecoderConfig->last_ivas_total_brate <= IVAS_SID_5k2 ) - { - st_ivas->hCPE[0]->hCoreCoder[0]->masa_sid_format = 1; - - if ( ivas_total_brate >= IVAS_SID_5k2 ) - { - st_ivas->hCPE[0]->element_brate = ivas_total_brate; - } - } - } - - if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - create_masa_ext_out_meta( hMasa, hQMetaData, st_ivas->nchan_transport ); - } - - return error /* *nb_bits_read*/; -} -#else -/*-----------------------------------------------------------------------* - * ivas_masa_decode_fx() - * - * MASA metadata decoder - *-----------------------------------------------------------------------*/ - -ivas_error ivas_masa_decode_fx( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ - Decoder_State *st, /* i/o: decoder state structure with bitstream */ - Word16 *nb_bits_read /* o : number of bits read Q0*/ -) -{ - UWord16 byteBuffer; - Word16 next_bit_pos_orig; - Word32 masa_brate, ivas_total_brate; - MASA_DECODER_HANDLE hMasa; - IVAS_QMETADATA_HANDLE hQMetaData; - IVAS_FORMAT ivas_format; - Word16 low_bitrate_mode, tmp_elem_mode; - ivas_error error; - Word16 obj; - Word16 i, ch, ism_imp; - Word16 dirac_bs_md_write_idx, tmp; - Word32 masa_total_brate; - - dirac_bs_md_write_idx = 0; - move16(); - ism_imp = 0; - move16(); - - error = IVAS_ERR_OK; - move16(); - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - move32(); - - low_bitrate_mode = -1; /* This means that LBR mode is not used. */ - move16(); - - test(); - test(); - test(); - IF( st_ivas->hOutSetup.separateChannelEnabled || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - masa_brate = st_ivas->hCPE[0]->element_brate; - move32(); - } - ELSE - { - masa_brate = ivas_total_brate; - move32(); - } - - hMasa = st_ivas->hMasa; - hQMetaData = st_ivas->hQMetaData; - ivas_format = st_ivas->ivas_format; - move32(); - - hMasa->data.dir_decode_quality_fx = MAX16B; /* Set to default of max quality */ /* 1.0f in Q15 */ - move16(); - - hQMetaData->is_masa_ivas_format = 1; - move16(); - - *nb_bits_read = 0; - move16(); - - next_bit_pos_orig = st->next_bit_pos; - move16(); - - /* masa_brate / FRAMES_PER_SEC */ - tmp = extract_l( Mpy_32_32( masa_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ); // Q0 - - IF( EQ_32( masa_brate, IVAS_SID_5k2 ) ) - { - st->next_bit_pos = sub( sub( tmp, 1 ), SID_FORMAT_NBITS ); - } - ELSE - { - st->next_bit_pos = sub( tmp, 1 ); - } - move16(); - - test(); - test(); - test(); - test(); - test(); - IF( st->bfi == 0 && GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) - { - test(); - IF( NE_32( ivas_format, MC_FORMAT ) || NE_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - IF( NE_32( ivas_format, MASA_ISM_FORMAT ) ) - { - /* number of transport channels is always 2 for MASA_ISM format */ - /* the number of MASA transport channels was read in ivas_dec_setup() */ - st->next_bit_pos = sub( st->next_bit_pos, MASA_TRANSP_BITS ); - *nb_bits_read = add( *nb_bits_read, MASA_TRANSP_BITS ); - move16(); - } - - test(); - IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) && NE_32( st_ivas->ism_mode, ISM_MODE_NONE ) ) - { - /* the number of objects was read */ - st->next_bit_pos = sub( st->next_bit_pos, NO_BITS_MASA_ISM_NO_OBJ ); - *nb_bits_read = add( *nb_bits_read, NO_BITS_MASA_ISM_NO_OBJ ); - move16(); - move16(); - - IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) - { - /* read index of separated object */ - /* nchan_ism should be > 1*/ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - st_ivas->hMasaIsmData->idx_separated_ism = extract_l( L_add( L_shl( byteBuffer, 1 ), st->bit_stream[( st->next_bit_pos )--] ) ); - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - } - ELSE - { - st_ivas->hMasaIsmData->idx_separated_ism = -1; - move16(); - } - - /* read ISM importance flag (one per object) */ - IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) - { - ism_imp = 0; - move16(); - - FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) - { - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); - } - st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; - move16(); - } - - IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - ism_imp = 0; - move16(); - FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) - { - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); - move16(); - } - st_ivas->hIsmMetaData[0]->ism_imp = ism_imp; - move16(); - - /* reset */ - st_ivas->hIsmMetaData[0]->ism_md_null_flag = 0; - move16(); - st_ivas->hIsmMetaData[0]->ism_md_lowrate_flag = 0; - move16(); - IF( EQ_16( st_ivas->hIsmMetaData[0]->ism_imp, ISM_NO_META ) ) - { - /* read flags */ - st_ivas->hIsmMetaData[0]->ism_md_null_flag = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, ISM_METADATA_MD_FLAG_BITS ); - move16(); - st_ivas->hIsmMetaData[0]->ism_md_lowrate_flag = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, ISM_METADATA_INACTIVE_FLAG_BITS ); - move16(); - } - } - ELSE IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - FOR( ch = 0; ch < st_ivas->nchan_ism; ch++ ) - { - ism_imp = 0; - move16(); - FOR( i = 0; i < ISM_METADATA_FLAG_BITS; i++ ) - { - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - ism_imp = add( shl( ism_imp, 1 ), (Word16) byteBuffer ); - } - st_ivas->hIsmMetaData[ch]->ism_imp = ism_imp; - move16(); - - /* reset */ - st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; - move16(); - st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; - move16(); - IF( EQ_16( st_ivas->hIsmMetaData[ch]->ism_imp, ISM_NO_META ) ) - { - /* read flags */ - st_ivas->hIsmMetaData[ch]->ism_md_null_flag = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, ISM_METADATA_MD_FLAG_BITS ); - move16(); - st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, ISM_METADATA_INACTIVE_FLAG_BITS ); - move16(); - } - } - st_ivas->flag_omasa_brate = 0; - move16(); - test(); - IF( GE_16( st_ivas->nchan_ism, 3 ) && EQ_32( ivas_total_brate, IVAS_128k ) ) - { - st_ivas->flag_omasa_brate = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - } - } - } - - /* read the MASA_ISM_FORMAT bit */ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - IF( EQ_32( byteBuffer, 1 ) ) - { - hMasa->config.input_ivas_format = MASA_ISM_FORMAT; - } - ELSE - { - hMasa->config.input_ivas_format = MASA_FORMAT; - } - move32(); - - /* reserved bit */ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, MASA_HEADER_BITS ); - - /* read number of directions */ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - hMasa->config.numberOfDirections = (UWord8) L_add( byteBuffer, 1 ); - move16(); - } - ELSE - { - hMasa->config.numberOfDirections = 1; - move16(); - } - - test(); - IF( NE_32( ivas_format, MC_FORMAT ) || NE_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - /* read subframe mode */ - byteBuffer = st->bit_stream[( st->next_bit_pos )--]; - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - hMasa->config.joinedSubframes = (UWord8) byteBuffer; - move16(); - } - ELSE - { - hMasa->config.joinedSubframes = FALSE; - move16(); - } - - IF( EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - *nb_bits_read = add( *nb_bits_read, decode_lfe_to_total_energy_ratio_fx( hMasa->hMasaLfeSynth, st->bit_stream, &st->next_bit_pos, ivas_total_brate ) ); - move16(); - } - - /* Once we know incoming configuration, we can config decoder further based on bitrate etc. */ - if ( NE_32( ( error = ivas_masa_dec_config_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* If we are under metadata bit budget limit and joined subframes is not signalled, then read LBR mode. */ - test(); - IF( LT_32( hMasa->config.max_metadata_bits, MINIMUM_BIT_BUDGET_NORMAL_META ) && EQ_16( hMasa->config.joinedSubframes, FALSE ) ) - { - /* read low bitrate mode */ - byteBuffer = st->bit_stream[st->next_bit_pos]; - move16(); - st->next_bit_pos = sub( st->next_bit_pos, 1 ); - move16(); - *nb_bits_read = add( *nb_bits_read, 1 ); - move16(); - low_bitrate_mode = byteBuffer; - move16(); - - IF( EQ_16( low_bitrate_mode, 1 ) ) - { - hQMetaData->q_direction[0].cfg.nblocks = 1; - move16(); - } - ELSE - { - hQMetaData->q_direction[0].cfg.nbands = 1; - move16(); - } - } - - /* Remove already read bits from the bit budget */ - hQMetaData->metadata_max_bits = sub( hQMetaData->metadata_max_bits, *nb_bits_read ); - move16(); - - IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) - { - IF( st_ivas->hDirAC != NULL ) - { - *nb_bits_read = add( *nb_bits_read, ivas_decode_masaism_metadata_fx( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, - st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx, st_ivas->hSpatParamRendCom->dirac_md_buffer_length ) ); - move16(); - FOR( obj = 0; obj <= st_ivas->nchan_ism; obj++ ) - { - IF( EQ_16( st_ivas->hMasaIsmData->idx_separated_ism, obj ) ) - { - Word16 sf; - Word16 meta_write_index; - - FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - meta_write_index = add( st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx, sf ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; - st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->azimuth_ism[obj][meta_write_index]; - move16(); - st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = st_ivas->hMasaIsmData->elevation_ism[obj][meta_write_index]; - move16(); - } - } - } - } - ELSE - { - *nb_bits_read = add( *nb_bits_read, ivas_decode_masaism_metadata_fx( hQMetaData, st_ivas->hMasa, st_ivas->hMasaIsmData, st_ivas->nchan_ism, st->bit_stream, &st->next_bit_pos, - st_ivas->hMasaIsmData->idx_separated_ism, ism_imp, 0, MAX_PARAM_SPATIAL_SUBFRAMES ) ); - move16(); - } - } - } - - masa_total_brate = ivas_total_brate; - move32(); - test(); - IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - masa_total_brate = calculate_cpe_brate_MASA_ISM_fx( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); - } - - IF( GE_32( masa_total_brate, IVAS_384k ) ) - { - IF( GE_32( masa_total_brate, IVAS_512k ) ) - { - *nb_bits_read = add( *nb_bits_read, - ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 16, 4, hMasa->config.numCodingBands ) ); - move16(); - } - ELSE - { - *nb_bits_read = add( *nb_bits_read, - ivas_qmetadata_dec_decode_hr_384_512( hQMetaData, st->bit_stream, &st->next_bit_pos, hMasa->data.sph_grid16, 11, 3, hMasa->config.numCodingBands ) ); - move16(); - } - } - ELSE - { - *nb_bits_read = add( *nb_bits_read, - ivas_qmetadata_dec_decode( hQMetaData, st->bit_stream, &st->next_bit_pos, 0 ) ); - move16(); - } - - test(); - test(); - IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) && NE_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) && NE_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - /* Modify spatial metadata based on the MASA-to-total energy ratios */ - ivas_omasa_modify_masa_energy_ratios_fx( hQMetaData, st_ivas->hMasaIsmData->masa_to_total_energy_ratio_fx ); - } - - /* Get direction decoding quality. EC 1 and 2 are handled by the default value. */ - if ( EQ_16( hQMetaData->ec_flag, 2 ) ) - { - hMasa->data.dir_decode_quality_fx = hQMetaData->dir_comp_ratio_fx; /* Q15 */ - move16(); - } - - hMasa->config.coherencePresent = !hQMetaData->all_coherence_zero; - move16(); - - IF( EQ_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_EXTERNAL ) ) - { - index_16bits_fx( hQMetaData, hMasa->data.sph_grid16 ); - } - - /* If LBR mode is not disabled, then we restore metadata to 5 bands and 4 subframes based on the LBR mode. */ - IF( NE_16( low_bitrate_mode, -1 ) ) - { - restore_lowbitrate_masa_fx( hQMetaData, low_bitrate_mode, hMasa->config.numCodingBands ); - } - ELSE IF( EQ_16( hMasa->config.joinedSubframes, TRUE ) ) - { - replicate_subframes_fx( hQMetaData ); - } - } - ELSE IF( st->bfi == 0 && EQ_32( ivas_format, MASA_FORMAT ) && EQ_32( ivas_total_brate, IVAS_SID_5k2 ) ) - { - IF( hQMetaData->q_direction == NULL ) - { - /* replicate ivas_masa_dec_config() in case that first good received frame is SID frame */ - if ( NE_32( ( error = ivas_masa_dec_config_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - ivas_masa_set_elements_fx( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, st_ivas->ivas_format, st_ivas->ism_mode, 0 ); - - hQMetaData->metadata_max_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC; - move16(); - - if ( NE_32( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 5, 1, 0 ) ), IVAS_ERR_OK ) ) - { - return error; - } - - hQMetaData->numTwoDirBands = hMasa->config.numTwoDirBands; - move16(); - hQMetaData->useLowerRes = 0; - move16(); - - hQMetaData->q_direction->cfg.nbands = 5; - move16(); - hQMetaData->q_direction->cfg.nblocks = 4; - move16(); - - test(); - IF( EQ_32( ivas_format, MC_FORMAT ) && EQ_32( st_ivas->mc_mode, MC_MODE_MCMASA ) ) - { - hQMetaData->q_direction->cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ); - } - ELSE - { - hQMetaData->q_direction->cfg.mc_ls_setup = MC_LS_SETUP_INVALID; - } - move16(); - } - - tmp_elem_mode = -1; - move16(); - - *nb_bits_read = add( *nb_bits_read, - ivas_qmetadata_dec_sid_decode( hQMetaData, st->bit_stream, &( st->next_bit_pos ), st_ivas->nchan_transport, &tmp_elem_mode, ivas_format ) ); - move16(); - - IF( EQ_16( st_ivas->nchan_transport, 2 ) ) - { - assert( st_ivas->nCPE > 0 ); - st_ivas->hCPE[0]->element_mode = tmp_elem_mode; - move16(); - } - *nb_bits_read = add( *nb_bits_read, SID_FORMAT_NBITS ); - move16(); - } - ELSE IF( st->bfi == 0 && EQ_32( ivas_format, MASA_FORMAT ) && EQ_32( ivas_total_brate, FRAME_NO_DATA ) ) - { - IF( hQMetaData->q_direction == NULL ) - { - IF( ( error = ivas_masa_dec_config_fx( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - IF( st_ivas->hDirAC != NULL ) - { - dirac_bs_md_write_idx = st_ivas->hSpatParamRendCom->dirac_bs_md_write_idx; /* Store the write-index for this frame */ - move16(); - - ivas_qmetadata_to_dirac_fx( hQMetaData, st_ivas->hDirAC, hMasa, st_ivas->hSpatParamRendCom, ivas_total_brate, ivas_format, 0, 0 ); - } - - IF( EQ_32( st_ivas->ivas_format, MASA_ISM_FORMAT ) ) - { - IF( hQMetaData->q_direction == NULL ) + IF( hQMetaData->q_direction == NULL ) { if ( NE_32( ( error = ivas_masa_dec_config_fx( st_ivas ) ), IVAS_ERR_OK ) ) { @@ -1205,7 +709,6 @@ ivas_error ivas_masa_decode_fx( return error /* *nb_bits_read*/; } -#endif /*-------------------------------------------------------------------* @@ -1214,109 +717,6 @@ ivas_error ivas_masa_decode_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_masa_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - MASA_DECODER_HANDLE hMasa; - ivas_error error; - int16_t i; - int32_t ism_total_brate; - - error = IVAS_ERR_OK; - - if ( ( hMasa = (MASA_DECODER_HANDLE) malloc( sizeof( MASA_DECODER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - ism_total_brate = 0; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( i = 0; i < st_ivas->nSCE; i++ ) - { - ism_total_brate += st_ivas->hSCE[i]->element_brate; - } - } - - ivas_masa_set_elements( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, st_ivas->ivas_format, st_ivas->ism_mode, ism_total_brate ); - - mvs2s( DirAC_block_grouping, hMasa->config.block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - mvs2s( MASA_band_grouping_24, hMasa->config.band_grouping, MASA_FREQUENCY_BANDS + 1 ); - hMasa->config.numberOfDirections = 1; - hMasa->config.joinedSubframes = FALSE; - - /* Create spherical grid only for external output */ - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - if ( ( hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - generate_gridEq( hMasa->data.sph_grid16 ); - if ( ( hMasa->data.extOutMeta = (MASA_DECODER_EXT_OUT_META *) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - } - else - { - hMasa->data.sph_grid16 = NULL; - hMasa->data.extOutMeta = NULL; - } - - if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - error = init_lfe_synth_data( st_ivas, hMasa ); - } - else - { - hMasa->hMasaLfeSynth = NULL; - } - - st_ivas->hMasa = hMasa; - - /* allocate transport channels*/ - if ( st_ivas->hTcBuffer == NULL && st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - int16_t nchan_to_allocate, nchan_transport; - TC_BUFFER_MODE buffer_mode; - - buffer_mode = TC_BUFFER_MODE_RENDERER; - if ( st_ivas->mc_mode == MC_MODE_MCMASA && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - } - - nchan_transport = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - nchan_to_allocate = nchan_transport; - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - nchan_transport = 1; - nchan_to_allocate = 1; - } - else if ( st_ivas->nchan_transport == 1 && ( st_ivas->renderer_type == RENDERER_DIRAC ) ) - { - /* addtl channel for CNG */ - nchan_to_allocate++; - } - - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, buffer_mode, nchan_transport, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#else ivas_error ivas_masa_dec_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -1426,91 +826,31 @@ ivas_error ivas_masa_dec_open_fx( { nchan_transport = 1; move16(); - nchan_to_allocate = 1; - move16(); - } - ELSE IF( EQ_16( st_ivas->nchan_transport, 1 ) && EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) - { - /* addtl channel for CNG */ - nchan_to_allocate = add( nchan_to_allocate, 1 ); - } - - IF( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, buffer_mode, nchan_transport, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#endif - - -/*-----------------------------------------------------------------------* - * ivas_masa_dec_close() - * - * close MASA decoder - *-----------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_dec_close( - MASA_DECODER_HANDLE *hMasa_out /* i/o: MASA metadata structure */ -) -{ - MASA_DECODER_HANDLE hMasa; - - if ( hMasa_out == NULL || *hMasa_out == NULL ) - { - return; - } - - hMasa = *hMasa_out; - - /* Free spherical grid memory if in use */ - if ( hMasa->data.sph_grid16 != NULL ) - { - free( hMasa->data.sph_grid16 ); - hMasa->data.sph_grid16 = NULL; - } - - if ( hMasa->data.extOutMeta != NULL ) - { - free( hMasa->data.extOutMeta ); - hMasa->data.extOutMeta = NULL; - } - - if ( hMasa->hMasaLfeSynth != NULL ) - { - if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer != NULL ) - { - free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer ); - hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; - } - if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 != NULL ) - { - free( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 ); - hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; + nchan_to_allocate = 1; + move16(); } - if ( hMasa->hMasaLfeSynth->delayBuffer_syncLp != NULL ) + ELSE IF( EQ_16( st_ivas->nchan_transport, 1 ) && EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) ) { - free( hMasa->hMasaLfeSynth->delayBuffer_syncLp ); - hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; + /* addtl channel for CNG */ + nchan_to_allocate = add( nchan_to_allocate, 1 ); } - if ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC != NULL ) + + IF( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, buffer_mode, nchan_transport, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) { - free( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC ); - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL; + return error; } - free( hMasa->hMasaLfeSynth ); - hMasa->hMasaLfeSynth = NULL; } - free( *hMasa_out ); - *hMasa_out = NULL; - - return; + return error; } -#else + + +/*-----------------------------------------------------------------------* + * ivas_masa_dec_close() + * + * close MASA decoder + *-----------------------------------------------------------------------*/ + void ivas_masa_dec_close_fx( MASA_DECODER_HANDLE *hMasa_out /* i/o: MASA metadata structure */ ) @@ -1569,7 +909,6 @@ void ivas_masa_dec_close_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -1578,107 +917,6 @@ void ivas_masa_dec_close_fx( * Frame-by-frame configuration of MASA decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error ivas_masa_dec_config( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t i; - MASA_DECODER_HANDLE hMasa; - uint8_t maxBand; - int16_t maxBin; - ivas_error error; - int32_t ivas_total_brate; - int32_t ism_total_brate; - error = IVAS_ERR_OK; - hMasa = st_ivas->hMasa; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - ism_total_brate = 0; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( i = 0; i < st_ivas->nSCE; i++ ) - { - ism_total_brate += st_ivas->hSCE[i]->element_brate; - } - } - - ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &st_ivas->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, st_ivas->ivas_format, st_ivas->ism_mode, ism_total_brate ); - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); - } - else - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); - } - - if ( ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) && st_ivas->hDecoderConfig->ivas_total_brate == IVAS_512k ) - { - hMasa->config.mergeRatiosOverSubframes = 0; - - /* initialize spherical grid */ - if ( hMasa->data.sph_grid16 == NULL ) - { - if ( ( hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA data handle\n" ) ); - } - generate_gridEq( hMasa->data.sph_grid16 ); - } - } - st_ivas->hQMetaData->metadata_max_bits = hMasa->config.max_metadata_bits; - st_ivas->hQMetaData->bandMap = hMasa->data.band_mapping; - st_ivas->hQMetaData->nchan_transport = st_ivas->nchan_transport; - - if ( ( error = ivas_qmetadata_allocate_memory( st_ivas->hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->hQMetaData->numTwoDirBands = st_ivas->hMasa->config.numTwoDirBands; - st_ivas->hQMetaData->useLowerRes = 0; - - for ( i = 0; i < st_ivas->hQMetaData->no_directions; i++ ) - { - st_ivas->hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; - st_ivas->hQMetaData->q_direction[i].cfg.nblocks = hMasa->config.joinedSubframes == TRUE ? 1 : 4; - - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) - { - st_ivas->hQMetaData->q_direction[i].cfg.mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); - } - else - { - st_ivas->hQMetaData->q_direction[i].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; - } - } - - ivas_set_qmetadata_maxbit_req( st_ivas->hQMetaData, st_ivas->ivas_format ); - - /* Find maximum band usable */ - maxBin = (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH ); - maxBand = 0; - while ( maxBand <= MASA_FREQUENCY_BANDS && MASA_band_grouping_24[maxBand] <= maxBin ) - { - maxBand++; - } - maxBand--; - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - /* need to apply the sampling rate correction also for the EXT output MASA meta buffer */ - masa_sample_rate_band_correction( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hQMetaData, maxBand, 0, hMasa->data.extOutMeta ); - } - else - { - masa_sample_rate_band_correction( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hQMetaData, maxBand, 0, NULL ); - } - - return error; -} -#else static ivas_error ivas_masa_dec_config_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -1746,8 +984,7 @@ static ivas_error ivas_masa_dec_config_fx( st_ivas->hQMetaData->nchan_transport = st_ivas->nchan_transport; move16(); - /* TODO: use fixed version of this function call */ - IF( NE_32( ( error = ivas_qmetadata_allocate_memory( st_ivas->hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_allocate_memory_fx( st_ivas->hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) { return error; } @@ -1784,7 +1021,7 @@ static ivas_error ivas_masa_dec_config_fx( } } - ivas_set_qmetadata_maxbit_req( st_ivas->hQMetaData, st_ivas->ivas_format ); + ivas_set_qmetadata_maxbit_req_fx( st_ivas->hQMetaData, st_ivas->ivas_format ); /* Find maximum band usable */ maxBin = extract_l( Mpy_32_32( st_ivas->hDecoderConfig->output_Fs, INV_CLDFB_BANDWIDTH_Q31 ) ); @@ -1808,41 +1045,8 @@ static ivas_error ivas_masa_dec_config_fx( return error; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ivas_masa_prerender() - * - * Apply gaining and copying of transport signals when needed - *-------------------------------------------------------------------*/ -void ivas_masa_prerender( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output[], /* i/o: synthesized core-coder transport channels */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nchan_remapped /* i : number of transports used in core */ -) -{ - if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->nchan_transport == 2 && nchan_remapped == 1 ) - { - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - mvr2r( output[0], output[1], output_frame ); /* Copy mono signal to stereo output channels */ - } - else - { - if ( st_ivas->renderer_type == RENDERER_DIRAC || st_ivas->renderer_type == RENDERER_DISABLE ) - { - v_multc( output[0], SQRT2, output[0], output_frame ); /* Gain transport signal when transmitting mono with cpe in order to match loudness */ - } - } - } - return; -} -#else /*-------------------------------------------------------------------* * ivas_masa_prerender_fx() * @@ -1882,36 +1086,12 @@ void ivas_masa_prerender_fx( return; } -#endif /*-------------------------------------------------------------------* * Local functions *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void index_16bits( - IVAS_QMETADATA_HANDLE hQMetaData, - SPHERICAL_GRID_DATA *Sph_Grid16 ) -{ - int16_t d, band, block; - - for ( d = 0; d < hQMetaData->no_directions; d++ ) - { - /* Note: The band information is read from the first direction as it contains the full information. */ - for ( band = 0; band < hQMetaData->q_direction[0].cfg.nbands; band++ ) - { - for ( block = 0; block < hQMetaData->q_direction[0].cfg.nblocks; block++ ) - { - hQMetaData->q_direction[d].band_data[band].spherical_index[block] = index_theta_phi_16( &( hQMetaData->q_direction[d].band_data[band].elevation[block] ), - &( hQMetaData->q_direction[d].band_data[band].azimuth[block] ), Sph_Grid16 ); - } - } - } - - return; -} -#else static void index_16bits_fx( IVAS_QMETADATA_HANDLE hQMetaData, SPHERICAL_GRID_DATA *Sph_Grid16 ) @@ -1934,46 +1114,9 @@ static void index_16bits_fx( return; } -#endif /* Replicate subframe data when there is only one subframe sent */ -#ifndef IVAS_FLOAT_FIXED -static void replicate_subframes( - IVAS_QMETADATA_HANDLE hQMetaData ) -{ - int16_t sf, band, dir, nbands, ndirs; - - nbands = hQMetaData->q_direction->cfg.nbands; - ndirs = hQMetaData->no_directions; - - for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < nbands; band++ ) - { - for ( dir = 0; dir < ndirs; dir++ ) - { - hQMetaData->q_direction[dir].band_data[band].azimuth[sf] = hQMetaData->q_direction[dir].band_data[band].azimuth[0]; - hQMetaData->q_direction[dir].band_data[band].elevation[sf] = hQMetaData->q_direction[dir].band_data[band].elevation[0]; - hQMetaData->q_direction[dir].band_data[band].spherical_index[sf] = hQMetaData->q_direction[dir].band_data[band].spherical_index[0]; - hQMetaData->q_direction[dir].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[dir].band_data[band].energy_ratio[0]; - - if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) - { - hQMetaData->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[dir].coherence_band_data[band].spread_coherence[0]; - } - } - - if ( hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[band].surround_coherence[0]; - } - } - } - - return; -} -#else static void replicate_subframes_fx( IVAS_QMETADATA_HANDLE hQMetaData ) { @@ -2016,69 +1159,8 @@ static void replicate_subframes_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void restore_lowbitrate_masa( - IVAS_QMETADATA_HANDLE hQMetaData, - const int16_t low_bitrate_mode, - const int16_t numCodingBands ) -{ - int16_t sf, band; - - if ( low_bitrate_mode == 1 ) - { - /* With signal 1, we are in 5 frequency bands, 1 subframe mode. */ - /* Replicate data to all subframes */ - for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[0].band_data[band].azimuth[0]; - hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[0].band_data[band].elevation[0]; - hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[0].band_data[band].spherical_index[0]; - hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[0].band_data[band].energy_ratio[0]; - if ( hQMetaData->q_direction[0].coherence_band_data != NULL ) - { - hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[0]; - } - if ( hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[band].surround_coherence[0]; - } - } - } - hQMetaData->q_direction->cfg.nblocks = 4; - } - else - { - /* With signal 0, we are in 1 frequency bands, 4 subframes mode. */ - /* Replicate data to all bands */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 1; band < numCodingBands; band++ ) - { - hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[0].band_data[0].azimuth[sf]; - hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[0].band_data[0].elevation[sf]; - hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[0].band_data[0].spherical_index[sf]; - hQMetaData->q_direction[0].band_data[band].energy_ratio[sf] = hQMetaData->q_direction[0].band_data[0].energy_ratio[sf]; - if ( hQMetaData->q_direction[0].coherence_band_data != NULL ) - { - hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[0].coherence_band_data[0].spread_coherence[sf]; - } - if ( hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[band].surround_coherence[sf] = hQMetaData->surcoh_band_data[0].surround_coherence[sf]; - } - } - } - hQMetaData->q_direction->cfg.nbands = numCodingBands; - } - return; -} -#else static void restore_lowbitrate_masa_fx( IVAS_QMETADATA_HANDLE hQMetaData, const Word16 low_bitrate_mode, @@ -2149,131 +1231,13 @@ static void restore_lowbitrate_masa_fx( } } hQMetaData->q_direction->cfg.nbands = numCodingBands; - move16(); - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static ivas_error init_lfe_synth_data( - Decoder_Struct *st_ivas, /* i : IVAS decoder struct */ - MASA_DECODER_HANDLE hMasa /* i/o: MASA decoder structure */ -) -{ - int32_t output_Fs; - AUDIO_CONFIG output_config; - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - output_config = st_ivas->hDecoderConfig->output_config; - - if ( ( hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - hMasa->hMasaLfeSynth->transportEneSmooth = 0.0f; - hMasa->hMasaLfeSynth->protoLfeEneSmooth = 0.0f; - hMasa->hMasaLfeSynth->targetEneLfeSmooth = 0.0f; - hMasa->hMasaLfeSynth->targetEneTransSmooth = 0.0f; - - set_zero( hMasa->hMasaLfeSynth->lfeToTotalEnergyRatio, MAX_PARAM_SPATIAL_SUBFRAMES ); - hMasa->hMasaLfeSynth->lfeGainPrevIndex = 0; - - if ( st_ivas->hOutSetup.separateChannelEnabled && - ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_7_1 || - output_config == IVAS_AUDIO_CONFIG_5_1_2 || - output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || - output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || - output_config == IVAS_AUDIO_CONFIG_HOA3 || - ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe > 0 ) ) ) - { - int16_t bufferSize; - int16_t i; - int16_t slot_size; - - /* Ring buffer for the filterbank of the LFE synthesis. - * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */ - bufferSize = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); - if ( ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer, bufferSize ); - hMasa->hMasaLfeSynth->ringBufferLoPointer = 0; - hMasa->hMasaLfeSynth->ringBufferHiPointer = bufferSize / 2; - hMasa->hMasaLfeSynth->lowpassSum = 0.0f; - hMasa->hMasaLfeSynth->ringBufferSize = bufferSize; - - /* Ring buffer for additional lowpass filter for the LFE signal. - * Moving average lowpass filter with the crossover of 240 Hz. */ - bufferSize /= 2; - if ( ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2, bufferSize ); - hMasa->hMasaLfeSynth->ringBufferLoPointer2 = 0; - hMasa->hMasaLfeSynth->lowpassSum2 = 0.0f; - hMasa->hMasaLfeSynth->ringBufferSize2 = bufferSize; - - /* Delay buffer for matching the delay of the lowpass filter */ - bufferSize /= 2; /* The delay of the moving average lowpass filter is bufferSize / 2 */ - if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncLp, bufferSize ); - hMasa->hMasaLfeSynth->delayBuffer_syncLp_size = bufferSize; - - /* Delay buffer for syncing with DirAC rendering */ - bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) - hMasa->hMasaLfeSynth->ringBufferSize / 2 - hMasa->hMasaLfeSynth->ringBufferSize2 / 2; - if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; - - /* Interpolation between slots */ - hMasa->hMasaLfeSynth->lfeGainPrev = 0.0f; - hMasa->hMasaLfeSynth->transportGainPrev = 1.0f; - slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); - for ( i = 0; i < slot_size; i++ ) - { - hMasa->hMasaLfeSynth->interpolator[i] = ( (float) ( i + 1 ) ) / ( (float) slot_size ); - } - } - else if ( st_ivas->hOutSetup.separateChannelEnabled && output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && st_ivas->hOutSetup.num_lfe == 0 ) - { - int16_t bufferSize; - - /* Delay buffer for syncing with DirAC rendering */ - bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ); - if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize ); - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize; - - hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; - hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; - hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; - } - else - { - hMasa->hMasaLfeSynth->lfeSynthRingBuffer = NULL; - hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = NULL; - hMasa->hMasaLfeSynth->delayBuffer_syncLp = NULL; - hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL; + move16(); } - return IVAS_ERR_OK; + return; } -#else + + static ivas_error init_lfe_synth_data_fx( Decoder_Struct *st_ivas, /* i : IVAS decoder struct */ MASA_DECODER_HANDLE hMasa /* i/o: MASA decoder structure */ @@ -2436,127 +1400,9 @@ static ivas_error init_lfe_synth_data_fx( return IVAS_ERR_OK; } -#endif /*! r: Number of bits read */ -#ifndef IVAS_FLOAT_FIXED -static int16_t decode_lfe_to_total_energy_ratio( - MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: McMASA LFE structure */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, /* i/o: bitstream position */ - const int32_t ivas_total_brate /* i : total bitrate */ -) -{ - int16_t i; - int16_t lfeToTotalEnergyRatioIndices[3]; - int16_t VQBits; - float log2LFEaverage; - float lfeToTotalEnergyRatioTemp; - uint16_t byteBuffer; - int16_t lfeBitsRead; - - lfeBitsRead = 0; - byteBuffer = bitstream[( *index )--]; - lfeBitsRead += 1; - lfeToTotalEnergyRatioIndices[0] = byteBuffer; /* First LFE index */ - - if ( ivas_total_brate == IVAS_13k2 ) /* 1-bit adaptive LFE gain quantizer at 13.2 kbps */ - { - lfeToTotalEnergyRatioTemp = hMasaLfeSynth->lfeToTotalEnergyRatio[3]; /* Take memory from the last subframe */ - if ( lfeToTotalEnergyRatioIndices[0] == 1 ) - { - if ( hMasaLfeSynth->lfeGainPrevIndex == 1 ) - { - lfeToTotalEnergyRatioTemp = lfeToTotalEnergyRatioTemp + MCMASA_LFE_THETA * MCMASA_LFE_BETA; /* larger "bump-up" energy */ - } - else - { - lfeToTotalEnergyRatioTemp = lfeToTotalEnergyRatioTemp + MCMASA_LFE_BETA; /* "bump-up" energy */ - } - } - else - { - lfeToTotalEnergyRatioTemp = MCMASA_LFE_ALPHA * lfeToTotalEnergyRatioTemp; /* exponential decay */ - } - if ( lfeToTotalEnergyRatioTemp > 1.0f ) - { - lfeToTotalEnergyRatioTemp = 1.0f; - } - hMasaLfeSynth->lfeGainPrevIndex = lfeToTotalEnergyRatioIndices[0]; - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = lfeToTotalEnergyRatioTemp; - } - } - else /* Bitrates >= 16.4 kbps */ - { - if ( lfeToTotalEnergyRatioIndices[0] == 0 ) - { - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = 0.0f; - } - } - else - { - byteBuffer = bitstream[( *index )--] << 2; - byteBuffer += bitstream[( *index )--] << 1; - byteBuffer += bitstream[( *index )--]; - lfeBitsRead += 3; - lfeToTotalEnergyRatioIndices[1] = byteBuffer; /* Scalar index */ - log2LFEaverage = usdequant( lfeToTotalEnergyRatioIndices[1], MCMASA_LFE_QLOW, MCMASA_LFE_DELTA ); - - /* 16.4 kbps sends only scalar gain, above it VQ is used */ - if ( ivas_total_brate >= IVAS_24k4 ) - { - /* Depending on average (scalar) gain more bits are sent for VQ LFE gain */ - switch ( lfeToTotalEnergyRatioIndices[1] ) - { - case 0: - case 1: - VQBits = 0; - break; - case 2: - VQBits = 1; - break; - case 3: - VQBits = 2; - break; - case 4: - VQBits = 3; - break; - default: - VQBits = 4; - } - byteBuffer = 0; - for ( i = 0; i < VQBits; i++ ) - { - byteBuffer += bitstream[( *index )--] << ( VQBits - 1 - i ); - lfeBitsRead += 1; - } - lfeToTotalEnergyRatioIndices[2] = byteBuffer; /* VQ index */ - } - - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - if ( ivas_total_brate == IVAS_16k4 ) - { - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = exp2f( log2LFEaverage ); - } - else - { - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = exp2f( log2LFEaverage + McMASA_LFEGain_vectors[4 * lfeToTotalEnergyRatioIndices[2] + i] ); - } - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = min( hMasaLfeSynth->lfeToTotalEnergyRatio[i], 1.0f ); - hMasaLfeSynth->lfeToTotalEnergyRatio[i] = max( hMasaLfeSynth->lfeToTotalEnergyRatio[i], 0.0f ); - } - } - } - - return lfeBitsRead; -} -#else static Word16 decode_lfe_to_total_energy_ratio_fx( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: McMASA LFE structure */ UWord16 *bitstream, /* i : bitstream */ @@ -2689,280 +1535,31 @@ static Word16 decode_lfe_to_total_energy_ratio_fx( ELSE { tmp16 = shr( McMASA_LFEGain_vectors_fx_q13[4 * lfeToTotalEnergyRatioIndices[2] + i], 1 ); /* Q12 */ - tmp16 = add( log2LFEaverage_fx, tmp16 ); /* Q12 */ - tmp32 = BASOP_util_Pow2( L_deposit_h( tmp16 ), 15 - Q12, &exp ); /* Q(31 - exp) */ - tmp16 = round_fx( tmp32 ); /* Q(31-exp) -> Q(15 - exp) */ - hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = shr_sat( tmp16, sub( 1, exp ) ); /* should saturate. Q(15 - exp) - (1 - exp) -> Q14 */ - move16(); - } - - hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = s_min( hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i], ONE_IN_Q14 ); - move16(); - hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = s_max( hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i], 0 ); - move16(); - } - } - } - - return lfeBitsRead; -} -#endif - - -/*-------------------------------------------------------------------* - * ivas_masa_dec_reconfigure() - * - * Reconfigure IVAS MASA decoder - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_masa_dec_reconfigure( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ - int16_t *data /* o : output synthesis signal */ -) -{ - int16_t n, tmp, num_bits; - int16_t sce_id, cpe_id; - uint16_t *bit_stream; - Decoder_State **sts; - int32_t ivas_total_brate, last_ivas_total_brate; - int16_t numCldfbAnalyses_old, numCldfbSyntheses_old; - ivas_error error; - int32_t ism_total_brate; - - error = IVAS_ERR_OK; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; - - if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity ) - { - mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpatParamRendCom->nb_subframes; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered; - } - - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - - /* renderer might have changed, reselect */ - ivas_renderer_select( st_ivas ); - - if ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend == NULL ) || - ( ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) && st_ivas->hDiracDecBin == NULL ) ) - { - /* init a new DirAC dec */ - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->renderer_type == RENDERER_DISABLE || st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - if ( st_ivas->hDirAC != NULL ) - { - /* close all unnecessary parametric decoding and rendering */ - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - } - } - /* possible reconfigure is done later */ - - /*-----------------------------------------------------------------* - * Allocate and initialize SCE/CPE and other handles - *-----------------------------------------------------------------*/ - - bit_stream = st_ivas->hSCE[0] != NULL ? st_ivas->hSCE[0]->hCoreCoder[0]->bit_stream : st_ivas->hCPE[0]->hCoreCoder[0]->bit_stream; - - num_bits = 0; - - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - sts = st_ivas->hSCE[sce_id]->hCoreCoder; - sts[0]->bit_stream = bit_stream + num_bits; - num_bits += (int16_t) ( st_ivas->hSCE[sce_id]->element_brate / FRAMES_PER_SEC ); - - if ( ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) && st_ivas->hDiracDecBin != NULL ) - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; - - /* prepare bitstream buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - sts = st_ivas->hCPE[cpe_id]->hCoreCoder; - sts[0]->bit_stream = bit_stream + num_bits; - num_bits += (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); - if ( ( ivas_total_brate < MASA_STEREO_MIN_BITRATE && last_ivas_total_brate >= MASA_STEREO_MIN_BITRATE ) || - ( ivas_total_brate < MASA_STEREO_MIN_BITRATE && last_ivas_total_brate == FRAME_NO_DATA ) ) - { - st_ivas->hCPE[cpe_id]->nchan_out = 1; - - if ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend != NULL ) || ( ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) && st_ivas->hDiracDecBin != NULL ) ) - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( ivas_total_brate >= MASA_STEREO_MIN_BITRATE && last_ivas_total_brate < MASA_STEREO_MIN_BITRATE ) - { - st_ivas->hCPE[cpe_id]->nchan_out = CPE_CHANNELS; - - if ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend != NULL ) || ( ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) && st_ivas->hDiracDecBin != NULL ) ) - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - - if ( st_ivas->hDiracDecBin != NULL ) - { - /* regularization factor is bitrate-dependent */ - st_ivas->hDiracDecBin->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); - } - - if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->last_ivas_format == MASA_FORMAT ) /* note: switching within OMASA is handled in ivas_omasa_dec_config() */ - { - /*-----------------------------------------------------------------* - * TD Decorrelator - *-----------------------------------------------------------------*/ - if ( st_ivas->hDiracDecBin != NULL ) - { - if ( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * CLDFB instances - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_cldfb_dec_reconfig( st_ivas, st_ivas->nchan_transport, numCldfbAnalyses_old, numCldfbSyntheses_old ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * Set-up MASA coding elements and bitrates - *-----------------------------------------------------------------*/ - - ism_total_brate = 0; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( n = 0; n < st_ivas->nSCE; n++ ) - { - ism_total_brate += st_ivas->hSCE[n]->element_brate; - } - } - - ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &tmp, &tmp, &tmp, st_ivas->ivas_format, st_ivas->ism_mode, ism_total_brate ); - - if ( st_ivas->ivas_format == MASA_FORMAT ) - { - st_ivas->nchan_ism = 0; - st_ivas->ism_mode = ISM_MODE_NONE; - } - - { - int16_t tc_nchan_to_allocate; - int16_t tc_nchan_transport; - TC_BUFFER_MODE buffer_mode_new; - int16_t n_samples_granularity; - - n_samples_granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - buffer_mode_new = ivas_jbm_dec_get_tc_buffer_mode( st_ivas ); - tc_nchan_transport = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - - tc_nchan_to_allocate = tc_nchan_transport; - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS + 2; - } - else - { - tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS; - } - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - n_samples_granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); /* Use the same granularity as tdrend */ - if ( n_samples_granularity > st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_set_discard_samples( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - if ( n_samples_granularity < st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_flush_renderer( st_ivas, n_samples_granularity, st_ivas->renderer_type, st_ivas->intern_config, &st_ivas->hIntSetup, MC_MODE_NONE, ISM_MASA_MODE_DISC, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - else if ( st_ivas->nchan_transport == 1 && ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - /* addtl channel for CNG */ - tc_nchan_to_allocate++; - } - - - if ( tc_nchan_transport != st_ivas->hTcBuffer->nchan_transport_jbm || tc_nchan_to_allocate != st_ivas->hTcBuffer->nchan_transport_internal || buffer_mode_new != st_ivas->hTcBuffer->tc_buffer_mode ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_reconfigure( st_ivas, buffer_mode_new, tc_nchan_transport, tc_nchan_to_allocate, tc_nchan_to_allocate, n_samples_granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity ) - { - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpatParamRendCom->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - st_ivas->hSpatParamRendCom->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hSpatParamRendCom->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - int16_t granularityMultiplier = st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size; + tmp16 = add( log2LFEaverage_fx, tmp16 ); /* Q12 */ + tmp32 = BASOP_util_Pow2( L_deposit_h( tmp16 ), 15 - Q12, &exp ); /* Q(31 - exp) */ + tmp16 = round_fx( tmp32 ); /* Q(31-exp) -> Q(15 - exp) */ + hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = shr_sat( tmp16, sub( 1, exp ) ); /* should saturate. Q(15 - exp) - (1 - exp) -> Q14 */ + move16(); + } - for ( n = 0; n < MAX_JBM_SUBFRAMES_5MS; n++ ) - { - st_ivas->hSpatParamRendCom->subframe_nbslots[n] = st_ivas->hTcBuffer->subframe_nbslots[n] * granularityMultiplier; + hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = s_min( hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i], ONE_IN_Q14 ); + move16(); + hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i] = s_max( hMasaLfeSynth->lfeToTotalEnergyRatio_fx[i], 0 ); + move16(); } } } - return error; + return lfeBitsRead; } -#else + + +/*-------------------------------------------------------------------* + * ivas_masa_dec_reconfigure() + * + * Reconfigure IVAS MASA decoder + *-------------------------------------------------------------------*/ + /*-------------------------------------------------------------------* * ivas_masa_dec_reconfigure_fx() * @@ -3322,7 +1919,6 @@ ivas_error ivas_masa_dec_reconfigure_fx( return error; } -#endif /*-------------------------------------------------------------------* @@ -3331,7 +1927,6 @@ ivas_error ivas_masa_dec_reconfigure_fx( * Determine MASA metadata from the SPAR metadata *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_param_to_masa_param_mapping_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real */ @@ -3847,463 +2442,68 @@ void ivas_spar_param_to_masa_param_mapping_fx( move32(); intermediate_results = BASOP_Util_Divide3232_Scale( diffuseGainZ_fx, L_add_sat( diffuseGainSum_fx, EPSILON_FX_SMALL ), &temp_q ); - // saturating value to less than 1 - IF( temp_q <= 0 ) - { - intermediate_results = shr( intermediate_results, negate( temp_q ) ); // Q15 - } - ELSE - { - intermediate_results = shl_sat( intermediate_results, temp_q ); // Q15 - } - hDiffuseDist->diffuseRatioZ_fx[bin] = L_deposit_h( intermediate_results ); // Q31 - move32(); - } - } - } - - return; -} -#else -void ivas_spar_param_to_masa_param_mapping( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real */ - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, imag */ - const int16_t subframe /* i : Subframe to map */ -) -{ - int16_t i, j, band, bin, slot, ch, nBins, nchan_transport; - int16_t mixer_mat_index; - int16_t dirac_write_idx; - DIRAC_DEC_HANDLE hDirAC; - DIFFUSE_DISTRIBUTION_HANDLE hDiffuseDist; - float mixer_mat_sf_bands_real[SPAR_DIRAC_SPLIT_START_BAND][FOA_CHANNELS][FOA_CHANNELS]; - float mixer_mat_sf_bins_real[CLDFB_NO_CHANNELS_MAX][FOA_CHANNELS][FOA_CHANNELS]; - int16_t *band_grouping; - int16_t band_start, band_end; - float transportSignalEnergies[2][CLDFB_NO_CHANNELS_MAX]; - float transportSignalCrossCorrelation[CLDFB_NO_CHANNELS_MAX]; - float instEne; - float inCovarianceMtx[FOA_CHANNELS][FOA_CHANNELS]; - float foaCovarianceMtx[FOA_CHANNELS][FOA_CHANNELS]; - float Iy, Iz, Ix, E, azi, ele, I, ratio; - float diffuseGainX, diffuseGainY, diffuseGainZ, diffuseGainSum; - int16_t slot_idx, slot_idx_start, sf; - SPAR_DEC_HANDLE hSpar; - float slot_fac; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - /* Set values */ - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - hSpatParamRendCom->numParametricDirections = 1; - hSpatParamRendCom->numSimultaneousDirections = 1; - hDiffuseDist = st_ivas->hDiracDecBin->hDiffuseDist; - nchan_transport = st_ivas->nchan_transport; - band_grouping = hDirAC->band_grouping; - hSpar = st_ivas->hSpar; - dirac_write_idx = hSpatParamRendCom->render_to_md_map[subframe]; - - /* Init arrays */ - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - set_zero( inCovarianceMtx[i], FOA_CHANNELS ); - } - - /* Delay the SPAR mixing matrices to have them synced with the audio */ - slot_idx_start = hSpar->slots_rendered; - slot_fac = 1.0f / (float) hSpar->subframe_nbslots[subframe]; - - for ( slot_idx = 0; slot_idx < hSpar->subframe_nbslots[subframe]; slot_idx++ ) - { - sf = hSpar->render_to_md_map[slot_idx + slot_idx_start] / JBM_CLDFB_SLOTS_IN_SUBFRAME; - - if ( ( sf < SPAR_META_DELAY_SUBFRAMES ) ) - { - mixer_mat_index = sf + MAX_PARAM_SPATIAL_SUBFRAMES - SPAR_META_DELAY_SUBFRAMES + 1; - for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) - { - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - mixer_mat_sf_bands_real[band][i][j] = slot_fac * st_ivas->hSpar->hMdDec->mixer_mat_prev[mixer_mat_index][i][j][band]; - } - } - } - } - else - { - mixer_mat_index = ( ivas_get_spar_dec_md_num_subframes( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) == 1 ) ? 0 : ( sf - SPAR_META_DELAY_SUBFRAMES ); - for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) - { - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - mixer_mat_sf_bands_real[band][i][j] = slot_fac * st_ivas->hSpar->hMdDec->mixer_mat[i][j][band + mixer_mat_index * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - /* Map the mixing matrices from the frequency bands to frequency bins */ - bin = 0; - for ( band = 0; band < SPAR_DIRAC_SPLIT_START_BAND; band++ ) - { - band_start = band_grouping[band]; - band_end = band_grouping[band + 1]; - for ( bin = band_start; bin < band_end; bin++ ) - { - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - mixer_mat_sf_bins_real[bin][i][j] = mixer_mat_sf_bands_real[band][i][j]; - } - } - } - } - nBins = bin; - - /* Determine MASA metadata */ - /* Determine transport signal energies and cross correlations when more than 1 TC */ - if ( nchan_transport == 2 ) - { - set_zero( transportSignalEnergies[0], nBins ); - set_zero( transportSignalEnergies[1], nBins ); - set_zero( transportSignalCrossCorrelation, nBins ); - - for ( slot = 0; slot < hSpatParamRendCom->subframe_nbslots[subframe]; slot++ ) - { - for ( bin = 0; bin < nBins; bin++ ) - { - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - instEne = ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ); - instEne += ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); - transportSignalEnergies[ch][bin] += instEne; - } - transportSignalCrossCorrelation[bin] += inRe[0][slot][bin] * inRe[1][slot][bin]; - transportSignalCrossCorrelation[bin] += inIm[0][slot][bin] * inIm[1][slot][bin]; - } - } - } - - if ( hDiffuseDist != NULL ) - { - set_zero( hDiffuseDist->diffuseRatioX, CLDFB_NO_CHANNELS_MAX ); - set_zero( hDiffuseDist->diffuseRatioY, CLDFB_NO_CHANNELS_MAX ); - set_zero( hDiffuseDist->diffuseRatioZ, CLDFB_NO_CHANNELS_MAX ); - } - - for ( bin = 0; bin < nBins; bin++ ) - { - /* Set the energy of the first transport signal */ - if ( nchan_transport == 1 ) - { - inCovarianceMtx[0][0] = 1.0f; /* In case of 1TC, fixed value can be used */ - } - else - { - inCovarianceMtx[0][0] = transportSignalEnergies[0][bin]; /* In case of 2TC, use actual energies */ - } - - /* Decorrelated channels assumed to have the same energy as the source channel */ - inCovarianceMtx[1][1] = inCovarianceMtx[0][0]; - inCovarianceMtx[2][2] = inCovarianceMtx[0][0]; - inCovarianceMtx[3][3] = inCovarianceMtx[0][0]; - - /* In case residuals were transmitted, use their actual energies and cross correlations */ - if ( nchan_transport == 2 ) - { - inCovarianceMtx[1][1] = transportSignalEnergies[1][bin]; - inCovarianceMtx[0][1] = transportSignalCrossCorrelation[bin]; - inCovarianceMtx[1][0] = inCovarianceMtx[0][1]; - } - - compute_foa_cov_matrix( foaCovarianceMtx, inCovarianceMtx, mixer_mat_sf_bins_real[bin] ); - - /* Estimate MASA metadata */ - Iy = foaCovarianceMtx[0][1]; /* Intensity in Y direction */ - Iz = foaCovarianceMtx[0][2]; /* Intensity in Z direction */ - Ix = foaCovarianceMtx[0][3]; /* Intensity in X direction */ - I = sqrtf( Ix * Ix + Iy * Iy + Iz * Iz ); /* Intensity vector length */ - E = ( foaCovarianceMtx[0][0] + foaCovarianceMtx[1][1] + foaCovarianceMtx[2][2] + foaCovarianceMtx[3][3] ) / 2.0f; /* Overall energy */ - azi = atan2f( Iy, Ix ); /* Azimuth */ - ele = atan2f( Iz, sqrtf( Ix * Ix + Iy * Iy ) ); /* Elevation */ - ratio = I / fmaxf( 1e-12f, E ); /* Energy ratio */ - ratio = fmaxf( 0.0f, fminf( 1.0f, ratio ) ); - - hSpatParamRendCom->azimuth[dirac_write_idx][bin] = (int16_t) roundf( azi / PI_OVER_180 ); - hSpatParamRendCom->elevation[dirac_write_idx][bin] = (int16_t) roundf( ele / PI_OVER_180 ); - hSpatParamRendCom->energy_ratio1[dirac_write_idx][bin] = ratio; - hSpatParamRendCom->diffuseness_vector[dirac_write_idx][bin] = 1.0f - ratio; - - hSpatParamRendCom->spreadCoherence[dirac_write_idx][bin] = 0.0f; - hSpatParamRendCom->surroundingCoherence[dirac_write_idx][bin] = 0.0f; - - /* Determine directional distribution of the indirect audio based on the SPAR mixing matrices (and the transport audio signals when 2 TC) */ - if ( hDiffuseDist != NULL ) - { - if ( nchan_transport == 1 ) - { - diffuseGainY = fabsf( mixer_mat_sf_bins_real[bin][1][1] ); - diffuseGainX = fabsf( mixer_mat_sf_bins_real[bin][3][2] ); - diffuseGainZ = fabsf( mixer_mat_sf_bins_real[bin][2][3] ); - } - else if ( nchan_transport == 2 ) - { - diffuseGainY = fabsf( mixer_mat_sf_bins_real[bin][1][1] * transportSignalEnergies[1][bin] ); - diffuseGainX = fabsf( mixer_mat_sf_bins_real[bin][3][2] * transportSignalEnergies[0][bin] ) + fabsf( mixer_mat_sf_bins_real[bin][3][1] * transportSignalEnergies[1][bin] ); - diffuseGainZ = fabsf( mixer_mat_sf_bins_real[bin][2][3] * transportSignalEnergies[0][bin] ) + fabsf( mixer_mat_sf_bins_real[bin][2][1] * transportSignalEnergies[1][bin] ); - } - else - { - diffuseGainY = 1.0f; - diffuseGainX = 1.0f; - diffuseGainZ = 1.0f; - } - - diffuseGainSum = diffuseGainY + diffuseGainX + diffuseGainZ; - - if ( diffuseGainSum == 0.0f ) - { - hDiffuseDist->diffuseRatioX[bin] = 1.0f / 3.0f; - hDiffuseDist->diffuseRatioY[bin] = 1.0f / 3.0f; - hDiffuseDist->diffuseRatioZ[bin] = 1.0f / 3.0f; - } - else - { - hDiffuseDist->diffuseRatioX[bin] = diffuseGainX / ( diffuseGainSum + EPSILON ); - hDiffuseDist->diffuseRatioY[bin] = diffuseGainY / ( diffuseGainSum + EPSILON ); - hDiffuseDist->diffuseRatioZ[bin] = diffuseGainZ / ( diffuseGainSum + EPSILON ); - } - } - } - - return; -} -#endif - - -/* Estimate FOA properties: foaCov = mixMtx * inCov * mixMtx' */ -#ifdef IVAS_FLOAT_FIXED -static void compute_foa_cov_matrix_fx( - Word32 foaCov_fx[FOA_CHANNELS][FOA_CHANNELS], /* o : Estimated FOA covariance matrix Qx*/ - Word32 inCov_fx[FOA_CHANNELS][FOA_CHANNELS], /* i : Input covariance matrix Qx*/ - Word32 mixMtx_fx[FOA_CHANNELS][FOA_CHANNELS] /* i : Mixing matrix Q31*/ -) -{ - Word32 tmpMtx_fx[FOA_CHANNELS][FOA_CHANNELS]; - Word16 i, j, k; - /* tmpMtx = mixMtx * inCov */ - FOR( i = 0; i < FOA_CHANNELS; i++ ) - { - FOR( j = 0; j < FOA_CHANNELS; j++ ) - { - tmpMtx_fx[i][j] = 0; - move32(); - FOR( k = 0; k < FOA_CHANNELS; k++ ) - { - tmpMtx_fx[i][j] = L_add_sat( tmpMtx_fx[i][j], Mpy_32_32( mixMtx_fx[i][k], inCov_fx[k][j] ) ); // Qx - move32(); - } - } - } - - /* foaCov = inCov * mixMtx' */ - FOR( i = 0; i < FOA_CHANNELS; i++ ) - { - FOR( j = 0; j < FOA_CHANNELS; j++ ) - { - foaCov_fx[i][j] = 0; - move32(); - FOR( k = 0; k < FOA_CHANNELS; k++ ) - { - foaCov_fx[i][j] = L_add_sat( foaCov_fx[i][j], Mpy_32_32( tmpMtx_fx[i][k], mixMtx_fx[j][k] ) ); // Qx - move32(); - } - } - } - - return; -} -#else -static void compute_foa_cov_matrix( - float foaCov[FOA_CHANNELS][FOA_CHANNELS], /* o : Estimated FOA covariance matrix */ - float inCov[FOA_CHANNELS][FOA_CHANNELS], /* i : Input covariance matrix */ - float mixMtx[FOA_CHANNELS][FOA_CHANNELS] /* i : Mixing matrix */ -) -{ - float tmpMtx[FOA_CHANNELS][FOA_CHANNELS]; - int16_t i, j, k; - - /* tmpMtx = mixMtx * inCov */ - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - tmpMtx[i][j] = 0.0f; - for ( k = 0; k < FOA_CHANNELS; k++ ) - { - tmpMtx[i][j] += mixMtx[i][k] * inCov[k][j]; - } - } - } - - /* foaCov = inCov * mixMtx' */ - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - foaCov[i][j] = 0.0f; - for ( k = 0; k < FOA_CHANNELS; k++ ) - { - foaCov[i][j] += tmpMtx[i][k] * mixMtx[j][k]; - } - } - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void create_masa_ext_out_meta( - MASA_DECODER *hMasa, - IVAS_QMETADATA_HANDLE hQMetaData, - const int16_t nchan_transport ) -{ - const uint8_t ivasmasaFormatDescriptor[8] = { 0x49, 0x56, 0x41, 0x53, 0x4D, 0x41, 0x53, 0x41 }; /* "IVASMASA" */ - int16_t i, sf, b_old, b_new, dir; - MASA_DECRIPTIVE_META *descMeta; - int16_t *bandMap; - uint8_t numCodingBands; - uint8_t numDirections; - MASA_DECODER_EXT_OUT_META *extOutMeta; - - numDirections = hMasa->config.numberOfDirections; - numCodingBands = hMasa->config.numCodingBands; - bandMap = hMasa->data.band_mapping; - extOutMeta = hMasa->data.extOutMeta; - descMeta = &hMasa->data.extOutMeta->descriptiveMeta; - - /* Construct descriptive meta */ - for ( i = 0; i < 8; i++ ) - { - descMeta->formatDescriptor[i] = ivasmasaFormatDescriptor[i]; - } - descMeta->numberOfDirections = numDirections - 1; - descMeta->numberOfChannels = (uint8_t) ( nchan_transport - 1 ); - /* Following correspond to "unknown" values until transmission is implemented */ - descMeta->sourceFormat = 0x0u; - descMeta->transportDefinition = 0x0u; - descMeta->channelAngle = 0x0u; - descMeta->channelDistance = 0x0u; - descMeta->channelLayout = 0x0u; - - /* Construct spatial metadata from qmetadata */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( dir = 0; dir < numDirections; dir++ ) - { - /* Spherical index */ - for ( b_old = 0; b_old < numCodingBands; b_old++ ) - { - for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) - { - extOutMeta->directionIndex[dir][sf][b_new] = hQMetaData->q_direction[dir].band_data[b_old].spherical_index[sf]; - } - } - - /* Direct-to-total ratio */ - for ( b_old = 0; b_old < numCodingBands; b_old++ ) - { - for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) - { - extOutMeta->directToTotalRatio[dir][sf][b_new] = (uint8_t) floorf( hQMetaData->q_direction[dir].band_data[b_old].energy_ratio[sf] * UINT8_MAX ); - } - } - - /* Spread coherence */ - if ( hQMetaData->q_direction[dir].coherence_band_data != NULL ) - { - for ( b_old = 0; b_old < numCodingBands; b_old++ ) + // saturating value to less than 1 + IF( temp_q <= 0 ) { - for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) - { - extOutMeta->spreadCoherence[dir][sf][b_new] = hQMetaData->q_direction[dir].coherence_band_data[b_old].spread_coherence[sf]; - } + intermediate_results = shr( intermediate_results, negate( temp_q ) ); // Q15 } - } - else - { - for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + ELSE { - extOutMeta->spreadCoherence[dir][sf][i] = 0; + intermediate_results = shl_sat( intermediate_results, temp_q ); // Q15 } + hDiffuseDist->diffuseRatioZ_fx[bin] = L_deposit_h( intermediate_results ); // Q31 + move32(); } } + } - /* Fill second direction with zero energy data for EXT output */ - if ( numDirections == 1 ) - { - for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) - { - extOutMeta->directionIndex[1][sf][i] = SPH_IDX_FRONT; - } - - for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) - { - extOutMeta->directToTotalRatio[1][sf][i] = 0; - } + return; +} - for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) - { - extOutMeta->spreadCoherence[1][sf][i] = 0; - } - } - /* Common spatial meta */ - /* Diffuse-to-total ratio = 1 - sum(direct-to-total ratios) */ - for ( b_old = 0; b_old < numCodingBands; b_old++ ) +/* Estimate FOA properties: foaCov = mixMtx * inCov * mixMtx' */ +static void compute_foa_cov_matrix_fx( + Word32 foaCov_fx[FOA_CHANNELS][FOA_CHANNELS], /* o : Estimated FOA covariance matrix Qx*/ + Word32 inCov_fx[FOA_CHANNELS][FOA_CHANNELS], /* i : Input covariance matrix Qx*/ + Word32 mixMtx_fx[FOA_CHANNELS][FOA_CHANNELS] /* i : Mixing matrix Q31*/ +) +{ + Word32 tmpMtx_fx[FOA_CHANNELS][FOA_CHANNELS]; + Word16 i, j, k; + /* tmpMtx = mixMtx * inCov */ + FOR( i = 0; i < FOA_CHANNELS; i++ ) + { + FOR( j = 0; j < FOA_CHANNELS; j++ ) { - for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) + tmpMtx_fx[i][j] = 0; + move32(); + FOR( k = 0; k < FOA_CHANNELS; k++ ) { - extOutMeta->diffuseToTotalRatio[sf][b_new] = UINT8_MAX; - for ( dir = 0; dir < numDirections; dir++ ) - { - extOutMeta->diffuseToTotalRatio[sf][b_new] -= (uint8_t) floorf( hQMetaData->q_direction[dir].band_data[b_old].energy_ratio[sf] * UINT8_MAX ); - } + tmpMtx_fx[i][j] = L_add_sat( tmpMtx_fx[i][j], Mpy_32_32( mixMtx_fx[i][k], inCov_fx[k][j] ) ); // Qx + move32(); } } + } - /* Surround coherence */ - if ( hQMetaData->surcoh_band_data != NULL ) - { - for ( b_old = 0; b_old < numCodingBands; b_old++ ) - { - for ( b_new = bandMap[b_old]; b_new < bandMap[b_old + 1]; b_new++ ) - { - extOutMeta->surroundCoherence[sf][b_new] = hQMetaData->surcoh_band_data[b_old].surround_coherence[sf]; - } - } - } - else + /* foaCov = inCov * mixMtx' */ + FOR( i = 0; i < FOA_CHANNELS; i++ ) + { + FOR( j = 0; j < FOA_CHANNELS; j++ ) { - for ( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) + foaCov_fx[i][j] = 0; + move32(); + FOR( k = 0; k < FOA_CHANNELS; k++ ) { - extOutMeta->surroundCoherence[sf][i] = 0; + foaCov_fx[i][j] = L_add_sat( foaCov_fx[i][j], Mpy_32_32( tmpMtx_fx[i][k], mixMtx_fx[j][k] ) ); // Qx + move32(); } } } return; } -#else + + static void create_masa_ext_out_meta_fx( MASA_DECODER *hMasa, IVAS_QMETADATA_HANDLE hQMetaData, @@ -4469,413 +2669,87 @@ static void create_masa_ext_out_meta_fx( } ELSE { - FOR( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) - { - extOutMeta->surroundCoherence[sf][i] = 0; - move16(); - } - } - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void decode_index_slice( - int16_t index, /* i : index to decode */ - int16_t *ratio_idx_ism, /* o : decodec array of integers */ - const int16_t nchan_ism, /* i : number of elements in array (objects) */ - const int16_t K /* i : sum of array elements */ -) -{ - int16_t i, j, sum, elem; - int16_t base[MAX_NUM_OBJECTS]; - - switch ( nchan_ism ) - { - case 2: - ratio_idx_ism[0] = index; - ratio_idx_ism[1] = K - ratio_idx_ism[0]; - break; - case 3: - case 4: - { - j = 0; - while ( index >= 0 ) - { - if ( valid_ratio_index( j, K, nchan_ism - 1 ) ) - { - index--; - } - j++; - } - j--; - base[0] = 1; - for ( i = 1; i < nchan_ism - 1; i++ ) - { - base[i] = base[i - 1] * 10; - } - sum = 0; - for ( i = nchan_ism - 2; i >= 0; i-- ) - { - elem = j / base[i]; - ratio_idx_ism[nchan_ism - i - 2] = elem; - sum += elem; - j -= elem * base[i]; - } - ratio_idx_ism[nchan_ism - 1] = K - sum; - } - - default: - break; - } - - return; -} -#else -static void decode_index_slice_fx( - Word16 index, /* i : index to decode */ - Word16 *ratio_idx_ism, /* o : decodec array of integers Q0*/ - const Word16 nchan_ism, /* i : number of elements in array (objects) */ - const Word16 K /* i : sum of array elements Q0*/ -) -{ - Word16 i, j, sum, elem; - Word16 base[MAX_NUM_OBJECTS]; - - SWITCH( nchan_ism ) - { - case 2: - ratio_idx_ism[0] = index; - move16(); - ratio_idx_ism[1] = sub( K, ratio_idx_ism[0] ); - move16(); - BREAK; - case 3: - case 4: - { - j = 0; - move16(); - WHILE( index >= 0 ) - { - IF( valid_ratio_index_fx( j, K, nchan_ism - 1 ) ) - { - index = sub( index, 1 ); - } - j = add( j, 1 ); - } - j = sub( j, 1 ); - base[0] = 1; - move16(); - FOR( i = 1; i < nchan_ism - 1; i++ ) - { - base[i] = i_mult( base[i - 1], 10 ); - move16(); - } - sum = 0; - move16(); - FOR( i = nchan_ism - 2; i >= 0; i-- ) - { - IF( EQ_16( j, 0 ) ) - { - elem = 0; - move16(); - } - ELSE - { - elem = idiv1616( j, base[i] ); - } - ratio_idx_ism[nchan_ism - i - 2] = elem; - move16(); - sum = add( sum, elem ); - j = sub( j, i_mult( elem, base[i] ) ); - } - ratio_idx_ism[nchan_ism - 1] = sub( K, sum ); - move16(); - } - - default: - BREAK; - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void read_ism_ratio_index( - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* o : ISM read ratio indexes */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t numCodingBands, /* i : number of subbands */ - const int16_t sf, /* i : index of subframe */ - int16_t ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* i : previous subframe ISM ratio indexes */ - uint16_t *bit_stream, /* i : bitstream */ - int16_t *next_bit_pos, /* i/o: position in bitstream */ - float *masa_to_total_energy_ratio, /* i : masa to total ratios */ - const int16_t idx_sep_obj, /* i : index of separated index, -1 if none */ - int16_t *num_zeros /* i/o: number of zero values in first subframe for separated object */ -) -{ - int16_t b, i, b_signif; - int16_t index; - int16_t GR_order, differential_subframe; - int16_t buf; - int16_t no_levels_ratio_ism; - int16_t bits_index; - int16_t ratio_ism_idx_ref[MAX_NUM_OBJECTS]; - int16_t idx_sep_obj_local, shift_one; - - idx_sep_obj_local = idx_sep_obj; - if ( idx_sep_obj > -1 ) - { - if ( idx_sep_obj == nchan_ism - 1 && nchan_ism > 2 ) - { - idx_sep_obj_local = 0; - } - } - - b_signif = 0; - no_levels_ratio_ism = ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ); - while ( ( b_signif < numCodingBands ) && ( masa_to_total_energy_ratio[b_signif] >= MASA2TOTAL_THR ) ) - { - /* distribute evenly the objects */ - distribute_evenly_ism( ratio_ism_idx[b_signif], no_levels_ratio_ism, nchan_ism ); - b_signif++; - } - - if ( b_signif == numCodingBands ) - { - return; - } - else - { - - if ( sf == 0 ) - { - bits_index = bits_index_ism_ratio( nchan_ism ); - - /* read coding type */ - if ( bit_stream[( *next_bit_pos )--] == 1 ) - { - /* independent coding*/ - for ( b = 0; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - index = 0; - for ( i = 0; i < bits_index; i++ ) - { - index = ( index << 1 ) + bit_stream[( *next_bit_pos )--]; - } - decode_index_slice( index, ratio_ism_idx[b], nchan_ism, no_levels_ratio_ism ); - if ( idx_sep_obj > -1 && ratio_ism_idx[b][idx_sep_obj_local] == 0 ) - { - ( *num_zeros )++; - } - } - else - { - /* distribute evenly the objects */ - distribute_evenly_ism( ratio_ism_idx[b], no_levels_ratio_ism, nchan_ism ); - } - } - } - else - { - /* differential coding */ - index = 0; - for ( i = 0; i < bits_index; i++ ) - { - index = ( index << 1 ) + bit_stream[( *next_bit_pos )--]; - } - decode_index_slice( index, ratio_ism_idx[b_signif], nchan_ism, no_levels_ratio_ism ); - if ( idx_sep_obj > -1 && ratio_ism_idx[b_signif][idx_sep_obj_local] == 0 ) - { - ( *num_zeros )++; - } - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - for ( b = b_signif + 1; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - ratio_ism_idx[b][nchan_ism - 1] = no_levels_ratio_ism; - for ( i = 0; i < nchan_ism - 1; i++ ) - { - buf = ivas_qmetadata_DecodeExtendedGR( bit_stream, next_bit_pos, 100, 0 ); - if ( ( buf % 2 ) == 0 ) - { - ratio_ism_idx[b][i] = -( buf >> 1 ); - } - else - { - ratio_ism_idx[b][i] = ( ( buf + 1 ) >> 1 ); - } - ratio_ism_idx[b][i] = ratio_ism_idx[b][i] + ratio_ism_idx_ref[i]; - ratio_ism_idx[b][nchan_ism - 1] -= ratio_ism_idx[b][i]; - } - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); - if ( idx_sep_obj > -1 && ratio_ism_idx[b][idx_sep_obj_local] == 0 ) - { - ( *num_zeros )++; - } - } - else - { - /* distribute evenly the objects */ - distribute_evenly_ism( ratio_ism_idx[b], no_levels_ratio_ism, nchan_ism ); - } - } - } - } - else - { - if ( numCodingBands > 1 ) - { - /* read prediction type */ - differential_subframe = bit_stream[( *next_bit_pos )--]; - } - else - { - differential_subframe = 1; - } - - if ( *num_zeros == numCodingBands ) - { - shift_one = 1; - } - else + FOR( i = 0; i < MASA_FREQUENCY_BANDS; i++ ) { - shift_one = 0; + extOutMeta->surroundCoherence[sf][i] = 0; + move16(); } + } + } + + return; +} + + +static void decode_index_slice_fx( + Word16 index, /* i : index to decode */ + Word16 *ratio_idx_ism, /* o : decodec array of integers Q0*/ + const Word16 nchan_ism, /* i : number of elements in array (objects) */ + const Word16 K /* i : sum of array elements Q0*/ +) +{ + Word16 i, j, sum, elem; + Word16 base[MAX_NUM_OBJECTS]; - if ( shift_one == 1 && nchan_ism == 2 ) + SWITCH( nchan_ism ) + { + case 2: + ratio_idx_ism[0] = index; + move16(); + ratio_idx_ism[1] = sub( K, ratio_idx_ism[0] ); + move16(); + BREAK; + case 3: + case 4: + { + j = 0; + move16(); + WHILE( index >= 0 ) { - /* nothing has been sent ; values can be inferred */ - for ( b = b_signif; b < numCodingBands; b++ ) + IF( valid_ratio_index_fx( j, K, nchan_ism - 1 ) ) { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - if ( idx_sep_obj_local == 0 ) - { - ratio_ism_idx[b][0] = 0; - ratio_ism_idx[b][1] = 7; - } - else - { - ratio_ism_idx[b][0] = 7; - ratio_ism_idx[b][1] = 0; - } - } + index = sub( index, 1 ); } + j = add( j, 1 ); } - else + j = sub( j, 1 ); + base[0] = 1; + move16(); + FOR( i = 1; i < nchan_ism - 1; i++ ) { - /* read GR order */ - GR_order = bit_stream[( *next_bit_pos )--]; - for ( b = b_signif; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - for ( i = 0; i < nchan_ism - 1 - shift_one; i++ ) - { - buf = ivas_qmetadata_DecodeExtendedGR( bit_stream, next_bit_pos, 100, GR_order ); - if ( ( buf % 2 ) == 0 ) - { - ratio_ism_idx[b][i] = -( buf >> 1 ); - } - else - { - ratio_ism_idx[b][i] = ( ( buf + 1 ) >> 1 ); - } - } - - /* insert separated obj */ - if ( shift_one ) - { - for ( i = nchan_ism - 1; i > idx_sep_obj_local; i-- ) - { - ratio_ism_idx[b][i] = ratio_ism_idx[b][i - 1]; - } - ratio_ism_idx[b][idx_sep_obj_local] = 0; /* this is only difference; need to pdate later as well */ - } - } - } - if ( differential_subframe ) + base[i] = i_mult( base[i - 1], 10 ); + move16(); + } + sum = 0; + move16(); + FOR( i = nchan_ism - 2; i >= 0; i-- ) + { + IF( EQ_16( j, 0 ) ) { - /* differential to previous subframe */ - for ( b = b_signif; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - ratio_ism_idx[b][nchan_ism - 1] = no_levels_ratio_ism; - for ( i = 0; i < nchan_ism - 1; i++ ) - { - ratio_ism_idx[b][i] = ratio_ism_idx[b][i] + ratio_ism_idx_prev_sf[b][i]; - if ( shift_one && i == idx_sep_obj_local ) - { - ratio_ism_idx[b][i] = 0; - } - ratio_ism_idx[b][nchan_ism - 1] -= ratio_ism_idx[b][i]; - } - } - else - { - /* distribute evenly the objects */ - distribute_evenly_ism( ratio_ism_idx[b], no_levels_ratio_ism, nchan_ism ); - } - } + elem = 0; + move16(); } - else + ELSE { - /* difference to previous subband */ - ratio_ism_idx[b_signif][nchan_ism - 1] = no_levels_ratio_ism; - - /* first significant subband - differential to previous subframe */ - for ( i = 0; i < nchan_ism - 1; i++ ) - { - ratio_ism_idx[b_signif][i] = ratio_ism_idx[b_signif][i] + ratio_ism_idx_prev_sf[b_signif][i]; - if ( shift_one && i == idx_sep_obj_local ) - { - ratio_ism_idx[b_signif][i] = 0; - } - ratio_ism_idx[b_signif][nchan_ism - 1] -= ratio_ism_idx[b_signif][i]; - } - - /* rest of subbands differential to previous subband */ - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - for ( b = b_signif + 1; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - ratio_ism_idx[b][nchan_ism - 1] = no_levels_ratio_ism; - for ( i = 0; i < nchan_ism - 1; i++ ) - { - ratio_ism_idx[b][i] = ratio_ism_idx[b][i] + ratio_ism_idx_ref[i]; - if ( shift_one && i == idx_sep_obj_local ) - { - ratio_ism_idx[b][i] = 0; - } - ratio_ism_idx[b][nchan_ism - 1] -= ratio_ism_idx[b][i]; - } - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); - } - else - { - /* distribute evenly the objects */ - distribute_evenly_ism( ratio_ism_idx[b], no_levels_ratio_ism, nchan_ism ); - } - } + elem = idiv1616( j, base[i] ); } + ratio_idx_ism[nchan_ism - i - 2] = elem; + move16(); + sum = add( sum, elem ); + j = sub( j, i_mult( elem, base[i] ) ); } + ratio_idx_ism[nchan_ism - 1] = sub( K, sum ); + move16(); } - return; + default: + BREAK; } + + return; } -#else + + static void read_ism_ratio_index_fx( Word16 ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* o : ISM read ratio indexes Q0*/ const Word16 nchan_ism, /* i : number of objects */ @@ -5198,85 +3072,8 @@ static void read_ism_ratio_index_fx( return; } } -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void decode_ism_ratios( - uint16_t *bit_stream, /* i : bitstream */ - int16_t *next_bit_pos, /* i/o: position in bitstream */ - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : masa_to_total energy ratios */ - float ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* o : ISM ratios */ - const int16_t n_ism, /* i : number of objects */ - const int16_t nbands, /* i : number of subbands */ - const int16_t numSf, /* i : number of subframes */ - const int16_t idx_separated_object /* i : index of separated object */ -) -{ - int16_t sf, band; - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - int16_t ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - float tmp; - int16_t num_zeros; - num_zeros = 0; - - /* hQMetaData->q_direction->cfg.nblocks; */ - for ( sf = 0; sf < numSf; sf++ ) - { - /* read ism ratio indexes */ - read_ism_ratio_index( ratio_ism_idx, n_ism, nbands, sf, ratio_ism_idx_prev_sf, bit_stream, next_bit_pos, masa_to_total_energy_ratio[sf], idx_separated_object, &num_zeros ); - /* save previous subframe index values */ - if ( sf < numSf - 1 ) - { - for ( band = 0; band < nbands; band++ ) - { - mvs2s( ratio_ism_idx[band], ratio_ism_idx_prev_sf[band], n_ism ); - } - } - - /* reconstructed values */ - for ( band = 0; band < nbands; band++ ) - { - reconstruct_ism_ratios( ratio_ism_idx[band], n_ism, 1.0f / (float) ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ), ratio_ism[sf][band] ); - } - - if ( ( n_ism > 2 ) && ( idx_separated_object == n_ism - 1 ) ) - { - /* rotate */ - for ( band = 0; band < nbands; band++ ) - { - if ( masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR ) - { - tmp = ratio_ism[sf][band][n_ism - 1]; - ratio_ism[sf][band][n_ism - 1] = ratio_ism[sf][band][0]; - ratio_ism[sf][band][0] = tmp; - } - } - } - - if ( nbands == 1 ) - { - for ( band = 1; band < 5; band++ ) - { - mvr2r( ratio_ism[sf][0], ratio_ism[sf][band], n_ism ); - } - } - } - if ( numSf == 1 ) - { - for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < nbands; band++ ) - { - mvr2r( ratio_ism[0][band], ratio_ism[sf][band], n_ism ); - } - } - } - return; -} -#else static void decode_ism_ratios_fx( UWord16 *bit_stream, /* i : bitstream */ Word16 *next_bit_pos, /* i/o: position in bitstream */ @@ -5357,158 +3154,7 @@ static void decode_ism_ratios_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -static int16_t ivas_decode_masaism_metadata( - IVAS_QMETADATA_HANDLE hQMetaData, - MASA_DECODER_HANDLE hMasa, - MASA_ISM_DATA_HANDLE hMasaIsmData, - const int16_t nchan_ism, - uint16_t *bit_stream, - int16_t *next_bit_pos, - const int16_t idx_separated_object, - const int16_t ism_imp, - const int16_t dirac_bs_md_write_idx, - const int16_t dirac_md_buffer_length ) -{ - int16_t sf, band, dir, nbands, nblocks, obj, i; - float energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - int16_t *band_mapping; - int16_t b; - int16_t bits_ism[MAX_NUM_OBJECTS], index; - uint16_t idx_el, idx_az; - float azimuth, elevation; - int16_t nb_bits_read; - float delta_phi; - int16_t meta_write_index; - - nb_bits_read = *next_bit_pos; - nbands = hQMetaData->q_direction->cfg.nbands; - nblocks = hQMetaData->q_direction->cfg.nblocks; - - /* Read MASA-to-total energy ratios */ - ivas_omasa_decode_masa_to_total( bit_stream, next_bit_pos, hMasaIsmData->masa_to_total_energy_ratio, nbands, nblocks ); - if ( nchan_ism > 1 ) - { - /* read ISM ratios */ - decode_ism_ratios( bit_stream, next_bit_pos, hMasaIsmData->masa_to_total_energy_ratio, energy_ratio_ism, nchan_ism, nbands, nblocks, idx_separated_object ); - } - else - { - for ( sf = 0; sf < nblocks; sf++ ) - { - for ( band = 0; band < nbands; band++ ) - { - energy_ratio_ism[sf][band][0] = 1.0f; - } - } - } - - /* read ISM metadata */ - calculate_nbits_meta( nchan_ism, energy_ratio_ism, hMasaIsmData->masa_to_total_energy_ratio, nblocks, nbands, bits_ism, idx_separated_object, ism_imp ); - - for ( obj = 0; obj < nchan_ism; obj++ ) - { - index = 0; - if ( bits_ism[obj] < 8 ) /* if low resolution, can look to the past */ - { - /* read if same as previous */ - if ( bit_stream[( *next_bit_pos )--] ) - { - azimuth = hMasaIsmData->q_azimuth_old[obj]; - elevation = hMasaIsmData->q_elevation_old[obj]; - } - else - { - for ( i = 0; i < bits_ism[obj]; i++ ) - { - index = ( index << 1 ) + bit_stream[( *next_bit_pos )--]; - } - deindex_spherical_component( index, &azimuth, &elevation, &idx_az, &idx_el, bits_ism[obj], MC_LS_SETUP_INVALID ); - - if ( azimuth * hMasaIsmData->q_azimuth_old[obj] > 0 ) - { - delta_phi = 180.0f / (float) ( no_phi_masa[bits_ism[obj] - 1][idx_el] ); /* 360/2*/ - if ( azimuth - hMasaIsmData->q_azimuth_old[obj] > delta_phi ) - { - azimuth -= delta_phi; - } - else - { - if ( hMasaIsmData->q_azimuth_old[obj] - azimuth > delta_phi ) - { - azimuth += delta_phi; - } - } - } - - hMasaIsmData->q_azimuth_old[obj] = azimuth; - hMasaIsmData->q_elevation_old[obj] = elevation; - } - } - else - { - for ( i = 0; i < bits_ism[obj]; i++ ) - { - index = ( index << 1 ) + bit_stream[( *next_bit_pos )--]; - } - deindex_spherical_component( index, &azimuth, &elevation, &idx_az, &idx_el, bits_ism[obj], MC_LS_SETUP_INVALID ); - hMasaIsmData->q_azimuth_old[obj] = azimuth; - hMasaIsmData->q_elevation_old[obj] = elevation; - } - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + sf ) % dirac_md_buffer_length; - hMasaIsmData->azimuth_ism[obj][meta_write_index] = (int16_t) rint( azimuth ); - hMasaIsmData->elevation_ism[obj][meta_write_index] = (int16_t) rint( elevation ); - } - } - - /* Modify ISM metadata based on the MASA-to-total energy ratios */ - for ( sf = 0; sf < nblocks; sf++ ) - { - for ( band = 0; band < nbands; band++ ) - { - for ( dir = 0; dir < nchan_ism; dir++ ) - { - energy_ratio_ism[sf][band][dir] *= ( 1.0f - hMasaIsmData->masa_to_total_energy_ratio[sf][band] ); - } - } - } - - /* Set data to struct in bins */ - band_mapping = hMasa->data.band_mapping; - for ( band = 0; band < hMasa->config.numCodingBands; ++band ) - { - for ( b = MASA_band_grouping_24[band_mapping[band]]; b < MASA_band_grouping_24[band_mapping[band + 1]]; ++b ) - { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; ++sf ) - { - if ( nblocks == 1 ) - { - i = 0; - } - else - { - i = sf; - } - - meta_write_index = ( dirac_bs_md_write_idx + sf ) % dirac_md_buffer_length; - - for ( dir = 0; dir < nchan_ism; dir++ ) - { - hMasaIsmData->energy_ratio_ism[dir][meta_write_index][b] = energy_ratio_ism[i][band][dir]; - } - } - } - } - return ( nb_bits_read - *next_bit_pos ); -} -#else static Word16 ivas_decode_masaism_metadata_fx( IVAS_QMETADATA_HANDLE hQMetaData, MASA_DECODER_HANDLE hMasa, @@ -5693,9 +3339,7 @@ static Word16 ivas_decode_masaism_metadata_fx( return sub( nb_bits_read, *next_bit_pos ); } -#endif -#ifdef IVAS_FLOAT_FIXED /* Fixed point implementation of rint(). */ @@ -5720,4 +3364,3 @@ static Word16 rint_fx( /* returns in Q0 */ } return res; } -#endif diff --git a/lib_dec/ivas_mc_param_dec.c b/lib_dec/ivas_mc_param_dec.c index 7eb03a376..fc158ca89 100644 --- a/lib_dec/ivas_mc_param_dec.c +++ b/lib_dec/ivas_mc_param_dec.c @@ -45,10 +45,8 @@ #include "math.h" #include "wmc_auto.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif #define INV_EPSILON_MANT 214748365 @@ -64,15 +62,9 @@ typedef struct parameter_band_mapping_struct { -#ifndef IVAS_FLOAT_FIXED - int16_t n_source_bands[20]; - int16_t source_band_idx[20][4]; - float source_band_factor[20][4]; -#else Word16 n_source_bands[20]; Word16 source_band_idx[20][4]; Word16 source_band_factor_fx[20][4]; /*Q15*/ -#endif // IVAS_FLOAT_FIXED } PARAM_MC_PARAMETER_BAND_MAPPING; @@ -80,37 +72,11 @@ typedef struct parameter_band_mapping_struct * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_dec_init( PARAM_MC_DEC_HANDLE hParamMC, const int16_t nchan_in, const int16_t nchan_out ); -#else static void ivas_param_mc_dec_init_fx( PARAM_MC_DEC_HANDLE hParamMC, const Word16 nchan_in, const Word16 nchan_out ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void param_mc_protoSignalComputation( float *RealBuffer, float *ImagBuffer, float *proto_frame_f, const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, const int16_t num_freq_bands ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_dec_copy_diffuse_proto( PARAM_MC_DEC_HANDLE hParamMC, Word32 Cldfb_buffer_real_fx[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 Cldfb_buffer_imag_fx[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const Word16 nY, const Word16 slot_idx ); -#else -static void ivas_param_mc_dec_copy_diffuse_proto( PARAM_MC_DEC_HANDLE hParamMC, float Cldfb_buffer_real[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float Cldfb_buffer_imag[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t nY, const int16_t slot_idx ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_param_mc_range_decoder_LC_fx( UWord16 *bit_buffer, Word16 *x, Word16 *BER_detect, const Word16 sz_seq, const Word16 sz_alphabet, const UWord16 *cft, const UWord16 *sft, const Word16 tot_shift, const Word16 nbbits ); -#else -static int16_t ivas_param_mc_range_decoder_LC( uint16_t *bit_buffer, int16_t *x, int16_t *BER_detect, const int16_t sz_seq, const int16_t sz_alphabet, const uint16_t *cft, const uint16_t *sft, const int16_t tot_shift, const int16_t nbbits ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t ivas_param_mc_uniform_decoder( float *seq, const int16_t sz_seq, const float *alphabet, const int16_t N, uint16_t bit_buffer[PARAM_MC_MAX_BITS] ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_dequantize_cov( PARAM_MC_DEC_HANDLE hDirAC, float *ild_q, float *icc_q, const int16_t param_band_index, const int16_t nY_int, const PARAM_MC_SYNTHESIS_CONF synth_conf, const int16_t nY, const int16_t nX, float *Cx_state, float *Cproto, float *Cy_state ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_get_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, IVAS_OUTPUT_SETUP *hSynthesisOutputSetup, float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], float *mixing_matrix[], float *mixing_matrix_res[], const int16_t nY_int, const PARAM_MC_SYNTHESIS_CONF synth_conf, const int16_t nX, const int16_t nY ); -#else static void ivas_param_mc_get_mixing_matrices_fx( PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ @@ -127,40 +93,15 @@ static void ivas_param_mc_get_mixing_matrices_fx( const Word16 nX, /* i : number of transport channels */ const Word16 nY_cov /* i : number of covariance synthesis output channels */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_get_mono_stereo_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], float *mixing_matrix[], float *mixing_matrix_res[], const int16_t nY_intern, const int16_t nX, const int16_t nY_cov ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void param_mc_update_mixing_matrices( PARAM_MC_DEC_HANDLE hParamMC, float *mixing_matrix[], float *mixing_matrix_res[], const uint16_t nX, const uint16_t nY ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_param_mc_uniform_decoder_fx( Word16 *seq, const Word16 sz_seq, const Word16 *alphabet, const Word16 N, UWord16 bit_buffer[PARAM_MC_MAX_BITS] ); static void ivas_param_mc_dec_compute_interpolator_fx( const UWord16 bAttackPresent, const UWord16 attackPos, const UWord16 interp_length, Word16 *interpolator ); -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_dec_compute_interpolator( const uint16_t bAttackPresent, const uint16_t attackPos, const uint16_t interp_length, float *interpolator ); -static void param_mc_set_num_synth_bands( const int32_t output_Fs, PARAM_MC_DEC_HANDLE hParamMC ); -#else static void param_mc_set_num_synth_bands( const Word32 output_Fs, PARAM_MC_DEC_HANDLE hParamMC ); -#endif -#ifndef IVAS_FLOAT_FIXED -static ivas_error param_mc_get_diff_proto_info( const float *proto_mtx, const uint16_t nchan_transport, const uint16_t nchan_out_cov, PARAM_MC_DIFF_PROTO_INFO *p_diff_proto_info ); - -static void ivas_param_mc_get_param_band_mapping( const int16_t n_target_bands, const int16_t *target_band_grouping, const int16_t n_source_bands, const int16_t *source_band_grouping, PARAM_MC_PARAMETER_BAND_MAPPING *parameter_band_mapping ); -#else static void ivas_param_mc_get_param_band_mapping( const Word16 n_target_bands, const Word16 *target_band_grouping, const Word16 n_source_bands, const Word16 *source_band_grouping, PARAM_MC_PARAMETER_BAND_MAPPING *parameter_band_mapping ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_bs_decode_parameter_values( uint16_t bit_buffer[], int16_t *bit_pos, const int16_t max_bits, int16_t *BER_detect, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParamCodingInfo, const int16_t map_size_wo_lfe, const int16_t map_size, const int16_t num_lfe_bands, const int16_t band_step, const int16_t num_param_bands, float *value_buffer ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_bs_decode_parameter_values_fx( UWord16 bit_buffer[], Word16 *bit_pos, const Word16 max_bits, Word16 *BER_detect, HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParamCodingInfo, const Word16 map_size_wo_lfe, const Word16 map_size, const Word16 num_lfe_bands, const Word16 band_step, const Word16 num_param_bands, Word16 *value_buffer ); static void ivas_param_mc_dequantize_cov_fx( PARAM_MC_DEC_HANDLE hParamMC, Word16 *ild_q_fx, Word16 *icc_q_fx, const Word16 param_band_index, const Word16 nY_cov, const PARAM_MC_SYNTHESIS_CONF synth_conf, const Word16 nY_int, const Word16 nX, Word32 *Cx_state_fx, Word16 Cx_state_e, Word32 *Cproto_fx, Word16 Cproto_e, Word32 *Cy_state_fx, Word16 *Cy_state_e ); static ivas_error param_mc_get_diff_proto_info_fx( const Word32 *proto_mtx, const UWord16 nchan_transport, const UWord16 nchan_out_cov, PARAM_MC_DIFF_PROTO_INFO *p_diff_proto_info, Word16 Q_proto_mtx ); @@ -168,7 +109,6 @@ static void param_mc_update_mixing_matrices_fx( PARAM_MC_DEC_HANDLE hParamMC, Wo static void param_mc_protoSignalComputation_fx( Word32 *RealBuffer_fx, Word32 *ImagBuffer_fx, Word32 *proto_frame_f_fx, const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, const int16_t num_freq_bands /*, Word16 RealBuffer_fx_e, Word16 ImagBuffer_fx_e, Word16 *common_e*/ ); -#endif /*------------------------------------------------------------------------- * ivas_param_mc_dec_open() @@ -176,7 +116,6 @@ static void param_mc_protoSignalComputation_fx( Word32 *RealBuffer_fx, Word32 *I * Open Parametric MC decoder handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_param_mc_dec_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -278,9 +217,9 @@ ivas_error ivas_param_mc_dec_open_fx( move16(); } - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_ls_setup ); move16(); - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); + config_index = ivas_param_mc_get_configuration_index_fx( mc_ls_setup, ivas_total_brate ); nchan_transport = st_ivas->nchan_transport; move16(); @@ -615,1172 +554,270 @@ ivas_error ivas_param_mc_dec_open_fx( st_ivas->hParamMC = hParamMC; return error; } -#else -ivas_error ivas_param_mc_dec_open( + + +/*------------------------------------------------------------------------- + * ivas_param_mc_get_param_band_mapping() + * + * + *-------------------------------------------------------------------------*/ + +static void ivas_param_mc_get_param_band_mapping( + const Word16 n_target_bands, + const Word16 *target_band_grouping, + const Word16 n_source_bands, + const Word16 *source_band_grouping, + PARAM_MC_PARAMETER_BAND_MAPPING *parameter_band_mapping ) +{ + Word16 target_band_idx; + Word16 source_band_idx = 0; + move16(); + Word16 source_band_cnt_total; + + FOR( target_band_idx = 0; target_band_idx < n_target_bands; target_band_idx++ ) + { + Word16 upper = target_band_grouping[target_band_idx + 1]; + Word16 lower = target_band_grouping[target_band_idx]; + Word16 source_band_in_target_band_cnt = 0; + Word16 norm_fac_fx = 32767; // 1.Q15 + source_band_cnt_total = 0; + move16(); + move16(); + move16(); + + FOR( source_band_idx = 0; source_band_idx < n_source_bands; source_band_idx++ ) + { + /* find lowest corresponding source band*/ + test(); + IF( LE_16( source_band_grouping[source_band_idx], lower ) && GE_16( source_band_grouping[source_band_idx + 1], lower ) ) + { + DO + { + Word16 source_bands_in_target_band = sub( s_min( source_band_grouping[source_band_idx + 1], upper ), s_max( source_band_grouping[source_band_idx], lower ) ); + IF( source_bands_in_target_band ) + { + source_band_cnt_total = add( source_band_cnt_total, source_bands_in_target_band ); + parameter_band_mapping->source_band_idx[target_band_idx][source_band_in_target_band_cnt] = source_band_idx; + parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_in_target_band_cnt++] = shl( source_bands_in_target_band, 10 ); /*Q10*/ + move16(); + move16(); + } + source_band_idx++; + } + WHILE( LE_16( source_band_grouping[source_band_idx], upper ) && LT_16( source_band_idx, n_source_bands ) ); + BREAK; + } + } + norm_fac_fx = div_s( 1, source_band_cnt_total ); /*Q15*/ + FOR( source_band_idx = 0; source_band_idx < source_band_in_target_band_cnt; source_band_idx++ ) + { + parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_idx] = shl_sat( mult( parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_idx], norm_fac_fx ) /*Q10*/, 5 ); /*Q15*/ + move16(); + } + parameter_band_mapping->n_source_bands[target_band_idx] = source_band_in_target_band_cnt; + move16(); + } + return; +} + + +/*------------------------------------------------------------------------- + * ivas_param_mc_dec_reconfig() + * + * Reconfiguration of ParamMC decoder + *-------------------------------------------------------------------------*/ + +ivas_error ivas_param_mc_dec_reconfig_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) { - int16_t k, nchan_transport; + Word16 k, nchan_transport; PARAM_MC_DEC_HANDLE hParamMC; - int16_t nchan_out_transport; - int16_t nchan_out_cov; - float proto_matrix[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float proto_mtx_norm; - int16_t max_param_band_residual; - uint16_t config_index; + Word16 nchan_out_transport; + Word16 nchan_out_cov; + Word32 proto_matrix_fx[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; + Word32 proto_mtx_norm_fx; + Word16 max_param_band_residual; + UWord16 config_index; MC_LS_SETUP mc_ls_setup; - float frequency_axis[CLDFB_NO_CHANNELS_MAX]; - AUDIO_CONFIG output_config; - int32_t output_Fs, ivas_total_brate; + Word32 output_Fs, ivas_total_brate; ivas_error error; + Word16 nchan_transport_old; + Word16 num_param_bands_old; + PARAM_MC_PARAMETER_BAND_MAPPING parameter_band_mapping; + Word16 band_grouping_old[20 + 1]; + hParamMC = st_ivas->hParamMC; error = IVAS_ERR_OK; + move32(); + /* save important config information from the previous state */ + nchan_transport_old = st_ivas->nchan_transport; + move32(); + num_param_bands_old = hParamMC->hMetadataPMC->num_parameter_bands; + move32(); /*-----------------------------------------------------------------* * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hParamMC = (PARAM_MC_DEC_HANDLE) malloc( sizeof( PARAM_MC_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - - if ( ( hParamMC->hMetadataPMC = (HANDLE_IVAS_PARAM_MC_METADATA) malloc( sizeof( IVAS_PARAM_MC_METADATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC metadata \n" ) ); - } - output_Fs = st_ivas->hDecoderConfig->output_Fs; - output_config = st_ivas->hDecoderConfig->output_config; + move32(); ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); - nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - hParamMC->hoa_encoder = NULL; - - /* determine the synthesis config */ - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD || st_ivas->transport_config == output_config ) - { - hParamMC->synthesis_conf = PARAM_MC_SYNTH_DIRECT; - } - else if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - hParamMC->synthesis_conf = PARAM_MC_SYNTH_MONO_STEREO; - } - else if ( st_ivas->transport_config != output_config ) - { - if ( ( output_config != IVAS_AUDIO_CONFIG_LS_CUSTOM && nchan_out_transport > audioCfg2channels( output_config ) ) || ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM && nchan_out_transport > st_ivas->hOutSetup.nchan_out_woLFE ) ) - { - hParamMC->synthesis_conf = PARAM_MC_SYNTH_LS_CONV_COV; - /* need to reset the intern config */ - st_ivas->intern_config = output_config; - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - st_ivas->hIntSetup.nchan_out_woLFE = st_ivas->hLsSetupCustom->num_spk; - st_ivas->hIntSetup.ls_azimuth = st_ivas->hLsSetupCustom->ls_azimuth; - st_ivas->hIntSetup.ls_elevation = st_ivas->hLsSetupCustom->ls_elevation; - } - } - else - { - hParamMC->synthesis_conf = PARAM_MC_SYNTH_LS_CONV_CLDFB; - } - } - - hParamMC->ls_conv_dmx_matrix = NULL; + move32(); + mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ); + nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + test(); + IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); } - else + ELSE { nchan_out_cov = nchan_out_transport; + move16(); } - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_ls_setup ); + move16(); + config_index = ivas_param_mc_get_configuration_index_fx( mc_ls_setup, ivas_total_brate ); nchan_transport = st_ivas->nchan_transport; + move16(); - switch ( nchan_transport ) + SWITCH( nchan_transport ) { case 4: case 3: st_ivas->nCPE = 2; + move16(); st_ivas->nSCE = 0; + move16(); st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; + move16(); + BREAK; case 2: st_ivas->nCPE = 1; + move16(); st_ivas->nSCE = 0; + move16(); st_ivas->element_mode_init = IVAS_CPE_MDCT; + move16(); - break; + BREAK; } /*-----------------------------------------------------------------* * set input parameters *-----------------------------------------------------------------*/ - - hParamMC->slot_size = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX; - set_s( hParamMC->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( hParamMC->subframe_nbslots, PARAM_MC_MAX_NSLOTS_IN_SUBFRAME, DEFAULT_JBM_SUBFRAMES_5MS ); - hParamMC->nb_subframes = DEFAULT_JBM_SUBFRAMES_5MS; - - hParamMC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); + hParamMC->num_freq_bands = shr( add( (Word16) Mpy_32_32( output_Fs, INV_CLDFB_BANDWIDTH_Q31 << 1 ), 1 ), 1 ); // Q0 + move16(); hParamMC->max_band_energy_compensation = hParamMC->num_freq_bands; - ivas_param_mc_metadata_open( mc_ls_setup, ivas_total_brate, hParamMC->hMetadataPMC ); - - /* init arrays for quantized parameters */ - if ( ( hParamMC->icc_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - if ( ( hParamMC->icld_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set_f( hParamMC->icld_q, PARAM_MC_DEFAULT_MIN_ILD, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); - set_f( hParamMC->icc_q, 0.0f, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); - - param_mc_set_num_synth_bands( output_Fs, hParamMC ); + move16(); + Copy( hParamMC->band_grouping, band_grouping_old, add( hParamMC->hMetadataPMC->num_parameter_bands, 1 ) ); + ivas_param_mc_metadata_open_fx( mc_ls_setup, ivas_total_brate, hParamMC->hMetadataPMC ); /* Band Grouping */ - if ( hParamMC->hMetadataPMC->num_parameter_bands == 20 ) + IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 20 ) ) { - mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); + Copy( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); } - else if ( hParamMC->hMetadataPMC->num_parameter_bands == 14 ) + ELSE IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 14 ) ) { - mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); + Copy( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); } - else if ( hParamMC->hMetadataPMC->num_parameter_bands == 10 ) + ELSE IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 10 ) ) { - mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); + Copy( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); } - else + ELSE { assert( 0 && "nbands must be 20, 14, or 10!" ); } - /* set max parameter band for abs cov */ - k = 0; - while ( hParamMC->band_grouping[k] <= PARAM_MC_MAX_BAND_ABS_COV_DEC ) - { - hParamMC->max_param_band_abs_cov = ( k++ ); - } - - /*-----------------------------------------------------------------* - * open sub-modules - *-----------------------------------------------------------------*/ - - /* prototype signal computation */ + ivas_param_mc_get_param_band_mapping( hParamMC->hMetadataPMC->num_parameter_bands, hParamMC->band_grouping, num_param_bands_old, band_grouping_old, ¶meter_band_mapping ); - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB || hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + test(); + IF( NE_16( nchan_transport_old, nchan_transport ) || NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) ) { - if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) + Word16 *ild_q_old_fx = hParamMC->icld_q_fx; // Q8 + Word16 *icc_q_old_fx = hParamMC->icc_q_fx; // Q15 + + IF( ( hParamMC->icc_q_fx = (Word16 *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( Word16 ) ) ) == NULL ) { - return error; + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - - /* convert the ls conv dmx matrix into column order matrix format (nchan_out_cldfb x nchan_out) */ - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + IF( ( hParamMC->icld_q_fx = (Word16 *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( Word16 ) ) ) == NULL ) { - if ( ( hParamMC->ls_conv_dmx_matrix = (float *) malloc( nchan_out_transport * nchan_out_cov * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); + } + set16_fx( hParamMC->icld_q_fx, PARAM_MC_DEFAULT_MIN_ILD_FX, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); /*Q8*/ + set16_fx( hParamMC->icc_q_fx, 0, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); /*Q15*/ - for ( k = 0; k < nchan_out_transport; k++ ) - { - mvr2r( st_ivas->hLsSetUpConversion->dmxMtx[k], &hParamMC->ls_conv_dmx_matrix[k * nchan_out_cov], nchan_out_cov ); - } + /* map old to new parameter banding, only for same number of TCs, needs some more thought for a changing number of TCs */ + test(); + IF( NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) && EQ_16( nchan_transport_old, nchan_transport ) ) + { + Word16 new_param_band_idx, param_idx, source_param_idx; + Word16 num_param_lfe; + Word16 *p_icc_new_fx = hParamMC->icc_q_fx; // Q15 + Word16 *p_ild_new_fx = hParamMC->icld_q_fx; // Q8 + Word16 p_ild_new_e = 23; + move16(); + Word16 p_ild_new_tmp; - /* convert ParamMC parameter bands to SFB */ - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + /* ICC */ + num_param_lfe = hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; + move16(); + FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) { - st_ivas->hLsSetUpConversion->sfbCnt = hParamMC->num_param_bands_synth; - for ( k = 0; k <= hParamMC->num_param_bands_synth; k++ ) + FOR( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) { - st_ivas->hLsSetUpConversion->sfbOffset[k] = PARAM_MC_BAND_TO_MDCT_BAND_RATIO * hParamMC->band_grouping[k]; - } - } - else - { - /* close the ls conversion handle immediately, it was only needed to get the DMX matrix in case of DMX in the covariance domain */ - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - } - } - } - - if ( ( hParamMC->proto_matrix_int = (float *) malloc( nchan_out_transport * nchan_transport * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - mvr2r( ivas_param_mc_conf[config_index].dmx_fac, hParamMC->proto_matrix_int, nchan_transport * nchan_out_transport ); - - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - matrix_product( hParamMC->ls_conv_dmx_matrix, nchan_out_cov, nchan_out_transport, 0, ivas_param_mc_conf[config_index].dmx_fac, nchan_out_transport, nchan_transport, 0, proto_matrix ); - - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - proto_mtx_norm = 1.f; - for ( k = 0; k < nchan_transport * nchan_out_cov; k++ ) - { - proto_mtx_norm = max( fabsf( proto_mtx_norm ), fabsf( proto_matrix[k] ) ); - } - proto_mtx_norm = 1.f / proto_mtx_norm; - - /* transfer flattened proto_matrix to 2D in hLsSetupConversion->dmxMtx */ - for ( k = 0; k < nchan_transport; k++ ) - { - for ( int16_t i = 0; i < nchan_out_cov; i++ ) - { - st_ivas->hLsSetUpConversion->dmxMtx[k][i] = proto_matrix[k * nchan_out_cov + i] * proto_mtx_norm; - } - } - } - } - else - { - mvr2r( ivas_param_mc_conf[config_index].dmx_fac, proto_matrix, nchan_out_transport * nchan_transport ); - } - - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - hParamMC->num_outputs_diff = 0; - hParamMC->diff_proto_info = NULL; - hParamMC->h_output_synthesis_params.use_onset_filters = 0; - hParamMC->max_band_decorr = 0; - hParamMC->h_freq_domain_decorr_ap_params = NULL; - hParamMC->h_freq_domain_decorr_ap_state = NULL; - } - else - { - hParamMC->num_outputs_diff = nchan_out_cov; - if ( ( hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - - if ( ( error = param_mc_get_diff_proto_info( proto_matrix, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* decorrelation */ - hParamMC->h_freq_domain_decorr_ap_params = NULL; - hParamMC->h_freq_domain_decorr_ap_state = NULL; - - ivas_dirac_dec_get_frequency_axis( frequency_axis, output_Fs, hParamMC->num_freq_bands ); - - if ( ( error = ivas_dirac_dec_decorr_open( &( hParamMC->h_freq_domain_decorr_ap_params ), &( hParamMC->h_freq_domain_decorr_ap_state ), hParamMC->num_freq_bands, hParamMC->num_outputs_diff, hParamMC->diff_proto_info->num_protos_diff, - DIRAC_SYNTHESIS_COV_MC_LS, frequency_axis, nchan_transport, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - hParamMC->h_output_synthesis_params.use_onset_filters = 0; - hParamMC->max_band_decorr = hParamMC->h_freq_domain_decorr_ap_params->max_band_decorr; - } - hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->hMetadataPMC->nbands_coded]; - max_param_band_residual = 0; - - for ( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) - { - if ( hParamMC->band_grouping[k] <= hParamMC->max_band_decorr ) - { - max_param_band_residual = k; - assert( hParamMC->band_grouping[k] == hParamMC->max_band_decorr ); - break; - } - } - - /* output synthesis */ - if ( ( error = ivas_dirac_dec_output_synthesis_cov_open( &( hParamMC->h_output_synthesis_params ), &( hParamMC->h_output_synthesis_cov_state ), hParamMC->max_band_decorr, PARAM_MC_MAX_NSLOTS, - hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual, nchan_transport, nchan_out_cov, proto_matrix ) ) != IVAS_ERR_OK ) - { - return error; - } - - ivas_param_mc_dec_compute_interpolator( 0, 0, DEFAULT_JBM_CLDFB_TIMESLOTS, hParamMC->h_output_synthesis_params.interpolator ); - - /* Head or external rotation */ - if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) - { - if ( ( hParamMC->hoa_encoder = (float *) malloc( st_ivas->hTransSetup.nchan_out_woLFE * MAX_INTERN_CHANNELS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - compute_hoa_encoder_mtx( st_ivas->hTransSetup.ls_azimuth, st_ivas->hTransSetup.ls_elevation, hParamMC->hoa_encoder, st_ivas->hTransSetup.nchan_out_woLFE, HEAD_ROTATION_HOA_ORDER ); - } - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - if ( hParamMC->max_band_decorr > 0 ) - { - if ( ( hParamMC->proto_frame_f = (float *) malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - - if ( ( hParamMC->proto_frame_dec_f = (float *) malloc( 2 * nchan_out_cov * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - } - else - { - hParamMC->proto_frame_f = NULL; - hParamMC->proto_frame_dec_f = NULL; - } - - ivas_param_mc_dec_init( hParamMC, nchan_transport, nchan_out_cov ); - - if ( hParamMC->synthesis_conf != PARAM_MC_SYNTH_MONO_STEREO ) - { - int16_t n_cldfb_slots; - - n_cldfb_slots = DEFAULT_JBM_CLDFB_TIMESLOTS; - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - n_cldfb_slots = MAX_JBM_CLDFB_TIMESLOTS; - } - if ( ( hParamMC->Cldfb_RealBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); - } - set_zero( hParamMC->Cldfb_RealBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands ); - - if ( ( hParamMC->Cldfb_ImagBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); - } - set_zero( hParamMC->Cldfb_ImagBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands ); - - if ( st_ivas->hTcBuffer == NULL ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, nchan_transport, nchan_transport, 0, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - hParamMC->Cldfb_RealBuffer_tc = NULL; - hParamMC->Cldfb_ImagBuffer_tc = NULL; - } - - hParamMC->subframes_rendered = 0; - hParamMC->slots_rendered = 0; - - st_ivas->hParamMC = hParamMC; - - return error; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_param_mc_get_param_band_mapping() - * - * - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static void ivas_param_mc_get_param_band_mapping( - const Word16 n_target_bands, - const Word16 *target_band_grouping, - const Word16 n_source_bands, - const Word16 *source_band_grouping, - PARAM_MC_PARAMETER_BAND_MAPPING *parameter_band_mapping ) -{ - Word16 target_band_idx; - Word16 source_band_idx = 0; - move16(); - Word16 source_band_cnt_total; - - FOR( target_band_idx = 0; target_band_idx < n_target_bands; target_band_idx++ ) - { - Word16 upper = target_band_grouping[target_band_idx + 1]; - Word16 lower = target_band_grouping[target_band_idx]; - Word16 source_band_in_target_band_cnt = 0; - Word16 norm_fac_fx = 32767; // 1.Q15 - source_band_cnt_total = 0; - move16(); - move16(); - move16(); - - FOR( source_band_idx = 0; source_band_idx < n_source_bands; source_band_idx++ ) - { - /* find lowest corresponding source band*/ - test(); - IF( LE_16( source_band_grouping[source_band_idx], lower ) && GE_16( source_band_grouping[source_band_idx + 1], lower ) ) - { - DO - { - Word16 source_bands_in_target_band = sub( s_min( source_band_grouping[source_band_idx + 1], upper ), s_max( source_band_grouping[source_band_idx], lower ) ); - IF( source_bands_in_target_band ) - { - source_band_cnt_total = add( source_band_cnt_total, source_bands_in_target_band ); - parameter_band_mapping->source_band_idx[target_band_idx][source_band_in_target_band_cnt] = source_band_idx; - parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_in_target_band_cnt++] = shl( source_bands_in_target_band, 10 ); /*Q10*/ - move16(); - move16(); - } - source_band_idx++; - } - WHILE( LE_16( source_band_grouping[source_band_idx], upper ) && LT_16( source_band_idx, n_source_bands ) ); - BREAK; - } - } - norm_fac_fx = div_s( 1, source_band_cnt_total ); /*Q15*/ - FOR( source_band_idx = 0; source_band_idx < source_band_in_target_band_cnt; source_band_idx++ ) - { - parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_idx] = shl_sat( mult( parameter_band_mapping->source_band_factor_fx[target_band_idx][source_band_idx], norm_fac_fx ) /*Q10*/, 5 ); /*Q15*/ - move16(); - } - parameter_band_mapping->n_source_bands[target_band_idx] = source_band_in_target_band_cnt; - move16(); - } - return; -} -#else -static void ivas_param_mc_get_param_band_mapping( - const int16_t n_target_bands, - const int16_t *target_band_grouping, - const int16_t n_source_bands, - const int16_t *source_band_grouping, - PARAM_MC_PARAMETER_BAND_MAPPING *parameter_band_mapping ) -{ - int16_t target_band_idx; - int16_t source_band_idx = 0; - int16_t source_band_cnt_total; - - for ( target_band_idx = 0; target_band_idx < n_target_bands; target_band_idx++ ) - { - int16_t upper = target_band_grouping[target_band_idx + 1]; - int16_t lower = target_band_grouping[target_band_idx]; - int16_t source_band_in_target_band_cnt = 0; - float norm_fac = 1.0f; - source_band_cnt_total = 0; - for ( source_band_idx = 0; source_band_idx < n_source_bands; source_band_idx++ ) - { - /* find lowest corresponding source band*/ - if ( source_band_grouping[source_band_idx] <= lower && source_band_grouping[source_band_idx + 1] >= lower ) - { - do - { - int16_t source_bands_in_target_band = min( source_band_grouping[source_band_idx + 1], upper ) - max( source_band_grouping[source_band_idx], lower ); - if ( source_bands_in_target_band ) - { - source_band_cnt_total += source_bands_in_target_band; - parameter_band_mapping->source_band_idx[target_band_idx][source_band_in_target_band_cnt] = source_band_idx; - parameter_band_mapping->source_band_factor[target_band_idx][source_band_in_target_band_cnt++] = (float) source_bands_in_target_band; - } - source_band_idx++; - } while ( source_band_grouping[source_band_idx] <= upper && source_band_idx < n_source_bands ); - break; - } - } - norm_fac = 1.0f / ( (float) source_band_cnt_total ); - for ( source_band_idx = 0; source_band_idx < source_band_in_target_band_cnt; source_band_idx++ ) - { - - parameter_band_mapping->source_band_factor[target_band_idx][source_band_idx] *= norm_fac; - } - parameter_band_mapping->n_source_bands[target_band_idx] = source_band_in_target_band_cnt; - } - - return; -} -#endif // IVAS_FLOAT_FIXED - - -/*------------------------------------------------------------------------- - * ivas_param_mc_dec_reconfig() - * - * Reconfiguration of ParamMC decoder - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_param_mc_dec_reconfig_fx( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - Word16 k, nchan_transport; - PARAM_MC_DEC_HANDLE hParamMC; - Word16 nchan_out_transport; - Word16 nchan_out_cov; - Word32 proto_matrix_fx[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - Word32 proto_mtx_norm_fx; - Word16 max_param_band_residual; - UWord16 config_index; - MC_LS_SETUP mc_ls_setup; - Word32 output_Fs, ivas_total_brate; - ivas_error error; - Word16 nchan_transport_old; - Word16 num_param_bands_old; - PARAM_MC_PARAMETER_BAND_MAPPING parameter_band_mapping; - Word16 band_grouping_old[20 + 1]; - - hParamMC = st_ivas->hParamMC; - error = IVAS_ERR_OK; - move32(); - /* save important config information from the previous state */ - nchan_transport_old = st_ivas->nchan_transport; - move32(); - num_param_bands_old = hParamMC->hMetadataPMC->num_parameter_bands; - move32(); - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - move32(); - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - move32(); - mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ); - nchan_out_transport = add( st_ivas->hTransSetup.nchan_out_woLFE, st_ivas->hTransSetup.num_lfe ); - - test(); - IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - nchan_out_cov = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); - } - ELSE - { - nchan_out_cov = nchan_out_transport; - move16(); - } - - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); - move16(); - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); - nchan_transport = st_ivas->nchan_transport; - move16(); - - SWITCH( nchan_transport ) - { - case 4: - case 3: - st_ivas->nCPE = 2; - move16(); - st_ivas->nSCE = 0; - move16(); - st_ivas->element_mode_init = IVAS_CPE_MDCT; - move16(); - BREAK; - case 2: - st_ivas->nCPE = 1; - move16(); - st_ivas->nSCE = 0; - move16(); - st_ivas->element_mode_init = IVAS_CPE_MDCT; - move16(); - - BREAK; - } - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - hParamMC->num_freq_bands = shr( add( (Word16) Mpy_32_32( output_Fs, INV_CLDFB_BANDWIDTH_Q31 << 1 ), 1 ), 1 ); // Q0 - move16(); - hParamMC->max_band_energy_compensation = hParamMC->num_freq_bands; - move16(); - - Copy( hParamMC->band_grouping, band_grouping_old, add( hParamMC->hMetadataPMC->num_parameter_bands, 1 ) ); - ivas_param_mc_metadata_open_fx( mc_ls_setup, ivas_total_brate, hParamMC->hMetadataPMC ); - /* Band Grouping */ - IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 20 ) ) - { - Copy( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); - } - ELSE IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 14 ) ) - { - Copy( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); - } - ELSE IF( EQ_16( hParamMC->hMetadataPMC->num_parameter_bands, 10 ) ) - { - Copy( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); - } - ELSE - { - assert( 0 && "nbands must be 20, 14, or 10!" ); - } - - ivas_param_mc_get_param_band_mapping( hParamMC->hMetadataPMC->num_parameter_bands, hParamMC->band_grouping, num_param_bands_old, band_grouping_old, ¶meter_band_mapping ); - - test(); - IF( NE_16( nchan_transport_old, nchan_transport ) || NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) ) - { - Word16 *ild_q_old_fx = hParamMC->icld_q_fx; // Q8 - Word16 *icc_q_old_fx = hParamMC->icc_q_fx; // Q15 - - IF( ( hParamMC->icc_q_fx = (Word16 *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - IF( ( hParamMC->icld_q_fx = (Word16 *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set16_fx( hParamMC->icld_q_fx, PARAM_MC_DEFAULT_MIN_ILD_FX, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); /*Q8*/ - set16_fx( hParamMC->icc_q_fx, 0, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); /*Q15*/ - - /* map old to new parameter banding, only for same number of TCs, needs some more thought for a changing number of TCs */ - test(); - IF( NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) && EQ_16( nchan_transport_old, nchan_transport ) ) - { - Word16 new_param_band_idx, param_idx, source_param_idx; - Word16 num_param_lfe; - Word16 *p_icc_new_fx = hParamMC->icc_q_fx; // Q15 - Word16 *p_ild_new_fx = hParamMC->icld_q_fx; // Q8 - Word16 p_ild_new_e = 23; - move16(); - Word16 p_ild_new_tmp; - - /* ICC */ - num_param_lfe = hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; - move16(); - FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) - { - FOR( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) - { - *p_icc_new_fx = 0; - move16(); - FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) - { - *p_icc_new_fx = add( *p_icc_new_fx, mult( icc_q_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx] ) ); /*Q15*/ - move16(); - } - p_icc_new_fx++; - } - } - - /* ILD */ - num_param_lfe = hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; - move16(); - FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) - { - FOR( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) - { - *p_ild_new_fx = 0; - move16(); - FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) - { - p_ild_new_tmp = extract_h( BASOP_util_Pow2( L_mult0( 10885 /*log2(10)/10*2^15*/, ild_q_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx] ), 8, &p_ild_new_e ) ); // 31 - p_ild_new_e - 16 - *p_ild_new_fx = add( *p_ild_new_fx, mult( p_ild_new_tmp, parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx] ) ); - move16(); - } - *p_ild_new_fx = extract_l( L_shr( Mpy_32_16_1( L_add( BASOP_Util_Log2( *p_ild_new_fx ), L_add( 16 << Q25, L_shl( p_ild_new_e, 25 ) ) ), 24660 /*3.Q13*/ ), 15 ) ); // Q8 - move16(); - p_ild_new_fx++; - } - } - } - free( ild_q_old_fx ); - free( icc_q_old_fx ); - } - - param_mc_set_num_synth_bands( output_Fs, hParamMC ); - - /* set max parameter band for abs cov */ - k = 0; - move16(); - WHILE( LE_16( hParamMC->band_grouping[k], PARAM_MC_MAX_BAND_ABS_COV_DEC ) ) - { - hParamMC->max_param_band_abs_cov = k; - move16(); - k = add( k, 1 ); - } - - /*-----------------------------------------------------------------* - * open sub-modules - *-----------------------------------------------------------------*/ - - /* prototype signal computation */ - - IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - IF( NE_16( nchan_transport_old, nchan_transport ) ) - { - IF( st_ivas->hLsSetUpConversion != NULL ) - { - ivas_ls_setup_conversion_close_fx( &st_ivas->hLsSetUpConversion ); - } - - IF( NE_32( ( error = ivas_ls_setup_conversion_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* convert the ls conv dmx matrix into column order matrix format (nchan_out_cldfb x nchan_out) */ - free( hParamMC->ls_conv_dmx_matrix_fx ); - - IF( ( hParamMC->ls_conv_dmx_matrix_fx = (Word32 *) malloc( nchan_out_transport * nchan_out_cov * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - FOR( k = 0; k < nchan_out_transport; k++ ) - { - Copy32( st_ivas->hLsSetUpConversion->dmxMtx_fx[k], &hParamMC->ls_conv_dmx_matrix_fx[k * nchan_out_cov], nchan_out_cov ); - } - } - /* convert ParamMC parameter bands to SFB */ - - st_ivas->hLsSetUpConversion->sfbCnt = hParamMC->num_param_bands_synth; - move16(); - FOR( k = 0; k <= hParamMC->num_param_bands_synth; k++ ) - { - st_ivas->hLsSetUpConversion->sfbOffset[k] = imult1616( PARAM_MC_BAND_TO_MDCT_BAND_RATIO, hParamMC->band_grouping[k] ); - move16(); - } - FOR( ; k < MAX_SFB + 2; k++ ) - { - st_ivas->hLsSetUpConversion->sfbOffset[k] = 0; - move16(); - } - } - - IF( NE_16( nchan_transport_old, nchan_transport ) ) - { - free( hParamMC->proto_matrix_int_fx ); - IF( ( hParamMC->proto_matrix_int_fx = (Word32 *) malloc( nchan_out_transport * nchan_transport * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - hParamMC->proto_matrix_int_len = imult1616( nchan_out_transport, nchan_transport ); - move16(); - Copy32( ivas_param_mc_conf[config_index].dmx_fac_fx, hParamMC->proto_matrix_int_fx, hParamMC->proto_matrix_int_len ); /*Q31*/ - } - - test(); - IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - Scale_sig32( hParamMC->ls_conv_dmx_matrix_fx, imult1616( nchan_out_transport, nchan_out_cov ), -4 ); // Q30 -> Q26 - matrix_product_fx( hParamMC->ls_conv_dmx_matrix_fx, nchan_out_cov, nchan_out_transport, 0, - ivas_param_mc_conf[config_index].dmx_fac_fx, nchan_out_transport, nchan_transport, 0, - proto_matrix_fx /*Q26*/ ); - Scale_sig32( hParamMC->ls_conv_dmx_matrix_fx, imult1616( nchan_out_transport, nchan_out_cov ), 4 ); // Q26 -> Q30 - - IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - proto_mtx_norm_fx = ONE_IN_Q26; // Q26 - move32(); - FOR( k = 0; k < nchan_transport * nchan_out_cov; k++ ) - { - proto_mtx_norm_fx = L_max( L_abs( proto_mtx_norm_fx ), L_abs( proto_matrix_fx[k] ) ); // Q26 - } - proto_mtx_norm_fx = divide3232( ONE_IN_Q26, proto_mtx_norm_fx ); /*Q15*/ - - /* transfer flattened proto_matrix to 2D in hLsSetupConversion->dmxMtx */ - FOR( k = 0; k < nchan_transport; k++ ) - { - FOR( Word16 i = 0; i < nchan_out_cov; i++ ) - { - st_ivas->hLsSetUpConversion->dmxMtx_fx[k][i] = L_shl( Mpy_32_16_1( proto_matrix_fx[k * nchan_out_cov + i], (Word16) proto_mtx_norm_fx ), 4 ); // Q26 -> Q30 - move32(); - } - } - } - } - ELSE - { - Copy32( ivas_param_mc_conf[config_index].dmx_fac_fx, proto_matrix_fx, imult1616( nchan_out_transport, nchan_transport ) ); // proto_matrix_fx -> Q31 - Scale_sig32( proto_matrix_fx, imult1616( nchan_out_transport, nchan_transport ), -5 ); // proto_matrix_fx -> Q26 - } - - test(); - IF( NE_16( nchan_transport_old, nchan_transport ) && NE_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - Word16 i; - Word16 len; - - /* close decorrelator */ - ivas_dirac_dec_decorr_close_fx( &hParamMC->h_freq_domain_decorr_ap_params, &hParamMC->h_freq_domain_decorr_ap_state ); - - /* deallocate diffuse prototype info */ - IF( hParamMC->diff_proto_info ) - { - FOR( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) - { - free( hParamMC->diff_proto_info->source_chan_idx[i] ); - hParamMC->diff_proto_info->source_chan_idx[i] = NULL; - - free( hParamMC->diff_proto_info->proto_fac_fx[i] ); - hParamMC->diff_proto_info->proto_fac_fx[i] = NULL; - } - - free( hParamMC->diff_proto_info->source_chan_idx ); - hParamMC->diff_proto_info->source_chan_idx = NULL; - - free( hParamMC->diff_proto_info->proto_fac_fx ); - hParamMC->diff_proto_info->proto_fac_fx = NULL; - - free( hParamMC->diff_proto_info->proto_index_diff ); - hParamMC->diff_proto_info->proto_index_diff = NULL; - - free( hParamMC->diff_proto_info->num_source_chan_diff ); - hParamMC->diff_proto_info->num_source_chan_diff = NULL; - - free( hParamMC->diff_proto_info ); - hParamMC->diff_proto_info = NULL; - } - - hParamMC->num_outputs_diff = nchan_out_cov; - move16(); - IF( ( hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - IF( ( param_mc_get_diff_proto_info_fx( proto_matrix_fx, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info, Q26 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* decorrelation */ - hParamMC->h_freq_domain_decorr_ap_params = NULL; - hParamMC->h_freq_domain_decorr_ap_state = NULL; - - Word16 frequency_axis_fx[CLDFB_NO_CHANNELS_MAX]; - ivas_dirac_dec_get_frequency_axis_fx( frequency_axis_fx, output_Fs, hParamMC->num_freq_bands ); // Q0 - - IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( hParamMC->h_freq_domain_decorr_ap_params ), &( hParamMC->h_freq_domain_decorr_ap_state ), hParamMC->num_freq_bands, hParamMC->num_outputs_diff, - hParamMC->diff_proto_info->num_protos_diff, DIRAC_SYNTHESIS_COV_MC_LS, frequency_axis_fx, nchan_transport, output_Fs ) ), - IVAS_ERR_OK ) ) - { - return error; - } - hParamMC->h_output_synthesis_params.use_onset_filters = 0; - move16(); - hParamMC->max_band_decorr = hParamMC->h_freq_domain_decorr_ap_params->max_band_decorr; - move16(); - /* init decorrelation */ - IF( hParamMC->max_band_decorr > 0 ) - { - - len = imult1616( hParamMC->diff_proto_info->num_protos_diff, hParamMC->h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr ); - - /* init onsetDetectionPower */ - set_zero_fx( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_1_fx, len ); - set_zero_fx( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_2_fx, len ); - hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.q_onset_detector = Q31; - move16(); - } - } - hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->hMetadataPMC->nbands_coded]; - move16(); - max_param_band_residual = 0; - move16(); - - FOR( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) - { - IF( LE_16( hParamMC->band_grouping[k], hParamMC->max_band_decorr ) ) - { - max_param_band_residual = k; - move16(); - assert( hParamMC->band_grouping[k] == hParamMC->max_band_decorr ); - BREAK; - } - } - - test(); - IF( NE_16( nchan_transport_old, nchan_transport ) || NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) ) - { - DIRAC_OUTPUT_SYNTHESIS_COV_STATE cov_state_old = hParamMC->h_output_synthesis_cov_state; - DIRAC_OUTPUT_SYNTHESIS_PARAMS params_old = hParamMC->h_output_synthesis_params; - - Word32 tmp_buf_fx[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - - set_zero_fx( tmp_buf_fx, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - - /* output synthesis */ - IF( NE_32( ( error = ivas_dirac_dec_output_synthesis_cov_open_fx( &( hParamMC->h_output_synthesis_params ), &( hParamMC->h_output_synthesis_cov_state ), hParamMC->max_band_decorr, PARAM_MC_MAX_NSLOTS, - hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual, nchan_transport, nchan_out_cov, proto_matrix_fx ) ), - IVAS_ERR_OK ) ) - { - return error; - } - - ivas_param_mc_dec_compute_interpolator_fx( 0, 0, DEFAULT_JBM_CLDFB_TIMESLOTS, hParamMC->h_output_synthesis_params.interpolator_fx ); - - ivas_dirac_dec_output_synthesis_cov_init_fx( &( hParamMC->h_output_synthesis_cov_state ), nchan_transport, nchan_out_cov, hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual ); - - /* map old to new parameter banding, only for same number of TCs, needs some more thought for changing number of TCs */ - test(); - IF( NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) && EQ_16( nchan_transport_old, nchan_transport ) ) - { - Word16 new_param_band_idx, source_param_idx; - - FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) - { - FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) - { - /* Cx */ - v_multc_fixed_16( cov_state_old.cx_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_transport_old, nchan_transport_old ) ); // Q(31 - cov_state_old.cx_old_e) - v_add_fixed_me( tmp_buf_fx, cov_state_old.cx_old_e[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.cx_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cx_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx], imult1616( nchan_transport_old, nchan_transport_old ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx]) - /* Cy */ - v_multc_fixed_16( cov_state_old.cy_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_out_cov, nchan_out_cov ) ); // Q(31 - cov_state_old.cy_old_e) - v_add_fixed_me( tmp_buf_fx, cov_state_old.cy_old_e[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.cy_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cy_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx], imult1616( nchan_out_cov, nchan_out_cov ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx]) - /* mixing matrix*/ - v_multc_fixed_16( cov_state_old.mixing_matrix_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_transport_old, nchan_out_cov ) ); // Q(31 - mixing_matrix_old_exp) - v_add_fixed_me( tmp_buf_fx, cov_state_old.mixing_matrix_old_exp[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx], imult1616( nchan_transport_old, nchan_out_cov ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx]) - } - } - FOR( new_param_band_idx = 0; new_param_band_idx < max_param_band_residual; new_param_band_idx++ ) - { - FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) - { - /* residual mixing matrix*/ - v_multc_fixed_16( cov_state_old.mixing_matrix_res_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_out_cov, nchan_out_cov ) ); // Q(31 - mixing_matrix_res_old_exp) - v_add_fixed_me( tmp_buf_fx, cov_state_old.mixing_matrix_res_old_exp[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx], imult1616( nchan_out_cov, nchan_out_cov ), 0 ); // Q(hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx]) - } - } - } - ivas_dirac_dec_output_synthesis_cov_close_fx( ¶ms_old, &cov_state_old ); - } - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - test(); - IF( ( hParamMC->max_band_decorr > 0 ) && NE_16( nchan_transport_old, nchan_transport ) ) - { - free( hParamMC->proto_frame_f_fx ); - IF( ( hParamMC->proto_frame_f_fx = (Word32 *) malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set_zero_fx( hParamMC->proto_frame_f_fx, shl( imult1616( hParamMC->diff_proto_info->num_protos_diff, hParamMC->num_freq_bands ), 1 ) ); - } - - - IF( NE_16( nchan_transport_old, nchan_transport ) ) - { - IF( NE_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - Word16 n_cldfb_slots; - IF( hParamMC->Cldfb_RealBuffer_tc_fx != NULL ) - { - free( hParamMC->Cldfb_RealBuffer_tc_fx ); - hParamMC->Cldfb_RealBuffer_tc_fx = NULL; // Q12 - } - IF( hParamMC->Cldfb_ImagBuffer_tc_fx != NULL ) - { - free( hParamMC->Cldfb_ImagBuffer_tc_fx ); - hParamMC->Cldfb_ImagBuffer_tc_fx = NULL; // Q12 - } - - n_cldfb_slots = DEFAULT_JBM_CLDFB_TIMESLOTS; - move16(); - IF( st_ivas->hDecoderConfig->Opt_tsm ) - { - n_cldfb_slots = MAX_JBM_CLDFB_TIMESLOTS; - move16(); - } - Word16 cldfb_size = imult1616( imult1616( n_cldfb_slots, nchan_transport ), hParamMC->num_freq_bands ); - IF( ( hParamMC->Cldfb_RealBuffer_tc_fx = (Word32 *) malloc( cldfb_size * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); - } - set_zero_fx( hParamMC->Cldfb_RealBuffer_tc_fx, cldfb_size ); - - IF( ( hParamMC->Cldfb_ImagBuffer_tc_fx = (Word32 *) malloc( cldfb_size * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); - } - set_zero_fx( hParamMC->Cldfb_ImagBuffer_tc_fx, cldfb_size ); - } - ELSE - { - IF( hParamMC->Cldfb_RealBuffer_tc_fx != NULL ) - { - free( hParamMC->Cldfb_RealBuffer_tc_fx ); - hParamMC->Cldfb_RealBuffer_tc_fx = NULL; - } - IF( hParamMC->Cldfb_ImagBuffer_tc_fx != NULL ) - { - free( hParamMC->Cldfb_ImagBuffer_tc_fx ); - hParamMC->Cldfb_ImagBuffer_tc_fx = NULL; - } - } - } - return error; -} -#else // IVAS_FLOAT_FIXED -ivas_error ivas_param_mc_dec_reconfig( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t k, nchan_transport; - PARAM_MC_DEC_HANDLE hParamMC; - int16_t nchan_out_transport; - int16_t nchan_out_cov; - float proto_matrix[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float proto_mtx_norm; - int16_t max_param_band_residual; - uint16_t config_index; - MC_LS_SETUP mc_ls_setup; - float frequency_axis[CLDFB_NO_CHANNELS_MAX]; - int32_t output_Fs, ivas_total_brate; - ivas_error error; - int16_t nchan_transport_old; - int16_t num_param_bands_old; - PARAM_MC_PARAMETER_BAND_MAPPING parameter_band_mapping; - int16_t band_grouping_old[20 + 1]; - - error = IVAS_ERR_OK; - hParamMC = st_ivas->hParamMC; - - /* save important config information from the previous state */ - nchan_transport_old = st_ivas->nchan_transport; - num_param_bands_old = hParamMC->hMetadataPMC->num_parameter_bands; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ); - nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - } - else - { - nchan_out_cov = nchan_out_transport; - } - - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); - config_index = ivas_param_mc_get_configuration_index( mc_ls_setup, ivas_total_brate ); - nchan_transport = st_ivas->nchan_transport; - - switch ( nchan_transport ) - { - case 4: - case 3: - st_ivas->nCPE = 2; - st_ivas->nSCE = 0; - st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; - case 2: - st_ivas->nCPE = 1; - st_ivas->nSCE = 0; - st_ivas->element_mode_init = IVAS_CPE_MDCT; - - break; - } - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - hParamMC->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - hParamMC->max_band_energy_compensation = hParamMC->num_freq_bands; - - mvs2s( hParamMC->band_grouping, band_grouping_old, hParamMC->hMetadataPMC->num_parameter_bands + 1 ); - - ivas_param_mc_metadata_open( mc_ls_setup, ivas_total_brate, hParamMC->hMetadataPMC ); - - /* Band Grouping */ - if ( hParamMC->hMetadataPMC->num_parameter_bands == 20 ) - { - mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); - } - else if ( hParamMC->hMetadataPMC->num_parameter_bands == 14 ) - { - mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); - } - else if ( hParamMC->hMetadataPMC->num_parameter_bands == 10 ) - { - mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); - } - else - { - assert( 0 && "nbands must be 20, 14, or 10!" ); - } - - ivas_param_mc_get_param_band_mapping( hParamMC->hMetadataPMC->num_parameter_bands, hParamMC->band_grouping, num_param_bands_old, band_grouping_old, ¶meter_band_mapping ); - - if ( nchan_transport_old != nchan_transport || num_param_bands_old != hParamMC->hMetadataPMC->num_parameter_bands ) - { - float *ild_q_old = hParamMC->icld_q; - float *icc_q_old = hParamMC->icc_q; - - - /* init arrays for the quantized parameters */ - if ( ( hParamMC->icc_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - if ( ( hParamMC->icld_q = (float *) malloc( hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set_f( hParamMC->icld_q, PARAM_MC_DEFAULT_MIN_ILD, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe ); - set_f( hParamMC->icc_q, 0.0f, hParamMC->hMetadataPMC->num_parameter_bands * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe ); - - /* map old to new parameter banding, only for same number of TCs, needs some more thought for a changing number of TCs */ - if ( num_param_bands_old != hParamMC->hMetadataPMC->num_parameter_bands && nchan_transport_old == nchan_transport ) - { - int16_t new_param_band_idx, param_idx, source_param_idx; - int16_t num_param_lfe; - float *p_icc_new = hParamMC->icc_q; - float *p_ild_new = hParamMC->icld_q; - - /* ICC */ - num_param_lfe = hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; - for ( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) - { - for ( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) - { - *p_icc_new = 0.0f; - for ( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) - { - *p_icc_new += icc_q_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx] * parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx]; - } - p_icc_new++; + *p_icc_new_fx = 0; + move16(); + FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) + { + *p_icc_new_fx = add( *p_icc_new_fx, mult( icc_q_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx] ) ); /*Q15*/ + move16(); + } + p_icc_new_fx++; } } /* ILD */ num_param_lfe = hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; - for ( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) + move16(); + FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) { - for ( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) + FOR( param_idx = 0; param_idx < num_param_lfe; param_idx++ ) { - *p_ild_new = 0.0f; - for ( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) + *p_ild_new_fx = 0; + move16(); + FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) { - *p_ild_new += powf( 10.0f, ild_q_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx] / 10.0f ) * parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx]; + p_ild_new_tmp = extract_h( BASOP_util_Pow2( L_mult0( 10885 /*log2(10)/10*2^15*/, ild_q_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx] * num_param_lfe + param_idx] ), 8, &p_ild_new_e ) ); // 31 - p_ild_new_e - 16 + *p_ild_new_fx = add( *p_ild_new_fx, mult( p_ild_new_tmp, parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx] ) ); + move16(); } - *p_ild_new = 10.0f * log10f( *p_ild_new ); - p_ild_new++; + *p_ild_new_fx = extract_l( L_shr( Mpy_32_16_1( L_add( BASOP_Util_Log2( *p_ild_new_fx ), L_add( 16 << Q25, L_shl( p_ild_new_e, 25 ) ) ), 24660 /*3.Q13*/ ), 15 ) ); // Q8 + move16(); + p_ild_new_fx++; } } } - free( ild_q_old ); - free( icc_q_old ); + free( ild_q_old_fx ); + free( icc_q_old_fx ); } param_mc_set_num_synth_bands( output_Fs, hParamMC ); /* set max parameter band for abs cov */ k = 0; - while ( hParamMC->band_grouping[k] <= PARAM_MC_MAX_BAND_ABS_COV_DEC ) + move16(); + WHILE( LE_16( hParamMC->band_grouping[k], PARAM_MC_MAX_BAND_ABS_COV_DEC ) ) { - hParamMC->max_param_band_abs_cov = ( k++ ); + hParamMC->max_param_band_abs_cov = k; + move16(); + k = add( k, 1 ); } /*-----------------------------------------------------------------* @@ -1789,109 +826,122 @@ ivas_error ivas_param_mc_dec_reconfig( /* prototype signal computation */ - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - if ( nchan_transport_old != nchan_transport ) + IF( NE_16( nchan_transport_old, nchan_transport ) ) { - if ( st_ivas->hLsSetUpConversion != NULL ) + IF( st_ivas->hLsSetUpConversion != NULL ) { - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); + ivas_ls_setup_conversion_close_fx( &st_ivas->hLsSetUpConversion ); } - if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_ls_setup_conversion_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } /* convert the ls conv dmx matrix into column order matrix format (nchan_out_cldfb x nchan_out) */ - free( hParamMC->ls_conv_dmx_matrix ); - if ( ( hParamMC->ls_conv_dmx_matrix = (float *) malloc( nchan_out_transport * nchan_out_cov * sizeof( float ) ) ) == NULL ) + free( hParamMC->ls_conv_dmx_matrix_fx ); + + IF( ( hParamMC->ls_conv_dmx_matrix_fx = (Word32 *) malloc( nchan_out_transport * nchan_out_cov * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - for ( k = 0; k < nchan_out_transport; k++ ) + FOR( k = 0; k < nchan_out_transport; k++ ) { - mvr2r( st_ivas->hLsSetUpConversion->dmxMtx[k], &hParamMC->ls_conv_dmx_matrix[k * nchan_out_cov], nchan_out_cov ); + Copy32( st_ivas->hLsSetUpConversion->dmxMtx_fx[k], &hParamMC->ls_conv_dmx_matrix_fx[k * nchan_out_cov], nchan_out_cov ); } } /* convert ParamMC parameter bands to SFB */ st_ivas->hLsSetUpConversion->sfbCnt = hParamMC->num_param_bands_synth; - for ( k = 0; k <= hParamMC->num_param_bands_synth; k++ ) + move16(); + FOR( k = 0; k <= hParamMC->num_param_bands_synth; k++ ) { - st_ivas->hLsSetUpConversion->sfbOffset[k] = PARAM_MC_BAND_TO_MDCT_BAND_RATIO * hParamMC->band_grouping[k]; + st_ivas->hLsSetUpConversion->sfbOffset[k] = imult1616( PARAM_MC_BAND_TO_MDCT_BAND_RATIO, hParamMC->band_grouping[k] ); + move16(); } - for ( ; k < MAX_SFB + 2; k++ ) + FOR( ; k < MAX_SFB + 2; k++ ) { st_ivas->hLsSetUpConversion->sfbOffset[k] = 0; + move16(); } } - if ( nchan_transport_old != nchan_transport ) + IF( NE_16( nchan_transport_old, nchan_transport ) ) { - free( hParamMC->proto_matrix_int ); - if ( ( hParamMC->proto_matrix_int = (float *) malloc( nchan_out_transport * nchan_transport * sizeof( float ) ) ) == NULL ) + free( hParamMC->proto_matrix_int_fx ); + IF( ( hParamMC->proto_matrix_int_fx = (Word32 *) malloc( nchan_out_transport * nchan_transport * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - mvr2r( ivas_param_mc_conf[config_index].dmx_fac, hParamMC->proto_matrix_int, nchan_transport * nchan_out_transport ); + hParamMC->proto_matrix_int_len = imult1616( nchan_out_transport, nchan_transport ); + move16(); + Copy32( ivas_param_mc_conf[config_index].dmx_fac_fx, hParamMC->proto_matrix_int_fx, hParamMC->proto_matrix_int_len ); /*Q31*/ } - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + test(); + IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_LS_CONV_COV ) || EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - matrix_product( hParamMC->ls_conv_dmx_matrix, nchan_out_cov, nchan_out_transport, 0, - ivas_param_mc_conf[config_index].dmx_fac, nchan_out_transport, nchan_transport, 0, - proto_matrix ); + Scale_sig32( hParamMC->ls_conv_dmx_matrix_fx, imult1616( nchan_out_transport, nchan_out_cov ), -4 ); // Q30 -> Q26 + matrix_product_fx( hParamMC->ls_conv_dmx_matrix_fx, nchan_out_cov, nchan_out_transport, 0, + ivas_param_mc_conf[config_index].dmx_fac_fx, nchan_out_transport, nchan_transport, 0, + proto_matrix_fx /*Q26*/ ); + Scale_sig32( hParamMC->ls_conv_dmx_matrix_fx, imult1616( nchan_out_transport, nchan_out_cov ), 4 ); // Q26 -> Q30 - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) + IF( EQ_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - proto_mtx_norm = 1.f; - for ( k = 0; k < nchan_transport * nchan_out_cov; k++ ) + proto_mtx_norm_fx = ONE_IN_Q26; // Q26 + move32(); + FOR( k = 0; k < nchan_transport * nchan_out_cov; k++ ) { - proto_mtx_norm = max( fabsf( proto_mtx_norm ), fabsf( proto_matrix[k] ) ); + proto_mtx_norm_fx = L_max( L_abs( proto_mtx_norm_fx ), L_abs( proto_matrix_fx[k] ) ); // Q26 } - proto_mtx_norm = 1.f / proto_mtx_norm; + proto_mtx_norm_fx = divide3232( ONE_IN_Q26, proto_mtx_norm_fx ); /*Q15*/ /* transfer flattened proto_matrix to 2D in hLsSetupConversion->dmxMtx */ - for ( k = 0; k < nchan_transport; k++ ) + FOR( k = 0; k < nchan_transport; k++ ) { - for ( int16_t i = 0; i < nchan_out_cov; i++ ) + FOR( Word16 i = 0; i < nchan_out_cov; i++ ) { - st_ivas->hLsSetUpConversion->dmxMtx[k][i] = proto_matrix[k * nchan_out_cov + i] * proto_mtx_norm; + st_ivas->hLsSetUpConversion->dmxMtx_fx[k][i] = L_shl( Mpy_32_16_1( proto_matrix_fx[k * nchan_out_cov + i], (Word16) proto_mtx_norm_fx ), 4 ); // Q26 -> Q30 + move32(); } } } } - else + ELSE { - mvr2r( ivas_param_mc_conf[config_index].dmx_fac, proto_matrix, nchan_out_transport * nchan_transport ); + Copy32( ivas_param_mc_conf[config_index].dmx_fac_fx, proto_matrix_fx, imult1616( nchan_out_transport, nchan_transport ) ); // proto_matrix_fx -> Q31 + Scale_sig32( proto_matrix_fx, imult1616( nchan_out_transport, nchan_transport ), -5 ); // proto_matrix_fx -> Q26 } - if ( nchan_transport_old != nchan_transport && hParamMC->synthesis_conf != PARAM_MC_SYNTH_MONO_STEREO ) + test(); + IF( NE_16( nchan_transport_old, nchan_transport ) && NE_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - int16_t i; - int16_t len; + Word16 i; + Word16 len; /* close decorrelator */ - ivas_dirac_dec_decorr_close( &hParamMC->h_freq_domain_decorr_ap_params, &hParamMC->h_freq_domain_decorr_ap_state ); + ivas_dirac_dec_decorr_close_fx( &hParamMC->h_freq_domain_decorr_ap_params, &hParamMC->h_freq_domain_decorr_ap_state ); /* deallocate diffuse prototype info */ - if ( hParamMC->diff_proto_info ) + IF( hParamMC->diff_proto_info ) { - for ( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) + FOR( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) { free( hParamMC->diff_proto_info->source_chan_idx[i] ); hParamMC->diff_proto_info->source_chan_idx[i] = NULL; - free( hParamMC->diff_proto_info->proto_fac[i] ); - hParamMC->diff_proto_info->proto_fac[i] = NULL; + free( hParamMC->diff_proto_info->proto_fac_fx[i] ); + hParamMC->diff_proto_info->proto_fac_fx[i] = NULL; } free( hParamMC->diff_proto_info->source_chan_idx ); hParamMC->diff_proto_info->source_chan_idx = NULL; - free( hParamMC->diff_proto_info->proto_fac ); - hParamMC->diff_proto_info->proto_fac = NULL; + free( hParamMC->diff_proto_info->proto_fac_fx ); + hParamMC->diff_proto_info->proto_fac_fx = NULL; free( hParamMC->diff_proto_info->proto_index_diff ); hParamMC->diff_proto_info->proto_index_diff = NULL; @@ -1904,12 +954,12 @@ ivas_error ivas_param_mc_dec_reconfig( } hParamMC->num_outputs_diff = nchan_out_cov; - if ( ( hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ) ) == NULL ) + move16(); + IF( ( hParamMC->diff_proto_info = (PARAM_MC_DIFF_PROTO_INFO *) malloc( sizeof( PARAM_MC_DIFF_PROTO_INFO ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - - if ( ( param_mc_get_diff_proto_info( proto_matrix, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info ) ) != IVAS_ERR_OK ) + IF( ( param_mc_get_diff_proto_info_fx( proto_matrix_fx, nchan_transport, nchan_out_cov, hParamMC->diff_proto_info, Q26 ) ) != IVAS_ERR_OK ) { return error; } @@ -1918,160 +968,172 @@ ivas_error ivas_param_mc_dec_reconfig( hParamMC->h_freq_domain_decorr_ap_params = NULL; hParamMC->h_freq_domain_decorr_ap_state = NULL; - ivas_dirac_dec_get_frequency_axis( frequency_axis, output_Fs, hParamMC->num_freq_bands ); + Word16 frequency_axis_fx[CLDFB_NO_CHANNELS_MAX]; + ivas_dirac_dec_get_frequency_axis_fx( frequency_axis_fx, output_Fs, hParamMC->num_freq_bands ); // Q0 - if ( ( error = ivas_dirac_dec_decorr_open( &( hParamMC->h_freq_domain_decorr_ap_params ), &( hParamMC->h_freq_domain_decorr_ap_state ), hParamMC->num_freq_bands, hParamMC->num_outputs_diff, - hParamMC->diff_proto_info->num_protos_diff, DIRAC_SYNTHESIS_COV_MC_LS, frequency_axis, nchan_transport, output_Fs ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( hParamMC->h_freq_domain_decorr_ap_params ), &( hParamMC->h_freq_domain_decorr_ap_state ), hParamMC->num_freq_bands, hParamMC->num_outputs_diff, + hParamMC->diff_proto_info->num_protos_diff, DIRAC_SYNTHESIS_COV_MC_LS, frequency_axis_fx, nchan_transport, output_Fs ) ), + IVAS_ERR_OK ) ) { return error; } - hParamMC->h_output_synthesis_params.use_onset_filters = 0; + move16(); hParamMC->max_band_decorr = hParamMC->h_freq_domain_decorr_ap_params->max_band_decorr; + move16(); /* init decorrelation */ - if ( hParamMC->max_band_decorr > 0 ) + IF( hParamMC->max_band_decorr > 0 ) { - len = hParamMC->diff_proto_info->num_protos_diff * hParamMC->h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr; + len = imult1616( hParamMC->diff_proto_info->num_protos_diff, hParamMC->h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr ); /* init onsetDetectionPower */ - set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_1, len ); - set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_2, len ); + set_zero_fx( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_1_fx, len ); + set_zero_fx( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_2_fx, len ); + hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.q_onset_detector = Q31; + move16(); } } hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->hMetadataPMC->nbands_coded]; + move16(); max_param_band_residual = 0; + move16(); - for ( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) + FOR( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) { - if ( hParamMC->band_grouping[k] <= hParamMC->max_band_decorr ) + IF( LE_16( hParamMC->band_grouping[k], hParamMC->max_band_decorr ) ) { max_param_band_residual = k; + move16(); assert( hParamMC->band_grouping[k] == hParamMC->max_band_decorr ); - break; + BREAK; } } - if ( nchan_transport_old != nchan_transport || num_param_bands_old != hParamMC->hMetadataPMC->num_parameter_bands ) + test(); + IF( NE_16( nchan_transport_old, nchan_transport ) || NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) ) { DIRAC_OUTPUT_SYNTHESIS_COV_STATE cov_state_old = hParamMC->h_output_synthesis_cov_state; DIRAC_OUTPUT_SYNTHESIS_PARAMS params_old = hParamMC->h_output_synthesis_params; - float tmp_buf[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - set_zero( tmp_buf, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); + Word32 tmp_buf_fx[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; + + set_zero_fx( tmp_buf_fx, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); /* output synthesis */ - if ( ( error = ivas_dirac_dec_output_synthesis_cov_open( &( hParamMC->h_output_synthesis_params ), &( hParamMC->h_output_synthesis_cov_state ), hParamMC->max_band_decorr, PARAM_MC_MAX_NSLOTS, - hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual, nchan_transport, nchan_out_cov, proto_matrix ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_dirac_dec_output_synthesis_cov_open_fx( &( hParamMC->h_output_synthesis_params ), &( hParamMC->h_output_synthesis_cov_state ), hParamMC->max_band_decorr, PARAM_MC_MAX_NSLOTS, + hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual, nchan_transport, nchan_out_cov, proto_matrix_fx ) ), + IVAS_ERR_OK ) ) { return error; } - ivas_param_mc_dec_compute_interpolator( 0, 0, DEFAULT_JBM_CLDFB_TIMESLOTS, hParamMC->h_output_synthesis_params.interpolator ); + ivas_param_mc_dec_compute_interpolator_fx( 0, 0, DEFAULT_JBM_CLDFB_TIMESLOTS, hParamMC->h_output_synthesis_params.interpolator_fx ); - ivas_dirac_dec_output_synthesis_cov_init( &( hParamMC->h_output_synthesis_cov_state ), nchan_transport, nchan_out_cov, hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual ); + ivas_dirac_dec_output_synthesis_cov_init_fx( &( hParamMC->h_output_synthesis_cov_state ), nchan_transport, nchan_out_cov, hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual ); /* map old to new parameter banding, only for same number of TCs, needs some more thought for changing number of TCs */ - if ( num_param_bands_old != hParamMC->hMetadataPMC->num_parameter_bands && nchan_transport_old == nchan_transport ) + test(); + IF( NE_16( num_param_bands_old, hParamMC->hMetadataPMC->num_parameter_bands ) && EQ_16( nchan_transport_old, nchan_transport ) ) { - int16_t new_param_band_idx, source_param_idx; - + Word16 new_param_band_idx, source_param_idx; - for ( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) + FOR( new_param_band_idx = 0; new_param_band_idx < hParamMC->hMetadataPMC->num_parameter_bands; new_param_band_idx++ ) { - for ( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) + FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) { /* Cx */ - v_multc( cov_state_old.cx_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx], tmp_buf, nchan_transport_old * nchan_transport_old ); - v_add( tmp_buf, hParamMC->h_output_synthesis_cov_state.cx_old[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cx_old[new_param_band_idx], nchan_transport_old * nchan_transport_old ); + v_multc_fixed_16( cov_state_old.cx_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_transport_old, nchan_transport_old ) ); // Q(31 - cov_state_old.cx_old_e) + v_add_fixed_me( tmp_buf_fx, cov_state_old.cx_old_e[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.cx_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cx_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx], imult1616( nchan_transport_old, nchan_transport_old ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.cx_old_e[new_param_band_idx]) /* Cy */ - v_multc( cov_state_old.cy_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx], tmp_buf, nchan_out_cov * nchan_out_cov ); - v_add( tmp_buf, hParamMC->h_output_synthesis_cov_state.cy_old[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cy_old[new_param_band_idx], nchan_out_cov * nchan_out_cov ); + v_multc_fixed_16( cov_state_old.cy_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_out_cov, nchan_out_cov ) ); // Q(31 - cov_state_old.cy_old_e) + v_add_fixed_me( tmp_buf_fx, cov_state_old.cy_old_e[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.cy_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.cy_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx], imult1616( nchan_out_cov, nchan_out_cov ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.cy_old_e[new_param_band_idx]) /* mixing matrix*/ - v_multc( cov_state_old.mixing_matrix_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx], tmp_buf, nchan_transport_old * nchan_out_cov ); - v_add( tmp_buf, hParamMC->h_output_synthesis_cov_state.mixing_matrix_old[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old[new_param_band_idx], nchan_transport_old * nchan_out_cov ); + v_multc_fixed_16( cov_state_old.mixing_matrix_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_transport_old, nchan_out_cov ) ); // Q(31 - mixing_matrix_old_exp) + v_add_fixed_me( tmp_buf_fx, cov_state_old.mixing_matrix_old_exp[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx], imult1616( nchan_transport_old, nchan_out_cov ), 0 ); // Q(31 - hParamMC->h_output_synthesis_cov_state.mixing_matrix_old_exp[new_param_band_idx]) } } - for ( new_param_band_idx = 0; new_param_band_idx < max_param_band_residual; new_param_band_idx++ ) + FOR( new_param_band_idx = 0; new_param_band_idx < max_param_band_residual; new_param_band_idx++ ) { - for ( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) + FOR( source_param_idx = 0; source_param_idx < parameter_band_mapping.n_source_bands[new_param_band_idx]; source_param_idx++ ) { /* residual mixing matrix*/ - v_multc( cov_state_old.mixing_matrix_res_old[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor[new_param_band_idx][source_param_idx], tmp_buf, nchan_out_cov * nchan_out_cov ); - v_add( tmp_buf, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old[new_param_band_idx], nchan_out_cov * nchan_out_cov ); + v_multc_fixed_16( cov_state_old.mixing_matrix_res_old_fx[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], parameter_band_mapping.source_band_factor_fx[new_param_band_idx][source_param_idx], tmp_buf_fx, imult1616( nchan_out_cov, nchan_out_cov ) ); // Q(31 - mixing_matrix_res_old_exp) + v_add_fixed_me( tmp_buf_fx, cov_state_old.mixing_matrix_res_old_exp[parameter_band_mapping.source_band_idx[new_param_band_idx][source_param_idx]], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_fx[new_param_band_idx], &hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx], imult1616( nchan_out_cov, nchan_out_cov ), 0 ); // Q(hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old_exp[new_param_band_idx]) } } } - - ivas_dirac_dec_output_synthesis_cov_close( ¶ms_old, &cov_state_old ); + ivas_dirac_dec_output_synthesis_cov_close_fx( ¶ms_old, &cov_state_old ); } /*-----------------------------------------------------------------* * memory allocation *-----------------------------------------------------------------*/ - if ( hParamMC->max_band_decorr > 0 && nchan_transport_old != nchan_transport ) + test(); + IF( ( hParamMC->max_band_decorr > 0 ) && NE_16( nchan_transport_old, nchan_transport ) ) { - free( hParamMC->proto_frame_f ); - if ( ( hParamMC->proto_frame_f = (float *) malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) + free( hParamMC->proto_frame_f_fx ); + IF( ( hParamMC->proto_frame_f_fx = (Word32 *) malloc( 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); } - set_zero( hParamMC->proto_frame_f, 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands ); + set_zero_fx( hParamMC->proto_frame_f_fx, shl( imult1616( hParamMC->diff_proto_info->num_protos_diff, hParamMC->num_freq_bands ), 1 ) ); } - if ( nchan_transport_old != nchan_transport ) + IF( NE_16( nchan_transport_old, nchan_transport ) ) { - if ( hParamMC->synthesis_conf != PARAM_MC_SYNTH_MONO_STEREO ) + IF( NE_16( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) { - int16_t n_cldfb_slots; - - if ( hParamMC->Cldfb_RealBuffer_tc != NULL ) + Word16 n_cldfb_slots; + IF( hParamMC->Cldfb_RealBuffer_tc_fx != NULL ) { - free( hParamMC->Cldfb_RealBuffer_tc ); - hParamMC->Cldfb_RealBuffer_tc = NULL; + free( hParamMC->Cldfb_RealBuffer_tc_fx ); + hParamMC->Cldfb_RealBuffer_tc_fx = NULL; // Q12 } - if ( hParamMC->Cldfb_ImagBuffer_tc != NULL ) + IF( hParamMC->Cldfb_ImagBuffer_tc_fx != NULL ) { - free( hParamMC->Cldfb_ImagBuffer_tc ); - hParamMC->Cldfb_ImagBuffer_tc = NULL; + free( hParamMC->Cldfb_ImagBuffer_tc_fx ); + hParamMC->Cldfb_ImagBuffer_tc_fx = NULL; // Q12 } n_cldfb_slots = DEFAULT_JBM_CLDFB_TIMESLOTS; - if ( st_ivas->hDecoderConfig->Opt_tsm ) + move16(); + IF( st_ivas->hDecoderConfig->Opt_tsm ) { n_cldfb_slots = MAX_JBM_CLDFB_TIMESLOTS; + move16(); } - if ( ( hParamMC->Cldfb_RealBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) + Word16 cldfb_size = imult1616( imult1616( n_cldfb_slots, nchan_transport ), hParamMC->num_freq_bands ); + IF( ( hParamMC->Cldfb_RealBuffer_tc_fx = (Word32 *) malloc( cldfb_size * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); } - set_zero( hParamMC->Cldfb_RealBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands ); + set_zero_fx( hParamMC->Cldfb_RealBuffer_tc_fx, cldfb_size ); - if ( ( hParamMC->Cldfb_ImagBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL ) + IF( ( hParamMC->Cldfb_ImagBuffer_tc_fx = (Word32 *) malloc( cldfb_size * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) ); } - set_zero( hParamMC->Cldfb_ImagBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands ); + set_zero_fx( hParamMC->Cldfb_ImagBuffer_tc_fx, cldfb_size ); } - else + ELSE { - if ( hParamMC->Cldfb_RealBuffer_tc != NULL ) + IF( hParamMC->Cldfb_RealBuffer_tc_fx != NULL ) { - free( hParamMC->Cldfb_RealBuffer_tc ); - hParamMC->Cldfb_RealBuffer_tc = NULL; + free( hParamMC->Cldfb_RealBuffer_tc_fx ); + hParamMC->Cldfb_RealBuffer_tc_fx = NULL; } - if ( hParamMC->Cldfb_ImagBuffer_tc != NULL ) + IF( hParamMC->Cldfb_ImagBuffer_tc_fx != NULL ) { - free( hParamMC->Cldfb_ImagBuffer_tc ); - hParamMC->Cldfb_ImagBuffer_tc = NULL; + free( hParamMC->Cldfb_ImagBuffer_tc_fx ); + hParamMC->Cldfb_ImagBuffer_tc_fx = NULL; } } } return error; } -#endif /*------------------------------------------------------------------------- @@ -2081,7 +1143,6 @@ ivas_error ivas_param_mc_dec_reconfig( *------------------------------------------------------------------------*/ /*! r: number of cldfb synthesis instances */ -#ifdef IVAS_FLOAT_FIXED Word16 param_mc_get_num_cldfb_syntheses_fx( Decoder_Struct *st_ivas /* i : Parametric MC handle */ ) @@ -2109,42 +1170,11 @@ Word16 param_mc_get_num_cldfb_syntheses_fx( } ELSE IF( EQ_32( st_ivas->renderer_type, RENDERER_MC_PARAMMC ) ) { - num_cldfb_syntheses = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); - } - - return num_cldfb_syntheses; -} -#else -int16_t param_mc_get_num_cldfb_syntheses( - Decoder_Struct *st_ivas /* i : Parametric MC handle */ -) -{ - int16_t num_cldfb_syntheses; - - num_cldfb_syntheses = 0; - - /* sanity check*/ - if ( st_ivas->hParamMC == NULL ) - { - assert( 0 && "ParamMC handle does not exist!\n" ); - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - num_cldfb_syntheses = 2; - } - else if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - num_cldfb_syntheses = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - } - else if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC ) - { - num_cldfb_syntheses = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; + num_cldfb_syntheses = add( st_ivas->hOutSetup.nchan_out_woLFE, st_ivas->hOutSetup.num_lfe ); } return num_cldfb_syntheses; } -#endif /*------------------------------------------------------------------------- @@ -2153,7 +1183,6 @@ int16_t param_mc_get_num_cldfb_syntheses( * Close Parametric MC memories *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_dec_close_fx( PARAM_MC_DEC_HANDLE *hParamMC_out /* i/o: Parametric MC decoder handle */ ) @@ -2267,125 +1296,6 @@ void ivas_param_mc_dec_close_fx( return; } -#else -void ivas_param_mc_dec_close( - PARAM_MC_DEC_HANDLE *hParamMC_out /* i/o: Parametric MC decoder handle */ -) -{ - uint16_t i; - PARAM_MC_DEC_HANDLE hParamMC; - - if ( hParamMC_out == NULL || *hParamMC_out == NULL ) - { - return; - } - - hParamMC = *hParamMC_out; - - /* close sub-modules */ - ivas_dirac_dec_output_synthesis_cov_close( &hParamMC->h_output_synthesis_params, &hParamMC->h_output_synthesis_cov_state ); - - if ( hParamMC->h_freq_domain_decorr_ap_params != NULL || hParamMC->h_freq_domain_decorr_ap_state != NULL ) - { - ivas_dirac_dec_decorr_close( &hParamMC->h_freq_domain_decorr_ap_params, &hParamMC->h_freq_domain_decorr_ap_state ); - } - - /* parameter decoding */ - if ( hParamMC->hMetadataPMC != NULL ) - { - free( hParamMC->hMetadataPMC ); - hParamMC->hMetadataPMC = NULL; - } - - if ( hParamMC->icc_q != NULL ) - { - free( hParamMC->icc_q ); - hParamMC->icc_q = NULL; - } - - if ( hParamMC->icld_q != NULL ) - { - free( hParamMC->icld_q ); - hParamMC->icld_q = NULL; - } - - /* diffuse prototype info */ - if ( hParamMC->diff_proto_info ) - { - for ( i = 0; i < hParamMC->diff_proto_info->num_protos_diff; i++ ) - { - free( hParamMC->diff_proto_info->source_chan_idx[i] ); - hParamMC->diff_proto_info->source_chan_idx[i] = NULL; - - free( hParamMC->diff_proto_info->proto_fac[i] ); - hParamMC->diff_proto_info->proto_fac[i] = NULL; - } - - free( hParamMC->diff_proto_info->source_chan_idx ); - hParamMC->diff_proto_info->source_chan_idx = NULL; - - free( hParamMC->diff_proto_info->proto_fac ); - hParamMC->diff_proto_info->proto_fac = NULL; - - free( hParamMC->diff_proto_info->proto_index_diff ); - hParamMC->diff_proto_info->proto_index_diff = NULL; - - free( hParamMC->diff_proto_info->num_source_chan_diff ); - hParamMC->diff_proto_info->num_source_chan_diff = NULL; - - free( hParamMC->diff_proto_info ); - hParamMC->diff_proto_info = NULL; - } - - /* States */ - /* free prototype signal buffers */ - if ( hParamMC->proto_frame_f != NULL ) - { - free( hParamMC->proto_frame_f ); - hParamMC->proto_frame_f = NULL; - } - - if ( hParamMC->proto_frame_dec_f != NULL ) - { - free( hParamMC->proto_frame_dec_f ); - hParamMC->proto_frame_dec_f = NULL; - } - - if ( hParamMC->ls_conv_dmx_matrix != NULL ) - { - free( hParamMC->ls_conv_dmx_matrix ); - hParamMC->ls_conv_dmx_matrix = NULL; - } - - if ( hParamMC->proto_matrix_int != NULL ) - { - free( hParamMC->proto_matrix_int ); - hParamMC->proto_matrix_int = NULL; - } - - if ( hParamMC->hoa_encoder != NULL ) - { - free( hParamMC->hoa_encoder ); - hParamMC->hoa_encoder = NULL; - } - - if ( hParamMC->Cldfb_RealBuffer_tc != NULL ) - { - free( hParamMC->Cldfb_RealBuffer_tc ); - hParamMC->Cldfb_RealBuffer_tc = NULL; - } - if ( hParamMC->Cldfb_ImagBuffer_tc != NULL ) - { - free( hParamMC->Cldfb_ImagBuffer_tc ); - hParamMC->Cldfb_ImagBuffer_tc = NULL; - } - - free( *hParamMC_out ); - *hParamMC_out = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2394,7 +1304,6 @@ void ivas_param_mc_dec_close( * Read the Parametric MC metadata *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_dec_read_BS_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate */ Decoder_State *st, /* i/o: decoder state structure */ @@ -2472,7 +1381,7 @@ void ivas_param_mc_dec_read_BS_fx( /* set tables if coded band width differs from last frame */ IF( NE_16( hMetadataPMC->coded_bwidth, hMetadataPMC->last_coded_bwidth ) ) { - ivas_param_mc_set_coded_bands( hMetadataPMC ); + ivas_param_mc_set_coded_bands_fx( hMetadataPMC ); param_mc_set_num_synth_bands( st->output_Fs, hParamMC ); hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->num_param_bands_synth]; move16(); @@ -2592,144 +1501,6 @@ void ivas_param_mc_dec_read_BS_fx( return; } -#else -void ivas_param_mc_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder ParamMC handle */ - int16_t *nb_bits /* o : number of bits written */ -) -{ - int16_t param_frame_idx; - int16_t band_step; - uint16_t bit_buffer[PARAM_MC_MAX_BITS]; - int16_t bits_to_copy; - int16_t bit_pos; - int16_t num_lfe_bands; - int16_t num_param_bands; - int16_t metadata_bit_pos; - int16_t i, j, k; - int16_t icc_map_size; - int16_t icc_map_size_wo_lfe; - int16_t ild_map_size; - int16_t ild_map_size_wo_lfe; - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC; - - push_wmops( "param_mc_read_bs" ); - - /* Inits */ - *nb_bits = 0; - hMetadataPMC = hParamMC->hMetadataPMC; - icc_map_size = hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; - icc_map_size_wo_lfe = hMetadataPMC->icc_mapping_conf->icc_map_size_wo_lfe; - ild_map_size = hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; - ild_map_size_wo_lfe = hMetadataPMC->ild_mapping_conf->ild_map_size_wo_lfe; - - if ( !st->bfi ) - { - metadata_bit_pos = (int16_t) ( ivas_total_brate / FRAMES_PER_SEC - 1 ); - bits_to_copy = (int16_t) min( ivas_total_brate / FRAMES_PER_SEC, PARAM_MC_MAX_BITS ); - - /* copy and reverse metadata */ - for ( bit_pos = 0; bit_pos < bits_to_copy; bit_pos++ ) - { - bit_buffer[bit_pos] = st->bit_stream[metadata_bit_pos--]; - } - - bit_pos = 0; - - /* read reserved bit */ - hMetadataPMC->lfe_on = bit_buffer[bit_pos++]; - - /* get coded bwidth */ - { - int16_t pos; - int16_t bw = 0; - for ( pos = 0; pos < 2; pos++ ) - { - bw += ( bit_buffer[bit_pos++] << pos ); - } - hMetadataPMC->coded_bwidth = bw; - } - - /* set tables if coded band width differs from last frame */ - if ( hMetadataPMC->coded_bwidth != hMetadataPMC->last_coded_bwidth ) - { - ivas_param_mc_set_coded_bands( hMetadataPMC ); - param_mc_set_num_synth_bands( st->output_Fs, hParamMC ); - hParamMC->max_band_energy_compensation = hParamMC->band_grouping[hParamMC->num_param_bands_synth]; - } - - param_frame_idx = bit_buffer[bit_pos++]; - hMetadataPMC->param_frame_idx = param_frame_idx; - num_param_bands = hMetadataPMC->nbands_in_param_frame[param_frame_idx]; - - hMetadataPMC->bAttackPresent = bit_buffer[bit_pos++]; - hMetadataPMC->attackIndex = 0; - band_step = 1; - num_lfe_bands = 0; - - if ( hMetadataPMC->bAttackPresent ) - { - for ( i = 2; i >= 0; i-- ) - { - hMetadataPMC->attackIndex += ( bit_buffer[bit_pos++] << i ); - } - - band_step = PARAM_MC_TRANSIENT_BAND_STEP; - num_lfe_bands = PARAM_MC_MAX_BAND_LFE / band_step + ( PARAM_MC_MAX_BAND_LFE % band_step ) ? 1 : 0; - num_param_bands = hMetadataPMC->nbands_coded / band_step + ( ( hMetadataPMC->nbands_coded % band_step ) ? 1 : 0 ); - } - else - { - for ( j = 0; j < PARAM_MC_MAX_BAND_LFE; j += band_step ) - { - if ( param_frame_idx == hMetadataPMC->coding_band_mapping[j] ) - { - /* LFE ICC is always the last ICC in coding band 0 */ - num_lfe_bands++; - } - } - } - - if ( !hMetadataPMC->lfe_on ) - { - num_lfe_bands = 0; - } - - ivas_param_mc_bs_decode_parameter_values( bit_buffer, &bit_pos, bits_to_copy, &st->BER_detect, hMetadataPMC, &hMetadataPMC->icc_coding, - icc_map_size_wo_lfe, icc_map_size, num_lfe_bands, band_step, num_param_bands, hParamMC->icc_q ); - if ( !st->BER_detect ) - { - ivas_param_mc_bs_decode_parameter_values( bit_buffer, &bit_pos, bits_to_copy, &st->BER_detect, hMetadataPMC, &hMetadataPMC->ild_coding, - ild_map_size_wo_lfe, ild_map_size, num_lfe_bands, band_step, num_param_bands, hParamMC->icld_q ); - } - /* set LFE ILD and ICC to zero above PARAM_MC_MAX_BAND_LFE for attack frames */ - if ( hMetadataPMC->bAttackPresent ) - { - for ( k = PARAM_MC_MAX_BAND_LFE; k < band_step * num_lfe_bands; k++ ) - { - hParamMC->icc_q[( k + 1 ) * icc_map_size - 1] = 1.0f; - hParamMC->icld_q[( k + 1 ) * ild_map_size - 1] = PARAM_MC_DEFAULT_MIN_ILD; - } - } - - *nb_bits = bit_pos; - - } /* if ( !st->bfi ) */ - - if ( st->bfi ) - { - /* for PLC, use the saved ILDs and ICCs from the past and set the transient flag and transient position to zero */ - hMetadataPMC->bAttackPresent = 0; - hMetadataPMC->attackIndex = 0; - } - - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2738,7 +1509,6 @@ void ivas_param_mc_dec_read_BS( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const uint8_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ @@ -3021,181 +1791,33 @@ void ivas_param_mc_dec_digest_tc_fx( Copy32( cx_fx, cx_next_band_fx, imult1616( nchan_transport, nchan_transport ) ); } - FOR( is_next_band = 0; is_next_band < 2; is_next_band++ ) - { - test(); - IF( is_next_band && skip_next_band ) - { - continue; - } - - IF( NE_32( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) - { - IF( is_next_band ) - { - - ivas_param_mc_get_mixing_matrices_fx( hParamMC, hSynthesisOutputSetup, cx_next_band_fx, cx_e, add( param_band_idx, is_next_band ), hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); - } - ELSE - { - - ivas_param_mc_get_mixing_matrices_fx( hParamMC, hSynthesisOutputSetup, cx_fx, cx_e, add( param_band_idx, is_next_band ), hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); - } - } - } - } - pop_wmops(); - - return; -} -#else -void ivas_param_mc_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint8_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels */ - float *transport_channels_f[] /* i : synthesized core-coder transport channels/DirAC output */ -) -{ - PARAM_MC_DEC_HANDLE hParamMC; - int16_t i, ch; - int16_t slot_idx, param_band_idx; - int16_t nchan_transport, nchan_out_transport, nchan_out_cldfb; - int16_t nchan_out_cov; - /*CLDFB*/ - float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float real_part, imag_part; - /* format converter */ - int16_t channel_active[MAX_OUTPUT_CHANNELS]; - IVAS_OUTPUT_SETUP *hSynthesisOutputSetup; - - hParamMC = st_ivas->hParamMC; - assert( hParamMC ); - - push_wmops( "param_mc_dec_digest_tc" ); - - set_s( channel_active, 0, MAX_CICP_CHANNELS ); - nchan_transport = st_ivas->nchan_transport; - nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - nchan_out_cldfb = BINAURAL_CHANNELS; - set_s( channel_active, 1, nchan_out_cldfb ); - nchan_out_cov = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - hSynthesisOutputSetup = &st_ivas->hTransSetup; - } - else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) - { - nchan_out_cov = nchan_out_transport; - nchan_out_cldfb = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - hSynthesisOutputSetup = &st_ivas->hTransSetup; - } - else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - nchan_out_cldfb = nchan_out_cov; - set_s( channel_active, 1, nchan_out_cov ); - hSynthesisOutputSetup = &st_ivas->hOutSetup; - } - else - { - nchan_out_cov = nchan_out_transport; - nchan_out_cldfb = nchan_out_transport; - set_s( channel_active, 1, nchan_out_cov ); - hSynthesisOutputSetup = &st_ivas->hTransSetup; - } - - /* adapt transient position */ - if ( hParamMC->hMetadataPMC->bAttackPresent ) - { - hParamMC->hMetadataPMC->attackIndex = (int16_t) max( 0, hParamMC->hMetadataPMC->attackIndex + ( ( nCldfbSlots - DEFAULT_JBM_CLDFB_TIMESLOTS ) / 2 ) ); - } - /* adapt subframes */ - hParamMC->num_slots = nCldfbSlots; - hParamMC->slots_rendered = 0; - hParamMC->subframes_rendered = 0; - ivas_jbm_dec_get_adapted_subframes( nCldfbSlots, hParamMC->subframe_nbslots, &hParamMC->nb_subframes ); - st_ivas->hTcBuffer->nb_subframes = hParamMC->nb_subframes; - mvs2s( hParamMC->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hParamMC->nb_subframes ); - - ivas_param_mc_dec_compute_interpolator( hParamMC->hMetadataPMC->bAttackPresent, hParamMC->hMetadataPMC->attackIndex, nCldfbSlots, hParamMC->h_output_synthesis_params.interpolator ); - - for ( param_band_idx = 0; param_band_idx < PARAM_MC_MAX_PARAMETER_BANDS; param_band_idx++ ) - { - set_zero( cx[param_band_idx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - set_zero( cx_imag[param_band_idx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - } - - /* slot loop for gathering the input data */ - for ( slot_idx = 0; slot_idx < nCldfbSlots; slot_idx++ ) - { - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - float RealBuffer[CLDFB_NO_CHANNELS_MAX]; - float ImagBuffer[CLDFB_NO_CHANNELS_MAX]; - - /* CLDFB Analysis*/ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - cldfbAnalysis_ts_ivas( &( transport_channels_f[ch][hParamMC->num_freq_bands * slot_idx] ), RealBuffer, ImagBuffer, hParamMC->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); - - mvr2r( RealBuffer, &hParamMC->Cldfb_RealBuffer_tc[slot_idx * hParamMC->num_freq_bands * nchan_transport + ch * hParamMC->num_freq_bands], hParamMC->num_freq_bands ); - mvr2r( ImagBuffer, &hParamMC->Cldfb_ImagBuffer_tc[slot_idx * hParamMC->num_freq_bands * nchan_transport + ch * hParamMC->num_freq_bands], hParamMC->num_freq_bands ); - } - } - if ( slot_idx >= 2 * hParamMC->hMetadataPMC->attackIndex ) - { - ivas_dirac_dec_output_synthesis_cov_param_mc_collect_slot( &hParamMC->Cldfb_RealBuffer_tc[slot_idx * hParamMC->num_freq_bands * nchan_transport], &hParamMC->Cldfb_ImagBuffer_tc[slot_idx * hParamMC->num_freq_bands * nchan_transport], cx, cx_imag, hParamMC, nchan_transport ); - } - } - - /* map from complex input covariance to real values */ - for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) - { - /* Cx for transport channels */ - for ( i = 0; i < nchan_transport * nchan_transport; i++ ) + FOR( is_next_band = 0; is_next_band < 2; is_next_band++ ) { - real_part = cx[param_band_idx][i]; - imag_part = cx_imag[param_band_idx][i]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - if ( param_band_idx < hParamMC->max_param_band_abs_cov ) - { - cx[param_band_idx][i] = sqrtf( real_part * real_part + imag_part * imag_part ); - } - else + test(); + IF( is_next_band && skip_next_band ) { - cx[param_band_idx][i] = real_part; + continue; } - } - } - /* we have to do it similar to the encoder in case of attacks (i.e. accumulate two bands) to ensure correct DMX of the target covariance*/ - if ( hParamMC->hMetadataPMC->bAttackPresent && ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) ) - { - for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx += 2 ) - { - v_add( cx[param_band_idx], cx[param_band_idx + 1], cx[param_band_idx], nchan_transport * nchan_transport ); - mvr2r( cx[param_band_idx], cx[param_band_idx + 1], nchan_transport * nchan_transport ); - } - } + IF( NE_32( hParamMC->synthesis_conf, PARAM_MC_SYNTH_MONO_STEREO ) ) + { + IF( is_next_band ) + { + ivas_param_mc_get_mixing_matrices_fx( hParamMC, hSynthesisOutputSetup, cx_next_band_fx, cx_e, add( param_band_idx, is_next_band ), hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); + } + ELSE + { - if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - ivas_param_mc_get_mono_stereo_mixing_matrices( hParamMC, cx, hParamMC->h_output_synthesis_cov_state.mixing_matrix, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res, nchan_out_transport, nchan_transport, nchan_out_cov ); - } - else - { - /* generate mixing matrices */ - ivas_param_mc_get_mixing_matrices( hParamMC, hSynthesisOutputSetup, cx, hParamMC->h_output_synthesis_cov_state.mixing_matrix, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); + ivas_param_mc_get_mixing_matrices_fx( hParamMC, hSynthesisOutputSetup, cx_fx, cx_e, add( param_band_idx, is_next_band ), hParamMC->h_output_synthesis_cov_state.mixing_matrix_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_exp, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_fx, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_exp, nchan_out_transport, hParamMC->synthesis_conf, nchan_transport, nchan_out_cov ); + } + } + } } - pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- @@ -3204,7 +1826,6 @@ void ivas_param_mc_dec_digest_tc( * Parametric MC decoding process *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_dec_render_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ @@ -3646,287 +2267,6 @@ void ivas_param_mc_dec_render_fx( return; } -#else -void ivas_param_mc_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -) -{ - PARAM_MC_DEC_HANDLE hParamMC; - int16_t i, ch; - int16_t subframe_idx; - int16_t slot_idx, slot_idx_start, slot_idx_start_cldfb_synth, first_sf, last_sf, slots_to_render; - int16_t nchan_transport, nchan_out_transport, nchan_out_cldfb; - int16_t nchan_out_cov; - /*CLDFB*/ - float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - /*Decorrelator*/ - float onset_filter[MAX_CICP_CHANNELS * CLDFB_NO_CHANNELS_MAX]; - /* format converter */ - int16_t channel_active[MAX_OUTPUT_CHANNELS]; - uint16_t nband_synth, nbands_to_zero; - uint16_t nchan_out_init; - uint32_t output_Fs; - - hParamMC = st_ivas->hParamMC; - assert( hParamMC ); - - push_wmops( "param_mc_dec_render" ); - - set_s( channel_active, 0, MAX_CICP_CHANNELS ); - nchan_transport = st_ivas->nchan_transport; - nchan_out_transport = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - nchan_out_init = nchan_out_transport; - output_Fs = st_ivas->hDecoderConfig->output_Fs; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - nchan_out_cldfb = BINAURAL_CHANNELS; - set_s( channel_active, 1, nchan_out_cldfb ); - if ( st_ivas->hCombinedOrientationData ) - { - nchan_out_init = MAX_INTERN_CHANNELS; - } - nchan_out_cov = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - } - else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) - { - nchan_out_cov = nchan_out_transport; - nchan_out_cldfb = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - } - else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_COV || hParamMC->synthesis_conf == PARAM_MC_SYNTH_MONO_STEREO ) - { - nchan_out_cov = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - nchan_out_cldfb = nchan_out_cov; - set_s( channel_active, 1, nchan_out_cov ); - } - else - { - nchan_out_cov = nchan_out_transport; - nchan_out_cldfb = nchan_out_transport; - set_s( channel_active, 1, nchan_out_cov ); - } - - /* set everything to zero that will not be decoded */ - nband_synth = hParamMC->band_grouping[hParamMC->num_param_bands_synth]; - nbands_to_zero = hParamMC->num_freq_bands - nband_synth; - for ( ch = 0; ch < nchan_out_init; ch++ ) - { - for ( slot_idx = 0; slot_idx < JBM_CLDFB_SLOTS_IN_SUBFRAME; slot_idx++ ) - { - set_zero( &( Cldfb_RealBuffer[ch][slot_idx][nband_synth] ), nbands_to_zero ); - set_zero( &( Cldfb_ImagBuffer[ch][slot_idx][nband_synth] ), nbands_to_zero ); - } - } - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hParamMC->num_slots - hParamMC->slots_rendered, nSamplesAsked / NS2SA( output_Fs, CLDFB_SLOT_NS ) ); - *nSamplesRendered = slots_to_render * NS2SA( output_Fs, CLDFB_SLOT_NS ); - first_sf = hParamMC->subframes_rendered; - last_sf = first_sf; - while ( slots_to_render > 0 ) - { - slots_to_render -= hParamMC->subframe_nbslots[last_sf]; - last_sf++; - } - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - slots_to_render += hParamMC->subframe_nbslots[subframe_idx]; - } - } - slot_idx_start = hParamMC->slots_rendered; - slot_idx_start_cldfb_synth = 0; - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - for ( slot_idx = 0; slot_idx < hParamMC->subframe_nbslots[subframe_idx]; slot_idx++, hParamMC->slots_rendered++ ) - { - - if ( hParamMC->max_band_decorr > 0 ) - { - /*-----------------------------------------------------------------* - * protoype signal computation - *-----------------------------------------------------------------*/ - - param_mc_protoSignalComputation( &hParamMC->Cldfb_RealBuffer_tc[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands], - &hParamMC->Cldfb_ImagBuffer_tc[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands], - hParamMC->proto_frame_f, hParamMC->diff_proto_info, - hParamMC->num_freq_bands ); - - /*-----------------------------------------------------------------* - * frequency domain decorrelation - *-----------------------------------------------------------------*/ - - /* decorrelate prototype frame */ - ivas_dirac_dec_decorr_process( hParamMC->num_freq_bands, - hParamMC->num_outputs_diff, - hParamMC->diff_proto_info->num_protos_diff, - DIRAC_SYNTHESIS_COV_MC_LS, - nchan_transport, - hParamMC->proto_frame_f, - hParamMC->diff_proto_info->num_protos_diff, - hParamMC->diff_proto_info->proto_index_diff, - hParamMC->proto_frame_dec_f, - onset_filter, - hParamMC->h_freq_domain_decorr_ap_params, - hParamMC->h_freq_domain_decorr_ap_state ); - - /* copy decorrelated frame directly to output CLDFB buffer, acts also as intermediate */ - /* memory for the decorrelated signal */ - ivas_param_mc_dec_copy_diffuse_proto( hParamMC, Cldfb_RealBuffer, Cldfb_ImagBuffer, nchan_out_cov, slot_idx ); - } - - /*-----------------------------------------------------------------* - * output synthesis - *-----------------------------------------------------------------*/ - - ivas_dirac_dec_output_synthesis_cov_param_mc_synthesise_slot( &hParamMC->Cldfb_RealBuffer_tc[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands], - &hParamMC->Cldfb_ImagBuffer_tc[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands], - Cldfb_RealBuffer, Cldfb_ImagBuffer, - hParamMC->h_output_synthesis_cov_state.mixing_matrix, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res, slot_idx, slot_idx + slot_idx_start, - nchan_transport, nchan_out_cov, hParamMC ); - - if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - if ( - st_ivas->hCombinedOrientationData && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - ivas_param_mc_mc2sba_cldfb( st_ivas->hTransSetup, hParamMC->hoa_encoder, slot_idx, Cldfb_RealBuffer, Cldfb_ImagBuffer, nband_synth, GAIN_LFE ); - } - else - { - /* remove LFE */ - uint16_t idx_out; - uint16_t idx_lfe; - IVAS_OUTPUT_SETUP hLsSetup; - - hLsSetup = st_ivas->hTransSetup; - - /* If LFE should be rendered, add it to other channels before removing */ - if ( st_ivas->hBinRenderer->render_lfe ) - { - for ( idx_lfe = 0; idx_lfe < hLsSetup.num_lfe; idx_lfe++ ) - { - /* Copy just the first band of LFE*/ - v_multc( Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], ( GAIN_LFE / hLsSetup.nchan_out_woLFE ), Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], 1 ); - v_multc( Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], ( GAIN_LFE / hLsSetup.nchan_out_woLFE ), Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], 1 ); - - for ( ch = 0; ch < ( hLsSetup.nchan_out_woLFE + hLsSetup.num_lfe ); ch++ ) - { - if ( hLsSetup.index_lfe[idx_lfe] != ch ) - { - v_add( Cldfb_RealBuffer[ch][slot_idx], Cldfb_RealBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], Cldfb_RealBuffer[ch][slot_idx], 1 ); - v_add( Cldfb_ImagBuffer[ch][slot_idx], Cldfb_ImagBuffer[hLsSetup.index_lfe[idx_lfe]][slot_idx], Cldfb_ImagBuffer[ch][slot_idx], 1 ); - } - } - } - } - - idx_out = 0; - idx_lfe = 0; - - for ( ch = 0; ch < ( hLsSetup.nchan_out_woLFE + hLsSetup.num_lfe ); ch++ ) - { - if ( ( hLsSetup.num_lfe > 0 ) && ( hLsSetup.index_lfe[idx_lfe] == ch ) ) - { - if ( idx_lfe < ( hLsSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else if ( ch != idx_out ) - { - mvr2r( Cldfb_RealBuffer[ch][slot_idx], Cldfb_RealBuffer[idx_out][slot_idx], nband_synth ); - mvr2r( Cldfb_ImagBuffer[ch][slot_idx], Cldfb_ImagBuffer[idx_out][slot_idx], nband_synth ); - idx_out++; - } - else - { - idx_out++; - } - } - } - } - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - - ivas_binRenderer( st_ivas->hBinRenderer, - st_ivas->hCombinedOrientationData, - hParamMC->subframe_nbslots[subframe_idx], - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); - - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, hParamMC->num_freq_bands * hParamMC->subframe_nbslots[subframe_idx] ); - } - else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB ) - { - /* format conversion*/ - ivas_lssetupconversion_process_param_mc( st_ivas, hParamMC->subframe_nbslots[subframe_idx], Cldfb_RealBuffer, Cldfb_ImagBuffer, channel_active ); - } - - /* CLDFB synthesis */ - for ( ch = 0; ch < nchan_out_cldfb; ch++ ) - { - float *RealBuffer[16]; - float *ImagBuffer[16]; - - if ( channel_active[ch] ) - { - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hParamMC->subframe_nbslots[subframe_idx]; i++ ) - { - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - RealBuffer[i] = Cldfb_RealBuffer_Binaural[ch][i]; - ImagBuffer[i] = Cldfb_ImagBuffer_Binaural[ch][i]; - } - else - { - RealBuffer[i] = Cldfb_RealBuffer[ch][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[ch][i]; - } - } - - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][slot_idx_start_cldfb_synth * hParamMC->num_freq_bands] ), - hParamMC->num_freq_bands * hParamMC->subframe_nbslots[subframe_idx], st_ivas->cldfbSynDec[ch] ); - } - else - { - set_f( &( output_f[ch][slot_idx_start_cldfb_synth * hParamMC->num_freq_bands] ), 0.0f, hParamMC->num_freq_bands * hParamMC->subframe_nbslots[subframe_idx] ); - } - } - slot_idx_start += hParamMC->subframe_nbslots[subframe_idx]; - slot_idx_start_cldfb_synth += hParamMC->subframe_nbslots[subframe_idx]; - } - - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC ) - { - ivas_mc2sba( st_ivas->hIntSetup, output_f, output_f, hParamMC->num_freq_bands * slots_to_render, st_ivas->hOutSetup.ambisonics_order, 0.f ); - } - - /* update */ - if ( hParamMC->slots_rendered == hParamMC->num_slots ) - { - hParamMC->hMetadataPMC->last_coded_bwidth = hParamMC->hMetadataPMC->coded_bwidth; - param_mc_update_mixing_matrices( hParamMC, hParamMC->h_output_synthesis_cov_state.mixing_matrix, hParamMC->h_output_synthesis_cov_state.mixing_matrix_res, nchan_transport, nchan_out_cov ); - } - hParamMC->subframes_rendered = last_sf; - *nSamplesAvailableNext = ( hParamMC->num_slots - hParamMC->slots_rendered ) * NS2SA( output_Fs, CLDFB_SLOT_NS ); - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- * param_mc_dec_init() @@ -3934,7 +2274,6 @@ void ivas_param_mc_dec_render( * Parametric MC decoding initialization *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_dec_init_fx( PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder DirAC handle */ const Word16 nchan_transport, /* i : number of input (transport) channels */ @@ -3988,57 +2327,6 @@ static void ivas_param_mc_dec_init_fx( return; } -#else -static void ivas_param_mc_dec_init( - PARAM_MC_DEC_HANDLE hParamMC, /* i/o: decoder DirAC handle */ - const int16_t nchan_transport, /* i : number of input (transport) channels */ - const int16_t nchan_cov ) /* i : number of cov synthesis channels */ -{ - int16_t k; - uint16_t max_param_band_residual; - int16_t len; - - /*-----------------------------------------------------------------* - * init sub-modules - *-----------------------------------------------------------------*/ - - /* decorrelation */ - if ( hParamMC->max_band_decorr > 0 ) - { - len = hParamMC->diff_proto_info->num_protos_diff * hParamMC->h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr; - - /* init onsetDetectionPower */ - set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_1, len ); - set_zero( hParamMC->h_freq_domain_decorr_ap_state->h_onset_detection_power_state.onset_detector_2, len ); - } - - max_param_band_residual = 0; - - /* output synthesis */ - for ( k = hParamMC->hMetadataPMC->num_parameter_bands; k >= 0; k-- ) - { - if ( hParamMC->band_grouping[k] <= hParamMC->max_band_decorr ) - { - max_param_band_residual = k; - break; - } - } - - ivas_dirac_dec_output_synthesis_cov_init( &( hParamMC->h_output_synthesis_cov_state ), nchan_transport, nchan_cov, hParamMC->hMetadataPMC->num_parameter_bands, max_param_band_residual ); - - /*-----------------------------------------------------------------* - * init proto frames - *-----------------------------------------------------------------*/ - - if ( hParamMC->max_band_decorr > 0 ) - { - set_zero( hParamMC->proto_frame_f, 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands ); - set_zero( hParamMC->proto_frame_dec_f, 2 * nchan_cov * hParamMC->num_freq_bands ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4052,47 +2340,6 @@ static void ivas_param_mc_dec_init( * Compute prototypes for decorrelation *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void param_mc_protoSignalComputation( - float *RealBuffer, /* i : CLDFB samples of the transport channels (real part) */ - float *ImagBuffer, /* i : CLDFB samples of the transport channels (imaginary part) */ - float *proto_frame_f, /* o : interleaved complex prototype CLDFB samples */ - const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, /* i : prototype generation information */ - const int16_t num_freq_bands /* i : number of frequency bands for the prototypes */ -) -{ - int16_t band; - int16_t proto_ch_idx, source_ch_cnt; - float *p_proto_frame; - float *p_real_buffer; - float *p_imag_buffer; - - set_zero( proto_frame_f, 2 * num_freq_bands * diff_proto_info->num_protos_diff ); - - for ( proto_ch_idx = 0; proto_ch_idx < diff_proto_info->num_protos_diff; proto_ch_idx++ ) - { - int16_t num_source_ch = diff_proto_info->num_source_chan_diff[proto_ch_idx]; - - for ( source_ch_cnt = 0; source_ch_cnt < num_source_ch; source_ch_cnt++ ) - { - float fac = diff_proto_info->proto_fac[proto_ch_idx][source_ch_cnt]; - int16_t source_ch_idx = diff_proto_info->source_chan_idx[proto_ch_idx][source_ch_cnt]; - - p_proto_frame = &proto_frame_f[proto_ch_idx * num_freq_bands * 2]; - p_real_buffer = &RealBuffer[source_ch_idx * num_freq_bands]; - p_imag_buffer = &ImagBuffer[source_ch_idx * num_freq_bands]; - - for ( band = 0; band < num_freq_bands; band++ ) - { - *( p_proto_frame++ ) += fac * ( *( p_real_buffer++ ) ); - *( p_proto_frame++ ) += fac * ( *( p_imag_buffer++ ) ); - } - } - } - - return; -} -#else static void param_mc_protoSignalComputation_fx( Word32 *RealBuffer_fx, /* i : CLDFB samples of the transport channels (real part) */ Word32 *ImagBuffer_fx, /* i : CLDFB samples of the transport channels (imaginary part) */ @@ -4149,7 +2396,6 @@ static void param_mc_protoSignalComputation_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_param_mc_dec_compute_diffuse_proto() @@ -4158,7 +2404,6 @@ static void param_mc_protoSignalComputation_fx( * the buffers used in the final synthesis *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_dec_copy_diffuse_proto( PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ Word32 Cldfb_buffer_real_fx[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : CLDFB buffer used in the final synthesis (real part) */ @@ -4184,41 +2429,12 @@ static void ivas_param_mc_dec_copy_diffuse_proto( Cldfb_buffer_real_fx[k][slot_idx][l] = *( p_proto_diff_fx++ ); // Q11 move32(); Cldfb_buffer_imag_fx[k][slot_idx][l] = *( p_proto_diff_fx++ ); // Q11 - move32(); - } - } - - return; -} -#else -static void ivas_param_mc_dec_copy_diffuse_proto( - PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ - float Cldfb_buffer_real[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : CLDFB buffer used in the final synthesis (real part) */ - float Cldfb_buffer_imag[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : CLDFB buffer used in the final synthesis (imaginary part) */ - const int16_t nY, /* i : number of decorrelated channels */ - const int16_t slot_idx /* i : current time slot index */ -) -{ - int16_t k, l; - int16_t num_freq_bands, num_freq_bands_diff; - float *p_proto_diff; - - num_freq_bands = hParamMC->num_freq_bands; - num_freq_bands_diff = hParamMC->h_output_synthesis_params.max_band_decorr; - - for ( k = 0; k < nY; k++ ) - { - p_proto_diff = hParamMC->proto_frame_dec_f + k * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - Cldfb_buffer_real[k][slot_idx][l] = *( p_proto_diff++ ); - Cldfb_buffer_imag[k][slot_idx][l] = *( p_proto_diff++ ); + move32(); } } return; } -#endif /*------------------------------------------------------------------------- * ivas_param_mc_bin2dec() @@ -4226,7 +2442,6 @@ static void ivas_param_mc_dec_copy_diffuse_proto( * decode a number of bits to an integer *------------------------------------------------------------------------*/ /* r : decoded integer */ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_param_mc_bin2dec_fx( UWord16 bits[PARAM_MC_MAX_BITS], /* i : bit buffer */ const Word16 N /* i : number of bits to decode */ @@ -4245,32 +2460,12 @@ static Word16 ivas_param_mc_bin2dec_fx( return out; } -#else -static int16_t ivas_param_mc_bin2dec( - uint16_t bits[PARAM_MC_MAX_BITS], /* i : bit buffer */ - const int16_t N /* i : number of bits to decode */ -) -{ - int16_t i; - int16_t out; - - assert( N <= 16 ); - out = 0; - for ( i = 0; i < N; i++ ) - { - out += ( bits[i] << ( N - 1 - i ) ); - } - - return out; -} -#endif /*------------------------------------------------------------------------- * ivas_param_mc_uniform_decoder() * * decode a uniformily coded sequence of float values *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_param_mc_uniform_decoder_fx( Word16 *seq, /* o : decoded sequence of float values hParamCodingInfo -> Q-quant*/ const Word16 sz_seq, /* i : number of values to decode */ @@ -4298,33 +2493,6 @@ static Word16 ivas_param_mc_uniform_decoder_fx( return n_bits; } -#else -static int16_t ivas_param_mc_uniform_decoder( - float *seq, /* o : decoded sequence of float values */ - const int16_t sz_seq, /* i : number of values to decode */ - const float *alphabet, /* i : codebook */ - const int16_t N, /* i : number of bits per coded index */ - uint16_t bit_buffer[PARAM_MC_MAX_BITS] /* i : bit buffer to decode */ -) -{ - int16_t i; - int16_t idx; - int16_t n_bits; - - n_bits = 0; - assert( N * sz_seq < PARAM_MC_MAX_BITS ); - - for ( i = 0; i < sz_seq; ++i ) - { - idx = ivas_param_mc_bin2dec( &bit_buffer[i * N], N ); - seq[i] = alphabet[idx]; - } - - n_bits = N * sz_seq; - - return n_bits; -} -#endif /*------------------------------------------------------------------------- @@ -4332,7 +2500,6 @@ static int16_t ivas_param_mc_uniform_decoder( * * decode a sequency of inidices coded with a range coder *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_param_mc_range_decoder_LC_fx( UWord16 *bit_buffer, /* i : bit buffer to read from */ Word16 *x, /* o : decoded indices */ @@ -4388,59 +2555,6 @@ static Word16 ivas_param_mc_range_decoder_LC_fx( return cur_bit_pos; } -#else -static int16_t ivas_param_mc_range_decoder_LC( - uint16_t *bit_buffer, /* i : bit buffer to read from */ - int16_t *x, /* o : decoded indices */ - int16_t *BER_detect, /* o : flag for indicating a bit error */ - const int16_t sz_seq, /* i : size of the sequence to be decoded */ - const int16_t sz_alphabet, /* i : size of the alphabet */ - const uint16_t *cft, /* i : cumulative frequency table */ - const uint16_t *sft, /* i : symbol frequency table */ - const int16_t tot_shift, /* i : total frequency as a power of 2 */ - const int16_t nbbits /* i : maximum bit budget */ -) -{ - RangeUniDecState rc_st_dec; /* State of the range decoder */ - int16_t cur_bit_pos; - int16_t k; - int16_t r; - - /* Start Decoding */ - /* Initialize range decoder */ - cur_bit_pos = 0; - rc_uni_dec_init( &rc_st_dec, bit_buffer, nbbits - 32 ); /* (nbbits + 30) entries are read by the decoder */ - - /* Main Loop through the indices */ - for ( k = 0; k < sz_seq; k++ ) - { - r = rc_uni_dec_read_symbol_fastS( &rc_st_dec, cft, sft, sz_alphabet, tot_shift ); /*Alphabet size = 17 (2^4 = 16 MSB symbols + 1 ESC symbol) */ - /* r is the symbol read, the possible values are {0,1,....alphabet_size - 1} */ - - /* Update bitstream pointer */ - cur_bit_pos = rc_uni_dec_virtual_finish( &rc_st_dec ); - - /* Confirm that there is no overflow */ - if ( cur_bit_pos > nbbits ) - { - *BER_detect |= 1; - } - - x[k] = r; - } - - /* We don't need to finish because virtual_finish() already does the same */ - /*st->next_bit_pos = rc_uni_dec_finish(&rc_st_dec);*/ - - /* Check for bitstream errors */ - if ( rc_st_dec.bit_error_detected != 0 ) - { - *BER_detect |= 1; - } - - return cur_bit_pos; -} -#endif /*------------------------------------------------------------------------- * param_mc_compute_interpolator() @@ -4448,7 +2562,6 @@ static int16_t ivas_param_mc_range_decoder_LC( * compute the interpolator used in the final synthesis *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_dec_compute_interpolator_fx( const UWord16 bAttackPresent, /* i : flag indicating if we have a transient in the current frame */ const UWord16 attackPos, /* i : position of the transient */ @@ -4478,35 +2591,6 @@ static void ivas_param_mc_dec_compute_interpolator_fx( return; } -#else -static void ivas_param_mc_dec_compute_interpolator( - const uint16_t bAttackPresent, /* i : flag indicating if we have a transient in the current frame */ - const uint16_t attackPos, /* i : position of the transient */ - const uint16_t interp_length, /* i : number of interpolation values to be calculated */ - float *interpolator /* o : interpolator */ -) -{ - int16_t idx; - - if ( bAttackPresent ) - { - for ( idx = 0; idx < 2 * attackPos; idx++ ) - { - interpolator[idx] = 0.0f; - } - for ( ; idx < interp_length; idx++ ) - { - interpolator[idx] = 1.0f; - } - } - else - { - ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, interp_length, interpolator ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4515,42 +2599,6 @@ static void ivas_param_mc_dec_compute_interpolator( * remove all LFE related values from a covariance matrix *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void remove_lfe_from_cy( - const int16_t nY, /* i : dimension of the covariance matrix */ - int16_t lfe_indices[PARAM_MC_LOCAL_SZ_LFE_MAP], /* i : LFE index */ - int16_t num_lfe, /* i : number of LFEs */ - float *cy, /* i : covariance matrix */ - float *cy_woLFE ) /* o : covariance matrix with LFE removed */ -{ - int16_t ch_idx1, ch_idx2; - int16_t lfe_idx1, lfe_idx2; - float *ptrCy; - float *ptrCy_out; - - ptrCy = cy; - ptrCy_out = cy_woLFE; - - for ( lfe_idx1 = 0; lfe_idx1 < num_lfe + 1; lfe_idx1++ ) - { - for ( ch_idx1 = lfe_indices[lfe_idx1] + 1; ch_idx1 < lfe_indices[lfe_idx1 + 1]; ch_idx1++ ) - { - for ( lfe_idx2 = 0; lfe_idx2 < num_lfe + 1; lfe_idx2++ ) - { - for ( ch_idx2 = lfe_indices[lfe_idx2] + 1; ch_idx2 < lfe_indices[lfe_idx2 + 1]; ch_idx2++ ) - { - *( ptrCy_out++ ) = *( ptrCy++ ); - } - ptrCy++; - } - ptrCy--; - } - ptrCy += nY; - } - - return; -} -#else static void remove_lfe_from_cy_fx( const Word16 nY, /* i : dimension of the covariance matrix */ Word16 lfe_indices[PARAM_MC_LOCAL_SZ_LFE_MAP], /* i : LFE index */ @@ -4587,7 +2635,6 @@ static void remove_lfe_from_cy_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -4597,250 +2644,6 @@ static void remove_lfe_from_cy_fx( * using the covariance method *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_get_mixing_matrices( - PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ - IVAS_OUTPUT_SETUP *hSynthesisOutputSetup, - float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : input covariance for all parameter bands */ - float *mixing_matrix[], /* o : direct mixing matrices for all parameter bands */ - float *mixing_matrix_res[], /* o : residual mixing matrices for all parameter bands */ - const int16_t nY_intern, /* i : number of channels in the transported format */ - const PARAM_MC_SYNTHESIS_CONF synth_config, /* i : Parametric MC synthesis config */ - const int16_t nX, /* i : number of transport channels */ - const int16_t nY_cov /* i : number of covariance synthesis output channels */ -) -{ - int16_t param_band_idx; - float Cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float Cy[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float Cy_diag[MAX_CICP_CHANNELS]; - float Cr[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float Cproto_diag[MAX_CICP_CHANNELS]; - float Cproto[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float *Cx_state; - float *Cx_old_state; - float Cy_state[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float *Cy_old_state; - int16_t nY_band; - float proto_matrix_noLFE[PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS]; - float *proto_matrix_ptr; - int16_t num_lfe_bands; - int16_t brange[2]; - uint16_t i; - int16_t ch_idx1, ch_idx2, lfe_idx1, lfe_idx2; - float *ptrMM; - float *ptrMM_out; - float Cy_full[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float mixing_matrix_local[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float mixing_matrix_res_local[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - int16_t remove_lfe; - int16_t lfe_indices[PARAM_MC_LOCAL_SZ_LFE_MAP]; - - set_zero( Cproto, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( mat_mult_buffer1, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( proto_matrix_noLFE, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); - - nY_band = nY_cov; - num_lfe_bands = 0; - remove_lfe = 0; - - set_s( lfe_indices, -1, PARAM_MC_LOCAL_SZ_LFE_MAP ); - if ( hSynthesisOutputSetup->num_lfe ) - { - float *proto_matrix_ptr_in; - for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe; lfe_idx1++ ) - { - lfe_indices[lfe_idx1 + 1] = hSynthesisOutputSetup->index_lfe[lfe_idx1]; - } - lfe_indices[hSynthesisOutputSetup->num_lfe + 1] = nY_cov; - proto_matrix_ptr = &proto_matrix_noLFE[0]; - proto_matrix_ptr_in = &hParamMC->h_output_synthesis_params.proto_matrix[0]; - set_zero( proto_matrix_noLFE, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); - - for ( ch_idx1 = 0; ch_idx1 < nX; ch_idx1++ ) - { - for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) - { - for ( ch_idx2 = lfe_indices[lfe_idx1] + 1; ch_idx2 < lfe_indices[lfe_idx1 + 1]; ch_idx2++ ) - { - *( proto_matrix_ptr++ ) = *( proto_matrix_ptr_in++ ); - } - proto_matrix_ptr_in++; - } - proto_matrix_ptr_in--; - } - } - - if ( hParamMC->hMetadataPMC->lfe_on ) - { - num_lfe_bands = PARAM_MC_MAX_BAND_LFE; - } - - for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) - { - if ( hSynthesisOutputSetup->num_lfe > 0 && param_band_idx >= num_lfe_bands ) - { - remove_lfe = 1; - nY_band = nY_cov - hSynthesisOutputSetup->num_lfe; - proto_matrix_ptr = proto_matrix_noLFE; - } - else - { - proto_matrix_ptr = hParamMC->h_output_synthesis_params.proto_matrix; - } - - brange[0] = hParamMC->band_grouping[param_band_idx]; - brange[1] = hParamMC->band_grouping[param_band_idx + 1]; - - Cx_state = Cx_in[param_band_idx]; - Cx_old_state = hParamMC->h_output_synthesis_cov_state.cx_old[param_band_idx]; - Cy_old_state = hParamMC->h_output_synthesis_cov_state.cy_old[param_band_idx]; - - /* Getting mixing mtx */ - /* estimate target cov from input cov and proto_matrix */ - matrix_product( hParamMC->proto_matrix_int, nY_intern, nX, 0, Cx_state, nX, nX, 0, mat_mult_buffer1 ); - - matrix_product( mat_mult_buffer1, nY_intern, nX, 0, hParamMC->proto_matrix_int, nY_intern, nX, 1, Cproto ); - - for ( ch_idx1 = 0; ch_idx1 < nY_intern; ch_idx1++ ) - { - if ( Cproto[ch_idx1 + ch_idx1 * nY_intern] < 0.0f ) - { - Cproto[ch_idx1 + ch_idx1 * nY_intern] = 0.0f; - } - } - - ivas_param_mc_dequantize_cov( hParamMC, - hParamMC->icld_q + param_band_idx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe, - hParamMC->icc_q + param_band_idx * hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe, - param_band_idx, nY_cov, - synth_config, - nY_intern, - nX, Cx_state, Cproto, Cy_state ); - - /* Smoothing: Sum over two buffers */ - if ( hParamMC->hMetadataPMC->bAttackPresent ) - { - /* no smoothing on attacks */ - mvr2r( Cx_state, Cx, nX * nX ); - mvr2r( Cy_state, Cy_full, nY_cov * nY_cov ); - } - else - { - /* smoothing gains are now identical to one, simply add up */ - v_add( Cx_state, Cx_old_state, Cx, nX * nX ); - v_add( Cy_state, Cy_old_state, Cy_full, nY_cov * nY_cov ); - } - - /* cov buffer update */ - mvr2r( Cx_state, Cx_old_state, nX * nX ); - mvr2r( Cy_state, Cy_old_state, nY_cov * nY_cov ); - - /* remove LFE if necessary */ - if ( remove_lfe ) - { - remove_lfe_from_cy( nY_cov, lfe_indices, hSynthesisOutputSetup->num_lfe, Cy_full, Cy ); - } - else - { - mvr2r( Cy_full, Cy, nY_band * nY_band ); - } - - matrix_product( proto_matrix_ptr, nY_band, nX, 0, Cx, nX, nX, 0, mat_mult_buffer1 ); - matrix_product_diag( mat_mult_buffer1, nY_band, nX, 0, proto_matrix_ptr, nY_band, nX, 1, Cproto_diag ); - - /* make sure we have no negative entries in Cproto_diag due to rounding errors */ - for ( ch_idx1 = 0; ch_idx1 < nY_band; ch_idx1++ ) - { - if ( Cproto_diag[ch_idx1] < 0.0f ) - { - Cproto_diag[ch_idx1] = 0.0f; - } - } - - /* Computing the mixing matrices */ - - /* bands with decorr */ - if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) - { - computeMixingMatrices( nX, nY_band, Cx, Cy, proto_matrix_ptr, 0, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_local, Cr ); - - /* Compute mixing matrix for residual */ - computeMixingMatricesResidual( nY_band, Cproto_diag, Cr, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_res_local ); - - if ( remove_lfe ) - { - set_zero( mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); - - ptrMM = mixing_matrix_res_local; - ptrMM_out = mixing_matrix_res[param_band_idx]; - for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) - { - for ( ch_idx1 = lfe_indices[lfe_idx1] + 1; ch_idx1 < lfe_indices[lfe_idx1 + 1]; ch_idx1++ ) - { - for ( lfe_idx2 = 0; lfe_idx2 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx2++ ) - { - for ( ch_idx2 = lfe_indices[lfe_idx2] + 1; ch_idx2 < lfe_indices[lfe_idx2 + 1]; ch_idx2++ ) - { - *( ptrMM_out++ ) = *( ptrMM++ ); - } - ptrMM_out++; - } - ptrMM_out--; - } - ptrMM_out += nY_cov; - } - } - else - { - mvr2r( mixing_matrix_res_local, mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); - } - } - else if ( brange[0] < hParamMC->max_band_energy_compensation ) - { - /* Compute mixing matrices (energy compensation only) */ - computeMixingMatrices( nX, nY_band, Cx, Cy, proto_matrix_ptr, 1, PARAM_MC_REG_SX, PARAM_MC_REG_GHAT, mixing_matrix_local, Cr ); - } - else - { - /*if neither decorrelation nor energy compensation is applied*/ - for ( i = 0; i < nY_band; i++ ) - { - Cy_diag[i] = Cy[i + nY_band * i]; - Cy_diag[i] = sqrtf( Cy_diag[i] / ( Cproto_diag[i] + EPSILON ) ); - } - - diag_matrix_product( Cy_diag, nY_band, proto_matrix_ptr, nY_band, nX, 0, mixing_matrix_local ); - } - if ( remove_lfe ) - { - set_zero( mixing_matrix[param_band_idx], nX * nY_cov ); - - ptrMM = mixing_matrix_local; - ptrMM_out = mixing_matrix[param_band_idx]; - for ( ch_idx1 = 0; ch_idx1 < nX; ch_idx1++ ) - { - for ( lfe_idx1 = 0; lfe_idx1 < hSynthesisOutputSetup->num_lfe + 1; lfe_idx1++ ) - { - for ( ch_idx2 = lfe_indices[lfe_idx1] + 1; ch_idx2 < lfe_indices[lfe_idx1 + 1]; ch_idx2++ ) - { - *( ptrMM_out++ ) = *( ptrMM++ ); - } - ptrMM_out++; - } - ptrMM_out--; - } - } - else - { - mvr2r( mixing_matrix_local, mixing_matrix[param_band_idx], nY_cov * nX ); - } - } - - return; -} -#else static void ivas_param_mc_get_mixing_matrices_fx( PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ IVAS_OUTPUT_SETUP *hSynthesisOutputSetup, @@ -5249,164 +3052,22 @@ static void ivas_param_mc_get_mixing_matrices_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_param_mc_get_mono_stereo_mixing_matrices() * - * calculate the direct and residual mixing matrices - * for mono and stereo output - *------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED // Not used anywhere -static void ivas_param_mc_get_mono_stereo_mixing_matrices( - PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ - float Cx_in[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS], /* i : transport channel covariance for all parameter bands */ - float *mixing_matrix[], /* o : direct mixing matrices for all parameter bands */ - float *mixing_matrix_res[], /* o : residual mixing matrices for all parameter bands */ - const int16_t nY_intern, /* i : number of channels of the transport format */ - const int16_t nX, /* i : number of transport channels */ - const int16_t nY_cov ) /* i : number of output channels */ -{ - int16_t param_band_idx; - float Cx[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float Cy_diag[MAX_CICP_CHANNELS]; - float Cproto_diag[MAX_CICP_CHANNELS]; - float Cproto[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float *Cx_state; - float *Cx_old_state; - float Cy_state[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float *Cy_old_state; - int16_t nY_band; - float proto_matrix[PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS]; - uint16_t i; - - set_zero( Cproto, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( mat_mult_buffer1, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( proto_matrix, PARAM_MC_MAX_TRANSPORT_CHANS * MAX_CICP_CHANNELS ); - - mvr2r( hParamMC->h_output_synthesis_params.proto_matrix, proto_matrix, nY_cov * nX ); - nY_band = nY_cov; - - for ( param_band_idx = 0; param_band_idx < hParamMC->num_param_bands_synth; param_band_idx++ ) - { - float Cy_full[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float mixing_matrix_woLFE[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float Nrqq[MAX_OUTPUT_CHANNELS]; - float target_ch_ener[MAX_OUTPUT_CHANNELS]; - int16_t k, l; - float *ild_q; - - Cx_state = Cx_in[param_band_idx]; - Cx_old_state = hParamMC->h_output_synthesis_cov_state.cx_old[param_band_idx]; - Cy_old_state = hParamMC->h_output_synthesis_cov_state.cy_old[param_band_idx]; - set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); - set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); - set_zero( Cy_full, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( Cy_state, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( Cproto_diag, MAX_CICP_CHANNELS ); - ild_q = hParamMC->icld_q + param_band_idx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; - - /*get back Nrg*/ - for ( k = 0; k < nY_intern; k++ ) - { - float ref_ener = 0.0f; - int16_t ref_channel_cnt; - int16_t ref_channel_idx; - - for ( ref_channel_cnt = 0; ref_channel_cnt < hParamMC->hMetadataPMC->ild_mapping_conf->num_ref_channels[k]; ref_channel_cnt++ ) - { - ref_channel_idx = hParamMC->hMetadataPMC->ild_mapping_conf->ref_channel_idx[k][ref_channel_cnt]; - ref_ener += Cx_state[ref_channel_idx + ref_channel_idx * nX]; - } - Nrqq[hParamMC->hMetadataPMC->ild_mapping_conf->ild_index[k]] = powf( 10.0f, ild_q[k] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[k] * ref_ener; - } - for ( k = 0; k < nY_cov; k++ ) - { - for ( l = 0; l < nY_intern; l++ ) - { - target_ch_ener[k] += hParamMC->ls_conv_dmx_matrix[k + l * nY_cov] * Nrqq[l]; - } - Cy_state[k + nY_cov * k] = target_ch_ener[k]; - } - - /* Smoothing: Sum over two buffers */ - if ( hParamMC->hMetadataPMC->bAttackPresent ) - { - /* no smoothing on attacks */ - mvr2r( Cx_state, Cx, nX * nX ); - mvr2r( Cy_state, Cy_full, nY_cov * nY_cov ); - } - else - { - /* smoothing gains are now identical to one, simply add up */ - v_add( Cx_state, Cx_old_state, Cx, nX * nX ); - v_add( Cy_state, Cy_old_state, Cy_full, nY_cov * nY_cov ); - } - - /* cov buffer update */ - mvr2r( Cx_state, Cx_old_state, nX * nX ); - mvr2r( Cy_state, Cy_old_state, nY_cov * nY_cov ); - - - matrix_product( proto_matrix, nY_band, nX, 0, Cx, nX, nX, 0, mat_mult_buffer1 ); - matrix_product_diag( mat_mult_buffer1, nY_band, nX, 0, proto_matrix, nY_band, nX, 1, Cproto_diag ); - /* Computing the mixing matrices */ - for ( i = 0; i < nY_band; i++ ) - { - Cy_diag[i] = Cy_full[i + nY_band * i]; - Cy_diag[i] = sqrtf( Cy_diag[i] / ( Cproto_diag[i] + EPSILON ) ); - } - - diag_matrix_product( Cy_diag, nY_band, proto_matrix, nY_band, nX, 0, mixing_matrix_woLFE ); - - mvr2r( mixing_matrix_woLFE, mixing_matrix[param_band_idx], nY_cov * nX ); - if ( hParamMC->band_grouping[param_band_idx] < hParamMC->h_output_synthesis_params.max_band_decorr ) - { - set_zero( mixing_matrix_res[param_band_idx], nY_cov * nY_cov ); - } - } - - return; -} -#endif - -/*------------------------------------------------------------------------- - * param_mc_update_mixing_matrices() - * - * update mixing matrix buffers - *------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void param_mc_update_mixing_matrices( - PARAM_MC_DEC_HANDLE hParamMC, /* i/o: Parametric MC handle */ - float *mixing_matrix[], /* i : direct mixing matrices for the frame just processed */ - float *mixing_matrix_res[], /* i : residual mixing matrices for the frame just processed */ - const uint16_t nX, /* i : number of transport channels */ - const uint16_t nY ) /* i : number of synthesis channels */ -{ - uint16_t param_band_idx; - - for ( param_band_idx = 0; param_band_idx < hParamMC->hMetadataPMC->nbands_coded; param_band_idx++ ) - { - int16_t brange[2]; - - brange[0] = hParamMC->band_grouping[param_band_idx]; - brange[1] = hParamMC->band_grouping[param_band_idx + 1]; + * calculate the direct and residual mixing matrices + * for mono and stereo output + *------------------------------------------------------------------------*/ - mvr2r( mixing_matrix[param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_old[param_band_idx], nX * nY ); - if ( brange[0] < hParamMC->h_output_synthesis_params.max_band_decorr ) - { - mvr2r( mixing_matrix_res[param_band_idx], hParamMC->h_output_synthesis_cov_state.mixing_matrix_res_old[param_band_idx], nY * nY ); - } - } +/*------------------------------------------------------------------------- + * param_mc_update_mixing_matrices() + * + * update mixing matrix buffers + *------------------------------------------------------------------------*/ - return; -} -#else static void param_mc_update_mixing_matrices_fx( PARAM_MC_DEC_HANDLE hParamMC, /* i/o: Parametric MC handle */ Word32 *mixing_matrix[], /* i : direct mixing matrices for the frame just processed */ @@ -5441,7 +3102,6 @@ static void param_mc_update_mixing_matrices_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -5450,159 +3110,6 @@ static void param_mc_update_mixing_matrices_fx( * generate the target covariance matrix *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_dequantize_cov( - PARAM_MC_DEC_HANDLE hParamMC, /* i : Parametric MC handle */ - float *ild_q, /* i : sequence of dequantized ILD values */ - float *icc_q, /* i : sequence of dequantized ICC values */ - const int16_t param_band_index, /* i : current parameter band */ - const int16_t nY_cov, /* i : number of output channels in the covariance synthesis */ - const PARAM_MC_SYNTHESIS_CONF synth_conf, /* i : Parametric MC synthesis configuration */ - const int16_t nY_int, /* i : number of channels in the transported format */ - const int16_t nX, /* i : number of transport channels */ - float *Cx_state, /* i : transport channel covariance matrix */ - float *Cproto, /* i : prototype matrix */ - float *Cy_state /* o : target covariance matrix */ -) -{ - float Nrqq[MAX_OUTPUT_CHANNELS]; - float a[MAX_OUTPUT_CHANNELS]; - int16_t k; - int16_t l; - float *Cyp; - float ap; - const PARAM_MC_ILD_MAPPING *h_ild_mapping; - float Cy_state_int[MAX_OUTPUT_CHANNELS * MAX_OUTPUT_CHANNELS]; - - set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); - h_ild_mapping = hParamMC->hMetadataPMC->ild_mapping_conf; - - /*get back Nrg*/ - for ( k = 0; k < nY_int; k++ ) - { - float ref_ener = 0.0f; - int16_t ref_channel_cnt; - int16_t ref_channel_idx; - - for ( ref_channel_cnt = 0; ref_channel_cnt < h_ild_mapping->num_ref_channels[k]; ref_channel_cnt++ ) - { - ref_channel_idx = h_ild_mapping->ref_channel_idx[k][ref_channel_cnt]; - ref_ener += Cx_state[ref_channel_idx + ref_channel_idx * nX]; - } - Nrqq[h_ild_mapping->ild_index[k]] = powf( 10.0f, ild_q[k] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[k] * ref_ener; - } - // dbgwrite2_txt(Nrqq,size,"../nrqq.txt"); - - /* estimate ICCs from estimated Cproto */ - for ( k = 0; k < nY_int; k++ ) - { - a[k] = 1.f / ( sqrtf( Cproto[k + nY_int * k] ) + EPSILON ); - - v_multc( Cproto + k * nY_int, a[k], Cy_state_int + k * nY_int, nY_int ); - } - - for ( k = 0; k < nY_int; k++ ) - { - Cyp = Cy_state_int + k; - ap = a[k]; - for ( l = 0; l < nY_int; l++ ) - { - ( *Cyp ) *= ap; - Cyp += nY_int; - } - } - - /* replace some estimated ICCs with transmitted values */ - for ( k = 0; k < hParamMC->hMetadataPMC->icc_mapping_conf->icc_map_size_lfe; k++ ) - { - Cy_state_int[hParamMC->hMetadataPMC->icc_mapping_conf->icc_mapping[k][0] + nY_int * hParamMC->hMetadataPMC->icc_mapping_conf->icc_mapping[k][1]] = icc_q[k]; - Cy_state_int[hParamMC->hMetadataPMC->icc_mapping_conf->icc_mapping[k][1] + nY_int * hParamMC->hMetadataPMC->icc_mapping_conf->icc_mapping[k][0]] = icc_q[k]; - } - - if ( param_band_index >= PARAM_MC_MAX_BAND_LFE || !hParamMC->hMetadataPMC->lfe_on ) - { - for ( k = 0; k < nY_int; k++ ) - { - Cy_state_int[k + 3 * nY_int] = 1.0f; - Cy_state_int[3 + k * nY_int] = 1.0f; - } - Nrqq[3] = 0.0f; - } - - /* Generate back Covariance Mtx */ - for ( k = 0; k < nY_int; k++ ) - { - a[k] = sqrtf( Nrqq[k] ); - v_multc( Cy_state_int + k * nY_int, a[k], Cy_state_int + k * nY_int, nY_int ); - } - - for ( k = 0; k < nY_int; k++ ) - { - Cyp = Cy_state_int + k; - ap = a[k]; - - for ( l = 0; l < nY_int; l++ ) - { - ( *Cyp ) *= ap; - Cyp += nY_int; - } - } - - if ( synth_conf == PARAM_MC_SYNTH_LS_CONV_COV ) - { - /* Cy = dmx*Cy*dmx' */ - float mat_mult_buffer1[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float target_ch_ener[MAX_CICP_CHANNELS]; - float dmx_ch_ener[MAX_CICP_CHANNELS]; - - set_zero( target_ch_ener, MAX_CICP_CHANNELS ); - set_zero( dmx_ch_ener, MAX_CICP_CHANNELS ); - - matrix_product( hParamMC->ls_conv_dmx_matrix, nY_cov, nY_int, 0, - Cy_state_int, nY_int, nY_int, 0, - mat_mult_buffer1 ); - - matrix_product( mat_mult_buffer1, nY_cov, nY_int, 0, - hParamMC->ls_conv_dmx_matrix, nY_cov, nY_int, 1, - Cy_state ); - - for ( k = 0; k < nY_cov; k++ ) - { - for ( l = 0; l < nY_int; l++ ) - { - target_ch_ener[k] += hParamMC->ls_conv_dmx_matrix[k + l * nY_cov] * Nrqq[l]; - } - - dmx_ch_ener[k] = Cy_state[k + nY_cov * k]; - - if ( dmx_ch_ener[k] < 0.0f ) - { - Cy_state[k + nY_cov * k] *= -1.0f; - dmx_ch_ener[k] *= -1.0f; - } - - target_ch_ener[k] = sqrtf( target_ch_ener[k] / ( dmx_ch_ener[k] + EPSILON ) ); - - v_multc( Cy_state + k * nY_cov, target_ch_ener[k], Cy_state + k * nY_cov, nY_cov ); - - Cyp = Cy_state + k; - ap = target_ch_ener[k]; - for ( l = 0; l < nY_cov; l++ ) - { - ( *Cyp ) *= ap; - Cyp += nY_cov; - } - } - } - else - { - mvr2r( Cy_state_int, Cy_state, nY_int * nY_int ); - } - - return; -} - -#else /*------------------------------------------------------------------------- * ivas_param_mc_dequantize_cov_fx() @@ -5926,7 +3433,6 @@ static void ivas_param_mc_dequantize_cov_fx( return; } -#endif /*-------------------------------------------------------------------------* * param_mc_set_num_synth_bands() @@ -5934,7 +3440,6 @@ static void ivas_param_mc_dequantize_cov_fx( * set the number of frequency bands to be synthesized *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void param_mc_set_num_synth_bands( const Word32 output_Fs, /* i : output sampling frequency */ PARAM_MC_DEC_HANDLE hParamMC /* i/o: Parametric MC handle */ @@ -5979,51 +3484,6 @@ static void param_mc_set_num_synth_bands( return; } -#else -static void param_mc_set_num_synth_bands( - const int32_t output_Fs, /* i : output sampling frequency */ - PARAM_MC_DEC_HANDLE hParamMC /* i/o: Parametric MC handle */ -) -{ - uint16_t max_param_band_synth; - const int16_t *param_mc_bands_coded; - - switch ( hParamMC->hMetadataPMC->num_parameter_bands ) - { - case 20: - param_mc_bands_coded = param_mc_bands_coded_20; - break; - case 10: - param_mc_bands_coded = param_mc_bands_coded_10; - break; - case 14: - default: - param_mc_bands_coded = param_mc_bands_coded_14; - break; - } - - switch ( output_Fs ) - { - case 8000: - max_param_band_synth = param_mc_bands_coded[NB]; - break; - case 16000: - max_param_band_synth = param_mc_bands_coded[WB]; - break; - case 32000: - max_param_band_synth = param_mc_bands_coded[SWB]; - break; - case 48000: - default: - max_param_band_synth = param_mc_bands_coded[FB]; - break; - } - - hParamMC->num_param_bands_synth = min( hParamMC->hMetadataPMC->nbands_coded, max_param_band_synth ); - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* @@ -6033,7 +3493,6 @@ static void param_mc_set_num_synth_bands( *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error param_mc_get_diff_proto_info_fx( const Word32 *proto_mtx, /* i : protoype matrix for the synthesis */ const UWord16 nchan_transport, /* i : number of transport channels */ @@ -6170,131 +3629,7 @@ static ivas_error param_mc_get_diff_proto_info_fx( } return IVAS_ERR_OK; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error param_mc_get_diff_proto_info( - const float *proto_mtx, /* i : protoype matrix for the synthesis */ - const uint16_t nchan_transport, /* i : number of transport channels */ - const uint16_t nchan_out_cov, /* i : number if output channels of the covariance synthesis */ - PARAM_MC_DIFF_PROTO_INFO *p_diff_proto_info /* o : generated diffuse prototype info */ -) -{ - float proto_fac[MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS]; - uint16_t cur_out_ch; - uint16_t cur_diff_proto; - uint16_t cur_transport_ch; - uint16_t max_num_src_chan; - - /* Initializations */ - max_num_src_chan = 0; - set_zero( proto_fac, MAX_CICP_CHANNELS * PARAM_MC_MAX_TRANSPORT_CHANS ); - if ( ( p_diff_proto_info->proto_index_diff = (int16_t *) malloc( nchan_out_cov * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set_s( p_diff_proto_info->proto_index_diff, 0, nchan_out_cov ); - - if ( ( p_diff_proto_info->num_source_chan_diff = (int16_t *) malloc( nchan_out_cov * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - set_s( p_diff_proto_info->num_source_chan_diff, 0, nchan_out_cov ); - - /* we have at least one prototype, copy the first one */ - p_diff_proto_info->num_protos_diff = 1; - mvr2r_inc( proto_mtx, nchan_out_cov, proto_fac, nchan_out_cov, nchan_transport ); - p_diff_proto_info->proto_index_diff[0] = 0; - - /* search for distinct prototypes */ - for ( cur_out_ch = 1; cur_out_ch < nchan_out_cov; cur_out_ch++ ) - { - uint16_t found = 0; - - for ( cur_diff_proto = 0; cur_diff_proto < p_diff_proto_info->num_protos_diff; cur_diff_proto++ ) - { - float diff = 0; - float *proto_fac_ptr = proto_fac + cur_diff_proto; - const float *proto_mtx_ptr = proto_mtx + cur_out_ch; - - for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) - { - diff += fabsf( *proto_fac_ptr - *proto_mtx_ptr ); - proto_fac_ptr += nchan_out_cov; - proto_mtx_ptr += nchan_out_cov; - } - - /* we already have this prototype, save the index */ - if ( diff < 0.1f ) - { - found = 1; - p_diff_proto_info->proto_index_diff[cur_out_ch] = cur_diff_proto; - break; - } - } - - /* new distinct prototype, add it */ - if ( found == 0 ) - { - const float *proto_mtx_ptr = proto_mtx + cur_out_ch; - int16_t cur_num_src_chan; - - cur_num_src_chan = 0; - for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) - { - if ( *proto_mtx_ptr > EPSILON ) - { - cur_num_src_chan++; - } - proto_mtx_ptr += nchan_out_cov; - } - - mvr2r_inc( proto_mtx + cur_out_ch, nchan_out_cov, proto_fac + p_diff_proto_info->num_protos_diff, nchan_out_cov, nchan_transport ); - - p_diff_proto_info->proto_index_diff[cur_out_ch] = p_diff_proto_info->num_protos_diff; - p_diff_proto_info->num_protos_diff++; - max_num_src_chan = max( max_num_src_chan, cur_num_src_chan ); - } - } - - /* set up the prototype info struct */ - if ( ( p_diff_proto_info->source_chan_idx = (int16_t **) malloc( p_diff_proto_info->num_protos_diff * sizeof( int16_t * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - if ( ( p_diff_proto_info->proto_fac = (float **) malloc( p_diff_proto_info->num_protos_diff * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - - for ( cur_diff_proto = 0; cur_diff_proto < p_diff_proto_info->num_protos_diff; cur_diff_proto++ ) - { - float *proto_fac_ptr; - - if ( ( p_diff_proto_info->source_chan_idx[cur_diff_proto] = (int16_t *) malloc( max_num_src_chan * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - if ( ( p_diff_proto_info->proto_fac[cur_diff_proto] = (float *) malloc( max_num_src_chan * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - proto_fac_ptr = proto_fac + cur_diff_proto; - for ( cur_transport_ch = 0; cur_transport_ch < nchan_transport; cur_transport_ch++ ) - { - if ( *proto_fac_ptr > EPSILON ) - { - p_diff_proto_info->source_chan_idx[cur_diff_proto][p_diff_proto_info->num_source_chan_diff[cur_diff_proto]] = cur_transport_ch; - p_diff_proto_info->proto_fac[cur_diff_proto][p_diff_proto_info->num_source_chan_diff[cur_diff_proto]] = *proto_fac_ptr; - p_diff_proto_info->num_source_chan_diff[cur_diff_proto]++; - } - proto_fac_ptr += nchan_out_cov; - } - } - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * ivas_param_mc_bs_decode_parameter_values() @@ -6302,7 +3637,6 @@ static ivas_error param_mc_get_diff_proto_info( * reads and decodes a sequence of Parametric MC parameters from the bitstream *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_bs_decode_parameter_values_fx( UWord16 bit_buffer[], /* i : bitstream buffer */ Word16 *bit_pos, /* i/o: current bitstream buffer position */ @@ -6436,123 +3770,3 @@ static void ivas_param_mc_bs_decode_parameter_values_fx( return; } -#else -static void ivas_param_mc_bs_decode_parameter_values( - uint16_t bit_buffer[], /* i : bitstream buffer */ - int16_t *bit_pos, /* i/o: current bitstream buffer position */ - const int16_t max_bits, /* i : maximum available bits in the buffer */ - int16_t *BER_detect, /* i/o: bit error detection flag */ - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, /* i : Parametric MC metadata information */ - HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParamCodingInfo, /* i : Parametric MC parameter quantization and coding tables */ - const int16_t map_size_wo_lfe, /* i : number of parameters per band (w/o LFEs) */ - const int16_t map_size, /* i : number of parameters per band (total) */ - const int16_t num_lfe_bands, /* i : number of parameter bands with coded LFE */ - const int16_t band_step, /* i : parameter band step */ - const int16_t num_param_bands, /* i : number of parameter bands to decode */ - float *value_buffer /* o : output buffer for decoded parameter values */ -) -{ - int16_t range_coding; - int16_t sz_seq; - int16_t delta_coding; - int16_t delta_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - int16_t idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - int16_t idx_prev; - int16_t idx_offset; - int16_t sz_alphabet; - int16_t i, j, k; - float dequant_seq[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - float dequant_ordered[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - int16_t n_lfe_idx; - - range_coding = bit_buffer[( *bit_pos )++]; - - /* Decoding the sequence */ - n_lfe_idx = map_size - map_size_wo_lfe; - sz_seq = num_param_bands * ( map_size_wo_lfe ) + num_lfe_bands * n_lfe_idx; - - set_s( idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); - set_zero( dequant_ordered, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); - set_zero( dequant_seq, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); - - if ( range_coding ) - { - delta_coding = bit_buffer[( *bit_pos )++]; - - if ( delta_coding ) - { - idx_prev = hParamCodingInfo->quantizer_size / 2 + hParamCodingInfo->quantizer_size % 2 - 1; - sz_alphabet = 2 * hParamCodingInfo->quantizer_size - 1; - idx_offset = hParamCodingInfo->quantizer_size - 1; - - /* read range coded delta ICC indices */ - *bit_pos += ivas_param_mc_range_decoder_LC( &bit_buffer[*bit_pos], delta_idx, BER_detect, sz_seq, sz_alphabet, - hParamCodingInfo->cum_freq_delta, hParamCodingInfo->sym_freq_delta, PARAM_MC_RANGE_CODER_TOT_SHIFT, max_bits - *bit_pos ); - - /* delta index to absolute index */ - for ( j = 0; j < sz_seq; j++ ) - { - idx[j] = idx_prev + delta_idx[j] - idx_offset; - idx_prev = idx[j]; - } - } - else - { - /* read range coded absolute ICC indices */ - sz_alphabet = hParamCodingInfo->quantizer_size; - *bit_pos += ivas_param_mc_range_decoder_LC( &bit_buffer[*bit_pos], idx, BER_detect, sz_seq, sz_alphabet, - hParamCodingInfo->cum_freq, hParamCodingInfo->sym_freq, PARAM_MC_RANGE_CODER_TOT_SHIFT, max_bits - *bit_pos ); - } - - /* dequantize */ - for ( j = 0; j < sz_seq; j++ ) - { - dequant_seq[j] = hParamCodingInfo->quantizer[idx[j]]; - } - } - else - { - set_zero( dequant_seq, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE ); - - /* read uniformly coded ICCs */ - *bit_pos += ivas_param_mc_uniform_decoder( dequant_seq, sz_seq, hParamCodingInfo->quantizer, hParamCodingInfo->uni_bits, &bit_buffer[*bit_pos] ); - } - - /* reorder from sequential to parameter-band-wise */ - k = 0; - for ( j = 0; j < map_size_wo_lfe; ++j ) - { - for ( i = 0; i < num_param_bands; ++i ) - { - dequant_ordered[j + i * map_size] = dequant_seq[k++]; - } - } - - for ( i = 0; i < num_lfe_bands; i++ ) - { - for ( j = 0; j < n_lfe_idx; j++ ) - { - dequant_ordered[map_size - n_lfe_idx + j + i * map_size] = dequant_seq[k++]; - } - } - - if ( !( *BER_detect ) ) - { - j = 0; - for ( k = 0; k < hMetadataPMC->nbands_coded; k += band_step ) - { - if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[k] ) - { - mvr2r( dequant_ordered + j * map_size, value_buffer + k * map_size, map_size ); - j++; - } - if ( hMetadataPMC->bAttackPresent && k + 1 < hMetadataPMC->nbands_coded ) - { - mvr2r( value_buffer + k * map_size, value_buffer + ( k + 1 ) * map_size, map_size ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_mc_param_dec_fx.c b/lib_dec/ivas_mc_param_dec_fx.c index 56635af0d..0d9ee2710 100644 --- a/lib_dec/ivas_mc_param_dec_fx.c +++ b/lib_dec/ivas_mc_param_dec_fx.c @@ -1,6 +1,5 @@ #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED Word16 param_mc_get_num_cldfb_syntheses_ivas_fx( Decoder_Struct *st_ivas /* i : Parametric MC handle */ ) @@ -33,4 +32,3 @@ Word16 param_mc_get_num_cldfb_syntheses_ivas_fx( return num_cldfb_syntheses; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index a492fcf65..86bcc71f9 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -35,10 +35,8 @@ #include #include "cnst.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif #include "ivas_prot.h" #include "ivas_prot_rend.h" #include "ivas_cnst.h" @@ -47,11 +45,8 @@ #include "math.h" #include "wmc_auto.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* * Local arrays *-----------------------------------------------------------------------*/ @@ -1107,909 +1102,3 @@ static void get_ec_data( return; } -#else - - -/*-----------------------------------------------------------------------* - * Local arrays - *-----------------------------------------------------------------------*/ - -/* boxes = { 0 1 2 3 [4 6] [5 7] [8 10] [9 11] }; */ -const int16_t MC_PARAMUPMIX_CHIDX1[MC_PARAMUPMIX_COMBINATIONS] = { 0, 1, 4, 5 }; -const int16_t MC_PARAMUPMIX_CHIDX2[MC_PARAMUPMIX_COMBINATIONS] = { 2, 3, 6, 7 }; - - -/*-----------------------------------------------------------------------* - * Local function prototypes - *-----------------------------------------------------------------------*/ - -static void ps_pred_process_sf( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, DECODER_TC_BUFFER_HANDLE hTcBuffer, float qmf_mod_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float *param_interpol, const int16_t ch, const int16_t slots_rendered ); - -static void ivas_mc_paramupmix_dec_sf( Decoder_Struct *st_ivas, float *output_f[MAX_OUTPUT_CHANNELS] ); - -static void ivas_param_upmix_dec_decorr_subframes( Decoder_Struct *st_ivas, const int16_t nSamplesForRendering ); - -static int16_t huff_read( Decoder_State *st, const int16_t ( *ht )[2] ); - -static void huffman_decode( Decoder_State *st, const PAR_TYPE parType, int32_t *vq ); - -static void dequant_alpha( int32_t *vq, float *v ); - -static void dequant_beta( int32_t *aq, int32_t *bq, float *beta ); - -static void get_ec_data( Decoder_State *st, const PAR_TYPE parType, int32_t *parQ, int32_t *alphaQEnv, float ab[IVAS_MAX_NUM_BANDS] ); - - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_dec_read_BS() - * - * Read the ParamUpmix MC metadata - *------------------------------------------------------------------------*/ - -void ivas_mc_paramupmix_dec_read_BS( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - Decoder_State *st0, /* i/o: decoder state structure */ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, /* i/o: decoder MC Param-Upmix handle */ - int16_t *nb_bits /* o : number of bits written */ -) -{ - int16_t i, k; - int32_t alpha_quant[IVAS_MAX_NUM_BANDS]; - int16_t nb_bits_read_orig; - int16_t next_bit_pos_orig, last_bit_pos; - uint16_t bstr_meta[MAX_BITS_METADATA], *bit_stream_orig; - - push_wmops( "mc_paramupmix_read_bs" ); - *nb_bits = 0; - - if ( st0->bfi ) - { - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMCParamUpmix->alphas[i][k] = hMCParamUpmix->alpha_prev[i][k]; - hMCParamUpmix->betas[i][k] = hMCParamUpmix->beta_prev[i][k]; - } - } - hMCParamUpmix->first_frame = 1; - } - else /* if (!st->bfi) */ - { - bit_stream_orig = st0->bit_stream; - next_bit_pos_orig = st0->next_bit_pos; - last_bit_pos = (int16_t) ( ( st_ivas->hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ); - nb_bits_read_orig = 0; - last_bit_pos -= nb_bits_read_orig; /* reverse the bitstream for easier reading of indices */ - for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) - { - bstr_meta[i] = st_ivas->bit_stream[last_bit_pos - i]; - } - st0->bit_stream = bstr_meta; - st0->next_bit_pos = 0; - st0->bits_frame = min( MAX_BITS_METADATA, last_bit_pos + 1 ); - st0->total_brate = st_ivas->hDecoderConfig->ivas_total_brate; /* to avoid BER detect */ - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - get_ec_data( st0, ALPHA, hMCParamUpmix->alpha_quant[i], alpha_quant, hMCParamUpmix->alphas[i] ); - - get_ec_data( st0, BETA, hMCParamUpmix->beta_quant[i], alpha_quant, hMCParamUpmix->betas[i] ); - } - *nb_bits += st0->next_bit_pos; - st0->bit_stream = bit_stream_orig; - st0->next_bit_pos = next_bit_pos_orig; - - if ( hMCParamUpmix->first_frame ) - { - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - mvr2r( hMCParamUpmix->alphas[i], hMCParamUpmix->alpha_prev[i], IVAS_MAX_NUM_BANDS ); - mvr2r( hMCParamUpmix->betas[i], hMCParamUpmix->beta_prev[i], IVAS_MAX_NUM_BANDS ); - } - hMCParamUpmix->first_frame = 0; - } - } - - pop_wmops(); - return; -} - - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_dec_digest_tc() - * - * - *------------------------------------------------------------------------*/ - -void ivas_mc_paramupmix_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint8_t nCldfbSlots, /* i : number of CLFBS slots in the transport channels*/ - const int16_t nSamplesForRendering /* i : number of samples provided */ -) -{ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; - hMCParamUpmix = st_ivas->hMCParamUpmix; - assert( hMCParamUpmix ); - push_wmops( "ivas_mc_paramupmix_dec_digest_tc" ); - - ivas_param_upmix_dec_decorr_subframes( st_ivas, nSamplesForRendering ); - - /* adapt subframes */ - ivas_jbm_dec_td_renderers_adapt_subframes( st_ivas ); - - ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbSlots, hMCParamUpmix->param_interpolator ); - - pop_wmops(); - return; -} - - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_dec_render() - * - * - *------------------------------------------------------------------------*/ - -void ivas_mc_paramupmix_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailable, /* o : number of CLDFB slots still to render */ - float *input_f[], /* i : core-coder transport channels */ - float *output_f[] /* i/o: synthesized core-coder transport channels */ -) -{ - int16_t slots_to_render, first_sf, last_sf, subframe_idx; - uint16_t slot_size, ch; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; - - hMCParamUpmix = st_ivas->hMCParamUpmix; - assert( hMCParamUpmix ); - - push_wmops( "ivas_mc_paramupmix_dec_render" ); - - for ( ch = 0; ch < MAX_OUTPUT_CHANNELS; ch++ ) - { - output_f_local[ch] = output_f[ch]; - } - - slot_size = st_ivas->hTcBuffer->n_samples_granularity; - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( st_ivas->hTcBuffer->num_slots - st_ivas->hTcBuffer->slots_rendered, nSamplesAsked / slot_size ); - *nSamplesRendered = slots_to_render * slot_size; - first_sf = st_ivas->hTcBuffer->subframes_rendered; - last_sf = first_sf; - - for ( ch = 0; ch < MAX_TRANSPORT_CHANNELS; ch++ ) - { - mvr2r( input_f[ch], output_f_local[ch], *nSamplesRendered ); - } - - while ( slots_to_render > 0 ) - { - slots_to_render -= st_ivas->hTcBuffer->subframe_nbslots[last_sf]; - last_sf++; - } - { - - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - mvr2r( hMCParamUpmix->alpha_prev[ch], hMCParamUpmix->alpha_sf[ch], IVAS_MAX_NUM_BANDS ); - mvr2r( hMCParamUpmix->beta_prev[ch], hMCParamUpmix->beta_sf[ch], IVAS_MAX_NUM_BANDS ); - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - int16_t n_samples_sf = slot_size * st_ivas->hTcBuffer->subframe_nbslots[subframe_idx]; - - ivas_mc_paramupmix_dec_sf( st_ivas, output_f_local ); - - for ( ch = 0; ch < min( MAX_OUTPUT_CHANNELS, ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ) ); ch++ ) - { - output_f_local[ch] += n_samples_sf; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - mvr2r( hMCParamUpmix->alphas[ch], hMCParamUpmix->alpha_prev[ch], IVAS_MAX_NUM_BANDS ); - mvr2r( hMCParamUpmix->betas[ch], hMCParamUpmix->beta_prev[ch], IVAS_MAX_NUM_BANDS ); - } - } - - *nSamplesAvailable = ( st_ivas->hTcBuffer->num_slots - st_ivas->hTcBuffer->slots_rendered ) * slot_size; - - pop_wmops(); - return; -} - - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_dec_open() - * - * Open Parametric MC decoder handle - *-------------------------------------------------------------------------*/ - -ivas_error ivas_mc_paramupmix_dec_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; - int32_t output_Fs; - int16_t nchan_transport; - uint16_t i; - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hMCParamUpmix = (MC_PARAMUPMIX_DEC_HANDLE) malloc( sizeof( MC_PARAMUPMIX_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param-Upmix MC\n" ) ); - } - output_Fs = st_ivas->hDecoderConfig->output_Fs; - hMCParamUpmix->first_frame = 1; - st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; - nchan_transport = st_ivas->nchan_transport; - - switch ( nchan_transport ) - { - case 8: - st_ivas->nCPE = 4; - st_ivas->nSCE = 0; - st_ivas->element_mode_init = IVAS_CPE_MDCT; - break; - } - - hMCParamUpmix->hoa_encoder = NULL; - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - hMCParamUpmix->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - ivas_td_decorr_dec_open( &( hMCParamUpmix->hTdDecorr[i] ), output_Fs, 2, 1 ); - } - - for ( i = 0; i < MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; i++ ) - { - if ( ( hMCParamUpmix->pcm_delay[i] = (float *) malloc( NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for delay buffer\n" ) ); - } - set_zero( hMCParamUpmix->pcm_delay[i], NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) ); - } - - /* Head or external rotation */ - if ( ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) ) - { - if ( ( hMCParamUpmix->hoa_encoder = (float *) malloc( st_ivas->hTransSetup.nchan_out_woLFE * MAX_INTERN_CHANNELS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC\n" ) ); - } - compute_hoa_encoder_mtx( st_ivas->hTransSetup.ls_azimuth, st_ivas->hTransSetup.ls_elevation, hMCParamUpmix->hoa_encoder, st_ivas->hTransSetup.nchan_out_woLFE, HEAD_ROTATION_HOA_ORDER ); - } - - /* allocate transport channels*/ - hMCParamUpmix->free_param_interpolator = 0; - hMCParamUpmix->param_interpolator = NULL; - - if ( ( hMCParamUpmix->param_interpolator = (float *) malloc( MAX_JBM_CLDFB_TIMESLOTS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for interpolator\n" ) ); - } - hMCParamUpmix->free_param_interpolator = 1; - - ivas_jbm_dec_get_adapted_linear_interpolator( DEFAULT_JBM_CLDFB_TIMESLOTS, DEFAULT_JBM_CLDFB_TIMESLOTS, hMCParamUpmix->param_interpolator ); - - if ( st_ivas->hTcBuffer == NULL ) - { - int16_t nchan_to_allocate; - int16_t nchan_tc; - TC_BUFFER_MODE buffer_mode; - - buffer_mode = TC_BUFFER_MODE_RENDERER; - nchan_tc = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - nchan_to_allocate = MC_PARAMUPMIX_MAX_INPUT_CHANS; - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - nchan_tc = st_ivas->hDecoderConfig->nchan_out; - nchan_to_allocate = nchan_tc; - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - nchan_to_allocate = MC_PARAMUPMIX_MAX_INPUT_CHANS; - } - - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, buffer_mode, nchan_tc, nchan_to_allocate, nchan_to_allocate, NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - st_ivas->hMCParamUpmix = hMCParamUpmix; - - return error; -} - - -/*------------------------------------------------------------------------- - * ivas_mc_paramupmix_dec_close() - * - * Close ParamUpmix MC memories - *------------------------------------------------------------------------*/ - -void ivas_mc_paramupmix_dec_close( - MC_PARAMUPMIX_DEC_HANDLE *hMCParamUpmix /* i/o: Parametric MC decoder handle */ -) -{ - int16_t i; - - if ( hMCParamUpmix == NULL || *hMCParamUpmix == NULL ) - { - return; - } - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - ivas_td_decorr_dec_close( &( ( *hMCParamUpmix )->hTdDecorr[i] ) ); - } - for ( i = 0; i < MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; i++ ) - { - if ( ( *hMCParamUpmix )->pcm_delay[i] != NULL ) - { - free( ( *hMCParamUpmix )->pcm_delay[i] ); - } - } - if ( ( *hMCParamUpmix )->param_interpolator != NULL ) - { - if ( ( *hMCParamUpmix )->free_param_interpolator == 1 ) - { - free( ( *hMCParamUpmix )->param_interpolator ); - } - } - if ( ( *hMCParamUpmix )->hoa_encoder != NULL ) - { - free( ( *hMCParamUpmix )->hoa_encoder ); - ( *hMCParamUpmix )->hoa_encoder = NULL; - } - free( *hMCParamUpmix ); - - *hMCParamUpmix = NULL; - - return; -} - - -/*------------------------------------------------------------------------- - * paramupmix_td_decorr_process_jbm() - * - * - *------------------------------------------------------------------------*/ - -static void paramupmix_td_decorr_process_jbm( - ivas_td_decorr_state_t *hTdDecorr[], /* i/o: SPAR Covar. decoder handle */ - float *pcm_in[], /* i : input audio channels */ - float **pp_out_pcm, /* o : output audio channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t j, k; - int16_t offset; - float in_duck_gain[L_FRAME48k], out_duck_gain[L_FRAME48k]; - - offset = (int16_t) ( output_frame * FRAMES_PER_SEC * IVAS_DECORR_PARM_LOOKAHEAD_TAU ); - - /* Look-ahead delay */ - for ( k = 0; k < MC_PARAMUPMIX_COMBINATIONS; k++ ) - { - mvr2r( pcm_in[k], pp_out_pcm[k], output_frame ); - delay_signal_float( pp_out_pcm[k], output_frame, hTdDecorr[k]->look_ahead_buf, offset ); - - /* In ducking gains */ - if ( hTdDecorr[k]->ducking_flag ) - { - ivas_td_decorr_get_ducking_gains( hTdDecorr[k]->pTrans_det, pcm_in[k], in_duck_gain, out_duck_gain, output_frame, 0 ); - - for ( j = 0; j < output_frame; j++ ) - { - pp_out_pcm[k][j] = pp_out_pcm[k][j] * in_duck_gain[j]; - } - } - - /* All pass delay section */ - ivas_td_decorr_APD_iir_filter( &hTdDecorr[k]->APD_filt_state[0], pp_out_pcm[k], hTdDecorr[k]->num_apd_sections, output_frame ); - - /* Out ducking gains */ - if ( hTdDecorr[k]->ducking_flag ) - { - for ( j = 0; j < output_frame; j++ ) - { - pp_out_pcm[k][j] = pp_out_pcm[k][j] * out_duck_gain[j]; - } - } - } - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_param_upmix_dec_decorr_subframes() - * - * - *------------------------------------------------------------------------*/ - -static void ivas_param_upmix_dec_decorr_subframes( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t nSamplesForRendering ) -{ - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; - float *pPcm_tmp[MC_PARAMUPMIX_COMBINATIONS]; - float *p_tc[MC_PARAMUPMIX_COMBINATIONS]; - int16_t nchan_internal, ch; - int16_t nSamplesLeftForTD, default_frame; - - hMCParamUpmix = st_ivas->hMCParamUpmix; - assert( hMCParamUpmix ); - - push_wmops( "ivas_param_upmix_dec_decorr_subframes" ); - - /* TD decorrelator */ - default_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - nSamplesLeftForTD = nSamplesForRendering; - nchan_internal = MC_PARAMUPMIX_COMBINATIONS; - - for ( ch = 0; ch < nchan_internal; ch++ ) - { - pPcm_tmp[ch] = st_ivas->hTcBuffer->tc[ch + 8]; - p_tc[ch] = st_ivas->hTcBuffer->tc[ch + 4]; - } - - while ( nSamplesLeftForTD ) - { - int16_t nSamplesToDecorr = min( nSamplesLeftForTD, default_frame ); - - paramupmix_td_decorr_process_jbm( hMCParamUpmix->hTdDecorr, p_tc, pPcm_tmp, nSamplesToDecorr ); - - for ( ch = 0; ch < nchan_internal; ch++ ) - { - p_tc[ch] += nSamplesToDecorr; - } - - nSamplesLeftForTD -= nSamplesToDecorr; - } - - pop_wmops(); - return; -} - - -/*****************************************************************************************/ -/* local functions */ -/*****************************************************************************************/ - -static void ps_pred_process_sf( - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, - DECODER_TC_BUFFER_HANDLE hTcBuffer, - float qmf_mod_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* in/out */ - float qmf_mod_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* in/out */ - float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float *param_interpol, - const int16_t ch, - const int16_t slots_rendered ) -{ - float vmre, vmim, vsre, vsim; - int16_t iqmf, ipar, ismp, iismp; - float alpha_smp, beta_smp; - float *alpha1, *alpha2; - float *beta1, *beta2; - float *alpha_prev = hMCParamUpmix->alpha_prev[ch]; - float *beta_prev = hMCParamUpmix->beta_prev[ch]; - float *alpha_sf = hMCParamUpmix->alpha_sf[ch]; - float *beta_sf = hMCParamUpmix->beta_sf[ch]; - float dalpha, dbeta, ifac; - float alpha_start[IVAS_MAX_NUM_BANDS], beta_start[IVAS_MAX_NUM_BANDS]; - - const int16_t qmf_to_par_band[] = { - 0, 1, 2, 3, 4, 5, 5, 6, 6, 7, - 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11 - }; - - mvr2r( alpha_sf, alpha_start, IVAS_MAX_NUM_BANDS ); - mvr2r( beta_sf, beta_start, IVAS_MAX_NUM_BANDS ); - for ( iqmf = 0; iqmf < CLDFB_NO_CHANNELS_MAX; iqmf++ ) - { - ipar = qmf_to_par_band[iqmf]; - alpha1 = alpha_prev; - beta1 = beta_prev; - - ismp = 0; - alpha2 = hMCParamUpmix->alphas[ch]; - beta2 = hMCParamUpmix->betas[ch]; - alpha_smp = alpha_start[ipar]; - beta_smp = beta_start[ipar]; - - for ( iismp = 0; iismp < hTcBuffer->subframe_nbslots[hTcBuffer->subframes_rendered]; iismp++ ) - { - if ( ( slots_rendered == 0 ) && ( iismp == 0 ) ) - { - ifac = param_interpol[iismp]; - } - else - { - ifac = param_interpol[iismp] - param_interpol[iismp - 1]; - } - dalpha = ( alpha2[ipar] - alpha1[ipar] ) * ifac; - dbeta = ( beta2[ipar] - beta1[ipar] ) * ifac; - - alpha_smp += dalpha; - beta_smp += dbeta; - - vmre = qmf_mod_re[ismp][iqmf]; - vmim = qmf_mod_im[ismp][iqmf]; - vsre = qmf_side_re[ismp][iqmf]; - vsim = qmf_side_im[ismp][iqmf]; - - qmf_side_re[ismp][iqmf] = alpha_smp * vmre + beta_smp * vsre; - qmf_side_im[ismp][iqmf] = alpha_smp * vmim + beta_smp * vsim; - - ismp++; - } - alpha_sf[ipar] = alpha_smp; - beta_sf[ipar] = beta_smp; - } - - return; -} - - -static void ivas_mc_paramupmix_dec_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output_f[MAX_OUTPUT_CHANNELS] /* i/o: synthesized core-coder transport channels */ -) -{ - int16_t i, ch, slot_idx, k; - float *pPcm_temp[MC_PARAMUPMIX_COMBINATIONS * 2]; /* decorrelated and undecorrelated*/ - /*CLDFB*/ - float Cldfb_RealBuffer[MC_PARAMUPMIX_MAX_TRANSPORT_CHANS][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MC_PARAMUPMIX_MAX_TRANSPORT_CHANS][JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - int16_t noparamupmix_delay, n_samples_rendered; - MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix; - int16_t subframeIdx, idx_in, maxBand; - float Cldfb_RealBuffer_subfr[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_subfr[MAX_INTERN_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - - hMCParamUpmix = st_ivas->hMCParamUpmix; - assert( hMCParamUpmix ); - push_wmops( "ivas_mc_paramupmix_dec_sf" ); - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - pPcm_temp[2 * i] = output_f[i + 4]; /* un-decorrelated */ - pPcm_temp[2 * i + 1] = output_f[i + 8]; /* decorrelated */ - } - - /* CLDFB Analysis*/ - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS * 2; ch++ ) - { - /* slot loop for gathering the input data */ - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ ) - { - cldfbAnalysis_ts_ivas( &( pPcm_temp[ch][hMCParamUpmix->num_freq_bands * slot_idx] ), Cldfb_RealBuffer[ch][slot_idx], Cldfb_ImagBuffer[ch][slot_idx], hMCParamUpmix->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); - } - } - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - ps_pred_process_sf( hMCParamUpmix, - st_ivas->hTcBuffer, - Cldfb_RealBuffer[2 * ch], /* in/out */ - Cldfb_ImagBuffer[2 * ch], - Cldfb_RealBuffer[2 * ch + 1], /* in/out decorr */ - Cldfb_ImagBuffer[2 * ch + 1], - &hMCParamUpmix->param_interpolator[st_ivas->hTcBuffer->slots_rendered], - ch, - st_ivas->hTcBuffer->slots_rendered ); - - /*-- m, s -> l, r ----------------------------*/ - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ ) - { - for ( k = 0; k < CLDFB_NO_CHANNELS_MAX; k++ ) - { - float qlre = Cldfb_RealBuffer[2 * ch][slot_idx][k]; - float qlim = Cldfb_ImagBuffer[2 * ch][slot_idx][k]; - float qrre = Cldfb_RealBuffer[2 * ch + 1][slot_idx][k]; - float qrim = Cldfb_ImagBuffer[2 * ch + 1][slot_idx][k]; - - Cldfb_RealBuffer[2 * ch][slot_idx][k] = qlre + qrre; - Cldfb_ImagBuffer[2 * ch][slot_idx][k] = qlim + qrim; - Cldfb_RealBuffer[2 * ch + 1][slot_idx][k] = qlre - qrre; - Cldfb_ImagBuffer[2 * ch + 1][slot_idx][k] = qlim - qrim; - } - } - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - maxBand = (int16_t) ( ( CLDFB_NO_CHANNELS_MAX * st_ivas->hDecoderConfig->output_Fs ) / 48000 ); - subframeIdx = st_ivas->hTcBuffer->subframes_rendered; - /* fastconv binaural rendering and CLDFB synthesis */ - /* cldfb analysis of non-coupled, non-LFE channels */ - idx_in = 0; - for ( ch = 0; ch < MC_PARAMUPMIX_MAX_INPUT_CHANS - 2 * MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - if ( st_ivas->hIntSetup.index_lfe[0] != ch ) - { - pPcm_temp[ch] = output_f[ch]; - /* slot loop for gathering the input data */ - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ ) - { - cldfbAnalysis_ts_ivas( &( pPcm_temp[ch][hMCParamUpmix->num_freq_bands * slot_idx] ), - Cldfb_RealBuffer_subfr[idx_in][slot_idx], - Cldfb_ImagBuffer_subfr[idx_in][slot_idx], - maxBand, st_ivas->cldfbAnaDec[2 * MC_PARAMUPMIX_COMBINATIONS + idx_in] ); - } - idx_in++; - } - } - - /* copy and reorder cldfb analysis of coupled channels */ - for ( ch = 0; ch < MAX_PARAM_SPATIAL_SUBFRAMES; ch++ ) - { - for ( slot_idx = 0; slot_idx < MAX_PARAM_SPATIAL_SUBFRAMES; slot_idx++ ) - { - mvr2r( Cldfb_RealBuffer[MC_PARAMUPMIX_CHIDX1[ch]][slot_idx], Cldfb_RealBuffer_subfr[idx_in][slot_idx], CLDFB_NO_CHANNELS_MAX ); - mvr2r( Cldfb_ImagBuffer[MC_PARAMUPMIX_CHIDX1[ch]][slot_idx], Cldfb_ImagBuffer_subfr[idx_in][slot_idx], CLDFB_NO_CHANNELS_MAX ); - mvr2r( Cldfb_RealBuffer[MC_PARAMUPMIX_CHIDX2[ch]][slot_idx], Cldfb_RealBuffer_subfr[idx_in + 1][slot_idx], CLDFB_NO_CHANNELS_MAX ); - mvr2r( Cldfb_ImagBuffer[MC_PARAMUPMIX_CHIDX2[ch]][slot_idx], Cldfb_ImagBuffer_subfr[idx_in + 1][slot_idx], CLDFB_NO_CHANNELS_MAX ); - } - idx_in += 2; - } - - if ( st_ivas->hCombinedOrientationData && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ ) - { - ivas_param_mc_mc2sba_cldfb( st_ivas->hTransSetup, hMCParamUpmix->hoa_encoder, slot_idx, Cldfb_RealBuffer_subfr, Cldfb_ImagBuffer_subfr, maxBand, GAIN_LFE ); - } - } - - - /* Implement binaural rendering */ - ivas_binRenderer( st_ivas->hBinRenderer, - st_ivas->hCombinedOrientationData, - st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], - Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, - Cldfb_RealBuffer_subfr, - Cldfb_ImagBuffer_subfr ); - - - /* Implement CLDFB synthesis */ - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[subframeIdx]; slot_idx++ ) - { - RealBuffer[slot_idx] = Cldfb_RealBuffer_Binaural[ch][slot_idx]; - ImagBuffer[slot_idx] = Cldfb_ImagBuffer_Binaural[ch][slot_idx]; - } - - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][0] ), maxBand * st_ivas->hTcBuffer->subframe_nbslots[subframeIdx], st_ivas->cldfbSynDec[ch] ); - } - } - else - { - /* boxes = { 0 1 2 3 [4 6] [5 7] [8 10] [9 11] }; */ - pPcm_temp[0] = output_f[4]; - pPcm_temp[1] = output_f[6]; - pPcm_temp[2] = output_f[5]; - pPcm_temp[3] = output_f[7]; - pPcm_temp[4] = output_f[8]; - pPcm_temp[5] = output_f[10]; - pPcm_temp[6] = output_f[9]; - pPcm_temp[7] = output_f[11]; - - /* CLDFB synthesis */ - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS * 2; ch++ ) - { - for ( slot_idx = 0; slot_idx < st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; slot_idx++ ) - { - float *ptr_im[1], *ptr_re[1]; - ptr_re[0] = Cldfb_RealBuffer[ch][slot_idx]; - ptr_im[0] = Cldfb_ImagBuffer[ch][slot_idx]; - - cldfbSynthesis_ivas( ptr_re, ptr_im, &( pPcm_temp[ch][hMCParamUpmix->num_freq_bands * slot_idx] ), - hMCParamUpmix->num_freq_bands, st_ivas->cldfbSynDec[ch] ); - } - } - /* adjust delay of other channels */ - noparamupmix_delay = NS2SA( st_ivas->hDecoderConfig->output_Fs, IVAS_FB_DEC_DELAY_NS ); - n_samples_rendered = st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered] * hMCParamUpmix->num_freq_bands; - if ( n_samples_rendered > noparamupmix_delay ) - { - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - float tmp_buf[L_SUBFRAME5MS_48k]; - mvr2r( &output_f[ch][n_samples_rendered - noparamupmix_delay], tmp_buf, noparamupmix_delay ); - mvr2r( output_f[ch], &output_f[ch][noparamupmix_delay], n_samples_rendered - noparamupmix_delay ); - mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], noparamupmix_delay ); - mvr2r( tmp_buf, hMCParamUpmix->pcm_delay[ch], noparamupmix_delay ); - } - } - else - { - for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) - { - float tmp_buf[L_SUBFRAME5MS_48k]; - mvr2r( &output_f[ch][0], tmp_buf, n_samples_rendered ); - mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], n_samples_rendered ); - mvr2r( &hMCParamUpmix->pcm_delay[ch][n_samples_rendered], &hMCParamUpmix->pcm_delay[ch][0], noparamupmix_delay - n_samples_rendered ); - mvr2r( tmp_buf, &hMCParamUpmix->pcm_delay[ch][noparamupmix_delay - n_samples_rendered], n_samples_rendered ); - } - } - } - - st_ivas->hTcBuffer->slots_rendered += st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->subframes_rendered]; - st_ivas->hTcBuffer->subframes_rendered++; - - pop_wmops(); - return; -} - - -static int16_t huff_read( - Decoder_State *st, - const int16_t ( *ht )[2] ) -{ - int16_t node = 0; - uint16_t next_bit = 0; - - do - { - next_bit = st->bit_stream[st->next_bit_pos]; - st->next_bit_pos++; - node = ht[node][next_bit]; - } while ( node > 0 ); - - return -( node + 1 ); -} - - -static void huffman_decode( - Decoder_State *st, - const PAR_TYPE parType, - int32_t *vq ) -{ - const int16_t( *huff_node_table )[2]; - int16_t iv, nquant, offset; - - nquant = 0; - switch ( parType ) - { - case ALPHA: - nquant = ivas_mc_paramupmix_alpha_quant_table.nquant; - break; - case BETA: - nquant = ivas_mc_paramupmix_beta_quant_table[0].nquant; - break; - default: - assert( 0 ); - } - - offset = nquant - 1; /* range of df [-(nquant - 1), nquant - 1] */ - - st->next_bit_pos++; - switch ( parType ) - { - case ALPHA: - huff_node_table = ivas_mc_paramupmix_huff_nodes_df0.alpha; - break; - case BETA: - huff_node_table = ivas_mc_paramupmix_huff_nodes_df0.beta; - break; - default: - huff_node_table = NULL; - assert( 0 ); - } - vq[0] = huff_read( st, huff_node_table ); - - switch ( parType ) - { - case ALPHA: - huff_node_table = ivas_mc_paramupmix_huff_nodes_df.alpha; - break; - case BETA: - huff_node_table = ivas_mc_paramupmix_huff_nodes_df.beta; - break; - default: - assert( 0 ); - } - - for ( iv = 1; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - vq[iv] = huff_read( st, huff_node_table ) + vq[iv - 1] - offset; - } - - return; -} - - -static void dequant_alpha( - int32_t *vq, - float *v ) -{ - int16_t iv; - const ACPL_QUANT_TABLE *quant_table = &ivas_mc_paramupmix_alpha_quant_table; - - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - v[iv] = quant_table->data[vq[iv]]; - } - - return; -} - - -static void dequant_beta( - int32_t *aq, - int32_t *bq, - float *beta ) -{ - int16_t iv; - const ACPL_QUANT_TABLE *quant_table; - - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - quant_table = &ivas_mc_paramupmix_beta_quant_table[ivas_param_upmx_mx_qmap[aq[iv]]]; - beta[iv] = quant_table->data[bq[iv]]; - } - - return; -} - - -static void get_ec_data( - Decoder_State *st, - const PAR_TYPE parType, - int32_t *parQ, - int32_t *alphaQEnv, - float ab[IVAS_MAX_NUM_BANDS] ) -{ - huffman_decode( st, parType, parQ ); - - if ( parType == ALPHA ) - { - dequant_alpha( parQ, ab ); - mvl2l( parQ, alphaQEnv, (int16_t) IVAS_MAX_NUM_BANDS ); - } - else - { - dequant_beta( alphaQEnv, parQ, ab ); - } - - return; -} - - -#endif diff --git a/lib_dec/ivas_mcmasa_dec.c b/lib_dec/ivas_mcmasa_dec.c index d89f5e9d0..3f5f1d098 100644 --- a/lib_dec/ivas_mcmasa_dec.c +++ b/lib_dec/ivas_mcmasa_dec.c @@ -45,7 +45,6 @@ * * Reconfigure McMASA decoder *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_mcmasa_dec_reconfig( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -99,63 +98,3 @@ ivas_error ivas_mcmasa_dec_reconfig( return error; } -#else -ivas_error ivas_mcmasa_dec_reconfig( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - ivas_error error; - int32_t ivas_total_brate; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - /* close the old MASA instance */ -#ifdef IVAS_FLOAT_FIXED - ivas_masa_dec_close_fx( &( st_ivas->hMasa ) ); -#else - ivas_masa_dec_close( &( st_ivas->hMasa ) ); -#endif - - /* get new McMASA settings */ - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hOutSetup.separateChannelEnabled ), &( st_ivas->hOutSetup.separateChannelIndex ), ivas_total_brate ); - - /* transport channel settings may affect renderer */ - ivas_renderer_select( st_ivas ); - - /* renderer change may affect internal config */ - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - ivas_mcmasa_set_separate_channel_mode( &( st_ivas->hIntSetup.separateChannelEnabled ), &( st_ivas->hIntSetup.separateChannelIndex ), ivas_total_brate ); - -#ifdef IVAS_FLOAT_FIXED - if ( ( error = ivas_masa_dec_open_fx( st_ivas ) ) != IVAS_ERR_OK ) -#else - if ( ( error = ivas_masa_dec_open( st_ivas ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - if ( st_ivas->renderer_type != RENDERER_DISABLE && st_ivas->renderer_type != RENDERER_MCMASA_MONO_STEREO ) - { - if ( st_ivas->hDirAC == NULL ) - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - return error; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_mct_core_dec.c b/lib_dec/ivas_mct_core_dec.c index 8816f03ff..7c4c3743c 100644 --- a/lib_dec/ivas_mct_core_dec.c +++ b/lib_dec/ivas_mct_core_dec.c @@ -42,10 +42,8 @@ #include "ivas_prot.h" #include "ivas_stat_dec.h" #include "ivas_stat_com.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------* * ivas_mct_side_bits() * @@ -53,106 +51,6 @@ * Read mct related side bits and distribute bits per channel * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mct_side_bits( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ - const int16_t nCPE, /* i : number of CPEs */ - Decoder_State *st0, /* i : decoder handle for Bstr */ - const int16_t bfi, /* i : BFI flag */ - uint16_t *bitstream, /* o : bitstream indices */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - int16_t ch, cpe_id, nChannels, i, k, nSubframes; - int16_t nf_side_bits, availableBits, next_bit_pos, nf_bits; - int16_t chBitRatios[MCT_MAX_CHANNELS]; - Decoder_State *st, *sts[MCT_MAX_CHANNELS]; - - nf_side_bits = 0; - nChannels = hMCT->nchan_out_woLFE; - - /*initializations */ - for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; - i++; - } - } - - /*first read IFG bits */ - if ( !bfi && st0->igf ) - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - mdct_read_IGF_bits( st, st0 ); - } - } - - /*read MCT data and calculate frame bits per channel */ - for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) - { - initMdctStereoDecData( hMCT->hBlockData[ch]->hStereoMdct, st0->igf, st0->hIGFDec->igfData.igfInfo.grid, hCPE[0]->element_brate, st0->bwidth ); - } - - if ( !bfi ) - { - availableBits = 0; - - ivas_mct_dec_mct( hMCT, sts, nChannels ); - - /*read channel bitrate ratios from bitstream*/ - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - chBitRatios[ch] = 0; - st->bits_frame_channel = 0; - continue; - } - chBitRatios[ch] = get_next_indice( sts[0], NBBITS_MCT_RATIO ); - - nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; - - for ( k = 0; k < nSubframes; k++ ) - { - nf_side_bits += ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - } - } - - availableBits = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - sts[0]->next_bit_pos - nf_side_bits ); - availableBits -= nb_bits_metadata; - - splitAvailableBitsMCT( (void **) sts, availableBits, chBitRatios, DEC, nChannels ); - - next_bit_pos = sts[0]->next_bit_pos; - for ( ch = 1; ch < nChannels; ch++ ) - { - nf_bits = ( sts[ch - 1]->core == TCX_20_CORE ? 1 : NB_DIV ) * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - - if ( chBitRatios[ch - 1] == 0 ) /* indicates LFE with no content */ - { - nf_bits = 0; - } - next_bit_pos += sts[ch - 1]->bits_frame_channel + nf_bits; - sts[ch]->bit_stream = bitstream + next_bit_pos; - } - } - - return; -} -#else void ivas_mct_side_bits_fx( MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ @@ -252,7 +150,7 @@ void ivas_mct_side_bits_fx( availableBits = ( sub( sub( tmp, sts[0]->next_bit_pos ), nf_side_bits ) ); availableBits = sub( availableBits, nb_bits_metadata ); - splitAvailableBitsMCT( (void **) sts, availableBits, chBitRatios, DEC, nChannels ); + splitAvailableBitsMCT_fx( (void **) sts, availableBits, chBitRatios, DEC, nChannels ); next_bit_pos = sts[0]->next_bit_pos; move16(); @@ -279,7 +177,6 @@ void ivas_mct_side_bits_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -287,7 +184,6 @@ void ivas_mct_side_bits_fx( * * IVAS MCT core decoder *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mct_core_dec( MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ @@ -443,115 +339,3 @@ void ivas_mct_core_dec( return; } -#else -void ivas_mct_core_dec( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE decoder structure */ - const int16_t nCPE, /* i : number of CPEs */ - float *signal_out[] /* o : synthesis @internal_FS */ -) -{ - int16_t i, k, ch, cpe_id, nChannels; - Decoder_State *st, *sts[MCT_MAX_CHANNELS]; - float *x[MCT_MAX_CHANNELS][NB_DIV]; - int16_t bfi; - /* Framing */ - int16_t L_frame, L_frameTCX, nSubframes; - /* TCX */ - int16_t tcx_offset; - int16_t tcx_offsetFB; - int16_t left_rect; - int16_t L_spec; -#ifdef DEBUG_MCT - float nrg[MCT_MAX_CHANNELS]; -#endif - - push_wmops( "mct_decoding" ); - - /*--------------------------------------------------------------------------------* - * Initializations - *--------------------------------------------------------------------------------*/ - - nChannels = hMCT->nchan_out_woLFE; - - /*initializations */ - for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; - i++; - } - } - - for ( ch = 0, i = 0; ch < nChannels; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - i++; - } - - bfi = sts[0]->bfi; - - for ( ch = 0; ch < nChannels; ch++ ) - { - /* Initialization or re-configuration of Stereo TCX */ - sts[ch]->enablePlcWaveadjust = 0; - x[ch][0] = signal_out[ch]; - x[ch][1] = signal_out[ch] + ( L_FRAME48k / 2 ); - } - - /*--------------------------------------------------------------------------------* - * IGF decoding - *--------------------------------------------------------------------------------*/ - - if ( sts[0]->igf ) - { - if ( !hMCT->currBlockDataCnt ) - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) /*indicates LFE */ - { - continue; - } - - if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ - { - continue; - } - nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; - - for ( k = 0; k < nSubframes; k++ ) - { - L_spec = st->hTcxCfg->tcx_coded_lines / nSubframes; - - init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset, &tcx_offsetFB, &L_frame, &L_frameTCX, &left_rect, &L_spec ); - /* mono or dual mono IGF decoding */ - decoder_tcx_IGF_mono( st, x[ch][k], L_frame, left_rect, bfi, k ); - } - } - } - else - { - mctStereoIGF_dec( hMCT, sts, x, bfi ); - } - } - - if ( !bfi ) - { - /*--------------------------------------------------------------------------------* - * MCT processing - *--------------------------------------------------------------------------------*/ - apply_MCT_dec( hMCT, sts, x ); - } - - pop_wmops(); - - return; -} -#endif diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 98c883bb0..f3afead8f 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -43,20 +43,14 @@ #include "ivas_prot_rend.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_mc_dec_reconfig_fx( Decoder_Struct *st_ivas, UWord16 *nSamplesRendered, Word16 *data ); -#else -static ivas_error ivas_mc_dec_reconfig( Decoder_Struct *st_ivas, uint16_t *nSamplesRendered, int16_t *data ); -#endif /*--------------------------------------------------------------------------* @@ -65,231 +59,6 @@ static ivas_error ivas_mc_dec_reconfig( Decoder_Struct *st_ivas, uint16_t *nSamp * Multi-channel Coding Tool (MCT) decoding routine *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_mct_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output[], /* o : output synthesis signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - int16_t n, nCPE, cpe_id; - MCT_DEC_HANDLE hMCT; - CPE_DEC_HANDLE hCPE; - float *x[CPE_CHANNELS][NB_DIV]; - int16_t param[MCT_MAX_BLOCKS][CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV]; - int16_t param_lpc[MCT_MAX_BLOCKS][CPE_CHANNELS][NPRM_LPC_NEW]; - int16_t p_param[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; - int16_t nTnsBitsTCX10[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; - float Aq[MCT_MAX_BLOCKS][CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )]; - int16_t fUseTns[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; - STnsData tnsData[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; - Decoder_State **sts; - float synth[CPE_CHANNELS][L_FRAME_PLUS]; - float output_lfe_ch[L_FRAME48k]; - int32_t ivas_total_brate; - ivas_error error; - - push_wmops( "ivas_mct_dec" ); - - error = IVAS_ERR_OK; - nCPE = st_ivas->nCPE; - hMCT = st_ivas->hMCT; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - if ( st_ivas->ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) - { - /* save LFE channel */ - mvr2r( output[LFE_CHANNEL], output_lfe_ch, output_frame ); - } - - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT && !st_ivas->bfi ) - { - /* get the number of channels from the signalled MC LS setup */ - n = ivas_mc_ls_setup_get_num_channels( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ) ); - - if ( n != st_ivas->nchan_transport ) - { - /* IVAS_fmToDo: more work needed for switching the number of transport channels */ - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: wrong number of transport channels signalled in MC format!" ); - } - } - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - /*initialize param_lpc buffer*/ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - set_s( param_lpc[cpe_id][n], 0, NPRM_LPC_NEW ); - } - - if ( ( error = ivas_cpe_dec( st_ivas, cpe_id, output, output_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( cpe_id == 0 ) - { - st_ivas->hCPE[0]->hCoreCoder[0]->total_brate = ivas_total_brate; /* set high enough to read the whole side-info; total_brate is rewritten later in ivas_mdct_core_invQ() */ - } - - if ( !st_ivas->bfi ) - { - ivas_mdct_dec_side_bits_frame_channel( st_ivas->hCPE[cpe_id], param_lpc[cpe_id], p_param[cpe_id], st_ivas->hCPE[0]->hCoreCoder[0], nTnsBitsTCX10[cpe_id], param[cpe_id], 1, - ( ( cpe_id + 1 ) * CPE_CHANNELS > hMCT->nchan_out_woLFE ) ); - - st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect; - st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect; - } - } - - /* MCT side bits decoder */ - ivas_mct_side_bits( hMCT, st_ivas->hCPE, nCPE, st_ivas->hCPE[0]->hCoreCoder[0], st_ivas->bfi, st_ivas->hCPE[0]->hCoreCoder[0]->bit_stream, ivas_total_brate, nb_bits_metadata ); - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect |= st_ivas->BER_detect; - st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect |= st_ivas->BER_detect; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - x[n][0] = output[n + cpe_id * CPE_CHANNELS]; - x[n][1] = output[n + cpe_id * CPE_CHANNELS] + ( L_FRAME48k / 2 ); - set_zero( x[n][0], L_FRAME48k / 2 ); - set_zero( x[n][1], L_FRAME48k / 2 ); - } - - ivas_mdct_core_invQ( st_ivas->hCPE[cpe_id], nTnsBitsTCX10[cpe_id], p_param[cpe_id], param_lpc[cpe_id], param[cpe_id], - fUseTns[cpe_id], tnsData[cpe_id], x, x, Aq[cpe_id], NULL, 1 ); - - st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[0]->BER_detect; - st_ivas->BER_detect |= st_ivas->hCPE[cpe_id]->hCoreCoder[1]->BER_detect; - } - - /* MCT core decoder */ - ivas_mct_core_dec( hMCT, st_ivas->hCPE, nCPE, output ); - - /* for sba to stereo output disable any further processing for TCs > 2 as it is not needed*/ - if ( st_ivas->sba_dirac_stereo_flag && st_ivas->ivas_format != SBA_ISM_FORMAT ) - { - for ( cpe_id = 1; cpe_id < nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - } - } - - /* MCT reconstruction and CoreCoder updates */ - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - hCPE = st_ivas->hCPE[cpe_id]; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - x[n][0] = output[n + cpe_id * CPE_CHANNELS]; - x[n][1] = output[n + cpe_id * CPE_CHANNELS] + ( L_FRAME48k / 2 ); - } - - ivas_mdct_core_tns_ns( hCPE, fUseTns[cpe_id], tnsData[cpe_id], x, Aq[cpe_id], 1 ); - } - - if ( st_ivas->renderer_type == RENDERER_MC ) - { - /* Equalization in MDCT Domain */ - ivas_ls_setup_conversion_process_mdct( st_ivas, output ); - } - - else if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - float *x_all[MAX_CICP_CHANNELS][NB_DIV]; - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - x_all[n + cpe_id * CPE_CHANNELS][0] = output[n + cpe_id * CPE_CHANNELS]; - x_all[n + cpe_id * CPE_CHANNELS][1] = output[n + cpe_id * CPE_CHANNELS] + ( L_FRAME48k / 2 ); - } - } - - ivas_ls_setup_conversion_process_mdct_param_mc( st_ivas, x_all ); - } - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - hCPE = st_ivas->hCPE[cpe_id]; - sts = hCPE->hCoreCoder; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - x[n][0] = output[n + cpe_id * CPE_CHANNELS]; - x[n][1] = output[n + cpe_id * CPE_CHANNELS] + ( L_FRAME48k / 2 ); - } - - ivas_mdct_core_reconstruct( hCPE, x, synth, fUseTns[cpe_id], 1 ); - - /*----------------------------------------------------------------* - * CoreCoder Post-processing and updates - *----------------------------------------------------------------*/ - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( st_ivas->sba_dirac_stereo_flag && ( st_ivas->ivas_format != SBA_ISM_FORMAT || cpe_id >= nCPE - 2 ) ) - { - ivas_post_proc( NULL, hCPE, n, synth[n], NULL, output_frame, 1 ); - } - - /* Postprocessing for ACELP/MDCT core switching and synchronization */ - if ( ( error = core_switching_post_dec( sts[n], synth[n], output[cpe_id * CPE_CHANNELS + n], hCPE->output_mem[1], st_ivas->ivas_format, 0, output_frame, 0 /*core_switching_flag*/, ( st_ivas->ivas_format != SBA_ISM_FORMAT || cpe_id >= nCPE - 2 ) ? st_ivas->sba_dirac_stereo_flag : 0, -1, hCPE->last_element_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* final output of synthesis signal */ - mvr2r( synth[n], output[cpe_id * CPE_CHANNELS + n], output_frame ); - - /* Save synthesis for HQ FEC */ - save_synthesis_hq_fec( sts[n], output[cpe_id * CPE_CHANNELS + n], output_frame, hCPE ); - - /* CoreCoder common updates */ - updt_dec_common( sts[n], NORMAL_HQ_CORE, -1, output[cpe_id * CPE_CHANNELS + n] ); - - } /* n_channels loop */ - - - /* synthesis synchronization between stereo modes */ - if ( !st_ivas->sba_dirac_stereo_flag || ( st_ivas->ivas_format == SBA_ISM_FORMAT && cpe_id < nCPE - 2 ) ) - { - synchro_synthesis( ivas_total_brate, hCPE, output + cpe_id * CPE_CHANNELS, output_frame, 0 ); - } - } - - /* move channels after LFE to correct output for multi-channel MCT */ - if ( st_ivas->ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) - { - float tmp[L_FRAME48k]; - - /*save center channel output*/ - mvr2r( output[hMCT->nchan_out_woLFE - 1], tmp, output_frame ); - - for ( n = hMCT->nchan_out_woLFE - 1; n >= LFE_CHANNEL; n-- ) - { - mvr2r( output[n - 1], output[n + 1], output_frame ); - } - mvr2r( tmp, output[LFE_CHANNEL - 1], output_frame ); - - /* save LFE channel */ - mvr2r( output_lfe_ch, output[LFE_CHANNEL], output_frame ); - } - - - pop_wmops(); - return error; -} -#else ivas_error ivas_mct_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output_fx[], /* o : output synthesis signal Q11*/ @@ -708,7 +477,6 @@ ivas_error ivas_mct_dec_fx( pop_wmops(); return error; } -#endif /*------------------------------------------------------------------------- @@ -716,7 +484,6 @@ ivas_error ivas_mct_dec_fx( * * Create, allocate and initialize IVAS decoder MCT handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error create_mct_dec_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -849,125 +616,6 @@ ivas_error create_mct_dec_fx( return IVAS_ERR_OK; } -#else // IVAS_FLOAT_FIXED - -ivas_error create_mct_dec( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - MCT_DEC_HANDLE hMCT; - int16_t n; - int32_t cp_bitrate; - int16_t max_blocks; - int16_t cpe_id; - - /*--------------------------------------------------------- --------* - * Allocate MCT handle - *-----------------------------------------------------------------*/ - - if ( ( hMCT = (MCT_DEC_HANDLE) malloc( sizeof( MCT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Allocate MCT BlockData handles - *-----------------------------------------------------------------*/ - - /* Determine active channels */ - if ( ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - hMCT->nchan_out_woLFE += st_ivas->nchan_ism; - } - } - else if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport - st_ivas->hTransSetup.num_lfe; - } - else if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport - st_ivas->hTransSetup.num_lfe; - } - else - { - assert( !"IVAS format currently not supported for MCT" ); - } - - cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport * CPE_CHANNELS; - } - - /* indicate LFE for appropriate core-coder channel */ - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - - /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ - if ( hMCT->nchan_out_woLFE % 2 ) - { - st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - - /*Initialize MCT block data */ - max_blocks = hMCT->nchan_out_woLFE / 2; - - for ( n = 0; n < max_blocks; n++ ) - { - if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_DEC_BLOCK_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); - } - - /*Initialize all parameters to zero*/ - hMCT->hBlockData[n]->ch1 = 0; - hMCT->hBlockData[n]->ch2 = 0; - - /*-----------------------------------------------------------------* - * MDCT stereo initialization - *-----------------------------------------------------------------*/ - - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - - initMdctStereoDecData( hMCT->hBlockData[n]->hStereoMdct, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFDec->igfData.igfInfo.grid, cp_bitrate, SWB ); - hMCT->hBlockData[n]->hStereoMdct->use_itd = 0; - hMCT->hBlockData[n]->hStereoMdct->reverse_dmx = 0; - hMCT->hBlockData[n]->hStereoMdct->smooth_ratio = 1.f; - } - for ( ; n < MCT_MAX_BLOCKS; n++ ) - { - hMCT->hBlockData[n] = NULL; - } - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - hMCT->currBlockDataCnt = 0; - - /*Initialize bits required to signal channel-pair index*/ - hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floorf( ( logf( (float) hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) * INV_LOG_2 ) ) + 1 ) ); - - set_s( hMCT->chBitRatios, 0, MCT_MAX_CHANNELS ); - set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); - - st_ivas->hMCT = hMCT; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * mct_dec_reconfigure() @@ -975,7 +623,6 @@ ivas_error create_mct_dec( * Reconfigure IVAS decoder MCT handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error mct_dec_reconfigure_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const UWord16 b_nchan_change /* i : flag indicating different channel count */ @@ -1161,173 +808,22 @@ ivas_error mct_dec_reconfigure_fx( return IVAS_ERR_OK; } -#else -ivas_error mct_dec_reconfigure( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const uint16_t b_nchan_change /* i : flag indicating different channel count */ -) -{ - MCT_DEC_HANDLE hMCT; - Decoder_State *st; - int16_t n, cpe_id, max_blocks; - int32_t cp_bitrate; - hMCT = st_ivas->hMCT; - /*-----------------------------------------------------------------* - * Allocate and initialize MCT BlockData handles - *-----------------------------------------------------------------*/ +/*------------------------------------------------------------------------- + * create_mct_dec_close() + * + * Close IVAS decoder MCT handle + *-------------------------------------------------------------------------*/ - if ( b_nchan_change ) - { - /* Determine active channels */ - if ( ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - hMCT->nchan_out_woLFE += st_ivas->nchan_ism; - } - } - else if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport - st_ivas->hTransSetup.num_lfe; - } - else if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport - st_ivas->hTransSetup.num_lfe; - } - else - { - assert( !"IVAS format currently not supported for MCT" ); - } - } - - /* indicate LFE for appropriate core-coder channel */ - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - - /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ - if ( hMCT->nchan_out_woLFE % 2 ) - { - st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - - cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - cp_bitrate = st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport * CPE_CHANNELS; - } - - /* set correct nominal bitrates and igf config already here, otherwise we - * run into a number of problems */ - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = cp_bitrate; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st = st_ivas->hCPE[cpe_id]->hCoreCoder[n]; - - st->total_brate = st_ivas->hCPE[cpe_id]->element_brate; - - if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - st->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); - st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_flag ); - if ( st->igf ) - { - IGFDecSetMode_flt( st->hIGFDec, st_ivas->hCPE[cpe_id]->element_brate, st->bwidth, st->element_mode, -1, -1, st->rf_flag ); - } - } - } - } - - /*Initialize MCT block data */ - max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; - - for ( n = 0; n < max_blocks; n++ ) - { - if ( b_nchan_change ) - { - if ( hMCT->hBlockData[n] == NULL ) - { - if ( ( hMCT->hBlockData[n] = (MCT_DEC_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); - } - - /*Initialize all parameters to zero*/ - hMCT->hBlockData[n]->ch1 = 0; - hMCT->hBlockData[n]->ch2 = 0; - - /* MDCT stereo initialization */ - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - } - } - - initMdctStereoDecData( hMCT->hBlockData[n]->hStereoMdct, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->hIGFDec->igfData.igfInfo.grid, cp_bitrate, st_ivas->hCPE[0]->hCoreCoder[0]->bwidth ); - hMCT->hBlockData[n]->hStereoMdct->use_itd = 0; - } - - for ( ; n < MCT_MAX_BLOCKS; n++ ) - { - /* deallocate no longer needed blocks */ - if ( hMCT->hBlockData[n] != NULL ) - { - if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) - { - free( hMCT->hBlockData[n]->hStereoMdct ); - hMCT->hBlockData[n]->hStereoMdct = NULL; - } - - free( hMCT->hBlockData[n] ); - hMCT->hBlockData[n] = NULL; - } - } - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - if ( b_nchan_change ) - { - hMCT->currBlockDataCnt = 0; - - /*Initialize bits required to signal channel-pair index*/ - hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floorf( ( logf( (float) hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) * INV_LOG_2 ) ) + 1 ) ); - - set_s( hMCT->chBitRatios, 0, MCT_MAX_CHANNELS ); - set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); - } - - return IVAS_ERR_OK; -} -#endif - - -/*------------------------------------------------------------------------- - * create_mct_dec_close() - * - * Close IVAS decoder MCT handle - *-------------------------------------------------------------------------*/ - -void ivas_mct_dec_close( - MCT_DEC_HANDLE *hMCT /* i/o: MCT decoder structure */ -) -#ifdef IVAS_FLOAT_FIXED -{ - Word16 n, maxBlocks; - - test(); - IF( hMCT == NULL || *hMCT == NULL ) +void ivas_mct_dec_close( + MCT_DEC_HANDLE *hMCT /* i/o: MCT decoder structure */ +) +{ + Word16 n, maxBlocks; + + test(); + IF( hMCT == NULL || *hMCT == NULL ) { return; } @@ -1354,38 +850,6 @@ void ivas_mct_dec_close( return; } -#else -{ - Word16 n, maxBlocks; - - IF( hMCT == NULL || *hMCT == NULL ) - { - return; - } - - maxBlocks = ( *hMCT )->nchan_out_woLFE / 2; - - FOR( n = 0; n < maxBlocks; n++ ) - { - IF( ( *hMCT )->hBlockData[n] != NULL ) - { - IF( ( *hMCT )->hBlockData[n]->hStereoMdct != NULL ) - { - free( ( *hMCT )->hBlockData[n]->hStereoMdct ); - ( *hMCT )->hBlockData[n]->hStereoMdct = NULL; - } - - free( ( *hMCT )->hBlockData[n] ); - ( *hMCT )->hBlockData[n] = NULL; - } - } - - free( *hMCT ); - *hMCT = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1397,7 +861,6 @@ void ivas_mct_dec_close( *-------------------------------------------------------------------------*/ /*! r : MC format mode */ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_mc_dec_config_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 idx, /* i : LS config. index */ @@ -1463,53 +926,6 @@ ivas_error ivas_mc_dec_config_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_mc_dec_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t idx, /* i : LS config. index */ - uint16_t *nSamplesRendered, /* o : samples flushed from last frame (JBM) */ - int16_t *data /* o : output synthesis signal */ -) -{ - AUDIO_CONFIG signaled_config; - MC_MODE last_mc_mode; - ivas_error error; - - /* store last frame MC mode */ - last_mc_mode = st_ivas->mc_mode; - - if ( !st_ivas->bfi ) - { - /* set transported MC LS setup */ - signaled_config = ivas_mc_map_ls_setup_to_output_config( idx ); - - if ( st_ivas->ini_frame == 0 ) - { - st_ivas->transport_config = signaled_config; - } - - /* select MC format mode */ - st_ivas->mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( signaled_config ), st_ivas->hDecoderConfig->ivas_total_brate ); - - /* MC format switching */ - if ( st_ivas->ini_frame != 0 ) - { - if ( st_ivas->hDecoderConfig->last_ivas_total_brate != st_ivas->hDecoderConfig->ivas_total_brate || st_ivas->transport_config != signaled_config || last_mc_mode != st_ivas->mc_mode ) - { - if ( ( error = ivas_mc_dec_reconfig( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - - { - return error; - } - } - } - - st_ivas->transport_config = signaled_config; - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -1518,7 +934,6 @@ ivas_error ivas_mc_dec_config( * reconfigure the MC format decoder *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_mc_dec_reconfig_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ UWord16 *nSamplesRendered, /* o : number of samples flushed from the last frame (JBM) */ @@ -1670,7 +1085,7 @@ static ivas_error ivas_mc_dec_reconfig_fx( /* De-allocate McMasa-related handles */ ivas_masa_dec_close_fx( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); IF( st_ivas->hDirAC != NULL ) { ivas_dirac_rend_close_fx( &( st_ivas->hDirACRend ) ); @@ -1711,7 +1126,7 @@ static ivas_error ivas_mc_dec_reconfig_fx( } ivas_masa_dec_close_fx( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); /* init LS conversion if the renderer type asks for it */ test(); @@ -1755,7 +1170,7 @@ static ivas_error ivas_mc_dec_reconfig_fx( /* De-allocate McMasa-related handles */ ivas_masa_dec_close_fx( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); IF( st_ivas->hDirAC != NULL ) { @@ -1787,7 +1202,7 @@ static ivas_error ivas_mc_dec_reconfig_fx( IF( NE_16( last_mc_mode, MC_MODE_MCMASA ) ) { - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } @@ -2242,632 +1657,3 @@ static ivas_error ivas_mc_dec_reconfig_fx( } return error; } -#else -static ivas_error ivas_mc_dec_reconfig( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the last frame (JBM) */ - int16_t *data /* o : output synthesis signal */ -) -{ - int16_t nchan_transport_old, nSCE_old, nCPE_old, sba_dirac_stereo_flag_old, nchan_hp20_old; - int16_t numCldfbAnalyses_old, numCldfbSyntheses_old; - int32_t new_brate_SCE, new_brate_CPE, ivas_total_brate; - RENDERER_TYPE renderer_type_old; - Decoder_State *st; - ivas_error error; - MC_MODE mc_mode, last_mc_mode; - TC_BUFFER_MODE tc_buffer_mode_new; - int16_t tc_nchan_tc_new; - int16_t tc_nchan_allocate_new; - int16_t tc_granularity_new; - AUDIO_CONFIG intern_config_old; - IVAS_OUTPUT_SETUP hIntSetupOld; - int16_t nchan_out_buff_old, nchan_out_buff; - - error = IVAS_ERR_OK; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - nchan_transport_old = st_ivas->nchan_transport; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - last_mc_mode = ivas_mc_mode_select( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ), st_ivas->hDecoderConfig->last_ivas_total_brate ); /* NB: this assumes that LS config remains the same between frames */ - - /* temporally set the current mc_mode back to the previous one to make sure the following call to - ivas_init_dec_get_num_cldfb_instances() returns the correct counts */ - mc_mode = st_ivas->mc_mode; - st_ivas->mc_mode = last_mc_mode; - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - st_ivas->mc_mode = mc_mode; - - nSCE_old = st_ivas->nSCE; - nCPE_old = st_ivas->nCPE; - sba_dirac_stereo_flag_old = st_ivas->sba_dirac_stereo_flag; - - /* special handling needed for the hp20 buffers for McMASA */ - if ( last_mc_mode == MC_MODE_MCMASA ) - { - nchan_hp20_old = getNumChanSynthesis( st_ivas ); - } - else - { - nchan_hp20_old = nchan_transport_old; - } - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - /* save old IntSetup, might be needed for JBM flushing...*/ - intern_config_old = st_ivas->intern_config; - hIntSetupOld = st_ivas->hIntSetup; - tc_granularity_new = 1; - - /* renderer might have changed, reselect */ - renderer_type_old = st_ivas->renderer_type; - ivas_renderer_select( st_ivas ); - - /* side effect of the renderer selection can be a changed internal config */ - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - - /* transfer subframe info from DirAC or ParamMC to central tc buffer */ - if ( last_mc_mode == MC_MODE_PARAMMC ) - { - st_ivas->hTcBuffer->nb_subframes = st_ivas->hParamMC->nb_subframes; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hParamMC->subframes_rendered; - st_ivas->hTcBuffer->num_slots = st_ivas->hParamMC->num_slots; - st_ivas->hTcBuffer->slots_rendered = st_ivas->hParamMC->slots_rendered; - mvs2s( st_ivas->hParamMC->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - else if ( last_mc_mode == MC_MODE_MCMASA && st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpatParamRendCom->nb_subframes; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered; - st_ivas->hTcBuffer->num_slots = st_ivas->hSpatParamRendCom->num_slots; - st_ivas->hTcBuffer->slots_rendered = st_ivas->hSpatParamRendCom->slots_rendered; - mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - - /* JBM: when granularity goes down (e.g. MCT with CREND -> ParamMC with binaural fastconv - render what still fits in the new granularity */ - tc_granularity_new = ivas_jbm_dec_get_render_granularity_flt( st_ivas->renderer_type, st_ivas->ivas_format, st_ivas->mc_mode, st_ivas->hDecoderConfig->output_Fs ); - if ( tc_granularity_new < st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_flush_renderer( st_ivas, tc_granularity_new, renderer_type_old, intern_config_old, &hIntSetupOld, last_mc_mode, ISM_MODE_NONE, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - /* JBM: when granularity goes up set samples to discard at the beginning of the frame */ - else if ( tc_granularity_new > st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_set_discard_samples( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels( ivas_mc_map_output_config_to_mc_ls_setup( st_ivas->transport_config ) ); - st_ivas->nSCE = 0; - st_ivas->nCPE = st_ivas->nchan_transport / 2; - - if ( last_mc_mode != MC_MODE_MCT ) - { - /*De-allocate handles for other MC modes*/ - if ( st_ivas->hParamMC != NULL ) - { - ivas_param_mc_dec_close( &st_ivas->hParamMC ); - - /* remove ls conversion if it was allocated by ParamMC */ - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - } - - if ( last_mc_mode == MC_MODE_PARAMUPMIX ) - { - ivas_mc_paramupmix_dec_close( &( st_ivas->hMCParamUpmix ) ); - ivas_ls_setup_conversion_close( &( st_ivas->hLsSetUpConversion ) ); - } - - /* De-allocate McMasa-related handles */ - ivas_masa_dec_close( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); - - if ( st_ivas->hDirAC != NULL ) - { - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - - /* init LS conversion if the renderer type asks for it */ - if ( st_ivas->renderer_type == RENDERER_MC && st_ivas->hLsSetUpConversion == NULL ) - { - if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - st_ivas->nSCE = 0; - st_ivas->nCPE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS / 2; - st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; - - if ( last_mc_mode != MC_MODE_PARAMUPMIX ) - { - /*De-allocate handles for other MC modes*/ - if ( st_ivas->hParamMC != NULL ) - { - ivas_param_mc_dec_close( &st_ivas->hParamMC ); - - /* remove ls conversion if it was allocated by ParamMC */ - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - } - - ivas_masa_dec_close( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); - - /* init LS conversion if the renderer type asks for it */ - if ( ( st_ivas->renderer_type == RENDERER_MC ) && st_ivas->hLsSetUpConversion == NULL ) - { - if ( ( error = ivas_ls_setup_conversion_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = ivas_mc_paramupmix_dec_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - if ( last_mc_mode != MC_MODE_PARAMMC ) - { - /* remove old ls conversion for MCT if open, gets reopened correctly within ivas_param_mc_dec_open when needed */ - if ( renderer_type_old == RENDERER_MC && st_ivas->hLsSetUpConversion != NULL ) - { - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - } - - if ( ( error = ivas_param_mc_dec_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_param_mc_dec_reconfig( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* De-allocate McMasa-related handles */ - ivas_masa_dec_close( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); - - if ( st_ivas->hDirAC != NULL ) - { - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - - if ( last_mc_mode == MC_MODE_MCT ) - { - if ( st_ivas->hMCT != NULL && st_ivas->nchan_transport <= CPE_CHANNELS ) - { - ivas_mct_dec_close( &st_ivas->hMCT ); - } - } - else if ( last_mc_mode == MC_MODE_PARAMUPMIX ) - { - ivas_mc_paramupmix_dec_close( &( st_ivas->hMCParamUpmix ) ); - } - - /* LFE handle */ - ivas_lfe_dec_close( &( st_ivas->hLFE ) ); - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->element_mode_init ), ivas_total_brate ); - - if ( last_mc_mode != MC_MODE_MCMASA ) - { - if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = ivas_mcmasa_dec_reconfig( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* LS conversion */ - if ( st_ivas->hLsSetUpConversion != NULL ) - { - ivas_ls_setup_conversion_close( &st_ivas->hLsSetUpConversion ); - } - - ivas_mc_paramupmix_dec_close( &( st_ivas->hMCParamUpmix ) ); - - if ( st_ivas->hParamMC != NULL ) - { - ivas_param_mc_dec_close( &st_ivas->hParamMC ); - st_ivas->hParamMC = NULL; - } - - if ( last_mc_mode == MC_MODE_MCT ) - { - ivas_mct_dec_close( &st_ivas->hMCT ); - } - - /* LFE handle */ - ivas_lfe_dec_close( &( st_ivas->hLFE ) ); - } - - if ( st_ivas->mc_mode != MC_MODE_MCMASA ) - { - if ( st_ivas->nchan_transport == 1 ) - { - st_ivas->element_mode_init = IVAS_SCE; - } - else - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - } - - /*-----------------------------------------------------------------* - * Reconfigure core coder - *-----------------------------------------------------------------*/ - - /* special case: MCT->ParamMC with more than 2 TC, CPE 1 stays, but has the wrong mct_chan_mode in channel 1 - and might have IGF static memory not allocated and the bit stream index list not set, - set correct mct_chan_mode and init missing static mem (IGF, HQ) and some config (TNS) do it here since it is _very_ MC specific */ - if ( last_mc_mode == MC_MODE_MCT && st_ivas->mc_mode == MC_MODE_PARAMMC && st_ivas->nchan_transport > CPE_CHANNELS ) - { - st = st_ivas->hCPE[1]->hCoreCoder[1]; - - if ( st_ivas->nchan_transport == 3 ) - { - st->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - else - { - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - - if ( st->hIGFDec == NULL ) - { - if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for IGF\n" ) ); - } - - st->igf = 0; - init_igf_dec_flt( st->hIGFDec ); - } - - if ( st->hHQ_core == NULL ) - { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); - } - - /* HQ core initialization */ - HQ_core_dec_init_flt( st->hHQ_core ); - } - - /* check if we have a doubly used hTxcCfg, if so, allocate a distint one for the old MCT LFE channel */ - if ( st->hTcxCfg == st_ivas->hCPE[1]->hCoreCoder[0]->hTcxCfg ) - { - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); - } - } - - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( ivas_total_brate, st->igf, st->element_mode ); - } - if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - uint8_t separateChannelEnabled; - int16_t separateChannelIndex; - ivas_mcmasa_set_separate_channel_mode( &separateChannelEnabled, &separateChannelIndex, ivas_total_brate ); - ivas_mcmasa_split_brate( separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &new_brate_SCE, &new_brate_CPE ); - } - else if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - new_brate_SCE = 0; - new_brate_CPE = ( ivas_total_brate / ( st_ivas->nchan_transport - 1 ) ) * CPE_CHANNELS; - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - new_brate_SCE = 0; - new_brate_CPE = ( ivas_total_brate / ( st_ivas->nchan_transport - 1 ) ) * CPE_CHANNELS; - } - else - { - new_brate_SCE = 0; /* ivas_total_brate / st_ivas->nchan_transport;*/ - new_brate_CPE = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; - } - - if ( ( error = ivas_corecoder_dec_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, sba_dirac_stereo_flag_old, new_brate_SCE, new_brate_CPE ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( last_mc_mode == MC_MODE_MCT && st_ivas->mc_mode == MC_MODE_PARAMMC && st_ivas->nchan_transport > CPE_CHANNELS ) - { - st = st_ivas->hCPE[1]->hCoreCoder[1]; - - /* TCX-LTP */ - if ( st->hTcxLtpDec == NULL ) - { - if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); - } - tcxltp_dec_init( st->hTcxLtpDec, 0, st->last_codec_mode, st->element_mode, st->pit_max, st->sr_core ); - } - } - - /*-----------------------------------------------------------------* - * re-configure HP20 memories - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_hp20_dec_reconfig( st_ivas, nchan_hp20_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * Allocate the LFE handle that is coded separately after the allocation of the core coders - *-----------------------------------------------------------------*/ - - if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) - { - int32_t binauralization_delay_ns = st_ivas->binaural_latency_ns; - if ( st_ivas->hBinRenderer != NULL ) - { - if ( st_ivas->hBinRenderer->render_lfe ) - { - /* Account for filterbank delay */ - binauralization_delay_ns += IVAS_FB_DEC_DELAY_NS; - } - else - { - binauralization_delay_ns = 0; - } - } - - if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, binauralization_delay_ns ) ) != IVAS_ERR_OK ) - { - return error; - } - - set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); - set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); - } - - /*-----------------------------------------------------------------* - * Reconfigure renderers - *-----------------------------------------------------------------*/ - - if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - if ( ( st_ivas->renderer_type != RENDERER_DISABLE ) && ( st_ivas->renderer_type != RENDERER_MCMASA_MONO_STEREO ) ) - { - if ( st_ivas->hDirAC != NULL ) - { - /* reconfigure existing DirAC dec */ - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* init a new DirAC dec */ - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_OPEN ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( st_ivas->renderer_type == RENDERER_DISABLE && st_ivas->hDirAC != NULL ) - { - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - } - - if ( renderer_type_old != st_ivas->renderer_type ) - { - AUDIO_CONFIG output_config; - - output_config = st_ivas->hDecoderConfig->output_config; - - /* binaural renderers*/ - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - /* remove unneeded binaural renderers */ - if ( st_ivas->hBinRenderer != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - ivas_binRenderer_close( &st_ivas->hBinRenderer ); - } - - if ( ( st_ivas->hCrendWrapper != NULL ) && ( st_ivas->hCrendWrapper->hCrend != NULL ) && ( st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV && st_ivas->renderer_type != RENDERER_BINAURAL_MIXER_CONV_ROOM && ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD || st_ivas->hIntSetup.output_config != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) ) - { - - ivas_rend_closeCrend( &( st_ivas->hCrendWrapper ) ); - } - - if ( st_ivas->hBinRendererTd != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_OBJECTS_TD ) ) - { - if ( st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE ) - { - ivas_td_binaural_close( &st_ivas->hBinRendererTd ); - st_ivas->hHrtfTD = NULL; - } - } - - if ( st_ivas->hDiracDecBin != NULL ) - { - if ( st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - ivas_dirac_dec_close_binaural_data( &st_ivas->hDiracDecBin ); - } - } - - /* init necessary new renderers */ - if ( st_ivas->hBinRenderer == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->hBinRendererTd == NULL && st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD ) - { - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_rend_initCrendWrapper( &st_ivas->hCrendWrapper ) ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); - } - - st_ivas->hCrendWrapper->hCrend = NULL; - st_ivas->hCrendWrapper->hHrtfCrend = NULL; - if ( ( st_ivas->hCrendWrapper->hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend\n" ); - } - } - } - else if ( st_ivas->hCrendWrapper == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - if ( ( error = ivas_rend_openCrend( &( st_ivas->hCrendWrapper ), st_ivas->intern_config, st_ivas->hDecoderConfig->output_config, st_ivas->hRenderConfig, st_ivas->hSetOfHRTF, st_ivas->hDecoderConfig->output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - st_ivas->binaural_latency_ns = st_ivas->hCrendWrapper->binaural_latency_ns; - } - } - /* mono/stereo */ - else if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - /* nothing should happen here... */ - } - /* LS */ - else if ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_5_1_2 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - } - } - - /*-----------------------------------------------------------------* - * CLDFB instances - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_cldfb_dec_reconfig( st_ivas, nchan_transport_old, numCldfbAnalyses_old, numCldfbSyntheses_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * JBM TC buffers - *-----------------------------------------------------------------*/ - - { - int16_t tc_nchan_full_new; - DECODER_TC_BUFFER_HANDLE hTcBuffer; - - hTcBuffer = st_ivas->hTcBuffer; - tc_buffer_mode_new = ivas_jbm_dec_get_tc_buffer_mode( st_ivas ); - tc_nchan_tc_new = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - tc_nchan_allocate_new = tc_nchan_tc_new; - tc_nchan_full_new = tc_nchan_tc_new; - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - tc_nchan_allocate_new = 2 * BINAURAL_CHANNELS; - tc_nchan_full_new = tc_nchan_allocate_new; - } - - if ( st_ivas->mc_mode == MC_MODE_PARAMMC && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO ) - { - tc_nchan_full_new = 0; - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - tc_nchan_allocate_new = MC_PARAMUPMIX_MAX_INPUT_CHANS; - tc_buffer_mode_new = TC_BUFFER_MODE_RENDERER; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) - { - tc_buffer_mode_new = TC_BUFFER_MODE_BUFFER; - tc_nchan_tc_new = st_ivas->hDecoderConfig->nchan_out; - tc_nchan_allocate_new = tc_nchan_tc_new; - } - tc_nchan_full_new = tc_nchan_allocate_new; - } - - /* reconfigure buffer */ - if ( hTcBuffer->tc_buffer_mode != tc_buffer_mode_new || hTcBuffer->nchan_transport_jbm != tc_nchan_tc_new || - hTcBuffer->nchan_buffer_full != tc_nchan_full_new || hTcBuffer->nchan_transport_internal != tc_nchan_allocate_new || - tc_granularity_new != hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_reconfigure( st_ivas, tc_buffer_mode_new, tc_nchan_tc_new, tc_nchan_allocate_new, tc_nchan_full_new, tc_granularity_new ) ) != IVAS_ERR_OK ) - { - return error; - } - } - /* transfer subframe info from central tc buffer to ParamMC or McMASA (DirAC) */ - if ( st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hSpatParamRendCom->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hSpatParamRendCom->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - st_ivas->hSpatParamRendCom->num_slots = st_ivas->hTcBuffer->num_slots; - st_ivas->hSpatParamRendCom->slots_rendered = st_ivas->hTcBuffer->slots_rendered; - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpatParamRendCom->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - else if ( st_ivas->hParamMC != NULL ) - { - st_ivas->hParamMC->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hParamMC->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - st_ivas->hParamMC->num_slots = st_ivas->hTcBuffer->num_slots; - st_ivas->hParamMC->slots_rendered = st_ivas->hTcBuffer->slots_rendered; - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hParamMC->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - } - - - /*-----------------------------------------------------------------* - * floating-point output audio buffers - *-----------------------------------------------------------------*/ - - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - - if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK ) - { - return error; - } - - return error; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_mct_dec_mct.c b/lib_dec/ivas_mct_dec_mct.c index 5c56eb533..7ba41f344 100644 --- a/lib_dec/ivas_mct_dec_mct.c +++ b/lib_dec/ivas_mct_dec_mct.c @@ -38,304 +38,4 @@ #include "wmc_auto.h" #include #include "stat_enc.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------* - * indexToChannelPair() - * - * get the index of each channel pair - *----------------------------------------------------------*/ - -static void indexToChannelPair( - MCT_DEC_BLOCK_DATA_HANDLE hBlock, - const int16_t nChannels, - const int16_t pairIdx ) -{ - int16_t ch1, ch2; - int16_t tmpIdx = 0; - - for ( ch2 = 1; ch2 < nChannels; ch2++ ) - { - for ( ch1 = 0; ch1 < ch2; ch1++ ) - { - - if ( tmpIdx == pairIdx ) - { - hBlock->ch1 = ch1; - hBlock->ch2 = ch2; - - return; - } - else - { - tmpIdx++; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_mct_dec_mct() - * - * decode core and mct information - *-------------------------------------------------------------------*/ - -void ivas_mct_dec_mct( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - Decoder_State **sts, /* i/o: decoder state structure */ - const int16_t nchan /* i : number of channels */ -) -{ - int16_t pair, ch, channelPairIndex; - MCT_DEC_BLOCK_DATA_HANDLE hBlock; - Decoder_State *p_st[CPE_CHANNELS]; - int16_t nchan_active = 0; - - hMCT->currBlockDataCnt = get_next_indice( sts[0], MCT_NUM_BLOCK_DATA_BITS ); - - /*first get core and overlap info for all channels*/ - for ( ch = 0; ch < nchan; ch++ ) - { - if ( hMCT->currBlockDataCnt && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - hMCT->mc_global_ild[ch] = get_next_indice( sts[0], SMDCT_GLOBAL_ILD_BITS ); - } - else - { - hMCT->mc_global_ild[ch] = 0; - } - } - - if ( hMCT->currBlockDataCnt ) - { - for ( ch = 0; ch < nchan; ch++ ) - { - if ( - sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - hMCT->lowE_ch[ch] = get_next_indice( sts[0], 1 ); - } - } - } - - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - nchan_active++; - } - } - - for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) - { - assert( nchan_active >= 2 ); - hBlock = hMCT->hBlockData[pair]; - - /*get channel pair index from BS*/ - channelPairIndex = get_next_indice( sts[0], hMCT->bitsChannelPairIndex ); - indexToChannelPair( hBlock, nchan, channelPairIndex ); - - /*point to decoder states of actual channels to read block pair bits*/ - p_st[0] = sts[hBlock->ch1]; - p_st[1] = sts[hBlock->ch2]; - - parse_stereo_from_bitstream( hBlock->hStereoMdct, p_st, 1, 0, sts[0], hBlock->mask ); - } - - return; -} - - -/*----------------------------------------------------------* - * applyGlobalILD() - * - * revert to initial channel energy levels using the ratios - * sent from the encoder - *----------------------------------------------------------*/ - -static void applyGlobalILD( - Decoder_State **sts, - MCT_DEC_HANDLE hMCT, - float *x[MCT_MAX_CHANNELS][NB_DIV] ) -{ - int16_t ch, k; - int16_t nSubframes, L_subframeTCX; - float qratio; - - for ( ch = 0; ch < ( hMCT->nchan_out_woLFE ); - ch++ ) - { - nSubframes = ( sts[ch]->core == TCX_20_CORE ) ? 1 : NB_DIV; - L_subframeTCX = sts[ch]->hTcxDec->L_frameTCX / nSubframes; - - if ( hMCT->mc_global_ild[ch] ) - { - if ( hMCT->lowE_ch[ch] ) - { - qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; - } - else - { - qratio = SMDCT_ILD_RANGE / (float) hMCT->mc_global_ild[ch]; - } - - for ( k = 0; k < nSubframes; k++ ) - { - v_multc( x[ch][k], qratio, x[ch][k], L_subframeTCX ); - } - } - else - { - continue; - } - } - - return; -} - - -/*----------------------------------------------------------* - * apply_MCT_dec() - * - * main MCT decoding function - *----------------------------------------------------------*/ - -void apply_MCT_dec( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - Decoder_State **sts, /* i/o: decoder state structure */ - float *x[MCT_MAX_CHANNELS][NB_DIV] /* i/o: decoded and dequan. spect. input to MCT */ -) -{ - int16_t pair; - MCT_DEC_BLOCK_DATA_HANDLE hBlock; - - for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) - { - hBlock = hMCT->hBlockData[pair]; - - stereo_decoder_tcx( hBlock->hStereoMdct, hBlock->mask, &x[hBlock->ch2][0], &x[hBlock->ch1][0], &x[hBlock->ch2][0], hBlock->hStereoMdct->mdct_stereo_mode, sts[hBlock->ch1]->core, sts[hBlock->ch2]->core, sts[0]->igf, sts[0]->hTcxDec->L_frameTCX, sts[1]->hTcxDec->L_frameTCX, 1, TCX_20_CORE, TCX_20_CORE, 0 ); - } - - applyGlobalILD( sts, hMCT, x ); - - return; -} - - -/*----------------------------------------------------------* - * mctStereoIGF_dec() - * - * apply IGF to MCT stereo block pairs - *----------------------------------------------------------*/ - -void mctStereoIGF_dec( - MCT_DEC_HANDLE hMCT, /* i/o: MCT decoder structure */ - Decoder_State **stm, /* i/o: decoder state structure */ - float *x[MCT_MAX_CHANNELS][NB_DIV], /* i/o: decoded and dequantized spectrum*/ - const int16_t bfi /* i : bad frame flag */ -) -{ - int16_t b, core, nSubframes, k, ch, p_ch[CPE_CHANNELS], ch1, ch2; - Decoder_State *sts[CPE_CHANNELS], *st = NULL; - int16_t tcx_offset[CPE_CHANNELS]; - int16_t tcx_offsetFB[CPE_CHANNELS]; - int16_t left_rect[CPE_CHANNELS]; - int16_t L_spec[CPE_CHANNELS]; - int16_t L_frame[CPE_CHANNELS]; - int16_t L_frameTCX[CPE_CHANNELS]; - float *p_x[CPE_CHANNELS][NB_DIV]; - int16_t singleChEle[MCT_MAX_CHANNELS]; - - set_s( singleChEle, 1, ( hMCT->nchan_out_woLFE ) ); - - for ( b = 0; b < hMCT->currBlockDataCnt; b++ ) - { - ch1 = hMCT->hBlockData[b]->ch1; - ch2 = hMCT->hBlockData[b]->ch2; - - sts[0] = stm[ch1]; - sts[1] = stm[ch2]; - core = sts[0]->core; - nSubframes = core; - p_ch[0] = ch1; - p_ch[1] = ch2; - singleChEle[hMCT->hBlockData[b]->ch1] = 0; - singleChEle[hMCT->hBlockData[b]->ch2] = 0; - - for ( k = 0; k < nSubframes; k++ ) - { - p_x[0][k] = x[ch1][k]; - p_x[1][k] = x[ch2][k]; - - if ( hMCT->hBlockData[b]->hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO || hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO ) - { - L_spec[0] = sts[0]->hTcxCfg->tcx_coded_lines / nSubframes; - - init_tcx_info( sts[0], sts[0]->L_frame / nSubframes, sts[0]->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[0], &tcx_offsetFB[0], &L_frame[0], &L_frameTCX[0], &left_rect[0], &L_spec[0] ); - - /* stereo IGF decoding */ - assert( ( sts[0]->core == sts[1]->core ) || ( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) ); - - decoder_tcx_IGF_stereo( sts, hMCT->hBlockData[b]->hStereoMdct, hMCT->hBlockData[b]->mask, p_x, L_frame[0], left_rect[0], k, bfi, 1 /* MCT_flag */ ); - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ - { - continue; - } - L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes; - - init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); - - /* mono or dual mono IGF decoding */ - decoder_tcx_IGF_mono( st, x[p_ch[ch]][k], L_frame[ch], left_rect[ch], bfi, k ); - } - } - } - } - - - if ( sum_s( singleChEle, ( hMCT->nchan_out_woLFE ) ) != 0 ) - { - for ( ch = 0; ch < ( hMCT->nchan_out_woLFE ); ch++ ) - { - if ( singleChEle[ch] ) - { - st = stm[ch]; - if ( bfi && st->core == ACELP_CORE ) /*no igf processing needed*/ - { - continue; - } - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; - - for ( k = 0; k < nSubframes; k++ ) - { - L_spec[0] = st->hTcxCfg->tcx_coded_lines / nSubframes; - - init_tcx_info( st, st->L_frame / nSubframes, st->hTcxDec->L_frameTCX / nSubframes, k, bfi, &tcx_offset[0], &tcx_offsetFB[0], &L_frame[0], &L_frameTCX[0], &left_rect[0], &L_spec[0] ); - - /* mono or dual mono IGF decoding */ - decoder_tcx_IGF_mono( st, x[ch][k], L_frame[0], left_rect[0], bfi, k ); - } - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_mct_dec_mct_fx.c b/lib_dec/ivas_mct_dec_mct_fx.c index 0f9bd98cc..1f8954e67 100644 --- a/lib_dec/ivas_mct_dec_mct_fx.c +++ b/lib_dec/ivas_mct_dec_mct_fx.c @@ -38,7 +38,6 @@ #include "wmc_auto.h" #include #include "stat_enc.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" @@ -449,4 +448,3 @@ void mctStereoIGF_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_mdct_core_dec.c b/lib_dec/ivas_mdct_core_dec.c index d82200503..96f15b91d 100644 --- a/lib_dec/ivas_mdct_core_dec.c +++ b/lib_dec/ivas_mdct_core_dec.c @@ -44,10 +44,8 @@ #include "ivas_stat_dec.h" #include "ivas_stat_com.h" #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------* @@ -56,7 +54,6 @@ * read IGF side bits *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void mdct_read_IGF_bits_fx( Decoder_State *st, /* i/o: Decoder state handle */ Decoder_State *st0 /* i : pointer to handle where bitstream is read */ @@ -112,41 +109,6 @@ void mdct_read_IGF_bits_fx( return; } -#else // IVAS_FLOAT_FIXED -void mdct_read_IGF_bits( - Decoder_State *st, /* i/o: Decoder state handle */ - Decoder_State *st0 /* i : pointer to handle where bitstream is read */ -) -{ - int16_t k, start; - - start = st0->next_bit_pos; - - if ( st->core == TCX_20_CORE ) - { - /* read IGF payload */ - IGFDecReadLevel_flt( st->hIGFDec, st0, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - - IGFDecReadData_flt( st->hIGFDec, st0, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - } - - if ( st->core == TCX_10_CORE ) - { - for ( k = 0; k < 2; k++ ) - { - IGFDecReadLevel_flt( st->hIGFDec, st0, IGF_GRID_LB_SHORT, k == 0 ? 1 : 0 ); - - IGFDecReadData_flt( st->hIGFDec, st0, IGF_GRID_LB_SHORT, k == 0 ? 1 : 0 ); - - IGFDecStoreTCX10SubFrameData_flt( st->hIGFDec, k ); - } - } - - st->side_bits_frame_channel += ( st0->next_bit_pos - start ); - - return; -} -#endif /*-----------------------------------------------------------------* @@ -155,7 +117,6 @@ void mdct_read_IGF_bits( * decode TCX side parameters *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void dec_prm_tcx_sidebits_fx( Word16 param[], /* o : decoded parameters */ Decoder_State *st, /* i/o: decoder memory state */ @@ -295,106 +256,6 @@ static void dec_prm_tcx_sidebits_fx( return; } -#else -static void dec_prm_tcx_sidebits( - int16_t param[], /* o : decoded parameters */ - Decoder_State *st, /* i/o: decoder memory state */ - const int16_t tnsSize[NB_DIV], /* i : TNS activity/subframe (in channel 0 in case of 2) */ - int16_t p_param[NB_DIV], /* o : pointer to parameters for next round of bs reading*/ - int16_t nTnsBitsTCX10[NB_DIV], /* o : number of TNS bits per TCX10 subframe */ - Decoder_State *st0, /* i/o: core decoder state handle - for bitstream */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t ch /* i : channel */ -) -{ - CONTEXT_HM_CONFIG hm_cfg; - int16_t start_bit_pos; - - /*--------------------------------------------------------------------------------* - * Initialization - *--------------------------------------------------------------------------------*/ - - hm_cfg.indexBuffer = NULL; - - start_bit_pos = st0->next_bit_pos; - - /* Init LTP data */ - st->hTcxDec->tcx_hm_LtpPitchLag = -1; - st->hTcxLtpDec->tcxltp_gain_float = 0.0f; - - /*--------------------------------------------------------------------------------* - * Header - *--------------------------------------------------------------------------------*/ - - /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ - getTCXMode_ivas( st, st0, MCT_flag ); - - st->flagGuidedAcelp = 0; - - if ( st->dec_glr ) - { - st->dec_glr_idx = -1; - } - - /* last_core for core switching and error concealment */ - if ( ( st->last_core == ACELP_CORE && st->last_total_brate == FRAME_NO_DATA ) || st->prev_bfi ) - { - /* needed for cases where first TCX frame after a certain transition (e.g. inactive SID/zero frame -> active or stereo switching) is lost */ - st->last_core_from_bs = get_next_indice( st0, 1 ); - - /* ACELP -> TCX_10 transitions are forbidden */ - if ( st->core == TCX_10_CORE && st->last_core == ACELP_CORE ) - { - st->last_core = TCX_20_CORE; - } - } - else - { - st->last_core = get_next_indice( st0, 1 ); - st->last_core_from_bs = st->last_core; - } - - getTCXWindowing_ivas( st->core, st->last_core, st->element_mode, st->hTcxCfg, st0 ); - - st->hTcxDec->kernel_type[0] = st->hTcxDec->kernel_type[1] = MDCT_IV; - st->hTcxDec->kernel_type[0] = get_next_indice( st0, st->last_core_from_bs != ACELP_CORE ? 2 : 1 ); - if ( st->core == TCX_10_CORE ) - { - st->hTcxDec->kernel_type[1] = 2 * ( st->hTcxDec->kernel_type[0] & 1 ) + get_next_indice( st0, 1 ); - } - if ( st->core == TCX_20_CORE ) - { - st->transform_type[0] = st->transform_type[1] = TCX_20; - } - else - { - if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) - { - st->transform_type[0] = TCX_5; - st->transform_type[1] = TCX_10; - } - else if ( st->hTcxCfg->tcx_last_overlap_mode == FULL_OVERLAP ) - { - st->transform_type[0] = TCX_10; - st->transform_type[1] = TCX_5; - } - else - { - st->transform_type[0] = st->transform_type[1] = TCX_5; - } - } - - /*--------------------------------------------------------------------------------* - * TCX20/TCX10 parameters - *--------------------------------------------------------------------------------*/ - - getTCXparam_ivas( st, st0, hm_cfg, param, 0, 0, ( ( ch > 0 ) && ( tnsSize ) && ( tnsSize[0] + tnsSize[1] > 0 ) ? tnsSize : NULL ), p_param, nTnsBitsTCX10, 0 ); - - st->side_bits_frame_channel = st0->next_bit_pos - start_bit_pos; - - return; -} -#endif /*-----------------------------------------------------------------* @@ -403,7 +264,6 @@ static void dec_prm_tcx_sidebits( * decode TCX core parameters *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void dec_prm_tcx_spec_fx( Decoder_State *st, /* i/o: decoder memory state */ Word16 param[], /* o : decoded parameters */ @@ -482,67 +342,6 @@ static void dec_prm_tcx_spec_fx( return; } -#else -static void dec_prm_tcx_spec( - Decoder_State *st, /* i/o: decoder memory state */ - int16_t param[], /* o : decoded parameters */ - int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ - int16_t *bitsRead, /* o : number of read bits */ - int16_t p_param[NB_DIV], /* o : pointer to parameters for next round of bs reading*/ - int16_t nTnsBitsTCX10[NB_DIV] /* i : number of TNS bits per TCX10 subframe */ -) -{ - int16_t nSubframes; - int16_t start_bit_pos, nbits_tcx; - int16_t nf_bits; - int16_t target_bitsTCX10[NB_DIV]; - int16_t indexBuffer[N_MAX + 1]; - CONTEXT_HM_CONFIG hm_cfg; - - /*--------------------------------------------------------------------------------* - * Initialization - *--------------------------------------------------------------------------------*/ - - hm_cfg.indexBuffer = indexBuffer; - - start_bit_pos = st->next_bit_pos; - - nf_bits = 0; - nbits_tcx = 0; - - nSubframes = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; - - /*calculate TCX10 target bits before to assure minimum amount is distributed between subframes*/ - if ( st->core == TCX_10_CORE && st->element_mode == IVAS_CPE_MDCT ) - { - int16_t nTnsBitsTCX10Tmp[NB_DIV]; - nTnsBitsTCX10Tmp[0] = nTnsBitsTCX10[0]; - nTnsBitsTCX10Tmp[1] = nTnsBitsTCX10[1]; - - /*compute target bits */ - nbits_tcx = st->bits_frame_channel + nTnsBitsTCX10[0] + nTnsBitsTCX10[1] + nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - ivas_mdct_tcx10_bit_distribution( target_bitsTCX10, nbits_tcx, nTnsBitsTCX10Tmp ); - } - - /*--------------------------------------------------------------------------------* - * TCX20/TCX10 parameters - *--------------------------------------------------------------------------------*/ - - getTCXparam_ivas( st, st, hm_cfg, param, 0, 0, NULL, p_param, target_bitsTCX10, 1 ); - - nf_bits = nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - - if ( *total_nbbits - bitsRead[0] + nf_bits < ( st->next_bit_pos - start_bit_pos ) ) - { - st->BER_detect = 1; - st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; - } - - bitsRead[0] = st->next_bit_pos - start_bit_pos; - - return; -} -#endif /*-----------------------------------------------------------------* @@ -551,7 +350,6 @@ static void dec_prm_tcx_spec( * Initialize TCX and read TCX side parameters *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mdct_dec_side_bits_frame_channel_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word16 param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* o : lpc_parameters */ @@ -817,311 +615,118 @@ void ivas_mdct_dec_side_bits_frame_channel_fx( return; } -#else -void ivas_mdct_dec_side_bits_frame_channel( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* o : lpc_parameters */ - int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to param buffer */ - Decoder_State *st0, /* i : pointer to bitstream handle */ - int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* o : number of bits for TNS */ - int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i/o: parameters buffer */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ - const int16_t odd_channel_cpe /* i : flag cpe with odd nb of tc channels */ + + +/*-----------------------------------------------------------------* + * ivas_mdct_core_invQ() + * + * Inverse processing steps up to inverse quantization + *-----------------------------------------------------------------*/ + +void ivas_mdct_core_invQ_fx( + CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ + Word16 nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* i : number of TNS bits */ + Word16 p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to param buffer */ + Word16 param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* i : lpc parameters */ + Word16 param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i : param buffer */ + Word16 fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ + STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ + Word32 *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + Word16 x_0_e[CPE_CHANNELS][NB_DIV], + Word32 *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ + Word16 x_e[CPE_CHANNELS][NB_DIV], + Word16 x_len[CPE_CHANNELS][NB_DIV], + Word16 Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients Q12*/ + Word16 ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ + const Word16 MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ) { - int16_t ch, bfi; + Word16 ch, bfi, k; Decoder_State **sts, *st; - int16_t total_nbbits[MCT_MAX_CHANNELS]; - int16_t bitsRead[MCT_MAX_CHANNELS]; - int16_t tmp; - int16_t sns_low_br_mode; - int16_t start_bit_pos_sns; - int8_t skipped_first_channel; + /* bitstream */ + Word16 total_nbbits[CPE_CHANNELS]; + Word16 bitsRead[CPE_CHANNELS]; + Word16 *prm[CPE_CHANNELS]; + /* LPC */ + Word16 Aind[CPE_CHANNELS][M + 1]; + Word32 sns[CPE_CHANNELS][NB_DIV][M]; + /* TCX */ + Word16 xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; // Q14 + Word16 tcx_offset[CPE_CHANNELS]; + Word16 tcx_offsetFB[CPE_CHANNELS]; + Word16 left_rect[CPE_CHANNELS]; + Word16 L_spec[CPE_CHANNELS]; + /* Framing */ + Word16 L_frame[CPE_CHANNELS], nSubframes[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS]; + Word16 tmp_concealment_method; + Word16 gain_tcx = 0, gain_tcx_e = 0; + move16(); + move16(); + Word16 nf_seed; + const Word16 *prm_sqQ; + Word16 L_frameTCX_global[CPE_CHANNELS]; + Word16 tmp_ms_sig[CPE_CHANNELS][N_MAX]; + Word16 tmp_ms_sig_e[CPE_CHANNELS]; + Word32 concealment_noise_fx[CPE_CHANNELS][L_FRAME48k]; + Word16 concealment_noise_e[CPE_CHANNELS]; + set16_fx( concealment_noise_e, 0, CPE_CHANNELS ); + TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode_bfi; + + Word16 q_l = 0, q_r = 0; + move16(); + move16(); + Word16 q_snsq = 0; + move16(); + Word32 *spectralData_tmp[CPE_CHANNELS]; + Word16 shift; + Word16 common_exp = 0; + move16(); + + FOR( k = 0; k < CPE_CHANNELS; ++k ) + { + spectralData_tmp[k] = malloc( N_MAX * sizeof( Word32 ) ); + } +#ifdef MSAN_FIX + set32_fx( spectralData_tmp[0], 0, L_FRAME_MAX ); + set32_fx( spectralData_tmp[1], 0, L_FRAME_MAX ); +#endif // MSAN_FIX + push_wmops( "mdct_core_invQ" ); sts = hCPE->hCoreCoder; bfi = sts[0]->bfi; + move16(); + noise_gen_mode_bfi = NOISE_GEN_MODE_UNDEF; + move32(); - set_s( total_nbbits, 0, MCT_MAX_CHANNELS ); - set_s( bitsRead, 0, MCT_MAX_CHANNELS ); + set16_fx( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); + set16_fx( total_nbbits, 0, CPE_CHANNELS ); + set16_fx( bitsRead, 0, CPE_CHANNELS ); + tmp_concealment_method = 0; + move16(); - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { - if ( MCT_flag ) - { - /* Initialization or re-configuration of Stereo TCX */ - stereo_tcx_init_dec( sts[ch], 1, hCPE->last_element_mode ); - } sts[ch]->enablePlcWaveadjust = 0; + move16(); } - if ( !bfi ) + /* temporarily restore LR representation of previous frame for PLC mode decision (done on the individual channels) */ + test(); + test(); + test(); + IF( bfi && !MCT_flag && ( ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO ) || ( hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) ) { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - /* disguard reading second channel of odd transport channels, mct_chan_mode is set by default*/ - if ( odd_channel_cpe && ch == 1 ) - { - continue; - } + L_frameTCX[0] = sts[0]->L_frameTCX_past; + move16(); + L_frameTCX[1] = sts[1]->L_frameTCX_past; + move16(); - st = sts[ch]; - if ( MCT_flag ) - { - tmp = get_next_indice( st0, 1 ); - if ( tmp ) - { - st->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - else - { - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - } - - /*read channel bitrate ratios from bitstream*/ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - sts[ch]->coder_type = INACTIVE; - sts[ch]->side_bits_frame_channel = 0; - continue; - } - - tmp = ch; - if ( ch == 1 && param_lpc[0][0] == 2 ) - { - tmp = 3; - } - - dec_prm_tcx_sidebits( param[ch], st, ( ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) ? sts[0]->hTcxDec->tnsActive : NULL ), p_param[ch], nTnsBitsTCX10[ch], st0, MCT_flag, tmp ); - - assert( st->BER_detect != 1 ); - } - - /*--------------------------------------------------------------------------------* - * SNS parameters - *--------------------------------------------------------------------------------*/ - - sns_low_br_mode = 0; - skipped_first_channel = 0; - if ( !MCT_flag && sts[0]->sr_core == 25600 && ( ( hCPE->element_brate == IVAS_48k || hCPE->element_brate == IVAS_64k ) ) ) - { - param_lpc[0][0] = SNS_STEREO_MODE_LR; - param_lpc[0][1] = SNS_STEREO_MODE_LR; - param_lpc[0][2] = 0; - param_lpc[0][3] = 0; - if ( sts[0]->core == sts[1]->core ) - { - int16_t nSubframes; - nSubframes = ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV; - - for ( int16_t n = 0; n < nSubframes; ++n ) - { - param_lpc[0][n] = get_next_indice( st0, 1 ); - } - - /* zero side flags only get transmitted if needed */ - for ( int16_t n = 0; n < nSubframes; ++n ) - { - if ( param_lpc[0][n] == SNS_STEREO_MODE_MS ) - { - param_lpc[0][n + SNS_STEREO_MODE_OFFSET_INDICES / 2] = get_next_indice( st0, 1 ); - } - } - } - for ( ch = 0; ch < CPE_CHANNELS; ++ch ) - { - int16_t nSubframes; - int16_t idxIndices; - - st = sts[ch]; - nSubframes = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - idxIndices = 0; - - for ( int16_t n = 0; n < nSubframes; ++n ) - { - const int16_t is_side = ch == 1 && param_lpc[0][n] == SNS_STEREO_MODE_MS; - const int16_t *bits = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20_bits : ivas_sns_cdbks_tcx10_bits; - int16_t nStages = ( ( nSubframes == 1 ) ? SNS_MSVQ_NSTAGES_TCX20 : SNS_MSVQ_NSTAGES_TCX10 ); - - if ( is_side ) - { - /* check for zero-side flag */ - if ( param_lpc[0][n + SNS_STEREO_MODE_OFFSET_INDICES / 2] ) - { - continue; - } - nStages = SNS_MSVQ_NSTAGES_SIDE; - bits = ( nSubframes == 1 ) ? ivas_sns_cdbks_side_tcx20_bits : ivas_sns_cdbks_side_tcx10_bits; - } - - for ( int16_t j = 0; j < nStages; ++j ) - { - /* plus one in index for stereo mode storage! */ - param_lpc[ch][j + idxIndices + SNS_STEREO_MODE_OFFSET_INDICES] = get_next_indice( st0, bits[j] ); - } - idxIndices += nStages; - } - } - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - skipped_first_channel = 1; - continue; - } - - start_bit_pos_sns = st0->next_bit_pos; - - if ( ch == 0 || skipped_first_channel ) - { - /* read SNS stereo mode */ - param_lpc[0][0] = get_next_indice( st0, 1 ) << 1; - - /* read low br mode flag (if it is possible to be non-zero) */ - if ( sts[0]->element_brate == IVAS_48k && !( ( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) ) - { - sns_low_br_mode = get_next_indice( st0, 1 ); - } - } - - tmp = ch; - if ( ch == 1 && param_lpc[0][0] == 2 ) - { - tmp = 3; - } - - getLPCparam_ivas( st, ¶m_lpc[ch][0], st0, tmp, sns_low_br_mode && !( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ); - - st->side_bits_frame_channel += st0->next_bit_pos - start_bit_pos_sns; - } - } - } - - return; -} -#endif - - -/*-----------------------------------------------------------------* - * ivas_mdct_core_invQ() - * - * Inverse processing steps up to inverse quantization - *-----------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void ivas_mdct_core_invQ_fx( - CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ - Word16 nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* i : number of TNS bits */ - Word16 p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to param buffer */ - Word16 param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* i : lpc parameters */ - Word16 param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i : param buffer */ - Word16 fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ - STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ - Word32 *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ - Word16 x_0_e[CPE_CHANNELS][NB_DIV], - Word32 *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ - Word16 x_e[CPE_CHANNELS][NB_DIV], - Word16 x_len[CPE_CHANNELS][NB_DIV], - Word16 Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients Q12*/ - Word16 ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ - const Word16 MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - Word16 ch, bfi, k; - Decoder_State **sts, *st; - /* bitstream */ - Word16 total_nbbits[CPE_CHANNELS]; - Word16 bitsRead[CPE_CHANNELS]; - Word16 *prm[CPE_CHANNELS]; - /* LPC */ - Word16 Aind[CPE_CHANNELS][M + 1]; - Word32 sns[CPE_CHANNELS][NB_DIV][M]; - /* TCX */ - Word16 xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; // Q14 - Word16 tcx_offset[CPE_CHANNELS]; - Word16 tcx_offsetFB[CPE_CHANNELS]; - Word16 left_rect[CPE_CHANNELS]; - Word16 L_spec[CPE_CHANNELS]; - /* Framing */ - Word16 L_frame[CPE_CHANNELS], nSubframes[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS]; - Word16 tmp_concealment_method; - Word16 gain_tcx = 0, gain_tcx_e = 0; - move16(); - move16(); - Word16 nf_seed; - const Word16 *prm_sqQ; - Word16 L_frameTCX_global[CPE_CHANNELS]; - Word16 tmp_ms_sig[CPE_CHANNELS][N_MAX]; - Word16 tmp_ms_sig_e[CPE_CHANNELS]; - Word32 concealment_noise_fx[CPE_CHANNELS][L_FRAME48k]; - Word16 concealment_noise_e[CPE_CHANNELS]; - set16_fx( concealment_noise_e, 0, CPE_CHANNELS ); - TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode_bfi; - - Word16 q_l = 0, q_r = 0; - move16(); - move16(); - Word16 q_snsq = 0; - move16(); - Word32 *spectralData_tmp[CPE_CHANNELS]; - Word16 shift; - Word16 common_exp = 0; - move16(); - - FOR( k = 0; k < CPE_CHANNELS; ++k ) - { - spectralData_tmp[k] = malloc( N_MAX * sizeof( Word32 ) ); - } -#ifdef MSAN_FIX - set32_fx( spectralData_tmp[0], 0, L_FRAME_MAX ); - set32_fx( spectralData_tmp[1], 0, L_FRAME_MAX ); -#endif // MSAN_FIX - - push_wmops( "mdct_core_invQ" ); - sts = hCPE->hCoreCoder; - bfi = sts[0]->bfi; - move16(); - noise_gen_mode_bfi = NOISE_GEN_MODE_UNDEF; - move32(); - - set16_fx( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); - set16_fx( total_nbbits, 0, CPE_CHANNELS ); - set16_fx( bitsRead, 0, CPE_CHANNELS ); - tmp_concealment_method = 0; - move16(); - - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch]->enablePlcWaveadjust = 0; - move16(); - } - - /* temporarily restore LR representation of previous frame for PLC mode decision (done on the individual channels) */ - test(); - test(); - test(); - IF( bfi && !MCT_flag && ( ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO ) || ( hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) ) - { - L_frameTCX[0] = sts[0]->L_frameTCX_past; - move16(); - L_frameTCX[1] = sts[1]->L_frameTCX_past; - move16(); - - Copy( sts[0]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[0], L_frameTCX[0] ); - Copy( sts[1]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[1], L_frameTCX[1] ); - tmp_ms_sig_e[0] = sts[0]->hTonalMDCTConc->lastBlockData.spectralData_exp; - move16(); - tmp_ms_sig_e[1] = sts[1]->hTonalMDCTConc->lastBlockData.spectralData_exp; - move16(); + Copy( sts[0]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[0], L_frameTCX[0] ); + Copy( sts[1]->hTonalMDCTConc->lastBlockData.spectralData, tmp_ms_sig[1], L_frameTCX[1] ); + tmp_ms_sig_e[0] = sts[0]->hTonalMDCTConc->lastBlockData.spectralData_exp; + move16(); + tmp_ms_sig_e[1] = sts[1]->hTonalMDCTConc->lastBlockData.spectralData_exp; + move16(); common_exp = s_max( sts[0]->hTonalMDCTConc->lastBlockData.spectralData_exp, sts[1]->hTonalMDCTConc->lastBlockData.spectralData_exp ); @@ -1314,397 +919,47 @@ void ivas_mdct_core_invQ_fx( IF( bfi == 0 ) { - test(); - test(); - test(); - IF( !MCT_flag && EQ_32( sts[0]->sr_core, 25600 ) && ( EQ_32( hCPE->element_brate, IVAS_48k ) || EQ_32( hCPE->element_brate, IVAS_64k ) ) ) - { - dequantize_sns_fx( param_lpc, sns, sts ); - } - ELSE - { - test(); - test(); - test(); - IF( EQ_16( sts[0]->core, TCX_20_CORE ) && EQ_16( sts[1]->core, TCX_20_CORE ) && NE_32( sts[0]->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) && NE_32( sts[1]->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) - { - sns_avq_dec_stereo_fx( param_lpc[0], param_lpc[1], sts[0]->L_frame, &sns[0][0][0], &q_l, &sns[1][0][0], &q_r ); - } - ELSE - { - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - IF( NE_32( st->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) - { - sns_avq_dec_fx( param_lpc[ch], sns[ch], &q_snsq, st->L_frame, st->numlpc ); - } - } - } - } - } - - /*--------------------------------------------------------------* - * Rate switching - *---------------------------------------------------------------*/ - - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - IF( st->rate_switching_reset ) - { - E_LPC_f_lsp_a_conversion( st->lsp_old_fx, st->old_Aq_12_8_fx, M ); - } - } - - /*--------------------------------------------------------------------------------* - * TCX20/10/5 - *--------------------------------------------------------------------------------*/ - - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - IF( EQ_32( st->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) - { - set32_fx( x[ch][0], 0, st->hTcxCfg->tcx_coded_lines ); - x_e[ch][0] = 31; - move16(); - /* usually set in decoder_tcx_invQ(), needed for concealment */ - st->hTcxDec->damping = 0; - move16(); - st->hTcxDec->gainHelper = 16384; - move16(); - st->hTcxDec->gainHelper_e = 1; - move16(); - st->hTcxDec->stepCompensate = 0; - move16(); - st->hTcxDec->stepCompensate_e = 15; - move16(); - - CONTINUE; - } - - test(); - test(); - IF( !bfi || ( bfi && ( st->core != ACELP_CORE ) ) ) - { - IF( EQ_16( st->core, TCX_10_CORE ) ) - { - nSubframes[ch] = NB_DIV; - } - ELSE - { - nSubframes[ch] = 1; - } - move16(); - - FOR( k = 0; k < nSubframes[ch]; k++ ) - { - /* Stability Factor */ - IF( !bfi ) - { - Copy_Scale_sig_32_16( sns[ch][k], &Aq[ch][k * M], M, -4 ); // sns in Q16 Word32. Aq in Q12 Word16 - } - ELSE - { - st->stab_fac_fx = MAX16B; - move16(); - } - - /* Set pointer to parameters */ - prm[ch] = param[ch] + L_mult0( k, DEC_NPRM_DIV ); - L_frameTCX_global[ch] = idiv1616( st->hTcxDec->L_frameTCX, nSubframes[ch] ); - move16(); - L_spec[ch] = idiv1616( st->hTcxCfg->tcx_coded_lines, nSubframes[ch] ); - move16(); - - init_tcx_info_fx( st, idiv1616( st->L_frame, nSubframes[ch] ), idiv1616( st->hTcxDec->L_frameTCX, nSubframes[ch] ), k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); - - tmp_concealment_method = 0; - move16(); - nf_seed = prm[ch][1 + NOISE_FILL_RANGES + LTPSIZE]; - move16(); - test(); - test(); - test(); - IF( !bfi && st->hTcxCfg->fIsTNSAllowed && ( ch > 0 ) && ( nf_seed < 0 ) ) - { - Copy( param[0] + k * DEC_NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, prm[ch] + 1 + NOISE_FILL_RANGES + LTPSIZE, negate( nf_seed ) ); - } - nf_seed = 0; - move16(); - - decoder_tcx_invQ_fx( st, prm[ch], Aq[ch], Aind[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], &x_e[ch][k], NULL, NULL, xn_buf, &fUseTns[ch][k], &tnsData[ch][k], &gain_tcx, &gain_tcx_e, &prm_sqQ, &nf_seed, bfi, k ); - - shift = Find_Max_Norm32( x[ch][k], L_frameTCX[ch] ); - move16(); - Scale_sig32( x[ch][k], L_frameTCX[ch], shift ); - x_e[ch][k] = sub( x_e[ch][k], shift ); - move16(); - - Copy32( x[ch][k], x_0[ch][k], L_frameTCX[ch] ); - x_0_e[ch][k] = x_e[ch][k]; - move16(); - - // PLC to be done - test(); - IF( bfi && !MCT_flag ) - { - TonalMdctConceal_create_concealment_noise_ivas_fx( concealment_noise_fx[ch], &concealment_noise_e[ch], hCPE, L_frameTCX[ch], L_frame[ch], ch, k, st->core, st->hTcxDec->cummulative_damping_tcx, noise_gen_mode_bfi ); - } - - decoder_tcx_noisefilling_fx( st, concealment_noise_fx[ch], concealment_noise_e[ch], Aq[ch], L_frameTCX_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], &x_e[ch][k], NULL, NULL, &tmp_concealment_method, gain_tcx, gain_tcx_e, prm_sqQ, nf_seed, bfi, MCT_flag, k ); - - shift = Find_Max_Norm32( x[ch][k], L_frameTCX[ch] ); - move16(); - Scale_sig32( x[ch][k], L_frameTCX[ch], shift ); - x_e[ch][k] = sub( x_e[ch][k], shift ); - move16(); - - decoder_tcx_noiseshaping_igf_fx( st, L_spec[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x[ch][k], &x_e[ch][k], &x_len[ch][k], NULL, NULL, &tmp_concealment_method, bfi ); - } - } - } - - FOR( k = 0; k < CPE_CHANNELS; ++k ) - { - free( spectralData_tmp[k] ); - } - - pop_wmops(); - return; -} -#else -void ivas_mdct_core_invQ( - CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ - int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV], /* i : number of TNS bits */ - int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to param buffer */ - int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW], /* i : lpc parameters */ - int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV], /* i : param buffer */ - int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flag TNS enabled */ - STnsData tnsData[CPE_CHANNELS][NB_DIV], /* i : TNS parameter */ - float *x_0[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ - float *x[CPE_CHANNELS][NB_DIV], /* i/o: signal buffer */ - float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* i : LP coefficients */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : M/S mask */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t ch, bfi, k; - Decoder_State **sts, *st; - /* bitstream */ - int16_t total_nbbits[CPE_CHANNELS]; - int16_t bitsRead[CPE_CHANNELS]; - int16_t *prm[CPE_CHANNELS]; - /* LPC */ - Word16 Aind[CPE_CHANNELS][M + 1]; - float sns[CPE_CHANNELS][NB_DIV][M]; - /* TCX */ - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - int16_t tcx_offset[CPE_CHANNELS]; - int16_t tcx_offsetFB[CPE_CHANNELS]; - int16_t left_rect[CPE_CHANNELS]; - int16_t L_spec[CPE_CHANNELS]; - /* Framing */ - int16_t L_frame[CPE_CHANNELS], nSubframes[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS]; - int16_t tmp_concealment_method; - float gain_tcx; - int16_t nf_seed; - const int16_t *prm_sqQ; - int16_t L_frameTCX_global[CPE_CHANNELS]; - float tmp_ms_sig[CPE_CHANNELS][N_MAX]; - float concealment_noise[CPE_CHANNELS][L_FRAME48k]; - TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode_bfi; - - push_wmops( "mdct_core_invQ" ); - sts = hCPE->hCoreCoder; - bfi = sts[0]->bfi; - noise_gen_mode_bfi = NOISE_GEN_MODE_UNDEF; - - set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); - set_s( total_nbbits, 0, CPE_CHANNELS ); - set_s( bitsRead, 0, CPE_CHANNELS ); - tmp_concealment_method = 0; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch]->enablePlcWaveadjust = 0; - } - - /* temporarily restore LR representation of previous frame for PLC mode decision (done on the individual channels) */ - if ( bfi && !MCT_flag && ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) - { - L_frameTCX[0] = sts[0]->L_frameTCX_past; - L_frameTCX[1] = sts[1]->L_frameTCX_past; - mvr2r( sts[0]->hTonalMDCTConc->lastBlockData.spectralData_float, tmp_ms_sig[0], L_frameTCX[0] ); - mvr2r( sts[1]->hTonalMDCTConc->lastBlockData.spectralData_float, tmp_ms_sig[1], L_frameTCX[0] ); - stereo_decoder_tcx( hCPE->hStereoMdct, ms_mask, x_0[1], &sts[0]->hTonalMDCTConc->lastBlockData.spectralData_float, &sts[1]->hTonalMDCTConc->lastBlockData.spectralData_float, &hCPE->hStereoMdct->mdct_stereo_mode[0], sts[0]->core, sts[1]->core, sts[0]->igf, L_frameTCX[0], L_frameTCX[1], 0, sts[0]->last_core, sts[1]->last_core, 1 ); - } - - if ( bfi ) - { - if ( sts[0]->core == sts[1]->core ) - { - noise_gen_mode_bfi = EQUAL_CORES; - } - else if ( sts[0]->core == TCX_20 && sts[1]->core == TCX_10 ) - { - noise_gen_mode_bfi = TCX10_IN_0_TCX20_IN_1; - } - else if ( sts[0]->core == TCX_10 && sts[1]->core == TCX_20 ) - { - noise_gen_mode_bfi = TCX20_IN_0_TCX10_IN_1; - } - } - - /* parameter decoding */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - st->total_brate = st->bits_frame_channel; - continue; - } - prm[ch] = param[ch]; /* to avoid compilation warnings */ - - /*Adjust bit per frame*/ - if ( !bfi ) - { - st->bits_frame_core = st->bits_frame_channel; - - sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel + sts[ch]->core * NF_GAIN_BITS ) * FRAMES_PER_SEC; - } - - /* Framing parameters */ - L_frame[ch] = st->L_frame; - - /*--------------------------------------------------------------------------------* - * BITSTREAM DECODING - *--------------------------------------------------------------------------------*/ - - total_nbbits[ch] = st->bits_frame_channel; - - if ( !bfi ) - { - st->second_last_core = st->last_core; - if ( hCPE->cpe_id == 0 && ch == 0 ) - { - /* add mct and side bits to first handle bitrate to avoid false BER detection */ - st->total_brate += ( st->next_bit_pos * FRAMES_PER_SEC ); - - dec_prm_tcx_spec( st, param[ch], &total_nbbits[ch], &bitsRead[ch], p_param[ch], nTnsBitsTCX10[ch] ); - - /*revert to actual total bitrate assigned to ch0 */ - sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel + sts[ch]->core * NF_GAIN_BITS ) * FRAMES_PER_SEC; - } - else - { - dec_prm_tcx_spec( st, param[ch], &total_nbbits[ch], &bitsRead[ch], p_param[ch], nTnsBitsTCX10[ch] ); - } - - assert( st->BER_detect != 1 ); - } - else - { - if ( st->nbLostCmpt > 1 ) - { - st->flagGuidedAcelp = 0; - } - - /* PLC: [Common: mode decision] - * PLC: Decide which Concealment to use. Update pitch lags if needed */ - st->core = GetPLCModeDecision( st ); - } - - if ( ( !st->bfi || st->hTcxCfg->psychParamsCurrent == NULL ) && st->core > ACELP_CORE ) - { - int16_t last_frame_was_concealed_cng; - last_frame_was_concealed_cng = ( st->last_core == ACELP_CORE ) && ( st->last_core != st->last_core_from_bs ); - SetCurrentPsychParams( st->core, last_frame_was_concealed_cng, st->hTcxCfg ); - } - - /* PLC: [Common: Memory update] - * PLC: Update the number of lost frames */ - if ( !bfi ) - { - if ( st->prev_bfi == 1 ) - { - st->prev_nbLostCmpt = st->nbLostCmpt; - } - else - { - st->prev_nbLostCmpt = 0; - } - - st->nbLostCmpt = 0; - } - } - - if ( bfi && !MCT_flag && ( hCPE->hStereoMdct->mdct_stereo_mode[0] > SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[1] > SMDCT_DUAL_MONO ) ) - { - /* avoid using TD-PLC in only one channel when stereo mode isn't dual mono */ - if ( sts[0]->core != sts[1]->core && ( sts[0]->core == ACELP_CORE || sts[1]->core == ACELP_CORE ) ) - { - if ( sts[0]->core == ACELP_CORE ) - { - sts[0]->core = sts[0]->last_core; - } - else if ( sts[1]->core == ACELP_CORE ) - { - sts[1]->core = sts[1]->last_core; - } - } - - mvr2r( tmp_ms_sig[0], sts[0]->hTonalMDCTConc->lastBlockData.spectralData_float, L_frameTCX[0] ); - mvr2r( tmp_ms_sig[1], sts[1]->hTonalMDCTConc->lastBlockData.spectralData_float, L_frameTCX[0] ); - } - - /*--------------------------------------------------------------------------------* - * LPC PARAMETERS - *--------------------------------------------------------------------------------*/ - - if ( bfi == 0 ) - { - if ( !MCT_flag && sts[0]->sr_core == 25600 && ( ( hCPE->element_brate == IVAS_48k || hCPE->element_brate == IVAS_64k ) ) ) + test(); + test(); + test(); + IF( !MCT_flag && EQ_32( sts[0]->sr_core, 25600 ) && ( EQ_32( hCPE->element_brate, IVAS_48k ) || EQ_32( hCPE->element_brate, IVAS_64k ) ) ) { - dequantize_sns( param_lpc, sns, sts ); + dequantize_sns_fx( param_lpc, sns, sts ); } - else + ELSE { - if ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE && sts[0]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + test(); + test(); + test(); + IF( EQ_16( sts[0]->core, TCX_20_CORE ) && EQ_16( sts[1]->core, TCX_20_CORE ) && NE_32( sts[0]->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) && NE_32( sts[1]->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) { - sns_avq_dec_stereo( param_lpc[0], param_lpc[1], sts[0]->L_frame, &sns[0][0][0], &sns[1][0][0] ); + sns_avq_dec_stereo_fx( param_lpc[0], param_lpc[1], sts[0]->L_frame, &sns[0][0][0], &q_l, &sns[1][0][0], &q_r ); } - else + ELSE { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { st = sts[ch]; - if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) + IF( NE_32( st->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) { - sns_avq_dec( param_lpc[ch], sns[ch], st->L_frame, st->numlpc ); + sns_avq_dec_fx( param_lpc[ch], sns[ch], &q_snsq, st->L_frame, st->numlpc ); } } } } } - /*--------------------------------------------------------------* * Rate switching *---------------------------------------------------------------*/ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { st = sts[ch]; - if ( st->rate_switching_reset ) + IF( st->rate_switching_reset ) { - lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); + E_LPC_f_lsp_a_conversion( st->lsp_old_fx, st->old_Aq_12_8_fx, M ); } } @@ -1712,72 +967,120 @@ void ivas_mdct_core_invQ( * TCX20/10/5 *--------------------------------------------------------------------------------*/ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) + IF( EQ_32( st->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) { - set_f( x[ch][0], 0.f, st->hTcxCfg->tcx_coded_lines ); + set32_fx( x[ch][0], 0, st->hTcxCfg->tcx_coded_lines ); + x_e[ch][0] = 31; + move16(); /* usually set in decoder_tcx_invQ(), needed for concealment */ - st->hTcxDec->damping_float = 0.f; - st->hTcxDec->gainHelper_float = 1.f; - st->hTcxDec->stepCompensate_float = 0.f; + st->hTcxDec->damping = 0; + move16(); + st->hTcxDec->gainHelper = 16384; + move16(); + st->hTcxDec->gainHelper_e = 1; + move16(); + st->hTcxDec->stepCompensate = 0; + move16(); + st->hTcxDec->stepCompensate_e = 15; + move16(); - continue; + CONTINUE; } - if ( !bfi || ( bfi && st->core != ACELP_CORE ) ) + test(); + test(); + IF( !bfi || ( bfi && ( st->core != ACELP_CORE ) ) ) { - nSubframes[ch] = ( st->core == TCX_10_CORE ) ? NB_DIV : 1; + IF( EQ_16( st->core, TCX_10_CORE ) ) + { + nSubframes[ch] = NB_DIV; + } + ELSE + { + nSubframes[ch] = 1; + } + move16(); - for ( k = 0; k < nSubframes[ch]; k++ ) + FOR( k = 0; k < nSubframes[ch]; k++ ) { /* Stability Factor */ - if ( !bfi ) + IF( !bfi ) { - mvr2r( sns[ch][k], &Aq[ch][k * M], M ); + Copy_Scale_sig_32_16( sns[ch][k], &Aq[ch][k * M], M, -4 ); // sns in Q16 Word32. Aq in Q12 Word16 } - else + ELSE { - st->stab_fac = 1.0f; + st->stab_fac_fx = MAX16B; + move16(); } /* Set pointer to parameters */ - prm[ch] = param[ch] + ( k * DEC_NPRM_DIV ); - L_frameTCX_global[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; - L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; + prm[ch] = param[ch] + L_mult0( k, DEC_NPRM_DIV ); + L_frameTCX_global[ch] = idiv1616( st->hTcxDec->L_frameTCX, nSubframes[ch] ); + move16(); + L_spec[ch] = idiv1616( st->hTcxCfg->tcx_coded_lines, nSubframes[ch] ); + move16(); - init_tcx_info( st, st->L_frame / nSubframes[ch], st->hTcxDec->L_frameTCX / nSubframes[ch], k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); + init_tcx_info_fx( st, idiv1616( st->L_frame, nSubframes[ch] ), idiv1616( st->hTcxDec->L_frameTCX, nSubframes[ch] ), k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); tmp_concealment_method = 0; + move16(); nf_seed = prm[ch][1 + NOISE_FILL_RANGES + LTPSIZE]; - if ( !bfi && st->hTcxCfg->fIsTNSAllowed && ( ch > 0 ) && ( nf_seed < 0 ) ) + move16(); + test(); + test(); + test(); + IF( !bfi && st->hTcxCfg->fIsTNSAllowed && ( ch > 0 ) && ( nf_seed < 0 ) ) { - mvs2s( param[0] + k * DEC_NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, prm[ch] + 1 + NOISE_FILL_RANGES + LTPSIZE, nf_seed * -1 ); + Copy( param[0] + k * DEC_NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, prm[ch] + 1 + NOISE_FILL_RANGES + LTPSIZE, negate( nf_seed ) ); } nf_seed = 0; + move16(); - decoder_tcx_invQ( st, prm[ch], Aq[ch], Aind[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, xn_buf, &fUseTns[ch][k], &tnsData[ch][k], &gain_tcx, &prm_sqQ, &nf_seed, bfi, k ); + decoder_tcx_invQ_fx( st, prm[ch], Aq[ch], Aind[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], &x_e[ch][k], NULL, NULL, xn_buf, &fUseTns[ch][k], &tnsData[ch][k], &gain_tcx, &gain_tcx_e, &prm_sqQ, &nf_seed, bfi, k ); + + shift = Find_Max_Norm32( x[ch][k], L_frameTCX[ch] ); + move16(); + Scale_sig32( x[ch][k], L_frameTCX[ch], shift ); + x_e[ch][k] = sub( x_e[ch][k], shift ); + move16(); - mvr2r( x[ch][k], x_0[ch][k], L_frameTCX[ch] ); + Copy32( x[ch][k], x_0[ch][k], L_frameTCX[ch] ); + x_0_e[ch][k] = x_e[ch][k]; + move16(); - if ( bfi && !MCT_flag ) + // PLC to be done + test(); + IF( bfi && !MCT_flag ) { - TonalMdctConceal_create_concealment_noise_ivas( concealment_noise[ch], hCPE, L_frameTCX[ch], L_frame[ch], ch, k, st->core, st->hTcxDec->cummulative_damping_tcx_float, noise_gen_mode_bfi ); + TonalMdctConceal_create_concealment_noise_ivas_fx( concealment_noise_fx[ch], &concealment_noise_e[ch], hCPE, L_frameTCX[ch], L_frame[ch], ch, k, st->core, st->hTcxDec->cummulative_damping_tcx, noise_gen_mode_bfi ); } - decoder_tcx_noisefilling( st, concealment_noise[ch], Aq[ch], L_frameTCX_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], NULL, &tmp_concealment_method, gain_tcx, prm_sqQ, nf_seed, bfi, MCT_flag, k ); + decoder_tcx_noisefilling_fx( st, concealment_noise_fx[ch], concealment_noise_e[ch], Aq[ch], L_frameTCX_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], x[ch][k], &x_e[ch][k], NULL, NULL, &tmp_concealment_method, gain_tcx, gain_tcx_e, prm_sqQ, nf_seed, bfi, MCT_flag, k ); + + shift = Find_Max_Norm32( x[ch][k], L_frameTCX[ch] ); + move16(); + Scale_sig32( x[ch][k], L_frameTCX[ch], shift ); + x_e[ch][k] = sub( x_e[ch][k], shift ); + move16(); - decoder_tcx_noiseshaping_igf( st, L_spec[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x[ch][k], NULL, &tmp_concealment_method, bfi ); + decoder_tcx_noiseshaping_igf_fx( st, L_spec[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], x[ch][k], &x_e[ch][k], &x_len[ch][k], NULL, NULL, &tmp_concealment_method, bfi ); } } } + FOR( k = 0; k < CPE_CHANNELS; ++k ) + { + free( spectralData_tmp[k] ); + } + pop_wmops(); return; } -#endif /*-----------------------------------------------------------------* @@ -1786,193 +1089,6 @@ void ivas_mdct_core_invQ( * reconstruct time signal *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mdct_core_reconstruct( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *x[][NB_DIV], /* i/o: synthesis @internal_FS */ - float signal_outFB[CPE_CHANNELS][L_FRAME_PLUS], /* o : synthesis @output_FS */ - int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : flage TNS enabled */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0)*/ -) -{ - int16_t ch, k, bfi; - Decoder_State **sts, *st; - /* Framing */ - int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; - int16_t L_frame_global[CPE_CHANNELS], L_frame_globalTCX[CPE_CHANNELS]; - /* Synth */ - float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synth; - float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synthFB; - /* TCX */ - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - int16_t tcx_offset[CPE_CHANNELS]; - int16_t tcx_offsetFB[CPE_CHANNELS]; - int16_t left_rect[CPE_CHANNELS]; - int16_t L_spec[CPE_CHANNELS]; - - int16_t pitch[CPE_CHANNELS][NB_SUBFR16k]; - float pit_gain[CPE_CHANNELS][NB_SUBFR16k]; - int16_t skip_decoding; - - set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); - - /* Initializations */ - sts = hCPE->hCoreCoder; - bfi = sts[0]->bfi; - - /* TNS, ITF, IMDCT and updates */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - skip_decoding = 0; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - skip_decoding = 1; - } - - nSubframes[ch] = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - synth = synth_buf + st->hTcxDec->old_synth_len; - synthFB = synth_bufFB + st->hTcxDec->old_synth_lenFB; - mvr2r( st->hTcxDec->old_synth_float, synth_buf, st->hTcxDec->old_synth_len ); - mvr2r( st->hTcxDec->old_synthFB, synth_bufFB, st->hTcxDec->old_synth_lenFB ); - set_zero( synth, L_FRAME_PLUS + M ); - set_zero( synthFB, L_FRAME_PLUS + M ); - - if ( st->core != ACELP_CORE ) - { - for ( k = 0; k < nSubframes[ch]; k++ ) - { - L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; - L_frame_global[ch] = st->L_frame / nSubframes[ch]; - L_frame_globalTCX[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; - - init_tcx_info( st, L_frame_global[ch], L_frame_globalTCX[ch], k, bfi, &tcx_offset[ch], - &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); - - if ( !skip_decoding ) - { - decoder_tcx_imdct( st, L_frame_global[ch], L_frame_globalTCX[ch], L_spec[ch], tcx_offset[ch], tcx_offsetFB[ch], L_frame[ch], L_frameTCX[ch], left_rect[ch], &x[ch][k][0], xn_buf, - ( ( hCPE->nchan_out == 1 && st->hTcxDec->kernel_type[k] == MDST_IV ) || st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ? MDCT_IV : st->hTcxDec->kernel_type[k], - fUseTns[ch][k], &synth[k * L_frame[ch]], &synthFB[k * L_frameTCX[ch]], bfi, k, 0 ); - } - else - { - set_f( &synth[k * L_frame[ch]], 0.f, L_frame[ch] ); - set_f( &synthFB[k * L_frame[ch]], 0.f, L_frameTCX[ch] ); - /* Note: these buffers are not subframe-based, hence no indexing with k */ - set_f( &st->hHQ_core->old_outLB[0], 0.f, L_frame[ch] ); - set_f( &st->hHQ_core->old_out[0], 0.f, L_frameTCX[ch] ); - set_f( &st->hTcxDec->syn_Overl[0], 0.f, L_frame[ch] / 2 ); - set_f( &st->hTcxDec->syn_OverlFB[0], 0.f, L_frameTCX[ch] / 2 ); - set_f( &st->hTcxDec->syn_Overl_TDAC[0], 0.f, L_frame[ch] / 2 ); - set_f( &st->hTcxDec->syn_Overl_TDACFB[0], 0.f, L_frameTCX[ch] / 2 ); - } - } - - if ( !bfi && st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_SaveTimeSignal_ivas( st->hTonalMDCTConc, synthFB, L_frameTCX[ch] ); - } - - decoder_tcx_post( st, synth, synthFB, NULL, bfi, MCT_flag ); - } - else /*ACELP core for ACELP-PLC */ - { - assert( st->bfi == 1 ); - /* PLC: [TCX: TD PLC] */ - if ( MCT_flag ) - { - con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); - } - else - { - con_tcx( st, &synthFB[0], hCPE->hStereoMdct->lastCoh, &sts[0]->seed_acelp, ( sts[1]->core != ACELP_CORE ) ? 1 : 0, &st->hFdCngDec->hFdCngCom->A_cng_flt[0] ); - } - - lerp_flt( synthFB, synth, st->L_frame, st->hTcxDec->L_frameTCX ); - st->con_tcx = 1; - set_f( &st->mem_pitch_gain_float[2], st->lp_gainp, st->nb_subfr ); - - /* PLC: [TCX: Tonal Concealment] */ - /* Signal that this frame is not TCX */ - if ( st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, 0, 0, 0, 0 ); - } - } - - /*--------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------*/ - - st = sts[ch]; - - if ( bfi && st->last_core != ACELP_CORE && st->core == ACELP_CORE ) - { - /* Update FEC_scale_syn parameters */ - if ( st->hTcxLtpDec->tcxltp_gain_float == 0 ) - { - fer_energy( st->L_frame, UNVOICED, synth, (float) ( st->L_frame / 2 ), &st->enr_old, st->L_frame ); - } - else - { - fer_energy( st->L_frame, st->clas_dec, synth, st->old_fpitch_float, &st->enr_old, st->L_frame ); - } - } - - /* Update */ - mvr2r( synth_buf + st->L_frame, st->hTcxDec->old_synth_float, st->hTcxDec->old_synth_len ); - mvr2r( st->hTcxDec->old_synthFB + st->hTcxDec->L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), st->hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); - mvr2r( synth_bufFB + st->hTcxDec->L_frameTCX, st->hTcxDec->old_synthFB, st->hTcxDec->old_synth_lenFB ); - if ( st->hHQ_core != NULL ) - { - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), st->hTcxDec->old_synthFB + st->hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - } - - mvr2r( st->lsp_q_cng_float, st->old_lsp_q_cng_float, M ); - mvr2r( st->lsf_q_cng_float, st->old_lsf_q_cng_float, M ); - - st->last_is_cng = 0; - - /* Postfiltering */ - post_decoder_flt( st, synth_buf, pit_gain[ch], pitch[ch], x[ch][0], st->p_bpf_noise_buf_float ); - - if ( signal_outFB[ch] ) - { - mvr2r( synthFB, signal_outFB[ch], st->hTcxDec->L_frameTCX ); - } - - - /* updates */ - st->last_voice_factor = 0.0f; - st->last_coder_type = st->coder_type; - } - - /* calculate coherence of signal needed when next frame is lost */ - if ( !bfi && !MCT_flag && hCPE->element_mode == IVAS_CPE_MDCT ) - { - int16_t i; - float nrgL, nrgR, xcorr; - - nrgL = nrgR = xcorr = EPSILON; - - for ( i = 0; i < sts[0]->hTcxDec->L_frameTCX; i++ ) - { - nrgL += signal_outFB[0][i] * signal_outFB[0][i]; - nrgR += signal_outFB[1][i] * signal_outFB[1][i]; - xcorr += signal_outFB[0][i] * signal_outFB[1][i]; - } - - hCPE->hStereoMdct->lastCoh = fabsf( xcorr ) * inv_sqrt( nrgL * nrgR ); - hCPE->hStereoMdct->lastCoh = min( hCPE->hStereoMdct->lastCoh, 1.f ); - } - - return; -} -#else void ivas_mdct_core_reconstruct_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *x_fx[][NB_DIV], @@ -2061,13 +1177,13 @@ void ivas_mdct_core_reconstruct_fx( set16_fx( synthFB_fx, 0, L_FRAME_PLUS + M ); IF( st->core != ACELP_CORE ) { - Scale_sig( st->hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2, sub( q_win, st->hTcxDec->Q_syn_Overl_TDACFB ) ); // st->hTcxDec->Q_syn_Overl_TDACFB -> q_win - Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( q_win, st->hTcxDec->Q_syn_Overl_TDAC ) ); // st->hTcxDec->Q_syn_Overl_TDAC -> q_win - Scale_sig( st->hTcxDec->old_syn_Overl, L_FRAME32k / 2, sub( q_win, sub( -1, st->Q_syn ) ) ); // Q(-1 - st->Q_syn) -> q_win - Scale_sig( st->hTcxDec->syn_Overl, L_FRAME32k / 2, sub( q_win, st->Q_syn ) ); // Q(st->Q_syn) -> q_win - Scale_sig( st->hTcxDec->syn_OverlFB, L_FRAME_MAX / 2, sub( q_win, st->Q_syn ) ); // Q(st->Q_syn) -> q_win - Scale_sig( st->hHQ_core->old_out_LB_fx, L_FRAME32k, sub( q_win, st->hHQ_core->Q_old_wtda_LB ) ); // Q(st->hHQ_core->Q_old_wtda_LB) -> q_win - Scale_sig( st->hHQ_core->old_out_fx, L_FRAME48k, sub( q_win, st->hHQ_core->Q_old_wtda ) ); // Q(st->hHQ_core->Q_old_wtda) -> q_win + Scale_sig( st->hTcxDec->syn_Overl_TDACFB, L_FRAME_MAX / 2, sub( q_win, st->hTcxDec->Q_syn_Overl_TDACFB ) ); // st->hTcxDec->Q_syn_Overl_TDACFB -> q_win + Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( q_win, st->hTcxDec->Q_syn_Overl_TDAC ) ); // st->hTcxDec->Q_syn_Overl_TDAC -> q_win + Scale_sig( st->hTcxDec->old_syn_Overl, L_FRAME32k / 2, sub( q_win, sub( -1, st->Q_syn ) ) ); // Q(-1 - st->Q_syn) -> q_win + Scale_sig( st->hTcxDec->syn_Overl, L_FRAME32k / 2, sub( q_win, st->Q_syn ) ); // Q(st->Q_syn) -> q_win + Scale_sig( st->hTcxDec->syn_OverlFB, L_FRAME_MAX / 2, sub( q_win, st->Q_syn ) ); // Q(st->Q_syn) -> q_win + Scale_sig( st->hHQ_core->old_out_LB_fx, L_FRAME32k, sub( q_win, st->hHQ_core->Q_old_wtda_LB ) ); // Q(st->hHQ_core->Q_old_wtda_LB) -> q_win + Scale_sig( st->hHQ_core->old_out_fx, L_FRAME48k, sub( q_win, st->hHQ_core->Q_old_wtda ) ); // Q(st->hHQ_core->Q_old_wtda) -> q_win #ifdef MSAN_FIX Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) ); // q_syn -> q_win Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_win, q_syn ) ); // q_syn -> q_win @@ -2075,7 +1191,7 @@ void ivas_mdct_core_reconstruct_fx( Scale_sig( synth_buf_fx, 3136, sub( q_win, q_syn ) ); Scale_sig( synth_bufFB_fx, 3136, sub( q_win, q_syn ) ); #endif - Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) ); // st->Q_syn -> q_win + Scale_sig( st->syn, M + 1, sub( q_win, st->Q_syn ) ); // st->Q_syn -> q_win FOR( k = 0; k < nSubframes[ch]; k++ ) { init_tcx_info_fx( st, L_frame_global[ch], L_frame_globalTCX[ch], k, bfi, &tcx_offset[ch], @@ -2136,7 +1252,7 @@ void ivas_mdct_core_reconstruct_fx( Scale_sig( st->hTcxDec->syn_Overl_TDAC, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), q_win ) ); // q_win -> Q(-1 - st->Q_syn) st->hTcxDec->Q_syn_Overl_TDAC = sub( -1, st->Q_syn ); move16(); - Scale_sig( st->hTcxDec->old_syn_Overl, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), q_win ) ); // q_win -> Q(-1 - st->Q_syn) + Scale_sig( st->hTcxDec->old_syn_Overl, L_FRAME32k / 2, sub( sub( -1, st->Q_syn ), q_win ) ); // q_win -> Q(-1 - st->Q_syn) #ifdef MSAN_FIX Scale_sig( synth_buf_fx, add( add( st->hTcxDec->old_synth_len, L_FRAME_PLUS ), M ), sub( q_syn, q_win ) ); // q_win -> q_syn Scale_sig( synth_bufFB_fx, add( add( st->hTcxDec->old_synth_lenFB, L_FRAME_PLUS ), M ), sub( q_syn, q_win ) ); // q_win -> q_syn @@ -2344,7 +1460,6 @@ void ivas_mdct_core_reconstruct_fx( return; } -#endif /*-----------------------------------------------------------------* @@ -2353,125 +1468,6 @@ void ivas_mdct_core_reconstruct_fx( * reconstruct time signal *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mdct_core_tns_ns( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - int16_t fUseTns[CPE_CHANNELS][NB_DIV], /* i : two entries for each channel in TCX10 */ - STnsData tnsData[CPE_CHANNELS][NB_DIV], /* o : TNS parameter */ - float *x[CPE_CHANNELS][NB_DIV], /* o : synthesis @internal_FS */ - float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )], /* o : LP coefficients */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t ch, k, bfi; - Decoder_State **sts, *st; - /* Framing */ - int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; - int16_t L_frame_global[CPE_CHANNELS], L_frameTCX_glob[CPE_CHANNELS]; - - /* TCX */ - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - int16_t tcx_offset[CPE_CHANNELS]; - int16_t tcx_offsetFB[CPE_CHANNELS]; - int16_t left_rect[CPE_CHANNELS]; - int16_t L_spec[CPE_CHANNELS]; - float sns_int_scf[FDNS_NPTS]; - - /* Initializations */ - sts = hCPE->hCoreCoder; - bfi = sts[0]->bfi; - - set_f( xn_buf, 0, L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX ); - - - /* TNS, ITF, IMDCT and updates */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - nSubframes[ch] = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - L_frame_global[ch] = st->L_frame / nSubframes[ch]; - L_frameTCX_glob[ch] = st->hTcxDec->L_frameTCX / nSubframes[ch]; - L_spec[ch] = st->hTcxCfg->tcx_coded_lines / nSubframes[ch]; - - if ( ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) || ( st->bfi && st->core == ACELP_CORE ) ) /* indicates LFE with no content, or odd number of channels */ - { - if ( st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, 0, bfi, 0 ); - } - - /* nothing to do for missing LFE */ - continue; - } - - for ( k = 0; k < nSubframes[ch]; k++ ) - { - init_tcx_info( st, L_frame_global[ch], L_frameTCX_glob[ch], k, bfi, &tcx_offset[ch], - &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); - - if ( !bfi ) - { - sns_interpolate_scalefactors( &sns_int_scf[0], &Aq[ch][k * M], DEC ); - - if ( MCT_flag && st->hTonalMDCTConc != NULL && ( ( k + 1 ) == nSubframes[ch] ) ) - { - TonalMDCTConceal_SaveFreqSignal_ivas( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0], get_igf_startline_flt( st, L_frame[ch], L_frameTCX[ch] ) ); - } - } - else - { - if ( st->hTonalMDCTConc != NULL ) - { - if ( !MCT_flag && st->hTcxDec->cummulative_damping_tcx_float < 0.99f ) - // if ( !MCT_flag && st->hTcxDec->cummulative_damping_tcx_float != 1.f ) - - { - float *scf_last, *scf_bg; - float fade_in, fade_out; - - scf_last = &st->hTonalMDCTConc->lastBlockData.scaleFactors_float[0]; - scf_bg = &st->hTonalMDCTConc->scaleFactorsBackground_flt[0]; - - st->hTonalMDCTConc->scf_fadeout_flt *= 0.95f; - - fade_out = st->hTonalMDCTConc->scf_fadeout_flt; - fade_in = 1 - fade_out; - - for ( int16_t i = 0; i < st->hTonalMDCTConc->nScaleFactors; i++ ) - { - sns_int_scf[i] = fade_out * scf_last[i] + fade_in * scf_bg[i]; - } - } - else - { - st->hTonalMDCTConc->scf_fadeout_flt = 1.0f; - mvr2r( st->hTonalMDCTConc->lastBlockData.scaleFactors_float, &sns_int_scf[0], st->hTonalMDCTConc->nScaleFactors ); - } - } - } - - decoder_tcx_tns( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x[ch][k][0], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 1 ); - - sns_shape_spectrum( x[ch][k], st->hTcxCfg->psychParamsCurrent, &sns_int_scf[0], st->hTcxCfg->psychParamsCurrent->nBins ); - v_multc( x[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, sns_int_scf[FDNS_NPTS - 1], x[ch][k] + st->hTcxCfg->psychParamsCurrent->nBins, L_spec[ch] - st->hTcxCfg->psychParamsCurrent->nBins ); - - decoder_tcx_tns( st, L_frame_global[ch], L_spec[ch], L_frame[ch], L_frameTCX[ch], &x[ch][k][0], fUseTns[ch][k], &tnsData[ch][k], bfi, k, 0 ); - } - - if ( bfi && st->tonal_mdct_plc_active ) - { - TonalMDCTConceal_Apply_ivas( st->hTonalMDCTConc, x[ch][0], st->hTcxCfg->psychParamsCurrent ); - } - - if ( ( bfi || MCT_flag ) && st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, L_frameTCX[ch], ( st->hTcxDec->tcxltp_last_gain_unmodified_float > 0 ) ? st->old_fpitch_float : 0, bfi, bfi && st->tonal_mdct_plc_active ); - } - } - - return; -} -#else /* Has a missing dependency: TonalMDCTConceal_Apply. Currently not used anywhere and untested.*/ void ivas_mdct_core_tns_ns_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -2739,4 +1735,3 @@ void ivas_mdct_core_tns_ns_fx( return; } -#endif diff --git a/lib_dec/ivas_mono_dmx_renderer.c b/lib_dec/ivas_mono_dmx_renderer.c index b6c8d0273..6ef615601 100644 --- a/lib_dec/ivas_mono_dmx_renderer.c +++ b/lib_dec/ivas_mono_dmx_renderer.c @@ -47,13 +47,7 @@ /*------------------------------------------------------------------------- * Local constants *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define DOWNMIX_ALPHA 0.95f /* Smoothing coefficient */ -#endif // !IVAS_FLOAT_FIXED -#define DOWNMIX_ALPHA_FX 31130 /* Smoothing coefficient */ -#ifndef IVAS_FLOAT_FIXED -#define DOWNMIX_MAX_GAIN 4.0f /* Maximum allowed gain */ -#endif +#define DOWNMIX_ALPHA_FX 31130 /* Smoothing coefficient */ #define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 /*------------------------------------------------------------------------- @@ -62,7 +56,6 @@ * Open decoder downmix handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_mono_dmx_renderer_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -87,25 +80,6 @@ ivas_error ivas_mono_dmx_renderer_open( return IVAS_ERR_OK; } -#else -ivas_error ivas_mono_dmx_renderer_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - MONO_DOWNMIX_RENDERER_HANDLE hDownmix; - - if ( ( hDownmix = (MONO_DOWNMIX_RENDERER_HANDLE) malloc( sizeof( MONO_DOWNMIX_RENDERER_STRUCT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for downmixing\n" ) ); - } - - hDownmix->inputEnergy = 0; - hDownmix->protoEnergy = 0; - st_ivas->hMonoDmxRenderer = hDownmix; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_mono_dmx_renderer_close() @@ -113,7 +87,6 @@ ivas_error ivas_mono_dmx_renderer_open( * Close decoder downmix handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mono_dmx_renderer_close( MONO_DOWNMIX_RENDERER_HANDLE *hMonoDmxRenderer /* i/ i/o: Mono downmix structure */ ) @@ -129,88 +102,12 @@ void ivas_mono_dmx_renderer_close( return; } -#else -void ivas_mono_dmx_renderer_close( - MONO_DOWNMIX_RENDERER_HANDLE *hMonoDmxRenderer /* i/ i/o: Mono downmix structure */ -) -{ - if ( hMonoDmxRenderer == NULL || *hMonoDmxRenderer == NULL ) - { - return; - } - - free( *hMonoDmxRenderer ); - *hMonoDmxRenderer = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_mono_downmix_render_passive() * * Downmix process *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mono_downmix_render_passive( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[], /* i/o: synthesized core-coder transport channels/mono output */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i, j, numInputChannels; - float proto_signal[L_FRAME48k], eq; - MONO_DOWNMIX_RENDERER_HANDLE hDownmix; - - numInputChannels = st_ivas->nSCE; - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - numInputChannels = st_ivas->nchan_ism; - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - numInputChannels = st_ivas->nchan_transport + 1; - } - else - { - numInputChannels = st_ivas->nchan_transport + st_ivas->nchan_ism; - } - } - - hDownmix = st_ivas->hMonoDmxRenderer; - set_zero( proto_signal, output_frame ); - - /* Compute the Proto Signal */ - for ( i = 0; i < numInputChannels; i++ ) - { - v_add( output_f[i], proto_signal, proto_signal, output_frame ); - } - - // dbgwrite2_txt(proto_signal, output_frame, "../proto_sig.txt"); - - /* compute the input energy, proto energy after smoothing */ - hDownmix->inputEnergy *= DOWNMIX_ALPHA; - hDownmix->protoEnergy *= DOWNMIX_ALPHA; - for ( i = 0; i < output_frame; i++ ) - { - hDownmix->protoEnergy += proto_signal[i] * proto_signal[i]; - - for ( j = 0; j < numInputChannels; j++ ) - { - hDownmix->inputEnergy += ( output_f[j][i] * output_f[j][i] ); - } - } - /* compute the eq factor */ - eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy / ( EPSILON + hDownmix->protoEnergy ) ) ); - /* equalize the downmix */ - v_multc( proto_signal, eq, output_f[0], output_frame ); - - return; -} -#else void ivas_mono_downmix_render_passive_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output_f_fx[], /* i/o: synthesized core-coder transport channels/mono output Qin = 11/ Qout = 8*/ @@ -364,7 +261,6 @@ void ivas_mono_downmix_render_passive_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_mono_stereo_downmix_mcmasa() @@ -372,47 +268,6 @@ void ivas_mono_downmix_render_passive_fx( * Downmix process in McMASA *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mono_stereo_downmix_mcmasa( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output_f[], /* i/o: synthesized core-coder transport channels/mono or stereo output */ - int16_t output_frame /* i : output frame length per channel */ -) -{ - int16_t i; - - float dmx_tmp[L_FRAME48k]; - - set_zero( dmx_tmp, output_frame ); - - /* Dowmix center channel to L and R */ - if ( st_ivas->hDecoderConfig->nchan_out == 2 && st_ivas->hOutSetup.separateChannelEnabled ) - { - v_multc_acc( output_f[st_ivas->hOutSetup.separateChannelIndex], INV_SQRT2, output_f[0], output_frame ); - v_multc_acc( output_f[st_ivas->hOutSetup.separateChannelIndex], INV_SQRT2, output_f[1], output_frame ); - } - /* Mono downmix */ - else if ( st_ivas->hDecoderConfig->nchan_out == 1 ) - { - /* Downmix L and R to dmx_tmp */ - for ( i = 0; i < st_ivas->nchan_transport; i++ ) - { - v_multc_acc( output_f[i], INV_SQRT2, dmx_tmp, output_frame ); - } - /* Add center channel */ - if ( st_ivas->hOutSetup.separateChannelEnabled ) - { - v_add( output_f[st_ivas->hOutSetup.separateChannelIndex], dmx_tmp, dmx_tmp, output_frame ); - } - - /* Move to output */ - mvr2r( dmx_tmp, output_f[0], output_frame ); - } - - return; -} - -#else void ivas_mono_stereo_downmix_mcmasa_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output_f_fx[], /* i/o: synthesized core-coder transport channels/mono or stereo output Q11*/ @@ -453,8 +308,6 @@ void ivas_mono_stereo_downmix_mcmasa_fx( return; } -#endif - /*------------------------------------------------------------------------- * ivas_apply_non_diegetic_panning() @@ -462,25 +315,6 @@ void ivas_mono_stereo_downmix_mcmasa_fx( * Apply non-diegetic panning *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_apply_non_diegetic_panning( - float *output_f[], /* i/o: core-coder transport mono channel/stereo output */ - const float non_diegetic_pan_gain, /* i : non-diegetic panning gain */ - const int16_t output_frame /* i : output frame length per channel */ -) -{ - float pan_left, pan_right; - - pan_left = ( non_diegetic_pan_gain + 1.f ) * 0.5f; - pan_right = 1.f - pan_left; - - v_multc( output_f[0], pan_right, output_f[1], output_frame ); - v_multc( output_f[0], pan_left, output_f[0], output_frame ); - - return; -} - -#else void ivas_apply_non_diegetic_panning_fx( Word32 *output_f_fx[], /* i/o: core-coder transport mono channel/stereo output */ const Word16 non_diegetic_pan_gain_fx, /* i : non-diegetic panning gain Q15*/ @@ -497,4 +331,3 @@ void ivas_apply_non_diegetic_panning_fx( return; } -#endif diff --git a/lib_dec/ivas_objectRenderer_internal.c b/lib_dec/ivas_objectRenderer_internal.c index e304edf6c..256ce8f96 100644 --- a/lib_dec/ivas_objectRenderer_internal.c +++ b/lib_dec/ivas_objectRenderer_internal.c @@ -38,11 +38,9 @@ #include #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "debug.h" -#endif /*---------------------------------------------------------------------* @@ -50,7 +48,6 @@ * * Open and initialize TD Object binaural renderer *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_open_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word16 *SrcInd, /*Temporarily used to store the updated value of SrcInd*/ @@ -66,23 +63,6 @@ ivas_error ivas_td_binaural_open_fx( } return ivas_td_binaural_open_unwrap_fx( &st_ivas->hHrtfTD, st_ivas->hDecoderConfig->output_Fs, *num_src, st_ivas->ivas_format, st_ivas->transport_config, st_ivas->hRenderConfig->directivity_fx, st_ivas->hTransSetup, &st_ivas->hBinRendererTd, &st_ivas->binaural_latency_ns, SrcInd ); } -#else -ivas_error ivas_td_binaural_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t num_src; - - num_src = st_ivas->nchan_transport; - if ( ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) || ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) ) - { - num_src = st_ivas->nchan_ism; - } - - return ivas_td_binaural_open_unwrap( &st_ivas->hHrtfTD, st_ivas->hDecoderConfig->output_Fs, num_src, st_ivas->ivas_format, - st_ivas->transport_config, st_ivas->hRenderConfig->directivity, st_ivas->hTransSetup, &st_ivas->hBinRendererTd, &st_ivas->binaural_latency_ns ); -} -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* @@ -92,7 +72,6 @@ ivas_error ivas_td_binaural_open( * and renders the current frame. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output[], /* i/o: SCE channels / Binaural synthesis Q11*/ @@ -129,35 +108,6 @@ ivas_error ivas_td_binaural_renderer_fx( } return ivas_td_binaural_renderer_unwrap_fx( st_ivas->hReverb, st_ivas->transport_config, st_ivas->hBinRendererTd, nchan_transport, LFE_CHANNEL, st_ivas->ivas_format, st_ivas->hIsmMetaData, st_ivas->hCombinedOrientationData, ism_md_subframe_update, output, output_frame, MAX_PARAM_SPATIAL_SUBFRAMES ); } -#else -ivas_error ivas_td_binaural_renderer( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output[], /* i/o: SCE channels / Binaural synthesis */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t ism_md_subframe_update; - int16_t nchan_transport; - - nchan_transport = ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_SBA_MODE_DISC ) ? st_ivas->nchan_ism : st_ivas->nchan_transport; - - if ( st_ivas->hDecoderConfig->Opt_delay_comp ) - { - ism_md_subframe_update = 1; - } - else - { - ism_md_subframe_update = 2; - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - ism_md_subframe_update = 2; - } - - return ivas_td_binaural_renderer_unwrap( st_ivas->hReverb, st_ivas->transport_config, st_ivas->hBinRendererTd, nchan_transport, LFE_CHANNEL, st_ivas->ivas_format, st_ivas->hIsmMetaData, st_ivas->hCombinedOrientationData, ism_md_subframe_update, output, output_frame, MAX_PARAM_SPATIAL_SUBFRAMES ); -} -#endif /*---------------------------------------------------------------------* @@ -167,7 +117,6 @@ ivas_error ivas_td_binaural_renderer( * and renders the current frame. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output_fx[], /* i/o: SCE channels / Binaural synthesis Q11*/ @@ -393,162 +342,3 @@ ivas_error ivas_td_binaural_renderer_sf_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_td_binaural_renderer_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output[], /* i/o: SCE channels / Binaural synthesis */ - const int16_t n_samples_granularity /* i : granularity of the renderer/buffer */ -) -{ - int16_t first_sf, last_sf, subframe_idx; - float reverb_signal[BINAURAL_CHANNELS][L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - float *p_reverb_signal[BINAURAL_CHANNELS]; - float *output_f_local[BINAURAL_CHANNELS]; - float *tc_local[MAX_TRANSPORT_CHANNELS]; - int16_t ch, slot_size, slots_to_render, output_frame; - ivas_error error; - - int16_t ism_md_subframe_update_jbm; - int16_t c_indx, nS; - int16_t nchan_ism_internal, nchan_ism, ch_offset; - - /* Set the number of ISMs */ - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - nchan_ism_internal = st_ivas->nchan_ism; - nchan_ism = st_ivas->nchan_ism; - ch_offset = 2; - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - nchan_ism_internal = st_ivas->nchan_ism; - nchan_ism = st_ivas->nchan_ism; - ch_offset = 0; - } - else - { - nchan_ism_internal = st_ivas->hTcBuffer->nchan_transport_internal; - nchan_ism = st_ivas->nchan_transport; - ch_offset = 0; - } - - /* Number of subframes to delay metadata to sync with audio */ - if ( st_ivas->hDecoderConfig->Opt_delay_comp ) - { - ism_md_subframe_update_jbm = max( 0, st_ivas->hTcBuffer->nb_subframes - 3 ); - } - else - { - ism_md_subframe_update_jbm = st_ivas->hTcBuffer->nb_subframes - 2; - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - ism_md_subframe_update_jbm = max( 0, st_ivas->hTcBuffer->nb_subframes - 2 ); - } - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_reverb_signal[ch] = reverb_signal[ch]; - } - - for ( ch = 0; ch < nchan_ism_internal; ch++ ) - { - tc_local[ch] = st_ivas->hTcBuffer->tc[ch + ch_offset] + st_ivas->hTcBuffer->n_samples_rendered; - } - - for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) - { - output_f_local[ch] = output[ch]; - } - - slot_size = st_ivas->hTcBuffer->n_samples_granularity; - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( st_ivas->hTcBuffer->num_slots - st_ivas->hTcBuffer->slots_rendered, n_samples_granularity / slot_size ); - first_sf = st_ivas->hTcBuffer->subframes_rendered; - last_sf = first_sf; - st_ivas->hTcBuffer->slots_rendered += slots_to_render; - - while ( slots_to_render > 0 ) - { - slots_to_render -= st_ivas->hTcBuffer->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - output_frame = st_ivas->hTcBuffer->subframe_nbslots[subframe_idx] * st_ivas->hTcBuffer->n_samples_granularity; - - /* Update object position(s) */ - c_indx = 0; - - for ( nS = 0; nS < nchan_ism; nS++ ) - { - if ( !( st_ivas->ivas_format == MC_FORMAT && nS == LFE_CHANNEL ) ) /* Skip LFE for MC */ - { - st_ivas->hBinRendererTd->Sources[c_indx]->InputFrame_p = tc_local[nS]; - st_ivas->hBinRendererTd->Sources[c_indx]->SrcRend_p->InputAvailable = TRUE; - c_indx++; - } - } - if ( subframe_idx == ism_md_subframe_update_jbm ) - { - if ( ( error = TDREND_Update_object_positions( st_ivas->hBinRendererTd, nchan_ism, st_ivas->ivas_format, st_ivas->hIsmMetaData ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Update the listener's location/orientation */ - if ( ( error = TDREND_Update_listener_orientation( st_ivas->hBinRendererTd, - ( st_ivas->hCombinedOrientationData != NULL ) ? st_ivas->hCombinedOrientationData->enableCombinedOrientation[st_ivas->hCombinedOrientationData->subframe_idx] : 0, - ( st_ivas->hCombinedOrientationData != NULL ) ? &st_ivas->hCombinedOrientationData->Quaternions[st_ivas->hCombinedOrientationData->subframe_idx] : NULL, - ( st_ivas->hCombinedOrientationData != NULL ) ? &st_ivas->hCombinedOrientationData->listenerPos[st_ivas->hCombinedOrientationData->subframe_idx] : NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hRenderConfig != NULL && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_reverb_process( st_ivas->hReverb, st_ivas->transport_config, 0, tc_local, p_reverb_signal, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Render subframe */ - /* ism_md_subframe_update_jbm != subframe_idx: trigger update only for ism_md_subframe_update_jbm == subframe_idx, - where then the two TDREND_GetMix()-arguments subframe_idx and ism_md_subframe_update are equal, and we want to enforce the update inside TDREND_GetMix to use subframe_idx == 0 */ - if ( ( error = TDREND_GetMix( st_ivas->hBinRendererTd, output_f_local, output_frame, 0, ism_md_subframe_update_jbm != subframe_idx ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hRenderConfig != NULL && st_ivas->hIntSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - /* add reverb to rendered signals */ - v_add( reverb_signal[0], output_f_local[0], output_f_local[0], output_frame ); - v_add( reverb_signal[1], output_f_local[1], output_f_local[1], output_frame ); - } - - - for ( ch = 0; ch < nchan_ism_internal; ch++ ) - { - tc_local[ch] += output_frame; - } - - for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) - { - output_f_local[ch] += output_frame; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, output_frame ); - } - - st_ivas->hTcBuffer->subframes_rendered = last_sf; - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index ab2a81673..509217616 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -47,9 +47,6 @@ * Local constants *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define OMASA_TDREND_MATCHING_GAIN 0.7943f -#endif // !IVAS_FLOAT_FIXED #define OMASA_TDREND_MATCHING_GAIN_FX 26026 /*-------------------------------------------------------------------* @@ -58,60 +55,6 @@ * Allocate and initialize MASA_ISM rendering handle *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_data_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - MASA_ISM_DATA_HANDLE hMasaIsmData; - int16_t ch, bin; - int16_t sf, obj_idx; - - if ( ( hMasaIsmData = (MASA_ISM_DATA_HANDLE) malloc( sizeof( MASA_ISM_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA ISM data\n" ) ); - } - - for ( bin = 0; bin < CLDFB_NO_CHANNELS_MAX; bin++ ) - { - for ( ch = 0; ch < 2; ch++ ) - { - hMasaIsmData->ismPreprocMatrix[ch][ch][bin] = 1.0f; - hMasaIsmData->ismPreprocMatrix[1 - ch][ch][bin] = 0.0f; - hMasaIsmData->eneMoveIIR[ch][bin] = 0.0f; - hMasaIsmData->enePreserveIIR[ch][bin] = 0.0f; - } - hMasaIsmData->preprocEneTarget[bin] = 0.0f; - hMasaIsmData->preprocEneRealized[bin] = 0.0f; - } - - hMasaIsmData->objectsMoved = 0; - hMasaIsmData->delayBuffer = NULL; - - for ( ch = 0; ch < MAX_NUM_OBJECTS; ch++ ) - { - hMasaIsmData->ism_is_edited[ch] = 0; - hMasaIsmData->q_elevation_old[ch] = 0.0f; - hMasaIsmData->q_azimuth_old[ch] = 0.0f; - } - - for ( obj_idx = 0; obj_idx < MAX_NUM_OBJECTS; obj_idx++ ) - { - set_s( hMasaIsmData->azimuth_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); - set_s( hMasaIsmData->elevation_ism[obj_idx], 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR; sf++ ) - { - set_zero( hMasaIsmData->energy_ratio_ism[obj_idx][sf], CLDFB_NO_CHANNELS_MAX ); - } - } - set_s( hMasaIsmData->azimuth_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); - set_s( hMasaIsmData->elevation_separated_ism, 0, MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR ); - - st_ivas->hMasaIsmData = hMasaIsmData; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_omasa_data_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -174,7 +117,6 @@ ivas_error ivas_omasa_data_open_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -183,34 +125,6 @@ ivas_error ivas_omasa_data_open_fx( * Deallocate MASA_ISM rendering handle *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_data_close( - MASA_ISM_DATA_HANDLE *hMasaIsmData /* i/o: MASA_ISM rendering handle */ -) -{ - int16_t i; - - if ( hMasaIsmData == NULL || *hMasaIsmData == NULL ) - { - return; - } - - if ( ( *hMasaIsmData )->delayBuffer != NULL ) - { - for ( i = 0; i < ( *hMasaIsmData )->delayBuffer_nchan; i++ ) - { - free( ( *hMasaIsmData )->delayBuffer[i] ); - } - free( ( *hMasaIsmData )->delayBuffer ); - ( *hMasaIsmData )->delayBuffer = NULL; - } - - free( *hMasaIsmData ); - *hMasaIsmData = NULL; - - return; -} -#else void ivas_omasa_data_close_fx( MASA_ISM_DATA_HANDLE *hMasaIsmData /* i/o: MASA_ISM rendering handle */ ) @@ -238,7 +152,6 @@ void ivas_omasa_data_close_fx( return; } -#endif /*--------------------------------------------------------------------------* @@ -247,7 +160,6 @@ void ivas_omasa_data_close_fx( * oMASA decoder configuration *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_omasa_dec_config_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ UWord16 *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ @@ -541,258 +453,6 @@ ivas_error ivas_omasa_dec_config_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_omasa_dec_config( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the previous frame (JBM) */ - int16_t *data /* o : output synthesis signal */ -) -{ - int16_t k, sce_id, nSCE_old, nchan_hp20_old, numCldfbAnalyses_old, numCldfbSyntheses_old, n_MD; - int32_t ivas_total_brate, ism_total_brate, cpe_brate; - ISM_MODE ism_mode_old; - IVAS_FORMAT ivas_format_orig; - int16_t nchan_out_buff, nchan_out_buff_old; - ivas_error error; - RENDERER_TYPE old_renderer_type; - - /* initializations */ - ism_total_brate = 0; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - - /* save previous frame parameters */ - ism_mode_old = ivas_omasa_ism_mode_select( st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->nchan_ism ); - st_ivas->ism_mode = ism_mode_old; - - ivas_format_orig = st_ivas->ivas_format; - st_ivas->ivas_format = st_ivas->last_ivas_format; - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - - st_ivas->ivas_format = ivas_format_orig; - - nSCE_old = st_ivas->nSCE; - nchan_hp20_old = getNumChanSynthesis( st_ivas ); - - /* set ism_mode of current frame */ - st_ivas->ism_mode = ivas_omasa_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism ); - - /*-----------------------------------------------------------------* - * Renderer selection - *-----------------------------------------------------------------*/ - - old_renderer_type = st_ivas->renderer_type; - - /* MASA reconfig. */ - cpe_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, ivas_total_brate, st_ivas->nchan_ism ); - if ( st_ivas->ini_active_frame == 0 && ivas_total_brate != FRAME_NO_DATA && ( cpe_brate < MASA_STEREO_MIN_BITRATE ) && st_ivas->nCPE == 1 ) - { - st_ivas->hCPE[0]->nchan_out = 1; - } - else if ( ( error = ivas_masa_dec_reconfigure( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( cpe_brate < MASA_STEREO_MIN_BITRATE ) - { - st_ivas->hCPE[0]->nchan_out = 1; - } - else - { - st_ivas->hCPE[0]->nchan_out = 2; - } - - /* OMASA reconfig. */ - if ( st_ivas->hMasaIsmData == NULL && st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - if ( ( error = ivas_omasa_data_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - ivas_set_omasa_TC( st_ivas->ism_mode, st_ivas->nchan_ism, &st_ivas->nSCE, &st_ivas->nCPE ); - - /* re-configure hp20 memories */ - if ( ( error = ivas_hp20_dec_reconfig( st_ivas, nchan_hp20_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* reconfigure core-coders for ISMs */ - k = 0; - while ( k < SIZE_IVAS_BRATE_TBL && ivas_total_brate != ivas_brate_tbl[k] ) - { - k++; - } - - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - ism_total_brate += sep_object_brate[k - 2][st_ivas->nSCE - 1]; - } - - if ( ( error = ivas_corecoder_dec_reconfig( st_ivas, nSCE_old, 1, 2, 0, st_ivas->nSCE > 0 ? sep_object_brate[k - 2][st_ivas->nSCE - 1] : 0, ivas_total_brate - ism_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ism_mode_old != st_ivas->ism_mode ) - { - /* ISM MD reconfig. */ - n_MD = 0; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - n_MD = 1; - - if ( st_ivas->hIsmMetaData[0] == NULL ) - { - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, 1, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - n_MD = st_ivas->nchan_ism; - - ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); - - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, st_ivas->nchan_ism, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - ivas_ism_metadata_close( st_ivas->hIsmMetaData, n_MD ); - - st_ivas->hCPE[0]->element_brate = ivas_total_brate - ism_total_brate; - - /*-----------------------------------------------------------------* - * Renderer selection - *-----------------------------------------------------------------*/ - - ivas_renderer_select( st_ivas ); - - /*-------------------------------------------------------------------* - * Reallocate rendering handles - *--------------------------------------------------------------------*/ - - if ( old_renderer_type != st_ivas->renderer_type ) - { - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - ivas_mono_dmx_renderer_close( &st_ivas->hMonoDmxRenderer ); - } - } - - /* objects renderer reconfig. */ - if ( st_ivas->hMasaIsmData != NULL ) - { - ivas_omasa_separate_object_renderer_close( st_ivas ); - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - if ( st_ivas->hBinRendererTd == NULL ) - { - /* Allocate TD renderer for the objects in DISC mode */ - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - if ( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* TD renderer handle */ - if ( st_ivas->hBinRendererTd != NULL && st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE ) - { - ivas_td_binaural_close( &st_ivas->hBinRendererTd ); - st_ivas->hHrtfTD = NULL; - } - - /* ISM renderer handle + ISM data handle */ - ivas_omasa_separate_object_renderer_close( st_ivas ); - } - } - - if ( st_ivas->renderer_type == RENDERER_DIRAC ) - { - if ( ( error = ivas_dirac_dec_config( st_ivas, DIRAC_RECONFIGURE ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ - if ( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* ISM renderer handle + ISM data handle */ - ivas_omasa_separate_object_renderer_close( st_ivas ); - } - } - - /*-----------------------------------------------------------------* - * TD Decorrelator - *-----------------------------------------------------------------*/ - - if ( st_ivas->hDiracDecBin != NULL ) - { - if ( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ) != IVAS_ERR_OK ) - - { - return error; - } - } - - /*-----------------------------------------------------------------* - * CLDFB instances - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_cldfb_dec_reconfig( st_ivas, 2, numCldfbAnalyses_old, numCldfbSyntheses_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * floating-point output audio buffers - *-----------------------------------------------------------------*/ - - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 ); - if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - - return IVAS_ERR_OK; -} -#endif /*--------------------------------------------------------------------------* @@ -800,83 +460,6 @@ ivas_error ivas_omasa_dec_config( * * set bit-rate surplus in combined format coding *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_set_surplus_brate_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - int32_t *ism_total_brate /* i/o: ISM total bitrate */ -) -{ - int16_t n, bits_ism, bits_element[MAX_NUM_OBJECTS]; - int32_t ism_total_brate_ref, element_brate[MAX_NUM_OBJECTS]; - - *ism_total_brate = 0; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - *ism_total_brate = ivas_interformat_brate( st_ivas->ism_mode, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ); - - st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - *ism_total_brate; - - /* set 'st->total_brate'; there are no meta-data in ISM_MASA_MODE_PARAM_ONE_OBJ mode */ - st_ivas->hSCE[0]->hCoreCoder[0]->total_brate = *ism_total_brate; - - st_ivas->hSCE[0]->hCoreCoder[0]->low_rate_mode = 0; - if ( st_ivas->hIsmMetaData[0]->ism_imp == ISM_NO_META ) - { - st_ivas->hSCE[0]->hCoreCoder[0]->low_rate_mode = 1; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - int16_t brate_limit_flag, ism_imp[MAX_NUM_OBJECTS]; - - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - ism_imp[n] = st_ivas->hIsmMetaData[n]->ism_imp; - } - - brate_limit_flag = calculate_brate_limit_flag( ism_imp, st_ivas->nchan_ism ); - - ism_total_brate_ref = 0; - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - ism_total_brate_ref += st_ivas->hSCE[n]->element_brate; - } - - bits_ism = (int16_t) ( ism_total_brate_ref / FRAMES_PER_SEC ); - set_s( bits_element, bits_ism / st_ivas->nchan_ism, st_ivas->nchan_ism ); - bits_element[st_ivas->nchan_ism - 1] += bits_ism % st_ivas->nchan_ism; - bitbudget_to_brate( bits_element, element_brate, st_ivas->nchan_ism ); - - *ism_total_brate = 0; - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - st_ivas->hSCE[n]->element_brate = element_brate[n]; - - *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, st_ivas->nchan_ism, st_ivas->hSCE[n]->element_brate, st_ivas->hIsmMetaData[n]->ism_imp, brate_limit_flag ); - - if ( ism_imp[n] > 1 && st_ivas->flag_omasa_brate == 1 && brate_limit_flag >= 0 ) - { - *ism_total_brate -= ADJUST_ISM_BRATE_NEG; - } - - if ( brate_limit_flag == -1 && ism_imp[n] >= 1 && st_ivas->nchan_ism >= 3 && ( ism_total_brate_ref - *ism_total_brate > IVAS_48k ) ) - { - *ism_total_brate += ADJUST_ISM_BRATE_POS; - } - } - st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - *ism_total_brate; - - /* 'st->total_brate' is set in ivas_ism_config */ - } - else - { - st_ivas->hCPE[0]->brate_surplus = 0; - } - - return; -} -#else void ivas_set_surplus_brate_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *ism_total_brate /* i/o: ISM total bitrate */ @@ -982,7 +565,6 @@ void ivas_set_surplus_brate_dec( return; } -#endif /*--------------------------------------------------------------------------* @@ -990,84 +572,6 @@ void ivas_set_surplus_brate_dec( * * decode ISM metadata in OMASA format *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_omasa_ism_metadata_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int32_t ism_total_brate, /* i : ISM total bitrate */ - int16_t *nchan_ism, /* o : number of ISM separated channels */ - int16_t *nchan_transport_ism, /* o : number of ISM TCs */ - const int16_t dirac_bs_md_write_idx, /* i : DirAC bitstream write index */ - int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ -) -{ - int16_t n, block; - int16_t azimuth_ism, elevation_ism, meta_write_index; - ivas_error error; - - /* set ISM parameters */ - *nchan_ism = st_ivas->nchan_ism; - *nchan_transport_ism = st_ivas->nchan_ism; - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - *nchan_ism = 1; - *nchan_transport_ism = 1; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - *nchan_ism = 0; - *nchan_transport_ism = 1; - } - - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - /* decode ISM metadata */ - if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->bfi, - nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hSCE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hDirAC != NULL ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->azimuth + 0.5f ); - elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[n]->elevation + 0.5f ); - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; - st_ivas->hMasaIsmData->azimuth_ism[n][meta_write_index] = azimuth_ism; - st_ivas->hMasaIsmData->elevation_ism[n][meta_write_index] = elevation_ism; - } - } - } - else /* ISM_MASA_MODE_MASA_ONE_OBJ */ - { - azimuth_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->azimuth + 0.5f ); - elevation_ism = (int16_t) ( st_ivas->hIsmMetaData[0]->elevation + 0.5f ); - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - meta_write_index = ( dirac_bs_md_write_idx + block ) % st_ivas->hSpatParamRendCom->dirac_md_buffer_length; - st_ivas->hMasaIsmData->azimuth_separated_ism[meta_write_index] = azimuth_ism; - st_ivas->hMasaIsmData->elevation_separated_ism[meta_write_index] = elevation_ism; - } - } - } - } - - return IVAS_ERR_OK; -} - -/*--------------------------------------------------------------------------* - * ivas_omasa_ism_metadata_dec_fx() - * - * decode ISM metadata in OMASA format - *--------------------------------------------------------------------------*/ -#else ivas_error ivas_omasa_ism_metadata_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word32 ism_total_brate, /* i : ISM total bitrate */ @@ -1170,51 +674,7 @@ ivas_error ivas_omasa_ism_metadata_dec_fx( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * ivas_omasa_dirac_rend_jbm() - * - * Rendering in OMASA format for JBM - *--------------------------------------------------------------------------*/ - -void ivas_omasa_dirac_rend_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of samples requested */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailable, /* o : number of samples still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t subframes_rendered; - int16_t slots_rendered; - int16_t n; - float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - mvr2r( output_f[CPE_CHANNELS], data_separated_objects[0], nSamplesAsked ); - } - else - { - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - mvr2r( output_f[n + CPE_CHANNELS], data_separated_objects[n], nSamplesAsked ); - } - } - - subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered; - slots_rendered = st_ivas->hSpatParamRendCom->slots_rendered; - - ivas_dirac_dec_render( st_ivas, nchan_transport, nSamplesAsked, nSamplesRendered, nSamplesAvailable, output_f ); - - ivas_omasa_separate_object_render_jbm( st_ivas, *nSamplesRendered, data_separated_objects, output_f, subframes_rendered, slots_rendered ); - - return; -} -#else /*--------------------------------------------------------------------------* * ivas_omasa_dirac_rend_jbm_fx() * @@ -1277,68 +737,7 @@ void ivas_omasa_dirac_rend_jbm_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * ivas_omasa_dirac_td_binaural_render() - * - * Binaural rendering in OMASA format for JBM - *--------------------------------------------------------------------------*/ - -ivas_error ivas_omasa_dirac_td_binaural_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of samples requested */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailable, /* o : number of samples still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t n; - float data_separated_objects[MAX_NUM_OBJECTS][L_FRAME48k]; - float gain = OMASA_TDREND_MATCHING_GAIN; - ivas_error error; - float *p_sepobj[MAX_NUM_OBJECTS]; - float *tc_local[MAX_TRANSPORT_CHANNELS]; - - for ( n = 0; n < MAX_NUM_OBJECTS; n++ ) - { - p_sepobj[n] = &data_separated_objects[n][0]; - } - - /* Delay the object signals to match the CLDFB delay. Delay the whole buffer with the first rendering call of the stretched buffer. */ - if ( st_ivas->hSpatParamRendCom->slots_rendered == 0 ) - { - int16_t tcBufferSize; - - tcBufferSize = st_ivas->hSpatParamRendCom->num_slots * st_ivas->hSpatParamRendCom->slot_size; - - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - tc_local[n] = st_ivas->hTcBuffer->tc[n + 2]; - v_multc( tc_local[n], gain, tc_local[n], tcBufferSize ); - delay_signal_float( tc_local[n], tcBufferSize, st_ivas->hMasaIsmData->delayBuffer[n], st_ivas->hMasaIsmData->delayBuffer_size ); - } - } - - ivas_dirac_dec_binaural_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailable, nchan_transport, output_f ); - - /* reset combined orientation access index before calling the td renderer */ - ivas_combined_orientation_set_to_start_index( st_ivas->hCombinedOrientationData ); - - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_sepobj, *nSamplesRendered ) ) != IVAS_ERR_OK ) - { - return error; - } - for ( n = 0; n < BINAURAL_CHANNELS; n++ ) - { - v_add( output_f[n], p_sepobj[n], output_f[n], *nSamplesRendered ); - } - - return IVAS_ERR_OK; -} -#else /*--------------------------------------------------------------------------* * ivas_omasa_dirac_td_binaural_render() * @@ -1401,7 +800,6 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm_fx( return IVAS_ERR_OK; } -#endif /*--------------------------------------------------------------------------* * ivas_omasa_rearrange_channels() @@ -1409,29 +807,6 @@ ivas_error ivas_omasa_dirac_td_binaural_jbm_fx( * in case of external rendering, rearrange the channels order *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_rearrange_channels( - float *output[], /* o : output synthesis signal */ - const int16_t nchan_transport_ism, /* o : number of ISM TCs */ - const int16_t output_frame /* i : output frame length per channel */ -) -{ - int16_t n; - float tmp_buff[CPE_CHANNELS][L_FRAME48k]; - - mvr2r( output[0], tmp_buff[0], output_frame ); - mvr2r( output[1], tmp_buff[1], output_frame ); - - for ( n = 0; n < nchan_transport_ism; n++ ) - { - mvr2r( output[CPE_CHANNELS + n], output[n], output_frame ); - } - mvr2r( tmp_buff[0], output[n], output_frame ); - mvr2r( tmp_buff[1], output[++n], output_frame ); - - return; -} -#else void ivas_omasa_rearrange_channels_fx( Word32 *output[], /* o : output synthesis signal Q11*/ const Word16 nchan_transport_ism, /* o : number of ISM TCs */ @@ -1453,4 +828,3 @@ void ivas_omasa_rearrange_channels_fx( return; } -#endif diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index d5fc88441..f9d14c995 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -39,9 +39,7 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -50,41 +48,6 @@ * Allocate and initialize SBA_ISM rendering handle *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_osba_data_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - SBA_ISM_DATA_HANDLE hSbaIsmData; - int16_t i; - - if ( ( hSbaIsmData = (SBA_ISM_DATA_HANDLE) malloc( sizeof( SBA_ISM_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OSBA data\n" ) ); - } - - hSbaIsmData->delayBuffer_nchan = st_ivas->nchan_ism; - hSbaIsmData->delayBuffer_size = (int16_t) ( ( st_ivas->hDecoderConfig->output_Fs / 50 ) / MAX_PARAM_SPATIAL_SUBFRAMES ); - - if ( ( hSbaIsmData->delayBuffer = (float **) malloc( hSbaIsmData->delayBuffer_nchan * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for OSBA delay buffer \n" ) ); - } - - for ( i = 0; i < hSbaIsmData->delayBuffer_nchan; i++ ) - { - if ( ( hSbaIsmData->delayBuffer[i] = (float *) malloc( hSbaIsmData->delayBuffer_size * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for OSBA delay buffer \n" ) ); - } - set_zero( hSbaIsmData->delayBuffer[i], hSbaIsmData->delayBuffer_size ); - } - - st_ivas->hSbaIsmData = hSbaIsmData; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_osba_data_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -120,7 +83,6 @@ ivas_error ivas_osba_data_open_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -129,34 +91,6 @@ ivas_error ivas_osba_data_open_fx( * Deallocate SBA_ISM rendering handle *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_osba_data_close( - SBA_ISM_DATA_HANDLE *hSbaIsmData /* i/o: OSBA rendering handle */ -) -{ - int16_t i; - - if ( hSbaIsmData == NULL || *hSbaIsmData == NULL ) - { - return; - } - - if ( ( *hSbaIsmData )->delayBuffer != NULL ) - { - for ( i = 0; i < ( *hSbaIsmData )->delayBuffer_nchan; i++ ) - { - free( ( *hSbaIsmData )->delayBuffer[i] ); - } - free( ( *hSbaIsmData )->delayBuffer ); - ( *hSbaIsmData )->delayBuffer = NULL; - } - - free( *hSbaIsmData ); - *hSbaIsmData = NULL; - - return; -} -#else void ivas_osba_data_close_fx( SBA_ISM_DATA_HANDLE *hSbaIsmData /* i/o: OSBA rendering handle */ ) @@ -184,7 +118,6 @@ void ivas_osba_data_close_fx( return; } -#endif /*--------------------------------------------------------------------------* @@ -193,7 +126,6 @@ void ivas_osba_data_close_fx( * Binaural rendering in JBM OSBA format *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_osba_dirac_td_binaural_jbm_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ @@ -238,49 +170,6 @@ ivas_error ivas_osba_dirac_td_binaural_jbm_fx( } return IVAS_ERR_OK; } -#else -ivas_error ivas_osba_dirac_td_binaural_jbm( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailable, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t n; - ivas_error error; - float output_separated_objects[BINAURAL_CHANNELS][L_FRAME48k]; // VE2SB: TBV - float *p_sepobj[BINAURAL_CHANNELS]; - int16_t channel_offset; - - for ( n = 0; n < BINAURAL_CHANNELS; n++ ) - { - p_sepobj[n] = &output_separated_objects[n][0]; - } - - channel_offset = st_ivas->nchan_ism; - - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailable, &output_f[channel_offset] ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_td_binaural_renderer_sf( st_ivas, p_sepobj, *nSamplesRendered ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( n = 0; n < BINAURAL_CHANNELS; n++ ) - { - int16_t i; - for ( i = 0; i < nSamplesAsked; i++ ) - { - output_f[n][i] = 0.5f * output_f[channel_offset + n][i] + 0.5f * p_sepobj[n][i]; - } - } - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* @@ -289,7 +178,6 @@ ivas_error ivas_osba_dirac_td_binaural_jbm( * ISM metadata decoding in OSBA format. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_osba_ism_metadata_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word32 ism_total_brate, /* i : ISM total bitrate */ @@ -316,31 +204,6 @@ ivas_error ivas_osba_ism_metadata_dec_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_osba_ism_metadata_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int32_t ism_total_brate, /* i : ISM total bitrate */ - int16_t *nchan_ism, /* o : number of ISM separated channels */ - int16_t nb_bits_metadata[] /* o : number of ISM metadata bits */ -) -{ - ivas_error error; - int16_t nchan_transport_ism; - - /* set ISM parameters */ - nchan_transport_ism = st_ivas->nchan_ism; - *nchan_ism = st_ivas->nchan_ism; - - /* decode ISM metadata */ - if ( ( error = ivas_ism_metadata_dec( ism_total_brate, *nchan_ism, &nchan_transport_ism, st_ivas->hIsmMetaData, NULL, st_ivas->bfi, - nb_bits_metadata, st_ivas->ism_mode, st_ivas->hISMDTX, NULL, &st_ivas->ism_extmeta_active, &st_ivas->ism_extmeta_cnt, st_ivas->hCPE[0]->hCoreCoder[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* @@ -349,7 +212,6 @@ ivas_error ivas_osba_ism_metadata_dec( * Object + SBA rendering process. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_osba_render_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ @@ -397,50 +259,3 @@ ivas_error ivas_osba_render_sf_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_osba_render_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *p_output[] /* o : rendered time signal */ -) -{ - int16_t n; - float output_ism[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - float *p_output_ism[MAX_OUTPUT_CHANNELS]; - ivas_error error; - - for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) - { - p_output_ism[n] = &output_ism[n][0]; - } - - for ( n = 0; n < st_ivas->nchan_ism; n++ ) - { - mvr2r( p_output[n], output_ism[n], nSamplesAsked ); - } - - if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAsked, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) - { - ivas_ism_render_sf( st_ivas, p_output_ism, *nSamplesRendered ); - } - - for ( n = 0; n < st_ivas->hDecoderConfig->nchan_out; n++ ) - { - if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) - { - v_add( p_output[n], p_output_ism[n], p_output[n], *nSamplesRendered ); - } - - v_multc( p_output[n], 0.5f, p_output[n], *nSamplesRendered ); - } - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_dec/ivas_out_setup_conversion.c b/lib_dec/ivas_out_setup_conversion.c index 14da4b0fa..fbbe2a6fe 100644 --- a/lib_dec/ivas_out_setup_conversion.c +++ b/lib_dec/ivas_out_setup_conversion.c @@ -40,10 +40,8 @@ #include "ivas_rom_com.h" #include "ivas_rom_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif #include "debug.h" @@ -51,26 +49,18 @@ * Local constants *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define LS_OUT_CONV_SMOOTHING_FACTOR 0.0435f -#define LS_OUT_CONV_CLIP_FACTOR_MAX 2.0f -#define LS_OUT_CONV_CLIP_FACTOR_MIN 0.3f -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED #define LS_OUT_CONV_SMOOTHING_FACTOR_Q31 93415539 #define LS_OUT_CONV_CLIP_FACTOR_MAX_Q29 1073741824 #define LS_OUT_CONV_CLIP_FACTOR_MAX_SQ_Q28 1073741824 #define LS_OUT_CONV_CLIP_FACTOR_MIN_Q29 161061274 #define LS_OUT_CONV_CLIP_FACTOR_MIN_SQ_Q28 24159191 -#endif /*----------------------------------------------------------------------------------* * Local functions *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_lssetupconversion_computeEQFactor_fx( Word32 *outputEnergy, // Q0 Word32 *inputEnergy, // Q0 @@ -106,27 +96,8 @@ static void ivas_lssetupconversion_computeEQFactor_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_lssetupconversion_computeEQFactor( - float *outputEnergy, - float *inputEnergy, - float *EQ ) -{ - /* Compute the Equalization Gain */ - *EQ = sqrtf( *outputEnergy / ( EPSILON + *inputEnergy ) ); - - /* Limit the Equalization Gain */ - *EQ = min( *EQ, LS_OUT_CONV_CLIP_FACTOR_MAX ); - *EQ = max( *EQ, LS_OUT_CONV_CLIP_FACTOR_MIN ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_lssetupconversion_mdct_init_bands_fx( const Word16 output_frame, /* i : output frame length */ const Word16 tcx_mode, /* i : tcx mode (TCX10, TCX 20) */ @@ -215,75 +186,8 @@ static void ivas_lssetupconversion_mdct_init_bands_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_lssetupconversion_mdct_init_bands( - const int16_t output_frame, /* i : output frame length */ - const int16_t tcx_mode, /* i : tcx mode (TCX10, TCX 20) */ - int16_t *sfbOffset, /* o : sfb offset table */ - int16_t *sfbCnt /* o : number of sfbs */ -) -{ - SpectrumWarping const *lpcBndsParam; - int16_t i, cnt, specStartOffset, L_frameTCX; - const unsigned char *sfbWidths; - - L_frameTCX = ( tcx_mode == TCX_20_CORE ) ? output_frame : ( output_frame / 2 ); - - switch ( output_frame ) - { - case L_FRAME48k: - case L_FRAME32k: - lpcBndsParam = sw32000Hz; - break; - case L_FRAME25_6k: - lpcBndsParam = sw25600Hz; - break; - case L_FRAME16k: - lpcBndsParam = sw16000Hz; - break; - default: - assert( !"Subband division not defined for this frame size" ); - return; - } - - sfbWidths = ( tcx_mode == TCX_20_CORE ? lpcBndsParam->bandLengthsTCX20 : lpcBndsParam->bandLengthsTCX10 ); - cnt = ( tcx_mode == TCX_20_CORE ? 64 : 32 ); - - /* calc sfb offsets */ - specStartOffset = 0; - for ( i = 0; i < cnt; i++ ) - { - sfbOffset[i] = min( specStartOffset, L_frameTCX ); - specStartOffset += sfbWidths[i]; - - if ( sfbOffset[i] >= L_frameTCX ) - { - break; - } - } - - *sfbCnt = i; - sfbOffset[*sfbCnt] = min( specStartOffset, L_frameTCX ); - - if ( sfbOffset[*sfbCnt] < L_frameTCX ) - { - int16_t nMissingBins = L_frameTCX - sfbOffset[*sfbCnt]; - - if ( sfbWidths[i] / 2 < nMissingBins ) - { - ( *sfbCnt )++; - } - sfbOffset[*sfbCnt] = L_frameTCX; - } - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void get_custom_ls_conversion_matrix_fx( const EFAP_HANDLE hEFAPdata, /* i : EFAP handle */ const IVAS_OUTPUT_SETUP hTransSetup, /* i : Transport channel configuration handle */ @@ -369,81 +273,7 @@ static void get_custom_ls_conversion_matrix_fx( return; } -#else -static void get_custom_ls_conversion_matrix( - const EFAP_HANDLE hEFAPdata, /* i : EFAP handle */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : Transport channel configuration handle */ - const LSSETUP_CUSTOM_HANDLE hLsSetupCustom, /* i : Custom LS Setup handle */ - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion /* o : LS Setup Conversion Handle */ -) -{ - int16_t ch_in, ch_in_woLFE; - int16_t ch_out, ch_out_woLFE; - int16_t nchan_in, nchan_out; - int16_t lfe_in_idx, lfe_out_idx; - - float dmxCoeff_LFE; - float tmp_gains[MAX_OUTPUT_CHANNELS]; - - lfe_in_idx = -1; - lfe_out_idx = -1; - - nchan_in = hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; - nchan_out = hLsSetupCustom->num_spk + hLsSetupCustom->num_lfe; - /* The below code will need to be restructured in case additional LFEs must be supported */ - if ( hTransSetup.num_lfe > 0 ) - { - lfe_in_idx = hTransSetup.index_lfe[0]; - } - if ( hLsSetupCustom->num_lfe > 0 ) - { - lfe_out_idx = hLsSetupCustom->lfe_idx[0]; - } - - dmxCoeff_LFE = 1.f / hTransSetup.nchan_out_woLFE; - - for ( ch_in = 0, ch_in_woLFE = 0; ch_in < nchan_in; ch_in++, ch_in_woLFE++ ) - { - if ( lfe_in_idx == ch_in ) - { - if ( lfe_out_idx >= 0 ) - { - /* re-route LFE */ - hLsSetUpConversion->dmxMtx[ch_in][lfe_out_idx] = 1.0f; - } - else - { - /* mix the LFE to all channels */ - set_f( hLsSetUpConversion->dmxMtx[ch_in], dmxCoeff_LFE, nchan_out ); - } - - ch_in_woLFE--; - } - else if ( lfe_out_idx != ch_in ) - { - /* Set the values of hLsSetUpConversion->dmxMtx to EFAP gains, skipping LFE */ - efap_determine_gains( hEFAPdata, tmp_gains, hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], EFAP_MODE_EFAP ); - - for ( ch_out = 0, ch_out_woLFE = 0; ch_out < nchan_out; ch_out++, ch_out_woLFE++ ) - { - if ( lfe_out_idx == ch_out ) - { - ch_out_woLFE--; - } - else - { - hLsSetUpConversion->dmxMtx[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; - } - } - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static ivas_error get_ls_conversion_matrix_fx( LSSETUP_CONVERSION_HANDLE hLsSetUpConversion, const AUDIO_CONFIG input_config, @@ -546,99 +376,12 @@ static ivas_error get_ls_conversion_matrix_fx( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "The conversion matrix between these formats is not defined!\n" ); } -#else -static ivas_error get_ls_conversion_matrix( - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion, - const AUDIO_CONFIG input_config, - const AUDIO_CONFIG output_config ) -{ - int16_t i, k; - int16_t ch_in, ch_out; - int16_t nchan_in, nchan_out; - int16_t index; - float value; - const LS_CONVERSION_MATRIX *conversion_matrix; - ivas_error error; - - error = IVAS_ERR_OK; - - conversion_matrix = NULL; - - nchan_in = audioCfg2channels( input_config ); - nchan_out = audioCfg2channels( output_config ); - - /* Search the table for a mapping */ - for ( i = 0; i < LS_SETUP_CONVERSION_NUM_MAPPINGS; i++ ) - { - if ( ( input_config == ls_conversion_mapping[i].input_config ) && ( output_config == ls_conversion_mapping[i].output_config ) ) - { - /* Special handling for MONO and STEREO downmix */ - if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - for ( ch_in = 0, k = 0; ch_in < nchan_in; ch_in++, k++ ) - { - /* Skip two rows in the matrix for 5.1.x formats */ - if ( ch_in == 6 && ( input_config == IVAS_AUDIO_CONFIG_5_1_2 || input_config == IVAS_AUDIO_CONFIG_5_1_4 ) ) - { - k += 2; - } - - for ( ch_out = 0; ch_out < nchan_out; ch_out++ ) - { - if ( output_config == IVAS_AUDIO_CONFIG_MONO ) - { - hLsSetUpConversion->dmxMtx[ch_in][ch_out] = ls_conversion_cicpX_mono[k][ch_out]; - } - else - { - hLsSetUpConversion->dmxMtx[ch_in][ch_out] = ls_conversion_cicpX_stereo[k][ch_out]; - } - } - } - return error; - } - else - { - conversion_matrix = ls_conversion_mapping[i].conversion_matrix; - - /* If a mapping is defined with a NULL matrix, 1:1 upmix of input channels */ - if ( conversion_matrix == NULL ) - { - for ( k = 0; k < nchan_in; k++ ) - { - hLsSetUpConversion->dmxMtx[k][k] = 1.0f; - } - return error; - } - else - { - for ( k = 1; k < ( conversion_matrix[0].index + 1 ); k++ ) - { - index = conversion_matrix[k].index; - value = conversion_matrix[k].value; - - ch_in = index / nchan_out; - ch_out = index % nchan_out; - - hLsSetUpConversion->dmxMtx[ch_in][ch_out] = value; - } - } - return error; - } - } - } - - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "The conversion matrix between these formats is not defined!\n" ); -} - -#endif /*------------------------------------------------------------------------- * ivas_ls_setup_conversion_open() * * Open the LS configuration Conversion Module *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ls_setup_conversion_open_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -789,146 +532,6 @@ ivas_error ivas_ls_setup_conversion_open_fx( return IVAS_ERR_OK; } -#else - -ivas_error ivas_ls_setup_conversion_open( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - int16_t chIdx, inChannels, outChannels; - int16_t output_frame; - int32_t output_Fs; - int16_t nchan_out; - int16_t paramUpmixMonoStereo; - - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - paramUpmixMonoStereo = TRUE; - } - else - { - paramUpmixMonoStereo = FALSE; - } - output_Fs = st_ivas->hDecoderConfig->output_Fs; - nchan_out = st_ivas->hDecoderConfig->nchan_out; - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - - /* Allocate memory to the handle */ - if ( ( hLsSetUpConversion = (LSSETUP_CONVERSION_HANDLE) malloc( sizeof( LSSETUP_CONVERSION_STRUCT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); - } - - assert( nchan_out <= MAX_OUTPUT_CHANNELS ); - - outChannels = nchan_out; - if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC ) - { - inChannels = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - hLsSetUpConversion->sfbCnt = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - for ( chIdx = 0; chIdx < outChannels; chIdx++ ) - { - if ( ( hLsSetUpConversion->targetEnergyPrev[chIdx] = (float *) malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); - } - if ( ( hLsSetUpConversion->dmxEnergyPrev[chIdx] = (float *) malloc( ( hLsSetUpConversion->sfbCnt ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); - } - set_f( hLsSetUpConversion->targetEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); - set_f( hLsSetUpConversion->dmxEnergyPrev[chIdx], 0.0f, hLsSetUpConversion->sfbCnt ); - } - for ( ; chIdx < MAX_CICP_CHANNELS; chIdx++ ) - { - hLsSetUpConversion->targetEnergyPrev[chIdx] = NULL; - hLsSetUpConversion->dmxEnergyPrev[chIdx] = NULL; - } - } - else - { - if ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - if ( paramUpmixMonoStereo == TRUE ) - { - inChannels = audioCfg2channels( IVAS_AUDIO_CONFIG_5_1_2 ); - } - else - { - inChannels = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - } - } - else - { - inChannels = st_ivas->nchan_transport; - } - - /*Initialization of MDCT bands with TCX20 resolution */ - ivas_lssetupconversion_mdct_init_bands( output_frame, TCX_20_CORE, &hLsSetUpConversion->sfbOffset[0], &hLsSetUpConversion->sfbCnt ); - if ( ( hLsSetUpConversion->targetEnergyPrev[0] = (float *) malloc( ( MAX_SFB + 2 ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); - } - if ( ( hLsSetUpConversion->dmxEnergyPrev[0] = (float *) malloc( ( MAX_SFB + 2 ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LS configuration Conversion Handle \n" ) ); - } - - for ( chIdx = 1; chIdx < MAX_CICP_CHANNELS; chIdx++ ) - { - hLsSetUpConversion->targetEnergyPrev[chIdx] = NULL; - hLsSetUpConversion->dmxEnergyPrev[chIdx] = NULL; - } - set_f( hLsSetUpConversion->targetEnergyPrev[0], 0.0f, MAX_SFB + 2 ); - set_f( hLsSetUpConversion->dmxEnergyPrev[0], 0.0f, MAX_SFB + 2 ); - } - - - /* Initialize the DMX conversion matrix */ - for ( chIdx = 0; chIdx < inChannels; chIdx++ ) - { - /* Allocate memory depending on the number of output channels */ - if ( ( hLsSetUpConversion->dmxMtx[chIdx] = (float *) malloc( outChannels * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for temp dmx matrix \n" ) ); - } - set_zero( hLsSetUpConversion->dmxMtx[chIdx], outChannels ); - } - - for ( ; chIdx < MAX_CICP_CHANNELS; chIdx++ ) - { - hLsSetUpConversion->dmxMtx[chIdx] = NULL; - } - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - get_custom_ls_conversion_matrix( st_ivas->hEFAPdata, st_ivas->hTransSetup, st_ivas->hLsSetupCustom, hLsSetUpConversion ); - } - else - { - if ( st_ivas->transport_config != IVAS_AUDIO_CONFIG_INVALID ) - { - if ( paramUpmixMonoStereo == TRUE ) - { - get_ls_conversion_matrix( hLsSetUpConversion, IVAS_AUDIO_CONFIG_5_1_2, st_ivas->hDecoderConfig->output_config ); - } - else - { - get_ls_conversion_matrix( hLsSetUpConversion, st_ivas->transport_config, st_ivas->hDecoderConfig->output_config ); - } - } - else - { - get_ls_conversion_matrix( hLsSetUpConversion, st_ivas->intern_config, st_ivas->hDecoderConfig->output_config ); - } - } - - st_ivas->hLsSetUpConversion = hLsSetUpConversion; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_ls_setup_conversion_close() @@ -936,7 +539,6 @@ ivas_error ivas_ls_setup_conversion_open( * Close the LS configuration Conversion Module *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ls_setup_conversion_close_fx( LSSETUP_CONVERSION_HANDLE *hLsSetUpConversion /* i/o: LS converter handle */ ) @@ -974,46 +576,6 @@ void ivas_ls_setup_conversion_close_fx( return; } -#else - -void ivas_ls_setup_conversion_close( - LSSETUP_CONVERSION_HANDLE *hLsSetUpConversion /* i/o: LS converter handle */ -) -{ - int16_t idx; - - if ( hLsSetUpConversion == NULL || *hLsSetUpConversion == NULL ) - { - return; - } - - for ( idx = 0; idx < MAX_CICP_CHANNELS; idx++ ) - { - if ( ( *hLsSetUpConversion )->dmxMtx[idx] != NULL ) - { - free( ( *hLsSetUpConversion )->dmxMtx[idx] ); - ( *hLsSetUpConversion )->dmxMtx[idx] = NULL; - } - - if ( ( *hLsSetUpConversion )->targetEnergyPrev[idx] != NULL ) - { - free( ( *hLsSetUpConversion )->targetEnergyPrev[idx] ); - ( *hLsSetUpConversion )->targetEnergyPrev[idx] = NULL; - } - - if ( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] != NULL ) - { - free( ( *hLsSetUpConversion )->dmxEnergyPrev[idx] ); - ( *hLsSetUpConversion )->dmxEnergyPrev[idx] = NULL; - } - } - - free( *hLsSetUpConversion ); - *hLsSetUpConversion = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_ls_setup_conversion() @@ -1022,7 +584,6 @@ void ivas_ls_setup_conversion_close( * to output LS configuration in time domain *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ls_setup_conversion_fx( Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ const Word16 input_chans, /* i : number of input channels to the renderer */ @@ -1082,65 +643,6 @@ void ivas_ls_setup_conversion_fx( return; } -#else - -void ivas_ls_setup_conversion( - Decoder_Struct *st_ivas, /* i : IVAS decoder structure */ - const int16_t input_chans, /* i : number of input channels to the renderer */ - const int16_t output_frame, /* i : frame length */ - float *input[], /* i : LS input/output synthesis signal */ - float *output[] /* i/o: LS input/output synthesis signal */ -) -{ - int16_t chInIdx, chOutIdx, idx; - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - float dmxCoeff, tmpVal; - float output_tmp[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - - push_wmops( "LS_Renderer" ); - - hLsSetUpConversion = st_ivas->hLsSetUpConversion; - - for ( chOutIdx = 0; chOutIdx < st_ivas->hDecoderConfig->nchan_out; chOutIdx++ ) - { - set_zero( output_tmp[chOutIdx], output_frame ); - for ( chInIdx = 0; chInIdx < input_chans; chInIdx++ ) - { - dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; - - if ( dmxCoeff == 0.f ) - { - continue; - } - else if ( dmxCoeff == 1.f ) - { - for ( idx = 0; idx < output_frame; idx++ ) - { - output_tmp[chOutIdx][idx] += input[chInIdx][idx]; - } - } - else - { - for ( idx = 0; idx < output_frame; idx++ ) - { - tmpVal = dmxCoeff * input[chInIdx][idx]; - output_tmp[chOutIdx][idx] += tmpVal; - } - } - } - } - - /* Copy to output buffer */ - for ( chOutIdx = 0; chOutIdx < st_ivas->hDecoderConfig->nchan_out; chOutIdx++ ) - { - mvr2r( output_tmp[chOutIdx], output[chOutIdx], output_frame ); - } - - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_ls_setup_conversion_process_mdct() @@ -1148,7 +650,6 @@ void ivas_ls_setup_conversion( * Equalization in MDCT Domain *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ls_setup_conversion_process_mdct_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *output[] /* i/o: output synthesis signal */ @@ -1429,256 +930,23 @@ void ivas_ls_setup_conversion_process_mdct_fx( /* TCX10 */ FOR( binIdx = start; binIdx < stop; binIdx++ ) { - x[chInIdx][subFrameIdx][binIdx] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx], 1 ), eqGain ); - move32(); - } - } - ELSE - { - /* TCX5*/ - start_tcx5 = stop_tcx5; - move16(); - stop_tcx5 = shr( add( stop, 1 ), 1 ); - - FOR( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) - { - x[chInIdx][subFrameIdx][binIdx] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx], 1 ), eqGain ); - move32(); - x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )], 1 ), eqGain ); - move32(); - } - } - } - } - } - } - } - - pop_wmops(); - return; -} -#else -void ivas_ls_setup_conversion_process_mdct( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output[] /* i/o: output synthesis signal */ -) -{ - /* Declaration of all required variables */ - int16_t i, bandIdx, chInIdx, chOutIdx, cpe_idx, subFrameIdx, binIdx, idx; - int16_t inChannels, outChannels, num_CPE; - int16_t transform_type[MAX_CICP_CHANNELS][2]; - int16_t frameSize; - float targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; - float dmxCoeff; - float dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; - float eqGain; - float *sig[NB_DIV], *pTmp[NB_DIV], *x[MAX_CICP_CHANNELS][NB_DIV]; - float mdst[L_FRAME48k]; - float convertRes[L_FRAME48k]; - int16_t start, stop, start_tcx5, stop_tcx5; - int16_t mct_chan_mode[MAX_CICP_CHANNELS]; - - /* Declare all handles */ - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; - - push_wmops( "LS_Renderer_MDCT" ); - - /* Assign all the declared variables */ - inChannels = st_ivas->nchan_transport; - outChannels = st_ivas->hDecoderConfig->nchan_out; - num_CPE = st_ivas->nCPE; - - /* Assign output pointer to variable x */ - for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) - { - x[chInIdx][0] = output[chInIdx]; - x[chInIdx][1] = output[chInIdx] + ( L_FRAME48k / 2 ); - } - - /* Assign all the declared handles*/ - hLsSetUpConversion = st_ivas->hLsSetUpConversion; - for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) - { - hCPE[cpe_idx] = st_ivas->hCPE[cpe_idx]; - } - - /* Get the core type */ - for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) - { - for ( idx = 0; idx < CPE_CHANNELS; idx++ ) - { - /* get the channel index */ - chInIdx = cpe_idx * CPE_CHANNELS + idx; - assert( chInIdx <= inChannels ); - transform_type[chInIdx][0] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[0]; - transform_type[chInIdx][1] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[1]; - mct_chan_mode[chInIdx] = hCPE[cpe_idx]->hCoreCoder[idx]->mct_chan_mode; - } - } - - /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ - frameSize = hLsSetUpConversion->sfbOffset[hLsSetUpConversion->sfbCnt]; - - set_zero( targetEnergy, MAX_SFB + 2 ); - set_zero( dmxEnergy, MAX_SFB + 2 ); - - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - /* Step 0: Set the buffers to zero */ - set_zero( dmxSignalReal, frameSize ); - set_zero( dmxSignalImag, frameSize ); - - for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) - { - dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; - - if ( - chInIdx != LFE_CHANNEL && - mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - /* Step 1: Compute the target energy and DMX signal (possible since we have all signals in TCX20 resolution) */ - if ( dmxCoeff ) - { - float tmpDMXSig, targetEne; - - /* Convert the signal resolution to TCX20 */ - /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ - sig[0] = pTmp[0] = x[chInIdx][0]; - sig[1] = pTmp[1] = x[chInIdx][1]; - - /* convert (sub)frames to higher frequency resolution */ - if ( transform_type[chInIdx][0] != TCX_20 ) - { - for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) - { - if ( transform_type[chInIdx][subFrameIdx] == TCX_5 ) - { - /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ - pTmp[subFrameIdx] = sig[subFrameIdx] = convertRes + subFrameIdx * frameSize / 2; - convert_coeffs_to_higher_res( x[chInIdx][subFrameIdx], x[chInIdx][subFrameIdx] + frameSize / 4, pTmp[subFrameIdx], frameSize / 4 ); - } - } - - /* convert channel with TCX10 to TCX20 resolution */ - sig[0] = convertRes; - convert_coeffs_to_higher_res( pTmp[0], pTmp[1], sig[0], frameSize / 2 ); - } - - /* MDST estimate */ - mdst[0] = mdst[frameSize - 1] = 0.f; - for ( i = 1; i < frameSize - 1; i++ ) - { - mdst[i] = sig[0][i + 1] - sig[0][i - 1]; - } - - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - - targetEne = 0.0f; - - /* Loop over all the bins in the band */ - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - tmpDMXSig = dmxCoeff * sig[0][binIdx]; - dmxSignalReal[binIdx] += tmpDMXSig; - targetEne += tmpDMXSig * tmpDMXSig; - - tmpDMXSig = dmxCoeff * mdst[binIdx]; - dmxSignalImag[binIdx] += tmpDMXSig; - targetEne += tmpDMXSig * tmpDMXSig; - } - targetEnergy[bandIdx] += targetEne; - } /* end of band loop */ - } - } - } /* end of chInIdx loop */ - - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - float tmpReal, tmpImag, DMXEne; - - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - - /* Loop over all the bins in the band */ - DMXEne = 0.0f; - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - tmpReal = dmxSignalReal[binIdx]; - tmpImag = dmxSignalImag[binIdx]; - - DMXEne += tmpReal * tmpReal + tmpImag * tmpImag; - } - dmxEnergy[bandIdx] += DMXEne; - } - } /* end of out channel loop */ - - /* Step 3: Peform energy smoothing */ - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - targetEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[0][bandIdx]; - dmxEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[0][bandIdx]; - hLsSetUpConversion->targetEnergyPrev[0][bandIdx] = targetEnergy[bandIdx]; - hLsSetUpConversion->dmxEnergyPrev[0][bandIdx] = dmxEnergy[bandIdx]; - } - - /* Step 4: Perform equalization */ - for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) - { - if ( - chInIdx != LFE_CHANNEL && - mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - if ( transform_type[chInIdx][0] == TCX_20 ) - { - /* TCX20 */ - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - - /* Compute Eq gains */ - ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - x[chInIdx][0][binIdx] *= eqGain; - } - } - } - else - { - stop_tcx5 = 0; - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - start = hLsSetUpConversion->sfbOffset[bandIdx] / 2; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1] / 2; - - /* Compute Eq gains */ - ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); - - for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) - { - if ( transform_type[chInIdx][subFrameIdx] == TCX_10 ) - { - /* TCX10 */ - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - x[chInIdx][subFrameIdx][binIdx] *= eqGain; + x[chInIdx][subFrameIdx][binIdx] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx], 1 ), eqGain ); + move32(); } } - else + ELSE { /* TCX5*/ start_tcx5 = stop_tcx5; - stop_tcx5 = ( stop + 1 ) / 2; + move16(); + stop_tcx5 = shr( add( stop, 1 ), 1 ); - for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) + FOR( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) { - x[chInIdx][subFrameIdx][binIdx] *= eqGain; - x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] *= eqGain; + x[chInIdx][subFrameIdx][binIdx] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx], 1 ), eqGain ); + move32(); + x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] = Mpy_32_32( L_shl( x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )], 1 ), eqGain ); + move32(); } } } @@ -1690,7 +958,6 @@ void ivas_ls_setup_conversion_process_mdct( pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- @@ -1699,7 +966,6 @@ void ivas_ls_setup_conversion_process_mdct( * Equalization in MDCT Domain *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ls_setup_conversion_process_mdct_param_mc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Word32 *x_fx[][NB_DIV], @@ -2081,333 +1347,6 @@ void ivas_ls_setup_conversion_process_mdct_param_mc_fx( } return; } -#else -void ivas_ls_setup_conversion_process_mdct_param_mc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *x[][NB_DIV] /* i/o: output synthesis signal */ -) -{ - /* Declaration of all required variables */ - int16_t i; - int16_t idx; - int16_t nchan_transport, nchan_out, nchan_transport_format; - int16_t chInIdx, chOutIdx, cpe_idx, subFrameIdx, binIdx; - int16_t band, bandIdx, num_bands; - - int16_t num_CPE; - int16_t transform_type[MAX_CICP_CHANNELS][2]; - int16_t frameSize; - - float targetEnergy[MAX_SFB + 2], dmxEnergy[MAX_SFB + 2]; - float eqGain; - float *sig[MAX_CICP_CHANNELS][NB_DIV], *pTmp[NB_DIV]; - float mdst[MAX_CICP_CHANNELS][L_FRAME48k]; - float convertRes[MAX_CICP_CHANNELS][L_FRAME48k]; - int16_t start, stop, start_tcx5, stop_tcx5; - int16_t mct_chan_mode[MAX_CICP_CHANNELS]; - - float cx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float cx_imag[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float cy[MAX_CICP_CHANNELS * MAX_CICP_CHANNELS]; - float real_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS]; - float imag_in_buffer[PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS]; - float real_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - float imag_buffer[PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS]; - - float Nrqq[MAX_OUTPUT_CHANNELS]; - float target_ch_ener[MAX_OUTPUT_CHANNELS]; - float *ild_q; - - float DMXEne; - float dmxCoeff; - float dmxSignalReal[L_FRAME48k], dmxSignalImag[L_FRAME48k]; - - float tmpReal, tmpImag; - float tmpDMXSig; - - /* Declare all handles */ - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - CPE_DEC_HANDLE hCPE[MCT_MAX_BLOCKS]; - PARAM_MC_DEC_HANDLE hParamMC; - - /* Step 0: Set the buffers to zero */ - set_zero( dmxSignalReal, L_FRAME48k ); - set_zero( dmxSignalImag, L_FRAME48k ); - - /* Assign all the declared variables */ - nchan_transport = st_ivas->nchan_transport; - nchan_out = st_ivas->hDecoderConfig->nchan_out; - num_CPE = st_ivas->nCPE; - nchan_transport_format = st_ivas->hTransSetup.nchan_out_woLFE + st_ivas->hTransSetup.num_lfe; - - /* Assign all the declared handles*/ - hLsSetUpConversion = st_ivas->hLsSetUpConversion; - for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) - { - hCPE[cpe_idx] = st_ivas->hCPE[cpe_idx]; - } - hParamMC = st_ivas->hParamMC; - - /* Get the core type */ - for ( cpe_idx = 0; cpe_idx < num_CPE; cpe_idx++ ) - { - for ( idx = 0; idx < CPE_CHANNELS; idx++ ) - { - /* get the channel index */ - chInIdx = cpe_idx * CPE_CHANNELS + idx; - assert( chInIdx <= nchan_transport ); - transform_type[chInIdx][0] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[0]; - transform_type[chInIdx][1] = hCPE[cpe_idx]->hCoreCoder[idx]->transform_type[1]; - mct_chan_mode[chInIdx] = hCPE[cpe_idx]->hCoreCoder[idx]->mct_chan_mode; - } - } - - /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ - frameSize = hLsSetUpConversion->sfbOffset[hLsSetUpConversion->sfbCnt]; - - set_zero( targetEnergy, MAX_SFB + 2 ); - set_zero( dmxEnergy, MAX_SFB + 2 ); - - for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) - { - if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ - sig[chInIdx][0] = pTmp[0] = x[chInIdx][0]; - sig[chInIdx][1] = pTmp[1] = x[chInIdx][1]; - - /* convert (sub)frames to higher frequency resolution */ - if ( transform_type[chInIdx][0] != TCX_20 ) - { - for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) - { - if ( transform_type[chInIdx][subFrameIdx] == TCX_5 ) - { - /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ - pTmp[subFrameIdx] = sig[chInIdx][subFrameIdx] = convertRes[chInIdx] + subFrameIdx * frameSize / 2; - convert_coeffs_to_higher_res( x[chInIdx][subFrameIdx], x[chInIdx][subFrameIdx] + frameSize / 4, pTmp[subFrameIdx], frameSize / 4 ); - } - } - - /* convert channel with TCX10 to TCX20 resolution */ - sig[chInIdx][0] = convertRes[chInIdx]; - convert_coeffs_to_higher_res( pTmp[0], pTmp[1], sig[chInIdx][0], frameSize / 2 ); - } - } - } - - /* precalculate MDST estimate */ - for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) - { - if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - mdst[chInIdx][0] = mdst[chInIdx][frameSize - 1] = 0.f; - for ( i = 1; i < frameSize - 1; i++ ) - { - mdst[chInIdx][i] = sig[chInIdx][0][i + 1] - sig[chInIdx][0][i - 1]; - } - } - } - - /* Step 1.1, calculate Cx from MDST estimate */ - for ( bandIdx = 0; bandIdx < PARAM_MC_MAX_PARAMETER_BANDS; bandIdx++ ) - { - set_zero( cx[bandIdx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - set_zero( cx_imag[bandIdx], PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - } - - set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); - set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); - - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - set_zero( real_in_buffer, PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS ); - set_zero( imag_in_buffer, PARAM_MC_MAX_BANDS_IN_PARAMETER_BAND * PARAM_MC_BAND_TO_MDCT_BAND_RATIO * MAX_TRANSPORT_CHANNELS ); - set_zero( real_buffer, PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - set_zero( imag_buffer, PARAM_MC_MAX_TRANSPORT_CHANS * PARAM_MC_MAX_TRANSPORT_CHANS ); - - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - num_bands = stop - start; - - for ( i = 0; i < num_bands; i++ ) - { - band = start + i; - for ( idx = 0; idx < nchan_transport; idx++ ) - { - if ( mct_chan_mode[idx] != MCT_CHAN_MODE_IGNORE ) - { - real_in_buffer[i + num_bands * idx] = sig[idx][0][band]; - imag_in_buffer[i + num_bands * idx] = mdst[idx][band]; - } - } - } - - cmplx_matrix_square( real_in_buffer, imag_in_buffer, num_bands, nchan_transport, real_buffer, imag_buffer ); - - v_add( cx[bandIdx], real_buffer, cx[bandIdx], nchan_transport * nchan_transport ); - - v_add( cx_imag[bandIdx], imag_buffer, cx_imag[bandIdx], nchan_transport * nchan_transport ); - } - - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - DMXEne = 0.0f; - set_zero( cy, MAX_CICP_CHANNELS * MAX_CICP_CHANNELS ); - set_zero( Nrqq, MAX_OUTPUT_CHANNELS ); - set_zero( target_ch_ener, MAX_OUTPUT_CHANNELS ); - - /* Step 1.2, get target channel energies for the transported format as in ivas_param_mc_get_mono_stereo_mixing_matrices(), Nrqq calculation */ - ild_q = hParamMC->icld_q + bandIdx * hParamMC->hMetadataPMC->ild_mapping_conf->ild_map_size_lfe; - - for ( chInIdx = 0; chInIdx < nchan_transport_format; chInIdx++ ) - { - float ref_ener = 0.0f; - int16_t ref_channel_cnt; - int16_t ref_channel_idx; - - for ( ref_channel_cnt = 0; ref_channel_cnt < hParamMC->hMetadataPMC->ild_mapping_conf->num_ref_channels[chInIdx]; ref_channel_cnt++ ) - { - ref_channel_idx = hParamMC->hMetadataPMC->ild_mapping_conf->ref_channel_idx[chInIdx][ref_channel_cnt]; - ref_ener += cx[bandIdx][ref_channel_idx + ref_channel_idx * nchan_transport]; - } - - Nrqq[hParamMC->hMetadataPMC->ild_mapping_conf->ild_index[chInIdx]] = powf( 10.0f, ild_q[chInIdx] / 10.0f ) * hParamMC->hMetadataPMC->ild_factors[chInIdx] * ref_ener; - } - - /* Step 1.3 get target Cy like in ivas_param_mc_get_mono_stereo_mixing_matrices() (with dmx matrix from CICPX to MONO/STEREO saved in hParamMC) */ - for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) - { - for ( i = 0; i < nchan_transport_format; i++ ) - { - target_ch_ener[chOutIdx] += hParamMC->ls_conv_dmx_matrix[chOutIdx + i * nchan_out] * Nrqq[i]; - } - cy[chOutIdx + nchan_out * chOutIdx] = target_ch_ener[chOutIdx]; - } - - /* Step 1.4 final target energy for the band would then be the sum over the diagonal of Cy*/ - for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) - { - targetEnergy[bandIdx] += cy[chOutIdx + nchan_out * chOutIdx]; - } - - /* Step 2: Calculate DMX ener */ - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - - for ( chOutIdx = 0; chOutIdx < nchan_out; chOutIdx++ ) - { - for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) - { - if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; - - /* Step 1: Compute the target energy and DMX signal (possible since we have all signals in TCX20 resolution) */ - if ( dmxCoeff ) - { - /* Loop over all the bins in the band */ - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - tmpDMXSig = dmxCoeff * sig[chInIdx][0][binIdx]; - dmxSignalReal[binIdx] += tmpDMXSig; - - tmpDMXSig = dmxCoeff * mdst[chInIdx][binIdx]; - dmxSignalImag[binIdx] += tmpDMXSig; - } - } - } - } - - /* Loop over all the bins in the band */ - DMXEne = 0.0f; - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - tmpReal = dmxSignalReal[binIdx]; - tmpImag = dmxSignalImag[binIdx]; - - DMXEne += tmpReal * tmpReal + tmpImag * tmpImag; - } - } - - dmxEnergy[bandIdx] = DMXEne; - } - - /* Step 3: Peform energy smoothing */ - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - targetEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[0][bandIdx]; - dmxEnergy[bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[bandIdx] + ( 1.0f - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[0][bandIdx]; - hLsSetUpConversion->targetEnergyPrev[0][bandIdx] = targetEnergy[bandIdx]; - hLsSetUpConversion->dmxEnergyPrev[0][bandIdx] = dmxEnergy[bandIdx]; - } - - /* Step 4: Perform equalization */ - for ( chInIdx = 0; chInIdx < nchan_transport; chInIdx++ ) - { - if ( mct_chan_mode[chInIdx] != MCT_CHAN_MODE_IGNORE ) - { - if ( transform_type[chInIdx][0] == TCX_20 ) - { - /*TCX20*/ - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - start = hLsSetUpConversion->sfbOffset[bandIdx]; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1]; - - /*Compute Eq gains */ - ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - x[chInIdx][0][binIdx] *= eqGain; - } - } - } - else - { - stop_tcx5 = 0; - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - start = hLsSetUpConversion->sfbOffset[bandIdx] / 2; - stop = hLsSetUpConversion->sfbOffset[bandIdx + 1] / 2; - - /*Compute Eq gains */ - ivas_lssetupconversion_computeEQFactor( &targetEnergy[bandIdx], &dmxEnergy[bandIdx], &eqGain ); - - for ( subFrameIdx = 0; subFrameIdx < NB_DIV; subFrameIdx++ ) - { - if ( transform_type[chInIdx][subFrameIdx] == TCX_10 ) - { - /*TCX10*/ - for ( binIdx = start; binIdx < stop; binIdx++ ) - { - x[chInIdx][subFrameIdx][binIdx] *= eqGain; - } - } - else - { - /* TCX5*/ - start_tcx5 = stop_tcx5; - stop_tcx5 = ( stop + 1 ) / 2; - for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) - { - x[chInIdx][subFrameIdx][binIdx] *= eqGain; - } - - for ( binIdx = start_tcx5; binIdx < stop_tcx5; binIdx++ ) - { - x[chInIdx][subFrameIdx][binIdx + ( frameSize >> 2 )] *= eqGain; - } - } - } - } - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2416,7 +1355,6 @@ void ivas_ls_setup_conversion_process_mdct_param_mc( * LS setup conversion in the CLDFB domain for Parametric MC *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lssetupconversion_process_param_mc_fx( Decoder_Struct *st_ivas, /* i/o: LS setup conversion renderer handle */ const Word16 num_timeslots, @@ -2592,128 +1530,3 @@ void ivas_lssetupconversion_process_param_mc_fx( pop_wmops(); return; } -#else - -void ivas_lssetupconversion_process_param_mc( - Decoder_Struct *st_ivas, /* i/o: LS setup conversion renderer handle */ - const int16_t num_timeslots, - float Cldfb_RealBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ - float Cldfb_ImagBuffer_InOut[MAX_CICP_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i/o: LS signals */ - int16_t channel_active[MAX_CICP_CHANNELS] /* i : bitmap indicating which output channels are active */ -) -{ - int16_t slotIdx, chOutIdx, chInIdx, bandIdx; - int16_t inChannels, outChannels; - float targetEnergy[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float dmxEnergy[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float tmpDMXSig, dmxCoeff, tmpReal, tmpImag; - float EQ; - float Cldfb_RealBuffer_tmp[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_tmp[MAX_CICP_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - LSSETUP_CONVERSION_HANDLE hLsSetUpConversion; - - push_wmops( "LS_Renderer_Process_Param_MC" ); - /* inits */ - inChannels = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - outChannels = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - - hLsSetUpConversion = st_ivas->hLsSetUpConversion; - EQ = 0.0f; - - set_s( channel_active, 0, outChannels ); - - /* Loop over each time slots and compute dmx for each time slot */ - for ( slotIdx = 0; slotIdx < num_timeslots; slotIdx++ ) - { - /* copy buffers */ - for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) - { - mvr2r( Cldfb_RealBuffer_InOut[chInIdx][slotIdx], Cldfb_RealBuffer_tmp[chInIdx], CLDFB_NO_CHANNELS_MAX ); - mvr2r( Cldfb_ImagBuffer_InOut[chInIdx][slotIdx], Cldfb_ImagBuffer_tmp[chInIdx], CLDFB_NO_CHANNELS_MAX ); - } - /* set the buffers to zero */ - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - set_f( Cldfb_RealBuffer_InOut[chOutIdx][slotIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); - set_f( Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); - - set_f( dmxEnergy[chOutIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); - set_f( targetEnergy[chOutIdx], 0.0f, CLDFB_NO_CHANNELS_MAX ); - } - - /* Compute the target energy and DMX signal */ - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - for ( chInIdx = 0; chInIdx < inChannels; chInIdx++ ) - { - dmxCoeff = hLsSetUpConversion->dmxMtx[chInIdx][chOutIdx]; - if ( dmxCoeff == 0 ) - { - continue; - } - else - { - channel_active[chOutIdx] |= 1; - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - tmpDMXSig = dmxCoeff * Cldfb_RealBuffer_tmp[chInIdx][bandIdx]; - Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx] += tmpDMXSig; - targetEnergy[chOutIdx][bandIdx] += tmpDMXSig * tmpDMXSig; - - tmpDMXSig = dmxCoeff * Cldfb_ImagBuffer_tmp[chInIdx][bandIdx]; - Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx] += tmpDMXSig; - targetEnergy[chOutIdx][bandIdx] += tmpDMXSig * tmpDMXSig; - } - } - } - } - - /* Compute the DMX energy */ - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - if ( channel_active[chOutIdx] ) - { - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - tmpReal = Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx]; - tmpImag = Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx]; - - dmxEnergy[chOutIdx][bandIdx] = tmpReal * tmpReal + tmpImag * tmpImag; - } - } - } - - /* Peform energy smoothing */ - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - if ( channel_active[chOutIdx] ) - { - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - targetEnergy[chOutIdx][bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * targetEnergy[chOutIdx][bandIdx] + ( 1 - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->targetEnergyPrev[chOutIdx][bandIdx]; - dmxEnergy[chOutIdx][bandIdx] = LS_OUT_CONV_SMOOTHING_FACTOR * dmxEnergy[chOutIdx][bandIdx] + ( 1 - LS_OUT_CONV_SMOOTHING_FACTOR ) * hLsSetUpConversion->dmxEnergyPrev[chOutIdx][bandIdx]; - hLsSetUpConversion->targetEnergyPrev[chOutIdx][bandIdx] = targetEnergy[chOutIdx][bandIdx]; - hLsSetUpConversion->dmxEnergyPrev[chOutIdx][bandIdx] = dmxEnergy[chOutIdx][bandIdx]; - } - } - } - - /* Compute and perform equalization */ - for ( chOutIdx = 0; chOutIdx < outChannels; chOutIdx++ ) - { - if ( channel_active[chOutIdx] ) - { - for ( bandIdx = 0; bandIdx < hLsSetUpConversion->sfbCnt; bandIdx++ ) - { - ivas_lssetupconversion_computeEQFactor( &targetEnergy[chOutIdx][bandIdx], &dmxEnergy[chOutIdx][bandIdx], &EQ ); - Cldfb_RealBuffer_InOut[chOutIdx][slotIdx][bandIdx] *= EQ; - Cldfb_ImagBuffer_InOut[chOutIdx][slotIdx][bandIdx] *= EQ; - } - } - } - } - - pop_wmops(); - return; -} -#endif diff --git a/lib_dec/ivas_output_config.c b/lib_dec/ivas_output_config.c index 9b9d1b402..64995d8a0 100644 --- a/lib_dec/ivas_output_config.c +++ b/lib_dec/ivas_output_config.c @@ -36,9 +36,7 @@ #include "ivas_prot.h" #include "ivas_stat_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------------* @@ -49,7 +47,6 @@ void ivas_renderer_select( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) -#ifdef IVAS_FLOAT_FIXED { RENDERER_TYPE *renderer_type; AUDIO_CONFIG *internal_config; @@ -604,400 +601,3 @@ void ivas_renderer_select( return; } -#else -{ - RENDERER_TYPE *renderer_type; - AUDIO_CONFIG *internal_config; - AUDIO_CONFIG output_config; - AUDIO_CONFIG transport_config; - - int16_t nchan_internal; - - renderer_type = &( st_ivas->renderer_type ); - internal_config = &( st_ivas->intern_config ); - output_config = st_ivas->hDecoderConfig->output_config; - transport_config = st_ivas->transport_config; - - /* disabled rendering by default */ - *renderer_type = RENDERER_DISABLE; - - /*-----------------------------------------------------------------* - * Binaural rendering configurations - *-----------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - st_ivas->hCombinedOrientationData->shd_rot_max_order = -1; - } - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC; - } - else - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; - } - } - else /* ISM_MODE_DISC */ - { - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; - *internal_config = output_config; - } - else - { - *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; - *internal_config = IVAS_AUDIO_CONFIG_7_1_4; - } - } - } - else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT || ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && st_ivas->nchan_transport <= 2 ) ) - { - *internal_config = output_config; - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC; - } - else - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - *internal_config = IVAS_AUDIO_CONFIG_HOA3; - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - *renderer_type = RENDERER_BINAURAL_FASTCONV; - } - else - { - *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && *renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - *internal_config = IVAS_AUDIO_CONFIG_7_1_4; - } - - if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - if ( nchan_internal == 2 ) - { - st_ivas->hCombinedOrientationData->shd_rot_max_order = 1; - } - else if ( nchan_internal == 4 || nchan_internal == 3 ) - { - st_ivas->hCombinedOrientationData->shd_rot_max_order = 0; - } - else if ( nchan_internal == 6 || nchan_internal == 5 ) - { - st_ivas->hCombinedOrientationData->shd_rot_max_order = 2; - } - else if ( nchan_internal == 8 || nchan_internal == 7 ) - { - st_ivas->hCombinedOrientationData->shd_rot_max_order = 3; - } - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - *internal_config = output_config; - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL ) - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC; - } - else - { - *renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; - } - } - else - { - *internal_config = transport_config; - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( st_ivas->transport_config == IVAS_AUDIO_CONFIG_5_1 || st_ivas->transport_config == IVAS_AUDIO_CONFIG_7_1 ) && ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) && ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) - { - *renderer_type = RENDERER_BINAURAL_OBJECTS_TD; - } - else - { - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - *renderer_type = RENDERER_BINAURAL_MIXER_CONV; - } - else - { - *renderer_type = RENDERER_BINAURAL_FASTCONV; - } - -#if 0 // def DEBUGGING /*temp disabling this as paramMC crashes with CREND*/ - if ( st_ivas->hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_CREND ) - { - *renderer_type = RENDERER_BINAURAL_MIXER_CONV; - } - else if ( st_ivas->hRenderConfig->renderer_type_override == IVAS_RENDER_TYPE_OVERRIDE_FASTCONV ) - { - *renderer_type = RENDERER_BINAURAL_FASTCONV; - } -#endif - if ( st_ivas->hDecoderConfig->Opt_Headrotation || st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - /* force HOA3 domain for rotation*/ - *internal_config = IVAS_AUDIO_CONFIG_HOA3; - } - } - } - else - { - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - *renderer_type = RENDERER_BINAURAL_MIXER_CONV_ROOM; - } - else - { - *renderer_type = RENDERER_BINAURAL_FASTCONV_ROOM; - } - } - } - } - } - - /*-----------------------------------------------------------------* - * Non-binaural rendering configurations - *-----------------------------------------------------------------*/ - - else if ( st_ivas->ivas_format == MONO_FORMAT ) - { - if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX; - } - } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - if ( output_config != IVAS_AUDIO_CONFIG_STEREO && output_config != IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_MC; - } - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - if ( ( output_config == IVAS_AUDIO_CONFIG_STEREO ) && ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) ) - { - *renderer_type = RENDERER_NON_DIEGETIC_DOWNMIX; - } - else - { - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - *renderer_type = RENDERER_PARAM_ISM; - if ( output_config == IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_MONO_DOWNMIX; - } - else if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *renderer_type = RENDERER_DISABLE; - } - else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - *internal_config = IVAS_AUDIO_CONFIG_7_1_4; - } - } - else /* ISM_MODE_DISC */ - { - *renderer_type = RENDERER_TD_PANNING; - if ( output_config == IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_MONO_DOWNMIX; - } - else if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - } - else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - *renderer_type = RENDERER_DISABLE; - } - } - } - } - else if ( st_ivas->ivas_format == MASA_FORMAT || st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - IVAS_FORMAT ivas_format; - *renderer_type = RENDERER_DIRAC; - ivas_format = ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_NONE ) ? SBA_FORMAT : st_ivas->ivas_format; /* treat ISM_SBA_MODE_NONE just like SBA_FORMAT */ - - if ( ivas_format == SBA_FORMAT && ( output_config != IVAS_AUDIO_CONFIG_5_1 && output_config != IVAS_AUDIO_CONFIG_5_1_2 && output_config != IVAS_AUDIO_CONFIG_5_1_4 && output_config != IVAS_AUDIO_CONFIG_7_1 && output_config != IVAS_AUDIO_CONFIG_7_1_4 && output_config != IVAS_AUDIO_CONFIG_LS_CUSTOM && output_config != IVAS_AUDIO_CONFIG_MONO && output_config != IVAS_AUDIO_CONFIG_STEREO ) ) - { - if ( output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_FOA ) - { - *internal_config = output_config; - } - else if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *internal_config = IVAS_AUDIO_CONFIG_FOA; - } - else - { - *internal_config = IVAS_AUDIO_CONFIG_HOA3; - } - st_ivas->renderer_type = RENDERER_SBA_LINEAR_DEC; - } - else if ( ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) || - ( ivas_format == SBA_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_STEREO || output_config == IVAS_AUDIO_CONFIG_MONO ) ) ) - { - *renderer_type = RENDERER_DISABLE; - } - else if ( ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 ) ) - { - *renderer_type = RENDERER_DISABLE; - } - else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *renderer_type = RENDERER_STEREO_PARAMETRIC; - } - else if ( ivas_format == MASA_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - *renderer_type = RENDERER_DISABLE; - } - else if ( ivas_format == SBA_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_SBA_LINEAR_DEC; - } - else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *renderer_type = RENDERER_OSBA_STEREO; - } - else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_MONO_DOWNMIX; - } - else if ( ivas_format == SBA_ISM_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) ) - { - *renderer_type = RENDERER_OSBA_AMBI; - } - else if ( ivas_format == SBA_ISM_FORMAT && ( output_config == IVAS_AUDIO_CONFIG_5_1 || output_config == IVAS_AUDIO_CONFIG_5_1_2 || output_config == IVAS_AUDIO_CONFIG_5_1_4 || output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_7_1_4 || output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - *renderer_type = RENDERER_OSBA_LS; - } - else if ( ivas_format == SBA_ISM_FORMAT && output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - *renderer_type = RENDERER_SBA_LINEAR_DEC; - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - *renderer_type = RENDERER_DIRAC; - - if ( output_config == IVAS_AUDIO_CONFIG_MONO ) - { - *renderer_type = RENDERER_MONO_DOWNMIX; - } - else if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - *renderer_type = RENDERER_STEREO_PARAMETRIC; - } - else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - *renderer_type = RENDERER_DISABLE; - } - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - *internal_config = transport_config; - if ( st_ivas->mc_mode == MC_MODE_MCT && *internal_config != output_config ) - { - if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_MC; - } - else - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - *internal_config = transport_config; - if ( *internal_config != output_config ) - { - if ( output_config != IVAS_AUDIO_CONFIG_FOA && output_config != IVAS_AUDIO_CONFIG_HOA2 && output_config != IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_MC; - } - else - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - } - else - { - *renderer_type = RENDERER_MC_PARAMMC; - } - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - *internal_config = output_config; - - /* No rendering for 1TC to Mono or Stereo and 2TC to Stereo */ - if ( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - if ( st_ivas->nchan_transport == 1 ) - { - *renderer_type = RENDERER_DISABLE; - } - else if ( output_config == IVAS_AUDIO_CONFIG_STEREO && st_ivas->nchan_transport == 2 && !st_ivas->hOutSetup.separateChannelEnabled ) - { - *renderer_type = RENDERER_DISABLE; - } - else - { - *renderer_type = RENDERER_MCMASA_MONO_STEREO; - } - } - else - { - *renderer_type = RENDERER_DIRAC; - if ( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - *renderer_type = RENDERER_SBA_LINEAR_ENC; - *internal_config = transport_config; - } - else if ( transport_config == IVAS_AUDIO_CONFIG_5_1 && ( output_config == IVAS_AUDIO_CONFIG_7_1 || output_config == IVAS_AUDIO_CONFIG_5_1_4 ) ) - { - *internal_config = transport_config; - } - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_pca_dec.c b/lib_dec/ivas_pca_dec.c index dd9bf96e4..9e3fbe939 100644 --- a/lib_dec/ivas_pca_dec.c +++ b/lib_dec/ivas_pca_dec.c @@ -42,271 +42,3 @@ /*-----------------------------------------------------------------------* * Local function definitions *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int32_t ivas_bitstream_read_int32( - Decoder_State *st0, - const int16_t bits ) -{ - int32_t val; - - /* MSB */ - val = get_next_indice( st0, bits - 16 ) << 16; - - /* + LSB */ - val += get_next_indice( st0, 16 ); - - return val; -} - - -static void pca_dec_reset_dquat( - float *ql, - float *qr ) -{ - set_zero( ql, IVAS_PCA_INTERP ); - ql[0] = 1.0f; - - set_zero( qr, IVAS_PCA_INTERP ); - qr[0] = 1.0f; - - return; -} - - -static void pca_dec_reset_mem_eigvec( - PCA_DEC_STATE *hPCA ) -{ - int16_t i; - - for ( i = 0; i < ( IVAS_PCA_LEN_INTERP_EIG_DEC >> 4 ); i++ ) - { - eye_matrix( &hPCA->mem_eigVec_interp[16 * i], FOA_CHANNELS, 1.0f ); - } - - return; -} - - -static void pca_inv_transform_sub( - float *eigVec, - float *transformed_data[], /* i : input/transformed audio channels */ - const int16_t start, - const int16_t len, - const int16_t n_channels ) -{ - int16_t i, j, k; - float temp; - float buffer_data[FOA_CHANNELS]; - - for ( j = 0; j < len; j++ ) - { - for ( k = 0; k < n_channels; k++ ) - { - buffer_data[k] = transformed_data[k][j + start]; - } - - for ( k = 0; k < n_channels; k++ ) - { - temp = 0.0f; - for ( i = 0; i < n_channels; i++ ) - { - temp += eigVec[k * IVAS_PCA_INTERP + i] * buffer_data[i]; - } - transformed_data[k][j + start] = temp; - } - } - - return; -} - - -static void pca_dec_inv_transform( - PCA_DEC_STATE *hPCA, - float *ql, - float *qr, - const int16_t n_samples, - const int16_t n_channels, - float *decoded_data[] ) -{ - int16_t j; - int16_t slot_len; - float ql_interp[IVAS_PCA_LEN_INTERP_Q], qr_interp[IVAS_PCA_LEN_INTERP_Q]; - - quat_shortestpath( hPCA->prev_ql, ql, hPCA->prev_qr, qr ); - - pca_interp_preproc( hPCA->prev_ql, hPCA->prev_qr, ql, qr, IVAS_PCA_N_SLOTS, ql_interp, qr_interp ); - - slot_len = (int16_t) ( n_samples / IVAS_PCA_N_SLOTS ); - - for ( j = 0; j < IVAS_PCA_N_SLOTS; j++ ) - { - /* convert from double quaternion to 4D matrix */ - dquat2mat( &ql_interp[4 * j], &qr_interp[4 * j], &hPCA->mem_eigVec_interp[16 * j + IVAS_PCA_DELAY_CMP * 16] ); - - pca_inv_transform_sub( &hPCA->mem_eigVec_interp[16 * j], decoded_data, slot_len * j, slot_len, n_channels ); - } - - return; -} - - -static void pca_dec_update_dquat( - PCA_DEC_STATE *hPCA, - const float *ql, - const float *qr ) -{ - /* update state for next frame */ - mvr2r( qr, hPCA->prev_qr, IVAS_PCA_INTERP ); - mvr2r( ql, hPCA->prev_ql, IVAS_PCA_INTERP ); - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_pca_dec_init() - * - * Initialize PCA decoder - *------------------------------------------------------------------------*/ - -void ivas_pca_dec_init( - PCA_DEC_STATE *hPCA /* i/o: PCA decoder structure */ -) -{ - pca_dec_reset_dquat( hPCA->prev_ql, hPCA->prev_qr ); - pca_dec_reset_mem_eigvec( hPCA ); - - /* set counter saturated to 2 frames */ - hPCA->prev_pca_bypass = 2; - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_pca_read_bits() - * - * Decode PCA indexes - *------------------------------------------------------------------------*/ - -void ivas_pca_read_bits( - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - PCA_DEC_STATE *hPCA ) -{ - /*first bit in the PCA payload (first bit after 3 header bits) signals bypass/active*/ - hPCA->pca_bypass = get_next_indice( st0, 1 ); - - if ( hPCA->pca_bypass == PCA_MODE_INACTIVE ) - { - return; - } - - hPCA->index[0] = ivas_bitstream_read_int32( st0, IVAS_PCA_QBITS - 1 ); - hPCA->index[1] = ivas_bitstream_read_int32( st0, IVAS_PCA_QBITS ); - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_pca_dec() - * - * PCA decoder - *------------------------------------------------------------------------*/ - -void ivas_pca_dec( - PCA_DEC_STATE *hPCA, /* i/o: PCA decoder structure */ - const int16_t output_frame, /* i : output frame length */ - const int16_t n_channels, /* i : number of channels */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int32_t last_ivas_total_brate, /* i : last IVAS total bitrate */ - const int16_t bfi, /* i : bad frame indicator */ - float *pcm_out[] /* o : output audio channels */ -) -{ - float ql[IVAS_PCA_INTERP], qr[IVAS_PCA_INTERP]; - int16_t pca_bypass; - - mvr2r( &hPCA->mem_eigVec_interp[IVAS_PCA_N_SLOTS * 16], hPCA->mem_eigVec_interp, IVAS_PCA_DELAY_CMP * 16 ); - - /* @@@TODO: check how ivas_total_brate is set if bfi == 1 */ // ToDo: and what happens in DTX where "ivas_total_brate" can be close to zero? - - /* handle bit rate switching */ - if ( ivas_total_brate != PCA_BRATE || ( ivas_total_brate == PCA_BRATE && n_channels > FOA_CHANNELS ) ) - { - /* set PCA by-pass mode in current frame and interpolate transform as previous frame used PCA */ - pca_dec_reset_dquat( ql, qr ); - - if ( ( last_ivas_total_brate != PCA_BRATE ) || ( last_ivas_total_brate == PCA_BRATE && hPCA->prev_pca_bypass > 1 ) ) - { - pca_dec_reset_mem_eigvec( hPCA ); - } - else - { - pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); - } - - pca_dec_update_dquat( hPCA, ql, qr ); - hPCA->prev_pca_bypass += 1; - - if ( hPCA->prev_pca_bypass > 2 ) - { - hPCA->prev_pca_bypass = 2; - } - - return; - } - - if ( !bfi ) - { - /* set PCA by-pass mode indicator */ - pca_bypass = hPCA->pca_bypass; - } - else - { - pca_bypass = hPCA->prev_pca_bypass; - } - - if ( pca_bypass == PCA_MODE_INACTIVE ) - { - pca_dec_reset_dquat( ql, qr ); - - if ( hPCA->prev_pca_bypass > 1 ) //&& (hPCA->pca_off_hangover == 0)) - { - /* copy input data into output directly as previous frame was already in by-pass mode */ - pca_dec_reset_mem_eigvec( hPCA ); - } - else - { - pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); - } - - pca_dec_update_dquat( hPCA, ql, qr ); - - hPCA->prev_pca_bypass += 1; - hPCA->prev_pca_bypass = min( hPCA->prev_pca_bypass, 2 ); - - return; - } - - if ( !bfi ) - { - pca_dec_s3( hPCA->index[0], ql ); - pca_dec_s3( hPCA->index[1], qr ); - } - else - { - /* freeze */ - mvr2r( hPCA->prev_ql, ql, IVAS_PCA_INTERP ); - mvr2r( hPCA->prev_qr, qr, IVAS_PCA_INTERP ); - } - - pca_dec_inv_transform( hPCA, ql, qr, output_frame, n_channels, pcm_out ); - - /* update for next frame */ - pca_dec_update_dquat( hPCA, ql, qr ); - hPCA->prev_pca_bypass = 0; - - return; -} -#endif diff --git a/lib_dec/ivas_pca_dec_fx.c b/lib_dec/ivas_pca_dec_fx.c index bec9d70d9..1700c2527 100644 --- a/lib_dec/ivas_pca_dec_fx.c +++ b/lib_dec/ivas_pca_dec_fx.c @@ -32,7 +32,6 @@ #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "prot.h" #include "ivas_prot.h" #include @@ -329,4 +328,3 @@ void ivas_pca_dec_fx( move16(); return; } -#endif diff --git a/lib_dec/ivas_post_proc.c b/lib_dec/ivas_post_proc.c index b98b5a6b9..ce361c894 100644 --- a/lib_dec/ivas_post_proc.c +++ b/lib_dec/ivas_post_proc.c @@ -51,105 +51,6 @@ * - in CPE_TD, post-processing on decoded channels before upmixing *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_post_proc( - SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - const int16_t n, /* i : channel number */ - float synth[], /* i/o: output synthesis signal */ - float *output[CPE_CHANNELS], /* i/o: output synthesis signal */ - const int16_t output_frame, /* i : output frame length */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - int16_t k; - int16_t delay_comp; - int32_t output_Fs; - Decoder_State **sts; - TCX_LTP_DEC_HANDLE hTcxLtpDec; - - if ( hSCE != NULL ) - { - sts = hSCE->hCoreCoder; - } - else - { - sts = hCPE->hCoreCoder; - } - - output_Fs = sts[0]->output_Fs; - - if ( ( sts[n]->element_mode != IVAS_CPE_DFT && !( sba_dirac_stereo_flag && sts[n]->element_mode != IVAS_CPE_MDCT ) ) || ( sts[n]->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) - { - if ( sts[n]->hTcxLtpDec != NULL ) - { - hTcxLtpDec = sts[n]->hTcxLtpDec; - - if ( sts[n]->core != TCX_20_CORE && sts[n]->core != TCX_10_CORE ) - { - /* TCX-LTP Postfilter: used in Mode 1 to update memories and to avoid discontinuities when the past frame was TCX */ - tcx_ltp_post_flt( sts[n], hTcxLtpDec, ACELP_CORE, output_frame, 0, synth, NULL ); - } - else - { - /* set delay */ - delay_comp = NS2SA( output_Fs, DELAY_CLDFB_NS ); - - if ( !( sts[n]->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) && sts[n]->element_mode != IVAS_CPE_MDCT ) - { - mvr2r( sts[n]->prev_synth_buffer, sts[n]->hTcxDec->FBTCXdelayBuf_float, 0 ); - mvr2r( sts[n]->delay_buf_out, sts[n]->hTcxDec->FBTCXdelayBuf_float + 0, delay_comp ); - } - else if ( sba_dirac_stereo_flag && sts[n]->element_mode == IVAS_CPE_MDCT ) - { - int16_t numZeros = (int16_t) ( NS2SA( output_Fs, N_ZERO_MDCT_NS ) ); - mvr2r( sts[n]->hHQ_core->old_out + numZeros, sts[n]->hTcxDec->FBTCXdelayBuf_float, delay_comp ); - } - - tcx_ltp_post_flt( sts[n], hTcxLtpDec, sts[n]->core, output_frame, NS2SA( output_Fs, ACELP_LOOK_NS ) + delay_comp, synth, sts[n]->hTcxDec->FBTCXdelayBuf_float ); - } - } - } - else /* IVAS_CPE_DFT */ - { - int16_t pit_res_max_past_tmp; - - pit_res_max_past_tmp = sts[0]->pit_res_max_past; - for ( k = 0; k < hCPE->nchan_out; k++ ) - { - if ( k == 0 ) - { - hTcxLtpDec = sts[0]->hTcxLtpDec; - } - else - { - hTcxLtpDec = hCPE->hStereoDft->hTcxLtpDec; - /* copy LTP side-info of downmix channel also to right channel struct */ - hTcxLtpDec->tcxltp = sts[0]->hTcxLtpDec->tcxltp; - hTcxLtpDec->tcxltp_gain_float = sts[0]->hTcxLtpDec->tcxltp_gain_float; - hTcxLtpDec->tcxltp_pitch_int = sts[0]->hTcxLtpDec->tcxltp_pitch_int; - hTcxLtpDec->tcxltp_pitch_fr = sts[0]->hTcxLtpDec->tcxltp_pitch_fr; - /* revert update of pit_res_max_past to have correct value also in right channel */ - sts[0]->pit_res_max_past = pit_res_max_past_tmp; - } - - /*TCX-LTP*/ - if ( sts[0]->core != TCX_20_CORE && sts[0]->core != TCX_10_CORE ) - { - /* update memories and to avoid discontinuities when the past frame was TCX */ - tcx_ltp_post_flt( sts[0], hTcxLtpDec, ACELP_CORE, output_frame, 0, output[k], NULL ); - } - else - { - /*Use channel 0 side info.*/ - tcx_ltp_post_flt( sts[0], hTcxLtpDec, TCX_20_CORE, output_frame, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ), output[k], hCPE->output_mem[k] ); - } - } - } - - return; -} -#else void ivas_post_proc_fx( SCE_DEC_HANDLE hSCE, /* i/o: SCE decoder structure */ CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -265,7 +166,6 @@ void ivas_post_proc_fx( return; } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- @@ -274,7 +174,6 @@ void ivas_post_proc_fx( * core switching in DFT stereo *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_dec_core_switching_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 output_fx[], /* i/o: synthesis @internal Fs q*/ @@ -831,384 +730,3 @@ void stereo_dft_dec_core_switching_fx( return; } -#else -void stereo_dft_dec_core_switching( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float output[], /* i/o: synthesis @internal Fs */ - float synth[], /* i/o: synthesis @output Fs */ - float hb_synth[], /* i/o: hb synthesis */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ - const int16_t output_frame, /* i : output frame length */ - const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ - const int16_t sba_dirac_stereo_dtx_flag /* i : DTX indicator for SBA DirAC stereo */ -) -{ - int16_t i, tmps; - int16_t delay_dft_dec, delay_dft_dec_lb, delay_tdbwe, delay_comp; - int16_t L_frameTCX; - int32_t output_Fs; - Decoder_State *st; - int16_t predelay, ap_fade_len; - float pAp_input[L_FRAME16k]; - float tcx_core_buf[L_FRAME16k]; - float synth_tmp[L_FRAME48k]; - - st = hCPE->hCoreCoder[0]; /* in DFT stereo, only M channel is decoded by the CoreCoder */ - output_Fs = st->output_Fs; - L_frameTCX = st->hTcxDec->L_frameTCX; - - /*TBE*/ - delay_tdbwe = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); - delay_dft_dec = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); - delay_dft_dec_lb = NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT_DELAY_DEC_BWE_NS ); - - /* TCX/ACELP/HQ-CORE->TCX */ - tmps = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); /*cross-fading size @ FB*/ - delay_comp = NS2SA( st->L_frame * FRAMES_PER_SEC, DELAY_BWE_TOTAL_NS ); /*cross-fading size @ LB*/ - - /* resample DFT analysis memories in case of internal sampling rate change */ - if ( st->last_L_frame != st->L_frame && st->last_L_frame <= L_FRAME16k && st->L_frame <= L_FRAME16k ) - { - lerp_flt( hCPE->input_mem_LB[0], hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - lerp_flt( hCPE->input_mem_BPF[0], hCPE->input_mem_BPF[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - - if ( st->prev_bfi && !( st->last_core_bfi == ACELP_CORE && st->last_con_tcx == 1 ) ) - { - /* last_core needed for correctly decoding ACELP->TCX/HQ switching frames in ivas_core_dec(). - In the following steps the decoder needs to consider if the core was changed due to a lost frame to apply the correct transition */ - st->last_core = st->last_core_bfi; - } - - if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE || ( st->bfi == 1 && st->core == ACELP_CORE && st->con_tcx == 1 ) ) - { - if ( ( ( st->last_core != ACELP_CORE || ( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) ) && st->last_core != AMR_WB_CORE ) || ( sba_dirac_stereo_dtx_flag && st->cng_type == FD_CNG ) ) /* TCX / HQ-CORE -> TCX / HQ-CORE */ - { - /* In case of a TCX to ACELP switch next frame */ - mvr2r( &output[st->L_frame - NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - - /* BPF */ - if ( st->p_bpf_noise_buf_float && st->core != HQ_CORE ) - { - stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf_float, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 2, 0 ); - } - /* st->p_bpf_noise_buf not updated for HQ core -> skip analysis and set input memory to zero */ - else if ( st->p_bpf_noise_buf_float && st->core == HQ_CORE ) - { - set_zero( hCPE->input_mem_BPF[0], STEREO_DFT32MS_OVL_16k ); - } - - /* TCX */ - stereo_dft_dec_analyze( hCPE, synth, DFT, 0, L_frameTCX, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); - } - else if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE ) /* ACELP -> TCX/HQ */ - { - if ( st->last_core_brate <= SID_2k40 && st->element_mode == IVAS_SCE ) - { - int16_t mem_len = NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); - for ( i = 0; i < mem_len; i++ ) - { - hCPE->input_mem[0][i] *= ( mem_len - i ) / mem_len; - } - - /* Update FB input buff with hb synth for last delay_tdbwe sampled */ - for ( i = 0; i < delay_tdbwe; i++ ) - { - hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] += hb_synth[i]; - } - } - else - { - /* Update FB input buff with hb synth for last delay_tdbwe sampled */ - for ( i = 0; i < delay_tdbwe; i++ ) - { - hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] = hb_synth[i]; - } - } - - /* cross-fading between (delayed) TBE and FB-TCX over 2.3125ms */ - mvr2r( synth, synth_tmp, output_frame ); - for ( i = 0; i < tmps; i++ ) - { - synth_tmp[i] = ( hb_synth[i + delay_tdbwe] * ( tmps - i ) + synth[i] * i ) / tmps; - } - - /* FB-TCX */ - stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, L_frameTCX, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); - - if ( !st->tcxonly ) - { - if ( hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) - { - mvr2r( output, tcx_core_buf, L_FRAME16k ); - } - /* fading-out LB-TCX/ACELP */ - for ( i = 0; i < delay_comp; i++ ) - { - output[i] = ( output[i] * ( delay_comp - i ) ) / delay_comp; - } - - /* In case of TCX frames, output LB TCX is zeroed out until the end but in case of an TCX->ACELP switch, this memory is needed, hence it is backed up */ - /* Unlike the case when DFT32MS is disabled, there is only 1 DFT analysis window, hence in the TCX frame we don't want to do a DFT analysis for LB TCX - but in a potential ACELP frame, we want the memories of the LB TCX for the last OLA samples so that HB analysis can be skipped */ - mvr2r( &output[st->L_frame - NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - - /*zero the rest for avoiding adding contribution except the last samples which are not considered in DFT analysis (potentially used in next ACELP frame)*/ - if ( st->last_core_brate > SID_2k40 ) - { - for ( ; i < st->L_frame; i++ ) - { - output[i] = 0.0f; - } - - stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB_ADD, 1, 0 ); - - /* BPF */ - if ( st->p_bpf_noise_buf_float ) - { - set_zero( hCPE->input_mem_BPF[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - } - } - } - } - else /* ACELP core */ - { - if ( st->core_brate <= SID_2k40 && !( sba_dirac_stereo_dtx_flag ) ) - { - set_zero( hCPE->input_mem[0], NS2SA( st->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - set_zero( hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - - /* CNG generated in ivas_cpe_dec() */ - } - else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_core == HQ_CORE ) /* TCX/HQ -> ACELP */ - { - if ( ( st->last_L_frame <= L_FRAME16k && st->L_frame <= L_FRAME16k ) || ( sba_dirac_stereo_dtx_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) ) - { - /* In case of a TCX to ACELP switch, retrieve the LB-TCX memories for the first STEREO_DFT32MS_OVL_NS NS of OLA */ - lerp_flt( hCPE->hStereoDft->buff_LBTCX_mem, hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( st->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - - if ( sba_dirac_stereo_dtx_flag && st->core_brate == SID_2k40 && st->cng_type == FD_CNG ) - { - int16_t nZeros; - nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); - delay_comp = NS2SA( st->output_Fs, DELAY_CLDFB_NS ); - - mvr2r( &st->hHQ_core->old_out[nZeros - delay_comp - NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS )], hCPE->input_mem[0], NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - mvr2r( synth, synth_tmp, output_frame ); - - int16_t mem_len; - mem_len = NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); - float fac; - fac = 1.0f / mem_len; - for ( i = 0; i < mem_len; i++ ) - { - hCPE->input_mem_LB[0][i] *= ( 1 - i * fac ); - } - set_zero( output, st->L_frame ); - - stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); - - /* BPF */ - if ( st->p_bpf_noise_buf_float ) - { - stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf_float, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); - } - } - else - { - /* ACELP */ - for ( i = 0; i < ( NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec_lb ); i++ ) - { - hCPE->input_mem_LB[0][i] = 0.f; - } - /* ACELP fading-in*/ - for ( i = 0; i < delay_dft_dec_lb; i++ ) - { - hCPE->input_mem_LB[0][NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec_lb + i] *= (float) ( i ) / (float) ( delay_dft_dec_lb ); - } - - stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); - - /* BPF */ - if ( st->p_bpf_noise_buf_float ) - { - stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf_float, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); - } - - /* Fading-in TD-BWE, Fading-out FB-TCX*/ - mvr2r( synth, synth_tmp, output_frame ); - if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - for ( i = 0; i < delay_dft_dec; i++ ) /* 1.25 ms of hb_synth fade-in and TCX fade-out */ - { - hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec + i] = ( hb_synth[delay_tdbwe - delay_dft_dec + i] * ( i ) + hCPE->input_mem[0][NS2SA( L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) - delay_dft_dec + i] * ( delay_dft_dec - i ) ) / ( delay_dft_dec ); - } - for ( i = 0; i < delay_dft_dec; i++ ) /* 1.25 ms of hb_synth fade out. ICBWE fade in performed in time domain here */ - { - synth_tmp[i] = ( hb_synth[delay_tdbwe - delay_dft_dec + i] * ( delay_dft_dec - i ) ) / delay_dft_dec; - } - - for ( ; i < output_frame; i++ ) - { - synth_tmp[i] = 0; - } - } - } - - if ( sba_dirac_stereo_dtx_flag ) - { - stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 0, 0 ); - } - else if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_HB_ADD, 1, 0 ); - } - else - { - stereo_dft_dec_analyze( hCPE, synth_tmp, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 1, 0 ); - } - } - else /* ACELP -> ACELP */ - { - if ( sba_dirac_stereo_dtx_flag && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) - { - set_zero( output, st->L_frame ); - } - /* this needs an indication for sba2stereo in general */ - else if ( hCPE->element_mode == IVAS_SCE && st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG ) - { - lerp_flt( hCPE->input_mem[0], hCPE->input_mem_LB[0], NS2SA( st->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ), NS2SA( output_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - - /* ACELP synthesis @ internal sampling rate */ - stereo_dft_dec_analyze( hCPE, output, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_LB, 0, 0 ); - - /* BPF */ - if ( st->p_bpf_noise_buf_float ) - { - stereo_dft_dec_analyze( hCPE, st->p_bpf_noise_buf_float, DFT, 0, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_BPF, 0, 0 ); - } - - /* BWE */ - if ( sba_dirac_stereo_dtx_flag && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) - { - stereo_dft_dec_analyze( hCPE, synth, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 0, 0 ); - } - else if ( st->extl != -1 || ( st->bws_cnt > 0 && st->core == ACELP_CORE ) ) - { - stereo_dft_dec_analyze( hCPE, hb_synth, DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB_ADD, 2, -delay_tdbwe ); - } - } - } - - /*----------------------------------------------------------------* - * enhanced stereo filling: allpass filter - *----------------------------------------------------------------*/ - - if ( hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF ) - { - if ( st->sr_core == INT_FS_12k8 ) - { - ap_fade_len = STEREO_DFT_ALLPASS_FADELEN_12k8; - } - else - { - ap_fade_len = STEREO_DFT_ALLPASS_FADELEN_16k; - } - - if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || st->core == HQ_CORE || ( st->bfi == 1 && st->core == ACELP_CORE && st->con_tcx == 1 ) ) - { - int16_t numZeros = (int16_t) ( NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); - float tmp_fade[max( STEREO_DFT_ALLPASS_FADELEN_12k8, STEREO_DFT_ALLPASS_FADELEN_16k )]; - - mvr2r( st->hHQ_core->old_outLB + numZeros, hCPE->hStereoDft->ap_fade_mem, ap_fade_len ); - - if ( st->last_core == ACELP_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) && !st->tcxonly ) - { - mvr2r( tcx_core_buf, pAp_input, st->L_frame ); - } - else - { - mvr2r( output, pAp_input, st->L_frame ); - } - - if ( st->last_core == ACELP_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) && !st->tcxonly ) /* ACELP -> TCX/HQ-Core */ - { - mvr2r( tcx_core_buf, tmp_fade, ap_fade_len ); - for ( i = 0; i < ap_fade_len; i++ ) - { - pAp_input[i] = ( pAp_input[i] * i + tmp_fade[i] * ( ap_fade_len - i ) ) / ap_fade_len; - } - } - } - else - { - mvr2r( output, pAp_input, st->L_frame ); - if ( st->last_core != ACELP_CORE ) /* TCX/HQ-Core -> ACELP */ - { - for ( i = 0; i < ap_fade_len; i++ ) - { - pAp_input[i] = ( pAp_input[i] * i + hCPE->hStereoDft->ap_fade_mem[i] * ( ap_fade_len - i ) ) / ap_fade_len; - } - } - } - predelay = NS2SA( st->sr_core, DELAY_BWE_TOTAL_NS ); - - /* apply predelay to have same overall filter delay for all cases */ - delay_signal_float( pAp_input, st->L_frame, hCPE->hStereoDft->ap_delay_mem, predelay ); - - - /* input zeroes for transient frames */ - if ( hCPE->hStereoDft->attackPresent ) - { - float inv_tmps = 1.f / ap_fade_len; - if ( hCPE->hStereoDft->ap_wasTransient ) - { - set_zero( pAp_input, ap_fade_len ); - } - else - { - for ( i = 0; i < ap_fade_len; i++ ) - { - pAp_input[i] *= ( ap_fade_len - i ) * inv_tmps; - } - } - set_zero( pAp_input + ap_fade_len, st->L_frame - ap_fade_len ); - hCPE->hStereoDft->ap_wasTransient = 1; - } - else if ( hCPE->hStereoDft->ap_wasTransient ) - { - float inv_tmps = 1.f / ap_fade_len; - for ( i = 0; i < ap_fade_len; i++ ) - { - pAp_input[i] *= i * inv_tmps; - } - hCPE->hStereoDft->ap_wasTransient = 0; - } - - /* apply 5-stage allpass, each stage consisting of a nested allpass pair */ - filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap1 ); - filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap2 ); - filter_with_allpass( pAp_input, pAp_input, st->L_frame, &hCPE->hStereoDft->ap3 ); - - /* apply DFT to allpass-filtered signal */ - stereo_dft_dec_analyze( hCPE, pAp_input, DFT, 1, st->L_frame, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); - } - - if ( st->core == ACELP_CORE ) - { - if ( !use_cldfb_for_dft ) /* Skip this for DFT Stereo mono output at non-residual bitrates */ - { - lerp_flt( output, synth, output_frame, hCPE->hCoreCoder[0]->L_frame ); /* Dirty resampling, but should be good enough for ECU analysis */ - } - if ( !use_cldfb_for_dft || ( ( st->core_brate == FRAME_NO_DATA || st->core_brate == SID_2k40 ) && st->cng_type == LP_CNG && st->extl == SWB_CNG && hCPE->nchan_out == 1 ) ) - { - v_add( synth, hb_synth, synth, output_frame ); /* Use one channel TD-BWE for ECU analysis buffer */ - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_qmetadata_dec.c b/lib_dec/ivas_qmetadata_dec.c index 47f1bdb60..434fc958d 100644 --- a/lib_dec/ivas_qmetadata_dec.c +++ b/lib_dec/ivas_qmetadata_dec.c @@ -43,14 +43,11 @@ #include "prot_fx.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_decode_diffuseness( UWord16 *bitstream, Word16 *index, IVAS_QDIRECTION *q_direction, UWord16 *diffuseness_index_max_ec_frame ); static Word16 ivas_qmetadata_entropy_decode_df_ratio( UWord16 *bitstream, Word16 *index, IVAS_QDIRECTION *q_direction, Word16 *dfRatio_bits ); static Word16 ivas_qmetadata_raw_decode_dir_fx( IVAS_QDIRECTION *q_direction, UWord16 *bitstream, Word16 *index, const Word16 nbands, const Word16 start_band, const Word16 hrmasa_flag ); @@ -79,36 +76,6 @@ static Word16 read_surround_coherence( UWord16 *bitstream, Word16 *p_bit_pos, IV static ivas_error read_huf( Word16 *num_bits_read, const UWord16 *bitstream, UWord16 *out, const Word16 start_pos, const Word16 len, const Word16 *huff_code, const Word16 max_len ); const Word16 inv_dfRatio_qsteps[9] = { 0, 0, ONE_IN_Q14, 0, 5461, 0, 0, 0, 2341 }; // Q14 -#else -static int16_t ivas_qmetadata_entropy_decode_diffuseness( uint16_t *bitstream, int16_t *index, IVAS_QDIRECTION *q_direction, uint16_t *diffuseness_index_max_ec_frame ); -static int16_t ivas_qmetadata_entropy_decode_df_ratio( uint16_t *bitstream, int16_t *index, IVAS_QDIRECTION *q_direction, int16_t *dfRatio_bits ); -static int16_t ivas_qmetadata_raw_decode_dir( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *index, const int16_t nbands, const int16_t start_band, const int16_t hrmasa_flag ); -static uint16_t ivas_qmetadata_DecodeQuasiUniform( const uint16_t *bitstream, int16_t *index, const uint16_t alphabet_size ); -static int16_t ivas_qmetadata_ReorderElevationDecoded( const int16_t elev_dist, const int16_t elev_avg, const int16_t elev_alph ); -static int16_t read_directions( IVAS_QDIRECTION *q_direction, const uint8_t coding_subbands, const uint8_t masa_subframes, uint16_t *bitstream, int16_t *pbit_pos, int16_t *ind_order ); -static int16_t read_common_direction( uint16_t *bitstream, IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t no_subframes, const int16_t bits_total, int16_t *pbit_pos ); -static int16_t decode_azimuth( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *pbit_pos, const int16_t idx_subband, const int16_t masa_subframes ); -static int16_t decode_fixed_rate( IVAS_QDIRECTION *q_direction, const uint16_t *bitstream, int16_t *pbit_pos, const int16_t b, const int16_t nblocks ); -static int16_t ivas_qmetadata_entropy_decode_diffuseness_hr_512( uint16_t *bitstream, int16_t *index, IVAS_QDIRECTION *q_direction ); -static int16_t ivas_qmetadata_entropy_decode_dir( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *index, const uint16_t diffuseness_index_max_ec_frame, const int16_t nbands, const int16_t start_band, const int16_t hrmasa_flag ); -static int16_t read_surround_coherence_hr( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData ); -static int16_t decode_elevation( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *pbit_pos, const int16_t j, const int16_t masa_subframes ); -static int16_t decode_azimuth2D( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, const int16_t coding_subbands, int16_t *pbit_pos, const int16_t no_frames ); -static void set_zero_direction( IVAS_QDIRECTION *q_direction, const int16_t idx_band, const int16_t len ); -static int16_t read_truncGR_azimuth( uint16_t *bitstream, IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t no_subframes, int16_t *pbit_pos ); -static void decode_spread_coherence( IVAS_QMETADATA_HANDLE hQMetaData, int16_t idx_d, const int16_t no_frames, const int16_t hrmasa_flag ); -static void decode_combined_index( uint64_t comb_index, const int16_t *no_cv_vec, uint16_t *index, const int16_t len ); -static int16_t ivas_diffuseness_huff_ec_decode( const uint16_t *bitstream, int16_t *index, int16_t av ); -static int16_t read_GR_min_removed_data( uint16_t *bitstream, int16_t *p_bit_pos, const int16_t *no_cv_vec, const int16_t no_data, int16_t *decoded_idx, const int16_t no_symb ); -static int16_t decode_fixed_rate_composed_index_coherence( uint16_t *bitstream, int16_t *p_bit_pos, const int16_t no_bands, int16_t *no_cv_vec, uint16_t *decoded_index, const int16_t no_symb ); -static int16_t read_coherence_data_hr_512( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData, const int16_t idx_dir, const int16_t nbits_coh ); -static void read_stream_dct_coeffs_omasa( int16_t *q_idx, float *q_dct_data, const int16_t len_stream, uint16_t *bit_stream, int16_t *index, const int16_t first_line ); -static int16_t ivas_qmetadata_raw_decode_dir_512( IVAS_QDIRECTION *q_direction, uint16_t *bitstream, int16_t *index, const int16_t nbands, const int16_t start_band, const SPHERICAL_GRID_DATA *sph_grid16 ); -static int16_t read_surround_coherence( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData ); -static ivas_error read_huf( int16_t *num_bits_read, const uint16_t *bitstream, uint16_t *out, const int16_t start_pos, const int16_t len, const int16_t *huff_code, const int16_t max_len ); -static int16_t read_coherence_data( uint16_t *bitstream, int16_t *p_bit_pos, IVAS_QMETADATA *hQMetaData, const int16_t idx_dir, const int16_t hrmasa_flag ); -#endif - /*-----------------------------------------------------------------------* * Global function definitions @@ -119,7 +86,6 @@ static int16_t read_coherence_data( uint16_t *bitstream, int16_t *p_bit_pos, IVA * * Main function for decoding Spatial Metadata *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits read */ Word16 ivas_qmetadata_dec_decode( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ @@ -219,7 +185,7 @@ Word16 ivas_qmetadata_dec_decode( { IF( EQ_16( hQMetaData->twoDirBands[b], 1 ) ) { - dfRatio_bits[dir2band] = ivas_get_df_ratio_bits_hodirac( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); /*Q0*/ + dfRatio_bits[dir2band] = ivas_get_df_ratio_bits_hodirac_fx( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); /*Q0*/ move16(); dir2band = add( dir2band, 1 ); } @@ -239,7 +205,7 @@ Word16 ivas_qmetadata_dec_decode( { IF( EQ_16( hQMetaData->twoDirBands[b], 1 ) ) { - dfRatio_bits[dir2band] = ivas_get_df_ratio_bits( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); /*Q0*/ + dfRatio_bits[dir2band] = ivas_get_df_ratio_bits_fx( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); /*Q0*/ move16(); dir2band = add( dir2band, 1 ); } @@ -602,7 +568,7 @@ Word16 ivas_qmetadata_dec_decode( } } - small_reduction_direction( q_direction, bits_temp, raw_flag, &diff_bits ); + small_reduction_direction_fx( q_direction, bits_temp, raw_flag, &diff_bits ); FOR( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) { @@ -770,821 +736,267 @@ Word16 ivas_qmetadata_dec_decode( } return sub( start_index_0, *index ); } -#else -int16_t ivas_qmetadata_dec_decode( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, /* i/o: bitstream position */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_dec_decode_hr_384_512() + * + * Main function for decoding Spatial Metadata at HRs + *-----------------------------------------------------------------------*/ + +/*! r: number of bits read */ +Word16 ivas_qmetadata_dec_decode_hr_384_512( + IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ + UWord16 *bitstream, /* i : bitstream Q0*/ + Word16 *index, /* i/o: bitstream position Q0*/ + const SPHERICAL_GRID_DATA *sph_grid16, /* i : spherical grid for deindexing */ + const Word16 bits_sph_idx, + const Word16 bits_sp_coh, + const UWord8 ncoding_bands_config ) { - int16_t d, b, m; - uint16_t diffuseness_index_max_ec_frame; - uint16_t diffuseness_index_max_ec_frame_pre[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t bits_dir_raw_pre[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t dir2band; - int16_t bits_diff_sum; - int16_t bits_diff, bits_coherence; - int16_t bits_dir_raw; - int16_t bits_dir; - int16_t nbands, nblocks, start_band; + Word16 d, b, m; + Word16 nbands, start_band; IVAS_QDIRECTION *q_direction; - int16_t start_index_0; - int16_t total_bits_1dir; - int16_t signal_bits; - int16_t bits_no_dirs_coh, bits_sur_coherence; - uint16_t all_coherence_zero; - int16_t ec_flag; - int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t diff_bits; - int16_t dfRatio_bits[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t no_TF; - int16_t p[MASA_MAXIMUM_CODING_SUBBANDS], dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bits_dir_target; - int16_t bits_dir_used; - int16_t reduce_bits; - int16_t ind_order[MASA_MAXIMUM_CODING_SUBBANDS]; - + Word16 start_index_0; + UWord16 all_coherence_zero; + Word16 p[MASA_MAXIMUM_CODING_SUBBANDS], dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 codedBands, sf_nbands0, sf_nbands1; + sf_nbands1 = 1; + move16(); + Word64 W_nrg_ratio[2][MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - ec_flag = 0; start_index_0 = *index; + move16(); + /* read number of higher inactive/not encoded bands */ + IF( bitstream[( *index )--] ) + { + codedBands = sub( sub( MASA_MAXIMUM_CODING_SUBBANDS, ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 1 ) ), 1 ); /*Q0*/ + } + ELSE + { + codedBands = MASA_MAXIMUM_CODING_SUBBANDS; /*Q0*/ + move16(); + } + FOR( b = codedBands; b < ncoding_bands_config; b++ ) + { + FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) + { + + hQMetaData->q_direction[0].band_data[b].azimuth_fx[m] = 0; + move32(); + hQMetaData->q_direction[0].band_data[b].elevation_fx[m] = 0; + move32(); + hQMetaData->q_direction[0].band_data[b].energy_ratio_fx[m] = 0; + move32(); + W_nrg_ratio[0][b][m] = 0; + move64(); + + test(); + IF( hQMetaData->coherence_flag && hQMetaData->q_direction[0].coherence_band_data != NULL ) + { + hQMetaData->q_direction[0].coherence_band_data[b].spread_coherence[m] = 0u; + move16(); + } + + IF( EQ_32( hQMetaData->no_directions, 2 ) ) + { + + hQMetaData->q_direction[1].band_data[b].azimuth_fx[m] = 0; + move32(); + hQMetaData->q_direction[1].band_data[b].elevation_fx[m] = 0; + move32(); + hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = 0; + move32(); + W_nrg_ratio[1][b][m] = 0; + move64(); + + test(); + IF( hQMetaData->coherence_flag && hQMetaData->q_direction[1].coherence_band_data != NULL ) + { + hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence[m] = 0u; + move16(); + } + } + + test(); + IF( hQMetaData->coherence_flag && hQMetaData->surcoh_band_data != NULL ) + { + hQMetaData->surcoh_band_data[b].surround_coherence[m] = 0u; + move16(); + } + } + + IF( EQ_32( hQMetaData->no_directions, 2 ) ) + { + hQMetaData->twoDirBands[b] = 0; + move16(); + } + } + sf_nbands0 = hQMetaData->q_direction[0].cfg.nbands; /*Q0*/ + move16(); + + hQMetaData->q_direction[0].cfg.nbands = codedBands; /*Q0*/ + move16(); /*Coherence flag decoding*/ - bits_no_dirs_coh = 0; all_coherence_zero = 1; - if ( hQMetaData->coherence_flag ) + move16(); + IF( hQMetaData->coherence_flag ) { /* read if coherence is zero */ - all_coherence_zero = bitstream[( *index )--]; - bits_no_dirs_coh += 1; + all_coherence_zero = bitstream[( *index )--]; /*Q0*/ + move16(); } - hQMetaData->all_coherence_zero = (uint8_t) all_coherence_zero; + hQMetaData->all_coherence_zero = (UWord8) all_coherence_zero; /*Q0*/ + + IF( EQ_32( hQMetaData->no_directions, 2 ) ) + { + set_c( (Word8 *) hQMetaData->twoDirBands, 1, hQMetaData->q_direction[0].cfg.nbands ); + } - if ( hQMetaData->no_directions == 2 ) + test(); + IF( EQ_16( bits_sph_idx, 11 ) && EQ_32( hQMetaData->no_directions, 2 ) ) { /* Read which bands have 2 directions */ - hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; - set_c( (int8_t *) hQMetaData->twoDirBands, 0, hQMetaData->q_direction[0].cfg.nbands ); + hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; /*Q0*/ + move16(); + sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; /*Q0*/ + move16(); + if ( GT_16( hQMetaData->q_direction[1].cfg.nbands, codedBands ) ) + { + hQMetaData->q_direction[1].cfg.nbands = codedBands; /*Q0*/ + move16(); + } + set_c( (Word8 *) hQMetaData->twoDirBands, 0, hQMetaData->q_direction[0].cfg.nbands ); d = *index; - dif_p[0] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); + move16(); + dif_p[0] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); /*Q0*/ + move16(); p[0] = dif_p[0]; + move16(); hQMetaData->twoDirBands[p[0]] = 1; - for ( b = 1; b < hQMetaData->numTwoDirBands; b++ ) + move16(); + FOR( b = 1; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { - dif_p[b] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); - p[b] = p[b - 1] + dif_p[b] + 1; + dif_p[b] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); /*Q0*/ + move16(); + p[b] = add( add( p[b - 1], dif_p[b] ), 1 ); + move16(); hQMetaData->twoDirBands[p[b]] = 1; + move16(); } - bits_no_dirs_coh += ( d - *index ); } - bits_diff_sum = 0; - bits_diff_sum += ivas_qmetadata_entropy_decode_diffuseness( bitstream, index, &( hQMetaData->q_direction[0] ), &diffuseness_index_max_ec_frame_pre[0] ); - - if ( hodirac_flag ) + test(); + IF( EQ_16( bits_sph_idx, 16 ) && EQ_32( hQMetaData->no_directions, 2 ) ) { - if ( hQMetaData->no_directions == 2 ) + sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; /*Q0*/ + move16(); + IF( GT_16( hQMetaData->q_direction[1].cfg.nbands, codedBands ) ) { - /* Calculate bits for dfRatio */ - dir2band = 0; - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->twoDirBands[b] == 1 ) - { - dfRatio_bits[dir2band] = ivas_get_df_ratio_bits_hodirac( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); - dir2band++; - } - } - - bits_diff_sum += ivas_qmetadata_entropy_decode_df_ratio( bitstream, index, &( hQMetaData->q_direction[1] ), dfRatio_bits ); + hQMetaData->q_direction[1].cfg.nbands = codedBands; /*Q0*/ + move16(); } } - else + ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[0] ) ); + + IF( EQ_32( hQMetaData->no_directions, 2 ) ) { - if ( hQMetaData->no_directions == 2 ) - { - /* Calculate bits for dfRatio */ - dir2band = 0; - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->twoDirBands[b] == 1 ) - { - dfRatio_bits[dir2band] = ivas_get_df_ratio_bits( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] ); - dir2band++; - } - } + ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[1] ) ); + } + - bits_diff_sum += ivas_qmetadata_entropy_decode_df_ratio( bitstream, index, &( hQMetaData->q_direction[1] ), dfRatio_bits ); + FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + { + W_nrg_ratio[0][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m]] ); /*Q62*/ + move64(); } } - - /* Calculate direct-to-total energy ratios for both directions from diffuse-to-total ratio and distribution factor of direct-to-total ratios */ - if ( hQMetaData->no_directions == 2 ) + IF( EQ_32( hQMetaData->no_directions, 2 ) ) { - dir2band = 0; - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + Word32 ratioSum; + IF( EQ_16( bits_sph_idx, 16 ) ) { - if ( hQMetaData->twoDirBands[b] == 1 ) + FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { - float diffRatio, dfRatio, dir1ratio, dir2ratio; - int16_t dfRatio_qsteps; - - diffRatio = diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; - dfRatio_qsteps = 1 << dfRatio_bits[dir2band]; - /* already encoded as total and ratios in HO-DirAC */ - if ( hodirac_flag ) - { - dfRatio = usdequant( hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0], 0.0f, 1.f / ( dfRatio_qsteps - 1 ) ); - dir1ratio = 1.f - diffRatio; - dir2ratio = dfRatio; - } - else + FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { - dfRatio = usdequant( hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0], 0.5f, 0.5f / ( dfRatio_qsteps - 1 ) ); + W_nrg_ratio[1][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]] ); /*Q62*/ + move64(); - dir1ratio = dfRatio * ( 1.0f - diffRatio ); - dir2ratio = ( 1.0f - diffRatio ) - dir1ratio; - } + /* Scale energy ratios that sum to over one */ + ratioSum = W_round64_L( W_add( W_nrg_ratio[0][b][m], W_nrg_ratio[1][b][m] ) ); /*Q30*/ - /* Requantize the 1 - dirRatio separately for each direction to obtain inverted dirRatio index. These are used in further decoding. */ - hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] = masa_sq( 1.0f - dir1ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - if ( hodirac_flag ) - { - float tmp; - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0] = usquant( dir2ratio, &tmp, 0.0f, 1.f / ( DIRAC_DIFFUSE_LEVELS - 1 ), DIRAC_DIFFUSE_LEVELS ); - } - else - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0] = masa_sq( 1.0f - dir2ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + IF( GT_32( ratioSum, ONE_IN_Q30 ) ) + { + W_nrg_ratio[0][b][m] = W_shl( (Word64) ( W_nrg_ratio[0][b][m] / ratioSum ), 30 ); // Q62 + move64(); + W_nrg_ratio[1][b][m] = W_shl( (Word64) ( W_nrg_ratio[1][b][m] / ratioSum ), 30 ); // Q62 + move64(); + } } - - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + } + } + ELSE + { + Word16 pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; + d = 0; + move16(); + FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + { + IF( EQ_16( hQMetaData->twoDirBands[b], 1 ) ) { - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = dir1ratio; - hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + pos_2dir_band[d] = b; /*Q0*/ + move16(); + d = add( d, 1 ); } - - for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) + ELSE { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[m] = dir2ratio; - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[m] = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0]; + pos_2dir_band[d] = 0; + move16(); } - - dir2band++; } - else + FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { - /* 1dir band */ - hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; - for ( m = 1; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + + W_nrg_ratio[1][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]] ); /*Q62*/ + move64(); + + ratioSum = W_round64_L( W_add( W_nrg_ratio[0][pos_2dir_band[b]][m], W_nrg_ratio[1][b][m] ) ); /*Q30*/ + + IF( GT_32( ratioSum, ONE_IN_Q30 ) ) + { + W_nrg_ratio[0][pos_2dir_band[b]][m] = W_shl( (Word64) ( W_nrg_ratio[0][pos_2dir_band[b]][m] / ratioSum ), 30 ); /*Q62*/ + move64(); + W_nrg_ratio[1][b][m] = W_shl( (Word64) ( W_nrg_ratio[1][b][m] / ratioSum ), 30 ); /*Q62*/ + move64(); + } } } } } - else + + IF( EQ_32( hQMetaData->no_directions, 2 ) ) { - /* With 1dir band, the decoded index is directly diffuseness and we can decode to direct-to-total ratio with 1 - diff. */ - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) { - hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; - for ( m = 1; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) { - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; + hQMetaData->q_direction[1].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]; /*Q0*/ + move16(); + hQMetaData->q_direction[1].band_data[b].bits_sph_idx[m] = bits_sph_idx; /*Q0*/ + move16(); } } } - /* To decode directions correctly for 2dir bands, we need to obtain the compensated direct-to-total ratios and their - * corresponding inverted indices. */ - bits_dir_raw_pre[0] = 0; - bits_dir_raw_pre[1] = 0; - dir2band = 0; - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) + FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) { - if ( hQMetaData->no_directions == 2 && hQMetaData->twoDirBands[b] == 1 ) - { - int16_t index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; - - index_dirRatio1Inv = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; - index_dirRatio2Inv = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[0]; - - masa_compensate_two_dir_energy_ratio_index( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod, hodirac_flag ); - - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = index_dirRatio1Inv_mod; - hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m] = bits_direction_masa[index_dirRatio1Inv_mod]; - bits_dir_raw_pre[0] += hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m]; - } - - for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[m] = index_dirRatio2Inv_mod; - hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[m] = bits_direction_masa[index_dirRatio2Inv_mod]; - bits_dir_raw_pre[1] += hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[m]; - } - - dir2band++; - } - else - { - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; - hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m] = bits_direction_masa[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; - bits_dir_raw_pre[0] += hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m]; - } - } - } - - if ( hQMetaData->no_directions == 2 ) - { - no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks + hQMetaData->q_direction[1].cfg.nbands * hQMetaData->q_direction[1].cfg.nblocks; - if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff_sum >= MASA_MIN_BITS_SURR_COH ) ) - { - bits_sur_coherence = read_surround_coherence( bitstream, index, hQMetaData ); - } - else - { - bits_sur_coherence = 0; - /*Surround coherence*/ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - bits_no_dirs_coh += bits_sur_coherence; - total_bits_1dir = ( ( hQMetaData->metadata_max_bits - bits_no_dirs_coh ) * hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks ) / no_TF; - } - else - { - no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks; - if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff_sum >= MASA_MIN_BITS_SURR_COH ) ) - { - bits_sur_coherence = read_surround_coherence( bitstream, index, hQMetaData ); - } - else - { - bits_sur_coherence = 0; - /*Surround coherence*/ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - bits_no_dirs_coh += bits_sur_coherence; - - total_bits_1dir = hQMetaData->metadata_max_bits - bits_no_dirs_coh; - } - - bits_dir_target = 0; - bits_dir_used = 0; - - for ( d = 0; d < hQMetaData->no_directions; d++ ) - { - q_direction = &hQMetaData->q_direction[d]; - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - start_band = q_direction->cfg.start_band; - - diffuseness_index_max_ec_frame = diffuseness_index_max_ec_frame_pre[0]; - if ( d == 0 ) - { - bits_diff = bits_diff_sum; - } - else - { - bits_diff = 0; - } - bits_dir_raw = bits_dir_raw_pre[d]; - - /* Read coherence, if any */ - bits_coherence = 0; - - if ( all_coherence_zero == 0 ) - { - bits_coherence = read_coherence_data( bitstream, index, hQMetaData, d, 0 ); - } - else - { - /*Surround coherence*/ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - - if ( hQMetaData->q_direction[d].coherence_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->q_direction[d].coherence_band_data[b].spread_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - - /* Read 2D signaling*/ - q_direction->not_in_2D = bitstream[( *index )--]; - signal_bits = 1; - - /* Read EC signaling */ - ec_flag = 0; - if ( total_bits_1dir + bits_sur_coherence <= hQMetaData->qmetadata_max_bit_req ) - { - ec_flag = bitstream[( *index )--]; - signal_bits++; - if ( nblocks > 1 ) - { - if ( ec_flag ) - { - ec_flag += bitstream[( *index )--]; - signal_bits++; - } - } - } - - /* Decode quantized directions frame-wise */ - if ( ec_flag == 0 ) /* EC 1*/ - { - bits_dir = 0; - raw_flag[0] = bitstream[( *index )--]; - bits_dir++; - - if ( raw_flag[0] == 0 ) - { - bits_dir += ivas_qmetadata_entropy_decode_dir( q_direction, bitstream, index, diffuseness_index_max_ec_frame, nbands, start_band, 0 ); - } - else - { - bits_dir += ivas_qmetadata_raw_decode_dir( q_direction, bitstream, index, nbands, start_band, 0 ); - } - } - /* Decode quantized directions band-wise */ - else if ( ec_flag == 1 && ( nblocks > 1 ) ) /* EC2 */ - { - bits_dir = 0; - for ( b = start_band; b < nbands; b++ ) - { - raw_flag[b] = bitstream[( *index )--]; - bits_dir++; - } - - /* Read EC bits*/ - diff_bits = bits_diff + bits_coherence + signal_bits - total_bits_1dir; - - for ( b = start_band; b < nbands; b++ ) - { - if ( raw_flag[b] == 0 ) - { - bits_dir += ivas_qmetadata_entropy_decode_dir( q_direction, bitstream, index, diffuseness_index_max_ec_frame, b + 1, b, 0 ); - } - else - { - diff_bits += q_direction->band_data[b].bits_sph_idx[0] * q_direction->cfg.nblocks; - } - } - diff_bits += bits_dir; - - /* Small requantization?*/ - if ( q_direction->not_in_2D > 0 ) - { - /* This is not an ideal solution but mirrors better encoder */ - int16_t i, j; - uint16_t bits_temp[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - bits_temp[i][j] = q_direction->band_data[i].bits_sph_idx[j]; - } - } - - small_reduction_direction( q_direction, bits_temp, raw_flag, &diff_bits ); - - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - q_direction->band_data[i].bits_sph_idx[j] = bits_temp[i][j]; - } - } - } - - /* Read raw-coded bits*/ - for ( b = start_band; b < nbands; b++ ) - { - if ( raw_flag[b] ) - { - bits_dir += ivas_qmetadata_raw_decode_dir( q_direction, bitstream, index, b + 1, b, 0 ); - } - } - } - /* Decode requantized directions */ - else /* EC3 */ - { - int16_t dummy; - ec_flag = 2; - - if ( hQMetaData->is_masa_ivas_format == 0 ) - { - reduce_bits = bits_dir_raw - ( total_bits_1dir - bits_diff - bits_coherence - signal_bits ); - ind_order[0] = -1; - } - else - { - ind_order[0] = 0; - reduce_bits = min( nbands * nblocks + MASA_BIT_REDUCT_PARAM, bits_dir_raw - ( total_bits_1dir - bits_diff - bits_coherence - signal_bits ) ); - if ( reduce_bits > bits_dir_raw - nbands * nblocks ) - { - reduce_bits = bits_dir_raw - nbands * nblocks; - } - } - only_reduce_bits_direction( &dummy, q_direction, reduce_bits, nbands, nblocks, ind_order ); - - /* Read directions */ - bits_dir = read_directions( q_direction, (uint8_t) nbands, (uint8_t) nblocks, bitstream, index, ind_order ); - } - - if ( bits_coherence > 0 ) - { - if ( nblocks > 1 ) - { - decode_spread_coherence( hQMetaData, d, nblocks, 0 ); - } - } - else - { - for ( b = start_band; b < nbands; b++ ) - { - if ( q_direction->coherence_band_data != NULL ) - { - set_c( (int8_t *) q_direction->coherence_band_data[b].spread_coherence, 0, nblocks ); - } - } - } - if ( d == 0 ) - { - total_bits_1dir = hQMetaData->metadata_max_bits - ( start_index_0 - *index ); - } - - bits_dir_target += bits_dir_raw; - bits_dir_used += bits_dir; - } - - /* move 2 dir data to its correct subband */ - if ( hQMetaData->no_directions == 2 ) - { - d = hQMetaData->q_direction[1].cfg.nbands - 1; - nblocks = hQMetaData->q_direction[0].cfg.nblocks; - - for ( b = hQMetaData->q_direction[0].cfg.nbands - 1; b >= 0; b-- ) - { - if ( hQMetaData->twoDirBands[b] == 1 ) - { - mvr2r( hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].band_data[b].azimuth, nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].band_data[b].elevation, nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].band_data[b].energy_ratio, nblocks ); - - if ( hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0] < 7 ) - { - for ( m = 0; m < nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].azimuth[m] += hQMetaData->q_direction[0].band_data[b].azimuth[m] - 180; - if ( hQMetaData->q_direction[1].band_data[b].azimuth[m] >= 180 ) - { - hQMetaData->q_direction[1].band_data[b].azimuth[m] -= 360; - } - if ( hQMetaData->q_direction[1].band_data[b].azimuth[m] < -180 ) - { - hQMetaData->q_direction[1].band_data[b].azimuth[m] += 360; - } - } - } - - if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - mvc2c( hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, nblocks ); - } - d--; - } - else - { - set_f( hQMetaData->q_direction[1].band_data[b].azimuth, 0.0f, nblocks ); - set_f( hQMetaData->q_direction[1].band_data[b].elevation, 0.0f, nblocks ); - set_f( hQMetaData->q_direction[1].band_data[b].energy_ratio, 0.0f, nblocks ); - - if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, 0, nblocks ); - } - } - } - - /* Scale energy ratios that sum to over one */ - if ( !hodirac_flag ) - { - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - float ratioSum; - - ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[0] + hQMetaData->q_direction[1].band_data[b].energy_ratio[0]; - - if ( ratioSum > 1.0f ) - { - set_f( hQMetaData->q_direction[0].band_data[b].energy_ratio, hQMetaData->q_direction[0].band_data[b].energy_ratio[0] / ratioSum, nblocks ); - set_f( hQMetaData->q_direction[1].band_data[b].energy_ratio, hQMetaData->q_direction[1].band_data[b].energy_ratio[0] / ratioSum, nblocks ); - } - } - } - } - - /* Store status information for renderer use */ - hQMetaData->ec_flag = ec_flag; - - hQMetaData->dir_comp_ratio = (float) bits_dir_used / (float) bits_dir_target; - - if ( hQMetaData->dir_comp_ratio > 1.0f ) - { - hQMetaData->dir_comp_ratio = 1.0f; - } - - return ( start_index_0 - *index ); -} - -#endif - -/*-----------------------------------------------------------------------* - * ivas_qmetadata_dec_decode_hr_384_512() - * - * Main function for decoding Spatial Metadata at HRs - *-----------------------------------------------------------------------*/ - -/*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED -Word16 ivas_qmetadata_dec_decode_hr_384_512( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ - UWord16 *bitstream, /* i : bitstream Q0*/ - Word16 *index, /* i/o: bitstream position Q0*/ - const SPHERICAL_GRID_DATA *sph_grid16, /* i : spherical grid for deindexing */ - const Word16 bits_sph_idx, - const Word16 bits_sp_coh, - const UWord8 ncoding_bands_config ) -{ - Word16 d, b, m; - Word16 nbands, start_band; - IVAS_QDIRECTION *q_direction; - Word16 start_index_0; - UWord16 all_coherence_zero; - Word16 p[MASA_MAXIMUM_CODING_SUBBANDS], dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 codedBands, sf_nbands0, sf_nbands1; - sf_nbands1 = 1; - move16(); - Word64 W_nrg_ratio[2][MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - - start_index_0 = *index; - move16(); - /* read number of higher inactive/not encoded bands */ - IF( bitstream[( *index )--] ) - { - codedBands = sub( sub( MASA_MAXIMUM_CODING_SUBBANDS, ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 1 ) ), 1 ); /*Q0*/ - } - ELSE - { - codedBands = MASA_MAXIMUM_CODING_SUBBANDS; /*Q0*/ - move16(); - } - FOR( b = codedBands; b < ncoding_bands_config; b++ ) - { - FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) - { - - hQMetaData->q_direction[0].band_data[b].azimuth_fx[m] = 0; - move32(); - hQMetaData->q_direction[0].band_data[b].elevation_fx[m] = 0; - move32(); - hQMetaData->q_direction[0].band_data[b].energy_ratio_fx[m] = 0; - move32(); - W_nrg_ratio[0][b][m] = 0; - move64(); - - test(); - IF( hQMetaData->coherence_flag && hQMetaData->q_direction[0].coherence_band_data != NULL ) - { - hQMetaData->q_direction[0].coherence_band_data[b].spread_coherence[m] = 0u; - move16(); - } - - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - - hQMetaData->q_direction[1].band_data[b].azimuth_fx[m] = 0; - move32(); - hQMetaData->q_direction[1].band_data[b].elevation_fx[m] = 0; - move32(); - hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = 0; - move32(); - W_nrg_ratio[1][b][m] = 0; - move64(); - - test(); - IF( hQMetaData->coherence_flag && hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence[m] = 0u; - move16(); - } - } - - test(); - IF( hQMetaData->coherence_flag && hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[b].surround_coherence[m] = 0u; - move16(); - } - } - - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - hQMetaData->twoDirBands[b] = 0; - move16(); - } - } - sf_nbands0 = hQMetaData->q_direction[0].cfg.nbands; /*Q0*/ - move16(); - - hQMetaData->q_direction[0].cfg.nbands = codedBands; /*Q0*/ - move16(); - - /*Coherence flag decoding*/ - all_coherence_zero = 1; - move16(); - IF( hQMetaData->coherence_flag ) - { - /* read if coherence is zero */ - all_coherence_zero = bitstream[( *index )--]; /*Q0*/ - move16(); - } - - hQMetaData->all_coherence_zero = (UWord8) all_coherence_zero; /*Q0*/ - - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - set_c( (Word8 *) hQMetaData->twoDirBands, 1, hQMetaData->q_direction[0].cfg.nbands ); - } - - test(); - IF( EQ_16( bits_sph_idx, 11 ) && EQ_32( hQMetaData->no_directions, 2 ) ) - { - /* Read which bands have 2 directions */ - hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; /*Q0*/ - move16(); - sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; /*Q0*/ - move16(); - if ( GT_16( hQMetaData->q_direction[1].cfg.nbands, codedBands ) ) - { - hQMetaData->q_direction[1].cfg.nbands = codedBands; /*Q0*/ - move16(); - } - set_c( (Word8 *) hQMetaData->twoDirBands, 0, hQMetaData->q_direction[0].cfg.nbands ); - d = *index; - move16(); - dif_p[0] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); /*Q0*/ - move16(); - p[0] = dif_p[0]; - move16(); - hQMetaData->twoDirBands[p[0]] = 1; - move16(); - FOR( b = 1; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - dif_p[b] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); /*Q0*/ - move16(); - p[b] = add( add( p[b - 1], dif_p[b] ), 1 ); - move16(); - hQMetaData->twoDirBands[p[b]] = 1; - move16(); - } - } - - test(); - IF( EQ_16( bits_sph_idx, 16 ) && EQ_32( hQMetaData->no_directions, 2 ) ) - { - sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; /*Q0*/ - move16(); - IF( GT_16( hQMetaData->q_direction[1].cfg.nbands, codedBands ) ) - { - hQMetaData->q_direction[1].cfg.nbands = codedBands; /*Q0*/ - move16(); - } - } - ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[0] ) ); - - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[1] ) ); - } - - - FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - W_nrg_ratio[0][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m]] ); /*Q62*/ - move64(); - } - } - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - Word32 ratioSum; - IF( EQ_16( bits_sph_idx, 16 ) ) - { - FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - W_nrg_ratio[1][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]] ); /*Q62*/ - move64(); - - /* Scale energy ratios that sum to over one */ - ratioSum = W_round64_L( W_add( W_nrg_ratio[0][b][m], W_nrg_ratio[1][b][m] ) ); /*Q30*/ - - IF( GT_32( ratioSum, ONE_IN_Q30 ) ) - { - W_nrg_ratio[0][b][m] = W_shl( (Word64) ( W_nrg_ratio[0][b][m] / ratioSum ), 30 ); // Q62 - move64(); - W_nrg_ratio[1][b][m] = W_shl( (Word64) ( W_nrg_ratio[1][b][m] / ratioSum ), 30 ); // Q62 - move64(); - } - } - } - } - ELSE - { - Word16 pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - d = 0; - move16(); - FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - IF( EQ_16( hQMetaData->twoDirBands[b], 1 ) ) - { - pos_2dir_band[d] = b; /*Q0*/ - move16(); - d = add( d, 1 ); - } - ELSE - { - pos_2dir_band[d] = 0; - move16(); - } - } - FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - - W_nrg_ratio[1][b][m] = W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]] ); /*Q62*/ - move64(); - - ratioSum = W_round64_L( W_add( W_nrg_ratio[0][pos_2dir_band[b]][m], W_nrg_ratio[1][b][m] ) ); /*Q30*/ - - IF( GT_32( ratioSum, ONE_IN_Q30 ) ) - { - W_nrg_ratio[0][pos_2dir_band[b]][m] = W_shl( (Word64) ( W_nrg_ratio[0][pos_2dir_band[b]][m] / ratioSum ), 30 ); /*Q62*/ - move64(); - W_nrg_ratio[1][b][m] = W_shl( (Word64) ( W_nrg_ratio[1][b][m] / ratioSum ), 30 ); /*Q62*/ - move64(); - } - } - } - } - } - - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - FOR( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]; /*Q0*/ - move16(); - hQMetaData->q_direction[1].band_data[b].bits_sph_idx[m] = bits_sph_idx; /*Q0*/ - move16(); - } - } - } - - FOR( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) { hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; /*Q0*/ move16(); @@ -1726,373 +1138,41 @@ Word16 ivas_qmetadata_dec_decode_hr_384_512( { #ifdef MSAN_FIX FOR( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); /*Q30*/ - move32(); - } - } -#else - FOR( b = 0; b < MASA_MAXIMUM_CODING_SUBBANDS; b++ ) - { - FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); - move32(); - } - } -#endif // MSAN_FIX - } - /* Store status information for renderer use */ - hQMetaData->ec_flag = 0; - move16(); - hQMetaData->dir_comp_ratio_fx = MAX_WORD16; /*Q15*/ - move16(); - - - hQMetaData->q_direction[0].cfg.nbands = sf_nbands0; /*Q0*/ - move16(); - IF( EQ_32( hQMetaData->no_directions, 2 ) ) - { - hQMetaData->q_direction[1].cfg.nbands = sf_nbands1; /*Q0*/ - move16(); - } - - return sub( start_index_0, *index ); -} -#else -int16_t ivas_qmetadata_dec_decode_hr_384_512( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: hQMetaData handle */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, /* i/o: bitstream position */ - const SPHERICAL_GRID_DATA *sph_grid16, /* i : spherical grid for deindexing */ - const int16_t bits_sph_idx, - const int16_t bits_sp_coh, - const uint8_t ncoding_bands_config ) -{ - int16_t d, b, m; - int16_t nbands, start_band; - IVAS_QDIRECTION *q_direction; - int16_t start_index_0; - uint16_t all_coherence_zero; - int16_t p[MASA_MAXIMUM_CODING_SUBBANDS], dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t codedBands, sf_nbands0, sf_nbands1; - sf_nbands1 = 1; - - - start_index_0 = *index; - /* read number of higher inactive/not encoded bands */ - if ( bitstream[( *index )--] ) - { - codedBands = MASA_MAXIMUM_CODING_SUBBANDS - ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 1 ) - 1; - } - else - { - codedBands = MASA_MAXIMUM_CODING_SUBBANDS; - } - for ( b = codedBands; b < ncoding_bands_config; b++ ) - { - for ( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) - { - hQMetaData->q_direction[0].band_data[b].azimuth[m] = 0.0f; - hQMetaData->q_direction[0].band_data[b].elevation[m] = 0.0f; - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = 0.0f; - - if ( hQMetaData->coherence_flag && hQMetaData->q_direction[0].coherence_band_data != NULL ) - { - hQMetaData->q_direction[0].coherence_band_data[b].spread_coherence[m] = 0u; - } - - if ( hQMetaData->no_directions == 2 ) - { - hQMetaData->q_direction[1].band_data[b].azimuth[m] = 0.0f; - hQMetaData->q_direction[1].band_data[b].elevation[m] = 0.0f; - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 0.0f; - - if ( hQMetaData->coherence_flag && hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence[m] = 0u; - } - } - - if ( hQMetaData->coherence_flag && hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[b].surround_coherence[m] = 0u; - } - } - - if ( hQMetaData->no_directions == 2 ) - { - hQMetaData->twoDirBands[b] = 0; - } - } - sf_nbands0 = hQMetaData->q_direction[0].cfg.nbands; - - hQMetaData->q_direction[0].cfg.nbands = codedBands; - - /*Coherence flag decoding*/ - all_coherence_zero = 1; - if ( hQMetaData->coherence_flag ) - { - /* read if coherence is zero */ - all_coherence_zero = bitstream[( *index )--]; - } - - hQMetaData->all_coherence_zero = (uint8_t) all_coherence_zero; - - if ( hQMetaData->no_directions == 2 ) - { - set_c( (int8_t *) hQMetaData->twoDirBands, 1, hQMetaData->q_direction[0].cfg.nbands ); - } - - if ( bits_sph_idx == 11 && hQMetaData->no_directions == 2 ) - { - /* Read which bands have 2 directions */ - hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; - sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; - if ( hQMetaData->q_direction[1].cfg.nbands > codedBands ) - { - hQMetaData->q_direction[1].cfg.nbands = codedBands; - } - set_c( (int8_t *) hQMetaData->twoDirBands, 0, hQMetaData->q_direction[0].cfg.nbands ); - d = *index; - dif_p[0] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); - p[0] = dif_p[0]; - hQMetaData->twoDirBands[p[0]] = 1; - for ( b = 1; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - dif_p[b] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, MASA_MAXIMUM_CODING_SUBBANDS, 0 ); - p[b] = p[b - 1] + dif_p[b] + 1; - hQMetaData->twoDirBands[p[b]] = 1; - } - } - - if ( bits_sph_idx == 16 && hQMetaData->no_directions == 2 ) - { - sf_nbands1 = hQMetaData->q_direction[1].cfg.nbands; - if ( hQMetaData->q_direction[1].cfg.nbands > codedBands ) - { - hQMetaData->q_direction[1].cfg.nbands = codedBands; - } - } - ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[0] ) ); - - if ( hQMetaData->no_directions == 2 ) - { - ivas_qmetadata_entropy_decode_diffuseness_hr_512( bitstream, index, &( hQMetaData->q_direction[1] ) ); - } - - - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[m]]; - } - } - if ( hQMetaData->no_directions == 2 ) - { - float ratioSum; - if ( bits_sph_idx == 16 ) - { - for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; - - /* Scale energy ratios that sum to over one */ - ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; - - if ( ratioSum > 1.0f ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] /= ratioSum; - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; - } - } - } - } - else - { - int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - d = 0; - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->twoDirBands[b] == 1 ) - { - pos_2dir_band[d] = b; - d++; - } - else - { - pos_2dir_band[d] = 0; - } - } - for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] = 1.0f - diffuseness_reconstructions_hr[hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]]; - - ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; - - if ( ratioSum > 1.0f ) - { - hQMetaData->q_direction[0].band_data[pos_2dir_band[b]].energy_ratio[m] /= ratioSum; - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] /= ratioSum; - } - } - } - } - } - - if ( hQMetaData->no_directions == 2 ) - { - for ( b = hQMetaData->q_direction[1].cfg.start_band; b < hQMetaData->q_direction[1].cfg.nbands; b++ ) - { - for ( m = 0; m < hQMetaData->q_direction[1].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[1].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[1].band_data[b].energy_ratio_index[m]; - hQMetaData->q_direction[1].band_data[b].bits_sph_idx[m] = bits_sph_idx; - } - } - } - - for ( b = hQMetaData->q_direction[0].cfg.start_band; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio_index_mod[m] = hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]; - hQMetaData->q_direction[0].band_data[b].bits_sph_idx[m] = bits_sph_idx; - } - } - - if ( all_coherence_zero == 0 ) - { - read_surround_coherence_hr( bitstream, index, hQMetaData ); - } - else - { - /*Surround coherence*/ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - - for ( d = 0; d < hQMetaData->no_directions; d++ ) - { - q_direction = &hQMetaData->q_direction[d]; - nbands = q_direction->cfg.nbands; - start_band = q_direction->cfg.start_band; - - /* Read coherence, if any */ - if ( all_coherence_zero == 0 ) - { - read_coherence_data_hr_512( bitstream, index, hQMetaData, d, bits_sp_coh ); - } - else - { - /*Surround coherence*/ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[b].surround_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - - if ( hQMetaData->q_direction[d].coherence_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->q_direction[d].coherence_band_data[b].spread_coherence, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - - /* Decode quantized directions frame-wise */ - ivas_qmetadata_raw_decode_dir_512( q_direction, bitstream, index, nbands, start_band, sph_grid16 ); - } - - if ( hQMetaData->no_directions == 2 ) - { - /* move 2 dir data to its correct subband */ - if ( bits_sph_idx == 11 ) - { - int16_t nblocks; - d = hQMetaData->q_direction[1].cfg.nbands - 1; - nblocks = hQMetaData->q_direction[0].cfg.nblocks; - - for ( b = hQMetaData->q_direction[0].cfg.nbands - 1; b >= 0; b-- ) + { + FOR( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) { - if ( hQMetaData->twoDirBands[b] == 1 ) - { - mvr2r( hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].band_data[b].azimuth, nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].band_data[b].elevation, nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].band_data[b].energy_ratio, nblocks ); - - - if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - mvc2c( hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, nblocks ); - } - d--; - } - else - { - set_f( hQMetaData->q_direction[1].band_data[b].azimuth, 0.0f, nblocks ); - set_f( hQMetaData->q_direction[1].band_data[b].elevation, 0.0f, nblocks ); - set_f( hQMetaData->q_direction[1].band_data[b].energy_ratio, 0.0f, nblocks ); - - if ( hQMetaData->q_direction[1].coherence_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->q_direction[1].coherence_band_data[b].spread_coherence, 0, nblocks ); - } - } + hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); /*Q30*/ + move32(); } } - - /* Scale energy ratios that sum to over one */ - for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ ) +#else + FOR( b = 0; b < MASA_MAXIMUM_CODING_SUBBANDS; b++ ) { - for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ ) + FOR( m = 0; m < MAX_PARAM_SPATIAL_SUBFRAMES; m++ ) { - float ratioSum; - - ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m]; - - if ( ratioSum > 1.0f ) - { - float ratioSumInv; - ratioSumInv = 1.0f / ratioSum; - hQMetaData->q_direction[0].band_data[b].energy_ratio[m] *= ratioSumInv; - hQMetaData->q_direction[1].band_data[b].energy_ratio[m] *= ratioSumInv; - } + hQMetaData->q_direction[1].band_data[b].energy_ratio_fx[m] = W_round64_L( W_nrg_ratio[1][b][m] ); + move32(); } } +#endif // MSAN_FIX } - /* Store status information for renderer use */ hQMetaData->ec_flag = 0; + move16(); + hQMetaData->dir_comp_ratio_fx = MAX_WORD16; /*Q15*/ + move16(); - hQMetaData->dir_comp_ratio = 1.0f; - - if ( hQMetaData->dir_comp_ratio > 1.0f ) - { - hQMetaData->dir_comp_ratio = 1.0f; - } - hQMetaData->q_direction[0].cfg.nbands = sf_nbands0; - if ( hQMetaData->no_directions == 2 ) + hQMetaData->q_direction[0].cfg.nbands = sf_nbands0; /*Q0*/ + move16(); + IF( EQ_32( hQMetaData->no_directions, 2 ) ) { - hQMetaData->q_direction[1].cfg.nbands = sf_nbands1; + hQMetaData->q_direction[1].cfg.nbands = sf_nbands1; /*Q0*/ + move16(); } - return ( start_index_0 - *index ); + return sub( start_index_0, *index ); } -#endif /*-----------------------------------------------------------------------* @@ -2102,7 +1182,6 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512( *-----------------------------------------------------------------------*/ /*! r: number of bits written */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_qmetadata_dec_sid_decode( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ UWord16 *bitstream, /* i : bitstream Q0*/ @@ -2199,404 +1278,178 @@ Word16 ivas_qmetadata_dec_sid_decode( move16(); q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[diffuseness_index[b]]; /*Q0*/ move16(); - bits_dir = extract_l( L_add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ) ); /*Q0*/ - q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; /*Q0*/ - move16(); - } - - bits_delta = sub( sub( metadata_sid_bits, sub( start_index, *index ) ), bits_dir ); /* bit_diff is already read */ - - IF( bits_delta > 0 ) - { - WHILE( bits_delta > 0 ) - { - FOR( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) - { - IF( LT_32( q_direction->band_data[b].bits_sph_idx[0], 11 ) ) - { - bits_delta = sub( bits_delta, 1 ); - q_direction->band_data[b].bits_sph_idx[0] = add( q_direction->band_data[b].bits_sph_idx[0], 1 ); - move16(); - } - } - } - - IF( q_direction->not_in_2D == 0 ) - { - FOR( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); - move16(); - } - } - } - ELSE - { - WHILE( bits_delta < 0 ) - { - FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) - { - IF( GE_32( q_direction->band_data[b].bits_sph_idx[0], 4 ) ) - { - bits_delta = add( bits_delta, 1 ); - q_direction->band_data[b].bits_sph_idx[0] = sub( q_direction->band_data[b].bits_sph_idx[0], 1 ); - move16(); - } - } - - IF( q_direction->not_in_2D == 0 ) - { - FOR( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); - move16(); - } - } - } - } - } - ELSE - { - /* Decode diffuseness*/ - FOR( b = start_band; b < nbands; b++ ) - { - diffuseness_index[b] = (UWord16) L_add( ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 4 ), 4 ); /*Q0*/ - move16(); - q_direction->band_data[b].energy_ratio_index[0] = diffuseness_index[b]; - move16(); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[diffuseness_index[b]]; - move16(); - q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; - move16(); - } - } - - FOR( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_fx[0] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[diffuseness_index[b]] ); /*Q30*/ - move32(); - FOR( i = 0; i < nblocks; i++ ) - { - q_direction->band_data[b].energy_ratio_fx[i] = q_direction->band_data[b].energy_ratio_fx[0]; /*Q30*/ - move32(); - } - } - - /* Decoder DOAs*/ - IF( q_direction->not_in_2D > 0 ) - { - FOR( b = start_band; b < nbands; b++ ) - { - value = 0; - move16(); - FOR( i = 0; i < q_direction->band_data[b].bits_sph_idx[0]; i++ ) - { - value = (UWord16) L_add( L_shl( value, 1 ), bitstream[( *index )--] ); - } - FOR( i = 0; i < nblocks; i++ ) - { - q_direction->band_data[b].spherical_index[i] = value; - move16(); - } - - deindex_spherical_component_fx( q_direction->band_data[b].spherical_index[0], &avg_azimuth_fx, &avg_elevation_fx, &q_direction->band_data[b].azimuth_index[0], &q_direction->band_data[b].elevation_index[0], q_direction->band_data[b].bits_sph_idx[0], q_direction->cfg.mc_ls_setup ); - - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( avg_azimuth_fx, avg_elevation_fx, avg_direction_vector_fx ); - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[nblocks - 1], q_direction->band_data[b].elevation_fx[nblocks - 1], direction_vector_fx ); - - v_shr_32( direction_vector_fx, direction_vector_fx, 3, 5 ); /*Q25*/ - v_shr_32( avg_direction_vector_fx, avg_direction_vector_fx, 3, 5 ); /*Q25*/ - FOR( m = 0; m < nblocks - 1; m++ ) - { - v_add_32( direction_vector_fx, avg_direction_vector_fx, direction_vector_fx, 3 ); /*Q25*/ - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( direction_vector_fx, sub( 30, 5 ), &q_direction->band_data[b].azimuth_fx[m], &q_direction->band_data[b].elevation_fx[m] ); - } - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, sub( 30, 5 ), &q_direction->band_data[b].azimuth_fx[nblocks - 1], &q_direction->band_data[b].elevation_fx[nblocks - 1] ); - } - } - ELSE - { - FOR( b = start_band; b < nbands; b++ ) - { - Word32 temp_result; - IF( EQ_16( ivas_format, SBA_FORMAT ) ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ) ); - move16(); - } - q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, q_direction->band_data[b].azimuth_m_alphabet[0] ); /*Q0*/ - move16(); - q_direction->band_data[b].azimuth_index[0] = add( ivas_qmetadata_dereorder_generic( q_direction->band_data[b].azimuth_index[0] ), shr( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ) ); /*Q0*/ - move16(); - - temp_result = div_s( ( shl( q_direction->band_data[b].azimuth_index[0], 6 ) ), ( shl( q_direction->band_data[b].azimuth_m_alphabet[0], 6 ) ) ); /*Q15*/ - temp_result = Mpy_32_16_1( DEGREE_360_Q_22, (Word16) temp_result ); /*Q22*/ - avg_azimuth_fx = L_sub( temp_result, DEGREE_180_Q_22 ); /*Q22*/ - - avg_elevation_fx = 0; - move32(); - - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( avg_azimuth_fx, avg_elevation_fx, avg_direction_vector_fx ); - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[nblocks - 1], q_direction->band_data[b].elevation_fx[nblocks - 1], direction_vector_fx ); - - v_shr_32( direction_vector_fx, direction_vector_fx, 3, 5 ); /*Q25*/ - v_shr_32( avg_direction_vector_fx, avg_direction_vector_fx, 3, 5 ); /*Q25*/ - FOR( m = 0; m < nblocks - 1; m++ ) - { - v_add_32( direction_vector_fx, avg_direction_vector_fx, direction_vector_fx, 3 ); /*Q25*/ - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( direction_vector_fx, 30 - 5, &q_direction->band_data[b].azimuth_fx[m], &q_direction->band_data[b].elevation_fx[m] ); - } - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, 30 - 5, &q_direction->band_data[b].azimuth_fx[nblocks - 1], &q_direction->band_data[b].elevation_fx[nblocks - 1] ); - - FOR( i = 0; i < nblocks; i++ ) - { - q_direction->band_data[b].spherical_index[i] = q_direction->band_data[b].azimuth_index[0]; - move16(); - } - } - } - - - /*Read filling bits*/ - WHILE( LT_16( sub( start_index, *index ), metadata_sid_bits ) ) - { - b = bitstream[( *index )--]; - move16(); - } - - return sub( start_index, *index ); -} - -#else -int16_t ivas_qmetadata_dec_sid_decode( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, /* i/o: bitstream position */ - const int16_t nchan_transport, /* i : number of transport channels */ - int16_t *element_mode, /* o : element mode */ - const int16_t ivas_format /* i : IVAS format */ -) -{ - int16_t b, m, i; - uint16_t value; - uint16_t diffuseness_index[DIRAC_MAX_NBANDS]; - int16_t nbands, nblocks, start_band; - IVAS_QDIRECTION *q_direction; - int16_t start_index; - float avg_elevation, avg_azimuth; - float avg_direction_vector[3]; - float direction_vector[3]; - int16_t metadata_sid_bits; /* bits allocated to SID for metadata */ - int16_t bits_delta, bits_dir; - - if ( ivas_format == SBA_FORMAT ) - { - metadata_sid_bits = (int16_t) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 2 - SID_FORMAT_NBITS; /* -1 for inactive mode header bit*/ - } - else - { - metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - } - - start_index = *index; - - /* read MASA SID descriptor */ - if ( ivas_format == MASA_FORMAT && nchan_transport == 2 ) - { - b = bitstream[( *index )--]; - if ( b ) - { - *element_mode = IVAS_CPE_MDCT; - } - else - { - *element_mode = IVAS_CPE_DFT; - } - } - - /* Fix configuration for SID */ - q_direction = &hQMetaData->q_direction[0]; /* only 1 direction */ - if ( ivas_format == SBA_FORMAT ) - { - nbands = DIRAC_DTX_BANDS; /* only 2 bands transmitted */ - } - else - { - nbands = 5; /* only 5 bands transmitted */ - } - - nblocks = q_direction->cfg.nblocks; /* only 1 block transmitted but up to 4 blocks re-generated */ - start_band = 0; /* start from band 0 */ - - /* Read 2D signaling*/ - if ( ivas_format != SBA_FORMAT ) - { - q_direction->not_in_2D = bitstream[( *index )--]; - } - else - { - q_direction->not_in_2D = 1; - } - - bits_dir = 0; - if ( ivas_format != SBA_FORMAT ) - { - /* Decode diffuseness*/ - for ( b = start_band; b < nbands; b++ ) - { - diffuseness_index[b] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 4 ) + 4; - q_direction->band_data[b].energy_ratio_index[0] = diffuseness_index[b]; - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[diffuseness_index[b]]; - bits_dir += q_direction->band_data[b].bits_sph_idx[0]; - q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; + bits_dir = extract_l( L_add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ) ); /*Q0*/ + q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; /*Q0*/ + move16(); } - bits_delta = metadata_sid_bits - ( start_index - *index ) - bits_dir; /* bit_diff is already read */ + bits_delta = sub( sub( metadata_sid_bits, sub( start_index, *index ) ), bits_dir ); /* bit_diff is already read */ - if ( bits_delta > 0 ) + IF( bits_delta > 0 ) { - while ( bits_delta > 0 ) + WHILE( bits_delta > 0 ) { - for ( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) + FOR( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) { - if ( q_direction->band_data[b].bits_sph_idx[0] < 11 ) + IF( LT_32( q_direction->band_data[b].bits_sph_idx[0], 11 ) ) { - bits_delta -= 1; - q_direction->band_data[b].bits_sph_idx[0]++; + bits_delta = sub( bits_delta, 1 ); + q_direction->band_data[b].bits_sph_idx[0] = add( q_direction->band_data[b].bits_sph_idx[0], 1 ); + move16(); } } } - if ( q_direction->not_in_2D == 0 ) + IF( q_direction->not_in_2D == 0 ) { - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); } } } - else + ELSE { - while ( bits_delta < 0 ) + WHILE( bits_delta < 0 ) { - for ( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) + FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) { - if ( q_direction->band_data[b].bits_sph_idx[0] >= 4 ) + IF( GE_32( q_direction->band_data[b].bits_sph_idx[0], 4 ) ) { - bits_delta += 1; - q_direction->band_data[b].bits_sph_idx[0]--; + bits_delta = add( bits_delta, 1 ); + q_direction->band_data[b].bits_sph_idx[0] = sub( q_direction->band_data[b].bits_sph_idx[0], 1 ); + move16(); } } - if ( q_direction->not_in_2D == 0 ) + IF( q_direction->not_in_2D == 0 ) { - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); } } } } } - else + ELSE { /* Decode diffuseness*/ - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { - diffuseness_index[b] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 4 ) + 4; + diffuseness_index[b] = (UWord16) L_add( ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 4 ), 4 ); /*Q0*/ + move16(); q_direction->band_data[b].energy_ratio_index[0] = diffuseness_index[b]; + move16(); q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[diffuseness_index[b]]; + move16(); q_direction->band_data[b].azimuth_m_alphabet[0] = no_phi_masa[q_direction->band_data[b].bits_sph_idx[0] - 1][0]; + move16(); } } - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { - q_direction->band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[diffuseness_index[b]]; - for ( i = 0; i < nblocks; i++ ) + q_direction->band_data[b].energy_ratio_fx[0] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[diffuseness_index[b]] ); /*Q30*/ + move32(); + FOR( i = 0; i < nblocks; i++ ) { - q_direction->band_data[b].energy_ratio[i] = q_direction->band_data[b].energy_ratio[0]; + q_direction->band_data[b].energy_ratio_fx[i] = q_direction->band_data[b].energy_ratio_fx[0]; /*Q30*/ + move32(); } } /* Decoder DOAs*/ - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { value = 0; - for ( i = 0; i < q_direction->band_data[b].bits_sph_idx[0]; i++ ) + move16(); + FOR( i = 0; i < q_direction->band_data[b].bits_sph_idx[0]; i++ ) { - value = ( value << 1 ) + bitstream[( *index )--]; + value = (UWord16) L_add( L_shl( value, 1 ), bitstream[( *index )--] ); } - for ( i = 0; i < nblocks; i++ ) + FOR( i = 0; i < nblocks; i++ ) { q_direction->band_data[b].spherical_index[i] = value; + move16(); } - deindex_spherical_component( q_direction->band_data[b].spherical_index[0], &avg_azimuth, &avg_elevation, &q_direction->band_data[b].azimuth_index[0], &q_direction->band_data[b].elevation_index[0], q_direction->band_data[b].bits_sph_idx[0], q_direction->cfg.mc_ls_setup ); + deindex_spherical_component_fx( q_direction->band_data[b].spherical_index[0], &avg_azimuth_fx, &avg_elevation_fx, &q_direction->band_data[b].azimuth_index[0], &q_direction->band_data[b].elevation_index[0], q_direction->band_data[b].bits_sph_idx[0], q_direction->cfg.mc_ls_setup ); - ivas_qmetadata_azimuth_elevation_to_direction_vector( avg_azimuth, avg_elevation, avg_direction_vector ); - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[nblocks - 1], q_direction->band_data[b].elevation[nblocks - 1], direction_vector ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( avg_azimuth_fx, avg_elevation_fx, avg_direction_vector_fx ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[nblocks - 1], q_direction->band_data[b].elevation_fx[nblocks - 1], direction_vector_fx ); - for ( m = 0; m < nblocks - 1; m++ ) + v_shr_32( direction_vector_fx, direction_vector_fx, 3, 5 ); /*Q25*/ + v_shr_32( avg_direction_vector_fx, avg_direction_vector_fx, 3, 5 ); /*Q25*/ + FOR( m = 0; m < nblocks - 1; m++ ) { - v_add( direction_vector, avg_direction_vector, direction_vector, 3 ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( direction_vector, &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m] ); + v_add_32( direction_vector_fx, avg_direction_vector_fx, direction_vector_fx, 3 ); /*Q25*/ + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( direction_vector_fx, sub( 30, 5 ), &q_direction->band_data[b].azimuth_fx[m], &q_direction->band_data[b].elevation_fx[m] ); } - - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &q_direction->band_data[b].azimuth[nblocks - 1], &q_direction->band_data[b].elevation[nblocks - 1] ); + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, sub( 30, 5 ), &q_direction->band_data[b].azimuth_fx[nblocks - 1], &q_direction->band_data[b].elevation_fx[nblocks - 1] ); } } - else + ELSE { - for ( b = start_band; b < nbands; b++ ) + FOR( b = start_band; b < nbands; b++ ) { - if ( ivas_format == SBA_FORMAT ) + Word32 temp_result; + IF( EQ_16( ivas_format, SBA_FORMAT ) ) { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ); + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, extract_l( L_min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); } + q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, q_direction->band_data[b].azimuth_m_alphabet[0] ); /*Q0*/ + move16(); + q_direction->band_data[b].azimuth_index[0] = add( ivas_qmetadata_dereorder_generic_fx( q_direction->band_data[b].azimuth_index[0] ), shr( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ) ); /*Q0*/ + move16(); - q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, q_direction->band_data[b].azimuth_m_alphabet[0] ); - q_direction->band_data[b].azimuth_index[0] = ivas_qmetadata_dereorder_generic( q_direction->band_data[b].azimuth_index[0] ) + ( q_direction->band_data[b].azimuth_m_alphabet[0] >> 1 ); - avg_azimuth = 360.0f / (float) ( q_direction->band_data[b].azimuth_m_alphabet[0] ) * q_direction->band_data[b].azimuth_index[0] - 180; + temp_result = div_s( ( shl( q_direction->band_data[b].azimuth_index[0], 6 ) ), ( shl( q_direction->band_data[b].azimuth_m_alphabet[0], 6 ) ) ); /*Q15*/ + temp_result = Mpy_32_16_1( DEGREE_360_Q_22, (Word16) temp_result ); /*Q22*/ + avg_azimuth_fx = L_sub( temp_result, DEGREE_180_Q_22 ); /*Q22*/ - avg_elevation = 0.f; + avg_elevation_fx = 0; + move32(); - ivas_qmetadata_azimuth_elevation_to_direction_vector( avg_azimuth, avg_elevation, avg_direction_vector ); - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[nblocks - 1], q_direction->band_data[b].elevation[nblocks - 1], direction_vector ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( avg_azimuth_fx, avg_elevation_fx, avg_direction_vector_fx ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[nblocks - 1], q_direction->band_data[b].elevation_fx[nblocks - 1], direction_vector_fx ); - for ( m = 0; m < nblocks - 1; m++ ) + v_shr_32( direction_vector_fx, direction_vector_fx, 3, 5 ); /*Q25*/ + v_shr_32( avg_direction_vector_fx, avg_direction_vector_fx, 3, 5 ); /*Q25*/ + FOR( m = 0; m < nblocks - 1; m++ ) { - v_add( direction_vector, avg_direction_vector, direction_vector, 3 ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( direction_vector, &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m] ); + v_add_32( direction_vector_fx, avg_direction_vector_fx, direction_vector_fx, 3 ); /*Q25*/ + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( direction_vector_fx, 30 - 5, &q_direction->band_data[b].azimuth_fx[m], &q_direction->band_data[b].elevation_fx[m] ); } + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, 30 - 5, &q_direction->band_data[b].azimuth_fx[nblocks - 1], &q_direction->band_data[b].elevation_fx[nblocks - 1] ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &q_direction->band_data[b].azimuth[nblocks - 1], &q_direction->band_data[b].elevation[nblocks - 1] ); - - for ( i = 0; i < nblocks; i++ ) + FOR( i = 0; i < nblocks; i++ ) { q_direction->band_data[b].spherical_index[i] = q_direction->band_data[b].azimuth_index[0]; + move16(); } } } /*Read filling bits*/ - while ( start_index - *index < metadata_sid_bits ) + WHILE( LT_16( sub( start_index, *index ), metadata_sid_bits ) ) { b = bitstream[( *index )--]; + move16(); } - return ( start_index - *index ); + return sub( start_index, *index ); } -#endif /*-----------------------------------------------------------------------* * Local function definitions for diffuseness/energy ratios *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_diffuseness_huff_ec_decode_fx( const UWord16 *bitstream, /*Q0*/ Word16 *index, /*Q0*/ @@ -2633,52 +1486,12 @@ static Word16 ivas_diffuseness_huff_ec_decode_fx( return add( shr( add( val, 1 ), 1 ), av ); } } -#else -static int16_t ivas_diffuseness_huff_ec_decode( - const uint16_t *bitstream, - int16_t *index, - int16_t av ) -{ - int16_t val; - - val = 0; - while ( val <= DIFF_EC_HUFF_GR0_LIMIT ) - { - if ( bitstream[( *index )--] == 1 ) - { - val++; - } - else - { - break; - } - } - - if ( val == DIFF_EC_HUFF_GR0_LIMIT + 1 ) - { - val += 2 * bitstream[( *index )]; - ( *index )--; - val += bitstream[( *index )]; - ( *index )--; - } - - if ( val % 2 == 0 ) - { - return -( val / 2 ) + av; - } - else - { - return ( val + 1 ) / 2 + av; - } -} -#endif /*-------------------------------------------------------------------* * ivas_qmetadata_entropy_decode_diffuseness() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_decode_diffuseness( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *index, /*Q0*/ @@ -2790,102 +1603,6 @@ static Word16 ivas_qmetadata_entropy_decode_diffuseness( return sub( index_start, *index ); } -#else -static int16_t ivas_qmetadata_entropy_decode_diffuseness( - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, - IVAS_QDIRECTION *q_direction, - uint16_t *diffuseness_index_max_ec_frame ) -{ - int16_t b; - uint16_t dif_min; - int16_t index_start; - int16_t nbands; - int16_t start_band; - - index_start = *index; - nbands = q_direction->cfg.nbands; - start_band = q_direction->cfg.start_band; - - /* diffuseness decoding */ - /* Handle one band as special case*/ - if ( nbands == 1 ) - { - q_direction->band_data[0].energy_ratio_index[0] = 0; - for ( b = 0; b < MASA_BITS_ER; b++ ) - { - q_direction->band_data[0].energy_ratio_index[0] = ( q_direction->band_data[0].energy_ratio_index[0] << 1 ) + bitstream[( *index )--]; - } - *diffuseness_index_max_ec_frame = 5; - - return MASA_BITS_ER; - } - - if ( bitstream[( *index )--] == 0 ) /* dif_use_raw_coding */ - { - /* Decode with similarity strategy with low band count. On higher band counts, decode with Huffman-coding strategy. */ - if ( nbands < DIFF_EC_HUFF_BAND_LIMIT ) - { - if ( bitstream[( *index )--] != 0 ) /* dif_have_unique_value */ - { - dif_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ - - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = dif_min; - } - } - else /* all diffuseness values are dif_min_value or dif_min_value + 1 */ - { - dif_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ - - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = dif_min + bitstream[( *index )--]; /* dif_bit_offset_values */ - } - } - } - else - { - int16_t av; - - /* read average on 3 bits*/ - av = 0; - for ( b = 0; b < MASA_BITS_ER; b++ ) - { - av += bitstream[( *index )--] * ( 1 << ( MASA_BITS_ER - 1 - b ) ); - } - - dif_min = DIRAC_DIFFUSE_LEVELS; - /* read average removed data (average is added inside)*/ - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = ivas_diffuseness_huff_ec_decode( bitstream, index, av ); - dif_min = min( dif_min, q_direction->band_data[b].energy_ratio_index[0] ); - } - } - } - else /* different values for diffuseness */ - { - dif_min = DIRAC_DIFFUSE_LEVELS; - - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, DIRAC_DIFFUSE_LEVELS ); - dif_min = min( dif_min, q_direction->band_data[b].energy_ratio_index[0] ); - } - } - - *diffuseness_index_max_ec_frame = 5; - /* adaptively select the diffuseness_index_max_ec threshold */ - if ( dif_min > 5 ) - { - *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; - } - - return ( index_start - *index ); -} -#endif /*-------------------------------------------------------------------* * ivas_qmetadata_entropy_decode_diffuseness_hr_512() @@ -2893,7 +1610,6 @@ static int16_t ivas_qmetadata_entropy_decode_diffuseness( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_decode_diffuseness_hr_512( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *index, /*Q0*/ @@ -2940,47 +1656,6 @@ static Word16 ivas_qmetadata_entropy_decode_diffuseness_hr_512( return sub( index_start, *index ); } -#else -static int16_t ivas_qmetadata_entropy_decode_diffuseness_hr_512( - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, - IVAS_QDIRECTION *q_direction ) -{ - int16_t b, k; - - int16_t index_start; - int16_t nbands, nblocks; - int16_t start_band; - - index_start = *index; - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - start_band = q_direction->cfg.start_band; - - /* diffuseness decoding */ - /* Handle one band as special case*/ - if ( nbands == 1 ) - { - q_direction->band_data[0].energy_ratio_index[0] = 0; - for ( b = 0; b < MASA_BITS_ER_HR; b++ ) - { - q_direction->band_data[0].energy_ratio_index[0] = ( q_direction->band_data[0].energy_ratio_index[0] << 1 ) + bitstream[( *index )--]; - } - - return MASA_BITS_ER_HR; - } - - for ( b = start_band; b < nbands; b++ ) - { - for ( k = 0; k < nblocks; k++ ) - { - q_direction->band_data[b].energy_ratio_index[k] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, HR_MASA_ER_LEVELS ); - } - } - - return ( index_start - *index ); -} -#endif /*-------------------------------------------------------------------* @@ -2988,7 +1663,6 @@ static int16_t ivas_qmetadata_entropy_decode_diffuseness_hr_512( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_decode_df_ratio( UWord16 *bitstream, /*Q0*/ Word16 *index, /*Q0*/ @@ -3115,115 +1789,6 @@ static Word16 ivas_qmetadata_entropy_decode_df_ratio( return sub( index_start, *index ); } -#else -static int16_t ivas_qmetadata_entropy_decode_df_ratio( - uint16_t *bitstream, - int16_t *index, - IVAS_QDIRECTION *q_direction, - int16_t *dfRatio_bits ) -{ - int16_t b; - int16_t bits_raw; - int16_t max_dfRatio_bits; - uint16_t ratio_min; - int16_t index_start; - int16_t nbands; - int16_t start_band; - int16_t ec_mode; - int16_t dec_mode; - int16_t max_alphabet_size; - - index_start = *index; - nbands = q_direction->cfg.nbands; - start_band = q_direction->cfg.start_band; - - /* Handle one band as special case*/ - if ( nbands == 1 ) - { - q_direction->band_data[0].energy_ratio_index[0] = 0; - for ( b = 0; b < dfRatio_bits[0]; b++ ) - { - q_direction->band_data[0].energy_ratio_index[0] = ( q_direction->band_data[0].energy_ratio_index[0] << 1 ) + bitstream[( *index )--]; - } - return dfRatio_bits[0]; - } - - /* Calculate raw coding bits and decide what modes are possible */ - bits_raw = 0; - max_dfRatio_bits = 0; - for ( b = start_band; b < nbands; b++ ) - { - bits_raw += dfRatio_bits[b]; - max_dfRatio_bits = max( max_dfRatio_bits, dfRatio_bits[b] ); - } - - /* Decide what modes are possible */ - if ( bits_raw >= max_dfRatio_bits + 2 + nbands ) - { - ec_mode = 2; - } - else if ( bits_raw >= max_dfRatio_bits + 1 ) - { - ec_mode = 1; - } - else - { - ec_mode = 0; - } - max_alphabet_size = 1 << max_dfRatio_bits; - - dec_mode = 2; /* Default to raw decoding */ - if ( ec_mode == 1 ) - { - if ( bitstream[( *index )--] == 0 ) - { - dec_mode = 1; /* Switch to one value EC coding */ - } - } - else if ( ec_mode == 2 ) - { - if ( bitstream[( *index )--] == 0 ) - { - if ( bitstream[( *index )--] == 0 ) - { - dec_mode = 1; /* Switch to one value EC coding */ - } - else - { - dec_mode = 0; /* Use one-bit diff bandwise mode */ - } - } - } - - if ( dec_mode == 2 ) /* Raw decoding */ - { - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 1 << dfRatio_bits[b] ); - } - } - else if ( dec_mode == 1 ) /* One value decoding */ - { - ratio_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, max_alphabet_size ); /* dif_unique_value */ - - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = ratio_min; - } - } - else /* Bandwise 1-bit diff decoding */ - { - ratio_min = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, max_alphabet_size - 1 ); /* dif_min_value */ - - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = ratio_min + bitstream[( *index )--]; /* dif_bit_offset_values */ - } - } - - return ( index_start - *index ); -} -#endif /*-----------------------------------------------------------------------* @@ -3235,7 +1800,6 @@ static int16_t ivas_qmetadata_entropy_decode_df_ratio( * * Main function for entropy decoding of the directions *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_decode_dir_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ UWord16 *bitstream, /* i : bitstream Q0*/ @@ -3347,7 +1911,7 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( { avg_elevation_alphabet = sub( shl( no_theta_masa[( bits_direction_masa[diff_idx_min] - 3 )], 1 ), 1 ); /*Q0*/ avg_elevation_idx = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_elevation_alphabet ); - avg_elevation_idx = add( ivas_qmetadata_dereorder_generic( avg_elevation_idx ), shr( avg_elevation_alphabet, 1 ) ); /*Q0*/ + avg_elevation_idx = add( ivas_qmetadata_dereorder_generic_fx( avg_elevation_idx ), shr( avg_elevation_alphabet, 1 ) ); /*Q0*/ } gr_param_elev = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 4 + 1 ); @@ -3372,11 +1936,11 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ + avg_elevation_index_projected = ivas_chan_project_elevation_index_fx( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ } ELSE { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ + avg_elevation_index_projected = ivas_dirac_project_elevation_index_fx( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ /*reorder elevation indexing*/ tmp_index = sub( avg_elevation_index_projected, shr( elev_alph[b], 1 ) ); /*Q0*/ @@ -3438,8 +2002,8 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( Word16 tmp_index; IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ - tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, sub( shl( elev_alph[b], 1 ), 1 ), gr_param_elev ); /*Q0*/ + avg_elevation_index_projected = ivas_chan_project_elevation_index_fx( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ + tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, sub( shl( elev_alph[b], 1 ), 1 ), gr_param_elev ); /*Q0*/ IF( s_and( tmp_index, 1 ) ) { tmp_index = add( avg_elevation_index_projected, shr( add( tmp_index, 1 ), 1 ) ); /*Q0*/ @@ -3457,7 +2021,7 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( } ELSE { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ + avg_elevation_index_projected = ivas_dirac_project_elevation_index_fx( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); /*Q0*/ tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, elev_alph[b], gr_param_elev ); /*Q0*/ tmp_index = ivas_qmetadata_ReorderElevationDecoded( tmp_index, avg_elevation_index_projected, elev_alph[b] ); /*Q0*/ @@ -3534,7 +2098,7 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( avg_azimuth_alphabet = no_phi_masa[( bits_direction_masa[diff_idx_min] - 1 )][0]; /* average azimuth is quantized on the equatorial plane Q0*/ move16(); avg_azimuth_index = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_azimuth_alphabet ); /*Q0*/ - avg_azimuth_index = ivas_qmetadata_dereorder_generic( avg_azimuth_index ); /*Q0*/ + avg_azimuth_index = ivas_qmetadata_dereorder_generic_fx( avg_azimuth_index ); /*Q0*/ avg_azimuth_index = add( avg_azimuth_index, shr( avg_azimuth_alphabet, 1 ) ); /*Q0*/ gr_param_azith = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 5 + 1 ); /*Q0*/ @@ -3546,7 +2110,7 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( { FOR( m = 0; m < nblocks; m++ ) { - q_direction->band_data[b].azimuth_index[m] = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); /*Q0*/ + q_direction->band_data[b].azimuth_index[m] = ivas_dirac_project_azimuth_index_fx( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); /*Q0*/ move16(); IF( EQ_16( azith_alph[b][m], 1 ) ) @@ -3584,7 +2148,7 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( ( *index ) = sub( *index, 1 ); move16(); } - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); /*Q0*/ + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index_fx( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); /*Q0*/ q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, azith_alph[b][m], gr_param_azith ); /*Q0*/ move16(); q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_ReorderElevationDecoded( q_direction->band_data[b].azimuth_index[m], avg_azimuth_index_projected, azith_alph[b][m] ); /*Q0*/ @@ -3639,362 +2203,12 @@ static Word16 ivas_qmetadata_entropy_decode_dir_fx( return sub( index_start, *index ); } -#else -static int16_t ivas_qmetadata_entropy_decode_dir( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, - const uint16_t diffuseness_index_max_ec_frame, - const int16_t nbands, - const int16_t start_band, - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding*/ -) -{ - int16_t b, m; - int16_t diff_idx; - int16_t diff_idx_min; - int16_t nblocks; - int16_t index_start; - - uint16_t gr_param_elev, gr_param_azith; - int16_t bands_entropic[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t elev_alph[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t azith_alph[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - - int16_t avg_elevation_alphabet, avg_azimuth_alphabet; - int16_t avg_elevation_idx, avg_azimuth_index; - int16_t avg_elevation_index_projected, avg_azimuth_index_projected; - float direction_vector[3], avg_direction_vector[3], avg_azimuth, avg_elevation; - int16_t use_adapt_avg, idx; - - index_start = *index; - nblocks = q_direction->cfg.nblocks; - - diff_idx_min = DIRAC_DIFFUSE_LEVELS; - - /*Raw coding for high diffuseness*/ - for ( b = start_band; b < nbands; b++ ) - { - if ( hrmasa_flag ) - { - diff_idx = 0; - } - else - { - diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; - } - - diff_idx_min = min( diff_idx_min, diff_idx ); - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - elev_alph[b] = no_theta_masa[bits_direction_masa[diff_idx] - 3]; - } - else - { - elev_alph[b] = no_theta_masa[bits_direction_masa[diff_idx] - 3] * 2 - 1; - } - - if ( q_direction->band_data[b].energy_ratio_index_mod[0] > diffuseness_index_max_ec_frame ) - { - bands_entropic[b] = 0; - - if ( q_direction->not_in_2D > 0 ) - { - decode_fixed_rate( q_direction, bitstream, index, b, nblocks ); - } - else - { - /* in 2D */ - for ( m = 0; m < nblocks; m++ ) - { - q_direction->band_data[b].elevation[m] = 0.f; - q_direction->band_data[b].elevation_index[m] = 0; - - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; - q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph[b][m] ); - q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, q_direction->cfg.mc_ls_setup ); - } - } - } - else - { - bands_entropic[b] = 1; - } - } - - /*EC for the low diffuseness*/ - - /*Elevation only if not 2D */ - if ( q_direction->not_in_2D > 0 ) - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; - avg_elevation_idx = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_elevation_alphabet ); - } - else - { - avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3] * 2 - 1; - avg_elevation_idx = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_elevation_alphabet ); - avg_elevation_idx = ivas_qmetadata_dereorder_generic( avg_elevation_idx ) + ( avg_elevation_alphabet >> 1 ); - } - - gr_param_elev = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 4 + 1 ); - if ( gr_param_elev == 4 ) /* all the elevation distances are zero */ - { - for ( b = start_band; b < nbands; b++ ) - { - if ( bands_entropic[b] ) - { - int16_t tmp_index; - if ( hrmasa_flag ) - { - diff_idx = 0; - } - else - { - diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; - } - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); - } - else - { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); - - /*reorder elevation indexing*/ - tmp_index = avg_elevation_index_projected - ( elev_alph[b] >> 1 ); - if ( tmp_index < 0 ) - { - tmp_index = tmp_index * -2; - } - else if ( tmp_index > 0 ) - { - tmp_index = tmp_index * 2 - 1; - } - avg_elevation_index_projected = tmp_index; - } - - for ( m = 0; m < nblocks; m++ ) - { - q_direction->band_data[b].elevation_index[m] = avg_elevation_index_projected; - - /*deduce aplhabet for azimuth*/ - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; - } - else - { - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; - } - - /*decode elevation*/ - q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->cfg.mc_ls_setup ); - } - } - } - } - else - { - for ( b = start_band; b < nbands; b++ ) - { - if ( bands_entropic[b] ) - { - if ( hrmasa_flag ) - { - diff_idx = 0; - } - else - { - diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; - } - - for ( m = 0; m < nblocks; m++ ) - { - int16_t tmp_index; - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); - tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, 2 * elev_alph[b] - 1, gr_param_elev ); - if ( tmp_index % 2 ) - { - tmp_index = avg_elevation_index_projected + ( ( tmp_index + 1 ) >> 1 ); - } - else - { - tmp_index = avg_elevation_index_projected - ( tmp_index >> 1 ); - } - q_direction->band_data[b].elevation_index[m] = tmp_index; - - /*deduce aplhabet for azimuth*/ - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; - } - else - { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_idx, avg_elevation_alphabet, elev_alph[b] ); - - tmp_index = ivas_qmetadata_DecodeExtendedGR( bitstream, index, elev_alph[b], gr_param_elev ); - tmp_index = ivas_qmetadata_ReorderElevationDecoded( tmp_index, avg_elevation_index_projected, elev_alph[b] ); - - /*reorder elevation indexing*/ - tmp_index = tmp_index - ( elev_alph[b] >> 1 ); - if ( tmp_index < 0 ) - { - tmp_index = tmp_index * -2; - } - else if ( tmp_index > 0 ) - { - tmp_index = tmp_index * 2 - 1; - } - q_direction->band_data[b].elevation_index[m] = tmp_index; - - /*deduce aplhabet for azimuth*/ - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; - } - - /*decode elevation*/ - q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->cfg.mc_ls_setup ); - } - } - } - } - } - else - { - for ( b = start_band; b < nbands; b++ ) - { - if ( bands_entropic[b] ) - { - if ( hrmasa_flag ) - { - diff_idx = 0; - } - else - { - diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; - } - - for ( m = 0; m < nblocks; m++ ) - { - q_direction->band_data[b].elevation_index[m] = 0; - - /*deduce alphabet for azimuth*/ - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][q_direction->band_data[b].elevation_index[m]]; - } - else - { - azith_alph[b][m] = no_phi_masa[bits_direction_masa[diff_idx] - 1][( q_direction->band_data[b].elevation_index[m] + 1 ) >> 1]; - } - - /*decode elevation*/ - q_direction->band_data[b].elevation[m] = deindex_elevation( &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->cfg.mc_ls_setup ); - } - } - } - } - - /*Azimuth*/ - avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ - avg_azimuth_index = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, avg_azimuth_alphabet ); - avg_azimuth_index = ivas_qmetadata_dereorder_generic( avg_azimuth_index ); - avg_azimuth_index = avg_azimuth_index + ( avg_azimuth_alphabet >> 1 ); - - gr_param_azith = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, 5 + 1 ); - if ( gr_param_azith == 5 ) /* all the azimuth distances are zero */ - { - for ( b = start_band; b < nbands; b++ ) - { - if ( bands_entropic[b] ) - { - for ( m = 0; m < nblocks; m++ ) - { - q_direction->band_data[b].azimuth_index[m] = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); - - if ( azith_alph[b][m] == 1 ) - { - q_direction->band_data[b].azimuth[m] = 0.f; - } - else - { - q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->band_data[b].elevation_index[m], 0, q_direction->cfg.mc_ls_setup ); - } - } - } - } - } - else - { - set_zero( avg_direction_vector, 3 ); - use_adapt_avg = 0; - idx = 0; - - for ( b = start_band; b < nbands; b++ ) - { - if ( bands_entropic[b] ) - { - for ( m = 0; m < nblocks; m++ ) - { - if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( idx == MASA_LIMIT_IDX_AVG_AZI ) && ( nblocks > 1 ) ) - { - use_adapt_avg = bitstream[*index]; - ( *index )--; - } - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, azith_alph[b][m] ); - q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeExtendedGR( bitstream, index, azith_alph[b][m], gr_param_azith ); - q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_ReorderElevationDecoded( q_direction->band_data[b].azimuth_index[m], avg_azimuth_index_projected, azith_alph[b][m] ); - - if ( azith_alph[b][m] == 1 ) - { - q_direction->band_data[b].azimuth[m] = 0.f; - } - else - { - q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->band_data[b].elevation_index[m], 0, q_direction->cfg.mc_ls_setup ); - } - if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) - { - if ( idx < MASA_LIMIT_IDX_AVG_AZI ) - { - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); - } - else - { - if ( use_adapt_avg == 1 ) - { - if ( m == 0 ) - { - v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); - } - /*compute the average direction per already coded subband */ - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); - avg_azimuth_index = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); - } - } - idx++; - } - } - } - } - } - - return ( index_start - *index ); -} -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_raw_decode_dir_512_fx() * * Main function for raw decoding of the directions *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_raw_decode_dir_512_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ UWord16 *bitstream, /* i : bitstream Q0*/ @@ -4040,52 +2254,8 @@ static Word16 ivas_qmetadata_raw_decode_dir_512_fx( return sub( index_start, *index ); } -#else -static int16_t ivas_qmetadata_raw_decode_dir_512( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, - const int16_t nbands, - const int16_t start_band, - const SPHERICAL_GRID_DATA *sph_grid16 /* i : spherical grid for deindexing */ -) -{ - int16_t b, m, i; - int16_t nblocks; - int16_t index_start; - uint16_t value; - - index_start = *index; - nblocks = q_direction->cfg.nblocks; - - for ( b = start_band; b < nbands; b++ ) - { - for ( m = 0; m < nblocks; m++ ) - { - value = 0; - for ( i = 0; i < q_direction->band_data[b].bits_sph_idx[m]; i++ ) - { - value = ( value << 1 ) + bitstream[( *index )--]; - } - q_direction->band_data[b].spherical_index[m] = value; - - if ( q_direction->band_data[b].bits_sph_idx[m] == 16 ) - { - deindex_sph_idx( value, sph_grid16, &( q_direction->band_data[b].elevation[m] ), &( q_direction->band_data[b].azimuth[m] ) ); - } - else - { - deindex_spherical_component( q_direction->band_data[b].spherical_index[m], &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m], &q_direction->band_data[b].azimuth_index[m], &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->cfg.mc_ls_setup ); - } - } - } - - return ( index_start - *index ); -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_raw_decode_dir_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ UWord16 *bitstream, /* i : bitstream Q0*/ @@ -4130,73 +2300,18 @@ static Word16 ivas_qmetadata_raw_decode_dir_fx( move32(); q_direction->band_data[b].elevation_index[m] = 0; move16(); - azith_alph = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; /*Q0*/ - move16(); - q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph ); /*Q0*/ - move16(); - q_direction->band_data[b].azimuth_fx[m] = deindex_azimuth_fx( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, q_direction->cfg.mc_ls_setup ); /*Q22*/ - move32(); - } - } - } - - return sub( index_start, *index ); -} -#else -/*------------------------------------------------------------------------- - * ivas_qmetadata_raw_decode_dir() - * - * Main function for raw decoding of the directions - *------------------------------------------------------------------------*/ - -static int16_t ivas_qmetadata_raw_decode_dir( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - uint16_t *bitstream, /* i : bitstream */ - int16_t *index, - const int16_t nbands, - const int16_t start_band, - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding*/ -) -{ - int16_t b, m, azith_alph; - int16_t diff_idx; - int16_t nblocks; - int16_t index_start; - - index_start = *index; - nblocks = q_direction->cfg.nblocks; - - for ( b = start_band; b < nbands; b++ ) - { - if ( q_direction->not_in_2D > 0 ) - { - decode_fixed_rate( q_direction, bitstream, index, b, nblocks ); - } - else - { - if ( hrmasa_flag ) - { - diff_idx = 0; - } - else - { - diff_idx = q_direction->band_data[b].energy_ratio_index_mod[0]; - } - - for ( m = 0; m < nblocks; m++ ) - { - q_direction->band_data[b].elevation[m] = 0.f; - q_direction->band_data[b].elevation_index[m] = 0; - azith_alph = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; - q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph ); - q_direction->band_data[b].azimuth[m] = deindex_azimuth( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, q_direction->cfg.mc_ls_setup ); + azith_alph = no_phi_masa[bits_direction_masa[diff_idx] - 1][0]; /*Q0*/ + move16(); + q_direction->band_data[b].azimuth_index[m] = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, azith_alph ); /*Q0*/ + move16(); + q_direction->band_data[b].azimuth_fx[m] = deindex_azimuth_fx( q_direction->band_data[b].azimuth_index[m], q_direction->band_data[b].bits_sph_idx[m], 0, 1, q_direction->cfg.mc_ls_setup ); /*Q22*/ + move32(); } } } - return ( index_start - *index ); + return sub( index_start, *index ); } -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_DecodeQuasiUniform() @@ -4205,7 +2320,6 @@ static int16_t ivas_qmetadata_raw_decode_dir( *------------------------------------------------------------------------*/ /*! r: Value read from the bitstream */ -#ifdef IVAS_FLOAT_FIXED static UWord16 ivas_qmetadata_DecodeQuasiUniform( const UWord16 *bitstream, /* i : pointer to the bitstream to read Q0*/ Word16 *index, /* i : position in the bitstream to start reading (gets updated with reading) Q0*/ @@ -4233,34 +2347,6 @@ static UWord16 ivas_qmetadata_DecodeQuasiUniform( return value; } -#else -static uint16_t ivas_qmetadata_DecodeQuasiUniform( - const uint16_t *bitstream, /* i : pointer to the bitstream to read */ - int16_t *index, /* i : position in the bitstream to start reading (gets updated with reading) */ - const uint16_t alphabet_size /* i : size of the alphabet, used to calculate the number of bits needed */ -) -{ - int16_t i, bits; - uint16_t tresh, value; - - - bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ - tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; - - value = 0; - for ( i = 0; i < bits; i++ ) - { - value = ( value << 1 ) + bitstream[( *index )--]; - } - - if ( value >= tresh ) - { - value = ( value << 1 ) - tresh + bitstream[( *index )--]; - } - - return value; -} -#endif /*------------------------------------------------------------------------- @@ -4271,7 +2357,6 @@ static uint16_t ivas_qmetadata_DecodeQuasiUniform( /*! r: Value decoded from the bitstream */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_qmetadata_DecodeExtendedGR( UWord16 *bitstream, /* i : pointer to the bitstream to read Q0*/ Word16 *index, /* i/o: position in the bitstream to start reading (gets updated with reading) */ @@ -4322,52 +2407,6 @@ Word16 ivas_qmetadata_DecodeExtendedGR( return value; } -#else -int16_t ivas_qmetadata_DecodeExtendedGR( - uint16_t *bitstream, /* i : pointer to the bitstream to read */ - int16_t *index, /* i/o: position in the bitstream to start reading (gets updated with reading) */ - const int16_t alph_size, /* i : size of the alphabet, used to calculate the number of bits needed */ - const int16_t gr_param /* i : GR parameter that indicates the limit for the most significant bits (msb) */ -) -{ - int16_t i, msb_size; - uint16_t value; - int16_t msb, lsb; - - msb_size = ( alph_size + ( 1 << gr_param ) - 1 ) >> gr_param; /* ceil division */ - if ( msb_size <= 3 ) - { - value = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, alph_size ); - } - else - { - msb = 0; - while ( ( msb < msb_size - 1 ) && ( bitstream[*index] != 0 ) ) - { - msb++; - ( *index )--; - } - - if ( msb == msb_size - 1 ) - { - lsb = ivas_qmetadata_DecodeQuasiUniform( bitstream, index, alph_size - ( ( msb_size - 1 ) << gr_param ) ); - } - else - { - ( *index )--; - lsb = 0; - for ( i = 0; i < gr_param; i++ ) - { - lsb = ( lsb << 1 ) + bitstream[( *index )--]; - } - } - - value = ( msb << gr_param ) + lsb; - } - - return value; -} -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_ReorderElevationDecoded() @@ -4376,7 +2415,6 @@ int16_t ivas_qmetadata_DecodeExtendedGR( *------------------------------------------------------------------------*/ /*! r: Elevation index as it will be read by the dequantizer */ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_ReorderElevationDecoded( const Word16 elev_dist, /* i : Distance to the average extracted from the bitstream Q0*/ const Word16 elev_avg, /* i : Average value over time-blocks extracted from the bitstream Q0*/ @@ -4386,7 +2424,7 @@ static Word16 ivas_qmetadata_ReorderElevationDecoded( Word16 dist_reorder; Word16 elev_index_reorder; - dist_reorder = ivas_qmetadata_dereorder_generic( elev_dist ); /*Q0*/ + dist_reorder = ivas_qmetadata_dereorder_generic_fx( elev_dist ); /*Q0*/ elev_index_reorder = add( elev_avg, dist_reorder ); IF( elev_index_reorder < 0 ) @@ -4400,31 +2438,6 @@ static Word16 ivas_qmetadata_ReorderElevationDecoded( return elev_index_reorder; /*Q0*/ } -#else -static int16_t ivas_qmetadata_ReorderElevationDecoded( - const int16_t elev_dist, /* i : Distance to the average extracted from the bitstream */ - const int16_t elev_avg, /* i : Average value over time-blocks extracted from the bitstream */ - const int16_t elev_alph /* i : elevation alphabet */ -) -{ - int16_t dist_reorder; - int16_t elev_index_reorder; - - dist_reorder = ivas_qmetadata_dereorder_generic( elev_dist ); - elev_index_reorder = elev_avg + dist_reorder; - - if ( elev_index_reorder < 0 ) - { - elev_index_reorder += elev_alph; - } - else if ( elev_index_reorder >= elev_alph ) - { - elev_index_reorder -= elev_alph; - } - - return elev_index_reorder; -} -#endif /*-----------------------------------------------------------------------* @@ -4432,7 +2445,6 @@ static int16_t ivas_qmetadata_ReorderElevationDecoded( *-----------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 read_directions_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ const UWord8 coding_subbands, /* i : number of directions Q0*/ @@ -4561,370 +2573,145 @@ static Word16 read_directions_fx( fixed_rate = 1; move16(); nbits = 0; - move16(); - } - ELSE - { - /* check if fixed_rate */ - fixed_rate = bitstream[bit_pos--]; - move16(); - nbits = 1; - move16(); - } - - IF( EQ_16( fixed_rate, 1 ) ) - { - /* decode_fixed_rate()*/ - nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); - } - ELSE - { - - /* decode elevation */ - nbits = add( nbits, decode_elevation_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ - /* decode azimuth */ - nbits = add( nbits, decode_azimuth_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ - } - } - } - ELSE - { - set_zero_direction_fx( q_direction, i, masa_subframes ); - } - - diff = add( diff, sub( nbits, allowed_bits ) ); - - /* update bits for next block */ - update_bits_next_block( q_direction, &diff, ind_order[j + 1], coding_subbands, masa_subframes ); - } - } - ELSE - { - last_j = q_direction->cfg.start_band; /*Q0*/ - move16(); - } - - - FOR( j = last_j; j < coding_subbands; j++ ) - { - i = ind_order[j]; - move16(); - bits_dir0 = (Word16 *) q_direction->band_data[i].bits_sph_idx; /*Q0*/ - - nbits = 0; - move16(); - allowed_bits = sum16_fx( bits_dir0, q_direction->cfg.nblocks ); /*Q0*/ - test(); - IF( allowed_bits > 0 && EQ_16( masa_subframes, 1 ) ) - { - nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ - } - ELSE - { - IF( allowed_bits > 0 ) - { - use_vq = 0; - move16(); - max_nb_idx = 0; - move16(); - FOR( k = 0; k < masa_subframes; k++ ) - { - IF( GT_16( bits_dir0[k], use_vq ) ) - { - use_vq = bits_dir0[k]; /*Q0*/ - move16(); - max_nb_idx = k; - move16(); - } - } - - byteBuffer = 0; - move16(); - - test(); - IF( GT_16( use_vq, 1 ) && LE_16( use_vq, LIMIT_USE_COMMON ) ) - { - bits_dir0[max_nb_idx] = sub( bits_dir0[max_nb_idx], 1 ); - move16(); - allowed_bits = sub( allowed_bits, 1 ); - - /* read 1 bit to tell if joint of VQ coding */ - byteBuffer = bitstream[bit_pos--]; - move16(); - } - - IF( allowed_bits > 0 ) - { - test(); - IF( EQ_32( byteBuffer, 1 ) || LE_16( use_vq, 1 ) ) - { - nbits = read_common_direction_fx( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); /*Q0*/ - } - ELSE - { - /* decode_fixed_rate()*/ - nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); - } - } - ELSE - { - set_zero_direction_fx( q_direction, i, masa_subframes ); - } - } - ELSE - { - set_zero_direction_fx( q_direction, i, masa_subframes ); - } - } - } - } - ELSE - { - /* 2D */ - FOR( j = 0; j < coding_subbands; j++ ) - { - FOR( k = 0; k < q_direction->cfg.nblocks; k++ ) - { - q_direction->band_data[j].elevation_fx[k] = 0; - move32(); - q_direction->band_data[j].elevation_index[k] = 0; - move16(); - } - } - - nbits = decode_azimuth2D_fx( q_direction, bitstream, coding_subbands, &bit_pos, masa_subframes ); /*Q0*/ - } - nbits = sub( *pbit_pos, bit_pos ); - *pbit_pos = bit_pos; - move16(); - - return nbits; -} -#else -static int16_t read_directions( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - const uint8_t coding_subbands, /* i : number of directions */ - const uint8_t masa_subframes, /* i : number of tiles */ - uint16_t *bitstream, /* i : bitstream to be read */ - int16_t *pbit_pos, - int16_t *ind_order ) -{ - int16_t j, k, allowed_bits, last_j, nbits, fixed_rate; - int16_t i; - int16_t diff; - uint16_t byteBuffer; - int16_t use_vq, max_nb_idx; - int16_t bit_pos; - int16_t *bits_dir0; - - bit_pos = *pbit_pos; - - diff = 0; - if ( q_direction->not_in_2D ) - { - if ( coding_subbands > 1 ) - { - j = ind_order[coding_subbands - 1]; - allowed_bits = 0; - - for ( k = 0; k < masa_subframes; k++ ) - { - allowed_bits += q_direction->band_data[j].bits_sph_idx[k]; - } - - last_j = j - ( allowed_bits == 0 ); - - for ( j = 0; j < last_j; j++ ) - { - i = ind_order[j]; - bits_dir0 = (int16_t *) q_direction->band_data[i].bits_sph_idx; - - nbits = 0; - allowed_bits = sum_s( bits_dir0, q_direction->cfg.nblocks ); - use_vq = 0; - max_nb_idx = 0; - - for ( k = 0; k < q_direction->cfg.nblocks; k++ ) - { - if ( bits_dir0[k] > use_vq ) - { - use_vq = bits_dir0[k]; - max_nb_idx = k; - } - } - - if ( q_direction->cfg.nblocks == 1 ) - { - byteBuffer = 0; - } - else - { - byteBuffer = 0; - if ( use_vq <= 1 ) - { - byteBuffer = 1; - } - if ( use_vq > 1 && use_vq <= LIMIT_USE_COMMON ) - { - bits_dir0[max_nb_idx] -= 1; - allowed_bits -= 1; - /* read 1 bit to tell if joint of VQ coding */ - byteBuffer = bitstream[bit_pos--]; - } - } - - for ( k = 0; k < masa_subframes; k++ ) - { - q_direction->band_data[i].bits_sph_idx[k] = bits_dir0[k]; - if ( bits_dir0[k] > 2 ) - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[i].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3]; - } - else - { - q_direction->band_data[i].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3] * 2 - 1; - } - } - else - { - q_direction->band_data[i].elevation_m_alphabet[k] = 1; - } - } - - if ( allowed_bits > 0 ) - { - if ( byteBuffer == 1 ) - { - nbits = read_common_direction( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); - } - else - { - if ( q_direction->cfg.nblocks == 1 && q_direction->band_data[i].bits_sph_idx[0] <= MASA_MIN_BITS_TF + 1 ) - { - /* there is fixed rate only, no need to read */ - fixed_rate = 1; - nbits = 0; + move16(); } - else + ELSE { /* check if fixed_rate */ fixed_rate = bitstream[bit_pos--]; + move16(); nbits = 1; + move16(); } - if ( fixed_rate == 1 ) + IF( EQ_16( fixed_rate, 1 ) ) { /* decode_fixed_rate()*/ - nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); } - else + ELSE { - /* decode elevation */ - nbits += decode_elevation( q_direction, bitstream, &bit_pos, i, masa_subframes ); + /* decode elevation */ + nbits = add( nbits, decode_elevation_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ /* decode azimuth */ - nbits += decode_azimuth( q_direction, bitstream, &bit_pos, i, masa_subframes ); + nbits = add( nbits, decode_azimuth_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ } } } - else + ELSE { - set_zero_direction( q_direction, i, masa_subframes ); + set_zero_direction_fx( q_direction, i, masa_subframes ); } - diff += nbits - allowed_bits; + + diff = add( diff, sub( nbits, allowed_bits ) ); /* update bits for next block */ - update_bits_next_block( q_direction, &diff, ind_order[j + 1], coding_subbands, masa_subframes ); + update_bits_next_block_fx( q_direction, &diff, ind_order[j + 1], coding_subbands, masa_subframes ); } } - else + ELSE { - last_j = q_direction->cfg.start_band; + last_j = q_direction->cfg.start_band; /*Q0*/ + move16(); } - for ( j = last_j; j < coding_subbands; j++ ) + FOR( j = last_j; j < coding_subbands; j++ ) { i = ind_order[j]; - bits_dir0 = (int16_t *) q_direction->band_data[i].bits_sph_idx; + move16(); + bits_dir0 = (Word16 *) q_direction->band_data[i].bits_sph_idx; /*Q0*/ nbits = 0; - allowed_bits = sum_s( bits_dir0, q_direction->cfg.nblocks ); - if ( allowed_bits > 0 && masa_subframes == 1 ) + move16(); + allowed_bits = sum16_fx( bits_dir0, q_direction->cfg.nblocks ); /*Q0*/ + test(); + IF( allowed_bits > 0 && EQ_16( masa_subframes, 1 ) ) { - nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); /*Q0*/ } - else + ELSE { - if ( allowed_bits > 0 ) + IF( allowed_bits > 0 ) { use_vq = 0; + move16(); max_nb_idx = 0; - for ( k = 0; k < masa_subframes; k++ ) + move16(); + FOR( k = 0; k < masa_subframes; k++ ) { - if ( bits_dir0[k] > use_vq ) + IF( GT_16( bits_dir0[k], use_vq ) ) { - use_vq = bits_dir0[k]; + use_vq = bits_dir0[k]; /*Q0*/ + move16(); max_nb_idx = k; + move16(); } } byteBuffer = 0; + move16(); - if ( use_vq > 1 && use_vq <= LIMIT_USE_COMMON ) + test(); + IF( GT_16( use_vq, 1 ) && LE_16( use_vq, LIMIT_USE_COMMON ) ) { - bits_dir0[max_nb_idx] -= 1; - allowed_bits -= 1; + bits_dir0[max_nb_idx] = sub( bits_dir0[max_nb_idx], 1 ); + move16(); + allowed_bits = sub( allowed_bits, 1 ); /* read 1 bit to tell if joint of VQ coding */ byteBuffer = bitstream[bit_pos--]; + move16(); } - if ( allowed_bits > 0 ) + IF( allowed_bits > 0 ) { - if ( byteBuffer == 1 || use_vq <= 1 ) + test(); + IF( EQ_32( byteBuffer, 1 ) || LE_16( use_vq, 1 ) ) { - nbits = read_common_direction( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); + nbits = read_common_direction_fx( bitstream, q_direction, i, masa_subframes, allowed_bits, &bit_pos ); /*Q0*/ } - else + ELSE { /* decode_fixed_rate()*/ - nbits += decode_fixed_rate( q_direction, bitstream, &bit_pos, i, masa_subframes ); + nbits = add( nbits, decode_fixed_rate_fx( q_direction, bitstream, &bit_pos, i, masa_subframes ) ); } } - else + ELSE { - set_zero_direction( q_direction, i, masa_subframes ); + set_zero_direction_fx( q_direction, i, masa_subframes ); } } - else + ELSE { - set_zero_direction( q_direction, i, masa_subframes ); + set_zero_direction_fx( q_direction, i, masa_subframes ); } } } } - else + ELSE { /* 2D */ - for ( j = 0; j < coding_subbands; j++ ) + FOR( j = 0; j < coding_subbands; j++ ) { - for ( k = 0; k < q_direction->cfg.nblocks; k++ ) + FOR( k = 0; k < q_direction->cfg.nblocks; k++ ) { - q_direction->band_data[j].elevation[k] = 0; + q_direction->band_data[j].elevation_fx[k] = 0; + move32(); q_direction->band_data[j].elevation_index[k] = 0; + move16(); } } - nbits = decode_azimuth2D( q_direction, bitstream, coding_subbands, &bit_pos, masa_subframes ); + + nbits = decode_azimuth2D_fx( q_direction, bitstream, coding_subbands, &bit_pos, masa_subframes ); /*Q0*/ } - nbits = *pbit_pos - bit_pos; + nbits = sub( *pbit_pos, bit_pos ); *pbit_pos = bit_pos; + move16(); return nbits; } -#endif /*-------------------------------------------------------------------* * decode_azimuth() @@ -4933,7 +2720,6 @@ static int16_t read_directions( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 decode_azimuth_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ UWord16 *bitstream, /* i : bitstream to be read Q0*/ @@ -5116,156 +2902,6 @@ static Word16 decode_azimuth_fx( return nbits; } -#else -static int16_t decode_azimuth( - IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ - uint16_t *bitstream, /* i : bitstream to be read */ - int16_t *pbit_pos, /* i/o: current position in bitstream */ - const int16_t idx_subband, /* i : subband index */ - const int16_t masa_subframes /* i : number of tiles */ -) -{ - int16_t bit_pos, nbits, k; - uint16_t use_context, byteBuffer; - uint16_t min_idx; - int16_t j_az, max_val; - - nbits = 0; - bit_pos = *pbit_pos; - byteBuffer = 0; - - j_az = 0; - /* check number of valid indexes to decode */ - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[idx_subband].azimuth_index[k] < MASA_NO_INDEX ) - { - j_az++; - } - else - { - q_direction->band_data[idx_subband].azimuth[k] = 0.f; /*To be in sync with encoder values.*/ - } - } - - if ( j_az == 0 ) - { - return nbits; - } - - if ( byteBuffer == 0 ) - { - /* use context */ - use_context = 0; - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[idx_subband].bits_sph_idx[k] <= 1 ) - { - use_context = 1; - } - } - - if ( use_context == 1 ) - { - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 0 ) - { - q_direction->band_data[idx_subband].azimuth_index[k] = 0; - q_direction->band_data[idx_subband].azimuth[k] = 0; - } - else - { - if ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 1 ) - { - byteBuffer = bitstream[bit_pos--]; - q_direction->band_data[idx_subband].azimuth_index[k] = byteBuffer; - - q_direction->band_data[idx_subband].azimuth[k] = q_direction->band_data[idx_subband].azimuth_index[k] * ( -180.f ); - } - else - { - q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - ( q_direction->band_data[idx_subband].bits_sph_idx[k] == 2 ) ); - - q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], q_direction->band_data[idx_subband].bits_sph_idx[k], q_direction->band_data[idx_subband].elevation_index[k], 1, q_direction->cfg.mc_ls_setup ); - } - } - } - } - else - { - /* read bit to check if min removed encoding */ - byteBuffer = bitstream[bit_pos--]; - if ( byteBuffer == 0 ) /* regular GR coding5 */ - { - /* read GR_order */ - byteBuffer = bitstream[bit_pos--]; - nbits += 1; - - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[idx_subband].bits_sph_idx[k] > 0 ) - { - if ( no_phi_masa[q_direction->band_data[idx_subband].bits_sph_idx[k] - 1][q_direction->band_data[idx_subband].elevation_index[k]] > 1 ) - { - q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - byteBuffer ); - q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], q_direction->band_data[idx_subband].bits_sph_idx[k], q_direction->band_data[idx_subband].elevation_index[k], 1, q_direction->cfg.mc_ls_setup ); - } - else - { - q_direction->band_data[idx_subband].azimuth[k] = 0; - q_direction->band_data[idx_subband].azimuth_index[k] = 0; - } - } - else - { - q_direction->band_data[idx_subband].azimuth[k] = 0; - q_direction->band_data[idx_subband].azimuth_index[k] = 0; - } - } - } - else - { - /* min removed GR coding */ - /* read GR_order */ - byteBuffer = bitstream[bit_pos--]; - /* read min index value */ - maximum_s( q_direction->band_data[idx_subband].azimuth_m_alphabet, masa_subframes, &max_val ); - min_idx = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, max_val, MASA_GR_ORD_AZ ); - - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[idx_subband].bits_sph_idx[k] > 0 ) - { - if ( no_phi_masa[q_direction->band_data[idx_subband].bits_sph_idx[k] - 1][q_direction->band_data[idx_subband].elevation_index[k]] > 1 ) - { - q_direction->band_data[idx_subband].azimuth_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[idx_subband].azimuth_m_alphabet[k], MASA_GR_ORD_AZ - 1 - byteBuffer ); - q_direction->band_data[idx_subband].azimuth_index[k] += min_idx; - q_direction->band_data[idx_subband].azimuth[k] = deindex_azimuth( q_direction->band_data[idx_subband].azimuth_index[k], q_direction->band_data[idx_subband].bits_sph_idx[k], q_direction->band_data[idx_subband].elevation_index[k], 1, q_direction->cfg.mc_ls_setup ); - } - else - { - q_direction->band_data[idx_subband].azimuth[k] = 0; - q_direction->band_data[idx_subband].azimuth_index[k] = 0; - } - } - else - { - q_direction->band_data[idx_subband].azimuth[k] = 0; - q_direction->band_data[idx_subband].azimuth_index[k] = 0; - } - } - } - } - } - - nbits = *pbit_pos - bit_pos; - - *pbit_pos = bit_pos; - - return nbits; -} -#endif /*-------------------------------------------------------------------* @@ -5275,7 +2911,6 @@ static int16_t decode_azimuth( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 decode_elevation_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ UWord16 *bitstream, /* i : input bitstream Q0*/ @@ -5369,183 +3004,63 @@ static Word16 decode_elevation_fx( ELSE { /* not same; decode mean removed GR */ - byteBuffer = bitstream[bit_pos]; /*Q0*/ - bit_pos = sub( bit_pos, 1 ); - move16(); - GR_ord_elevation = extract_l( L_sub( MASA_GR_ORD_EL, byteBuffer ) ); /*Q0*/ - - FOR( k = 0; k < masa_subframes; k++ ) - { - IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) ) - { - q_direction->band_data[j].elevation_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[j].elevation_m_alphabet[k], GR_ord_elevation ); /*Q0*/ - move16(); - q_direction->band_data[j].elevation_fx[k] = deindex_elevation_fx( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], q_direction->cfg.mc_ls_setup ); /*Q22*/ - move32(); - } - } - } - } - } - - FOR( k = 0; k < masa_subframes; k++ ) - { - test(); - IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) && - LE_16( no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][q_direction->band_data[j].elevation_index[k]], 1 ) ) - { - q_direction->band_data[j].azimuth_index[k] = MASA_NO_INDEX; /*Q0*/ - move16(); - q_direction->band_data[j].azimuth_m_alphabet[k] = 1; /*Q0*/ - move16(); - } - ELSE - { - q_direction->band_data[j].azimuth_index[k] = 0; - move16(); - IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) ) - { - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][q_direction->band_data[j].elevation_index[k]]; /*Q0*/ - move16(); - } - ELSE - { - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][0]; /*Q0*/ - move16(); - q_direction->band_data[j].elevation_index[k] = 0; - move16(); - } - } - } - - nbits = sub( *pbit_pos, bit_pos ); - *pbit_pos = bit_pos; - move16(); - - return nbits; -} -#else -static int16_t decode_elevation( - IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ - uint16_t *bitstream, /* i : input bitstream */ - int16_t *pbit_pos, /* i/o: current position to be read in bitstream*/ - const int16_t j, /* i : subband index */ - const int16_t masa_subframes /* i : number of tiles */ -) -{ - int16_t nr_NO_INDEX, nbits; - int16_t bit_pos; - uint16_t byteBuffer; - int16_t k, GR_ord_elevation; - uint16_t same_idx; - - nr_NO_INDEX = 0; - nbits = 0; - bit_pos = *pbit_pos; - - for ( k = 0; k < masa_subframes; k++ ) - { - q_direction->band_data[j].elevation_index[k] = 0; - q_direction->band_data[j].elevation[k] = 0; - - if ( q_direction->band_data[j].bits_sph_idx[k] > 0 ) - { - if ( q_direction->band_data[j].bits_sph_idx[k] <= 2 ) - { - q_direction->band_data[j].elevation_index[k] = MASA_NO_INDEX; - nr_NO_INDEX += 1; - q_direction->band_data[j].elevation[k] = 0; - q_direction->band_data[j].elevation_m_alphabet[k] = 1; - } - else - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[q_direction->band_data[j].bits_sph_idx[k] - 3]; - } - else - { - q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[q_direction->band_data[j].bits_sph_idx[k] - 3] * 2 - 1; - } - } - } - else - { - nr_NO_INDEX++; - } - } - - if ( nr_NO_INDEX < masa_subframes ) - { - { - /* read if same or not */ - byteBuffer = bitstream[bit_pos--]; - if ( byteBuffer == 1 ) /* same value */ - { - /* read value */ - byteBuffer = bitstream[bit_pos--]; - byteBuffer = ( byteBuffer << 1 ) + bitstream[bit_pos--]; - same_idx = byteBuffer; - - for ( k = 0; k < masa_subframes; k++ ) - { - if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) - { - q_direction->band_data[j].elevation_index[k] = same_idx; - q_direction->band_data[j].elevation[k] = deindex_elevation( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], q_direction->cfg.mc_ls_setup ); - } - } - } - else - { - /* not same; decode mean removed GR */ - byteBuffer = bitstream[bit_pos--]; - GR_ord_elevation = MASA_GR_ORD_EL - byteBuffer; + byteBuffer = bitstream[bit_pos]; /*Q0*/ + bit_pos = sub( bit_pos, 1 ); + move16(); + GR_ord_elevation = extract_l( L_sub( MASA_GR_ORD_EL, byteBuffer ) ); /*Q0*/ - for ( k = 0; k < masa_subframes; k++ ) + FOR( k = 0; k < masa_subframes; k++ ) { - if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) + IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) ) { - q_direction->band_data[j].elevation_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[j].elevation_m_alphabet[k], GR_ord_elevation ); - q_direction->band_data[j].elevation[k] = deindex_elevation( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], q_direction->cfg.mc_ls_setup ); + q_direction->band_data[j].elevation_index[k] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, q_direction->band_data[j].elevation_m_alphabet[k], GR_ord_elevation ); /*Q0*/ + move16(); + q_direction->band_data[j].elevation_fx[k] = deindex_elevation_fx( &q_direction->band_data[j].elevation_index[k], q_direction->band_data[j].bits_sph_idx[k], q_direction->cfg.mc_ls_setup ); /*Q22*/ + move32(); } } } } } - for ( k = 0; k < masa_subframes; k++ ) + FOR( k = 0; k < masa_subframes; k++ ) { - if ( ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) && - ( no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][q_direction->band_data[j].elevation_index[k]] <= 1 ) ) + test(); + IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) && + LE_16( no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][q_direction->band_data[j].elevation_index[k]], 1 ) ) { - q_direction->band_data[j].azimuth_index[k] = MASA_NO_INDEX; - q_direction->band_data[j].azimuth_m_alphabet[k] = 1; + q_direction->band_data[j].azimuth_index[k] = MASA_NO_INDEX; /*Q0*/ + move16(); + q_direction->band_data[j].azimuth_m_alphabet[k] = 1; /*Q0*/ + move16(); } - else + ELSE { q_direction->band_data[j].azimuth_index[k] = 0; - if ( q_direction->band_data[j].elevation_index[k] < MASA_NO_INDEX ) + move16(); + IF( LT_32( q_direction->band_data[j].elevation_index[k], MASA_NO_INDEX ) ) { - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][q_direction->band_data[j].elevation_index[k]]; + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][q_direction->band_data[j].elevation_index[k]]; /*Q0*/ + move16(); } - else + ELSE { - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[q_direction->band_data[j].bits_sph_idx[k] - 1][0]; + q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[sub( q_direction->band_data[j].bits_sph_idx[k], 1 )][0]; /*Q0*/ + move16(); q_direction->band_data[j].elevation_index[k] = 0; + move16(); } } } - nbits = *pbit_pos - bit_pos; + nbits = sub( *pbit_pos, bit_pos ); *pbit_pos = bit_pos; + move16(); return nbits; } -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 decode_fixed_rate_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata */ const UWord16 *bitstream, /* i : bitstream to be read Q0*/ @@ -5580,44 +3095,6 @@ static Word16 decode_fixed_rate_fx( return nbits; } -#else -/*---------------------------------------------------------------- - * decode_fixed_rate() - * - * decoding in fixed rate case, i.e. when using the spherical indexes - *-----------------------------------------------------------------*/ - -/*! r: number of bits read */ -static int16_t decode_fixed_rate( - IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata */ - const uint16_t *bitstream, /* i : bitstream to be read */ - int16_t *pbit_pos, /* i/o: position in bitstream */ - const int16_t b, /* i : subband index */ - const int16_t nblocks /* i : number of tiles in subband */ -) -{ - int16_t nbits, m, i; - uint16_t value; - - nbits = 0; - - for ( m = 0; m < nblocks; m++ ) - { - value = 0; - for ( i = 0; i < q_direction->band_data[b].bits_sph_idx[m]; i++ ) - { - value = ( value << 1 ) + bitstream[( *pbit_pos )--]; - } - - q_direction->band_data[b].spherical_index[m] = value; - nbits += q_direction->band_data[b].bits_sph_idx[m]; - - deindex_spherical_component( q_direction->band_data[b].spherical_index[m], &q_direction->band_data[b].azimuth[m], &q_direction->band_data[b].elevation[m], &q_direction->band_data[b].azimuth_index[m], &q_direction->band_data[b].elevation_index[m], q_direction->band_data[b].bits_sph_idx[m], q_direction->cfg.mc_ls_setup ); - } - - return nbits; -} -#endif /*-------------------------------------------------------------------* * decode_azimuth2D() * @@ -5625,7 +3102,6 @@ static int16_t decode_fixed_rate( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 decode_azimuth2D_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ UWord16 *bitstream, /* i : bitstream to be read Q0*/ @@ -5726,93 +3202,6 @@ static Word16 decode_azimuth2D_fx( return nbits; } -#else -static int16_t decode_azimuth2D( - IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ - uint16_t *bitstream, /* i : bitstream to be read */ - const int16_t coding_subbands, /* i : number of subbands */ - int16_t *pbit_pos, - const int16_t no_frames ) -{ - int16_t i, j, k; - int16_t allowed_bits, nbits; - int16_t use_vq; - uint16_t Buffer; - int16_t bit_pos; - int16_t *bits_dir0; - - bit_pos = *pbit_pos; - nbits = 0; - for ( j = 0; j < coding_subbands; j++ ) - { - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - allowed_bits = sum_s( bits_dir0, no_frames ); - - if ( allowed_bits > 0 ) - { - use_vq = 0; - for ( k = 0; k < no_frames; k++ ) - { - q_direction->band_data[j].elevation[k] = 0; - q_direction->band_data[j].elevation_index[k] = 0; - - if ( bits_dir0[k] > use_vq ) - { - use_vq = bits_dir0[k]; - } - } - - if ( use_vq <= 3 && allowed_bits <= 11 ) - { - if ( allowed_bits <= no_frames + 1 ) - { - set_f( q_direction->band_data[j].azimuth, 0.0f, no_frames ); - for ( k = 0; k < min( allowed_bits, no_frames ); k++ ) - { - q_direction->band_data[j].azimuth[k] = ( -180.f ) * bitstream[bit_pos--]; - nbits += 1; - } - } - else - { - nbits += read_truncGR_azimuth( bitstream, q_direction, j, no_frames, &bit_pos ); - } - } - else - { - for ( k = 0; k < no_frames; k++ ) - { - Buffer = 0; - for ( i = 0; i < bits_dir0[k]; i++ ) - { - Buffer = ( Buffer << 1 ) + bitstream[bit_pos--]; - } - - nbits += bits_dir0[k]; - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[j].azimuth[k] = 360.0f / (float) ( 1 << bits_dir0[k] ) * Buffer - 180; - q_direction->band_data[j].azimuth[k] = companding_azimuth( q_direction->band_data[j].azimuth[k], q_direction->cfg.mc_ls_setup, - ( q_direction->band_data[j].elevation[k] > MC_MASA_THR_ELEVATION ), -1 ); - } - else - { - q_direction->band_data[j].azimuth[k] = 360.0f / (float) ( 1 << bits_dir0[k] ) * Buffer - 180; - } - } - } - } - else - { - set_zero_direction( q_direction, j, no_frames ); - } - } - *pbit_pos = bit_pos; - - return nbits; -} -#endif /*-------------------------------------------------------------------* * set_zero_direction() @@ -5820,7 +3209,6 @@ static int16_t decode_azimuth2D( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void set_zero_direction_fx( IVAS_QDIRECTION *q_direction, const Word16 idx_band, /*Q0*/ @@ -5844,26 +3232,6 @@ static void set_zero_direction_fx( return; } -#else -static void set_zero_direction( - IVAS_QDIRECTION *q_direction, - const int16_t idx_band, - const int16_t len ) -{ - int16_t k; - - for ( k = 0; k < len; k++ ) - { - q_direction->band_data[idx_band].azimuth[k] = 0; - q_direction->band_data[idx_band].azimuth_index[k] = 0; - q_direction->band_data[idx_band].elevation[k] = 0; - q_direction->band_data[idx_band].elevation_index[k] = 0; - q_direction->band_data[idx_band].spherical_index[k] = 0; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -5872,7 +3240,6 @@ static void set_zero_direction( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 read_truncGR_azimuth_fx( UWord16 *bitstream, /* i : bitstream to be read Q0*/ IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ @@ -5951,75 +3318,6 @@ static Word16 read_truncGR_azimuth_fx( return nbits; } -#else -static int16_t read_truncGR_azimuth( - uint16_t *bitstream, /* i : bitstream to be read */ - IVAS_QDIRECTION *q_direction, /* i/o: quantized metadata structure */ - const int16_t j, /* i : subband index */ - const int16_t no_subframes, /* i : number of tiles */ - int16_t *pbit_pos /* i/o: position in bitstream */ -) -{ - int16_t i; - int16_t nbits; - uint16_t idx; - int16_t no_symb, allowed_bits; - - allowed_bits = sum_s( (int16_t *) q_direction->band_data[j].bits_sph_idx, no_subframes ); - nbits = 0; - if ( allowed_bits <= no_subframes + 1 ) - { - for ( i = 0; i < min( allowed_bits, no_subframes ); i++ ) - { - if ( bitstream[( *pbit_pos )--] == 0 ) - { - q_direction->band_data[j].azimuth[i] = 0.0f; - } - else - { - q_direction->band_data[j].azimuth[i] = -180; - } - nbits++; - } - - return nbits; - } - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - no_symb = 9; - } - else - { - no_symb = 8; - } - nbits = 0; - - nbits = *pbit_pos; - - for ( i = 0; i < no_subframes; i++ ) - { - idx = ivas_qmetadata_DecodeExtendedGR( bitstream, pbit_pos, no_symb, 0 ); - q_direction->band_data[j].azimuth_index[i] = idx; - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[j].azimuth[i] = cb_azi_chan[( idx + 1 ) >> 1]; - if ( idx % 2 > 0 ) - { - q_direction->band_data[j].azimuth[i] = -q_direction->band_data[j].azimuth[i]; - } - } - else - { - q_direction->band_data[j].azimuth[i] = azimuth_cb[idx]; - } - } - - nbits -= *pbit_pos; - - return nbits; -} -#endif /*-------------------------------------------------------------------* * read_common_direction() @@ -6028,7 +3326,6 @@ static int16_t read_truncGR_azimuth( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 read_common_direction_fx( UWord16 *bitstream, /* i : bitstream to be read Q0*/ IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ @@ -6067,216 +3364,102 @@ static Word16 read_common_direction_fx( nbits = add( nbits, 1 ); } *pbit_pos = bit_pos; - move16(); - - /*nbits += read_truncGR_azimuth(bitstream, qdirection, j, no_subframes, pbit_pos); */ - return nbits; - } - - - byteBuffer = bitstream[bit_pos]; /*Q0*/ - move16(); - bit_pos = sub( bit_pos, 1 ); - bits_el = 1; - move16(); - nbits = add( nbits, 1 ); - /* elevation is already set to 0*/ - IF( EQ_32( byteBuffer, 1 ) ) - { - byteBuffer = bitstream[bit_pos--]; /*Q0*/ - move16(); - bits_el = add( bits_el, 1 ); - nbits = add( nbits, 1 ); - IF( byteBuffer == 0 ) - { - FOR( i = 0; i < no_subframes; i++ ) - { - q_direction->band_data[j].elevation_fx[i] = delta_theta_masa_fx[2]; /*Q22*/ - move32(); - } - } - ELSE - { - byteBuffer = bitstream[bit_pos--]; - move16(); - bits_el = add( bits_el, 1 ); - nbits = add( nbits, 1 ); - IF( byteBuffer == 0 ) - { - FOR( i = 0; i < no_subframes; i++ ) - { - q_direction->band_data[j].elevation_fx[i] = L_negate( delta_theta_masa_fx[2] ); /*Q22*/ - move32(); - } - } - ELSE - { - /* theta is +/- 90; no azimuth is read */ - byteBuffer = bitstream[bit_pos--]; - move16(); - nbits = add( nbits, 1 ); - IF( byteBuffer == 0 ) - { - set32_fx( q_direction->band_data[j].elevation_fx, ( 90 * ONE_IN_Q22 ), no_subframes ); /*Q22*/ - set32_fx( q_direction->band_data[j].azimuth_fx, 0, no_subframes ); /*Q22*/ - } - ELSE - { - set32_fx( q_direction->band_data[j].elevation_fx, ( -90 * ONE_IN_Q22 ), no_subframes ); /*Q22*/ - set32_fx( q_direction->band_data[j].azimuth_fx, 0, no_subframes ); /*Q22*/ - } - *pbit_pos = bit_pos; - move16(); - - return nbits; - } - } - } - - bits_el = sub( sum16_fx( (Word16 *) q_direction->band_data[j].bits_sph_idx, no_subframes ), bits_el ); /*Q0*/ - - IF( LE_16( bits_el, add( no_subframes, 1 ) ) ) - { - nbits = add( nbits, s_min( no_subframes, bits_el ) ); - FOR( i = 0; i < s_min( no_subframes, bits_el ); i++ ) - { - byteBuffer = bitstream[bit_pos]; /*Q0*/ - move16(); - bit_pos = sub( bit_pos, 1 ); - /*qdirection->azimuth_index[j][i] = (uint16_t) byteBuffer; */ - q_direction->band_data[j].azimuth_fx[i] = azimuth_cb_fx[byteBuffer]; /*Q22*/ - move32(); - } - } - ELSE - { - nbits = add( nbits, read_truncGR_azimuth_fx( bitstream, q_direction, j, no_subframes, &bit_pos ) ); - } - - *pbit_pos = bit_pos; - move16(); - - return nbits; -} -#else -static int16_t read_common_direction( - uint16_t *bitstream, /* i : bitstream to be read */ - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - const int16_t j, /* i : subband index */ - const int16_t no_subframes, /* i : number of tiles */ - const int16_t bits_total, /* i : number of bits for subband directional data */ - int16_t *pbit_pos /* i/o: position in bitstream */ -) -{ - int16_t nbits; - int16_t bit_pos; - int16_t i; - uint16_t byteBuffer; - int16_t bits_el; - - bit_pos = *pbit_pos; - nbits = 0; - - set_zero_direction( q_direction, j, no_subframes ); - if ( bits_total == 0 ) - { - return nbits; - } - - if ( bits_total <= no_subframes + 1 ) - { - for ( i = 0; i < min( no_subframes, bits_total ); i++ ) - { - byteBuffer = bitstream[bit_pos--]; - /*qdirection->azimuth_index[j][i] = (uint16_t)byteBuffer; */ - q_direction->band_data[j].azimuth[i] = azimuth_cb[byteBuffer]; - nbits += 1; - } - *pbit_pos = bit_pos; + move16(); /*nbits += read_truncGR_azimuth(bitstream, qdirection, j, no_subframes, pbit_pos); */ return nbits; } - byteBuffer = bitstream[bit_pos--]; + byteBuffer = bitstream[bit_pos]; /*Q0*/ + move16(); + bit_pos = sub( bit_pos, 1 ); bits_el = 1; - nbits += 1; + move16(); + nbits = add( nbits, 1 ); /* elevation is already set to 0*/ - if ( byteBuffer == 1 ) + IF( EQ_32( byteBuffer, 1 ) ) { - byteBuffer = bitstream[bit_pos--]; - bits_el += 1; - nbits += 1; - if ( byteBuffer == 0 ) + byteBuffer = bitstream[bit_pos--]; /*Q0*/ + move16(); + bits_el = add( bits_el, 1 ); + nbits = add( nbits, 1 ); + IF( byteBuffer == 0 ) { - for ( i = 0; i < no_subframes; i++ ) + FOR( i = 0; i < no_subframes; i++ ) { - q_direction->band_data[j].elevation[i] = delta_theta_masa[2]; + q_direction->band_data[j].elevation_fx[i] = delta_theta_masa_fx[2]; /*Q22*/ + move32(); } } - else + ELSE { byteBuffer = bitstream[bit_pos--]; - bits_el += 1; - nbits += 1; - if ( byteBuffer == 0 ) + move16(); + bits_el = add( bits_el, 1 ); + nbits = add( nbits, 1 ); + IF( byteBuffer == 0 ) { - for ( i = 0; i < no_subframes; i++ ) + FOR( i = 0; i < no_subframes; i++ ) { - q_direction->band_data[j].elevation[i] = -delta_theta_masa[2]; + q_direction->band_data[j].elevation_fx[i] = L_negate( delta_theta_masa_fx[2] ); /*Q22*/ + move32(); } } - else + ELSE { /* theta is +/- 90; no azimuth is read */ byteBuffer = bitstream[bit_pos--]; - nbits += 1; - if ( byteBuffer == 0 ) + move16(); + nbits = add( nbits, 1 ); + IF( byteBuffer == 0 ) { - set_f( q_direction->band_data[j].elevation, 90.0f, no_subframes ); - set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); + set32_fx( q_direction->band_data[j].elevation_fx, ( 90 * ONE_IN_Q22 ), no_subframes ); /*Q22*/ + set32_fx( q_direction->band_data[j].azimuth_fx, 0, no_subframes ); /*Q22*/ } - else + ELSE { - set_f( q_direction->band_data[j].elevation, -90.0f, no_subframes ); - set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); + set32_fx( q_direction->band_data[j].elevation_fx, ( -90 * ONE_IN_Q22 ), no_subframes ); /*Q22*/ + set32_fx( q_direction->band_data[j].azimuth_fx, 0, no_subframes ); /*Q22*/ } *pbit_pos = bit_pos; + move16(); return nbits; } } } - bits_el = sum_s( (int16_t *) q_direction->band_data[j].bits_sph_idx, no_subframes ) - bits_el; + bits_el = sub( sum16_fx( (Word16 *) q_direction->band_data[j].bits_sph_idx, no_subframes ), bits_el ); /*Q0*/ - if ( bits_el <= no_subframes + 1 ) + IF( LE_16( bits_el, add( no_subframes, 1 ) ) ) { - nbits += min( no_subframes, bits_el ); - for ( i = 0; i < min( no_subframes, bits_el ); i++ ) + nbits = add( nbits, s_min( no_subframes, bits_el ) ); + FOR( i = 0; i < s_min( no_subframes, bits_el ); i++ ) { - byteBuffer = bitstream[bit_pos--]; + byteBuffer = bitstream[bit_pos]; /*Q0*/ + move16(); + bit_pos = sub( bit_pos, 1 ); /*qdirection->azimuth_index[j][i] = (uint16_t) byteBuffer; */ - q_direction->band_data[j].azimuth[i] = azimuth_cb[byteBuffer]; + q_direction->band_data[j].azimuth_fx[i] = azimuth_cb_fx[byteBuffer]; /*Q22*/ + move32(); } } - else + ELSE { - nbits += read_truncGR_azimuth( bitstream, q_direction, j, no_subframes, &bit_pos ); + nbits = add( nbits, read_truncGR_azimuth_fx( bitstream, q_direction, j, no_subframes, &bit_pos ) ); } *pbit_pos = bit_pos; + move16(); return nbits; } -#endif /*-----------------------------------------------------------------------* * Local functions: coherence *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void decode_spread_coherence_fx( IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: quantized metadata structure */ Word16 idx_d, /* i : direction index Q0*/ @@ -6398,118 +3581,6 @@ static void decode_spread_coherence_fx( return; } -#else -static void decode_spread_coherence( - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: quantized metadata structure */ - int16_t idx_d, /* i : direction index */ - const int16_t no_frames, /* i : number of time subframes */ - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ -) -{ - int16_t i, j; - float var_azi; - int16_t idx_sub_cb; - float dct_coh[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t MASA_grouping[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t coding_subbands, coding_subbands_0, d, two_dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t min_index; - - coding_subbands_0 = hQMetaData->q_direction[0].cfg.nbands; - coding_subbands = hQMetaData->q_direction[idx_d].cfg.nbands; - if ( coding_subbands_0 <= 5 ) - { - for ( j = 0; j < 5; j++ ) - { - MASA_grouping[j] = j; - } - } - else - { - if ( coding_subbands_0 <= 8 ) - { - mvs2s( MASA_grouping_8_to_5, MASA_grouping, 8 ); - } - else if ( coding_subbands_0 <= 12 ) - { - mvs2s( MASA_grouping_12_to_5, MASA_grouping, 12 ); - } - else if ( coding_subbands_0 <= 18 ) - { - mvs2s( MASA_grouping_18_to_5, MASA_grouping, 18 ); - } - else - { - if ( coding_subbands_0 <= 24 ) - { - mvs2s( MASA_grouping_24_to_5, MASA_grouping, 24 ); - } - } - } - - if ( coding_subbands < coding_subbands_0 ) - { - d = 0; - for ( j = 0; j < coding_subbands_0; j++ ) - { - if ( hQMetaData->twoDirBands[j] == 1 ) - { - two_dir_band[d++] = j; - } - } - } - else - { - set_s( two_dir_band, 0, coding_subbands ); - } - - q_direction = &hQMetaData->q_direction[idx_d]; - - for ( i = 0; i < coding_subbands; i++ ) - { - var_azi = var( q_direction->band_data[i].azimuth, no_frames ); - if ( hrmasa_flag ) - { - minimum_s( (int16_t *) ( q_direction->band_data[i].energy_ratio_index ), q_direction->cfg.nblocks, &min_index ); - min_index = min_index >> 1; - } - else - { - min_index = q_direction->band_data[i].energy_ratio_index[0]; - } - - if ( var_azi < MASA_DELTA_AZI_DCT0 ) - { - idx_sub_cb = MASA_NO_CV_COH * min_index; - } - else - { - idx_sub_cb = MASA_NO_CV_COH * ( min_index + DIRAC_DIFFUSE_LEVELS ); /* NO_CV_COH = 8 */ - } - - dct_coh[i][0] = coherence_cb0_masa[idx_sub_cb + q_direction->coherence_band_data[i].spread_coherence_dct0_index]; - - if ( coding_subbands < coding_subbands_0 ) - { - assert( idx_d == 1 ); - dct_coh[i][1] = coherence_cb1_masa[MASA_grouping[two_dir_band[i]] * MASA_NO_CV_COH1 + q_direction->coherence_band_data[i].spread_coherence_dct1_index]; - } - else - { - dct_coh[i][1] = coherence_cb1_masa[MASA_grouping[i] * MASA_NO_CV_COH1 + q_direction->coherence_band_data[i].spread_coherence_dct1_index]; - } - - for ( j = 2; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - dct_coh[i][j] = 0; - } - - invdct4_transform( dct_coh[i], q_direction->coherence_band_data[i].spread_coherence ); - } - - return; -} -#endif /*-------------------------------------------------------------------* * read_huf() @@ -6518,7 +3589,6 @@ static void decode_spread_coherence( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static ivas_error read_huf( Word16 *num_bits_read, /*Q0*/ const UWord16 *bitstream, /* i : bitstream to be read Q0*/ @@ -6565,46 +3635,6 @@ static ivas_error read_huf( return IVAS_ERR_OK; } -#else -static ivas_error read_huf( - int16_t *num_bits_read, - const uint16_t *bitstream, /* i : bitstream to be read */ - uint16_t *out, /* o : decoded value */ - const int16_t start_pos, /* i : starting position for reading */ - const int16_t len, /* i : number of codewords */ - const int16_t *huff_code, /* i : Huffman table */ - const int16_t max_len /* i : maximum codeword length */ -) -{ - int16_t done = 0, end_pos; - uint16_t ByteBuffer; - int16_t nbits, val; - uint16_t i; - - end_pos = start_pos; - nbits = 0; - val = 0; - while ( ( done == 0 ) && ( nbits < max_len ) ) - { - ByteBuffer = bitstream[end_pos--]; - val = val * 2 + ( ByteBuffer & 1 ); - nbits += 1; - for ( i = 0; i < len; i++ ) - { - if ( val == huff_code[i] ) - { - *out = i; - done = 1; - break; - } - } - } - - *num_bits_read = end_pos; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -6612,7 +3642,6 @@ static ivas_error read_huf( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 read_GR_min_removed_data( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -6673,60 +3702,6 @@ move16(); return nbits; } -#else -static int16_t read_GR_min_removed_data( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - const int16_t *no_cv_vec, - const int16_t no_data, - int16_t *decoded_idx, - const int16_t no_symb ) -{ - int16_t j; - int16_t bit_pos; - int16_t nbits, bits_GR; - uint16_t byteBuffer; - int16_t min_index; - - bit_pos = *p_bit_pos; - - /* read GR order */ - byteBuffer = bitstream[bit_pos--]; - nbits = 1; - - /* read min index */ - bits_GR = bit_pos; - min_index = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_symb, 0 ); - nbits += bits_GR - bit_pos; - - /* read GR data */ - for ( j = 0; j < no_data; j++ ) - { - bits_GR = bit_pos; - if ( no_cv_vec[j] > 1 ) - { - decoded_idx[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_cv_vec[j] - min_index, ( byteBuffer & 1 ) ); - nbits += bits_GR - bit_pos; - } - else - { - decoded_idx[j] = 0; - } - } - - for ( j = 0; j < no_data; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - decoded_idx[j] += min_index; - } - } - - *p_bit_pos = bit_pos; - - return nbits; -} -#endif /*-------------------------------------------------------------------* @@ -6735,7 +3710,6 @@ static int16_t read_GR_min_removed_data( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 decode_fixed_rate_composed_index_coherence_fx( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -6866,115 +3840,6 @@ static Word16 decode_fixed_rate_composed_index_coherence_fx( return nbits; } -#else -static int16_t decode_fixed_rate_composed_index_coherence( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - const int16_t no_bands, - int16_t *no_cv_vec, - uint16_t *decoded_index, - const int16_t no_symb ) -{ - /* fixed rate */ - uint64_t no_cb; - uint16_t temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; - uint64_t idx_fr; - int16_t no_bits_vec1, half_no_bands; - int16_t bit_pos; - int16_t nbits, bits_GR; - int16_t j; - int16_t no_vals_local; - int16_t no_bits_vec; - - bit_pos = *p_bit_pos; - set_s( (int16_t *) temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); - - no_cb = 1; - nbits = 0; - if ( no_bands > MASA_LIMIT_NO_BANDS_SUR_COH ) - { - /* read 8-max_val with GR0 */ - bits_GR = bit_pos; - no_vals_local = no_symb - ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_symb, 0 ); - nbits += bits_GR - bit_pos; - for ( j = 0; j < no_bands; j++ ) - { - if ( no_cv_vec[j] > no_vals_local ) - { - no_cv_vec[j] = no_vals_local; - } - } - } - - half_no_bands = no_bands / 2; - if ( sum_s( no_cv_vec, no_bands ) > MASA_COH_LIMIT_2IDX ) - { - no_cb = 1; - - for ( j = 0; j < half_no_bands; j++ ) - { - no_cb *= no_cv_vec[j]; - } - no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - no_cb = 1; - for ( j = half_no_bands; j < no_bands; j++ ) - { - no_cb *= no_cv_vec[j]; - } - no_bits_vec1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - } - else - { - no_cb = 1; - for ( j = 0; j < no_bands; j++ ) - { - no_cb *= no_cv_vec[j]; - } - no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - no_bits_vec1 = 0; - } - if ( no_bits_vec1 > 0 ) - { - idx_fr = 0; - for ( j = 0; j < no_bits_vec; j++ ) - { - idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; - } - - nbits += no_bits_vec; - - decode_combined_index( idx_fr, no_cv_vec, temp_index, half_no_bands ); - - idx_fr = 0; - for ( j = 0; j < no_bits_vec1; j++ ) - { - idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; - } - nbits += no_bits_vec1; - decode_combined_index( idx_fr, &no_cv_vec[half_no_bands], &temp_index[half_no_bands], half_no_bands ); - } - else - { - idx_fr = 0; - for ( j = 0; j < no_bits_vec; j++ ) - { - idx_fr = ( idx_fr << 1 ) + bitstream[bit_pos--]; - } - nbits += no_bits_vec; - decode_combined_index( idx_fr, no_cv_vec, temp_index, no_bands ); - } - - for ( j = 0; j < no_bands; j++ ) - { - decoded_index[j] = temp_index[j]; - } - nbits = *p_bit_pos - bit_pos; - - *p_bit_pos = bit_pos; - - return nbits; -} -#endif /*-------------------------------------------------------------------* * read_coherence_data_hr_512() @@ -6983,7 +3848,6 @@ static int16_t decode_fixed_rate_composed_index_coherence( *-------------------------------------------------------------------*/ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 read_coherence_data_hr_512_fx( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -7065,88 +3929,15 @@ static Word16 read_coherence_data_hr_512_fx( decoded_idx = add( ivas_qmetadata_DecodeExtendedGR( bitstream, p_bit_pos, cb_size - min_index, GR_param ), min_index ); /*Q0*/ decoded_idx_fx = L_shl( decoded_idx, 9 ); /*Q9*/ hQMetaData->q_direction[idx_dir].coherence_band_data[j].spread_coherence[k] = (UWord8) L_add( Mpy_32_32( decoded_idx_fx, delta_fx ), L_shr( delta_fx, 23 ) ); /*Q0*/ - move16(); - } - } - } - - nbits = sub( nbits, *p_bit_pos ); - - return nbits; -} -#else -static int16_t read_coherence_data_hr_512( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata structure */ - const int16_t idx_dir, /* i : direction index */ - const int16_t nbits_coh ) -{ - int16_t j, k, i; - int16_t nbands, nblocks; - int16_t min_index, GR_param; - int16_t cb_size, nbits; - int16_t decoded_idx; - float delta; - - nbands = hQMetaData->q_direction[idx_dir].cfg.nbands; - nblocks = hQMetaData->q_direction[idx_dir].cfg.nblocks; - - cb_size = 1 << nbits_coh; - delta = 256.0f / cb_size; - nbits = *p_bit_pos; - for ( k = 0; k < nblocks; k++ ) - { - /* read method */ - if ( bitstream[( *p_bit_pos )--] == 1 ) - { - /* average removed */ - /* read average index */ - min_index = 0; - for ( i = 0; i < nbits_coh; i++ ) - { - min_index = ( min_index << 1 ) + bitstream[( *p_bit_pos )--]; - } - /* read GR param */ - GR_param = bitstream[( *p_bit_pos )--]; - for ( j = 0; j < nbands; j++ ) - { - decoded_idx = ivas_qmetadata_DecodeExtendedGR( bitstream, p_bit_pos, 2 * cb_size, GR_param ); - if ( decoded_idx % 2 ) - { - decoded_idx = ( ( decoded_idx + 1 ) >> 1 ) + min_index; - } - else - { - decoded_idx = -( decoded_idx >> 1 ) + min_index; - } - hQMetaData->q_direction[idx_dir].coherence_band_data[j].spread_coherence[k] = (uint8_t) ( decoded_idx * delta + delta / 2.0f ); - } - } - else - { - /* read min_index */ - min_index = 0; - for ( i = 0; i < nbits_coh; i++ ) - { - min_index = ( min_index << 1 ) + bitstream[( *p_bit_pos )--]; - } - - /* read GR param */ - GR_param = bitstream[( *p_bit_pos )--]; - for ( j = 0; j < nbands; j++ ) - { - decoded_idx = ivas_qmetadata_DecodeExtendedGR( bitstream, p_bit_pos, cb_size - min_index, GR_param ) + min_index; - hQMetaData->q_direction[idx_dir].coherence_band_data[j].spread_coherence[k] = (uint8_t) ( decoded_idx * delta + delta / 2.0f ); + move16(); } } } - nbits = nbits - *p_bit_pos; + nbits = sub( nbits, *p_bit_pos ); return nbits; } -#endif /*------------------------------------------------------------------- * * read_coherence_data() @@ -7155,7 +3946,6 @@ static int16_t read_coherence_data_hr_512( *------------------------------------------------------------------- */ /*! r: number of bits read */ -#ifdef IVAS_FLOAT_FIXED static Word16 read_coherence_data_fx( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -7387,446 +4177,56 @@ static Word16 read_coherence_data_fx( decode_combined_index_fx( dct0_index, no_cv_vec, spr_coh_temp_index, coding_subbands ); FOR( j = 0; j < coding_subbands; j++ ) - { - q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; /*Q0*/ - move16(); - } - } - - /* read GR data for DCT1 */ - FOR( j = 0; j < coding_subbands; j++ ) - { - bits_GR = bit_pos; - idx_dct1[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, shl( MASA_NO_CV_COH1, 1 ), 0 ); /*Q0*/ - move16(); - nbits = add( nbits, sub( bits_GR, bit_pos ) ); - } - bits_GR = bit_pos; - move16(); /* just to store the data */ - - /* read average index */ - read_huf( &bit_pos, bitstream, &av_index, bit_pos, MASA_NO_CV_COH1, huff_code_av_masa, 10 ); /* 10 is MAX_LEN*/ - nbits = add( nbits, sub( bits_GR, bit_pos ) ); - - /* write indexes in metadata structure */ - FOR( j = 0; j < coding_subbands; j++ ) - { - IF( L_and( idx_dct1[j], 1 ) ) - { - q_direction->coherence_band_data[j].spread_coherence_dct1_index = (UWord16) L_add( L_shr( L_add( idx_dct1[j], 1 ), 1 ), av_index ); /*Q0*/ - move16(); - } - ELSE - { - q_direction->coherence_band_data[j].spread_coherence_dct1_index = (UWord16) L_add( L_shr( L_negate( idx_dct1[j] ), 1 ), av_index ); /*Q0*/ - move16(); - } - } - } - nbits = sub( *p_bit_pos, bit_pos ); - - *p_bit_pos = bit_pos; - move16(); - - return nbits; -} -#else -static int16_t read_coherence_data( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata structure */ - const int16_t idx_dir, /* i : direction index */ - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding*/ -) -{ - int16_t j; - int16_t no_cv_vec[MASA_MAXIMUM_CODING_SUBBANDS]; - uint64_t no_cb; - int16_t no_bits_vec, nbits; - int16_t bits_GR; - uint16_t idx_dct1[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t av_index; - int16_t no_bits_vec1; - int16_t bit_pos; - IVAS_QDIRECTION *q_direction; - int16_t coding_subbands; - uint64_t dct0_index; - int16_t decoded_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t byteBuffer; - int16_t idx_ER; - int16_t min_index; - int16_t extra_cv; - - coding_subbands = hQMetaData->q_direction[idx_dir].cfg.nbands; - extra_cv = (int16_t) ( coding_subbands / MASA_FACTOR_CV_COH ); - q_direction = &( hQMetaData->q_direction[idx_dir] ); - bit_pos = *p_bit_pos; - nbits = 0; - - if ( q_direction->cfg.nblocks == 1 ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - if ( hrmasa_flag ) - { - idx_ER = 7 - ( q_direction->band_data[j].energy_ratio_index_mod[0] >> 1 ) + extra_cv; - } - else - { - idx_ER = 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + extra_cv; - } - no_cv_vec[j] = idx_ER + 1; - } - - if ( sum_s( no_cv_vec, coding_subbands ) == coding_subbands ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - q_direction->coherence_band_data[j].spread_coherence[0] = 0; - } - - return 0; - } - byteBuffer = bitstream[bit_pos--]; - nbits += 1; - - if ( byteBuffer & 1 ) - { - /* decode GR min removed */ - nbits += read_GR_min_removed_data( bitstream, &bit_pos, no_cv_vec, coding_subbands, decoded_idx, MASA_MAX_NO_CV_SUR_COH + extra_cv ); - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( decoded_idx[j] * ( 255.0f / (float) ( 7 - ( q_direction->band_data[j].energy_ratio_index_mod[0] >> ( hrmasa_flag ) ) + coding_subbands / MASA_FACTOR_CV_COH ) ) ); - } - else - { - q_direction->coherence_band_data[j].spread_coherence[0] = 0; - } - } - } - else - { - uint16_t decoded_index[MASA_MAXIMUM_CODING_SUBBANDS]; - /* decode joint index */ -#ifdef IVAS_FLOAT_FIXED - nbits += decode_fixed_rate_composed_index_coherence_fx( bitstream, &bit_pos, coding_subbands, no_cv_vec, decoded_index, MASA_NO_CV_COH + coding_subbands / MASA_FACTOR_CV_COH ); -#else - nbits += decode_fixed_rate_composed_index_coherence( bitstream, &bit_pos, coding_subbands, no_cv_vec, decoded_index, MASA_NO_CV_COH + coding_subbands / MASA_FACTOR_CV_COH ); -#endif - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( decoded_index[j] * ( 255.0f / (float) ( 7 - ( q_direction->band_data[j].energy_ratio_index_mod[0] >> ( hrmasa_flag ) ) + coding_subbands / MASA_FACTOR_CV_COH ) ) ); - } - else - { - q_direction->coherence_band_data[j].spread_coherence[0] = 0; - } - } - } - } - else - { - for ( j = 0; j < coding_subbands; j++ ) - { - if ( hrmasa_flag ) - { - minimum_s( (int16_t *) ( q_direction->band_data[j].energy_ratio_index ), q_direction->cfg.nblocks, &min_index ); - no_cv_vec[j] = len_cb_dct0_masa[min_index >> 1]; /* spread coherence DCT0*/ - } - else - { - no_cv_vec[j] = len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]]; /* spread coherence DCT0*/ - } - } - - if ( sum_s( no_cv_vec, coding_subbands ) > MASA_COH_LIMIT_2IDX ) - { - uint16_t spr_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; - - no_cb = 1; - for ( j = 0; j < coding_subbands / 2; j++ ) - { - no_cb *= no_cv_vec[j]; - } - - no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - no_cb = 1; - - for ( j = coding_subbands / 2; j < coding_subbands; j++ ) - { - no_cb *= no_cv_vec[j]; - } - - no_bits_vec1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - dct0_index = 0; - - for ( j = 0; j < no_bits_vec; j++ ) - { - dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; - } - - nbits += no_bits_vec; - set_s( (int16_t *) spr_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); - - decode_combined_index( dct0_index, no_cv_vec, spr_coh_temp_index, coding_subbands / 2 ); - - dct0_index = 0; - for ( j = 0; j < no_bits_vec1; j++ ) - { - dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; - } - - nbits += no_bits_vec1; - - decode_combined_index( dct0_index, &no_cv_vec[coding_subbands / 2], &spr_coh_temp_index[coding_subbands / 2], coding_subbands / 2 ); - - for ( j = 0; j < coding_subbands; j++ ) - { - q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; - } - } - else - { - /* spread coherence */ - uint16_t spr_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; - - no_cb = 1; - - for ( j = 0; j < coding_subbands; j++ ) - { - no_cb *= no_cv_vec[j]; - } - - no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - - /* read joint index for DCT0 */ - no_bits_vec = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - dct0_index = 0; - - for ( j = 0; j < no_bits_vec; j++ ) - { - dct0_index = ( dct0_index << 1 ) + bitstream[bit_pos--]; - } - - nbits += no_bits_vec; - - set_s( (int16_t *) spr_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); - - decode_combined_index( dct0_index, no_cv_vec, spr_coh_temp_index, coding_subbands ); - - for ( j = 0; j < coding_subbands; j++ ) - { - q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; - } - } - - /* read GR data for DCT1 */ - for ( j = 0; j < coding_subbands; j++ ) - { - bits_GR = bit_pos; - idx_dct1[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, 2 * MASA_NO_CV_COH1, 0 ); - nbits += bits_GR - bit_pos; - } - bits_GR = bit_pos; /* just to store the data */ - - /* read average index */ - read_huf( &bit_pos, bitstream, &av_index, bit_pos, MASA_NO_CV_COH1, huff_code_av_masa, 10 ); /* 10 is MAX_LEN*/ - nbits += ( bits_GR - bit_pos ); - - /* write indexes in metadata structure */ - for ( j = 0; j < coding_subbands; j++ ) - { - if ( idx_dct1[j] % 2 ) - { - q_direction->coherence_band_data[j].spread_coherence_dct1_index = ( idx_dct1[j] + 1 ) / 2 + av_index; - } - else - { - q_direction->coherence_band_data[j].spread_coherence_dct1_index = -idx_dct1[j] / 2 + av_index; - } - } - } - nbits = *p_bit_pos - bit_pos; - - *p_bit_pos = bit_pos; - - return nbits; -} -#endif - -/*-------------------------------------------------------------------* - * read_surround_coherence() - * - * - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static int16_t read_surround_coherence( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - IVAS_QMETADATA *hQMetaData /* i/o: quantized metadata structure */ -) -{ - int16_t coding_subbands; - int16_t no_cv_vec[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bit_pos; - float error_ratio_surr; - int16_t idx_ER[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bits_sur_coherence, bits_GR; - int16_t j, d, k, idx; - uint16_t byteBuffer; - uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t min_index; - - coding_subbands = hQMetaData->q_direction[0].cfg.nbands; - q_direction = hQMetaData->q_direction; - - bits_sur_coherence = 0; - bit_pos = *p_bit_pos; - - d = 0; - for ( j = 0; j < coding_subbands; j++ ) - { - error_ratio_surr = 1.0f; - - if ( hQMetaData->no_directions == 2 ) - { - d += hQMetaData->twoDirBands[j]; - idx = max( d - 1, 0 ); - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[idx].energy_ratio[0] * hQMetaData->twoDirBands[j]; - } - else - { - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0]; - } - - if ( error_ratio_surr <= 0 ) - { - error_ratio_surr = 0; - no_cv_vec[j] = 1; - idx_ER[j] = masa_sq( 0.0f, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - } - else - { - idx_ER[j] = masa_sq( error_ratio_surr, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - no_cv_vec[j] = idx_cb_sur_coh_masa[idx_ER[j]] + 2; - } - } - - if ( sum_s( no_cv_vec, coding_subbands ) == coding_subbands ) - { - /* surround coherence is zero */ - for ( j = 0; j < coding_subbands; j++ ) - { - for ( k = 0; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[j].surround_coherence[k] = 0; - } - } - } - - return bits_sur_coherence; - } - - /* read how the surround coherence is encoded */ - byteBuffer = bitstream[bit_pos--]; - bits_sur_coherence += 1; - - if ( byteBuffer & 1 ) - { - /* GR decoding */ - /* read GR order */ - byteBuffer = bitstream[bit_pos--]; - bits_sur_coherence += 1; - - /* read min index */ - bits_GR = bit_pos; - min_index = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, MASA_MAX_NO_CV_SUR_COH, 0 ); - bits_sur_coherence += bits_GR - bit_pos; - - /* read GR data */ - for ( j = 0; j < coding_subbands; j++ ) - { - bits_GR = bit_pos; - /* decoding for min removed */ - if ( no_cv_vec[j] > 1 ) - { - idx_sur_coh[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_cv_vec[j] - min_index, ( byteBuffer & 1 ) ); - bits_sur_coherence += bits_GR - bit_pos; - } - else - { - idx_sur_coh[j] = 0; - } - } - - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j] + min_index; - } - else - { - hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j]; - } - - hQMetaData->surcoh_band_data[j].surround_coherence[0] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; - } - } - else - { - /* fixed rate */ - uint16_t sur_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; - set_s( (int16_t *) sur_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); - -#ifdef IVAS_FLOAT_FIXED - decode_fixed_rate_composed_index_coherence_fx( bitstream, &bit_pos, coding_subbands, no_cv_vec, sur_coh_temp_index, MASA_MAX_NO_CV_SUR_COH ); -#else - decode_fixed_rate_composed_index_coherence( bitstream, &bit_pos, coding_subbands, no_cv_vec, sur_coh_temp_index, MASA_MAX_NO_CV_SUR_COH ); -#endif + { + q_direction->coherence_band_data[j].spread_coherence_dct0_index = spr_coh_temp_index[j]; /*Q0*/ + move16(); + } + } - for ( j = 0; j < coding_subbands; j++ ) + /* read GR data for DCT1 */ + FOR( j = 0; j < coding_subbands; j++ ) { - hQMetaData->surcoh_band_data[j].sur_coherence_index = sur_coh_temp_index[j]; + bits_GR = bit_pos; + idx_dct1[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, shl( MASA_NO_CV_COH1, 1 ), 0 ); /*Q0*/ + move16(); + nbits = add( nbits, sub( bits_GR, bit_pos ) ); } + bits_GR = bit_pos; + move16(); /* just to store the data */ - /* deindex surround coherence */ - for ( j = 0; j < coding_subbands; j++ ) + /* read average index */ + read_huf( &bit_pos, bitstream, &av_index, bit_pos, MASA_NO_CV_COH1, huff_code_av_masa, 10 ); /* 10 is MAX_LEN*/ + nbits = add( nbits, sub( bits_GR, bit_pos ) ); + + /* write indexes in metadata structure */ + FOR( j = 0; j < coding_subbands; j++ ) { - if ( no_cv_vec[j] > 1 ) + IF( L_and( idx_dct1[j], 1 ) ) { - hQMetaData->surcoh_band_data[j].surround_coherence[0] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; + q_direction->coherence_band_data[j].spread_coherence_dct1_index = (UWord16) L_add( L_shr( L_add( idx_dct1[j], 1 ), 1 ), av_index ); /*Q0*/ + move16(); } - else + ELSE { - hQMetaData->surcoh_band_data[j].surround_coherence[0] = 0; + q_direction->coherence_band_data[j].spread_coherence_dct1_index = (UWord16) L_add( L_shr( L_negate( idx_dct1[j] ), 1 ), av_index ); /*Q0*/ + move16(); } } } + nbits = sub( *p_bit_pos, bit_pos ); - for ( j = 0; j < coding_subbands; j++ ) - { - for ( k = 1; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) - { - hQMetaData->surcoh_band_data[j].surround_coherence[k] = hQMetaData->surcoh_band_data[j].surround_coherence[0]; - } - } - - /* Replace return value with the actual read bits. bits_sur_coherence might show wrong count at this point. */ - bits_sur_coherence = *p_bit_pos - bit_pos; *p_bit_pos = bit_pos; + move16(); - return bits_sur_coherence; + return nbits; } -#else + +/*-------------------------------------------------------------------* + * read_surround_coherence() + * + * + *-------------------------------------------------------------------*/ + static Word16 read_surround_coherence( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -8016,7 +4416,6 @@ static Word16 read_surround_coherence( return bits_sur_coherence; } -#endif // !IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -8024,167 +4423,6 @@ static Word16 read_surround_coherence( * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t read_surround_coherence_hr( - uint16_t *bitstream, /* i : bitstream */ - int16_t *p_bit_pos, /* i : position in the bitstream */ - IVAS_QMETADATA *hQMetaData /* i/o: quantized metadata structure */ -) -{ - int16_t coding_subbands; - int16_t no_cv_vec[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bit_pos; - float error_ratio_surr; - int16_t idx_ER[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bits_sur_coherence, bits_GR; - int16_t j, k, sf; - uint16_t byteBuffer; - uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t min_index; - int16_t d, idx; - int32_t int_error_ratio_surr; - coding_subbands = hQMetaData->q_direction[0].cfg.nbands; - q_direction = hQMetaData->q_direction; - - bits_sur_coherence = 0; - bit_pos = *p_bit_pos; - - for ( sf = 0; sf < hQMetaData->q_direction[0].cfg.nblocks; sf++ ) - { - d = 0; - for ( j = 0; j < coding_subbands; j++ ) - { - error_ratio_surr = 1.0f; - if ( hQMetaData->no_directions == 2 ) - { - d += hQMetaData->twoDirBands[j]; - idx = max( d - 1, 0 ); - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[sf] - q_direction[1].band_data[idx].energy_ratio[sf] * hQMetaData->twoDirBands[j]; - } - else - { - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[sf]; - } - - int_error_ratio_surr = (int32_t) ( MASA_SUR_COH_PRECISION * error_ratio_surr ); - error_ratio_surr = (float) ( int_error_ratio_surr * MASA_SUR_COH_THRESHOLD ); - - if ( error_ratio_surr <= 0 ) - { - error_ratio_surr = 0; - no_cv_vec[j] = 1; - idx_ER[j] = 0; - } - else - { - idx_ER[j] = 7; // masa_sq( error_ratio_surr, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - no_cv_vec[j] = idx_cb_sur_coh_masa[idx_ER[j]] + 2; - } - } - - if ( sum_s( no_cv_vec, coding_subbands ) == coding_subbands ) - { - /* surround coherence is zero */ - for ( j = 0; j < coding_subbands; j++ ) - { - for ( k = 0; k < MAX_PARAM_SPATIAL_SUBFRAMES; k++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - hQMetaData->surcoh_band_data[j].surround_coherence[k] = 0; - } - } - } - } - else - { - /* read how the surround coherence is encoded */ - byteBuffer = bitstream[bit_pos--]; - bits_sur_coherence += 1; - - if ( byteBuffer & 1 ) - { - /* GR decoding */ - /* read GR order */ - byteBuffer = bitstream[bit_pos--]; - bits_sur_coherence += 1; - - /* read min index */ - bits_GR = bit_pos; - min_index = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, MASA_MAX_NO_CV_SUR_COH, 0 ); - bits_sur_coherence += bits_GR - bit_pos; - - /* read GR data */ - for ( j = 0; j < coding_subbands; j++ ) - { - bits_GR = bit_pos; - /* decoding for min removed */ - if ( no_cv_vec[j] > 1 ) - { - idx_sur_coh[j] = ivas_qmetadata_DecodeExtendedGR( bitstream, &bit_pos, no_cv_vec[j] - min_index, ( byteBuffer & 1 ) ); - bits_sur_coherence += bits_GR - bit_pos; - } - else - { - idx_sur_coh[j] = 0; - } - } - - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j] + min_index; - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; - } - else - { - hQMetaData->surcoh_band_data[j].sur_coherence_index = idx_sur_coh[j]; - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = 0; - } - } - } - else - { - /* fixed rate */ - uint16_t sur_coh_temp_index[MASA_MAXIMUM_CODING_SUBBANDS]; - set_s( (int16_t *) sur_coh_temp_index, 0, MASA_MAXIMUM_CODING_SUBBANDS ); - -#ifdef IVAS_FLOAT_FIXED - decode_fixed_rate_composed_index_coherence_fx( bitstream, &bit_pos, coding_subbands, no_cv_vec, sur_coh_temp_index, MASA_MAX_NO_CV_SUR_COH ); -#else - decode_fixed_rate_composed_index_coherence( bitstream, &bit_pos, coding_subbands, no_cv_vec, sur_coh_temp_index, MASA_MAX_NO_CV_SUR_COH ); -#endif - - for ( j = 0; j < coding_subbands; j++ ) - { - hQMetaData->surcoh_band_data[j].sur_coherence_index = sur_coh_temp_index[j]; - } - - /* deindex surround coherence */ - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv_vec[j] > 1 ) - { - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER[j]] * MASA_MAX_NO_CV_SUR_COH + hQMetaData->surcoh_band_data[j].sur_coherence_index]; - } - else - { - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = 0; - } - } - } - } - } - - /* Replace return value with the actual read bits. bits_sur_coherence might show wrong count at this point. */ - bits_sur_coherence = *p_bit_pos - bit_pos; - *p_bit_pos = bit_pos; - - return bits_sur_coherence; -} -#else static Word16 read_surround_coherence_hr_fx( UWord16 *bitstream, /* i : bitstream Q0*/ Word16 *p_bit_pos, /* i : position in the bitstream Q0*/ @@ -8364,7 +4602,6 @@ static Word16 read_surround_coherence_hr_fx( return bits_sur_coherence; } -#endif /*-------------------------------------------------------------------* * decode_combined_index() @@ -8372,7 +4609,6 @@ static Word16 read_surround_coherence_hr_fx( * Decode combined index into several indexes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void decode_combined_index_fx( UWord64 comb_index, /* i : index to be decoded Q0*/ const Word16 *no_cv_vec, /* i : number of codewords for each element Q0*/ @@ -8401,37 +4637,8 @@ static void decode_combined_index_fx( return; } -#else -static void decode_combined_index( - uint64_t comb_index, /* i : index to be decoded */ - const int16_t *no_cv_vec, /* i : number of codewords for each element*/ - uint16_t *index, /* o : decoded indexes */ - const int16_t len /* i : number of elements */ -) -{ - int16_t i; - uint64_t base[MASA_MAXIMUM_CODING_SUBBANDS + 1]; - - base[0] = 1; - for ( i = 1; i < len; i++ ) - { - base[i] = base[i - 1] * no_cv_vec[i - 1]; - } - - for ( i = len - 1; i > 0; i-- ) - { - index[i] = (uint16_t) ( comb_index / base[i] ); - comb_index -= index[i] * base[i]; - } - - index[0] = (uint16_t) comb_index; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void read_stream_dct_coeffs_omasa_fx( Word16 *q_idx, /*Q0*/ Word32 *q_dct_data_fx, @@ -8548,104 +4755,6 @@ static void read_stream_dct_coeffs_omasa_fx( return; } -#else -static void read_stream_dct_coeffs_omasa( - int16_t *q_idx, - float *q_dct_data, - const int16_t len_stream, - uint16_t *bit_stream, - int16_t *index, - const int16_t first_line ) -{ - int16_t sign, nbits; - int16_t i, j, i_min; - - float step; - int16_t GR1, GR2; - - step = STEP_M2T; - nbits = 0; - sign = 1; - if ( first_line == 0 ) - { - /* read sign */ - sign = bit_stream[( *index )--]; - if ( sign == 0 ) - { - sign = -1; - } - nbits++; - } - - set_s( q_idx, 0, len_stream ); - /* read DCT 0 component */ - for ( i = 0; i < BITS_MASA2TOTTAL_DCT0; i++ ) - { - q_idx[0] = ( q_idx[0] << 1 ) + bit_stream[( *index )--]; - } - q_idx[0] *= sign; - - if ( q_idx[0] != 0 ) - { - if ( len_stream >= 8 ) - { - /* read index of last index encoded with GR2 */ - i_min = 0; - j = 4; - for ( i = 0; i < j; i++ ) - { - i_min = ( i_min << 1 ) + bit_stream[( *index )--]; - } - nbits += j; - /* read GR orders */ - GR1 = bit_stream[( *index )--] + 1; - if ( GR1 == 2 ) - { - GR2 = bit_stream[( *index )--]; - } - else - { - GR2 = 0; - } - - /* read GR data */ - for ( i = 1; i <= i_min; i++ ) - { - q_idx[i] = ivas_qmetadata_DecodeExtendedGR( bit_stream, index, 100, GR1 ); - } - for ( i = i_min + 1; i < len_stream; i++ ) - { - q_idx[i] = ivas_qmetadata_DecodeExtendedGR( bit_stream, index, 100, GR2 ); - } - } - else - { - /* read GR order (only one) */ - GR1 = bit_stream[( *index )--]; - for ( i = 1; i < len_stream; i++ ) - { - q_idx[i] = ivas_qmetadata_DecodeExtendedGR( bit_stream, index, 100, GR1 ); - } - } - } - - /* deindex */ - q_dct_data[0] = q_idx[0] * step; - for ( i = 1; i < len_stream; i++ ) - { - if ( ( q_idx[i] % 2 ) == 0 ) - { - q_dct_data[i] = -( q_idx[i] >> 1 ) * step; - } - else - { - q_dct_data[i] = ( ( q_idx[i] + 1 ) >> 1 ) * step; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -8653,7 +4762,6 @@ static void read_stream_dct_coeffs_omasa( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_decode_masa_to_total_fx( UWord16 *bit_stream, /*Q0*/ Word16 *index, /*Q0*/ @@ -8756,106 +4864,3 @@ void ivas_omasa_decode_masa_to_total_fx( return; } -#else -void ivas_omasa_decode_masa_to_total( - uint16_t *bit_stream, - int16_t *index, - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - const int16_t nbands, - const int16_t nblocks ) -{ - int16_t i, j, k; - int16_t q_idx[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - float q_dct_data[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS], - dct_data_tmp[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - int16_t n_streams, len_stream; - int32_t int_tmp; - - /* Setup coding parameters */ - n_streams = 1; - len_stream = nbands * nblocks; - if ( len_stream == 32 ) - { - n_streams = 4; - len_stream = 8; - } - - set_s( q_idx, 0, nbands * nblocks ); - for ( i = 0; i < n_streams; i++ ) - { - read_stream_dct_coeffs_omasa( &q_idx[i * len_stream], &q_dct_data[i * len_stream], len_stream, bit_stream, index, i == 0 ); - } - - /* inverse DCT2 transform */ - switch ( len_stream ) - { - case 4: - matrix_product( dct4, nblocks, nblocks, 1, q_dct_data, nblocks, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nblocks ); - break; - case 5: - matrix_product( dct5, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 8: - matrix_product( dct8, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 12: - matrix_product( dct12, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 20: - matrix_product( dct5, nbands, nbands, 1, q_dct_data, nbands, nblocks, 0, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 0, q_dct_data ); /* reuse of variable*/ - break; - case 32: - matrix_product( dct8, nbands, nbands, 1, q_dct_data, nbands, nblocks, 0, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 0, q_dct_data ); - break; - default: - printf( "Incorrect number of coefficients for OMASA.\n" ); - break; - } - k = 0; - for ( i = 0; i < nblocks; i++ ) - { - for ( j = 0; j < nbands; j++ ) - { - masa_to_total_energy_ratio[i][j] = max( 0.0f, q_dct_data[k] ); - masa_to_total_energy_ratio[i][j] = min( 1.0f, masa_to_total_energy_ratio[i][j] ); - int_tmp = (int32_t) ( MASA_SUR_COH_PRECISION * masa_to_total_energy_ratio[i][j] ); - masa_to_total_energy_ratio[i][j] = (float) ( int_tmp * MASA_SUR_COH_THRESHOLD ); - k++; - } - } - - if ( nblocks == 1 ) - { - for ( i = 1; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - for ( j = 0; j < nbands; j++ ) - { - masa_to_total_energy_ratio[i][j] = masa_to_total_energy_ratio[0][j]; - int_tmp = (int32_t) ( MASA_SUR_COH_PRECISION * masa_to_total_energy_ratio[i][j] ); - masa_to_total_energy_ratio[i][j] = (float) ( int_tmp * MASA_SUR_COH_THRESHOLD ); - } - } - } - - if ( nbands == 1 ) - { - for ( j = 1; j < 5; j++ ) - { - for ( i = 0; i < nblocks; i++ ) - { - masa_to_total_energy_ratio[i][j] = masa_to_total_energy_ratio[i][0]; - int_tmp = (int32_t) ( MASA_SUR_COH_PRECISION * masa_to_total_energy_ratio[i][j] ); - masa_to_total_energy_ratio[i][j] = (float) ( int_tmp * MASA_SUR_COH_THRESHOLD ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_qspherical_dec.c b/lib_dec/ivas_qspherical_dec.c index ef42ebe55..446c64b6c 100644 --- a/lib_dec/ivas_qspherical_dec.c +++ b/lib_dec/ivas_qspherical_dec.c @@ -38,10 +38,8 @@ #include "ivas_stat_dec.h" #include "wmc_auto.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -51,58 +49,7 @@ *----------------------------------------------------------------------*/ /*! r: decoded elevation value */ -#ifndef IVAS_FLOAT_FIXED -float deindex_elevation( - uint16_t *id_th, /* i : input index */ - const int16_t no_bits, /* i : number of bits for the spherical grid */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - float theta_hat; - - if ( *id_th == MASA_NO_INDEX ) - { - theta_hat = 0; - } - else - { - if ( mc_format != MC_LS_SETUP_INVALID ) - { - theta_hat = ( *id_th * delta_theta_masa[no_bits - 3] ); - if ( theta_hat > 90 ) - { - theta_hat = 90; - } - } - else - { - if ( *id_th % 2 == 0 ) - { - /* theta is negative */ - *id_th = *id_th / 2; - theta_hat = -( *id_th * delta_theta_masa[no_bits - 3] ); - if ( theta_hat < -90 ) - { - theta_hat = -90; - } - } - else - { - *id_th = ( *id_th + 1 ) / 2; - theta_hat = ( *id_th * delta_theta_masa[no_bits - 3] ); - if ( theta_hat > 90 ) - { - theta_hat = 90; - } - } - } - } - - return theta_hat; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word32 deindex_elevation_fx( UWord16 *id_th, /* i : input index Q0*/ const Word16 no_bits, /* i : number of bits for the spherical grid Q0*/ @@ -161,4 +108,3 @@ Word32 deindex_elevation_fx( return theta_hat_fx; /*Q22*/ } -#endif diff --git a/lib_dec/ivas_range_uni_dec.c b/lib_dec/ivas_range_uni_dec.c index 3da1c5a19..65adec996 100644 --- a/lib_dec/ivas_range_uni_dec.c +++ b/lib_dec/ivas_range_uni_dec.c @@ -40,10 +40,8 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /* @@ -60,10 +58,6 @@ /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t rc_uni_dec_read( RangeUniDecState *rc_st_dec ); -static void rc_uni_dec_update( RangeUniDecState *rc_st_dec, const uint16_t cum_freq, const uint16_t sym_freq ); -#endif static Word16 rc_uni_dec_read_fx( RangeUniDecState *rc_st_dec ); static void rc_uni_dec_update_fx( RangeUniDecState *rc_st_dec, const UWord16 cum_freq, const UWord16 sym_freq ); @@ -74,33 +68,6 @@ static void rc_uni_dec_update_fx( RangeUniDecState *rc_st_dec, const UWord16 cum * * Initialize the range decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void rc_uni_dec_init( - RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ - uint16_t *bit_buffer, /* i : Bit buffer */ - const int16_t max_available_bits /* i : Total maximum bits available */ -) -{ - int16_t i; - - rc_st_dec->rc_low = 0; - rc_st_dec->rc_range = 0xFFFFFFFF; - - rc_st_dec->bit_buffer = bit_buffer; - rc_st_dec->bit_count = 0; - /* the renormalization procedure reads at most 32 - 2 extra bits than available */ - rc_st_dec->max_allowable_bit_count = max_available_bits + 30; - - rc_st_dec->bit_error_detected = 0; - - for ( i = 0; i < 4; i++ ) - { - rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); - } - - return; -} -#endif void rc_uni_dec_init_fx( RangeUniDecState *rc_st_dec, /* i/o: RC state handle */ UWord16 *bit_buffer, /* i : Bit buffer Q0*/ @@ -135,81 +102,6 @@ void rc_uni_dec_init_fx( *-------------------------------------------------------------------*/ /*! r: Read symbol */ -#ifndef IVAS_FLOAT_FIXED -uint16_t rc_uni_dec_read_symbol_fastS( - RangeUniDecState *rc_st_dec, /* i/o: Decoder State */ - const uint16_t cum_freq_table[], /* i : Cumulative frequency up to symbol */ - const uint16_t sym_freq_table[], /* i : Symbol frequency */ - const uint16_t alphabet_size, /* i : Number of symbols in the alphabet */ - const uint16_t tot_shift /* i : Total frequency as a power of 2 */ -) -{ - uint16_t sym_begin; - uint16_t sym_end; - uint16_t sym_middle; - uint32_t low; /* local copy (2 to 1 + ceil(log2(alphabet_size)) uses) */ - uint32_t range; /* local copy (3 to 2 + ceil(log2(alphabet_size)) uses) */ - uint16_t ceil_log2_alphabet_size; /* ceil(log2(alphabet_size)) */ - uint16_t step; - uint32_t reversed_low; - - low = rc_st_dec->rc_low; - range = rc_st_dec->rc_range; - - range >>= tot_shift; - - /* the cumulative value is val = low / range */ - /* the condition val >= level is equivalent with low >= range * level */ - - /* in case of bitstream errors it is possible that val >= (1 << tot_shift) */ - if ( low >= ( range << tot_shift ) ) - { - rc_st_dec->bit_error_detected = 1; - - /* for valid bitstreams, always low < range, therefore setting low = range */ - /* will always reach the bitstream error condition branch on the next call */ - rc_st_dec->rc_range = 0xFFFFFFFF; - rc_st_dec->rc_low = rc_st_dec->rc_range; - - /* the current value and all the following values are very likely incorrect */ - return 0; /* return the minimum valid value for the output */ - } - - /* do a binary search to find the symbol read */ - sym_begin = 0; - sym_end = alphabet_size; /* the possible values are {sym_begin, .., sym_end - 1} */ - - /* ceil(log2(x)) = 1 + floor(log2(x - 1)), for any x >= 2 */ - /* floor(log2(y)) = 31 - norm_ul_float(y) = 30 - norm_l(y), for any 1 <= y <= 2 ^ 31 - 1 */ - ceil_log2_alphabet_size = 31 - norm_l( alphabet_size - 1 ); - /* completely equivalent with 32 - norm_ul_float(alphabet_size - 1), but norm_l is faster */ - reversed_low = ( range << tot_shift ) - low; - - /* at most ceil_log2_alphabet_size steps are needed so that sym_end - sym_begin == 1 */ - for ( step = 0; step < ceil_log2_alphabet_size; step++ ) - { - sym_middle = ( sym_begin + sym_end ) >> 1; - /* completely equvalent with low >= range * ((1 << tot_shift) - table[sym_middle]) */ - if ( range * ( ( 1 << tot_shift ) - cum_freq_table[sym_middle] ) >= reversed_low ) - { - sym_begin = sym_middle; - } - else - { - sym_end = sym_middle; - } - } - - /* sym_begin contains the symbol read */ - - /* low was not modified */ - rc_st_dec->rc_range = range; - - rc_uni_dec_update( rc_st_dec, cum_freq_table[sym_begin], sym_freq_table[sym_begin] ); - - return sym_begin; -} -#endif UWord16 rc_uni_dec_read_symbol_fastS_fx( RangeUniDecState *rc_st_dec, /* i/o: Decoder State */ const UWord16 cum_freq_table[], /* i : Cumulative frequency up to symbol Q0*/ @@ -300,31 +192,6 @@ UWord16 rc_uni_dec_read_symbol_fastS_fx( * * Update the state for the symbol found after using get_cumulative *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void rc_uni_dec_update( - RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ - const uint16_t cum_freq, /* i : Cumulative frequency */ - const uint16_t sym_freq /* i : Symbol frequency */ -) -{ - rc_st_dec->rc_low -= cum_freq * rc_st_dec->rc_range; - rc_st_dec->rc_range *= sym_freq; - - /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ - if ( rc_st_dec->rc_range < 0x01000000 ) - { - rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); - rc_st_dec->rc_range <<= 8; - if ( rc_st_dec->rc_range < 0x01000000 ) - { - rc_st_dec->rc_low = ( rc_st_dec->rc_low << 8 ) + rc_uni_dec_read( rc_st_dec ); - rc_st_dec->rc_range <<= 8; - } - } - - return; -} -#endif // !IVAS_FLOAT_FIXED static void rc_uni_dec_update_fx( RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ @@ -362,7 +229,6 @@ static void rc_uni_dec_update_fx( *-------------------------------------------------------------------*/ /*! r: Read bit */ -#ifdef IVAS_FLOAT_FIXED UWord16 rc_uni_dec_read_bit( RangeUniDecState *rc_st_dec /* i/o: RC State handle */ ) @@ -420,55 +286,6 @@ UWord16 rc_uni_dec_read_bit( return (UWord16) val; } -#else -uint16_t rc_uni_dec_read_bit( - RangeUniDecState *rc_st_dec /* i/o: RC State handle */ -) -{ - uint32_t val; - uint32_t low; /* local copy (1 to 5 uses) */ - uint32_t range; /* local copy (3 to 6 uses) */ - - low = rc_st_dec->rc_low; - range = rc_st_dec->rc_range; - - range >>= 1; - - /* in case of bitstream errors it is possible that rc_low >= (rc_range << 1) */ - val = 0; - if ( low >= range ) - { - val++; - low -= range; - - /* rc_range was already subtracted once from rc_low */ - if ( low >= range ) - { - rc_st_dec->bit_error_detected = 1; - - /* for valid bitstreams, always low < range, therefore setting low = range */ - /* will always reach the bitstream error condition branch on the next call */ - rc_st_dec->rc_range = 0xFFFFFFFF; - rc_st_dec->rc_low = rc_st_dec->rc_range; - - /* the current value and all the following values are very likely incorrect */ - return 0; /* return the minimum valid value for the output */ - } - } - - /* rc_range was shifted right by 1, so at most one renormalization is needed */ - if ( range < 0x01000000 ) - { - low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); - range <<= 8; - } - - rc_st_dec->rc_low = low; - rc_st_dec->rc_range = range; - - return (uint16_t) val; -} -#endif /*-------------------------------------------------------------------* @@ -478,7 +295,6 @@ uint16_t rc_uni_dec_read_bit( *-------------------------------------------------------------------*/ /*! r: Read bit */ -#ifdef IVAS_FLOAT_FIXED UWord16 rc_uni_dec_read_bit_prob_fast( RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ const Word16 freq0, /* i : Frequency for symbol 0 Q0*/ @@ -551,67 +367,6 @@ UWord16 rc_uni_dec_read_bit_prob_fast( return (UWord16) val; } -#else -uint16_t rc_uni_dec_read_bit_prob_fast( - RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ - const int16_t freq0, /* i : Frequency for symbol 0 */ - const uint16_t tot_shift /* i : Total frequency as a power of 2 */ -) -{ - uint32_t val; - uint32_t low; /* local copy (2 to 7 uses) */ - uint32_t range; /* local copy (5 to 9 uses) */ - - low = rc_st_dec->rc_low; - range = rc_st_dec->rc_range; - - range >>= tot_shift; - - /* in case of bitstream errors it is possible that low >= (1 << tot_shift) * range */ - if ( low >= ( range << tot_shift ) ) /* equivalent condition */ - { - rc_st_dec->bit_error_detected = 1; - - /* for valid bitstreams, always low < range, therefore setting low = range */ - /* will always reach the bitstream error condition branch on the next call */ - rc_st_dec->rc_range = 0xFFFFFFFF; - rc_st_dec->rc_low = rc_st_dec->rc_range; - - /* the current value and all the following values are very likely incorrect */ - return 0; /* return the minimum valid value for the output */ - } - - val = 0; - if ( low >= range * freq0 ) - { - val++; - - low -= range * freq0; - range *= ( 1 << tot_shift ) - freq0; /* freq1 = (1 << tot_shift) - freq0 */ - } - else - { - range *= freq0; - } - - /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ - if ( range < 0x01000000 ) - { - low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); - range <<= 8; - if ( range < 0x01000000 ) - { - low = ( low << 8 ) + (uint32_t) rc_uni_dec_read( rc_st_dec ); - range <<= 8; - } - } - - rc_st_dec->rc_low = low; - rc_st_dec->rc_range = range; - - return (uint16_t) val; -} -#endif /*-------------------------------------------------------------------* @@ -621,7 +376,6 @@ uint16_t rc_uni_dec_read_bit_prob_fast( *-------------------------------------------------------------------*/ /*! r: Read bits */ -#ifdef IVAS_FLOAT_FIXED UWord16 rc_uni_dec_read_bits( RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ const Word16 bits /* i : Number of bits Q0*/ @@ -683,102 +437,6 @@ UWord16 rc_uni_dec_read_bits( return (UWord16) val; /*Q0*/ } -#else -uint16_t rc_uni_dec_read_bits( - RangeUniDecState *rc_st_dec, /* i/o: RC State handle */ - const int16_t bits /* i : Number of bits */ -) -{ - uint32_t val; - uint32_t low; /* local copy (2 to 6 uses) */ - uint32_t range; /* local copy (4 to 7 uses) */ - - low = rc_st_dec->rc_low; - range = rc_st_dec->rc_range; - - range >>= bits; - - val = low / range; - - /* in case of bitstream errors it is possible that val >= (1 << bits) */ - if ( ( val >> bits ) != 0 ) /* equivalent condition */ - { - rc_st_dec->bit_error_detected = 1; - - /* for valid bitstreams, always low < range, therefore setting low = range */ - /* will always reach the bitstream error condition branch on the next call */ - rc_st_dec->rc_range = 0xFFFFFFFF; - rc_st_dec->rc_low = rc_st_dec->rc_range; - - /* the current value and all the following values are very likely incorrect */ - return 0; /* return the minimum valid value for the output */ - } - - low -= val * range; - - /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ - if ( range < 0x01000000 ) - { - low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); - range <<= 8; - if ( range < 0x01000000 ) - { - low = ( low << 8 ) + rc_uni_dec_read( rc_st_dec ); - range <<= 8; - } - } - - rc_st_dec->rc_low = low; - rc_st_dec->rc_range = range; - - return (uint16_t) val; -} - - -/*-------------------------------------------------------------------* - * rc_uni_dec_finish() - * - * Finalize the range decoder - *-------------------------------------------------------------------*/ - -/*! r: Total number of bits consumed */ -int16_t rc_uni_dec_finish( - RangeUniDecState *rc_st_dec /* i/o: RC State handle */ -) -{ - int16_t total_bit_count; - int16_t bits; - - /* floor(log2(x)) = floor(log2(x >> 24)) + 24, for any x >= 2 ^ 24 */ - /* 32 - floor(log2(y)) = norm_ul_float(y) + 1 = norm_l(y >> 24) - 22 */ - bits = norm_l( rc_st_dec->rc_range >> 24 ) - 22; /* bits = 32 - floor(log2(rc_range)) */ - /* completely equivalent with norm_ul_float(rc_st_enc->rc_range) + 1, but norm_l is faster */ - - bits++; /* conservative number of bits, because the decoder only has rc_range available */ - - - total_bit_count = ( rc_st_dec->bit_count - 32 ) + bits; - - return total_bit_count; -} - - -/*-------------------------------------------------------------------* - * rc_uni_dec_virtual_finish() - * - * Get the total number of bits that would be consumed by finalization - *-------------------------------------------------------------------*/ - -/*! r: Total number of bits consumed */ -int16_t rc_uni_dec_virtual_finish( - RangeUniDecState *rc_st_dec /* i : RC state handle */ -) -{ - /* the function is completely equivalent with rc_uni_dec_finish */ - return rc_st_dec->bit_count + norm_l( rc_st_dec->rc_range >> 24 ) - 53; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 rc_uni_dec_virtual_finish_fx( RangeUniDecState *rc_st_dec /* i : RC state handle */ ) @@ -787,53 +445,6 @@ Word16 rc_uni_dec_virtual_finish_fx( // Not adding basop because value of rc_st_dec->rc_range exceeds Word32 return add( rc_st_dec->bit_count, sub( norm_l( rc_st_dec->rc_range >> 24 ), 53 ) ); /*Q0*/ } -#else - - -/*-------------------------------------------------------------------* - * rc_uni_dec_read() - * - * Read one byte from the bitstream (internal function) - *-------------------------------------------------------------------*/ - -/*! r: Byte read */ -static int16_t rc_uni_dec_read( - RangeUniDecState *rc_st_dec /* i/o: RC State handle */ -) -{ - int16_t byte_read; - uint16_t *shifted_bit_buffer; - - shifted_bit_buffer = rc_st_dec->bit_buffer + rc_st_dec->bit_count; - rc_st_dec->bit_count += 8; - - /* - * In case of bitstream errors the number the bits read may be larger than the total - * number of bits that have been read from the bitstream and have meaningful values - * plus the extra 30 padding bits that must be appended to the buffer by the caller. - */ - if ( rc_st_dec->bit_count > rc_st_dec->max_allowable_bit_count ) - { - rc_st_dec->bit_error_detected = 1; - - /* for valid bitstreams, always low < range, therefore setting low = range */ - /* will always reach the bitstream error condition branch on the next call */ - rc_st_dec->rc_range = 0xFFFFFFFF; - rc_st_dec->rc_low = rc_st_dec->rc_range; - - return 0; /* reading the 8 bits would trigger an out-of-bounds array access */ - } - - - /* pack the first 8 bits from shifted_bit_buffer, first bit is most significant */ - byte_read = ( (int16_t) shifted_bit_buffer[0] << 7 ) | ( (int16_t) shifted_bit_buffer[1] << 6 ) | - ( (int16_t) shifted_bit_buffer[2] << 5 ) | ( (int16_t) shifted_bit_buffer[3] << 4 ) | - ( (int16_t) shifted_bit_buffer[4] << 3 ) | ( (int16_t) shifted_bit_buffer[5] << 2 ) | - ( (int16_t) shifted_bit_buffer[6] << 1 ) | ( (int16_t) shifted_bit_buffer[7] ); - - return byte_read; -} -#endif // !IVAS_FLOAT_FIXED static Word16 rc_uni_dec_read_fx( RangeUniDecState *rc_st_dec /* i/o: RC State handle */ diff --git a/lib_dec/ivas_rom_dec.c b/lib_dec/ivas_rom_dec.c index f6f9a65c6..e73246176 100644 --- a/lib_dec/ivas_rom_dec.c +++ b/lib_dec/ivas_rom_dec.c @@ -44,58 +44,6 @@ * DFT stereo ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float dft_alpha_s[STEREO_DFT_BAND_MAX] = -{ - .7f, .4f, .25f, .2f, .15f, .1f, .1f, .1f, .1f, .1f, .1f, .1f, .1f -}; - -const float dft_alpha_w[STEREO_DFT_BAND_MAX] = -{ - .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f -}; - -const float dft_alpha_s2[STEREO_DFT_BAND_MAX] = -{ - .7f, .6f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f, .3f -}; - -const float dft_alpha_s_b2[STEREO_DFT_BAND_MAX] = -{ - .7f, .3f, .15f, .1f, .1f, .1f, .1f -}; - -const float dft_alpha_w_b2[STEREO_DFT_BAND_MAX] = -{ - .3f, .3f, .3f, .3f, .3f, .3f, .3f -}; - -const float dft_alpha_s2_b2[STEREO_DFT_BAND_MAX] = -{ - .7f, .3f, .3f, .3f, .3f, .3f, .3f -}; - -/* HP filter for DFT of 50Hz resolution */ -const float dft_bpf_weights[] = -{ - 1.000040f, 0.994684f, 0.978763f, 0.952708f, 0.917218f, 0.873235f, 0.821906f, 0.764540f, - 0.702561f, 0.637451f, 0.570704f, 0.503772f, 0.438018f, 0.374674f, 0.314811f, 0.259307f, - 0.208838f, 0.163865f, 0.124639f, 0.091211f, 0.063451f, 0.041069f, 0.023648f, 0.010670f, - 0.001553f, 0.004319f, 0.007570f, 0.008799f, 0.008564f, 0.007361f, 0.005613f, 0.003664f, - 0.001777f, 0.000138f, 0.001142f, 0.002011f, 0.002472f, 0.002565f, 0.002356f, 0.001929f -}; - -const float dft_ap_gains[5][3] = -{ - { 0.5f, -0.2f, 0.5f}, - {-0.4f, 0.2f, -0.5f}, - { 0.4f, -0.3f, 0.5f}, - {-0.4f, 0.3f, -0.5f}, - { 0.3f, -0.3f, 0.5f} -}; - -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED const Word16 dft_alpha_s_fx[STEREO_DFT_BAND_MAX] = { (Word16)(0x599A), (Word16)(0x3333), (Word16)(0x2000), (Word16)(0x199A), @@ -151,7 +99,6 @@ const Word32 dft_ap_gains_fx[5][3] = { -858993459, 644245094, -1073741824 }, { 644245094, -644245120, 1073741824 } }; -#endif const int16_t dft_ap_delays[3][3] = { @@ -160,138 +107,16 @@ const int16_t dft_ap_delays[3][3] = {31, 37, 59} }; -#ifndef IVAS_FLOAT_FIXED -const float dft_res_pred_weights[][STEREO_DFT_BAND_MAX] = -{ - { 1.f, .75f, .5f, .4f, .4f }, - { 1.f, 1.f, 1.f, 1.f, 0.f }, - { 1.f, .5f, .4f, .4f } -}; -#endif // !IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED const Word16 dft_res_pred_weights_fx[][STEREO_DFT_BAND_MAX] = { { MAX_16, ONE_IN_Q14 + ONE_IN_Q13, ONE_IN_Q14, (Word16)(0x3333), (Word16)(0x3333) }, { MAX_16, MAX_16, MAX_16, MAX_16, 0}, { MAX_16, ONE_IN_Q14, (Word16)(0x3333), (Word16)(0x3333) } }; -#endif - - -#ifndef IVAS_FLOAT_FIXED -const float dft_win232ms_8k[75] = -{ - 0.0104718f, 0.0314108f, 0.0523360f, 0.0732382f, 0.0941083f, 0.1149372f, 0.1357156f, 0.1564345f, 0.1770847f, 0.1976573f, 0.2181432f, 0.2385335f, 0.2588190f, 0.2789911f, - 0.2990408f, 0.3189593f, 0.3387379f, 0.3583679f, 0.3778408f, 0.3971479f, 0.4162808f, 0.4352311f, 0.4539905f, 0.4725508f, 0.4909038f, 0.5090414f, 0.5269558f, 0.5446390f, - 0.5620834f, 0.5792812f, 0.5962249f, 0.6129071f, 0.6293204f, 0.6454577f, 0.6613119f, 0.6768760f, 0.6921432f, 0.7071068f, 0.7217602f, 0.7360971f, 0.7501111f, 0.7637960f, - 0.7771460f, 0.7901550f, 0.8028175f, 0.8151278f, 0.8270806f, 0.8386706f, 0.8498927f, 0.8607420f, 0.8712138f, 0.8813035f, 0.8910065f, 0.9003188f, 0.9092361f, 0.9177546f, - 0.9258706f, 0.9335804f, 0.9408808f, 0.9477684f, 0.9542403f, 0.9602937f, 0.9659258f, 0.9711343f, 0.9759168f, 0.9802712f, 0.9841956f, 0.9876883f, 0.9907478f, 0.9933728f, - 0.9955620f, 0.9973145f, 0.9986295f, 0.9995066f, 0.9999452f -}; - -const float dft_win232ms_12k8[120] = -{ - 0.0065449f, 0.0196337f, 0.0327191f, 0.0457989f, 0.0588708f, 0.0719327f, 0.0849822f, 0.0980171f, 0.1110353f, 0.1240345f, 0.1370123f, 0.1499668f, 0.1628955f, 0.1757963f, - 0.1886670f, 0.2015053f, 0.2143092f, 0.2270763f, 0.2398045f, 0.2524916f, 0.2651354f, 0.2777338f, 0.2902847f, 0.3027858f, 0.3152350f, 0.3276302f, 0.3399692f, 0.3522500f, - 0.3644705f, 0.3766285f, 0.3887220f, 0.4007488f, 0.4127070f, 0.4245945f, 0.4364092f, 0.4481492f, 0.4598124f, 0.4713967f, 0.4829003f, 0.4943212f, 0.5056574f, 0.5169069f, - 0.5280679f, 0.5391383f, 0.5501164f, 0.5610003f, 0.5717880f, 0.5824777f, 0.5930676f, 0.6035559f, 0.6139408f, 0.6242205f, 0.6343933f, 0.6444573f, 0.6544109f, 0.6642524f, - 0.6739801f, 0.6835923f, 0.6930874f, 0.7024637f, 0.7117196f, 0.7208536f, 0.7298641f, 0.7387495f, 0.7475083f, 0.7561391f, 0.7646403f, 0.7730105f, 0.7812482f, 0.7893520f, - 0.7973207f, 0.8051526f, 0.8128467f, 0.8204014f, 0.8278156f, 0.8350880f, 0.8422172f, 0.8492022f, 0.8560416f, 0.8627344f, 0.8692793f, 0.8756753f, 0.8819213f, 0.8880161f, - 0.8939588f, 0.8997483f, 0.9053836f, 0.9108638f, 0.9161880f, 0.9213551f, 0.9263644f, 0.9312149f, 0.9359059f, 0.9404366f, 0.9448060f, 0.9490136f, 0.9530586f, 0.9569403f, - 0.9606581f, 0.9642112f, 0.9675991f, 0.9708212f, 0.9738770f, 0.9767659f, 0.9794874f, 0.9820411f, 0.9844266f, 0.9866433f, 0.9886910f, 0.9905693f, 0.9922779f, 0.9938165f, - 0.9951847f, 0.9963825f, 0.9974095f, 0.9982656f, 0.9989507f, 0.9994646f, 0.9998072f, 0.9999786f -}; - -const float dft_win232ms_16k[150] = -{ - 0.0052360f, 0.0157073f, 0.0261769f, 0.0366437f, 0.0471065f, 0.0575640f, 0.0680153f, 0.0784591f, 0.0888943f, 0.0993197f, 0.1097343f, 0.1201368f, 0.1305262f, 0.1409012f, - 0.1512608f, 0.1616038f, 0.1719291f, 0.1822355f, 0.1925220f, 0.2027873f, 0.2130304f, 0.2232501f, 0.2334454f, 0.2436150f, 0.2537579f, 0.2638730f, 0.2739592f, 0.2840153f, - 0.2940403f, 0.3040331f, 0.3139925f, 0.3239174f, 0.3338069f, 0.3436597f, 0.3534748f, 0.3632512f, 0.3729878f, 0.3826834f, 0.3923371f, 0.4019478f, 0.4115144f, 0.4210358f, - 0.4305111f, 0.4399392f, 0.4493190f, 0.4586496f, 0.4679298f, 0.4771588f, 0.4863354f, 0.4954587f, 0.5045276f, 0.5135413f, 0.5224986f, 0.5313986f, 0.5402403f, 0.5490228f, - 0.5577451f, 0.5664062f, 0.5750053f, 0.5835412f, 0.5920132f, 0.6004202f, 0.6087614f, 0.6170359f, 0.6252427f, 0.6333809f, 0.6414496f, 0.6494480f, 0.6573752f, 0.6652304f, - 0.6730125f, 0.6807209f, 0.6883546f, 0.6959128f, 0.7033947f, 0.7107995f, 0.7181263f, 0.7253744f, 0.7325429f, 0.7396311f, 0.7466382f, 0.7535634f, 0.7604060f, 0.7671652f, - 0.7738402f, 0.7804304f, 0.7869350f, 0.7933533f, 0.7996847f, 0.8059283f, 0.8120835f, 0.8181497f, 0.8241262f, 0.8300123f, 0.8358074f, 0.8415108f, 0.8471219f, 0.8526402f, - 0.8580649f, 0.8633956f, 0.8686315f, 0.8737722f, 0.8788171f, 0.8837656f, 0.8886172f, 0.8933714f, 0.8980276f, 0.9025853f, 0.9070440f, 0.9114033f, 0.9156626f, 0.9198215f, - 0.9238795f, 0.9278363f, 0.9316912f, 0.9354440f, 0.9390943f, 0.9426415f, 0.9460854f, 0.9494255f, 0.9526615f, 0.9557930f, 0.9588197f, 0.9617413f, 0.9645574f, 0.9672678f, - 0.9698720f, 0.9723699f, 0.9747612f, 0.9770456f, 0.9792228f, 0.9812927f, 0.9832549f, 0.9851093f, 0.9868557f, 0.9884939f, 0.9900237f, 0.9914449f, 0.9927573f, 0.9939610f, - 0.9950556f, 0.9960411f, 0.9969173f, 0.9976843f, 0.9983418f, 0.9988899f, 0.9993284f, 0.9996573f, 0.9998766f, 0.9999863f -}; - -const float dft_win232ms_32k[300] = -{ - 0.0026180f, 0.0078539f, 0.0130896f, 0.0183249f, 0.0235598f, 0.0287940f, 0.0340274f, 0.0392598f, 0.0444912f, 0.0497214f, 0.0549502f, 0.0601775f, 0.0654031f, 0.0706270f, - 0.0758489f, 0.0810687f, 0.0862864f, 0.0915016f, 0.0967144f, 0.1019245f, 0.1071318f, 0.1123361f, 0.1175374f, 0.1227355f, 0.1279302f, 0.1331213f, 0.1383089f, 0.1434926f, - 0.1486724f, 0.1538482f, 0.1590197f, 0.1641868f, 0.1693495f, 0.1745075f, 0.1796607f, 0.1848091f, 0.1899523f, 0.1950903f, 0.2002230f, 0.2053502f, 0.2104718f, 0.2155876f, - 0.2206974f, 0.2258013f, 0.2308989f, 0.2359902f, 0.2410751f, 0.2461533f, 0.2512248f, 0.2562894f, 0.2613469f, 0.2663973f, 0.2714404f, 0.2764761f, 0.2815042f, 0.2865246f, - 0.2915371f, 0.2965416f, 0.3015380f, 0.3065261f, 0.3115058f, 0.3164770f, 0.3214395f, 0.3263932f, 0.3313379f, 0.3362735f, 0.3412000f, 0.3461171f, 0.3510246f, 0.3559226f, - 0.3608108f, 0.3656891f, 0.3705574f, 0.3754156f, 0.3802634f, 0.3851008f, 0.3899277f, 0.3947439f, 0.3995492f, 0.4043436f, 0.4091269f, 0.4138990f, 0.4186597f, 0.4234090f, - 0.4281467f, 0.4328726f, 0.4375866f, 0.4422887f, 0.4469786f, 0.4516563f, 0.4563216f, 0.4609744f, 0.4656145f, 0.4702419f, 0.4748564f, 0.4794579f, 0.4840462f, 0.4886212f, - 0.4931829f, 0.4977310f, 0.5022655f, 0.5067863f, 0.5112931f, 0.5157859f, 0.5202646f, 0.5247290f, 0.5291790f, 0.5336145f, 0.5380354f, 0.5424415f, 0.5468328f, 0.5512091f, - 0.5555702f, 0.5599162f, 0.5642467f, 0.5685619f, 0.5728614f, 0.5771452f, 0.5814132f, 0.5856652f, 0.5899012f, 0.5941211f, 0.5983246f, 0.6025117f, 0.6066824f, 0.6108363f, - 0.6149736f, 0.6190939f, 0.6231974f, 0.6272837f, 0.6313528f, 0.6354046f, 0.6394390f, 0.6434559f, 0.6474551f, 0.6514366f, 0.6554002f, 0.6593458f, 0.6632734f, 0.6671828f, - 0.6710739f, 0.6749466f, 0.6788007f, 0.6826363f, 0.6864532f, 0.6902512f, 0.6940304f, 0.6977905f, 0.7015314f, 0.7052532f, 0.7089556f, 0.7126385f, 0.7163019f, 0.7199457f, - 0.7235698f, 0.7271740f, 0.7307583f, 0.7343225f, 0.7378666f, 0.7413905f, 0.7448941f, 0.7483772f, 0.7518398f, 0.7552818f, 0.7587031f, 0.7621036f, 0.7654832f, 0.7688418f, - 0.7721794f, 0.7754957f, 0.7787909f, 0.7820646f, 0.7853169f, 0.7885477f, 0.7917569f, 0.7949444f, 0.7981100f, 0.8012538f, 0.8043756f, 0.8074754f, 0.8105530f, 0.8136084f, - 0.8166416f, 0.8196523f, 0.8226405f, 0.8256062f, 0.8285493f, 0.8314696f, 0.8343672f, 0.8372418f, 0.8400936f, 0.8429222f, 0.8457278f, 0.8485102f, 0.8512693f, 0.8540051f, - 0.8567175f, 0.8594064f, 0.8620717f, 0.8647134f, 0.8673314f, 0.8699256f, 0.8724960f, 0.8750425f, 0.8775649f, 0.8800633f, 0.8825376f, 0.8849876f, 0.8874134f, 0.8898149f, - 0.8921920f, 0.8945446f, 0.8968727f, 0.8991763f, 0.9014551f, 0.9037093f, 0.9059386f, 0.9081432f, 0.9103228f, 0.9124775f, 0.9146072f, 0.9167118f, 0.9187912f, 0.9208455f, - 0.9228745f, 0.9248782f, 0.9268566f, 0.9288096f, 0.9307370f, 0.9326390f, 0.9345154f, 0.9363662f, 0.9381913f, 0.9399907f, 0.9417644f, 0.9435122f, 0.9452341f, 0.9469301f, - 0.9486002f, 0.9502443f, 0.9518623f, 0.9534542f, 0.9550199f, 0.9565595f, 0.9580729f, 0.9595600f, 0.9610208f, 0.9624552f, 0.9638633f, 0.9652449f, 0.9666001f, 0.9679288f, - 0.9692309f, 0.9705065f, 0.9717554f, 0.9729777f, 0.9741734f, 0.9753423f, 0.9764845f, 0.9775999f, 0.9786886f, 0.9797504f, 0.9807853f, 0.9817933f, 0.9827744f, 0.9837286f, - 0.9846558f, 0.9855561f, 0.9864293f, 0.9872754f, 0.9880945f, 0.9888865f, 0.9896514f, 0.9903891f, 0.9910997f, 0.9917832f, 0.9924394f, 0.9930685f, 0.9936703f, 0.9942448f, - 0.9947921f, 0.9953122f, 0.9958049f, 0.9962704f, 0.9967085f, 0.9971193f, 0.9975028f, 0.9978589f, 0.9981877f, 0.9984891f, 0.9987631f, 0.9990098f, 0.9992290f, 0.9994209f, - 0.9995854f, 0.9997224f, 0.9998321f, 0.9999143f, 0.9999692f, 0.9999966f -}; - -const float dft_win232ms_48k[450] = -{ - 0.0017453f, 0.0052360f, 0.0087265f, 0.0122170f, 0.0157073f, 0.0191974f, 0.0226873f, 0.0261769f, 0.0296662f, 0.0331552f, 0.0366437f, 0.0401318f, 0.0436194f, 0.0471065f, - 0.0505929f, 0.0540788f, 0.0575640f, 0.0610485f, 0.0645323f, 0.0680153f, 0.0714974f, 0.0749787f, 0.0784591f, 0.0819385f, 0.0854169f, 0.0888943f, 0.0923706f, 0.0958458f, - 0.0993197f, 0.1027925f, 0.1062641f, 0.1097343f, 0.1132032f, 0.1166707f, 0.1201368f, 0.1236015f, 0.1270646f, 0.1305262f, 0.1339862f, 0.1374445f, 0.1409012f, 0.1443562f, - 0.1478094f, 0.1512608f, 0.1547104f, 0.1581581f, 0.1616038f, 0.1650476f, 0.1684894f, 0.1719291f, 0.1753667f, 0.1788022f, 0.1822355f, 0.1856666f, 0.1890954f, 0.1925220f, - 0.1959461f, 0.1993679f, 0.2027873f, 0.2062042f, 0.2096186f, 0.2130304f, 0.2164396f, 0.2198462f, 0.2232501f, 0.2266513f, 0.2300497f, 0.2334454f, 0.2368381f, 0.2402280f, - 0.2436150f, 0.2469990f, 0.2503800f, 0.2537579f, 0.2571328f, 0.2605045f, 0.2638730f, 0.2672384f, 0.2706004f, 0.2739592f, 0.2773147f, 0.2806667f, 0.2840153f, 0.2873605f, - 0.2907022f, 0.2940403f, 0.2973749f, 0.3007058f, 0.3040331f, 0.3073566f, 0.3106764f, 0.3139925f, 0.3173047f, 0.3206130f, 0.3239174f, 0.3272179f, 0.3305144f, 0.3338069f, - 0.3370953f, 0.3403796f, 0.3436597f, 0.3469357f, 0.3502074f, 0.3534748f, 0.3567380f, 0.3599968f, 0.3632512f, 0.3665012f, 0.3697468f, 0.3729878f, 0.3762243f, 0.3794562f, - 0.3826834f, 0.3859060f, 0.3891240f, 0.3923371f, 0.3955455f, 0.3987491f, 0.4019478f, 0.4051416f, 0.4083305f, 0.4115144f, 0.4146932f, 0.4178671f, 0.4210358f, 0.4241994f, - 0.4273579f, 0.4305111f, 0.4336591f, 0.4368018f, 0.4399392f, 0.4430712f, 0.4461978f, 0.4493190f, 0.4524347f, 0.4555449f, 0.4586496f, 0.4617486f, 0.4648420f, 0.4679298f, - 0.4710119f, 0.4740882f, 0.4771588f, 0.4802235f, 0.4832824f, 0.4863354f, 0.4893825f, 0.4924236f, 0.4954587f, 0.4984877f, 0.5015107f, 0.5045276f, 0.5075384f, 0.5105429f, - 0.5135413f, 0.5165333f, 0.5195191f, 0.5224986f, 0.5254717f, 0.5284383f, 0.5313986f, 0.5343523f, 0.5372996f, 0.5402403f, 0.5431744f, 0.5461020f, 0.5490228f, 0.5519370f, - 0.5548444f, 0.5577451f, 0.5606390f, 0.5635260f, 0.5664062f, 0.5692795f, 0.5721459f, 0.5750053f, 0.5778576f, 0.5807030f, 0.5835412f, 0.5863724f, 0.5891964f, 0.5920132f, - 0.5948228f, 0.5976251f, 0.6004202f, 0.6032080f, 0.6059884f, 0.6087614f, 0.6115270f, 0.6142852f, 0.6170359f, 0.6197790f, 0.6225146f, 0.6252427f, 0.6279631f, 0.6306758f, - 0.6333809f, 0.6360782f, 0.6387678f, 0.6414496f, 0.6441236f, 0.6467898f, 0.6494480f, 0.6520984f, 0.6547408f, 0.6573752f, 0.6600017f, 0.6626200f, 0.6652304f, 0.6678326f, - 0.6704266f, 0.6730125f, 0.6755902f, 0.6781597f, 0.6807209f, 0.6832738f, 0.6858184f, 0.6883546f, 0.6908824f, 0.6934018f, 0.6959128f, 0.6984153f, 0.7009093f, 0.7033947f, - 0.7058716f, 0.7083398f, 0.7107995f, 0.7132504f, 0.7156927f, 0.7181263f, 0.7205511f, 0.7229671f, 0.7253744f, 0.7277728f, 0.7301623f, 0.7325429f, 0.7349146f, 0.7372773f, - 0.7396311f, 0.7419758f, 0.7443115f, 0.7466382f, 0.7489557f, 0.7512641f, 0.7535634f, 0.7558535f, 0.7581343f, 0.7604060f, 0.7626683f, 0.7649214f, 0.7671652f, 0.7693996f, - 0.7716246f, 0.7738402f, 0.7760464f, 0.7782431f, 0.7804304f, 0.7826082f, 0.7847764f, 0.7869350f, 0.7890841f, 0.7912235f, 0.7933533f, 0.7954735f, 0.7975839f, 0.7996847f, - 0.8017756f, 0.8038569f, 0.8059283f, 0.8079899f, 0.8100416f, 0.8120835f, 0.8141155f, 0.8161376f, 0.8181497f, 0.8201519f, 0.8221440f, 0.8241262f, 0.8260983f, 0.8280603f, - 0.8300123f, 0.8319541f, 0.8338858f, 0.8358074f, 0.8377187f, 0.8396199f, 0.8415108f, 0.8433914f, 0.8452618f, 0.8471219f, 0.8489717f, 0.8508111f, 0.8526402f, 0.8544588f, - 0.8562671f, 0.8580649f, 0.8598523f, 0.8616292f, 0.8633956f, 0.8651514f, 0.8668967f, 0.8686315f, 0.8703557f, 0.8720693f, 0.8737722f, 0.8754645f, 0.8771462f, 0.8788171f, - 0.8804774f, 0.8821269f, 0.8837656f, 0.8853936f, 0.8870108f, 0.8886172f, 0.8902128f, 0.8917975f, 0.8933714f, 0.8949344f, 0.8964864f, 0.8980276f, 0.8995578f, 0.9010770f, - 0.9025853f, 0.9040825f, 0.9055688f, 0.9070440f, 0.9085082f, 0.9099613f, 0.9114033f, 0.9128342f, 0.9142540f, 0.9156626f, 0.9170601f, 0.9184464f, 0.9198215f, 0.9211854f, - 0.9225381f, 0.9238795f, 0.9252097f, 0.9265286f, 0.9278363f, 0.9291326f, 0.9304176f, 0.9316912f, 0.9329535f, 0.9342045f, 0.9354440f, 0.9366722f, 0.9378889f, 0.9390943f, - 0.9402881f, 0.9414705f, 0.9426415f, 0.9438010f, 0.9449489f, 0.9460854f, 0.9472103f, 0.9483237f, 0.9494255f, 0.9505157f, 0.9515944f, 0.9526615f, 0.9537170f, 0.9547608f, - 0.9557930f, 0.9568136f, 0.9578225f, 0.9588197f, 0.9598053f, 0.9607792f, 0.9617413f, 0.9626917f, 0.9636305f, 0.9645574f, 0.9654726f, 0.9663761f, 0.9672678f, 0.9681476f, - 0.9690157f, 0.9698720f, 0.9707165f, 0.9715491f, 0.9723699f, 0.9731789f, 0.9739760f, 0.9747612f, 0.9755345f, 0.9762960f, 0.9770456f, 0.9777832f, 0.9785090f, 0.9792228f, - 0.9799247f, 0.9806147f, 0.9812927f, 0.9819587f, 0.9826128f, 0.9832549f, 0.9838850f, 0.9845032f, 0.9851093f, 0.9857035f, 0.9862856f, 0.9868557f, 0.9874138f, 0.9879599f, - 0.9884939f, 0.9890159f, 0.9895258f, 0.9900237f, 0.9905095f, 0.9909832f, 0.9914449f, 0.9918944f, 0.9923319f, 0.9927573f, 0.9931706f, 0.9935719f, 0.9939610f, 0.9943379f, - 0.9947028f, 0.9950556f, 0.9953962f, 0.9957247f, 0.9960411f, 0.9963453f, 0.9966374f, 0.9969173f, 0.9971851f, 0.9974408f, 0.9976843f, 0.9979156f, 0.9981348f, 0.9983418f, - 0.9985367f, 0.9987194f, 0.9988899f, 0.9990482f, 0.9991944f, 0.9993284f, 0.9994502f, 0.9995599f, 0.9996573f, 0.9997426f, 0.9998157f, 0.9998766f, 0.9999254f, 0.9999619f, - 0.9999863f, 0.9999985f -}; - -const float dft_win_8k[70] = -{ - 0.0112197f, 0.0336536f, 0.0560704f, 0.0784591f, 0.1008082f, 0.1231066f, 0.1453430f, 0.1675062f, 0.1895851f, 0.2115685f, 0.2334454f, 0.2552047f, 0.2768355f, 0.2983269f, - 0.3196681f, 0.3408484f, 0.3618570f, 0.3826834f, 0.4033172f, 0.4237478f, 0.4439651f, 0.4639588f, 0.4837189f, 0.5032354f, 0.5224986f, 0.5414986f, 0.5602260f, 0.5786713f, - 0.5968252f, 0.6146786f, 0.6322225f, 0.6494480f, 0.6663466f, 0.6829096f, 0.6991287f, 0.7149958f, 0.7305029f, 0.7456422f, 0.7604060f, 0.7747869f, 0.7887777f, 0.8023713f, - 0.8155609f, 0.8283398f, 0.8407016f, 0.8526402f, 0.8641494f, 0.8752234f, 0.8858568f, 0.8960441f, 0.9057802f, 0.9150603f, 0.9238795f, 0.9322336f, 0.9401183f, 0.9475296f, - 0.9544637f, 0.9609173f, 0.9668870f, 0.9723699f, 0.9773632f, 0.9818643f, 0.9858710f, 0.9893813f, 0.9923935f, 0.9949059f, 0.9969173f, 0.9984268f, 0.9994336f, 0.9999371f -}; -#endif - -#ifdef IVAS_FLOAT_FIXED + + + const Word16 dft_win232ms_8k_fx[75] = { 343, 1029, 1714, 2399, 3083, 3766, 4447, 5126, 5802, 6476, 7148, 7816, 8480, 9141, 9798, 10451, 11099, 11742, 12381, 13013, 13640, 14261, 14876, 15484, 16085, 16680, 17267, @@ -365,7 +190,6 @@ const Word16 dft_win_8k_fx[70] = 18357, 18961, 19556, 20141, 20716, 21281, 21834, 22377, 22909, 23428, 23937, 24433, 24916, 25388, 25846, 26292, 26724, 27143, 27548, 27939, 28316, 28679, 29027, 29361, 29680, 29984, 30273, 30547, 30805, 31048, 31275, 31487, 31682, 31862, 32026, 32173, 32305, 32420, 32518, 32601, 32666, 32716, 32749, 32765 }; -#endif /*------------------------------------------------------------------------- @@ -377,28 +201,7 @@ const int16_t cna_init_bands[CNA_INIT_NBANDS + 1] = 1, 4, 14, 33, 67, 171, 320 }; -#ifndef IVAS_FLOAT_FIXED -const float max_smooth_gains1[SBA_DIRAC_STEREO_NUM_BANDS] = -{ - 0.98f, 0.97f, 0.95f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f, 0.9f -}; - -const float min_smooth_gains1[SBA_DIRAC_STEREO_NUM_BANDS] = -{ - 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f -}; -const float max_smooth_gains2[SBA_DIRAC_STEREO_NUM_BANDS] = -{ - 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.75f, 0.9f, 0.9f, 0.9f}; - -const float min_smooth_gains2[SBA_DIRAC_STEREO_NUM_BANDS] = -{ - 0.5f, 0.5f, 0.5, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.3f, 0.3f, 0.3f -}; -#endif // !IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED const Word16 max_smooth_gains1_fx[SBA_DIRAC_STEREO_NUM_BANDS] = { (Word16)(0x7D71), (Word16)(0x7C29), (Word16)(0x799A), (Word16)(0x7333), @@ -424,7 +227,6 @@ const Word16 min_smooth_gains2_fx[SBA_DIRAC_STEREO_NUM_BANDS] = (Word16)(0x4000), (Word16)(0x4000), (Word16)(0x4000), (Word16)(0x4000), (Word16)(0x4000), (Word16)(0x2666), (Word16)(0x2666), (Word16)(0x2666) }; -#endif /*------------------------------------------------------------------------- * ECLVQ Stereo ROM tables @@ -556,19 +358,7 @@ const uint16_t * const sym_freq_ECSQ_tab_abs_lsbs[1 + 4] = *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float dirac_dithering_azi_scale[DIRAC_DIFFUSE_LEVELS] = -{ - 6.716062e-01f, 1.011837e+00f, 1.799065e+00f, 2.824915e+00f, 4.800879e+00f, 9.206031e+00f, 1.469832e+01f, 2.566224e+01f -}; -const float dirac_dithering_ele_scale[DIRAC_DIFFUSE_LEVELS] = -{ - 6.716062e-01f, 1.011804e+00f, 1.796875e+00f, 2.804382e+00f, 4.623130e+00f, 7.802667e+00f, 1.045446e+01f, 1.379538e+01f -}; -#endif // !IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED /*Q10*/ const Word16 dirac_dithering_azi_scale_fx[DIRAC_DIFFUSE_LEVELS] = { @@ -579,18 +369,10 @@ const Word16 dirac_dithering_ele_scale_fx[DIRAC_DIFFUSE_LEVELS] = { 1375 ,2072 ,3680 ,5743 ,9468 ,15979 ,21410 ,28252 }; -#endif /*----------------------------------------------------------------------------------* * FASTCONV and PARAMETRIC binaural renderer ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float dmxmtx_table[BINAURAL_CHANNELS][11] = -{ - { 1.0f, 0.0f, 0.70709997f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f }, - { 0.0f, 1.0f, 0.70709997f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f }, -}; -#endif // !IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* * FASTCONV and PARAMETRIC binaural renderer ROM tables diff --git a/lib_dec/ivas_rom_dec.h b/lib_dec/ivas_rom_dec.h index 6ab308925..e79c50856 100644 --- a/lib_dec/ivas_rom_dec.h +++ b/lib_dec/ivas_rom_dec.h @@ -43,14 +43,7 @@ /*----------------------------------------------------------------------------------* * DFT stereo ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float dft_alpha_w_b2[STEREO_DFT_BAND_MAX]; -extern const float dft_alpha_s_b2[STEREO_DFT_BAND_MAX]; -extern const float dft_alpha_s2_b2[STEREO_DFT_BAND_MAX]; -extern const float dft_bpf_weights[]; -#endif // !IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED + extern const Word16 dft_alpha_s_fx[STEREO_DFT_BAND_MAX]; extern const Word16 dft_alpha_w_fx[STEREO_DFT_BAND_MAX]; extern const Word16 dft_alpha_s2_fx[STEREO_DFT_BAND_MAX]; @@ -59,26 +52,8 @@ extern const Word16 dft_alpha_w_b2_fx[STEREO_DFT_BAND_MAX]; extern const Word16 dft_alpha_s2_b2_fx[STEREO_DFT_BAND_MAX]; extern const Word32 dft_bpf_weights_fx[]; extern const Word32 dft_ap_gains_fx[5][3]; -#endif - -#ifndef IVAS_FLOAT_FIXED -extern const float dft_alpha_w[]; -extern const float dft_alpha_s[]; -extern const float dft_alpha_s2[]; -extern const float dft_ap_gains[5][3]; -#endif extern const int16_t dft_ap_delays[3][3]; -#ifndef IVAS_FLOAT_FIXED -extern const float dft_res_pred_weights[][STEREO_DFT_BAND_MAX]; - -extern const float dft_win232ms_8k[75]; -extern const float dft_win232ms_12k8[120]; -extern const float dft_win232ms_16k[150]; -extern const float dft_win232ms_32k[300]; -extern const float dft_win232ms_48k[450]; -#endif -#ifdef IVAS_FLOAT_FIXED extern const Word16 dft_win232ms_8k_fx[75]; extern const Word16 dft_win232ms_12k8_fx[120]; extern const Word16 dft_win232ms_16k_fx[150]; @@ -86,26 +61,14 @@ extern const Word16 dft_win232ms_32k_fx[300]; extern const Word16 dft_win232ms_48k_fx[450]; extern const Word16 dft_res_pred_weights_fx[][STEREO_DFT_BAND_MAX]; extern const Word16 dft_win_8k_fx[70]; -#endif -#ifndef IVAS_FLOAT_FIXED -extern const float dft_win_8k[70]; -#endif extern const int16_t cna_init_bands[CNA_INIT_NBANDS + 1]; -#ifndef IVAS_FLOAT_FIXED -extern const float min_smooth_gains1[SBA_DIRAC_STEREO_NUM_BANDS]; -extern const float max_smooth_gains1[SBA_DIRAC_STEREO_NUM_BANDS]; -extern const float min_smooth_gains2[SBA_DIRAC_STEREO_NUM_BANDS]; -extern const float max_smooth_gains2[SBA_DIRAC_STEREO_NUM_BANDS]; -#endif -#ifdef IVAS_FLOAT_FIXED extern const Word16 min_smooth_gains1_fx[SBA_DIRAC_STEREO_NUM_BANDS]; extern const Word16 max_smooth_gains1_fx[SBA_DIRAC_STEREO_NUM_BANDS]; extern const Word16 min_smooth_gains2_fx[SBA_DIRAC_STEREO_NUM_BANDS]; extern const Word16 max_smooth_gains2_fx[SBA_DIRAC_STEREO_NUM_BANDS]; -#endif /*----------------------------------------------------------------------------------* * ECLVQ Stereo ROM tables @@ -123,22 +86,13 @@ extern const uint16_t *const sym_freq_ECSQ_tab_abs_lsbs[1 + 4]; * DirAC ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float dirac_dithering_azi_scale[DIRAC_DIFFUSE_LEVELS]; -extern const float dirac_dithering_ele_scale[DIRAC_DIFFUSE_LEVELS]; -#endif -#ifdef IVAS_FLOAT_FIXED extern const Word16 dirac_dithering_azi_scale_fx[DIRAC_DIFFUSE_LEVELS]; extern const Word16 dirac_dithering_ele_scale_fx[DIRAC_DIFFUSE_LEVELS]; -#endif /*----------------------------------------------------------------------------------* * FASTCONV and PARAMETRIC binaural renderer ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float dmxmtx_table[BINAURAL_CHANNELS][11]; -#endif extern const Word32 dmxmtx_table_fx[BINAURAL_CHANNELS][11]; /*----------------------------------------------------------------------* diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 2b91f3811..09bec5599 100644 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -49,7 +49,6 @@ * * Set CNA/CNG flags in IVAS SBA decoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_sba_set_cna_cng_flag( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ) @@ -100,605 +99,7 @@ void ivas_sba_set_cna_cng_flag( return; } -#else -void ivas_sba_set_cna_cng_flag( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t n, cpe_id; - - if ( st_ivas->ivas_format == SBA_FORMAT && st_ivas->nchan_transport == 1 ) - { - /* skip as done in init function */ - /* st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 0; */ - /* st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag = 0; */ - } - else if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) ) ) - { - st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag = 1; - st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag = 1; - } - else if ( st_ivas->nchan_transport == 2 ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[0]->hCoreCoder[n]->cna_dirac_flag = 0; - st_ivas->hCPE[0]->hCoreCoder[n]->cng_sba_flag = 1; - } - } - else - { - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cna_dirac_flag = 0; - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_sba_flag = 0; - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ivas_sba_dec_reconfigure() - * - * Reconfigure IVAS SBA decoder - *-------------------------------------------------------------------*/ - -ivas_error ivas_sba_dec_reconfigure( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - uint16_t *nSamplesFlushed, /* o : number of samples flushed */ - int16_t *data /* o : output synthesis signal */ -) -{ - int16_t nchan_transport_old, nSCE_old, nCPE_old, nchan_hp20_old; - AUDIO_CONFIG intern_config_old; - int16_t numCldfbAnalyses_old, numCldfbSyntheses_old; - int16_t sba_dirac_stereo_flag_old; - int32_t ivas_total_brate; - int32_t last_ivas_total_brate; - int16_t num_channels, num_md_sub_frames; - int16_t nchan_out_buff, nchan_out_buff_old; - int16_t sba_analysis_order_old_flush; - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - ISM_MODE ism_mode_old; - int16_t granularity_new; - - ism_mode_old = st_ivas->ism_mode; - hDecoderConfig = st_ivas->hDecoderConfig; - ivas_total_brate = hDecoderConfig->ivas_total_brate; - last_ivas_total_brate = st_ivas->last_active_ivas_total_brate; - sba_analysis_order_old_flush = st_ivas->sba_analysis_order; - - /*-----------------------------------------------------------------* - * Set SBA high-level parameters - * Save old SBA high-level parameters - *-----------------------------------------------------------------*/ - - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, sba_analysis_order_old_flush, last_ivas_total_brate ); - - ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - nchan_hp20_old = getNumChanSynthesis( st_ivas ); - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( ivas_total_brate >= IVAS_256k ) - { - st_ivas->ism_mode = ISM_SBA_MODE_DISC; - } - else - { - st_ivas->ism_mode = ISM_MODE_NONE; - } - } - else - { - st_ivas->ism_mode = ISM_MODE_NONE; - } - - nSCE_old = st_ivas->nSCE; - nCPE_old = st_ivas->nCPE; - nchan_transport_old = st_ivas->nchan_transport; - sba_dirac_stereo_flag_old = st_ivas->sba_dirac_stereo_flag; - - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); - - *nSamplesFlushed = 0; - granularity_new = st_ivas->hTcBuffer->n_samples_granularity; - - /* we may need to flush only for binaural and OSBA and TSM */ - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - { - RENDERER_TYPE renderer_type_new; - int16_t sba_order_internal; - - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - - /* get new renderer type */ - /* copy the logic from ivas_renderer_select(), because calling this function has too many side effects that would affect the flushing */ - if ( ivas_get_sba_num_TCs( ivas_total_brate, sba_order_internal ) <= 2 ) - { - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL ) - { - renderer_type_new = RENDERER_BINAURAL_PARAMETRIC; - } - else - { - renderer_type_new = RENDERER_BINAURAL_PARAMETRIC_ROOM; - } - } - else - { - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - renderer_type_new = RENDERER_BINAURAL_FASTCONV; - } - else - { - renderer_type_new = RENDERER_BINAURAL_FASTCONV_ROOM; - } - } - - /* determine new granularity */ - granularity_new = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - /* this will change anyway only with binaural */ - if ( renderer_type_new == RENDERER_BINAURAL_FASTCONV && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - granularity_new *= JBM_CLDFB_SLOTS_IN_SUBFRAME; - } - - /* flush renderer on granularity change form 5ms to 1.25ms, again only possible for binaural rendering */ - if ( granularity_new < st_ivas->hTcBuffer->n_samples_granularity ) - { - /* write back info for correct rendering of the flushable samples */ - st_ivas->sba_analysis_order = sba_analysis_order_old_flush; - st_ivas->hDecoderConfig->ivas_total_brate = last_ivas_total_brate; - - if ( ( error = ivas_jbm_dec_flush_renderer( st_ivas, granularity_new, st_ivas->renderer_type, st_ivas->intern_config, &st_ivas->hIntSetup, st_ivas->mc_mode, ism_mode_old, nSamplesFlushed, data ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* restore correct values for the current frame*/ - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); - st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate; - } - else if ( granularity_new > st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_set_discard_samples( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* make sure the changed number of slots in the last subframe is not lost in the following steps */ - if ( st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hSpatParamRendCom->subframe_nbslots[st_ivas->hSpatParamRendCom->nb_subframes - 1] = st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1]; - } - st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->nb_subframes - 1] = st_ivas->hTcBuffer->subframe_nbslots[st_ivas->hTcBuffer->nb_subframes - 1]; - } - } - - /* save old */ - if ( ism_mode_old != ISM_SBA_MODE_DISC ) - { - if ( st_ivas->hDirAC == NULL && st_ivas->hSpar != NULL ) - { - st_ivas->hTcBuffer->num_slots = st_ivas->hSpar->num_slots; - st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpar->nb_subframes; - st_ivas->hTcBuffer->slots_rendered = st_ivas->hSpar->slots_rendered; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hSpar->subframes_rendered; - mvs2s( st_ivas->hSpar->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - else if ( st_ivas->hSpatParamRendCom != NULL ) - { - st_ivas->hTcBuffer->num_slots = st_ivas->hSpatParamRendCom->num_slots; - st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpatParamRendCom->nb_subframes; - st_ivas->hTcBuffer->slots_rendered = st_ivas->hSpatParamRendCom->slots_rendered; - st_ivas->hTcBuffer->subframes_rendered = st_ivas->hSpatParamRendCom->subframes_rendered; - mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - } - } - - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SBA handles - *-----------------------------------------------------------------*/ - - int16_t sba_order_internal; - SPAR_DEC_HANDLE hSpar; - hSpar = st_ivas->hSpar; - - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - - if ( hSpar != NULL ) - { - if ( ( hSpar->hPCA != NULL ) && ( ( hDecoderConfig->ivas_total_brate != PCA_BRATE ) || ( st_ivas->sba_order != 1 ) ) ) - { - free( st_ivas->hSpar->hPCA ); - hSpar->hPCA = NULL; - } - - if ( nchan_transport_old != ivas_get_sba_num_TCs( ivas_total_brate, sba_order_internal ) || ( last_ivas_total_brate >= IVAS_512k && ivas_total_brate < IVAS_512k ) || ( last_ivas_total_brate < IVAS_512k && ivas_total_brate >= IVAS_512k ) ) - { - ivas_spar_dec_close( &( st_ivas->hSpar ), hDecoderConfig->output_Fs, 1 ); - - if ( ( error = ivas_spar_dec_open( st_ivas, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( last_ivas_total_brate < IVAS_24k4 && ivas_total_brate >= IVAS_24k4 ) - { - num_channels = st_ivas->hSpar->hMdDec->spar_md_cfg.num_umx_chs; - ivas_spar_md_dec_matrix_close( st_ivas->hSpar->hMdDec, num_channels ); - - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order_internal, ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - if ( ( error = ivas_spar_md_dec_matrix_open( st_ivas->hSpar->hMdDec, num_channels, num_md_sub_frames ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( hSpar->hPCA == NULL && st_ivas->hDecoderConfig->ivas_total_brate == PCA_BRATE && st_ivas->sba_order == 1 && st_ivas->ivas_format == SBA_FORMAT ) - { - if ( ( hSpar->hPCA = (PCA_DEC_STATE *) malloc( sizeof( PCA_DEC_STATE ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PCA decoder" ); - } - - ivas_pca_dec_init( hSpar->hPCA ); - } - - ivas_spar_config( ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, st_ivas->sid_format ); - } - else - { - if ( ( error = ivas_spar_dec_open( st_ivas, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - hSpar = st_ivas->hSpar; - st_ivas->sba_dirac_stereo_flag = ivas_get_sba_dirac_stereo_flag( st_ivas ); - - if ( st_ivas->nchan_transport == 1 ) - { - st_ivas->element_mode_init = IVAS_SCE; - } - else - { - st_ivas->element_mode_init = IVAS_CPE_MDCT; - } - - /*-----------------------------------------------------------------* - * Renderer selection - *-----------------------------------------------------------------*/ - - /* renderer might have changed */ - intern_config_old = st_ivas->intern_config; - ivas_renderer_select( st_ivas ); - - /* side effect of the renderer selection can be a changed internal config */ - if ( st_ivas->intern_config != intern_config_old ) - { - ivas_output_init( &( st_ivas->hIntSetup ), st_ivas->intern_config ); - } - - /*-------------------------------------------------------------------* - * Reallocate and initialize binaural rendering handles - *--------------------------------------------------------------------*/ - - if ( st_ivas->hBinRenderer == NULL && ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - /* open fastconv binaural renderer */ - if ( ( error = ivas_binRenderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->hBinRenderer != NULL && ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - ivas_binRenderer_close( &st_ivas->hBinRenderer ); - } - - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->hMonoDmxRenderer == NULL ) - { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->renderer_type != RENDERER_MONO_DOWNMIX ) - { - ivas_mono_dmx_renderer_close( &st_ivas->hMonoDmxRenderer ); - } - - if ( ( error = ivas_dirac_sba_config( st_ivas->hQMetaData, &st_ivas->element_mode_init, ivas_total_brate, st_ivas->sba_analysis_order, ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ? IVAS_MAX_NUM_BANDS : ( IVAS_MAX_NUM_BANDS - SPAR_DIRAC_SPLIT_START_BAND ), - st_ivas->ivas_format ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( ( st_ivas->renderer_type != RENDERER_DISABLE ) && ( st_ivas->renderer_type != RENDERER_SBA_LINEAR_DEC ) ) || ( ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA ) && ( st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO ) && ( st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO ) ) ) - { - DIRAC_CONFIG_FLAG flag_config; - - flag_config = DIRAC_OPEN; - if ( st_ivas->hDirAC != NULL ) - { - flag_config = DIRAC_RECONFIGURE_MODE; - } - - if ( ( error = ivas_dirac_dec_config( st_ivas, flag_config ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - int16_t band_grouping[IVAS_MAX_NUM_BANDS + 1]; - - st_ivas->hSpar->enc_param_start_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - if ( ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ) ) - { - st_ivas->hSpar->enc_param_start_band = 0; - - set_c( (int8_t *) st_ivas->hQMetaData->twoDirBands, (int8_t) 1, st_ivas->hQMetaData->q_direction[0].cfg.nbands ); - st_ivas->hQMetaData->numTwoDirBands = (uint8_t) st_ivas->hQMetaData->q_direction[0].cfg.nbands; - } - - ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( st_ivas->hDecoderConfig->output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ), - st_ivas->hSpar->dirac_to_spar_md_bands, st_ivas->hQMetaData->useLowerBandRes, st_ivas->hSpar->enc_param_start_band, 0 ); - - if ( st_ivas->hDirAC ) - { - st_ivas->hDirAC->hConfig->enc_param_start_band = st_ivas->hSpar->enc_param_start_band; - } - } - - if ( st_ivas->renderer_type == RENDERER_DISABLE ) - { - ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); - ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); - ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); - vbap_free_data( &( st_ivas->hVBAPdata ) ); - } - - if ( st_ivas->hDirAC != NULL ) - { - st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; - } - - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SCE/CPE/MCT handles - *-----------------------------------------------------------------*/ - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( ism_mode_old == ISM_MODE_NONE && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - int32_t temp_brate[MAX_SCE]; - - st_ivas->ism_mode = ISM_SBA_MODE_DISC; - if ( ( error = ivas_ism_metadata_dec_create( st_ivas, st_ivas->nchan_ism, temp_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( st_ivas->renderer_type == RENDERER_TD_PANNING || - st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX || - st_ivas->renderer_type == RENDERER_SBA_LINEAR_ENC || - st_ivas->renderer_type == RENDERER_OSBA_STEREO || - st_ivas->renderer_type == RENDERER_OSBA_AMBI || - st_ivas->renderer_type == RENDERER_OSBA_LS || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || - st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM || - st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM ) ) - { - if ( ( error = ivas_ism_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) - { - if ( st_ivas->hMonoDmxRenderer == NULL ) - { - if ( ( error = ivas_mono_dmx_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - ivas_mono_dmx_renderer_close( &st_ivas->hMonoDmxRenderer ); - } - - if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) - { - /* Allocate TD renderer for the objects in DISC mode */ - if ( st_ivas->hBinRendererTd == NULL ) - { - if ( ( error = ivas_td_binaural_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* Allocate memory for OSBA delay buffer */ - if ( ( error = ivas_osba_data_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->nCPE += ( st_ivas->nchan_ism + 1 ) >> 1; - } - else if ( ism_mode_old == ISM_SBA_MODE_DISC && st_ivas->ism_mode == ISM_MODE_NONE ) - { - /* ISM renderer handle */ - ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); - ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); - ivas_osba_data_close( &st_ivas->hSbaIsmData ); - - /* Time Domain binaural renderer handle */ - if ( st_ivas->hBinRendererTd != NULL ) - { - if ( st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE ) - { - ivas_td_binaural_close( &st_ivas->hBinRendererTd ); - st_ivas->hHrtfTD = NULL; - } - } - nchan_transport_old += st_ivas->nchan_ism; - st_ivas->ism_mode = ISM_MODE_NONE; - } - else if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - st_ivas->nCPE += ( st_ivas->nchan_ism + 1 ) >> 1; - nCPE_old = st_ivas->nCPE; - nchan_transport_old = st_ivas->nchan_transport; - nchan_transport_old += st_ivas->nchan_ism; - } - } - - if ( ( error = ivas_corecoder_dec_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, sba_dirac_stereo_flag_old, st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport, ( st_ivas->hDecoderConfig->ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * HP20 memories - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_hp20_dec_reconfig( st_ivas, nchan_hp20_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * TD Decorrelator - *-----------------------------------------------------------------*/ - - if ( st_ivas->hDiracDecBin != NULL ) - { - if ( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( st_ivas->hDiracDecBin->hTdDecorr ), &( st_ivas->hDiracDecBin->useTdDecorr ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * CLDFB instances - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_cldfb_dec_reconfig( st_ivas, nchan_transport_old, numCldfbAnalyses_old, numCldfbSyntheses_old ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------* - * JBM TC buffers - *-----------------------------------------------------------------*/ - - { - int16_t tc_nchan_to_allocate; - int16_t tc_nchan_tc; - TC_BUFFER_MODE tc_buffer_mode; - - tc_buffer_mode = TC_BUFFER_MODE_RENDERER; - tc_nchan_tc = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - tc_nchan_to_allocate = tc_nchan_tc; - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) - { - if ( ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - tc_nchan_tc = st_ivas->hDecoderConfig->nchan_out + st_ivas->nchan_ism; - tc_nchan_to_allocate = tc_nchan_tc; - } - else - { - tc_buffer_mode = TC_BUFFER_MODE_BUFFER; - tc_nchan_tc = st_ivas->hDecoderConfig->nchan_out; - tc_nchan_to_allocate = tc_nchan_tc; - } - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS; - } - else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - tc_nchan_to_allocate = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - tc_nchan_to_allocate += st_ivas->nchan_ism; - } - } - else - { - if ( st_ivas->nchan_transport == 1 && ( ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) || ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) ) - { - tc_nchan_to_allocate++; /* we need a channel for the CNG in this case*/ - } - } - - if ( tc_nchan_tc != st_ivas->hTcBuffer->nchan_transport_jbm || tc_nchan_to_allocate != st_ivas->hTcBuffer->nchan_transport_internal || tc_buffer_mode != st_ivas->hTcBuffer->tc_buffer_mode || granularity_new != st_ivas->hTcBuffer->n_samples_granularity ) - { - if ( ( error = ivas_jbm_dec_tc_buffer_reconfigure( st_ivas, tc_buffer_mode, tc_nchan_tc, tc_nchan_to_allocate, tc_nchan_to_allocate, granularity_new ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* resync SPAR and DirAC JBM info from TC Buffer */ - if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity ) - { - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpatParamRendCom->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - st_ivas->hSpatParamRendCom->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hSpatParamRendCom->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - } - mvs2s( st_ivas->hTcBuffer->subframe_nbslots, st_ivas->hSpar->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); - st_ivas->hSpar->nb_subframes = st_ivas->hTcBuffer->nb_subframes; - st_ivas->hSpar->subframes_rendered = st_ivas->hTcBuffer->subframes_rendered; - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - int16_t granularityMultiplier = st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size; - int16_t n; - for ( n = 0; n < MAX_JBM_SUBFRAMES_5MS; n++ ) - { - st_ivas->hSpatParamRendCom->subframe_nbslots[n] = st_ivas->hTcBuffer->subframe_nbslots[n] * granularityMultiplier; - st_ivas->hSpar->subframe_nbslots[n] = st_ivas->hSpatParamRendCom->subframe_nbslots[n]; - } - } - - /*-----------------------------------------------------------------* - * floating-point output audio buffers - *-----------------------------------------------------------------*/ - - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK ) - { - return error; - } - - return error; -} -#else /*-------------------------------------------------------------------* * ivas_sba_dec_reconfigure_fx() * @@ -1362,303 +763,7 @@ ivas_error ivas_sba_dec_reconfigure_fx( return error; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ivas_sba_dec_digest_tc() - * - * - *-------------------------------------------------------------------*/ - -void ivas_sba_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t nCldfbSlots, /* i : number of CLDFB slots */ - const int16_t nSamplesForRendering /* i : number of samples provided */ -) -{ - int16_t ch_idx, nchan_transport; - - /* set the md map */ - if ( st_ivas->hDirAC ) - { -#ifdef IVAS_FLOAT_FIXED - ivas_dirac_dec_set_md_map_fx( st_ivas, nCldfbSlots ); -#else - ivas_dirac_dec_set_md_map( st_ivas, nCldfbSlots ); -#endif - } - - if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) - { -#if 0 - Word16 num_md_sub_frames = ivas_get_spar_dec_md_num_subframes(st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate); -#if 1 - Word16 ch, i; - SPAR_DEC_HANDLE hSpar = st_ivas->hSpar; - Word16 num_bands_out, nchan_transport; - num_bands_out = hSpar->hFbMixer->pFb->filterbank_num_bands; - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - Word16 j, b, i_ts, num_out_ch; - num_out_ch = hSpar->hMdDec->spar_md_cfg.num_umx_chs; - Word16 Q_C_re_fx = 31, Q_P_re_fx = 31; - hSpar->hMdDec->Q_mixer_mat = 31; - Word16 num_in_ch; - num_in_ch = hSpar->hMdDec->spar_md_cfg.num_umx_chs; - FOR(i_ts = 0; i_ts < num_md_sub_frames; i_ts++) - { - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = 0; j < num_in_ch; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - hSpar->hMdDec->Q_mixer_mat = s_min(hSpar->hMdDec->Q_mixer_mat, Q_factor_L(hSpar->hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS])); - } - } - } - } - FOR(i_ts = 0; i_ts < num_md_sub_frames; i_ts++) - { - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = 0; j < nchan_transport; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - Q_C_re_fx = s_min(Q_C_re_fx, Q_factor_L(hSpar->hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS])); - } - } - } - } - FOR(i_ts = 0; i_ts < num_md_sub_frames; i_ts++) - { - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = nchan_transport; j < num_out_ch; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - Q_P_re_fx = s_min(Q_P_re_fx, Q_factor_L(hSpar->hMdDec->spar_coeffs.P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS])); - } - } - } - } - hSpar->hMdDec->Q_mixer_mat = s_min(hSpar->hMdDec->Q_mixer_mat, s_min(Q_C_re_fx, Q_P_re_fx)); - FOR(i_ts = 0; i_ts < num_md_sub_frames; i_ts++) - { - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = 0; j < num_in_ch; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - hSpar->hMdDec->mixer_mat_fx[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = floatToFixed(hSpar->hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS], hSpar->hMdDec->Q_mixer_mat); - } - } - } - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = 0; j < nchan_transport; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - hSpar->hMdDec->spar_coeffs.C_re_fx[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = floatToFixed(hSpar->hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS], hSpar->hMdDec->Q_mixer_mat); - } - } - } - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = nchan_transport; j < num_out_ch; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - hSpar->hMdDec->spar_coeffs.P_re_fx[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = floatToFixed(hSpar->hMdDec->spar_coeffs.P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS], hSpar->hMdDec->Q_mixer_mat); - } - } - } - } - - - IF(hSpar->hMdDec->td_decorr_flag && !(EQ_16(st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC) || EQ_16(st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM))) - { - Word16 ch_sba_idx = 0; - IF(EQ_16(st_ivas->ivas_format, SBA_ISM_FORMAT)) - { - IF(EQ_16(st_ivas->ism_mode, ISM_SBA_MODE_DISC)) - { - ch_sba_idx = st_ivas->nchan_ism; move16(); - } - } - st_ivas->hTcBuffer->q_tc_fx = 14; - for (int i = 0; i < ivas_sba_get_nchan_metadata(st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate) + ch_sba_idx; i++) - { - floatToFixed_arrL(st_ivas->hTcBuffer->tc[i], st_ivas->hTcBuffer->tc_fx[i], st_ivas->hTcBuffer->q_tc_fx, min(nSamplesForRendering, (int16_t)(st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC))); - } - } -#endif - ivas_spar_dec_digest_tc_fx(st_ivas, st_ivas->nchan_transport, nCldfbSlots, nSamplesForRendering); - -#if 1 - FOR(i_ts = 0; i_ts < num_md_sub_frames; i_ts++) - { - FOR(i = 0; i < num_out_ch; i++) - { - FOR(j = 0; j < num_in_ch; j++) - { - FOR(b = 0; b < num_bands_out; b++) - { - st_ivas->hSpar->hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = fixedToFloat(st_ivas->hSpar->hMdDec->mixer_mat_fx[i][j][b + i_ts * IVAS_MAX_NUM_BANDS], st_ivas->hSpar->hMdDec->Q_mixer_mat); - } - } - } - } - - IF(hSpar->hMdDec->td_decorr_flag && !(EQ_16(st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC) || EQ_16(st_ivas->renderer_type, RENDERER_BINAURAL_PARAMETRIC_ROOM))) - { - Word16 ch_sba_idx = 0; - IF(EQ_16(st_ivas->ivas_format, SBA_ISM_FORMAT)) - { - IF(EQ_16(st_ivas->ism_mode, ISM_SBA_MODE_DISC)) - { - ch_sba_idx = st_ivas->nchan_ism; move16(); - } - } - for (int i = 0; i < ivas_sba_get_nchan_metadata(st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate) + ch_sba_idx; i++) - { - fixedToFloat_arrL(st_ivas->hTcBuffer->tc_fx[i], st_ivas->hTcBuffer->tc[i], st_ivas->hTcBuffer->q_tc_fx, min(nSamplesForRendering, (int16_t)(st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC))); - } - } - -#endif -#else - ivas_spar_dec_digest_tc( st_ivas, st_ivas->nchan_transport, nCldfbSlots, nSamplesForRendering ); -#endif - } - - if ( st_ivas->hDiracDecBin != NULL && ( st_ivas->hDiracDecBin->useTdDecorr ) ) - { - int16_t nSamplesLeftForTD, default_frame; - float *decorr_signal[BINAURAL_CHANNELS]; - float *p_tc[2 * BINAURAL_CHANNELS]; - - default_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - nSamplesLeftForTD = nSamplesForRendering; - - for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) - { - decorr_signal[ch_idx] = st_ivas->hTcBuffer->tc[ch_idx + BINAURAL_CHANNELS]; - p_tc[ch_idx] = st_ivas->hTcBuffer->tc[ch_idx]; - } - - while ( nSamplesLeftForTD ) - { - int16_t nSamplesToDecorr = min( nSamplesLeftForTD, default_frame ); - - if ( st_ivas->hDiracDecBin->hTdDecorr ) - { -#ifndef IVAS_FLOAT_FIXED - ivas_td_decorr_process( st_ivas->hDiracDecBin->hTdDecorr, p_tc, decorr_signal, nSamplesToDecorr ); -#ifdef DEBUGGING - for ( i = 0; i < st_ivas->hDiracDecBin->hTdDecorr->num_apd_outputs; i++ ) - { - dbgwrite_txt( decorr_signal[i], nSamplesToDecorr, "fixed.txt", NULL ); - } -#endif -#else - { - Word32 *decorr_signal_fx[BINAURAL_CHANNELS]; - Word32 *p_tc_fx[2 * BINAURAL_CHANNELS]; - Word32 arr_decorr_signal_fx[BINAURAL_CHANNELS][L_FRAME48k]; - Word32 arr_tc_fx[2 * BINAURAL_CHANNELS][L_FRAME48k]; - Word32 i, j; - Word16 q_format = Q14; - - FOR( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - decorr_signal_fx[i] = arr_decorr_signal_fx[i]; - p_tc_fx[i] = arr_tc_fx[i]; - } - FOR( j = 0; j < nSamplesToDecorr; j++ ) - { - p_tc_fx[0][j] = (Word32) ( p_tc[0][j] * ( 1 << q_format ) ); - } - - ivas_td_decorr_process_fx( st_ivas->hDiracDecBin->hTdDecorr, p_tc_fx, decorr_signal_fx, nSamplesToDecorr ); - - FOR( i = 0; i < st_ivas->hDiracDecBin->hTdDecorr->num_apd_outputs; i++ ) - { - FOR( j = 0; j < nSamplesToDecorr; j++ ) - { - decorr_signal[i][j] = ( decorr_signal_fx[i][j] ) / (float) ( 1 << q_format ); - } -#ifdef DEBUGGING - dbgwrite_txt( decorr_signal[i], nSamplesToDecorr, "fixed.txt", NULL ); -#endif - } - } -#endif - } - - for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ ) - { - decorr_signal[ch_idx] += nSamplesToDecorr; - p_tc[ch_idx] += nSamplesToDecorr; - } - nSamplesLeftForTD -= nSamplesToDecorr; - } - } - - /* if we have a late CNG generation, do it here */ - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->hDecoderConfig->ivas_total_brate < MASA_STEREO_MIN_BITRATE && ( st_ivas->hDecoderConfig->ivas_total_brate > IVAS_SID_5k2 || ( st_ivas->hDecoderConfig->ivas_total_brate <= IVAS_SID_5k2 && st_ivas->nCPE > 0 && st_ivas->hCPE[0]->nchan_out == 1 ) ) ) - { - nchan_transport = 1; /* Only one channel transported */ - } - - if ( ( ( st_ivas->ivas_format != SBA_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) && st_ivas->nchan_transport == 1 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag ) || - ( ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) && ( nchan_transport == 1 && st_ivas->nchan_transport != 2 && st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag ) ) ) - { - Decoder_State *st = st_ivas->hSCE[0]->hCoreCoder[0]; -#if 0 -#if 1 - Word32 max_cngNoiseLevel = 0; - FOR(int i = 0; i < FFTCLDFBLEN; i++) - { - max_cngNoiseLevel = L_max(L_abs((Word32)st->hFdCngDec->hFdCngCom->cngNoiseLevel_flt[i]), max_cngNoiseLevel); - } - st->hFdCngDec->hFdCngCom->cngNoiseLevelExp = norm_l(max_cngNoiseLevel); - - //floatToFixed_arr(st->hFdCngDec->hFdCngCom->A_cng_flt, st->hFdCngDec->hFdCngCom->A_cng, Q13, M + 1); - - floatToFixed_arrL(st->hFdCngDec->hFdCngCom->cngNoiseLevel_flt, st->hFdCngDec->hFdCngCom->cngNoiseLevel, st->hFdCngDec->hFdCngCom->cngNoiseLevelExp, FFTCLDFBLEN); - - for (int i = 0; i < FFTLEN; i++) - { - //st->hFdCngDec->hFdCngCom->olapBufferSynth2_fx[i] = float_to_fix(st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt[i], 15); - } - -#endif - generate_masking_noise_lb_dirac_fx(st->hFdCngDec->hFdCngCom, st_ivas->hTcBuffer->tc_fx[1], nCldfbSlots, st->cna_dirac_flag && st->flag_cna); - -#if 1 - //fixedToFloat_arrL(st->hFdCngDec->hFdCngCom->olapBufferSynth2_fx, st->hFdCngDec->hFdCngCom->olapBufferSynth2_flt, 15, st->hFdCngDec->hFdCngCom->fftlen); - fixedToFloat_arrL(st->hFdCngDec->hFdCngCom->fftBuffer, st->hFdCngDec->hFdCngCom->fftBuffer_flt, 31 - st->hFdCngDec->hFdCngCom->fftBuffer_exp, st->hFdCngDec->hFdCngCom->fftlen); - - //fixedToFloat_arrL(st->hFdCngDec->hFdCngCom->exc_cng_32fx, st->hFdCngDec->hFdCngCom->exc_cng_flt, 31 - st->hFdCngDec->hFdCngCom->fftBuffer_exp - 9, st->hFdCngDec->hFdCngCom->frameSize); - fixedToFloat_arrL(st_ivas->hTcBuffer->tc_fx[1], st_ivas->hTcBuffer->tc[1], 31 - st->hFdCngDec->hFdCngCom->fftBuffer_exp - 9, st->hFdCngDec->hFdCngCom->frameSize); - -#endif -#else - generate_masking_noise_lb_dirac( st->hFdCngDec->hFdCngCom, st_ivas->hTcBuffer->tc[1], nCldfbSlots, st->cna_dirac_flag && st->flag_cna ); -#endif - } - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_sba_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const Word16 nCldfbSlots, /* i : number of CLDFB slots Q0*/ @@ -1752,7 +857,6 @@ void ivas_sba_dec_digest_tc_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_sba_dec_render() @@ -1760,7 +864,6 @@ void ivas_sba_dec_digest_tc_fx( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_sba_dec_render_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested Q0*/ @@ -1851,85 +954,3 @@ ivas_error ivas_sba_dec_render_fx( return IVAS_ERR_OK; } - -#else - -ivas_error ivas_sba_dec_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of CLDFB slots still to render */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t slots_to_render, first_sf, last_sf, subframe_idx; - uint16_t slot_size, ch; - uint16_t nchan_internal, nchan_out; - SPAR_DEC_HANDLE hSpar; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - ivas_error error; - - hSpar = st_ivas->hSpar; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] = output_f[ch]; - } - - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hSpar->num_slots - hSpar->slots_rendered, nSamplesAsked / slot_size ); - *nSamplesRendered = slots_to_render * slot_size; - first_sf = hSpar->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hSpar->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - int16_t n_samples_sf = slot_size * hSpar->subframe_nbslots[subframe_idx]; - - ivas_spar_dec_upmixer_sf( st_ivas, output_f_local, nchan_internal ); - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] += n_samples_sf; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - if ( st_ivas->renderer_type == RENDERER_SBA_LINEAR_DEC ) - { - if ( ( error = ivas_sba_linear_renderer( output_f, *nSamplesRendered, st_ivas->hIntSetup.nchan_out_woLFE, 0, st_ivas->hDecoderConfig->output_config, st_ivas->hOutSetup ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->hDirAC != NULL && hSpar->slots_rendered == hSpar->num_slots ) - { - if ( st_ivas->hDirAC->hConfig->dec_param_estim == 1 ) - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_CLDFB_TIMESLOTS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - else - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_SUBFRAMES_5MS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - - *nSamplesAvailableNext = ( hSpar->num_slots - hSpar->slots_rendered ) * slot_size; - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_sba_dirac_stereo_dec.c b/lib_dec/ivas_sba_dirac_stereo_dec.c index 8baa08aa3..15a652bc1 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec.c @@ -41,905 +41,3 @@ #include "ivas_rom_com.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ivas_get_sba_dirac_stereo_flag() - * - * Set sba_dirac_stereo_flag - *-------------------------------------------------------------------*/ - -int16_t ivas_get_sba_dirac_stereo_flag( - Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ -) -{ - int16_t sba_dirac_stereo_flag; - AUDIO_CONFIG output_config; - - sba_dirac_stereo_flag = 0; - output_config = st_ivas->hDecoderConfig->output_config; - - if ( st_ivas->ivas_format == SBA_FORMAT || ( st_ivas->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ) - { - if ( st_ivas->ivas_format == SBA_FORMAT ) - { - if ( output_config == IVAS_AUDIO_CONFIG_STEREO || ( output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) ) - { - sba_dirac_stereo_flag = 1; - } - } - else - { - if ( st_ivas->nchan_transport == 1 && output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - sba_dirac_stereo_flag = 1; - } - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - sba_dirac_stereo_flag = 1; - } - } - - return sba_dirac_stereo_flag; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_config() - * - * DFT Stereo Configuration for SBA DirAC stereo output - *-------------------------------------------------------------------*/ - -void ivas_sba_dirac_stereo_config( - STEREO_DFT_CONFIG_DATA_HANDLE hConfig /* o : DFT stereo configuration */ -) -{ - if ( hConfig != NULL ) - { - hConfig->dmx_active = STEREO_DFT_DMX_ACTIVE; - hConfig->band_res = STEREO_DFT_BAND_RES_HIGH; - hConfig->prm_res = 2; - - hConfig->res_pred_mode = STEREO_DFT_RESPRED_ESF; - - hConfig->res_cod_mode = STEREO_DFT_RES_COD_OFF; - hConfig->ada_wb_res_cod_mode = 0; - - hConfig->hybrid_itd_flag = 0; - } - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_band_config() - * - * Band Configuration for SBA DirAC stereo output - *-------------------------------------------------------------------*/ - -static int16_t ivas_sba_dirac_stereo_band_config( - int16_t *band_limits, /* o : DFT band limits */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t NFFT, /* i : analysis/synthesis window length */ - const int16_t spar_flag /* i : SPAR or DirAC band grouping */ -) -{ - int16_t i; - int16_t bins_per_cldfb_band; - int16_t nbands, num_cldfb_bands; - - nbands = SBA_DIRAC_STEREO_NUM_BANDS; - - if ( spar_flag ) - { - nbands = IVAS_MAX_NUM_BANDS; - } - else - { - nbands = 5; - } - - num_cldfb_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - - bins_per_cldfb_band = NFFT / ( 2 * num_cldfb_bands ); - - band_limits[0] = 1; - for ( i = 1; i < nbands; i++ ) - { - if ( spar_flag ) - { - band_limits[i] = DirAC_band_grouping_12[i] * bins_per_cldfb_band; - } - else - { - band_limits[i] = DirAC_band_grouping_5[i] * bins_per_cldfb_band; - } - if ( band_limits[i] >= NFFT / 2 ) - { - nbands = i; - break; - } - } - band_limits[nbands] = NFFT / 2; - - return nbands; -} - - -static float get_panning( - const int16_t aziDeg, - const int16_t eleDeg ) -{ - float aziRad, eleRad, y, mappedX, aziRadMapped, panning; - float A, A2, A3; - const float LsAngleRad = 30.0f * PI_OVER_180; - - aziRad = aziDeg * PI_OVER_180; - eleRad = eleDeg * PI_OVER_180; - y = ( sinf( aziRad ) * cosf( eleRad ) ); - mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); - aziRadMapped = atan2f( y, mappedX ); - - /* Determine the real valued amplitude panning gains */ - panning = 0.0f; - if ( aziRadMapped >= LsAngleRad ) - { /* Left side */ - panning = 1.0f; - } - else if ( aziRadMapped <= -LsAngleRad ) - { /* Right side */ - panning = -1.0f; - } - else /* Tangent panning law */ - { - A = tanf( aziRadMapped ) / tanf( LsAngleRad ); - A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); - A3 = 1.0f / ( A2 * A2 + 1.0f ); - panning = 2 * A3 - 1.0f; - } - return panning; -} - - -/*-------------------------------------------------------------------* - * map_params_dirac_to_stereo() - * - * Compute DFT Stereo parameters from DirAC parameters - *-------------------------------------------------------------------*/ - -static void map_params_dirac_to_stereo( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const IVAS_QMETADATA_HANDLE hQMetaData, /* i : frame of MASA q_metadata */ - float synth[], /* i : decoded downmix signal */ - float DFT[STEREO_DFT_BUF_MAX], /* i/o: DFT buffer */ - const uint8_t b_wide_panning, /* i : flag indicating wider panning */ - const int16_t L_frame, /* i : core signal length */ - const int16_t mcmasa /* i : McMASA flag */ -) -{ - int16_t i, b, k; - int16_t k_offset; - int16_t nbands, nBlocks; - int16_t block; - int16_t block_len; - int16_t azimuth[MAX_PARAM_SPATIAL_SUBFRAMES][SBA_DIRAC_STEREO_NUM_BANDS]; - int16_t elevation[MAX_PARAM_SPATIAL_SUBFRAMES][SBA_DIRAC_STEREO_NUM_BANDS]; - float diffuseness[SBA_DIRAC_STEREO_NUM_BANDS]; - float block_nrg[MAX_PARAM_SPATIAL_SUBFRAMES]; - float nrg_norm1, nrg_norm2; - float *pSynth; - float surrCoh[SBA_DIRAC_STEREO_NUM_BANDS]; - float *pDFT; - float subframe_band_nrg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; - float smooth_long_avg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; - float smooth_short_avg[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; - float *side_gain, *res_pred_gain; - IVAS_QDIRECTION *q_direction; - - nBlocks = MAX_PARAM_SPATIAL_SUBFRAMES; - nbands = hStereoDft->nbands; - k_offset = STEREO_DFT_OFFSET; - side_gain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; - res_pred_gain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; - q_direction = &( hQMetaData->q_direction[0] ); - - /* gain smoothing factor */ - pDFT = DFT; - for ( k = 0; k < NB_DIV; k++ ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - /* calculate band-wise subframe energies */ - subframe_band_nrg[k][b] = 0.f; - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - subframe_band_nrg[k][b] += pDFT[2 * i] * pDFT[2 * i] + pDFT[2 * i + 1] * pDFT[2 * i + 1]; - } - subframe_band_nrg[k][b] = sqrtf( subframe_band_nrg[k][b] ); - hStereoDft->smooth_buf[b][NB_DIV - 1 - k] = subframe_band_nrg[k][b]; - - /* calculate short and long energy averages */ - smooth_short_avg[k][b] = EPSILON; - for ( i = NB_DIV - 1 - k; i < SBA_DIRAC_NRG_SMOOTH_SHORT + NB_DIV - 1 - k; i++ ) - { - smooth_short_avg[k][b] += hStereoDft->smooth_buf[b][i]; - } - - smooth_long_avg[k][b] = smooth_short_avg[k][b]; - for ( i = NB_DIV - 1 - k + SBA_DIRAC_NRG_SMOOTH_SHORT; i < SBA_DIRAC_NRG_SMOOTH_LONG + NB_DIV - 1 - k; i++ ) - { - smooth_long_avg[k][b] += hStereoDft->smooth_buf[b][i]; - } - smooth_short_avg[k][b] /= SBA_DIRAC_NRG_SMOOTH_SHORT; - smooth_long_avg[k][b] /= SBA_DIRAC_NRG_SMOOTH_LONG; - - /* calculate smoothing factor based on energy averages */ - /* reduce factor for higher short-term energy */ - hStereoDft->smooth_fac[k][b] = min( 1.f, smooth_long_avg[k][b] / smooth_short_avg[k][b] ); - /* map factor to range [0;1] */ - hStereoDft->smooth_fac[k][b] = max( 0.f, hStereoDft->smooth_fac[k][b] - (float) SBA_DIRAC_NRG_SMOOTH_SHORT / SBA_DIRAC_NRG_SMOOTH_LONG ) * ( (float) SBA_DIRAC_NRG_SMOOTH_LONG / ( SBA_DIRAC_NRG_SMOOTH_LONG - SBA_DIRAC_NRG_SMOOTH_SHORT ) ); - /* compress factor (higher compression in lowest bands) */ - if ( b < 2 ) - { - hStereoDft->smooth_fac[k][b] = powf( hStereoDft->smooth_fac[k][b], 0.25f ); - } - else - { - hStereoDft->smooth_fac[k][b] = powf( hStereoDft->smooth_fac[k][b], 0.5f ); - } - - /* apply upper bounds depending on band */ - hStereoDft->smooth_fac[0][b] = max( hStereoDft->min_smooth_gains[b], min( hStereoDft->max_smooth_gains[b], hStereoDft->smooth_fac[0][b] ) ); - hStereoDft->smooth_fac[1][b] = max( hStereoDft->min_smooth_gains[b], min( hStereoDft->max_smooth_gains[b], hStereoDft->smooth_fac[1][b] ) ); - } - pDFT += STEREO_DFT32MS_N_MAX; - } - - if ( mcmasa ) - { - /* calculate block energies for side gain weighting (combine angles of 2 DirAC blocks to side gain for 1 DFT Stereo subframe; 4 blocks and 2 subframes overall) */ - pSynth = synth; - block_len = L_frame / nBlocks; - for ( block = 0; block < nBlocks; block++ ) - { - block_nrg[block] = 0.f; - for ( i = 0; i < block_len; i++ ) - { - block_nrg[block] += pSynth[i] * pSynth[i]; - } - block_nrg[block] = sqrtf( block_nrg[block] ); - pSynth += block_len; - } - nrg_norm1 = 1 / ( block_nrg[0] + block_nrg[1] + EPSILON ); - nrg_norm2 = 1 / ( block_nrg[2] + block_nrg[3] + EPSILON ); - - /* extract DirAC parameters from metadata */ - for ( b = 0; b < nbands; b++ ) - { - diffuseness[b] = 1.0f - q_direction->band_data[b].energy_ratio[0]; - if ( hQMetaData->surcoh_band_data != NULL ) - { - surrCoh[b] = hQMetaData->surcoh_band_data[b].surround_coherence[0] / 255.0f; - } - else - { - surrCoh[b] = 0.0f; - } - - for ( block = 0; block < nBlocks; block++ ) - { - int16_t block_metadata; - - if ( hQMetaData->useLowerRes ) - { - block_metadata = 0; - } - else - { - block_metadata = block; - } - if ( q_direction->band_data[b].azimuth[block_metadata] < 0.f ) - { - q_direction->band_data[b].azimuth[block_metadata] += 360.f; - } - azimuth[block][b] = (int16_t) q_direction->band_data[b].azimuth[block_metadata]; - elevation[block][b] = (int16_t) q_direction->band_data[b].elevation[block_metadata]; - } - } - - /* map angles (azi, ele), surround coherence, and diffuseness to DFT Stereo side and prediction gains */ - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - /* combine angles of first 2 blocks to side gain of first subframe */ - side_gain[b] = 0.f; - for ( block = 0; block < nBlocks / 2; block++ ) - { - if ( b_wide_panning == 1 ) - { - /* panning between left and ride, saturate at the stereo ls positions (+/- 30deg azi) */ - side_gain[b] += nrg_norm1 * block_nrg[block] * get_panning( azimuth[block][b], elevation[block][b] ); - } - else - { - side_gain[b] += nrg_norm1 * block_nrg[block] * sinf( azimuth[block][b] * EVS_PI / 180 ) * cosf( elevation[block][b] * EVS_PI / 180 ); - } - } - - /* combine angles of last 2 blocks to side gain of second subframe */ - side_gain[b + STEREO_DFT_BAND_MAX] = 0.f; - for ( block = nBlocks / 2; block < nBlocks; block++ ) - { - if ( b_wide_panning == 1 ) - { - /* panning between left and ride, saturate at the stereo ls positions (+/- 30deg azi) */ - side_gain[b + STEREO_DFT_BAND_MAX] += nrg_norm2 * block_nrg[block] * get_panning( azimuth[block][b], elevation[block][b] ); - } - else - { - side_gain[b + STEREO_DFT_BAND_MAX] += nrg_norm2 * block_nrg[block] * sinf( azimuth[block][b] * EVS_PI / 180 ) * cosf( elevation[block][b] * EVS_PI / 180 ); - } - } - /* Clamp values here. [-1, 1] is the allowed range, but due to precision issues they can be slightly off which can cause problems later. */ - side_gain[b] *= sqrtf( 1.f - diffuseness[b] ); - side_gain[b] = max( min( side_gain[b], 1 ), -1 ); - side_gain[b + STEREO_DFT_BAND_MAX] *= sqrtf( 1.f - diffuseness[b] ); - side_gain[b + STEREO_DFT_BAND_MAX] = max( min( side_gain[b + STEREO_DFT_BAND_MAX], 1 ), -1 ); - /* for residual prediction gain, allowed range is [0, 1]*/ - res_pred_gain[b] = diffuseness[b] * ( 1.0f - surrCoh[b] ); - res_pred_gain[b] = max( min( res_pred_gain[b], 1 ), 0 ); - res_pred_gain[b + STEREO_DFT_BAND_MAX] = diffuseness[b] * ( 1.0f - surrCoh[b] ); - res_pred_gain[b + STEREO_DFT_BAND_MAX] = max( min( res_pred_gain[b + STEREO_DFT_BAND_MAX], 1 ), 0 ); - } - } - - hStereoDft->frame_nodata = 0; - hStereoDft->frame_sid_nodata = 0; - hStereoDft->frame_sid = 0; - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_compute_td_stefi_nrgs() - * - * Compute energies for TD stereo filling - *-------------------------------------------------------------------*/ - -static void ivas_sba_dirac_stereo_compute_td_stefi_nrgs( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const float hb_synth[L_FRAME48k], /* i : HB signal */ - const int16_t core, /* i : core decision */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t fd_cng_flag /* i : FD-CNG indicator */ -) -{ - int16_t i; - float hb_nrg = EPSILON; - float hb_nrg2 = EPSILON; - - if ( ( core == ACELP_CORE && !fd_cng_flag ) || hStereoDft->core_hist[1] == ACELP_CORE ) - { - for ( i = 0; i < output_frame / 2; i++ ) - { - hb_nrg2 += hb_synth[i] * hb_synth[i]; - } - - hStereoDft->hb_nrg_subr[0] = hb_nrg2; - hb_nrg += hb_nrg2; - hb_nrg2 = EPSILON; - - for ( ; i < output_frame; i++ ) - { - hb_nrg2 += hb_synth[i] * hb_synth[i]; - } - - hStereoDft->hb_nrg_subr[1] = hb_nrg2; - hb_nrg += hb_nrg2; - - mvr2r( hb_synth, hStereoDft->hb_stefi_sig + hStereoDft->hb_stefi_delay, output_frame ); - } - else - { - set_zero( hStereoDft->hb_stefi_sig + hStereoDft->hb_stefi_delay, output_frame ); - } - - hStereoDft->hb_nrg_subr[0] *= hStereoDft->NFFT / 2; - hStereoDft->hb_nrg_subr[1] *= hStereoDft->NFFT / 2; - hStereoDft->hb_nrg[0] = hb_nrg; - hStereoDft->td_gain[0] = 0; - hStereoDft->core_hist[0] = ( fd_cng_flag ) ? TCX_20_CORE : core; /* full signal available for DTX with FD-CNG, thus apply stereo filling on full spectrum like in TCX */ - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_compute_hb_gain() - * - * Compute HB gains - *-------------------------------------------------------------------*/ - -static void ivas_sba_dirac_stereo_compute_hb_gain( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - float hb_gain[NB_DIV] /* o : side gains for HB signal */ -) -{ - int16_t k_offset; - - k_offset = STEREO_DFT_OFFSET; - - /* last band covers whole HB range, no averaging needed */ - hb_gain[0] = hStereoDft->side_gain[k_offset * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; - hb_gain[1] = hStereoDft->side_gain[( k_offset + 1 ) * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_upmix_hb() - * - * Apply panning to HB signal - *-------------------------------------------------------------------*/ - -static void ivas_sba_dirac_stereo_upmix_hb( - float hb_stereo_synth[CPE_CHANNELS][L_FRAME48k], /* i/o: stereo HB synthesis signal */ - float hb_synth[L_FRAME48k], /* i : HB signal */ - float hb_gain[NB_DIV], /* i : side gains for HB signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t mcmasa, /* i : McMASA flag */ - const int16_t sba_mono_flag, /* i : flag for mono output */ - const int16_t bwidth, /* i : bandwidth of signal */ - const STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i : Stereo DFT handle for mixing matrix */ -) -{ - int16_t i; - float gp, gm; - float gain_fac; - - if ( !mcmasa ) - { - gain_fac = ( bwidth == FB ) ? 0.25f : 0.33f; /* last matrix element not used for SWB, divide by 3 instead of 4*/ - if ( sba_mono_flag ) - { - gp = hStereoDft->mixer_mat_smooth[0][0][8] + hStereoDft->mixer_mat_smooth[0][0][9] + - hStereoDft->mixer_mat_smooth[0][0][10]; - if ( bwidth == FB ) - { - gp += hStereoDft->mixer_mat_smooth[0][0][11]; - } - for ( i = 0; i < output_frame / 2; i++ ) - { - hb_stereo_synth[0][i] = hb_synth[i] * gain_fac * gp; - } - gp = hStereoDft->mixer_mat_smooth[0][0][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][0][9 + IVAS_MAX_NUM_BANDS] + - hStereoDft->mixer_mat_smooth[0][0][10 + IVAS_MAX_NUM_BANDS]; - if ( bwidth == FB ) - { - gp += hStereoDft->mixer_mat_smooth[0][0][11 + IVAS_MAX_NUM_BANDS]; - } - for ( i = output_frame / 2; i < output_frame; i++ ) - { - hb_stereo_synth[0][i] = hb_synth[i] * gain_fac * gp; - } - } - else - { - gp = hStereoDft->mixer_mat_smooth[0][0][8] + hStereoDft->mixer_mat_smooth[1][0][8] + - hStereoDft->mixer_mat_smooth[0][0][9] + hStereoDft->mixer_mat_smooth[1][0][9] + - hStereoDft->mixer_mat_smooth[0][0][10] + hStereoDft->mixer_mat_smooth[1][0][10]; - if ( bwidth == FB ) - { - gp += hStereoDft->mixer_mat_smooth[0][0][11] + hStereoDft->mixer_mat_smooth[1][0][11]; - } - - gm = hStereoDft->mixer_mat_smooth[0][0][8] - hStereoDft->mixer_mat_smooth[1][0][8] + - hStereoDft->mixer_mat_smooth[0][0][9] - hStereoDft->mixer_mat_smooth[1][0][9] + - hStereoDft->mixer_mat_smooth[0][0][10] - hStereoDft->mixer_mat_smooth[1][0][10]; - if ( bwidth == FB ) - { - gm += hStereoDft->mixer_mat_smooth[0][0][11] - hStereoDft->mixer_mat_smooth[1][0][11]; - } - - for ( i = 0; i < output_frame / 2; i++ ) - { - hb_stereo_synth[0][i] = 0.5f * hb_synth[i] * gain_fac * gp; - hb_stereo_synth[1][i] = 0.5f * hb_synth[i] * gain_fac * gm; - } - - gp = hStereoDft->mixer_mat_smooth[0][0][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][0][8 + IVAS_MAX_NUM_BANDS] + - hStereoDft->mixer_mat_smooth[0][0][9 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][0][9 + IVAS_MAX_NUM_BANDS] + - hStereoDft->mixer_mat_smooth[0][0][10 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][0][10 + IVAS_MAX_NUM_BANDS]; - if ( bwidth == FB ) - { - gp += hStereoDft->mixer_mat_smooth[0][0][11 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][0][11 + IVAS_MAX_NUM_BANDS]; - } - - gm = hStereoDft->mixer_mat_smooth[0][0][8 + IVAS_MAX_NUM_BANDS] - hStereoDft->mixer_mat_smooth[1][0][8 + IVAS_MAX_NUM_BANDS] + - hStereoDft->mixer_mat_smooth[0][0][9 + IVAS_MAX_NUM_BANDS] - hStereoDft->mixer_mat_smooth[1][0][9 + IVAS_MAX_NUM_BANDS] + - hStereoDft->mixer_mat_smooth[0][0][10 + IVAS_MAX_NUM_BANDS] - hStereoDft->mixer_mat_smooth[1][0][10 + IVAS_MAX_NUM_BANDS]; - if ( bwidth == FB ) - { - gm += hStereoDft->mixer_mat_smooth[0][0][11 + IVAS_MAX_NUM_BANDS] - hStereoDft->mixer_mat_smooth[1][0][11 + IVAS_MAX_NUM_BANDS]; - } - - for ( i = output_frame / 2; i < output_frame; i++ ) - { - hb_stereo_synth[0][i] = 0.5f * hb_synth[i] * gain_fac * gp; - hb_stereo_synth[1][i] = 0.5f * hb_synth[i] * gain_fac * gm; - } - } - } - else - { - for ( i = 0; i < output_frame / 2; i++ ) - { - hb_stereo_synth[0][i] = 0.5f * hb_synth[i] + 0.5f * hb_gain[0] * hb_synth[i]; - hb_stereo_synth[1][i] = 0.5f * hb_synth[i] - 0.5f * hb_gain[0] * hb_synth[i]; - } - - for ( i = output_frame / 2; i < output_frame; i++ ) - { - hb_stereo_synth[0][i] = 0.5f * hb_synth[i] + 0.5f * hb_gain[1] * hb_synth[i]; - hb_stereo_synth[1][i] = 0.5f * hb_synth[i] - 0.5f * hb_gain[1] * hb_synth[i]; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_apply_td_stefi() - * - * Apply TD stereo filling for ACELP HB - *-------------------------------------------------------------------*/ - -static void ivas_sba_dirac_stereo_apply_td_stefi( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - float *output[CPE_CHANNELS], /* i/o: output synthesis signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t spar_flag /* i : SPAR flag */ -) -{ - int16_t i; - int16_t dftOvlLen; - float win_in, win_out; - float tmp; - const float *win_dft; - - if ( spar_flag ) - { - win_dft = hStereoDft->win32ms; - dftOvlLen = hStereoDft->dft32ms_ovl; - - float g_W_1, g_Y_1; - float g_W_2, g_Y_2; - float g_L, g_R; - float stefi_L, stefi_R; - - g_W_1 = ( hStereoDft->mixer_mat_smooth[0][1][8] + hStereoDft->mixer_mat_smooth[0][2][8] + hStereoDft->mixer_mat_smooth[0][3][8] ) + ( hStereoDft->mixer_mat_smooth[0][1][9] + hStereoDft->mixer_mat_smooth[0][2][9] + hStereoDft->mixer_mat_smooth[0][3][9] ) + ( hStereoDft->mixer_mat_smooth[0][1][10] + hStereoDft->mixer_mat_smooth[0][2][10] + hStereoDft->mixer_mat_smooth[0][3][10] ); - - g_Y_1 = ( hStereoDft->mixer_mat_smooth[1][1][8] + hStereoDft->mixer_mat_smooth[1][2][8] + hStereoDft->mixer_mat_smooth[1][3][8] ) + ( hStereoDft->mixer_mat_smooth[1][1][9] + hStereoDft->mixer_mat_smooth[1][2][9] + hStereoDft->mixer_mat_smooth[1][3][9] ) + ( hStereoDft->mixer_mat_smooth[1][1][10] + hStereoDft->mixer_mat_smooth[1][2][10] + hStereoDft->mixer_mat_smooth[1][3][10] ); - - g_W_2 = ( hStereoDft->mixer_mat_smooth[0][1][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][8 + IVAS_MAX_NUM_BANDS] ) + ( hStereoDft->mixer_mat_smooth[0][1][9 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][9 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][9 + IVAS_MAX_NUM_BANDS] ) + ( hStereoDft->mixer_mat_smooth[0][1][10 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][10 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][10 + IVAS_MAX_NUM_BANDS] ); - - g_Y_2 = ( hStereoDft->mixer_mat_smooth[1][1][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][2][8 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][3][8 + IVAS_MAX_NUM_BANDS] ) + ( hStereoDft->mixer_mat_smooth[1][1][9 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][2][9 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][3][9 + IVAS_MAX_NUM_BANDS] ) + ( hStereoDft->mixer_mat_smooth[1][1][10 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][2][10 + IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][3][10 + IVAS_MAX_NUM_BANDS] ); - - g_L = 0.16f * ( g_W_1 + g_W_2 - g_Y_1 - g_Y_2 ); - g_R = 0.16f * ( g_W_1 + g_W_2 + g_Y_1 + g_Y_2 ); - - for ( i = 0; i < dftOvlLen; i++ ) - { - win_in = win_dft[STEREO_DFT32MS_STEP * i] * win_dft[STEREO_DFT32MS_STEP * i]; - win_out = 1 - win_in; - - stefi_L = ( win_out * hStereoDft->g_L_prev + win_in * g_L ) * 0.5f * hStereoDft->hb_stefi_sig[i]; - stefi_R = ( win_out * hStereoDft->g_R_prev + win_in * g_R ) * 0.5f * hStereoDft->hb_stefi_sig[i]; - - output[0][i] += stefi_L; - output[1][i] += stefi_R; - } - for ( i = dftOvlLen; i < output_frame; i++ ) - { - - stefi_L = g_L * 0.5f * hStereoDft->hb_stefi_sig[i]; - stefi_R = g_R * 0.5f * hStereoDft->hb_stefi_sig[i]; - - output[0][i] += stefi_L; - output[1][i] += stefi_R; - } - hStereoDft->g_L_prev = g_L; - hStereoDft->g_R_prev = g_R; - } - else if ( max( hStereoDft->td_gain[0], hStereoDft->td_gain[1] ) > 0 ) - { - win_dft = hStereoDft->win32ms; - dftOvlLen = hStereoDft->dft32ms_ovl; - - for ( i = 0; i < dftOvlLen; i++ ) - { - win_in = win_dft[STEREO_DFT32MS_STEP * i] * win_dft[STEREO_DFT32MS_STEP * i]; - win_out = 1 - win_in; - tmp = ( win_in * hStereoDft->td_gain[0] + win_out * hStereoDft->td_gain[1] ) * 0.5f * hStereoDft->hb_stefi_sig[i]; - - output[0][i] += tmp; - output[1][i] -= tmp; - } - for ( i = dftOvlLen; i < output_frame; i++ ) - { - tmp = hStereoDft->td_gain[0] * 0.5f * hStereoDft->hb_stefi_sig[i]; - output[0][i] += tmp; - output[1][i] -= tmp; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_smooth_parameters() - * - * Smooth DFT Stereo parameters - *-------------------------------------------------------------------*/ - -void ivas_sba_dirac_stereo_smooth_parameters( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD handle for upmixing */ - const int16_t cross_fade_start_offset, /* i : SPAR mixer delay compensation */ - const int32_t output_Fs, /* i : Fs for delay calculation */ - const int16_t num_md_sub_frames /* i : number of subframes in mixing matrix */ -) -{ - int16_t i, j, k, i_sf; - int16_t b; - int16_t k_offset; - float *side_gain, *prev_side_gain; - float *res_pred_gain, *prev_res_pred_gain; - - k_offset = STEREO_DFT_OFFSET; - prev_side_gain = hStereoDft->side_gain; - side_gain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; - prev_res_pred_gain = hStereoDft->res_pred_gain; - res_pred_gain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; - - if ( !hMdDec ) - { - /* Smoothing of side and prediction gains between ftrames */ - for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) - { - if ( hStereoDft->attackPresent ) - { - res_pred_gain[b] *= 0.8f; - res_pred_gain[b + STEREO_DFT_BAND_MAX] *= 0.8f; - } - else - { - side_gain[b] = hStereoDft->smooth_fac[0][b] * prev_side_gain[b] + ( 1.f - hStereoDft->smooth_fac[0][b] ) * side_gain[b]; - side_gain[b + STEREO_DFT_BAND_MAX] = hStereoDft->smooth_fac[1][b] * side_gain[b] + ( 1.f - hStereoDft->smooth_fac[1][b] ) * side_gain[b + STEREO_DFT_BAND_MAX]; - res_pred_gain[b] = hStereoDft->smooth_fac[0][b] * prev_res_pred_gain[b] + ( 1.f - hStereoDft->smooth_fac[0][b] ) * res_pred_gain[b]; - res_pred_gain[b + STEREO_DFT_BAND_MAX] = hStereoDft->smooth_fac[1][b] * res_pred_gain[b] + ( 1.f - hStereoDft->smooth_fac[1][b] ) * res_pred_gain[b + STEREO_DFT_BAND_MAX]; - } - } - } - - if ( hMdDec != 0 ) - { - float xfade_start_ns; - int16_t xfade_delay_subframes; - int16_t i_hist; - int16_t md_sf; - - xfade_start_ns = cross_fade_start_offset / (float) output_Fs * 1000000000.f - IVAS_FB_ENC_DELAY_NS; - xfade_delay_subframes = (int16_t) ( xfade_start_ns / ( FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ) ); - - i_hist = 4 - xfade_delay_subframes; - - for ( k = 0; k < 2; k++ ) - { - for ( i_sf = k * 2; i_sf < ( k + 1 ) * 2; i_sf++ ) - { - - md_sf = ( num_md_sub_frames == MAX_PARAM_SPATIAL_SUBFRAMES ) ? i_sf : 0; - - if ( hStereoDft->first_frame ) - { - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hStereoDft->mixer_mat_smooth[i][j][b + k * IVAS_MAX_NUM_BANDS] = hMdDec->mixer_mat[i][j][b]; - } - for ( ; b < IVAS_MAX_NUM_BANDS; b++ ) - { - hStereoDft->mixer_mat_smooth[i][j][b + k * IVAS_MAX_NUM_BANDS] = 0.f; - } - } - } - } - else - { - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - float beta = hStereoDft->smooth_fac[k][b]; - hStereoDft->mixer_mat_smooth[i][j][b + k * IVAS_MAX_NUM_BANDS] = - beta * hStereoDft->mixer_mat_smooth[i][j][b + k * IVAS_MAX_NUM_BANDS] + ( 1 - beta ) * hMdDec->mixer_mat_prev[i_hist][i][j][b]; - } - } - } - } - - mvr2r( hMdDec->mixer_mat_prev[1][0][0], hMdDec->mixer_mat_prev[0][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hMdDec->mixer_mat_prev[2][0][0], hMdDec->mixer_mat_prev[1][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hMdDec->mixer_mat_prev[3][0][0], hMdDec->mixer_mat_prev[2][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hMdDec->mixer_mat_prev[4][0][0], hMdDec->mixer_mat_prev[3][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hMdDec->mixer_mat_prev[4][i][j][b] = hMdDec->mixer_mat[i][j][b + md_sf * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - hStereoDft->first_frame = 0; - } - - return; -} - - -/*-------------------------------------------------------------------* - * ivas_sba_dirac_stereo_dec() - * - * Create stereo output for SBA DirAC via DFT stereo - *-------------------------------------------------------------------*/ - -void ivas_sba_dirac_stereo_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - float *output[CPE_CHANNELS], /* i/o: output synthesis signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t mcmasa /* i : McMASA flag */ -) -{ - int16_t dtx_flag, fd_cng_flag; - int16_t sba_mono_flag; - int16_t memOffset; - float tmp_buf[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - float tmp_synth[L_FRAME16k]; - float hb_gain[NB_DIV]; - float hb_synth_stereo[CPE_CHANNELS][L_FRAME48k]; - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX]; - SCE_DEC_HANDLE hSCE; - CPE_DEC_HANDLE hCPE; - STEREO_DFT_DEC_DATA_HANDLE hStereoDft; - - hSCE = st_ivas->hSCE[0]; - hCPE = st_ivas->hCPE[0]; - hStereoDft = hCPE->hStereoDft; - - if ( st_ivas->nchan_transport > 1 && !mcmasa ) - { - dtx_flag = 0; - fd_cng_flag = 0; - } - else - { - dtx_flag = ( hSCE->hCoreCoder[0]->core_brate <= SID_2k40 ); - fd_cng_flag = ( dtx_flag && hSCE->hCoreCoder[0]->cng_type == FD_CNG ); - } - sba_mono_flag = ( st_ivas->hDecoderConfig->nchan_out == 1 ) ? 1 : 0; - - memOffset = NS2SA( output_frame * FRAMES_PER_SEC, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); - - ivas_sba_dirac_stereo_config( hStereoDft->hConfig ); - hStereoDft->nbands = ivas_sba_dirac_stereo_band_config( hStereoDft->band_limits, st_ivas->hDecoderConfig->output_Fs, hStereoDft->NFFT, ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && !mcmasa ) ); - stereo_dft_dec_update( hStereoDft, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); - if ( st_ivas->nchan_transport > 1 ) - { - stereo_dft_dec_analyze( hCPE, output[0], DFT, 0, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); - stereo_dft_dec_analyze( hCPE, output[1], DFT, 1, output_frame, output_frame, DFT_STEREO_DEC_ANA_FB, 0, 0 ); - hStereoDft->core_hist[0] = hCPE->hCoreCoder[0]->core; - } - else - { - /* nrg calculation for TD Stereo Filling, as done in ICBWE which is not used in this case */ - ivas_sba_dirac_stereo_compute_td_stefi_nrgs( hStereoDft, hSCE->save_hb_synth, hSCE->hCoreCoder[0]->core, output_frame, fd_cng_flag ); - - /* do DFT Stereo core switching (including DFT analysis) here as CPE element was not available in SCE decoder */ - mvr2r( hSCE->save_synth, tmp_synth, hSCE->hCoreCoder[0]->L_frame ); - stereo_dft_dec_core_switching( hCPE, output[0] /*hSCE->save_output*/, hSCE->save_synth, hSCE->save_hb_synth, DFT, output_frame, 0, dtx_flag ); - - /* do updates here after skipping this in SCE decoder (needs to be done after core switching) */ - updt_dec_common( hSCE->hCoreCoder[0], NORMAL_HQ_CORE, -1, hSCE->save_synth ); - } - - /* mapping of DirAC parameters (azimuth, elevation, diffuseness) to DFT Stereo parameters (side gain, prediction gain) */ - map_params_dirac_to_stereo( hStereoDft, st_ivas->hQMetaData, tmp_synth, DFT[0], st_ivas->ivas_format == MC_FORMAT, - ( ( st_ivas->ivas_format != SBA_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) || mcmasa ) ? hSCE->hCoreCoder[0]->L_frame : output_frame, - ( ( st_ivas->ivas_format != SBA_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) || mcmasa ) ); - - if ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && !mcmasa ) - { - set_f( hStereoDft->res_pred_gain, 1.f, 3 * STEREO_DFT_BAND_MAX ); - } - - /* DFT Stereo upmix */ - stereo_dft_dec( hStereoDft, hCPE->hCoreCoder[0], DFT, NULL, NULL, 1 /*st_ivas->sba_dirac_stereo_flag*/, sba_mono_flag, ( st_ivas->hSpar != NULL && !mcmasa ) ? st_ivas->hSpar->hMdDec : NULL, ( st_ivas->hSpar != NULL && !mcmasa ) ? st_ivas->hSpar->hFbMixer->cross_fade_start_offset : 0, - st_ivas->hDecoderConfig->output_Fs, st_ivas->nchan_transport, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); - - /* DFT synthesis */ - stereo_dft_dec_synthesize( hCPE, DFT, 0, output[0], output_frame ); - if ( !sba_mono_flag ) - { - stereo_dft_dec_synthesize( hCPE, DFT, 1, output[1], output_frame ); - } - - synchro_synthesis( st_ivas->hDecoderConfig->ivas_total_brate, hCPE, output, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); - - // Todo use below once input is fixed not done due to complication in pointer - // synchro_synthesis_fixed_clean( st_ivas->hDecoderConfig->ivas_total_brate, hCPE, output, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/ ); - - /* output scaling */ - if ( !sba_mono_flag ) - { - v_multc( output[0], 0.5f, output[0], output_frame ); - v_multc( output[1], 0.5f, output[1], output_frame ); - } - - /* delay HB synth */ - if ( st_ivas->nchan_transport == 1 ) - { - mvr2r( hSCE->save_hb_synth + output_frame - memOffset, tmp_buf, memOffset ); - mvr2r( hSCE->save_hb_synth, hSCE->save_hb_synth + memOffset, output_frame - memOffset ); - mvr2r( hSCE->prev_hb_synth, hSCE->save_hb_synth, memOffset ); - mvr2r( tmp_buf, hSCE->prev_hb_synth, memOffset ); - } - - if ( ( hCPE->hCoreCoder[0]->core == ACELP_CORE || hCPE->hCoreCoder[0]->last_core == ACELP_CORE ) && !fd_cng_flag && st_ivas->nchan_transport == 1 ) - { - /* upmix ACELP BWE */ - ivas_sba_dirac_stereo_compute_hb_gain( hStereoDft, hb_gain ); - - ivas_sba_dirac_stereo_upmix_hb( hb_synth_stereo, hSCE->save_hb_synth, hb_gain, output_frame, ( ( st_ivas->ivas_format != SBA_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) || mcmasa ), sba_mono_flag, hSCE->hCoreCoder[0]->bwidth, hStereoDft ); - - /* add HB to ACELP core */ - v_add( output[0], hb_synth_stereo[0], output[0], output_frame ); - if ( !sba_mono_flag ) - { - v_add( output[1], hb_synth_stereo[1], output[1], output_frame ); - - /* apply TD Stereo Filling as is done in ICBWE */ - ivas_sba_dirac_stereo_apply_td_stefi( hStereoDft, output, output_frame, ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && !mcmasa ) ); - } - } - - /* reset the other channels to 0 (they are not used since here) */ - for ( int16_t ch = CPE_CHANNELS; ch < st_ivas->nchan_transport; ch++ ) - { - set_zero( output[ch], output_frame ); - } - - return; -} - -#endif diff --git a/lib_dec/ivas_sba_dirac_stereo_dec_fx.c b/lib_dec/ivas_sba_dirac_stereo_dec_fx.c index 787646041..75e0156d8 100644 --- a/lib_dec/ivas_sba_dirac_stereo_dec_fx.c +++ b/lib_dec/ivas_sba_dirac_stereo_dec_fx.c @@ -42,7 +42,6 @@ #include "ivas_rom_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #define SIN_NEG_30_DEGREES_Q15 ( (Word16) 0xC000 ) #define SIN_30_DEGREES_Q15 ( (Word16) 0x4000 ) @@ -1410,4 +1409,3 @@ void ivas_sba_dirac_stereo_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index a38a6f3b2..7cc1ebbb6 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -39,10 +39,8 @@ #include "ivas_cnst.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -53,74 +51,6 @@ * SBA signals transformed into MC in CLDFB domain *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_sba2mc_cldfb( - IVAS_OUTPUT_SETUP hInSetup, /* i : Format of input layout */ - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb real part */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb imag part */ - const int16_t nb_channels_out, /* i : nb of output channels */ - const int16_t nb_bands, /* i : nb of CLDFB bands to process */ - const int16_t nb_timeslots, /* i : number of time slots to process */ - const float *hoa_dec_mtx /* i : HOA decoding mtx */ -) -{ - int16_t iBlock, iBand, n, m; - float realOut[16][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX], imagOut[16][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; - float g; - float *p_real, *p_imag, *p_realOut, *p_imagOut; - int16_t nb_channels_in; - - push_wmops( "ivas_sba2mc_cldfb" ); - nb_channels_in = hInSetup.nchan_out_woLFE; - assert( ( nb_channels_in == 16 ) && ( nb_channels_out == 11 ) && "ivas_sba2mc_cldfb; only HOA3 to CICP19 is for now supported!" ); - - for ( n = 0; n < nb_channels_out; n++ ) - { - set_zero( realOut[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_bands ); - set_zero( imagOut[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_bands ); - - for ( m = 0; m < nb_channels_in; m++ ) - { - g = hoa_dec_mtx[SBA_NHARM_HOA3 * n + m]; - p_realOut = realOut[n]; - p_imagOut = imagOut[n]; - - for ( iBlock = 0; iBlock < nb_timeslots; iBlock++ ) - { - p_real = RealBuffer[m][iBlock]; - p_imag = ImagBuffer[m][iBlock]; - for ( iBand = 0; iBand < nb_bands; iBand++ ) - { - *p_realOut = *p_realOut + g * *( p_real++ ); - *p_imagOut = *p_imagOut + g * *( p_imag++ ); - p_realOut++; - p_imagOut++; - } - } - } - } - - for ( n = 0; n < nb_channels_out; n++ ) - { - p_realOut = realOut[n]; - p_imagOut = imagOut[n]; - - for ( iBlock = 0; iBlock < nb_timeslots; iBlock++ ) - { - p_real = RealBuffer[n][iBlock]; - p_imag = ImagBuffer[n][iBlock]; - for ( iBand = 0; iBand < nb_bands; iBand++ ) - { - *( p_real++ ) = *p_realOut++; - *( p_imag++ ) = *p_imagOut++; - } - } - } - - pop_wmops(); - return; -} -#else void ivas_sba2mc_cldfb_fixed( IVAS_OUTPUT_SETUP hInSetup, /* i : Format of input layout */ Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: cldfb real part (Q_real) */ @@ -192,7 +122,6 @@ void ivas_sba2mc_cldfb_fixed( pop_wmops(); return; } -#endif /*-------------------------------------------------------------------------* * ivas_mc2sba() @@ -200,7 +129,6 @@ void ivas_sba2mc_cldfb_fixed( * MC signals transformed into SBA in TD domain *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mc2sba_fx( IVAS_OUTPUT_SETUP hIntSetup, /* i : Format of decoder output */ Word32 *in_buffer_td_fx[], @@ -284,83 +212,6 @@ void ivas_mc2sba_fx( return; } -#else -void ivas_mc2sba( - IVAS_OUTPUT_SETUP hIntSetup, /* i : Format of decoder output */ - float *in_buffer_td[], /* i : MC signals (on input) and the HOA3 (on output) */ - float *buffer_td[], /* i/o: MC signals (on input) and the HOA3 (on output) */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const float gain_lfe /* i : gain for LFE, 0 = ignore LFE */ -) -{ - int16_t i, j, k; - int16_t idx_lfe, idx_in; - float buffer_tmp[16][L_FRAME48k]; - float gains[16]; - int16_t azimuth, elevation; - int16_t sba_num_chans; - - assert( ( sba_order <= 3 ) && "Only order up to 3 is supported!" ); - /* Init*/ - sba_num_chans = ( sba_order + 1 ) * ( sba_order + 1 ); - for ( j = 0; j < sba_num_chans; j++ ) - { - set_zero( buffer_tmp[j], output_frame ); - } - - /* HOA encoding*/ - idx_lfe = 0; - idx_in = 0; - for ( i = 0; i < hIntSetup.nchan_out_woLFE + hIntSetup.num_lfe; i++ ) - { - if ( ( hIntSetup.num_lfe > 0 ) && ( i == hIntSetup.index_lfe[idx_lfe] ) ) - { - if ( gain_lfe > 0.f ) - { - /* Add LFE to omni W with gain*/ - for ( k = 0; k < output_frame; k++ ) - { - buffer_tmp[0][k] += gain_lfe * in_buffer_td[i][k]; - } - } - - if ( idx_lfe < ( hIntSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - azimuth = (int16_t) ( hIntSetup.ls_azimuth[idx_in] ); - elevation = (int16_t) ( hIntSetup.ls_elevation[idx_in] ); - idx_in++; - - /* get HOA response for direction (ACN/SN3D)*/ - ivas_dirac_dec_get_response( - azimuth, - elevation, - gains, - sba_order ); - - for ( j = 0; j < sba_num_chans; j++ ) - { - for ( k = 0; k < output_frame; k++ ) - { - buffer_tmp[j][k] += gains[j] * in_buffer_td[i][k]; - } - } - } - } - - for ( j = 0; j < sba_num_chans; j++ ) - { - mvr2r( buffer_tmp[j], buffer_td[j], output_frame ); - } - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -369,7 +220,6 @@ void ivas_mc2sba( * MC signals transformed into SBA in CLDFB domain * used for binaural rendering with head rotation *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_mc2sba_cldfb_fx( IVAS_OUTPUT_SETUP hTransSetup, /* i : transported MC Format */ Word32 *hoa_encoder_fx, /* i : HOA3 encoder for the transported MC format Q31*/ @@ -446,77 +296,6 @@ void ivas_param_mc_mc2sba_cldfb_fx( return; } -#else - -void ivas_param_mc_mc2sba_cldfb( - IVAS_OUTPUT_SETUP hTransSetup, /* i : transported MC Format */ - float *hoa_encoder, /* i : HOA3 encoder for the transported MC format */ - const int16_t slot_idx, /* i : current slot in the subframe */ - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: Contains the MC signals (on input) and the HOA3 (on output) */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: Contains the MC signals (on input) and the HOA3 (on output) */ - const int16_t nBands, /* i : number of synth CLDFB bands */ - const float gain_lfe /* i : gain applied to LFE */ -) -{ - int16_t idx_ch, idx_band; - int16_t idx_lfe, idx_in, idx_out; - float Cldfb_RealBuffer_tmp[MAX_INTERN_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_tmp[MAX_INTERN_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float *gains; - int16_t sba_num_chans; - - /* Init*/ - sba_num_chans = MAX_INTERN_CHANNELS; - - for ( idx_ch = 0; idx_ch < sba_num_chans; idx_ch++ ) - { - set_zero( Cldfb_RealBuffer_tmp[idx_ch], CLDFB_NO_CHANNELS_MAX ); - set_zero( Cldfb_ImagBuffer_tmp[idx_ch], CLDFB_NO_CHANNELS_MAX ); - } - - idx_lfe = 0; - idx_in = 0; - for ( idx_ch = 0; idx_ch < hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; idx_ch++ ) - { - if ( ( hTransSetup.num_lfe > 0 ) && ( idx_ch == hTransSetup.index_lfe[idx_lfe] ) ) - { - if ( gain_lfe > 0.f ) - { - /* Add LFE to Omni Channel i.e. W (Just first Band) */ - Cldfb_RealBuffer_tmp[0][0] += gain_lfe * Cldfb_RealBuffer[idx_ch][slot_idx][0]; - Cldfb_ImagBuffer_tmp[0][0] += gain_lfe * Cldfb_ImagBuffer[idx_ch][slot_idx][0]; - } - if ( idx_lfe < ( hTransSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - gains = hoa_encoder + idx_in * sba_num_chans; - for ( idx_out = 0; idx_out < sba_num_chans; idx_out++ ) - { - for ( idx_band = 0; idx_band < nBands; idx_band++ ) - { - Cldfb_RealBuffer_tmp[idx_out][idx_band] += ( *gains ) * Cldfb_RealBuffer[idx_ch][slot_idx][idx_band]; - Cldfb_ImagBuffer_tmp[idx_out][idx_band] += ( *gains ) * Cldfb_ImagBuffer[idx_ch][slot_idx][idx_band]; - } - gains++; - } - idx_in++; - } - } - - for ( idx_ch = 0; idx_ch < sba_num_chans; idx_ch++ ) - { - mvr2r( Cldfb_RealBuffer_tmp[idx_ch], Cldfb_RealBuffer[idx_ch][slot_idx], nBands ); - mvr2r( Cldfb_ImagBuffer_tmp[idx_ch], Cldfb_ImagBuffer[idx_ch][slot_idx], nBands ); - } - - return; -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_sba_remapTCs() @@ -525,7 +304,6 @@ void ivas_param_mc_mc2sba_cldfb( *-------------------------------------------------------------------*/ /*! r: SBA DirAC stereo flag */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_sba_remapTCs_fx( Word32 *sba_data_fx[], /* i/o: SBA signals Q11*/ Decoder_Struct *st_ivas, /* i/o: decoder struct */ @@ -568,58 +346,12 @@ Word16 ivas_sba_remapTCs_fx( } return ( nchan_remapped ); } -#else -int16_t ivas_sba_remapTCs( - float *sba_data[], /* i/o: SBA signals */ - Decoder_Struct *st_ivas, /* i/o: decoder struct */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t nchan_remapped; - - - nchan_remapped = st_ivas->nchan_transport; - if ( nchan_remapped == 3 ) - { - - nchan_remapped++; - - if ( nchan_remapped == 4 ) - { - /*For planar A-format channel 2 and 3 are identical -> Z=0*/ - mvr2r( sba_data[2], sba_data[3], output_frame ); - } - } - - if ( st_ivas->nchan_transport >= 3 ) - { - int16_t i = 0; - float temp; - - /*convert WYXZ downmix to WYZX*/ - for ( i = 0; i < output_frame; i++ ) - { - temp = sba_data[2][i]; - sba_data[2][i] = sba_data[3][i]; - sba_data[3][i] = temp; - if ( st_ivas->nchan_transport == 3 ) - { - sba_data[2][i] = 0; - } - } - } - - return ( nchan_remapped ); -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* * ivas_ism2sba_sf() * * ISM transformed into SBA in TD domain. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism2sba_sf_fx( Word32 *buffer_in_fx[], /* i : TC buffer */ /*Q_buffer_in*/ @@ -673,65 +405,12 @@ void ivas_ism2sba_sf_fx( } return; } -#else // IVAS_FLOAT_FIXED - -void ivas_ism2sba_sf( - float *buffer_in[], /* i : TC buffer */ - float *buffer_out[], /* o : TD signal buffers */ - ISM_RENDERER_HANDLE hIsmRendererData, /* i/o: renderer data */ - const int16_t num_objects, /* i : number of objects */ - const int16_t n_samples_to_render, /* i : output frame length per channel */ - const int16_t offset, /* i : offset for the interpolatr */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - int16_t i, j, k; - float g1, *g2, *tc, *out, gain, prev_gain; - float buffer_tmp[HOA3_CHANNELS][L_FRAME48k]; // VE2SB: TBV - int16_t sba_num_chans; - - assert( ( sba_order <= 3 ) && "Only order up to 3 is supported!" ); - assert( hIsmRendererData != NULL && "hIsmRendererData not allocated!" ); - - /* Init*/ - sba_num_chans = ( sba_order + 1 ) * ( sba_order + 1 ); - for ( j = 0; j < sba_num_chans; j++ ) - { - set_zero( buffer_tmp[j], n_samples_to_render ); - } - - for ( i = 0; i < num_objects; i++ ) - { - for ( j = 0; j < sba_num_chans; j++ ) - { - g2 = hIsmRendererData->interpolator + offset; - tc = buffer_in[i] + offset; - out = buffer_tmp[j]; - gain = hIsmRendererData->gains[i][j]; - prev_gain = hIsmRendererData->prev_gains[i][j]; - for ( k = 0; k < n_samples_to_render; k++ ) - { - g1 = 1.0f - *g2; - *( out++ ) += ( ( *( g2++ ) ) * gain + g1 * prev_gain ) * ( *( tc++ ) ); - } - } - } - - for ( j = 0; j < sba_num_chans; j++ ) - { - mvr2r( buffer_tmp[j], buffer_out[j], n_samples_to_render ); - } - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_sba_linear_renderer() * * Linear rendering for SBA format *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*TODO: To be tested*/ /************************ Float to fixed conversion required for:output_f @@ -794,69 +473,12 @@ ivas_error ivas_sba_linear_renderer_fx( return error; } -#else -ivas_error ivas_sba_linear_renderer( - float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nchan_in, /* i : number of input ambisonics channels */ - const int16_t nchan_ism, /* i : number of objects */ - const AUDIO_CONFIG output_config, /* i : output audio configuration */ - const IVAS_OUTPUT_SETUP output_setup /* i : output format setup */ -) -{ - int16_t i; - int16_t nchan_hoa; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Number of channels of HOA depends of transport format which is mixed order xH1V*/ - nchan_hoa = nchan_in; - - if ( nchan_in == 6 ) /*2H1V*/ - { - nchan_hoa = 9; - } - else if ( nchan_in == 8 ) /*3H1V*/ - { - nchan_hoa = 16; - } - - switch ( output_config ) - { - case IVAS_AUDIO_CONFIG_FOA: /* Ambisonics output, order: 1 */ - case IVAS_AUDIO_CONFIG_HOA2: /* Ambisonics output, order: 2 */ - case IVAS_AUDIO_CONFIG_HOA3: /* Ambisonics output, order: 3 */ - for ( i = nchan_hoa; i < output_setup.nchan_out_woLFE; i++ ) - { - set_zero( output_f[i], output_frame ); - } - break; - case IVAS_AUDIO_CONFIG_EXTERNAL: - for ( i = output_setup.nchan_out_woLFE - 1; i >= nchan_ism; i-- ) - { - mvr2r( output_f[i - nchan_ism], output_f[i], output_frame ); - } - for ( ; i >= 0; i-- ) - { - set_zero( output_f[i], output_frame ); - } - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: illegal output configuration, Exiting.\n" ); - } - - return error; -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_sba_mix_matrix_determiner() * * Determine SBA mixing matrices *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_sba_mix_matrix_determiner_fx( SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ Word32 *output_fx[], /* i/o: transport/output audio channels Q_output*/ @@ -921,61 +543,3 @@ void ivas_sba_mix_matrix_determiner_fx( ivas_spar_dec_gen_umx_mat_fx( hSpar->hMdDec, nchan_transport, num_bands_out, bfi, num_md_sub_frames ); return; } - -#else - -void ivas_sba_mix_matrix_determiner( - SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ - float *output[], /* i/o: transport/output audio channels */ - const int16_t bfi, /* i : BFI flag */ - const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ - const int16_t output_frame, /* i : output frame length */ - const int16_t num_md_sub_frames /* i : number of subframes in mixing matrix*/ -) -{ - int16_t i, ch; - float temp; - int16_t num_bands_out, nchan_transport, nchan_out; - - /* Convert numeric range */ - for ( ch = 0; ch < nchan_remapped; ch++ ) - { - for ( i = 0; i < output_frame; i++ ) - { - temp = output[ch][i]; - temp = floorf( temp + 0.5f ); - - if ( temp > MAX16B_FLT ) - { - temp = MAX16B_FLT; - } - else if ( temp < ( -1.0f * PCM16_TO_FLT_FAC ) ) - { - temp = ( -1.0f * PCM16_TO_FLT_FAC ); - } - temp *= ( 1.0f / PCM16_TO_FLT_FAC ); - output[ch][i] = temp; - } - } - - /* AGC */ - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - nchan_out = nchan_transport; - ivas_agc_dec_process( hSpar->hAgcDec, output, output, nchan_transport, output_frame ); - - /* Convert numeric range back */ - for ( ch = 0; ch < nchan_out; ch++ ) - { - for ( i = 0; i < output_frame; i++ ) - { - output[ch][i] = output[ch][i] * PCM16_TO_FLT_FAC; - } - } - - /* Mixing matrix determiner */ - num_bands_out = hSpar->hFbMixer->pFb->filterbank_num_bands; - ivas_spar_dec_gen_umx_mat( hSpar->hMdDec, nchan_transport, num_bands_out, bfi, num_md_sub_frames ); - - return; -} -#endif diff --git a/lib_dec/ivas_sce_dec.c b/lib_dec/ivas_sce_dec.c index c2b77519f..0bee68afb 100644 --- a/lib_dec/ivas_sce_dec.c +++ b/lib_dec/ivas_sce_dec.c @@ -41,404 +41,3 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * ivas_sce_dec() - * - * Single Channel Element (SCE) decoding routine - *--------------------------------------------------------------------------*/ - -ivas_error ivas_sce_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t sce_id, /* i : SCE # identifier */ - float *output[1], /* o : output synthesis signal */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - float outputHB[1][L_FRAME48k]; /* 'float' buffer for output HB synthesis, one channel */ - SCE_DEC_HANDLE hSCE; - Decoder_State *st; - int32_t ivas_total_brate, last_ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - - push_wmops( "ivas_sce_dec" ); - - hSCE = st_ivas->hSCE[sce_id]; - st = hSCE->hCoreCoder[0]; - - st->BER_detect |= st_ivas->BER_detect; - - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; - - if ( st_ivas->ivas_format == ISM_FORMAT ) - { - st->cng_type = FD_CNG; - } - - /*------------------------------------------------------------------* - * Read audio bandwidth info - *-----------------------------------------------------------------*/ - - /* set total_brate - needed in DTX */ - if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - st->total_brate = ivas_total_brate - nb_bits_metadata * FRAMES_PER_SEC; - assert( st->total_brate == SID_2k40 && "SCE SID must be 2.4kbps!" ); - - if ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->hISMDTX.sce_id_dtx != sce_id ) - { - st->total_brate = FRAME_NO_DATA; - } - } - else if ( !st_ivas->bfi && ivas_total_brate == FRAME_NO_DATA ) - { - st->total_brate = FRAME_NO_DATA; - } - else if ( !st_ivas->bfi && st_ivas->ivas_format != ISM_FORMAT && last_ivas_total_brate <= IVAS_SID_5k2 ) - { - st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; - } - - /* read the bandwidth */ - if ( st_ivas->bfi || st->total_brate <= SID_2k40 ) - { - /* BFI or SID/NO_DATA frame -> do nothing */ - } - else - { - if ( st->low_rate_mode ) - { - /* ISM Low-rate mode -> always WB */ - st->bwidth = WB; - } - else if ( hSCE->element_brate < MIN_BRATE_SWB_SCE ) - { - /* only WB is supported */ - st->bwidth = WB; - } - else if ( ( hSCE->element_brate < MIN_BRATE_FB_STEREO && !st->is_ism_format ) || - ( hSCE->element_brate < MIN_BRATE_FB_ISM && st->is_ism_format ) ) - { - /* WB and SWB are supported */ - st->bwidth = get_next_indice( st, 1 ) + WB; - } - else - { - /* WB, SWB and FB are supported */ - st->bwidth = get_next_indice( st, NBITS_BWIDTH ); - } - } - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - st->idchan = 0; - st->element_mode = IVAS_SCE; - - /* Force to MODE1 in IVAS */ - st->codec_mode = MODE1; - - /* set "bits_frame_nominal" */ - if ( ( st_ivas->hQMetaData != NULL ) && - ( st_ivas->ivas_format != SBA_FORMAT ) ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); - } - else if ( ( st_ivas->mc_mode == MC_MODE_MCMASA && ivas_total_brate >= MCMASA_SEPARATE_BRATE ) || ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) - { - st->bits_frame_nominal = (int16_t) ( hSCE->element_brate / FRAMES_PER_SEC ); - } - else if ( st_ivas->ism_mode == ISM_MODE_NONE && st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->core_nominal_brate / FRAMES_PER_SEC ); - } - else - { - st->bits_frame_nominal = st_ivas->hQMetaData->bits_frame_nominal; - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT ) - { - st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->core_nominal_brate / FRAMES_PER_SEC ); - } - else - { - st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); - } - - - /* set "total_brate" */ - if ( !st_ivas->bfi && ivas_total_brate == IVAS_SID_5k2 ) - { - st->total_brate = ivas_total_brate - nb_bits_metadata * FRAMES_PER_SEC; - - if ( st_ivas->ivas_format == ISM_FORMAT && st_ivas->hISMDTX.sce_id_dtx != sce_id ) - { - st->total_brate = FRAME_NO_DATA; - } - } - else if ( !st_ivas->bfi && ivas_total_brate == FRAME_NO_DATA ) - { - st->total_brate = ivas_total_brate; - } - else if ( !st_ivas->bfi && st_ivas->ivas_format != ISM_FORMAT && st_ivas->ivas_format != MASA_ISM_FORMAT ) /* note: in ISMs, total_brate[] is set in ivas_ism_config() */ - { - st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - /* set ACELP12k8 / ACELP16k flag for flexible ACELP core */ - if ( ( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) && - st->low_rate_mode && !( st->total_brate == SID_2k40 || st->total_brate == FRAME_NO_DATA ) ) - { - st->flag_ACELP16k = 0; - } - else - { - st->flag_ACELP16k = set_ACELP_flag_IVAS( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); - } - - if ( is_DTXrate( ivas_total_brate ) ) - { - st->VAD = 0; - } - else - { - st->VAD = 1; - } - - if ( st->VAD && hSCE->element_brate <= CNA_MAX_BRATE ) - { - st->flag_cna = 1; - } - else if ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) && hSCE->element_brate <= ACELP_32k ) - { - st->flag_cna = 1; - } - else - { - st->flag_cna = 0; - } - - /*----------------------------------------------------------------* - * Decoder - *----------------------------------------------------------------*/ - - if ( ( error = ivas_core_dec( st_ivas, hSCE, NULL, NULL, 1, output, outputHB, NULL, st_ivas->sba_dirac_stereo_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->sba_dirac_stereo_flag && ( st->core_brate > SID_2k40 || st->cng_type == LP_CNG ) ) - { - /* skip addition of ACELP BWE for now, will be done after upmix */ - mvr2r( outputHB[0], hSCE->save_hb_synth, output_frame ); - } - else if ( !st_ivas->sba_dirac_stereo_flag ) - { - int32_t output_Fs; - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - - /*----------------------------------------------------------------* - * LB synthesis synchronization between IVAS formats - *----------------------------------------------------------------*/ - - delay_signal_float( output[0], output_frame, st->prev_synth_buffer, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ) ); - - /*----------------------------------------------------------------* - * HB synthesis synchronization between IVAS formats - *----------------------------------------------------------------*/ - - delay_signal_float( outputHB[0], output_frame, hSCE->prev_hb_synth, NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); - - /*----------------------------------------------------------------* - * output LB and HB mix - *----------------------------------------------------------------*/ - - v_add( output[0], outputHB[0], output[0], output_frame ); - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - hSCE->last_element_brate = hSCE->element_brate; - - st_ivas->BER_detect |= st->BER_detect; - - - pop_wmops(); - return error; -} - - -/*------------------------------------------------------------------------- - * create_sce_dec() - * - * Create, allocate and initialize IVAS decoder SCE handle - *-------------------------------------------------------------------------*/ - -ivas_error create_sce_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const Word16 sce_id, /* i : SCE # identifier */ - const Word32 element_brate /* i : element bitrate */ -) -{ - SCE_DEC_HANDLE hSCE; - Decoder_State *st; - ivas_error error; - Word16 output_frame; - - error = IVAS_ERR_OK; - output_frame = (Word16) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - - /*-----------------------------------------------------------------* - * Allocate SCE handle - *-----------------------------------------------------------------*/ - - IF( ( hSCE = (SCE_DEC_HANDLE) malloc( sizeof( SCE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialization - general parameters - *-----------------------------------------------------------------*/ - - hSCE->sce_id = sce_id; - hSCE->element_brate = element_brate; - - set_f( hSCE->prev_hb_synth, 0.0f, NS2SA( st_ivas->hDecoderConfig->output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); - - /*-----------------------------------------------------------------* - * Core Coder, 1 instance: allocate and initialize - *-----------------------------------------------------------------*/ - - // if ( ( st = (DEC_CORE_HANDLE) calloc( sizeof( Decoder_State ) ) ) == NULL ) - IF( ( st = (Decoder_State *) calloc( 1, sizeof( Decoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - - copy_decoder_config( st_ivas, st ); - - st->total_brate = hSCE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - st->is_ism_format = 0; - IF( st_ivas->ivas_format == ISM_FORMAT || st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - st->is_ism_format = 1; - } -#ifndef IVAS_FLOAT_FIXED - IF( ( error = init_decoder( st, 0, st_ivas->mc_mode ) ) != IVAS_ERR_OK ) -#else - if ( ( error = init_decoder_fx( st, EVS_MONO ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - - IF( st_ivas->ivas_format == SBA_FORMAT && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO && st_ivas->nchan_transport == 1 ) ) ) - { - IF( ( error = openCldfb_ivas( &st->cldfbSynHB, CLDFB_SYNTHESIS, st->output_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - ELSE - { - st->cldfbSynHB = NULL; - } - - /* allocate and initialize "hTdCngDec" - needed in DTX */ - IF( sce_id == 0 && st->hTdCngDec == NULL ) - { - IF( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); - } - - td_cng_dec_init( st ); - } - - /*-----------------------------------------------------------------* - * Synthesis buffers: allocate and initialize - *-----------------------------------------------------------------*/ - - IF( st_ivas->sba_dirac_stereo_flag ) - { - IF( ( hSCE->save_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo output\n" ) ); - } - set_zero( hSCE->save_synth, output_frame ); - - IF( ( hSCE->save_hb_synth = (float *) malloc( sizeof( float ) * output_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate HB memory for stereo output\n" ) ); - } - set_zero( hSCE->save_hb_synth, output_frame ); - } - ELSE - { - hSCE->save_synth = NULL; - hSCE->save_hb_synth = NULL; - } - - hSCE->hCoreCoder[0] = st; - st_ivas->hSCE[sce_id] = hSCE; - - return error; -} - - -/*------------------------------------------------------------------------- - * destroy_sce_dec() - * - * Destroy and deallocate IVAS decoder SCE handle - *-------------------------------------------------------------------------*/ - -void destroy_sce_dec( - SCE_DEC_HANDLE hSCE /* i/o: SCE decoder structure */ -) -{ - Decoder_State *st; - - st = hSCE->hCoreCoder[0]; - - IF( st != NULL ) - { - destroy_core_dec( st ); - - free( st ); - st = NULL; - } - - IF( hSCE->save_synth != NULL ) - { - free( hSCE->save_synth ); - hSCE->save_synth = NULL; - } - IF( hSCE->save_hb_synth != NULL ) - { - free( hSCE->save_hb_synth ); - hSCE->save_hb_synth = NULL; - } - - free( hSCE ); - - return; -} -#endif // !IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_sce_dec_fx.c b/lib_dec/ivas_sce_dec_fx.c index 19058c9c9..6c22b3a98 100644 --- a/lib_dec/ivas_sce_dec_fx.c +++ b/lib_dec/ivas_sce_dec_fx.c @@ -33,7 +33,6 @@ #include #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "cnst.h" #include "ivas_cnst.h" #include "rom_com.h" @@ -534,4 +533,3 @@ void destroy_sce_dec( return; } -#endif diff --git a/lib_dec/ivas_sns_dec.c b/lib_dec/ivas_sns_dec.c index fdc1a31de..7823d2f7c 100644 --- a/lib_dec/ivas_sns_dec.c +++ b/lib_dec/ivas_sns_dec.c @@ -39,263 +39,3 @@ #include "ivas_cnst.h" #include #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * sns_1st_dec() - * - * - *-------------------------------------------------------------------*/ - -static void sns_1st_dec( - const int16_t index, /* i : codebook index */ - const int16_t core, - const int16_t L_frame, - float *snsq /* i/o: i:prediction o:quantized sns */ -) -{ - int16_t i; - const int16_t *p_dico, *means; - const float cdbk_fix2float = 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ); - const float means_fix2float = 1.f / powf( 2, SNS_MEANS_BITS_4_FRAC ); - - means = NULL; - switch ( L_frame ) - { - case L_FRAME16k: - means = &sns_1st_means_16k[core - 1][0]; - break; - case L_FRAME25_6k: - means = &sns_1st_means_25k6[core - 1][0]; - break; - case L_FRAME32k: - means = &sns_1st_means_32k[core - 1][0]; - break; - default: - assert( !"illegal frame length in sns_1st_cod" ); - } - - - p_dico = &sns_1st_cdbk[0][core - 1][0] + ( index % 32 ) * ( M / 2 ); - - for ( i = 0; i < M / 2; i++ ) - { - snsq[i] = ( *p_dico++ ) * cdbk_fix2float + means[i] * means_fix2float; - } - - p_dico = &sns_1st_cdbk[1][core - 1][0] + ( index >> 5 ) * ( M / 2 ); - - for ( i = M / 2; i < M; i++ ) - { - snsq[i] = ( *p_dico++ ) * cdbk_fix2float + means[i] * means_fix2float; - } - - return; -} - - -/*------------------------------------------------------------------- - * sns_2st_dec() - * - * - *-------------------------------------------------------------------*/ - -static void sns_2st_dec( - float *snsq, /* i/o: i:1st stage o:1st+2nd stage */ - int16_t *indx /* i : index[] (4 bits per words) */ -) -{ - int16_t i; - int16_t xq[M]; - float scale = 1.0f / 2.5f; - - /* quantize */ - AVQ_dec_lpc_ivas( indx, xq, 2 ); - - for ( i = 0; i < M; i++ ) - { - snsq[i] += scale * (float) xq[i]; - } - - return; -} - - -/*------------------------------------------------------------------- - * sns_avq_dec() - * - * Stereo noise-shaping AVQ decoder for 1 channel - *-------------------------------------------------------------------*/ - -void sns_avq_dec( - int16_t *index, /* i : Quantization indices */ - float SNS_Q[NB_DIV][M], /* o : Quantized SNS vectors */ - const int16_t L_frame, /* i : frame length */ - const int16_t numlpc /* i : Number of sets of lpc */ -) -{ - int16_t i, nbi, last; - int16_t q_type; - - /* go from one-based indexing to zero-based indexing */ - last = numlpc - 1; - - index++; - - /* Decode last LPC */ - sns_1st_dec( *index++, numlpc, L_frame, SNS_Q[last] ); - sns_2st_dec( SNS_Q[last], index ); - nbi = 2 + index[0] + index[1]; - index += nbi; - - /* Decode intermediate LPC (512 framing) */ - if ( numlpc == 2 ) - { - q_type = *index++; - - if ( q_type == 0 ) - { - sns_1st_dec( *index++, numlpc, L_frame, SNS_Q[0] ); - sns_2st_dec( SNS_Q[0], index ); - } - else if ( q_type == 1 ) - { - for ( i = 0; i < M; i++ ) - { - SNS_Q[0][i] = SNS_Q[1][i]; - } - sns_2st_dec( SNS_Q[0], index ); - } - } - - return; -} - - -/*------------------------------------------------------------------- - * sns_avq_dec_stereo() - * - * Stereo noise-shaping AVQ decoder for 21 channels - *-------------------------------------------------------------------*/ - -void sns_avq_dec_stereo( - int16_t *indexl, /* i : Quantization indices (left channel) */ - int16_t *indexr, /* i : Quantization indices (right channe) */ - const int16_t L_frame, /* i : frame length */ - float *SNS_Ql, /* o : Quantized SNS vectors (left channel) */ - float *SNS_Qr /* o : Quantized SNS vectors (right channe) */ -) -{ - int16_t i, stereo_mode; - float mid_q[M], side_q[M]; - - stereo_mode = *indexl++; - indexr++; - - if ( stereo_mode == 2 ) - { - /* MS coding */ - sns_1st_dec( *indexl++, TCX_20_CORE, L_frame, mid_q ); - sns_2st_dec( mid_q, indexl ); - - for ( i = 0; i < M; i++ ) - { - side_q[i] = 0.f; - } - - if ( *indexr++ == -1 ) - { - sns_2st_dec( side_q, indexr ); - } - - for ( i = 0; i < M; i++ ) - { - SNS_Ql[i] = mid_q[i] + side_q[i] * 0.5f; - SNS_Qr[i] = mid_q[i] - side_q[i] * 0.5f; - } - } - else - { - /* LR decoding */ - sns_1st_dec( *indexl++, TCX_20_CORE, L_frame, SNS_Ql ); - sns_2st_dec( SNS_Ql, indexl ); - - sns_1st_dec( *indexr++, TCX_20_CORE, L_frame, SNS_Qr ); - sns_2st_dec( SNS_Qr, indexr ); - } - - return; -} - - -/*------------------------------------------------------------------- - * dequantize_sns() - * - * Dequantize SNS - *-------------------------------------------------------------------*/ - -void dequantize_sns( - int16_t indices[CPE_CHANNELS][NPRM_LPC_NEW], - float snsQ_out[CPE_CHANNELS][NB_DIV][M], - Decoder_State **sts ) -{ - int16_t nSubframes, k, ch; - int16_t sns_stereo_mode[NB_DIV]; - int16_t zero_side_flag[NB_DIV]; - Decoder_State *st; - - sns_stereo_mode[0] = indices[0][0]; - sns_stereo_mode[1] = indices[0][1]; - zero_side_flag[0] = indices[0][2]; - zero_side_flag[1] = indices[0][3]; - - for ( ch = 0; ch < CPE_CHANNELS; ++ch ) - { - int16_t idxIndices; - - st = sts[ch]; - nSubframes = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - idxIndices = 0; - - for ( k = 0; k < nSubframes; ++k ) - { - const int16_t is_side = ch == 1 && sns_stereo_mode[k] == SNS_STEREO_MODE_MS; - const float *const *cdbks = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20 : ivas_sns_cdbks_tcx10; - int16_t nStages = ( ( nSubframes == 1 ) ? SNS_MSVQ_NSTAGES_TCX20 : SNS_MSVQ_NSTAGES_TCX10 ); - float *snsQ = snsQ_out[ch][k]; - - if ( is_side ) - { - const float *const *side_cdbks = ( st->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20 : ivas_sns_cdbks_side_tcx10; - if ( zero_side_flag[k] ) - { - set_zero( snsQ, M ); - continue; - } - - nStages = SNS_MSVQ_NSTAGES_SIDE; - msvq_dec_float( side_cdbks, NULL, NULL, nStages, M, M, &indices[ch][idxIndices + SNS_STEREO_MODE_OFFSET_INDICES], 0, NULL, snsQ, NULL ); - } - else - { - msvq_dec_float( cdbks, NULL, NULL, nStages, M, M, &indices[ch][idxIndices + SNS_STEREO_MODE_OFFSET_INDICES], 0, NULL, snsQ, NULL ); - } - idxIndices += nStages; - } - } - - if ( sns_stereo_mode[0] == SNS_STEREO_MODE_MS || sns_stereo_mode[1] == SNS_STEREO_MODE_MS ) - { - nSubframes = ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV; - for ( k = 0; k < nSubframes; ++k ) - { - if ( sns_stereo_mode[k] == SNS_STEREO_MODE_MS ) - { - inverseMS( M, snsQ_out[0][k], snsQ_out[1][k], 1.f ); - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_sns_dec_fx.c b/lib_dec/ivas_sns_dec_fx.c index a2ca9f3c2..0451aad08 100644 --- a/lib_dec/ivas_sns_dec_fx.c +++ b/lib_dec/ivas_sns_dec_fx.c @@ -39,7 +39,6 @@ #include "ivas_cnst.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" @@ -410,4 +409,3 @@ void dequantize_sns_fx( return; } -#endif diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 6089012bc..8d8df9e86 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -44,10 +44,8 @@ #include "ivas_stat_com.h" #include "stat_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -56,11 +54,7 @@ * Local function prototypes *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_spar_dec_MD_fx( Decoder_Struct *st_ivas, Decoder_State *st0 ); -#else -static ivas_error ivas_spar_dec_MD( Decoder_Struct *st_ivas, Decoder_State *st0 ); -#endif /*------------------------------------------------------------------------- @@ -69,213 +63,6 @@ static ivas_error ivas_spar_dec_MD( Decoder_Struct *st_ivas, Decoder_State *st0 * Allocate and initialize SPAR decoder handle and sub-handles *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_dec_open( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ -) -{ - SPAR_DEC_HANDLE hSpar; - ivas_error error; - int16_t sba_order_internal, num_channels_internal; - IVAS_FB_CFG *fb_cfg; - int16_t i, j, b, active_w_mixing; - int32_t output_Fs; - int16_t num_decor_chs, map_idx; - - error = IVAS_ERR_OK; - - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - - num_channels_internal = ivas_sba_get_nchan_metadata( sba_order_internal, st_ivas->hDecoderConfig->ivas_total_brate ); - - hSpar = st_ivas->hSpar; - - if ( !spar_reconfig_flag ) - { - /* SPAR decoder handle */ - if ( ( hSpar = (SPAR_DEC_HANDLE) malloc( sizeof( SPAR_DEC_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder" ); - } - } - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - if ( num_channels_internal > ( SBA_HOA2_ORDER + 1 ) * ( SBA_HOA2_ORDER + 1 ) ) - { - num_decor_chs = IVAS_HBR_MAX_DECOR_CHS; - } - else - { - num_decor_chs = num_channels_internal - 1; - } - - /* TD decorr. */ - if ( ( st_ivas->ivas_format == SBA_FORMAT ) && ( ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) || ( st_ivas->hDecoderConfig->ivas_total_brate >= IVAS_256k && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA ) ) ) - { - hSpar->hTdDecorr = NULL; - } - else - { - if ( ( error = ivas_td_decorr_dec_open( &hSpar->hTdDecorr, output_Fs, num_decor_chs + 1, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* MD handle */ - if ( ( error = ivas_spar_md_dec_open( &hSpar->hMdDec, st_ivas->hDecoderConfig, num_channels_internal, sba_order_internal, st_ivas->sid_format, st_ivas->last_active_ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - hSpar->hMdDec->td_decorr_flag = 1; - if ( hSpar->hTdDecorr ) - { - hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[hSpar->hMdDec->table_idx].td_ducking; - } - - /* set FB config. */ - active_w_mixing = -1; - if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, num_channels_internal, num_channels_internal, active_w_mixing, output_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - fb_cfg->pcm_offset = NS2SA( output_Fs, DELAY_FB_1_NS + IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ); - fb_cfg->remix_order = remix_order_set[hSpar->hMdDec->spar_md_cfg.remix_unmix_order]; - - /* FB mixer handle */ - if ( ( error = ivas_FB_mixer_open( &hSpar->hFbMixer, output_Fs, fb_cfg, spar_reconfig_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* AGC handle */ - if ( ( error = ivas_spar_agc_dec_open( &hSpar->hAgcDec, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* PCA handle */ - hSpar->hPCA = NULL; - if ( st_ivas->hDecoderConfig->ivas_total_brate == PCA_BRATE && sba_order_internal == 1 ) - { - if ( ( hSpar->hPCA = (PCA_DEC_STATE *) malloc( sizeof( PCA_DEC_STATE ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for PCA decoder" ); - } - - ivas_pca_dec_init( hSpar->hPCA ); - } - - /* mixer_mat intitialization */ - for ( i = 0; i < num_channels_internal; i++ ) - { - for ( j = 0; j < num_channels_internal; j++ ) - { - for ( b = 0; b < IVAS_MAX_NUM_BANDS; b++ ) - { - hSpar->hMdDec->mixer_mat[i][j][b] = 0.0f; - for ( int16_t i_ts = 0; i_ts < ( MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); i_ts++ ) - { - hSpar->hMdDec->mixer_mat_prev[i_ts][i][j][b] = 0.0f; - } - } - } - } - hSpar->i_subframe = 0; - hSpar->AGC_flag = 0; - - /*-----------------------------------------------------------------* - * Configuration - set SPAR high-level parameters - *-----------------------------------------------------------------*/ - - ivas_spar_config( st_ivas->hDecoderConfig->ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, st_ivas->sid_format ); - - switch ( sba_order_internal ) - { - case 1: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_FOA; - break; - case 2: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_HOA2; - break; - case 3: - st_ivas->transport_config = IVAS_AUDIO_CONFIG_HOA3; - break; - } - - ivas_output_init( &( st_ivas->hTransSetup ), st_ivas->transport_config ); - - set_s( hSpar->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( hSpar->subframe_nbslots, JBM_CLDFB_SLOTS_IN_SUBFRAME, DEFAULT_JBM_SUBFRAMES_5MS ); - hSpar->nb_subframes = DEFAULT_JBM_SUBFRAMES_5MS; - hSpar->subframes_rendered = 0; - hSpar->slots_rendered = 0; - hSpar->num_slots = DEFAULT_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME; - - /* init render timeslot mapping */ - set_s( hSpar->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - for ( map_idx = 0; map_idx < DEFAULT_JBM_CLDFB_TIMESLOTS; map_idx++ ) - { - hSpar->render_to_md_map[map_idx] = map_idx; - } - - /* allocate transport channels*/ - if ( st_ivas->hTcBuffer == NULL ) - { - int16_t nchan_to_allocate; - int16_t nchan_tc; - TC_BUFFER_MODE buffer_mode; - int16_t granularity; - - buffer_mode = TC_BUFFER_MODE_RENDERER; - nchan_tc = ivas_jbm_dec_get_num_tc_channels( st_ivas ); - nchan_to_allocate = num_channels_internal; - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - nchan_to_allocate += st_ivas->nchan_ism; - } - - granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - if ( ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO ) ) - { - if ( ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - nchan_tc = st_ivas->hDecoderConfig->nchan_out + st_ivas->nchan_ism; - nchan_to_allocate = nchan_tc; - } - else - { - buffer_mode = TC_BUFFER_MODE_BUFFER; - nchan_tc = st_ivas->hDecoderConfig->nchan_out; - nchan_to_allocate = nchan_tc; - } - } - else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - nchan_to_allocate = 2 * BINAURAL_CHANNELS; - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - /* get correct granularity in case of binaural rendering of the discrete objects with the td obj renderer */ - granularity = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); - } - - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, buffer_mode, nchan_tc, nchan_to_allocate, nchan_to_allocate, granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - st_ivas->hSpar = hSpar; - - return error; -} - -#else ivas_error ivas_spar_dec_open_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const Word16 spar_reconfig_flag /* i : SPAR reconfiguration flag Q0*/ @@ -415,11 +202,7 @@ ivas_error ivas_spar_dec_open_fx( * Configuration - set SPAR high-level parameters *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_spar_config_fx( st_ivas->hDecoderConfig->ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, st_ivas->sid_format ); -#else - ivas_spar_config( st_ivas->hDecoderConfig->ivas_total_brate, sba_order_internal, &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, st_ivas->sid_format ); -#endif SWITCH( sba_order_internal ) { @@ -531,7 +314,6 @@ ivas_error ivas_spar_dec_open_fx( return error; } -#endif /*------------------------------------------------------------------------- @@ -540,46 +322,6 @@ ivas_error ivas_spar_dec_open_fx( * Deallocate SPAR handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_close( - SPAR_DEC_HANDLE *hSpar, /* i/o: SPAR decoder handle */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ -) -{ - if ( hSpar == NULL || *hSpar == NULL ) - { - return; - } - - /* MD handle */ - ivas_spar_md_dec_close( &( *hSpar )->hMdDec ); - - /* TD decorrelator handle */ - ivas_td_decorr_dec_close( &( *hSpar )->hTdDecorr ); - - /* FB mixer handle */ - ivas_FB_mixer_close( &( *hSpar )->hFbMixer, output_Fs, spar_reconfig_flag ); - - /* AGC */ - ivas_spar_agc_dec_close( &( *hSpar )->hAgcDec ); - - /* PCA */ - if ( ( *hSpar )->hPCA != NULL ) - { - free( ( *hSpar )->hPCA ); - ( *hSpar )->hPCA = NULL; - } - - if ( !spar_reconfig_flag ) - { - free( ( *hSpar ) ); - ( *hSpar ) = NULL; - } - - return; -} -#else void ivas_spar_dec_close_fx( SPAR_DEC_HANDLE *hSpar, /* i/o: SPAR decoder handle */ const Word32 output_Fs, /* i : output sampling rate Q0*/ @@ -619,7 +361,6 @@ void ivas_spar_dec_close_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -628,7 +369,6 @@ void ivas_spar_dec_close_fx( * Principal IVAS SPAR decoder routine *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_spar_dec_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ Word16 *nb_bits_read /* o : number of MD bits read Q0*/ @@ -749,100 +489,6 @@ ivas_error ivas_spar_dec_fx( return error; } -#else -ivas_error ivas_spar_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ - int16_t *nb_bits_read /* o : number of MD bits read */ -) -{ - DECODER_CONFIG_HANDLE hDecoderConfig; - int16_t i, nb_bits_read_orig; - Decoder_State *st0; - int16_t next_bit_pos_orig, last_bit_pos; - uint16_t bstr_meta[MAX_BITS_METADATA], *bit_stream_orig; - ivas_error error; - - push_wmops( "ivas_spar_decode" ); - error = IVAS_ERR_OK; - hDecoderConfig = st_ivas->hDecoderConfig; - - st0 = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0] : st_ivas->hCPE[0]->hCoreCoder[0]; - bit_stream_orig = st0->bit_stream; - next_bit_pos_orig = st0->next_bit_pos; - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - last_bit_pos = (int16_t) ( ( hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ) - nb_bits_read[1]; - } - else - { - *nb_bits_read = 0; - last_bit_pos = 0; - } - - /* read DirAC bitstream */ - if ( st_ivas->hQMetaData != NULL ) - { - ivas_dirac_dec_read_BS( hDecoderConfig->ivas_total_brate, st0, st_ivas->hDirAC, st_ivas->hSpatParamRendCom, st_ivas->hQMetaData, nb_bits_read, last_bit_pos, ivas_get_hodirac_flag( hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ), st_ivas->hSpar->dirac_to_spar_md_bands ); - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - last_bit_pos = (int16_t) ( ( hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ) - nb_bits_read[1]; - } - else - { - last_bit_pos = (int16_t) ( ( hDecoderConfig->ivas_total_brate / FRAMES_PER_SEC ) - 1 ); - } - - if ( !st0->bfi && hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) - { - last_bit_pos -= SID_FORMAT_NBITS; - } - nb_bits_read_orig = *nb_bits_read; - last_bit_pos -= nb_bits_read_orig; - - /* reverse the bitstream for easier reading of indices */ - for ( i = 0; i < min( MAX_BITS_METADATA, last_bit_pos ); i++ ) - { - bstr_meta[i] = st_ivas->bit_stream[last_bit_pos - i]; - } - st0->bit_stream = bstr_meta; - st0->next_bit_pos = 0; - st0->bits_frame = min( MAX_BITS_METADATA, last_bit_pos + 1 ); - - if ( !st0->bfi ) - { - st0->total_brate = hDecoderConfig->ivas_total_brate; /* to avoid BER detect */ - } - - /*---------------------------------------------------------------------* - * Decode SPAR metadata - *---------------------------------------------------------------------*/ - - if ( ( error = ivas_spar_dec_MD( st_ivas, st0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - *nb_bits_read = st0->next_bit_pos + nb_bits_read_orig; - st0->bit_stream = bit_stream_orig; - st0->next_bit_pos = next_bit_pos_orig; - - if ( !st0->bfi && hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) - { - int16_t zero_pad_bits; - *nb_bits_read += SID_FORMAT_NBITS; - zero_pad_bits = (int16_t) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - *nb_bits_read; - assert( zero_pad_bits <= 1 ); - *nb_bits_read += zero_pad_bits; - } - - pop_wmops(); - - return error; -} -#endif /*---------------------------------------------------------------------* @@ -851,7 +497,6 @@ ivas_error ivas_spar_dec( * Get SPAR table index *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_spar_table_idx_from_coded_idx( const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ const Word16 sba_order, /* i : Ambisonic (SBA) order Q0*/ @@ -888,37 +533,6 @@ static Word16 ivas_get_spar_table_idx_from_coded_idx( return table_idx; } -#else -static int16_t ivas_get_spar_table_idx_from_coded_idx( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - int16_t *bitlen /* o : number of bits */ -) -{ - int16_t table_idx, ind1[IVAS_SPAR_BR_TABLE_LEN]; - int16_t i, j, ind2; - - j = 0; - for ( i = 0; i < IVAS_SPAR_BR_TABLE_LEN; i++ ) - { - ind1[j] = 0; - if ( ( ivas_spar_br_table_consts[i].ivas_total_brate == ivas_total_brate ) && ( ivas_spar_br_table_consts[i].sba_order == sba_order ) ) - { - ind1[j++] = i; - } - } - - assert( j > 0 ); - *bitlen = ivas_get_bits_to_encode( j - 1 ); - - ind2 = get_next_indice( st0, *bitlen ); - - table_idx = ind1[ind2]; - - return table_idx; -} -#endif /*---------------------------------------------------------------------* @@ -927,7 +541,6 @@ static int16_t ivas_get_spar_table_idx_from_coded_idx( * Get SPAR table index *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_parse_spar_header( const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ const Word16 sba_order, /* i : Ambisonic (SBA) order Q0*/ @@ -944,42 +557,15 @@ static Word16 ivas_parse_spar_header( return bwidth; } -#else -static int16_t ivas_parse_spar_header( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - int16_t *table_idx ) -{ - int16_t bitlen, bwidth; - - *table_idx = ivas_get_spar_table_idx_from_coded_idx( ivas_total_brate, sba_order, st0, &bitlen ); - - bwidth = ivas_spar_br_table_consts[( *table_idx )].bwidth; - - return bwidth; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 get_random_number_fx( Word16 *seed ) { return Random( seed ); /*Q15*/ } -#else -static float get_random_number( - int16_t *seed ) -{ - float x = (float) own_random( seed ) / 32768.0f; - return x; -} -#endif // IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED static Word32 matrix_det_fx( const Word32 a00, /*Q27*/ const Word32 a01, /*Q27*/ @@ -989,19 +575,8 @@ static Word32 matrix_det_fx( { return L_sub( Mpy_32_32( a00, a11 ), Mpy_32_32( a01, a10 ) ); /*Q23*/ } -#else -static float matrix_det( - const float a00, - const float a01, - const float a10, - const float a11 ) -{ - return a00 * a11 - a01 * a10; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void matrix_inverse_fx( Word32 in[3][3], /*Q27*/ Word32 out[3][3], /*out_q*/ @@ -1082,53 +657,6 @@ static void matrix_inverse_fx( return; } -#else -static void matrix_inverse( - float in[3][3], - float out[3][3], - const int16_t size ) -{ - float det, fac; - float eps = 1e-16f; - - if ( size == 1 ) - { - out[0][0] = 1.0f / max( in[0][0], eps ); - - return; - } - else if ( size == 2 ) - { - det = matrix_det( in[0][1], in[0][1], in[1][0], in[1][1] ); - fac = 1.0f / max( det, eps ); - - out[0][0] = in[1][1] * fac; - out[1][0] = in[1][0] * ( -fac ); - - out[0][1] = in[0][1] * ( -fac ); - out[1][1] = in[0][0] * fac; - - return; - } - - det = in[0][0] * matrix_det( in[1][1], in[1][2], in[2][1], in[2][2] ) - in[1][0] * matrix_det( in[0][1], in[0][2], in[2][1], in[2][2] ) + in[2][0] * matrix_det( in[0][1], in[0][2], in[1][1], in[1][2] ); - fac = 1.0f / max( det, eps ); - - out[0][0] = matrix_det( in[1][1], in[1][2], in[2][1], in[2][2] ) * fac; - out[1][0] = matrix_det( in[1][0], in[1][2], in[2][0], in[2][2] ) * ( -fac ); - out[2][0] = matrix_det( in[1][0], in[1][1], in[2][0], in[2][1] ) * fac; - - out[0][1] = matrix_det( in[0][1], in[0][2], in[2][1], in[2][2] ) * ( -fac ); - out[1][1] = matrix_det( in[0][0], in[0][2], in[2][0], in[2][2] ) * fac; - out[2][1] = matrix_det( in[0][0], in[0][1], in[2][0], in[2][1] ) * ( -fac ); - - out[0][2] = matrix_det( in[0][1], in[0][2], in[1][1], in[1][2] ) * fac; - out[1][2] = matrix_det( in[0][0], in[0][2], in[1][0], in[1][2] ) * ( -fac ); - out[2][2] = matrix_det( in[0][0], in[0][1], in[1][0], in[1][1] ) * fac; - - return; -} -#endif /*---------------------------------------------------------------------* @@ -1137,7 +665,6 @@ static void matrix_inverse( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_get_cldfb_gains_fx( SPAR_DEC_HANDLE hSpar, HANDLE_CLDFB_FILTER_BANK cldfbAnaDec0, @@ -1358,218 +885,6 @@ Word16 ivas_is_res_channel( return ( rc_map[nchan_transport - 1][ch] ); /*Q0*/ } -#else -void ivas_spar_get_cldfb_gains( - SPAR_DEC_HANDLE hSpar, - HANDLE_CLDFB_FILTER_BANK cldfbAnaDec0, - HANDLE_CLDFB_FILTER_BANK cldfbSynDec0, - const DECODER_CONFIG_HANDLE hDecoderConfig ) -{ - float output_Fs = (float) hDecoderConfig->output_Fs; - int16_t pt_len, stride, num_cldfb_bands, decfb_delay; - int16_t encfb_delay, cf_start, cf_end, cf_len; - float *weights; - int16_t ts, cf_cldfb_start, cf_cldfb_end; - float cf_start_s, cf_len_s; - int16_t sample, num_cf_slots, num_samples; - float T[3 * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX - CLDFB_NO_CHANNELS_MAX][3]; - float Tt_T[3][3]; - float Tt_T_inv[3][3]; - float Tt_tgt[3]; - float ts_inout[CLDFB_NO_CHANNELS_MAX]; - float ts_re[CLDFB_NO_CHANNELS_MAX]; - float ts_im[CLDFB_NO_CHANNELS_MAX]; - float *pp_ts_im[1], *pp_ts_re[1]; - float tgt[( 3 - 1 ) * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX]; - int16_t seed, split_band, slot_row, slot_col, slot, tmp_idx; - - pt_len = cldfbAnaDec0->p_filter_length; - num_cldfb_bands = cldfbAnaDec0->no_channels; - - stride = NS2SA( output_Fs, DELAY_CLDFB_NS ); - encfb_delay = NS2SA( output_Fs, IVAS_FB_ENC_DELAY_NS ); - decfb_delay = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ); - - cf_start = (int16_t) hSpar->hFbMixer->cross_fade_start_offset - encfb_delay + decfb_delay; /* time domain after CLDFB synthesis*/ - cf_end = (int16_t) hSpar->hFbMixer->cross_fade_end_offset - encfb_delay + decfb_delay; - cf_len = cf_end - cf_start; - weights = hSpar->hFbMixer->cldfb_cross_fade; - - cf_cldfb_start = (int16_t) ceil( ( cf_start - decfb_delay / 2 ) / (float) stride - 0.5f ); - cf_cldfb_end = (int16_t) ( ( cf_start - decfb_delay / 2 + cf_len ) / (float) stride - 0.5f ); - - num_cf_slots = cf_cldfb_end - cf_cldfb_start + 1; - num_samples = num_cf_slots * stride + pt_len - stride; - seed = RANDOM_INITSEED; - split_band = SPAR_DIRAC_SPLIT_START_BAND; - pp_ts_im[0] = ts_im; - pp_ts_re[0] = ts_re; - set_f( tgt, 0, ( 3 - 1 ) * CLDFB_NO_CHANNELS_MAX + 10 * CLDFB_NO_CHANNELS_MAX ); - - cf_start_s = ( cf_start - decfb_delay / 2 ) / output_Fs; - cf_len_s = hSpar->hFbMixer->cross_fade_end_offset / output_Fs - hSpar->hFbMixer->cross_fade_start_offset / output_Fs; - - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - weights[ts] = ( ( ( ts + 0.5f ) * stride / output_Fs ) - cf_start_s ) / cf_len_s; - weights[ts] = max( min( weights[ts], 1.0f ), 0.0f ); - } - hSpar->hFbMixer->cldfb_cross_fade_start = cf_cldfb_start; - hSpar->hFbMixer->cldfb_cross_fade_end = cf_cldfb_end; - - if ( num_cf_slots > 3 || pt_len > 10 * CLDFB_NO_CHANNELS_MAX || stride > CLDFB_NO_CHANNELS_MAX || split_band == IVAS_MAX_NUM_BANDS ) - { - return; - } - - /* optimization*/ - /* compute time-domain cross-fade for considered time slots*/ - tmp_idx = cf_start - cf_cldfb_start * stride; - for ( sample = 0; sample < cf_len; sample++ ) - { - /* increasing window function */ - tgt[tmp_idx++] = hSpar->hFbMixer->pFilterbank_cross_fade[sample]; - } - - for ( ; tmp_idx < num_samples; tmp_idx++ ) - { - /* fill up with ones*/ - tgt[tmp_idx] = 1.0f; - } - - for ( sample = 0; sample < num_samples; sample++ ) - { - /* initialize trasnform matrix with zeros*/ - T[sample][0] = T[sample][1] = T[sample][2] = 0.0f; - } - - for ( sample = 0; sample < pt_len - stride; sample++ ) - { - /* fill internal CLDFB analysis time buffer with data*/ - float x = get_random_number( &seed ); - - cldfbAnaDec0->cldfb_state[sample] = x; - } - - for ( slot = 0; slot < num_cf_slots; slot++ ) - { - for ( sample = 0; sample < stride; sample++ ) - { - float x = get_random_number( &seed ); - ts_inout[sample] = x; - } - - cldfbAnalysis_ts_ivas( ts_inout, ts_re, ts_im, num_cldfb_bands, cldfbAnaDec0 ); - cldfb_reset_memory_ivas( cldfbSynDec0 ); - cldfbSynthesis_ivas( pp_ts_re, pp_ts_im, ts_inout, num_cldfb_bands, cldfbSynDec0 ); - - for ( sample = 0; sample < stride; sample++ ) - { - T[slot * stride + sample][slot] = ts_inout[sample]; - } - - tmp_idx = pt_len - 1; - for ( sample = stride; sample < pt_len; sample++ ) - { - T[slot * stride + sample][slot] = cldfbSynDec0->cldfb_state[tmp_idx--]; - } - } - - /* target is synthesis output times the cross-fade window*/ - for ( sample = 0; sample < num_samples; sample++ ) - { - tgt[sample] *= ( T[sample][0] + T[sample][1] + T[sample][2] ); - } - - /* compute matrices */ - for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) - { - for ( slot_col = slot_row; slot_col < num_cf_slots; slot_col++ ) - { - Tt_T[slot_row][slot_col] = 0.0f; - for ( sample = 0; sample < num_samples; sample++ ) - { - Tt_T[slot_row][slot_col] += T[sample][slot_row] * T[sample][slot_col]; - } - } - } - - Tt_T[1][0] = Tt_T[0][1]; - Tt_T[2][0] = Tt_T[0][2]; - Tt_T[2][1] = Tt_T[1][2]; - - for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) - { - Tt_tgt[slot_row] = 0.0f; - for ( sample = 0; sample < num_samples; sample++ ) - { - Tt_tgt[slot_row] += T[sample][slot_row] * tgt[sample]; - } - } - -#ifdef IVAS_FLOAT_FIXED - Word32 Tt_t_fx[3][3], Tt_T_inv_fx[3][3]; - Word16 input_q = Q27, output_q = 0; - FOR( Word16 i = 0; i < num_cf_slots; ++i ) - { - floatToFixed_arrL( Tt_T[i], Tt_t_fx[i], input_q, num_cf_slots ); - } - matrix_inverse_fx( Tt_t_fx, Tt_T_inv_fx, num_cf_slots, &output_q ); - FOR( Word16 i = 0; i < num_cf_slots; ++i ) - { - fixedToFloat_arrL( Tt_T_inv_fx[i], Tt_T_inv[i], output_q, num_cf_slots ); - } -#else - matrix_inverse( Tt_T, Tt_T_inv, num_cf_slots ); -#endif - - /* compute the optimal coefficients */ - for ( slot_row = 0; slot_row < num_cf_slots; slot_row++ ) - { - float tmp = 0.0f; - for ( slot_col = 0; slot_col < num_cf_slots; slot_col++ ) - { - tmp += Tt_T_inv[slot_row][slot_col] * Tt_tgt[slot_col]; - } - weights[cf_cldfb_start + slot_row] = max( min( tmp, 1.0f ), 0.0f ); - } - - cldfb_reset_memory_ivas( cldfbSynDec0 ); - cldfb_reset_memory_ivas( cldfbAnaDec0 ); - - return; -} - - -/*---------------------------------------------------------------------* - * Function ivas_is_res_channel() - * - * determines if an FOA input channel is transmitted as residual channel. - *---------------------------------------------------------------------*/ - -/*! r: 1 if prediction residual channel */ -int16_t ivas_is_res_channel( - const int16_t ch, /* i : ch index in WYZX ordering */ - const int16_t nchan_transport /* i : number of transport channels (1-4) */ -) -{ - const int16_t rc_map[FOA_CHANNELS][FOA_CHANNELS] = { - { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 1 }, - { 0, 1, 1, 1 } - }; - - if ( ch >= FOA_CHANNELS ) - { - /* never transmitted */ - return 0; - } - assert( nchan_transport <= FOA_CHANNELS ); - - return ( rc_map[nchan_transport - 1][ch] ); -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -1578,7 +893,6 @@ int16_t ivas_is_res_channel( * IVAS SPAR MD decoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_spar_dec_MD_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Decoder_State *st0 /* i/o: decoder state structure - for bitstream handling*/ @@ -1704,119 +1018,6 @@ static ivas_error ivas_spar_dec_MD_fx( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error ivas_spar_dec_MD( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - Decoder_State *st0 /* i/o: decoder state structure - for bitstream handling*/ -) -{ - int16_t num_channels, table_idx, num_bands_out, bfi, sba_order; - int32_t ivas_total_brate; - int16_t num_md_sub_frames; - ivas_error error; - DECODER_CONFIG_HANDLE hDecoderConfig = st_ivas->hDecoderConfig; - SPAR_DEC_HANDLE hSpar = st_ivas->hSpar; - - push_wmops( "ivas_spar_dec_MD" ); - - /*---------------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------------*/ - - sba_order = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - bfi = st_ivas->bfi; - ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - num_channels = ivas_sba_get_nchan_metadata( sba_order, ivas_total_brate ); - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order, hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - - num_bands_out = hSpar->hFbMixer->pFb->filterbank_num_bands; - - if ( ivas_total_brate > FRAME_NO_DATA && !bfi ) - { - if ( ivas_total_brate > IVAS_SID_5k2 ) - { - ivas_parse_spar_header( hDecoderConfig->ivas_total_brate, sba_order, st0, &table_idx ); - - if ( hSpar->hMdDec->spar_hoa_md_flag ) - { - hSpar->hMdDec->spar_md.num_bands = IVAS_MAX_NUM_BANDS; - } - else - { - hSpar->hMdDec->spar_md.num_bands = min( SPAR_DIRAC_SPLIT_START_BAND, IVAS_MAX_NUM_BANDS ); - } - - if ( hSpar->hMdDec->table_idx != table_idx ) - { - hSpar->hMdDec->table_idx = table_idx; - if ( hSpar->hTdDecorr ) - { - hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[table_idx].td_ducking; - } - - if ( ( error = ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /*---------------------------------------------------------------------* - * Decode MD - *---------------------------------------------------------------------*/ - - ivas_spar_md_dec_process( st_ivas, st0, num_bands_out, sba_order ); - - /*---------------------------------------------------------------------* - * read PCA bits - *---------------------------------------------------------------------*/ - - if ( hSpar->hPCA != NULL ) - { - ivas_pca_read_bits( st0, hSpar->hPCA ); - } - - /*---------------------------------------------------------------------* - * Read AGC bits - *---------------------------------------------------------------------*/ - - if ( ivas_total_brate > IVAS_SID_5k2 && !bfi && hSpar->hMdDec->dtx_vad ) - { - if ( hSpar->hMdDec->spar_md_cfg.nchan_transport == 1 ) - { - hSpar->AGC_flag = get_next_indice( st0, 1 ); - } - - ivas_agc_read_bits( hSpar->hAgcDec, st0, hSpar->hMdDec->spar_md_cfg.nchan_transport, hSpar->AGC_flag ); - } - - /*---------------------------------------------------------------------* - * MD smoothing - *---------------------------------------------------------------------*/ - - if ( st0->m_old_frame_type == ZERO_FRAME && ivas_total_brate == IVAS_SID_5k2 && st0->prev_bfi == 0 && hSpar->hMdDec->spar_md_cfg.nchan_transport == 1 ) - { - ivas_spar_setup_md_smoothing( hSpar->hMdDec, num_bands_out, num_md_sub_frames ); - } - else - { - ivas_spar_update_md_hist( hSpar->hMdDec ); - } - } - else - { - if ( !bfi ) - { - ivas_spar_smooth_md_dtx( hSpar->hMdDec, num_bands_out, num_md_sub_frames ); - } - - set_s( hSpar->hMdDec->valid_bands, 0, IVAS_MAX_NUM_BANDS ); - } - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -1825,7 +1026,6 @@ static ivas_error ivas_spar_dec_MD( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_spar_get_cldfb_slot_gain_fx( SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ @@ -1933,58 +1133,6 @@ static Word16 ivas_spar_get_cldfb_slot_gain_fx( return weight_fx; /*Q15*/ } -#else -static float ivas_spar_get_cldfb_slot_gain( - SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const int16_t time_slot_idx, - int16_t *time_slot_idx0, - int16_t *time_slot_idx1, - float *weight_lowfreq ) -{ - float weight; - float output_Fs, encfb_delay, decfb_delay; - float xfade_start_ns; - int16_t xfade_delay_subframes; - int16_t i_hist; - int16_t split_band; - - *weight_lowfreq = hSpar->hFbMixer->cldfb_cross_fade[time_slot_idx]; - - output_Fs = (float) hDecoderConfig->output_Fs; - encfb_delay = IVAS_FB_ENC_DELAY_NS; - decfb_delay = IVAS_FB_DEC_DELAY_NS; - xfade_start_ns = hSpar->hFbMixer->cross_fade_start_offset / output_Fs * 1000000000.f - encfb_delay + decfb_delay * 0.5f; - xfade_delay_subframes = (int16_t) ( xfade_start_ns / ( FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ) ); - - i_hist = 4 - xfade_delay_subframes; - split_band = SPAR_DIRAC_SPLIT_START_BAND; - - if ( split_band < IVAS_MAX_NUM_BANDS ) - { - if ( hSpar->i_subframe > 3 ) - { - weight = (float) ( time_slot_idx % MAX_PARAM_SPATIAL_SUBFRAMES ) / (float) MAX_PARAM_SPATIAL_SUBFRAMES; - } - else - { - weight = 0.0f; - } - *time_slot_idx0 = i_hist; - *time_slot_idx1 = i_hist + 1; - } - else - { - /* determine cross-fade gain for current frame Parameters*/ - *time_slot_idx0 = hSpar->hFbMixer->cldfb_cross_fade_start; - *time_slot_idx1 = hSpar->hFbMixer->cldfb_cross_fade_end; - weight = *weight_lowfreq; - } - - return weight; -} -#endif - /*-------------------------------------------------------------------* * ivas_spar_get_parameters() @@ -1992,7 +1140,6 @@ static float ivas_spar_get_cldfb_slot_gain( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_get_parameters_fx( SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ @@ -2054,60 +1201,6 @@ void ivas_spar_get_parameters_fx( return; } -#else -void ivas_spar_get_parameters( - SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const int16_t ts, - const int16_t num_ch_out, - const int16_t num_ch_in, - const int16_t num_spar_bands, - float par_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS] ) -{ - int16_t spar_band, out_ch, in_ch; - float weight, weight_20ms; - int16_t ts0, ts1, split_band; - - weight = ivas_spar_get_cldfb_slot_gain( hSpar, hDecoderConfig, ts, &ts0, &ts1, &weight_20ms ); - - split_band = SPAR_DIRAC_SPLIT_START_BAND; - for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) - { - for ( out_ch = 0; out_ch < num_ch_out; out_ch++ ) - { - if ( split_band < IVAS_MAX_NUM_BANDS - /* 20ms cross-fade for Transport channels in all frequency bands */ - && ( 0 == ivas_is_res_channel( out_ch, hSpar->hMdDec->spar_md_cfg.nchan_transport ) ) /* sub-frame processing for missing channels in all frequency bands*/ - ) - { - for ( in_ch = 0; in_ch < num_ch_in; in_ch++ ) - { - if ( hSpar->i_subframe > 3 ) - { - par_mat[out_ch][in_ch][spar_band] = ( 1.0f - weight ) * hSpar->hMdDec->mixer_mat_prev[ts0][out_ch][in_ch][spar_band] + - weight * hSpar->hMdDec->mixer_mat_prev[ts1][out_ch][in_ch][spar_band]; - } - else - { - par_mat[out_ch][in_ch][spar_band] = hSpar->hMdDec->mixer_mat[out_ch][in_ch][spar_band]; - } - } - } - else - { - for ( in_ch = 0; in_ch < num_ch_in; in_ch++ ) - { - /* 20ms Transport channel reconstruction with matching encoder/decoder processing */ - int16_t prev_idx = SPAR_DIRAC_SPLIT_START_BAND < IVAS_MAX_NUM_BANDS ? 1 : 0; /* if SPAR_DIRAC_SPLIT_START_BAND == IVAS_MAX_NUM_BANDS, then the sub-frame mixer_mat delay line is not active */ - par_mat[out_ch][in_ch][spar_band] = ( 1.0f - weight_20ms ) * hSpar->hMdDec->mixer_mat_prev[prev_idx][out_ch][in_ch][spar_band] + weight_20ms * hSpar->hMdDec->mixer_mat[out_ch][in_ch][spar_band]; - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -2116,69 +1209,6 @@ void ivas_spar_get_parameters( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_get_skip_mat( - SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ - const int16_t num_ch_out, - const int16_t num_ch_in, - const int16_t num_spar_bands, - int16_t skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t num_md_sub_frames ) -{ - int16_t spar_band, out_ch, in_ch; - int16_t i_ts, skip_flag; - - for ( out_ch = 0; out_ch < num_ch_out; out_ch++ ) - { - for ( in_ch = 0; in_ch < num_ch_in; in_ch++ ) - { - skip_mat[out_ch][in_ch] = 1; - skip_flag = 1; - for ( i_ts = 0; i_ts < MAX_PARAM_SPATIAL_SUBFRAMES; i_ts++ ) - { - for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) - { - if ( hSpar->hMdDec->mixer_mat_prev[1 + i_ts][out_ch][in_ch][spar_band] != 0.0f ) - { - skip_flag = 0; - break; - } - } - - if ( skip_flag == 0 ) - { - skip_mat[out_ch][in_ch] = 0; - break; - } - } - - if ( skip_mat[out_ch][in_ch] == 1 ) - { - for ( i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) - { - if ( hSpar->hMdDec->mixer_mat[out_ch][in_ch][spar_band + i_ts * IVAS_MAX_NUM_BANDS] != 0.0f ) - { - skip_flag = 0; - break; - } - } - - if ( skip_flag == 0 ) - { - skip_mat[out_ch][in_ch] = 0; - break; - } - } - } - } - } - - return; -} - -#else static void ivas_spar_get_skip_mat_fx( SPAR_DEC_HANDLE hSpar, /* i/o: SPAR decoder handle */ const Word16 num_ch_out, /*Q0*/ @@ -2246,10 +1276,8 @@ static void ivas_spar_get_skip_mat_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_spar_calc_smooth_facs_fx( Word32 *cldfb_in_ts_re_fx[CLDFB_NO_COL_MAX], // i q_cldfb Word32 *cldfb_in_ts_im_fx[CLDFB_NO_COL_MAX], // i q_cldfb @@ -2393,100 +1421,6 @@ static void ivas_spar_calc_smooth_facs_fx( } return; } -#else -static void ivas_spar_calc_smooth_facs( - float *cldfb_in_ts_re[CLDFB_NO_COL_MAX], - float *cldfb_in_ts_im[CLDFB_NO_COL_MAX], - int16_t nbands_spar, - const int16_t nSlots, - const int16_t isFirstSubframe, - ivas_fb_bin_to_band_data_t *bin2band, - float *smooth_fac, - float smooth_buf[IVAS_MAX_NUM_BANDS][2 * SBA_DIRAC_NRG_SMOOTH_LONG + 1] ) -{ - int16_t b, bin, i, ts; - float subframe_band_nrg[IVAS_MAX_NUM_BANDS]; - float smooth_long_avg[IVAS_MAX_NUM_BANDS]; - float smooth_short_avg[IVAS_MAX_NUM_BANDS]; - - bin = 0; - for ( b = 0; b < nbands_spar; b++ ) - { - if ( bin >= CLDFB_NO_CHANNELS_MAX || ( b > 0 && bin2band->p_cldfb_map_to_spar_band[bin] < bin2band->p_cldfb_map_to_spar_band[bin - 1] ) ) - { - break; - } - - /* calculate band-wise subframe energies */ - subframe_band_nrg[b] = 0.f; - while ( bin < CLDFB_NO_CHANNELS_MAX && b == bin2band->p_cldfb_map_to_spar_band[bin] ) - { - for ( ts = 0; ts < nSlots; ts++ ) - { - subframe_band_nrg[b] += cldfb_in_ts_re[ts][bin] * cldfb_in_ts_re[ts][bin] + cldfb_in_ts_im[ts][bin] * cldfb_in_ts_im[ts][bin]; - } - bin++; - } - subframe_band_nrg[b] = sqrtf( subframe_band_nrg[b] ); - if ( isFirstSubframe && nSlots < MAX_PARAM_SPATIAL_SUBFRAMES ) - { - /* fill up to full 5ms subframe */ - smooth_buf[b][0] += subframe_band_nrg[b]; - } - else - { - smooth_buf[b][0] = subframe_band_nrg[b]; - } - /* calculate short and long energy averages */ - smooth_short_avg[b] = EPSILON; - for ( i = 0; i < 2 * SBA_DIRAC_NRG_SMOOTH_SHORT; i++ ) - { - smooth_short_avg[b] += smooth_buf[b][i]; - } - - smooth_long_avg[b] = smooth_short_avg[b]; - for ( i = 2 * SBA_DIRAC_NRG_SMOOTH_SHORT; i < 2 * SBA_DIRAC_NRG_SMOOTH_LONG; i++ ) - { - smooth_long_avg[b] += smooth_buf[b][i]; - } - smooth_short_avg[b] /= ( 2 * SBA_DIRAC_NRG_SMOOTH_SHORT ); - smooth_long_avg[b] /= ( 2 * SBA_DIRAC_NRG_SMOOTH_LONG ); - - /* calculate smoothing factor based on energy averages */ - /* reduce factor for higher short-term energy */ - smooth_fac[b] = min( 1.f, smooth_long_avg[b] / smooth_short_avg[b] ); - - /* map factor to range [0;1] */ - smooth_fac[b] = max( 0.f, smooth_fac[b] - (float) SBA_DIRAC_NRG_SMOOTH_SHORT / SBA_DIRAC_NRG_SMOOTH_LONG ) * ( (float) SBA_DIRAC_NRG_SMOOTH_LONG / ( SBA_DIRAC_NRG_SMOOTH_LONG - SBA_DIRAC_NRG_SMOOTH_SHORT ) ); - - /* compress factor (higher compression in lowest bands) */ - if ( b < 2 ) - { - smooth_fac[b] = powf( smooth_fac[b], 0.25f ); - } - else - { - smooth_fac[b] = powf( smooth_fac[b], 0.5f ); - } - - /* apply upper bounds depending on band */ - smooth_fac[b] = max( min_smooth_gains1[b], min( max_smooth_gains2[b], smooth_fac[b] ) ); - } - - /* only update if we collected a full 5ms worth of energies for the buffer */ - if ( isFirstSubframe || nSlots == MAX_PARAM_SPATIAL_SUBFRAMES ) - { - for ( b = 0; b < nbands_spar; b++ ) - { - for ( i = 2 * SBA_DIRAC_NRG_SMOOTH_LONG; i > 0; i-- ) - { - smooth_buf[b][i] = smooth_buf[b][i - 1]; - } - } - } - return; -} -#endif /*-------------------------------------------------------------------* @@ -2495,62 +1429,6 @@ static void ivas_spar_calc_smooth_facs( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_agc_pca( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output[], /* i/o: input/output audio channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t nchan_transport; - int16_t num_in_ingest; - DECODER_CONFIG_HANDLE hDecoderConfig; - SPAR_DEC_HANDLE hSpar; - - push_wmops( "ivas_spar_dec_agc_pca" ); - - hSpar = st_ivas->hSpar; - hDecoderConfig = st_ivas->hDecoderConfig; - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - - if ( st_ivas->nchan_transport >= 3 ) - { - float temp; - int16_t i; - /*convert WYZX downmix to WYXZ*/ - for ( i = 0; i < output_frame; i++ ) - { - temp = output[2][i]; - output[2][i] = output[3][i]; - output[3][i] = temp; - } - } - - if ( hSpar->hMdDec->td_decorr_flag ) - { - num_in_ingest = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - } - else - { - num_in_ingest = nchan_transport; - } - - /*---------------------------------------------------------------------* - * AGC - *---------------------------------------------------------------------*/ - - ivas_agc_dec_process( hSpar->hAgcDec, output, output, nchan_transport, output_frame ); - - if ( hSpar->hPCA != NULL ) - { - ivas_pca_dec( hSpar->hPCA, output_frame, num_in_ingest, hDecoderConfig->ivas_total_brate, hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, output ); - } - pop_wmops(); - - return; -} - -#else void ivas_spar_dec_agc_pca_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Word32 *output[], /* i/o: input/output audio channels Q14*/ @@ -2609,7 +1487,6 @@ void ivas_spar_dec_agc_pca_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -2618,37 +1495,6 @@ void ivas_spar_dec_agc_pca_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_set_render_map( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t nCldfbTs /* i : number of CLDFB time slots */ -) -{ - SPAR_DEC_HANDLE hSpar; - - hSpar = st_ivas->hSpar; - - /* adapt subframes */ - hSpar->num_slots = nCldfbTs; - hSpar->slots_rendered = 0; - hSpar->subframes_rendered = 0; - - set_s( hSpar->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - ivas_jbm_dec_get_adapted_subframes( nCldfbTs, hSpar->subframe_nbslots, &hSpar->nb_subframes ); - - /* copy also to tc buffer */ - /* only for non-combined formats and combinded formats w/o discrete objects */ - if ( !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) ) - { - st_ivas->hTcBuffer->nb_subframes = hSpar->nb_subframes; - mvs2s( hSpar->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, hSpar->nb_subframes ); - } - - ivas_jbm_dec_get_md_map( DEFAULT_JBM_CLDFB_TIMESLOTS, nCldfbTs, 1, 0, DEFAULT_JBM_CLDFB_TIMESLOTS, hSpar->render_to_md_map ); - - return; -} -#else void ivas_spar_dec_set_render_map_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 nCldfbTs /* i : number of CLDFB time slots Q0*/ @@ -2683,7 +1529,6 @@ void ivas_spar_dec_set_render_map_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -2692,26 +1537,6 @@ void ivas_spar_dec_set_render_map_fx( * IVAS SPAR upmixer *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_set_render_params( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t n_cldfb_slots /* i : number of cldfb slots in this frame */ -) -{ - SPAR_DEC_HANDLE hSpar; - int16_t nchan_transport; - int16_t num_bands_out; - - hSpar = st_ivas->hSpar; - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - num_bands_out = hSpar->hFbMixer->pFb->filterbank_num_bands; - ivas_spar_dec_gen_umx_mat( hSpar->hMdDec, nchan_transport, num_bands_out, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); - - ivas_spar_dec_set_render_map( st_ivas, n_cldfb_slots ); - - return; -} -#else void ivas_spar_dec_set_render_params_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const Word16 n_cldfb_slots /* i : number of cldfb slots in this frame Q0*/ @@ -2732,7 +1557,6 @@ void ivas_spar_dec_set_render_params_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -2741,86 +1565,6 @@ void ivas_spar_dec_set_render_params_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_dec_digest_tc( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t nCldfbSlots, /* i : number of CLDFB slots */ - const int16_t nSamplesForRendering /* i : number of samples provided */ -) -{ - SPAR_DEC_HANDLE hSpar; - - hSpar = st_ivas->hSpar; - if ( hSpar->hMdDec->td_decorr_flag && !( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - float Pcm_tmp[MAX_SPAR_INTERNAL_CHANNELS][L_FRAME48k]; - float *pPcm_tmp[MAX_SPAR_INTERNAL_CHANNELS]; - float *p_tc[MAX_SPAR_INTERNAL_CHANNELS]; - int16_t nchan_internal, ch; - int16_t ch_sba_idx; - int16_t nSamplesLeftForTD, default_frame; - - ch_sba_idx = 0; - if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - ch_sba_idx = st_ivas->nchan_ism; - } - } - - /* TD decorrelator */ - default_frame = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - nSamplesLeftForTD = nSamplesForRendering; - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); - - for ( ch = 0; ch < nchan_internal; ch++ ) - { - pPcm_tmp[ch] = Pcm_tmp[ch]; - p_tc[ch] = st_ivas->hTcBuffer->tc[ch + ch_sba_idx]; - } - - while ( nSamplesLeftForTD ) - { - int16_t nSamplesToDecorr = min( nSamplesLeftForTD, default_frame ); - - if ( hSpar->hTdDecorr ) - { - ivas_td_decorr_process( hSpar->hTdDecorr, p_tc, pPcm_tmp, nSamplesToDecorr ); - if ( hSpar->hTdDecorr->num_apd_outputs >= ( nchan_internal - nchan_transport ) ) - { - for ( ch = 0; ch < nchan_internal - nchan_transport; ch++ ) - { - mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - ch], p_tc[nchan_internal - 1 - ch], nSamplesToDecorr ); - } - } - else - { - for ( ch = 0; ch < nchan_internal - nchan_transport; ch++ ) - { - set_zero( p_tc[nchan_internal - 1 - ch], nSamplesToDecorr ); - } - for ( ch = 0; ch < hSpar->hTdDecorr->num_apd_outputs; ch++ ) - { - mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - ch], p_tc[nchan_internal - 1 - ch], nSamplesToDecorr ); - } - } - } - for ( ch = 0; ch < nchan_internal; ch++ ) - { - p_tc[ch] += nSamplesToDecorr; - } - - nSamplesLeftForTD -= nSamplesToDecorr; - } - } - - ivas_spar_dec_set_render_params( st_ivas, nCldfbSlots ); - - return; -} -#else void ivas_spar_dec_digest_tc_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const Word16 nchan_transport, /* i : number of transport channels Q0*/ @@ -2911,135 +1655,6 @@ void ivas_spar_dec_digest_tc_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ivas_spar_dec_upmixer() - * - * - *-------------------------------------------------------------------*/ - -void ivas_spar_dec_upmixer( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output[], /* i/o: input/output audio channels */ - const int16_t nchan_internal, /* i : number of internal channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - SPAR_DEC_HANDLE hSpar; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - int16_t nchan_transport, nchan_out; - int16_t subframe_idx, n, i; - int16_t n_samples_sf; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - float Pcm_tmp[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - float *pPcm_tmp[MAX_OUTPUT_CHANNELS]; - int16_t nchan_internal_total; - int16_t sba_ch_offset; - - hSpar = st_ivas->hSpar; - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - nchan_out = st_ivas->hIntSetup.nchan_out_woLFE + st_ivas->hIntSetup.num_lfe; - n_samples_sf = JBM_CLDFB_SLOTS_IN_SUBFRAME * NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - nchan_internal_total = nchan_internal; - sba_ch_offset = 0; - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - nchan_internal_total += st_ivas->nchan_ism; - sba_ch_offset = st_ivas->nchan_ism; - } - - for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) - { - output_f_local[n] = output[n + sba_ch_offset]; - } - - for ( n = 0; n < nchan_internal_total; n++ ) - { - st_ivas->hTcBuffer->tc[n] = output[n]; - } - - /*---------------------------------------------------------------------* - * TD decorrelation - *---------------------------------------------------------------------*/ - - for ( i = 0; i < nchan_internal; i++ ) - { - pPcm_tmp[i] = Pcm_tmp[i]; - } - - if ( hSpar->hMdDec->td_decorr_flag ) - { - if ( hSpar->hTdDecorr ) - { - ivas_td_decorr_process( hSpar->hTdDecorr, output_f_local, pPcm_tmp, output_frame ); - - if ( hSpar->hTdDecorr->num_apd_outputs >= ( nchan_internal - nchan_transport ) ) - { - for ( i = 0; i < nchan_internal - nchan_transport; i++ ) - { - mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], st_ivas->hTcBuffer->tc[nchan_internal_total - 1 - i], output_frame ); - } - } - else - { - for ( i = 0; i < nchan_internal - nchan_transport; i++ ) - { - set_zero( st_ivas->hTcBuffer->tc[nchan_internal_total - 1 - i], output_frame ); - } - - for ( i = 0; i < hSpar->hTdDecorr->num_apd_outputs; i++ ) - { - mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], st_ivas->hTcBuffer->tc[nchan_internal_total - 1 - i], output_frame ); - } - } - } - } - - ivas_spar_dec_set_render_params( st_ivas, DEFAULT_JBM_CLDFB_TIMESLOTS ); - - if ( st_ivas->hDirAC != 0 ) - { - ivas_dirac_dec_set_md_map( st_ivas, DEFAULT_JBM_CLDFB_TIMESLOTS ); - } - - for ( subframe_idx = 0; subframe_idx < MAX_PARAM_SPATIAL_SUBFRAMES; subframe_idx++ ) - { - ivas_spar_dec_upmixer_sf( st_ivas, output_f_local, nchan_internal ); - - for ( n = 0; n < nchan_out; n++ ) - { - output_f_local[n] += n_samples_sf; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - for ( n = 0; n < nchan_internal_total; n++ ) - { - st_ivas->hTcBuffer->tc[n] = NULL; - } - - if ( st_ivas->hDirAC != NULL && st_ivas->hSpatParamRendCom != NULL ) - { - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - if ( st_ivas->hDirAC->hConfig->dec_param_estim == 1 ) - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_CLDFB_TIMESLOTS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - else - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_SUBFRAMES_5MS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -3048,7 +1663,6 @@ void ivas_spar_dec_upmixer( * IVAS SPAR upmixer *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_dec_upmixer_sf_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ Word32 *output_fx[], /* o : output audio channels Q11*/ @@ -3434,315 +2048,3 @@ void ivas_spar_dec_upmixer_sf_fx( return; } -#else -void ivas_spar_dec_upmixer_sf( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - float *output[], /* o : output audio channels */ - const int16_t nchan_internal /* i : number of internal channels */ -) -{ - int16_t cldfb_band, num_cldfb_bands, numch_in, numch_out; - float *cldfb_in_ts_re[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; - float *cldfb_in_ts_im[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; - int16_t i, b, ts, out_ch, in_ch; - int16_t num_spar_bands, spar_band, nchan_transport; - int16_t num_in_ingest, split_band; - int16_t slot_size, slot_idx_start; - float *p_tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; - int16_t md_idx; - float Pcm_tmp[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; - int16_t numch_out_dirac; - float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; - int16_t b_skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - DECODER_CONFIG_HANDLE hDecoderConfig; - SPAR_DEC_HANDLE hSpar; - int16_t num_md_sub_frames; - - push_wmops( "ivas_spar_dec_upmixer_sf" ); - hSpar = st_ivas->hSpar; - hDecoderConfig = st_ivas->hDecoderConfig; - nchan_transport = hSpar->hMdDec->spar_md_cfg.nchan_transport; - - num_cldfb_bands = hSpar->hFbMixer->pFb->fb_bin_to_band.num_cldfb_bands; - numch_in = hSpar->hFbMixer->fb_cfg->num_in_chans; - numch_out = hSpar->hFbMixer->fb_cfg->num_out_chans; - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - slot_idx_start = hSpar->slots_rendered; - -#ifdef IVAS_FLOAT_FIXED - for ( i = 0; i < s_max( st_ivas->nchan_ism, 0 ) + nchan_internal; i++ ) - { - floatToFixed_arr32( st_ivas->hTcBuffer->tc[i], st_ivas->hTcBuffer->tc_fx[i], Q11, st_ivas->hTcBuffer->n_samples_available ); - } -#endif // IVAS_FLOAT_FIXED - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - int16_t nchan_ism; - - nchan_ism = st_ivas->nchan_ism; - - for ( i = 0; i < nchan_internal; i++ ) - { - p_tc[i] = st_ivas->hTcBuffer->tc[i + nchan_ism] + slot_idx_start * slot_size; - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - p_tc[i + nchan_internal] = st_ivas->hTcBuffer->tc[i] + slot_idx_start * slot_size; - } - } - } - else - { - for ( i = 0; i < nchan_internal; i++ ) - { - p_tc[i] = st_ivas->hTcBuffer->tc[i] + slot_idx_start * slot_size; - } - } - - - /*---------------------------------------------------------------------* - * TD Decorr and pcm ingest - *---------------------------------------------------------------------*/ - - if ( hSpar->hMdDec->td_decorr_flag ) - { - num_in_ingest = nchan_internal; - } - else - { - num_in_ingest = nchan_transport; - } - - /*---------------------------------------------------------------------* - * PCA decoder - *---------------------------------------------------------------------*/ - - hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; - - - /*---------------------------------------------------------------------* - * Prepare CLDFB buffers - *---------------------------------------------------------------------*/ - - /* set-up pointers */ - if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA ) - { - /* at this point, output channels are used as intermediate procesing buffers */ - for ( in_ch = 0; in_ch < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; in_ch++ ) - { - for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) - { - cldfb_in_ts_re[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands]; - cldfb_in_ts_im[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands + 4 * num_cldfb_bands]; - } - } - } - else - { - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) - { - cldfb_in_ts_re[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands]; - cldfb_in_ts_im[in_ch][ts] = &Pcm_tmp[in_ch][ts * num_cldfb_bands + 4 * num_cldfb_bands]; - } - } - } - - /*---------------------------------------------------------------------* - * CLDFB Processing and Synthesis - *---------------------------------------------------------------------*/ - - num_spar_bands = hSpar->hFbMixer->pFb->filterbank_num_bands; - - /* apply parameters */ - /* determine if we can skip certain data */ - ivas_spar_get_skip_mat( hSpar, numch_out, numch_in, num_spar_bands, b_skip_mat, num_md_sub_frames ); /* this can be precomputed based on bitrate and format*/ - - numch_out_dirac = hDecoderConfig->nchan_out; - - - /* CLDFB analysis of incoming frame */ - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - cldfbAnalysis_ts_ivas( &p_tc[in_ch][ts * num_cldfb_bands], cldfb_in_ts_re[in_ch][ts], cldfb_in_ts_im[in_ch][ts], num_cldfb_bands, st_ivas->cldfbAnaDec[in_ch] ); - } - } - - if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) - { - for ( ; in_ch < st_ivas->nchan_ism + numch_in; in_ch++ ) - { - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - cldfbAnalysis_ts_ivas( &p_tc[in_ch][ts * num_cldfb_bands], cldfb_in_ts_re[in_ch][ts], cldfb_in_ts_im[in_ch][ts], num_cldfb_bands, st_ivas->cldfbAnaDec[in_ch] ); - } - } - } - - if ( ( hDecoderConfig->ivas_total_brate < IVAS_24k4 ) && ( ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA2 ) || ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA3 ) ) ) - { - ivas_spar_calc_smooth_facs( cldfb_in_ts_re[0], cldfb_in_ts_im[0], num_spar_bands, hSpar->subframe_nbslots[hSpar->subframes_rendered], hSpar->subframes_rendered == 0, &hSpar->hFbMixer->pFb->fb_bin_to_band, hSpar->hMdDec->smooth_fac, hSpar->hMdDec->smooth_buf ); - } - - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - md_idx = hSpar->render_to_md_map[ts + slot_idx_start]; - ivas_spar_get_parameters( hSpar, hDecoderConfig, md_idx, numch_out, numch_in, num_spar_bands, mixer_mat ); - if ( ( hDecoderConfig->ivas_total_brate < IVAS_24k4 ) && ( ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA2 ) || ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA3 ) ) ) - { - for ( spar_band = 0; spar_band < num_spar_bands; spar_band++ ) - { - for ( out_ch = 0; out_ch < numch_out; out_ch++ ) - { - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - mixer_mat[out_ch][in_ch][spar_band] = ( 1 - hSpar->hMdDec->smooth_fac[spar_band] ) * mixer_mat[out_ch][in_ch][spar_band] + hSpar->hMdDec->smooth_fac[spar_band] * hSpar->hMdDec->mixer_mat_prev2[out_ch][in_ch][spar_band]; - hSpar->hMdDec->mixer_mat_prev2[out_ch][in_ch][spar_band] = mixer_mat[out_ch][in_ch][spar_band]; - } - } - } - } - - for ( cldfb_band = 0; cldfb_band < num_cldfb_bands; cldfb_band++ ) - { - float out_re[IVAS_SPAR_MAX_CH]; - float out_im[IVAS_SPAR_MAX_CH]; - float cldfb_par; - ivas_fb_bin_to_band_data_t *bin2band = &hSpar->hFbMixer->pFb->fb_bin_to_band; - - for ( out_ch = 0; out_ch < numch_out; out_ch++ ) - { - out_re[out_ch] = 0.0f; - out_im[out_ch] = 0.0f; - - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - if ( b_skip_mat[out_ch][in_ch] == 0 ) - { - if ( cldfb_band < CLDFB_PAR_WEIGHT_START_BAND ) /* tuning parameter, depends on how much SPAR Filters overlap for the CLDFB bands */ - { - spar_band = bin2band->p_cldfb_map_to_spar_band[cldfb_band]; - cldfb_par = mixer_mat[out_ch][in_ch][spar_band]; - } - else - { - cldfb_par = 0.0f; - for ( spar_band = bin2band->p_spar_start_bands[cldfb_band]; spar_band < num_spar_bands; spar_band++ ) - { - /* accumulate contributions from all SPAR bands */ - cldfb_par += mixer_mat[out_ch][in_ch][spar_band] * bin2band->pp_cldfb_weights_per_spar_band[cldfb_band][spar_band]; - } - } - - out_re[out_ch] += cldfb_in_ts_re[in_ch][ts][cldfb_band] * cldfb_par; - out_im[out_ch] += cldfb_in_ts_im[in_ch][ts][cldfb_band] * cldfb_par; - } - } - } - - /*update CLDFB data with the parameter-modified data*/ - for ( out_ch = 0; out_ch < numch_out; out_ch++ ) - { - cldfb_in_ts_re[out_ch][ts][cldfb_band] = out_re[out_ch]; - cldfb_in_ts_im[out_ch][ts][cldfb_band] = out_im[out_ch]; - } - } - - if ( ( ( slot_idx_start + ts + 1 ) == hSpar->num_slots ) || ( ( md_idx / JBM_CLDFB_SLOTS_IN_SUBFRAME ) != ( hSpar->render_to_md_map[ts + slot_idx_start + 1] / JBM_CLDFB_SLOTS_IN_SUBFRAME ) ) ) - { - /* we have crossed an unadapted parameter sf border, update previous mixing matrices */ - int16_t md_sf = md_idx / JBM_CLDFB_SLOTS_IN_SUBFRAME; - split_band = SPAR_DIRAC_SPLIT_START_BAND; - md_sf = ( num_md_sub_frames == MAX_PARAM_SPATIAL_SUBFRAMES ) ? md_sf : 0; - if ( split_band < IVAS_MAX_NUM_BANDS ) - { - mvr2r( hSpar->hMdDec->mixer_mat_prev[1][0][0], hSpar->hMdDec->mixer_mat_prev[0][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[2][0][0], hSpar->hMdDec->mixer_mat_prev[1][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[3][0][0], hSpar->hMdDec->mixer_mat_prev[2][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[4][0][0], hSpar->hMdDec->mixer_mat_prev[3][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_SPAR_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - - for ( out_ch = 0; out_ch < numch_out; out_ch++ ) - { - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - for ( b = 0; b < num_spar_bands; b++ ) - { - hSpar->hMdDec->mixer_mat_prev[4][out_ch][in_ch][b] = hSpar->hMdDec->mixer_mat[out_ch][in_ch][b + md_sf * IVAS_MAX_NUM_BANDS]; - } - } - } - hSpar->i_subframe++; - hSpar->i_subframe = min( hSpar->i_subframe, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - } - - if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA && hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_STEREO && hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_MONO ) - { -#ifndef IVAS_FLOAT_FIXED - ivas_dirac_dec_render_sf( st_ivas, output, nchan_internal, cldfb_in_ts_re, cldfb_in_ts_im ); -#else - ivas_dirac_dec_render_sf_fx( st_ivas, output, nchan_internal, cldfb_in_ts_re, cldfb_in_ts_im ); -#endif - } - - if ( st_ivas->hDirAC != NULL ) - { - int16_t outchannels, idx_in, idx_lfe, ch; - idx_in = 0; - idx_lfe = 0; - - outchannels = st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe; - - for ( ch = 0; ch < outchannels; ch++ ) - { - if ( ( st_ivas->hOutSetup.num_lfe > 0 ) && ( st_ivas->hOutSetup.index_lfe[idx_lfe] == ch ) ) - { - set_zero( output[ch], hSpar->subframe_nbslots[hSpar->subframes_rendered] * num_cldfb_bands ); - if ( idx_lfe < ( st_ivas->hDirACRend->hOutSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - if ( ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA || !( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) && - !( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) ) - { - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - cldfbSynthesis_ivas( &cldfb_in_ts_re[idx_in][ts], &cldfb_in_ts_im[idx_in][ts], &output[ch][ts * num_cldfb_bands], num_cldfb_bands, st_ivas->cldfbSynDec[idx_in] ); - } - } - idx_in++; - } - } - } - else - { - /* CLDFB to time synthesis (overwrite mixer output) */ - for ( out_ch = 0; out_ch < numch_out_dirac; out_ch++ ) - { - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - cldfbSynthesis_ivas( &cldfb_in_ts_re[out_ch][ts], &cldfb_in_ts_im[out_ch][ts], &output[out_ch][ts * num_cldfb_bands], num_cldfb_bands, st_ivas->cldfbSynDec[out_ch] ); - } - } - } - - hSpar->slots_rendered += hSpar->subframe_nbslots[hSpar->subframes_rendered]; - hSpar->subframes_rendered++; - - pop_wmops(); - - return; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_spar_md_dec.c b/lib_dec/ivas_spar_md_dec.c index 5b3d2000b..c33c5da63 100644 --- a/lib_dec/ivas_spar_md_dec.c +++ b/lib_dec/ivas_spar_md_dec.c @@ -39,7 +39,6 @@ #include #include "wmc_auto.h" #include "ivas_stat_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" @@ -86,179 +85,6 @@ static ivas_error ivas_deindex_real_index_fx( const Word16 *index, const Word16 static void ivas_spar_dec_parse_md_bs_fx( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, Word16 *nB, Word16 *bands_bw, Word16 *dtx_vad, const Word32 ivas_total_brate, const Word16 sba_inactive_mode ); -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * ivas_spar_md_dec_matrix_open() - * - * Allocate and initialize SPAR MD decoder matrices - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_md_dec_matrix_open( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_channels, /* i : number of internal channels */ - const int16_t num_md_sub_frames /* i : number of MD subframes */ -) -{ - int16_t i, j; - int16_t k; - if ( ( hMdDec->spar_md.band_coeffs = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * num_md_sub_frames * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); - } - if ( ( hMdDec->band_coeffs_prev = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); - } - if ( ( hMdDec->mixer_mat = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->mixer_mat[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->mixer_mat[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs.C_re[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs.P_re[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_prev.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_prev.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_prev.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_prev.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_prev.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_prev.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_tar.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_tar.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_tar.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_tar.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_tar.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_tar.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_prev.P_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_tar.C_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_tar.P_re[i][j][k] = 0.0f; - } - } - } - - return IVAS_ERR_OK; -} - -#else ivas_error ivas_spar_md_dec_matrix_open_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const Word16 num_channels, /* i : number of internal channels Q0*/ @@ -426,7 +252,6 @@ ivas_error ivas_spar_md_dec_matrix_open_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- * ivas_get_spar_dec_md_num_subframes() @@ -435,7 +260,6 @@ ivas_error ivas_spar_md_dec_matrix_open_fx( *------------------------------------------------------------------------*/ /*! r: number of MD subframes */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_spar_dec_md_num_subframes( const Word16 sba_order, /* i : Ambisonic (SBA) order Q0*/ const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ @@ -466,33 +290,6 @@ Word16 ivas_get_spar_dec_md_num_subframes( return ( num_subframes ); /*Q0*/ } -#else -int16_t ivas_get_spar_dec_md_num_subframes( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int32_t ivas_last_active_brate /* i : IVAS last active bitrate */ -) -{ - int16_t num_subframes; - - num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; - if ( sba_order > SBA_FOA_ORDER ) - { - if ( ivas_total_brate >= IVAS_512k ) - { - num_subframes = 1; - } - } - - if ( ( ivas_total_brate <= IVAS_SID_5k2 && ivas_last_active_brate < IVAS_24k4 ) || ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate < IVAS_24k4 ) ) - { - - num_subframes = 1; - } - - return ( num_subframes ); -} -#endif /*------------------------------------------------------------------------- @@ -533,18 +330,18 @@ ivas_error ivas_spar_md_dec_open( { IF( EQ_16( sid_format, SID_SBA_2TC ) ) { - hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); /*Q0*/ + hMdDec->table_idx = ivas_get_spar_table_idx_fx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); /*Q0*/ move16(); } ELSE { - hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + hMdDec->table_idx = ivas_get_spar_table_idx_fx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); move16(); } } ELSE { - hMdDec->table_idx = ivas_get_spar_table_idx( hDecoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); + hMdDec->table_idx = ivas_get_spar_table_idx_fx( hDecoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); move16(); } @@ -565,120 +362,6 @@ ivas_error ivas_spar_md_dec_open( * Deallocate SPAR MD decoder matrices *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_md_dec_matrix_close( - ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ - const int16_t num_channels /* i : number of internal channels */ -) -{ - int16_t i, j; - - if ( hMdDecoder->spar_md.band_coeffs != NULL ) - { - free( hMdDecoder->spar_md.band_coeffs ); - hMdDecoder->spar_md.band_coeffs = NULL; - } - if ( hMdDecoder->band_coeffs_prev != NULL ) - { - free( hMdDecoder->band_coeffs_prev ); - hMdDecoder->band_coeffs_prev = NULL; - } - - if ( hMdDecoder->mixer_mat != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->mixer_mat[i][j] ); - } - free( hMdDecoder->mixer_mat[i] ); - } - free( hMdDecoder->mixer_mat ); - } - - if ( hMdDecoder->spar_coeffs.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs.C_re[i] ); - } - free( hMdDecoder->spar_coeffs.C_re ); - } - - if ( hMdDecoder->spar_coeffs.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs.P_re[i] ); - } - free( hMdDecoder->spar_coeffs.P_re ); - } - - if ( hMdDecoder->spar_coeffs_prev.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_prev.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_prev.C_re[i] ); - } - free( hMdDecoder->spar_coeffs_prev.C_re ); - } - - if ( hMdDecoder->spar_coeffs_prev.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_prev.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_prev.P_re[i] ); - } - free( hMdDecoder->spar_coeffs_prev.P_re ); - } - - if ( hMdDecoder->spar_coeffs_tar.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_tar.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_tar.C_re[i] ); - } - free( hMdDecoder->spar_coeffs_tar.C_re ); - } - - if ( hMdDecoder->spar_coeffs_tar.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_tar.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_tar.P_re[i] ); - } - free( hMdDecoder->spar_coeffs_tar.P_re ); - } - - return; -} - -#else void ivas_spar_md_dec_matrix_close_fx( ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ const Word16 num_channels /* i : number of internal channels Q0*/ @@ -787,7 +470,6 @@ void ivas_spar_md_dec_matrix_close_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_spar_md_dec_close() @@ -820,179 +502,86 @@ Word32 pFC_16k[IVAS_MAX_NUM_BANDS] = { 66, 200, 333, 466, 600, 733, 866, 1133, 1 Word32 pFC_32k[IVAS_MAX_NUM_BANDS] = { 133, 400, 666, 933, 1200, 1466, 1733, 2266, 3466, 5333, 8133, 12933 }; /*Q0*/ Word32 pFC_48k[IVAS_MAX_NUM_BANDS] = { 199, 600, 1000, 1400, 1800, 2200, 2600, 3400, 5200, 8000, 12200, 19400 }; /*Q0*/ -#ifndef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_md_dec_init() * * SPAR MD decoder initialization *-----------------------------------------------------------------------------------------*/ - ivas_error ivas_spar_md_dec_init( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const int16_t num_channels, /* i : number of internal channels */ - const int16_t sba_order /* i : SBA order */ + const Word16 num_channels, /* i : number of internal channels Q0*/ + const Word16 sba_order /* i : SBA order Q0*/ ) { - int16_t i, j; - int16_t nchan_transport; - float pFC[IVAS_MAX_NUM_BANDS], PR_minmax[2]; + Word16 i, j; + Word16 nchan_transport; + Word32 *pFC_fx = NULL, PR_minmax_fx[2]; ivas_error error; - ivas_sba_get_spar_hoa_md_flag( sba_order, hDecoderConfig->ivas_total_brate, &hMdDec->spar_hoa_md_flag, &hMdDec->spar_hoa_dirac2spar_md_flag ); + ivas_sba_get_spar_hoa_md_flag_fx( sba_order, hDecoderConfig->ivas_total_brate, &hMdDec->spar_hoa_md_flag, &hMdDec->spar_hoa_dirac2spar_md_flag ); - ivas_sba_get_spar_hoa_ch_ind( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); + ivas_sba_get_spar_hoa_ch_ind_fx( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); - hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + IF( hMdDec->spar_hoa_md_flag ) + { + hMdDec->spar_md.num_bands = IVAS_MAX_NUM_BANDS; + move16(); + } + ELSE + { + hMdDec->spar_md.num_bands = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); + move16(); + } - ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands, hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 ); + ivas_spar_set_bitrate_config_fx( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands, hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 ); nchan_transport = hMdDec->spar_md_cfg.nchan_transport; + move16(); - /* get FB coefficients */ - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) + IF( EQ_32( hDecoderConfig->output_Fs, 8000 ) ) + { + pFC_fx = pFC_8k; /*Q0*/ + } + ELSE IF( EQ_32( hDecoderConfig->output_Fs, 12800 ) ) + { + pFC_fx = pFC_12k; /*Q0*/ + } + ELSE IF( EQ_32( hDecoderConfig->output_Fs, 16000 ) ) + { + pFC_fx = pFC_16k; /*Q0*/ + } + ELSE IF( EQ_32( hDecoderConfig->output_Fs, 32000 ) ) + { + pFC_fx = pFC_32k; /*Q0*/ + } + ELSE IF( EQ_32( hDecoderConfig->output_Fs, 48000 ) ) + { + pFC_fx = pFC_48k; /*Q0*/ + } + ELSE { - pFC[i] = ivas_fb_fcs_12band_1ms[i] * hDecoderConfig->output_Fs * 0.5f; + assert( 0 ); // update sample rate } - if ( ( error = ivas_spar_set_dec_config( hMdDec, nchan_transport, pFC ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_spar_set_dec_config( hMdDec, nchan_transport, pFC_fx ) ), IVAS_ERR_OK ) ) { return error; } - if ( nchan_transport != 2 && ( ( hMdDec->spar_md_cfg.remix_unmix_order == 2 ) || ( hMdDec->spar_md_cfg.remix_unmix_order == 1 ) ) ) + test(); + test(); + IF( NE_16( nchan_transport, 2 ) && ( EQ_16( hMdDec->spar_md_cfg.remix_unmix_order, 2 ) || EQ_16( hMdDec->spar_md_cfg.remix_unmix_order, 1 ) ) ) { return IVAS_ERR_INTERNAL; } /* DTX quant init */ - PR_minmax[0] = hMdDec->spar_md_cfg.quant_strat[0].PR.min; - PR_minmax[1] = hMdDec->spar_md_cfg.quant_strat[0].PR.max; - ivas_spar_quant_dtx_init( &hMdDec->spar_md, PR_minmax ); - - ivas_spar_arith_coeffs_com_init( &hMdDec->arith_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); - ivas_spar_huff_coeffs_com_init( &hMdDec->huff_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); - - hMdDec->spar_md_cfg.prev_quant_idx = -1; - - /* initialize PLC state */ - set_s( hMdDec->valid_bands, 0, IVAS_MAX_NUM_BANDS ); - set_s( hMdDec->base_band_age, 0, IVAS_MAX_NUM_BANDS ); - set_s( hMdDec->base_band_coeffs_age, 0, IVAS_MAX_NUM_BANDS ); - hMdDec->spar_plc_num_lost_frames = 0; - hMdDec->spar_plc_enable_fadeout_flag = 1; - hMdDec->dtx_md_smoothing_cntr = 1; - - ivas_clear_band_coeffs( hMdDec->spar_md.band_coeffs, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeffs( hMdDec->band_coeffs_prev, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md_prev.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md_prev.band_coeffs_idx_mapped, IVAS_MAX_NUM_BANDS ); - - hMdDec->spar_md.dtx_vad = 0; - hMdDec->td_decorr_flag = 1; - - set_f( hMdDec->spar_md.en_ratio_slow, 0.0f, IVAS_MAX_NUM_BANDS ); - set_f( hMdDec->spar_md.ref_pow_slow, 0.0f, IVAS_MAX_NUM_BANDS ); - - set_zero( hMdDec->smooth_fac, IVAS_MAX_NUM_BANDS ); - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - set_zero( hMdDec->smooth_buf[i], 2 * SBA_DIRAC_NRG_SMOOTH_LONG + 1 ); - } - - for ( i = 0; i < IVAS_SPAR_MAX_CH; i++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH; j++ ) - { - set_zero( hMdDec->mixer_mat_prev2[i][j], IVAS_MAX_NUM_BANDS ); - } - } - hMdDec->first_valid_frame = 1; - - return IVAS_ERR_OK; -} -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_dec_init() - * - * SPAR MD decoder initialization - *-----------------------------------------------------------------------------------------*/ -ivas_error ivas_spar_md_dec_init( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const Word16 num_channels, /* i : number of internal channels Q0*/ - const Word16 sba_order /* i : SBA order Q0*/ -) -{ - Word16 i, j; - Word16 nchan_transport; - Word32 *pFC_fx = NULL, PR_minmax_fx[2]; - ivas_error error; - - ivas_sba_get_spar_hoa_md_flag_fx( sba_order, hDecoderConfig->ivas_total_brate, &hMdDec->spar_hoa_md_flag, &hMdDec->spar_hoa_dirac2spar_md_flag ); - - ivas_sba_get_spar_hoa_ch_ind_fx( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); - - IF( hMdDec->spar_hoa_md_flag ) - { - hMdDec->spar_md.num_bands = IVAS_MAX_NUM_BANDS; - move16(); - } - ELSE - { - hMdDec->spar_md.num_bands = s_min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - move16(); - } - - ivas_spar_set_bitrate_config_fx( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands, hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 ); - - nchan_transport = hMdDec->spar_md_cfg.nchan_transport; - move16(); - - IF( EQ_32( hDecoderConfig->output_Fs, 8000 ) ) - { - pFC_fx = pFC_8k; /*Q0*/ - } - ELSE IF( EQ_32( hDecoderConfig->output_Fs, 12800 ) ) - { - pFC_fx = pFC_12k; /*Q0*/ - } - ELSE IF( EQ_32( hDecoderConfig->output_Fs, 16000 ) ) - { - pFC_fx = pFC_16k; /*Q0*/ - } - ELSE IF( EQ_32( hDecoderConfig->output_Fs, 32000 ) ) - { - pFC_fx = pFC_32k; /*Q0*/ - } - ELSE IF( EQ_32( hDecoderConfig->output_Fs, 48000 ) ) - { - pFC_fx = pFC_48k; /*Q0*/ - } - ELSE - { - assert( 0 ); // update sample rate - } - - IF( NE_32( ( error = ivas_spar_set_dec_config( hMdDec, nchan_transport, pFC_fx ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - test(); - IF( NE_16( nchan_transport, 2 ) && ( EQ_16( hMdDec->spar_md_cfg.remix_unmix_order, 2 ) || EQ_16( hMdDec->spar_md_cfg.remix_unmix_order, 1 ) ) ) - { - return IVAS_ERR_INTERNAL; - } - - /* DTX quant init */ - PR_minmax_fx[0] = hMdDec->spar_md_cfg.quant_strat[0].PR.min_fx; /*Q28*/ - move32(); - PR_minmax_fx[1] = hMdDec->spar_md_cfg.quant_strat[0].PR.max_fx; /*Q28*/ - move32(); - ivas_spar_quant_dtx_init_fx( &hMdDec->spar_md, PR_minmax_fx ); + PR_minmax_fx[0] = hMdDec->spar_md_cfg.quant_strat[0].PR.min_fx; /*Q28*/ + move32(); + PR_minmax_fx[1] = hMdDec->spar_md_cfg.quant_strat[0].PR.max_fx; /*Q28*/ + move32(); + ivas_spar_quant_dtx_init_fx( &hMdDec->spar_md, PR_minmax_fx ); ivas_spar_arith_coeffs_com_init_fx( &hMdDec->arith_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); ivas_spar_huff_coeffs_com_init_fx( &hMdDec->huff_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); @@ -1046,15 +635,12 @@ ivas_error ivas_spar_md_dec_init( return IVAS_ERR_OK; } -#endif - /*-----------------------------------------------------------------------------------------* * Function ivas_spar_set_dec_config() * * Set configuration for SPAR MD decoder *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_spar_set_dec_config( ivas_spar_md_dec_state_t *hMdDec, const Word16 nchan_transport, @@ -1118,60 +704,6 @@ static ivas_error ivas_spar_set_dec_config( return IVAS_ERR_OK; } -#else -static ivas_error ivas_spar_set_dec_config( - ivas_spar_md_dec_state_t *hMdDec, - const int16_t nchan_transport, - float *pFC ) -{ - int16_t i, j, nchan, dmx_ch; - - for ( i = 0; i < nchan_transport; i++ ) - { - hMdDec->spar_md_cfg.max_freq_per_chan[i] = ivas_spar_br_table_consts[hMdDec->table_idx].fpcs; - } - - nchan = ivas_sba_get_nchan_metadata( ivas_spar_br_table_consts[hMdDec->table_idx].sba_order, ivas_spar_br_table_consts[hMdDec->table_idx].ivas_total_brate ); - - switch ( nchan ) - { - case 4: /* FOA_CHANNELS */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_3CH; - break; - case 9: /* IVAS_HOA_2_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_5CH; - break; - case 6: /* IVAS_HOA_2_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_2CH; - break; - case 8: /* IVAS_HOA_3_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_4CH; - break; - } - - hMdDec->spar_md_cfg.num_umx_chs = nchan; - - dmx_ch = 0; - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - dmx_ch = 0; - for ( j = 0; j < nchan_transport; j++ ) - { - if ( pFC[i] < hMdDec->spar_md_cfg.max_freq_per_chan[j] ) - { - dmx_ch += 1; - } - } - - hMdDec->spar_md_cfg.num_dmx_chans_per_band[i] = hMdDec->spar_md_cfg.nchan_transport; - hMdDec->spar_md_cfg.num_decorr_per_band[i] = nchan - hMdDec->spar_md_cfg.nchan_transport; - } - - hMdDec->spar_md_cfg.nchan_transport = dmx_ch; - - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -1180,61 +712,6 @@ static ivas_error ivas_spar_set_dec_config( * *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_dec_mono_sba_handling( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t mono_flag, b, block; - - mono_flag = 1; - - FOR( b = 0; b < st_ivas->hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - FOR( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - float azimuth = st_ivas->hQMetaData->q_direction[0].band_data[b].azimuth[block]; - float elevation = st_ivas->hQMetaData->q_direction[0].band_data[b].azimuth[block]; - float energy_ratio = st_ivas->hQMetaData->q_direction[0].band_data[0].energy_ratio[block]; - if ( - ( azimuth != 0.0f ) || - ( elevation != 0.0f ) || - ( energy_ratio > 0.15f ) ) /* 0.15f is just above the lowest quantised value. */ - { - mono_flag = 0; - } - } - } - - /* Combine the SPAR prediction coefs flag with the azimuth, elevation and energy ratio flag.*/ - mono_flag = mono_flag && ivas_spar_chk_zero_coefs( st_ivas ); - - if ( mono_flag ) - { - /* Set Energy Ratio values to be zero */ - for ( b = 0; b < st_ivas->hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - set_zero( st_ivas->hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - if ( st_ivas->hDirAC != NULL ) - { - for ( block = 0; block < st_ivas->hSpatParamRendCom->dirac_md_buffer_length; ++block ) - { - /* Set directional Energy Ratio values to be zero */ - set_zero( st_ivas->hSpatParamRendCom->energy_ratio1[block], st_ivas->hSpatParamRendCom->num_freq_bands ); - if ( st_ivas->hQMetaData->no_directions == 2 ) - { - set_zero( st_ivas->hSpatParamRendCom->energy_ratio2[block], st_ivas->hSpatParamRendCom->num_freq_bands ); - } - /* Set Diffuseness values to be 1.0 */ - set_f( st_ivas->hSpatParamRendCom->diffuseness_vector[block], 1.0f, st_ivas->hSpatParamRendCom->num_freq_bands ); - } - } - } - - return; -} -#else static void ivas_dec_mono_sba_handling_fx( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) @@ -1297,10 +774,8 @@ static void ivas_dec_mono_sba_handling_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_md_dec_process_fx() * @@ -1444,235 +919,57 @@ void ivas_spar_md_dec_process_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_dec_process() - * - * SPAR Meta Data decoder process - *-----------------------------------------------------------------------------------------*/ -void ivas_spar_md_dec_process( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ + +Word16 ivas_spar_chk_zero_coefs_fx( + Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ) { - int16_t j, k, b, bw, dtx_vad, nB, i_ts; + Word16 j, k, b; ivas_spar_md_dec_state_t *hMdDec; - int16_t num_md_chs; - int16_t num_md_sub_frames; - int16_t dyn_active_w_flag; - int16_t active_w_vlbr; + Word16 mono = 1; + move16(); + Word16 ndec, ndm; hMdDec = st_ivas->hSpar->hMdDec; + ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; /*Q0*/ + move16(); + ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; /*Q0*/ + move16(); - active_w_vlbr = ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? 1 : 0; - - num_md_chs = ivas_sba_get_nchan_metadata( sba_order, st_ivas->hDecoderConfig->ivas_total_brate ); - - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - - if ( hMdDec->spar_md_cfg.nchan_transport > 1 && hMdDec->spar_md_cfg.nchan_transport <= 3 ) + FOR( b = 0; b < min( hMdDec->spar_md.num_bands, SPAR_DIRAC_SPLIT_START_BAND ); b++ ) { - hMdDec->spar_md.res_ind = 0; - dyn_active_w_flag = get_next_indice( st0, 1 ); - if ( dyn_active_w_flag == 1 ) + FOR( j = 0; j < sub( add( ndm, ndec ), 1 ); j++ ) { - if ( hMdDec->spar_md_cfg.nchan_transport == 2 ) - { - hMdDec->spar_md.res_ind = get_next_indice( st0, 1 ); - hMdDec->spar_md.res_ind += hMdDec->spar_md_cfg.nchan_transport; - } - else if ( hMdDec->spar_md_cfg.nchan_transport == 3 ) + if ( hMdDec->spar_md.band_coeffs[b].pred_re_fx[j] != 0 ) { - hMdDec->spar_md.res_ind = remix_order_set[hMdDec->spar_md_cfg.remix_unmix_order][hMdDec->spar_md_cfg.nchan_transport]; + mono = 0; + move16(); } } - } - else - { - dyn_active_w_flag = 0; - if ( hMdDec->spar_md_cfg.nchan_transport == FOA_CHANNELS ) - { - get_next_indice( st0, 1 ); - } - } - - ivas_spar_dec_parse_md_bs( hMdDec, st0, &nB, &bw, &dtx_vad, st_ivas->hDecoderConfig->ivas_total_brate, - st_ivas->hQMetaData->sba_inactive_mode ); - - assert( nB == hMdDec->spar_md.num_bands ); - assert( bw == 1 ); - ivas_spar_md_fill_invalid_bandcoeffs( - hMdDec->spar_md.band_coeffs, - hMdDec->band_coeffs_prev, - &hMdDec->valid_bands[0], - &hMdDec->base_band_coeffs_age[0], - &hMdDec->first_valid_frame, - nB ); - - ivas_dec_mono_sba_handling( st_ivas ); - - /* SPAR to DirAC conversion */ - if ( hMdDec->spar_hoa_dirac2spar_md_flag == 1 ) - { - ivas_spar_to_dirac( st_ivas, hMdDec, dtx_vad, num_bands_out, bw, dyn_active_w_flag ); - } - - /* set correct number of bands*/ - nB = IVAS_MAX_NUM_BANDS; - - /* expand DirAC MD to all time slots */ - for ( i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( b = 0; b < hMdDec->spar_md.num_bands; b++ ) + FOR( j = 0; j < ndec; j++ ) { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j] = hMdDec->spar_md.band_coeffs[b].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) + FOR( k = 0; k < sub( ndm, 1 ); k++ ) { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) + if ( hMdDec->spar_md.band_coeffs[b].C_re_fx[j][k] != 0 ) { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j][k] = hMdDec->spar_md.band_coeffs[b].C_re[j][k]; + mono = 0; + move16(); } } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + } + FOR( j = 0; j < ndec; j++ ) + { + if ( hMdDec->spar_md.band_coeffs[b].P_re_fx[j] != 0 ) { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[j] = hMdDec->spar_md.band_coeffs[b].P_re[j]; + mono = 0; + move16(); } } } - ivas_get_spar_matrices( hMdDec, num_bands_out, num_md_sub_frames, bw, dtx_vad, nB, num_md_chs, active_w_vlbr, dyn_active_w_flag ); - -#ifdef DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS - { - static FILE *fid = 0; - int16_t band = 9; - if ( !fid ) - { - fid = fopen( "pred_coeffs_dec.txt", "wt" ); - } - fprintf( fid, "%.6f\n", hMdDec->mixer_mat[1][0][band] ); - } -#endif - ivas_spar_md_fill_invalid_bands( &hMdDec->spar_coeffs, &hMdDec->spar_coeffs_prev, &hMdDec->valid_bands[0], &hMdDec->base_band_age[0], num_bands_out, num_md_chs, num_md_sub_frames ); - - - hMdDec->dtx_md_smoothing_cntr = 1; - - return; -} - -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_chk_zero_coefs() - * - * Check for zeroed SPAR coefficients - *-----------------------------------------------------------------------------------------*/ - -int16_t ivas_spar_chk_zero_coefs( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t j, k, b; - ivas_spar_md_dec_state_t *hMdDec; - int16_t mono = 1; - int16_t ndec, ndm; - - hMdDec = st_ivas->hSpar->hMdDec; - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - - for ( b = 0; b < min( hMdDec->spar_md.num_bands, SPAR_DIRAC_SPLIT_START_BAND ); b++ ) - { - for ( j = 0; j < ndm + ndec - 1; j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].pred_re[j] != 0.0f ) - { - mono = 0; - } - } - for ( j = 0; j < ndec; j++ ) - { - for ( k = 0; k < ndm - 1; k++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].C_re[j][k] != 0.0f ) - { - mono = 0; - } - } - } - for ( j = 0; j < ndec; j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].P_re[j] != 0.0f ) - { - mono = 0; - } - } - } - - return mono; -} -#else - -Word16 ivas_spar_chk_zero_coefs_fx( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - Word16 j, k, b; - ivas_spar_md_dec_state_t *hMdDec; - Word16 mono = 1; - move16(); - Word16 ndec, ndm; - - hMdDec = st_ivas->hSpar->hMdDec; - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; /*Q0*/ - move16(); - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; /*Q0*/ - move16(); - - FOR( b = 0; b < min( hMdDec->spar_md.num_bands, SPAR_DIRAC_SPLIT_START_BAND ); b++ ) - { - FOR( j = 0; j < sub( add( ndm, ndec ), 1 ); j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].pred_re_fx[j] != 0 ) - { - mono = 0; - move16(); - } - } - FOR( j = 0; j < ndec; j++ ) - { - FOR( k = 0; k < sub( ndm, 1 ); k++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].C_re_fx[j][k] != 0 ) - { - mono = 0; - move16(); - } - } - } - FOR( j = 0; j < ndec; j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].P_re_fx[j] != 0 ) - { - mono = 0; - move16(); - } - } - } - - return mono; -} -#endif + return mono; +} /*-----------------------------------------------------------------------------------------* @@ -1681,7 +978,6 @@ Word16 ivas_spar_chk_zero_coefs_fx( * Smooth MD during no data frame during DTX *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_smooth_md_dtx_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const Word16 num_bands_out, /* i : number of output bands Q0*/ @@ -1762,76 +1058,6 @@ void ivas_spar_smooth_md_dtx_fx( return; } -#else -void ivas_spar_smooth_md_dtx( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t num_md_sub_frames /* i : number of metadata subframes */ -) -{ - int16_t j, k, b, dmx_ch; - float ramp, tar, prev, new_val; - - ramp = (float) hMdDec->dtx_md_smoothing_cntr / IVAS_DEFAULT_DTX_CNG_RAMP; - - for ( b = 0; b < num_bands_out; b++ ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - - for ( j = 1; j < FOA_CHANNELS; j++ ) - { - for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) - { - prev = hMdDec->spar_coeffs_prev.P_re[j][k][b]; - tar = hMdDec->spar_coeffs_tar.P_re[j][k][b]; - new_val = prev + ( ramp * ( tar - prev ) ); - hMdDec->spar_coeffs.P_re[j][k][b] = new_val; - } - } - - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - prev = hMdDec->spar_coeffs_prev.C_re[j][k][b]; - tar = hMdDec->spar_coeffs_tar.C_re[j][k][b]; - new_val = prev + ( ramp * ( tar - prev ) ); - hMdDec->spar_coeffs.C_re[j][k][b] = new_val; - } - } - } - - /* expand MD to all time slots */ - for ( int16_t i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - - for ( j = 1; j < FOA_CHANNELS; j++ ) - { - for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) - - { - hMdDec->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[j][k][b]; - } - } - - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - hMdDec->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[j][k][b]; - } - } - } - } - - hMdDec->dtx_md_smoothing_cntr = min( hMdDec->dtx_md_smoothing_cntr + 1, IVAS_DEFAULT_DTX_CNG_RAMP ); - - return; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -1840,7 +1066,6 @@ void ivas_spar_smooth_md_dtx( * Set up smoothing of SPAR MD when SID update frame is received *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_setup_md_smoothing_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const Word16 num_bands_out, /* i : number of output bands Q0*/ @@ -1905,67 +1130,6 @@ void ivas_spar_setup_md_smoothing_fx( return; } -#else -void ivas_spar_setup_md_smoothing( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t num_md_sub_frames /* i : number of metadata subframes */ -) -{ - /* copy the coeffs */ - int16_t num_channels, i, j, k; - - num_channels = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs_tar.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs_tar.P_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - ivas_spar_smooth_md_dtx( hMdDec, num_bands_out, num_md_sub_frames ); - - return; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -1974,7 +1138,6 @@ void ivas_spar_setup_md_smoothing( * Update previous and target MD *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_update_md_hist_fx( ivas_spar_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ ) @@ -2034,347 +1197,63 @@ void ivas_spar_update_md_hist_fx( return; } -#else -void ivas_spar_update_md_hist( - ivas_spar_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ -) -{ - int16_t num_channels, i, j, k; - - num_channels = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_get_spar_matrices() * * Get SPAR matrices *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_get_spar_matrices( + +static void ivas_get_spar_matrices_fx( ivas_spar_md_dec_state_t *hMdDec, - const int16_t num_bands_out, - const int16_t n_ts, - const int16_t bw, - const int16_t dtx_vad, - const int16_t nB, - const int16_t numch_out, - const int16_t active_w_vlbr, - const int16_t dyn_active_w_flag ) + const Word16 num_bands_out, /*Q0*/ + const Word16 n_ts, /*Q0*/ + const Word16 bw, /*Q0*/ + const Word16 dtx_vad, /*Q0*/ + const Word16 nB, /*Q0*/ + const Word16 numch_out, /*Q0*/ + const Word16 active_w_vlbr, /*Q0*/ + const Word16 dyn_active_w_flag /*Q0*/ ) { - int16_t num_bands, dmx_ch, split_band; - int16_t i, j, k, m, b, i_ts, active_w; - const int16_t *order; - float active_w_dm_fac, re; - + Word16 num_bands, dmx_ch, split_band; + Word16 i, j, k, m, b, i_ts, active_w; + const Word16 *order; + Word32 active_w_dm_fac_fx, re_fx, re_fx1; num_bands = num_bands_out; + move16(); order = remix_order_set[hMdDec->spar_md_cfg.remix_unmix_order]; split_band = SPAR_DIRAC_SPLIT_START_BAND; - if ( split_band >= IVAS_MAX_NUM_BANDS ) + move16(); + + // Dead code as SPAR_DIRAC_SPLIT_START_BAND = 8 and IVAS_MAX_NUM_BANDS = 12 + IF( GE_16( split_band, IVAS_MAX_NUM_BANDS ) ) { /*store previous 4x4 parameters for linear interpolation to current*/ - for ( i = 0; i < numch_out; i++ ) + + FOR( i = 0; i < numch_out; i++ ) { - for ( j = 0; j < numch_out; j++ ) + FOR( j = 0; j < numch_out; j++ ) { - for ( b = 0; b < num_bands; b++ ) + FOR( b = 0; b < num_bands; b++ ) { - hMdDec->mixer_mat_prev[0][i][j][b] = hMdDec->mixer_mat[i][j][b]; + hMdDec->mixer_mat_prev_fx[0][i][j][b] = hMdDec->mixer_mat_fx[i][j][b]; /*hMdDec->Q_mixer_mat*/ + move32(); } } } } - if ( bw == IVAS_RED_BAND_FACT ) + if ( EQ_16( bw, IVAS_RED_BAND_FACT ) ) { - num_bands = num_bands >> 1; + num_bands = shr( num_bands, 1 ); } - active_w = ( dyn_active_w_flag == 1 ) || ( hMdDec->spar_md_cfg.active_w == 1 ); - active_w_dm_fac = ( dtx_vad == 0 ) ? IVAS_ACTIVEW_DM_F_SCALE_DTX : ( ( active_w_vlbr ) ? IVAS_ACTIVEW_DM_F_SCALE_VLBR : IVAS_ACTIVEW_DM_F_SCALE ); + test(); + active_w = EQ_16( dyn_active_w_flag, 1 ) || EQ_16( hMdDec->spar_md_cfg.active_w, 1 ); - for ( i_ts = 0; i_ts < n_ts; i_ts++ ) - { - for ( i = 0; i < numch_out; i++ ) - { - for ( j = 0; j < numch_out; j++ ) - { - set_zero( &hMdDec->spar_coeffs.C_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); - set_zero( &hMdDec->spar_coeffs.P_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); - } - } - num_bands = min( num_bands, nB ); - - for ( b = 0; b < num_bands; b++ ) - { - float tmp_C1_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmp_C2_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmp_dm_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[bw * b]; - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmp_C1_re[j], numch_out ); - set_zero( tmp_C2_re[j], numch_out ); - set_zero( tmp_dm_re[j], numch_out ); - - tmp_C1_re[j][j] = 1.0f; - tmp_C2_re[j][j] = 1.0f; - tmp_dm_re[j][j] = 1.0f; - } - - for ( j = 1; j < numch_out; j++ ) - { - tmp_C1_re[j][0] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; - } - - if ( active_w == 1 ) - { - for ( j = 1; j < numch_out; j++ ) - { - tmp_C2_re[0][j] = active_w_dm_fac * -hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; - } - - IVAS_RMULT_FLOAT( tmp_C2_re[0][1], tmp_C1_re[1][0], re ); - tmp_dm_re[0][0] = 1 + re; - - IVAS_RMULT_FLOAT( tmp_C2_re[0][2], tmp_C1_re[2][0], re ); - tmp_dm_re[0][0] += re; - - IVAS_RMULT_FLOAT( tmp_C2_re[0][3], tmp_C1_re[3][0], re ); - tmp_dm_re[0][0] += re; - - if ( dyn_active_w_flag == 1 ) - { - tmp_dm_re[0][0] *= IVAS_SPAR_DYN_ACTIVEW_THRESH; - } - - tmp_dm_re[0][1] = tmp_C2_re[0][1]; - - tmp_dm_re[0][2] = tmp_C2_re[0][2]; - - tmp_dm_re[0][3] = tmp_C2_re[0][3]; - - tmp_dm_re[1][0] = tmp_C1_re[1][0]; - - tmp_dm_re[2][0] = tmp_C1_re[2][0]; - - tmp_dm_re[3][0] = tmp_C1_re[3][0]; - - if ( hMdDec->spar_md_cfg.remix_unmix_order != 3 ) - { - ivas_mat_col_rearrange( tmp_dm_re, order, i_ts, hMdDec->mixer_mat, b, numch_out ); - } - } - else - { - if ( hMdDec->spar_md_cfg.remix_unmix_order != 3 ) - { - ivas_mat_col_rearrange( tmp_C1_re, order, i_ts, hMdDec->mixer_mat, b, numch_out ); - } - } - - if ( dmx_ch > 0 ) - { - float tmpC_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmpP_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmpC_re[j], numch_out ); - set_zero( tmpP_re[j], numch_out ); - } - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmpC_re[j], numch_out ); - } - - for ( k = 0; k < dmx_ch; k++ ) - { - tmpC_re[k][k] = 1; - } - - for ( j = dmx_ch; j < numch_out; j++ ) - { - for ( k = 1; k < dmx_ch; k++ ) - { - tmpC_re[j][k] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j - dmx_ch][k - 1]; - } - } - - for ( j = dmx_ch; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - if ( ( j - dmx_ch ) == ( k - dmx_ch ) ) - { - tmpP_re[j][k] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[k - dmx_ch]; - } - else - { - tmpP_re[j][k] = 0; - } - } - } - - for ( j = 1; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - for ( m = 0; m < numch_out; m++ ) - { - IVAS_RMULT_FLOAT( hMdDec->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpP_re[m][k], re ); - hMdDec->spar_coeffs.P_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; - } - } - } - - for ( j = 0; j < numch_out; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - for ( m = 0; m < numch_out; m++ ) - { - IVAS_RMULT_FLOAT( hMdDec->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpC_re[m][k], re ); - hMdDec->spar_coeffs.C_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; - } - } - } - - hMdDec->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] = - max( 0, hMdDec->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] ); - } - } - - /* band mixing */ - if ( bw == IVAS_RED_BAND_FACT ) - { - for ( b = 0; b < num_bands_out; b = b + bw ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - for ( j = 0; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - hMdDec->spar_coeffs.P_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - - for ( j = 0; j < numch_out; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - hMdDec->spar_coeffs.C_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - return; -} -#else - -static void ivas_get_spar_matrices_fx( - ivas_spar_md_dec_state_t *hMdDec, - const Word16 num_bands_out, /*Q0*/ - const Word16 n_ts, /*Q0*/ - const Word16 bw, /*Q0*/ - const Word16 dtx_vad, /*Q0*/ - const Word16 nB, /*Q0*/ - const Word16 numch_out, /*Q0*/ - const Word16 active_w_vlbr, /*Q0*/ - const Word16 dyn_active_w_flag /*Q0*/ ) -{ - Word16 num_bands, dmx_ch, split_band; - Word16 i, j, k, m, b, i_ts, active_w; - const Word16 *order; - Word32 active_w_dm_fac_fx, re_fx, re_fx1; - - num_bands = num_bands_out; - move16(); - order = remix_order_set[hMdDec->spar_md_cfg.remix_unmix_order]; - - split_band = SPAR_DIRAC_SPLIT_START_BAND; - move16(); - - // Dead code as SPAR_DIRAC_SPLIT_START_BAND = 8 and IVAS_MAX_NUM_BANDS = 12 - IF( GE_16( split_band, IVAS_MAX_NUM_BANDS ) ) - { - /*store previous 4x4 parameters for linear interpolation to current*/ - - FOR( i = 0; i < numch_out; i++ ) - { - FOR( j = 0; j < numch_out; j++ ) - { - FOR( b = 0; b < num_bands; b++ ) - { - hMdDec->mixer_mat_prev_fx[0][i][j][b] = hMdDec->mixer_mat_fx[i][j][b]; /*hMdDec->Q_mixer_mat*/ - move32(); - } - } - } - } - - if ( EQ_16( bw, IVAS_RED_BAND_FACT ) ) - { - num_bands = shr( num_bands, 1 ); - } - - test(); - active_w = EQ_16( dyn_active_w_flag, 1 ) || EQ_16( hMdDec->spar_md_cfg.active_w, 1 ); - - IF( dtx_vad == 0 ) + IF( dtx_vad == 0 ) { active_w_dm_fac_fx = IVAS_ACTIVEW_DM_F_SCALE_DTX_FX; move32(); @@ -2602,38 +1481,7 @@ static void ivas_get_spar_matrices_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_mat_col_rearrange() - * - * reorders the input matrix based on order - *-----------------------------------------------------------------------------------------*/ - -static void ivas_mat_col_rearrange( - float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t order[IVAS_SPAR_MAX_CH], - const int16_t i_ts, - float ***mixer_mat, - const int16_t bands, - const int16_t num_ch ) -{ - int16_t i, j, idx; - - for ( i = 0; i < num_ch; i++ ) - { - idx = order[i]; - - for ( j = 0; j < num_ch; j++ ) - { - mixer_mat[j][i][bands + i_ts * IVAS_MAX_NUM_BANDS] = in_re[j][idx]; - } - } - return; -} -#else /*-----------------------------------------------------------------------------------------* * Function ivas_mat_col_rearrange() * @@ -2664,14 +1512,12 @@ static void ivas_mat_col_rearrange_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_dec_gen_umx_mat() * * generates upmix matrix *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_dec_gen_umx_mat_fx( ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ const Word16 nchan_transport, /* i : number of transport channels Q0*/ @@ -2729,65 +1575,6 @@ void ivas_spar_dec_gen_umx_mat_fx( ivas_spar_dec_compute_ramp_down_post_matrix_fx( hMdDec, num_bands_out, bfi, num_md_sub_frames ); return; } -#else // IVAS_FLOAT_FIXED - -void ivas_spar_dec_gen_umx_mat( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t bfi, /* i : bad frame indicator */ - const int16_t num_md_sub_frames ) -{ - int16_t i, j, b, i_ts, num_out_ch; - - num_out_ch = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - if ( hMdDec->td_decorr_flag == 1 ) - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < nchan_transport; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = nchan_transport; j < num_out_ch; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - else - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < nchan_transport; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - ivas_spar_dec_compute_ramp_down_post_matrix( hMdDec, num_bands_out, bfi, num_md_sub_frames ); - - return; -} -#endif static void ivas_spar_md_band_upmix( ivas_band_coeffs_t *band_coeffs, @@ -2843,350 +1630,115 @@ static void ivas_spar_md_band_upmix( * Parse SPAR MD bitstream *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_dec_parse_md_bs( +static void ivas_spar_dec_parse_md_bs_fx( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st0, - int16_t *nB, - int16_t *bands_bw, - int16_t *dtx_vad, - const int32_t ivas_total_brate, - const int16_t sba_inactive_mode ) + Word16 *nB, /*Q0*/ + Word16 *bands_bw, /*Q0*/ + Word16 *dtx_vad, /*Q0*/ + const Word32 ivas_total_brate, /*Q0*/ + const Word16 sba_inactive_mode /*Q0*/ ) { - int16_t i, j, k, num_bands; - int16_t ii, jj, ndec, ndm; - uint16_t qsi; + Word16 i, j, k, num_bands; + Word16 ii, jj, ndec, ndm; + UWord16 qsi; ivas_quant_strat_t qs; - int16_t strat, no_ec; - int16_t do_diff[IVAS_MAX_NUM_BANDS]; - float quant[IVAS_SPAR_MAX_C_COEFF]; - int16_t do_repeat[IVAS_MAX_NUM_BANDS]; + Word16 strat, no_ec; + Word16 do_diff[IVAS_MAX_NUM_BANDS]; + Word32 quant_fx[IVAS_SPAR_MAX_C_COEFF]; + Word16 do_repeat[IVAS_MAX_NUM_BANDS]; *dtx_vad = 1; + move16(); *bands_bw = 1; + move16(); qsi = 0; + move16(); num_bands = hMdDec->spar_md.num_bands; + move16(); - if ( ivas_total_brate > IVAS_SID_5k2 ) + IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) { - if ( hMdDec->spar_md_cfg.quant_strat_bits > 0 ) + IF( hMdDec->spar_md_cfg.quant_strat_bits > 0 ) { - if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) + IF( GE_32( ivas_total_brate, BRATE_SPAR_Q_STRAT ) ) { /*only one bit written for quantization strategy to indicate either a fixed quantization strategy or dtx_vad==0 */ - qsi = get_next_indice( st0, 1 ); - if ( qsi == 1 ) + qsi = get_next_indice_fx( st0, 1 ); /*Q0*/ + if ( EQ_32( qsi, 1 ) ) { *dtx_vad = 0; + move16(); } } - else + ELSE { - if ( sba_inactive_mode == 1 ) + IF( EQ_16( sba_inactive_mode, 1 ) ) { *dtx_vad = 0; - qsi = hMdDec->spar_md_cfg.quant_strat_bits + 1; + move16(); + qsi = add( hMdDec->spar_md_cfg.quant_strat_bits, 1 ); } - else + ELSE { - qsi = get_next_indice( st0, hMdDec->spar_md_cfg.quant_strat_bits ); + qsi = get_next_indice_fx( st0, hMdDec->spar_md_cfg.quant_strat_bits ); } } } - else + ELSE { qsi = 0; + move16(); } } - else + ELSE { *dtx_vad = 0; + move16(); } - hMdDec->dtx_vad = *dtx_vad; + hMdDec->dtx_vad = *dtx_vad; /*Q0*/ + move16(); - if ( *dtx_vad == 0 ) + IF( *dtx_vad == 0 ) { *nB = SPAR_DTX_BANDS; - *bands_bw = num_bands / *nB; + move16(); + *bands_bw = idiv1616( num_bands, *nB ); /*Q0*/ + move16(); - for ( i = 0; i < *nB; i++ ) + FOR( i = 0; i < *nB; i++ ) { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) { - hMdDec->spar_md.band_coeffs[i].pred_re[j] = 0; - hMdDec->spar_md.band_coeffs[i].P_re[j] = 0; + hMdDec->spar_md.band_coeffs[i].pred_re_fx[j] = 0; + move32(); + hMdDec->spar_md.band_coeffs[i].P_re_fx[j] = 0; + move32(); } hMdDec->valid_bands[i] = 1; + move16(); } - for ( i = 0; i < num_bands; i++ ) + FOR( i = 0; i < num_bands; i++ ) { - for ( j = 0; j < ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); j++ ) + FOR( j = 0; j < ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); j++ ) { - for ( k = 0; k < ( IVAS_SPAR_MAX_DMX_CHS - 1 ); k++ ) + FOR( k = 0; k < ( IVAS_SPAR_MAX_DMX_CHS - 1 ); k++ ) { - hMdDec->spar_md.band_coeffs[i].C_re[j][k] = 0; + hMdDec->spar_md.band_coeffs[i].C_re_fx[j][k] = 0; + move32(); } } } ivas_parse_parameter_bitstream_dtx( &hMdDec->spar_md, st0, *bands_bw, *nB, hMdDec->spar_md_cfg.num_dmx_chans_per_band, hMdDec->spar_md_cfg.num_decorr_per_band ); - if ( *bands_bw != 1 ) + IF( NE_16( *bands_bw, 1 ) ) { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - ivas_spar_md_band_upmix( - hMdDec->spar_md.band_coeffs, - nB, - bands_bw, - hMdDec->valid_bands, - 1, - ndec, - ndm ); - } - - return; - } - - qs = hMdDec->spar_md_cfg.quant_strat[qsi]; - - strat = get_next_indice( st0, 3 ); - - no_ec = 0; - - if ( strat < 2 ) - { - *bands_bw = strat + 1; - *nB = num_bands / *bands_bw; - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = 0; - } - } - else if ( strat < 4 ) - { - *bands_bw = strat - 1; - *nB = num_bands / *bands_bw; - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = 0; - } - no_ec = 1; - } - else if ( ivas_total_brate < IVAS_24k4 ) - { - *bands_bw = 2; - *nB = num_bands / *bands_bw; - - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = ( ( strat % 2 ) == ( ( i + 1 ) % 2 ) ); - } - } - else - { - *bands_bw = 1; - *nB = num_bands; - - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != strat - 4 ); - do_repeat[i] = 0; - } - if ( hMdDec->spar_md_cfg.prev_quant_idx >= 0 ) - { - ivas_map_prior_coeffs_quant( &hMdDec->spar_md_prev, &hMdDec->spar_md_cfg, qsi, *nB ); - } - } - hMdDec->spar_md_cfg.prev_quant_idx = qsi; - - if ( no_ec == 0 ) - { - ivas_decode_arith_bs( hMdDec, st0, qsi, *nB, *bands_bw, do_diff, strat, ivas_total_brate ); - } - else - { - ivas_decode_huffman_bs( hMdDec, st0, qsi, *nB, *bands_bw ); - } - - for ( i = 0; i < *nB; i++ ) - { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[( *bands_bw ) * i]; - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].pred_index_re, qs.PR.q_levels[0], qs.PR.min, qs.PR.max, hMdDec->spar_md.band_coeffs[i].pred_re, ndm + ndec - 1 ); - - j = 0; - for ( ii = 0; ii < ndec; ii++ ) - { - for ( jj = 0; jj < ndm - 1; jj++ ) - { - quant[j] = hMdDec->spar_md.band_coeffs[i].C_re[ii][jj]; - j++; - } - } - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].drct_index_re, qs.C.q_levels[0], qs.C.min, qs.C.max, quant, ndec * ( ndm - 1 ) ); - - j = 0; - for ( ii = 0; ii < ndec; ii++ ) - { - for ( jj = 0; jj < ndm - 1; jj++ ) - { - hMdDec->spar_md.band_coeffs[i].C_re[ii][jj] = quant[j]; - j++; - } - } - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].decd_index_re, qs.P_r.q_levels[0], qs.P_r.min, qs.P_r.max, hMdDec->spar_md.band_coeffs[i].P_re, ndm + ndec - 1 ); - - /* Store prior coefficient indices */ - for ( j = 0; j < ndm + ndec - 1; j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].pred_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j]; - } - for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].drct_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].drct_index_re[j]; - } - for ( j = 0; j < ndec; j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].decd_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].decd_index_re[j]; - } - hMdDec->valid_bands[i] |= ( do_diff[i] == 0 && do_repeat[i] == 0 ) ? 1 : 0; - } - - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - if ( *bands_bw != 1 ) - { - ivas_spar_md_band_upmix( - hMdDec->spar_md.band_coeffs, - nB, - bands_bw, - hMdDec->valid_bands, - 1, - ndec, - ndm ); - } - - - return; -} -#else -static void ivas_spar_dec_parse_md_bs_fx( - ivas_spar_md_dec_state_t *hMdDec, - Decoder_State *st0, - Word16 *nB, /*Q0*/ - Word16 *bands_bw, /*Q0*/ - Word16 *dtx_vad, /*Q0*/ - const Word32 ivas_total_brate, /*Q0*/ - const Word16 sba_inactive_mode /*Q0*/ ) -{ - Word16 i, j, k, num_bands; - Word16 ii, jj, ndec, ndm; - UWord16 qsi; - ivas_quant_strat_t qs; - Word16 strat, no_ec; - Word16 do_diff[IVAS_MAX_NUM_BANDS]; - Word32 quant_fx[IVAS_SPAR_MAX_C_COEFF]; - Word16 do_repeat[IVAS_MAX_NUM_BANDS]; - *dtx_vad = 1; - move16(); - *bands_bw = 1; - move16(); - qsi = 0; - move16(); - num_bands = hMdDec->spar_md.num_bands; - move16(); - - IF( GT_32( ivas_total_brate, IVAS_SID_5k2 ) ) - { - IF( hMdDec->spar_md_cfg.quant_strat_bits > 0 ) - { - IF( GE_32( ivas_total_brate, BRATE_SPAR_Q_STRAT ) ) - { - /*only one bit written for quantization strategy to indicate either a fixed quantization strategy or dtx_vad==0 */ - qsi = get_next_indice_fx( st0, 1 ); /*Q0*/ - if ( EQ_32( qsi, 1 ) ) - { - *dtx_vad = 0; - move16(); - } - } - ELSE - { - IF( EQ_16( sba_inactive_mode, 1 ) ) - { - *dtx_vad = 0; - move16(); - qsi = add( hMdDec->spar_md_cfg.quant_strat_bits, 1 ); - } - ELSE - { - qsi = get_next_indice_fx( st0, hMdDec->spar_md_cfg.quant_strat_bits ); - } - } - } - ELSE - { - qsi = 0; - move16(); - } - } - ELSE - { - *dtx_vad = 0; - move16(); - } - - hMdDec->dtx_vad = *dtx_vad; /*Q0*/ - move16(); - - IF( *dtx_vad == 0 ) - { - *nB = SPAR_DTX_BANDS; - move16(); - *bands_bw = idiv1616( num_bands, *nB ); /*Q0*/ - move16(); - - FOR( i = 0; i < *nB; i++ ) - { - FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[i].pred_re_fx[j] = 0; - move32(); - hMdDec->spar_md.band_coeffs[i].P_re_fx[j] = 0; - move32(); - } - hMdDec->valid_bands[i] = 1; - move16(); - } - - FOR( i = 0; i < num_bands; i++ ) - { - FOR( j = 0; j < ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); j++ ) - { - FOR( k = 0; k < ( IVAS_SPAR_MAX_DMX_CHS - 1 ); k++ ) - { - hMdDec->spar_md.band_coeffs[i].C_re_fx[j][k] = 0; - move32(); - } - } - } - - ivas_parse_parameter_bitstream_dtx( &hMdDec->spar_md, st0, *bands_bw, *nB, hMdDec->spar_md_cfg.num_dmx_chans_per_band, hMdDec->spar_md_cfg.num_decorr_per_band ); - - IF( NE_16( *bands_bw, 1 ) ) - { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; /*Q0*/ - move16(); - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; /*Q0*/ - move16(); + ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; /*Q0*/ + move16(); + ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; /*Q0*/ + move16(); ivas_spar_md_band_upmix( hMdDec->spar_md.band_coeffs, nB, @@ -3368,7 +1920,6 @@ static void ivas_spar_dec_parse_md_bs_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -3377,7 +1928,6 @@ static void ivas_spar_dec_parse_md_bs_fx( * Decode bitstream with arith decoder *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_decode_arith_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ @@ -3716,39 +2266,7 @@ move16(); return; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_get_plc_interp_weights( - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], - int16_t last_valid_band_idx, - int16_t idx, - int16_t b, - float *w, - int16_t *id0, - int16_t *id1 ) -{ - if ( last_valid_band_idx < 0 ) /* Extrapolation */ - { - *id1 = valid_band_idx[0]; - *id0 = 0; - *w = 1; - } - else if ( last_valid_band_idx == idx ) /* Extrapolation */ - { - *id1 = valid_band_idx[last_valid_band_idx]; - *id0 = valid_band_idx[last_valid_band_idx]; - *w = 0; - } - else /* Interpolation */ - { - *id0 = valid_band_idx[last_valid_band_idx]; - *id1 = valid_band_idx[last_valid_band_idx + 1]; - *w = ( (float) ( b - *id0 ) ) / ( *id1 - *id0 ); - } - return; -} -#else static void ivas_spar_get_plc_interp_weights_fx( Word16 valid_band_idx[IVAS_MAX_NUM_BANDS], /*Q0*/ @@ -3796,9 +2314,7 @@ static void ivas_spar_get_plc_interp_weights_fx( } return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_md_fill_invalid_bands_fx() * @@ -3885,121 +2401,41 @@ static void ivas_spar_md_fill_invalid_bands_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_fill_invalid_bands() - * - * Fill invalid bands in interpolation/extrapolation of valid bands - * when PLC is to be done with partial time differential coding - *-----------------------------------------------------------------------------------------*/ -static void ivas_spar_md_fill_invalid_bands( - ivas_spar_dec_matrices_t *pSpar_coeffs, - ivas_spar_dec_matrices_t *pSpar_coeffs_prev, - const int16_t *valid_bands, - int16_t *base_band_age, - const int16_t num_bands, - const int16_t num_channels, - const int16_t num_md_sub_frames ) + +static void ivas_spar_md_fill_invalid_bandcoeffs( + ivas_band_coeffs_t *pBand_coeffs, + ivas_band_coeffs_t *pBand_coeffs_prev, + const Word16 *valid_bands, /*Q0*/ + Word16 *base_band_age, /*Q0*/ + Word16 *first_valid_frame, /*Q0*/ + const Word16 num_bands /*Q0*/ ) { - int16_t i, j, b, all_valid; - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; - int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS]; - float w = 0; + Word16 j, k, b, all_valid; + Word16 valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; + move16(); + Word16 last_valid_band_idx[IVAS_MAX_NUM_BANDS]; + Word16 w_fx = 0; + move16(); + ivas_spar_plc_get_band_age( valid_bands, base_band_age, num_bands, last_valid_band_idx, valid_band_idx, &all_valid, &idx ); + assert( idx > 0 ); /* some bands should be valid */ - if ( all_valid == 0 ) + IF( all_valid == 0 ) { - for ( b = 0; b < num_bands; b++ ) + FOR( b = 0; b < num_bands; b++ ) { /* check against non zero in if and else if */ - if ( base_band_age[b] > 3 ) /* old invalid bands */ + test(); + IF( GT_16( base_band_age[b], 3 ) || ( *first_valid_frame == 0 ) ) /* old invalid bands */ { - int16_t id0, id1; - ivas_spar_get_plc_interp_weights( valid_band_idx, last_valid_band_idx[b], - idx, b, &w, &id0, &id1 ); - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - pSpar_coeffs->C_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->C_re[i][j][id0] + w * pSpar_coeffs->C_re[i][j][id1]; - pSpar_coeffs->P_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->P_re[i][j][id0] + w * pSpar_coeffs->P_re[i][j][id1]; - } - } - } - else /* young invalid bands */ - { - if ( valid_bands[b] == 0 ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - pSpar_coeffs->C_re[i][j][b] = pSpar_coeffs_prev->C_re[i][j][b]; - pSpar_coeffs->P_re[i][j][b] = pSpar_coeffs_prev->P_re[i][j][b]; - } - } - } - } - - if ( valid_bands[b] == 0 ) - { - int16_t i_ts; - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - pSpar_coeffs->C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->C_re[i][j][b]; - pSpar_coeffs->P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->P_re[i][j][b]; - } - } - } - } - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -static void ivas_spar_md_fill_invalid_bandcoeffs( - ivas_band_coeffs_t *pBand_coeffs, - ivas_band_coeffs_t *pBand_coeffs_prev, - const Word16 *valid_bands, /*Q0*/ - Word16 *base_band_age, /*Q0*/ - Word16 *first_valid_frame, /*Q0*/ - const Word16 num_bands /*Q0*/ ) -{ - Word16 j, k, b, all_valid; - Word16 valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; - move16(); - Word16 last_valid_band_idx[IVAS_MAX_NUM_BANDS]; - Word16 w_fx = 0; - move16(); - - ivas_spar_plc_get_band_age( valid_bands, base_band_age, num_bands, - last_valid_band_idx, valid_band_idx, &all_valid, &idx ); - - assert( idx > 0 ); /* some bands should be valid */ - - IF( all_valid == 0 ) - { - FOR( b = 0; b < num_bands; b++ ) - { - /* check against non zero in if and else if */ - test(); - IF( GT_16( base_band_age[b], 3 ) || ( *first_valid_frame == 0 ) ) /* old invalid bands */ - { - Word16 id0, id1; - - ivas_spar_get_plc_interp_weights_fx( valid_band_idx, last_valid_band_idx[b], - idx, b, &w_fx, &id0, &id1 ); - - FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) + Word16 id0, id1; + + ivas_spar_get_plc_interp_weights_fx( valid_band_idx, last_valid_band_idx[b], + idx, b, &w_fx, &id0, &id1 ); + + FOR( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) { pBand_coeffs[b].pred_re_fx[j] = L_add( Mpy_32_16_1( pBand_coeffs[id0].pred_re_fx[j], sub( MAX_WORD16, w_fx ) ), Mpy_32_16_1( pBand_coeffs[id1].pred_re_fx[j], w_fx ) ); /*Q22*/ move32(); @@ -4056,87 +2492,6 @@ static void ivas_spar_md_fill_invalid_bandcoeffs( return; } -#else -static void ivas_spar_md_fill_invalid_bandcoeffs( - ivas_band_coeffs_t *pBand_coeffs, - ivas_band_coeffs_t *pBand_coeffs_prev, - const int16_t *valid_bands, - int16_t *base_band_age, - int16_t *first_valid_frame, - const int16_t num_bands ) -{ - int16_t j, k, b, all_valid; - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; - int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS]; - float w = 0; - - ivas_spar_plc_get_band_age( valid_bands, base_band_age, num_bands, - last_valid_band_idx, valid_band_idx, &all_valid, &idx ); - - assert( idx > 0 ); /* some bands should be valid */ - - if ( all_valid == 0 ) - { - for ( b = 0; b < num_bands; b++ ) - { - /* check against non zero in if and else if */ - if ( ( base_band_age[b] > 3 ) || ( *first_valid_frame == 0 ) ) /* old invalid bands */ - { - int16_t id0, id1; - ivas_spar_get_plc_interp_weights( valid_band_idx, last_valid_band_idx[b], - idx, b, &w, &id0, &id1 ); - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].pred_re[j] = ( 1 - w ) * pBand_coeffs[id0].pred_re[j] + w * pBand_coeffs[id1].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) - { - pBand_coeffs[b].C_re[j][k] = ( 1 - w ) * pBand_coeffs[id0].C_re[j][k] + w * pBand_coeffs[id1].C_re[j][k]; - } - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].P_re[j] = ( 1 - w ) * pBand_coeffs[id0].P_re[j] + w * pBand_coeffs[id1].P_re[j]; - } - } - else /* young invalid bands */ - { - if ( valid_bands[b] == 0 ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].pred_re[j] = pBand_coeffs_prev[b].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) - { - pBand_coeffs[b].C_re[j][k] = pBand_coeffs_prev[b].C_re[j][k]; - } - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].P_re[j] = pBand_coeffs_prev[b].P_re[j]; - } - } - } - } - } - else - { - *first_valid_frame = 1; - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_dec_compute_ramp_down_post_matrix_fx() @@ -4144,7 +2499,6 @@ static void ivas_spar_md_fill_invalid_bandcoeffs( * *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_spar_dec_compute_ramp_down_post_matrix_fx( ivas_spar_md_dec_state_t *hMdDec, const Word16 num_bands_out, /*Q0*/ @@ -4221,69 +2575,6 @@ static void ivas_spar_dec_compute_ramp_down_post_matrix_fx( return; } -#else -static void ivas_spar_dec_compute_ramp_down_post_matrix( - ivas_spar_md_dec_state_t *hMdDec, - const int16_t num_bands_out, - const int16_t bfi, - const int16_t num_md_sub_frames ) -{ - int16_t num_in_ch, num_out_ch, i, j, b; - - num_in_ch = hMdDec->spar_md_cfg.num_umx_chs; - num_out_ch = hMdDec->spar_md_cfg.num_umx_chs; - - if ( bfi == 0 ) - { - hMdDec->spar_plc_num_lost_frames = 0; - } - else - { - if ( hMdDec->td_decorr_flag == 0 ) - { - assert( 0 ); - } - - hMdDec->spar_plc_num_lost_frames += 1; - hMdDec->spar_plc_num_lost_frames = min( hMdDec->spar_plc_num_lost_frames, 100 ); - - if ( hMdDec->spar_plc_num_lost_frames > ivas_spar_dec_plc_num_frames_keep ) - { - int16_t num_fade_frames; - int16_t gain_dB; - float gain; - float post_matrix[IVAS_SPAR_MAX_CH]; - - num_fade_frames = max( hMdDec->spar_plc_num_lost_frames - ivas_spar_dec_plc_num_frames_keep, 0 ); - gain_dB = -min( num_fade_frames, ivas_spar_dec_plc_max_num_frames_ramp_down ) * ivas_spar_dec_plc_per_frame_ramp_down_gain_dB; - gain = powf( 10, ( ( (float) gain_dB ) / 20 ) ); - - for ( i = 0; i < IVAS_SPAR_MAX_CH; i++ ) - { - post_matrix[i] = 1 + min( ( (float) num_fade_frames ) / ivas_spar_dec_plc_num_frames_fade_out, 1 ) * ( ivas_spar_dec_plc_spatial_target[i] - 1 ); - post_matrix[i] *= gain; - } - - /* apply the post matrix */ - for ( int16_t i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < num_in_ch; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] *= post_matrix[i]; - } - } - } - } - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* @@ -4291,7 +2582,6 @@ static void ivas_spar_dec_compute_ramp_down_post_matrix( * * Unquantize SPAR MD DYX indices *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_spar_unquant_dtx_indicies( ivas_spar_md_t *pSpar_md, const Word16 nB, /*Q0*/ @@ -4338,51 +2628,12 @@ static void ivas_spar_unquant_dtx_indicies( return; } -#else -static void ivas_spar_unquant_dtx_indicies( - ivas_spar_md_t *pSpar_md, - const int16_t nB, - const int16_t bw, - int16_t *ndm_per_band ) -{ - int16_t i, b; - int16_t q_lvl; - float val; - int16_t idx; - float pr_min_max[2]; - - pr_min_max[0] = pSpar_md->min_max[0]; - pr_min_max[1] = pSpar_md->min_max[1]; - - for ( b = 0; b < nB; b++ ) - { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) - { - q_lvl = dtx_pr_real_q_levels[ndm_per_band[bw * b] - 1][i]; - idx = pSpar_md->band_coeffs_idx[b].pred_index_re[i]; - ivas_deindex_real_index( &idx, q_lvl, pr_min_max[0], pr_min_max[1], &val, 1 ); - pSpar_md->band_coeffs[b].pred_re[i] = val; - } - - for ( i = 0; i < FOA_CHANNELS - ndm_per_band[bw * b]; i++ ) - { - q_lvl = dtx_pd_real_q_levels[ndm_per_band[bw * b] - 1][i]; - idx = pSpar_md->band_coeffs_idx[b].decd_index_re[i]; - ivas_deindex_real_index( &idx, q_lvl, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], &val, 1 ); - pSpar_md->band_coeffs[b].P_re[i] = val; - } - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_parse_parameter_bitstream_dtx() * * parse DTX bitstream parameters *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_parse_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ @@ -4498,96 +2749,6 @@ static void ivas_parse_parameter_bitstream_dtx( return; } -#else -static void ivas_parse_parameter_bitstream_dtx( - ivas_spar_md_t *pSpar_md, - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const int16_t bw, - const int16_t num_bands, - int16_t *num_dmx_per_band, - int16_t *num_dec_per_band ) -{ - int16_t i, j, ndec, ndm; - float val; - int16_t idx; - float pr_min_max[2]; - int16_t pr_q_lvls, pr, pd, pd_q_lvls, pr_pd_bits; - int16_t zero_pad_bits, sid_bits_len; - - sid_bits_len = st0->next_bit_pos; - pr_min_max[0] = pSpar_md->min_max[0]; - pr_min_max[1] = pSpar_md->min_max[1]; - - for ( i = 0; i < num_bands; i++ ) - { - ndec = num_dec_per_band[bw * i]; - ndm = num_dmx_per_band[bw * i]; - - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) - { - int16_t pr_idx_1, pr_idx_2, pd_idx_1, pd_idx_2; - uint16_t value; - - pr_idx_1 = pr_pr_idx_pairs[ndm - 1][j][0]; - pr_idx_2 = pr_pr_idx_pairs[ndm - 1][j][1]; - pd_idx_1 = pr_pd_idx_pairs[ndm - 1][j][0]; - pd_idx_2 = pr_pd_idx_pairs[ndm - 1][j][1]; - - if ( pr_idx_1 != 0 || pd_idx_1 != 0 || pr_idx_2 != 0 || pd_idx_2 != 0 ) - { - pr_q_lvls = dtx_pr_real_q_levels[ndm - 1][pd_idx_1 - 1]; - - if ( ( j + 1 ) > ndec ) - { - pd_q_lvls = 1; - } - else - { - pd_q_lvls = dtx_pd_real_q_levels[ndm - 1][pd_idx_2 - 1]; - } - - pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - - value = get_next_indice( st0, pr_pd_bits ); - - pr = (int16_t) floor( value / pd_q_lvls ); - pd = value - pr * pd_q_lvls; - val = dtx_pd_real_min_max[0]; - ivas_quantise_real_values( &val, pd_q_lvls, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], &idx, &val, 1 ); - pd = pd + idx; - - val = pr_min_max[0]; - ivas_quantise_real_values( &val, pr_q_lvls, pr_min_max[0], pr_min_max[1], &idx, &val, 1 ); - pr = pr + idx; - - if ( ( j + 1 ) <= ndec ) - { - pSpar_md->band_coeffs_idx[i].decd_index_re[pd_idx_2 - 1] = pd; - } - - pSpar_md->band_coeffs_idx[i].pred_index_re[pd_idx_1 - 1] = pr; - } - } - } - - sid_bits_len = st0->next_bit_pos - sid_bits_len; - zero_pad_bits = ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - sid_bits_len; - assert( zero_pad_bits >= 0 ); - if ( num_dmx_per_band[0] == 2 ) - { - zero_pad_bits -= 1; - } - - for ( j = 0; j < zero_pad_bits; j++ ) - { - get_next_indice( st0, 1 ); - } - - ivas_spar_unquant_dtx_indicies( pSpar_md, num_bands, bw, num_dmx_per_band ); - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_deindex_real_index() @@ -4595,42 +2756,6 @@ static void ivas_parse_parameter_bitstream_dtx( * Deindex real index *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error ivas_deindex_real_index( - const int16_t *index, - const int16_t q_levels, - const float min_value, - const float max_value, - float *quant, - const int16_t dim ) -{ - int16_t i; - float q_step; - - if ( q_levels == 0 ) - { - return IVAS_ERR_INTERNAL; - } - - if ( q_levels == 1 ) - { - for ( i = 0; i < dim; i++ ) - { - quant[i] = 0; - } - } - else - { - q_step = ( max_value - min_value ) / ( q_levels - 1 ); - for ( i = 0; i < dim; i++ ) - { - quant[i] = index[i] * q_step; - } - } - - return IVAS_ERR_OK; -} -#else static ivas_error ivas_deindex_real_index_fx( const Word16 *index, /*Q0*/ @@ -4668,310 +2793,33 @@ static ivas_error ivas_deindex_real_index_fx( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_to_dirac() - * - * - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_to_dirac( +void ivas_spar_to_dirac_fx( Decoder_Struct *st_ivas, - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t dtx_vad, /* i : DTX frame flag */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t bw, /* i : band joining factor */ - const int16_t dyn_active_w_flag ) + ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle Q0*/ + const Word16 dtx_vad, /* i : DTX frame flag Q0*/ + const Word16 num_bands_out, /* i : number of output bands Q0*/ + const Word16 bw, /* i : band joining factor Q0*/ + const Word16 dyn_active_w_flag ) { DIRAC_DEC_HANDLE hDirAC; - int16_t start_band, end_band, band, qmf_band_start, qmf_band_end; - int16_t block, b; - int16_t *band_grouping; - float diffuseness[IVAS_MAX_NUM_BANDS]; - int16_t sba_order_internal; - float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t azi[IVAS_MAX_NUM_BANDS]; - int16_t ele[IVAS_MAX_NUM_BANDS]; - float dvx[IVAS_MAX_NUM_BANDS], dvy[IVAS_MAX_NUM_BANDS], dvz[IVAS_MAX_NUM_BANDS]; - float radius; - float en_ratio, res_pow; - int16_t num_slots_in_subfr; - int16_t tmp_write_idx_param_band; - int16_t tmp_write_idx_band; - float pred_re_20ms[IVAS_MAX_NUM_BANDS][IVAS_SPAR_MAX_CH - 1]; - int16_t pred_idx; - int16_t *dirac_to_spar_md_bands; - int16_t enc_param_start_band; - int16_t active_w_vlbr; - int16_t i, num_subframes; - int16_t active_w; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - active_w = ( dyn_active_w_flag == 1 ) || ( hMdDec->spar_md_cfg.active_w == 1 ); - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - start_band = 0; - end_band = min( num_bands_out, SPAR_DIRAC_SPLIT_START_BAND ) / bw; + Word16 start_band, end_band, band, qmf_band_start, qmf_band_end; + Word16 block, b; + Word16 *band_grouping; - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; + Word32 diffuseness_fx[IVAS_MAX_NUM_BANDS]; + Word16 sba_order_internal; - dirac_to_spar_md_bands = st_ivas->hSpar->dirac_to_spar_md_bands; - enc_param_start_band = st_ivas->hSpar->enc_param_start_band / bw; - active_w_vlbr = ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? 1 : 0; + Word32 azi_dirac_fx[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - if ( hDirAC != NULL && ivas_get_hodirac_flag( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ) == 0 ) - { - band_grouping = hDirAC->band_grouping; - num_slots_in_subfr = st_ivas->hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; + Word32 ele_dirac_fx[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; + Word16 azi[IVAS_MAX_NUM_BANDS]; + Word16 ele[IVAS_MAX_NUM_BANDS]; - for ( band = start_band; band < end_band; band++ ) - { - float PR[3], Pd[3], dvnorm, g_pred; + Word32 dvx_fx[IVAS_MAX_NUM_BANDS], dvy_fx[IVAS_MAX_NUM_BANDS], dvz_fx[IVAS_MAX_NUM_BANDS]; - PR[0] = hMdDec->spar_md.band_coeffs[band].pred_re[2]; - PR[1] = hMdDec->spar_md.band_coeffs[band].pred_re[0]; - PR[2] = hMdDec->spar_md.band_coeffs[band].pred_re[1]; - g_pred = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - if ( g_pred <= EPSILON ) - { - dvx[band] = 1.0f; - dvy[band] = 0.0f; - dvz[band] = 0.0f; - } - else - { - g_pred = sqrtf( g_pred ); - dvnorm = 1.0f / g_pred; - dvx[band] = PR[0] * dvnorm; - dvy[band] = PR[1] * dvnorm; - dvz[band] = PR[2] * dvnorm; - } - - radius = sqrtf( dvx[band] * dvx[band] + dvy[band] * dvy[band] ); - azi[band] = (int16_t) ( max( -180.0f, min( 180.0f, atan2f( dvy[band], dvx[band] ) / EVS_PI * 180.0f ) ) + 0.5f ); - ele[band] = (int16_t) ( max( -90.0f, min( 180.0f, atan2f( dvz[band], radius ) / EVS_PI * 180.0f ) ) + 0.5f ); - - if ( st_ivas->nchan_transport == 1 ) - { - float w_en_norm, f_scale; - if ( active_w ) - { - if ( dtx_vad == 0 ) - { - f_scale = IVAS_ACTIVEW_DM_F_SCALE_DTX; - } - else - { - f_scale = ( active_w_vlbr ) ? IVAS_ACTIVEW_DM_F_SCALE_VLBR : IVAS_ACTIVEW_DM_F_SCALE; - } - } - else - { - f_scale = 0.0f; - } - - w_en_norm = ( 1.0f - ( f_scale * g_pred * g_pred ) ); - w_en_norm *= w_en_norm; - - Pd[0] = hMdDec->spar_md.band_coeffs[band].P_re[1]; - Pd[1] = hMdDec->spar_md.band_coeffs[band].P_re[0]; - Pd[2] = hMdDec->spar_md.band_coeffs[band].P_re[2]; - en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - res_pow = w_en_norm + en_ratio + ( Pd[0] * Pd[0] + Pd[1] * Pd[1] + Pd[2] * Pd[2] ); - res_pow *= 0.5f; - hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; - hMdDec->spar_md.ref_pow_slow[band] = 0.75f * hMdDec->spar_md.ref_pow_slow[band] + 0.25f * res_pow; - en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ) / ( hMdDec->spar_md.ref_pow_slow[band] + EPSILON ); - } - else - { - en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; - en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ); - } - diffuseness[band] = 1.0f - en_ratio; /*compute diffuseness*/ - diffuseness[band] = ( ( diffuseness[band] < 1.0f ) ? ( ( diffuseness[band] < 0.0f ) ? 0.f : diffuseness[band] ) : 1.0f ); - } - - for ( band = start_band; band < end_band; band++ ) - { - int16_t azi_dith, ele_dith; - tmp_write_idx_param_band = hDirAC->spar_to_dirac_write_idx; - - en_ratio = 1.0f - diffuseness[band]; - masa_sq( 1.0f - en_ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - qmf_band_start = band_grouping[band]; - qmf_band_end = band_grouping[band + 1]; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - int16_t ts_start, ts_end, ts; - - ts_start = DirAC_block_grouping[block]; - ts_end = DirAC_block_grouping[block + 1]; - for ( b = qmf_band_start; b < qmf_band_end; b++ ) - { - - azi_dith = azi[band]; - ele_dith = ele[band]; - - hSpatParamRendCom->energy_ratio1[block][b] = en_ratio; - tmp_write_idx_band = tmp_write_idx_param_band; - - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele_dith; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi_dith; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; - } - else - { - for ( ts = ts_start; ts < ts_end; ts++ ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele_dith; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi_dith; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; - tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - tmp_write_idx_param_band = ( tmp_write_idx_param_band + num_slots_in_subfr ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - - /* update buffer write index */ - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; - } - else - { - hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + CLDFB_NO_COL_MAX ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - else - { - band = end_band; - } - - /*read DirAC metadata, convert DirAC to SPAR*/ - for ( ; band < num_bands_out / bw; band++ ) - { - int16_t dirac_band_idx; - - dirac_band_idx = dirac_to_spar_md_bands[band] - enc_param_start_band; - - num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; - if ( st_ivas->hQMetaData->useLowerRes ) - { - num_subframes = 1; - } - - for ( block = 0; block < num_subframes; block++ ) - { - if ( st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] < 0.f ) - { - st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] += 360.f; - } - azi_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block]; - ele_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].elevation[block]; - } - - diffuseness[band] = 1.0f - st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].energy_ratio[0]; - } - - /* DirAC MD averaged over 4 subframes and converted to SPAR format similar to encoder processing */ - if ( hMdDec->spar_md_cfg.nchan_transport > 1 ) - { - ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, 1, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, end_band, num_bands_out, ( hMdDec->spar_hoa_md_flag ) ? 1 : sba_order_internal, dtx_vad, NULL, st_ivas->hQMetaData->useLowerRes, active_w_vlbr, dyn_active_w_flag ); - - /* temporarily copy frame-wise prediction coefficients in DirAC bands*/ - for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - pred_re_20ms[band][pred_idx] = hMdDec->spar_md.band_coeffs[band].pred_re[pred_idx]; - } - } - } - - int16_t num_md_sub_frames; - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order_internal, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, num_md_sub_frames, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, end_band, num_bands_out / bw, ( hMdDec->spar_hoa_md_flag ) ? 1 : sba_order_internal, dtx_vad, NULL, st_ivas->hQMetaData->useLowerRes, active_w_vlbr, dyn_active_w_flag ); - - if ( st_ivas->hQMetaData->useLowerRes && dtx_vad ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - for ( block = 1; block < num_md_sub_frames; block++ ) - { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].pred_re[i] = hMdDec->spar_md.band_coeffs[band].pred_re[i]; - } - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].P_re[i] = hMdDec->spar_md.band_coeffs[band].P_re[i]; - } - } - } - } - - /* expand DirAC TC 20ms MD for residual channels to all subframes*/ - for ( block = 0; block < num_md_sub_frames; block++ ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - if ( ivas_is_res_channel( pred_idx + 1, hMdDec->spar_md_cfg.nchan_transport ) ) - { - /* use 20ms coefficients only for residual channels */ - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].pred_re[pred_idx] = pred_re_20ms[band][pred_idx]; - } - } - } - } - - for ( b = end_band * bw; b < num_bands_out; b++ ) - { - hMdDec->valid_bands[b] = 1; - } - - return; -} - -#else -void ivas_spar_to_dirac_fx( - Decoder_Struct *st_ivas, - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle Q0*/ - const Word16 dtx_vad, /* i : DTX frame flag Q0*/ - const Word16 num_bands_out, /* i : number of output bands Q0*/ - const Word16 bw, /* i : band joining factor Q0*/ - const Word16 dyn_active_w_flag ) -{ - DIRAC_DEC_HANDLE hDirAC; - Word16 start_band, end_band, band, qmf_band_start, qmf_band_end; - Word16 block, b; - Word16 *band_grouping; - - Word32 diffuseness_fx[IVAS_MAX_NUM_BANDS]; - Word16 sba_order_internal; - - Word32 azi_dirac_fx[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - - Word32 ele_dirac_fx[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - Word16 azi[IVAS_MAX_NUM_BANDS]; - Word16 ele[IVAS_MAX_NUM_BANDS]; - - Word32 dvx_fx[IVAS_MAX_NUM_BANDS], dvy_fx[IVAS_MAX_NUM_BANDS], dvz_fx[IVAS_MAX_NUM_BANDS]; - - Word32 radius_fx; + Word32 radius_fx; Word32 en_ratio_fx, res_pow_fx; Word16 en_ratio_q; @@ -5483,2684 +3331,3 @@ void ivas_spar_to_dirac_fx( return; } -#endif - -#else - -/*------------------------------------------------------------------------------------------* - * Local constants - *------------------------------------------------------------------------------------------*/ - -#define IVAS_DEFAULT_DTX_CNG_RAMP ( 8 ) - -/* PLC constants */ -static const int16_t ivas_spar_dec_plc_num_frames_keep = 9; -static const int16_t ivas_spar_dec_plc_num_frames_fade_out = 9; -static const int16_t ivas_spar_dec_plc_per_frame_ramp_down_gain_dB = 3; -static const int16_t ivas_spar_dec_plc_max_num_frames_ramp_down = 33; -static const int16_t ivas_spar_dec_plc_spatial_target[IVAS_SPAR_MAX_CH] = { 1, 0, 0, 0, 0, 0, 0, 0 }; - - -/*------------------------------------------------------------------------------------------* - * Static functions declaration - *------------------------------------------------------------------------------------------*/ - -static void ivas_get_spar_matrices( ivas_spar_md_dec_state_t *hMdDec, const int16_t num_bands_out, const int16_t n_ts, const int16_t bw, const int16_t dtx_vad, const int16_t nB, const int16_t numch_out, const int16_t active_w_vlbr, const int16_t dyn_active_w_flag ); - -static void ivas_decode_arith_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, const uint16_t qsi, const int16_t nB, const int16_t bands_bw, int16_t *pDo_diff, const int16_t strat, const int32_t ivas_total_brate ); - -static void ivas_decode_huffman_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, const uint16_t qsi, const int16_t nB, const int16_t bands_bw ); - -static void ivas_fill_band_coeffs_idx( ivas_band_coeffs_ind_t *pBands_idx, const int16_t nB, int16_t *pSymbol_re, ivas_cell_dim_t *pCell_dims, ivas_coeffs_type_t coeff_type ); - -static void ivas_mat_col_rearrange( float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const int16_t order[IVAS_SPAR_MAX_CH], const int16_t i_ts, float ***mixer_mat, const int16_t bands, const int16_t num_ch ); - -static void ivas_spar_dec_compute_ramp_down_post_matrix( ivas_spar_md_dec_state_t *hMdDec, const int16_t num_bands, const int16_t bfi, const int16_t num_md_sub_frames ); - -static void ivas_spar_md_fill_invalid_bands( ivas_spar_dec_matrices_t *pSpar_coeffs, ivas_spar_dec_matrices_t *pSpar_coeffs_prev, const int16_t *valid_bands, int16_t *base_band_age, const int16_t num_bands, const int16_t numch_out, const int16_t num_md_sub_frames ); - -static void ivas_spar_md_fill_invalid_bandcoeffs( ivas_band_coeffs_t *pBand_coeffs, ivas_band_coeffs_t *pBand_coeffs_prev, const int16_t *valid_bands, int16_t *base_band_age, int16_t *first_valid_frame, const int16_t num_bands ); -static ivas_error ivas_spar_set_dec_config( ivas_spar_md_dec_state_t *hMdDec, const int16_t nchan_transport, float *pFC ); - -static void ivas_parse_parameter_bitstream_dtx( ivas_spar_md_t *pSpar_md, Decoder_State *st, const int16_t bw, const int16_t num_bands, int16_t *num_dmx_per_band, int16_t *num_dec_per_band ); - -static ivas_error ivas_deindex_real_index( const int16_t *index, const int16_t q_levels, const float min_value, const float max_value, float *quant, const int16_t num_ch_dim2 ); - -static void ivas_spar_dec_parse_md_bs( ivas_spar_md_dec_state_t *hMdDec, Decoder_State *st, int16_t *nB, int16_t *bands_bw, int16_t *dtx_vad, const int32_t ivas_total_brate, const int16_t sba_inactive_mode ); - - -/*------------------------------------------------------------------------- - * ivas_spar_md_dec_matrix_open() - * - * Allocate and initialize SPAR MD decoder matrices - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_md_dec_matrix_open( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_channels, /* i : number of internal channels */ - const int16_t num_md_sub_frames /* i : number of MD subframes */ -) -{ - int16_t i, j; - int16_t k; - if ( ( hMdDec->spar_md.band_coeffs = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * num_md_sub_frames * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); - } - if ( ( hMdDec->band_coeffs_prev = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); - } - if ( ( hMdDec->mixer_mat = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->mixer_mat[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->mixer_mat[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs.C_re[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs.P_re[i][j] = (float *) malloc( num_md_sub_frames * IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_prev.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_prev.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_prev.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_prev.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_prev.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_prev.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_tar.C_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_tar.C_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_tar.C_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - - if ( ( hMdDec->spar_coeffs_tar.P_re = (float ***) malloc( num_channels * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( i = 0; i < num_channels; i++ ) - { - if ( ( hMdDec->spar_coeffs_tar.P_re[i] = (float **) malloc( num_channels * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - for ( j = 0; j < num_channels; j++ ) - { - if ( ( hMdDec->spar_coeffs_tar.P_re[i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_prev.P_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_tar.C_re[i][j][k] = 0.0f; - hMdDec->spar_coeffs_tar.P_re[i][j][k] = 0.0f; - } - } - } - - return IVAS_ERR_OK; -} - - -/*------------------------------------------------------------------------- - * ivas_get_spar_dec_md_num_subframes() - * - * return number of MD subframes - *------------------------------------------------------------------------*/ - -/*! r: number of MD subframes */ -int16_t ivas_get_spar_dec_md_num_subframes( - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int32_t ivas_last_active_brate /* i : IVAS last active bitrate */ -) -{ - int16_t num_subframes; - - num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; - if ( sba_order > SBA_FOA_ORDER ) - { - if ( ivas_total_brate >= IVAS_512k ) - { - num_subframes = 1; - } - } - - if ( ( ivas_total_brate <= IVAS_SID_5k2 && ivas_last_active_brate < IVAS_24k4 ) || ( ivas_total_brate > IVAS_SID_5k2 && ivas_total_brate < IVAS_24k4 ) ) - { - - num_subframes = 1; - } - - return ( num_subframes ); -} - - -/*------------------------------------------------------------------------- - * ivas_spar_md_dec_open() - * - * Allocate and initialize SPAR MD decoder handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_md_dec_open( - ivas_spar_md_dec_state_t **hMdDec_out, /* i/o: SPAR MD decoder handle */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const int16_t num_channels, /* i : number of internal channels */ - const int16_t sba_order, /* i : SBA order */ - const int16_t sid_format, /* i : SID format */ - const int32_t last_active_ivas_total_brate /* i : IVAS last active bitrate */ -) -{ - ivas_spar_md_dec_state_t *hMdDec; - ivas_error error; - int16_t num_md_sub_frames; - - error = IVAS_ERR_OK; - - if ( ( hMdDec = (ivas_spar_md_dec_state_t *) malloc( sizeof( ivas_spar_md_dec_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD decoder" ); - } - - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order, hDecoderConfig->ivas_total_brate, last_active_ivas_total_brate ); - - if ( ( error = ivas_spar_md_dec_matrix_open( hMdDec, num_channels, num_md_sub_frames ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hDecoderConfig->ivas_total_brate == IVAS_SID_5k2 ) - { - if ( sid_format == SID_SBA_2TC ) - { - hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_48k, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - } - else - { - hMdDec->table_idx = ivas_get_spar_table_idx( IVAS_24k4, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - } - } - else - { - hMdDec->table_idx = ivas_get_spar_table_idx( hDecoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - } - - if ( ( error = ivas_spar_md_dec_init( hMdDec, hDecoderConfig, num_channels, sba_order ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hMdDec_out = hMdDec; - - return error; -} - - -/*------------------------------------------------------------------------- - * ivas_spar_md_dec_matrix_close() - * - * Deallocate SPAR MD decoder matrices - *------------------------------------------------------------------------*/ - -void ivas_spar_md_dec_matrix_close( - ivas_spar_md_dec_state_t *hMdDecoder, /* i/o: SPAR MD decoder handle */ - const int16_t num_channels /* i : number of internal channels */ -) -{ - int16_t i, j; - - if ( hMdDecoder->spar_md.band_coeffs != NULL ) - { - free( hMdDecoder->spar_md.band_coeffs ); - hMdDecoder->spar_md.band_coeffs = NULL; - } - if ( hMdDecoder->band_coeffs_prev != NULL ) - { - free( hMdDecoder->band_coeffs_prev ); - hMdDecoder->band_coeffs_prev = NULL; - } - - if ( hMdDecoder->mixer_mat != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->mixer_mat[i][j] ); - } - free( hMdDecoder->mixer_mat[i] ); - } - free( hMdDecoder->mixer_mat ); - } - - if ( hMdDecoder->spar_coeffs.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs.C_re[i] ); - } - free( hMdDecoder->spar_coeffs.C_re ); - } - - if ( hMdDecoder->spar_coeffs.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs.P_re[i] ); - } - free( hMdDecoder->spar_coeffs.P_re ); - } - - if ( hMdDecoder->spar_coeffs_prev.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_prev.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_prev.C_re[i] ); - } - free( hMdDecoder->spar_coeffs_prev.C_re ); - } - - if ( hMdDecoder->spar_coeffs_prev.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_prev.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_prev.P_re[i] ); - } - free( hMdDecoder->spar_coeffs_prev.P_re ); - } - - if ( hMdDecoder->spar_coeffs_tar.C_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_tar.C_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_tar.C_re[i] ); - } - free( hMdDecoder->spar_coeffs_tar.C_re ); - } - - if ( hMdDecoder->spar_coeffs_tar.P_re != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdDecoder->spar_coeffs_tar.P_re[i][j] ); - } - free( hMdDecoder->spar_coeffs_tar.P_re[i] ); - } - free( hMdDecoder->spar_coeffs_tar.P_re ); - } - - return; -} - - -/*------------------------------------------------------------------------- - * ivas_spar_md_dec_close() - * - * Deallocate SPAR MD decoder handle - *------------------------------------------------------------------------*/ - -void ivas_spar_md_dec_close( - ivas_spar_md_dec_state_t **hMdDec /* i/o: SPAR MD decoder handle */ -) -{ - ivas_spar_md_dec_state_t *hMdDecoder; - int16_t num_channels; - - hMdDecoder = *hMdDec; - num_channels = hMdDecoder->spar_md_cfg.num_umx_chs; - - ivas_spar_md_dec_matrix_close( hMdDecoder, num_channels ); - - free( *hMdDec ); - *hMdDec = NULL; - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_dec_init() - * - * SPAR MD decoder initialization - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_spar_md_dec_init( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : configuration structure */ - const int16_t num_channels, /* i : number of internal channels */ - const int16_t sba_order /* i : SBA order */ -) -{ - int16_t i, j; - int16_t nchan_transport; - float pFC[IVAS_MAX_NUM_BANDS], PR_minmax[2]; - ivas_error error; - - ivas_sba_get_spar_hoa_md_flag( sba_order, hDecoderConfig->ivas_total_brate, &hMdDec->spar_hoa_md_flag, &hMdDec->spar_hoa_dirac2spar_md_flag ); - - ivas_sba_get_spar_hoa_ch_ind( num_channels, hDecoderConfig->ivas_total_brate, hMdDec->HOA_md_ind ); - - hMdDec->spar_md.num_bands = ( hMdDec->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND ); - - ivas_spar_set_bitrate_config( &hMdDec->spar_md_cfg, hMdDec->table_idx, hMdDec->spar_md.num_bands, hMdDec->spar_hoa_dirac2spar_md_flag, 0, 0, 0 ); - - nchan_transport = hMdDec->spar_md_cfg.nchan_transport; - - /* get FB coefficients */ - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - pFC[i] = ivas_fb_fcs_12band_1ms[i] * hDecoderConfig->output_Fs * 0.5f; - } - - if ( ( error = ivas_spar_set_dec_config( hMdDec, nchan_transport, pFC ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( nchan_transport != 2 && ( ( hMdDec->spar_md_cfg.remix_unmix_order == 2 ) || ( hMdDec->spar_md_cfg.remix_unmix_order == 1 ) ) ) - { - return IVAS_ERR_INTERNAL; - } - - /* DTX quant init */ - PR_minmax[0] = hMdDec->spar_md_cfg.quant_strat[0].PR.min; - PR_minmax[1] = hMdDec->spar_md_cfg.quant_strat[0].PR.max; - ivas_spar_quant_dtx_init( &hMdDec->spar_md, PR_minmax ); - - ivas_spar_arith_coeffs_com_init( &hMdDec->arith_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); - ivas_spar_huff_coeffs_com_init( &hMdDec->huff_coeffs, &hMdDec->spar_md_cfg, hMdDec->table_idx, DEC ); - - hMdDec->spar_md_cfg.prev_quant_idx = -1; - - /* initialize PLC state */ - set_s( hMdDec->valid_bands, 0, IVAS_MAX_NUM_BANDS ); - set_s( hMdDec->base_band_age, 0, IVAS_MAX_NUM_BANDS ); - set_s( hMdDec->base_band_coeffs_age, 0, IVAS_MAX_NUM_BANDS ); - hMdDec->spar_plc_num_lost_frames = 0; - hMdDec->spar_plc_enable_fadeout_flag = 1; - hMdDec->dtx_md_smoothing_cntr = 1; - - ivas_clear_band_coeffs( hMdDec->spar_md.band_coeffs, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeffs( hMdDec->band_coeffs_prev, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md_prev.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdDec->spar_md_prev.band_coeffs_idx_mapped, IVAS_MAX_NUM_BANDS ); - - hMdDec->spar_md.dtx_vad = 0; - hMdDec->td_decorr_flag = 1; - - set_f( hMdDec->spar_md.en_ratio_slow, 0.0f, IVAS_MAX_NUM_BANDS ); - set_f( hMdDec->spar_md.ref_pow_slow, 0.0f, IVAS_MAX_NUM_BANDS ); - - set_zero( hMdDec->smooth_fac, IVAS_MAX_NUM_BANDS ); - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - set_zero( hMdDec->smooth_buf[i], 2 * SBA_DIRAC_NRG_SMOOTH_LONG + 1 ); - } - - for ( i = 0; i < IVAS_SPAR_MAX_CH; i++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH; j++ ) - { - set_zero( hMdDec->mixer_mat_prev2[i][j], IVAS_MAX_NUM_BANDS ); - } - } - hMdDec->first_valid_frame = 1; - - return IVAS_ERR_OK; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_set_dec_config() - * - * Set configuration for SPAR MD decoder - *-----------------------------------------------------------------------------------------*/ - -static ivas_error ivas_spar_set_dec_config( - ivas_spar_md_dec_state_t *hMdDec, - const int16_t nchan_transport, - float *pFC ) -{ - int16_t i, j, nchan, dmx_ch; - - for ( i = 0; i < nchan_transport; i++ ) - { - hMdDec->spar_md_cfg.max_freq_per_chan[i] = ivas_spar_br_table_consts[hMdDec->table_idx].fpcs; - } - - nchan = ivas_sba_get_nchan_metadata( ivas_spar_br_table_consts[hMdDec->table_idx].sba_order, ivas_spar_br_table_consts[hMdDec->table_idx].ivas_total_brate ); - - switch ( nchan ) - { - case 4: /* FOA_CHANNELS */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_3CH; - break; - case 9: /* IVAS_HOA_2_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_5CH; - break; - case 6: /* IVAS_HOA_2_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_2CH; - break; - case 8: /* IVAS_HOA_3_CH */ - hMdDec->num_decorr = IVAS_TD_DECORR_OUT_4CH; - break; - } - - hMdDec->spar_md_cfg.num_umx_chs = nchan; - - dmx_ch = 0; - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - dmx_ch = 0; - for ( j = 0; j < nchan_transport; j++ ) - { - if ( pFC[i] < hMdDec->spar_md_cfg.max_freq_per_chan[j] ) - { - dmx_ch += 1; - } - } - - hMdDec->spar_md_cfg.num_dmx_chans_per_band[i] = hMdDec->spar_md_cfg.nchan_transport; - hMdDec->spar_md_cfg.num_decorr_per_band[i] = nchan - hMdDec->spar_md_cfg.nchan_transport; - } - - hMdDec->spar_md_cfg.nchan_transport = dmx_ch; - - return IVAS_ERR_OK; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_dec_mono_sba_handling() - * - * - *-----------------------------------------------------------------------------------------*/ - -static void ivas_dec_mono_sba_handling( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t mono_flag, b, block; - - mono_flag = 1; - - for ( b = 0; b < st_ivas->hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; ++block ) - { - float azimuth = st_ivas->hQMetaData->q_direction[0].band_data[b].azimuth[block]; - float elevation = st_ivas->hQMetaData->q_direction[0].band_data[b].azimuth[block]; - float energy_ratio = st_ivas->hQMetaData->q_direction[0].band_data[0].energy_ratio[block]; - if ( - ( azimuth != 0.0f ) || - ( elevation != 0.0f ) || - ( energy_ratio > 0.15f ) ) /* 0.15f is just above the lowest quantised value. */ - { - mono_flag = 0; - } - } - } - - /* Combine the SPAR prediction coefs flag with the azimuth, elevation and energy ratio flag.*/ - mono_flag = mono_flag && ivas_spar_chk_zero_coefs( st_ivas ); - - if ( mono_flag ) - { - /* Set Energy Ratio values to be zero */ - for ( b = 0; b < st_ivas->hQMetaData->q_direction[0].cfg.nbands; b++ ) - { - set_zero( st_ivas->hQMetaData->q_direction[0].band_data[b].energy_ratio, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - if ( st_ivas->hDirAC != NULL ) - { - for ( block = 0; block < st_ivas->hSpatParamRendCom->dirac_md_buffer_length; ++block ) - { - /* Set directional Energy Ratio values to be zero */ - set_zero( st_ivas->hSpatParamRendCom->energy_ratio1[block], st_ivas->hSpatParamRendCom->num_freq_bands ); - if ( st_ivas->hQMetaData->no_directions == 2 ) - { - set_zero( st_ivas->hSpatParamRendCom->energy_ratio2[block], st_ivas->hSpatParamRendCom->num_freq_bands ); - } - /* Set Diffuseness values to be 1.0 */ - set_f( st_ivas->hSpatParamRendCom->diffuseness_vector[block], 1.0f, st_ivas->hSpatParamRendCom->num_freq_bands ); - } - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_dec_process() - * - * SPAR Meta Data decoder process - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_md_dec_process( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - int16_t j, k, b, bw, dtx_vad, nB, i_ts; - ivas_spar_md_dec_state_t *hMdDec; - int16_t num_md_chs; - int16_t num_md_sub_frames; - int16_t dyn_active_w_flag; - int16_t active_w_vlbr; - - hMdDec = st_ivas->hSpar->hMdDec; - - active_w_vlbr = ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? 1 : 0; - - num_md_chs = ivas_sba_get_nchan_metadata( sba_order, st_ivas->hDecoderConfig->ivas_total_brate ); - - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - - if ( hMdDec->spar_md_cfg.nchan_transport > 1 && hMdDec->spar_md_cfg.nchan_transport <= 3 ) - { - hMdDec->spar_md.res_ind = 0; - dyn_active_w_flag = get_next_indice( st0, 1 ); - if ( dyn_active_w_flag == 1 ) - { - if ( hMdDec->spar_md_cfg.nchan_transport == 2 ) - { - hMdDec->spar_md.res_ind = get_next_indice( st0, 1 ); - hMdDec->spar_md.res_ind += hMdDec->spar_md_cfg.nchan_transport; - } - else if ( hMdDec->spar_md_cfg.nchan_transport == 3 ) - { - hMdDec->spar_md.res_ind = remix_order_set[hMdDec->spar_md_cfg.remix_unmix_order][hMdDec->spar_md_cfg.nchan_transport]; - } - } - } - else - { - dyn_active_w_flag = 0; - if ( hMdDec->spar_md_cfg.nchan_transport == FOA_CHANNELS ) - { - get_next_indice( st0, 1 ); - } - } - - ivas_spar_dec_parse_md_bs( hMdDec, st0, &nB, &bw, &dtx_vad, st_ivas->hDecoderConfig->ivas_total_brate, - st_ivas->hQMetaData->sba_inactive_mode ); - - assert( nB == hMdDec->spar_md.num_bands ); - assert( bw == 1 ); - ivas_spar_md_fill_invalid_bandcoeffs( - hMdDec->spar_md.band_coeffs, - hMdDec->band_coeffs_prev, - &hMdDec->valid_bands[0], - &hMdDec->base_band_coeffs_age[0], - &hMdDec->first_valid_frame, - nB ); - - ivas_dec_mono_sba_handling( st_ivas ); - - /* SPAR to DirAC conversion */ - if ( hMdDec->spar_hoa_dirac2spar_md_flag == 1 ) - { - ivas_spar_to_dirac( st_ivas, hMdDec, dtx_vad, num_bands_out, bw, dyn_active_w_flag ); - } - - /* set correct number of bands*/ - nB = IVAS_MAX_NUM_BANDS; - - /* expand DirAC MD to all time slots */ - for ( i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( b = 0; b < hMdDec->spar_md.num_bands; b++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j] = hMdDec->spar_md.band_coeffs[b].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) - { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j][k] = hMdDec->spar_md.band_coeffs[b].C_re[j][k]; - } - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[j] = hMdDec->spar_md.band_coeffs[b].P_re[j]; - } - } - } - - ivas_get_spar_matrices( hMdDec, num_bands_out, num_md_sub_frames, bw, dtx_vad, nB, num_md_chs, active_w_vlbr, dyn_active_w_flag ); - -#ifdef DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS - { - static FILE *fid = 0; - int16_t band = 9; - if ( !fid ) - { - fid = fopen( "pred_coeffs_dec.txt", "wt" ); - } - fprintf( fid, "%.6f\n", hMdDec->mixer_mat[1][0][band] ); - } -#endif - ivas_spar_md_fill_invalid_bands( &hMdDec->spar_coeffs, &hMdDec->spar_coeffs_prev, &hMdDec->valid_bands[0], &hMdDec->base_band_age[0], num_bands_out, num_md_chs, num_md_sub_frames ); - - - hMdDec->dtx_md_smoothing_cntr = 1; - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_chk_zero_coefs() - * - * Check for zeroed SPAR coefficients - *-----------------------------------------------------------------------------------------*/ - -int16_t ivas_spar_chk_zero_coefs( - Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ -) -{ - int16_t j, k, b; - ivas_spar_md_dec_state_t *hMdDec; - int16_t mono = 1; - int16_t ndec, ndm; - - hMdDec = st_ivas->hSpar->hMdDec; - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - - for ( b = 0; b < min( hMdDec->spar_md.num_bands, SPAR_DIRAC_SPLIT_START_BAND ); b++ ) - { - for ( j = 0; j < ndm + ndec - 1; j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].pred_re[j] != 0.0f ) - { - mono = 0; - } - } - for ( j = 0; j < ndec; j++ ) - { - for ( k = 0; k < ndm - 1; k++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].C_re[j][k] != 0.0f ) - { - mono = 0; - } - } - } - for ( j = 0; j < ndec; j++ ) - { - if ( hMdDec->spar_md.band_coeffs[b].P_re[j] != 0.0f ) - { - mono = 0; - } - } - } - - return mono; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_smooth_md_dtx() - * - * Smooth MD during no data frame during DTX - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_smooth_md_dtx( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t num_md_sub_frames /* i : number of metadata subframes */ -) -{ - int16_t j, k, b, dmx_ch; - float ramp, tar, prev, new_val; - - ramp = (float) hMdDec->dtx_md_smoothing_cntr / IVAS_DEFAULT_DTX_CNG_RAMP; - - for ( b = 0; b < num_bands_out; b++ ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - - for ( j = 1; j < FOA_CHANNELS; j++ ) - { - for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) - { - prev = hMdDec->spar_coeffs_prev.P_re[j][k][b]; - tar = hMdDec->spar_coeffs_tar.P_re[j][k][b]; - new_val = prev + ( ramp * ( tar - prev ) ); - hMdDec->spar_coeffs.P_re[j][k][b] = new_val; - } - } - - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - prev = hMdDec->spar_coeffs_prev.C_re[j][k][b]; - tar = hMdDec->spar_coeffs_tar.C_re[j][k][b]; - new_val = prev + ( ramp * ( tar - prev ) ); - hMdDec->spar_coeffs.C_re[j][k][b] = new_val; - } - } - } - - /* expand MD to all time slots */ - for ( int16_t i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - - for ( j = 1; j < FOA_CHANNELS; j++ ) - { - for ( k = dmx_ch; k < FOA_CHANNELS; k++ ) - - { - hMdDec->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[j][k][b]; - } - } - - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - hMdDec->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[j][k][b]; - } - } - } - } - - hMdDec->dtx_md_smoothing_cntr = min( hMdDec->dtx_md_smoothing_cntr + 1, IVAS_DEFAULT_DTX_CNG_RAMP ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_setup_md_smoothing() - * - * Set up smoothing of SPAR MD when SID update frame is received - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_setup_md_smoothing( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t num_md_sub_frames /* i : number of metadata subframes */ -) -{ - /* copy the coeffs */ - int16_t num_channels, i, j, k; - - num_channels = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs_tar.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs_tar.P_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - ivas_spar_smooth_md_dtx( hMdDec, num_bands_out, num_md_sub_frames ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_update_md_hist() - * - * Update previous and target MD - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_update_md_hist( - ivas_spar_md_dec_state_t *hMdDec /* i/o: SPAR MD decoder handle */ -) -{ - int16_t num_channels, i, j, k; - - num_channels = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_prev.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.C_re[i][j][k] = hMdDec->spar_coeffs.C_re[i][j][k]; - } - } - } - - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdDec->spar_coeffs_tar.P_re[i][j][k] = hMdDec->spar_coeffs.P_re[i][j][k]; - } - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_spar_matrices() - * - * Get SPAR matrices - *-----------------------------------------------------------------------------------------*/ - -static void ivas_get_spar_matrices( - ivas_spar_md_dec_state_t *hMdDec, - const int16_t num_bands_out, - const int16_t n_ts, - const int16_t bw, - const int16_t dtx_vad, - const int16_t nB, - const int16_t numch_out, - const int16_t active_w_vlbr, - const int16_t dyn_active_w_flag ) -{ - int16_t num_bands, dmx_ch, split_band; - int16_t i, j, k, m, b, i_ts, active_w; - const int16_t *order; - float active_w_dm_fac, re; - - - num_bands = num_bands_out; - order = remix_order_set[hMdDec->spar_md_cfg.remix_unmix_order]; - - split_band = SPAR_DIRAC_SPLIT_START_BAND; - if ( split_band >= IVAS_MAX_NUM_BANDS ) - { - /*store previous 4x4 parameters for linear interpolation to current*/ - for ( i = 0; i < numch_out; i++ ) - { - for ( j = 0; j < numch_out; j++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - hMdDec->mixer_mat_prev[0][i][j][b] = hMdDec->mixer_mat[i][j][b]; - } - } - } - } - - if ( bw == IVAS_RED_BAND_FACT ) - { - num_bands = num_bands >> 1; - } - - active_w = ( dyn_active_w_flag == 1 ) || ( hMdDec->spar_md_cfg.active_w == 1 ); - active_w_dm_fac = ( dtx_vad == 0 ) ? IVAS_ACTIVEW_DM_F_SCALE_DTX : ( ( active_w_vlbr ) ? IVAS_ACTIVEW_DM_F_SCALE_VLBR : IVAS_ACTIVEW_DM_F_SCALE ); - - for ( i_ts = 0; i_ts < n_ts; i_ts++ ) - { - for ( i = 0; i < numch_out; i++ ) - { - for ( j = 0; j < numch_out; j++ ) - { - set_zero( &hMdDec->spar_coeffs.C_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); - set_zero( &hMdDec->spar_coeffs.P_re[i][j][i_ts * IVAS_MAX_NUM_BANDS], IVAS_MAX_NUM_BANDS ); - } - } - num_bands = min( num_bands, nB ); - - for ( b = 0; b < num_bands; b++ ) - { - float tmp_C1_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmp_C2_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmp_dm_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[bw * b]; - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmp_C1_re[j], numch_out ); - set_zero( tmp_C2_re[j], numch_out ); - set_zero( tmp_dm_re[j], numch_out ); - - tmp_C1_re[j][j] = 1.0f; - tmp_C2_re[j][j] = 1.0f; - tmp_dm_re[j][j] = 1.0f; - } - - for ( j = 1; j < numch_out; j++ ) - { - tmp_C1_re[j][0] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; - } - - if ( active_w == 1 ) - { - for ( j = 1; j < numch_out; j++ ) - { - tmp_C2_re[0][j] = active_w_dm_fac * -hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j - 1]; - } - - IVAS_RMULT_FLOAT( tmp_C2_re[0][1], tmp_C1_re[1][0], re ); - tmp_dm_re[0][0] = 1 + re; - - IVAS_RMULT_FLOAT( tmp_C2_re[0][2], tmp_C1_re[2][0], re ); - tmp_dm_re[0][0] += re; - - IVAS_RMULT_FLOAT( tmp_C2_re[0][3], tmp_C1_re[3][0], re ); - tmp_dm_re[0][0] += re; - - if ( dyn_active_w_flag == 1 ) - { - tmp_dm_re[0][0] *= IVAS_SPAR_DYN_ACTIVEW_THRESH; - } - - tmp_dm_re[0][1] = tmp_C2_re[0][1]; - - tmp_dm_re[0][2] = tmp_C2_re[0][2]; - - tmp_dm_re[0][3] = tmp_C2_re[0][3]; - - tmp_dm_re[1][0] = tmp_C1_re[1][0]; - - tmp_dm_re[2][0] = tmp_C1_re[2][0]; - - tmp_dm_re[3][0] = tmp_C1_re[3][0]; - - if ( hMdDec->spar_md_cfg.remix_unmix_order != 3 ) - { - ivas_mat_col_rearrange( tmp_dm_re, order, i_ts, hMdDec->mixer_mat, b, numch_out ); - } - } - else - { - if ( hMdDec->spar_md_cfg.remix_unmix_order != 3 ) - { - ivas_mat_col_rearrange( tmp_C1_re, order, i_ts, hMdDec->mixer_mat, b, numch_out ); - } - } - - if ( dmx_ch > 0 ) - { - float tmpC_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float tmpP_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmpC_re[j], numch_out ); - set_zero( tmpP_re[j], numch_out ); - } - - for ( j = 0; j < numch_out; j++ ) - { - set_zero( tmpC_re[j], numch_out ); - } - - for ( k = 0; k < dmx_ch; k++ ) - { - tmpC_re[k][k] = 1; - } - - for ( j = dmx_ch; j < numch_out; j++ ) - { - for ( k = 1; k < dmx_ch; k++ ) - { - tmpC_re[j][k] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j - dmx_ch][k - 1]; - } - } - - for ( j = dmx_ch; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - if ( ( j - dmx_ch ) == ( k - dmx_ch ) ) - { - tmpP_re[j][k] = hMdDec->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[k - dmx_ch]; - } - else - { - tmpP_re[j][k] = 0; - } - } - } - - for ( j = 1; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - for ( m = 0; m < numch_out; m++ ) - { - IVAS_RMULT_FLOAT( hMdDec->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpP_re[m][k], re ); - hMdDec->spar_coeffs.P_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; - } - } - } - - for ( j = 0; j < numch_out; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - for ( m = 0; m < numch_out; m++ ) - { - IVAS_RMULT_FLOAT( hMdDec->mixer_mat[j][m][b + i_ts * IVAS_MAX_NUM_BANDS], tmpC_re[m][k], re ); - hMdDec->spar_coeffs.C_re[j][k][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] += re; - } - } - } - - hMdDec->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] = - max( 0, hMdDec->spar_coeffs.C_re[0][0][( b * bw ) + i_ts * IVAS_MAX_NUM_BANDS] ); - } - } - - /* band mixing */ - if ( bw == IVAS_RED_BAND_FACT ) - { - for ( b = 0; b < num_bands_out; b = b + bw ) - { - dmx_ch = hMdDec->spar_md_cfg.num_dmx_chans_per_band[b]; - for ( j = 0; j < numch_out; j++ ) - { - for ( k = dmx_ch; k < numch_out; k++ ) - { - hMdDec->spar_coeffs.P_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - - for ( j = 0; j < numch_out; j++ ) - { - for ( k = 0; k < dmx_ch; k++ ) - { - hMdDec->spar_coeffs.C_re[j][k][( b + 1 ) + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[j][k][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_mat_col_rearrange() - * - * reorders the input matrix based on order - *-----------------------------------------------------------------------------------------*/ - -static void ivas_mat_col_rearrange( - float in_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t order[IVAS_SPAR_MAX_CH], - const int16_t i_ts, - float ***mixer_mat, - const int16_t bands, - const int16_t num_ch ) -{ - int16_t i, j, idx; - - for ( i = 0; i < num_ch; i++ ) - { - idx = order[i]; - - for ( j = 0; j < num_ch; j++ ) - { - mixer_mat[j][i][bands + i_ts * IVAS_MAX_NUM_BANDS] = in_re[j][idx]; - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_dec_gen_umx_mat() - * - * generates upmix matrix - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_dec_gen_umx_mat( - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t bfi, /* i : bad frame indicator */ - const int16_t num_md_sub_frames ) -{ - int16_t i, j, b, i_ts, num_out_ch; - - num_out_ch = hMdDec->spar_md_cfg.num_umx_chs; - - for ( i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - if ( hMdDec->td_decorr_flag == 1 ) - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < nchan_transport; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = nchan_transport; j < num_out_ch; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - else - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < nchan_transport; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = hMdDec->spar_coeffs.C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - ivas_spar_dec_compute_ramp_down_post_matrix( hMdDec, num_bands_out, bfi, num_md_sub_frames ); - - return; -} - -static void ivas_spar_md_band_upmix( - ivas_band_coeffs_t *band_coeffs, - int16_t *nB, - int16_t *bands_bw, - int16_t *valid_bands, - int16_t bw_final, - int16_t ndec, - int16_t ndm ) -{ - int16_t i, ii, jj, b, idx, bw_fact; - - bw_fact = *bands_bw / bw_final; - for ( i = *nB - 1; i >= 0; i-- ) - { - - for ( b = bw_fact - 1; b >= 0; b-- ) - { - idx = i * bw_fact + b; - for ( ii = 0; ii < ndec + ndm - 1; ii++ ) - { - band_coeffs[idx].pred_re[ii] = band_coeffs[i].pred_re[ii]; - } - for ( ii = 0; ii < ndec; ii++ ) - { - for ( jj = 0; jj < ndm - 1; jj++ ) - { - band_coeffs[idx].C_re[ii][jj] = band_coeffs[i].C_re[ii][jj]; - } - } - for ( jj = 0; jj < ndec; jj++ ) - { - band_coeffs[idx].P_re[jj] = band_coeffs[i].P_re[jj]; - } - valid_bands[idx] = valid_bands[i]; - } - } - *nB = ( *nB ) * ( *bands_bw ) / bw_final; - *bands_bw = bw_final; - - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_dec_parse_md_bs() - * - * Parse SPAR MD bitstream - *-----------------------------------------------------------------------------------------*/ - -static void ivas_spar_dec_parse_md_bs( - ivas_spar_md_dec_state_t *hMdDec, - Decoder_State *st0, - int16_t *nB, - int16_t *bands_bw, - int16_t *dtx_vad, - const int32_t ivas_total_brate, - const int16_t sba_inactive_mode ) -{ - int16_t i, j, k, num_bands; - int16_t ii, jj, ndec, ndm; - uint16_t qsi; - ivas_quant_strat_t qs; - int16_t strat, no_ec; - int16_t do_diff[IVAS_MAX_NUM_BANDS]; - float quant[IVAS_SPAR_MAX_C_COEFF]; - int16_t do_repeat[IVAS_MAX_NUM_BANDS]; - *dtx_vad = 1; - *bands_bw = 1; - qsi = 0; - num_bands = hMdDec->spar_md.num_bands; - - if ( ivas_total_brate > IVAS_SID_5k2 ) - { - if ( hMdDec->spar_md_cfg.quant_strat_bits > 0 ) - { - if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) - { - /*only one bit written for quantization strategy to indicate either a fixed quantization strategy or dtx_vad==0 */ - qsi = get_next_indice( st0, 1 ); - if ( qsi == 1 ) - { - *dtx_vad = 0; - } - } - else - { - if ( sba_inactive_mode == 1 ) - { - *dtx_vad = 0; - qsi = hMdDec->spar_md_cfg.quant_strat_bits + 1; - } - else - { - qsi = get_next_indice( st0, hMdDec->spar_md_cfg.quant_strat_bits ); - } - } - } - else - { - qsi = 0; - } - } - else - { - *dtx_vad = 0; - } - - hMdDec->dtx_vad = *dtx_vad; - - if ( *dtx_vad == 0 ) - { - *nB = SPAR_DTX_BANDS; - *bands_bw = num_bands / *nB; - - for ( i = 0; i < *nB; i++ ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdDec->spar_md.band_coeffs[i].pred_re[j] = 0; - hMdDec->spar_md.band_coeffs[i].P_re[j] = 0; - } - hMdDec->valid_bands[i] = 1; - } - - for ( i = 0; i < num_bands; i++ ) - { - for ( j = 0; j < ( IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS ); j++ ) - { - for ( k = 0; k < ( IVAS_SPAR_MAX_DMX_CHS - 1 ); k++ ) - { - hMdDec->spar_md.band_coeffs[i].C_re[j][k] = 0; - } - } - } - - ivas_parse_parameter_bitstream_dtx( &hMdDec->spar_md, st0, *bands_bw, *nB, hMdDec->spar_md_cfg.num_dmx_chans_per_band, hMdDec->spar_md_cfg.num_decorr_per_band ); - - if ( *bands_bw != 1 ) - { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - ivas_spar_md_band_upmix( - hMdDec->spar_md.band_coeffs, - nB, - bands_bw, - hMdDec->valid_bands, - 1, - ndec, - ndm ); - } - - return; - } - - qs = hMdDec->spar_md_cfg.quant_strat[qsi]; - - strat = get_next_indice( st0, 3 ); - - no_ec = 0; - - if ( strat < 2 ) - { - *bands_bw = strat + 1; - *nB = num_bands / *bands_bw; - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = 0; - } - } - else if ( strat < 4 ) - { - *bands_bw = strat - 1; - *nB = num_bands / *bands_bw; - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = 0; - } - no_ec = 1; - } - else if ( ivas_total_brate < IVAS_24k4 ) - { - *bands_bw = 2; - *nB = num_bands / *bands_bw; - - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = 0; - do_repeat[i] = ( ( strat % 2 ) == ( ( i + 1 ) % 2 ) ); - } - } - else - { - *bands_bw = 1; - *nB = num_bands; - - for ( i = 0; i < *nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != strat - 4 ); - do_repeat[i] = 0; - } - if ( hMdDec->spar_md_cfg.prev_quant_idx >= 0 ) - { - ivas_map_prior_coeffs_quant( &hMdDec->spar_md_prev, &hMdDec->spar_md_cfg, qsi, *nB ); - } - } - hMdDec->spar_md_cfg.prev_quant_idx = qsi; - - if ( no_ec == 0 ) - { - ivas_decode_arith_bs( hMdDec, st0, qsi, *nB, *bands_bw, do_diff, strat, ivas_total_brate ); - } - else - { - ivas_decode_huffman_bs( hMdDec, st0, qsi, *nB, *bands_bw ); - } - - for ( i = 0; i < *nB; i++ ) - { - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[( *bands_bw ) * i]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[( *bands_bw ) * i]; - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].pred_index_re, qs.PR.q_levels[0], qs.PR.min, qs.PR.max, hMdDec->spar_md.band_coeffs[i].pred_re, ndm + ndec - 1 ); - - j = 0; - for ( ii = 0; ii < ndec; ii++ ) - { - for ( jj = 0; jj < ndm - 1; jj++ ) - { - quant[j] = hMdDec->spar_md.band_coeffs[i].C_re[ii][jj]; - j++; - } - } - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].drct_index_re, qs.C.q_levels[0], qs.C.min, qs.C.max, quant, ndec * ( ndm - 1 ) ); - - j = 0; - for ( ii = 0; ii < ndec; ii++ ) - { - for ( jj = 0; jj < ndm - 1; jj++ ) - { - hMdDec->spar_md.band_coeffs[i].C_re[ii][jj] = quant[j]; - j++; - } - } - - ivas_deindex_real_index( hMdDec->spar_md.band_coeffs_idx[i].decd_index_re, qs.P_r.q_levels[0], qs.P_r.min, qs.P_r.max, hMdDec->spar_md.band_coeffs[i].P_re, ndm + ndec - 1 ); - - /* Store prior coefficient indices */ - for ( j = 0; j < ndm + ndec - 1; j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].pred_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j]; - } - for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].drct_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].drct_index_re[j]; - } - for ( j = 0; j < ndec; j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx[i].decd_index_re[j] = hMdDec->spar_md.band_coeffs_idx[i].decd_index_re[j]; - } - hMdDec->valid_bands[i] |= ( do_diff[i] == 0 && do_repeat[i] == 0 ) ? 1 : 0; - } - - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[0]; - if ( *bands_bw != 1 ) - { - ivas_spar_md_band_upmix( - hMdDec->spar_md.band_coeffs, - nB, - bands_bw, - hMdDec->valid_bands, - 1, - ndec, - ndm ); - } - - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_decode_arith_bs() - * - * Decode bitstream with arith decoder - *-----------------------------------------------------------------------------------------*/ - -static void ivas_decode_arith_bs( - ivas_spar_md_dec_state_t *hMdDec, - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const uint16_t qsi, - const int16_t nB, - const int16_t bands_bw, - int16_t *pDo_diff, - const int16_t strat, - const int32_t ivas_total_brate ) -{ - int16_t i, ndm, ndec; - int16_t j; - ivas_cell_dim_t pred_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t drct_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t decd_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; - int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; - int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; - int16_t any_diff; - - for ( i = 0; i < nB; i++ ) - { - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[bands_bw * i]; - if ( ( ivas_total_brate < IVAS_24k4 ) && ( strat > 3 ) && ( ( ( i % 2 == 1 ) && ( strat % 2 == 0 ) ) || ( ( i % 2 == 0 ) && ( strat % 2 == 1 ) ) ) ) - { - pred_cell_dims[i].dim1 = 0; - pred_cell_dims[i].dim2 = 0; - drct_cell_dims[i].dim1 = 0; - drct_cell_dims[i].dim2 = 0; - decd_cell_dims[i].dim1 = 0; - decd_cell_dims[i].dim2 = 0; - decx_cell_dims[i].dim1 = 0; - decx_cell_dims[i].dim2 = 0; - } - else - { - pred_cell_dims[i].dim1 = ndm + ndec - 1; - if ( hMdDec->spar_hoa_md_flag && hMdDec->spar_hoa_dirac2spar_md_flag ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - pred_cell_dims[i].dim1 -= ( FOA_CHANNELS - 1 ); - } - } - pred_cell_dims[i].dim2 = 1; - drct_cell_dims[i].dim1 = ndec; - drct_cell_dims[i].dim2 = ndm - 1; - decd_cell_dims[i].dim1 = ndec; - decd_cell_dims[i].dim2 = 1; - decx_cell_dims[i].dim1 = ( ndec * ( ndec - 1 ) ) >> 1; - decx_cell_dims[i].dim2 = 1; - } - } - - any_diff = 0; - for ( i = 0; i < nB; i++ ) - { - if ( pDo_diff[i] != 0 ) - { - any_diff = 1; - break; - } - } - - if ( any_diff == 1 ) - { - if ( hMdDec->spar_hoa_md_flag && hMdDec->spar_hoa_dirac2spar_md_flag ) - { - for ( i = 0; i < nB; i++ ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - for ( j = 0; j < pred_cell_dims[i].dim1; j++ ) - { - hMdDec->spar_md_prev.band_coeffs_idx_mapped[i].pred_index_re[j] = - hMdDec->spar_md_prev.band_coeffs_idx_mapped[i].pred_index_re[j + ( FOA_CHANNELS - 1 )]; - } - } - } - } - - ivas_copy_band_coeffs_idx_to_arr( hMdDec->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, pred_cell_dims, PRED_COEFF ); - } - - ivas_arith_decode_cmplx_cell_array( &hMdDec->arith_coeffs.pred_arith_re[qsi], &hMdDec->arith_coeffs.pred_arith_re_diff[qsi], - st0, pred_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); - - ivas_fill_band_coeffs_idx( hMdDec->spar_md.band_coeffs_idx, nB, symbol_arr_re, pred_cell_dims, PRED_COEFF ); - - if ( hMdDec->spar_hoa_md_flag && hMdDec->spar_hoa_dirac2spar_md_flag ) - { - for ( i = 0; i < nB; i++ ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - for ( j = pred_cell_dims[i].dim1 - 1; j >= 0; j-- ) - { - hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j + ( FOA_CHANNELS - 1 )] = - hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j]; - } - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) - { - hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; - } - } - } - } - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdDec->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, drct_cell_dims, DRCT_COEFF ); - } - - ivas_arith_decode_cmplx_cell_array( &hMdDec->arith_coeffs.drct_arith_re[qsi], &hMdDec->arith_coeffs.drct_arith_re_diff[qsi], - st0, drct_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); - - ivas_fill_band_coeffs_idx( hMdDec->spar_md.band_coeffs_idx, nB, symbol_arr_re, drct_cell_dims, DRCT_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdDec->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decd_cell_dims, DECD_COEFF ); - } - - ivas_arith_decode_cmplx_cell_array( &hMdDec->arith_coeffs.decd_arith_re[qsi], &hMdDec->arith_coeffs.decd_arith_re_diff[qsi], - st0, decd_cell_dims, pDo_diff, nB, symbol_arr_re, symbol_arr_old_re ); - - ivas_fill_band_coeffs_idx( hMdDec->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdDec->spar_md_prev.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decx_cell_dims, DECX_COEFF ); - } - - ivas_fill_band_coeffs_idx( hMdDec->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_fill_band_coeffs_idx() - * - * Copy pred band coeffs to arr - *-----------------------------------------------------------------------------------------*/ - -static void ivas_fill_band_coeffs_idx( - ivas_band_coeffs_ind_t *pBands_idx, - const int16_t nB, - int16_t *pSymbol_re, - ivas_cell_dim_t *pCell_dims, - const ivas_coeffs_type_t coeff_type ) -{ - int16_t i, len; - int16_t *pPtr_idx = NULL; - - for ( i = 0; i < nB; i++ ) - { - switch ( coeff_type ) - { - case PRED_COEFF: - { - pPtr_idx = pBands_idx[i].pred_index_re; - break; - } - case DRCT_COEFF: - { - pPtr_idx = pBands_idx[i].drct_index_re; - break; - } - case DECD_COEFF: - { - pPtr_idx = pBands_idx[i].decd_index_re; - break; - } - case DECX_COEFF: - { - break; - } - - default: - assert( !"unsupported config!" ); - } - - if ( coeff_type != DECX_COEFF ) - { - len = pCell_dims[i].dim1 * pCell_dims[i].dim2; - mvs2s( pSymbol_re, pPtr_idx, len ); - pSymbol_re += len; - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_decode_huffman_bs() - * - * Decode bitstream with huffman decoder - *-----------------------------------------------------------------------------------------*/ - -static void ivas_decode_huffman_bs( - ivas_spar_md_dec_state_t *hMdDec, - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const uint16_t qsi, - const int16_t nB, - const int16_t bands_bw ) -{ - int16_t i, j; - int16_t ndm, ndec; - int16_t pred_dim, drct_dim, decd_dim, pred_offset; - - for ( i = 0; i < nB; i++ ) - { - ndm = hMdDec->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; - ndec = hMdDec->spar_md_cfg.num_decorr_per_band[bands_bw * i]; - - pred_dim = ndec + ndm - 1; - drct_dim = ndec * ( ndm - 1 ); - decd_dim = ndec; - pred_offset = 0; - - if ( hMdDec->spar_hoa_md_flag && hMdDec->spar_hoa_dirac2spar_md_flag ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - pred_offset = FOA_CHANNELS - 1; - } - } - - for ( j = pred_offset; j < pred_dim; j++ ) - { - ivas_huffman_decode( &hMdDec->huff_coeffs.pred_huff_re[qsi], st0, &hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j] ); - } - - if ( hMdDec->spar_hoa_md_flag && hMdDec->spar_hoa_dirac2spar_md_flag ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - for ( j = 0; j < pred_offset; j++ ) - { - hMdDec->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; - } - } - } - - for ( j = 0; j < drct_dim; j++ ) - { - ivas_huffman_decode( &hMdDec->huff_coeffs.drct_huff_re[qsi], st0, &hMdDec->spar_md.band_coeffs_idx[i].drct_index_re[j] ); - } - - for ( j = 0; j < decd_dim; j++ ) - { - ivas_huffman_decode( &hMdDec->huff_coeffs.decd_huff_re[qsi], st0, &hMdDec->spar_md.band_coeffs_idx[i].decd_index_re[j] ); - } - } - - return; -} - -static void ivas_spar_plc_get_band_age( - const int16_t *valid_bands, - int16_t *base_band_age, - const int16_t num_bands, - int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS], - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], - int16_t *all_valid, - int16_t *b_idx ) -{ - int16_t b, idx; - - set_s( valid_band_idx, 0, IVAS_MAX_NUM_BANDS ); - set_s( last_valid_band_idx, 0, IVAS_MAX_NUM_BANDS ); - idx = -1; - *all_valid = 1; - for ( b = 0; b < num_bands; b++ ) - { - if ( valid_bands[b] != 0 ) - { - base_band_age[b] = 0; /* reset band age */ - idx++; - valid_band_idx[idx] = b; - } - else - { - base_band_age[b] += 1; /* increment the age of invalid bands */ - - if ( base_band_age[b] > 3 ) - { - last_valid_band_idx[b] = idx; - } - *all_valid = 0; - } - } - *b_idx = idx; - - return; -} - -static void ivas_spar_get_plc_interp_weights( - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], - int16_t last_valid_band_idx, - int16_t idx, - int16_t b, - float *w, - int16_t *id0, - int16_t *id1 ) -{ - if ( last_valid_band_idx < 0 ) /* Extrapolation */ - { - *id1 = valid_band_idx[0]; - *id0 = 0; - *w = 1; - } - else if ( last_valid_band_idx == idx ) /* Extrapolation */ - { - *id1 = valid_band_idx[last_valid_band_idx]; - *id0 = valid_band_idx[last_valid_band_idx]; - *w = 0; - } - else /* Interpolation */ - { - *id0 = valid_band_idx[last_valid_band_idx]; - *id1 = valid_band_idx[last_valid_band_idx + 1]; - *w = ( (float) ( b - *id0 ) ) / ( *id1 - *id0 ); - } - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_fill_invalid_bands() - * - * Fill invalid bands in interpolation/extrapolation of valid bands - * when PLC is to be done with partial time differential coding - *-----------------------------------------------------------------------------------------*/ -static void ivas_spar_md_fill_invalid_bands( - ivas_spar_dec_matrices_t *pSpar_coeffs, - ivas_spar_dec_matrices_t *pSpar_coeffs_prev, - const int16_t *valid_bands, - int16_t *base_band_age, - const int16_t num_bands, - const int16_t num_channels, - const int16_t num_md_sub_frames ) -{ - int16_t i, j, b, all_valid; - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; - int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS]; - float w = 0; - ivas_spar_plc_get_band_age( valid_bands, base_band_age, num_bands, - last_valid_band_idx, valid_band_idx, &all_valid, &idx ); - assert( idx > 0 ); /* some bands should be valid */ - - if ( all_valid == 0 ) - { - for ( b = 0; b < num_bands; b++ ) - { - /* check against non zero in if and else if */ - if ( base_band_age[b] > 3 ) /* old invalid bands */ - { - int16_t id0, id1; - ivas_spar_get_plc_interp_weights( valid_band_idx, last_valid_band_idx[b], - idx, b, &w, &id0, &id1 ); - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - pSpar_coeffs->C_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->C_re[i][j][id0] + w * pSpar_coeffs->C_re[i][j][id1]; - pSpar_coeffs->P_re[i][j][b] = ( 1 - w ) * pSpar_coeffs->P_re[i][j][id0] + w * pSpar_coeffs->P_re[i][j][id1]; - } - } - } - else /* young invalid bands */ - { - if ( valid_bands[b] == 0 ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - pSpar_coeffs->C_re[i][j][b] = pSpar_coeffs_prev->C_re[i][j][b]; - pSpar_coeffs->P_re[i][j][b] = pSpar_coeffs_prev->P_re[i][j][b]; - } - } - } - } - - if ( valid_bands[b] == 0 ) - { - int16_t i_ts; - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - for ( i_ts = 1; i_ts < num_md_sub_frames; i_ts++ ) - { - pSpar_coeffs->C_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->C_re[i][j][b]; - pSpar_coeffs->P_re[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] = pSpar_coeffs->P_re[i][j][b]; - } - } - } - } - } - } - - return; -} - -static void ivas_spar_md_fill_invalid_bandcoeffs( - ivas_band_coeffs_t *pBand_coeffs, - ivas_band_coeffs_t *pBand_coeffs_prev, - const int16_t *valid_bands, - int16_t *base_band_age, - int16_t *first_valid_frame, - const int16_t num_bands ) -{ - int16_t j, k, b, all_valid; - int16_t valid_band_idx[IVAS_MAX_NUM_BANDS], idx = -1; - int16_t last_valid_band_idx[IVAS_MAX_NUM_BANDS]; - float w = 0; - - ivas_spar_plc_get_band_age( valid_bands, base_band_age, num_bands, - last_valid_band_idx, valid_band_idx, &all_valid, &idx ); - - assert( idx > 0 ); /* some bands should be valid */ - - if ( all_valid == 0 ) - { - for ( b = 0; b < num_bands; b++ ) - { - /* check against non zero in if and else if */ - if ( ( base_band_age[b] > 3 ) || ( *first_valid_frame == 0 ) ) /* old invalid bands */ - { - int16_t id0, id1; - ivas_spar_get_plc_interp_weights( valid_band_idx, last_valid_band_idx[b], - idx, b, &w, &id0, &id1 ); - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].pred_re[j] = ( 1 - w ) * pBand_coeffs[id0].pred_re[j] + w * pBand_coeffs[id1].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) - { - pBand_coeffs[b].C_re[j][k] = ( 1 - w ) * pBand_coeffs[id0].C_re[j][k] + w * pBand_coeffs[id1].C_re[j][k]; - } - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].P_re[j] = ( 1 - w ) * pBand_coeffs[id0].P_re[j] + w * pBand_coeffs[id1].P_re[j]; - } - } - else /* young invalid bands */ - { - if ( valid_bands[b] == 0 ) - { - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].pred_re[j] = pBand_coeffs_prev[b].pred_re[j]; - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - for ( k = 0; k < IVAS_SPAR_MAX_DMX_CHS - 1; k++ ) - { - pBand_coeffs[b].C_re[j][k] = pBand_coeffs_prev[b].C_re[j][k]; - } - } - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - pBand_coeffs[b].P_re[j] = pBand_coeffs_prev[b].P_re[j]; - } - } - } - } - } - else - { - *first_valid_frame = 1; - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_dec_compute_ramp_down_post_matrix() - * - * - *-----------------------------------------------------------------------------------------*/ - -static void ivas_spar_dec_compute_ramp_down_post_matrix( - ivas_spar_md_dec_state_t *hMdDec, - const int16_t num_bands_out, - const int16_t bfi, - const int16_t num_md_sub_frames ) -{ - int16_t num_in_ch, num_out_ch, i, j, b; - - num_in_ch = hMdDec->spar_md_cfg.num_umx_chs; - num_out_ch = hMdDec->spar_md_cfg.num_umx_chs; - - if ( bfi == 0 ) - { - hMdDec->spar_plc_num_lost_frames = 0; - } - else - { - if ( hMdDec->td_decorr_flag == 0 ) - { - assert( 0 ); - } - - hMdDec->spar_plc_num_lost_frames += 1; - hMdDec->spar_plc_num_lost_frames = min( hMdDec->spar_plc_num_lost_frames, 100 ); - - if ( hMdDec->spar_plc_num_lost_frames > ivas_spar_dec_plc_num_frames_keep ) - { - int16_t num_fade_frames; - int16_t gain_dB; - float gain; - float post_matrix[IVAS_SPAR_MAX_CH]; - - num_fade_frames = max( hMdDec->spar_plc_num_lost_frames - ivas_spar_dec_plc_num_frames_keep, 0 ); - gain_dB = -min( num_fade_frames, ivas_spar_dec_plc_max_num_frames_ramp_down ) * ivas_spar_dec_plc_per_frame_ramp_down_gain_dB; - gain = powf( 10, ( ( (float) gain_dB ) / 20 ) ); - - for ( i = 0; i < IVAS_SPAR_MAX_CH; i++ ) - { - post_matrix[i] = 1 + min( ( (float) num_fade_frames ) / ivas_spar_dec_plc_num_frames_fade_out, 1 ) * ( ivas_spar_dec_plc_spatial_target[i] - 1 ); - post_matrix[i] *= gain; - } - - /* apply the post matrix */ - for ( int16_t i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( i = 0; i < num_out_ch; i++ ) - { - for ( j = 0; j < num_in_ch; j++ ) - { - for ( b = 0; b < num_bands_out; b++ ) - { - hMdDec->mixer_mat[i][j][b + i_ts * IVAS_MAX_NUM_BANDS] *= post_matrix[i]; - } - } - } - } - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_unquant_dtx_indicies() - * - * Unquantize SPAR MD DYX indices - *-----------------------------------------------------------------------------------------*/ - -static void ivas_spar_unquant_dtx_indicies( - ivas_spar_md_t *pSpar_md, - const int16_t nB, - const int16_t bw, - int16_t *ndm_per_band ) -{ - int16_t i, b; - int16_t q_lvl; - float val; - int16_t idx; - float pr_min_max[2]; - - pr_min_max[0] = pSpar_md->min_max[0]; - pr_min_max[1] = pSpar_md->min_max[1]; - - for ( b = 0; b < nB; b++ ) - { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) - { - q_lvl = dtx_pr_real_q_levels[ndm_per_band[bw * b] - 1][i]; - idx = pSpar_md->band_coeffs_idx[b].pred_index_re[i]; - ivas_deindex_real_index( &idx, q_lvl, pr_min_max[0], pr_min_max[1], &val, 1 ); - pSpar_md->band_coeffs[b].pred_re[i] = val; - } - - for ( i = 0; i < FOA_CHANNELS - ndm_per_band[bw * b]; i++ ) - { - q_lvl = dtx_pd_real_q_levels[ndm_per_band[bw * b] - 1][i]; - idx = pSpar_md->band_coeffs_idx[b].decd_index_re[i]; - ivas_deindex_real_index( &idx, q_lvl, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], &val, 1 ); - pSpar_md->band_coeffs[b].P_re[i] = val; - } - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_parse_parameter_bitstream_dtx() - * - * parse DTX bitstream parameters - *-----------------------------------------------------------------------------------------*/ - -static void ivas_parse_parameter_bitstream_dtx( - ivas_spar_md_t *pSpar_md, - Decoder_State *st0, /* i/o: decoder state structure - for bitstream handling*/ - const int16_t bw, - const int16_t num_bands, - int16_t *num_dmx_per_band, - int16_t *num_dec_per_band ) -{ - int16_t i, j, ndec, ndm; - float val; - int16_t idx; - float pr_min_max[2]; - int16_t pr_q_lvls, pr, pd, pd_q_lvls, pr_pd_bits; - int16_t zero_pad_bits, sid_bits_len; - - sid_bits_len = st0->next_bit_pos; - pr_min_max[0] = pSpar_md->min_max[0]; - pr_min_max[1] = pSpar_md->min_max[1]; - - for ( i = 0; i < num_bands; i++ ) - { - ndec = num_dec_per_band[bw * i]; - ndm = num_dmx_per_band[bw * i]; - - for ( j = 0; j < FOA_CHANNELS - 1; j++ ) - { - int16_t pr_idx_1, pr_idx_2, pd_idx_1, pd_idx_2; - uint16_t value; - - pr_idx_1 = pr_pr_idx_pairs[ndm - 1][j][0]; - pr_idx_2 = pr_pr_idx_pairs[ndm - 1][j][1]; - pd_idx_1 = pr_pd_idx_pairs[ndm - 1][j][0]; - pd_idx_2 = pr_pd_idx_pairs[ndm - 1][j][1]; - - if ( pr_idx_1 != 0 || pd_idx_1 != 0 || pr_idx_2 != 0 || pd_idx_2 != 0 ) - { - pr_q_lvls = dtx_pr_real_q_levels[ndm - 1][pd_idx_1 - 1]; - - if ( ( j + 1 ) > ndec ) - { - pd_q_lvls = 1; - } - else - { - pd_q_lvls = dtx_pd_real_q_levels[ndm - 1][pd_idx_2 - 1]; - } - - pr_pd_bits = ivas_get_bits_to_encode( pd_q_lvls * pr_q_lvls ); - - value = get_next_indice( st0, pr_pd_bits ); - - pr = (int16_t) floor( value / pd_q_lvls ); - pd = value - pr * pd_q_lvls; - val = dtx_pd_real_min_max[0]; - ivas_quantise_real_values( &val, pd_q_lvls, dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], &idx, &val, 1 ); - pd = pd + idx; - - val = pr_min_max[0]; - ivas_quantise_real_values( &val, pr_q_lvls, pr_min_max[0], pr_min_max[1], &idx, &val, 1 ); - pr = pr + idx; - - if ( ( j + 1 ) <= ndec ) - { - pSpar_md->band_coeffs_idx[i].decd_index_re[pd_idx_2 - 1] = pd; - } - - pSpar_md->band_coeffs_idx[i].pred_index_re[pd_idx_1 - 1] = pr; - } - } - } - - sid_bits_len = st0->next_bit_pos - sid_bits_len; - zero_pad_bits = ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - sid_bits_len; - assert( zero_pad_bits >= 0 ); - if ( num_dmx_per_band[0] == 2 ) - { - zero_pad_bits -= 1; - } - - for ( j = 0; j < zero_pad_bits; j++ ) - { - get_next_indice( st0, 1 ); - } - - ivas_spar_unquant_dtx_indicies( pSpar_md, num_bands, bw, num_dmx_per_band ); - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_deindex_real_index() - * - * Deindex real index - *-----------------------------------------------------------------------------------------*/ - -static ivas_error ivas_deindex_real_index( - const int16_t *index, - const int16_t q_levels, - const float min_value, - const float max_value, - float *quant, - const int16_t dim ) -{ - int16_t i; - float q_step; - - if ( q_levels == 0 ) - { - return IVAS_ERR_INTERNAL; - } - - if ( q_levels == 1 ) - { - for ( i = 0; i < dim; i++ ) - { - quant[i] = 0; - } - } - else - { - q_step = ( max_value - min_value ) / ( q_levels - 1 ); - for ( i = 0; i < dim; i++ ) - { - quant[i] = index[i] * q_step; - } - } - - return IVAS_ERR_OK; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_to_dirac() - * - * - *-----------------------------------------------------------------------------------------*/ - -void ivas_spar_to_dirac( - Decoder_Struct *st_ivas, - ivas_spar_md_dec_state_t *hMdDec, /* i/o: SPAR MD decoder handle */ - const int16_t dtx_vad, /* i : DTX frame flag */ - const int16_t num_bands_out, /* i : number of output bands */ - const int16_t bw, /* i : band joining factor */ - const int16_t dyn_active_w_flag ) -{ - DIRAC_DEC_HANDLE hDirAC; - int16_t start_band, end_band, band, qmf_band_start, qmf_band_end; - int16_t block, b; - int16_t *band_grouping; - float diffuseness[IVAS_MAX_NUM_BANDS]; - int16_t sba_order_internal; - float azi_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - float ele_dirac[IVAS_MAX_NUM_BANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t azi[IVAS_MAX_NUM_BANDS]; - int16_t ele[IVAS_MAX_NUM_BANDS]; - float dvx[IVAS_MAX_NUM_BANDS], dvy[IVAS_MAX_NUM_BANDS], dvz[IVAS_MAX_NUM_BANDS]; - float radius; - float en_ratio, res_pow; - int16_t num_slots_in_subfr; - int16_t tmp_write_idx_param_band; - int16_t tmp_write_idx_band; - float pred_re_20ms[IVAS_MAX_NUM_BANDS][IVAS_SPAR_MAX_CH - 1]; - int16_t pred_idx; - int16_t *dirac_to_spar_md_bands; - int16_t enc_param_start_band; - int16_t active_w_vlbr; - int16_t i, num_subframes; - int16_t active_w; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - active_w = ( dyn_active_w_flag == 1 ) || ( hMdDec->spar_md_cfg.active_w == 1 ); - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - start_band = 0; - end_band = min( num_bands_out, SPAR_DIRAC_SPLIT_START_BAND ) / bw; - - hDirAC = st_ivas->hDirAC; - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - - dirac_to_spar_md_bands = st_ivas->hSpar->dirac_to_spar_md_bands; - enc_param_start_band = st_ivas->hSpar->enc_param_start_band / bw; - active_w_vlbr = ( st_ivas->hDecoderConfig->ivas_total_brate < IVAS_24k4 ) ? 1 : 0; - - if ( hDirAC != NULL && ivas_get_hodirac_flag( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ) == 0 ) - { - band_grouping = hDirAC->band_grouping; - num_slots_in_subfr = st_ivas->hDirAC->hConfig->dec_param_estim ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; - - for ( band = start_band; band < end_band; band++ ) - { - float PR[3], Pd[3], dvnorm, g_pred; - - PR[0] = hMdDec->spar_md.band_coeffs[band].pred_re[2]; - PR[1] = hMdDec->spar_md.band_coeffs[band].pred_re[0]; - PR[2] = hMdDec->spar_md.band_coeffs[band].pred_re[1]; - g_pred = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - if ( g_pred <= EPSILON ) - { - dvx[band] = 1.0f; - dvy[band] = 0.0f; - dvz[band] = 0.0f; - } - else - { - g_pred = sqrtf( g_pred ); - dvnorm = 1.0f / g_pred; - dvx[band] = PR[0] * dvnorm; - dvy[band] = PR[1] * dvnorm; - dvz[band] = PR[2] * dvnorm; - } - - radius = sqrtf( dvx[band] * dvx[band] + dvy[band] * dvy[band] ); - azi[band] = (int16_t) ( max( -180.0f, min( 180.0f, atan2f( dvy[band], dvx[band] ) / EVS_PI * 180.0f ) ) + 0.5f ); - ele[band] = (int16_t) ( max( -90.0f, min( 180.0f, atan2f( dvz[band], radius ) / EVS_PI * 180.0f ) ) + 0.5f ); - - if ( st_ivas->nchan_transport == 1 ) - { - float w_en_norm, f_scale; - if ( active_w ) - { - if ( dtx_vad == 0 ) - { - f_scale = IVAS_ACTIVEW_DM_F_SCALE_DTX; - } - else - { - f_scale = ( active_w_vlbr ) ? IVAS_ACTIVEW_DM_F_SCALE_VLBR : IVAS_ACTIVEW_DM_F_SCALE; - } - } - else - { - f_scale = 0.0f; - } - - w_en_norm = ( 1.0f - ( f_scale * g_pred * g_pred ) ); - w_en_norm *= w_en_norm; - - Pd[0] = hMdDec->spar_md.band_coeffs[band].P_re[1]; - Pd[1] = hMdDec->spar_md.band_coeffs[band].P_re[0]; - Pd[2] = hMdDec->spar_md.band_coeffs[band].P_re[2]; - en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - res_pow = w_en_norm + en_ratio + ( Pd[0] * Pd[0] + Pd[1] * Pd[1] + Pd[2] * Pd[2] ); - res_pow *= 0.5f; - hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; - hMdDec->spar_md.ref_pow_slow[band] = 0.75f * hMdDec->spar_md.ref_pow_slow[band] + 0.25f * res_pow; - en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ) / ( hMdDec->spar_md.ref_pow_slow[band] + EPSILON ); - } - else - { - en_ratio = PR[0] * PR[0] + PR[1] * PR[1] + PR[2] * PR[2]; - hMdDec->spar_md.en_ratio_slow[band] = 0.75f * hMdDec->spar_md.en_ratio_slow[band] + 0.25f * en_ratio; - en_ratio = sqrtf( hMdDec->spar_md.en_ratio_slow[band] ); - } - diffuseness[band] = 1.0f - en_ratio; /*compute diffuseness*/ - diffuseness[band] = ( ( diffuseness[band] < 1.0f ) ? ( ( diffuseness[band] < 0.0f ) ? 0.f : diffuseness[band] ) : 1.0f ); - } - - for ( band = start_band; band < end_band; band++ ) - { - int16_t azi_dith, ele_dith; - tmp_write_idx_param_band = hDirAC->spar_to_dirac_write_idx; - - en_ratio = 1.0f - diffuseness[band]; - masa_sq( 1.0f - en_ratio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - qmf_band_start = band_grouping[band]; - qmf_band_end = band_grouping[band + 1]; - - for ( block = 0; block < MAX_PARAM_SPATIAL_SUBFRAMES; block++ ) - { - int16_t ts_start, ts_end, ts; - - ts_start = DirAC_block_grouping[block]; - ts_end = DirAC_block_grouping[block + 1]; - for ( b = qmf_band_start; b < qmf_band_end; b++ ) - { - - azi_dith = azi[band]; - ele_dith = ele[band]; - - hSpatParamRendCom->energy_ratio1[block][b] = en_ratio; - tmp_write_idx_band = tmp_write_idx_param_band; - - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele_dith; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi_dith; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; - } - else - { - for ( ts = ts_start; ts < ts_end; ts++ ) - { - hSpatParamRendCom->elevation[tmp_write_idx_band][b] = ele_dith; - hSpatParamRendCom->azimuth[tmp_write_idx_band][b] = azi_dith; - hSpatParamRendCom->diffuseness_vector[tmp_write_idx_band][b] = diffuseness[band]; - tmp_write_idx_band = ( tmp_write_idx_band + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - } - tmp_write_idx_param_band = ( tmp_write_idx_param_band + num_slots_in_subfr ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - - /* update buffer write index */ - if ( hDirAC->hConfig->dec_param_estim == FALSE ) - { - hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; - } - else - { - hDirAC->spar_to_dirac_write_idx = ( hDirAC->spar_to_dirac_write_idx + CLDFB_NO_COL_MAX ) % hSpatParamRendCom->dirac_md_buffer_length; - } - } - else - { - band = end_band; - } - - /*read DirAC metadata, convert DirAC to SPAR*/ - for ( ; band < num_bands_out / bw; band++ ) - { - int16_t dirac_band_idx; - - dirac_band_idx = dirac_to_spar_md_bands[band] - enc_param_start_band; - - num_subframes = MAX_PARAM_SPATIAL_SUBFRAMES; - if ( st_ivas->hQMetaData->useLowerRes ) - { - num_subframes = 1; - } - - for ( block = 0; block < num_subframes; block++ ) - { - if ( st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] < 0.f ) - { - st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block] += 360.f; - } - azi_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].azimuth[block]; - ele_dirac[band][block] = st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].elevation[block]; - } - - diffuseness[band] = 1.0f - st_ivas->hQMetaData->q_direction->band_data[dirac_band_idx].energy_ratio[0]; - } - - /* DirAC MD averaged over 4 subframes and converted to SPAR format similar to encoder processing */ - if ( hMdDec->spar_md_cfg.nchan_transport > 1 ) - { - ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, 1, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, end_band, num_bands_out, ( hMdDec->spar_hoa_md_flag ) ? 1 : sba_order_internal, dtx_vad, NULL, st_ivas->hQMetaData->useLowerRes, active_w_vlbr, dyn_active_w_flag ); - - /* temporarily copy frame-wise prediction coefficients in DirAC bands*/ - for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - pred_re_20ms[band][pred_idx] = hMdDec->spar_md.band_coeffs[band].pred_re[pred_idx]; - } - } - } - - int16_t num_md_sub_frames; - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( sba_order_internal, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - ivas_get_spar_md_from_dirac( azi_dirac, ele_dirac, diffuseness, num_md_sub_frames, NULL, &hMdDec->spar_md, &hMdDec->spar_md_cfg, end_band, num_bands_out / bw, ( hMdDec->spar_hoa_md_flag ) ? 1 : sba_order_internal, dtx_vad, NULL, st_ivas->hQMetaData->useLowerRes, active_w_vlbr, dyn_active_w_flag ); - - if ( st_ivas->hQMetaData->useLowerRes && dtx_vad ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - for ( block = 1; block < num_md_sub_frames; block++ ) - { - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].pred_re[i] = hMdDec->spar_md.band_coeffs[band].pred_re[i]; - } - for ( i = 0; i < FOA_CHANNELS - 1; i++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].P_re[i] = hMdDec->spar_md.band_coeffs[band].P_re[i]; - } - } - } - } - - /* expand DirAC TC 20ms MD for residual channels to all subframes*/ - for ( block = 0; block < num_md_sub_frames; block++ ) - { - for ( band = SPAR_DIRAC_SPLIT_START_BAND; band < IVAS_MAX_NUM_BANDS; band++ ) - { - for ( pred_idx = 0; pred_idx < FOA_CHANNELS - 1; pred_idx++ ) /* pred coefficient index (index 0, 1, 2 predicts Y, Z, X respectively) */ - { - if ( ivas_is_res_channel( pred_idx + 1, hMdDec->spar_md_cfg.nchan_transport ) ) - { - /* use 20ms coefficients only for residual channels */ - hMdDec->spar_md.band_coeffs[band + block * IVAS_MAX_NUM_BANDS].pred_re[pred_idx] = pred_re_20ms[band][pred_idx]; - } - } - } - } - - for ( b = end_band * bw; b < num_bands_out; b++ ) - { - hMdDec->valid_bands[b] = 1; - } - - return; -} -#endif diff --git a/lib_dec/ivas_stat_dec.h b/lib_dec/ivas_stat_dec.h index 11de05c5d..cf01ce54f 100644 --- a/lib_dec/ivas_stat_dec.h +++ b/lib_dec/ivas_stat_dec.h @@ -63,20 +63,12 @@ typedef struct /* basic allpass structure */ typedef struct { -#ifndef IVAS_FLOAT_FIXED - float gains[3]; -#endif Word16 delays[3]; -#ifndef IVAS_FLOAT_FIXED - float buffer[3][STEREO_DFT_ALLPASS_BUFFERLEN]; -#endif Word16 pos; -#ifdef IVAS_FLOAT_FIXED Word32 gains_fx[3]; /* Q31 */ Word32 buffer_fx[3][STEREO_DFT_ALLPASS_BUFFERLEN]; /* Q(q_buffer_fx) */ Word16 q_buffer_fx; -#endif } basic_allpass_t; @@ -90,52 +82,27 @@ typedef struct stereo_dft_dec_data_struct int16_t NFFT; /* Size of DFT */ /*FFT*/ -#ifndef IVAS_FLOAT_FIXED - const float *dft_trigo; - const float *dft_trigo_12k8; - const float *dft_trigo_16k; - const float *dft_trigo_8k; -#endif int16_t dft_trigo_step; -#ifdef IVAS_FLOAT_FIXED const Word16 *dft_trigo_fx; /* Q15 */ const Word16 *dft_trigo_12k8_fx; /* Q15 */ const Word16 *dft_trigo_16k_fx; /* Q15 */ const Word16 *dft_trigo_8k_fx; /* Q15 */ -#endif - int16_t dft32ms_ovl; /* Overlap size */ -#ifndef IVAS_FLOAT_FIXED - const float *win32ms; /* DFT window */ - const float *win32ms_12k8; /* DFT window */ - const float *win32ms_16k; /* DFT window */ - const float *win32ms_8k; /* DFT window */ -#else - const Word16 *win32ms_fx; /* DFT window */ /* Q15 */ - const Word16 *win32ms_12k8_fx; /* DFT window */ /* Q15 */ - const Word16 *win32ms_16k_fx; /* DFT window */ /* Q15 */ - const Word16 *win32ms_8k_fx; /* DFT window */ /* Q15 */ -#endif + int16_t dft32ms_ovl; /* Overlap size */ + const Word16 *win32ms_fx; /* DFT window */ /* Q15 */ + const Word16 *win32ms_12k8_fx; /* DFT window */ /* Q15 */ + const Word16 *win32ms_16k_fx; /* DFT window */ /* Q15 */ + const Word16 *win32ms_8k_fx; /* DFT window */ /* Q15 */ - int16_t dft32ms_ovl2; /* Overlap2 size */ -#ifndef IVAS_FLOAT_FIXED - const float *win232ms; /* DFT window */ - const float *win232ms_12k8; /* DFT window */ - const float *win232ms_16k; /* DFT window */ - const float *win232ms_8k; /* DFT window */ -#else - const Word16 *win232ms_fx; /* DFT window */ /* Q15 */ - const Word16 *win232ms_12k8_fx; /* DFT window */ /* Q15 */ - const Word16 *win232ms_16k_fx; /* DFT window */ /* Q15 */ - const Word16 *win232ms_8k_fx; /* DFT window */ /* Q15 */ - const Word16 *win_8k_fx; /* DFT window residual */ /* Q15 */ -#endif + int16_t dft32ms_ovl2; /* Overlap2 size */ + const Word16 *win232ms_fx; /* DFT window */ /* Q15 */ + const Word16 *win232ms_12k8_fx; /* DFT window */ /* Q15 */ + const Word16 *win232ms_16k_fx; /* DFT window */ /* Q15 */ + const Word16 *win232ms_8k_fx; /* DFT window */ /* Q15 */ + const Word16 *win_8k_fx; /* DFT window residual */ /* Q15 */ -#ifndef IVAS_FLOAT_FIXED - const float *win_8k; /* DFT window residual */ -#endif /*Bands*/ int16_t band_res[STEREO_DFT_DEC_DFT_NB]; @@ -146,52 +113,23 @@ typedef struct stereo_dft_dec_data_struct int16_t prm_res[STEREO_DFT_DEC_DFT_NB]; /*Stereo parameters*/ -#ifndef IVAS_FLOAT_FIXED - float side_gain[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; -#else - Word32 side_gain_fx[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; /* Q31 */ -#endif + Word32 side_gain_fx[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; /* Q31 */ int16_t side_gain_flag_1; int16_t side_gain_flag_2; int16_t side_gain_index_previous[STEREO_DFT_BAND_MAX]; int16_t side_gain_index[STEREO_DFT_BAND_MAX]; -#ifndef IVAS_FLOAT_FIXED - float gipd[STEREO_DFT_DEC_DFT_NB]; -#else - Word32 gipd_fx[STEREO_DFT_DEC_DFT_NB]; /* Q27 */ -#endif - int16_t no_ipd_flag; /* flag to indicate when no IPD gets used */ + Word32 gipd_fx[STEREO_DFT_DEC_DFT_NB]; /* Q27 */ + int16_t no_ipd_flag; /* flag to indicate when no IPD gets used */ -#ifndef IVAS_FLOAT_FIXED - float itd[STEREO_DFT_DEC_DFT_NB]; -#endif -#ifndef IVAS_FLOAT_FIXED - float itd_xfade_step; - float itd_xfade_target; -#endif int16_t itd_xfade_counter; -#ifndef IVAS_FLOAT_FIXED - float itd_xfade_prev; -#endif int32_t last_active_element_brate; -#ifndef IVAS_FLOAT_FIXED - float ipd_xfade_target; - float ipd_xfade_step; -#endif int16_t ipd_xfade_counter; -#ifndef IVAS_FLOAT_FIXED - float ipd_xfade_prev; -#endif /*residual prediction*/ int16_t res_pred_mode[STEREO_DFT_DEC_DFT_NB]; /* residual prediction mode: 0(off), 1(stereo filling only), 2(enhanced stereo filling) */ -#ifndef IVAS_FLOAT_FIXED - float res_pred_gain[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; /* prediction gain for the residual HFs */ -#endif -#ifdef IVAS_FLOAT_FIXED - Word32 itd_fx[STEREO_DFT_DEC_DFT_NB]; /* Q15 */ + Word32 itd_fx[STEREO_DFT_DEC_DFT_NB]; /* Q15 */ Word32 itd_xfade_step_fx; /* Q15 */ Word32 itd_xfade_target_fx; /* Q15 */ @@ -201,19 +139,11 @@ typedef struct stereo_dft_dec_data_struct Word32 ipd_xfade_step_fx; /* Q27 */ Word32 ipd_xfade_prev_fx; /* Q27 */ Word32 res_pred_gain_fx[STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX]; /* prediction gain for the residual HFs */ /* Q31 */ -#endif - int16_t res_pred_band_min; /* Band min for prediction of residual */ -#ifndef IVAS_FLOAT_FIXED - float DFT_past_DMX[STEREO_DFT_PAST_MAX][STEREO_DFT32MS_N_32k]; /* Past DMX for residual prediction */ -#endif + int16_t res_pred_band_min; /* Band min for prediction of residual */ int16_t past_DMX_pos; int16_t res_pred_flag_0; int16_t res_pred_flag_1; int16_t res_pred_index_previous[STEREO_DFT_BAND_MAX]; -#ifndef IVAS_FLOAT_FIXED - float past_res_pred_gain[STEREO_DFT_PAST_MAX][STEREO_DFT_BAND_MAX]; - float res_gains_ind[2][2 * STEREO_DFT_BAND_MAX]; -#endif int16_t reverb_flag; int16_t nbands_respred; @@ -221,16 +151,7 @@ typedef struct stereo_dft_dec_data_struct /*residual coding*/ int16_t res_cod_mode[STEREO_DFT_DEC_DFT_NB]; /* mode from 0 (off) to 3 */ int16_t res_cod_band_max; /* Band max for coding of residual */ -#ifndef IVAS_FLOAT_FIXED - float res_global_gain; -#endif int16_t res_cod_line_max; -#ifndef IVAS_FLOAT_FIXED - float res_hb_nrg_mem; - float bpf_error_signal_last; - float bpf_error_ratio_mem; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 DFT_past_DMX_fx[STEREO_DFT_PAST_MAX][STEREO_DFT32MS_N_32k]; /* Past DMX for residual prediction */ /* Q(q_DFT_past_DMX_fx) */ Word32 past_res_pred_gain_fx[STEREO_DFT_PAST_MAX][STEREO_DFT_BAND_MAX]; /* Q31 */ Word32 res_gains_ind_fx[2][2 * STEREO_DFT_BAND_MAX]; /* Q26 */ @@ -242,21 +163,11 @@ typedef struct stereo_dft_dec_data_struct Word16 q_ap_delay_mem_fx; Word16 q_smoothed_nrg; Word16 q_DFT_past_DMX_fx[STEREO_DFT_PAST_MAX]; - Word32 res_global_gain_fx; /* Q15 */ -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED - float res_cod_mem[STEREO_DFT_OVL_8k]; - float buff_LBTCX_mem[NS2SA( 16000, STEREO_DFT32MS_OVL_NS )]; -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED + Word32 res_global_gain_fx; /* Q15 */ Word32 res_cod_mem_fx[STEREO_DFT_OVL_8k]; /* Q(q_res_cod_mem_fx) */ Word32 buff_LBTCX_mem_fx[NS2SA( 16000, STEREO_DFT32MS_OVL_NS )]; /* Q11 */ Word16 q_res_cod_mem_fx; -#endif -#ifndef IVAS_FLOAT_FIXED - float stab_fac_smooth_res; /* low-pass filtered stability factor */ -#endif BPF_DEC_HANDLE hBpf; TCX_LTP_DEC_HANDLE hTcxLtpDec; @@ -264,20 +175,8 @@ typedef struct stereo_dft_dec_data_struct int16_t attackPresent; int16_t wasTransient; -#ifndef IVAS_FLOAT_FIXED - float lt_pred_gain; - float lt_pred_gain_variation; - float lt_var_mean_ratio; - float stefi_short_gain; - float stefi_long_gain; -#endif basic_allpass_t ap1, ap2, ap3; -#ifndef IVAS_FLOAT_FIXED - float ap_delay_mem[NS2SA( 16000, DELAY_BWE_TOTAL_NS )]; - float ap_fade_mem[STEREO_DFT_ALLPASS_FADELEN_16k]; -#endif -#ifdef IVAS_FLOAT_FIXED Word16 stab_fac_smooth_res_fx; /* low-pass filtered stability factor */ /* Q15 */ Word32 lt_pred_gain_fx; /* Q(q_lt_pred_gain) */ Word32 lt_pred_gain_variation_fx; /* Q(q_lt_pred_gain) */ @@ -288,34 +187,14 @@ typedef struct stereo_dft_dec_data_struct Word32 ap_delay_mem_fx[NS2SA( 16000, DELAY_BWE_TOTAL_NS )]; /* Q(q_ap_fade_mem_fx) */ Word32 ap_fade_mem_fx[STEREO_DFT_ALLPASS_FADELEN_16k]; /* Q(q_ap_fade_mem_fx) */ Word16 q_ap_fade_mem_fx; -#endif int16_t ap_wasTransient; -#ifndef IVAS_FLOAT_FIXED - float smooth_dmx_nrg[STEREO_DFT_BAND_MAX]; - float smooth_res_nrg[STEREO_DFT_BAND_MAX]; -#endif int16_t core_hist[STEREO_DFT_CORE_HIST_MAX]; -#ifndef IVAS_FLOAT_FIXED - float hb_stefi_sig[L_FRAME48k + NS2SA( 48000, STEREO_DFT_TD_STEFI_DELAY_NS )]; -#endif int16_t hb_stefi_delay; -#ifndef IVAS_FLOAT_FIXED - float hb_nrg[STEREO_DFT_CORE_HIST_MAX]; -#endif -#ifndef IVAS_FLOAT_FIXED - float hb_nrg_subr[STEREO_DFT_NBDIV]; -#endif -#ifndef IVAS_FLOAT_FIXED - float td_gain[STEREO_DFT_CORE_HIST_MAX]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 smooth_dmx_nrg_fx[STEREO_DFT_BAND_MAX]; /* Q(q_smoothed_nrg) */ Word32 smooth_res_nrg_fx[STEREO_DFT_BAND_MAX]; /* Q(q_smoothed_nrg) */ Word32 td_gain_fx[STEREO_DFT_CORE_HIST_MAX]; /* Q(q_td_gain) */ -#endif -#ifdef IVAS_FLOAT_FIXED Word32 hb_stefi_sig_fx[L_FRAME48k + NS2SA( 48000, STEREO_DFT_TD_STEFI_DELAY_NS )]; /* Q(q_hb_stefi_sig_fx) */ Word32 hb_nrg_fx[STEREO_DFT_CORE_HIST_MAX]; /* Q(q_hb_nrg) */ Word32 hb_nrg_subr_fx[STEREO_DFT_NBDIV]; /* Q(q_hb_nrg_subr) */ @@ -324,41 +203,20 @@ typedef struct stereo_dft_dec_data_struct Word16 prev_Q_stefi_sig; Word16 q_td_gain[STEREO_DFT_CORE_HIST_MAX]; Word16 q_hb_stefi_sig_fx; -#endif /* stereo DTX */ -#ifndef IVAS_FLOAT_FIXED - float g_state[STEREO_DFT_BAND_MAX]; -#else - Word16 g_state_fx[STEREO_DFT_BAND_MAX]; /* Q15 */ -#endif + Word16 g_state_fx[STEREO_DFT_BAND_MAX]; /* Q15 */ int16_t frame_sid_nodata; int16_t frame_nodata; int16_t frame_sid; -#ifndef IVAS_FLOAT_FIXED - float scale; -#else - Word16 scale_fx; /* Q15 */ -#endif + Word16 scale_fx; /* Q15 */ /* PLC on residual signal */ -#ifndef IVAS_FLOAT_FIXED - float res_mem[STEREO_DFT_RES_BW_MAX]; -#endif int16_t time_offs; -#ifndef IVAS_FLOAT_FIXED - float past_dmx_nrg; - float sg_mean; -#endif int16_t sg_mem_corrupt; int16_t recovery_flg; -#ifndef IVAS_FLOAT_FIXED - float smooth_buf[SBA_DIRAC_STEREO_NUM_BANDS][SBA_DIRAC_NRG_SMOOTH_LONG + 1]; - float smooth_fac[NB_DIV][SBA_DIRAC_STEREO_NUM_BANDS]; -#endif -#ifdef IVAS_FLOAT_FIXED /* PLC on residual signal */ Word32 sg_mean_fx; /* Q31 */ Word32 res_mem_fx[STEREO_DFT_RES_BW_MAX]; /* Q(q_res_mem) */ @@ -369,20 +227,12 @@ typedef struct stereo_dft_dec_data_struct Word16 q_hb_nrg; Word16 q_hb_nrg_subr; Word16 q_res_mem; -#endif int16_t first_frame; -#ifndef IVAS_FLOAT_FIXED - float mixer_mat_smooth[2][4][2 * IVAS_MAX_NUM_BANDS]; - float g_L_prev; - float g_R_prev; - const float *max_smooth_gains, *min_smooth_gains; -#else - Word32 mixer_mat_smooth_fx[2][4][2 * IVAS_MAX_NUM_BANDS]; /* Q31 */ - Word32 g_L_prev_fx; /* Q31 */ - Word32 g_R_prev_fx; /* Q31 */ - const Word16 *max_smooth_gains_fx, *min_smooth_gains_fx; /* Q15 */ -#endif + Word32 mixer_mat_smooth_fx[2][4][2 * IVAS_MAX_NUM_BANDS]; /* Q31 */ + Word32 g_L_prev_fx; /* Q31 */ + Word32 g_R_prev_fx; /* Q31 */ + const Word16 *max_smooth_gains_fx, *min_smooth_gains_fx; /* Q15 */ } STEREO_DFT_DEC_DATA, *STEREO_DFT_DEC_DATA_HANDLE; @@ -390,21 +240,11 @@ typedef struct stereo_dft_dec_data_struct /* DFT Stereo mono output structure */ typedef struct stereo_dft_dmx_out_data_structure { -#ifndef IVAS_FLOAT_FIXED - float targetGain; /* TCA gain norm applied on target (or right) channel in current frame */ - float prevTargetGain; /* TCA gain norm applied on target (or right) channel in previous frame */ -#else - Word32 targetGain_fx; /* Q29 */ - Word32 prevTargetGain_fx; /* Q29 */ -#endif + Word32 targetGain_fx; /* Q29 */ + Word32 prevTargetGain_fx; /* Q29 */ -#ifndef IVAS_FLOAT_FIXED - float memOutHB[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - float memTransitionHB[NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; -#else - Word32 memOutHB_fx[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* Q11 */ - Word32 memTransitionHB_fx[NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; /* Q11 */ -#endif + Word32 memOutHB_fx[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* Q11 */ + Word32 memTransitionHB_fx[NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; /* Q11 */ } STEREO_DFT_DMX_DATA, *STEREO_DFT_DMX_DATA_HANDLE; @@ -415,46 +255,28 @@ typedef struct stereo_dft_dmx_out_data_structure typedef struct stereo_dec_cng { -#ifndef IVAS_FLOAT_FIXED - float coh[STEREO_DFT_BAND_MAX + 1]; /* coherence */ - float cm[STEREO_DFT_BAND_MAX]; /* cm */ -#else - Word16 cm_fx[STEREO_DFT_BAND_MAX]; /* cm */ /* Q15 */ - Word16 coh_fx[STEREO_DFT_BAND_MAX + 1]; /* coherence */ /* Q15 */ -#endif - int16_t first_SID; /* first SID indicator */ - int16_t first_SID_after_TD; /* first SID after TD-stereo indicator */ - int16_t prev_sid_nodata; /* previous frame SID/FRAME_NO_DATA indicator */ - int16_t last_tdm_idx; /* last tdm index */ -#ifndef IVAS_FLOAT_FIXED - float c_LR_LT; /* left right cross correlation */ -#else - Word32 c_LR_LT_fx; /* left right cross correlation */ /* Q31 */ -#endif - int16_t active_frame_counter; /* counter for active frames */ - int16_t xfade_frame_counter; /* xfade counter */ - int16_t xfade_length; /* number of frames to perform xfade */ - int16_t nr_dft_frames; /* dft frame counter */ - int16_t nr_corr_frames; /* correlation frame counter */ - int16_t nr_sid_frames; /* SID frame counter */ - int16_t last_act_element_mode; /* Element mode of last active frame */ -#ifndef IVAS_FLOAT_FIXED - float olapBufferSynth22[FFTLEN]; /* overlap buffer for secondary channel CNA */ -#endif - Word16 olapBufferSynth22_fx[FFTLEN]; /* overlap buffer for secondary channel CNA */ - Word32 olapBufferSynth22_32fx[FFTLEN]; /* overlap buffer for secondary channel CNA */ - int16_t flag_cna_fade; /* flag enabling CNA fade out */ -#ifndef IVAS_FLOAT_FIXED - float maskingNoiseS[L_FRAME16k]; /* masking noise (CNA) for secondary channel */ -#endif - Word16 maskingNoiseS_fx[L_FRAME16k]; /* masking noise (CNA) for secondary channel */ - int16_t enableSecCNA; /* flag enabling secondary channel CNA */ -#ifndef IVAS_FLOAT_FIXED - float c_PS_LT; /* long term cross-correlation between primary and secondary channel */ -#endif - Word16 c_PS_LT_fx; /* long term cross-correlation between primary and secondary channel */ // Assumed Q15 for initialization. Can be modified later if reqd. - const int16_t *frameSize; /* Frame size in samples */ - const int16_t *fftlen; /* FFT length used for the decomposition */ + Word16 cm_fx[STEREO_DFT_BAND_MAX]; /* cm */ /* Q15 */ + Word16 coh_fx[STEREO_DFT_BAND_MAX + 1]; /* coherence */ /* Q15 */ + int16_t first_SID; /* first SID indicator */ + int16_t first_SID_after_TD; /* first SID after TD-stereo indicator */ + int16_t prev_sid_nodata; /* previous frame SID/FRAME_NO_DATA indicator */ + int16_t last_tdm_idx; /* last tdm index */ + Word32 c_LR_LT_fx; /* left right cross correlation */ /* Q31 */ + int16_t active_frame_counter; /* counter for active frames */ + int16_t xfade_frame_counter; /* xfade counter */ + int16_t xfade_length; /* number of frames to perform xfade */ + int16_t nr_dft_frames; /* dft frame counter */ + int16_t nr_corr_frames; /* correlation frame counter */ + int16_t nr_sid_frames; /* SID frame counter */ + int16_t last_act_element_mode; /* Element mode of last active frame */ + Word16 olapBufferSynth22_fx[FFTLEN]; /* overlap buffer for secondary channel CNA */ + Word32 olapBufferSynth22_32fx[FFTLEN]; /* overlap buffer for secondary channel CNA */ + int16_t flag_cna_fade; /* flag enabling CNA fade out */ + Word16 maskingNoiseS_fx[L_FRAME16k]; /* masking noise (CNA) for secondary channel */ + int16_t enableSecCNA; /* flag enabling secondary channel CNA */ + Word16 c_PS_LT_fx; /* long term cross-correlation between primary and secondary channel */ // Assumed Q15 for initialization. Can be modified later if reqd. + const int16_t *frameSize; /* Frame size in samples */ + const int16_t *fftlen; /* FFT length used for the decomposition */ } STEREO_CNG_DEC, *STEREO_CNG_DEC_HANDLE; @@ -473,25 +295,15 @@ typedef struct stereo_td_dec_data_structure int16_t tdm_lp_reuse_flag; /* Flag that indicate if it is possible to reuse the LP coefficient from the primary channel or not */ int16_t tdm_low_rate_mode; /* secondary channel low rate mode flag */ -#ifndef IVAS_FLOAT_FIXED - float tdm_Pri_pitch_buf[NB_SUBFR]; -#endif Word16 tdm_Pri_pitch_buf_fx[NB_SUBFR]; int16_t tdm_Pitch_reuse_flag; int16_t tdm_LRTD_flag; int16_t flag_skip_DMX; /* flag that indicates whether the TD downmixing is skipped */ -#ifndef IVAS_FLOAT_FIXED - float TCX_old_syn_Overl[L_FRAME16k / 2]; /* past ovrl buffer for possible switching from TD stereo ACELP to MDCT stereo TCX frame */ - float prevSP_ratio; /* previous SP ratio */ - float SP_ratio_LT; /* longterm SP ratio */ - float c_LR_LT; /* left-right cross-correlation */ -#else Word32 TCX_old_syn_Overl_fx[L_FRAME16k / 2]; /* past ovrl buffer for possible switching from TD stereo ACELP to MDCT stereo TCX frame */ /* Q11 */ Word16 prevSP_ratio_fx; /* previous SP ratio */ Word32 SP_ratio_LT_fx; /* longterm SP ratio */ Word32 c_LR_LT_fx; /* left-right cross-correlation */ -#endif } STEREO_TD_DEC_DATA, *STEREO_TD_DEC_DATA_HANDLE; @@ -516,25 +328,13 @@ typedef struct stereo_mdct_dec_data_structure int16_t use_itd; int16_t itd_mode; /*0/1*/ -#ifndef IVAS_FLOAT_FIXED - float itd; -#else - Word32 itd_fx; /* Q15 */ -#endif + Word32 itd_fx; /* Q15 */ int16_t reverse_dmx; -#ifndef IVAS_FLOAT_FIXED - float smooth_ratio; -#else - Word32 smooth_ratio_fx; /* Q26 */ -#endif + Word32 smooth_ratio_fx; /* Q26 */ int16_t prev_ms_mask[NB_DIV][MAX_SFB]; -#ifndef IVAS_FLOAT_FIXED - float lastCoh; -#else - Word16 lastCoh_fx; /* Q14 */ -#endif + Word16 lastCoh_fx; /* Q14 */ int16_t noise_seeds_channels[CPE_CHANNELS]; int16_t noise_seed_common; int16_t isSBAStereoMode; @@ -548,17 +348,12 @@ typedef struct stereo_mdct_dec_data_structure typedef struct stereo_tca_dec_data_structure { - int16_t refChanIndx; /* reference channel index in current frame */ - int16_t prevRefChanIndx; /* reference channel index in previous frame */ - int16_t indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ - int16_t indx_ica_gD; /* ICA target gain */ -#ifndef IVAS_FLOAT_FIXED - float targetGain; /* gain norm applied on target (or right) channel in current frame */ - float prevTargetGain; /* gain norm applied on target (or right) channel in previous frame */ -#else - Word32 targetGain_fx; /* gain norm applied on target (or right) channel in current frame */ // Q29 - Word32 prevTargetGain_fx; /* gain norm applied on target (or right) channel in previous frame */ // Q29 -#endif + int16_t refChanIndx; /* reference channel index in current frame */ + int16_t prevRefChanIndx; /* reference channel index in previous frame */ + int16_t indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ + int16_t indx_ica_gD; /* ICA target gain */ + Word32 targetGain_fx; /* gain norm applied on target (or right) channel in current frame */ // Q29 + Word32 prevTargetGain_fx; /* gain norm applied on target (or right) channel in previous frame */ // Q29 int16_t corrLagStats; /* corr lag stats in current frame */ int16_t prevCorrLagStats; /* corr lag stats in previous frame */ @@ -567,13 +362,8 @@ typedef struct stereo_tca_dec_data_structure int16_t interp_dec_switch_to_zero_diff; /* switch flag for interpolation */ -#ifdef IVAS_FLOAT_FIXED Word32 memChanL_fx[L_DEC_MEM_LEN_ICA]; /* left channel input to correct at the cross-over for Fixed */ Word32 memChanR_fx[L_DEC_MEM_LEN_ICA]; /* right channel input to correct at the cross-over for Fixed */ -#else - float memChanL[L_DEC_MEM_LEN_ICA]; /* left channel input to correct at the cross-over */ - float memChanR[L_DEC_MEM_LEN_ICA]; /* right channel input to correct at the cross-over */ -#endif } STEREO_TCA_DEC_DATA, *STEREO_TCA_DEC_HANDLE; @@ -589,49 +379,26 @@ typedef struct stereo_icbwe_dec_data_structure Word16 prev_gsIndx; /* SHB output memory */ -#ifndef IVAS_FLOAT_FIXED - float memOutHB[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - - float memTransitionHB[CPE_CHANNELS][NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; -#else - Word32 memOutHB_fx[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* Q11 */ + Word32 memOutHB_fx[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* Q11 */ Word32 memTransitionHB_fx[CPE_CHANNELS][NS2SA( 48000, STEREO_DFT32MS_OVL_NS )]; /* Q11 */ -#endif /* unscaled & scaled SHB synthesis memory */ -#ifndef IVAS_FLOAT_FIXED - float mem_syn_shb_nonref[L_SHB_LAHEAD]; - float mem_lpc_shbsynth_nonref[LPC_SHB_ORDER]; - float mem_syn_shb_ola_nonref[L_SHB_LAHEAD]; -#else - Word32 mem_syn_shb_nonref_fx[L_SHB_LAHEAD]; /* Q(prev_Q_syn_shb_nonref) */ - Word32 mem_lpc_shbsynth_nonref_fx[LPC_SHB_ORDER]; /* Q(prev_Q_lpc_shbsynth_nonref) */ - Word32 mem_syn_shb_ola_nonref_fx[L_SHB_LAHEAD]; /* Q(prev_Q_syn_shb_ola_nonref) */ + Word32 mem_syn_shb_nonref_fx[L_SHB_LAHEAD]; /* Q(prev_Q_syn_shb_nonref) */ + Word32 mem_lpc_shbsynth_nonref_fx[LPC_SHB_ORDER]; /* Q(prev_Q_lpc_shbsynth_nonref) */ + Word32 mem_syn_shb_ola_nonref_fx[L_SHB_LAHEAD]; /* Q(prev_Q_syn_shb_ola_nonref) */ Word16 prev_Q_syn_shb_nonref; Word16 prev_Q_lpc_shbsynth_nonref; Word16 prev_Q_syn_shb_ola_nonref; -#endif /* inter-channel BWE spectral shape adj. */ -#ifndef IVAS_FLOAT_FIXED - float prevSpecMapping; - float memShbSpecMapping; - float prevgsMapping; -#else Word16 prevSpecMapping_fx; /* Q15 */ Word32 memShbSpecMapping_fx; /* Q(prev_Q_memshbspec) */ Word16 prevgsMapping_fx; /* Q14 */ Word16 prev_Q_memshbspec; -#endif -#ifndef IVAS_FLOAT_FIXED - float memShbHilbert_nonref[HILBERT_MEM_SIZE]; - float memShbInterp_nonref[2 * ALLPASSSECTIONS_STEEP + 1]; - float memShb_fsout_nonref[INTERP_3_2_MEM_LEN]; -#else Word32 memShbHilbert_nonref_fx[HILBERT_MEM_SIZE]; /* Q(prev_Q_hilb) */ Word32 memShbInterp_nonref_fx[2 * ALLPASSSECTIONS_STEEP + 1]; /* Q(prev_Q_interp) */ Word32 memShb_fsout_nonref_fx[INTERP_3_2_MEM_LEN]; /* Q(prev_Q_fsout) */ @@ -639,37 +406,18 @@ typedef struct stereo_icbwe_dec_data_structure Word16 prev_Q_hilb; Word16 prev_Q_interp; Word16 prev_Q_fsout; -#endif Word16 syn_dm_phase_nonref; -#ifndef IVAS_FLOAT_FIXED - float icbweM2Ref_prev; -#else Word16 icbweM2Ref_prev_fx; /* Q14 */ -#endif -#ifndef IVAS_FLOAT_FIXED - float nlExc16k[L_FRAME16k]; - float mixExc16k[L_FRAME16k]; - float shbSynthRef[L_FRAME16k]; -#endif -#ifdef IVAS_FLOAT_FIXED Word16 nlExc16k_fx[L_FRAME16k]; /* Q(st->prev_Q_bwe_exc - 16) */ Word16 mixExc16k_fx[L_FRAME16k]; /* Q(st->Q_exc) */ Word16 shbSynthRef_fx[L_FRAME16k]; /* Q(st->prev_Qx) */ -#endif Word16 MSFlag; -#ifndef IVAS_FLOAT_FIXED - float lpSHBRef[LPC_SHB_ORDER + 1]; - float gshapeRef[NUM_SHB_SUBFR]; - float gFrameRef; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 lpSHBRef_fx[LPC_SHB_ORDER + 1]; /* Q12 */ Word16 gshapeRef_fx[NUM_SHB_SUBFR]; /* Q15 */ Word32 gFrameRef_fx; /* Q18 */ -#endif } STEREO_ICBWE_DEC_DATA, *STEREO_ICBWE_DEC_HANDLE; @@ -694,7 +442,6 @@ typedef struct typedef struct param_ism_rendering { -#ifdef IVAS_FLOAT_FIXED Word16 *proto_matrix_fx; Word16 *interpolator_fx; /* Q15 */ Word32 *Cldfb_RealBuffer_tc_fx; /* Q31 - Cldfb_RealBuffer_tc_exp */ @@ -705,14 +452,6 @@ typedef struct param_ism_rendering Word16 exp_mixing_matrix_lin_fx[CLDFB_NO_CHANNELS_MAX]; Word32 mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; Word16 exp_mixing_matrix_lin_old_fx[CLDFB_NO_CHANNELS_MAX]; -#else // IVAS_FLOAT_FIXED - float *proto_matrix; - float *interpolator; - float mixing_matrix_lin[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; - float mixing_matrix_lin_old[CLDFB_NO_CHANNELS_MAX][PARAM_ISM_MAX_CHAN * PARAM_ISM_MAX_DMX]; - float *Cldfb_RealBuffer_tc; - float *Cldfb_ImagBuffer_tc; -#endif } PARAM_ISM_RENDERING_DATA, *PARAM_ISM_RENDERING_HANDLE; @@ -720,15 +459,9 @@ typedef struct param_ism_rendering typedef struct ivas_param_ism_dec_data_structure { /*Parameter decoding*/ -#ifndef IVAS_FLOAT_FIXED - float azimuth_values[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; - float elevation_values[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; - float power_ratios[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS][MAX_PARAM_ISM_WAVE]; -#else Word32 azimuth_values_fx[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; /* Q22 */ Word32 elevation_values_fx[MAX_PARAM_SPATIAL_SUBFRAMES * IVAS_MAX_NUM_BANDS]; /* Q22 */ Word16 power_ratios_fx[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS][MAX_PARAM_ISM_WAVE]; /* Q15 */ -#endif /*sub-modules*/ PARAM_ISM_CONFIG_HANDLE hParamIsm; /* Parametric ISM common handle */ @@ -761,30 +494,6 @@ typedef struct ivas_dirac_dec_data_structure typedef struct dirac_output_synthesis_cov_state_structure { /* only pointer to local buffers */ -#ifndef IVAS_FLOAT_FIXED - float *direct_power_factor; - float *diffuse_power_factor; - - /* only pointer to local buffers */ - float *direct_responses; /* direct responses for DOA of current frame. Size: num_freq_bands*num_channels. */ - float *direct_responses_square; - float *diffuse_responses_square; /* squared diffuse responses. Size: num_channels. */ - - /* only pointer to local buffers */ - float *proto_direct_buffer_f; /* Buffer for direct sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ - float *proto_diffuse_buffer_f; /* Buffer for diffuse sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ - float *proto_power; /* Smoothed power of the prototype signals. Size: num_freq_bands*num_channels. */ - float *proto_power_diff; -#endif -#ifndef IVAS_FLOAT_FIXED - float *cx_old[CLDFB_NO_CHANNELS_MAX]; - float *cy_old[CLDFB_NO_CHANNELS_MAX]; - float *mixing_matrix_old[CLDFB_NO_CHANNELS_MAX]; - float *mixing_matrix_res_old[CLDFB_NO_CHANNELS_MAX]; - float *mixing_matrix[CLDFB_NO_CHANNELS_MAX]; - float *mixing_matrix_res[CLDFB_NO_CHANNELS_MAX]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *cx_old_fx[CLDFB_NO_CHANNELS_MAX]; Word16 cx_old_len; Word32 *cy_old_fx[CLDFB_NO_CHANNELS_MAX]; @@ -802,7 +511,6 @@ typedef struct dirac_output_synthesis_cov_state_structure Word16 mixing_matrix_len; Word16 *mixing_matrix_res_exp; Word16 mixing_matrix_res_len; -#endif // IVAS_FLOAT_FIXED } DIRAC_OUTPUT_SYNTHESIS_COV_STATE; @@ -817,11 +525,7 @@ typedef struct ivas_param_mc_diff_proto_info_structure int16_t *proto_index_diff; int16_t *num_source_chan_diff; int16_t **source_chan_idx; -#ifdef IVAS_FLOAT_FIXED Word32 **proto_fac_fx; -#else - float **proto_fac; -#endif // IVAS_FLOAT_FIXED } PARAM_MC_DIFF_PROTO_INFO; @@ -829,16 +533,11 @@ typedef struct ivas_param_mc_diff_proto_info_structure typedef struct ivas_param_mc_dec_data_structure { int16_t slot_size; -#ifdef IVAS_FLOAT_FIXED Word32 *Cldfb_RealBuffer_tc_fx; // Q12 Word16 Cldfb_RealBuffer_tc_e; Word32 *Cldfb_ImagBuffer_tc_fx; // Q12 Word16 Cldfb_ImagBuffer_tc_e; Word16 sz; -#else - float *Cldfb_RealBuffer_tc; - float *Cldfb_ImagBuffer_tc; -#endif int16_t subframe_nbslots[MAX_JBM_SUBFRAMES_5MS]; int16_t nb_subframes; int16_t subframes_rendered; @@ -859,46 +558,26 @@ typedef struct ivas_param_mc_dec_data_structure /* Decorrelator options */ int16_t max_band_decorr; /*Decoder states=memories*/ -#ifndef IVAS_FLOAT_FIXED - float *proto_frame_f; - float *proto_frame_dec_f; -#else - Word32 *proto_frame_f_fx; /* Q11 */ - Word32 *proto_frame_dec_f_fx; /* Q11 */ -#endif + Word32 *proto_frame_f_fx; /* Q11 */ + Word32 *proto_frame_dec_f_fx; /* Q11 */ DIRAC_OUTPUT_SYNTHESIS_COV_STATE h_output_synthesis_cov_state; DIRAC_OUTPUT_SYNTHESIS_PARAMS h_output_synthesis_params; int16_t max_band_energy_compensation; HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC; -#ifndef IVAS_FLOAT_FIXED - float *icc_q; /* ICC parameters*/ - float *icld_q; -#else Word16 *icc_q_fx; /* ICC parameters*/ /* Q15 */ Word16 *icld_q_fx; /* Q8 */ -#endif int16_t max_param_band_abs_cov; -#ifndef IVAS_FLOAT_FIXED - float *ls_conv_dmx_matrix; - float *proto_matrix_int; -#endif -#ifdef IVAS_FLOAT_FIXED Word16 q_proto_frame_f; Word32 *ls_conv_dmx_matrix_fx; /* Q30 */ Word32 *proto_matrix_int_fx; Word16 proto_matrix_int_len; Word16 proto_matrix_int_e; -#endif /*sub-modules*/ HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params; HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state; -#ifdef IVAS_FLOAT_FIXED Word32 *hoa_encoder_fx; // Q31 -#else - float *hoa_encoder; -#endif // IVAS_FLOAT_FIXED } PARAM_MC_DEC_DATA, *PARAM_MC_DEC_HANDLE; @@ -917,7 +596,6 @@ typedef struct ivas_mc_paramupmix_dec_data_structure int16_t free_param_interpolator; -#ifdef IVAS_FLOAT_FIXED Word32 alphas_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; // Q28 Word32 betas_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; // Q28 Word32 alpha_prev_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; // Q28 @@ -927,17 +605,6 @@ typedef struct ivas_mc_paramupmix_dec_data_structure Word32 alpha_sf_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; // Q28 Word32 beta_sf_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; // Q28 Word32 *hoa_encoder_fx; // Q31 -#else - float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float betas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float alpha_prev[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float beta_prev[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float *pcm_delay[MC_PARAMUPMIX_MAX_TRANSPORT_CHANS]; - float *param_interpolator; - float alpha_sf[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float beta_sf[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float *hoa_encoder; -#endif // IVAS_FLOAT_FIXED } MC_PARAMUPMIX_DEC_DATA, *MC_PARAMUPMIX_DEC_HANDLE; @@ -948,13 +615,8 @@ typedef struct ivas_mc_paramupmix_dec_data_structure /* SPAR MD structure */ typedef struct ivas_spar_dec_matrices_t { -#ifndef IVAS_FLOAT_FIXED - float ***C_re; - float ***P_re; -#else Word32 ***C_re_fx; Word32 ***P_re_fx; -#endif // DEBUG } ivas_spar_dec_matrices_t; @@ -972,14 +634,9 @@ typedef struct ivas_spar_md_dec_state_t int16_t num_decorr; int16_t td_decorr_flag; int16_t spar_plc_enable_fadeout_flag; -#ifndef IVAS_FLOAT_FIXED - float ***mixer_mat; - float mixer_mat_prev[MAX_PARAM_SPATIAL_SUBFRAMES + 1][IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH][IVAS_MAX_NUM_BANDS]; -#else Word32 ***mixer_mat_fx; /* Q(Q_mixer_mat) */ Word32 mixer_mat_prev_fx[MAX_PARAM_SPATIAL_SUBFRAMES + 1][IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH][IVAS_MAX_NUM_BANDS]; /* Q(Q_mixer_mat) */ Word16 Q_mixer_mat; -#endif ivas_spar_md_com_cfg spar_md_cfg; ivas_arith_coeffs_t arith_coeffs; ivas_huff_coeffs_t huff_coeffs; @@ -988,15 +645,9 @@ typedef struct ivas_spar_md_dec_state_t int16_t spar_hoa_md_flag; int16_t spar_hoa_dirac2spar_md_flag; int16_t HOA_md_ind[IVAS_SPAR_MAX_CH]; -#ifndef IVAS_FLOAT_FIXED - float smooth_buf[IVAS_MAX_NUM_BANDS][2 * SBA_DIRAC_NRG_SMOOTH_LONG + 1]; - float smooth_fac[IVAS_MAX_NUM_BANDS]; - float mixer_mat_prev2[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; -#else Word32 smooth_buf_fx[IVAS_MAX_NUM_BANDS][2 * SBA_DIRAC_NRG_SMOOTH_LONG + 1]; /* Q0 */ Word16 smooth_fac_fx[IVAS_MAX_NUM_BANDS]; /* Q15 */ Word32 mixer_mat_prev2_fx[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; /* Q(Q_mixer_mat) */ -#endif int16_t first_valid_frame; ivas_band_coeffs_t *band_coeffs_prev; int16_t base_band_coeffs_age[IVAS_MAX_NUM_BANDS]; @@ -1006,11 +657,7 @@ typedef struct ivas_spar_md_dec_state_t /* AGC structure */ typedef struct ivas_agc_dec_chan_state_t { -#ifndef IVAS_FLOAT_FIXED - float lastGain; -#else - Word16 lastGain_fx; /* Q15 */ -#endif // IVAS_FLOAT_FIXED + Word16 lastGain_fx; /* Q15 */ Word16 gainExpVal; } ivas_agc_dec_chan_state_t; @@ -1027,19 +674,10 @@ typedef struct ivas_agc_dec_state_t /* PCA structure */ typedef struct { -#ifndef IVAS_FLOAT_FIXED - float prev_ql[IVAS_PCA_INTERP]; - float prev_qr[IVAS_PCA_INTERP]; -#else Word16 prev_ql_fx[IVAS_PCA_INTERP]; Word16 prev_qr_fx[IVAS_PCA_INTERP]; -#endif int16_t prev_pca_bypass; -#ifndef IVAS_FLOAT_FIXED - float mem_eigVec_interp[IVAS_PCA_LEN_INTERP_EIG_DEC]; -#else Word16 mem_eigVec_interp_fx[IVAS_PCA_LEN_INTERP_EIG_DEC]; -#endif /* parser output: */ int16_t pca_bypass; int32_t index[2]; @@ -1073,11 +711,7 @@ typedef struct ivas_spar_dec_lib_t /* Data structure for SBA_ISM rendering */ typedef struct ivas_osba_data { -#ifdef IVAS_FLOAT_FIXED Word32 **delayBuffer_fx; -#else // IVAS_FLOAT_FIXED - float **delayBuffer; -#endif int16_t delayBuffer_size; int16_t delayBuffer_nchan; @@ -1096,13 +730,7 @@ typedef struct sce_dec_data_structure /* core coder handle */ DEC_CORE_HANDLE hCoreCoder[1]; -#ifndef IVAS_FLOAT_FIXED - float prev_hb_synth[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* HB synthesis synchro buffer */ - float *save_synth; - float *save_hb_synth; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 prev_hb_synth_fx[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; /* HB synthesis synchro buffer */ Word32 *save_synth_fx; @@ -1110,7 +738,6 @@ typedef struct sce_dec_data_structure Word16 q_prev_hb_synth_fx; Word16 q_save_synth_fx; Word16 q_save_hb_synth_fx; -#endif // IVAS_FLOAT_FIXED } SCE_DEC_DATA, *SCE_DEC_HANDLE; @@ -1129,9 +756,6 @@ typedef struct cpe_dec_data_structure int16_t stereo_switching_counter; int16_t NbFrameMod; -#ifndef IVAS_FLOAT_FIXED - float lt_es_em; -#endif /* core coder handle */ DEC_CORE_HANDLE hCoreCoder[CPE_CHANNELS]; @@ -1145,21 +769,9 @@ typedef struct cpe_dec_data_structure STEREO_CNG_DEC_HANDLE hStereoCng; /* Stereo CNG data structure */ int16_t nchan_out; /* number of output channels (1: mono dmx, 2: default stereo) */ -#ifndef IVAS_FLOAT_FIXED - float prev_hb_synth[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - float *prev_synth_chs[CPE_CHANNELS]; - float prev_synth[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS )]; -#endif /* DFT stereo I/O channel buffer memories that need to be updated for TD->DFT stereo switching */ -#ifndef IVAS_FLOAT_FIXED - float *input_mem[CPE_CHANNELS]; - float *input_mem_LB[CPE_CHANNELS]; - float *input_mem_BPF[1]; - float *output_mem[CPE_CHANNELS]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 lt_es_em_fx; // 24 Word32 prev_hb_synth_fx[CPE_CHANNELS][NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; @@ -1177,13 +789,8 @@ typedef struct cpe_dec_data_structure /* buffers used for fading between MDCT and DFT Stereo */ Word32 old_out_mdct_fx[STEREO_MDCT2DFT_FADE_LEN_48k]; Word32 old_outLB_mdct_fx[2 * STEREO_MDCT2DFT_FADE_LEN_48k]; -#endif /* buffers used for fading between MDCT and DFT Stereo */ -#ifndef IVAS_FLOAT_FIXED - float old_out_mdct[STEREO_MDCT2DFT_FADE_LEN_48k]; - float old_outLB_mdct[2 * STEREO_MDCT2DFT_FADE_LEN_48k]; -#endif int32_t brate_surplus; /* bitrate surplus for bitrate adaptation in combined format coding */ @@ -1227,25 +834,12 @@ typedef struct ivas_lfe_dec_data_structure LFE_WINDOW_HANDLE pWindow_state; const UWord16 *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; Word16 lfe_dec_indices_coeffs_tbl[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; -#ifndef IVAS_FLOAT_FIXED - float lfe_block_delay_s; -#else - Word16 lfe_block_delay_s_fx; /* Q15 */ -#endif + Word16 lfe_block_delay_s_fx; /* Q15 */ Word16 lfe_prior_buf_len; -#ifndef IVAS_FLOAT_FIXED - float prior_out_buffer[L_FRAME48k]; -#else - Word32 prior_out_buffer_fx[L_FRAME48k]; /* Q9 */ -#endif + Word32 prior_out_buffer_fx[L_FRAME48k]; /* Q9 */ -#ifndef IVAS_FLOAT_FIXED - float prevsynth_buf[LFE_PLC_BUFLEN]; - float *lfe_delay_buf; -#else Word32 prevsynth_buf_fx[LFE_PLC_BUFLEN]; /* Q9 */ Word32 *lfe_delay_buf_fx; /* Q9 */ -#endif // IVAS_FLOAT_FIXED Word16 lfe_addl_delay; Word16 bfi_count; @@ -1258,17 +852,10 @@ typedef struct ivas_lfe_dec_data_structure typedef struct renderer_struct { -#ifdef IVAS_FLOAT_FIXED Word32 prev_gains_fx[MAX_CICP_CHANNELS - 1][MAX_OUTPUT_CHANNELS]; /*Q30*/ Word16 *interpolator_fx; /*Q15*/ Word16 interpolator_len; Word32 gains_fx[MAX_CICP_CHANNELS - 1][MAX_OUTPUT_CHANNELS]; /*Q30*/ -#else - float prev_gains[MAX_CICP_CHANNELS - 1][MAX_OUTPUT_CHANNELS]; - float *interpolator; - int16_t interpolator_length; - float gains[MAX_CICP_CHANNELS - 1][MAX_OUTPUT_CHANNELS]; -#endif } ISM_RENDERER_DATA, *ISM_RENDERER_HANDLE; @@ -1276,34 +863,22 @@ typedef struct renderer_struct typedef struct ivas_binaural_rendering_struct { /* Common variables for all modules */ - IVAS_OUTPUT_SETUP_HANDLE hInputSetup; /* pointer to input spatial format for binaural renderer*/ - EFAP_HANDLE hEFAPdata; /* EFAP structure*/ -#ifndef IVAS_FLOAT_FIXED - float *hoa_dec_mtx; /* pointer to HOA decoder mtx */ -#else + IVAS_OUTPUT_SETUP_HANDLE hInputSetup; /* pointer to input spatial format for binaural renderer*/ + EFAP_HANDLE hEFAPdata; /* EFAP structure*/ Word32 *hoa_dec_mtx; /* pointer to HOA decoder mtx */ /*Q29*/ -#endif - int8_t rotInCldfb; /* Flag to enable rotation within bin Renderer in CLDFB*/ - int16_t max_band; /* band upto which rendering is performed */ - int16_t conv_band; /* band upto which convolution in cldfb domain is performed */ - int16_t timeSlots; /* number of time slots of binaural renderer */ - int16_t nInChannels; /* number input channels */ - int8_t render_lfe; /* Flag to render LFE in binaural rendering*/ - IVAS_FORMAT ivas_format; /* format; corresponds to st_ivas->ivas_format, unless the signal gets transormed to a different domain for rendering */ + int8_t rotInCldfb; /* Flag to enable rotation within bin Renderer in CLDFB*/ + int16_t max_band; /* band upto which rendering is performed */ + int16_t conv_band; /* band upto which convolution in cldfb domain is performed */ + int16_t timeSlots; /* number of time slots of binaural renderer */ + int16_t nInChannels; /* number input channels */ + int8_t render_lfe; /* Flag to render LFE in binaural rendering*/ + IVAS_FORMAT ivas_format; /* format; corresponds to st_ivas->ivas_format, unless the signal gets transormed to a different domain for rendering */ /* Convolution module structure */ -#ifndef IVAS_FLOAT_FIXED - BINRENDERER_CONV_MODULE_HANDLE hBinRenConvModule; -#else BINRENDERER_CONV_MODULE_HANDLE_FX hBinRenConvModule; -#endif /* Variables related to reverberator module */ -#ifndef IVAS_FLOAT_FIXED - float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; -#else Word32 earlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; -#endif REVERB_STRUCT_HANDLE hReverb; } BINAURAL_RENDERER, *BINAURAL_RENDERER_HANDLE; @@ -1332,11 +907,7 @@ typedef struct ivas_masa_decoder_data_struct SPHERICAL_GRID_DATA *sph_grid16; MASA_DECODER_EXT_OUT_META *extOutMeta; -#ifndef IVAS_FLOAT_FIXED - float dir_decode_quality; -#else - Word16 dir_decode_quality_fx; /* Q15 */ -#endif + Word16 dir_decode_quality_fx; /* Q15 */ } MASA_DECODER_DATA; @@ -1353,13 +924,8 @@ typedef struct ivas_masa_ism_data_structure { int16_t azimuth_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; int16_t elevation_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; -#ifndef IVAS_FLOAT_FIXED - float energy_ratio_ism[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR][CLDFB_NO_CHANNELS_MAX]; - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else - Word32 energy_ratio_ism_fx[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR][CLDFB_NO_CHANNELS_MAX]; /* Q30 */ - Word32 masa_to_total_energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ -#endif + Word32 energy_ratio_ism_fx[MAX_NUM_OBJECTS][MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR][CLDFB_NO_CHANNELS_MAX]; /* Q30 */ + Word32 masa_to_total_energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ int16_t azimuth_ism_edited[MAX_NUM_OBJECTS]; int16_t elevation_ism_edited[MAX_NUM_OBJECTS]; @@ -1369,37 +935,17 @@ typedef struct ivas_masa_ism_data_structure int16_t azimuth_separated_ism[MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; int16_t elevation_separated_ism[MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR]; -#ifndef IVAS_FLOAT_FIXED - float q_azimuth_old[MAX_NUM_OBJECTS]; - float q_elevation_old[MAX_NUM_OBJECTS]; -#else - Word32 q_azimuth_old_fx[MAX_NUM_OBJECTS]; /* Q22 */ - Word32 q_elevation_old_fx[MAX_NUM_OBJECTS]; /* Q22 */ -#endif + Word32 q_azimuth_old_fx[MAX_NUM_OBJECTS]; /* Q22 */ + Word32 q_elevation_old_fx[MAX_NUM_OBJECTS]; /* Q22 */ -#ifndef IVAS_FLOAT_FIXED - float ismPreprocMatrix[2][2][CLDFB_NO_CHANNELS_MAX]; -#else - Word16 ismPreprocMatrix_fx[2][2][CLDFB_NO_CHANNELS_MAX]; /* Q15 */ -#endif + Word16 ismPreprocMatrix_fx[2][2][CLDFB_NO_CHANNELS_MAX]; /* Q15 */ uint8_t objectsMoved; -#ifndef IVAS_FLOAT_FIXED - float eneMoveIIR[2][CLDFB_NO_CHANNELS_MAX]; - float enePreserveIIR[2][CLDFB_NO_CHANNELS_MAX]; - float preprocEneTarget[CLDFB_NO_CHANNELS_MAX]; - float preprocEneRealized[CLDFB_NO_CHANNELS_MAX]; -#else - Word32 eneMoveIIR_fx[2][CLDFB_NO_CHANNELS_MAX]; /*Q-22*/ - Word32 enePreserveIIR_fx[2][CLDFB_NO_CHANNELS_MAX]; /*Q-22*/ - Word32 preprocEneTarget_fx[CLDFB_NO_CHANNELS_MAX]; /*Q-19*/ - Word32 preprocEneRealized_fx[CLDFB_NO_CHANNELS_MAX]; /*Q-19*/ -#endif + Word32 eneMoveIIR_fx[2][CLDFB_NO_CHANNELS_MAX]; /*Q-22*/ + Word32 enePreserveIIR_fx[2][CLDFB_NO_CHANNELS_MAX]; /*Q-22*/ + Word32 preprocEneTarget_fx[CLDFB_NO_CHANNELS_MAX]; /*Q-19*/ + Word32 preprocEneRealized_fx[CLDFB_NO_CHANNELS_MAX]; /*Q-19*/ -#ifndef IVAS_FLOAT_FIXED - float **delayBuffer; -#else - Word32 **delayBuffer_fx; /* Q11 */ -#endif + Word32 **delayBuffer_fx; /* Q11 */ int16_t delayBuffer_size; int16_t delayBuffer_nchan; @@ -1412,18 +958,13 @@ typedef struct ivas_masa_ism_data_structure typedef struct decoder_tc_buffer_structure { -#ifndef IVAS_FLOAT_FIXED - float *tc_buffer; /* the buffer itself */ - float *tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; /* pointers into the buffer to the beginning of each tc */ // VE2SB: TBV -#else Word32 *tc_buffer_fx; /* the buffer itself */ Word16 tc_buff_len; /*stores memory length of tc buffer*/ Word32 *tc_fx[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; /* pointers into the buffer to the beginning of each tc Q11 for ivas */ // VE2SB: TBV #ifdef MSAN_FIX - Word16 no_channels; /*Stores no of channels in tc_fx with values*/ + Word16 no_channels; /*Stores no of channels in tc_fx with values*/ #endif Word16 q_tc_fx; -#endif TC_BUFFER_MODE tc_buffer_mode; /* mode of the buffer (no buffering, render buffering, out buffering) */ int16_t nchan_transport_jbm; /* number of TCs after TC decoding */ int16_t nchan_transport_internal; /* total number of TC buffer channels, can include e.g. TD decorr data */ @@ -1469,27 +1010,23 @@ typedef struct jbm_metadata_structure typedef struct decoder_config_structure { - int32_t ivas_total_brate; /* IVAS total bitrate in bps */ - int32_t last_ivas_total_brate; /* last IVAS total bitrate in bps */ - int32_t output_Fs; /* output signal sampling frequency in Hz */ - int16_t nchan_out; /* number of output audio channels */ - AUDIO_CONFIG output_config; /* output audio configuration */ - int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ - int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ - int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ - int16_t Opt_RendConfigCustom; /* indicates whether Renderer configuration custom setup is used */ - IVAS_HEAD_ORIENT_TRK_T orientation_tracking; /* indicates orientation tracking type */ - int16_t Opt_non_diegetic_pan; /* indicates diegetic or not */ -#ifndef IVAS_FLOAT_FIXED - float non_diegetic_pan_gain; /* non diegetic panning gain*/ -#else + int32_t ivas_total_brate; /* IVAS total bitrate in bps */ + int32_t last_ivas_total_brate; /* last IVAS total bitrate in bps */ + int32_t output_Fs; /* output signal sampling frequency in Hz */ + int16_t nchan_out; /* number of output audio channels */ + AUDIO_CONFIG output_config; /* output audio configuration */ + int16_t Opt_LsCustom; /* indicates whether loudspeaker custom setup is used */ + int16_t Opt_HRTF_binary; /* indicates whether HRTF binary file is used */ + int16_t Opt_Headrotation; /* indicates whether head-rotation is used */ + int16_t Opt_RendConfigCustom; /* indicates whether Renderer configuration custom setup is used */ + IVAS_HEAD_ORIENT_TRK_T orientation_tracking; /* indicates orientation tracking type */ + int16_t Opt_non_diegetic_pan; /* indicates diegetic or not */ Word16 non_diegetic_pan_gain_fx; /* non diegetic panning gain*/ /* Q15 */ -#endif - int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ - int16_t Opt_ExternalOrientation; /* indiates whether external orientations are used */ - int16_t Opt_dpid_on; /* indicates whether Directivity pattern option is used */ - int16_t Opt_aeid_on; /* indicates whether Acoustic environment option is used */ - int16_t Opt_tsm; /* indicates whether time scaling modification is activated */ + int16_t Opt_AMR_WB; /* flag indicating AMR-WB IO mode */ + int16_t Opt_ExternalOrientation; /* indiates whether external orientations are used */ + int16_t Opt_dpid_on; /* indicates whether Directivity pattern option is used */ + int16_t Opt_aeid_on; /* indicates whether Acoustic environment option is used */ + int16_t Opt_tsm; /* indicates whether time scaling modification is activated */ IVAS_RENDER_FRAMESIZE render_framesize; int16_t Opt_delay_comp; /* flag indicating delay compensation active */ @@ -1530,14 +1067,8 @@ typedef struct Decoder_Struct uint16_t *bit_stream; /* Pointer to bitstream buffer */ int16_t writeFECoffset; /* parameter for debugging JBM stuff */ -#ifndef IVAS_FLOAT_FIXED - float **mem_hp20_out; /* output signals HP filter memories */ -#endif IVAS_LIMITER_HANDLE hLimiter; /* Limiter handle */ -#ifndef IVAS_FLOAT_FIXED - float *p_output_f[MAX_OUTPUT_CHANNELS+MAX_NUM_OBJECTS]; /* floating-point output audio buffers */ -#endif // !IVAS_FLOAT_FIXED /* core-decoder modules */ int16_t nSCE; /* number of total SCEs */ @@ -1586,11 +1117,7 @@ typedef struct Decoder_Struct HRTFS_FASTCONV_HANDLE hHrtfFastConv; /* FASTCONV HRTF tables for binaural rendering */ HRTFS_PARAMBIN_HANDLE hHrtfParambin; /* HRTF tables for parametric binauralizer */ LSSETUP_CUSTOM_HANDLE hLsSetupCustom; /* Custom LS configuration handle */ -#ifndef IVAS_FLOAT_FIXED - float *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ -#else Word32 *hoa_dec_mtx; /* Pointer to decoder matrix for SBA */ -#endif HEAD_TRACK_DATA_HANDLE hHeadTrackData; /* Head tracking data structure */ RENDER_CONFIG_DATA *hRenderConfig; /* Renderer config pointer */ int32_t binaural_latency_ns; /* Binauralization latency in ns */ @@ -1611,13 +1138,11 @@ typedef struct Decoder_Struct int32_t last_active_ivas_total_brate; int16_t ism_extmeta_active; /* Extended metadata active in decoder */ int16_t ism_extmeta_cnt; /* Change frame counter for extended metadata */ -#ifdef IVAS_FLOAT_FIXED Word32 **mem_hp20_out_fx; Word32 *p_output_fx[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; /* Word32-output audio buffers */ Word16 p_out_len;/*Stores the total no of channels for which memory is allocated to p_output_fx*/ Word16 num_src; Word16 SrcInd[MAX_NUM_TDREND_CHANNELS]; -#endif } Decoder_Struct; /* clang-format on */ diff --git a/lib_dec/ivas_stereo_adapt_GR_dec.c b/lib_dec/ivas_stereo_adapt_GR_dec.c index 24d0975ca..fbaa98534 100644 --- a/lib_dec/ivas_stereo_adapt_GR_dec.c +++ b/lib_dec/ivas_stereo_adapt_GR_dec.c @@ -37,12 +37,9 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "rom_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * read_GR2() * @@ -558,461 +555,3 @@ Word16 read_flag_EC_DFT( return 2; } } -#else -/*---------------------------------------------------------------------* - * read_GR2() - * - * reading a bitstream of data encoded with GR of order 2 - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -static int16_t read_GR2( - const uint16_t *bit_stream, /* i : bitstream to be read */ - int16_t *ind, /* o : parameters read */ - const int16_t len /* i : number of params to be read */ -) -{ - int16_t i; - uint16_t nb, ready, temp, b; - const uint16_t *p; - - p = bit_stream; - nb = 0; - - for ( i = 0; i < len; i++ ) - { - ready = 0; - temp = 0; - do - { - b = *p++; - if ( b == 0 ) - { - ready = 1; - } - else - { - temp += 1; - } - } while ( ready == 0 ); - b = *p++; - b = 2 * b + *p++; - ind[i] = 4 * temp + b; - nb += temp + 3; - } - - return nb; -} - - -/*---------------------------------------------------------------------* - * read_GR1() - * - * reading a bitstream of data encoded with GR of order 1 - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -static int16_t read_GR1( - const uint16_t *bit_stream, /* i : bitstream to be read */ - int16_t *ind, /* o : parameters read */ - const int16_t len /* i : number of params to be read */ -) -{ - int16_t i; - uint16_t nb, ready, temp, b; - const uint16_t *p; - - p = bit_stream; - nb = 0; - - for ( i = 0; i < len; i++ ) - { - ready = 0; - temp = 0; - do - { - b = *p++; - if ( b == 0 ) - { - ready = 1; - } - else - { - temp += 1; - } - } while ( ready == 0 ); - - b = *p++; - ind[i] = 2 * temp + b; - nb += - temp + 2; - } - - return nb; -} - - -/*---------------------------------------------------------------------* - * read_GR0() - * - * reading a bitstream of data encoded with GR of order 0 - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_GR0( - const uint16_t *bit_stream, /* i : bitstream to be read */ - int16_t *ind, /* o : parameters read */ - const int16_t len /* i : number of params to be read */ -) -{ - int16_t i; - uint16_t nb, ready, b, temp; - const uint16_t *p; - - p = bit_stream; - nb = 0; - - for ( i = 0; i < len; i++ ) - { - ready = 0; - temp = 0; - do - { - b = *p++; - if ( b == 0 ) - { - ready = 1; - } - else - { - temp += 1; - } - } while ( ready == 0 ); - ind[i] = temp; - nb += temp + 1; - } - - return nb; -} - - -/*---------------------------------------------------------------------* - * find_map() - * - * find the position of the value 'val' in the array 'map' - *---------------------------------------------------------------------*/ - -/*! r: index in array */ -static ivas_error find_map( - int16_t *map_idx, - const int16_t *map, /* i : array to look into */ - const int16_t val, /* i : value to look for */ - const int16_t len /* i : length of array */ -) -{ - *map_idx = 0; - - while ( ( map[*map_idx] != val ) && ( *map_idx < len ) ) - { - ( *map_idx )++; - } - - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * decode_adapt_GR_indices1() - * - * decodes input array using the adaptive GR procedure - *---------------------------------------------------------------------*/ - -static void decode_adapt_GR_indices1( - const int16_t *ind, /* i : array of input encoded symbols */ - const int16_t len, /* i : number of parameters to decode */ - const int16_t no_symb, /* i : number of possible symbols in GR coding */ - int16_t *out, /* o : array of decoded parameters */ - const int16_t *map0 /* i : initial mapping array for the adaptive GR */ -) -{ - const int16_t *map; - int16_t map_symb, i; - - if ( no_symb == NO_SYMB_GR_SIDE_G ) - { - map = &map0[15 * no_symb]; - } - else - { - map = &( map0[8 * no_symb] ); - } - - for ( i = 0; i < len; i++ ) - { - map_symb = ind[i]; - find_map( out + i, map, map_symb, no_symb ); - map = &( map0[out[i] * no_symb] ); - } - - return; -} - - -/*---------------------------------------------------------------------* - * get_value() - * - * reads a value on 'nbits' from a bitstream - *---------------------------------------------------------------------*/ - -/*! r: read value */ -int16_t get_value( - const uint16_t *bit_stream, /* i : bitstream */ - const int16_t nbits /* i : number of bits to be read */ -) -{ - int16_t i; - uint16_t mask = 1, val = 0; - - for ( i = nbits - 1; i >= 0; i-- ) - { - val += mask * bit_stream[i]; - mask <<= 1; - } - - return val; -} - - -/*---------------------------------------------------------------------* - * read_BS_GR() - * - * decode simple GR code from a bitstream - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_BS_GR( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting point in bitstream */ - int16_t *ind1, /* o : data array read */ - const int16_t len, /* i : number of params to be read */ - int16_t *GR_ord /* o : GR order to be used */ -) -{ - int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], tmp, i; - - *GR_ord = bit_stream[nb]; - b = 1; - - if ( *GR_ord == 0 ) - { - b += read_GR0( &bit_stream[nb + b], ind1_tmp, len ); - } - else - { - b += read_GR1( &bit_stream[nb + b], ind1_tmp, len ); - } - - for ( i = 0; i < len; i++ ) - { - tmp = ind1_tmp[i] + 1; - if ( tmp & 1 ) /* if odd number */ - { - ind1[i] = -( ind1_tmp[i] >> 1 ); - } - else - { - ind1[i] = tmp >> 1; - } - } - - return b; -} - - -/*---------------------------------------------------------------------* - * read_BS_adapt_GR_sg() - * - * read and decode with adaptive GR the bitstream containing side gains values - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_BS_adapt_GR_sg( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting position in bitstream */ - int16_t *ind1, /* o : decoded side gain values */ - const int16_t len, /* i : number of params to be read */ - int16_t *GR_ord, /* o : GR order used (read from bitstream)*/ - const int16_t *map0 /* i : initial map */ -) -{ - int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], ord; - - /* read first component */ - b = 0; - b += read_GR1( &bit_stream[nb], ind1_tmp, 1 ); - /* read GR ord */ - ord = bit_stream[nb + b]; - b += 1; - - if ( ord == 0 ) - { - *GR_ord = 1; - b += read_GR1( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); - } - else - { - ord = bit_stream[nb + b]; - b += 1; - if ( ord == 0 ) - { - *GR_ord = 0; - - b += read_GR0( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); - } - else - { - *GR_ord = 2; - b += read_GR2( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); - } - } - - decode_adapt_GR_indices1( ind1_tmp, len, NO_SYMB_GR_SIDE_G, ind1, map0 ); - - return b; -} - - -/*---------------------------------------------------------------------* - * read_itd() - * - * read and decode ITD in DFT mode - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_itd( - Decoder_State *st, /* i : Decoder state */ - int16_t *pI /* o : ITD value */ -) -{ - int16_t huff_flag, sign_flag, I, i, nb = 0, ready; - - huff_flag = get_next_indice( st, 1 ); - sign_flag = get_next_indice( st, 1 ); - nb += 2; - - if ( huff_flag == 1 ) - { - ready = 0; - I = 0; - - while ( ( ready == 0 ) && ( nb < 10 ) ) - { - I = 2 * I + get_next_indice( st, 1 ); - nb += 1; - - for ( i = 0; i < 20; i++ ) - { - if ( ( I == dft_code_itd[i] ) && ( dft_len_itd[i] == ( nb - 2 ) ) ) - { - I = i; - ready = 1; - break; - } - } - } - if ( ready == 0 ) - { - printf( "Error reading Huffman code for ITD: \n" ); - } - } - else - { - I = get_next_indice( st, STEREO_DFT_ITD_NBITS - 1 ); - nb += STEREO_DFT_ITD_NBITS - 1; - } - - I += 256 * sign_flag; - *pI = I; - - return nb; -} - - -/*---------------------------------------------------------------------* - * read_BS_adapt_GR_rpg() - * - * read and decode residual prediction gain values using adaptive GR - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_BS_adapt_GR_rpg( - const uint16_t *bit_stream, /* i : bitstream to be read */ - const int16_t nb, /* i : starting point in bitstream */ - int16_t *ind1_pred, /* o : decoded res pred gains */ - const int16_t start, /* i : starting subband */ - const int16_t total_no, /* i : number of params to be read */ - int16_t *GR_ord /* o : GR order - read */ -) -{ - int16_t b, ind1_tmp[STEREO_DFT_BAND_MAX], i, len; - len = total_no - start; - - /* read first band */ - b = read_GR1( &bit_stream[nb], ind1_tmp, 1 ); - - if ( ind1_tmp[0] == dft_maps_rpg[8 * NO_SYMB_GR_PRED_G] ) - { - for ( i = start; i < total_no; i++ ) - { - ind1_pred[i] = 0; - } - } - else - { - *GR_ord = bit_stream[nb + b]; /* GR order */ - b += 1; - if ( *GR_ord == 0 ) - { - b += read_GR0( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); - } - else - { - /* GR ord 1 */ - b += read_GR1( &bit_stream[nb + b], &ind1_tmp[1], len - 1 ); - } - decode_adapt_GR_indices1( ind1_tmp, total_no - start, NO_SYMB_GR_PRED_G, &ind1_pred[start], dft_maps_rpg ); - } - - return b; -} - - -/*---------------------------------------------------------------------* - * read_flag_EC_DFT() - * - * read flag differentiating between: CBR/EC with adaptive GR/GR for differential coding - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t read_flag_EC_DFT( - const uint16_t *bit_stream, /* i : bitstream */ - int16_t *flag /* o : flag value */ -) -{ - int16_t flg; - - flg = bit_stream[0]; - if ( flg == 0 ) - { - *flag = flg; - return 1; - } - else - { - *flag = 2 + bit_stream[1]; - return 2; - } -} - -#endif diff --git a/lib_dec/ivas_stereo_cng_dec.c b/lib_dec/ivas_stereo_cng_dec.c index 60375dd78..f8d6f6086 100644 --- a/lib_dec/ivas_stereo_cng_dec.c +++ b/lib_dec/ivas_stereo_cng_dec.c @@ -39,57 +39,30 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------- * Local constants *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define A_GFILT 0.8f /* LP-filter coefficient for coherence and sidegain */ -#else #define A_GFILT_FX ( Word16 )( 0x6666 ) /* LP-filter coefficient for coherence and sidegain */ #define ONE_MINUS_A_GFILT_FX ( Word16 )( 0x199A ) /* LP-filter coefficient for coherence and sidegain */ -#endif -#define SKIP_XFADE_FRAMES 2 +#define SKIP_XFADE_FRAMES 2 /* DTX/CNG */ -#ifndef IVAS_FLOAT_FIXED -#define MAX_K 50.0f -#else -#define MAX_K 50 -#endif -#define ONE_BY_MAX_K ( Word16 )( 0x028F ) -#ifndef IVAS_FLOAT_FIXED -#define STEREO_TD_PS_CORR_FILT 0.8f -#endif +#define MAX_K 50 +#define ONE_BY_MAX_K ( Word16 )( 0x028F ) #define STEREO_TD_PS_CORR_FILT_FX 1717986918 #define STEREO_TD_PS_CORR_FILT_Q31 1717986944 #define ONE_MINUS_STEREO_TD_PS_CORR_FILT_Q31 429496704 -#ifndef IVAS_FLOAT_FIXED -#define MAX_XFADE 50.0f -#else -#define MAX_XFADE_FX 50 -#endif -#define CM_INIT 50 -#define CORR_INIT 8 -#define SID_INIT 6 -#ifndef IVAS_FLOAT_FIXED -#define STEREO_CNA_LR_CORR_LT_FILT 0.95f /* long-term averaging factor for L/R correlation estimation in stereo CNA */ -#endif -#define STEREO_CNA_LR_CORR_LT_FILT_FX 2040109440 /* long-term averaging factor for L/R correlation estimation in stereo CNA */ -#ifndef IVAS_FLOAT_FIXED -#define STEREO_CNA_ILD_LT_FILT 0.9f /* long-term averaging factor for ILD estimation in stereo CNA */ -#endif -#define STEREO_CNA_ILD_LT_FILT_FX 1932735283 /* long-term averaging factor for ILD estimation in stereo CNA */ -#ifndef IVAS_FLOAT_FIXED -#define STEREO_CNA_SOFT_VAD_UP 0.7f /* long-term averaging factor for upward soft VAD update in stereo CNA */ -#define STEREO_CNA_SOFT_VAD_DN 0.95f /* long-term averaging factor for downward soft VAD update in stereo CNA */ -#endif +#define MAX_XFADE_FX 50 +#define CM_INIT 50 +#define CORR_INIT 8 +#define SID_INIT 6 +#define STEREO_CNA_LR_CORR_LT_FILT_FX 2040109440 /* long-term averaging factor for L/R correlation estimation in stereo CNA */ +#define STEREO_CNA_ILD_LT_FILT_FX 1932735283 /* long-term averaging factor for ILD estimation in stereo CNA */ /*------------------------------------------------------------------- * stereo_dft_dec_sid_coh() @@ -97,579 +70,6 @@ * Decode coherence vector *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec_sid_coh( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t nbands, /* i : number of DFT stereo bands */ - float *coh, /* i/o: coherence */ - int16_t *nb_bits /* i/o: number of bits read */ -) -{ - int16_t nr_of_sid_stereo_bits; - int16_t i; - float alpha; - int16_t alpha_index; - int16_t alpha_step; - float pred; - float pred_err; - int16_t coh_pred_index; - int16_t res_index; - float cohBandq[STEREO_DFT_BAND_MAX]; - const float *pptr; - int16_t bits_tmp; - int16_t b; - - nr_of_sid_stereo_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - - /* If the coherence is not encoded due to lack of bits set alpha to zero which leads to that the coherence */ - /* from the previous frame is used. */ - if ( ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS - STEREO_DFT_PRED_NBITS ) > 0 ) - { - /* Read coherence from bitstream */ - coh_pred_index = get_next_indice( st, STEREO_DFT_PRED_NBITS ); /* Read predictor index */ - ( *nb_bits ) += STEREO_DFT_PRED_NBITS; - - alpha_index = get_next_indice( st, STEREO_DFT_N_COH_ALPHA_BITS ); /* Read alpha index */ - ( *nb_bits ) += STEREO_DFT_N_COH_ALPHA_BITS; - - alpha_step = 0; - for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_STEPS - 1; i++ ) - { - if ( nr_of_sid_stereo_bits - *nb_bits > dft_cng_coh_alpha_start[i] ) - { - alpha_step = i + 1; - } - } - alpha = dft_cng_alpha_bits[alpha_step][alpha_index]; - } - else - { - alpha = 0; - coh_pred_index = 0; - for ( i = *nb_bits; i < nr_of_sid_stereo_bits; i++ ) - { - get_next_indice( st, 1 ); - ( *nb_bits )++; - } - } - - pptr = dft_cng_coh_pred[coh_pred_index]; - pred = 0.4f; - - for ( b = 0; b < nbands; b++ ) - { - /* Intra-frame prediction */ - - for ( i = 0; i < b; i++ ) - { - pred += ( *pptr++ ) * cohBandq[i]; - } - /* Weighted intra/inter-frame prediction */ - pred = alpha * pred + ( 1 - alpha ) * coh[b]; - - /* Read residual index from bitstream */ - if ( *nb_bits < nr_of_sid_stereo_bits ) /* If the bit limit is reached, res_index = 0 is assumed for remaining indices */ - { - bits_tmp = read_GR0( &st->bit_stream[st->next_bit_pos], &res_index, 1 ); - *nb_bits += bits_tmp; - st->next_bit_pos += bits_tmp; - } - else - { - res_index = 0; - } - - /* Reconstruct */ - res_index = dft_cng_coh_u2i[res_index]; - pred_err = usdequant( res_index, -0.4f, 0.1f ); - cohBandq[b] = pred + pred_err; /* Store for intra-frame prediction */ - if ( cohBandq[b] > 1 ) - { - cohBandq[b] = 1; - } - else if ( cohBandq[b] < 0 ) - { - cohBandq[b] = 0; - } - coh[b] = cohBandq[b]; /* Update memory for next frame */ - pred = 0; - } - - /* Remove padding bits */ - for ( i = *nb_bits; i < nr_of_sid_stereo_bits; i++ ) - { - get_next_indice( st, 1 ); - ( *nb_bits )++; - } - - - return; -} - - -/*------------------------------------------------------------------- - * stereo_dft_generate_comfort_noise() - * - * Generate the comfort noise based on the target noise level for the CLDFB part - *-------------------------------------------------------------------*/ - -static void stereo_dft_generate_comfort_noise( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: DFT Stereo decoder handle */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ - const int16_t last_element_mode, /* i : last element mode */ - Decoder_State *st, /* i/o: Core coder decoder state */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ - Decoder_State *st1, /* i/o: Core coder decoder state secondary channel */ - const float targetGain, /* i : ICA target gain */ - const int16_t chan, /* i : channel number */ - const int16_t output_frame /* i : output frame size */ -) -{ - int16_t i, j, k; - float *ptr_level, *ptr_shb, *ptr_r, *ptr_i; - HANDLE_FD_CNG_COM hFdCngCom; - int16_t numSlots; - float scale; - float lp_noise; - float tmp, enr; - float shb_shape[L_FRAME16k]; - float *ptr0, *ptr1, *ptr2; - float dmpf[M + 2], Atmp[M + 2]; - float cngNoiseLevel_upd[L_FRAME16k], cngNoiseLevel_hist[L_FRAME16k - 2]; - float *ptr_tmp, *ptr_cng; - float E0, E1; - int16_t b; - float *pSideGain; - float gamma; - float c; - float scaleMS; - float scaleAvg; - float LR_ratio; - float factor; - float alpha, ftmp; - float trigo_dec[STEREO_DFT32MS_N_16k / 2 + 1]; - const float *pTrigo; - int16_t trigo_step; - - hFdCngCom = st->hFdCngDec->hFdCngCom; - - push_wmops( "DFT_CNG" ); - - set_f( dmpf, 0.0f, M + 2 ); - set_f( Atmp, 0.0f, M + 2 ); - - set_zero( DFT[chan], STEREO_DFT_BUF_MAX ); - - enr = 0; /* Eliminates compiler warning. They are always set before they are used */ - E0 = 0.0f; - E1 = 0.0f; - lp_noise = 0; - - if ( chan == 0 ) - { - pSideGain = hStereoDft->side_gain + STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX; - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - if ( hStereoCng->xfade_frame_counter == 0 ) - { - hStereoDft->g_state[b] = *pSideGain++; - } - else - { - hStereoDft->g_state[b] = ( 1 - A_GFILT ) * *pSideGain++ + A_GFILT * hStereoDft->g_state[b]; - } - - if ( hStereoCng->first_SID ) - { - if ( hStereoCng->first_SID_after_TD ) - { - hStereoCng->cm[b] = hStereoCng->c_LR_LT * hStereoCng->c_LR_LT; - } - else - { - hStereoCng->cm[b] = hStereoCng->coh[b]; - } - } - else if ( hStereoCng->nr_dft_frames < CM_INIT && hStereoCng->nr_sid_frames < SID_INIT ) - { - if ( hStereoCng->nr_corr_frames > CORR_INIT ) - { - hStereoCng->cm[b] = hStereoCng->c_LR_LT * hStereoCng->c_LR_LT; - } - else - { - hStereoCng->cm[b] = ( 1 - A_GFILT ) * hStereoCng->coh[b] + A_GFILT * hStereoCng->cm[b]; - } - } - else - { - hStereoCng->cm[b] = ( 1 - A_GFILT ) * hStereoCng->coh[b] + A_GFILT * hStereoCng->cm[b]; - } - } - - if ( hStereoCng->first_SID_after_TD ) - { - scaleAvg = 0; - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - if ( hStereoCng->cm[b] < 0.9f ) - { - gamma = hStereoCng->cm[b]; - gamma = gamma / ( 1 - gamma ); - gamma = sqrtf( gamma + 1 - hStereoDft->g_state[b] * hStereoDft->g_state[b] ) - sqrtf( gamma ); - } - else - { - gamma = 0; - } - - LR_ratio = tdm_ratio_tabl[hStereoCng->last_tdm_idx]; - c = ( ( 1 + hStereoDft->g_state[b] ) * ( 1 + hStereoDft->g_state[b] ) + gamma * gamma ) / ( ( 1 - hStereoDft->g_state[b] ) * ( 1 - hStereoDft->g_state[b] ) + gamma * gamma ); - scaleMS = ( 1 + c + 2 * sqrtf( c * hStereoCng->cm[b] ) ) / ( 4 * ( c * LR_ratio * LR_ratio + ( 1 - LR_ratio ) * ( 1 - LR_ratio ) * targetGain * targetGain + 2 * LR_ratio * ( 1 - LR_ratio ) * targetGain * sqrtf( c * hStereoCng->cm[b] ) ) ); - scaleMS = sqrtf( scaleMS ); - scaleAvg += scaleMS; - } - scaleAvg = scaleAvg / hStereoDft->nbands; - - hStereoDft->scale = scaleAvg; - } - } - - if ( st->cng_type == LP_CNG ) - { - set_f( cngNoiseLevel_upd, 0.0f, st->L_frame ); - - /* Deemphasis */ - dmpf[0] = 1.0f; - dmpf[1] = -st->preemph_fac_float; - mvr2r( st->Aq_cng_float, Atmp, M + 1 ); - conv( Atmp, dmpf, cngNoiseLevel_upd, M + 2 ); - - if ( st->L_frame == L_FRAME ) - { - pTrigo = hStereoDft->dft_trigo_12k8; - trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP * STEREO_DFT_TRIGO_DEC_STEP; - } - else - { - pTrigo = hStereoDft->dft_trigo_16k; - trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; - } - - for ( i = 0; i < st->L_frame / 4; i++ ) - { - trigo_dec[i] = pTrigo[i * trigo_step]; - trigo_dec[st->L_frame / 2 - i] = pTrigo[i * trigo_step]; - } - trigo_dec[st->L_frame / 4] = pTrigo[st->L_frame / 4 * trigo_step]; - - rfft( cngNoiseLevel_upd, trigo_dec, st->L_frame, -1 ); - - /* Compute 1/|A| */ - ptr0 = cngNoiseLevel_upd; - ptr1 = ptr0 + 2; - ptr2 = ptr1 + 1; - assert( st->lp_ener > 0.0f ); - factor = 2.0f * sqrtf( st->lp_ener / st->L_frame * 0.5f ); /* fixed factor in the loop below */ - for ( i = 0; i < st->L_frame / 2 - 1; i++ ) - { - ftmp = *ptr1 * *ptr1 + *ptr2 * *ptr2; - assert( ftmp > 0.0f ); - *ptr0++ = factor * inv_sqrt( ftmp ); - ptr1 += 2; - ptr2 += 2; - } - - if ( min( output_frame, L_FRAME32k ) - hFdCngCom->stopFFTbin > 0 ) - { - /* Transform shb LP spectrum */ - set_f( shb_shape, 0.0f, L_FRAME16k ); - mvr2r( st->hTdCngDec->shb_lpcCNG, shb_shape, LPC_SHB_ORDER + 1 ); - - if ( st->L_frame != L_FRAME16k ) - { - pTrigo = hStereoDft->dft_trigo_16k; - trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; - - for ( i = 0; i < L_FRAME16k / 4; i++ ) - { - trigo_dec[i] = pTrigo[i * trigo_step]; - trigo_dec[L_FRAME16k / 2 - i] = pTrigo[i * trigo_step]; - } - trigo_dec[L_FRAME16k / 4] = pTrigo[L_FRAME16k / 4 * trigo_step]; - } - - rfft( shb_shape, trigo_dec, L_FRAME16k, -1 ); - - /* Compute 1/|A| */ - enr = shb_shape[0] * shb_shape[0] + shb_shape[1] * shb_shape[1]; - ptr0 = shb_shape; - ptr1 = ptr0 + 2; - ptr2 = ptr1 + 1; - - for ( i = 0; i < L_FRAME16k / 2 - 1; i++ ) - { - ftmp = ( *ptr1 * *ptr1 + *ptr2 * *ptr2 ); - assert( ftmp > 0.0f ); - ftmp = 1.0f / ftmp; - /* in float: - both a = "div"=(1/(x^2+y^2) and sqrt(a) is used and summed up in the same loop. - - in BASOP: - sum up using inv_sqrt( *ptr1 * *ptr1 + *ptr2 * *ptr2 ), in this loop - and then sum up enr = sum( *ptr0 * *ptr0 ), in a subsequent MAC loop */ - enr += ftmp; - *ptr0++ = sqrtf( ftmp ); - ptr1 += 2; - ptr2 += 2; - } - } - - /* Update CNG noise level from MS noise estimation */ - mvr2r( st->hFdCngDec->bandNoiseShape_float, cngNoiseLevel_hist, hFdCngCom->stopFFTbin - hFdCngCom->startBand ); - ptr_cng = cngNoiseLevel_hist; - for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) - { - tmp = *( cngNoiseLevel_hist + i * 2 ); - tmp += *( cngNoiseLevel_hist + i * 2 + 1 ); - *ptr_cng++ = tmp * 0.5f; - } - - if ( last_element_mode == IVAS_CPE_TD && chan == 0 && hStereoCng->xfade_frame_counter == 0 && !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) - { - ptr_cng = cngNoiseLevel_hist + hFdCngCom->startBand; - ptr_tmp = cngNoiseLevel_upd + hFdCngCom->startBand; - for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) - { - E0 += *ptr_cng++; - E1 += ( *ptr_tmp ) * ( *ptr_tmp ); - ptr_tmp++; - } - - tmp = sqrtf( E0 / E1 ); - if ( tmp < 1 ) - { - hStereoCng->xfade_length = (int16_t) ( -MAX_XFADE * tmp + MAX_XFADE ); - } - else - { - hStereoCng->xfade_length = (int16_t) ( -MAX_XFADE * ( 1 / tmp ) + MAX_XFADE ); - } - } - - if ( hStereoCng->xfade_frame_counter < hStereoCng->xfade_length ) - { - ptr_cng = cngNoiseLevel_hist + hFdCngCom->startBand; - ptr_tmp = cngNoiseLevel_upd + hFdCngCom->startBand; - for ( i = 0; i < ( st->last_L_frame - hFdCngCom->startBand ) / 2; i++ ) - { - tmp = hStereoCng->xfade_frame_counter / (float) hStereoCng->xfade_length; - *ptr_tmp = tmp * *ptr_tmp + ( 1 - tmp ) * sqrtf( *ptr_cng++ ) * hStereoDft->scale; - ptr_tmp++; - } - } - - for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) - { - /* low band */ - ptr_level = cngNoiseLevel_upd; - ptr_r = DFT[chan] + hFdCngCom->startBand + k * STEREO_DFT32MS_N_MAX; - ptr_i = ptr_r + 1; - scale = output_frame * 0.5f; - - for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, &st->hTdCngDec->cng_seed ); - tmp = scale * *ptr_level; - ( *ptr_r ) *= tmp; - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, &st->hTdCngDec->cng_seed ); - ( *ptr_i ) *= tmp; - ptr_i += 2; - ptr_level++; - } - - if ( min( output_frame, L_FRAME32k ) - hFdCngCom->stopFFTbin > 0 ) - { - - /* high band generation, flipped spectrum */ - assert( enr != 0.0f ); - scale = sqrtf( powf( 10, 0.1f * st->hTdCngDec->shb_cng_gain ) / enr ); - ptr_shb = shb_shape + L_FRAME16k / 2 - 1; - /* Averaging for Nyquist frequency */ - *ptr_shb = 0.5f * ( cngNoiseLevel_upd[( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 - 1] / scale + *( ptr_shb - 1 ) ); - - ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; - ptr_i = ptr_r + 1; - - for ( i = 0; i < ( min( output_frame, hFdCngCom->regularStopBand * 16 ) - hFdCngCom->stopFFTbin ) / 2; i++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, &st->hTdCngDec->cng_seed ); - ( *ptr_r ) *= *ptr_shb; - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, &st->hTdCngDec->cng_seed ); - ( *ptr_i ) *= *ptr_shb; - ptr_i += 2; - ptr_shb--; - } - - /* rescale */ - scale *= output_frame * 0.5f; - ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; - ptr_i = ptr_r + 1; - for ( i = 0; i < ( min( output_frame, hFdCngCom->regularStopBand * 16 ) - hFdCngCom->stopFFTbin ) / 2; i++ ) - { - ( *ptr_r ) *= scale; - ( *ptr_i ) *= scale; - ptr_r += 2; - ptr_i += 2; - } - } - } - - /* Expand cngNoiseLevel_flt from 0-159 to 0-318, compute noise level */ - lp_noise = 0.0f; - ptr_level = hFdCngCom->cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand - 1; - ptr_tmp = cngNoiseLevel_upd + ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2 - 1; - for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) - { - *ptr_level-- = *ptr_tmp * *ptr_tmp; - ptr_tmp--; - *ptr_level = *( ptr_level + 1 ); - lp_noise += 2 * *ptr_level--; - } - } - else - { - /* FD-CNG */ - if ( !( hFdCngCom->msFrCnt_init_counter < hFdCngCom->msFrCnt_init_thresh ) ) - { - if ( hStereoCng->xfade_frame_counter <= MAX_K && hStereoCng->last_act_element_mode == IVAS_CPE_TD && chan == 0 ) - { - /* Fade MS -> SID/MS */ - j = 0; - for ( k = 0; k < ( hFdCngCom->nFFTpart - 2 ); k++ ) - { - factor = ( hFdCngCom->sidNoiseEstLp_flt[k] + DELTA ) / ( st->hFdCngDec->partNoiseShape_float[k] + DELTA ); - factor = min( hStereoDft->scale + ( 1 / MAX_K ) * ( factor - hStereoDft->scale ) * hStereoCng->xfade_frame_counter, factor ); - for ( ; j <= hFdCngCom->part[k]; j++ ) - { - hFdCngCom->cngNoiseLevel_flt[j] = st->hFdCngDec->bandNoiseShape_float[j] * factor; - } - } - } - } - scale = output_frame * 0.5f; - numSlots = hFdCngCom->numSlots / 2; - for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) - { - ptr_level = hFdCngCom->cngNoiseLevel_flt; - ptr_r = DFT[chan] + hFdCngCom->startBand + k * STEREO_DFT32MS_N_MAX; - ptr_i = ptr_r + 1; - for ( i = 0; i < ( hFdCngCom->stopFFTbin - hFdCngCom->startBand ) / 2; i++ ) - { - /* Real part in FFT bins */ - tmp = *ptr_level++; - tmp += *ptr_level++; - tmp = tmp * 0.5f; - rand_gauss_flt( ptr_r, &st->hTdCngDec->cng_seed ); - tmp = sqrtf( tmp ) * scale; - ( *ptr_r ) *= tmp; - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, &st->hTdCngDec->cng_seed ); - ( *ptr_i ) *= tmp; - ptr_i += 2; - } - ptr_level = hFdCngCom->cngNoiseLevel_flt + hFdCngCom->stopFFTbin - hFdCngCom->startBand; - ptr_r = DFT[chan] + hFdCngCom->stopFFTbin + k * STEREO_DFT32MS_N_MAX; - ptr_i = ptr_r + 1; - for ( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) - { - for ( i = 0; i < numSlots; i++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, &st->hTdCngDec->cng_seed ); - tmp = sqrtf( *ptr_level ) * scale; - ( *ptr_r ) *= tmp; - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, &st->hTdCngDec->cng_seed ); - ( *ptr_i ) *= tmp; - ptr_i += 2; - } - ptr_level++; - } - } - - /* Compute noise level */ - lp_noise = 0.0f; - ptr_level = hFdCngCom->cngNoiseLevel_flt; - for ( i = 0; i < hFdCngCom->stopFFTbin - hFdCngCom->startBand; i++ ) - { - lp_noise += *ptr_level++; - } - } - - if ( hStereoCng->last_act_element_mode == IVAS_CPE_TD && chan > 0 ) - { - st1->lp_noise_float = 0.9f * st1->lp_noise_float + 0.1f * 10.f * log10f( lp_noise + DELTA ); - } - else if ( chan == 0 ) - { - st->hFdCngDec->lp_noise_float = 0.9f * st->hFdCngDec->lp_noise_float + 0.1f * 10.f * log10f( lp_noise + DELTA ); - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - st->hFdCngDec->hFdCngCom->flag_noisy_speech = ( st->hFdCngDec->lp_speech_float - st->hFdCngDec->lp_noise_float ) < 28.f; - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * st->hFdCngDec->hFdCngCom->flag_noisy_speech; - } - - if ( chan == 0 && st->core_brate <= SID_2k40 ) - { - /* update smoothed periodogram used by stereo CNA in SID and NO_DATA frames from cngNoiseLevel_flt */ - for ( i = hFdCngCom->startBand; i < hFdCngCom->stopFFTbin; i++ ) - { - ftmp = hFdCngCom->cngNoiseLevel_flt[i - hFdCngCom->startBand]; - - if ( !st->hFdCngDec->first_cna_noise_updated ) - { - /* very first update */ - alpha = 0.0f; - } - else - { - alpha = 0.95f; - if ( st->hFdCngDec->smoothed_psd[i] > 0.0f && ftmp > 2.5f * st->hFdCngDec->smoothed_psd[i] ) - { - /* prevent abrupt upward update steps */ - ftmp = 2.5f * st->hFdCngDec->smoothed_psd[i]; - } - else if ( ftmp < st->hFdCngDec->smoothed_psd[i] ) - { - /* faster downward updates */ - alpha = 0.7f; - } - } - - /* smoothing */ - st->hFdCngDec->smoothed_psd[i] = alpha * st->hFdCngDec->smoothed_psd[i] + ( 1 - alpha ) * ftmp; - } - - /* update msNoiseEst in SID and NO_DATA frames */ - bandcombinepow_flt( &st->hFdCngDec->smoothed_psd[hFdCngCom->startBand], hFdCngCom->stopFFTbin - hFdCngCom->startBand, st->hFdCngDec->part_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->psize_inv_shaping_float, st->hFdCngDec->msNoiseEst_float ); - - st->hFdCngDec->first_cna_noise_updated = 1; - mvr2r( st->hFdCngDec->msNoiseEst_float, st->hFdCngDec->msPeriodog_ST, st->hFdCngDec->nFFTpart_shaping ); - st->hFdCngDec->ms_last_inactive_bwidth = st->bwidth; - } - - pop_wmops(); - return; -} -#else /*------------------------------------------------------------------- * stereo_dft_generate_comfort_noise_fx() * @@ -1462,50 +862,12 @@ static void stereo_dft_generate_comfort_noise_fx( pop_wmops(); return; } -#endif /*------------------------------------------------------------------- * stereo_dtf_cng() * * DFT stereo CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dtf_cng( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ - const int16_t output_frame /* i : output frame size */ -) -{ - Decoder_State **sts; - int16_t n; - - sts = hCPE->hCoreCoder; - - if ( hCPE->hStereoCng != NULL ) - { - if ( hCPE->hStereoCng->nr_dft_frames < CM_INIT ) - { - hCPE->hStereoCng->nr_dft_frames++; - } - - if ( ivas_total_brate <= IVAS_SID_5k2 ) - { - if ( hCPE->hStereoCng->nr_sid_frames < SID_INIT && ivas_total_brate == IVAS_SID_5k2 ) - { - hCPE->hStereoCng->nr_sid_frames++; - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - stereo_dft_generate_comfort_noise( hCPE->hStereoDft, hCPE->hStereoCng, hCPE->last_element_mode, sts[0], DFT, sts[1], hCPE->hStereoTCA->targetGain, n, output_frame ); - } - } - } - - return; -} -#else void stereo_dtf_cng_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ @@ -1545,7 +907,6 @@ void stereo_dtf_cng_fx( return; } -#endif /*------------------------------------------------------------------- @@ -1614,7 +975,6 @@ void stereo_cng_dec_update( * * CNA for TD stereo, compute PS correlation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_cng_compute_PScorr_fx( Word32 output_fx0[], /* i : Output signal Qx = 1 temp*/ Word32 output_fx1[], /* i : Output signal Qx*/ @@ -1735,57 +1095,6 @@ void stereo_cng_compute_PScorr_fx( return; } -#else - -void stereo_cng_compute_PScorr( - float *output[CPE_CHANNELS], /* i : Output signal */ - float *c_PS_LT, /* i/o: Correlation */ - const int16_t L_frame_0, /* i : L_frame channel 0 */ - const int16_t L_frame_1 /* i : L_frame channel 1 */ -) -{ - int16_t i; - float enrP, enrS, dotPS; - float c_PS; - float outputResamp[L_FRAME16k]; - float *outputPptr, *outputSptr; - - enrP = 0.0f; - enrS = 0.0f; - dotPS = 0.0f; - - if ( L_frame_0 > L_frame_1 ) - { - outputPptr = output[0]; - lerp_flt( output[1], outputResamp, L_frame_0, L_frame_1 ); - outputSptr = outputResamp; - } - else if ( L_frame_1 > L_frame_0 ) - { - outputSptr = output[1]; - lerp_flt( output[0], outputResamp, L_frame_1, L_frame_0 ); - outputPptr = outputResamp; - } - else - { - outputPptr = output[0]; - outputSptr = output[1]; - } - - for ( i = 0; i < L_frame_0; i++ ) - { - enrP += *outputPptr * *outputPptr; - enrS += *outputSptr * *outputSptr; - dotPS += *outputPptr++ * *outputSptr++; - } - - c_PS = ( dotPS + EPSILON ) * inv_sqrt( enrP * enrS + EPSILON ); - - *c_PS_LT = STEREO_TD_PS_CORR_FILT * *c_PS_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_PS; - - return; -} -#endif /*-------------------------------------------------------------------* @@ -1794,51 +1103,6 @@ void stereo_cng_compute_PScorr( * CNA for TD stereo, compute LR correlation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_cng_compute_LRcorr( - CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ - float *output[CPE_CHANNELS], /* i : Output signal */ - const int16_t output_frame, /* i : Output frame length */ - const int16_t tdm_ratio_idx /* i : TDM ratio index */ -) -{ - int16_t i; - float c_LR, c, tmp, sc; - float enrL, enrR, dotLR; - float beta; - - beta = tdm_ratio_tabl[tdm_ratio_idx]; - - enrL = 0.0f; - enrR = 0.0f; - dotLR = 0.0f; - for ( i = 0; i < output_frame; i++ ) - { - enrL += output[0][i] * output[0][i]; - enrR += output[1][i] * output[1][i]; - dotLR += output[0][i] * output[1][i]; - } - - c_LR = fabsf( dotLR + EPSILON ) * inv_sqrt( enrL * enrR + EPSILON ); - c = ( enrL + DELTA ) / ( enrR + DELTA ); - hCPE->hStereoTD->c_LR_LT = STEREO_TD_PS_CORR_FILT * hCPE->hStereoTD->c_LR_LT + ( 1 - STEREO_TD_PS_CORR_FILT ) * c_LR; - hCPE->hStereoCng->c_LR_LT = hCPE->hStereoTD->c_LR_LT; - - tmp = 2 * beta * ( 1 - beta ) * sqrtf( c ) * hCPE->hStereoTD->c_LR_LT; - sc = ( ( 1 - beta ) * ( 1 - beta ) * c + beta * beta - tmp + DELTA ) / ( beta * beta * c + ( 1 - beta ) * ( 1 - beta ) + tmp + DELTA ); - sc = min( sc, 4.0f ); - hCPE->hStereoTD->SP_ratio_LT = 0.9f * hCPE->hStereoTD->SP_ratio_LT + ( 1 - 0.9f ) * sqrtf( sc ); - - if ( hCPE->hStereoCng->nr_corr_frames < CM_INIT ) - { - hCPE->hStereoCng->nr_corr_frames++; - } - - hCPE->hStereoCng->nr_dft_frames = 0; - - return; -} -#else static void stereo_cng_compute_LRcorr_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ Word32 *output_fx[CPE_CHANNELS], /* i : Output signal OUTPUT_Q*/ @@ -2032,7 +1296,6 @@ static void stereo_cng_compute_LRcorr_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -2041,38 +1304,6 @@ static void stereo_cng_compute_LRcorr_fx( * Find the energie ratio between the mono and the side *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void FindEmEs( - const float *ch1, /* i : Left channel */ - const float *ch2, /* i : right channel */ - const int16_t len, /* i : length */ - float *lt_es_em /* i/o: LT energy ratio */ -) -{ - int16_t i; - float mono_i, ener, es_em; - float side_i, ener_side; - - ener = 1e-6f; - ener_side = 1e-6f; - - for ( i = 0; i < len; i++ ) - { - mono_i = ( ch1[i] + ch2[i] ) / 2.0f; - ener += mono_i * mono_i; - side_i = ( ch1[i] - ch2[i] ) / 2.0f; - ener_side += side_i * side_i; - } - - /**es_em = 10 * ( log10( sqrt( ener_side / len ) ) - log10( sqrt( ener / len ) ) ); */ - es_em = 5 * ( logf( sqrtf( ener_side / ener ) ) / logf( 10 ) ); - - /* long-term estimate */ - *lt_es_em = 0.4f * *lt_es_em + 0.6f * es_em; - - return; -} -#else static void FindEmEs_fx( const Word32 *ch1_fx, /* i : Left channel OUTPUT_Q*/ @@ -2143,7 +1374,6 @@ static void FindEmEs_fx( move32(); return; } -#endif /*-------------------------------------------------------------------* @@ -2152,117 +1382,6 @@ static void FindEmEs_fx( * compute LR correlation and update long-term parameters for stereo CNA *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_cna_update_params( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *output[CPE_CHANNELS], /* i : Output signal */ - const int16_t output_frame, /* i : Output frame length */ - const int16_t tdm_ratio_idx /* i : TDM ratio index */ -) -{ - int16_t i; - float c, c_LR, c_ILD, enrL, enrR, dotLR; - Decoder_State **sts; - HANDLE_FD_CNG_DEC hFdCngDec; - - sts = hCPE->hCoreCoder; - - hFdCngDec = sts[0]->hFdCngDec; - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( hCPE->nchan_out > 1 ) - { - FindEmEs( output[0], output[1], output_frame, &hCPE->lt_es_em ); - } - else - { - hCPE->lt_es_em = 0.0f; - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD ) - { - FindEmEs( output[0], output[1], output_frame, &hCPE->lt_es_em ); - - hCPE->hStereoCng->first_SID_after_TD = 1; - stereo_cng_compute_LRcorr( hCPE, output, output_frame, tdm_ratio_idx ); - } - else - { - return; - } - - enrL = 0.0f; - enrR = 0.0f; - dotLR = 0.0f; - if ( hCPE->element_mode == IVAS_CPE_TD || ( hCPE->element_mode == IVAS_CPE_DFT && sts[0]->core_brate > SID_2k40 && sts[0]->VAD == 0 ) ) - { - if ( hCPE->nchan_out == 1 ) - { - c_LR = 1; - c_ILD = 0; - } - else - { - for ( i = 0; i < output_frame; i++ ) - { - enrL += output[0][i] * output[0][i]; - enrR += output[1][i] * output[1][i]; - dotLR += output[0][i] * output[1][i]; - } - - /* estimate L/R correlation factor and ILD in time domain */ - c_LR = fabsf( dotLR + EPSILON ) * inv_sqrt( enrL * enrR + EPSILON ); - c = ( enrL + DELTA ) / ( enrR + DELTA ); - c_ILD = ( c - 1 ) / ( c + 1 ); - } - - /* update of long-term ILD and LR correlation factors for stereo CNA */ - if ( !hFdCngDec->first_cna_noise_updated ) - { - hFdCngDec->cna_LR_LT = c_LR; - hFdCngDec->cna_ILD_LT = c_ILD; - } - else - { - hFdCngDec->cna_LR_LT = STEREO_CNA_LR_CORR_LT_FILT * hFdCngDec->cna_LR_LT + ( 1 - STEREO_CNA_LR_CORR_LT_FILT ) * c_LR; - hFdCngDec->cna_ILD_LT = STEREO_CNA_ILD_LT_FILT * hFdCngDec->cna_ILD_LT + ( 1 - STEREO_CNA_ILD_LT_FILT ) * c_ILD; - } - - set_f( hFdCngDec->cna_g_state, hFdCngDec->cna_ILD_LT, hFdCngDec->cna_nbands ); - set_f( hFdCngDec->cna_cm, hFdCngDec->cna_LR_LT, hFdCngDec->cna_nbands ); - } - - /* Soft VAD for stereo CNA */ - if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( !hFdCngDec->first_cna_noise_updated ) - { - hFdCngDec->cna_act_fact = 0.0f; - } - else - { - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* quickly decrease in TD stereo mode */ - hFdCngDec->cna_act_fact *= 0.7f; - } - else if ( sts[0]->VAD > hFdCngDec->cna_act_fact ) - { - /* quickly increase during active frames in DFT stereo mode */ - hFdCngDec->cna_act_fact = 0.7f * hFdCngDec->cna_act_fact + 0.3f * sts[0]->VAD; - } - else - { - /* slowly decrease during inactive frames in DFT stereo mode */ - hFdCngDec->cna_act_fact = 0.95f * hFdCngDec->cna_act_fact + 0.05f * sts[0]->VAD; - } - } - } - - return; -} -#else void stereo_cna_update_params_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *output_fx[CPE_CHANNELS], /* i : Output signal OUTPUT_Q*/ @@ -2483,7 +1602,6 @@ void stereo_cna_update_params_fx( return; } -#endif /*------------------------------------------------------------------- @@ -2492,34 +1610,6 @@ void stereo_cna_update_params_fx( * Initialized stereo CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_cng_init_dec( - STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: stereo CNG decoder structure */ - const int16_t *frameSize /* i : pointer to frameSize of channel 0 to be used for channel 1 */ -) -{ - hStereoCng->prev_sid_nodata = 0; - set_f( hStereoCng->coh, 0.5f, STEREO_DFT_BAND_MAX + 1 ); - set_zero( hStereoCng->cm, STEREO_DFT_BAND_MAX ); - hStereoCng->first_SID = 1; - hStereoCng->first_SID_after_TD = 0; - hStereoCng->active_frame_counter = 0; - hStereoCng->xfade_frame_counter = 0; - hStereoCng->xfade_length = 0; - hStereoCng->nr_dft_frames = 0; - hStereoCng->nr_corr_frames = 0; - hStereoCng->nr_sid_frames = 0; - hStereoCng->flag_cna_fade = 0; - set_f( hStereoCng->olapBufferSynth22, 0.0f, FFTLEN ); - set_zero( hStereoCng->maskingNoiseS, L_FRAME16k ); - hStereoCng->c_PS_LT = 0.5f; - hStereoCng->enableSecCNA = 0; - hStereoCng->frameSize = frameSize; - hStereoCng->last_act_element_mode = IVAS_CPE_DFT; - - return; -} -#else void stereo_cng_init_dec_fx( STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: stereo CNG decoder structure */ const Word16 *frameSize /* i : pointer to frameSize of channel 0 to be used for channel 1 Q0*/ @@ -2559,4 +1649,3 @@ void stereo_cng_init_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_dft_dec.c b/lib_dec/ivas_stereo_dft_dec.c index 2f7b10957..94234a1e1 100644 --- a/lib_dec/ivas_stereo_dft_dec.c +++ b/lib_dec/ivas_stereo_dft_dec.c @@ -45,9 +45,7 @@ #include "ivas_rom_com_fx.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * Local constants @@ -55,28 +53,10 @@ #define STEFI_DELAY_IND( d, buf_ind ) ( ( buf_ind ) + STEREO_DFT_PAST_MAX - ( d ) + 1 ) % STEREO_DFT_PAST_MAX -#ifndef IVAS_FLOAT_FIXED -#define STEREO_DFT_RES_RATIO_LIMIT 0.18f -#endif -#ifdef IVAS_FLOAT_FIXED -#define STEREO_DFT_RES_RATIO_LIMIT_FX ( Word32 )( 0x170A3D71 ) -#endif -#ifndef IVAS_FLOAT_FIXED -#define STEREO_DFT_LT_PREDGAIN_UPD 0.1f -#define STEREO_DFT_VR_PREDGAIN_UPD 0.1f -#define STEREO_DFT_STEFFI_PG_THRESHOLD 0.6f -#define STEREO_DFT_STEFFI_RATIO_UP_HIGH 0.03f -#define STEREO_DFT_STEFFI_RATIO_DOWN_HIGH 0.05f -#define STEREO_DFT_STEFFI_RATIO_UP_LOW 0.1f -#define STEREO_DFT_STEFFI_RATIO_DOWN_LOW 0.001f -#endif // !IVAS_FLOAT_FIXED +#define STEREO_DFT_RES_RATIO_LIMIT_FX ( Word32 )( 0x170A3D71 ) #define STEREO_DFT_STEFFI_DELAY_SHORT 2 #define STEREO_DFT_STEFFI_DELAY_LONG 4 #define STEREO_DFT_STEFFI_DELAY_OFFSET 2 -#ifndef IVAS_FLOAT_FIXED -#define STEREO_DFT_STEFFI_GAIN_REST_AMT 0.6f -#define STEREO_DFT_STEFFI_GAIN_AMP 1.0f -#endif // !IVAS_FLOAT_FIXED #define STEREO_DFT_BPF_SIZE 40 /* BPF: Number of weights for BPF in DFT: 40*40Hz=1.6kHz*/ @@ -85,174 +65,6 @@ /*------------------------------------------------------------------------- * Local function prototypes *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_dft_compute_td_stefi_params( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, const float samp_ratio ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void stereo_dft_adapt_sf_delay( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, float *pPredGain ); -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * stereo_dft_dequantize_res_gains() - * - * joint dequantizer for side channel prediction gain and residual energy - *-------------------------------------------------------------------------*/ - -static void stereo_dft_dequantize_res_gains( - int16_t *ind1, - int16_t *ind2, - float *gout, - float *rout, - const int16_t N ) -{ - int16_t i, index; - - for ( i = 0; i < N; i++ ) - { - /* Ensure the indices are within range -- may go out of range due to frame loss */ - ind1[i] = check_bounds_s( ind1[i], 0, 30 ); - ind2[i] = check_bounds_s( ind2[i], 0, 7 ); - index = ( ( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ) << 3 ) + ind2[i]; - gout[i] = ind1[i] < 15 ? -dft_res_gains_q[index][0] : dft_res_gains_q[index][0]; - rout[i] = dft_res_gains_q[index][1]; - } - - return; -} - - -/*--------------------------------------------------------------------------- - * stereo_dft_dequantize_res_gains_f() - * - * returns interepolated values for non-integer indices - *---------------------------------------------------------------------------*/ - -static void stereo_dft_dequantize_res_gains_f( - float *ind1, - float *ind2, - float *gout, - float *rout, - const int16_t N ) -{ - int16_t i, i1, j1, sign, ji, ij; - float fi, fj; - - for ( i = 0; i < N; i++ ) - { - /* Ensure the indices are within range -- may go out of range due to frame loss */ - ind1[i] = check_bounds( ind1[i], 0, 31 ); - ind2[i] = check_bounds( ind2[i], 0, 7 ); - - /* compensate for the offset and extract/remove sign of first index */ - sign = ind1[i] < 15 ? -1 : 1; - i1 = (int16_t) floorf( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ); - fi = ( ind1[i] < 15 ? 15 - ind1[i] : ind1[i] - 15 ) - i1; - - j1 = (int16_t) floorf( ind2[i] ); - fj = ind2[i] - j1; - - /* choose base indices for interpolation */ - ji = min( fj < .5 ? j1 : j1 + 1, 7 ); - ij = min( fi < .5 ? i1 : i1 + 1, 15 ); - - /* interpolate values from table */ - if ( i1 < 15 ) - { - gout[i] = sign * ( ( 1 - fi ) * dft_res_gains_q[( i1 << 3 ) + ji][0] + fi * dft_res_gains_q[( ( i1 + 1 ) << 3 ) + ji][0] ); - } - else - { - gout[i] = sign * dft_res_gains_q[120 + ji][0]; - } - - if ( j1 < 7 ) - { - rout[i] = ( 1 - fj ) * dft_res_gains_q[( ij << 3 ) + j1][1] + fj * dft_res_gains_q[( ij << 3 ) + j1 + 1][1]; - } - else - { - rout[i] = dft_res_gains_q[( ij << 3 ) + 7][1]; - } - } - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_dequantize_ipd() - * - * Dequantize IPDs - *-------------------------------------------------------------------------*/ - -static void stereo_dft_dequantize_ipd( - int16_t *ind, - float *out, - const int16_t N, - const int16_t bits ) -{ - int16_t i; - float delta; - - if ( bits == 2 ) /* 2-bit phase quantization for the highest frequency band only */ - { - delta = EVS_PI / 2.f; - } - else if ( bits == 3 ) - { - delta = EVS_PI / 4.f; - } - else if ( bits == 4 ) - { - delta = EVS_PI / 8.f; - } - else - { - delta = EVS_PI / 4.f; - assert( 0 ); - } - - for ( i = 0; i < N; i++ ) - { - out[i] = ind[i] * delta - EVS_PI; - } - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_dequantize_itd() - * - * Dequantize ITDs - *-------------------------------------------------------------------------*/ - -void stereo_dft_dequantize_itd( - int16_t *ind, - float *out, - const int32_t output_Fs ) -{ - int16_t itd; - int16_t mask; - - mask = ( 1 << ( STEREO_DFT_ITD_NBITS - 1 ) ) - 1; - itd = ( ind[0] & mask ) + STEREO_DFT_ITD_MIN; - - if ( ( ind[0] >> ( STEREO_DFT_ITD_NBITS - 1 ) ) ) - { - itd *= -1; - } - assert( ( ABSVAL( itd ) <= STEREO_DFT_ITD_MAX ) && ( ABSVAL( itd ) >= STEREO_DFT_ITD_MIN ) ); - - /*Convert back @ fs*/ - *out = (float) ( itd * output_Fs ) / ( (float) ( STEREO_DFT_ITD_FS ) ); - - return; -} -#endif /*------------------------------------------------------------------------- @@ -261,62 +73,6 @@ void stereo_dft_dequantize_itd( * Create DFT stereo handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_dft_dec_create( - STEREO_DFT_DEC_DATA_HANDLE *hStereoDft, /* i/o: decoder DFT stereo handle */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - const int16_t nchan_transport /* i : number of transport channels */ -) -{ - STEREO_DFT_DEC_DATA_HANDLE hStereoDft_loc; - int16_t tmpS; - - if ( *hStereoDft != NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); - } - - if ( ( hStereoDft_loc = (STEREO_DFT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); - } - - if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); - } - - if ( ( hStereoDft_loc->hBpf = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF handle\n" ) ); - } - - if ( ( hStereoDft_loc->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TCX-LTP handle\n" ) ); - } - - hStereoDft_loc->hConfig->force_mono_transmission = 0; - - if ( sba_dirac_stereo_flag ) - { - ivas_sba_dirac_stereo_config( hStereoDft_loc->hConfig ); - } - else - { - stereo_dft_config( hStereoDft_loc->hConfig, element_brate, &tmpS, &tmpS ); - } - - stereo_dft_dec_open( hStereoDft_loc, output_Fs, nchan_transport ); - - *hStereoDft = hStereoDft_loc; - - return IVAS_ERR_OK; -} -#endif - /*------------------------------------------------------------------------- * stereo_dft_dec_open() @@ -324,82 +80,6 @@ ivas_error stereo_dft_dec_create( * Open DFT decoder stereo handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec_open( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t nchan_transport /* i : number of transport channels */ -) -{ - /*Sizes*/ - hStereoDft->N = (int16_t) ( STEREO_DFT_HOP_MAX * output_Fs / 48000 ); - - /*Init. DFT sizes*/ - hStereoDft->NFFT = (int16_t) ( STEREO_DFT32MS_N_MAX * output_Fs / 48000 ); - - hStereoDft->dft_trigo_8k = dft_trigo_32k; - hStereoDft->dft_trigo_12k8 = dft_trigo_12k8; - hStereoDft->dft_trigo_16k = dft_trigo_32k; - - hStereoDft->dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * output_Fs ) / 48000 ); - hStereoDft->win232ms_8k = dft_win232ms_8k; - hStereoDft->win232ms_12k8 = dft_win232ms_12k8; - hStereoDft->win232ms_16k = dft_win232ms_16k; - - hStereoDft->dft32ms_ovl2 = (int16_t) ( ( STEREO_DFT32MS_OVL2_MAX * output_Fs ) / 48000 ); - hStereoDft->win32ms_8k = dft_win232ms_8k + 1; - hStereoDft->win32ms_12k8 = dft_win232ms_12k8 + 1; - hStereoDft->win32ms_16k = dft_win232ms_16k + 1; - - if ( output_Fs == 16000 ) - { - hStereoDft->dft_trigo = dft_trigo_32k; - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; - hStereoDft->win232ms = dft_win232ms_16k; - hStereoDft->win32ms = dft_win232ms_16k + 1; - } - else if ( output_Fs == 32000 ) - { - hStereoDft->dft_trigo = dft_trigo_32k; - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; - hStereoDft->win232ms = dft_win232ms_32k; - hStereoDft->win32ms = dft_win232ms_32k + 1; - } - else - { - assert( output_Fs == 48000 ); - hStereoDft->dft_trigo = dft_trigo_48k; - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; - hStereoDft->win232ms = dft_win232ms_48k; - hStereoDft->win32ms = dft_win232ms_48k + 1; - } - - hStereoDft->win_8k = dft_win_8k; - - /*Bands: find the number of bands, Nyquist freq. is not taken into account*/ - set_s( hStereoDft->band_res, hStereoDft->hConfig->band_res, STEREO_DFT_DEC_DFT_NB ); - - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[0], hStereoDft->NFFT, DEC ); - hStereoDft->hb_stefi_delay = NS2SA( output_Fs, STEREO_DFT_TD_STEFI_DELAY_NS ); - - if ( nchan_transport > 2 ) - { - hStereoDft->min_smooth_gains = min_smooth_gains2; - hStereoDft->max_smooth_gains = max_smooth_gains2; - } - else - { - hStereoDft->min_smooth_gains = min_smooth_gains1; - hStereoDft->max_smooth_gains = max_smooth_gains1; - } - - /* reset DFT stereo memories */ - stereo_dft_dec_reset( hStereoDft ); - - return; -} -#endif - /*------------------------------------------------------------------------- * stereo_dft_dec_reset() @@ -407,213 +87,11 @@ void stereo_dft_dec_open( * Reset DFT stereo memories *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec_reset( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: decoder DFT stereo handle */ -) -{ - int16_t i; - int16_t j, b; - - /*Configuration*/ - set_s( hStereoDft->prm_res, hStereoDft->hConfig->prm_res, STEREO_DFT_DEC_DFT_NB ); - - /* SIDE_GAIN */ - set_s( hStereoDft->side_gain_index, 15, STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->side_gain_index_previous, 15, STEREO_DFT_BAND_MAX ); - - /*residual prediction*/ - set_s( hStereoDft->res_pred_mode, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_DEC_DFT_NB ); - for ( i = 0; i < STEREO_DFT_PAST_MAX; i++ ) - { - set_zero( hStereoDft->DFT_past_DMX[i], STEREO_DFT32MS_N_32k ); - set_zero( hStereoDft->past_res_pred_gain[i], STEREO_DFT_BAND_MAX ); - } - - hStereoDft->past_DMX_pos = 0; - - set_s( hStereoDft->res_pred_index_previous, 0, STEREO_DFT_BAND_MAX ); - - for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) - { - hStereoDft->res_gains_ind[0][i] = 15.f; - } - - set_zero( hStereoDft->res_gains_ind[1], STEREO_DFT_BAND_MAX ); - - /*residual coding*/ - set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_DEC_DFT_NB ); - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->hConfig->res_cod_mode]; - set_zero( hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); - - hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - - hStereoDft->stab_fac_smooth_res = 0.f; - bass_psfilter_init( hStereoDft->hBpf ); - - tcxltp_dec_init( hStereoDft->hTcxLtpDec, 0, MODE1, IVAS_CPE_DFT, PIT_MAX, 12800 ); - - hStereoDft->reverb_flag = 0; - - hStereoDft->bpf_error_signal_last = 0.0f; - hStereoDft->bpf_error_ratio_mem = 1.0f; - hStereoDft->res_hb_nrg_mem = 0.0f; - - /*reset parameters*/ - set_zero( hStereoDft->side_gain, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->gipd, STEREO_DFT_DEC_DFT_NB ); - set_zero( hStereoDft->itd, STEREO_DFT_DEC_DFT_NB ); - set_zero( hStereoDft->res_pred_gain, STEREO_DFT_DEC_DFT_NB * STEREO_DFT_BAND_MAX ); - - hStereoDft->wasTransient = 0; - hStereoDft->attackPresent = 0; - - hStereoDft->lt_pred_gain = 0.0f; - hStereoDft->lt_pred_gain_variation = 0.0f; - hStereoDft->lt_var_mean_ratio = STEREO_DFT_RES_RATIO_LIMIT; - hStereoDft->stefi_short_gain = 1.0f; - hStereoDft->stefi_long_gain = 0.0f; - - set_zero( hStereoDft->g_state, STEREO_DFT_BAND_MAX ); - - init_basic_allpass( &hStereoDft->ap1, dft_ap_gains[0], dft_ap_delays[0] ); - init_basic_allpass( &hStereoDft->ap2, dft_ap_gains[1], dft_ap_delays[1] ); - init_basic_allpass( &hStereoDft->ap3, dft_ap_gains[2], dft_ap_delays[2] ); - - set_zero( hStereoDft->ap_delay_mem, NS2SA( 16000, DELAY_BWE_TOTAL_NS ) ); - set_zero( hStereoDft->ap_fade_mem, STEREO_DFT_ALLPASS_FADELEN_16k ); - hStereoDft->ap_wasTransient = 0; - set_zero( hStereoDft->smooth_dmx_nrg, STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->smooth_res_nrg, STEREO_DFT_BAND_MAX ); - - set_s( hStereoDft->core_hist, ACELP_CORE, STEREO_DFT_CORE_HIST_MAX ); - - set_zero( hStereoDft->hb_stefi_sig, L_FRAME48k + NS2SA( 48000, STEREO_DFT_TD_STEFI_DELAY_NS ) ); - set_zero( hStereoDft->hb_nrg, STEREO_DFT_CORE_HIST_MAX ); - set_zero( hStereoDft->td_gain, STEREO_DFT_CORE_HIST_MAX ); - - /* PLC parameters */ - set_zero( hStereoDft->res_mem, STEREO_DFT_RES_BW_MAX ); - hStereoDft->time_offs = 0; - hStereoDft->past_dmx_nrg = 0; - hStereoDft->sg_mean = 0.0f; - hStereoDft->sg_mem_corrupt = 0; - hStereoDft->recovery_flg = 0; - - for ( i = 0; i < SBA_DIRAC_STEREO_NUM_BANDS; i++ ) - { - set_zero( hStereoDft->smooth_buf[i], SBA_DIRAC_NRG_SMOOTH_LONG + 1 ); - } - set_zero( hStereoDft->smooth_fac[0], SBA_DIRAC_STEREO_NUM_BANDS ); - set_zero( hStereoDft->smooth_fac[1], SBA_DIRAC_STEREO_NUM_BANDS ); - - hStereoDft->itd_xfade_target = 0.0f; - hStereoDft->itd_xfade_step = 0.0f; - hStereoDft->itd_xfade_counter = 0; - hStereoDft->itd_xfade_prev = 0.0f; - hStereoDft->last_active_element_brate = 0; - hStereoDft->ipd_xfade_target = 0.0f; - hStereoDft->ipd_xfade_step = 0.0f; - hStereoDft->ipd_xfade_counter = 0; - hStereoDft->ipd_xfade_prev = 0.0f; - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - hStereoDft->mixer_mat_smooth[i][j][b] = 0.0f; - } - } - } - hStereoDft->first_frame = 1; - hStereoDft->g_L_prev = 0.f; - hStereoDft->g_R_prev = 0.f; - - return; -} - -#endif /*------------------------------------------------------------------------- * stereo_dft_dec_update() * * Update DFT memories for new frame *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec_update( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const int16_t output_frame, /* i : output frame length */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - int16_t b, i, k_offset; - - /* Initialization */ - k_offset = STEREO_DFT_OFFSET; /*Add an offset*/ - - /* Update parameters */ - for ( i = 0; i < k_offset * STEREO_DFT_BAND_MAX; i++ ) - { - hStereoDft->side_gain[i] = hStereoDft->side_gain[STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX + i]; - hStereoDft->res_pred_gain[i] = hStereoDft->res_pred_gain[STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX + i]; - } - - for ( i = 0; i < k_offset; i++ ) - { - hStereoDft->gipd[i] = hStereoDft->gipd[STEREO_DFT_NBDIV + i]; - } - - /* Update configuration memories */ - for ( i = 0; i < k_offset; i++ ) - { - hStereoDft->band_res[i] = hStereoDft->band_res[i + STEREO_DFT_NBDIV]; - hStereoDft->prm_res[i] = hStereoDft->prm_res[i + STEREO_DFT_NBDIV]; - hStereoDft->itd[i] = hStereoDft->itd[STEREO_DFT_NBDIV + i]; - hStereoDft->res_cod_mode[i] = hStereoDft->res_cod_mode[i + STEREO_DFT_NBDIV]; - hStereoDft->res_pred_mode[i] = hStereoDft->res_pred_mode[i + STEREO_DFT_NBDIV]; - } - - /* Load new configurations */ - set_s( hStereoDft->band_res + k_offset, hStereoDft->hConfig->band_res, STEREO_DFT_NBDIV ); - set_s( hStereoDft->prm_res + k_offset, hStereoDft->hConfig->prm_res, STEREO_DFT_NBDIV ); - set_s( hStereoDft->res_pred_mode + k_offset, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_NBDIV ); - set_s( hStereoDft->res_cod_mode + k_offset, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_NBDIV ); - - /*Update attack info*/ - if ( hStereoDft->attackPresent ) - { - hStereoDft->wasTransient = 1; - } - else if ( hStereoDft->wasTransient ) - { - hStereoDft->wasTransient = 0; - } - - for ( i = STEREO_DFT_CORE_HIST_MAX - 1; i > 0; i-- ) - { - hStereoDft->core_hist[i] = hStereoDft->core_hist[i - 1]; - } - - mvr2r( hStereoDft->hb_stefi_sig + output_frame, hStereoDft->hb_stefi_sig, hStereoDft->hb_stefi_delay ); - mvr2r( hStereoDft->hb_nrg, hStereoDft->hb_nrg + 1, STEREO_DFT_CORE_HIST_MAX - 1 ); - mvr2r( hStereoDft->td_gain, hStereoDft->td_gain + 1, STEREO_DFT_CORE_HIST_MAX - 1 ); - - if ( sba_dirac_stereo_flag ) - { - /* buffer update, push back by 2 because of 2 subframes */ - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - for ( i = SBA_DIRAC_NRG_SMOOTH_LONG; i > 1; i-- ) - { - hStereoDft->smooth_buf[b][i] = hStereoDft->smooth_buf[b][i - 2]; - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_dec_destroy() @@ -660,7 +138,6 @@ void stereo_dft_dec_destroy( * DFT analysis on a 20ms frame *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_dec_analyze_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ const Word32 *input_fx, /* i : input signal q*/ @@ -1010,2411 +487,10 @@ void stereo_dft_dec_analyze_fx( pop_wmops(); return; } -#else -void stereo_dft_dec_analyze( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - const float *input, /* i : input signal */ - float out_DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* o : DFT buffers */ - const int16_t chan, /* i : channel number */ - const int16_t input_frame, /* i : input frame size */ - const int16_t output_frame, /* i : output frame size */ - const DFT_STEREO_DEC_ANA_TYPE ana_type, /* i : type of signal to analyse */ - const int16_t k_offset, /* i : offset of DFT */ - const int16_t delay /* i : delay in samples for input signal */ -) -{ - int16_t i, k; - STEREO_DFT_DEC_DATA_HANDLE hStereoDft; - float *pInput, *pInput_buff; - float *mem, input_buff[STEREO_DFT32MS_OVL_MAX + L_FRAME48k]; - float DFT[STEREO_DFT32MS_N_MAX], *pDFT_out; - int16_t NFFT, NFFT_core, ovl, zp; - int16_t offset; - float fac; - const float *trigo, *win_left, *win_right, *win2; - float trigo_dec[STEREO_DFT32MS_N_MAX / 2 + 1]; - int16_t trigo_step; - int32_t inputFs; - int16_t delay_dec; - int16_t mem_size; - int16_t ovl2; - - push_wmops( "DFT_analysis" ); - - hStereoDft = hCPE->hStereoDft; - - assert( output_frame == STEREO_DFT_NBDIV * hStereoDft->N ); - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - if ( input_frame == output_frame ) - { - trigo = hStereoDft->dft_trigo; - trigo_step = hStereoDft->dft_trigo_step * STEREO_DFT_TRIGO_DEC_STEP; - win_right = hStereoDft->win32ms; - win_left = hStereoDft->win32ms; - win2 = hStereoDft->win232ms; - - if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) - { - assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); - mem = hCPE->input_mem_BPF[chan]; - } - else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) - { - mem = hCPE->input_mem_LB[chan]; - } - else - { - mem = hCPE->input_mem[chan]; - } - } - else if ( input_frame == L_FRAME ) - { - trigo = hStereoDft->dft_trigo_12k8; - trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP * STEREO_DFT_TRIGO_DEC_STEP; - win_right = hStereoDft->win32ms_12k8; - win_left = hStereoDft->win32ms_12k8; - win2 = hStereoDft->win232ms_12k8; - - if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) - { - assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); - mem = hCPE->input_mem_BPF[chan]; - } - else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) - { - mem = hCPE->input_mem_LB[chan]; - } - else - { - assert( ( chan == 1 ) && "12.8kHz sampling rate only for second channel, i.e. residual coding or allpass signal" ); - mem = hCPE->input_mem[chan]; - } - } - else if ( input_frame == L_FRAME16k ) - { - trigo = hStereoDft->dft_trigo_16k; - trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP * STEREO_DFT_TRIGO_DEC_STEP; - win_right = hStereoDft->win32ms_16k; - win_left = hStereoDft->win32ms_16k; - win2 = hStereoDft->win232ms_16k; - - if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) - { - assert( ( chan == 0 ) && "DFT stereo: BPF memory only for M channel" ); - mem = hCPE->input_mem_BPF[chan]; - } - else if ( ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_LB_ADD ) - { - mem = hCPE->input_mem_LB[chan]; - } - else - { - assert( ( chan == 1 ) && hCPE->hStereoDft->hConfig->res_pred_mode == STEREO_DFT_RESPRED_ESF && "16kHz sampling rate only for second channel with allpass signal" ); - mem = hCPE->input_mem[chan]; - } - } - else if ( input_frame == L_FRAME8k ) - { - assert( ( chan == 1 ) && "DFT stereo: 8kHz analysis only for residual coding" ); - trigo = hStereoDft->dft_trigo_8k; - trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP * STEREO_DFT_TRIGO_DEC_STEP; - win_right = hStereoDft->win32ms_8k; - win_left = hStereoDft->win32ms_8k; - win2 = hStereoDft->win232ms_8k; - mem = hCPE->input_mem[chan]; - } - else - { - IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error in DFT stereo: sampling rate not supported" ); - mem = NULL; /* to avoid compilation warning */ - trigo = NULL; /* to avoid compilation warning */ - trigo_step = -1; /* to avoid compilation warning */ - win_right = NULL; /* to avoid compilation warning */ - win_left = NULL; /* to avoid compilation warning */ - win2 = NULL; /* to avoid compilation warning */ - } - - inputFs = input_frame * FRAMES_PER_SEC; - delay_dec = NS2SA( inputFs, STEREO_DFT32MS_OVL_NS ); - zp = NS2SA( inputFs, STEREO_DFT32MS_ZP_NS ); - ovl = NS2SA( inputFs, STEREO_DFT32MS_OVL_NS ); - NFFT = NS2SA( inputFs, STEREO_DFT32MS_N_NS ); - fac = (float) ( hStereoDft->NFFT ) / (float) ( NFFT ); - ovl2 = NS2SA( inputFs, STEREO_DFT32MS_OVL2_NS ); - /* Offset for the time buffers */ - assert( ( delay >= -NS2SA( input_frame * FRAMES_PER_SEC, STEREO_DFT_DELAY_DEC_BWE_NS + STEREO_DFT_OVL_NS / 2 ) ) && ( delay <= NS2SA( input_frame * FRAMES_PER_SEC, STEREO_DFT_OVL_NS ) ) ); - mem_size = delay_dec + delay; - - /* Update buffers */ - mvr2r( mem, input_buff, mem_size ); - mvr2r( input, input_buff + mem_size, input_frame ); - mvr2r( input_buff + input_frame, mem, mem_size ); - pInput_buff = input_buff; - - if ( hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - pop_wmops(); - return; - } - - - /*-----------------------------------------------------------------* - * DFT Analysis: loop over frame - *-----------------------------------------------------------------*/ - - assert( k_offset <= STEREO_DFT_NBDIV ); - - for ( i = 0; i < NFFT / 4; i++ ) - { - trigo_dec[i] = trigo[i * trigo_step]; - trigo_dec[NFFT / 2 - i] = trigo[i * trigo_step]; - } - trigo_dec[NFFT / 4] = trigo[NFFT / 4 * trigo_step]; - - for ( k = 0; k < STEREO_DFT_NBDIV - k_offset; k++ ) - { - set_f( DFT, 0, STEREO_DFT32MS_N_MAX ); - if ( k == 0 ) - { - offset = 0; - } - else - { - /* If OVL2 = OVL offset = 10ms */ - offset = NS2SA( inputFs, STEREO_DFT32MS_WIN_CENTER_NS - STEREO_DFT32MS_OVL2_NS / 2 ); - } - - pInput = pInput_buff + offset; - pDFT_out = out_DFT[chan] + k * STEREO_DFT32MS_N_MAX; - - /*Forwards FFT: L and R*/ - /* Zero Padding & Flat Portion */ - mvr2r( pInput, DFT + zp, NFFT - 2 * zp ); - - /* Overlapping portions */ - if ( k == 0 ) - { - for ( i = 0; i < ovl; i++ ) - { - DFT[i + zp] *= win_left[STEREO_DFT32MS_STEP * i]; - } - for ( i = 0; i < ovl2; i++ ) - { - DFT[NFFT - zp - 1 - i] *= win2[i]; - } - } - else - { - for ( i = 0; i < ovl2; i++ ) - { - DFT[i + zp] *= win2[i]; - } - for ( i = 0; i < ovl; i++ ) - { - DFT[NFFT - zp - i - 1] *= win_right[STEREO_DFT32MS_STEP * i]; - } - } - - rfft( DFT, trigo_dec, NFFT, -1 ); - - /*Resampling: filtering+scaling*/ - if ( ana_type == DFT_STEREO_DEC_ANA_FB || ana_type == DFT_STEREO_DEC_ANA_LB || ana_type == DFT_STEREO_DEC_ANA_NOCORE ) - { - pDFT_out[0] = DFT[0] * fac; /*DC*/ - if ( NFFT == hStereoDft->NFFT ) /*Nyquist*/ - { - pDFT_out[1] = DFT[1] * fac; - } - else - { - pDFT_out[1] = 0.f; - } - for ( i = 2; i < NFFT; i++ ) - { - pDFT_out[i] = DFT[i] * fac; - } - for ( i = NFFT; i < hStereoDft->NFFT; i++ ) - { - pDFT_out[i] = 0.f; - } - } - else if ( ana_type == DFT_STEREO_DEC_ANA_BPF ) - { - pDFT_out[0] -= DFT[0] * fac * dft_bpf_weights[0]; - - for ( i = 1; i < STEREO_DFT_BPF_SIZE; i++ ) - { - pDFT_out[2 * i] -= DFT[2 * i] * fac * dft_bpf_weights[i]; - pDFT_out[2 * i + 1] -= DFT[2 * i + 1] * fac * dft_bpf_weights[i]; - } - } - else if ( ana_type == DFT_STEREO_DEC_ANA_HB_ADD ) - { - NFFT_core = NS2SA( hCPE->hCoreCoder[0]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_N_NS ); - - for ( i = NFFT_core; i < NFFT; i++ ) - { - pDFT_out[i] += DFT[i] * fac; - } - } - else - { - pDFT_out[0] += DFT[0] * fac; /*DC*/ - if ( NFFT == hStereoDft->NFFT ) /*Nyquist*/ - { - pDFT_out[1] += DFT[1] * fac; - } - for ( i = 2; i < NFFT; i++ ) - { - pDFT_out[i] += DFT[i] * fac; - } - } - } - - pop_wmops(); - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * stereo_dft_dec_synthesize() - * - * Inverse DFT on a 20ms frame - *-------------------------------------------------------------------------*/ - -void stereo_dft_dec_synthesize( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i : DFT buffers */ - const int16_t chan, /* i : channel number */ - float output[L_FRAME48k], /* o : output synthesis signal */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i, k; - int16_t offset; - STEREO_DFT_DEC_DATA_HANDLE hStereoDft; - float *p_DFT; - const float *win, *win2; - float trigo_dec[STEREO_DFT32MS_N_MAX / 2 + 1]; - int16_t trigo_step; - int16_t ovl, zp, NFFT; - int32_t outputFs; - int16_t ovl2, flat_portion_end; - float ola_buff[STEREO_DFT32MS_OVL2_MAX]; - int16_t moffset; - push_wmops( "DFT_synthesis" ); - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - hStereoDft = hCPE->hStereoDft; - - outputFs = output_frame * FRAMES_PER_SEC; - - zp = NS2SA( outputFs, STEREO_DFT32MS_ZP_NS ); - ovl = NS2SA( outputFs, STEREO_DFT32MS_OVL_NS ); - win = hStereoDft->win32ms; - NFFT = NS2SA( outputFs, STEREO_DFT32MS_N_NS ); - ovl2 = NS2SA( outputFs, STEREO_DFT32MS_OVL2_NS ); - flat_portion_end = NS2SA( outputFs, STEREO_DFT32MS_WIN_CENTER_NS - STEREO_DFT32MS_OVL2_NS / 2 ); - win2 = hStereoDft->win232ms; - - p_DFT = DFT[chan]; - set_f( output, 0, NS2SA( outputFs, FRAME_SIZE_NS ) ); - - /* deactivating the spectrum scrambling on active speech */ - if ( ( chan == 0 && hCPE->hCoreCoder[0]->last_coder_type > UNVOICED ) || hCPE->last_element_mode == IVAS_CPE_MDCT || hCPE->last_element_mode < IVAS_CPE_DFT ) - { - hCPE->stereo_switching_counter = 10; - } - - if ( hCPE->stereo_switching_counter == 0 ) - { - /* Set the level of dispersion */ - hCPE->NbFrameMod = (int16_t) ( 12.0f * max( -0.1f, min( 0.4, hCPE->lt_es_em ) ) + 1.2f + 0.5f ); /* -0.1: -0.4 ; -0.1 -> 0, 0.4 -> 6*/ - } - moffset = max( 0, 6 - hCPE->NbFrameMod ); - - /*-----------------------------------------------------------------* - * Synthesis - *-----------------------------------------------------------------*/ - - trigo_step = hStereoDft->dft_trigo_step * STEREO_DFT_TRIGO_DEC_STEP; - for ( i = 0; i < NFFT / 4; i++ ) - { - trigo_dec[i] = hStereoDft->dft_trigo[i * trigo_step]; - trigo_dec[NFFT / 2 - i] = hStereoDft->dft_trigo[i * trigo_step]; - } - trigo_dec[NFFT / 4] = hStereoDft->dft_trigo[NFFT / 4 * trigo_step]; - - for ( k = 0; k < STEREO_DFT_NBDIV; k++ ) - { - /* scrambling the spectrum */ - if ( hCPE->stereo_switching_counter <= 6 && chan == 1 && ( hCPE->lt_es_em > -0.4f || hCPE->NbFrameMod > 4 ) ) - { - for ( i = 3; i < NFFT - moffset - 1; i++ ) - { - p_DFT[i] = -p_DFT[i + moffset + 1]; - } - } - else if ( hCPE->stereo_switching_counter < 7 && ( hCPE->lt_es_em > 0.2f || hCPE->NbFrameMod > 4 ) ) - { - for ( i = 16 - hCPE->NbFrameMod; i < NFFT - moffset - 1; i++ ) - { - p_DFT[i - 2] = -p_DFT[i + moffset + 1]; - } - } - - /*IFFT*/ - rfft( p_DFT, trigo_dec, NFFT, +1 ); - - if ( k == 0 ) - { - offset = 0; - - /* Left OLA - 3.125ms */ - for ( i = 0; i < ovl; i++ ) - { - output[offset + i] = hCPE->output_mem[chan][i] + p_DFT[zp + i] * win[STEREO_DFT32MS_STEP * i]; - } - /* Flat Portion */ - for ( i = ovl; i < flat_portion_end; i++ ) - { - output[offset + i] = p_DFT[zp + i]; - } - /* Right OLA */ - for ( i = 0; i < ovl2; i++ ) - { - ola_buff[i] = win2[ovl2 - 1 - i] * p_DFT[NFFT - zp - ovl2 + i]; - } - } - else - { - /* If OVL2 = OVL offset = 10ms */ - offset = flat_portion_end; - - /* Left OLA */ - for ( i = 0; i < ovl2; i++ ) - { - output[offset + i] = ola_buff[i] + p_DFT[zp + i] * win2[i]; - } - /* Flat Portion */ - for ( i = ovl2; i < NFFT - 2 * zp - ovl; i++ ) - { - output[offset + i] = p_DFT[zp + i]; - } - /* Right OLA - 3.125ms */ - for ( i = 0; i < ovl; i++ ) - { - hCPE->output_mem[chan][i] = win[STEREO_DFT32MS_STEP * ( ovl - 1 - i )] * p_DFT[NFFT - zp - ovl + i]; - } - } - - p_DFT += STEREO_DFT32MS_N_MAX; - } - - - pop_wmops(); - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_dec() - * - * DFT-based stereo main processing function - *-------------------------------------------------------------------------*/ - -void stereo_dft_dec( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - Decoder_State *st0, /* i/o: decoder state structure */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ - float *input_mem, /* i/o: mem of buffer DFT analysis */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - const int16_t sba_mono_flag, /* i : signal mono output for SBA DirAC */ - ivas_spar_md_dec_state_t *hMdDec, /* i : SPAR MD handle for upmixing */ - const int16_t cross_fade_start_offset, /* i : SPAR mixer delay compensation */ - const int32_t output_Fs, /* i : Fs for delay calculation */ - const int16_t nchan_transport, /* i : number of transpor channels */ - const int16_t num_md_sub_frames /* i : number of MD subframes */ -) -{ - int16_t i, k, b, N_div, stop; - float DFT_L[STEREO_DFT32MS_N_MAX]; - float DFT_R[STEREO_DFT32MS_N_MAX]; - float DFT_PRED_RES[STEREO_DFT32MS_N_32k]; - float *pDFT_DMX; - float *pDFT_DMX1; - float *pDFT_RES; - float g, tmp; - float *pPredGain; - float *pSideGain; - float c0, s0; - int16_t k_offset; - float *pgIpd; - int16_t NFFT_inner; - float gamma; - float samp_ratio; - int16_t prev_bfi; - float dmx_nrg; - int16_t idx_k0, idx_k1; - int16_t output_frame; - int16_t plocs[STEREO_DFT_RES_N_PEAKS_MAX]; - int16_t num_plocs; - float plocsi[STEREO_DFT_RES_N_PEAKS_MAX]; - float ftmp, N1, N2, coh; - float lev1, lev2, cna_level, scale_fact0, scale_fact, *ptr_per; - HANDLE_FD_CNG_DEC hFdCngDec = st0->hFdCngDec; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngDec->hFdCngCom; - int16_t *cna_seed = &( hFdCngCom->seed ); - float DFT_W, DFT_Y; - - output_frame = (int16_t) ( st0->output_Fs / FRAMES_PER_SEC ); - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - samp_ratio = (float) st0->sr_core / (float) st0->output_Fs; - - stop = STEREO_DFT32MS_N_32k / 2; - - /* Analyze nature of current frame */ - hStereoDft->trans = ( ( ( st0->clas_dec == ONSET ) || ( st0->clas_dec == SIN_ONSET ) || ( st0->clas_dec == UNVOICED_CLAS ) || ( st0->clas_dec == UNVOICED_TRANSITION ) ) || ( st0->stab_fac <= 0.25f ) ) || - ( st0->core == TCX_20_CORE && ( ( st0->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) || ( st0->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP ) ) ) || ( st0->core == TCX_10_CORE ); - - - /* Initialization */ - k_offset = 1; - N_div = STEREO_DFT_NBDIV; - prev_bfi = st0->prev_old_bfi; /* The core decoding is already completed here and the prev_bfi has been updated for the next frame. - The prev_old_bfi still holds the prev_bfi for the current frame. */ - /* make sure number of bands corresponds to output bwidth in case it is lower than parameter bwidth */ - if ( output_frame < inner_frame_tbl[st0->bwidth] && !sba_dirac_stereo_flag ) - { - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], hStereoDft->NFFT, DEC ); - } - - if ( !st0->bfi ) - { - /* Smoothing for the current frame */ - if ( sba_dirac_stereo_flag ) - { - ivas_sba_dirac_stereo_smooth_parameters( hStereoDft, hMdDec, cross_fade_start_offset, output_Fs, num_md_sub_frames ); - } - else - { - stereo_dft_dec_smooth_parameters( hStereoDft, hStereoCng->prev_sid_nodata, hStereoCng->active_frame_counter, st0->element_brate ); - } - } - - dmx_nrg = 0.0f; - if ( prev_bfi ) - { - dmx_nrg = stereo_dft_dmx_swb_nrg( DFT[0], DFT[0] + STEREO_DFT32MS_N_MAX, min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - } - - for ( k = 0; k < N_div; k++ ) - { - pDFT_DMX = DFT[0] + k * STEREO_DFT32MS_N_MAX; - pDFT_RES = DFT[1] + k * STEREO_DFT32MS_N_MAX; - pDFT_DMX1 = 0; - if ( nchan_transport > 1 ) - { - pDFT_DMX1 = DFT[1] + k * STEREO_DFT32MS_N_MAX; - } - - /*Apply Stereo*/ - if ( hStereoDft->hConfig->dmx_active ) - { - g = 1.f; - c0 = 1.f; - s0 = 0.f; - - /* since delay is just 3.125ms, the parameters received are used for the second window */ - pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; - pgIpd = hStereoDft->gipd + ( k + k_offset ); - pPredGain = hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; - - /* Use coarse band partition in inactive frames */ - if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) - { - NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[st0->bwidth] / L_FRAME48k; - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, 2, NFFT_inner, DEC ); - } - - - if ( st0->bfi ) - { - hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + STEREO_DFT_PAST_MAX - 1 ) % STEREO_DFT_PAST_MAX; - } - - if ( !( sba_dirac_stereo_flag && nchan_transport >= 2 ) ) - { - stereo_dft_generate_res_pred( hStereoDft, samp_ratio, pDFT_DMX, DFT_PRED_RES, pPredGain, k, DFT[1] + k * STEREO_DFT32MS_N_MAX, &stop, st0->bfi ); - } - - if ( hStereoDft->res_cod_band_max > 0 ) - { - if ( !st0->bfi ) - { - if ( k == 1 ) - { - mvr2r( pDFT_RES, hStereoDft->res_mem, 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max] ); - hStereoDft->time_offs = 0; - } - } - else - { - stereo_dft_res_ecu( hStereoDft, pDFT_RES, DFT_PRED_RES, k, output_frame, prev_bfi, dmx_nrg, &num_plocs, plocs, plocsi, input_mem ); - } - } - - /* Apply active DMX */ - /* pDFT_RES is used for the second channel in inactive frames */ - if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) - { - DFT_L[0] = pDFT_DMX[0]; - DFT_R[0] = pDFT_RES[0]; - } - else - { - DFT_L[0] = pDFT_DMX[0]; - DFT_R[0] = pDFT_DMX[0]; - } - - if ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) - { - hFdCngDec->cna_nbands = 0; - } - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - g = pSideGain[b]; - if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) - { - g = hStereoDft->g_state[b]; - } - - /* store side gains from inactive frames for later use by the stereo CNA */ - if ( hStereoDft->band_limits[b] < L_FRAME16k && ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) ) - { - hFdCngDec->cna_nbands = b + 1; - hFdCngDec->cna_band_limits[b] = hStereoDft->band_limits[b]; - hFdCngDec->cna_g_state[b] = g; - } - - /* No residual coding in inactive frames, instead pDFT_RES is used for the second channel */ - if ( b >= hStereoDft->res_cod_band_max && !hStereoDft->frame_sid_nodata && !( sba_dirac_stereo_flag && hMdDec ) ) - { - /*filter non-coded frequencies. It removes some MDCT frequency aliasing*/ - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - pDFT_RES[2 * i] = 0.f; - pDFT_RES[2 * i + 1] = 0.f; - } - } - - if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) - { - /* Low pass filter coherence */ - /* store coherence from inactive frames for later use by the stereo CNA */ - hFdCngDec->cna_cm[b] = hStereoCng->cm[b]; - - /* Calculate gamma */ - if ( hStereoCng->cm[b] < 0.9f ) - { - gamma = hStereoCng->cm[b]; - gamma = gamma / ( 1 - gamma ); - gamma = sqrtf( gamma + 1 - g * g ) - sqrtf( gamma ); - } - else - { - gamma = 0; - } - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - /* Create L and R signals with the correct coherence by mixing channel 0 (pDFT_DMX) and channel 1 (pDFT_RES) */ - DFT_L[2 * i] = ( 1 + g ) * pDFT_DMX[2 * i] + gamma * pDFT_RES[2 * i]; - DFT_R[2 * i] = ( 1 - g ) * pDFT_DMX[2 * i] - gamma * pDFT_RES[2 * i]; - - DFT_L[2 * i + 1] = ( 1 + g ) * pDFT_DMX[2 * i + 1] + gamma * pDFT_RES[2 * i + 1]; - DFT_R[2 * i + 1] = ( 1 - g ) * pDFT_DMX[2 * i + 1] - gamma * pDFT_RES[2 * i + 1]; - } - - if ( pgIpd[0] != 0.f ) - { - c0 = cosf( pgIpd[0] ); - s0 = sinf( pgIpd[0] ); - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - /*rotate L*/ - tmp = DFT_L[2 * i] * c0 - DFT_L[2 * i + 1] * s0; - DFT_L[2 * i + 1] = DFT_L[2 * i] * s0 + DFT_L[2 * i + 1] * c0; - DFT_L[2 * i] = tmp; - } - } - } - else if ( sba_dirac_stereo_flag && hMdDec ) - { - - if ( nchan_transport == 1 ) - { - if ( sba_mono_flag ) - { - if ( b == 0 ) - { - i = 0; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - DFT_L[2 * i] = DFT_W; - DFT_R[2 * i] = 0.f; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - DFT_L[2 * i + 1] = DFT_W; - DFT_R[2 * i + 1] = 0.f; - } - for ( i = hStereoDft->band_limits[b]; i < min( stop, hStereoDft->band_limits[b + 1] ); i++ ) - { - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i] + ( hStereoDft->mixer_mat_smooth[0][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i]; - DFT_L[2 * i] = DFT_W; - DFT_R[2 * i] = 0.f; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1] + ( hStereoDft->mixer_mat_smooth[0][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i + 1]; - DFT_L[2 * i + 1] = DFT_W; - DFT_R[2 * i + 1] = 0.f; - } - for ( ; i < hStereoDft->band_limits[b + 1]; i++ ) - { - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - DFT_L[2 * i] = DFT_W; - DFT_R[2 * i] = 0.f; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - DFT_L[2 * i + 1] = DFT_W; - DFT_R[2 * i + 1] = 0.f; - } - } - else - { - if ( b == 0 ) - { - i = 0; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - - DFT_L[2 * i] = DFT_W + DFT_Y; - DFT_R[2 * i] = DFT_W - DFT_Y; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - - DFT_L[2 * i + 1] = DFT_W + DFT_Y; - DFT_R[2 * i + 1] = DFT_W - DFT_Y; - } - for ( i = hStereoDft->band_limits[b]; i < min( stop, hStereoDft->band_limits[b + 1] ); i++ ) - { - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i] + ( hStereoDft->mixer_mat_smooth[0][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i] + ( hStereoDft->mixer_mat_smooth[1][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i]; - - DFT_L[2 * i] = DFT_W + DFT_Y; - DFT_R[2 * i] = DFT_W - DFT_Y; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1] + ( hStereoDft->mixer_mat_smooth[0][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[0][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i + 1]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1] + ( hStereoDft->mixer_mat_smooth[1][1][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][2][b + k * IVAS_MAX_NUM_BANDS] + hStereoDft->mixer_mat_smooth[1][3][b + k * IVAS_MAX_NUM_BANDS] ) * DFT_PRED_RES[2 * i + 1]; - - DFT_L[2 * i + 1] = DFT_W + DFT_Y; - DFT_R[2 * i + 1] = DFT_W - DFT_Y; - } - for ( ; i < hStereoDft->band_limits[b + 1]; i++ ) - { - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i]; - - DFT_L[2 * i] = DFT_W + DFT_Y; - DFT_R[2 * i] = DFT_W - DFT_Y; - - DFT_W = hStereoDft->mixer_mat_smooth[0][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1]; - - DFT_L[2 * i + 1] = DFT_W + DFT_Y; - DFT_R[2 * i + 1] = DFT_W - DFT_Y; - } - } - } - else if ( nchan_transport >= 2 ) - { - if ( b == 0 ) - { - i = 0; - - DFT_W = pDFT_DMX[2 * i]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i] + pDFT_DMX1[2 * i]; - - DFT_L[2 * i] = DFT_W + DFT_Y; - DFT_R[2 * i] = DFT_W - DFT_Y; - - DFT_W = pDFT_DMX[2 * i + 1]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1] + pDFT_DMX1[2 * i + 1]; - - DFT_L[2 * i + 1] = DFT_W + DFT_Y; - DFT_R[2 * i + 1] = DFT_W - DFT_Y; - } - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - DFT_W = pDFT_DMX[2 * i]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i] + pDFT_DMX1[2 * i]; - - DFT_L[2 * i] = DFT_W + DFT_Y; - DFT_R[2 * i] = DFT_W - DFT_Y; - - DFT_W = pDFT_DMX[2 * i + 1]; - DFT_Y = hStereoDft->mixer_mat_smooth[1][0][b + k * IVAS_MAX_NUM_BANDS] * pDFT_DMX[2 * i + 1] + pDFT_DMX1[2 * i + 1]; - - DFT_L[2 * i + 1] = DFT_W + DFT_Y; - DFT_R[2 * i + 1] = DFT_W - DFT_Y; - } - } - else - { - assert( "nhcan_transport must be 1 or 1!" ); - } - } - else - { - for ( i = hStereoDft->band_limits[b]; i < min( stop, hStereoDft->band_limits[b + 1] ); i++ ) - { - tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i] + DFT_PRED_RES[2 * i]; - - DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; - DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; - - tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1] + DFT_PRED_RES[2 * i + 1]; - - DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; - DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; - } - - for ( ; i < hStereoDft->band_limits[b + 1]; i++ ) - { - tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i]; - - DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; - DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; - - tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1]; - - DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; - DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; - } - - /* Active Upmix */ - if ( pgIpd[0] != 0.f ) - { - c0 = cosf( pgIpd[0] ); - s0 = sinf( pgIpd[0] ); - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - /*rotate L*/ - tmp = DFT_L[2 * i] * c0 - DFT_L[2 * i + 1] * s0; - DFT_L[2 * i + 1] = DFT_L[2 * i] * s0 + DFT_L[2 * i + 1] * c0; - DFT_L[2 * i] = tmp; - } - } - } - } - - if ( hStereoDft->frame_sid_nodata || st0->VAD == 0 ) - { - hFdCngDec->cna_band_limits[hFdCngDec->cna_nbands] = hStereoDft->band_limits[hFdCngDec->cna_nbands]; - } - - if ( hStereoDft->frame_sid_nodata && !sba_dirac_stereo_flag ) - { - hStereoCng->first_SID = 0; - hStereoCng->first_SID_after_TD = 0; - } - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->NFFT / 2; i++ ) - { - DFT_L[2 * i] = 0.f; - DFT_L[2 * i + 1] = 0.f; - DFT_R[2 * i] = 0.f; - DFT_R[2 * i + 1] = 0.f; - } - - /*Nyquist Freq.*/ - if ( hStereoDft->band_limits[b] == hStereoDft->NFFT / 2 ) - { - DFT_L[1] = pDFT_DMX[1] + g * pDFT_DMX[1]; - DFT_R[1] = pDFT_DMX[1] - g * pDFT_DMX[1]; - DFT_L[1] *= INV_SQRT_2; - DFT_R[1] *= INV_SQRT_2; - } - else - { - DFT_L[1] = 0.f; - DFT_R[1] = 0.f; - } - } - else - { - pPredGain = NULL; /* to avoid compilation warnings */ - pSideGain = NULL; - - /* Dummy upmix-> mono binauralization */ - for ( i = 0; i < hStereoDft->NFFT; i++ ) - { - DFT_L[i] = ( pDFT_DMX[i] + pDFT_RES[i] ); - DFT_R[i] = ( pDFT_DMX[i] - pDFT_RES[i] ); - } - } - - /* Comfort Noise Addition */ - if ( st0->flag_cna ) - { - ptr_per = &hFdCngDec->smoothed_psd[hFdCngCom->startBand]; - - scale_fact0 = 0.0f; - if ( hFdCngDec->cna_rescale_fact > 0 ) - { - scale_fact0 = output_frame / 2 * sqrtf( hFdCngDec->cna_rescale_fact * 0.5f ); - } - - for ( b = 0; b < hFdCngDec->cna_nbands; b++ ) - { - /* calculate gamma factor reflecting inter-channel correlation and side gain (ILD) */ - coh = hFdCngDec->cna_cm[b]; - g = hFdCngDec->cna_g_state[b]; - - if ( coh < 0.9f ) - { - gamma = coh; - gamma = gamma / ( 1 - gamma ); - gamma = sqrtf( gamma + 1 - g * g ) - sqrtf( gamma ); - } - else - { - gamma = 0; - } - - for ( i = max( hFdCngDec->cna_band_limits[b], hFdCngCom->startBand / 2 ); i < min( hFdCngDec->cna_band_limits[b + 1], L_FRAME16k / 2 ); i++ ) - { - lev1 = *ptr_per++; - lev2 = *ptr_per++; - - if ( lev1 > 0 && lev2 > 0 && max( lev1, lev2 ) / min( lev1, lev2 ) > 1.2f ) - { - /* take the minimum of two adjacent frequency bins */ - cna_level = min( lev1, lev2 ); - } - else - { - /* take the average of two adjacent frequency bins */ - cna_level = 0.5f * ( lev1 + lev2 ); - } - - scale_fact = scale_fact0 * sqrtf( cna_level ); - - /* generate comfort noise from gaussian noise and add to the decoded DFT spectrum */ - N1 = scale_fact * rand_gauss_flt( &ftmp, cna_seed ); - N2 = scale_fact * rand_gauss_flt( &ftmp, cna_seed ); - DFT_L[2 * i] += ( 1 + g ) * N1 + gamma * N2; - DFT_R[2 * i] += ( 1 - g ) * N1 - gamma * N2; - - N1 = scale_fact * rand_gauss_flt( &ftmp, cna_seed ); - N2 = scale_fact * rand_gauss_flt( &ftmp, cna_seed ); - DFT_L[2 * i + 1] += ( 1 + g ) * N1 + gamma * N2; - DFT_R[2 * i + 1] += ( 1 - g ) * N1 - gamma * N2; - } - } - - /* update CNA re-scaling factor */ - hFdCngDec->cna_rescale_fact = 0.8f * hFdCngDec->cna_act_fact; - if ( !hFdCngDec->first_cna_noise_updated ) - { - hFdCngDec->cna_rescale_fact = 0; - } - } - - /* Update memories */ - hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - mvr2r( pDFT_DMX, hStereoDft->DFT_past_DMX[hStereoDft->past_DMX_pos], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - if ( pPredGain ) - { - stereo_dft_adapt_sf_delay( hStereoDft, pPredGain ); - } - - mvr2r( DFT_L, DFT[0] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); - mvr2r( DFT_R, DFT[1] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); - } - - if ( st0->bfi && !prev_bfi ) - { - idx_k0 = ( hStereoDft->past_DMX_pos + STEREO_DFT_PAST_MAX - 1 ) % STEREO_DFT_PAST_MAX; - idx_k1 = ( idx_k0 + 1 ) % STEREO_DFT_PAST_MAX; - /*dmx energy memory*/ - hStereoDft->past_dmx_nrg = stereo_dft_dmx_swb_nrg( hStereoDft->DFT_past_DMX[idx_k0], hStereoDft->DFT_past_DMX[idx_k1], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - } - - stereo_dft_compute_td_stefi_params( hStereoDft, samp_ratio ); - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_dec_res() - * - * Decode the residual signal - *-------------------------------------------------------------------------*/ - -void stereo_dft_dec_res( - CPE_DEC_HANDLE hCPE, /* i/o: decoder CPE handle */ - float res_buf[STEREO_DFT_N_8k], /* i : residual buffer */ - float *output /* o : output */ -) -{ - int16_t i; - float win[L_FRAME8k + STEREO_DFT_OVL_8k]; - float bpf_error_signal_8k[L_FRAME8k]; - int16_t prev_bfi; - float fac, step; - int16_t res_bpf_flag; - - prev_bfi = hCPE->hCoreCoder[0]->prev_old_bfi; /* The core decoding is already completed here and the prev_bfi has been updated for the next frame. - The prev_old_bfi still holds the prev_bfi for the current frame. */ - - /* flush memories when switching residual coding on */ - if ( hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1] == STEREO_DFT_RES_COD_OFF ) - { - set_zero( hCPE->hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); - set_zero( hCPE->input_mem[1], NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); - set_zero( hCPE->hStereoDft->hBpf->pst_old_syn, STEREO_DFT_NBPSF_PIT_MAX_8k ); - hCPE->hStereoDft->hBpf->pst_mem_deemp_err = 0.f; - } - - /*Inverse MDCT*/ - TCX_MDCT_Inverse_flt( res_buf, win, STEREO_DFT_OVL_8k, L_FRAME8k - STEREO_DFT_OVL_8k, STEREO_DFT_OVL_8k, IVAS_CPE_DFT ); - - if ( !prev_bfi ) - { - /*OLA*/ - /*overlapping parts*/ - for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) - { - win[i] = hCPE->hStereoDft->res_cod_mem[i] + win[i] * hCPE->hStereoDft->win_8k[i]; - hCPE->hStereoDft->res_cod_mem[i] = win[L_FRAME8k + i] * hCPE->hStereoDft->win_8k[STEREO_DFT_OVL_8k - 1 - i]; - } - } - else - { - /* For first good frame, ola memory contains extended ECU buffer -- need to crossfade instead of OLA */ - step = (float) ( 1.0f / STEREO_DFT_OVL_8k ); - fac = 0; - for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) - { - win[i] = ( 1.0f - fac * fac ) * hCPE->hStereoDft->res_cod_mem[i] + ( 1.0f - ( 1.0f - fac ) * ( 1.0f - fac ) ) * win[i] * hCPE->hStereoDft->win_8k[i]; - hCPE->hStereoDft->res_cod_mem[i] = win[L_FRAME8k + i] * hCPE->hStereoDft->win_8k[STEREO_DFT_OVL_8k - 1 - i]; - fac += step; - } - } - - mvr2r( win, output, L_FRAME8k ); - - if ( hCPE->hCoreCoder[0]->core == ACELP_CORE ) - { - /* bass post-filter */ - bass_psfilter( hCPE->hStereoDft->hBpf, hCPE->hCoreCoder[0]->Opt_AMR_WB, output, L_FRAME8k, hCPE->hCoreCoder[0]->old_pitch_buf + ( L_FRAME8k / STEREO_DFT_L_SUBFR_8k ), hCPE->hCoreCoder[0]->bpf_off, - hCPE->hCoreCoder[0]->stab_fac, &hCPE->hStereoDft->stab_fac_smooth_res, hCPE->hCoreCoder[0]->last_coder_type, bpf_error_signal_8k ); - - res_bpf_flag = res_bpf_adapt( hCPE->hStereoDft, bpf_error_signal_8k, res_buf ); - - if ( prev_bfi ) - { - /* Ramp up BPF contribution for the first good frame */ - step = (float) ( 1.0f / L_FRAME8k ); - fac = 0; - for ( i = 0; i < L_FRAME8k; i++ ) - { - bpf_error_signal_8k[i] *= fac; - fac += step; - } - } - - if ( res_bpf_flag ) - { - v_sub( output, bpf_error_signal_8k, output, L_FRAME8k ); - } - } - else if ( hCPE->hCoreCoder[0]->last_core == ACELP_CORE ) - { - set_zero( hCPE->hStereoDft->hBpf->pst_old_syn, STEREO_DFT_NBPSF_PIT_MAX_8k ); - hCPE->hStereoDft->hBpf->pst_mem_deemp_err = 0.f; - } - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_dec_read_BS() - * - * Read bitstream - *-------------------------------------------------------------------------*/ - -void stereo_dft_dec_read_BS( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int32_t element_brate, /* i : element bitrate */ - int32_t *total_brate, /* o : total bitrate */ - Decoder_State *st, /* i/o: decoder state structure */ - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ - const int16_t bwidth, /* i : bandwidth */ - const int16_t output_frame, /* i : output frame length */ - float res_buf[STEREO_DFT_N_8k], /* o : residual buffer */ - int16_t *nb_bits, /* o : number of bits read */ - float *coh, /* i/o: Coherence */ - const int16_t ivas_format /* i : ivas format */ -) -{ - int16_t b, N_div, nbands; - int16_t NFFT_inner; - int16_t k, k_offset; - int16_t I; - int16_t max_bits; - uint16_t bit_stream_side[800]; /*Max bits per frame for 30kbps*/ - RangeUniDecState range_uni_dec_state; - ECSQ_instance ecsq_inst; - - /* needed for provisorial reordering of indices */ - int16_t ind1[STEREO_DFT_BAND_MAX]; - int16_t n_bits; - int16_t nb, ind1_ipd[STEREO_DFT_BAND_MAX], ind1_pred[STEREO_DFT_BAND_MAX]; - int16_t sign_flag; - float sg_tmp[STEREO_DFT_BAND_MAX]; - float res_pred_gain_tmp[STEREO_DFT_BAND_MAX]; - int16_t itd_mode; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - k_offset = STEREO_DFT_OFFSET; - - if ( ivas_total_brate == IVAS_SID_5k2 ) - { - if ( ivas_format == MASA_FORMAT ) - { - hStereoDft->frame_nodata = 0; - hStereoDft->frame_sid_nodata = 1; - hStereoDft->frame_sid = 1; - *nb_bits = 0; - } - else - { - hStereoDft->frame_nodata = 0; - hStereoDft->frame_sid_nodata = 1; - hStereoDft->frame_sid = 1; - *nb_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - } - } - else if ( ivas_total_brate == FRAME_NO_DATA ) - { - hStereoDft->frame_nodata = 1; - hStereoDft->frame_sid_nodata = 1; - hStereoDft->frame_sid = 0; - *nb_bits = 0; - *total_brate = 0; - hStereoDft->itd[k = hStereoDft->prm_res[k_offset] - 1 + k_offset] = hStereoDft->itd_xfade_target; - hStereoDft->gipd[hStereoDft->prm_res[k_offset] - 1 + k_offset] = hStereoDft->ipd_xfade_target; - - return; - } - else - { - hStereoDft->frame_nodata = 0; - hStereoDft->frame_sid_nodata = 0; - hStereoDft->frame_sid = 0; - - st->total_brate = *nb_bits * FRAMES_PER_SEC; - } - - hStereoDft->reverb_flag = 0; - - /* reverse the bitstream */ - for ( b = 0; b < *nb_bits; b++ ) - { - bit_stream_side[b] = st->bit_stream[-b]; - } - - /* make sure the padding bits read ahead by the arithmetic coder (up to 16) or range coder (up to 32) have binary values */ - for ( ; b < *nb_bits + 32; b++ ) - { - bit_stream_side[b] = 0; - } - st->bit_stream = bit_stream_side; - - /*init*/ - max_bits = *nb_bits; - *nb_bits = 0; - N_div = STEREO_DFT_NBDIV; - - if ( ivas_total_brate > IVAS_SID_5k2 ) - { - mvr2r( hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX, sg_tmp, STEREO_DFT_BAND_MAX ); - mvr2r( hStereoDft->res_pred_gain + 2 * STEREO_DFT_BAND_MAX, res_pred_gain_tmp, STEREO_DFT_BAND_MAX ); - } - - /* attackPresent always set to 0 in SID frames */ - if ( hStereoDft->frame_sid ) - { - hStereoDft->attackPresent = 0; - } - else - { - hStereoDft->attackPresent = get_next_indice( st, 1 ); - ( *nb_bits )++; - } - - /* read res_cod_mode from bitstream */ - if ( bwidth == WB && hStereoDft->hConfig->ada_wb_res_cod_mode ) - { - hStereoDft->res_cod_mode[k_offset] = get_next_indice( st, 1 ); - ( *nb_bits )++; - } - - /* read number of bands in the bitstream - depends on the audio bandwidth and not to output_Fs */ - if ( hStereoDft->frame_sid ) - { - NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[bwidth] / L_FRAME48k; - } - else - { - NFFT_inner = STEREO_DFT32MS_N_MAX * inner_frame_tbl[st->bwidth] / L_FRAME48k; - } - - /* Use coarse band partition in inactive frames */ - if ( hStereoDft->frame_sid ) - { - hStereoDft->band_res[k_offset] = STEREO_DFT_BAND_RES_LOW; - hStereoDft->res_cod_mode[k_offset] = STEREO_DFT_RES_COD_OFF; - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], min( STEREO_DFT32MS_N_MAX, NFFT_inner ), DEC ); - - if ( hStereoDft->nbands > STEREO_DFT_COH_MAXBAND ) - { - hStereoDft->band_limits[STEREO_DFT_COH_MAXBAND] = hStereoDft->band_limits[hStereoDft->nbands]; - hStereoDft->nbands = STEREO_DFT_COH_MAXBAND; - } - } - else - { - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], NFFT_inner, DEC ); - } - - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; - hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * output_frame / (float) ( hStereoDft->NFFT ) ); - hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); - hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - - - /*Copy config. for all DFT frames*/ - set_s( hStereoDft->band_res + k_offset + 1, hStereoDft->band_res[k_offset], N_div - 1 ); - set_s( hStereoDft->prm_res + k_offset + 1, hStereoDft->prm_res[k_offset], N_div - 1 ); - set_s( hStereoDft->res_pred_mode + k_offset + 1, hStereoDft->res_pred_mode[k_offset], N_div - 1 ); - set_s( hStereoDft->res_cod_mode + k_offset + 1, hStereoDft->res_cod_mode[k_offset], N_div - 1 ); - - /*------------------------------------------------------------------* - * Read DFT stereo parameters - *-----------------------------------------------------------------*/ - - /* Sent from the latest to the oldest */ - for ( k = hStereoDft->prm_res[k_offset] - 1; k < N_div; k += hStereoDft->prm_res[k + k_offset] ) - { - /* reset parameters */ - set_zero( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); - hStereoDft->gipd[k + k_offset] = 0.f; - set_zero( hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); - - - if ( !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_5k2 ) ) - { - /*------------------------------------------------------------------* - * read Side gains - *-----------------------------------------------------------------*/ - - /* side gain */ - /* get coding type */ - /* Do not read and decode side gain if a NO_DATA frame */ - if ( !hStereoDft->frame_nodata ) - { - n_bits = 0; - nb = st->next_bit_pos; - n_bits = read_flag_EC_DFT( &st->bit_stream[nb], &hStereoDft->side_gain_flag_1 ); - nb += n_bits; - - if ( hStereoDft->side_gain_flag_1 == 0 ) - { - b = read_BS_adapt_GR_sg( st->bit_stream, nb, ind1, hStereoDft->nbands, &hStereoDft->side_gain_flag_2, dft_maps_sg ); - n_bits += b; - } - else - { - if ( hStereoDft->side_gain_flag_1 == 2 ) /* differential */ - { - b = read_BS_GR( st->bit_stream, nb, ind1, hStereoDft->nbands, &hStereoDft->side_gain_flag_2 ); - n_bits += b; - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - ind1[b] += hStereoDft->side_gain_index_previous[b]; - } - } - else - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - ind1[b] = get_value( &st->bit_stream[nb], STEREO_DFT_SIDEGAIN_NBITS ); - nb += STEREO_DFT_SIDEGAIN_NBITS; - n_bits += STEREO_DFT_SIDEGAIN_NBITS; - } - } - } - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hStereoDft->side_gain_index_previous[b] = ind1[b]; - - hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX] = ind1[b]; - } - - st->next_bit_pos += n_bits; - ( *nb_bits ) += n_bits; - } - - /*------------------------------------------------------------------* - * read ITDs - *-----------------------------------------------------------------*/ - - if ( !hStereoDft->frame_sid_nodata ) - { - itd_mode = get_next_indice( st, STEREO_DFT_ITD_MODE_NBITS ); - ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ - - hStereoDft->itd[k + k_offset] = 0.f; - if ( itd_mode ) - { - ( *nb_bits ) += read_itd( st, &I ); - stereo_dft_dequantize_itd( &I, hStereoDft->itd + k + k_offset, st->output_Fs ); - } - } - else if ( *nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - STEREO_DFT_ITD_MODE_NBITS - STEREO_DFT_SID_ITD_NBITS - 1 - SID_FORMAT_NBITS ) ) - { - itd_mode = get_next_indice( st, STEREO_DFT_ITD_MODE_NBITS ); - ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ - - hStereoDft->itd[k + k_offset] = 0.f; - if ( itd_mode ) - { - sign_flag = get_next_indice( st, 1 ); - I = get_next_indice( st, STEREO_DFT_SID_ITD_NBITS ); - ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; - I = I << STEREO_DFT_SID_ITD_FAC; - I += 256 * sign_flag; - stereo_dft_dequantize_itd( &I, hStereoDft->itd + k + k_offset, st->output_Fs ); - } - } - - /*------------------------------------------------------------------* - * read IPDs - *-----------------------------------------------------------------*/ - - n_bits = 0; - nb = st->next_bit_pos; - - if ( !hStereoDft->frame_sid_nodata ) - { - /* Active frame */ - hStereoDft->no_ipd_flag = st->bit_stream[nb]; - nb += 1; - n_bits += 1; - if ( hStereoDft->no_ipd_flag == 0 ) - { - ind1_ipd[0] = get_value( &st->bit_stream[nb], STEREO_DFT_GIPD_NBITS ); - nb += STEREO_DFT_GIPD_NBITS; - n_bits += STEREO_DFT_GIPD_NBITS; - stereo_dft_dequantize_ipd( &ind1_ipd[0], hStereoDft->gipd + ( k + k_offset ), 1, STEREO_DFT_GIPD_NBITS ); - } - } - else if ( *nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - STEREO_DFT_FLAG_BITS - STEREO_DFT_SID_GIPD_NBITS - SID_FORMAT_NBITS ) ) - { - /* SID frame, only read IPD only if enough bits left in bitstream */ - hStereoDft->no_ipd_flag = st->bit_stream[nb]; - nb += 1; - n_bits += 1; - if ( hStereoDft->no_ipd_flag == 0 ) - { - ind1_ipd[0] = get_value( &st->bit_stream[nb], STEREO_DFT_SID_GIPD_NBITS ); - nb += STEREO_DFT_SID_GIPD_NBITS; - n_bits += STEREO_DFT_SID_GIPD_NBITS; - stereo_dft_dequantize_ipd( &ind1_ipd[0], hStereoDft->gipd + ( k + k_offset ), 1, STEREO_DFT_SID_GIPD_NBITS ); - } - } - else - { - hStereoDft->no_ipd_flag = 1; - } - - st->next_bit_pos += n_bits; - ( *nb_bits ) += n_bits; - - /*------------------------------------------------------------------* - * read Residual parameters - *-----------------------------------------------------------------*/ - - /* Residual prediction */ /* Switch it off if ITD detected */ - n_bits = 0; - nb = st->next_bit_pos; - - /* Not used in inactive frames */ - if ( !hStereoDft->frame_sid_nodata ) - { - if ( hStereoDft->res_pred_mode[k + k_offset] && ( hStereoDft->attackPresent == 0 ) ) - { - nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); - - hStereoDft->reverb_flag = 0; - hStereoDft->nbands_respred = nbands; - - /* Read bit for adaptive SF (WB/SWB & FB) */ - if ( hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - hStereoDft->reverb_flag = get_next_indice( st, STEREO_DFT_REVERB_MODE_NBITS ); - ( *nb_bits ) += STEREO_DFT_REVERB_MODE_NBITS; - nb += STEREO_DFT_REVERB_MODE_NBITS; - if ( hStereoDft->reverb_flag ) - { - nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; - } - } - - /* get coding type */ - b = read_flag_EC_DFT( &st->bit_stream[nb], &hStereoDft->res_pred_flag_0 ); - nb += b; - n_bits += b; - - if ( hStereoDft->res_pred_flag_0 == 0 ) - { - b = read_BS_adapt_GR_rpg( st->bit_stream, nb, ind1_pred, hStereoDft->res_pred_band_min, nbands, &hStereoDft->res_pred_flag_1 ); - n_bits += b; - } - else - { - if ( hStereoDft->res_pred_flag_0 == 2 ) - { - b = read_BS_GR( st->bit_stream, nb, &ind1_pred[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, &hStereoDft->res_pred_flag_1 ); - - n_bits += b; - for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) - { - ind1_pred[b] += hStereoDft->res_pred_index_previous[b]; - } - } - else - { - for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) - { - ind1_pred[b] = get_value( &st->bit_stream[nb], STEREO_DFT_RES_GAINS_BITS ); - nb += STEREO_DFT_RES_GAINS_BITS; - n_bits += STEREO_DFT_RES_GAINS_BITS; - } - } - } - - for ( b = 0; b < hStereoDft->res_pred_band_min; b++ ) - { - I = 0; - stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - hStereoDft->res_pred_index_previous[b] = I; - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = 0; - } - - for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) - { - I = ind1_pred[b]; - stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - hStereoDft->res_pred_index_previous[b] = I; - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = I; - } - - for ( ; b < hStereoDft->nbands; b++ ) - { - I = 0; - stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - hStereoDft->res_pred_index_previous[b] = I; - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = 0; - } - } - else - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - I = 0; - stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - hStereoDft->res_pred_index_previous[b] = I; - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = I; - } - } - - st->next_bit_pos += n_bits; - ( *nb_bits ) += n_bits; - } - else - { - /* Dequantize sidegain if SID frame */ - if ( hStereoDft->frame_sid ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - I = 0; - stereo_dft_dequantize_res_gains( ind1 + b, &I, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - } - } - } - } - } - - if ( !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_5k2 ) ) - { - if ( hStereoDft->side_gain_flag_1 != 2 ) - { - hStereoDft->sg_mem_corrupt = 0; - } - } - - if ( ivas_total_brate > IVAS_SID_5k2 ) - { - hStereoDft->recovery_flg = stereo_dft_sg_recovery( hStereoDft ); - - if ( hStereoDft->recovery_flg ) - { - mvr2r( sg_tmp, hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); - mvr2r( res_pred_gain_tmp, hStereoDft->res_pred_gain + 2 * STEREO_DFT_BAND_MAX, STEREO_DFT_BAND_MAX ); - } - } - - /*----------------------------------------------------------------* - * Residual decoding: spectral lines - *----------------------------------------------------------------*/ - - /* Residual coding not used in inactive frames */ - if ( hStereoDft->res_cod_band_max > 0 && !hStereoDft->frame_sid_nodata ) - { - int16_t dec[STEREO_DFT_N_MAX_RES]; - - I = get_next_indice( st, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); - ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; - - - push_wmops( "residual_decode" ); - if ( I != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) - { - ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_dec_state ); - - rc_uni_dec_init( &range_uni_dec_state, bit_stream_side + *nb_bits, max_bits - *nb_bits ); - - hStereoDft->res_global_gain = ECSQ_dequantize_gain( I ); - - ecsq_inst.config_index = 2 * hStereoDft->res_cod_mode[k_offset] - 1; - - ECSQ_decode( &ecsq_inst, hStereoDft->res_cod_line_max, dec ); - - n_bits = rc_uni_dec_finish( &range_uni_dec_state ); - - set_zero( res_buf, STEREO_DFT_N_8k ); - ECSQ_dequantize_vector( dec, hStereoDft->res_global_gain, hStereoDft->res_cod_line_max, res_buf ); - } - else - { - set_s( dec, 0, hStereoDft->res_cod_line_max ); - hStereoDft->res_global_gain = 0.0f; - n_bits = 0; - set_zero( res_buf, STEREO_DFT_N_8k ); - } - - ( *nb_bits ) += n_bits; - pop_wmops(); - } - - if ( hStereoDft->frame_sid && !( ivas_format == MASA_FORMAT && ivas_total_brate <= IVAS_SID_5k2 ) ) - { - stereo_dft_dec_sid_coh( st, hStereoDft->nbands, coh, nb_bits ); - } - - if ( ivas_total_brate == IVAS_SID_5k2 && ivas_format != MASA_FORMAT ) - { - *nb_bits = (int16_t) ( ( element_brate - SID_2k40 ) / FRAMES_PER_SEC ); /* => hCPE->hCoreCoder[0]->total_brate = SID_2k40; */ - } - { - *total_brate = element_brate - ( *nb_bits * FRAMES_PER_SEC ); - } - - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_compute_td_stefi_params() - * - * - *-------------------------------------------------------------------------*/ - -static void stereo_dft_compute_td_stefi_params( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const float samp_ratio /* i : sampling ratio */ -) -{ - int16_t pdmx_ind; - float g2; - int16_t bin0; - int16_t band0; - int16_t b; - int16_t nbands; - int16_t bres; - float wsum; - float pred_gain_avg, pred_g; - float nrg_DMX, nrg_pred_DMX; - - pdmx_ind = hStereoDft->past_DMX_pos; - bres = hStereoDft->band_res[1]; - - if ( hStereoDft->core_hist[1] != ACELP_CORE || hStereoDft->wasTransient ) - { - hStereoDft->td_gain[0] = 0; - - return; - } - - bin0 = (int16_t) ( samp_ratio * hStereoDft->NFFT / 2 + .5 ); - bin0 = min( bin0, hStereoDft->band_limits[hStereoDft->nbands] ); - b = hStereoDft->nbands; - while ( hStereoDft->band_limits[b] > bin0 ) - { - b--; - } - band0 = b; - - /* calculate averages over high bands */ - pred_g = pred_gain_avg = 0; - nbands = 0; - wsum = 0; - for ( b = band0; b < hStereoDft->nbands; b++ ) - { - if ( min( hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 1, pdmx_ind )][b], hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 2, pdmx_ind )][b] ) < 0 ) - { - hStereoDft->td_gain[0] = 0; - return; - } - pred_g += ( hStereoDft->res_pred_gain[b + STEREO_DFT_BAND_MAX] + hStereoDft->res_pred_gain[b + 2 * STEREO_DFT_BAND_MAX] ) / 2 * dft_res_pred_weights[bres][b - band0]; - pred_gain_avg += ( hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 2, pdmx_ind )][b] + hStereoDft->past_res_pred_gain[STEFI_DELAY_IND( STEREO_DFT_TD_STEFI_SUBFR_DELAY + 1, pdmx_ind )][b] ) / 2 * dft_res_pred_weights[bres][b - band0]; - - nbands++; - wsum += dft_res_pred_weights[bres][b - band0]; -#ifdef DBG_TD_STEFI - printf( "frame: %d\tband: %-2d\tpred_gain1: %f\tpred_gain2: %f\tppg1: %f\tppg2: %f\n", frame, b, hStereoDft->res_pred_gain[b + STEREO_DFT_BAND_MAX], hStereoDft->res_pred_gain[b + 2 * STEREO_DFT_BAND_MAX], hStereoDft->past_res_pred_gain[STEREO_DFT_TD_STEFI_SUBFR_DELAY - 2][b], hStereoDft->past_res_pred_gain[d_short - 1][b] ); -#endif - } - - if ( nbands == 0 ) - { - /* apparently, there is nothing to do here */ - hStereoDft->td_gain[0] = 0; - return; - } - - pred_g /= wsum; - pred_gain_avg /= wsum; - - nrg_DMX = hStereoDft->hb_nrg[0]; - nrg_pred_DMX = hStereoDft->hb_nrg[1]; - - g2 = pred_g * sqrtf( ( 0.001f + nrg_DMX ) / ( 0.001f + nrg_pred_DMX ) ); - - hStereoDft->td_gain[0] = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); - -#ifdef DBG_TD_STEFI - printf( "frame: %d\tpred_gain: %f\tpred_gain_avg: %f\tg2_0: %f\tgain: %f\n", frame, pred_gain, pred_gain_avg, g2, hStereoDft->td_gain[0] ); - printf( "nrg_DMX: %f\tnrd_pred_DMX: %f\tnbands: %d\tbin0: %d\n", nrg_DMX, nrg_pred_DMX, hStereoDft->nbands, bin0 ); - /*printf( "td_gain: %f\n", hStereoDft->td_gain[0] );*/ -#endif - - return; -} - - -/*------------------------------------------------------------------------- - * stereo_dft_generate_res_pred() - * - * - *-------------------------------------------------------------------------*/ -void stereo_dft_generate_res_pred( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const float samp_ratio, /* i : sampling ratio */ - float *pDFT_DMX, /* i : downmix signal */ - float *DFT_PRED_RES, /* o : residual prediction signal */ - float *pPredGain, /* i : residual prediction gains */ - const int16_t k, /* i : subframe index */ - float *ap_filt_DMX, /* i : enhanced stereo filling signal */ - int16_t *stop, /* o : last FD stereo filling bin */ - const int16_t bfi /* i : BFI flag */ -) -{ - /* general variables */ - int16_t i, b; - int16_t begin, end; - int16_t bin0, band0; /* ESF->Stefi crossover bin/band */ - int16_t lb_stefi_start_band; - - /* variables for enhanced stereo filling */ - float norm_fac; - float alpha, gain_limit; - - /* variables for stereo filling */ - int16_t d_long, d_short, d_long_ind, d_short_ind; - float g_short, g_long; - float dmx_nrg, rev_nrg; - float past_dmx_nrg; - float pred_gain_avg; - float g2; - int16_t nbands_respred; - - push_wmops( "gen_respred" ); - - /* smoothing and limiting parameters */ - alpha = hStereoDft->wasTransient ? 0 : 0.2f; /* no smoothing after transients */ - gain_limit = 2; - - /* residual prediction only used up to 16 kHz (SWB) */ - nbands_respred = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); - - /* In ACELP mode the downmix signal is not available in bandwidth extension area. * - * Therefore, the downmix energy in the corresponding subbands is estimated. */ - bin0 = (int16_t) ( samp_ratio * hStereoDft->NFFT / 2 + .5 ); - bin0 = min( bin0, hStereoDft->band_limits[hStereoDft->nbands] ); - b = hStereoDft->nbands; - while ( hStereoDft->band_limits[b] >= bin0 ) - { - b--; - } - band0 = b; - - if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] < STEREO_DFT_RESPRED_ESF ) - { - /* no ESF signal available, use stereo filling over whole spectrum */ - lb_stefi_start_band = max( hStereoDft->res_pred_band_min, hStereoDft->res_cod_band_max ); - } - else - { - /* ESF signal available, use ESF in lowband, stereo filling in highband */ - lb_stefi_start_band = max( band0, hStereoDft->res_cod_band_max ); - } - - if ( bfi ) - { - lb_stefi_start_band = 0; - } - - /* lowband: use ESF if available, else use stereo filling */ - if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] == STEREO_DFT_RESPRED_ESF ) - { - /* ESF in lowband */ - /* main loop over core region*/ - for ( b = hStereoDft->res_cod_band_max; b <= band0; b++ ) - { - dmx_nrg = EPSILON; - rev_nrg = EPSILON; - - /* calculate band energies (low band only in case of ACELP) */ - for ( i = hStereoDft->band_limits[b]; i < min( hStereoDft->band_limits[b + 1], bin0 ); i++ ) - { - dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; - rev_nrg += ap_filt_DMX[2 * i] * ap_filt_DMX[2 * i] + ap_filt_DMX[2 * i + 1] * ap_filt_DMX[2 * i + 1]; - } - - /* smoothing */ - hStereoDft->smooth_res_nrg[b] = alpha * hStereoDft->smooth_res_nrg[b] + ( 1 - alpha ) * rev_nrg; - hStereoDft->smooth_dmx_nrg[b] = alpha * hStereoDft->smooth_dmx_nrg[b] + ( 1 - alpha ) * dmx_nrg; - - /* normalization factor */ - norm_fac = sqrtf( hStereoDft->smooth_dmx_nrg[b] / hStereoDft->smooth_res_nrg[b] ); - - /* gain compressor */ - norm_fac *= min( max( 0.8f, 1 / norm_fac ), 1.25f ); - - /* gain limiter */ - norm_fac = min( norm_fac, gain_limit ); - - for ( i = hStereoDft->band_limits[b]; i < min( hStereoDft->band_limits[b + 1], bin0 ); i++ ) - { - DFT_PRED_RES[2 * i] = norm_fac * pPredGain[b] * ap_filt_DMX[2 * i]; - DFT_PRED_RES[2 * i + 1] = norm_fac * pPredGain[b] * ap_filt_DMX[2 * i + 1]; - } - } - } - else if ( hStereoDft->res_pred_mode[k + STEREO_DFT_OFFSET] == STEREO_DFT_RESPRED_STEFI ) - { - /* stefi in lowband */ - set_zero( DFT_PRED_RES, 2 * hStereoDft->band_limits[lb_stefi_start_band] ); - - for ( b = lb_stefi_start_band; b <= band0; b++ ) - { - d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_STEFFI_DELAY_SHORT + b % 2; - d_long_ind = max( 4, (int16_t) ( ( STEREO_DFT_PAST_MAX + 4 - 1 ) * ( (float) b / ( hStereoDft->nbands - 1 ) ) + 0.5f ) ) - 4; - /* make sure d_short really corresponds to a shorter or equally long delay than d_long (e.g. not always the case for - * STEREO_DFT_STEFFI_DELAY_SHORT=3 and STEREO_DFT_STEFFI_DELAY_LONG=4)*/ - d_short_ind = max( d_short_ind, d_long_ind ); - - /* Even number of window sliding (assymmetric OLA) */ - d_short_ind = 2 * ( d_short_ind / 2 ); - d_long_ind = 2 * ( d_long_ind / 2 ); - - d_short = STEREO_DFT_PAST_MAX - d_short_ind; - d_long = STEREO_DFT_PAST_MAX - d_long_ind; - - d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - d_long_ind = ( d_long_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - - g_short = hStereoDft->stefi_short_gain; - g_long = hStereoDft->stefi_long_gain; - - /* change mixing ratio if long and short delay are the same */ - if ( d_short == d_long ) - { - g_short = 1; - g_long = 0; - } - - /* Avoid transient components */ - if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 && hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) - { - g_long = 0.0f; - g_short = 0.0f; - } - else if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 ) - { - g_long = 1.0f; - g_short = 0.0f; - } - else if ( hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) - { - g_long = 0.0f; - g_short = 1.0f; - } - - if ( max( g_short, g_long ) > 0 ) - { - past_dmx_nrg = EPSILON; - dmx_nrg = EPSILON; - for ( i = hStereoDft->band_limits[b]; i < min( bin0, hStereoDft->band_limits[b + 1] ); i++ ) - { - dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; - - DFT_PRED_RES[2 * i] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i] ); - DFT_PRED_RES[2 * i + 1] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i + 1] ); - - past_dmx_nrg += DFT_PRED_RES[2 * i] * DFT_PRED_RES[2 * i] + DFT_PRED_RES[2 * i + 1] * DFT_PRED_RES[2 * i + 1]; - } - if ( !bfi || b >= hStereoDft->res_cod_band_max ) - { - norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); - g2 = pPredGain[b] * norm_fac; - pred_gain_avg = g_short * hStereoDft->past_res_pred_gain[d_short_ind][b] + - g_long * hStereoDft->past_res_pred_gain[d_long_ind][b]; - - g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); - - for ( i = hStereoDft->band_limits[b]; i < min( bin0, hStereoDft->band_limits[b + 1] ); i++ ) - { - DFT_PRED_RES[2 * i] *= g2; - DFT_PRED_RES[2 * i + 1] *= g2; - } - } - } - else - { - set_zero( DFT_PRED_RES + 2 * hStereoDft->band_limits[b], 2 * ( min( bin0, hStereoDft->band_limits[b + 1] ) - hStereoDft->band_limits[b] ) ); - } - } - } - - if ( hStereoDft->band_limits[nbands_respred] > bin0 ) - { - /* apply stereo filling in ACELP BWE region */ - if ( hStereoDft->core_hist[0] == ACELP_CORE && hStereoDft->core_hist[STEREO_DFT_STEFFI_DELAY_SHORT / 2] == ACELP_CORE ) - { - /* ACELP -> ACELP: nothing to do */ - *stop = bin0; - } - else if ( hStereoDft->core_hist[STEREO_DFT_STEFFI_DELAY_SHORT / 2] == ACELP_CORE ) - { - /* ACELP -> TCX/HQ core transition */ - /* calculate high band energy only */ - dmx_nrg = EPSILON; - for ( i = bin0; i < hStereoDft->NFFT / 2; i++ ) - { - dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; - } - - hStereoDft->hb_nrg[0] += dmx_nrg * 2 / hStereoDft->NFFT; - *stop = bin0; - } - else if ( hStereoDft->core_hist[0] == ACELP_CORE ) - { - /* TCX/HQ core -> ACELP transition */ - /* apply short delay only and blend to long/short gain */ - dmx_nrg = hStereoDft->hb_nrg_subr[k]; - d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_TD_STEFI_SUBFR_DELAY; - - d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - - /* calculate high band energy of past dmx */ - past_dmx_nrg = EPSILON; - for ( i = bin0; i < min( hStereoDft->NFFT / 2, STEREO_DFT32MS_N_32k / 2 ); i++ ) - { - past_dmx_nrg += hStereoDft->DFT_past_DMX[d_short_ind][2 * i] * hStereoDft->DFT_past_DMX[d_short_ind][2 * i] + hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] * hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1]; - } - - for ( b = band0; b < nbands_respred; b++ ) - { - g_short = hStereoDft->past_res_pred_gain[d_short_ind][b] < 0 ? 0 : ( 1.f + hStereoDft->stefi_short_gain ) / 2; - - if ( g_short > 0 ) - { - norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); - g2 = pPredGain[b] * norm_fac; - pred_gain_avg = hStereoDft->past_res_pred_gain[d_short_ind][b] * g_short; - - g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); - for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) - { - DFT_PRED_RES[2 * i] = g2 * hStereoDft->DFT_past_DMX[d_short_ind][2 * i]; - DFT_PRED_RES[2 * i + 1] = g2 * hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1]; - } - } - else - { - begin = max( hStereoDft->band_limits[b], bin0 ); - end = min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); - set_zero( DFT_PRED_RES + 2 * begin, 2 * ( end - begin ) ); - } - } - } - else - { - for ( b = band0; b < nbands_respred; b++ ) - { - /* TCX/HQ core -> TCX/HQ core: business as usual */ - d_short_ind = STEREO_DFT_PAST_MAX - STEREO_DFT_STEFFI_DELAY_SHORT + b % 2; - d_long_ind = max( 4, (int16_t) ( ( STEREO_DFT_PAST_MAX + 4 - 1 ) * ( (float) b / ( hStereoDft->nbands - 1 ) ) + 0.5f ) ) - 4; - /* make sure d_short really corresponds to a shorter or equally long delay than d_long (e.g. not always the case for - * STEREO_DFT_STEFFI_DELAY_SHORT=3 and STEREO_DFT_STEFFI_DELAY_LONG=4)*/ - d_short_ind = max( d_short_ind, d_long_ind ); - - /* Even number of window sliding (assymmetric OLA) */ - d_short_ind = 2 * ( d_short_ind / 2 ); - d_long_ind = 2 * ( d_long_ind / 2 ); - - d_short = STEREO_DFT_PAST_MAX - d_short_ind; - d_long = STEREO_DFT_PAST_MAX - d_long_ind; - - d_short_ind = ( d_short_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - d_long_ind = ( d_long_ind + hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - - g_short = hStereoDft->stefi_short_gain; - g_long = hStereoDft->stefi_long_gain; - - /* change mixing ratio if long and short delay are the same */ - if ( d_short == d_long ) - { - g_short = 1; - g_long = 0; - } - - /* Avoid transient components */ - if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 && hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) - { - g_long = 0.0f; - g_short = 0.0f; - } - else if ( hStereoDft->past_res_pred_gain[d_short_ind][b] == -1 ) - { - g_long = 1.0f; - g_short = 0.0f; - } - else if ( hStereoDft->past_res_pred_gain[d_long_ind][b] == -1 ) - { - g_long = 0.0f; - g_short = 1.0f; - } - if ( hStereoDft->core_hist[d_short / 2] == ACELP_CORE ) - { - g_short = 0; - } - if ( hStereoDft->core_hist[d_long / 2] == ACELP_CORE ) - { - g_long = 0; - } - - if ( max( g_short, g_long ) > 0 ) - { - past_dmx_nrg = EPSILON; - dmx_nrg = EPSILON; - for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) - { - dmx_nrg += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; - - DFT_PRED_RES[2 * i] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i] ); - DFT_PRED_RES[2 * i + 1] = g_short * ( hStereoDft->DFT_past_DMX[d_short_ind][2 * i + 1] ) + g_long * ( hStereoDft->DFT_past_DMX[d_long_ind][2 * i + 1] ); - - past_dmx_nrg += DFT_PRED_RES[2 * i] * DFT_PRED_RES[2 * i] + DFT_PRED_RES[2 * i + 1] * DFT_PRED_RES[2 * i + 1]; - } - - norm_fac = sqrtf( ( 0.001f + dmx_nrg ) / ( 0.001f + past_dmx_nrg ) ); - g2 = pPredGain[b] * norm_fac; - pred_gain_avg = g_short * hStereoDft->past_res_pred_gain[d_short_ind][b] + g_long * hStereoDft->past_res_pred_gain[d_long_ind][b]; - - g2 = min( pred_gain_avg * STEREO_DFT_STEFFI_GAIN_AMP, pred_gain_avg * ( 1 - STEREO_DFT_STEFFI_GAIN_REST_AMT ) + g2 * STEREO_DFT_STEFFI_GAIN_REST_AMT ); - - for ( i = max( hStereoDft->band_limits[b], bin0 ); i < min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); i++ ) - { - DFT_PRED_RES[2 * i] *= g2; - DFT_PRED_RES[2 * i + 1] *= g2; - } - } - else - { - begin = max( hStereoDft->band_limits[b], bin0 ); - end = min( hStereoDft->band_limits[b + 1], STEREO_DFT32MS_N_32k / 2 ); - set_zero( DFT_PRED_RES + 2 * begin, 2 * ( end - begin ) ); - } - } - } - } - - /* update buffers */ - for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) - { - if ( hStereoDft->attackPresent || hStereoDft->wasTransient ) - { - hStereoDft->past_res_pred_gain[( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX][b] = -1; - } - else - { - hStereoDft->past_res_pred_gain[( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX][b] = pPredGain[b]; - } - } - - pop_wmops(); - return; -} -#endif /*--------------------------------------------------------------- * stereo_dft_dec_smooth_parameters() * * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dec_smooth_parameters( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder DFT stereo handle */ - const int16_t prev_sid_nodata, /* i : Previous SID/No data indicator */ - const int16_t active_frame_counter, /* i : Active frame counter */ - const int32_t element_brate /* i : Element bitrate */ -) -{ - int16_t k_offset, k, k2, b, N_div; - float *pIpd, *pInterpol; - float *pgIpd; - float *pSideGain; - float diff_ipd; - int16_t nbands; - int16_t max_res_pred_ind; - - N_div = STEREO_DFT_NBDIV; - k_offset = STEREO_DFT_OFFSET; - - if ( hStereoDft->frame_sid_nodata || prev_sid_nodata ) - { - k = 1; - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - *( hStereoDft->side_gain + ( ( k + k_offset ) - 1 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b ); - } - - if ( hStereoDft->frame_sid_nodata ) - { - /* set new xfade target if new itd received */ - if ( hStereoDft->ipd_xfade_counter < STEREO_DFT_ITD_CNG_XFADE ) - { - if ( ( hStereoDft->gipd[k + k_offset] - hStereoDft->ipd_xfade_prev ) > EVS_PI ) - { - hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset] - 2 * EVS_PI; - hStereoDft->ipd_xfade_step = ( hStereoDft->ipd_xfade_target - hStereoDft->ipd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->ipd_xfade_counter ); - } - else if ( ( hStereoDft->ipd_xfade_prev - hStereoDft->gipd[k + k_offset] ) > EVS_PI ) - { - hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset] + 2 * EVS_PI; - hStereoDft->ipd_xfade_step = ( hStereoDft->ipd_xfade_target - hStereoDft->ipd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->ipd_xfade_counter ); - } - else - { - hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset]; - hStereoDft->ipd_xfade_step = ( hStereoDft->ipd_xfade_target - hStereoDft->ipd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->ipd_xfade_counter ); - } - } - - /* xfade */ - if ( hStereoDft->ipd_xfade_prev != hStereoDft->ipd_xfade_target && hStereoDft->ipd_xfade_counter < STEREO_DFT_ITD_CNG_XFADE && hStereoDft->last_active_element_brate <= 24400 ) - { - hStereoDft->gipd[k + k_offset] = hStereoDft->ipd_xfade_prev + hStereoDft->ipd_xfade_step; - hStereoDft->ipd_xfade_prev = hStereoDft->gipd[k + k_offset]; - hStereoDft->ipd_xfade_counter++; - } - } - else - { - /* First active frame, "reset" everything if long enough active encoding, only triggered if STEREO_DFT_ITD_CNG_XFADE_RESET = -1 */ - if ( active_frame_counter > STEREO_DFT_ITD_CNG_XFADE_RESET ) - { - hStereoDft->ipd_xfade_target = hStereoDft->gipd[k + k_offset]; - hStereoDft->ipd_xfade_prev = hStereoDft->gipd[k + k_offset]; - hStereoDft->ipd_xfade_counter = 0; - } - } - - for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) - { - hStereoDft->gipd[( k + k_offset ) - k2] = hStereoDft->gipd[k + k_offset]; - } - - if ( hStereoDft->frame_sid_nodata ) - { - /* set new xfade target if new itd received */ - if ( hStereoDft->itd_xfade_counter < STEREO_DFT_ITD_CNG_XFADE ) - { - hStereoDft->itd_xfade_target = hStereoDft->itd[k + k_offset]; - hStereoDft->itd_xfade_step = ( hStereoDft->itd_xfade_target - hStereoDft->itd_xfade_prev ) / ( STEREO_DFT_ITD_CNG_XFADE - hStereoDft->itd_xfade_counter ); - } - - /* xfade */ - if ( hStereoDft->itd_xfade_prev != hStereoDft->itd_xfade_target && hStereoDft->itd_xfade_counter < STEREO_DFT_ITD_CNG_XFADE && hStereoDft->last_active_element_brate <= 24400 ) - { - hStereoDft->itd[k + k_offset] = hStereoDft->itd_xfade_prev + hStereoDft->itd_xfade_step; - hStereoDft->itd_xfade_prev = hStereoDft->itd[k + k_offset]; - hStereoDft->itd_xfade_counter++; - } - } - else - { - /* First active frame, "reset" everything if long enough active encoding, only triggered if STEREO_DFT_ITD_CNG_XFADE_RESET = -1 */ - if ( active_frame_counter > STEREO_DFT_ITD_CNG_XFADE_RESET ) - { - hStereoDft->itd_xfade_target = hStereoDft->itd[k + k_offset]; - hStereoDft->itd_xfade_prev = hStereoDft->itd[k + k_offset]; - hStereoDft->itd_xfade_counter = 0; - } - - hStereoDft->last_active_element_brate = element_brate; - } - for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) - { - hStereoDft->itd[( k + k_offset ) - k2] = hStereoDft->itd[k + k_offset]; - } - - return; - } - - /* Active frame, "reset" everything "reset" everything if long enough active encoding */ - if ( active_frame_counter > STEREO_DFT_ITD_CNG_XFADE_RESET ) - { - hStereoDft->itd_xfade_counter = 0; - hStereoDft->itd_xfade_target = hStereoDft->itd[STEREO_DFT_NBDIV - 1]; - hStereoDft->itd_xfade_prev = hStereoDft->itd[STEREO_DFT_NBDIV - 1]; - hStereoDft->ipd_xfade_counter = 0; - hStereoDft->ipd_xfade_target = hStereoDft->gipd[STEREO_DFT_NBDIV - 1]; - hStereoDft->ipd_xfade_prev = hStereoDft->gipd[STEREO_DFT_NBDIV - 1]; - } - - hStereoDft->last_active_element_brate = element_brate; - - for ( k = hStereoDft->prm_res[k_offset] - 1; k < N_div; k += hStereoDft->prm_res[k + k_offset] ) - { - max_res_pred_ind = 0; - - if ( hStereoDft->reverb_flag == 1 ) - { - nbands = min( 10, hStereoDft->nbands_respred ); - - /*Shift 2 last bands residual prediction gains for SWB/FB*/ - if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH ) - { - for ( b = hStereoDft->nbands_respred - 1; b >= nbands; b-- ) - { - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = - hStereoDft->res_gains_ind[1][b - STEREO_DFT_RES_PRED_BAND_MIN_RED + hStereoDft->res_pred_band_min + STEREO_DFT_BAND_MAX]; - hStereoDft->res_gains_ind[1][b - STEREO_DFT_RES_PRED_BAND_MIN_RED + hStereoDft->res_pred_band_min + STEREO_DFT_BAND_MAX] = 0; - } - } - - /* Get maximal index */ - for ( b = hStereoDft->res_pred_band_min; b < ( nbands - STEREO_DFT_RES_PRED_BAND_MIN_CONST ); b++ ) - { - if ( max_res_pred_ind < hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] ) - { - max_res_pred_ind = (int16_t) hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - } - - /* predictive values */ - for ( ; b < nbands; b++ ) - { - assert( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] == 0 ); - hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] = max_res_pred_ind; - } - } - - for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->res_cod_band_max; b++ ) - { - float tmp; - int16_t tmps1, tmps2; - - hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; - /*stereo_dft_dequantize_res_gains_f(&hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b+STEREO_DFT_BAND_MAX],hStereoDft->side_gain+(k+k_offset)*STEREO_DFT_BAND_MAX+b, hStereoDft->res_pred_gain+(k+k_offset)*STEREO_DFT_BAND_MAX+b, 1);*/ - tmps1 = (int16_t) ( hStereoDft->res_gains_ind[0][b] ); - tmps2 = (int16_t) ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] ); - stereo_dft_dequantize_res_gains( &tmps1, &tmps2, hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - - if ( hStereoDft->attackPresent ) - { - hStereoDft->res_gains_ind[1][b] = 0.8f * hStereoDft->res_gains_ind[1][b]; - } - else if ( hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) - { - hStereoDft->res_gains_ind[1][b] = 0.6f * hStereoDft->res_gains_ind[1][b] + 0.4f * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - else - { - hStereoDft->res_gains_ind[1][b] = dft_alpha_s2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - - stereo_dft_dequantize_res_gains_f( &hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b], &tmp, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - } - - /* Smoothing of prediction gains between ftrames */ - for ( ; b < hStereoDft->nbands; b++ ) - { - if ( hStereoDft->attackPresent ) - { - hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; - hStereoDft->res_gains_ind[1][b] = 0.8f * hStereoDft->res_gains_ind[1][b]; - } - else if ( hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) - { - hStereoDft->res_gains_ind[0][b] = hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; - - if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) - { - hStereoDft->res_gains_ind[1][b] = dft_alpha_w_b2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_w_b2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - else - { - hStereoDft->res_gains_ind[1][b] = dft_alpha_w[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_w[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - } - else - { - if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) - { - hStereoDft->res_gains_ind[0][b] = dft_alpha_s_b2[b] * hStereoDft->res_gains_ind[0][b] + ( 1 - dft_alpha_s_b2[b] ) * hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; - hStereoDft->res_gains_ind[1][b] = dft_alpha_s2_b2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2_b2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - else - { - hStereoDft->res_gains_ind[0][b] = dft_alpha_s[b] * hStereoDft->res_gains_ind[0][b] + ( 1 - dft_alpha_s[b] ) * hStereoDft->res_gains_ind[0][b + STEREO_DFT_BAND_MAX]; - hStereoDft->res_gains_ind[1][b] = dft_alpha_s2[b] * hStereoDft->res_gains_ind[1][b] + ( 1 - dft_alpha_s2[b] ) * hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX]; - } - } - - if ( !hStereoDft->recovery_flg ) - { - stereo_dft_dequantize_res_gains_f( &hStereoDft->res_gains_ind[0][b], &hStereoDft->res_gains_ind[1][b], hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b, 1 ); - } - } - - /* Smoothing of IPDs*/ - pgIpd = hStereoDft->gipd + ( k + k_offset ); - diff_ipd = pgIpd[0] - pgIpd[-hStereoDft->prm_res[k + k_offset]]; - if ( diff_ipd < -EVS_PI ) - { - pgIpd[0] += PI2; - } - else if ( diff_ipd > EVS_PI ) - { - pgIpd[0] -= PI2; - } - - if ( !hStereoDft->attackPresent ) - { - if ( hStereoDft->wasTransient ) - { - pgIpd[0] = 0.8f * pgIpd[0] + 0.2f * pgIpd[-hStereoDft->prm_res[k + k_offset]]; - } - else - { - pgIpd[0] = 0.5f * pgIpd[0] + 0.5f * pgIpd[-hStereoDft->prm_res[k + k_offset]]; - } - } - - - if ( !hStereoDft->attackPresent ) - { - pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; - for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) - { - pSideGain[b] = dft_res_cod_alpha[b] * pSideGain[b] + ( 1 - dft_res_cod_alpha[b] ) * pSideGain[b - hStereoDft->prm_res[k + k_offset] * STEREO_DFT_BAND_MAX]; - } - } - - /*Interpolation between DFT slots*/ - for ( k2 = 1; k2 < hStereoDft->prm_res[k + k_offset]; k2++ ) - { - pInterpol = hStereoDft->gipd + ( ( k + k_offset ) - k2 ); - pIpd = hStereoDft->gipd + ( k + k_offset ); - if ( hStereoDft->attackPresent ) - { - *( pInterpol ) = *( pIpd ); - } - else - { - *( pInterpol ) = *( hStereoDft->gipd + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) ); - } - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - *( hStereoDft->res_pred_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->res_pred_gain + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) * STEREO_DFT_BAND_MAX + b ); - - if ( b < hStereoDft->res_cod_band_max || hStereoDft->attackPresent || hStereoDft->trans || ( hStereoDft->res_pred_mode[k] && ( hStereoDft->res_gains_ind[1][b + STEREO_DFT_BAND_MAX] < 2.f ) ) ) - { - *( hStereoDft->side_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX + b ); - } - else - { - *( hStereoDft->side_gain + ( ( k + k_offset ) - k2 ) * STEREO_DFT_BAND_MAX + b ) = *( hStereoDft->side_gain + ( k + k_offset - hStereoDft->prm_res[k + k_offset] ) * STEREO_DFT_BAND_MAX + b ); - } - } - - hStereoDft->itd[( k + k_offset ) - k2] = hStereoDft->itd[k + k_offset]; - } /*end of interpolation*/ - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------- - * stereo_dft_adapt_sf_delay() - * - * - * ---------------------------------------------------------------*/ - -static void stereo_dft_adapt_sf_delay( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, - float *pPredGain ) -{ - float var_mean_ratio; - float new_variation; - float target_delay; - float max_pg, sum_pg, alpha_up, alpha_down; - int16_t b; - - max_pg = 0.0f; - sum_pg = 0.0f; - - /* find sum and maximum of prediction gains */ - for ( b = hStereoDft->res_pred_band_min; b < hStereoDft->nbands; b++ ) - { - if ( pPredGain[b] > max_pg ) - { - max_pg = pPredGain[b]; - } - sum_pg += pPredGain[b]; - } - - if ( sum_pg > 0.0f ) - { - /* Calculate mean of the prediction gain */ - hStereoDft->lt_pred_gain = STEREO_DFT_LT_PREDGAIN_UPD * sum_pg + ( 1.0f - STEREO_DFT_LT_PREDGAIN_UPD ) * hStereoDft->lt_pred_gain; - - /* Calculate the variation of the prediction gain */ - new_variation = fabsf( sum_pg - hStereoDft->lt_pred_gain ); - hStereoDft->lt_pred_gain_variation = STEREO_DFT_VR_PREDGAIN_UPD * new_variation + ( 1.0f - STEREO_DFT_VR_PREDGAIN_UPD ) * hStereoDft->lt_pred_gain_variation; - } - - /* Calculate ratio of variation and mean of prediction gain */ - var_mean_ratio = STEREO_DFT_RES_RATIO_LIMIT; - if ( hStereoDft->lt_pred_gain > 0.0f ) - { - var_mean_ratio = min( 1.5f * STEREO_DFT_RES_RATIO_LIMIT, hStereoDft->lt_pred_gain_variation / hStereoDft->lt_pred_gain ); - } - - if ( max_pg > STEREO_DFT_STEFFI_PG_THRESHOLD ) - { - /* slow upwards */ - alpha_up = STEREO_DFT_STEFFI_RATIO_UP_HIGH; - alpha_down = STEREO_DFT_STEFFI_RATIO_DOWN_HIGH; - } - else - { - /* slow downwards */ - alpha_up = STEREO_DFT_STEFFI_RATIO_UP_LOW; - alpha_down = STEREO_DFT_STEFFI_RATIO_DOWN_LOW; - } - - if ( var_mean_ratio > hStereoDft->lt_var_mean_ratio ) - { - hStereoDft->lt_var_mean_ratio = alpha_up * var_mean_ratio + ( 1.0f - alpha_up ) * hStereoDft->lt_var_mean_ratio; - } - else - { - hStereoDft->lt_var_mean_ratio = alpha_down * var_mean_ratio + ( 1.0f - alpha_down ) * hStereoDft->lt_var_mean_ratio; - } - - /* Calculate a target delay for the stereo filling. Set the stereo filling delay lower when the prediction gain - variation is relatively high compared to the mean */ - if ( hStereoDft->lt_var_mean_ratio >= STEREO_DFT_RES_RATIO_LIMIT ) - { - target_delay = STEREO_DFT_STEFFI_DELAY_SHORT; - } - else - { - target_delay = min( STEREO_DFT_STEFFI_DELAY_LONG, STEREO_DFT_STEFFI_DELAY_SHORT + ( STEREO_DFT_STEFFI_DELAY_OFFSET + STEREO_DFT_STEFFI_DELAY_LONG - STEREO_DFT_STEFFI_DELAY_SHORT ) * ( 1.0f - hStereoDft->lt_var_mean_ratio / STEREO_DFT_RES_RATIO_LIMIT ) ); - } - - /* Adapt the stereo filling delay by interpolating between two delay taps, one at the shortest delay and one at the longest delay */ - hStereoDft->stefi_short_gain = ( STEREO_DFT_STEFFI_DELAY_LONG - target_delay ) / ( STEREO_DFT_STEFFI_DELAY_LONG - STEREO_DFT_STEFFI_DELAY_SHORT ); - hStereoDft->stefi_long_gain = sqrtf( 1.0f - hStereoDft->stefi_short_gain * hStereoDft->stefi_short_gain ); - - - return; -} -#endif diff --git a/lib_dec/ivas_stereo_dft_dec_dmx.c b/lib_dec/ivas_stereo_dft_dec_dmx.c index 2613f09d0..64345f932 100644 --- a/lib_dec/ivas_stereo_dft_dec_dmx.c +++ b/lib_dec/ivas_stereo_dft_dec_dmx.c @@ -42,10 +42,8 @@ #include "ivas_rom_dec.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*------------------------------------------------------------------------- @@ -54,20 +52,6 @@ * Reset DFT stereo mono output memories *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_dmx_out_reset( - STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx /* i/o: DFT stereo DMX decoder */ -) -{ - hStereoDftDmx->targetGain = 1.0f; - hStereoDftDmx->prevTargetGain = 1.0f; - - set_zero( hStereoDftDmx->memOutHB, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); - set_zero( hStereoDftDmx->memTransitionHB, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); - - return; -} -#else void stereo_dft_dmx_out_reset_fx( STEREO_DFT_DMX_DATA_HANDLE hStereoDftDmx /* i/o: DFT stereo DMX decoder */ ) @@ -82,7 +66,6 @@ void stereo_dft_dmx_out_reset_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -92,7 +75,6 @@ void stereo_dft_dmx_out_reset_fx( * to active dmx in residual coding region *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_unify_dmx_fx( STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ Decoder_State *st0, /* i/o: decoder state structure */ @@ -394,170 +376,6 @@ void stereo_dft_unify_dmx_fx( return; } -#else -void stereo_dft_unify_dmx( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: decoder stereo handle */ - Decoder_State *st0, /* i/o: decoder state structure */ - float DFT[CPE_CHANNELS][STEREO_DFT_BUF_MAX], /* i/o: DFT buffers */ - float *input_mem, /* i/o: mem of buffer DFT analysis */ - const int16_t prev_sid_nodata /* i : Previous SID/No data indicator */ -) -{ - int16_t i, k, b, N_div; - float DFT_L[STEREO_DFT32MS_N_MAX]; - float DFT_R[STEREO_DFT32MS_N_MAX]; - float *pDFT_DMX; - float *pDFT_RES; - float g, tmp; - float *pSideGain; - int16_t k_offset; - - /* Variables for stereo residual PLC */ - float DFT_PRED_RES[STEREO_DFT32MS_N_32k]; - float samp_ratio; - int16_t prev_bfi; - float dmx_nrg; - float *pPredGain; - int16_t stop; - int16_t output_frame; - int16_t plocs[STEREO_DFT_RES_N_PEAKS_MAX]; - int16_t num_plocs; - float plocsi[STEREO_DFT_RES_N_PEAKS_MAX]; - - output_frame = (int16_t) ( st0->output_Fs / FRAMES_PER_SEC ); - samp_ratio = (float) st0->sr_core / (float) st0->output_Fs; - prev_bfi = st0->prev_old_bfi; - - /* Initialization */ - k_offset = 1; - N_div = STEREO_DFT_NBDIV; - - dmx_nrg = 0.0f; - /* make sure number of bands corresponds to output bwidth in case it is lower than parameter bwidth */ - if ( output_frame < inner_frame_tbl[st0->bwidth] ) - { - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], hStereoDft->NFFT, DEC ); - } - if ( prev_bfi ) - { - dmx_nrg = stereo_dft_dmx_swb_nrg( DFT[0], DFT[0] + STEREO_DFT32MS_N_MAX, min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - } - - /* Analyze nature of current frame */ - hStereoDft->trans = ( ( ( st0->clas_dec == ONSET ) || ( st0->clas_dec == SIN_ONSET ) || ( st0->clas_dec == UNVOICED_CLAS ) || ( st0->clas_dec == UNVOICED_TRANSITION ) ) || ( st0->stab_fac <= 0.25f ) ) || - ( st0->core == TCX_20_CORE && ( ( st0->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) || ( st0->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP ) ) ) || ( st0->core == TCX_10_CORE ); - - /* Smoothing for the current frame */ - stereo_dft_dec_smooth_parameters( hStereoDft, prev_sid_nodata, st0->hFdCngDec->hFdCngCom->active_frame_counter, st0->element_brate ); - - for ( k = 0; k < N_div; k++ ) - { - pDFT_DMX = DFT[0] + k * STEREO_DFT32MS_N_MAX; - pDFT_RES = DFT[1] + k * STEREO_DFT32MS_N_MAX; - - assert( hStereoDft->hConfig->dmx_active ); - /*Apply Stereo*/ - g = 1.f; - - /* since delay is just 3.125ms, the parameters received are used for the second window */ - pSideGain = hStereoDft->side_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; - - - /* Stereo residual PLC */ - if ( hStereoDft->res_cod_band_max > 0 ) - { - if ( !st0->bfi ) - { - if ( k == 1 ) - { - mvr2r( pDFT_RES, hStereoDft->res_mem, 2 * hStereoDft->band_limits[hStereoDft->res_cod_band_max] ); - hStereoDft->time_offs = 0; - } - } - else - { - hStereoDft->nbands = hStereoDft->res_cod_band_max; /* Limit nbands since residual PLC only needs the low frequency range of the stereo filling */ - pPredGain = hStereoDft->res_pred_gain + ( k + k_offset ) * STEREO_DFT_BAND_MAX; - hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + STEREO_DFT_PAST_MAX - 1 ) % STEREO_DFT_PAST_MAX; - stereo_dft_generate_res_pred( hStereoDft, samp_ratio, pDFT_DMX, DFT_PRED_RES, pPredGain, k, DFT[1] + k * STEREO_DFT32MS_N_MAX, &stop, st0->bfi ); - stereo_dft_res_ecu( hStereoDft, pDFT_RES, DFT_PRED_RES, k, output_frame, prev_bfi, dmx_nrg, &num_plocs, plocs, plocsi, input_mem ); - } - } - - - /* Apply active DMX */ - DFT_L[0] = pDFT_DMX[0]; - DFT_R[0] = pDFT_DMX[0]; - - /* upmix residual part */ - for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) - { - g = pSideGain[b]; - - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - tmp = g * pDFT_DMX[2 * i] + pDFT_RES[2 * i]; - - DFT_L[2 * i] = pDFT_DMX[2 * i] + tmp; - DFT_R[2 * i] = pDFT_DMX[2 * i] - tmp; - - tmp = g * pDFT_DMX[2 * i + 1] + pDFT_RES[2 * i + 1]; - - DFT_L[2 * i + 1] = pDFT_DMX[2 * i + 1] + tmp; - DFT_R[2 * i + 1] = pDFT_DMX[2 * i + 1] - tmp; - } - } - - /* downmix residual part with active downmix */ - for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) - { - int16_t j; - float sum_nrg_L = EPSILON, sum_nrg_R = EPSILON, dot_prod_real = EPSILON, dot_prod_img = EPSILON; - float sum_nrg_Mid, sum_abs, dot_prod_abs; - float wR, wL; - - for ( j = hStereoDft->band_limits[b]; j < hStereoDft->band_limits[b + 1]; j++ ) - { - sum_nrg_L += DFT_L[2 * j] * DFT_L[2 * j] + DFT_L[2 * j + 1] * DFT_L[2 * j + 1]; - sum_nrg_R += DFT_R[2 * j] * DFT_R[2 * j] + DFT_R[2 * j + 1] * DFT_R[2 * j + 1]; - dot_prod_real += DFT_L[2 * j] * DFT_R[2 * j] + DFT_L[2 * j + 1] * DFT_R[2 * j + 1]; - dot_prod_img += DFT_L[2 * j + 1] * DFT_R[2 * j] - DFT_L[2 * j] * DFT_R[2 * j + 1]; - } - sum_nrg_Mid = max( 0.f, sum_nrg_L + sum_nrg_R + 2.f * dot_prod_real ); - sum_abs = sqrtf( sum_nrg_L ) + sqrtf( sum_nrg_R ) + EPSILON; - dot_prod_abs = sqrtf( dot_prod_real * dot_prod_real + dot_prod_img * dot_prod_img ); - wR = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; - wL = wR + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - /*DMX Mapping*/ - pDFT_DMX[2 * i] = ( wL * DFT_L[2 * i] + wR * DFT_R[2 * i] ) * INV_SQRT_2; - pDFT_DMX[2 * i + 1] = ( wL * DFT_L[2 * i + 1] + wR * DFT_R[2 * i + 1] ) * INV_SQRT_2; - } - } - - mvr2r( pDFT_DMX, DFT[0] + k * STEREO_DFT32MS_N_MAX, hStereoDft->NFFT ); - - /* Update DFT_past_DMX, needed for stereo filling used by stereo residual PLC */ - hStereoDft->past_DMX_pos = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - mvr2r( pDFT_DMX, hStereoDft->DFT_past_DMX[hStereoDft->past_DMX_pos], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - - if ( st0->bfi && !prev_bfi ) - { - int16_t idx_k0, idx_k1; - idx_k0 = ( hStereoDft->past_DMX_pos + 1 ) % STEREO_DFT_PAST_MAX; - idx_k1 = ( idx_k0 + 1 ) % STEREO_DFT_PAST_MAX; - - /*dmx energy memory*/ - hStereoDft->past_dmx_nrg = stereo_dft_dmx_swb_nrg( hStereoDft->DFT_past_DMX[idx_k0], hStereoDft->DFT_past_DMX[idx_k1], min( hStereoDft->NFFT, STEREO_DFT32MS_N_32k ) ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -566,104 +384,6 @@ void stereo_dft_unify_dmx( * add ACELP HB for DFT Stereo mono output with residual coding *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void add_HB_to_mono_dmx( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float output[L_FRAME48k], /* i/o: output synthesis */ - float outputHB[L_FRAME48k], /* i : HB synthesis */ - const int16_t last_core, /* i : last core, primary channel */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t i, j, decoderDelay, icbweOLASize, dftOvlLen, memOffset; - float temp[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - - float winSlope; - float alpha; - const float *win_dft; - int32_t output_Fs; - float *memOutHB, *memTransitionHB; - - output_Fs = hCPE->hCoreCoder[0]->output_Fs; - memOutHB = hCPE->hStereoDftDmx->memOutHB; - memTransitionHB = hCPE->hStereoDftDmx->memTransitionHB; - - memOffset = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); - - if ( hCPE->hCoreCoder[0]->core == ACELP_CORE && hCPE->hCoreCoder[0]->extl_brate > 0 ) - { - /* Resampled LB and HB offset */ - mvr2r( outputHB, temp + memOffset, output_frame - memOffset ); - - decoderDelay = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); - - if ( last_core != ACELP_CORE ) - { - /* hb_synth of mid band is faded out in the 1.25 ms prior to DFT analysis and the icbwe is faded in time domain */ - icbweOLASize = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); - - for ( i = 0; i < decoderDelay; i++ ) - { - temp[i] = 0; - } - - assert( icbweOLASize > 0 ); - winSlope = 1.0f / icbweOLASize; - alpha = winSlope; - for ( ; i < decoderDelay + icbweOLASize; i++ ) - { - temp[i] *= alpha; - alpha += winSlope; - } - } - else - { - mvr2r( memOutHB, temp, memOffset ); - } - - v_add( temp, output, output, output_frame ); - - mvr2r( outputHB + output_frame - memOffset, memOutHB, memOffset ); - - win_dft = hCPE->hStereoDft->win32ms; - dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; - - /* Preparing buffers in anticipation of an ACELP to TCX switch */ - j = 0; - for ( i = 0; i < memOffset; i++ ) - { - memTransitionHB[i] = memOutHB[i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - j++; - } - - for ( i = 0; j < dftOvlLen; i++ ) - { - memTransitionHB[memOffset + i] = outputHB[output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - j++; - } - } - else - { - if ( last_core == ACELP_CORE ) - { - /* This is generated in the ACELP frame and windowed. This process is akin to GenTransition for IC-BWE */ - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - v_add( output, outputHB, output, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - else - { - v_add( output, memTransitionHB, output, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - - set_f( memOutHB, 0, memOffset ); - set_f( memTransitionHB, 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - } - - return; -} -#else void add_HB_to_mono_dmx_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 output[L_FRAME48k], /* i/o: output synthesis Qx*/ @@ -789,4 +509,3 @@ void add_HB_to_mono_dmx_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_dft_dec_fx.c b/lib_dec/ivas_stereo_dft_dec_fx.c index efdd353a0..11185330c 100644 --- a/lib_dec/ivas_stereo_dft_dec_fx.c +++ b/lib_dec/ivas_stereo_dft_dec_fx.c @@ -46,17 +46,13 @@ #include "ivas_rom_com_fx.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "basop_util.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif -#ifdef IVAS_FLOAT_FIXED - /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ @@ -4041,5 +4037,3 @@ void stereo_dft_dec_read_BS_fx( } return; } - -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_stereo_dft_plc.c b/lib_dec/ivas_stereo_dft_plc.c index 945d8d109..3988b275a 100644 --- a/lib_dec/ivas_stereo_dft_plc.c +++ b/lib_dec/ivas_stereo_dft_plc.c @@ -38,349 +38,3 @@ #include "ivas_prot.h" #include "math.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------- - * Local constants - * ---------------------------------------------------------------*/ - -#define ZP8k 15 /* zero padding in 8kHz DFT analysis */ -#define OFFSET8k 55 /* offset in 8 kHz */ -#define STEREO_DFT_PLC_STEP21 ( L_FRAME8k - OFFSET8k ) /* Step from subframe 2 in frame n to subframe 1 in frame n+1 */ -#define STEREO_DFT_PLC_PH_C ( 1.0f / 3.0329f ) /* Phase estimation constant, for estimating phase of fractional frequency */ - - -/*--------------------------------------------------------------- - * stereo_dft_res_ecu() - * - * Error concealment of DFT Stereo residual, including memory - * updates of DFT analysis memory and IMDCT OLA - * ---------------------------------------------------------------*/ - -void stereo_dft_res_ecu( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ - float *pDFT_RES, /* i/o: residual signal */ - float *const DFT_PRED_RES, /* i/o: residual prediction signal */ - const int16_t k, /* i : Subframe index */ - const int16_t output_frame, /* i : Output frame length */ - const int16_t prev_bfi, /* i : Previous BFI */ - const float dmx_nrg, /* i : Down-mix energy */ - int16_t *num_plocs, /* i/o: Number of peak locations */ - int16_t *plocs, /* i/o: Peak locations (bin) */ - float *plocsi, /* i/o: Peak locations (fractional) */ - float *input_mem /* o : Residual DFT buffer input mem */ -) -{ - float res_buf[L_FRAME8k]; - int16_t i; - int16_t L_res; - float step; - float fac; - float trigo_dec[STEREO_DFT32MS_N_8k / 2 + 1]; - int16_t trigo_step; - - set_zero( pDFT_RES, L_FRAME8k ); - - L_res = hStereoDft->band_limits[hStereoDft->res_cod_band_max]; - - stereo_dft_res_subst_spec( hStereoDft, pDFT_RES, DFT_PRED_RES, hStereoDft->time_offs, L_res, L_FRAME8k, k, num_plocs, plocs, plocsi, k == 0 ); - - fac = (float) ( L_FRAME8k ) / (float) ( hStereoDft->NFFT ); - - if ( hStereoDft->core_hist[0] == ACELP_CORE ) - { - fac *= 0.25f; - } - - trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP * STEREO_DFT_TRIGO_DEC_STEP; - for ( i = 0; i < STEREO_DFT32MS_N_8k / 4; i++ ) - { - trigo_dec[i] = hStereoDft->dft_trigo_8k[i * trigo_step]; - trigo_dec[STEREO_DFT32MS_N_8k / 2 - i] = hStereoDft->dft_trigo_8k[i * trigo_step]; - } - trigo_dec[STEREO_DFT32MS_N_8k / 4] = hStereoDft->dft_trigo_8k[STEREO_DFT32MS_N_8k / 4 * trigo_step]; - - /* estimation of res_cod_mem (ola part in imdct residual signal) and input_mem (memory for buffer in DFT analysis)*/ - if ( k == 0 ) - { - mvr2r( pDFT_RES, res_buf, L_FRAME8k ); - stereo_dft_res_subst_spec( hStereoDft, res_buf, DFT_PRED_RES, hStereoDft->time_offs + output_frame, L_res, L_FRAME8k, k, num_plocs, plocs, plocsi, FALSE ); - - rfft( res_buf, trigo_dec, L_FRAME8k, +1 ); - - v_multc( res_buf, fac, res_buf, L_FRAME8k ); - mvr2r( res_buf + ( OFFSET8k - ZP8k ), hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); - - mvr2r( res_buf + ZP8k, input_mem, NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) ); /* Store memory for cross-fade to next frame, in case of good frame */ - } - else - { - mvr2r( pDFT_RES, res_buf, L_FRAME8k ); - - rfft( res_buf, trigo_dec, L_FRAME8k, +1 ); - - v_multc( res_buf, fac, res_buf, L_FRAME8k ); - - /* Cross-fade memory */ - fac = 0; - step = 1.0f / NS2SA( 8000, STEREO_DFT32MS_OVL_NS ); - for ( i = 0; i < NS2SA( 8000, STEREO_DFT32MS_OVL_NS ); i++ ) - { - input_mem[i] = ( 1 - fac ) * res_buf[i + L_FRAME8k - NS2SA( 8000, STEREO_DFT32MS_OVL_NS ) - ZP8k] + fac * input_mem[i]; - fac += step; - } - - /*in case of burst error*/ - hStereoDft->time_offs += L_FRAME8k; - } - - set_zero( DFT_PRED_RES, 2 * L_res ); - - if ( prev_bfi ) - { - stereo_dft_res_ecu_burst_att( hStereoDft, pDFT_RES, dmx_nrg, L_res, L_FRAME8k ); - } - - return; -} - - -/*--------------------------------------------------------------- - * stereo_dft_res_subst_spec() - * - * Generate error concealment frame in DFT domain - * ---------------------------------------------------------------*/ - -void stereo_dft_res_subst_spec( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ - float *pDFT_RES, /* i/o: residual signal */ - const float *const DFT_PRED_RES, /* i : residual prediction signal */ - const int16_t time_offs, /* i : Time offset for phase adjustment*/ - const int16_t L_res, /* i : bandwidth of residual signal */ - const int16_t L_ana, /* i : Length of FFT analysis */ - const int16_t k, /* i : Subframe index */ - int16_t *num_plocs, /* i/o: Number of peak locations */ - int16_t *plocs, /* i/o: Peak locations (bin) */ - float *plocsi, /* i/o: Peak locations (fractional) */ - const int16_t analysis_flag /* i : Flag for running peak analysis */ -) -{ - int16_t i, idx; - float fac; - float s1, s2, abs1, abs2, abs3, abs4; - float abs_res[( STEREO_DFT_RES_BW_MAX ) / 2]; - float Xmax, Xmin; - float sel; - float corr_phase; - float *p_mem; - float f_frac; - float peak_phase; - float phase_tmp; - float phase; - float conj_sign; - int16_t Np; - float cos_F, sin_F; - - /* initialization */ - mvr2r( DFT_PRED_RES, pDFT_RES, 2 * L_res ); - p_mem = hStereoDft->res_mem; - Np = 1; - - if ( analysis_flag ) - { - /* Perform spectral analysis on 2nd subframe of last good frame */ - abs_res[0] = 0.5f * ( p_mem[0] * p_mem[0] ); /* DC */ - for ( i = 1; i < L_res; i++ ) - { - abs_res[i] = ( p_mem[2 * i] * p_mem[2 * i] + p_mem[2 * i + 1] * p_mem[2 * i + 1] ); - } - - /* Find maxima */ - maximum( abs_res, L_res, &Xmax ); - minimum( abs_res, L_res, &Xmin ); - sel = ( Xmax - Xmin ) * ( 1.0f - 0.97f ); - - peakfinder( abs_res, L_res, plocs, num_plocs, sel, FALSE ); - /* Refine peaks */ - for ( i = 0; i < *num_plocs; i++ ) - { - if ( plocs[i] == 0 ) - { - plocsi[i] = plocs[i] + imax_pos( &abs_res[plocs[i]] ); - } - else if ( plocs[i] == L_res ) - { - plocsi[i] = plocs[i] - 2 + imax_pos( &abs_res[plocs[i] - 2] ); - } - else - { - plocsi[i] = plocs[i] - 1 + imax_pos( &abs_res[plocs[i] - 1] ); - } - } - } - - /* Apply phase of stereo filling on noise spectrum */ - for ( i = 1; i < L_res; i++ ) - { - s1 = sign( pDFT_RES[2 * i] ); - s2 = sign( pDFT_RES[2 * i + 1] ); - abs1 = fabsf( pDFT_RES[2 * i] ); - abs2 = fabsf( pDFT_RES[2 * i + 1] ); - abs3 = fabsf( p_mem[2 * i] ); - abs4 = fabsf( p_mem[2 * i + 1] ); - - fac = 1.0f; - - /* Low-complex phase matching that brings the angle within pi/4 of the target angle */ - if ( ( ( abs1 > abs2 ) && ( abs3 < abs4 ) ) || ( ( abs1 <= abs2 ) && ( abs3 >= abs4 ) ) ) - { - pDFT_RES[2 * i] = fac * s1 * abs4; - pDFT_RES[2 * i + 1] = fac * s2 * abs3; - } - else - { - pDFT_RES[2 * i] = fac * s1 * abs3; - pDFT_RES[2 * i + 1] = fac * s2 * abs4; - } - } - - /* Apply phase adjustment of identified peaks, including Np=1 peak neighbors on each side */ - for ( i = *num_plocs - 1; i >= 0; i-- ) - { - if ( k == 0 ) - { - /* For 1st subframe, apply reversed time ECU to get correct analysis window */ - f_frac = plocsi[i] - plocs[i]; - peak_phase = atan2f( p_mem[2 * plocs[i] + 1], p_mem[2 * plocs[i]] ); - phase_tmp = peak_phase - f_frac * STEREO_DFT_PLC_PH_C; - phase = phase_tmp - f_frac * EVS_PI; - corr_phase = -2 * phase - PI2 * ( STEREO_DFT_PLC_STEP21 + L_ana + time_offs ) * ( plocsi[i] / L_ana ); - conj_sign = -1.0f; - } - else - { - /* For 2nd subframe, do regular phase shift */ - corr_phase = PI2 * ( L_ana + time_offs ) * ( plocsi[i] / L_ana ); - conj_sign = 1.0f; - } - - cos_F = cosf( corr_phase ); - sin_F = sinf( corr_phase ); - - idx = max( 0, plocs[i] - Np ); /* Iterate over plocs[i]-1:plocs[i]+1, considering the edges of the spectrum */ - while ( ( idx < plocs[i] + Np + 1 ) && ( idx < L_res ) ) - { - pDFT_RES[2 * idx] = p_mem[2 * idx] * cos_F - p_mem[2 * idx + 1] * sin_F; - pDFT_RES[2 * idx + 1] = conj_sign * ( p_mem[2 * idx] * sin_F + p_mem[2 * idx + 1] * cos_F ); - idx++; - } - } - - return; -} - - -/*--------------------------------------------------------------- - * stereo_dft_res_ecu_burst_att() - * - * scaling residual PLC in burst error, considering DMX PLC attenuation - * ---------------------------------------------------------------*/ - -void stereo_dft_res_ecu_burst_att( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft, /* i/o: Decoder DFT stereo handle */ - float *pDFT_RES, /* i/o: residual signal /att. residual */ - const float dmx_nrg, /* i : dmx energy of current frame */ - const int16_t L_res, /* i : Bandwidth of residual */ - const int16_t L_ana /* i : Length of FFT analysis */ -) -{ - float fac; - - /* attenuation of residual; follow attenuation of DMX */ - if ( hStereoDft->core_hist[0] == ACELP_CORE ) - { - fac = 0.1f * sqrtf( dmx_nrg / hStereoDft->past_dmx_nrg ); - } - else - { - fac = (int16_t) ( 1 - ( hStereoDft->time_offs - L_ana ) / ( hStereoDft->time_offs + L_ana ) ); - } - - v_multc( pDFT_RES, fac, pDFT_RES, 2 * L_res ); - - return; -} - - -/*--------------------------------------------------------------- - * stereo_dft_dmx_swb_nrg() - * - * Calculate DMX energy - * ---------------------------------------------------------------*/ - -/*! r: total energy of downmix with maximum swb bandwidth max */ -float stereo_dft_dmx_swb_nrg( - const float *dmx_k0, /* i : first subframe spectrum */ - const float *dmx_k1, /* i : second subframe spectrum */ - const int16_t frame_length /* i : frame lanegth */ -) -{ - int16_t i; - float dmx_nrg; - - dmx_nrg = EPSILON; - for ( i = 0; i < frame_length / 2; i++ ) - { - dmx_nrg += 0.5f * ( dmx_k0[2 * i] * dmx_k0[2 * i] + dmx_k0[2 * i + 1] * dmx_k0[2 * i + 1] + - dmx_k1[2 * i] * dmx_k1[2 * i] + dmx_k1[2 * i + 1] * dmx_k1[2 * i + 1] ); - } - - return dmx_nrg; -} - - -/*--------------------------------------------------------------- - * stereo_dft_sg_recovery() - * - * estimates panning measure - * updates recovery flag that might enbale recovery of side gain - * ---------------------------------------------------------------*/ - -int16_t stereo_dft_sg_recovery( - STEREO_DFT_DEC_DATA_HANDLE hStereoDft /* i/o: Decoder DFT stereo handle */ -) -{ - int16_t b; - float *pSideGain; - float sg_m; - float beta; - - if ( !hStereoDft->sg_mem_corrupt ) - { - pSideGain = hStereoDft->side_gain + 2 * STEREO_DFT_BAND_MAX; - beta = 0.425f; - - sg_m = EPSILON; - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - sg_m += pSideGain[b]; - } - sg_m /= hStereoDft->nbands; - - if ( sg_m < 0.6f && sg_m > -0.6f ) - { - hStereoDft->sg_mean = 0.0f; - } - else - { - hStereoDft->sg_mean = beta * sg_m + ( 1 - beta ) * hStereoDft->sg_mean; /* LP filter delta_sg to obtain side gain stability measure */ - } - } - else if ( hStereoDft->sg_mean > 0.6f || hStereoDft->sg_mean < -0.6f ) - { - return 1; - } - - return 0; -} -#endif diff --git a/lib_dec/ivas_stereo_dft_plc_fx.c b/lib_dec/ivas_stereo_dft_plc_fx.c index 71d88b488..ded3b48f4 100644 --- a/lib_dec/ivas_stereo_dft_plc_fx.c +++ b/lib_dec/ivas_stereo_dft_plc_fx.c @@ -52,8 +52,6 @@ #define STEREO_DFT_PLC_PH_C_FX ( Word16 )( 0x0A8D ) /* Phase estimation constant, for estimating phase of fractional frequency */ -#ifdef IVAS_FLOAT_FIXED - /*--------------------------------------------------------------- * stereo_dft_res_ecu_fx() * @@ -855,4 +853,3 @@ Word16 stereo_dft_sg_recovery_fx( return 0; } -#endif diff --git a/lib_dec/ivas_stereo_eclvq_dec.c b/lib_dec/ivas_stereo_eclvq_dec.c index cd26f5539..c74649d90 100644 --- a/lib_dec/ivas_stereo_eclvq_dec.c +++ b/lib_dec/ivas_stereo_eclvq_dec.c @@ -48,41 +48,6 @@ * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t arith_decode_elias_mod( - RangeUniDecState *rc_st_dec ) -{ - int16_t n, n_bits, bit; - - n_bits = 0; - - bit = rc_uni_dec_read_bit( rc_st_dec ); - - while ( bit == 0 ) - { - bit = rc_uni_dec_read_bit( rc_st_dec ); - ++n_bits; - if ( n_bits == 17 ) - { - /* bitstream error encountered */ - rc_st_dec->bit_error_detected = 1; - return 0; - } - } - - if ( n_bits == 0 ) - { - /* code for 0 is 10 and code for 1 is 11 */ - n = rc_uni_dec_read_bit( rc_st_dec ); - } - else - { - n = rc_uni_dec_read_bits( rc_st_dec, n_bits ) + ( 1 << n_bits ); - } - - return n; -} -#else static Word16 arith_decode_elias_mod( RangeUniDecState *rc_st_dec ) { @@ -118,7 +83,6 @@ static Word16 arith_decode_elias_mod( return n; } -#endif // !IVAS_FLOAT_FIXED /*--------------------------------------------------------------- @@ -127,26 +91,6 @@ static Word16 arith_decode_elias_mod( * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t arith_decode_prob_escape( - RangeUniDecState *rc_st_dec, - const uint16_t cum_freq_table[], /* i : Cumulative frequency up to symbol */ - const uint16_t sym_freq_table[], /* i : Symbol frequency */ - const int16_t table_size ) -{ - int16_t symbol; - - symbol = rc_uni_dec_read_symbol_fastS( rc_st_dec, cum_freq_table, sym_freq_table, table_size, ECSQ_PROB_BITS ); - - if ( symbol == table_size - 1 ) /* escape symbol */ - { - /* decode the additional value using a modified Elias integer code */ - symbol += arith_decode_elias_mod( rc_st_dec ); - } - - return symbol; -} -#else static Word16 arith_decode_prob_escape( RangeUniDecState *rc_st_dec, const UWord16 cum_freq_table[], /* i : Cumulative frequency up to symbol Q0*/ @@ -166,7 +110,6 @@ static Word16 arith_decode_prob_escape( return symbol; } -#endif // !IVAS_FLOAT_FIXED /*--------------------------------------------------------------- @@ -177,109 +120,6 @@ static Word16 arith_decode_prob_escape( * the dequantized vector is obtained using the ECSQ_dequantize_vector method * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ECSQ_decode( - ECSQ_instance *ecsq_inst, - const int16_t N, - int16_t *output ) -{ - int16_t i, idx, segment, segment_count, seg_start, seg_stop; - const uint16_t *tab_vals_cum_freq; - const uint16_t *tab_vals_sym_freq; - const uint16_t *tab_abs_lsbs_cum_freq; - const uint16_t *tab_abs_lsbs_sym_freq; - RangeUniDecState *rc_st_dec; - int16_t param_zb; /* zero-based parameter index for coding */ - int16_t shift, lsbs, nonzero, left1, left0, sym, count0; - - rc_st_dec = (RangeUniDecState *) ecsq_inst->ac_handle; - - - segment_count = ( N + ECSQ_SEGMENT_SIZE - 1 ) / ECSQ_SEGMENT_SIZE; - - for ( segment = 0; segment < segment_count; ++segment ) - { - seg_start = segment * ECSQ_SEGMENT_SIZE; - seg_stop = min( seg_start + ECSQ_SEGMENT_SIZE, N ) - 1; - - param_zb = rc_uni_dec_read_symbol_fastS( rc_st_dec, cum_freq_ECSQ_tab_param[ecsq_inst->config_index], sym_freq_ECSQ_tab_param[ecsq_inst->config_index], ECSQ_PARAM_COUNT, ECSQ_PROB_BITS ); - shift = max( 0, param_zb - 3 ); /* first nonzero shift of 1 is used for param 3 */ - - if ( param_zb != 0 ) /* not the ECSQ_ALL_ZERO_PARAM param */ - { - tab_vals_cum_freq = cum_freq_ECSQ_tab_vals[param_zb - 1]; - tab_vals_sym_freq = sym_freq_ECSQ_tab_vals[param_zb - 1]; - idx = min( shift, 4 ); - tab_abs_lsbs_cum_freq = cum_freq_ECSQ_tab_abs_lsbs[idx]; - tab_abs_lsbs_sym_freq = sym_freq_ECSQ_tab_abs_lsbs[idx]; - - for ( i = seg_start; i <= seg_stop; ++i ) - { - sym = arith_decode_prob_escape( rc_st_dec, tab_vals_cum_freq, tab_vals_sym_freq, ECSQ_TAB_VALS_SIZE ); - - if ( shift != 0 ) - { - if ( ( sym > 0 ) || ( shift > 4 ) ) - { - lsbs = rc_uni_dec_read_bits( rc_st_dec, shift ); - } - else /* (sym == 0) && (shift <= 4) */ - { - lsbs = rc_uni_dec_read_symbol_fastS( rc_st_dec, tab_abs_lsbs_cum_freq, tab_abs_lsbs_sym_freq, 1 << shift, ECSQ_PROB_BITS ); - } - sym = ( sym << shift ) | lsbs; - } - - if ( sym != 0 ) - { - sym *= 1 - 2 * rc_uni_dec_read_bit( rc_st_dec ); /* map the sign bit to +1 or -1 and then multiply */ - } - - output[i] = sym; - } - } - else - { - - nonzero = rc_uni_dec_read_bits( rc_st_dec, 2 ); - - left1 = nonzero; - left0 = ( seg_stop - seg_start + 1 ) - nonzero; - - for ( i = seg_start; i <= seg_stop; ++i ) - { - if ( left1 == 0 ) - { - sym = 0; - } - else if ( left0 == 0 ) - { - sym = 1; - } - else - { - count0 = left0 * ECSQ_tab_inverse[left0 + left1]; /* left0 * round(ECSQ_PROB_TOTAL / (left0 + left1)) */ - sym = rc_uni_dec_read_bit_prob_fast( rc_st_dec, count0, ECSQ_PROB_BITS ); - } - - if ( sym != 0 ) - { - sym *= 1 - 2 * rc_uni_dec_read_bit( rc_st_dec ); /* map the sign bit to +1 or -1 and then multiply */ - --left1; - } - else - { - --left0; - } - - output[i] = sym; - } - } - } - - return; -} -#else void ECSQ_decode( ECSQ_instance *ecsq_inst, const Word16 N, /* Q0 */ @@ -396,4 +236,3 @@ void ECSQ_decode( return; } -#endif // !IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_stereo_esf_dec.c b/lib_dec/ivas_stereo_esf_dec.c index 1ad655859..e52528044 100644 --- a/lib_dec/ivas_stereo_esf_dec.c +++ b/lib_dec/ivas_stereo_esf_dec.c @@ -44,30 +44,6 @@ * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void init_basic_allpass( - basic_allpass_t *ap, - const float *gains, - const int16_t *delays ) -{ - int16_t i, j; - - for ( i = 0; i < 3; i++ ) - { - ap->gains[i] = gains[i]; - ap->delays[i] = delays[i]; - - for ( j = 0; j < STEREO_DFT_ALLPASS_BUFFERLEN; j++ ) - { - ap->buffer[i][j] = 0.f; - } - } - - ap->pos = 0; - - return; -} -#else void init_basic_allpass_fx( basic_allpass_t *ap, const Word32 *gains_fx, /* Q31 */ @@ -97,7 +73,6 @@ void init_basic_allpass_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -106,58 +81,6 @@ void init_basic_allpass_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void filter_with_allpass( - const float *sig, - float *out, - const int16_t len, - basic_allpass_t *ap ) -{ - int16_t k; - int16_t pos, mask; - int16_t d1, d2, d3; - float P1, P2, P3, P4, P5; - float g1, g2, g3, *D1, *D2, *D3; - - P1 = P2 = P3 = P4 = P5 = 0; - mask = STEREO_DFT_ALLPASS_BUFFERLEN - 1; - - pos = ap->pos; - - g1 = ap->gains[0]; - g2 = ap->gains[1]; - g3 = ap->gains[2]; - - d1 = ap->delays[0]; - d2 = ap->delays[1]; - d3 = ap->delays[2]; - - D1 = ap->buffer[0]; - D2 = ap->buffer[1]; - D3 = ap->buffer[2]; - - for ( k = 0; k < len; k++ ) - { - P1 = sig[k] - g3 * D3[pos]; - P2 = P1 - g1 * D1[pos]; - P3 = D1[pos] + g1 * P2 - g2 * D2[pos]; - P4 = D2[pos] + g2 * P3; - P5 = D3[pos] + g3 * P1; - - out[k] = P5; /* could overwrite sig */ - - D1[( pos + d1 ) & mask] = P2; - D2[( pos + d2 ) & mask] = P3; - D3[( pos + d3 ) & mask] = P4; - - pos = ( pos + 1 ) & mask; - } - - ap->pos = pos; - - return; -} -#else void filter_with_allpass_fx( const Word32 *sig, /* q_shift */ Word32 *out, /* q_shift */ @@ -283,4 +206,3 @@ void filter_with_allpass_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_ica_dec.c b/lib_dec/ivas_stereo_ica_dec.c index 94e17583e..a28afdad9 100644 --- a/lib_dec/ivas_stereo_ica_dec.c +++ b/lib_dec/ivas_stereo_ica_dec.c @@ -54,7 +54,6 @@ * upnmix, convert L/R to M/S. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tca_dec_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *synth_fx[CPE_CHANNELS], /* i/o: output synth qsynth*/ @@ -314,284 +313,12 @@ void stereo_tca_dec_fx( move32(); return; } -#else -void stereo_tca_dec( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *synth[CPE_CHANNELS], /* i/o: output synth */ - const int16_t output_frame /* i : length of a frame per channel */ -) -{ - /* Buffers, input Left and right channels @ input_Fs*/ - float bufChanL[L_DEC_MEM_LEN_ICA + L_FRAME48k]; - float bufChanR[L_DEC_MEM_LEN_ICA + L_FRAME48k]; - float *ptrChanL, *ptrChanR; - float *target; - int16_t target_idx, prevNCShift, currentNCShift, l_shift_adapt; - int16_t dsFactor, tempMax; - float *ref; - int16_t bothChannelShift; - int32_t output_Fs; - STEREO_TCA_DEC_HANDLE hStereoTCA; - - hStereoTCA = hCPE->hStereoTCA; - - output_Fs = hCPE->hCoreCoder[0]->output_Fs; - - if ( hCPE->nchan_out == 1 ) - { - if ( hCPE->hStereoDftDmx ) - { - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - hCPE->hStereoDftDmx->targetGain = 1.0f; - } - - /* save the target gain for next frame */ - hCPE->hStereoDftDmx->prevTargetGain = hCPE->hStereoDftDmx->targetGain; - } - - return; - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT && !hCPE->hStereoMdct->use_itd ) - { - return; - } - - /* populate L/R memories into current buffers */ - mvr2r( hStereoTCA->memChanL, bufChanL, L_DEC_MEM_LEN_ICA ); - mvr2r( hStereoTCA->memChanR, bufChanR, L_DEC_MEM_LEN_ICA ); - - /* pointers to the current frame */ - ptrChanL = bufChanL + L_DEC_MEM_LEN_ICA; - ptrChanR = bufChanR + L_DEC_MEM_LEN_ICA; - - /* copy interleaved stereo data to two channels, e.g., L, R */ - mvr2r( synth[0], ptrChanL, output_frame ); - mvr2r( synth[1], ptrChanR, output_frame ); - - /* back up the L/R target synth for next frame */ - mvr2r( bufChanL + output_frame, hStereoTCA->memChanL, L_DEC_MEM_LEN_ICA ); - mvr2r( bufChanR + output_frame, hStereoTCA->memChanR, L_DEC_MEM_LEN_ICA ); - - /* TCA parameter de-quantize */ - dsFactor = (int16_t) ( output_Fs / 8000 ); - tempMax = NS2SA( output_Fs, L_NCSHIFT_NS ); - hStereoTCA->corrLagStats = min( hStereoTCA->indx_ica_NCShift * dsFactor, tempMax ); - - bothChannelShift = 0; - if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_MDCT ) - { - hStereoTCA->corrLagStats = 0; - hStereoTCA->refChanIndx = L_CH_INDX; - hStereoTCA->targetGain = 1.0f; - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - hStereoTCA->corrLagStats = (int16_t) fabsf( hCPE->hStereoDft->itd[1] ); - hStereoTCA->refChanIndx = ( hCPE->hStereoDft->itd[1] >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - float itd; - - itd = hCPE->hStereoMdct->itd; - hStereoTCA->corrLagStats = (int16_t) fabsf( itd ); - hStereoTCA->refChanIndx = ( itd >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); - } - - if ( hStereoTCA->refChanIndx != hStereoTCA->prevRefChanIndx && hStereoTCA->corrLagStats != 0 ) - { - bothChannelShift = 1; - } - } - - prevNCShift = (int16_t) abs( hStereoTCA->prevCorrLagStats ); - currentNCShift = (int16_t) abs( hStereoTCA->corrLagStats ); - - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_TD ) - { - if ( hStereoTCA->corrLagStats == hStereoTCA->prevCorrLagStats && hStereoTCA->interp_dec_switch_to_zero_diff == 0 ) - { - hStereoTCA->interp_dec_switch_to_zero_diff = 1; - } - else - { - hStereoTCA->interp_dec_switch_to_zero_diff = 0; - } - - if ( currentNCShift != 0 ) - { - currentNCShift = TRUNC( 0.6 * prevNCShift + 0.4 * currentNCShift ); - } - - prevNCShift = hStereoTCA->interp_dec_prevNCShift; - hStereoTCA->interp_dec_prevNCShift = currentNCShift; - } - else - { - hStereoTCA->interp_dec_prevNCShift = currentNCShift; - hStereoTCA->interp_dec_switch_to_zero_diff = 0; - } - - ref = ptrChanL; - target = ptrChanR; - target_idx = R_CH_INDX; - /* identify target signal to adjust for shift variations */ - if ( ( prevNCShift == 0 && hStereoTCA->refChanIndx == R_CH_INDX ) || ( hStereoTCA->prevRefChanIndx == R_CH_INDX ) ) - { - ref = ptrChanR; - target = ptrChanL; - target_idx = L_CH_INDX; - } - - if ( bothChannelShift == 1 ) - { - ref = ptrChanL; - target = ptrChanR; - target_idx = R_CH_INDX; - if ( hStereoTCA->refChanIndx == R_CH_INDX ) - { - ref = ptrChanR; - target = ptrChanL; - target_idx = L_CH_INDX; - } - } - - /* target signal adjustment for temporal shift variations */ - if ( hStereoTCA->prevCorrLagStats != hStereoTCA->corrLagStats || bothChannelShift || ( hStereoTCA->interp_dec_switch_to_zero_diff == 1 && hCPE->element_mode == IVAS_CPE_TD ) ) - { - l_shift_adapt = L_SHIFT_ADAPT_16k; - if ( output_Fs > 16000 ) - { - l_shift_adapt = L_SHIFT_ADAPT_MAX; - } - - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_DFT ) - { - l_shift_adapt = l_shift_adapt >> 1; - } - - if ( abs( currentNCShift - prevNCShift ) <= N_MAX_SHIFT_CHANGE && bothChannelShift == 0 ) - { - adjustTargetSignal( target - currentNCShift, currentNCShift, prevNCShift, l_shift_adapt, 0 ); - } - else - { - if ( bothChannelShift == 1 ) - { - adjustTargetSignal( ref, 0, prevNCShift, l_shift_adapt, 1 ); - adjustTargetSignal( target - currentNCShift, currentNCShift, 0, l_shift_adapt, 1 ); - } - else - { - adjustTargetSignal( target - currentNCShift, currentNCShift, prevNCShift, l_shift_adapt, 1 ); - } - } - } - - /* temporal channel adjustment */ - mvr2r( target - currentNCShift, synth[target_idx], output_frame ); - - mvr2r( ref, synth[!target_idx], output_frame ); - - /* Scale the Right channel with the gain */ - stereo_tca_scale_R_channel( hCPE, synth[1], output_frame ); - - /*-----------------------------------------------------------------* - * updates and memory backups - *-----------------------------------------------------------------*/ - - /* save the reference channel index for next frame */ - hStereoTCA->prevRefChanIndx = hStereoTCA->refChanIndx; - - /* save the corr lag stats for next frame */ - hStereoTCA->prevCorrLagStats = hStereoTCA->corrLagStats; - - /* save the target gain for next frame */ - hStereoTCA->prevTargetGain = hStereoTCA->targetGain; - - return; -} -#endif /*-------------------------------------------------------------------* * stereo_tca_scale_R_channel() * * Scale the Right channel with the gain *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_tca_scale_R_channel( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *output, /* i/o: output synthesis, R channel */ - const int16_t output_frame /* i : frame length */ -) -{ - STEREO_TCA_DEC_HANDLE hStereoTCA; - int16_t i, j, l_ica_ovl, flat_old; - float tempF, tempF1, winSlope; - int32_t output_Fs; - - hStereoTCA = hCPE->hStereoTCA; - output_Fs = hCPE->hCoreCoder[0]->output_Fs; - - if ( hCPE->hCoreCoder[0]->core_brate <= SID_2k40 && hCPE->nchan_out == 2 ) - { - return; - } - /* Scale the Right channel with the gain */ - l_ica_ovl = NS2SA( output_Fs, STEREO_L_TCA_OVLP_NS ); - - if ( hCPE->nchan_out == 1 ) - { - /* in mono DMX, the scaling is done before synchro_synthesis() */ - flat_old = NS2SA( output_Fs, ACELP_LOOK_NS + IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); - - if ( hCPE->last_element_mode == IVAS_CPE_TD && hCPE->element_mode == IVAS_CPE_DFT ) - { - hCPE->hStereoDftDmx->prevTargetGain *= 2.0f; - hCPE->hStereoDftDmx->prevTargetGain = min( hCPE->hStereoDftDmx->prevTargetGain, powf( 10, ( ( 1 << STEREO_BITS_TCA_GD ) - 1 ) * STEREO_TCA_GDSTEP + STEREO_TCA_GDMIN ) ); - hCPE->hStereoDftDmx->targetGain = 1.0f; - - flat_old = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); - } - } - else if ( hCPE->last_element_mode == IVAS_CPE_TD && hCPE->element_mode == IVAS_CPE_DFT ) - { - flat_old = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); - } - else - { - flat_old = NS2SA( output_Fs, ACELP_LOOK_NS + IVAS_DEC_DELAY_NS ); - } - - if ( hCPE->nchan_out == 1 ) - { - tempF1 = 1.0f / hCPE->hStereoDftDmx->targetGain; - tempF = 1.0f / hCPE->hStereoDftDmx->prevTargetGain; - } - else - { - tempF1 = 1.0f / hStereoTCA->targetGain; - tempF = 1.0f / hStereoTCA->prevTargetGain; - } - winSlope = 1.0f / (float) l_ica_ovl; - - for ( i = 0; i < flat_old; i++ ) - { - output[i] *= tempF; - } - for ( j = 0; i < flat_old + l_ica_ovl; i++, j++ ) - { - output[i] = ( 1.0f - j * winSlope ) * tempF * output[i] + ( j * winSlope ) * tempF1 * output[i]; - } - for ( ; i < output_frame; i++ ) - { - output[i] *= tempF1; - } - - return; -} -#else #define MAX_TARGET_GAIN_Q29 1904890240 void stereo_tca_scale_R_channel_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -793,7 +520,6 @@ void stereo_tca_scale_R_channel_fx( return; } -#endif /*-------------------------------------------------------------------* * stereo_tca_init_dec() @@ -802,7 +528,6 @@ void stereo_tca_scale_R_channel_fx( *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tca_init_dec_fx( STEREO_TCA_DEC_HANDLE hStereoTCA /* i/o: Stereo TCA handle */ ) @@ -835,27 +560,3 @@ void stereo_tca_init_dec_fx( return; } -#else -void stereo_tca_init_dec( - STEREO_TCA_DEC_HANDLE hStereoTCA /* i/o: Stereo TCA handle */ -) -{ - hStereoTCA->refChanIndx = L_CH_INDX; - hStereoTCA->prevRefChanIndx = L_CH_INDX; - hStereoTCA->indx_ica_NCShift = 0; - hStereoTCA->indx_ica_gD = 0; - hStereoTCA->targetGain = 1.0f; - hStereoTCA->prevTargetGain = 1.0f; - - hStereoTCA->corrLagStats = 0; - hStereoTCA->prevCorrLagStats = 0; - - hStereoTCA->interp_dec_prevNCShift = 0; - hStereoTCA->interp_dec_switch_to_zero_diff = 0; - - set_f( hStereoTCA->memChanL, 0.0f, L_DEC_MEM_LEN_ICA ); - set_f( hStereoTCA->memChanR, 0.0f, L_DEC_MEM_LEN_ICA ); - - return; -} -#endif diff --git a/lib_dec/ivas_stereo_icbwe_dec.c b/lib_dec/ivas_stereo_icbwe_dec.c index 5c189de72..8b8887c9c 100644 --- a/lib_dec/ivas_stereo_icbwe_dec.c +++ b/lib_dec/ivas_stereo_icbwe_dec.c @@ -43,9 +43,7 @@ #include "wmc_auto.h" #include "rom_com.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif #define Q_icBWE 16 @@ -56,27 +54,6 @@ * core switching reset of IC BWE memory *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ic_bwe_dec_reset( - STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ -) -{ - /* unscaled & scaled SHB synthesis memory */ - set_f( hStereoICBWE->mem_syn_shb_nonref, 0, L_SHB_LAHEAD ); /* use samples from !acelp) */ - set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); - set_f( hStereoICBWE->mem_syn_shb_ola_nonref, 0, L_SHB_LAHEAD ); /* use samples from !acelp) */ - - /* inter-channel BWE SP and GSP mem reset */ - hStereoICBWE->memShbSpecMapping = 0; - - set_f( hStereoICBWE->memShbHilbert_nonref, 0, HILBERT_MEM_SIZE ); - set_f( hStereoICBWE->memShbInterp_nonref, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hStereoICBWE->memShb_fsout_nonref, 0, INTERP_3_2_MEM_LEN ); - hStereoICBWE->syn_dm_phase_nonref = 0; - - return; -} -#else static void ic_bwe_dec_reset_fx( STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ ) @@ -115,420 +92,8 @@ static void ic_bwe_dec_reset_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * stereo_icBWE_dec() - * - * Spatial mapping of reference to the non-reference channels in SHB - *-------------------------------------------------------------------*/ - -void stereo_icBWE_dec( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *synthRef, /* i/o: Reference channel HB synthesis at output Fs */ - float *synth, /* o : Non reference channel HB synthesis at output Fs */ - const float *fb_synth_ref, /* i : ref. high-band synthesis 16-20 kHz */ - const float *voice_factors, /* i : voicing factors */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t i, j, k, nbSubFr; - Decoder_State *st; /* i/o: decoder state structure, primary channel */ - int16_t spIndx, gsIndx; - float excSHB_nonref[L_FRAME16k]; - float shb_synth_nonref[L_FRAME16k + L_SHB_LAHEAD]; - float error[L_FRAME32k]; - float nlMixFac[NB_SUBFR16k]; - float gsMapping, specMapping; - float fb_synth_nonref[L_FRAME48k]; - float scale, prev_pow, curr_pow, temp; - float alpha, winSlope, winLen, prevgsMapping; - float temp1, temp2; - float icbweM2Ref, ratio_L; - - STEREO_DFT_DEC_DATA_HANDLE hStereoDft = hCPE->hStereoDft; - STEREO_ICBWE_DEC_HANDLE hStereoICBWE = hCPE->hStereoICBWE; - st = hCPE->hCoreCoder[0]; - - /*--------------------------------------------------------------------* - * skip IC-BWE in case of mono DMX output * - * -------------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode > STEREO_DFT_RES_COD_OFF ) - { - hCPE->hStereoDft->core_hist[0] = st->core; - - return; - } - else if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 ) - { - - return; - } - /*--------------------------------------------------------------------* - * skip IC-BWE in case of SID or NO_DATA frame - * -------------------------------------------------------------------*/ - - if ( st->core_brate <= SID_2k40 ) - { - return; - } - - /*--------------------------------------------------------------------* - * TD high band stereo filling * - * -------------------------------------------------------------------*/ - /* update buffers for TD stereo filling */ - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - float hb_nrg = EPSILON; - float hb_nrg2 = EPSILON; - - if ( st->core == ACELP_CORE || st->last_core == ACELP_CORE ) - { - for ( i = 0; i < output_frame / 2; i++ ) - { - hb_nrg2 += synthRef[i] * synthRef[i]; - } - - hCPE->hStereoDft->hb_nrg_subr[0] = hb_nrg2; - hb_nrg += hb_nrg2; - hb_nrg2 = EPSILON; - - for ( ; i < output_frame; i++ ) - { - hb_nrg2 += synthRef[i] * synthRef[i]; - } - - hCPE->hStereoDft->hb_nrg_subr[1] = hb_nrg2; - hb_nrg += hb_nrg2; - - mvr2r( synthRef, hCPE->hStereoDft->hb_stefi_sig + hCPE->hStereoDft->hb_stefi_delay, output_frame ); - } - else - { - set_zero( hCPE->hStereoDft->hb_stefi_sig + hCPE->hStereoDft->hb_stefi_delay, output_frame ); - } - hCPE->hStereoDft->hb_nrg_subr[0] *= hCPE->hStereoDft->NFFT / 2; - hCPE->hStereoDft->hb_nrg_subr[1] *= hCPE->hStereoDft->NFFT / 2; - hCPE->hStereoDft->hb_nrg[0] = hb_nrg; - hCPE->hStereoDft->td_gain[0] = 0; - hCPE->hStereoDft->core_hist[0] = st->core; - } - - /*--------------------------------------------------------------------* - * IC-BWE * - * -------------------------------------------------------------------*/ - - if ( st->core != ACELP_CORE || st->extl == -1 || ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) ) - { - return; - } - else if ( hCPE->element_mode == IVAS_CPE_DFT && st->core_brate <= SID_2k40 ) - { - mvr2r( synthRef, synth, output_frame ); - return; - } - - - set_f( fb_synth_nonref, 0, L_FRAME48k ); - - /* core switching reset */ - if ( st->last_core != ACELP_CORE || st->bwidth == WB ) - { - ic_bwe_dec_reset( hStereoICBWE ); - - if ( st->last_core != ACELP_CORE ) - { - hStereoICBWE->prevSpecMapping = 0.0f; - hStereoICBWE->prevgsMapping = 1.0f; - hStereoICBWE->icbweM2Ref_prev = 1.0f; - } - - if ( st->bwidth == WB ) - { - /* copy to outputHB and reset hb_synth values */ - mvr2r( synthRef, synth, output_frame ); - - if ( st->element_mode == IVAS_CPE_TD ) - { - hStereoICBWE->prevSpecMapping = 0.0f; - hStereoICBWE->prevgsMapping = 1.0f; - hStereoICBWE->icbweM2Ref_prev = 1.0f; - } - else if ( st->element_mode == IVAS_CPE_DFT ) - { - hStereoICBWE->refChanIndx_bwe = L_CH_INDX; - hStereoICBWE->prevSpecMapping = 0.0f; - - prevgsMapping = hStereoICBWE->prevgsMapping; - temp1 = hStereoDft->side_gain[2 * STEREO_DFT_BAND_MAX + hStereoDft->nbands - 1]; - icbweM2Ref = 1.f + temp1; - gsMapping = 1.f - temp1; - - winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); - winSlope = 1.0f / winLen; - alpha = winSlope; - for ( i = 0; i < winLen; i++ ) - { - synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); - synth[i] *= ( alpha * ( gsMapping ) + ( 1.0f - alpha ) * ( prevgsMapping ) ); - alpha += winSlope; - } - for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) - { - synthRef[i] *= ( icbweM2Ref ); - synth[i] *= ( gsMapping ); - } - hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; - hStereoICBWE->prevgsMapping = gsMapping; - } - - return; - } - } - - if ( !st->bfi ) - { - hStereoICBWE->refChanIndx_bwe = get_next_indice( st, STEREO_ICBWE_REFBITS ); - if ( st->flag_ACELP16k == 1 ) - { - spIndx = get_next_indice( st, STEREO_ICBWE_SPBITS ); - } - else - { - spIndx = 3; - } - if ( st->element_mode == IVAS_CPE_TD ) - { - gsIndx = get_next_indice( st, STEREO_ICBWE_GSBITS ); - } - else - { - gsIndx = get_next_indice( st, STEREO_ICBWE_GSBITS_DFT ); - } - - /* Store indices in case of frame loss */ - hStereoICBWE->prev_spIndx = spIndx; - hStereoICBWE->prev_gsIndx = gsIndx; - } - else /*bfi*/ - { - /* Retrieve last decoded indices */ - spIndx = hStereoICBWE->prev_spIndx; - gsIndx = hStereoICBWE->prev_gsIndx; - hStereoICBWE->refChanIndx_bwe = hStereoICBWE->prev_refChanIndx_bwe; - } - - /* IC-BWE parameter de-quant */ - /* sp Mapping */ - hStereoICBWE->prevSpecMapping = usdequant( spIndx, -0.6f, 0.2f ); - - /* gs Mapping */ - prevgsMapping = hStereoICBWE->prevgsMapping; - - if ( st->element_mode == IVAS_CPE_TD ) - { - hStereoICBWE->prevgsMapping = icbwe_gsMapping_tbl[gsIndx]; - } - else - { - hStereoICBWE->prevgsMapping = icbwe_gsMappingDFT_tbl[gsIndx]; - } - - hStereoICBWE->prevgsMapping = powf( 10, hStereoICBWE->prevgsMapping ); - - specMapping = hStereoICBWE->prevSpecMapping; - gsMapping = hStereoICBWE->prevgsMapping; - - if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); - if ( hCPE->hStereoDftDmx != NULL ) - { - if ( hCPE->hStereoDftDmx->targetGain < 0.5f || hCPE->hStereoDftDmx->targetGain > 2.0f ) - { - v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); - } - } - else - { - if ( hCPE->hStereoTCA->targetGain < 0.5f || hCPE->hStereoTCA->targetGain > 2.0f ) - { - v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); - } - } - - nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; - for ( i = 0, k = 0; i < nbSubFr; i++ ) - { - if ( hCPE->hCoreCoder[0]->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) - { - temp1 = 0; - temp2 = 1.0f; - } - else - { - temp1 = sqrtf( nlMixFac[i] ); - temp2 = sqrtf( 1.0f - nlMixFac[i] ); - } - - for ( j = 0; j < L_FRAME16k / nbSubFr; j++, k++ ) - { - excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; - } - } - - /* LP synthesis */ - mvr2r( hStereoICBWE->mem_syn_shb_nonref, shb_synth_nonref, L_SHB_LAHEAD ); - syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref + L_SHB_LAHEAD, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); - - prev_pow = sum2_f( shb_synth_nonref, L_SHB_LAHEAD + 10 ); - curr_pow = sum2_f( shb_synth_nonref + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); - - if ( prev_pow == 0 ) - { - scale = 0; - } - else - { - scale = sqrtf( curr_pow / prev_pow ); - } - - for ( i = 0; i < L_SHB_LAHEAD; i++ ) - { - shb_synth_nonref[i] *= scale; - } - - for ( ; i < L_SHB_LAHEAD + 10; i++ ) - { - temp = ( i - 19 ) / 10.0f; - shb_synth_nonref[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); - } - /* spec and gs adjustment */ - deemph( shb_synth_nonref + L_SHB_LAHEAD, specMapping, L_FRAME16k, &( hStereoICBWE->memShbSpecMapping ) ); - mvr2r( shb_synth_nonref + L_FRAME16k, hStereoICBWE->mem_syn_shb_nonref, L_SHB_LAHEAD ); - - ScaleShapedSHB( SHB_OVERLAP_LEN, shb_synth_nonref, hStereoICBWE->mem_syn_shb_ola_nonref, hStereoICBWE->gshapeRef, ( hStereoICBWE->gFrameRef * gsMapping * 0.9f ), window_shb, subwin_shb ); - - if ( st->extl == FB_TBE ) - { - v_multc( fb_synth_ref, gsMapping, fb_synth_nonref, L_FRAME48k ); - } - - /* generate 32kHz SHB synthesis from 12.8(16)kHz signal */ - GenSHBSynth( shb_synth_nonref, error, hStereoICBWE->memShbHilbert_nonref, hStereoICBWE->memShbInterp_nonref, st->L_frame, &( hStereoICBWE->syn_dm_phase_nonref ) ); - } - else - { - mvr2r( synthRef, synth, output_frame ); - - winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); - winSlope = 1.0f / winLen; - alpha = winSlope; - - ratio_L = ( hCPE->element_mode == IVAS_CPE_DFT ) ? ( 0.5f ) : ( tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx] ); - - icbweM2Ref = gsMapping; - if ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) - { - if ( ratio_L >= 0.1f ) - { - icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ( 1 - ratio_L ) * ( 1 - ratio_L ) * gsMapping * gsMapping ) ) / ratio_L; - } - } - else - { - if ( ratio_L <= 0.9f ) - { - icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ratio_L * ratio_L * gsMapping * gsMapping ) ) / ( 1 - ratio_L ); - } - } - - icbweM2Ref = max( gsMapping, icbweM2Ref ); - - for ( i = 0; i < winLen; i++ ) - { - synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); - synth[i] *= ( alpha * ( gsMapping ) + ( 1.0f - alpha ) * ( prevgsMapping ) ); - alpha += winSlope; - } - for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) - { - synthRef[i] *= ( icbweM2Ref ); - synth[i] *= ( gsMapping ); - } - hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; - - ic_bwe_dec_reset( hStereoICBWE ); - hStereoICBWE->prevSpecMapping = 0.0f; - - return; - } - - /* resample to output FS */ - if ( st->output_Fs == 48000 ) - { - interpolate_3_over_2_allpass( error, L_FRAME32k, synth, hStereoICBWE->memShb_fsout_nonref ); - } - else if ( st->output_Fs == 32000 ) - { - mvr2r( error, synth, L_FRAME32k ); - } - else if ( st->output_Fs == 16000 ) - { - Decimate_allpass_steep( error, hStereoICBWE->memShb_fsout_nonref, L_FRAME32k, synth ); - } - - - if ( st->extl == FB_TBE && st->output_Fs == 48000 ) - { - v_add( fb_synth_nonref, synth, synth, L_FRAME48k ); - } - - /* copy to outputHB and reset hb_synth values */ - ratio_L = ( hCPE->element_mode == IVAS_CPE_DFT ) ? ( 0.5f ) : ( tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx] ); - - icbweM2Ref = gsMapping; - if ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) - { - if ( ratio_L >= 0.1f ) - { - icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ( 1 - ratio_L ) * ( 1 - ratio_L ) * gsMapping * gsMapping ) ) / ratio_L; - } - } - else - { - if ( ratio_L <= 0.9f ) - { - icbweM2Ref = sqrtf( 0.5f - min( 0.5f, ratio_L * ratio_L * gsMapping * gsMapping ) ) / ( 1 - ratio_L ); - } - } - - icbweM2Ref = max( gsMapping, icbweM2Ref ); - - winLen = (int16_t) ( ( SHB_OVERLAP_LEN * st->output_Fs ) / 16000 ); - winSlope = 1.0f / winLen; - alpha = winSlope; - for ( i = 0; i < winLen; i++ ) - { - synthRef[i] *= ( alpha * ( icbweM2Ref ) + ( 1.0f - alpha ) * ( hStereoICBWE->icbweM2Ref_prev ) ); - alpha += winSlope; - } - - for ( ; i < NS2SA( st->output_Fs, FRAME_SIZE_NS ); i++ ) - { - synthRef[i] *= ( icbweM2Ref ); - } - - hStereoICBWE->icbweM2Ref_prev = icbweM2Ref; - - return; -} -#else static Word16 FindScale( Word32 *buff, /* Q_buff */ Word16 len, /* Q0 */ @@ -1161,8 +726,8 @@ void stereo_icBWE_dec_fx( #else tmp = mult_r( sub( 32767, ratio_L_fx ), sub( 32767, ratio_L_fx ) ); // Q15 #endif - tmp = mult_r( tmp, gsMapping_fx ); // Q14 - tmp = mult_r( tmp, gsMapping_fx ); // Q13 + tmp = mult_r( tmp, gsMapping_fx ); // Q14 + tmp = mult_r( tmp, gsMapping_fx ); // Q13 IF( LT_16( tmp, 4096 /* 0.5 in Q13*/ ) ) { temp1_fx = 0; @@ -1328,8 +893,8 @@ void stereo_icBWE_dec_fx( #else tmp = mult_r( sub( 32767, ratio_L_fx ), sub( 32767, ratio_L_fx ) ); // Q15 #endif - tmp = mult_r( tmp, gsMapping_fx ); // Q14 - tmp = mult_r( tmp, gsMapping_fx ); // Q13 + tmp = mult_r( tmp, gsMapping_fx ); // Q14 + tmp = mult_r( tmp, gsMapping_fx ); // Q13 IF( LT_16( tmp, 4096 /* 0.5 in Q13*/ ) ) { temp1_fx = 0; @@ -1379,7 +944,6 @@ void stereo_icBWE_dec_fx( return; } -#endif /*-------------------------------------------------------------------* * stereo_icBWE_decproc() @@ -1387,288 +951,6 @@ void stereo_icBWE_dec_fx( * Stereo (inter-channel) BWE mapping - decoder initialization *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_icBWE_decproc( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *output[CPE_CHANNELS], /* i/o: output synthesis */ - float outputHB[CPE_CHANNELS][L_FRAME48k], /* i : HB synthesis */ - const int16_t last_core, /* i : last core, primary channel */ - const int16_t last_bwidth, /* i : last bandwidth */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t i, j, n, decoderDelay, icbweOLASize, dftOvlLen; - int16_t core, memOffset, refChanIndx_bwe; - float temp0[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )], temp1[L_FRAME48k + NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS )]; - float winSlope, alpha; - const float *win_dft; - int32_t extl_brate, output_Fs; - - STEREO_ICBWE_DEC_HANDLE hStereoICBWE = hCPE->hStereoICBWE; - - - /*--------------------------------------------------------------------* - * skip IC-BWE in case of SID or NO_DATA frame - * -------------------------------------------------------------------*/ - - if ( ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) && hCPE->nchan_out == 2 /*&& hCPE->hCoreCoder[0]->core_brate > SID_2k40*/ && hCPE->hCoreCoder[0]->last_core_brate <= SID_2k40 ) - { - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - - if ( hCPE->hCoreCoder[0]->core_brate <= SID_2k40 ) - { - return; - } - - /*--------------------------------------------------------------------* - * skip IC-BWE in case of mono DMX output * - * -------------------------------------------------------------------*/ - - if ( hCPE->nchan_out == 1 && hCPE->element_mode == IVAS_CPE_DFT ) - { - add_HB_to_mono_dmx( hCPE, output[0], outputHB[0], last_core, output_frame ); - - return; - } - else if ( hCPE->nchan_out == 1 && hCPE->element_mode != IVAS_CPE_TD ) - { - return; - } - - /*--------------------------------------------------------------------* - * IC-BWE processing - * -------------------------------------------------------------------*/ - - core = hCPE->hCoreCoder[0]->core; - extl_brate = hCPE->hCoreCoder[0]->extl_brate; - output_Fs = hCPE->hCoreCoder[0]->output_Fs; - - memOffset = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ); - - /* LRTD stereo mode - 2xBWEs used */ - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) - { - /* delay HB synth */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( outputHB[n] + output_frame - memOffset, temp0, memOffset ); - mvr2r( outputHB[n], outputHB[n] + memOffset, output_frame - memOffset ); - mvr2r( hCPE->prev_hb_synth[n], outputHB[n], memOffset ); - mvr2r( temp0, hCPE->prev_hb_synth[n], memOffset ); - } - - if ( hCPE->nchan_out == 1 ) - { - /* stereo to mono downmix */ - for ( i = 0; i < output_frame; i++ ) - { - outputHB[0][i] = ( outputHB[0][i] + outputHB[1][i] ) * 0.5f; - } - v_add( output[0], outputHB[0], output[0], output_frame ); - } - else - { - /* Add the delayed hb_synth component to the delayed ACELP synthesis */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - v_add( output[n], outputHB[n], output[n], output_frame ); - } - } - } - else - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - set_f( hCPE->prev_hb_synth[n], 0, memOffset ); - } - } - - if ( hCPE->element_mode != IVAS_CPE_MDCT && !( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag ) ) - { - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - set_f( hStereoICBWE->memOutHB[0], 0, memOffset ); - set_f( hStereoICBWE->memOutHB[1], 0, memOffset ); - - set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - - if ( core == ACELP_CORE && extl_brate > 0 ) - { - refChanIndx_bwe = hStereoICBWE->refChanIndx_bwe; - - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->hCoreCoder[0]->bwidth > WB && last_bwidth == WB && hCPE->hCoreCoder[0]->ini_frame > 1 /* counter wass already updated */ ) - { - /* fad-in reference HB signal */ - winSlope = ( memOffset > 0 ) ? ( 1.0f / memOffset ) : 0; - for ( i = 0; i < memOffset; i++ ) - { - outputHB[refChanIndx_bwe][i] *= ( i + 1 ) * winSlope; - } - } - /* Resampled LB and HB offset */ - mvr2r( outputHB[refChanIndx_bwe], temp0 + memOffset, output_frame - memOffset ); - mvr2r( outputHB[!refChanIndx_bwe], temp1 + memOffset, output_frame - memOffset ); - - decoderDelay = NS2SA( output_Fs, IVAS_DEC_DELAY_NS ); - - if ( last_core != ACELP_CORE && hCPE->element_mode == IVAS_CPE_DFT ) - { - /* hb_synth of mid band is faded out in the 1.25 ms prior to DFT analysis and the icbwe is faded in time domain */ - icbweOLASize = NS2SA( output_Fs, STEREO_DFT_DELAY_DEC_BWE_NS ); - - for ( i = 0; i < decoderDelay; i++ ) - { - temp0[i] = 0; - temp1[i] = 0; - } - - assert( icbweOLASize > 0 ); - winSlope = 1.0f / icbweOLASize; - alpha = winSlope; - for ( ; i < decoderDelay + icbweOLASize; i++ ) - { - temp0[i] *= alpha; - temp1[i] *= alpha; - alpha += winSlope; - } - } - else - { - if ( refChanIndx_bwe != hStereoICBWE->prev_refChanIndx_bwe ) - { - winSlope = ( memOffset > 0 ) ? ( 1.0f / memOffset ) : 0; - for ( i = 0; i < memOffset; i++ ) - { - temp0[i] = ( ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[refChanIndx_bwe][i] + - ( 1 - ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe][i]; - temp1[i] = ( ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe][i] + - ( 1 - ( i + 1 ) * winSlope ) * hStereoICBWE->memOutHB[refChanIndx_bwe][i]; - } - } - else - { - mvr2r( hStereoICBWE->memOutHB[refChanIndx_bwe], temp0, memOffset ); - mvr2r( hStereoICBWE->memOutHB[!refChanIndx_bwe], temp1, memOffset ); - } - } - - if ( hCPE->nchan_out == 1 ) - { - /* stereo to mono downmix */ - for ( i = 0; i < output_frame; i++ ) - { - temp0[i] = ( temp0[i] + temp1[i] ) * 0.5f; - output[0][i] += temp0[i]; - } - } - else - { - - v_add( temp0, output[0], output[0], output_frame ); - v_add( temp1, output[1], output[1], output_frame ); - } - mvr2r( outputHB[0] + output_frame - memOffset, hStereoICBWE->memOutHB[0], memOffset ); - mvr2r( outputHB[1] + output_frame - memOffset, hStereoICBWE->memOutHB[1], memOffset ); - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - win_dft = hCPE->hStereoDft->win32ms; - dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; - - /* Preparing buffers in anticipation of an ACELP to TCX switch */ - j = 0; - for ( i = 0; i < memOffset; i++ ) - { - hStereoICBWE->memTransitionHB[0][i] = hStereoICBWE->memOutHB[0][i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - hStereoICBWE->memTransitionHB[1][i] = hStereoICBWE->memOutHB[1][i] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - j++; - } - - for ( i = 0; j < dftOvlLen; i++ ) - { - hStereoICBWE->memTransitionHB[0][memOffset + i] = outputHB[0][output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - hStereoICBWE->memTransitionHB[1][memOffset + i] = outputHB[1][output_frame - i - 1] * win_dft[STEREO_DFT32MS_STEP * ( dftOvlLen - 1 - j )]; - j++; - } - } - - hStereoICBWE->prev_refChanIndx_bwe = refChanIndx_bwe; - } - else - { - if ( last_core == ACELP_CORE ) - { - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - v_add( output[0], hStereoICBWE->memOutHB[hStereoICBWE->prev_refChanIndx_bwe], output[0], memOffset ); - v_add( output[1], hStereoICBWE->memOutHB[!hStereoICBWE->prev_refChanIndx_bwe], output[1], memOffset ); - } - else - { - /* This is generated in the ACELP frame and windowed. This process is akin to GenTransition for IC-BWE */ - v_add( output[0], hStereoICBWE->memTransitionHB[hStereoICBWE->prev_refChanIndx_bwe], output[0], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - v_add( output[1], hStereoICBWE->memTransitionHB[!hStereoICBWE->prev_refChanIndx_bwe], output[1], NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - - set_f( hStereoICBWE->memOutHB[0], 0, memOffset ); - set_f( hStereoICBWE->memOutHB[1], 0, memOffset ); - - set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->tdm_LRTD_flag && hStereoICBWE != NULL ) - { - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->last_element_mode == IVAS_CPE_DFT && last_core == ACELP_CORE ) - { - int16_t delay_tdbwe = NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); - - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - for ( i = 0; i < delay_tdbwe; i++ ) - { - output[n][NS2SA( output_Fs, STEREO_DFT32MS_OVL_NS ) - delay_tdbwe + i] += outputHB[0][i]; - } - } - /* reset BWE structs as they are only needed in the transition frame in MDCT Stereo */ - td_bwe_dec_init( hCPE->hCoreCoder[0]->hBWE_TD, -1, output_Fs ); - - fd_bwe_dec_init_flt( hCPE->hCoreCoder[0]->hBWE_FD ); - } - - if ( hCPE->element_mode == IVAS_CPE_DFT && ( max( hCPE->hStereoDft->td_gain[0], hCPE->hStereoDft->td_gain[1] ) > 0 ) ) - { - float win_in, win_out, tmp; - - win_dft = hCPE->hStereoDft->win32ms; - dftOvlLen = hCPE->hStereoDft->dft32ms_ovl; - - for ( i = 0; i < dftOvlLen; i++ ) - { - win_in = win_dft[STEREO_DFT32MS_STEP * i] * win_dft[STEREO_DFT32MS_STEP * i]; - win_out = 1 - win_in; - tmp = ( win_in * hCPE->hStereoDft->td_gain[0] + win_out * hCPE->hStereoDft->td_gain[1] ) * hCPE->hStereoDft->hb_stefi_sig[i]; - - output[0][i] += tmp; - output[1][i] -= tmp; - } - for ( i = dftOvlLen; i < output_frame; i++ ) - { - tmp = hCPE->hStereoDft->td_gain[0] * hCPE->hStereoDft->hb_stefi_sig[i]; - output[0][i] += tmp; - output[1][i] -= tmp; - } - } - - return; -} -#else void stereo_icBWE_decproc_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *output[CPE_CHANNELS], /* i/o: output synthesis Q11*/ @@ -2086,7 +1368,6 @@ void stereo_icBWE_decproc_fx( return; } -#endif /*-------------------------------------------------------------------* * stereo_icBWE_init_dec() @@ -2094,37 +1375,6 @@ void stereo_icBWE_decproc_fx( * Stereo (inter-channel) BWE mapping - decoder initialization *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_icBWE_init_dec( - STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ -) -{ - /* BWE ref channel */ - hStereoICBWE->refChanIndx_bwe = L_CH_INDX; - hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; - - /* SHB output memory */ - set_f( hStereoICBWE->memOutHB[0], 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); - set_f( hStereoICBWE->memOutHB[1], 0, NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_BWE_TOTAL_NS ) ); - - - /* SHB output memory */ - set_f( hStereoICBWE->memTransitionHB[0], 0, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); - set_f( hStereoICBWE->memTransitionHB[1], 0, NS2SA( 48000, STEREO_DFT32MS_OVL_NS ) ); - - /* inter-channel BWE spectral shape adj. */ - hStereoICBWE->prevSpecMapping = 0; - hStereoICBWE->prevgsMapping = 1.0f; - - hStereoICBWE->icbweM2Ref_prev = 1.0f; - - hStereoICBWE->prev_spIndx = 0; - hStereoICBWE->prev_gsIndx = 0; - - ic_bwe_dec_reset( hStereoICBWE ); - return; -} -#else void stereo_icBWE_init_dec_fx( STEREO_ICBWE_DEC_HANDLE hStereoICBWE /* i/o: Stereo inter-channel BWE handle */ ) @@ -2161,4 +1411,3 @@ void stereo_icBWE_init_dec_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_mdct_core_dec.c b/lib_dec/ivas_stereo_mdct_core_dec.c index 273a4c097..233dcc225 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec.c +++ b/lib_dec/ivas_stereo_mdct_core_dec.c @@ -40,608 +40,3 @@ #include "ivas_prot.h" #include "ivas_stat_dec.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * Local function prototypes - *-------------------------------------------------------------------------*/ - -static void apply_dmx_weights( CPE_DEC_HANDLE hCPE, float *x[CPE_CHANNELS][NB_DIV], int16_t transform_type_left[NB_DIV], int16_t transform_type_right[NB_DIV] ); - -static void run_min_stats( Decoder_State **sts, float *x[CPE_CHANNELS][NB_DIV] ); - - -/*-------------------------------------------------------------------* - * convert_coeffs_to_higher_res() - * - * convert MDCT coefficients to higher frequency resolution - * by applying high- and lowpass filters to subdivide bins - *-------------------------------------------------------------------*/ - -void convert_coeffs_to_higher_res( - const float *in1, /* i : first subframe input */ - const float *in2, /* i : second subframe input */ - float *out, /* o : converted output */ - const int16_t len /* i : length of subframes */ -) -{ - int16_t i; - float tmp1, tmp2; - - if ( in1 == out ) - { - for ( i = 0; i < len; i += 2 ) - { - tmp1 = 0.5f * ( in2[i] + in1[i] ); - tmp2 = 0.5f * ( in2[i] - in1[i] ); - out[2 * i] = tmp1; - out[2 * i + 1] = tmp2; - tmp1 = 0.5f * ( in2[i] - in1[i] ); - tmp2 = 0.5f * ( in2[i] + in1[i] ); - out[2 * i + 2] = tmp1; - out[2 * i + 3] = tmp2; - } - } - else - { - for ( i = 0; i < len; i += 2 ) - { - out[2 * i] = 0.5f * ( in2[i] + in1[i] ); - out[2 * i + 1] = 0.5f * ( in2[i] - in1[i] ); - out[2 * i + 2] = 0.5f * ( in2[i + 1] - in1[i + 1] ); - out[2 * i + 3] = 0.5f * ( in2[i + 1] + in1[i + 1] ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * stereo_mdct_dec_stereo() - * - * decode core and MDCT stereo information - *-------------------------------------------------------------------*/ - -static void stereo_mdct_dec_stereo( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - int16_t ms_mask[2][MAX_SFB] /* o : bandwise MS mask */ -) -{ - int16_t availableBits; - Decoder_State **sts; - - sts = hCPE->hCoreCoder; - - parse_stereo_from_bitstream( hCPE->hStereoMdct, hCPE->hCoreCoder, 0, hCPE->hStereoMdct->isSBAStereoMode, hCPE->hCoreCoder[0], ms_mask ); - - /*Split available bits between channels */ - availableBits = sts[0]->bits_frame_channel + sts[1]->bits_frame_channel - sts[0]->next_bit_pos - sts[0]->core * ( NF_GAIN_BITS + SMDCT_MINIMUM_ARITH_BITS ) - sts[1]->core * ( NF_GAIN_BITS + SMDCT_MINIMUM_ARITH_BITS ); - - splitAvailableBits( availableBits, hCPE->hStereoMdct->split_ratio, hCPE->hStereoMdct->isSBAStereoMode, &sts[0]->bits_frame_channel, &sts[1]->bits_frame_channel ); - - sts[0]->bits_frame_channel += sts[0]->core * SMDCT_MINIMUM_ARITH_BITS; - sts[1]->bits_frame_channel += sts[1]->core * SMDCT_MINIMUM_ARITH_BITS; - - sts[1]->bit_stream = &sts[0]->bit_stream[sts[0]->next_bit_pos + sts[0]->bits_frame_channel + sts[0]->core * NF_GAIN_BITS]; - - return; -} - - -/*-------------------------------------------------------------------* - * stereo_mdct_core_dec() - * - * MDCT stereo core/stereo decoder - *--------------------------------------------------------------------*/ - -void stereo_mdct_core_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *signal_out[CPE_CHANNELS], /* o : synthesis @internal_FS */ - float signal_outFB[CPE_CHANNELS][L_FRAME48k] /* o : synthesis @output_FS */ -) -{ - int16_t k, ch, nChannels; - Decoder_State *st, **sts; - - /* bitstream */ - int16_t param[CPE_CHANNELS][DEC_NPRM_DIV * NB_DIV]; - int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW]; - - float Aq[CPE_CHANNELS][( NB_SUBFR16k + 1 ) * ( M + 1 )]; - float *x[CPE_CHANNELS][NB_DIV]; - - /*needed to allocate N_MAX to prevent stereo switching crash */ - float x_0_buf[CPE_CHANNELS][N_MAX]; - float *x_0[CPE_CHANNELS][NB_DIV]; - - /* Concealment */ - int16_t bfi; - - /* Framing */ - int16_t L_frame[CPE_CHANNELS], L_frameTCX[CPE_CHANNELS], nSubframes[CPE_CHANNELS]; - - /* TCX */ - int16_t fUseTns[CPE_CHANNELS][NB_DIV]; - STnsData tnsData[CPE_CHANNELS][NB_DIV]; - int16_t tcx_offset[CPE_CHANNELS]; - int16_t tcx_offsetFB[CPE_CHANNELS]; - int16_t left_rect[CPE_CHANNELS]; - int16_t L_spec[CPE_CHANNELS]; - - /* stereo */ - int16_t ms_mask[NB_DIV][MAX_SFB]; - - int16_t p_param[CPE_CHANNELS][NB_DIV]; - int16_t nTnsBitsTCX10[CPE_CHANNELS][NB_DIV]; - float signal_outFB_tmp[CPE_CHANNELS][L_FRAME_PLUS]; - float signal_out_tmp[CPE_CHANNELS][L_FRAME_PLUS]; - push_wmops( "stereo_mdct_core_dec" ); - - /*--------------------------------------------------------------------------------* - * Initializations - *--------------------------------------------------------------------------------*/ - - sts = hCPE->hCoreCoder; - st = NULL; - - nChannels = CPE_CHANNELS; - bfi = sts[0]->bfi; - - for ( ch = 0; ch < nChannels; ch++ ) - { - /* Initialization or re-configuration of Stereo TCX */ - stereo_tcx_init_dec( sts[ch], 0, hCPE->last_element_mode ); - sts[ch]->hTcxDec->tnsActive[0] = sts[ch]->hTcxDec->tnsActive[1] = 0; - sts[ch]->enablePlcWaveadjust = 0; - set_zero( signal_out_tmp[ch], L_FRAME_PLUS ); - x[ch][0] = &signal_out_tmp[ch][0]; - x[ch][1] = &signal_out_tmp[ch][0] + L_FRAME_PLUS / 2; - - set_zero( x_0_buf[ch], N_MAX ); - x_0[ch][0] = &x_0_buf[ch][0]; - x_0[ch][1] = &x_0_buf[ch][0] + L_FRAME48k / 2; - nTnsBitsTCX10[ch][0] = 0; - nTnsBitsTCX10[ch][1] = 0; - - set_s( param_lpc[ch], 0, NPRM_LPC_NEW ); - } - set_s( ms_mask[0], 0, MAX_SFB ); - set_s( ms_mask[1], 0, MAX_SFB ); - - initMdctStereoDecData( hCPE->hStereoMdct, sts[0]->igf, sts[0]->hIGFDec->igfData.igfInfo.grid, hCPE->element_brate, sts[0]->bwidth ); - hCPE->hStereoMdct->isSBAStereoMode = ( ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); - if ( !bfi ) - { - ivas_mdct_dec_side_bits_frame_channel( hCPE, param_lpc, p_param, hCPE->hCoreCoder[0], nTnsBitsTCX10, param, 0, 0 ); - - if ( sts[0]->igf ) - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - mdct_read_IGF_bits( st, sts[0] ); - } - } - - stereo_mdct_dec_stereo( hCPE, ms_mask ); - } - else - { - mvs2s( hCPE->hStereoMdct->prev_ms_mask[0], ms_mask[0], MAX_SFB ); - mvs2s( hCPE->hStereoMdct->prev_ms_mask[1], ms_mask[1], MAX_SFB ); - - if ( sts[0]->core != TCX_10_CORE && sts[1]->core != TCX_10_CORE ) - { - hCPE->hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; - hCPE->hStereoMdct->IGFStereoMode[1] = SMDCT_DUAL_MONO; - } - else if ( sts[0]->core == TCX_10_CORE && sts[1]->core == TCX_10_CORE ) - { - hCPE->hStereoMdct->global_ild[0] = hCPE->hStereoMdct->global_ild[1]; - hCPE->hStereoMdct->mdct_stereo_mode[0] = hCPE->hStereoMdct->mdct_stereo_mode[1]; - hCPE->hStereoMdct->IGFStereoMode[0] = hCPE->hStereoMdct->IGFStereoMode[1]; - } - } - - ivas_mdct_core_invQ( hCPE, nTnsBitsTCX10, p_param, param_lpc, param, fUseTns, tnsData, x_0, x, Aq, ms_mask, 0 ); - - for ( ch = 0; ch < nChannels; ch++ ) - { - nSubframes[ch] = ( sts[ch]->core == TCX_10_CORE ) ? NB_DIV : 1; - for ( k = 0; k < nSubframes[ch]; k++ ) - { - L_spec[ch] = sts[ch]->hTcxCfg->tcx_coded_lines / nSubframes[ch]; - - init_tcx_info( sts[ch], sts[ch]->L_frame / nSubframes[ch], sts[ch]->hTcxDec->L_frameTCX / nSubframes[ch], k, bfi, &tcx_offset[ch], &tcx_offsetFB[ch], &L_frame[ch], &L_frameTCX[ch], &left_rect[ch], &L_spec[ch] ); - } - } - - /* IGF decoding */ - if ( sts[0]->igf || sts[1]->igf ) - { - if ( sts[0]->core != sts[1]->core ) - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - if ( !bfi || ( bfi && st->core != ACELP_CORE ) ) - { - for ( k = 0; k < nSubframes[ch]; k++ ) - { - /* mono or dual mono IGF decoding */ - decoder_tcx_IGF_mono( st, x[ch][k], L_frame[ch], left_rect[ch], bfi, k ); - } - } - } - } - else if ( sts[0]->core != ACELP_CORE ) - { - assert( nSubframes[0] == nSubframes[1] ); - - for ( k = 0; k < nSubframes[0]; k++ ) - { - if ( ( hCPE->hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO || hCPE->hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO ) && !hCPE->hStereoMdct->isSBAStereoMode ) - { - assert( ( sts[0]->core == sts[1]->core ) || ( hCPE->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) ); - - /* stereo IGF decoding */ - decoder_tcx_IGF_stereo( sts, hCPE->hStereoMdct, ms_mask, x, L_frame[0], left_rect[0], k, bfi, 0 /* MCT_flag */ ); - } - else - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - /* mono or dual mono IGF decoding */ - decoder_tcx_IGF_mono( st, x[ch][k], L_frame[ch], left_rect[ch], bfi, k ); - } - } - } - } - } - - /*--------------------------------------------------------------------------------* - * Stereo processing - *--------------------------------------------------------------------------------*/ - - if ( !bfi ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - for ( k = 0; k < nSubframes[ch]; k++ ) - { - float sns_int_scf[FDNS_NPTS]; - - sns_interpolate_scalefactors( &sns_int_scf[0], &Aq[ch][k * M], DEC ); - - if ( st->hTonalMDCTConc != NULL && ( ( k + 1 ) == nSubframes[ch] ) ) - { - TonalMDCTConceal_SaveFreqSignal_ivas( st->hTonalMDCTConc, x[ch][k], L_frameTCX[ch], L_frame[ch], &sns_int_scf[0], get_igf_startline_flt( st, L_frame[ch], L_frameTCX[ch] ) ); - } - } - - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, L_frameTCX[ch], ( st->hTcxDec->tcxltp_last_gain_unmodified_float > 0 ) ? st->old_fpitch_float : 0, bfi, bfi && st->tonal_mdct_plc_active ); - } - - mvs2s( ms_mask[0], hCPE->hStereoMdct->prev_ms_mask[0], MAX_SFB ); - mvs2s( ms_mask[1], hCPE->hStereoMdct->prev_ms_mask[1], MAX_SFB ); - } - - if ( ( !bfi || !( sts[0]->core == ACELP_CORE && sts[1]->core == ACELP_CORE ) ) && !hCPE->hStereoMdct->isSBAStereoMode ) - { - stereo_decoder_tcx( hCPE->hStereoMdct, ms_mask, x_0[1], x[0], x[1], &hCPE->hStereoMdct->mdct_stereo_mode[0], sts[0]->core, sts[1]->core, sts[0]->igf, L_frameTCX[0], L_frameTCX[1], 0, sts[0]->last_core, sts[1]->last_core, 0 ); - } - - ivas_mdct_core_tns_ns( hCPE, fUseTns, tnsData, x, Aq, 0 ); - - if ( st_ivas->renderer_type == RENDERER_MC_PARAMMC && ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - ivas_ls_setup_conversion_process_mdct_param_mc( st_ivas, x ); - } - - run_min_stats( sts, x ); - - if ( hCPE->nchan_out == 1 && ( !bfi || ( bfi && sts[0]->core != ACELP_CORE && sts[1]->core != ACELP_CORE ) ) ) - { - apply_dmx_weights( hCPE, x, sts[0]->transform_type, sts[1]->transform_type ); - } - - ivas_mdct_core_reconstruct( hCPE, x, signal_outFB_tmp, fUseTns, 0 ); - - mvr2r( signal_out_tmp[0], signal_out[0], L_FRAME48k ); - mvr2r( signal_out_tmp[1], signal_out[1], L_FRAME48k ); - - mvr2r( signal_outFB_tmp[0], signal_outFB[0], hCPE->hCoreCoder[0]->hTcxDec->L_frameTCX ); - mvr2r( signal_outFB_tmp[1], signal_outFB[1], hCPE->hCoreCoder[1]->hTcxDec->L_frameTCX ); - - pop_wmops(); - return; -} - - -/*-------------------------------------------------------------------* - * apply_dmx_weights() - * - * apply bandwise weighting for later dmx in case of mono output - *--------------------------------------------------------------------*/ - -static void apply_dmx_weights( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *x[CPE_CHANNELS][NB_DIV], /* i/o: MDCT Spectrum */ - int16_t transform_type_left[NB_DIV], /* i : indicate TCX5 for left ch */ - int16_t transform_type_right[NB_DIV] /* i : indicate TCX5 for right ch */ -) -{ - int16_t b, k, l, i, ch; - int16_t nsub, nsub2[2], nChannels; - int16_t transform_type[2][2]; - int16_t numCoeffs[2], frameSize; - int16_t tcx_10_only, w_idx; - int16_t start, stop, start_tcx5, stop_tcx5; - STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; - float mdst[CPE_CHANNELS][NB_DIV][L_FRAME48k]; - float convertRes[CPE_CHANNELS][L_FRAME48k]; - float *sig[CPE_CHANNELS][NB_DIV], *pTmp[CPE_CHANNELS][NB_DIV]; - - nChannels = CPE_CHANNELS; - frameSize = hCPE->hStereoMdct->stbParamsTCX20.sfbOffset[hCPE->hStereoMdct->stbParamsTCX20.sfbCnt]; - - transform_type[0][0] = transform_type_left[0]; - transform_type[0][1] = transform_type_left[1]; - transform_type[1][0] = transform_type_right[0]; - transform_type[1][1] = transform_type_right[1]; - - /* set overall frequency resolution of (sub)frame to maximum of (sub)frame, requires conversion if both channels are not the same */ - if ( transform_type[0][0] == TCX_20 || transform_type[1][0] == TCX_20 ) - { - /* use TCX20 band config for TCX20 in both channels and mixed frames */ - sfbConf = &hCPE->hStereoMdct->stbParamsTCX20; - nsub = nsub2[0] = nsub2[1] = 1; /* overall TCX 20 */ - tcx_10_only = 0; - } - else - { - /* use TCX10 band config only if none of the channels is TCX20 */ - sfbConf = &hCPE->hStereoMdct->stbParamsTCX10; - nsub = 2; - /* set resolution per subframe, subdivide again if subframe is TCX5 in both channels */ - nsub2[0] = ( transform_type[0][0] == TCX_5 && transform_type[1][0] == TCX_5 ) ? 2 : 1; - nsub2[1] = ( transform_type[0][1] == TCX_5 && transform_type[1][1] == TCX_5 ) ? 2 : 1; - tcx_10_only = 1; - } - - /* for subframes with only TCX5 in both channels number of coefficients is only half (in 2 quarterframes) */ - numCoeffs[0] = ( nsub2[0] == 1 ) ? sfbConf->sfbOffset[sfbConf->sfbCnt] : sfbConf->sfbOffset[sfbConf->sfbCnt] / 2; - numCoeffs[1] = ( nsub2[1] == 1 ) ? sfbConf->sfbOffset[sfbConf->sfbCnt] : sfbConf->sfbOffset[sfbConf->sfbCnt] / 2; - - /* initially, set pointers to input; if conversion occurs in (sub)frame, set to convertRes */ - sig[0][0] = pTmp[0][0] = x[0][0]; - sig[0][1] = pTmp[0][1] = x[0][1]; - sig[1][0] = pTmp[1][0] = x[1][0]; - sig[1][1] = pTmp[1][1] = x[1][1]; - - /* convert (sub)frames to higher frequency resolution */ - for ( ch = 0; ch < nChannels; ch++ ) - { - for ( k = 0; k < NB_DIV; k++ ) - { - if ( transform_type[ch][k] == TCX_5 && nsub2[k] == 1 ) - { - /* subframe is TCX5, but TCX10 or TCX20 in other channel -> convert channel with TCX5 to TCX10 resolution */ - pTmp[ch][k] = sig[ch][k] = convertRes[ch] + k * frameSize / 2; - convert_coeffs_to_higher_res( x[ch][k], x[ch][k] + frameSize / 4, pTmp[ch][k], frameSize / 4 ); - } - } - - if ( transform_type[ch][0] != TCX_20 && nsub == 1 ) - { - /* TCX20 and TCX10 in same frame -> convert channel with TCX10 to TCX20 resolution */ - sig[ch][0] = convertRes[ch]; - convert_coeffs_to_higher_res( pTmp[ch][0], pTmp[ch][1], sig[ch][0], frameSize / 2 ); - } - } - - /* MDST estimate */ - for ( ch = 0; ch < nChannels; ch++ ) - { - for ( k = 0; k < nsub; k++ ) - { - for ( l = 0; l < nsub2[k]; l++ ) - { - mdst[ch][k][l * numCoeffs[k]] = mdst[ch][k][( l + 1 ) * numCoeffs[k] - 1] = 0.f; - for ( i = l * numCoeffs[k] + 1; i < ( l + 1 ) * numCoeffs[k] - 1; i++ ) - { - mdst[ch][k][i] = sig[ch][k][i + 1] - sig[ch][k][i - 1]; - } - } - } - } - - /* compute and apply bandwise weigths for active downmix (similar to DFT Stereo) */ - stop_tcx5 = 0; - for ( b = 0; b < sfbConf->sfbCnt; b++ ) - { - float w[CPE_CHANNELS][4]; - - for ( k = 0; k < nsub; k++ ) - { - for ( l = 0; l < nsub2[k]; l++ ) - { - float sum_nrg_L = EPSILON, sum_nrg_R = EPSILON; - float dot_prod_real = EPSILON, dot_prod_imag = EPSILON; - float sum_nrg_Mid, sum_abs, dot_prod_abs; - - start = l * numCoeffs[k] + sfbConf->sfbOffset[b] / nsub2[k]; - stop = l * numCoeffs[k] + sfbConf->sfbOffset[b + 1] / nsub2[k]; - - /* compute band energies and cross correlation */ - for ( i = start; i < stop; i++ ) - { - sum_nrg_L += sig[0][k][i] * sig[0][k][i] + mdst[0][k][i] * mdst[0][k][i]; - sum_nrg_R += sig[1][k][i] * sig[1][k][i] + mdst[1][k][i] * mdst[1][k][i]; - dot_prod_real += sig[0][k][i] * sig[1][k][i] + mdst[0][k][i] * mdst[1][k][i]; - dot_prod_imag += mdst[0][k][i] * sig[1][k][i] - sig[0][k][i] * mdst[1][k][i]; - } - sum_nrg_Mid = max( 0.f, sum_nrg_L + sum_nrg_R + 2.f * dot_prod_real ); - sum_abs = sqrtf( sum_nrg_L ) + sqrtf( sum_nrg_R ) + EPSILON; - dot_prod_abs = sqrtf( dot_prod_real * dot_prod_real + dot_prod_imag * dot_prod_imag ); - - /* calculate weights */ - if ( hCPE->hStereoMdct->reverse_dmx == 0 ) - { - w[1][2 * k + l] = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; - w[0][2 * k + l] = w[1][2 * k + l] + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); - } - else - { - w[0][2 * k + l] = sqrtf( 0.5f * ( sum_nrg_L + sum_nrg_R ) + dot_prod_abs ) / sum_abs; - w[1][2 * k + l] = w[0][2 * k + l] + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); - } - } - } - - /* apply weights to channels with their original frequency resolutions */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( transform_type[ch][0] == TCX_20 ) - { - for ( i = sfbConf->sfbOffset[b]; i < sfbConf->sfbOffset[b + 1]; i++ ) - { - x[ch][0][i] *= w[ch][0]; - } - } - else - { - start = sfbConf->sfbOffset[b]; - stop = sfbConf->sfbOffset[b + 1]; - if ( !tcx_10_only ) /* TCX20 band config is used */ - { - start /= 2; - stop /= 2; - } - - for ( k = 0; k < NB_DIV; k++ ) - { - w_idx = ( nsub == 1 ) ? 0 : 2 * k; - if ( transform_type[ch][k] == TCX_10 ) - { - for ( i = start; i < stop; i++ ) - { - x[ch][k][i] *= w[ch][w_idx]; - } - } - else /* TCX_5 */ - { - start_tcx5 = stop_tcx5; - stop_tcx5 = ( stop + 1 ) / 2; - - for ( i = start_tcx5; i < stop_tcx5; i++ ) - { - x[ch][k][i] *= w[ch][w_idx]; - } - - if ( nsub2[k] == 2 ) - { - w_idx++; - } - - for ( i = start_tcx5; i < stop_tcx5; i++ ) - { - x[ch][k][i + ( frameSize >> 2 )] *= w[ch][w_idx]; - } - } - } - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * run_min_stats() - * - * run the minimum statistics noise estimation algorithm - * directly on the MDCT spectrum - *--------------------------------------------------------------------*/ - -static void run_min_stats( - Decoder_State **sts, - float *x[CPE_CHANNELS][NB_DIV] /* i/o: MDCT Spectrum */ -) -{ - int16_t ch, will_estimate_noise_on_channel[CPE_CHANNELS], save_VAD[CPE_CHANNELS]; - float power_spec[L_FRAME16k]; - float *spec_in; - - /* Check if the minimum statistics would run on the respective channels. They are run on inactive TCX20 channels */ - will_estimate_noise_on_channel[0] = sts[0]->core == TCX_20_CORE && !sts[0]->VAD; - will_estimate_noise_on_channel[1] = sts[1]->core == TCX_20_CORE && !sts[1]->VAD; - - save_VAD[0] = sts[0]->VAD; - save_VAD[1] = sts[1]->VAD; - - /* The first loop calculates the power spectra needed in the minimum statistics (MS) noise estimation. This is only needed if the MS - would run at all on at least one of the channels. If they run on both channels, we need to calculate two distinct power spectra - for the two different channels. If they would only run on one of the channels, the VAD of the other one is patched so that the MS will - still run. This other channel then uses the power spectrum of the other channel to run the MS. This is done to keep continuity and synchronicity - between the two noise levels and silently assumes that the background noise is somehow diffuse and at leas partly shared between the channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - Decoder_State *st; - st = sts[ch]; - - if ( !sts[0]->bfi && ( will_estimate_noise_on_channel[0] || will_estimate_noise_on_channel[1] ) ) - { - /* if noise estimation is expected to run on this channel, compute power spectrum from it, - otherwise, use other channel's signal */ - if ( will_estimate_noise_on_channel[ch] ) - { - spec_in = &x[ch][0][0]; - } - else - { - spec_in = &x[( ch + 1 ) % 2][0][0]; - /* patch VAD to zero so that estimation runs, will later be restored */ - st->VAD = 0; - } - - /* Compute power spectrum twice if estimation will run on both channels. If only on one channel, it is - computed only once (for ch == 0) and not again in the second run sive the outcome will be the same anyway */ - if ( ( will_estimate_noise_on_channel[0] == will_estimate_noise_on_channel[1] ) || ch == 0 ) - { - /* calculate power spectrum from MDCT coefficients and estimated MDST coeffs */ - power_spec[0] = spec_in[0] * spec_in[0]; - power_spec[L_FRAME16k - 1] = spec_in[L_FRAME16k - 1] * spec_in[L_FRAME16k - 1]; - for ( int16_t i = 1; i < L_FRAME16k - 1; i++ ) - { - float mdst; - mdst = spec_in[i + 1] - spec_in[i - 1]; - power_spec[i] = spec_in[i] * spec_in[i] + mdst * mdst; - } - } - - noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, power_spec ); - - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; - - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - } - - if ( will_estimate_noise_on_channel[0] || will_estimate_noise_on_channel[1] || st->bfi ) - { - ApplyFdCng( NULL, st->bfi ? NULL : power_spec, NULL, NULL, st, st->bfi, 0 ); - } - - /* restore VAD (see above) */ - st->VAD = save_VAD[ch]; - } - - return; -} -#endif diff --git a/lib_dec/ivas_stereo_mdct_core_dec_fx.c b/lib_dec/ivas_stereo_mdct_core_dec_fx.c index 2e46e04f5..79b88b88c 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec_fx.c +++ b/lib_dec/ivas_stereo_mdct_core_dec_fx.c @@ -33,7 +33,6 @@ #include #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include #include "prot.h" #include "cnst.h" @@ -1103,4 +1102,3 @@ static void run_min_stats_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_mdct_stereo_dec.c b/lib_dec/ivas_stereo_mdct_stereo_dec.c index 91c192c5b..a65f36f41 100644 --- a/lib_dec/ivas_stereo_mdct_stereo_dec.c +++ b/lib_dec/ivas_stereo_mdct_stereo_dec.c @@ -38,300 +38,17 @@ #include "ivas_prot.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void inverseBwMS( const int16_t startLine, const int16_t stopLine, float x0[], float x1[], const float norm_fac ); -#else static void inverseBwMS_fx( const Word16 startLine, const Word16 stopLine, Word32 x0[], Word32 x1[], const Word32 norm_fac ); -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * parse_stereo_from_bitstream - * - * - *-------------------------------------------------------------------*/ - -void parse_stereo_from_bitstream( - STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo decoder structure */ - Decoder_State **sts, /* i/o: decoder state structure */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0)*/ - const int16_t isSBAStereoMode, /* i : flag core coding for SBA */ - Decoder_State *st0, /* i/o: decoder state structure for Bstr*/ - int16_t ms_mask[NB_DIV][MAX_SFB] /* o : bandwise MS mask */ -) -{ - int16_t i, k, nSubframes, mdct_stereo_mode; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - - if ( !isSBAStereoMode ) - { - nSubframes = ( sts[0]->core == TCX_10_CORE || ( sts[0]->core != sts[1]->core ) ) ? NB_DIV : 1; - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - if ( sts[0]->last_core_from_bs == ACELP_CORE ) - { - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - if ( hStereoMdct->use_itd ) - { - int16_t I; - - hStereoMdct->itd_mode = get_next_indice( st0, STEREO_DFT_ITD_MODE_NBITS ); - /*(*nb_bits) += STEREO_DFT_ITD_MODE_NBITS;*/ /*ITD mode flag: 1bit*/ - - hStereoMdct->itd = 0.f; - if ( hStereoMdct->itd_mode ) - { - /*(*nb_bits) += */ read_itd( st0, &I ); - stereo_dft_dequantize_itd( &I, &hStereoMdct->itd, st0->output_Fs ); - } - } - - for ( k = 0; k < nSubframes; k++ ) - { - mdct_stereo_mode = get_next_indice( st0, 1 ); - if ( mdct_stereo_mode ) - { - mdct_stereo_mode = 1 + get_next_indice( st0, 1 ); - } - switch ( mdct_stereo_mode ) - { - case 0: - hStereoMdct->mdct_stereo_mode[k] = SMDCT_DUAL_MONO; - break; - case 1: - hStereoMdct->mdct_stereo_mode[k] = SMDCT_MS_FULL; - break; - case 2: - hStereoMdct->mdct_stereo_mode[k] = SMDCT_BW_MS; - break; - default: - assert( !"Not supported stereo mode\n" ); - } - - if ( !mct_on ) - { - if ( sts[0]->core == sts[1]->core || k == 0 ) - { - hStereoMdct->global_ild[k] = get_next_indice( st0, SMDCT_GLOBAL_ILD_BITS ); - assert( ( hStereoMdct->global_ild[k] > 0 ) && ( hStereoMdct->global_ild[k] < SMDCT_ILD_RANGE ) ); - } - else - { - hStereoMdct->global_ild[1] = hStereoMdct->global_ild[0]; - } - } - - set_s( ms_mask[k], ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_MS_FULL ) ? 1 : 0, sfbConf->nBandsStereoCore ); - - if ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_BW_MS ) - { - for ( i = 0; i < sfbConf->nBandsStereoCore; i++ ) - { - ms_mask[k][i] = get_next_indice( st0, 1 ); - } - } - - if ( st0->igf ) - { - mdct_stereo_mode = get_next_indice( st0, 1 ); - if ( mdct_stereo_mode ) - { - mdct_stereo_mode = 1 + get_next_indice( st0, 1 ); - } - - switch ( mdct_stereo_mode ) - { - case 0: - hStereoMdct->IGFStereoMode[k] = SMDCT_DUAL_MONO; - break; - case 1: - hStereoMdct->IGFStereoMode[k] = SMDCT_MS_FULL; - break; - case 2: - hStereoMdct->IGFStereoMode[k] = SMDCT_BW_MS; - break; - default: - assert( !"Not supported stereo mode\n" ); - } - - set_s( &ms_mask[k][sfbConf->nBandsStereoCore], ( hStereoMdct->IGFStereoMode[k] == SMDCT_MS_FULL ) ? 1 : 0, sfbConf->sfbCnt - sfbConf->nBandsStereoCore ); - - if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) - { - for ( i = sfbConf->nBandsStereoCore; i < sfbConf->sfbCnt; i++ ) - { - ms_mask[k][i] = get_next_indice( st0, 1 ); - } - } - } - else - { - hStereoMdct->IGFStereoMode[k] = SMDCT_DUAL_MONO; - } - } - } - - if ( !mct_on ) - { - hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; /* Equal bits to both channels */ - hStereoMdct->split_ratio = get_next_indice( st0, SMDCT_NBBITS_SPLIT_RATIO ); - - assert( hStereoMdct->split_ratio > 0 ); - } - - - return; -} - - -/*-------------------------------------------------------------------* - * stereo_decoder_tcx() - * - * apply stereo processing (inverse MS and global ILD) - *-------------------------------------------------------------------*/ - -#define NF_RED_FAC 0.75f - -void stereo_decoder_tcx( - STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: MDCT stereo decoder structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - float *spec_r_0[NB_DIV], /* i/o: spectrum right channel */ - float *spec_l[], /* i/o: spectrum left channel [NB_DIV][N] */ - float *spec_r[], /* i/o: spectrum right channel [NB_DIV][N] */ - const int16_t mdct_stereo_mode[], /* i : stereo mode (FB/band wise MS, dual mono */ - const int16_t core_l, /* i : core for left channel (TCX20/TCX10) */ - const int16_t core_r, /* i : core for right channel (TCX20/TCX10) */ - const int16_t igf, /* i : flag for IGF activity */ - const int16_t L_frameTCX_l, /* i : TCX frame length of left channel */ - const int16_t L_frameTCX_r, /* i : TCX frame length of right channel */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ - const int16_t last_core_l, /* i : last core for left channel */ - const int16_t last_core_r, /* i : last core for right channel */ - const int16_t tmp_plc_upmix /* i : indicates temp upmix for PLC decision */ -) -{ - int16_t i, k, sfb, nSubframes; - STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; - float nrgRatio; - - nSubframes = 2; - if ( ( core_l <= TCX_20_CORE && core_r <= TCX_20_CORE ) || tmp_plc_upmix ) - { - nSubframes = 1; - } - - for ( k = 0; k < nSubframes; k++ ) - { - sfbConf = ( core_l == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - - if ( last_core_l == ACELP_CORE || last_core_r == ACELP_CORE ) - { - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - if ( mdct_stereo_mode[k] == SMDCT_MS_FULL ) - { - for ( i = 0; i < sfbConf->sfbOffset[sfbConf->nBandsStereoCore]; i++ ) - { - if ( spec_r_0[k][i] == 0.0f ) - { - spec_r[k][i] *= NF_RED_FAC; - } - } - inverseMS( sfbConf->sfbOffset[sfbConf->nBandsStereoCore], spec_l[k], spec_r[k], SQRT2_OVER_2 ); - } - else if ( mdct_stereo_mode[k] == SMDCT_BW_MS ) - { - for ( sfb = 0; sfb < sfbConf->nBandsStereoCore; sfb++ ) - { - if ( ms_mask[k][sfb] ) - { - for ( i = sfbConf->sfbOffset[sfb]; i < sfbConf->sfbOffset[sfb + 1]; i++ ) - { - if ( spec_r_0[k][i] == 0.0f ) - { - spec_r[k][i] *= NF_RED_FAC; - } - } - inverseBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], spec_l[k], spec_r[k], SQRT2_OVER_2 ); - } - } - } - - if ( igf ) - { - if ( hStereoMdct->IGFStereoMode[k] == SMDCT_MS_FULL ) - { - for ( i = sfbConf->sfbOffset[sfbConf->nBandsStereoCore]; i < sfbConf->sfbOffset[sfbConf->sfbCnt]; i++ ) - { - if ( spec_r_0[k][i] == 0.0f ) - { - spec_r[k][i] *= NF_RED_FAC; - } - } - inverseMS( sfbConf->sfbOffset[sfbConf->sfbCnt] - sfbConf->sfbOffset[sfbConf->nBandsStereoCore], &spec_l[k][sfbConf->sfbOffset[sfbConf->nBandsStereoCore]], &spec_r[k][sfbConf->sfbOffset[sfbConf->nBandsStereoCore]], SQRT2_OVER_2 ); - } - else if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) - { - for ( sfb = sfbConf->nBandsStereoCore; sfb < sfbConf->sfbCnt; sfb++ ) - { - if ( ms_mask[k][sfb] ) - { - for ( i = sfbConf->sfbOffset[sfb]; i < sfbConf->sfbOffset[sfb + 1]; i++ ) - { - if ( spec_r_0[k][i] == 0.0f ) - { - spec_r[k][i] *= NF_RED_FAC; - } - } - inverseBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], spec_l[k], spec_r[k], SQRT2_OVER_2 ); - } - } - } - } - - if ( !mct_on ) - { - nrgRatio = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[k] - 1; /* nrgRatio = nrg[1]/nrg[0] */ - hStereoMdct->smooth_ratio = 0.8f * hStereoMdct->smooth_ratio + 0.2f * nrgRatio; - /* set flag to reverse dmx computation in case of right-side panning, only relevant for mono output */ - if ( hStereoMdct->smooth_ratio > 1.3f ) - { - hStereoMdct->reverse_dmx = 1; - } - else if ( hStereoMdct->smooth_ratio < 0.9f ) - { - hStereoMdct->reverse_dmx = 0; - } - - if ( ( nrgRatio > 1.0f ) && ( k < ( ( core_r == TCX_10_CORE ) ? NB_DIV : 1 ) ) ) - { - v_multc( spec_r[k], nrgRatio, spec_r[k], L_frameTCX_r ); - } - else if ( ( nrgRatio < 1.0f ) && ( k < ( ( core_l == TCX_10_CORE ) ? NB_DIV : 1 ) ) ) - { - v_multc( spec_l[k], 1.0f / nrgRatio, spec_l[k], L_frameTCX_l ); - } - } - } /* for k */ - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED #define NF_RED_FAC_FIXED 1610612736 // Q31 #define SQRT2_OVER_2_FIXED 1518500250 // Q31 #define POINT_8_FIXED 1717986918 // Q31 @@ -784,56 +501,6 @@ void stereo_decoder_tcx_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * inverseBwMS() - * - * Band-wise M/S stereo processing - *-------------------------------------------------------------------*/ - -static void inverseBwMS( - const int16_t startLine, /* i : start line of sfb */ - const int16_t stopLine, /* i : stop line of sfb */ - float x0[], /* i/o: mid/left channel coefficients */ - float x1[], /* i/o: side/right channel coefficients */ - const float norm_fac /* i : normalization factor */ -) -{ - int16_t j; - float tmpValue; - - for ( j = startLine; j < stopLine; j++ ) - { - tmpValue = x0[j]; - x0[j] = ( x0[j] + x1[j] ) * norm_fac; - x1[j] = ( tmpValue - x1[j] ) * norm_fac; - } - - return; -} - - -/*-------------------------------------------------------------------* - * inverseMS() - * - * M/S stereo processing - *-------------------------------------------------------------------*/ - -void inverseMS( - const int16_t L_frame, /* i : frame length */ - float x0[], /* i/o: mid/left channel coefficients */ - float x1[], /* i/o: side/right channel coefficients */ - const float norm_fac /* i : normalization factor */ -) -{ - inverseBwMS( 0, L_frame, x0, x1, norm_fac ); - - return; -} -#endif /*-------------------------------------------------------------------* @@ -842,7 +509,6 @@ void inverseMS( * Initialize MDCT stereo decoder configuration *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void initMdctStereoDecData_fx( STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ const Word16 igf, /* i : flag indicating IGF activity Q0*/ @@ -889,48 +555,6 @@ void initMdctStereoDecData_fx( return; } -#else -void initMdctStereoDecData( - STEREO_MDCT_DEC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ - const int16_t igf, /* i : flag indicating IGF activity */ - const H_IGF_GRID igfGrid, /* i : IGF grid configuration */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - int16_t tcx_coded_lines; - - tcx_coded_lines = getNumTcxCodedLines( bwidth ); - - /*Initialize sfb parameteres for TCX20 */ - stereo_mdct_init_bands( tcx_coded_lines, TCX_20_CORE, element_brate, igf, &igfGrid[IGF_GRID_LB_NORM], &hStereoMdct->stbParamsTCX20.sfbOffset[0], &hStereoMdct->stbParamsTCX20.sfbCnt ); - - /*Initialize sfb parameteres for TCX10 */ - stereo_mdct_init_bands( tcx_coded_lines, TCX_10_CORE, element_brate, igf, &igfGrid[IGF_GRID_LB_SHORT], &hStereoMdct->stbParamsTCX10.sfbOffset[0], &hStereoMdct->stbParamsTCX10.sfbCnt ); - - /*Initialize sfb parameteres for transition frames */ - stereo_mdct_init_bands( tcx_coded_lines, -1, element_brate, igf, &igfGrid[IGF_GRID_LB_TRAN], &hStereoMdct->stbParamsTCX20afterACELP.sfbOffset[0], &hStereoMdct->stbParamsTCX20afterACELP.sfbCnt ); - - if ( igf ) - { - /* calculate the igf start band from the igf start line */ - stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX20 ), 1.0f, bwidth, element_brate ); - stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX10 ), 0.5f, bwidth, element_brate ); - stereo_mdct_init_igf_start_band( &( hStereoMdct->stbParamsTCX20afterACELP ), 1.25f, bwidth, element_brate ); - } - else - { - hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; - hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; - hStereoMdct->stbParamsTCX20afterACELP.sfbIgfStart = -1; - hStereoMdct->stbParamsTCX10.nBandsStereoCore = hStereoMdct->stbParamsTCX10.sfbCnt; - hStereoMdct->stbParamsTCX20.nBandsStereoCore = hStereoMdct->stbParamsTCX20.sfbCnt; - hStereoMdct->stbParamsTCX20afterACELP.nBandsStereoCore = hStereoMdct->stbParamsTCX20afterACELP.sfbCnt; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -939,7 +563,6 @@ void initMdctStereoDecData( * Allocate and initialize structures for MDCT-Stereo DTX operation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error initMdctStereoDtxData_fx( CPE_DEC_HANDLE hCPE /* i/o: CPE handle */ ) @@ -997,67 +620,6 @@ ivas_error initMdctStereoDtxData_fx( return error; } -#else -ivas_error initMdctStereoDtxData( - CPE_DEC_HANDLE hCPE /* i/o: CPE handle */ -) -{ - Word16 ch; - ivas_error error; - - error = IVAS_ERR_OK; - move16(); - - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - DEC_CORE_HANDLE st = hCPE->hCoreCoder[ch]; - - IF( st->hFdCngDec == NULL ) - { - /* Create FD_CNG instance */ - IF( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Init FD-CNG */ - initFdCngDec( st ); -#ifdef IVAS_FLOAT_FIXED - st->cldfbSyn->scale = (Word16) ( st->cldfbSyn->scale_flt * ( 1u << norm_s( (Word16) st->cldfbSyn->scale_flt ) ) ); - initFdCngDec_ivas_fx( st, st->cldfbSyn->scale ); -#endif - } - - IF( EQ_16( st->first_CNG, 0 ) ) - { - IF( EQ_16( ch, 1 ) && st->cng_sba_flag ) - { - st->hFdCngDec->hFdCngCom->seed = add( st->hFdCngDec->hFdCngCom->seed, 3 ); - } - } - - IF( st->cldfbAna == NULL ) - { - /* open analysis for max. sampling rate 48kHz */ - IF( ( error = openCldfb_ivas( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - IF( st->cldfbBPF == NULL ) - { - /* open analysis BPF for max. internal sampling rate 16kHz */ - IF( ( error = openCldfb_ivas( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - return error; -} -#endif /*-------------------------------------------------------------------* @@ -1066,7 +628,6 @@ ivas_error initMdctStereoDtxData( * Synchronize channels in SID frame in MDCT stereo *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void synchonize_channels_mdct_sid_fx( Decoder_State *sts[CPE_CHANNELS], /* i/o: decoder state structure */ const Word16 n /* i : channel number Q0*/ @@ -1110,44 +671,6 @@ void synchonize_channels_mdct_sid_fx( return; } -#else -void synchonize_channels_mdct_sid( - Decoder_State *sts[CPE_CHANNELS], /* i/o: decoder state structure */ - const int16_t n /* i : channel number */ -) -{ - Decoder_State *st; - - st = sts[n]; - - if ( st->element_mode == IVAS_CPE_MDCT && st->total_brate == SID_2k40 ) - { - if ( n == 1 ) - { - /* synchronize channels */ - sts[1]->L_frame = sts[0]->L_frame; - sts[1]->cng_type = sts[0]->cng_type; - sts[1]->bwidth = sts[0]->bwidth; - sts[0]->hFdCngDec->hFdCngCom->coherence_flt = sts[1]->hFdCngDec->hFdCngCom->coherence_flt; /* coherence is stored in sts[1] - see ivas_decision_matrix_dec() */ - sts[0]->hFdCngDec->hFdCngCom->no_side_flag = sts[1]->hFdCngDec->hFdCngCom->no_side_flag; - - /* configure when there is a switching from DFT CNG to MDCT CNG */ - if ( sts[0]->first_CNG == 1 && sts[1]->first_CNG == 0 ) - { - configureFdCngDec( st->hFdCngDec, st->bwidth, st->element_brate, st->L_frame, st->last_L_frame, st->element_mode ); - } - } - - if ( sts[0]->first_CNG == 0 ) - { - /* configure CNG after reading first side info from SID to get correct values for L_frame and bwidth if first SID is also first valid frame */ - configureFdCngDec( st->hFdCngDec, st->bwidth, st->element_brate, st->L_frame, st->last_L_frame, st->element_mode ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -1158,7 +681,6 @@ void synchonize_channels_mdct_sid( * between active/inactive coding in MDCT-Stereo DTX *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED // helper function static void update_exp( Word16 *a_exp, Word16 *b_exp, Word16 *buff_a, Word16 *buff_b, Word16 legth ); @@ -1403,81 +925,6 @@ void updateBuffersForDmxMdctStereo_fx( return; } -#else -void updateBuffersForDmxMdctStereo( - CPE_DEC_HANDLE hCPE, /* i/o: CPE handle */ - const int16_t output_frame, /* i : output frame length */ - float *output[CPE_CHANNELS], /* i/o: decoder output */ - float synth[CPE_CHANNELS][L_FRAME48k] /* i/o: decoder synthesis */ -) -{ - int16_t delay_buf_out_len, tcxltp_mem_in_len, delta, i; - Decoder_State *sts[CPE_CHANNELS]; - - sts[0] = hCPE->hCoreCoder[0]; - sts[1] = hCPE->hCoreCoder[1]; - - /* synch buffers for inactive frames, but not for transition frames */ - if ( hCPE->last_element_brate <= IVAS_SID_5k2 ) - { - mvr2r( output[0], output[1], output_frame ); - mvr2r( synth[0], synth[1], output_frame ); - } - - if ( hCPE->element_brate == IVAS_SID_5k2 && hCPE->last_element_brate > IVAS_SID_5k2 ) - { - /* in the first SID frame after an active frame, create mid noise shape here, in SID frames that follow inactive frames, it is done directly in the SID decoding since the mid shape is being used in CNG then */ - for ( int16_t p = 0; p < sts[0]->hFdCngDec->hFdCngCom->npart; p++ ) - { - sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] = 0.5f * ( sts[0]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] + sts[1]->hFdCngDec->hFdCngCom->sidNoiseEst_flt[p] ); - } - } - - /* for transition of active->inactive frame, apply passive downmix on buffers */ - if ( hCPE->last_element_brate <= IVAS_SID_5k2 ) - { - delta = 1; - if ( output_frame == L_FRAME16k ) - { - delta = 2; - } - else if ( output_frame == L_FRAME32k ) - { - delta = 4; - } - else if ( output_frame == L_FRAME48k ) - { - delta = 6; - } - - delay_buf_out_len = delta * HQ_DELAY_COMP; - tcxltp_mem_in_len = NS2SA( sts[0]->output_Fs, TCXLTP_DELAY_NS ); - - assert( delay_buf_out_len > tcxltp_mem_in_len ); - - for ( i = 0; i < tcxltp_mem_in_len; i++ ) - { - sts[0]->hTcxLtpDec->tcxltp_mem_in_float[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_in_float[i] + sts[1]->hTcxLtpDec->tcxltp_mem_in_float[i] ); - sts[0]->delay_buf_out[i] = INV_SQRT2 * ( sts[0]->delay_buf_out[i] + sts[1]->delay_buf_out[i] ); - sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); - sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out_float[i] ); - } - for ( ; i < delay_buf_out_len; i++ ) - { - sts[0]->delay_buf_out[i] = INV_SQRT2 * ( sts[0]->delay_buf_out[i] + sts[1]->delay_buf_out[i] ); - sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); - sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out_float[i] ); - } - for ( ; i < output_frame; i++ ) - { - sts[0]->hHQ_core->old_out[i] = INV_SQRT2 * ( sts[0]->hHQ_core->old_out[i] + sts[1]->hHQ_core->old_out[i] ); - sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] = INV_SQRT2 * ( sts[0]->hTcxLtpDec->tcxltp_mem_out_float[i] + sts[1]->hTcxLtpDec->tcxltp_mem_out_float[i] ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -1487,60 +934,6 @@ void updateBuffersForDmxMdctStereo( * between active/inactive coding in MDCT-Stereo DTX *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void applyDmxMdctStereo( - const CPE_DEC_HANDLE hCPE, /* i : CPE handle */ - float *output[CPE_CHANNELS], /* i/o: core decoder output */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t crossfade_len, i; - int16_t dmx_len; - float fade, step; - - step = 1.f; - fade = 1.f; - dmx_len = output_frame; - - if ( hCPE->last_element_brate <= IVAS_SID_5k2 ) - { - crossfade_len = NS2SA( hCPE->hCoreCoder[0]->output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); - step /= crossfade_len; - } - /* for first inactive CNG frame after active decoding we have to do a fade-OUT FROM the passive DMX */ - else if ( hCPE->element_brate <= IVAS_SID_5k2 && hCPE->last_element_brate > IVAS_SID_5k2 ) - { - crossfade_len = output_frame / 4; - step /= -crossfade_len; - fade = 0.f; - dmx_len = crossfade_len; - } - else if ( hCPE->last_element_mode == IVAS_CPE_DFT && hCPE->last_element_brate <= IVAS_32k ) - { - crossfade_len = NS2SA( hCPE->hCoreCoder[0]->output_Fs, DELAY_CLDFB_NS ); - step /= crossfade_len; - } - else - { - crossfade_len = 0; - } - - /* apply crossfade */ - for ( i = 0; i < crossfade_len; i++ ) - { - output[0][i] = output[0][i] * fade + ( output[0][i] + output[1][i] ) * INV_SQRT2 * ( 1 - fade ); - fade -= step; - } - - /* apply passive downmix on all-active-frame part */ - for ( ; i < dmx_len; i++ ) - { - output[0][i] = ( output[0][i] + output[1][i] ) * INV_SQRT_2; - } - - return; -} -#else void applyDmxMdctStereo_fx( const CPE_DEC_HANDLE hCPE, /* i : CPE handle */ Word32 *output_fx[CPE_CHANNELS], /* i/o: core decoder output q_out*/ @@ -1655,4 +1048,3 @@ void applyDmxMdctStereo_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_switching_dec.c b/lib_dec/ivas_stereo_switching_dec.c index 2f94715af..5d5b38d4d 100644 --- a/lib_dec/ivas_stereo_switching_dec.c +++ b/lib_dec/ivas_stereo_switching_dec.c @@ -42,17 +42,12 @@ #include "wmc_auto.h" #include #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define DFT2TD_CORR_THRESH 0.9f -#endif #define DFT2TD_CORR_THRESH_FX 1932735283 /*-------------------------------------------------------------------* @@ -61,81 +56,6 @@ * Allocate CoreCoder TCX modules *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error allocate_CoreCoder_TCX( - DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ -) -{ -#ifndef IVAS_FLOAT_FIXED - if ( st->hTcxDec == NULL ) - { - if ( ( st->hTcxDec = (TCX_DEC_HANDLE) malloc( sizeof( TCX_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxDec" ) ); - } - - reset_tcx_overl_buf( st->hTcxDec ); - - set_zero( st->hTcxDec->syn_OverlFB_float, L_FRAME48k / 2 ); - set_zero( st->hTcxDec->old_synth_float, OLD_SYNTH_INTERNAL_DEC ); - set_zero( st->hTcxDec->synth_history, L_PROT48k + L_FRAME48k ); - } -#endif - if ( st->hTcxCfg == NULL ) - { - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for hTcxCfg" ) ); - } - } - - /* allocated TCX-LTP structure for second channel */ - if ( st->hTcxLtpDec == NULL ) - { - if ( ( st->hTcxLtpDec = (TCX_LTP_DEC_HANDLE) malloc( sizeof( TCX_LTP_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TCX-LTP handle\n" ) ); - } - - tcxltp_dec_init( st->hTcxLtpDec, 0, st->last_codec_mode, st->element_mode, st->pit_max, st->sr_core ); - } - - /* allocate HQ structure */ - if ( st->hHQ_core == NULL ) - { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for HQ core\n" ) ); - } - - HQ_core_dec_init_flt( st->hHQ_core ); - } - - if ( st->hIGFDec == NULL ) - { - if ( ( st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) malloc( sizeof( IGFDEC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IGF\n" ) ); - } - - st->igf = 0; - init_igf_dec_flt( st->hIGFDec ); - } - - if ( st->hTonalMDCTConc == NULL ) - { - if ( ( st->hTonalMDCTConc = (TonalMDCTConcealPtr) malloc( sizeof( TonalMDCTConceal_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for TonalMDCTConcealment\n" ) ); - } - } - - st->last_con_tcx = 0; - st->hTonalMDCTConc->nSamples = 0; - - return IVAS_ERR_OK; -} -#else static ivas_error allocate_CoreCoder_TCX_fx( DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ ) @@ -213,7 +133,6 @@ static ivas_error allocate_CoreCoder_TCX_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -222,87 +141,6 @@ static ivas_error allocate_CoreCoder_TCX_fx( * Allocate CoreCoder modules *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error allocate_CoreCoder( - DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ -) -{ - ivas_error error; - - error = IVAS_ERR_OK; - - if ( st->hGSCDec == NULL ) - { - if ( ( st->hGSCDec = (GSC_DEC_HANDLE) malloc( sizeof( GSC_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); - } - - GSC_dec_init_ivas( st->hGSCDec ); - } - - if ( st->hPFstat == NULL ) - { - if ( ( st->hPFstat = (PFSTAT_HANDLE) malloc( sizeof( PFSTAT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for NB/formant postflter\n" ) ); - } - - Init_post_filter_ivas( st->hPFstat ); - st->psf_lp_noise = 0.0f; - } - - if ( st->hMusicPF == NULL ) - { - if ( ( st->hMusicPF = (MUSIC_POSTFILT_HANDLE) malloc( sizeof( MUSIC_POSTFILT_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LD music postflter\n" ) ); - } - - music_postfilt_init_flt( st->hMusicPF ); - } - - if ( st->hBPF == NULL ) - { - if ( ( st->hBPF = (BPF_DEC_HANDLE) malloc( sizeof( BPF_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for BPF\n" ) ); - } - - bass_psfilter_init( st->hBPF ); - } - - if ( st->hBWE_zero == NULL ) - { - if ( ( st->hBWE_zero = (ZERO_BWE_DEC_HANDLE) malloc( sizeof( ZERO_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for zero BWE\n" ) ); - } - - hf_synth_init( st->hBWE_zero ); - } - - if ( st->cldfbAna == NULL ) - { - /* open analysis for max. sampling rate 48kHz */ - if ( ( error = openCldfb_ivas( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st->cldfbBPF == NULL ) - { - /* open analysis BPF for max. internal sampling rate 16kHz */ - if ( ( error = openCldfb_ivas( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#else static ivas_error allocate_CoreCoder_fx( DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ ) @@ -386,7 +224,6 @@ static ivas_error allocate_CoreCoder_fx( return error; } -#endif /*-------------------------------------------------------------------* @@ -433,56 +270,6 @@ static void deallocate_CoreCoder_TCX( * Deallocate CoreCoder modules *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void deallocate_CoreCoder( - DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ -) -{ - if ( st->hGSCDec != NULL ) - { - free( st->hGSCDec ); - st->hGSCDec = NULL; - } - - if ( st->hPFstat != NULL ) - { - free( st->hPFstat ); - st->hPFstat = NULL; - } - - if ( st->hMusicPF != NULL ) - { - free( st->hMusicPF ); - st->hMusicPF = NULL; - } - - if ( st->hBPF != NULL ) - { - free( st->hBPF ); - st->hBPF = NULL; - } - - if ( st->hBWE_zero != NULL ) - { - free( st->hBWE_zero ); - st->hBWE_zero = NULL; - } - - /* CLDFB BPF & resampling tools */ - if ( st->element_mode != IVAS_CPE_MDCT ) - { - deleteCldfb_ivas( &st->cldfbAna ); /* delete analysis at max. sampling rate 48kHz */ - deleteCldfb_ivas( &st->cldfbBPF ); /* delete analysis BPF at max. internal sampling rate 16kHz */ - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - deallocate_CoreCoder_TCX( st ); - } - - return; -} -#else static void deallocate_CoreCoder_fx( DEC_CORE_HANDLE st /* i/o: Core decoder state structure */ ) @@ -531,7 +318,6 @@ static void deallocate_CoreCoder_fx( return; } -#endif /*-------------------------------------------------------------------* * Function cpy_tcx_ltp_data() @@ -540,24 +326,6 @@ static void deallocate_CoreCoder_fx( * channel to the correct structure in the new mode *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void cpy_tcx_ltp_data( - TCX_LTP_DEC_HANDLE hTcxLtpDecOld, /* i : TCX-LTP structure to copy from */ - TCX_LTP_DEC_HANDLE hTcxLtpDecNew, /* o : TCX-LTP structure to copy to */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - hTcxLtpDecNew->tcxltp_pitch_int_post_prev = hTcxLtpDecOld->tcxltp_pitch_int_post_prev; - hTcxLtpDecNew->tcxltp_pitch_fr_post_prev = hTcxLtpDecOld->tcxltp_pitch_fr_post_prev; - hTcxLtpDecNew->tcxltp_gain_post_prev_float = hTcxLtpDecOld->tcxltp_gain_post_prev_float; - hTcxLtpDecNew->tcxltp_filt_idx_prev = hTcxLtpDecOld->tcxltp_filt_idx_prev; - - mvr2r( hTcxLtpDecOld->tcxltp_mem_in_float, hTcxLtpDecNew->tcxltp_mem_in_float, (int16_t) ( ( TCXLTP_MAX_DELAY * output_Fs ) / 48000 ) ); - mvr2r( hTcxLtpDecOld->tcxltp_mem_out_float, hTcxLtpDecNew->tcxltp_mem_out_float, (int16_t) ( ( L_FRAME48k * output_Fs ) / 48000 ) ); - - return; -} -#else static void cpy_tcx_ltp_data_fx( TCX_LTP_DEC_HANDLE hTcxLtpDecOld, /* i : TCX-LTP structure to copy from */ TCX_LTP_DEC_HANDLE hTcxLtpDecNew, /* o : TCX-LTP structure to copy to */ @@ -578,683 +346,23 @@ static void cpy_tcx_ltp_data_fx( Copy( hTcxLtpDecOld->tcxltp_mem_in, hTcxLtpDecNew->tcxltp_mem_in, sz ); // TODO: One of these will be removed later /* exp(exp_tcxltp_mem_in) */ Copy32( hTcxLtpDecOld->tcxltp_mem_in_32, hTcxLtpDecNew->tcxltp_mem_in_32, sz ); /* exp(exp_tcxltp_mem_in) */ hTcxLtpDecNew->exp_tcxltp_mem_in = hTcxLtpDecOld->exp_tcxltp_mem_in; /* exp(exp_tcxltp_mem_in) */ - move16(); - /* (int16_t) ( ( L_FRAME48k * output_Fs ) / 48000 ) */ - sz = extract_l( Mpy_32_32_r( L_FRAME48k * output_Fs, 44739 /* 1 / 48000 in Q31 */ ) ); /* Q0 */ - Copy( hTcxLtpDecOld->tcxltp_mem_out, hTcxLtpDecNew->tcxltp_mem_out, sz ); // TODO: One of these will be removed later /* exp(exp_tcxltp_mem_in) */ - Copy32( hTcxLtpDecOld->tcxltp_mem_out_32, hTcxLtpDecNew->tcxltp_mem_out_32, sz ); /* exp(exp_tcxltp_mem_in) */ - hTcxLtpDecNew->exp_tcxltp_mem_out = hTcxLtpDecOld->exp_tcxltp_mem_out; /* exp(exp_tcxltp_mem_in) */ - move16(); - - return; -} -#endif - - -/*-------------------------------------------------------------------* - * Function stereo_memory_dec() - * - * Dynamically allocate/deallocate data structures depending on the actual CPE mode - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_memory_dec( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - CPE_DEC_HANDLE hCPE, /* i : CPE decoder structure */ - const int16_t nb_bits_metadata, /* i : number of metadata bits */ - const int32_t output_Fs, /* i : output sampling rate */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const MC_MODE mc_mode, /* i : MC mode */ - const int16_t nchan_transport /* i : number of transport channels*/ -) -{ - DEC_CORE_HANDLE st; - int16_t i, n, delay_comp_DFT; - ivas_error error; - - error = IVAS_ERR_OK; - - assert( hCPE->last_element_mode >= IVAS_CPE_DFT && "Switching from SCE to CPE is not a valid configuration!" ); - - - hCPE->hCoreCoder[0]->element_mode = hCPE->element_mode; - hCPE->hCoreCoder[1]->element_mode = hCPE->element_mode; - - /*--------------------------------------------------------------* - * stereo switching (using parameters that will be freed) - *---------------------------------------------------------------*/ - - /* handling of DFT->TD switching */ - if ( hCPE->last_element_mode == IVAS_CPE_DFT && ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_MDCT ) ) - { - delay_comp_DFT = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ); - - /* redressing of the DFT OLA part */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - for ( i = delay_comp_DFT; i < hCPE->hStereoDft->dft32ms_ovl; i++ ) - { - hCPE->output_mem[n][i - delay_comp_DFT] /= hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( hCPE->hStereoDft->dft32ms_ovl - 1 + delay_comp_DFT - i )]; - } - } - - if ( hCPE->hCoreCoder[0]->last_core != ACELP_CORE ) - { - mvr2r( hCPE->hStereoDft->buff_LBTCX_mem, hCPE->input_mem_LB[0], NS2SA( hCPE->hCoreCoder[0]->last_L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - } - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT && hCPE->element_mode == IVAS_CPE_DFT ) - { - v_add( hCPE->hCoreCoder[0]->hHQ_core->old_out, hCPE->hCoreCoder[1]->hHQ_core->old_out, hCPE->hCoreCoder[0]->hHQ_core->old_out, (int16_t) ( output_Fs / FRAMES_PER_SEC ) ); - v_multc( hCPE->hCoreCoder[0]->hHQ_core->old_out, 0.5f, hCPE->hCoreCoder[0]->hHQ_core->old_out, (int16_t) ( output_Fs / FRAMES_PER_SEC ) ); - - v_add( hCPE->hCoreCoder[0]->hHQ_core->old_outLB, hCPE->hCoreCoder[1]->hHQ_core->old_outLB, hCPE->hCoreCoder[0]->hHQ_core->old_outLB, L_FRAME32k ); - v_multc( hCPE->hCoreCoder[0]->hHQ_core->old_outLB, 0.5f, hCPE->hCoreCoder[0]->hHQ_core->old_outLB, L_FRAME32k ); - } - - /*--------------------------------------------------------------* - * allocate/deallocate data structures - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode != hCPE->last_element_mode ) - { - /*--------------------------------------------------------------* - * switching CPE mode to DFT stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoTD != NULL ) - { - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; - } - - if ( hCPE->hStereoMdct != NULL ) - { - free( hCPE->hStereoMdct ); - hCPE->hStereoMdct = NULL; - } - - /* deallocate secondary channel */ - deallocate_CoreCoder( hCPE->hCoreCoder[1] ); - - /* allocate DFT stereo data structure */ - if ( ( error = stereo_dft_dec_create( &( hCPE->hStereoDft ), hCPE->element_brate, output_Fs, 0, nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - cpy_tcx_ltp_data( hCPE->hCoreCoder[1]->hTcxLtpDec, hCPE->hStereoDft->hTcxLtpDec, output_Fs ); - deleteFdCngDec( &hCPE->hCoreCoder[1]->hFdCngDec ); - } - - /* memory update - needed in TD stereo, TCX/HQ frame -> DFT stereo, ACELP frame switching */ - mvr2r( hCPE->input_mem_LB[0], hCPE->hStereoDft->buff_LBTCX_mem, NS2SA( min( hCPE->hCoreCoder[0]->last_L_frame * FRAMES_PER_SEC, 16000 ), STEREO_DFT32MS_OVL_NS ) ); - - /* allocate ICBWE structure */ - if ( hCPE->hStereoICBWE == NULL ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - - /* allocate HQ core */ - st = hCPE->hCoreCoder[0]; - if ( st->hHQ_core == NULL ) - { - if ( ( st->hHQ_core = (HQ_DEC_HANDLE) malloc( sizeof( HQ_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); - } - - HQ_core_dec_init_flt( st->hHQ_core ); - } - - /* allocate TD CNG handle */ - if ( st->idchan == 0 && st->hTdCngDec == NULL ) - { - if ( ( st->hTdCngDec = (TD_CNG_DEC_HANDLE) malloc( sizeof( TD_CNG_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); - } - - td_cng_dec_init( st ); - } - } - - /*--------------------------------------------------------------* - * switching CPE mode to TD stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoDft != NULL ) - { - stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); - hCPE->hStereoDft = NULL; - } - - if ( hCPE->hStereoMdct != NULL ) - { - free( hCPE->hStereoMdct ); - hCPE->hStereoMdct = NULL; - } - - /* deallocated TCX/IGF structures for second channel */ - deallocate_CoreCoder_TCX( hCPE->hCoreCoder[1] ); - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - deleteFdCngDec( &hCPE->hCoreCoder[1]->hFdCngDec ); - } - - /* allocate TD stereo data structure */ - if ( hCPE->hStereoTD != NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); - } - - if ( ( hCPE->hStereoTD = (STEREO_TD_DEC_DATA_HANDLE) malloc( sizeof( STEREO_TD_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); - } - stereo_td_init_dec( hCPE->hStereoTD, hCPE->last_element_mode ); - /* allocate CoreCoder secondary channel */ - if ( ( error = allocate_CoreCoder( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*--------------------------------------------------------------* - * allocate DFT/TD stereo structures after MDCT stereo frame - *---------------------------------------------------------------*/ - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) - { - /* deallocated TCX-LTP for second channel */ - st = hCPE->hCoreCoder[1]; - if ( st->hTcxLtpDec != 0 ) - { - free( st->hTcxLtpDec ); - st->hTcxLtpDec = NULL; - } - - if ( st->element_mode == IVAS_CPE_TD ) - { - /* re-use an existing buffer for MDCT->TD stereo switching */ - int16_t nZeros, len; - nZeros = (int16_t) ( NS2SA( st->output_Fs, N_ZERO_MDCT_NS ) ); - len = NS2SA( st->output_Fs, 3000000 ); - mvr2r( st->hHQ_core->old_out + nZeros, hCPE->output_mem[1], len ); - } - - /* deallocated HQ-core for second channel */ - if ( st->hHQ_core != 0 ) - { - free( st->hHQ_core ); - st->hHQ_core = NULL; - } - - /* allocate DFT stereo mono DMX data structure */ - if ( hCPE->nchan_out == 1 && hCPE->hStereoDftDmx == NULL ) - { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); - } - stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); - } - - /* allocate TCA data structure */ - if ( hCPE->nchan_out != 1 && hCPE->hStereoTCA == NULL ) - { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - stereo_tca_init_dec( hCPE->hStereoTCA ); - } - - st = hCPE->hCoreCoder[0]; - - /* allocate primary channel substructures */ - if ( ( error = allocate_CoreCoder( st ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* allocate BWEs for primary channel */ - if ( st->hBWE_TD == NULL ) - { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } - - td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); - - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - - fd_bwe_dec_init_flt( st->hBWE_FD ); - } - - /* Allocated FD_CNG instance for primary channel*/ - if ( st->hFdCngDec == NULL ) - { - /* Create FD_CNG instance */ - if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) - { - return error; - } - initFdCngDec( st ); - configureFdCngDec( st->hFdCngDec, st->bwidth, st->total_brate, st->L_frame, st->last_L_frame, st->element_mode ); - } - - /* allocate stereo CNG structure */ - if ( hCPE->hStereoCng == NULL ) - { - if ( ( hCPE->hStereoCng = (STEREO_CNG_DEC_HANDLE) malloc( sizeof( STEREO_CNG_DEC ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo CNG\n" ) ); - } - stereo_cng_init_dec( hCPE->hStereoCng, &st->hFdCngDec->hFdCngCom->frameSize ); - } - } - - /*--------------------------------------------------------------* - * switching CPE mode to MDCT stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - float tmpF_buff[L_FRAME16k / 2]; - TCX_LTP_DEC_DATA tcxLtpTmp; - - if ( hCPE->last_element_mode == IVAS_CPE_TD ) - { - mvr2r( hCPE->hStereoTD->TCX_old_syn_Overl, tmpF_buff, L_FRAME16k / 2 ); - } - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - cpy_tcx_ltp_data( hCPE->hStereoDft->hTcxLtpDec, &tcxLtpTmp, output_Fs ); - } - - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoDft != NULL ) - { - stereo_dft_dec_destroy( &( hCPE->hStereoDft ) ); - hCPE->hStereoDft = NULL; - } - - if ( hCPE->hStereoTD != NULL ) - { - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; - } - - if ( hCPE->hStereoDftDmx != NULL ) - { - free( hCPE->hStereoDftDmx ); - hCPE->hStereoDftDmx = NULL; - } - - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - - /* de-allocate stereo CNG structure */ - if ( hCPE->hStereoCng != NULL ) - { - free( hCPE->hStereoCng ); - hCPE->hStereoCng = NULL; - } - - for ( i = 0; i < CPE_CHANNELS; i++ ) - { - st = hCPE->hCoreCoder[i]; - st->element_mode = hCPE->element_mode; - - /* deallocate core-decoder substructures */ - deallocate_CoreCoder( st ); - - st->first_CNG = 0; - } - - /* allocate CLDFB structures for second channel */ - st = hCPE->hCoreCoder[1]; - - if ( st->cldfbAna == NULL ) - { - if ( ( error = openCldfb_ivas( &st->cldfbAna, CLDFB_ANALYSIS, 48000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st->cldfbBPF == NULL ) - { - /* open analysis BPF for max. internal sampling rate 16kHz */ - if ( ( error = openCldfb_ivas( &st->cldfbBPF, CLDFB_ANALYSIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* allocate Fd-Cng structure for second channel */ - if ( ( error = createFdCngDec( &st->hFdCngDec ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Init FD-CNG */ - initFdCngDec( st ); - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - st->last_core = ACELP_CORE; /* needed to set-up TCX core in SetTCXModeInfo() */ - } - - /*Allocate CoreCoder TCX modules for second channel */ - if ( ( error = allocate_CoreCoder_TCX( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - if ( hCPE->nchan_out == 1 ) - { - cpy_tcx_ltp_data( hCPE->hCoreCoder[0]->hTcxLtpDec, hCPE->hCoreCoder[1]->hTcxLtpDec, output_Fs ); - } - else - { - cpy_tcx_ltp_data( &tcxLtpTmp, hCPE->hCoreCoder[1]->hTcxLtpDec, output_Fs ); - } - } - - if ( hCPE->last_element_mode == IVAS_CPE_TD ) - { - mvr2r( tmpF_buff, st->hTcxDec->old_syn_Overl_float, L_FRAME16k / 2 ); - } - - set_f( st->hTcxDec->FBTCXdelayBuf_float, 0.0f, 111 ); - st->hTcxDec->old_synthFB = st->hTcxDec->synth_history + NS2SA( st->output_Fs, PH_ECU_MEM_NS ); - st->hTcxDec->prev_good_synth = st->hTcxDec->old_synthFB + NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ); - - /* allocate and initialize MDCT stereo structure */ - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_DEC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - if ( ivas_format == STEREO_FORMAT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE ) - { - hCPE->hStereoMdct->use_itd = 1; - } - else - { - hCPE->hStereoMdct->use_itd = 0; - } - hCPE->hStereoMdct->reverse_dmx = 0; - hCPE->hStereoMdct->smooth_ratio = 1.f; - } - } - - /*--------------------------------------------------------------* - * normal TD / LRTD switching - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hCoreCoder[0]->bfi == 0 ) - { - st = hCPE->hCoreCoder[1]; - hCPE->hStereoTD->tdm_LRTD_flag = get_indice_st( hCPE->hCoreCoder[0], hCPE->element_brate + hCPE->brate_surplus, (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata + ( hCPE->brate_surplus / FRAMES_PER_SEC ) - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS - TDM_LR_CONTENT_BITS ), TDM_LR_CONTENT_BITS ); - - if ( hCPE->hStereoTD->tdm_LRTD_flag ) - { - /* deallocate ICBWE structure */ - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - - /* allocate BWEs for secondary channel */ - if ( st->hBWE_TD == NULL ) - { - if ( ( st->hBWE_TD = (TD_BWE_DEC_HANDLE) malloc( sizeof( TD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } - - td_bwe_dec_init( st->hBWE_TD, -1, st->output_Fs ); - - if ( ( st->hBWE_FD = (FD_BWE_DEC_HANDLE) malloc( sizeof( FD_BWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - - fd_bwe_dec_init_flt( st->hBWE_FD ); - } - } - else /* tdm_LRTD_flag == 0 */ - { - /* deallocate BWEs for secondary channel */ - if ( st->hBWE_TD != NULL ) - { - if ( st->hBWE_TD != NULL ) - { - free( st->hBWE_TD ); - st->hBWE_TD = NULL; - } - - if ( st->hBWE_FD != NULL ) - { - free( st->hBWE_FD ); - st->hBWE_FD = NULL; - } - } - - /* allocate ICBWE structure */ - if ( hCPE->hStereoICBWE == NULL ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - } - } - } - - /*--------------------------------------------------------------* - * MDCT stereo bitrate switching - *---------------------------------------------------------------*/ - - if ( ivas_format == STEREO_FORMAT && hCPE->element_mode == IVAS_CPE_MDCT ) - { - if ( hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_total_brate > IVAS_SID_5k2 ) - { - if ( hCPE->hStereoMdct->use_itd == 0 ) - { - if ( hCPE->hStereoTCA == NULL ) - { - /* allocate TCA data structure */ - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - } - stereo_tca_init_dec( hCPE->hStereoTCA ); - } - - hCPE->hStereoMdct->use_itd = 1; - } - else - { - /* de-allocate TCA data structure */ - if ( hCPE->hStereoMdct->use_itd == 1 && ivas_total_brate > IVAS_SID_5k2 && hCPE->hStereoTCA != NULL ) - { - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; - hCPE->hStereoMdct->use_itd = 0; - } - else if ( hCPE->hStereoMdct->use_itd == 1 && ivas_total_brate <= IVAS_SID_5k2 ) - { - hCPE->hStereoMdct->itd = 0.0f; - } - else - { - hCPE->hStereoMdct->use_itd = 0; - } - } - } - - /*--------------------------------------------------------------* - * Bitrate switching in MASA format - *---------------------------------------------------------------*/ - - if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && nchan_transport == 2 ) - { - if ( hCPE->nchan_out == 1 ) - { - if ( hCPE->hStereoDftDmx == NULL ) - { - if ( ( hCPE->hStereoDftDmx = (STEREO_DFT_DMX_DATA_HANDLE) malloc( sizeof( STEREO_DFT_DMX_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo DFT mono output\n" ) ); - } - stereo_dft_dmx_out_reset( hCPE->hStereoDftDmx ); - } - - if ( hCPE->prev_synth_chs[1] != NULL ) - { - free( hCPE->prev_synth_chs[1] ); - hCPE->prev_synth_chs[1] = NULL; - } - - if ( hCPE->hStereoTCA != NULL ) - { - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; - } - } - else /* nchan_out == 2 */ - { - if ( hCPE->hStereoDftDmx != NULL ) - { - free( hCPE->hStereoDftDmx ); - hCPE->hStereoDftDmx = NULL; - } - - if ( hCPE->prev_synth_chs[1] == NULL ) - { - st = hCPE->hCoreCoder[1]; - if ( ( hCPE->prev_synth_chs[1] = (float *) malloc( sizeof( float ) * NS2SA( st->output_Fs, FRAME_SIZE_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - set_zero( hCPE->prev_synth_chs[1], NS2SA( st->output_Fs, FRAME_SIZE_NS ) ); - } - - if ( hCPE->hStereoICBWE == NULL && hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_DEC_HANDLE) malloc( sizeof( STEREO_ICBWE_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_dec( hCPE->hStereoICBWE ); - } - - if ( hCPE->hStereoTCA == NULL && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) - { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_DEC_HANDLE) malloc( sizeof( STEREO_TCA_DEC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - - stereo_tca_init_dec( hCPE->hStereoTCA ); - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - if ( hCPE->hStereoTCA != NULL ) - { - /* note: in MASA, hCPE->hStereoMdct->itd = 0 */ - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; - } - - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - } - } - } - - /*--------------------------------------------------------------* - * Bitrate switching in MASA format - *---------------------------------------------------------------*/ + move16(); + /* (int16_t) ( ( L_FRAME48k * output_Fs ) / 48000 ) */ + sz = extract_l( Mpy_32_32_r( L_FRAME48k * output_Fs, 44739 /* 1 / 48000 in Q31 */ ) ); /* Q0 */ + Copy( hTcxLtpDecOld->tcxltp_mem_out, hTcxLtpDecNew->tcxltp_mem_out, sz ); // TODO: One of these will be removed later /* exp(exp_tcxltp_mem_in) */ + Copy32( hTcxLtpDecOld->tcxltp_mem_out_32, hTcxLtpDecNew->tcxltp_mem_out_32, sz ); /* exp(exp_tcxltp_mem_in) */ + hTcxLtpDecNew->exp_tcxltp_mem_out = hTcxLtpDecOld->exp_tcxltp_mem_out; /* exp(exp_tcxltp_mem_in) */ + move16(); - if ( ivas_format == MC_FORMAT && hCPE->element_mode == IVAS_CPE_MDCT ) - { - if ( mc_mode == MC_MODE_MCT || mc_mode == MC_MODE_PARAMUPMIX ) - { - /* deallocate the FdCNG handle */ - for ( i = 0; i < CPE_CHANNELS; ++i ) - { - deleteFdCngDec( &hCPE->hCoreCoder[i]->hFdCngDec ); - } - } - else - { - /* allocate the FdCNG handle (for noise estimation for TCX PLC fadeout)*/ - for ( i = 0; i < CPE_CHANNELS; ++i ) - { - if ( hCPE->hCoreCoder[i]->cldfbSyn == NULL ) /* could be NULL when we had the MCT LFE channel */ - { - if ( ( error = openCldfb_ivas( &hCPE->hCoreCoder[i]->cldfbSyn, CLDFB_SYNTHESIS, hCPE->hCoreCoder[i]->output_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } + return; +} - if ( hCPE->hCoreCoder[i]->hFdCngDec == NULL ) - { - if ( ( error = createFdCngDec( &hCPE->hCoreCoder[i]->hFdCngDec ) ) != IVAS_ERR_OK ) - { - return error; - } - initFdCngDec( hCPE->hCoreCoder[i] ); - } - } - } - } - return error; -} -#else +/*-------------------------------------------------------------------* + * Function stereo_memory_dec() + * + * Dynamically allocate/deallocate data structures depending on the actual CPE mode + *-------------------------------------------------------------------*/ ivas_error stereo_memory_dec_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ CPE_DEC_HANDLE hCPE, /* i : CPE decoder structure */ @@ -2004,380 +1112,24 @@ ivas_error stereo_memory_dec_fx( { IF( NE_32( ( error = createFdCngDec_fx( &hCPE->hCoreCoder[i]->hFdCngDec ) ), IVAS_ERR_OK ) ) { - return error; - } - initFdCngDec_ivas_fx( hCPE->hCoreCoder[i], hCPE->hCoreCoder[i]->cldfbSyn->scale ); - } - } - } - } - - return error; -} -#endif - - -/*-------------------------------------------------------------------* - * Function synchro_synthesis() - * - * Synchronize upmixed DFT/TD/MDCT stereo synthesis to match the overall delay of 32ms - * Handling of TD stereo <-> DFT stereo transitions - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void synchro_synthesis( - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *output[CPE_CHANNELS], /* i/o: output synthesis signal */ - const int16_t output_frame, /* i : Number of samples */ - const int16_t sba_dirac_stereo_flag /* i : signal stereo output for SBA DirAC */ -) -{ - int16_t n, delay_comp_TD, delay_comp_DFT; - int32_t output_Fs; - Decoder_State **sts; - int16_t i, delay_cldfb, dft32ms_ovl; - float *p_output_mem[CPE_CHANNELS]; - float tmp_out[CPE_CHANNELS][NS2SA( 48000, DELAY_CLDFB_NS )]; - float tmp_out_TD[CPE_CHANNELS][STEREO_DFT32MS_OVL_MAX]; - float tmp_out_TD2[CPE_CHANNELS][STEREO_DFT32MS_OVL_MAX]; - int16_t use_cldfb_for_last_dft; - int16_t dft_mono_brate_switch; - int16_t delay_diff; - float tmpF; - int16_t nChannels; - - sts = hCPE->hCoreCoder; - output_Fs = sts[0]->output_Fs; - - use_cldfb_for_last_dft = 0; - if ( ( hCPE->element_mode != IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_24k4 ) /* note: this is to mimic the DFT stereo condition "hCPE->hStereoDft->hConfig->res_cod_mode == 0" in last frame */ - || ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) ) - { - use_cldfb_for_last_dft = 1; - } - - dft_mono_brate_switch = 0; - if ( hCPE->element_mode == IVAS_CPE_DFT && ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_mode == IVAS_CPE_MDCT ) && hCPE->nchan_out == 1 && hCPE->element_brate != hCPE->last_element_brate ) - { - if ( hCPE->last_element_brate >= IVAS_32k && hCPE->hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - dft_mono_brate_switch = -1; /* switch from residual coding mode or MDCT Stereo */ - } - else if ( hCPE->last_element_brate <= IVAS_24k4 && hCPE->hStereoDft->hConfig->res_cod_mode > STEREO_DFT_RES_COD_OFF ) - { - dft_mono_brate_switch = 1; /* switch to residual coding mode*/ - } - } - - if ( use_cldfb_for_last_dft ) - { - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_TD && ( ivas_total_brate > IVAS_SID_5k2 || hCPE->nchan_out == 2 ) ) - { - stereo_tca_scale_R_channel( hCPE, output[0], output_frame ); - } - } - - /* set delays */ - delay_comp_DFT = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - STEREO_DFT32MS_OVL_NS ); - delay_comp_TD = NS2SA( output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); - delay_diff = delay_comp_TD - delay_comp_DFT; - - dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * output_Fs ) / 48000 ); - delay_cldfb = NS2SA( output_Fs, DELAY_CLDFB_NS ); - - /* initialize pointers */ - if ( hCPE->element_mode >= IVAS_CPE_DFT && hCPE->output_mem[0] != NULL ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - p_output_mem[n] = hCPE->output_mem[n]; - } - } - - /*----------------------------------------------------------------* - * DFT stereo synchro - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT || sba_dirac_stereo_flag ) - { - /* handling of bitrate switching from residual (using DFT) to non-residual mode (using CLDFB) for mono output - as in DFT->TD switching */ - if ( dft_mono_brate_switch == -1 ) - { - for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) - { - sts[0]->prev_synth_buffer[i] = p_output_mem[0][i - delay_comp_DFT]; - } - - for ( i = delay_comp_TD; i < delay_comp_TD + delay_cldfb; i++ ) - { - tmp_out[0][i - delay_comp_TD] = p_output_mem[0][i - delay_comp_DFT]; - } - } - - if ( hCPE->nchan_out == 1 && hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - v_add( sts[0]->prev_synth_buffer, sts[1]->prev_synth_buffer, sts[0]->prev_synth_buffer, delay_comp_DFT ); - v_multc( sts[0]->prev_synth_buffer, INV_SQRT_2, sts[0]->prev_synth_buffer, delay_comp_DFT ); - } - - if ( use_cldfb_for_last_dft ) - { - /* delay CLDFB-based mono output (<= 24.4 kbps) to be aligned with DFT-based mono output (32 kbps), needed to avoid discontinuities with TCX-LTP. */ - mvr2r( sts[0]->prev_synth_buffer + delay_comp_DFT, hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf_float, delay_diff ); - delay_signal_float( output[0], output_frame, hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf_float, delay_diff ); - } - - if ( hCPE->element_mode != IVAS_CPE_MDCT ) - { - ivas_post_proc( NULL, hCPE, 0, output[0], output, output_frame, sba_dirac_stereo_flag ); - } - - /* zero padding in order to synchronize the upmixed DFT stereo synthesis with the TD/MDCT stereo synthesis */ - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - if ( sba_dirac_stereo_flag ) - { - delay_signal_float( output[n], output_frame, hCPE->prev_synth[n], delay_comp_DFT ); - } - else - { - delay_signal_float( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_DFT ); - } - } - - if ( use_cldfb_for_last_dft ) - { - mvr2r( hCPE->hCoreCoder[0]->hTcxDec->FBTCXdelayBuf_float, sts[0]->prev_synth_buffer + delay_comp_DFT, delay_diff ); - } - - /* handling of TD->DFT switching */ - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - if ( ( hCPE->last_element_mode != IVAS_CPE_DFT && !sba_dirac_stereo_flag && dft_mono_brate_switch != -1 ) || dft_mono_brate_switch == 1 ) - { - float *pPrev_synth; - float inv_fade_len = 1.f / delay_diff; - - /* cross-fading between TD synchro memory and the DFT output */ - if ( sba_dirac_stereo_flag ) - { - pPrev_synth = hCPE->prev_synth[n]; - } - else - { - pPrev_synth = sts[n]->prev_synth_buffer; - } - - if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) - { - output[n][i] = ( pPrev_synth[i] * ( delay_comp_TD - i ) + output[n][i] * ( i - delay_comp_DFT ) ) * inv_fade_len; - } - } - } - else if ( dft_mono_brate_switch == -1 ) - { - float inv_fade_len_1 = 1.0f / (float) delay_diff; - float inv_fade_len_2 = 1.0f / (float) delay_cldfb; - - for ( i = 0; i < delay_diff; i++ ) - { - output[0][i + delay_comp_DFT] = ( output[0][i + delay_comp_DFT] * ( delay_diff - i ) + p_output_mem[0][i] * i ) * inv_fade_len_1; - } - - for ( i = 0; i < delay_cldfb; i++ ) - { - output[0][i + delay_comp_TD] = ( tmp_out[0][i] * ( delay_cldfb - i ) + output[0][i + delay_comp_TD] * i ) * inv_fade_len_2; - } - } - } - } - - /*----------------------------------------------------------------* - * TD/MDCT stereo synchro - *----------------------------------------------------------------*/ - - if ( sba_dirac_stereo_flag ) - { - return; - } - - if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_MDCT ) - { - /* handling of DFT->TD switching */ - if ( hCPE->last_element_mode == IVAS_CPE_DFT && !use_cldfb_for_last_dft && hCPE->output_mem[0] != NULL ) - { - /* use redressed DFT stereo OLA part to reconstruct the TD stereo synchro memory */ - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - for ( i = delay_comp_DFT; i < delay_comp_TD; i++ ) - { - sts[n]->prev_synth_buffer[i] = p_output_mem[n][i - delay_comp_DFT]; - } - - for ( i = delay_comp_TD; i < delay_comp_TD + delay_cldfb; i++ ) - { - tmp_out[n][i - delay_comp_TD] = p_output_mem[n][i - delay_comp_DFT]; - } - } - } - - /* if previous frame had only one channel copy buffers to other channel */ - if ( hCPE->nchan_out == 1 && hCPE->element_mode == IVAS_CPE_MDCT && hCPE->last_element_mode == IVAS_CPE_DFT ) - { - mvr2r( sts[0]->prev_synth_buffer, sts[1]->prev_synth_buffer, delay_comp_TD ); - mvr2r( tmp_out[0], tmp_out[1], delay_cldfb ); - mvr2r( p_output_mem[0], p_output_mem[1], delay_diff ); - } - - /*----------------------------------------------------------------* - * update DFT synthesis overlap memory @output_Fs; needed for TD->DFT stereo switching - *----------------------------------------------------------------*/ - - /* resample LB synthesis to output_Fs */ - if ( hCPE->element_mode != IVAS_CPE_MDCT && !use_cldfb_for_last_dft ) - { - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - if ( sts[n]->core == ACELP_CORE ) - { - lerp_flt( hCPE->input_mem_LB[n], tmp_out_TD[n], dft32ms_ovl, NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - } - else /* TCX/HQ core */ - { - lerp_flt( hCPE->input_mem_LB[n], tmp_out_TD[n], dft32ms_ovl, NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ) ); - - /* use TCX synchro memory (perfect signal is available) */ - for ( i = delay_diff; i < dft32ms_ovl; i++ ) - { - tmp_out_TD[n][i] = sts[n]->delay_buf_out[i - delay_diff]; - } - } - } - - if ( hCPE->nchan_out == CPE_CHANNELS ) - { - /* upmix the resampled LB / the TCX synchro memory */ - tdm_upmix_plain( tmp_out_TD2[0], tmp_out_TD2[1], tmp_out_TD[0], tmp_out_TD[1], tdm_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx], tdm_den_ratio_tabl[hCPE->hStereoTD->tdm_last_ratio_idx], 0, dft32ms_ovl, 1 ); - } - else - { - mvr2r( tmp_out_TD[0], tmp_out_TD2[0], dft32ms_ovl ); - } - - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - if ( sts[0]->core == ACELP_CORE ) /* ACELP core in primary channel */ - { - tmpF = 1.0f / (float) delay_diff; - - /* cross-fading between regular output synthesis and lerp_flt() resampled synthesis in 3.125 - 1.25 ms OLA part */ - for ( i = 0; i < delay_diff; i++ ) - { - p_output_mem[n][i] = ( output[n][output_frame - dft32ms_ovl + delay_cldfb + i] * ( delay_diff - i ) + tmp_out_TD2[n][i] * i ) * tmpF; - } - } - else /* TCX core */ - { - /* reconstruct the 3.125 - 1.25 ms OLA part */ - for ( i = 0; i < delay_diff; i++ ) - { - p_output_mem[n][i] = output[n][output_frame - dft32ms_ovl + delay_cldfb + i]; - } - } - - /* reconstruct the last 1.25 ms part of OLA window */ - for ( i = delay_diff; i < dft32ms_ovl; i++ ) - { - p_output_mem[n][i] = tmp_out_TD2[n][i]; - } - } - } - - /*----------------------------------------------------------------* - * zero padding TD/MDCT synthesis in order to synchronize - * the upmixed TD/MDCT stereo synthesis with the DFT stereo synthesis - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->stereo_switching_counter == 0 && hCPE->nchan_out == 1 && hCPE->last_element_brate <= IVAS_24k4 ) - { - float step; - tmpF = 1.0f; - step = 0.5f / delay_comp_TD; - - /* for the first switching frame from DFT to TD, downmix memory too */ - for ( n = 0; n < delay_comp_TD; n++ ) - { - sts[0]->prev_synth_buffer[n] = ( sts[0]->prev_synth_buffer[n] ) * tmpF; - tmpF -= step; - } - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->nchan_out == 1 && !is_DTXrate( hCPE->element_brate ) && is_DTXrate( hCPE->last_element_brate ) ) - { - mvr2r( sts[0]->prev_synth_buffer, sts[1]->prev_synth_buffer, delay_comp_TD ); - } - - nChannels = ( hCPE->element_mode == IVAS_CPE_MDCT ) ? 2 : hCPE->nchan_out; - for ( n = 0; n < nChannels; n++ ) - { - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - mvr2r( sts[n]->prev_synth_buffer + delay_comp_DFT, hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf_float, delay_diff ); - delay_signal_float( output[n], output_frame, hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf_float, delay_diff ); - ivas_post_proc( NULL, hCPE, n, output[n], output, output_frame, 0 ); - delay_signal_float( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_DFT ); - mvr2r( hCPE->hCoreCoder[n]->hTcxDec->FBTCXdelayBuf_float, sts[n]->prev_synth_buffer + delay_comp_DFT, delay_diff ); - } - else - { - delay_signal_float( output[n], output_frame, sts[n]->prev_synth_buffer, delay_comp_TD ); - } - } - - /* handling of DFT->TD switching */ - if ( hCPE->last_element_mode == IVAS_CPE_DFT && !use_cldfb_for_last_dft ) - { - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->hStereoCng->prev_sid_nodata ) - { - for ( n = 0; n < hCPE->nchan_out; n++ ) - { - tmpF = 1.0f / (float) delay_cldfb; - - for ( i = 0; i < delay_cldfb; i++ ) - { - tmp_out[n][i] = tmp_out[n][i] * ( delay_cldfb - i ) * tmpF; - } - } - } - - /* cross-fading between DFT OLA memory and TD output */ - for ( n = 0; n < nChannels; n++ ) - { - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - tmpF = 1.0f / (float) delay_diff; - - for ( i = 0; i < delay_diff; i++ ) - { - output[n][i + delay_comp_DFT] = ( output[n][i + delay_comp_DFT] * ( delay_diff - i ) + p_output_mem[n][i] * i ) * tmpF; - } - } - - tmpF = 1.0f / (float) delay_cldfb; - - for ( i = 0; i < delay_cldfb; i++ ) - { - output[n][i + delay_comp_TD] = ( tmp_out[n][i] * ( delay_cldfb - i ) + output[n][i + delay_comp_TD] * i ) * tmpF; + return error; + } + initFdCngDec_ivas_fx( hCPE->hCoreCoder[i], hCPE->hCoreCoder[i]->cldfbSyn->scale ); } } } } - return; + return error; } -#else + + +/*-------------------------------------------------------------------* + * Function synchro_synthesis() + * + * Synchronize upmixed DFT/TD/MDCT stereo synthesis to match the overall delay of 32ms + * Handling of TD stereo <-> DFT stereo transitions + *-------------------------------------------------------------------*/ void synchro_synthesis_fx( const Word32 ivas_total_brate, /* i : IVAS total bitrate Q0*/ CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ @@ -2965,41 +1717,11 @@ void synchro_synthesis_fx( return; } -#endif /*-------------------------------------------------------------------* * Function stereo_switching_dec() * * Handling of memories in case of CPE modes switching *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -static Word16 saturate( Word32 L_var1 ) -{ - Word16 var_out; - - if ( L_var1 > 0X00007fffL ) - { - assert( 0 ); - var_out = MAX_16; - } - else if ( L_var1 < (Word32) 0xffff8000L ) - { - assert( 0 ); - var_out = MIN_16; - } - else - { - var_out = extract_l( L_var1 ); -#ifdef WMOPS - multiCounter[currCounter].extract_l--; -#endif - } - - BASOP_CHECK(); - - return ( var_out ); -} -#endif Word32 side_gain_table[32 + 1] = { -ONE_IN_Q31, -2040109440, -1932735232, -1825361152, -1717986944, -1610612736, -1503238528, -1395864320, -1288490240, -1181115904, -1073741824, @@ -3227,457 +1949,126 @@ void stereo_switching_dec( move16(); - // fix need to do correctly - set32_fx( sts[1]->old_pitch_buf_fx, L_deposit_h( L_SUBFR ), 2 * NB_SUBFR16k ); - sts[1]->old_fpitchFB = L_deposit_h( 2 * L_SUBFR ); /* 15Q16 */ - move32(); - - /* reset CLDFB memories */ - - cldfb_reset_memory_fx( sts[1]->cldfbAna ); - cldfb_reset_memory_fx( sts[1]->cldfbBPF ); - cldfb_reset_memory_fx( sts[1]->cldfbSyn ); - - sts[1]->mem_deemph_fx = 0; - move16(); - - sts[1]->tilt_code_fx = 0; - move16(); - sts[1]->gc_threshold_fx = 0; - move16(); - - - set16_fx( sts[1]->mem_syn1_fx, 0, M ); - set16_fx( sts[1]->mem_syn2_fx, 0, M ); - set16_fx( sts[1]->mem_syn3_fx, 0, M ); - set16_fx( sts[1]->mem_syn_r, 0, L_SYN_MEM ); - - sts[1]->last_L_frame = sts[0]->last_L_frame; /* Q0 */ - move16(); - /* Should not force sts[1]->Q_exc on the data of st[0], instead it better to just reuse the current scaling of st[0]*/ - Copy( sts[0]->old_exc_fx, sts[1]->old_exc_fx, L_EXC_MEM_DEC ); /* Q_exc */ - sts[1]->Q_exc = sts[0]->Q_exc; - move16(); - sts[1]->Q_exc_cng = sts[0]->Q_exc_cng; - move16(); - sts[1]->prev_Q_exc = sts[0]->prev_Q_exc; - move16(); - Copy( sts[0]->Q_subfr, sts[1]->Q_subfr, L_Q_MEM ); - - sts[1]->prev_Q_bwe_syn = sts[0]->prev_Q_bwe_syn; - move16(); - sts[1]->prev_Q_bwe_syn2 = sts[0]->prev_Q_bwe_syn2; - move16(); - - sts[1]->prev_Q_bwe_exc_fb = sts[0]->prev_Q_bwe_exc_fb; - move16(); - sts[1]->prev_Qx = sts[0]->prev_Qx; - move16(); - sts[1]->prev_Q_bwe_exc = sts[0]->prev_Q_bwe_exc; - move16(); - sts[1]->prev_Q_synth = sts[0]->prev_Q_synth; - move16(); - sts[1]->Q_syn = sts[0]->Q_syn; - move16(); - sts[1]->Q_syn2 = sts[0]->Q_syn2; - move16(); - sts[1]->Q_syn_cng = sts[0]->Q_syn_cng; - move16(); - sts[1]->prev_Q_syn = sts[0]->prev_Q_syn; - move16(); - - Copy( sts[0]->lsf_old_fx, sts[1]->lsf_old_fx, M ); /* Q2.56 */ - Copy( sts[0]->lsp_old_fx, sts[1]->lsp_old_fx, M ); /* Q15 */ - IF( EQ_16( hCPE->element_mode, IVAS_CPE_MDCT ) ) - { - sts[1]->last_core = sts[0]->last_core; /* Q0 */ - move16(); - sts[1]->last_coder_type = sts[0]->last_coder_type; /* Q0 */ - move16(); - - - // 32bit buffer - Copy32( sts[0]->hHQ_core->oldOut_fx, sts[1]->hHQ_core->oldOut_fx, L_FRAME48k ); /* exp(exp_old_out) */ - Copy32( sts[0]->delay_buf_out32_fx, sts[1]->delay_buf_out32_fx, HQ_DELTA_MAX * HQ_DELAY_COMP ); /* Q11 */ - Copy32( sts[0]->hTcxDec->old_syn_Overl_32, sts[1]->hTcxDec->old_syn_Overl_32, 256 ); /* Q_old_syn_Overl*/ - // 16 bit buffer - Copy( sts[0]->hHQ_core->old_out_fx, sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); /* exp(exp_old_out) */ - - sts[1]->hHQ_core->Q_old_wtda = sts[0]->hHQ_core->Q_old_wtda; - move16(); - Copy( sts[0]->delay_buf_out_fx, sts[1]->delay_buf_out_fx, HQ_DELTA_MAX * HQ_DELAY_COMP ); /* Q0 */ - Copy( sts[0]->hTcxDec->old_syn_Overl, sts[1]->hTcxDec->old_syn_Overl, 256 ); /* Q_old_syn_Overl*/ - } - } - ELSE IF( EQ_16( hCPE->element_mode, IVAS_CPE_TD ) && EQ_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) - { - set16_fx( sts[0]->old_exc_fx, 0, L_EXC_MEM_DEC ); - set16_fx( sts[1]->old_exc_fx, 0, L_EXC_MEM_DEC ); - } - - /* TD/DFT -> MDCT stereo switching (there is no TCX in the TD stereo secondary channel, or DFT stereo) */ - IF( EQ_16( hCPE->element_mode, IVAS_CPE_MDCT ) && NE_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) - { - sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; /* Q0 */ - move16(); - sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; /* Q0 */ - move16(); - sts[1]->fscale = sts[0]->fscale; /* Q0 */ - move16(); - sts[1]->hTcxCfg->tcx_mdct_window_length = sts[0]->hTcxCfg->tcx_mdct_window_length; /* Q0 */ - move16(); - sts[1]->pit_res_max = sts[0]->pit_res_max; /* Q0 */ - move16(); - sts[1]->pit_res_max_past = sts[0]->pit_res_max_past; /* Q0 */ - move16(); - sts[1]->hTcxDec->L_frameTCX = sts[0]->hTcxDec->L_frameTCX; /* Q0 */ - move16(); - sts[1]->hTcxDec->conceal_eof_gain = sts[0]->hTcxDec->conceal_eof_gain; /* Q14 */ - move16(); - sts[1]->hTcxDec->conceal_eof_gain32 = sts[0]->hTcxDec->conceal_eof_gain32; /* sts[0]->hTcxDec->conceal_eof_gain_e */ - move32(); - sts[1]->hTcxDec->conceal_eof_gain_e = sts[0]->hTcxDec->conceal_eof_gain_e; - move16(); - } - - return; -} -#else -void stereo_switching_dec( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t i, n; - int16_t dft32ms_ovl; - Decoder_State **sts; - float tmpF; - int16_t delay_comp_TD; - - sts = hCPE->hCoreCoder; - - delay_comp_TD = NS2SA( sts[0]->output_Fs, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS ); - - /* prevent CPE mode switching in the first received frame */ - if ( sts[0]->ini_frame == 0 ) - { - hCPE->last_element_mode = hCPE->element_mode; - hCPE->stereo_switching_counter = 10; - hCPE->NbFrameMod = 7; - hCPE->lt_es_em = 0.0f; - } - - if ( hCPE->element_mode == hCPE->last_element_mode ) - { - hCPE->stereo_switching_counter++; - hCPE->stereo_switching_counter = min( 10, hCPE->stereo_switching_counter ); - } - else - { - hCPE->stereo_switching_counter = 0; - } - - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->nchan_out == 1 && hCPE->element_brate >= IVAS_32k && hCPE->last_element_brate <= IVAS_24k4 ) - { - dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); - set_zero( hCPE->output_mem[0], dft32ms_ovl ); - } - - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_DFT && hCPE->hCoreCoder[0]->ini_frame > 0 ) - { - /* windowing the OLA memory */ - dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - /* copy memories from previous MDCT Stereo frame to output_mem */ - mvr2r( hCPE->input_mem[n], hCPE->output_mem[n], dft32ms_ovl ); - } - - if ( ivas_total_brate > IVAS_SID_5k2 || n == 0 || hCPE->last_element_mode != IVAS_CPE_TD || hCPE->nchan_out == 1 ) - { - for ( i = 0; i < dft32ms_ovl; i++ ) - { - hCPE->output_mem[n][i] *= hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( dft32ms_ovl - 1 - i )]; - } - } - else - { - tmpF = 1.0f / hCPE->hStereoTCA->prevTargetGain; - for ( i = 0; i < dft32ms_ovl; i++ ) - { - hCPE->output_mem[n][i] *= tmpF * hCPE->hStereoDft->win32ms[STEREO_DFT32MS_STEP * ( dft32ms_ovl - 1 - i )]; - } - for ( i = 0; i < delay_comp_TD; i++ ) - { - hCPE->hCoreCoder[1]->prev_synth_buffer[i] *= tmpF; - } - for ( i = 0; i < L_DEC_MEM_LEN_ICA; i++ ) - { - hCPE->hStereoTCA->memChanR[i] *= tmpF; - } - } - } - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - /* create passive downmix of MDCT Stereo memories for DFT input memory */ - v_add( hCPE->input_mem_LB[0], hCPE->input_mem_LB[1], hCPE->input_mem_LB[0], STEREO_DFT32MS_OVL_16k ); - v_multc( hCPE->input_mem_LB[0], 0.5f, hCPE->input_mem_LB[0], STEREO_DFT32MS_OVL_16k ); - - v_add( hCPE->input_mem[0], hCPE->input_mem[1], hCPE->input_mem[0], dft32ms_ovl ); - v_multc( hCPE->input_mem[0], 0.5f, hCPE->input_mem[0], dft32ms_ovl ); - - if ( hCPE->nchan_out == 1 ) - { - v_add( hCPE->output_mem[0], hCPE->output_mem[1], hCPE->output_mem[0], dft32ms_ovl ); - v_multc( hCPE->output_mem[0], INV_SQRT_2, hCPE->output_mem[0], dft32ms_ovl ); - } - } - - /* Update the side_gain[] parameters */ - if ( hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - tmpF = 0; - if ( hCPE->hStereoTCA != NULL ) - { - tmpF = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); - } - - set_f( hCPE->hStereoDft->side_gain + STEREO_DFT_NBDIV * STEREO_DFT_BAND_MAX, tmpF, STEREO_DFT_BAND_MAX ); - } - - /* reset residual coding / ESF (secondary channel) */ - set_zero( hCPE->hStereoDft->res_cod_mem, STEREO_DFT_OVL_8k ); - set_zero( hCPE->input_mem[1], NS2SA( sts[0]->output_Fs, STEREO_DFT32MS_OVL_NS ) ); - } - - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode != IVAS_CPE_TD && hCPE->hCoreCoder[0]->ini_frame > 0 ) - { - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hCPE->hStereoTD->tdm_last_SM_flag = 0; - hCPE->hStereoTD->tdm_prev_last_SM_flag = 0; - - /* First frame after DFT frame AND the content is uncorrelated or xtalk -> the primary channel is forced to left */ - if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 ) - { - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - } - } - - /* no secondary channel in the previous frame -> memory resets */ - if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_DFT ) - { - if ( hCPE->last_element_brate <= IVAS_SID_5k2 && hCPE->nchan_out == 2 ) - { - /* reset CLDFB memories */ - cldfb_reset_memory_ivas( sts[0]->cldfbAna ); - cldfb_reset_memory_ivas( sts[0]->cldfbBPF ); - cldfb_reset_memory_ivas( sts[0]->cldfbSyn ); - - sts[0]->mem_deemph = 0; - - sts[0]->tilt_code = 0.0f; - sts[0]->gc_threshold = 0.0f; - - set_f( sts[0]->mem_syn1, 0, M ); - set_f( sts[0]->mem_syn2, 0, M ); - set_f( sts[0]->mem_syn3, 0, M ); - set_f( sts[0]->mem_syn_r_float, 0.0f, L_SYN_MEM ); - - sts[1]->last_L_frame = sts[0]->last_L_frame; - - /* reset PCh memories */ - set_f( sts[0]->old_exc, 0, L_EXC_MEM_DEC ); - set_f( sts[0]->lsf_old, 0, M ); - set_f( sts[0]->lsp_old, 0, M ); - } - sts[1]->last_extl = -1; - - sts[1]->prev_bfi = sts[0]->prev_bfi; - - set_f( sts[1]->old_pitch_buf, (float) L_SUBFR, 2 * NB_SUBFR16k ); - sts[1]->old_fpitchFB_float = 2 * (float) L_SUBFR; - - /* reset CLDFB memories */ - cldfb_reset_memory_ivas( sts[1]->cldfbAna ); - cldfb_reset_memory_ivas( sts[1]->cldfbBPF ); - cldfb_reset_memory_ivas( sts[1]->cldfbSyn ); - - sts[1]->mem_deemph = 0; - - sts[1]->tilt_code = 0.0f; - sts[1]->gc_threshold = 0.0f; - - set_f( sts[1]->mem_syn1, 0, M ); - set_f( sts[1]->mem_syn2, 0, M ); - set_f( sts[1]->mem_syn3, 0, M ); - set_f( sts[1]->mem_syn_r_float, 0.0f, L_SYN_MEM ); - - sts[1]->last_L_frame = sts[0]->last_L_frame; - - /* populate PCh memories into the SCh */ - mvr2r( sts[0]->old_exc, sts[1]->old_exc, L_EXC_MEM_DEC ); - mvr2r( sts[0]->lsf_old, sts[1]->lsf_old, M ); - mvr2r( sts[0]->lsp_old, sts[1]->lsp_old, M ); - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - sts[1]->last_core = sts[0]->last_core; - sts[1]->last_coder_type = sts[0]->last_coder_type; - - mvr2r( sts[0]->hHQ_core->old_out, sts[1]->hHQ_core->old_out, L_FRAME48k ); - mvr2r( sts[0]->delay_buf_out, sts[1]->delay_buf_out, HQ_DELTA_MAX * HQ_DELAY_COMP ); - mvr2r( sts[0]->hTcxDec->old_syn_Overl_float, sts[1]->hTcxDec->old_syn_Overl_float, 256 ); - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - set_f( sts[0]->old_exc, 0.0f, L_EXC_MEM_DEC ); - set_f( sts[1]->old_exc, 0.0f, L_EXC_MEM_DEC ); - } - - /* TD/DFT -> MDCT stereo switching (there is no TCX in the TD stereo secondary channel, or DFT stereo) */ - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; - sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; - sts[1]->fscale = sts[0]->fscale; - sts[1]->hTcxCfg->tcx_mdct_window_length = sts[0]->hTcxCfg->tcx_mdct_window_length; - sts[1]->pit_res_max = sts[0]->pit_res_max; - sts[1]->pit_res_max_past = sts[0]->pit_res_max_past; - sts[1]->hTcxDec->L_frameTCX = sts[0]->hTcxDec->L_frameTCX; - sts[1]->hTcxDec->conceal_eof_gain_float = sts[0]->hTcxDec->conceal_eof_gain_float; - } - - return; -} -#endif -/*-------------------------------------------------------------------* - * Function stereo_td2dft_update() - * - * update OLA buffers - needed for switching from TD stereo to DFT stereo - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_td2dft_update( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - const int16_t n, /* i : channel number */ - float output[], /* i/o: synthesis @internal Fs */ - float synth[], /* i/o: synthesis @output Fs */ - float hb_synth[], /* i/o: hb synthesis */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t ovl, ovl_TCX, dft32ms_ovl, hq_delay_comp; - int16_t ns, nsLB; - int16_t old_out_len, old_outLB_len; - Decoder_State **sts; - - if ( hCPE == NULL ) - { - return; - } + // fix need to do correctly + set32_fx( sts[1]->old_pitch_buf_fx, L_deposit_h( L_SUBFR ), 2 * NB_SUBFR16k ); + sts[1]->old_fpitchFB = L_deposit_h( 2 * L_SUBFR ); /* 15Q16 */ + move32(); - /* initialization */ - sts = hCPE->hCoreCoder; - ovl = NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); - dft32ms_ovl = (int16_t) ( ( STEREO_DFT32MS_OVL_MAX * sts[0]->output_Fs ) / 48000 ); - hq_delay_comp = NS2SA( sts[0]->output_Fs, DELAY_CLDFB_NS ); + /* reset CLDFB memories */ - if ( hCPE->element_mode >= IVAS_CPE_DFT && hCPE->element_mode != IVAS_CPE_MDCT ) - { - if ( sts[n]->core == ACELP_CORE ) - { - if ( n == 0 ) - { - /* update DFT analysis overlap memory @internal_fs: core synthesis */ - mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); + cldfb_reset_memory_fx( sts[1]->cldfbAna ); + cldfb_reset_memory_fx( sts[1]->cldfbBPF ); + cldfb_reset_memory_fx( sts[1]->cldfbSyn ); - /* update DFT analysis overlap memory @internal_fs: BPF */ - if ( sts[n]->p_bpf_noise_buf_float ) - { - mvr2r( sts[n]->p_bpf_noise_buf_float + sts[n]->L_frame - ovl, hCPE->input_mem_BPF[n], ovl ); - } + sts[1]->mem_deemph_fx = 0; + move16(); - /* update DFT analysis overlap memory @output_Fs: BWE */ - if ( sts[n]->extl != -1 || ( sts[n]->bws_cnt > 0 && sts[n]->core == ACELP_CORE ) ) - { - mvr2r( hb_synth + output_frame - dft32ms_ovl, hCPE->input_mem[n], dft32ms_ovl ); - } - } - else - { - /* update DFT analysis overlap memory @internal_fs: core synthesis, secondary channel */ - mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); - } - } - else /* TCX core */ - { - /* LB-TCX synthesis */ - mvr2r( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], ovl ); + sts[1]->tilt_code_fx = 0; + move16(); + sts[1]->gc_threshold_fx = 0; + move16(); - /* BPF */ - if ( n == 0 && sts[n]->p_bpf_noise_buf_float ) - { - mvr2r( sts[n]->p_bpf_noise_buf_float + sts[n]->L_frame - ovl, hCPE->input_mem_BPF[n], ovl ); - } - /* TCX synthesis (it was already delayed in TD stereo in core_switching_post_dec()) */ - if ( sts[n]->hTcxDec != NULL ) - { - ovl_TCX = NS2SA( sts[n]->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); - mvr2r( synth + sts[n]->hTcxDec->L_frameTCX + hq_delay_comp - ovl_TCX, hCPE->input_mem[n], ovl_TCX - hq_delay_comp ); - mvr2r( sts[n]->delay_buf_out, hCPE->input_mem[n] + ovl_TCX - hq_delay_comp, hq_delay_comp ); - } - } - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->input_mem[0] != NULL ) - { + set16_fx( sts[1]->mem_syn1_fx, 0, M ); + set16_fx( sts[1]->mem_syn2_fx, 0, M ); + set16_fx( sts[1]->mem_syn3_fx, 0, M ); + set16_fx( sts[1]->mem_syn_r, 0, L_SYN_MEM ); - /* update DFT stereo OLA memories */ - /*set_zero( hCPE->input_mem_LB[n], STEREO_DFT32MS_OVL_16k );*/ - lerp_flt( output + sts[n]->L_frame - ovl, hCPE->input_mem_LB[n], STEREO_DFT32MS_OVL_16k, ovl ); + sts[1]->last_L_frame = sts[0]->last_L_frame; /* Q0 */ + move16(); + /* Should not force sts[1]->Q_exc on the data of st[0], instead it better to just reuse the current scaling of st[0]*/ + Copy( sts[0]->old_exc_fx, sts[1]->old_exc_fx, L_EXC_MEM_DEC ); /* Q_exc */ + sts[1]->Q_exc = sts[0]->Q_exc; + move16(); + sts[1]->Q_exc_cng = sts[0]->Q_exc_cng; + move16(); + sts[1]->prev_Q_exc = sts[0]->prev_Q_exc; + move16(); + Copy( sts[0]->Q_subfr, sts[1]->Q_subfr, L_Q_MEM ); + sts[1]->prev_Q_bwe_syn = sts[0]->prev_Q_bwe_syn; + move16(); + sts[1]->prev_Q_bwe_syn2 = sts[0]->prev_Q_bwe_syn2; + move16(); - /* TCX synthesis (it was already delayed in TD stereo in core_switching_post_dec()) */ - if ( sts[n]->hTcxDec != NULL ) - { - ovl_TCX = NS2SA( sts[n]->hTcxDec->L_frameTCX * FRAMES_PER_SEC, STEREO_DFT32MS_OVL_NS ); - mvr2r( synth + sts[n]->hTcxDec->L_frameTCX + hq_delay_comp - ovl_TCX, hCPE->input_mem[n], ovl_TCX - hq_delay_comp ); - mvr2r( sts[n]->delay_buf_out, hCPE->input_mem[n] + ovl_TCX - hq_delay_comp, hq_delay_comp ); - } + sts[1]->prev_Q_bwe_exc_fb = sts[0]->prev_Q_bwe_exc_fb; + move16(); + sts[1]->prev_Qx = sts[0]->prev_Qx; + move16(); + sts[1]->prev_Q_bwe_exc = sts[0]->prev_Q_bwe_exc; + move16(); + sts[1]->prev_Q_synth = sts[0]->prev_Q_synth; + move16(); + sts[1]->Q_syn = sts[0]->Q_syn; + move16(); + sts[1]->Q_syn2 = sts[0]->Q_syn2; + move16(); + sts[1]->Q_syn_cng = sts[0]->Q_syn_cng; + move16(); + sts[1]->prev_Q_syn = sts[0]->prev_Q_syn; + move16(); - if ( n == 1 ) + Copy( sts[0]->lsf_old_fx, sts[1]->lsf_old_fx, M ); /* Q2.56 */ + Copy( sts[0]->lsp_old_fx, sts[1]->lsp_old_fx, M ); /* Q15 */ + IF( EQ_16( hCPE->element_mode, IVAS_CPE_MDCT ) ) { - nsLB = NS2SA( sts[n]->L_frame * FRAMES_PER_SEC, N_ZERO_MDCT_NS ); - ns = NS2SA( sts[n]->output_Fs, N_ZERO_MDCT_NS ); - old_outLB_len = (int16_t) ( ( 3 * STEREO_MDCT2DFT_FADE_LEN_48k * sts[0]->L_frame * FRAMES_PER_SEC ) / 48000 ); - old_out_len = (int16_t) ( ( STEREO_MDCT2DFT_FADE_LEN_48k * sts[0]->output_Fs ) / 48000 ); + sts[1]->last_core = sts[0]->last_core; /* Q0 */ + move16(); + sts[1]->last_coder_type = sts[0]->last_coder_type; /* Q0 */ + move16(); - /* update buffers used for fading when switching to DFT Stereo */ - v_add( sts[0]->hHQ_core->old_outLB + nsLB, sts[1]->hHQ_core->old_outLB + nsLB, hCPE->old_outLB_mdct, old_outLB_len ); - lerp_flt( hCPE->old_outLB_mdct, hCPE->old_outLB_mdct, STEREO_MDCT2DFT_FADE_LEN_48k, old_outLB_len ); - v_multc( hCPE->old_outLB_mdct, 0.5f, hCPE->old_outLB_mdct, STEREO_MDCT2DFT_FADE_LEN_48k ); - v_add( sts[0]->hHQ_core->old_out + ns, sts[1]->hHQ_core->old_out + ns, hCPE->old_out_mdct, old_out_len ); - v_multc( hCPE->old_out_mdct, 0.5f, hCPE->old_out_mdct, old_out_len ); - } + // 32bit buffer + Copy32( sts[0]->hHQ_core->oldOut_fx, sts[1]->hHQ_core->oldOut_fx, L_FRAME48k ); /* exp(exp_old_out) */ + Copy32( sts[0]->delay_buf_out32_fx, sts[1]->delay_buf_out32_fx, HQ_DELTA_MAX * HQ_DELAY_COMP ); /* Q11 */ + Copy32( sts[0]->hTcxDec->old_syn_Overl_32, sts[1]->hTcxDec->old_syn_Overl_32, 256 ); /* Q_old_syn_Overl*/ + // 16 bit buffer + Copy( sts[0]->hHQ_core->old_out_fx, sts[1]->hHQ_core->old_out_fx, L_FRAME48k ); /* exp(exp_old_out) */ - if ( n == 0 ) - { - set_zero( hCPE->input_mem_BPF[n], STEREO_DFT32MS_OVL_16k ); + sts[1]->hHQ_core->Q_old_wtda = sts[0]->hHQ_core->Q_old_wtda; + move16(); + Copy( sts[0]->delay_buf_out_fx, sts[1]->delay_buf_out_fx, HQ_DELTA_MAX * HQ_DELAY_COMP ); /* Q0 */ + Copy( sts[0]->hTcxDec->old_syn_Overl, sts[1]->hTcxDec->old_syn_Overl, 256 ); /* Q_old_syn_Overl*/ } } + ELSE IF( EQ_16( hCPE->element_mode, IVAS_CPE_TD ) && EQ_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) + { + set16_fx( sts[0]->old_exc_fx, 0, L_EXC_MEM_DEC ); + set16_fx( sts[1]->old_exc_fx, 0, L_EXC_MEM_DEC ); + } - /* update ovl buffer for possible switching from TD stereo SCh ACELP frame to MDCT stereo TCX frame */ - if ( hCPE->element_mode == IVAS_CPE_TD && n == 1 && sts[n]->hTcxDec == NULL ) + /* TD/DFT -> MDCT stereo switching (there is no TCX in the TD stereo secondary channel, or DFT stereo) */ + IF( EQ_16( hCPE->element_mode, IVAS_CPE_MDCT ) && NE_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) { - mvr2r( output + sts[n]->L_frame / 2, hCPE->hStereoTD->TCX_old_syn_Overl, sts[n]->L_frame / 2 ); + sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; /* Q0 */ + move16(); + sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; /* Q0 */ + move16(); + sts[1]->fscale = sts[0]->fscale; /* Q0 */ + move16(); + sts[1]->hTcxCfg->tcx_mdct_window_length = sts[0]->hTcxCfg->tcx_mdct_window_length; /* Q0 */ + move16(); + sts[1]->pit_res_max = sts[0]->pit_res_max; /* Q0 */ + move16(); + sts[1]->pit_res_max_past = sts[0]->pit_res_max_past; /* Q0 */ + move16(); + sts[1]->hTcxDec->L_frameTCX = sts[0]->hTcxDec->L_frameTCX; /* Q0 */ + move16(); + sts[1]->hTcxDec->conceal_eof_gain = sts[0]->hTcxDec->conceal_eof_gain; /* Q14 */ + move16(); + sts[1]->hTcxDec->conceal_eof_gain32 = sts[0]->hTcxDec->conceal_eof_gain32; /* sts[0]->hTcxDec->conceal_eof_gain_e */ + move32(); + sts[1]->hTcxDec->conceal_eof_gain_e = sts[0]->hTcxDec->conceal_eof_gain_e; + move16(); } return; } -#else +/*-------------------------------------------------------------------* + * Function stereo_td2dft_update() + * + * update OLA buffers - needed for switching from TD stereo to DFT stereo + *-------------------------------------------------------------------*/ void stereo_td2dft_update_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ const Word16 n, /* i : channel number Q0*/ @@ -3827,49 +2218,11 @@ void stereo_td2dft_update_fx( return; } -#endif /*-------------------------------------------------------------------* * Function stereo_mdct2dft_update() * * update OLA buffers - needed for switching from MDCT stereo to DFT stereo *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_mdct2dft_update( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float output0[], /* i/o: synthesis @internal Fs, ch0 */ - float synth0[] /* i/o: synthesis @output Fs, ch0 */ -) -{ - int16_t i; - int16_t fade_len, fade_len_LB; - float tmpF; - Decoder_State *st; - - if ( hCPE == NULL ) - { - return; - } - - st = hCPE->hCoreCoder[0]; - - fade_len = (int16_t) ( ( STEREO_MDCT2DFT_FADE_LEN_48k * st->output_Fs ) / 48000 ); - fade_len_LB = (int16_t) ( 3 * ( STEREO_MDCT2DFT_FADE_LEN_48k * st->L_frame * FRAMES_PER_SEC ) / 48000 ); - - tmpF = 1.f / fade_len; - for ( i = 0; i < fade_len; i++ ) - { - synth0[i] = ( hCPE->old_out_mdct[i] * ( fade_len - i ) + synth0[i] * i ) * tmpF; - } - - tmpF = 1.f / fade_len_LB; - for ( i = 0; i < fade_len_LB; i++ ) - { - output0[i] = ( hCPE->old_outLB_mdct[i] * ( fade_len_LB - i ) + output0[i] * i ) * tmpF; - } - - return; -} -#else void stereo_mdct2dft_update_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 output0_fx[], /* i/o: synthesis @internal Fs, ch0 Q11*/ @@ -3978,46 +2331,8 @@ void stereo_mdct2dft_update_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -static float ncross_corr_self( - float *signal, - const int16_t x, - const int16_t y, - const int16_t corr_len, - const int16_t subsampling ) -{ - float c_c; - float energy_xy, energy_x, energy_y; - uint16_t j; - float *signal_a, *signal_b; - - c_c = 0.0f; - energy_x = 0.0f; - energy_y = 0.0f; - signal_a = &signal[x]; - signal_b = &signal[y]; - - for ( j = 0; j < corr_len; j += subsampling ) - { - c_c += ( signal_a[j] * signal_b[j] ); - energy_x += ( signal_a[j] ) * ( signal_a[j] ); - energy_y += ( signal_b[j] ) * ( signal_b[j] ); - } - - energy_xy = sqrtf( energy_x * energy_y ); - if ( energy_xy < 1.0f ) - { - energy_xy = 1.0f; /* conceal silent frames */ - } - c_c = c_c / energy_xy; - return c_c; -} -#else static Word32 ncross_corr_self_fx( Word32 *signal_fx, /* Q11*/ const Word16 x, /* Q0 */ @@ -4127,7 +2442,6 @@ static Word32 ncross_corr_self_fx( move32(); return c_c_fx_return; } -#endif /*-------------------------------------------------------------------* @@ -4137,153 +2451,6 @@ static Word32 ncross_corr_self_fx( * switching from DFT stereo to TD stereo *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void smooth_dft2td_transition( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *output[CPE_CHANNELS], /* i/o: synthesis @external Fs */ - const int16_t output_frame /* i : output frame lenght */ -) -{ - Decoder_State **sts; - int16_t ipit, i, ipit_max, ipit_min, idiff, ilen, j, ch, lsearch, corr_len, subsampl; - float flen, ftmp_corr, fmaxcorr, fac_fs; - float tmp_out[L_FRAME48k + L_FRAME48k / 2], tmp_out2[L_FRAME48k], *ptO2, *ptO, *pt1, *ptE; - - if ( hCPE == NULL ) - { - return; - } - - /* initialization */ - sts = hCPE->hCoreCoder; - - if ( ( hCPE->element_mode == IVAS_CPE_TD && ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_mode == IVAS_CPE_MDCT ) && ( sts[0]->clas_dec == VOICED_CLAS && sts[0]->coder_type < TRANSITION && sts[0]->coder_type > UNVOICED && sts[0]->last_coder_type > UNVOICED && sts[1]->coder_type > UNVOICED ) ) ) - { - /* length of OVA */ - ilen = output_frame / 2; - - /* correlation length */ - corr_len = output_frame / 20; - subsampl = 4; - - for ( ch = 0; ch < hCPE->nchan_out; ch++ ) - { - /* core to external sampling frequency ratio */ - fac_fs = (float) output_frame / sts[ch]->L_frame; - - /* Find minimum and maximum pitch*/ - ipit_min = minimum( sts[ch]->old_pitch_buf + 4, 4, &flen ) + 4; - ipit_max = maximum( sts[ch]->old_pitch_buf + 4, 4, &flen ) + 4; - ipit_min = (short) ( sts[ch]->old_pitch_buf[ipit_min] * fac_fs + 0.5f ); - ipit_max = (short) ( sts[ch]->old_pitch_buf[ipit_max] * fac_fs + 0.5f ); - - if ( ( ipit_max + corr_len ) > ilen ) /*ensure the search is performed on the available memory*/ - { - continue; - } - - lsearch = ipit_max - ipit_min + corr_len; - lsearch = min( lsearch, output_frame / 4 ); - - /* ptr init for search of the best correlation in the past frame */ - ptE = hCPE->prev_synth_chs[ch] + output_frame - ipit_max - corr_len; - - idiff = 0; - fmaxcorr = -1.0f; - for ( i = 0; i < lsearch; i++ ) - { - ftmp_corr = ncross_corr_self( ptE, i, ipit_max, corr_len, subsampl ); - if ( ftmp_corr > fmaxcorr ) - { - idiff = i; - } - fmaxcorr = max( fmaxcorr, ftmp_corr ); - } - - ipit = ipit_max - idiff; - - ptO = tmp_out + output_frame; - - /* If the correlation is too low, don't use the prediction */ - if ( fmaxcorr < DFT2TD_CORR_THRESH ) - { - mvr2r( &output[ch][0], ptO, ilen ); - } - else - { - mvr2r( hCPE->prev_synth_chs[ch], tmp_out, output_frame ); - pt1 = tmp_out + output_frame - ipit; - for ( i = 0; i < ilen; i++ ) - { - ptO[i] = pt1[i]; - } - } - - /* Set buffer for the reserved buffer of the current frame */ - ptO2 = tmp_out2 + output_frame - ilen; - set_f( tmp_out2 + output_frame - ilen, 0.0f, ilen ); - for ( i = 0; i < output_frame; i++ ) - { - tmp_out2[i] = output[ch][output_frame - 1 - i]; - } - /* ptr init for search of the best correlation of the current frame */ - ptE = ptO2 - ( ipit_max + corr_len ); - - idiff = 0; - fmaxcorr = -1.0f; - for ( i = 0; i < lsearch; i++ ) - { - ftmp_corr = ncross_corr_self( ptE, i, ipit_max, corr_len, subsampl ); - if ( ftmp_corr > fmaxcorr ) - { - idiff = i; - } - fmaxcorr = max( fmaxcorr, ftmp_corr ); - } - - ipit = ipit_max - idiff; - - /* If the correlation is too low, don't use the prediction */ - if ( fmaxcorr > DFT2TD_CORR_THRESH ) - { - pt1 = tmp_out2 + output_frame - ilen - ipit; - for ( i = 0; i < ilen; i++ ) - { - ptO2[i] = pt1[i]; - } - } - - /* perform OVA between predicted signals */ - flen = 1.0f / ilen; - - for ( i = 0; i < 4; i++ ) - { - output[ch][i] = ( ( ( 4.0f - i ) * output[ch][i] + i * ptO[i] ) * 0.25f * ( ilen - i ) + tmp_out2[output_frame - 1 - i] * i ) * flen; - } - for ( ; i < ilen - 4; i++ ) - { - output[ch][i] = ( ptO[i] * ( ilen - i ) + tmp_out2[output_frame - 1 - i] * i ) * flen; - } - j = 0; - for ( ; i < ilen; i++ ) - { - output[ch][i] = ( ptO[i] * ( ilen - i ) + ( ( 4.0f - j ) * tmp_out2[output_frame - 1 - i] + j * output[ch][i] ) * i * 0.25f ) * flen; - j++; - } - } - } - else if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - /* Updates */ - for ( ch = 0; ch < hCPE->nchan_out; ch++ ) - { - mvr2r( output[ch], hCPE->prev_synth_chs[ch], output_frame ); - } - } - - return; -} -#else void smooth_dft2td_transition_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *output_fx[CPE_CHANNELS], /* i/o: synthesis @external Fs Q11*/ @@ -4474,4 +2641,3 @@ void smooth_dft2td_transition_fx( return; } -#endif diff --git a/lib_dec/ivas_stereo_td_dec.c b/lib_dec/ivas_stereo_td_dec.c index 966f0d650..c53135f0a 100644 --- a/lib_dec/ivas_stereo_td_dec.c +++ b/lib_dec/ivas_stereo_td_dec.c @@ -41,47 +41,10 @@ #include "ivas_rom_com.h" #include "ivas_cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * stereo_td_init_dec() - * - * Initialize TD stereo decoder - *-------------------------------------------------------------------*/ - -void stereo_td_init_dec( - STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ - const int16_t last_element_mode /* i : last element mode */ -) -{ - hStereoTD->tdm_SM_flag = 0; - hStereoTD->tdm_last_SM_flag = 0; - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_prev_last_SM_flag = 0; - hStereoTD->tdm_LRTD_flag = 0; - hStereoTD->prevSP_ratio = 0.5f; - hStereoTD->SP_ratio_LT = 0.0f; - hStereoTD->c_LR_LT = 0.5f; - - hStereoTD->flag_skip_DMX = 0; - - if ( last_element_mode == IVAS_CPE_MDCT ) - { - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_LRTD_flag = 1; - } - - set_f( hStereoTD->TCX_old_syn_Overl, 0.0f, L_FRAME16k / 2 ); - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void stereo_td_init_dec_fx( STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ const Word16 last_element_mode /* i : last element mode Q0*/ @@ -122,14 +85,12 @@ void stereo_td_init_dec_fx( return; } -#endif /*-------------------------------------------------------------------* * tdm_configure_dec() * * Configure TD stereo decoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word32 power_table[32 + 1] = { 53687092, 60237908, 67588048, 75835024, 85088304, 95470648, 107119832, 120190432, 134855872, 151310800, 169773488, 190488992, 213732176, 239811440, 269072832, 301904704, @@ -377,196 +338,6 @@ void tdm_configure_dec_fx( return; } -#else -void tdm_configure_dec( - const int16_t ivas_format, /* i : IVAS format */ - const int16_t ism_mode, /* i : ISM mode in combined format */ - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - int16_t *tdm_ratio_idx, /* o : ratio index */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - STEREO_TD_DEC_DATA_HANDLE hStereoTD; - Decoder_State **sts; - int16_t tdm_tmp_SM_LRTD_flag; - int16_t mod_ct, core, bits_offset; - int16_t idx_LRTD_pri_side, tdm_inst_ratio_idx; - int32_t element_brate_adapt; - int16_t bstr_last_pos; - - hStereoTD = hCPE->hStereoTD; - sts = hCPE->hCoreCoder; - - element_brate_adapt = hCPE->element_brate + hCPE->brate_surplus; - bstr_last_pos = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ) - nb_bits_metadata + (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); - - /*----------------------------------------------------------------* - * Decode CoreCoder signaling - *----------------------------------------------------------------*/ - - /* temporarily decode PCh signaling */ - bits_offset = sts[0]->next_bit_pos; - core = get_indice_st( sts[0], hCPE->element_brate, bits_offset, 1 ); - bits_offset += 1; - - if ( core == ACELP_CORE && hCPE->element_brate < IVAS_24k4 ) - { - mod_ct = get_indice_st( sts[0], hCPE->element_brate, bits_offset, 3 ); - /* Only transition mode is important to decoder, otherwise mod_ct is set to AUDIO only to easy debugging if needed */ - if ( mod_ct != TRANSITION ) - { - mod_ct = AUDIO; - } - } - else /* core != ACELP_CORE */ - { - mod_ct = AUDIO; /* coder_type == VOICED || coder_type == GENERIC */ - } - - /* Get few parameters needed to decode the bitrate allocated to each channel */ - /* Get the coder_type of the secondary channel (last parameter on 2 bits) */ - sts[1]->coder_type = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SECONDARY_SIGNALLING, TDM_SECONDARY_SIGNALLING ); - - /* Get the LRTD config flag: 1 = LRTD configuration, favor closer bitrate per channel; - 0 = Pri/Sec configuration, bitrates linked wrt. the mono */ - tdm_tmp_SM_LRTD_flag = sts[1]->coder_type & 0x1; - sts[1]->coder_type >>= 1; - hStereoTD->tdm_Pitch_reuse_flag = 0; - - if ( sts[1]->coder_type == 2 ) - { - sts[1]->coder_type = GENERIC; - } - else if ( sts[1]->coder_type == 3 ) - { - sts[1]->coder_type = AUDIO; - - if ( hCPE->element_brate <= IVAS_24k4 ) - { - hStereoTD->tdm_Pitch_reuse_flag = 1; - sts[1]->coder_type = GENERIC; - } - } - - /*----------------------------------------------------------------* - * Decode TDM parameters - *----------------------------------------------------------------*/ - - /* Get the correlation ratio */ - *tdm_ratio_idx = get_indice_st( sts[0], element_brate_adapt, (int16_t) ( bstr_last_pos - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS ), TDM_RATIO_BITS ); - - hStereoTD->tdm_use_IAWB_Ave_lpc = 0; - if ( sts[1]->coder_type == INACTIVE ) - { - /* Get the flag on the LPC reusage type (primary channel of ave LPC */ - hStereoTD->tdm_use_IAWB_Ave_lpc = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS, TDM_LP_REUSE_BITS ); - hStereoTD->tdm_lp_reuse_flag = 1; - } - else - { - /* Get the flag on the LPC reusage */ - hStereoTD->tdm_lp_reuse_flag = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SECONDARY_SIGNALLING - TDM_RATIO_BITS - TDM_LP_REUSE_BITS, TDM_LP_REUSE_BITS ); - } - - sts[0]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; /* the flag was already read in function stereo_memory_dec() */ - sts[1]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; - - tdm_inst_ratio_idx = *tdm_ratio_idx; - - /* update past tdm_SM_flag */ - hStereoTD->tdm_prev_last_SM_flag = hStereoTD->tdm_last_SM_flag; - hStereoTD->tdm_last_SM_flag = hStereoTD->tdm_SM_flag; - - idx_LRTD_pri_side = -1; - if ( hStereoTD->tdm_LRTD_flag == 1 ) - { - idx_LRTD_pri_side = tdm_tmp_SM_LRTD_flag; - hStereoTD->tdm_SM_flag = 0; - if ( tdm_inst_ratio_idx == TDM_NQ ) - { - hStereoTD->flag_skip_DMX = 1; - } - else - { - hStereoTD->flag_skip_DMX = 0; - } - /* Set primary channel */ - *tdm_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; - if ( idx_LRTD_pri_side == 1 ) - { - *tdm_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - } - } - else - { - hStereoTD->tdm_SM_flag = tdm_tmp_SM_LRTD_flag; - if ( hCPE->nchan_out == 1 ) - { - /* in case of mono output, use exclusively the YX upmixing scheme in order to deal with NOOP signals */ - hStereoTD->tdm_SM_flag = 0; - } - } - - if ( sts[1]->coder_type == INACTIVE && ( *tdm_ratio_idx >= 29 || *tdm_ratio_idx <= 1 ) ) - { - hStereoTD->tdm_lp_reuse_flag = hStereoTD->tdm_use_IAWB_Ave_lpc; - hStereoTD->tdm_use_IAWB_Ave_lpc = 0; - } - - /*sts[1]->tdm_inst_ratio_idx = sts[0]->tdm_inst_ratio_idx;*/ - - if ( hCPE->nchan_out == 1 && hCPE->hStereoDftDmx != NULL ) - { - /* in mono DMX, only targetGain is needed */ - int16_t tmpS = 20; - if ( hStereoTD->tdm_LRTD_flag == 0 ) - { - tmpS = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS, STEREO_BITS_TCA_GD ); - } - hCPE->hStereoDftDmx->targetGain = usdequant( tmpS, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); - hCPE->hStereoDftDmx->targetGain = powf( 10, hCPE->hStereoDftDmx->targetGain ); - } - else - { - if ( hStereoTD->tdm_LRTD_flag == 0 ) - { - hCPE->hStereoTCA->refChanIndx = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS, STEREO_BITS_TCA_CHAN ); - hCPE->hStereoTCA->indx_ica_NCShift = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN, STEREO_BITS_TCA_CORRSTATS ); - hCPE->hStereoTCA->indx_ica_gD = get_indice_st( sts[0], element_brate_adapt, bstr_last_pos - TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS + STEREO_BITS_TCA_CHAN + STEREO_BITS_TCA_CORRSTATS, STEREO_BITS_TCA_GD ); - } - else - { - hCPE->hStereoTCA->refChanIndx = L_CH_INDX; - hCPE->hStereoTCA->indx_ica_NCShift = 0; - hCPE->hStereoTCA->indx_ica_gD = 20; - } - hCPE->hStereoTCA->targetGain = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); - hCPE->hStereoTCA->targetGain = powf( 10, hCPE->hStereoTCA->targetGain ); - } - /* set the BW of the secondary channel */ - if ( hStereoTD->tdm_LRTD_flag && sts[1]->bits_frame_channel >= IVAS_16k4 / FRAMES_PER_SEC ) - { - /* set BW of the secondary channel in LRTD stereo mode as the BW of the primary channel at higher bitrates */ - sts[1]->bwidth = sts[0]->bwidth; - } - else - { - /* limit BW of the secondary channel in LRTD mode to WB for low bitrates */ - sts[1]->bwidth = WB; - } - - /*----------------------------------------------------------------* - * bitbudget distribution between channels (taking into account also metadata bitbudget) - *----------------------------------------------------------------*/ - - tdm_bit_alloc( ivas_format, ism_mode, hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, - hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), - &hStereoTD->tdm_low_rate_mode, sts[1]->coder_type, *tdm_ratio_idx, hStereoTD->tdm_Pitch_reuse_flag, - sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, tdm_inst_ratio_idx ); - - return; -} -#endif /*-------------------------------------------------------------------* * Function tdm_downmix_plain() @@ -655,77 +426,6 @@ void tdm_upmix_plain_fx( * downmix Left+Right to Primary+Secondary channel with fade in/out *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tdm_upmix_fade( - float Left[], /* o : left channel */ - float Right[], /* o : right channel */ - const float PCh_2_L[], /* i : primary channel */ - const float SCh_2_R[], /* i : secondary channel */ - const float LR_ratio_mem, /* i : last mixing ratio */ - const float inv_den_LR_ratio_mem, /* i : last inverse mixing ration */ - const float LR_ratio, /* i : mixing ratio */ - const float inv_den_LR_ratio, /* i : inverse mixing ration */ - const int16_t start_index, /* i : start index */ - const int16_t end_index, /* i : end index */ - const int16_t fading_type /* i : fading type */ -) -{ - int16_t i; - float step, step2, fade_in, fade_out; - - step = 1.0f / (float) ( end_index - start_index ); - fade_out = 1.0f; - fade_in = 0.0f; - - fade_out *= inv_den_LR_ratio_mem; - fade_in *= inv_den_LR_ratio; - step2 = step * inv_den_LR_ratio; - step *= inv_den_LR_ratio_mem; - - if ( fading_type == 0 ) /* Switching from YX scheme to SM scheme */ - { - for ( i = start_index; i < end_index; i++ ) - { - Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_in; - Right[i] = ( -LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_in; - fade_in += step2; - fade_out -= step; - } - } - else if ( fading_type == 1 ) /* SM scheme */ - { - for ( i = start_index; i < end_index; i++ ) - { - Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_in; - Right[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_in; - fade_in += step2; - fade_out -= step; - } - } - else if ( fading_type == 2 ) /* Switching from SM scheme to YX scheme */ - { - for ( i = start_index; i < end_index; i++ ) - { - Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) - SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_in; - Right[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) - PCh_2_L[i] ) * fade_out + ( -LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_in; - fade_in += step2; - fade_out -= step; - } - } - else if ( fading_type == 3 ) /* YX scheme */ - { - for ( i = start_index; i < end_index; i++ ) - { - Left[i] = ( LR_ratio_mem * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_out + ( LR_ratio * ( PCh_2_L[i] - SCh_2_R[i] ) + SCh_2_R[i] ) * fade_in; - Right[i] = ( -LR_ratio_mem * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_out + ( -LR_ratio * ( PCh_2_L[i] + SCh_2_R[i] ) + PCh_2_L[i] ) * fade_in; - fade_in += step2; - fade_out -= step; - } - } - - return; -} -#endif // Q31 Word32 inv_time[960 + 1] = { @@ -851,7 +551,6 @@ Word32 inv_time[960 + 1] = { 2255760, 2253393, 2251031, 2248674, 2246321, 2243974, 2241632, 2239294, 2236962 }; -#ifdef IVAS_FLOAT_FIXED static void tdm_upmix_fade_fx( Word32 Left_fx[], /* o : left channel Qx*/ Word32 Right_fx[], /* o : right channel Qx*/ @@ -954,175 +653,12 @@ static void tdm_upmix_fade_fx( return; } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * stereo_tdm_combine() * * Combine Primary and Secondary channels into L and R channels *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_tdm_combine( - CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ - float *PCh_2_L, /* i/o: Primary channel -> output as left channel */ - float *SCh_2_R, /* i/o: Secondary channel -> output as right channel*/ - const int16_t output_frame, /* i : Number of samples */ - const int16_t flag_HB, /* i : flag to distinguish between core (0) and HB (1) synthesis */ - const int16_t tdm_ratio_idx /* i : TDM ratio index */ -) -{ - int16_t i; - int32_t output_Fs; - float LR_ratio, LR_ratio_mem; - float Left[L_FRAME48k], Right[L_FRAME48k]; - int16_t upmixing_delay; - int16_t stereo_tdm_coder_type; - int16_t tdm_n_OVA; - int16_t tdm_last_ratio_idx = hCPE->hStereoTD->tdm_last_ratio_idx; - - output_Fs = hCPE->hCoreCoder[0]->output_Fs; - tdm_n_OVA = NS2SA( output_Fs, TDM_L_NOVA_NS ); - - if ( flag_HB ) - { - upmixing_delay = NS2SA( output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ); - } - else - { - upmixing_delay = NS2SA( output_Fs, ACELP_LOOK_NS + DELAY_CLDFB_NS ); - } - - LR_ratio = tdm_ratio_tabl[tdm_ratio_idx]; - LR_ratio_mem = tdm_ratio_tabl[tdm_last_ratio_idx]; - - if ( hCPE->hStereoTD->flag_skip_DMX ) - { - stereo_tdm_coder_type = 10; /* no DMX */ - mvr2r( PCh_2_L, Left, output_frame ); - mvr2r( SCh_2_R, Right, output_frame ); - } - else if ( hCPE->hStereoTD->tdm_last_SM_flag == 1 ) - { - if ( hCPE->hStereoTD->tdm_prev_last_SM_flag == 0 ) - { - stereo_tdm_coder_type = 0; /* mode 1 : Switching from YX scheme to SM scheme*/ - } - else - { - stereo_tdm_coder_type = 1; /* mode 2 : SM scheme*/ - } - } - else - { - if ( hCPE->hStereoTD->tdm_prev_last_SM_flag == 1 ) - { - stereo_tdm_coder_type = 2; /* mode 3 : Switching from SM scheme to YX scheme*/ - } - else - { - stereo_tdm_coder_type = 3; /* mode 4 : YX scheme*/ - } - } - - switch ( stereo_tdm_coder_type ) - { - case ( 0 ): - { - /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for YX scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 1 ); - - /* Switching from YX scheme to SM scheme */ - tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 0 ); - - /* Do the upmixing of the other samples with the new coefficient and formular for SM scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 0 ); - } - break; - case ( 1 ): - { - /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for SM scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 0 ); - - /* Do the upmixing of the other samples with the new coefficient and formular for SM scheme */ - if ( LR_ratio == LR_ratio_mem ) - { - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], upmixing_delay, output_frame, 0 ); - } - else - { - tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 1 ); - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 0 ); - } - } - break; - case ( 2 ): - { - /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for SM scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 0 ); - - /* Switching from SM scheme to YX scheme */ - tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 2 ); - - /* Do the upmixing of the other samples with the new coefficient and formular for YX scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 1 ); - } - break; - case ( 3 ): - { - /* Do the upmixing of the first upmixing_delay samples with the old coefficient and formular for YX scheme */ - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], 0, upmixing_delay, 1 ); - - /* Do the upmixing of the other samples with the new coefficient and formular for YX scheme */ - if ( LR_ratio == LR_ratio_mem ) - { - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], upmixing_delay, output_frame, 1 ); - } - else - { - tdm_upmix_fade( Left, Right, PCh_2_L, SCh_2_R, LR_ratio_mem, tdm_den_ratio_tabl[tdm_last_ratio_idx], LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay, upmixing_delay + tdm_n_OVA, 3 ); - tdm_upmix_plain( Left, Right, PCh_2_L, SCh_2_R, LR_ratio, tdm_den_ratio_tabl[tdm_ratio_idx], upmixing_delay + tdm_n_OVA, output_frame, 1 ); - } - } - break; - default: - break; - } - - for ( i = 0; i < output_frame; i++ ) - { - PCh_2_L[i] = Left[i]; - SCh_2_R[i] = Right[i]; - } - - /* DFT -> TD stereo switching: equalize signal energies */ - if ( hCPE->last_element_mode != IVAS_CPE_TD ) - { - float incr, fac; - - if ( hCPE->hStereoDftDmx != NULL ) - { - fac = 1.0f; - } - else - { - fac = hCPE->hStereoTCA->targetGain; - } - - if ( fac < 1.0f ) - { - incr = ( 1.0f - fac ) / NS2SA( output_Fs, ACELP_LOOK_NS ); - - for ( i = 0; i < NS2SA( output_Fs, ACELP_LOOK_NS ); i++ ) - { - PCh_2_L[i] *= fac; - fac += incr; - } - } - } - - return; -} -#else void stereo_tdm_combine_fx( CPE_DEC_HANDLE hCPE, /* i/o: CPE decoder structure */ Word32 *PCh_2_L_fx, /* i/o: Primary channel -> output as left channel Qx*/ @@ -1320,4 +856,3 @@ void stereo_tdm_combine_fx( } return; } -#endif diff --git a/lib_dec/ivas_svd_dec.c b/lib_dec/ivas_svd_dec.c index e48408fbe..3b8a90a4c 100644 --- a/lib_dec/ivas_svd_dec.c +++ b/lib_dec/ivas_svd_dec.c @@ -54,31 +54,6 @@ * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float GivensRotation( const float x, const float z ); - -static void biDiagonalReductionLeft( float singularVectors[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const int16_t currChannel, float *sig_x, float *g ); - -static void biDiagonalReductionRight( float singularVectors[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const int16_t currChannel, float *sig_x, float *g ); - -static void singularVectorsAccumulationLeft( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC ); - -static void singularVectorsAccumulationRight( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsC ); - -static void HouseholderReduction( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, float *eps_x ); - -static int16_t BidagonalDiagonalisation( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t nChannelsL, const int16_t nChannelsC, const float eps_x ); - -static void ApplyQRTransform( float singularVectors_Left[][MAX_OUTPUT_CHANNELS], float singularValues[MAX_OUTPUT_CHANNELS], float singularVectors_Right[][MAX_OUTPUT_CHANNELS], float secDiag[MAX_OUTPUT_CHANNELS], const int16_t startIndex, const int16_t currentIndex, const int16_t nChannelsL, const int16_t nChannelsC ); - -static void ApplyRotation( float singularVector[][MAX_OUTPUT_CHANNELS], const float c, const float s, float x11, float x12, float *f, float *g, const int16_t currentIndex1, const int16_t currentIndex2, const int16_t nChannels ); - -static float maxWithSign( const float a ); - -static void flushToZeroArray( float arr[MAX_OUTPUT_CHANNELS], const int16_t length ); - -static void flushToZeroMat( float mat[][MAX_OUTPUT_CHANNELS], const int16_t m, const int16_t n ); -#else static void HouseholderReduction_fx( Word32 singularVectors_Left_fx[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_Left_e) */ Word32 singularValues_fx[MAX_OUTPUT_CHANNELS], /* exp(singularValues_fx_e) */ @@ -193,9 +168,7 @@ static void ApplyQRTransform_fx( const Word16 nChannelsL, /* i : number of rows in the matrix to be decomposed Q0*/ const Word16 nChannelsC /* i : number of columns in the matrix to be decomposed Q0*/ ); -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * mat2svdMat() * @@ -279,91 +252,6 @@ void svdMat2mat_fx( return; } -#else - -/*------------------------------------------------------------------------- - * mat2svdMat() - * - * external matrix format to internal - *-------------------------------------------------------------------------*/ - -void mat2svdMat( - const float *mat, /* i : matrix as column ordered vector */ - float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* o : matrix as two-dimensional arry */ - const int16_t nRows, /* i : number of rows of the matrix */ - const int16_t mCols, /* i : number of columns of the matrix */ - const int16_t transpose /* i : flag indication transposition */ -) -{ - int16_t i, j; - - if ( transpose ) - { - for ( i = 0; i < mCols; i++ ) - { - for ( j = 0; j < nRows; j++ ) - { - svdMat[i][j] = mat[j + nRows * i]; - } - - set_zero( &svdMat[i][mCols], MAX_OUTPUT_CHANNELS - nRows ); - } - - for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) - { - set_zero( svdMat[i], MAX_OUTPUT_CHANNELS ); - } - } - else - { - for ( i = 0; i < nRows; i++ ) - { - for ( j = 0; j < mCols; j++ ) - { - svdMat[i][j] = mat[i + nRows * j]; - } - - set_zero( &svdMat[i][mCols], MAX_OUTPUT_CHANNELS - mCols ); - } - - for ( ; i < MAX_OUTPUT_CHANNELS; i++ ) - { - set_zero( svdMat[i], MAX_OUTPUT_CHANNELS ); - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * svdMat2mat() - * - * transfer a matrix from a two dimensional array to a column wise ordered vector - *---------------------------------------------------------------------*/ - -void svdMat2mat( - float svdMat[MAX_OUTPUT_CHANNELS][MAX_OUTPUT_CHANNELS], /* i : matrix as two-dimensional arry */ - float *mat, /* o : matrix as column ordered vector */ - const int16_t nRows, /* i : number of rows of the matrix */ - const int16_t mCols /* i : number of columns of the matrix */ -) -{ - int16_t i, j; - - for ( i = 0; i < nRows; i++ ) - { - - - for ( j = 0; j < mCols; j++ ) - { - mat[i + nRows * j] = svdMat[i][j]; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * svd() @@ -371,7 +259,6 @@ void svdMat2mat( * perform a singular value decomposition X=USV of a matrix X *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: error or success */ Word16 svd_fx( Word32 InputMatrix[][MAX_OUTPUT_CHANNELS], /* i : matrix to be decomposed (M) InputMatrix_e*/ @@ -477,84 +364,6 @@ Word16 svd_fx( return ( errorMessage ); } -#else -/*! r: error or success */ -int16_t svd( - float InputMatrix[][MAX_OUTPUT_CHANNELS], /* i : matrix to be decomposed (M) */ - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* o : left singular vectors (U) */ - float singularValues[MAX_OUTPUT_CHANNELS], /* o : singular values vector (S) */ - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* o : right singular vectors (V) */ - const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ - const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ -) -{ - int16_t iCh, jCh; - int16_t lengthSingularValues; - int16_t errorMessage, condition; - int16_t max_length = ( ( nChannelsL > nChannelsC ) ? nChannelsL : nChannelsC ); - float secDiag[MAX_OUTPUT_CHANNELS]; - float eps_x = 0.0f, temp; - - push_wmops( "svd" ); - - set_zero( secDiag, MAX_OUTPUT_CHANNELS ); - - /* Collecting Values */ - for ( iCh = 0; iCh < nChannelsL; iCh++ ) - { - for ( jCh = 0; jCh < nChannelsC; jCh++ ) - { - singularVectors_Left[iCh][jCh] = InputMatrix[iCh][jCh]; - } - } - - /* Householder reduction */ - HouseholderReduction( singularVectors_Left, singularValues, singularVectors_Right, secDiag, nChannelsL, nChannelsC, &eps_x ); - - /* Set extremely small values to zero if needed */ - flushToZeroArray( singularValues, max_length ); - flushToZeroMat( singularVectors_Left, nChannelsL, nChannelsL ); - flushToZeroMat( singularVectors_Right, nChannelsC, nChannelsC ); - - /* BidagonalDiagonalisation */ - errorMessage = BidagonalDiagonalisation( singularVectors_Left, singularValues, singularVectors_Right, secDiag, nChannelsL, nChannelsC, eps_x ); - - /* Sort the singular values descending order */ - lengthSingularValues = min( nChannelsL, nChannelsC ); - - do - { - condition = 0; - for ( iCh = 0; iCh < lengthSingularValues - 1; iCh++ ) - { - if ( singularValues[iCh] < singularValues[iCh + 1] ) - { - condition = 1; - temp = singularValues[iCh]; - singularValues[iCh] = singularValues[iCh + 1]; - singularValues[iCh + 1] = temp; - - for ( jCh = 0; jCh < nChannelsL; ++jCh ) - { - temp = singularVectors_Left[jCh][iCh]; - singularVectors_Left[jCh][iCh] = singularVectors_Left[jCh][iCh + 1]; - singularVectors_Left[jCh][iCh + 1] = temp; - } - - for ( jCh = 0; jCh < nChannelsC; ++jCh ) - { - temp = singularVectors_Right[jCh][iCh]; - singularVectors_Right[jCh][iCh] = singularVectors_Right[jCh][iCh + 1]; - singularVectors_Right[jCh][iCh + 1] = temp; - } - } - } - } while ( condition == 1 ); - - pop_wmops(); - return ( errorMessage ); -} -#endif /*-----------------------------------------------------------------------* * Local functions @@ -566,7 +375,6 @@ int16_t svd( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 BidagonalDiagonalisation_fx( Word32 singularVectors_Left_fx[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) singularValues_fx_e*/ Word32 singularValues_fx[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) singularValues_fx_e*/ @@ -751,112 +559,6 @@ static Word16 BidagonalDiagonalisation_fx( return ( error ); } -#else -static int16_t BidagonalDiagonalisation( - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) */ - float singularValues[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) */ - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* i/o: right singular vectors (V) */ - float secDiag[MAX_OUTPUT_CHANNELS], /* i/o: */ - const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ - const int16_t nChannelsC, /* i : number of columns in the matrix to be decomposed */ - const float eps_x /* i : */ -) -{ - int16_t kCh, nCh, iCh, jCh, split; - float c, s, f1, f2; - float g = 0.0f; - int16_t convergence, iteration, found_split; - int16_t error = 0; - - for ( iCh = nChannelsC - 1; iCh >= 0; iCh-- ) /* nChannelsC */ - { - convergence = 0; - iteration = 0; - split = iCh - 1; - - while ( convergence == 0 ) - { - iteration++; - found_split = 1; - - for ( jCh = iCh; jCh >= 0; jCh-- ) - { - split = jCh - 1; - if ( fabsf( secDiag[jCh] ) <= CONVERGENCE_FACTOR * eps_x ) /* is secDiag[ch] vanishing compared to eps_x */ - { - found_split = 0; - break; - } - if ( fabsf( singularValues[split] ) <= CONVERGENCE_FACTOR * eps_x ) /* is singularValues[split] vanishing compared to eps_x */ - { - break; - } - } - - convergence = ( jCh == iCh ) ? 1 : 0; - - if ( found_split ) - { - s = 1.0f; - c = 0.0f; - - for ( kCh = jCh; kCh <= iCh; kCh++ ) - { - g = s * secDiag[kCh]; - secDiag[kCh] = c * secDiag[kCh]; - if ( fabsf( g ) <= CONVERGENCE_FACTOR * eps_x ) - { - break; - } - - c = singularValues[kCh]; - singularValues[kCh] = GivensRotation( g, singularValues[kCh] ); - c = c / maxWithSign( singularValues[kCh] ); - s = -g / maxWithSign( singularValues[kCh] ); - - ApplyRotation( singularVectors_Left, c, s, 0, 0, &f1, &f2, kCh, split, nChannelsL ); /* nChannelsL */ - } - } - - if ( convergence ) - { - singularValues[iCh] = (float) singularValues[iCh]; - if ( singularValues[iCh] < 0.0f ) - { - singularValues[iCh] = -singularValues[iCh]; - for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ - { - singularVectors_Right[nCh][iCh] = -singularVectors_Right[nCh][iCh]; - } - } - } - else - { - if ( iteration >= SVD_MAX_NUM_ITERATION ) - { - if ( singularValues[iCh] < 0.0f ) - { - singularValues[iCh] = -singularValues[iCh]; - - for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ - { - singularVectors_Right[nCh][iCh] = -singularVectors_Right[nCh][iCh]; - } - } - error = 1; - convergence = 1; - } - else - { - ApplyQRTransform( singularVectors_Left, singularValues, singularVectors_Right, secDiag, jCh, iCh, nChannelsL, nChannelsC ); /* nChannelsC */ - } - } - } - } - - return ( error ); -} -#endif /*------------------------------------------------------------------------- * ApplyQRTransform() @@ -864,7 +566,6 @@ static int16_t BidagonalDiagonalisation( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ApplyQRTransform_fx( Word32 singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) singularValues_e*/ Word32 singularValues[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) singularValues_e*/ @@ -1055,71 +756,6 @@ static void ApplyQRTransform_fx( return; } -#else -static void ApplyQRTransform( - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* i/o: left singular vectors (U) */ - float singularValues[MAX_OUTPUT_CHANNELS], /* i/o: singular values vector (S) */ - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* i/o: right singular vectors (V) */ - float secDiag[MAX_OUTPUT_CHANNELS], /* i/o: */ - const int16_t startIndex, /* i : */ - const int16_t currentIndex, /* i : */ - const int16_t nChannelsL, /* i : number of rows in the matrix to be decomposed */ - const int16_t nChannelsC /* i : number of columns in the matrix to be decomposed */ -) -{ - int16_t ch, split; - float d = 0.0f, g = 0.0f, r = 0.0f, x_ii = 0.0f, x_split = 0.0f, x_kk = 0.0f, mu = 0.0f, aux = 0.0f; - float c = 1.0f; - float s = 1.0f; - - x_kk = singularValues[currentIndex]; - x_ii = singularValues[startIndex]; - split = currentIndex - 1; - - x_split = singularValues[split]; - g = secDiag[split]; - r = secDiag[currentIndex]; - - d = ( x_split + x_kk ) * ( x_split - x_kk ) + ( g + r ) * ( g - r ); - d /= maxWithSign( ( r + r ) * x_split ); - - g = GivensRotation( 1.0f, d ); - mu = x_split / maxWithSign( d + ( d >= 0.0f ? 1 : ( -1 ) ) * fabsf( g ) ) - r; - d = ( ( x_ii + x_kk ) * ( x_ii - x_kk ) + r * mu ) / maxWithSign( x_ii ); - - /*QR transformation*/ - for ( ch = startIndex; ch <= split; ch++ ) - { - r = s * secDiag[ch + 1]; - g = c * secDiag[ch + 1]; - - secDiag[ch] = GivensRotation( d, r ); - c = d / maxWithSign( secDiag[ch] ); - s = r / maxWithSign( secDiag[ch] ); - - r = s * singularValues[ch + 1]; - x_split = c * singularValues[ch + 1]; - aux = g; - ApplyRotation( singularVectors_Right, c, s, x_ii, aux, &d, &g, ch + 1, ch, nChannelsC ); - - singularValues[ch] = GivensRotation( d, r ); - if ( fabsf( singularValues[ch] ) > CONVERGENCE_FACTOR * fabsf( singularValues[ch] ) ) - { - aux = 1.0f / singularValues[ch]; - c = d * aux; - s = r * aux; - } - - ApplyRotation( singularVectors_Left, c, s, g, x_split, &d, &x_ii, ch + 1, ch, nChannelsL ); - } - - secDiag[startIndex] = 0.0f; - secDiag[currentIndex] = d; - singularValues[currentIndex] = x_ii; - - return; -} -#endif /*------------------------------------------------------------------------- * ApplyRotation() @@ -1127,7 +763,6 @@ static void ApplyQRTransform( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ApplyRotation_fx( Word32 singularVector[][MAX_OUTPUT_CHANNELS], const Word32 c, /* exp(c_e)*/ @@ -1173,35 +808,6 @@ static void ApplyRotation_fx( return; } -#else -static void ApplyRotation( - float singularVector[][MAX_OUTPUT_CHANNELS], - const float c, - const float s, - float x11, - float x12, - float *d, - float *g, - const int16_t currentIndex1, - const int16_t currentIndex2, - const int16_t nChannels ) -{ - int16_t ch; - - *d = c * x11 + s * x12; - *g = c * x12 - s * x11; - - for ( ch = 0; ch < nChannels; ch++ ) - { - x11 = singularVector[ch][currentIndex2]; - x12 = singularVector[ch][currentIndex1]; - singularVector[ch][currentIndex2] = ( c * x11 + s * x12 ); - singularVector[ch][currentIndex1] = ( c * x12 - s * x11 ); - } - - return; -} -#endif /*------------------------------------------------------------------------- * HouseholderReduction() @@ -1209,7 +815,6 @@ static void ApplyRotation( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void HouseholderReduction_fx( Word32 singularVectors_Left_fx[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_Left_e) */ Word32 singularValues_fx[MAX_OUTPUT_CHANNELS], /* exp(singularValues_fx_e) */ @@ -1255,34 +860,6 @@ static void HouseholderReduction_fx( return; } -#else -static void HouseholderReduction( - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], - float singularValues[MAX_OUTPUT_CHANNELS], - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], - float secDiag[MAX_OUTPUT_CHANNELS], - const int16_t nChannelsL, - const int16_t nChannelsC, - float *eps_x ) -{ - int16_t nCh; - float g = 0.0f, sig_x = 0.0f; - - /* Bidiagonal Reduction for every channel */ - for ( nCh = 0; nCh < nChannelsC; nCh++ ) /* nChannelsC */ - { - biDiagonalReductionLeft( singularVectors_Left, singularValues, secDiag, nChannelsL, nChannelsC, nCh, &sig_x, &g ); - biDiagonalReductionRight( singularVectors_Left, secDiag, nChannelsL, nChannelsC, nCh, &sig_x, &g ); - *eps_x = max( *eps_x, ( fabsf( singularValues[nCh] ) + fabsf( secDiag[nCh] ) ) ); - } - - /* SingularVecotr Accumulation */ - singularVectorsAccumulationRight( singularVectors_Left, singularVectors_Right, secDiag, nChannelsC ); - singularVectorsAccumulationLeft( singularVectors_Left, singularValues, nChannelsL, nChannelsC ); - - return; -} -#endif /*------------------------------------------------------------------------- * biDiagonalReductionLeft() @@ -1290,7 +867,6 @@ static void HouseholderReduction( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void biDiagonalReductionLeft_fx( Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */ Word32 singularValues[MAX_OUTPUT_CHANNELS], /* exp(singularValues_e) */ @@ -1457,78 +1033,6 @@ IF( LT_16( currChannel, nChannelsL ) ) /* i <= m */ return; } -#else -static void biDiagonalReductionLeft( - float singularVectors[][MAX_OUTPUT_CHANNELS], - float singularValues[MAX_OUTPUT_CHANNELS], - float secDiag[MAX_OUTPUT_CHANNELS], - const int16_t nChannelsL, - const int16_t nChannelsC, - const int16_t currChannel, - float *sig_x, - float *g ) -{ - int16_t iCh, jCh, idx; - float norm_x, f, r; - - secDiag[currChannel] = ( *sig_x ) * ( *g ); - - /* Setting values to 0 */ - ( *sig_x ) = 0.0f; - ( *g ) = 0.0f; - - if ( currChannel < nChannelsL ) /* i <= m */ - { - idx = currChannel; - - for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ - { - ( *sig_x ) += fabsf( singularVectors[jCh][currChannel] ); - } - - if ( ( *sig_x ) ) /*(fabsf(*sig_x) > EPSILON * fabsf(*sig_x)) { */ - { - norm_x = 0.0f; - - for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ - { - singularVectors[jCh][currChannel] = ( singularVectors[jCh][currChannel] / maxWithSign( ( *sig_x ) ) ); - norm_x += ( singularVectors[jCh][currChannel] * singularVectors[jCh][currChannel] ); - } - ( *g ) = -( singularVectors[currChannel][idx] >= 0 ? 1 : ( -1 ) ) * sqrtf( norm_x ); - r = ( *g ) * singularVectors[currChannel][idx] - norm_x; - singularVectors[currChannel][idx] = ( singularVectors[currChannel][idx] - ( *g ) ); - - for ( iCh = currChannel + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ - { - norm_x = 0.0f; - for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ - { - norm_x += ( singularVectors[jCh][currChannel] * singularVectors[jCh][iCh] ); - } - - f = norm_x / maxWithSign( r ); - - - for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ - { - singularVectors[jCh][iCh] += ( f * singularVectors[jCh][currChannel] ); - } - } - - - for ( jCh = idx; jCh < nChannelsL; jCh++ ) /* nChannelsL */ - { - singularVectors[jCh][currChannel] = ( singularVectors[jCh][currChannel] * ( *sig_x ) ); - } - } - - singularValues[currChannel] = ( ( *sig_x ) * ( *g ) ); - } - - return; -} -#endif /*------------------------------------------------------------------------- * biDiagonalReductionRight() @@ -1536,7 +1040,6 @@ static void biDiagonalReductionLeft( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void biDiagonalReductionRight_fx( Word32 singularVectors[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */ Word32 secDiag[MAX_OUTPUT_CHANNELS], /* exp(secDiag_e) */ @@ -1693,74 +1196,6 @@ static void biDiagonalReductionRight_fx( return; } -#else -static void biDiagonalReductionRight( - float singularVectors[][MAX_OUTPUT_CHANNELS], - float secDiag[MAX_OUTPUT_CHANNELS], - const int16_t nChannelsL, - const int16_t nChannelsC, - const int16_t currChannel, - float *sig_x, - float *g ) -{ - int16_t iCh, jCh, idx; - float norm_x, r; - - /* Setting values to 0 */ - ( *sig_x ) = 0.0f; - ( *g ) = 0.0f; - - if ( currChannel < nChannelsL && currChannel != ( nChannelsC - 1 ) ) /* i <=m && i !=n */ - { - idx = currChannel + 1; - - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ - { - ( *sig_x ) += fabsf( singularVectors[currChannel][jCh] ); - } - - if ( ( *sig_x ) ) /*(fabsf(*sig_x) > EPSILON * fabsf(*sig_x)) { */ - { - norm_x = 0.0f; - - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /*nChannelsC */ - { - singularVectors[currChannel][jCh] = ( singularVectors[currChannel][jCh] / maxWithSign( ( *sig_x ) ) ); - norm_x += ( singularVectors[currChannel][jCh] * singularVectors[currChannel][jCh] ); - } - ( *g ) = -( singularVectors[currChannel][idx] >= 0 ? 1 : ( -1 ) ) * sqrtf( norm_x ); - r = ( *g ) * singularVectors[currChannel][idx] - norm_x; - singularVectors[currChannel][idx] = ( singularVectors[currChannel][idx] - ( *g ) ); - - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ - { - secDiag[jCh] = singularVectors[currChannel][jCh] / maxWithSign( r ); - } - - for ( iCh = currChannel + 1; iCh < nChannelsL; iCh++ ) /* nChannelsL */ - { - norm_x = 0.0f; - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ - { - norm_x += ( singularVectors[iCh][jCh] * singularVectors[currChannel][jCh] ); - } - - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ - { - singularVectors[iCh][jCh] += ( norm_x * secDiag[jCh] ); - } - } - - for ( jCh = idx; jCh < nChannelsC; jCh++ ) /* nChannelsC */ - { - singularVectors[currChannel][jCh] = ( singularVectors[currChannel][jCh] * ( *sig_x ) ); - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * singularVectorsAccumulationLeft() @@ -1768,7 +1203,6 @@ static void biDiagonalReductionRight( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void singularVectorsAccumulationLeft_fx( Word32 singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) as Input, Q31 as output */ Word32 singularValues[MAX_OUTPUT_CHANNELS], /* exp(singularValues_e) */ @@ -1861,68 +1295,6 @@ static void singularVectorsAccumulationLeft_fx( return; } -#else -static void singularVectorsAccumulationLeft( - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], - float singularValues[MAX_OUTPUT_CHANNELS], - const int16_t nChannelsL, - const int16_t nChannelsC ) -{ - int16_t nCh, iCh, k; - int16_t nChannels; - float norm_y, t_jj, t_ii; - - /* Processing */ - nChannels = min( nChannelsL, nChannelsC ); /* min(nChannelsL,ChannelsC) */ - - for ( nCh = nChannels - 1; nCh >= 0; nCh-- ) /* min(nChannelsL,ChannelsC) */ - { - t_ii = singularValues[nCh]; - - for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ - { - singularVectors_Left[nCh][iCh] = 0.0f; - } - - if ( t_ii ) /*if (fabsf(t_ii) > EPSILON *fabsf(t_ii)) {*/ - { - t_ii = 1.0f / maxWithSign( t_ii ); - - - for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ - { - norm_y = 0.0f; - for ( k = nCh + 1; k < nChannelsL; k++ ) /* nChannelsL */ - { - norm_y += ( singularVectors_Left[k][nCh] * singularVectors_Left[k][iCh] ); - } - t_jj = t_ii * norm_y / maxWithSign( singularVectors_Left[nCh][nCh] ); - - for ( k = nCh; k < nChannelsL; k++ ) /* nChannelsL */ - { - singularVectors_Left[k][iCh] += ( t_jj * singularVectors_Left[k][nCh] ); - } - } - - for ( iCh = nCh; iCh < nChannelsL; iCh++ ) /* nChannelsL */ - { - singularVectors_Left[iCh][nCh] = ( singularVectors_Left[iCh][nCh] * t_ii ); - } - } - else - { - for ( iCh = nCh; iCh < nChannelsL; iCh++ ) /* nChannelsL */ - { - singularVectors_Left[iCh][nCh] = 0.0f; - } - } - - ++singularVectors_Left[nCh][nCh]; - } - - return; -} -#endif /*------------------------------------------------------------------------- * singularVectorsAccumulationRight() @@ -1930,7 +1302,6 @@ static void singularVectorsAccumulationLeft( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void singularVectorsAccumulationRight_fx( Word32 singularVectors_Left[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */ Word32 singularVectors_Right[][MAX_OUTPUT_CHANNELS], /* exp(singularVectors_e) */ @@ -2008,65 +1379,6 @@ static void singularVectorsAccumulationRight_fx( } return; } -#else -static void singularVectorsAccumulationRight( - float singularVectors_Left[][MAX_OUTPUT_CHANNELS], - float singularVectors_Right[][MAX_OUTPUT_CHANNELS], - float secDiag[MAX_OUTPUT_CHANNELS], - const int16_t nChannelsC ) -{ - int16_t nCh, iCh, k; - int16_t nChannels; - float norm_y, t_ii, ratio_float; - - /* Processing */ - nChannels = nChannelsC; /* nChannelsC */ - - /* avoid compiler warning */ - t_ii = secDiag[nChannels - 1]; - - for ( nCh = nChannels - 1; nCh >= 0; nCh-- ) /* nChannelsC, min(nChannelsLmnChannelsC) otherwise */ - { - - if ( nCh < nChannelsC - 1 ) /* nChannelsC */ - { - if ( t_ii ) /*if (fabsf(t_ii) > EPSILON *fabsf(t_ii)) {*/ - { - - for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC*/ - { - ratio_float = singularVectors_Left[nCh][iCh] / maxWithSign( singularVectors_Left[nCh][nCh + 1] ); - singularVectors_Right[iCh][nCh] = ratio_float / maxWithSign( t_ii ); - } - - for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ - { - norm_y = 0.0f; - - for ( k = nCh + 1; k < nChannelsC; k++ ) /* nChannelsC */ - { - norm_y += ( singularVectors_Left[nCh][k] * singularVectors_Right[k][iCh] ); - } - - for ( k = nCh + 1; k < nChannelsC; k++ ) /* nChannelsC */ - { - singularVectors_Right[k][iCh] += ( norm_y * singularVectors_Right[k][nCh] ); - } - } - } - - for ( iCh = nCh + 1; iCh < nChannelsC; iCh++ ) /* nChannelsC */ - { - singularVectors_Right[nCh][iCh] = singularVectors_Right[iCh][nCh] = 0.0f; - } - } - singularVectors_Right[nCh][nCh] = 1.0f; - t_ii = secDiag[nCh]; - } - - return; -} -#endif /*------------------------------------------------------------------------- * GivensRotation() @@ -2074,7 +1386,6 @@ static void singularVectorsAccumulationRight( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 GivensRotation_fx( const Word32 x, /* exp(x_e) */ const Word16 x_e, @@ -2131,47 +1442,6 @@ static Word32 GivensRotation_fx( return ( r ); } -#else -static float GivensRotation( - const float x, - const float z ) -{ - float x_abs, z_abs; - float cotan, tan, r; - x_abs = fabsf( x ); - z_abs = fabsf( z ); - if ( x_abs <= CONVERGENCE_FACTOR * x_abs && z_abs <= CONVERGENCE_FACTOR * z_abs ) - { - r = 0.0f; - } - else if ( x_abs >= z_abs ) - { - if ( x_abs <= SVD_MINIMUM_VALUE ) - { - r = 0.0f; - } - else - { - cotan = z_abs / ( x_abs ); - r = x_abs * sqrtf( 1.0f + cotan * cotan ); - } - } - else - { - if ( z_abs <= SVD_MINIMUM_VALUE ) - { - r = 0.0f; - } - else - { - tan = x_abs / ( z_abs ); - r = z_abs * sqrtf( 1.0f + tan * tan ); - } - } - - return ( r ); -} -#endif /*------------------------------------------------------------------------- * maxWithSign() @@ -2179,7 +1449,6 @@ static float GivensRotation( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 maxWithSign_fx( const Word32 a /* Qx */ ) @@ -2197,24 +1466,6 @@ static Word32 maxWithSign_fx( return SVD_MINIMUM_VALUE_FX; } } -#else -static float maxWithSign( - const float a ) -{ - if ( fabsf( a ) > SVD_MINIMUM_VALUE ) - { - return a; - } - else if ( a < 0.0f ) - { - return -SVD_MINIMUM_VALUE; - } - else - { - return SVD_MINIMUM_VALUE; - } -} -#endif /*------------------------------------------------------------------------- * flushToZeroArray() @@ -2222,50 +1473,9 @@ static float maxWithSign( * *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void flushToZeroArray( - float arr[MAX_OUTPUT_CHANNELS], - const int16_t length ) -{ - int16_t i; - - for ( i = 0; i < length; ++i ) - { - if ( fabsf( arr[i] ) < SVD_ZERO_FLUSH_THRESHOLD ) - { - arr[i] = 0.0f; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * flushToZeroMat() * * *-------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void flushToZeroMat( - float mat[][MAX_OUTPUT_CHANNELS], - const int16_t m, - const int16_t n ) -{ - int16_t i, j; - - for ( i = 0; i < m; ++i ) - { - for ( j = 0; j < n; ++j ) - { - if ( fabsf( mat[i][j] ) < SVD_ZERO_FLUSH_THRESHOLD ) - { - mat[i][j] = 0.0f; - } - } - } - - return; -} -#endif diff --git a/lib_dec/ivas_tcx_core_dec.c b/lib_dec/ivas_tcx_core_dec.c index 26484158f..d3a3d7bc6 100644 --- a/lib_dec/ivas_tcx_core_dec.c +++ b/lib_dec/ivas_tcx_core_dec.c @@ -48,22 +48,14 @@ * Local prototypes *-------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void dec_prm_tcx( Decoder_State *st, int16_t param[], int16_t param_lpc[], int16_t *total_nbbits, const int16_t last_element_mode, int16_t *bitsRead ); -static void stereo_tcx_dec_mode_switch_reconf( Decoder_State *st, const int16_t MCT_flag, const int16_t last_element_mode ); -#endif - -#ifdef IVAS_FLOAT_FIXED static void dec_prm_tcx_ivas_fx( Decoder_State *st, Word16 param[], Word16 param_lpc[], Word16 *total_nbbits, const Word16 last_element_mode, Word16 *bitsRead ); static void stereo_tcx_dec_mode_switch_reconf_ivas_fx( Decoder_State *st, const Word16 MCT_flag, const Word16 last_element_mode, Word16 *Q_syn_Overl_TDAC, Word16 *Q_fer_samples, Word16 *Q_syn_Overl, Word16 *Q_syn_Overl_TDACFB, Word16 *Q_syn_OverlFB, Word16 *Q_old_out, Word16 *Q_old_outLB, Word16 *Q_old_Aq_12_8 ); -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------* * stereo_tcx_init_dec() * * Initialize stereo TCX decoder *-------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tcx_init_dec_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) Q0*/ @@ -192,91 +184,7 @@ void stereo_tcx_init_dec_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_tcx_init_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ - const int16_t last_element_mode /* i : element mode of previous frame */ -) -{ - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - st->rate_switching_init = 0; - st->m_frame_type = ACTIVE_FRAME; - st->core_brate = st->total_brate; - - /*sampling rate*/ - st->sr_core = getCoreSamplerateMode2_flt( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->flag_ACELP16k, st->rf_flag, st->is_ism_format ); - st->fscale = sr2fscale( st->sr_core ); - - /*frame size*/ - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - hTcxDec->L_frameTCX = (int16_t) ( st->output_Fs / FRAMES_PER_SEC ); - - if ( ( st->L_frame == L_FRAME16k && ( st->bits_frame_nominal * FRAMES_PER_SEC ) <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == 32000 || st->sr_core == INT_FS_16k ) ) ) - { - st->nb_subfr = NB_SUBFR16k; - } - else - { - st->nb_subfr = NB_SUBFR; - } - - /*TCX tools*/ - st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_flag ); - st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); - hTcxDec->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_flag, st->element_mode ); - st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_flag ); - - if ( st->element_mode != EVS_MONO ) - { - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode ); - } - if ( hTcxLtpDec != NULL ) - { - hTcxLtpDec->tcxltp = getTcxLtp( st->sr_core ); - } - - if ( st->element_mode == IVAS_SCE ) - { - st->tcxonly = getTcxonly_ivas( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, MCT_flag, st->is_ism_format ); - /* LPC quantization */ - if ( st->sr_core <= INT_FS_16k && st->tcxonly == 0 ) - { - st->lpcQuantization = 1; - } - else - { - st->lpcQuantization = 0; - } - - if ( st->tcxonly == 0 ) - { - st->numlpc = 1; - } - else - { - st->numlpc = 2; - } - } - - if ( ( st->bits_frame_nominal != st->last_bits_frame_nominal ) || - ( st->bwidth != st->last_bwidth ) || - ( st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE && !( st->prev_bfi == 1 && st->last_core == ACELP_CORE && st->last_con_tcx == 1 ) ) || - ( st->idchan == 1 && st->element_mode == IVAS_CPE_MDCT && last_element_mode != IVAS_CPE_MDCT ) ) - { - /*re-initialization*/ - stereo_tcx_dec_mode_switch_reconf( st, MCT_flag, last_element_mode ); - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * stereo_tcx_core_dec_fx() * @@ -1026,759 +934,7 @@ void stereo_tcx_core_dec_fx( pop_wmops(); return; } -#else -/*-------------------------------------------------------------------* - * stereo_tcx_core_dec() - * - * stereo TCX decoder - *-------------------------------------------------------------------*/ - -void stereo_tcx_core_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const FRAME_MODE frameMode, /* i : Decoder frame mode */ - float *signal_out, /* o : synthesis @internal_Fs */ - float *signal_outFB, /* o : synthesis @output_Fs */ - float pitch_buf[], /* o : floating pitch for each subframe */ - const int16_t sba_dirac_stereo_flag, /* i : signal stereo output for SBA DirAC */ - STEREO_TD_DEC_DATA_HANDLE hStereoTD, /* i/o: TD stereo decoder handle */ - const int16_t last_element_mode, /* i : last element mode */ - const int16_t flag_sec_CNA, /* i : CNA flag for secondary channel */ - STEREO_CNG_DEC_HANDLE hStereoCng, /* i : Stereo CNG handle */ - const int16_t nchan_out, /* i : number of output channels */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -) -{ - int16_t i, k; - - /*Bitstream*/ - int16_t total_nbbits, bitsRead; - int16_t *prm, param[DEC_NPRM_DIV * NB_DIV]; - int16_t param_lpc[NPRM_LPC_NEW]; - - /*LPC*/ - int16_t LSF_Q_prediction; /* o : LSF prediction mode */ - float lsf[( NB_DIV + 1 ) * M], lsp[( NB_DIV + 1 ) * M], lspmid[M], lsfmid[M]; - float lspnew_uw[NB_DIV * M], lsfnew_uw[NB_DIV * M]; - float Aq[( NB_SUBFR16k + 1 ) * ( M + 1 )]; - float pit_gain[NB_SUBFR16k]; - int16_t pitch[NB_SUBFR16k]; - Word16 Aind[M + 1], lspind[M]; - - /*Synth*/ - float synth_buf[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synth; - float synth_bufFB[OLD_SYNTH_SIZE_DEC + L_FRAME_PLUS + M]; - float *synthFB; - - /*Concealment*/ - int16_t bfi; - - float psd[L_FRAME16k], psd_part[NPART_SHAPING]; - - TCX_LTP_DEC_HANDLE hTcxLtpDec = st->hTcxLtpDec; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - push_wmops( "stereo_tcx_core_dec" ); - - /*Sanity check*/ - assert( !( st->total_brate == FRAME_NO_DATA || st->total_brate == SID_2k40 ) ); /*Active frame*/ - assert( st->rf_flag == 0 ); - assert( st->prev_use_partial_copy == 0 ); /* No channel aware mode */ - assert( st->codec_mode == MODE1 ); /* must be in Mode 1 */ - assert( st->mdct_sw == MODE1 ); /* must be switched to TCX in MODE1 */ - - bfi = 0; - - /*--------------------------------------------------------------------------------* - * Initialization or re-configuration of Stereo TCX - *--------------------------------------------------------------------------------*/ - - stereo_tcx_init_dec( st, 0, last_element_mode ); - - /*--------------------------------------------------------------------------------* - * Initializations - *--------------------------------------------------------------------------------*/ - - total_nbbits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - bitsRead = 0; - LSF_Q_prediction = -1; /* to avoid compilation warnings */ - - if ( frameMode == FRAMEMODE_NORMAL ) - { - st->m_decodeMode = DEC_NO_FRAM_LOSS; - bfi = 0; - } - - if ( frameMode == FRAMEMODE_MISSING ) - { - st->m_decodeMode = DEC_CONCEALMENT_EXT; - bfi = 1; - } - - /* for bass postfilter */ - if ( st->tcxonly ) - { - st->p_bpf_noise_buf_float = NULL; - } - else - { - st->p_bpf_noise_buf_float = st->bpf_noise_buf_float; - set_s( pitch, L_SUBFR, st->nb_subfr ); - set_zero( pit_gain, st->nb_subfr ); - } - - /* Initialize pointers */ - synth = synth_buf + hTcxDec->old_synth_len; - synthFB = synth_bufFB + hTcxDec->old_synth_lenFB; - mvr2r( hTcxDec->old_synth_float, synth_buf, hTcxDec->old_synth_len ); - mvr2r( hTcxDec->old_synthFB, synth_bufFB, hTcxDec->old_synth_lenFB ); - set_zero( synth, L_FRAME_PLUS + M ); - set_zero( synthFB, L_FRAME_PLUS + M ); - - /*--------------------------------------------------------------------------------* - * BITSTREAM DECODING - *--------------------------------------------------------------------------------*/ - - if ( !bfi ) - { - st->second_last_core = st->last_core; - - dec_prm_tcx( st, param, param_lpc, &total_nbbits, last_element_mode, &bitsRead ); - } - else - { - if ( st->nbLostCmpt > 1 ) - { - st->flagGuidedAcelp = 0; - } - - /* PLC: [Common: mode decision] - * PLC: Decide which Concealment to use. Update pitch lags if needed */ - st->core = GetPLCModeDecision( st ); - } - - /*--------------------------------------------------------------------------------* - * LPC PARAMETERS - *--------------------------------------------------------------------------------*/ - - st->acelp_cfg.midLpc = 0; - - if ( !bfi ) - { - if ( hTcxDec->enableTcxLpc ) - { - int16_t tcx_lpc_cdk; - if ( bfi && st->use_partial_copy && st->rf_frame_type == RF_TCXFD ) - { - tcx_lpc_cdk = tcxlpc_get_cdk_float( GENERIC ); - } - else - { - tcx_lpc_cdk = tcxlpc_get_cdk_float( st->coder_type ); - } - - mvr2r( st->lsf_old, &lsf[0], M ); - mvr2r( st->lsp_old, &lsp[0], M ); - - D_lsf_tcxlpc_ivas( param_lpc, &lsf[M], lspind, st->narrowBand, tcx_lpc_cdk, st->mem_MA ); - - lsf2lsp( &lsf[M], &lsp[M], M, st->sr_core ); - - lsf_update_memory_float( st->narrowBand, &lsf[M], st->mem_MA, st->mem_MA ); - mvr2r( &lsf[M], st->mem_AR, M ); - hTcxDec->envWeighted = 1; - - E_LPC_lsp_unweight_float( &lsp[M], lspnew_uw, lsfnew_uw, 1.0f / st->gamma_float ); - } - else - { - if ( hTcxDec->envWeighted ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); - hTcxDec->envWeighted = 0; - } - - lpc_unquantize( st, lsf, lsp, param_lpc, lspmid, lsfmid, AUDIO, &LSF_Q_prediction ); - - for ( k = 0; k < st->numlpc; ++k ) - { - mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); - mvr2r( &lsf[( k + 1 ) * M], &lsfnew_uw[k * M], M ); - } - } - - /* PLC: [LPD: LPC concealment] built the moving average for the LPC concealment */ - for ( k = 0; k < st->numlpc; k++ ) - { - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsfnew_uw[k * M + i] ) / 3; - st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; - st->lsfoldbfi0[i] = lsfnew_uw[k * M + i]; - } - } - } - else - { - /* PLC: [LPD: LPC concealment] Conceal the LPC from the lost frame */ - const float *lsfBase; /* base for differential lsf coding */ - - if ( st->tcxonly == 0 || st->core < TCX_10_CORE ) - { - st->numlpc = 1; - } - else - { - st->numlpc = 2; - } - - if ( st->nbLostCmpt == 1 ) - { - mvr2r( st->lsf_old, st->old_lsf_q_cng_float, M ); - mvr2r( st->lsp_old, st->old_lsp_q_cng_float, M ); - } - - lsfBase = PlcGetlsfBase_flt( st->lpcQuantization, st->narrowBand, st->sr_core ); - - dlpc_bfi_flt( st->L_frame, lsfnew_uw, st->lsfold_uw_float, st->last_good, st->nbLostCmpt, st->mem_MA, st->mem_AR, &( st->stab_fac ), st->lsf_adaptive_mean, st->numlpc, st->lsf_cng_float, st->plcBackgroundNoiseUpdated, st->lsf_q_cng_float, st->old_lsf_q_cng_float, lsfBase ); - - hTcxDec->envWeighted = 0; - - mvr2r( st->lspold_uw_float, lsp, M ); - mvr2r( st->lsfold_uw_float, lsf, M ); - - for ( k = 0; k < st->numlpc; k++ ) - { - mvr2r( &lsfnew_uw[k * M], &lsf[( k + 1 ) * M], M ); - - lsf2lsp( &lsf[( k + 1 ) * M], &lsp[( k + 1 ) * M], M, st->sr_core ); - lsf2lsp( st->lsf_q_cng_float, st->lsp_q_cng_float, M, st->sr_core ); - - mvr2r( &lsp[( k + 1 ) * M], &lspnew_uw[k * M], M ); - } - } - - /*---------------------------------------------------------------* - * Rate switching - *---------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( &( lsf[M] ), &( lsf[0] ), M ); - mvr2r( &( lsp[M] ), &( lsp[0] ), M ); - mvr2r( &( lsf[M] ), st->lsf_old, M ); - mvr2r( &( lsp[M] ), st->lsp_old, M ); - mvr2r( &( lsf[M] ), lsfmid, M ); - mvr2r( &( lsp[M] ), lspmid, M ); - lsp2a_stab( st->lsp_old, st->old_Aq_12_8, M ); - } - - if ( st->enablePlcWaveadjust && bfi ) - { - st->hPlcInfo->nbLostCmpt++; - } - - /*--------------------------------------------------------------------------------* - * TD-TCX concealment - *--------------------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - assert( bfi ); /*must only happen in BFI*/ - if ( !st->tcxonly ) - { - /*LPC interpolation*/ - int_lsp( st->L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); - int_lsp( st->L_frame, st->old_lsp_q_cng_float, st->lsp_q_cng_float, st->Aq_cng_float, M, interpol_frac_12k8, 0 ); - } - - /* PLC: [TCX: TD PLC] */ - con_tcx( st, &synthFB[0], -1.f, NULL, 0, NULL ); - lerp_flt( synthFB, synth, st->L_frame, hTcxDec->L_frameTCX ); - st->con_tcx = 1; - set_f( &st->mem_pitch_gain_float[2], st->lp_gainp, st->nb_subfr ); - - /* LPC for ACELP/BWE */ - if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) - { - mvr2r( Aq, st->mem_Aq_float, st->nb_subfr * ( M + 1 ) ); - } - - /* PLC: [TCX: Tonal Concealment] */ - /* Signal that this frame is not TCX */ - if ( st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_UpdateState_ivas( st->hTonalMDCTConc, 0, 0, 0, 0 ); - } - } - - /*--------------------------------------------------------------------------------* - * TCX20 - *--------------------------------------------------------------------------------*/ - - /* Set pointer to parameters */ - prm = param; - if ( st->core == TCX_20_CORE ) - { - - /* Stability Factor */ - if ( !bfi ) - { - st->stab_fac = lsf_stab( &lsf[M], &lsf[0], 0, st->L_frame ); - } - - if ( hTcxDec->enableTcxLpc ) - { - /* Convert quantized lsp to A */ - lsp2a_stab( &lsp[M], Aq, M ); - } - else - { - if ( !st->tcxonly ) - { - if ( !bfi && st->prev_bfi && !( st->safety_net ) && st->rate_switching_reset ) - { - /* diffuse LPC power on rate switching*/ - RecLpcSpecPowDiffuseLc_flt( &lsp[M], &lsp[0], &lsf[M], st, 0 ); - int_lsp( st->L_frame, &lsp[0], &lsp[M], Aq, M, interpol_frac_12k8, 0 ); - mvr2r( &lsf[M], lsfnew_uw, M ); - } - else - { - /* LPC Interpolation for TCX */ - E_LPC_int_lpc_tcx_float( &lsp[0], &lsp[M], Aq ); - } - } - else - { - lsp2a_stab( &lsp[M], Aq, M ); - } - } - if ( !bfi && hTcxDec->tcx_lpc_shaped_ari ) - { - basop_E_LPC_f_lsp_a_conversion( lspind, Aind, M ); - } - - /* TCX decoder */ - decoder_tcx( st, prm, Aq, Aind, &synth[0], &synthFB[0], bfi, 0, sba_dirac_stereo_flag ); - } - - /*--------------------------------------------------------------------------------* - * TCX10 - *--------------------------------------------------------------------------------*/ - - if ( st->core == TCX_10_CORE ) - { - prm = NULL; /* just to avoid MSVC warnings */ - - for ( k = 0; k < 2; k++ ) - { - /* Set pointer to parameters */ - prm = param + ( k * DEC_NPRM_DIV ); - - /* Stability Factor */ - if ( !bfi ) - { - st->stab_fac = lsf_stab( &lsf[( k + 1 ) * M], &lsf[k * M], 0, st->L_frame ); - } - - lsp2a_stab( &lsp[( k + 1 ) * M], Aq, M ); - { - IGFDecRestoreTCX10SubFrameData_flt( st->hIGFDec, k ); - } - - /* TCX decoder */ - decoder_tcx( st, prm, Aq, Aind, &synth[k * st->L_frame / 2], &synthFB[k * hTcxDec->L_frameTCX / 2], bfi, k, sba_dirac_stereo_flag ); - } - } - - /*--------------------------------------------------------------------------------* - * Post-processing - *--------------------------------------------------------------------------------*/ - - if ( st->core == TCX_10_CORE || st->core == TCX_20_CORE ) - { - if ( st->enablePlcWaveadjust || /* bfi */ - ( st->last_total_brate >= HQ_48k && /* recovery */ - st->last_codec_mode == MODE2 ) ) - { - /* waveform adjustment */ - concealment_signal_tuning( st, bfi, synthFB, st->last_core_bfi ); - - if ( ( bfi || st->prev_bfi ) && st->hPlcInfo->Pitch && st->hPlcInfo->concealment_method == TCX_NONTONAL ) - { - lerp_flt( synthFB, synth, st->L_frame, hTcxDec->L_frameTCX ); - - if ( !bfi && st->prev_bfi ) - { - st->hPlcInfo->Pitch = 0; - } - } - } - - if ( !bfi && st->hTonalMDCTConc != NULL ) - { - TonalMDCTConceal_SaveTimeSignal_ivas( st->hTonalMDCTConc, synthFB, hTcxDec->L_frameTCX ); - } - - decoder_tcx_post( st, synth, synthFB, Aq, bfi, 0 ); - - if ( st->core == TCX_20_CORE ) - { - /* LPC Interpolation for BWE/post-processing */ - if ( st->narrowBand || st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) - { - int_lsp( st->L_frame, st->lspold_uw_float, lspnew_uw, Aq, M, interpol_frac_12k8, 0 ); - mvr2r( Aq, st->mem_Aq_float, st->nb_subfr * ( M + 1 ) ); - } - } - } - - if ( st->sr_core <= INT_FS_16k ) - { - if ( st->core == TCX_20_CORE || st->core == TCX_10_CORE || ( st->tcxonly && st->bfi ) ) - { - float pitch_C[4]; - - /* note: the classifier needs the pitch only for tcx_only == 0, i.e. not for TCX10 */ - set_f( pitch_C, floorf( st->old_fpitch_float + 0.5f ), 4 ); - - /* note: codec_mode is forced to MODE2, since FEC_clas_estim() considers only TCX being in Mode2*/ - FEC_clas_estim( synth, pitch_C, st->L_frame, st->tcxonly ? GENERIC : st->core_ext_mode, MODE2, st->mem_syn_clas_estim, &st->clas_dec, &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, hTcxLtpDec->tcxltp ? hTcxDec->tcxltp_last_gain_unmodified_float : -1.0f, st->narrowBand, CLASSIFIER_TCX, bfi, st->preemph_fac_float, st->tcxonly, st->last_core_brate, -1 ); - } - } - - /*--------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------*/ - - if ( bfi && st->last_core != ACELP_CORE ) - { - /* Update FEC_scale_syn parameters */ - if ( hTcxLtpDec->tcxltp_gain_float == 0 ) - { - fer_energy( st->L_frame, UNVOICED, synth, (float) ( st->L_frame / 2 ), &st->enr_old, st->L_frame ); - } - else - { - fer_energy( st->L_frame, st->clas_dec, synth, st->old_fpitch_float, &st->enr_old, st->L_frame ); - } - } - - if ( !bfi && st->clas_dec >= VOICED_TRANSITION && st->clas_dec < INACTIVE_CLAS ) - { - /* use latest LPC set */ - st->old_enr_LP_float = enr_1_Az( Aq, L_SUBFR ); - } - - /* Update past buffers */ - mvr2r( synth_buf + st->L_frame, hTcxDec->old_synth_float, hTcxDec->old_synth_len ); - mvr2r( hTcxDec->old_synthFB + hTcxDec->L_frameTCX - NS2SA( st->output_Fs, PH_ECU_MEM_NS ), hTcxDec->synth_history, NS2SA( st->output_Fs, PH_ECU_MEM_NS ) ); - mvr2r( synth_bufFB + hTcxDec->L_frameTCX, hTcxDec->old_synthFB, hTcxDec->old_synth_lenFB ); - mvr2r( st->hHQ_core->old_out + NS2SA( st->output_Fs, N_ZERO_MDCT_NS ), hTcxDec->old_synthFB + hTcxDec->old_synth_lenFB, NS2SA( st->output_Fs, PH_ECU_LOOKAHEAD_NS ) ); - - mvr2r( &lspnew_uw[( st->numlpc - 1 ) * M], st->lspold_uw_float, M ); - mvr2r( &lsfnew_uw[( st->numlpc - 1 ) * M], st->lsfold_uw_float, M ); - - if ( bfi == 1 ) - { - mvr2r( st->lspold_uw_float, st->lsp_old, M ); /* for recovery */ - mvr2r( st->lsfold_uw_float, st->lsf_old, M ); /* for recovery */ - } - else - { - mvr2r( &lsp[st->numlpc * M], st->lsp_old, M ); - mvr2r( &lsf[st->numlpc * M], st->lsf_old, M ); - } - mvr2r( st->lsp_q_cng_float, st->old_lsp_q_cng_float, M ); - mvr2r( st->lsf_q_cng_float, st->old_lsf_q_cng_float, M ); - - if ( !st->tcxonly && st->hTdCngDec != NULL ) - { - /* update CNG parameters in active frames */ - if ( st->bwidth == NB && hTcxDec->enableTcxLpc && st->core != ACELP_CORE ) - { - float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; - assert( st->L_frame == L_FRAME ); - - mvr2r( synth + L_FRAME - L_LP, buf, L_LP ); - tmp = synth[L_FRAME - L_LP - 1]; - preemph( buf, st->preemph_fac_float, L_LP, &tmp ); - autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); - lag_wind_flt( r, M, INT_FS_12k8, LAGW_WEAK ); - lev_dur( A, r, M, NULL ); - a2lsp_stab( A, lsptmp, &lspnew_uw[0] ); - residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); - - if ( st->hTdCngDec != NULL ) - { - cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); - } - } - else if ( st->hTdCngDec != NULL ) - { - cng_params_upd( &lsp[M], st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame, &st->hTdCngDec->ho_circ_ptr, st->hTdCngDec->ho_ener_circ, &st->hTdCngDec->ho_circ_size, st->hTdCngDec->ho_lsp_circ, DEC, st->hTdCngDec->ho_env_circ, NULL, NULL, NULL, st->last_active_brate, st->element_mode, st->hFdCngDec->hFdCngCom->CngBandwidth ); - } - /* Set 16k LSP flag for CNG buffer */ - st->hTdCngDec->ho_16k_lsp[st->hTdCngDec->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - } - - st->last_is_cng = 0; - - /* Postfiltering */ - post_decoder_flt( st, synth_buf, pit_gain, pitch, signal_out, st->p_bpf_noise_buf_float ); - - if ( signal_outFB ) - { - mvr2r( synthFB, signal_outFB, hTcxDec->L_frameTCX ); - } - - if ( !bfi ) - { - if ( st->enablePlcWaveadjust ) - { - st->hPlcInfo->nbLostCmpt = 0; - } - - if ( param[1 + NOISE_FILL_RANGES] != 0 ) - { - set_f( pitch_buf, hTcxLtpDec->tcxltp_pitch_int + (float) hTcxLtpDec->tcxltp_pitch_fr / (float) st->pit_res_max, NB_SUBFR16k ); - } - else - { - set_f( pitch_buf, L_SUBFR, NB_SUBFR16k ); - } - } - - if ( bfi ) - { - /*"LPD dec - All BFI"*/ - bitsRead = 0; /*to avoid empty counting */ - } - - /* updates */ - st->last_voice_factor = 0.0f; - st->last_coder_type = st->coder_type; - - /* -------------------------------------------------------------- * - * In FFT domain: perform noise estimation during active frames - * -------------------------------------------------------------- */ - - if ( st->hFdCngDec != NULL && ( st->sr_core == INT_FS_12k8 || st->sr_core == INT_FS_16k ) && st->total_brate <= MAX_ACELP_BRATE ) - { - noisy_speech_detection( st->hFdCngDec, st->VAD && st->m_frame_type == ACTIVE_FRAME, signal_out ); - - st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt = 0.99f * st->hFdCngDec->hFdCngCom->likelihood_noisy_speech_flt + 0.01f * (float) st->hFdCngDec->hFdCngCom->flag_noisy_speech; - - st->lp_noise_float = st->hFdCngDec->lp_noise_float; - - if ( st->element_mode != IVAS_CPE_TD ) - { - if ( ivas_format == ISM_FORMAT ) - { - float buffer[L_FRAME16k]; - lerp_flt( signal_outFB, buffer, st->L_frame, hTcxDec->L_frameTCX ); - ApplyFdCng( buffer, NULL, NULL, NULL, st, st->bfi, 0 ); - } - else - { - ApplyFdCng( signal_out, NULL, NULL, NULL, st, st->bfi, 0 ); - } - } - - /* Generate additional comfort noise to mask potential coding artefacts */ - if ( st->m_frame_type == ACTIVE_FRAME && st->flag_cna && !st->cna_dirac_flag ) - { - if ( st->element_mode == IVAS_CPE_TD && nchan_out == 2 ) - { - if ( st->element_mode != last_element_mode ) - { - /* Clear memory for secondary channel CNA */ - set_f( hStereoCng->olapBufferSynth22, 0.0f, st->hFdCngDec->hFdCngCom->frameSize / 2 ); - } - expand_range_flt( st->hFdCngDec->msPsd_float, psd_part, st->hFdCngDec->nFFTpart_shaping ); - scalebands_flt( psd_part, st->hFdCngDec->part_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->midband_shaping, st->hFdCngDec->nFFTpart_shaping, st->hFdCngDec->hFdCngCom->stopFFTbin - st->hFdCngDec->hFdCngCom->startBand, psd, 1 ); - generate_stereo_masking_noise( signal_out, st, hStereoTD, flag_sec_CNA, 0, hStereoCng, nchan_out ); - } - else if ( st->element_mode != IVAS_CPE_DFT ) - { - generate_masking_noise( signal_out, st->hFdCngDec->hFdCngCom, st->hFdCngDec->hFdCngCom->frameSize, 0, 0, 0, st->element_mode, hStereoCng, nchan_out ); - } - } - - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 0 ) - { - ApplyFdCng( signal_out, NULL, NULL, NULL, st, st->bfi, 0 ); - } - } - - pop_wmops(); - return; -} -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Function dec_prm_tcx() - * - * Decode TCX parameters - *-----------------------------------------------------------------*/ - -static void dec_prm_tcx( - Decoder_State *st, /* i/o: decoder memory state */ - int16_t param[], /* o : decoded parameters */ - int16_t param_lpc[], /* o : LPC parameters */ - int16_t *total_nbbits, /* i/o: number of bits / decoded bits */ - const int16_t last_element_mode, /* i : last element mode */ - int16_t *bitsRead /* o : number of read bits */ -) -{ - int16_t start_bit_pos, bits_common; - CONTEXT_HM_CONFIG hm_cfg; - int16_t indexBuffer[N_MAX + 1]; - - assert( st->mdct_sw == MODE1 ); - - /*--------------------------------------------------------------------------------* - * INIT - *--------------------------------------------------------------------------------*/ - - hm_cfg.indexBuffer = indexBuffer; - if ( st->element_mode != IVAS_CPE_MDCT ) - { - st->bits_frame_core = (int16_t) ( ( st->total_brate / FRAMES_PER_SEC ) - st->next_bit_pos ); - } - start_bit_pos = st->next_bit_pos; - - /* Init LTP data */ - st->hTcxDec->tcx_hm_LtpPitchLag = -1; - st->hTcxLtpDec->tcxltp_gain_float = 0.0f; - - /*--------------------------------------------------------------------------------* - * header - *--------------------------------------------------------------------------------*/ - - /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ - getTCXMode_ivas( st, st, 0 /* <- MCT_flag */ ); - - /* last_core for error concealment */ - if ( !st->use_partial_copy && st->element_mode != IVAS_CPE_MDCT ) - { - st->last_core_from_bs = get_next_indice( st, 1 ); /* Store decoder memory of last_core */ - if ( st->last_core == ACELP_CORE && st->last_core_from_bs != ACELP_CORE ) - { - /* A mismatch between the memory and the last_core - from the bitstream indicates a frame was lost. If prev_bfi is - not set the frame loss occured during CNG and the prev_bfi needs to be set. */ - st->prev_bfi = 1; - } - - /* possible need for reconfiguration can only be decided correctly once last_core_from_bs has been decoded */ - if ( ( st->last_core != st->last_core_from_bs ) && ( st->last_core_from_bs != TCX_20_CORE && st->last_core_from_bs != TCX_10_CORE && !( st->prev_bfi == 1 && st->last_core_from_bs == ACELP_CORE && st->last_con_tcx == 1 ) ) ) - { - stereo_tcx_dec_mode_switch_reconf( st, 0, last_element_mode ); - } - - st->last_core = st->last_core_from_bs; - - /*for TCX 10 force last_core to be TCX since ACELP as previous core is forbidden*/ - if ( st->core == TCX_10_CORE ) - { - st->last_core = TCX_20_CORE; - } - } - - if ( !st->use_partial_copy ) - { - if ( st->element_mode != IVAS_CPE_MDCT ) - { - getTCXWindowing_ivas( st->core, st->last_core, st->element_mode, st->hTcxCfg, st ); - } - st->flagGuidedAcelp = 0; - - if ( st->dec_glr ) - { - st->dec_glr_idx = -1; - } - } - - - /*--------------------------------------------------------------------------------* - * LPC parameters - *--------------------------------------------------------------------------------*/ - - getLPCparam_ivas( st, param_lpc, st, -1, 0 ); - - bits_common = st->next_bit_pos - start_bit_pos; - - - /*--------------------------------------------------------------------------------* - * TCX20/10 parameters - *--------------------------------------------------------------------------------*/ - - if ( st->use_partial_copy == 0 ) - { - getTCXparam_ivas( st, st, hm_cfg, param, bits_common, start_bit_pos, NULL, NULL, NULL, -1 ); - } - - if ( !st->use_partial_copy ) - { - if ( *total_nbbits - bitsRead[0] < ( st->next_bit_pos - start_bit_pos ) ) - { - st->BER_detect = 1; - st->next_bit_pos = start_bit_pos + *total_nbbits - bitsRead[0]; - } - - bitsRead[0] = st->next_bit_pos - start_bit_pos; - } - - return; -} -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Function stereo_tcx_dec_mode_switch_reconf() - * - * Reconfigure stereo TCX parameters - *-----------------------------------------------------------------*/ - -static void stereo_tcx_dec_mode_switch_reconf( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0)*/ - const int16_t last_element_mode /* i : element mode of previous frame */ -) -{ - int16_t frame_size_index; - - st->rate_switching_init = 1; - /* Identify frame type - TCX Reconfiguration */ - for ( frame_size_index = 0; frame_size_index < FRAME_SIZE_NB; frame_size_index++ ) - { - if ( frame_size_index < FRAME_SIZE_NB - 1 ) - { - if ( ( FrameSizeConfig[frame_size_index].frame_bits <= st->bits_frame_nominal ) && ( FrameSizeConfig[frame_size_index + 1].frame_bits > st->bits_frame_nominal ) ) - { - break; - } - } - else - { - if ( FrameSizeConfig[frame_size_index].frame_bits <= st->bits_frame_nominal ) - { - break; - } - } - } - - /* Reconfigure Core */ - mode_switch_decoder_LPD( st, st->bwidth, st->bits_frame_nominal * FRAMES_PER_SEC, st->last_bits_frame_nominal * FRAMES_PER_SEC, frame_size_index, MCT_flag, last_element_mode ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_tcx_dec_mode_switch_reconf_ivas_fx( Decoder_State *st, /* i/o: decoder state structure */ const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) Q0*/ @@ -1962,4 +1118,3 @@ static void dec_prm_tcx_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/ivas_td_low_rate_dec.c b/lib_dec/ivas_td_low_rate_dec.c index bdba96252..7df267b1d 100644 --- a/lib_dec/ivas_td_low_rate_dec.c +++ b/lib_dec/ivas_td_low_rate_dec.c @@ -42,183 +42,6 @@ #include "ivas_prot.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tdm_low_rate_dec() - * - * Decode secondary channel of TD Stereo with a low-bitrate decoder - *-------------------------------------------------------------------*/ - -void tdm_low_rate_dec( - Decoder_State *st, /* i/o: decoder static memory */ - float dct_epit[], /* o : GSC excitation in DCT domain */ - float *tmp_noise, /* o : long term temporary noise energy */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const float *lsf_new /* i : ISFs at the end of the frame */ -) -{ -#ifndef IVAS_FLOAT_FIXED - int16_t tmp_nb_bits_tot, pit_band_idx; - GSC_DEC_HANDLE hGSCDec; - int16_t Diff_len, nb_subfr; - int16_t attack_flag; - int16_t last_bin; - float exc_wo_nf[L_FRAME]; - - hGSCDec = st->hGSCDec; - - /*---------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - nb_subfr = 2; - - st->GSC_IVAS_mode = 0; - st->GSC_noisy_speech = 1; - hGSCDec->noise_lev = 14; - - pit_band_idx = 10 + BAND1k2; - hGSCDec->Last_GSC_pit_band_idx = pit_band_idx; - - st->tilt_code = 0.0f; - set_f( exc, 0, L_FRAME ); - set_f( dct_epit, 0, L_FRAME ); - set_f( pitch_buf, L_SUBFR, NB_SUBFR ); - st->bpf_off = 1; - - st->bfi_pitch = (int16_t) ( mean( pitch_buf, 4 ) + 0.5f ); - st->bfi_pitch_frame = L_FRAME; - Diff_len = L_FRAME / 2; - st->bpf_off = 0; - attack_flag = 0; - - /*--------------------------------------------------------------------------------------* - * GSC decoder - *--------------------------------------------------------------------------------------*/ - - /* find the current total number of bits used */ - tmp_nb_bits_tot = st->next_bit_pos; - - if ( st->element_mode == IVAS_CPE_TD ) - { - tmp_nb_bits_tot += TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; - } - - if ( st->tdm_LRTD_flag == 1 ) - { - tmp_nb_bits_tot -= STEREO_BITS_TCA; - } - - if ( st->extl_brate_orig > 0 ) - { - /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ - tmp_nb_bits_tot--; - } - - gsc_dec( st, dct_epit, pit_band_idx, Diff_len, tmp_nb_bits_tot, nb_subfr, st->coder_type, &last_bin, lsf_new, exc_wo_nf, tmp_noise ); - - /*--------------------------------------------------------------------------------------* - * iDCT transform - *--------------------------------------------------------------------------------------*/ - - edct( dct_epit, exc, L_FRAME, IVAS_CPE_TD ); - - edct( exc_wo_nf, exc_wo_nf, L_FRAME, IVAS_CPE_TD ); - - /*----------------------------------------------------------------------* - * Remove potential pre-echo in case an onset has been detected - *----------------------------------------------------------------------*/ - - pre_echo_att( &hGSCDec->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); - - - /*--------------------------------------------------------------------------------------* - * Update BWE excitation - *--------------------------------------------------------------------------------------*/ - - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - - if ( st->hBWE_TD != NULL ) - { - if ( st->tdm_LRTD_flag ) - { - interp_code_5over2( exc, bwe_exc, L_FRAME ); - } - else - { - set_f( bwe_exc, 0, L_FRAME32k ); - } - } - - /*--------------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------------*/ - - mvr2r( exc, exc2, L_FRAME ); - mvr2r( exc_wo_nf, exc, L_FRAME ); - - /*--------------------------------------------------------------------------------------* - * Channel aware mode parameters - *--------------------------------------------------------------------------------------*/ - - set_f( st->tilt_code_dec, 0, NB_SUBFR16k ); - - return; -#else - st->Q_exc = 0; - - /*hGSCDec float2fix*/ - st->GSC_noisy_speech = st->GSC_noisy_speech; - // st->lp_gainc_fx = float_to_fix16(st->lp_gainc, Q3); - st->last_good = st->last_good; - st->Last_GSC_noisy_speech_flag = st->Last_GSC_noisy_speech_flag; - st->last_coder_type = st->last_coder_type; - /*hGSCDec end*/ - - Word16 dct_epit_fx[L_FRAME]; - // Word16 tmp_noise_fx; - Word16 pitch_buf_fx[NB_SUBFR16k]; - Word16 voice_factors_fx[5]; - Word16 exc_fx[L_FRAME]; - Word16 exc2_fx[L_FRAME]; - Word16 bwe_exc_fx[L_FRAME32k]; - Word16 lsf_new_fx[M]; - // floatToFixed_arr(exc, exc_fx, 0, L_FRAME); - // floatToFixed_arr(exc2, exc2_fx, 0, L_FRAME); - set_s( dct_epit_fx, 0, L_FRAME ); - set_s( exc_fx, 0, L_FRAME ); - set_s( exc2_fx, 0, L_FRAME ); - set_s( bwe_exc_fx, 0, L_FRAME32k ); - for ( int i = 0; i < M; i++ ) - { - lsf_new_fx[i] = (Word16) ( lsf_new[i] * 2.56f ); - } - tdm_low_rate_dec_fx( st, dct_epit_fx, pitch_buf_fx, voice_factors_fx, exc_fx, exc2_fx, bwe_exc_fx, lsf_new_fx ); - fixedToFloat_arr( dct_epit_fx, dct_epit, st->Q_exc, L_FRAME ); - //*tmp_noise = fixedToFloat(tmp_noise_fx, Q3); - fixedToFloat_arr( pitch_buf_fx, pitch_buf, Q6, NB_SUBFR16k ); - fixedToFloat_arr( voice_factors_fx, voice_factors, Q15, 5 ); - fixedToFloat_arr( exc_fx, exc, st->Q_exc, L_FRAME ); - fixedToFloat_arr( exc2_fx, exc2, st->Q_exc, L_FRAME ); - if ( bwe_exc ) - { - fixedToFloat_arr( bwe_exc_fx, bwe_exc, st->Q_exc, L_FRAME32k ); - } - - /*hGSCDec fix2float*/ - st->GSC_noisy_speech = st->GSC_noisy_speech; - // st->lp_gainc = fixedToFloat(st->lp_gainc_fx, Q3); - /*hGSCDec end*/ - - *tmp_noise = st->lp_gainc; -#endif -} -#endif -#ifdef IVAS_FLOAT_FIXED void tdm_low_rate_dec_fx( Decoder_State *st, /* i/o: decoder static memory */ Word16 dct_epit[], /* o : GSC excitation in DCT domain Q_exc*/ @@ -358,146 +181,12 @@ void tdm_low_rate_dec_fx( return; } -#endif /*---------------------------------------------------------------------* * decod_gen_2sbfr() * * Decode generic (GC), 2 subframes mode *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void decod_gen_2sbfr( - Decoder_State *st, /* i/o: decoder static memory */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - const float *Aq, /* i : LP filter coefficient */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *exc, /* i/o: adapt. excitation exc */ - float *exc2, /* i/o: adapt. excitation/total exc */ - float *bwe_exc, /* o : excitation for SWB TBE */ - float *gain_buf, /* o : floating pitch gain for each subframe */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ -) -{ - int16_t T0, T0_frac, T0_min, T0_max; /* integer pitch variables */ - float gain_pit = 0.0f; /* pitch gain */ - float gain_code = 0.0f; /* gain/normalized gain of the algebraic excitation */ - float norm_gain_code = 0.0f; /* normalized gain of the algebraic excitation */ - float gain_inov = 0; /* Innovation gain */ - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - float voice_fac; /* voicing factor */ - float code[2 * L_SUBFR]; /* algebraic codevector */ - const float *p_Aq; /* Pointer to frame LP coefficient */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t i_subfr, i; /* tmp variables */ - int16_t L_frame; - int16_t pitch_limit_flag; - float error; - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - L_frame = L_FRAME; - - T0 = PIT_MIN; - T0_frac = 0; - error = 0.0f; - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_Aq = Aq; /* pointer to interpolated LPC parameters */ - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += 2 * L_SUBFR ) - { - /*----------------------------------------------------------------------* - * Decode pitch lag - *----------------------------------------------------------------------*/ - - *pt_pitch = pit_decode_flt( st, st->core_brate, 0, L_frame, i_subfr, GENERIC, &pitch_limit_flag, &T0, &T0_frac, &T0_min, &T0_max, 2 * L_SUBFR, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, L_frame, 2 * L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); - - /*--------------------------------------------------------------* - * Find the adaptive codebook vector - *--------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, 2 * L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*--------------------------------------------------------------* - * LP filtering of the adaptive excitation - *--------------------------------------------------------------*/ - - lp_filt_exc_dec( st, MODE1, i_subfr, 2 * L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); - - /*--------------------------------------------------------------* - * Innovation decoding - *--------------------------------------------------------------*/ - - inov_decode( st, st->core_brate, 0, L_frame, sharpFlag, i_subfr, p_Aq, st->tilt_code, *pt_pitch, code, 2 * L_SUBFR ); - - /*--------------------------------------------------------------* - * Gain decoding - * Estimate spectrum tilt and voicing - *--------------------------------------------------------------*/ - - gain_dec_lbr( st, GENERIC, i_subfr, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, gains_mem, 2 * L_SUBFR ); - st->tilt_code = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); - - /* update LP filtered gains for the case of frame erasures */ - lp_gain_updt( i_subfr, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_frame ); - lp_gain_updt( i_subfr + L_SUBFR, gain_pit, norm_gain_code, &st->lp_gainp, &st->lp_gainc, L_frame ); - - /*----------------------------------------------------------------------* - * Find the total excitation - *----------------------------------------------------------------------*/ - - for ( i = 0; i < 2 * L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, 0, NULL, T0, GENERIC, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - voice_factors[i_subfr / L_SUBFR + 1] = voice_factors[i_subfr / L_SUBFR]; - - /*----------------------------------------------------------------* - * Excitation enhancements (update of total excitation signal) - * called twice because adapting it to double the subfr length would need lot of modifications - *----------------------------------------------------------------*/ - - enhancer( MODE1, st->core_brate, -1, 0, GENERIC, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code, exc2 + i_subfr, gain_pit, st->dispMem ); - - enhancer( MODE1, st->core_brate, -1, 0, GENERIC, L_frame, voice_fac, st->stab_fac, norm_gain_code, gain_inov, &st->gc_threshold, code + L_SUBFR, exc2 + i_subfr + L_SUBFR, gain_pit, st->dispMem ); - - p_Aq += 2 * ( M + 1 ); - - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - - gain_buf[i_subfr / L_SUBFR] = gain_pit; - gain_buf[( i_subfr + L_SUBFR ) / L_SUBFR] = gain_pit; - st->tilt_code_dec[i_subfr / L_SUBFR] = st->tilt_code; - st->tilt_code_dec[( i_subfr + L_SUBFR ) / L_SUBFR] = st->tilt_code; - } - - /* SC-VBR */ - st->prev_gain_pit_dec = gain_pit; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * decod_gen_2sbfr_ivas_fx() * @@ -655,4 +344,3 @@ void decod_gen_2sbfr_ivas_fx( return; } -#endif diff --git a/lib_dec/jbm_jb4_circularbuffer.c b/lib_dec/jbm_jb4_circularbuffer.c index 6bff530be..bc12026c9 100644 --- a/lib_dec/jbm_jb4_circularbuffer.c +++ b/lib_dec/jbm_jb4_circularbuffer.c @@ -44,7 +44,6 @@ #include "jbm_jb4_circularbuffer.h" -#ifdef IVAS_FLOAT_FIXED /** Calculates percentile by selecting greatest elements. * This function partial sorts all given elements in the given buffer. * @param[in,out] elements ascending sorted buffer of selected greatest elements @@ -531,445 +530,3 @@ static void JB4_CIRCULARBUFFER_calcPercentile( return; } -#else -/** Calculates percentile by selecting greatest elements. - * This function partial sorts all given elements in the given buffer. - * @param[in,out] elements ascending sorted buffer of selected greatest elements - * @param[in,out] size size of elements buffer - * @param[in] capacity maximum number of elements to buffer - * @param[in] newElement element to insert in buffer if great enough */ -static void JB4_CIRCULARBUFFER_calcPercentile( JB4_CIRCULARBUFFER_ELEMENT *elements, uint16_t *size, const uint16_t capacity, JB4_CIRCULARBUFFER_ELEMENT newElement ); - -/** circular buffer (FIFO) with fixed capacity */ -struct JB4_CIRCULARBUFFER -{ - /** elements of circular buffer */ - JB4_CIRCULARBUFFER_ELEMENT *data; - /** maximum allowed number of elements plus one free element (to decide between full/empty buffer) */ - uint16_t capacity; - /** position of next enque operation */ - uint16_t writePos; - /** position of next deque operation */ - uint16_t readPos; -}; - - -/* Creates a circular buffer (FIFO) */ -ivas_error JB4_CIRCULARBUFFER_Create( - JB4_CIRCULARBUFFER_HANDLE *ph ) -{ - JB4_CIRCULARBUFFER_HANDLE h; - - if ( ( h = malloc( sizeof( struct JB4_CIRCULARBUFFER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM\n" ) ); - } - - h->data = NULL; - h->capacity = 0; - h->writePos = 0; - h->readPos = 0; - - *ph = h; - - return IVAS_ERR_OK; -} - - -/* Destroys the circular buffer (FIFO) */ -void JB4_CIRCULARBUFFER_Destroy( - JB4_CIRCULARBUFFER_HANDLE *ph ) -{ - JB4_CIRCULARBUFFER_HANDLE h; - - if ( !ph ) - { - return; - } - h = *ph; - if ( !h ) - { - return; - } - - if ( h->data ) - { - free( h->data ); - } - free( h ); - *ph = NULL; - - return; -} - - -/* Initializes a circular buffer (FIFO) with a fixed maximum allowed number of elements */ -int16_t JB4_CIRCULARBUFFER_Init( - JB4_CIRCULARBUFFER_HANDLE h, - uint16_t capacity ) -{ - /* keep one element free to be able to decide between full/empty buffer */ - ++capacity; - - if ( ( h->data = malloc( capacity * sizeof( JB4_CIRCULARBUFFER_ELEMENT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM\n" ) ); - } - - h->capacity = capacity; - h->writePos = 0; - h->readPos = 0; - - return IVAS_ERR_OK; -} - - -int16_t JB4_CIRCULARBUFFER_Enque( - JB4_CIRCULARBUFFER_HANDLE h, - JB4_CIRCULARBUFFER_ELEMENT element ) -{ - if ( JB4_CIRCULARBUFFER_IsFull( h ) ) - { - return -1; - } - - h->data[h->writePos] = element; - ++h->writePos; - if ( h->writePos == h->capacity ) - { - h->writePos = 0; - } - - return 0; -} - - -int16_t JB4_CIRCULARBUFFER_Deque( - JB4_CIRCULARBUFFER_HANDLE h, - JB4_CIRCULARBUFFER_ELEMENT *pElement ) -{ - if ( JB4_CIRCULARBUFFER_IsEmpty( h ) ) - { - return -1; - } - - *pElement = h->data[h->readPos]; - ++h->readPos; - if ( h->readPos == h->capacity ) - { - h->readPos = 0; - } - - return 0; -} - - -/* Returns the first element. */ -JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Front( - const JB4_CIRCULARBUFFER_HANDLE h ) -{ - JB4_CIRCULARBUFFER_ELEMENT ret; - - ret = h->data[h->readPos]; - - return ret; -} - -/* Returns the last element. */ -JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Back( - const JB4_CIRCULARBUFFER_HANDLE h ) -{ - JB4_CIRCULARBUFFER_ELEMENT ret; - - if ( h->writePos != 0U ) - { - ret = h->data[h->writePos - 1]; - } - else - { - ret = h->data[h->capacity - 1]; - } - - - return ret; -} - - -int16_t JB4_CIRCULARBUFFER_IsEmpty( - const JB4_CIRCULARBUFFER_HANDLE h ) -{ - int16_t ret; - - if ( h->readPos == h->writePos ) - { - ret = 1; - } - else - { - ret = 0; - } - - return ret; -} - - -int16_t JB4_CIRCULARBUFFER_IsFull( - const JB4_CIRCULARBUFFER_HANDLE h ) -{ - int16_t ret; - - if ( ( ( h->writePos + 1 ) % h->capacity ) == h->readPos ) - { - ret = 1; - } - else - { - ret = 0; - } - - return ret; -} - - -uint16_t JB4_CIRCULARBUFFER_Size( - const JB4_CIRCULARBUFFER_HANDLE h ) -{ - uint16_t ret; - - if ( h->readPos <= h->writePos ) - { - ret = h->writePos - h->readPos; - } - else - { - /* wrap around */ - ret = h->writePos + h->capacity - h->readPos; - } - - - return ret; -} - - -/* Calculates statistics over all elements: min element */ -void JB4_CIRCULARBUFFER_Min( - const JB4_CIRCULARBUFFER_HANDLE h, - JB4_CIRCULARBUFFER_ELEMENT *pMin ) -{ - uint16_t i; - JB4_CIRCULARBUFFER_ELEMENT minEle; - - /* init output variable */ - minEle = h->data[h->readPos]; - - if ( h->readPos <= h->writePos ) - { - /* no wrap around */ - /* calc statistics for [readPos;writePos[ */ - for ( i = h->readPos; i != h->writePos; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - } - } - else - { - /* wrap around */ - /* calc statistics for [readPos;capacity[ */ - for ( i = h->readPos; i != h->capacity; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - } - /* calc statistics for [0;writePos[ */ - for ( i = 0; i != h->writePos; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - } - } - - *pMin = minEle; -} - - -/* Calculates statistics over all elements: max element */ -void JB4_CIRCULARBUFFER_Max( - const JB4_CIRCULARBUFFER_HANDLE h, - JB4_CIRCULARBUFFER_ELEMENT *pMax ) -{ - uint16_t i; - JB4_CIRCULARBUFFER_ELEMENT maxEle; - - /* init output variable */ - maxEle = h->data[h->readPos]; - if ( h->readPos <= h->writePos ) - { - /* no wrap around */ - /* calc statistics for [readPos;writePos[ */ - for ( i = h->readPos; i != h->writePos; ++i ) - { - if ( h->data[i] > maxEle ) - { - maxEle = h->data[i]; - } - } - } - else - { - /* wrap around */ - /* calc statistics for [readPos;capacity[ */ - for ( i = h->readPos; i != h->capacity; ++i ) - { - if ( h->data[i] > maxEle ) - { - maxEle = h->data[i]; - } - } - /* calc statistics for [0;writePos[ */ - for ( i = 0; i != h->writePos; ++i ) - { - if ( h->data[i] > maxEle ) - { - maxEle = h->data[i]; - } - } - } - - *pMax = maxEle; - - return; -} - -#define JBM_MAX_CIRCULAR_ELEMENTS 100 - -/* Calculates statistics over a considered fraction of all elements: min element and percentile */ -void JB4_CIRCULARBUFFER_MinAndPercentile( - const JB4_CIRCULARBUFFER_HANDLE h, - uint16_t nElementsToIgnore, - JB4_CIRCULARBUFFER_ELEMENT *pMin, - JB4_CIRCULARBUFFER_ELEMENT *pPercentile ) -{ - uint16_t i; - JB4_CIRCULARBUFFER_ELEMENT maxElements[JBM_MAX_CIRCULAR_ELEMENTS]; - uint16_t maxElementsSize; - uint16_t maxElementsCapacity; - JB4_CIRCULARBUFFER_ELEMENT minEle; - - /* init output variables */ - minEle = h->data[h->readPos]; - - /* To calculate the percentile, a number of elements with the highest values are collected in maxElements in - * ascending sorted order. This array has a size of nElementsToIgnore plus one. This additional element is the - * lowest of all maxElements, and is called the percentile of all elements. */ - - maxElementsSize = 0; - maxElementsCapacity = nElementsToIgnore + 1; - assert( maxElementsCapacity <= JBM_MAX_CIRCULAR_ELEMENTS ); - if ( h->readPos <= h->writePos ) - { - /* no wrap around */ - /* calc statistics for [readPos;writePos[ */ - for ( i = h->readPos; i != h->writePos; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); - } - } - else - { - /* wrap around */ - /* calc statistics for [readPos;capacity[ */ - for ( i = h->readPos; i != h->capacity; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); - } - /* calc statistics for [0;writePos[ */ - for ( i = 0; i != h->writePos; ++i ) - { - if ( h->data[i] < minEle ) - { - minEle = h->data[i]; - } - JB4_CIRCULARBUFFER_calcPercentile( maxElements, &maxElementsSize, maxElementsCapacity, h->data[i] ); - } - } - - *pPercentile = maxElements[0]; - *pMin = minEle; - - return; -} - - -/* Calculates percentile by selecting greatest elements. */ -static void JB4_CIRCULARBUFFER_calcPercentile( - JB4_CIRCULARBUFFER_ELEMENT *elements, - uint16_t *size, - const uint16_t capacity, - JB4_CIRCULARBUFFER_ELEMENT newElement ) -{ - uint16_t i, j; - - /* insert newElement if elements buffer is not yet full */ - if ( *size < capacity ) - { - for ( i = 0; i != *size; ++i ) - { - if ( newElement <= elements[i] ) - { - /* insert newElement at index i */ - for ( j = *size; j > i; --j ) - { - elements[j] = elements[j - 1]; - } - elements[i] = newElement; - ++*size; - return; - } - } - /* newElement is maximum, just append it */ - elements[*size] = newElement; - ++*size; - return; - } - - /* check if newElement is too small to be inserted in elements buffer */ - if ( newElement <= elements[0] ) - { - return; - } - - /* select position to insert newElement to elements */ - for ( i = *size - 1; i != 0; --i ) - { - if ( newElement >= elements[i] ) - { - /* insert newElement at index i */ - for ( j = 0; j < i; j++ ) - { - elements[j] = elements[1 + j]; - } - elements[i] = newElement; - return; - } - } - /* newElement is just greater than first on in elements buffer */ - elements[0] = newElement; - - return; -} -#endif /* IVAS_FLOAT_FIXED */ diff --git a/lib_dec/jbm_jb4_circularbuffer.h b/lib_dec/jbm_jb4_circularbuffer.h index f39bfa2ab..ec6a5c7be 100644 --- a/lib_dec/jbm_jb4_circularbuffer.h +++ b/lib_dec/jbm_jb4_circularbuffer.h @@ -40,7 +40,6 @@ #include "prot.h" #include "cnst.h" -#ifdef IVAS_FLOAT_FIXED /** handle for circular buffer (FIFO) with fixed capacity */ typedef struct JB4_CIRCULARBUFFER *JB4_CIRCULARBUFFER_HANDLE; @@ -74,39 +73,4 @@ void JB4_CIRCULARBUFFER_Max( const JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFF void JB4_CIRCULARBUFFER_MinAndPercentile( const JB4_CIRCULARBUFFER_HANDLE h, UWord16 nElementsToIgnore, JB4_CIRCULARBUFFER_ELEMENT *pMin, JB4_CIRCULARBUFFER_ELEMENT *pPercentile ); -#else -/** handle for circular buffer (FIFO) with fixed capacity */ -typedef struct JB4_CIRCULARBUFFER *JB4_CIRCULARBUFFER_HANDLE; - -/** type of circular buffer elements */ -typedef int32_t JB4_CIRCULARBUFFER_ELEMENT; - - -ivas_error JB4_CIRCULARBUFFER_Create( JB4_CIRCULARBUFFER_HANDLE *ph ); - -void JB4_CIRCULARBUFFER_Destroy( JB4_CIRCULARBUFFER_HANDLE *ph ); - -int16_t JB4_CIRCULARBUFFER_Init( JB4_CIRCULARBUFFER_HANDLE h, uint16_t capacity ); - -int16_t JB4_CIRCULARBUFFER_Enque( JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT element ); - -int16_t JB4_CIRCULARBUFFER_Deque( JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pElement ); - -JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Front( const JB4_CIRCULARBUFFER_HANDLE h ); - -JB4_CIRCULARBUFFER_ELEMENT JB4_CIRCULARBUFFER_Back( const JB4_CIRCULARBUFFER_HANDLE h ); - -int16_t JB4_CIRCULARBUFFER_IsEmpty( const JB4_CIRCULARBUFFER_HANDLE h ); - -int16_t JB4_CIRCULARBUFFER_IsFull( const JB4_CIRCULARBUFFER_HANDLE h ); - -uint16_t JB4_CIRCULARBUFFER_Size( const JB4_CIRCULARBUFFER_HANDLE h ); - -void JB4_CIRCULARBUFFER_Min( const JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pMin ); - -void JB4_CIRCULARBUFFER_Max( const JB4_CIRCULARBUFFER_HANDLE h, JB4_CIRCULARBUFFER_ELEMENT *pMax ); - -void JB4_CIRCULARBUFFER_MinAndPercentile( const JB4_CIRCULARBUFFER_HANDLE h, uint16_t nElementsToIgnore, JB4_CIRCULARBUFFER_ELEMENT *pMin, JB4_CIRCULARBUFFER_ELEMENT *pPercentile ); - -#endif /* IVAS_FLOAT_FIXED*/ #endif /* JBM_JB4_CIRCULARBUFFER_H */ diff --git a/lib_dec/jbm_jb4_inputbuffer.c b/lib_dec/jbm_jb4_inputbuffer.c index f876c11c0..27a1d6ff1 100644 --- a/lib_dec/jbm_jb4_inputbuffer.c +++ b/lib_dec/jbm_jb4_inputbuffer.c @@ -47,7 +47,6 @@ #define WMC_TOOL_SKIP -#ifdef IVAS_FLOAT_FIXED /** input buffer with fixed capacity */ struct JB4_INPUTBUFFER { @@ -393,332 +392,5 @@ UWord16 JB4_INPUTBUFFER_Size( return ret; } -#else -/** input buffer with fixed capacity */ -struct JB4_INPUTBUFFER -{ - /** elements of input buffer */ - JB4_INPUTBUFFER_ELEMENT *data; - /** maximum allowed number of elements plus one free element (to decide between full/empty buffer) */ - uint16_t capacity; - /** position of next enque operation */ - uint16_t writePos; - /** position of next deque operation */ - uint16_t readPos; - /** function to compare two elements */ - int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT first, const JB4_INPUTBUFFER_ELEMENT second, bool *replaceWithNewElementIfEqual ); -}; - - -/* Creates a input buffer */ -ivas_error JB4_INPUTBUFFER_Create( - JB4_INPUTBUFFER_HANDLE *ph ) -{ - JB4_INPUTBUFFER_HANDLE h; - - if ( ( h = malloc( sizeof( struct JB4_INPUTBUFFER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM\n" ) ); - } - - h->data = NULL; - h->capacity = 0; - h->writePos = 0; - h->readPos = 0; - h->compareFunction = NULL; - - *ph = h; - - return IVAS_ERR_OK; -} - - -/* Destroys the input buffer */ -void JB4_INPUTBUFFER_Destroy( - JB4_INPUTBUFFER_HANDLE *ph ) -{ - JB4_INPUTBUFFER_HANDLE h; - - if ( !ph ) - { - return; - } - h = *ph; - if ( !h ) - { - return; - } - - if ( h->data ) - { - free( h->data ); - } - - free( h ); - *ph = NULL; - - return; -} - - -/* Initializes a input buffer with a fixed maximum allowed number of elements */ -ivas_error JB4_INPUTBUFFER_Init( - JB4_INPUTBUFFER_HANDLE h, - uint16_t capacity, - int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT first, const JB4_INPUTBUFFER_ELEMENT second, bool *replaceWithNewElementIfEqual ) ) -{ - - /* keep one element free to be able to decide between full/empty buffer */ - ++capacity; - if ( ( h->data = malloc( capacity * sizeof( JB4_INPUTBUFFER_ELEMENT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM\n" ) ); - } - - h->capacity = capacity; - h->writePos = 0; - h->readPos = 0; - h->compareFunction = compareFunction; - - return IVAS_ERR_OK; -} - - -int16_t JB4_INPUTBUFFER_Enque( - JB4_INPUTBUFFER_HANDLE h, - JB4_INPUTBUFFER_ELEMENT element, - JB4_INPUTBUFFER_ELEMENT *replacedElement ) -{ - uint16_t j, size; - int16_t low, high, middle, diff; - uint16_t insertPos; - uint16_t canMoveRight; - uint16_t canMoveLeft; - bool replace; - - *replacedElement = NULL; - - size = JB4_INPUTBUFFER_Size( h ); - if ( size >= h->capacity - 1 ) - { - return -1; - } - - /* appending the first element is straight forward */ - if ( size == 0U ) - { - h->data[h->writePos] = element; - ++h->writePos; - if ( h->writePos == h->capacity ) - { - h->writePos = 0; - } - return 0; - } - - /* there's a high probability that the new element can be appended at the back */ - if ( h->compareFunction( element, JB4_INPUTBUFFER_Back( h ), &replace ) > 0 ) - { - h->data[h->writePos] = element; - ++h->writePos; - if ( h->writePos == h->capacity ) - { - h->writePos = 0; - } - return 0; - } - - /* out of order: use binary search to get the position to insert */ - low = 0; - high = size - 1; - while ( low <= high ) - { - middle = low + ( high - low ) / 2; - diff = h->compareFunction( element, JB4_INPUTBUFFER_Element( h, middle ), &replace ); - if ( diff < 0 ) - { - high = middle - 1; - } - else if ( diff > 0 ) - { - low = middle + 1; - } - else /* an element with same index is already stored */ - { - if ( replace != 0 ) - { - *replacedElement = h->data[( h->readPos + middle ) % h->capacity]; - h->data[( h->readPos + middle ) % h->capacity] = element; - return 0; - } - return 1; - } - } - - - insertPos = ( h->readPos + low ) % h->capacity; - if ( h->readPos < h->writePos ) - { - canMoveRight = 1; - canMoveLeft = h->readPos > 0; - } - else - { - canMoveRight = insertPos < h->writePos; - canMoveLeft = insertPos > h->writePos; - } - - assert( canMoveRight != 0 || canMoveLeft != 0 ); - - if ( canMoveRight ) - { - /* move higher elements to the right and insert at insertPos */ - for ( j = h->writePos; j > insertPos; --j ) - { - h->data[j] = h->data[j - 1]; - } - - h->data[insertPos] = element; - ++h->writePos; - if ( h->writePos == h->capacity ) - { - h->writePos = 0; - } - } - else - { - /* move lower elements to the left and insert before insertPos */ - for ( j = 0; j < low; j++ ) - { - h->data[h->readPos - 1 + j] = h->data[h->readPos + j]; - } - - h->data[insertPos - 1] = element; - --h->readPos; - assert( (int16_t) h->readPos >= 0 ); - } - - return 0; -} - - -int16_t JB4_INPUTBUFFER_Deque( - JB4_INPUTBUFFER_HANDLE h, - JB4_INPUTBUFFER_ELEMENT *pElement ) -{ - if ( JB4_INPUTBUFFER_IsEmpty( h ) ) - { - return -1; - } - - *pElement = h->data[h->readPos]; - ++h->readPos; - if ( h->readPos == h->capacity ) - { - h->readPos = 0; - } - - return 0; -} - - -/* Returns the first element. */ -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Front( - const JB4_INPUTBUFFER_HANDLE h ) -{ - JB4_INPUTBUFFER_ELEMENT ret; - - - ret = h->data[h->readPos]; - - return ret; -} - - -/* Returns the last element. */ -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Back( - const JB4_INPUTBUFFER_HANDLE h ) -{ - JB4_INPUTBUFFER_ELEMENT ret; - - if ( h->writePos != 0U ) - { - ret = h->data[h->writePos - 1]; - } - else - { - ret = h->data[h->capacity - 1]; - } - - return ret; -} - - -/* Returns the element with the given index (0 means front element). */ -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Element( - const JB4_INPUTBUFFER_HANDLE h, - uint16_t index ) -{ - JB4_INPUTBUFFER_ELEMENT ret; - - /* return h->data[(h->readPos + index) % h->capacity] without error handling */ - if ( h->readPos + index < h->capacity ) - { - ret = h->data[h->readPos + index]; - } - else - { - /* wrap around */ - ret = h->data[h->readPos + index - h->capacity]; - } - - return ret; -} - - -int16_t JB4_INPUTBUFFER_IsEmpty( - const JB4_INPUTBUFFER_HANDLE h ) -{ - int16_t ret; - - ret = h->readPos == h->writePos; - - return ret; -} - - -int16_t JB4_INPUTBUFFER_IsFull( - const JB4_INPUTBUFFER_HANDLE h ) -{ - int16_t ret; - - ret = 0; - if ( JB4_INPUTBUFFER_Size( h ) == h->capacity - 1 ) - { - ret = 1; - } - - return ret; -} - - -uint16_t JB4_INPUTBUFFER_Size( - const JB4_INPUTBUFFER_HANDLE h ) -{ - uint16_t ret; - - if ( h->readPos <= h->writePos ) - { - ret = h->writePos - h->readPos; - } - else - { - /* wrap around */ - ret = h->writePos + h->capacity - h->readPos; - } - - return ret; -} -#endif /* IVAS_FLOAT_FIXED */ #undef WMC_TOOL_SKIP diff --git a/lib_dec/jbm_jb4_inputbuffer.h b/lib_dec/jbm_jb4_inputbuffer.h index b9f491112..b9c9c5ef6 100644 --- a/lib_dec/jbm_jb4_inputbuffer.h +++ b/lib_dec/jbm_jb4_inputbuffer.h @@ -44,7 +44,6 @@ #include "options.h" -#ifdef IVAS_FLOAT_FIXED typedef struct JB4_INPUTBUFFER *JB4_INPUTBUFFER_HANDLE; typedef void *JB4_INPUTBUFFER_ELEMENT; @@ -71,32 +70,4 @@ Word16 JB4_INPUTBUFFER_IsFull( const JB4_INPUTBUFFER_HANDLE h ); UWord16 JB4_INPUTBUFFER_Size( const JB4_INPUTBUFFER_HANDLE h ); -#else -typedef struct JB4_INPUTBUFFER *JB4_INPUTBUFFER_HANDLE; - -typedef void *JB4_INPUTBUFFER_ELEMENT; - -ivas_error JB4_INPUTBUFFER_Create( JB4_INPUTBUFFER_HANDLE *ph ); - -void JB4_INPUTBUFFER_Destroy( JB4_INPUTBUFFER_HANDLE *ph ); - -ivas_error JB4_INPUTBUFFER_Init( JB4_INPUTBUFFER_HANDLE h, uint16_t capacity, int16_t ( *compareFunction )( const JB4_INPUTBUFFER_ELEMENT newElement, const JB4_INPUTBUFFER_ELEMENT arrayElement, bool *replaceWithNewElementIfEqual ) ); - -int16_t JB4_INPUTBUFFER_Enque( JB4_INPUTBUFFER_HANDLE h, JB4_INPUTBUFFER_ELEMENT element, JB4_INPUTBUFFER_ELEMENT *replacedElement ); - -int16_t JB4_INPUTBUFFER_Deque( JB4_INPUTBUFFER_HANDLE h, JB4_INPUTBUFFER_ELEMENT *pElement ); - -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Front( const JB4_INPUTBUFFER_HANDLE h ); - -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Back( const JB4_INPUTBUFFER_HANDLE h ); - -JB4_INPUTBUFFER_ELEMENT JB4_INPUTBUFFER_Element( const JB4_INPUTBUFFER_HANDLE h, uint16_t index ); - -int16_t JB4_INPUTBUFFER_IsEmpty( const JB4_INPUTBUFFER_HANDLE h ); - -int16_t JB4_INPUTBUFFER_IsFull( const JB4_INPUTBUFFER_HANDLE h ); - -uint16_t JB4_INPUTBUFFER_Size( const JB4_INPUTBUFFER_HANDLE h ); - -#endif /* IVAS_FLOAT_FIXED */ #endif /* JBM_JB4_INPUTBUFFER_H */ diff --git a/lib_dec/jbm_jb4_jmf.c b/lib_dec/jbm_jb4_jmf.c index cecd4d2e6..8e5215dae 100644 --- a/lib_dec/jbm_jb4_jmf.c +++ b/lib_dec/jbm_jb4_jmf.c @@ -51,7 +51,6 @@ /* instrumentation */ #define INV_125_Q15 262 /*1/125 IN Q_15*/ -#ifdef IVAS_FLOAT_FIXED /** jitter measure fifo - a fifo used for windowed measure of network status */ struct JB4_JMF @@ -364,292 +363,3 @@ static void JB4_JMF_popFront( return; } -#else -/** jitter measure fifo - a fifo used for windowed measure of network status */ -struct JB4_JMF -{ - /** scale of system time and RTP time stamps */ - int16_t timeScale; - /** the window size of the fifo as time in sysTimeScale */ - uint16_t maxWindowDuration; - /** considered fraction in 1/1000 units, e.g. 900 ignores 10% of the highest samples */ - uint16_t consideredFraction; - - /** fifo containing the delay entries (ordered by receive time) */ - JB4_CIRCULARBUFFER_HANDLE fifo; - /** fifo containing the offset entries (ordered by receive time) */ - JB4_CIRCULARBUFFER_HANDLE offsetFifo; - /** fifo containing the RTP times of the values in offsetFifo (ordered by receive time) */ - JB4_CIRCULARBUFFER_HANDLE timeStampFifo; - /** flag if the first packet was already pushed */ - int16_t firstPacketPushed; - /** last packets system time in microseconds */ - int32_t lastSysTime; - /** RTP time stamp of the last pushed packet */ - int32_t lastRtpTimeStamp; - /** last packets calculated delay value */ - int32_t lastDelay; - /** number of elements to ignore for percentile calculation - value set within init */ - int16_t nElementsToIgnore; -}; - - -/** helper function to add an entry at back of the buffer */ -static void JB4_JMF_pushBack( JB4_JMF_HANDLE h, const int32_t delay, const int32_t offset, const uint32_t time ); - -/** helper function to remove an entry from the front of the buffer */ -static void JB4_JMF_popFront( JB4_JMF_HANDLE h ); - - -ivas_error JB4_JMF_Create( - JB4_JMF_HANDLE *ph ) -{ - JB4_JMF_HANDLE h; - ivas_error error; - - if ( ( h = malloc( sizeof( struct JB4_JMF ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JBM\n" ) ); - } - - if ( ( error = JB4_CIRCULARBUFFER_Create( &h->fifo ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( JB4_CIRCULARBUFFER_Create( &h->offsetFifo ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( JB4_CIRCULARBUFFER_Create( &h->timeStampFifo ) ) != IVAS_ERR_OK ) - { - return error; - } - - h->timeScale = 1000; - h->consideredFraction = 1000; - h->firstPacketPushed = 0; - h->lastSysTime = 0; - h->lastRtpTimeStamp = 0; - h->lastDelay = 0; - h->nElementsToIgnore = 0; - - *ph = h; - - return IVAS_ERR_OK; -} - - -void JB4_JMF_Destroy( - JB4_JMF_HANDLE *ph ) -{ - JB4_JMF_HANDLE h; - - if ( !ph ) - { - return; - } - h = *ph; - if ( !h ) - { - return; - } - - JB4_CIRCULARBUFFER_Destroy( &h->fifo ); - JB4_CIRCULARBUFFER_Destroy( &h->offsetFifo ); - JB4_CIRCULARBUFFER_Destroy( &h->timeStampFifo ); - - free( h ); - *ph = NULL; - - return; -} - - -/* function to set the window size of the fifo and the fraction which will be considered */ -int16_t JB4_JMF_Init( - JB4_JMF_HANDLE h, - const int16_t timeScale, - const uint16_t windowSize, - const uint16_t windowDuration, - const uint16_t consideredFraction ) -{ - - /* check parameters */ - if ( windowSize != 0U && consideredFraction * windowSize / 1000 < 2 ) - { - return -1; - } - if ( consideredFraction > 1000 ) - { - return -1; - } - - /* store values */ - h->timeScale = timeScale; - h->maxWindowDuration = windowDuration; - h->consideredFraction = consideredFraction; - - JB4_CIRCULARBUFFER_Init( h->fifo, windowSize ); - JB4_CIRCULARBUFFER_Init( h->offsetFifo, windowSize ); - JB4_CIRCULARBUFFER_Init( h->timeStampFifo, windowSize ); - - h->nElementsToIgnore = (uint16_t) ( windowSize * ( 1000 - consideredFraction ) / 1000 ); - - return 0; -} - - -/* function to calculate delay for the current packet */ -int16_t JB4_JMF_PushPacket( - JB4_JMF_HANDLE h, - const uint32_t sysTime, - const uint32_t rtpTimeStamp ) -{ - int32_t rtpTimeDiff, sysTimeDiff; - int32_t offset, delay; - - /* check if this is the first entry */ - if ( h->firstPacketPushed == 0 ) - { - h->firstPacketPushed = 1; - h->lastSysTime = sysTime; - h->lastRtpTimeStamp = rtpTimeStamp; - return 0; - } - - rtpTimeDiff = (int32_t) ( rtpTimeStamp - h->lastRtpTimeStamp ); - sysTimeDiff = sysTime - h->lastSysTime; - offset = sysTime - rtpTimeStamp; - - /* get the delay (yes, signed!!!!) */ - delay = sysTimeDiff - rtpTimeDiff + h->lastDelay; - - /* remember old values */ - h->lastSysTime = sysTime; - h->lastRtpTimeStamp = rtpTimeStamp; - /* reset delay if absolute value is greater than 60s - * to avoid overflow caused by clockdrift */ - if ( delay > 60 * h->timeScale || delay < -60 * h->timeScale ) - { - h->lastDelay = 0; - } - else - { - h->lastDelay = delay; - } - - JB4_JMF_pushBack( h, delay, offset, rtpTimeStamp ); - - return 0; -} - - -/* function to get the current jitter */ -int16_t JB4_JMF_Jitter( - const JB4_JMF_HANDLE h, - uint32_t *jitter ) -{ - JB4_CIRCULARBUFFER_ELEMENT min_ele, percentile; - - /* sanity check (must not be empty) and return invalid result if there is only one entry */ - if ( JB4_CIRCULARBUFFER_Size( h->fifo ) < 2U ) - { - return -1; - } - - JB4_CIRCULARBUFFER_MinAndPercentile( h->fifo, h->nElementsToIgnore, &min_ele, &percentile ); - - /* return the difference between the highest considered and the smallest value */ - *jitter = percentile - min_ele; - assert( percentile >= min_ele ); - - return 0; -} - - -/* function to get the minimum offset between received time and time stamp of all entries in the fifo */ -int16_t JB4_JMF_MinOffset( - const JB4_JMF_HANDLE h, - int32_t *offset ) -{ - JB4_CIRCULARBUFFER_ELEMENT min_ele; - - if ( JB4_CIRCULARBUFFER_IsEmpty( h->offsetFifo ) ) - { - return -1; - } - - JB4_CIRCULARBUFFER_Min( h->offsetFifo, &min_ele ); - - *offset = min_ele; - - return 0; -} - - -/***************************************************************************** - **************************** private functions ****************************** - *****************************************************************************/ - -/* helper function to add entry at back of the buffer */ -static void JB4_JMF_pushBack( - JB4_JMF_HANDLE h, - const int32_t delay, - const int32_t offset, - const uint32_t time ) -{ - int32_t minTime, maxTime; - uint32_t duration; - - /* check for size and discard first entry if too big */ - if ( JB4_CIRCULARBUFFER_IsFull( h->fifo ) ) - { - JB4_JMF_popFront( h ); - } - - /* push back new entry */ - JB4_CIRCULARBUFFER_Enque( h->fifo, delay ); - JB4_CIRCULARBUFFER_Enque( h->offsetFifo, offset ); - JB4_CIRCULARBUFFER_Enque( h->timeStampFifo, time ); - - /* check for duration and discard first entries if too long */ - minTime = JB4_CIRCULARBUFFER_Front( h->timeStampFifo ); - maxTime = JB4_CIRCULARBUFFER_Back( h->timeStampFifo ); - if ( maxTime > minTime ) - { - duration = maxTime - minTime; - while ( duration > h->maxWindowDuration ) - { - JB4_JMF_popFront( h ); - minTime = JB4_CIRCULARBUFFER_Front( h->timeStampFifo ); - if ( maxTime <= minTime ) - { - break; - } - duration = maxTime - minTime; - } - } - - return; -} - - -/* helper function to remove an entry from the front of the buffer */ -static void JB4_JMF_popFront( - JB4_JMF_HANDLE h ) -{ - JB4_CIRCULARBUFFER_ELEMENT tmpElement; - - /* try to remove one element - fails if empty */ - if ( JB4_CIRCULARBUFFER_Deque( h->fifo, &tmpElement ) != 0 ) - { - return; - } - - /* also remove offset entry */ - JB4_CIRCULARBUFFER_Deque( h->offsetFifo, &tmpElement ); - JB4_CIRCULARBUFFER_Deque( h->timeStampFifo, &tmpElement ); - - return; -} -#endif /* IVAS_FLOAT_FIXED */ diff --git a/lib_dec/jbm_jb4_jmf.h b/lib_dec/jbm_jb4_jmf.h index d8a9d17bd..b08f5502c 100644 --- a/lib_dec/jbm_jb4_jmf.h +++ b/lib_dec/jbm_jb4_jmf.h @@ -42,7 +42,6 @@ #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED /** handle for jitter measure fifo - a fifo used for windowed measure of network status */ typedef struct JB4_JMF *JB4_JMF_HANDLE; @@ -58,22 +57,5 @@ Word16 JB4_JMF_Jitter( const JB4_JMF_HANDLE h, UWord32 *jitter ); Word16 JB4_JMF_MinOffset( const JB4_JMF_HANDLE h, Word32 *offset ); -#else -/** handle for jitter measure fifo - a fifo used for windowed measure of network status */ -typedef struct JB4_JMF *JB4_JMF_HANDLE; - -ivas_error JB4_JMF_Create( JB4_JMF_HANDLE *ph ); - -void JB4_JMF_Destroy( JB4_JMF_HANDLE *ph ); - -int16_t JB4_JMF_Init( JB4_JMF_HANDLE h, const int16_t timeScale, const uint16_t windowSize, const uint16_t windowDuration, const uint16_t consideredFraction ); - -int16_t JB4_JMF_PushPacket( JB4_JMF_HANDLE h, const uint32_t sysTime, const uint32_t rtpTimeStamp ); - -int16_t JB4_JMF_Jitter( const JB4_JMF_HANDLE h, uint32_t *jitter ); - -int16_t JB4_JMF_MinOffset( const JB4_JMF_HANDLE h, int32_t *offset ); -#endif /* IVAS_FLOAT_FIXED */ - #endif /* JBM_JB4_JMF_H */ diff --git a/lib_dec/jbm_jb4sb.c b/lib_dec/jbm_jb4sb.c index 36fef8f00..a19f8bfd7 100644 --- a/lib_dec/jbm_jb4sb.c +++ b/lib_dec/jbm_jb4sb.c @@ -60,7 +60,6 @@ #define MAXOFFSET 10 -#ifdef IVAS_FLOAT_FIXED /*! Calculates the difference between two RTP timestamps - the diff is positive, if B 'later', negative otherwise */ static Word32 JB4_rtpTimeStampDiff( const UWord32 tsA, const UWord32 tsB ); /* function to calculate different options for the target playout delay */ @@ -908,12 +907,7 @@ static void JB4_adaptActivePlayout( } ELSE IF( dropEarly ) { -#ifndef IVAS_FLOAT_FIXED JB4_dropFromBuffer( h ); - ++h->nLostOrStretched; -#else - JB4_dropFromBuffer( h ); -#endif } ELSE { @@ -1785,1479 +1779,4 @@ static Word16 JB4_inputBufferCompareFunction( return result; } -#else -/*! Calculates the difference between two RTP timestamps - the diff is positive, if B 'later', negative otherwise */ -static int32_t JB4_rtpTimeStampDiff( const uint32_t tsA, const uint32_t tsB ); -/* function to calculate different options for the target playout delay */ -static void JB4_targetPlayoutDelay( const JB4_HANDLE h, uint32_t *targetMin, uint32_t *targetMax, uint32_t *targetDtx, uint32_t *targetStartUp ); -/*! function to do playout adaptation before playing the next data unit */ -/*! In case of time shrinking, data units will be dropped before the next data unit to play is returned and - * in case of time stretching a empty data unit is returned and the frame should be concealed. - * @param[in] now current system time - * @param[out] dataUnit the next data unit to play - * @param[out] scale the scale in percent used as target for time scaling of the returned data unit - * @param[out] maxScaling the maximum allowed external time scaling */ -static int16_t JB4_adaptPlayout( JB4_HANDLE h, uint32_t sysTime, uint32_t extBufferedTime, JB4_DATAUNIT_HANDLE *pDataUnit, uint32_t *scale, uint32_t *maxScaling ); -/*! function to do playout adaptation before playing the first data unit */ -/*! @param[in] now current system time - * @param[out] prebuffer true, if the data unit should be prebuffered */ -static void JB4_adaptFirstPlayout( JB4_HANDLE h, uint32_t sysTime, bool *prebuffer ); -/*! function for playout adaptation while active (no DTX) */ -static void JB4_adaptActivePlayout( JB4_HANDLE h, uint32_t extBufferedTime, uint32_t *scale, uint32_t *maxScaling ); -/*! function for playout adaptation while DTX */ -static void JB4_adaptDtxPlayout( JB4_HANDLE h, uint32_t sysTime, bool *stretchTime ); -/*! function to look into the buffer and check if it makes sense to drop a data unit */ -/*! @param[out] dropEarly true, if a data unit could be dropped early - * @param[out] buffered the buffered time span in timeScale units - * @return true, if a data unit could be dropped */ -static int16_t JB4_inspectBufferForDropping( const JB4_HANDLE h, bool *dropEarly, uint32_t *buffered ); -/* function to look into the buffer and check if it makes sense to drop a data unit during DTX */ -static int16_t JB4_checkDtxDropping( const JB4_HANDLE h ); -/*! function to estimate the short term jitter */ -static void JB4_estimateShortTermJitter( JB4_HANDLE h, const uint32_t rcvTime, const uint32_t rtpTimeStamp ); -/*! function to pop a data unit from the buffer */ -static void JB4_popFromBuffer( JB4_HANDLE h, const uint32_t sysTime, JB4_DATAUNIT_HANDLE *pDataUnit ); -/*! function to drop a data unit from the buffer - updates nShrinked */ -static void JB4_dropFromBuffer( JB4_HANDLE h ); -/*! function to calculate the playout delay based on the current jitter */ -/*! @param[in] playTime the system time when the data unit will be played - * @param[in] timeStamp the time stamp of the data unit to played - * @param[out] delay the calculated playout delay */ -static int16_t JB4_playoutDelay( const JB4_HANDLE h, const uint32_t playTime, const uint32_t rtpTimeStamp, uint32_t *delay ); -/*! function to update lastPlayoutDelay and lastTargetTime after popFromBuffer() */ -static void JB4_updateLastTimingMembers( JB4_HANDLE h, const uint32_t playTime, const uint32_t rtpTimeStamp ); -/*! function to compare the RTP time stamps of two data units: newElement==arrayElement ? 0 : (newElement>arrayElement ? +1 : -1) */ -static int16_t JB4_inputBufferCompareFunction( const JB4_INPUTBUFFER_ELEMENT newElement, const JB4_INPUTBUFFER_ELEMENT arrayElement, bool *replaceWithNewElementIfEqual ); - - -/*! Jitter Buffer Management Interface */ -struct JB4 -{ - /*! @name statistics for user */ - /*@{ */ - /*! the number of late lost data units */ - uint32_t nLateLost; - /*! the number of data units that were available (not NULL) at playout time */ - uint32_t nAvailablePopped; - /*! the number of data units that were not available (NULL) at playout time */ - uint32_t nUnavailablePopped; - /*! the number of unavailable pops since the last available one - used as temp value for nLost and nStretched */ - uint32_t nLostOrStretched; - /*! the number of data units that were lost at playout time */ - uint32_t nLost; - /*! the number of empty data units inserted for playout adaptation */ - uint32_t nStretched; - /*! the number of data units dropped for playout adaptation */ - /*! This function counts all time shrinking events, no matter if a dropped data unit was actually available. */ - uint32_t nShrinked; - /*! the number of data units that were returned to create comfort noice (including NULL) */ - uint32_t nComfortNoice; - /*! the number of jitter induced concealment operations (as defined in 3GPP TS 26.114) */ - uint32_t jitterInducedConcealments; - /*! the target playout delay of the last returned data unit */ - uint32_t targetPlayoutDelay; - /*! the target playout time of the last returned data unit */ - uint32_t lastTargetTime; - /*@} */ - /*! @name internal configuration values - do not change!!! */ - /*@{ */ - /*! internal time scale for all calculations */ - int16_t timeScale; - /*! internal frame duration in timeScale units */ - uint32_t frameDuration; - /*@} */ - /*! @name jitter buffer configuration values */ - /*@{ */ - /*! the allowed delay reserve in addition to network jitter to reduce late-loss [milliseconds] */ - int16_t safetyMargin; - /*@} */ - /*! @name data for short term jitter estimation */ - /*@{ */ - /*! short term jitter measure FIFO */ - JB4_JMF_HANDLE stJmf; - /*! FIFO of short term jitter values */ - JB4_CIRCULARBUFFER_HANDLE stJitterFifo; - /*! FIFO of RTP time stamps for the values stored in stJitterFifo */ - JB4_CIRCULARBUFFER_HANDLE stTimeStampFifo; - /*! short term jitter */ - uint32_t stJitter; - /*@} */ - /*! @name jitter buffer data */ - /*@{ */ - /*! true, if a data unit was already popped from the buffer */ - bool firstDataUnitPopped; - /*! system time of the previous JB4_PopDataUnit() call */ - uint32_t prevPopSysTime; - /*! RTP timestamp of the last played/dropped data unit that was actually available */ - uint32_t lastReturnedTs; - /*! true, if the last popped data unit contained no active signal, i.e. silence -> hint for DTX */ - bool lastPoppedWasSilence; - /*! the playout time minus the minimum offset of the last played data unit in microseconds */ - int32_t lastPlayoutOffset; - /*! RTP time stamp of the next data unit that is expected to be fetched from the buffer */ - uint32_t nextExpectedTs; - Word16 rfOffset2Active; - Word16 rfOffset3Active; - Word16 rfOffset5Active; - Word16 rfOffset7Active; - Word32 rfDelay; - /*! long term jitter measure FIFO */ - JB4_JMF_HANDLE ltJmf; - - uint32_t FecOffWinLen; - uint32_t FecOffWin[10]; - uint32_t optimum_offset; - - float netLossRate; - Word32 nPartialCopiesUsed; - Word32 last_nLost; - Word32 last_ntot; - - uint32_t totWin; - bool pre_partial_frame; - /*@} */ - - /*! @name members to store the data units */ - /*@{ */ - /*! the data unit buffer */ - JB4_INPUTBUFFER_HANDLE inputBuffer; - struct JB4_DATAUNIT memorySlots[MAX_JBM_SLOTS]; - JB4_DATAUNIT_HANDLE freeMemorySlots[MAX_JBM_SLOTS]; - uint16_t nFreeMemorySlots; - /*@} */ -}; /* JB4 */ - - -ivas_error JB4_Create( - JB4_HANDLE *ph ) -{ - int16_t iter; - JB4_HANDLE h; - ivas_error error; - - if ( ( h = malloc( sizeof( struct JB4 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JB4 structure\n" ) ); - } - - /* statistics for user */ - h->nLateLost = 0; - h->nAvailablePopped = 0; - h->nUnavailablePopped = 0; - h->nLostOrStretched = 0; - h->nLost = 0; - h->nStretched = 0; - h->nShrinked = 0; - h->nComfortNoice = 0; - h->jitterInducedConcealments = 0; - h->targetPlayoutDelay = 0; - h->lastTargetTime = 0; - /* internal configuration values - do not change!!! */ - h->timeScale = 0; - h->frameDuration = 0; - - /* jitter buffer configuration values: done in JB4_Init() */ - /* short term jitter evaluation */ - if ( ( error = JB4_JMF_Create( &h->stJmf ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = JB4_CIRCULARBUFFER_Create( &h->stJitterFifo ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = JB4_CIRCULARBUFFER_Create( &h->stTimeStampFifo ) ) != IVAS_ERR_OK ) - { - return error; - } - h->stJitter = 0; - - /* jitter buffer data */ - h->firstDataUnitPopped = false; - h->prevPopSysTime = 0; - h->lastReturnedTs = 0; - h->lastPoppedWasSilence = false; - h->lastPlayoutOffset = 0; - h->nextExpectedTs = 0; - h->rfOffset2Active = 0; - h->rfOffset3Active = 0; - h->rfOffset5Active = 0; - h->rfOffset7Active = 0; - h->rfDelay = 0; - JB4_JMF_Create( &h->ltJmf ); - h->pre_partial_frame = 0; - - h->FecOffWinLen = 0; - for ( iter = 0; iter < 10; iter++ ) - { - h->FecOffWin[iter] = 0; - } - h->optimum_offset = 3; - h->totWin = 0; - h->netLossRate = 0.0f; - move32(); - h->nPartialCopiesUsed = 0; - move32(); - h->last_nLost = 0; - move32(); - h->last_ntot = 0; - move32(); - - /* members to store the data units */ - if ( ( error = JB4_INPUTBUFFER_Create( &h->inputBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* allocate memory for data units */ - for ( iter = 0; iter < MAX_JBM_SLOTS; ++iter ) - { - if ( ( h->memorySlots[iter].data = malloc( MAX_AU_SIZE ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for JB4 structure\n" ) ); - } - h->freeMemorySlots[iter] = &h->memorySlots[iter]; - } - h->nFreeMemorySlots = MAX_JBM_SLOTS; - *ph = h; - - return IVAS_ERR_OK; -} - - -void JB4_Destroy( - JB4_HANDLE *ph ) -{ - JB4_HANDLE h; - uint16_t i; - - if ( !ph ) - { - return; - } - h = *ph; - if ( !h ) - { - return; - } - - JB4_JMF_Destroy( &h->stJmf ); - JB4_CIRCULARBUFFER_Destroy( &h->stJitterFifo ); - JB4_CIRCULARBUFFER_Destroy( &h->stTimeStampFifo ); - JB4_JMF_Destroy( &h->ltJmf ); - JB4_INPUTBUFFER_Destroy( &h->inputBuffer ); - - for ( i = 0; i < MAX_JBM_SLOTS; ++i ) - { - free( h->memorySlots[i].data ); - } - - free( h ); - *ph = NULL; - - return; -} - - -ivas_error JB4_Init( - JB4_HANDLE h, - const int16_t safetyMargin ) -{ - uint16_t ltJmfSize, stFifoSize, stJmfSize, stJmfAllowedLateLoss; - uint16_t inputBufferCapacity; - ivas_error error; - - /* internal timescale is 1000, frame duration is 20ms */ - h->timeScale = 1000; /* ms */ - h->frameDuration = 20; /* ms */ - - /* jitter buffer configuration values */ - h->safetyMargin = safetyMargin; - - /* long term jitter measure FIFO: 500 frames and 10s */ - ltJmfSize = 10000; - JB4_JMF_Init( h->ltJmf, h->timeScale, ltJmfSize / 20, ltJmfSize, 1000 ); - /* short term jitter evaluation */ - stFifoSize = 200; - stJmfSize = 50; - stJmfAllowedLateLoss = 60; /* 6%, e.g. ignore three packets out of 50 */ - JB4_CIRCULARBUFFER_Init( h->stJitterFifo, stFifoSize ); - JB4_CIRCULARBUFFER_Init( h->stTimeStampFifo, stFifoSize ); - JB4_JMF_Init( h->stJmf, h->timeScale, stJmfSize, h->timeScale /* 1s */, (uint16_t) ( 1000 - stJmfAllowedLateLoss ) ); - - inputBufferCapacity = MAX_JBM_SLOTS - 2; - - if ( ( error = JB4_INPUTBUFFER_Init( h->inputBuffer, inputBufferCapacity, JB4_inputBufferCompareFunction ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} - - -/* Returns a memory slot to store a new data unit */ -JB4_DATAUNIT_HANDLE JB4_AllocDataUnit( - JB4_HANDLE h ) -{ - JB4_DATAUNIT_HANDLE dataUnit; - while ( h->nFreeMemorySlots == 0 ) - { - assert( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) == 0 ); - JB4_dropFromBuffer( h ); - } - - --h->nFreeMemorySlots; - dataUnit = h->freeMemorySlots[h->nFreeMemorySlots]; - h->freeMemorySlots[h->nFreeMemorySlots] = NULL; - assert( dataUnit != NULL ); - - return dataUnit; -} - - -/* Notifies the JBM that a data unit is no longer used and the memory can be reused */ -void JB4_FreeDataUnit( - JB4_HANDLE h, - JB4_DATAUNIT_HANDLE dataUnit ) -{ - assert( dataUnit != NULL ); - assert( h->nFreeMemorySlots < MAX_JBM_SLOTS ); - h->freeMemorySlots[h->nFreeMemorySlots] = dataUnit; - h->nFreeMemorySlots++; - - return; -} - - -int16_t JB4_PushDataUnit( - JB4_HANDLE h, - JB4_DATAUNIT_HANDLE dataUnit, - const uint32_t rcvTime ) -{ - JB4_DATAUNIT_HANDLE droppedDataUnit = NULL; - - assert( dataUnit->duration == h->frameDuration ); - assert( dataUnit->timeScale == (uint16_t) h->timeScale ); - - /* ignore frames from too far in future (3 seconds) */ - if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) >= - (int32_t) ( 50 * 3 * dataUnit->duration ) ) - { - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - - /* reserve space for one element to add: drop oldest if buffer is full */ - while ( JB4_INPUTBUFFER_IsFull( h->inputBuffer ) ) - { - JB4_dropFromBuffer( h ); - } - assert( JB4_INPUTBUFFER_IsFull( h->inputBuffer ) == 0 ); - - /* do statistics on partial copy offset using active primary copies to - * avoid unexpected resets because RF_NO_DATA partial copies are dropped before JBM */ - if ( dataUnit->silenceIndicator == 0 && dataUnit->partial_frame == 0 ) - { - if ( dataUnit->partialCopyOffset == 0 ) - { - if ( h->rfOffset2Active > 0 ) - --h->rfOffset2Active; - if ( h->rfOffset3Active > 0 ) - --h->rfOffset3Active; - if ( h->rfOffset5Active > 0 ) - --h->rfOffset5Active; - if ( h->rfOffset7Active > 0 ) - --h->rfOffset7Active; - } - else if ( dataUnit->partialCopyOffset == 2 ) - { - h->rfOffset2Active = 100; - h->rfOffset3Active = 0; - h->rfOffset5Active = 0; - h->rfOffset7Active = 0; - } - else if ( dataUnit->partialCopyOffset == 3 ) - { - h->rfOffset2Active = 0; - h->rfOffset3Active = 100; - h->rfOffset5Active = 0; - h->rfOffset7Active = 0; - } - else if ( dataUnit->partialCopyOffset == 5 ) - { - h->rfOffset2Active = 0; - h->rfOffset3Active = 0; - h->rfOffset5Active = 100; - h->rfOffset7Active = 0; - } - else if ( dataUnit->partialCopyOffset == 7 ) - { - h->rfOffset2Active = 0; - h->rfOffset3Active = 0; - h->rfOffset5Active = 0; - h->rfOffset7Active = 100; - } - } - - if ( dataUnit->partial_frame != 0 ) - { - /* check for "real" late loss: a frame with higher/same timestamp was already returned to be fed into decoder */ - if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) <= 0 ) - { - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - - /* drop partial copy if the missing frame was already concealed */ - if ( h->firstDataUnitPopped ) - { - if ( dataUnit->partialCopyOffset <= 3 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < 0 ) - { - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - else if ( dataUnit->partialCopyOffset == 5 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < -40 ) - { - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - else if ( dataUnit->partialCopyOffset == 7 && JB4_rtpTimeStampDiff( h->nextExpectedTs, dataUnit->timeStamp ) < -80 ) - { - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - } - - /* try to store partial copy - will be dropped if primary copy already available */ - if ( JB4_INPUTBUFFER_Enque( h->inputBuffer, dataUnit, (void **) &droppedDataUnit ) == 0 ) - { - /* partial copy is useful, consider it in long-term jitter estimation */ - if ( dataUnit->partialCopyOffset <= 3 ) - { - JB4_JMF_PushPacket( h->ltJmf, rcvTime, dataUnit->timeStamp ); - } - } - else - { - JB4_FreeDataUnit( h, dataUnit ); - } - if ( droppedDataUnit != NULL ) - { - JB4_FreeDataUnit( h, droppedDataUnit ); - } - } - else - { - /* calculate jitter */ - JB4_JMF_PushPacket( h->ltJmf, rcvTime, dataUnit->timeStamp ); - JB4_estimateShortTermJitter( h, rcvTime, dataUnit->timeStamp ); - /* check for "real" late loss: a frame with higher/same timestamp was already returned to be fed into decoder */ - if ( h->firstDataUnitPopped && JB4_rtpTimeStampDiff( h->lastReturnedTs, dataUnit->timeStamp ) <= 0 ) - { - if ( !dataUnit->silenceIndicator ) - { - ++h->nLateLost; - /* deletion of a speech frame because it arrived at the JBM too late */ - ++h->jitterInducedConcealments; - } - JB4_FreeDataUnit( h, dataUnit ); - return 0; - } - /* store data unit */ - if ( JB4_INPUTBUFFER_Enque( h->inputBuffer, dataUnit, (void **) &droppedDataUnit ) != 0 ) - { - JB4_FreeDataUnit( h, dataUnit ); - } - if ( droppedDataUnit != NULL ) - { - JB4_FreeDataUnit( h, droppedDataUnit ); - } - } - return 0; -} - - -int16_t JB4_getFECoffset( - JB4_HANDLE h ) -{ - return (int16_t) h->optimum_offset; -} - - -int16_t JB4_FECoffset( - JB4_HANDLE h ) -{ - if ( h->netLossRate < 0.05 ) - { - return 0; - } - else - { - return 1; - } -} - - -int16_t JB4_PopDataUnit( - JB4_HANDLE h, - const uint32_t sysTime, - const uint32_t extBufferedTime, - JB4_DATAUNIT_HANDLE *pDataUnit, - uint32_t *scale, - uint32_t *maxScaling ) -{ - int16_t ret; - - assert( sysTime >= h->prevPopSysTime ); - if ( sysTime > h->prevPopSysTime + 20 ) - { - h->lastPlayoutOffset += 20; - } - h->prevPopSysTime = sysTime; - - ret = JB4_adaptPlayout( h, sysTime, extBufferedTime, pDataUnit, scale, maxScaling ); - - return ret; -} - - -/* Calculates the difference between two RTP timestamps - the diff is positive, if B 'later', negative otherwise */ -static int32_t JB4_rtpTimeStampDiff( - const uint32_t tsA, - const uint32_t tsB ) -{ - int32_t ret; - /* do not dare to inline this function, casting to int32_t is important here! */ - ret = (int32_t) ( tsB - tsA ); - return ret; -} - - -/* function to get the number of data units contained in the buffer */ -uint16_t JB4_bufferedDataUnits( - const JB4_HANDLE h ) - -{ - return JB4_INPUTBUFFER_Size( h->inputBuffer ); -} - - -/***************************************************************************** - **************************** private functions ****************************** - *****************************************************************************/ - - -/* function to calculate different options for the target playout delay */ -static void JB4_targetPlayoutDelay( - const JB4_HANDLE h, - uint32_t *targetMin, - uint32_t *targetMax, - uint32_t *targetDtx, - uint32_t *targetStartUp ) -{ - uint32_t ltJitter, extraDelayReserve; - - /* adapt target delay to partial copy offset */ - extraDelayReserve = 0; - h->rfDelay = 0; - if ( h->rfOffset7Active != 0 ) - { - h->rfDelay = 140; - } - else if ( h->rfOffset5Active != 0 ) - { - h->rfDelay = 100; - } - else if ( h->rfOffset2Active == 0 && h->rfOffset3Active == 0 ) - { - /* keep some delay reserve for RF-off */ - extraDelayReserve = 15; - } - - /* get estimated long term jitter */ - if ( JB4_JMF_Jitter( h->ltJmf, <Jitter ) == 0 ) - { - /* combine long term and short term jitter to calculate target delay values */ - *targetMax = h->stJitter + h->safetyMargin + h->rfDelay; - *targetMin = JB4_MIN( ltJitter + 20 + h->rfDelay + extraDelayReserve, *targetMax ); - *targetDtx = JB4_MIN( ltJitter + extraDelayReserve, h->stJitter ); - *targetStartUp = ( *targetMin + *targetMax + extraDelayReserve / 4 ) / 2; - } - else - { - /* combine long term and short term jitter to calculate target delay values */ - *targetMax = h->safetyMargin; - *targetMin = JB4_MIN( 20, *targetMax ); - *targetDtx = 0; - *targetStartUp = ( *targetMin + *targetMax ) / 2; - } - - if ( *targetStartUp < 60 ) - { - *targetStartUp = 60; - } - - return; -} - - -/* function to do playout adaptation before playing the next data unit */ -static int16_t JB4_adaptPlayout( - JB4_HANDLE h, - uint32_t sysTime, - uint32_t extBufferedTime, - JB4_DATAUNIT_HANDLE *pDataUnit, - uint32_t *scale, - uint32_t *maxScaling ) -{ - bool stretchTime; - - /* reset scale */ - if ( scale == NULL || maxScaling == NULL ) - { - return -1; - } - *scale = 100; - *maxScaling = 0; - stretchTime = false; - - /* switch type of current playout (first one, active, DTX) */ - if ( !h->firstDataUnitPopped ) - { - JB4_adaptFirstPlayout( h, sysTime, &stretchTime ); - } - else if ( h->lastPoppedWasSilence ) - { - JB4_adaptDtxPlayout( h, sysTime, &stretchTime ); - } - else - { - JB4_adaptActivePlayout( h, extBufferedTime, scale, maxScaling ); - } - - /* time shrinking done if needed, now do time stretching or pop data unit to play */ - if ( stretchTime ) - { - /* return empty data unit */ - *pDataUnit = NULL; - if ( h->firstDataUnitPopped ) - { - ++h->nUnavailablePopped; - if ( !h->lastPoppedWasSilence ) - { - ++h->nStretched; - /* jitter-induced insertion (e.g. buffer underflow) */ - ++h->jitterInducedConcealments; - } - } - /* add one frame to last playout delay */ - h->lastPlayoutOffset += h->frameDuration; - } - else - { - /* return next data unit from buffer */ - JB4_popFromBuffer( h, sysTime, pDataUnit ); - } - - return 0; -} - - -/* function for playout adaptation while active (no DTX) */ -static void JB4_adaptActivePlayout( - JB4_HANDLE h, - uint32_t extBufferedTime, - uint32_t *scale, - uint32_t *maxScaling ) -{ - JB4_DATAUNIT_HANDLE nextDataUnit; - bool convertToLateLoss, dropEarly; - uint32_t targetMin, targetMax, targetDtx, targetStartUp, targetMaxStretch; - uint32_t currPlayoutDelay, gap, buffered; - uint32_t dropGapMax, dropRateMin, dropRateMax, rate; - int32_t minOffTicks, tsDiffToNextDataUnit; - - JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); - if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) - { - return; - } - h->targetPlayoutDelay = ( targetMin + targetMax ) / 2; - - convertToLateLoss = false; - dropEarly = false; - dropGapMax = 200; - dropRateMin = 5; - dropRateMax = 200; /* 20% */ - - /* calculate current playout delay */ - currPlayoutDelay = h->lastPlayoutOffset - minOffTicks + extBufferedTime; - if ( !JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) - { - nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - tsDiffToNextDataUnit = JB4_rtpTimeStampDiff( h->nextExpectedTs, nextDataUnit->timeStamp ); - if ( tsDiffToNextDataUnit < 0 ) - { - convertToLateLoss = true; - /* time stretching is expected -> increase playout delay to allow dropping the late frame */ - currPlayoutDelay -= tsDiffToNextDataUnit; - currPlayoutDelay += 1; - } - } - - /* decided between shrinking/stretching */ - if ( currPlayoutDelay > targetMax ) /* time shrinking */ - { - gap = currPlayoutDelay - h->targetPlayoutDelay; - /* check if gap is positive and dropping is allowed - * and buffer contains enough time (ignoring one frame) */ - if ( gap > 0 && - JB4_inspectBufferForDropping( h, &dropEarly, &buffered ) == 0 && - ( convertToLateLoss || - ( buffered + h->frameDuration + extBufferedTime ) > targetMax ) ) - { - if ( convertToLateLoss ) - { - JB4_dropFromBuffer( h ); - } - else if ( dropEarly ) - { - JB4_dropFromBuffer( h ); - ++h->nLostOrStretched; - } - else - { - /* limit gap to [gapMin,gapMax] and calculate current drop rate from gap */ - rate = JB4_MIN( (uint32_t) ( gap ), dropGapMax ) * - ( dropRateMax - dropRateMin ) / dropGapMax + - dropRateMin; - *scale = ( 1000 - rate ) / 10; - *maxScaling = currPlayoutDelay - targetMax; - } - } - } - else /* time stretching */ - { - uint32_t delayWithClearedExternalBuffer; - /* Stretching only makes sense if we win one additional frame in the input buffer. - * If too much additional delay would be required to do so, then do not scale. - * Also make sure that the delay doesn't increase too much. */ - delayWithClearedExternalBuffer = currPlayoutDelay - extBufferedTime + h->frameDuration; - targetMaxStretch = targetMax - h->frameDuration; - if ( delayWithClearedExternalBuffer + h->frameDuration <= targetMaxStretch && - currPlayoutDelay < targetMaxStretch && currPlayoutDelay < (uint32_t) ( 110 + h->rfDelay / 4 ) ) - { - *scale = 120; - *maxScaling = targetMaxStretch - currPlayoutDelay; - } - } - - return; -} - - -/* function for playout adaptation while DTX */ -static void JB4_adaptDtxPlayout( - JB4_HANDLE h, - uint32_t sysTime, - bool *stretchTime ) -{ - JB4_DATAUNIT_HANDLE firstDu; - uint32_t firstTs; - uint32_t targetMin, targetMax, targetDtx, targetStartUp; - uint32_t currPlayoutDelay, headRoom; - int32_t minOffTicks, tsDiffToNextDataUnit; - - JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); - if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) - { - return; - } - - /* calculate current playout delay */ - currPlayoutDelay = h->lastPlayoutOffset - minOffTicks; - - /* check for startup after DTX */ - if ( !JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) - { - firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - firstTs = firstDu->timeStamp; - - tsDiffToNextDataUnit = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstTs ); - /* check if the next available data unit should already be used (time stamp order) */ - if ( tsDiffToNextDataUnit > 0 ) - { - /* time stretching is expected -> increase playout delay */ - currPlayoutDelay += tsDiffToNextDataUnit; - } - if ( !firstDu->silenceIndicator ) - { - /* recalculate playout delay based on first buffered data unit */ - JB4_playoutDelay( h, sysTime, firstTs, &currPlayoutDelay ); - /* check if the next available data unit should already be used (time stamp order) */ - if ( tsDiffToNextDataUnit > 0 ) - { - /* time stretching is expected -> increase playout delay */ - currPlayoutDelay += tsDiffToNextDataUnit; - } - h->targetPlayoutDelay = targetStartUp; - headRoom = 600 * h->frameDuration / 1000; - /* decided between shrinking/stretching */ - if ( currPlayoutDelay > targetStartUp + headRoom ) /* time shrinking */ - { - if ( JB4_checkDtxDropping( h ) ) - { - JB4_dropFromBuffer( h ); - } - } - else if ( currPlayoutDelay + headRoom < targetStartUp ) /* time stretching */ - { - *stretchTime = true; - } - return; - } - } - - /* adapt while DTX */ - h->targetPlayoutDelay = targetDtx; - - /* decided between shrinking/stretching */ - if ( currPlayoutDelay >= targetDtx + h->frameDuration ) /* time shrinking */ - { - if ( JB4_checkDtxDropping( h ) ) - { - JB4_dropFromBuffer( h ); - } - } - else if ( currPlayoutDelay + 500 * h->frameDuration / 1000 < targetDtx ) /* time stretching */ - { - *stretchTime = true; - } - - return; -} - - -/* function to do playout adaptation before playing the first data unit */ -static void JB4_adaptFirstPlayout( - JB4_HANDLE h, - uint32_t sysTime, - bool *prebuffer ) -{ - uint32_t currPlayoutDelay; - JB4_DATAUNIT_HANDLE firstDu; - uint32_t targetMin, targetMax, targetDtx, targetStartUp; - if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) - { - *prebuffer = true; - return; - } - JB4_targetPlayoutDelay( h, &targetMin, &targetMax, &targetDtx, &targetStartUp ); - if ( targetStartUp < h->frameDuration ) - { - return; - } - /* calculate delay if first data unit would be played now */ - firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - if ( JB4_playoutDelay( h, sysTime, firstDu->timeStamp, &currPlayoutDelay ) != 0 ) - { - *prebuffer = true; - return; - } - if ( currPlayoutDelay + h->frameDuration / 2 < targetStartUp ) /* time stretching */ - { - *prebuffer = true; - } - else /* no adaptation, start playout */ - { - *prebuffer = false; - } - - return; -} - - -/* function to look into the buffer and check if it makes sense to drop a data unit */ -static int16_t JB4_inspectBufferForDropping( - const JB4_HANDLE h, - bool *dropEarly, - uint32_t *buffered ) -{ - uint16_t inputBufferSize; - int32_t seqNrDiff; - int32_t bufferedTs; - uint32_t firstTs; - uint64_t beginTs, endTs; - JB4_DATAUNIT_HANDLE firstDu, secondDu, lastDu; - - assert( !h->lastPoppedWasSilence ); - *dropEarly = false; - *buffered = 0; - inputBufferSize = JB4_INPUTBUFFER_Size( h->inputBuffer ); - if ( inputBufferSize == 0U ) - { - return -1; - } - - firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - firstTs = firstDu->timeStamp; - /* check for loss: sequence number diff is exactly 0 in the valid case */ - if ( h->firstDataUnitPopped ) - { - seqNrDiff = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstTs ) / - (int32_t) ( h->frameDuration ); - } - else - { - seqNrDiff = 0; - } - if ( seqNrDiff <= 0 ) - { - /* preview data unit to play after dropping */ - if ( inputBufferSize <= 1U ) - { - /* data unit to play missing, avoid drop followed by concealment */ - return -1; - } - secondDu = JB4_INPUTBUFFER_Element( h->inputBuffer, 1 ); - if ( firstTs + h->frameDuration != secondDu->timeStamp ) - { - /* data unit to play is not available, avoid drop followed by concealment */ - return -1; - } - /* calculate buffered time span */ - bufferedTs = 0; - } - else if ( seqNrDiff == 2 ) - { - /* data unit to play is not available, avoid dropping followed by concealment */ - return -1; - } - else /* seqNoDiff == 1 || seqNoDiff > 2 */ - { - /* first data unit is not available -> drop it early to avoid concealment - * This is very aggressive: ignores the maximum drop rate (50% drop and 50% concealment for adjacent lost), - * but on the other hand, dropping sounds better than concealment. */ - *dropEarly = true; - /* data unit to drop (first one) is lost */ - bufferedTs = 0; - } - - /* add time stamp difference of last and first actually buffered data unit */ - if ( inputBufferSize == 1U ) - { - bufferedTs += h->frameDuration; - } - else - { - lastDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Back( h->inputBuffer ); - beginTs = firstTs; - endTs = lastDu->timeStamp + h->frameDuration; - /* check for RTP time stamp wrap around */ - if ( endTs < beginTs ) - { - endTs = endTs + 0xFFFFFFFF; - } - bufferedTs += (int32_t) ( endTs - beginTs ); - } - - /* the result should not be negative */ - if ( bufferedTs < 0 ) - { - return -1; - } - *buffered = bufferedTs; - - return 0; -} - - -/* function to look into the buffer and check if it makes sense to drop a data unit */ -static int16_t JB4_checkDtxDropping( - const JB4_HANDLE h ) -{ - uint16_t inputBufferSize; - int32_t seqNrDiff; - JB4_DATAUNIT_HANDLE firstDu; - int16_t droppingAllowed; - - assert( h->firstDataUnitPopped ); - assert( h->lastPoppedWasSilence ); - - droppingAllowed = 1; - inputBufferSize = JB4_INPUTBUFFER_Size( h->inputBuffer ); - if ( inputBufferSize > 0U ) - { - firstDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - /* check for loss: sequence number diff is exactly 0 in the valid case */ - seqNrDiff = JB4_rtpTimeStampDiff( h->nextExpectedTs, firstDu->timeStamp ) / - (int32_t) ( h->frameDuration ); - if ( seqNrDiff <= 0 ) - { - /* no not drop first active frame */ - droppingAllowed = 0; - } - } - /* else: buffer empty, allow dropping FRAME_NO_DATA */ - - return droppingAllowed; -} - - -/* function to estimate the short term jitter */ -static void JB4_estimateShortTermJitter( - JB4_HANDLE h, - const uint32_t rcvTime, - const uint32_t rtpTimeStamp ) -{ - uint32_t jitter, duration, maxDuration; - int32_t minTime, maxTime; - JB4_CIRCULARBUFFER_ELEMENT maxElement, dequedElement; - - jitter = 0; - JB4_JMF_PushPacket( h->stJmf, rcvTime, rtpTimeStamp ); - /* save delta delay */ - if ( JB4_JMF_Jitter( h->stJmf, &jitter ) == 0 ) - { - /* compensate difference between both offsets */ - int32_t stOffset, ltOffset; - JB4_JMF_MinOffset( h->stJmf, &stOffset ); - JB4_JMF_MinOffset( h->ltJmf, <Offset ); - jitter += stOffset - ltOffset; - assert( (int16_t) jitter >= 0 ); - if ( JB4_CIRCULARBUFFER_IsFull( h->stJitterFifo ) ) - { - JB4_CIRCULARBUFFER_Deque( h->stJitterFifo, &dequedElement ); - JB4_CIRCULARBUFFER_Deque( h->stTimeStampFifo, &dequedElement ); - } - JB4_CIRCULARBUFFER_Enque( h->stJitterFifo, jitter ); - JB4_CIRCULARBUFFER_Enque( h->stTimeStampFifo, rtpTimeStamp ); - - /* check for duration and discard first entries if too long */ - minTime = JB4_CIRCULARBUFFER_Front( h->stTimeStampFifo ); - maxTime = JB4_CIRCULARBUFFER_Back( h->stTimeStampFifo ); - if ( maxTime > minTime ) - { - duration = maxTime - minTime; - maxDuration = 4 * h->timeScale; - while ( duration > maxDuration ) - { - JB4_CIRCULARBUFFER_Deque( h->stJitterFifo, &dequedElement ); - JB4_CIRCULARBUFFER_Deque( h->stTimeStampFifo, &dequedElement ); - minTime = JB4_CIRCULARBUFFER_Front( h->stTimeStampFifo ); - if ( maxTime <= minTime ) - { - break; - } - duration = maxTime - minTime; - } - } - } - - /* update h->stJitter */ - if ( !JB4_CIRCULARBUFFER_IsEmpty( h->stJitterFifo ) ) - { - JB4_CIRCULARBUFFER_Max( h->stJitterFifo, &maxElement ); - /* round up to full frame duration */ - h->stJitter = (uint32_t) ceil( (double) ( maxElement ) / h->frameDuration ) * - h->frameDuration; - } - - return; -} - - -/* function to pop a data unit from the buffer */ -static void JB4_popFromBuffer( - JB4_HANDLE h, - const uint32_t sysTime, - JB4_DATAUNIT_HANDLE *pDataUnit ) -{ - JB4_DATAUNIT_HANDLE nextDataUnit; - uint32_t nStretched; - int32_t tsDiff; - JB4_DATAUNIT_HANDLE tempDataUnit; - uint16_t readlen; - uint16_t i; - int16_t frameoffset; - uint32_t maxval; - Word32 lost, total_rec; - JB4_DATAUNIT_HANDLE partialCopyDu; - uint16_t searchpos, endpos; - - /* check if a data unit is available */ - if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) - { - /* no data unit available */ - *pDataUnit = NULL; - h->nextExpectedTs += h->frameDuration; - if ( h->lastPoppedWasSilence ) - { - ++h->nComfortNoice; - } - else - { - ++h->nUnavailablePopped; - ++h->nLostOrStretched; - } - - return; - } - - /* preview next data unit in sequence order */ - nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - - /* check if this is the first data unit */ - if ( !h->firstDataUnitPopped ) - { - h->firstDataUnitPopped = true; - /* adjust sequence numbers to avoid handling first packet as loss */ - h->nextExpectedTs = nextDataUnit->timeStamp; - } - - /* check if the next available data unit should already be used (time stamp order) */ - tsDiff = JB4_rtpTimeStampDiff( nextDataUnit->timeStamp, h->nextExpectedTs ); - - h->totWin += 1; - if ( ( h->totWin > 3000 ) || ( h->FecOffWinLen > 100 ) ) - { - maxval = h->FecOffWin[1]; - h->optimum_offset = 1; - for ( i = 2; i < MAXOFFSET; i++ ) - { - if ( h->FecOffWin[i] > maxval ) - { - maxval = h->FecOffWin[i]; - h->optimum_offset = i; - } - h->FecOffWin[i] = 0; - } - h->FecOffWin[0] = 0; - h->FecOffWin[1] = 0; - h->totWin = 0; - h->FecOffWinLen = 0; - - - lost = h->nLost + h->nPartialCopiesUsed - h->last_nLost; - total_rec = h->nAvailablePopped + h->nUnavailablePopped - h->last_ntot; - - if ( lost != 0 && total_rec != 0 ) - { - h->netLossRate = (float) lost / (float) total_rec; - } - else - { - h->netLossRate = 0.0f; - } - h->last_nLost = L_add( h->nLost, h->nPartialCopiesUsed ); - h->last_ntot = L_add( h->nAvailablePopped, h->nUnavailablePopped ); - } - - if ( tsDiff < 0 ) - { - readlen = JB4_INPUTBUFFER_Size( h->inputBuffer ); - for ( i = 0; i < readlen; i++ ) - { - tempDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, i ); - if ( !tempDataUnit->partial_frame && !h->lastPoppedWasSilence ) - { - frameoffset = (int16_t) ( JB4_rtpTimeStampDiff( h->nextExpectedTs, tempDataUnit->timeStamp ) / 20 ); - - if ( frameoffset > 0 && frameoffset < MAXOFFSET ) - { - h->FecOffWin[frameoffset] += 1; - } - } - } - h->FecOffWinLen += 1; - - /* next expected data unit is missing - * -> conceal network loss, do time stretching or create comfort noise */ - *pDataUnit = NULL; - - /* update statistics */ - h->nextExpectedTs += h->frameDuration; - if ( h->lastPoppedWasSilence ) - { - ++h->nComfortNoice; - } - else - { - ++h->nUnavailablePopped; - ++h->nLostOrStretched; - } - return; - } - - /* fetch the next data unit from buffer */ - *pDataUnit = nextDataUnit; - nextDataUnit->nextCoderType = INACTIVE; - if ( h->pre_partial_frame || nextDataUnit->partial_frame ) - { - if ( nextDataUnit->partial_frame ) - { - h->pre_partial_frame = 1; - } - else if ( h->pre_partial_frame ) - { - h->pre_partial_frame = 0; - } - - endpos = JB4_INPUTBUFFER_Size( h->inputBuffer ); - for ( searchpos = 0; searchpos < endpos; searchpos++ ) - { - partialCopyDu = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, searchpos ); - if ( partialCopyDu->timeStamp == nextDataUnit->timeStamp + partialCopyDu->duration ) - { - get_NextCoderType( partialCopyDu->data, &nextDataUnit->nextCoderType ); - break; - } - } - } - JB4_INPUTBUFFER_Deque( h->inputBuffer, (void **) pDataUnit ); - - if ( nextDataUnit->partial_frame ) - { - h->nPartialCopiesUsed += 1; - - readlen = JB4_INPUTBUFFER_Size( h->inputBuffer ); - for ( i = 0; i < readlen; i++ ) - { - tempDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Element( h->inputBuffer, i ); - if ( !tempDataUnit->partial_frame && !h->lastPoppedWasSilence ) - { - frameoffset = (int16_t) ( JB4_rtpTimeStampDiff( h->nextExpectedTs, tempDataUnit->timeStamp ) / 20 ); - - if ( frameoffset > 0 && frameoffset < MAXOFFSET ) - { - h->FecOffWin[frameoffset] += 1; - } - } - } - h->FecOffWinLen += 1; - } - - /* update statistics */ - if ( h->nLostOrStretched != 0U ) - { - assert( h->lastPoppedWasSilence == false ); - /* separate concealments since last available pop in lost and stretched */ - nStretched = tsDiff / h->frameDuration; - assert( h->nLostOrStretched >= nStretched ); - h->nLost += h->nLostOrStretched - nStretched; - /* jitter-induced insertion (e.g. buffer underflow) */ - h->jitterInducedConcealments += nStretched; - h->nStretched += nStretched; - h->nLostOrStretched = 0; - } - h->lastReturnedTs = nextDataUnit->timeStamp; - JB4_updateLastTimingMembers( h, sysTime, nextDataUnit->timeStamp ); - h->nextExpectedTs = nextDataUnit->timeStamp + h->frameDuration; - if ( nextDataUnit->silenceIndicator ) - { - h->lastPoppedWasSilence = true; - ++h->nComfortNoice; - } - else - { - h->lastPoppedWasSilence = false; - ++h->nAvailablePopped; - } - - return; -} - -/* function to drop a data unit from the buffer - updates nShrinked */ -static void JB4_dropFromBuffer( - JB4_HANDLE h ) -{ - JB4_DATAUNIT_HANDLE nextDataUnit, dataUnit; - int32_t tsDiff; - uint32_t nStretched; - - /* check if a data unit is available */ - if ( JB4_INPUTBUFFER_IsEmpty( h->inputBuffer ) ) - { - return; - } - /* preview next data unit in sequence order */ - nextDataUnit = (JB4_DATAUNIT_HANDLE) JB4_INPUTBUFFER_Front( h->inputBuffer ); - - /* check if this is the first data unit */ - if ( !h->firstDataUnitPopped ) - { - h->firstDataUnitPopped = true; - /* adjust sequence numbers to avoid handling first packet as loss */ - h->nextExpectedTs = nextDataUnit->timeStamp; - } - - /* check if the next available data unit should already be used (time stamp order) */ - tsDiff = JB4_rtpTimeStampDiff( nextDataUnit->timeStamp, h->nextExpectedTs ); - if ( tsDiff < 0 ) - { - /* next expected data unit is missing, remember this data unit as popped, - * but do not count it as lost, because it will not be concealed */ - h->nextExpectedTs += h->frameDuration; - /* substract one frame from last playout delay */ - h->lastPlayoutOffset -= h->frameDuration; - if ( !h->lastPoppedWasSilence ) - { - ++h->nShrinked; - /* modification of the output timeline due to link loss */ - ++h->nUnavailablePopped; - ++h->nLostOrStretched; - } - if ( h->lastTargetTime != 0U ) - { - h->lastTargetTime += h->frameDuration; - } - return; - } - - /* fetch the next data unit from buffer */ - JB4_INPUTBUFFER_Deque( h->inputBuffer, (void *) &dataUnit ); - /* update statistics */ - if ( h->nLostOrStretched != 0U ) - { - assert( h->lastPoppedWasSilence == false ); - /* separate concealments since last available pop in lost and stretched */ - nStretched = tsDiff / h->frameDuration; - assert( h->nLostOrStretched >= nStretched ); - - /* convert stretching followed by shrinking to late-loss */ - if ( nStretched > 0U ) - { - --nStretched; - ++h->nLateLost; - h->nLost += h->nLostOrStretched - nStretched; - /* jitter-induced insertion (e.g. buffer underflow) */ - h->jitterInducedConcealments += nStretched; - if ( !dataUnit->silenceIndicator ) - { - /* JBM induced removal of a speech frame (intentional frame dropping) */ - ++h->jitterInducedConcealments; - } - h->nStretched += nStretched; - } - else - { - h->nLost += h->nLostOrStretched; - ++h->nShrinked; - if ( !dataUnit->silenceIndicator ) - { - /* JBM induced removal of a speech frame (intentional frame dropping) */ - ++h->jitterInducedConcealments; - } - } - h->nLostOrStretched = 0; - } - else - { - if ( !dataUnit->silenceIndicator ) - { - ++h->nShrinked; - /* JBM induced removal of a speech frame (intentional frame dropping) */ - ++h->jitterInducedConcealments; - } - } - - h->lastReturnedTs = dataUnit->timeStamp; - h->lastPoppedWasSilence = dataUnit->silenceIndicator; - h->nextExpectedTs = dataUnit->timeStamp + h->frameDuration; - - /* substract one frame from last playout delay */ - h->lastPlayoutOffset -= h->frameDuration; - if ( h->lastTargetTime != 0U ) - h->lastTargetTime += h->frameDuration; - - JB4_FreeDataUnit( h, dataUnit ); - - return; -} - - -/* function to calculate the playout delay based on the current jitter */ -static int16_t JB4_playoutDelay( - const JB4_HANDLE h, - const uint32_t playTime, - const uint32_t rtpTimeStamp, - uint32_t *delay ) -{ - int32_t minOffTicks; - - if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) - { - return -1; - } - - *delay = playTime - minOffTicks - rtpTimeStamp; - - return 0; -} - - -/* function to update lastPlayoutDelay and lastTargetTime after popFromBuffer() */ -static void JB4_updateLastTimingMembers( - JB4_HANDLE h, - const uint32_t playTime, - const uint32_t rtpTimeStamp ) -{ - int32_t minOffTicks; - - if ( JB4_JMF_MinOffset( h->ltJmf, &minOffTicks ) != 0 ) - { - return; - } - - /* playoutDelay = playTime - minOffset - timeStamp */ - h->lastPlayoutOffset = playTime - rtpTimeStamp; - /* targetTime = minOffset + timeStamp + targetDelay */ - h->lastTargetTime = (uint32_t) ( minOffTicks + rtpTimeStamp + h->targetPlayoutDelay ); - - return; -} - - -/* function to compare the RTP time stamps of two data units: newElement==arrayElement ? 0 : (newElement>arrayElement ? +1 : -1) */ -static int16_t JB4_inputBufferCompareFunction( - const JB4_INPUTBUFFER_ELEMENT newElement, - const JB4_INPUTBUFFER_ELEMENT arrayElement, - bool *replaceWithNewElementIfEqual ) -{ - JB4_DATAUNIT_HANDLE newDataUnit, arrayDataUnit; - int32_t diff; - int16_t result; - - *replaceWithNewElementIfEqual = 0; - newDataUnit = (JB4_DATAUNIT_HANDLE) newElement; - arrayDataUnit = (JB4_DATAUNIT_HANDLE) arrayElement; - diff = JB4_rtpTimeStampDiff( arrayDataUnit->timeStamp, newDataUnit->timeStamp ); - if ( diff > 0 ) - { - result = 1; - } - else if ( diff < 0 ) - { - result = -1; - } - else /* equal timestamps */ - { - result = 0; - if ( newDataUnit->partial_frame == 0 && arrayDataUnit->partial_frame == 1 ) - { - /* replace partial copy with primary copy */ - *replaceWithNewElementIfEqual = 1; - } - else if ( newDataUnit->partial_frame == arrayDataUnit->partial_frame && newDataUnit->dataSize > arrayDataUnit->dataSize ) - { - /* if both are primary or partial: take the one with higher size (e.g. higher bitrate) */ - *replaceWithNewElementIfEqual = 1; - } - } - - return result; -} - -#endif /* IVAS_FLOAT_FIXED */ #undef WMC_TOOL_SKIP diff --git a/lib_dec/jbm_jb4sb.h b/lib_dec/jbm_jb4sb.h index a19ce5797..55565be4a 100644 --- a/lib_dec/jbm_jb4sb.h +++ b/lib_dec/jbm_jb4sb.h @@ -45,7 +45,6 @@ #include "typedef.h" #include "ivas_error.h" -#ifdef IVAS_FLOAT_FIXED /** handle for jitter buffer */ typedef struct JB4 *JB4_HANDLE; @@ -100,61 +99,5 @@ Word16 JB4_getFECoffset( JB4_HANDLE h ); Word16 JB4_FECoffset( JB4_HANDLE h ); UWord16 JB4_bufferedDataUnits( const JB4_HANDLE h ); -#else -/** handle for jitter buffer */ -typedef struct JB4 *JB4_HANDLE; - -/** jitter buffer data units (access unit together with RTP seqNo, timestamp, ...) */ -struct JB4_DATAUNIT -{ - /** the RTP sequence number (16 bits) */ - uint16_t sequenceNumber; - /** the RTP time stamp (32 bits) of this chunk in timeScale() units */ - uint32_t timeStamp; - /** the duration of this chunk in timeScale() units */ - uint32_t duration; - /** the RTP time scale, which is used for timeStamp() and duration() */ - uint32_t timeScale; - /** the receive time of the RTP packet in milliseconds */ - uint32_t rcvTime; - /** true, if the data unit contains only silence */ - bool silenceIndicator; - /** Q bit for AMR-WB IO */ - Word16 qBit; - - /** the binary encoded access unit */ - uint8_t *data; - /** the size of the binary encoded access unit [bits] */ - uint16_t dataSize; - - /** identify if the data unit has a partial copy of a previous frame */ - bool partial_frame; - /** offset of the partial copy contained in that frame or zero */ - int16_t partialCopyOffset; - int16_t nextCoderType; -}; -typedef struct JB4_DATAUNIT *JB4_DATAUNIT_HANDLE; - - -ivas_error JB4_Create( JB4_HANDLE *ph ); - -void JB4_Destroy( JB4_HANDLE *ph ); - -ivas_error JB4_Init( JB4_HANDLE h, const int16_t safetyMargin ); - -JB4_DATAUNIT_HANDLE JB4_AllocDataUnit( JB4_HANDLE h ); - -void JB4_FreeDataUnit( JB4_HANDLE h, JB4_DATAUNIT_HANDLE dataUnit ); - -int16_t JB4_PushDataUnit( JB4_HANDLE h, JB4_DATAUNIT_HANDLE dataUnit, const uint32_t rcvTime ); - -int16_t JB4_PopDataUnit( JB4_HANDLE h, const uint32_t sysTime, const uint32_t extBufferedTime, JB4_DATAUNIT_HANDLE *pDataUnit, uint32_t *scale, uint32_t *maxScaling ); - -int16_t JB4_getFECoffset( JB4_HANDLE h ); - -int16_t JB4_FECoffset( JB4_HANDLE h ); - -uint16_t JB4_bufferedDataUnits( const JB4_HANDLE h ); -#endif /* IVAS_FLOAT_FIXED */ #endif /* JBM_JB4SB_H */ diff --git a/lib_dec/jbm_pcmdsp_apa.h b/lib_dec/jbm_pcmdsp_apa.h index 33edf411a..7acdf599c 100644 --- a/lib_dec/jbm_pcmdsp_apa.h +++ b/lib_dec/jbm_pcmdsp_apa.h @@ -112,42 +112,22 @@ bool apa_set_rate( apa_state_t *ps, const int32_t output_Fs ); * The scale is given in % and will be valid until changed again. * Must be in range [APA_MIN_SCALE,APA_MAX_SCALE]. * @return 0 on success, 1 on failure */ -#ifdef IVAS_FLOAT_FIXED bool apa_set_scale_fx( apa_state_t *s, UWord16 scale ); -#else -bool apa_set_scale( apa_state_t *s, uint16_t scale ); -#endif -#ifdef IVAS_FLOAT_FIXED bool apa_set_renderer_granularity( apa_state_t *ps, UWord16 l_ts ); -#else -bool apa_set_renderer_granularity( apa_state_t *ps, uint16_t l_ts ); -#endif -#ifdef IVAS_FLOAT_FIXED bool apa_set_renderer_residual_samples( apa_state_t *ps, UWord16 l_r_buf ); -#else -bool apa_set_renderer_residual_samples( apa_state_t *ps, uint16_t l_r_buf ); -#endif bool apa_set_evs_compat_mode( apa_state_t *ps, bool mode ); uint8_t apa_reconfigure( apa_state_t *ps, uint16_t num_channels, uint16_t l_ts ); -#ifdef IVAS_FLOAT_FIXED bool apa_set_complexity_options( apa_state_t *s, UWord16 wss, UWord16 css ); -#else -bool apa_set_complexity_options( apa_state_t *s, uint16_t wss, uint16_t css ); -#endif bool apa_set_quality( apa_state_t *s, Word32 quality, UWord16 qualityred, UWord16 qualityrise ); bool apa_exit( apa_state_t **s ); -#ifndef IVAS_FLOAT_FIXED -uint8_t apa_exec( apa_state_t *s, const float a_in[], uint16_t l_in, uint16_t maxScaling, float a_out[], uint16_t *l_out ); -#else UWord8 apa_exec_ivas_fx( apa_state_t *s, const Word32 a_in[], UWord16 l_in, UWord16 maxScaling, Word32 a_out[], UWord16 *l_out ); uint8_t apa_exec_fx( apa_state_t *s, const Word16 a_in[], UWord16 l_in, UWord16 maxScaling, Word16 a_out[], UWord16 *l_out ); -#endif #endif /* JBM_PCMDSP_APA_H */ diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.c b/lib_dec/jbm_pcmdsp_similarityestimation.c index 259213dac..a6c56837d 100644 --- a/lib_dec/jbm_pcmdsp_similarityestimation.c +++ b/lib_dec/jbm_pcmdsp_similarityestimation.c @@ -49,26 +49,6 @@ /* Calculates cross correlation coefficient for template segment. */ -#ifndef IVAS_FLOAT_FIXED -float cross_correlation_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len ) -{ - float c_c; - int16_t j; - - c_c = 0.0f; - for ( j = 0; j < corr_len; j++ ) - { - c_c += ( signal[j + x] * signal[j + y] ); - } - - return c_c; -} -#endif -#ifdef IVAS_FLOAT_FIXED void scaleSignal16( const Word16 *src, Word16 *dst, Word16 n, Word16 rightShift ) { Word16 i; @@ -79,7 +59,6 @@ void scaleSignal16( const Word16 *src, Word16 *dst, Word16 n, Word16 rightShift move16(); } } -#endif /* Calculates cross correlation coefficient for template segment. */ Word32 cross_correlation_subsampled_self_fx( const Word16 *signal, Word16 x, @@ -101,94 +80,6 @@ Word32 cross_correlation_subsampled_self_fx( const Word16 *signal, } /* Calculates cross correlation coefficient for template segment. */ -#ifndef IVAS_FLOAT_FIXED -float cross_correlation_subsampled_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len, - uint16_t subsampling ) -{ - float c_c; - int16_t j; - - c_c = 0.0f; - for ( j = 0; j < corr_len; j += subsampling ) - { - c_c += ( signal[j + x] * signal[j + y] ); - } - - return c_c; -} - - -/* Calculates normalized cross correlation coefficient for template segment. */ -float normalized_cross_correlation_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len, - uint16_t subsampling, - float *energy ) -{ - float c_c; - float energy_xy, energy_x, energy_y; - uint16_t j; - const float *signal_a, *signal_b; - - c_c = 0.0f; - energy_x = 0.0f; - energy_y = 0.0f; - signal_a = &signal[x]; - signal_b = &signal[y]; - for ( j = 0; j < corr_len; j += subsampling ) - { - c_c += ( signal_a[j] * signal_b[j] ); - energy_x += ( signal_a[j] ) * ( signal_a[j] ); - energy_y += ( signal_b[j] ) * ( signal_b[j] ); - } - energy_xy = sqrtf( energy_x * energy_y ); - if ( energy_xy < 1.0f ) - { - energy_xy = 1.0f; /* conceal silent frames */ - } - - c_c = c_c / energy_xy; - *energy = energy_xy; - - return c_c; -} - - -/* Splits the signal into segments and checks if all of them have very low energy. */ -bool isSilence( - const float *signal, - uint32_t len, - uint32_t segments ) -{ - uint32_t i, samplesPerSegment; - float energy; - - energy = 0; - samplesPerSegment = len / segments; - for ( i = 0; i < len; i++ ) - { - energy += ( signal[i] / 32768.f ) * ( signal[i] / 32768.f ); - if ( ( i != 0U && i % samplesPerSegment == 0U ) || i + 1 == len ) - { - /* check energy of current segment */ - energy = 10 * log10f( energy / (float) samplesPerSegment ); - if ( energy > -65 ) - { - return false; - } - energy = 0; - } - } - - return true; -} -#endif // !IVAS_FLOAT_FIXED Word16 normalized_cross_correlation_self_fx( const Word16 *signal, Word16 x, @@ -236,21 +127,15 @@ Word16 normalized_cross_correlation_self_fx( const Word16 *signal, IF( sqrtXY != 0 ) { -#ifdef FX_834_OVFL_JBM_CROSSCORR Flag Overflow = 0; move32(); -#endif normCC = 0; move16(); cc = BASOP_Util_Divide3216_Scale( sumXY, sqrtXY, &normCC ); normCC = add( normCC, 16 ); /* scale to Q15 with saturation */ BASOP_SATURATE_WARNING_OFF -#ifdef FX_834_OVFL_JBM_CROSSCORR cc = shl_ro( cc, add( normXY, normCC ), &Overflow ); -#else - cc = shl_r( cc, add( normXY, normCC ) ); -#endif BASOP_SATURATE_WARNING_ON *energy = L_shr_r( L_deposit_l( sqrtXY ), normXY ); } @@ -306,7 +191,6 @@ Word32 cross_correlation_self_fx( const Word16 *signal, return sum; } -#ifdef IVAS_FLOAT_FIXED Word8 isSilence_fx( const Word16 *signal, Word16 len, Word16 segments ) { Word16 i, j, samplesPerSegment; @@ -405,4 +289,3 @@ Word8 isSilence_ivas_fx( const Word16 *signal, Word16 q_sig, Word16 len, Word16 return 1; } -#endif diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.h b/lib_dec/jbm_pcmdsp_similarityestimation.h index 1ce86fc9a..123d0c3c1 100644 --- a/lib_dec/jbm_pcmdsp_similarityestimation.h +++ b/lib_dec/jbm_pcmdsp_similarityestimation.h @@ -41,119 +41,6 @@ #include "options.h" #include "typedef.h" -#ifndef IVAS_FLOAT_FIXED -/* -******************************************************************************** -* -* Function : cross_correlation_self -* Tables : -* Compile Defines : -* Return : (float) cross correlation coefficient -* Information : Calculate cross correlation coefficient for template -* segment. -* The returned value is signal-energy dependant. -* -* Used formula: -* -* corr_len-1 -* ---- -* \ -* / (j+x)*(j+y) -* ---- -* j=0 -* -* -* 23-JUL-04 S.Doehla initial version -* -******************************************************************************** -*/ -float cross_correlation_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len ); - -/* -******************************************************************************** -* -* Function : cross_correlation_subsampled_self -* Tables : -* Compile Defines : -* Return : (float) cross correlation coefficient -* Information : Calculate cross correlation coefficient for template -* segment. -* The returned value is signal-energy dependant. -* -* Used formula: -* -* corr_len-1 -* ---- -* \ -* / (j+x)*(j+y) -* ---- -* j=0 -* -* -* 23-JUL-04 S.Doehla initial version -* -******************************************************************************** -*/ -float cross_correlation_subsampled_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len, - uint16_t subsampling ); -/* -******************************************************************************** -* -* Function : normalized_cross_correlation_self -* Tables : -* Compile Defines : -* Return : (float) normalized cross correlation coefficient -* Information : Calculate normalized cross correlation coefficient -* for template segment. -* The returned value is signal-energy independant. -* This means, no matter how loud your signal is, equal -* signals will return 1.0, cross-phased signals -1.0. -* -* Complexity is very high due to many floating point -* operations and using squared root! -* -* This function fills parameter energy with the common -* energy of signal x and signal y. This might be useful -* for silence detection. -* -* Used formula: -* -* corr_len-1 -* ---- -* \ (j+x)*(j+y) -* \ __________________ -* / -------------- -* / -/ (j+x)�+(j+y)� -* ---- -* j=0 -* -* -* 23-JUL-04 S.Doehla initial version -* -******************************************************************************** -*/ -float normalized_cross_correlation_self( - const float *signal, - uint16_t x, - uint16_t y, - uint16_t corr_len, - uint16_t subsampling, - float *energy ); - -/* Splits the signal into segments and checks if all of them have very low energy. */ -bool isSilence( - const float *signal, - uint32_t len, - uint32_t segments ); -#else Word32 cross_correlation_subsampled_self_fx( const Word16 *signal, Word16 x, Word16 y, @@ -181,5 +68,4 @@ Word32 cross_correlation_self_fx( const Word16 *signal, Word8 isSilence_fx( const Word16 *signal, Word16 len, Word16 segments ); Word8 isSilence_ivas_fx( const Word16 *signal, Word16 q_sig, Word16 len, Word16 segments ); -#endif /* IVAS_FLOAT_FIXED */ #endif /* JBM_PCMDSP_SIMILARITYESTIMATION_H */ diff --git a/lib_dec/jbm_pcmdsp_window.c b/lib_dec/jbm_pcmdsp_window.c index 8df52a83e..d3820dddd 100644 --- a/lib_dec/jbm_pcmdsp_window.c +++ b/lib_dec/jbm_pcmdsp_window.c @@ -41,41 +41,12 @@ #include "jbm_pcmdsp_window.h" #include "cnst.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------* - * hannWindow() - * - * Generates a Hann window (cos-shaped) of length n - *-----------------------------------------------------------------------*/ - -void hannWindow( - uint16_t n, - float *w ) -{ - uint16_t i; - float arg; - - for ( i = 0; i < n / 2; i++ ) - { - arg = ( ( 2.0f * EVS_PI ) * i ) / (float) ( n ); - w[i] = (float) ( ( 1.0f - cos( arg ) ) / 2.0f ); - } - - for ( ; i < n; i++ ) - { - w[i] = 1.0f - w[i - n / 2]; - } - - return; -} -#endif /*-----------------------------------------------------------------------* * overlapAdd() * * Overlap/Add of two signal with a given window *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void overlapAdd( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word16 n, Word16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin, Word16 hannIncrementor ) { Word32 fdOutVal, fdInVal; @@ -102,90 +73,7 @@ void overlapAdd( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word1 } } -#else -void overlapAdd( - const float *fadeOut, - const float *fadeIn, - float *out, - uint16_t n, - uint16_t nChannels, - const float *fadeOutWin, - const float *fadeInWin ) -{ - float fdOutVal, fdInVal; - int16_t i, j, hannIter; - float combinedVal; - - for ( j = 0; j < nChannels; j++ ) - { - /* reset Hann window iterator to beginning (both channels use same window) */ - hannIter = 0; - for ( i = j; i < n; i += nChannels ) - { - fdOutVal = fadeOut[i] * fadeOutWin[hannIter]; - fdInVal = fadeIn[i] * fadeInWin[hannIter]; - /* round combinedVal value (taking care of sign) */ - combinedVal = fdInVal + fdOutVal; - out[i] = combinedVal; - hannIter++; - } - } - - return; -} - -void overlapAddEvs( - const float *fadeOut, - const float *fadeIn, - float *out, - uint16_t n, - uint16_t nChannels, - const float *fadeOutWin, - const float *fadeInWin ) -{ - float fdOutVal, fdInVal; - int16_t i, j, hannIter; - float combinedVal; - - for ( j = 0; j < nChannels; j++ ) - { - /* reset Hann window iterator to beginning (both channels use same window) */ - hannIter = 0; - for ( i = j; i < n; i += nChannels ) - { - fdOutVal = fadeOut[i] * fadeOutWin[hannIter]; - fdInVal = fadeIn[i] * fadeInWin[hannIter]; - /* round combinedVal value (taking care of sign) */ - - combinedVal = floorf( ( fdInVal + fdOutVal ) + 0.5f ); - if ( fdInVal + fdOutVal < 0.0 ) - { - combinedVal = ceilf( ( fdInVal + fdOutVal ) - 0.5f ); - } - - /* saturate value */ - if ( combinedVal > MAX16B_FLT ) - { - combinedVal = MAX16B_FLT; - } - else if ( combinedVal < MIN16B_FLT ) - { - combinedVal = MIN16B_FLT; - } - - out[i] = combinedVal; - - hannIter++; - } - } - - return; -} - -#endif - -#ifdef IVAS_FLOAT_FIXED void overlapAdd_fx( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word16 n, Word16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin ) { Word32 fdOutVal, fdInVal; @@ -249,4 +137,3 @@ void overlapAddEvs_fx( return; } -#endif diff --git a/lib_dec/jbm_pcmdsp_window.h b/lib_dec/jbm_pcmdsp_window.h index 9a20fdab2..9102e027f 100644 --- a/lib_dec/jbm_pcmdsp_window.h +++ b/lib_dec/jbm_pcmdsp_window.h @@ -62,11 +62,6 @@ void hannWindow( uint16_t n, float *w ); * @param[in] nChannels number of channels * @param[in] fadeOutWin window for fade out * @param[in] fadeInWin window for fade in */ -#ifndef IVAS_FLOAT_FIXED -void overlapAdd( const float *fadeOut, const float *fadeIn, float *out, uint16_t n, uint16_t nChannels, const float *fadeOutWin, const float *fadeInWin ); -void overlapAddEvs( const float *fadeOut, const float *fadeIn, float *out, uint16_t n, uint16_t nChannels, const float *fadeOutWin, const float *fadeInWin ); - -#else void overlapAdd( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word16 n, Word16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin, Word16 hannIncrementor ); void overlapAdd_fx( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word16 n, Word16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin ); @@ -74,5 +69,4 @@ void overlapAdd_fx( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Wo void overlapAdd_fx( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, Word16 n, Word16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin ); void overlapAddEvs_fx( const Word16 *fadeOut, const Word16 *fadeIn, Word16 *out, UWord16 n, UWord16 nChannels, const Word16 *fadeOutWin, const Word16 *fadeInWin ); -#endif /* IVAS_FLOAT_FIXED */ #endif /* JBM_PCMDSP_WINDOW_H */ diff --git a/lib_dec/lead_deindexing.c b/lib_dec/lead_deindexing.c index b21446a5c..dbe4a43e8 100644 --- a/lib_dec/lead_deindexing.c +++ b/lib_dec/lead_deindexing.c @@ -45,237 +45,3 @@ /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void fcb_decode_pos( const int16_t index, int16_t pos_vector[], const int16_t pulse_num, const int16_t pos_num ); - - -/*-------------------------------------------------------------------* - * re8_decode_base_index - * - * Decode RE8 base index - *-------------------------------------------------------------------*/ - -void re8_decode_base_index( - const int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ - uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ - int16_t *x /* o : point in RE8 (8-dimensional integer vector) */ -) -{ - int16_t i, j, k1, l, m, m1, m2; - int16_t setor_8p_temp[8], setor_8p_temp_1[8], setor_8p_temp_2[8]; - int16_t sign_8p; - int16_t code_level; - const int16_t *a1, *a2; - int16_t ka; - uint16_t offset; - int16_t code_index; - int16_t element_a10, element_a11, element_a12; - - set_s( setor_8p_temp_2, 0, 8 ); - - element_a11 = 0, - element_a12 = 0; - if ( n < 2 ) - { - for ( i = 0; i < 8; i++ ) - { - x[i] = 0; - } - } - else - { - if ( I > 65519L ) - { - I = 0; - } - /*-------------------------------------------------------------------* - * search for the identifier ka of the absolute leader (table-lookup) - * Q2 is a subset of Q3 - the two cases are considered in the same branch - *-------------------------------------------------------------------*/ - if ( n <= 3 ) - { - for ( i = 1; i < NB_LDQ3; i++ ) - { - if ( I < (int32_t) II3[i] ) - { - break; - } - } - ka = AA3[i - 1]; - } - else - { - for ( i = 1; i < NB_LDQ4; i++ ) - { - if ( I < (int32_t) II4[i] ) - { - break; - } - } - ka = AA4[i - 1]; - } - - /*-------------------------------------------------------* - * decode - *-------------------------------------------------------*/ - - a1 = vals_a[ka]; - a2 = vals_q[ka]; - k1 = a2[0]; - code_level = a2[1]; - - offset = Is[ka]; - code_index = I - offset; - - sign_8p = code_index & ( ( 1 << k1 ) - 1 ); - - code_index = code_index >> k1; - - m = 0; - m1 = 0; - m2 = 0; - - element_a10 = a1[0]; - switch ( code_level ) - { - case 4: - - m2 = 1; /*a2[4];*/ - i = code_index & 1; - if ( i == 0 ) - setor_8p_temp_2[0] = 0; - else - setor_8p_temp_2[0] = 1; - code_index = code_index >> 1; - /* FALLTHRU */ - case 3: - - m = a2[2]; - m1 = a2[3]; - l = select_table22[m1][m]; - j = ( code_index * mult_avq_tab[l] ) >> shift_avq_tab[l]; - code_index = code_index - j * l; - fcb_decode_pos( code_index, setor_8p_temp_1, m, m1 ); - code_index = j; - element_a12 = a1[2]; - /* FALLTHRU */ - case 2: - - m = a2[2]; - fcb_decode_pos( code_index, setor_8p_temp, 8, m ); - element_a11 = a1[1]; - } - - for ( i = 0; i < 8; i++ ) - { - x[i] = element_a10; - } - - for ( i = 0; i < m; i++ ) - { - x[setor_8p_temp[i]] = element_a11; - } - - for ( i = 0; i < m1; i++ ) - { - x[setor_8p_temp[setor_8p_temp_1[i]]] = element_a12; - } - - for ( i = 0; i < m2; i++ ) - { - x[setor_8p_temp[setor_8p_temp_1[setor_8p_temp_2[0]]]] = 6; - } - - /*--------------------------------------------------------------------* - * add the sign of all elemnt ( except the last one in some case ) - *--------------------------------------------------------------------*/ - m1 = k1 - 1; - m2 = 8; - l = 1; - for ( i = 0; i < 8; i++ ) - { - l *= x[i]; - } - /* if the signs are constrained and all components are non-zero */ - if ( ( k1 == 7 ) && ( l > 0 ) ) - { - m2 = 7; - } - for ( i = 0; i < m2; i++ ) - { - if ( x[i] != 0 ) - { - if ( ( sign_8p >> m1 ) & 1 ) - { - x[i] *= -1; - } - m1--; - } - } - - /*--------------------------------------------------------------------* - * recover the sign of last element if needed - *--------------------------------------------------------------------*/ - if ( k1 == 7 ) - { - m1 = 0; - - for ( i = 0; i < 8; i++ ) - { - m1 += x[i]; - } - if ( m1 & 3 ) - { - x[7] *= -1; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * fcb_decode_pos - * - * base function for decoding position index - *-------------------------------------------------------------------*/ - -static void fcb_decode_pos( - const int16_t index, /* i : Index to decoder */ - int16_t pos_vector[], /* o : Position vector */ - const int16_t pulse_num, /* i : Number of pulses */ - const int16_t pos_num /* i : Number of positions */ -) -{ - int16_t i, k, l; - int16_t temp1, temp2; - const int16_t *select_table23, *select_table24; - - k = index; - l = 0; - temp1 = pos_num; - temp2 = pulse_num + 1; - - for ( i = 0; i < pos_num - 1; i++ ) - { - select_table23 = select_table22[temp1]; - select_table24 = &select_table23[pulse_num - l]; - - k = *select_table24 - k; - - while ( k <= ( *select_table24-- ) ) - { - l++; - } - k = select_table23[temp2 - l] - k; - - pos_vector[i] = l - 1; - temp1--; - } - - pos_vector[i] = l + k; - - return; -} -#endif diff --git a/lib_dec/lead_deindexing_fx.c b/lib_dec/lead_deindexing_fx.c index 4c13ee392..786e0c276 100644 --- a/lib_dec/lead_deindexing_fx.c +++ b/lib_dec/lead_deindexing_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" #include "rom_dec.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local function prototype *-------------------------------------------------------------------*/ @@ -294,4 +293,3 @@ static void fcb_decode_pos_fx( pos_vector[i] = add( l, k ); move16(); } -#endif diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index b3c3cf37e..8e228facb 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -35,2964 +35,3 @@ #include #include "lib_dec.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -#include "ivas_cnst.h" -#include "ivas_prot.h" -#include "ivas_prot_rend.h" -#include "prot.h" -#include "prot_fx.h" -#include "jbm_jb4sb.h" -#include "jbm_pcmdsp_apa.h" -#include "jbm_pcmdsp_fifo.h" - -/*---------------------------------------------------------------------* - * Local structs - *---------------------------------------------------------------------*/ - -struct IVAS_DEC_VOIP -{ - uint16_t nSamplesFrame; /* Total number of samples in a frame (includes number of channels) */ - JB4_HANDLE hJBM; - uint16_t lastDecodedWasActive; - JB4_DATAUNIT_HANDLE hCurrentDataUnit; /* Points to the currently processed data unit */ - uint16_t *bs_conversion_buf; /* Buffer for bitstream conversion from packed to serial */ -#ifdef SUPPORT_JBM_TRACEFILE - IVAS_JBM_TRACE_DATA JbmTraceData; -#endif -}; - -typedef struct IVAS_DEC_VOIP IVAS_DEC_VOIP; - -struct IVAS_DEC -{ - IVAS_DEC_MODE mode; - uint16_t nSamplesFrame; - Decoder_Struct *st_ivas; - IVAS_DEC_VOIP *hVoIP; - bool hasBeenFedFirstGoodFrame; /* False on init. Gets set to true after first good frame has been fed into the decoder, but not decoded yet. */ - bool hasDecodedFirstGoodFrame; /* False on init. Gets set to true after first good frame has been decoded -> all bitstream information is known from that point on */ - bool isInitialized; - - int16_t bitstreamformat; /* Bitstream format flag (G.192/MIME/VOIP_G192_RTP/VOIP_RTPDUMP) */ - bool Opt_VOIP; /* flag indicating VOIP mode with JBM */ - int16_t tsm_scale; /* scale for TSM operation */ - int16_t tsm_max_scaling; - float tsm_quality; - float *apaExecBuffer; /* Buffer for APA scaling */ - PCMDSP_APA_HANDLE hTimeScaler; - bool needNewFrame; - bool hasBeenFedFrame; - bool updateOrientation; - uint16_t nSamplesAvailableNext; - int16_t nSamplesRendered; - int16_t nTransportChannelsOld; - int16_t amrwb_rfc4867_flag; /* MIME from rfc4867 is used */ - int16_t sdp_hf_only; /* RTP payload format parameter: only Header-Full format without zero padding for size collision avoidance */ - int16_t prev_ft_speech; /* RXDTX handler: previous frametype flag for G.192 format AMRWB SID_FIRST detection */ - int16_t CNG; /* RXDTX handler: CNG=1, nonCNG=0 */ -}; - - -/*---------------------------------------------------------------------* - * Local function declarations - *---------------------------------------------------------------------*/ - -static void IVAS_DEC_Close_VoIP( IVAS_DEC_VOIP *hVoIP ); -#ifdef SUPPORT_JBM_TRACEFILE -static void store_JbmData( IVAS_DEC_VOIP *hVoIP, JB4_DATAUNIT_HANDLE dataUnit, const uint32_t systemTimestamp_ms, const uint16_t extBufferedSamples, const int32_t output_Fs ); -#endif -static ivas_error evs_dec_main( Decoder_Struct *st_ivas, const int16_t nOutSamples, float *floatBuf, int16_t *pcmBuf ); -static ivas_error input_format_API_to_internal( IVAS_DEC_INPUT_FORMAT input_format, int16_t *bitstream_format_internal, int16_t *sdp_hf_only, const bool is_voip_enabled ); -static void init_decoder_config( DECODER_CONFIG_HANDLE hDecoderConfig ); -static ivas_error IVAS_DEC_VoIP_reconfigure( IVAS_DEC_HANDLE hIvasDec, const uint16_t nTransportChannels, const uint16_t l_ts ); -static ivas_error IVAS_DEC_Setup( IVAS_DEC_HANDLE hIvasDec, uint16_t *nTcBufferGranularity, uint8_t *nTransportChannels, uint8_t *nOutChannels, uint16_t *nSamplesRendered, int16_t *data ); -static ivas_error IVAS_DEC_GetTcSamples( IVAS_DEC_HANDLE hIvasDec, float *pcmBuf, int16_t *nOutSamples ); -static ivas_error IVAS_DEC_RendererFeedTcSamples( IVAS_DEC_HANDLE hIvasDec, const int16_t nSamplesForRendering, int16_t *nSamplesResidual, float *pcmBuf ); -static ivas_error IVAS_DEC_GetRenderedSamples( IVAS_DEC_HANDLE hIvasDec, const uint16_t nSamplesForRendering, uint16_t *nSamplesRendered, uint16_t *nSamplesAvailableNext, int16_t *pcmBuf ); -static ivas_error IVAS_DEC_GetBufferedNumberOfSamples( IVAS_DEC_HANDLE hIvasDec, int16_t *nSamplesBuffered ); -static int16_t get_render_frame_size_ms( IVAS_RENDER_FRAMESIZE render_framesize ); - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Open() - * - * Open IVAS decoder - *---------------------------------------------------------------------*/ - -/* may return an error but may still have allocated memory - thus run Close also in case of error to release memory */ -ivas_error IVAS_DEC_Open( - IVAS_DEC_HANDLE *phIvasDec, /* i/o: pointer to an IVAS decoder handle to be opened */ - const IVAS_DEC_MODE mode /* i : compatibility mode (EVS or IVAS) */ -) -{ - IVAS_DEC_HANDLE hIvasDec; - Decoder_Struct *st_ivas; - - if ( phIvasDec == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /*-----------------------------------------------------------------* - * Allocate and initialize IVAS application decoder handle - *-----------------------------------------------------------------*/ - - if ( ( *phIvasDec = (IVAS_DEC_HANDLE) malloc( sizeof( struct IVAS_DEC ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder handle" ); - } - hIvasDec = *phIvasDec; - hIvasDec->hVoIP = NULL; - hIvasDec->apaExecBuffer = NULL; - hIvasDec->hTimeScaler = NULL; - hIvasDec->tsm_scale = 100; - hIvasDec->tsm_max_scaling = 0; - hIvasDec->tsm_quality = 1.0f; - hIvasDec->needNewFrame = false; - hIvasDec->nTransportChannelsOld = 0; - hIvasDec->nSamplesAvailableNext = 0; - hIvasDec->nSamplesRendered = 0; - hIvasDec->nSamplesFrame = 0; - hIvasDec->hasBeenFedFrame = false; - hIvasDec->hasBeenFedFirstGoodFrame = false; - hIvasDec->hasDecodedFirstGoodFrame = false; - hIvasDec->isInitialized = false; - hIvasDec->updateOrientation = false; - - hIvasDec->mode = mode; - - hIvasDec->bitstreamformat = G192; - hIvasDec->Opt_VOIP = 0; - hIvasDec->amrwb_rfc4867_flag = -1; - hIvasDec->prev_ft_speech = 1; /* RXDTX handler previous frametype flag for G.192 format AMRWB SID_FIRST detection */ - hIvasDec->CNG = 0; /* RXDTX handler CNG = 1, no CNG = 0*/ - - /*-----------------------------------------------------------------* - * Initialize IVAS-codec decoder state - *-----------------------------------------------------------------*/ - - if ( ( hIvasDec->st_ivas = (Decoder_Struct *) malloc( sizeof( Decoder_Struct ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for IVAS decoder structure" ); - } - - if ( ( hIvasDec->st_ivas->hDecoderConfig = (DECODER_CONFIG_HANDLE) malloc( sizeof( DECODER_CONFIG ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for Decoder config structure" ); - } - - /*-----------------------------------------------------------------* - * Initialize IVAS-codec decoder state - *-----------------------------------------------------------------*/ - - st_ivas = hIvasDec->st_ivas; - - /* initialize Decoder Config. handle */ - init_decoder_config( hIvasDec->st_ivas->hDecoderConfig ); - - /* initialize pointers to handles to NULL */ - ivas_initialize_handles_dec( st_ivas ); - - /* set high-level parameters */ - if ( mode == IVAS_DEC_MODE_EVS ) - { - st_ivas->codec_mode = 0; /* unknown before first frame */ - st_ivas->element_mode_init = EVS_MONO; - st_ivas->ivas_format = MONO_FORMAT; - st_ivas->transport_config = IVAS_AUDIO_CONFIG_INVALID; - st_ivas->intern_config = IVAS_AUDIO_CONFIG_INVALID; - st_ivas->writeFECoffset = 0; - hIvasDec->hasDecodedFirstGoodFrame = true; /* Functionality to suppress output for initial lost frames is disabled in EVS operation */ - - return IVAS_ERR_OK; - } - else if ( mode == IVAS_DEC_MODE_IVAS ) - { - st_ivas->codec_mode = 0; /* unknown before first frame */ - st_ivas->element_mode_init = -1; - st_ivas->ivas_format = UNDEFINED_FORMAT; - st_ivas->transport_config = IVAS_AUDIO_CONFIG_INVALID; - st_ivas->intern_config = IVAS_AUDIO_CONFIG_INVALID; - st_ivas->renderer_type = RENDERER_DISABLE; - st_ivas->ini_frame = 0; - st_ivas->ini_active_frame = 0; - st_ivas->writeFECoffset = 0; - - st_ivas->ism_mode = ISM_MODE_NONE; - st_ivas->mc_mode = MC_MODE_NONE; - - st_ivas->sba_order = 0; - st_ivas->sba_planar = 0; - st_ivas->sba_analysis_order = 0; - - return IVAS_ERR_OK; - } - - return IVAS_ERR_WRONG_PARAMS; -} - - -/*---------------------------------------------------------------------* - * init_decoder_config() - * - * Initialize Decoder Config. handle - *---------------------------------------------------------------------*/ - -static void init_decoder_config( - DECODER_CONFIG_HANDLE hDecoderConfig /* i/o: configuration structure */ -) -{ - hDecoderConfig->Opt_AMR_WB = 0; - hDecoderConfig->nchan_out = 1; - hDecoderConfig->output_config = IVAS_AUDIO_CONFIG_INVALID; - hDecoderConfig->Opt_LsCustom = 0; - hDecoderConfig->Opt_HRTF_binary = 0; - hDecoderConfig->Opt_Headrotation = 0; - hDecoderConfig->Opt_RendConfigCustom = 0; - hDecoderConfig->orientation_tracking = IVAS_HEAD_ORIENT_TRK_NONE; - hDecoderConfig->Opt_non_diegetic_pan = 0; - hDecoderConfig->non_diegetic_pan_gain = 0; - hDecoderConfig->Opt_tsm = 0; - hDecoderConfig->Opt_delay_comp = 0; - hDecoderConfig->Opt_ExternalOrientation = 0; - hDecoderConfig->Opt_dpid_on = 0; - hDecoderConfig->Opt_aeid_on = 0; - - return; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Close( ) - * - * - *---------------------------------------------------------------------*/ - -void IVAS_DEC_Close( - IVAS_DEC_HANDLE *phIvasDec /* i/o: pointer to IVAS decoder handle */ -) -{ - /* Free all memory */ - if ( phIvasDec == NULL || *phIvasDec == NULL ) - { - return; - } - - if ( ( *phIvasDec )->hVoIP ) - { - IVAS_DEC_Close_VoIP( ( *phIvasDec )->hVoIP ); - ( *phIvasDec )->hVoIP = NULL; - } - - if ( ( *phIvasDec )->st_ivas ) - { - ivas_destroy_dec( ( *phIvasDec )->st_ivas ); - ( *phIvasDec )->st_ivas = NULL; - } - - apa_exit( &( *phIvasDec )->hTimeScaler ); - - if ( ( *phIvasDec )->apaExecBuffer != NULL ) - { - free( ( *phIvasDec )->apaExecBuffer ); - } - free( *phIvasDec ); - *phIvasDec = NULL; - phIvasDec = NULL; - - return; -} - - -/*---------------------------------------------------------------------* - * mapIvasFormat( ) - * - * - *---------------------------------------------------------------------*/ - -static IVAS_DEC_BS_FORMAT mapIvasFormat( - const IVAS_FORMAT ivas_format ) -{ - switch ( ivas_format ) - { - case MONO_FORMAT: - return IVAS_DEC_BS_MONO; - case STEREO_FORMAT: - return IVAS_DEC_BS_STEREO; - case ISM_FORMAT: - return IVAS_DEC_BS_OBJ; - case MC_FORMAT: - return IVAS_DEC_BS_MC; - case SBA_FORMAT: - return IVAS_DEC_BS_SBA; - case SBA_ISM_FORMAT: - return IVAS_DEC_BS_SBA_ISM; - case MASA_FORMAT: - return IVAS_DEC_BS_MASA; - case MASA_ISM_FORMAT: - return IVAS_DEC_BS_MASA_ISM; - default: - break; - } - - return IVAS_DEC_BS_UNKOWN; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Configure( ) - * - * Decoder configuration - * legacy code behavior: if no output format set, then it's EVS mono - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_Configure( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const uint32_t sampleRate, /* i : output sampling frequency */ - const AUDIO_CONFIG outputConfig, /* i : output configuration */ - const int16_t tsmEnabled, /* i : enable time scale modification */ - const IVAS_RENDER_FRAMESIZE renderFramesize, /* i : rendering frame size */ - const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ - const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ - const int16_t enableHeadRotation, /* i : enable head rotation for binaural output */ - const int16_t enableExternalOrientation, /* i : enable external orientations */ - const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ - const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ - const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ - const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ - const int16_t Opt_dpid_on, /* i : enable directivity pattern option */ - const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ - const int16_t delayCompensationEnabled /* i : enable delay compensation */ -) -{ - Decoder_Struct *st_ivas; - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - - error = IVAS_ERR_OK; - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( sampleRate != 8000 && sampleRate != 16000 && sampleRate != 32000 && sampleRate != 48000 ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && !( ( outputConfig == IVAS_AUDIO_CONFIG_MONO && Opt_non_diegetic_pan == 0 ) || - ( outputConfig == IVAS_AUDIO_CONFIG_STEREO && Opt_non_diegetic_pan == 1 ) ) ) - { - return IVAS_ERR_WRONG_MODE; - } - - st_ivas = hIvasDec->st_ivas; - - hDecoderConfig = st_ivas->hDecoderConfig; - - hDecoderConfig->output_config = outputConfig; - if ( hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_INVALID ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hDecoderConfig->output_Fs = sampleRate; - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - st_ivas->element_mode_init = EVS_MONO; - hDecoderConfig->nchan_out = 1; - } - - if ( outputConfig != IVAS_AUDIO_CONFIG_EXTERNAL && outputConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - hDecoderConfig->nchan_out = audioCfg2channels( hDecoderConfig->output_config ); - } - - hDecoderConfig->Opt_tsm = tsmEnabled; - hDecoderConfig->Opt_LsCustom = customLsOutputEnabled; - hDecoderConfig->Opt_Headrotation = enableHeadRotation; - hDecoderConfig->orientation_tracking = orientation_tracking; - hDecoderConfig->Opt_HRTF_binary = hrtfReaderEnabled; - hDecoderConfig->Opt_RendConfigCustom = renderConfigEnabled; - hDecoderConfig->Opt_non_diegetic_pan = Opt_non_diegetic_pan; - hDecoderConfig->non_diegetic_pan_gain = non_diegetic_pan_gain; - hDecoderConfig->Opt_delay_comp = delayCompensationEnabled; - hDecoderConfig->Opt_ExternalOrientation = enableExternalOrientation; - hDecoderConfig->Opt_dpid_on = Opt_dpid_on; - hDecoderConfig->Opt_aeid_on = acousticEnvironmentId != 65535 ? TRUE : FALSE; - - if ( renderFramesize == IVAS_RENDER_FRAMESIZE_UNKNOWN ) - { - return IVAS_ERR_WRONG_PARAMS; - } - if ( outputConfig == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - hDecoderConfig->render_framesize = IVAS_RENDER_FRAMESIZE_20MS; - } - else - { - hDecoderConfig->render_framesize = renderFramesize; - } - - - /* Set decoder parameters to initial values */ - if ( ( error = ivas_init_decoder_front( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - hIvasDec->st_ivas->ivas_format = MONO_FORMAT; - } - - hIvasDec->nSamplesFrame = (uint16_t) ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - hIvasDec->nSamplesAvailableNext = 0; - hIvasDec->nSamplesRendered = 0; - hIvasDec->tsm_scale = 100; - hIvasDec->tsm_max_scaling = 0; - hIvasDec->tsm_quality = 1.0f; - - return error; -} - - -/*---------------------------------------------------------------------* - * get_render_framesize_ms( ) - * - * Get the 5ms flag - *---------------------------------------------------------------------*/ - -int16_t get_render_frame_size_ms( - const IVAS_RENDER_FRAMESIZE render_framesize ) -{ - return (int16_t) ( render_framesize * ( 1000 / ( FRAMES_PER_SEC * IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ) ); -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_SetRenderFramesize( ) - * - * Get the 5ms flag - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_SetRenderFramesize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_FRAMESIZE render_framesize /* i : render framesize */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hDecoderConfig == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hIvasDec->st_ivas->hDecoderConfig->render_framesize = render_framesize; - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetGetRenderFramesize( ) - * - * Get the 5ms flag - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetRenderFramesize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_RENDER_FRAMESIZE *render_framesize /* o : render framesize */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || render_framesize == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *render_framesize = hIvasDec->st_ivas->hDecoderConfig->render_framesize; - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetGetRenderFramesizeSamples( ) - * - * Get render framesize in samples - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetRenderFramesizeSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *render_framesize /* o : render framesize in samples */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || render_framesize == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *render_framesize = (int16_t) ( hIvasDec->st_ivas->hDecoderConfig->output_Fs * hIvasDec->st_ivas->hDecoderConfig->render_framesize / ( FRAMES_PER_SEC * IVAS_MAX_PARAM_SPATIAL_SUBFRAMES ) ); - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetGetRenderFramesizeMs( ) - * - * Get render framesize in milliseconds - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetRenderFramesizeMs( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint32_t *render_framesize /* o : render framesize in samples */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || render_framesize == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *render_framesize = get_render_frame_size_ms( hIvasDec->st_ivas->hDecoderConfig->render_framesize ); - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetGetReferencesUpdateFrequency( ) - * - * Get update frequency of the reference vector/orientation - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetReferencesUpdateFrequency( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *update_frequency /* o : update frequency */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || update_frequency == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *update_frequency = (int16_t) ( IVAS_MAX_PARAM_SPATIAL_SUBFRAMES / hIvasDec->st_ivas->hDecoderConfig->render_framesize ); - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetGetNumOrientationSubframes( ) - * - * Get the number of subframes for head/ecernal orientation per render frame - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetNumOrientationSubframes( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *num_subframes /* o : render framesize */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || num_subframes == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *num_subframes = (int16_t) hIvasDec->st_ivas->hDecoderConfig->render_framesize; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_EnableVoIP( ) - * - * Intitialize JBM - * jbmSafetyMargin: allowed delay reserve in addition to network jitter - * to reduce late-loss, default: 60 [milliseconds] - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_EnableVoIP( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t jbmSafetyMargin, /* i : allowed delay reserve for JBM, in milliseconds */ - const IVAS_DEC_INPUT_FORMAT inputFormat /* i : format of the input bitstream */ -) -{ - DECODER_CONFIG_HANDLE hDecoderConfig; - ivas_error error; - - error = IVAS_ERR_OK; - - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hDecoderConfig = hIvasDec->st_ivas->hDecoderConfig; - - hIvasDec->Opt_VOIP = 1; - hDecoderConfig->Opt_tsm = 1; - if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - hDecoderConfig->nchan_out = audioCfg2channels( hDecoderConfig->output_config ); - } - - if ( ( error = input_format_API_to_internal( inputFormat, &hIvasDec->bitstreamformat, &hIvasDec->sdp_hf_only, true ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( hIvasDec->hVoIP = malloc( sizeof( IVAS_DEC_VOIP ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); - } - - hIvasDec->hVoIP->lastDecodedWasActive = 0; - hIvasDec->hVoIP->hCurrentDataUnit = NULL; - hIvasDec->hVoIP->nSamplesFrame = (uint16_t) ( hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - -#define WMC_TOOL_SKIP - /* Bitstream conversion is not counted towards complexity and memory usage */ - hIvasDec->hVoIP->bs_conversion_buf = malloc( sizeof( uint16_t ) * ( MAX_BITS_PER_FRAME + 4 * 8 ) ); -#undef WMC_TOOL_SKIP - - if ( hIvasDec->hVoIP->bs_conversion_buf == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); - } - - /* initialize JBM */ - if ( ( error = JB4_Create( &hIvasDec->hVoIP->hJBM ) != IVAS_ERR_OK ) != IVAS_ERR_OK ) - { - return error; - } - - if ( JB4_Init( hIvasDec->hVoIP->hJBM, jbmSafetyMargin ) != 0 ) - { - return IVAS_ERR_FAILED_ALLOC; - } - - return error; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedFrame_Serial( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedFrame_Serial( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t *serial, /* i : buffer containing serial input bitstream. Each bit should be stored as a single uint16_t value */ - const uint16_t num_bits, /* i : number of bits in input bitstream */ - int16_t bfi /* i : bad frame indicator flag */ -) -{ - ivas_error error; - - if ( !hIvasDec->isInitialized ) - { - /* Once first frame is fed, finish initialization in EVS Mono. - * In IVAS mode, initialization is done in ivas_dec(). */ - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - if ( ( error = ivas_init_decoder( hIvasDec->st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hIvasDec->hVoIP != NULL && hIvasDec->hVoIP->hCurrentDataUnit != NULL ) - { - DEC_CORE_HANDLE st = hIvasDec->st_ivas->hSCE[0]->hCoreCoder[0]; - st->ini_frame = 0; - st->prev_use_partial_copy = 0; - hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = hIvasDec->hVoIP->hCurrentDataUnit->dataSize * FRAMES_PER_SEC; - } - else - { - hIvasDec->st_ivas->hDecoderConfig->ivas_total_brate = ACELP_8k00; - } - hIvasDec->isInitialized = true; - } - } - - if ( !bfi ) /* TODO(mcjbm): Is this ok for bfi == 2 (partial frame)? Is there enough info to fully configure decoder? */ - { - hIvasDec->hasBeenFedFirstGoodFrame = true; - } - - /* Update redundant frame information in EVS (pre- read indices) */ - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && hIvasDec->hVoIP != NULL && hIvasDec->hVoIP->hCurrentDataUnit != NULL ) - { - DEC_CORE_HANDLE st = hIvasDec->st_ivas->hSCE[0]->hCoreCoder[0]; - st->bit_stream = serial; - - if ( hIvasDec->hVoIP->hCurrentDataUnit->partial_frame || st->prev_use_partial_copy ) - { - st->next_coder_type = hIvasDec->hVoIP->hCurrentDataUnit->nextCoderType; - } - else - { - st->next_coder_type = INACTIVE; - } - - if ( hIvasDec->hVoIP->hCurrentDataUnit->partial_frame == 1 && bfi != 1 ) - { - bfi = 2; - } - } - - if ( ( error = read_indices( hIvasDec->st_ivas, serial, num_bits, &hIvasDec->prev_ft_speech, &hIvasDec->CNG, bfi ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Update redundant frame information in EVS (post- read indices) */ - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS && - hIvasDec->hVoIP != NULL && - hIvasDec->hVoIP->hCurrentDataUnit != NULL && - hIvasDec->hVoIP->hCurrentDataUnit->partial_frame != 0 ) - { - DEC_CORE_HANDLE st = hIvasDec->st_ivas->hSCE[0]->hCoreCoder[0]; - st->codec_mode = MODE2; - st->use_partial_copy = 1; - } - - hIvasDec->needNewFrame = false; - hIvasDec->hasBeenFedFrame = true; - hIvasDec->nSamplesRendered = 0; - hIvasDec->nSamplesAvailableNext = hIvasDec->nSamplesFrame; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetSamples( ) - * - * Main function to decode to PCM data - *---------------------------------------------------------------------*/ - - -ivas_error IVAS_DEC_GetSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesAsked, /* i : number of samples wanted by the caller */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - int16_t *nOutSamples, /* o : number of samples per channel written to output buffer */ - bool *needNewFrame /* o :indication that the decoder needs a new frame */ -) -{ - ivas_error error; - int16_t nOutSamplesElse, nSamplesToRender; - uint16_t nSamplesRendered, nSamplesRendered_loop, l_ts, nTimeScalerOutSamples; - uint8_t nTransportChannels, nOutChannels; - - nSamplesRendered = 0; - nOutChannels = 0; - nSamplesRendered_loop = 0; - l_ts = 0; - nTransportChannels = 0; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( hIvasDec->updateOrientation ) - { - /*----------------------------------------------------------------* - * Combine orientations - *----------------------------------------------------------------*/ - - if ( ( error = combine_external_and_head_orientations_dec( hIvasDec->st_ivas->hHeadTrackData, hIvasDec->st_ivas->hExtOrientationData, hIvasDec->st_ivas->hCombinedOrientationData ) ) != IVAS_ERR_OK ) - { - return error; - } - - - hIvasDec->updateOrientation = false; - } - - if ( !hIvasDec->hasBeenFedFrame && hIvasDec->nSamplesAvailableNext == 0 ) - { - /* no frame was fed, do nothing but ask for a frame */ - *needNewFrame = true; - *nOutSamples = 0; - hIvasDec->needNewFrame = true; - return IVAS_ERR_OK; - } - - /* check if we are still at the beginning with bad frames, put out zeroes, keep track of subframes */ - if ( !hIvasDec->isInitialized && hIvasDec->st_ivas->bfi ) - { - hIvasDec->hasBeenFedFrame = false; - set_s( pcmBuf, 0, hIvasDec->st_ivas->hDecoderConfig->nchan_out * nSamplesAsked ); - hIvasDec->nSamplesRendered += nSamplesAsked; - *nOutSamples = nSamplesAsked; - hIvasDec->nSamplesAvailableNext -= nSamplesAsked; - if ( hIvasDec->nSamplesAvailableNext == 0 ) - { - hIvasDec->needNewFrame = true; - *needNewFrame = true; - } - } - else - { - /* check if we need to run the setup function */ - if ( !hIvasDec->isInitialized || hIvasDec->hasBeenFedFrame ) - { - /* setup */ - - if ( ( error = IVAS_DEC_Setup( hIvasDec, &l_ts, &nTransportChannels, &nOutChannels, &nSamplesRendered_loop, pcmBuf + nSamplesRendered * nOutChannels ) ) != IVAS_ERR_OK ) - - { - return error; - } - } - { - /* check if we need to run the setup function, tc decoding and feeding the renderer */ - if ( !hIvasDec->isInitialized || hIvasDec->hasBeenFedFrame ) - { - int16_t nResidualSamples, nSamplesTcsScaled; - nSamplesRendered += nSamplesRendered_loop; - - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm && nTransportChannels != hIvasDec->nTransportChannelsOld ) - { - if ( ( error = IVAS_DEC_VoIP_reconfigure( hIvasDec, nTransportChannels, l_ts ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* IVAS decoder */ - if ( ( error = IVAS_DEC_GetTcSamples( hIvasDec, hIvasDec->apaExecBuffer, &nOutSamplesElse ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* JBM */ - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) - { - if ( apa_set_scale( hIvasDec->hTimeScaler, hIvasDec->tsm_scale ) != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - - if ( apa_exec( hIvasDec->hTimeScaler, hIvasDec->apaExecBuffer, hIvasDec->nSamplesFrame * nTransportChannels, (uint16_t) hIvasDec->tsm_max_scaling, hIvasDec->apaExecBuffer, &nTimeScalerOutSamples ) != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - - assert( nTimeScalerOutSamples <= APA_BUF ); - nSamplesTcsScaled = nTimeScalerOutSamples / nTransportChannels; - } - else - { - nSamplesTcsScaled = hIvasDec->nSamplesFrame; - } - - /* Feed decoded transport channels samples to the renderer */ - if ( ( error = IVAS_DEC_RendererFeedTcSamples( hIvasDec, nSamplesTcsScaled, &nResidualSamples, hIvasDec->apaExecBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) - { - /* feed residual samples to TSM for the next call */ - if ( apa_set_renderer_residual_samples( hIvasDec->hTimeScaler, (uint16_t) nResidualSamples ) != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - } - hIvasDec->hasBeenFedFrame = false; - } - - /* render IVAS frames directly to the output buffer */ - nSamplesToRender = nSamplesAsked - nSamplesRendered; - if ( ( error = IVAS_DEC_GetRenderedSamples( hIvasDec, nSamplesToRender, &nSamplesRendered_loop, &hIvasDec->nSamplesAvailableNext, pcmBuf + nSamplesRendered * nOutChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - nSamplesRendered += nSamplesRendered_loop; - nSamplesToRender -= nSamplesRendered_loop; - if ( hIvasDec->nSamplesAvailableNext == 0 ) - { - *needNewFrame = true; - hIvasDec->needNewFrame = true; - } - else - { - *needNewFrame = false; - } - } - } - - *nOutSamples = nSamplesRendered; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Setup( ) - * - * - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_Setup( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t *nTcBufferGranularity, /* o : granularity of the TC Buffer */ - uint8_t *nTransportChannels, /* o : number of decoded transport PCM channels */ - uint8_t *nOutChannels, /* o : number of decoded out channels (PCM or CLDFB) */ - uint16_t *nSamplesRendered, /* o : number of samples flushed from the last frame */ - int16_t *data /* o : output synthesis signal */ -) -{ - ivas_error error; - - *nSamplesRendered = 0; - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - if ( hIvasDec->st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX ) - { - *nTransportChannels = MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN; - *nOutChannels = MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN; - } - else - { - *nTransportChannels = 1; - *nOutChannels = 1; - } - } - else - { - Decoder_Struct *st_ivas; - - st_ivas = hIvasDec->st_ivas; - - /*----------------------------------------------------------------* - * IVAS decoder setup - * - read IVAS format signaling - * - read IVAS format specific signaling - * - initialize decoder in the first frame based on IVAS format and number of transport channels - * - reconfigure the decoder when the number of TC or IVAS total bitrate change - *----------------------------------------------------------------*/ - - if ( st_ivas->bfi == 0 ) - { - if ( ( error = ivas_dec_setup( st_ivas, nSamplesRendered, data ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - *nTransportChannels = (uint8_t) st_ivas->hTcBuffer->nchan_transport_jbm; - *nTcBufferGranularity = (uint16_t) st_ivas->hTcBuffer->n_samples_granularity; - *nOutChannels = (uint8_t) st_ivas->hDecoderConfig->nchan_out; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetTcSamples( ) - * - * Main function to decode to PCM data of the transport channels - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_GetTcSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - float *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - int16_t *nOutSamples /* o : number of samples per channel written to output buffer */ -) -{ - Decoder_Struct *st_ivas; - ivas_error error; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - st_ivas = hIvasDec->st_ivas; - - *nOutSamples = (int16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC ); - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - if ( ( error = evs_dec_main( st_ivas, *nOutSamples, pcmBuf, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( hIvasDec->mode == IVAS_DEC_MODE_IVAS ) - { - /* run the main IVAS decoding routine */ - if ( ( error = ivas_jbm_dec_tc( st_ivas, pcmBuf ) ) != IVAS_ERR_OK ) - { - return error; - } - - hIvasDec->isInitialized = true; /* Initialization done in ivas_dec() */ - } - - if ( hIvasDec->hasBeenFedFirstGoodFrame ) - { - hIvasDec->hasDecodedFirstGoodFrame = true; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Rendered_FeedTcSamples( ) - * - * Feed decoded transport channels samples to the renderer - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_RendererFeedTcSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesForRendering, /* i : number of TC samples wanted from the renderer */ - int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call */ - float *pcmBuf /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ -) -{ - Decoder_Struct *st_ivas; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - st_ivas = hIvasDec->st_ivas; - - /* feed the TCs to the IVAS renderer */ - ivas_jbm_dec_feed_tc_to_renderer( st_ivas, nSamplesForRendering, nSamplesResidual, pcmBuf ); - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetRenderedSamples( ) - * - * Main function to render the transport channels to PCM output data - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_GetRenderedSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesForRendering, /* i : number of TC samples wanted from the renderer */ - uint16_t *nSamplesRendered, /* o : number of samples rendered */ - uint16_t *nSamplesAvailableNext, /* o : number of samples still available in the renerer pipeline */ - int16_t *pcmBuf ) -{ - Decoder_Struct *st_ivas; - ivas_error error; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - st_ivas = hIvasDec->st_ivas; - - /* run the main IVAS decoding routine */ - error = ivas_jbm_dec_render( st_ivas, nSamplesForRendering, nSamplesRendered, nSamplesAvailableNext, pcmBuf ); - - return error; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetBufferedNumberOfSamples( ) - * - * Returns the number of objects available in the decoded bitstream - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_GetBufferedNumberOfSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *nSamplesBuffered /* o : number of samples still buffered */ -) -{ - *nSamplesBuffered = 0; - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* check if the TC buffer already exists, otherweise nothing is buffered anyway */ - if ( hIvasDec->st_ivas->hTcBuffer != NULL ) - { - *nSamplesBuffered = hIvasDec->st_ivas->hTcBuffer->n_samples_buffered - hIvasDec->st_ivas->hTcBuffer->n_samples_rendered; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetNumObjects( ) - * - * Returns the number of objects available in the decoded bitstream - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetNumObjects( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t *numObjects /* o : number of objects for which the decoder has been configured */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - if ( hIvasDec->st_ivas->ivas_format == ISM_FORMAT || hIvasDec->st_ivas->ivas_format == SBA_ISM_FORMAT || hIvasDec->st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - *numObjects = hIvasDec->st_ivas->nchan_ism; - } - else - { - *numObjects = 0; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetFormat( ) - * - * Returns the format of currently decoded bitstream. - * Note: bitstream format is only known after the first (good) frame has been decoded. - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetFormat( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_BS_FORMAT *format /* o : format detected from bitstream fed to the decoder */ -) -{ - if ( hIvasDec->hasDecodedFirstGoodFrame ) - { - *format = mapIvasFormat( hIvasDec->st_ivas->ivas_format ); - } - else - { - *format = IVAS_DEC_BS_UNKOWN; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * getInputBufferSize() - * - * - *---------------------------------------------------------------------*/ - -static int16_t getOutputBufferSize( - const Decoder_Struct *st_ivas /* i : IVAS decoder handle */ -) -{ - if ( st_ivas->hDecoderConfig == NULL ) - { - return -1; - } - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * ( IVAS_MAX_OUTPUT_CHANNELS + IVAS_MAX_NUM_OBJECTS ) / FRAMES_PER_SEC ); - } - else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( st_ivas->hLsSetupCustom == NULL ) - { - return -1; - } - - return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * ( st_ivas->hLsSetupCustom->num_spk + st_ivas->hLsSetupCustom->num_lfe ) / FRAMES_PER_SEC ); - } - else - { - return (int16_t) ( st_ivas->hDecoderConfig->output_Fs * st_ivas->hDecoderConfig->nchan_out / FRAMES_PER_SEC ); - } -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetOutputBufferSize() - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetOutputBufferSize( - const IVAS_DEC_HANDLE hIvasDec, /* i : IVAS decoder handle */ - int16_t *outputBufferSize /* o : total number of samples expected in the output buffer for current decoder configuration */ -) -{ - if ( outputBufferSize == NULL || hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *outputBufferSize = getOutputBufferSize( hIvasDec->st_ivas ); - - if ( *outputBufferSize == -1 ) - { - return IVAS_ERR_INVALID_OUTPUT_BUFFER_SIZE; - } - else - { - return IVAS_ERR_OK; - } -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetNumOutputChannels( ) - * - * Returns number of output channels - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetNumOutputChannels( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *numOutputChannels /* o : number of PCM output channels */ -) -{ - if ( hIvasDec->hasDecodedFirstGoodFrame ) - { - *numOutputChannels = hIvasDec->st_ivas->hDecoderConfig->nchan_out; - } - else - { - *numOutputChannels = 0; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetObjectMetadata( ) - * - * Get metadata of one object decoded in the most recent frame - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetObjectMetadata( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ - const uint16_t zero_flag, /* i : if this flag is enabled, this function outputs a zero-initialized metadata struct */ - const uint16_t objectIdx /* i : index of the queried object */ -) -{ - Decoder_Struct *st_ivas; - ISM_METADATA_HANDLE hIsmMeta; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - st_ivas = hIvasDec->st_ivas; - if ( st_ivas->ivas_format != ISM_FORMAT && st_ivas->ivas_format != MASA_ISM_FORMAT && st_ivas->ivas_format != SBA_ISM_FORMAT ) - { - return IVAS_ERR_WRONG_MODE; - } - - if ( objectIdx >= st_ivas->nchan_ism ) - { - return IVAS_ERR_INVALID_INDEX; - } - - hIsmMeta = st_ivas->hIsmMetaData[objectIdx]; - - if ( hIsmMeta == NULL || zero_flag ) - { - metadata->azimuth = 0.f; - metadata->elevation = 0.f; - metadata->radius = 1.f; - metadata->spread = 0.f; - metadata->gainFactor = 1.f; - metadata->yaw = 0.f; - metadata->pitch = 0.f; - metadata->non_diegetic_flag = 0; - } - else - { - metadata->azimuth = hIsmMeta->azimuth; - metadata->elevation = hIsmMeta->elevation; - metadata->radius = hIsmMeta->radius; - metadata->yaw = hIsmMeta->yaw; - metadata->pitch = hIsmMeta->pitch; - metadata->spread = 0.f; - metadata->gainFactor = 1.f; - metadata->non_diegetic_flag = hIsmMeta->non_diegetic_flag; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetMasaMetadata( ) - * - * Get metadata of the most recently decoded MASA frame - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetMasaMetadata( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to metadata from the most recently decoded frame */ - const uint8_t getFromJbmBuffer /* i : get metadata from a JBM buffer */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( hIvasDec->st_ivas->ivas_format != MASA_FORMAT && hIvasDec->st_ivas->ivas_format != MASA_ISM_FORMAT ) - { - return IVAS_ERR_WRONG_MODE; - } - - if ( getFromJbmBuffer ) - { - ivas_jbm_masa_sf_to_sf_map( hIvasDec->st_ivas ); - } - - *hMasaExtOutMeta = hIvasDec->st_ivas->hMasa->data.extOutMeta; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedHeadTrackData( ) - * - * Feed the decoder with the head tracking data - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedHeadTrackData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION orientation, /* i : head-tracking data, listener orientation */ - IVAS_VECTOR3 Pos, /* i : listener position */ - const int16_t subframe_idx /* i : subframe index */ -) -{ - HEAD_TRACK_DATA_HANDLE hHeadTrackData; - ivas_error error; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hHeadTrackData = hIvasDec->st_ivas->hHeadTrackData; - - if ( hHeadTrackData == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Move head-tracking data to the decoder handle */ - /* check for Euler angle signaling */ - if ( orientation.w == -3.0f ) - { - Euler2Quat( deg2rad( orientation.x ), deg2rad( orientation.y ), deg2rad( orientation.z ), &orientation ); - } - - if ( ( error = ivas_orient_trk_Process( hHeadTrackData->OrientationTracker, orientation, FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES, &hHeadTrackData->Quaternions[subframe_idx] ) ) != IVAS_ERR_OK ) - { - return error; - } - - hHeadTrackData->Pos[subframe_idx].x = Pos.x; - hHeadTrackData->Pos[subframe_idx].y = Pos.y; - hHeadTrackData->Pos[subframe_idx].z = Pos.z; - - hIvasDec->updateOrientation = true; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedRefRotData( ) - * - * Feed the decoder with the reference rotation - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedRefRotData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION rotation /* i : reference rotation data */ -) -{ - ivas_orient_trk_state_t *pOtr; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHeadTrackData == NULL || hIvasDec->st_ivas->hHeadTrackData->OrientationTracker == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - pOtr = hIvasDec->st_ivas->hHeadTrackData->OrientationTracker; - - pOtr->refRot.w = rotation.w; - pOtr->refRot.x = rotation.x; - pOtr->refRot.z = rotation.z; - pOtr->refRot.y = rotation.y; - - hIvasDec->updateOrientation = true; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedRefVectorData( ) - * - * Feed the decoder with a reference vector spanning from listenerPos - * to refPos. Only available in OTR_TRACKING_REF_POS and - * OTR_TRACKING_REF_POS_LEV modes. - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedRefVectorData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_VECTOR3 listenerPos, /* i : Listener position */ - const IVAS_VECTOR3 refPos /* i : Reference position */ -) -{ - ivas_orient_trk_state_t *pOtr; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHeadTrackData == NULL || hIvasDec->st_ivas->hHeadTrackData->OrientationTracker == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - pOtr = hIvasDec->st_ivas->hHeadTrackData->OrientationTracker; - - hIvasDec->updateOrientation = true; - - return ivas_orient_trk_SetReferenceVector( pOtr, listenerPos, refPos ); -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedExternalOrientationData( ) - * - * Feed the decoder with the external orientation data - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedExternalOrientationData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION orientation, /* i : external orientation data */ - int8_t enableHeadRotation, /* i : flag to enable head rotation for this frame */ - int8_t enableExternalOrientation, /* i : flag to enable external orientation for this frame */ - int8_t enableRotationInterpolation, /* i : flag to interpolate rotations from current and previous frames */ - int16_t numFramesToTargetOrientation, /* i : number of frames until target orientation is reached */ - const int16_t subframe_idx /* i : subframe index */ -) -{ - EXTERNAL_ORIENTATION_HANDLE hExternalOrientationData; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hExternalOrientationData = hIvasDec->st_ivas->hExtOrientationData; - - if ( hExternalOrientationData == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Move external orientation data to the decoder handle (invert orientations) */ - QuaternionInverse( orientation, &hExternalOrientationData->Quaternions[subframe_idx] ); - - hExternalOrientationData->enableHeadRotation[subframe_idx] = enableHeadRotation; - hExternalOrientationData->enableExternalOrientation[subframe_idx] = enableExternalOrientation; - hExternalOrientationData->enableRotationInterpolation[subframe_idx] = enableRotationInterpolation; - hExternalOrientationData->numFramesToTargetOrientation[subframe_idx] = numFramesToTargetOrientation; - - hIvasDec->updateOrientation = true; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedCustomLsData( ) - * - * Feed the decoder with the Custom loudspeaker data - *---------------------------------------------------------------------*/ - -/*! r: error code */ -ivas_error IVAS_DEC_FeedCustomLsData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_CUSTOM_LS_DATA hLsCustomData /* i : Custom loudspeaker setup data */ -) -{ - int16_t i, is_planar; - IVAS_LSSETUP_CUSTOM_HANDLE hLsSetupCustom; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hLsSetupCustom = hIvasDec->st_ivas->hLsSetupCustom; - - if ( hLsSetupCustom == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Move Custom LS layout data to the decoder handle */ - - /* Loudspeaker azimuths and elevations */ - hLsSetupCustom->num_spk = hLsCustomData.num_spk; - - mvr2r( hLsCustomData.azimuth, hLsSetupCustom->ls_azimuth, hLsCustomData.num_spk ); - mvr2r( hLsCustomData.elevation, hLsSetupCustom->ls_elevation, hLsCustomData.num_spk ); - - /* Set planar flag */ - is_planar = 1; - for ( i = 0; i < hLsCustomData.num_spk; i++ ) - { - if ( is_planar && hLsSetupCustom->ls_elevation[i] != 0.0f ) - { - is_planar = 0; - } - } - hLsSetupCustom->is_planar_setup = is_planar; - - /* Loudspeaker LFE */ - hLsSetupCustom->num_lfe = hLsCustomData.num_lfe; - mvs2s( hLsCustomData.lfe_idx, hLsSetupCustom->lfe_idx, hLsCustomData.num_lfe ); - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetHrtfHandle( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetHrtfHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_HANDLE *hHrtfTD /* o : HRTF handle */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfTD == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *hHrtfTD = hIvasDec->st_ivas->hHrtfTD; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetHrtfCRendHandle( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetHrtfCRendHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF /* o : Set of HRTF handle */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hSetOfHRTF == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - *hSetOfHRTF = hIvasDec->st_ivas->hSetOfHRTF; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetHrtfFastConvHandle( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetHrtfFastConvHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv /* o : FASTCONV HRTF handle */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfFastConv == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - *hHrtfFastConv = hIvasDec->st_ivas->hHrtfFastConv; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetHrtfParamBinHandle( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetHrtfParamBinHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin /* o : Parametric binauralizer HRTF handle */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hHrtfParambin == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - *hHrtfParambin = hIvasDec->st_ivas->hHrtfParambin; - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * copyRendererConfigStruct( ) - * - * - *---------------------------------------------------------------------*/ - -static ivas_error copyRendererConfigStruct( - RENDER_CONFIG_HANDLE hRCin, - IVAS_RENDER_CONFIG_HANDLE hRCout ) -{ - if ( hRCin == NULL || hRCout == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hRCout->roomAcoustics.override = hRCin->roomAcoustics.override; - hRCout->roomAcoustics.nBands = hRCin->roomAcoustics.nBands; - hRCout->roomAcoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay; - hRCout->roomAcoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay; - - mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); - mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); - mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); - mvr2r( hRCin->directivity, hRCout->directivity, 3 * MAX_NUM_OBJECTS ); - hRCout->roomAcoustics.use_er = hRCin->roomAcoustics.use_er; - hRCout->roomAcoustics.lowComplexity = hRCin->roomAcoustics.lowComplexity; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetRenderConfig( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetRenderConfig( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hRenderConfig == NULL || hRCout == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - return copyRendererConfigStruct( hIvasDec->st_ivas->hRenderConfig, hRCout ); -} - -/*! r: error code*/ -ivas_error IVAS_DEC_GetDefaultRenderConfig( - IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render config handle */ -) -{ - RENDER_CONFIG_DATA RCin; - RENDER_CONFIG_HANDLE hRCin = &RCin; - ivas_error error; - - if ( ( error = ivas_render_config_init_from_rom( &hRCin ) ) != IVAS_ERR_OK ) - { - return error; - } - - return copyRendererConfigStruct( hRCin, hRCout ); -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_FeedRenderConfig( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_FeedRenderConfig( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ -) -{ - RENDER_CONFIG_HANDLE hRenderConfig; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hIvasDec->st_ivas->hRenderConfig == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hRenderConfig = hIvasDec->st_ivas->hRenderConfig; - hRenderConfig->roomAcoustics.override = renderConfig.roomAcoustics.override; - hRenderConfig->roomAcoustics.nBands = renderConfig.roomAcoustics.nBands; - hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.roomAcoustics.acousticPreDelay; - hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.roomAcoustics.inputPreDelay; - - hRenderConfig->roomAcoustics.use_er = 0; - if ( renderConfig.roomAcoustics.use_er == 1 ) - { - hRenderConfig->roomAcoustics.use_er = renderConfig.roomAcoustics.use_er; - hRenderConfig->roomAcoustics.lowComplexity = renderConfig.roomAcoustics.lowComplexity; - hRenderConfig->roomAcoustics.dimensions = renderConfig.roomAcoustics.dimensions; - hRenderConfig->roomAcoustics.ListenerOrigin = renderConfig.roomAcoustics.ListenerOrigin; - - mvr2r( renderConfig.roomAcoustics.AbsCoeff, hRenderConfig->roomAcoustics.AbsCoeff, IVAS_ROOM_ABS_COEFF ); - } - - mvr2r( renderConfig.roomAcoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); - mvr2r( renderConfig.roomAcoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); - mvr2r( renderConfig.roomAcoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); - - mvr2r( renderConfig.directivity, hRenderConfig->directivity, 3 * MAX_NUM_OBJECTS ); - - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetDelay( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetDelay( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *nSamples, /* o : decoder delay in samples */ - int32_t *timeScale /* o : time scale of the delay, equal to decoder output sampling rate */ -) -{ - Decoder_Struct *st_ivas; - DECODER_CONFIG_HANDLE hDecoderConfig; - - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || nSamples == NULL || timeScale == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( !hIvasDec->hasDecodedFirstGoodFrame ) - { - /* Delay depends on IVAS format, which is unknown until first frame has been decoded */ - return IVAS_ERR_WAITING_FOR_BITSTREAM; - } - - st_ivas = hIvasDec->st_ivas; - hDecoderConfig = st_ivas->hDecoderConfig; - - nSamples[1] = NS2SA( hDecoderConfig->output_Fs, get_delay( DEC, hDecoderConfig->output_Fs, st_ivas->ivas_format, st_ivas->cldfbAnaDec[0] ) ); - nSamples[2] = (int16_t) roundf( (float) st_ivas->binaural_latency_ns * hDecoderConfig->output_Fs / 1000000000.f ); - nSamples[0] = nSamples[1] + nSamples[2]; - - if ( st_ivas->ivas_format == MASA_FORMAT ) - { - /* note: in MASA, all delay is compensated at the decoder by default, so subtract the encoder delay for print-out */ - nSamples[1] -= NS2SA( hDecoderConfig->output_Fs, IVAS_ENC_DELAY_NS ); - } - - *timeScale = hDecoderConfig->output_Fs; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_HasDecodedFirstGoodFrame( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_HasDecodedFirstGoodFrame( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - bool *hasDecodedFirstGoodFrame /* o : flag indicating if the decoder has decoded a good frame since it was configured */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || hasDecodedFirstGoodFrame == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *hasDecodedFirstGoodFrame = hIvasDec->hasDecodedFirstGoodFrame; - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetPcmFrameSize( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetPcmFrameSize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int32_t *pcmFrameSize /* o : total size of the PCM output frame. This takes into account the number of output channels */ -) -{ - if ( hIvasDec == NULL || hIvasDec->st_ivas == NULL || pcmFrameSize == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( hIvasDec->hasDecodedFirstGoodFrame ) - { - *pcmFrameSize = hIvasDec->st_ivas->hDecoderConfig->nchan_out * hIvasDec->st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC; - } - else - { - *pcmFrameSize = 0; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * isSidFrame( ) - * - * Check if a frame contains a SID - *---------------------------------------------------------------------*/ - -static bool isSidFrame( - const uint16_t size ) -{ - if ( size == SID_1k75 / FRAMES_PER_SEC ) - { - return true; /* AMR-WB SID */ - } - else if ( size == SID_2k40 / FRAMES_PER_SEC ) - { - return true; /* EVS SID */ - } - else if ( size == IVAS_SID_5k2 / FRAMES_PER_SEC ) - { - return true; /* IVAS SID */ - } - - return false; -} - -static void bsCompactToSerial( const uint8_t *compact, uint16_t *serial, uint16_t num_bits ) -{ -/* Bitstream conversion is not counted towards complexity and memory usage */ -#define WMC_TOOL_SKIP - uint32_t i; - uint8_t byte = 0; - const uint8_t mask = 0x80; - - for ( i = 0; i < num_bits; ++i ) - { - if ( i % 8 == 0 ) - { - byte = compact[i / 8]; - } - - serial[i] = ( byte & mask ) >> 7; - - byte <<= 1; - } - - /* Add 4 padding bytes required by core coder */ - for ( i = 0; i < 4 * 8; ++i ) - { - serial[num_bits + i] = 0; - } -#undef WMC_TOOL_SKIP -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_FeedFrame( ) - * - * Feed RTP packet into internal jitter buffer - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_VoIP_FeedFrame( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint8_t *au, /* i : buffer containing input access unit */ - const uint16_t auSize, /* i : size of the access unit */ - const uint16_t rtpSequenceNumber, /* i : RTP sequence number (16 bits) */ - const uint32_t rtpTimeStamp, /* i : RTP timestamp (32 bits) */ - const uint32_t rcvTime_ms, /* i : receive time of the RTP packet in milliseconds */ - const bool qBit /* i : Q bit for AMR-WB IO */ -) -{ - JB4_DATAUNIT_HANDLE dataUnit; - int16_t partialCopyFrameType, partialCopyOffset; - int16_t result; - - if ( auSize == 0 ) - { - return IVAS_ERR_OK; /* ignore empty/NO_DATA frame - shouldn't be transmitted in RTP */ - } - if ( ( auSize + 7 ) / 8 > MAX_AU_SIZE ) - { - return IVAS_ERR_INVALID_BITSTREAM; - } - - /* check if frame contains a partial copy and get its offset */ - evs_dec_previewFrame_float( au, auSize, &partialCopyFrameType, &partialCopyOffset ); - - /* create data unit for primary copy in the frame */ - dataUnit = JB4_AllocDataUnit( hIvasDec->hVoIP->hJBM ); - mvc2c( au, dataUnit->data, (int16_t) ( ( auSize + 7 ) / 8 ) ); - dataUnit->dataSize = auSize; - dataUnit->duration = 20; - dataUnit->sequenceNumber = rtpSequenceNumber; - dataUnit->silenceIndicator = isSidFrame( dataUnit->dataSize ); - dataUnit->timeScale = 1000; - dataUnit->rcvTime = rcvTime_ms; - dataUnit->timeStamp = rtpTimeStamp; - dataUnit->partial_frame = 0; - dataUnit->partialCopyOffset = partialCopyOffset; - dataUnit->qBit = qBit; - - /* add the frame to the JBM */ - result = JB4_PushDataUnit( hIvasDec->hVoIP->hJBM, dataUnit, rcvTime_ms ); - if ( result != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - - if ( partialCopyFrameType != RF_NO_DATA && partialCopyOffset != 0 ) - { - /* create data unit for partial copy in the frame */ - dataUnit = JB4_AllocDataUnit( hIvasDec->hVoIP->hJBM ); - mvc2c( au, dataUnit->data, (int16_t) ( ( auSize + 7 ) / 8 ) ); - dataUnit->dataSize = auSize; - dataUnit->duration = 20; - dataUnit->sequenceNumber = rtpSequenceNumber; - dataUnit->silenceIndicator = 0; /* there are no partial copies for SID frames */ - dataUnit->timeScale = 1000; - dataUnit->rcvTime = rcvTime_ms; - dataUnit->timeStamp = rtpTimeStamp - partialCopyOffset * dataUnit->duration; - dataUnit->partial_frame = 1; - dataUnit->partialCopyOffset = partialCopyOffset; - dataUnit->qBit = qBit; - - /* add the frame to the JBM */ - result = JB4_PushDataUnit( hIvasDec->hVoIP->hJBM, dataUnit, rcvTime_ms ); - if ( result != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - } - - return IVAS_ERR_OK; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_SetScale( ) - * - * Set the TSM scale - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_VoIP_SetScale( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t maxScaling, /* i : max allowed absolute difference in samples from the default 20ms frame size */ - const int16_t scale /* i : TSM scale to set in percent of the default frame size */ -) -{ - ivas_error error; - - error = IVAS_ERR_OK; - - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm == false ) - { - return IVAS_ERR_TSM_NOT_ENABLED; - } - else - { - hIvasDec->tsm_scale = scale; - hIvasDec->tsm_max_scaling = maxScaling; - } - - return error; -} - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_SetScale( ) - * - * Set the TSM scale - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_TSM_SetQuality( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const float quality /* i : target TSM quality */ -) -{ - ivas_error error; - - error = IVAS_ERR_OK; - - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm == false ) - { - return IVAS_ERR_TSM_NOT_ENABLED; - } - else - { - hIvasDec->tsm_quality = quality; - } - - return error; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_GetSamples( ) - * - * Main function to decode one frame in VoIP - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_VoIP_GetSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t nSamplesPerChannel, /* i : number of samples per channel requested to be written to output buffer */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - const uint32_t systemTimestamp_ms /* i : current system timestamp */ -#ifdef SUPPORT_JBM_TRACEFILE - , - JbmTraceFileWriterFn jbmWriterFn, - void *jbmWriter -#endif -) -{ - Decoder_Struct *st_ivas; - DECODER_CONFIG_HANDLE hDecoderConfig; - IVAS_DEC_VOIP *hVoIP; - uint32_t extBufferedTime_ms, scale, maxScaling; - JB4_DATAUNIT_HANDLE dataUnit; - uint16_t extBufferedSamples; - int16_t timeScalingDone; - int16_t result; - ivas_error error; - int16_t nSamplesRendered; - uint8_t nOutChannels; - - st_ivas = hIvasDec->st_ivas; - hDecoderConfig = st_ivas->hDecoderConfig; - hVoIP = hIvasDec->hVoIP; - timeScalingDone = 0; - nOutChannels = (uint8_t) st_ivas->hDecoderConfig->nchan_out; - nSamplesRendered = 0; - - if ( nSamplesPerChannel == 0 ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - /* make sure that the FIFO after decoder/scaler contains at least one sound card frame (i.e. 20ms) */ - while ( nSamplesRendered < nSamplesPerChannel ) - { - if ( hIvasDec->nSamplesAvailableNext == 0 ) - { - int16_t nSamplesBuffered; - nSamplesBuffered = 0; - if ( hIvasDec->hasBeenFedFirstGoodFrame ) - { - if ( ( error = IVAS_DEC_GetBufferedNumberOfSamples( hIvasDec, &nSamplesBuffered ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - extBufferedSamples = nSamplesRendered + nSamplesBuffered; - extBufferedTime_ms = extBufferedSamples * 1000 / hDecoderConfig->output_Fs; - dataUnit = NULL; - - /* pop one access unit from the jitter buffer */ - result = JB4_PopDataUnit( hVoIP->hJBM, systemTimestamp_ms, extBufferedTime_ms, &dataUnit, &scale, &maxScaling ); - if ( result != 0 ) - { - return IVAS_ERR_UNKNOWN; - } - maxScaling = maxScaling * hDecoderConfig->output_Fs / 1000; - - /* avoid time scaling multiple times in one sound card slot */ - if ( scale != 100U ) - { - if ( timeScalingDone ) - { - scale = 100; - } - else - { - timeScalingDone = 1; - } - } - - /* limit scale to range supported by time scaler */ - if ( scale < APA_MIN_SCALE ) - { - scale = APA_MIN_SCALE; - } - else if ( scale > APA_MAX_SCALE ) - { - scale = APA_MAX_SCALE; - } - - if ( ( error = IVAS_DEC_VoIP_SetScale( hIvasDec, (int16_t) maxScaling, (int16_t) scale ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* copy bitstream into decoder state */ - if ( dataUnit ) - { - hIvasDec->hVoIP->hCurrentDataUnit = dataUnit; - - bsCompactToSerial( dataUnit->data, hIvasDec->hVoIP->bs_conversion_buf, dataUnit->dataSize ); - - - if ( ( error = IVAS_DEC_FeedFrame_Serial( hIvasDec, hIvasDec->hVoIP->bs_conversion_buf, dataUnit->dataSize, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( hIvasDec->hasDecodedFirstGoodFrame ) - { - /* Decoder has been initialized with first good frame - do PLC */ - if ( ( error = IVAS_DEC_FeedFrame_Serial( hIvasDec, hIvasDec->hVoIP->bs_conversion_buf, 0, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - -#ifdef SUPPORT_JBM_TRACEFILE - /* jbmWriterFn and jbmWriter may be NULL if tracefile writing was not requested on CLI */ - if ( jbmWriterFn != NULL && jbmWriter != NULL ) - { - /* write JBM trace data entry */ - store_JbmData( hVoIP, dataUnit, systemTimestamp_ms, extBufferedSamples, hDecoderConfig->output_Fs ); - if ( ( jbmWriterFn( &hVoIP->JbmTraceData, jbmWriter ) ) != IVAS_ERR_OK ) - { - fprintf( stderr, "\nError writing JBM Trace data to file\n" ); - return IVAS_ERR_UNKNOWN; - } - } -#endif - if ( dataUnit ) - { - if ( dataUnit->partial_frame != 0 ) - { - hVoIP->lastDecodedWasActive = 1; - } - else - { - hVoIP->lastDecodedWasActive = !dataUnit->silenceIndicator; - } - - /* data unit memory is no longer used */ - JB4_FreeDataUnit( hVoIP->hJBM, dataUnit ); - } - - if ( !hIvasDec->hasBeenFedFirstGoodFrame ) - { - hIvasDec->nSamplesAvailableNext = hIvasDec->nSamplesFrame; - hIvasDec->nSamplesRendered = 0; - } - } - - /* decode */ - if ( !hIvasDec->hasBeenFedFirstGoodFrame ) - { - /* codec mode to use not known yet - simply output silence */ - /* directly set output zero */ - int16_t nSamplesToZero = min( nSamplesPerChannel, hIvasDec->nSamplesAvailableNext ); - set_s( pcmBuf + nSamplesRendered * nOutChannels, 0, nSamplesToZero * nOutChannels ); - nSamplesRendered += nSamplesToZero; - hIvasDec->nSamplesRendered += nSamplesToZero; - hIvasDec->nSamplesAvailableNext -= nSamplesToZero; - } - else - { - int16_t nSamplesToRender, nSamplesRendered_loop; - bool tmp; - nSamplesToRender = nSamplesPerChannel - nSamplesRendered; - - /* render IVAS frames directly to the output buffer */ - if ( ( error = IVAS_DEC_GetSamples( hIvasDec, nSamplesToRender, pcmBuf + nSamplesRendered * nOutChannels, &nSamplesRendered_loop, &tmp ) ) != IVAS_ERR_OK ) - { - return error; - } - - nSamplesRendered += nSamplesRendered_loop; - } - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_Flush( ) - * - * Function to flush remaining audio in VoIP - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_Flush( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesPerChannel, /* i : number of samples per channel requested to be written to output buffer */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - int16_t *nSamplesFlushed /* o : number of samples flushed */ -) -{ - ivas_error error; - uint16_t nSamplesToRender; - uint16_t nSamplesFlushedLocal; - - *nSamplesFlushed = min( nSamplesPerChannel, hIvasDec->nSamplesAvailableNext ); - - nSamplesToRender = (uint16_t) *nSamplesFlushed; - - /* render IVAS frames */ - error = IVAS_DEC_GetRenderedSamples( hIvasDec, nSamplesToRender, &nSamplesFlushedLocal, &hIvasDec->nSamplesAvailableNext, pcmBuf ); - - return error; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_IsEmpty( ) - * - * - *---------------------------------------------------------------------*/ - -bool IVAS_DEC_VoIP_IsEmpty( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesAsked ) -{ - return ( ( JB4_bufferedDataUnits( hIvasDec->hVoIP->hJBM ) == 0 ) && ( hIvasDec->nSamplesAvailableNext < nSamplesAsked ) ); -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_Get_CA_offset( ) - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_VoIP_Get_CA_offset( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *optimum_offset, - int16_t *FEC_hi ) -{ - if ( hIvasDec == NULL || hIvasDec->hVoIP == NULL || hIvasDec->hVoIP->hJBM == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *optimum_offset = JB4_getFECoffset( hIvasDec->hVoIP->hJBM ); - *FEC_hi = JB4_FECoffset( hIvasDec->hVoIP->hJBM ); - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_Close_VoIP( ) - * - * - *---------------------------------------------------------------------*/ - -static void IVAS_DEC_Close_VoIP( - IVAS_DEC_VOIP *hVoIP /* i/o: IVAS decoder handle */ -) -{ - JB4_Destroy( &hVoIP->hJBM ); - - if ( hVoIP->bs_conversion_buf != NULL ) - { -#define WMC_TOOL_SKIP - /* Bitstream conversion is not counted towards complexity and memory usage */ - free( hVoIP->bs_conversion_buf ); -#undef WMC_TOOL_SKIP - } - - free( hVoIP ); - - return; -} - - -#ifdef SUPPORT_JBM_TRACEFILE -/*---------------------------------------------------------------------* - * store_JbmData() - * - * Store JBM trace data entry - *---------------------------------------------------------------------*/ - -static void store_JbmData( - IVAS_DEC_VOIP *hVoIP, - JB4_DATAUNIT_HANDLE dataUnit, - const uint32_t systemTimestamp_ms, - const uint16_t extBufferedSamples, - const int32_t output_Fs ) -{ - IVAS_JBM_TRACE_DATA *JbmTraceData; - - if ( hVoIP == NULL ) - { - return; - } - - JbmTraceData = &hVoIP->JbmTraceData; - - JbmTraceData->systemTimestamp_ms = systemTimestamp_ms; - JbmTraceData->extBufferedSamples = extBufferedSamples; - JbmTraceData->lastDecodedWasActive = hVoIP->lastDecodedWasActive; - JbmTraceData->output_Fs = output_Fs; - JbmTraceData->dataUnit_flag = dataUnit != NULL; - if ( dataUnit != NULL ) - { - JbmTraceData->sequenceNumber = dataUnit->sequenceNumber; - JbmTraceData->timeStamp = dataUnit->timeStamp; - JbmTraceData->rcvTime = dataUnit->rcvTime; - JbmTraceData->partial_frame = dataUnit->partial_frame; - JbmTraceData->partialCopyOffset = dataUnit->partialCopyOffset; - } - - return; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetJbmData() - * - * - *---------------------------------------------------------------------*/ - -ivas_error IVAS_DEC_GetJbmData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_JBM_TRACE_DATA *JbmTraceData /* o : JBM Trace data */ - -) -{ - if ( hIvasDec->hVoIP == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *JbmTraceData = hIvasDec->hVoIP->JbmTraceData; - - return IVAS_ERR_OK; -} - -#endif - - -/*---------------------------------------------------------------------* - * IVAS_DEC_GetErrorMessage( ) - * - * Maps error codes to error description strings - *---------------------------------------------------------------------*/ - -const char *IVAS_DEC_GetErrorMessage( - ivas_error error /* i : decoder error code enum */ -) -{ - return ivas_error_to_string( error ); -} - - -/*---------------------------------------------------------------------* - * get_channel_config() - * - * Gets a str related to input config - *---------------------------------------------------------------------*/ - -static ivas_error get_channel_config( - AUDIO_CONFIG config, - char *str ) -{ - if ( config == IVAS_AUDIO_CONFIG_MONO ) - { - strcpy( str, "Mono" ); - } - else if ( config == IVAS_AUDIO_CONFIG_STEREO ) - { - strcpy( str, "Stereo" ); - } - else if ( config == IVAS_AUDIO_CONFIG_5_1 ) - { - strcpy( str, "Multichannel 5.1 (CICP6)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_7_1 ) - { - strcpy( str, "Multichannel 7.1 (CICP12)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_5_1_2 ) - { - strcpy( str, "Multichannel 5.1+2 (CICP14)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_5_1_4 ) - { - strcpy( str, "Multichannel 5.1+4 (CICP16)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - strcpy( str, "Multichannel 7.1+4 (CICP19)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - strcpy( str, "Multichannel (custom loudspeaker layout)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_FOA ) - { - strcpy( str, "Ambisonics: First Order (FOA)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_HOA2 ) - { - strcpy( str, "Ambisonics: Second Order (HOA2)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_HOA3 ) - { - strcpy( str, "Ambisonics: Third Order (HOA3)" ); - } - else if ( config == IVAS_AUDIO_CONFIG_BINAURAL ) - { - strcpy( str, "Binaural: no room" ); - } - else if ( config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - strcpy( str, "Binaural: room with impulse responses" ); - } - else if ( config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - strcpy( str, "Binaural: room with reverb" ); - } - else if ( config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - strcpy( str, "External renderer" ); - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_OUTPUT_FORMAT, "Error: Incorrect Input/Output Configuration" ); - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * printConfigInfo_dec( ) - * - * - *---------------------------------------------------------------------*/ - -static ivas_error printConfigInfo_dec( - Decoder_Struct *st_ivas, - const int16_t bitstreamformat, - const bool Opt_VOIP, - const bool quietModeEnabled ) -{ - ivas_error error; - char config_str[50]; - AUDIO_CONFIG output_config; - - /*-----------------------------------------------------------------* - * Print info on screen - *-----------------------------------------------------------------*/ - - fprintf( stdout, "\n" ); - - /*-----------------------------------------------------------------* - * Print output sampling frequency - *-----------------------------------------------------------------*/ - - fprintf( stdout, "Output sampling rate: %d Hz\n", st_ivas->hDecoderConfig->output_Fs ); - - /*-----------------------------------------------------------------* - * Print bitrate - *-----------------------------------------------------------------*/ - - if ( !quietModeEnabled ) - { - if ( !Opt_VOIP ) - { - fprintf( stdout, "Bitrate: %.2f kbps\n", (float) st_ivas->hDecoderConfig->ivas_total_brate / 1000 ); - - if ( st_ivas->hDecoderConfig->ivas_total_brate <= 0 ) - { - if ( bitstreamformat == G192 ) - { - fprintf( stdout, "Active Bitrate not identified in bitstream file \n" ); - } - else /* MIME */ - { - fprintf( stdout, "Active Bitrate not identified from first MIME frame \n" ); - } - } - } - } - - /*-----------------------------------------------------------------* - * Print output configuration - *-----------------------------------------------------------------*/ - - if ( st_ivas->ivas_format == MONO_FORMAT ) - { - if ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) - { - fprintf( stdout, "Output configuration: mono EVS bit-exact decoding to stereo\n" ); - fprintf( stdout, "Non-diegetic panning: %.2f\n", st_ivas->hDecoderConfig->non_diegetic_pan_gain * 90.f ); - } - else - { - fprintf( stdout, "Output configuration: mono EVS bit-exact decoding\n" ); - } - } - else - { - if ( !quietModeEnabled ) - { - if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - fprintf( stdout, "Input configuration: Stereo\n" ); - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - fprintf( stdout, "Input configuration: ISM (ParamISM): 2 transport channels\n" ); - } - else - { - fprintf( stdout, "Input configuration: ISM: %d transport channel(s)\n", st_ivas->nchan_transport ); - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT ) - { - fprintf( stdout, "Input configuration: Scene Based Audio, Ambisonic order %i%s, %d transport channel(s)\n", st_ivas->sba_order, st_ivas->sba_planar ? " (Planar)" : "", st_ivas->nchan_transport ); - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - fprintf( stdout, "Input configuration: Combined Scene Based Audio, Ambisonic order %i, with %d Objects \n", st_ivas->sba_order, st_ivas->nchan_ism ); - } - else if ( st_ivas->ivas_format == MASA_FORMAT ) - { - fprintf( stdout, "Input configuration: MASA - %d channel(s)\n", st_ivas->nchan_transport ); - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - if ( ( error = get_channel_config( st_ivas->transport_config, &config_str[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - fprintf( stdout, "Input configuration: %s\n", config_str ); - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - fprintf( stdout, "Input configuration: combined ISM and MASA (%i ISM stream(s)) \n", st_ivas->nchan_ism ); - } - } - - output_config = st_ivas->hDecoderConfig->output_config; - get_channel_config( output_config, &config_str[0] ); - fprintf( stdout, "Output configuration: %s\n", config_str ); - - if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - fprintf( stdout, "Render framesize: %dms\n", get_render_frame_size_ms( st_ivas->hDecoderConfig->render_framesize ) ); - } - if ( st_ivas->hDecoderConfig->Opt_HRTF_binary ) - { - fprintf( stdout, "HRIR/BRIR file: ON\n" ); - } - - if ( st_ivas->hDecoderConfig->Opt_RendConfigCustom ) - { - fprintf( stdout, "Renderer config. file: ON\n" ); - } - - if ( st_ivas->hDecoderConfig->Opt_Headrotation ) - { - fprintf( stdout, "Head rotation: ON\n" ); - } - - if ( st_ivas->hDecoderConfig->Opt_ExternalOrientation ) - { - fprintf( stdout, "External orientation: ON\n" ); - } - - if ( st_ivas->hDecoderConfig->orientation_tracking != IVAS_HEAD_ORIENT_TRK_NONE ) - { - switch ( st_ivas->hDecoderConfig->orientation_tracking ) - { - case IVAS_HEAD_ORIENT_TRK_AVG: - fprintf( stdout, "Orientation tracking: AVG\n" ); - break; - case IVAS_HEAD_ORIENT_TRK_REF: - fprintf( stdout, "Orientation tracking: REF\n" ); - break; - case IVAS_HEAD_ORIENT_TRK_REF_VEC: - fprintf( stdout, "Orientation tracking: REF_VEC\n" ); - break; - case IVAS_HEAD_ORIENT_TRK_REF_VEC_LEV: - fprintf( stdout, "Orientation tracking: REF_VEC_LEV\n" ); - break; - default: - break; - } - } - - if ( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) - { - fprintf( stdout, "Non-diegetic panning: %.2f\n", st_ivas->hDecoderConfig->non_diegetic_pan_gain * 90.f ); - } - - if ( st_ivas->hDecoderConfig->Opt_dpid_on ) - { - fprintf( stdout, "Directivity pattern: ON\n" ); - } - - if ( st_ivas->hDecoderConfig->Opt_aeid_on ) - { - fprintf( stdout, "Acoustic environment ID:ON\n" ); - } - } - - /*-----------------------------------------------------------------* - * Print TSM mode info - *-----------------------------------------------------------------*/ - - if ( st_ivas->hDecoderConfig->Opt_tsm ) - { - fprintf( stdout, "TSM mode: ON\n" ); - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_PrintConfig( ) - * - * Print decoder set-up info - *---------------------------------------------------------------------*/ - -void IVAS_DEC_PrintConfig( - const IVAS_DEC_HANDLE hIvasDec, - const bool quietModeEnabled, - const bool voipMode ) -{ - printConfigInfo_dec( hIvasDec->st_ivas, hIvasDec->bitstreamformat, voipMode, quietModeEnabled ); - - return; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_PrintDisclaimer( ) - * - * Print IVAS disclaimer to console - *---------------------------------------------------------------------*/ - -void IVAS_DEC_PrintDisclaimer( void ) -{ - print_disclaimer( stderr ); - - return; -} - - -/*---------------------------------------------------------------------* - * evs_dec_main( ) - * - * EVS codec main decoder fucntion - *---------------------------------------------------------------------*/ - -static ivas_error evs_dec_main( - Decoder_Struct *st_ivas, - const int16_t nOutSamples, - float *floatBuf, - int16_t *pcmBuf ) -{ - DEC_CORE_HANDLE *hCoreCoder; - float mixer_left, mixer_rigth; - float *p_output[MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN]; - int16_t ch; - ivas_error error; - - hCoreCoder = st_ivas->hSCE[0]->hCoreCoder; - hCoreCoder[0]->total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - hCoreCoder[0]->total_num_bits = st_ivas->num_bits; - hCoreCoder[0]->output_frame_fx = extract_l( Mult_32_16( hCoreCoder[0]->output_Fs, 0x0290 ) ); - mdct_switching_dec( hCoreCoder[0] ); - - for ( ch = 0; ch < MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN; ch++ ) - { - p_output[ch] = st_ivas->p_output_f[ch]; - } -#ifdef IVAS_FLOAT_FIXED - Word16 output_16[L_FRAME48k]; -#endif - - /* run the main EVS decoding routine */ - if ( hCoreCoder[0]->codec_mode == MODE1 ) - { - if ( hCoreCoder[0]->Opt_AMR_WB ) - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = amr_wb_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], p_output[0] ) ) != IVAS_ERR_OK ) -#else - if ( ( error = amr_wb_dec_fx( output_16, hCoreCoder[0] ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - else - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], p_output[0], FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) -#else - if ( ( error = evs_dec_fx( hCoreCoder[0], output_16, FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - } - else - { - if ( hCoreCoder[0]->bfi == 0 ) - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], p_output[0], FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) -#else - if ( ( error = evs_dec_fx( hCoreCoder[0], output_16, FRAMEMODE_NORMAL ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - else if ( hCoreCoder[0]->bfi == 2 ) - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], p_output[0], FRAMEMODE_FUTURE ) ) != IVAS_ERR_OK ) -#else - if ( ( error = evs_dec_fx( hCoreCoder[0], output_16, FRAMEMODE_FUTURE ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - else - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = evs_dec( hCoreCoder[0], st_ivas->mem_hp20_out[0], p_output[0], FRAMEMODE_MISSING ) ) != IVAS_ERR_OK ) -#else - if ( ( error = evs_dec_fx( hCoreCoder[0], output_16, FRAMEMODE_MISSING ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - } - - st_ivas->BER_detect = hCoreCoder[0]->BER_detect; - if ( st_ivas->renderer_type == RENDERER_NON_DIEGETIC_DOWNMIX ) - { - mixer_left = ( st_ivas->hDecoderConfig->non_diegetic_pan_gain + 1.f ) * 0.5f; - mixer_rigth = 1.f - mixer_left; - v_multc( p_output[0], mixer_rigth, p_output[1], nOutSamples ); - v_multc( p_output[0], mixer_left, p_output[0], nOutSamples ); - } -#ifdef IVAS_FLOAT_FIXED - for ( int i = 0; i < nOutSamples; i++ ) - { - p_output[0][i] = output_16[i]; - } -#endif - if ( !st_ivas->hDecoderConfig->Opt_tsm ) - { - ivas_jbm_dec_copy_tc_no_tsm( st_ivas, p_output, nOutSamples ); - } - else if ( floatBuf != NULL ) - { - /* BE workaround */ - int16_t pcm_buf_local[L_FRAME48k * MAX_OUTPUT_CHANNELS_IN_DIEGETIC_PAN]; - - /* convert 'float' output data to 'short' */ - ivas_syn_output( p_output, nOutSamples, st_ivas->hDecoderConfig->nchan_out, pcm_buf_local ); - mvs2r( pcm_buf_local, floatBuf, nOutSamples * st_ivas->hDecoderConfig->nchan_out ); - } - else - { - ivas_syn_output( p_output, nOutSamples, st_ivas->hDecoderConfig->nchan_out, pcmBuf ); - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * input_format_API_to_internal() - * - * - *---------------------------------------------------------------------*/ - -static ivas_error input_format_API_to_internal( - IVAS_DEC_INPUT_FORMAT input_format, - int16_t *bitstream_format_internal, - int16_t *sdp_hf_only, - const bool is_voip_enabled ) -{ - switch ( input_format ) - { - case IVAS_DEC_INPUT_FORMAT_G192: - *bitstream_format_internal = is_voip_enabled ? VOIP_G192_RTP : G192; - *sdp_hf_only = 0; - break; - case IVAS_DEC_INPUT_FORMAT_MIME: - *bitstream_format_internal = MIME; - *sdp_hf_only = 0; - break; - case IVAS_DEC_INPUT_FORMAT_RTPDUMP: - assert( is_voip_enabled && "RTP dump only supported in VoIP mode" ); - *bitstream_format_internal = VOIP_RTPDUMP; - *sdp_hf_only = 0; - break; - case IVAS_DEC_INPUT_FORMAT_RTPDUMP_HF: - assert( is_voip_enabled && "RTP dump only supported in VoIP mode" ); - *bitstream_format_internal = VOIP_RTPDUMP; - *sdp_hf_only = 1; - break; - default: - return IVAS_ERR_INVALID_BITSTREAM; - break; - } - - return IVAS_ERR_OK; -} - - -/*---------------------------------------------------------------------* - * IVAS_DEC_VoIP_reconfigure() - * - * - *---------------------------------------------------------------------*/ - -static ivas_error IVAS_DEC_VoIP_reconfigure( - IVAS_DEC_HANDLE hIvasDec, - const uint16_t nTransportChannels, - const uint16_t l_ts ) -{ - int16_t apa_buffer_size; - - apa_buffer_size = hIvasDec->nSamplesFrame; - - if ( hIvasDec->apaExecBuffer == NULL ) - { - DECODER_CONFIG_HANDLE hDecoderConfig; - - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) - { - uint16_t wss, css; - float startQuality; - - startQuality = hIvasDec->tsm_quality; - apa_buffer_size = APA_BUF_PER_CHANNEL; - - /* get current renderer type*/ - hDecoderConfig = hIvasDec->st_ivas->hDecoderConfig; - - if ( hDecoderConfig->output_Fs == 8000 ) - { - wss = 1; - css = 1; - } - else if ( hDecoderConfig->output_Fs == 16000 ) - { - wss = 2; - css = 1; - } - else if ( hDecoderConfig->output_Fs == 32000 ) - { - wss = 4; - css = 2; - } - else if ( hDecoderConfig->output_Fs == 48000 ) - { - wss = 6; - css = 3; - } - else - { - return IVAS_ERR_INIT_ERROR; - } - - if ( apa_init( &hIvasDec->hTimeScaler, nTransportChannels ) != IVAS_ERR_OK || - apa_set_rate( hIvasDec->hTimeScaler, hDecoderConfig->output_Fs ) != 0 || - apa_set_complexity_options( hIvasDec->hTimeScaler, wss, css ) != 0 || - apa_set_quality( hIvasDec->hTimeScaler, startQuality, 4, 4 ) != 0 || - apa_set_renderer_granularity( hIvasDec->hTimeScaler, l_ts ) != 0 ) - { - return IVAS_ERR_INIT_ERROR; - } - - if ( hIvasDec->mode == IVAS_DEC_MODE_EVS ) - { - if ( apa_set_evs_compat_mode( hIvasDec->hTimeScaler, true ) != 0 ) - { - return IVAS_ERR_INIT_ERROR; - } - } - - if ( ( hIvasDec->apaExecBuffer = malloc( sizeof( float ) * apa_buffer_size * nTransportChannels ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); - } - - set_zero( hIvasDec->apaExecBuffer, apa_buffer_size * nTransportChannels ); - } - } - else - { - if ( hIvasDec->st_ivas->hDecoderConfig->Opt_tsm ) - { - if ( apa_reconfigure( hIvasDec->hTimeScaler, nTransportChannels, l_ts ) != 0 ) - { - return IVAS_ERR_INIT_ERROR; - } - apa_buffer_size = APA_BUF_PER_CHANNEL; - free( hIvasDec->apaExecBuffer ); - if ( ( hIvasDec->apaExecBuffer = malloc( sizeof( float ) * apa_buffer_size * nTransportChannels ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); - } - set_zero( hIvasDec->apaExecBuffer, apa_buffer_size * nTransportChannels ); - } - /* realloc apa_exe_buffer */ - } - - hIvasDec->nTransportChannelsOld = nTransportChannels; - - return IVAS_ERR_OK; -} -#endif // !IVAS_FLOAT_FIXED diff --git a/lib_dec/lib_dec.h b/lib_dec/lib_dec.h index e44092fb6..28fbe71b9 100644 --- a/lib_dec/lib_dec.h +++ b/lib_dec/lib_dec.h @@ -88,322 +88,6 @@ typedef ivas_error ( *JbmTraceFileWriterFn )( const void *data, void *writer ); /* clang-format off */ -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Decoder function declarations - *---------------------------------------------------------------------*/ - -/* Open, configure, close functions - should be called once per decoder lifetime */ - -/*! r: error code */ -ivas_error IVAS_DEC_Open( - IVAS_DEC_HANDLE *phIvasDec, /* i/o: pointer to an IVAS decoder handle to be opened */ - IVAS_DEC_MODE mode /* i : compatibility mode (EVS or IVAS) */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_Configure( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const uint32_t sampleRate, /* i : output sampling frequency */ - const IVAS_AUDIO_CONFIG outputConfig, /* i : audio configuration */ - const int16_t tsmEnabled, /* i : enable TSM */ - const IVAS_RENDER_FRAMESIZE renderFramesize, /* i : rendering frame size */ - const int16_t customLsOutputEnabled, /* i : enable custom loudspeaker setup handle */ - const int16_t hrtfReaderEnabled, /* i : enable HRTF binary file input */ - const int16_t enableHeadRotation, /* i : enable head rotation for binaural output */ - const int16_t enableExternalOrientation, /* i : enable external orientations */ - const IVAS_HEAD_ORIENT_TRK_T orientation_tracking, /* i : head orientation tracking type */ - const int16_t renderConfigEnabled, /* i : enable Renderer config. file for binaural output */ - const int16_t Opt_non_diegetic_pan, /* i : diegetic or not */ - const float non_diegetic_pan_gain, /* i : non diegetic panning gain */ - const int16_t Opt_dpid_on, /* i : enable directivity pattern option */ - const uint16_t acousticEnvironmentId, /* i : Acoustic environment ID */ - const int16_t delayCompensationEnabled /* i : enable delay compensation */ -); - -void IVAS_DEC_Close( - IVAS_DEC_HANDLE *phIvasDec /* i/o: pointer to IVAS decoder handle */ -); - - -/* Decoding functions - should be called with a configured decoder handle */ - -/*! r: error code */ -ivas_error IVAS_DEC_FeedFrame_Serial( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t *serial, /* i : buffer containing serial input bitstream. Each bit should be stored as a single uint16_t value */ - const uint16_t num_bits, /* i : number of bits in input bitstream */ - int16_t bfi /* i : bad frame indicator flag */ -); - -/*! r: decoder error code */ -ivas_error IVAS_DEC_GetSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesAsked, /* i : number of samples wanted by the caller */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - int16_t *nOutSamples, /* o : number of samples per channel written to output buffer */ - bool *needNewFrame /* o : indication that the decoder needs a new frame */ -); - - -/*! r: error code */ -ivas_error IVAS_DEC_GetObjectMetadata( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ - const uint16_t zero_flag, /* i : if this flag is enabled, this function outputs a zero-initialized metadata struct */ - const uint16_t objectIdx /* i : index of the queried object */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetMasaMetadata( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to metadata from the most recently decoded frame */ - const uint8_t getFromJbmBuffer /* i : get metadata from a JBM buffer */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_FeedHeadTrackData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION orientation, /* i : head-tracking data, listener orientation */ - IVAS_VECTOR3 Pos, /* i : listener position */ - const int16_t subframe_idx /* i : subframe index */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_FeedRefRotData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION rotation /* i : reference rotation data */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_FeedRefVectorData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_VECTOR3 listenerPos, /* i : Listener position */ - const IVAS_VECTOR3 refPos /* i : Reference position */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_FeedExternalOrientationData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_QUATERNION orientation, /* i : external orientation data */ - int8_t enableHeadRotation, /* i : flag to enable head rotation for this frame */ - int8_t enableExternalOrientation, /* i : flag to enable external orientation for this frame */ - int8_t enableRotationInterpolation, /* i : flag to interpolate rotations from current and previous frames */ - int16_t numFramesToTargetOrientation, /* i : number of frames until target orientation is reached */ - const int16_t subframe_idx /* i : subframe index */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_VoIP_FeedFrame( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint8_t *au, /* i : buffer containing input access unit */ - const uint16_t auSize, /* i : size of the access unit */ - const uint16_t rtpSequenceNumber, /* i : RTP sequence number (16 bits) */ - const uint32_t rtpTimeStamp, /* i : RTP timestamp (32 bits) */ - const uint32_t rcvTime_ms, /* i : receive time of the RTP packet in milliseconds */ - const bool qBit /* i : Q bit for AMR-WB IO */ -); - -ivas_error IVAS_DEC_VoIP_SetScale( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t maxScaling, /* i : maximum allowed TSM scale */ - const int16_t scale /* i : TSM scale to set */ -); - -ivas_error IVAS_DEC_TSM_SetQuality( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const float quality /* i : target TSM quality */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_VoIP_GetSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t nSamplesPerChannel, /* i : number of samples per channel requested to be written to output buffer */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - const uint32_t systemTimestamp_ms /* i : current system timestamp */ -#ifdef SUPPORT_JBM_TRACEFILE - , JbmTraceFileWriterFn jbmWriterFn, - void* jbmWriter -#endif -); - -ivas_error IVAS_DEC_Flush( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesPerChannel, /* i : number of samples per channel requested to be written to output buffer */ - int16_t *pcmBuf, /* i/o: buffer for decoded PCM output. The memory must already be allocated and be able to hold the expected number of output samples, based on frame size and number of output channels */ - int16_t *nSamplesFlushed /* o : number of samples flushed */ -); - -/* Setter functions - apply changes to decoder configuration */ - -/*! r: error code */ -ivas_error IVAS_DEC_EnableVoIP( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t jbmSafetyMargin, /* i : allowed delay reserve for JBM, in milliseconds */ - const IVAS_DEC_INPUT_FORMAT inputFormat /* i : format of the input bitstream */ -); - - -ivas_error IVAS_DEC_SetRenderFramesize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_FRAMESIZE render_framesize /* i : render framesize */ -); - -ivas_error IVAS_DEC_GetRenderFramesize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_RENDER_FRAMESIZE *render_framesize /* o : render framesize */ -); - -ivas_error IVAS_DEC_GetRenderFramesizeSamples( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *render_framesize /* o : render framesize in samples */ -); - -ivas_error IVAS_DEC_GetReferencesUpdateFrequency( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *update_frequency /* o : update frequency */ -); - -ivas_error IVAS_DEC_GetNumOrientationSubframes( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *num_subframes /* o : render framesize */ -); - -ivas_error IVAS_DEC_GetRenderFramesizeMs( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint32_t *render_framesize /* o : render framesize in samples */ -); - - -/* Getter functions - retrieve information from a decoder through a handle */ - -/*! r: error code */ -ivas_error IVAS_DEC_GetNumObjects( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - uint16_t *numObjects /* o : number of objects for which the decoder has been configured */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetFormat( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_BS_FORMAT *format /* o : format detected from bitstream fed to the decoder */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetOutputBufferSize( - const IVAS_DEC_HANDLE hIvasDec, /* i : IVAS decoder handle */ - int16_t *outputBufferSize /* o : total number of samples expected in the output buffer for current decoder configuration */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetNumOutputChannels( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *numOutputChannels /* o : number of PCM output channels */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_FeedCustomLsData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_CUSTOM_LS_DATA hLsCustomData /* i : Custom loudspeaker setup data */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetHrtfHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_HANDLE *hHrtfTD /* o : HRTF handle */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetHrtfCRendHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_CREND_HANDLE *hSetOfHRTF /* o : Set of HRTF handle */ -); - -ivas_error IVAS_DEC_GetHrtfFastConvHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_FASTCONV_HANDLE *hHrtfFastConv /* o : FASTCONV HRTF handle */ -); - -ivas_error IVAS_DEC_GetHrtfParamBinHandle( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_DEC_HRTF_PARAMBIN_HANDLE *hHrtfParambin /* o : Parametric binauralizer HRTF handle */ -); - - -/*! r: error code*/ -ivas_error IVAS_DEC_GetRenderConfig( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render config handle */ -); - -/*! r: error code*/ -ivas_error IVAS_DEC_GetDefaultRenderConfig( - IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render config handle */ -); - -/*! r: error code*/ -ivas_error IVAS_DEC_FeedRenderConfig( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_DATA hRenderConfig /* i : Render config data structure */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetDelay( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *nSamples, /* o : decoder delay in samples */ - int32_t *timeScale /* o : time scale of the delay, equal to decoder output sampling rate */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_HasDecodedFirstGoodFrame( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - bool *hasDecodedFirstGoodFrame /* o : flag indicating if the decoder has decoded a good frame since it was configured */ -); - -/*! r: error code */ -ivas_error IVAS_DEC_GetPcmFrameSize( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int32_t *pcmFrameSize /* o : total size of the PCM output frame. This takes into account the number of output channels */ -); - -/*! r: true if decoder has no data in VoIP jitter buffer */ -bool IVAS_DEC_VoIP_IsEmpty( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - const int16_t nSamplesAsked -); - -ivas_error IVAS_DEC_VoIP_Get_CA_offset( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - int16_t *optimum_offset, - int16_t *FEC_hi -); - -#ifdef SUPPORT_JBM_TRACEFILE -ivas_error IVAS_DEC_GetJbmData( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_JBM_TRACE_DATA *JbmTraceData /* o : JBM Trace data */ -); -#endif - -/* Utility functions */ - -/*! r: pointer to an error message string */ -const char *IVAS_DEC_GetErrorMessage( - ivas_error error /* i : decoder error code enum */ -); - -void IVAS_DEC_PrintConfig( - const IVAS_DEC_HANDLE hIvasDec, /* i : IVAS decoder handle */ - const bool quietModeEnabled, /* i : quiet mode flag: if true, reduces the amount of config info printed */ - const bool voipMode -); - - -void IVAS_DEC_PrintDisclaimer( - void -); - -#else /*---------------------------------------------------------------------* * Decoder function declarations *---------------------------------------------------------------------*/ @@ -717,7 +401,6 @@ void IVAS_DEC_PrintConfig( void IVAS_DEC_PrintDisclaimer( void ); -#endif // IVAS_FLOAT_FIXED /* clang-format on */ diff --git a/lib_dec/lib_dec_fx.c b/lib_dec/lib_dec_fx.c index 5e3e40511..3dccb3c87 100644 --- a/lib_dec/lib_dec_fx.c +++ b/lib_dec/lib_dec_fx.c @@ -30,7 +30,6 @@ *******************************************************************************************************/ #include "lib_dec.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_cnst.h" #include "ivas_prot.h" #include "ivas_prot_rend.h" @@ -77,13 +76,8 @@ struct IVAS_DEC bool Opt_VOIP; /* flag indicating VOIP mode with JBM */ Word16 tsm_scale; /* scale for TSM operation */ Word16 tsm_max_scaling; -#ifndef IVAS_FLOAT_FIXED - float *apaExecBuffer; /* Buffer for APA scaling */ - float tsm_quality; -#else Word32 *apaExecBuffer_fx; /* Buffer for APA scaling */ Word16 tsm_quality; /*Q14*/ -#endif PCMDSP_APA_HANDLE hTimeScaler; bool needNewFrame; bool hasBeenFedFrame; @@ -866,7 +860,7 @@ ivas_error IVAS_DEC_FeedFrame_Serial( { MC_LS_SETUP mc_ls_setup; mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( hIvasDec->st_ivas->transport_config ); - hIvasDec->st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); + hIvasDec->st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_ls_setup ); } test(); @@ -1267,7 +1261,7 @@ static ivas_error IVAS_DEC_Setup( { MC_LS_SETUP mc_ls_setup; mc_ls_setup = ivas_mc_map_output_config_to_mc_ls_setup_fx( st_ivas->transport_config ); - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_ls_setup ); + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_ls_setup ); } test(); @@ -1724,7 +1718,6 @@ ivas_error IVAS_DEC_GetNumOutputChannels( * * Get metadata of one object decoded in the most recent frame *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_DEC_GetObjectMetadata( IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ @@ -1789,73 +1782,6 @@ ivas_error IVAS_DEC_GetObjectMetadata( move16(); return IVAS_ERR_OK; } -#else -ivas_error IVAS_DEC_GetObjectMetadata( - IVAS_DEC_HANDLE hIvasDec, /* i/o: IVAS decoder handle */ - IVAS_ISM_METADATA *metadata, /* o : struct where metadata decoded in most recently decoded frame will be written */ - const UWord16 zero_flag, /* i : if this flag is enabled, this function outputs a zero-initialized metadata struct */ - const UWord16 objectIdx /* i : index of the queried object */ -) -{ - Decoder_Struct *st_ivas; - ISM_METADATA_HANDLE hIsmMeta; - - IF( hIvasDec == NULL || hIvasDec->st_ivas == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - st_ivas = hIvasDec->st_ivas; - IF( NE_16( (Word16) st_ivas->ivas_format, ISM_FORMAT ) && NE_16( (Word16) st_ivas->ivas_format, MASA_ISM_FORMAT ) && NE_16( (Word16) st_ivas->ivas_format, SBA_ISM_FORMAT ) ) - { - return IVAS_ERR_WRONG_MODE; - } - - IF( GE_16( objectIdx, st_ivas->nchan_ism ) ) - { - return IVAS_ERR_INVALID_INDEX; - } - - hIsmMeta = st_ivas->hIsmMetaData[objectIdx]; - - IF( hIsmMeta == NULL || zero_flag ) - { - metadata->azimuth = 0.f; - metadata->elevation = 0.f; - metadata->radius = 1.f; - metadata->spread = 0.f; - metadata->gainFactor = 1.f; - metadata->yaw = 0.f; - metadata->pitch = 0.f; - metadata->non_diegetic_flag = 0; - } - ELSE - { -#ifdef IVAS_FLOAT_FIXED - metadata->azimuth = fixedToFloat( hIsmMeta->azimuth_fx, Q22 ); - metadata->elevation = fixedToFloat( hIsmMeta->elevation_fx, Q22 ); - metadata->radius = fixedToFloat( hIsmMeta->radius_fx, Q9 ); - metadata->yaw = fixedToFloat( hIsmMeta->yaw_fx, Q22 ); - metadata->pitch = fixedToFloat( hIsmMeta->pitch_fx, Q22 ); -#else - metadata->azimuth = hIsmMeta->azimuth; - metadata->elevation = hIsmMeta->elevation; - metadata->radius = hIsmMeta->radius; - metadata->yaw = hIsmMeta->yaw; - metadata->pitch = hIsmMeta->pitch; -#endif - metadata->spread = 0.f; - metadata->gainFactor = 1.f; - metadata->non_diegetic_flag = hIsmMeta->non_diegetic_flag; - } - -#ifdef IVAS_FLOAT_FIXED - metadata->azimuth_fx = floatToFixed( metadata->azimuth, Q22 ); - metadata->elevation_fx = floatToFixed( metadata->elevation, Q22 ); -#endif - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IVAS_DEC_GetMasaMetadata( ) @@ -3270,12 +3196,8 @@ static ivas_error printConfigInfo_dec( IF( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) { fprintf( stdout, "Output configuration: mono EVS bit-exact decoding to stereo\n" ); -#ifndef IVAS_FLOAT_FIXED - fprintf( stdout, "Non-diegetic panning: %.2f\n", st_ivas->hDecoderConfig->non_diegetic_pan_gain * 90.f ); -#else float non_diegetic_pan_gain = fixedToFloat( st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, 15 ); fprintf( stdout, "Non-diegetic panning: %.2f\n", non_diegetic_pan_gain * 90.f ); -#endif } ELSE { @@ -3382,12 +3304,8 @@ static ivas_error printConfigInfo_dec( IF( st_ivas->hDecoderConfig->Opt_non_diegetic_pan ) { -#ifndef IVAS_FLOAT_FIXED - fprintf( stdout, "Non-diegetic panning: %.2f\n", st_ivas->hDecoderConfig->non_diegetic_pan_gain * 90.f ); -#else float non_diegetic_pan_gain = fixedToFloat( st_ivas->hDecoderConfig->non_diegetic_pan_gain_fx, 15 ); fprintf( stdout, "Non-diegetic panning: %.2f\n", non_diegetic_pan_gain * 90.f ); -#endif // !IVAS_FLOAT_FIXED } IF( st_ivas->hDecoderConfig->Opt_dpid_on ) @@ -3717,21 +3635,12 @@ static ivas_error IVAS_DEC_VoIP_reconfigure( } apa_buffer_size = APA_BUF_PER_CHANNEL; move16(); -#ifndef IVAS_FLOAT_FIXED - free( hIvasDec->apaExecBuffer ); - IF( ( hIvasDec->apaExecBuffer = malloc( sizeof( float ) * apa_buffer_size * nTransportChannels ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); - } - set_zero( hIvasDec->apaExecBuffer, apa_buffer_size * nTransportChannels ); -#else free( hIvasDec->apaExecBuffer_fx ); IF( ( hIvasDec->apaExecBuffer_fx = malloc( sizeof( Word32 ) * L_mult0( apa_buffer_size, (Word16) nTransportChannels ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate VoIP handle" ); } set_zero2_fx( hIvasDec->apaExecBuffer_fx, L_mult0( apa_buffer_size, (Word16) nTransportChannels ) ); -#endif } /* realloc apa_exe_buffer */ } @@ -3741,4 +3650,3 @@ static ivas_error IVAS_DEC_VoIP_reconfigure( return IVAS_ERR_OK; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/lp_exc_d.c b/lib_dec/lp_exc_d.c index 9644c50d1..e7a8ca967 100644 --- a/lib_dec/lp_exc_d.c +++ b/lib_dec/lp_exc_d.c @@ -39,65 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*---------------------------------------------------------------------* - * lp_filt_exc_dec() - * - * Low-pass filtering of the adaptive exctitation - *---------------------------------------------------------------------*/ - -void lp_filt_exc_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t codec_mode, /* i : codec mode */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t L_subfr, /* i : subframe size */ - const int16_t L_frame, /* i : frame size */ - int16_t lp_flag, /* i : operation mode signaling */ - float *exc /* i/o: pointer to the excitation signal frame */ -) -{ - int16_t i; - float code[L_FRAME]; - - /*-----------------------------------------------------------------* - * Select LP filtering of the adaptive excitation - *-----------------------------------------------------------------*/ - - if ( codec_mode == MODE1 ) - { - if ( lp_flag == NORMAL_OPERATION ) - { - lp_flag = get_next_indice( st, 1 ); - } - } - - /*--------------------------------------------------------------------* - * Find pitch excitation with LP filter - *--------------------------------------------------------------------*/ - - if ( lp_flag == LOW_PASS ) - { - /* pointer positionning to avoid doing it inside the loop */ - if ( codec_mode == MODE2 && L_frame == L_FRAME16k ) - { - for ( i = 0; i < L_subfr; i++ ) - { - code[i] = (float) ( 0.21f * exc[i - 1 + i_subfr] + 0.58f * exc[i + i_subfr] + 0.21f * exc[i + 1 + i_subfr] ); - } - } - else - { - for ( i = 0; i < L_subfr; i++ ) - { - code[i] = (float) ( 0.18f * exc[i - 1 + i_subfr] + 0.64f * exc[i + i_subfr] + 0.18f * exc[i + 1 + i_subfr] ); - } - } - - mvr2r( code, &exc[i_subfr], L_subfr ); - } - - return; -} -#endif diff --git a/lib_dec/lp_exc_d_fx.c b/lib_dec/lp_exc_d_fx.c index cb94c47f7..2358bfa79 100644 --- a/lib_dec/lp_exc_d_fx.c +++ b/lib_dec/lp_exc_d_fx.c @@ -6,7 +6,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*======================================================================*/ /* FUNCTION : lp_filt_exc_dec_fx() */ @@ -86,4 +85,3 @@ void lp_filt_exc_dec_fx( Copy( code, &exc[i_subfr], L_subfr ); } } -#endif diff --git a/lib_dec/lsf_dec.c b/lib_dec/lsf_dec.c index 0628ccd33..f963d7317 100644 --- a/lib_dec/lsf_dec.c +++ b/lib_dec/lsf_dec.c @@ -50,764 +50,9 @@ * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void lsf_mid_dec( Decoder_State *st, const float lsp_new[], const int16_t coder_type, float lsp_mid[] ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void dqlsf_CNG( Decoder_State *st, float *lsf_q ); -#endif - /*---------------------------------------------------------------------* * lsf_dec() * * LSF decoder *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void lsf_dec( - Decoder_State *st, /* i/o: State structure */ - const int16_t tc_subfr, /* i : TC subframe index */ - float *Aq, /* o : quantized A(z) for 4 subframes */ - int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ - float *lsf_new, /* o : de-quantized LSF vector */ - float *lsp_new, /* o : de-quantized LSP vector */ - float *lsp_mid, /* o : de-quantized mid-frame LSP vector */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ - const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -) -{ - int16_t i, nBits, coder_type, no_param_lpc; - int16_t param_lpc[NPRM_LPC_NEW]; - float tmp_old[M + 1], tmp_new[M + 1], enr_old, enr_new; - float lsf_diff; - - coder_type = st->coder_type; - if ( st->core_brate == SID_2k40 ) - { - coder_type = INACTIVE; - } - - if ( coder_type == AUDIO && st->GSC_IVAS_mode > 0 ) - { - coder_type = GENERIC; - } - - /* initialize */ - no_param_lpc = 0; - - /* Find the number of bits for LSF quantization */ - nBits = 0; - if ( st->core_brate == SID_2k40 ) - { - nBits = LSF_BITS_CNG; - } - else - { - if ( st->nelp_mode_dec == 0 && st->ppp_mode_dec == 0 ) - { - nBits = st->acelp_cfg.lsf_bits; - } - else if ( st->nelp_mode_dec == 1 ) - { - if ( coder_type == UNVOICED ) - { - if ( st->bwidth == NB ) - { - nBits = 32; - } - else - { - nBits = 30; - } - } - } - else if ( st->ppp_mode_dec == 1 ) - { - nBits = 26; - } - } - - /* LSF de-quantization */ - lsf_end_dec( st, coder_type, st->bwidth, nBits, lsf_new, param_lpc, LSF_Q_prediction, &no_param_lpc, - tdm_lsfQ_PCh ); - - /* convert quantized LSFs to LSPs */ - lsf2lsp( lsf_new, lsp_new, M, st->sr_core ); - - /* set seed_acelp used in UC mode */ - if ( coder_type == UNVOICED && st->element_mode > EVS_MONO ) - { - st->seed_acelp = 0; - for ( i = no_param_lpc - 1; i >= 0; i-- ) - { - /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ - st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); - } - } - - if ( st->core_brate == SID_2k40 ) - { - /* return if SID frame (conversion to A(z) done in the calling function) */ - return; - } - - /*-------------------------------------------------------------------------------------* - * FEC - update adaptive LSF mean vector - *-------------------------------------------------------------------------------------*/ - - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf_new[i] ) / 3; - } - - if ( st->prev_bfi && coder_type == TRANSITION && ( tc_subfr == ( st->L_frame - L_SUBFR ) ) ) - { - lsf_diff = st->sr_core / (float) ( 2 * ( M + 1 ) ); - st->lsf_old[0] = lsf_diff; - - for ( i = 1; i < M; i++ ) - { - st->lsf_old[i] = st->lsf_old[i - 1] + lsf_diff; - } - - lsf2lsp( st->lsf_old, st->lsp_old, M, st->sr_core ); - } - - /*-------------------------------------------------------------------------------------* - * Mid-frame LSF decoding - * LSP interpolation and conversion of LSPs to A(z) - *-------------------------------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - /* extrapolation in case of unstable LSF convert */ - mvr2r( lsp_new, st->lsp_old, M ); - mvr2r( lsf_new, st->lsf_old, M ); - } - - lsf_mid_dec( st, lsp_new, coder_type, lsp_mid ); - - if ( !( st->prev_bfi && ( coder_type == TRANSITION ) && ( tc_subfr == ( st->L_frame - L_SUBFR ) ) ) ) - { - if ( st->prev_bfi ) - { - /* check, if LSP interpolation can be relaxed */ - lsp2a_stab( st->lsp_old, tmp_old, M ); - enr_old = enr_1_Az( tmp_old, 2 * L_SUBFR ); - - lsp2a_stab( lsp_new, tmp_new, M ); - enr_new = enr_1_Az( tmp_new, 2 * L_SUBFR ); - - if ( enr_new / enr_old < 0.3f ) - { - st->relax_prev_lsf_interp = -1; - if ( st->clas_dec == UNVOICED_CLAS || st->clas_dec == SIN_ONSET || st->clas_dec == INACTIVE_CLAS || coder_type == GENERIC || coder_type == TRANSITION ) - { - st->relax_prev_lsf_interp = 1; - } - } - } - } - - if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) - { - /* update old LSPs/LSFs in case of HQ->ACELP core switching */ - mvr2r( lsp_mid, st->lsp_old, M ); - lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); - } - - if ( tdm_low_rate_mode == 1 && coder_type > UNVOICED ) - { - if ( st->active_cnt == 1 ) - { - mvr2r( lsp_mid, st->lsp_old, M ); - lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); - mvr2r( lsp_new, lsp_mid, M ); - } - - /* LSP interpolation and conversion of LSPs to A(z) - two-subframe mode */ - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, -2 ); - } - else - { - /* LSP interpolation and conversion of LSPs to A(z) */ - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, st->relax_prev_lsf_interp ); - } - - /*------------------------------------------------------------------* - * Check LSF stability (distance between old LSFs and current LSFs) - *------------------------------------------------------------------*/ - - st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); - - return; -} - - -/*------------------------------------------------------------------------------------------* - * lsf_end_dec() - * - * De-quantize frame end LSF vector - *------------------------------------------------------------------------------------------*/ - -void lsf_end_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t coder_type_org, /* i : coding type */ - const int16_t bwidth, /* i : input signal bandwidth */ - const int16_t nBits_in, /* i : number of bits used for ISF quantization*/ - float *qlsf, /* o : quantized LSFs in the cosine domain */ - int16_t *lpc_param, /* i : LPC parameters */ - int16_t *LSF_Q_prediction, /* o : LSF prediction mode */ - int16_t *nb_indices, /* o : number of indices */ - const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -) -{ - float pred0[M]; /* Prediction for the safety-net quantizer (usually mean)*/ - float pred1[M], pred2[M]; /* Prediction for the predictive quantizer*/ - int16_t stages0; /* Amount of stages used by safety-net quantizer*/ - int16_t stages1; /* Amount of stages used by predictive quantizer*/ - int16_t levels0[MAX_VQ_STAGES]; /* Sizes of different codebook stages for safety-net quantizer*/ - int16_t levels1[MAX_VQ_STAGES]; /* Sizes of different codebook stages for predictive quantizer*/ - int16_t i; - int16_t TCQIdx[M / 2 + 4]; - int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES]; - int16_t cumleft; - int16_t lindice[MAX_VQ_STAGES + 3]; /* Predictor selector needs 1 bit and the LVQ indice uses 3 shorts */ - int16_t mode_lvq, mode_lvq_p; - int16_t safety_net, predmode, stages, *levels; - const int16_t *Bit_alloc1 = NULL, *bits; - int16_t num_bits; - int16_t *p_lpc_param; - int16_t nBits; - int16_t coder_type; - int16_t flag_1bit_gran; - float pred3[M]; - - flag_1bit_gran = ( st->element_mode > EVS_MONO ); - nBits = nBits_in; - *nb_indices = 0; - - if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k && st->codec_mode == MODE1 && st->idchan == 0 ) - { - /* this bit is used only for primary channel or mono */ - coder_type = get_next_indice( st, 1 ); - coder_type += 2; - if ( coder_type == GENERIC || ( coder_type == VOICED && flag_1bit_gran == 1 ) ) - { - nBits--; - } - } - else - { - coder_type = coder_type_org; - } - - /*--------------------------------------------------------------------------------* - * LSF de-quantization of SID frames - *--------------------------------------------------------------------------------*/ - - if ( st->core_brate == SID_2k40 ) - { - dqlsf_CNG( st, qlsf ); - v_sort_float( qlsf, 0, M - 1 ); - reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); - - return; - } - - find_pred_mode_float( &predmode, coder_type, bwidth, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); - - /*----------------------------------------------------------------* - * Calculate number of stages and levels for each stage based on the allowed bit allocation - * (subtract one bit for LSF predictor selection) - *----------------------------------------------------------------*/ - - lsf_allocate( nBits - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); - - /*--------------------------------------------------------------------------* - * Select safety_net or predictive mode - *--------------------------------------------------------------------------*/ - - p_lpc_param = lpc_param; - - if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) - { - /* if secondary channel predmode is set to be > 2 */ - predmode += 3; - } - - if ( predmode == 0 ) - { - safety_net = 1; - } - else if ( predmode == 1 ) - { - safety_net = 0; - } - else - { - if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) - { - /* read from param_lpc */ - safety_net = p_lpc_param[0]; - p_lpc_param++; - *nb_indices += 1; - } - else - { - safety_net = get_next_indice( st, 1 ); - } - } - - st->safety_net = safety_net; - - - /* Make sure there are the correct bit allocations */ - if ( st->idchan == 1 && predmode > 2 ) - { - /* use same AR prediction bit allocation for intra and inter modes*/ - lsf_allocate( nBits - 1, mode_lvq, 9, &stages0, &stages1, levels0, levels1, bits0, bits1 ); - stages0 = stages1; - mvs2s( levels1, levels0, stages0 ); - mvs2s( bits1, bits0, stages0 ); - } - - /*--------------------------------------------------------------------------* - * Read indices from array - *--------------------------------------------------------------------------*/ - - if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) - { - /* BC-TCVQ - only in VOICED_WB@16kHz */ - if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) - { - *nb_indices = 10; - TCQIdx[0] = safety_net; - for ( i = 1; i < *nb_indices; i++ ) - { - TCQIdx[i] = *p_lpc_param++; - } - } - else - { - Bit_alloc1 = &BC_TCVQ_BIT_ALLOC_40B[1]; - TCQIdx[0] = safety_net; - for ( i = 0; i < M / 2 + 3; i++ ) - { - TCQIdx[i + 1] = get_next_indice( st, Bit_alloc1[i] ); - } - } - } - else - { - if ( safety_net ) - { - stages = stages0; - levels = levels0; - bits = bits0; - } - else - { - stages = stages1; - levels = levels1; - bits = bits1; - } - - if ( st->codec_mode == MODE2 || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) - { - for ( i = 0; i < stages - 1; i++ ) - { - num_bits = bits[i]; - lindice[i + 1] = *p_lpc_param++; - } - - cumleft = levels[stages - 1]; - while ( cumleft > 0 ) - { - if ( cumleft > LEN_INDICE ) - { - cumleft -= LEN_INDICE; - } - else - { - cumleft = 0; - } - - lindice[i + 1] = *p_lpc_param++; - i++; - } - *nb_indices += i; - } - else - { - for ( i = 0; i < stages - 1; i++ ) - { - num_bits = bits[i]; - lindice[i + 1] = get_next_indice( st, num_bits ); - } - - cumleft = levels[stages - 1]; - while ( cumleft > 0 ) - { - if ( cumleft > LEN_INDICE ) - { - cumleft -= LEN_INDICE; - num_bits = LEN_INDICE; - } - else - { - num_bits = cumleft; - cumleft = 0; - } - - lindice[i + 1] = get_next_indice( st, num_bits ); - i++; - } - } - } - - if ( st->reset_mem_AR == 1 ) - { - for ( i = 0; i < M; i++ ) - { - st->mem_AR[i] = ModeMeans[mode_lvq][i]; - } - st->reset_mem_AR = 0; - } - - /*------------------------------------------------------------------------------------------* - * De-quantize LSF vector - *------------------------------------------------------------------------------------------*/ - - *LSF_Q_prediction = SAFETY_NET; - - /* VOICED_WB@16kHz */ - if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) - { - /* BC-TCVQ decoder */ - safety_net = qlsf_ARSN_tcvq_Dec_16k( qlsf, TCQIdx, nBits - 1 ); - - /* Update mem_MA */ - mvr2r( qlsf, st->mem_MA, M ); - - if ( safety_net ) - { - mvr2r( ModeMeans[mode_lvq], pred0, M ); - } - else - { - for ( i = 0; i < M; i++ ) - { - pred0[i] = ModeMeans[mode_lvq][i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - ModeMeans[mode_lvq][i] ); - } - *LSF_Q_prediction = AUTO_REGRESSIVE; - } - v_add( qlsf, pred0, qlsf, M ); - } - else - { - /* Safety-net */ - mvr2r( ModeMeans[mode_lvq], pred0, M ); - - /* for mem_MA update */ - for ( i = 0; i < M; i++ ) - { - pred1[i] = pred0[i] + MU_MA * st->mem_MA[i]; - } - - /* TD stereo SCh: perform intra-frame prediction with pulling-to-mean */ - if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) - { -#ifdef IVAS_FLOAT_FIXED - Word16 tdm_lsfQ_PCh_fx[M]; - Word16 pred3_fx[M]; - for ( i = 0; i < M; i++ ) - { - tdm_lsfQ_PCh_fx[i] = (Word16) ( ( tdm_lsfQ_PCh[i] ) * 2.56f ); - pred3_fx[i] = (Word16) ( ( pred3[i] ) * 2.56f ); - } - - tdm_SCh_LSF_intra_pred_fx( st->element_brate, tdm_lsfQ_PCh_fx, pred3_fx ); - - for ( i = 0; i < M; i++ ) - { - pred3[i] = ( pred3_fx[i] ) / 2.56f; - } -#else - tdm_SCh_LSF_intra_pred( st->element_brate, tdm_lsfQ_PCh, pred3 ); -#endif - } - - if ( safety_net ) - { - /* LVQ */ - if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) - { - - /* intra mode*/ - st->BER_detect = st->BER_detect | - vq_dec_lvq( 0, qlsf, &lindice[1], stages0, M, 9, /*mode_lvq_p,*/ levels0[stages0 - 1] ); - - v_add( qlsf, pred3, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - } - else - { - st->BER_detect = st->BER_detect | - vq_dec_lvq( 1, qlsf, &lindice[1], stages0, M, mode_lvq, levels0[stages0 - 1] ); - - v_add( qlsf, pred0, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - } - } - else - { - if ( predmode == 4 ) - { - mode_lvq_p = 9; - predmode = 2; - } - st->BER_detect = st->BER_detect | - vq_dec_lvq( 0, qlsf, &lindice[1], stages1, M, mode_lvq_p, levels1[stages1 - 1] ); - - if ( predmode == 1 || ( predmode == 4 ) ) /* MA only */ - { - mvr2r( qlsf, st->mem_MA, M ); - v_add( qlsf, pred1, qlsf, M ); - *LSF_Q_prediction = MOVING_AVERAGE; - } - else - { - /* AR */ - for ( i = 0; i < M; i++ ) - { - pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); - } - v_add( qlsf, pred2, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - *LSF_Q_prediction = AUTO_REGRESSIVE; - } - } - } - - - /*--------------------------------------------------------------------------* - * Sort the quantized vector - * Verify stability - * Update AR-predictor memory - *--------------------------------------------------------------------------*/ - - /* Sort the quantized vector */ - v_sort_float( qlsf, 0, M - 1 ); - - /* Verify stability */ - reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); - - /* Update predictor memory */ - mvr2r( qlsf, st->mem_AR, M ); - - st->mode_lvq = mode_lvq; - - return; -} - - -/*-------------------------------------------------------------------* - * lsf_mid_dec() - * - * Decode mid-frame LSFs - *-------------------------------------------------------------------*/ - -static void lsf_mid_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const float lsp_new[], /* i : quantized LSPs from frame end */ - const int16_t coder_type, /* i : coder type */ - float lsp_mid[] /* o : quantized LSPs */ -) -{ - int16_t j, idx; - int16_t nb_bits; - float qlsf0[M], qlsf1[M], qlsf[M]; - const float *ratio_float = NULL; - int16_t bad_spacing; - - bad_spacing = 0; - - /* Convert LSPs to LSFs */ - lsp2lsf( st->lsp_old, qlsf0, M, st->sr_core ); - lsp2lsf( lsp_new, qlsf1, M, st->sr_core ); - - /* Codebook selection */ - if ( st->ppp_mode_dec == 1 ) - { - nb_bits = 1; - ratio_float = &( tbl_mid_voi_wb_1b[0] ); - } - else if ( st->nelp_mode_dec == 1 ) - { - nb_bits = 4; - ratio_float = &( tbl_mid_unv_wb_4b[0] ); - } - else - { - nb_bits = st->acelp_cfg.mid_lsf_bits; - - /* codebook selection */ - if ( coder_type == VOICED ) - { - switch ( nb_bits ) - { - case 5: - { - ratio_float = tbl_mid_voi_wb_5b; - break; - } - case 4: - { - ratio_float = tbl_mid_voi_wb_4b; - break; - } - case 1: - { - ratio_float = tbl_mid_voi_wb_1b; - break; - } - } - } - else if ( coder_type == UNVOICED ) - { - ratio_float = tbl_mid_unv_wb_5b; - } - else - { - /* GENERIC, TRANSITION, AUDIO and INACTIVE */ - switch ( nb_bits ) - { - case 5: - { - ratio_float = tbl_mid_gen_wb_5b; - break; - } - case 4: - { - ratio_float = tbl_mid_gen_wb_4b; - break; - } - case 2: - { - ratio_float = tbl_mid_gen_wb_2b; - break; - } - } - } - } - - /* Retrieve mid-frame LSF index */ - idx = get_next_indice( st, nb_bits ); - - /* Calculation of mid-LSF vector */ - for ( j = 0; j < M; j++ ) - { - qlsf[j] = ( 1.0f - ratio_float[idx * M + j] ) * qlsf0[j] + ratio_float[idx * M + j] * qlsf1[j]; - } - - /* check for incorrect LSF ordering */ - if ( st->mid_lsf_int == 1 ) - { - for ( j = 1; j < M; j++ ) - { - if ( qlsf[j] < qlsf[j - 1] ) - { - bad_spacing = 1; - break; - } - } - } - - /* Redo mid-LSF interpolation with 0.4 in case of LSF instability */ - if ( st->prev_bfi || ( st->mid_lsf_int == 1 && bad_spacing ) ) - { - for ( j = 0; j < M; j++ ) - { - /* redo mid-LSF interpolation with 0.4 */ - qlsf[j] = 0.4f * qlsf0[j] + 0.6f * qlsf1[j]; - - /* ensure correct ordering of LSF indices */ - if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - } - else - { - /* otherwise, use regular LSF spacing and ordering as in the encoder */ - for ( j = 0; j < M; j++ ) - { - if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - } - - if ( st->prev_bfi ) - { - /* continue redoing mid-LSF interpolation with 0.4 in order not to propagate the error */ - st->mid_lsf_int = 1; - } - - if ( st->safety_net ) - { - /* safety-net encountered -> stop redoing mid-LSF interpolation with 0.4 */ - st->mid_lsf_int = 0; - } - - reorder_lsf( qlsf, LSF_GAP_MID, M, st->sr_core ); - /* convert back to LSPs */ - lsf2lsp( qlsf, lsp_mid, M, st->sr_core ); - - return; -} - -/*----------------------------------------------------------------------------------------------* - * dqlsf_CNG() - * - * LSF de-quantizer for SID frames (uses 28 bits, 4 for VQ, 24 for LVQ) - * - * Note: - * LP-CNG LSF decoder does not need to know the sampling rate, - * the sampling rate data is embedded inside the LSF coefficients - * If the highest order LSF coefficient (lsf_q[M-1]) is smaller than 6350 then Fs=12.8kHz - * If the highest order LSF coefficient (lsf_q[M-1]) is larger than 6350 then Fs=16kHz - *----------------------------------------------------------------------------------------------*/ - -static void dqlsf_CNG( - Decoder_State *st, /* i/o: decoder state structure */ - float *lsf_q /* o : decoded LSFs */ -) -{ - int16_t indice[4]; - - indice[0] = get_next_indice( st, 4 ); - indice[1] = get_next_indice( st, LEN_INDICE ); - indice[2] = get_next_indice( st, LSF_BITS_CNG - 4 - LEN_INDICE ); - - st->BER_detect = st->BER_detect | - deindex_lvq_cng( &indice[1], lsf_q, indice[0], LSF_BITS_CNG - 4 ); - /* The sampling frequency of the LP-CNG frame can be determined by checking the value of the highest order LSF - coefficient (last coefficient of lsf_q). If the last decoded LSF coefficient (lsf_q[15]) is larger than 6350 - the decoded frame is WB2 with sampling rate of 16 kHz, otherwise it is sampled at 12.8kHz and contains - either NB or WB LSF data. */ - - v_add( lsf_q, &CNG_SN1[indice[0] * M], lsf_q, M ); - - if ( ( ( st->L_frame == L_FRAME16k ) && ( lsf_q[M - 1] <= WB_LIMIT_LSF ) ) || ( ( st->L_frame < L_FRAME16k ) && ( lsf_q[M - 1] > WB_LIMIT_LSF ) ) ) - { - st->BER_detect = 1; - } - - return; -} -#endif diff --git a/lib_dec/lsf_dec_fx.c b/lib_dec/lsf_dec_fx.c index 31002b8bc..50b5ec341 100644 --- a/lib_dec/lsf_dec_fx.c +++ b/lib_dec/lsf_dec_fx.c @@ -9,7 +9,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "ivas_prot.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local functions *-------------------------------------------------------------------*/ @@ -1243,4 +1242,3 @@ void lsf_mid_dec_fx( return; } -#endif diff --git a/lib_dec/lsf_msvq_ma_dec.c b/lib_dec/lsf_msvq_ma_dec.c index 32fdcb28c..313c2798e 100644 --- a/lib_dec/lsf_msvq_ma_dec.c +++ b/lib_dec/lsf_msvq_ma_dec.c @@ -41,242 +41,3 @@ #include "rom_com.h" #include "basop_proto_func.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * lsf_msvq_ma_decprm_ivas() - * - * - *---------------------------------------------------------------------*/ - -int16_t lsf_msvq_ma_decprm_ivas( - Decoder_State *st, - int16_t *param_lpc ) -{ - int16_t i, nbits_lpc, bits_midlpc; - int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES], stages0, stages1, stages, - levels0[MAX_VQ_STAGES], levels1[MAX_VQ_STAGES], *bits; - int16_t predmode, mode_lvq, mode_lvq_p, safety_net; - - bits_midlpc = MIDLSF_NBITS; - - if ( st->sr_core == INT_FS_16k && st->coder_type == UNVOICED ) - { - find_pred_mode_float( &predmode, GENERIC, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); - } - else - { - if ( st->core == TCX_20_CORE ) - { - find_pred_mode_float( &predmode, AUDIO, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); - } - else - { - find_pred_mode_float( &predmode, st->coder_type, 1 - st->narrowBand /*st->bwidth*/, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); - } - } - - lsf_allocate( ENDLSF_NBITS - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); - - nbits_lpc = 0; - - if ( predmode == 2 ) - { - /* there is choice between SN and AR prediction */ - safety_net = get_next_indice( st, 1 ); - - if ( safety_net == 1 ) - { - stages = stages0; - bits = bits0; - } - else - { - stages = stages1; - bits = bits1; - } - *param_lpc = safety_net; - param_lpc++; - nbits_lpc++; - } - else - { - stages = stages1; - bits = bits1; - } - - for ( i = 0; i < stages - 1; i++ ) - { - *param_lpc = get_next_indice( st, bits[i] ); - param_lpc++; - nbits_lpc += bits[i]; - } - *param_lpc = get_next_indice( st, LEN_INDICE ); - param_lpc++; - nbits_lpc += LEN_INDICE; - - - *param_lpc = get_next_indice( st, bits[i] - LEN_INDICE ); - param_lpc++; - nbits_lpc += bits[i] - LEN_INDICE; - - if ( st->coder_type != VOICED && st->core == ACELP_CORE && st->acelp_cfg.midLpc ) - { - - *param_lpc = get_next_indice( st, bits_midlpc ); - nbits_lpc += bits_midlpc; - } - - return nbits_lpc; -} - - -/*---------------------------------------------------------------------* - * lsf_bctcvq_decprm_ivas() - * - * - *---------------------------------------------------------------------*/ - -int16_t lsf_bctcvq_decprm_ivas( - Decoder_State *st, - int16_t *param_lpc ) -{ - int16_t i, nbits_lpc, num_par; - const int16_t *bits1; - - num_par = 10; - bits1 = BC_TCVQ_BIT_ALLOC_40B; - - nbits_lpc = 0; - - for ( i = 0; i < num_par; i++ ) - { - *param_lpc = get_next_indice( st, bits1[i] ); - param_lpc++; - nbits_lpc += bits1[i]; - } - - return nbits_lpc; -} - - -/*---------------------------------------------------------------------* - * D_lsf_tcxlpc_ivas() - * - * - *---------------------------------------------------------------------*/ - -/*! r: number of indices */ -int16_t D_lsf_tcxlpc_ivas( - const int16_t indices[], /* i : VQ indices */ - float lsf_q[], /* o : quantized lsf */ - Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ - const int16_t narrowband, /* i : narrowband flag */ - const int16_t cdk, /* i : codebook selector */ - const float mem_MA[] /* i : MA memory */ -) -{ - int16_t i, NumIndices; - float pred[M16k]; - const float *means; - Word16 lsf_q_ind[M16k]; - float lsf_rem_q[M]; - Word16 lsf_rem_q_ind[M]; - - NumIndices = 1; - - msvq_dec_float( lsf_codebook_flt[narrowband][cdk], lsf_dims_ivas, lsf_offs_ivas, TCXLPC_NUMSTAGES, M, M, indices + NumIndices, 0, NULL, lsf_q, lsf_q_ind ); - - NumIndices += TCXLPC_NUMSTAGES; - - if ( indices[0] ) - { - /* Only add contribution if flag is enabled */ - - - msvq_dec_float( lsf_ind_codebook_flt[narrowband][cdk], lsf_ind_dims_ivas, lsf_ind_offs, TCXLPC_IND_NUMSTAGES, M, M, indices + NumIndices, 0, NULL, lsf_rem_q, lsf_rem_q_ind ); - NumIndices += TCXLPC_IND_NUMSTAGES; - - /* Add to MA-removed vector */ - for ( i = 0; i < M; ++i ) - { - lsf_q_ind[i] = add( lsf_q_ind[i], lsf_rem_q_ind[i] ); - } - } - - /* Inter-frame prediction */ - means = lsf_means_float[narrowband]; - - for ( i = 0; i < M; ++i ) - { - pred[i] = means[i] + MU_MA * mem_MA[i]; - } - - /* Add prediction */ - for ( i = 0; i < M; ++i ) - { - lsf_q[i] += pred[i]; - lsf_q_ind[i] = add( lsf_q_ind[i], LSFM( means[i] ) ); - } - reorder_lsf( lsf_q, TCXLPC_LSF_GAP_FLT, M, INT_FS_12k8 ); - - basop_reorder_lsf( lsf_q_ind, LSF_GAP_VAL( TCXLPC_LSF_GAP_FLT ), M, INT_FS_FX ); - - if ( lsp_q_ind ) - { - basop_lsf2lsp( lsf_q_ind, lsp_q_ind ); - } - - return NumIndices; -} - - -/*---------------------------------------------------------------------* - * dec_lsf_tcxlpc_ivas() - * - * - *---------------------------------------------------------------------*/ - -/*! r: number of bits read */ -int16_t dec_lsf_tcxlpc_ivas( - Decoder_State *st, /* i/o: Decoder state */ - int16_t **indices, /* o : Ptr to VQ indices */ - const int16_t narrowband, /* i : narrowband flag */ - const int16_t cdk /* i : codebook selector */ -) -{ - int16_t i, start_bit_pos; - float lsf_q_ignored[M]; - Word16 lsf_q_ind[M]; - int16_t *flag; - - flag = *indices; /* Save pointer */ - *flag = 0; /* Set flag to disabled */ - ++*indices; - - start_bit_pos = st->next_bit_pos; - - for ( i = 0; i < TCXLPC_NUMSTAGES; ++i ) - { - **indices = get_next_indice( st, lsf_numbits[i] ); - ++*indices; - } - - /* Decode independent lsf */ - msvq_dec_float( lsf_codebook_flt[narrowband][cdk], lsf_dims_ivas, lsf_offs_ivas, TCXLPC_NUMSTAGES, M, M, flag + 1, 0, NULL, lsf_q_ignored, lsf_q_ind ); - - /* Update flag */ - *flag = lsf_ind_is_active_flt( lsf_q_ind, lsf_means_float[narrowband], narrowband, cdk ); - - if ( *flag ) - { - for ( i = 0; i < TCXLPC_IND_NUMSTAGES; ++i ) - { - **indices = get_next_indice( st, lsf_ind_numbits[i] ); - ++*indices; - } - } - - return st->next_bit_pos - start_bit_pos; -} -#endif diff --git a/lib_dec/lsf_msvq_ma_dec_fx.c b/lib_dec/lsf_msvq_ma_dec_fx.c index f57aee0e1..61e338c9c 100644 --- a/lib_dec/lsf_msvq_ma_dec_fx.c +++ b/lib_dec/lsf_msvq_ma_dec_fx.c @@ -10,7 +10,6 @@ #include "basop_util.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED #ifndef swap #define swap( x, y, type ) \ { \ @@ -307,4 +306,3 @@ Word16 dec_lsf_tcxlpc( } return sub( st->next_bit_pos, start_bit_pos ); } -#endif diff --git a/lib_dec/nelp_dec.c b/lib_dec/nelp_dec.c index 9537ff858..895fdaae2 100644 --- a/lib_dec/nelp_dec.c +++ b/lib_dec/nelp_dec.c @@ -47,174 +47,3 @@ * * NELP decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void nelp_decoder( - Decoder_State *st, /* i/o: decoder static memory */ - float *exc_nelp, /* o : adapt. excitation/total exc*/ - float *exc, /* o : adapt. excitation exc */ - int16_t bfi, /* i : frame error rate */ - const int16_t coder_type, /* i : coding type */ - float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - int16_t i, fid = 0; - SC_VBR_DEC_HANDLE hSC_VBR; - float ptr[L_FRAME], filtRes[L_FRAME], gain_fac; - float Gains[10], Gain, E3, E2, R; - float ptr_tmp[L_FRAME]; - int16_t iG1, iG2[2]; - - hSC_VBR = st->hSC_VBR; - - if ( ( st->last_nelp_mode_dec == 1 ) && ( st->bwidth != st->last_bwidth ) ) - { - st->last_nelp_mode_dec = 0; - } - - if ( coder_type == UNVOICED && st->bwidth == NB ) - { - if ( st->last_nelp_mode_dec != 1 ) - { - set_f( hSC_VBR->bp1_filt_mem_nb_dec, 0, 7 * 2 ); - } - } - else if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - if ( st->last_nelp_mode_dec != 1 ) - { - set_f( hSC_VBR->bp1_filt_mem_wb_dec, 0, 4 * 2 ); - } - } - - if ( st->last_nelp_mode_dec != 1 ) - { - set_f( hSC_VBR->shape1_filt_mem_dec, 0, 20 ); - set_f( hSC_VBR->shape2_filt_mem_dec, 0, 20 ); - set_f( hSC_VBR->shape3_filt_mem_dec, 0, 20 ); - } - - if ( bfi == 0 ) - { - if ( st->rf_frame_type == RF_NELP && st->use_partial_copy ) - { - iG1 = st->rf_indx_nelp_iG1; - iG2[0] = st->rf_indx_nelp_iG2[0]; - iG2[1] = st->rf_indx_nelp_iG2[1]; - } - else - { - /* Do Unvoiced/NELP Decoding */ - iG1 = get_next_indice( st, 5 ); - iG2[0] = get_next_indice( st, 6 ); - iG2[1] = get_next_indice( st, 6 ); - } - - if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - if ( st->rf_frame_type == RF_NELP && st->use_partial_copy ) - { - fid = st->rf_indx_nelp_fid; - } - else - { - fid = get_next_indice( st, 2 ); - } - } - - dequantize_uvg( iG1, iG2, Gains, st->bwidth ); - } - else - { - for ( i = 1, Gain = 0.001f; i <= L_SUBFR; i++ ) - { - Gain += SQR( exc[-i] ); - } - - Gain = (float) ( sqrt( Gain / L_SUBFR ) ); - Gain *= 0.8f; /* Some scale down of energy since it is an erasure */ - - set_f( Gains, Gain, 10 ); - } - - if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - gain_fac = 1.16f; - } - else - { - gain_fac = 1.37f; - } - - generate_nelp_excitation( &( hSC_VBR->nelp_dec_seed ), Gains, ptr, gain_fac ); - - if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_wb, bp1_den_coef_wb, 4, hSC_VBR->bp1_filt_mem_wb_dec ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - } - - if ( coder_type == UNVOICED && st->bwidth == NB ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_nb_fx_order7_flt, bp1_den_coef_nb_fx_order7_flt, 7, hSC_VBR->bp1_filt_mem_nb_dec ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - } - - for ( i = 0, E3 = 0.001f; i < L_FRAME; i++ ) - { - E3 += SQR( ptr[i] ); - } - - if ( coder_type == UNVOICED && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, shape1_num_coef, shape1_den_coef, 10, hSC_VBR->shape1_filt_mem_dec ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - - switch ( fid ) - { - case 1: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); - - /* filter the residual to desired shape */ - polezero_filter( ptr, ptr_tmp, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - - break; - case 2: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); - - /* filter the residual to desired shape */ - polezero_filter( ptr, ptr_tmp, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); - - mvr2r( ptr_tmp, ptr, L_FRAME ); - - break; - default: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem_dec ); - - polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem_dec ); - - break; - } - - for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) - { - E2 += SQR( ptr[i] ); - } - - R = (float) sqrt( E3 / E2 ); - - for ( i = 0; i < L_FRAME; i++ ) - { - ptr[i] *= R; - } - } - - mvr2r( ptr, exc_nelp, L_FRAME ); - set_f( gain_buf, 0.f, NB_SUBFR16k ); - - return; -} -#endif diff --git a/lib_dec/nelp_dec_fx.c b/lib_dec/nelp_dec_fx.c index a1e2bbf39..9eb7ab203 100644 --- a/lib_dec/nelp_dec_fx.c +++ b/lib_dec/nelp_dec_fx.c @@ -27,7 +27,6 @@ /* RETURN ARGUMENTS : */ /* _ None */ /*===================================================================*/ -#ifdef IVAS_FLOAT_FIXED static void normalize_arr( Word16 *arr, Word16 *qf, Word16 size, Word16 hdr ) { Word16 i, max_s = 0; @@ -432,4 +431,3 @@ void nelp_decoder_fx( set16_fx( gain_buf, 0, NB_SUBFR16k ); return; } -#endif diff --git a/lib_dec/peak_vq_dec.c b/lib_dec/peak_vq_dec.c index 56cb50050..7b039f26f 100644 --- a/lib_dec/peak_vq_dec.c +++ b/lib_dec/peak_vq_dec.c @@ -48,22 +48,6 @@ * Local function prototypes *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void dequant_peaks( Decoder_State *st, float *vect_out, const float *peak_gain ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t hvq_dec_pos( Decoder_State *st, int16_t *pos_vec, const int16_t length, const int16_t num_peaks ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t sparse_dec_pos( Decoder_State *st, int16_t *out, const int16_t length ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void peak_vq_dec( Decoder_State *st, float *coefs_out, const int32_t core_brate, const int16_t num_bits, const int16_t *ynrm, int16_t *R, int16_t *vq_peak_idx, int16_t *Npeaks, const int16_t core ); -#endif - /*-------------------------------------------------------------------------- * hvq_dec() @@ -71,40 +55,6 @@ static void peak_vq_dec( Decoder_State *st, float *coefs_out, const int32_t core * HVQ decoder *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hvq_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t num_bits, /* i : Number of available bits */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t *ynrm, /* i : Envelope coefficients */ - int16_t *R, /* i/o: Bit allocation/updated bit allocation */ - float *noise_level, /* o : Noise level */ - int16_t *peak_idx, /* o : Peak position vector */ - int16_t *Npeaks, /* o : Total number of peaks */ - float *coefsq_norm, /* o : Output vector */ - const int16_t core /* i : Core */ -) -{ - int16_t i; - int16_t bits; - int16_t noise_level_idx; - - bits = num_bits; - - for ( i = 0; i < HVQ_BWE_NOISE_BANDS; i++ ) - { - noise_level_idx = get_next_indice( st, 2 ); - noise_level[i] = usdequant( noise_level_idx, 0.0f, 0.1f ); - - bits -= 2; - } - - peak_vq_dec( st, coefsq_norm, core_brate, bits, ynrm, R, peak_idx, Npeaks, core ); - - return; -} -#endif - /*-------------------------------------------------------------------------- * peak_vq_dec() @@ -112,249 +62,6 @@ void hvq_dec( * Vector de-quantization of MDCT peaks *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void peak_vq_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float *coefs_out, /* o : Output coefficient vector */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t num_bits, /* i : Number of bits for HVQ */ - const int16_t *ynrm, /* i : Envelope coefficients */ - int16_t *R, /* i/o: Bit allocation/updated bit allocation */ - int16_t *vq_peak_idx, /* o : Peak position vector */ - int16_t *Npeaks, /* o : Number of peaks */ - const int16_t core /* i : Core type */ -) -{ - int16_t vq_peaks, i, j, k, FlagN, hcode_l, diff; - int16_t bin_th, max_peaks, pvq_bands; - int16_t nf_seed = RANDOM_INITSEED; - int16_t nf_gains_idx[HVQ_NF_GROUPS], pgain_difidx[HVQ_MAX_PEAKS], pvq_norm[MAX_PVQ_BANDS]; - int16_t gain_bits_array[MAX_PVQ_BANDS]; - int16_t pos_bits; - float nf_gains[HVQ_NF_GROUPS], peak_gains[HVQ_MAX_PEAKS]; - int32_t manE_peak, manPkEnrg; /* (man, exp) representation ported from BASOP for interoperability */ - int16_t expE_peak, expPkEnrg; - float pvq_vector[HVQ_PVQ_BUF_LEN]; - int16_t res_vec[HVQ_THRES_BIN_32k]; - int16_t k_sort[HVQ_MAX_PVQ_WORDS]; - int16_t pvq_inp_vector[HVQ_PVQ_BUF_LEN]; - int16_t npulses[MAX_PVQ_BANDS]; - int16_t pvq_bits, Rk[MAX_PVQ_BANDS]; - float fg_pred[NB_SFM_MAX]; - int16_t Rk_f[MAX_PVQ_BANDS]; /* Q3 */ - int16_t sel_bnds[HVQ_NUM_SFM_24k]; - int16_t n_sel_bnds; - int16_t hvq_band_end[MAX_PVQ_BANDS]; - int16_t hvq_band_start[MAX_PVQ_BANDS]; - int16_t hvq_band_width[MAX_PVQ_BANDS]; - int16_t n; - int16_t s; - float normq; - - set_s( gain_bits_array, 0, MAX_PVQ_BANDS ); - set_f( pvq_vector, 0.0f, HVQ_PVQ_BUF_LEN ); - set_s( npulses, 0, MAX_PVQ_BANDS ); - set_s( pvq_inp_vector, 0, HVQ_PVQ_BUF_LEN ); - - /* Set bitrate dependent variables */ - assert( ( core_brate > HQ_16k40 && core_brate <= HQ_48k ) && "HVQ rate not supported" ); - max_peaks = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA ); - - bin_th = HVQ_THRES_BIN_24k; - if ( core_brate >= HQ_BWE_CROSSOVER_BRATE ) - { - bin_th = HVQ_THRES_BIN_32k; - } - - /* Get number of peaks */ - vq_peaks = get_next_indice( st, 5 ); - vq_peaks = max_peaks - vq_peaks; - *Npeaks = vq_peaks; - diff = 5; - - /* safety check in case of bit errors */ - if ( *Npeaks < HVQ_MIN_PEAKS ) - { - st->BER_detect = 1; - vq_peaks = HVQ_MIN_PEAKS; - *Npeaks = HVQ_MIN_PEAKS; - } - - /* De-quantize peak positions */ - for ( i = 0; i < bin_th; i++ ) - { - res_vec[i] = 0; - } - - /* Unpack HVQ codewords */ - pos_bits = hvq_dec_pos( st, res_vec, bin_th, vq_peaks ); - diff += pos_bits; - - for ( i = 0, j = 0; i < bin_th && j < vq_peaks; i++ ) /* safety check in case of bit errors */ - { - if ( res_vec[i] ) - { - vq_peak_idx[j++] = i; - } - } - - /* safety check in case of bit errors */ - if ( j < vq_peaks ) - { - st->BER_detect = 1; - vq_peaks = j - 1; - *Npeaks = j - 1; - } - - /* Huffman or differential coding */ - FlagN = get_next_indice( st, 1 ); - - /* De-quantize peak gains */ - pgain_difidx[0] = get_next_indice( st, GAIN0_BITS ); - - /* safety check in case of bit errors */ - if ( pgain_difidx[0] > 44 ) - { - st->BER_detect = 1; - pgain_difidx[0] = 44; - } - peak_gains[0] = dicn_pg[pgain_difidx[0]] * sign( (float) res_vec[vq_peak_idx[0]] ); - - hcode_l = 0; - if ( FlagN ) - { - huff_dec( st, vq_peaks - 1, MAX_PG_HUFFLEN, NUM_PG_HUFFLEN, hvq_pg_huff_thres, hvq_pg_huff_offset, hvq_pg_huff_tab, &pgain_difidx[1] ); - for ( i = 1; i < vq_peaks; i++ ) - { - hcode_l += pgain_huffsizn[pgain_difidx[i]]; - } - } - else - { - for ( i = 1; i < vq_peaks; i++ ) - { - pgain_difidx[i] = get_next_indice( st, GAINI_BITS ); - hcode_l += GAINI_BITS; - } - } - - for ( i = 1; i < vq_peaks; i++ ) - { - pgain_difidx[i] += pgain_difidx[i - 1] - 15; - - /* safety check in case of bit errors */ - if ( pgain_difidx[i] > 44 || pgain_difidx[i] < 0 ) - { - st->BER_detect = 1; - pgain_difidx[i] = 44; - } - - peak_gains[i] = dicn_pg[pgain_difidx[i]] * sign( (float) res_vec[vq_peak_idx[i]] ); - } - - /* Scale up peak gains and accumulate peak energy */ - /* Simulating BASOP code for interoperability */ - manE_peak = 0; - expE_peak = 32; - for ( i = 0; i < vq_peaks; i++ ) - { - peak_gains[i] *= 4.0f; - manPkEnrg = manPkEnrg_tbl[pgain_difidx[i]]; - expPkEnrg = expPkEnrg_tbl[pgain_difidx[i]]; - floating_point_add_float( &manE_peak, &expE_peak, manPkEnrg, expPkEnrg ); - } - - /* Number of bits used for peak gain quantization */ - diff += FLAGN_BITS + GAIN0_BITS + hcode_l; - - /* De-quantize peaks */ - for ( i = 0; i < vq_peaks; i++ ) - { - dequant_peaks( st, &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i] ); - - diff += 9; - } - - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - nf_gains_idx[i] = get_next_indice( st, 5 ); - nf_gains[i] = 0.5f * dicn[nf_gains_idx[i]]; - diff += 5; - } - - pvq_bits = num_bits - diff; - - /* Calculate number of PVQ bands to code and assign bits */ - pvq_bands = hvq_pvq_bitalloc( pvq_bits, core_brate, st->bwidth, ynrm, manE_peak, expE_peak, Rk, R, sel_bnds, &n_sel_bnds ); - - /* safety check in case of bit errors */ - if ( ( pvq_bands == 0 ) && st->element_mode == EVS_MONO ) /* PVQ bands may be zero for IVAS */ - { - st->BER_detect = 1; - } - - pvq_bits -= HVQ_PVQ_GAIN_BITS * pvq_bands; - - /* Get band limits for concatenated PVQ target */ - hvq_concat_bands( pvq_bands, sel_bnds, n_sel_bnds, hvq_band_start, hvq_band_width, hvq_band_end ); - - s = 0; - for ( k = 0; k < pvq_bands; k++ ) - { - k_sort[k] = k; - Rk_f[k] = Rk[k] * 8; - } - - pvq_decode_frame( st, pvq_vector, npulses, pvq_inp_vector, hvq_band_start, hvq_band_end, hvq_band_width, pvq_bands, Rk_f, pvq_bits, core ); - - fine_gain_pred( hvq_band_start, hvq_band_end, hvq_band_width, k_sort, npulses, NULL, NULL, pvq_bands, pvq_vector, pvq_inp_vector, fg_pred, core ); - - fine_gain_dec( st, k_sort, pvq_bands, gain_bits_array, fg_pred ); - - apply_gain( k_sort, hvq_band_start, hvq_band_end, pvq_bands, fg_pred, pvq_vector ); - - i = 0; - n = 0; - s = 0; - for ( k = 0; k < pvq_bands; k++ ) - { - pvq_norm[k] = get_next_indice( st, HVQ_PVQ_GAIN_BITS ); - pvq_norm[k] += 8; - - diff += HVQ_PVQ_GAIN_BITS; - - j = 0; - if ( k >= pvq_bands - n_sel_bnds ) - { - i = band_start_harm[sel_bnds[s++]]; - } - while ( j < hvq_band_width[k] ) - { - normq = dicn[pvq_norm[k]]; - if ( coefs_out[i] == 0 ) - { - coefs_out[i] = pvq_vector[n] * normq; - j++; - n++; - } - i++; - } - } - /* Noise fill unqantized coeffs with one gain per group */ - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - for ( j = i * ( bin_th / HVQ_NF_GROUPS ); j < ( i + 1 ) * ( bin_th / HVQ_NF_GROUPS ); j++ ) - { - if ( coefs_out[j] == 0 ) - { - coefs_out[j] = ( (float) own_random( &nf_seed ) / MAX16B ) * nf_gains[i]; - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------------- * dequant_peaks() @@ -362,199 +69,9 @@ static void peak_vq_dec( * Reads codebook vector and scales peak *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void dequant_peaks( - Decoder_State *st, /* i/o: decoder state structure */ - float *vect_out, /* o : Quantized vector */ - const float *peak_gain /* i : Peak gain */ -) -{ - float xq[4]; - const float *tmp; - int16_t i, hvq_cb_rev; - int16_t cb_idx; - - hvq_cb_rev = get_next_indice( st, 1 ); - cb_idx = get_next_indice( st, 8 ); - - if ( hvq_cb_rev ) - { - tmp = &hvq_peak_cb[cb_idx * 4 + 3]; - for ( i = 0; i < 4; i++ ) - { - xq[i] = tmp[-i]; - } - } - else - { - mvr2r( &hvq_peak_cb[cb_idx * 4], xq, 4 ); - } - if ( vect_out[0] == 0 ) - { - vect_out[0] = xq[0] * *peak_gain; - vect_out[1] = xq[1] * *peak_gain; - } - else - { - if ( fabs( peak_gain[-1] ) <= fabs( *peak_gain ) ) - { - vect_out[0] = xq[0] * *peak_gain; - vect_out[1] = xq[1] * *peak_gain; - } - else - { - if ( vect_out[1] == 0 || fabs( peak_gain[-1] ) <= fabs( *peak_gain ) ) - { - vect_out[1] = xq[1] * *peak_gain; - } - } - } - vect_out[2] = *peak_gain; - vect_out[3] = xq[2] * *peak_gain; - vect_out[4] = xq[3] * *peak_gain; - - return; -} -#endif /*-------------------------------------------------------------------------- * hvq_dec_pos() * * HVQ decode peak positions *--------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static int16_t hvq_dec_pos( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *pos_vec, /* o : decoded peak positions */ - const int16_t length, /* i : length */ - const int16_t num_peaks /* i : number of peaks */ -) -{ - int16_t peak_idx[HVQ_MAX_PEAKS]; - int16_t delta[HVQ_MAX_PEAKS]; - int16_t sign_vec[HVQ_MAX_PEAKS]; - - int16_t mode; - int16_t num_bits; - int16_t i, j; - - num_bits = 0; - set_s( pos_vec, 0, length ); - - mode = get_next_indice( st, 1 ); - num_bits += 1; - - if ( mode == HVQ_CP_DELTA ) - { - huff_dec( st, num_peaks, HVQ_CP_HUFF_MAX_CODE, HVQ_CP_HUFF_NUM_LEN, hvq_cp_huff_thres, hvq_cp_huff_offset, hvq_cp_huff_tab, delta ); - - for ( i = 0; i < num_peaks; i++ ) - { - num_bits += hvq_cp_huff_len[delta[i]]; - } - - peak_idx[0] = delta[0] - HVQ_CP_HUFF_OFFSET; - /* safety check in case of bit errors */ - if ( peak_idx[0] < 2 ) - { - peak_idx[0] = 2; - st->BER_detect = 1; - } - for ( i = 1; i < num_peaks; i++ ) - { - peak_idx[i] = delta[i] + peak_idx[i - 1] + HVQ_CP_HUFF_OFFSET; - /* safety check in case of bit errors */ - if ( peak_idx[i] >= HVQ_THRES_BIN_32k ) - { - peak_idx[i] = HVQ_THRES_BIN_32k - 1; - st->BER_detect = 1; - } - } - - for ( i = 0; i < num_peaks; i++ ) - { - pos_vec[peak_idx[i]] = 1; - } - } - else - { - num_bits += sparse_dec_pos( st, pos_vec, length ); - } - - for ( i = 0; i < num_peaks; i++ ) - { - sign_vec[i] = ( get_next_indice_1( st ) == 0 ) ? -1 : 1; - } - num_bits += num_peaks; - - for ( i = 0, j = 0; i < length && j < num_peaks; i++ ) /* safety check in case of bit errors */ - { - if ( pos_vec[i] ) - { - pos_vec[i] *= sign_vec[j++]; - } - } - - return num_bits; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * sparse_dec_pos() - * - * Sparse decode positions - *--------------------------------------------------------------------------*/ - -/*! r: number of bits decoded */ -static int16_t sparse_dec_pos( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *out, /* o : decoded peak positions */ - const int16_t length /* i : length */ -) -{ - int16_t layer2[HVQ_CP_L2_MAX]; - int16_t layer_length; - int16_t i, j; - int16_t bits; - int16_t idx, val; - - set_s( layer2, 0, HVQ_CP_L2_MAX ); - set_s( out, 0, length ); - bits = 0; - - layer_length = (int16_t) ( (float) length / HVQ_CP_L1_LEN + 0.5 ); - - for ( i = 0; i < layer_length; i++ ) - { - layer2[i] = get_next_indice_1( st ); - } - bits += layer_length; - - for ( j = 0; j < layer_length; j++ ) - { - if ( layer2[j] ) - { - idx = get_next_indice( st, HVQ_CP_MAP_IDX_LEN ); - bits += HVQ_CP_MAP_IDX_LEN; - - val = hvq_cp_layer1_map5[idx]; - - /* safety check in case of bit errors */ - if ( j == 0 && val > 4 ) /* out[0] and out[1] are invalid positions */ - { - st->BER_detect = 1; - val = 4; - } - for ( i = min( ( j + 1 ) * HVQ_CP_L1_LEN, length ) - 1; i >= j * HVQ_CP_L1_LEN; i-- ) - { - out[i] = val & 1; - val >>= 1; - } - } - } - - return bits; -} -#endif diff --git a/lib_dec/peak_vq_dec_fx.c b/lib_dec/peak_vq_dec_fx.c index 9a3251836..87d7e9cf3 100644 --- a/lib_dec/peak_vq_dec_fx.c +++ b/lib_dec/peak_vq_dec_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" #include "enh64.h" -#ifdef IVAS_FLOAT_FIXED #define PK_VQ_NOISE_DELTA ( (Word16) 3277 ) /* 0.1 in Q15 */ /*------------------------------------------------------------------------* @@ -617,4 +616,3 @@ static Word16 sparse_dec_pos_fx( return bits; } -#endif diff --git a/lib_dec/pit_dec.c b/lib_dec/pit_dec.c index 3574218f3..7d906b12e 100644 --- a/lib_dec/pit_dec.c +++ b/lib_dec/pit_dec.c @@ -41,801 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED - -/*----------------------------------------------------------* - * pit_decode_flt() - * - * Decode OL pitch lag - *----------------------------------------------------------*/ - -/*! r: floating pitch value */ -float pit_decode_flt( - Decoder_State *st, /* i/o: decoder state structure */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - int16_t i_subfr, /* i : subframe index */ - const int16_t coder_type, /* i : coding type */ - int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ - int16_t *T0, /* o : close loop integer pitch */ - int16_t *T0_frac, /* o : close loop fractional part of the pitch */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max, /* i/o: delta search max */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - float pitch; - int16_t pitch_index, nBits, pit_flag; - - pitch_index = 0; - - /*----------------------------------------------------------------* - * Set pit_flag = 0 for every subframe with absolute pitch search - *----------------------------------------------------------------*/ - - pit_flag = i_subfr; - if ( i_subfr == 2 * L_SUBFR ) - { - pit_flag = 0; - } - - /*-------------------------------------------------------* - * Retrieve the pitch index - *-------------------------------------------------------*/ - - if ( !Opt_AMR_WB ) - { - /*----------------------------------------------------------------* - * pitch Q: Set limit_flag to 0 for restrained limits, and 1 for extended limits - *----------------------------------------------------------------*/ - - if ( i_subfr == 0 ) - { - *limit_flag = 1; - - if ( coder_type == VOICED ) - { - *limit_flag = 2; /* double-extended limits */ - } - - if ( coder_type == GENERIC && core_brate == ACELP_7k20 ) - { - *limit_flag = 0; - } - } - else if ( i_subfr == 2 * L_SUBFR && coder_type == GENERIC && core_brate <= ACELP_13k20 ) - { - if ( *T0 > ( PIT_FR1_EXTEND_8b + PIT_MIN ) >> 1 ) - { - *limit_flag = 0; - } - } - - /*-------------------------------------------------------* - * Retrieve the number of Q bits - *-------------------------------------------------------*/ - - nBits = 0; - if ( coder_type != AUDIO ) - { - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_subfr]; - - pitch_index = get_next_indice( st, nBits ); - } - - /*-------------------------------------------------------* - * Pitch decoding in AUDIO mode - * (both ACELP@12k8 and ACELP@16k cores) - *-------------------------------------------------------*/ - - if ( coder_type == AUDIO ) - { - if ( L_subfr == L_FRAME / 2 && i_subfr != 0 ) - { - pit_flag = L_SUBFR; - } - - if ( pit_flag == 0 ) - { - nBits = 10; - } - else - { - nBits = 6; - } - - pitch_index = get_next_indice( st, nBits ); - - if ( L_subfr == L_FRAME / 2 && i_subfr != 0 && pitch_index >= 32 ) /* safety check in case of bit errors */ - { - pitch_index = pitch_index >> 1; - st->BER_detect = 1; - } - - pit_Q_dec_flt( 0, pitch_index, nBits, 4, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - else if ( coder_type == VOICED ) - { - /*-------------------------------------------------------* - * Pitch decoding in VOICED mode - * (ACELP@12k8 core only) - *-------------------------------------------------------*/ - - if ( i_subfr == 2 * L_SUBFR ) - { - pit_flag = i_subfr; - } - - pit_Q_dec_flt( 0, pitch_index, nBits, 4, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - else if ( st->idchan == 1 && ( tdm_Pitch_reuse_flag == 1 || nBits == 4 ) ) - { - /*-------------------------------------------------------* - * Pitch decoding with reusing of primary channel information - *-------------------------------------------------------*/ - int16_t loc_T0, loc_frac, delta; - - delta = 4; - pit_flag = L_SUBFR; - - if ( L_subfr == 2 * L_SUBFR ) - { - loc_T0 = (int16_t) ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ); - loc_frac = (int16_t) ( ( ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ) - loc_T0 ) * 4.0f ); - } - else - { - loc_T0 = (int16_t) tdm_Pri_pitch_buf[i_subfr / L_SUBFR]; - loc_frac = (int16_t) ( ( tdm_Pri_pitch_buf[i_subfr / L_SUBFR] - loc_T0 ) * 4.0f ); - } - - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, loc_T0, loc_frac, T0_min, T0_max ); - - if ( nBits > 0 ) - { - pit_Q_dec_flt( 0, pitch_index, nBits, delta, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - else - { - *T0 = loc_T0; - *T0_frac = loc_frac; - } - } - else - { - /*-------------------------------------------------------* - * Pitch decoding in GENERIC mode - * (both ACELP@12k8 and ACELP@16k cores) - *-------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - pit_Q_dec_flt( 0, pitch_index, nBits, 8, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - else - { - pit16k_Q_dec_flt( pitch_index, nBits, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - } - } - - /*-------------------------------------------------------* - * Pitch decoding in AMR-WB IO mode - *-------------------------------------------------------*/ - - else - { - *limit_flag = 0; - - if ( i_subfr == 0 || ( i_subfr == 2 * L_SUBFR && core_brate == ACELP_8k85 ) ) - { - nBits = 8; - } - else - { - nBits = 5; - } - - if ( core_brate > ACELP_8k85 ) - { - nBits = 6; - - if ( i_subfr == 0 || i_subfr == 2 * L_SUBFR ) - { - nBits = 9; - } - } - - pitch_index = get_next_indice( st, nBits ); - - pit_Q_dec_flt( 1, pitch_index, nBits, 8, pit_flag, *limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - - /*-------------------------------------------------------* - * Compute floating pitch output - *-------------------------------------------------------*/ - - pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - - return pitch; -} - - -/*---------------------------------------------------------------------* - * abs_pit_dec_flt() - * - * Decode the absolute pitch - *---------------------------------------------------------------------*/ - -void abs_pit_dec_flt( - const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ - int16_t pitch_index, /* i : pitch index */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac /* o : pitch fraction */ -) -{ - if ( limit_flag == 0 ) - { - if ( fr_steps == 2 ) - { - if ( pitch_index < ( PIT_FR1_8b - PIT_MIN ) * 2 ) - { - *T0 = PIT_MIN + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( ( *T0 - PIT_MIN ) * 2 ); - *T0_frac *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_8b - ( ( PIT_FR1_8b - PIT_MIN ) * 2 ); - *T0_frac = 0; - } - } - else if ( fr_steps == 4 ) - { - if ( pitch_index < ( PIT_FR2_9b - PIT_MIN ) * 4 ) - { - *T0 = PIT_MIN + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN ) * 4; - } - else if ( pitch_index < ( ( PIT_FR2_9b - PIT_MIN ) * 4 + ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ) ) - { - pitch_index -= ( PIT_FR2_9b - PIT_MIN ) * 4; - *T0 = PIT_FR2_9b + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( *T0 - PIT_FR2_9b ) * 2; - ( *T0_frac ) *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_9b - ( ( PIT_FR2_9b - PIT_MIN ) * 4 ) - ( ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ); - *T0_frac = 0; - } - } - else /* fr_steps == 0 */ - { - /* not used in the codec */ - } - } - else if ( limit_flag == 1 ) /* extended Q range */ - { - if ( fr_steps == 2 ) - { - if ( pitch_index < ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ) - { - *T0 = PIT_MIN_EXTEND + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( ( *T0 - PIT_MIN_EXTEND ) * 2 ); - *T0_frac *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_EXTEND_8b - ( ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ); - *T0_frac = 0; - } - } - else if ( fr_steps == 4 ) - { - if ( pitch_index < ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) - { - *T0 = PIT_MIN_EXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN_EXTEND ) * 4; - } - else if ( pitch_index < ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 + ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ) ) - { - pitch_index -= ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4; - *T0 = PIT_FR2_EXTEND_9b + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( *T0 - PIT_FR2_EXTEND_9b ) * 2; - ( *T0_frac ) *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_EXTEND_9b - ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) - ( ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ); - *T0_frac = 0; - } - } - else /* fr_steps == 0 */ - { - /* not used in the codec */ - } - } - else /* limit_flag == 2 */ - { - if ( fr_steps == 2 ) - { - if ( pitch_index < ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ) - { - *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 2 ); - *T0_frac *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_DOUBLEEXTEND_8b - ( ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ); - *T0_frac = 0; - } - } - else if ( fr_steps == 4 ) - { - if ( pitch_index < ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) - { - *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 4; - } - else if ( pitch_index < ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 + ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ) ) - { - pitch_index -= ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4; - *T0 = PIT_FR2_DOUBLEEXTEND_9b + ( pitch_index / 2 ); - *T0_frac = pitch_index - ( *T0 - PIT_FR2_DOUBLEEXTEND_9b ) * 2; - ( *T0_frac ) *= 2; - } - else - { - *T0 = pitch_index + PIT_FR1_DOUBLEEXTEND_9b - ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) - ( ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ); - *T0_frac = 0; - } - } - else /* fr_steps == 0 */ - { - /* not used in the codec */ - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * delta_pit_dec_flt() - * - * Decode delta pitch - *---------------------------------------------------------------------*/ - -void delta_pit_dec_flt( - const int16_t fr_steps, /* i : fractional resolution steps (0, 2, 4) */ - const int16_t pitch_index, /* i : pitch index */ - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac, /* o : pitch fraction */ - const int16_t T0_min /* i : delta search min */ -) -{ - if ( fr_steps == 0 ) - { - *T0 = T0_min + pitch_index; - *T0_frac = 0; - } - else if ( fr_steps == 2 ) - { - *T0 = T0_min + pitch_index / 2; - *T0_frac = pitch_index - ( *T0 - T0_min ) * 2; - *T0_frac *= 2; - } - else if ( fr_steps == 4 ) - { - *T0 = T0_min + pitch_index / 4; - *T0_frac = pitch_index - ( *T0 - T0_min ) * 4; - } - - return; -} - - -/*-------------------------------------------------* - * pit_Q_dec_flt() - * - * pitch decoding - *-------------------------------------------------*/ - -void pit_Q_dec_flt( - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t pitch_index, /* i : pitch index */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t delta, /* i : Half the CL searched interval */ - const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac, /* o : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max, /* i/o: delta search max */ - int16_t *BER_detect /* o : BER detect flag */ -) -{ - if ( nBits == 10 ) /* absolute decoding with 10 bits */ - { - if ( limit_flag == 0 ) - { - *T0 = PIT_MIN + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN ) * 4; - } - else if ( limit_flag == 1 ) - { - *T0 = PIT_MIN_EXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN_EXTEND ) * 4; - } - else /* limit_flag == 2 */ - { - *T0 = PIT_MIN_DOUBLEEXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT_MIN_DOUBLEEXTEND ) * 4; - } - } - else if ( nBits == 9 ) /* absolute decoding with 9 bits */ - { - abs_pit_dec_flt( 4, pitch_index, limit_flag, T0, T0_frac ); - - /* find T0_min and T0_max for delta search */ - if ( Opt_AMR_WB ) - { - limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ - } - } - else if ( nBits == 8 ) /* absolute decoding with 8 bits */ - { - abs_pit_dec_flt( 2, pitch_index, limit_flag, T0, T0_frac ); - - /* find T0_min and T0_max for delta search */ - if ( Opt_AMR_WB ) - { - limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ - } - } - else if ( nBits == 6 ) /* relative decoding with 6 bits */ - { - delta_pit_dec_flt( 4, pitch_index, T0, T0_frac, *T0_min ); - } - else if ( nBits == 5 ) /* relative decoding with 5 bits */ - { - if ( delta == 8 ) - { - delta_pit_dec_flt( 2, pitch_index, T0, T0_frac, *T0_min ); - } - else /* delta == 4 */ - { - delta_pit_dec_flt( 4, pitch_index, T0, T0_frac, *T0_min ); - } - } - else /* nBits == 4 */ /* relative decoding with 4 bits */ - { - if ( delta == 8 ) - { - delta_pit_dec_flt( 0, pitch_index, T0, T0_frac, *T0_min ); - } - else /* delta == 4 */ - { - delta_pit_dec_flt( 2, pitch_index, T0, T0_frac, *T0_min ); - } - } - - /* biterror detection mechanism */ - if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT_MAX << 2 ) + 2 && pit_flag == 0 && !Opt_AMR_WB ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - *BER_detect = 1; - } - - if ( !Opt_AMR_WB ) - { - /* find T0_min and T0_max for delta search */ - limit_T0( L_FRAME, delta, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - - return; -} - -/*-------------------------------------------------* - * pit16k_Q_dec_flt() - * - * pitch decoding @16kHz core - *-------------------------------------------------*/ - -void pit16k_Q_dec_flt( - const int16_t pitch_index, /* i : pitch index */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac, /* o : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max, /* i/o: delta search max */ - int16_t *BER_detect /* o : BER detect flag */ -) -{ - int16_t index; - - if ( nBits == 10 ) /* absolute decoding with 10 bits */ - { - { - if ( pitch_index < ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ) - { - *T0 = PIT16k_MIN_EXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( ( *T0 - PIT16k_MIN_EXTEND ) * 4 ); - } - else - { - index = pitch_index - ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4; - *T0 = PIT16k_FR2_EXTEND_10b + ( index / 2 ); - *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_10b ) * 2; - ( *T0_frac ) *= 2; - } - } - } - else if ( nBits == 9 ) /* absolute decoding with 9 bits */ - { - { - if ( pitch_index < ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) - { - *T0 = PIT16k_MIN_EXTEND + ( pitch_index / 4 ); - *T0_frac = pitch_index - ( *T0 - PIT16k_MIN_EXTEND ) * 4; - } - else if ( pitch_index < ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 + ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ) ) - { - index = pitch_index - ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4; - *T0 = PIT16k_FR2_EXTEND_9b + ( index / 2 ); - *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_9b ) * 2; - ( *T0_frac ) *= 2; - } - else - { - *T0 = pitch_index + PIT16k_FR1_EXTEND_9b - ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) - ( ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ); - *T0_frac = 0; - } - } - } - else /* nBits == 6 */ /* relative decoding with 6 bits */ - { - delta_pit_dec_flt( 4, pitch_index, T0, T0_frac, *T0_min ); - } - - /* biterror detection mechanism */ - if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT16k_MAX << 2 ) && nBits >= 9 ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - *BER_detect = 1; - } - - /* find T0_min and T0_max for delta search */ - limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); - - return; -} - - -/*----------------------------------------------------------* - * Mode2_pit_decode_flt() - * - * Decode pitch lag - *----------------------------------------------------------*/ - -/*! r: floating pitch value */ -float Mode2_pit_decode_flt( - const int16_t coder_type, /* i : coding model */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t L_subfr, /* i : sub-frame length */ - int16_t **pt_indice, /* i/o: quantization indices pointer */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* o : close loop fractional part of the pitch */ - int16_t *T0_res, /* i/o: pitch resolution */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr1b, - const int16_t pit_fr2, - const int16_t pit_max, - const int16_t pit_res_max ) -{ - float pitch; - int16_t pit_res_max2; - - if ( coder_type == 0 ) /*Unvoiced Coding do nothing*/ - { - *T0 = L_subfr; - *T0_frac = 0; - *T0_res = 1; - } - else if ( coder_type == 1 ) /* 8/4/4/4 (EVS) */ - { - if ( i_subfr == 0 ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = ( pit_res_max >> 1 ); - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 2 ) /* 8/5/8/5 (EVS) */ - { - - if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_subfr ) ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = ( pit_res_max >> 1 ); - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 3 ) /* 9/6/6/6 (HRs- VC) */ - { - pit_res_max2 = pit_res_max; - if ( pit_min == PIT_MIN_16k ) - { - pit_res_max2 = pit_res_max >> 1; - } - - if ( i_subfr == 0 ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = pit_res_max2; - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 4 ) /* 9/6/9/6 (AMRWB) */ - { - pit_res_max2 = pit_res_max; - if ( pit_min == PIT_MIN_16k ) - { - pit_res_max2 = pit_res_max >> 1; - } - - if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_subfr ) ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = pit_res_max2; - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 8 ) /* 8/5/5/5 (RF all pred mode) */ - { - if ( i_subfr == 0 ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = ( pit_res_max >> 1 ); - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 9 ) /* 8/0/8/0 (RF gen pred mode) */ - { - if ( i_subfr == 0 ) - { - Mode2_abs_pit_dec_flt( T0, T0_frac, T0_res, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - *T0_res = ( pit_res_max >> 1 ); - Mode2_delta_pit_dec_flt( T0, T0_frac, *T0_res, T0_min, T0_min_frac, pt_indice ); - } - } - else /*RCELP 8 bits pitch delay*/ - { - assert( 0 ); - } - - /*-------------------------------------------------------* - * Compute floating pitch output - *-------------------------------------------------------*/ - - pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / (float) ( *T0_res ); /* save subframe pitch values */ - - return pitch; -} - - -/*---------------------------------------------------------------------* - * Mode2_abs_pit_dec_flt() - * - * Decode the absolute pitch - *---------------------------------------------------------------------*/ - -void Mode2_abs_pit_dec_flt( - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac, /* o : pitch fraction */ - int16_t *T0_res, /* o : pitch resolution */ - int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr2, - const int16_t pit_res_max ) -{ - int16_t index; - int16_t pit_res_max_half; - - index = **pt_indice; - ( *pt_indice )++; - pit_res_max_half = pit_res_max >> 1; - - if ( index < ( pit_fr2 - pit_min ) * pit_res_max ) - { - *T0 = pit_min + ( index / pit_res_max ); - - *T0_frac = index - ( *T0 - pit_min ) * pit_res_max; - *T0_res = pit_res_max; - } - else if ( index < ( ( pit_fr2 - pit_min ) * pit_res_max + ( pit_fr1 - pit_fr2 ) * pit_res_max_half ) ) - { - index -= ( pit_fr2 - pit_min ) * pit_res_max; - - *T0 = pit_fr2 + ( index / pit_res_max_half ); - - *T0_frac = index - ( *T0 - pit_fr2 ) * pit_res_max_half; - *T0_res = pit_res_max_half; - } - else - { - *T0 = index + pit_fr1 - ( ( pit_fr2 - pit_min ) * pit_res_max ) - ( ( pit_fr1 - pit_fr2 ) * pit_res_max_half ); - *T0_frac = 0; - *T0_res = 1; - } - - return; -} - - -/*---------------------------------------------------------------------* - * Routine Mode2_delta_pit_dec_flt() - * - * Decode delta pitch - *---------------------------------------------------------------------*/ - -void Mode2_delta_pit_dec_flt( - int16_t *T0, /* o : integer pitch lag */ - int16_t *T0_frac, /* o : pitch fraction */ - int16_t T0_res, /* i : pitch resolution */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_min_frac, /* i : delta search min */ - int16_t **pt_indice /* i/o: pointer to Vector of Q indexes */ -) -{ - int16_t index; - - index = **pt_indice; - ( *pt_indice )++; - - *T0 = *T0_min + ( index + *T0_min_frac ) / T0_res; - - *T0_frac = index + *T0_min_frac - ( *T0 - *T0_min ) * T0_res; - - return; -} -#endif diff --git a/lib_dec/pit_dec_fx.c b/lib_dec/pit_dec_fx.c index a2b5a7618..b72c2bae1 100644 --- a/lib_dec/pit_dec_fx.c +++ b/lib_dec/pit_dec_fx.c @@ -8,7 +8,6 @@ #include "cnst.h" #include "prot_fx.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED #define inv_T0_res InvIntTable /*----------------------------------------------------------* @@ -1290,4 +1289,3 @@ void delta_pit_dec_fx( return; } -#endif diff --git a/lib_dec/pitch_extr.c b/lib_dec/pitch_extr.c index 8f13c5d13..53a6b154a 100644 --- a/lib_dec/pitch_extr.c +++ b/lib_dec/pitch_extr.c @@ -43,307 +43,3 @@ #include "prot.h" #include "basop_util.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Pitch prediction for frame erasure using linear fitting * - *-----------------------------------------------------------------*/ - -void pitch_pred_linear_fit_flt( - const int16_t nbLostCmpt, /* i : bfi counter */ - const int16_t last_good, /* i : last classification type */ - float *old_pitch_buf, /* i : pitch lag buffer */ - float *old_fpitch, /* i : */ - float *T0_out, /* o : estimated close loop pitch */ - const int16_t pit_min, /* i : Minimum pitch lag */ - const int16_t pit_max, /* i : Maximum pitch lag */ - float *mem_pitch_gain, /* i : pitch gain [0] is the most recent subfr gain */ - const int16_t limitation, - const int16_t plc_use_future_lag, /* i : */ - int16_t *extrapolationFailed, /* o : flag if extrap decides not to change the pitch*/ - const int16_t nb_subfr /* i : number of ACELP subframes */ -) -{ - float T0 = 0; - float mdy, dy[5], ftmp; - int16_t lcor = 5; - int16_t imax, i; - float pg[8], ml[8]; /* local buffer for pitch gain and mem_lag*/ - int16_t no_subfr_pred; - float mem_lag[2 * NB_SUBFR16k + 2]; - - - if ( nb_subfr == 4 ) - { - for ( i = 0; i < 2 * NB_SUBFR + 2; i++ ) - { - mem_lag[i] = old_pitch_buf[2 * NB_SUBFR + 1 - i]; - } - } - else /* L_frame == L_FRAME16k */ - { - for ( i = 0; i < 2 * NB_SUBFR16k + 2; i++ ) - { - mem_lag[i] = old_pitch_buf[2 * NB_SUBFR16k + 1 - i]; - } - } - - if ( (int16_t) *old_fpitch > pit_max ) - { - *extrapolationFailed = 1; - *T0_out = pit_max; - printf( "\n WARNING: *old_fpitch > pit_max : old_fpitch = %f, pit_max = %i \n\n", *old_fpitch, pit_max ); - return; - } - - if ( nbLostCmpt == 1 && last_good >= UNVOICED_TRANSITION && last_good < ONSET ) - { - if ( plc_use_future_lag ) - { - no_subfr_pred = 2; - } - else - { - no_subfr_pred = 4; - } - - /* copy to local buffers, depending on availability of info about future subframes */ - mvr2r( mem_pitch_gain + no_subfr_pred - 2, pg, 8 ); - mvr2r( mem_lag + no_subfr_pred - 2, ml, 8 ); - - mdy = 0.0f; - for ( i = ( lcor - 1 ); i >= 0; i-- ) - { - dy[i] = ( ml[i] - ml[i + 1] ); - mdy += dy[i]; - } - - /*---------------------------------------------------* - * remove maximum variation - *---------------------------------------------------*/ - ftmp = (float) fabs( dy[0] ); - imax = 0; - for ( i = 1; i < lcor; i++ ) - { - if ( ftmp < (float) fabs( dy[i] ) ) - { - ftmp = (float) fabs( dy[i] ); - imax = i; - } - } - if ( ( fabs( dy[imax] ) < 0.15f * *old_fpitch ) && ( ( limitation == 1 ) || ( fabs( dy[imax] ) < fabs( mdy ) ) ) ) - { - Word16 pg_fx[5]; - Word32 ml_fx[5]; - Word32 pit, a, b, pita, pitb; - Word16 sum0; - Word16 const timeWeight[5] = { 20480 /*1.25f Q14*/, 18432 /*1.125f Q14*/, 16384 /*1.f Q14*/, 14336 /*0.875f Q14*/, 12288 /*.75f Q14*/ }; /*Q14*/ - Word16 a1, a2, a3, a4, a5, tmpa, tmpb, b1, b2, b3, b4, b5; - Word16 a_e, b_e, sum0_q; - - /* convert gains and lags to fixed precision */ - for ( i = 0; i < lcor; i++ ) - { - pg_fx[i] = (int16_t) ( pg[i] / pow( 2.f, -15 + 1 ) ); /* Q14 */ - ml_fx[i] = (int32_t) ( ml[i] / pow( 2.f, -31 + 15 ) ); /* Q16 */ - } - -#define WMC_TOOL_SKIP - FOR( i = 0; i < lcor; i++ ) - { - pg_fx[i] = mult( mult( pg_fx[i], pg_fx[i] ), timeWeight[i] ); /*Q12 'til pg[lcor-1], Q14 'til pg[8]*/ - move16(); - } - - /* Linear prediction (estimation) of pitch */ - /* sum0=(pg[1]+4*pg[2]+9*pg[3]+16*pg[4])*pg[0]+(pg[2]+4*pg[3]+9*pg[4])*pg[1]+(pg[3]+4*pg[4])*pg[2]+pg[4]*pg[3];*/ - { - Word32 t1, t2, t3, t4, t5, t6, t7; - Word16 e1, e2, e3, e4, e5, e6, e7; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif - t1 = L_mult0( pg_fx[4], pg_fx[3] ); /*Q24*/ /* t1 = pg[4]*pg[3] */ - e1 = 7; - t2 = L_add( L_deposit_l( pg_fx[3] ), L_shl( L_deposit_l( pg_fx[4] ), 2 ) ); /*Q12*/ - e2 = norm_l( t2 ); - t2 = L_shl( t2, e2 ); /*Q12,-e2*/ - t2 = Mpy_32_16_1( t2, pg_fx[2] ); /*Q9,-e2*/ /* t2 = (pg[3]+4*pg[4])*pg[2] */ - e2 = sub( 22, e2 ); - t3 = L_add( L_deposit_l( pg_fx[2] ), L_add( L_shl( L_deposit_l( pg_fx[3] ), 2 ), L_add( L_shl( L_deposit_l( pg_fx[4] ), 3 ), L_deposit_l( pg_fx[4] ) ) ) ); /*Q12*/ - e3 = norm_l( t3 ); - t3 = L_shl( t3, e3 ); /*Q12,-e3*/ - t3 = Mpy_32_16_1( t3, pg_fx[1] ); /*Q9,-e3*/ /* t3 = (pg[2]+4*pg[3]+9*pg[4])*pg[1] */ - e3 = sub( 22, e3 ); - t4 = L_add( pg_fx[1], L_add( L_shl( L_deposit_l( pg_fx[2] ), 2 ), L_add( L_add( L_shl( L_deposit_l( pg_fx[3] ), 3 ), L_deposit_l( pg_fx[3] ) ), L_shl( L_deposit_l( pg_fx[4] ), 4 ) ) ) ); /*Q12*/ - e4 = norm_l( t4 ); - t4 = L_shl( t4, e4 ); /*Q12,-e4*/ - t4 = Mpy_32_16_1( t4, pg_fx[0] ); /*Q9,-e4*/ /* t4 = (pg[1]+4*pg[2]+9*pg[3]+16*pg[4])*pg[0] */ - e4 = sub( 22, e4 ); - t5 = BASOP_Util_Add_Mant32Exp( t1, e1, t2, e2, &e5 ); - t6 = BASOP_Util_Add_Mant32Exp( t3, e3, t4, e4, &e6 ); - t7 = BASOP_Util_Add_Mant32Exp( t5, e5, t6, e6, &e7 ); /*Q31,e7*/ - sum0_q = norm_l( t7 ); -#ifdef BASOP_NOGLOB - sum0 = round_fx_o( L_shl( t7, sum0_q ), &Overflow ); /*Q15,e7-sum0_q*/ -#else - sum0 = round_fx( L_shl( t7, sum0_q ) ); /*Q15,e7-sum0_q*/ -#endif - sum0_q = add( 15, sub( sum0_q, e7 ) ); /* sum0 is now Qsum0_q*/ - } - - pit = 0; - move16(); - IF( sum0 != 0 ) - { - /* Shift to the right, changing Q as long as no precision is lost */ - WHILE( s_and( sum0, 1 ) == 0 ) - { - sum0 = shr( sum0, 1 ); - sum0_q = sub( sum0_q, 1 ); - } - - /* float: - a=-( - ( 3*pg[1]+4*pg[2]+3*pg[3])*pg[0] */ - /*a1*/ /* - *ml[0] +( - ( 2*pg[2]+2*pg[3])*pg[1]-4*pg[1]*pg[0] */ - /*a2*/ /* - )*ml[1] +( - - 8*pg[2]*pg[0]-3*pg[2]*pg[1]+pg[3]*pg[2] */ - /*a3*/ /* - )*ml[2] +( - -12*pg[3]*pg[0]-6*pg[3]*pg[1]-2*pg[3]*pg[2] */ - /*a4*/ /* - )*ml[3] +( - -16*pg[4]*pg[0] -9*pg[4]*pg[1] -4*pg[4]*pg[2] -pg[4]*pg[3] */ - /*a5*/ /* - )*ml[4] ) /sum0; MAC(19);MULT(9);DIV(1);*/ - - /*magic numbers: Q11 if not DIRECTLY marked otherwise*/ - a5 = mac_r( L_mac( L_mac( L_mult( mult_r( -32768, pg_fx[0] ) /*Q8*/, pg_fx[4] ) /*Q5+16*/, mult_r( -9 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[4] /*Q12*/ ) /*Q5+16*/, mult_r( -4 * 2048, pg_fx[2] ) /*Q8*/, pg_fx[4] /*Q12*/ ) /*Q5+16*/, mult_r( pg_fx[4], -4096 /*Q12->Q9*/ ), mult_r( pg_fx[3], 16384 /*Q12->Q11*/ ) ) /*Q5*/; - a4 = mac_r( L_mac( L_mult( mult_r( -12 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5+16*/, mult_r( -6 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5+16*/, mult_r( -2 * 2048, pg_fx[2] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5*/; - a3 = mac_r( L_mac( L_mult( mult_r( -8 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[2] ), mult_r( -3 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[2] ), mult_r( pg_fx[2], 4096 /*Q12->Q9*/ ), mult_r( pg_fx[3], 16384 /*12->Q11*/ ) ); /*Q5*/ - a2 = mac_r( L_mac( L_mult( mult_r( 2 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[2] ) /*Q5+16*/, mult_r( 2 * 2048, pg_fx[1] ) /*Q8*/, pg_fx[3] ) /*Q5+16*/, mult_r( -4 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[1] /*Q12*/ ) /*Q5*/; - a1 = mac_r( L_mac( L_mult( mult_r( 3 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[1] ) /*Q5+16*/, mult_r( 4 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[2] /*Q12*/ ) /*Q5+16*/, mult_r( 3 * 2048, pg_fx[0] ) /*Q8*/, pg_fx[3] /*Q12*/ ) /*Q5*/; - - a = L_mac( L_mac( L_mac( L_mac( L_mult( a1, round_fx( L_shl( ml_fx[0], 4 ) ) ), /*Q4*/ - round_fx( L_shl( ml_fx[1], 4 ) ) /*Q4*/, a2 ), - round_fx( L_shl( ml_fx[2], 4 ) ) /*Q4*/, a3 ), - round_fx( L_shl( ml_fx[3], 4 ) ) /*Q4*/, a4 ), - round_fx( L_shl( ml_fx[4], 4 ) ) /*Q4*/, a5 ); /*Q-6+16 = Q10*/ - - a_e = norm_l( a ); - a = L_shl( a, a_e ); - - a1 = BASOP_Util_Divide3216_Scale( L_negate( a ), /* Numerator */ /*scalefactor 21*/ - sum0, /* Denominator*/ /*scalefactor 10*/ - &tmpa ); /* scalefactor for result */ - - /* Float: - b=(( pg[1]+2*pg[2]+3*pg[3]+4*pg[4])*pg[0] */ - /*b1*/ /* - *ml[0] + - (( pg[2]+2*pg[3]+3*pg[4])*pg[1]-pg[1]*pg[0]) */ - /*b2*/ /* - *ml[1] + - ( -2*pg[2]*pg[0]-pg[2]*pg[1]+(pg[3]+2*pg[4])*pg[2]) */ - /*b3*/ /* - *ml[2] + - ( -3*pg[3]*pg[0]-2*pg[3]*pg[1]-pg[3]*pg[2]+pg[4]*pg[3]) */ - /*b4*/ /* - *ml[3] + - ( -4*pg[4]*pg[0]-3*pg[4]*pg[1]-2*pg[4]*pg[2]-pg[4]*pg[3]) */ - /*b5*/ /* - *ml[4] )/sum0; MAC(22);MULT(9);DIV(1);*/ - - /*magic numbers in Q13 if not DIRECTLY marked otherwise*/ - b1 = mac_r( L_mac( L_mac( L_mult( mult_r( pg_fx[1], pg_fx[0] ), 32768 / 4 ) /*Q7+16*/, mult_r( 2 * 8192, pg_fx[0] ) /*Q10*/, pg_fx[2] /*Q12*/ ) /*Q7+16*/, mult_r( 3 * 8192, pg_fx[0] ) /*Q10*/, pg_fx[3] /*Q12*/ ) /*Q7+16*/, /*mult_r(4*8192,pg_fx[0])*/ pg_fx[0] /*Q10*/, pg_fx[4] /*Q12*/ ) /*Q7*/; - b2 = mac_r( L_mac( L_mac( L_mult( mult_r( pg_fx[2], pg_fx[1] ), 32768 / 4 ) /*Q7+16*/, mult_r( 2 * 8192, pg_fx[1] ), pg_fx[3] ), mult_r( 3 * 8192, pg_fx[1] ), pg_fx[4] ) /*Q7+16*/, mult_r( pg_fx[1], -32768 / 2 /*Q12->Q12*/ ), mult_r( pg_fx[0], 32768 / 2 /*Q12->Q10*/ ) ) /*Q7*/; - b3 = mac_r( L_mac( L_mac( L_mult( mult_r( -2 * 8192, pg_fx[0] ), pg_fx[2] ) /*Q7+16*/, mult_r( pg_fx[2], -32768 / 2 ), mult_r( pg_fx[1], 32768 / 2 ) ), mult_r( pg_fx[3], 32768 / 2 ), mult_r( pg_fx[2], 32768 / 2 ) ) /*Q5+16*/, mult_r( 2 * 8192, pg_fx[2] ), pg_fx[4] ) /*Q7*/; - b4 = mac_r( L_mac( L_mac( L_mult( mult_r( -3 * 8192, pg_fx[0] ), pg_fx[3] ), mult_r( -2 * 8192, pg_fx[1] ), pg_fx[3] ), mult_r( -32768 / 2, pg_fx[3] ), mult_r( 32768 / 2, pg_fx[2] ) ), mult_r( 32768 / 2, pg_fx[4] ), mult_r( 32768 / 2, pg_fx[3] ) ); /*Q7*/ - b5 = mac_r( L_mac( L_mac( L_mult( mult_r( -32768 /*(-4*8192)*/, pg_fx[0] ), pg_fx[4] ), mult_r( -3 * 8192, pg_fx[1] ), pg_fx[4] ), mult_r( -2 * 8192, pg_fx[2] ), pg_fx[4] ), mult_r( -32768 / 2, pg_fx[4] ), mult_r( 32768 / 2, pg_fx[3] ) ) /*Q7*/; - - b = L_mac( L_mac( L_mac( L_mac( L_mult( b1, round_fx( L_shl( ml_fx[0], 4 ) ) ), /*Q4*/ - round_fx( L_shl( ml_fx[1], 4 ) ) /*Q4*/, b2 ), - round_fx( L_shl( ml_fx[2], 4 ) ) /*Q4*/, b3 ), - round_fx( L_shl( ml_fx[3], 4 ) ) /*Q4*/, b4 ), - round_fx( L_shl( ml_fx[4], 4 ) ) /*Q4*/, b5 ); /*Q-4+16 = Q12*/ - /*predict pitch for 4th future subframe*/ - - b_e = norm_l( b ); - b = L_shl( b, b_e ); - - b1 = BASOP_Util_Divide3216_Scale( b, /* Numerator */ /*scalefactor 19*/ - sum0, /* Denominator*/ /*scalefactor 10*/ - &tmpb ); /* scalefactor for result*/ - - /*pit = a + b * ((float)no_subfr_pred + (float)nb_subfr);*/ - pita = L_shl( L_deposit_l( a1 ), add( add( sum0_q, 16 - 10 + 1 ), sub( tmpa, a_e ) ) ) /*Q16*/; - pitb = L_shl_r( L_mult( b1 /*Q15*/, add( no_subfr_pred, nb_subfr ) /*Q0*/ ), add( add( sum0_q, 16 - 12 ), sub( tmpb, b_e ) ) ); - pit = L_add( pita, pitb ); /*Q16*/ -#undef WMC_TOOL_SKIP - - /* convert pitch back to float precision */ - T0 = (float) ( pit * pow( 2.f, -31 + 15 ) ); - - /*limit pitch to allowed range*/ - if ( T0 > pit_max ) - { - T0 = (float) pit_max; - } - - if ( T0 < pit_min ) - { - T0 = (float) pit_min; - } - - *extrapolationFailed = 0; - } - else - { - T0 = 0; - *extrapolationFailed = 1; - } - } - else - { - T0 = 0; - *extrapolationFailed = 1; - } - } - else - { - T0 = *old_fpitch; - *extrapolationFailed = 1; - } - - *T0_out = T0; - - return; -} - - -void get_subframe_pitch_flt( - const int16_t nSubframes, /* i : number of subframes */ - float pitchStart, /* i : starting pitch lag (in subframe -1) */ - float pitchEnd, /* i : ending pitch lag (in subframe nSubframes-1) */ - float *pitchBuf /* o : interpolated pitch lag per subframe */ -) -{ - int16_t i; - float pitchDelta; - - assert( ( nSubframes > 0 ) && ( pitchBuf != NULL ) && ( pitchStart >= 0 ) && ( pitchEnd > 0 ) ); - - pitchDelta = ( pitchEnd - pitchStart ) / nSubframes; - pitchBuf[0] = pitchStart + pitchDelta; - for ( i = 1; i < nSubframes; i++ ) - { - pitchBuf[i] = pitchBuf[i - 1] + pitchDelta; - } - - return; -} -#endif diff --git a/lib_dec/pitch_extr_fx.c b/lib_dec/pitch_extr_fx.c index 54ecc67d8..6f5bcc535 100644 --- a/lib_dec/pitch_extr_fx.c +++ b/lib_dec/pitch_extr_fx.c @@ -9,18 +9,12 @@ #include "cnst.h" #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * - num x 32768 * ------------------- Q15 * PIT_MAX x Fact *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define PIT_MAX_DIV_8k( num, fact ) ( -( num * 32768 ) / ( PIT_MAX_12k8 * fact ) ) -#define PIT_MAX_DIV_12k8( num, fact ) ( -( num * 32768 ) / ( PIT_MAX_12k8 * fact ) ) -#define PIT_MAX_DIV_16k( num, fact ) ( -( num * 32768 ) / ( PIT_MAX_16k * fact ) ) -#endif /*-----------------------------------------------------------------* * Pitch prediction for frame erasure using linear fitting * @@ -355,4 +349,3 @@ void get_subframe_pitch( move32(); } } -#endif diff --git a/lib_dec/post_dec.c b/lib_dec/post_dec.c index 14c93a311..3643a2810 100644 --- a/lib_dec/post_dec.c +++ b/lib_dec/post_dec.c @@ -45,438 +45,15 @@ * Function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void bass_pf_1sf_delay( float *syn, const int16_t *T_sf, const float *gainT_sf, const int16_t l_frame, const int16_t l_subfr, float *bpf_noise_buf, int16_t *gain_factor_param, const int16_t disable_bpf, float *mem_deemph_err, float *lp_ener ); -#endif - /*---------------------------------------------------------------------* * post_decoder_flt() * * Perform post-processing *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void post_decoder_flt( - Decoder_State *st, /* i/o: decoder memory state pointer */ - float synth_buf[], - const float pit_gain[], - const int16_t pitch[], - float signal_out[], - float *bpf_noise_buf ) -{ - int16_t L_frame, nb_subfr, i; - float *synth2; - float *synth; - int16_t pfstat_on_previous; - int16_t pitch_gain_adjust[NB_SUBFR16k]; - float synth_buf2[NBPSF_PIT_MAX + L_FRAME_MAX + M]; - int32_t brate; - float A[M + 1]; - float pitch_buf[NB_SUBFR16k]; - float tmp; - int16_t L_subfr; - - L_frame = st->L_frame; - nb_subfr = st->nb_subfr; - brate = ( st->core_brate > SID_2k40 ) ? st->total_brate : st->last_active_brate; - pfstat_on_previous = 0; - if ( st->hPFstat != NULL ) - { - pfstat_on_previous = st->hPFstat->on; - st->hPFstat->on = 0; - } - set_s( pitch_gain_adjust, st->bpf_gain_param, nb_subfr ); - synth = synth_buf + st->hTcxDec->old_synth_len; - synth2 = synth_buf2 + NBPSF_PIT_MAX; - if ( st->hBPF != NULL ) - { - mvr2r( st->hBPF->pst_old_syn, synth_buf2, NBPSF_PIT_MAX ); - } - - if ( st->tcxonly ) - { - /* High bitrates (48kbps and above), high sampling rates (25.6kHz and above) */ - - mvr2r( synth, synth2, L_frame ); - - if ( pfstat_on_previous ) - { - /* Past frame was low-bitrate with formant post-filter */ - lsp2a_stab( st->lsp_old, A, M ); - mvr2r( st->hPFstat->mem_pf_in_flt + L_SYN_MEM - M, synth - M, M ); - L_subfr = st->L_frame / st->nb_subfr; - residu( A, M, synth, synth_buf, L_subfr ); - syn_filt( A, M, synth_buf, synth2, L_subfr, st->hPFstat->mem_stp_flt + L_SYN_MEM - M, 0 ); - scale_st_ivas( synth, synth2, &st->hPFstat->gain_prec_flt, L_subfr, -1 ); - blend_subfr2_flt( synth2 + L_subfr / 2, synth + L_subfr / 2, synth2 + L_subfr / 2 ); - } - } - else - { - /* Low bitrates (32kbps and below), low sampling rates (12.8kHz and 16kHz) */ - if ( st->last_bwidth == NB ) - { - /* NB Post-filter (pitch+formant post-filter) */ - mvr2r( synth, synth_buf, L_frame ); - tmp = synth[-1]; - preemph( synth_buf, st->preemph_fac_float, L_frame, &tmp ); - - tmp = 0.0f; - for ( i = 0; i < nb_subfr; i++ ) - { - pitch_buf[i] = pitch[i]; - } - - if ( pfstat_on_previous == 0 ) - { - st->hPFstat->reset = 1; - } - - if ( st->bwidth == NB ) - { - st->hPFstat->on = 1; - nb_post_filt_ivas( L_frame, L_SUBFR, st->hPFstat, &tmp, 0, synth_buf, st->mem_Aq_float, pitch_buf, GENERIC, st->BER_detect, st->lp_noise_float > LP_NOISE_THRESH_FLT ? 1 : ( ( st->core != ACELP_CORE ) || ( st->coder_type == UNVOICED ) ) ); - } - else - { - st->hPFstat->on = 0; - nb_post_filt_ivas( L_frame, L_SUBFR, st->hPFstat, &tmp, 0, synth_buf, st->mem_Aq_float, pitch_buf, AUDIO, st->BER_detect, st->lp_noise_float > LP_NOISE_THRESH_FLT ? 1 : ( ( st->core != ACELP_CORE ) || ( st->coder_type == UNVOICED ) ) ); - } - - - mvr2r( synth_buf, synth2, L_frame ); - tmp = synth2[-1]; - deemph( synth2, st->preemph_fac_float, L_frame, &tmp ); - } - else - { - /* Formant Post-filter */ - if ( pfstat_on_previous == 0 ) - { - st->hPFstat->reset = 1; - } - - if ( st->bwidth >= WB ) - { - st->hPFstat->on = 1; - formant_post_filt_ivas( st->hPFstat, synth, st->mem_Aq_float, synth2, L_frame, L_SUBFR, st->lp_noise_float, brate, 0 ); - } - else - { - st->hPFstat->on = 0; - formant_post_filt_ivas( st->hPFstat, synth, st->mem_Aq_float, synth2, L_frame, L_SUBFR, st->lp_noise_float, brate, 1 ); - } - } - - /*Bass Post-filter */ - bass_pf_1sf_delay( synth2, pitch, pit_gain, L_frame, L_SUBFR, bpf_noise_buf, pitch_gain_adjust, ( st->lp_noise_float > LP_NOISE_THRESH_FLT && st->narrowBand ) ? 1 : 0, &( st->hBPF->pst_mem_deemp_err ), &( st->hBPF->pst_lp_ener ) ); - } - - /* Output */ - mvr2r( synth2, signal_out, L_frame ); - - /* Update synth2 memory */ - if ( st->hBPF != NULL ) - { - mvr2r( synth_buf2 + L_frame, st->hBPF->pst_old_syn, NBPSF_PIT_MAX ); - } - - return; -} -#endif /*---------------------------------------------------------------------* * bass_pf_1sf_delay() * * Perform low-frequency postfiltering *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void bass_pf_1sf_delay( - float *syn, /* i : synthesis to postfilter */ - const int16_t *T_sf, /* i : Pitch period for all subframes (T_sf[4]) */ - const float *gainT_sf, /* i : Pitch gain for all subframes (gainT_sf[4]) */ - const int16_t L_frame, /* i : frame length (multiple of l_subfr) */ - const int16_t L_subfr_in, /* i : sub-frame length (80/64) */ - float *bpf_noise_buf, /* i : harmoninc filtered signal */ - int16_t *gain_factor_param, /* i : gain factor param 0-> minimum BPF, 3-> full BPF */ - const int16_t disable_bpf, /* i : flag to disable BPF */ - float *mem_deemph_err, /* i/o: Error deemphasis memory */ - float *lp_ener /* i/o: long_term error signal energy */ -) -{ - int16_t i, sf, i_subfr, T, lg, L_subfr; - float tmp, corr, ener, gain; - float noise_buf[( 2 * L_SUBFR )], *noise_in; - float error[L_SUBFR]; - float ener2; - - noise_in = noise_buf; - - sf = 0; - L_subfr = L_subfr_in; - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr, sf++ ) - { - if ( i_subfr == 0 ) - { - L_subfr = L_subfr_in; - } - else if ( i_subfr == L_frame ) - { - L_subfr = 0; - } - else - { - L_subfr = L_subfr_in; - } - - T = T_sf[sf]; - gain = gainT_sf[sf]; - - if ( gain > 1.0f ) - { - gain = 1.0f; - } - if ( gain < 0.0f ) - { - gain = 0.0f; - } - - lg = L_frame - T - i_subfr; - if ( lg < 0 ) - { - lg = 0; - } - if ( lg > L_subfr ) - { - lg = L_subfr; - } - - if ( !disable_bpf && gain > 0 ) - { - corr = 0.01f; - ener = 0.01f; - - for ( i = 0; i < lg; i++ ) - { - corr += syn[i + i_subfr] * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); - ener += ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ) * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); - } - - for ( i = lg; i < L_subfr; i++ ) - { - corr += syn[i + i_subfr] * syn[i + i_subfr - T]; - ener += syn[i + i_subfr - T] * syn[i + i_subfr - T]; - } - gain = corr / ener; - - if ( gain > 1.f ) - { - gain = 1.0f; - } - else if ( gain < 0.f ) - { - gain = 0.f; - } - - ener2 = 0.01f; - for ( i = 0; i < lg; i++ ) - { - error[i] = gain * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); - error[i] = error[i] + 0.9f * *mem_deemph_err; - *mem_deemph_err = error[i]; - ener2 += error[i] * error[i]; - } - - for ( i = lg; i < L_subfr; i++ ) - { - error[i] = 0.5f * gain * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); - error[i] = error[i] + 0.9f * *mem_deemph_err; - *mem_deemph_err = error[i]; - ener2 += error[i] * error[i]; - } - - ener2 = (float) ( 10.f * log10( ener2 ) ); - *lp_ener = (float) ( 0.99f * *lp_ener + 0.01f * ener2 ); - ener2 = (float) pow( 10.f, 0.1f * *lp_ener ); - tmp = 0.5f * corr / ( ener + ener2 ); - - if ( tmp > 0.5f ) - { - tmp = 0.5f; - } - else if ( tmp < 0.f ) - { - tmp = 0.0f; - } - - /*Adjust gain*/ - /* full gain = gainLTP*0.5*/ - /* adaptive gain = gainLTP*0.5*gain_factor*0.5*/ - tmp *= max( 0.5f * gain_factor_param[sf], 0.125f ); - - /* calculate noise based on voiced pitch */ - for ( i = 0; i < lg; i++ ) - { - noise_in[i] = tmp * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); - } - - for ( i = lg; i < L_subfr; i++ ) - { - noise_in[i] = tmp * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); - /*It simulates an extrapolation of the buffer syn: syn[i+i_subfr+T]=syn[i+i_subfr] - * -> reduce nrg of noise_in and avoid too much post-filtering*/ - /*noise_in[i] = tmp * (syn[i+i_subfr] - 0.5f*syn[i+i_subfr-T] - 0.5f*syn[i+i_subfr]);*/ - /*->noise_in[i] = tmp * 0.5f * (syn[i+i_subfr] - syn[i+i_subfr-T]);*/ - noise_in[i] *= 0.5f; - } - } - else - { - set_zero( noise_in, L_subfr ); - } - - /* copy bpf noise signal to buffer */ - mvr2r( noise_in, bpf_noise_buf + i_subfr, L_subfr ); - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * cldfb_synth_set_bandsToZero_flt() - * - * - *---------------------------------------------------------------------*/ - -void cldfb_synth_set_bandsToZero_flt( - Decoder_State *st, - float **rAnalysis, - float **iAnalysis, - const int16_t nTimeSlots ) -{ - float nrg_bwddec, nrg_band[CLDFB_NO_CHANNELS_MAX], thr_bwddwc, max_nrg, realQ1, imagQ1; - int16_t flag, offset, WBcnt, i, k, update_perc; - float perc_detect, perc_miss; - - realQ1 = 0.0f; - imagQ1 = 0.0f; - - set_f( nrg_band, 0.0f, CLDFB_NO_CHANNELS_MAX ); - max_nrg = 0.0f; - - offset = 250; - WBcnt = 20; - perc_miss = 0.83f; - perc_detect = 0.93f; - - if ( st->VAD == 1 ) - { - st->active_frame_cnt_bwddec++; - st->total_frame_cnt_bwddec++; - if ( st->active_frame_cnt_bwddec > 99 ) - { - st->active_frame_cnt_bwddec = 100; - } - if ( st->total_frame_cnt_bwddec > 500 ) - { - st->total_frame_cnt_bwddec = 500; - } - - for ( i = 0; i < ( st->cldfbSyn->no_channels - st->cldfbSyn->bandsToZero ); i++ ) - { - nrg_bwddec = 0.0f; - for ( k = 0; k < nTimeSlots; k++ ) - { - realQ1 = rAnalysis[k][i]; - imagQ1 = iAnalysis[k][i]; - nrg_bwddec += ( realQ1 * realQ1 ); - nrg_bwddec += ( imagQ1 * imagQ1 ); - } - nrg_band[i] = ( nrg_bwddec ); - if ( ( nrg_band[i] > max_nrg ) && ( i > 11 ) ) - { - max_nrg = nrg_band[i]; - } - } - for ( ; i < st->cldfbSyn->no_channels; i++ ) - { - nrg_band[i] = 0; - } - - nrg_bwddec = 0; - for ( i = 2; i < 9; i++ ) - { - nrg_bwddec += ( nrg_band[i] / 7.0f ); - } - - thr_bwddwc = ( nrg_bwddec / 512.0f ); - - st->avg_nrg_LT_float = 0.98999f * st->avg_nrg_LT_float + 0.009979f * thr_bwddwc; - update_perc = 1; - if ( st->ini_frame >= 25 && thr_bwddwc < st->avg_nrg_LT_float * 0.005f ) - { - update_perc = 0; - } - - flag = 1; - if ( max_nrg >= thr_bwddwc ) - { - flag = 0; - } - - for ( i = 0; i < WBcnt - 1; i++ ) - { - st->flag_buffer[i] = st->flag_buffer[i + 1]; - } - st->flag_buffer[WBcnt - 1] = flag; - - /*long term percentage*/ - if ( update_perc == 1 ) - { - st->perc_bwddec_float += ( flag - st->perc_bwddec_float ) / st->active_frame_cnt_bwddec; - } - if ( ( st->total_frame_cnt_bwddec > offset ) && ( st->active_frame_cnt_bwddec > 50 ) ) - { - if ( ( st->perc_bwddec_float >= perc_detect || ( st->perc_bwddec_float >= perc_miss && st->last_flag_filter_NB ) ) && ( sum_s( st->flag_buffer, WBcnt ) != 0 ) ) /* decision hysterysis */ - { - st->cldfbSyn->bandsToZero = ( st->cldfbSyn->no_channels - 10 ); - st->last_flag_filter_NB = 1; /* VAD processing must be dependent on hysterysis, as if hysterysis fails, but threshold passes, we dont want next VAD frames to have NB only */ - } - else - { - st->last_flag_filter_NB = 0; - } - } - else - { - st->last_flag_filter_NB = 0; - } - if ( sum_s( st->flag_buffer, WBcnt ) == 0 ) - { - st->perc_bwddec_float = 0.0f; - st->active_frame_cnt_bwddec = 0; - st->total_frame_cnt_bwddec = 0; - st->last_flag_filter_NB = 0; - } - } - else - { - if ( st->last_flag_filter_NB == 1 ) - { - st->cldfbSyn->bandsToZero = st->last_active_bandsToZero_bwdec; - } - st->total_frame_cnt_bwddec++; - if ( st->total_frame_cnt_bwddec > 500 ) - { - st->total_frame_cnt_bwddec = 500; - } - } - - st->last_active_bandsToZero_bwdec = st->cldfbSyn->bandsToZero; - - return; -} -#endif diff --git a/lib_dec/post_dec_fx.c b/lib_dec/post_dec_fx.c index f37a86ea1..8d3e03321 100644 --- a/lib_dec/post_dec_fx.c +++ b/lib_dec/post_dec_fx.c @@ -7,7 +7,6 @@ #include "options.h" #include "prot_fx.h" #include "basop_util.h" -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Function prototypes @@ -843,4 +842,3 @@ void cldfb_synth_set_bandsToZero( return; } -#endif diff --git a/lib_dec/ppp_dec.c b/lib_dec/ppp_dec.c index 84cc2802f..d1de09bc7 100644 --- a/lib_dec/ppp_dec.c +++ b/lib_dec/ppp_dec.c @@ -41,145 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * DTFS_dequant_cw() - * - * DTFS dequantization - *-------------------------------------------------------------------*/ - -static void DTFS_dequant_cw( - int16_t pl, /* i : Previous lag */ - int16_t POWER_IDX, /* i : POWER index */ - const int16_t *AMP_IDX, /* i : Amp Shape index */ - float *lastLgainD, /* i/o: low band last gain */ - float *lastHgainD, /* i/o: high band last gain */ - float *lasterbD, /* i/o: last frame ERB vector */ - DTFS_STRUCTURE *X, /* o : DTFS structure dequantized */ - int16_t num_erb /* i : Number of ERB bands */ -) -{ - float tmp, mfreq[NUM_ERB_WB], curr_erb[NUM_ERB_WB]; - int16_t slot[NUM_ERB_WB]; - const float( *PowerCB )[2] = NULL; - - if ( num_erb == NUM_ERB_NB ) - { - PowerCB = PowerCB_NB; - } - else if ( num_erb == NUM_ERB_WB ) - { - PowerCB = PowerCB_WB; - } - - /* Amplitude Dequantization */ - erb_add( curr_erb, X->lag, lasterbD, pl, AMP_IDX, num_erb ); - curr_erb[0] = curr_erb[1] * 0.3f; - curr_erb[num_erb - 2] = curr_erb[num_erb - 3] * 0.3f; - curr_erb[num_erb - 1] = 0; - erb_slot( X->lag, slot, mfreq, num_erb ); - DTFS_erb_inv( curr_erb, slot, mfreq, X, num_erb ); - - /* Back up the lasterbD memory after power normalization */ - DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ); - DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ); - DTFS_to_erb( *X, lasterbD ); - - /* Power Dequantization */ - *lastLgainD += (float) PowerCB[POWER_IDX][0]; - *lastHgainD += (float) PowerCB[POWER_IDX][1]; - tmp = (float) pow( 10.0, (double) ( *lastLgainD ) ) / X->lag; - - if ( !( tmp >= 0.0 ) ) - { - tmp = 0.0; - } - - DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, tmp, X ); - tmp = (float) pow( 10.0, (double) ( *lastHgainD ) ) / X->lag; - - if ( !( tmp >= 0.0 ) ) - { - tmp = 0.0; - } - - DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, tmp, X ); - - return; -} - -/*------------------------------------------------------------------- - * ppp_quarter_decoder() - * - * PPP quarter decoder - *-------------------------------------------------------------------*/ - -ivas_error ppp_quarter_decoder( - Decoder_State *st, /* i/o: decoder state structure */ - DTFS_STRUCTURE *CURRCW_Q_DTFS, /* i/o: Current CW DTFS */ - int16_t prevCW_lag, /* i : Previous lag */ - float *lastLgainD, /* i/o: Last gain lowband */ - float *lastHgainD, /* i/o: Last gain highwband */ - float *lasterbD, /* i/o: Last ERB vector */ - int16_t bfi, /* i : FER flag */ - DTFS_STRUCTURE PREV_CW_D /* i : Previous DTFS */ -) -{ - DTFS_STRUCTURE *PREVDTFS; - float tmp, temp_pl = (float) prevCW_lag, temp_l = (float) CURRCW_Q_DTFS->lag; - int16_t l = CURRCW_Q_DTFS->lag; - int16_t POWER_IDX, AMP_IDX[2]; - float Erot = 0.0, z = 0.0; - int16_t num_erb = 24; - ivas_error error; - - error = IVAS_ERR_OK; - if ( ( error = DTFS_new( &PREVDTFS ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( CURRCW_Q_DTFS->upper_cut_off_freq == 4000.0 ) - { - num_erb = 22; - } - else if ( CURRCW_Q_DTFS->upper_cut_off_freq == 6400.0 ) - { - num_erb = 24; - } - - DTFS_copy( PREVDTFS, PREV_CW_D ); - if ( bfi == 0 ) - { - POWER_IDX = get_next_indice( st, 6 ); - AMP_IDX[0] = get_next_indice( st, 6 ); - AMP_IDX[1] = get_next_indice( st, 6 ); - - /* Amplitude Dequantization */ - DTFS_dequant_cw( prevCW_lag, POWER_IDX, AMP_IDX, lastLgainD, lastHgainD, lasterbD, CURRCW_Q_DTFS, num_erb ); - } - - /* Copying phase spectrum over */ - DTFS_adjustLag( PREVDTFS, l ); - - z = ( ( L_FRAME - temp_l ) * ( temp_l + temp_pl ) ) / ( 2 * temp_l * temp_pl ); - - Erot = (float) ( temp_l - rint_new( temp_l * ( z - floor( z ) ) ) ); - - DTFS_phaseShift( PREVDTFS, (float) ( PI2 * Erot / CURRCW_Q_DTFS->lag ) ); - DTFS_car2pol( PREVDTFS ); - - mvr2r( PREVDTFS->b, CURRCW_Q_DTFS->b, (int16_t) ( CURRCW_Q_DTFS->lag >> 1 ) + 1 ); - - DTFS_pol2car( CURRCW_Q_DTFS ); - - tmp = (float) get_next_indice( st, 3 ); - DTFS_phaseShift( CURRCW_Q_DTFS, (float) ( PI2 * ( tmp - 3 ) / CURRCW_Q_DTFS->lag ) ); - - free( PREVDTFS ); - - return error; -} -#endif diff --git a/lib_dec/ppp_dec_fx.c b/lib_dec/ppp_dec_fx.c index 437927d7c..201d2cce6 100644 --- a/lib_dec/ppp_dec_fx.c +++ b/lib_dec/ppp_dec_fx.c @@ -6,7 +6,6 @@ #include "options.h" #include "prot_fx.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /*===================================================================*/ /* FUNCTION : struct DTFS_fx::dequant_cw_fx () */ @@ -377,4 +376,3 @@ ivas_error ppp_quarter_decoder_fx( free( PREVDTFS_FX ); return error; } -#endif diff --git a/lib_dec/pvq_core_dec.c b/lib_dec/pvq_core_dec.c index 2ed83e60f..936720d06 100644 --- a/lib_dec/pvq_core_dec.c +++ b/lib_dec/pvq_core_dec.c @@ -42,470 +42,3 @@ #include "prot.h" #include "stl.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local prototypes - * - *-------------------------------------------------------------------*/ - -static int16_t get_pvq_splits( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, const int16_t band_bits, const int16_t sfmsize, int16_t *bits ); - -static void densitySymbolIndexDecode( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, int16_t density, int16_t opp_sz, int16_t near_sz, int16_t *index_phi ); - -static void decode_energies( Decoder_State *st, PVQ_DEC_HANDLE hPVQ, int16_t Np, int16_t *dim_part, int16_t *bits_part, int16_t *g_part, int16_t qband, int16_t *bits_left, int16_t n, const int16_t strict_bits ); - -/*-------------------------------------------------------------------* - * pvq_decode_band() - * - *-------------------------------------------------------------------*/ - -static void pvq_decode_band( - Decoder_State *st, /* i/o: Decoder state */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - int16_t *pulse_vector, /* i/o: decoded integer shape vector */ - int16_t *npulses, /* i/o: number of pulses */ - float *coefs_quant, /* i/o: decoded coefficients buffer */ - const int16_t sfmsize, /* i : band length */ - const int16_t band_bits, /* i : assigned bit budget */ - int16_t *bits_left, /* i/o: number of bits / bits remaining */ - const int16_t strict_bits /* i : Conservative rounding flag */ -) -{ - int16_t K_val; - int16_t j, Np; - int16_t part_start[MAX_SPLITS + 1], dim_part[MAX_SPLITS + 1], bits_part[MAX_SPLITS + 1]; - int16_t pool_tot, pool_part, dim_parts; - float g_part[MAX_SPLITS]; - int16_t g_part_s[MAX_SPLITS]; - int16_t sg_part[MAX_SPLITS + 1]; - int16_t idx_sort[MAX_SPLITS + 1]; - int16_t js, band_bits_tot, split_bit; - - Np = get_pvq_splits( st, hPVQ, band_bits, sfmsize, &split_bit ); - band_bits_tot = band_bits - split_bit; - - dim_parts = (int16_t) intLimCDivPos( sfmsize, Np ); - set_s( dim_part, dim_parts, Np - 1 ); - dim_part[Np - 1] = sfmsize - dim_parts * ( Np - 1 ); - - part_start[0] = 0; - for ( j = 1; j < Np; j++ ) - { - part_start[j] = part_start[j - 1] + dim_part[j - 1]; - } - - set_s( g_part_s, -32768, Np ); - if ( Np > 1 ) - { - decode_energies( st, hPVQ, Np, dim_part, bits_part, g_part_s, band_bits_tot, bits_left, sfmsize, strict_bits ); - } - else - { - bits_part[0] = band_bits_tot; - } - - pool_tot = 0; - pool_part = 0; - - for ( j = 0; j < Np; j++ ) - { - g_part[j] = -( (float) g_part_s[j] ) / 32768; - /* note: here g_part needs to be become exactly 1.0(float) thus in BASOP Word16 g_part_s is in the negative Q15 domain */ - - /* aligned to BASOP to avoid USAN undefined negation warning for -(-32768) */ - g_part_s[j] = negate( g_part_s[j] ); - } - - srt_vec_ind( g_part_s, sg_part, idx_sort, Np ); - for ( j = 0; j < Np; j++ ) - { - js = idx_sort[Np - 1 - j]; - pool_part = shrtCDivSignedApprox_flt( pool_tot, Np - j ); - bits_part[js] = max( 0, min( bits_part[js] + pool_part, 256 ) ); - - conservativeL1Norm( dim_part[js], bits_part[js], strict_bits, *bits_left, pool_tot, *npulses, /* inputs */ - &K_val, bits_left, &pool_tot, npulses ); /* outputs */ - if ( K_val >= 1 ) - { - pvq_decode( st, hPVQ, coefs_quant + part_start[js], pulse_vector + part_start[js], K_val, dim_part[js], g_part[js] ); - } - else - { - set_f( coefs_quant + part_start[js], 0.0f, dim_part[js] ); - set_s( pulse_vector + part_start[js], 0, dim_part[js] ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * pvq_decode_frame() - * - *-------------------------------------------------------------------*/ - -void pvq_decode_frame( - Decoder_State *st, /* i/o: Decoder state */ - float *coefs_quant, /* o : quantized coefficients */ - int16_t *npulses, /* o : number of pulses per band */ - int16_t *pulse_vector, /* o : non-normalized pulse shapes */ - const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ - const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ - const int16_t *sfmsize, /* i : band sizes */ - const int16_t nb_sfm, /* i : total number of bands */ - const int16_t *R, /* i : bitallocation per band (Q3) */ - const int16_t pvq_bits, /* i : number of bits avaiable */ - const int16_t core /* i : core */ -) -{ - int16_t i, j; - int16_t band_bits, bits_left; - int16_t bit_pool = 0; - int16_t coded_bands, bands_to_code; - int16_t curr_bits; - int16_t R_sort[NB_SFM]; /*Q3*/ - int16_t is, i_sort[NB_SFM]; - int16_t strict_bits; - - PVQ_DEC_DATA pvq_dec; - PVQ_DEC_HANDLE hPVQ = &pvq_dec; - - rc_dec_init( st, hPVQ, pvq_bits ); - curr_bits = ( pvq_bits - RC_BITS_RESERVED ) << 3; - bands_to_code = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - if ( R[i] > 0 ) - { - bands_to_code++; - } - } - - if ( core == ACELP_CORE ) - { - strict_bits = PVQ_CONS; - srt_vec_ind( R, R_sort, i_sort, nb_sfm ); - } - else - { - strict_bits = PVQ_NEAREST; - for ( i = 0; i < nb_sfm; i++ ) - { - i_sort[i] = i; - } - } - - coded_bands = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - is = i_sort[i]; - if ( R[is] > 0 ) - { - bandBitsAdjustment( hPVQ->rc_num_bits, hPVQ->rc_range, curr_bits, bands_to_code, bands_to_code - coded_bands, sfmsize[is], R[is], bit_pool, /* inputs */ - &band_bits, &bits_left, &bit_pool ); /* outputs */ - - pvq_decode_band( st, hPVQ, &pulse_vector[sfm_start[is]], &npulses[is], &coefs_quant[sfm_start[is]], sfmsize[is], band_bits, &bits_left, strict_bits ); - - /* Updates */ - coded_bands++; - } - else - { - for ( j = sfm_start[is]; j < sfm_end[is]; j++ ) - { - coefs_quant[j] = 0.0f; - pulse_vector[j] = 0; - } - } - } - - rc_dec_finish( st, hPVQ ); - - return; -} - -/*-------------------------------------------------------------------* - * pvq_core_dec() - * - *-------------------------------------------------------------------*/ - -/*! r: number of bits decoded */ -int16_t pvq_core_dec( - Decoder_State *st, /* i/o: Decoder state */ - const int16_t *sfm_start, /* i : indices of first coeffs in the bands */ - const int16_t *sfm_end, /* i : indices of last coeffs in the bands */ - const int16_t *sfmsize, /* i : band sizes */ - float coefs_quant[], /* o : output MDCT */ - const int16_t bits_tot, /* i : bit budget */ - const int16_t nb_sfm, /* i : number of bands */ - int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc.(Q3) */ - int16_t *Rs, /* i/o: Integer bit allocation */ - int16_t *npulses, /* o : number of pulses per band */ - int16_t *maxpulse, /* o : maximum pulse per band */ - const int16_t core /* i : core */ -) -{ - int16_t i; - int16_t R_upd; - int16_t ord[NB_SFM_MAX]; - int16_t pulse_vector[L_SPEC48k_EXT]; - int16_t pvq_bits; - int16_t gain_bits_array[NB_SFM]; - float fg_pred[NB_SFM_MAX]; - - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->ber_occured_in_pvq = 0; - } - - R_upd = bits_tot * 8; - assign_gain_bits( core, nb_sfm, sfmsize, R, gain_bits_array, &R_upd ); - - pvq_bits = R_upd >> 3; - - pvq_decode_frame( st, coefs_quant, npulses, pulse_vector, sfm_start, sfm_end, sfmsize, nb_sfm, R, pvq_bits, core ); - - if ( Rs != NULL ) - { - for ( i = 0; i < nb_sfm; i++ ) - { - Rs[i] = Rs[i] * ( npulses[i] > 0 ); /* Update Rs in case no pulses were assigned */ - } - } - - for ( i = 0; i < nb_sfm; i++ ) - { - ord[i] = i; - R[i] = R[i] * ( npulses[i] > 0 ); /* Update in case no pulses were assigned */ - } - - get_max_pulses( sfm_start, sfm_end, ord, npulses, nb_sfm, pulse_vector, maxpulse ); - - fine_gain_pred( sfm_start, sfm_end, sfmsize, ord, npulses, maxpulse, R, nb_sfm, coefs_quant, pulse_vector, fg_pred, core ); - - fine_gain_dec( st, ord, nb_sfm, gain_bits_array, fg_pred ); - - if ( st->hHQ_core != NULL ) - { - if ( st->hHQ_core->ber_occured_in_pvq != 0 ) - { - set_f( fg_pred, ( 1.0f / 8192.0f ), nb_sfm ); /* low complex ECU action in case of detetected BER in PVQ decoding */ - } - } - - apply_gain( ord, sfm_start, sfm_end, nb_sfm, fg_pred, coefs_quant ); - - return (int16_t) bits_tot; -} - - -/*-------------------------------------------------------------------* - * decode_energies() - * - *-------------------------------------------------------------------*/ - -static void decode_energies( - Decoder_State *st, - PVQ_DEC_HANDLE hPVQ, - int16_t Np, - int16_t *dim_part, - int16_t *bits_part, - int16_t *g_part, - int16_t qband, - int16_t *bits_left, - int16_t dim, - const int16_t strict_bits ) -{ - int16_t res; - int16_t i, l_Np, r_Np; - int16_t l_bits, r_bits, l_dim, r_dim; - int16_t il, ir; - int16_t oppRQ3, qzero; - int16_t index_phi = -1; - l_Np = Np >> 1; - r_Np = Np - l_Np; - - l_bits = 0; - l_dim = 0; - for ( i = 0; i < l_Np; i++ ) - { - l_dim += dim_part[i]; - } - r_dim = dim - l_dim; - - obtainEnergyQuantizerDensity( dim, qband, &res ); - rangeCoderFinalizationFBits( hPVQ->rc_num_bits, hPVQ->rc_range, &qzero ); - densitySymbolIndexDecode( st, hPVQ, res, r_dim, l_dim, &index_phi ); - densityAngle2RmsProjDec( res, index_phi, &ir, &il, &oppRQ3 ); - for ( i = 0; i < l_Np; i++ ) - { - g_part[i] = ( (int16_t) g_part[i] * il + 16384 ) >> 15; - } - - for ( i = l_Np; i < Np; i++ ) - { - g_part[i] = ( (int16_t) g_part[i] * ir + 16384 ) >> 15; - } - - - NearOppSplitAdjustment( qband, qzero, hPVQ->rc_num_bits, hPVQ->rc_range, *bits_left, strict_bits, Np, dim_part[0], dim_part[Np - 1], l_dim, r_dim, oppRQ3, &l_bits, &r_bits, bits_left ); - if ( l_Np > 1 ) - { - decode_energies( st, hPVQ, l_Np, dim_part, bits_part, g_part, l_bits, bits_left, l_dim, strict_bits ); - } - else - { - bits_part[0] = l_bits; - } - - if ( r_Np > 1 ) - { - decode_energies( st, hPVQ, r_Np, &dim_part[l_Np], &bits_part[l_Np], &g_part[l_Np], r_bits, bits_left, r_dim, strict_bits ); - } - else - { - bits_part[1] = r_bits; - } - - return; -} - -/*-------------------------------------------------------------------* - * densitySymbolIndexDecode() - * - *-------------------------------------------------------------------*/ - -static void densitySymbolIndexDecode( - Decoder_State *st, - PVQ_DEC_HANDLE hPVQ, - int16_t density, - int16_t opp_sz, - int16_t near_sz, - int16_t *index_phi ) -{ - - int32_t tmp1; - int16_t tmp2; - int32_t cum_freq = 0, dec_freq, tot; - uint32_t sym_freq = 1; - int16_t angle, c; - int16_t res1, res2, res_c, res_alpha; - int16_t res = density; - int16_t r_dim = opp_sz; - int16_t l_dim = near_sz; - int16_t alpha; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - if ( ( 0xFFFE & density ) == 0 ) - { /* odd density exit */ - *index_phi = -1; - return; - } -#define WMC_TOOL_SKIP - angle = atan2_fx_flt( SQRT_DIM_fx[r_dim], SQRT_DIM_fx[l_dim] ); -#ifndef BASOP_NOGLOB - angle = shl( angle, 1 ); -#else /* BASOP_NOGLOB */ - angle = shl_o( angle, 1, &Overflow ); -#endif /* BASOP_NOGLOB */ - angle = mult_r( angle, 20861 ); - c = mult_r( res, angle ); -#undef WMC_TOOL_SKIP - - res_c = res - c; - if ( c == 0 ) - { - tot = res * ( res + 1 ) + 1; - dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); - alpha = (int16_t) floor_sqrt_exact( (uint32_t) ( ( res + 1 ) * ( res + 1 ) - dec_freq ) ) + res + 1; - sym_freq = 2 * ( res - alpha ) + 1; - cum_freq = alpha * ( 2 * ( res + 1 ) - alpha ); - } - else if ( c == res ) - { - tot = res * ( res + 1 ) + 1; - dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); - alpha = (int16_t) floor_sqrt_exact( (uint32_t) dec_freq ); - sym_freq = 2 * alpha + 1; - cum_freq = alpha * alpha; - } - else - { - tot = res * c * ( res - c ) + res + 1; - dec_freq = rc_decode( &st->BER_detect, hPVQ, tot ); - if ( dec_freq < tot - ( res + 1 ) - ( res - ( c + 1 ) ) * ( res - c ) * c + c + 1 ) - { - alpha = ( res_c - 1 + (int16_t) floor_sqrt_exact( (uint32_t) ( res_c * ( res_c + 4 * dec_freq - 2 ) + 1 ) ) ) / ( 2 * res_c ); - sym_freq = 2 * alpha * res_c + 1; - cum_freq = alpha * ( ( alpha - 1 ) * res_c + 1 ); - } - else - { - res1 = res + 1; - res2 = 2 * res + 1; - tmp1 = ( c * res2 + 1 ) * ( c * res2 + 1 ) + 4 * c * ( ( tot - dec_freq - res1 ) - c * ( res * res1 ) ); - tmp2 = (int16_t) floor_sqrt_exact( (uint32_t) tmp1 ); - if ( tmp2 * tmp2 != tmp1 ) - { - tmp2++; /* convert to ceil */ - } - - alpha = ( c * ( 2 * res + 1 ) + 1 - tmp2 ) / ( 2 * c ); - - res_alpha = res - alpha; - sym_freq = 2 * res_alpha * c + 1; - cum_freq = tot - ( res + 1 ) - res_alpha * ( res_alpha + 1 ) * c + alpha; - } - } - rc_dec_update( st, hPVQ, cum_freq, sym_freq ); - - *index_phi = alpha; - - return; -} - - -/*--------------------------------------------------------------------------* - * get_pvq_splits() - * - * Retrieve the number of segments - *--------------------------------------------------------------------------*/ - -/*! r: Number of segments */ -static int16_t get_pvq_splits( - Decoder_State *st, /* i/o: Decoder state */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - const int16_t band_bits, /* i : Band bit-budget */ - const int16_t sfmsize, /* i : Band width */ - int16_t *bits /* o : Used bits */ -) -{ - int16_t Np; - uint32_t flag; - - Np = (int16_t) ( intLimCDivPos( band_bits, 67 ) >> 2 ); - if ( band_bits - 268 * Np != 0 || Np == 0 ) /* L_msu */ - { - Np++; /* ceil */ - } - *bits = 0; - if ( Np < MAX_SPLITS && ( band_bits - ( 8 * sfmsize * THR_ADD_SPLIT ) > 0 ) ) - { - flag = rc_dec_bits( st, hPVQ, 1 ); - *bits = 8; - if ( flag ) - { - Np += 1; - } - } - - Np = max( Np, (int16_t) ( ceil( (float) sfmsize / PVQ_MAX_BAND_SIZE ) ) ); - Np = min( MAX_SPLITS, Np ); - Np = min( (int16_t) floor( (float) sfmsize / MIN_BAND_SIZE ), Np ); - - return Np; -} -#endif diff --git a/lib_dec/pvq_core_dec_fx.c b/lib_dec/pvq_core_dec_fx.c index 121c472fe..6d3e24dad 100644 --- a/lib_dec/pvq_core_dec_fx.c +++ b/lib_dec/pvq_core_dec_fx.c @@ -6,7 +6,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "ivas_prot_fx.h" @@ -669,4 +668,3 @@ static Word16 get_pvq_splits_fx( /* o : Number of segme Np = s_min( sfmsize, Np ); /* The code line assumes that MIN_BAND_SIZE is 1 */ return Np; } -#endif diff --git a/lib_dec/pvq_decode.c b/lib_dec/pvq_decode.c index 294838e9a..8e752f0ac 100644 --- a/lib_dec/pvq_decode.c +++ b/lib_dec/pvq_decode.c @@ -40,72 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function pvq_decode() * - * * - * PVQ subvector decoding algorithm * - *-------------------------------------------------------------------*/ - -void pvq_decode( - Decoder_State *st, /* i/o: Decoder state */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - float *xq, /* o : decoded vector (scaled float) */ - int16_t *y, /* o : decoded vector (non-scaled short)*/ - const int16_t k_val, /* i : number of allocated pulses */ - const int16_t dim, /* i : Length of vector */ - const float gain /* i : Gain */ -) -{ - int16_t i; - float gain_fac; - float yy; - int16_t output[PVQ_MAX_BAND_SIZE]; /* short interface as in STL-FIP */ - uint32_t h_mem[1 + KMAX_NON_DIRECT + 1]; /* allocate max offset memory for dim 6 */ - PvqEntry entry; - - entry = get_size_mpvq_calc_offset( dim, k_val, h_mem ); /* get size & prepare H(adaptive table for entry.size=N_MPVQ(dim,k_val) */ - - if ( dim != 1 ) - { - entry.lead_sign_ind = (int16_t) rc_dec_bits( st, hPVQ, 1 ); - entry.index = rc_dec_uniform( st, hPVQ, entry.size ); /* NB so far no PVQ-size wc is exactly 2^32-1 */ - - /* safety check in case of bit errors */ - if ( st->hHQ_core != NULL ) - { - if ( entry.index >= entry.size || st->hHQ_core->ber_occured_in_pvq != 0 ) - { - st->hHQ_core->ber_occured_in_pvq = 1; - st->BER_detect = 1; - entry.index = 0; /* a zero index will essentially disable PVQ index decompostion complexity */ - } - } - } - else - { - entry.lead_sign_ind = (int16_t) rc_dec_bits( st, hPVQ, 1 ); /* always a single sign bit */ - entry.index = 0; - } - mpvq_decode_vec( &entry, h_mem, output ); - - mvs2s( output, y, dim ); - - /* Find decoded vector energy */ - yy = 0; - for ( i = 0; i < dim; i++ ) - { - yy += y[i] * y[i]; - } - - /* Apply scaling, always energy in yy */ - gain_fac = gain * 1.0f / (float) sqrt( yy ); - for ( i = 0; i < dim; i++ ) - { - xq[i] = y[i] * gain_fac; - } - - return; -} -#endif diff --git a/lib_dec/pvq_decode_fx.c b/lib_dec/pvq_decode_fx.c index 5c97d8679..870ea25a9 100644 --- a/lib_dec/pvq_decode_fx.c +++ b/lib_dec/pvq_decode_fx.c @@ -4,7 +4,6 @@ #include #include "options.h" /* Compilation switches */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "rom_com.h" @@ -118,4 +117,3 @@ void pvq_decode_fx( return; } -#endif diff --git a/lib_dec/range_dec.c b/lib_dec/range_dec.c index 4ad813b42..fd4f3cb7c 100644 --- a/lib_dec/range_dec.c +++ b/lib_dec/range_dec.c @@ -40,208 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local prototypes - *-------------------------------------------------------------------*/ - -static int16_t rc_dec_read( Decoder_State *st, PVQ_DEC_HANDLE hPVQ ); - - -/*-------------------------------------------------------------------* - * rc_dec_init() - * - * Initialize range coder - *-------------------------------------------------------------------*/ - -void rc_dec_init( - Decoder_State *st, /* i/o: Decoder State */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - int16_t tot_bits /* i : Total bit budget */ -) -{ - int16_t i; - - hPVQ->rc_low = 0; - hPVQ->rc_range = 0xffffffff; - hPVQ->rc_num_bits = 0; - hPVQ->rc_offset = tot_bits + st->next_bit_pos; - hPVQ->rc_end = hPVQ->rc_offset; - - for ( i = 0; i < 4; i++ ) - { - hPVQ->rc_low = ( hPVQ->rc_low << 8 ) + rc_dec_read( st, hPVQ ); - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_decode() - * - * Decode symbol - *-------------------------------------------------------------------*/ - -/*! r: Decoded value */ -uint32_t rc_decode( - int16_t *BER_detect, /* o : Bit error detection flag */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - uint32_t tot /* i : Total cumulative frequency */ -) -{ - uint32_t inv, val; - int16_t exp; - - inv = UL_inverse_float( tot, &exp ); - hPVQ->rc_help = UMult_32_32( hPVQ->rc_range, inv ); - hPVQ->rc_help = hPVQ->rc_help >> ( exp - 32 ); - - /* safety check in case of bit errors */ - val = hPVQ->rc_low / hPVQ->rc_help; - if ( val > tot ) - { - *BER_detect = 1; - return 0; - } - - return val; -} - -/*-------------------------------------------------------------------* - * rc_dec_update() - * - * Update range coder - *-------------------------------------------------------------------*/ - -void rc_dec_update( - Decoder_State *st, /* i/o: Decoder State */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - const uint32_t cum_freq, /* i : Cumulative frequency */ - const uint32_t sym_freq /* i : Symbol frequency */ -) -{ - hPVQ->rc_low = hPVQ->rc_low - cum_freq * hPVQ->rc_help; - hPVQ->rc_range = hPVQ->rc_help * sym_freq; - - while ( hPVQ->rc_range < ( 1 << 24 ) ) - { - hPVQ->rc_num_bits += 8; - hPVQ->rc_low = ( hPVQ->rc_low << 8 ) + rc_dec_read( st, hPVQ ); - hPVQ->rc_range <<= 8; - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_dec_bits() - * - * Decode bits - *-------------------------------------------------------------------*/ - -/*! r: Decoded value */ -uint32_t rc_dec_bits( - Decoder_State *st, /* i/o: Decoder State */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - const int16_t bits /* i : Number of bits */ -) -{ - uint32_t value; - - hPVQ->rc_num_bits += bits; - - if ( bits > 16 ) - { - hPVQ->rc_offset -= bits - 16; - value = get_indice( st, hPVQ->rc_offset, bits - 16 ) << 16; - hPVQ->rc_offset -= 16; - value |= get_indice( st, hPVQ->rc_offset, 16 ); - } - else - { - hPVQ->rc_offset -= bits; - value = get_indice( st, hPVQ->rc_offset, bits ); - } - - return value; -} - -/*-------------------------------------------------------------------* - * rc_dec_uniform() - * - * Encode with uniform distribution - *-------------------------------------------------------------------*/ - -/*! r: Decoded value */ -uint32_t rc_dec_uniform( - Decoder_State *st, /* i/o: Decoder State */ - PVQ_DEC_HANDLE hPVQ, /* i/o: PVQ decoder handle */ - const uint32_t tot /* i : Maximum value */ -) -{ - uint32_t value; - int16_t n; - - n = 32 - norm_ul_float( tot - 1 ); /* aligned to BASOP */ - - if ( n <= 8 ) - { - value = rc_decode( &st->BER_detect, hPVQ, tot ); - rc_dec_update( st, hPVQ, value, 1 ); - } - else - { - n -= 8; - value = rc_decode( &st->BER_detect, hPVQ, ( tot >> n ) + 1 ); - rc_dec_update( st, hPVQ, value, 1 ); - value <<= n; - value |= rc_dec_bits( st, hPVQ, n ); - } - - return value; -} - -/*-------------------------------------------------------------------* - * rc_dec_finish() - * - * Finalize range decoder - *-------------------------------------------------------------------*/ - -void rc_dec_finish( - Decoder_State *st, /* i/o: Decoder State */ - PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ -) -{ - st->next_bit_pos = hPVQ->rc_end; - - return; -} - - -/*-------------------------------------------------------------------* - * rc_dec_read() - * - * Read a byte from bitstream - *-------------------------------------------------------------------*/ - -static int16_t rc_dec_read( - Decoder_State *st, /* i/o: Decoder state */ - PVQ_DEC_HANDLE hPVQ /* i/o: PVQ decoder handle */ -) -{ - int16_t bits; - - bits = hPVQ->rc_end - st->next_bit_pos; - - /* If the end of the buffer has been reached, pad the last byte with zeros */ - if ( bits < 8 ) - { - return ( get_next_indice( st, bits ) << ( 8 - bits ) ); - } - else - { - return get_next_indice( st, 8 ); - } -} -#endif diff --git a/lib_dec/range_dec_fx.c b/lib_dec/range_dec_fx.c index d92e0d1d9..7f62e0dd3 100644 --- a/lib_dec/range_dec_fx.c +++ b/lib_dec/range_dec_fx.c @@ -6,7 +6,6 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ @@ -237,4 +236,3 @@ static Word16 rc_dec_read_fx( return get_next_indice_fx( st_fx, 8 ); } } -#endif diff --git a/lib_dec/re8_dec.c b/lib_dec/re8_dec.c index 88a8b51e2..e748899a9 100644 --- a/lib_dec/re8_dec.c +++ b/lib_dec/re8_dec.c @@ -38,69 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - re8_dec(n, I, k, y) - - MULTI-RATE INDEXING OF A POINT y in THE LATTICE RE8 (INDEX DECODING) - -------------------------------------------------------------------------*/ - -void re8_dec( - int16_t n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ - const uint16_t I, /* i : index of c (pointer to unsigned 16-bit word) */ - const int16_t k[], /* i : index of v (8-dimensional vector of binary indices) = Voronoi index */ - int16_t y[] /* o : point in RE8 (8-dimensional integer vector) */ -) -{ - int16_t i, m, v[8]; - - /*------------------------------------------------------------------------* - * decode the sub-indices I and kv[] according to the codebook number n: - * if n=0,2,3,4, decode I (no Voronoi extension) - * if n>4, Voronoi extension is used, decode I and kv[] - *------------------------------------------------------------------------*/ - - if ( n <= 4 ) - { - re8_decode_base_index( n, I, y ); - } - else - { - /*--------------------------------------------------------------------* - * compute the Voronoi modulo m = 2^r where r is extension order - *--------------------------------------------------------------------*/ - - m = 1; - while ( n > 4 ) - { - m *= 2; - n -= 2; - } - - /*--------------------------------------------------------------------* - * decode base codebook index I into c (c is an element of Q3 or Q4) - * [here c is stored in y to save memory] - *--------------------------------------------------------------------*/ - - re8_decode_base_index( n, I, y ); - - /*--------------------------------------------------------------------* - * decode Voronoi index k[] into v - *--------------------------------------------------------------------*/ - - re8_k2y( k, m, v ); - - /*--------------------------------------------------------------------* - * reconstruct y as y = m c + v (with m=2^r, r integer >=1) - *--------------------------------------------------------------------*/ - - for ( i = 0; i < 8; i++ ) - { - y[i] = m * y[i] + v[i]; - } - } - - return; -} -#endif diff --git a/lib_dec/re8_dec_fx.c b/lib_dec/re8_dec_fx.c index fbc76f67d..e6c35e293 100644 --- a/lib_dec/re8_dec_fx.c +++ b/lib_dec/re8_dec_fx.c @@ -4,7 +4,6 @@ #include #include "options.h" /* Compilation switches */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ /*-------------------------------------------------------------------------- @@ -71,4 +70,3 @@ void re8_dec_fx( return; } -#endif diff --git a/lib_dec/rom_dec.c b/lib_dec/rom_dec.c index a317678a4..6e33e724f 100644 --- a/lib_dec/rom_dec.c +++ b/lib_dec/rom_dec.c @@ -46,9 +46,6 @@ * construction after frame error concealment *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float h_low[5] = { -0.0125f, 0.1090f, 0.7813f, 0.1090f, -0.0125f }; -#endif const Word16 h_low_fx[5] = /* Q15 */ { -410, 3572, 25602, 3572, -410 @@ -122,13 +119,6 @@ const Word16 hestable[15]= 0X11, -0X07, -0X00 }; -#ifndef IVAS_FLOAT_FIXED -const float lsf_tab[LPC_SHB_ORDER] = -{ - 0.070633653f, 0.11962059f, 0.16925794f, 0.20627696f, 0.24345790f, - 0.31293656f, 0.34594478f, 0.38072862f, 0.410051247f, 0.44525622f -}; -#endif const Word16 lsf_tab_fx[LPC_SHB_ORDER] = /* Q15 */ { 2315, 3920, 5546, 6759, 7978, @@ -164,67 +154,6 @@ const Word16 GR_POW_HEADROOM[LGW_MAX] = /* in Q0-- Number of bits down-shiftin /* 31.25 343.75 718.75 1218.75 1968.75 4000 8000 16000 24000 */ const Word16 ivas_gwlpr[LGW_MAX] = { 1, 3*QUOT_LPR_LTR-1, 6*QUOT_LPR_LTR-1, 10*QUOT_LPR_LTR-1, 16*QUOT_LPR_LTR-1, 32*QUOT_LPR_LTR, 64*QUOT_LPR_LTR, 128*QUOT_LPR_LTR, 192*QUOT_LPR_LTR }; -#ifndef IVAS_FLOAT_FIXED -const float w_hamm48k_2[L_TRANA48k/2] = -{ - 0.080000000000000f, 0.080061898522781f, 0.080247577432747f, 0.080556986759243f, 0.080990043232791f, 0.081546630307495f, 0.082226598192408f, 0.083029763891845f, - 0.083955911254630f, 0.085004791032270f, 0.086176120946031f, 0.087469585762906f, 0.088884837380455f, 0.090421494920485f, 0.092079144831552f, 0.093857341000262f, - 0.095755604871328f, 0.097773425576361f, 0.099910260071357f, 0.102165533282844f, 0.104538638262646f, 0.107028936351231f, 0.109635757349585f, 0.112358399699582f, - 0.115196130672791f, 0.118148186567665f, 0.121213772915079f, 0.124392064692135f, 0.127682206544200f, 0.131083313015096f, 0.134594468785406f, 0.138214728918801f, - 0.141943119116349f, 0.145778635978722f, 0.149720247276233f, 0.153766892226636f, 0.157917481780606f, 0.162170898914830f, 0.166525998932624f, 0.170981609771997f, - 0.175536532321084f, 0.180189540740855f, 0.184939382795015f, 0.189784780187013f, 0.194724428904063f, 0.199756999568084f, 0.204881137793469f, 0.210095464551578f, - 0.215398576541875f, 0.220789046569584f, 0.226265423929784f, 0.231826234797829f, 0.237469982625987f, 0.243195148546199f, 0.249000191778843f, 0.254883550047394f, - 0.260843639998870f, 0.266878857629950f, 0.272987578718653f, 0.279168159261450f, 0.285418935915708f, 0.291738226447335f, 0.298124330183510f, 0.304575528470374f, - 0.311090085135560f, 0.317666246955443f, 0.324302244126969f, 0.330996290743956f, 0.337746585277719f, 0.344551311061912f, 0.351408636781431f, 0.358316716965264f, - 0.365273692483159f, 0.372277691045950f, 0.379326827709445f, 0.386419205381703f, 0.393552915333588f, 0.400726037712459f, 0.407936642058840f, 0.415182787825961f, - 0.422462524902000f, 0.429773894134909f, 0.437114927859666f, 0.444483650427822f, 0.451878078739195f, 0.459296222775571f, 0.466736086136265f, 0.474195666575400f, - 0.481672956540759f, 0.489165943714067f, 0.496672611552554f, 0.504190939831653f, 0.511718905188695f, 0.519254481667438f, 0.526795641263308f, 0.534340354469178f, - 0.541886590821560f, 0.549432319447051f, 0.556975509608890f, 0.564514131253475f, 0.572046155556704f, 0.579569555469978f, 0.587082306265726f, 0.594582386082315f, - 0.602067776468170f, 0.609536462925001f, 0.616986435449943f, 0.624415689076500f, 0.631822224414129f, 0.639204048186324f, 0.646559173767056f, 0.653885621715418f, - 0.661181420308344f, 0.668444606071246f, 0.675673224306430f, 0.682865329619155f, 0.690018986441185f, 0.697132269551692f, 0.704203264595389f, 0.711230068597719f, - 0.718210790476997f, 0.725143551553344f, 0.732026486054283f, 0.738857741616868f, 0.745635479786192f, 0.752357876510168f, 0.759023122630418f, 0.765629424369165f, - 0.772175003811978f, 0.778658099386259f, 0.785076966335314f, 0.791429877187917f, 0.797715122223211f, 0.803931009930835f, 0.810075867466152f, 0.816148041100446f, - 0.822145896665987f, 0.828067819995822f, 0.833912217358185f, 0.839677515885409f, 0.845362163997224f, 0.850964631818323f, 0.856483411590088f, 0.861917018076364f, - 0.867263988963175f, 0.872522885252262f, 0.877692291648358f, 0.882770816940072f, 0.887757094374303f, 0.892649782024062f, 0.897447563149619f, 0.902149146552868f, - 0.906753266924821f, 0.911258685186131f, 0.915664188820559f, 0.919968592201292f, 0.924170736910022f, 0.928269492048706f, 0.932263754543917f, 0.936152449443706f, - 0.939934530206900f, 0.943608978984751f, 0.947174806894860f, 0.950631054287315f, 0.953976791002949f, 0.957211116623676f, 0.960333160714807f, 0.963342083059310f, - 0.966237073883933f, 0.969017354077129f, 0.971682175398738f, 0.974230820681355f, 0.976662604023336f, 0.978976870973391f, 0.981172998706713f, 0.983250396192597f, - 0.985208504353495f, 0.987046796215483f, 0.988764777050081f, 0.990361984507393f, 0.991837988740540f, 0.993192392521341f, 0.994424831347216f, 0.995534973539285f, - 0.996522520331626f, 0.997387205951684f, 0.998128797691797f, 0.998747095971820f, 0.999241934392838f, 0.999613179781951f, 0.999860732228111f, 0.999984525109009f -}; - -const float w_hamm32k_2[L_TRANA32k/2] = -{ - 0.080000000000000f, 0.080139632090179f, 0.080558443590627f, 0.081256180242538f, 0.082232418452750f, 0.083486565550910f, 0.085017860149273f, 0.086825372604947f, - 0.088908005584270f, 0.091264494728999f, 0.093893409423896f, 0.096793153665248f, 0.099961967029797f, 0.103397925743485f, 0.107098943849369f, 0.111062774473996f, - 0.115287011191475f, 0.119769089484404f, 0.124506288300781f, 0.129495731705944f, 0.134734390628539f, 0.140219084699457f, 0.145946484182623f, 0.151913111996467f, - 0.158115345824847f, 0.164549420316138f, 0.171211429369169f, 0.178097328504598f, 0.185202937320297f, 0.192523942029263f, 0.200055898078497f, 0.207794232847276f, - 0.215734248423172f, 0.223871124454139f, 0.232199921074925f, 0.240715581906049f, 0.249412937123505f, 0.258286706597345f, 0.267331503097225f, 0.276541835562968f, - 0.285912112438167f, 0.295436645064799f, 0.305109651136783f, 0.314925258210395f, 0.324877507269410f, 0.334960356342792f, 0.345167684172755f, 0.355493293930949f, - 0.365930916980537f, 0.376474216681854f, 0.387116792239357f, 0.397852182587524f, 0.408673870313343f, 0.419575285613002f, 0.430549810280395f, 0.441590781725011f, - 0.452691497016760f, 0.463845216955300f, 0.475045170161378f, 0.486284557187706f, 0.497556554646881f, 0.508854319353835f, 0.520170992480304f, 0.531499703718800f, - 0.542833575453544f, 0.554165726935838f, 0.565489278461346f, 0.576797355546729f, 0.588083093103121f, 0.599339639603893f, 0.610560161244195f, 0.621737846089724f, - 0.632865908212225f, 0.643937591809204f, 0.654946175305346f, 0.665884975433158f, 0.676747351290353f, 0.687526708371517f, 0.698216502571607f, 0.708810244158849f, - 0.719301501714632f, 0.729683906037996f, 0.739951154012344f, 0.750097012432047f, 0.760115321786592f, 0.770000000000000f, 0.779745046123229f, 0.789344543977327f, - 0.798792665745119f, 0.808083675509254f, 0.817211932734458f, 0.826171895691878f, 0.834958124823446f, 0.843565286044212f, 0.851988153980648f, 0.860221615142946f, - 0.868260671029406f, 0.876100441160999f, 0.883736166044290f, 0.891163210060907f, 0.898377064281809f, 0.905373349204632f, 0.912147817412476f, 0.918696356152490f, - 0.925014989832710f, 0.931099882435622f, 0.936947339846999f, 0.942553812098577f, 0.947915895523229f, 0.953030334821319f, 0.957894025036981f, 0.962504013443125f, - 0.966857501334024f, 0.970951845724403f, 0.974784560953977f, 0.978353320196492f, 0.981655956872329f, 0.984690465963826f, 0.987455005232518f, 0.989947896337551f, - 0.992167625854595f, 0.994112846194642f, 0.995782376422118f, 0.997175202971826f, 0.998290480264278f, 0.999127531219040f, 0.999685847665791f, 0.999965090652822f -}; - -const float w_hamm16k_2[L_TRANA16k/2] = -{ - 0.080000000000000f, 0.080562848541440f, 0.082250016781061f, 0.085057375935460f, 0.088978055926352f, 0.094002462192807f, 0.100118299170741f, 0.107310600382232f, - 0.115561765060989f, 0.124851601224384f, 0.135157375086613f, 0.146453866692083f, 0.158713431632863f, 0.171906068699192f, 0.185999493297458f, 0.200959216456013f, - 0.216748629225465f, 0.233329092266912f, 0.250660030408878f, 0.268699031941561f, 0.287401952405387f, 0.306723022619904f, 0.326614960688639f, 0.347029087705815f, - 0.367915446881795f, 0.389222925795719f, 0.410899381476157f, 0.432891768003705f, 0.455146266323232f, 0.477608415948132f, 0.500223248234257f, 0.522935420897402f, - 0.545689353445147f, 0.568429363191639f, 0.591099801522450f, 0.613645190076067f, 0.636010356508734f, 0.658140569510427f, 0.679981672741539f, 0.701480217362516f, - 0.722583592832128f, 0.743240155654278f, 0.763399355758289f, 0.783011860203399f, 0.802029673904734f, 0.820406257085326f, 0.838096639166738f, 0.855057528819616f, - 0.871247419904816f, 0.886626693045890f, 0.901157712584333f, 0.914804918680351f, 0.927534914333744f, 0.939316547111965f, 0.950120985385339f, 0.959921788882895f, - 0.968694973396140f, 0.976419069472435f, 0.983075174954342f, 0.988647001236375f, 0.993120913125941f, 0.996485962210947f, 0.998733913652397f, 0.999859266336418f -}; -#endif const Word16 w_hamm48k_2_fx[L_TRANA48k / 2] = /* Q15 */ { @@ -285,47 +214,6 @@ const Word16 w_hamm16k_2_fx[L_TRANA16k / 2] = /* Q15 */ 28549, 29053, 29529, 29976, 30393, 30780, 31134, 31455, 31742, 31995, 32213, 32396, 32543, 32653, 32727, 32763 }; -#ifndef IVAS_FLOAT_FIXED -const float w_hamm_sana48k_2[L_PROT_HAMM_LEN2_48k] = -{ - 0.080000000000000f, 0.080027462973758f, 0.080109848615839f, 0.080247147089046f, 0.080439341999361f, 0.080686410397899f, 0.080988322783646f, 0.081345043106986f, - 0.081756528774001f, 0.082222730651560f, 0.082743593073186f, 0.083319053845701f, 0.083949044256652f, 0.084633489082516f, 0.085372306597683f, 0.086165408584215f, - 0.087012700342376f, 0.087914080701944f, 0.088869442034286f, 0.089878670265216f, 0.090941644888610f, 0.092058238980796f, 0.093228319215714f, 0.094451745880830f, - 0.095728372893819f, 0.097058047820012f, 0.098440611890594f, 0.099875900021559f, 0.101363740833430f, 0.102903956671715f, 0.104496363628120f, 0.106140771562514f, - 0.107836984125627f, 0.109584798782499f, 0.111384006836658f, 0.113234393455047f, 0.115135737693669f, 0.117087812523972f, 0.119090384859956f, 0.121143215586007f, - 0.123246059585445f, 0.125398665769793f, 0.127600777108759f, 0.129852130660926f, 0.132152457605149f, 0.134501483272651f, 0.136898927179823f, 0.139344503061711f, - 0.141837918906203f, 0.144378876988888f, 0.146967073908615f, 0.149602200623714f, 0.152283942488898f, 0.155011979292835f, 0.157785985296381f, 0.160605629271474f, - 0.163470574540687f, 0.166380479017425f, 0.169334995246772f, 0.172333770446984f, 0.175376446551605f, 0.178462660252227f, 0.181592043041866f, 0.184764221258970f, - 0.187978816132029f, 0.191235443824805f, 0.194533715482165f, 0.197873237276507f, 0.201253610454792f, 0.204674431386151f, 0.208135291610080f, 0.211635777885218f, - 0.215175472238683f, 0.218753952015982f, 0.222370789931481f, 0.226025554119419f, 0.229717808185479f, 0.233447111258894f, 0.237213018045087f, 0.241015078878844f, - 0.244852839778006f, 0.248725842497672f, 0.252633624584921f, 0.256575719434027f, 0.260551656342175f, 0.264560960565666f, 0.268603153376600f, 0.272677752120042f, - 0.276784270271653f, 0.280922217495778f, 0.285091099704000f, 0.289290419114133f, 0.293519674309662f, 0.297778360299609f, 0.302065968578839f, 0.306381987188769f, - 0.310725900778505f, 0.315097190666374f, 0.319495334901855f, 0.323919808327907f, 0.328370082643670f, 0.332845626467550f, 0.337345905400666f, 0.341870382090660f, - 0.346418516295861f, 0.350989764949788f, 0.355583582225999f, 0.360199419603261f, 0.364836725931051f, 0.369494947495359f, 0.374173528084809f, 0.378871909057071f, - 0.383589529405564f, 0.388325825826447f, 0.393080232785873f, 0.397852182587524f, 0.402641105440390f, 0.407446429526807f, 0.412267581070735f, 0.417103984406268f, - 0.421955062046372f, 0.426820234751838f, 0.431698921600448f, 0.436590540056336f, 0.441494506039550f, 0.446410233995788f, 0.451337136966322f, 0.456274626658076f, - 0.461222113513879f, 0.466179006782852f, 0.471144714590954f, 0.476118644011648f, 0.481100201136704f, 0.486088791147110f, 0.491083818384099f, 0.496084686420271f, - 0.501090798130810f, 0.506101555764784f, 0.511116361016516f, 0.516134615097028f, 0.521155718805537f, 0.526179072601003f, 0.531204076673714f, 0.536230131016910f, - 0.541256635498423f, 0.546282989932337f, 0.551308594150653f, 0.556332848074950f, 0.561355151788038f, 0.566374905605590f, 0.571391510147749f, 0.576404366410692f, - 0.581412875838160f, 0.586416440392922f, 0.591414462628186f, 0.596406345758937f, 0.601391493733196f, 0.606369311303187f, 0.611339204096419f, 0.616300578686650f, - 0.621252842664750f, 0.626195404709433f, 0.631127674657866f, 0.636049063576134f, 0.640958983829565f, 0.645856849152894f, 0.650742074720264f, 0.655614077215060f, - 0.660472274899558f, 0.665316087684385f, 0.670144937197788f, 0.674958246854690f, 0.679755441925542f, 0.684535949604939f, 0.689299199080028f, 0.694044621598654f, - 0.698771650537277f, 0.703479721468629f, 0.708168272229108f, 0.712836742985904f, 0.717484576303842f, 0.722111217211948f, 0.726716113269708f, 0.731298714633038f, - 0.735858474119933f, 0.740394847275806f, 0.744907292438496f, 0.749395270802946f, 0.753858246485539f, 0.758295686588082f, 0.762707061261442f, 0.767091843768804f, - 0.771449510548575f, 0.775779541276891f, 0.780081418929751f, 0.784354629844749f, 0.788598663782413f, 0.792813013987120f, 0.796997177247615f, 0.801150653957089f, - 0.805272948172839f, 0.809363567675482f, 0.813422024027731f, 0.817447832632716f, 0.821440512791844f, 0.825399587762201f, 0.829324584813474f, 0.833215035284397f, - 0.837070474638713f, 0.840890442520641f, 0.844674482809841f, 0.848422143675885f, 0.852132977632196f, 0.855806541589490f, 0.859442396908678f, 0.863040109453242f, - 0.866599249641071f, 0.870119392495760f, 0.873600117697347f, 0.877041009632507f, 0.880441657444176f, 0.883801655080607f, 0.887120601343857f, 0.890398099937691f, - 0.893633759514900f, 0.896827193724033f, 0.899978021255524f, 0.903085865887227f, 0.906150356529334f, 0.909171127268689f, 0.912147817412476f, 0.915080071531290f, - 0.917967539501574f, 0.920809876547428f, 0.923606743281775f, 0.926357805746886f, 0.929062735454256f, 0.931721209423824f, 0.934332910222545f, 0.936897526002284f, - 0.939414750537061f, 0.941884283259609f, 0.944305829297265f, 0.946679099507180f, 0.949003810510844f, 0.951279684727920f, 0.953506450409391f, 0.955683841670007f, - 0.957811598520034f, 0.959889466896295f, 0.961917198692508f, 0.963894551788914f, 0.965821290081179f, 0.967697183508596f, 0.969522008081546f, 0.971295545908249f, - 0.973017585220782f, 0.974687920400358f, 0.976306352001886f, 0.977872686777781f, 0.979386737701038f, 0.980848323987568f, 0.982257271117780f, 0.983613410857422f, - 0.984916581277667f, 0.986166626774449f, 0.987363398087044f, 0.988506752315891f, 0.989596552939653f, 0.990632669831523f, 0.991614979274757f, 0.992543363977448f, - 0.993417713086533f, 0.994237922201026f, 0.995003893384487f, 0.995715535176712f, 0.996372762604660f, 0.996975497192592f, 0.997523666971448f, 0.998017206487434f, - 0.998456056809844f, 0.998840165538090f, 0.999169486807964f, 0.999443981297112f, 0.999663616229731f, 0.999828365380479f, 0.999938209077610f, 0.999993134205322f -}; -#endif const Word16 w_hamm_sana48k_2_fx[288] = /* Q15 */ { 2621, 2622, 2625, 2630, 2636, 2644, 2654, 2666, @@ -365,35 +253,6 @@ const Word16 w_hamm_sana48k_2_fx[288] = /* Q15 */ 32552, 32579, 32604, 32628, 32649, 32669, 32687, 32703, 32717, 32730, 32741, 32750, 32757, 32762, 32766, 32767 }; -#ifndef IVAS_FLOAT_FIXED -const float w_hamm_sana32k_2[L_PROT_HAMM_LEN2_32k] = -{ - 0.080000000000000f, 0.080061898522781f, 0.080247577432747f, 0.080556986759243f, 0.080990043232791f, 0.081546630307495f, 0.082226598192408f, 0.083029763891845f, - 0.083955911254630f, 0.085004791032270f, 0.086176120946031f, 0.087469585762906f, 0.088884837380455f, 0.090421494920485f, 0.092079144831552f, 0.093857341000262f, - 0.095755604871328f, 0.097773425576361f, 0.099910260071357f, 0.102165533282844f, 0.104538638262646f, 0.107028936351231f, 0.109635757349585f, 0.112358399699582f, - 0.115196130672791f, 0.118148186567665f, 0.121213772915079f, 0.124392064692135f, 0.127682206544200f, 0.131083313015096f, 0.134594468785406f, 0.138214728918801f, - 0.141943119116349f, 0.145778635978722f, 0.149720247276233f, 0.153766892226636f, 0.157917481780606f, 0.162170898914830f, 0.166525998932624f, 0.170981609771997f, - 0.175536532321084f, 0.180189540740855f, 0.184939382795015f, 0.189784780187013f, 0.194724428904063f, 0.199756999568084f, 0.204881137793469f, 0.210095464551578f, - 0.215398576541875f, 0.220789046569584f, 0.226265423929784f, 0.231826234797829f, 0.237469982625987f, 0.243195148546199f, 0.249000191778843f, 0.254883550047394f, - 0.260843639998870f, 0.266878857629950f, 0.272987578718653f, 0.279168159261450f, 0.285418935915708f, 0.291738226447335f, 0.298124330183510f, 0.304575528470374f, - 0.311090085135560f, 0.317666246955443f, 0.324302244126969f, 0.330996290743956f, 0.337746585277719f, 0.344551311061912f, 0.351408636781431f, 0.358316716965264f, - 0.365273692483159f, 0.372277691045950f, 0.379326827709445f, 0.386419205381703f, 0.393552915333588f, 0.400726037712459f, 0.407936642058840f, 0.415182787825961f, - 0.422462524902000f, 0.429773894134909f, 0.437114927859666f, 0.444483650427822f, 0.451878078739195f, 0.459296222775571f, 0.466736086136265f, 0.474195666575400f, - 0.481672956540759f, 0.489165943714067f, 0.496672611552554f, 0.504190939831653f, 0.511718905188695f, 0.519254481667438f, 0.526795641263308f, 0.534340354469178f, - 0.541886590821560f, 0.549432319447051f, 0.556975509608890f, 0.564514131253475f, 0.572046155556704f, 0.579569555469978f, 0.587082306265726f, 0.594582386082315f, - 0.602067776468170f, 0.609536462925001f, 0.616986435449943f, 0.624415689076500f, 0.631822224414129f, 0.639204048186324f, 0.646559173767056f, 0.653885621715418f, - 0.661181420308344f, 0.668444606071246f, 0.675673224306430f, 0.682865329619155f, 0.690018986441185f, 0.697132269551692f, 0.704203264595389f, 0.711230068597719f, - 0.718210790476997f, 0.725143551553344f, 0.732026486054283f, 0.738857741616868f, 0.745635479786192f, 0.752357876510168f, 0.759023122630418f, 0.765629424369165f, - 0.772175003811978f, 0.778658099386259f, 0.785076966335314f, 0.791429877187917f, 0.797715122223211f, 0.803931009930835f, 0.810075867466152f, 0.816148041100446f, - 0.822145896665987f, 0.828067819995822f, 0.833912217358185f, 0.839677515885409f, 0.845362163997224f, 0.850964631818323f, 0.856483411590088f, 0.861917018076364f, - 0.867263988963175f, 0.872522885252262f, 0.877692291648358f, 0.882770816940072f, 0.887757094374303f, 0.892649782024062f, 0.897447563149619f, 0.902149146552868f, - 0.906753266924821f, 0.911258685186131f, 0.915664188820559f, 0.919968592201292f, 0.924170736910022f, 0.928269492048706f, 0.932263754543917f, 0.936152449443706f, - 0.939934530206900f, 0.943608978984751f, 0.947174806894860f, 0.950631054287315f, 0.953976791002949f, 0.957211116623676f, 0.960333160714807f, 0.963342083059310f, - 0.966237073883933f, 0.969017354077129f, 0.971682175398738f, 0.974230820681355f, 0.976662604023336f, 0.978976870973391f, 0.981172998706713f, 0.983250396192597f, - 0.985208504353495f, 0.987046796215483f, 0.988764777050081f, 0.990361984507393f, 0.991837988740540f, 0.993192392521341f, 0.994424831347216f, 0.995534973539285f, - 0.996522520331626f, 0.997387205951684f, 0.998128797691797f, 0.998747095971820f, 0.999241934392838f, 0.999613179781951f, 0.999860732228111f, 0.999984525109009f -}; -#endif const Word16 w_hamm_sana32k_2_fx[L_PROT_HAMM_LEN2_32k] = /* Q15 */ { 2621, 2623, 2630, 2640, 2654, 2672, 2694, 2721, @@ -421,23 +280,6 @@ const Word16 w_hamm_sana32k_2_fx[L_PROT_HAMM_LEN2_32k] = /* Q15 */ 32283, 32344, 32400, 32452, 32501, 32545, 32585, 32622, 32654, 32682, 32707, 32727, 32743, 32755, 32763, 32767 }; -#ifndef IVAS_FLOAT_FIXED -const float w_hamm_sana16k_2[L_PROT_HAMM_LEN2_16k] = -{ - 0.080000000000000f, 0.080248875229243f, 0.080995231617495f, 0.082238261557724f, 0.083976620009229f, 0.086208425953062f, 0.088931264427414f, 0.092142189140766f, - 0.095837725659970f, 0.100013875169814f, 0.104666118800010f, 0.109789422514906f, 0.115378242560646f, 0.121426531463883f, 0.127927744575542f, 0.134874847152564f, - 0.142260321969963f, 0.150076177454966f, 0.158313956334418f, 0.166964744786114f, 0.176019182084144f, 0.185467470727822f, 0.195299387043225f, 0.205504292245887f, - 0.216071143952672f, 0.226988508130357f, 0.238244571468020f, 0.249827154159818f, 0.261723723084350f, 0.273921405366317f, 0.286407002305832f, 0.299167003660284f, - 0.312187602263317f, 0.325454708965093f, 0.338953967877692f, 0.352670771909129f, 0.366590278569198f, 0.380697426030022f, 0.394976949423959f, 0.409413397361190f, - 0.423991148649151f, 0.438694429195694f, 0.453507329077705f, 0.468413819756689f, 0.483397771422710f, 0.498442970447917f, 0.513533136930761f, 0.528651942311926f, - 0.543783027042910f, 0.558910018288144f, 0.574016547641481f, 0.589086268837895f, 0.604102875441222f, 0.619050118488809f, 0.633911824073957f, 0.648671910847171f, - 0.663314407417236f, 0.677823469633322f, 0.692183397729409f, 0.706378653312465f, 0.720393876176025f, 0.734213900920944f, 0.747823773365368f, 0.761208766726146f, - 0.774354397554188f, 0.787246441406510f, 0.799870948238030f, 0.812214257496436f, 0.824263012903808f, 0.836004176908999f, 0.847425044795124f, 0.858513258426909f, - 0.869256819623006f, 0.879644103138828f, 0.889663869245825f, 0.899305275893620f, 0.908557890441822f, 0.917411700948838f, 0.925857127005450f, 0.933885030101461f, - 0.941486723514159f, 0.948653981707932f, 0.955379049234843f, 0.961654649126531f, 0.967473990768381f, 0.972830777247415f, 0.977719212165966f, 0.982134005913770f, - 0.986070381391670f, 0.989524079180756f, 0.992491362151336f, 0.994969019506760f, 0.996954370257714f, 0.998445266123226f, 0.999440093855253f, 0.999937776984316f -}; -#endif const Word16 w_hamm_sana16k_2_fx[L_PROT_HAMM_LEN2_16k] = /* Q15 */ { 2621, 2630, 2654, 2695, 2752, 2825, 2914, 3019, @@ -473,10 +315,6 @@ const Word16 inv_tbl_2n_minus1[] = { -1, -1, /* Bits = 0 and 1 are not used */ /* er_dec_tcx.c */ -#ifndef IVAS_FLOAT_FIXED -const float h_high3_32_flt[L_FIR_FER2] = {-0.0517f, -0.0587f, -0.0820f, -0.1024f, -0.1164f, 0.8786f, -0.1164f, -0.1024f, -0.0820f, -0.0587f, -0.0517f}; -const float h_high3_16_flt[L_FIR_FER2] = { 0.f, -0.0205f, -0.0651f, -0.1256f, -0.1792f, 0.8028f, -0.1792f, -0.1256f, -0.0651f, -0.0205f, 0.f }; -#endif const Word16 h_high3_32[L_FIR_FER2] = { -1694/*-0.0517f Q15*/, -1923/*-0.0587f Q15*/, -2687/*-0.0820f Q15*/, -3355/*-0.1024f Q15*/, -3814/*-0.1164f Q15*/, 28790/*0.8786f Q15*/, -3814/*-0.1164f Q15*/, -3355/*-0.1024f Q15*/, -2687/*-0.0820f Q15*/, -1923/*-0.0587f Q15*/, -1694/*-0.0517f Q15*/ }; const Word16 h_high3_16[L_FIR_FER2] = { 0/* 0.f Q15*/, -672/*-0.0205f Q15*/, -2133/*-0.0651f Q15*/, -4116/*-0.1256f Q15*/, -5872/*-0.1792f Q15*/, 26306/*0.8028f Q15*/, -5872/*-0.1792f Q15*/, -4116/*-0.1256f Q15*/, -2133/*-0.0651f Q15*/, -672/*-0.0205f Q15*/, 0/* 0.f Q15*/ }; const Word16 T_256DIV_L_Frame[] = diff --git a/lib_dec/rom_dec.h b/lib_dec/rom_dec.h index 44f45905e..f6d35b43f 100644 --- a/lib_dec/rom_dec.h +++ b/lib_dec/rom_dec.h @@ -41,9 +41,6 @@ #include "options.h" #include "cnst.h" -#ifndef IVAS_FLOAT_FIXED -extern const float h_low[]; /* LP filter for filtering periodic part of excitation in artificial onset construction after FEC */ -#endif extern const Word16 h_low_fx[5]; // Q15 extern const Word16 inv_sqi[15]; // Q15 extern const Word16 sqi[15]; // Q0 @@ -53,9 +50,6 @@ extern const Word16 shift_avq_tab[]; // Q0 extern const Word16 hntable[55]; extern const Word16 hetable[57]; extern const Word16 hestable[15]; -#ifndef IVAS_FLOAT_FIXED -extern const float lsf_tab[LPC_SHB_ORDER]; -#endif extern const Word16 lsf_tab_fx[LPC_SHB_ORDER]; // Q15 extern const Word16 POW_ATT_TABLE0[]; // Q15 @@ -65,30 +59,16 @@ extern const Word16 gw_fx[LGW_MAX]; // Q0 extern const Word16 gw_len_inv_fx[LGW_MAX - 1]; // Q15 extern const Word16 GR_POW_HEADROOM[]; extern const Word16 ivas_gwlpr[LGW_MAX]; -#ifndef IVAS_FLOAT_FIXED -extern const float w_hamm48k_2[L_TRANA48k / 2]; -extern const float w_hamm32k_2[L_TRANA32k / 2]; -extern const float w_hamm16k_2[L_TRANA16k / 2]; -#endif -extern const Word16 w_hamm48k_2_fx[]; // Q15 -extern const Word16 w_hamm32k_2_fx[]; // Q15 -extern const Word16 w_hamm16k_2_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float w_hamm_sana32k_2[L_PROT_HAMM_LEN2_32k]; -extern const float w_hamm_sana16k_2[L_PROT_HAMM_LEN2_16k]; -extern const float w_hamm_sana48k_2[L_PROT_HAMM_LEN2_48k]; -#endif +extern const Word16 w_hamm48k_2_fx[]; // Q15 +extern const Word16 w_hamm32k_2_fx[]; // Q15 +extern const Word16 w_hamm16k_2_fx[]; // Q15 extern const Word16 swb_hr_inv_frm_len[4]; /* in Q19 */ extern const Word16 inv_tbl_2n_minus1[]; -extern const Word16 w_hamm_sana48k_2_fx[]; // Q15 -extern const Word16 w_hamm_sana32k_2_fx[]; // Q15 -extern const Word16 w_hamm_sana16k_2_fx[]; // Q15 -#ifndef IVAS_FLOAT_FIXED -extern const float h_high3_32_flt[L_FIR_FER2]; -extern const float h_high3_16_flt[L_FIR_FER2]; -#endif +extern const Word16 w_hamm_sana48k_2_fx[]; // Q15 +extern const Word16 w_hamm_sana32k_2_fx[]; // Q15 +extern const Word16 w_hamm_sana16k_2_fx[]; // Q15 extern const Word16 h_high3_32[L_FIR_FER2]; // Q15 extern const Word16 h_high3_16[L_FIR_FER2]; // Q15 extern const Word16 T_256DIV_L_Frame[]; // Q0 diff --git a/lib_dec/rst_dec.c b/lib_dec/rst_dec.c index f84802ab1..3b7436831 100644 --- a/lib_dec/rst_dec.c +++ b/lib_dec/rst_dec.c @@ -47,50 +47,3 @@ * * Reset decoder static variables in case of CNG frame *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void CNG_reset_dec( - Decoder_State *st, /* i/o: decoder state structure */ - float *pitch_buf, /* o : floating pitch for each subframe */ - float *voice_factors /* o : voicing factors */ -) -{ - mvr2r( UVWB_Ave, st->mem_AR, M ); - set_f( st->mem_MA, 0, M ); - set_f( st->dispMem, 0, 8 ); - st->tilt_code = 0.0f; - st->gc_threshold = 0.0f; - - /* last good received frame for FEC in ACELP */ - st->clas_dec = UNVOICED_CLAS; - st->last_good = UNVOICED_CLAS; - - /* LP-filtered pitch gain set to 0 */ - st->lp_gainp = 0.0f; - - /* convert CNG energy into CNG gain for ACELP FEC */ - st->lp_gainc = (float) sqrt( st->lp_ener ); - - /* reset the pitch buffer in case of FRAME_NO_DATA or SID frames */ - if ( st->L_frame == L_FRAME ) - { - set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); - } - else /* st->L_frame == L_FRAME16k */ - { - set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); - } - - set_f( voice_factors, 1.0, NB_SUBFR16k ); - - /* deactivate bass post-filter */ - st->bpf_off = 1; - - /* Reset active frame counter */ - if ( st->hTdCngDec != NULL ) - { - st->hTdCngDec->act_cnt2 = 0; - } - - return; -} -#endif diff --git a/lib_dec/rst_dec_fx.c b/lib_dec/rst_dec_fx.c index 4a43c7fd3..339d82854 100644 --- a/lib_dec/rst_dec_fx.c +++ b/lib_dec/rst_dec_fx.c @@ -6,7 +6,6 @@ #include "stl.h" #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ /*----------------------------------------------------------------------------------* @@ -93,4 +92,3 @@ void CNG_reset_dec_fx( return; } -#endif diff --git a/lib_dec/stat_dec.h b/lib_dec/stat_dec.h index 00f489024..5c7f894b9 100644 --- a/lib_dec/stat_dec.h +++ b/lib_dec/stat_dec.h @@ -85,78 +85,33 @@ typedef struct Word16 olapBufferAna[FFTLEN]; Word16 olapBufferSynth2[FFTLEN]; -#ifndef IVAS_FLOAT_FIXED - float msPeriodog_float[NPART_SHAPING]; /* Periodogram */ -#endif Word32 msPeriodog[NPART_SHAPING]; /* Periodogram */ Word16 msPeriodog_exp; /* Common exponent for fft and cldfb energies */ Word16 msPeriodog_exp_fft; Word16 msPeriodog_exp_cldfb; -#ifndef IVAS_FLOAT_FIXED - float msBminWin_float[NPART_SHAPING]; -#endif Word32 msBminWin[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msBminSubWin_float[NPART_SHAPING]; -#endif Word32 msBminSubWin[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msPsd_float[NPART_SHAPING]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ -#endif Word16 msPsd[NPART_SHAPING]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ Word32 msPsd_fx[NPART_SHAPING]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ Word16 msPsd_exp_fft; -#ifndef IVAS_FLOAT_FIXED - float msAlpha_float[NPART_SHAPING]; /* Optimal smoothing parameter */ -#endif - Word32 msAlpha[NPART_SHAPING]; /* Optimal smoothing parameter */ -#ifndef IVAS_FLOAT_FIXED - float msMinBuf_float[MSNUMSUBFR * NPART_SHAPING]; /* Buffer of minima */ -#endif + Word32 msAlpha[NPART_SHAPING]; /* Optimal smoothing parameter */ Word32 msMinBuf[MSNUMSUBFR * NPART_SHAPING]; /* Buffer of minima */ -#ifndef IVAS_FLOAT_FIXED - float msCurrentMinOut_float[NPART_SHAPING]; -#endif Word32 msCurrentMinOut[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msCurrentMin_float[NPART_SHAPING]; -#endif Word32 msCurrentMin[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msCurrentMinSubWindow_float[NPART_SHAPING]; -#endif Word32 msCurrentMinSubWindow[NPART_SHAPING]; Word16 msLocalMinFlag[NPART_SHAPING]; Word16 msNewMinFlag[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msPsdFirstMoment_float[NPART_SHAPING]; -#endif Word16 msPsdFirstMoment[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msPsdSecondMoment_float[NPART_SHAPING]; -#endif Word32 msPsdSecondMoment[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msNoiseFloor_float[NPART_SHAPING]; /* Estimated noise floor */ -#endif Word16 msNoiseFloor[NPART_SHAPING]; /* Estimated noise floor */ -#ifndef IVAS_FLOAT_FIXED - float msNoiseEst_float[NPART_SHAPING]; /* Estimated noise level */ -#endif - Word32 msNoiseEst[NPART_SHAPING]; /* Estimated noise level */ + Word32 msNoiseEst[NPART_SHAPING]; /* Estimated noise level */ Word16 msNoiseEst_exp; -#ifndef IVAS_FLOAT_FIXED - float msLogPeriodog_float[NPART_SHAPING]; /* Periodogram */ -#endif Word16 msLogPeriodog[NPART_SHAPING]; -#ifndef IVAS_FLOAT_FIXED - float msLogNoiseEst_float[NPART_SHAPING]; /* Estimated noise level */ -#endif Word16 msLogNoiseEst[NPART_SHAPING]; Word16 npart_shaping; /* Number of partitions */ @@ -172,83 +127,43 @@ typedef struct Word16 psize_inv_shaping[NPART_SHAPING]; /* Inverse of partition sizes */ -#ifndef IVAS_FLOAT_FIXED - float psize_shaping_float[NPART_SHAPING]; /* Partition sizes */ - float psize_inv_shaping_float[NPART_SHAPING]; /* Inverse of partition sizes */ - float bandNoiseShape_float[FFTLEN2]; /* CNG spectral shape computed at the decoder */ -#endif - Word32 bandNoiseShape[FFTLEN2]; /* CNG spectral shape computed at the decoder */ - Word16 bandNoiseShape_exp; /* exponent of bandNoiseShape */ -#ifndef IVAS_FLOAT_FIXED - float partNoiseShape_float[NPART]; /* CNG spectral shape computed at the decoder */ -#endif + Word16 bandNoiseShape_exp; /* exponent of bandNoiseShape */ Word32 partNoiseShape[NPART]; /* CNG spectral shape computed at the decoder */ Word16 partNoiseShape_exp; /* exponent of partNoiseShape */ -#ifndef IVAS_FLOAT_FIXED - float smoothed_psd[L_FRAME16k]; /* stereo CNA - periodogram smoothed with IIR filter */ - float msPeriodog_ST[NPART_SHAPING]; /* stereo CNA - short-term periodogram */ -#endif Word32 msPeriodog_ST_fx[NPART_SHAPING]; /* stereo CNA - short-term periodogram */ Word16 msPeriodog_ST_exp; /* exponent of stereo CNA - short-term periodogram */ Word16 ms_last_inactive_bwidth; /* stereo CNA - bandwidth from the last inactive frame */ Word16 ms_cnt_bw_up; /* stereo CNA - downward counter of frames since the last NB->WB switch */ -#ifndef IVAS_FLOAT_FIXED - float cna_LR_LT; /* stereo CNA - long-term L/R correlation factor calculated on stereo upmix */ -#endif - Word16 cna_LR_LT_fx; /* stereo CNA - long-term L/R correlation factor calculated on stereo upmix */ -#ifndef IVAS_FLOAT_FIXED - float cna_ILD_LT; /* stereo CNA - long-term ILD factor calculated on stereo upmix */ -#endif - Word16 cna_ILD_LT_fx; /* stereo CNA - long-term ILD factor calculated on stereo upmix */ -#ifndef IVAS_FLOAT_FIXED - float cna_g_state[STEREO_DFT_BAND_MAX]; /* stereo CNA - side gains from the last inactive frame */ - float cna_cm[STEREO_DFT_BAND_MAX]; /* stereo CNA - coherence from the last inactive frame */ -#endif - Word16 first_cna_noise_updated; /* stereo CNA - flag indicating that comfort noise has been properly initialized during warmup */ - Word16 first_cna_noise_update_cnt; /* stereo CNA - counter of CN initialization frames */ - Word16 cna_nbands; /* stereo CNA - number of frequency bands used by the CNA in DFT stereo mode */ + Word16 cna_LR_LT_fx; /* stereo CNA - long-term L/R correlation factor calculated on stereo upmix */ + Word16 cna_ILD_LT_fx; /* stereo CNA - long-term ILD factor calculated on stereo upmix */ + Word16 first_cna_noise_updated; /* stereo CNA - flag indicating that comfort noise has been properly initialized during warmup */ + Word16 first_cna_noise_update_cnt; /* stereo CNA - counter of CN initialization frames */ + Word16 cna_nbands; /* stereo CNA - number of frequency bands used by the CNA in DFT stereo mode */ Word16 cna_band_limits[STEREO_DFT_BAND_MAX + 1]; /* stereo CNA - band limits used by the CNA in DFT stereo mode */ -#ifndef IVAS_FLOAT_FIXED - float cna_act_fact; /* stereo CNA - long-term signal activity factor (0-1) */ -#endif -#ifndef IVAS_FLOAT_FIXED - float cna_rescale_fact; /* stereo CNA - CN energy re-scaling factor to maintain decoded energy */ -#endif - Word16 cna_seed; /* stereo CNA - seed for random CN generator */ + Word16 cna_seed; /* stereo CNA - seed for random CN generator */ Word16 flag_dtx_mode; -#ifndef IVAS_FLOAT_FIXED - float lp_speech_float; -#endif Word32 lp_speech; /* format: Q9.23 */ Word16 q_lp_speech; -#ifndef IVAS_FLOAT_FIXED - float lp_noise_float; -#endif Word32 lp_noise; /* format: Q9.23 */ Word16 q_lp_noise; -#ifndef IVAS_FLOAT_FIXED - float msPeriodogBuf_float[MSBUFLEN * NPART_SHAPING]; -#endif Word16 msPeriodogBuf[MSBUFLEN * NPART_SHAPING]; Word16 msPeriodogBufPtr; - Word32 smoothed_psd_fx[L_FRAME16k]; /* stereo CNA - periodogram smoothed with IIR filter */ -#ifdef IVAS_FLOAT_FIXED + Word32 smoothed_psd_fx[L_FRAME16k]; /* stereo CNA - periodogram smoothed with IIR filter */ Word16 cna_g_state_fx[STEREO_DFT_BAND_MAX]; /* stereo CNA - side gains from the last inactive frame */ Word16 cna_cm_fx[STEREO_DFT_BAND_MAX]; /* stereo CNA - coherence from the last inactive frame */ Word16 cna_act_fact_fx; /* stereo CNA - long-term signal activity factor (0-1) */ Word16 cna_rescale_fact_fx; Word16 smoothed_psd_exp; -#endif } FD_CNG_DEC, *HANDLE_FD_CNG_DEC; @@ -269,46 +184,19 @@ typedef struct Word16 Transient[MAX_POST_LEN]; Word16 TCX_Tonality[DEC_STATE_LEN]; -#ifndef IVAS_FLOAT_FIXED - float outx_new_n1; -#endif Word16 outx_new_n1_fx; -#ifndef IVAS_FLOAT_FIXED - float nsapp_gain; -#endif Word16 nsapp_gain_fx; -#ifndef IVAS_FLOAT_FIXED - float nsapp_gain_n; -#endif Word16 nsapp_gain_n_fx; -#ifndef IVAS_FLOAT_FIXED - float data_reci2[L_FRAME_MAX]; -#endif Word32 data_reci2_fx[L_FRAME_MAX]; Word16 data_reci2_scale; -#ifndef IVAS_FLOAT_FIXED - float data_noise_float[L_FRAME_MAX]; -#endif Word16 data_noise[L_FRAME_MAX]; -#ifndef IVAS_FLOAT_FIXED - float ener_mean; -#endif Word32 ener_mean_fx; -#ifndef IVAS_FLOAT_FIXED - float ener; -#endif Word32 ener_fx; Word16 zp; Word16 zp_fx; -#ifndef IVAS_FLOAT_FIXED - float recovery_gain_float; -#endif Word16 recovery_gain; /*outside waveformadjustment: Q14 - insinde waveformadjustment: Q15*/ -#ifndef IVAS_FLOAT_FIXED - float step_concealgain; -#endif Word16 step_concealgain_fx; Word16 concealment_method; @@ -336,9 +224,6 @@ typedef struct Word16 *spectralData; Word16 spectralData_exp; -#ifndef IVAS_FLOAT_FIXED - float *scaleFactors_float; -#endif Word16 *scaleFactors; Word16 *scaleFactors_exp; @@ -360,11 +245,6 @@ typedef struct Word16 phaseDiff[MAX_NUMBER_OF_IDX]; // Q12 /* This one can be stored with 16 bits in range 0..2*PI */ Word16 phase_currentFramePredicted[MAX_NUMBER_OF_IDX * GROUP_LENGTH]; // Q13 /* This one can be stored with 16 bits in range [-pi;pi] 2Q13, but the code has to be adapted to use moduo(2*PI) after adding */ -#ifndef IVAS_FLOAT_FIXED - Float32 phaseDiff_float[MAX_NUMBER_OF_IDX]; /* This one can be stored with 16 bits in range 0..2*PI */ - - Float32 phase_currentFramePredicted_float[MAX_NUMBER_OF_IDX * GROUP_LENGTH]; /* This one can be stored with 16 bits in range 0..2*PI, but the code has to be adapted to use moduo(2*PI) after adding */ -#endif } TonalComponentsInfo; typedef struct tonalmdctconceal @@ -376,9 +256,6 @@ typedef struct tonalmdctconceal Word16 nNonZeroSamples; Word16 nScaleFactors; -#ifndef IVAS_FLOAT_FIXED - float lastPitchLag_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word32 lastPitchLag; blockData lastBlockData; @@ -392,13 +269,6 @@ typedef struct tonalmdctconceal Word16 timeDataBuffer[( 3 * L_FRAME_MAX ) / 2]; /* 16 bits are enough for the TD signal */ -#ifndef IVAS_FLOAT_FIXED - Float32 scaleFactorsBuffers_float[2][FDNS_NPTS]; /* Contains also global gain. If it can not be stored in 16 bits with global gain included, then store global gain separately. */ - Float32 spectralDataBuffers_float[2][L_FRAME_MAX]; /* 16 bits is enough, because it is stored before applying scale factors. Take care that power spectrum is also stored here. */ - Float32 timeDataBuffer_float[( 3 * L_FRAME_MAX ) / 2]; - Float32 *lastPcmOut_float; - Float32 *secondLastPcmOut_float; -#endif Word16 *lastPcmOut; Word16 *secondLastPcmOut; @@ -410,38 +280,18 @@ typedef struct tonalmdctconceal Word16 secondLastPowerSpectrum_exp; Word32 scaleFactorsBackground_fx[FDNS_NPTS]; -#ifndef IVAS_FLOAT_FIXED - float *secondLastPowerSpectrum_float; - float scaleFactorsBackground_flt[FDNS_NPTS]; - float scf_fadeout_flt; -#endif Word16 scf_fadeout; PsychoacousticParameters *psychParams; PsychoacousticParameters psychParamsTCX20; PsychoacousticParameters psychParamsTCX10; -#ifndef IVAS_FLOAT_FIXED - float last_block_nrg_flt; -#endif Word32 last_block_nrg; Word16 last_block_nrg_exp; -#ifndef IVAS_FLOAT_FIXED - float curr_noise_nrg_flt; -#endif Word32 curr_noise_nrg; Word16 curr_noise_nrg_exp; -#ifndef IVAS_FLOAT_FIXED - float faded_signal_nrg_flt; -#endif Word32 faded_signal_nrg; Word16 faded_signal_nrg_exp; -#ifndef IVAS_FLOAT_FIXED - float nFramesLost_float; -#endif Word16 nFramesLost; TonalComponentsInfo *pTCI; -#ifndef IVAS_FLOAT_FIXED - TonalComponentsInfo pTCI1; -#endif } TonalMDCTConceal_INSTANCE, *TonalMDCTConcealPtr; @@ -474,16 +324,10 @@ typedef struct igfdec_private_data_struct IGF_INFO igfInfo; /* envelope reconstruction: */ -#ifndef IVAS_FLOAT_FIXED - float igf_sN_float[IGF_MAX_SFB]; /* only with short blocks as static needed */ -#endif Word32 igf_sN[IGF_MAX_SFB]; /* Q31 | only with short blocks as static needed */ Word16 igf_sN_e[IGF_MAX_SFB]; /* | exponent for igf_sN */ -#ifndef IVAS_FLOAT_FIXED - float igf_pN_float[IGF_MAX_SFB]; /* only with short blocks as static needed */ -#endif - Word32 igf_pN[IGF_MAX_SFB]; /* Q31 | only with short blocks as static needed */ + Word32 igf_pN[IGF_MAX_SFB]; /* Q31 | only with short blocks as static needed */ Word16 igf_pN_e[IGF_MAX_SFB]; @@ -494,10 +338,6 @@ typedef struct igfdec_private_data_struct Word16 igf_flatteningTrigger_subframe[IGF_MAX_SUBFRAMES]; /* spectral whitening: */ -#ifndef IVAS_FLOAT_FIXED - float *pSpecFlat_float; - float pSpecFlatBuf[IGF_START_MX]; -#endif Word32 *pSpecFlat; Word32 pSpecFlatBuf_fx[IGF_START_MX]; /* Q31 | MDCT spectrum before LPC shaping */ Word16 pSpecFlat_exp; @@ -508,9 +348,6 @@ typedef struct igfdec_private_data_struct Word16 prevWhiteningLevel[IGF_MAX_TILES]; /* needed for concealment */ Word16 currWhiteningLevel_subframe[IGF_MAX_SUBFRAMES][IGF_MAX_TILES]; Word16 prevWhiteningLevel_subframe[IGF_MAX_SUBFRAMES][IGF_MAX_TILES]; /* needed for concealment */ -#ifndef IVAS_FLOAT_FIXED - float totalNoiseNrg_float; -#endif Word32 totalNoiseNrg; Word16 totalNoiseNrg_exp; @@ -518,9 +355,6 @@ typedef struct igfdec_private_data_struct Word16 headroom_TCX_noise_white; Word16 headroom_TCX_noise; -#ifndef IVAS_FLOAT_FIXED - float totalNoiseNrg_off_float; -#endif Word32 totalNoiseNrg_off; Word16 totalNoiseNrg_off_exp; Word16 n_noise_bands_off; @@ -546,10 +380,6 @@ typedef struct igfdec_instance_struct Word16 infoTCXNoise_evs[IGF_START_MX]; Word16 *flag_sparse; Word16 flag_sparseBuf[N_MAX_TCX - IGF_START_MN]; -#ifndef IVAS_FLOAT_FIXED - float *virtualSpec_float; // needed in MCT path - float virtualSpecBuf[N_MAX_TCX - IGF_START_MN]; -#endif Word32 *virtualSpec_fx; Word32 virtualSpec[N_MAX_TCX - IGF_START_MN]; /* Q31 | buffer for temp flattening */ Word16 virtualSpec_e; /* | exponent of virtualSpec */ @@ -566,10 +396,6 @@ typedef struct igfdec_instance_struct typedef struct tec_dec_structure { -#ifndef IVAS_FLOAT_FIXED - float pGainTemp[CLDFB_NO_COL_MAX]; - float loBuffer_flt[CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG]; -#endif // fixed variable Word16 pGainTemp_m[CLDFB_NO_COL_MAX]; @@ -589,37 +415,21 @@ typedef struct tcx_ltp_dec_structure { /* TCX-LTP */ Word16 tcxltp; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_gain_float; -#endif Word16 tcxltp_gain; /* Q15 */ Word16 tcxltp_pitch_int; Word16 tcxltp_pitch_fr; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_mem_in_float[TCXLTP_MAX_DELAY]; -#endif Word16 tcxltp_mem_in[TCXLTP_MAX_DELAY]; Word32 tcxltp_mem_in_32[TCXLTP_MAX_DELAY]; -#ifdef IVAS_FLOAT_FIXED Word16 exp_tcxltp_mem_in; -#endif -#ifndef IVAS_FLOAT_FIXED - float tcxltp_mem_out_float[L_FRAME48k]; -#endif Word16 tcxltp_mem_out[L_FRAME48k]; Word32 tcxltp_mem_out_32[L_FRAME48k]; -#ifdef IVAS_FLOAT_FIXED Word16 exp_tcxltp_mem_out; -#endif Word16 tcxltp_pitch_int_post_prev; Word16 tcxltp_pitch_fr_post_prev; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_gain_post_prev_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 tcxltp_gain_post_prev; Word16 tcxltp_filt_idx_prev; @@ -637,16 +447,9 @@ typedef struct tcx_dec_structure Word16 envWeighted; /* are is{p,f}_old[] weighted or not? */ /* tonal PLC */ -#ifndef IVAS_FLOAT_FIXED - float tcxltp_second_last_pitch_float; - float tcxltp_third_last_pitch_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word32 tcxltp_second_last_pitch; Word32 tcxltp_third_last_pitch; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_last_gain_unmodified_float; -#endif Word16 tcxltp_last_gain_unmodified; /* Q15 */ Word16 tcx_hm_LtpPitchLag; @@ -656,60 +459,27 @@ typedef struct tcx_dec_structure Word16 pit_max_TCX; Word16 L_frameTCX; -#ifndef IVAS_FLOAT_FIXED - float old_excFB[L_FRAME48k]; /* old excitation FB */ -#endif Word16 old_excFB_fx[L_FRAME48k]; /* old excitation FB */ Word16 old_synth_len; Word16 old_synth_lenFB; -#ifndef IVAS_FLOAT_FIXED - float old_synth_float[OLD_SYNTH_INTERNAL_DEC]; /* synthesis memory */ -#endif Word16 old_synth[OLD_SYNTH_INTERNAL_DEC]; /* synthesis memory */ Word16 q_old_synth; -#ifndef IVAS_FLOAT_FIXED - float synth_history[L_PROT48k + L_FRAME_MAX]; /* unified synthesis memory */ -#endif Word16 synth_history_fx[L_PROT48k + L_FRAME_MAX]; /*TCX unified synthesis memory */ Word16 q_synth_history_fx; -#ifndef IVAS_FLOAT_FIXED - float *old_synthFB; -#endif Word16 *old_synthFB_fx; -#ifndef IVAS_FLOAT_FIXED - float *prev_good_synth; -#endif Word16 *prev_good_synth_fx; -#ifndef IVAS_FLOAT_FIXED - float old_syn_Overl_float[L_FRAME32k / 2]; -#endif Word16 old_syn_Overl[L_FRAME32k / 2]; Word32 old_syn_Overl_32[L_FRAME32k / 2]; Word16 Q_old_syn_Overl; -#ifndef IVAS_FLOAT_FIXED - float syn_Overl_TDAC_float[L_FRAME32k / 2]; -#endif Word16 syn_Overl_TDAC[L_FRAME32k / 2]; Word16 Q_syn_Overl_TDAC; -#ifndef IVAS_FLOAT_FIXED - float syn_Overl_TDACFB_float[L_FRAME_MAX / 2]; -#endif Word16 syn_Overl_TDACFB[L_FRAME_MAX / 2]; Word16 Q_syn_Overl_TDACFB; -#ifndef IVAS_FLOAT_FIXED - float syn_Overl_float[L_FRAME32k / 2]; -#endif Word16 syn_Overl[L_FRAME32k / 2]; Word16 Q_syn_Overl; -#ifndef IVAS_FLOAT_FIXED - float syn_OverlFB_float[L_FRAME_MAX / 2]; -#endif Word16 syn_OverlFB[L_FRAME_MAX / 2]; Word16 Q_syn_OverlFB; -#ifndef IVAS_FLOAT_FIXED - float FBTCXdelayBuf_float[111]; /* 2.3125ms at 48kHz -> 111 samples */ -#endif Word16 FBTCXdelayBuf[111]; /* 2.3125ms at 48kHz -> 111 samples */ Word32 FBTCXdelayBuf_32[111]; /* 2.3125ms at 48kHz -> 111 samples */ @@ -720,63 +490,33 @@ typedef struct tcx_dec_structure /* PLC */ Word16 noise_filling_index[NB_DIV]; /* PLC - last decoded noise filling index */ Word16 tnsActive[NB_DIV]; -#ifndef IVAS_FLOAT_FIXED - float ltpGainMemory[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth */ -#endif Word16 ltpGainMemory_fx[N_LTP_GAIN_MEMS]; /* Q15 */ UWord16 kernel_type[2]; /* transform kernel type in each subframe (MDCT or MDST) */ Word16 prev_widow_left_rect; /* state variables for the minimum statistics used for PLC */ -#ifndef IVAS_FLOAT_FIXED - float CngLevelBackgroundTrace_bfi; /* PLC - long term gain estimate for background level, used for PLC fade out */ - float NoiseLevelMemory_bfi[PLC_MIN_STAT_BUFF_SIZE]; -#endif Word16 NoiseLevelIndex_bfi; Word16 CurrLevelIndex_bfi; Word16 conCngLevelBackgroundTrace; /* Q15 long term gain estimate for background level, used for PLC fade out */ Word16 conCngLevelBackgroundTrace_e; -#ifndef IVAS_FLOAT_FIXED - float LastFrameLevel_bfi; -#endif -#ifdef IVAS_FLOAT_FIXED Word16 LastFrameLevel_bfi_fx; -#endif // IVAS_FLOAT_FIXED Word16 conNoiseLevelMemory[PLC_MIN_STAT_BUFF_SIZE], conNoiseLevelMemory_e[PLC_MIN_STAT_BUFF_SIZE]; /*Q15*/ Word16 conNoiseLevelIndex; /*Q0*/ Word16 conCurrLevelIndex; /*Q0*/ Word16 conLastFrameLevel, conLastFrameLevel_e; /*Q15*/ -#ifndef IVAS_FLOAT_FIXED - float old_gaintcx_bfi_float; - float conceal_eof_gain_float; -#endif Word16 old_gaintcx_bfi, old_gaintcx_bfi_e; - Word16 conceal_eof_gain; /*Q14*/ -#ifdef IVAS_FLOAT_FIXED + Word16 conceal_eof_gain; /*Q14*/ Word32 conceal_eof_gain32; /*have been created for further calculation */ Word16 conceal_eof_gain_e; /*have been created for further calculation */ -#endif -#ifndef IVAS_FLOAT_FIXED - float damping_float; -#endif - Word16 damping; /* 1Q14 */ + Word16 damping; /* 1Q14 */ -#ifndef IVAS_FLOAT_FIXED - float gainHelper_float; -#endif Word16 gainHelper, gainHelper_e; /*can be >1*/ -#ifndef IVAS_FLOAT_FIXED - float stepCompensate_float; -#endif Word16 stepCompensate, stepCompensate_e; Word16 tcxConceal_recalc_exc; -#ifndef IVAS_FLOAT_FIXED - float cummulative_damping_tcx_float; -#endif Word16 cummulative_damping_tcx; // Q15 @@ -794,40 +534,22 @@ typedef struct gsc_dec_structure Word16 cor_strong_limit; /* AC mode (GSC) - Indicator about high spectral correlation per band */ // Word16 cor_strong_limit; /* AC mode (GSC) - Indicator about high spectral correlation per band */ -#ifndef IVAS_FLOAT_FIXED - float old_y_gain[MBANDS_GN16k]; /* AC mode (GSC) - AR mem for low rate gain quantization */ -#endif Word16 old_y_gain_fx[MBANDS_GN16k]; /* AC mode (GSC) - AR mem for low rate gain quantization */ Word16 noise_lev; /* AC mode (GSC) - noise level */ // Word16 noise_lev; /* AC mode (GSC) - noise level Q0*/ -#ifndef IVAS_FLOAT_FIXED - float lt_ener_per_band[MBANDS_GN16k]; -#endif Word16 lt_ener_per_band_fx[MBANDS_GN16k]; /* Q12 */ -#ifndef IVAS_FLOAT_FIXED - float Last_frame_ener; /* AC mode (GSC) - last frame energy */ -#endif Word32 Last_frame_ener_fx; /* AC mode (GSC) - last frame energy */ -#ifndef IVAS_FLOAT_FIXED - float Last_GSC_spectrum[L_FRAME16k]; /* AC mode (GSC) - Last good GSC spectrum */ -#endif Word16 Last_GSC_spectrum_fx[L_FRAME16k]; /* AC mode (GSC) - Last good GSC spectrum */ Word16 Last_GSC_pit_band_idx; /* AC mode (GSC) - Last pitch band index */ // Word16 Last_GSC_pit_band_idx; /* AC mode (GSC) - Last pitch band index Q0*/ -#ifndef IVAS_FLOAT_FIXED - float last_exc_dct_in[L_FRAME16k]; /* AC mode (GSC) - previous excitation */ -#endif Word16 last_exc_dct_in_fx[L_FRAME16k]; /* AC mode (GSC) - previous excitation */ -#ifndef IVAS_FLOAT_FIXED - float last_ener; /* AC mode (GSC) - previous energy */ -#endif Word16 last_ener_fx; /* AC mode (GSC) - previous energy */ Word16 last_bitallocation_band[6]; /* AC mode (GSC) - previous bit allocation of each band */ @@ -843,14 +565,8 @@ typedef struct gsc_dec_structure typedef struct WI_dec_structure { -#ifndef IVAS_FLOAT_FIXED - float old_exc2[L_EXC_MEM]; /* FEC - old excitation2 used in fast recovery */ -#endif Word16 old_exc2_fx[L_EXC_MEM]; /* FEC - old excitation2 used in fast recovery */ -#ifndef IVAS_FLOAT_FIXED - float old_syn2[L_EXC_MEM]; /* FEC - old syn speech used in fast recovery */ -#endif Word16 old_syn2_fx[L_EXC_MEM]; /* FEC - old syn speech used in fast recovery */ @@ -863,9 +579,6 @@ typedef struct WI_dec_structure typedef struct ld_music_postfilt_structure { -#ifndef IVAS_FLOAT_FIXED - float LDm_mem_etot; /* LD music post-filter - total energy memory */ -#endif Word16 LDm_mem_etot_fx; /* LD music post-filter - total energy memory */ Word16 LDm_last_music_flag; /* LD music post-filter - last music flag */ @@ -874,43 +587,19 @@ typedef struct ld_music_postfilt_structure Word16 LDm_nb_thr_3; -#ifndef IVAS_FLOAT_FIXED - float dct_post_old_exc[DCT_L_POST - OFFSET2]; -#endif Word16 dct_post_old_exc_fx[DCT_L_POST - OFFSET2]; -#ifndef IVAS_FLOAT_FIXED - float LDm_thres[4]; /* LD music post-filter - Classification threshold */ -#endif Word16 LDm_thres_fx[4]; /* LD music post-filter - Classification threshold */ -#ifndef IVAS_FLOAT_FIXED - float LDm_lt_diff_etot[MAX_LT]; /* LD music post-filter - long-term total energy variation */ -#endif Word16 LDm_lt_diff_etot_fx[MAX_LT]; /* LD music post-filter - long-term total energy variation */ -#ifndef IVAS_FLOAT_FIXED - float LDm_enh_lp_gbin[VOIC_BINS_HR]; /* LD music post-filter - smoothed suppression gain, per bin FFT */ -#endif Word16 LDm_enh_lp_gbin_fx[VOIC_BINS_HR]; /* LD music post-filter - smoothed suppression gain, per bin FFT */ -#ifndef IVAS_FLOAT_FIXED - float LDm_enh_lf_EO[VOIC_BINS_HR]; /* LD music post-filter - old per bin E for previous half frame */ -#endif Word32 LDm_enh_lf_EO_fx[VOIC_BINS_HR]; /* LD music post-filter - old per bin E for previous half frame */ -#ifndef IVAS_FLOAT_FIXED - float LDm_enh_min_ns_gain; /* LD music post-filter - minimum suppression gain */ -#endif Word16 LDm_enh_min_ns_gain_fx; /* LD music post-filter - minimum suppression gain */ -#ifndef IVAS_FLOAT_FIXED - float LDm_bckr_noise[MBANDS_GN_LD]; /* LD music post-filter - background noise estimation per critical band */ -#endif Word32 LDm_bckr_noise_fx[MBANDS_GN_LD]; /* LD music post-filter - background noise estimation per critical band */ -#ifndef IVAS_FLOAT_FIXED - float filt_lfE[DCT_L_POST]; -#endif Word16 filt_lfE_fx[DCT_L_POST]; Word16 last_nonfull_music; @@ -926,32 +615,17 @@ typedef struct ld_music_postfilt_structure typedef struct bass_postfilt_structure { -#ifndef IVAS_FLOAT_FIXED - float pst_old_syn[NBPSF_PIT_MAX]; /* Bass post-filter - old synthesis buffer 1 */ -#endif Word16 pst_old_syn_fx[NBPSF_PIT_MAX]; /* Bass post-filter - old synthesis buffer 1 Q_syn2-1*/ Word16 q_pst_old_syn; -#ifndef IVAS_FLOAT_FIXED - float pst_mem_deemp_err; /* Bass post-filter - filter memory of noise LP filter */ -#endif Word16 pst_mem_deemp_err_fx; /* Bass post-filter - filter memory of noise LP filter Q_syn2-1*/ -#ifndef IVAS_FLOAT_FIXED - float pst_lp_ener; /* Bass post-filter - long-term energy */ -#endif Word16 pst_lp_ener_fx; /* Bass post-filter - long-term energy Q8*/ Word16 Track_on_hist[L_TRACK_HIST]; /* Bass post-filter - History of half frame usage */ - Word16 vibrato_hist[L_TRACK_HIST]; /* Bass post-filter - History of frames declared as vibrato */ - // Word16 vibrato_hist[L_TRACK_HIST]; /* Bass post-filter - History of frames declared as vibrato */ -#ifndef IVAS_FLOAT_FIXED - float psf_att; /* Bass post-filter - post filter attenuation factor */ -#endif - Word16 psf_att_fx; /* Bass post-filter - post filter attenuation factor */ -#ifndef IVAS_FLOAT_FIXED - float mem_mean_pit[L_TRACK_HIST]; /* Bass post-filter - average pitch memory */ -#endif + Word16 vibrato_hist[L_TRACK_HIST]; /* Bass post-filter - History of frames declared as vibrato */ + // Word16 vibrato_hist[L_TRACK_HIST]; /* Bass post-filter - History of frames declared as vibrato */ + Word16 psf_att_fx; /* Bass post-filter - post filter attenuation factor */ Word16 mem_mean_pit_fx[L_TRACK_HIST]; /* Bass post-filter - average pitch memory */ @@ -965,10 +639,7 @@ typedef struct td_cng_dec_structure { Word16 cng_seed; /* DTX/CNG - seed for white noise random generator */ // Word16 cng_seed; /*CNG and DTX - seed for white noise random generator*/ -#ifndef IVAS_FLOAT_FIXED - float Enew; /* DTX/CNG - decoded residual energy */ -#endif - Word32 Enew_fx; /* CNG and DTX - decoded residual energy Q6*/ + Word32 Enew_fx; /* CNG and DTX - decoded residual energy Q6*/ Word16 old_enr_index; /* DTX/CNG - index of last encoded CNG energy */ @@ -982,19 +653,10 @@ typedef struct td_cng_dec_structure Word16 ho_hist_ptr; /* DTX/CNG - pointer for averaging buffers */ - Word32 ho_sid_bw; /* DTX/CNG - SID bandwidth flags */ - // Word32 ho_sid_bw; /* CNG and DTX - SID bandwidth flags */ -#ifndef IVAS_FLOAT_FIXED - float ho_lsp_hist[HO_HIST_SIZE * M]; /* DTX/CNG - old LSP buffer for averaging */ -#endif - Word16 ho_lsp_hist_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ -#ifndef IVAS_FLOAT_FIXED - float ho_ener_hist[HO_HIST_SIZE]; /* DTX/CNG - energy buffer for averaging */ -#endif + Word32 ho_sid_bw; /* DTX/CNG - SID bandwidth flags */ + // Word32 ho_sid_bw; /* CNG and DTX - SID bandwidth flags */ + Word16 ho_lsp_hist_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ Word32 ho_ener_hist_fx[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ /*Q6 */ -#ifndef IVAS_FLOAT_FIXED - float ho_env_hist[HO_HIST_SIZE * NUM_ENV_CNG]; -#endif Word32 ho_env_hist_fx[HO_HIST_SIZE * NUM_ENV_CNG]; @@ -1005,17 +667,8 @@ typedef struct td_cng_dec_structure Word16 ho_circ_ptr; /* DTX/CNG - pointer for averaging buffers */ // Word16 ho_circ_ptr; /* CNG and DTX - pointer for averaging buffers */ -#ifndef IVAS_FLOAT_FIXED - float ho_lsp_circ[HO_HIST_SIZE * M]; /* DTX/CNG - old LSP buffer for averaging */ -#endif - Word16 ho_lsp_circ_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ -#ifndef IVAS_FLOAT_FIXED - float ho_ener_circ[HO_HIST_SIZE]; /* DTX/CNG - energy buffer for averaging */ -#endif + Word16 ho_lsp_circ_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ Word32 ho_ener_circ_fx[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ /* Q6 */ -#ifndef IVAS_FLOAT_FIXED - float ho_env_circ[HO_HIST_SIZE * NUM_ENV_CNG]; -#endif Word32 ho_env_circ_fx[HO_HIST_SIZE * NUM_ENV_CNG]; @@ -1027,50 +680,17 @@ typedef struct td_cng_dec_structure Word16 act_cnt2; /* DTX/CNG - counter of active frames for CNG_mode switching */ // Word16 act_cnt2; /* DTX/CNG - counter of active frames for CNG_mode switching */ -#ifndef IVAS_FLOAT_FIXED - float old_env[20]; -#endif Word32 old_env_fx[20]; -#ifndef IVAS_FLOAT_FIXED - float lp_env[20]; -#endif Word32 lp_env_fx[20]; -#ifndef IVAS_FLOAT_FIXED - float exc_mem[24]; -#endif Word16 exc_mem_fx[24]; -#ifndef IVAS_FLOAT_FIXED - float exc_mem1[30]; -#endif Word16 exc_mem1_fx[30]; -#ifndef IVAS_FLOAT_FIXED - float interpol_3_2_cng_dec[INTERP_3_2_MEM_LEN]; - - /* SWB DTX/CNG parameters */ - float shb_cng_ener; - - float shb_lpcCNG[LPC_SHB_ORDER + 1]; -#endif Word16 shb_lpcCNG_fx[LPC_SHB_ORDER + 1]; /* Assumed in Q12 */ -#ifndef IVAS_FLOAT_FIXED - float shb_cng_gain; -#endif - Word16 shb_cng_gain_fx; /* Assumed in Q8 */ -#ifndef IVAS_FLOAT_FIXED - float wb_cng_ener; - float last_wb_cng_ener; - float last_shb_cng_ener; -#endif + Word16 shb_cng_gain_fx; /* Assumed in Q8 */ Word16 swb_cng_seed; -#ifndef IVAS_FLOAT_FIXED - float lsp_shb_prev_prev[LPC_SHB_ORDER]; - float lsp_shb_prev[LPC_SHB_ORDER]; -#endif Word16 shb_dtx_count; Word16 trans_cnt; -#ifdef IVAS_FLOAT_FIXED Word16 interpol_3_2_cng_dec_fx[INTERP_3_2_MEM_LEN]; Word32 shb_cng_ener_fx_32; // Q(11) @@ -1081,14 +701,8 @@ typedef struct td_cng_dec_structure Word16 lsp_shb_prev_fx[LPC_SHB_ORDER]; // Q(14) Word16 lsp_shb_prev_prev_fx[LPC_SHB_ORDER]; // Q(14) -#endif Word16 burst_cnt; -#ifndef IVAS_FLOAT_FIXED - float last_shb_ener; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 last_shb_ener_fx; // Q(11) -#endif Word16 last_cng_type_fx; /* DTX/CNG - flag indicating last frame LP or CLDFB based SID/CNG */ @@ -1105,13 +719,7 @@ typedef struct sc_vbr_dec_structure Word16 firstTime_voiceddec; /* DTFS variables */ -#ifndef IVAS_FLOAT_FIXED - float dtfs_dec_a[MAXLAG_WI]; -#endif Word16 dtfs_dec_a_fx[MAXLAG_WI]; /*Variable Q format in dtfs_dec_Q*/ -#ifndef IVAS_FLOAT_FIXED - float dtfs_dec_b[MAXLAG_WI]; -#endif Word16 dtfs_dec_b_fx[MAXLAG_WI]; /*Variable Q format in dtfs_dec_Q*/ Word16 dtfs_dec_lag; @@ -1120,54 +728,21 @@ typedef struct sc_vbr_dec_structure Word16 dtfs_dec_nH_4kHz; -#ifndef IVAS_FLOAT_FIXED - float dtfs_dec_upper_cut_off_freq_of_interest; -#endif Word16 dtfs_dec_upper_cut_off_freq_of_interest_fx; /*Q0*/ -#ifndef IVAS_FLOAT_FIXED - float dtfs_dec_upper_cut_off_freq; -#endif - Word16 dtfs_dec_upper_cut_off_freq_fx; /*Q0*/ -#ifndef IVAS_FLOAT_FIXED - float ph_offset_D; -#endif - Word16 ph_offset_D_fx; /* normalized by 2Pi Q15*/ -#ifndef IVAS_FLOAT_FIXED - float lastLgainD; /* previous gain value for the low band */ -#endif - Word16 lastLgainD_fx; /* previous gain value for the low band Q11*/ -#ifndef IVAS_FLOAT_FIXED - float lastHgainD; /* previous gain value for the high band */ -#endif - Word16 lastHgainD_fx; /* previous gain value for the high band Q11 */ -#ifndef IVAS_FLOAT_FIXED - float lasterbD[NUM_ERB_WB]; /* previous amplitude spectrum (ERB) */ -#endif - Word16 lasterbD_fx[NUM_ERB_WB]; /* previous amplitude spectrum (ERB) Q13*/ + Word16 dtfs_dec_upper_cut_off_freq_fx; /*Q0*/ + Word16 ph_offset_D_fx; /* normalized by 2Pi Q15*/ + Word16 lastLgainD_fx; /* previous gain value for the low band Q11*/ + Word16 lastHgainD_fx; /* previous gain value for the high band Q11 */ + Word16 lasterbD_fx[NUM_ERB_WB]; /* previous amplitude spectrum (ERB) Q13*/ Word16 dtfs_dec_Q; /*Q0*/ /* NELP decoder variables */ -#ifndef IVAS_FLOAT_FIXED - float bp1_filt_mem_nb_dec[14]; -#endif Word32 bp1_filt_mem_nb_dec_fx[14]; /* qfm currently Q0*/ -#ifndef IVAS_FLOAT_FIXED - float bp1_filt_mem_wb_dec[8]; -#endif - Word16 bp1_filt_mem_wb_dec_fx[8]; /* qfm currently Q0*/ -#ifndef IVAS_FLOAT_FIXED - float shape1_filt_mem_dec[20]; -#endif + Word16 bp1_filt_mem_wb_dec_fx[8]; /* qfm currently Q0*/ Word16 shape1_filt_mem_dec_fx[10]; /* qfm currently Q0*/ -#ifndef IVAS_FLOAT_FIXED - float shape2_filt_mem_dec[20]; -#endif Word16 shape2_filt_mem_dec_fx[10]; /* qfm currently Q0*/ -#ifndef IVAS_FLOAT_FIXED - float shape3_filt_mem_dec[20]; -#endif Word16 shape3_filt_mem_dec_fx[10]; /* qfm currently Q0*/ @@ -1187,9 +762,6 @@ typedef struct hq_nbfec_structure Word16 prev_last_core; /* !!! note: the parameter is identical to last_core in IVAS */ // Word16 prev_last_core; /* !!! note: the parameter is identical to last_core in IVAS */ -#ifndef IVAS_FLOAT_FIXED - float diff_energy; -#endif Word16 diff_energy_fx; Word16 stat_mode_out; @@ -1203,29 +775,14 @@ typedef struct hq_nbfec_structure Word16 old_Min_ind; -#ifndef IVAS_FLOAT_FIXED - float old_auOut_2fr[L_FRAME8k * 2]; -#endif Word16 old_auOut_2fr_fx[L_FRAME8k * 2]; -#ifndef IVAS_FLOAT_FIXED - float old_out_pha[2][N_LEAD_NB]; /* FEC for HQ Core, 0-phase matching old_out, 1-overlapping original old_out and phase matching old_out*/ -#endif Word16 old_out_pha_fx[2][N_LEAD_NB]; /* FEC for HQ Core, 0-phase matching old_out, 1-overlapping original old_out and phase matching old_out*/ -#ifndef IVAS_FLOAT_FIXED - float ynrm_values[MAX_SB_NB][MAX_PGF]; -#endif Word32 ynrm_values_fx[MAX_SB_NB][MAX_PGF]; -#ifndef IVAS_FLOAT_FIXED - float r_p_values[MAX_SB_NB][MAX_ROW]; -#endif Word32 r_p_values_fx[MAX_SB_NB][MAX_ROW]; -#ifndef IVAS_FLOAT_FIXED - float Norm_gain[SFM_N_NB]; -#endif Word16 Norm_gain_fx[SFM_N_NB]; /*Word16 old_hqswb_clas;*/ /* only used in inactive code, where it might probably be replaced by old_hqswb_clas_fx */ @@ -1233,28 +790,16 @@ typedef struct hq_nbfec_structure Word16 HQ_FEC_seed; -#ifndef IVAS_FLOAT_FIXED - float energy_MA_Curr[2]; -#endif Word16 energy_MA_Curr_fx[2]; Word16 prev_sign_switch[HQ_FEC_SIGN_SFM]; Word16 prev_sign_switch_2[HQ_FEC_SIGN_SFM]; -#ifndef IVAS_FLOAT_FIXED - float old_coeffs[L_FRAME8k]; /* HQ core - old coefficients (for FEC) */ -#endif Word32 old_coeffs_fx[L_FRAME8k]; /* HQ core - old coefficients (for FEC) */ -#ifndef IVAS_FLOAT_FIXED - float oldIMDCTout[L_FRAME8k / 2]; -#endif Word32 oldIMDCTout_fx[L_FRAME8k / 2]; -#ifndef IVAS_FLOAT_FIXED - float prev_oldauOut[L_FRAME8k]; -#endif Word16 prev_oldauOut_fx[L_FRAME8k]; @@ -1267,18 +812,10 @@ typedef struct hq_nbfec_structure typedef struct hq_dec_structure { -#ifndef IVAS_FLOAT_FIXED - float old_out[L_FRAME48k]; /* HQ core - previous synthesis for OLA */ -#endif Word32 oldOut_fx[L_FRAME48k]; /* HQ core - previous synthesis for OLA */ Word16 old_out_fx[L_FRAME48k]; /* HQ core - previous synthesis for OLA */ -#ifdef IVAS_FLOAT_FIXED Word16 exp_old_out; -#endif -#ifndef IVAS_FLOAT_FIXED - float old_outLB[L_FRAME32k]; -#endif Word16 old_out_LB_fx[L_FRAME32k]; /* HQ core - previous synthesis for OLA for Low Band */ Word32 old_outLB_fx[L_FRAME32k]; Word16 q_old_outLB_fx; @@ -1297,25 +834,16 @@ typedef struct hq_dec_structure Word16 no_att_hangover; /* Q0 */ -#ifndef IVAS_FLOAT_FIXED - float energy_lt; -#endif Word32 energy_lt_fx; /* Q13 */ Word16 hq_generic_seed; -#ifndef IVAS_FLOAT_FIXED - float prev_noise_level[2]; -#endif Word16 prev_noise_level_fx[2]; /* Q15 */ Word16 prev_hqswb_clas; Word16 prev_R; /* the table of bit allocation of last frame */ -#ifndef IVAS_FLOAT_FIXED - float prev_coeff_out[L_HQ_WB_BWE]; /* the highest coefficients of last frame */ -#endif Word16 prev_SWB_peak_pos[SPT_SHORTEN_SBNUM]; Word32 prev_coeff_out_fx[L_HQ_WB_BWE]; /* Q12 */ /* the coefficients of last frame */ @@ -1323,66 +851,33 @@ typedef struct hq_dec_structure Word16 HqVoicing; -#ifndef IVAS_FLOAT_FIXED - float fer_samples[L_FRAME48k]; -#endif Word16 fer_samples_fx[L_FRAME48k]; Word16 Q_fer_samples; -#ifndef IVAS_FLOAT_FIXED - float prev_normq[SFM_N_WB]; /* previous norms */ -#endif Word32 prev_normq_fx[SFM_N_WB]; /* Q14 */ /* previous norms */ -#ifndef IVAS_FLOAT_FIXED - float prev_env[SFM_N_WB]; /* previous noise envelopes */ -#endif Word32 prev_env_fx[SFM_N_WB]; /* previous noise envelopes */ Word16 prev_env_Q[SFM_N_WB]; -#ifndef IVAS_FLOAT_FIXED - float last_ni_gain[BANDS_MAX]; -#endif Word32 last_ni_gain_fx[BANDS_MAX]; -#ifndef IVAS_FLOAT_FIXED - float last_env[BANDS_MAX]; -#endif Word16 last_env_fx[BANDS_MAX]; Word16 last_max_pos_pulse; /* pre-echo reduction */ -#ifndef IVAS_FLOAT_FIXED - float memfilt_lb; -#endif Word16 memfilt_lb_fx; /* Q0 */ -#ifndef IVAS_FLOAT_FIXED - float mean_prev_hb; -#endif Word32 mean_prev_hb_fx; /* Q0 */ -#ifndef IVAS_FLOAT_FIXED - float smoothmem; -#endif Word16 smoothmem_fx; /* Q15 */ -#ifndef IVAS_FLOAT_FIXED - float mean_prev; -#endif Word32 mean_prev_fx; /* Q0 */ -#ifndef IVAS_FLOAT_FIXED - float mean_prev_nc; -#endif Word32 mean_prev_nc_fx; /* Q0 */ -#ifndef IVAS_FLOAT_FIXED - float wmold_hb; -#endif Word16 wmold_hb_fx; /* Q15 */ Word16 prevflag; @@ -1394,14 +889,8 @@ typedef struct hq_dec_structure Word16 prev_stab_hfe2; -#ifndef IVAS_FLOAT_FIXED - float prev_ni_ratio; -#endif Word16 prev_ni_ratio_fx; /* 15 */ -#ifndef IVAS_FLOAT_FIXED - float prev_En_sb[NB_SWB_SUBBANDS]; -#endif Word16 prev_En_sb_fx[NB_SWB_SUBBANDS]; /* QsEn(4) */ /*----------------------------------------------------------------------------------* @@ -1411,9 +900,6 @@ typedef struct hq_dec_structure /* HQ PHASE ECU internal state */ Word16 time_offs; -#ifndef IVAS_FLOAT_FIXED - float X_sav[PH_ECU_SPEC_SIZE]; -#endif Word16 X_sav_fx[PH_ECU_SPEC_SIZE]; Word16 Q_X_sav; @@ -1422,45 +908,24 @@ typedef struct hq_dec_structure Word16 plocs[MAX_PLOCS]; -#ifndef IVAS_FLOAT_FIXED - float plocsi[MAX_PLOCS]; -#endif Word32 plocsi_fx[MAX_PLOCS]; -#ifndef IVAS_FLOAT_FIXED - float env_stab; -#endif Word16 env_stab_fx; Word16 mem_norm_hqfec[SFM_N_ENV_STAB]; Word16 mem_env_delta_hqfec; -#ifndef IVAS_FLOAT_FIXED - float env_stab_plc; -#endif Word16 env_stab_plc_fx; -#ifndef IVAS_FLOAT_FIXED - float env_stab_state_p[NUM_ENV_STAB_PLC_STATES]; -#endif Word16 env_stab_state_p_fx[NUM_ENV_STAB_PLC_STATES]; Word16 envstabplc_hocnt; -#ifndef IVAS_FLOAT_FIXED - float mag_chg_1st[LGW_MAX]; /* i/o: per band magnitude modifier for transients*/ -#endif Word16 mag_chg_1st_fx[LGW_MAX]; /* i/o: per band magnitude modifier for transients*/ -#ifndef IVAS_FLOAT_FIXED - float Xavg[LGW_MAX]; /* Frequency group average gain to fade to */ -#endif Word16 Xavg_fx[LGW_MAX]; /* Frequency group average gain to fade to */ -#ifndef IVAS_FLOAT_FIXED - float beta_mute; /* Factor for long-term mute */ -#endif Word16 beta_mute_fx; /* Factor for long-term mute */ Word16 last_fec; @@ -1469,9 +934,6 @@ typedef struct hq_dec_structure Word16 oldHqVoicing; -#ifndef IVAS_FLOAT_FIXED - float oldgapsynth[L_FRAME48k]; -#endif Word16 oldgapsynth_fx[L_FRAME48k]; Word16 ph_ecu_active; /* Set if Phase ECU was used in last bad frame */ @@ -1492,17 +954,6 @@ typedef struct zero_bwe_dec_structure { Word16 seed2; /* HF (6-7kHz) BWE - seed for random signal generator */ -#ifndef IVAS_FLOAT_FIXED - float mem_hp400[4]; /* HF (6-7kHz) BWE - hp400 filter memory */ - - float mem_hf[( L_FIR - 1 )]; /* HF (6-7kHz) BWE - band-pass filter memory */ - - float mem_syn_hf[M]; /* HF (6-7kHz) BWE - synthesis filter memory */ - - float delay_syn_hf[NS2SA( 16000, DELAY_CLDFB_NS )]; /* HF (6-7kHz) BWE - To synchronise BWE content with postfiltered synthesis */ - - float mem_hp_interp[INTERP_3_1_MEM_LEN]; /* HF (6-7 kHz) BWE - interp. memory */ -#endif Word16 mem_hp400_fx[6]; /* HF (6-7kHz) BWE - hp400 filter memory */ Word16 q_mem_hp400_fx; @@ -1525,232 +976,108 @@ typedef struct zero_bwe_dec_structure typedef struct td_bwe_dec_structure { /* states for the filters used in generating SHB excitation from WB excitation */ -#ifndef IVAS_FLOAT_FIXED - float state_lpc_syn[LPC_SHB_ORDER]; -#endif Word16 state_lpc_syn_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float mem_csfilt[2]; -#endif Word32 mem_csfilt_fx[2]; /* states for the filters used in generating SHB signal from SHB excitation*/ -#ifndef IVAS_FLOAT_FIXED - float state_syn_shbexc[L_SHB_LAHEAD]; - float syn_overlap[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain*/ -#endif Word16 state_syn_shbexc_fx[L_SHB_LAHEAD]; Word16 syn_overlap_fx[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain*/ Word32 syn_overlap_fx_32[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain*/ /* previous frame parameters for frame error concealment */ -#ifndef IVAS_FLOAT_FIXED - float lsp_prevfrm[LPC_SHB_ORDER]; -#endif Word16 lsp_prevfrm_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float GainFrame_prevfrm; -#endif Word32 GainFrame_prevfrm_fx; -#ifndef IVAS_FLOAT_FIXED - float GainShape_Delay[NUM_SHB_SUBFR / 2]; -#endif Word16 GainShape_Delay_fx[NUM_SHB_SUBFR / 2]; -#ifndef IVAS_FLOAT_FIXED - float GainAttn; -#endif Word16 GainAttn_fx; -#ifndef IVAS_FLOAT_FIXED - float old_bwe_exc[PIT16k_MAX * 2]; /* old excitation */ -#endif Word16 old_bwe_exc_fx[PIT16k_MAX * 2]; /*Q_exc*/ Word16 bwe_seed[2]; -#ifndef IVAS_FLOAT_FIXED - float bwe_non_lin_prev_scale; -#endif Word32 bwe_non_lin_prev_scale_fx; -#ifndef IVAS_FLOAT_FIXED - float old_bwe_exc_extended[NL_BUFF_OFFSET]; -#endif Word16 old_bwe_exc_extended_fx[NL_BUFF_OFFSET]; -#ifndef IVAS_FLOAT_FIXED - float genSHBsynth_Hilbert_Mem[HILBERT_MEM_SIZE]; -#endif Word32 genSHBsynth_Hilbert_Mem_fx[HILBERT_MEM_SIZE]; -#ifndef IVAS_FLOAT_FIXED - float mem_genSHBexc_filt_down_shb[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; -#endif Word16 mem_genSHBexc_filt_down_shb_fx[2 * ALLPASSSECTIONS_STEEP + 1]; -#ifndef IVAS_FLOAT_FIXED - float mem_genSHBexc_filt_down_wb2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; -#endif Word16 mem_genSHBexc_filt_down_wb2_fx[2 * ALLPASSSECTIONS_STEEP + 1]; -#ifndef IVAS_FLOAT_FIXED - float mem_genSHBexc_filt_down_wb3[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; -#endif Word16 mem_genSHBexc_filt_down_wb3_fx[2 * ALLPASSSECTIONS_STEEP + 1]; -#ifndef IVAS_FLOAT_FIXED - float genSHBsynth_state_lsyn_filt_shb_local[2 * ALLPASSSECTIONS_STEEP]; -#endif Word16 genSHBsynth_state_lsyn_filt_shb_local_fx[2 * ALLPASSSECTIONS_STEEP]; Word32 genSHBsynth_state_lsyn_filt_shb_local_fx_32[2 * ALLPASSSECTIONS_STEEP]; -#ifndef IVAS_FLOAT_FIXED - float state_lsyn_filt_shb[2 * ALLPASSSECTIONS_STEEP]; -#endif Word16 state_lsyn_filt_shb_fx[2 * ALLPASSSECTIONS_STEEP]; Word32 state_lsyn_filt_shb_fx_32[2 * ALLPASSSECTIONS_STEEP]; -#ifndef IVAS_FLOAT_FIXED - float state_lsyn_filt_dwn_shb[2 * ALLPASSSECTIONS_STEEP]; -#endif Word16 state_lsyn_filt_dwn_shb_fx[2 * ALLPASSSECTIONS_STEEP]; Word32 state_lsyn_filt_dwn_shb_fx_32[2 * ALLPASSSECTIONS_STEEP]; -#ifndef IVAS_FLOAT_FIXED - float mem_resamp_HB[INTERP_3_1_MEM_LEN]; -#endif Word16 mem_resamp_HB_fx[INTERP_3_1_MEM_LEN]; Word32 mem_resamp_HB_fx_32[INTERP_3_1_MEM_LEN]; -#ifndef IVAS_FLOAT_FIXED - float mem_resamp_HB_32k[2 * ALLPASSSECTIONS_STEEP + 1]; -#endif Word16 mem_resamp_HB_32k_fx[2 * ALLPASSSECTIONS_STEEP + 1]; Word32 mem_resamp_HB_32k_fx_32[2 * ALLPASSSECTIONS_STEEP + 1]; Word16 state_32and48k_WB_upsample_fx[2 * ALLPASSSECTIONS_STEEP]; /* !!! this memory in FLP is called mem_resamp_HB */ -#ifndef IVAS_FLOAT_FIXED - float prev_pow_exc16kWhtnd; /* power of the LB excitation signal in the previous frame */ -#endif Word32 prev_pow_exc16kWhtnd_fx32; /* power of the LB excitation signal in the previous frame */ -#ifndef IVAS_FLOAT_FIXED - float prev_mix_factor; /* mixing factor in the previous frame */ -#endif - Word16 prev_mix_factor_fx; /* mixing factor in the previous frame */ + Word16 prev_mix_factor_fx; /* mixing factor in the previous frame */ Word16 syn_dm_phase; -#ifndef IVAS_FLOAT_FIXED - float fbbwe_hpf_mem[4][4]; -#endif Word32 fbbwe_hpf_mem_fx[4][4]; Word16 fbbwe_hpf_mem_fx_Q[4]; -#ifndef IVAS_FLOAT_FIXED - float prev_wb_bwe_frame_pow; -#endif Word32 prev_wb_bwe_frame_pow_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_swb_bwe_frame_pow; -#endif Word32 prev_swb_bwe_frame_pow_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_ener; -#endif Word32 prev_ener_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_GainShape; -#endif Word16 prev_GainShape_fx; -#ifndef IVAS_FLOAT_FIXED - float fb_state_lpc_syn[LPC_SHB_ORDER]; -#endif Word16 fb_state_lpc_syn_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float fb_tbe_demph; -#endif Word16 fb_tbe_demph_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_fbbwe_ratio; -#endif Word16 prev_fbbwe_ratio_fx; -#ifndef IVAS_FLOAT_FIXED - float tbe_demph; -#endif Word16 tbe_demph_fx; -#ifndef IVAS_FLOAT_FIXED - float tbe_premph; -#endif Word16 tbe_premph_fx; -#ifndef IVAS_FLOAT_FIXED - float mem_stp_swb[LPC_SHB_ORDER]; -#endif Word16 mem_stp_swb_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float *ptr_mem_stp_swb; -#endif Word16 *ptr_mem_stp_swb_fx; -#ifndef IVAS_FLOAT_FIXED - float gain_prec_swb; -#endif Word16 gain_prec_swb_fx; -#ifndef IVAS_FLOAT_FIXED - float mem_zero_swb[LPC_SHB_ORDER]; -#endif Word16 mem_zero_swb_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float swb_lsp_prev_interp[LPC_SHB_ORDER]; -#endif Word16 swb_lsp_prev_interp_fx[LPC_SHB_ORDER]; -#ifndef IVAS_FLOAT_FIXED - float prev1_shb_ener_sf, prev2_shb_ener_sf, prev3_shb_ener_sf, prev_res_shb_gshape, prev_mixFactors; -#endif Word32 prev1_shb_ener_sf_fx, prev2_shb_ener_sf_fx, prev3_shb_ener_sf_fx; Word16 prev_res_shb_gshape_fx, prev_mixFactors_fx; -#ifndef IVAS_FLOAT_FIXED - float tilt_mem; /* Formant factor adaptation tilt smoothing memory */ -#endif Word16 tilt_mem_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_lsf_diff[LPC_SHB_ORDER - 2]; -#endif Word16 prev_lsf_diff_fx[LPC_SHB_ORDER - 2]; /*Q15*/ -#ifndef IVAS_FLOAT_FIXED - float prev_tilt_para; -#endif Word16 prev_tilt_para_fx; /*Q10*/ -#ifndef IVAS_FLOAT_FIXED - float cur_sub_Aq[M + 1]; -#endif Word16 cur_sub_Aq_fx[M + 1]; /*Q12*/ @@ -1777,31 +1104,16 @@ typedef struct td_bwe_dec_structure Word16 idxGain; -#ifndef IVAS_FLOAT_FIXED - float old_core_synth[L_FRAME16k]; -#endif Word16 old_core_synth_fx[L_FRAME16k]; -#ifndef IVAS_FLOAT_FIXED - float old_tbe_synth[L_SHB_TRANSITION_LENGTH]; -#endif Word16 old_tbe_synth_fx[L_SHB_TRANSITION_LENGTH]; Word32 old_tbe_synth_fx_32[L_SHB_TRANSITION_LENGTH]; -#ifndef IVAS_FLOAT_FIXED - float int_3_over_2_tbemem_dec[INTERP_3_2_MEM_LEN]; -#endif Word16 int_3_over_2_tbemem_dec_fx[INTERP_3_2_MEM_LEN]; Word32 int_3_over_2_tbemem_dec_fx_32[INTERP_3_2_MEM_LEN]; -#ifndef IVAS_FLOAT_FIXED - float old_hb_synth[L_FRAME48k]; -#endif Word16 old_hb_synth_fx[L_FRAME48k]; -#ifndef IVAS_FLOAT_FIXED - float tilt_swb_fec; /* FEC - SWB TBE TILT */ -#endif Word16 tilt_swb_fec_fx; /* FEC - SWB TBE TILT */ Word16 prev_hb_synth_fx_exp; @@ -1817,38 +1129,20 @@ typedef struct fd_bwe_dec_structure { Word16 old_wtda_wb_fx_exp; -#ifndef IVAS_FLOAT_FIXED - float old_wtda_swb[L_FRAME48k]; -#endif Word16 L_old_wtda_swb_fx[L_FRAME48k]; Word32 L_old_wtda_swb_fx32[L_FRAME48k]; Word16 old_wtda_swb_fx_exp; -#ifndef IVAS_FLOAT_FIXED - float old_syn_12k8_16k[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; -#endif Word16 old_syn_12k8_16k_fx[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; /*Q_syn2-1*/ -#ifndef IVAS_FLOAT_FIXED - float mem_deemph_old_syn; -#endif Word16 mem_deemph_old_syn_fx; Word16 prev_mode; -#ifndef IVAS_FLOAT_FIXED - float prev_SWB_fenv[SWB_FENV]; -#endif -#ifndef IVAS_FLOAT_FIXED - float prev_Energy; -#endif Word16 prev_Energy_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_Energy_wb; -#endif Word32 prev_Energy_wb_fx; Word16 prev_L_swb_norm; @@ -1859,32 +1153,16 @@ typedef struct fd_bwe_dec_structure Word16 prev_frica_flag; -#ifndef IVAS_FLOAT_FIXED - float mem_imdct[L_FRAME48k]; -#endif Word16 mem_imdct_fx[L_FRAME48k]; Word16 mem_imdct_exp_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_td_energy; -#endif Word16 prev_td_energy_fx; -#ifndef IVAS_FLOAT_FIXED - float prev_weight; -#endif Word16 prev_weight_fx; Word16 prev_flag; -#ifndef IVAS_FLOAT_FIXED - float last_wb_bwe_ener; -#endif - -#ifndef IVAS_FLOAT_FIXED - float prev_fb_ener_adjust; -#endif } FD_BWE_DEC_DATA, *FD_BWE_DEC_HANDLE; @@ -1899,9 +1177,6 @@ typedef struct hr_swb_bwe_dec_structure Word16 bwe_highrate_seed; Word16 bwe_highrate_seed_fx; -#ifndef IVAS_FLOAT_FIXED - float t_audio_prev[2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF]; -#endif Word16 t_audio_prev_fx[2 * END_FREQ_BWE_FULL_FB / 50 - NUM_NONTRANS_START_FREQ_COEF]; Word16 t_audio_prev_fx_exp[NUM_TIME_SWITCHING_BLOCKS]; @@ -1909,9 +1184,6 @@ typedef struct hr_swb_bwe_dec_structure Word16 old_is_transient_hr_bwe; Word16 old_is_transient_hr_bwe_fx; -#ifndef IVAS_FLOAT_FIXED - float mem_EnergyLT; -#endif Word32 L_mem_EnergyLT_fx; Word16 mem_EnergyLT_fx_exp; @@ -1942,46 +1214,22 @@ typedef struct pvq_dec_structure typedef struct amrwb_io_dec_structure { -#ifndef IVAS_FLOAT_FIXED - float past_qua_en[GAIN_PRED_ORDER]; /* gain quantization memory (used also in AMR-WB IO mode) */ -#endif Word16 past_qua_en_fx[GAIN_PRED_ORDER]; /* gain quantization memory (used also in AMR-WB IO mode) */ -#ifndef IVAS_FLOAT_FIXED - float prev_r; /* HF BWE - previous sub-frame gain */ -#endif Word16 prev_r_fx; /* HF BWE - previous sub-frame gain */ -#ifndef IVAS_FLOAT_FIXED - float fmerit_w_sm; /* HF BWE - fmerit parameter memory */ -#endif Word16 fmerit_w_sm_fx; /* HF BWE - fmerit parameter memory */ Word16 frame_count; /* HF BWE - frame count */ Word16 frame_count_fx; /* HF BWE - frame count */ -#ifndef IVAS_FLOAT_FIXED - float ne_min; /* HF BWE - minimum Noise gate - short-term energy */ -#endif - Word16 ne_min_fx; /* HF BWE - minimum Noise gate - short-term energy */ + Word16 ne_min_fx; /* HF BWE - minimum Noise gate - short-term energy */ -#ifndef IVAS_FLOAT_FIXED - float fmerit_m_sm; /* HF BWE - memory of fmerit_m param */ -#endif Word16 fmerit_m_sm_fx; /* HF BWE - memory of fmerit_m param */ -#ifndef IVAS_FLOAT_FIXED - float voice_fac_amr_wb_hf_float; /* HF BWE - voice factor */ -#endif Word16 voice_fac_amr_wb_hf; /* HF BWE - voice factor */ -#ifndef IVAS_FLOAT_FIXED - float unvoicing; /* HF BWE - unvoiced parameter */ -#endif Word16 unvoicing_fx; /* HF BWE - unvoiced parameter */ -#ifndef IVAS_FLOAT_FIXED - float unvoicing_sm; /* HF BWE - smoothed unvoiced parameter */ -#endif Word16 unvoicing_sm_fx; /* HF BWE - smoothed unvoiced parameter */ Word16 unvoicing_flag; /* HF BWE - unvoiced flag */ @@ -1992,37 +1240,19 @@ typedef struct amrwb_io_dec_structure Word16 start_band_old; /* HF BWE - previous start point for copying frequency band */ Word16 start_band_old_fx; /* HF BWE - previous start point for copying frequency band */ -#ifndef IVAS_FLOAT_FIXED - float OptCrit_old; /* HF BWE - previous criterion value for deciding the start point */ -#endif - Word32 OptCrit_old_fx; /* HF BWE - previous criterion value for deciding the start point */ + Word32 OptCrit_old_fx; /* HF BWE - previous criterion value for deciding the start point */ /* Improvement of unvoiced and audio signals in AMR-WB IO mode */ - Word16 UV_cnt; /* number of consecutives frames classified as UV */ - Word16 UV_cnt_fx; /* number of consecutives frames classified as UV */ -#ifndef IVAS_FLOAT_FIXED - float LT_UV_cnt; /* long-term consecutives frames classified as UV */ -#endif + Word16 UV_cnt; /* number of consecutives frames classified as UV */ + Word16 UV_cnt_fx; /* number of consecutives frames classified as UV */ Word16 LT_UV_cnt_fx; /* long-term consecutives frames classified as UV */ -#ifndef IVAS_FLOAT_FIXED - float Last_ener; /* last_energy frame */ -#endif Word16 Last_ener_fx; /* last_energy frame */ -#ifndef IVAS_FLOAT_FIXED - float lt_diff_etot[MAX_LT]; /* stability estimation - long-term total energy variation */ -#endif Word16 lt_diff_etot_fx[MAX_LT]; /* stability estimation - long-term total energy variation */ -#ifndef IVAS_FLOAT_FIXED - float old_Aq[NB_SUBFR * ( M + 1 )]; /* old LPC filter coefficient */ -#endif Word16 old_Aq_fx[68]; /* old LPC filter coefficient */ -#ifndef IVAS_FLOAT_FIXED - float lt_voice_fac; /* average voice factor over 4 sub-frames */ -#endif Word16 lt_voice_fac_fx; /* average voice factor over 4 sub-frames */ @@ -2134,21 +1364,6 @@ typedef struct Decoder_State Word16 tilt_code_fx; /* tilt of code Q15*/ -#ifndef IVAS_FLOAT_FIXED - float old_exc[L_EXC_MEM_DEC]; /* old excitation */ - float lsp_old[M]; /* old LSP vector at the end of the frame */ - float lsf_old[M]; /* old LSF vector at the end of the frame */ - - float tilt_code; /* tilt of code */ - - float mem_syn1[M]; /* synthesis filter memory (for core switching and FD BWE) */ - float mem_syn2[M]; /* synthesis filter memory */ - float mem_syn3[M]; - - float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ - float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) */ - float mem_deemph; /* deemphasis filter memory */ -#endif // 0 Word16 mem_syn1_fx[M]; /* synthesis filter memory (for core switching and FD BWE) */ Word16 mem_syn2_fx[M]; /* synthesis filter memory Q_syn*/ @@ -2172,19 +1387,9 @@ typedef struct Decoder_State Word16 safety_net; -#ifndef IVAS_FLOAT_FIXED - float stab_fac; /* LSF stability factor */ - float stab_fac_smooth; /* low-pass filtered stability factor */ - float agc_mem2[2]; /* memory of AGC for saturation control */ - float stab_fac_smooth_lt; - float log_energy_old; - float log_energy_diff_lt; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 log_energy_diff_lt_fx; /*In range of word16*/ /*Q-15*/ Word16 stab_fac_smooth_lt_fx; /*In range of word16*/ /*Q-15*/ Word32 log_energy_old_fx; -#endif Word32 offset_scale1_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 1st 8-dim subvector*/ Word32 offset_scale2_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 2nd 8-dim subvector*/ @@ -2206,10 +1411,6 @@ typedef struct Decoder_State Word32 gc_threshold_fx; /* Noise enhancer - threshold for gain_code Q16*/ -#ifndef IVAS_FLOAT_FIXED - float gc_threshold; /* Noise enhancer - threshold for gain_code */ - float dispMem[8]; /* Noise enhancer - phase dispersion algorithm memory */ -#endif struct dispMem_fx dm_fx; /* Noise enhancer - phase dispersion algorithm memory */ ZERO_BWE_DEC_HANDLE hBWE_zero; /* HF (6-7kHz) BWE */ @@ -2230,13 +1431,7 @@ typedef struct Decoder_State Word16 Q_stat_noise; /* Q of Exc_pe */ -#ifndef IVAS_FLOAT_FIXED - float min_alpha; /* Stationary noise UV modification - minimum alpha */ - float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ - float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ - float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ -#endif // 0 - Word16 exc_pe_fx; /* Stationary noise UV modification - scale (Q_stat_noise) */ + Word16 exc_pe_fx; /* Stationary noise UV modification - scale (Q_stat_noise) */ Word16 Q_stat_noise_ge; /* Q of ge_sm_fx */ @@ -2250,10 +1445,6 @@ typedef struct Decoder_State Word16 seed; /* FEC - seed for random generator for excitation */ // Word16 seed_fx; /* FEC - seed for random generator for excitation Q0*/ -#ifndef IVAS_FLOAT_FIXED - float lp_ener_bfi; /* FEC - long-term active-signal average energy */ - float lp_ener; /* FEC - low-pass filtered energy */ -#endif Word16 last_good; /* FEC - clas of last good received */ @@ -2265,14 +1456,7 @@ typedef struct Decoder_State Word32 enr_old_fx; /* FEC - energy of the concealed frame Q0*/ -#ifndef IVAS_FLOAT_FIXED - float lp_gainp; /* FEC - low-pass filtered pitch gain */ - float lp_gainc; /* FEC - low-pass filtered code gain */ - float enr_old; /* FEC - energy of the concealed frame */ - float bfi_pitch; /* FEC - pitch for FEC */ - float old_pitch_buf[2 * NB_SUBFR16k + 2]; /* FEC - buffer of old subframe pitch values */ -#endif // #ifndef IVAS_FLOAT_FIXED - Word16 bfi_pitch_fx; /* FEC - pitch for FEC */ + Word16 bfi_pitch_fx; /* FEC - pitch for FEC */ Word16 bfi_pitch_frame; /* FEC - frame length when pitch for FEC is saved */ @@ -2292,14 +1476,6 @@ typedef struct Decoder_State Word16 prev_nbLostCmpt; /* FEC - compt for number of consecutive lost frame at the previous frame*/ Word16 mode_lvq; /* FEC - index for LSF mean vector*/ -#ifndef IVAS_FLOAT_FIXED - float old_enr_LP_float; /* FEC - LP filter gain */ - float lp_ener_FEC_av_float; /* FEC - averaged voiced signal energy */ - float lp_ener_FEC_max_float; /* FEC - averaged voiced signal energy */ - float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ - float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ - float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ -#endif Word16 lsfoldbfi0_fx[M]; /* FEC - LSF vector of the previous frame (Qx2.56)*/ @@ -2316,9 +1492,6 @@ typedef struct Decoder_State Word16 relax_prev_lsf_interp; -#ifndef IVAS_FLOAT_FIXED - float mem_syn_clas_estim[L_SYN_MEM_CLAS_ESTIM]; /* FEC - memory of the synthesis signal for frame class estimation */ -#endif // #ifndef IVAS_FLOAT_FIXED Word16 mem_syn_clas_estim_fx[L_SYN_MEM_CLAS_ESTIM]; /* FEC - memory of the synthesis signal for frame class estimation */ Word16 bpf_off; /* Bass post-filter - do not use BPF when this flag is set to 1 */ @@ -2337,11 +1510,6 @@ typedef struct Decoder_State Word16 last_active_bandsToZero_bwdec; Word16 last_flag_filter_NB; -#ifndef IVAS_FLOAT_FIXED - float perc_bwddec_float; - float avg_nrg_LT_float; - float ng_ener_ST; /* Noise gate - short-term energy */ -#endif // 0 Word16 perc_bwddec; /*Q14*/ Word16 active_frame_cnt_bwddec; @@ -2368,12 +1536,6 @@ typedef struct Decoder_State Word16 psf_lp_noise_fx; -#ifndef IVAS_FLOAT_FIXED - float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ - float psf_lp_noise; /* NB post-filter - long-term noise */ - float last_voice_factor; - float prev_synth_buffer[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS )]; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 last_voice_factor_fx; /* Q6*/ @@ -2397,9 +1559,6 @@ typedef struct Decoder_State Word16 CNG_mode; /* DTX/CNG - mode for DTX configuration */ // Word16 CNG_mode_fx; /* DTX/CNG - mode for DTX configuration */ -#ifndef IVAS_FLOAT_FIXED - float lspCNG[M]; /* DTX/CNG - LP filtered ISPs */ -#endif // #ifndef IVAS_FLOAT_FIXED Word16 lspCNG_fx[M]; /* CNG and DTX - LP filtered ISPs Q15*/ Word16 active_cnt; @@ -2429,11 +1588,6 @@ typedef struct Decoder_State Word16 prev_gain_pit_dec_fx; /*Q14*/ -#ifndef IVAS_FLOAT_FIXED - float prev_gain_pit_dec; - float prev_tilt_code_dec; - float tilt_code_dec[NB_SUBFR16k]; -#endif Word16 prev_tilt_code_dec_fx; /*Q15*/ @@ -2487,10 +1641,6 @@ typedef struct Decoder_State Word32 previoussynth_fx_32[L_FRAME48k]; -#ifndef IVAS_FLOAT_FIXED - float previoussynth[L_FRAME48k]; /* note: only 60+111 out of 960 samples are needed in IVAS (for ACELP->TCX switching */ - float old_synth_sw[NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS )]; /* note: buffer used only in EVS mono */ -#endif // 0 Word16 old_synth_sw_fx[NS2SA( 48000, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS )]; Word16 delay_buf_out_fx[HQ_DELTA_MAX * HQ_DELAY_COMP]; /*Q0*/ @@ -2500,11 +1650,6 @@ typedef struct Decoder_State Word16 old_Aq_12_8_fx[M + 1]; /* Q12 old Aq[] for core switching */ Word32 old_Aq_12_8_fx_32[M + 1]; /* Q28 old Aq[] for core switching */ -#ifndef IVAS_FLOAT_FIXED - float delay_buf_out[HQ_DELTA_MAX * HQ_DELAY_COMP]; - float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ - float old_Es_pred; /* old Es_pred for core switching */ -#endif Word16 old_Es_pred_fx; /* old Es_pred for core switching */ HQ_NBFEC_HANDLE hHQ_nbfec; @@ -2524,17 +1669,6 @@ typedef struct Decoder_State Word16 tilt_swb_fx; // Q24 -#ifndef IVAS_FLOAT_FIXED - float hb_prev_synth_buffer[NS2SA( 48000, DELAY_BWE_TOTAL_NS )]; - float tilt_wb; - float tilt_swb; - float prev_ener_shb; - float prev_enerLH; - float prev_enerLL; - - float enerLH; - float enerLL; -#endif Word16 prev_ener_shb_fx; // Q1 Word32 enerLH_fx; @@ -2555,10 +1689,6 @@ typedef struct Decoder_State Word16 bws_cnt1; -#ifndef IVAS_FLOAT_FIXED - float attenu1; - float t_audio_q[L_FRAME]; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 attenu_fx; Word16 last_inner_frame; @@ -2595,13 +1725,8 @@ typedef struct Decoder_State Word16 last_wb_bwe_ener_fx; Word16 prev_fb_ener_adjust_fx; -#ifdef IVAS_FLOAT_FIXED Word16 prev_synth_buffer_fx[NS2SA( 48000, IVAS_DEC_DELAY_NS - DELAY_CLDFB_NS )]; /*Updated IVAS size is 96*/ Word16 q_prev_synth_buffer_fx; -#else - Word16 prev_synth_buffer_fx[NS2SA( 48000, DELAY_BWE_TOTAL_NS - DELAY_CLDFB_NS )]; - /*Old EVS size is 51*/ -#endif Word16 GainShape_Delay[NUM_SHB_SUBFR / 2]; Word16 prev_lpc_wb_fx[LPC_SHB_ORDER_WB]; @@ -2665,12 +1790,6 @@ typedef struct Decoder_State Word16 last_is_cng; -#ifndef IVAS_FLOAT_FIXED - float *acelp_zir; -#endif // !IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED - float syn_float[M + 1]; -#endif Word16 syn[M + 1]; Word16 bpf_gain_param; /* bass post-filter gain factor parameter (0->noBpf)*/ @@ -2684,19 +1803,6 @@ typedef struct Decoder_State Word16 seed_tcx_plc; /* seed memory (for random function in TCX PLC) */ -#ifndef IVAS_FLOAT_FIXED - float lsfold_uw_float[M]; /* old lsf (unweighted) */ - float lspold_uw_float[M]; /* old lsp (unweighted) */ - float past_gpit_float; /* past gain of pitch (for frame recovery) */ - float past_gcode_float; /* past energy (!) of code (for frame recovery) */ - float lsf_cng_float[M]; /* lsf coefficients used for CNG generation (long term) */ - float lspold_cng_float[M]; /* lsp coefficients used for CNG generation (long term) */ - float lsp_q_cng_float[M]; /* lsp coefficients used for CNG generation (short term interpolated) */ - float old_lsp_q_cng_float[M]; /* lsp coefficients used for CNG generation (short term interpolated) */ - float lsf_q_cng_float[M]; /* lsf coefficients used for CNG generation (short term interpolated) */ - float old_lsf_q_cng_float[M]; /* lsf: old quantized lsfs for background noise */ - float Aq_cng_float[( NB_SUBFR16k + 1 ) * ( M + 1 )]; /* LPC coefficients derived from CNG estimate */ -#endif // 0 Word16 past_gpit; /* past gain of pitch (for frame recovery) */ Word32 past_gcode; /* past energy (!) of code (for frame recovery) */ /*15Q16*/ @@ -2719,11 +1825,6 @@ typedef struct Decoder_State Word16 plcBackgroundNoiseUpdated; /* flag: Is background noise estimate updated? */ -#ifndef IVAS_FLOAT_FIXED - float mem_syn_unv_back_float[M]; /* filter memory for unvoiced synth */ - float last_gain_syn_deemph_float; - float last_concealed_gain_syn_deemph_float; -#endif Word16 last_gain_syn_deemph; /*Q15*/ Word16 last_gain_syn_deemph_e; @@ -2751,14 +1852,6 @@ typedef struct Decoder_State /*Preemphasis factor*/ Word16 preemph_fac; /*0Q15*/ -#ifndef IVAS_FLOAT_FIXED - /*Preemphasis factor*/ - float preemph_fac_float; - - float gamma_float; - /*for AMR-WB like 6.4 to 7 kHz upsampling and noise filling*/ - float mem_Aq_float[NB_SUBFR16k * ( M + 1 )]; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 gamma; @@ -2777,14 +1870,6 @@ typedef struct Decoder_State Word16 clas_dec; /* PLC - frame class at the decoder */ -#ifndef IVAS_FLOAT_FIXED - float old_fpitch_float; /* PLC - last pitch of previous frame (as transmitted) */ - float old_fpitchFB_float; /* PLC - last pitch of previous FB frame (depends on output sr) */ - float mem_pitch_gain_float[2 * NB_SUBFR16k + 2]; /* PLC - Pitch gain memory */ - - float cummulative_damping_float; - float cngTDLevel_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 mem_pitch_gain[2 * NB_SUBFR16k + 2]; /* Pitch gain memory Q14 */ Word16 plc_use_future_lag; /* PLC - flag indicating if info (pitch lag / pitch gain) about future frame is usable */ @@ -2812,14 +1897,8 @@ typedef struct Decoder_State Word16 numlpc; /* Bandwidth */ -#ifndef IVAS_FLOAT_FIXED - float TcxBandwidth_float; -#endif Word16 TcxBandwidth; -#ifndef IVAS_FLOAT_FIXED - float voice_fac_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word16 voice_fac; Word16 tcxonly; @@ -2835,19 +1914,12 @@ typedef struct Decoder_State Word16 second_last_core; /* parameters for switching */ -#ifndef IVAS_FLOAT_FIXED - float mem_syn_r_float[L_SYN_MEM]; /*LPC synthesis memory needed for rate switching*/ -#endif // #ifndef IVAS_FLOAT_FIXED - Word16 mem_syn_r[L_SYN_MEM]; /*LPC synthesis memory needed for rate switching*/ + Word16 mem_syn_r[L_SYN_MEM]; /*LPC synthesis memory needed for rate switching*/ Word16 rate_switching_reset; Word16 bpf_noise_buf[L_FRAME_16k]; Word32 bpf_noise_buf_32[L_FRAME_16k]; -#ifndef IVAS_FLOAT_FIXED - float bpf_noise_buf_float[L_FRAME16k]; - float *p_bpf_noise_buf_float; -#endif Word16 *p_bpf_noise_buf; Word32 *p_bpf_noise_buf_32; @@ -2865,9 +1937,6 @@ typedef struct Decoder_State Word16 flag_cna; Word16 last_flag_cna; -#ifndef IVAS_FLOAT_FIXED - float lp_noise_float; -#endif // #ifndef IVAS_FLOAT_FIXED Word32 lp_noise; Word16 seed_acelp; diff --git a/lib_dec/stat_noise_uv_dec.c b/lib_dec/stat_noise_uv_dec.c index ec7381ba2..e748899a9 100644 --- a/lib_dec/stat_noise_uv_dec.c +++ b/lib_dec/stat_noise_uv_dec.c @@ -38,73 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------* - * stat_noise_uv_dec() - * - * Modifies excitation signal in UC mode when the noise is stationary - *---------------------------------------------------------*/ - -void stat_noise_uv_dec( - Decoder_State *st, /* i/o: decoder static memory */ - const float *lsp_new, /* i : end-frame LSP vector */ - const float *lsp_mid, /* i : mid-frame LSP vector */ - float *Aq, /* o : A(z) quantized for the 4 subframes */ - float *exc2, /* i/o: excitation buffer */ - const int16_t uc_two_stage_flag /* i : flag indicating two-stage UC */ -) -{ - int16_t i; - float ftmp, noisiness = 0; - - /*-----------------------------------------------------------------* - * Decode the VAD flag - *-----------------------------------------------------------------*/ - - if ( ( st->coder_type == UNVOICED && !uc_two_stage_flag ) || ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 ) ) - { - /* read the noisiness parameter */ - noisiness = (float) get_next_indice( st, NBITS_NOISENESS ); - } - - /*-----------------------------------------------------------------* - * Update long-term energies for FEC - * Update LSP vector for CNG - *-----------------------------------------------------------------*/ - - if ( st->coder_type == INACTIVE ) - { - if ( st->unv_cnt > 20 ) - { - ftmp = st->lp_gainc * st->lp_gainc; - st->lp_ener = 0.7f * st->lp_ener + 0.3f * ftmp; - if ( st->hTdCngDec != NULL ) - { - for ( i = 0; i < M; i++ ) - { - st->lspCNG[i] = (float) ( 0.9f * st->lspCNG[i] + 0.1f * lsp_new[i] ); - } - } - } - else - { - st->unv_cnt++; - } - } - else - { - st->unv_cnt = 0; - } - - /*-----------------------------------------------------------------* - * Modify the excitation signal - *-----------------------------------------------------------------*/ - - if ( !st->Opt_AMR_WB ) - { - stat_noise_uv_mod( st->coder_type, noisiness, st->lsp_old, lsp_new, lsp_mid, Aq, exc2, 0, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); - } - - return; -} -#endif diff --git a/lib_dec/stat_noise_uv_dec_fx.c b/lib_dec/stat_noise_uv_dec_fx.c index 6c7705cfc..d2fa36b9b 100644 --- a/lib_dec/stat_noise_uv_dec_fx.c +++ b/lib_dec/stat_noise_uv_dec_fx.c @@ -6,7 +6,6 @@ #include "options.h" /* Compilation switches */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------* * stat_noise_uv_dec() * @@ -86,4 +85,3 @@ void stat_noise_uv_dec_fx( return; } -#endif diff --git a/lib_dec/swb_bwe_dec.c b/lib_dec/swb_bwe_dec.c index 34bb10fc8..90a2a0130 100644 --- a/lib_dec/swb_bwe_dec.c +++ b/lib_dec/swb_bwe_dec.c @@ -46,177 +46,6 @@ #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * para_pred_bws() - * - * predict SWB parameters for bandwidth switching - *-------------------------------------------------------------------*/ - -static int16_t para_pred_bws( - Decoder_State *st, /* i/o: decoder state structure */ - float *signal_wb, /* i : wideband frequency signal */ - float *SWB_fenv /* o : frequency-domain BWE envelope */ -) -{ - int16_t i, j, k; - int16_t mode; - FD_BWE_DEC_HANDLE hBWE_FD; - float *input_hi; - float peak, mean[7], mag, min_val; - float avrg1, avrg2; - float att; - - hBWE_FD = st->hBWE_FD; - - mode = NORMAL; - - k = 0; - input_hi = &signal_wb[SHARP_WIDTH]; - for ( i = 0; i < 7; i++ ) - { - peak = 0.0f; - mean[i] = 0; - for ( j = 0; j < SHARP_WIDTH; j++ ) - { - mag = (float) fabs( *input_hi ); - if ( mag > peak ) - { - peak = mag; - } - mean[i] += mag; - input_hi++; - } - - if ( peak * ( SHARP_WIDTH + 3.5f ) > 4.5f * mean[i] && peak > 8.0f ) - { - k += 1; - } - } - - avrg1 = 0.0f; - avrg2 = 0.0f; - for ( i = 1; i < 4; i++ ) - { - avrg1 += mean[i]; - avrg2 += mean[i + 3]; - } - avrg1 /= 3; - avrg2 /= 3; - - min_val = FLT_MAX; - peak = 0.0f; - for ( i = 4; i < 7; i++ ) - { - if ( mean[i] > 2.0f * avrg2 ) - { - mean[i] *= 2 * avrg2 / mean[i]; - } - if ( mean[i] < min_val ) - { - min_val = mean[i]; - } - if ( mean[i] > peak ) - { - peak = mean[i]; - } - } - - if ( st->tilt_wb > 8 ) - { - min_val = min( st->tilt_wb / 15.0f, 1.0f ) * peak; - } - - if ( peak == 0 || min_val == 0 ) - { - set_f( SWB_fenv, 0, SWB_FENV ); - } - else - { - for ( i = 0; i < SWB_FENV; i++ ) - { - SWB_fenv[i] = min_val * mean[i / 5 + 4] / ( 64 * peak ); - } - } - - for ( j = 0, i = SWB_FENV / 2; i < SWB_FENV; i++ ) - { - SWB_fenv[i] *= ( 1.0f - (float) j++ / SWB_FENV ); - } - - if ( avrg1 > 8.0f * avrg2 ) - { - for ( i = 0; i < SWB_FENV; i++ ) - { - SWB_fenv[i] *= 0.5f; - } - } - if ( st->last_core != HQ_CORE && st->last_codec_mode == MODE1 && - ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) && - ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) ) - { - for ( i = 0; i < SWB_FENV; i++ ) - { - if ( st->prev_coder_type != st->coder_type && SWB_fenv[i] > 2.0f * hBWE_FD->prev_SWB_fenv[i] ) - { - SWB_fenv[i] = 0.1f * SWB_fenv[i] + 0.9f * hBWE_FD->prev_SWB_fenv[i]; - } - else - { - SWB_fenv[i] = st->attenu1 * SWB_fenv[i] + ( 1.0f - st->attenu1 ) * hBWE_FD->prev_SWB_fenv[i]; - } - } - - if ( st->attenu1 < 0.9f ) - { - st->attenu1 += 0.05f; - } - } - else - { - if ( st->core_brate != st->last_core_brate || ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) || - ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) ) - { - for ( i = 0; i < SWB_FENV; i++ ) - { - if ( SWB_fenv[i] > 2.0f * hBWE_FD->prev_SWB_fenv[i] ) - { - SWB_fenv[i] = hBWE_FD->prev_SWB_fenv[i]; - } - } - } - - for ( i = 0; i < SWB_FENV; i++ ) - { - SWB_fenv[i] = 0.9f * SWB_fenv[i] + 0.1f * hBWE_FD->prev_SWB_fenv[i]; - } - - st->attenu1 = 0.1f; - } - - if ( k > 3 ) - { - mode = HARMONIC; - } - - att = ( (float) N_WS2N_FRAMES - (float) st->bws_cnt ) / (float) N_WS2N_FRAMES; - if ( st->L_frame == L_FRAME16k ) - { - for ( i = 0; i < 4; i++ ) - { - SWB_fenv[i] *= att; - } - } - - for ( i = 4; i < SWB_FENV; i++ ) - { - SWB_fenv[i] *= att; - } - - return mode; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 para_pred_bws_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ Word16 *signal_wb_fx, /* i : wideband frequency signal Q_syn */ @@ -481,7 +310,6 @@ static Word16 para_pred_bws_fx( return mode; } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -490,546 +318,7 @@ static Word16 para_pred_bws_fx( * Decoding of WB parameters *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t WB_BWE_gain_deq( - Decoder_State *st, /* i/o: decoder state structure */ - float *WB_fenv ) -{ - int16_t mode; - int16_t index; - - index = get_next_indice( st, 5 ); - mode = get_next_indice( st, 1 ) + 2; - - WB_fenv[0] = (float) pow( 2, 0.5f * F_2_5[2 * index] ); - WB_fenv[1] = (float) pow( 2, 0.5f * F_2_5[2 * index + 1] ); - - return ( mode ); -} - -/*-------------------------------------------------------------------* - * wb_bwe_dec_flt() - * - * WB BWE decoder (only for 16kHz signals) - *-------------------------------------------------------------------*/ - -void wb_bwe_dec_flt( - Decoder_State *st, /* i/o: decoder state structure */ - const float output[], /* i : synthesis @internal Fs */ - float *synth, /* i/o: ACELP core synthesis/final synthesis */ - float *hb_synth, /* o : SHB synthesis/final synthesis */ - const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ - const int16_t output_frame, /* i : frame length */ - const float voice_factors[], /* i : voicing factors */ - const float pitch_buf[] /* i : pitch buffer */ -) -{ - int16_t i, mode; - FD_BWE_DEC_HANDLE hBWE_FD; - float ysynth[L_FRAME48k]; /* MDCT spectrum of core synthesis */ - float yerror[L_FRAME48k]; /* MDCT spectrum of error */ - float wtda_synth[2 * L_FRAME48k]; - float WB_fenv[SWB_FENV]; - - hBWE_FD = st->hBWE_FD; - - /* MDCT of the core synthesis signal */ - if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) - { - /* IVAS_fmToDo: wtda() does not support L_FRAME length; thus temporarily resample the signal */ - /* IVAS_fmToDo: delay output[] by 1.25ms ? */ - lerp_flt( output, ysynth, L_FRAME16k, st->L_frame ); - - wtda( ysynth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, /*st->L_frame*/ L_FRAME16k ); - direct_transform( wtda_synth, ysynth, 0, /*st->L_frame*/ L_FRAME16k, st->element_mode ); - } - else - { - wtda( synth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, output_frame ); - direct_transform( wtda_synth, ysynth, 0, output_frame, st->element_mode ); - } - - if ( !st->bfi ) - { - if ( st->extl_brate > 0 ) - { - /* de-quantization */ - mode = WB_BWE_gain_deq( st, WB_fenv ); - hBWE_FD->last_wb_bwe_ener = 0.5f * ( WB_fenv[0] + WB_fenv[1] ); - } - else - { - int32_t tmp_brate; - - tmp_brate = st->last_core_brate; - if ( st->last_total_brate == ACELP_9k60 && st->last_extl == SWB_TBE ) - { - tmp_brate = ACELP_8k00; /* this is needed in order to stay BE wrt. EVS mono */ - } - - if ( st->last_extl != WB_BWE ) - { - hBWE_FD->prev_SWB_fenv[0] = 0.0f; - } - - mode = WB_BWE_gain_pred( WB_fenv, ysynth, st->coder_type, st->prev_coder_type, hBWE_FD->prev_SWB_fenv[0], voice_factors, pitch_buf, tmp_brate, hBWE_FD->last_wb_bwe_ener, st->last_extl, st->tilt_wb ); - } - } - else - { - /* FEC */ - mode = NORMAL; - for ( i = 0; i < 2; i++ ) - { - WB_fenv[i] = 0.75f * hBWE_FD->prev_SWB_fenv[i]; - } - } - - if ( st->last_extl != WB_BWE || st->bfi ) - { - mvr2r( WB_fenv, hBWE_FD->prev_SWB_fenv, 2 ); - } - - /* reconstruction of MDCT spectrum of the error signal */ - WB_BWE_decoding( ysynth, WB_fenv, yerror, L_FRAME16k, mode, st->last_extl, &hBWE_FD->prev_Energy_wb, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->extl, st->coder_type, st->total_brate, &hBWE_FD->Seed, &hBWE_FD->prev_flag, st->prev_coder_type ); - - if ( st->output_Fs == 32000 ) - { - set_f( &yerror[L_FRAME16k], 0, L_FRAME16k ); - } - else if ( st->output_Fs == 48000 ) - { - set_f( &yerror[L_FRAME16k], 0, L_FRAME32k ); - } - - inverse_transform( yerror, wtda_synth, 0, output_frame, -1, st->element_mode ); - - window_ola( wtda_synth, hb_synth, hBWE_FD->mem_imdct, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); - - if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) - { - /* add HB synth from hf_synth() */ - v_add( hb_synth, synth, hb_synth, output_frame ); - } - - st->hBWE_FD->prev_mode = mode; - - return; -} - -/*-------------------------------------------------------------------* - * swb_bwe_gain_deq_flt() - * - * Decoding of SWB parameters - *-------------------------------------------------------------------*/ - -/*! r: BWE class */ -int16_t swb_bwe_gain_deq_flt( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t core, /* i : core */ - float *SWB_tenv, /* o : time-domain BWE envelope */ - float *SWB_fenv, /* o : frequency-domain BWE envelope */ - const int16_t hr_flag, /* i : high rate flag */ - const int16_t hqswb_clas /* i : HQ BWE class */ -) -{ - int16_t index, mode, n_band; - int16_t indice[6]; - float quant_tmp[SWB_FENV / 2], quant_tmp2[SWB_FENV / 2]; - int16_t nb_bits[6]; - int16_t nenv; - - if ( hqswb_clas > 0 ) - { - mode = get_next_indice( st, 1 ); - if ( mode == 0 ) - { - mode = get_next_indice( st, 1 ); - } - else - { - mode = HQ_GENERIC_SP_EXC; - } - } - else - { - mode = get_next_indice( st, 2 ); - } - - if ( mode == 1 && core == ACELP_CORE ) - { - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - index = get_next_indice( st, 4 ); - SWB_tenv[n_band] = (float) ( 1 << index ); - } - - indice[0] = get_next_indice( st, 7 ); - indice[1] = get_next_indice( st, 6 ); - - for ( n_band = 0; n_band < DIM_TR1; n_band++ ) - { - quant_tmp[2 * n_band] = Env_TR_Cdbk1[indice[0] * DIM_TR1 + n_band]; - } - - quant_tmp[1] = ( quant_tmp[0] + quant_tmp[2] ) * 0.5f + Env_TR_Cdbk2[indice[1] * DIM_TR2]; - quant_tmp[3] = quant_tmp[2] + Env_TR_Cdbk2[indice[1] * DIM_TR2 + 1]; - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - SWB_fenv[n_band] = (float) pow( 10, 0.025f * ( quant_tmp[n_band] + Mean_env_tr[n_band] ) ); - } - - /* in case of band-width switching, attenuate frame gain */ - if ( st->bws_cnt1 > 0 ) - { - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - SWB_fenv[n_band] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - } - } - else - { - nb_bits[0] = 5; - nb_bits[1] = 7; - nb_bits[2] = 6; - nb_bits[3] = 5; - - if ( hr_flag == 1 ) - { - nb_bits[4] = 5; - nenv = SWB_FENV - 2; - } - else - { - nb_bits[4] = 6; - nenv = SWB_FENV; - } - - for ( n_band = 0; n_band < 5; n_band++ ) - { - indice[n_band] = get_next_indice( st, nb_bits[n_band] ); - } - - if ( hqswb_clas == HQ_GEN_FB ) - { - indice[n_band] = get_next_indice( st, 5 ); - } - - mvr2r( &EnvCdbk11[indice[0] * DIM11], quant_tmp, DIM11 ); - mvr2r( &EnvCdbk1st[indice[1] * DIM1ST], quant_tmp2, DIM1ST ); - mvr2r( &EnvCdbk2nd[indice[2] * DIM2ND], quant_tmp2 + DIM1ST, DIM2ND ); - - for ( n_band = 0; n_band < DIM11 - 1; n_band++ ) - { - quant_tmp[n_band] += quant_tmp2[n_band]; - SWB_fenv[n_band * 2] = quant_tmp[n_band]; - } - - if ( hr_flag == 1 ) - { - quant_tmp[6] += quant_tmp2[6]; - SWB_fenv[11] = quant_tmp[6]; - - - mvr2r( &EnvCdbk3rd[indice[3] * DIM3RD], quant_tmp2, DIM3RD ); - mvr2r( &EnvCdbk3rd[indice[4] * DIM3RD], quant_tmp2 + DIM3RD, DIM3RD ); - - for ( n_band = 0; n_band < 5; n_band++ ) - { - SWB_fenv[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band + 1]; - } - - SWB_fenv[0] += quant_tmp2[0]; - } - else - { - quant_tmp[DIM11 - 1] += quant_tmp2[DIM11 - 1]; - SWB_fenv[( DIM11 - 1 ) * 2] = quant_tmp[DIM11 - 1]; - - mvr2r( &EnvCdbk3rd[indice[3] * DIM3RD], quant_tmp2, DIM3RD ); - mvr2r( &EnvCdbk4th[indice[4] * DIM4TH], quant_tmp2 + DIM3RD, DIM4TH ); - - for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) - { - SWB_fenv[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; - } - - SWB_fenv[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; - } - - for ( n_band = 0; n_band < nenv; n_band++ ) - { - Word16 tmp, frac, exp; - Word32 L_tmp; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif - tmp = add( (int16_t) ( SWB_fenv[n_band] * 256 ), (int16_t) ( Mean_env[n_band] * 256 ) ); /*Q8 */ - - L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q26 */ - L_tmp = L_shr( L_tmp, 10 ); /* From Q26 to Q16 */ - frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - - tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ - /* output of Pow2() will be: */ - /* 16384 < Pow2() <= 32767 */ - exp = sub( exp, 13 ); -#ifdef BASOP_NOGLOB - tmp = shl_o( tmp, add( exp, 1 ), &Overflow ); /*Q1 */ -#else - tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ -#endif - SWB_fenv[n_band] = (float) tmp * 0.5f; /*Q1 */ - } - - if ( hqswb_clas == HQ_GEN_FB ) - { - mvr2r( &EnvCdbkFB[indice[5] * DIM_FB], &SWB_fenv[nenv], DIM_FB ); - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - Word16 tmp, frac, exp; - Word32 L_tmp; - - tmp = add( (int16_t) ( SWB_fenv[n_band + nenv] * 128 ), (int16_t) ( Mean_env_fb[n_band] * 128 ) ); /*Q7 */ - L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q25 */ - L_tmp = L_shr( L_tmp, 9 ); /* From Q25 to Q16 */ - frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - - tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ - /* output of Pow2() will be: */ - /* 16384 < Pow2() <= 32767 */ - exp = sub( exp, 13 ); - tmp = shl( tmp, add( exp, 1 ) ); - move16(); - SWB_fenv[add( n_band, nenv )] = (float) tmp * 0.5f; - } - } - } - - return mode; -} - -/*-------------------------------------------------------------------* - * swb_bwe_dec_flt() - * - * SWB BWE decoder - *-------------------------------------------------------------------*/ - -void swb_bwe_dec_flt( - Decoder_State *st, /* i/o: decoder state structure */ - const float output[], /* i : synthesis @internal Fs */ - const float *synth, /* i : ACELP core synthesis/final synthesis */ - float *hb_synth, /* o : SHB synthesis/final synthesis */ - const int16_t use_cldfb_for_dft, /* i : flag to use of CLDFB for DFT Stereo */ - const int16_t output_frame /* i : frame length */ -) -{ - int16_t i, l_subfr; - FD_BWE_DEC_HANDLE hBWE_FD; - float ysynth[L_FRAME48k]; - float yerror[L_FRAME48k]; - float wtda_synth[2 * L_FRAME48k]; - float SWB_tenv[SWB_TENV]; - float SWB_fenv[SWB_FENV]; - int16_t L; - int16_t mode; - int16_t frica_flag = 0; - float fb_ener_adjust = 0.0f; - int16_t j = 0; - float ener_adjust_quan; - int16_t idxGain; - int16_t fb_band_begin; - - hBWE_FD = st->hBWE_FD; - - /*---------------------------------------------------------------------* - * SWB BWE decoding - *---------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) - { - /* todo - wtda() does not support L_FRAME length; thus temporarily resample the signal */ - /* todo - delay output[] by 1.25ms ? */ - lerp_flt( output, ysynth, L_FRAME16k, st->L_frame ); - - /* windowing of the ACELP core synthesis */ - wtda( ysynth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, /*st->L_frame*/ L_FRAME16k ); - - /* DCT of the ACELP core synthesis */ - direct_transform( wtda_synth, ysynth, 0, /*st->L_frame*/ L_FRAME16k, st->element_mode ); - } - else - { - /* windowing of the ACELP core synthesis */ - wtda( synth, wtda_synth, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, output_frame ); - - /* DCT of the ACELP core synthesis */ - direct_transform( wtda_synth, ysynth, 0, output_frame, st->element_mode ); - } - - if ( !st->bfi ) - { - if ( st->bws_cnt > 0 ) - { - /* estimate parameters */ - mode = para_pred_bws( st, ysynth, SWB_fenv ); - } - else - { - /* de-quantization */ - mode = swb_bwe_gain_deq_flt( st, ACELP_CORE, SWB_tenv, SWB_fenv, 0, -1 ); - } - - L = mode == TRANSIENT ? SWB_FENV_TRANS : SWB_FENV; - st->prev_ener_shb = 0.0f; - for ( i = 0; i < L; i++ ) - { - st->prev_ener_shb += SWB_fenv[i]; - } - st->prev_ener_shb /= L; - } - else - { - /* SHB FEC */ - if ( hBWE_FD->prev_mode != TRANSIENT ) - { - mode = hBWE_FD->prev_mode; - } - else - { - mode = NORMAL; - } - - mvr2r( hBWE_FD->prev_SWB_fenv, SWB_fenv, SWB_FENV ); - } - - /* reconstruction of MDCT spectrum of the error signal */ - set_f( yerror, 0, output_frame ); - - if ( st->L_frame == L_FRAME16k ) - { - SWB_BWE_decoding( ysynth, SWB_fenv, yerror, L_FRAME32k - 80, mode, &frica_flag, &hBWE_FD->prev_Energy, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->tilt_wb, &hBWE_FD->Seed, 80, &hBWE_FD->prev_weight, st->extl, st->last_extl ); - } - else - { - SWB_BWE_decoding( ysynth, SWB_fenv, yerror, L_FRAME32k - 80, mode, &frica_flag, &hBWE_FD->prev_Energy, hBWE_FD->prev_SWB_fenv, &hBWE_FD->prev_L_swb_norm, st->tilt_wb, &hBWE_FD->Seed, 6, &hBWE_FD->prev_weight, st->extl, st->last_extl ); - } - - if ( hBWE_FD->prev_frica_flag == 1 && frica_flag == 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - hBWE_FD->mem_imdct[i] *= 1.0f - i * 0.015625f; - } - - for ( ; i < output_frame; i++ ) - { - hBWE_FD->mem_imdct[i] = 0.0f; - } - } - - /* decode information */ - if ( st->extl == FB_BWE ) - { - if ( !st->bfi ) - { - idxGain = get_next_indice( st, NUM_BITS_FB_FRAMEGAIN ); - fb_ener_adjust = usdequant( idxGain, FB_GAIN_QLOW, FB_GAIN_QDELTA ); - } - else if ( st->bfi ) - { - fb_ener_adjust = hBWE_FD->prev_fb_ener_adjust; - } - - hBWE_FD->prev_fb_ener_adjust = fb_ener_adjust; - if ( mode == TRANSIENT ) - { - ener_adjust_quan = fb_ener_adjust; - } - else - { - if ( SWB_fenv[7] < 0.01f ) - { - ener_adjust_quan = 0.0f; - } - else - { - ener_adjust_quan = min( SWB_fenv[13] / SWB_fenv[7], 4.0f ); - } - } - - fb_band_begin = FB_BAND_BEGIN; - if ( st->L_frame == L_FRAME ) - { - fb_band_begin = FB_BAND_BEGIN_12k8; - } - - for ( i = fb_band_begin; i < fb_band_begin + DE_OFFSET1; i++ ) - { - yerror[i] = yerror[i - FB_BAND_WIDTH] * ( ( 1.0f - j * FB_GAIN_QDELTA ) * ener_adjust_quan + j * FB_GAIN_QDELTA * fb_ener_adjust ); - j++; - } - for ( ; i < FB_BAND_END; i++ ) - { - yerror[i] = yerror[i - FB_BAND_WIDTH] * fb_ener_adjust; - } - } - - /* iDCT of the error signal */ - inverse_transform( yerror, wtda_synth, 0, output_frame, -1, st->element_mode ); - - /* inverse windowing of the error signal */ - window_ola( wtda_synth, hb_synth, hBWE_FD->mem_imdct, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); - l_subfr = output_frame / 4; - - if ( mode == TRANSIENT ) - { - for ( i = 0; i < SWB_TENV; i++ ) - { - SWB_tenv[i] *= 0.8f; - } - - /* time envelope shaping when the current frame is TRANSIENT frame */ - time_envelop_shaping( hb_synth, SWB_tenv, output_frame ); - - hBWE_FD->prev_td_energy = SWB_tenv[3]; - } - else if ( frica_flag == 1 && hBWE_FD->prev_frica_flag == 0 ) - { - /* IVAS_fmToDo: synth[] is @internal_Fs!!! */ - time_reduce_pre_echo( synth, hb_synth, hBWE_FD->prev_td_energy, l_subfr ); - } - else - { - hBWE_FD->prev_td_energy = 0.0f; - for ( i = 0; i < l_subfr; i++ ) - { - hBWE_FD->prev_td_energy += hb_synth[3 * l_subfr + i] * hb_synth[3 * l_subfr + i]; - } - hBWE_FD->prev_td_energy = (float) sqrt( hBWE_FD->prev_td_energy / l_subfr ); - } - - if ( st->element_mode == IVAS_CPE_DFT && !use_cldfb_for_dft ) - { - /* add HB synth from hf_synth() */ - v_add( hb_synth, synth, hb_synth, output_frame ); - } - - hBWE_FD->prev_frica_flag = frica_flag; - hBWE_FD->prev_mode = mode; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED Word16 swb_bwe_dec_fx32( Decoder_State *st_fx, /* i/o: decoder state structure */ Word32 output_fx[], /* i : synthesis @internal Fs : Q11 */ @@ -1358,43 +647,7 @@ Word16 swb_bwe_dec_fx32( return Q_syn_hb; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * fd_bwe_dec_init_flt() - * - * Initialize FD BWE state structure at the decoder - *-------------------------------------------------------------------*/ - -void fd_bwe_dec_init_flt( - FD_BWE_DEC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ -) -{ - set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); - set_f( hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - hBWE_FD->prev_mode = NORMAL; - set_f( hBWE_FD->prev_SWB_fenv, 0, SWB_FENV ); - hBWE_FD->prev_Energy = 0.0f; - hBWE_FD->prev_L_swb_norm = 8; - hBWE_FD->Seed = 21211; - hBWE_FD->prev_frica_flag = 0; - set_f( hBWE_FD->mem_imdct, 0, L_FRAME48k ); - hBWE_FD->prev_td_energy = 0.0f; - hBWE_FD->prev_weight = 0.2f; - hBWE_FD->prev_flag = 0; - hBWE_FD->last_wb_bwe_ener = 0.0f; - hBWE_FD->prev_Energy_wb = 0.0f; - - hBWE_FD->mem_deemph_old_syn = 0.0f; - - hBWE_FD->prev_fb_ener_adjust = 0.0f; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void fd_bwe_dec_init_fx( FD_BWE_DEC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ ) @@ -1425,4 +678,3 @@ void fd_bwe_dec_init_fx( return; } -#endif diff --git a/lib_dec/swb_bwe_dec_fx.c b/lib_dec/swb_bwe_dec_fx.c index 4f35db655..f2d51f26c 100644 --- a/lib_dec/swb_bwe_dec_fx.c +++ b/lib_dec/swb_bwe_dec_fx.c @@ -10,7 +10,6 @@ #include "rom_enc.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #define MAX_Q_NEW_INPUT 8 #define Q_WTDA_FX 13 #define Q_32_BITS 15 @@ -1296,4 +1295,3 @@ void fd_bwe_dec_init( return; } -#endif diff --git a/lib_dec/swb_bwe_dec_hr.c b/lib_dec/swb_bwe_dec_hr.c index 2a4e3139b..e2be97ae4 100644 --- a/lib_dec/swb_bwe_dec_hr.c +++ b/lib_dec/swb_bwe_dec_hr.c @@ -40,776 +40,10 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * swb_bwe_dec_hr() * * HR SWB BWE decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void swb_bwe_dec_hr( - Decoder_State *st, /* i/o: decoder state structure */ - const float *syn_12k8_16k, /* i : ACELP core synthesis @16kHz */ - float *hb_synth, /* o : SHB synthesis */ - const int16_t output_frame, /* i : frame length */ - const int16_t unbits, /* i : number of core unused bits */ - const float pitch_buf[] /* i : pitch buffer */ -) -{ - int16_t i, j, k, nBits, nBits_total, nBits_block, Nsv, Nsv2, width_noncoded; - int16_t is_transient, tmpS, incr, IsTransient, pos; - FD_BWE_DEC_HANDLE hBWE_FD; - HR_BWE_DEC_HANDLE hBWE_FD_HR; - int16_t x_norm[NSV_MAX * ( WIDTH_BAND + 1 )], x_norm1[NSV_MAX * ( WIDTH_BAND + 1 )]; - float t_audio[L_FRAME48k], t_audio_tmp[L_FRAME48k]; - float gain = 0.0f, gain2, en_band[N_BANDS_BWE_HR]; - int16_t ind1, ind2; - float EnergyLT, Energy; - int16_t nq[NSV_MAX], nq2[NSV_MAX], nq_tmp[NSV_MAX]; - float tilt_wb, min_env, max_env; - float tmpF, tmp2, pitch, alpha; - float en_noncoded; - float env = 0.0f; - - hBWE_FD = st->hBWE_FD; - hBWE_FD_HR = st->hBWE_FD_HR; - - /*---------------------------------------------------------------------* - * initializations - *---------------------------------------------------------------------*/ - - set_f( t_audio, 0.0f, output_frame ); - - hBWE_FD_HR->bwe_highrate_seed = (int16_t) ( (int16_t) ( pitch_buf[0] * 64.0f ) * (int16_t) ( pitch_buf[3] * 64.0f ) ); - - ind2 = 0; /* only to suppress warnings */ - Nsv2 = 0; /* only to suppress warnings */ - gain2 = 0; /* only to suppress warnings */ - - /* reset memories in case that last frame was a different technology */ - if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) - { - set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); - } - - /* calculate SWB BWE bit-budget */ - nBits = (int16_t) ( st->extl_brate ) / FRAMES_PER_SEC + unbits; - nBits_total = nBits; - - /*---------------------------------------------------------------------* - * calculate tilt of the core synthesis - *---------------------------------------------------------------------*/ - - calc_tilt_bwe( syn_12k8_16k, &tilt_wb, L_FRAME16k ); - pitch = sum_f( pitch_buf, NB_SUBFR16k ) + EPSILON; - - /*---------------------------------------------------------------------* - * FEC, or good frame decoding - *---------------------------------------------------------------------*/ - - if ( st->bfi ) - { - is_transient = hBWE_FD_HR->old_is_transient_hr_bwe; - - /* Replication of the last spectrum, with an attenuation */ - if ( ( st->clas_dec == VOICED_CLAS || st->clas_dec == INACTIVE_CLAS ) && st->nbLostCmpt <= 3 ) - { - alpha = 0.8f; - } - else if ( is_transient ) - { - alpha = 0.15f; - } - else - { - alpha = 0.3f; - } - - if ( is_transient ) - { - /* set BWE spectrum length */ - if ( output_frame == L_FRAME32k ) - { - tmpS = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; - } - else /* output_frame == L_FRAME48k */ - { - tmpS = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; - } - - /* reconstruct */ - for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) - { - for ( i = 0; i < tmpS; i++ ) - { - t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] = alpha * hBWE_FD_HR->t_audio_prev[i + k * tmpS]; - } - /* save transform coefficients for the next frame (needed in case of frame erasures) */ - mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * tmpS, tmpS ); - } - } - else - { - /* set BWE spectrum length */ - if ( output_frame == L_FRAME32k ) - { - tmpS = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; - } - else /* output_frame == L_FRAME48k */ - { - tmpS = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; - } - - /* reconstruct */ - for ( i = 0; i < tmpS; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] = alpha * hBWE_FD_HR->t_audio_prev[i]; - } - /* Save transform coefficients for the next frame (needed in case of frame erasures) */ - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, tmpS ); - } - - hBWE_FD_HR->mem_EnergyLT *= alpha; - gain = (float) ( 2.0f * sqrt( hBWE_FD_HR->mem_EnergyLT / output_frame ) ); - env = 1.0f; - } - else - { - /*---------------------------------------------------------------------* - * get transient frame flag - *---------------------------------------------------------------------*/ - - is_transient = get_next_indice( st, 1 ); - - if ( is_transient ) - { - nBits = -1; /* is_transient flag */ - nBits_block = nBits_total / NUM_TIME_SWITCHING_BLOCKS; - nBits += nBits_total % NUM_TIME_SWITCHING_BLOCKS; - - /* set width of noncoded (blind estimated) spectrum */ - if ( st->extl == SWB_BWE_HIGHRATE || output_frame == L_FRAME32k ) - { - width_noncoded = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; - tmpS = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF_EFF; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - width_noncoded = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; - tmpS = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF_EFF; - } - - /*---------------------------------------------------------------------* - * transient frames: processing in blocks (subframes) - *---------------------------------------------------------------------*/ - - for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) - { - nBits += nBits_block; - - /*---------------------------------------------------------------------* - * global gain and envelope decoding - *---------------------------------------------------------------------*/ - - /* get global gain */ - ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); - gain = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - nBits -= NBITS_GLOB_GAIN_BWE_HR; - - /* get energy per band */ - if ( k == 0 ) - { - ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR ); - ind2 = ind1; - nBits -= NBITS_ENVELOPE_BWE_HR_TR; - } - else - { - if ( ind2 < 8 ) - { - ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR - 1 ); - } - else - { - ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR_TR - 1 ) + NUM_ENVLOPE_CODE_HR_TR2; - } - nBits -= ( NBITS_ENVELOPE_BWE_HR_TR - 1 ); - } - - en_band[0] = swb_hr_env_code3[2 * ind1]; - en_band[1] = swb_hr_env_code3[2 * ind1 + 1]; - env = 0.5f * ( en_band[0] + en_band[1] ); - - /*---------------------------------------------------------------------* - * estimate energy of noncoded spectrum (14.4-20kHz) - *---------------------------------------------------------------------*/ - - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; - - if ( st->extl == FB_BWE_HIGHRATE ) - { - ind1 = get_next_indice( st, NBITS_HF_GAIN_BWE_HR ); - nBits -= NBITS_HF_GAIN_BWE_HR; - - if ( ind1 == 1 ) - { - en_noncoded *= BWE_HR_TRANS_EN_LIMIT1; - } - else if ( ind1 == 2 ) - { - en_noncoded *= BWE_HR_TRANS_EN_LIMIT2; - } - else if ( ind1 == 3 ) - { - en_noncoded *= BWE_HR_TRANS_EN_LIMIT3; - } - } - - /*---------------------------------------------------------------------* - * AVQ decoding (dequantize normalized spectrum) - *---------------------------------------------------------------------*/ - - Nsv = ( NUM_TRANS_END_FREQ_COEF - NUM_TRANS_START_FREQ_COEF ) / WIDTH_BAND; - AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); - for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] = (float) ( x_norm[i] ); - } - - /* apply noise-fill */ - swb_hr_noise_fill( is_transient, NUM_TRANS_START_FREQ_COEF, NUM_TRANS_END_FREQ_COEF, tilt_wb, pitch, nq, Nsv, &hBWE_FD_HR->bwe_highrate_seed, t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS ); - - /*---------------------------------------------------------------------* - * reconstruction - *---------------------------------------------------------------------*/ - - /* reconstruct 14-16(20) kHz spectrum */ - for ( j = 0; j < tmpS; j++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF + j] = 0.5f * t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF - tmpS + j]; - } - - /* envelope denormalization */ - for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) - { - for ( j = 0; j < WIDTH_TRANS_FREQ_COEF; j++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF + j] *= en_band[i]; - } - } - - /* envelope denormalization of 14.4-16(20) kHz spectrum */ - for ( j = tmpS - width_noncoded; j < tmpS; j++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF_EFF + j] *= en_noncoded; - } - - /* overlap region */ - if ( output_frame == L_FRAME48k ) - { - for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND / NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] *= overlap_coefs_48kHz[i * 4]; - } - } - else - { - for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND / NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - t_audio[k * output_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i] *= overlap_coefs[i * 4]; - } - } - - /* apply global gain */ - for ( i = 0; i < WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR + width_noncoded; i++ ) - { - t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= gain; - } - - /* save transform coefficients for the next frame (needed in case of frame erasures) */ - if ( output_frame == L_FRAME32k ) - { - mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * ( L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ), L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ); - } - else /* output_frame == L_FRAME48k */ - { - mvr2r( t_audio + NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS, hBWE_FD_HR->t_audio_prev + k * ( ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ), ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF ); - } - - /* attenuate HFs in case of band-width switching */ - if ( st->bws_cnt1 > 0 ) - { - if ( output_frame == L_FRAME32k ) - { - j = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; - } - else /* output_frame == L_FRAME48k */ - { - j = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_START_FREQ_COEF; - } - - for ( i = 0; i < j; i++ ) - { - t_audio[NUM_TRANS_START_FREQ_COEF + k * output_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - } - } - } - else /* !is_transient */ - { - /* subtract one bit for is_transient flag */ - nBits--; - - /*---------------------------------------------------------------------* - * global gain and envelope decoding - *---------------------------------------------------------------------*/ - - /* get global gain */ - ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); - gain = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - - /* get energy per band */ - ind1 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR1 ); - ind2 = get_next_indice( st, NBITS_ENVELOPE_BWE_HR2 ); - - en_band[0] = swb_hr_env_code1[2 * ind1]; - en_band[1] = swb_hr_env_code1[2 * ind1 + 1]; - en_band[2] = swb_hr_env_code2[2 * ind2]; - en_band[3] = swb_hr_env_code2[2 * ind2 + 1]; - env = 0.25f * ( en_band[0] + en_band[1] + en_band[2] + en_band[3] ); - - /*---------------------------------------------------------------------* - * choose sub-bands to be dequantized - *---------------------------------------------------------------------*/ - - /* find the subband with the min envelope */ - pos = 0; - min_env = en_band[0]; - max_env = en_band[0]; - for ( j = 1; j < N_BANDS_BWE_HR; j++ ) - { - if ( en_band[j] < min_env ) - { - pos = j; - min_env = en_band[j]; - } - if ( en_band[j] > max_env ) - { - max_env = en_band[j]; - } - } - - /* decide the spectrum to be dequantized */ - if ( nBits_total > NBITS_THRESH_BWE_HR ) - { - i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF; - } - else - { - i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - 64 - 8 * ( pos % 2 ); - } - - nBits -= NBITS_GLOB_GAIN_BWE_HR + NBITS_ENVELOPE_BWE_HR1 + NBITS_ENVELOPE_BWE_HR2; - - /*---------------------------------------------------------------------* - * estimate energy of noncoded spectrum (14.4-20kHz) - *---------------------------------------------------------------------*/ - - en_noncoded = 0.5f * min_env; - - if ( st->extl == FB_BWE_HIGHRATE ) - { - ind1 = get_next_indice( st, NBITS_HF_GAIN_BWE_HR ); - nBits -= NBITS_HF_GAIN_BWE_HR; - - if ( ind1 == 1 ) - { - en_noncoded *= BWE_HR_NONTRANS_EN_LIMIT1; - } - else if ( ind1 == 2 ) - { - en_noncoded *= 2.0f * BWE_HR_NONTRANS_EN_LIMIT2; - } - else if ( ind1 == 3 ) - { - en_noncoded *= 2.0f * BWE_HR_NONTRANS_EN_LIMIT3; - } - } - - /*---------------------------------------------------------------------* - * AVQ decoding (dequantize normalized spectrum) - *---------------------------------------------------------------------*/ - - Nsv = i / WIDTH_BAND; - AVQ_demuxdec( st, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); - /*---------------------------------------------------------------------* - * second stage decoding - *---------------------------------------------------------------------*/ - - if ( nBits >= 9 + NBITS_GLOB_GAIN_BWE_HR && sum_s( nq, Nsv ) > 0 ) - { - ind1 = get_next_indice( st, NBITS_GLOB_GAIN_BWE_HR ); - gain2 = gain_dequant( ind1, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - gain2 *= 0.0625f; - - /* calculate the number of subbands according to the rest bits */ - if ( nBits > 396 ) - { - Nsv2 = 33; - } - else - { - Nsv2 = nBits / 12; - } - - nBits -= NBITS_GLOB_GAIN_BWE_HR; - AVQ_demuxdec( st, x_norm1, &nBits, Nsv2, nq2, 0, Nsv2 - 1 ); - } - - /*---------------------------------------------------------------------* - * dequantization - *---------------------------------------------------------------------*/ - - for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) - { - t_audio_tmp[i] = (float) ( x_norm[i] ); - } - - mvs2s( nq, nq_tmp, Nsv ); - if ( Nsv2 > Nsv ) - { - /* Safety check, happens rarely */ - set_s( nq_tmp + Nsv, 0, Nsv2 - Nsv ); - } - - k = 0; - incr = 0; - for ( i = 0; i < Nsv; i++ ) - { - if ( nq[i] == 0 && incr < Nsv2 ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio_tmp[i * WIDTH_BAND + j] = gain2 * x_norm1[k++]; - } - nq[i] += nq2[incr++]; - } - } - - for ( i = 0; incr < Nsv2; i++ ) - { - /* safety check, happens rarely */ - if ( i >= Nsv2 ) - { - break; - } - - if ( nq_tmp[i] != 0 ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio_tmp[i * WIDTH_BAND + j] += gain2 * x_norm1[k++]; - } - nq[i] += nq2[incr++]; - } - } - - /*---------------------------------------------------------------------* - * reorder the decoded spectrum - *---------------------------------------------------------------------*/ - - if ( nBits_total > NBITS_THRESH_BWE_HR ) - { - mvr2r( t_audio_tmp, t_audio + NUM_NONTRANS_START_FREQ_COEF, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF ); - } - else - { - ind1 = ( pos * 64 + pos / 2 * WIDTH_BAND ); - mvr2r( t_audio_tmp, t_audio + NUM_NONTRANS_START_FREQ_COEF, ind1 ); - - ind2 = ( ( pos + 1 ) * 64 + ( pos + 1 ) / 2 * WIDTH_BAND ); - mvr2r( t_audio_tmp + ind1, t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2 ); - - /* reconstruct non-encoded subband */ - if ( pos == 3 ) - { - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + 128, t_audio + NUM_NONTRANS_START_FREQ_COEF + 200, 72 ); - - mvs2s( nq + 16, nq + 25, 9 ); - } - else - { - pos %= 2; - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, t_audio + NUM_NONTRANS_START_FREQ_COEF + ind1, 64 + pos * WIDTH_BAND ); - ind1 /= WIDTH_BAND; - ind2 /= WIDTH_BAND; - - j = 0; - for ( i = Nsv - 1; i >= ind1; i-- ) - { - nq[33 - j++] = nq[i]; - } - - mvs2s( nq + ind2, nq + ind1, WIDTH_BAND + pos ); - } - } - - /* apply noise-fill */ - if ( nBits < 200 ) - { - swb_hr_noise_fill( is_transient, NUM_NONTRANS_START_FREQ_COEF, NUM_NONTRANS_END_FREQ_COEF, tilt_wb, pitch, nq, Nsv, &hBWE_FD_HR->bwe_highrate_seed, t_audio + NUM_NONTRANS_START_FREQ_COEF ); - } - - /*---------------------------------------------------------------------* - * reconstruction - *---------------------------------------------------------------------*/ - - /* smoothing 12.6-12.8kHz */ - if ( pos == 3 && nBits_total <= 400 ) - { - tmpF = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + 200 - WIDTH_BAND, WIDTH_BAND ) + EPSILON; - tmp2 = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + 200, WIDTH_BAND ) + EPSILON; - tmpF = (float) sqrt( tmpF / tmp2 ); - for ( i = 0; i < WIDTH_BAND; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + 200 + i] *= ( ( 1.0f - i / (float) WIDTH_BAND ) * tmpF + i / (float) WIDTH_BAND ); - } - } - - /* reconstruct 14.4-16(20) kHz spectrum */ - if ( st->extl == SWB_BWE_HIGHRATE || output_frame == L_FRAME32k ) - { - width_noncoded = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - width_noncoded = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_END_FREQ_COEF; - } - mvr2r( t_audio + NUM_NONTRANS_END_FREQ_COEF - width_noncoded, t_audio + NUM_NONTRANS_END_FREQ_COEF, width_noncoded ); - - /* smoothing 14.4-14.8kHz */ - tmpF = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF - WIDTH_BAND, WIDTH_BAND ) + EPSILON; - tmp2 = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, WIDTH_BAND ) + EPSILON; - tmpF = (float) sqrt( tmpF / tmp2 ); - for ( i = 0; i < WIDTH_BAND; i++ ) - { - t_audio[NUM_NONTRANS_END_FREQ_COEF + i] *= tmpF; - } - - /* envelope denormalization */ - for ( i = 0; i < N_BANDS_BWE_HR; i++ ) - { - for ( j = 0; j < WIDTH_NONTRANS_FREQ_COEF; j++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF + j] *= en_band[i]; - } - } - - /* equalize 14.4-16(20) kHz spectrum */ - tmpF = max_env / min_env; - if ( st->extl == SWB_BWE_HIGHRATE || tmpF < 2.2f ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= ( ( 1.0f - j / (float) WIDTH_BAND ) * en_band[3] + ( j / (float) WIDTH_BAND ) * en_noncoded ); - } - - for ( j = WIDTH_BAND; j < width_noncoded; j++ ) - { - t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= en_noncoded; - } - } - else - { - if ( output_frame == L_FRAME48k ) - { - tmpS = width_noncoded - 2 * WIDTH_NONTRANS_FREQ_COEF; - } - else - { - tmpS = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; - } - - k = 0; - for ( j = 0; j < tmpS; j++ ) - { - t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= 2.2f * en_noncoded * ( 1 - (float) k / (float) 160 ); - k++; - } - - k = 0; - for ( ; j < width_noncoded; j++ ) - { - t_audio[NUM_NONTRANS_END_FREQ_COEF + j] *= 0.65f * en_noncoded * ( 1 - (float) k / (float) 320 ); - k++; - } - } - - /* overlap region */ - if ( output_frame == L_FRAME48k ) - { - for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= overlap_coefs_48kHz[i]; - } - } - else - { - for ( i = 0; i < NSV_OVERLAP * WIDTH_BAND; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= overlap_coefs[i]; - } - } - - /* apply global gain */ - if ( nBits_total <= NBITS_THRESH_BWE_HR ) - { - gain *= 0.85f; - } - - for ( i = 0; i < WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR + width_noncoded; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= gain; - } - - /* save transform coefficients for the next frame (needed in case of frame erasures) */ - if ( output_frame == L_FRAME32k ) - { - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF ); - } - else /* output_frame == L_FRAME48k */ - { - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, hBWE_FD_HR->t_audio_prev, 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF ); - } - - /* attenuate HFs in case of band-width switching */ - if ( st->bws_cnt1 > 0 ) - { - if ( output_frame == L_FRAME32k ) - { - j = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; - } - else /* output_frame == L_FRAME48k */ - { - j = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; - } - - for ( i = 0; i < j; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= (float) st->bws_cnt1 / (float) N_NS2W_FRAMES; - } - } - } - } - - st->prev_ener_shb = gain * env; - for ( i = 0; i < SWB_FENV; i++ ) - { - hBWE_FD->prev_SWB_fenv[i] = gain * env; - } - - /*---------------------------------------------------------------------* - * iOLA and iMDCT - *---------------------------------------------------------------------*/ - - inverse_transform( t_audio, t_audio_tmp, is_transient, output_frame, output_frame, st->element_mode ); - - window_ola( t_audio_tmp, hb_synth, hBWE_FD->old_wtda_swb, output_frame, ALDO_WINDOW, ALDO_WINDOW, 0, 0, 0 ); - - /*---------------------------------------------------------------------* - * final adjustments - *---------------------------------------------------------------------*/ - - if ( !st->bfi ) - { - IsTransient = 0; - EnergyLT = hBWE_FD_HR->mem_EnergyLT; - pos = 0; - for ( j = 0; j < 4; j++ ) - { - Energy = sum2_f( hb_synth + j * ( output_frame / 4 ), output_frame / 4 ) + EPSILON; - if ( Energy > 12.5f * EnergyLT ) - { - IsTransient = 1; - pos = j; - } - - EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; - } - - if ( IsTransient == 1 && pos > 0 && tilt_wb < 3.0f && pitch > 500 ) - { - Nsv = pos * ( output_frame / 4 ); - Energy = sum2_f( hb_synth, Nsv ) + EPSILON; - if ( st->last_extl != st->extl ) - { - hBWE_FD_HR->mem_EnergyLT = Energy; - } - gain = (float) sqrt( pos * hBWE_FD_HR->mem_EnergyLT / Energy ); - - gain *= 0.2f; - for ( i = 0; i < Nsv; i++ ) - { - hb_synth[i] *= gain; - } - - alpha = (float) WIDTH_BAND / output_frame; - for ( i = 0; i < output_frame / WIDTH_BAND; i++ ) - { - hb_synth[i + Nsv] *= ( ( 1.0f - i * alpha ) * gain + i * alpha ); - } - } - - hBWE_FD_HR->mem_EnergyLT = EnergyLT; - hBWE_FD_HR->old_is_transient_hr_bwe = is_transient; - } - - /* post-processing in case of TD/FD switching */ - if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) - { - if ( tilt_wb < 3.0f ) - { - gain = td_postprocess( hb_synth, output_frame, st->last_extl ); - - for ( i = 0; i < output_frame; i++ ) - { - hBWE_FD->old_wtda_swb[i] *= gain; - } - - tmpS = L_FRAME32k - NUM_NONTRANS_START_FREQ_COEF; - if ( output_frame == L_FRAME48k ) - { - tmpS = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF; - } - - for ( i = 0; i < tmpS; i++ ) - { - hBWE_FD_HR->t_audio_prev[i] *= gain; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * hr_bwe_dec_init_flt() - * - * Initialize HR BWE state structure at the decoder - *-------------------------------------------------------------------*/ - -void hr_bwe_dec_init_flt( - HR_BWE_DEC_HANDLE hBWE_FD_HR /* i/o: HR BWE data handle */ -) -{ - set_f( hBWE_FD_HR->t_audio_prev, 0, 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_START_FREQ_COEF ); - hBWE_FD_HR->old_is_transient_hr_bwe = 0; - hBWE_FD_HR->bwe_highrate_seed = 12345; - hBWE_FD_HR->mem_EnergyLT = 0.0f; - - return; -} -#endif diff --git a/lib_dec/swb_bwe_dec_hr_fx.c b/lib_dec/swb_bwe_dec_hr_fx.c index 8b238e46c..b5f8641dc 100644 --- a/lib_dec/swb_bwe_dec_hr_fx.c +++ b/lib_dec/swb_bwe_dec_hr_fx.c @@ -26,7 +26,6 @@ two functions would be less efficient (Performance Wise) since the function here doesn't use 'Log2_norm_lc' at all versus gain_dequant_fx() which does. */ -#ifdef IVAS_FLOAT_FIXED static Word16 Gain_Dequant_HR( /* o: decoded gain (Q13) */ Word16 index, /* i: quantization index */ const Word16 min, /* i: value of lower limit (Q13) */ @@ -1578,4 +1577,3 @@ void hr_bwe_dec_init( return; } -#endif diff --git a/lib_dec/swb_bwe_dec_lr.c b/lib_dec/swb_bwe_dec_lr.c index ff664e20b..ff2af374e 100644 --- a/lib_dec/swb_bwe_dec_lr.c +++ b/lib_dec/swb_bwe_dec_lr.c @@ -49,262 +49,3 @@ * * Decoding of generic subband coding parameters *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void DecodeSWBGenericParameters( - Decoder_State *st, /* i/o: decoder state structure */ - int16_t *lagIndices, /* o : lowband index for each subband */ - const int16_t nBands_search, /* i : number of subbnads for SSearch */ - const int16_t BANDS, /* i : total number of subbands per frame */ - const int16_t *p2a_flags, /* i : HF tonal flag */ - const int16_t hq_swb_clas /* i : mode of operation HQ_NORMAL or HQ_HARMONIC */ -) -{ - int16_t sb; - - /* lag index for each subband (except last two) */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - if ( hq_swb_clas == HQ_HARMONIC ) - { - lagIndices[sb] = get_next_indice( st, bits_lagIndices_mode0_Har[sb] ); - } - else - { - if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + sb] == 0 ) - { - lagIndices[sb] = get_next_indice( st, bits_lagIndices_modeNormal[sb] ); - } - else - { - lagIndices[sb] = 0; - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * DecodeSWBSubbands() - * - * Main routine for generic SWB coding - * - * High-frequency subbands are replicated based on the lowband signal using a lowband index denoting - * the selected lowband subband as well as linear and logarithmic domain gains - *-------------------------------------------------------------------*/ - -static void DecodeSWBSubbands( - Decoder_State *st, /* i/o: decoder state structure */ - HQ_DEC_HANDLE hHQ_core, /* i/o: HQ decoder handle */ - float *spectra, /* i/o: MDCT domain spectrum */ - const int16_t fLenLow, /* i : lowband length */ - const int16_t fLenHigh, /* i : highband length */ - const int16_t nBands, /* i : number of subbands */ - const int16_t *sbWidth, /* i : subband lengths */ - int16_t *lagIndices, - float *lagGains, /* i : first gain for each subband */ - int16_t BANDS, /* i : number subbands per frame */ - int16_t *band_start, /* i : band start of each SB */ - int16_t *band_end, /* i : band end of each SB */ - float *band_energy, /* i : band energy of each SB */ - int16_t *p2a_flags, /* i : HF tonal indicator */ - const int16_t hqswb_clas, /* i : class information */ - const int16_t har_bands, /* i : number of LF harmonic bands */ - const int16_t *subband_search_offset, - int16_t *prev_frm_hfe2, - int16_t *prev_stab_hfe2, - int16_t band_width[], /* i : subband band widths */ - const int16_t *subband_offsets, /* i : subband offsets for sparse filling */ - const float spectra_ni[], /* i : core coder with sparseness filled */ - int16_t *ni_seed /* i/o: random seed for search buffer NI */ -) -{ - int16_t i; - int16_t k; - float sspectra[L_FRAME32k]; - float sspectra_ni[L_FRAME32k], sspectra_diff[L_FRAME32k], th_g[NB_SWB_SUBBANDS]; - float ss_min = 1.0f, g, be_tonal[SWB_HAR_RAN1], xSynth_har[L_FRAME32k]; - GainItem pk_sf[(NB_SWB_SUBBANDS) *8]; - int16_t lagIndices_real[NB_SWB_SUBBANDS]; - int16_t pul_res[NB_SWB_SUBBANDS], imin; - int16_t har_freq_est1 = 0; - int16_t har_freq_est2 = 0; - int16_t flag_dis = 1; - int16_t pos_max_hfe2 = 0; - - set_s( pul_res, 0, NB_SWB_SUBBANDS ); - set_f( xSynth_har, 0.0f, fLenHigh ); - - - if ( hqswb_clas == HQ_HARMONIC ) - { - /* Harmonic Structure analysis */ - pos_max_hfe2 = har_est( spectra, fLenLow, &har_freq_est1, &har_freq_est2, &flag_dis, prev_frm_hfe2, subband_search_offset, sbWidth, prev_stab_hfe2 ); - /* Spectrum normalization for the corecoder */ - noise_extr_corcod( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, hHQ_core->prev_hqswb_clas, &hHQ_core->prev_ni_ratio ); - /* Harmonic Structure analysis */ - - if ( flag_dis == 0 ) - { - if ( har_freq_est2 != SWB_HAR_RAN1 || har_freq_est2 != *prev_frm_hfe2 ) - { - har_freq_est2 += lagIndices[0]; - } - } - /*Generate HF noise*/ - genhf_noise( sspectra_diff, xSynth_har, sspectra, BANDS, har_bands, har_freq_est2, pos_max_hfe2, pul_res, pk_sf, fLenLow, fLenHigh, sbWidth, lagIndices, subband_offsets, subband_search_offset ); - - imin = get_next_indice( st, 2 ); - g = (float) pow( 10.0f, gain_table_SWB_BWE[imin] ); - /* tonal energy estimation */ - ton_ene_est( xSynth_har, be_tonal, band_energy, band_start, band_end, band_width, fLenLow, fLenHigh, BANDS, har_bands, g, pk_sf, pul_res ); - - /* HF Spectrum Generation */ - Gettonl_scalfact( xSynth_har, spectra_ni, fLenLow, fLenHigh, har_bands, BANDS, band_energy, band_start, band_end, p2a_flags, be_tonal, pk_sf, pul_res ); - if ( flag_dis == 0 ) - { - *prev_frm_hfe2 = 0; - } - else - { - *prev_frm_hfe2 = har_freq_est2; - } - - for ( k = har_bands; k < BANDS; k++ ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = xSynth_har[i - fLenLow]; - } - } - } - else if ( hqswb_clas == HQ_NORMAL ) - { - /* Spectrum normalization for the corecoder */ - ss_min = spectrumsmooth_noiseton( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, ni_seed ); - - convert_lagIndices_pls2smp( (int16_t *) lagIndices, nBands, lagIndices_real, sspectra, sbWidth, fLenLow ); - - for ( k = 0; k < nBands; k++ ) - { - if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 1 ) - { - lagIndices_real[k] = 0; - } - } - /*get levels for missing bands*/ - GetlagGains( sspectra_ni, &band_energy[BANDS - NB_SWB_SUBBANDS], nBands, sbWidth, lagIndices_real, fLenLow, lagGains ); - for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) - { - lagGains[k] *= 0.9f; - } - for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) - { - th_g[k] = 0.0f; - if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) - { - th_g[k] = lagGains[k] * ss_min; - } - } - /* Construct spectrum */ - GetSynthesizedSpecThinOut( sspectra_ni, xSynth_har, nBands, sbWidth, lagIndices_real, lagGains, fLenLow ); - - /*Level adjustment for the missing bands*/ - noiseinj_hf( xSynth_har, th_g, band_energy, hHQ_core->prev_En_sb, p2a_flags, BANDS, band_start, band_end, fLenLow ); - /* xSynth is the reconstructed high-band */ - for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) - { - if ( p2a_flags[k] == 0 ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = xSynth_har[i - fLenLow]; - } - } - else - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = spectra_ni[i]; - } - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * swb_bwe_dec_lr() - * - * Main decoding routine of SWB BWE for the LR MDCT core - *-------------------------------------------------------------------*/ - -void swb_bwe_dec_lr( - Decoder_State *st, /* i/o: decoder state structure */ - const float m_core[], /* i : lowband synthesis */ - float m[], /* o : highband synthesis with lowband zeroed */ - const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ - int16_t BANDS, /* i : Number subbands/Frame */ - int16_t *band_start, /* i : Band Start of each SB */ - int16_t *band_end, /* i : Band end of each SB */ - float *band_energy, /* i : BAnd energy of each SB */ - int16_t *p2a_flags, /* i : HF tonal Indicator */ - const int16_t hqswb_clas, /* i : class information */ - int16_t lowlength, /* i : Lowband Length */ - int16_t highlength, /* i : Highband Length */ - const int16_t har_bands, /* i : Number of LF harmonic bands */ - int16_t *prev_frm_hfe2, - int16_t *prev_stab_hfe2, - int16_t band_width[], /* i : subband bandwidth */ - const float y2_ni[], /* i/o: Sparse filled corecoder */ - int16_t *ni_seed /* i/o: random seed */ -) -{ - int16_t k; - int16_t nBands; - int16_t nBands_search; - int16_t wBands[NB_SWB_SUBBANDS]; - int16_t lagIndices[NB_SWB_SUBBANDS]; - float lagGains[NB_SWB_SUBBANDS]; - int16_t swb_lowband, swb_highband; - const int16_t *subband_search_offset; - - const int16_t *subband_offsets; - - subband_search_offset = subband_search_offsets_13p2kbps_Har; - subband_offsets = subband_offsets_sub5_13p2kbps_Har; - hf_parinitiz( total_brate, hqswb_clas, lowlength, highlength, wBands, &subband_search_offset, &subband_offsets, &nBands, &nBands_search, &swb_lowband, &swb_highband ); - - /* Decoding of the SWB parameters */ - DecodeSWBGenericParameters( st, lagIndices, nBands_search, BANDS, p2a_flags, hqswb_clas ); - - /* Copy WB synthesis for SWB decoding */ - mvr2r( m_core, m, swb_lowband + swb_highband ); - - /* Generic subband processing */ - DecodeSWBSubbands( st, st->hHQ_core, m, swb_lowband, swb_highband, nBands, wBands, lagIndices, lagGains, BANDS, band_start, band_end, band_energy, p2a_flags, hqswb_clas, har_bands, subband_search_offset, prev_frm_hfe2, prev_stab_hfe2, band_width, subband_offsets, y2_ni, ni_seed ); - - /* Smoothen highest frequencies */ - m[swb_lowband + swb_highband - 1] *= 0.0625f; - m[swb_lowband + swb_highband - 2] *= 0.125f; - m[swb_lowband + swb_highband - 3] *= 0.25f; - m[swb_lowband + swb_highband - 4] *= 0.5f; - - /* Set frequencies below 6.4 kHz to zero */ - if ( hqswb_clas == HQ_NORMAL ) - { - for ( k = 0; k < swb_lowband; k++ ) - { - m[k] = 0.0f; - } - } - - return; -} -#endif diff --git a/lib_dec/swb_bwe_dec_lr_fx.c b/lib_dec/swb_bwe_dec_lr_fx.c index b9bb17621..c0565dd75 100644 --- a/lib_dec/swb_bwe_dec_lr_fx.c +++ b/lib_dec/swb_bwe_dec_lr_fx.c @@ -7,7 +7,6 @@ #include "prot_fx.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * DecodeSWBGenericParameters() * @@ -345,4 +344,3 @@ void swb_bwe_dec_lr_fx( return; } -#endif diff --git a/lib_dec/swb_tbe_dec.c b/lib_dec/swb_tbe_dec.c index 942a229f7..d73f17fd7 100644 --- a/lib_dec/swb_tbe_dec.c +++ b/lib_dec/swb_tbe_dec.c @@ -44,20 +44,12 @@ #include "rom_dec.h" #include "wmc_auto.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void dequantizeSHBparams( Decoder_State *st, const int16_t extl, int32_t extl_brate, float *Q_lsf, float *Q_subgain, float *Q_framegrain, int16_t *uv_flag, float *Q_shb_ener_sf, float *Q_shb_res_gshape, float *Q_mixFactors, int16_t *MSFlag ); -static void Dequant_lower_LSF( const int16_t lsf_idx[], float lsf_q[] ); -static void Map_higher_LSF( float lsf_q[], const float m, const float grid_in[] ); -static void Dequant_mirror_point( const float lsf_q[], const int16_t m_idx, float *m ); -#endif void find_max_mem_dec_m3( Decoder_State *st, @@ -69,400 +61,6 @@ void find_max_mem_dec_m3( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ResetSHBbuffer_Dec( - TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - const int16_t extl /* i : BWE extension layer */ -) -{ - int16_t i; - float f; - float inc; - - if ( extl != WB_TBE ) - { - f = 1.0f / 22.0f; - inc = 1.0f / 22.0f; - } - else - { - f = 1.0f / 6.0f; - inc = 1.0f / 6.0f; - } - - /* states for the filters used in generating SHB excitation from WB excitation*/ - set_f( hBWE_TD->mem_csfilt, 0, 2 ); - - /* states for the filters used in generating SHB signal from SHB excitation*/ - set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD ); - set_f( hBWE_TD->state_lpc_syn, 0, LPC_SHB_ORDER ); - - if ( extl == FB_TBE ) - { - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_synth( hBWE_TD->fbbwe_hpf_mem, &hBWE_TD->prev_fbbwe_ratio ); - } - - /* states for the filters used in generating SHB signal from SHB excitation in wideband*/ - set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->mem_genSHBexc_filt_down_wb2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->mem_genSHBexc_filt_down_wb3, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - set_f( hBWE_TD->state_lsyn_filt_shb, 0, 2 * ALLPASSSECTIONS_STEEP ); - set_f( hBWE_TD->state_lsyn_filt_dwn_shb, 0, 2 * ALLPASSSECTIONS_STEEP ); - set_f( hBWE_TD->mem_resamp_HB, 0, INTERP_3_1_MEM_LEN ); - - /* States for the local synthesis filters */ - set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - - /* States for FEC */ - if ( extl != WB_TBE ) - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = f; - f += inc; - } - } - else - { - for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = f; - f += inc; - } - for ( ; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = 0.0f; - } - } - - hBWE_TD->GainFrame_prevfrm = 0.0f; - hBWE_TD->GainAttn = 1.0; - hBWE_TD->tbe_demph = 0.0f; - hBWE_TD->tbe_premph = 0.0f; - set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); - hBWE_TD->gain_prec_swb = 1.0f; - set_f( hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); - hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; - hBWE_TD->prev_mix_factor = 1.0f; - - set_f( hBWE_TD->old_core_synth, 0, L_FRAME16k ); - - set_f( hBWE_TD->old_tbe_synth, 0, L_SHB_TRANSITION_LENGTH ); - hBWE_TD->tilt_swb_fec = 0.0f; - - return; -} - - -/*-------------------------------------------------------------------* - * wb_tbe_dec() - * - * WB TBE decoder, 6 - 8 kHz band decoding module - *-------------------------------------------------------------------*/ - -void wb_tbe_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const float *bwe_exc_extended, /* i : bandwidth extended excitation */ - const float voice_factors[], /* i : voicing factors */ - float *synth /* o : WB synthesis/final synthesis */ -) -{ - int16_t i; - TD_BWE_DEC_HANDLE hBWE_TD; - float shaped_wb_excitation[( L_FRAME16k + L_SHB_LAHEAD ) / 4]; - float exc4kWhtnd[L_FRAME16k / 4]; - float lsf_wb[LPC_SHB_ORDER_WB], lpc_wb[LPC_SHB_ORDER_WB + 1], GainShape[NUM_SHB_SUBFR], GainFrame; - float error[L_FRAME16k]; - float upsampled_synth[L_FRAME48k]; - float prev_pow, curr_pow, scale; - float temp, curr_frame_pow; - int16_t j; - float vf_modified[NB_SUBFR16k]; - int16_t uv_flag = 0; - - hBWE_TD = st->hBWE_TD; - - if ( st->bws_cnt == 0 ) - { - - if ( !st->bfi ) - { - if ( st->use_partial_copy ) - { - if ( st->last_extl != WB_TBE ) - { - hBWE_TD->GainFrame_prevfrm = 0; - hBWE_TD->lsp_prevfrm[0] = 0.1f; - for ( i = 1; i < LPC_SHB_ORDER_LBR_WB; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = hBWE_TD->lsp_prevfrm[i - i] + 0.1f; - } - } - - mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_LBR_WB ); - set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); - - if ( st->rf_frame_type == RF_NELP ) - { - /* Frame gain */ - /* only four LSBs are valid */ - st->rf_indx_tbeGainFr &= 0xF; - mvr2r( SHBCB_FrameGain16 + st->rf_indx_tbeGainFr, &GainFrame, 1 ); - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && !st->prev_use_partial_copy && st->prev_coder_type == UNVOICED && GainFrame != hBWE_TD->GainFrame_prevfrm && st->last_extl == WB_TBE ) - { - GainFrame = 0.2f * GainFrame + 0.8f * hBWE_TD->GainFrame_prevfrm; - } - } - else - { - /* Frame gain */ - temp = 0.0f; - switch ( st->rf_indx_tbeGainFr ) - { - case 0: - GainFrame = 0.5f; - if ( hBWE_TD->GainFrame_prevfrm <= 1.25 ) - { - temp = 0.8f; - } - break; - case 1: - GainFrame = 2.0f; - if ( hBWE_TD->GainFrame_prevfrm > 1.25 && hBWE_TD->GainFrame_prevfrm <= 3 ) - { - temp = 0.8f; - } - break; - case 2: - GainFrame = 4.0f; - if ( hBWE_TD->GainFrame_prevfrm > 3 && hBWE_TD->GainFrame_prevfrm <= 6 ) - { - temp = 0.8f; - } - break; - case 3: - GainFrame = 8.0f; - if ( hBWE_TD->GainFrame_prevfrm > 6 && hBWE_TD->GainFrame_prevfrm <= 16 ) - { - temp = 0.8f; - } - break; - default: - GainFrame = 1.0f; - IVAS_ERROR( IVAS_ERR_INTERNAL, "RF WB-TBE gain bits not supported." ); - break; - } - - if ( st->last_extl == WB_TBE ) - { - GainFrame = ( 1 - temp ) * GainFrame + temp * ( hBWE_TD->GainFrame_prevfrm ); - } - - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE ) - { - if ( !st->prev_use_partial_copy && st->last_coder_type == VOICED && st->rf_frame_type == RF_GENPRED && st->prev_tilt_code_dec < 0.046f && st->prev_tilt_code_dec > 0.006f ) - { - GainFrame *= 0.3f; - } - } - } - } - else - { - /* de-quantization */ - dequantizeSHBparams( st, st->extl, st->extl_brate, lsf_wb, GainShape, &GainFrame, &uv_flag, 0, 0, 0, &j /*temp*/ ); - } - } - else - { - if ( st->extl_brate == WB_TBE_0k35 ) - { - mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_LBR_WB ); - } - else - { - mvr2r( hBWE_TD->lsp_prevfrm, lsf_wb, LPC_SHB_ORDER_WB ); - } - set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); - hBWE_TD->GainAttn *= 0.85f; - if ( st->codec_mode == MODE1 ) - { - GainFrame = hBWE_TD->GainAttn * hBWE_TD->GainFrame_prevfrm; - } - else - { - GainFrame = hBWE_TD->GainFrame_prevfrm; - } - } - - if ( st->extl_brate == WB_TBE_0k35 ) - { - /* convert LSPs back into LP coeffs */ - lsp2a( lpc_wb, lsf_wb, LPC_SHB_ORDER_LBR_WB ); - set_f( lpc_wb + LPC_SHB_ORDER_LBR_WB + 1, 0.0f, ( LPC_SHB_ORDER_WB - LPC_SHB_ORDER_LBR_WB ) ); - } - else - { - /* convert LSPs back into LP coeffs */ - lsp2a( lpc_wb, lsf_wb, LPC_SHB_ORDER_WB ); - } - lpc_wb[0] = 1.0f; - mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); - if ( st->coder_type == VOICED ) - { - for ( i = 1; i < NB_SUBFR; i++ ) - { - vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; - } - - if ( st->L_frame != L_FRAME ) - { - vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; - } - } - - if ( st->use_partial_copy && st->nelp_mode_dec ) - { - set_f( vf_modified, 0.0f, NB_SUBFR16k ); - } - - /* From low band excitation, generate highband excitation */ - mvr2r( hBWE_TD->state_syn_shbexc, shaped_wb_excitation, L_SHB_LAHEAD / 4 ); - - GenShapedWBExcitation( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, uv_flag, st->igf ); - - prev_pow = sum2_f( shaped_wb_excitation, L_SHB_LAHEAD / 4 ); - curr_pow = sum2_f( shaped_wb_excitation + L_SHB_LAHEAD / 4, L_SHB_LAHEAD / 4 ); - - if ( st->element_mode > EVS_MONO ) - { - /* prevent too low values of energy */ - prev_pow = max( 0.00001f, prev_pow ); - curr_pow = max( 0.00001f, curr_pow ); - } - - if ( voice_factors[0] > 0.75f ) - { - curr_pow *= 0.25; - } - - if ( prev_pow == 0 ) - { - scale = 0; - } - else - { - scale = (float) sqrt( curr_pow / prev_pow ); - } - for ( i = 0; i < L_SHB_LAHEAD / 4 - 1; i++ ) - { - shaped_wb_excitation[i] *= scale; - } - scale = (float) sqrt( scale ); - - shaped_wb_excitation[L_SHB_LAHEAD / 4 - 1] *= scale; - - /* Update SHB excitation */ - mvr2r( shaped_wb_excitation + L_FRAME16k / 4, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD / 4 ); - - /* Adjust the subframe and frame gain of the synthesized shb signal */ - /* Scale the shaped excitation */ - ScaleShapedSHB( SHB_OVERLAP_LEN / 2, shaped_wb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_wb, subwin_wb ); - - curr_frame_pow = sum2_f( shaped_wb_excitation, L_FRAME16k / 4 ) + 0.001f; - curr_frame_pow = min( curr_frame_pow, FLT_MAX ); - - if ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) - { - if ( curr_frame_pow > 2.0f * hBWE_TD->prev_wb_bwe_frame_pow ) - { - scale = root_a_over_b( hBWE_TD->prev_wb_bwe_frame_pow, curr_frame_pow ); - temp = (float) pow( scale, 0.125f ); - } - else - { - scale = 1.0f; - temp = 1.0f; - } - - for ( j = 0; j < 8; j++ ) - { - GainShape[2 * j] *= scale; - GainShape[2 * j + 1] *= scale; - for ( i = 0; i < L_FRAME16k / ( 4 * 8 ); i++ ) - { - shaped_wb_excitation[i + j * L_FRAME16k / ( 4 * 8 )] *= scale; - } - scale /= temp; - } - } - - hBWE_TD->prev_wb_bwe_frame_pow = curr_frame_pow; - - /* generate 16kHz SHB signal (6 - 8 kHz) from 2kHz signal */ - GenWBSynth( shaped_wb_excitation, error, hBWE_TD->state_lsyn_filt_shb, hBWE_TD->state_lsyn_filt_dwn_shb ); - - mvr2r( error + L_FRAME16k - L_SHB_TRANSITION_LENGTH, hBWE_TD->old_tbe_synth, L_SHB_TRANSITION_LENGTH ); - - for ( i = 0; i < L_FRAME16k; i++ ) - { - synth[i] = 0.65f * error[i]; - } - - if ( st->hBWE_FD != NULL ) - { - st->hBWE_FD->last_wb_bwe_ener = 0.0f; - for ( i = 0; i < L_FRAME16k; i++ ) - { - st->hBWE_FD->last_wb_bwe_ener += synth[i] * synth[i]; - } - st->hBWE_FD->last_wb_bwe_ener = (float) sqrt( st->hBWE_FD->last_wb_bwe_ener / L_FRAME16k ); - } - - if ( st->output_Fs == 32000 ) /* 32kHz sampling rate, but only WB output - interpolate */ - { - Interpolate_allpass_steep( synth, hBWE_TD->mem_resamp_HB, L_FRAME16k, upsampled_synth ); - mvr2r( upsampled_synth, synth, L_FRAME32k ); - } - else if ( st->output_Fs == 48000 ) - { - interpolate_3_over_1_allpass( synth, L_FRAME16k, upsampled_synth, hBWE_TD->mem_resamp_HB ); - mvr2r( upsampled_synth, synth, L_FRAME48k ); - } - } - else - { - for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) - { - lsf_wb[i] = ( i + 1 ) / 6.f; - } - GainFrame = 0; - - hBWE_TD->prev_wb_bwe_frame_pow = 0.001f; - } - - /* Update previous frame parameters for FEC */ - if ( st->extl_brate == WB_TBE_0k35 ) - { - mvr2r( lsf_wb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER_LBR_WB ); - } - else - { - mvr2r( lsf_wb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER_WB ); - } - hBWE_TD->GainFrame_prevfrm = GainFrame; - - if ( !st->bfi ) - { - hBWE_TD->GainAttn = 1.0f; - } - - return; -} -#else static void calc_tilt_bwe_fx_loc( const Word32 *sp_fx, /* i : input signal : Q11 */ Word32 *tilt_fx, /* o : signal tilt : tilt_fx_q */ @@ -966,7 +564,6 @@ static void find_max_mem_dec( move16(); /* --------------------------------------------------------------*/ } -#endif // IVAS_FLOAT_FIXED void find_max_mem_dec_m3( Decoder_State *st, @@ -1003,7 +600,6 @@ void find_max_mem_dec_m3( } } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_swb_tbe_dec_fx() * @@ -2792,1798 +2388,66 @@ void ivas_swb_tbe_dec_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* - * swb_tbe_dec() + * Dequant_lower_LSF() * - * SWB TBE decoder, 6 - 14 kHz (or 7.5 - 15.5 kHz) band decoding module + * Dequantized the lower LSFs *-------------------------------------------------------------------*/ -void swb_tbe_dec( - Decoder_State *st, /* i/o: decoder state structure */ - STEREO_ICBWE_DEC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ - const float *bwe_exc_extended, /* i : bandwidth extended excitation */ - const float voice_factors[], /* i : voicing factors */ - const float old_syn_12k8_16k[], /* i : low band synthesis */ - float *White_exc16k, /* o : shaped white excitation for the FB TBE */ - float *synth, /* o : SHB synthesis/final synthesis */ - float *pitch_buf ) -{ - int16_t i, j; - int16_t stemp; - TD_BWE_DEC_HANDLE hBWE_TD; - float shaped_shb_excitation[L_FRAME16k + L_SHB_LAHEAD]; - float lsf_shb[LPC_SHB_ORDER], lpc_shb[LPC_SHB_ORDER + 1], GainShape[NUM_SHB_SUBFR], GainFrame; - float error[L_FRAME32k]; - float ener; - int16_t is_fractive; - float prev_pow, curr_pow, scale; - float curr_frame_pow, temp; - float GainShapeTemp[NUM_SHB_SUBFR / 4], GainGrad0[3], GainGrad1[3], GainGradFEC[4]; - float vf_modified[NB_SUBFR16k]; - float f, inc; - float GainFrame_prevfrm; - float tilt_swb_fec; - float prev_ener_ratio; - float lsp_shb_1[LPC_SHB_ORDER], lsp_shb_2[LPC_SHB_ORDER], lsp_temp[LPC_SHB_ORDER]; - float lpc_shb_sf[4 * ( LPC_SHB_ORDER + 1 )]; - const float *ptr_lsp_interp_coef; - float shb_ener_sf; - float shb_res_gshape[NB_SUBFR16k]; - float mixFactors; - int16_t vind; - float shb_res_dummy[L_FRAME16k]; - float shaped_shb_excitationTemp[L_FRAME16k]; - float ener_tmp[NUM_SHB_SUBGAINS]; - float GainShape_tmp[NUM_SHB_SUBGAINS]; - float pitch; - int16_t l_subframe; - float formant_fac; - float synth_scale; - float lsf_diff[LPC_SHB_ORDER], w[LPC_SHB_ORDER]; - float refl[M]; - float tilt_para; - float *nlExc16k, *mixExc16k; - int16_t MSFlag; - float feedback; - float GainShape_tilt; - hBWE_TD = st->hBWE_TD; +/*-------------------------------------------------------------------* + * Map_higher_LSF() + * + * Map the higher LSFs from the lower LSFs + *-------------------------------------------------------------------*/ - /* initializations */ - GainFrame = 0.0f; - mixFactors = 0.0f; - shb_ener_sf = 0.0f; - set_f( shaped_shb_excitationTemp, 0.0f, L_FRAME16k ); - if ( st->hTdCngDec != NULL ) - { - st->hTdCngDec->shb_dtx_count = 0; - } - is_fractive = 0; - if ( hStereoICBWE != NULL ) - { - nlExc16k = hStereoICBWE->nlExc16k; - mixExc16k = hStereoICBWE->mixExc16k; - MSFlag = hStereoICBWE->MSFlag; - } - else - { - nlExc16k = NULL; - mixExc16k = NULL; - MSFlag = 0; - } +/*-------------------------------------------------------------------* + * Map_higher_LSF() + * + * Map the higher LSFs from the lower LSFs + *-------------------------------------------------------------------*/ - /* find tilt */ - calc_tilt_bwe( old_syn_12k8_16k, &tilt_swb_fec, L_FRAME ); - if ( st->bfi && st->clas_dec != UNVOICED_CLAS ) +/*-------------------------------------------------------------------* + * dequantizeSHBparams() + * + * Dequantize super highband spectral envolope, temporal gains and frame gain + *-------------------------------------------------------------------*/ + + +void GenTransition_fixed( + TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ + Word32 *outputHB_fx, /* o : synthesized HB transitions signal : Q11 */ + const Word32 output_Fs, /* i : output sampling rate : Q0 */ + const Word16 element_mode, /* i : element mode : Q0 */ + const Word16 L_frame, /* i : ACELP frame length : Q0 */ + const Word16 rf_flag, /* i : RF flag : Q0 */ + const Word32 total_brate, /* i : total bitrate : Q0 */ + const Word16 prev_Qx ) +{ + Word16 i, length; + + Word32 syn_overlap_32k_fx[2 * SHB_OVERLAP_LEN]; + + /* set targeted length of transition signal */ + length = i_mult( 2, NS2SA_FX2( output_Fs, DELAY_BWE_TOTAL_NS ) ); + + /* upsample overlap snippet */ + Interpolate_allpass_steep_32( hBWE_TD->syn_overlap_fx_32, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local_fx_32, SHB_OVERLAP_LEN, syn_overlap_32k_fx ); + + /* perFORm spectral flip and downmix with overlap snippet to match HB synth */ + test(); + test(); + test(); + test(); + IF( ( ( element_mode == EVS_MONO ) && ( rf_flag || EQ_32( total_brate, ACELP_9k60 ) ) ) || ( ( element_mode > EVS_MONO ) && EQ_16( L_frame, L_FRAME ) ) ) { - tilt_swb_fec = hBWE_TD->tilt_swb_fec; + flip_and_downmix_generic_fx_32( syn_overlap_32k_fx, syn_overlap_32k_fx, 2 * SHB_OVERLAP_LEN, hBWE_TD->genSHBsynth_Hilbert_Mem_fx, hBWE_TD->genSHBsynth_Hilbert_Mem_fx + HILBERT_ORDER1, hBWE_TD->genSHBsynth_Hilbert_Mem_fx + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), &( hBWE_TD->syn_dm_phase ) ); } - - /* WB/SWB bandwidth switching */ - if ( ( st->tilt_wb > 5 && st->clas_dec == UNVOICED_CLAS ) || st->tilt_wb > 10 ) + ELSE { - if ( ( st->prev_fractive == 0 && st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH && st->prev_enerLL < 2.0f * st->enerLL && st->prev_enerLL > 0.5f * st->enerLL ) || ( st->prev_fractive == 1 && st->prev_enerLH > 3.0f * st->enerLH ) || ( st->enerLL > 1.5f * st->enerLH && st->tilt_wb < 10.0f ) ) - { - is_fractive = 0; - } - else - { - is_fractive = 1; - } - } - - /* WB/SWB bandwidth switching */ - if ( st->bws_cnt > 0 ) - { - f = 1.0f / 22.0f; - inc = 1.0f / 22.0f; - - if ( is_fractive == 1 ) - { - mvr2r( lsf_tab, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER ); - } - else - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = f; - f += inc; - } - } - if ( ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && !( st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH ) ) || st->last_core != ACELP_CORE || ( st->last_core == ACELP_CORE && labs( st->last_core_brate - st->core_brate ) > 3600 ) || ( is_fractive ^ st->prev_fractive ) == 1 ) - { - set_f( GainShape, 0.3536f, NUM_SHB_SUBFR ); - } - else - { - hBWE_TD->prev_GainShape = ( hBWE_TD->prev_GainShape > 0.3536f ) ? 0.353f : hBWE_TD->prev_GainShape; - set_f( GainShape, hBWE_TD->prev_GainShape, NUM_SHB_SUBFR ); - } - - mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); - set_f( shb_res_gshape, 0.2f, NB_SUBFR16k ); - } - else - { - if ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) - { - f = 1.0f / 22.0f; - inc = 1.0f / 22.0f; - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = f; - f += inc; - } - } - - if ( !st->bfi ) - { - if ( st->use_partial_copy ) - { - if ( st->last_extl != SWB_TBE ) - { - hBWE_TD->GainFrame_prevfrm = 0; - f = 1.0f / 22.0f; - inc = 1.0f / 22.0f; - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->lsp_prevfrm[i] = f; - f += inc; - } - } - mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); - set_f( GainShape, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR ); - - if ( st->rf_frame_type == RF_NELP ) - { - /* Frame gain */ - GainFrame = usdequant( st->rf_indx_tbeGainFr, SHB_GAIN_QLOW, SHB_GAIN_QDELTA ); - GainFrame = (float) pow( 10.0, GainFrame ); - - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE && !st->prev_use_partial_copy && st->prev_coder_type == UNVOICED && GainFrame != hBWE_TD->GainFrame_prevfrm && st->next_coder_type != GENERIC && st->last_extl == SWB_TBE ) - { - GainFrame = 0.2f * GainFrame + 0.8f * hBWE_TD->GainFrame_prevfrm; - } - } - else - { - temp = 0.0f; - /* Frame gain */ - switch ( st->rf_indx_tbeGainFr ) - { - case 0: - GainFrame = 0.5f; - if ( hBWE_TD->GainFrame_prevfrm <= 1.25 ) - { - temp = 0.8f; - } - break; - case 1: - GainFrame = 2.0f; - if ( hBWE_TD->GainFrame_prevfrm > 1.25 && hBWE_TD->GainFrame_prevfrm <= 3 ) - { - temp = 0.8f; - } - break; - case 2: - GainFrame = 4.0f; - if ( hBWE_TD->GainFrame_prevfrm > 3 && hBWE_TD->GainFrame_prevfrm <= 6 ) - { - temp = 0.8f; - } - break; - case 3: - GainFrame = 8.0f; - if ( hBWE_TD->GainFrame_prevfrm > 6 && hBWE_TD->GainFrame_prevfrm <= 16 ) - { - temp = 0.8f; - } - break; - default: - IVAS_ERROR( IVAS_ERR_INTERNAL, "RF SWB-TBE gain bits not supported." ); - } - - if ( st->last_extl == SWB_TBE ) - { - GainFrame = ( 1 - temp ) * GainFrame + temp * ( hBWE_TD->GainFrame_prevfrm ); - } - - if ( st->core == ACELP_CORE && st->last_core == ACELP_CORE ) - { - if ( !st->prev_use_partial_copy && st->last_coder_type == VOICED && st->rf_frame_type == RF_GENPRED && GainFrame > 8.0f && GainFrame < 11.67f ) - { - GainFrame *= 0.3f; - } - } - } - } - else - { - /* de-quantization */ - dequantizeSHBparams( st, st->extl, st->extl_brate, lsf_shb, GainShape, &GainFrame, &stemp, &shb_ener_sf, shb_res_gshape, &mixFactors, &MSFlag ); - if ( hStereoICBWE != NULL ) - { - hStereoICBWE->MSFlag = MSFlag; - } - } - } - else - { - mvr2r( hBWE_TD->lsp_prevfrm, lsf_shb, LPC_SHB_ORDER ); - - if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) - { - /* the previous frame gainshape gradient and the gainshape gradient pattern for the current frame */ - for ( j = 0; j < 3; j++ ) - { - GainGrad0[j] = hBWE_TD->GainShape_Delay[j + 1] - hBWE_TD->GainShape_Delay[j]; - GainGrad1[j] = hBWE_TD->GainShape_Delay[j + 5] - hBWE_TD->GainShape_Delay[j + 4]; - GainGradFEC[j + 1] = GainGrad0[j] * 0.4f + GainGrad1[j] * 0.6f; - } - - /* gradient for the first gainshape */ - if ( ( GainGrad1[2] > 2 * GainGrad1[1] && GainGrad1[1] > 2 * GainGrad1[0] ) || - ( GainGrad1[2] < 2 * GainGrad1[1] && GainGrad1[1] < 2 * GainGrad1[0] ) ) - { - GainGradFEC[0] = GainGrad1[1] * 0.1f + GainGrad1[2] * 0.9f; - } - else - { - GainGradFEC[0] = GainGrad1[0] * 0.2f + GainGrad1[1] * 0.3f + GainGrad1[2] * 0.5f; - } - - /* get the first gainshape template */ - if ( ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) && GainGradFEC[0] > 0 ) - { - GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7] + GainGradFEC[0]; - } - else if ( GainGradFEC[0] > 0 ) - { - GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7] + GainGradFEC[0] * 0.5f; - } - else - { - GainShapeTemp[0] = hBWE_TD->GainShape_Delay[7]; - } - - /*Get the second the third and the fourth gainshape template*/ - if ( ( GainGrad1[2] > 10.0f * GainGrad1[1] ) && GainGrad1[1] > 0 ) - { - for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) - { - GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i] * 0.8f; - GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); - } - } - else if ( ( GainGrad1[2] > 10.0f * GainGrad1[1] ) && GainGrad1[1] < 0 ) - { - for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) - { - GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i] * 0.2f; - GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); - } - } - else - { - for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) - { - GainShapeTemp[i] = GainShapeTemp[i - 1] + GainGradFEC[i]; - GainShapeTemp[i] = max( GainShapeTemp[i], 0.01f ); - } - } - - /* Get the gainshape and gain frame for the current frame*/ - if ( ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) && st->nbLostCmpt == 1 ) - { - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - GainShape[i * 4 + j] = GainShapeTemp[i] * 1.2f; - } - } - hBWE_TD->GainAttn *= 0.95f; - } - else if ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS ) - { - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - GainShape[i * 4 + j] = GainShapeTemp[i]; - } - } - hBWE_TD->GainAttn *= 0.95f; - } - else if ( st->nbLostCmpt > 1 ) - { - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - GainShape[i * 4 + j] = GainShapeTemp[i] * 0.5f; - } - } - hBWE_TD->GainAttn *= 0.5f; - } - else - { - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - GainShape[i * 4 + j] = GainShapeTemp[i]; - } - } - hBWE_TD->GainAttn *= 0.85f; - } - - GainFrame = hBWE_TD->GainAttn * hBWE_TD->GainFrame_prevfrm; - } - else - { - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - GainShape[i * 4 + j] = st->cummulative_damping_float * hBWE_TD->GainShape_Delay[4 + i]; - } - } - - if ( tilt_swb_fec > 8 ) - { - if ( st->nbLostCmpt == 1 ) - { - GainFrame = (float) ( 0.6 * st->cummulative_damping_float * hBWE_TD->GainFrame_prevfrm ); - } - else if ( st->nbLostCmpt == 2 ) - { - GainFrame = (float) ( 0.35 * st->cummulative_damping_float * hBWE_TD->GainFrame_prevfrm ); - } - else - { - GainFrame = (float) ( 0.2 * st->cummulative_damping_float * hBWE_TD->GainFrame_prevfrm ); - } - } - else - { - GainFrame = hBWE_TD->GainFrame_prevfrm; /* gain locking */ - } - } - - if ( st->extl_brate >= SWB_TBE_2k8 ) - { - if ( st->codec_mode == MODE1 && st->element_mode == EVS_MONO ) - { - scale = (float) ( hBWE_TD->prev1_shb_ener_sf / sqrt( ( hBWE_TD->prev2_shb_ener_sf * hBWE_TD->prev3_shb_ener_sf ) + 0.0001 ) ); - scale = hBWE_TD->prev_res_shb_gshape * min( scale, 1.0f ); - - if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) - { - shb_ener_sf = 0.5f * scale * hBWE_TD->prev1_shb_ener_sf; - if ( st->nbLostCmpt > 1 ) - { - shb_ener_sf *= 0.5f; - } - } - else - { - shb_ener_sf = scale * scale * hBWE_TD->prev1_shb_ener_sf; - } - } - else - { - if ( hBWE_TD->prev2_shb_ener_sf > 2.0f * hBWE_TD->prev1_shb_ener_sf || hBWE_TD->prev3_shb_ener_sf > 2.0f * hBWE_TD->prev2_shb_ener_sf ) - { - shb_ener_sf = 0.5f * st->cummulative_damping_float * hBWE_TD->prev1_shb_ener_sf; - } - else - { - shb_ener_sf = st->cummulative_damping_float * hBWE_TD->prev1_shb_ener_sf; - } - } - } - - shb_ener_sf = max( shb_ener_sf, 1.0f ); - mixFactors = hBWE_TD->prev_mixFactors; - - if ( st->codec_mode == MODE2 ) - { - set_f( shb_res_gshape, 1.0f, NB_SUBFR16k ); - } - else - { - set_f( shb_res_gshape, 0.2f, NB_SUBFR16k ); - } - } - } - - /* get the gainshape delay */ - mvr2r( &hBWE_TD->GainShape_Delay[4], &hBWE_TD->GainShape_Delay[0], NUM_SHB_SUBFR / 4 ); - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - hBWE_TD->GainShape_Delay[i + 4] = GainShape[i * 4]; - } - - mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); - if ( st->coder_type == VOICED || mean( voice_factors, 4 ) > 0.4f ) - { - for ( i = 1; i < NB_SUBFR; i++ ) - { - vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; - } - - if ( st->L_frame != L_FRAME ) - { - vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; - } - } - - if ( st->use_partial_copy && st->nelp_mode_dec ) - { - set_f( vf_modified, 0.0f, NB_SUBFR16k ); - } - - /* SHB LSF from current frame; and convert to LSP for interpolation */ - lsf2lsp( lsf_shb, lsp_shb_2, LPC_SHB_ORDER, 1 ); - - if ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) - { - /* SHB LSP values from prev. frame for interpolation */ - mvr2r( hBWE_TD->swb_lsp_prev_interp, lsp_shb_1, LPC_SHB_ORDER ); - } - else - { - /* Use current frame's LSPs; in effect no interpolation */ - mvr2r( lsp_shb_2, lsp_shb_1, LPC_SHB_ORDER ); - } - - if ( st->bws_cnt == 0 && st->bws_cnt1 == 0 && st->prev_use_partial_copy == 0 && st->use_partial_copy == 0 ) - { - lsf_diff[0] = lsf_diff[LPC_SHB_ORDER - 1] = 0.5f; - for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) - { - lsf_diff[i] = lsf_shb[i] - lsf_shb[i - 1]; - } - - a2rc( hBWE_TD->cur_sub_Aq + 1, refl, M ); - tilt_para = 6.6956f * ( 1.0f + refl[0] ) * ( 1.0f + refl[0] ) - 3.8714f * ( 1.0f + refl[0] ) + 1.3041f; - if ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) - { - for ( i = 1; i < LPC_SHB_ORDER - 1; i++ ) - { - hBWE_TD->prev_lsf_diff[i - 1] = 0.5f * lsf_diff[i]; - } - } - - if ( st->extl_brate <= FB_TBE_1k8 ) - { - if ( !( hBWE_TD->prev_tilt_para > 5.0f && ( st->coder_type == TRANSITION || tilt_para < 1.0f ) ) && !( ( hBWE_TD->prev_tilt_para < 3.0f && st->prev_coder_type >= VOICED ) && tilt_para > 5.0f ) ) - { - for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) - { - if ( lsf_diff[i] < 0 || hBWE_TD->prev_lsf_diff[i - 1] <= 0 ) /* safety check in case of bit errors */ - { - w[i] = 0; - st->BER_detect = 1; - } - else - { - w[i] = ( lsf_diff[i] < hBWE_TD->prev_lsf_diff[i - 1] ) ? min( max( 0.8f * lsf_diff[i] / hBWE_TD->prev_lsf_diff[i - 1], 0.5f ), 1.0f ) : min( max( 0.8f * hBWE_TD->prev_lsf_diff[i - 1] / lsf_diff[i], 0.5f ), 1.0f ); - } - } - w[0] = w[1]; - w[LPC_SHB_ORDER - 1] = w[LPC_SHB_ORDER - 2]; - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsp_temp[i] = lsp_shb_1[i] * ( 1.0f - w[i] ) + lsp_shb_2[i] * w[i]; - } - } - else - { - mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); - } - - /* convert from lsp to lsf */ - lsp2lsf( lsp_temp, lsf_shb, LPC_SHB_ORDER, 1 ); - } - - mvr2r( lsf_diff + 1, hBWE_TD->prev_lsf_diff, LPC_SHB_ORDER - 2 ); - hBWE_TD->prev_tilt_para = tilt_para; - } - else - { - mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); - } - - if ( st->extl_brate >= SWB_TBE_2k8 ) - { - /* SHB LSP interpolation */ - ptr_lsp_interp_coef = interpol_frac_shb_flt; - for ( j = 0; j < 4; j++ ) - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsp_temp[i] = lsp_shb_1[i] * ( *ptr_lsp_interp_coef ) + lsp_shb_2[i] * ( *( ptr_lsp_interp_coef + 1 ) ); - } - ptr_lsp_interp_coef += 2; - - /* convert from lsp to lsf */ - lsp2lsf( lsp_temp, lsp_temp, LPC_SHB_ORDER, 1 ); - - /* convert lsf to lpc for SHB synthesis */ - lsp2a( lpc_shb_sf + j * ( LPC_SHB_ORDER + 1 ), lsp_temp, LPC_SHB_ORDER ); - lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; - } - } - - /* Save the SWB LSP values from current frame for interpolation */ - mvr2r( lsp_shb_2, hBWE_TD->swb_lsp_prev_interp, LPC_SHB_ORDER ); - - /* save the shb_ener and mixFactor values */ - hBWE_TD->prev3_shb_ener_sf = hBWE_TD->prev2_shb_ener_sf; - hBWE_TD->prev2_shb_ener_sf = hBWE_TD->prev1_shb_ener_sf; - hBWE_TD->prev1_shb_ener_sf = shb_ener_sf; - hBWE_TD->prev_res_shb_gshape = shb_res_gshape[4]; - hBWE_TD->prev_mixFactors = mixFactors; - - /* SWB CNG/DTX - update memories */ - if ( st->hTdCngDec != NULL ) - { - mvr2r( st->hTdCngDec->lsp_shb_prev, st->hTdCngDec->lsp_shb_prev_prev, LPC_SHB_ORDER ); - mvr2r( lsf_shb, st->hTdCngDec->lsp_shb_prev, LPC_SHB_ORDER ); - } - - /* convert LSPs back into LP coeffs */ - lsp2a( lpc_shb, lsf_shb, LPC_SHB_ORDER ); - lpc_shb[0] = 1.0; - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - vind = (int16_t) ( mixFactors * ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); - } - else - { - vind = (int16_t) ( mixFactors * ( 1 << NUM_BITS_SHB_VF ) ); - } - - /* Determine formant PF strength */ - formant_fac = swb_formant_fac( lpc_shb[1], &hBWE_TD->tilt_mem ); - if ( st->total_brate > ACELP_32k ) - { - for ( j = 0; j < 4; j++ ) - { - mvr2r( lpc_shb, &lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )], LPC_SHB_ORDER + 1 ); - } - } - - /* From low band excitation, generate highband excitation */ - mvr2r( hBWE_TD->state_syn_shbexc, shaped_shb_excitation, L_SHB_LAHEAD ); - GenShapedSHBExcitation( shaped_shb_excitation + L_SHB_LAHEAD, lpc_shb, White_exc16k, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, st->extl, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), lpc_shb_sf, &shb_ener_sf, shb_res_gshape, shb_res_dummy, &vind, formant_fac, hBWE_TD->fb_state_lpc_syn, &( hBWE_TD->fb_tbe_demph ), st->total_brate, st->prev_bfi, st->element_mode, st->flag_ACELP16k, nlExc16k, mixExc16k, st->extl_brate, MSFlag, - NULL, &( hBWE_TD->prev_pow_exc16kWhtnd ), &( hBWE_TD->prev_mix_factor ), NULL, NULL ); - - /* fill-in missing SHB excitation */ - if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) - { - mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, shaped_shb_excitation, L_SHB_LAHEAD ); - } - - if ( hStereoICBWE != NULL ) - { - mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, hStereoICBWE->shbSynthRef, L_FRAME16k ); - } - - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - for ( i = 0; i < L_FRAME16k; i += L_SUBFR16k ) - { - /* TD BWE post-processing */ - PostShortTerm( &shaped_shb_excitation[L_SHB_LAHEAD + i], lpc_shb, &shaped_shb_excitationTemp[i], hBWE_TD->mem_stp_swb, hBWE_TD->ptr_mem_stp_swb, &( hBWE_TD->gain_prec_swb ), hBWE_TD->mem_zero_swb, formant_fac ); - } - - mvr2r( shaped_shb_excitationTemp, &shaped_shb_excitation[L_SHB_LAHEAD], L_FRAME16k ); - prev_pow = sum2_f( shaped_shb_excitation, L_SHB_LAHEAD + 10 ); - curr_pow = sum2_f( shaped_shb_excitation + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); - - if ( st->element_mode > EVS_MONO ) - { - /* prevent too low values of energy */ - prev_pow = max( 0.00001f, prev_pow ); - curr_pow = max( 0.00001f, curr_pow ); - } - if ( voice_factors[0] > 0.75f ) - { - curr_pow *= 0.25; - } - - if ( prev_pow == 0 ) - { - scale = 0; - } - else - { - /* individual sqrt to avoid infinite (nan) value due to acelp_core_dec changes */ - scale = (float) sqrt( curr_pow / prev_pow ); - } - - for ( i = 0; i < L_SHB_LAHEAD; i++ ) - { - shaped_shb_excitation[i] *= scale; - } - for ( ; i < L_SHB_LAHEAD + 10; i++ ) - { - temp = ( i - 19 ) / 10.0f; - shaped_shb_excitation[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); - } - } - else - { - /* reset the PF memories if the PF is not running */ - set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); - hBWE_TD->gain_prec_swb = 1.0f; - set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - } - - /* Update SHB excitation */ - mvr2r( shaped_shb_excitation + L_FRAME16k, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD ); - l_subframe = L_FRAME16k / NUM_SHB_SUBGAINS; - ener = EPSILON; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - ener_tmp[i] = EPSILON; - for ( j = 0; j < l_subframe; j++ ) - { - ener_tmp[i] += shaped_shb_excitation[i * l_subframe + j] * shaped_shb_excitation[i * l_subframe + j] * 0.0125f; - } - ener_tmp[i] = (float) sqrt( ener_tmp[i] ); - ener += ener_tmp[i]; - } - ener /= NUM_SHB_SUBGAINS; - - /* WB/SWB bandwidth switching */ - if ( st->bws_cnt > 0 ) - { - ener *= 0.35f; - - if ( st->tilt_swb > 8 ) - { - st->prev_fractive = 1; - } - - if ( is_fractive == 0 ) - { - if ( st->tilt_wb > 1.0 ) - { - st->tilt_wb = 1.0f; - } - else if ( st->tilt_wb < 0.5 ) - { - st->tilt_wb = 0.5f; - } - - if ( st->prev_fractive == 1 && st->tilt_wb > 0.5 ) - { - st->tilt_wb = 0.5f; - } - } - else - { - if ( st->tilt_wb > 4 ) - { - if ( st->prev_fractive == 0 ) - { - st->tilt_wb = 4; - } - else - { - st->tilt_wb = 8; - } - } - else - { - st->tilt_wb *= 2; - } - } - - if ( ener != 0 ) - { - if ( ener * st->tilt_wb > st->enerLH ) - { - st->tilt_wb = 0.5f * st->enerLH / ener; - } - else if ( ener * st->tilt_wb < 0.05f * st->enerLH && is_fractive == 1 ) - { - st->tilt_wb = 0.25f * st->enerLH / ener; - } - - GainFrame_prevfrm = st->prev_ener_shb / ener; - } - else - { - GainFrame_prevfrm = 0; - } - - if ( is_fractive == 1 ) - { - GainFrame = 8.0f * st->tilt_wb; - } - else - { - GainFrame = 2.0f * st->tilt_wb; - } - - if ( ( is_fractive & st->prev_fractive ) == 1 && GainFrame > GainFrame_prevfrm ) - { - GainFrame = 0.2f * GainFrame + 0.8f * GainFrame_prevfrm; - } - else - { - if ( ( st->prev_enerLH < 2.0f * st->enerLH && st->prev_enerLH > 0.5f * st->enerLH ) && ( st->prev_enerLL < 2.0f * st->enerLL && st->prev_enerLL > 0.5f * st->enerLL ) && ( is_fractive ^ st->prev_fractive ) == 0 ) - { - GainFrame = 0.5f * GainFrame + 0.5f * GainFrame_prevfrm; - } - else - { - if ( is_fractive == 0 && st->prev_fractive == 1 ) - { - GainFrame = ( 1.0f - 0.1f * GainFrame ) * GainFrame + 0.1f * GainFrame * GainFrame_prevfrm; - } - else - { - GainFrame = 0.5f * GainFrame + 0.5f * GainFrame_prevfrm; - } - } - } - - GainFrame *= ( (float) N_WS2N_FRAMES - (float) st->bws_cnt ) / (float) N_WS2N_FRAMES; - } - else - { - if ( st->bws_cnt1 > 0 ) - { - GainFrame *= (float) st->bws_cnt1 / (float) N_WS2N_FRAMES; - } - - if ( st->nbLostCmpt == 1 ) - { - prev_ener_ratio = st->prev_ener_shb / ener; - - if ( st->clas_dec != UNVOICED_CLAS && st->clas_dec != UNVOICED_TRANSITION && hBWE_TD->tilt_swb_fec < 8.0 && - ( ( st->enerLL > 0.5f * st->prev_enerLL && st->enerLL < 2.0f * st->prev_enerLL ) || ( st->enerLH > 0.5f * st->prev_enerLH && st->enerLH < 2.0f * st->prev_enerLH ) ) ) - { - if ( prev_ener_ratio > 4.0f * GainFrame ) - { - GainFrame = 0.4f * prev_ener_ratio + 0.6f * GainFrame; - } - else if ( prev_ener_ratio > 2.0f * GainFrame ) - { - GainFrame = 0.8f * prev_ener_ratio + 0.2f * GainFrame; - } - else - { - GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; - } - - if ( tilt_swb_fec > hBWE_TD->tilt_swb_fec ) - { - GainFrame *= hBWE_TD->tilt_swb_fec > 0 ? ( min( 5.0f, tilt_swb_fec / hBWE_TD->tilt_swb_fec ) ) : 1.0f; - } - } - else if ( ( st->clas_dec != UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 8.0 ) && prev_ener_ratio > 4.0f * GainFrame && ( st->enerLL > 0.5f * st->prev_enerLL || st->enerLH > 0.5f * st->prev_enerLH ) ) - { - GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; - } - } - else if ( st->nbLostCmpt > 1 ) - { - prev_ener_ratio = st->prev_ener_shb / ener; - if ( ( prev_ener_ratio > 4.0 * GainFrame ) && ( ( st->codec_mode == MODE1 && st->enerLL > st->prev_enerLL && st->enerLH > st->prev_enerLH ) || st->codec_mode == MODE2 ) ) - { - if ( tilt_swb_fec > 10.0f && hBWE_TD->tilt_swb_fec > 10.0f ) - { - GainFrame = min( ( prev_ener_ratio * 0.8f + GainFrame * 0.2f ), 4.0f * GainFrame ); - } - else - { - GainFrame = min( ( prev_ener_ratio * 0.5f + GainFrame * 0.5f ), 4.0f * GainFrame ); - } - } - else if ( ( prev_ener_ratio > GainFrame ) && ( ( st->codec_mode == MODE1 && st->enerLL > st->prev_enerLL && st->enerLH > st->prev_enerLH ) || st->codec_mode == MODE2 ) ) - { - if ( tilt_swb_fec > 10.0f && hBWE_TD->tilt_swb_fec > 10.0f ) - { - GainFrame = 0.5f * prev_ener_ratio + 0.5f * GainFrame; - } - else - { - GainFrame = 0.2f * prev_ener_ratio + 0.8f * GainFrame; - } - } - } - } - - st->prev_fractive = is_fractive; - - /* Adjust the subframe and frame gain of the synthesized shb signal */ - /* Scale the shaped excitation */ - if ( st->L_frame == L_FRAME ) - { - pitch = 0.25f * sum_f( pitch_buf, 4 ); - } - else - { - pitch = 0.2f * sum_f( pitch_buf, 5 ); - } - - if ( ( ( st->extl_brate >= SWB_TBE_2k8 && st->prev_coder_type == st->coder_type && st->coder_type != UNVOICED ) || ( st->extl_brate < SWB_TBE_2k8 && ( st->prev_coder_type == st->coder_type || ( st->prev_coder_type == VOICED && st->coder_type == GENERIC ) || ( st->prev_coder_type == GENERIC && st->coder_type == VOICED ) ) ) ) && pitch > 70 && st->extl < FB_TBE && st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape_tmp[i] = GainShape[i * 4]; - } - - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - if ( ener_tmp[i] * GainShape_tmp[i] > hBWE_TD->prev_ener * hBWE_TD->prev_GainShape ) - { - GainShape_tmp[i] = 0.5f * ( hBWE_TD->prev_ener * hBWE_TD->prev_GainShape / ener_tmp[i] + GainShape_tmp[i] ); - } - hBWE_TD->prev_ener = ener_tmp[i]; - hBWE_TD->prev_GainShape = GainShape_tmp[i]; - } - - for ( i = 0; i < NUM_SHB_SUBFR; i++ ) - { - GainShape[i] = GainShape_tmp[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; - } - } - - /* Gain shape smoothing after quantization */ - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape_tmp[i] = GainShape[i * NUM_SHB_SUBGAINS]; - } - - lls_interp_n( GainShape_tmp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); - - if ( vind >= 6 && fabs( GainShape_tilt ) < 0.12f ) - { - feedback = 0.3f; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape[i] = ( 1 - feedback ) * GainShape[i * NUM_SHB_SUBGAINS] + feedback * GainShape_tmp[i]; - } - - for ( i = NUM_SHB_SUBFR - 1; i > 0; i-- ) - { - GainShape[i] = GainShape[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; - } - } - } - - /* fil-in missing memory */ - if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) - { - for ( i = 0; i < L_SHB_LAHEAD; i++ ) - { - hBWE_TD->syn_overlap[i] = shaped_shb_excitation[i] * subwin_shb[L_SHB_LAHEAD - i]; - hBWE_TD->syn_overlap[i] *= window_shb[L_SHB_LAHEAD - 1 - i] * GainFrame; - } - } - - ScaleShapedSHB( SHB_OVERLAP_LEN, shaped_shb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_shb, subwin_shb ); - - if ( hStereoICBWE != NULL ) - { - mvr2r( lpc_shb, hStereoICBWE->lpSHBRef, LPC_SHB_ORDER + 1 ); - mvr2r( GainShape, hStereoICBWE->gshapeRef, NUM_SHB_SUBFR ); - hStereoICBWE->gFrameRef = GainFrame; - - mvr2r( shaped_shb_excitation, hStereoICBWE->shbSynthRef, L_FRAME16k ); - } - - curr_frame_pow = sum2_f( shaped_shb_excitation, L_FRAME16k ) + 0.001f; - curr_frame_pow = min( curr_frame_pow, FLT_MAX ); - - if ( !st->bfi && ( st->prev_bfi || st->prev_use_partial_copy ) ) - { - if ( ( curr_frame_pow > 2.0f * hBWE_TD->prev_swb_bwe_frame_pow ) && - ( curr_frame_pow < 30.0f * hBWE_TD->prev_swb_bwe_frame_pow ) && - st->prev_coder_type == UNVOICED ) - { - scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); - if ( curr_frame_pow == 0 ) - { - scale = 0; - } - temp = (float) pow( scale, 0.125f ); - } - else - { - scale = 1.0f; - temp = 1.0f; - } - - for ( j = 0; j < 8; j++ ) - { - GainShape[2 * j] *= scale; - GainShape[2 * j + 1] *= scale; - for ( i = 0; i < L_FRAME16k / 8; i++ ) - { - shaped_shb_excitation[i + j * L_FRAME16k / 8] *= scale; - } - - scale /= temp; - } - } - - /* adjust the FEC frame energy */ - if ( st->bfi ) - { - scale = 1.0f; - temp = 1.0f; - if ( st->nbLostCmpt == 1 ) - { - if ( curr_frame_pow > hBWE_TD->prev_swb_bwe_frame_pow && st->prev_coder_type != UNVOICED && st->last_good != UNVOICED_CLAS ) - { - scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); - if ( curr_frame_pow == 0 ) - { - scale = 0; - } - temp = (float) pow( scale, 0.125f ); - } - else if ( curr_frame_pow < 0.5f * hBWE_TD->prev_swb_bwe_frame_pow && st->nbLostCmpt == 1 && ( st->enerLL > 0.5 * st->prev_enerLL || st->enerLH > 0.5 * st->prev_enerLH ) && ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 5.0f ) ) - { - scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); - if ( curr_frame_pow == 0 ) - { - scale = 0; - } - temp = (float) pow( scale, 0.125f ); - } - } - else if ( st->nbLostCmpt > 1 ) - { - if ( curr_frame_pow > hBWE_TD->prev_swb_bwe_frame_pow ) - { - scale = (float) sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ); - if ( curr_frame_pow == 0 ) - { - scale = 0; - } - temp = (float) pow( scale, 0.125f ); - } - else if ( curr_frame_pow < 0.5f * hBWE_TD->prev_swb_bwe_frame_pow && ( st->enerLL > 0.5 * st->prev_enerLL || st->enerLH > 0.5 * st->prev_enerLH ) && ( st->prev_coder_type == UNVOICED || st->last_good == UNVOICED_CLAS || hBWE_TD->tilt_swb_fec > 5.0f ) ) - { - scale = (float) min( 2.0f, sqrt( hBWE_TD->prev_swb_bwe_frame_pow / curr_frame_pow ) ); - if ( curr_frame_pow == 0 ) - { - scale = 0; - } - temp = (float) pow( scale, 0.125f ); - } - } - - for ( j = 0; j < 8; j++ ) - { - GainShape[2 * j] *= scale; - GainShape[2 * j + 1] *= scale; - for ( i = 0; i < L_FRAME16k / 8; i++ ) - { - shaped_shb_excitation[i + j * L_FRAME16k / 8] *= scale; - } - - scale /= temp; - } - } - - hBWE_TD->prev_swb_bwe_frame_pow = curr_frame_pow; - - st->prev_ener_shb = EPSILON; - for ( i = 0; i < L_FRAME16k; i++ ) - { - st->prev_ener_shb += shaped_shb_excitation[i] * shaped_shb_excitation[i]; - } - st->prev_ener_shb = (float) sqrt( st->prev_ener_shb / L_FRAME16k ); - - if ( st->hBWE_FD != NULL ) - { - for ( i = 0; i < SWB_FENV; i++ ) - { - st->hBWE_FD->prev_SWB_fenv[i] = (float) sqrt( curr_frame_pow / L_FRAME16k ); - } - } - - /* generate 32kHz SHB synthesis from 12.8(16)kHz signal */ - GenSHBSynth( shaped_shb_excitation, error, hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, st->L_frame, &( hBWE_TD->syn_dm_phase ) ); - - mvr2r( error + L_FRAME32k - L_SHB_TRANSITION_LENGTH, hBWE_TD->old_tbe_synth, L_SHB_TRANSITION_LENGTH ); - - /* resample SHB synthesis (if needed) and scale down */ - synth_scale = ( st->codec_mode == MODE1 ) ? 0.9f : 1.f; - - if ( st->output_Fs == 48000 ) - { - if ( st->extl == FB_TBE ) - { - for ( i = 0; i < L_FRAME16k; i++ ) - { - White_exc16k[i] *= GainFrame * GainShape[NUM_SHB_SUBFR * i / L_FRAME16k]; - } - } - - for ( i = 0; i < L_FRAME32k; i++ ) - { - error[i] *= synth_scale; - } - - interpolate_3_over_2_allpass( error, L_FRAME32k, synth, hBWE_TD->int_3_over_2_tbemem_dec ); - } - else if ( st->output_Fs == 32000 ) - { - for ( i = 0; i < L_FRAME32k; i++ ) - { - synth[i] = synth_scale * error[i]; - } - } - else if ( st->output_Fs == 16000 ) - { - for ( i = 0; i < L_FRAME32k; i++ ) - { - error[i] *= synth_scale; - } - - Decimate_allpass_steep( error, hBWE_TD->mem_resamp_HB_32k, L_FRAME32k, synth ); - } - - /* Update previous frame parameters for FEC */ - mvr2r( lsf_shb, hBWE_TD->lsp_prevfrm, LPC_SHB_ORDER ); - if ( st->codec_mode == MODE1 ) - { - hBWE_TD->GainFrame_prevfrm = GainFrame; - hBWE_TD->tilt_swb_fec = tilt_swb_fec; - - if ( !st->bfi ) - { - hBWE_TD->GainAttn = 1.0f; - } - } - else - { - if ( !st->bfi ) - { - hBWE_TD->tilt_swb_fec = tilt_swb_fec; - hBWE_TD->GainFrame_prevfrm = GainFrame; /* gain locking on lost frame */ - hBWE_TD->GainAttn = 1.0f; - } - } - hBWE_TD->prev_ener = ener_tmp[NUM_SHB_SUBGAINS - 1]; - hBWE_TD->prev_GainShape = GainShape[NUM_SHB_SUBFR - 1]; - - return; -} -#endif -/*-------------------------------------------------------------------* - * Dequant_lower_LSF() - * - * Dequantized the lower LSFs - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void Dequant_lower_LSF( - const int16_t lsf_idx[], /* i : LSF indices */ - float lsf_q[] /* o : Quantized LSFs */ -) -{ - int16_t i; - - lsf_q[0] = lsf_q_cb[0][lsf_idx[0]]; - for ( i = 1; i < NUM_Q_LSF; i++ ) - { - lsf_q[i] = lsf_q_cb[i][lsf_idx[i]] + lsf_q[i - 1]; - } - - return; -} -#endif - -/*-------------------------------------------------------------------* - * Map_higher_LSF() - * - * Map the higher LSFs from the lower LSFs - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void Map_higher_LSF( - float lsf_q[], /* i/o: Quantized lower LSFs */ - const float m, /* i : Mirroring point */ - const float grid_in[] /* i : Input LSF smoohthing grid */ -) -{ - float lsf_map[NUM_MAP_LSF]; - float grid[NUM_MAP_LSF]; - float last_q_lsf; - float lsf_smooth[NUM_MAP_LSF]; - float offset; - int16_t i; - float scale; - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_map[i] = 2 * m - lsf_q[NUM_MAP_LSF - 1 - i]; - } - - if ( m > MAX_LSF / 2 ) - { - offset = lsf_map[0]; - scale = ( MAX_LSF - m ) / m; - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_map[i] = ( lsf_map[i] - offset ) * scale + offset; - } - } - - last_q_lsf = lsf_q[NUM_Q_LSF - 1]; - scale = MAX_LSF - last_q_lsf; - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - grid[i] = grid_in[i] * scale + last_q_lsf; - } - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_smooth[i] = ( 1 - grid_smoothing[i] ) * lsf_map[i] + grid_smoothing[i] * grid[i]; - } - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_q[NUM_Q_LSF + i] = lsf_smooth[i]; - } - - return; -} -#endif - -/*-------------------------------------------------------------------* - * Map_higher_LSF() - * - * Map the higher LSFs from the lower LSFs - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void Dequant_mirror_point( - const float lsf_q[], /* i/o: Quantized lower LSFs */ - const int16_t m_idx, /* i : Mirror point index */ - float *m /* i : Mirroring point */ -) -{ - *m = mirror_point_q_cb[m_idx] + lsf_q[NUM_Q_LSF - 1]; - - return; -} -#endif - -/*-------------------------------------------------------------------* - * dequantizeSHBparams() - * - * Dequantize super highband spectral envolope, temporal gains and frame gain - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void dequantizeSHBparams( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t extl, /* i : extension layer */ - int32_t extl_brate, /* i : extensiuon layer bitrate */ - float *Q_lsf, /* o : SHB LSF from de-quantization */ - float *Q_subgain, /* o : SHB subframe gains from de-quantization */ - float *Q_framegrain, /* o : SHB frame gain from de-quantization */ - int16_t *uv_flag, /* o : unvoiced flag */ - float *Q_shb_ener_sf, - float *Q_shb_res_gshape, - float *Q_mixFactors, - int16_t *MSFlag ) -{ - int16_t i, j, idxLSF, idxSubGain, idxFrameGain; - TD_BWE_DEC_HANDLE hBWE_TD; - float Q_combined_gains[NUM_SHB_SUBFR / 4]; - float lsf_q[LPC_SHB_ORDER]; - int16_t lsf_idx[NUM_Q_LSF]; - int16_t m_idx, grid_idx; - float m; - int16_t idx_shb_fr_gain, idx_res_gs[5], idx_mixFac; - - UWord32 Idx_lvq; - int16_t Idx, Idx_pred; - int16_t num_bits_lvq; - float out[LATTICE_DIM]; - const float *cb_stage; - int16_t predictor_bits; - int16_t nbits = NUM_BITS_SHB_MSLVQ; - - hBWE_TD = st->hBWE_TD; - - /* LSFs */ - if ( extl == WB_TBE ) - { - if ( extl_brate == WB_TBE_0k35 ) - { - if ( st->codec_mode == MODE2 ) - { - idxFrameGain = hBWE_TD->gFrame_WB; - idxLSF = hBWE_TD->lsf_WB; - } - else - { - idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FrameGain_LBR_WB ); - idxLSF = get_next_indice( st, NUM_BITS_LBR_WB_LSF ); - } - - mvr2r( lbr_wb_bwe_lsfvq_cbook_2bit + idxLSF * LPC_SHB_ORDER_LBR_WB, Q_lsf, LPC_SHB_ORDER_LBR_WB ); - set_f( Q_subgain, RECIP_ROOT_EIGHT, NUM_SHB_SUBFR / 2 ); - mvr2r( SHBCB_FrameGain16 + idxFrameGain, Q_framegrain, 1 ); - } - else - { - /* read the information about UNVOICED frame */ - *uv_flag = get_next_indice( st, 1 ); - - idxSubGain = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); - idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FrameGain ); - idxLSF = get_next_indice( st, NUM_BITS_WB_LSF ); - - mvr2r( wb_bwe_lsfvq_cbook_8bit + idxLSF * LPC_SHB_ORDER_WB, Q_lsf, LPC_SHB_ORDER_WB ); - mvr2r( HBCB_SubGain5bit + idxSubGain * NUM_SHB_SUBFR / 4, Q_combined_gains, NUM_SHB_SUBFR / 4 ); - - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - Q_combined_gains[i] = (float) pow( 10.0f, Q_combined_gains[i] / 20.0f ); - } - - for ( i = 0; i < NUM_SHB_SUBFR / 2; i += 2 ) - { - Q_subgain[i] = Q_combined_gains[i / 2]; - Q_subgain[i + 1] = Q_combined_gains[i / 2]; - } - - /* frame gain */ - mvr2r( SHBCB_FrameGain64 + idxFrameGain, Q_framegrain, 1 ); - } - } - else - { - if ( st->codec_mode == MODE2 ) - { - idxSubGain = hBWE_TD->idxSubGains; - idxFrameGain = hBWE_TD->idxFrameGain; - } - else - { - idxSubGain = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); - if ( st->extl_brate == SWB_TBE_1k75 ) - { - idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN_1k75 ); - } - else - { - idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN ); - } - } - - /* Multi Source Flag */ - if ( st->element_mode >= IVAS_CPE_DFT && !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) - { - *MSFlag = get_next_indice( st, STEREO_ICBWE_MSFLAG_BITS ); - } - else - { - *MSFlag = 0; - } - - if ( st->extl_brate >= SWB_TBE_2k8 ) - { - if ( st->codec_mode == MODE2 ) - { - idx_shb_fr_gain = hBWE_TD->idx_shb_fr_gain; - } - else - { - idx_shb_fr_gain = get_next_indice( st, NUM_BITS_SHB_ENER_SF ); - } - *Q_shb_ener_sf = usdequant( idx_shb_fr_gain, 0, 0.042f ); - *Q_shb_ener_sf = (float) pow( 10.0, *Q_shb_ener_sf ); - - for ( i = 0; i < 5; i++ ) - { - if ( st->codec_mode == MODE2 ) - { - idx_res_gs[i] = hBWE_TD->idx_res_gs[i]; - } - else - { - idx_res_gs[i] = get_next_indice( st, NUM_BITS_SHB_RES_GS ); - } - Q_shb_res_gshape[i] = usdequant( idx_res_gs[i], 0.125f, 0.125f ); - } - - if ( st->codec_mode == MODE2 ) - { - idx_mixFac = hBWE_TD->idx_mixFac; - } - else - { - idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); - } - *Q_mixFactors = usdequant( idx_mixFac, 0.125f, 0.125f ); - } - else - { - *Q_shb_ener_sf = 0; - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); - *Q_mixFactors = usdequant( idx_mixFac, 0.0f, 1.0f / ( ( 1 << NUM_BITS_SHB_VF ) - 1 ) ); - } - else - { - *Q_mixFactors = 0; - } - set_f( Q_shb_res_gshape, 0, 5 ); - } - - if ( ( st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) && st->codec_mode == MODE1 ) - { - set_s( lsf_idx, 0, 5 ); - lsf_idx[0] = get_next_indice( st, 8 ); - grid_idx = 0; - m_idx = 0; - - mvr2r( swb_tbe_lsfvq_cbook_8b_flt + lsf_idx[0] * LPC_SHB_ORDER, Q_lsf, LPC_SHB_ORDER ); - } - else if ( st->rf_flag == 0 && !( ( st->element_mode == EVS_MONO && st->total_brate == ACELP_9k60 ) || ( st->element_mode == EVS_MONO && ( st->total_brate == 0 ) && ( ( st->last_total_brate == ACELP_9k60 ) || ( st->last_total_brate == ACELP_13k20 && st->rf_flag_last ) ) ) ) ) - { - /* LSFs */ - if ( st->extl_brate == SWB_TBE_1k75 ) - { - /* read multi-stage LVQ quantizer */ - if ( nbits >= 19 ) - { - cb_stage = cb_LSF_BWE[0]; - } - else - { - cb_stage = cb_LSF_BWE[1]; - } - - set_zero( lsf_q, LPC_SHB_ORDER ); - - /* VQ part */ - num_bits_lvq = config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3]; - Idx = get_next_indice( st, num_bits_lvq ); - v_add( lsf_q, cb_stage + Idx * 6, lsf_q, 6 ); - - /* MSLVQ part */ - num_bits_lvq = nbits - num_bits_lvq - config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3 + 2]; - predictor_bits = config_LSF_BWE[( NUM_BITS_SHB_MSLVQ - nbits ) * 3 + 2]; - Idx_pred = 0; - - if ( num_bits_lvq == 16 ) - { - /* MSLVQ part */ - Idx_lvq = get_next_indice( st, num_bits_lvq - 1 ) + ( ( get_next_indice( st, 1 ) ) << 15 ); - deindex_lvq_SHB( Idx_lvq, out, num_bits_lvq, 0 ); - } - else - { - /* MSLVQ part */ - Idx_lvq = get_next_indice( st, num_bits_lvq ); - deindex_lvq_SHB( Idx_lvq, out, num_bits_lvq, ( nbits < 19 ) ); - } - - /* mvr2r( mean_lsf, Q_lsfs, LPC_SHB_ORDER ); */ - v_add( lsf_q, out, lsf_q, LATTICE_DIM ); /* quantized mean removed data for first 8 dim*/ - - /* predict last 2 components */ - if ( predictor_bits == 0 ) - { - lsf_q[LATTICE_DIM] = dotp( lsf_q, LastCoefPred_0bit, LATTICE_DIM ); - lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_0bit[LATTICE_DIM + 1], LATTICE_DIM ); - } - else - { - Idx_pred = get_next_indice( st, 1 ); - - lsf_q[LATTICE_DIM] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * Idx_pred], LATTICE_DIM ); - lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * Idx_pred + LATTICE_DIM + 1], LATTICE_DIM ); - } - - if ( nbits < NUM_BITS_SHB_MSLVQ ) - { - Idx_pred = get_next_indice( st, NUM_BITS_SHB_MSLVQ - nbits ); - } - - v_add( SHB_LSF_mean, lsf_q, lsf_q, LPC_SHB_ORDER ); - v_sort_float( lsf_q, 0, LPC_SHB_ORDER - 1 ); - } - else - { - if ( extl_brate == SWB_TBE_1k6 || extl_brate == FB_TBE_1k8 || extl_brate == SWB_TBE_2k8 || extl_brate == FB_TBE_3k0 ) - { - for ( i = 0; i < NUM_Q_LSF; i++ ) - { - if ( st->codec_mode == MODE2 ) - { - lsf_idx[i] = hBWE_TD->lsf_idx[i]; - } - else - { - lsf_idx[i] = get_next_indice( st, lsf_q_num_bits[i] ); - } - } - } - - Dequant_lower_LSF( lsf_idx, lsf_q ); - - if ( st->codec_mode == MODE2 ) - { - m_idx = hBWE_TD->m_idx; - grid_idx = hBWE_TD->grid_idx; - } - else - { - m_idx = get_next_indice( st, MIRROR_POINT_BITS ); - grid_idx = get_next_indice( st, NUM_LSF_GRID_BITS ); - } - - Dequant_mirror_point( lsf_q, m_idx, &m ); - - /* safety check in case of bit errors */ - if ( m > MAX_LSF ) - { - st->BER_detect = 1; - m = MAX_LSF; - } - - Map_higher_LSF( lsf_q, m, lsf_grid[grid_idx] ); - } - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - /* safety check in case of bit errors */ - if ( lsf_q[LPC_SHB_ORDER - 1 - i] > MAX_LSF ) - { - st->BER_detect = 1; - lsf_q[LPC_SHB_ORDER - 1 - i] = MAX_LSF; - } - Q_lsf[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; - } - } - else - { - set_s( lsf_idx, 0, 5 ); - mvs2s( hBWE_TD->lsf_idx, lsf_idx, 5 ); - grid_idx = 0; - m_idx = 0; - mvr2r( swb_tbe_lsfvq_cbook_8b_flt + lsf_idx[0] * LPC_SHB_ORDER, Q_lsf, LPC_SHB_ORDER ); - } - - space_lsfs( Q_lsf, LPC_SHB_ORDER ); - - /* Dequantize subgain indices */ - j = idxSubGain * NUM_SHB_SUBGAINS; - - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - Q_subgain[i] = (float) pow( 10.0, SHBCB_SubGain5bit[j++] ); - } - - for ( i = NUM_SHB_SUBFR - 1; i >= 0; i-- ) - { - Q_subgain[i] = Q_subgain[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; - } - - /* Frame gain */ - if ( st->extl_brate == SWB_TBE_1k75 ) - { - *Q_framegrain = usdequant( idxFrameGain, SHB_GAIN_QLOW_1k75, SHB_GAIN_QDELTA_1k75 ); - } - else - { - *Q_framegrain = usdequant( idxFrameGain, SHB_GAIN_QLOW, SHB_GAIN_QDELTA ); - } - - *Q_framegrain = (float) pow( 10.0, *Q_framegrain ); - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * fb_tbe_dec() - * - * FB TBE decoder, 14(resp. 15.5) - 20 kHz band decoding module - *-------------------------------------------------------------------*/ - -void fb_tbe_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const float fb_exc[], /* i : FB excitation from the SWB part */ - float *hb_synth, /* o : high-band synthesis */ - float *fb_synth_ref, /* o : high-band synthesis 16-20 kHz */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i; - TD_BWE_DEC_HANDLE hBWE_TD; - float ratio_float = 0, fb_exc_energy = 0; - float fb_synth[L_FRAME48k]; - - hBWE_TD = st->hBWE_TD; - - if ( output_frame == L_FRAME48k ) - { - /* decode FB slope information */ - if ( st->extl == FB_TBE && !st->bfi ) - { - if ( st->codec_mode == MODE2 ) - { - i = hBWE_TD->idxGain; - } - else - { - i = get_next_indice( st, NUM_BITS_FB_FRAMEGAIN_TBE ); - } - ratio_float = (float) ( 1 << i ); - } - else if ( st->extl == FB_TBE && st->bfi ) - { - ratio_float = hBWE_TD->prev_fbbwe_ratio; - } - } - else - { - /* update the position in the bitstream - needed in IVAS */ - if ( !st->bfi ) - { - st->next_bit_pos += NUM_BITS_FB_FRAMEGAIN; - } - - return; - } - - fb_exc_energy = sum2_f( fb_exc, L_FRAME16k ); - - /* FB TBE synthesis */ - synthesise_fb_high_band( fb_exc, fb_synth, fb_exc_energy, ratio_float, st->L_frame, st->bfi, &( hBWE_TD->prev_fbbwe_ratio ), hBWE_TD->fbbwe_hpf_mem ); - - if ( st->element_mode >= IVAS_CPE_DFT && st->idchan == 0 ) - { - mvr2r( fb_synth, fb_synth_ref, L_FRAME48k ); - } - - /* add the fb_synth component to the hb_synth component */ - v_add( hb_synth, fb_synth, hb_synth, L_FRAME48k ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * tbe_read_bitstream() - * - * Read TBE bitstream and populate the parameters for TD-BWE decoder. - *---------------------------------------------------------------------*/ - -void tbe_read_bitstream( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - int16_t i; - TD_BWE_DEC_HANDLE hBWE_TD; - - hBWE_TD = st->hBWE_TD; - - if ( ( st->rf_flag || st->total_brate == ACELP_9k60 ) && st->bwidth == WB ) - { - /* WB LSF */ - hBWE_TD->lsf_WB = get_next_indice( st, NUM_BITS_LBR_WB_LSF ); - - /* WB frame gain */ - hBWE_TD->gFrame_WB = get_next_indice( st, NUM_BITS_SHB_FrameGain_LBR_WB ); - } - else if ( st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_32k && ( st->bwidth == SWB || st->bwidth == FB ) ) - { - if ( st->rf_flag == 0 && st->total_brate > ACELP_9k60 ) - { - for ( i = 0; i < NUM_Q_LSF; i++ ) - { - hBWE_TD->lsf_idx[i] = get_next_indice( st, lsf_q_num_bits[i] ); - } - hBWE_TD->m_idx = get_next_indice( st, MIRROR_POINT_BITS ); - hBWE_TD->grid_idx = get_next_indice( st, NUM_LSF_GRID_BITS ); - } - else - { - hBWE_TD->lsf_idx[0] = get_next_indice( st, 8 ); - hBWE_TD->m_idx = 0; - hBWE_TD->grid_idx = 0; - } - - /* shape gains */ - hBWE_TD->idxSubGains = get_next_indice( st, NUM_BITS_SHB_SUBGAINS ); - - /* frame gain */ - hBWE_TD->idxFrameGain = get_next_indice( st, NUM_BITS_SHB_FRAMEGAIN ); - - if ( st->total_brate >= ACELP_24k40 ) - { - /* sub frame energy*/ - hBWE_TD->idx_shb_fr_gain = get_next_indice( st, NUM_BITS_SHB_ENER_SF ); - - /* gain shapes residual */ - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - hBWE_TD->idx_res_gs[i] = get_next_indice( st, NUM_BITS_SHB_RES_GS ); - } - - /* voicing factor */ - hBWE_TD->idx_mixFac = get_next_indice( st, NUM_BITS_SHB_VF ); - } - - if ( st->tec_tfa == 1 ) - { - st->tec_flag = get_next_indice( st, BITS_TEC ); - st->tfa_flag = get_next_indice( st, BITS_TFA ); - - if ( st->tfa_flag && st->tec_flag ) - { - st->tec_flag = 2; - st->tfa_flag = 0; - } - } - else - { - st->tec_flag = 0; - st->tfa_flag = 0; - } - } - - if ( st->bwidth == FB ) - { - hBWE_TD->idxGain = get_next_indice( st, 4 ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * GenTransition() - * - * Generate a highband transition signal from the gain shape overlap - * buffer to fill the gap caused by the delay alignment buffer when - * switching from TBE to IGF - *---------------------------------------------------------------------*/ - -void GenTransition( - TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - float *outputHB, /* o : synthesized HB transitions signal */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t element_mode, /* i : element mode */ - const int16_t L_frame, /* i : ACELP frame length */ - const int16_t rf_flag, /* i : RF flag */ - const int32_t total_brate /* i : total bitrate */ -) -{ - int16_t i, length; - float syn_overlap_32k[2 * SHB_OVERLAP_LEN]; - - /* set targeted length of transition signal */ - length = 2 * NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); - - /* upsample overlap snippet */ - Interpolate_allpass_steep( hBWE_TD->syn_overlap, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, SHB_OVERLAP_LEN, syn_overlap_32k ); - - /* perform spectral flip and downmix with overlap snippet to match HB synth */ - if ( ( element_mode == EVS_MONO && ( rf_flag || total_brate == ACELP_9k60 ) ) || ( element_mode > EVS_MONO && L_frame == L_FRAME ) ) - { - flip_and_downmix_generic( syn_overlap_32k, syn_overlap_32k, 2 * SHB_OVERLAP_LEN, hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_Hilbert_Mem + HILBERT_ORDER1, hBWE_TD->genSHBsynth_Hilbert_Mem + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), &( hBWE_TD->syn_dm_phase ) ); - } - else - { - for ( i = 0; i < 2 * SHB_OVERLAP_LEN; i++ ) - { - syn_overlap_32k[i] = ( ( i % 2 ) == 0 ) ? ( -syn_overlap_32k[i] ) : ( syn_overlap_32k[i] ); - } - } - - /* cross fade of overlap snippet and mirrored HB synth from previous frame */ - for ( i = 0; i < 2 * L_SHB_LAHEAD; i++ ) - { - outputHB[i] = window_shb_32k[i] * hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i] + window_shb_32k[2 * L_SHB_LAHEAD - 1 - i] * syn_overlap_32k[i]; - } - - /* fill transition signal with mirrored HB synth from previous frame to fully fill delay alignment buffer gap */ - for ( ; i < length; i++ ) - { - outputHB[i] = hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i]; - } - - if ( output_Fs == 48000 ) - { - interpolate_3_over_2_allpass( outputHB, length, outputHB, hBWE_TD->int_3_over_2_tbemem_dec ); - } - else if ( output_Fs == 16000 ) - { - Decimate_allpass_steep( outputHB, hBWE_TD->mem_resamp_HB_32k, L_FRAME32k, outputHB ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void GenTransition_fixed( - TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - Word32 *outputHB_fx, /* o : synthesized HB transitions signal : Q11 */ - const Word32 output_Fs, /* i : output sampling rate : Q0 */ - const Word16 element_mode, /* i : element mode : Q0 */ - const Word16 L_frame, /* i : ACELP frame length : Q0 */ - const Word16 rf_flag, /* i : RF flag : Q0 */ - const Word32 total_brate, /* i : total bitrate : Q0 */ - const Word16 prev_Qx ) -{ - Word16 i, length; - - Word32 syn_overlap_32k_fx[2 * SHB_OVERLAP_LEN]; - - /* set targeted length of transition signal */ - length = i_mult( 2, NS2SA_FX2( output_Fs, DELAY_BWE_TOTAL_NS ) ); - - /* upsample overlap snippet */ - Interpolate_allpass_steep_32( hBWE_TD->syn_overlap_fx_32, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local_fx_32, SHB_OVERLAP_LEN, syn_overlap_32k_fx ); - - /* perFORm spectral flip and downmix with overlap snippet to match HB synth */ - test(); - test(); - test(); - test(); - IF( ( ( element_mode == EVS_MONO ) && ( rf_flag || EQ_32( total_brate, ACELP_9k60 ) ) ) || ( ( element_mode > EVS_MONO ) && EQ_16( L_frame, L_FRAME ) ) ) - { - flip_and_downmix_generic_fx_32( syn_overlap_32k_fx, syn_overlap_32k_fx, 2 * SHB_OVERLAP_LEN, hBWE_TD->genSHBsynth_Hilbert_Mem_fx, hBWE_TD->genSHBsynth_Hilbert_Mem_fx + HILBERT_ORDER1, hBWE_TD->genSHBsynth_Hilbert_Mem_fx + ( HILBERT_ORDER1 + 2 * HILBERT_ORDER2 ), &( hBWE_TD->syn_dm_phase ) ); - } - ELSE - { - FOR( i = 0; i < 2 * SHB_OVERLAP_LEN; i++ ) + FOR( i = 0; i < 2 * SHB_OVERLAP_LEN; i++ ) { IF( i % 2 == 0 ) { @@ -4622,67 +2486,6 @@ void GenTransition_fixed( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * GenTransition_WB() - * - * - *---------------------------------------------------------------------*/ - -void GenTransition_WB( - TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - float *outputHB, /* o : synthesized HB transitions signal */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - int16_t i, length; - float speech_buf_16k1[SHB_OVERLAP_LEN], speech_buf_16k2[2 * SHB_OVERLAP_LEN]; - float upsampled_synth[L_FRAME48k]; - - /* set targeted length of transition signal */ - length = 2 * NS2SA( output_Fs, DELAY_BWE_TOTAL_NS ); - - /* upsample overlap snippet */ - Interpolate_allpass_steep( hBWE_TD->syn_overlap, hBWE_TD->state_lsyn_filt_shb, SHB_OVERLAP_LEN / 2, speech_buf_16k1 ); - Interpolate_allpass_steep( speech_buf_16k1, hBWE_TD->state_lsyn_filt_dwn_shb, SHB_OVERLAP_LEN, speech_buf_16k2 ); - - /* perform spectral flip and downmix with overlap snippet to match HB synth */ - for ( i = 0; i < SHB_OVERLAP_LEN; i++ ) - { - speech_buf_16k2[i] = ( ( i % 2 ) == 0 ) ? ( -speech_buf_16k2[i] ) : ( speech_buf_16k2[i] ); - } - - /* cross fade of overlap snippet and mirrored HB synth from previous frame */ - for ( i = 0; i < L_SHB_LAHEAD; i++ ) - { - outputHB[i] = window_shb[i] * hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i] + window_shb[L_SHB_LAHEAD - 1 - i] * speech_buf_16k2[i]; - outputHB[i] *= 0.65f; - } - - /* fill transition signal with mirrored HB synth from previous frame to fully fill delay alignment buffer gap */ - for ( ; i < length; i++ ) - { - outputHB[i] = hBWE_TD->old_tbe_synth[L_SHB_TRANSITION_LENGTH - 1 - i]; - outputHB[i] *= 0.65f; - } - - /* upsampling if necessary */ - if ( output_Fs == 32000 ) - { - Interpolate_allpass_steep( outputHB, hBWE_TD->mem_resamp_HB, L_FRAME16k, upsampled_synth ); - mvr2r( upsampled_synth, outputHB, L_FRAME32k ); - } - else if ( output_Fs == 48000 ) - { - interpolate_3_over_1_allpass( outputHB, L_FRAME16k, upsampled_synth, hBWE_TD->mem_resamp_HB ); - mvr2r( upsampled_synth, outputHB, L_FRAME48k ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void GenTransition_WB_fixed( TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ Word32 *outputHB_fx, /* o : synthesized HB transitions signal : Q11 */ @@ -4748,137 +2551,8 @@ void GenTransition_WB_fixed( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * void TBEreset_dec() - * - * - *---------------------------------------------------------------------*/ - -void TBEreset_dec( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - TD_BWE_DEC_HANDLE hBWE_TD; - - hBWE_TD = st->hBWE_TD; - - if ( st->last_core != ACELP_CORE ) - { - set_f( hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); - hBWE_TD->bwe_non_lin_prev_scale = 0.f; - } - if ( st->bwidth == WB ) - { - wb_tbe_extras_reset( hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - wb_tbe_extras_reset_synth( hBWE_TD->state_lsyn_filt_shb, hBWE_TD->state_lsyn_filt_dwn_shb, hBWE_TD->mem_resamp_HB ); - set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, 7 ); - set_f( hBWE_TD->state_lpc_syn, 0, 10 ); - set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); - set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - set_f( hBWE_TD->mem_csfilt, 0, 2 ); - } - else if ( st->bwidth == SWB || st->bwidth == FB ) - { - swb_tbe_reset( hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, hBWE_TD->syn_overlap, hBWE_TD->state_syn_shbexc, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), hBWE_TD->mem_stp_swb, &( hBWE_TD->gain_prec_swb ) ); - - set_f( hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); - set_f( hBWE_TD->int_3_over_2_tbemem_dec, 0.f, INTERP_3_2_MEM_LEN ); - set_f( hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); - hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; - hBWE_TD->prev_mix_factor = 1.0f; - - swb_tbe_reset_synth( hBWE_TD->genSHBsynth_Hilbert_Mem, hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); - - if ( st->bwidth == FB ) - { - if ( st->hBWE_FD != NULL ) - { - st->hBWE_FD->prev_fb_ener_adjust = 0.0f; - } - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_synth( hBWE_TD->fbbwe_hpf_mem, &hBWE_TD->prev_fbbwe_ratio ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * td_bwe_dec_init() * * Initialize TD BWE state structure at the decoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void td_bwe_dec_init( - TD_BWE_DEC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - const int16_t extl, /* i : BWE extension layer */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - int16_t i; - - /* init. SHB buffers */; - set_f( hBWE_TD->old_bwe_exc, 0.0f, ( PIT16k_MAX * 2 ) ); - hBWE_TD->bwe_seed[0] = 23; /* 1; */ - hBWE_TD->bwe_seed[1] = 59; /* 10000; */ - set_f( hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - hBWE_TD->bwe_non_lin_prev_scale = 0; - - set_f( hBWE_TD->genSHBsynth_Hilbert_Mem, 0.0f, HILBERT_MEM_SIZE ); - set_f( hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local, 0.0f, 2 * ALLPASSSECTIONS_STEEP ); - - hBWE_TD->syn_dm_phase = 0; - hBWE_TD->prev_fbbwe_ratio = 1.0f; - hBWE_TD->prev_wb_bwe_frame_pow = 0.001f; - hBWE_TD->prev_swb_bwe_frame_pow = 0.001f; - - /* reset SHB buffers */ - ResetSHBbuffer_Dec( hBWE_TD, extl ); - - if ( output_Fs == 48000 ) - { - set_f( hBWE_TD->fbbwe_hpf_mem[0], 0, 4 ); - set_f( hBWE_TD->fbbwe_hpf_mem[1], 0, 4 ); - set_f( hBWE_TD->fbbwe_hpf_mem[2], 0, 4 ); - set_f( hBWE_TD->fbbwe_hpf_mem[3], 0, 4 ); - } - - set_f( hBWE_TD->mem_resamp_HB, 0, INTERP_3_1_MEM_LEN ); - set_f( hBWE_TD->mem_resamp_HB_32k, 0, 2 * ALLPASSSECTIONS_STEEP + 1 ); - - hBWE_TD->tilt_mem = 0.0f; - set_f( hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); - hBWE_TD->prev_tilt_para = 0.0f; - set_f( hBWE_TD->cur_sub_Aq, 0.0f, M + 1 ); - set_f( hBWE_TD->int_3_over_2_tbemem_dec, 0.0f, INTERP_3_2_MEM_LEN ); - - /* TD BWE post-processing */ - hBWE_TD->ptr_mem_stp_swb = hBWE_TD->mem_stp_swb + LPC_SHB_ORDER - 1; - set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->swb_lsp_prev_interp[i] = (float) cos( (float) i * EVS_PI / (float) 10.0f ); - } - - hBWE_TD->prev1_shb_ener_sf = 1.0f; - hBWE_TD->prev2_shb_ener_sf = 1.0f; - hBWE_TD->prev3_shb_ener_sf = 1.0f; - hBWE_TD->prev_res_shb_gshape = 0.125f; - hBWE_TD->prev_mixFactors = 0.5f; - hBWE_TD->prev_GainShape = 0.0f; - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0.0f; - - set_f( hBWE_TD->old_hb_synth, 0, L_FRAME48k ); - - hBWE_TD->GainFrame_prevfrm = 0.0f; - - hBWE_TD->prev_ener = 0.0f; - - return; -} -#endif diff --git a/lib_dec/swb_tbe_dec_fx.c b/lib_dec/swb_tbe_dec_fx.c index eab335e4e..54a8127c9 100644 --- a/lib_dec/swb_tbe_dec_fx.c +++ b/lib_dec/swb_tbe_dec_fx.c @@ -10,15 +10,12 @@ #include "rom_dec.h" #include "stl.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------* * Local functions *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void dequantizeSHBparams_fx_9_1( Decoder_State *st_fx, const Word16 extl, Word32 extl_brate, Word16 *Q_lsf, Word16 *Q_subgain, Word32 *Q_framegrain, Word16 *uv_flag, Word32 *Q_shb_ener_sf_32, Word16 *Q_shb_res_gshape, Word16 *Q_mixFactors ); static void find_max_mem_dec( Decoder_State *st_fx, Word16 *n_mem, Word16 *n_mem2, Word16 *n_mem3 ); @@ -5497,5 +5494,3 @@ void td_bwe_dec_init_fx( return; } - -#endif diff --git a/lib_dec/syn_outp.c b/lib_dec/syn_outp.c index 31cd8b109..96ac16dba 100644 --- a/lib_dec/syn_outp.c +++ b/lib_dec/syn_outp.c @@ -47,90 +47,3 @@ * Output synthesis signal with compensation for saturation * returns number of clipped samples *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: number of clipped samples */ -uint32_t syn_output( - float *synth, /* i/o: float synthesis signal */ - const int16_t output_frame, /* i : output frame length */ - int16_t *synth_out /* o : integer 16 bits synthesis signal */ -) -{ - /*-----------------------------------------------------------------* - * float to integer conversion with saturation control - *-----------------------------------------------------------------*/ - - /* integer conversion */ - return mvr2s( synth, synth_out, output_frame ); -} - - -/*-------------------------------------------------------------------* - * AGC_dec() - * - * In-place saturation control (Automatic Gain Control) - *-------------------------------------------------------------------*/ - -void AGC_dec( - float x[], /* i/o: input/output vector */ - float mem[], /* i/o: mem[2] should be init to [0,0] */ - const int16_t n /* i : vector size */ -) -{ - int16_t i; - float fac, prev, tmp, frame_fac, max_val; - - /*-----------------------------------------------------------------* - * calculate AGC factor to avoid saturation - *-----------------------------------------------------------------*/ - - max_val = 0.0f; - - for ( i = 0; i < n; i++ ) - { - tmp = (float) fabs( x[i] ); - if ( tmp > max_val ) - { - max_val = tmp; - } - } - - frame_fac = 0.0f; - if ( max_val > 30000.0f ) - { - frame_fac = 0.5f - ( 15000.0f / max_val ); - } - - fac = mem[0]; - prev = mem[1]; - - /*-----------------------------------------------------------------* - * AGC - *-----------------------------------------------------------------*/ - - for ( i = 0; i < n; i++ ) - { - /* update AGC factor (slowly) */ - fac = 0.99f * fac + 0.01f * frame_fac; - - /* convert float to integer with AGC */ - tmp = ( 1.0f - fac ) * x[i] - fac * prev; - prev = x[i]; - - if ( tmp > MAX16B_FLT ) - { - tmp = MAX16B_FLT; - } - else if ( tmp < MIN16B_FLT ) - { - tmp = MIN16B_FLT; - } - - x[i] = (int16_t) floor( tmp + 0.5f ); - } - - mem[0] = fac; - mem[1] = prev; - - return; -} -#endif diff --git a/lib_dec/syn_outp_fx.c b/lib_dec/syn_outp_fx.c index 0d84c0c88..0d70524be 100644 --- a/lib_dec/syn_outp_fx.c +++ b/lib_dec/syn_outp_fx.c @@ -7,7 +7,6 @@ #include "cnst.h" /* Common constants */ #include "prot_fx.h" /* Debug prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * syn_output_fx() * @@ -131,5 +130,3 @@ void unscale_AGC( mem[1] = shr( x[i - 1], 1 ); move16(); } - -#endif diff --git a/lib_dec/tcq_core_dec.c b/lib_dec/tcq_core_dec.c index 78a0356c4..403c5db5b 100644 --- a/lib_dec/tcq_core_dec.c +++ b/lib_dec/tcq_core_dec.c @@ -42,434 +42,3 @@ #include "basop_util.h" #include "basop_proto_func.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * tcq_core_LR_enc() - * - * Main Generic Audio Decoder Routine for LR-MDCT - *---------------------------------------------------------------------*/ - -void tcq_core_LR_dec( - Decoder_State *st, - int32_t *inp_vector, - const int16_t bit_budget, - const int16_t BANDS, - const int16_t *band_start, - const int16_t *band_width, - Word32 *Rk_fx, - int16_t *npulses, - int16_t *k_sort, - const int16_t *p2a_flags, - const int16_t p2a_bands, - const int16_t *last_bitalloc, - const int16_t input_frame, - const int16_t adjustFlag, - const int16_t *is_transient ) -{ - int16_t i, j, k; - float Rk_sort[NB_SFM]; - int16_t flag_wbnb = 0; - int16_t USQ_TCQ[NB_SFM]; /* TCQ is selected by default*/ - int16_t nb_bytes, pulsesnum, nz; - int32_t positions[L_FRAME32k]; - int16_t k_num[2]; - ARCODEC ardec, *pardec; - TCQ_BITSTREAM bs, *pbs; - - int16_t nzbands = 0; - int16_t lsbtcq_bits = TCQ_AMP; - int16_t tcq_arbits = 2; - - /* LSB TCQ variables*/ - int16_t dpath[280]; - int16_t bcount = 0; - float mbuffer[560]; - - Word32 leftbits = 0; - Word32 sepbits = 0; - Word32 divider = 0; - - /*Word32 Rk_fx[NB_SFM];*/ /* Q16 */ - Word32 Rk_sort_fx[NB_SFM]; /* Q16 */ - Word32 bsub_fx = 0; - - Word16 nzb = 0; - Word32 delta_fx; - Word32 surplus_fx; - Word32 bit_surplus_fx[2]; - - /* initialization */ - set_s( dpath, 0, 280 ); - set_f( mbuffer, 0.f, 560 ); - set_f( Rk_sort, 0.f, NB_SFM ); - set_s( USQ_TCQ, 0, NB_SFM ); - set_l( positions, 0, L_FRAME32k ); - - if ( input_frame <= L_FRAME16k && adjustFlag == 0 && *is_transient == 0 ) - { - flag_wbnb = 1; - lsbtcq_bits = 0; - tcq_arbits = 0; - } - - pardec = &ardec; - pbs = &bs; - pbs->curPos = 7; - pbs->numbits = 0; - pbs->numByte = 0; - - /* Bits distribution analysis*/ - for ( i = 0; i < BANDS; i++ ) - { - if ( L_sub( ar_div_ivas( Rk_fx[i], band_width[i] ), 49152 ) >= 0 ) - { - /* USQ used for high importance bands*/ - USQ_TCQ[i] = 1; - } - else - { - /* TCQ used for usual bands*/ - USQ_TCQ[i] = 0; - } - if ( Rk_fx[i] > 0.0f ) - { - nzbands++; - } - } - - for ( j = 0; j < BANDS; j++ ) - { - if ( Rk_fx[j] > 0.0f ) - { - nzb++; - } - } - -#define WMC_TOOL_SKIP - bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); - IF( bsub_fx > 0 ) - { - bsub_fx = L_add( bsub_fx, 2048 ); - } - for ( j = BANDS - 1; j >= 0; j-- ) - { - if ( Rk_fx[j] > 0 ) - { - Rk_fx[j] = L_sub( Rk_fx[j], ar_div_ivas( bsub_fx, nzb ) ); - if ( Rk_fx[j] < 0 ) - { - bsub_fx = L_sub( bsub_fx, L_add( ar_div_ivas( bsub_fx, nzb ), Rk_fx[j] ) ); - Rk_fx[j] = 0; - } - else - { - bsub_fx = L_sub( bsub_fx, ar_div_ivas( bsub_fx, nzb ) ); - } - nzb = sub( nzb, 1 ); - } - } - - srt_vec_ind_fx_ivas( Rk_fx, Rk_sort_fx, k_sort, BANDS ); -#undef WMC_TOOL_SKIP - - /*read the bits*/ - nb_bytes = bit_budget >> 3; - k = bit_budget - ( nb_bytes << 3 ); - for ( i = 0; i < nb_bytes; i++ ) - { - pbs->buf[i] = (uint8_t) get_next_indice( st, 8 ); - } - - if ( k > 0 ) - { - pbs->buf[nb_bytes] = (uint8_t) get_next_indice( st, k ); - pbs->buf[nb_bytes] <<= ( 8 - k ); - i++; - nb_bytes++; - } - /* set two more bytes, which are used to flush the arithmetic coder, to 0 - -> this avoids reading of uninitialized memory */ - nb_bytes = min( nb_bytes + 2, MAX_SIZEBUF_PBITSTREAM ); - for ( ; i < nb_bytes; i++ ) - { - pbs->buf[i] = 0; - } - - pbs->maxBytes = nb_bytes; - - ar_decoder_start( pardec, pbs ); - - delta_fx = 0; - surplus_fx = 0; - - if ( input_frame <= L_FRAME16k && adjustFlag == 0 && *is_transient == 0 ) - { - surplus_fx = -131072; - - bit_allocation_second_fx2( Rk_fx, Rk_sort_fx, BANDS, band_width, k_sort, k_num, p2a_flags, p2a_bands, last_bitalloc, input_frame ); - - nzbands = 0; - for ( j = 0; j < BANDS; j++ ) - { - if ( sub( j, k_num[0] ) == 0 || sub( j, k_num[1] ) == 0 ) - { - sepbits = L_add( sepbits, Rk_fx[k_sort[j]] ); - } - else - { - leftbits = L_add( leftbits, Rk_fx[k_sort[j]] ); - if ( Rk_fx[k_sort[j]] > 0 ) - { - nzbands = add( nzbands, 1 ); - } - } - } - - for ( k = 0; k < BANDS; k++ ) - { - if ( k != k_num[0] && k != k_num[1] ) - { - if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) - { - /* When number of bits per band is less than - arithmetic bits overhead, this band is not encoded. - It may happens when the actual number of bits per - band is near same to estimated number of bits, for - most bands (very unprobable but possible) */ - if ( L_add( Rk_fx[k_sort[k]], delta_fx ) < 0 ) - { - pulsesnum = 0; - for ( i = 0; i < band_width[k_sort[k]]; i++ ) - { - inp_vector[band_start[k_sort[k]] + i] = 0; - } - if ( surplus_fx != 0 ) - { -#define WMC_TOOL_SKIP - surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); - surplus_fx = L_add( delta_fx, surplus_fx ); -#undef WMC_TOOL_SKIP - } - } - else - { - /*get number of pulses */ - pulsesnum = GetScale_fx_ivas( band_width[k_sort[k]], L_add( Rk_fx[k_sort[k]], delta_fx ), &surplus_fx ); - - leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); - - decode_position_ari_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); - decode_mangitude_tcq_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]], &surplus_fx ); - decode_signs_fx_ivas( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); - } - nzbands--; - } - else if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 1 ) - { - /* When number of bits per band is less than - arithmetic bits overhead, this band is not encoded. - It may happens when the actual number of bits per - band is near same to estimated number of bits, for - most bands (very unprobable but possible) */ - if ( L_add( Rk_fx[k_sort[k]], delta_fx ) < 0 ) - { - pulsesnum = 0; - for ( i = 0; i < band_width[k_sort[k]]; i++ ) - { - inp_vector[band_start[k_sort[k]] + i] = 0; - } - if ( surplus_fx != 0 ) - { -#define WMC_TOOL_SKIP - surplus_fx = L_add( Rk_fx[k_sort[k]], surplus_fx ); - surplus_fx = L_add( delta_fx, surplus_fx ); -#undef WMC_TOOL_SKIP - } - } - else - { - - pulsesnum = GetScale_fx_ivas( band_width[k_sort[k]], L_add( Rk_fx[k_sort[k]], delta_fx ), &surplus_fx ); - - leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); - - decode_position_ari_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); - decode_magnitude_usq_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); - decode_signs_fx_ivas( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); - } - nzbands--; - } - else - { - pulsesnum = 0; - for ( i = 0; i < band_width[k_sort[k]]; i++ ) - { - inp_vector[band_start[k_sort[k]] + i] = 0; - } - } - - npulses[k_sort[k]] = pulsesnum; - - if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) - { -#define WMC_TOOL_SKIP - IF( nzbands <= 1 ) - { - divider = 0; - } - ELSE - { - divider = 2; - } - - IF( L_add( L_add( surplus_fx, sepbits ), ar_div_ivas( leftbits, divider ) ) < 0 ) - { - /* Overflow possible => start to distribute negative surplus */ - delta_fx = ar_div_ivas( surplus_fx + sepbits, nzbands ); - } - else - { - delta_fx = 0; - } - surplus_fx = L_sub( surplus_fx, delta_fx ); -#undef WMC_TOOL_SKIP - } - else - { - delta_fx = 0; - } - } - } - -#define WMC_TOOL_SKIP - if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) - { - bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ - bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ - } -#undef WMC_TOOL_SKIP - else - { - bit_surplus_fx[0] = surplus_fx; - bit_surplus_fx[1] = 0; - } - - for ( k = 0; k < BANDS; k++ ) - { - for ( j = 0; j < 2; j++ ) - { - if ( k == k_num[j] ) - { -#define WMC_TOOL_SKIP - Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); -#undef WMC_TOOL_SKIP - if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) - { - /* get number of pulses */ - pulsesnum = GetScale_fx_ivas( band_width[k_sort[k]], Rk_fx[k_sort[k]], &surplus_fx ); - - decode_position_ari_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); - /* decode tcq magniitude and update the surplus bits. */ - decode_mangitude_tcq_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]], &surplus_fx ); - decode_signs_fx_ivas( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); - } - else if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 1 ) - { - pulsesnum = GetScale_fx_ivas( band_width[k_sort[k]], Rk_fx[k_sort[k]], &surplus_fx ); - - decode_position_ari_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); - /* decode usq magnitude and don't need to update surplus bits */ - decode_magnitude_usq_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); - decode_signs_fx_ivas( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); - } - else - { - pulsesnum = 0; - for ( i = 0; i < band_width[k_sort[k]]; i++ ) - { - inp_vector[band_start[k_sort[k]] + i] = 0; - } - } - npulses[k_sort[k]] = pulsesnum; - } - } - } - } - else - { - for ( k = 0; k < BANDS; k++ ) - { - if ( Rk_fx[k_sort[k]] > 0 ) - { - pulsesnum = GetScale_fx_ivas( band_width[k_sort[k]], Rk_fx[k_sort[k]] + delta_fx, &surplus_fx ); - - decode_position_ari_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, &nz, &positions[band_start[k_sort[k]]] ); - - /*decode usq magnitude and don't need to update surplus bits*/ - decode_magnitude_usq_fx_ivas( pardec, band_width[k_sort[k]], pulsesnum, nz, &positions[band_start[k_sort[k]]], &inp_vector[band_start[k_sort[k]]] ); - decode_signs_fx_ivas( pardec, band_width[k_sort[k]], &inp_vector[band_start[k_sort[k]]] ); - -#define WMC_TOOL_SKIP - nzbands = sub( nzbands, 1 ); -#undef WMC_TOOL_SKIP - } - else - { - pulsesnum = 0; - for ( i = 0; i < band_width[k_sort[k]]; i++ ) - { - inp_vector[band_start[k_sort[k]] + i] = 0; - } - } - - npulses[k_sort[k]] = pulsesnum; - - /* surplus distribution */ - if ( surplus_fx > 0 && nzbands > 0 ) - { - delta_fx = ar_div_ivas( surplus_fx, nzbands ); - surplus_fx = L_sub( surplus_fx, delta_fx ); - } - } - } - /* Load TCQ path from bitstream */ - LoadTCQdata( pardec, dpath, lsbtcq_bits ); - - TCQLSBdec( dpath, mbuffer, 2 * lsbtcq_bits ); - - ar_decoder_done( pardec ); - - /* Restore TCQ */ - if ( !flag_wbnb ) - { - for ( k = 0; k < BANDS; k++ ) - { - if ( Rk_fx[k_sort[k]] > 0 ) - { - RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); - } - } - } - else - { - for ( k = 0; k < BANDS; k++ ) - { - if ( Rk_fx[k_sort[k]] > 0 && k != k_num[0] && k != k_num[1] ) - { - RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); - } - } - for ( k = 0; k < BANDS; k++ ) - { - if ( Rk_fx[k_sort[k]] > 0 && ( k == k_num[0] || k == k_num[1] ) ) - { - RestoreTCQdec( &inp_vector[band_start[k_sort[k]]], band_width[k_sort[k]], &bcount, mbuffer ); - } - } - } - - - return; -} -#endif diff --git a/lib_dec/tcq_core_dec_fx.c b/lib_dec/tcq_core_dec_fx.c index 0432f02a5..c13a88565 100644 --- a/lib_dec/tcq_core_dec_fx.c +++ b/lib_dec/tcq_core_dec_fx.c @@ -13,7 +13,6 @@ * Main Generic Audio Decoder Routine for LR-MDCT *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void tcq_core_LR_dec_fx( Decoder_State *st_fx, Word16 *inp_vector_fx, /*Qx */ @@ -499,5 +498,3 @@ void tcq_core_LR_dec_fx( return; } - -#endif diff --git a/lib_dec/tcx_utils_dec.c b/lib_dec/tcx_utils_dec.c index 8747c6bab..efee08d61 100644 --- a/lib_dec/tcx_utils_dec.c +++ b/lib_dec/tcx_utils_dec.c @@ -47,255 +47,3 @@ * * *--------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tcx_decoder_memory_update_flt( - Decoder_State *st, /* i/o: decoder memory state */ - const float *xn_buf, /* i/o: mdct output buffer used also as temporary buffer */ - float *synthout, /* o : synth */ - const float *A /* i : Quantized LPC coefficients */ -) -{ - int16_t L_frame_glob; - float tmp; - float *synth; - float buf[1 + M + L_FRAME_PLUS]; - float preemph_f = st->preemph_fac_float; - - L_frame_glob = st->L_frame; - - /*TCX must be aligned with ACELP*/ - assert( st->hTcxCfg->lfacNext <= 0 ); - - /* Output synth */ - mvr2r( xn_buf, synthout, L_frame_glob ); - - /* Update synth */ - synth = buf + 1 + M; - mvr2r( st->syn_float, buf, 1 + M ); - mvr2r( xn_buf, synth, L_frame_glob ); - mvr2r( synth + L_frame_glob - M - 1, st->syn_float, 1 + M ); - - /* Emphasis of synth -> synth_pe */ - tmp = synth[-M - 1]; - preemph( synth - M, preemph_f, M + L_frame_glob, &tmp ); - - mvr2r( synth + L_frame_glob - M, st->mem_syn2, M ); - mvr2r( synth + L_frame_glob - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - if ( !st->tcxonly || L_frame_glob == L_FRAME16k ) - { - /* Update excitation */ - assert( L_frame_glob < L_EXC_MEM_DEC ); - mvr2r( st->old_exc + ( L_frame_glob ), st->old_exc, L_EXC_MEM_DEC - ( L_frame_glob ) ); - residu( A, M, synth, st->old_exc + L_EXC_MEM_DEC - ( L_frame_glob ), ( L_frame_glob ) ); - } - - /* Update old_Aq */ - mvr2r( A, st->old_Aq_12_8, M + 1 ); - } - - return; -} - -/*--------------------------------------------------------------- - * tcx_ari_res_invQ_spec_flt() - * - * Residual Quantization - *--------------------------------------------------------------*/ - -/*! r: number of bits used (including "bits") */ -int16_t tcx_ari_res_invQ_spec_flt( - float x_Q[], /* i/o: quantized spectrum */ - const int16_t L_frame, /* i : number of lines */ - const int16_t prm[], /* i : bitstream */ - int16_t target_bits, /* i : number of bits available */ - int16_t bits, /* i : number of bits used so far */ - const float deadzone, /* i : quantizer deadzone */ - const float x_fac[] /* i : spectrum post-quantization factors */ -) -{ - int16_t i, j, num_zeros; - int16_t zeros[L_FRAME_PLUS]; - float fac_m, fac_p, sign; - - /* Limit the number of residual bits */ - target_bits = min( target_bits, NPRM_RESQ ); - - /* Requantize the spectrum line-by-line */ - fac_m = deadzone * 0.5f; - num_zeros = 0; - for ( i = 0; i < L_frame; ++i ) - { - if ( bits >= target_bits ) - { - /* no bits left */ - break; - } - if ( x_Q[i] != 0 ) - { - if ( x_Q[i] > 0 ) - { - sign = x_fac[i]; - } - else - { - sign = -x_fac[i]; - } - - x_Q[i] += sign * ( prm[bits++] * 0.5f - fac_m ); - } - else - { - zeros[num_zeros++] = i; - } - } - - /* Requantize zeroed-lines of the spectrum */ - fac_p = ( 1.0f - deadzone ) * 0.33f * 2.0f; - --target_bits; /* reserve 1 bit for the check below */ - for ( j = 0; j < num_zeros; ++j ) - { - if ( bits >= target_bits ) - { - /* 1 or 0 bits left */ - break; - } - - i = zeros[j]; - - if ( prm[bits++] != 0 ) - { - x_Q[i] = ( 2 * prm[bits++] - 1 ) * fac_p * x_fac[i]; - } - } - - return bits; -} - - -/*--------------------------------------------------------------- - * tcx_res_invQ_gain_flt() - * - * - *--------------------------------------------------------------*/ - -int16_t tcx_res_invQ_gain_flt( - float *gain_tcx, - const int16_t *prm, - const int16_t resQBits ) -{ - int16_t bits; - - /*Refine the gain quantization*/ - for ( bits = 0; bits < min( resQBits, TCX_RES_Q_BITS_GAIN ); bits++ ) - { - if ( prm[bits] == 0 ) - { - *gain_tcx = ( *gain_tcx ) * gain_corr_inv_fac_flt[bits]; - } - else - { - *gain_tcx = ( *gain_tcx ) * gain_corr_fac_flt[bits]; - } - } - - return ( bits ); -} - - -/*--------------------------------------------------------------- - * tcx_res_invQ_spec_flt() - * - * - *--------------------------------------------------------------*/ - -int16_t tcx_res_invQ_spec_flt( - float *x, - const int16_t L_frame, - const int16_t *prm, - int16_t resQBits, - int16_t bits, - const float sq_round, - const float lf_deemph_factors[] ) -{ - int16_t i; - float fac_m, fac_p, thres; - - /* Limit the number of residual bits */ - resQBits = min( resQBits, NPRM_RESQ ); - - /* Requantize the spectrum line-by-line */ - fac_p = 0.5f - sq_round * 0.5f; - fac_m = sq_round * 0.5f; - if ( !lf_deemph_factors ) - { - for ( i = 0; ( i < L_frame ) && ( bits < resQBits ); i++ ) - { - /* bits < resQBits */ - if ( x[i] != 0.0f ) - { - if ( prm[bits++] == 0 ) - { - x[i] -= ( x[i] > 0.0f ) ? fac_m : fac_p; - } - else - { - x[i] += ( x[i] > 0.0f ) ? fac_p : fac_m; - } - } - } - resQBits--; /* Quantize zeroed lines of the spectrum */ - for ( i = 0; ( i < L_frame ) && ( bits < resQBits ); i++ ) - { - if ( x[i] == 0.0f ) - { - if ( prm[bits++] != 0 ) - { - x[i] = ( prm[bits++] * 2.64f - 1.32f ) * fac_p; - } - } - } - - return bits; - } - for ( i = 0; i < L_frame; i++ ) - { - if ( bits >= resQBits ) - { - break; - } - if ( x[i] != 0.f && lf_deemph_factors[i] > 0.5f ) - { - if ( prm[bits++] == 0 ) - { - x[i] -= ( x[i] > 0 ) ? fac_m * lf_deemph_factors[i] : fac_p * lf_deemph_factors[i]; - } - else - { - x[i] += ( x[i] > 0 ) ? fac_p * lf_deemph_factors[i] : fac_m * lf_deemph_factors[i]; - } - } - } - - /*Quantize zeroed-line of the spectrum*/ - for ( i = 0; i < L_frame; i++ ) - { - if ( bits >= ( resQBits - 1 ) ) /*need at least two bits*/ - { - break; - } - if ( x[i] == 0.f && lf_deemph_factors[i] > 0.5f ) - { - if ( prm[bits++] == 1 ) - { - thres = ( 1 - sq_round ) * 0.66f * lf_deemph_factors[i]; - x[i] = ( prm[bits++] * 2.f - 1.f ) * thres; - } - } - } - - return bits; -} -#endif diff --git a/lib_dec/tcx_utils_dec_fx.c b/lib_dec/tcx_utils_dec_fx.c index 5bffdada4..1a847c6a0 100644 --- a/lib_dec/tcx_utils_dec_fx.c +++ b/lib_dec/tcx_utils_dec_fx.c @@ -13,7 +13,6 @@ #include "basop_util.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------- * tcx_decoder_memory_update() * @@ -379,4 +378,3 @@ Word16 tcx_res_invQ_spec( return bits; } -#endif diff --git a/lib_dec/tns_base_dec.c b/lib_dec/tns_base_dec.c index 0f88f4aca..68e2e313c 100644 --- a/lib_dec/tns_base_dec.c +++ b/lib_dec/tns_base_dec.c @@ -41,104 +41,3 @@ #include "prot.h" #include "stat_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * ReadTnsData_ivas() - * - * - *---------------------------------------------------------------------*/ - -void ReadTnsData_ivas( - STnsConfig const *pTnsConfig, - Decoder_State *st, - int16_t *pnBits, - int16_t *stream, - int16_t *pnSize ) -{ - int16_t start_bit_pos; - - start_bit_pos = st->next_bit_pos; - if ( pTnsConfig->nMaxFilters > 1 ) - { - if ( pTnsConfig->allowTnsOnWhite ) - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - ReadFromBitstream( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, st, &stream, pnSize ); - } - else - { - ReadFromBitstream( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, st, &stream, pnSize ); - } - } - else - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - ReadFromBitstream( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize ); - } - else - { - ReadFromBitstream( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize ); - } - } - } - else - { - ReadFromBitstream( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize ); - } - - *pnBits = st->next_bit_pos - start_bit_pos; - - return; -} - - -/*---------------------------------------------------------------------* - * DecodeTnsData_ivas() - * - * - *---------------------------------------------------------------------*/ - -int16_t DecodeTnsData_ivas( - STnsConfig const *pTnsConfig, - const int16_t *stream, - int16_t *pnSize, - STnsData *pTnsData ) -{ - ResetTnsData_flt( pTnsData ); - - if ( pTnsConfig->nMaxFilters > 1 ) - { - if ( pTnsConfig->allowTnsOnWhite ) - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - SetParameters( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, pTnsData, &stream, pnSize ); - } - else - { - SetParameters( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); - } - } - else - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - SetParameters( &tnsEnabledSWBTCX10BitMap, 1, pTnsData, &stream, pnSize ); - } - else - { - SetParameters( &tnsEnabledSWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); - } - } - } - else - { - SetParameters( &tnsEnabledWBTCX20BitMap, 1, pTnsData, &stream, pnSize ); - } - - return ( pTnsData->nFilters > 0 ) ? TRUE : FALSE; -} -#endif diff --git a/lib_dec/tns_base_dec_fx.c b/lib_dec/tns_base_dec_fx.c index 4a68a49c2..13f6ca461 100644 --- a/lib_dec/tns_base_dec_fx.c +++ b/lib_dec/tns_base_dec_fx.c @@ -16,7 +16,6 @@ * @param x the current input value. * @return the output of the filter. */ -#ifdef IVAS_FLOAT_FIXED typedef Word32 ( *TLinearPredictionFilter )( Word16 order, Word16 const parCoeff[], Word32 *state, Word32 x ); /********************************/ @@ -66,17 +65,17 @@ ReadTnsData( IF( LT_16( pTnsConfig->iFilterBorders[0], 512 ) ) { - ReadFromBitstream( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize ); + ReadFromBitstream_fx( &tnsEnabledSWBTCX10BitMap, 1, st, &stream, pnSize ); } ELSE { - ReadFromBitstream( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize ); + ReadFromBitstream_fx( &tnsEnabledSWBTCX20BitMap, 1, st, &stream, pnSize ); } } } ELSE { - ReadFromBitstream( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize ); + ReadFromBitstream_fx( &tnsEnabledWBTCX20BitMap, 1, st, &stream, pnSize ); } move16(); @@ -265,5 +264,3 @@ Word16 DecodeTnsData_ivas_fx( return result; } - -#endif diff --git a/lib_dec/tonalMDCTconcealment.c b/lib_dec/tonalMDCTconcealment.c index 3f94e5108..c865dbe74 100644 --- a/lib_dec/tonalMDCTconcealment.c +++ b/lib_dec/tonalMDCTconcealment.c @@ -43,917 +43,14 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*******************************************************/ /*-------------- public functions -------------------- */ /*******************************************************/ -#ifndef IVAS_FLOAT_FIXED -ivas_error TonalMDCTConceal_Init_ivas( - TonalMDCTConcealPtr hTonalMDCTConc, - const uint16_t nSamples, - const uint16_t nSamplesCore, - const uint16_t nScaleFactors, - TCX_CONFIG_HANDLE hTcxCfg ) -{ - if ( nSamples > L_FRAME_MAX || nScaleFactors > FDNS_NPTS ) - { - assert( nSamples <= L_FRAME_MAX ); - assert( nScaleFactors <= FDNS_NPTS ); - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "TonalMDCT FEC: Number of samples larger than max. block size\n" ) ); - } - assert( ( hTonalMDCTConc->nScaleFactors == nScaleFactors ) || ( hTonalMDCTConc->nSamples != nSamples ) ); /* If nSamples doesn't change then also nScaleFactors must stay the same */ - - hTonalMDCTConc->tcx_cfg = hTcxCfg; - hTonalMDCTConc->lastBlockData.spectralData_float = hTonalMDCTConc->spectralDataBuffers_float[0]; - hTonalMDCTConc->secondLastBlockData.spectralData_float = hTonalMDCTConc->spectralDataBuffers_float[1]; - hTonalMDCTConc->secondLastPowerSpectrum_float = hTonalMDCTConc->secondLastBlockData.spectralData_float; - hTonalMDCTConc->lastBlockData.scaleFactors_float = hTonalMDCTConc->scaleFactorsBuffers_float[0]; - hTonalMDCTConc->secondLastBlockData.scaleFactors_float = hTonalMDCTConc->scaleFactorsBuffers_float[1]; - hTonalMDCTConc->lastBlockData.blockIsValid = 0; - hTonalMDCTConc->secondLastBlockData.blockIsValid = 0; - hTonalMDCTConc->nSamples = 0; - hTonalMDCTConc->nScaleFactors = 0; - - hTonalMDCTConc->lastBlockData.blockIsConcealed = 0; - hTonalMDCTConc->secondLastBlockData.blockIsConcealed = 0; - hTonalMDCTConc->pTCI = (TonalComponentsInfo *) hTonalMDCTConc->timeDataBuffer_float; - hTonalMDCTConc->lastPitchLag_float = 0; - - if ( hTonalMDCTConc->nSamples != nSamples ) - { - hTonalMDCTConc->secondLastBlockData.blockIsValid = 0; - hTonalMDCTConc->lastBlockData.blockIsValid = 0; - } - hTonalMDCTConc->nSamples = nSamples; - hTonalMDCTConc->nSamplesCore = nSamplesCore; - hTonalMDCTConc->nScaleFactors = nScaleFactors; - set_zero( hTonalMDCTConc->scaleFactorsBackground_flt, FDNS_NPTS ); - hTonalMDCTConc->scf_fadeout_flt = 1.0f; - PsychoacousticParameters_Init( INT_FS_16k, L_FRAME16k, 64, 1, 1, &hTonalMDCTConc->psychParamsTCX20 ); - PsychoacousticParameters_Init( INT_FS_16k, L_FRAME16k / 2, 64, 0, 1, &hTonalMDCTConc->psychParamsTCX10 ); - hTonalMDCTConc->psychParams = NULL; - hTonalMDCTConc->last_block_nrg_flt = 0.0f; - hTonalMDCTConc->curr_noise_nrg_flt = 0.0f; - hTonalMDCTConc->faded_signal_nrg_flt = 0.0f; - /* Offset the pointer to the end of buffer, so that pTCI is not destroyed when - new time samples are stored in lastPcmOut */ - /* just the second half of the second last pcm output is needed */ - hTonalMDCTConc->secondLastPcmOut_float = &hTonalMDCTConc->timeDataBuffer_float[( 3 * L_FRAME_MAX ) / 2 - ( 3 * min( L_FRAME_MAX, nSamples ) ) / 2]; - hTonalMDCTConc->lastPcmOut_float = &hTonalMDCTConc->timeDataBuffer_float[( 3 * L_FRAME_MAX ) / 2 - min( L_FRAME_MAX, nSamples )]; - - /* If the second last frame was lost and concealed with tonal PLC, we - reuse saved TonalComponentsInfo and don't update pcm buffers */ - assert( sizeof( *hTonalMDCTConc->pTCI ) <= ( hTonalMDCTConc->lastPcmOut_float - hTonalMDCTConc->timeDataBuffer_float ) * sizeof( hTonalMDCTConc->timeDataBuffer_float[0] ) ); - - return IVAS_ERR_OK; -} - -void TonalMDCTConceal_SaveFreqSignal_ivas( - TonalMDCTConcealPtr hTonalMDCTConc, - const float *mdctSpectrum, - const uint16_t nNewSamples, - const uint16_t nNewSamplesCore, - const float *scaleFactors, - const int16_t infoIGFStartLine ) -{ - float *temp; - uint16_t nOldSamples; - - assert( nNewSamples > 0 && nNewSamples <= 2 * L_FRAME_MAX ); - - /* Avoid overwriting hTonalMDCTConc->secondLastPowerSpectrum stored in spectralData, - because it is needed if the second last and the current frame are lost - and concealed using the Tonal MDCT PLC */ - if ( !hTonalMDCTConc->lastBlockData.tonalConcealmentActive || ( hTonalMDCTConc->lastBlockData.nSamples != nNewSamples ) ) - { - if ( nNewSamples <= L_FRAME_MAX ) - { - /* Shift the buffers */ - temp = hTonalMDCTConc->secondLastBlockData.spectralData_float; /* Save the pointer */ - hTonalMDCTConc->secondLastBlockData.spectralData_float = hTonalMDCTConc->lastBlockData.spectralData_float; - hTonalMDCTConc->lastBlockData.spectralData_float = temp; - temp = hTonalMDCTConc->secondLastBlockData.scaleFactors_float; - hTonalMDCTConc->secondLastBlockData.scaleFactors_float = hTonalMDCTConc->lastBlockData.scaleFactors_float; - hTonalMDCTConc->lastBlockData.scaleFactors_float = temp; - } - else - { - /* Order the buffers so that even transition frame can fit in if written into the first buffer */ - hTonalMDCTConc->lastBlockData.spectralData_float = hTonalMDCTConc->spectralDataBuffers_float[0]; - hTonalMDCTConc->secondLastBlockData.spectralData_float = hTonalMDCTConc->spectralDataBuffers_float[1]; - hTonalMDCTConc->lastBlockData.scaleFactors_float = hTonalMDCTConc->scaleFactorsBuffers_float[0]; - hTonalMDCTConc->secondLastBlockData.scaleFactors_float = hTonalMDCTConc->scaleFactorsBuffers_float[1]; - } - nOldSamples = hTonalMDCTConc->lastBlockData.nSamples; - hTonalMDCTConc->lastBlockData.nSamples = nNewSamples; - hTonalMDCTConc->secondLastBlockData.nSamples = nOldSamples; - nOldSamples = hTonalMDCTConc->lastBlockData.nSamplesCore; - hTonalMDCTConc->lastBlockData.nSamplesCore = nNewSamplesCore; - hTonalMDCTConc->secondLastBlockData.nSamplesCore = nOldSamples; - } - - if ( ( nNewSamples > 0 ) && ( nNewSamples <= 2 * L_FRAME_MAX ) ) - { - /* Store new data */ - int16_t i; - - hTonalMDCTConc->last_block_nrg_flt = 0.0f; - for ( i = 0; i < infoIGFStartLine; i++ ) - { - hTonalMDCTConc->lastBlockData.spectralData_float[i] = mdctSpectrum[i]; - hTonalMDCTConc->last_block_nrg_flt += mdctSpectrum[i] * mdctSpectrum[i]; - } - for ( ; i < nNewSamples; i++ ) - { - hTonalMDCTConc->lastBlockData.spectralData_float[i] = mdctSpectrum[i]; - } - - mvr2r( scaleFactors, hTonalMDCTConc->lastBlockData.scaleFactors_float, hTonalMDCTConc->nScaleFactors ); - } - - return; -} - - -void TonalMDCTConceal_UpdateState_ivas( - TonalMDCTConcealPtr hTonalMDCTConc, - const int16_t nNewSamples, - const float pitchLag, - const int16_t badBlock, - const int16_t tonalConcealmentActive ) -{ - int16_t newBlockIsValid; - - assert( !( !badBlock && tonalConcealmentActive ) ); - - if ( badBlock ) - { - newBlockIsValid = hTonalMDCTConc->lastBlockData.blockIsValid; - } - else - { - newBlockIsValid = ( nNewSamples <= 2 * L_FRAME_MAX ) && ( nNewSamples > 0 ); - } - - /* Shift old state */ - hTonalMDCTConc->secondLastBlockData.blockIsConcealed = hTonalMDCTConc->lastBlockData.blockIsConcealed; - hTonalMDCTConc->secondLastBlockData.blockIsValid = hTonalMDCTConc->lastBlockData.blockIsValid; - hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive = hTonalMDCTConc->lastBlockData.tonalConcealmentActive; - - /* Store new state */ - hTonalMDCTConc->lastBlockData.blockIsConcealed = badBlock; - hTonalMDCTConc->lastBlockData.blockIsValid = newBlockIsValid; - hTonalMDCTConc->lastBlockData.tonalConcealmentActive = tonalConcealmentActive; - hTonalMDCTConc->lastPitchLag_float = pitchLag; - - return; -} - - -static void FindPhases( - const TonalMDCTConcealPtr hTonalMDCTConc, - const float secondLastMDCT[], - const float secondLastMDST[] ) -{ - int16_t i; - int16_t l; - float *pCurrentPhase; - - pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted_float; - /* for each index/index group */ - for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) - { - *pCurrentPhase++ = (float) atan2( secondLastMDST[l], secondLastMDCT[l] ); - } - } - - return; -} - -#define CNST_bandwidth 7.0f -#define CNST_m (float) cos( EVS_PI / CNST_bandwidth ) -#define CNST_s (float) cos( ( 3 * EVS_PI ) / CNST_bandwidth ) -#define CNST_n (float) sin( EVS_PI / CNST_bandwidth ) -#define CNST_j (float) sin( ( 3 * EVS_PI ) / CNST_bandwidth ) -#define CNST_G (float) ( 1.0 / ( 2 * 1.36 ) ) -#define CNST_maxRatio 44.8f /* Maximum ratio |ODFT[k-1]|/|ODFT[k+1]| is 16.5 dB, that is maximum ratio (for fractional = 0) is (cos(EVS_PI/bandwidth)/cos(3PI/bandwidth))^1.36 */ - - -static void FindPhaseDifferences( - TonalMDCTConcealPtr const hTonalMDCTConc, - float powerSpectrum[] ) -{ - int16_t i, k; - float odft_left, odft_right; - float *phaseDiff; - float fractional; - float Q, a; - - phaseDiff = hTonalMDCTConc->pTCI->phaseDiff_float; - for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - k = hTonalMDCTConc->pTCI->indexOfTonalPeak[i]; - odft_left = powerSpectrum[k - 1]; - odft_right = powerSpectrum[k + 1]; - if ( odft_left >= CNST_maxRatio * odft_right ) - { - a = (float) tan( 0.0f * EVS_PI / CNST_bandwidth ); - } - else - { - if ( odft_right >= CNST_maxRatio * odft_left ) - { - a = (float) tan( 2.0f * EVS_PI / CNST_bandwidth ); - } - else - { - Q = (float) pow( odft_left / odft_right, CNST_G ); - a = ( CNST_m - Q * CNST_s ) / ( CNST_n + Q * CNST_j ); - } - } - fractional = (float) atan( a ) * ( CNST_bandwidth / 2.0f ); - assert( ( fractional >= 0 ) && ( fractional <= EVS_PI + 1.192092896e-07F ) ); - phaseDiff[i] = fractional + EVS_PI * ( k % 4 ); - } - - return; -} - -static void CalcPowerSpec( - const float *mdctSpec, - const float *mdstSpec, - const int16_t nSamples, - float floorPowerSpectrum, - float *powerSpec ) -{ - int16_t k; - float x; - - for ( k = 1; k <= nSamples - 2; k++ ) - { - x = mdctSpec[k] * mdctSpec[k] + mdstSpec[k] * mdstSpec[k]; - powerSpec[k] = max( floorPowerSpectrum, x ); - } - powerSpec[0] = 0.5f * powerSpec[1]; - powerSpec[nSamples - 1] = 0.5f * powerSpec[nSamples - 2]; - - return; -} - -static void CalcPowerSpecAndDetectTonalComponents( - const TonalMDCTConcealPtr hTonalMDCTConc, - float secondLastMDST[], - float secondLastMDCT[], - const float pitchLag, - const PsychoacousticParameters *psychParamsCurrent ) -{ - int16_t i, nSamples; - float floorPowerSpectrum; /* Minimum significant value of a spectral line in the power spectrum */ - float powerSpectrum[L_FRAME_MAX]; /* 32 bits are required */ - float invScaleFactors[FDNS_NPTS]; - int16_t nBands; - - nSamples = hTonalMDCTConc->nNonZeroSamples; - - /* It is taken into account that the MDCT is not normalized. */ - floorPowerSpectrum = hTonalMDCTConc->nSamples * hTonalMDCTConc->nSamples / 400.0f; - CalcPowerSpec( secondLastMDCT, secondLastMDST, nSamples, floorPowerSpectrum, powerSpectrum ); - - /* This setting to minimal level is required because the power spectrum is used in the threshold adaptation using the pitch up to hTonalMDCTConc->nSamples. */ - set_f( powerSpectrum + nSamples, floorPowerSpectrum, hTonalMDCTConc->nSamples - nSamples ); - /* this setting to zero is needed since the FDNS needs to be called - with hTonalMDCTConc->nSamplesCore; it relevant only for nb; it has no effect - to the output, but memory checker may complain otherwise due to the - usage of uninitialized values */ - - if ( hTonalMDCTConc->nSamplesCore > hTonalMDCTConc->nSamples ) - { - set_zero( powerSpectrum + hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamplesCore - hTonalMDCTConc->nSamples ); - } - - DetectTonalComponents_flt( hTonalMDCTConc->pTCI->indexOfTonalPeak, hTonalMDCTConc->pTCI->lowerIndex, hTonalMDCTConc->pTCI->upperIndex, &hTonalMDCTConc->pTCI->numIndexes, hTonalMDCTConc->lastPitchLag_float, pitchLag, - hTonalMDCTConc->lastBlockData.spectralData_float, hTonalMDCTConc->lastBlockData.scaleFactors_float, powerSpectrum, nSamples, hTonalMDCTConc->nSamplesCore, floorPowerSpectrum, psychParamsCurrent ); - - FindPhases( hTonalMDCTConc, secondLastMDCT, secondLastMDST ); - - FindPhaseDifferences( hTonalMDCTConc, powerSpectrum ); - - if ( hTonalMDCTConc->pTCI->numIndexes > 0 ) - { - hTonalMDCTConc->secondLastPowerSpectrum_float = hTonalMDCTConc->secondLastBlockData.spectralData_float; - - for ( i = 0; i < nSamples; i++ ) - { - powerSpectrum[i] = (float) sqrt( powerSpectrum[i] ); - } - - for ( i = 0; i < hTonalMDCTConc->nScaleFactors; i++ ) - { - invScaleFactors[i] = 1.0f / hTonalMDCTConc->secondLastBlockData.scaleFactors_float[i]; - } - - if ( psychParamsCurrent == NULL ) - { - nBands = FDNS_NPTS; - mdct_noiseShaping_flt( powerSpectrum, hTonalMDCTConc->nSamplesCore, invScaleFactors, nBands ); - } - else - { - sns_shape_spectrum( powerSpectrum, psychParamsCurrent, invScaleFactors, hTonalMDCTConc->nSamplesCore ); - nBands = psychParamsCurrent->nBands; - } - - v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, invScaleFactors[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->nSamples - hTonalMDCTConc->nSamplesCore ); - mvr2r( powerSpectrum, hTonalMDCTConc->secondLastPowerSpectrum_float, hTonalMDCTConc->nSamples ); /* 16 bits are now enough for storing the power spectrum */ - } - - return; -} - -static void CalcMDXT( - const TonalMDCTConcealPtr hTonalMDCTConc, - const char type, - const float *timeSignal, - float *mdxtOutput ) -{ - float windowedTimeSignal[L_FRAME_PLUS + 2 * L_MDCT_OVLP_MAX]; - int16_t left_overlap, right_overlap; - int16_t L_frame; - - L_frame = hTonalMDCTConc->nSamples; - WindowSignal_flt( hTonalMDCTConc->tcx_cfg, hTonalMDCTConc->tcx_cfg->tcx_offsetFB, FULL_OVERLAP, FULL_OVERLAP, &left_overlap, &right_overlap, timeSignal, &L_frame, windowedTimeSignal, 1, 1 ); - - if ( type == 'S' ) - { - TCX_MDST_flt( windowedTimeSignal, mdxtOutput, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, EVS_MONO ); - } - else - { - TCX_MDCT_flt( windowedTimeSignal, mdxtOutput, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, EVS_MONO ); - } - - return; -} - -void TonalMDCTConceal_Detect_ivas( - const TonalMDCTConcealPtr hTonalMDCTConc, - const float pitchLag, - int16_t *numIndices, - const PsychoacousticParameters *psychParamsCurrent ) -{ - float secondLastMDST[L_FRAME_MAX]; /* 32 bits are required */ - float secondLastMDCT[L_FRAME_MAX]; /* 32 bits are required */ - float *powerSpectrum = secondLastMDST; - int16_t i, nSamples; - int16_t nBands; - - nSamples = hTonalMDCTConc->nSamples; - if ( hTonalMDCTConc->lastBlockData.blockIsValid && hTonalMDCTConc->secondLastBlockData.blockIsValid && ( hTonalMDCTConc->lastBlockData.nSamples == nSamples ) && ( hTonalMDCTConc->secondLastBlockData.nSamples == nSamples ) && ( !hTonalMDCTConc->secondLastBlockData.blockIsConcealed || hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive || ( pitchLag != 0 ) ) ) - { - /* Safety if the second last frame was concealed and tonal concealment was inactive */ - - if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) - { - if ( !hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) - { - CalcMDXT( hTonalMDCTConc, 'S', hTonalMDCTConc->secondLastPcmOut_float, secondLastMDST ); - CalcMDXT( hTonalMDCTConc, 'C', hTonalMDCTConc->secondLastPcmOut_float, secondLastMDCT ); - hTonalMDCTConc->nNonZeroSamples = 0; - for ( i = 0; i < hTonalMDCTConc->nSamples; i++ ) - { - if ( hTonalMDCTConc->secondLastBlockData.spectralData_float[i] != 0 ) - { - hTonalMDCTConc->nNonZeroSamples = i; - } - } - /* 23 is the maximum length of the MA filter in getEnvelope */ - hTonalMDCTConc->nNonZeroSamples = min( hTonalMDCTConc->nSamples, hTonalMDCTConc->nNonZeroSamples + 23 ); - CalcPowerSpecAndDetectTonalComponents( hTonalMDCTConc, secondLastMDST, secondLastMDCT, pitchLag, psychParamsCurrent ); - } - else - { - /* If the second last frame was also lost, it is expected that pastTimeSignal could hold a bit different signal (e.g. including fade-out) from the one stored in TonalMDCTConceal_SaveTimeSignal_ivas. */ - /* That is why we reuse the already stored information about the concealed spectrum in the second last frame */ - nSamples = hTonalMDCTConc->nNonZeroSamples; - mvr2r( hTonalMDCTConc->secondLastPowerSpectrum_float, powerSpectrum, nSamples ); /* Convert from 16 bits to 32 bits */ - if ( psychParamsCurrent == NULL ) - { - nBands = FDNS_NPTS; - mdct_noiseShaping_flt( powerSpectrum, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors_float, nBands ); - } - else - { - sns_shape_spectrum( powerSpectrum, psychParamsCurrent, hTonalMDCTConc->secondLastBlockData.scaleFactors_float, hTonalMDCTConc->nSamplesCore ); - nBands = psychParamsCurrent->nBands; - } - - v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors_float[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, nSamples - hTonalMDCTConc->nSamplesCore ); - v_mult( powerSpectrum, powerSpectrum, powerSpectrum, nSamples ); - - RefineTonalComponents_flt( hTonalMDCTConc->pTCI->indexOfTonalPeak, hTonalMDCTConc->pTCI->lowerIndex, hTonalMDCTConc->pTCI->upperIndex, hTonalMDCTConc->pTCI->phaseDiff_float, - hTonalMDCTConc->pTCI->phase_currentFramePredicted_float, &hTonalMDCTConc->pTCI->numIndexes, hTonalMDCTConc->lastPitchLag_float, pitchLag, - hTonalMDCTConc->lastBlockData.spectralData_float, hTonalMDCTConc->lastBlockData.scaleFactors_float, powerSpectrum, - nSamples, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->nSamples * hTonalMDCTConc->nSamples / 400.0f /* floorPowerSpectrum */, psychParamsCurrent ); - } - } - } - else - { - hTonalMDCTConc->pTCI->numIndexes = 0; - } - - *numIndices = hTonalMDCTConc->pTCI->numIndexes; - - return; -} - - -void TonalMDCTConceal_InsertNoise_ivas( - const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ - float *mdctSpectrum, /*OUT*/ - const int16_t tonalConcealmentActive, - int16_t *pSeed, - const float tiltCompFactor, - const float crossfadeGain, - const float concealment_noise[L_FRAME48k], - const float cngLevelBackgroundTrace_bfi, - const int16_t crossOverFreq ) -{ - int16_t i, l; - float x, y; - Word16 rnd; - float g, nrgNoiseInLastFrame, nrgWhiteNoise, tiltFactor, tilt; - float last_block_nrg_correct; - - push_wmops( "InsertNoise" ); - - g = 1.0f - crossfadeGain; - if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) - { - rnd = 1977; - } - else - { - rnd = *pSeed; - } - - /* based on what is done in tcx_noise_filling_flt() */ - /* always initialize these to avoid compiler warnings */ - tiltFactor = (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / hTonalMDCTConc->lastBlockData.nSamples ); - tilt = 1.0f; - nrgNoiseInLastFrame = 0.0f; - nrgWhiteNoise = 0.0f; - hTonalMDCTConc->faded_signal_nrg_flt = 0.0f; - last_block_nrg_correct = 0.0f; - - if ( !hTonalMDCTConc->lastBlockData.blockIsValid ) - { - /* may just become active if the very first frame is lost */ - set_f( mdctSpectrum, 0.0f, hTonalMDCTConc->nSamples ); - } - else if ( concealment_noise != NULL ) - { - if ( !tonalConcealmentActive ) - { - /* if fadeout has not started yet, only apply sign scrambling */ - if ( crossfadeGain == 1.0f ) - { - for ( i = 0; i < crossOverFreq; i++ ) - { - if ( concealment_noise[i] > 0 ) - { - mdctSpectrum[i] = hTonalMDCTConc->lastBlockData.spectralData_float[i]; - } - else - { - mdctSpectrum[i] = -hTonalMDCTConc->lastBlockData.spectralData_float[i]; - } - } - - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - /* actual fadeout is done in this case */ - else - { - g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg_flt ); - - for ( i = 0; i < crossOverFreq; i++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[i]; - y = concealment_noise[i]; - - if ( y > 0 ) - { - mdctSpectrum[i] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[i] = g * y - crossfadeGain * x; - } - - hTonalMDCTConc->faded_signal_nrg_flt += mdctSpectrum[i] * mdctSpectrum[i]; - } - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = 0.0f; - } - } - } - else - { - assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); - - /* initialize bins of tonal components with zero: basically not - necessary, but currently the whole spectrum is rescaled in - mdct_noiseShaping_flt() and then there would be a processing of - uninitialized values */ - for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) - { - mdctSpectrum[l] = 0; - if ( l < crossOverFreq ) - { - last_block_nrg_correct += hTonalMDCTConc->lastBlockData.spectralData_float[l] * hTonalMDCTConc->lastBlockData.spectralData_float[l]; - hTonalMDCTConc->curr_noise_nrg_flt -= concealment_noise[l] * concealment_noise[l]; - } - } - } - - /* if fadeout has not started yet, only apply sign scrambling */ - if ( crossfadeGain == 1.0f ) - { - for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) - { - if ( concealment_noise[l] > 0 ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - else - { - mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) - { - if ( concealment_noise[l] > 0 ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - else - { - mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - } - - for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) - { - if ( concealment_noise[l] > 0 ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - else - { - mdctSpectrum[l] = -hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - /* actual fadeout is done in this case */ - else - { - g *= (float) sqrt( cngLevelBackgroundTrace_bfi / hTonalMDCTConc->curr_noise_nrg_flt ); - - for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = concealment_noise[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - hTonalMDCTConc->faded_signal_nrg_flt += mdctSpectrum[l] * mdctSpectrum[l]; - } - for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = concealment_noise[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - hTonalMDCTConc->faded_signal_nrg_flt += mdctSpectrum[l] * mdctSpectrum[l]; - } - } - - for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = concealment_noise[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - hTonalMDCTConc->faded_signal_nrg_flt += mdctSpectrum[l] * mdctSpectrum[l]; - } - - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = 0.0f; - } - } - } - - if ( hTonalMDCTConc->faded_signal_nrg_flt > 0.0f && hTonalMDCTConc->curr_noise_nrg_flt > MDCT_ST_PLC_FADEOUT_MIN_NOISE_NRG ) - { - float nrg_corr_factor; - - nrg_corr_factor = sqrtf( ( hTonalMDCTConc->last_block_nrg_flt - last_block_nrg_correct ) / hTonalMDCTConc->faded_signal_nrg_flt ); - v_multc( mdctSpectrum, nrg_corr_factor, mdctSpectrum, crossOverFreq ); - } - } - else - { - if ( !tonalConcealmentActive ) - { - for ( i = 0; i < crossOverFreq; i++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[i]; - nrgNoiseInLastFrame += x * x; - rnd = own_random( &rnd ); - mdctSpectrum[i] = tilt * rnd; - tilt *= tiltFactor; - nrgWhiteNoise += mdctSpectrum[i] * mdctSpectrum[i]; - } - if ( nrgWhiteNoise > 0 ) - { - g *= (float) sqrt( nrgNoiseInLastFrame / nrgWhiteNoise ); - } - for ( i = 0; i < crossOverFreq; i++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[i]; - y = mdctSpectrum[i]; - - if ( y > 0 ) - { - mdctSpectrum[i] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[i] = g * y - crossfadeGain * x; - } - } - - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - else - { - assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); - for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - rnd = own_random( &rnd ); - mdctSpectrum[l] = tilt * rnd; - tilt *= tiltFactor; - nrgNoiseInLastFrame += x * x; - nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; - } - for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - tilt *= (float) pow( tiltFactor, hTonalMDCTConc->pTCI->upperIndex[i - 1] - hTonalMDCTConc->pTCI->lowerIndex[i - 1] + 1 ); - for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - rnd = own_random( &rnd ); - mdctSpectrum[l] = tilt * rnd; - tilt *= tiltFactor; - nrgNoiseInLastFrame += x * x; - nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; - } - } - tilt *= (float) pow( tiltFactor, hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] - hTonalMDCTConc->pTCI->lowerIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1 ); - - for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - rnd = own_random( &rnd ); - mdctSpectrum[l] = tilt * rnd; - tilt *= tiltFactor; - nrgNoiseInLastFrame += x * x; - nrgWhiteNoise += mdctSpectrum[l] * mdctSpectrum[l]; - } - if ( nrgWhiteNoise > 0 ) - { - g *= (float) sqrt( nrgNoiseInLastFrame / nrgWhiteNoise ); - } - for ( l = 0; l < hTonalMDCTConc->pTCI->lowerIndex[0]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = mdctSpectrum[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - } - for ( i = 1; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->upperIndex[i - 1] + 1; l < hTonalMDCTConc->pTCI->lowerIndex[i]; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = mdctSpectrum[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - } - } - /* initialize bins of tonal components with zero: basically not - necessary, but currently the whole spectrum is rescaled in - mdct_noiseShaping_flt() and then there would be a processing of - uninitialized values */ - for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) - { - mdctSpectrum[l] = 0; - } - } - for ( l = hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1; l < crossOverFreq; l++ ) - { - x = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - y = mdctSpectrum[l]; - - if ( y > 0 ) - { - mdctSpectrum[l] = g * y + crossfadeGain * x; - } - else - { - mdctSpectrum[l] = g * y - crossfadeGain * x; - } - } - - for ( l = crossOverFreq; l < hTonalMDCTConc->lastBlockData.nSamples; l++ ) - { - mdctSpectrum[l] = hTonalMDCTConc->lastBlockData.spectralData_float[l]; - } - } - } - - *pSeed = rnd; - - pop_wmops(); - - return; -} - -void TonalMDCTConceal_Apply_ivas( - TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ - float *mdctSpectrum, /*OUT */ - const PsychoacousticParameters *psychParamsCurrent ) -{ - int16_t i, l; - float *phaseDiff, *pCurrentPhase; - float phaseToAdd; - float powerSpectrum[L_FRAME_MAX]; - int16_t nSamples; - int16_t nBands; - - if ( hTonalMDCTConc->lastBlockData.blockIsValid & hTonalMDCTConc->secondLastBlockData.blockIsValid ) - { - assert( hTonalMDCTConc->pTCI->numIndexes > 0 ); - - nSamples = hTonalMDCTConc->nNonZeroSamples; - assert( hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] < nSamples ); - mvr2r( hTonalMDCTConc->secondLastPowerSpectrum_float, powerSpectrum, nSamples ); /* Convert from 16 bits to 32 bits */ - if ( psychParamsCurrent == NULL ) - { - nBands = FDNS_NPTS; - mdct_noiseShaping_flt( powerSpectrum, hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors_float, nBands ); - } - else - { - sns_shape_spectrum( powerSpectrum, psychParamsCurrent, hTonalMDCTConc->secondLastBlockData.scaleFactors_float, hTonalMDCTConc->nSamplesCore ); - nBands = psychParamsCurrent->nBands; - } - - v_multc( powerSpectrum + hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->secondLastBlockData.scaleFactors_float[nBands - 1], powerSpectrum + hTonalMDCTConc->nSamplesCore, nSamples - hTonalMDCTConc->nSamplesCore ); - - phaseDiff = hTonalMDCTConc->pTCI->phaseDiff_float; /* if multiple frame loss occurs use the phase from the last frame and continue rotating */ - pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted_float; - - if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) - { - if ( hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) - { - hTonalMDCTConc->nFramesLost_float += 1; - } - else - { - hTonalMDCTConc->nFramesLost_float = 1.5; - } - } - - /* for each index group */ - for ( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) - { - phaseToAdd = hTonalMDCTConc->nFramesLost_float * phaseDiff[i]; - - /* Move phaseToAdd to range -EVS_PI..EVS_PI */ - while ( phaseToAdd > EVS_PI ) - { - phaseToAdd -= PI2; - } - - while ( phaseToAdd < -EVS_PI ) - { - /* should never occur in flt - kept for safety reasons */ - phaseToAdd += PI2; - } - - for ( l = hTonalMDCTConc->pTCI->lowerIndex[i]; l <= hTonalMDCTConc->pTCI->upperIndex[i]; l++ ) - { - const float currentPhase = ( *pCurrentPhase++ ) + phaseToAdd; /* *pCurrentPhase and phaseToAdd are in range -EVS_PI..EVS_PI */ - mdctSpectrum[l] = (float) cos( currentPhase ) * powerSpectrum[l]; - } - } - } - - hTonalMDCTConc->nFramesLost_float++; - - return; -} - -void TonalMDCTConceal_SaveTimeSignal_ivas( - TonalMDCTConcealPtr hTonalMDCTConc, - float *timeSignal, - const int16_t nNewSamples ) -{ - if ( nNewSamples == hTonalMDCTConc->nSamples ) - { - assert( nNewSamples <= L_FRAME_MAX ); - - if ( !hTonalMDCTConc->secondLastBlockData.tonalConcealmentActive ) - { - mvr2r( hTonalMDCTConc->lastPcmOut_float + hTonalMDCTConc->nSamples / 2, hTonalMDCTConc->secondLastPcmOut_float, hTonalMDCTConc->nSamples / 2 ); - } - - mvr2r( timeSignal, hTonalMDCTConc->lastPcmOut_float, hTonalMDCTConc->nSamples ); - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void TonalMdctConceal_create_concealment_noise_ivas_fx( Word32 concealment_noise[L_FRAME48k], // Q31-concealment_noise_exp Word16 *concealment_noise_exp, @@ -1226,227 +323,8 @@ void TonalMdctConceal_create_concealment_noise_ivas_fx( return; } -#else -void TonalMdctConceal_create_concealment_noise_ivas( - float concealment_noise[L_FRAME48k], - CPE_DEC_HANDLE hCPE, - const int16_t L_frameTCX, - const int16_t L_frame, - const int16_t idchan, - const int16_t subframe_idx, - const int16_t core, - const float crossfade_gain, - const TONALMDCTCONC_NOISE_GEN_MODE noise_gen_mode ) -{ - STEREO_MDCT_DEC_DATA_HANDLE hStereoMdct; - TonalMDCTConcealPtr hTonalMDCTConc; - Decoder_State *st; - HANDLE_FD_CNG_COM hFdCngCom; - int16_t *rnd_c, *rnd; - int16_t crossOverFreq, i, save_rnd_c, max_noise_line; - float c, c_inv; - float noise_shape_buffer[L_FRAME48k]; - int16_t inc, start_idx, stop_idx; - float *cngNoiseLevelPtr; - float last_scf; - - push_wmops( "create_conc_noise" ); - - hStereoMdct = hCPE->hStereoMdct; - st = hCPE->hCoreCoder[idchan]; - hTonalMDCTConc = st->hTonalMDCTConc; - hFdCngCom = st->hFdCngDec->hFdCngCom; - rnd = &hStereoMdct->noise_seeds_channels[idchan]; - rnd_c = &hStereoMdct->noise_seed_common; - - /* determine start bin for IGF */ - if ( st->igf == 0 ) - { - if ( st->narrowBand == 0 ) - { - /* minimum needed for output with sampling rates lower then the - nominal sampling rate */ - crossOverFreq = min( L_frameTCX, L_frame ); - } - else - { - crossOverFreq = L_frameTCX; - } - } - else - { - crossOverFreq = min( st->hIGFDec->infoIGFStartLine, L_frameTCX ); - } - - /* for tonal mdct concealment with tonal components above the crossover frequency, conditionally raise the frequency index until which noise is generated */ - max_noise_line = crossOverFreq; - if ( st->tonal_mdct_plc_active ) - { - max_noise_line = max( max_noise_line, hTonalMDCTConc->pTCI->upperIndex[hTonalMDCTConc->pTCI->numIndexes - 1] + 1 ); - } - - /* first lost frame is handled separately */ - if ( !hTonalMDCTConc->lastBlockData.blockIsConcealed ) - { - *rnd = 1977 + idchan; - /* will be set twice when looping over two channels, but does not matter */ - *rnd_c = 1979; - } - - // if ( crossfade_gain == 1.0f ) - if ( crossfade_gain > 0.999f ) /* Due to precision loss */ - { - /* In first frame, noise is weighted with zero anyway, we only need the random numbers for the sign scrambling */ - for ( i = 0; i < max_noise_line; i++ ) - { - *rnd = own_random( rnd ); - concealment_noise[i] = *rnd; - } - - pop_wmops(); - - return; - } - - save_rnd_c = *rnd_c; - - c = sqrtf( hStereoMdct->lastCoh ); - c_inv = sqrtf( 1 - hStereoMdct->lastCoh ); - - /* pre-compute the noise shape for later weighting of the noise spectra */ - cngNoiseLevelPtr = &hFdCngCom->cngNoiseLevel_flt[0]; - inc = ( st->core > TCX_20_CORE ) ? 2 : 1; - start_idx = hFdCngCom->startBand / inc; - stop_idx = hFdCngCom->stopFFTbin / inc; - - for ( i = 0; i < start_idx; i++ ) - { - noise_shape_buffer[i] = 0.0f; - } - for ( ; i < stop_idx; i++, cngNoiseLevelPtr += inc ) - { - noise_shape_buffer[i] = sqrtf( *( cngNoiseLevelPtr ) ); - } - - last_scf = sqrtf( *( cngNoiseLevelPtr - inc ) ); - - for ( ; i < max_noise_line; i++ ) - { - noise_shape_buffer[i] = last_scf; - } - - /* fill the noise vector */ - hTonalMDCTConc->curr_noise_nrg_flt = MDCT_ST_PLC_FADEOUT_MIN_NOISE_NRG; - if ( noise_gen_mode == EQUAL_CORES || ( ( noise_gen_mode == TCX20_IN_0_TCX10_IN_1 && idchan == 0 ) || ( noise_gen_mode == TCX10_IN_0_TCX20_IN_1 && idchan == 1 ) ) ) - { - /* current channel is TCX20 -> generate noise for "full-length" spectrum */ - for ( i = 0; i < max_noise_line; i++ ) - { - *rnd = own_random( rnd ); - *rnd_c = own_random( rnd_c ); - - concealment_noise[i] = ( c_inv * *rnd + c * *rnd_c ) * noise_shape_buffer[i]; - hTonalMDCTConc->curr_noise_nrg_flt += concealment_noise[i] * concealment_noise[i]; - } - } - else /* ( ( noise_gen_mode == TCX10_IN_0_TCX20_IN_1 && idchan == 0 ) || ( noise_gen_mode == TCX20_IN_0_TCX10_IN_1 && idchan == 1 ) ) */ - { - /* current channel is TCX10 and the other is TCX20 -> generate noise for "half-length" spectrum, but "increment" mid seed twice, to have the same seed in mid as the other (TCX20) channel for next frame */ - for ( i = 0; i < max_noise_line; i++ ) - { - *rnd = own_random( rnd ); - *rnd_c = own_random( rnd_c ); - - concealment_noise[i] = ( c_inv * *rnd + c * *rnd_c ) * noise_shape_buffer[i]; - hTonalMDCTConc->curr_noise_nrg_flt += concealment_noise[i] * concealment_noise[i]; - - *rnd_c = own_random( rnd_c ); - } - } - - if ( st->tonal_mdct_plc_active ) - { - for ( i = crossOverFreq; i < max( crossOverFreq, hTonalMDCTConc->pTCI->lowerIndex[hTonalMDCTConc->pTCI->numIndexes - 1] ); ++i ) - { - concealment_noise[i] *= 0.0f; - } - } - - /* restore common seed - - after finishing the first channel - - after a first subframe if the current channel is TCX10 */ - if ( ( idchan == 0 && ( core == TCX_20 || ( core == TCX_10 && subframe_idx == 1 ) ) ) || ( core == TCX_10 && subframe_idx == 0 ) ) - { - *rnd_c = save_rnd_c; - } - - st->seed_tcx_plc = *rnd; - - pop_wmops(); - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -void TonalMdctConceal_whiten_noise_shape_ivas( - Decoder_State *st, - const int16_t L_frame, - const TONALMDCTCONC_NOISE_SHAPE_WHITENING_MODE whitening_mode ) -{ - int16_t inc, start_idx, stop_idx; - float *noiseLevelPtr, *scfs_bg, *scfs_for_shaping; - HANDLE_FD_CNG_COM hFdCngCom; - float whitenend_noise_shape[L_FRAME16k]; - float scfs_int[FDNS_NPTS]; - const PsychoacousticParameters *psychParams; - - push_wmops( "apply_sns_on_noise_shape" ); - - scfs_bg = &st->hTonalMDCTConc->scaleFactorsBackground_flt[0]; - psychParams = st->hTonalMDCTConc->psychParams; - hFdCngCom = st->hFdCngDec->hFdCngCom; - - inc = ( ( whitening_mode == ON_FIRST_LOST_FRAME ? st->core : st->last_core ) > TCX_20_CORE ) ? 2 : 1; - start_idx = hFdCngCom->startBand / inc; - stop_idx = L_frame / inc; - noiseLevelPtr = hFdCngCom->cngNoiseLevel_flt; - - set_zero( whitenend_noise_shape, start_idx ); - for ( int16_t j = start_idx; j < stop_idx; j++, noiseLevelPtr += inc ) - { - whitenend_noise_shape[j] = *noiseLevelPtr; - } - - if ( whitening_mode == ON_FIRST_LOST_FRAME ) - { - float scf[SNS_NPTS]; - sns_compute_scf( whitenend_noise_shape, psychParams, L_frame, scf ); - - sns_interpolate_scalefactors( scfs_int, scf, ENC ); - sns_interpolate_scalefactors( scfs_bg, scf, DEC ); - scfs_for_shaping = &scfs_int[0]; - } - else /* whitening_mode == ON_FIRST_GOOD_FRAME */ - { - scfs_for_shaping = &scfs_bg[0]; - } - - if ( sum_f( scfs_for_shaping, FDNS_NPTS ) > 0.0f ) - { - sns_shape_spectrum( whitenend_noise_shape, psychParams, scfs_for_shaping, L_frame ); - mvr2r( whitenend_noise_shape + start_idx, hFdCngCom->cngNoiseLevel_flt, stop_idx - start_idx ); - } - else - { - set_zero( hFdCngCom->cngNoiseLevel_flt, stop_idx - start_idx ); - } - - pop_wmops(); -} -#endif -#ifdef IVAS_FLOAT_FIXED void TonalMdctConceal_whiten_noise_shape_ivas_fx( Decoder_State *st, const Word16 L_frame, @@ -1553,4 +431,3 @@ void TonalMdctConceal_whiten_noise_shape_ivas_fx( pop_wmops(); } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index a94f65309..f89c5ed1f 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -747,7 +747,6 @@ static void FindPhaseDifferences( /* o } } -#ifdef IVAS_FLOAT_FIXED static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDST[], // Q31 - secondLastMDST_exp @@ -913,7 +912,6 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( move16(); } } -#endif static void CalcPowerSpecAndDetectTonalComponents( TonalMDCTConcealPtr const hTonalMDCTConc, @@ -1229,7 +1227,6 @@ void TonalMDCTConceal_Detect( return; } -#ifdef IVAS_FLOAT_FIXED void TonalMDCTConceal_Detect_ivas_fx( const TonalMDCTConcealPtr hTonalMDCTConc, const Word32 pitchLag, /*15Q16*/ @@ -1390,7 +1387,6 @@ void TonalMDCTConceal_Detect_ivas_fx( return; } -#endif void TonalMDCTConceal_InsertNoise_ivas_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ @@ -2964,7 +2960,6 @@ void TonalMDCTConceal_Apply( return; } -#ifdef IVAS_FLOAT_FIXED void TonalMDCTConceal_Apply_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ @@ -3145,7 +3140,6 @@ void TonalMDCTConceal_Apply_ivas_fx( return; } -#endif void TonalMDCTConceal_SaveTimeSignal( TonalMDCTConcealPtr hTonalMDCTConc, @@ -3166,7 +3160,6 @@ void TonalMDCTConceal_SaveTimeSignal( return; } -#ifdef IVAS_FLOAT_FIXED void TonalMDCTConceal_SaveTimeSignal_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // q_timeSignal @@ -3194,7 +3187,6 @@ void TonalMDCTConceal_SaveTimeSignal_ivas_fx( return; } -#endif static void CalcPowerSpec( const Word32 *mdctSpec, /* i: MDCT spectrum Q31-mdctSpec_exp */ const Word16 mdctSpec_exp, /* i: exponent of MDCT spectrum */ diff --git a/lib_dec/transition_dec.c b/lib_dec/transition_dec.c index a219d8882..d441f6ead 100644 --- a/lib_dec/transition_dec.c +++ b/lib_dec/transition_dec.c @@ -41,727 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------------------* - * Local function prototypes - *----------------------------------------------------------------------*/ - -static void tc_dec( Decoder_State *st, const int16_t L_frame, float exc[], int16_t *T0, int16_t *T0_frac, const int16_t i_subfr, const int16_t tc_subfr, int16_t *position, float bwe_exc[] ); - - -/*-------------------------------------------------------------------* - * transition_dec() - * - * Principal function for TC decoding - *-------------------------------------------------------------------*/ - -void transition_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t tc_subfr, /* i : TC subframe index */ - int16_t *Jopt_flag, /* i : joint optimization flag */ - float *exc, /* o : excitation signal */ - int16_t *T0, /* o : close loop integer pitch */ - int16_t *T0_frac, /* o : close loop fractional part of the pitch */ - int16_t *T0_min, /* i/o: delta search min for sf 2 & 4 */ - int16_t *T0_max, /* i/o: delta search max for sf 2 & 4 */ - float **pt_pitch, /* o : floating pitch values */ - int16_t *position, /* i/o: first glottal impulse position in frame */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - int16_t i, pit_flag, pit_start, pit_limit, index, nBits; - int16_t limit_flag; - int16_t offset; - - /* Set limit_flag to 0 for restrained limits, and 1 for extended limits */ - limit_flag = 0; - - /*---------------------------------------------------------------------* - * zero adaptive contribution (glottal shape codebook search not - * in first subframe(s) ) - *---------------------------------------------------------------------*/ - - if ( tc_subfr > i_subfr + TC_0_192 ) - { - set_f( &exc[i_subfr], 0, L_SUBFR ); - - if ( L_frame == L_FRAME ) - { - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); /* set past excitation buffer to 0 */ - } - else - { - set_f( &bwe_exc[i_subfr * 2], 0, (int16_t) ( L_SUBFR * 2 ) ); /* set past excitation buffer to 0 */ - } - - *T0 = L_SUBFR; - *T0_frac = 0; - **pt_pitch = (float) L_SUBFR; - } - - /*---------------------------------------------------------------------* - * glottal shape codebook search - *---------------------------------------------------------------------*/ - - else if ( ( tc_subfr - i_subfr >= 0 ) && ( tc_subfr - i_subfr <= TC_0_192 ) ) - { - set_f( exc - L_EXC_MEM, 0, L_EXC_MEM ); /* set past excitation buffer to 0 */ - - if ( L_frame == L_FRAME ) - { - set_f( bwe_exc - PIT_MAX * HIBND_ACB_L_FAC, 0, PIT_MAX * HIBND_ACB_L_FAC ); /* set past excitation buffer to 0 */ - } - else - { - set_f( bwe_exc - PIT16k_MAX * 2, 0, PIT16k_MAX * 2 ); /* set past excitation buffer to 0 */ - } - - /* glottal shape codebook contribution construction */ - tc_dec( st, L_frame, exc, T0, T0_frac, i_subfr, tc_subfr, position, bwe_exc ); - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - *Jopt_flag = 1; - } - - /*---------------------------------------------------------------------* - * Regular ACELP Decoding using GENERIC type decoder - * (all subframes following subframe with glottal shape codebook seach) - * - search the position of the 2nd glottal impulse in case that the first - * one is in the 1st subframe (different adaptive contribution - * construction and the pitch period coding is used) - *---------------------------------------------------------------------*/ - - else if ( tc_subfr < i_subfr ) - { - if ( L_frame == L_FRAME ) - { - *Jopt_flag = 1; - - if ( ( i_subfr - tc_subfr >= L_SUBFR ) && ( i_subfr - tc_subfr <= L_SUBFR + TC_0_192 ) ) - { - pit_flag = 0; - } - else - { - pit_flag = L_SUBFR; - } - - if ( tc_subfr == TC_0_0 ) - { - if ( i_subfr == L_SUBFR ) - { - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); - } - - pit_flag = 1; - } - - /*-----------------------------------------------------------------* - * get number of bits for pitch decoding - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - /*------------------------------------------------------------* - * first glottal impulse is in the 1st subframe - *------------------------------------------------------------*/ - - if ( ( i_subfr == L_SUBFR ) && ( tc_subfr >= TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 3rd or 4th subframe - * - build exc[] in 2nd subframe - *--------------------------------------------------------*/ - - *T0 = 2 * L_SUBFR; - *T0_frac = 0; - *Jopt_flag = 0; - - /* set adaptive part of exciation for curent subframe to 0 */ - set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); - - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); - } - else if ( ( i_subfr == L_SUBFR ) && ( tc_subfr == TC_0_64 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 2nd subframe, - * - build exc[] in 2nd subframe - *--------------------------------------------------------*/ - - if ( PIT_MIN > ( *position ) ) - { - pit_start = L_SUBFR - ( *position ); - } - else - { - pit_start = PIT_MIN; - } - - if ( pit_start < PIT_MIN ) - { - pit_start = PIT_MIN; - } - - pit_limit = 2 * pit_start + ( *position ); - - /* 7 bit pitch DECODER */ - index = get_next_indice( st, nBits ); - - *T0 = (int16_t) ( floor( pit_start + index / 2 ) ); - *T0_frac = ( index - ( *T0 - pit_start ) * 2 ) * 2; - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max */ - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 2 * L_SUBFR ) && ( tc_subfr == TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 3rd subframe - * - build exc[] in 3rd subframe - *--------------------------------------------------------*/ - - /* 7bit pitch DECODER */ - pit_start = 2 * L_SUBFR - ( *position ); - - index = get_next_indice( st, nBits ); - - *T0 = (int16_t) ( floor( pit_start + (int16_t) ( index / 2 ) ) ); - *T0_frac = ( index - ( *T0 - pit_start ) * 2 ) * 2; - - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max */ - - /* Find the adaptive codebook vector. ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 2 * L_SUBFR ) && ( tc_subfr == TC_0_192 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 4th subframe - * - build exc[] in 3rd subframe - *--------------------------------------------------------*/ - - *T0 = 4 * L_SUBFR; - *T0_frac = 0; - *Jopt_flag = 0; - - /* set adaptive part of exciation for curent subframe to 0 */ - set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); - - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); - } - else if ( ( i_subfr == 3 * L_SUBFR ) && ( tc_subfr == TC_0_192 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 4th subframe - * - build exc[] in 4th subframe - *--------------------------------------------------------*/ - - pit_start = 3 * L_SUBFR - ( *position ); - pit_limit = 2 * L_FRAME - PIT_MAX - 2 * ( *position ) - 2; - - index = get_next_indice( st, nBits ); - - if ( index < ( pit_limit - pit_start ) * 2 ) - { - *T0 = (int16_t) ( floor( pit_start + ( index / 2 ) ) ); - *T0_frac = ( index - ( ( *T0 ) - pit_start ) * 2 ) * 2; - } - else - { - *T0 = index + pit_limit - ( pit_limit - pit_start ) * 2; - *T0_frac = 0; - } - - /* biterror detection mechanism */ - if ( ( ( *T0 << 2 ) + *T0_frac ) > ( PIT_MAX << 2 ) + 2 ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - st->BER_detect = 1; - } - - /* Find the adaptive codebook vector. ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 3 * L_SUBFR ) && ( tc_subfr == TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse in the 3rd subframe - * build exc[] in 4th subframe - *--------------------------------------------------------*/ - - index = get_next_indice( st, nBits ); - - delta_pit_dec_flt( 2, index, T0, T0_frac, *T0_min ); - - /* Find the adaptive codebook vector. ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - - /*------------------------------------------------------------* - * first glottal impulse is NOT in the 1st subframe, - * or two impulses are in the 1st subframe - *------------------------------------------------------------*/ - else - { - index = get_next_indice( st, nBits ); - - pit_Q_dec_flt( 0, index, nBits, 8, pit_flag, limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - - /* Find the adaptive codebook vector */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation (if non-zero) - *-----------------------------------------------------------------*/ - - if ( *Jopt_flag ) - { - lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); - } - - /*---------------------------------------------------------------------* - * fill the pitch buffer - needed for post-processing and FEC_clas_estim() - *---------------------------------------------------------------------*/ - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - if ( ( tc_subfr >= 2 * L_SUBFR ) && ( i_subfr == 3 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 3; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( tc_subfr == L_SUBFR ) && ( i_subfr == 2 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 2; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( tc_subfr == TC_0_64 ) && ( i_subfr == L_SUBFR ) ) - { - ( *pt_pitch ) -= 1; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( tc_subfr == TC_0_128 ) && ( i_subfr == 2 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 2; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( tc_subfr == TC_0_192 ) && ( i_subfr == 3 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 3; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - } - else /* L_frame == L_FRAME16k */ - { - if ( i_subfr >= 2 * L_SUBFR ) - { - limit_flag = 1; - } - - if ( i_subfr - tc_subfr == L_SUBFR ) - { - limit_T0( L_FRAME16k, 8, 0, limit_flag, *T0, *T0_frac, T0_min, T0_max ); /* find T0_min and T0_max */ - } - - /*-----------------------------------------------------------------* - * get number of bits and index for pitch decoding - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - index = get_next_indice( st, nBits ); - - /*-----------------------------------------------------------------* - * Find adaptive part of excitation, encode pitch period - *-----------------------------------------------------------------*/ - - if ( nBits == 10 ) - { - pit16k_Q_dec_flt( index, nBits, limit_flag, T0, T0_frac, T0_min, T0_max, &st->BER_detect ); - } - else if ( nBits == 8 ) /* tc_subfr==0 && i_subfr==L_SUBFR */ - { - /*-----------------------------------------------------------------------------* - * The pitch range is encoded absolutely with 8 bits and is divided as follows: - * PIT16k_MIN to PIT16k_FR2_TC0_2SUBFR-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT16k_FR2_TC0_2SUBFR to 2*L_SUBFR resolution 1/2 (frac = 0 or 2) - *-----------------------------------------------------------------------------*/ - - if ( index < ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4 ) - { - *T0 = PIT16k_MIN + ( index / 4 ); - *T0_frac = index - ( *T0 - PIT16k_MIN ) * 4; - } - else - { - index -= ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4; - *T0 = PIT16k_FR2_TC0_2SUBFR + ( index / 2 ); - *T0_frac = index - ( *T0 - PIT16k_FR2_TC0_2SUBFR ) * 2; - ( *T0_frac ) *= 2; - } - - /* biterror detection mechanism */ - if ( ( ( *T0 << 2 ) + *T0_frac ) > ( ( 2 * L_SUBFR ) << 2 ) ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - st->BER_detect = 1; - } - } - else if ( nBits == 6 ) - { - delta_pit_dec_flt( 4, index, T0, T0_frac, *T0_min ); - } - if ( nBits == 6 ) - { - limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); /* find T0_min and T0_max */ - } - - /*-----------------------------------------------------------------* - * - find the adaptive codebook vector - * - LP filtering of the adaptive excitation (if non-zero) - *-----------------------------------------------------------------*/ - - if ( ( i_subfr == L_SUBFR ) && ( *T0 == 2 * L_SUBFR ) ) - { - /* no adaptive excitation in the second subframe */ - set_f( &exc[i_subfr], 0, L_SUBFR + 1 ); - - get_next_indice( st, 1 ); /* this bit is actually not needed */ - - set_f( &bwe_exc[i_subfr * 2], 0, L_SUBFR * 2 ); - } - else - { - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - for ( i = 0; i < L_SUBFR * 2; i++ ) - { - bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - *T0 * 2 - (int16_t) ( (float) *T0_frac * 0.5f + 4 + 0.5f ) + 4]; - } - - lp_filt_exc_dec( st, MODE1, i_subfr, L_SUBFR, L_frame, st->acelp_cfg.ltf_mode, exc ); - - *Jopt_flag = 1; - } - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - - /*---------------------------------------------------------------------* - * fill the pitch buffer - needed for post-processing and FEC_clas_estim() - *---------------------------------------------------------------------*/ - - if ( ( i_subfr - tc_subfr == L_SUBFR ) || ( tc_subfr == 0 && i_subfr == 2 * L_SUBFR ) ) - { - index = i_subfr / L_SUBFR; - ( *pt_pitch ) -= index; - - for ( i = 0; i < index; i++ ) - { - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - } - } - } - - return; -} - -/*---------------------------------------------------------------------* - * tc_dec() - * - * Principal function for TC decoding. - * - constructs glottal codebook contribution - * - uses pitch sharpening - * - uses gain_trans - *---------------------------------------------------------------------*/ - -static void tc_dec( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t L_frame, /* i : length of the frame */ - float exc[], /* o : glottal codebook contribution */ - int16_t *T0, /* o : close-loop pitch period */ - int16_t *T0_frac, /* o : close-loop pitch period - fractional part */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t tc_subfr, /* i : TC subframe index */ - int16_t *position, /* o : first glottal impulse position in frame */ - float bwe_exc[] /* o : excitation for SWB TBE */ -) -{ - int16_t i, imp_shape, imp_pos, imp_sign, imp_gain, nBits; - float gain_trans; - int16_t index; - - /*----------------------------------------------------------------* - * find the number of bits - *----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - /*----------------------------------------------------------------* - * decode parameter T0 (pitch period) - *----------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - if ( ( ( i_subfr == 0 ) && ( ( tc_subfr == 0 ) || ( tc_subfr == TC_0_64 ) || ( tc_subfr == TC_0_128 ) || ( tc_subfr == TC_0_192 ) ) ) || ( tc_subfr == L_SUBFR ) ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - } - else if ( ( tc_subfr == 3 * L_SUBFR ) ) - { - i = get_next_indice( st, nBits ); - - if ( nBits == 9 ) - { - abs_pit_dec_flt( 4, i, 0, T0, T0_frac ); - } - else - { - abs_pit_dec_flt( 2, i, 0, T0, T0_frac ); - } - } - else - { - i = get_next_indice( st, nBits ); - - if ( i == 0 ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - } - else - { - if ( tc_subfr == TC_0_0 ) - { - delta_pit_dec_flt( 2, i, T0, T0_frac, PIT_MIN - 1 ); - } - else - { - delta_pit_dec_flt( 0, i, T0, T0_frac, PIT_MIN - 1 ); - } - } - } - } - else /* L_frame == L_FRAME16k */ - { - i = get_next_indice( st, nBits ); - - if ( nBits == 10 ) - { - if ( i < ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ) - { - *T0 = PIT16k_MIN_EXTEND + ( i / 4 ); - *T0_frac = i - ( ( *T0 - PIT16k_MIN_EXTEND ) * 4 ); - } - else - { - index = i - ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4; - *T0 = PIT16k_FR2_EXTEND_10b + ( index / 2 ); - *T0_frac = index - ( *T0 - PIT16k_FR2_EXTEND_10b ) * 2; - ( *T0_frac ) *= 2; - } - } - else if ( nBits == 6 ) - { - *T0 = PIT16k_MIN + ( i / 2 ); - *T0_frac = i - ( *T0 - PIT16k_MIN ) * 2; - *T0_frac *= 2; - } - } - - /*----------------------------------------------------------------* - * decode other TC parameters - *----------------------------------------------------------------*/ - - imp_shape = get_next_indice( st, 3 ); - imp_pos = get_next_indice( st, 6 ); - imp_sign = get_next_indice( st, 1 ); - imp_gain = get_next_indice( st, 3 ); - - /*----------------------------------------------------------------* - * restore gain_trans - * build glottal codebook contribution - *----------------------------------------------------------------*/ - - gain_trans = tbl_gain_trans_tc[imp_gain]; - - if ( imp_sign == 0 ) - { - gain_trans *= -1; - } - - /* build glottal codebook contribution */ - set_f( &exc[i_subfr], 0, L_SUBFR ); - - for ( i = ( imp_pos - L_IMPULSE2 ); i <= ( imp_pos + L_IMPULSE2 ); i++ ) - { - if ( ( i >= 0 ) && ( i < L_SUBFR ) ) - { - exc[i + i_subfr] = glottal_cdbk[(imp_shape) *L_IMPULSE + i - imp_pos + L_IMPULSE2] * gain_trans; - } - } - - /*--------------------------------------------------------------* - * adapt. search of the second impulse in the same subframe - * (when appears) - *--------------------------------------------------------------*/ - - pred_lt4_tc_flt( exc, *T0, *T0_frac, inter4_2, imp_pos, i_subfr ); - - if ( st->hBWE_TD != NULL ) - { - if ( L_frame == L_FRAME ) - { - interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); - } - else - { - interp_code_4over2( &exc[i_subfr], &bwe_exc[i_subfr * 2], L_SUBFR ); - } - } - - *position = imp_pos + i_subfr; - - return; -} - -/*-------------------------------------------------------------------* - * tc_classif() - * - * TC subframe classification decoding - *-------------------------------------------------------------------*/ - -int16_t tc_classif( - Decoder_State *st /* i/o: decoder state structure */ -) -{ - int16_t tc_subfr, indice; - - if ( st->L_frame == L_FRAME ) - { - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = TC_0_0; - } - else - { - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = 0; - - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = TC_0_192; - } - else - { - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = TC_0_64; - } - else - { - tc_subfr = TC_0_128; - } - } - } - else - { - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = L_SUBFR; - } - else - { - if ( get_next_indice( st, 1 ) ) - { - tc_subfr = 2 * L_SUBFR; - } - else - { - tc_subfr = 3 * L_SUBFR; - } - } - } - } - } - else /* L_frame == L_FRAME16k */ - { - indice = get_next_indice( st, 2 ); - - if ( indice < 3 ) - { - tc_subfr = indice * L_SUBFR; - } - else - { - if ( get_next_indice( st, 1 ) == 0 ) - { - tc_subfr = 3 * L_SUBFR; - } - else - { - tc_subfr = 4 * L_SUBFR; - } - } - } - - return ( tc_subfr ); -} -#endif diff --git a/lib_dec/transition_dec_fx.c b/lib_dec/transition_dec_fx.c index ab6a76cac..c7c5b5ab8 100644 --- a/lib_dec/transition_dec_fx.c +++ b/lib_dec/transition_dec_fx.c @@ -8,7 +8,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "stl.h" -#ifdef IVAS_FLOAT_FIXED /*----------------------------------------------------------------------* * Local function prototypes *----------------------------------------------------------------------*/ @@ -910,5 +909,3 @@ Word16 tc_classif_fx( /*o: Q0*/ return ( tc_subfr ); } - -#endif diff --git a/lib_dec/updt_dec.c b/lib_dec/updt_dec.c index ac44966d5..2b370b05d 100644 --- a/lib_dec/updt_dec.c +++ b/lib_dec/updt_dec.c @@ -42,738 +42,3 @@ #include "cnst.h" #include #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * updt_dec() - * - * Common updates (all frame types) - *-------------------------------------------------------------------*/ - -void updt_dec( - Decoder_State *st, /* i/o: state structure */ - const float *old_exc, /* i : buffer of excitation */ - const float *pitch_buf, /* i : floating pitch values for each subframe */ - const float Es_pred, /* i : predicited scaled innovation energy */ - const float *Aq, /* i : A(z) quantized for all subframes */ - const float *lsf_new, /* i : current frame LSF vector */ - const float *lsp_new, /* i : current frame LSP vector */ - const float voice_factors[], /* i : voicing factors */ - const float *old_bwe_exc, /* i : buffer of excitation */ - const float *gain_buf /* o : floating pitch gain for each subframe */ -) -{ - int16_t i; - int16_t tmp_seed; - - HQ_DEC_HANDLE hHQ_core = st->hHQ_core; - - /* update old excitation buffer */ - mvr2r( &old_exc[st->L_frame], st->old_exc, L_EXC_MEM_DEC ); - if ( !st->Opt_AMR_WB && st->hBWE_TD != NULL ) - { - mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); - } - - /* update old LSP and LSF vector */ - mvr2r( lsf_new, st->lsf_old, M ); - mvr2r( lsp_new, st->lsp_old, M ); - - /* update last coding type */ - st->last_coder_type = st->coder_type; - if ( st->coder_type == INACTIVE || ( st->bpf_off == 1 && st->coder_type != AUDIO && st->coder_type != TRANSITION ) ) - { - /* overwrite previous coding type to help FEC */ - st->last_coder_type = UNVOICED; - } - - if ( st->hGSCDec != NULL ) - { - if ( ( st->coder_type != AUDIO || st->Last_GSC_noisy_speech_flag != 0 ) && st->hGSCDec->Last_GSC_pit_band_idx > 0 ) - { - st->hGSCDec->Last_GSC_pit_band_idx = 0; /*The temporal contribution of the GSC is meaningless after 1 frame lost for inactive & unvoiced content */ - } - } - - /* this ensures that st->last_coder_type is never set to INACTIVE in case of AVQ inactive because the FEC does not distinguish between GSC inactive and AVQ inactive */ - if ( st->coder_type == INACTIVE && st->total_brate > ACELP_24k40 ) - { - st->last_coder_type = GENERIC; - } - - if ( st->Opt_AMR_WB && st->coder_type == INACTIVE && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) - { - /* overwrite previous coding type to help FEC */ - st->last_coder_type = UNVOICED; - st->last_voice_factor = voice_factors[NB_SUBFR - 1]; - } - - if ( !st->Opt_AMR_WB ) - { - /* update voicing factor of TBE to help FEC */ - if ( st->L_frame == L_FRAME ) - { - st->last_voice_factor = voice_factors[NB_SUBFR - 1]; - } - else /* L_frame == L_FRAME16k */ - { - st->last_voice_factor = voice_factors[NB_SUBFR16k - 1]; - } - } - - if ( st->hGSCDec != NULL && st->coder_type != AUDIO && st->coder_type != INACTIVE ) - { - st->hGSCDec->noise_lev = NOISE_LEVEL_SP3; - set_f( st->hGSCDec->old_y_gain, 0.0f, MBANDS_GN ); - - for ( i = 0; i < L_FRAME; i++ ) - { - tmp_seed = st->hGSCDec->seed_tcx; - st->hGSCDec->Last_GSC_spectrum[i] = own_random( &tmp_seed ) / PCM16_TO_FLT_FAC; - } - } - - /* update last GSC SWB speech flag for FEC */ - st->Last_GSC_noisy_speech_flag = st->GSC_noisy_speech; - - /* update counter for FEC pitch estimate */ - st->upd_cnt++; - if ( st->upd_cnt > MAX_UPD_CNT ) - { - st->upd_cnt = MAX_UPD_CNT; - } - - mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); - mvr2r( pitch_buf, &st->old_pitch_buf[st->L_frame / L_SUBFR], st->L_frame / L_SUBFR ); - mvr2r( &st->mem_pitch_gain_float[2], &st->mem_pitch_gain_float[st->L_frame / L_SUBFR + 2], st->L_frame / L_SUBFR ); - - if ( st->L_frame == L_FRAME ) - { - st->mem_pitch_gain_float[2] = gain_buf[3]; - st->mem_pitch_gain_float[3] = gain_buf[2]; - st->mem_pitch_gain_float[4] = gain_buf[1]; - st->mem_pitch_gain_float[5] = gain_buf[0]; - } - else - { - st->mem_pitch_gain_float[2] = gain_buf[4]; - st->mem_pitch_gain_float[3] = gain_buf[3]; - st->mem_pitch_gain_float[4] = gain_buf[2]; - st->mem_pitch_gain_float[5] = gain_buf[1]; - st->mem_pitch_gain_float[6] = gain_buf[0]; - } - - /* FEC - update adaptive LSF mean vector */ - mvr2r( st->lsfoldbfi0, st->lsfoldbfi1, M ); - mvr2r( lsf_new, st->lsfoldbfi0, M ); - - /* update of pitch and voicing information for HQ FEC */ - if ( hHQ_core != NULL && st->last_core != HQ_CORE ) - { - if ( !st->Opt_AMR_WB && st->coder_type == UNVOICED ) - { - hHQ_core->HqVoicing = 0; - } - else - { - hHQ_core->HqVoicing = 1; - } - } - - /* SC-VBR */ - st->old_ppp_mode = st->last_ppp_mode_dec; - st->last_ppp_mode_dec = st->ppp_mode_dec; - st->last_nelp_mode_dec = st->nelp_mode_dec; - st->last_vbr_hw_BWE_disable_dec = st->vbr_hw_BWE_disable_dec; - - /* core switching updates */ - mvr2r( &Aq[( st->L_frame / L_SUBFR - 1 ) * ( M + 1 )], st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = Es_pred; - - return; -} - -/*-------------------------------------------------------------------* - * updt_IO_switch() - * - * Common updates for AMR-WB IO mode and EVS primary mode switching - *-------------------------------------------------------------------*/ - -void updt_IO_switch_dec( - const int16_t output_frame, /* i : output frame length */ - Decoder_State *st /* i/o: state structure */ -) -{ - float xsp_tmp[M]; - - if ( st->last_core == AMR_WB_CORE ) /* switching to EVS primary mode */ - { - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ - mvr2r( stable_LSP, xsp_tmp, M ); - isf2lsf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); - mvr2r( stable_LSP, xsp_tmp, M ); - isp2lsp( st->lsp_old, st->lsp_old, xsp_tmp, M ); - - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode uses LSF(LSP) */ - mvr2r( stable_LSP, xsp_tmp, M ); - if ( st->hTdCngDec != NULL ) - { - isp2lsp( st->lspCNG, st->lspCNG, xsp_tmp, M ); - st->hTdCngDec->old_enr_index = min( (int16_t) ( (float) st->hTdCngDec->old_enr_index / STEP_AMR_WB_SID * STEP_SID ), 127 ); - } - - /* reset TD BWE buffers */ - if ( st->hBWE_TD != NULL ) - { - set_f( st->hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); - set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; - - wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - wb_tbe_extras_reset_synth( st->hBWE_TD->state_lsyn_filt_shb, st->hBWE_TD->state_lsyn_filt_dwn_shb, st->hBWE_TD->mem_resamp_HB ); - - if ( output_frame >= L_FRAME32k ) - { - swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &st->hBWE_TD->tbe_demph, &st->hBWE_TD->tbe_premph, st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); - - /* reset GainShape delay for SWB TBE FEC */ - set_f( st->hBWE_TD->GainShape_Delay, 0, NUM_SHB_SUBFR / 2 ); - st->hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; - st->hBWE_TD->prev_mix_factor = 1.0f; - - swb_tbe_reset_synth( st->hBWE_TD->genSHBsynth_Hilbert_Mem, st->hBWE_TD->genSHBsynth_state_lsyn_filt_shb_local ); - } - - if ( output_frame == L_FRAME48k ) - { - set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - st->hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_synth( st->hBWE_TD->fbbwe_hpf_mem, &st->hBWE_TD->prev_fbbwe_ratio ); - } - } - st->last_voice_factor = 0.0f; - - /* reset FD BWE buffers */ - if ( st->hBWE_FD != NULL ) - { - st->hBWE_FD->prev_mode = NORMAL; - st->hBWE_FD->prev_Energy = 0.0f; - st->hBWE_FD->prev_Energy_wb = 0.0f; - st->hBWE_FD->prev_L_swb_norm = 8; - st->hBWE_FD->prev_frica_flag = 0; - set_f( st->hBWE_FD->mem_imdct, 0, L_FRAME48k ); - st->hBWE_FD->prev_td_energy = 0.0f; - st->hBWE_FD->prev_weight = 0.2f; - set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); - - if ( output_frame == L_FRAME48k ) - { - st->hBWE_FD->prev_fb_ener_adjust = 0.0f; - } - } - - /* HQ core buffers */ - set_f( st->delay_buf_out, 0, HQ_DELTA_MAX * HQ_DELAY_COMP ); - - /* reset the unvoiced/audio signal improvement memories */ - st->hGSCDec->seed_tcx = 15687; - - st->use_acelp_preq = 0; - if ( st->last_flag_filter_NB == 1 ) - { - st->cldfbSyn->bandsToZero = 0; - } - st->last_active_bandsToZero_bwdec = 0; - st->perc_bwddec_float = 0.0f; - st->last_flag_filter_NB = 0; - st->active_frame_cnt_bwddec = 0; - set_s( st->flag_buffer, 0, 20 ); - } - else /* switching to AMR-WB IO mode */ - { - float tmpF[MAX_LT]; - - /* ISF Q memories */ - set_f( st->mem_MA, 0, M ); - - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ - mvr2r( stable_ISP, xsp_tmp, M ); - lsf2isf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); - mvr2r( stable_ISP, xsp_tmp, M ); - lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); - - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ - mvr2r( stable_ISP, xsp_tmp, M ); - if ( st->hTdCngDec != NULL ) - { - lsp2isp( st->lspCNG, st->lspCNG, xsp_tmp, M ); - st->hTdCngDec->old_enr_index = min( (int16_t) ( (float) st->hTdCngDec->old_enr_index / STEP_SID * STEP_AMR_WB_SID ), 63 ); - } - - /* HF synthesis memories */ - st->ng_ener_ST = -51.0f; - - /* reset the unvoiced/audio signal improvement memories */ - st->hGSCDec->seed_tcx = 15687; - - st->psf_lp_noise = st->lp_noise_float; - - /* AMR-WB IO init */ - mvr2r( st->hAmrwb_IO->lt_diff_etot, tmpF, MAX_LT ); - amr_wb_dec_init( st->hAmrwb_IO ); - mvr2r( tmpF, st->hAmrwb_IO->lt_diff_etot, MAX_LT ); - - hf_synth_amr_wb_reset( st->hAmrwb_IO, st->hBWE_zero ); - - /* reset VBR signaling */ - st->last_ppp_mode_dec = 0; - st->last_nelp_mode_dec = 0; - st->ppp_mode_dec = 0; - st->nelp_mode_dec = 0; - } - - /* CNG - reset */ - if ( st->hTdCngDec != NULL ) - { - st->hTdCngDec->ho_hist_size = 0; - } - - /* ISF Q memories */ - mvr2r( UVWB_Ave, st->mem_AR, M ); - - /* FEC - update adaptive LSF mean vector */ - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - - return; -} - -/*-------------------------------------------------------------------* - * updt_bw_switching() - * - * Updates for BW switching - *-------------------------------------------------------------------*/ - -void updt_bw_switching( - Decoder_State *st, /* i/o: decoder state structure */ - const float *synth /* i : float synthesis signal */ -) -{ - if ( st->output_Fs == 32000 && st->bwidth == SWB ) - { - calc_tilt_bwe( synth, &( st->tilt_swb ), L_FRAME32k ); - } - - st->prev_enerLH = st->enerLH; - st->prev_enerLL = st->enerLL; - st->last_bwidth = st->bwidth; - - if ( st->core == ACELP_CORE ) - { - if ( st->bwidth == WB && st->bws_cnt == 0 ) - { - st->last_inner_frame = L_FRAME16k; - } - else - { - st->last_inner_frame = L_FRAME32k; - } - } - else - { - if ( st->last_inner_frame >= L_FRAME16k && inner_frame_tbl[st->bwidth] <= L_FRAME16k && st->bws_cnt > 0 && st->bws_cnt < N_WS2N_FRAMES ) - { - st->last_inner_frame = st->last_inner_frame; - } - else - { - st->last_inner_frame = inner_frame_tbl[st->bwidth]; - } - } - - st->prev_bws_cnt = st->bws_cnt; - - return; -} - - -/*-------------------------------------------------------------------* - * updt_dec_common() - * - * Common updates for MODE1 and MODE2 - *-------------------------------------------------------------------*/ - -void updt_dec_common( - Decoder_State *st, /* i/o: decoder state structure */ - const int16_t hq_core_type, /* i : HQ core type */ - const int16_t concealWholeFrameTmp, /* i : concealWholeFrameTmp flag */ - const float *synth /* i : decoded synthesis */ -) -{ - int16_t i; - float log_energy, log_energy_diff; - int16_t output_frame; - - st->last_codec_mode = st->codec_mode; - st->last_extl = st->extl; - st->last_L_frame = st->L_frame; - st->prev_old_bfi = st->prev_bfi; - st->prev_bfi = st->bfi; - if ( st->core != AMR_WB_CORE ) - { - st->old_bfi_cnt = st->nbLostCmpt; - } - st->last_con_tcx = st->con_tcx; - st->con_tcx = 0; - - if ( st->hHQ_nbfec != NULL ) - { - st->hHQ_nbfec->prev_last_core = st->last_core; - } - - if ( st->use_partial_copy ) - { - st->prev_rf_frame_type = st->rf_frame_type; - } - else - { - st->prev_rf_frame_type = INACTIVE; - } - - if ( st->hTcxDec != NULL ) - { - st->hTcxDec->tcxConceal_recalc_exc = 0; - } - - if ( ( st->rf_frame_type >= RF_TCXFD && st->rf_frame_type <= RF_TCXTD2 && st->use_partial_copy && st->bfi ) || !st->bfi ) - { - if ( st->bfi && st->last_good <= UNVOICED_TRANSITION && st->clas_dec > UNVOICED_TRANSITION && st->last_con_tcx && st->hTcxDec != NULL ) - { - st->hTcxDec->tcxConceal_recalc_exc = 1; - } - st->last_good = st->clas_dec; - } - - if ( st->m_frame_type == ACTIVE_FRAME && ( !st->bfi || st->use_partial_copy ) ) - { - st->rf_flag_last = st->rf_flag; - } - - if ( st->codec_mode == MODE1 ) - { - if ( !st->bfi && ( st->core_brate > SID_2k40 || ( st->core_brate > SID_1k75 && st->core == AMR_WB_CORE ) ) ) - { - st->last_active_brate = st->total_brate; - } - if ( !st->bfi || st->element_mode == EVS_MONO ) - { - st->last_core = st->core; - } - st->last_core_bfi = st->core; /* also required for clean channel decoding */ - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->last_hq_core_type = hq_core_type; - } - } - else if ( st->codec_mode == MODE2 ) - { - if ( !st->bfi && st->last_is_cng == 0 ) - { - st->last_active_brate = st->total_brate; - } - - if ( st->m_frame_type != ACTIVE_FRAME ) - { - st->last_is_cng = 1; - } - - if ( !st->bfi ) - { - st->last_core = st->core; - } - st->last_core_bfi = st->core; /* also required for clean channel decoding */ - } - - st->last_core_brate = st->core_brate; - - /* save synthesis for core switching */ - if ( st->element_mode == EVS_MONO && st->core != AMR_WB_CORE ) - { - mvr2r( synth + NS2SA( st->output_Fs, ACELP_LOOK_NS + DELAY_BWE_TOTAL_NS ), st->old_synth_sw, NS2SA( st->output_Fs, FRAME_SIZE_NS - ACELP_LOOK_NS - DELAY_BWE_TOTAL_NS ) ); - } - - /* Store long-term estimates of stab_fac and log energy diff to estimate env_stab in case of core switch ACELP/TCX->HQ */ - if ( st->element_mode != EVS_MONO ) - { - output_frame = NS2SA( st->output_Fs, FRAME_SIZE_NS ); - log_energy = log2f( ( sum2_f( synth, output_frame ) / output_frame ) + 1.0f ); - log_energy_diff = fabsf( st->log_energy_old - log_energy ); - st->log_energy_old = log_energy; - st->log_energy_diff_lt = ENV_SMOOTH_FAC * log_energy_diff + ( 1.0f - ENV_SMOOTH_FAC ) * st->log_energy_diff_lt; - if ( st->core == HQ_CORE ) - { - st->stab_fac = min( 1, ( STAB_FAC_EST1 + ( STAB_FAC_EST2 * st->hHQ_core->mem_env_delta ) + ( STAB_FAC_EST3 * st->log_energy_diff_lt ) ) ); - st->stab_fac = max( 0, st->stab_fac ); - } - st->stab_fac_smooth_lt = ENV_SMOOTH_FAC * st->stab_fac + ( 1.0f - ENV_SMOOTH_FAC ) * st->stab_fac_smooth_lt; - } - - if ( ( st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) || ( st->tcxonly && ( st->codec_mode == MODE2 || st->element_mode > EVS_MONO ) ) ) - { - /* reset LP memories */ - set_zero( st->mem_MA, M ); - if ( st->sr_core == INT_FS_16k ) - { - mvr2r( GEWB2_Ave, st->mem_AR, M ); - } - else - { - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - } - - if ( st->codec_mode == MODE2 ) - { - if ( st->use_partial_copy && st->rf_frame_type == RF_NELP ) - { - st->last_nelp_mode_dec = 1; - } - else - { - st->last_nelp_mode_dec = 0; - } - } - - st->prev_use_partial_copy = st->use_partial_copy; - - st->prev_tilt_code_dec = 0.0f; - for ( i = 0; i < NB_SUBFR; i++ ) - { - st->prev_tilt_code_dec += st->tilt_code_dec[i] * 0.25f; - } - - if ( st->core == HQ_CORE ) - { - st->prev_coder_type = GENERIC; - } - else if ( st->core != AMR_WB_CORE ) - { - st->prev_coder_type = st->coder_type; - } - - /* CNG updates */ - if ( ( st->core_brate > SID_2k40 || ( st->core_brate > SID_1k75 && st->core == AMR_WB_CORE ) ) && st->first_CNG == 1 && st->hTdCngDec != NULL ) - { - if ( st->hTdCngDec->act_cnt >= BUF_DEC_RATE ) - { - st->hTdCngDec->act_cnt = 0; - } - - st->hTdCngDec->act_cnt++; - - if ( st->hTdCngDec->act_cnt == BUF_DEC_RATE && st->hTdCngDec->ho_hist_size > 0 ) - { - st->hTdCngDec->ho_hist_size--; - } - - if ( ++( st->hTdCngDec->act_cnt2 ) >= MIN_ACT_CNG_UPD ) - { - st->hTdCngDec->act_cnt2 = MIN_ACT_CNG_UPD; - } - } - - if ( st->core_brate <= SID_2k40 && st->first_CNG == 0 && ( st->cng_type == LP_CNG || st->element_mode == IVAS_CPE_MDCT ) ) - { - st->first_CNG = 1; - } - - /* synchronisation of CNG seeds */ - if ( st->hTdCngDec != NULL && ( st->bfi || ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) && st->core != AMR_WB_CORE ) - { - own_random( &( st->hTdCngDec->cng_seed ) ); - own_random( &( st->hTdCngDec->cng_ener_seed ) ); - } - - /* general updates */ - st->last_flag_cna = st->flag_cna; - if ( st->hFdCngDec != NULL ) - { - st->hFdCngDec->hFdCngCom->frame_type_previous = st->m_frame_type; - } - - if ( st->element_mode > EVS_MONO ) - { - st->m_old_frame_type = st->m_frame_type; - } - - /* update bandwidth switching parameters */ - if ( st->core == AMR_WB_CORE ) - { - st->last_bwidth = WB; - - st->prev_bws_cnt = 0; - st->bws_cnt = 0; - st->bws_cnt1 = 0; - } - else if ( ( st->codec_mode == MODE1 ) && ( ( st->core_brate > SID_2k40 ) || ( st->element_mode == EVS_MONO ) ) ) - { - updt_bw_switching( st, synth ); - } - else - { - st->last_bwidth = st->bwidth; - st->prev_bws_cnt = st->bws_cnt; - } - - if ( st->hTcxDec != NULL && st->enablePlcWaveadjust && !concealWholeFrameTmp && st->core != AMR_WB_CORE ) - { - /* update the parameters used in waveform adjustment */ - concealment_update2( synth, st->hPlcInfo, st->hTcxDec->L_frameTCX ); - } - - st->last_total_brate_ber = st->total_brate; - if ( !st->bfi ) - { - st->last_total_brate = st->total_brate; - st->last_bits_frame_nominal = st->bits_frame_nominal; - } - - st->last_low_rate_mode = st->low_rate_mode; - - /*-----------------------------------------------------------------* - * Increase the counter of initialization frames - * Limit the max number of init. frames - *-----------------------------------------------------------------*/ - - if ( st->ini_frame < MAX_FRAME_COUNTER ) - { - ( st->ini_frame )++; - } - - return; -} - -/*-------------------------------------------------------------------* - * update_decoder_LPD_cng_flt() - * - * - *--------------------------------------------------------------------*/ - -void update_decoder_LPD_cng_flt( - Decoder_State *st, - float *timeDomainBuffer, - float *A, - float *bpf_noise_buf ) -{ - int16_t i; - float lsp[M], lsf[M], pitch[NB_SUBFR16k]; - float *synth, synth_buf[M + 1 + L_FRAME_MAX + L_FRAME_MAX / 2]; - float tmp; - float buf_synth[OLD_SYNTH_SIZE_DEC + L_FRAME_MAX + M]; - int16_t pf_pitch[NB_SUBFR16k]; - float pf_gain[NB_SUBFR16k]; - TCX_DEC_HANDLE hTcxDec = st->hTcxDec; - - synth = synth_buf + ( 1 + M ); - - /* LPC -> LSP/lsp */ - a2lsp_stab( A, lsp, st->lsp_old ); - - /* LSP/lsp -> LSF/lsf */ - if ( st->L_frame == L_FRAME16k ) - { - lsp2lsf( lsp, lsf, M, INT_FS_16k ); - } - else - { - lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); - } - - if ( hTcxDec != NULL ) - { - mvr2r( hTcxDec->old_synth_float, buf_synth, hTcxDec->old_synth_len ); - mvr2r( timeDomainBuffer, buf_synth + hTcxDec->old_synth_len, st->L_frame ); - - /* Update synth memory */ - mvr2r( st->syn_float, synth_buf, 1 + M ); - mvr2r( timeDomainBuffer, synth, st->L_frame ); - mvr2r( synth + st->L_frame - ( 1 + M ), st->syn_float, 1 + M ); - mvr2r( hTcxDec->old_synth_float + st->L_frame, hTcxDec->old_synth_float, hTcxDec->old_synth_len - st->L_frame ); - mvr2r( synth, hTcxDec->old_synth_float + hTcxDec->old_synth_len - st->L_frame, st->L_frame ); - - mvr2r( synth + st->L_frame - ( st->L_frame / 2 ), hTcxDec->old_syn_Overl_float, st->L_frame / 2 ); - - hTcxDec->tcxltp_last_gain_unmodified_float = 0.0f; - } - - /* Update pre-synth memory */ - tmp = synth[-( 1 + M )]; - preemph( synth - M, st->preemph_fac_float, M + st->L_frame, &tmp ); - mvr2r( synth + st->L_frame - M, st->mem_syn2, M ); - mvr2r( synth + st->L_frame - L_SYN_MEM, st->mem_syn_r_float, L_SYN_MEM ); - - /* Update excitation memory */ - assert( st->L_frame < L_EXC_MEM_DEC ); - mvr2r( st->old_exc + st->L_frame, st->old_exc, L_EXC_MEM_DEC - st->L_frame ); - residu( A, M, synth, st->old_exc + L_EXC_MEM_DEC - st->L_frame, st->L_frame ); - - /* Update LPC-related memories */ - mvr2r( lsp, st->lsp_old, M ); - mvr2r( lsf, st->lsf_old, M ); - mvr2r( lsp, st->lspold_uw_float, M ); - mvr2r( lsf, st->lsfold_uw_float, M ); - - hTcxDec->envWeighted = 0; - mvr2r( A, st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = 0; - - /* Reset acelp memories */ - set_zero( st->dispMem, 8 ); - st->tilt_code = TILT_CODE_FLT; - st->gc_threshold = 0.0f; - - /* Update ace/tcx mode */ - st->core = ACELP_CORE; - st->last_is_cng = 1; - - /* Reset TCX overlap */ - if ( st->hTcxCfg != NULL ) - { - st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - } - - /* For BWE and Postfilter */ - mvr2r( A, &( st->mem_Aq_float[0] ), M + 1 ); - mvr2r( A, &( st->mem_Aq_float[( M + 1 )] ), M + 1 ); - mvr2r( A, &( st->mem_Aq_float[2 * ( M + 1 )] ), M + 1 ); - mvr2r( A, &( st->mem_Aq_float[3 * ( M + 1 )] ), M + 1 ); - if ( st->L_frame == L_FRAME16k ) - { - mvr2r( A, &( st->mem_Aq_float[4 * ( M + 1 )] ), M + 1 ); - } - - /* Update for concealment */ - st->nbLostCmpt = 0; - st->prev_old_bfi = 0; - - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf[i] ) / 3; - st->lsfoldbfi1[i] = st->lsfoldbfi0[i]; - st->lsfoldbfi0[i] = lsf[i]; - } - - set_f( pitch, (float) L_SUBFR, NB_SUBFR16k ); - - FEC_clas_estim( synth, pitch, st->L_frame, UNVOICED, st->codec_mode, st->mem_syn_clas_estim, &( st->clas_dec ), &st->lp_ener_bfi, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1.0f, st->narrowBand, CLASSIFIER_ACELP, 0, st->preemph_fac_float, st->tcxonly, st->last_core_brate, -1 ); - - /* Postfiltering */ - pf_pitch[0] = pf_pitch[1] = pf_pitch[2] = pf_pitch[3] = pf_pitch[4] = L_SUBFR; - pf_gain[0] = pf_gain[1] = pf_gain[2] = pf_gain[3] = pf_gain[4] = 0.f; - st->bpf_gain_param = 0; - - post_decoder_flt( st, buf_synth, pf_gain, pf_pitch, timeDomainBuffer, bpf_noise_buf ); - - return; -} -#endif diff --git a/lib_dec/updt_dec_fx.c b/lib_dec/updt_dec_fx.c index 38cc6d4b2..a7341ddc9 100644 --- a/lib_dec/updt_dec_fx.c +++ b/lib_dec/updt_dec_fx.c @@ -9,7 +9,6 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * updt_dec() * @@ -768,7 +767,6 @@ void updt_dec_common_fx( } -#ifdef IVAS_FLOAT_FIXED static void ivas_updt_bw_switching_fx( Decoder_State *st_fx, /* i/o: decoder state structure */ const Word32 *synth, /* i : fixed point synthesis signal Qpost */ @@ -1194,7 +1192,6 @@ void ivas_updt_dec_common_fx( return; } -#endif /*-------------------------------------------------------------------* * update_decoder_LPD_cng() @@ -1383,4 +1380,3 @@ void update_decoder_LPD_cng( return; } -#endif diff --git a/lib_dec/vlpc_1st_dec.c b/lib_dec/vlpc_1st_dec.c index be759eb61..97a511fb6 100644 --- a/lib_dec/vlpc_1st_dec.c +++ b/lib_dec/vlpc_1st_dec.c @@ -40,30 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * vlpc_1st_dec_flt() - * - * - *------------------------------------------------------------------*/ - -void vlpc_1st_dec_flt( - const int16_t index, /* i : codebook index */ - float *lsfq, /* i/o: i:prediction o:quantized lsf */ - const int32_t sr_core ) -{ - int16_t i; - const float *p_dico; - float scale = ( (float) sr_core ) / INT_FS_12k8; - - assert( index < 256 ); - - p_dico = &dico_lsf_abs_8b_flt[index * M]; - for ( i = 0; i < M; i++ ) - { - lsfq[i] += scale * *p_dico++; - } - - return; -} -#endif diff --git a/lib_dec/vlpc_1st_dec_fx.c b/lib_dec/vlpc_1st_dec_fx.c index cd79792c2..f34372453 100644 --- a/lib_dec/vlpc_1st_dec_fx.c +++ b/lib_dec/vlpc_1st_dec_fx.c @@ -8,7 +8,6 @@ #include "prot_fx.h" #include "rom_com.h" -#ifdef IVAS_FLOAT_FIXED void vlpc_1st_dec( Word16 index, /* input: codebook index */ Word16 *lsfq ) /* i/o: i:prediction o:quantized lsf 14Q1*1.28 */ @@ -26,4 +25,3 @@ void vlpc_1st_dec( p_dico++; } } -#endif diff --git a/lib_dec/vlpc_2st_dec.c b/lib_dec/vlpc_2st_dec.c index fdb29ebe6..e748899a9 100644 --- a/lib_dec/vlpc_2st_dec.c +++ b/lib_dec/vlpc_2st_dec.c @@ -38,40 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * vlpc_2st_dec_flt() - * - * - *------------------------------------------------------------------*/ -void vlpc_2st_dec_flt( - float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ - int16_t *indx, /* i : index[] (4 bits per words) */ - const int16_t mode, /* i : 0=abs, >0=rel */ - const int32_t sr_core /* i : internal sampling rate */ -) -{ - int16_t i; - float w[M]; - int16_t xq[M]; - float scale = ( (float) sr_core ) / INT_FS_12k8; - - /* weighting from the 1st stage */ - lsf_weight_2st_flt( lsfq, w, mode, sr_core ); - - /* quantize */ - AVQ_dec_lpc_ivas( indx, xq, 2 ); - - /* quantized lsf */ - for ( i = 0; i < M; i++ ) - { - lsfq[i] += scale * ( w[i] * (float) xq[i] ); - } - - /* reorder */ - v_sort_float( lsfq, 0, M - 1 ); - reorder_lsf( lsfq, LSF_GAP, M, sr_core ); - - return; -} -#endif diff --git a/lib_dec/vlpc_2st_dec_fx.c b/lib_dec/vlpc_2st_dec_fx.c index 871e8cde1..ee3d5ed76 100644 --- a/lib_dec/vlpc_2st_dec_fx.c +++ b/lib_dec/vlpc_2st_dec_fx.c @@ -10,7 +10,6 @@ #include //#endif -#ifdef IVAS_FLOAT_FIXED void vlpc_2st_dec( Word16 *lsfq, /* i/o: i:1st stage o:1st+2nd stage 14Q1*1.28*/ Word16 *indx, /* i : index[] (4 bits per words) */ @@ -68,4 +67,3 @@ void vlpc_2st_dec( return; } -#endif diff --git a/lib_dec/voiced_dec.c b/lib_dec/voiced_dec.c index d54e5c41d..87f19fd33 100644 --- a/lib_dec/voiced_dec.c +++ b/lib_dec/voiced_dec.c @@ -47,233 +47,9 @@ * * Voiced decoder for SC-VBR *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ppp_voiced_decoder( - Decoder_State *st, /* i/o: state structure */ - float *out, /* o : residual signal */ - const float *lpc2, /* i : current frame LPC */ - float *exc, /* i : previous frame excitation */ - float *pitch, /* o : floating pitch values for each subframe */ - const int16_t bfi /* i : BFI flag */ -) -{ - int16_t k, delta_lag_D = 0; - SC_VBR_DEC_HANDLE hSC_VBR; - float upper_cut_off_freq_of_interest = 0, upper_cut_off_freq = 0; - int16_t pl, l; - float interp_delay[3], temp_l, temp_pl, diff; - DTFS_STRUCTURE *TMPDTFS; - DTFS_STRUCTURE *CURRP_Q_D; - DTFS_STRUCTURE *dtfs_temp; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( error = DTFS_new( &TMPDTFS ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &CURRP_Q_D ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &dtfs_temp ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - - hSC_VBR = st->hSC_VBR; - - if ( st->bwidth == NB ) - { - upper_cut_off_freq_of_interest = 3300.0; - upper_cut_off_freq = 4000.0; - } - else if ( st->bwidth == WB ) - { - upper_cut_off_freq_of_interest = 4000.0; - upper_cut_off_freq = 6400.0; - } - - /* Initialization */ - if ( hSC_VBR->firstTime_voiceddec ) - { - hSC_VBR->firstTime_voiceddec = 0; - - hSC_VBR->dtfs_dec_lag = 0; - hSC_VBR->dtfs_dec_nH = 0; - hSC_VBR->dtfs_dec_nH_4kHz = 0; - hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = 3300.0; - hSC_VBR->dtfs_dec_upper_cut_off_freq = 4000.0; - - for ( k = 0; k < MAXLAG_WI; k++ ) - { - hSC_VBR->dtfs_dec_a[k] = 0.0; - hSC_VBR->dtfs_dec_b[k] = 0.0; - } - } - pl = (int16_t) min( rint_new( st->old_pitch_buf[( 2 * NB_SUBFR ) - 1] ), MAX_LAG_PIT ); - delta_lag_D = get_next_indice( st, 5 ); - - l = min( MAX_LAG_PIT, pl + delta_lag_D - 11 ); - - temp_pl = (float) pl; - temp_l = (float) l; - - if ( temp_pl != temp_l ) - { - for ( k = 0; k < NB_SUBFR; k++ ) - { - /* do the linear pitch interp to drive the nb_post_filt_fx */ - Interpol_delay( interp_delay, &( temp_pl ), &( temp_l ), k, frac_4sf ); - pitch[k] = min( MAX_LAG_PIT, max( 19, interp_delay[0] ) ); - } - } - else - { - set_f( pitch, min( MAX_LAG_PIT, max( 19, temp_l ) ), NB_SUBFR ); - } - - if ( st->last_coder_type == UNVOICED ) - { - pl = l; /* if prev frame was sil/uv*/ - } - - if ( pl > (int16_t) anint( 1.85 * l ) ) - { - pl /= 2; - } - - if ( pl * 2 <= PIT_MAX && pl <= (int16_t) anint( 0.54 * l ) ) - { - pl *= 2; - } - - /* Restoring PPP memories when the last frame is non-PPP or full-rate PPP */ - if ( st->last_ppp_mode_dec != 1 ) - { - DTFS_to_fs( exc - pl, pl, dtfs_temp, st->bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); - - hSC_VBR->ph_offset_D = 0.0; - - /* Copy over PREV_CW_D into TMPDTFS */ - DTFS_copy( TMPDTFS, *dtfs_temp ); - - DTFS_car2pol( TMPDTFS ); - - hSC_VBR->lastLgainD = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, TMPDTFS ) ); - hSC_VBR->lastHgainD = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 1104.5, upper_cut_off_freq_of_interest, 1104.5, upper_cut_off_freq, 1.0, TMPDTFS ) ); - - DTFS_to_erb( *TMPDTFS, hSC_VBR->lasterbD ); - } - else - { - /* Copy DTFS related parameters from 'st' to 'dtfs_temp' structure */ - dtfs_temp->lag = hSC_VBR->dtfs_dec_lag; - dtfs_temp->nH = hSC_VBR->dtfs_dec_nH; - dtfs_temp->nH_4kHz = hSC_VBR->dtfs_dec_nH_4kHz; - dtfs_temp->upper_cut_off_freq_of_interest = hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest; - dtfs_temp->upper_cut_off_freq = hSC_VBR->dtfs_dec_upper_cut_off_freq; - - mvr2r( hSC_VBR->dtfs_dec_a, dtfs_temp->a, MAXLAG_WI ); - mvr2r( hSC_VBR->dtfs_dec_b, dtfs_temp->b, MAXLAG_WI ); - } - - CURRP_Q_D->lag = l; - - /* safety check in case of bit errors */ - if ( CURRP_Q_D->lag <= 0 ) - { - CURRP_Q_D->lag = 1; - st->BER_detect = 1; - } - - /* compute nH for lag */ - CURRP_Q_D->nH = (int16_t) floor( upper_cut_off_freq / ( ( (float) INT_FS_12k8 ) / CURRP_Q_D->lag ) ); - diff = ( (float) INT_FS_12k8 ) / CURRP_Q_D->lag; - - if ( upper_cut_off_freq - ( diff * CURRP_Q_D->nH ) >= diff ) - { - CURRP_Q_D->nH++; - } - - CURRP_Q_D->nH_4kHz = (int16_t) floor( 4000.0 / ( INT_FS_12k8 / CURRP_Q_D->lag ) ); - - if ( 4000.0 - ( diff * CURRP_Q_D->nH_4kHz ) >= diff ) - { - CURRP_Q_D->nH_4kHz++; - } - - CURRP_Q_D->upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; - CURRP_Q_D->upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; - - if ( bfi == 0 ) - { - if ( ( error = ppp_quarter_decoder( st, CURRP_Q_D, dtfs_temp->lag, &( hSC_VBR->lastLgainD ), &( hSC_VBR->lastHgainD ), &( hSC_VBR->lasterbD[0] ), bfi, *dtfs_temp ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = WIsyn( *dtfs_temp, CURRP_Q_D, lpc2, &( hSC_VBR->ph_offset_D ), out, (int16_t) L_FRAME, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - - DTFS_copy( dtfs_temp, *CURRP_Q_D ); - - /* Copy DTFS related parameters from 'dtfs_temp' to 'st' structure */ - hSC_VBR->dtfs_dec_lag = dtfs_temp->lag; - hSC_VBR->dtfs_dec_nH = dtfs_temp->nH; - hSC_VBR->dtfs_dec_nH_4kHz = dtfs_temp->nH_4kHz; - hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; - hSC_VBR->dtfs_dec_upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; - - mvr2r( dtfs_temp->a, hSC_VBR->dtfs_dec_a, MAXLAG_WI ); - mvr2r( dtfs_temp->b, hSC_VBR->dtfs_dec_b, MAXLAG_WI ); - - free( TMPDTFS ); - free( CURRP_Q_D ); - free( dtfs_temp ); - - return error; -} -#endif /*---------------------------------------------------------------------* * sc_vbr_dec_init_flt() * * Initialize SC-VBR decoder *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void sc_vbr_dec_init_flt( - SC_VBR_DEC_HANDLE hSC_VBR /* i/o: SC-VBR decoder handle */ -) -{ - hSC_VBR->nelp_dec_seed = 0; - hSC_VBR->firstTime_voiceddec = 1; - - /* DTFS variables */ - set_f( hSC_VBR->dtfs_dec_a, 0, MAXLAG_WI ); - set_f( hSC_VBR->dtfs_dec_b, 0, MAXLAG_WI ); - hSC_VBR->dtfs_dec_lag = 0; - hSC_VBR->dtfs_dec_nH = 0; - hSC_VBR->dtfs_dec_nH_4kHz = 0; - hSC_VBR->dtfs_dec_upper_cut_off_freq_of_interest = 0; - hSC_VBR->dtfs_dec_upper_cut_off_freq = 0; - hSC_VBR->ph_offset_D = 0; - hSC_VBR->lastLgainD = 0; - hSC_VBR->lastHgainD = 0; - set_f( hSC_VBR->lasterbD, 0, NUM_ERB_WB ); - - /* NELP decoder variables */ - set_f( hSC_VBR->bp1_filt_mem_nb_dec, 0, 14 ); - set_f( hSC_VBR->bp1_filt_mem_wb_dec, 0, 8 ); - set_f( hSC_VBR->shape1_filt_mem_dec, 0, 20 ); - set_f( hSC_VBR->shape2_filt_mem_dec, 0, 20 ); - set_f( hSC_VBR->shape3_filt_mem_dec, 0, 20 ); - - return; -} -#endif diff --git a/lib_dec/voiced_dec_fx.c b/lib_dec/voiced_dec_fx.c index c9ef8b473..d7ec44e92 100644 --- a/lib_dec/voiced_dec_fx.c +++ b/lib_dec/voiced_dec_fx.c @@ -8,7 +8,6 @@ #include "rom_com.h" #include "log2.h" -#ifdef IVAS_FLOAT_FIXED /*===================================================================*/ /* FUNCTION : void ppp_voiced_decoder_fx () */ /*-------------------------------------------------------------------*/ @@ -452,5 +451,3 @@ void sc_vbr_dec_init( return; } - -#endif diff --git a/lib_dec/waveadjust_fec_dec.c b/lib_dec/waveadjust_fec_dec.c index 0931fe0d6..b573d3d7f 100644 --- a/lib_dec/waveadjust_fec_dec.c +++ b/lib_dec/waveadjust_fec_dec.c @@ -46,864 +46,32 @@ * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void LpFilter2( - const float *x, - float *y, - const int16_t N, - float *mem ) -{ - int16_t i; - - y[0] = 0.18f * mem[0] + 0.64f * mem[1] + 0.18f * x[0]; - y[1] = 0.18f * mem[1] + 0.64f * y[0] + 0.18f * x[1]; - - for ( i = 2; i < N; i++ ) - { - y[i] = 0.18f * y[i - 2] + 0.64f * y[i - 1] + 0.18f * x[i]; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static float harmo( - const float *X, - const int16_t n, - const float f ) -{ - int16_t h, k, m = 8; - float ener = 0, ener_harmo = 0; - - for ( k = 1; k < m + 1; k++ ) - { - h = (int16_t) ( k * f - 0.5f ); - if ( k * f - h > 0.5f ) - { - ener_harmo += X[h] * X[h] + X[h + 1] * X[h + 1]; - } - else - { - ener_harmo += X[h] * X[h]; - } - } - - for ( k = 0; k < n; k++ ) - { - ener += X[k] * X[k]; - } - - return ener_harmo / ( ener + EPSILON ); -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t Is_Periodic( - const float cov_max, - const int16_t zp, - const float ener, - const float ener_mean, - const int16_t pitch, - const int16_t L_frameTCX, - const float *mdctdata ) -{ - int16_t flag = 0; - float f = 2.0f * L_frameTCX / pitch; - float harm; - - harm = harmo( mdctdata /*X*/, L_frameTCX, f ); - - if ( ener < 50 || ( ener < ener_mean - 8.0f && cov_max < 0.9f ) ) - { - flag = 0; - } - else if ( cov_max > 0.8f ) - { - flag = 1; - } - else if ( zp > 100 ) - { - flag = 0; - } - else if ( ener < ener_mean - 6 ) - { - flag = 0; - } - else if ( ener > ener_mean + 1 && cov_max > 0.6f ) - { - flag = 1; - } - else if ( harm < 0.7f ) - { - flag = 0; - } - else - { - flag = 1; - } - - return flag; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static int16_t zero_pass( - const float *s, - const int16_t N ) -{ - int16_t zp = 0, i; - - for ( i = 1; i < N; i++ ) - { - if ( s[i - 1] * s[i] <= 0 ) - { - zp++; - } - } - - return zp; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static float sig_tilt( - const float *s, - const int16_t L_frameTCX ) -{ - float tilt, enr1, enr2; - int16_t L_subfr, shift = 2; - const float *p1, *p2; - - L_subfr = L_frameTCX >> 2; - p1 = s + L_subfr; - p2 = s + L_subfr - shift; - enr1 = dotp( p1, p2, L_frameTCX - L_subfr ); - enr2 = dotp( p1, p1, L_frameTCX - L_subfr ); - tilt = enr1 / ( enr2 + EPSILON ); - - return tilt; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static int16_t pitch_search( - float *s, /* lastPcmOut */ - float *outx_new, - const int16_t L_frameTCX, - float *voicing, - int16_t *zp, - float *ener, - float ener_mean, - float *mdct_data, - const int16_t core ) -{ - int16_t pitch, t, i; - float cov_max, temp, tmp, tilt, mdct_ener, low_freq_rate; - float s_LP[L_FRAME_MAX]; - float s_tmp[L_FRAME_MAX]; - int16_t L_frameTCX_tmp; - int16_t pitch_tmp[3]; - float mem[2]; - int16_t start_pos, end_pos; - int16_t cov_size; - int16_t flag, zp_current; - int16_t curr_frmsize; - float tmp_last; - float cov_max_tmp; - float temp2, voicing2; - - set_f( s_LP, 0, L_FRAME_MAX ); - mem[0] = 0.0f; - mem[1] = 0.0f; - tmp_last = 0; - cov_max_tmp = 0; - flag = 0; - - curr_frmsize = L_frameTCX; - if ( core == TCX_10_CORE ) - { - curr_frmsize = L_frameTCX >> 1; - } - - zp_current = zero_pass( outx_new, curr_frmsize ); - if ( core == TCX_10_CORE ) - { - zp_current = zp_current << 1; - } - - if ( L_frameTCX <= L_FRAME ) - { - if ( zp_current > 70 ) - { - return 0; - } - } - else - { - if ( zp_current > 105 ) - { - return 0; - } - } - - t = 30; - if ( core == TCX_10_CORE ) - { - t = 30 / 2; - mdct_data = mdct_data + curr_frmsize; - } - - mdct_ener = 0; - for ( i = 0; i < t; i++ ) - { - mdct_ener += mdct_data[i] * mdct_data[i]; - } - low_freq_rate = mdct_ener; - for ( ; i < curr_frmsize; i++ ) - { - mdct_ener += mdct_data[i] * mdct_data[i]; - } - low_freq_rate /= ( mdct_ener + EPSILON ); - - if ( core == TCX_10_CORE ) - { - mdct_data = mdct_data - curr_frmsize; - } - - if ( low_freq_rate < 0.02f ) - { - return 0; - } - - LpFilter2( s, s_LP, L_frameTCX, mem ); - - tilt = sig_tilt( s_LP, L_frameTCX ); - - if ( L_frameTCX <= L_FRAME16k ) - { - if ( tilt < 0.5f ) - { - return 0; - } - } - else - { - if ( tilt < 0.7f ) - { - return 0; - } - } - - cov_max = 0; - pitch = 0; - if ( L_frameTCX <= L_FRAME16k ) - { - start_pos = (int16_t) ( L_frameTCX * 34 / 256.0 + 0.5f ); - end_pos = (int16_t) ( L_frameTCX * 3 / 4.0 + 0.5f ); - for ( t = start_pos; t < end_pos; t++ ) - { - cov_size = L_frameTCX - t; - tmp = dotp( s_LP, s_LP + t, cov_size ) / cov_size; - if ( t > start_pos ) /* don't use the first value */ - { - if ( tmp > tmp_last ) /* store the current cov, if it is larger than the last one */ - { - cov_max_tmp = tmp; - } - else if ( cov_max < cov_max_tmp ) /* otherwise */ - { - cov_max = cov_max_tmp; /* use the last value cov, being a max */ - pitch = t - 1; /* and the last index as pitch */ - } - } - tmp_last = tmp; - } - - temp = (float) ( sqrt( dotp( s_LP + pitch, s_LP + pitch, L_frameTCX - pitch ) ) * sqrt( dotp( s_LP, s_LP, L_frameTCX - pitch ) ) ); - - *voicing = cov_max * ( L_frameTCX - pitch ) / ( temp + EPSILON ); - - temp2 = (float) ( sqrt( dotp( s_LP + ( pitch >> 1 ), s_LP + ( pitch >> 1 ), L_frameTCX - ( pitch >> 1 ) ) ) * sqrt( dotp( s_LP, s_LP, L_frameTCX - ( pitch >> 1 ) ) ) ); - - voicing2 = dotp( s_LP + ( pitch >> 1 ), s_LP, L_frameTCX - ( pitch >> 1 ) ) / temp2; - - if ( voicing2 > *voicing ) - { - pitch = pitch >> 1; - *voicing = voicing2; - } - } - else - { - L_frameTCX_tmp = L_frameTCX >> 1; - - for ( i = 0; i < L_frameTCX_tmp; i++ ) - { - s_tmp[i] = s_LP[2 * i]; - } - - start_pos = (int16_t) ( ( 34.0f * L_frameTCX_tmp ) / L_FRAME + 0.5f ); - end_pos = (int16_t) ( ( L_frameTCX_tmp >> 1 ) * 1.5f + 0.5f ); - for ( t = start_pos; t < end_pos; t++ ) - { - cov_size = L_frameTCX_tmp - t; - tmp = dotp( s_tmp, s_tmp + t, cov_size ) / cov_size; - - if ( t > start_pos ) /* don't use the first value */ - { - if ( tmp > tmp_last ) /* store the current cov, if it is larger than the last one */ - { - cov_max_tmp = tmp; - } - else if ( cov_max < cov_max_tmp ) /* otherwise */ - { - cov_max = cov_max_tmp; /* use the last value cov, being a max */ - pitch = t - 1; /* and the last index as pitch */ - } - } - - tmp_last = tmp; - } - - if ( pitch > 0 ) - { - pitch_tmp[0] = max( 2 * pitch - 1, 0 ); - pitch_tmp[1] = 2 * pitch; - pitch_tmp[2] = 2 * pitch + 1; - cov_max = 0; - pitch = 0; - - for ( i = 0; i < 3; i++ ) - { - cov_size = L_frameTCX - pitch_tmp[i]; - - temp = (float) ( sqrt( dotp( s_LP + pitch_tmp[i], s_LP + pitch_tmp[i], cov_size ) ) * sqrt( dotp( s_LP, s_LP, cov_size ) ) ); - - tmp = dotp( s_LP, s_LP + pitch_tmp[i], cov_size ) / ( temp + EPSILON ); - - if ( tmp > cov_max ) - { - cov_max = tmp; - pitch = pitch_tmp[i]; - } - } - - *voicing = cov_max; - } - } - - if ( pitch > 0 ) - { - flag = Is_Periodic( *voicing, *zp, *ener, ener_mean, pitch, L_frameTCX, mdct_data ); - } - - if ( flag == 0 ) - { - pitch = 0; - } - - return pitch; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static int16_t OverlapAdd( - float *pitch125_data, - float *sbuf, - const int16_t n, - const int16_t pitch, - const int16_t Bufsize ) -{ - int16_t pitch125 = (int16_t) floor( 0.5f + ( 1.25f * (float) pitch ) ); - int16_t Loverlap = pitch125 - pitch; - int16_t n1 = min( Loverlap, Bufsize - n ); - int16_t n2 = min( pitch125, Bufsize - n ); - int16_t i; - float tmp, dat; - - for ( i = 0; i < n1; i++ ) - { - tmp = (float) i / (float) Loverlap; - dat = sbuf[n + i]; - sbuf[n + i] = (float) ( ( 1.0 - tmp ) * dat + tmp * pitch125_data[i] ); - } - - for ( i = n1; i < n2; i++ ) - { - sbuf[n + i] = pitch125_data[i]; - } - - return ( n + pitch ); -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void add_noise( - float *sbuf, - float *outx_new_n1, - float *noise_seg, - const int16_t Len, - float *gain, - const float *gain_n, - const int16_t firstFrame ) -{ - int16_t i; - - if ( !firstFrame ) - { - sbuf[0] += *gain * ( noise_seg[0] - 0.68f * ( *outx_new_n1 ) ); - *gain = 0.99f * ( *gain ) + 0.01f * ( *gain_n ); - } - for ( i = 1; i < Len; i++ ) - { - sbuf[i] += *gain * ( noise_seg[i] - 0.68f * noise_seg[i - 1] ); - *gain = 0.99f * ( *gain ) + 0.01f * ( *gain_n ); - } - *outx_new_n1 = noise_seg[i - 1]; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t waveform_adj( - T_PLCInfo_HANDLE hPlcInfo, - float *overlapbuf, - float *outdata2, - float *outx_new, - const int16_t L_frameTCX, - const float voicing, - const int16_t core ) -{ - int16_t i, i1, i2, zp1, zp2, pitch; - float sbuf[L_FRAME_MAX]; - float tmp_buf[L_FRAME_MAX], *p_tmp; - int16_t pitch125, Loverlap, n; - float pitch125_data[L_FRAME_MAX]; - - set_f( sbuf, 0, L_FRAME_MAX ); - set_f( tmp_buf, 0, L_FRAME_MAX ); - set_f( pitch125_data, 0, L_FRAME_MAX ); - - zp1 = zero_pass( outdata2, L_frameTCX >> 1 ); - zp2 = zero_pass( outdata2 + ( L_frameTCX >> 1 ), L_frameTCX >> 1 ); - - pitch = hPlcInfo->Pitch; - - /* judge if the pitch is usable */ - if ( 4 * max( zp1, 1 ) < zp2 ) - { - return 0; - } - - /* adjust the pitch value */ - if ( hPlcInfo->T_bfi && pitch <= L_frameTCX >> 1 && L_frameTCX > L_FRAME && core == TCX_20_CORE ) - { - i1 = 1 + maximum( outx_new, pitch, NULL ); - i2 = 1 + maximum( outx_new + pitch, pitch, NULL ); - if ( (float) ( i2 + pitch - i1 ) < ( 1.25f * pitch ) && ( 1.25f * ( i2 + pitch - i1 ) ) > (float) pitch && (float) ( i2 + pitch - i1 ) < (float) ( L_frameTCX >> 1 ) ) - { - pitch = i2 + pitch - i1; - } - } - - pitch125 = (int16_t) floor( 0.5f + ( 1.25f * (float) pitch ) ); - Loverlap = pitch125 - pitch; - mvr2r( outdata2 + L_frameTCX - pitch, pitch125_data, pitch ); - mvr2r( outx_new, pitch125_data + pitch, Loverlap ); - mvr2r( outx_new, sbuf, L_frameTCX ); - - p_tmp = tmp_buf + 1; - mvr2r( pitch125_data, p_tmp, pitch125 ); - p_tmp[-1] = outdata2[L_frameTCX - pitch - 1]; - p_tmp[pitch125] = outx_new[Loverlap]; - for ( i = 0; i < pitch125; i++ ) - { - pitch125_data[i] = 0.18f * p_tmp[i - 1] + 0.64f * p_tmp[i] + 0.18f * p_tmp[i + 1]; - } - - n = 0; - while ( n < L_frameTCX ) /* periodical extension */ - { - n = OverlapAdd( pitch125_data, sbuf, n, pitch, L_frameTCX ); - } - - /* maximum pitch lag is 3/4 L_frameTCX; pitch125_data is reused for - temporary storage, since outdata2 (holding the pcm data of the - last good frame) is still needed and overlapbuf overlaps outdata2 */ - mvr2r( &sbuf[L_frameTCX / 4], pitch125_data, ( 3 * L_frameTCX ) / 4 ); - - hPlcInfo->nsapp_gain = 0.0; - hPlcInfo->nsapp_gain_n = 1.0f - voicing / 2; - - /* use last good signal for noise generation */ - add_noise( sbuf, &( hPlcInfo->outx_new_n1 ), outdata2, L_frameTCX, &( hPlcInfo->nsapp_gain ), &( hPlcInfo->nsapp_gain_n ), 1 ); - - /* save current (noisy) output from IMDCT */ - mvr2r( outx_new, hPlcInfo->data_noise_float, L_frameTCX ); - - /* overlapbuf can now be filled with sbuf, needed for subsequently lost frames */ - mvr2r( pitch125_data, &overlapbuf[L_frameTCX / 4], ( 3 * L_frameTCX ) / 4 ); - - for ( i = 0; i < L_frameTCX; i++ ) - { - outx_new[i] = sbuf[i]; - } - - return pitch; -} -#endif /*-------------------------------------------------------------------* * waveform_adj2() * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void waveform_adj2( - T_PLCInfo_HANDLE hPlcInfo, - float *overlapbuf, - float *outx_new, - const int16_t delay, - const int16_t bfi_cnt, - const int16_t bfi ) -{ - int16_t i, n = 0; - float ratio_float; - float sbuf[L_FRAME_MAX]; - int16_t pitch, L_frameTCX; - - pitch = hPlcInfo->Pitch; - L_frameTCX = hPlcInfo->L_frameTCX; - - if ( pitch > 0 ) - { - while ( n < L_frameTCX ) - { - /* periodical extension */ - for ( i = 0; i < min( pitch, L_frameTCX - n ); i++ ) - { - sbuf[n + i] = overlapbuf[L_frameTCX - pitch + i]; - } - n += pitch; - } - for ( i = 0; i < L_frameTCX; i++ ) - { - overlapbuf[i] = sbuf[i]; - } - - /* use last (noisy) output from IMDCT for noise generation */ - add_noise( sbuf, &( hPlcInfo->outx_new_n1 ), hPlcInfo->data_noise_float, L_frameTCX, &( hPlcInfo->nsapp_gain ), &( hPlcInfo->nsapp_gain_n ), 0 ); - - if ( bfi ) - { - /* save current (noisy) output from IMDCT */ - mvr2r( outx_new, hPlcInfo->data_noise_float, L_frameTCX ); - } - - if ( bfi_cnt == 4 || bfi == 0 ) - { - if ( bfi == 0 ) - { - int16_t gain_zero_start = 10000; - /* overlap-and-add */ - if ( hPlcInfo->step_concealgain > EPSILON ) - { - gain_zero_start = (int16_t) min( (float) L_FRAME48k, ( hPlcInfo->recovery_gain_float / hPlcInfo->step_concealgain ) ) + 1; - } - - if ( delay > 0 ) - { - L_frameTCX -= delay; - } - for ( i = 0; i < min( gain_zero_start, L_frameTCX ); i++ ) - { - ratio_float = (float) i / (float) L_frameTCX; - outx_new[i] = ( 1 - ratio_float ) * sbuf[i] * hPlcInfo->recovery_gain_float + ratio_float * outx_new[i]; - hPlcInfo->recovery_gain_float -= hPlcInfo->step_concealgain; - } - for ( i = gain_zero_start; i < L_frameTCX; i++ ) - { - ratio_float = (float) i / (float) L_frameTCX; - outx_new[i] = ratio_float * outx_new[i]; - } - if ( hPlcInfo->recovery_gain_float < 0.0f ) - { - hPlcInfo->recovery_gain_float = 0.0f; - } - } - else - { - /* overlap-and-add */ - for ( i = 0; i < L_frameTCX; i++ ) - { - ratio_float = (float) i / (float) L_frameTCX; - outx_new[i] = ( 1 - ratio_float ) * sbuf[i] + ratio_float * outx_new[i]; - } - } - } - else - { - mvr2r( sbuf, outx_new, L_frameTCX ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * set_state_ivas() - * - * - *-------------------------------------------------------------------*/ - -void set_state_ivas( - int16_t *state, - const int16_t num, - const int16_t N ) -{ - int16_t i; - - for ( i = 0; i < N - 1; i++ ) - { - state[i] = state[i + 1]; - } - state[N - 1] = num; - - return; -} - - -/*-------------------------------------------------------------------* - * concealment_init() - * - * - *-------------------------------------------------------------------*/ - -void concealment_init( - const int16_t L_frameTCX, - T_PLCInfo_HANDLE hPlcInfo ) -{ - int16_t i; - - hPlcInfo->L_frameTCX = L_frameTCX; - hPlcInfo->Pitch = 0; - hPlcInfo->T_bfi = 0; - hPlcInfo->outx_new_n1 = 0.0f; - hPlcInfo->nsapp_gain = 0.0f; - - hPlcInfo->nsapp_gain_n = 0.0f; - hPlcInfo->ener_mean = 59.4260f; - hPlcInfo->ener = 0.0f; - - hPlcInfo->zp = L_frameTCX; - - hPlcInfo->recovery_gain_float = 0.0f; - hPlcInfo->step_concealgain = 0.0f; - hPlcInfo->concealment_method = TCX_NONTONAL; - hPlcInfo->subframe = 0; - hPlcInfo->nbLostCmpt = 0; - hPlcInfo->seed = RANDOM_INITSEED; - - for ( i = 0; i < TCX_TONALITY_INIT_CNT; i++ ) - { - hPlcInfo->TCX_Tonality[i] = 1; - } - for ( i = TCX_TONALITY_INIT_CNT; i < DEC_STATE_LEN; i++ ) - { - hPlcInfo->TCX_Tonality[i] = 0; - } - for ( i = 0; i < MAX_POST_LEN; i++ ) - { - hPlcInfo->Transient[i] = 1; - } - for ( i = 0; i < L_FRAME_MAX; i++ ) - { - hPlcInfo->data_reci2[i] = 0; - } - - return; -} -#endif /*-------------------------------------------------------------------* * concealment_decode() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void concealment_decode( - const int16_t core, - float *invkoef, - T_PLCInfo_HANDLE hPlcInfo ) -{ - int16_t i; - int16_t *seed = &( hPlcInfo->seed ); - int16_t sign; - - if ( hPlcInfo->concealment_method == TCX_NONTONAL ) - { - if ( core == TCX_20_CORE ) - { - /* copy the data of the last frame */ - mvr2r( hPlcInfo->data_reci2, invkoef, hPlcInfo->L_frameTCX ); - - /* sign randomization */ - for ( i = 0; i < hPlcInfo->L_frameTCX; i++ ) - { - sign = ( ( own_random( seed ) >> 15 ) << 1 ) + 1; - invkoef[i] *= sign; - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * concealment_update() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void concealment_update( - const int16_t bfi, - const int16_t core, - const int16_t tonality, - float *invkoef, - T_PLCInfo_HANDLE hPlcInfo ) -{ - float *data_reci2 = hPlcInfo->data_reci2; - int16_t subframe = hPlcInfo->subframe; - int16_t i; - - if ( core == TCX_20_CORE ) - { - set_state_ivas( hPlcInfo->Transient, core, MAX_POST_LEN ); - - for ( i = 0; i < hPlcInfo->L_frameTCX; i++ ) - { - data_reci2[i] = invkoef[i]; - } - - if ( !bfi ) - { - set_state_ivas( hPlcInfo->TCX_Tonality, tonality, DEC_STATE_LEN ); - } - } - else - { - if ( subframe == 0 ) - { - set_state_ivas( hPlcInfo->Transient, core, MAX_POST_LEN ); - - if ( !bfi ) - { - set_state_ivas( hPlcInfo->TCX_Tonality, tonality, DEC_STATE_LEN ); - } - } - /* don't store the second subframe during frameloss; in - pitch_search(), low_freq_rate is derived on the last good - TCX-10 spectrum */ - if ( !bfi || subframe == 0 ) - { - float *ptr = data_reci2 + subframe; - for ( i = 0; i < ( hPlcInfo->L_frameTCX >> 1 ); i++ ) - { - ptr[i] = invkoef[i]; - } - } - } - return; -} -#endif /*-------------------------------------------------------------------* * concealment_update2() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - -void concealment_update2( - const float *outx_new, - T_PLCInfo_HANDLE hPlcInfo, - const int16_t L_frameTCX ) -{ - hPlcInfo->zp = zero_pass( outx_new, L_frameTCX ); - hPlcInfo->ener = dotp( outx_new, outx_new, L_frameTCX ) / L_frameTCX; - hPlcInfo->ener = 10 * (float) log10( hPlcInfo->ener + EPSILON ); - - if ( hPlcInfo->zp < 100 && hPlcInfo->ener > 50 ) - { - hPlcInfo->ener_mean = 0.98f * hPlcInfo->ener_mean + 0.02f * hPlcInfo->ener; - } - - return; -} -#endif /*-------------------------------------------------------------------* * concealment_signal_tuning() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void concealment_signal_tuning( - Decoder_State *st, - const int16_t bfi, - float *outx_new, - const int16_t past_core ) -{ - float voicing = 0; - T_PLCInfo_HANDLE hPlcInfo = st->hPlcInfo; - float *OverlapBuf = st->hTonalMDCTConc->secondLastPcmOut_float; - float *outdata2 = st->hTonalMDCTConc->lastPcmOut_float; - - if ( bfi ) - { - if ( st->enablePlcWaveadjust && hPlcInfo->concealment_method == TCX_NONTONAL ) - { - if ( st->nbLostCmpt == 1 ) - { - hPlcInfo->Pitch = pitch_search( outdata2, outx_new, st->hPlcInfo->L_frameTCX, &voicing, &hPlcInfo->zp, &hPlcInfo->ener, hPlcInfo->ener_mean, st->hPlcInfo->data_reci2, st->core ); - - if ( hPlcInfo->Pitch ) /* waveform adjustment for the first lost frame */ - { - hPlcInfo->Pitch = waveform_adj( hPlcInfo, OverlapBuf, outdata2, outx_new, st->hPlcInfo->L_frameTCX, voicing, st->core ); - } - } - else if ( st->nbLostCmpt < 5 ) /* waveform adjustment for the 2nd~4th lost frame */ - { - waveform_adj2( hPlcInfo, OverlapBuf, outx_new, 0, st->nbLostCmpt, bfi ); - } - } - hPlcInfo->T_bfi = 1; - } - else - { - if ( st->prev_bfi && past_core != ACELP_CORE && st->last_total_brate >= HQ_48k && st->last_codec_mode == MODE2 ) - { - if ( hPlcInfo->concealment_method == TCX_NONTONAL ) - { - if ( hPlcInfo->nbLostCmpt < 4 ) /* smoothing of the concealed signal with the good signal */ - { - waveform_adj2( hPlcInfo, OverlapBuf, outx_new, 0, hPlcInfo->nbLostCmpt + 1, bfi ); - } - } - } - else - { - hPlcInfo->T_bfi = 0; - } - } - - return; -} -#endif diff --git a/lib_dec/waveadjust_fec_dec_fx.c b/lib_dec/waveadjust_fec_dec_fx.c index 070447cd4..0f7a45eb0 100644 --- a/lib_dec/waveadjust_fec_dec_fx.c +++ b/lib_dec/waveadjust_fec_dec_fx.c @@ -13,7 +13,6 @@ #include "stl.h" /* FOR wmc_tool */ #include "vad_basop.h" -#ifdef IVAS_FLOAT_FIXED void get_maxConv_and_pitch_x( Word16 *s_LP, Word16 s, Word16 e, Word16 N, Word32 *maxConv, Word16 *maxConv_bits, Word16 *pitch ); Word16 get_voicing_x( Word16 *s_LP, Word16 pitch, Word32 covMax, Word16 maxConv_bits, Word16 Framesize ); Word32 con_Log10( Word32 i_s32Val, Word16 i_s16Q ); @@ -830,7 +829,6 @@ void concealment_init_x( Word16 N, void *_plcInfo ) } return; } -#ifdef IVAS_FLOAT_FIXED void concealment_init_ivas_fx( const Word16 L_frameTCX, T_PLCInfo_HANDLE hPlcInfo ) @@ -898,7 +896,6 @@ void concealment_init_ivas_fx( } return; } -#endif // IVAS_FLOAT_FIXED static Word16 own_random_fix( /* o : output random value */ Word16 *seed /* i/o: random seed Q0 */ @@ -1717,4 +1714,3 @@ void concealment_signal_tuning_fx( Word16 bfi, Word16 curr_mode, Word16 *outx_ne } return; } -#endif diff --git a/lib_enc/ACcontextMapping_enc.c b/lib_enc/ACcontextMapping_enc.c index ed7d7c359..250bfcf1b 100644 --- a/lib_enc/ACcontextMapping_enc.c +++ b/lib_enc/ACcontextMapping_enc.c @@ -44,9 +44,7 @@ #include "ivas_rom_com.h" #include "ivas_rom_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -54,1371 +52,70 @@ * * Arithmetic encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ACcontextMapping_encode2_no_mem_s17_LC( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t *x, - int16_t nt, - int16_t lastnz, - int16_t nbbits, - int16_t resQMaxBits, - CONTEXT_HM_CONFIG *hm_cfg ) -{ - int16_t ptr[BITBUFSIZE]; - Tastat as, as_overflow; - int16_t bp, bp_overflow; - int16_t a1, b1, a1_i, b1_i, k; - uint16_t t; - int16_t pki, lev1; - int16_t rateFlag; - int16_t value; - int16_t nbbits_ntuples, nbbits_lsbs, nbbits_signs, nbbits_signs_overflow, nbbits_lsbs_overflow, flag_overflow; - int16_t *lsbs_bits; - int16_t nt_half; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig, numHoleIndices; - uint16_t signs[N_MAX]; - int16_t nbbits_m2; - - a1 = 0; /* to avoid compilation warnings */ - b1 = 0; /* to avoid compilation warnings */ - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; - } - else - { - rateFlag = 0; - } - - /* Init */ - nt_half = nt >> 1; - c[0] = c[1] = 0; - - /* Bits for encoding the number of encoded tuples */ - nbbits_ntuples = 0; - k = 1; - - while ( k < nt / 2 ) - { - nbbits_ntuples++; - k = k << 1; - } - - t = 0; - bp = nbbits_ntuples; - nbbits_signs = 0; - nbbits_lsbs = 0; - nbbits_m2 = nbbits - 2; - flag_overflow = 0; - - if ( hm_cfg ) - { - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - } - else - { - /* unmapped domain */ - ii[0] = 0; - - p1 = p2 = 0; - - /* Find last non-zero tuple */ - /* ensure termination of while loop by dummy value */ - a1 = x[0]; - x[0] = 1; - - while ( x[lastnz - 1] == 0 && x[lastnz - 2] == 0 ) - { - lastnz -= 2; - } - x[0] = a1; - } - - lsbs_bits = (int16_t *) ptr + nbbits - 1; - - /*Start Encoding*/ - ari_start_encoding_14bits( &as ); - - /*Main Loop through the 2-tuples*/ - b1_i = -1; - - for ( k = 0; k < lastnz; k += 2 ) - { - - if ( hm_cfg ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - } - else - { - a1_i = get_next_coeff_unmapped_ivas( ii, &idx1 ); - b1_i = get_next_coeff_unmapped_ivas( ii, &idx2 ); - } - - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - /* Init current 2-tuple encoding */ - - if ( flag_overflow != 0 ) - { - x[a1_i] = 0; - x[b1_i] = 0; - } - - a1 = (int16_t) abs( x[a1_i] ); - b1 = (int16_t) abs( x[b1_i] ); - - lev1 = -1; - - /*Copy states*/ - ari_copy_states( &as, &as_overflow ); - bp_overflow = bp; - nbbits_signs_overflow = nbbits_signs; - nbbits_lsbs_overflow = nbbits_lsbs; - - /*Signs encoding*/ - - if ( a1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[a1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - if ( b1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[b1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - bp = ari_encode_14bits_ext( ptr, bp, &as, VAL_ESC, ari_pk_s17_LC_ext[pki] ); - - *lsbs_bits-- = a1 & 1; - *lsbs_bits-- = b1 & 1; - - /* LSBs bit counting */ - nbbits_lsbs += 2; - - a1 >>= 1; - b1 >>= 1; - - lev1 = min( lev1 + 1, 2 ); - } - - pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - bp = ari_encode_14bits_ext( ptr, bp, &as, a1 + A_THRES * b1, ari_pk_s17_LC_ext[pki] ); - - - /* Check bit budget */ - if ( bp + as.bits_to_follow + nbbits_signs + nbbits_lsbs > nbbits_m2 ) - { - ari_copy_states( &as_overflow, &as ); - bp = bp_overflow; - - if ( !flag_overflow ) - { - nbbits_signs = nbbits_signs_overflow; - nbbits_lsbs = nbbits_lsbs_overflow; - - if ( hm_cfg ) - { - flag_overflow = 1; - - /* Code from now only zeros */ - x[a1_i] = 0; - x[b1_i] = 0; - lev1 = -1; - - pki = ari_lookup_s17_LC[t]; - bp = ari_encode_14bits_ext( ptr, bp, &as, 0, ari_pk_s17_LC_ext[pki] ); - - if ( bp + as.bits_to_follow + nbbits_signs + nbbits_lsbs > nbbits_m2 ) - { - ari_copy_states( &as_overflow, &as ); - bp = bp_overflow; - break; - } - } - else - { - break; - } - } - else - { - break; - } - } - - /* Update context for next 2-tuple */ - if ( p1 == p2 ) - { - /* peak-peak or hole-hole context */ - - if ( lev1 <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); - } - else - { - t = 13 + lev1; - } - - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else - { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], (int16_t) abs( x[a1_i] ) ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], (int16_t) abs( x[b1_i] ) ); - } - } - } /*end of the 2-tuples loop*/ - - - /* End arithmetic coder, overflow management */ - bp = ari_done_encoding_14bits( ptr, bp, &as ); - - /*Overflow is detected*/ - - if ( k != lastnz ) - { - - if ( hm_cfg ) - { - /*Fill with zero to be sure that decoder finish at the same position the MSB decoding*/ - - for ( ; bp < nbbits - ( nbbits_signs + nbbits_lsbs ); ) - { - ptr[bp++] = 0; - } - } - else - { - lastnz = k; - } - } - - /* Push number of encoded tuples */ - value = ( lastnz >> 1 ) - 1; - push_next_indice( hBstr, value, nbbits_ntuples ); - - /* Push arithmetic coded bits */ - push_next_bits( hBstr, (uint16_t *) &ptr[nbbits_ntuples], bp - nbbits_ntuples ); - - /* Push sign bits */ - push_next_bits( hBstr, (uint16_t *) signs, nbbits_signs ); - bp += nbbits_signs; - - /* write residual Quantization bits */ - for ( k = 0; k < min( nbbits - bp - nbbits_lsbs, resQMaxBits ); k++ ) - { - ptr[nbbits - 1 - nbbits_lsbs - k] = x[nt + k]; - } - - /* Write filler bits */ - for ( ; k < nbbits - bp - nbbits_lsbs; ++k ) - { - ptr[nbbits - 1 - nbbits_lsbs - k] = 0; - } - - /* Check for debugging */ - assert( bp + k <= nbbits ); - - /* Push the rest of the buffer */ - push_next_bits( hBstr, (uint16_t *) &ptr[bp], nbbits - bp ); - - return; -} -#endif -/*-------------------------------------------------------------------* - * find_last_nz_pair() - * - * - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static int16_t find_last_nz_pair( - const int16_t x[], - const int16_t length, - const CONTEXT_HM_CONFIG *hm_cfg ) -{ - int16_t last_nz, i; - const int16_t *tmp; - - last_nz = 2; - - if ( hm_cfg ) - { - /* mapped kernel */ - tmp = hm_cfg->indexBuffer; - - for ( i = length; i >= 4; i -= 2 ) - { - - if ( x[tmp[i - 2]] != 0 || x[tmp[i - 1]] != 0 ) - { - last_nz = i; - break; - } - } - } - else - { - /* unmapped kernel */ - - for ( i = length; i >= 4; i -= 2 ) - { - - if ( x[i - 2] != 0 || x[i - 1] != 0 ) - { - last_nz = i; - break; - } - } - } - - return last_nz; -} -#else -static Word16 find_last_nz_pair( - const Word16 x[], - const Word16 length, - const CONTEXT_HM_CONFIG *hm_cfg ) -{ - Word16 last_nz, i; - const Word16 *tmp; - - last_nz = 2; - move16(); - - IF( hm_cfg ) - { - /* mapped kernel */ - tmp = hm_cfg->indexBuffer; - - FOR( i = length; i >= 4; i -= 2 ) - { - test(); - IF( x[tmp[i - 2]] || x[tmp[i - 1]] ) - { - last_nz = i; - move16(); - BREAK; - } - } - } - ELSE - { - /* unmapped kernel */ - - FOR( i = length; i >= 4; i -= 2 ) - { - test(); - IF( x[i - 2] || x[i - 1] ) - { - last_nz = i; - move16(); - BREAK; - } - } - } - - return last_nz; -} -#endif - - -/*-------------------------------------------------------------------* - * ACcontextMapping_encode2_estimate_no_mem_s17_LC() - * - * - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ACcontextMapping_encode2_estimate_no_mem_s17_LC( - const int16_t *x, - const int16_t nt, - int16_t *lastnz_out, - int16_t *nEncoded, - const int16_t target, - int16_t *stop, - CONTEXT_HM_CONFIG *hm_cfg ) -{ - int16_t a1, b1, a1_i, b1_i; - int16_t k, pki, lev1; - uint16_t t; - int16_t lastnz, lastnz2; - int16_t rateFlag; - int16_t nbits_old, nbits; - int16_t stop2; - int32_t proba; - int16_t nlz; - const uint16_t *cum_freq; - int16_t symbol; - const uint8_t *lookup; - int16_t nt_half; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig = 0, numHoleIndices = 0; /* only to avoid compiler warning */ - - /* Rate flag */ - if ( target > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; - } - else - { - rateFlag = 0; - } - - /* 2 bits = arithmetic coder initialization interval = 1 bits for rounding last proba + 1 bit?*/ - nbits = 2; - /*proba coded on 14bits -> proba=1*/ - proba = 16384; - - /* Init */ - nt_half = nt >> 1; - stop2 = 0; - c[0] = c[1] = 0; - - /* bits to encode lastnz */ - k = 1; - - while ( k < nt / 2 ) - { - nbits++; - k = k << 1; - /* check while condition */ - } - nbits_old = nbits; - - nbits -= target; - - /* Find last non-zero tuple in the mapped domain signal */ - lastnz = find_last_nz_pair( x, nt, hm_cfg ); - - /* At least one tuple is coded */ - lastnz2 = 2; - - if ( hm_cfg ) - { - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - } - else - { - /* unmapped domain */ - ii[0] = 0; - - p1 = p2 = 0; - } - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - if ( hm_cfg ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - } - else - { - a1_i = get_next_coeff_unmapped_ivas( ii, &idx1 ); - b1_i = get_next_coeff_unmapped_ivas( ii, &idx2 ); - } - - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[a1_i] ); - b1 = (int16_t) abs( x[b1_i] ); - lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* Signs Bits */ - nbits += min( a1, 1 ); - nbits += min( b1, 1 ); - - /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ - lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* check while condition */ - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = lookup[lev1]; - cum_freq = ari_pk_s17_LC_ext[pki] + VAL_ESC; - /*p1*p2=proba on 28 bits: p=0.5->power(2,27)*/ - proba *= *( cum_freq ); - /*Number of leading zero computed in one cycle=norm_l() in BASOP*/ - nlz = 2; - while ( proba < 134217728 ) /*power(2,27)*/ - { - nlz++; - proba = proba << 1; - } - nbits += nlz; - /*addition added as shift not done in norm_l(): real shift = 14-nlz*/ - proba >>= 14; /*proba is rounded down on 14 bits ->automatic over-estimation of bit consumption*/ - - ( a1 ) >>= 1; - ( b1 ) >>= 1; - - lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - /* check while condition */ - } - pki = lookup[lev1]; - symbol = a1 + A_THRES * b1; - cum_freq = ari_pk_s17_LC_ext[pki] + symbol; - /*p1*p2=proba on 28 bits: p=0.5->power(2,27)*/ - proba *= ( cum_freq[0] - cum_freq[1] ); - /*Number of leading zero computed in one cycle=norm_l() in BASOP*/ - nlz = 0; - while ( proba < 134217728 ) /*power(2,27)*/ - { - nlz++; - proba = proba << 1; - } - - nbits += nlz; - proba >>= 14; /*proba is rounded down on 14 bits ->automatic over-estimation of bit consumption*/ - - /* Should we truncate? */ - if ( nbits > 0 ) - { - stop2 = 1; - - if ( *stop ) - { - break; - } - } - else - { - if ( hm_cfg || k == 0 || x[a1_i] || x[b1_i] ) - { - nbits_old = nbits + target; - lastnz2 = b1_i + 1; - } - } - - /* Update context for next 2-tuple */ - if ( p1 == p2 ) /* peak-peak or hole-hole context */ - { - lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; - - if ( lev1 <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); - } - else - { - t = 13 + lev1; - } - - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else - { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], (int16_t) abs( x[a1_i] ) ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], (int16_t) abs( x[b1_i] ) ); - } - } - } /*end of the 2-tuples loop*/ - - nbits += target; - - /* Output */ - - if ( *stop ) - { - nbits = nbits_old; - } - - if ( stop2 ) - { - stop2 = nbits; - } - *nEncoded = lastnz2; - *stop = stop2; - *lastnz_out = lastnz; - - if ( hm_cfg ) - { - /* Restore hole indices beyond lastnz */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] - nt; - } - hm_cfg->numPeakIndices = numPeakIndicesOrig; - } - - return nbits_old; -} - - -/* Range Coder Functions */ - -/*-------------------------------------------------------------------* - * RCcontextMapping_encode2_no_mem_s17_LCS() - * - * Range encoder - *-------------------------------------------------------------------*/ - -void RCcontextMapping_encode2_no_mem_s17_LCS( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t *x, - const int16_t nt, - int16_t lastnz, - const int16_t nbbits, - const int16_t resQMaxBits, - CONTEXT_HM_CONFIG *hm_cfg ) -{ - int16_t ptr[BITBUFSIZE]; - RangeUniEncState rc_st_enc; - int16_t bp; - int16_t rc_tot_bits; /* No. of bits returned by range coder */ - int16_t pki, lev1; - uint16_t t; - int16_t rateFlag; - int16_t value; - int16_t nbbits_ntuples, nbbits_lsbs, nbbits_signs; - int16_t *lsbs_bits; - int16_t nt_half; - int16_t signs[N_MAX]; - int16_t a1, b1, k; - - a1 = 0; /* to avoid compilation warnings */ - b1 = 0; /* to avoid compilation warnings */ - - /* Init */ - nt_half = nt >> 1; - - /* Bits for encoding the number of encoded tuples */ - nbbits_ntuples = 0; - k = 1; - while ( k < nt / 2 ) - { - nbbits_ntuples++; - k = k << 1; - } - - t = 0; - nbbits_signs = 0; - nbbits_lsbs = 0; - - if ( hm_cfg ) - { - int16_t a1_i, b1_i; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig, numHoleIndices; - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; - } - else - { - rateFlag = 0; - } - - c[0] = c[1] = 0; - - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - - lsbs_bits = ptr + nbbits - 1; - - /*Start Encoding*/ - /* Initialize range encoder */ - rc_uni_enc_init( &rc_st_enc ); - - /*Main Loop through the 2-tuples*/ - b1_i = -1; - - for ( k = 0; k < lastnz; k += 2 ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[a1_i] ); - b1 = (int16_t) abs( x[b1_i] ); - - lev1 = -1; - - /*Signs encoding*/ - if ( a1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[a1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - if ( b1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[b1_i] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - rc_uni_enc_encode_symbol_fastS( &rc_st_enc, VAL_ESC, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode ESC symbol */ - - *lsbs_bits-- = a1 & 1; - *lsbs_bits-- = b1 & 1; - - /* LSBs bit counting */ - nbbits_lsbs += 2; - - a1 >>= 1; - b1 >>= 1; - - lev1 = min( lev1 + 1, 2 ); - } - - pki = ari_lookup_s17_LC[t + ( ( lev1 + 1 ) << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - rc_uni_enc_encode_symbol_fastS( &rc_st_enc, a1 + A_THRES * b1, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode MSB symbol */ - - /*Confirm that there is no overflow, i.e. bit-budget has not exceeded */ - - /* Update context for next 2-tuple */ - if ( p1 == p2 ) - { - /* peak-peak or hole-hole context */ - - if ( lev1 <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); - } - else - { - t = 13 + lev1; - } - - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else - { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], (int16_t) abs( x[a1_i] ) ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], (int16_t) abs( x[b1_i] ) ); - } - } - - } /*end of the 2-tuples loop*/ - } - else /* if (!hm_cfg) */ - { - int16_t cp; - int16_t esc_nb, rateQ; - uint16_t s; - - /* Rate flag */ - if ( nbbits > 400 ) - { - rateFlag = 2; - } - else - { - rateFlag = 0; - } - - s = 0; - - /* Find last non-zero tuple */ - /* ensure termination of while loop by dummy value */ - a1 = x[0]; - x[0] = 1; /* ensure first tuple is non-zero */ - - while ( x[lastnz - 1] == 0 && x[lastnz - 2] == 0 ) - { - lastnz -= 2; - } - x[0] = a1; - - lsbs_bits = ptr + nbbits - 1; - - /*Start Encoding*/ - /* Initialize range encoder */ - rc_uni_enc_init( &rc_st_enc ); - - /*Main Loop through the 2-tuples*/ - for ( k = 0; k < lastnz; k += 2 ) - { - - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[k + 0] ); - b1 = (int16_t) abs( x[k + 1] ); - - lev1 = 0; - esc_nb = 0; - - /*Signs encoding*/ - if ( a1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[k + 0] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - if ( b1 > 0 ) - { - signs[nbbits_signs++] = ( (uint16_t) x[k + 1] >> ( sizeof( uint16_t ) * 8 - 1 ) ); - } - - rateQ = rateFlag + ( k > ( nt >> 1 ) ); - - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - rc_uni_enc_encode_symbol_fastS( &rc_st_enc, VAL_ESC, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode ESC symbol */ - - *lsbs_bits-- = a1 & 1; - *lsbs_bits-- = b1 & 1; - - /* LSBs bit counting */ - nbbits_lsbs += 2; - - a1 >>= 1; - b1 >>= 1; - - lev1++; - esc_nb = min( lev1, 3 ); - } - - pki = ari_lookup_s17_LC[t + ( ( rateQ ) << NBITS_CONTEXT ) + ( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - rc_uni_enc_encode_symbol_fastS( &rc_st_enc, a1 + A_THRES * b1, cum_freq_ari_pk_s17_LC_ext[pki], sym_freq_ari_pk_s17_LC_ext[pki], 14 ); /* Encode MSB symbol */ - - /*Confirm that there is no overflow, i.e. bit-budget has not exceeded */ - - /* Update context for next 2-tuple */ - if ( esc_nb < 2 ) - { - cp = 1 + ( ( a1 + b1 ) * ( esc_nb + 1 ) ); - } - else - { - cp = 12 + esc_nb; - } - - /*Shift old 4 bits, replace last 4 bits*/ - s = ( s << 4 ) + cp; - t = s & 0xFF; - - } /*end of the 2-tuples loop*/ - } - - /* Finish range encoder */ - rc_tot_bits = rc_uni_enc_finish( &rc_st_enc ); /* No. of bits consumed by range coder */ - bp = rc_tot_bits + nbbits_ntuples; /* Update bitstream pointer */ - - /* Cross-check that there is no overflow */ - - /* Push number of encoded tuples */ - value = ( lastnz >> 1 ) - 1; - push_next_indice( hBstr, value, nbbits_ntuples ); - - /* Push range coded bits from byte_buffer to bitstream */ - /* 1) Push all complete bytes, one byte at a time */ - for ( k = 0; k < ( rc_tot_bits >> 3 ); k++ ) - { - push_next_indice( hBstr, rc_st_enc.byte_buffer[k], 8 ); - } - /* 2) Push remaining bits */ - if ( ( rc_tot_bits & 7 ) != 0 ) - { - push_next_indice( hBstr, rc_st_enc.byte_buffer[k] >> ( 8 - ( rc_tot_bits & 7 ) ), rc_tot_bits & 7 ); - } - - /* Push sign bits */ - push_next_bits( hBstr, (uint16_t *) signs, nbbits_signs ); - bp += nbbits_signs; - - /*write residual Quantization bits*/ - - for ( k = 0; k < min( nbbits - bp - nbbits_lsbs, resQMaxBits ); k++ ) - { - ptr[nbbits - 1 - nbbits_lsbs - k] = x[nt + k]; - } - /* Write filler bits */ - for ( ; k < nbbits - bp - nbbits_lsbs; ++k ) - { - ptr[nbbits - 1 - nbbits_lsbs - k] = 0; - } - - /* Check for debugging */ - assert( bp + k <= nbbits ); - - /* Push the rest of the buffer */ - push_next_bits( hBstr, (uint16_t *) &ptr[bp], nbbits - bp ); - - /* return (bp+nbbits_lsbs);*/ /*return only for debug plot*/ - return; -} -#endif -/*-------------------------------------------------------------------* - * RCcontextMapping_encode2_estimate_no_mem_s17_LCS() - * - * Range coder bit-estimation - *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -int16_t RCcontextMapping_encode2_estimate_no_mem_s17_LCS( - int16_t *x, /* Spectral coefficients */ - const int16_t nt, /* L - size of spectrum (no. of spectral coefficients) */ - int16_t *lastnz_out, - int16_t *nEncoded, /* No. of spectral coefficients that can be coded without an overflow occuring */ - const int16_t target, /* Target bits */ - int16_t *stop, - int16_t mode, - CONTEXT_HM_CONFIG *hm_cfg /* context-based harmonic model configuration */ -) -{ - /* Common variables */ - int16_t a1, b1; - int16_t k, pki, lev1; - uint16_t t; - int16_t lastnz, lastnz2; - int16_t rateFlag; - float bit_estimate; - int16_t symbol; - const uint8_t *lookup; - float nbits2; - - /* Initialization */ - bit_estimate = 2.0f; - nbits2 = 0.f; - - /* bits to encode lastnz */ - k = 1; - - while ( k < nt / 2 ) - { - bit_estimate++; - k = k << 1; - /* check while condition */ - } - - nbits2 = bit_estimate; - - if ( hm_cfg ) - { - int16_t a1_i, b1_i; - int16_t stop2; - int16_t total_output_bits; - int16_t nt_half; - int32_t c[2], *ctx; - int32_t p1, p2; - int16_t ii[2]; - int16_t idx1, idx2, idx; - int16_t numPeakIndicesOrig = 0, numHoleIndices = 0; /* only to avoid compiler warning */ - - /* Rate flag */ - if ( target > 400 ) - { - rateFlag = 2 << NBITS_CONTEXT; /* Select context-A for higher bitrates */ - } - else - { - rateFlag = 0; /* Select context-B for lower bitrates */ - } - - nt_half = nt >> 1; - stop2 = 0; - c[0] = c[1] = 0; - - /* Find last non-zero tuple in the mapped domain signal */ - lastnz = find_last_nz_pair( x, nt, hm_cfg ); - - lastnz2 = 2; - - /* mapped domain */ - numPeakIndicesOrig = hm_cfg->numPeakIndices; - hm_cfg->numPeakIndices = min( hm_cfg->numPeakIndices, lastnz ); - numHoleIndices = lastnz - hm_cfg->numPeakIndices; - - /* Mark hole indices beyond lastnz as pruned */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] + nt; - } - - ii[0] = numPeakIndicesOrig; - ii[1] = 0; - - p1 = p2 = 0; /* to avoid compilation warnings */ - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - a1_i = get_next_coeff_mapped_ivas( ii, &p1, &idx1, hm_cfg ); - b1_i = get_next_coeff_mapped_ivas( ii, &p2, &idx2, hm_cfg ); - - idx = min( idx1, idx2 ); - - /* Get context */ - ctx = &c[p1 | p2]; - - t = (uint16_t) ( *ctx + rateFlag ); - t += ( nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[a1_i] ); - b1 = (int16_t) abs( x[b1_i] ); - lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* Signs Bits */ - bit_estimate += min( a1, 1 ); - bit_estimate += min( b1, 1 ); - - /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ - lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* check while condition */ - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = lookup[lev1]; /* ESC symbol */ - - bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; - bit_estimate += 2; /* Add 2 LSB bits corresponding to the bit-plane */ - - ( a1 ) >>= 1; - ( b1 ) >>= 1; - - lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* check while condition */ - } - - pki = lookup[lev1]; - - symbol = a1 + A_THRES * b1; - bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; - - /* Should we truncate? */ - if ( bit_estimate > target ) - { - stop2 = 1; +/*-------------------------------------------------------------------* + * find_last_nz_pair() + * + * + *-------------------------------------------------------------------*/ - if ( *stop ) - { - break; - } - } - else - { - lastnz2 = b1_i + 1; - nbits2 = bit_estimate; - } +static Word16 find_last_nz_pair( + const Word16 x[], + const Word16 length, + const CONTEXT_HM_CONFIG *hm_cfg ) +{ + Word16 last_nz, i; + const Word16 *tmp; - /* Update context for next 2-tuple */ - if ( p1 == p2 ) /* peak-peak or hole-hole context */ - { - lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; + last_nz = 2; + move16(); - if ( lev1 <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); - } - else - { - t = 13 + lev1; - } + IF( hm_cfg ) + { + /* mapped kernel */ + tmp = hm_cfg->indexBuffer; - *ctx = ( *ctx & 0xf ) * 16 + t; - } - else + FOR( i = length; i >= 4; i -= 2 ) + { + test(); + IF( x[tmp[i - 2]] || x[tmp[i - 1]] ) { - /* mixed context */ - - if ( idx1 & 1 ) - { - /* update first context */ - c[p1] = update_mixed_context_ivas( c[p1], (int16_t) abs( x[a1_i] ) ); - } - - if ( idx2 & 1 ) - { - /* update second context */ - c[p2] = update_mixed_context_ivas( c[p2], (int16_t) abs( x[b1_i] ) ); - } + last_nz = i; + move16(); + BREAK; } - - } /*end of the 2-tuples loop*/ - - total_output_bits = (int16_t) ( bit_estimate + 0.5f ); - if ( *stop ) - { - total_output_bits = (int16_t) ( nbits2 + 0.5f ); - } - - if ( stop2 ) - { - stop2 = total_output_bits; - } - *nEncoded = lastnz2; - *stop = stop2; /* If zero, it means no overflow occured during bit-estimation */ - *lastnz_out = lastnz; - - /* Restore hole indices beyond lastnz */ - for ( k = numHoleIndices; k < hm_cfg->numHoleIndices; ++k ) - { - hm_cfg->holeIndices[k] = hm_cfg->holeIndices[k] - nt; } - hm_cfg->numPeakIndices = numPeakIndicesOrig; - - return (int16_t) ( nbits2 + 0.5f ); } - else /* if (!hm_cfg) */ + ELSE { - int16_t esc_nb, cp, rateQ; - uint16_t s; - int16_t tot_bits2; - int16_t overflow_flag = 0; - - /* Rate flag */ - if ( target > 400 ) - { - rateFlag = 2; - } - else - { - rateFlag = 0; /* Select context-B for lower bitrates */ - } - - t = 0; - s = 0; - cp = 0; - lastnz = 1; - lastnz2 = 0; - tot_bits2 = 0; + /* unmapped kernel */ - /* Find last non-zero tuple in the mapped domain signal */ - for ( lastnz = ( nt - 2 ); lastnz >= 0; lastnz -= 2 ) + FOR( i = length; i >= 4; i -= 2 ) { - if ( ( x[lastnz] != 0 ) || ( x[lastnz + 1] != 0 ) ) + test(); + IF( x[i - 2] || x[i - 1] ) { - break; + last_nz = i; + move16(); + BREAK; } } - lastnz += 2; - if ( lastnz < 2 ) - { - lastnz = 2; /* At least one tuple is coded */ - } - - lastnz2 = 2; - - /* Main Loop through the 2-tuples */ - for ( k = 0; k < lastnz; k += 2 ) - { - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[k] ); - b1 = (int16_t) abs( x[k + 1] ); - lev1 = 0; - esc_nb = 0; - rateQ = rateFlag + ( k > ( nt >> 1 ) ); - - /* Signs Bits */ - bit_estimate += min( a1, 1 ); - bit_estimate += min( b1, 1 ); - - /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ - lookup = &ari_lookup_s17_LC[t + ( rateQ << NBITS_CONTEXT )]; - - /* check while condition */ - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = lookup[( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - - bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; - bit_estimate += 2; /* Add 2 LSB bits corresponding to the bit-plane */ - - ( a1 ) >>= 1; - ( b1 ) >>= 1; - - lev1++; - esc_nb = min( lev1, 3 ); - - /* check while condition */ - } - - pki = lookup[( esc_nb << ( NBITS_CONTEXT + NBITS_RATEQ ) )]; - - symbol = a1 + A_THRES * b1; - bit_estimate = bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; - - /* Should we truncate? */ - if ( bit_estimate > target ) /* Overflow occured */ - { - overflow_flag = 1; - } - else - { - if ( abs( x[k] ) || abs( x[k + 1] ) ) /* No overflow & non-zero tuple */ - { - nbits2 = bit_estimate; - lastnz2 = k + 2; - } - } - - /* Update context for next 2-tuple */ - if ( esc_nb < 2 ) - { - cp = 1 + ( a1 + b1 ) * ( esc_nb + 1 ); - } - else - { - cp = 12 + esc_nb; - } - /*shift old bits and replace last 4 bits*/ - s = ( s << 4 ) + cp; - t = s & 0xFF; + } - } /*end of the 2-tuples loop*/ + return last_nz; +} - tot_bits2 = (int16_t) ( nbits2 + 0.5f ); - if ( lastnz2 < lastnz ) /* Overflow occured because unable to code all tuples */ - { - overflow_flag = 1; - } - if ( mode == -1 ) - { - tot_bits2 = (int16_t) ( bit_estimate + 0.5f ); - } - if ( overflow_flag == 0 ) /* No overflow */ - { - *stop = 0; - } - else /* Overflow */ - { - if ( *stop ) - { - *stop = tot_bits2; - } - else - { - *stop = (int16_t) ( bit_estimate + 0.5f ); - } - } - *lastnz_out = lastnz; - *nEncoded = lastnz2; - /* Safety mechanism to avoid overflow */ - if ( lastnz2 == 2 && overflow_flag == 1 ) - { - for ( k = 0; k < lastnz2; k++ ) - { - x[k] = 0; - } - } +/*-------------------------------------------------------------------* + * ACcontextMapping_encode2_estimate_no_mem_s17_LC() + * + * + *-------------------------------------------------------------------*/ +/*-------------------------------------------------------------------* + * RCcontextMapping_encode2_estimate_no_mem_s17_LCS() + * + * Range coder bit-estimation + *-------------------------------------------------------------------*/ - return tot_bits2; - } -} -#else Word16 RCcontextMapping_encode2_estimate_no_mem_s17_LCS( Word16 *x, /* Spectral coefficients */ const Word16 nt, /* L - size of spectrum (no. of spectral coefficients) */ @@ -1837,7 +534,6 @@ IF( EQ_16( lastnz2, 2 ) && EQ_16( overflow_flag, 1 ) ) return tot_bits2; } } -#endif /*-------------------------------------------------------------------* * RCcontextMapping_encode2_estimate_bandWise_start() @@ -1845,62 +541,6 @@ return tot_bits2; * Range coder - start bandwise bit-estimation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t RCcontextMapping_encode2_estimate_bandWise_start( - int16_t *x, - const int16_t nt, - const int16_t target, - HANDLE_RC_CONTEXT_MEM hContextMem ) -{ - int16_t i, k; - - /* Rate flag */ - if ( target > 400 ) - { - hContextMem->rateFlag = 2 << NBITS_CONTEXT; - } - else - { - hContextMem->rateFlag = 0; - } - - hContextMem->bit_estimate = 2.0f; - - /* Init */ - hContextMem->nt_half = nt >> 1; - - /* bits to encode lastnz */ - k = 1; - - while ( k < hContextMem->nt_half ) - { - hContextMem->bit_estimate++; - - k = k << 1; - /* check while condition */ - } - - /* bits to encode lastnz */ - hContextMem->nbits_old = (int16_t) hContextMem->bit_estimate; - - hContextMem->ctx = 0; - hContextMem->lastnz = 2; - - /* Find last non-zero tuple */ - - for ( i = nt; i >= 4; i -= 2 ) - { - - if ( x[i - 2] != 0 || x[i - 1] != 0 ) - { - hContextMem->lastnz = i; - break; - } - } - - return (int16_t) hContextMem->bit_estimate; -} -#else Word16 RCcontextMapping_encode2_estimate_bandWise_start( Word16 *x, const Word16 nt, @@ -1974,7 +614,6 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_start( return tmp2; } -#endif /*-------------------------------------------------------------------* * RCcontextMapping_encode2_estimate_bandWise() @@ -1982,89 +621,6 @@ Word16 RCcontextMapping_encode2_estimate_bandWise_start( * Range coder - bandwise bit-estimation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t RCcontextMapping_encode2_estimate_bandWise( - int16_t *x, - const int16_t start_line, - const int16_t end_line, - HANDLE_RC_CONTEXT_MEM hContextMem ) -{ - int16_t a1, b1, a1_i, b1_i; - int16_t k, pki, lev1; - uint16_t t; - int16_t bandBits = 0; - int16_t total_output_bits; /* No. of bits after finalization */ - int16_t symbol; - const uint8_t *lookup; - int16_t idx; - - /* Main Loop through the 2-tuples */ - /*hContextMem->nt_half = end_line >> 1;*/ - for ( k = start_line; k < min( hContextMem->lastnz, end_line ); k += 2 ) - { - a1_i = k; - b1_i = k + 1; - - idx = k; - - /* Get context */ - t = hContextMem->ctx + hContextMem->rateFlag; - t += ( hContextMem->nt_half >= idx ) ? 0 : ( 1 << NBITS_CONTEXT ); - - /* Init current 2-tuple encoding */ - a1 = (int16_t) abs( x[a1_i] ); - b1 = (int16_t) abs( x[b1_i] ); - lev1 = -( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* Signs Bits */ - hContextMem->bit_estimate += min( a1, 1 ); - hContextMem->bit_estimate += min( b1, 1 ); - - /* pre-compute address of ari_pk_s17_LC_ext[0][Val_esc] to avoid doing it multiple times inside the loop */ - lookup = &ari_lookup_s17_LC[t] + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - - /* check while condition */ - /* MSBs coding */ - while ( max( a1, b1 ) >= A_THRES ) - { - pki = lookup[lev1]; - hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][VAL_ESC]; - hContextMem->bit_estimate += 2; /* Add the 2 LSB bits that were shifted out */ - - ( a1 ) >>= 1; - ( b1 ) >>= 1; - - lev1 = min( lev1 + ( 1 << ( NBITS_CONTEXT + NBITS_RATEQ ) ), 2 << ( NBITS_CONTEXT + NBITS_RATEQ ) ); - /* check while condition */ - } - - pki = lookup[lev1]; - symbol = a1 + A_THRES * b1; /* MSB symbol */ - hContextMem->bit_estimate = hContextMem->bit_estimate + ari_bit_estimate_s17_LC[pki][symbol]; - - /* Update context */ - lev1 >>= NBITS_CONTEXT + NBITS_RATEQ; - - if ( lev1 <= 0 ) - { - t = 1 + ( a1 + b1 ) * ( lev1 + 2 ); - } - else - { - t = 13 + lev1; - } - - hContextMem->ctx = ( hContextMem->ctx & 0xf ) * 16 + t; - - } /*end of the 2-tuples loop*/ - total_output_bits = (int16_t) ( hContextMem->bit_estimate + 0.5f ); - - bandBits = total_output_bits - hContextMem->nbits_old; - hContextMem->nbits_old = total_output_bits; - - return bandBits; -} -#else Word16 RCcontextMapping_encode2_estimate_bandWise( Word16 *x, const Word16 start_line, @@ -2154,4 +710,3 @@ Word16 RCcontextMapping_encode2_estimate_bandWise( return bandBits; } -#endif diff --git a/lib_enc/FEC_enc.c b/lib_enc/FEC_enc.c index d011b5961..3d5aa4f6b 100644 --- a/lib_enc/FEC_enc.c +++ b/lib_enc/FEC_enc.c @@ -42,10 +42,8 @@ #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * FEC_encode() @@ -53,7 +51,6 @@ * Encoder supplementary information for FEC *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void FEC_encode_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const ACELP_config acelp_cfg, /* i/o: configuration of the ACELP */ @@ -217,227 +214,3 @@ void FEC_encode_ivas_fx( return; } -#else -void FEC_encode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const ACELP_config acelp_cfg, /* i/o: configuration of the ACELP */ - const float *synth, /* i : pointer to synthesized speech for E computation */ - const int16_t coder_type, /* i : type of coder */ - int16_t clas, /* i : signal clas for current frame */ - const float *fpit, /* i : close loop fractional pitch buffer */ - const float *res, /* i : LP residual signal frame */ - int16_t *last_pulse_pos, /* i/o: Position of the last pulse */ - const int16_t L_frame, /* i : Frame length */ - const int32_t total_brate /* i : total codec bitrate */ -) -{ - int16_t tmpS, index; - int16_t maxi, sign = 0, tmp_FER_pitch; - float enr_q; - - tmpS = 0; - enr_q = 1.0f; - - if ( coder_type > UNVOICED && coder_type < AUDIO && acelp_cfg.FEC_mode > 0 ) - { - /*-----------------------------------------------------------------* - * encode signal class (not needed for VC since it is clearly voiced) (2 bits) - *-----------------------------------------------------------------*/ - - if ( coder_type != VOICED ) - { - /* encode signal clas with 2 bits */ - if ( clas == UNVOICED_CLAS ) - { - index = 0; - } - else if ( clas == VOICED_TRANSITION || clas == UNVOICED_TRANSITION ) - { - index = 1; - } - else if ( clas == VOICED_CLAS ) - { - index = 2; - } - else - { - index = 3; - } - - push_indice( hBstr, IND_FEC_CLAS, index, FEC_BITS_CLS ); - } - - /*-----------------------------------------------------------------* - * Encode frame energy (5 bits) - *-----------------------------------------------------------------*/ - - if ( acelp_cfg.FEC_mode > 1 ) /* GENERIC and VOICED frames */ - { - /* frame energy (maximum energy per pitch period for voiced frames or mean energy per sample over 2nd halframe for unvoiced frames) */ - fer_energy( L_frame, clas, synth, fpit[( L_frame >> 6 ) - 1], &enr_q, L_frame ); - - /* linearly quantize the energy in the range 0 : FEC_ENR_STEP : 96 dB */ - tmpS = (int16_t) ( 10.0 * log10( enr_q + 0.001f ) / FEC_ENR_STEP ); - - if ( tmpS > FEC_ENR_QLIMIT ) - { - tmpS = FEC_ENR_QLIMIT; - } - - if ( tmpS < 0 ) - { - tmpS = 0; - } - - push_indice( hBstr, IND_FEC_ENR, tmpS, FEC_BITS_ENR ); - } - - /*-----------------------------------------------------------------* - * Encode last glottal pulse position (8 bits) - *-----------------------------------------------------------------*/ - - if ( acelp_cfg.FEC_mode > 2 ) /* GENERIC frames */ - { - /* retrieve the last glottal pulse position of the previous frame */ - /* use the current pitch information to scale or not the quantization */ - tmp_FER_pitch = (int16_t) ( fpit[0] ); /* take the 1st subframe pitch, since it is easier to retrieve it on decoder side */ - - sign = 0; - maxi = *last_pulse_pos; - if ( maxi < 0 ) - { - sign = 1; - maxi = -maxi; - } - - if ( tmp_FER_pitch >= 128 ) - { - maxi /= 2; - } - - if ( maxi > 127 ) - { - /* better not use the glottal pulse position at all instead of using a wrong pulse */ - /* can happen only with pitch > 254 and max pit = 289 and should happen very rarely */ - maxi = 0; - } - - if ( sign == 1 ) - { - maxi += 128; /* use 8 bits (MSB represents the sign of the pulse) */ - } - - push_indice( hBstr, IND_FEC_POS, maxi, FEC_BITS_POS ); - } - - /* find the glottal pulse position of the current frame (could be sent as extra FEC info in the next frame) */ - maxi = 0; - if ( clas >= VOICED_CLAS && total_brate >= ACELP_24k40 ) - { - maxi = findpulse( L_frame, res, (int16_t) ( fpit[( L_frame >> 6 ) - 1] ), 0, &sign ); - if ( sign == 1 ) - { - maxi = -maxi; - } - } - - *last_pulse_pos = maxi; - } - else - { - *last_pulse_pos = 0; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * FEC_lsf_estim_enc() - * - * Simulates LSF estimation in case of FEC in the encoder ( only one frame erasure is considered ) - * The estimated LSF vector is then used to check LSF stability and may invoke safety-net usage in the next frame - *-------------------------------------------------------------------*/ - -void FEC_lsf_estim_enc( - Encoder_State *st, /* i : Encoder static memory */ - float *lsf /* o : estimated LSF vector */ -) -{ - int16_t i; - float alpha, lsf_mean[M]; - - if ( st->L_frame == L_FRAME ) - { - mvr2r( UVWB_Ave, lsf_mean, M ); - } - else - { - mvr2r( GEWB2_Ave, lsf_mean, M ); - } - - /*----------------------------------------------------------------------* - * Initialize the alpha factor - *----------------------------------------------------------------------*/ - - if ( st->last_coder_type == UNVOICED ) - { - /* clearly unvoiced */ - alpha = ALPHA_UU; - } - else if ( st->last_coder_type == AUDIO || st->clas == INACTIVE_CLAS ) - { - alpha = 0.995f; - } - else if ( st->clas == UNVOICED_CLAS ) - { - /* if stable, do not flatten the spectrum in the first erased frame */ - alpha = st->stab_fac * ( 1.0f - 2.0f * ALPHA_U ) + 2.0f * ALPHA_U; - } - else if ( st->clas == UNVOICED_TRANSITION ) - { - alpha = ALPHA_UT; - } - else if ( st->clas == VOICED_CLAS || st->clas == ONSET ) - { - /* clearly voiced - mild convergence to the CNG spectrum for the first three erased frames */ - alpha = ALPHA_V; - } - else if ( st->clas == SIN_ONSET ) - { - alpha = ALPHA_S; - } - else - { - /* long erasures and onsets - rapid convergence to the CNG spectrum */ - alpha = ALPHA_VT; - } - - /*----------------------------------------------------------------------* - * Extrapolate LSF vector - *----------------------------------------------------------------------*/ - - /* extrapolate the old LSF vector */ - for ( i = 0; i < M; i++ ) - { - /* calculate mean LSF vector */ - lsf_mean[i] = BETA_FEC * lsf_mean[i] + ( 1 - BETA_FEC ) * st->lsf_adaptive_mean[i]; - - /* move old LSF vector towards the mean LSF vector */ - lsf[i] = alpha * st->lsf_old[i] + ( 1.0f - alpha ) * lsf_mean[i]; - } - - /* check LSF stability through LSF ordering */ - if ( st->L_frame == L_FRAME ) - { - reorder_lsf( lsf, MODE1_LSF_GAP, M, INT_FS_12k8 ); - } - else /* L_frame == L_FRAME16k */ - { - reorder_lsf( lsf, MODE1_LSF_GAP, M, INT_FS_16k ); - } - - return; -} -#endif diff --git a/lib_enc/SNR_calc.c b/lib_enc/SNR_calc.c index 0f8376c52..8d4adb219 100644 --- a/lib_enc/SNR_calc.c +++ b/lib_enc/SNR_calc.c @@ -40,224 +40,3 @@ #include "prot.h" #include "rom_enc.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * SNR_calc() - * - * - *-------------------------------------------------------------------*/ - -void SNR_calc( - const float frame_sb_energy[], /* i : energy of sub-band divided non-uniformly */ - const float sb_bg_energy[], /* i : sub-band background energy */ - const float t_bg_energy, /* i : time background energy of several frames */ - float *snr, /* o : frequency domain SNR */ - float *tsnr, /* o : time domain SNR */ - const float frame_energy, /* i : current frame energy */ - const int16_t bwidth /* i : audio band width */ -) -{ - int16_t i; - float snr_tmp, tmp; - int16_t SNR_sb_num; - SNR_sb_num = ENERGY_BAND_NUM[bwidth - CLDFBVAD_NB_ID]; - - snr_tmp = 0; - for ( i = 0; i < SNR_sb_num; i++ ) - { - tmp = ( frame_sb_energy[i] + 0.0001f ) / ( sb_bg_energy[i] + 0.0001f ); - tmp = (float) log10( tmp ); - if ( tmp > -0.1 ) - { - if ( bwidth == CLDFBVAD_SWB_ID ) - { - tmp = tmp * 3.2f; - } - else if ( bwidth == CLDFBVAD_WB_ID ) - { - tmp = tmp * 3.31f; - } - else - { - tmp = tmp * 3.0f; - } - snr_tmp += tmp; - } - } - if ( snr_tmp < 0 ) - { - snr_tmp = 0; - } - *snr = snr_tmp / SNR_sb_num; - tmp = ( frame_energy + 0.0001f ) / ( t_bg_energy + 0.0001f ); - tmp = (float) log10( tmp ); - *tsnr = tmp * 3.0f; - if ( bwidth == CLDFBVAD_SWB_ID ) - { - tmp = ( frame_energy ) / ( t_bg_energy + FLT_MIN ); - tmp = (float) log10( tmp + FLT_MIN ); - *tsnr = tmp * 2.8f; - } - - return; -} - - -/*-------------------------------------------------------------------* - * calc_snr_flux() - * - * - *-------------------------------------------------------------------*/ - -void calc_snr_flux( - float tsnr, /* i : time-domain SNR */ - float pre_snr[], /* i/o: time-domain SNR storage */ - float *snr_flux /* o : average tsnr */ -) -{ - int16_t i; - float snr_sum = 0.0f; - - if ( tsnr < 2.6f && tsnr > 0 ) - { - pre_snr[0] = tsnr; - } - else if ( tsnr <= 0 ) - { - pre_snr[0] = 0; - } - else - { - pre_snr[0] = 2.6f; - } - - snr_sum = 0; - for ( i = 0; i < PRE_SNR_NUM; i++ ) - { - snr_sum += pre_snr[i]; - } - *snr_flux = snr_sum / PRE_SNR_NUM; - for ( i = PRE_SNR_NUM - 1; i > 0; i-- ) - { - pre_snr[i] = pre_snr[i - 1]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * calc_lt_snr() - * - * - *-------------------------------------------------------------------*/ - -void calc_lt_snr( - float *lt_snr_org, /* o : original long time SNR */ - float *lt_snr, /* o : long time SNR calculated by fg_energy and bg_energy */ - const float fg_energy, /* i : foreground energy sum */ - const int16_t fg_energy_count, /* i : number of the foreground energy frame */ - const float bg_energy, /* i : background energy sum */ - const int16_t bg_energy_count, /* i : number of the background energy frame */ - const int16_t bw_index, /* i : band width index */ - const float lt_noise_sp_center0 /* i : long time noise spectral center by 0 */ -) -{ - float tmp_lt_noise_sp_center; - float rtn_lt_snr; - - const float offset = -0.00156247615814208984375f; - - tmp_lt_noise_sp_center = lt_noise_sp_center0 - 1.4f; - if ( tmp_lt_noise_sp_center > 0.8 ) - { - tmp_lt_noise_sp_center = 0.8f; - } - if ( tmp_lt_noise_sp_center < 0 ) - { - tmp_lt_noise_sp_center = 0.0f; - } - rtn_lt_snr = (float) log10( ( fg_energy * bg_energy_count + FLT_MIN ) / ( bg_energy * fg_energy_count + FLT_MIN ) ); - *lt_snr_org = rtn_lt_snr; - - if ( bg_energy_count < 56 || fg_energy_count < 56 ) - { - rtn_lt_snr = 2.1f; - } - - if ( bw_index == CLDFBVAD_NB_ID ) - { - rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.5f; - } - else if ( bw_index == CLDFBVAD_WB_ID ) - { - rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.50f; - } - else - { - rtn_lt_snr = ( rtn_lt_snr - 1.5f ) * 0.46f; - } - rtn_lt_snr = rtn_lt_snr + ( rtn_lt_snr * 0.4f + offset ) * tmp_lt_noise_sp_center * 0.4f; - if ( rtn_lt_snr < 0 ) - { - rtn_lt_snr = 0.0f; - } - - if ( rtn_lt_snr > 2.0 ) - { - rtn_lt_snr = 2.0f; - } - - *lt_snr = rtn_lt_snr; - - return; -} - - -/*-------------------------------------------------------------------* - * calc_lf_snr() - * - * - *-------------------------------------------------------------------*/ - -void calc_lf_snr( - float *lf_snr_smooth, /* o : smoothed lf_snr */ - float *lf_snr, /* o : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ - const float l_speech_snr, /* i : sum of active frames snr */ - const int16_t l_speech_snr_count, /* i : number of the active frame */ - const float l_silence_snr, /* i : sum of the nonactive frames snr */ - const int16_t l_silence_snr_count, /* i : number of the nonactive frame */ - const int16_t fg_energy_count, /* i : number of the foreground energy frame */ - const int16_t bg_energy_count, /* i : number of the background energy frame */ - const int16_t bw_index /* i : band width index */ -) -{ - float l_snr; - - l_snr = l_speech_snr / l_speech_snr_count - l_silence_snr / l_silence_snr_count; - *lf_snr_smooth = *lf_snr_smooth * 0.9f + 0.1f * l_snr; - - if ( bg_energy_count < 56 || fg_energy_count < 56 ) - { - l_snr = 4.8f; - } - - l_snr = ( l_snr - 3.0f ) * 0.12f; - - if ( l_snr < 0 ) - { - l_snr = 0; - } - - if ( l_snr > MAX_LF_SNR_TAB[bw_index] ) - { - l_snr = MAX_LF_SNR_TAB[bw_index]; - } - - *lf_snr = l_snr; - - return; -} -#endif diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index 7bd509e8b..ed5af451d 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -50,17 +50,14 @@ #include "wmc_auto.h" #include "options_warnings.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * acelp_core_enc() * * ACELP core encoder *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error acelp_core_enc( Encoder_State *st, /* i/o: encoder state structure */ const Word16 inp[], /* i : input signal of the current frame */ @@ -971,1023 +968,3 @@ ivas_error acelp_core_enc( return error; } -#else -ivas_error acelp_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float inp[], /* i : input signal of the current frame */ - const float ener, /* i : residual energy from Levinson-Durbin*/ - float A[NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes*/ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ - const float epsP[M + 1], /* i : LP prediction errors */ - float lsp_new[M], /* i : LSPs at the end of the frame */ - float lsp_mid[M], /* i : LSPs in the middle of the frame */ - const int16_t vad_hover_flag, /* i : VAD hangover flag */ - const int16_t attack_flag, /* i : attack flag (GSC or TC) */ - float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ - float *voice_factors, /* o : voicing factors */ - float old_syn_12k8_16k[], /* o : intermediate ACELP synthesis at 12.8kHz or 16kHz to be used by SWB BWE */ - float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ - int16_t *unbits, /* o : number of unused bits */ - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -) -{ - int16_t i, nBits; /* reserved bits */ - LPD_state_HANDLE hLPDmem; /* i/o: acelp memories */ - float old_exc_flt[L_EXC], *exc; /* excitation signal buffer */ - float lsf_new[M]; /* ISFs at the end of the frame */ - float Aq[NB_SUBFR16k * ( M + 1 )]; /* A(z) quantized for the 4 subframes */ - float syn[L_FRAME16k]; /* synthesis signal buffer */ - float res[L_FRAME16k]; /* Residual signal for FER protection */ - float exc2[L_FRAME16k]; /* enhanced excitation */ - float Es_pred; /* predicited scaled innovation energy */ - float tmp_noise; /* NB post-filter long-term noise energy*/ - int16_t tc_subfr; /* TC sub-frame indication */ - float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ - float *bwe_exc; /* excitation for SWB TBE */ - int16_t allow_cn_step; - int32_t int_fs; - float att; - int16_t nb_bits; /* parameters handling */ - - /* SC-VBR - back-up memories for LSF quantizer and synthesis filter */ - int16_t pstreaklen; - float mem_MA[M], mem_AR[M], Bin_E[L_FFT], Bin_E_old[L_FFT / 2], lsp_new_bck[M], lsp_mid_bck[M], mem_syn_bck[M]; - float clip_var, mem_w0_bck, streaklimit; - - float q_env[NUM_ENV_CNG]; - int16_t sid_bw = -1; - float exc3[L_FRAME16k]; - float syn1[L_FRAME16k]; - - float tilt_code_bck; - float gc_threshold_bck; - float clip_var_bck[6]; - int16_t next_force_sf_bck; - int16_t uc_two_stage_flag; - int16_t position; - float tmpF; - int16_t ppp_mode, nelp_mode; - int16_t tdm_lp_reuse_flag, tdm_low_rate_mode, tdm_Pitch_reuse_flag; - float *tdm_Pri_pitch_buf; - - /* bitstream */ - BSTR_ENC_HANDLE hBstr = st->hBstr; - - ivas_error error; - - error = IVAS_ERR_OK; - - if ( st->element_mode == IVAS_CPE_MDCT && st->core_brate <= SID_2k40 ) - { - /* Core was ACELP because of DTX in MDCT-Stereo, but SID encoding for that is done in separate function */ - return error; - } - - push_wmops( "acelp_core_enc" ); - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - hLPDmem = st->hLPDmem; - - Es_pred = 0; - - exc = old_exc_flt + L_EXC_MEM; /* pointer to excitation signal in the current frame */ - mvr2r( hLPDmem->old_exc_flt, old_exc_flt, L_EXC_MEM ); - - if ( st->hBWE_TD != NULL ) - { - bwe_exc = old_bwe_exc + PIT16k_MAX * 2; /* pointer to BWE excitation signal in the current frame */ - mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); - } - else - { - bwe_exc = NULL; - } - - st->bpf_off = 0; - if ( st->last_core == HQ_CORE || st->last_codec_mode == MODE2 || st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) - { - /* in case of HQ->ACELP switching, do not apply BPF */ - st->bpf_off = 1; - /* reset the GSC pre echo energy threshold in case of switching */ - if ( st->hGSCEnc != NULL ) - { - st->hGSCEnc->Last_frame_ener = (float) MAX_32; - } - } - - /* force safety-net LSFQ in the first frames after CNG segment */ - if ( st->last_core_brate <= SID_2k40 ) - { - st->Nb_ACELP_frames = 0; - } - st->Nb_ACELP_frames++; - - if ( st->L_frame == L_FRAME ) - { - int_fs = INT_FS_12k8; - } - else - { - int_fs = INT_FS_16k; - } - - tmp_noise = 0; - tc_subfr = -1; - position = -1; - - exc = old_exc_flt + L_EXC_MEM; /* pointer to excitation signal in the current frame */ - mvr2r( hLPDmem->old_exc_flt, old_exc_flt, L_EXC_MEM ); - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn1_flt, M ); - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn3_flt, M ); - - /* update Aw[] coefficients */ - weight_a_subfr( st->L_frame / L_SUBFR, A, Aw, st->gamma_flt, M ); -} - -if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) -{ - st->rate_switching_reset = 1; -} - -/*----------------------------------------------------------------* - * Encoding of CNG frames - *----------------------------------------------------------------*/ - -if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) -{ - if ( st->cng_type == LP_CNG ) - { - /* Run CNG post parameter update */ - cng_params_postupd( st->hTdCngEnc->ho_circ_ptr, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hTdCngEnc->ho_env_circ, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - - /* encode CNG parameters */ - CNG_enc( st, Aq, inp, ener, lsp_mid, lsp_new, lsf_new, &allow_cn_step, q_env, &sid_bw ); - - /* comfort noise generation */ - CNG_exc( st->core_brate, st->L_frame, &st->hTdCngEnc->Enew, &st->hTdCngEnc->cng_seed, exc, exc2, &st->hTdCngEnc->lp_ener, st->last_core_brate, &st->hDtxEnc->first_CNG, &st->hTdCngEnc->cng_ener_seed, bwe_exc, allow_cn_step, &st->hTdCngEnc->last_allow_cn_step, st->hTdCngEnc->num_ho, q_env, st->hTdCngEnc->lp_env, st->hTdCngEnc->old_env, st->hTdCngEnc->exc_mem, st->hTdCngEnc->exc_mem1, &sid_bw, &st->hTdCngEnc->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); - } - else - { - if ( st->core_brate == SID_2k40 && st->element_mode != IVAS_CPE_MDCT ) - { - FdCng_encodeSID( st ); - st->hDtxEnc->last_CNG_L_frame = st->L_frame; - } - - generate_comfort_noise_enc( st ); - - FdCng_exc_flt( st->hFdCngEnc->hFdCngCom, &st->hDtxEnc->CNG_mode, st->L_frame, st->lsp_old, st->hDtxEnc->first_CNG, st->hDtxEnc->lspCNG, Aq, lsp_new, lsf_new, exc, exc2, bwe_exc ); - mvr2r( exc2, exc3, st->L_frame ); - - if ( st->core_brate == SID_2k40 ) - { - if ( st->hTdCngEnc != NULL ) - { - tmpF = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, exc, st->L_frame ); - i = (int16_t) ( ( tmpF + 2.0f ) * STEP_SID ); - i = min( max( i, 0 ), 127 ); - st->hTdCngEnc->old_enr_index = i; - } - } - } - - /* Reset HO counter in the first SID frame */ - if ( st->hTdCngEnc != NULL ) - { - st->hTdCngEnc->burst_ho_cnt = 0; - } - - /* synthesis at 12.8kHz sampling rate */ - syn_12k8( st->L_frame, Aq, exc3, syn1, hLPDmem->mem_syn3_flt, 1 ); - - /* reset the encoder */ - CNG_reset_enc( st, pitch_buf, voice_factors, 0 ); - - /* update st->mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn1_flt, M ); - - /* update ACELP core synthesis filter memory */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn1 + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, syn1, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_flt, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /*Update MODE2 core switching memory*/ - deemph( syn1, st->preemph_fac_flt, st->L_frame, &( hLPDmem->syn_flt[M] ) ); - mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn_flt, M + 1 ); -} - -/*----------------------------------------------------------------* - * Encoding of all other frames - *----------------------------------------------------------------*/ - -else -{ - /*-----------------------------------------------------------------* - * Configure ACELP bit allocation - *-----------------------------------------------------------------*/ - - nb_bits = 0; - st->acelp_cfg.FEC_mode = 0; - uc_two_stage_flag = 0; - - if ( !nelp_mode && !ppp_mode ) - { - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - } - - /*-----------------------------------------------------------------* - * After inactive period, use the most up-to-date ISPs - *-----------------------------------------------------------------*/ - - if ( st->hDtxEnc != NULL && ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) ) - { - mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); - lsp2lsf( st->hDtxEnc->lspCNG, st->lsf_old, M, int_fs ); - } - - /*-----------------------------------------------------------------* - * Reset higher ACELP pre-quantizer in case of switching - *-----------------------------------------------------------------*/ - - if ( !st->use_acelp_preq ) - { - st->mem_deemp_preQ = 0.0f; - st->mem_preemp_preQ = 0.0f; - st->last_code_preq = 0; - st->last_nq_preQ = 0; - } - st->use_acelp_preq = 0; - - /*-----------------------------------------------------------------* - * LSF Quantization - * A[z] calculation - *-----------------------------------------------------------------*/ - - /* SC-VBR & channel-aware mode - back-up memories for LSF quantizer and synthesis filter */ - lsf_syn_mem_backup( st, &tilt_code_bck, &gc_threshold_bck, clip_var_bck, &next_force_sf_bck, lsp_new, lsp_mid, &clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, &mem_w0_bck, &streaklimit, &pstreaklen ); - - if ( !tdm_lp_reuse_flag ) - { - lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, st->GSC_IVAS_mode, tdm_lsfQ_PCh ); - } - else - { - const float *pt_interp_2; - - if ( st->active_cnt != 1 ) - { - int16_t beta_index; - float lsf_wgts[M]; - - /* intra_frame prediction for the LSFs */ - lsp2lsf( lsp_new, lsf_new, M, 12800 ); - - Unified_weighting( &st->Bin_E[L_FFT / 2], lsf_new, lsf_wgts, st->bwidth == NB, st->coder_type == UNVOICED, st->sr_core, M ); - - tdm_SCh_lsf_reuse( ENC, st->element_brate, lsf_new, lsp_new, tdm_lsfQ_PCh, lsf_wgts, &beta_index ); - - push_indice( hBstr, IND_IC_LSF_PRED, beta_index, TDM_IC_LSF_PRED_BITS ); - } - - pt_interp_2 = interpol_frac_12k8; - if ( tdm_low_rate_mode == 1 && st->coder_type > UNVOICED ) - { - pt_interp_2 = interpol_frac2; - } - - if ( st->active_cnt == 1 ) - { - mvr2r( lsp_new, st->lsp_old, M ); - lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); - lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); - } - - /* LSP interpolation and conversion of LSPs to A(z) */ - int_lsp( st->L_frame, st->lsp_old, lsp_new, Aq, M, pt_interp_2, 0 ); - - /* Check LSF stability (distance between old LSFs and current LSFs) */ - st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); - } - - if ( st->last_core == HQ_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory from last HQ frame */ - tmpF = hLPDmem->old_exc_flt[0]; - preemph( hLPDmem->old_exc_flt, st->preemph_fac_flt, st->L_frame, &tmpF ); - mvr2r( hLPDmem->old_exc_flt + st->L_frame - M, hLPDmem->mem_syn_flt, M ); - residu( Aq, M, hLPDmem->old_exc_flt, old_exc_flt, st->L_frame ); - } - - if ( st->last_core != ACELP_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory of old_bwe_exc */ - if ( st->L_frame == L_FRAME ) - { - lerp_flt( old_exc_flt, old_bwe_exc, L_EXC_MEM_DEC * HIBND_ACB_L_FAC, L_EXC_MEM_DEC ); - } - else - { - lerp_flt( old_exc_flt, old_bwe_exc, L_EXC_MEM_DEC * 2, L_EXC_MEM_DEC ); - } - } - - - /*---------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *---------------------------------------------------------------*/ - - calc_residu( inp, res, Aq, st->L_frame ); - - calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); - if ( att != 1.0f ) - { - v_multc( res, att, res, st->L_frame ); - } - - /*-----------------------------------------------------------------* - * Determine TC subframe classification - *-----------------------------------------------------------------*/ - - if ( st->coder_type == TRANSITION ) - { - tc_classif_enc( st->L_frame, &tc_subfr, &position, attack_flag, st->pitch[0], res ); - - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 1, NULL, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - } - - /*---------------------------------------------------------------* - * Calculation of prediction for scaled innovation energy - * (for memory-less gain quantizer) - *---------------------------------------------------------------*/ - - if ( nb_bits > 0 ) - { - Es_pred_enc( &Es_pred, &i, st->L_frame, L_SUBFR, res, st->voicing, nb_bits, uc_two_stage_flag ); - push_indice( hBstr, IND_ES_PRED, i, nb_bits ); - } - - /*------------------------------------------------------------* - * Encode excitation according to coding type - *------------------------------------------------------------*/ - - if ( tdm_low_rate_mode ) /* tdm stereo low rate mode */ - { - if ( st->coder_type <= UNVOICED ) - { - tdm_low_rate_enc( st, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, 0 /*attack_flag*/, lsf_new, &tmp_noise ); - } - else /* GENERIC */ - { - encod_gen_2sbfr( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - } - else if ( nelp_mode ) - { - /* SC-VBR - NELP frames */ - encod_nelp( st, inp, Aw, Aq, res, syn, &tmp_noise, exc, exc2, pitch_buf, voice_factors, bwe_exc ); - } - else if ( st->coder_type == UNVOICED ) - { - /* UNVOICED frames (Gauss. excitation) */ - encod_unvoiced( st, inp, Aw, Aq, Es_pred, uc_two_stage_flag, res, syn, &tmp_noise, exc, pitch_buf, voice_factors, bwe_exc ); - } - else if ( st->coder_type == TRANSITION ) - { - encod_tran( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tc_subfr, position, unbits ); - } - else if ( ppp_mode ) - { - /* SC-VBR - PPP frames */ - if ( ( error = encod_ppp( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc ) ) != IVAS_ERR_OK ) - { - return error; - } - - - if ( st->hSC_VBR->bump_up ) /* PPP failed, bump up */ - { - /* restore memories of LSF quantizer and synthesis filter */ - lsf_syn_mem_restore( st, tilt_code_bck, gc_threshold_bck, clip_var_bck, next_force_sf_bck, lsp_new, lsp_mid, clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, mem_w0_bck, streaklimit, pstreaklen ); - - /* Configure ACELP bit allocation */ - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, 0, &uc_two_stage_flag, 0, 0, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - - /* redo LSF quantization */ - lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, 0, NULL ); - - /* recalculation of LP residual (filtering through A[z] filter) */ - calc_residu( inp, res, Aq, st->L_frame ); - st->hTdCngEnc->burst_ho_cnt = 0; - - /* VOICED frames in SC-VBR */ - encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - } - else if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->inactive_coder_type_flag ) ) - { - /* AUDIO and INACTIVE frames (coded by GSC technology) */ - encod_audio( st, inp, Aw, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, attack_flag, lsf_new, &tmp_noise, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - else - { - /* GENERIC, VOICED and INACTIVE frames (coded by AVQ technology) */ - encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - - - /* update mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn_flt, hLPDmem->mem_syn1_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, syn, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_flt, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /*Update MODE2 core switching memory*/ - mvr2r( syn, syn1, st->L_frame ); - deemph( syn1, st->preemph_fac_flt, st->L_frame, &( hLPDmem->syn_flt[M] ) ); - mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn_flt, M + 1 ); - - if ( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) - { - mvr2r( syn1 + st->L_frame / 2, st->hTcxEnc->Txnq_flt, st->L_frame / 2 ); - } - - /*--------------------------------------------------------------------------------------* - * Modify the excitation signal when the noise is stationary - *--------------------------------------------------------------------------------------*/ - - if ( !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && nelp_mode != 1 && !( st->element_mode == IVAS_SCE && tdm_low_rate_mode ) ) - { - /* exc2 buffer is needed only for updating of Aq[] which is needed for core switching */ - mvr2r( exc, exc2, st->L_frame ); - stat_noise_uv_enc( st, epsP, lsp_new, lsp_mid, Aq, exc2, uc_two_stage_flag ); - } - - /*-----------------------------------------------------------------* - * Encode supplementary information for Frame Error Concealment - *-----------------------------------------------------------------*/ - - FEC_encode( hBstr, st->acelp_cfg, syn, st->coder_type, st->clas, pitch_buf, res, &st->Last_pulse_pos, st->L_frame, st->total_brate ); - /* SC-VBR temporary variables */ - pstreaklen = 0; - clip_var = 0; - mem_w0_bck = 0; - streaklimit = 0; - - /* channel-aware mode */ - reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); - - /* VBR modes */ - if ( st->Opt_SC_VBR ) - { - ppp_mode = st->hSC_VBR->ppp_mode; - nelp_mode = st->hSC_VBR->nelp_mode; - } - else - { - ppp_mode = 0; - nelp_mode = 0; - } - - /* TD stereo */ - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - tdm_lp_reuse_flag = hStereoTD->tdm_lp_reuse_flag; - tdm_low_rate_mode = hStereoTD->tdm_low_rate_mode; - tdm_Pitch_reuse_flag = hStereoTD->tdm_Pitch_reuse_flag; - tdm_Pri_pitch_buf = hStereoTD->tdm_Pri_pitch_buf; - } - else - { - tdm_lp_reuse_flag = 0; - tdm_low_rate_mode = 0; - if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - tdm_low_rate_mode = 1; - } - tdm_Pitch_reuse_flag = 0; - tdm_Pri_pitch_buf = NULL; - } - - /*-----------------------------------------------------------------* - * ACELP@12k8 / ACELP@16k switching - *-----------------------------------------------------------------*/ - - if ( st->last_L_frame != st->L_frame && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - /* in case of switching, do not apply BPF (flag employed also in updt_enc()) */ - st->bpf_off = 1; - - /* force safety-net LSFQ in the first frames after ACELP@12k8/ACELP@16k switching */ - st->Nb_ACELP_frames = 1; - - /* convert old quantized LSP vector */ - if ( st->L_frame == L_FRAME ) - { - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); - } - else - { - st->rate_switching_reset = st->rate_switching_reset_16kHz; - mvr2r( st->lsp_old16k, st->lsp_old, M ); - } - - /* convert old quantized LSF vector */ - lsp2lsf( st->lsp_old, st->lsf_old, M, int_fs ); - - /* interpolation of unquantized ISPs */ - if ( st->rate_switching_reset ) - { - /*extrapolation in case of unstable LSP*/ - int_lsp4( st->L_frame, lsp_mid, lsp_mid, lsp_new, A, M, 0 ); - } - else - { - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, A, M, 0 ); - } - - /* Reset LPC mem */ - mvr2r( GEWB_Ave, st->mem_AR, M ); - set_zero( st->mem_MA, M ); - - /* update synthesis filter memories */ - synth_mem_updt2_flt( st->L_frame, st->last_L_frame, hLPDmem->old_exc_flt, hLPDmem->mem_syn_r_flt, hLPDmem->mem_syn2_flt, hLPDmem->mem_syn_flt, ENC ); - mvr2r( hLPDmem->old_exc_flt, old_exc_flt, L_EXC_MEM ); - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn1_flt, M ); - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn3_flt, M ); - - /* update Aw[] coefficients */ - weight_a_subfr( st->L_frame / L_SUBFR, A, Aw, st->gamma_flt, M ); - } - - if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - /*----------------------------------------------------------------* - * Encoding of CNG frames - *----------------------------------------------------------------*/ - - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - if ( st->cng_type == LP_CNG ) - { - /* Run CNG post parameter update */ - cng_params_postupd( st->hTdCngEnc->ho_circ_ptr, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hTdCngEnc->ho_env_circ, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - - /* encode CNG parameters */ - CNG_enc( st, Aq, inp, ener, lsp_mid, lsp_new, lsf_new, &allow_cn_step, q_env, &sid_bw ); - - /* comfort noise generation */ - CNG_exc( st->core_brate, st->L_frame, &st->hTdCngEnc->Enew, &st->hTdCngEnc->cng_seed, exc, exc2, &st->hTdCngEnc->lp_ener, st->last_core_brate, &st->hDtxEnc->first_CNG, &st->hTdCngEnc->cng_ener_seed, bwe_exc, allow_cn_step, &st->hTdCngEnc->last_allow_cn_step, st->hTdCngEnc->num_ho, q_env, st->hTdCngEnc->lp_env, st->hTdCngEnc->old_env, st->hTdCngEnc->exc_mem, st->hTdCngEnc->exc_mem1, &sid_bw, &st->hTdCngEnc->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); - } - else - { - if ( st->core_brate == SID_2k40 && st->element_mode != IVAS_CPE_MDCT ) - { - FdCng_encodeSID( st ); - st->hDtxEnc->last_CNG_L_frame = st->L_frame; - } - - generate_comfort_noise_enc( st ); - - FdCng_exc_flt( st->hFdCngEnc->hFdCngCom, &st->hDtxEnc->CNG_mode, st->L_frame, st->lsp_old, st->hDtxEnc->first_CNG, st->hDtxEnc->lspCNG, Aq, lsp_new, lsf_new, exc, exc2, bwe_exc ); - mvr2r( exc2, exc3, st->L_frame ); - - if ( st->core_brate == SID_2k40 ) - { - if ( st->hTdCngEnc != NULL ) - { - tmpF = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, exc, st->L_frame ); - i = (int16_t) ( ( tmpF + 2.0f ) * STEP_SID ); - i = min( max( i, 0 ), 127 ); - st->hTdCngEnc->old_enr_index = i; - } - } - } - - /* Reset HO counter in the first SID frame */ - if ( st->hTdCngEnc != NULL ) - { - st->hTdCngEnc->burst_ho_cnt = 0; - } - - /* synthesis at 12.8kHz sampling rate */ - syn_12k8( st->L_frame, Aq, exc3, syn1, hLPDmem->mem_syn3_flt, 1 ); - - /* reset the encoder */ - CNG_reset_enc( st, pitch_buf, voice_factors, 0 ); - - /* update st->mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn1_flt, M ); - - /* update ACELP core synthesis filter memory */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn1 + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, syn1, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_flt, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /*Update MODE2 core switching memory*/ - deemph( syn1, st->preemph_fac_flt, st->L_frame, &( hLPDmem->syn_flt[M] ) ); - mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn_flt, M + 1 ); - } - - /*----------------------------------------------------------------* - * Encoding of all other frames - *----------------------------------------------------------------*/ - - else - { - /*-----------------------------------------------------------------* - * Configure ACELP bit allocation - *-----------------------------------------------------------------*/ - - nb_bits = 0; - st->acelp_cfg.FEC_mode = 0; - uc_two_stage_flag = 0; - - if ( !nelp_mode && !ppp_mode ) - { - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, st->GSC_noisy_speech, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - } - - /*-----------------------------------------------------------------* - * After inactive period, use the most up-to-date ISPs - *-----------------------------------------------------------------*/ - - if ( st->hDtxEnc != NULL && ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_2k40 ) ) - { - mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); - lsp2lsf( st->hDtxEnc->lspCNG, st->lsf_old, M, int_fs ); - } - - /*-----------------------------------------------------------------* - * Reset higher ACELP pre-quantizer in case of switching - *-----------------------------------------------------------------*/ - - if ( !st->use_acelp_preq ) - { - st->mem_deemp_preQ = 0.0f; - st->mem_preemp_preQ = 0.0f; - st->last_code_preq = 0; - st->last_nq_preQ = 0; - } - st->use_acelp_preq = 0; - - /*-----------------------------------------------------------------* - * LSF Quantization - * A[z] calculation - *-----------------------------------------------------------------*/ - - /* SC-VBR & channel-aware mode - back-up memories for LSF quantizer and synthesis filter */ - lsf_syn_mem_backup( st, &tilt_code_bck, &gc_threshold_bck, clip_var_bck, &next_force_sf_bck, lsp_new, lsp_mid, &clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, &mem_w0_bck, &streaklimit, &pstreaklen ); - - if ( !tdm_lp_reuse_flag ) - { - lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, st->GSC_IVAS_mode, tdm_lsfQ_PCh ); - } - else - { - const float *pt_interp_2; - - if ( st->active_cnt != 1 ) - { - int16_t beta_index; - float lsf_wgts[M]; - - /* intra_frame prediction for the LSFs */ - lsp2lsf( lsp_new, lsf_new, M, 12800 ); - - Unified_weighting( &st->Bin_E[L_FFT / 2], lsf_new, lsf_wgts, st->bwidth == NB, st->coder_type == UNVOICED, st->sr_core, M ); -#ifdef IVAS_FLOAT_FIXED - Word16 lsf_new_fx[M]; - Word16 lsp_new_fx[M]; - Word16 tdm_lsfQ_PCh_fx[M]; - Word16 lsf_wgts_fx[M]; - for ( int ii = 0; ii < M; ii++ ) - { - lsf_new_fx[ii] = (Word16) ( ( lsf_new[ii] ) * 2.56f ); - tdm_lsfQ_PCh_fx[ii] = (Word16) ( ( tdm_lsfQ_PCh[ii] ) * 2.56f ); - lsf_wgts_fx[ii] = (Word16) ( ( lsf_wgts[ii] ) * 2.56f ); - } - floatToFixed_arr( lsp_new, lsp_new_fx, 15, M ); - - tdm_SCh_lsf_reuse_fx( ENC, st->element_brate, lsf_new_fx, lsp_new_fx, tdm_lsfQ_PCh_fx, lsf_wgts_fx, &beta_index ); - - for ( int ii = 0; ii < M; ii++ ) - { - lsf_new[ii] = (Word16) ( ( lsf_new_fx[ii] ) / 2.56f ); - lsf_wgts[ii] = (Word16) ( ( lsf_wgts_fx[ii] ) / 2.56f ); - } - fixedToFloat_arr( lsp_new_fx, lsp_new, 15, M ); -#else - tdm_SCh_lsf_reuse( ENC, st->element_brate, lsf_new, lsp_new, tdm_lsfQ_PCh, lsf_wgts, &beta_index ); -#endif - push_indice( hBstr, IND_IC_LSF_PRED, beta_index, TDM_IC_LSF_PRED_BITS ); - } - - pt_interp_2 = interpol_frac_12k8; - if ( tdm_low_rate_mode == 1 && st->coder_type > UNVOICED ) - { - pt_interp_2 = interpol_frac2; - } - - if ( st->active_cnt == 1 ) - { - mvr2r( lsp_new, st->lsp_old, M ); - lsp2lsf( lsp_new, st->lsf_old, M, st->sr_core ); - lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); - } - - /* LSP interpolation and conversion of LSPs to A(z) */ - int_lsp( st->L_frame, st->lsp_old, lsp_new, Aq, M, pt_interp_2, 0 ); - - /* Check LSF stability (distance between old LSFs and current LSFs) */ - st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); - } - - if ( st->last_core == HQ_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory from last HQ frame */ - tmpF = hLPDmem->old_exc_flt[0]; - preemph( hLPDmem->old_exc_flt, st->preemph_fac_flt, st->L_frame, &tmpF ); - mvr2r( hLPDmem->old_exc_flt + st->L_frame - M, hLPDmem->mem_syn_flt, M ); - residu( Aq, M, hLPDmem->old_exc_flt, old_exc_flt, st->L_frame ); - } - - if ( st->last_core != ACELP_CORE && st->element_mode > EVS_MONO ) - { - /* Prepare ACB memory of old_bwe_exc */ - if ( st->L_frame == L_FRAME ) - { - lerp_flt( old_exc_flt, old_bwe_exc, L_EXC_MEM_DEC * HIBND_ACB_L_FAC, L_EXC_MEM_DEC ); - } - else - { - lerp_flt( old_exc_flt, old_bwe_exc, L_EXC_MEM_DEC * 2, L_EXC_MEM_DEC ); - } - } - - - /*---------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *---------------------------------------------------------------*/ - - calc_residu( inp, res, Aq, st->L_frame ); - - calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); - if ( att != 1.0f ) - { - v_multc( res, att, res, st->L_frame ); - } - - /*-----------------------------------------------------------------* - * Determine TC subframe classification - *-----------------------------------------------------------------*/ - - if ( st->coder_type == TRANSITION ) - { - tc_classif_enc( st->L_frame, &tc_subfr, &position, attack_flag, st->pitch[0], res ); - - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 1, NULL, unbits, st->element_mode, &uc_two_stage_flag, tdm_lp_reuse_flag, tdm_low_rate_mode, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - } - - /*---------------------------------------------------------------* - * Calculation of prediction for scaled innovation energy - * (for memory-less gain quantizer) - *---------------------------------------------------------------*/ - - if ( nb_bits > 0 ) - { - Es_pred_enc( &Es_pred, &i, st->L_frame, L_SUBFR, res, st->voicing, nb_bits, uc_two_stage_flag ); - push_indice( hBstr, IND_ES_PRED, i, nb_bits ); - } - - /*------------------------------------------------------------* - * Encode excitation according to coding type - *------------------------------------------------------------*/ - - if ( tdm_low_rate_mode ) /* tdm stereo low rate mode */ - { - if ( st->coder_type <= UNVOICED ) - { - tdm_low_rate_enc( st, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, 0 /*attack_flag*/, lsf_new, &tmp_noise ); - } - else /* GENERIC */ - { - encod_gen_2sbfr( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - } - else if ( nelp_mode ) - { - /* SC-VBR - NELP frames */ - encod_nelp( st, inp, Aw, Aq, res, syn, &tmp_noise, exc, exc2, pitch_buf, voice_factors, bwe_exc ); - } - else if ( st->coder_type == UNVOICED ) - { - /* UNVOICED frames (Gauss. excitation) */ - encod_unvoiced( st, inp, Aw, Aq, Es_pred, uc_two_stage_flag, res, syn, &tmp_noise, exc, pitch_buf, voice_factors, bwe_exc ); - } - else if ( st->coder_type == TRANSITION ) - { - encod_tran( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, tc_subfr, position, unbits ); - } - else if ( ppp_mode ) - { - /* SC-VBR - PPP frames */ - if ( ( error = encod_ppp( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc ) ) != IVAS_ERR_OK ) - { - return error; - } - - - if ( st->hSC_VBR->bump_up ) /* PPP failed, bump up */ - { - /* restore memories of LSF quantizer and synthesis filter */ - lsf_syn_mem_restore( st, tilt_code_bck, gc_threshold_bck, clip_var_bck, next_force_sf_bck, lsp_new, lsp_mid, clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, mem_w0_bck, streaklimit, pstreaklen ); - - /* Configure ACELP bit allocation */ - config_acelp1_IVAS( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, st->coder_type, tc_subfr, 0, &nb_bits, unbits, 0, &uc_two_stage_flag, 0, 0, st->idchan, st->active_cnt, tdm_Pitch_reuse_flag, st->tdm_LRTD_flag, st->GSC_IVAS_mode ); - - /* redo LSF quantization */ - lsf_enc( st, lsf_new, lsp_new, lsp_mid, Aq, tdm_low_rate_mode, 0, NULL ); - - /* recalculation of LP residual (filtering through A[z] filter) */ - calc_residu( inp, res, Aq, st->L_frame ); - st->hTdCngEnc->burst_ho_cnt = 0; - - /* VOICED frames in SC-VBR */ - encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - } - else if ( st->coder_type == AUDIO || ( st->coder_type == INACTIVE && st->inactive_coder_type_flag ) ) - { - /* AUDIO and INACTIVE frames (coded by GSC technology) */ - encod_audio( st, inp, Aw, Aq, res, syn, exc, pitch_buf, voice_factors, bwe_exc, attack_flag, lsf_new, &tmp_noise, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - else - { - /* GENERIC, VOICED and INACTIVE frames (coded by AVQ technology) */ - encod_gen_voic( st, inp, Aw, Aq, Es_pred, res, syn, exc, exc2, pitch_buf, voice_factors, bwe_exc, unbits, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - } - - - /* update mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn_flt, hLPDmem->mem_syn1_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn + st->L_frame - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* save and delay synthesis to be used by SWB BWE */ - if ( st->hBWE_FD != NULL ) - { - save_old_syn( st->L_frame, syn, old_syn_12k8_16k, st->hBWE_FD->old_syn_12k8_16k, st->preemph_fac_flt, &st->hBWE_FD->mem_deemph_old_syn ); - } - - /*Update MODE2 core switching memory*/ - mvr2r( syn, syn1, st->L_frame ); - deemph( syn1, st->preemph_fac_flt, st->L_frame, &( hLPDmem->syn_flt[M] ) ); - mvr2r( syn1 + st->L_frame - M - 1, hLPDmem->syn_flt, M + 1 ); - - if ( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) - { - mvr2r( syn1 + st->L_frame / 2, st->hTcxEnc->Txnq_flt, st->L_frame / 2 ); - } - - /*--------------------------------------------------------------------------------------* - * Modify the excitation signal when the noise is stationary - *--------------------------------------------------------------------------------------*/ - - if ( !( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) && nelp_mode != 1 && !( st->element_mode == IVAS_SCE && tdm_low_rate_mode ) ) - { - /* exc2 buffer is needed only for updating of Aq[] which is needed for core switching */ - mvr2r( exc, exc2, st->L_frame ); - stat_noise_uv_enc( st, epsP, lsp_new, lsp_mid, Aq, exc2, uc_two_stage_flag ); - } - - /*-----------------------------------------------------------------* - * Encode supplementary information for Frame Error Concealment - *-----------------------------------------------------------------*/ - - FEC_encode( hBstr, st->acelp_cfg, syn, st->coder_type, st->clas, pitch_buf, res, &st->Last_pulse_pos, st->L_frame, st->total_brate ); - - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME ) - { - mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - else - { - mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - } - - - } /* end of active inp coding */ - - - /*-----------------------------------------------------------------* - * Write ACELP unused bits - *-----------------------------------------------------------------*/ - - if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA && st->core_brate != PPP_NELP_2k80 ) - { - nBits = st->acelp_cfg.ubits; - - while ( nBits > 0 ) - { - i = min( nBits, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - nBits -= i; - } - } - - /*-----------------------------------------------------------------* - * Apply non linearity in case of SWB TBE - *-----------------------------------------------------------------*/ - - if ( st->hBWE_TD != NULL ) - { - if ( ( st->last_Opt_SC_VBR == 1 && st->Opt_SC_VBR == 0 ) || ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->last_extl != SWB_TBE && st->last_extl != WB_TBE && st->last_extl != FB_TBE ) || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && !st->tdm_LRTD_flag ) ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - } - - if ( !st->Opt_SC_VBR && ( st->idchan == 0 || st->element_mode != IVAS_CPE_TD || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) ) - { - /* Apply a non linearity to the SHB excitation */ - non_linearity( bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); - } - - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - } - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - updt_enc( st, old_exc_flt, pitch_buf, Es_pred, Aq, lsf_new, lsp_new, old_bwe_exc ); - - if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && st->core_brate > SID_2k40 ) - { - /* update CNG parameters in active frames */ - cng_params_upd( lsp_new, exc, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - - if ( st->L_frame == L_FRAME ) - { - /* store LSPs@16k, potentially to be used in CNG@16k */ - mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); - } - - /* set LSP@16k flag for the first buffer */ - st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - - /* efficient DTX hangover control */ - if ( st->hTdCngEnc->burst_ho_cnt > 1 ) - { - dtx_hangover_control( st, lsp_new ); - } - } - - /* SC-VBR update of average data rate */ - if ( st->vad_flag == 1 ) - { - /* reset in case of bitrate switching in EVS */ - if ( st->hSC_VBR != NULL ) - { - update_average_rate( st->hSC_VBR, st->core_brate ); - } - } - - pop_wmops(); - - return error; -} -#endif diff --git a/lib_enc/acelp_core_switch_enc.c b/lib_enc/acelp_core_switch_enc.c index 465df84a2..9d6f499db 100644 --- a/lib_enc/acelp_core_switch_enc.c +++ b/lib_enc/acelp_core_switch_enc.c @@ -42,423 +42,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void encod_gen_voic_core_switch( Encoder_State *st, const int16_t L_frame, const float inp[], const float Aq[], const float A[], const int16_t T_op[], const float voicing[], float *exc, const int32_t core_bitrate ); - -static void bwe_switch_enc( Encoder_State *st, const float *old_input ); - - -/*-------------------------------------------------------------------* - * acelp_core_switch_enc() - * - * ACELP core encoder in the ACELP->HQ switching frame - *--------------------------------------------------------------------*/ - -void acelp_core_switch_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float inp12k8[], /* i : input signal @12.8 kHz */ - const float inp16k[], /* i : input signal @16 kHz */ - const float A[NB_SUBFR16k * ( M + 1 )] /* i : A(z) unquantized for the 4 subframes*/ -) -{ - int16_t i, j, T_op[2]; - float old_exc[L_EXC], *exc; /* excitation signal buffer */ - const float *inp; - int32_t cbrate; - float Aq[2 * ( M + 1 )]; - uint16_t value; - int16_t nb_bits; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /* initializations */ - exc = old_exc + L_EXC_MEM; /* pointer to excitation signal in the current frame */ - mvr2r( st->hLPDmem->old_exc_flt, old_exc, L_EXC_MEM ); - - mvr2r( st->old_Aq_12_8, Aq, M + 1 ); - mvr2r( st->old_Aq_12_8, Aq + ( M + 1 ), M + 1 ); - - T_op[0] = st->pitch[0]; - T_op[1] = st->pitch[1]; - - - /*----------------------------------------------------------------* - * set switching frame bitrate - *----------------------------------------------------------------*/ - - if ( st->last_L_frame == L_FRAME ) /* ACELP@12k8 core */ - { - inp = inp12k8; - - if ( st->core_brate > ACELP_24k40 ) - { - cbrate = ACELP_24k40; - } - else - { - cbrate = st->core_brate; - } - } - else /* ACELP@16k core */ - { - inp = inp16k; - - if ( st->core_brate <= ACELP_8k00 ) - { - cbrate = ACELP_8k00; - } - else if ( st->core_brate <= ACELP_14k80 ) - { - cbrate = ACELP_14k80; - } - else - { - cbrate = min( st->core_brate, ACELP_22k60 ); - } - } - - if ( st->last_L_frame != L_FRAME ) /* ACELP@16k core */ - { - T_op[0] = (short) ( 1.25f * T_op[0] + 0.5f ); - T_op[1] = (short) ( 1.25f * T_op[1] + 0.5f ); - } - /*----------------------------------------------------------------* - * Excitation encoding - *----------------------------------------------------------------*/ - - config_acelp1_IVAS( ENC, st->total_brate, cbrate, st->core, -1, -1, st->last_L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, GENERIC, -1, -1, &j, &i, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, st->active_cnt, 0 /*tdm_Pitch_reuse_flag*/, 0, 0 /*GSC_IVAS_mode*/ ); - - encod_gen_voic_core_switch( st, st->last_L_frame, inp, Aq, A, T_op, st->voicing, exc, cbrate ); - - /*----------------------------------------------------------------* - * Manipulate ACELP subframe indices (move them to their proper place) - *----------------------------------------------------------------*/ - - i = find_indice( hBstr, TAG_ACELP_SUBFR_LOOP_START, &value, &nb_bits ); - while ( hBstr->ind_list[i].id == TAG_ACELP_SUBFR_LOOP_START ) - { - push_indice( hBstr, IND_CORE_SWITCHING_CELP_SUBFRAME, hBstr->ind_list[i].value, hBstr->ind_list[i].nb_bits ); - i++; - } - delete_indice( hBstr, TAG_ACELP_SUBFR_LOOP_START ); - - /*----------------------------------------------------------------* - * BWE encoding - *----------------------------------------------------------------*/ - - if ( !( ( st->last_L_frame == L_FRAME16k && inner_frame_tbl[st->bwidth] == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) - { - bwe_switch_enc( st, (const float *) st->old_input_signal ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * encod_gen_voic_core_switch() - * - * Encode excitation signal in ACELP->HQ switching frame - *-------------------------------------------------------------------*/ - -static void encod_gen_voic_core_switch( - Encoder_State *st, /* i/o: state structure */ - const int16_t L_frame, /* i : length of the frame */ - const float inp[], /* i : input signal */ - const float Aq[], /* i : LP coefficients */ - const float A[], /* i : unquantized A(z) filter */ - const int16_t T_op[], /* i : open loop pitch */ - const float voicing[], /* i : voicing */ - float *exc, /* i/o: current non-enhanced excitation */ - const int32_t core_bitrate /* i : switching frame bitrate */ -) -{ - float res[L_SUBFR]; /* residual signal */ - float Ap[M + 1]; /* A(z) with spectral expansion */ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float xn2[L_SUBFR]; /* Target vector for codebook search */ - float cn[L_SUBFR]; /* Target vector in residual domain */ - float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float code[L_SUBFR]; /* Fixed codebook excitation */ - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float y2[L_SUBFR]; /* Filtered algebraic excitation */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - int16_t i; /* tmp variables */ - int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ - int16_t T0_min, T0_max; /* pitch variables */ - float pitch; /* floating pitch value */ - float g_corr[6]; /* ACELP correl, values + gain pitch */ - int16_t clip_gain; /* ISF clip gain */ - int16_t unbits; /* number of unused bits for EVS_PI */ - float norm_gain_code; - int16_t pitch_limit_flag; - float tmpF, dummyF[NB_SUBFR16k]; - int16_t lp_select, lp_flag; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - unbits = 0; - - if ( L_frame == L_FRAME ) - { - T0_max = PIT_MAX; - T0_min = PIT_MIN; - } - else /* L_frame == L_FRAME16k */ - { - T0_max = PIT16k_MAX; - T0_min = PIT16k_MIN; - } - - /*------------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *------------------------------------------------------------------*/ - - residu( Aq, M, inp, res, L_SUBFR ); - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - mvr2r( res, exc, L_SUBFR ); - - if ( L_frame == L_FRAME16k ) - { - weight_a( A, Ap, GAMMA16k_FLT, M ); /* Bandwidth expansion of A(z) filter coefficients */ - find_targets( inp, hLPDmem->mem_syn_flt, 0, &( hLPDmem->mem_w0_flt ), Aq, res, L_SUBFR, Ap, PREEMPH_FAC_16k_FLT, xn, cn, h1 ); - } - else - { - weight_a( A, Ap, GAMMA1_FLT, M ); /* Bandwidth expansion of A(z) filter coefficients */ - find_targets( inp, hLPDmem->mem_syn_flt, 0, &( hLPDmem->mem_w0_flt ), Aq, res, L_SUBFR, Ap, PREEMPH_FAC_FLT, xn, cn, h1 ); - } - - /*----------------------------------------------------------------* - * Close-loop pitch search and quantization - * Adaptive exc. construction - *----------------------------------------------------------------*/ - - set_f( dummyF, -1, NB_SUBFR16k ); /* hack to signal ACELP->HQ switching frame */ - pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, core_bitrate, 0, L_frame, GENERIC, &pitch_limit_flag, 0, exc, L_SUBFR, T_op, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, 0 /*hStereoTD->tdm_Pitch_reuse_flag*/, dummyF /*hStereoTD->tdm_Pri_pitch_buf*/ ); - - /*-----------------------------------------------------------------* - * Find adaptive exitation - *-----------------------------------------------------------------*/ - - pred_lt4_flt( exc, exc, T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, core_bitrate, voicing, 0, GENERIC, xn, st->clip_var ); - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation, codebook target computation - *-----------------------------------------------------------------*/ - - lp_flag = st->acelp_cfg.ltf_mode; - - lp_select = lp_filt_exc_enc( MODE1, GENERIC, 0, exc, h1, xn, y1, xn2, L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, core_bitrate, 0, L_frame, L_frame, GENERIC, st->bwidth, 0, 0, -1, Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, pitch, xn2, code, y2, &unbits, L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - if ( L_frame == L_FRAME ) - { - gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, 0, -1, xn, y1, y2, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - else - { - gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, 0, -1, xn, y1, y2, code, st->old_Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - - gp_clip_test_gain_pit( st->element_mode, core_bitrate, gain_pit, st->clip_var ); - - hLPDmem->tilt_code_flt = est_tilt( exc, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Construct adaptive part of the excitation - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - tmpF = gain_pit * exc[i]; - exc[i] = tmpF + gain_code * code[i]; - } - - /* write reserved bits */ - if ( unbits ) - { - push_indice( hBstr, IND_UNUSED, 0, unbits ); - } - - /*-----------------------------------------------------------------* - * long term prediction on the 2nd sub frame - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[L_SUBFR], &exc[L_SUBFR], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i + L_SUBFR] *= gain_pit; - } - - return; -} - - -/*-------------------------------------------------------------------* - * bwe_switch_enc() - * - * Encode BWE in ACELP->HQ switching frame - *-------------------------------------------------------------------*/ - -static void bwe_switch_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *new_speech /* i : original input signal */ -) -{ - int16_t i, k, delta, Loverlapp, d1, d1m, maxd1, ind1, fdelay, gapsize; - float accA, accB, min_sq_cross, min_corr, E1, E2, gain; - float tmp_mem[2 * L_FILT48k], tmp_mem2[2 * L_FILT48k], hb_synth_tmp[NS2SA( 48000, 10000000L )]; - const float *hp_filter; - float synth_subfr_bwe[SWITCH_MAX_GAP]; /* synthesized bwe for core switching */ - int16_t n, L, input_frame; - - input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); - - L = NS2SA( st->input_Fs, FRAME_SIZE_NS ); - n = (int16_t) ( (float) L * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - /* set multiplication factor according to the sampling rate */ - hp_filter = hp16000_48000; - fdelay = 48; - if ( st->input_Fs == 16000 ) - { - delta = 1; - if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_16000; - fdelay = 20; - } - } - else if ( st->input_Fs == 32000 ) - { - delta = 2; - if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_32000; - fdelay = 40; - } - else - { - hp_filter = hp16000_32000; - fdelay = 32; - } - } - else - { - delta = 3; - if ( st->last_L_frame == L_FRAME ) - { - hp_filter = hp12800_48000; - fdelay = 60; - } - } - - set_f( tmp_mem, 0, 2 * L_FILT48k ); - set_f( tmp_mem2, 0, 2 * L_FILT48k ); - - Loverlapp = delta * SWITCH_OVERLAP_8k * 2; - gapsize = delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ); - set_f( synth_subfr_bwe, 0, SWITCH_MAX_GAP ); - - for ( i = 0; i < gapsize + fdelay; i++ ) - { - /* target */ - synth_subfr_bwe[i] = new_speech[i + L / 2 + n + Loverlapp - gapsize]; - } - - for ( i = 0; i < fdelay; i++ ) - { - /* put the 40 past samples into the memory */ - tmp_mem[i] = new_speech[i + L / 2 + n + Loverlapp - gapsize - fdelay]; - } - - /* HP filtered target */ - fir( synth_subfr_bwe, hp_filter, synth_subfr_bwe, tmp_mem, gapsize + fdelay, fdelay, 0 ); - mvr2r( synth_subfr_bwe + (int16_t) ( fdelay / 2 ), synth_subfr_bwe, delta * ( NS2SA( 16000, SWITCH_GAP_LENGTH_NS ) ) - (int16_t) ( fdelay / 2 ) ); - - /* codebook */ - fir( new_speech, hp_filter, hb_synth_tmp, tmp_mem2, input_frame >> 1, fdelay, 1 ); - - min_sq_cross = -1; - min_corr = 0; - d1m = 0; - - maxd1 = (int16_t) ( ( ( input_frame >> 1 ) - gapsize - fdelay ) / delta ); - - /* find delay */ - for ( k = 0, d1 = 0; k < maxd1; d1 += delta, k++ ) - { - accA = accB = 0; - for ( i = 0; i < gapsize; i += delta ) - { - accA += hb_synth_tmp[d1 + i + fdelay] * hb_synth_tmp[d1 + i + fdelay]; - accB += hb_synth_tmp[d1 + i + fdelay] * synth_subfr_bwe[i]; - } - if ( accB * accB * min_corr >= min_sq_cross * accA ) - { - d1m = k; - min_corr = accA; - min_sq_cross = accB * accB; - } - } - - push_indice( st->hBstr, IND_CORE_SWITCHING_AUDIO_DELAY, d1m, AUDIODELAYBITS ); - - /* find gain */ - E1 = 0.0f; - E2 = 1.0f; /* to avoid /0 */ - - for ( i = 0; i < gapsize; i++ ) - { - E1 += synth_subfr_bwe[i] * synth_subfr_bwe[i]; - E2 += hb_synth_tmp[i + d1m * delta + fdelay] * hb_synth_tmp[i + d1m * delta + fdelay]; - } - - gain = (float) sqrt( (float) ( E1 / E2 ) ); - - ind1 = usquant( gain, &gain, MINVALUEOFFIRSTGAIN, DELTAOFFIRSTGAIN, ( 1 << NOOFGAINBITS1 ) ); - push_indice( st->hBstr, IND_CORE_SWITCHING_AUDIO_GAIN, ind1, NOOFGAINBITS1 ); - - return; -} -#endif diff --git a/lib_enc/acelp_enc_util.c b/lib_enc/acelp_enc_util.c index 8b8cc5878..eb574bd70 100644 --- a/lib_enc/acelp_enc_util.c +++ b/lib_enc/acelp_enc_util.c @@ -46,31 +46,3 @@ * * Multiplication of Toeplitz matrix with vector c, such that d = toeplitz(R)*c *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void E_ACELP_toeplitz_mul( - const float R[], - const float c[], - float d[] ) -{ - int16_t k, j; - float s; - - for ( k = 0; k < L_SUBFR; k++ ) - { - s = R[k] * c[0]; - - for ( j = 1; j < k; j++ ) - { - s += R[k - j] * c[j]; - } - - for ( ; j < L_SUBFR; j++ ) - { - s += R[j - k] * c[j]; - } - d[k] = s; - } - - return; -} -#endif diff --git a/lib_enc/amr_wb_enc.c b/lib_enc/amr_wb_enc.c index e6b872d46..6056f600b 100644 --- a/lib_enc/amr_wb_enc.c +++ b/lib_enc/amr_wb_enc.c @@ -42,515 +42,4 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * amr_wb_enc() - * - * AMR-WB encoder - *-------------------------------------------------------------------*/ - -void amr_wb_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t *input_sp, /* i : input signal */ - float *mem_hp20_in, /* i/o: hp20 filter memory */ - const int16_t n_samples /* i : number of input samples */ -) -{ - int16_t i, delay, harm_flag; - float old_inp[L_INP_12k8], *new_inp, *inp; /* buffer of old input signal */ - float old_inp_16k[L_INP_12k8 + L_SUBFR], *inp_16k, *new_inp_16k; /* buffer of old input signal @16kHz*/ - float old_exc_flt[L_EXC], *exc; /* excitation signal buffer */ - float old_wsp[L_WSP], *wsp; /* weighted input signal buffer */ - int16_t input_frame; /* frame length at input sampling freq. */ - float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ - float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - float tmpN[NB_BANDS]; /* temporary noise update */ - float tmpE[NB_BANDS], PS[L_FFT / 2]; /* temporary averaged energy of 2 sf. */ - float corr_shift; /* correlation shift */ - float relE; /* frame relative energy */ - float non_staX, cor_map_sum, sp_div; - float Etot; /* total energy */ - float ener; /* residual energy from Levinson-Durbin */ - float A[NB_SUBFR * ( M + 1 )]; /* A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR * ( M + 1 )]; /* weigted A(z) unquant. for 4 subframes*/ - float epsP[M + 1]; /* LP prediction errors */ - float isp_new[M]; /* ISPs at the end of the frame */ - float isf_new[M]; /* ISFs at the end of the frame */ - float isp_tmp[M]; - float Aq[NB_SUBFR * ( M + 1 )]; /* A(z) quantized for the 4 subframes */ - float syn[L_FRAME]; /* synthesis vector */ - float res[L_FRAME]; /* residual signal for FER protection */ - float exc2[L_FRAME]; /* enhanced excitation */ - float pitch_buf[NB_SUBFR]; /* floating pitch for each subframe */ - float dummy_buf[L_FRAME32k]; /* dummy buffer - no usage */ - float snr_sum_he; - int16_t allow_cn_step; - int16_t localVAD_HE_SAD; - int16_t tmps; - int16_t vad_flag_dtx; - int16_t vad_hover_flag; - int16_t hf_gain[NB_SUBFR]; - int16_t high_lpn_flag; - float lp_bckr, hp_bckr; - float q_env[NUM_ENV_CNG]; - int16_t sid_bw = 0; - float exc3[L_FRAME]; - float fft_buff[2 * L_FFT]; - float sp_floor; - float tmp; - int16_t old_pitch1; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - push_wmops( "amr_wb_enc" ); - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - st->L_frame = L_FRAME; - st->gamma_flt = GAMMA1_FLT; - st->core = AMR_WB_CORE; - st->core_brate = st->total_brate; - st->input_bwidth = st->last_input_bwidth; - st->bwidth = st->last_bwidth; - st->extl = -1; - st->mdct_sw = 0; - st->coder_type = GENERIC; - input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); /* frame length of the input signal */ - st->encoderPastSamples_enc = ( L_FRAME * 9 ) / 16; - st->encoderLookahead_enc = L_LOOK_12k8; - - - st->bpf_off = 0; - if ( st->last_core == HQ_CORE || st->last_codec_mode == MODE2 ) - { - st->bpf_off = 1; - } - - st->igf = 0; - - /* Updates in case of EVS primary mode -> AMR-WB IO mode switching */ - if ( st->last_core != AMR_WB_CORE ) - { - updt_IO_switch_enc( st, input_frame ); - } - - /* Updates in case of HQ -> AMR-WB IO switching */ - core_switching_pre_enc( st, NULL, NULL, 0, 0 ); - - set_s( hf_gain, 0, NB_SUBFR ); - - set_f( old_inp, 0.0f, L_INP_12k8 ); - exc = old_exc_flt + L_EXC_MEM; /* pointer to excitation signal in the current frame */ - mvr2r( hLPDmem->old_exc_flt, old_exc_flt, L_EXC_MEM ); - - new_inp = old_inp + L_INP_MEM; /* pointer to new samples of the input signal */ - inp = new_inp - L_LOOK_12k8; /* pointer to current frame of input signal */ - wsp = old_wsp + L_WSP_MEM; /* pointer to current frame of weighted signal */ - - mvr2r( st->old_inp_12k8, old_inp, L_INP_MEM ); - mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); - - new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ - inp_16k = new_inp_16k - L_LOOK_16k; /* pointer to the current frame of input signal in 16kHz core */ - mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM ); - - /* in case of switching, reset AMR-WB BWE memories */ - if ( st->total_brate == ACELP_23k85 && st->last_core_brate != ACELP_23k85 ) - { - hf_cod_init( st->hAmrwb_IO->mem_hp400_enc, st->hAmrwb_IO->mem_hf_enc, st->hAmrwb_IO->mem_syn_hf_enc, st->hAmrwb_IO->mem_hf2_enc, &st->hAmrwb_IO->gain_alpha ); - } - - /*----------------------------------------------------------------* - * set input samples buffer - *----------------------------------------------------------------*/ - - /* get delay to synchronize ACELP and MDCT frame */ - delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - - mvr2r( st->input - delay, st->old_input_signal, input_frame + delay ); - - /*----------------------------------------------------------------* - * Buffering of input signal - * (convert 'short' input data to 'float') - * HP filtering - *----------------------------------------------------------------*/ - - mvs2r( input_sp, st->input, n_samples ); - - for ( i = n_samples; i < input_frame; i++ ) - { - st->input[i] = 0; - } - - hp20_flt( st->input, input_frame, mem_hp20_in, st->input_Fs ); - - /*-----------------------------------------------------------------* - * switching from ACELP@16k core to AMR-WB IO mode - *-----------------------------------------------------------------*/ - - st->rate_switching_reset = 0; - - if ( st->last_core != AMR_WB_CORE && st->last_L_frame == L_FRAME16k && st->last_core != HQ_CORE ) - { - /* in case of switching, do not apply BPF */ - st->bpf_off = 1; - /* convert old quantized LSP vector */ - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, L_FRAME, 1 ); - - /* convert old quantized LSF vector */ - lsp2lsf( st->lsp_old, st->lsf_old, M, INT_FS_12k8 ); - - /* Reset LPC mem */ - mvr2r( GEWB_Ave, st->mem_AR, M ); - set_zero( st->mem_MA, M ); - - /* update synthesis filter memories */ - synth_mem_updt2_flt( L_FRAME, st->last_L_frame, hLPDmem->old_exc_flt, hLPDmem->mem_syn_r_flt, hLPDmem->mem_syn1_flt, hLPDmem->mem_syn_flt, ENC ); - mvr2r( hLPDmem->old_exc_flt, old_exc_flt, L_EXC_MEM ); - mvr2r( hLPDmem->mem_syn1_flt, hLPDmem->mem_syn2_flt, M ); - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn3_flt, M ); - - /* lsp -> isp */ - mvr2r( stable_ISP, isp_tmp, M ); - lsp2isp( st->lsp_old, st->lsp_old, isp_tmp, M ); - } - - /* update buffer of old subframe pitch values */ - if ( st->last_L_frame != L_FRAME ) - { - if ( st->last_L_frame == L_FRAME32k ) - { - tmp = (float) 12800 / (float) 32000; - } - else if ( st->last_L_frame == 512 ) - { - tmp = (float) 12800 / (float) 25600; - } - else /* st->last_L_frame == L_FRAME16k */ - { - tmp = (float) 12800 / (float) 16000; - } - - for ( i = NB_SUBFR16k - NB_SUBFR; i < NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 1] = tmp * st->old_pitch_buf[i]; - } - - for ( i = 2 * NB_SUBFR16k - NB_SUBFR; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i - 2] = tmp * st->old_pitch_buf[i]; - } - } - if ( st->last_bwidth == NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - /*----------------------------------------------------------------* - * Change the sampling frequency to 12.8 kHz - *----------------------------------------------------------------*/ - - modify_Fs( st->input, input_frame, st->input_Fs, new_inp, 12800, st->mem_decim, 0 ); - - /* update signal buffer */ - mvr2r( new_inp, st->buf_speech_enc_flt + L_FRAME, L_FRAME ); - - /*------------------------------------------------------------------* - * Perform fixed preemphasis through 1 - g*z^-1 - *-----------------------------------------------------------------*/ - - preemph( new_inp, PREEMPH_FAC_FLT, L_FRAME, &st->mem_preemph ); - - /*----------------------------------------------------------------* - * Compute spectrum, find energy per critical frequency band - * Track energy and signal dynamics - * Detect NB spectrum in a 16kHz-sampled input - *----------------------------------------------------------------*/ - - analy_sp( -1, NULL, st->input_Fs, inp, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, &Etot, st->min_band, st->max_band, dummy_buf, PS, fft_buff ); - - noise_est_pre( Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); - - /*----------------------------------------------------------------* - * VAD - *----------------------------------------------------------------*/ - - st->vad_flag = wb_vad( st, fr_bands, &tmps, &tmps, &tmps, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); - - if ( st->vad_flag == 0 ) - { - st->coder_type = INACTIVE; - } - - /* apply DTX hangover for CNG analysis */ - vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, 0, &vad_hover_flag, NULL, NULL, NULL ); - - /*-----------------------------------------------------------------* - * Select SID or FRAME_NO_DATA frame if DTX enabled - *-----------------------------------------------------------------*/ - - if ( st->last_core != AMR_WB_CORE ) - { - st->fd_cng_reset_flag = 1; - } - else if ( st->fd_cng_reset_flag > 0 && st->fd_cng_reset_flag < 10 ) - { - st->fd_cng_reset_flag++; - } - else - { - st->fd_cng_reset_flag = 0; - } - dtx( st, -1, vad_flag_dtx, inp ); - /*----------------------------------------------------------------* - * Noise energy down-ward update and total noise energy estimation - * Long-term energies and relative frame energy updates - * Correlation correction as a function of total noise level - *----------------------------------------------------------------*/ - - noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); - - high_lpn_flag = 0; - - long_enr( st, Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); - - relE = Etot - st->lp_speech; - - if ( st->bwidth != NB ) - { - lp_bckr = mean( st->hNoiseEst->bckr, 10 ); - } - else - { - lp_bckr = mean( st->hNoiseEst->bckr + 1, 9 ); - } - hp_bckr = 0.5f * ( st->hNoiseEst->bckr[st->max_band - 1] + st->hNoiseEst->bckr[st->max_band] ); - st->bckr_tilt_lt_flt = 0.9f * st->bckr_tilt_lt_flt + 0.1f * lp_bckr / hp_bckr; - - corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); - - /*----------------------------------------------------------------* - * WB, SWB and FB bandwidth detector - *----------------------------------------------------------------*/ - - bw_detect( st, st->input, NULL, NULL, MONO_FORMAT, 0 ); - - /* in AMR_WB IO, limit the maximum band-width to WB */ - if ( st->bwidth > WB ) - { - st->bwidth = WB; - } - - /*----------------------------------------------------------------* - * Perform LP analysis - * Compute weighted inp - * Perform open-loop pitch analysis - * Perform 1/4 pitch precision improvement - *----------------------------------------------------------------*/ - - if ( st->vad_flag == 0 ) - { - /* reset the OL pitch tracker memories during inactive frames */ - pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); - } - - old_pitch1 = st->pitch[1]; - - /* LP analysis */ - analy_lp_AMR_WB( inp, &ener, A, epsP, isp_new, st->lsp_old1, isf_new, st->old_pitch_la, st->voicing[2] ); - - /* compute weighted input */ - find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp, TILT_FAC, wsp, &st->mem_wsp, GAMMA1_FLT, L_LOOK_12k8 ); - - /* open-loop pitch analysis */ - pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_LOOK_12k8, 0, st->bwidth, 0 ); - - st->old_pitch_la = st->pitch[2]; - vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); - - /*------------------------------------------------------------------* - * Update estimated noise energy and voicing cut-off frequency - *-----------------------------------------------------------------*/ - - noise_est( st, old_pitch1, tmpN, epsP, Etot, relE, corr_shift, tmpE, fr_bands, &cor_map_sum, NULL, &sp_div, &non_staX, &harm_flag, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &sp_floor, 0, NULL, NULL, st->ini_frame ); - - /*----------------------------------------------------------------* - * Change the sampling frequency to 16 kHz, - * input@16kHz needed for AMR-WB IO BWE @23.85kbps - *----------------------------------------------------------------*/ - - if ( st->input_Fs == 16000 ) - { - /* no resampling needed, only delay adjustement to account for the FIR resampling delay */ - tmps = NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); - mvr2r( st->mem_decim16k + tmps, new_inp_16k, tmps ); - mvr2r( st->input, new_inp_16k + tmps, input_frame - tmps ); - mvr2r( st->input + input_frame - 2 * tmps, st->mem_decim16k, 2 * tmps ); - } - else if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) - { - modify_Fs( st->input, input_frame, st->input_Fs, new_inp_16k, 16000, st->mem_decim16k, 0 ); - } - - /*----------------------------------------------------------------* - * Encoding of SID frames - *----------------------------------------------------------------*/ - - if ( st->core_brate == SID_1k75 || st->core_brate == FRAME_NO_DATA ) - { - /* encode CNG parameters */ - CNG_enc( st, Aq, inp, ener, isp_new, isp_new, isf_new, &allow_cn_step, q_env, &sid_bw ); - - /* comfort noise generation */ - CNG_exc( st->core_brate, L_FRAME, &st->hTdCngEnc->Enew, &st->hTdCngEnc->cng_seed, exc, exc2, &st->hTdCngEnc->lp_ener, st->last_core_brate, &st->hDtxEnc->first_CNG, &st->hTdCngEnc->cng_ener_seed, dummy_buf, allow_cn_step, &st->hTdCngEnc->last_allow_cn_step, st->hTdCngEnc->num_ho, q_env, st->hTdCngEnc->lp_env, st->hTdCngEnc->old_env, st->hTdCngEnc->exc_mem, st->hTdCngEnc->exc_mem1, &sid_bw, &st->hTdCngEnc->cng_ener_seed1, exc3, st->Opt_AMR_WB, EVS_MONO ); - - if ( st->hDtxEnc->first_CNG == 0 ) - { - st->hDtxEnc->first_CNG = 1; - } - - /* synthesis */ - syn_12k8( L_FRAME, Aq, exc2, dummy_buf, hLPDmem->mem_syn3_flt, 1 ); /* dummy_buf = temporary buffer to handle syn1[] */ - - /* reset the encoder */ - CNG_reset_enc( st, pitch_buf, dummy_buf + L_FRAME, 0 ); - - /* update mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn1_flt, M ); - - /* update ACELP core synthesis filter memory */ - mvr2r( hLPDmem->mem_syn3_flt, hLPDmem->mem_syn_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( dummy_buf + L_FRAME - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* Update MODE2 core switching memory */ - deemph( dummy_buf, PREEMPH_FAC_FLT, L_FRAME, &( hLPDmem->syn_flt[M] ) ); - mvr2r( dummy_buf + L_FRAME - M - 1, hLPDmem->syn_flt, M + 1 ); - } - - /*----------------------------------------------------------------* - * Encoding of all other frames - *----------------------------------------------------------------*/ - - else - { - /*-----------------------------------------------------------------* - * After inactive period, use the most up-to-date ISPs - *-----------------------------------------------------------------*/ - - if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 ) - { - mvr2r( st->hDtxEnc->lspCNG, st->lsp_old, M ); - isp2isf( st->hDtxEnc->lspCNG, st->lsf_old, M, INT_FS_12k8 ); - set_f( old_exc_flt, 0, L_EXC_MEM ); - } - - /*-----------------------------------------------------------------* - * ISF Quantization and interpolation - *-----------------------------------------------------------------*/ - - isf_enc_amr_wb( st, isf_new, isp_new, Aq ); - - /*---------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *---------------------------------------------------------------*/ - - calc_residu( inp, res, Aq, L_FRAME ); - - if ( st->hTdCngEnc != NULL ) - { - st->hTdCngEnc->burst_ho_cnt = 0; - } - - /*------------------------------------------------------------* - * Encode excitation - *------------------------------------------------------------*/ - - encod_amr_wb( st, inp, Aw, Aq, res, syn, exc, exc2, pitch_buf, hf_gain, inp_16k ); - - - /* update mem_syn1_flt for ACELP core switching */ - mvr2r( hLPDmem->mem_syn_flt, hLPDmem->mem_syn1_flt, M ); - - /* update old synthesis buffer - needed for ACELP internal sampling rate switching */ - mvr2r( syn + L_FRAME - L_SYN_MEM, hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - /* Update MODE2 core switching memory */ - mvr2r( syn, dummy_buf, L_FRAME ); - deemph( dummy_buf, PREEMPH_FAC_FLT, L_FRAME, &( hLPDmem->syn_flt[M] ) ); - mvr2r( dummy_buf + L_FRAME - M - 1, hLPDmem->syn_flt, M + 1 ); - - /*--------------------------------------------------------------------------------------* - * Write VAD information into the bitstream in AMR-WB IO mode - *--------------------------------------------------------------------------------------*/ - - push_indice( st->hBstr, IND_VAD_FLAG, st->vad_flag, 1 ); - } - - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* update old weighted speech buffer - for OL pitch analysis */ - mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); - - /* update old input signal buffer */ - mvr2r( &old_inp[L_FRAME], st->old_inp_12k8, L_INP_MEM ); - - /* update old input signal @16kHz buffer */ - if ( st->input_Fs > 8000 ) - { - mvr2r( &old_inp_16k[L_FRAME16k], st->old_inp_16k, L_INP_MEM ); - } - - /* update of old per-band energy spectrum */ - mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); - - /* update signal buffers */ - mvr2r( new_inp, st->buf_speech_enc_pe_flt + L_FRAME, L_FRAME ); - mvr2r( wsp, st->buf_wspeech_enc_flt + L_FRAME + L_SUBFR, L_FRAME + L_LOOK_12k8 ); - - /* update ACELP core parameters */ - updt_enc( st, old_exc_flt, pitch_buf, 0, Aq, isf_new, isp_new, dummy_buf ); - - /* update main codec paramaters */ - updt_enc_common( st ); - - pop_wmops(); - - return; -} - -/*---------------------------------------------------------------------* - * amr_wb_enc_init() - * - * Initialize AMR-WB encoder - *---------------------------------------------------------------------*/ - -void amr_wb_enc_init( - AMRWB_IO_ENC_HANDLE hAmrwb_IO /* i/o: AMR-WB IO encoder handle */ -) -{ - int16_t i; - - /* HF (6-7kHz) BWE */ - hAmrwb_IO->seed2_enc = RANDOM_INITSEED; - - for ( i = 0; i < GAIN_PRED_ORDER; i++ ) - { - hAmrwb_IO->past_qua_en[i] = -14.0f; /* gain quantization memory (used in AMR-WB IO mode) */ - } - - hf_cod_init( hAmrwb_IO->mem_hp400_enc, hAmrwb_IO->mem_hf_enc, hAmrwb_IO->mem_syn_hf_enc, hAmrwb_IO->mem_hf2_enc, &hAmrwb_IO->gain_alpha ); - - return; -} -#endif diff --git a/lib_enc/analy_lp.c b/lib_enc/analy_lp.c index 88cba99f2..2e657e155 100644 --- a/lib_enc/analy_lp.c +++ b/lib_enc/analy_lp.c @@ -52,133 +52,3 @@ * - find interpolated LSPs and convert back to A(z) for all subframes * - update LSPs for the next frame *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void analy_lp( - const float speech[], /* i : pointer to the speech frame */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_look, /* i : look-ahead */ - float *ener, /* o : residual energy from Levinson-Durbin */ - float A[], /* o : A(z) filter coefficients */ - float epsP[], /* o : LP analysis residual energies for each iteration */ - float lsp_new[], /* o : current frame LSPs */ - float lsp_mid[], /* o : current mid-frame LSPs */ - float lsp_old[], /* i/o: previous frame unquantized LSPs */ - const int16_t Top[2], /* i : open loop pitch lag */ - const float Tnc[2], /* i : open loop pitch gain */ - const int32_t sr_core, /* i : internal sampling rate */ - const int16_t sec_chan_low_rate /* i : TD secondary channel flag */ -) -{ - int16_t i_subfr, wind_length, half_frame; - float r[M + 1], *lsp; - const float *wind, *pt; - int16_t half_frame_idx; - - if ( L_frame == L_FRAME ) - { - wind_length = L_LP; - wind = LP_assym_window; - } - else /* L_frame == L_FRAME16k */ - { - wind_length = L_LP_16k; - wind = LP_assym_window_16k; - } - lsp = lsp_mid; - half_frame = L_frame >> 1; - - half_frame_idx = 0; - for ( i_subfr = half_frame; i_subfr <= L_frame; i_subfr = i_subfr + half_frame ) - { - pt = speech + i_subfr + L_look - wind_length; - - /* Autocorrelations */ - autocorr( pt, r, M, wind_length, wind, 0, 0, 0 ); - - /* Lag windowing */ - adapt_lag_wind_fx( r, M, Top[half_frame_idx], Tnc[half_frame_idx], sr_core ); - ++half_frame_idx; - - /* Levinson-Durbin */ - lev_dur( A, r, M, epsP ); - - /* Conversion of A(z) to LSPs */ - a2lsp_stab( A, lsp, lsp_old ); - - lsp = lsp_new; - } - - if ( sec_chan_low_rate == 1 ) - { - int_lsp4( L_frame, lsp_old, lsp_mid, lsp_new, A, M, -2 ); - } - else - { - /* LSP interpolation */ - int_lsp4( L_frame, lsp_old, lsp_mid, lsp_new, A, M, 0 ); - } - - /* updates */ - mvr2r( lsp_new, lsp_old, M ); - - *ener = epsP[M]; - - return; -} - - -/*-------------------------------------------------------------------* - * analy_lp_AMR_WB() - * - * Perform LP analysis for AMR-WB IO mode - * - * - autocorrelations + lag windowing - * - Levinson-Durbin algorithm to find A(z) - * - convert A(z) to ISPs - * - find interpolated ISPs and convert back to A(z) for all subframes - * - update ISPs for the next frame - *-------------------------------------------------------------------*/ - -void analy_lp_AMR_WB( - const float speech[], /* i : pointer to the speech frame */ - float *ener, /* o : residual energy from Levinson-Durbin */ - float A[], /* o : A(z) filter coefficients */ - float epsP[], /* o : LP analysis residual energies for each iteration */ - float isp_new[], /* o : current frame ISPs */ - float isp_old[], /* i/o: previous frame unquantized ISPs */ - float isf_new[], /* o : current frame ISFs */ - const int16_t Top, /* i : open loop pitch lag */ - const float Tnc /* i : open loop pitch gain */ -) -{ - int16_t wind_length; - float r[M + 1]; - const float *wind; - - /* Initialization */ - wind_length = L_LP_AMR_WB; - wind = hamcos_window; - - /* Autocorrelations */ - autocorr( speech - L_SUBFR, r, M, wind_length, wind, 0, 0, 0 ); - - /* Lag windowing */ - adapt_lag_wind_fx( r, M, Top, Tnc, 12800 ); - - /* Levinson-Durbin */ - lev_dur( A, r, M, epsP ); - - a2isf( A, isf_new, stable_ISF, M ); - isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); - - /* ISP interpolation */ - int_lsp( L_FRAME, isp_old, isp_new, A, M, interpol_isp_amr_wb, 1 ); - - *ener = epsP[M]; - - /* updates */ - mvr2r( isp_new, isp_old, M ); - - return; -} -#endif diff --git a/lib_enc/analy_lp_fx.c b/lib_enc/analy_lp_fx.c index ee21c7ae8..dc0e9c545 100644 --- a/lib_enc/analy_lp_fx.c +++ b/lib_enc/analy_lp_fx.c @@ -23,7 +23,6 @@ * - find interpolated LSPs and convert back to A(z) for all subframes * - update LSPs for the next frame *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void analy_lp_ivas_fx( const Word16 speech[], /* i :(Q_new) pointer to the speech frame */ const Word16 L_frame, /* i :(q0) length of the frame */ @@ -124,7 +123,6 @@ void analy_lp_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED void analy_lp_fx( const Word16 speech[], /* i : pointer to the speech frame */ diff --git a/lib_enc/analy_sp.c b/lib_enc/analy_sp.c index fef12fe32..0be76e525 100644 --- a/lib_enc/analy_sp.c +++ b/lib_enc/analy_sp.c @@ -44,369 +44,3 @@ #include "wmc_auto.h" #include #include "ivas_cnst.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local prototypes - *-------------------------------------------------------------------*/ - -static void find_enr( const float data[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, const int16_t bin_freq, float *band_ener ); - -static void find_enr_dft( CPE_ENC_HANDLE hCPE, const int32_t input_Fs, float DFT_past_DMX[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, float *band_ener ); - -/*-------------------------------------------------------------------* - * analy_sp() - * - * Spectral analysis - *-------------------------------------------------------------------*/ - -void analy_sp( - const int16_t element_mode, /* i : element mode */ - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int32_t input_Fs, /* i : input sampling rate */ - float *speech, /* i : speech buffer */ - float *Bin_E, /* o : per bin log energy spectrum */ - float *Bin_E_old, /* o : per bin log energy spectrum for mid-frame */ - float *fr_bands, /* o : per band energy spectrum (2 analyses) */ - float lf_E[], /* o : per bin E for first VOIC_BINS bins (without DC) */ - float *Etot, /* o : total input energy */ - const int16_t min_band, /* i : minimum critical band */ - const int16_t max_band, /* i : maximum critical band */ - float *band_ener, /* o : energy in critical frequency bands without minimum noise floor E_MIN */ - float *PS, /* o : Per bin energy spectrum */ - float *fft_buff /* o : FFT coefficients */ -) -{ - int16_t i_subfr, i; - float *pt_bands, *pt_fft, *pt; - const float *pt1; - - /*-----------------------------------------------------------------* - * Perform two spectral analyses - * Find energy per critical frequency band and total energy in dB - *-----------------------------------------------------------------*/ - - pt_bands = fr_bands; - pt_fft = fft_buff; - *Etot = 0.0f; - - if ( element_mode != IVAS_CPE_DFT ) - { - for ( i_subfr = 0; i_subfr <= 1; i_subfr++ ) - { - /* set pointer to the beginning of the signal for spectral analysis */ - if ( i_subfr == 0 ) - { - /* set the pointer for first analysis window */ - pt = speech + 3 * ( L_SUBFR / 2 ) - L_FFT / 2; - } - else - { - /* set the pointer for second analysis window */ - pt = speech + 7 * ( L_SUBFR / 2 ) - L_FFT / 2; - } - - /* 1st half of the window */ - pt1 = sqrt_han_window; - for ( i = 0; i < L_FFT / 2; i++ ) - { - pt_fft[i] = *pt++ * *pt1++; - } - /* 2nd half of the window */ - for ( i = L_FFT / 2; i < L_FFT; i++ ) - { - pt_fft[i] = *pt++ * *pt1--; - } - - /* compute the spectrum */ - fft_rel( pt_fft, L_FFT, LOG2_L_FFT ); - - /* find energy per critical band */ - find_enr( pt_fft, pt_bands, lf_E + i_subfr * VOIC_BINS, Etot, min_band, max_band, Bin_E + i_subfr * ( L_FFT / 2 ), (int16_t) BIN, band_ener + i_subfr * NB_BANDS ); - - pt_bands += NB_BANDS; - pt_fft += L_FFT; - } - } - else - { - /* find energy per critical band */ - find_enr_dft( hCPE, input_Fs, hCPE->hStereoDft->DFT[0], pt_bands, lf_E, Etot, min_band, max_band, Bin_E, band_ener ); - mvr2r( lf_E, lf_E + VOIC_BINS, VOIC_BINS ); - mvr2r( Bin_E, Bin_E + ( L_FFT / 2 ), L_FFT / 2 ); - mvr2r( band_ener, band_ener + NB_BANDS, NB_BANDS ); - mvr2r( pt_bands, pt_bands + NB_BANDS, NB_BANDS ); - *Etot *= 2.f; - } - - /* Average total log energy over both half-frames */ - *Etot = 10.0f * (float) log10( 0.5f * *Etot ); - - /* Per-bin log-energy spectrum */ - Bin_E[L_FFT / 2 - 1] = Bin_E[L_FFT / 2 - 2]; - Bin_E[L_FFT - 1] = Bin_E[L_FFT - 2]; - - for ( i = 0; i < L_FFT / 2; i++ ) - { - Bin_E_old[i] = Bin_E[i]; - PS[i] = ( Bin_E[i] + 1e-5f + Bin_E[i + L_FFT / 2] + 1e-5f ) / 2.0f; - Bin_E[i] = (float) ( 10.0f * log( PS[i] ) ); - } - - return; -} - -/*------------------------------------------------------------------------* - * find_enr() - * - * find input signal energy for each critical band and first 74 LF bins - * The energy is normalized by the number of frequency bins in a channel - *------------------------------------------------------------------------*/ - -static void find_enr( - const float data[], /* i : fft result, for the format see fft_rel.c */ - float band[], /* o : per band energy */ - float *ptE, /* o : per bin energy for low frequencies */ - float *Etot, /* i/o: total energy */ - const int16_t min_band, /* i : minimum critical band */ - const int16_t max_band, /* i : maximum critical band */ - float *Bin_E, /* o : Per bin energy */ - const int16_t bin_freq, /* i : Number of frequency bins */ - float *band_ener /* o : per band energy without E_MIN */ -) -{ - int16_t i, cnt; - float freq, tmp; - const float *ptR, *ptI; - int16_t voic_band; - float norm_val; - - norm_val = 4.0f / ( L_FFT * L_FFT ); - - voic_band = VOIC_BAND_8k; - if ( bin_freq == 50 ) - { - voic_band = VOIC_BAND; - } - - ptR = &data[1]; /* first real */ - ptI = &data[L_FFT - 1]; /* first imaginary */ - - /* for low frequency bins, save per bin energy for the use in find_tilt() */ - freq = bin_freq; - for ( i = 0; i < voic_band; i++ ) /* up to maximum allowed voiced critical band */ - { - band[i] = 0.0f; - cnt = 0; - while ( freq <= crit_bands[i] ) - { - *ptE = *ptR * *ptR + *ptI * *ptI; /* energy */ - *ptE *= norm_val; /* normalization - corresponds to FFT normalization by 2/L_FFT */ - *Bin_E++ = *ptE; - band[i] += *ptE++; - ptR++; - ptI--; - - freq += bin_freq; - cnt++; - } - - band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ - - band_ener[i] = band[i]; /* per band energy without E_MIN */ - - if ( band[i] < E_MIN ) - { - band[i] = E_MIN; - } - } - - /* continue computing the energy per critical band for higher frequencies */ - if ( bin_freq == 50 ) - { - for ( i = voic_band; i < NB_BANDS; i++ ) - { - band[i] = 0.0f; - cnt = 0; - while ( freq <= crit_bands[i] ) - { - *Bin_E = *ptR * *ptR + *ptI * *ptI; - *Bin_E *= norm_val; - band[i] += *Bin_E; - Bin_E++; - ptR++; - ptI--; - - freq += bin_freq; - cnt++; - } - - band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ - - band_ener[i] = band[i]; /* per band energy without E_MIN */ - - if ( band[i] < E_MIN ) - { - band[i] = E_MIN; - } - } - } - - /* find the total log energy */ - tmp = *Etot; - for ( i = min_band; i <= max_band; i++ ) - { - tmp += band[i]; - } - - *Etot = tmp; - - return; -} - -/*------------------------------------------------------------------------* - * find_enr_dft() - * - * find input signal energy for each critical band using the DFT buffers - *------------------------------------------------------------------------*/ - -static void find_enr_dft( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int32_t input_Fs, /* i : input sampling rate */ - float DFT_past_DMX[], - float band[], /* o : per band energy */ - float *ptE, /* o : per bin energy for low frequencies */ - float *Etot, /* i/o: total energy */ - const int16_t min_band, /* i : minimum critical band */ - const int16_t max_band, /* i : maximum critical band */ - float *Bin_E, /* o : Per bin energy */ - float *band_ener /* o : per band energy without E_MIN */ -) -{ - int16_t i, cnt; - float freq, tmp; - const float *ptR, *ptI; - float norm_val; - int16_t bin_cnt = 0; - - float c, s; - /* One window - 40ms*12.8kHz = 512 samples */ - float c_1 = cosf( PI2 / STEREO_DFT_N_12k8_ENC ); - float s_1 = sinf( PI2 / STEREO_DFT_N_12k8_ENC ); - float g_1 = 1.f + 0.68f * 0.68f; - float g_2 = 2 * 0.68f; - float g; - float scaleWin; - - float BinE[STEREO_DFT_N_12k8_ENC / 2]; /* NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 158 */ - float bin_freq = input_Fs / (float) hCPE->hStereoDft->NFFT; /* adaptive frequency bin width */ - - scaleWin = 1 / ( 2 * hCPE->hStereoDft->win_ana_energy ); - scaleWin *= (float) BIN / bin_freq; - norm_val = scaleWin * 4.0f / ( hCPE->hStereoDft->NFFT * hCPE->hStereoDft->NFFT ); - - ptR = &DFT_past_DMX[2]; /* first real */ - ptI = &DFT_past_DMX[3]; /* first imaginary */ - c = c_1; - s = s_1; - - /* for low frequency bins, save per bin energy for the use in find_tilt() */ - freq = bin_freq; - for ( i = 0; i < NB_BANDS - 1; i++ ) /* up to maximum allowed voiced critical band */ - { - band[i] = 0.0f; - cnt = 0; - - /* bins up to crit_band 17 (<= 3700 Hz): - * bin_cnt old (bin_width 50 Hz): 74 (74 * FRAMES_PER_SEC = 3700) - * bin_cnt new (bin_width 40 Hz): 92 (92 * 40 = 3680) - */ - - while ( freq <= crit_bands[i] ) - { - BinE[bin_cnt] = *ptR * *ptR + *ptI * *ptI; /* energy */ - g = g_1 - g_2 * c; - tmp = c * c_1 - s * s_1; - s = s * c_1 + c * s_1; - c = tmp; - BinE[bin_cnt] *= norm_val * g; /* normalization - corresponds to FFT normalization by 2/L_FFT */ - band[i] += BinE[bin_cnt]; - ptR += 2; - ptI += 2; - - freq += bin_freq; - cnt++; - bin_cnt++; - } - - band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ - - band_ener[i] = band[i]; /* per band energy without E_MIN */ - - if ( band[i] < E_MIN ) - { - band[i] = E_MIN; - } - } - - /* continue computing the energy per critical band for higher frequencies */ - - /* old version, FFT 256 @ SR12.8 (-> bin_width = 50 Hz): - NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 127 = L_FFT/2-1*/ - - /* new version: DFT (1200/800/400) @ input SR (48/32/16) (-> bin_width = 40 Hz): - * - */ - /* NB_BANDS = 20 (= 6350Hz) = highest band available for SR 12.8 -> bin_cnt = 158 */ - /* NB_BANDS = 21 (= 7700Hz) = highest band available for SR 16 -> bin_cnt = 192 */ - /* NB_BANDS = 24 (= 15500Hz) = highest band available for SR 32 -> bin_cnt = 387 */ - /* NB_BANDS = 24 (= 15500Hz) = highest band available for SR 48 -> bin_cnt = 387 */ - - for ( ; i < NB_BANDS; i++ ) - { - band[i] = 0.0f; - cnt = 0; - while ( freq < 6399.0f ) - { - BinE[bin_cnt] = *ptR * *ptR + *ptI * *ptI; - g = g_1 - g_2 * c; - BinE[bin_cnt] *= norm_val * g; - band[i] += BinE[bin_cnt]; - ptR += 2; - ptI += 2; - - freq += bin_freq; - cnt++; - bin_cnt++; - } - - band[i] *= inv_tbl[cnt]; /* normalization per frequency bin */ - - band_ener[i] = band[i]; /* per band energy without E_MIN */ - - if ( band[i] < E_MIN ) - { - band[i] = E_MIN; - } - } - - /* put bin energies from BinE into Bin_E[L_FFT/2-1] (interpolate 40 Hz bin values to fit into 50 Hz bins) */ - /* Last value of Bin_E is handled outside this function*/ - assert( bin_cnt == ( STEREO_DFT_N_12k8_ENC / 2 - 1 ) ); - BinE[STEREO_DFT_N_12k8_ENC / 2 - 1] = BinE[STEREO_DFT_N_12k8_ENC / 2 - 2]; - lerp_flt( BinE, Bin_E, L_FFT / 2, STEREO_DFT_N_12k8_ENC / 2 ); - mvr2r( Bin_E, ptE, VOIC_BINS ); - - - /* find the total log energy */ - tmp = *Etot; - for ( i = min_band; i <= max_band; i++ ) - { - tmp += band[i]; - } - - *Etot = tmp; - - return; -} -#endif diff --git a/lib_enc/analy_sp_fx.c b/lib_enc/analy_sp_fx.c index 71524f5b8..bcf1ae7ac 100644 --- a/lib_enc/analy_sp_fx.c +++ b/lib_enc/analy_sp_fx.c @@ -18,10 +18,8 @@ *-------------------------------------------------------------------*/ static void find_enr( Word16 data[], Word32 band[], Word32 *ptE, Word32 *LEtot, const Word16 min_band, const Word16 max_band, const Word16 Q_new2, const Word32 e_min, Word32 *Bin_E, Word16 BIN_FREQ_FX, Word32 *band_energies ); -#ifdef IVAS_FLOAT_FIXED static void ivas_find_enr( Word16 data[], Word32 band[], Word32 *ptE, Word32 *LEtot, const Word16 min_band, const Word16 max_band, const Word16 Q_new2, const Word32 e_min, Word32 *Bin_E, Word16 BIN_FREQ_FX, Word32 *band_energies ); static void ivas_find_enr1( Word16 *data, Word16 q_data, Word32 *band, Word32 *ptE, Word32 *LEtot, const Word16 min_band, const Word16 max_band, const Word16 Q_new, const Word32 e_min, Word32 *Bin_E, Word16 BIN_FREQ_FX, Word32 *band_energies ); -#endif #ifdef IVAS_CODE_CPE static void find_enr_dft( CPE_ENC_HANDLE hCPE, const int32_t input_Fs, float DFT_past_DMX[], float band[], float *ptE, float *Etot, const int16_t min_band, const int16_t max_band, float *Bin_E, float *band_ener ); #endif @@ -197,7 +195,6 @@ void analy_sp_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------* * find_enr_dft_fx() * @@ -420,8 +417,6 @@ static void find_enr_dft_fx( move32(); return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_analy_sp_fx() * @@ -740,7 +735,6 @@ void ivas_analy_sp_fx_front( return; } -#endif /*------------------------------------------------------------------------* * find_enr() @@ -992,7 +986,6 @@ static void ivas_find_enr( return; } -#ifdef IVAS_FLOAT_FIXED /* Merge with ivas_find_enr function once analy_sp is unified */ static void ivas_find_enr1( Word16 data[], /* i : fft result */ @@ -1142,7 +1135,6 @@ static void ivas_find_enr1( return; } -#endif static void find_enr( Word16 data[], /* i : fft result */ diff --git a/lib_enc/ari_enc.c b/lib_enc/ari_enc.c index e61329809..733e3e72a 100644 --- a/lib_enc/ari_enc.c +++ b/lib_enc/ari_enc.c @@ -43,9 +43,7 @@ #include "stat_com.h" #include "basop_util.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------- @@ -85,7 +83,6 @@ void ari_start_encoding_14bits( return; } -#ifdef IVAS_FLOAT_FIXED void ari_start_encoding_14bits_ivas_fx( Tastat *s ) { @@ -99,7 +96,6 @@ void ari_start_encoding_14bits_ivas_fx( return; } -#endif /*--------------------------------------------------------------- * ari_done_encoding_14bits() @@ -107,7 +103,6 @@ void ari_start_encoding_14bits_ivas_fx( * Finish ArCo encoding *-------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ari_done_encoding_14bits( Word16 *ptr, Word16 bp, Tastat *s ) { Word16 bit; @@ -120,43 +115,6 @@ Word16 ari_done_encoding_14bits( Word16 *ptr, Word16 bp, Tastat *s ) } return ari_put_bit_plus_follow( ptr, bp, add( extract_l( s->bits_to_follow ), 1 ), bit ); } -#else -int16_t ari_done_encoding_14bits( - int16_t *ptr, - int16_t bp, - Tastat *s ) -{ - int32_t low; - int32_t bits_to_follow; - - /* not needed, s points to s->low */ - low = s->low; - bits_to_follow = s->bits_to_follow + 1; - - if ( low < ari_q1new ) - { - ptr[bp++] = 0; /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 1; /*send a one*/ - } - } - else - { - ptr[bp++] = 1; /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 0; /*send a zero*/ - } - } - - /*It is done so no need to save values-> no counting*/ - /*s->low = low; - s->bits_to_follow = bits_to_follow;*/ - - return bp; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------- @@ -165,7 +123,6 @@ int16_t ari_done_encoding_14bits( * encode function for extended proba tables: less branches needed for coding * *-------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ari_encode_14bits_ext( Word16 *ptr, Word16 bp, @@ -242,78 +199,6 @@ Word16 ari_encode_14bits_ext( return bp; } -#else - -int16_t ari_encode_14bits_ext( - int16_t *ptr, - int16_t bp, - Tastat *s, - int32_t symbol, - const uint16_t *cum_freq ) -{ - int32_t low, high, range; - int32_t bits_to_follow; - - /*for all operation using bit_ptr=&ptr[bp] */ - /* for reading s->high,low,bits_to_follow sequentially */ - high = s->high; - low = s->low; - range = high - low + 1; - - high = low + mul_sbc_14bits_ivas( range, cum_freq[symbol] ) - 1; - low += mul_sbc_14bits_ivas( range, cum_freq[symbol + 1] ); - - bits_to_follow = s->bits_to_follow; - - for ( ;; ) - { - if ( high < ari_q2new ) - { - ptr[bp++] = 0; /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 1; /*send a one*/ - } - } - else - { - if ( low >= ari_q2new ) - { - ptr[bp++] = 1; /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 0; /*send a zero*/ - } - low -= ari_q2new; - high -= ari_q2new; /* Subtract offset to top. */ - } - else - { - /* Output an opposite bit */ - if ( low >= ari_q1new && high < ari_q3new ) /* Output an opposite bit */ - { - /* later if in middle half. */ - bits_to_follow += 1; - low -= ari_q1new; /* Subtract offset to middle*/ - high -= ari_q1new; - } - else - { - break; /* Otherwise exit loop. */ - } - } - } - low += low; - high += high + 1; /* Scale up code range. */ - } - - s->low = low; - s->high = high; - s->bits_to_follow = bits_to_follow; - - return bp; -} -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------ @@ -321,89 +206,11 @@ int16_t ari_encode_14bits_ext( * * Encode an cumulative frequency interval. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ari_encode_14bits_range( - int16_t *ptr, - int16_t bp, - int32_t bits, - Tastat *s, - uint16_t cum_freq_low, - uint16_t cum_freq_high ) -{ - int32_t low, high, range; - int32_t bits_to_follow; - - /* not needed, s points to s->low */ - high = s->high; - high++; - low = s->low; - range = high - low; - - high = low + mul_sbc_14bits_ivas( range, cum_freq_high ); - low += mul_sbc_14bits_ivas( range, cum_freq_low ); - - bits_to_follow = s->bits_to_follow; - - /* while there are more than 16 bits left */ - for ( ; bp + 16 + bits_to_follow - bits < 0; ) - { - if ( high <= ari_q2new ) - { - ptr[bp++] = 0; /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 1; /*send a one*/ - } - } - else if ( low >= ari_q2new ) - { - /* to reach this branch */ - ptr[bp++] = 1; /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 0; /*send a zero*/ - } - low -= ari_q2new; - high -= ari_q2new; /* Subtract offset to top. */ - } - else if ( low >= ari_q1new && high <= ari_q3new ) - { - /* to reach this branch */ - /* Output an opposite bit */ - /* later if in middle half. */ - bits_to_follow += 1; - low -= ari_q1new; /* Subtract offset to middle*/ - high -= ari_q1new; - } - else - { - /* to reach this branch */ - break; /* Otherwise exit loop. */ - } - - low += low; - high += high; /* Scale up code range. */ - } - /* if there are <= 16 bits left */ - if ( bp + 16 + bits_to_follow - bits >= 0 ) - { - /* No need to do anyhing, but let's keep a place for a breakpoint */ - s->bits_to_follow = -1; - } - - s->low = low; - s->high = high - 1; - s->bits_to_follow = bits_to_follow; - - return bp; -} -#endif /*------------------------------------------------------------------------ * Function: ari_encode_14bits_sign() * * Encode a sign with equal probabilities. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ari_encode_14bits_high_low( Word16 *ptr, Word16 bp, Word16 bits, Tastat *s, Word32 high, Word32 low ) { Word16 bits_to_follow, tmp; @@ -480,167 +287,9 @@ Word16 ari_encode_14bits_sign( Word16 *ptr, Word16 bp, Word32 bits, Tastat *s, W return ari_encode_14bits_high_low( ptr, bp, extract_l( bits ), s, high, low ); } -#else - -int16_t ari_encode_14bits_sign( - int16_t *ptr, - int16_t bp, - int32_t bits, - Tastat *s, - int32_t sign ) -{ - int32_t low, high, range; - int32_t bits_to_follow; - - /* not needed, s points to s->low */ - high = s->high; - high++; - low = s->low; - range = high - low; - - if ( sign ) - { - high = low + ( range >> 1 ); - } - else - { - low += range >> 1; - } - - bits_to_follow = s->bits_to_follow; - - /* while there are more than 16 bits left */ - for ( ; bp + 16 + bits_to_follow - bits < 0; ) - { - if ( high <= ari_q2new ) - { - ptr[bp++] = 0; /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 1; /*send a one*/ - } - } - else if ( low >= ari_q2new ) - { - /* to reach this branch */ - ptr[bp++] = 1; /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 0; /*send a zero*/ - } - low -= ari_q2new; - high -= ari_q2new; /* Subtract offset to top. */ - } - else if ( low >= ari_q1new && high <= ari_q3new ) - { - /* to reach this branch */ - /* Output an opposite bit */ - /* later if in middle half. */ - bits_to_follow += 1; - low -= ari_q1new; /* Subtract offset to middle*/ - high -= ari_q1new; - } - else - { - /* to reach this branch */ - break; /* Otherwise exit loop. */ - } - - low += low; - high += high; /* Scale up code range. */ - } - - s->low = low; - s->high = high - 1; - s->bits_to_follow = bits_to_follow; - - return bp; -} -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------ * Function: ari_done_cbr_encoding_14bits() * * Finish up encoding in CBR mode. *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ari_done_cbr_encoding_14bits( - int16_t *ptr, - int16_t bp, - int32_t bits, - Tastat *s ) -{ - int32_t high; - int32_t bits_to_follow; - uint16_t k; - - while ( bits - bp - 16 - s->bits_to_follow > 0 ) - { - bp = ari_encode_14bits_sign( ptr, bp, bits, s, 0 ); - } - - /* not needed, s points to s->low */ - high = s->high; - bits_to_follow = s->bits_to_follow; - - if ( bits_to_follow ) - { - /* If in upper half, then output a one, bits_to_follow zeros, and the remaining bits, except the first one */ - if ( high < 0x8000 ) - { - ptr[bp++] = 0; /*send a zero*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 1; /*send a one*/ - } - } - else - { - ptr[bp++] = 1; /*send a one*/ - for ( ; bits_to_follow > 0; bits_to_follow-- ) - { - ptr[bp++] = 0; /*send a zero*/ - } - } - /* write remaining bits */ - for ( k = 0x4000; k > 0; k >>= 1 ) - { - if ( k & high ) - { - ptr[bp++] = 1; /*send a one*/ - } - else - { - ptr[bp++] = 0; /*send a zero*/ - } - - if ( bp >= bits ) - { - break; - } - } - } - else - { - /* no carry-bits, just write all bits */ - for ( k = 0x8000; k > 0; k >>= 1 ) - { - if ( k & high ) - { - ptr[bp++] = 1; /*send a one*/ - } - else - { - ptr[bp++] = 0; /*send a zero*/ - } - - if ( bp >= bits ) - { - break; - } - } - } - - return bp; -} -#endif diff --git a/lib_enc/ari_hm_enc.c b/lib_enc/ari_hm_enc.c index 8dadbd61d..a227784dc 100644 --- a/lib_enc/ari_hm_enc.c +++ b/lib_enc/ari_hm_enc.c @@ -51,568 +51,3 @@ * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t EncodeIndex( - const int16_t Bandwidth, - int16_t PeriodicityIndex, - BSTR_ENC_HANDLE hBstr ) -{ - if ( PeriodicityIndex & kLtpHmFlag ) - { - int16_t LtpPitchIndex = PeriodicityIndex >> 9; - assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); - --PeriodicityIndex; - assert( ( PeriodicityIndex & 0xff ) < ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ) ); - - push_next_indice( hBstr, PeriodicityIndex & 0xff, NumRatioBits[Bandwidth][LtpPitchIndex] ); - return NumRatioBits[Bandwidth][LtpPitchIndex]; - } - else - { - push_next_indice( hBstr, PeriodicityIndex, 8 ); - return 8; - } -} - -/*-------------------------------------------------------------------* - * GetWeight() - * - * - *-------------------------------------------------------------------*/ - -static float GetWeight( int16_t i ) -{ - i = 3 * i - 2; - - return (float) ( pow( i, 0.3 ) / pow( 256 - 1, 0.3 ) ); -} - - -/*-------------------------------------------------------------------* - * SearchPeriodicityIndex_Single() - * - * - *-------------------------------------------------------------------*/ - -static float SearchPeriodicityIndex_Single( - const float AbsMdct3[], - const int16_t NumToConsider, - const int32_t Lag, - const int16_t FractionalResolution ) -{ - int16_t HighestMultiplier; - float AbsMeanCurrent3; /* Mean for BucketWidth == 3 */ - int32_t Limit, OldIndex, i; - - Limit = ( NumToConsider - 1 ) << FractionalResolution; - AbsMeanCurrent3 = 0; - HighestMultiplier = 1; - - for ( i = Lag; i < Limit; i += Lag ) - { - OldIndex = i >> FractionalResolution; - AbsMeanCurrent3 += AbsMdct3[OldIndex] * GetWeight( HighestMultiplier ); - ++HighestMultiplier; - } - - return AbsMeanCurrent3 / ( HighestMultiplier - 1 + 0.00001f ); -} - - -/*-------------------------------------------------------------------* - * SearchPeriodicityIndex_Range() - * - * - *-------------------------------------------------------------------*/ - -static void SearchPeriodicityIndex_Range( - const float AbsMdct3[], - const int16_t NumToConsider, - const int16_t Lo, - const int16_t Hi, - const int16_t FractionalResolution, - const int16_t Adj, - const int16_t Spacing, - int16_t *PeriodicityIndex, - float *Score ) -{ - int16_t Index, BestIndex, B; - float CurrentScore, BestScore; - - BestScore = -1e30f; - BestIndex = 0; - - for ( Index = Lo; Index < Hi; Index += Spacing ) - { - CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); - - if ( CurrentScore > BestScore ) - { - BestScore = CurrentScore; - BestIndex = Index; - } - } - - if ( BestScore > *Score ) - { - *Score = BestScore; - *PeriodicityIndex = BestIndex; - } - - - B = BestIndex - ( Spacing >> 1 ); - B = max( Lo, B ); - - for ( Index = B; Index < BestIndex; ++Index ) - { - CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); - - if ( CurrentScore > *Score ) - { - *Score = CurrentScore; - *PeriodicityIndex = Index; - } - } - - B = BestIndex + ( Spacing >> 1 ); - - for ( Index = BestIndex + 1; Index <= B; ++Index ) - { - CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Index + Adj, FractionalResolution ); - - if ( CurrentScore > *Score ) - { - *Score = CurrentScore; - *PeriodicityIndex = Index; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * SearchPeriodicityIndex() - * - * - *-------------------------------------------------------------------*/ - -/*! r: PeriodicityIndex */ -int16_t SearchPeriodicityIndex( - const float Mdct[], /* i : Coefficients, Mdct[0..NumCoeffs-1] */ - const float UnfilteredMdct[], /* i : Unfiltered coefficients, UnfilteredMdct[0..NumCoeffs-1] */ - const int16_t NumCoeffs, /* i : Number of coefficients */ - const int16_t TargetBits, /* i : Target bit budget (excl. Done flag) */ - const int16_t LtpPitchLag, /* i : TCX-LTP pitch */ - const float LtpGain, /* i : LTP gain */ - float *RelativeScore /* o : Energy concentration factor */ -) -{ - float AbsMdct3[MAX_LENGTH], A, B, C = 0.f; - int16_t i; - int16_t MaxAt; - float Score; - int16_t PeriodicityIndex; - int16_t NumToConsider; - float AbsTotal; - - PeriodicityIndex = 0; - NumToConsider = NumCoeffs; - Score = -1e30f; - - A = (float) fabs( Mdct[0] ); - B = (float) fabs( Mdct[1] ); - - for ( i = 1; i < NumToConsider - 3; i += 3 ) - { - C = (float) fabs( Mdct[i + 1] ); - AbsMdct3[i] = A + B + C; - - A = (float) fabs( Mdct[i + 2] ); - AbsMdct3[i + 1] = A + B + C; - - B = (float) fabs( Mdct[i + 3] ); - AbsMdct3[i + 2] = A + B + C; - } - - if ( i < NumToConsider - 1 ) - { - C = (float) fabs( Mdct[i + 1] ); - AbsMdct3[i] = A + B + C; - } - - - if ( i + 1 < NumToConsider - 1 ) - { - A = (float) fabs( Mdct[i + 2] ); - AbsMdct3[i + 1] = A + B + C; - } - - AbsTotal = 0.0f; - - if ( UnfilteredMdct != NULL ) - { - for ( i = 0; i < NumToConsider; ++i ) - { - AbsTotal += (float) fabs( UnfilteredMdct[i] ); - } - } - else - { - for ( i = 1; i < NumToConsider - 1; i += 3 ) - { - AbsTotal += AbsMdct3[i]; - } - } - - - if ( ( LtpPitchLag > 0 ) && ( LtpGain > kLtpHmGainThr_FLT ) ) - { - int16_t FractionalResolution = kLtpHmFractionalResolution; - int16_t Multiplier, LtpPitchIndex, Bandwidth; - - Bandwidth = NumCoeffs >= 256; - LtpPitchIndex = ( ( LtpPitchLag + ( 1 << ( kLtpHmFractionalResolution - 1 ) ) ) >> kLtpHmFractionalResolution ) - 2; - assert( 0 <= LtpPitchIndex && LtpPitchIndex <= 16 ); - - for ( Multiplier = 1; Multiplier <= ( 1 << NumRatioBits[Bandwidth][LtpPitchIndex] ); ++Multiplier ) - { - float CurrentScore; - int32_t Lag; - - Lag = ( LtpPitchLag * (int16_t) ( 4 * Ratios[Bandwidth][LtpPitchIndex][Multiplier - 1] ) ) >> 2; - - if ( Lag >= ( 4 << FractionalResolution ) && ( Lag <= ( ( NumToConsider - 2 ) << FractionalResolution ) ) ) - { - CurrentScore = SearchPeriodicityIndex_Single( AbsMdct3, NumToConsider, Lag, FractionalResolution ); - - if ( CurrentScore > Score ) - { - Score = CurrentScore; - PeriodicityIndex = Multiplier | kLtpHmFlag; - } - } - } - PeriodicityIndex |= LtpPitchIndex << 9; - } - else - { - if ( UnfilteredMdct != NULL ) - { - MaxAt = 1; - A = AbsMdct3[1]; - - for ( i = 4; i < NumToConsider - 1; i += 3 ) - { - - if ( AbsMdct3[i] > AbsMdct3[MaxAt] ) - { - MaxAt = i; - } - A += AbsMdct3[i]; - } - - if ( AbsMdct3[MaxAt] > A * 0.7f ) - { - NumToConsider = min( NumToConsider, MaxAt + 4 ); - } - } - - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 0, 16, 3, GET_ADJ2( 0, 6, 3 ), 4, &PeriodicityIndex, &Score ); - - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 16, 80, 4, GET_ADJ2( 16, 8, 4 ), 4, &PeriodicityIndex, &Score ); - - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 80, 208, 3, GET_ADJ2( 80, 12, 3 ), 4, &PeriodicityIndex, &Score ); - - if ( NumToConsider <= 128 ) - { - /* no long lags for band-limited MDCTs */ - - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 88 + NumToConsider, 0, GET_ADJ2( 224, 188, 0 ), 1, &PeriodicityIndex, &Score ); - } - else - { - - if ( TargetBits > kSmallerLagsTargetBitsThreshold && NumCoeffs >= 256 ) - { - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 224, 1, GET_ADJ2( 208, 28, 1 ), 1, &PeriodicityIndex, &Score ); - - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 224, 256, 0, GET_ADJ2( 224, 188, 0 ), 1, &PeriodicityIndex, &Score ); - } - else - { - SearchPeriodicityIndex_Range( AbsMdct3, NumToConsider, 208, 256, 1, GET_ADJ2( 208, 28, 1 ), 1, &PeriodicityIndex, &Score ); - } - } - } - - if ( AbsTotal > 0 ) - { - *RelativeScore = Score / AbsTotal * (float) NumCoeffs; - } - else - { - *RelativeScore = 0; - } - - return PeriodicityIndex; -} - - -/*-------------------------------------------------------------------* - * PeakFilter() - * - * - *-------------------------------------------------------------------*/ - -#define kPeakElevationThreshold 1.0f - -static void PeakFilter( - const float x[], /* (I) absolute spectrum */ - float y[], /* (O) filtered absolute spectrum, must not alias x[] */ - const int16_t L_frame /* (I) number of spectral lines */ -) -{ - int16_t flen, i; - float a, m; - - flen = ( L_frame >> 4 ); - m = kPeakElevationThreshold / (float) ( 2 * flen + 1 ); - - a = 0.0f; - for ( i = 0; i < flen; ++i ) - { - a += x[i]; - } - - for ( i = 0; i < flen; ++i ) - { - y[i] = max( 0.0f, x[i] - a * m ); - a += x[i + flen]; - } - for ( ; i < L_frame - flen; ++i ) - { - y[i] = max( 0.0f, x[i] - a * m ); - a -= x[i - flen]; - a += x[i + flen]; - } - - for ( ; i < L_frame; ++i ) - { - y[i] = max( 0.0f, x[i] - a * m ); - a -= x[i - flen]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_hm_get_re() - * - * - *-------------------------------------------------------------------*/ - -/*! r: RE error */ -static float tcx_hm_get_re( - const float x[], /* i : absolute spectrum */ - const Word16 gain, /* i : HM gain (Q11) */ - const int16_t lag, - const int16_t fract_res, - const Word16 p[], /* i : harmonic model (Q13) */ - const Word32 env[], /* i : envelope (Q16) */ - const int16_t L_frame /* i : number of spectral lines */ -) -{ - Word32 ne[N_MAX_ARI]; - float G, e; - int16_t i; - - /* Calculate new envelope with "gain" harmonic gain */ - for ( i = 0; i < L_frame; ++i ) - { - ne[i] = env[i]; - } - - tcx_hm_modify_envelope_ivas( gain, lag, fract_res, p, ne, L_frame ); - - /* Normalize */ - G = 0; - - for ( i = 0; i < L_frame; ++i ) - { - G += x[i] * ne[i]; - } - G = 1.0f / G; - - /* Calculate error */ - e = 0; - - for ( i = 0; i < L_frame; ++i ) - { - e += (float) pow( x[i] * ( ne[i] * G ), 4 ); - } - - return e; -} - - -/*-------------------------------------------------------------------* - * tcx_hm_quantize_gain() - * - * - *-------------------------------------------------------------------*/ - -static void tcx_hm_quantize_gain( - const float x[], /* i : absolute spectrum */ - const Word32 env[], /* i : envelope (Q16) */ - const int16_t lag, - const int16_t fract_res, - Word16 p[], /* i : harmonic model (Q13) */ - const int16_t L_frame, /* i : number of spectral lines */ - const int16_t coder_type, /* i : GC/VC coder type */ - float relative_score, /* i : periodicity score */ - int16_t *gain_idx, /* o : quantization index */ - Word16 *gain /* o : quantized harmonic model gain (Q11) */ -) -{ - int16_t g, s; - float be, e, pe; - const float kLowPeriodicityThr[2] = { 0.5f, 0.2f }; - - assert( coder_type == VOICED || coder_type == GENERIC ); - - s = 0; - if ( coder_type == VOICED ) - { - s = 1; - } - - *gain = 0; - - /* Disable the harmonic model if periodicity is very low */ - if ( relative_score < kLowPeriodicityThr[s] ) - { - return; - } - - be = tcx_hm_get_re( x, *gain, lag, fract_res, p, env, L_frame ); - - if ( coder_type == GENERIC ) - { - e = tcx_hm_get_re( x, qGains[s][0], lag, fract_res, p, env, L_frame ); - pe = 1.05f; - - if ( e * pe < be ) - { - *gain_idx = 0; - *gain = qGains[s][0]; - } - } - else - { - /* Iterate over all possible gain values */ - for ( g = 0; g < ( 1 << kTcxHmNumGainBits ); ++g ) - { - - e = tcx_hm_get_re( x, qGains[s][g], lag, fract_res, p, env, L_frame ); - - /* Add bit penalty */ - pe = 1.0f; - if ( *gain == 0.0f ) - { - pe = 1.05f; - } - - /* Minimum selection */ - if ( e * pe < be ) - { - be = e; - *gain_idx = g; - *gain = qGains[s][g]; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_hm_analyse() - * - * - *-------------------------------------------------------------------*/ - -void tcx_hm_analyse( - const float abs_spectrum[], /* i : absolute spectrum */ - const int16_t L_frame, /* i : number of spectral lines */ - Word32 env[], /* i/o: envelope shape (Q16) */ - const int16_t targetBits, /* i : target bit budget */ - const int16_t coder_type, /* i : GC/VC coder type */ - int16_t prm_hm[], /* o : HM parameters */ - int16_t LtpPitchLag, /* i : LTP pitch lag or -1 if none */ - const float LtpGain, /* i : LTP gain */ - int16_t *hm_bits /* o : bit consumption */ -) -{ - int16_t lag; - int32_t tmpL; - int16_t fract_res; - float fspec[N_MAX_ARI], RelativeScore; - Word16 p[2 * kTcxHmParabolaHalfWidth + 1], gain; - - /* Disable HM for non-GC,VC coder types */ - if ( ( coder_type != VOICED ) && ( coder_type != GENERIC ) ) - { - *hm_bits = 0; - prm_hm[0] = 0; - - return; - } - - /* Bit consumption for the HM off case: 1 bit flag */ - *hm_bits = 1; - - /* Filter out noise and keep the peaks */ - PeakFilter( abs_spectrum, fspec, L_frame ); - - /* Get the best lag index */ - prm_hm[1] = SearchPeriodicityIndex( fspec, abs_spectrum, L_frame, targetBits - *hm_bits, LtpPitchLag, LtpGain, &RelativeScore ); - - /* Convert the index to lag */ - UnmapIndex_ivas( prm_hm[1], L_frame >= 256, LtpPitchLag, ( targetBits - *hm_bits <= kSmallerLagsTargetBitsThreshold ) || ( L_frame < 256 ), &fract_res, &tmpL ); - lag = (int16_t) tmpL; - - /* Render harmonic model */ - tcx_hm_render_ivas( lag, fract_res, p ); - - /* Calculate and quantize gain */ - gain = 0; - - tcx_hm_quantize_gain( abs_spectrum, env, lag, fract_res, p, L_frame, coder_type, RelativeScore, &prm_hm[2], &gain ); - - /* Decision */ - if ( gain > 0 ) - { - prm_hm[0] = 1; /* flag: on */ - - *hm_bits += CountIndexBits_ivas( L_frame >= 256, prm_hm[1] ); - - if ( coder_type == VOICED ) - { - *hm_bits += kTcxHmNumGainBits; - } - - tcx_hm_modify_envelope_ivas( gain, lag, fract_res, p, env, L_frame ); - } - else - { - prm_hm[0] = 0; /* flag: off */ - prm_hm[1] = -1; /* pitch index */ - prm_hm[2] = 0; /* gain index */ - } - - return; -} -#endif diff --git a/lib_enc/ari_hm_enc_fx.c b/lib_enc/ari_hm_enc_fx.c index a71a49f14..3e6519a3b 100644 --- a/lib_enc/ari_hm_enc_fx.c +++ b/lib_enc/ari_hm_enc_fx.c @@ -53,7 +53,6 @@ Word16 EncodeIndex_fx( return 8; } } -#ifdef IVAS_FLOAT_FIXED Word16 EncodeIndex_ivas_fx( const Word16 Bandwidth, Word16 PeriodicityIndex, @@ -82,7 +81,6 @@ Word16 EncodeIndex_ivas_fx( return 8; } } -#endif /*-------------------------------------------------------------------* * SearchPeriodicityIndex_Single() * diff --git a/lib_enc/arith_coder_enc.c b/lib_enc/arith_coder_enc.c index 42abaf867..5680feed4 100644 --- a/lib_enc/arith_coder_enc.c +++ b/lib_enc/arith_coder_enc.c @@ -44,643 +44,8 @@ #include "basop_util.h" #include "basop_proto_func.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define kMaxNumHeapElems 10 - -typedef struct HeapElem -{ - float mScore; /* Sort key */ - int16_t mIndex; /* Original index */ -} HeapElem; - -typedef struct Heap -{ - HeapElem mElem[2 * kMaxNumHeapElems + 1]; -} Heap; - - -/*-------------------------------------------------------------------* - * tcx_arith_estimate_scale() - * - * - *-------------------------------------------------------------------*/ - -/*! r: estimated SQ scale */ -static float tcx_arith_estimate_scale( - const float abs_spectrum[], /* i : absolute MDCT coefficients */ - const int16_t L_frame, /* i : number of spectral lines */ - const Word16 envelope[], /* i : scaled envelope (Q15-e) */ - const Word16 envelope_e /* i : scaled envelope exponent (Q0) */ -) -{ - float scale, tmp; - int16_t k; - - /* compute normalised standard deviation and determine approximate scale */ - scale = 0.01f; - for ( k = 0; k < L_frame; k++ ) - { - tmp = abs_spectrum[k] * envelope[k]; - scale += tmp * tmp; - } - tmp = (float) ( 1 << ( 15 - envelope_e ) ); - scale = (float) sqrt( ( L_frame * tmp * tmp * 4.0f ) / scale ); - - - return scale; -} - - -/*-------------------------------------------------------------------* - * MinHeapify_i() - * - * - *-------------------------------------------------------------------*/ - -static void MinHeapify_i( - Heap *H, - int16_t i ) -{ - int16_t left, right, largest; - HeapElem T; - - left = 2 * i + 1; - right = left + 1; - largest = i; - - if ( H->mElem[left].mScore < H->mElem[largest].mScore ) - { - largest = left; - } - if ( H->mElem[right].mScore < H->mElem[largest].mScore ) - { - largest = right; - } - while ( largest != i ) - { - T.mIndex = H->mElem[i].mIndex; - T.mScore = H->mElem[i].mScore; - - H->mElem[i].mIndex = H->mElem[largest].mIndex; - H->mElem[i].mScore = H->mElem[largest].mScore; - - H->mElem[largest].mIndex = T.mIndex; - H->mElem[largest].mScore = T.mScore; - - i = largest; - - left = 2 * i + 1; - right = left + 1; - - if ( H->mElem[left].mScore < H->mElem[largest].mScore ) - { - largest = left; - } - if ( H->mElem[right].mScore < H->mElem[largest].mScore ) - { - largest = right; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * tcx_arith_find_max_scale() - * - * - *-------------------------------------------------------------------*/ - -static float tcx_arith_find_max_scale( - const float abs_spectrum[], /* i : absolute MDCT coefficients */ - const int16_t L_frame, /* i : number of spectral lines */ - const Word16 envelope[], /* i : scaled envelope (Q15-e) */ - const Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ - const Word16 exps[], /* i : expfp_evs(-(integer)envelope[]/2) */ - const float deadzone /* i : deadzone (0.5f = no deadzone) */ -) -{ - int16_t i, k, q; - float p, scale; - Heap heap; - Word16 tmpi1, tmpi2; - float envelope_scale; - const float limit = -9.70406052784f; /* = ln(1/16384): log of smallest allowed probability */ - - /* Find the top most offending lines according to probability estimates */ - heap.mElem[0].mScore = 0; /* mal: just to silnce the compiler */ - - for ( i = 0; i < kMaxNumHeapElems; ++i ) - { - heap.mElem[i].mIndex = 0; - heap.mElem[i].mScore = 0; - } - for ( ; i < 2 * kMaxNumHeapElems + 1; ++i ) - { - heap.mElem[i].mScore = FLT_MAX; - } - for ( k = 0; k < L_frame; ++k ) - { - p = envelope[k] * abs_spectrum[k]; - if ( p > heap.mElem[0].mScore ) - { - heap.mElem[0].mScore = p; - heap.mElem[0].mIndex = k; - MinHeapify_i( &heap, 0 ); - } - } - - /* Make sure the scale is limited so that the offending lines don't cause probability underflow. */ - /* Also limit scale to avoiding saturation of the gain quantizer */ - scale = 1.0f / (float) sqrt( L_frame * 0.5f ); - envelope_scale = -(float) pow( 2, envelope_e - 16 ); - for ( i = 0; i < kMaxNumHeapElems; ++i ) - { - k = heap.mElem[i].mIndex; - - /* Get approximate maximum allowed magnitude */ - q = (int16_t) ceil( ( ( limit - log( 1.0f - ( exps[k] / PCM16_TO_FLT_FAC ) * ( exps[k] / PCM16_TO_FLT_FAC ) ) ) / ( envelope[k] * envelope_scale ) - 1 ) / 2.0f ); - - /* Refinement: get the exact q */ - powfp_odd2_evs( exps[k], q, &tmpi1, &tmpi2 ); - if ( tmpi1 - tmpi2 >= 2 ) - { - /* q may be too low */ - powfp_odd2_evs( exps[k], q + 1, &tmpi1, &tmpi2 ); - while ( tmpi1 - tmpi2 >= 2 ) - { - ++q; - powfp_odd2_evs( exps[k], q + 1, &tmpi1, &tmpi2 ); - } - } - else - { - /* q is too high */ - --q; - powfp_odd2_evs( exps[k], q, &tmpi1, &tmpi2 ); - while ( tmpi1 - tmpi2 < 2 ) - { - --q; - powfp_odd2_evs( exps[k], q, &tmpi1, &tmpi2 ); - } - } - - /* Find the largest scale so that the quantized magnitude is at most q */ - p = ( q + 0.99f - deadzone ) / ( abs_spectrum[k] + 0.000001f ); - assert( (int16_t) ( abs_spectrum[k] * p + deadzone ) <= q ); - scale = min( scale, p ); - } - - return scale; -} - - -/*-------------------------------------------------------------------* - * tcx_arith_find_kMax() - * - * - *-------------------------------------------------------------------*/ - -/*! r: index of highest freq. nonzero line (-1 if all zeros) */ -static int16_t tcx_arith_find_kMax( - const float abs_spectrum[], /* i : absolute MDCT coefficients */ - const int16_t L_frame, /* i : number of spectral lines */ - const float scale, /* i : scalar quantizer scale */ - const float deadzone, /* i : deadzone (0.5f = no deadzone) */ - const int8_t deadzone_flags[] /* i : line-wise deadzone control */ -) -{ - int16_t kMax; - - kMax = L_frame - 1; - while ( ( kMax >= 0 ) && ( abs_spectrum[kMax] * scale < ( 1.0f - deadzone ) + deadzone * deadzone_flags[kMax] ) ) - { - kMax--; - } - - return kMax; -} - - -/*-------------------------------------------------------------------* - * tcx_arith_rateloop() - * - * - *-------------------------------------------------------------------*/ - -/*! r: best scale */ -static float tcx_arith_rateloop( - const float abs_spectrum[], /* i : absolute MDCT coefficients */ - const int16_t L_frame, /* i : number of spectral lines */ - const Word16 envelope[], /* i : scaled envelope (Q15-e) */ - const Word16 envelope_e, /* i : scaled envelope exponent (Q0) */ - const Word16 exps[], /* i : expfp_evs(-(integer)envelope[]/2) */ - const int16_t target_bits, /* i : target bit budget */ - const float deadzone, /* i : deadzone (0.5f = no deadzone) */ - const int8_t deadzone_flags[], /* i : line-wise deadzone control */ - float *target_bits_fac /* i/o: scale estimator compensation */ -) -{ - int16_t k, idx, kMax, q; - float s, adjust; - float fixed_bits[2][N_MAX_ARI]; - float estimator_undershoot; - float max_complexity; - int16_t iter; /* rate loop iteration counter */ - float scale; /* SQ scale factor to try next */ - float scale_best; /* best SQ scale factor */ - float scale_max; /* maximum allowable scale factor */ - float lob; /* lower bound of SQ scale factor */ - float hib; /* upper bound of SQ scale factor */ - int16_t flag; /* 1:bit surplus, -1:bit deficit, 0:unknown */ - float complexity; /* cumulative rate loop complexity */ - float bits; /* number of bits (approximate) */ - float envelope_scale; - - - scale = tcx_arith_estimate_scale( abs_spectrum, L_frame, envelope, envelope_e ); - scale *= *target_bits_fac; - - scale_max = tcx_arith_find_max_scale( abs_spectrum, L_frame, envelope, envelope_e, exps, deadzone ); - if ( scale > scale_max ) - { - scale = scale_max; - } - - scale_best = scale; - lob = 0.0f; - hib = 0.0f; - flag = 0; - complexity = 0; - bits = 0; - max_complexity = 96.0f * L_frame; - iter = 0; - envelope_scale = (float) pow( 2, envelope_e - 15 ); - - estimator_undershoot = 0; - /* Precalculate fixed bit costs */ - for ( k = 0; k < L_frame; ++k ) - { - s = envelope[k] * envelope_scale; - - fixed_bits[0][k] = -log2_f( 1 - exps[k] / PCM16_TO_FLT_FAC ); - fixed_bits[1][k] = 1 - s * 0.5f * INV_LOG_2 - log2_f( 1 - ( exps[k] / PCM16_TO_FLT_FAC ) * ( exps[k] / PCM16_TO_FLT_FAC ) ); - } - - while ( complexity + 48 + L_frame * 11 < max_complexity ) - { - kMax = tcx_arith_find_kMax( abs_spectrum, L_frame, scale, deadzone, deadzone_flags ); - complexity += 16 + ( L_frame - kMax ) * 5 + ( kMax + 1 ) * 2; - - bits = estimator_undershoot * kMax + 1; - - for ( k = 0; k <= kMax; ++k ) - { - s = envelope[k] * envelope_scale; - q = (int16_t) ( abs_spectrum[k] * scale + deadzone ); - idx = min( 1, q ); - bits += fixed_bits[idx][k]; - bits += s * q * INV_LOG_2; - } - complexity += 32 + 6 * kMax; - if ( iter == 0 ) - { - /* First rate loop iteration */ - if ( scale < scale_max ) - { - /* Only update in non-degenerate case */ - /* Update estimator temporal compensation factor */ - *target_bits_fac *= target_bits / (float) bits; - if ( *target_bits_fac > 1.25f ) - { - *target_bits_fac = 1.25f; - } - if ( *target_bits_fac < 0.75f ) - { - *target_bits_fac = 0.75f; - } - } - } - - if ( bits <= target_bits ) - { - /* Bits leftover => scale is too small */ - if ( flag <= 0 || scale >= scale_best ) - { - scale_best = scale; - flag = 1; - } - - lob = scale; - if ( hib > 0 ) - { - /* Bisection search */ - scale = ( lob + hib ) * 0.5f; - } - else - { - /* Initial scale adaptation */ - adjust = 1.25f * target_bits / (float) bits; - if ( adjust > 2.0f ) - { - adjust = 2.0f; - } - scale *= adjust; - if ( scale > scale_max ) - { - scale = scale_max; - } - } - } - else - { - /* Ran out of bits => scale is too large */ - hib = scale; - if ( lob > 0 ) - { - /* Bisection search */ - scale = ( lob + hib ) * 0.5f; - } - else - { - /* Initial scale adaptation */ - adjust = 0.8f * target_bits / (float) bits; - if ( adjust < 0.5f ) - { - adjust = 0.5f; - } - scale *= adjust; - } - if ( flag <= 0 ) - { - scale_best = scale; - flag = 0; - } - } - ++iter; - } - - - return scale_best; -} - - -/*-------------------------------------------------------------------* - * tcx_arith_encode() - * - * - *-------------------------------------------------------------------*/ - -/*! r: number of bits consumed */ -static int16_t tcx_arith_encode( - int32_t q_abs_spectrum[], /* i/o: scalar quantized absolute spectrum */ - const int16_t signs[], /* i : signs */ - const int16_t kMax, /* i : number of nonzero spectral lines to code */ - const int16_t L_frame, /* i : nominal number of spectral lines */ - const Word16 exps[], /* i : expfp_evs(-(integer)envelope[]/2) */ - const int16_t target_bits, /* i : target bit budget */ - int16_t prm[] /* o : bitstream */ -) -{ - Tastat as, as_lastgood; - int16_t bp, bp_lastgood; - int16_t k; - int16_t kEncoded; - Word16 tmpi1, tmpi2; - - /* Final coding */ - ari_start_encoding_14bits( &as ); - ari_copy_states( &as, &as_lastgood ); - bp = bp_lastgood = 0; - kEncoded = kMax; - for ( k = 0; k <= kMax; ++k ) - { - if ( q_abs_spectrum[k] == 0 ) - { - assert( exps[k] >= 2 ); - bp = ari_encode_14bits_range( prm, bp, target_bits, &as, exps[k] >> 1, 16384 ); - } - else - { - /* q_abs_spectrum[k] != 0 */ - powfp_odd2_evs( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); - while ( tmpi1 < tmpi2 + 2 ) - { - --q_abs_spectrum[k]; - powfp_odd2_evs( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); - } - bp = ari_encode_14bits_range( prm, bp, target_bits, &as, tmpi2 >> 1, tmpi1 >> 1 ); - bp = ari_encode_14bits_sign( prm, bp, target_bits, &as, signs[k] ); - } - /* Check bit budget status */ - if ( as.high <= as.low ) - { - /* no bits left */ - /* printf("\noverflow at %d\n\n", k); */ - if ( q_abs_spectrum[k] > 1 ) /* Lower magnitude is still > 0 */ - { - /* Restore state */ - ari_copy_states( &as_lastgood, &as ); - bp = bp_lastgood; - - /* Quantize to lower magnitude */ - --q_abs_spectrum[k]; - - /* Retry encoding */ - powfp_odd2_evs( exps[k], (Word16) q_abs_spectrum[k], &tmpi1, &tmpi2 ); - bp = ari_encode_14bits_range( prm, bp, target_bits, &as, tmpi2 >> 1, tmpi1 >> 1 ); - bp = ari_encode_14bits_sign( prm, bp, target_bits, &as, signs[k] ); - if ( as.high > as.low ) /* Success */ - { - ari_copy_states( &as, &as_lastgood ); - bp_lastgood = bp; - kEncoded = k; - for ( ++k; k <= kMax; k++ ) - { - q_abs_spectrum[k] = 0; - } - break; - } - } - ari_copy_states( &as_lastgood, &as ); - bp = bp_lastgood; - kEncoded = k - 1; - for ( ; k <= kMax; k++ ) - { - q_abs_spectrum[k] = 0; - } - break; - } - else - { - ari_copy_states( &as, &as_lastgood ); - bp_lastgood = bp; - } - } - - /* Send zeros until L_frame */ - for ( k = kEncoded + 1, kEncoded = L_frame - 1; k < L_frame; ++k ) - { - assert( exps[k] >= 2 ); - bp = ari_encode_14bits_range( prm, bp, target_bits, &as, exps[k] >> 1, 16384 ); - /* Check bit budget status */ - if ( as.high <= as.low ) - { - /* no bits left */ - ari_copy_states( &as_lastgood, &as ); - bp = bp_lastgood; - kEncoded = k - 1; - break; - } - else - { - ari_copy_states( &as, &as_lastgood ); - bp_lastgood = bp; - } - } - - if ( kEncoded == L_frame - 1 ) - { - /* RESQ bits possibly available */ - /* Limit target bits to actually needed bits */ - bp = ari_done_cbr_encoding_14bits( prm, bp, bp + 16 + as.bits_to_follow, &as ); - } - else - { - bp = ari_done_cbr_encoding_14bits( prm, bp, target_bits, &as ); - } - - return bp; -} - - -/*-------------------------------------------------------------------* - * tcx_arith_encode_envelope() - * - * - *-------------------------------------------------------------------*/ - -void tcx_arith_encode_envelope( - float spectrum[], /* i/o: MDCT coefficients */ - int16_t signs[], /* o : signs (spectrum[.]<0) */ - const int16_t L_frame, /* i : frame or MDCT length */ - const int16_t L_spec, /* i : length w/o BW limitation */ - Encoder_State *st, /* i/o: coder state */ - const Word16 A_ind[], /* i : quantised LPC coefficients */ - int16_t target_bits, /* i : number of available bits */ - int16_t prm[], /* o : bitstream parameters */ - const int16_t use_hm, /* i : use HM in current frame? */ - int16_t prm_hm[], /* o : HM parameter area */ - const int16_t tcxltp_pitch, /* i : TCX LTP pitch in FD, -1 if n/a */ - int16_t *arith_bits, /* o : bits used for ari. coding */ - int16_t *signaling_bits, /* o : bits used for signaling */ - const int16_t low_complexity /* i : low-complexity flag */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - Word16 tmp; - Word32 env[N_MAX_ARI]; /* unscaled envelope (Q16) */ - Word16 *envelope; /* scaled envelope (Q15-e) */ - Word16 envelope_e; - Word16 exponents[N_MAX_ARI]; /* Q15 */ - int16_t L_spec_core; - int32_t *q_spectrum; - TCX_CONFIG_HANDLE hTcxCfg; - float scale; - int16_t k, kMax; - float deadzone; - const int8_t *deadzone_flags; - float gamma_w, gamma_uw; - int16_t hm_bits; - - assert( L_spec <= N_MAX_ARI ); - - hTcxCfg = st->hTcxCfg; - deadzone = hTcxCfg->sq_rounding_flt; - deadzone_flags = hTcxEnc->memQuantZeros; - *signaling_bits = 0; - assert( st->enableTcxLpc ); - gamma_w = 1.0f; - gamma_uw = 1.0f / st->gamma_flt; - -#define WMC_TOOL_SKIP - tcx_arith_render_envelope_ivas( A_ind, L_frame, L_spec, FL2WORD16( hTcxCfg->preemph_fac_flt ), FL2WORD16( gamma_w ), FL2WORD16( 0.5f * gamma_uw ), env ); -#undef WMC_TOOL_SKIP - - for ( k = 0; k < L_spec; ++k ) - { - if ( spectrum[k] < 0 ) - { - spectrum[k] = -spectrum[k]; - signs[k] = 1; - } - else - { - signs[k] = 0; - } - } - - if ( use_hm ) - { - tcx_hm_analyse( spectrum, L_spec, env, target_bits, hTcxCfg->coder_type, prm_hm, tcxltp_pitch, hTcxEnc->tcxltp_gain_flt, &hm_bits ); - - target_bits -= hm_bits; - *signaling_bits += hm_bits; - } - else - { - prm_hm[0] = 0; /* just to be sure */ - hm_bits = 0; - } - - L_spec_core = L_spec; - if ( st->igf ) - { - L_spec_core = min( L_spec_core, st->hIGFEnc->infoStartLine ); - } - envelope = (Word16 *) env; - tcx_arith_scale_envelope_ivas( L_spec, L_spec_core, env, target_bits, low_complexity, envelope, &envelope_e ); - -#define WMC_TOOL_SKIP - tmp = sub( envelope_e, 1 ); - FOR( k = 0; k < L_spec; k++ ) - { - exponents[k] = expfp_evs( negate( envelope[k] ), tmp ); - } -#undef WMC_TOOL_SKIP - scale = tcx_arith_rateloop( spectrum, L_spec, envelope, envelope_e, exponents, target_bits, deadzone, deadzone_flags, &( hTcxEnc->tcx_target_bits_fac_flt ) ); - - /* Final quantization */ - kMax = tcx_arith_find_kMax( spectrum, L_spec, scale, deadzone, deadzone_flags ); - - q_spectrum = env; /* Reuse buffer */ - for ( k = 0; k <= kMax; ++k ) - { - /* quantise using dead-zone */ - q_spectrum[k] = (int32_t) ( spectrum[k] * scale + deadzone ); - } - - /* Final encoding */ - *arith_bits = tcx_arith_encode( q_spectrum, signs, kMax, L_spec, exponents, target_bits, prm ); - - /* Multiply back the signs */ - for ( k = 0; k <= kMax; ++k ) - { - spectrum[k] = (float) ( q_spectrum[k] * ( 1 - 2 * signs[k] ) ); - } - for ( ; k < max( L_frame, L_spec ); ++k ) - { - spectrum[k] = 0; - } - - return; -} -#endif diff --git a/lib_enc/avq_cod.c b/lib_enc/avq_cod.c index b97e2496c..8e752f0ac 100644 --- a/lib_enc/avq_cod.c +++ b/lib_enc/avq_cod.c @@ -40,558 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local prototypes - *-------------------------------------------------------------------*/ - -static void wrte_cv( BSTR_ENC_HANDLE hBstr, const int16_t nq, const int16_t i_ind, const int16_t kv_ind, uint16_t I, int16_t kv[], int16_t *bits ); - -/*-------------------------------------------------------------------* - * Function AVQ_cod() * - * * - * Split algebraic vector quantizer (AVQ) based on RE8 latice * - *-------------------------------------------------------------------*/ - -/*! r: comfort noise gain factor */ -float AVQ_cod( - const float xri[], /* i : vector to quantize */ - int16_t xriq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ - const int16_t nb_bits, /* i : number of allocated bits */ - const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ -) -{ - int16_t i, j, iter; - int16_t c[8]; - float gain_inv, x1[8], ener, tmp, nbits, nbits_max, fac, offset; - float ebits[NSV_MAX]; - - /* find energy of each subvector in log domain (scaled for bits estimation) */ - for ( i = 0; i < Nsv; i++ ) - { - ener = 2.0f; /* to set ebits >= 0 */ - for ( j = 0; j < 8; j++ ) - { - x1[j] = xri[i * 8 + j]; - ener += x1[j] * x1[j]; - } - - /* estimated bit consumption when gain=1 */ - ebits[i] = 5.0f * FAC_LOG2 * (float) log10( ener * 0.5f ); - } - - /* estimate gain according to number of bits allowed */ - fac = 128.0f; /* start at the middle (offset range = 0 to 255.75) */ - offset = 0.0f; - nbits_max = 0.95f * ( (float) ( nb_bits - Nsv ) ); - - /* tree search with 10 iterations : offset with step of 0.25 bits (0.3 dB) */ - for ( iter = 0; iter < 10; iter++ ) - { - offset += fac; - /* calculate the required number of bits */ - nbits = 0.0; - for ( i = 0; i < Nsv; i++ ) - { - tmp = ebits[i] - offset; - if ( tmp < 0.0 ) - { - tmp = 0.0; - } - nbits += tmp; - } - /* decrease gain when no overflow occurs */ - if ( nbits <= nbits_max ) - { - offset -= fac; - } - fac *= 0.5; - } - - /* estimated gain (when offset=0, estimated gain=1) */ - gain_inv = 1.0f / (float) pow( 10.0f, (float) ( offset / ( 2.0f * 5.0f * FAC_LOG2 ) ) ); - - /* quantize all subvector using estimated gain */ - for ( i = 0; i < Nsv; i++ ) - { - for ( j = 0; j < 8; j++ ) - { - x1[j] = xri[i * 8 + j] * gain_inv; - } - - re8_PPV( x1, c ); - for ( j = 0; j < 8; j++ ) - { - xriq[i * 8 + j] = c[j]; - } - } - - fac = 0; - - /* round bit allocations and save */ - for ( i = 0; i < Nsv; i++ ) - { - xriq[( Nsv * 8 ) + i] = (int16_t) floor( ebits[i] * 128.0f ); - } - - return ( fac ); -} - - -/*-----------------------------------------------------------------* - * AVQ_encmux() - * - * Encode subvectors and write indexes into the bitstream - *-----------------------------------------------------------------*/ - -void AVQ_encmux( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t extl, /* i : extension layer */ - int16_t xriq[], /* i/o: rounded subvectors [0..8*Nsv-1] followedby rounded bit allocations [8*Nsv..8*Nsv+Nsv-1]*/ - int16_t *nb_bits, /* i/o: number of allocated bits */ - const int16_t Nsv, /* i : number of subvectors */ - int16_t nq[], /* o : AVQ nq index */ - int16_t avq_bit_sFlag, /* i : flag for AVQ bit saving solution */ - int16_t trgtSvPos /* i : target SV for AVQ bit savings */ -) -{ - int16_t i, j = 0, bits, pos, pos_max, overflow; - int16_t sort_idx[NSV_MAX]; - int16_t *t, kv[NSV_MAX * 8]; - uint16_t I[NSV_MAX]; - int16_t nq_ind, i_ind, kv_ind; - int16_t nq_est, unused_bits, unused_bits_idx; - int16_t bitsMod; - int16_t unusedbitsFlag; - int16_t svOrder[NSV_MAX], k, nullVec, dummy_bits; - - if ( extl == SWB_BWE_HIGHRATE || extl == FB_BWE_HIGHRATE ) - { - nq_ind = IND_NQ2; - i_ind = IND_I2; - kv_ind = IND_KV2; - } - else - { - nq_ind = IND_NQ; - i_ind = IND_I; - kv_ind = IND_KV; - } - - unusedbitsFlag = 0; - bitsMod = 0; - - for ( i = 0; i < NSV_MAX; i++ ) - { - I[i] = (uint16_t) -1; - } - - /*----------------------------------------------------------------- - * Encode subvectors and fix possible overflows in total bit budget, - * i.e. find for each subvector a codebook index nq (nq=0,2,3,4,...,NSV_MAX), - * a base codebook index (I), and a Voronoi index (kv) - *-----------------------------------------------------------------*/ - - /* sort subvectors by estimated bit allocations in decreasing order */ - t = kv; /* reuse vector to save memory */ - for ( i = 0; i < Nsv; i++ ) - { - t[i] = xriq[8 * Nsv + i]; - } - - for ( i = 0; i < Nsv; i++ ) - { - bits = t[0]; - pos = 0; - for ( j = 1; j < Nsv; j++ ) - { - if ( t[j] > bits ) - { - bits = t[j]; - pos = j; - } - } - sort_idx[i] = pos; - t[pos] = -1; - } - - /* compute multi-rate indices and avoid bit budget overflow */ - pos_max = 0; - bits = 0; - for ( i = 0; i < Nsv; i++ ) - { - /* find vector to quantize (criteria: nb of estimated bits) */ - pos = sort_idx[i]; - - /* compute multi-rate index of rounded subvector (nq,I,kv[]) */ - re8_cod( &xriq[pos * 8], &nq[pos], &I[pos], &kv[8 * pos] ); - - if ( nq[pos] > 0 ) - { - j = pos_max; - if ( pos > j ) - { - j = pos; - } - - /* compute (number of bits -1) to describe Q #nq */ - if ( nq[pos] >= 2 ) - { - overflow = nq[pos] * 5 - 1; - } - else - { - overflow = 0; - } - - /* check for overflow and compute number of bits-1 (n) */ - if ( ( bits + overflow + j ) > *nb_bits ) - { - /* if budget overflow */ - for ( j = pos * 8; j < ( pos * 8 ) + 8; j++ ) - { - xriq[j] = 0; - } - nq[pos] = 0; /* force Q0 */ - } - else - { - bits += overflow; - pos_max = j; /* update index of the last described subvector */ - } - } - } - - nullVec = 0; - dummy_bits = 0; - svOrder[Nsv - 1] = trgtSvPos; - svOrder[0] = 0; - svOrder[1] = 1; - i = 2; - j = i; - if ( avq_bit_sFlag == 2 ) - { - j = i + 1; - } - while ( i < Nsv - 1 ) - { - svOrder[i] = j; - i++; - j++; - } - - /* write indexes to the bitstream */ - /* ============================== */ - - bits = *nb_bits; - overflow = 0; - for ( i = 0; i < Nsv; i++ ) - { - k = svOrder[i]; - if ( avq_bit_sFlag == 2 && bits % 5 == 4 && bits > 8 && bits < 30 && k >= trgtSvPos && i < Nsv - 1 ) - { - ordr_esti( Nsv - i, &trgtSvPos, &svOrder[i], Nsv ); - k = svOrder[i]; - avq_bit_sFlag = 1; - } - - if ( k == trgtSvPos && avq_bit_sFlag > 0 ) - { - if ( ( *nb_bits - bits ) == 7 || bits < BIT_SAVING_LOW_THR || bits >= BIT_SAVING_HIGH_THR ) - { - avq_bit_sFlag = 0; - } - else - { - break; - } - } - - if ( 5 * nq[k] - 1 == bits ) /* check the overflow */ - { - overflow = 1; - } - - if ( bits > 8 ) - { - /* write the unary code for nq[i] */ - j = nq[k] - 1; - if ( nq[k] > 0 ) - { - /* write the unary code */ - while ( j > 16 ) - { - push_indice( hBstr, nq_ind, 65535, 16 ); - bits -= 16; - j -= 16; - } - - if ( j > 0 ) - { - push_indice( hBstr, nq_ind, ( 1 << j ) - 1, j ); - bits -= j; - } - } - - if ( !overflow ) - { - /* write the stop bit */ - push_indice( hBstr, nq_ind, 0, 1 ); - bits--; - } - - /* write codebook indices (rank I and event. Voronoi index kv) */ - wrte_cv( hBstr, nq[k], i_ind, kv_ind, I[k], &kv[k * 8], &bits ); - } - } /* for */ - - /* Bit Saving Solution */ - if ( avq_bit_sFlag > 0 && bits > 8 ) - { - bitsMod = bits % 5; - i = svOrder[Nsv - 1]; - if ( i != Nsv - 1 ) - { - nullVec = 0; - for ( j = i; j < Nsv - 1; j++ ) - { - if ( nq[svOrder[j]] == 0 ) - { - nullVec++; - } - } - nq_est = bits / 5; - if ( ( bitsMod > 0 || ( nullVec == 4 && nq_est == 5 ) ) && bitsMod != 4 && ( bits + nullVec ) >= 5 * nq_est + 4 && nq[svOrder[Nsv - 2]] == 0 ) /* detect need for dummy bits */ - { - dummy_bits = 5 - bitsMod; - bits = bits + dummy_bits; /* add dummy bits */ - bitsMod = 0; - } - else if ( nq_est > 4 && ( ( bitsMod == 0 && nullVec > 3 && nullVec < 6 ) || ( bitsMod == 4 && nullVec == 5 ) ) && nq[svOrder[Nsv - 2]] == 0 ) /* wasted bits 4, 5 for nq 6,7..*/ - { - overflow = 0; - if ( ( bitsMod + nullVec ) % 5 != 0 ) - { - overflow = 1; - } - dummy_bits = nullVec + overflow; - bits = bits + dummy_bits; /* add dummy bits */ - bitsMod = 0; - } - } - - overflow = 1; - if ( bitsMod != 4 ) - { - overflow = 0; - bits -= bitsMod; - } - bits = bits + overflow; /*add fake bit */ - unused_bits = bits - 5 * nq[i]; - if ( nq[i] == 0 ) /*no bit savings*/ - { - unused_bits--; /*Stop Bit*/ - } - unused_bits_idx = (int16_t) unused_bits / 5; - - unusedbitsFlag = 0; - - if ( dummy_bits == 0 ) - { - if ( unused_bits_idx == 1 && bits > BIT_SAVING_LOW_THR ) - { - unused_bits_idx = 0; - unusedbitsFlag = 1; - } - else if ( unused_bits_idx == 0 && bits > BIT_SAVING_LOW_THR ) - { - unused_bits_idx = 1; - unusedbitsFlag = -1; - } - } - - j = unused_bits_idx; - /*Encode Unused Bit Unary Codeword */ - if ( j > 0 ) - { - /* write the unary code */ - push_indice( hBstr, nq_ind, ( 1 << j ) - 1, j ); - } - - if ( nq[i] != 0 ) - { - /* write the stop bit */ - push_indice( hBstr, nq_ind, 0, 1 ); - } - - /*Compute AVQ code book number from unused Bits */ - nq_est = (int16_t) ceil( 0.2f * ( bits - 5 * ( unusedbitsFlag + unused_bits_idx ) ) ); - - if ( nq_est == 1 ) - { - nq_est = 0; - } - bits -= overflow; - - bits -= j; - - if ( nq_est != 0 ) - { - bits--; - } - nq[i] = nq_est; - - /* write codebook indices (rank I and event. Voronoi index kv) */ - wrte_cv( hBstr, nq[i], i_ind, kv_ind, I[i], &kv[i * 8], &bits ); - - bits -= dummy_bits; - - if ( bitsMod != 4 ) - { - bits += bitsMod; - } - } - - - *nb_bits = bits; - - return; -} - - -/*-------------------------------------------------------------------* - * Function AVQ_cod_lpc() * - * * - * Split algebraic vector quantizer (AVQ) for LPC quantization * - *-------------------------------------------------------------------*/ - -void AVQ_cod_lpc( - const float nvec[], /* i : vector to quantize */ - int16_t nvecq[], /* o : quantized normalized vector (assuming the bit budget is enough) */ - int16_t *indx, /* o : index[] (4 bits per words) */ - const int16_t Nsv /* i : number of subvectors (lg=Nsv*8) */ -) -{ - int16_t nq, c[8]; - int16_t i, l, n, nk, pos, ival, kv[8]; - float x1[8]; - uint16_t I; - - /* quantize all subvector using estimated gain */ - pos = Nsv; - - for ( l = 0; l < Nsv; l++ ) - { - for ( i = 0; i < 8; i++ ) - { - x1[i] = nvec[l * 8 + i]; - } - - re8_PPV( x1, c ); - - re8_cod( c, &nq, &I, kv ); - - for ( i = 0; i < 8; i++ ) - { - nvecq[l * 8 + i] = c[i]; - } - - indx[l] = nq; /* index[0..Nsv-1] = quantizer number (0,2,3,4...) */ - - nk = 0; - n = nq; - - if ( nq > 4 ) - { - nk = ( nq - 3 ) >> 1; - n = nq - nk * 2; - } - - /* write n groups of 4-bit for base codebook index (I) */ - while ( n-- > 0 ) - { - indx[pos++] = ( I & 0x0F ); - I >>= 4; - } - - /* write n groups of 4-bit for Voronoi index (k[]) */ - while ( nk-- > 0 ) - { - ival = 0; - - for ( i = 0; i < 8; i++ ) - { - ival <<= 1; - ival += ( kv[i] & 0x01 ); - kv[i] >>= 1; - } - indx[pos++] = ( ival & 0x0F ); - ival >>= 4; - indx[pos++] = ( ival & 0x0F ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * Function wrte_cv() * - * * - * write codebook indices (rank I and event. Voronoi index kv) * - *-------------------------------------------------------------------*/ - -static void wrte_cv( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t nq, /* i : AVQ nq index */ - const int16_t i_ind, /* i : Base Bitstream index */ - const int16_t kv_ind, /* i : Vornoi Bitstream index */ - uint16_t I, /* o : rank I code book index */ - int16_t kv[], /* o : Vornoi index kv */ - int16_t *nbits /* i/o: bits */ -) -{ - int16_t pos, j; - int16_t bits; - - bits = *nbits; - - /* write codebook indices (rank I and event. Voronoi index kv) */ - if ( nq == 0 ) /* Q0 */ - { - /* nothing to write */ - } - else if ( nq < 5 ) /* Q2, Q3, Q4 */ - { - push_indice( hBstr, i_ind, I, 4 * nq ); - bits -= ( 4 * nq ); - } - else if ( nq % 2 == 0 ) /* Q4 + Voronoi extensions r=1,2,3,... */ - { - push_indice( hBstr, i_ind, I, 4 * 4 ); - bits -= 4 * 4; - pos = (int16_t) ( nq / 2 - 2 ); /* Voronoi order determination */ - for ( j = 0; j < 8; j++ ) - { - push_indice( hBstr, kv_ind, kv[j], pos ); - } - - bits -= 8 * pos; - } - else /* Q3 + Voronoi extensions r=1,2,3,... */ - { - push_indice( hBstr, i_ind, I, 4 * 3 ); - bits -= 4 * 3; - - pos = (int16_t) ( nq / 2 - 1 ); /* Voronoi order determination */ - for ( j = 0; j < 8; j++ ) - { - push_indice( hBstr, kv_ind, kv[j], pos ); - } - - bits -= 8 * pos; - } - - *nbits = bits; - return; -} -#endif diff --git a/lib_enc/bass_psfilter_enc.c b/lib_enc/bass_psfilter_enc.c index 2458a5979..8e752f0ac 100644 --- a/lib_enc/bass_psfilter_enc.c +++ b/lib_enc/bass_psfilter_enc.c @@ -40,219 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * bass_pf_enc() - * - * Low-frequency postfiltering, decoder parammeter estimation - *---------------------------------------------------------------------*/ - -float bass_pf_enc( - const float *orig, /* i : 12.8kHz original signal */ - const float *syn, /* i : 12.8kHz synthesis to postfilter */ - const float pitch_buf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ - const float gainT_sf[], /* i : Pitch gain for all subframes (gainT_sf[16]) */ - const int16_t l_frame, /* i : frame length (should be multiple of l_subfr)*/ - const int16_t l_subfr_in, /* i : sub-frame length (80/64) */ - float mem_bpf[], /* i/o: memory state [2*L_FILT16k] */ - float mem_error_bpf[], /* i/o: memory state [2*L_FILT16k] */ - int16_t *gain_factor_param, /* o : quantized gain factor */ - const int16_t mode, /* i : coding mode of adapt bpf */ - float *mem_deemph_err, /* o : Error deemphasis memory */ - float *lp_ener /* o : long_term error signal energy */ -) -{ - int16_t i, j, sf, i_subfr, T, lg, l_subfr, l_filt; - float d, n, snr, nrg1, nrg2, gain, nrg, tmp; - float noise_buf[L_FILT16k + ( 2 * L_SUBFR )], *noise, *noise_in; - float error_buf[L_FILT16k + ( 2 * L_SUBFR )], *error, *error_in; - float cross_n_d, nrg_n; - const float *pFilt; - float ener2; - - if ( l_frame != L_FRAME16k ) - { - pFilt = filt_lp; - l_filt = L_FILT; - } - else - { - pFilt = filt_lp_16kHz; - l_filt = L_FILT16k; - } - - noise = noise_buf + l_filt; - noise_in = noise_buf + 2 * l_filt; - error = error_buf + l_filt; - error_in = error_buf + 2 * l_filt; - - sf = 0; - snr = 0.f; - nrg_n = 1e-6f; - cross_n_d = 0.f; - l_subfr = l_subfr_in; - for ( i_subfr = 0; i_subfr < l_frame; i_subfr += l_subfr, sf++ ) - { - T = (int16_t) pitch_buf[sf]; - gain = gainT_sf[sf]; - - if ( gain > 1.0f ) - { - gain = 1.0f; - } - if ( gain < 0.0f ) - { - gain = 0.0f; - } - - lg = l_frame - T - i_subfr; - if ( lg < 0 ) - { - lg = 0; - } - if ( lg > l_subfr ) - { - lg = l_subfr; - } - - if ( gain > 0 ) - { - tmp = 0.01f; - nrg = 0.01f; - for ( i = 0; i < lg; i++ ) - { - tmp += syn[i + i_subfr] * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); - nrg += ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ) * ( 0.5f * syn[i + i_subfr - T] + 0.5f * syn[i + i_subfr + T] ); - } - for ( i = lg; i < l_subfr; i++ ) - { - tmp += syn[i + i_subfr] * syn[i + i_subfr - T]; - nrg += syn[i + i_subfr - T] * syn[i + i_subfr - T]; - } - gain = tmp / nrg; - - if ( gain > 1.0f ) - { - gain = 1.0f; - } - else if ( gain < 0.f ) - { - gain = 0.f; - } - - ener2 = 0.01f; - for ( i = 0; i < lg; i++ ) - { - error[i] = gain * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); - error[i] = error[i] + 0.9f * *mem_deemph_err; - *mem_deemph_err = error[i]; - ener2 += error[i] * error[i]; - } - for ( i = lg; i < l_subfr; i++ ) - { - error[i] = 0.5f * gain * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); - error[i] = error[i] + 0.9f * *mem_deemph_err; - *mem_deemph_err = error[i]; - ener2 += error[i] * error[i]; - } - - ener2 = (float) ( 10.f * log10( ener2 ) ); - *lp_ener = (float) ( 0.99f * *lp_ener + 0.01f * ener2 ); - ener2 = (float) pow( 10.f, 0.1f * *lp_ener ); - - tmp = 0.5f * tmp / ( nrg + ener2 ); - if ( tmp > 0.5f ) - { - tmp = 0.5f; - } - else if ( tmp < 0.f ) - { - tmp = 0.0f; - } - - for ( i = 0; i < lg; i++ ) - { - noise_in[i] = tmp * ( syn[i + i_subfr] - 0.5f * syn[i + i_subfr - T] - 0.5f * syn[i + i_subfr + T] ); - error_in[i] = ( orig[i + i_subfr] - syn[i + i_subfr] ); - } - for ( i = lg; i < l_subfr; i++ ) - { - noise_in[i] = tmp * ( syn[i + i_subfr] - syn[i + i_subfr - T] ); - noise_in[i] *= 0.5f; - error_in[i] = ( orig[i + i_subfr] - syn[i + i_subfr] ); - } - } - else - { - set_zero( noise_in, l_subfr ); - set_zero( error_in, l_subfr ); - } - - mvr2r( mem_bpf, noise_buf, 2 * l_filt ); - mvr2r( noise_buf + l_subfr, mem_bpf, 2 * l_filt ); - - mvr2r( mem_error_bpf, error_buf, 2 * l_filt ); - mvr2r( error_buf + l_subfr, mem_error_bpf, 2 * l_filt ); - - nrg1 = 1e-6f; - nrg2 = 1e-6f; - - /* substract from voiced speech low-pass filtered noise */ - for ( i = 0; i < l_subfr; i++ ) - { - n = pFilt[0] * noise[i]; - d = error[i]; - - for ( j = 1; j <= l_filt; j++ ) - { - n += pFilt[j] * ( noise[i - j] + noise[i + j] ); - } - /*for optimal g*/ - nrg_n += n * n; - cross_n_d += n * d; - - /*for evaluating SNR*/ - nrg1 += ( d + n ) * ( d + n ); - nrg2 += d * d; - } - - /*SegSNR*/ - snr += (float) log10( nrg2 / nrg1 ); - } - - /*Compute and quantize optimal gain*/ - /* optimal gain = -/ */ - if ( mode == 2 ) - { - int32_t gain32; - - gain32 = (int32_t) ( -2.f * ( cross_n_d / nrg_n ) + 0.5f ); - if ( gain32 > 3 ) - { - *gain_factor_param = 3; - } - else if ( gain32 < 0 ) - { - *gain_factor_param = 0; - } - else - { - *gain_factor_param = (int16_t) gain32; - } - - /*If optimal gain negatif or zero but snr still positif->gain=0.5f*/ - if ( snr > 0.f && *gain_factor_param == 0 ) - { - *gain_factor_param = 1; - } - } - else - { - *gain_factor_param = 2; - } - - - return ( snr ); -} -#endif diff --git a/lib_enc/bw_detect.c b/lib_enc/bw_detect.c index 3d1cc6e09..2cba6f328 100644 --- a/lib_enc/bw_detect.c +++ b/lib_enc/bw_detect.c @@ -62,669 +62,3 @@ #define BWD_COUNT_WIDER_BW_MDCT 0 #define CLDFB_ENER_OFFSET 1.6f - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * bw_detect() - * - * bandwidth detector - *-------------------------------------------------------------------*/ - -void bw_detect( - Encoder_State *st, /* i/o: Encoder State */ - const float signal_in[], /* i : input signal */ - float *spectrum, /* i : MDCT spectrum */ - const float *enerBuffer, /* i : energy buffer */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t mct_on /* i : flag MCT mode */ -) -{ - int16_t i, j, k, bw_max, bin_width, n_bins; - float spect[L_FRAME48k], in_win[BWD_TOTAL_WIDTH]; - float spect_bin[BWD_N_BINS_MAX]; - float cldfb_bin[9]; - const float *pt, *pt1; - float max_NB, max_WB, max_SWB, max_FB, mean_NB, mean_WB, mean_SWB, mean_FB; - int16_t cldfb_bin_width = 4; - int16_t bwd_count_wider_bw, l_frame; - - bwd_count_wider_bw = BWD_COUNT_WIDER_BW; - if ( st->ini_frame > 0 && ( ( st->element_mode == IVAS_CPE_MDCT && ( st->element_brate >= BWD_MIN_BRATE_WIDER_BW_MDCT || mct_on ) ) || - ( ivas_format == ISM_FORMAT && st->element_brate >= BWD_MIN_BRATE_WIDER_BW_ISM ) ) ) - { - bwd_count_wider_bw = BWD_COUNT_WIDER_BW_MDCT; - } - - if ( st->input_Fs > 8000 ) - { - if ( enerBuffer != NULL ) - { - float ScalFac; - - ScalFac = 1 / ( st->cldfbAnaEnc->scale_flt * st->cldfbAnaEnc->scale_flt * 8.f ); - set_f( cldfb_bin, 0.001f, 9 ); - - /* NB: 1.2 - 2.8 kHz, 4 cldfb-bands*/ - cldfb_bin[0] += sum_f( &( enerBuffer[3] ), cldfb_bin_width ); - - /* WB: 4.4 - 7.2 kHz, 8 cldfb-bands, mid band(14) counted twice */ - if ( st->input_Fs >= 16000 ) - { - cldfb_bin[1] += sum_f( &( enerBuffer[11] ), cldfb_bin_width ); - cldfb_bin[2] += sum_f( &( enerBuffer[14] ), cldfb_bin_width ); - } - - /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands */ - if ( st->input_Fs >= 32000 ) - { - cldfb_bin[3] += sum_f( &( enerBuffer[23] ), cldfb_bin_width ); - cldfb_bin[4] += sum_f( &( enerBuffer[27] ), cldfb_bin_width ); - cldfb_bin[5] += sum_f( &( enerBuffer[31] ), cldfb_bin_width ); - cldfb_bin[6] += sum_f( &( enerBuffer[35] ), cldfb_bin_width ); - } - - /* FB: 16.8 - 20.0 kHz, 8 cldfb-bands */ - if ( st->input_Fs >= 48000 ) - { - cldfb_bin[7] += sum_f( &( enerBuffer[42] ), cldfb_bin_width ); - cldfb_bin[8] += sum_f( &( enerBuffer[46] ), cldfb_bin_width ); - } - - for ( i = 0; i < 9; i++ ) - { - cldfb_bin[i] = (float) log10( cldfb_bin[i] * ScalFac ); /* see formula used in perform_noise_estimation_enc() for CNG */ - } - } - else - { - /* set width of a speactral bin (corresponds to 1.5kHz) */ - if ( st->input_Fs == 16000 ) - { - bw_max = WB; - bin_width = 60; - n_bins = 5; /* spectrum to 7.5 kHz */ - } - else if ( st->input_Fs == 32000 ) - { - bw_max = SWB; - bin_width = 30; - n_bins = 10; /* spectrum to 15 kHz */ - } - else /* st->input_Fs == 48000 */ - { - bw_max = FB; - bin_width = 20; - n_bins = BWD_N_BINS_MAX; /* spectrum to 19.5 kHz */ - } - - if ( signal_in != NULL ) - { - /*---------------------------------------------------------------------* - * windowing of the input signal - *---------------------------------------------------------------------*/ - - pt = signal_in; - pt1 = hann_window_320; - - /* 1st half of the window */ - for ( i = 0; i < BWD_TOTAL_WIDTH / 2; i++ ) - { - in_win[i] = *pt++ * *pt1++; - } - pt1--; - - /* 2nd half of the window */ - for ( ; i < BWD_TOTAL_WIDTH; i++ ) - { - in_win[i] = *pt++ * *pt1--; - } - - /*---------------------------------------------------------------------* - * tranform into frequency domain - *---------------------------------------------------------------------*/ - - edct( in_win, spect, BWD_TOTAL_WIDTH, st->element_mode ); - } - else - { - l_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); - if ( st->core == TCX_10_CORE ) - { - l_frame /= 2; - } - - bin_width *= ( l_frame / BWD_TOTAL_WIDTH ); - mvr2r( spectrum, spect, l_frame ); - } - /*---------------------------------------------------------------------* - * compute energy per spectral bins - *---------------------------------------------------------------------*/ - - set_f( spect_bin, 0.001f, n_bins ); - - for ( k = 0; k <= bw_max; k++ ) - { - for ( i = bwd_start_bin[k]; i <= bwd_end_bin[k]; i++ ) - { - for ( j = 0; j < bin_width; j++ ) - { - spect_bin[i] += spect[i * bin_width + j] * spect[i * bin_width + j]; - } - spect_bin[i] = (float) log10( spect_bin[i] ); - } - } - } - - if ( enerBuffer != NULL ) - { - /* cldfb detections */ - mean_NB = mean( cldfb_bin, 1 ); /* NB: 1.2 - 2.8 kHz, 4 cldfb-bands (1 bin) */ - maximum( cldfb_bin, 1, &max_NB ); - mean_WB = mean( cldfb_bin + 1, 2 ); /* WB: 4.4 - 7.2 kHz, 8 cldfb-bands (2 bins) */ - maximum( cldfb_bin + 1, 2, &max_WB ); - - mean_NB += CLDFB_ENER_OFFSET; - max_NB += CLDFB_ENER_OFFSET; - mean_WB += CLDFB_ENER_OFFSET; - max_WB += CLDFB_ENER_OFFSET; - - if ( st->input_Fs == 16000 ) - { - /* for 16kHz sampled inputs, do not check SWB & FB */ - mean_SWB = 0.0f; - max_SWB = 0.0f; - mean_FB = 0.0f; - max_FB = 0.0f; - } - else if ( st->input_Fs == 32000 ) - { - /* for 32kHz sampled inputs, do not check FB */ - mean_FB = 0.0f; - max_FB = 0.0f; - mean_SWB = mean( cldfb_bin + 3, 4 ); /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands (4 bins) */ - maximum( cldfb_bin + 3, 4, &max_SWB ); - mean_SWB += CLDFB_ENER_OFFSET; - max_SWB += CLDFB_ENER_OFFSET; - } - else - { - mean_SWB = mean( cldfb_bin + 3, 4 ); /* SWB: 9.2 - 15.6 kHz, 16 cldfb-bands (4 bins) */ - maximum( cldfb_bin + 3, 4, &max_SWB ); - mean_FB = mean( cldfb_bin + 7, 2 ); /* FB: 16.8 - 20.0 kHz, 8 cldfb-bands (2 bins) */ - maximum( cldfb_bin + 7, 2, &max_FB ); - - mean_SWB += CLDFB_ENER_OFFSET; - max_SWB += CLDFB_ENER_OFFSET; - mean_FB += CLDFB_ENER_OFFSET; - max_FB += CLDFB_ENER_OFFSET; - } - } - else - { - mean_NB = mean( spect_bin + bwd_start_bin[0], bwd_end_bin[0] - bwd_start_bin[0] + 1 ); /* NB: 1.5-3.0kHz (1 bin) */ - maximum( spect_bin + bwd_start_bin[0], bwd_end_bin[0] - bwd_start_bin[0] + 1, &max_NB ); - mean_WB = mean( spect_bin + bwd_start_bin[1], bwd_end_bin[1] - bwd_start_bin[1] + 1 ); /* WB: 4.5-7.5kHz (2 bins) */ - maximum( spect_bin + bwd_start_bin[1], bwd_end_bin[1] - bwd_start_bin[1] + 1, &max_WB ); - - if ( st->input_Fs == 16000 ) - { - /* for 16kHz sampled inputs, do not check SWB & FB */ - mean_SWB = 0.0f; - max_SWB = 0.0f; - mean_FB = 0.0f; - max_FB = 0.0f; - } - else if ( st->input_Fs == 32000 ) - { - mean_SWB = mean( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1 ); /* SWB: 9.0-15.0kHz (4 bins) */ - maximum( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1, &max_SWB ); - - /* for 32kHz sampled inputs, do not check FB */ - mean_FB = 0.0f; - max_FB = 0.0f; - } - else - { - mean_SWB = mean( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1 ); /* SWB: 9.0-15.0kHz (4 bins) */ - maximum( spect_bin + bwd_start_bin[2], bwd_end_bin[2] - bwd_start_bin[2] + 1, &max_SWB ); - mean_FB = mean( spect_bin + bwd_start_bin[3], bwd_end_bin[3] - bwd_start_bin[3] + 1 ); /* FB: 16.5-19.5kHz (2 bins) */ - maximum( spect_bin + bwd_start_bin[3], bwd_end_bin[3] - bwd_start_bin[3] + 1, &max_FB ); - } - } - - /*---------------------------------------------------------------------* - * update LT counters and energies - *---------------------------------------------------------------------*/ - - if ( st->localVAD || st->lp_noise > 30 ) - { - st->lt_mean_NB = ALPHA_BWD * st->lt_mean_NB + ( 1 - ALPHA_BWD ) * mean_NB; - st->lt_mean_WB = ALPHA_BWD * st->lt_mean_WB + ( 1 - ALPHA_BWD ) * mean_WB; - st->lt_mean_SWB = ALPHA_BWD * st->lt_mean_SWB + ( 1 - ALPHA_BWD ) * mean_SWB; - - if ( enerBuffer != NULL ) - { - if ( 0.9f * max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 2.5f * max_WB > max_NB ) - { - st->count_WB++; - } - } - else - { - if ( 3.5f * mean_WB < mean_NB ) - { - st->count_WB--; - } - } - - if ( 0.83f * max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 2 * max_SWB > max_WB ) - { - st->count_SWB++; - } - } - else - { - if ( 3 * mean_SWB < mean_WB ) - { - st->count_SWB--; - } - } - - if ( max_FB > BWD_LT_THRESH * st->lt_mean_SWB && 0.83f * max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 3 * max_FB > max_SWB ) - { - st->count_FB++; - } - } - else - { - if ( 4.1f * mean_FB < mean_SWB ) - { - st->count_FB--; - } - } - } - else - { - if ( max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 2 * max_WB > max_NB ) - { - st->count_WB++; - } - } - else - { - if ( 2.6f * mean_WB < mean_NB ) - { - st->count_WB--; - } - } - - if ( max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 2 * max_SWB > max_WB ) - { - st->count_SWB++; - } - } - else - { - if ( 3 * mean_SWB < mean_WB ) - { - st->count_SWB--; - } - } - - if ( max_FB > BWD_LT_THRESH * st->lt_mean_SWB && max_SWB > BWD_LT_THRESH * st->lt_mean_WB && max_WB > BWD_LT_THRESH * st->lt_mean_NB ) - { - if ( 2 * max_FB > max_SWB ) - { - st->count_FB++; - } - } - else - { - if ( 3 * mean_FB < mean_SWB ) - { - st->count_FB--; - } - } - } - - st->count_WB = min( st->count_WB, BWD_COUNT_MAX ); - st->count_SWB = min( st->count_SWB, BWD_COUNT_MAX ); - st->count_FB = min( st->count_FB, BWD_COUNT_MAX ); - st->count_WB = max( st->count_WB, 0 ); - st->count_SWB = max( st->count_SWB, 0 ); - st->count_FB = max( st->count_FB, 0 ); - - /*---------------------------------------------------------------------* - * check against thresholds - * detect a band-width change - *---------------------------------------------------------------------*/ - - /* switching to a higher BW */ - if ( st->last_input_bwidth == NB ) - { - if ( st->count_WB > bwd_count_wider_bw ) - { - st->input_bwidth = WB; - st->count_WB = BWD_COUNT_MAX; - - if ( st->count_SWB > bwd_count_wider_bw ) - { - st->input_bwidth = SWB; - st->count_SWB = BWD_COUNT_MAX; - - if ( st->count_FB > bwd_count_wider_bw ) - { - st->input_bwidth = FB; - st->count_FB = BWD_COUNT_MAX; - } - } - } - } - - if ( st->last_input_bwidth == WB && st->input_Fs > 16000 ) - { - if ( st->count_SWB > bwd_count_wider_bw ) - { - st->input_bwidth = SWB; - st->count_SWB = BWD_COUNT_MAX; - - if ( st->count_FB > bwd_count_wider_bw ) - { - st->input_bwidth = FB; - st->count_FB = BWD_COUNT_MAX; - } - } - } - - if ( st->last_input_bwidth == SWB && st->input_Fs > 32000 ) - { - if ( st->count_FB > bwd_count_wider_bw ) - { - st->input_bwidth = FB; - st->count_FB = BWD_COUNT_MAX; - } - } - - /* switching to a lower BW */ - if ( st->last_input_bwidth == FB ) - { - if ( st->count_FB < 10 ) - { - st->input_bwidth = SWB; - st->count_FB = 0; - } - if ( st->count_SWB < 10 ) - { - st->input_bwidth = WB; - st->count_SWB = 0; - st->count_FB = 0; - } - if ( st->count_WB < 10 ) - { - st->input_bwidth = NB; - st->count_WB = 0; - st->count_SWB = 0; - st->count_FB = 0; - } - } - - if ( st->last_input_bwidth == SWB ) - { - if ( st->count_SWB < 10 ) - { - st->input_bwidth = WB; - st->count_SWB = 0; - st->count_FB = 0; - } - if ( st->count_WB < 10 ) - { - st->input_bwidth = NB; - st->count_WB = 0; - st->count_SWB = 0; - st->count_FB = 0; - } - } - - if ( st->last_input_bwidth == WB ) - { - if ( st->count_WB < 10 ) - { - st->input_bwidth = NB; - st->count_WB = 0; - st->count_SWB = 0; - st->count_FB = 0; - } - } - } - } - - /* verify that maximum encoded bandwidth (specified on the command line) is not exceeded */ - if ( st->input_bwidth > st->max_bwidth ) - { - st->input_bwidth = st->max_bwidth; - } - - if ( st->element_mode == EVS_MONO ) - { - set_bw( -1, -1, st, st->codec_mode ); - } - - return; -} - -/*-------------------------------------------------------------------* - * set_bw() - * - * Set and limit the encoded bandwidth - *-------------------------------------------------------------------*/ - -void set_bw( - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - Encoder_State *st, /* i/o: Encoder State */ - const int16_t codec_mode /* i : codec mode */ -) -{ - /* initialization */ - st->bwidth = st->input_bwidth; - - if ( codec_mode == MODE1 ) - { - int32_t total_brate; - - st->bwidth = st->input_bwidth; - total_brate = st->total_brate; - - if ( element_mode > IVAS_SCE ) - { - if ( element_brate < MIN_BRATE_SWB_STEREO ) - { - st->bwidth = WB; - } - else - { - if ( st->idchan == 0 || element_mode == IVAS_CPE_MDCT ) - { - if ( element_brate >= MIN_BRATE_FB_STEREO ) - { - st->bwidth = min( st->bwidth, FB ); - } - else - { - st->bwidth = min( st->bwidth, SWB ); - } - st->bwidth = max( st->bwidth, WB ); - } - else - { - st->bwidth = WB; - } - } - } - else if ( element_mode == IVAS_SCE ) - { - if ( element_brate < MIN_BRATE_SWB_SCE || st->bwidth < WB ) - { - st->bwidth = WB; - } - else if ( st->bwidth > SWB && ( ( element_brate < MIN_BRATE_FB_STEREO && !st->is_ism_format ) || - ( element_brate < MIN_BRATE_FB_ISM && st->is_ism_format ) ) ) - { - st->bwidth = SWB; - } - else if ( element_brate > BWD_MAX_BRATE_WIDER_BW_ISM ) - { - st->bwidth = st->max_bwidth; - } - } - /* element_mode == EVS_MONO */ - else if ( total_brate <= ACELP_9k60 && st->bwidth > WB ) - { - st->bwidth = WB; - } - else if ( total_brate >= ACELP_13k20 && total_brate <= ACELP_16k40 && st->bwidth > SWB ) - { - st->bwidth = SWB; - } - else if ( total_brate >= ACELP_32k && st->bwidth < WB ) - { - st->bwidth = WB; - } - } - else if ( codec_mode == MODE2 ) - { - int16_t n, bits_frame_nominal, tmpBandwidthMin; - - bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == bits_frame_nominal ) - { - break; - } - } - if ( n == FRAME_SIZE_NB ) - { - assert( !"Bitrate not supported: not part of EVS" ); - } - - tmpBandwidthMin = FrameSizeConfig[n].bandwidth_min; - - if ( st->rf_mode ) - { - tmpBandwidthMin = WB; - } - - st->bwidth = max( min( st->input_bwidth, FrameSizeConfig[n].bandwidth_max ), tmpBandwidthMin ); - } - - return; -} - -/*-------------------------------------------------------------------* - * set_bw_stereo() - * - * Set encoded bandwidth for stereo (CPE) channels - *-------------------------------------------------------------------*/ - -void set_bw_stereo( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structures */ -) -{ - Encoder_State **sts = hCPE->hCoreCoder; - - if ( hCPE->element_brate > BWD_MAX_BRATE_WIDER_BW_MDCT ) - { - sts[0]->bwidth = sts[0]->max_bwidth; - sts[1]->bwidth = sts[1]->max_bwidth; - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - /* ensure that both CPE channels have the same audio band-width */ - if ( sts[0]->input_bwidth == sts[1]->input_bwidth ) - { - sts[0]->bwidth = sts[0]->input_bwidth; - sts[1]->bwidth = sts[0]->input_bwidth; - } - else - { - sts[0]->bwidth = max( sts[0]->input_bwidth, sts[1]->input_bwidth ); - sts[1]->bwidth = max( sts[0]->input_bwidth, sts[1]->input_bwidth ); - } - } - - sts[0]->bwidth = max( sts[0]->bwidth, WB ); - sts[1]->bwidth = max( sts[1]->bwidth, WB ); - - return; -} - -/*-------------------------------------------------------------------* - * set_bw_mct() - * - * Set encoded bandwidth for MCT - *-------------------------------------------------------------------*/ - -/*! r: flag indicating whether the coded BW has changed */ -int16_t set_bw_mct( - CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ - const int16_t nCPE /* i : number of CPEs */ -) -{ - Encoder_State *st; - int16_t ch, cpe_id; - int16_t mct_bwidth, last_mct_bwidth, bw_changed; - - mct_bwidth = WB; /* minimum coded audio band-width */ - last_mct_bwidth = hCPE[0]->hCoreCoder[0]->last_bwidth; /* supposes that LFE is not in the first channel */ - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = hCPE[cpe_id]->hCoreCoder[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - mct_bwidth = max( mct_bwidth, st->input_bwidth ); - } - } - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - if ( hCPE[cpe_id]->element_brate > BWD_MAX_BRATE_WIDER_BW_MDCT ) - { - mct_bwidth = max( mct_bwidth, hCPE[cpe_id]->hCoreCoder[0]->max_bwidth ); - } - } - - bw_changed = 0; - if ( mct_bwidth != last_mct_bwidth ) - { - bw_changed = 1; - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = hCPE[cpe_id]->hCoreCoder[ch]; - st->bwidth = mct_bwidth; - } - } - } - - return bw_changed; -} -#endif diff --git a/lib_enc/cng_enc.c b/lib_enc/cng_enc.c index 2c1fbc639..dde1a574a 100644 --- a/lib_enc/cng_enc.c +++ b/lib_enc/cng_enc.c @@ -43,872 +43,26 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif - -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define MAX_DELTA_CNG 1 -#define ENER_MID_DEAD_ZONE 0.01 /* dead-zone width around mid points between quantization levels */ - -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static int16_t shb_DTX( Encoder_State *st, const float *shb_speech, const float *syn_12k8_16k ); - -static void shb_CNG_encod( Encoder_State *st, const int16_t update ); -#else -static Word16 shb_DTX_ivas_fx( Encoder_State *st, const Word16 *shb_speech_fx, const Word16 *syn_12k8_16k_fx ); - -static void shb_CNG_encod_ivas_fx( Encoder_State *st, const Word16 update ); -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * CNG_enc() - * - * Confort noise generation for the coder - *---------------------------------------------------------------------*/ - -void CNG_enc( - Encoder_State *st, /* i/o: State structure */ - float Aq[], /* o : LP coefficients */ - const float *speech, /* i : pointer to current frame input speech buffer */ - float enr, /* i : residual energy from Levinson-Durbin */ - const float *lsp_mid, /* i : mid frame LSPs */ - float *lsp_new, /* i/o: current frame ISPs */ - float *lsf_new, /* i/o: current frame ISFs */ - int16_t *allow_cn_step, /* o : allow CN step */ - float *q_env, - int16_t *sid_bw ) -{ - int16_t enr_index, i; - float step, res[L_FRAME16k]; - int16_t maxl, num_bits; - int16_t j, k, ptr; - int16_t m1; - float weights; - float sp_enr; - int16_t m = 0; - float tmp[HO_HIST_SIZE * M]; - int16_t ll, s_ptr; - float att = 1.0f; - float lsf_tmp[M]; - float C[M]; - float max_val[2]; - int16_t max_idx[2]; - float ftmp; - float lsp_tmp[M]; - float dev; - float max_dev; - float dist; - int16_t max_idx1[2] = { 0, 0 }; - float fft_io[L_FRAME16k]; - float *ptR, *ptI; - float enr1 = 0; - float env[NUM_ENV_CNG]; - float min1; - int16_t min1_idx; - float d; - float res1[L_FRAME16k]; - float tmp_env[HO_HIST_SIZE * NUM_ENV_CNG]; - int16_t force_cn_step = 0; - - float st_lp_sp_enr; - - float lp_ener_thr_scale; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; - DTX_ENC_HANDLE hDtxEnc = st->hDtxEnc; - - st_lp_sp_enr = hTdCngEnc->lp_sp_enr; - - lp_ener_thr_scale = 4.0f; - if ( st->element_mode != EVS_MONO ) - { - lp_ener_thr_scale = 3.5f; - } - - /* calculate input energy */ - sp_enr = (float) log10( sum2_f( speech, st->L_frame ) / st->L_frame + 0.1f ) / (float) log10( 2.0f ); - - if ( sp_enr < 0.0f ) - { - sp_enr = 0.0f; - } - - if ( hDtxEnc->first_CNG == 0 || hTdCngEnc->old_enr_index < 0 ) - { - hTdCngEnc->lp_sp_enr = sp_enr; - } - else - { - if ( st->last_core_brate > SID_2k40 && ( st->last_core == HQ_CORE || st->hTdCngEnc->burst_ho_cnt > 0 ) && hTdCngEnc->lp_sp_enr < 6.0f && ( sp_enr - hTdCngEnc->lp_sp_enr ) > 4.0f && sp_enr > 6.0f ) - { - hTdCngEnc->lp_sp_enr = sp_enr; - force_cn_step = 1; - } - else - { - hTdCngEnc->lp_sp_enr = 0.1f * sp_enr + 0.9f * hTdCngEnc->lp_sp_enr; - } - } - - /* update the pointer to circular buffer of old LSP vectors */ - if ( ++( hTdCngEnc->cng_hist_ptr ) == DTX_HIST_SIZE ) - { - hTdCngEnc->cng_hist_ptr = 0; - } - - /* update the circular buffer of old LSP vectors with the new LSP vector */ - mvr2r( lsp_new, &( hTdCngEnc->cng_lsp_hist[( hTdCngEnc->cng_hist_ptr ) * M] ), M ); - - /*-----------------------------------------------------------------* - * Find CNG spectral envelope - * Find LSP median - *-----------------------------------------------------------------*/ - - if ( ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) && hDtxEnc->cng_cnt >= ( hDtxEnc->cng_hist_size - 1 ) ) - { - set_f( max_val, 0.0f, 2 ); - set_s( max_idx, 0, 2 ); - - for ( i = 0; i < hDtxEnc->cng_hist_size; i++ ) - { - if ( st->L_frame == L_FRAME ) - { - lsp2lsf( &hTdCngEnc->cng_lsp_hist[i * M], lsf_tmp, M, INT_FS_12k8 ); - ftmp = 6400.0f / ( M + 1 ); - C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); - } - else - { - lsp2lsf( &hTdCngEnc->cng_lsp_hist[i * M], lsf_tmp, M, INT_FS_16k ); - ftmp = 8000.0f / ( M + 1 ); - C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); - } - - C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); - - for ( j = 0; j < M - 1; j++ ) - { - C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); - } - - C[i] *= 0.0588235f; /* 1/M+1 */ - - if ( C[i] > max_val[0] ) - { - max_val[1] = max_val[0]; - max_idx[1] = max_idx[0]; - max_val[0] = C[i]; - max_idx[0] = i; - } - else if ( C[i] > max_val[1] ) - { - max_val[1] = C[i]; - max_idx[1] = i; - } - } - - for ( i = 0; i < M; i++ ) - { - lsp_new[i] = 0.0f; - for ( j = 0; j < hDtxEnc->cng_hist_size; j++ ) - { - lsp_new[i] += hTdCngEnc->cng_lsp_hist[j * M + i]; - } - - lsp_new[i] -= ( hTdCngEnc->cng_lsp_hist[max_idx[0] * M + i] + hTdCngEnc->cng_lsp_hist[max_idx[1] * M + i] ); - lsp_new[i] /= (float) ( hDtxEnc->cng_hist_size - 2 ); - } - max_idx1[0] = max_idx[0]; - max_idx1[1] = max_idx[1]; - } - - /*-----------------------------------------------------------------* - * Quantize CNG spectral envelope (only in SID frame) - * Quantize the LSF vector - *-----------------------------------------------------------------*/ - - - *allow_cn_step = ( ( hDtxEnc->cng_cnt == 0 ) && - ( hTdCngEnc->lp_sp_enr > 6.0f ) && - ( ( st_lp_sp_enr + 4.0f ) < sp_enr ) && - ( hDtxEnc->first_CNG != 0 ) && - ( hTdCngEnc->old_enr_index >= 0 ) && - ( st->last_core_brate > SID_2k40 ) ) || - force_cn_step; - - /* Initialize the CNG spectral envelope in case of the very first CNG frame */ - if ( hDtxEnc->first_CNG == 0 ) - { - mvr2r( st->lsp_old, hDtxEnc->lspCNG, M ); - - /* Average the CNG spectral envelope in case of the very first CNG frame */ - if ( st->element_mode != EVS_MONO ) - { - for ( i = 0; i < M; i++ ) - { - lsp_new[i] = 0.5f * ( lsp_mid[i] + lsp_new[i] ); - } - } - } - - if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) - { - /* LSF quantization */ - if ( st->Opt_AMR_WB ) - { - isf_enc_amr_wb( st, lsf_new, lsp_new, 0 ); - } - else - { - lsf_enc( st, lsf_new, lsp_new, 0, 0, 0, 0, NULL ); - } - - /* Reset CNG history if CNG frame length is changed */ - if ( st->bwidth == WB && hDtxEnc->first_CNG && st->L_frame != hDtxEnc->last_CNG_L_frame ) - { - hTdCngEnc->ho_hist_size = 0; - } - } - else - { - /* Use old LSP vector */ - mvr2r( st->lsp_old, lsp_new, M ); - mvr2r( st->lsf_old, lsf_new, M ); - } - - - /*---------------------------------------------------------------------* - * CNG spectral envelope update - * Find A(z) coefficients - *---------------------------------------------------------------------*/ - - if ( st->last_core_brate == FRAME_NO_DATA || st->last_core_brate == SID_1k75 || st->last_core_brate == SID_2k40 ) - { - /* Reset hangover counter if not first SID period */ - if ( st->core_brate > FRAME_NO_DATA ) - { - hTdCngEnc->num_ho = 0; - } - /* Update LSPs if last SID energy not outlier or insufficient number of hangover frames */ - if ( hTdCngEnc->num_ho < 3 || hTdCngEnc->Enew < 1.5f * hTdCngEnc->lp_ener ) - { - for ( i = 0; i < M; i++ ) - { - /* AR low-pass filter */ - hDtxEnc->lspCNG[i] = CNG_ISF_FACT * hDtxEnc->lspCNG[i] + ( 1 - CNG_ISF_FACT ) * lsp_new[i]; - } - } - } - else - { - /* Update CNG_mode if allowed */ - if ( st->element_mode == EVS_MONO && ( st->Opt_AMR_WB || st->bwidth == WB ) && ( !hDtxEnc->first_CNG || hTdCngEnc->act_cnt2 >= MIN_ACT_CNG_UPD ) ) - { - if ( hDtxEnc->last_active_brate > ACELP_16k40 ) - { - hDtxEnc->CNG_mode = -1; - } - else - { - hDtxEnc->CNG_mode = get_cng_mode_ivas( hDtxEnc->last_active_brate ); - } - } - - /* If first SID after active burst update LSF history from circ buffer */ - hTdCngEnc->burst_ho_cnt = min( hTdCngEnc->burst_ho_cnt, hTdCngEnc->ho_circ_size ); - hTdCngEnc->act_cnt = 0; - s_ptr = hTdCngEnc->ho_circ_ptr - hTdCngEnc->burst_ho_cnt + 1; - if ( s_ptr < 0 ) - { - s_ptr += hTdCngEnc->ho_circ_size; - } - - for ( ll = hTdCngEnc->burst_ho_cnt; ll > 0; ll-- ) - { - if ( ++( hTdCngEnc->ho_hist_ptr ) == HO_HIST_SIZE ) - { - hTdCngEnc->ho_hist_ptr = 0; - } - /* Conversion between 12.8k and 16k LSPs */ - if ( st->L_frame == L_FRAME && hTdCngEnc->ho_16k_lsp[s_ptr] == 1 ) - { - /* Conversion from 16k LPSs to 12k8 */ - lsp_convert_poly( &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), st->L_frame, 0 ); - } - else if ( st->L_frame == L_FRAME16k && hTdCngEnc->ho_16k_lsp[s_ptr] == 0 ) - { - /* 16k LSPs already converted and stored, just copy to the other buffer */ - mvr2r( &( hTdCngEnc->ho_lsp_circ2[s_ptr * M] ), &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), M ); - } - - /* update circular buffers */ - mvr2r( &( hTdCngEnc->ho_lsp_circ[s_ptr * M] ), &( hTdCngEnc->ho_lsp_hist[hTdCngEnc->ho_hist_ptr * M] ), M ); - mvr2r( &( hTdCngEnc->ho_ener_circ[s_ptr] ), &( hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] ), 1 ); - hTdCngEnc->ho_sid_bw = ( hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; - mvr2r( &( hTdCngEnc->ho_env_circ[s_ptr * NUM_ENV_CNG] ), &( hTdCngEnc->ho_env_hist[hTdCngEnc->ho_hist_ptr * NUM_ENV_CNG] ), NUM_ENV_CNG ); - - hTdCngEnc->ho_hist_size++; - if ( hTdCngEnc->ho_hist_size > HO_HIST_SIZE ) - { - hTdCngEnc->ho_hist_size = HO_HIST_SIZE; - } - - s_ptr++; - - if ( s_ptr == hTdCngEnc->ho_circ_size ) - { - s_ptr = 0; - } - } - if ( st->hTdCngEnc->burst_ho_cnt > 0 ) - { - *allow_cn_step |= ( hDtxEnc->first_CNG || st->element_mode == EVS_MONO ) && ( hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] > lp_ener_thr_scale * hTdCngEnc->lp_ener ); - } - - if ( !*allow_cn_step && hTdCngEnc->ho_hist_size > 0 ) - { - ptr = hTdCngEnc->ho_hist_ptr; - mvr2r( &( hTdCngEnc->ho_lsp_hist[ptr * M] ), tmp, M ); - m1 = 0; - if ( ( hTdCngEnc->ho_sid_bw & 0x1L ) == 0 ) - { - mvr2r( &hTdCngEnc->ho_env_hist[ptr * NUM_ENV_CNG], tmp_env, NUM_ENV_CNG ); - m1 = 1; - } - enr = W_DTX_HO[0] * hTdCngEnc->ho_ener_hist[ptr]; - weights = W_DTX_HO[0]; - m = 1; - for ( k = 1; k < hTdCngEnc->ho_hist_size; k++ ) - { - ptr--; - if ( ptr < 0 ) - { - ptr = HO_HIST_SIZE - 1; - } - - if ( hTdCngEnc->ho_ener_hist[ptr] < hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] * BUF_H_NRG && - hTdCngEnc->ho_ener_hist[ptr] > hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] * BUF_L_NRG ) - { - enr += W_DTX_HO[k] * hTdCngEnc->ho_ener_hist[ptr]; - weights += W_DTX_HO[k]; - mvr2r( &hTdCngEnc->ho_lsp_hist[ptr * M], &tmp[m * M], M ); - if ( ( hTdCngEnc->ho_sid_bw & ( 0x1L << k ) ) == 0 ) - { - mvr2r( &hTdCngEnc->ho_env_hist[ptr * NUM_ENV_CNG], &tmp_env[m1 * NUM_ENV_CNG], NUM_ENV_CNG ); - m1++; - } - m++; - } - } - - enr /= weights; - hTdCngEnc->lp_ener = enr; - - set_f( max_val, 0.0f, 2 ); - set_s( max_idx, 0, 2 ); - - for ( i = 0; i < m; i++ ) - { - if ( st->L_frame == L_FRAME ) - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); - ftmp = 6400.0f / ( M + 1 ); - C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); - } - else - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); - ftmp = 8000.0f / ( M + 1 ); - C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); - } - - C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); - - for ( j = 0; j < M - 1; j++ ) - { - C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); - } - - C[i] *= 0.0588235f; /* 1/M+1 */ - - if ( C[i] > max_val[0] ) - { - max_val[1] = max_val[0]; - max_idx[1] = max_idx[0]; - max_val[0] = C[i]; - max_idx[0] = i; - } - else if ( C[i] > max_val[1] ) - { - max_val[1] = C[i]; - max_idx[1] = i; - } - } - - if ( m == 1 ) - { - mvr2r( tmp, lsp_tmp, M ); - } - else if ( m < 4 ) - { - for ( i = 0; i < M; i++ ) - { - lsp_tmp[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_tmp[i] += tmp[j * M + i]; - } - - lsp_tmp[i] -= tmp[max_idx[0] * M + i]; - lsp_tmp[i] /= (float) ( m - 1 ); - } - } - else - { - for ( i = 0; i < M; i++ ) - { - lsp_tmp[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_tmp[i] += tmp[j * M + i]; - } - - lsp_tmp[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); - lsp_tmp[i] /= (float) ( m - 2 ); - } - } - - dist = 0.0f; - max_dev = 0.0f; - for ( i = 0; i < M; i++ ) - { - dev = (float) fabs( lsp_tmp[i] - lsp_new[i] ); - dist += dev; - if ( dev > max_dev ) - { - max_dev = dev; - } - } - - if ( dist > 0.4f || max_dev > 0.1f ) - { - for ( i = 0; i < M; i++ ) - { - hDtxEnc->lspCNG[i] = lsp_tmp[i]; - } - } - else - { - for ( i = 0; i < M; i++ ) - { - /* AR low-pass filter */ - hDtxEnc->lspCNG[i] = 0.8f * lsp_tmp[i] + ( 1 - 0.8f ) * lsp_new[i]; - } - } - if ( m1 > 0 ) - { - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] = 0; - for ( j = 0; j < m1; j++ ) - { - env[i] += tmp_env[j * NUM_ENV_CNG + i]; - } - - env[i] /= (float) m1; - env[i] = env[i] - 2 * hTdCngEnc->lp_ener; - } - mvr2r( env, hTdCngEnc->lp_env, NUM_ENV_CNG ); - } - } - else - { - mvr2r( lsp_new, hDtxEnc->lspCNG, M ); /* use newly analyzed parameters */ - } - } - - if ( st->Opt_AMR_WB ) - { - isp2a( hDtxEnc->lspCNG, Aq, M ); - } - else - { - lsp2a_stab( hDtxEnc->lspCNG, Aq, M ); - } - - for ( i = 1; i < st->L_frame / L_SUBFR; i++ ) - { - mvr2r( Aq, &Aq[i * ( M + 1 )], M + 1 ); - } - - /*-----------------------------------------------------------------* - * Find residual signal - * Calculate residual signal energy per sample - *-----------------------------------------------------------------*/ - - /* calculate the residual signal */ - residu( Aq, M, speech, res, st->L_frame ); - - mvr2r( res, res1, st->L_frame ); - - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - att = powf( 10.0f, hTdCngEnc->CNG_att / 20.0f ); - v_multc( res1, att, res1, st->L_frame ); - } - else if ( st->bwidth != NB ) - { - if ( st->bwidth == WB && hDtxEnc->CNG_mode >= 0 ) - { - ftmp = HO_ATT[hDtxEnc->CNG_mode]; - } - else - { - ftmp = 0.6f; - } - - att = ftmp / 6.0f; - att = 1.0f / ( 1 + att * 8 ); - - if ( att < ftmp ) - { - att = ftmp; - } - - v_multc( res1, att, res1, st->L_frame ); - } - - /* calculate the spectrum of residual signal */ - mvr2r( res1, fft_io, st->L_frame ); - - if ( st->L_frame == L_FRAME16k ) - { - modify_Fs( fft_io, L_FRAME16k, 16000, fft_io, 12800, hTdCngEnc->exc_mem2, 0 ); - } - - fft_rel( fft_io, L_FFT, LOG2_L_FFT ); - ptR = &fft_io[1]; - ptI = &fft_io[L_FFT - 1]; - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] = 2.0f * ( *ptR * *ptR + *ptI * *ptI ) / L_FFT; - ptR++; - ptI--; - } - - mvr2r( env, &( hTdCngEnc->cng_res_env[( hTdCngEnc->cng_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); - /* calculate the residual signal energy */ - enr = dotp( res, res, st->L_frame ) / st->L_frame; - - /* convert log2 of residual signal energy */ - enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); - - /* update the circular buffer of old energies */ - hTdCngEnc->cng_ener_hist[hTdCngEnc->cng_hist_ptr] = enr; - - /*-----------------------------------------------------------------* - * Quantize residual signal energy (only in SID frame) - *-----------------------------------------------------------------*/ - - if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) - { - if ( hDtxEnc->cng_cnt >= hDtxEnc->cng_hist_size - 1 ) - { - /* average the envelope except outliers */ - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - for ( j = 0; j < hDtxEnc->cng_hist_size; j++ ) - { - env[i] += hTdCngEnc->cng_res_env[j * NUM_ENV_CNG + i]; - } - - env[i] -= ( hTdCngEnc->cng_res_env[max_idx1[0] * NUM_ENV_CNG + i] + hTdCngEnc->cng_res_env[max_idx1[1] * NUM_ENV_CNG + i] ); - env[i] /= (float) ( hDtxEnc->cng_hist_size - 2 ); - } - /* compute average excitation energy */ - enr = 0; - weights = 0; - ptr = hTdCngEnc->cng_hist_ptr; - - for ( k = 0; k < hDtxEnc->cng_hist_size; k++ ) - { - enr += W_HIST[k] * hTdCngEnc->cng_ener_hist[ptr--]; - if ( ptr < 0 ) - { - ptr = DTX_HIST_SIZE - 1; - } - - weights += W_HIST[k]; - } - - /* normalize the average value */ - enr /= weights; - } - - if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT ) - { - enr += hTdCngEnc->CNG_att * FAC_LOG2 / 10.0f; - } - else if ( st->bwidth != NB ) - { - if ( st->bwidth == WB ) - { - if ( hDtxEnc->CNG_mode >= 0 ) - { - /* Bitrate adapted attenuation */ - att = ENR_ATT[hDtxEnc->CNG_mode]; - } - else - { - /* Use least attenuation for higher bitrates */ - att = ENR_ATT[4]; - } - } - else - { - att = 1.5f; - } - enr -= att; - } - - /* intialize the energy quantization parameters */ - if ( !st->Opt_AMR_WB ) - { - step = STEP_SID; - maxl = 127; - num_bits = 7; - } - else - { - step = STEP_AMR_WB_SID; - maxl = 63; - num_bits = 6; - } - - /* calculate the energy quantization index */ - enr_index = (int16_t) ( ( enr + 2.0f ) * step ); - - /* limit the energy quantization index */ - if ( enr_index > maxl ) - { - enr_index = maxl; - } - if ( enr_index < 0 ) - { - enr_index = 0; - } - - /* allow only slow energy increase */ - if ( hDtxEnc->first_CNG && enr_index > hTdCngEnc->old_enr_index + MAX_DELTA_CNG ) - { - if ( *allow_cn_step == 1 ) - { - enr_index = hTdCngEnc->old_enr_index + (int16_t) ( 0.85f * ( enr_index - hTdCngEnc->old_enr_index ) ); - } - else - { - enr_index = hTdCngEnc->old_enr_index + MAX_DELTA_CNG; - } - } - hTdCngEnc->old_enr_index = enr_index; - - push_indice( hBstr, IND_ENERGY, enr_index, num_bits ); - if ( enr_index == 0 ) - { - enr_index = -5; - } - /* find the quatized energy */ - hTdCngEnc->Enew = (float) enr_index / step - 2.0f; - hTdCngEnc->Enew = (float) ( pow( 2.0f, hTdCngEnc->Enew ) ); - if ( st->core_brate == SID_2k40 ) - { - enr1 = (float) log10( hTdCngEnc->Enew * st->L_frame + 0.1f ) / (float) log10( 2.0f ); - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - env[i] -= 2 * hTdCngEnc->Enew; - - if ( env[i] < 0.0f ) - { - env[i] = 0.1f; - } - - env[i] = (float) log10( env[i] + 0.1f ) / (float) log10( 2.0f ); - env[i] -= att; - - if ( env[i] < 0 ) - { - env[i] = 0; - } - - env[i] = enr1 - env[i]; - } - - /* codebook search */ - min1 = 9999.0f; - min1_idx = 0; - - for ( i = 0; i < 64; i++ ) - { - d = 0.0f; - for ( j = 0; j < NUM_ENV_CNG; j++ ) - { - d += ( env[j] - CNG_details_codebook[i][j] ) * ( env[j] - CNG_details_codebook[i][j] ); - } - - if ( d < min1 ) - { - min1 = d; - min1_idx = i; - } - } - push_indice( hBstr, IND_CNG_ENV1, min1_idx, 6 ); - /* get quantized res_env_details */ - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - q_env[i] = CNG_details_codebook[min1_idx][i]; - } - } - /* Update hangover memory during CNG */ - if ( !*allow_cn_step && ( hTdCngEnc->Enew < 1.5f * hTdCngEnc->lp_ener ) ) - { - /* update the pointer to circular buffer of old LSP vectors */ - if ( ++( hTdCngEnc->ho_hist_ptr ) == HO_HIST_SIZE ) - { - hTdCngEnc->ho_hist_ptr = 0; - } - - /* update the circular buffer of old LSP vectors with the new LSP vector */ - mvr2r( lsp_new, &( hTdCngEnc->ho_lsp_hist[( hTdCngEnc->ho_hist_ptr ) * M] ), M ); - - /* update the hangover energy buffer */ - hTdCngEnc->ho_ener_hist[hTdCngEnc->ho_hist_ptr] = hTdCngEnc->Enew; - if ( st->core_brate == SID_2k40 ) - { - for ( i = 0; i < NUM_ENV_CNG; i++ ) - { - /* get quantized envelope */ - env[i] = (float) ( pow( 2.0f, ( enr1 - q_env[i] ) ) + 2 * hTdCngEnc->Enew ); - } - mvr2r( env, &( hTdCngEnc->ho_env_hist[( hTdCngEnc->ho_hist_ptr ) * NUM_ENV_CNG] ), NUM_ENV_CNG ); - } - if ( ++( hTdCngEnc->ho_hist_size ) > HO_HIST_SIZE ) - { - hTdCngEnc->ho_hist_size = HO_HIST_SIZE; - } - } - } - - /* dithering bit for AMR-WB IO mode is always set to 0 */ - if ( st->core_brate == SID_1k75 ) - { - push_indice( hBstr, IND_DITHERING, 0, 1 ); - } - - if ( st->core_brate == SID_2k40 ) - { - push_indice( hBstr, IND_ACELP_16KHZ, st->L_frame == L_FRAME16k ? 1 : 0, 1 ); - - /* transmit ho_cnt for use at decoder side as CNG synthesis assistance */ - if ( hTdCngEnc->burst_ho_cnt > ( HO_HIST_SIZE - 1 ) ) - { - push_indice( hBstr, IND_CNG_HO, ( HO_HIST_SIZE - 1 ), 3 ); /* send max allowed value, limited to 7 */ - } - else - { - push_indice( hBstr, IND_CNG_HO, hTdCngEnc->burst_ho_cnt, 3 ); /* send actual value */ - } - hTdCngEnc->num_ho = m; - push_indice( hBstr, IND_SID_TYPE, 0, 1 ); - - if ( st->input_Fs < 32000 && st->element_mode != IVAS_CPE_DFT ) - { - push_indice( hBstr, IND_SID_BW, 0, 1 ); - *sid_bw = 0; - } - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* update the SID frames counter */ - if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) - { - hDtxEnc->cng_cnt = 0; - /* update frame length memory */ - hDtxEnc->last_CNG_L_frame = st->L_frame; - hTdCngEnc->cng_hist_ptr = -1; - } - else - { - hDtxEnc->cng_cnt++; - } - - return; -} +/*---------------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------------*/ +#define MAX_DELTA_CNG 1 +#define ENER_MID_DEAD_ZONE 0.01 /* dead-zone width around mid points between quantization levels */ /*---------------------------------------------------------------------* - * swb_CNG_enc() - * - * SWB DTX/CNG encoding + * Local function prototypes *---------------------------------------------------------------------*/ -void swb_CNG_enc( - Encoder_State *st, /* i/o: State structure */ - const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ - const float *syn_12k8_16k /* i : ACELP core synthesis at 12.8kHz or 16kHz */ -) -{ - int16_t shb_SID_updt; - - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - if ( st->cng_type == LP_CNG ) - { - if ( st->input_Fs >= L_FRAME32k * FRAMES_PER_SEC ) - { - /* decide if SHB SID encoding or not */ - shb_SID_updt = shb_DTX( st, shb_speech, syn_12k8_16k ); +static Word16 shb_DTX_ivas_fx( Encoder_State *st, const Word16 *shb_speech_fx, const Word16 *syn_12k8_16k_fx ); - /* SHB CNG encoding */ - shb_CNG_encod( st, shb_SID_updt ); - } - else if ( st->element_mode == IVAS_CPE_DFT && st->core_brate == SID_2k40 ) - { - /* LF-boost not used in DFT-stereo, instead the bandwidth is transmitted */ - delete_indice( st->hBstr, IND_CNG_ENV1 ); - push_indice( st->hBstr, IND_BWIDTH, st->bwidth, 2 ); - push_indice( st->hBstr, IND_UNUSED, 0, 4 ); - push_indice( st->hBstr, IND_SID_BW, 1, 1 ); - } - } - st->hTdCngEnc->last_vad = 0; - } - else - { - st->hTdCngEnc->last_vad = 1; - } +static void shb_CNG_encod_ivas_fx( Encoder_State *st, const Word16 update ); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void swb_CNG_enc_ivas_fx( Encoder_State *st, /* i/o: State structure */ const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ @@ -952,7 +106,6 @@ void swb_CNG_enc_ivas_fx( return; } -#endif /*---------------------------------------------------------------------* * shb_CNG_encod() @@ -960,82 +113,6 @@ void swb_CNG_enc_ivas_fx( * SID parameters encoding for SHB signal *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void shb_CNG_encod( - Encoder_State *st, /* i/o: State structure */ - const int16_t update /* i : SID update flag */ -) -{ - int16_t idx_ener = 0; - BSTR_ENC_HANDLE hBstr = st->hBstr; - float ener_mid_dec_thr; - - if ( update == 1 ) - { - /* SHB energy quantization */ - if ( st->element_mode == EVS_MONO ) - { - idx_ener = (int16_t) ( 0.9f * ( 0.1f * st->hTdCngEnc->mov_shb_cng_ener / (float) log10( 2.0f ) + 6.0f ) + 0.5f ); - } - else - { - idx_ener = (int16_t) ( 0.7f * ( 0.1f * st->hTdCngEnc->mov_shb_cng_ener / (float) log10( 2.0f ) + 6.0f ) + 0.5f ); - } - - if ( st->bwidth < SWB ) - { - idx_ener = 0; - } - - if ( idx_ener > 15 ) - { - idx_ener = 15; - } - else if ( idx_ener < 0 ) - { - idx_ener = 0; - } - - /* prevent toggling of idx_ener by adding small dead-zone interval around decision thresholds */ - if ( st->element_mode != EVS_MONO ) - { - if ( abs( idx_ener - st->hTdCngEnc->last_idx_ener ) == 1 ) - { - ener_mid_dec_thr = 0.5f * ( ( st->hTdCngEnc->last_idx_ener / 0.7f - 6.0f ) / 0.1f ) * (float) log10( 2.0f ); - ener_mid_dec_thr += 0.5f * ( ( idx_ener / 0.7f - 6.0f ) / 0.1f ) * (float) log10( 2.0f ); - - if ( fabs( st->hTdCngEnc->mov_shb_cng_ener - ener_mid_dec_thr ) / ener_mid_dec_thr < ENER_MID_DEAD_ZONE ) - { - idx_ener = st->hTdCngEnc->last_idx_ener; - } - } - } - - st->hTdCngEnc->last_idx_ener = idx_ener; - - push_indice( hBstr, IND_SHB_CNG_GAIN, idx_ener, 4 ); - push_indice( hBstr, IND_SID_BW, 1, 1 ); - delete_indice( hBstr, IND_CNG_ENV1 ); - if ( st->element_mode == IVAS_CPE_DFT ) - { - push_indice( st->hBstr, IND_BWIDTH, st->bwidth, 2 ); - } - else - { - push_indice( hBstr, IND_UNUSED, 0, 2 ); - } - st->hTdCngEnc->ho_sid_bw = ( st->hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; - st->hTdCngEnc->ho_sid_bw |= 0x1L; - } - else if ( st->core_brate == SID_2k40 ) - { - st->hTdCngEnc->ho_sid_bw = ( st->hTdCngEnc->ho_sid_bw & 0x3fffffffL ) << 1; - push_indice( hBstr, IND_SID_BW, 0, 1 ); - } - - return; -} -#else static void shb_CNG_encod_ivas_fx( Encoder_State *st, /* i/o: State structure */ const Word16 update /* i : SID update flag */ @@ -1149,7 +226,6 @@ static void shb_CNG_encod_ivas_fx( return; } -#endif /*---------------------------------------------------------------------* * shb_DTX() @@ -1157,138 +233,6 @@ static void shb_CNG_encod_ivas_fx( * Decide if encoding SHB SID or not *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t shb_DTX( - Encoder_State *st, /* i/o: State structure */ - const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ - const float *syn_12k8_16k /* i : ACELP core synthesis at 12.8kHz or 16kHz */ -) -{ - int16_t i; - int16_t update; - float shb_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 4]; - float *shb_new_speech; - float wb_ener; - float shb_ener; - float log_wb_ener; - float log_shb_ener; - float ftmp; - int16_t allow_cn_step = 0; - float att; - - TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; - - shb_new_speech = shb_old_speech + ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4; - mvr2r( st->hBWE_TD->old_speech_shb, shb_old_speech, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4 ); - mvr2r( shb_speech, shb_new_speech, L_FRAME16k ); - mvr2r( shb_old_speech + L_FRAME16k, st->hBWE_TD->old_speech_shb, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 4 ); - - shb_ener = FLT_MIN * L_FRAME16k; - for ( i = 0; i < L_FRAME16k; i++ ) - { - shb_ener += shb_old_speech[i] * shb_old_speech[i]; - } - shb_ener /= L_FRAME16k; - - wb_ener = sum2_f( syn_12k8_16k, st->L_frame ) + 0.001f; - wb_ener = wb_ener / st->L_frame; - - log_wb_ener = 10 * (float) log10( wb_ener ); - if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT ) - { - att = 0.0f; - - apply_scale_flt( &att, st->hFdCngEnc->hFdCngCom->CngBandwidth, st->hFdCngEnc->hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - } - else - { - att = -6.5f; - } - log_shb_ener = 10 * (float) log10( shb_ener ) + att; - - if ( st->hDtxEnc->first_CNG == 0 ) - { - hTdCngEnc->mov_wb_cng_ener = log_wb_ener; - hTdCngEnc->mov_shb_cng_ener = log_shb_ener; - hTdCngEnc->last_wb_cng_ener = log_wb_ener; - hTdCngEnc->last_shb_cng_ener = log_shb_ener; - } - if ( fabs( log_wb_ener - hTdCngEnc->mov_wb_cng_ener ) > 12.0f ) - { - allow_cn_step = 1; - } - - /* Also allow step if shb energy has dropped 12 dB */ - if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && ( ( hTdCngEnc->mov_shb_cng_ener - log_shb_ener ) > 12.0f ) ) - { - allow_cn_step = 1; - } - - if ( allow_cn_step == 1 ) - { - hTdCngEnc->mov_wb_cng_ener = log_wb_ener; - hTdCngEnc->mov_shb_cng_ener = log_shb_ener; - } - else - { - ftmp = log_wb_ener - hTdCngEnc->mov_wb_cng_ener; - - hTdCngEnc->mov_wb_cng_ener += 0.9f * ftmp; - - ftmp = log_shb_ener - hTdCngEnc->mov_shb_cng_ener; - - hTdCngEnc->mov_shb_cng_ener += 0.25f * ftmp; - } - hTdCngEnc->shb_NO_DATA_cnt++; - - update = 0; - if ( st->core_brate == SID_2k40 ) - { - if ( st->hDtxEnc->first_CNG == 0 ) - { - update = 1; - } - else if ( hTdCngEnc->shb_cng_ini_cnt > 0 ) - { - hTdCngEnc->shb_cng_ini_cnt--; - update = 1; - } - else if ( hTdCngEnc->last_vad == 1 ) - { - update = 1; - } - else if ( hTdCngEnc->shb_NO_DATA_cnt >= 100 ) - { - update = 1; - } - else if ( fabs( ( hTdCngEnc->mov_wb_cng_ener - hTdCngEnc->mov_shb_cng_ener ) - ( hTdCngEnc->last_wb_cng_ener - hTdCngEnc->last_shb_cng_ener ) ) > 3.0f ) - { - update = 1; - } - else if ( ( st->bwidth >= SWB && hTdCngEnc->last_SID_bwidth < SWB ) || ( st->bwidth < SWB && hTdCngEnc->last_SID_bwidth >= SWB ) ) - { - update = 1; - } - - hTdCngEnc->last_SID_bwidth = st->bwidth; - } - - /* LF-boost not yet implemented in decoder which means that the specific wb_sid information is not used */ - if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && st->core_brate == SID_2k40 ) - { - update = 1; - } - - if ( update == 1 ) - { - hTdCngEnc->last_wb_cng_ener = hTdCngEnc->mov_wb_cng_ener; - hTdCngEnc->last_shb_cng_ener = hTdCngEnc->mov_shb_cng_ener; - hTdCngEnc->shb_NO_DATA_cnt = 0; - } - - return ( update ); -} -#else static Word16 shb_DTX_ivas_fx( Encoder_State *st, /* i/o: State structure */ const Word16 *shb_speech_fx, /* i : SHB target signal (6-14kHz) at 16kHz Q0 */ @@ -1502,51 +446,3 @@ static Word16 shb_DTX_ivas_fx( test(); return ( update ); } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * calculate_hangover_attenuation_gain() - * - * - *---------------------------------------------------------------------*/ - -void calculate_hangover_attenuation_gain( - Encoder_State *st, /* i : encoder state structure */ - float *att, /* o : attenuation factor */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - float lim; - - *att = 1.0f; - if ( st->hTdCngEnc != NULL && vad_hover_flag && st->hTdCngEnc->burst_ho_cnt > 0 && ( st->bwidth != NB || st->element_mode > EVS_MONO ) ) - { - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - *att = powf( 10.0f, ( st->hTdCngEnc->CNG_att / 160.0f ) * st->hTdCngEnc->burst_ho_cnt ); - } - else - { - if ( st->bwidth == WB && st->hDtxEnc->CNG_mode >= 0 ) - { - lim = HO_ATT[st->hDtxEnc->CNG_mode]; - } - else - { - lim = 0.6f; - } - - *att = lim / 6.0f; - *att = 1.0f / ( 1 + *att * st->hTdCngEnc->burst_ho_cnt ); - - if ( *att < lim ) - { - *att = lim; - } - } - } - - return; -} -#endif diff --git a/lib_enc/cng_enc_fx.c b/lib_enc/cng_enc_fx.c index 8a6dcee84..44ce22cc9 100644 --- a/lib_enc/cng_enc_fx.c +++ b/lib_enc/cng_enc_fx.c @@ -7,9 +7,7 @@ #include "rom_enc.h" /* Encoder static table prototypes */ #include "rom_com.h" /* Static table prototypes */ //#include "prot_fx.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED -#include "prot.h" /* Function prototypes */ -#endif +#include "prot.h" /* Function prototypes */ #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ //#include "basop_mpy.h" @@ -1200,7 +1198,6 @@ void CNG_enc_fx( return; } -#ifdef IVAS_FLOAT_FIXED void CNG_enc_ivas_fx( Encoder_State *st_fx, /* i/o: State structure */ Word16 Aq[], /* o : LP coefficients Q12 */ @@ -2416,7 +2413,6 @@ void CNG_enc_ivas_fx( return; } -#endif /*---------------------------------------------------------------------* * swb_CNG_enc() * @@ -2823,7 +2819,6 @@ void calculate_hangover_attenuation_gain_fx( return; } -#ifdef IVAS_FLOAT_FIXED void calculate_hangover_attenuation_gain_ivas_fx( Encoder_State *st, /* i : encoder state structure */ Word16 *att, /* o : attenuation factor */ @@ -2877,4 +2872,3 @@ void calculate_hangover_attenuation_gain_ivas_fx( return; } -#endif diff --git a/lib_enc/cod2t32.c b/lib_enc/cod2t32.c index 60a3d541a..e7a8ca967 100644 --- a/lib_enc/cod2t32.c +++ b/lib_enc/cod2t32.c @@ -39,308 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define STEP 2 -#define MSIZE 1024 - - -/*---------------------------------------------------------------------------------- - * Function acelp_2t32() - * - * 12 bits algebraic codebook. - * 2 tracks x 32 positions per track = 64 samples. - * - * 12 bits --> 2 pulses in a frame of 64 samples. - * - * All pulses can have two (2) possible amplitudes: +1 or -1. - * Each pulse can have 32 possible positions. - *----------------------------------------------------------------------------------*/ - -void acelp_2t32( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float dn[], /* i : corr. between target and h[]. */ - const float h[], /* i : impulse response of weighted synthesis filter */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[] /* o : filtered fixed codebook excitation */ -) -{ - int16_t i, j, k, i0, i1, ix, iy, pos, pos2, index; - float psk, ps1, ps2, alpk, alp1, alp2, sq; - float pol[L_SUBFR], dn_p[L_SUBFR], r0; - int16_t ii, jj; - float s, cor, sign0, sign1; - float *p0, *p1, *p2; - const float *ptr_h1, *ptr_h2, *ptr_hf; - float rrixix[NB_TRACK_FCB_2T][NB_POS_FCB_2T]; - float rrixiy[MSIZE]; - - - /*----------------------------------------------------------------* - * Compute rrixix[][] needed for the codebook search. - *----------------------------------------------------------------*/ - - /* Init pointers to last position of rrixix[] */ - p0 = &rrixix[0][NB_POS_FCB_2T - 1]; - p1 = &rrixix[1][NB_POS_FCB_2T - 1]; - - ptr_h1 = h; - cor = 0.0f; - for ( i = 0; i < NB_POS_FCB_2T; i++ ) - { - cor += *ptr_h1 * *ptr_h1; - ptr_h1++; - *p1-- = cor; - cor += *ptr_h1 * *ptr_h1; - ptr_h1++; - *p0-- = cor; - } - - p0 = rrixix[0]; - p1 = rrixix[1]; - - for ( i = 0; i < NB_POS_FCB_2T; i++ ) - { - *p0 = 0.5f * ( *p0 ); - p0++; - *p1 = 0.5f * ( *p1 ); - p1++; - } - - /*------------------------------------------------------------* - * Compute rrixiy[][] needed for the codebook search. - *------------------------------------------------------------*/ - - pos = MSIZE - 1; - pos2 = MSIZE - 2; - ptr_hf = h + 1; - - for ( k = 0; k < NB_POS_FCB_2T; k++ ) - { - /* Init pointers to last position of diagonals */ - p1 = &rrixiy[pos]; - p0 = &rrixiy[pos2]; - - cor = 0.0f; - ptr_h1 = h; - ptr_h2 = ptr_hf; - - for ( i = k + 1; i < NB_POS_FCB_2T; i++ ) - { - cor += *ptr_h1++ * *ptr_h2++; - *p1 = cor; - - cor += *ptr_h1++ * *ptr_h2++; - *p0 = cor; - - p1 -= ( NB_POS_FCB_2T + 1 ); - p0 -= ( NB_POS_FCB_2T + 1 ); - } - - cor += *ptr_h1++ * *ptr_h2; - *p1 = cor; - - pos -= NB_POS_FCB_2T; - pos2--; - ptr_hf += STEP; - } - - /*----------------------------------------------------------------* - * computing reference vector and pre-selection of polarities - *----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - /* FIR high-pass filtering */ - if ( i == 0 ) - { - r0 = dn[i] - dn[i + 1] * 0.35f; - } - else if ( i == L_SUBFR - 1 ) - { - r0 = -dn[i - 1] * 0.35f + dn[i]; - } - else - { - r0 = -dn[i - 1] * 0.35f + dn[i] - dn[i + 1] * 0.35f; - } - - /* pre-selection of polarities */ - if ( r0 >= 0.0f ) - { - pol[i] = 1.0f; - } - else - { - pol[i] = -1.0f; - } - - /* including polarities into dn[] */ - dn_p[i] = dn[i] * pol[i]; - } - - /*----------------------------------------------------------------* - * compute denominator ( multiplied by polarity ) - *----------------------------------------------------------------*/ - - k = 0; - ii = 0; - for ( i = 0; i < NB_POS_FCB_2T; i++ ) - { - jj = 1; - for ( j = 0; j < NB_POS_FCB_2T; j++ ) - { - rrixiy[k + j] *= pol[ii] * pol[jj]; - jj += 2; - } - ii += 2; - k += NB_POS_FCB_2T; - } - - /*----------------------------------------------------------------* - * search 2 pulses - * All combinaisons are tested: - * 32 pos x 32 pos x 2 signs = 2048 tests - *----------------------------------------------------------------*/ - - p0 = rrixix[0]; - p1 = rrixix[1]; - p2 = rrixiy; - - psk = -1; - alpk = 1; - ix = 0; - iy = 1; - for ( i0 = 0; i0 < L_SUBFR; i0 += STEP ) - { - ps1 = dn_p[i0]; - alp1 = *p0++; - pos = -1; - for ( i1 = 1; i1 < L_SUBFR; i1 += STEP ) - { - ps2 = ps1 + dn_p[i1]; - alp2 = alp1 + *p1++ + *p2++; - sq = ps2 * ps2; - s = alpk * sq - psk * alp2; - if ( s > 0 ) - { - psk = sq; - alpk = alp2; - pos = i1; - } - } - p1 -= NB_POS_FCB_2T; - if ( pos >= 0 ) - { - ix = i0; - iy = pos; - } - } - - i0 = ix / STEP; - i1 = iy / STEP; - sign0 = pol[ix]; - sign1 = pol[iy]; - - - /*-------------------------------------------------------------------* - * Build the codeword, the filtered codeword and index of codevector. - *-------------------------------------------------------------------*/ - - set_f( code, 0.0f, L_SUBFR ); - - code[ix] = sign0; - code[iy] = sign1; - index = ( i0 << 6 ) + i1; - - if ( sign0 < 0.0f ) - { - index += 0x800; - } - - if ( sign1 < 0.0f ) - { - index += 0x20; - } - - set_f( y, 0.0f, L_SUBFR ); - for ( i = ix; i < L_SUBFR; i++ ) - { - y[i] = ( sign0 * h[i - ix] ); - } - - for ( i = iy; i < L_SUBFR; i++ ) - { - y[i] += ( sign1 * h[i - iy] ); - } - - /* write index to array of indices */ - push_indice( hBstr, IND_ALG_CDBK_2T32, index, 12 ); - - return; -} - -/*---------------------------------------------------------------------------------- - * acelp_1t64() - * - * 7 bits algebraic codebook. - * 1 track x 64 positions per track = 64 samples. - * - * The pulse can have 64 possible positions and two (2) possible amplitudes: +1 or -1. - *----------------------------------------------------------------------------------*/ - -void acelp_1t64( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float dn[], /* i : corr. between target and h[]. */ - const float h[], /* i : impulse response of weighted synthesis filter */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t i, pos, sgn, index; - float tmp; - - /*-------------------------------------------------------------------* - * Find position and sign of maximum impulse. - *-------------------------------------------------------------------*/ - - pos = emaximum( dn, L_subfr, &tmp ); - sgn = (int16_t) sign( dn[pos] ); - - /*-------------------------------------------------------------------* - * Build the codeword, the filtered codeword and index of codevector. - *-------------------------------------------------------------------*/ - - set_f( code, 0.0f, L_subfr ); - code[pos] = sgn; - - set_f( y, 0.0f, L_subfr ); - - for ( i = pos; i < L_subfr; i++ ) - { - y[i] = ( sgn * h[i - pos] ); - } - - index = pos; - - if ( sgn > 0 ) - { - index += L_subfr; - } - - if ( L_subfr == L_SUBFR ) - { - push_indice( hBstr, IND_ALG_CDBK_1T64, index, 7 ); - } - else /* L_subfr == L_SUBFR */ - { - push_indice( hBstr, IND_ALG_CDBK_1T64, index, 8 ); - } - - return; -} -#endif diff --git a/lib_enc/cod4t64.c b/lib_enc/cod4t64.c index 3fc92925a..b4081d00f 100644 --- a/lib_enc/cod4t64.c +++ b/lib_enc/cod4t64.c @@ -46,976 +46,3 @@ /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static int16_t quant_1p_N1( const int16_t pos, const int16_t N ); -static int16_t quant_3p_3N1( const int16_t pos1, const int16_t pos2, const int16_t pos3, const int16_t N ); -static int32_t quant_4p_4N( const int16_t pos[], const int16_t N ); -static int32_t quant_5p_5N( const int16_t pos[], const int16_t N ); -static int32_t quant_6p_6N_2( const int16_t pos[], const int16_t N ); - -static int16_t pre_process( const float v[], int16_t pos_vector[], int16_t pos_vector_num[], int16_t *pulse_pos_num ); -static int32_t fcb_encode_position( const int16_t pos_vector[], int16_t n, const int16_t pos_num, const int16_t flag ); -static int32_t fcb_encode_class( const int16_t buffer[], const int16_t pulse_num, const int16_t pos_num ); -static int32_t fcb_encode_PI( const float v[], const int16_t pulse_num ); - -/*---------------------------------------------------------------------* - * ACELP_4t64() - * - * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. - * 4 tracks x 16 positions per track = 64 samples. - * - * 20 bits --> 4 pulses in a frame of 64 samples. - * 36 bits --> 8 pulses in a frame of 64 samples. - * 44 bits 13 + 9 + 13 + 9 --> 10 pulses in a frame of 64 samples. - * 52 bits 13 + 13 + 13 + 13 --> 12 pulses in a frame of 64 samples. - * 64 bits 2 + 2 + 2 + 2 + 14 + 14 + 14 + 14 --> - * 16 pulses in a frame of 64 samples. - * 72 bits 10 + 2 + 10 + 2 + 10 + 14 + 10 + 14 --> - * 18 pulses in a frame of 64 samples. - * 88 bits 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 --> - * 24 pulses in a frame of 64 samples. - * All pulses can have two (2) possible amplitudes: +1 or -1. - * Each pulse can have sixteen (16) possible positions. - *---------------------------------------------------------------------*/ - -int16_t acelp_4t64( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float dn[], /* i : corr. between target and h[]. */ - const float cn[], /* i : residual after long term prediction */ - const float H[], /* i : impulse response of weighted synthesis filter */ - float R[], /* i : autocorrelation values */ - const int16_t acelpautoc, /* i : autocorrealtion flag */ - float code[], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - int16_t nbbits, /* i : number of bits per codebook */ - const int16_t cmpl_flag, /* i : coomplexity reduction flag */ - const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ -) -{ - int16_t i, k, index, track; - int32_t L_index; - - int16_t ind[NPMAXPT * NB_TRACK_FCB_4T + 32]; - int16_t saved_bits = 0; - PulseConfig config; - int16_t wordcnt, bitcnt; - int16_t indexing_indices[6]; - - /*-----------------------------------------------------------------* - * Configuration - *-----------------------------------------------------------------*/ - - - switch ( nbbits ) - { - case 20: /* EVS/AMR-WB pulse indexing: 20 bits, 4 pulses, 4 tracks */ - config.nbiter = 4; /* 4x12x16=768 loop */ - config.alp_flt = 2.0f; - config.nb_pulse = 4; - config.fixedpulses = 0; - config.nbpos[0] = 4; - config.nbpos[1] = 8; - break; - - case 28: /* EVS pulse indexing: 28 bits, 6 pulses, 4 tracks */ - config.nbiter = 4; /* 4x20x16=1280 loops */ - config.alp_flt = 1.0f; /* coeff for sign setting */ - config.nb_pulse = 6; - config.fixedpulses = 0; - config.nbpos[0] = 6; - config.nbpos[1] = 6; - config.nbpos[2] = 8; - break; - - case 36: /* EVS/AMR-WB pulse indexing: 36 bits, 8 pulses, 4 tracks */ - config.nbiter = 4; /* 4x20x16=1280 loops */ - config.alp_flt = 1.0f; /* coeff for sign setting */ - config.nb_pulse = 8; - config.fixedpulses = 2; - config.nbpos[0] = 4; - config.nbpos[1] = 8; - config.nbpos[2] = 8; - break; - - case 43: /* EVS pulse indexing: 43 bits, 10 pulses, 4 tracks */ - case 44: /* AMR-WB pulse indexing: 44 bits, 10 pulses, 4 tracks */ - config.nbiter = 4; /* 4x26x16=1664 loops */ - config.alp_flt = 1.0f; - config.nb_pulse = 10; - config.fixedpulses = 2; - config.nbpos[0] = 4; - config.nbpos[1] = 6; - config.nbpos[2] = 8; - config.nbpos[3] = 8; - break; - - case 50: /* EVS pulse indexing: 50 bits, 12 pulses, 4 tracks */ - case 52: /* AMR-WB pulse indexing: 52 bits, 12 pulses, 4 tracks */ - config.nbiter = 4; /* 4x26x16=1664 loops */ - config.alp_flt = 1.0f; - config.nb_pulse = 12; - config.fixedpulses = 4; - config.nbpos[0] = 4; - config.nbpos[1] = 6; - config.nbpos[2] = 8; - config.nbpos[3] = 8; - break; - - case 62: /* EVS pulse indexing: 62 bits, 16 pulses, 4 tracks */ - case 64: /* AMR-WB pulse indexing: 64 bits, 16 pulses, 4 tracks */ - config.nbiter = 3; /* 3x36x16=1728 loops */ - config.alp_flt = 0.8F; - config.nb_pulse = 16; - config.fixedpulses = 4; - config.nbpos[0] = 4; - config.nbpos[1] = 4; - config.nbpos[2] = 6; - config.nbpos[3] = 6; - config.nbpos[4] = 8; - config.nbpos[5] = 8; - break; - - case 72: /* AMR-WB pulse indexing: 72 bits, 18 pulses, 4 tracks */ - config.nbiter = 3; /* 3x35x16=1680 loops */ - config.alp_flt = 0.75F; - config.nb_pulse = 18; - config.fixedpulses = 4; - config.nbpos[0] = 2; - config.nbpos[1] = 3; - config.nbpos[2] = 4; - config.nbpos[3] = 5; - config.nbpos[4] = 6; - config.nbpos[5] = 7; - config.nbpos[6] = 8; - break; - - case 88: /* AMR-WB pulse indexing: 88 bits, 24 pulses, 4 tracks */ - config.nbiter = 2; /* 2x53x16=1696 loop */ - config.alp_flt = 0.5f; - config.nb_pulse = 24; - config.fixedpulses = 4; - config.nbpos[0] = 2; - config.nbpos[1] = 2; - config.nbpos[2] = 3; - config.nbpos[3] = 4; - config.nbpos[4] = 5; - config.nbpos[5] = 6; - config.nbpos[6] = 7; - config.nbpos[7] = 8; - config.nbpos[8] = 8; - config.nbpos[9] = 8; - break; - - case 87: /* EVS pulse indexing: 87 bits, 26 pulses, 4 tracks */ - config.nbiter = 1; - config.alp_flt = 0.5F; - config.nb_pulse = 26; - config.fixedpulses = 4; - config.nbpos[0] = 4; - config.nbpos[1] = 6; - config.nbpos[2] = 6; - config.nbpos[3] = 8; - config.nbpos[4] = 8; - config.nbpos[5] = 8; - config.nbpos[6] = 8; - config.nbpos[7] = 8; - config.nbpos[8] = 8; - config.nbpos[9] = 8; - config.nbpos[10] = 8; - break; - } - - /* reduce the number of iterations as a compromise between the performance and complexity */ - if ( cmpl_flag > 0 ) - { - config.nbiter = cmpl_flag; - } - - config.codetrackpos = TRACKPOS_FIXED_FIRST; - config.bits = nbbits; - - - /*-----------------------------------------------------------------* - * Search - *-----------------------------------------------------------------*/ - - if ( acelpautoc ) - { - E_ACELP_4tsearchx( dn, cn, R, code, &config, ind ); - - /* Generate weighted code */ - set_f( y, 0.0f, L_SUBFR ); - for ( i = 0; i < L_SUBFR; i++ ) - { - /* Code is sparse, so check which samples are non-zero */ - if ( code[i] != 0 ) - { - for ( k = 0; k < L_SUBFR - i; k++ ) - { - y[i + k] += code[i] * H[k]; - } - } - } - } - else - { - E_ACELP_4tsearch( dn, cn, H, code, &config, ind, y ); - } - - /*-----------------------------------------------------------------* - * Indexing - *-----------------------------------------------------------------*/ - - if ( !Opt_AMR_WB ) - { - /* EVS pulse indexing */ - - saved_bits = E_ACELP_indexing( code, config, NB_TRACK_FCB_4T, indexing_indices ); - - saved_bits = 0; - - wordcnt = nbbits >> 4; - bitcnt = nbbits & 15; - for ( i = 0; i < wordcnt; i++ ) - { - push_indice( hBstr, IND_ALG_CDBK_4T64, indexing_indices[i], 16 ); - } - if ( bitcnt ) - { - push_indice( hBstr, IND_ALG_CDBK_4T64, indexing_indices[i], bitcnt ); - } - } - else - { - /* AMR-WB pulse indexing */ - - if ( nbbits == 20 ) - { - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - index = quant_1p_N1( ind[k], 4 ); - push_indice( hBstr, IND_ALG_CDBK_4T64, index, 5 ); - } - } - else if ( nbbits == 36 ) - { - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - index = quant_2p_2N1( ind[k], ind[k + 1], 4 ); - push_indice( hBstr, IND_ALG_CDBK_4T64, index, 9 ); - } - } - else if ( nbbits == 44 ) - { - for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) - { - k = track * NPMAXPT; - index = quant_3p_3N1( ind[k], ind[k + 1], ind[k + 2], 4 ); - push_indice( hBstr, IND_ALG_CDBK_4T64, index, 13 ); - } - - for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - index = quant_2p_2N1( ind[k], ind[k + 1], 4 ); - push_indice( hBstr, IND_ALG_CDBK_4T64, index, 9 ); - } - } - else if ( nbbits == 52 ) - { - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - index = quant_3p_3N1( ind[k], ind[k + 1], ind[k + 2], 4 ); - push_indice( hBstr, IND_ALG_CDBK_4T64, index, 13 ); - } - } - else if ( nbbits == 64 ) - { - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_4p_4N( &ind[k], 4 ); - index = ( ( L_index >> 14 ) & 3 ); - push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 2 ); - } - - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_4p_4N( &ind[k], 4 ); - index = ( L_index & 0x3FFF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 14 ); - } - } - else if ( nbbits == 72 ) - { - for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) - { - k = track * NPMAXPT; - L_index = quant_5p_5N( &ind[k], 4 ); - index = ( ( L_index >> 10 ) & 0x03FF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 10 ); - } - - for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_4p_4N( &ind[k], 4 ); - index = ( ( L_index >> 14 ) & 3 ); - push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 2 ); - } - - for ( track = 0; track < ( NB_TRACK_FCB_4T - 2 ); track++ ) - { - k = track * NPMAXPT; - L_index = quant_5p_5N( &ind[k], 4 ); - index = ( L_index & 0x03FF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 10 ); - } - - for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_4p_4N( &ind[k], 4 ); - index = ( L_index & 0x3FFF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 14 ); - } - } - else if ( nbbits == 88 ) - { - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_6p_6N_2( &ind[k], 4 ); - index = ( ( L_index >> 11 ) & 0x07FF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_1, index, 11 ); - } - - for ( track = 0; track < NB_TRACK_FCB_4T; track++ ) - { - k = track * NPMAXPT; - L_index = quant_6p_6N_2( &ind[k], 4 ); - index = ( L_index & 0x07FF ); - push_indice( hBstr, IND_ALG_CDBK_4T64_2, index, 11 ); - } - } - } - - return saved_bits; -} - - -/*---------------------------------------------------------------------* - * Quantization of 1 pulse with N+1 bits: * - *---------------------------------------------------------------------*/ - -/*! r: return N+1 bits */ -static int16_t quant_1p_N1( - const int16_t pos, /* i : position of the pulse */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t mask, index; - - mask = ( ( 1 << N ) - 1 ); - - index = ( pos & mask ); - - if ( ( pos & NB_POS_FCB_4T ) != 0 ) - { - index += 1 << N; - } - - return index; -} - -/*---------------------------------------------------------------------* - * Quantization of 2 pulses with 2*N+1 bits: * - *---------------------------------------------------------------------*/ - - -/*! r: return (2*N)+1 bits */ -int16_t quant_2p_2N1( - const int16_t pos1, /* i : position of the pulse 1 */ - const int16_t pos2, /* i : position of the pulse 2 */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t mask, index; - - mask = ( ( 1 << N ) - 1 ); - - /*-----------------------------------------------------------------* - * sign of 1st pulse == sign of 2nd pulse - *-----------------------------------------------------------------*/ - - if ( ( ( pos2 ^ pos1 ) & NB_POS_FCB_4T ) == 0 ) - { - if ( ( pos1 - pos2 ) <= 0 ) - { - index = ( ( pos1 & mask ) << N ) + ( pos2 & mask ); - } - else - { - index = ( ( pos2 & mask ) << N ) + ( pos1 & mask ); - } - if ( ( pos1 & NB_POS_FCB_4T ) != 0 ) - { - index += 1 << ( 2 * N ); - } - } - else - { - - /*-----------------------------------------------------------------* - * sign of 1st pulse != sign of 2nd pulse - *-----------------------------------------------------------------*/ - if ( ( ( pos1 & mask ) - ( pos2 & mask ) ) <= 0 ) - { - index = ( ( pos2 & mask ) << N ) + ( pos1 & mask ); - if ( ( pos2 & NB_POS_FCB_4T ) != 0 ) - { - index += 1 << ( 2 * N ); - } - } - else - { - index = ( ( pos1 & mask ) << N ) + ( pos2 & mask ); - if ( ( pos1 & NB_POS_FCB_4T ) != 0 ) - { - index += 1 << ( 2 * N ); - } - } - } - - return index; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Quantization of 3 pulses with 3*N+1 bits: * - *---------------------------------------------------------------------*/ - -/*! r: return (3*N)+1 bits */ -static int16_t quant_3p_3N1( - const int16_t pos1, /* i : position of the pulse 1 */ - const int16_t pos2, /* i : position of the pulse 2 */ - const int16_t pos3, /* i : position of the pulse 3 */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t index, nb_pos; - - nb_pos = ( 1 << ( N - 1 ) ); - - /* Quantization of 3 pulses with 3*N+1 bits */ - if ( ( ( pos1 ^ pos2 ) & nb_pos ) == 0 ) - { - index = quant_2p_2N1( pos1, pos2, ( N - 1 ) ); - index += ( pos1 & nb_pos ) << N; - index += quant_1p_N1( pos3, N ) << ( 2 * N ); - } - else if ( ( ( pos1 ^ pos3 ) & nb_pos ) == 0 ) - { - index = quant_2p_2N1( pos1, pos3, ( N - 1 ) ); - index += ( pos1 & nb_pos ) << N; - index += quant_1p_N1( pos2, N ) << ( 2 * N ); - } - else - { - index = quant_2p_2N1( pos2, pos3, ( N - 1 ) ); - index += ( pos2 & nb_pos ) << N; - index += quant_1p_N1( pos1, N ) << ( 2 * N ); - } - - return index; -} - -/*---------------------------------------------------------------------* - * Quantization of 4 pulses with 4*N+1 bits: * - *---------------------------------------------------------------------*/ - -/*! r: return (4*N)+1 bits */ -static int32_t quant_4p_4N1( - const int16_t pos1, /* i : position of the pulse 1 */ - const int16_t pos2, /* i : position of the pulse 2 */ - const int16_t pos3, /* i : position of the pulse 3 */ - const int16_t pos4, /* i : position of the pulse 4 */ - const int16_t N /* i : number of bits for position */ -) -{ - int32_t index, nb_pos; - - nb_pos = ( 1 << ( N - 1 ) ); - - /* Quantization of 4 pulses with 4*N+1 bits */ - if ( ( ( pos1 ^ pos2 ) & nb_pos ) == 0 ) - { - index = quant_2p_2N1( pos1, pos2, ( N - 1 ) ); - index += ( pos1 & nb_pos ) << N; - index += quant_2p_2N1( pos3, pos4, N ) << ( 2 * N ); - } - else if ( ( ( pos1 ^ pos3 ) & nb_pos ) == 0 ) - { - index = quant_2p_2N1( pos1, pos3, ( N - 1 ) ); - index += ( pos1 & nb_pos ) << N; - index += quant_2p_2N1( pos2, pos4, N ) << ( 2 * N ); - } - else - { - index = quant_2p_2N1( pos2, pos3, ( N - 1 ) ); - index += ( pos2 & nb_pos ) << N; - index += quant_2p_2N1( pos1, pos4, N ) << ( 2 * N ); - } - - return ( index ); -} - -/*---------------------------------------------------------------------* - * Quantization of 4 pulses with 4*N bits: * - *---------------------------------------------------------------------*/ - -/*! r: return 4*N bits */ -static int32_t quant_4p_4N( - const int16_t pos[], /* i : position of the pulse 1..4 */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t i, j, k, n_1; - int16_t posA[4], posB[4]; - int32_t nb_pos, index = 0; - - n_1 = N - 1; - nb_pos = ( 1 << n_1 ); - - i = 0; - j = 0; - for ( k = 0; k < 4; k++ ) - { - if ( ( pos[k] & nb_pos ) == 0 ) - { - posA[i++] = pos[k]; - } - else - { - posB[j++] = pos[k]; - } - } - - switch ( i ) - { - case 0: - index = 1 << ( ( 4 * N ) - 3 ); - index += quant_4p_4N1( posB[0], posB[1], posB[2], posB[3], n_1 ); - break; - case 1: - index = quant_1p_N1( posA[0], n_1 ) << ( ( 3 * n_1 ) + 1 ); - index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ); - break; - case 2: - index = quant_2p_2N1( posA[0], posA[1], n_1 ) << ( ( 2 * n_1 ) + 1 ); - index += quant_2p_2N1( posB[0], posB[1], n_1 ); - break; - case 3: - index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << N; - index += quant_1p_N1( posB[0], n_1 ); - break; - case 4: - index = quant_4p_4N1( posA[0], posA[1], posA[2], posA[3], n_1 ); - break; - } - index += ( i & 3 ) << ( ( 4 * N ) - 2 ); - - return ( index ); -} - -/*---------------------------------------------------------------------* - * Quantization of 5 pulses with 5*N bits: * - *---------------------------------------------------------------------*/ - -/*! r: return 5*N bits */ -static int32_t quant_5p_5N( - const int16_t pos[], /* i : position of the pulse 1..5 */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t i, j, k, n_1, nb_pos; - int16_t posA[5], posB[5]; - int32_t index = 0; - - n_1 = N - 1; - nb_pos = ( 1 << n_1 ); - - i = 0; - j = 0; - for ( k = 0; k < 5; k++ ) - { - if ( ( pos[k] & nb_pos ) == 0 ) - { - posA[i++] = pos[k]; - } - else - { - posB[j++] = pos[k]; - } - } - switch ( i ) - { - case 0: - index = 1 << ( ( 5 * N ) - 1 ); - index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posB[3], posB[4], N ); - break; - case 1: - index = 1 << ( ( 5 * N ) - 1 ); - index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posB[3], posA[0], N ); - break; - case 2: - index = 1 << ( ( 5 * N ) - 1 ); - index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posA[0], posA[1], N ); - break; - case 3: - index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posB[0], posB[1], N ); - break; - case 4: - index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posA[3], posB[0], N ); - break; - case 5: - index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 2 * N ) + 1 ); - index += quant_2p_2N1( posA[3], posA[4], N ); - break; - } - - return ( index ); -} - -/*---------------------------------------------------------------------* - * Quantization of 6 pulses with 6*N-2 bits: * - *---------------------------------------------------------------------*/ - -/*! r: return 6*N-2 bits */ -static int32_t quant_6p_6N_2( - const int16_t pos[], /* i : position of the pulse 1..6 */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t i, j, k, n_1; - int16_t posA[6], posB[6]; - int32_t nb_pos, index = 0; - - n_1 = N - 1; - nb_pos = 1 << n_1; - - i = 0; - j = 0; - for ( k = 0; k < 6; k++ ) - { - if ( ( pos[k] & nb_pos ) == 0 ) - { - posA[i++] = pos[k]; - } - else - { - posB[j++] = pos[k]; - } - } - switch ( i ) - { - case 0: - index = 1 << ( ( 6 * N ) - 5 ); - index += quant_5p_5N( posB, n_1 ) << N; - index += quant_1p_N1( posB[5], n_1 ); - break; - case 1: - index = 1 << ( ( 6 * N ) - 5 ); - index += quant_5p_5N( posB, n_1 ) << N; - index += quant_1p_N1( posA[0], n_1 ); - break; - case 2: - index = 1 << ( ( 6 * N ) - 5 ); - index += quant_4p_4N( posB, n_1 ) << ( ( 2 * n_1 ) + 1 ); - index += quant_2p_2N1( posA[0], posA[1], n_1 ); - break; - case 3: - index = quant_3p_3N1( posA[0], posA[1], posA[2], n_1 ) << ( ( 3 * n_1 ) + 1 ); - index += quant_3p_3N1( posB[0], posB[1], posB[2], n_1 ); - break; - case 4: - i = 2; - index = quant_4p_4N( posA, n_1 ) << ( ( 2 * n_1 ) + 1 ); - index += quant_2p_2N1( posB[0], posB[1], n_1 ); - break; - case 5: - i = 1; - index = quant_5p_5N( posA, n_1 ) << N; - index += quant_1p_N1( posB[0], n_1 ); - break; - case 6: - i = 0; - index = quant_5p_5N( posA, n_1 ) << N; - index += quant_1p_N1( posA[5], n_1 ); - break; - } - - index += ( i & 3 ) << ( ( 6 * N ) - 4 ); - - return ( index ); -} - - -/*---------------------------------------------------------------------* - *order the pulse position * - *---------------------------------------------------------------------*/ - -/*! r: return sign value of pulse on a track */ -static int16_t pre_process( - const float v[], /* i : the pulse vector */ - int16_t pos_vector[], /* o : position of the pulse on a track */ - int16_t pos_vector_num[], /* o : the pulse number on the position which have pulse */ - int16_t *pulse_pos_num /* i : the number of position which have pulse */ -) -{ - int16_t j, k; - int16_t sign; - - sign = 0; - j = 0; - for ( k = 0; k < 64; k += 4 ) - { - if ( v[k] ) - { - pos_vector[j] = k >> 2; - pos_vector_num[j] = (int16_t) fabsf( v[k] ); - if ( v[k] > 0 ) - { - sign = sign << 1; - } - else - { - sign = ( sign << 1 ) + 1; - } - j++; - } - } - *pulse_pos_num = j; - - return sign; -} - -/*---------------------------------------------------------------------* - *encode the position * - *---------------------------------------------------------------------*/ - -/*! r: return index of the positions which have pulse */ -static int32_t fcb_encode_position( - const int16_t pos_vector[], /* i : position of the pulse on a track */ - int16_t n, - const int16_t pos_num, /* i : the number of position which have pulse */ - const int16_t flag ) -{ - int16_t i; - int32_t mmm1; - int16_t temp2; - - mmm1 = PI_select_table[n][pos_num] - 1; - temp2 = pos_num; - - if ( flag ) /* no decrease */ - { - for ( i = 0; i < pos_num; i++ ) - { - mmm1 -= PI_select_table[n - pos_vector[i] - 1][temp2--]; - } - } - else - { - for ( i = 0; i < pos_num; i++ ) - { - mmm1 -= PI_select_table[n - pos_vector[i] - 1][temp2--]; - n--; - } - } - - return mmm1; -} - -/*---------------------------------------------------------------------* - *encode class for 3p 4p 5p 6p/track * - *---------------------------------------------------------------------*/ - -/*! r: class index of the pulse on a track */ -static int32_t fcb_encode_cl( - const int16_t buffer[], /* i : pulses on a track */ - const int16_t pulse_num, /* i : pulses number on a track */ - const int16_t pos_num /* i : number of the position which have pulse */ -) -{ - int32_t k; - int16_t i, temp1, temp2; - - temp1 = pos_num + pulse_num - 1; - temp2 = pulse_num; - k = PI_select_table[temp1][pulse_num] - 1; - temp1--; - for ( i = 0; i < pulse_num; i++ ) - { - k -= PI_select_table[temp1 - buffer[i]][temp2--]; - temp1--; - } - - return k; -} - -/*---------------------------------------------------------------------* - *encode the class and compute class offset * - *---------------------------------------------------------------------*/ - -/*! r: class offset */ -static int32_t fcb_encode_class( - const int16_t sector_6p_num[], /* i : position which have pulse on a track */ - const int16_t pulse_num, /* i : pulse number on a track */ - const int16_t pulse_pos_num /* i : number of position which have pulse on a track */ -) -{ - int16_t i, j; - int32_t k, mn9_offet; - int16_t vector_class[6]; - int16_t *vector_class_ptr; - - mn9_offet = 0; - - if ( pulse_pos_num < pulse_num ) - { - vector_class_ptr = vector_class; - for ( i = 0; i < pulse_pos_num; i++ ) - { - for ( j = 0; j < ( sector_6p_num[i] - 1 ); j++ ) - { - *vector_class_ptr++ = i; - } - } - k = fcb_encode_cl( vector_class, pulse_num - pulse_pos_num, pulse_pos_num ); - mn9_offet = PI_factor[pulse_pos_num] * k; - } - - return mn9_offet; -} - - -/*---------------------------------------------------------------------* - *encode fcb pulse index * - *---------------------------------------------------------------------*/ - -/*! r: return index of the pulse on a track */ -static int32_t fcb_encode_PI( - const float v[], /* i : the pulse vector */ - const int16_t pulse_num /* i : number of the pulse on a track */ -) -{ - int16_t vector_p[7]; - int16_t pulse_pos_num; - int16_t vector_p_num[7]; - int32_t code_index; - int16_t sign; - - /*order the pulse position*/ - sign = pre_process( v, vector_p, vector_p_num, &pulse_pos_num ); - - /*encode the position*/ - code_index = fcb_encode_position( vector_p, 16, pulse_pos_num, 1 ); - - /*encode the class and compute class offset*/ - code_index += fcb_encode_class( vector_p_num, pulse_num, pulse_pos_num ); - - code_index = PI_offset[pulse_num][pulse_num + 1 - pulse_pos_num] + ( code_index << pulse_pos_num ) + sign; - - return code_index; -} - - -/*--------------------------------------------------------------------------* - * E_ACELP_code43bit - * - * Fixed bit-length arithmetic coding of pulses - * v - (input) pulse vector - * s - (output) encoded state - * n - (output) range of possible states (0...n-1) - * p - (output) number of pulses found - * len - (input) length of pulse vector - * trackstep - (input) step between tracks - *--------------------------------------------------------------------------*/ - -int16_t E_ACELP_code43bit( - const float code[], - uint32_t *ps, - int16_t *p, - uint16_t idxs[] ) -{ - int16_t j, k, track; - int16_t ind[32]; - int16_t tmp; - int32_t joint_index; - int32_t joint_offset = 3611648; /*offset for 3 pulses per track*/ - int16_t saved_bits = 0; - - for ( track = 0; track < 2; track++ ) - { - k = track * NPMAXPT; - ps[track] = fcb_encode_PI( code + track, 3 ); - p[track] = 3; - } - - for ( track = 2; track < NB_TRACK_FCB_4T; track++ ) - { - j = track * NPMAXPT; - for ( k = track; k < 64; k += 4 ) - { - if ( code[k] ) - { - tmp = k >> 2; - if ( code[k] < 0 ) - { - tmp += 16; - } - if ( fabs( code[k] ) > 1 ) - { - ind[j] = tmp; - ind[j + 1] = tmp; - break; - } - else - { - ind[j] = tmp; - j++; - } - } - } - k = track * NPMAXPT; - ps[track] = quant_2p_2N1( ind[k], ind[k + 1], 4 ); - p[track] = 2; - } - joint_index = ps[0] * 5472 + ps[1]; - if ( joint_index >= joint_offset ) - { - joint_index += joint_offset; - } - else - { - saved_bits += 1; - } - - idxs[0] = ( ( ps[2] << 9 ) + ps[3] ) & 0xffff; - idxs[1] = ( ( joint_index << 2 ) + ( ps[2] >> 7 ) ) & 0xffff; - idxs[2] = (uint16_t) ( joint_index >> 14 ); - - return saved_bits; -} -#endif diff --git a/lib_enc/cod4t64_fast.c b/lib_enc/cod4t64_fast.c index 2af4510a8..3e28b35a6 100644 --- a/lib_enc/cod4t64_fast.c +++ b/lib_enc/cod4t64_fast.c @@ -60,27 +60,6 @@ *---------------------------------------------------------------------*/ /*! r: return index (N+1 bits) */ -#ifndef IVAS_FLOAT_FIXED -static int16_t quant_1p_N1_L_subfr( - const int16_t nb_pos, /* i : number of positions */ - const int16_t pos, /* i : position of the pulse */ - const int16_t N /* i : number of bits for position */ -) -{ - int16_t mask, index; - - mask = ( ( 1 << N ) - 1 ); - - index = ( pos & mask ); - - if ( ( pos & nb_pos ) != 0 ) - { - index += 1 << N; - } - - return index; -} -#else static Word16 quant_1p_N1_L_subfr( const Word16 nb_pos, /* i : number of positions */ const Word16 pos, /* i : position of the pulse */ @@ -100,43 +79,6 @@ static Word16 quant_1p_N1_L_subfr( return index; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function find_best_pulse() - * - * Find best pulse - *-------------------------------------------------------------------*/ - -static int16_t find_best_pulse( - const int16_t L_subfr, - const int16_t nb_tracks, - const int16_t track, - const float dn[], - const float sign[], - int16_t *s ) -{ - int16_t m, i; - float temp, max_val; - - max_val = FLT_MIN; - m = track; - for ( i = track; i < L_subfr; i += nb_tracks ) - { - temp = dn[i] * sign[i]; - - if ( temp >= max_val ) - { - max_val = temp; - m = i; - } - } - - *s = (int16_t) sign[m]; - - return m; -} -#endif static Word16 find_best_pulse_fx( const Word16 L_subfr, const Word16 nb_tracks, @@ -171,646 +113,6 @@ static Word16 find_best_pulse_fx( return m; } -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function acelp_fast() - * - * Fast algebraic codebook search. - * Supports 10, 15, 17, 20, 24, and 26 bits codebooks. - *-------------------------------------------------------------------*/ - -void acelp_fast( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t cdk_index, /* i : codebook index */ - const float dn_orig[L_SUBFR], /* i : corr. between target and h[]. */ - const float cn[L_SUBFR], /* i : residual after long term prediction */ - const float H[L_SUBFR], /* i : impulse response of weighted synthesis filter */ - float code[L_SUBFR], /* o : algebraic (fixed) codebook excitation */ - float y[], /* o : filtered fixed codebook excitation */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t i, j, q, bits, bits_track, nb_pos, nb_pulse, track, nb_iter, nb_tracks; - int16_t skip_track[MAX_NUM_INTER], skip_track_max; - PulseConfig config; - enum TRACKPOS codetrackpos; - int16_t m[MAX_PULSES_STEREO], s[MAX_PULSES_STEREO], m_max[MAX_PULSES_STEREO], s_max[MAX_PULSES_STEREO]; - int16_t track_order[NB_TRACK_FCB_4T * MAX_NUM_INTER], m0_track[NB_TRACK_FCB_4T]; - int16_t ind_stream[NPMAXPT * NB_TRACK_FCB_4T], idx; - float G, G1, G2, G3, Gn, Gd, dn[L_SUBFR_MAX]; - float tmpF, y_tmp[L_SUBFR_MAX]; - float crit_num, crit_den, crit_num_max, crit_den_max; - float h_buf[4 * L_SUBFR_MAX], *h, *h_inv, *p_hn, alp_buf[2 * L_SUBFR_MAX], *alp, *alp_pos0, *alp_pos1, *alp_pos2, *alp_pos3; - float dndn, cncn, s_coef, bn_orig[L_SUBFR_MAX], cncn_track[NB_TRACK_FCB_4T]; - float max_val, temp, sign[L_SUBFR_MAX], max_track[MAX_NUM_INTER]; - float beta1, beta2; - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - nb_iter = NB_TRACK_FCB_4T; - nb_tracks = NB_TRACK_FCB_4T; - nb_pulse = 0; /* to avoid compilation warnings */ - - if ( L_subfr == L_SUBFR ) - { - config = PulseConfTable[cdk_index]; - bits = config.bits; - nb_pulse = config.nb_pulse; - codetrackpos = config.codetrackpos; - - if ( cdk_index == 2 ) - { - /* 12 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ - nb_tracks = NB_TRACK_FCB_2T; - nb_iter = NB_TRACK_FCB_2T; - } - else if ( nb_pulse == 2 ) - { - /* 10 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ - nb_iter = NB_TRACK_FCB_4T - 2; - } - else if ( nb_pulse == 3 ) - { - if ( codetrackpos == TRACKPOS_FIXED_FIRST ) - { - /* 15 bits, 3 pulses, 4 tracks: 1110 (fixed track to first) */ - nb_iter = NB_TRACK_FCB_4T - 1; - } - else if ( codetrackpos == TRACKPOS_FREE_THREE ) - { - /* 17 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ - nb_iter = NB_TRACK_FCB_4T; - } - } - } - else /* L_subfr == 2*L_SUBFFR */ - { - bits = cdk_index; - codetrackpos = -1; /* to avoid compilation warnings */ - - if ( cdk_index == 14 ) - { - /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ - nb_pulse = 2; - nb_iter = NB_TRACK_FCB_2T; - codetrackpos = TRACKPOS_FIXED_TWO; - nb_tracks = NB_TRACK_FCB_2T; - } - else if ( cdk_index == 12 ) - { - /* 12 bits, 2 pulses, 4 tracks: 1010 (used only even tracks) */ - nb_pulse = 2; - nb_iter = NB_TRACK_FCB_4T - 2; - codetrackpos = TRACKPOS_FIXED_EVEN; - } - else if ( cdk_index == 18 ) - { - /* 18 bits, 3 pulses, 4 tracks: 1110 (used first three tracks) */ - nb_pulse = 3; - nb_iter = NB_TRACK_FCB_4T - 1; - codetrackpos = TRACKPOS_FIXED_FIRST; - } - else if ( cdk_index == 20 ) - { - /* 20 bits, 3 pulses, 4 tracks (used all tracks): 1110, 1101, 1011, 0111 */ - nb_pulse = 3; - nb_iter = NB_TRACK_FCB_4T; - codetrackpos = TRACKPOS_FREE_THREE; - } - else if ( cdk_index == 24 ) - { - /* 24 bits, 4 pulses, 4 tracks: 1111 */ - nb_pulse = 4; - nb_iter = NB_TRACK_FCB_4T; - codetrackpos = TRACKPOS_FIXED_FIRST; - } - } - - beta1 = BETA_BN1; - beta2 = BETA_BN2; - - if ( cdk_index <= 2 ) - { - beta1 = BETA_BN1 * 2; - beta2 = BETA_BN2 * 2; - } - - /*-----------------------------------------------------------------* - * Find signal bn[] and sign pre-selection vector sign[]. - *-----------------------------------------------------------------*/ - - dndn = sum2_f( dn_orig, L_subfr ) + 0.01f; - - cncn = 0.1f; - for ( q = 0; q < nb_tracks; q++ ) - { - cncn_track[q] = 0.1f; - - for ( i = 0; i < L_subfr; i += nb_tracks ) - { - cncn_track[q] += ( cn[i + q] * cn[i + q] ); - } - cncn += cncn_track[q]; - } - - s_coef = sqrtf( dndn / cncn ); - - for ( i = 0; i < L_subfr; i++ ) - { - temp = ( s_coef * cn[i] ) + ( beta1 * dn_orig[i] ); - bn_orig[i] = temp; - - if ( temp >= 0 ) - { - sign[i] = 1.0f; - } - else - { - sign[i] = -1.0f; - } - } - - /*-----------------------------------------------------------------* - * Compute buffer h_buf[]. - *-----------------------------------------------------------------*/ - - h = h_buf; - h_inv = h_buf + ( 2 * L_subfr ); - - for ( i = 0; i < L_subfr; i++ ) - { - *h++ = 0.0f; - *h_inv++ = 0.0f; - } - - for ( i = 0; i < L_subfr; i++ ) - { - h[i] = H[i]; - h_inv[i] = -H[i]; - } - - /*-----------------------------------------------------------------* - * Approximate FI[i][j] by alp[abs(i-j)] and compute buffer alp_buf[]. - *-----------------------------------------------------------------*/ - - alp = alp_buf + L_subfr; - - for ( i = 0; i < L_subfr; i++ ) - { - *alp = 0.0f; - - for ( j = i; j < L_subfr; j++ ) - { - *alp += H[j] * H[j - i]; - } - alp_buf[L_subfr - i] = *alp++; - } - - alp = alp_buf + L_subfr; - - for ( q = 0; q < nb_tracks; q++ ) - { - max_track[q] = 0.0f; - - for ( i = q; i < L_subfr; i += nb_tracks ) - { - temp = bn_orig[i] * sign[i]; - - if ( temp >= max_track[q] ) - { - max_track[q] = temp; - m0_track[q] = i; - } - } - } - - /*-----------------------------------------------------------------* - * Track re-order - *-----------------------------------------------------------------*/ - - if ( nb_tracks == NB_TRACK_FCB_2T ) - { - track_order[0] = 0; - track_order[1] = 1; - track_order[2] = 1; - track_order[3] = 0; - } - else - { - /* skip certain tracks if number of pulses is lower than number of tracks */ - if ( nb_pulse == 2 && nb_tracks == NB_TRACK_FCB_4T ) - { - max_track[NB_TRACK_FCB_4T - 3] = -1; - max_track[NB_TRACK_FCB_4T - 1] = -1; - } - else if ( nb_pulse == 3 && codetrackpos == TRACKPOS_FIXED_FIRST ) - { - max_track[NB_TRACK_FCB_4T - 1] = -1; - } - - for ( q = 0; q < nb_tracks; q++ ) - { - i = maximum( max_track, nb_tracks, &tmpF ); - track_order[q] = i; - max_track[i] = -1.0f; - } - - track_order[4] = track_order[1]; - track_order[5] = track_order[0]; - track_order[6] = track_order[2]; - track_order[7] = track_order[3]; - - track_order[8] = track_order[2]; - track_order[9] = track_order[0]; - track_order[10] = track_order[1]; - track_order[11] = track_order[3]; - - track_order[12] = track_order[3]; - track_order[13] = track_order[0]; - track_order[14] = track_order[1]; - track_order[15] = track_order[2]; - - if ( cdk_index == 3 ) - { - track_order[12] = track_order[2]; - track_order[13] = track_order[1]; - track_order[14] = track_order[0]; - - track_order[16] = track_order[1]; - track_order[17] = track_order[2]; - track_order[18] = track_order[0]; - nb_iter = 5; - } - else if ( cdk_index == 4 ) - { - track_order[16] = track_order[2]; - track_order[17] = track_order[3]; - track_order[18] = track_order[1]; - track_order[19] = track_order[0]; - nb_iter = 5; - } - } - - /*-----------------------------------------------------------------* - * Main searching loop - *-----------------------------------------------------------------*/ - - crit_num_max = -1.0f; - crit_den_max = 1.0f; - skip_track_max = -1; - - for ( q = 0; q < nb_iter; q++ ) - { - /*-----------------------------------------------------------------* - * First pulse search - *-----------------------------------------------------------------*/ - - track = track_order[q * nb_tracks]; - m[0] = m0_track[track]; - s[0] = (int16_t) sign[m[0]]; - - /*-----------------------------------------------------------------* - * Second pulse search - *-----------------------------------------------------------------*/ - - if ( nb_tracks == NB_TRACK_FCB_2T ) - { - Gn = s[0] * dn_orig[m[0]]; - Gd = alp[0]; - G = Gn / Gd; - G *= s[0]; - - track = track_order[q * nb_tracks + 1]; - alp_pos0 = alp - m[0] + track; - - for ( i = track; i < L_subfr; i += NB_TRACK_FCB_2T ) - { - dn[i] = dn_orig[i] - G * ( *alp_pos0 ); - alp_pos0 += NB_TRACK_FCB_2T; - } - - m[1] = find_best_pulse( L_subfr, NB_TRACK_FCB_2T, track, dn, sign, &s[1] ); - } - else - { - Gn = s[0] * dn_orig[m[0]]; - Gd = alp[0]; - G = Gn; - G *= s[0]; - - track = track_order[q * nb_tracks + 1]; - alp_pos0 = alp - m[0] + track; - - dndn = 0.1f; - for ( i = track; i < L_subfr; i += nb_tracks ) - { - dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ); - alp_pos0 += nb_tracks; - dndn += ( dn[i] * dn[i] ); - } - - s_coef = sqrtf( dndn / cncn_track[track] ); - - max_val = FLT_MIN; - m[1] = track; - for ( i = track; i < L_subfr; i += nb_tracks ) - { - dn[i] = ( s_coef * cn[i] ) + ( beta2 * dn[i] ); - temp = dn[i] * sign[i]; - - if ( temp >= max_val ) - { - max_val = temp; - m[1] = i; - } - } - - s[1] = (int16_t) sign[m[1]]; - } - - /*-----------------------------------------------------------------* - * Third pulse search - *-----------------------------------------------------------------*/ - - if ( nb_pulse >= 3 ) - { - Gn += s[1] * dn_orig[m[1]]; - Gd += alp[0] + 2 * s[0] * s[1] * alp[m[0] - m[1]]; - G = Gn; - G1 = G * s[1]; - G *= s[0]; - - track = track_order[q * nb_tracks + 2]; - alp_pos0 = alp - m[0] + track; - alp_pos1 = alp - m[1] + track; - - for ( i = track; i < L_subfr; i += nb_tracks ) - { - dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ); - alp_pos0 += nb_tracks; - alp_pos1 += nb_tracks; - } - - m[2] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[2] ); - } - - /*-----------------------------------------------------------------* - * Fourth pulse search - *-----------------------------------------------------------------*/ - - if ( nb_pulse >= 4 ) - { - Gn += s[2] * dn_orig[m[2]]; - Gd += alp[0] + 2 * s[0] * s[2] * alp[m[0] - m[2]] + 2 * s[1] * s[2] * alp[m[1] - m[2]]; - G = Gn; - G1 = G * s[1]; - G2 = G * s[2]; - G *= s[0]; - - track = track_order[q * nb_tracks + 3]; - alp_pos0 = alp - m[0] + track; - alp_pos1 = alp - m[1] + track; - alp_pos2 = alp - m[2] + track; - - for ( i = track; i < L_subfr; i += nb_tracks ) - { - dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ); - alp_pos0 += nb_tracks; - alp_pos1 += nb_tracks; - alp_pos2 += nb_tracks; - } - - m[3] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[3] ); - } - else - { - skip_track[q] = track_order[q * nb_tracks + 3]; - } - - /*-----------------------------------------------------------------* - * Fifth pulse search - *-----------------------------------------------------------------*/ - - if ( nb_pulse >= 5 ) - { - Gn += s[3] * dn_orig[m[3]]; - Gd += alp[0] + 2 * s[0] * s[3] * alp[m[0] - m[3]] + 2 * s[1] * s[3] * alp[m[1] - m[3]] + 2 * s[2] * s[3] * alp[m[2] - m[3]]; - G = Gn; - G1 = G * s[1]; - G2 = G * s[2]; - G3 = G * s[3]; - G *= s[0]; - - if ( cdk_index == 6 ) - { - track = 0; /* always track 0 */ - - alp_pos0 = alp - m[0]; - alp_pos1 = alp - m[1]; - alp_pos2 = alp - m[2]; - alp_pos3 = alp - m[3]; - - for ( i = track; i < L_subfr; i += nb_tracks ) - { - dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ) - G3 * ( *alp_pos3 ); - alp_pos0 += nb_tracks; - alp_pos1 += nb_tracks; - alp_pos2 += nb_tracks; - alp_pos3 += nb_tracks; - } - - m[4] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[4] ); - } - else /* cdk_index == 7 (26 bits codebook) */ - { - alp_pos0 = alp - m[0]; - alp_pos1 = alp - m[1]; - alp_pos2 = alp - m[2]; - alp_pos3 = alp - m[3]; - - for ( i = 0; i < L_subfr; i++ ) - { - dn[i] = Gd * dn_orig[i] - G * ( *alp_pos0 ) - G1 * ( *alp_pos1 ) - G2 * ( *alp_pos2 ) - G3 * ( *alp_pos3 ); - alp_pos0++; - alp_pos1++; - alp_pos2++; - alp_pos3++; - } - - i = emaximum( dn, L_subfr, &temp ); - track = i % nb_tracks; - - m[4] = find_best_pulse( L_subfr, nb_tracks, track, dn, sign, &s[4] ); - } - skip_track[q] = track; - } - - /*-----------------------------------------------------------------* - * - Build the filtered codeword and criterion computing. - * - Memorize the best code positions & signs, and the best filtered codevector. - *-----------------------------------------------------------------*/ - - crit_num = 0.0f; - set_zero( y_tmp, L_subfr ); - - for ( j = 0; j < nb_pulse; j++ ) - { - p_hn = ( ( s[j] > 0 ) ? h - m[j] : h_inv - m[j] ); - - for ( i = 0; i < L_subfr; i++ ) - { - y_tmp[i] += *p_hn++; - } - - crit_num += s[j] * dn_orig[m[j]]; - } - - crit_num = crit_num * crit_num; - crit_den = sum2_f( y_tmp, L_subfr ); - - if ( crit_num * crit_den_max >= crit_den * crit_num_max ) - { - crit_num_max = crit_num; - crit_den_max = crit_den; - - for ( j = 0; j < nb_pulse; j++ ) - { - m_max[j] = m[j]; - s_max[j] = s[j]; - } - - mvr2r( y_tmp, y, L_subfr ); - skip_track_max = skip_track[q]; - } - } - - /*-----------------------------------------------------------------* - * Reconstruct the best codevector, - * compute index of codevector and write it into the bitstream. - *-----------------------------------------------------------------*/ - - set_zero( code, L_subfr ); - for ( q = 0; q < nb_pulse; q++ ) - { - code[m_max[q]] += s_max[q]; - } - - if ( bits == 12 || bits == 14 ) - { - /* 12 bits, 2 pulses, 2 tracks 11 used all tracks */ - i = 6; - j = 0x800; - q = 0x20; - - if ( L_subfr == 2 * L_SUBFR ) - { - /* 14 bits, 2 pulses, 2 tracks: 11 (used all tracks) */ - i = 7; - j = 0x2000; - q = 0x40; - } - - if ( m_max[0] % NB_TRACK_FCB_2T == 1 ) - { - idx = ( ( m_max[1] / NB_TRACK_FCB_2T ) << i ) + ( m_max[0] / NB_TRACK_FCB_2T ); - - if ( s_max[1] < 0.0f ) - { - idx += j; - } - - if ( s_max[0] < 0.0f ) - { - idx += q; - } - } - else - { - idx = ( ( m_max[0] / NB_TRACK_FCB_2T ) << i ) + ( m_max[1] / NB_TRACK_FCB_2T ); - - if ( s_max[0] < 0.0f ) - { - idx += j; - } - - if ( s_max[1] < 0.0f ) - { - idx += q; - } - } - - push_indice( hBstr, IND_ALG_CDBK_2T32, idx, bits ); - } - else - { - /* compute index of codevector */ - set_s( ind_stream, -1, NPMAXPT * nb_tracks ); - - bits_track = 4; - nb_pos = NB_POS_FCB_4T; - - if ( L_subfr == 2 * L_SUBFR ) - { - bits_track = 5; - nb_pos = NB_POS_FCB_4T_128; - } - - for ( q = 0; q < nb_pulse; q++ ) - { - i = ( m_max[q] % NB_TRACK_FCB_4T ) * NPMAXPT; /* track number */ - if ( ind_stream[i] >= 0 ) - { - i++; - } - ind_stream[i] = m_max[q] / NB_TRACK_FCB_4T; /* pos of pulse */ - - if ( s_max[q] < 0 ) - { - ind_stream[i] += nb_pos; - } - } - - if ( codetrackpos == TRACKPOS_FREE_THREE || codetrackpos == TRACKPOS_FREE_ONE ) - { - push_indice( hBstr, IND_ALG_CDBK_4T64, skip_track_max, 2 ); - } - - if ( nb_pulse < 5 ) - { - for ( q = 0; q < NB_TRACK_FCB_4T; q++ ) - { - j = q * NPMAXPT; - if ( ind_stream[j] != -1 ) - { - idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track ); - push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 ); - } - } - } - else - { - for ( q = 0; q < NB_TRACK_FCB_4T; q++ ) - { - j = q * NPMAXPT; - if ( q == skip_track_max ) - { - idx = quant_2p_2N1( ind_stream[j], ind_stream[j + 1], bits_track ); - push_indice( hBstr, IND_ALG_CDBK_4T64, idx, ( 2 * bits_track ) + 1 ); - } - else - { - idx = quant_1p_N1_L_subfr( nb_pos, ind_stream[j], bits_track ); - push_indice( hBstr, IND_ALG_CDBK_4T64, idx, bits_track + 1 ); - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * Function acelp_fast() * diff --git a/lib_enc/cod_ace.c b/lib_enc/cod_ace.c index 332d33d3b..3ee7cc7b2 100644 --- a/lib_enc/cod_ace.c +++ b/lib_enc/cod_ace.c @@ -40,390 +40,3 @@ #include "options.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * coder_acelp() - * - * Encode ACELP frame - *-------------------------------------------------------------------*/ - -void coder_acelp( - Encoder_State *st, /* i/o: coder memory state */ - const float A[], /* i : coefficients 4xAz[M+1] */ - const float Aq[], /* i : coefficients 4xAz_q[M+1] */ - const float speech[], /* i : speech[-M..lg] */ - LPD_state *LPDmem, /* i/o: ACELP memories */ - int16_t *prm, /* o : acelp parameters */ - const float stab_fac, - const int16_t target_bits, - float *gain_pitch_buf, /* o : gain pitch values */ - float *gain_code_buf, /* o : gain code values */ - float *pitch_buf, /* o : pitch values for each subfr.*/ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - int16_t i, i_subfr; - int16_t T0, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res, T0_frac; - float tmp, Es_pred; - float gain_pit, gain_code, voice_fac; - ACELP_CbkCorr g_corr; - float g_corr2[6]; - const float *p_A, *p_Aq; - float h1[L_SUBFR]; /* weighted impulse response of LP */ - float code[L_SUBFR]; - float cn[L_SUBFR]; - float xn[L_SUBFR]; - float xn2[L_SUBFR]; - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float y2[L_SUBFR]; /* Filtered adaptive excitation */ - float res_save; - float exc_buf[L_EXC_MEM + L_FRAME16k + 1], *exc; - float exc2[L_SUBFR]; - float *syn, syn_buf[M + L_FRAME16k + L_FRAME16k / 2]; /*128 for the memory, L_FRAME for the current synth and 128 for the ZIR for next TCX*/ - float syn2[L_FRAME16k]; - float norm_gain_code, gain_inov; - int16_t clip_gain; - float gain_code2; - float code2[L_SUBFR]; - float y22[L_SUBFR]; /* Filtered adaptive excitation */ - int16_t lp_select; - float *pt_pitch, *pt_gain_pitch, *pt_gain_code; - float error; - float gain_preQ; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - ACELP_config *acelp_cfg; - - acelp_cfg = &( st->acelp_cfg ); - - /* Configure ACELP */ - BITS_ALLOC_config_acelp_IVAS( target_bits, st->coder_type, acelp_cfg, st->narrowBand, st->nb_subfr ); - - /*------------------------------------------------------------------------* - * Initialize buffers * - *------------------------------------------------------------------------*/ - - set_f( code_preQ, 0.f, L_SUBFR ); - gain_preQ = 0.0f; - - /* Reset phase dispersion */ - if ( st->last_core > ACELP_CORE ) - { - set_zero( st->hLPDmem->dispMem_flt, 8 ); - } - - /* set excitation memory*/ - exc = exc_buf + L_EXC_MEM; - mvr2r( LPDmem->old_exc_flt, exc_buf, L_EXC_MEM ); - *( exc + st->L_frame ) = 0.f; /*to solve a warning*/ - - /* Init syn buffer */ - syn = syn_buf + M; - mvr2r( LPDmem->mem_syn_flt, syn_buf, M ); - - pt_pitch = pitch_buf; - pt_gain_pitch = gain_pitch_buf; - pt_gain_code = gain_code_buf; - - T0 = 0; - T0_res = 0; - T0_frac = 0; - - error = 0.0f; - - /*---------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *---------------------------------------------------------------*/ - - calc_residu( speech, exc, Aq, st->L_frame ); - - /*------------------------------------------------------------------------* - * Find and quantize mean_ener_code for gain quantizer * - *------------------------------------------------------------------------*/ - - if ( acelp_cfg->nrg_mode > 0 ) - { - Es_pred_enc( &Es_pred, prm, st->L_frame, L_SUBFR, exc, st->voicing, acelp_cfg->nrg_bits, acelp_cfg->nrg_mode > 1 ); - prm++; - } - else - { - Es_pred = 0.f; - } - - if ( st->L_frame == L_FRAME ) - { - mvr2r( Aq + 2 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - else - { - mvr2r( Aq + 3 * ( M + 1 ), st->hBWE_TD->cur_sub_Aq, ( M + 1 ) ); - } - - /*------------------------------------------------------------------------* - * Loop for every subframe in the analysis frame * - *------------------------------------------------------------------------* - * To find the pitch and innovation parameters. The subframe size is * - * L_SUBFR and the loop is repeated L_FRAME_PLUS/L_SUBFR times. * - * - compute impulse response of weighted synthesis filter (h1[]) * - * - compute the target signal for pitch search * - * - find the closed-loop pitch parameters * - * - encode the pitch delay * - * - update the impulse response h1[] by including fixed-gain pitch * - * - find target vector for codebook search * - * - correlation between target vector and impulse response * - * - codebook search * - * - encode codebook address * - * - VQ of pitch and codebook gains * - * - find synthesis speech * - * - update states of weighting filter * - *------------------------------------------------------------------------*/ - - p_A = A; - p_Aq = Aq; - - res_save = exc[0]; - - for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) - { - /* Restore exc[i_subfr] and save next exc[L_SUBFR+i_subfr] */ - exc[i_subfr] = res_save; - res_save = exc[L_SUBFR + i_subfr]; - - /*--------------------------------------------------------------------------* - * Find target for pitch search (xn[]), target for innovation search (cn[]) * - * and impulse response of the weighted synthesis filter (h1[]). * - *--------------------------------------------------------------------------*/ - - find_targets( speech, &syn[i_subfr - M], i_subfr, &LPDmem->mem_w0_flt, p_Aq, exc, L_SUBFR, p_A, st->preemph_fac_flt, xn, cn, h1 ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); - - /*-----------------------------------------------------------------* - * - find unity gain pitch excitation (adaptive codebook entry) * - * with fractional interpolation. * - * - find filtered pitch exc. y1[]=exc[] convolved with h1[]) * - * - compute pitch gain1 * - *-----------------------------------------------------------------*/ - - if ( acelp_cfg->ltp_bits != 0 ) - { - /* pitch lag coding */ - Mode2_pit_encode( acelp_cfg->ltp_mode, i_subfr, &prm, &exc[i_subfr], st->pitch, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, &T0, &T0_frac, &T0_res, h1, xn, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); - - /* find pitch excitation */ - if ( st->pit_res_max == 6 ) - { - if ( T0_res == ( st->pit_res_max >> 1 ) ) - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); - } - else - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter6_2, PIT_L_INTERPOL6_2, PIT_UP_SAMP6 ); - } - } - else - { - if ( T0_res == ( st->pit_res_max >> 1 ) ) - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - else - { - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - } - - /* filter adaptive codebook */ - lp_select = lp_filt_exc_enc( MODE2, st->coder_type, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr2, clip_gain, &( gain_pit ), &( acelp_cfg->ltf_mode ) ); - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - *prm = lp_select; - prm++; - } - - g_corr.y1y1_flt = g_corr2[0]; - g_corr.xy1_flt = -0.5f * ( g_corr2[1] - 0.01f ) + 0.01f; - } - else - { - /* No adaptive codebook (UC) */ - gain_pit = 0.f; - g_corr.xy1_flt = 0.f; - g_corr.y1y1_flt = 0.f; - set_zero( y1, L_SUBFR ); - set_zero( exc + i_subfr, L_SUBFR ); - T0 = L_SUBFR; - T0_frac = 0; - T0_res = 1; - } - - if ( st->igf ) - { - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, st->L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, 0 ); - } - - pitch_buf[i_subfr / L_SUBFR] = (float) T0 + (float) T0_frac / (float) T0_res; - - /*----------------------------------------------------------------------* - * Encode the algebraic innovation * - *----------------------------------------------------------------------*/ - - E_ACELP_innovative_codebook( exc, T0, T0_frac, T0_res, gain_pit, LPDmem->tilt_code_flt, acelp_cfg, i_subfr, p_Aq, h1, xn, cn, y1, y2, st->acelp_autocorr, &prm, code, st->L_frame, st->last_L_frame, st->total_brate ); - - E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); - g_corr.y2y2_flt = 0.01F + g_corr2[2]; - g_corr.xy2_flt = 0.01F + -0.5f * g_corr2[3]; - g_corr.y1y2_flt = 0.01F + 0.5f * g_corr2[4]; - - g_corr.xx_flt = 0.01F + dotp( xn, xn, L_SUBFR ); - - /*----------------------------------------------------------------------* - * Add Gaussian excitation * - *----------------------------------------------------------------------*/ - - if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] == 7 ) - { - assert( gain_pit == 0.f ); - - gauss_L2( h1, code2, y2, y22, &gain_code2, g_corr2, LPDmem->tilt_code_flt, p_Aq, acelp_cfg->formant_enh_num_flt, &( st->seed_acelp ) ); - - g_corr.y1y1_flt = g_corr2[0]; - g_corr.y1y2_flt = g_corr2[4]; - } - else - { - gain_code2 = 0.f; - set_zero( code2, L_SUBFR ); - set_zero( y22, L_SUBFR ); - } - - /*----------------------------------------------------------* - * - Compute the fixed codebook gain * - * - quantize fixed codebook gain * - *----------------------------------------------------------*/ - - encode_acelp_gains( code, acelp_cfg->gains_mode[i_subfr / L_SUBFR], Es_pred, clip_gain, &g_corr, &gain_pit, &gain_code, &prm, &norm_gain_code, &gain_inov, L_SUBFR, code2, &gain_code2, st->flag_noisy_speech_snr ); - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - /*----------------------------------------------------------* - * - voice factor (for codebook tilt sharpening) * - *----------------------------------------------------------*/ - - LPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, acelp_cfg->voice_tilt ); - - if ( st->Opt_RF_ON ) - { - st->hRF->rf_tilt_buf_flt[i_subfr / L_SUBFR] = LPDmem->tilt_code_flt; - } - - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - LPDmem->mem_w0_flt = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; - - /*-------------------------------------------------------* - * - Find the total excitation. * - *-------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i] = gain_pit * exc[i + i_subfr]; - exc2[i] += gain_code2 * code2[i]; - exc[i + i_subfr] = exc2[i] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( st->L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, 0, 0 ); - - /*---------------------------------------------------------* - * Enhance the excitation * - *---------------------------------------------------------*/ - - enhancer( MODE2, -1, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], 0, st->coder_type, st->L_frame, voice_fac, stab_fac, norm_gain_code, gain_inov, &( LPDmem->gc_threshold_flt ), code, exc2, gain_pit, LPDmem->dispMem_flt ); - - /*----------------------------------------------------------* - * - compute the synthesis speech * - *----------------------------------------------------------*/ - - syn_filt( p_Aq, M, exc2, &syn2[i_subfr], L_SUBFR, LPDmem->mem_syn2_flt, 1 ); - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, &syn[i_subfr - M], 0 ); - - /*----------------------------------------------------------* - * Save buffers for BPF * - *----------------------------------------------------------*/ - - *pt_pitch = ( (float) T0 + (float) T0_frac / (float) T0_res + 0.5f ); - *pt_gain_pitch = gain_pit; - *pt_gain_code = gain_code; - - /*----------------------------------------------------------* - * Update * - *----------------------------------------------------------*/ - - p_A += ( M + 1 ); - p_Aq += ( M + 1 ); - pt_pitch++; - pt_gain_pitch++; - pt_gain_code++; - - if ( st->hPlcExt != NULL ) - { - st->hPlcExt->T0_4th = T0; - } - - } /* end of subframe loop */ - - p_A -= ( M + 1 ); - p_Aq -= ( M + 1 ); - - - /*----------------------------------------------------------* - * Update LPD memory * - *----------------------------------------------------------*/ - - mvr2r( exc + st->L_frame - L_EXC_MEM, LPDmem->old_exc_flt, L_EXC_MEM ); - mvr2r( syn + st->L_frame - M, LPDmem->mem_syn_flt, M ); - mvr2r( syn + st->L_frame - L_SYN_MEM, LPDmem->mem_syn_r_flt, L_SYN_MEM ); - - if ( st->hPlcExt != NULL ) - { - mvr2r( exc + st->L_frame - L_EXC_MEM - 8, st->hPlcExt->old_exc, 8 ); - } - - /*----------------------------------------------------------* - * ZIR at the end of the ACELP frame (for TCX) * - *----------------------------------------------------------*/ - - mvr2r( syn2, syn, st->L_frame ); - tmp = LPDmem->syn_flt[M]; - deemph( syn, st->preemph_fac_flt, st->L_frame, &tmp ); - if ( st->hTcxEnc != NULL ) - { - mvr2r( syn + st->L_frame / 2, st->hTcxEnc->Txnq_flt, st->L_frame / 2 ); - } - mvr2r( syn + st->L_frame - ( M + 1 ), LPDmem->syn_flt, M + 1 ); - mvr2r( syn, st->synth_flt, st->L_frame ); - - /*Update MODE1*/ - mvr2r( p_Aq, st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = Es_pred; - - return; -} -#endif diff --git a/lib_enc/cod_tcx.c b/lib_enc/cod_tcx.c index 3e4e368b0..a07ee551a 100644 --- a/lib_enc/cod_tcx.c +++ b/lib_enc/cod_tcx.c @@ -43,61 +43,10 @@ #include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "prot_fx_enc.h" #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * HBAutocorrelation() - * - * - *-------------------------------------------------------------------*/ - -void HBAutocorrelation( - TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ - const int16_t left_overlap_mode, /* i : overlap mode of left window half */ - const int16_t right_overlap_mode, /* i : overlap mode of right window half */ - float speech[], /* i : synthesis */ - int16_t L_frame, /* i : frame length */ - float *r /* o : autocorrelations vector */ -) -{ - int16_t i, j, left_overlap, right_overlap; - float s; - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - - /*-----------------------------------------------------------* - * Windowing * - *-----------------------------------------------------------*/ - - WindowSignal_flt( hTcxCfg, hTcxCfg->tcx_offset, left_overlap_mode, right_overlap_mode, &left_overlap, &right_overlap, speech, &L_frame, xn_buf, 1, 0 ); - - /*-----------------------------------------------------------* - * Autocorrelation * - *-----------------------------------------------------------*/ - - for ( i = 0; i <= M; i++ ) - { - s = 0.0; - - for ( j = 0; j < L_frame + ( left_overlap + right_overlap ) / 2 - i; j++ ) - { - s += xn_buf[j] * xn_buf[j + i]; - } - r[i] = s; - } - - if ( r[0] < 100.0 ) - { - r[0] = 100.0; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -110,7 +59,6 @@ void HBAutocorrelation( #define SIMILAR_TNS_THRESHOLD_FX_IN_Q15 ( 1311 ) #define TNS_GAIN_THRESHOLD_FOR_WHITE ( 3.0f ) #define TNS_GAIN_THRESHOLD_FOR_WHITE_FX_IN_Q7 ( 384 ) -#ifdef IVAS_FLOAT_FIXED void TNSAnalysisStereo_fx( Encoder_State **sts, /* i : encoder state handle */ Word32 *mdst_spectrum_fx[CPE_CHANNELS][NB_DIV], /* o : MDST spectrum Qx*/ @@ -812,2075 +760,3 @@ void TNSAnalysisStereo_fx( } return; } -#else -void TNSAnalysisStereo( - Encoder_State **sts, /* i : encoder state handle */ - float *mdst_spectrum[CPE_CHANNELS][NB_DIV], /* o : MDST spectrum */ - const int16_t bWhitenedDomain, /* i : whitened domain flag */ - int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : number of tns parameters put into prm */ - int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : number of tns bits in the frame */ - int16_t param_core[][NB_DIV * NPRM_DIV], /* o : TNS parameters */ - const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ -) -{ - int16_t ch, k, L_spec, L_frame, nSubframes, iFilter; - float *spectrum; - Encoder_State *st = NULL; - TCX_ENC_HANDLE hTcxEnc = NULL; - int16_t individual_decision[NB_DIV]; - float maxPredictionGain = 0.f, meanPredictionGain; - - individual_decision[0] = 0; - individual_decision[1] = 0; - L_spec = -1; - L_frame = -1; - - /* TNS filter analysis, loop over channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - hTcxEnc = st->hTcxEnc; - - nSubframes = ( hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - /* reset tns on whitened domain flag */ - if ( !bWhitenedDomain ) - { - hTcxEnc->bTnsOnWhithenedSpectra[k] = 0; - hTcxEnc->fUseTns[k] = 0; - } - - if ( st->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) - { - - spectrum = hTcxEnc->spectrum[k]; - L_frame = hTcxEnc->L_frameTCX; - st->hTcxCfg->pCurrentTnsConfig = &st->hTcxCfg->tnsConfig[hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( st->last_core == ACELP_CORE )]; - L_spec = st->hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; - - /*-----------------------------------------------------------* - * Temporal Noise Shaping analysis * - *-----------------------------------------------------------*/ - - if ( hTcxEnc->transform_type[k] == TCX_5 ) - { - /* rearrange LF sub-window lines prior to TNS analysis & filtering */ - tcx5TnsGrouping( L_frame >> 2, L_spec >> 1, spectrum ); - } - - /* WMOPS: All initializations are either for safety or static (tables) and thus not to be counted */ - ResetTnsData_flt( &hTcxEnc->tnsData[k] ); - if ( st->hTcxCfg->pCurrentTnsConfig->maxOrder <= 0 ) - { - break; - } - - CalculateTnsFilt( st->hTcxCfg->pCurrentTnsConfig, spectrum, &hTcxEnc->tnsData[k], NULL ); - } - } - } - - if ( !mct_on ) - { - /* TNS decision */ - /* if framing differs between channels, keep the filter decision per channel */ - if ( ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] && - sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || - sts[0]->hTcxCfg->fIsTNSAllowed != sts[1]->hTcxCfg->fIsTNSAllowed ) - { - individual_decision[0] = individual_decision[1] = 1; - } - else if ( bWhitenedDomain ) - { - nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - for ( k = 0; k < nSubframes; k++ ) - { - if ( sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] != sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) - { - individual_decision[k] = 1; - } - } - } - - /* framing equal, check for similar filters, if very similar (also indicator for and M signal), - * use at least the same decision, maybe use the same filter - */ - { - int16_t isTCX10; - isTCX10 = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 0 : 1; - - nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - if ( sts[0]->hTcxCfg->fIsTNSAllowed && individual_decision[k] != 1 && ( !bWhitenedDomain || sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) - { - float maxPredGain = -1.0f; - sts[0]->hTcxCfg->pCurrentTnsConfig = &sts[0]->hTcxCfg->tnsConfig[sts[0]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[0]->last_core == ACELP_CORE )]; - sts[1]->hTcxCfg->pCurrentTnsConfig = &sts[1]->hTcxCfg->tnsConfig[sts[1]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[1]->last_core == ACELP_CORE )]; - - for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - STnsFilter *pFilter[2]; - struct TnsParameters const *pTnsParameters[2]; - pFilter[0] = sts[0]->hTcxEnc->tnsData[k].filter + iFilter; - pTnsParameters[0] = sts[0]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; - pFilter[1] = sts[1]->hTcxEnc->tnsData[k].filter + iFilter; - pTnsParameters[1] = sts[1]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; - - /* if prediction gain and avgSqrCoef are both close we are pretty sure the filters are quite similar, use the avg of - * both filters for the decision - */ - meanPredictionGain = ( pFilter[0]->predictionGain_flt + pFilter[1]->predictionGain_flt ) * 0.5f; - maxPredictionGain = max( maxPredictionGain, meanPredictionGain ); - - if ( ( pFilter[0]->predictionGain_flt > pTnsParameters[0]->minPredictionGain_flt ) && ( sts[0]->element_brate < IVAS_80k ) && - ( pFilter[1]->predictionGain_flt > pTnsParameters[1]->minPredictionGain_flt ) && ( sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) ) - { - pFilter[0]->predictionGain_flt = pFilter[1]->predictionGain_flt = meanPredictionGain; /* more TNS filter sync at 48kbps */ - } - if ( ( fabs( pFilter[0]->predictionGain_flt - pFilter[1]->predictionGain_flt ) < SIMILAR_TNS_THRESHOLD * meanPredictionGain ) && - ( sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) ) - { - float maxAvgSqrCoef = max( pFilter[0]->avgSqrCoef_flt, pFilter[1]->avgSqrCoef_flt ); - float meanLtpGain = ( sts[0]->hTcxEnc->tcxltp_gain_flt + sts[1]->hTcxEnc->tcxltp_gain_flt ) * 0.5f; - maxPredGain = max( maxPredGain, meanPredictionGain ); - if ( ( meanPredictionGain > pTnsParameters[0]->minPredictionGain_flt ) || ( maxAvgSqrCoef > pTnsParameters[0]->minAvgSqrCoef_flt ) ) - { - if ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 || sts[1]->hTcxEnc->tnsData[k].nFilters > 0 || isTCX10 || meanLtpGain < 0.6f ) - { - ++sts[0]->hTcxEnc->tnsData[k].nFilters; - pFilter[0]->filterType = TNS_FILTER_ON; - ++sts[1]->hTcxEnc->tnsData[k].nFilters; - pFilter[1]->filterType = TNS_FILTER_ON; - } - else - { - const float maxEnergyChange = ( GetTCXMaxenergyChange( sts[0]->hTranDet, isTCX10, NSUBBLOCKS, 3 ) + GetTCXMaxenergyChange( sts[1]->hTranDet, isTCX10, NSUBBLOCKS, 3 ) ) * 0.5f; - - if ( maxEnergyChange >= pTnsParameters[0]->minEnergyChange_flt ) - { - ++sts[0]->hTcxEnc->tnsData[k].nFilters; - pFilter[0]->filterType = TNS_FILTER_ON; - ++sts[1]->hTcxEnc->tnsData[k].nFilters; - pFilter[1]->filterType = TNS_FILTER_ON; - } - else - { - pFilter[0]->filterType = TNS_FILTER_OFF; - pFilter[1]->filterType = TNS_FILTER_OFF; - } - } - } - else if ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 && sts[1]->hTcxEnc->tnsData[k].nFilters > 0 ) /* If a previous filter is turned on */ - { - pFilter[0]->filterType = TNS_FILTER_ON_ZERO; - pFilter[1]->filterType = TNS_FILTER_ON_ZERO; - ++sts[0]->hTcxEnc->tnsData[k].nFilters; - ++sts[1]->hTcxEnc->tnsData[k].nFilters; - } - else if ( sts[0]->hTcxEnc->tnsData[k].nFilters != sts[1]->hTcxEnc->tnsData[k].nFilters ) /* sanity check */ - { - assert( 0 ); - } - else - { - pFilter[0]->filterType = TNS_FILTER_OFF; - pFilter[1]->filterType = TNS_FILTER_OFF; - } - if ( ( pFilter[0]->filterType == TNS_FILTER_ON ) && ( pFilter[1]->filterType == TNS_FILTER_ON ) && ( sts[0]->element_brate < IVAS_80k ) ) - { - int16_t tmpIntValue = 0; - int16_t tmpCoeff[TNS_MAX_FILTER_ORDER]; - int16_t i, maxOrder = max( pFilter[0]->order, pFilter[1]->order ); - - set_s( tmpCoeff, 0, TNS_MAX_FILTER_ORDER ); - for ( i = 0; i < maxOrder; i++ ) - { - tmpIntValue = (int16_t) max( tmpIntValue, abs( pFilter[0]->coefIndex[i] - pFilter[1]->coefIndex[i] ) ); - } - if ( tmpIntValue == 1 ) /* the TNS coefficients are sufficiently similar to equalize the two filters */ - { - for ( i = maxOrder - 1; i >= 0; i-- ) - { - tmpCoeff[i] = ( abs( pFilter[0]->coefIndex[i] ) < abs( pFilter[1]->coefIndex[i] ) ? pFilter[0]->coefIndex[i] : pFilter[1]->coefIndex[i] ); - if ( ( tmpIntValue > 0 ) && ( tmpCoeff[i] == 0 ) ) - { - maxOrder--; - } - else - { - tmpIntValue = 0; - } - } - /* make sure that maxOrder is non zero and not all coefficients are zero (could happen in rare cases) */ - if ( maxOrder > 0 ) - { - for ( i = TNS_MAX_FILTER_ORDER - 1; i >= 0; i-- ) - { - pFilter[0]->coefIndex[i] = pFilter[1]->coefIndex[i] = tmpCoeff[i]; - } - - pFilter[0]->order = pFilter[1]->order = maxOrder; - } - } - } - } - else - { - individual_decision[k] = 1; - } - } - - if ( individual_decision[k] == 0 ) - { - sts[0]->hTcxEnc->fUseTns[k] = ( sts[0]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; - sts[1]->hTcxEnc->fUseTns[k] = ( sts[1]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; - } - else - { - sts[0]->hTcxEnc->tnsData[k].nFilters = 0; - sts[1]->hTcxEnc->tnsData[k].nFilters = 0; - sts[0]->hTcxEnc->fUseTns[k] = 0; - sts[1]->hTcxEnc->fUseTns[k] = 0; - for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - sts[0]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; - sts[1]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; - } - } - - if ( !bWhitenedDomain && individual_decision[k] == 0 && maxPredGain < TNS_GAIN_THRESHOLD_FOR_WHITE && sts[0]->hTcxEnc->transform_type[k] != TCX_5 ) - { - sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; - sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; - sts[0]->hTcxEnc->tnsData[k].nFilters = 0; - sts[1]->hTcxEnc->tnsData[k].nFilters = 0; - sts[0]->hTcxEnc->fUseTns[k] = 0; - sts[1]->hTcxEnc->fUseTns[k] = 0; - for ( iFilter = sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - ClearTnsFilterCoefficients_flt( sts[0]->hTcxEnc->tnsData[k].filter + iFilter ); - ClearTnsFilterCoefficients_flt( sts[1]->hTcxEnc->tnsData[k].filter + iFilter ); - } - } - maxPredictionGain = max( maxPredictionGain, maxPredGain ); - } - } - } - } - - /* individual decision for each channel */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - int16_t isTCX10; - isTCX10 = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 0 : 1; - - nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - if ( sts[ch]->hTcxCfg->fIsTNSAllowed && ( individual_decision[k] || mct_on ) && - ( !bWhitenedDomain || sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) - { - float maxPredGain = -1.0f; - - sts[ch]->hTcxCfg->pCurrentTnsConfig = &sts[ch]->hTcxCfg->tnsConfig[sts[ch]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[ch]->last_core == ACELP_CORE )]; - - for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - STnsFilter *pFilter; - const struct TnsParameters *pTnsParameters; - pFilter = sts[ch]->hTcxEnc->tnsData[k].filter + iFilter; - pTnsParameters = sts[ch]->hTcxCfg->pCurrentTnsConfig->pTnsParameters + iFilter; - maxPredGain = max( maxPredGain, pFilter->predictionGain_flt ); - - if ( ( pFilter->predictionGain_flt > pTnsParameters->minPredictionGain_flt ) || ( pFilter->avgSqrCoef_flt > pTnsParameters->minAvgSqrCoef_flt ) ) - { - if ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 || isTCX10 || sts[ch]->hTcxEnc->tcxltp_gain_flt < 0.6f ) - { - ++sts[ch]->hTcxEnc->tnsData[k].nFilters; - pFilter->filterType = TNS_FILTER_ON; - } - else - { - const float maxEnergyChange = GetTCXMaxenergyChange( sts[ch]->hTranDet, isTCX10, NSUBBLOCKS, 3 ); - - if ( maxEnergyChange >= pTnsParameters->minEnergyChange_flt ) - { - ++sts[ch]->hTcxEnc->tnsData[k].nFilters; - pFilter->filterType = TNS_FILTER_ON; - } - else - { - pFilter->filterType = TNS_FILTER_OFF; - } - } - } - else if ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 ) /* If a previous filter is turned on */ - { - pFilter->filterType = TNS_FILTER_ON_ZERO; - ++sts[ch]->hTcxEnc->tnsData[k].nFilters; - } - else - { - pFilter->filterType = TNS_FILTER_OFF; - } - } - - sts[ch]->hTcxEnc->fUseTns[k] = ( sts[ch]->hTcxEnc->tnsData[k].nFilters > 0 ) ? 1 : 0; - - if ( !bWhitenedDomain && maxPredGain < TNS_GAIN_THRESHOLD_FOR_WHITE && sts[ch]->hTcxEnc->transform_type[k] != TCX_5 ) - { - sts[ch]->hTcxEnc->fUseTns[k] = 0; - sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] = 1; - sts[ch]->hTcxEnc->tnsData[k].nFilters = 0; - for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - ClearTnsFilterCoefficients_flt( sts[ch]->hTcxEnc->tnsData[k].filter + iFilter ); - sts[ch]->hTcxEnc->tnsData[k].filter[iFilter].filterType = TNS_FILTER_OFF; - } - } - maxPredictionGain = max( maxPredictionGain, maxPredGain ); - } - } - } - - - /* we have the decision, set filter data accordingly */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - if ( sts[ch]->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || sts[ch]->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) - { - sts[ch]->hTcxCfg->pCurrentTnsConfig = &sts[ch]->hTcxCfg->tnsConfig[sts[ch]->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( sts[ch]->last_core == ACELP_CORE )]; - - for ( iFilter = sts[ch]->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - STnsFilter *pFilter; - pFilter = sts[ch]->hTcxEnc->tnsData[k].filter + iFilter; - switch ( pFilter->filterType ) - { - case TNS_FILTER_OFF: - ClearTnsFilterCoefficients_flt( sts[ch]->hTcxEnc->tnsData[k].filter + iFilter ); - break; - case TNS_FILTER_ON_ZERO: - /* Since TNS filter of order 0 is not allowed we have to signal in the stream filter of order 1 with the 0th coefficient equal to 0 */ - ClearTnsFilterCoefficients_flt( pFilter ); - pFilter->order = 1; - break; - } - } - } - } - } - - /* Apply filters, loop over channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; k++ ) - { - if ( bWhitenedDomain && ( ch > 0 ) && /* test for identical TNS filter data in both channels */ - sts[0]->hTcxCfg->fIsTNSAllowed && sts[0]->hTcxEnc->fUseTns[k] && - sts[1]->hTcxCfg->fIsTNSAllowed && sts[1]->hTcxEnc->fUseTns[k] ) - { - int16_t equalFilterData = ( sts[0]->hTcxCfg->pCurrentTnsConfig->nMaxFilters == sts[1]->hTcxCfg->pCurrentTnsConfig->nMaxFilters && - sts[0]->hTcxEnc->bTnsOnWhithenedSpectra[k] == sts[1]->hTcxEnc->bTnsOnWhithenedSpectra[k] && - sts[0]->hTcxEnc->tnsData[k].nFilters == sts[1]->hTcxEnc->tnsData[k].nFilters ) - ? 1 - : 0; - if ( equalFilterData ) - { - for ( iFilter = st->hTcxCfg->pCurrentTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - const int16_t *pDataCh0 = (const int16_t *) &sts[0]->hTcxEnc->tnsData[k].filter[iFilter]; - const int16_t *pDataCh1 = (const int16_t *) &sts[1]->hTcxEnc->tnsData[k].filter[iFilter]; - int16_t i = 2 + TNS_MAX_FILTER_ORDER; /* excl. informative float data. Portable? */ - - while ( ( i >= 0 ) && ( pDataCh0[i] == pDataCh1[i] ) ) - { - i--; - } - if ( i >= 0 ) - { - equalFilterData = 0; - break; - } - } - if ( equalFilterData ) - { - st->hTcxEnc->tnsData[k].nFilters *= -1; /* signals common TNS */ - } - } - } - if ( st->hTcxCfg->fIsTNSAllowed && ( !bWhitenedDomain || st->hTcxEnc->bTnsOnWhithenedSpectra[k] ) ) - { - L_spec = st->hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; - spectrum = st->hTcxEnc->spectrum[k]; - /* If TNS should be used then get the residual after applying it inplace in the spectrum */ - if ( st->hTcxEnc->fUseTns[k] ) - { - st->hTcxCfg->pCurrentTnsConfig = &st->hTcxCfg->tnsConfig[st->hTcxEnc->transform_type[k] == TCX_20][( k == 0 ) && ( st->last_core == ACELP_CORE )]; - - ApplyTnsFilter_flt( st->hTcxCfg->pCurrentTnsConfig, &st->hTcxEnc->tnsData[k], spectrum, 1 ); - } - - if ( st->hTcxEnc->transform_type[k] == TCX_5 ) - { - tcx5TnsUngrouping( L_frame >> 2, L_spec >> 1, st->hTcxEnc->spectrum[k], ENC ); - } - - st->hTcxEnc->tnsData[k].tnsOnWhitenedSpectra = st->hTcxEnc->bTnsOnWhithenedSpectra[k]; - - EncodeTnsData( st->hTcxCfg->pCurrentTnsConfig, &st->hTcxEnc->tnsData[k], param_core[ch] + k * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, tnsSize[ch] + k, tnsBits[ch] + k ); - } - - if ( st->hTcxEnc->transform_type[k] == TCX_5 ) - { - tcx5SpectrumInterleaving( st->hTcxCfg->tcx5SizeFB, st->hTcxEnc->spectrum[k] ); - tcx5SpectrumInterleaving( st->hTcxCfg->tcx5SizeFB, mdst_spectrum[ch][k] ); - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * TNSAnalysis() - * - * - *-------------------------------------------------------------------*/ - -void TNSAnalysis( - TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ - const int16_t L_frame, /* i : frame length */ - int16_t L_spec, /* i : length of the spectrum */ - const int16_t transform_type, /* i : transform type for the frame/subframe - TCX20 | TCX10 | TCX 5 (meaning 2 x TCX 5) */ - const int16_t isAfterACELP, /* i : Flag indicating if the last frame was ACELP. For the second TCX subframe it should be 0 */ - float spectrum[], /* i : MDCT spectrum of the subframe */ - TRAN_DET_HANDLE hTranDet, /* i : handle transient detection */ - const float ltp_gain, /* i : ltp gain */ - STnsData *pTnsData, /* o : TNS data */ - int8_t *pfUseTns, /* o : Flag indicating if TNS is used */ - float *predictionGain /* o : TNS prediction gain */ -) -{ - float buff[8]; /* Buffer for the rearrangement of LF TCX5 */ - - /* Init TNS */ - *pfUseTns = 0; - - if ( hTcxCfg->fIsTNSAllowed ) - { - hTcxCfg->pCurrentTnsConfig = &hTcxCfg->tnsConfig[transform_type == TCX_20][isAfterACELP]; - L_spec = hTcxCfg->pCurrentTnsConfig->iFilterBorders[0]; - - /*-----------------------------------------------------------* - * Temporal Noise Shaping analysis * - *-----------------------------------------------------------*/ - - if ( transform_type == TCX_5 ) - { - /* rearrange LF sub-window lines prior to TNS analysis & filtering */ - if ( L_spec < L_frame / 2 ) - { - mvr2r( spectrum + 8, spectrum + 16, L_spec / 2 - 8 ); - mvr2r( spectrum + L_frame / 4, spectrum + 8, 8 ); - mvr2r( spectrum + L_frame / 4 + 8, spectrum + L_spec / 2 + 8, L_spec / 2 - 8 ); - } - else - { - mvr2r( spectrum + L_frame / 4, buff, 8 ); - mvr2r( spectrum + 8, spectrum + 16, L_frame / 4 - 8 ); - mvr2r( buff, spectrum + 8, 8 ); - } - } - - *pfUseTns = (Word8) DetectTnsFilt( hTcxCfg->pCurrentTnsConfig, spectrum, hTranDet, transform_type != TCX_20, ltp_gain, pTnsData, predictionGain ); - - - /* If TNS should be used then get the residual after applying it inplace in the spectrum */ - if ( *pfUseTns ) - { - ApplyTnsFilter_flt( hTcxCfg->pCurrentTnsConfig, pTnsData, spectrum, 1 ); - } - - if ( transform_type == TCX_5 ) - { - /* undo rearrangement of LF sub-window lines prior to TNS analysis */ - if ( L_spec < L_frame / 2 ) - { - mvr2r( spectrum + L_spec / 2 + 8, spectrum + L_frame / 4 + 8, L_spec / 2 - 8 ); - mvr2r( spectrum + 8, spectrum + L_frame / 4, 8 ); - mvr2r( spectrum + 16, spectrum + 8, L_spec / 2 - 8 ); - set_zero( spectrum + L_spec / 2, L_frame / 4 - L_spec / 2 ); - set_zero( spectrum + L_frame / 4 + L_spec / 2, L_frame / 4 - L_spec / 2 ); - } - else - { - mvr2r( spectrum + 8, buff, 8 ); - mvr2r( spectrum + 16, spectrum + 8, L_frame / 4 - 8 ); - mvr2r( buff, spectrum + L_frame / 4, 8 ); - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * ShapeSpectrum() - * - * - *-------------------------------------------------------------------*/ - -void ShapeSpectrum( - TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ - const float A[], /* i : quantized coefficients NxAz_q[M+1] */ - float gainlpc[], /* o : MDCT gains for the previous frame */ - const int16_t L_frame_glob, /* i : frame length */ - int16_t L_spec, /* i : length of the spectrum */ - float spectrum[], /* i/o: MDCT spectrum */ - const int8_t fUseTns, /* i : Flag indicating if TNS is used */ - Encoder_State *st, /* i/o: encoder state structure */ - float *scf /* i : scale factors */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, sf_width, L_frame, tcx_offset; - float Ap[M + 2]; - float tmp, gamma1; - float max_low_pre = 0.f, max_high_pre = 0.f; - float sns_int_scf[FDNS_NPTS]; - int32_t total_brate = ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ); - /*-----------------------------------------------------------* - * Init * - *-----------------------------------------------------------*/ - - /* Init lengths */ - L_frame = L_frame_glob; - tcx_offset = hTcxCfg->tcx_offset; - - gamma1 = st->gamma_flt; - if ( st->enableTcxLpc ) - { - gamma1 = 1.0f; - } - - if ( st->element_mode != IVAS_CPE_MDCT ) /* in MDCT, this is already done outside the function */ - { - if ( st->last_core == ACELP_CORE ) - { - L_frame += tcx_offset; - L_spec += hTcxCfg->tcx_coded_lines >> 2; - if ( hTcxCfg->lfacNext < 0 ) - { - L_frame -= hTcxCfg->lfacNext; - } - } - } - - tcxGetNoiseFillingTilt_flt( A, L_frame, ( total_brate >= ACELP_13k20 && !st->rf_mode ), &st->hTcxEnc->noiseTiltFactor_flt ); - - /* Calculate Spectrum Flatness Measure for the TCX Concealment */ - if ( st->enablePlcWaveadjust ) - { - hTcxCfg->SFM2_flt = SFM_Cal( spectrum, min( 200, L_frame ) ); - } - - if ( ( total_brate <= ACELP_13k20 && st->bwidth == SWB ) ) - { - max_low_pre = 0.f; - for ( i = 0; i < L_frame; i++ ) - { - tmp = fabsf( spectrum[i] ); - if ( tmp > max_low_pre ) - { - max_low_pre = tmp; - } - } - - max_high_pre = 0.f; - for ( i = 0; i < L_spec - L_frame; i++ ) - { - tmp = fabsf( spectrum[L_frame + i] ); - if ( tmp > max_high_pre ) - { - max_high_pre = tmp; - } - } - } - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - sns_interpolate_scalefactors( &sns_int_scf[0], scf, ENC ); - sns_shape_spectrum( spectrum, st->hTcxCfg->psychParamsCurrent, &sns_int_scf[0], L_frame ); - v_multc( spectrum + L_frame, sns_int_scf[hTcxCfg->psychParamsCurrent->nBands - 1], spectrum + L_frame, L_spec - L_frame ); - } - else - { - /*-----------------------------------------------------------* - * Pre-shaping in frequency domain using weighted LPC (Wz) * - *-----------------------------------------------------------*/ - - weight_a( A, Ap, gamma1, M ); - - lpc2mdct_flt( Ap, M, gainlpc, FDNS_NPTS, 0 ); - - mdct_preShaping( spectrum, L_frame, gainlpc ); - - v_multc( spectrum + L_frame, 1.f / gainlpc[FDNS_NPTS - 1], spectrum + L_frame, L_spec - L_frame ); - } - - /* reduce the peaks in the IGF region, to make life of the core-coder easier... */ - if ( total_brate <= ACELP_13k20 && st->bwidth == SWB ) - { - int16_t dist_low, dist_high; - float max_fac; - float max_low, max_low1, max_low2, max_high; - - if ( hTcxEnc->tcx_lpc_shaped_ari ) - { - max_fac = 1.5f; - } - else - { - max_fac = 3.f; - } - - sf_width = L_frame / 2; - - max_low2 = 0.f; - dist_low = 0; - for ( i = 0; i < sf_width; i++ ) - { - tmp = fabsf( spectrum[L_frame - 1 - i] ); - if ( tmp > max_low2 ) - { - max_low2 = tmp; - dist_low = i; - } - } - - max_low1 = 0.f; - for ( i = 0; i < L_frame - sf_width; i++ ) - { - tmp = fabsf( spectrum[L_frame - sf_width - 1 - i] ); - if ( tmp > max_low1 ) - { - max_low1 = tmp; - } - if ( tmp > max_low2 ) - { - dist_low = sf_width + i; - } - } - - max_low = max( max_low1, max_low2 ); - - max_high = 0.f; - dist_high = 0; - for ( i = 0; i < L_spec - L_frame; i++ ) - { - tmp = fabsf( spectrum[L_frame + i] ); - if ( tmp > max_high ) - { - max_high = tmp; - dist_high = i; - } - } - - if ( ( 4.f * dist_high * max_high > dist_low * max_low ) && ( 16.f * max_low_pre > max_high_pre ) && ( max_high > max_fac * max_low2 ) ) - { - tmp = max_fac * max_low2 / max_high; - v_multc( spectrum + L_frame, tmp, spectrum + L_frame, L_spec - L_frame ); - } - } - - if ( st->element_mode != IVAS_CPE_MDCT && st->tcxonly && st->hTcxEnc->tcxltp && ( st->hTcxEnc->tcxltp_gain_flt > 0.0f ) && !fUseTns ) - { - PsychAdaptLowFreqEmph( spectrum, gainlpc ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * GetTransWidth() - * - * - *-------------------------------------------------------------------*/ - -static int16_t GetTransWidth( - const int16_t tcxonly, - const int16_t tcx10, - const float tcxltp_gain_flt, - const int16_t hm_active ) -{ - int16_t noiseTransWidth = MIN_NOISE_FILLING_HOLE; - - if ( tcxonly ) - { - noiseTransWidth = HOLE_SIZE_FROM_LTP_FLT( max( tcxltp_gain_flt, 0.3125f * hm_active ) ); - - if ( tcx10 ) - { - noiseTransWidth = 3; /* minimum transition for noise filling in TCX-10 */ - } - } - - return noiseTransWidth; -} - - -/*-----------------------------------------------------------* - * EstimateTCXNoiseLevel() - * - * Estimate and quantize noise factor * - *-----------------------------------------------------------*/ - -static void EstimateTCXNoiseLevel( - Encoder_State *st, /* i : encoder state handle */ - const float x_orig[], /* i : shaped MDCT spectrum */ - float spectrum[], /* i/o: quantized MDCT spectrum */ - const float gain_tcx, /* i : global gain */ - const int16_t L_frame, /* i : frame length */ - const int16_t noiseFillingBorder, /* i : noise filling border */ - const int16_t hm_active, /* i : flag indicating if the harmonic model is active */ - float *fac_ns, /* o : noise filling level */ - int16_t *fac_ns_q /* o : quantized noise filling level */ -) -{ - int16_t maxNfCalcBw, iStart, noiseTransWidth; - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - maxNfCalcBw = min( noiseFillingBorder, (int16_t) ( hTcxEnc->measuredBwRatio_flt * (float) L_frame + 0.5f ) ); - - if ( st->total_brate >= HQ_96k ) - { - *fac_ns = 0.0f; - *fac_ns_q = 0; - } - else - { - const int16_t minLevel = ( hTcxEnc->tcx_lpc_shaped_ari && st->element_mode > IVAS_SCE ? 0 : 1 ); - iStart = L_frame / ( ( st->total_brate >= ACELP_13k20 && !st->rf_mode ) ? 6 : 8 ); /* noise filling start bin*/ - noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame == st->L_frame >> 1 ), st->hTcxEnc->tcxltp_gain_flt, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active ) ); - tcx_noise_factor( x_orig, spectrum, iStart, maxNfCalcBw, noiseTransWidth, L_frame, gain_tcx, hTcxEnc->noiseTiltFactor_flt, fac_ns, fac_ns_q, st->element_mode ); - - /* hysteresis for very tonal passages (more stationary noise filling level) */ - if ( *fac_ns_q == minLevel ) - { - hTcxEnc->noiseLevelMemory_cnt = (int16_t) min( INT16_MAX, 1 + abs( hTcxEnc->noiseLevelMemory_cnt ) ); /* update counter */ - } - else - { - if ( ( *fac_ns_q == minLevel + 1 ) && ( abs( hTcxEnc->noiseLevelMemory_cnt ) > 5 ) ) - { - *fac_ns_q = minLevel; /* reduce noise filling level by one step */ - *fac_ns = minLevel * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); - - /* signal that noise level is changed by inverting sign of level memory */ - hTcxEnc->noiseLevelMemory_cnt = ( hTcxEnc->noiseLevelMemory_cnt < 0 ) ? 5 : -1 - hTcxEnc->noiseLevelMemory_cnt; - } - else - { - hTcxEnc->noiseLevelMemory_cnt = 0; /* reset memory since level is too different */ - } - } - } /* bitrate */ - - return; -} - - -/*-----------------------------------------------------------* - * EstimateStereoTCXNoiseLevel() - * - * Estimate and quantize stereo noise factors - *-----------------------------------------------------------*/ - -void EstimateStereoTCXNoiseLevel( - Encoder_State **sts, /* i : state handle */ - float *q_spectrum[CPE_CHANNELS][NB_DIV], /* i : quantized MDCT spectrum */ - float gain_tcx[][NB_DIV], /* i : global gain */ - int16_t L_frame[][NB_DIV], /* i : frame length */ - int16_t noiseFillingBorder[][NB_DIV], /* i : noise filling border */ - int16_t hm_active[][NB_DIV], /* i : flag indicating if the harmonic model is active */ - const int16_t ignore_chan[], /* i : flag indicating whether the channel should be ignored */ - float fac_ns[][NB_DIV], /* o : noise filling level */ - int16_t param_core[][NB_DIV * NPRM_DIV], /* o : quantized noise filling level */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t ch, n; - int16_t nSubframes, maxNfCalcBw, iStart, noiseTransWidth; - float smooth_gain; - float combined_q_spectrum[N_MAX]; - int16_t *fac_ns_q; - int32_t total_brate; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - Encoder_State *st = sts[ch]; - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - if ( ignore_chan[ch] ) - { - continue; - } - total_brate = ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) ? st->element_brate : st->total_brate; - - for ( n = 0; n < nSubframes; n++ ) - { - fac_ns_q = param_core[ch] + n * NPRM_DIV + 1; - maxNfCalcBw = min( noiseFillingBorder[ch][n], (int16_t) ( hTcxEnc->measuredBwRatio_flt * (float) L_frame[ch][n] + 0.5f ) ); - if ( ( total_brate >= HQ_96k && ( st->element_mode <= IVAS_SCE || st->bwidth < SWB ) ) || total_brate > IVAS_192k ) - { - fac_ns[ch][n] = 0.0f; - *fac_ns_q = 0; - } - else - { - iStart = L_frame[ch][n] / ( ( total_brate >= ACELP_13k20 && !st->rf_mode ) ? 6 : 8 ); /* noise filling start bin*/ - - if ( n == 0 ) - { - mvr2r( hTcxEnc->ltpGainMemory, &hTcxEnc->ltpGainMemory[1], N_LTP_GAIN_MEMS - 1 ); - hTcxEnc->ltpGainMemory[0] = st->hTcxEnc->tcxltp_gain_flt; - } - - smooth_gain = dotp( hTcxEnc->ltpGainMemory, nf_tw_smoothing_coeffs, N_LTP_GAIN_MEMS ); - - noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame[ch][n] == st->L_frame >> 1 ), smooth_gain, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active[ch][n] ) ); - - mvr2r( q_spectrum[ch][n], combined_q_spectrum, L_frame[ch][n] ); - tcx_noise_factor( hTcxEnc->spectrum[n], combined_q_spectrum, iStart, maxNfCalcBw, noiseTransWidth, L_frame[ch][n], gain_tcx[ch][n], hTcxEnc->noiseTiltFactor_flt, &fac_ns[ch][n], fac_ns_q, st->element_mode ); - - /* hysteresis for very tonal passages (more stationary noise filling level) */ - if ( *fac_ns_q == 1 ) - { - hTcxEnc->noiseLevelMemory_cnt = (int16_t) min( INT16_MAX, 1 + abs( hTcxEnc->noiseLevelMemory_cnt ) ); /* update counter */ - } - else - { - if ( ( *fac_ns_q == 2 ) && ( abs( hTcxEnc->noiseLevelMemory_cnt ) > 5 ) ) - { - *fac_ns_q = 1; /* reduce noise filling level by one step */ - fac_ns[ch][n] = 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); - - /* signal that noise level is changed by inverting sign of level memory */ - hTcxEnc->noiseLevelMemory_cnt = ( hTcxEnc->noiseLevelMemory_cnt < 0 ) ? 5 : -1 - hTcxEnc->noiseLevelMemory_cnt; - } - else - { - hTcxEnc->noiseLevelMemory_cnt = 0; /* reset memory since level is too different */ - } - } - } /* bitrate */ - } - } - - return; -} - - -/*-----------------------------------------------------------* - * DecideTonalSideInfo() - * - * - *-----------------------------------------------------------*/ - -static int16_t DecideTonalSideInfo( - const float spectrum[], - const int16_t L_frame_glob, - float SFM2_flt ) -{ - float SFM, K, K2; - int16_t Tonal_SideInfo; - - SFM = SFM_Cal( spectrum, min( 200, L_frame_glob ) ); - - if ( L_frame_glob <= 256 ) - { - K = 0.4f; - K2 = 0.1f; - } - else if ( L_frame_glob == 320 || L_frame_glob == 512 ) - { - K = 0.4f; - K2 = 0.1f; - } - else /*FrameSize_Core == 640*/ - { - K = 0.35f; - K2 = 0.04f; - } - - - Tonal_SideInfo = 0; - if ( SFM < K ) - { - Tonal_SideInfo = 1; - } - - if ( SFM2_flt < K2 ) - { - Tonal_SideInfo = 1; - } - - return Tonal_SideInfo; -} - -/*-----------------------------------------------------------* - * QuantizeTCXSpectrum() - * - * - *-----------------------------------------------------------*/ - -void QuantizeTCXSpectrum( - Encoder_State *st, /* i : state handle */ - const int16_t frame_cnt, /* i : frame counter in the super_frame */ - const float *x_orig, /* i : shaped MDCT spectrum */ - const float *gainlpc, /* i : FDNS gains */ - const Word16 *Aqind, /* i : frame-independent quantized coefficients (M+1) */ - const int16_t tnsSize, /* i : number of tns parameters put into prm */ - const int16_t nb_bits, /* i : bit budget */ - const int16_t vad_hover_flag, /* i : VAD hangover flag */ - int16_t *pL_frameTCX, /* o : full frame length */ - int16_t *pL_frame, /* o : frame length */ - int16_t *pL_spec, /* o : length of the coded spectrum */ - int16_t *ptcx_offset, /* o : folding point offset relative to the end of the previous frame */ - int16_t *pnoiseFillingBorder, /* o : noise filling border */ - float spectrum[], /* o : quantized MDCT spectrum */ - CONTEXT_HM_CONFIG *hm_cfg, /* o : Context-based harmonic model configuration */ - int16_t *hm_active, /* o : flag indicating if the harmonic model is active */ - float lf_deemph_fact[], /* o : low frequency deemphasis factors */ - int16_t *nf_seed, /* o : noise filling random seed */ - float *ener, /* o : energy of the quantized spectrum */ - float *gain_tcx, /* o : global gain */ - int16_t prm[] /* o : tcx parameters */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, L_frame, L_frameTCX, L_spec, tcx_offset; - int16_t noiseFillingBorder, LtpPitchLag, PeriodicityIndex; - float sqGain, gain_tcx_opt, RelativeScore; - int16_t lastnzCtxHm, lastnz; - int16_t stop; - int16_t nEncodedCtxHm, stopCtxHm, sqBitsCtxHm, Selector; - int16_t nEncoded, sqBits_noStop; - int16_t NumIndexBits, signaling_bits, sqTargetBits, sqBits, ctxHmBits, resQBits, resQTargetBits; - int16_t *prm_ltp, *prm_tns, *prm_hm, *prm_lastnz, *sqQ, *prm_target; - float att; - Word16 att_fx; - int32_t total_brate; - - /*-----------------------------------------------------------* - * Init * - *-----------------------------------------------------------*/ - - sqGain = 1.0f; - resQTargetBits = 0; - - NumIndexBits = 0; - sqBits = 0; - ctxHmBits = 0; - resQBits = 0; - prm_ltp = &prm[1 + NOISE_FILL_RANGES]; - prm_tns = prm_ltp + LTPSIZE; - prm_hm = prm_tns + tnsSize; - prm_lastnz = prm_hm + 2; - sqQ = prm_hm + NPRM_CTX_HM; - - total_brate = ( st->element_mode == IVAS_CPE_MDCT ) ? st->element_brate : st->total_brate; - - /*-----------------------------------------------------------* - * Init lengths * - *-----------------------------------------------------------*/ - - L_frame = st->L_frame; - L_frameTCX = hTcxEnc->L_frameTCX; - L_spec = st->hTcxCfg->tcx_coded_lines; - tcx_offset = st->hTcxCfg->tcx_offset; - - if ( st->core == TCX_10_CORE ) - { - L_frame /= 2; - L_frameTCX /= 2; - L_spec /= 2; - } - else if ( st->last_core == ACELP_CORE ) - { - st->hTcxCfg->last_aldo = 0; - - L_frame += tcx_offset; - L_frameTCX += st->hTcxCfg->tcx_offsetFB; - L_spec += st->hTcxCfg->tcx_coded_lines >> 2; - - if ( st->hTcxCfg->lfacNext < 0 ) - { - L_frame -= st->hTcxCfg->lfacNext; - L_frameTCX -= st->hTcxCfg->lfacNextFB; - tcx_offset = st->hTcxCfg->lfacNext; - } - else - { - tcx_offset = 0; - } - hTcxEnc->noiseLevelMemory_cnt = 0; - } - - *pL_frameTCX = L_frameTCX; - *pL_frame = L_frame; - *pL_spec = L_spec; - *ptcx_offset = tcx_offset; - - /* target bitrate for SQ */ - sqTargetBits = nb_bits - NBITS_TCX_GAIN - NBITS_NOISE_FILL_LEVEL; - - if ( st->enablePlcWaveadjust ) - { - st->Tonal_SideInfo = DecideTonalSideInfo( x_orig, ( st->core == TCX_20_CORE ) ? st->L_frame : st->L_frame / 2, st->hTcxCfg->SFM2_flt ); - } - - /* Start with the pre-shaped spectrum*/ - mvr2r( x_orig, spectrum, L_spec ); - - /*-----------------------------------------------------------* - * Bandwidth Limitation * - *-----------------------------------------------------------*/ - - noiseFillingBorder = L_spec; - if ( st->igf ) - { - noiseFillingBorder = st->hIGFEnc->infoStartLine; - } - *pnoiseFillingBorder = noiseFillingBorder; - - if ( st->igf ) - { - for ( i = st->hIGFEnc->infoStopLine; i < max( L_frame, L_frameTCX ); i++ ) - { - spectrum[i] = 0.0f; - } - } - else - { - for ( i = noiseFillingBorder; i < max( L_frame, L_frameTCX ); i++ ) - { - spectrum[i] = 0.0f; - } - } - - /*-----------------------------------------------------------* - * Quantization * - *-----------------------------------------------------------*/ - - if ( !hTcxEnc->tcx_lpc_shaped_ari ) - { - /* context based arithmetic coder */ - - /* initialize signaling to default, i.e. context based AC is inactive */ - prm_hm[0] = 0; - prm_hm[1] = -1; - - /* Fast estimation of the scalar quantizer step size */ - if ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE ) - { - LtpPitchLag = ( ( !st->tcxonly ) && ( hTcxEnc->tcxltp_pitch_int < st->L_frame ) ? ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( hTcxEnc->tcxltp_pitch_int * st->pit_res_max + hTcxEnc->tcxltp_pitch_fr ) : -1 ); - - ++ctxHmBits; /* ContextHM flag */ - --sqTargetBits; /* ContextHM flag */ - - PeriodicityIndex = SearchPeriodicityIndex( spectrum, NULL, L_spec, sqTargetBits, LtpPitchLag, hTcxEnc->tcxltp ? hTcxEnc->tcxltp_gain_flt : -1.0f, &RelativeScore ); - - NumIndexBits = CountIndexBits_ivas( L_spec >= 256, PeriodicityIndex ); - - if ( st->element_mode > EVS_MONO ) - { - ConfigureContextHm_ivas( L_spec, sqTargetBits - NumIndexBits, PeriodicityIndex, LtpPitchLag, hm_cfg ); - } - else - { - ConfigureContextHm_ivas( L_spec, sqTargetBits, PeriodicityIndex, LtpPitchLag, hm_cfg ); - } - - /* Quantize original spectrum */ - sqGain = SQ_gain( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac_flt * (float) sqTargetBits ), L_spec ); - - tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding_flt, hTcxEnc->memQuantZeros, st->tcxonly ); - - /* Estimate original bitrate */ - stop = 0; - if ( st->element_mode > EVS_MONO ) - { - sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); - } - else - { - sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnz, &nEncoded, sqTargetBits, &stop, NULL ); - } - - /* Estimate context mapped bitrate */ - stopCtxHm = 0; - - /* Context Mapping */ - if ( st->element_mode > EVS_MONO ) - { - sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, 0, hm_cfg ); - } - else - { - sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, hm_cfg ); - } - - /* Decide whether or not to use context mapping */ - Selector = max( stop, sqBits ) - ( max( stopCtxHm, sqBitsCtxHm ) + NumIndexBits ); - - if ( Selector > 2 || ( abs( Selector ) <= 2 && kCtxHmOlRSThr_FLT < RelativeScore ) ) - { - /* CtxHm is likely better */ - sqTargetBits -= NumIndexBits; - ctxHmBits += NumIndexBits; - prm_hm[0] = 1; - prm_hm[1] = PeriodicityIndex; - *prm_lastnz = lastnzCtxHm; - sqBits_noStop = sqBits = sqBitsCtxHm; - nEncoded = nEncodedCtxHm; - stop = stopCtxHm; - } - else - { - /* Original is better or not much difference */ - prm_hm[0] = 0; - prm_hm[1] = PeriodicityIndex; - *prm_lastnz = lastnz; - PeriodicityIndex = -1; - - sqBits_noStop = sqBits; - } - - if ( stop != 0 ) - { - sqBits = stop; - } - } - else - { - /* no context hm*/ - PeriodicityIndex = -1; - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - sqGain = SQ_gain_estimate( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac_flt * (float) sqTargetBits ), L_spec ); - } - else - { - sqGain = SQ_gain( spectrum, (int16_t) ( hTcxEnc->tcx_target_bits_fac_flt * (float) sqTargetBits ), L_spec ); - } - - /* Quantize spectrum */ - tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding_flt, hTcxEnc->memQuantZeros, st->tcxonly ); - - /* Estimate bitrate */ - stop = 0; - if ( st->element_mode > EVS_MONO ) - { - sqBits_noStop = sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); - } - else - { - sqBits_noStop = sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, NULL ); - } - - if ( stop != 0 ) - { - sqBits = stop; - } - } /* end of if (ctx_hm) */ - - /* Adjust correction factor */ - if ( ( L_spec & ( L_spec - 1 ) ) == 0 ) - { - /* power-of-2 */ - hTcxEnc->tcx_target_bits_fac_flt *= (float) sqTargetBits / (float) ( sqBits + 1 ); - } - else - { - hTcxEnc->tcx_target_bits_fac_flt *= (float) sqTargetBits / (float) sqBits; - } - - if ( hTcxEnc->tcx_target_bits_fac_flt > 1.25 ) - { - hTcxEnc->tcx_target_bits_fac_flt = 1.25; - } - if ( hTcxEnc->tcx_target_bits_fac_flt < 0.75 ) - { - hTcxEnc->tcx_target_bits_fac_flt = 0.75; - } - - /* Refine quantizer step size with a rate-control-loop (optional) */ - sqBits = tcx_scalar_quantization_rateloop( spectrum, sqQ, L_spec, &sqGain, st->hTcxCfg->sq_rounding_flt, hTcxEnc->memQuantZeros, prm_lastnz, /* lastnz */ sqTargetBits, &nEncoded, &stop, sqBits_noStop, sqBits, st->hTcxCfg->tcxRateLoopOpt, st->tcxonly, PeriodicityIndex >= 0 ? hm_cfg : NULL, ( st->element_mode == IVAS_CPE_MDCT ? 2 : 4 ), st->element_mode ); - - if ( ctxHmBits > 0 ) - { - /* Mapping tool is enabled */ - /* Truncate spectrum */ - for ( i = nEncoded; i < L_spec; i++ ) - { - if ( st->element_mode > EVS_MONO ) - { - break; - } - else - { - sqQ[i] = 0; - } - } - - if ( PeriodicityIndex >= 0 ) - { - /* Mapping is used */ - /* Estimate non-mapped bitrate */ - stopCtxHm = 1; - if ( st->element_mode > EVS_MONO ) - { - /* Fix: Use updated value for target bits (sqTargetBits + NumIndexBits) before computing non-mapped estimate */ - sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnz, &nEncodedCtxHm, sqTargetBits + NumIndexBits, &stopCtxHm, 0, NULL ); - } - else - { - sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnz, &nEncodedCtxHm, sqTargetBits, &stopCtxHm, NULL ); - } - - /* Decide whether or not to revert mapping */ - Selector = sqBits - ( sqBitsCtxHm + NumIndexBits ); - - if ( st->element_mode > EVS_MONO ) - { - if ( ( stopCtxHm == 0 && Selector > 0 ) || stop ) /* If overflow occured with mapped, select non-mapped */ - { - /* Non-mapped is better */ - sqTargetBits += NumIndexBits; - ctxHmBits -= NumIndexBits; - prm_hm[0] = 0; - *prm_lastnz = lastnz; - PeriodicityIndex = -1; - sqBits_noStop = sqBits = sqBitsCtxHm; - nEncoded = nEncodedCtxHm; - stop = stopCtxHm; - } - } - else - { - if ( stopCtxHm == 0 && Selector > 0 ) - { - /* Non-mapped is better */ - sqTargetBits += NumIndexBits; - ctxHmBits -= NumIndexBits; - prm_hm[0] = 0; - *prm_lastnz = lastnz; - PeriodicityIndex = -1; - sqBits_noStop = sqBits = sqBitsCtxHm; - nEncoded = nEncodedCtxHm; - stop = stopCtxHm; - } - } - } - else - { - /* Mapping is not used */ - if ( st->element_mode > EVS_MONO ) - { - /* Truncate Spectrum */ - for ( i = nEncoded; i < L_spec; i++ ) - { - sqQ[i] = 0; - } - } - /* Estimate mapped bitrate */ - stopCtxHm = 1; - if ( st->element_mode > EVS_MONO ) - { - sqBitsCtxHm = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, 0, hm_cfg ); - } - else - { - sqBitsCtxHm = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, &lastnzCtxHm, &nEncodedCtxHm, sqTargetBits - NumIndexBits, &stopCtxHm, hm_cfg ); - } - - /* Decide whether or not to use mapping */ - Selector = sqBits - ( sqBitsCtxHm + NumIndexBits ); - - if ( stopCtxHm == 0 && Selector > 0 ) - { - /* Mapped is better */ - sqTargetBits -= NumIndexBits; - ctxHmBits += NumIndexBits; - prm_hm[0] = 1; - *prm_lastnz = lastnzCtxHm; - PeriodicityIndex = prm_hm[1]; - sqBits_noStop = sqBits = sqBitsCtxHm; - nEncoded = nEncodedCtxHm; - stop = stopCtxHm; - } - } - } - - /* Limit low sqGain for avoiding saturation of the gain quantizer*/ - if ( st->hTcxCfg->tcxRateLoopOpt < 3 && sqGain < sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ) ) - { - sqGain = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_spec ); - - tcx_scalar_quantization( spectrum, sqQ, L_spec, sqGain, st->hTcxCfg->sq_rounding_flt, hTcxEnc->memQuantZeros, st->tcxonly ); - - stop = 1; - if ( st->element_mode > EVS_MONO ) - { - /* Ensure non-mapped estimation is used for limiting low sqGain considering that this refinement occurs very rarely */ - PeriodicityIndex = -1; - if ( prm_hm[0] == 1 ) - { - prm_hm[0] = 0; - sqTargetBits += NumIndexBits; - ctxHmBits -= NumIndexBits; - } - sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, 0, NULL ); - } - else - { - sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( sqQ, L_spec, prm_lastnz, &nEncoded, sqTargetBits, &stop, PeriodicityIndex >= 0 ? hm_cfg : NULL ); - } - } - - /* Truncate spectrum (for CBR) */ - if ( stop ) - { - for ( i = nEncoded; i < L_spec; i++ ) - { - sqQ[i] = 0; - } - } - - /* Save quantized Values */ - *nf_seed = 0; - for ( i = 0; i < L_spec; i++ ) - { - spectrum[i] = (float) sqQ[i]; - /* noise filling seed */ - *nf_seed += (int16_t) ( abs( sqQ[i] ) * i * 2 ); - } - } - else - { - /* low rates: envelope based arithmetic coder */ - - AdaptLowFreqEmph( spectrum, NULL, 0.f, 1, gainlpc, L_frame ); - - prm_target = sqQ; - sqQ = prm_target + 1; - - LtpPitchLag = ( ( hTcxEnc->tcxltp_pitch_int < st->L_frame ) ? ( ( 2 * st->L_frame * st->pit_res_max ) << kLtpHmFractionalResolution ) / ( st->hTcxEnc->tcxltp_pitch_int * st->pit_res_max + hTcxEnc->tcxltp_pitch_fr ) : -1 ); - - tcx_arith_encode_envelope( spectrum, hm_cfg->indexBuffer, L_frame, L_spec, st, Aqind, sqTargetBits, sqQ, st->last_core != ACELP_CORE, prm_hm, /* HM parameter area */ LtpPitchLag, &sqBits, &signaling_bits, ( st->bwidth > WB ) ? 1 : 0 ); - - sqTargetBits -= signaling_bits; - *prm_target = sqTargetBits; - - /* Noise filling seed */ - *nf_seed = 0; - for ( i = 0; i < noiseFillingBorder; ++i ) - { - *nf_seed += (int16_t) ( abs( (int16_t) spectrum[i] ) * i * 2 ); - } - } - - *hm_active = prm_hm[0]; - - /*-----------------------------------------------------------* - * Compute optimal TCX gain. * - *-----------------------------------------------------------*/ - - if ( lf_deemph_fact != NULL ) - { - /* initialize LF deemphasis factors in lf_deemph_fact */ - for ( i = 0; i < L_spec; i++ ) - { - lf_deemph_fact[i] = 1.0f; - } - } - - if ( !st->tcxonly ) - { - AdaptLowFreqDeemph_flt( spectrum, hTcxEnc->tcx_lpc_shaped_ari, gainlpc, L_frame, lf_deemph_fact ); - } - - assert( x_orig != spectrum ); - gain_tcx_opt = get_gain_flt( x_orig, spectrum, L_spec, ener ); - - if ( gain_tcx_opt <= 0.0f ) - { - gain_tcx_opt = sqGain; - } - *gain_tcx = gain_tcx_opt; - - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { -#ifndef IVAS_FLOAT_FIXED - calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); -#else -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - if ( st->hTdCngEnc != NULL ) - { - st->hTdCngEnc->CNG_att_fx = float_to_fix16( st->hTdCngEnc->CNG_att, Q7 ); - } -#endif - calculate_hangover_attenuation_gain_ivas_fx( st, &att_fx, vad_hover_flag ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - att = fix16_to_float( att_fx, Q15 ); -#endif -#endif - *gain_tcx *= att; - } - - /*-----------------------------------------------------------* - * Quantize TCX gain * - *-----------------------------------------------------------*/ - - /* gain quantization here in case of VBR unvoiced coding; fixes problems of uninitialized global gain values */ - if ( total_brate >= ACELP_13k20 && !st->rf_mode ) - { - tcx_QuantizeGain( L_spec, gain_tcx, &prm[0] ); - } - - /*-----------------------------------------------------------* - * Residual Quantization * - *-----------------------------------------------------------*/ - - if ( st->hTcxCfg->resq ) - { - resQTargetBits = sqTargetBits - sqBits; - - if ( hTcxEnc->tcx_lpc_shaped_ari ) - { - /* envelope based arithmetic coder */ - int16_t *prm_resq; - - prm_resq = sqQ + sqTargetBits - resQTargetBits; - - resQBits = tcx_ari_res_Q_spec( x_orig, hm_cfg->indexBuffer, spectrum, L_spec, *gain_tcx, prm_resq, resQTargetBits, resQBits, st->hTcxCfg->sq_rounding_flt, lf_deemph_fact ); - - /* Transmit zeros when there bits remain after RESQ */ - for ( i = resQBits; i < resQTargetBits; ++i ) - { - prm_resq[i] = 0; - } - } - else - { - /* context based arithmetic coder */ - resQBits = tcx_res_Q_gain( gain_tcx_opt, gain_tcx, sqQ + L_spec, resQTargetBits ); - - resQBits = tcx_res_Q_spec( x_orig, spectrum, L_spec, *gain_tcx, sqQ + L_spec, resQTargetBits, resQBits, st->hTcxCfg->sq_rounding_flt, st->tcxonly ? NULL : lf_deemph_fact ); - } - } - - /*-----------------------------------------------------------* - * ALFE tcx only bitrates * - *-----------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - if ( st->tcxonly ) - { - if ( hTcxEnc->tcxltp && ( hTcxEnc->tcxltp_gain_flt > 0.0f ) && !hTcxEnc->fUseTns[frame_cnt] ) - { - PsychAdaptLowFreqDeemph_flt( spectrum, gainlpc, NULL ); - } - } - } - - - return; -} - - -/*-------------------------------------------------------------------* - * InternalTCXDecoder() - * - * - *-------------------------------------------------------------------*/ - -void InternalTCXDecoder( - Encoder_State *st, /* i/o: state handle */ - const int16_t frame_cnt, /* i : frame counter in the super_frame */ - const int16_t L_frameTCX, /* i : full frame length */ - const int16_t L_frame, /* i : frame length */ - const int16_t L_spec, /* i : length of the coded spectrum */ - const int16_t tcx_offset, /* i : folding point offset relative to the end of the previous frame */ - const int16_t noiseFillingBorder, /* i : noise filling border */ - const float *x_quant, /* i : quantized spectrum */ - const float ener, /* i : energy of the quantized spectrum */ - float lf_deemph_fact[], /* i/o: low frequency deemphasis factors */ - const float fac_ns, /* i : noise filling level */ - const int16_t nf_seed, /* i : noise filling random seed */ - const float *A, /* i : LPC representation of the FDNS gains */ - float *gainlpc, /* i/o: FDNS gains */ - const int16_t hm_active, /* i : flag indicating if the harmonic model is active */ - float gain_tcx, /* i/o: global gain / quantized global gain */ - float spectrum[], /* o : dequantized spectrum */ - float synth[], /* o : time domain signal */ - int16_t *gain_tcx_q /* o : quantized global gain (at low bitrates) */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, iStart, noiseTransWidth; - int16_t tcx_last_overlap_mode, overlap; - int16_t nz; /* non-zero length in ALDO window*/ - int16_t aldo; /* ALDO flag in current frame*/ - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - float Aq_old[M + 1]; - float sns_interpolated_scalefactors[FDNS_NPTS]; - - mvr2r( x_quant, spectrum, max( L_frame, L_spec ) ); - - /* Replication of ACELP formant enhancement for low rates */ - if ( st->total_brate < ACELP_13k20 || st->rf_mode ) - { - tcxFormantEnhancement_flt( lf_deemph_fact, gainlpc, spectrum, L_frame ); - } - - /*-----------------------------------------------------------* - * Noise Filling. * - *-----------------------------------------------------------*/ - - if ( fac_ns > 0.0f ) - { - iStart = tcxGetNoiseFillingTilt_flt( A, L_frame, ( st->total_brate >= ACELP_13k20 && !st->rf_mode ), &hTcxEnc->noiseTiltFactor_flt ); - - noiseTransWidth = GetTransWidth( st->tcxonly, ( L_frame == st->L_frame >> 1 ), hTcxEnc->tcxltp_gain_flt, ( st->hTcxCfg->ctx_hm && st->last_core != ACELP_CORE && hm_active ) ); - assert( st->element_mode != IVAS_CPE_MDCT ); - tcx_noise_filling_flt( spectrum, nf_seed, iStart, noiseFillingBorder, noiseTransWidth, L_frame, hTcxEnc->noiseTiltFactor_flt, fac_ns, NULL, st->element_mode ); - } - - if ( st->total_brate < ACELP_13k20 || st->rf_mode ) - { - /* partially recompute global gain (energy part), taking noise filling and formant enhancement into account */ - float ener_nf = 1e-6f; - for ( i = 0; i < L_spec; i++ ) - { - ener_nf += spectrum[i] * spectrum[i]; - } - gain_tcx *= (float) sqrt( ener / ener_nf ); - tcx_QuantizeGain( L_spec, &gain_tcx, gain_tcx_q ); - } - - /*end of noise filling*/ - - /*-----------------------------------------------------------* - * Noise shaping in frequency domain (1/Wz) * - *-----------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - sns_interpolate_scalefactors( sns_interpolated_scalefactors, A, DEC ); - sns_shape_spectrum( spectrum, st->hTcxCfg->psychParamsCurrent, sns_interpolated_scalefactors, L_frame ); - } - else - { - mdct_noiseShaping_flt( spectrum, L_frame, gainlpc, FDNS_NPTS ); - } - - /*-----------------------------------------------------------* - * Apply gain * - *-----------------------------------------------------------*/ - - if ( st->hTcxCfg->coder_type == INACTIVE ) - { - - gain_tcx *= st->hTcxCfg->na_scale_flt; - } - - v_multc( spectrum, gain_tcx, spectrum, L_spec ); - - tcx_last_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; /* backup last TCX overlap mode */ - - if ( ( L_frame == st->L_frame >> 1 ) && st->tcxonly ) - { - int16_t L = L_frame; - - if ( ( st->hTcxCfg->fIsTNSAllowed && hTcxEnc->fUseTns[frame_cnt] != 0 ) || ( L_spec > L_frame ) ) - { - L = L_spec; - } - - tcxInvertWindowGrouping_flt( st->hTcxCfg, xn_buf, spectrum, L, hTcxEnc->fUseTns[frame_cnt], st->last_core, tcx_last_overlap_mode, frame_cnt, 0 ); - } - - /*-----------------------------------------------------------* - * Temporal Noise Shaping Synthesis * - *-----------------------------------------------------------*/ - - if ( st->hTcxCfg->fIsTNSAllowed ) - { - SetTnsConfig_flt( st->hTcxCfg, st->core == TCX_20_CORE, ( st->last_core == ACELP_CORE ) && ( frame_cnt == 0 ) ); - - /* Apply TNS to get the reconstructed signal */ - if ( hTcxEnc->fUseTns[frame_cnt] != 0 ) - { - ApplyTnsFilter_flt( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frame_cnt], spectrum, 0 ); - - if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) - { - if ( ( st->hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) || - ( ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) && ( frame_cnt == 0 ) && ( tcx_last_overlap_mode == 0 ) ) ) - { - const int16_t L_win = L_spec >> 1; - - /* undo rearrangement of LF sub-window lines for TNS synthesis filter */ - if ( L_frame > L_spec ) - { - assert( 0 ); - } - else - { - mvr2r( spectrum + 8, xn_buf, L_win ); - mvr2r( xn_buf, spectrum + L_win, 8 ); - mvr2r( xn_buf + 8, spectrum + 8, L_win - 8 ); - } - } - } - } - } - - /*-----------------------------------------------------------* - * Compute inverse MDCT of spectrum[]. * - *-----------------------------------------------------------*/ - - lsp2a_stab( st->lsp_old, Aq_old, M ); - overlap = st->hTcxCfg->tcx_mdct_window_length; - nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); - aldo = 0; - - if ( ( L_frame == st->L_frame >> 1 ) && ( st->tcxonly ) ) - { - if ( st->hTcxCfg->tcx_last_overlap_mode != FULL_OVERLAP ) - { - /* minimum or half overlap, two transforms, grouping into one window */ - float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; - const int16_t L_win = L_frame >> 1; - const int16_t L_spec_TCX5 = max( L_frame, L_spec ) >> 1; - const int16_t L_ola = ( st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? st->hTcxCfg->tcx_mdct_window_min_length : st->hTcxCfg->tcx_mdct_window_half_length; - int16_t w; - - set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); - set_zero( xn_buf, tcx_offset + ( L_ola >> 1 ) ); /* zero left end of buffer */ - - for ( w = 0; w < 2; w++ ) - { - if ( st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) - { - TCX_MDCT_Inverse_flt( spectrum + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - else - { - TCX_MDCT_Inverse_flt( spectrum + w * L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - } - - tcx_windowing_synthesis_current_frame_flt( win, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, w == 0 && st->last_core == ACELP_CORE, ( w > 0 ) || ( w == 0 && tcx_last_overlap_mode == 2 ) ? MIN_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, L_win, tcx_offset < 0 ? -tcx_offset : 0, ( w > 0 ) ? 1 : st->last_core, 0, 0 ); - - if ( w > 0 ) - { - tcx_windowing_synthesis_past_frame_flt( xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 2 ); - } - - /* add part of current sub-window overlapping with previous window */ - v_add( win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, xn_buf + tcx_offset - ( L_ola >> 1 ) + w * L_win, L_ola ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_ola, xn_buf + tcx_offset + ( L_ola >> 1 ) + w * L_win, L_win ); - } - - /* To assure that no garbage values are copied to Txnq_flt */ - set_zero( xn_buf + L_frame + tcx_offset + ( L_ola >> 1 ), overlap - tcx_offset - ( L_ola >> 1 ) ); - } - else if ( ( frame_cnt == 0 ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) - { - /* special overlap attempt, two transforms, grouping into one window */ - float win[( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2]; - const int16_t L_win = L_frame >> 1; - const int16_t L_spec_TCX5 = max( L_frame, L_spec ) >> 1; - const int16_t L_ola = st->hTcxCfg->tcx_mdct_window_min_length; - int16_t w; - - set_f( win, 0, ( L_FRAME_PLUS + L_MDCT_OVLP_MAX ) / 2 ); - - /* Resize overlap (affect only asymmetric window)*/ - overlap = st->hTcxCfg->tcx_mdct_window_delay; - - /* 1st TCX-5 window, special MDCT with minimum overlap on right side */ - TCX_MDCT_Inverse_flt( spectrum, win + L_win, 0, L_win - ( L_ola >> 1 ), L_ola, st->element_mode ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_win, xn_buf + ( overlap >> 1 ), L_win + ( L_ola >> 1 ) ); - - /* 2nd TCX-5 window, regular MDCT with minimum overlap on both sides */ - TCX_MDCT_Inverse_flt( spectrum + L_spec_TCX5, win, L_ola, L_win - L_ola, L_ola, st->element_mode ); - - tcx_windowing_synthesis_current_frame_flt( win, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, /* left_rect */ - 2, /* left_mode */ st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, L_win, tcx_offset < 0 ? -tcx_offset : 0, 1, /* not st->last_core */ 0, 0 ); - - tcx_windowing_synthesis_past_frame_flt( xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, L_ola, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 2 ); - - /* add part of current sub-window overlapping with previous window */ - v_add( win, xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), xn_buf + ( overlap >> 1 ) + L_win - ( L_ola >> 1 ), L_ola ); - - /* copy new sub-window region not overlapping with previous window */ - mvr2r( win + L_ola, xn_buf + ( overlap >> 1 ) + L_win + ( L_ola >> 1 ), L_win ); - - /* extra folding-out on left side of win, for perfect reconstruction */ - for ( w = ( overlap >> 1 ); w < overlap; w++ ) - { - xn_buf[overlap - 1 - w] = -1.0f * xn_buf[w]; - } - - tcx_windowing_synthesis_current_frame_flt( xn_buf, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, 0, /* left_mode */ st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, L_win, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); - } - else - { - /* default, i.e. maximum overlap, single transform, no grouping */ - TCX_MDCT_Inverse_flt( spectrum, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - - tcx_windowing_synthesis_current_frame_flt( xn_buf, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, ( frame_cnt > 0 ) && ( tcx_last_overlap_mode == 0 ) && ( st->last_core != ACELP_CORE ) ? 2 : tcx_last_overlap_mode, st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, st->L_frame >> 2, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); - - } /* tcx_last_overlap_mode != FULL_OVERLAP */ - } - else - { - /* frame is TCX-20 or not TCX-only */ - if ( st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - float tmp[L_FRAME_PLUS]; - - edct( spectrum, xn_buf + overlap / 2 + nz, L_frame, st->element_mode ); - - v_multc( xn_buf + overlap / 2 + nz, (float) sqrt( (float) L_frame / NORM_MDCT_FACTOR ), tmp, L_frame ); - - window_ola( tmp, xn_buf, st->hTcxEnc->old_out, L_frame, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); - aldo = 1; - } - else - { - TCX_MDCT_Inverse_flt( spectrum, xn_buf, overlap, L_frame - overlap, overlap, st->element_mode ); - - /* Windowing, overlap and add */ - /* Window current frame */ - tcx_windowing_synthesis_current_frame_flt( xn_buf, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, st->hTcxCfg->tcx_last_overlap_mode, /*left mode*/ st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, st->L_frame >> 1, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); - } - } /* TCX-20/TCX-10 and TCX-only */ - - /* Window and overlap-add past frame if past frame is TCX */ - if ( st->last_core > ACELP_CORE && ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && ( st->tcxonly ) ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) ) - { - if ( st->hTcxCfg->last_aldo ) - { - for ( i = 0; i < overlap - st->hTcxCfg->tcx_mdct_window_min_length; i++ ) - { - xn_buf[i] += st->hTcxEnc->old_out[i + nz]; - } - /* fade truncated ALDO window */ - for ( ; i < overlap; i++ ) - { - xn_buf[i] += st->hTcxEnc->old_out[i + nz] * st->hTcxCfg->tcx_mdct_window_minimum_flt[overlap - 1 - i]; - } - } - else - { - if ( frame_cnt > 0 && tcx_last_overlap_mode == 0 && st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP && st->last_core != ACELP_CORE ) - { - tcx_last_overlap_mode = 2; /* use minimum overlap between the two TCX-10 windows */ - } - - tcx_windowing_synthesis_past_frame_flt( st->hTcxEnc->Txnq_flt, st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, ( tcx_last_overlap_mode == 0 || st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? st->hTcxCfg->tcx_last_overlap_mode : tcx_last_overlap_mode ); - - for ( i = 0; i < overlap; i++ ) - { - xn_buf[i] += st->hTcxEnc->Txnq_flt[i]; - } - } - } - - if ( !aldo && ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && frame_cnt > 0 ) || L_frameTCX != ( hTcxEnc->L_frameTCX >> 1 ) ) ) - { - /*Compute windowed synthesis in case of switching to ALDO windows in next frame*/ - mvr2r( xn_buf + L_frame - nz, st->hTcxEnc->old_out, nz + overlap ); - set_zero( st->hTcxEnc->old_out + nz + overlap, nz ); - - tcx_windowing_synthesis_past_frame_flt( st->hTcxEnc->old_out + nz, st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_curr_overlap_mode ); - - if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) - { - for ( i = 0; i < nz; i++ ) - { - st->hTcxEnc->old_out[nz + overlap + i] = xn_buf[L_frame - 1 - i] * st->hTcxCfg->tcx_aldo_window_1_trunc_flt[-1 - i]; - } - } - } - - st->hTcxCfg->last_aldo = aldo; - - /* Update Txnq_flt */ - if ( !st->hTcxCfg->last_aldo ) - { - mvr2r( xn_buf + L_frame, st->hTcxEnc->Txnq_flt, overlap ); - } - - /* Output */ - mvr2r( xn_buf + ( overlap >> 1 ) - tcx_offset, synth, ( st->core == TCX_20_CORE ) ? st->L_frame : L_frame ); - - return; -} - - -/*-------------------------------------------------------------------* - * QuantizeSpectrum() - * - * - *-------------------------------------------------------------------*/ - -void QuantizeSpectrum( - Encoder_State *st, /* i/o: encoder state structure */ - const float A[], /* i : quantized coefficients NxAz_q[M+1] */ - const Word16 Aqind[], /* i : frame-independent quantized coefficients (M+1) */ - float gainlpc[], /* i : MDCT gains of the previous frame */ - float synth[], /* o : synthesis buffer */ - const int16_t nb_bits, /* i : bit budget */ - const int16_t tnsSize, /* i : number of tns parameters put into prm */ - int16_t prm[], /* o : tcx parameters */ - const int16_t frame_cnt, /* i : frame counter in the super_frame */ - CONTEXT_HM_CONFIG *hm_cfg, /* i : HM configuration */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - int16_t L_frameTCX; /* full frame length */ - int16_t L_frame; /* frame length */ - int16_t L_spec; /* length of the coded spectrum */ - int16_t tcx_offset; /* folding point offset relative to the end of the previous frame */ - int16_t noiseFillingBorder; /* noise filling border */ - float quantized_spectrum[N_MAX]; /* quantized MDCT spectrum */ - float lf_deemph_fact[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; /* low frequency deemphasis factors */ - int16_t hm_active; /* flag indicating if the harmonic model is active */ - float fac_ns; /* noise filling level */ - int16_t nf_seed; /* noise filling random seed */ - float ener; /* energy of the quantized spectrum */ - float gain_tcx; /* global gain */ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - /*-----------------------------------------------------------* - * Quantize the MDCT spectrum * - *-----------------------------------------------------------*/ - - QuantizeTCXSpectrum( st, frame_cnt, hTcxEnc->spectrum[frame_cnt], gainlpc, Aqind, tnsSize, nb_bits, vad_hover_flag, - &L_frameTCX, &L_frame, &L_spec, &tcx_offset, &noiseFillingBorder, quantized_spectrum, hm_cfg, &hm_active, lf_deemph_fact, &nf_seed, &ener, &gain_tcx, prm ); - - /*-----------------------------------------------------------* - * Estimate and quantize noise factor * - *-----------------------------------------------------------*/ - - EstimateTCXNoiseLevel( st, hTcxEnc->spectrum[frame_cnt], quantized_spectrum, gain_tcx, L_frame, noiseFillingBorder, hm_active, &fac_ns, &prm[1] ); - - /*-----------------------------------------------------------* - * Internal decoder * - *-----------------------------------------------------------*/ - - InternalTCXDecoder( st, frame_cnt, L_frameTCX, L_frame, L_spec, tcx_offset, noiseFillingBorder, quantized_spectrum, ener, lf_deemph_fact, fac_ns, nf_seed, A, gainlpc, hm_active, gain_tcx, hTcxEnc->spectrum[frame_cnt], synth, &prm[0] ); - - /* Update L_frame_past */ - st->L_frame_past = L_frame; - - /* Update overlap */ - if ( ( ( ( L_frameTCX == hTcxEnc->L_frameTCX >> 1 ) && frame_cnt > 0 ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) - { - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - } - - - return; -} - - -/*-------------------------------------------------------------------* - * coder_tcx() - * - * - *-------------------------------------------------------------------*/ - -void coder_tcx( - Encoder_State *st, /* i/o: encoder state structure */ - TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ - const float A[], /* i : quantized coefficients NxAz_q[M+1] */ - const Word16 Aqind[], /* i : frame-independent quantized coefficients (M+1) */ - float synth[], /* o : decoded synthesis */ - const int16_t L_frame_glob, /* i : frame length */ - const int16_t L_frameTCX_glob, - const int16_t L_spec, - int16_t nb_bits, /* i : bit budget */ - float spectrum[], /* i/o: MDCT spectrum */ - int16_t prm[], /* o : tcx parameters */ - CONTEXT_HM_CONFIG *hm_cfg, - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - int16_t L_frame; - int16_t left_overlap = -1, right_overlap = -1; - int16_t tnsSize = 0; /* number of tns parameters put into prm */ - int16_t tnsBits = 0; /* number of tns bits in the frame */ - int16_t ltpBits = 0; - float gainlpc[FDNS_NPTS]; - float buf[N_MAX + L_MDCT_OVLP_MAX]; - float winMDST[N_MAX + L_MDCT_OVLP_MAX]; - float *win; - float *powerSpec; - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - powerSpec = win = buf; /* Share memory for windowed TD signal and for the power spectrum */ - - L_frame = L_frameTCX_glob; - - /*-----------------------------------------------------------* - * Windowing and MDCT * - *-----------------------------------------------------------*/ - - if ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) - { - WindowSignal_flt( hTcxCfg, hTcxCfg->tcx_offsetFB, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX_flt, &L_frame, win, 1, 1 ); - - /* Compute MDCT for xn_buf[] */ - TCX_MDCT_flt( win, spectrum, left_overlap, L_frame - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - } - else - { - wtda( st->hTcxEnc->new_speech_TCX_flt, win, NULL, hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode, L_frame ); - - WindowSignal_flt( hTcxCfg, hTcxCfg->tcx_offsetFB, hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : hTcxCfg->tcx_last_overlap_mode, hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : hTcxCfg->tcx_curr_overlap_mode, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX_flt, &L_frame, winMDST, 1, 1 ); - - edct( win, spectrum, L_frame, st->element_mode ); - - v_multc( spectrum, (float) sqrt( (float) NORM_MDCT_FACTOR / L_frame ), spectrum, L_frame ); - } - - /*-----------------------------------------------------------* - * Attenuate upper end of NB spectrum, * - * to simulate ACELP behavior * - *-----------------------------------------------------------*/ - - if ( st->narrowBand ) - { - attenuateNbSpectrum( L_frame, spectrum ); - } - - /*-----------------------------------------------------------* - * Compute noise-measure flags for spectrum filling * - * and quantization (0: tonal, 1: noise-like). * - * Detect low pass if present. * - *-----------------------------------------------------------*/ - - AnalyzePowerSpectrum( st, L_frame * st->L_frame / hTcxEnc->L_frameTCX, L_frame, left_overlap, right_overlap, spectrum, ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ? win : winMDST, powerSpec ); - - if ( hTcxCfg->fIsTNSAllowed ) - { - SetTnsConfig_flt( hTcxCfg, L_frame_glob == st->L_frame, st->last_core == ACELP_CORE ); - - TNSAnalysis( hTcxCfg, L_frame, L_spec, TCX_20, st->last_core == ACELP_CORE, spectrum, NULL, -1, hTcxEnc->tnsData, hTcxEnc->fUseTns, &st->hIGFEnc->tns_predictionGain_flt ); - } - else - { - hTcxEnc->fUseTns[0] = hTcxEnc->fUseTns[1] = 0; - } - - if ( st->igf ) - { - ProcessIGF( st, spectrum, spectrum, powerSpec, 1, 0, 0, vad_hover_flag ); - } - - ShapeSpectrum( hTcxCfg, A, gainlpc, L_frame_glob, L_spec, spectrum, hTcxEnc->fUseTns[0], st, NULL ); - - if ( st->igf ) - { - nb_bits -= st->hIGFEnc->infoTotalBitsPerFrameWritten; - } - - if ( hTcxCfg->fIsTNSAllowed ) - { - EncodeTnsData( hTcxCfg->pCurrentTnsConfig, hTcxEnc->tnsData, prm + 1 + NOISE_FILL_RANGES + LTPSIZE, &tnsSize, &tnsBits ); - } - - QuantizeSpectrum( st, A, Aqind, gainlpc, synth, nb_bits - tnsBits - ltpBits, tnsSize, prm, 0, hm_cfg, vad_hover_flag ); - - return; -} - -/*-------------------------------------------------------------------* - * coder_tcx_post() - * - * - *-------------------------------------------------------------------*/ - -void coder_tcx_post( - Encoder_State *st, /* i/o: encoder memory state */ - float *A, /* o : Quantized LPC coefficients */ - const float *Ai /* i : Unquantized (interpolated) LPC coefficients */ -) -{ - float xn_buf[L_FRAME_MAX]; - - /* TCX output */ - mvr2r( st->synth_flt, xn_buf, st->L_frame ); - - /*-----------------------------------------------------------* - * Memory update * - *-----------------------------------------------------------*/ - - /* Update LPDmem (Txnq_flt,syn,syn_pe,old_exc,wsyn,Ai,Aq) */ - tcx_encoder_memory_update( st, xn_buf, Ai, A ); - - return; -} -#endif diff --git a/lib_enc/cod_tcx_fx.c b/lib_enc/cod_tcx_fx.c index 1de9482c0..1a7440e0e 100644 --- a/lib_enc/cod_tcx_fx.c +++ b/lib_enc/cod_tcx_fx.c @@ -1049,7 +1049,6 @@ void ShapeSpectrum_fx( PsychAdaptLowFreqEmph_fx( spectrum, gainlpc, gainlpc_e ); } } -#ifdef IVAS_FLOAT_FIXED void ShapeSpectrum_ivas_fx( TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ Word16 A[], /* input: quantized coefficients NxAz_q[M+1], Q = 14 - norm(A[0]) */ @@ -1334,7 +1333,6 @@ void ShapeSpectrum_ivas_fx( PsychAdaptLowFreqEmph_fx( spectrum, gainlpc, gainlpc_e ); } } -#endif #ifdef ADD_IVAS_TNS /*-----------------------------------------------------------* @@ -1484,7 +1482,6 @@ static int16_t DecideTonalSideInfo( } #endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * GetTransWidth() * @@ -1707,9 +1704,7 @@ void QuantizeSpectrum_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED void EstimateStereoTCXNoiseLevel_fx( Encoder_State **sts, /* i : state handle */ Word32 *q_spectrum[CPE_CHANNELS][NB_DIV], /* i : quantized MDCT spectrum */ @@ -1861,7 +1856,6 @@ void EstimateStereoTCXNoiseLevel_fx( return; } -#endif void QuantizeSpectrum_fx( TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ @@ -3500,7 +3494,6 @@ void QuantizeSpectrum_fx( move16(); } -#ifdef IVAS_FLOAT_FIXED static Word16 DecideTonalSideInfo_fx( Word32 spectrum[], // Qx const Word16 L_frame_glob, @@ -3549,9 +3542,7 @@ static Word16 DecideTonalSideInfo_fx( return Tonal_SideInfo; } -#endif -#ifdef IVAS_FLOAT_FIXED void QuantizeTCXSpectrum_fx( Encoder_State *st, /* i : state handle */ const Word16 frame_cnt, /* i : frame counter in the super_frame Q0 */ @@ -4386,7 +4377,6 @@ void QuantizeTCXSpectrum_fx( return; } -#endif void coder_tcx_fx( Word16 n, @@ -4623,7 +4613,6 @@ void coder_tcx_post_fx( return; } -#ifdef IVAS_FLOAT_FIXED void coder_tcx_post_ivas_fx( Encoder_State *st, LPD_state *LPDmem, @@ -5456,4 +5445,3 @@ void InternalTCXDecoder_fx( return; } -#endif diff --git a/lib_enc/cod_uv.c b/lib_enc/cod_uv.c index 01bd16c65..e748899a9 100644 --- a/lib_enc/cod_uv.c +++ b/lib_enc/cod_uv.c @@ -38,54 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * gauss_L2: - * - * encode an additional Gaussian excitation for unvoiced subframes and compute - * associated xcorrelations for gains computation - * - * Gaussian excitation is generated by a white noise and shapes it with LPC-derived filter - *-------------------------------------------------------------------*/ - -void gauss_L2( - const float h[], /* i : weighted LP filter impulse response */ - float code[], /* o : gaussian excitation */ - float y2[], /* i : zero-memory filtered code. excitation */ - float y11[], /* o : zero-memory filtered gauss. excitation */ - float *gain, /* o : excitation gain */ - float g_corr[], /* i/o: correlation structure for gain coding */ - float tilt_code, /* i : tilt of code */ - const float *Aq, /* i : quantized LPCs */ - float formant_enh_num, /* i : formant enhancement factor */ - int16_t *seed_acelp /* i/o: random seed */ -) -{ - int16_t i; - - /*-----------------------------------------------------------------* - * Find new target for the Gaussian codebook - *-----------------------------------------------------------------*/ - - /*Generate white gaussian noise using central limit theorem method (N only 4 as E_util_random is not purely uniform)*/ - for ( i = 0; i < L_SUBFR; i++ ) - { - code[i] = (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - code[i] += (float) ( own_random( seed_acelp ) ) / ( 1 << 15 ); - } - - /*Shape the gaussian excitation*/ - cb_shape( 1, 0, 0, 1, 0, formant_enh_num, FORMANT_SHARPENING_G2_FLT, Aq, code, tilt_code, 0, L_SUBFR ); - - /*compute 0s memory weighted synthesis contribution and find gain*/ - conv( code, h, y11, L_SUBFR ); - *gain = 0.f; - - /*Update correlations for gains coding */ - g_corr[0] = 0.01F + dotp( y11, y11, L_SUBFR ); - g_corr[4] = 0.01F + dotp( y11, y2, L_SUBFR ); - - return; -} -#endif diff --git a/lib_enc/comvad_decision.c b/lib_enc/comvad_decision.c index 5eb7aeda6..f6ca036b2 100644 --- a/lib_enc/comvad_decision.c +++ b/lib_enc/comvad_decision.c @@ -39,839 +39,3 @@ #include "prot.h" #include "rom_enc.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * local function prototypes - *-------------------------------------------------------------------*/ - -static int16_t comvad_hangover( const float lt_snr_org, const float snr, const float lf_snr, const float snr_flux, const int16_t bw_index, const int16_t vad_flag, const int16_t pre_res_hang_num, const int16_t continuous_speech_num2, const int16_t noisy_type ); - - -/*-------------------------------------------------------------------* - * comvad_decision() - * - * - *-------------------------------------------------------------------*/ - -int16_t comvad_decision( - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - const float snr, /* i : frequency domain SNR */ - const float tsnr, /* i : time domain SNR */ - const float snr_flux, /* i : average tsnr of several frames */ - const float lt_snr, /* i : long time SNR calculated by fg_energy and bg_energy*/ - const float lt_snr_org, /* i : original long time SNR */ - const float lf_snr, /* i : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ - const float frame_energy, /* i : current frame energy */ - const int16_t music_backgound_f, /* i : background music flag */ - int16_t *cldfb_addition, - const int16_t vada_flag ) -{ - int16_t speech_flag = hVAD_CLDFB->speech_flag; - int16_t fg_energy_count = hVAD_CLDFB->fg_energy_count; - int16_t bg_energy_count = hVAD_CLDFB->bg_energy_count; - float fg_energy = hVAD_CLDFB->fg_energy; - float bg_energy = hVAD_CLDFB->bg_energy; - int16_t l_speech_snr_count = hVAD_CLDFB->l_speech_snr_count; - int16_t vad_flag; - float snr_thresh = 0.2f; - float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; - float *sp_center = hVAD_CLDFB->sp_center; - int16_t frameloop = hVAD_CLDFB->frameloop; - int16_t bw_index = hVAD_CLDFB->bw_index; - int16_t noisy_type = UNKNOWN_NOISE; - int16_t vadb_flag = 0; - - /* - * ls_snr_org - * -------NB---------------WB----------------SWB--------- - * l16 [13.5 17] [13.5 16] [13.1 15.2] - * 126 [12 14] [10.7 12.7] [10.3 12.1] - * l36 [9.5 12] [8.5 10.5] [7.8 9.2] - * 15dB [3.5 4.5] - * 20dB [4.5 5.5] - */ - - /* - * lt_snr_org - * -------NB---------------WB----------------SWB--------- - * l16 [-- --] [-- --] [-- --] - * 126 [-- --] [-- -] [-- --] - * l36 [-- --] [-- --] [- --] - * 15dB [1.2 1.9] - * 20dB [2.1 2.7] [1.8 2.3] - */ - - if ( hVAD_CLDFB->lf_snr_smooth > LS_MIN_SELENCE_SNR[bw_index - CLDFBVAD_NB_ID] && lt_snr_org > LT_MIN_SILENCE_SNR[bw_index - CLDFBVAD_NB_ID] ) - { - noisy_type = SILENCE; - } - - snr_thresh = construct_snr_thresh( sp_center, snr_flux, lt_snr, lf_snr, hVAD_CLDFB->continuous_speech_num, hVAD_CLDFB->continuous_noise_num, hVAD_CLDFB->fg_energy_est_start, bw_index ); - - if ( snr > snr_thresh ) - { - vad_flag = 1; - } - else - { - vad_flag = 0; - } - - if ( bw_index == CLDFBVAD_WB_ID ) - { - if ( tsnr > 2.8 ) - { - vad_flag = 1; - } - } - else - { - if ( tsnr > 2.6 ) - { - vad_flag = 1; - } - } - - if ( frameloop > 25 ) - { - if ( vad_flag == 1 && hVAD_CLDFB->fg_energy_est_start == 1 ) - { - if ( fg_energy_count == 512 ) - { - fg_energy = fg_energy * 0.75f; - fg_energy_count = 384; - } - if ( ( frame_energy * bg_energy_count ) > 6 * bg_energy ) - { - fg_energy = fg_energy + frame_energy; - fg_energy_count = fg_energy_count + 1; - } - } - } - - if ( music_backgound_f ) - { - vad_flag = 1; - } - - if ( vad_flag == 1 ) - { - if ( snr > hVAD_CLDFB->l_silence_snr / hVAD_CLDFB->l_silence_snr_count + 1.5 ) - { - if ( l_speech_snr_count == 512 ) - { - hVAD_CLDFB->l_speech_snr = hVAD_CLDFB->l_speech_snr * 0.75f; - l_speech_snr_count = 384; - - hVAD_CLDFB->l_speech_snr += snr; - l_speech_snr_count++; - } - else - { - hVAD_CLDFB->l_speech_snr += snr; - l_speech_snr_count++; - } - } - } - - if ( bw_index == CLDFBVAD_NB_ID ) - { - if ( snr_flux > 1.9 + lt_snr * 0.28 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.5 ) && sp_center[3] > 1.6 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.2 ) && sp_center[3] > 1.9 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.00f ) && sp_center[3] > 3.2 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - } - - if ( bw_index == CLDFBVAD_WB_ID ) - { - if ( ( snr_flux > 2.1 + lt_snr * 0.24 ) ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.6 ) && sp_center[3] > 2.5 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.2 ) && sp_center[3] > 2.8 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.0 ) && sp_center[3] > 4.5 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - } - - if ( bw_index == CLDFBVAD_SWB_ID ) - { - if ( ( snr_flux > 2.1 + lt_snr * 0.32 ) ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.68 ) && sp_center[3] > 2.76 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.24 ) && sp_center[3] > 2.92 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - if ( ( snr_flux > 1.10f ) && sp_center[3] > 4.6 && lt_snr_org < 3.5 ) - { - vad_flag = 1; - } - } - - if ( hVAD_CLDFB->fg_energy_est_start == 0 ) - { - if ( ltd_stable_rate[0] > 0.08 && vad_flag == 1 && frame_energy > 50 ) - { - hVAD_CLDFB->fg_energy_est_start = 1; - } - } - - /************************************************************************/ - /* hangover */ - /************************************************************************/ - - speech_flag = comvad_hangover( lt_snr_org, snr, lf_snr, snr_flux, bw_index, vad_flag, speech_flag, hVAD_CLDFB->continuous_speech_num2, noisy_type ); - - if ( vad_flag == 0 && speech_flag > 0 ) - { - speech_flag--; - vad_flag = 1; - } - - vadb_flag = vad_flag; - - if ( bw_index == CLDFBVAD_SWB_ID ) - { - if ( SILENCE == noisy_type && snr > 0.2 && vad_flag == 0 ) - { - vad_flag = vada_flag; - } - else if ( hVAD_CLDFB->lf_snr_smooth < 10.5 || SILENCE != noisy_type ) - { - if ( ( snr_flux > 1.8 ) || ( ( hVAD_CLDFB->continuous_speech_num2 > 40 ) && ( snr_flux > 1.6 ) ) || music_backgound_f == 1 ) - { - vad_flag = vada_flag | vadb_flag; - } - /*only use for silence*/ - else if ( noisy_type == SILENCE ) - { - vad_flag = vada_flag; - } - } - } - else if ( bw_index == CLDFBVAD_WB_ID ) - { - if ( SILENCE == noisy_type && snr > 0.2 && vad_flag == 0 ) - { - vad_flag = vada_flag; - } - else - { - if ( hVAD_CLDFB->lf_snr_smooth < 10.5 || SILENCE != noisy_type ) - { - if ( ( snr_flux > 2.2 ) || ( ( hVAD_CLDFB->continuous_speech_num2 > 40 ) && ( snr_flux > 1.6 ) ) || music_backgound_f == 1 ) - { - vad_flag = vada_flag | vadb_flag; - } - else if ( SILENCE == noisy_type ) - { - vad_flag = vada_flag; - } - } - } - } - else - { - if ( noisy_type == SILENCE ) - { - if ( hVAD_CLDFB->lf_snr_smooth > 12.5 && music_backgound_f == 0 ) - { - vad_flag = vada_flag; - } - } - else - { - if ( ( snr_flux > 2.0 ) || ( hVAD_CLDFB->continuous_speech_num2 > 30 && ( snr_flux > 1.5 ) ) || music_backgound_f == 1 ) - { - vad_flag = vada_flag | vadb_flag; - } - } - } - - if ( vad_flag == 0 ) - { - if ( hVAD_CLDFB->l_silence_snr_count == 512 ) - { - hVAD_CLDFB->l_silence_snr = hVAD_CLDFB->l_silence_snr * 0.75f; - hVAD_CLDFB->l_silence_snr_count = 384; - - hVAD_CLDFB->l_silence_snr += snr; - hVAD_CLDFB->l_silence_snr_count++; - } - else if ( snr < 0.8 ) - { - hVAD_CLDFB->l_silence_snr += snr; - hVAD_CLDFB->l_silence_snr_count++; - } - } - - if ( vad_flag == 0 ) - { - if ( bg_energy_count == 512 ) - { - bg_energy = bg_energy * 0.75f; - bg_energy_count = 384; - } - - if ( tsnr < 1.0 ) - { - bg_energy = bg_energy + frame_energy; - bg_energy_count = bg_energy_count + 1; - } - } - - hVAD_CLDFB->lt_snr_org = lt_snr_org; - hVAD_CLDFB->speech_flag = speech_flag; - - hVAD_CLDFB->fg_energy_count = fg_energy_count; - hVAD_CLDFB->bg_energy_count = bg_energy_count; - hVAD_CLDFB->fg_energy = fg_energy; - hVAD_CLDFB->bg_energy = bg_energy; - hVAD_CLDFB->l_speech_snr_count = l_speech_snr_count; - - hVAD_CLDFB->vad_flag_for_bk_update = vad_flag; - if ( hVAD_CLDFB->update_count < 12 && vadb_flag == 1 ) - { - hVAD_CLDFB->warm_hang_num = max( 20, speech_flag ); - } - - if ( vad_flag == 0 && hVAD_CLDFB->warm_hang_num > 0 ) - { - hVAD_CLDFB->warm_hang_num--; - vad_flag = 1; - } - - if ( noisy_type == SILENCE && bw_index != CLDFBVAD_NB_ID ) - - { - *cldfb_addition = 2; - } - else - { - *cldfb_addition = 0; - - if ( bw_index == CLDFBVAD_WB_ID ) - { - *cldfb_addition = 3; - } - - if ( bw_index == CLDFBVAD_SWB_ID ) - { - *cldfb_addition = 1; - } - - if ( hVAD_CLDFB->bw_index == CLDFBVAD_NB_ID ) - { - *cldfb_addition = 1; - } - } - - return vad_flag; -} - - -/*-------------------------------------------------------------------* - * construct_snr_thresh() - * - * - *-------------------------------------------------------------------*/ - -float construct_snr_thresh( - const float sp_center[], /* i : spectral center */ - const float snr_flux, /* i : snr flux */ - const float lt_snr, /* i : long time time domain snr */ - const float lf_snr, /* i : long time frequency domain snr */ - const int16_t continuous_speech_num, /* i : number of continuous speech frames */ - const int16_t continuous_noise_num, /* i : number of continuous noise frames */ - const int16_t fg_energy_est_start, /* i : whether if estimated energy */ - const int16_t bw_index /* i : band width index */ -) -{ - float test_l_snr = 0.f; - float snr_delta; - float snr_thresh; - float bw_snr; - - snr_delta = COMVAD_INIT_SNR_DELTA[bw_index]; - bw_snr = lt_snr; - - if ( bw_index == CLDFBVAD_SWB_ID ) - { - test_l_snr = lt_snr; - test_l_snr = test_l_snr * 1.0f; - - if ( sp_center[3] > 2.80f ) - { - snr_delta = snr_delta + 0.00f; - } - else if ( sp_center[2] > 2.6 ) - { - snr_delta = snr_delta + 0.03f; - } - else if ( sp_center[2] > 1.6 ) - { - snr_delta = snr_delta + 0.05f; - } - else if ( sp_center[3] > 1.4 ) - { - snr_delta = snr_delta + 0.10f; - } - else - { - snr_delta = snr_delta + 0.40f; - } - - if ( continuous_speech_num > 8 && fg_energy_est_start == 1 ) - { - snr_delta = snr_delta - 0.2f; - } - else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + lf_snr * 0.1 ) ) - { - snr_delta = snr_delta + 0.1f; - } - else if ( continuous_noise_num > 24 ) - { - snr_delta = snr_delta + 0.2f; - } - else if ( ( continuous_noise_num > 4 ) ) - { - snr_delta = snr_delta + 0.1f; - } - } - else if ( bw_index == CLDFBVAD_WB_ID ) - { - test_l_snr = lt_snr; - if ( sp_center[3] > 2.80f ) - { - snr_delta = snr_delta + 0.00f; - } - else if ( sp_center[2] > 2.6 ) - { - snr_delta = snr_delta + 0.03f; - } - else if ( sp_center[2] > 1.6 ) - { - snr_delta = snr_delta + 0.05f; - } - else if ( sp_center[3] > 1.4 ) - { - snr_delta = snr_delta + 0.10f; - } - else - { - snr_delta = snr_delta + 0.30f; - } - - if ( continuous_speech_num > 8 && fg_energy_est_start == 1 ) - { - snr_delta = snr_delta - 0.1f; - } - else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + bw_snr * 0.1 ) ) - { - snr_delta = snr_delta + 0.1f; - } - else if ( continuous_noise_num > 24 ) - { - snr_delta = snr_delta + 0.2f; - } - else if ( ( continuous_noise_num > 4 ) ) - { - snr_delta = snr_delta + 0.1f; - } - } - else if ( bw_index == CLDFBVAD_NB_ID ) - { - test_l_snr = lt_snr; - - if ( sp_center[3] > 3.0 ) - { - snr_delta = snr_delta + 0.00f; - } - else if ( sp_center[2] > 2.6 ) - { - snr_delta = snr_delta + 0.02f; - } - else if ( sp_center[2] > 1.6 ) - { - snr_delta = snr_delta + 0.04f; - } - else if ( sp_center[2] > 1.46 ) - { - snr_delta = snr_delta + 0.10f; - } - else - { - snr_delta = snr_delta + 0.18f; - } - - if ( continuous_speech_num > 80 && fg_energy_est_start == 1 && ( sp_center[0] > 1.4 ) ) - { - snr_delta = snr_delta - 0.32f; - } - else if ( continuous_speech_num > 8 && fg_energy_est_start == 1 && ( snr_flux > 0.2 + lf_snr * 0.1 ) ) - { - snr_delta = snr_delta - 0.1f; - } - else if ( continuous_noise_num > 12 && ( snr_flux > 0.6 + lf_snr * 0.1 ) ) - { - snr_delta = snr_delta + 0.1f; - } - else if ( continuous_noise_num > 24 ) - { - snr_delta = snr_delta + 0.2f; - } - } - else - { - snr_delta = 1.0f; - } - - snr_thresh = snr_delta + test_l_snr; - - - return snr_thresh; -} - - -/*-------------------------------------------------------------------* - * comvad_hangover() - * - * - *-------------------------------------------------------------------*/ - -static int16_t comvad_hangover( - const float lt_snr_org, /* i : original long time SNR */ - const float snr, /* i : frequency domain SNR */ - const float lf_snr, /* i : long time frequency domain SNR calculated by l_speech_snr and l_silence_snr*/ - const float snr_flux, /* i : average tsnr */ - const int16_t bw_index, /* i : band width index */ - const int16_t vad_flag, /* i : VAD flag */ - const int16_t pre_res_hang_num, /* i : residual number of previous hangover */ - const int16_t continuous_speech_num2, /* i : number of continuous speech frames */ - const int16_t noisy_type /* i : noisy type */ -) -{ - int16_t speech_flag = pre_res_hang_num; - - if ( bw_index == CLDFBVAD_SWB_ID ) - { - if ( vad_flag ) - { - if ( lt_snr_org > 3.5f ) - { - speech_flag = 3; - } - else - { - speech_flag = 4; - } - - if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) - { - speech_flag = 8 - continuous_speech_num2; - } - else if ( ( snr_flux > 0.8 ) && ( continuous_speech_num2 > 24 ) ) - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 2.6f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 1.6f ) - { - speech_flag = 4; - } - else - { - speech_flag = 5; - } - speech_flag = speech_flag - 1; - } - - if ( continuous_speech_num2 < 120 ) - { - if ( snr > 1.5 ) - { - speech_flag = 9; - } - else if ( snr > 1.0 && speech_flag < 7 ) - { - speech_flag = 7; - } - else if ( speech_flag < 3 ) - { - speech_flag = 3; - } - if ( speech_flag > 3 ) - { - speech_flag -= 2; - } - } - else - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 1; - } - else if ( lt_snr_org > 3.0f ) - { - speech_flag = 2; - } - else if ( lt_snr_org > 2.5f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 2.0f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 1.5f ) - { - speech_flag = 4; - } - else - { - speech_flag = 5; - } - } - - if ( noisy_type == SILENCE ) - { - speech_flag = 6; - } - } - } - else if ( bw_index == CLDFBVAD_WB_ID ) - { - if ( vad_flag ) - { - if ( lt_snr_org > 3.5f ) - { - speech_flag = 1; - } - else - { - speech_flag = 2; - } - - if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) - { - speech_flag = 8 - continuous_speech_num2; - } - else if ( ( snr_flux > 0.9 ) && ( continuous_speech_num2 > 50 ) ) - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 1; - } - else if ( lt_snr_org > 2.6f ) - { - speech_flag = 5; - } - else if ( lt_snr_org > 1.6f ) - { - speech_flag = 6; - } - else - { - speech_flag = 7; - } - - if ( speech_flag > 1 ) - { - speech_flag = speech_flag - 1; - } - } - - if ( continuous_speech_num2 < 120 ) - { - if ( snr > 1.5 ) - { - speech_flag = 6; - } - else if ( snr > 1.0 && speech_flag < 5 ) - { - speech_flag = 5; - } - else if ( snr > 0.8 && lt_snr_org < 2 && speech_flag < 4 ) - { - speech_flag = 4; - } - else if ( speech_flag < 3 ) - { - speech_flag = 3; - } - } - else - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 1; - } - else if ( lt_snr_org > 3.0f ) - { - speech_flag = 2; - } - else if ( lt_snr_org > 2.5f ) - { - speech_flag = 2; - } - else if ( lt_snr_org > 2.0f ) - { - speech_flag = 3; - } - else - { - speech_flag = 3; - } - } - - if ( noisy_type == SILENCE ) - { - speech_flag = 6; - } - } - } - else - { - if ( vad_flag ) - { - if ( lt_snr_org > 3.5f ) - { - speech_flag = 3; - } - else - { - speech_flag = 4; - } - - if ( ( continuous_speech_num2 < 8 ) && ( lt_snr_org < 4.0f ) ) - { - speech_flag = 8 - continuous_speech_num2; - } - else if ( ( snr_flux > 0.8 + lf_snr * 0.1 ) && ( continuous_speech_num2 > 24 ) ) - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 2.6f ) - { - speech_flag = 8; - } - else if ( lt_snr_org > 1.2f ) - { - speech_flag = 10; - } - else - { - speech_flag = 12; - } - - if ( speech_flag > 2 ) - { - speech_flag = speech_flag - 2; - } - } - - if ( continuous_speech_num2 < 120 ) - { - if ( snr > 1.5 ) - { - speech_flag = 10; - } - else if ( snr > 1.0 && speech_flag < 7 ) - { - speech_flag = 7; - } - else if ( speech_flag < 3 && continuous_speech_num2 > 12 ) - { - speech_flag = 3; - } - } - else - { - if ( lt_snr_org > 3.6f ) - { - speech_flag = 2; - } - else if ( lt_snr_org > 3.0f ) - { - speech_flag = 2; - } - else if ( lt_snr_org > 2.5f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 2.0f ) - { - speech_flag = 3; - } - else if ( lt_snr_org > 1.5f ) - { - speech_flag = 4; - } - else - { - speech_flag = 4; - } - } - - if ( noisy_type == SILENCE ) - { - speech_flag = 2; - } - } - } - - if ( vad_flag == 1 ) - { - if ( noisy_type != SILENCE ) - { - speech_flag--; - } - else - { - speech_flag = speech_flag - 3; - } - - if ( speech_flag < 0 ) - { - speech_flag = 0; - } - } - - return speech_flag; -} -#endif diff --git a/lib_enc/cor_shif.c b/lib_enc/cor_shif.c index 2946cd0fa..825401325 100644 --- a/lib_enc/cor_shif.c +++ b/lib_enc/cor_shif.c @@ -39,35 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Correlation_shift - * - * Find normalized correlation correction dependent on estimated noise - * Note: this variable is basically active only if noise suppression - * is desactivated. * Otherwise, (for default NS = 14 dB and up to 10dB SNR) - * it can be assumed about 0 - *-------------------------------------------------------------------*/ - -#define MAX_CORR_SHIFT 0.5f - -/*! r: noise dependent voicing correction */ -float correlation_shift( - const float totalNoise /* i : noise estimate over all critical bands */ -) -{ - float corr_shift; - - corr_shift = 0.0f; - if ( totalNoise > 28.18225893613955f ) /* to make corr_shift > 0.0 */ - { - /* useful values range from 0 to 1 (can saturate at 1.0) */ - corr_shift = 2.4492e-4f * (float) exp( 0.1596f * totalNoise ) - 0.022f; - } - if ( corr_shift > MAX_CORR_SHIFT ) - { - corr_shift = MAX_CORR_SHIFT; - } - return corr_shift; -} -#endif diff --git a/lib_enc/core_enc_2div.c b/lib_enc/core_enc_2div.c index 019a56586..0fe8682da 100644 --- a/lib_enc/core_enc_2div.c +++ b/lib_enc/core_enc_2div.c @@ -40,206 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * core_encode_twodiv() - * - * Two-div core encoder - *-------------------------------------------------------------------*/ - -void core_encode_twodiv( - Encoder_State *st, /* i/o: coder memory state */ - const float new_samples[], /* i : new samples */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t n; - float lsp_new[M], lsp_mid[M]; - float lsf_q[M], lsp_q[M]; - float lspmid_q[M]; - float A_q[M + 1]; - int16_t param_lpc[NPRM_LPC_NEW]; - int16_t nbits_lpc[2]; - int16_t param_core[2 * NPRM_DIV]; - int16_t target_bits; - float gainlpc[2][FDNS_NPTS]; - int16_t tnsSize[2]; /* number of tns parameters put into prm */ - int16_t tnsBits[2]; /* number of tns bits in the frame */ - int16_t ltpBits; - int16_t bitsAvailable; - int16_t indexBuffer[2 * ( ( N_MAX / 2 ) + 1 )]; - CONTEXT_HM_CONFIG hm_cfg[2]; - int16_t bits_param_lpc[10], no_param_lpc; - int16_t i, T_op[3]; - - hm_cfg[0].indexBuffer = &indexBuffer[0]; - hm_cfg[1].indexBuffer = &indexBuffer[N_MAX / 2 + 1]; - - set_s( tnsSize, 0, 2 ); - set_s( tnsBits, 0, 2 ); - ltpBits = 0; - - for ( i = 0; i < 3; i++ ) - { - T_op[i] = st->pitch[i]; - - /* check minimum pitch for quantization */ - if ( T_op[i] < PIT_MIN_SHORTER ) - { - T_op[i] *= 2; - } - - /* convert pitch values to core sampling-rate */ - if ( st->L_frame != L_FRAME ) - { - T_op[i] = (int16_t) ( T_op[i] * (float) st->L_frame / (float) L_FRAME + 0.5f ); - } - } - - /*--------------------------------------------------------------* - * TCX20/TCX10 switching decision - *---------------------------------------------------------------*/ - - if ( st->hTcxEnc->tcxMode == TCX_10 ) - { - st->core = TCX_10_CORE; - } - else if ( st->hTcxEnc->tcxMode == TCX_20 ) - { - st->core = TCX_20_CORE; - } - - /*--------------------------------------------------------------* - * Core Signal Analysis: MDCT, TNS, LPC analysis - *---------------------------------------------------------------*/ - - core_signal_analysis_high_bitrate( new_samples, T_op, lsp_new, lsp_mid, st, NULL, tnsSize, tnsBits, param_core, <pBits, NULL, st->L_frame, hTcxEnc->L_frameTCX, EVS_MONO, vad_hover_flag ); - - /*--------------------------------------------------------------* - * LPC Quantization - *---------------------------------------------------------------*/ - - lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, st->coder_type, 0, /*No acelp->no need to compute any mid-LPC*/ - param_lpc, nbits_lpc, bits_param_lpc, &no_param_lpc ); - - /*--------------------------------------------------------------* - * Rate switching - *--------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( lsp_q, st->lsp_old, M ); - mvr2r( lsf_q, st->lsf_old, M ); - } - - /*--------------------------------------------------------------* - * Run Two TCX10 - *---------------------------------------------------------------*/ - - if ( st->core == TCX_10_CORE ) - { - const int16_t last_ace_mode = st->last_core; - - for ( n = 0; n < 2; n++ ) - { - if ( n == 0 ) - { - lsp2a_stab( lspmid_q, A_q, M ); - } - else - { - lsp2a_stab( lsp_q, A_q, M ); - } - - /* Shape spectrum */ - ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[n], st->L_frame / 2, st->hTcxCfg->tcx_coded_lines / 2, hTcxEnc->spectrum[n], hTcxEnc->fUseTns[n], st, NULL ); - - st->last_core = st->core; - } - st->last_core = last_ace_mode; - - /* Calculate target bits */ - bitsAvailable = st->bits_frame_core - nbits_lpc[0] - nbits_lpc[1] - st->nb_bits_header_tcx; - - /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - bitsAvailable -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; - { - bitsAvailable -= st->hIGFEnc->infoTotalBitsWritten; - } - - hTcxEnc->measuredBwRatio_flt = 1.f; - - for ( n = 0; n < 2; n++ ) - { - target_bits = ( ( bitsAvailable + 1 - n ) >> 1 ) - tnsBits[n]; - - if ( n == 0 ) - { - target_bits -= ltpBits; - } - - if ( st->enablePlcWaveadjust && n ) - { - target_bits -= 1; - } - - /* Run TCX10 encoder */ - QuantizeSpectrum( st, A_q, NULL, gainlpc[n], st->synth_flt + n * st->L_frame / 2, target_bits, tnsSize[n], param_core + n * NPRM_DIV, n, &hm_cfg[n], vad_hover_flag ); - - /* Update tcx overlap mode */ - if ( ( n > 0 ) || !st->tcxonly ) - { - st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - } - } - - coder_tcx_post( st, A_q, Aw ); - } - - /*--------------------------------------------------------------* - * Run One TCX20 - *---------------------------------------------------------------*/ - - if ( st->core == TCX_20_CORE ) - { - lsp2a_stab( lsp_q, A_q, M ); - - ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[0], st->L_frame, st->hTcxCfg->tcx_coded_lines, hTcxEnc->spectrum_long, hTcxEnc->fUseTns[0], st, NULL ); - - hTcxEnc->measuredBwRatio_flt = 1.f; - - /* Calculate target bits */ - target_bits = st->bits_frame_core - tnsBits[0] - nbits_lpc[0] - st->nb_bits_header_tcx - ltpBits; - - /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - target_bits -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; - { - target_bits -= st->hIGFEnc->infoTotalBitsPerFrameWritten; - } - if ( st->enablePlcWaveadjust ) - { - target_bits -= 1; - } - - QuantizeSpectrum( st, A_q, NULL, gainlpc[0], st->synth_flt, target_bits, tnsSize[0], param_core, 0, &hm_cfg[0], vad_hover_flag ); - - coder_tcx_post( st, A_q, Aw ); - } - - /* Update lsp/lsf memory */ - mvr2r( lsf_q, st->lsf_old, M ); - mvr2r( lsp_q, st->lsp_old, M ); - - - /*--------------------------------------------------------------* - * Generate Bitstream - *---------------------------------------------------------------*/ - - enc_prm( st, param_core, param_lpc, hm_cfg, bits_param_lpc, no_param_lpc ); - - return; -} -#endif diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c index 1d3178aa5..c378731ad 100644 --- a/lib_enc/core_enc_init.c +++ b/lib_enc/core_enc_init.c @@ -45,35 +45,21 @@ #include "prot_fx.h" #include "prot_fx_enc.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void init_tcx( Encoder_State *st, const int16_t L_frame_old, const int32_t total_brate, const int32_t last_total_brate, const int16_t MCT_flag ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void init_sig_buffers( Encoder_State *st, const int16_t L_frame_old, const int16_t L_subfr, const int32_t total_brate, const int32_t last_total_brate ); -static void init_core_sig_ana( Encoder_State *st ); -static void init_acelp( Encoder_State *st, const int16_t L_frame_old, const int32_t total_brate, const int32_t last_total_brate ); -static void init_modes( Encoder_State *st, const int32_t last_total_brate ); -#endif -#ifdef IVAS_FLOAT_FIXED static void init_tcx_ivas_fx( Encoder_State *st, const Word16 L_frame_old, const Word32 total_brate, const Word32 last_total_brate, const Word16 MCT_flag ); static void init_core_sig_ana_ivas_fx( Encoder_State *st ); static void init_modes_ivas_fx( Encoder_State *st, const int32_t last_total_brate ); static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_old, const Word16 L_subfr ); static void init_acelp_ivas_fx( Encoder_State *st, Word16 L_frame_old, Word16 shift ); -#endif /*-----------------------------------------------------------------------* * init_coder_ace_plus() * * Initialization of state variables *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void init_coder_ace_plus_ivas_fx( Encoder_State *st, /* i : Encoder state */ const Word32 last_total_brate, /* i : last total bitrate */ @@ -225,11 +211,7 @@ void init_coder_ace_plus_ivas_fx( /* Initialize TCX */ IF( hTcxEnc != NULL ) { -#ifndef IVAS_FLOAT_FIXED - init_tcx( st, L_frame_old, st->total_brate, last_total_brate, MCT_flag ); -#else init_tcx_ivas_fx( st, L_frame_old, st->total_brate, last_total_brate, MCT_flag ); -#endif } /* Initialize Signal Buffers */ @@ -332,7 +314,6 @@ void init_coder_ace_plus_ivas_fx( return; } -#endif void init_coder_ace_plus( Encoder_State *st, /* i : Encoder state */ @@ -365,20 +346,12 @@ void init_coder_ace_plus( if ( st->ini_frame == 0 ) { -#ifndef IVAS_FLOAT_FIXED - set_zero( hTcxEnc->Txnq_flt, L_FRAME32k / 2 + 64 ); - hTcxEnc->acelp_zir_flt = hTcxEnc->Txnq_flt + L_FRAME / 2; - hTcxEnc->tcx_target_bits_fac_flt = 1.0f; -#else hTcxEnc->tcx_target_bits_fac = ONE_IN_Q14; -#endif -#ifdef IVAS_FLOAT_FIXED set16_fx( hTcxEnc->Txnq, 0, L_FRAME32k / 2 + 64 ); hTcxEnc->acelp_zir = hTcxEnc->Txnq + L_FRAME / 2; hTcxEnc->q_Txnq = Q15; move16(); -#endif } } @@ -399,13 +372,8 @@ void init_coder_ace_plus( if ( st->ini_frame == 0 ) { st->acelpFramesCount = 0; -#ifndef IVAS_FLOAT_FIXED - st->prevTempFlatness = 1.0f; -#endif -#ifdef IVAS_FLOAT_FIXED #ifdef MSAN_FIX st->prevTempFlatness_fx = 128; // Q7 -#endif #endif } @@ -413,16 +381,10 @@ void init_coder_ace_plus( if ( st->hBWE_TD != NULL ) { st->hBWE_TD->prev_coder_type = GENERIC; -#ifndef IVAS_FLOAT_FIXED - set_f( st->hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); - st->hBWE_TD->prev_tilt_para = 0.0f; - set_zero( st->hBWE_TD->cur_sub_Aq, M + 1 ); -#else set16_fx( st->hBWE_TD->prev_lsf_diff_fx, 16384, LPC_SHB_ORDER - 2 ); st->hBWE_TD->prev_tilt_para_fx = 0; set16_fx( st->hBWE_TD->cur_sub_Aq_fx, 0, M + 1 ); move16(); -#endif } st->currEnergyHF_fx = 0; @@ -441,13 +403,8 @@ void init_coder_ace_plus( st->next_force_safety_net = 0; if ( ( st->last_L_frame != st->L_frame ) || ( st->last_core == AMR_WB_CORE ) || ( st->last_core == HQ_CORE ) ) { -#ifndef IVAS_FLOAT_FIXED - set_f( st->mem_MA, 0.0f, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); -#else set16_fx( st->mem_MA_fx, 0, M ); Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); -#endif } /* Initialize IGF */ @@ -458,9 +415,7 @@ void init_coder_ace_plus( if ( st->igf && st->hIGFEnc != NULL ) { -#ifdef IVAS_FLOAT_FIXED IGFEncSetMode_ivas_fx( st->hIGFEnc, st->total_brate, st->bwidth, st->element_mode, st->rf_mode ); -#endif } else if ( st->hIGFEnc != NULL ) { @@ -469,31 +424,19 @@ void init_coder_ace_plus( } /* Initialize Core Signal Analysis Module */ -#ifdef IVAS_FLOAT_FIXED init_core_sig_ana_ivas_fx( st ); -#else - init_core_sig_ana( st ); -#endif /* Initialize TCX */ if ( hTcxEnc != NULL ) { -#ifdef IVAS_FLOAT_FIXED init_tcx_ivas_fx( st, L_frame_old, st->total_brate, last_total_brate, MCT_flag ); -#else - init_tcx( st, L_frame_old, st->total_brate, last_total_brate, MCT_flag ); -#endif } /* Initialize Signal Buffers */ init_sig_buffers_ivas_fx( st, L_frame_old, L_subfr ); /* Initialize ACELP */ -#ifdef IVAS_FLOAT_FIXED init_acelp_ivas_fx( st, L_frame_old, 0 ); -#else - init_acelp( st, L_frame_old, st->total_brate, last_total_brate ); -#endif if ( st->ini_frame == 0 ) { @@ -502,11 +445,7 @@ void init_coder_ace_plus( if ( st->hTECEnc != NULL ) { -#ifndef IVAS_FLOAT_FIXED - resetTecEnc( st->hTECEnc, st->tec_tfa ); -#else resetTecEnc_Fx( st->hTECEnc, st->tec_tfa ); -#endif } if ( st->bwidth == SWB && ( st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) && st->element_mode == EVS_MONO ) @@ -546,7 +485,6 @@ void init_coder_ace_plus( st->enablePlcWaveadjust = 0; } -#ifdef IVAS_FLOAT_FIXED set32_fx( st->mem_bpf_fx1, 0, 2 * L_FILT16k ); set32_fx( st->mem_error_bpf_fx, 0, 2 * L_FILT16k ); @@ -568,30 +506,18 @@ void init_coder_ace_plus( st->enablePlcWaveadjust = 0; move16(); } -#endif if ( st->hPlcExt ) { -#ifndef IVAS_FLOAT_FIXED - init_PLC_enc( st->hPlcExt, st->sr_core ); -#else init_PLC_enc_fx( st->hPlcExt, st->sr_core ); -#endif } st->glr_idx[0] = 0; st->glr_idx[1] = 0; -#ifndef IVAS_FLOAT_FIXED - st->mean_gc_flt[0] = 0.0f; - st->mean_gc_flt[1] = 0.0f; - st->prev_lsf4_mean_flt = 0.0f; - st->last_stab_fac_flt = 0.0f; -#else st->mean_gc[0] = 0; st->mean_gc[1] = 0; st->prev_lsf4_mean = 0; st->last_stab_fac = 0; -#endif return; } @@ -603,7 +529,6 @@ void init_coder_ace_plus( *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void init_tcx_ivas_fx( Encoder_State *st, const Word16 L_frame_old, @@ -713,193 +638,12 @@ static void init_tcx_ivas_fx( return; } -#else -static void init_tcx( - Encoder_State *st, - const int16_t L_frame_old, - const int32_t total_brate, - const int32_t last_total_brate, - const int16_t MCT_flag ) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */ - hTcxEnc->spectrum[0] = hTcxEnc->spectrum_long; - hTcxEnc->spectrum[1] = hTcxEnc->spectrum_long + N_TCX10_MAX; - - init_tcx_cfg( st->hTcxCfg, total_brate, st->sr_core, st->input_Fs, - st->L_frame, st->bwidth, hTcxEnc->L_frameTCX, st->fscale, st->encoderLookahead_enc, - st->encoderLookahead_FB, st->preemph_fac_flt, st->tcxonly, st->rf_mode, st->igf, - st->hIGFEnc != NULL ? st->hIGFEnc->infoStopFrequency : 0, st->element_mode, st->ini_frame, MCT_flag ); - - /* Init TCX target bits correction factor */ - hTcxEnc->tcx_target_bits_fac_flt = 1.0f; - hTcxEnc->measuredBwRatio_flt = 1.0f; - hTcxEnc->noiseTiltFactor_flt = 0.5625f; - hTcxEnc->noiseLevelMemory_cnt = 0; - - set_f( hTcxEnc->ltpGainMemory, 0.0f, N_LTP_GAIN_MEMS ); - set_c( hTcxEnc->memQuantZeros, 0, L_FRAME_PLUS ); - - /* TCX-LTP */ - hTcxEnc->tcxltp = getTcxLtp( st->sr_core ); - - if ( st->ini_frame == 0 ) - { - hTcxEnc->tcxltp_pitch_int_past = st->L_frame; - hTcxEnc->tcxltp_pitch_fr_past = 0; - hTcxEnc->tcxltp_gain_past_flt = 0.f; - hTcxEnc->tcxltp_norm_corr_past_flt = 0.f; - hTcxEnc->tcxltp_norm_corr_mem_flt = 0.f; - hTcxEnc->kernel_switch_corr_past_flt = 0.f; - hTcxEnc->kernel_symmetry_past = 0; /* MDCT_IV & 1 */ - hTcxEnc->enc_ste_pre_corr_past = 0; - hTcxEnc->tfm_mem = 0.75f; - hTcxEnc->tcxltp_on_mem = 0; - } - else if ( st->L_frame != L_frame_old && !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && - ( total_brate == last_total_brate ) && ( st->last_bwidth == st->bwidth ) ) ) - { - int16_t pitres, pitres_old; - float pit, pit_old; - - if ( L_frame_old % 160 == 0 ) - { - pitres_old = 6; - } - else - { - pitres_old = 4; - } - pit_old = (float) hTcxEnc->tcxltp_pitch_int_past + (float) hTcxEnc->tcxltp_pitch_fr_past / (float) pitres_old; - if ( st->L_frame % 160 == 0 ) - { - pitres = 6; - } - else - { - pitres = 4; - } - pit = pit_old * (float) st->L_frame / (float) L_frame_old; - hTcxEnc->tcxltp_pitch_int_past = (int16_t) pit; - hTcxEnc->tcxltp_pitch_fr_past = (int16_t) ( ( pit - (float) hTcxEnc->tcxltp_pitch_int_past ) * (float) pitres ); - } - - hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( total_brate, st->rf_mode, st->element_mode ); - - return; -} -#endif /*-----------------------------------------------------------------------* * init_sig_buffers() * * Initialization of signal buffers *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void init_sig_buffers( - Encoder_State *st, - const int16_t L_frame_old, - const int16_t L_subfr, - const int32_t total_brate, - const int32_t last_total_brate ) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - /* Encoder Past Samples at encoder-sampling-rate */ - st->encoderPastSamples_enc = ( st->L_frame * 9 ) / 16; - - /* Initialize Signal Buffers and Pointers at encoder-sampling-rate */ - if ( st->ini_frame == 0 ) - { - set_zero( st->buf_speech_enc, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - set_zero( st->buf_speech_enc_pe, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - set_zero( st->buf_wspeech_enc, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); - if ( hTcxEnc != NULL ) - { - set_zero( hTcxEnc->buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - } - } - else if ( st->L_frame != L_frame_old && !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && - ( total_brate == last_total_brate ) && ( st->last_bwidth == st->bwidth ) ) ) - { - lerp( st->buf_speech_enc, st->buf_speech_enc, st->L_frame, L_frame_old ); - - if ( ( st->last_core != TCX_20_CORE ) && ( st->last_core != TCX_10_CORE ) ) - { - mvr2r( st->buf_speech_enc, hTcxEnc->buf_speech_ltp, st->L_frame ); - } - - mvr2r( st->old_wsp, st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, L_WSP_MEM ); - - /*Resamp buffers needed only for ACELP*/ - if ( st->L_frame == L_FRAME && !st->tcxonly ) - { - mvr2r( st->old_inp_12k8, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); - } - else if ( st->L_frame == L_FRAME16k && !st->tcxonly ) - { - lerp( st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); - mvr2r( st->old_inp_16k, st->buf_speech_enc_pe + st->L_frame - L_INP_MEM, L_INP_MEM ); - } - - st->mem_preemph_enc = st->buf_speech_enc[st->L_frame - 1]; - st->mem_wsp_enc = st->buf_wspeech_enc[st->L_frame + L_SUBFR - 1]; - } - else if ( !st->tcxonly && last_total_brate > ACELP_32k ) /* coming from TCXonly modes */ - { - mvr2r( st->old_wsp, st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, L_WSP_MEM ); - - /*Resamp buffers needed only for ACELP*/ - if ( st->L_frame == L_FRAME16k ) - { - lerp( st->buf_wspeech_enc + st->L_frame + L_SUBFR - L_WSP_MEM, st->buf_wspeech_enc + st->L_frame + L_SUBFR - 310, 310, L_WSP_MEM ); - } - st->hLPDmem->mem_w0 = 0; - st->mem_wsp_enc = st->buf_wspeech_enc[st->L_frame + L_SUBFR - 1]; - } - - st->new_speech_enc = st->buf_speech_enc + st->encoderPastSamples_enc + st->encoderLookahead_enc; - st->new_speech_enc_pe = st->buf_speech_enc_pe + st->encoderPastSamples_enc + st->encoderLookahead_enc; - - if ( hTcxEnc != NULL ) - { - hTcxEnc->new_speech_ltp = hTcxEnc->buf_speech_ltp + st->encoderPastSamples_enc + st->encoderLookahead_enc; - } - - if ( st->hTcxEnc != NULL ) - { - st->hTcxEnc->new_speech_TCX = st->input_buff + st->input_Fs / FRAMES_PER_SEC; /* note: in EVS st->new_speech_TCX == st->input - 0.9375ms; in IVAS st->new_speech_TCX == st->input */ - st->hTcxEnc->speech_TCX = st->hTcxEnc->new_speech_TCX - st->encoderLookahead_FB; - } - - st->speech_enc = st->buf_speech_enc + st->encoderPastSamples_enc; - st->speech_enc_pe = st->buf_speech_enc_pe + st->encoderPastSamples_enc; - - if ( hTcxEnc != NULL ) - { - hTcxEnc->speech_ltp = hTcxEnc->buf_speech_ltp + st->encoderPastSamples_enc; - } - - if ( st->element_mode > EVS_MONO ) - { - st->wspeech_enc = st->buf_wspeech_enc + st->L_frame + L_SUBFR; - } - else - { - st->wspeech_enc = st->buf_wspeech_enc + st->L_frame + L_subfr; - } - - if ( st->ini_frame == 0 || st->L_frame != L_frame_old || st->last_codec_mode == MODE1 ) - { - set_zero( st->buf_synth, OLD_SYNTH_SIZE_ENC + L_FRAME32k ); - } - st->synth = st->buf_synth + st->L_frame + L_subfr; - - return; -} - -#else /*copy of evs function since it was static */ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_old, const Word16 L_subfr ) { @@ -1016,10 +760,8 @@ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_ol if ( st->hTcxEnc != NULL ) { -#ifdef IVAS_FLOAT_FIXED st->hTcxEnc->new_speech_TCX = st->input_buff_fx + Mpy_32_32( st->input_Fs, ONE_BY_FRAMES_PER_SEC_Q31 ); st->hTcxEnc->speech_TCX = st->hTcxEnc->new_speech_TCX - st->encoderLookahead_FB; -#endif } st->speech_enc = st->buf_speech_enc + st->encoderPastSamples_enc; st->speech_enc_pe = st->buf_speech_enc_pe + st->encoderPastSamples_enc; @@ -1050,57 +792,12 @@ static void init_sig_buffers_ivas_fx( Encoder_State *st, const Word16 L_frame_ol return; } -#endif /*-----------------------------------------------------------------------* * init_core_sig_ana() * * *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void init_core_sig_ana( - Encoder_State *st ) -{ - /* Pre-emphasis factor and memory */ - if ( st->fscale < ( 16000 * FSCALE_DENOM ) / 12800 ) - { - st->preemph_fac_flt = PREEMPH_FAC_FLT; /*WB*/ - } - else if ( st->fscale < ( 24000 * FSCALE_DENOM ) / 12800 ) - { - st->preemph_fac_flt = PREEMPH_FAC_16k_FLT; /*WB*/ - } - else - { - st->preemph_fac_flt = PREEMPH_FAC_SWB_FLT; /*SWB*/ - } - -#ifndef IVAS_FLOAT_FIXED - if ( st->sr_core == INT_FS_16k ) - { - st->gamma_flt = GAMMA16k_FLT; - } - else - { - st->gamma_flt = GAMMA1_FLT; - } -#endif - - if ( st->narrowBand ) - { - st->min_band = 1; - st->max_band = 16; - } - else - { - st->min_band = 0; - st->max_band = 19; - } - - return; -} - -#else static void init_core_sig_ana_ivas_fx( Encoder_State *st ) { @@ -1148,231 +845,11 @@ static void init_core_sig_ana_ivas_fx( Encoder_State *st ) return; } -#endif /*-----------------------------------------------------------------------* * init_acelp() * * *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void init_acelp( - Encoder_State *st, - const int16_t L_frame_old, - const int32_t total_brate, - const int32_t last_total_brate ) -{ - int16_t mem_syn_r_size_old; - int16_t mem_syn_r_size_new; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /* Init pitch lag */ - if ( st->element_mode == IVAS_CPE_MDCT ) - { - /* TCX LTP ana always runs @12.8kHz */ - st->pit_res_max = initPitchLagParameters( 12800, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); - } - else - { - st->pit_res_max = initPitchLagParameters( st->sr_core, &st->pit_min, &st->pit_fr1, &st->pit_fr1b, &st->pit_fr2, &st->pit_max ); - } - - /* Init LPDmem */ - if ( st->ini_frame == 0 ) - { - if ( hLPDmem != NULL ) - { - set_zero( hLPDmem->syn, 1 + M ); - set_zero( hLPDmem->mem_syn_r, L_SYN_MEM ); - } - - if ( st->hTcxEnc != NULL ) - { - set_zero( st->hTcxEnc->Txnq, L_FRAME32k / 2 + 64 ); - st->hTcxEnc->acelp_zir = st->hTcxEnc->Txnq + ( st->L_frame / 2 ); - } - } - else /*Rate switching*/ - { - if ( st->hTcxEnc != NULL ) - { - if ( st->last_core == ACELP_CORE ) - { - lerp( st->hTcxEnc->Txnq, st->hTcxEnc->Txnq, st->L_frame / 2, L_frame_old / 2 ); - } - else - { - lerp( st->hTcxEnc->Txnq, st->hTcxEnc->Txnq, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_length_old ); - } - st->hTcxEnc->acelp_zir = st->hTcxEnc->Txnq + ( st->L_frame / 2 ); - } - - /* Rate switching */ - if ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) - { - if ( hLPDmem != NULL ) - { - mvr2r( hLPDmem->mem_syn1, hLPDmem->mem_syn2, M ); - set_zero( hLPDmem->syn, M ); - } - - if ( st->hTcxEnc != NULL ) - { - set_zero( st->hTcxEnc->Txnq, L_FRAME32k / 2 + 64 ); - } - } - - if ( st->last_core == AMR_WB_CORE ) - { - st->next_force_safety_net = 1; - st->last_core = ACELP_CORE; - } - - if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) - { - /*Reset of ACELP memories*/ - st->next_force_safety_net = 1; - st->rate_switching_reset = 1; - if ( hLPDmem != NULL ) - { - hLPDmem->tilt_code = TILT_CODE; - set_zero( hLPDmem->old_exc, L_EXC_MEM ); - set_zero( hLPDmem->syn, 1 + M ); - hLPDmem->mem_w0 = 0.0f; - set_zero( hLPDmem->mem_syn, M ); - set_zero( hLPDmem->mem_syn2, M ); - } - - /* unquantized LPC*/ - if ( !( ( total_brate >= ACELP_16k40 && total_brate <= ACELP_24k40 ) && total_brate == last_total_brate && st->last_bwidth == st->bwidth ) ) - { - mvr2r( st->lsp_old1, st->lspold_enc, M ); /*lsp old @12.8kHz*/ - if ( st->L_frame == L_FRAME16k ) - { - lsp_convert_poly( st->lspold_enc, st->L_frame, 0 ); - } - } - mvr2r( st->lspold_enc, st->lsp_old, M ); /*used unquantized values for mid-LSF Q*/ - lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); - - st->last_core = TCX_20_CORE; - - st->hTcxCfg->last_aldo = 1; /*It was previously ALDO*/ - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - - /*ALDO overlap windowed past: also used in MODE1 but for other MDCT-FB*/ - // set_f( st->hTcxEnc->old_out, 0, st->L_frame ); - } - else - { - if ( st->L_frame != L_frame_old && st->L_frame <= L_FRAME16k && L_frame_old <= L_FRAME16k ) /* Rate switching between 12.8 and 16 kHz*/ - { - float tmp, A[M + 1], Ap[M + 1], tmp_buf[M + 1]; - - /* convert quantized LSP vector */ - st->rate_switching_reset = lsp_convert_poly( st->lsp_old, st->L_frame, 0 ); - lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); - - if ( st->L_frame == L_FRAME16k ) - { - mvr2r( st->lsp_old, st->lspold_enc, M ); - } - else - { - mvr2r( st->lsp_old1, st->lspold_enc, M ); - } - - /* Update wsyn */ - if ( hLPDmem != NULL ) - { - synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); - lsp2a_stab( st->lsp_old, A, M ); - weight_a( A, Ap, GAMMA1, M ); - tmp = 0.f; - tmp_buf[0] = 0.f; - mvr2r( hLPDmem->mem_syn2, tmp_buf + 1, M ); - deemph( tmp_buf + 1, st->preemph_fac, M, &tmp ); - residu( Ap, M, tmp_buf + M, &tmp, 1 ); - hLPDmem->mem_w0 = st->wspeech_enc[-1] - tmp; - } - } - else if ( st->L_frame != L_frame_old ) /* Rate switching involving TCX only modes */ - { - /*Partial reset of ACELP memories*/ - st->next_force_safety_net = 1; - st->rate_switching_reset = 1; - - /*reset partly some memories*/ - if ( hLPDmem != NULL ) - { - hLPDmem->tilt_code = TILT_CODE; - set_zero( hLPDmem->old_exc, L_EXC_MEM ); - - /*Resamp others memories*/ - /*Size of LPC syn memory*/ - mem_syn_r_size_old = (int16_t) ( 1.25 * L_frame_old / 20.f ); - mem_syn_r_size_new = (int16_t) ( 1.25 * st->L_frame / 20.f ); - lerp( hLPDmem->mem_syn_r + L_SYN_MEM - mem_syn_r_size_old, hLPDmem->mem_syn_r + L_SYN_MEM - mem_syn_r_size_new, mem_syn_r_size_new, mem_syn_r_size_old ); - mvr2r( hLPDmem->mem_syn_r + L_SYN_MEM - M, hLPDmem->mem_syn, M ); - mvr2r( hLPDmem->mem_syn, hLPDmem->mem_syn2, M ); - - /*Untouched memories : LPDmem->syn & LPDmem->mem_w0*/ - hLPDmem->mem_w0 = 0; - } - - /* unquantized LPC*/ - mvr2r( st->lsp_old1, st->lspold_enc, M ); /*lsp old @12.8kHz*/ - if ( st->L_frame == L_FRAME16k ) - { - lsp_convert_poly( st->lspold_enc, st->L_frame, 0 ); - } - mvr2r( st->lspold_enc, st->lsp_old, M ); /*used unquantized values for mid-LSF Q*/ - lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); - } - /* necessary in BASOP only, due to different representations of st->lsf_old */ - /* else if ( !st->tcxonly && (st->L_frame == L_FRAME16k) && (st->last_total_brate > ACELP_32k) ) */ - /* { */ - /* lsp2lsf( st->lsp_old, st->lsf_old, M, st->sr_core ); */ - /* } */ - } - } - - if ( st->last_bwidth == NB && st->bwidth != NB && st->ini_frame != 0 ) - { - st->rate_switching_reset = 1; - } - - /* Post-processing */ - if ( hLPDmem != NULL ) - { - set_zero( hLPDmem->dispMem, 8 ); - hLPDmem->gc_threshold = 0.0f; - } - - /* Pulse Search configuration */ - st->acelp_autocorr = 1; - - /*Use for 12.8 kHz sampling rate and low bitrates, the conventional pulse search->better SNR*/ - if ( ( total_brate <= ACELP_9k60 || st->rf_mode == 1 ) && st->sr_core == INT_FS_12k8 ) - { - st->acelp_autocorr = 0; - } - - /*BPF parameters for adjusting gain in function of background noise*/ - if ( st->codec_mode == MODE2 ) - { - st->pst_lp_ener = 0.0f; - if ( st->last_codec_mode == MODE1 ) - { - st->pst_mem_deemp_err = 0.0f; - } - } - - - return; -} - -#else static void init_acelp_ivas_fx( Encoder_State *st, Word16 L_frame_old, Word16 shift ) { Word16 mem_syn_r_size_old; @@ -1676,76 +1153,12 @@ static void init_acelp_ivas_fx( Encoder_State *st, Word16 L_frame_old, Word16 sh return; } -#endif /*-----------------------------------------------------------------------* * init_modes() * * *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void init_modes( - Encoder_State *st, - const int32_t last_total_brate ) -{ - int16_t n; - - /* Restrict ACE/TCX20/TCX10 mode */ - st->restrictedMode = getRestrictedMode( st->element_mode, st->total_brate, st->Opt_AMR_WB ); - - st->acelpEnabled = ( st->restrictedMode & 1 ) == 1; - st->tcx20Enabled = ( st->restrictedMode & 2 ) == 2; - st->tcx10Enabled = ( st->restrictedMode & 4 ) == 4; - - /* TCX mode (TCX20 TCX10_10 or NO_TCX) */ - if ( st->hTcxEnc != NULL ) - { - st->hTcxEnc->tcxMode = NO_TCX; - } - - /*st->bits_frame_nominal = (int16_t)( (float)st->L_frame * (float)FSCALE_DENOM * (float)st->total_brate / ( (float)st->fscale * 12800.0f ) );*/ - st->bits_frame_nominal = (int16_t) ( (float) st->L_frame / (float) st->fscale * (float) FSCALE_DENOM / 128.0f * (float) st->total_brate / 100.0f + 0.49f ); - - if ( st->Opt_AMR_WB ) - { - st->bits_frame = st->bits_frame_nominal; - st->bits_frame_core = st->bits_frame_nominal; - st->frame_size_index = 0; - } - else - { - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - - if ( n < FRAME_SIZE_NB - 1 ) - { - if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal && FrameSizeConfig[n + 1].frame_bits > st->bits_frame_nominal ) - { - st->frame_size_index = n; - st->bits_frame = st->bits_frame_nominal; - st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; - break; - } - } - else - { - if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal ) - { - st->frame_size_index = n; - st->bits_frame = st->bits_frame_nominal; - st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; - break; - } - } - } - } - - /* Reconfigure core */ - core_coder_reconfig( st, last_total_brate ); - - return; -} -#else static void init_modes_ivas_fx( Encoder_State *st, const Word32 last_total_brate ) @@ -1850,4 +1263,3 @@ static void init_modes_ivas_fx( return; } -#endif diff --git a/lib_enc/core_enc_ol.c b/lib_enc/core_enc_ol.c index 8bb6fbfa5..d86e50ff1 100644 --- a/lib_enc/core_enc_ol.c +++ b/lib_enc/core_enc_ol.c @@ -42,1154 +42,5 @@ #include "rom_com.h" #include "basop_proto_func.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void BITS_ALLOC_ACELP_config_rf( const int16_t coder_type, float *tilt_code_flt, int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t nb_subfr, const int16_t rf_fec_indicator, float *pitch_buf ); - -static void BITS_ALLOC_TCX_config_rf( int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t PLC_Mode, const int16_t coder_type, const int16_t last_core, const int16_t TD_Mode ); - -static void closest_centroid_rf( const float *data, const float *weights, const float *quantizer, const int16_t centroids, const int16_t length, int16_t *ind_vec ); - - -/*-------------------------------------------------------------------* - * core_encode_openloop() - * - * Open-loop core encoder - *-------------------------------------------------------------------*/ - -void core_encode_openloop( - Encoder_State *st, /* i/o: encoder state structure */ - const float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ - const float lsp_new[M], /* i : LSPs at the end of the frame */ - const float lsp_mid[M], /* i : LSPs at the middle of the frame */ - float *pitch_buf, /* i/o: floating pitch values for each subfr*/ - float *voice_factors, /* o : voicing factors */ - float *ptr_bwe_exc, /* o : excitation for SWB TBE */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - float lsf_q[M], lsp_q[M], lspmid_q[M]; - Word16 lspq_ind[M]; - Word16 A_q_ind[M + 1]; - float A_q_ace[NB_SUBFR16k * ( M + 1 )]; - float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; - int16_t param_lpc[NPRM_LPC_NEW]; - int16_t nbits_lpc; - int16_t param_core[2 * NPRM_DIV]; - int16_t target_bits; - float stab_fac; - int16_t indexBuffer[N_MAX + 1]; - CONTEXT_HM_CONFIG hm_cfg; - float lsp_tcx_q[M], lsf_tcx_q[M]; - int16_t tcx_lpc_cdk; - float A_w[M + 1]; - float gain_pitch_buf[NB_SUBFR16k]; - float gain_code_buf[NB_SUBFR16k]; - int16_t bits_param_lpc[10], no_param_lpc; - - /* lsf quant parameters */ - float lsp_q_rf[M]; - float Aq_rf[NB_SUBFR * ( M + 1 )]; - float stab_fac_rf; - float *exc_rf; - float *syn_rf; - int16_t rf_PLC_Mode; - int16_t TD_Mode; - int16_t rf_tcx_lpc_cdk; - float lsp[M], lsf[M]; - float rf_mem_MA[M]; - float exc_buf_rf[L_EXC_MEM + L_FRAME + 1]; - float syn_buf_rf[M + L_FRAME16k + L_FRAME16k / 2]; - - float w_rf[M], lsf_uq_rf[M]; - float lsf_q_1st_rf[M], lsf_q_d_rf[M], lsf_q_rf[M]; - float lsp_old_q_rf[M], lsf_old_q_rf[M]; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*--------------------------------------------------------------* - * back up parameters for RF - *---------------------------------------------------------------*/ - - /* back up the old LSPs and LSFs */ - mvr2r( st->lsp_old, lsp_old_q_rf, M ); - mvr2r( st->lsf_old, lsf_old_q_rf, M ); - - /* back up old exc before primary encoding */ - set_f( exc_buf_rf, 0, ( L_EXC_MEM + L_FRAME + 1 ) ); - exc_rf = exc_buf_rf + L_EXC_MEM; - mvr2r( hLPDmem->old_exc_flt, exc_buf_rf, L_EXC_MEM ); - - /* back up old synthesis before primary encoding */ - set_f( syn_buf_rf, 0, ( M + L_FRAME16k + L_FRAME16k / 2 ) ); - syn_rf = syn_buf_rf + M; - mvr2r( hLPDmem->mem_syn_flt, syn_buf_rf, M ); - - if ( st->Opt_RF_ON ) - { - /* back up syn2 mem */ - mvr2r( hLPDmem->mem_syn2_flt, st->hRF->rf_mem_syn2_flt, M ); - - /* back up LPD mem_w0_flt target generation memory */ - st->hRF->rf_mem_w0_flt = hLPDmem->mem_w0_flt; - - /* back up clip gain memory */ - mvr2r( st->clip_var, st->hRF->rf_clip_var_flt, 6 ); - - /* back up tilt code */ - st->hRF->rf_tilt_code_flt = hLPDmem->tilt_code_flt; - - /* back up dispMem */ - mvr2r( hLPDmem->dispMem_flt, st->hRF->rf_dispMem, 8 ); - - /* back up gc_threshold_flt for noise addition */ - st->hRF->rf_gc_threshold_flt = hLPDmem->gc_threshold_flt; - } - - - /*--------------------------------------------------------------* - * Initializations - *---------------------------------------------------------------*/ - - tcx_lpc_cdk = 0; - set_s( param_lpc, 0, NPRM_LPC_NEW ); - set_s( param_core, 0, 2 * NPRM_DIV ); - mvs2s( hTcxEnc->tcxltp_param, ¶m_core[1 + NOISE_FILL_RANGES], LTPSIZE ); - - no_param_lpc = 0; /* avoid MSVC warnings */ - nbits_lpc = 0; /* avoid MSVC warnings */ - stab_fac = 0.0f; /* avoid MSVC warnings */ - - hm_cfg.indexBuffer = indexBuffer; - - /*--------------------------------------------------------------* - * LPC Quantization - *---------------------------------------------------------------*/ - - if ( st->lpcQuantization == 1 && st->coder_type == VOICED ) - { - ( &( st->acelp_cfg ) )->midLpc = 0; - } - else - { - ( &( st->acelp_cfg ) )->midLpc = st->acelp_cfg.midLpc_enable; - } - - if ( st->core == ACELP_CORE || !st->enableTcxLpc ) - { - if ( st->envWeighted ) - { - /* Unweight the envelope */ - E_LPC_lsp_unweight_float( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma_flt ); - st->envWeighted = 0; - } - - if ( st->core == TCX_20_CORE ) - { - lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, AUDIO, st->acelp_cfg.midLpc, param_lpc, &nbits_lpc, bits_param_lpc, &no_param_lpc ); - } - else - { - lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, st->coder_type, st->acelp_cfg.midLpc, param_lpc, &nbits_lpc, bits_param_lpc, &no_param_lpc ); - } - - /*-------------------------------------------------------------* - * Rate switching: reset - *-------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( lsp_q, st->lsp_old, M ); - mvr2r( lsf_q, st->lsf_old, M ); - mvr2r( lsp_q, lspmid_q, M ); - } - - /*--------------------------------------------------------------* - * LPC Interpolation - *---------------------------------------------------------------*/ - - stab_fac = lsf_stab( lsf_q, st->lsf_old, 0, st->L_frame ); - } - - - /*--------------------------------------------------------------* - * Run ACELP - *---------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - if ( st->acelp_cfg.midLpc ) - { - int_lsp4( st->L_frame, st->lsp_old, lspmid_q, lsp_q, A_q_ace, M, 0 ); - } - else - { - int_lsp( st->L_frame, st->lsp_old, lsp_q, A_q_ace, M, interpol_frac_12k8, 0 ); - } - - /* Calculate target bits */ - target_bits = st->bits_frame_core - nbits_lpc - st->nb_bits_header_ace; - - if ( st->rf_mode ) - { - /* joint bit allocation for redundant frame and TBE */ - /* calculate target bits for core coding */ - target_bits -= st->rf_target_bits_write; - } - - if ( st->igf ) - { - target_bits -= get_tbe_bits( st->total_brate, st->bwidth, st->rf_mode ); - } - - if ( st->acelp_cfg.midLpc ) - { - target_bits -= MIDLSF_NBITS; - } - - if ( st->hPlcExt && st->hPlcExt->enableGplc ) - { - target_bits -= st->hPlcExt->nBits; - } - - /* reset TBE buffers previous frame frame wasn't ACELP*/ - if ( st->last_core != ACELP_CORE ) - { - TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); - } - - /* Run ACELP encoder */ - coder_acelp( st, Aw, A_q_ace, st->speech_enc_pe_flt, hLPDmem, param_core, stab_fac, target_bits, gain_pitch_buf, gain_code_buf, pitch_buf, voice_factors, ptr_bwe_exc ); - - if ( st->hPlcExt ) - { - st->glr_idx[0] = encSideSpecPowDiffuseDetector( st->hPlcExt->last_lsf_ref_flt, st->hPlcExt->last_lsf_con_flt, st->last_sr_core, &( st->prev_lsf4_mean_flt ), st->glr, st->coder_type ); - - mvr2r( lsf_q, st->hPlcExt->last_lsf_ref_flt, M ); - mvr2r( st->hPlcExt->lsf_con_flt, st->hPlcExt->last_lsf_con_flt, M ); - updateSpecPowDiffuseIdx( gain_pitch_buf, gain_code_buf, st->glr_idx, st->mean_gc_flt ); - - if ( st->last_stab_fac_flt > 0.02 ) - { - st->glr_idx[0] = 0; - } - - st->hPlcExt->LPDmem = hLPDmem; - - encoderSideLossSimulation( st, st->hPlcExt, lsf_q, stab_fac, st->hPlcExt->calcOnlylsf, st->L_frame ); - } - st->last_stab_fac_flt = stab_fac; - - hTcxEnc->tcxltp_norm_corr_past_flt = st->voicing[1]; - st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - } - - - /*--------------------------------------------------------------* - * Run TCX20 - *---------------------------------------------------------------*/ - - if ( st->core == TCX_20_CORE ) - { - if ( st->enableTcxLpc ) - { - if ( st->rf_mode ) - { - mvr2r( st->mem_MA, rf_mem_MA, M ); - } - - tcx_lpc_cdk = tcxlpc_get_cdk_float( st->hTcxCfg->coder_type ); - - /* Get the envelope corresponding to the current frame */ - E_LPC_int_lpc_tcx_float( st->lspold_enc, lsp_new, A_q_tcx ); - - /* Weight the envelope */ - weight_a( A_q_tcx, A_q_tcx, st->gamma_flt, M ); - - /* Save the weighted envelope */ - mvr2r( A_q_tcx, A_w, M + 1 ); - - /* Convert to lsp and lsf */ - a2lsp_stab( A_q_tcx, lsp, lsp_new ); - lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); - - /* Quantize */ - Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, tcx_lpc_cdk, st->mem_MA, st->hTcxCfg->coder_type, st->Bin_E ); - - /* Account for consumed bits */ - nbits_lpc = TCXLPC_NUMBITS; - if ( param_lpc[0] ) - { - nbits_lpc += TCXLPC_IND_NUMBITS; - } - - /* Convert quantized lsf to lsp and A */ - lsf2lsp( lsf_tcx_q, lsp_tcx_q, M, INT_FS_12k8 ); - lsp2a_stab( lsp_tcx_q, A_q_tcx, M ); - } - else - { - E_LPC_int_lpc_tcx_float( st->lsp_old, lsp_q, A_q_tcx ); - } - - if ( hTcxEnc->tcx_lpc_shaped_ari ) - { - basop_E_LPC_f_lsp_a_conversion( lspq_ind, A_q_ind, M ); - } - - /* Calculate target bits */ - target_bits = st->bits_frame_core - nbits_lpc - st->nb_bits_header_tcx; - if ( st->rf_mode ) - { - /* joint bit allocation for redundant frame and TBE */ - /* calculate target bits for core coding */ - target_bits -= st->rf_target_bits_write; - } - - if ( st->mdct_sw == MODE1 ) - { - /* Account for core signaling bits difference: bandwidth and ACELP/TCX signaling bit are replaced */ - target_bits += ( FrameSizeConfig[st->frame_size_index].bandwidth_bits + 1 ) - signaling_mode1_tcx20_enc( st, 0 ); - } - else if ( st->mdct_sw_enable == MODE2 ) - { - --target_bits; - } - - if ( st->hPlcExt && st->hPlcExt->enableGplc ) - { - target_bits -= st->hPlcExt->nBits; - } - - /* subtract bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - target_bits -= ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; - - target_bits -= hTcxEnc->tcxltp_bits; - - /* Run TCX20 encoder */ - coder_tcx( st, st->hTcxCfg, A_q_tcx, A_q_ind, st->synth_flt, st->L_frame, hTcxEnc->L_frameTCX, st->hTcxCfg->tcx_coded_lines, target_bits, hTcxEnc->spectrum_long, param_core, &hm_cfg, vad_hover_flag ); - - coder_tcx_post( st, A_q_tcx, Aw ); - - if ( st->hPlcExt ) - { - st->hPlcExt->LPDmem = hLPDmem; - - GplcTcxEncSetup( hTcxEnc->tcxltp_pitch_int, st->hPlcExt ); - } - - if ( st->enableTcxLpc ) - { - E_LPC_lsp_unweight_float( lsp_tcx_q, lsp_q, lsf_q, 1.0f / st->gamma_flt ); /* Update lsf_q for encoderSideLossSimulation() */ - } - if ( st->hPlcExt ) - { - encoderSideLossSimulation( st, st->hPlcExt, lsf_q, stab_fac, 1, st->L_frame ); - } - } - - - /* Update lsp/lsf memory */ - mvr2r( lsp_new, st->lspold_enc, M ); - - if ( st->enableTcxLpc && st->core != ACELP_CORE ) - { - /* Update lsf / lsp memory */ - mvr2r( lsf_tcx_q, st->lsf_old, M ); - mvr2r( lsp_tcx_q, st->lsp_old, M ); - st->envWeighted = 1; - - /* Update ACELP quantizer state */ - lsf_update_memory_float( st->narrowBand, st->lsf_old, st->mem_MA, st->mem_MA ); - st->pstreaklen = 0; - st->streaklimit = 1.0f; - - /* check resonance for pitch clipping algorithm */ - gp_clip_test_lsf( st->element_mode, st->core_brate, st->lsf_old, st->clip_var, 0 ); - mvr2r( st->lsf_old, st->mem_AR, M ); - } - else - { - mvr2r( lsf_q, st->lsf_old, M ); - mvr2r( lsp_q, st->lsp_old, M ); - } - - if ( st->Opt_DTX_ON ) - { - /* update CNG parameters in active frames */ - if ( st->bwidth == NB && st->enableTcxLpc && st->core != ACELP_CORE ) - { - float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; - - assert( st->L_frame == L_FRAME ); - - mvr2r( st->synth_flt + L_FRAME - L_LP, buf, L_LP ); - tmp = st->synth_flt[L_FRAME - L_LP - 1]; - preemph( buf, st->preemph_fac_flt, L_LP, &tmp ); - autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); - lag_wind_flt( r, M, INT_FS_12k8, LAGW_WEAK ); - lev_dur( A, r, M, NULL ); - a2lsp_stab( A, lsptmp, lsp_new ); - - residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); - - cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - } - else - { - cng_params_upd( lsp_new, hLPDmem->old_exc_flt + L_EXC_MEM - st->L_frame, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - } - - if ( st->L_frame == L_FRAME ) - { - /* store LSPs@16k, potentially to be used in CNG@16k */ - mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); - } - - /* Set 16k LSP flag for CNG buffer */ - st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - - /* efficient DTX hangover control */ - if ( st->hTdCngEnc->burst_ho_cnt > 1 ) - { - dtx_hangover_control( st, lsp_new ); - } - } - - /*--------------------------------------------------------------* - * Adaptive Bass Post-filter - *---------------------------------------------------------------*/ - - if ( st->core > ACELP_CORE || st->rate_switching_reset ) - { - /*TCX mode: copy values*/ - set_zero( st->mem_bpf, 2 * L_FILT16k ); /*TCX->no gain*/ - set_zero( st->mem_error_bpf, 2 * L_FILT16k ); /*TCX->no gain*/ - st->bpf_gain_param = 0; - } - else if ( st->acelp_cfg.bpf_mode >= 1 ) - { - /*ACELP: estimate bpf parameter with delay=0*/ - - /*Estimate bpf parameter*/ - bass_pf_enc( st->speech_enc_flt, st->synth_flt, pitch_buf, gain_pitch_buf, st->L_frame, L_SUBFR, st->mem_bpf, st->mem_error_bpf, &( st->bpf_gain_param ), st->acelp_cfg.bpf_mode, &( st->pst_lp_ener ), &( st->pst_mem_deemp_err ) ); - } - - /*--------------------------------------------------------------* - * Generate Bitstream - *---------------------------------------------------------------*/ - - enc_prm( st, param_core, param_lpc, &hm_cfg, bits_param_lpc, no_param_lpc ); - - /* Channel-aware mode - encode partial copy */ - if ( st->rf_mode ) - { - RF_ENC_HANDLE hRF = st->hRF; - - set_f( lsf_q_1st_rf, 0.0f, M ); - - if ( st->core == ACELP_CORE ) - { - /* convert lsp to lsf */ - lsp2lsf( lsp_new, lsf_uq_rf, M, st->sr_core ); - - /* first stage VQ, 8 bits; reuse TCX high rate codebook */ - hRF->rf_indx_lsf[0][0] = vlpc_1st_cod( lsf_uq_rf, lsf_q_1st_rf, st->sr_core, w_rf ); - v_sub( lsf_uq_rf, lsf_q_1st_rf, lsf_q_d_rf, M ); - - /* second stage vq */ - closest_centroid_rf( lsf_q_d_rf, w_rf, lsf_q_diff_cb_8b_rf_flt, ( 1 << 8 ), M, &hRF->rf_indx_lsf[0][1] ); - - /* quantized lsf from two stages */ - v_add( lsf_q_1st_rf, lsf_q_diff_cb_8b_rf_flt + M * hRF->rf_indx_lsf[0][1], lsf_q_rf, M ); - - v_sort_float( lsf_q_rf, 0, M - 1 ); - reorder_lsf( lsf_q_rf, LSF_GAP, M, st->sr_core ); - } - else - { - rf_tcx_lpc_cdk = tcxlpc_get_cdk_float( GENERIC ); - - /* Quantize */ - Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, rf_tcx_lpc_cdk, rf_mem_MA, GENERIC, st->Bin_E ); - - /* VQ, 5+4+4 bits; reuse TCX low rate codebook */ - hRF->rf_indx_lsf[0][0] = param_lpc[1]; - hRF->rf_indx_lsf[0][1] = param_lpc[2]; - hRF->rf_indx_lsf[0][2] = param_lpc[3]; - } - - if ( st->core == ACELP_CORE ) - { - /* current n-th ACELP frame and its corresponding partial copy */ - lsf2lsp( lsf_q_rf, lsp_q_rf, M, st->sr_core ); - - /* Interpolate LSPs and convert to LPC */ - int_lsp( st->L_frame, lsp_old_q_rf, lsp_q_rf, Aq_rf, M, interpol_frac_12k8, 0 ); - - /* stability estimation */ - stab_fac_rf = lsf_stab( lsf_q_rf, lsf_old_q_rf, 0, st->L_frame ); - - /* Configure partial copy estimation of the current n-th frame to be packed in future with n+fec_offset frame */ - /* o: rf_frame_type, o: rf_target_bits */ - if ( st->Opt_RF_ON ) - { - BITS_ALLOC_ACELP_config_rf( st->coder_type, hRF->rf_tilt_buf_flt, &hRF->rf_frame_type, &hRF->rf_target_bits, st->nb_subfr, st->rf_fec_indicator, pitch_buf ); - } - - /* RF frame type in the buffer */ - hRF->rf_indx_frametype[0] = hRF->rf_frame_type; - hRF->rf_targetbits_buff[0] = hRF->rf_target_bits; - - if ( hRF->rf_frame_type != RF_NO_DATA ) - { - /* coder_acelp_rf does the partial copy encoding based on the rf frame type chosen for the RF encoding */ - coder_acelp_rf( hRF->rf_target_bits, st->speech_enc_pe_flt, st->coder_type, hRF->rf_frame_type, Aw, Aq_rf, st->voicing, st->pitch, stab_fac_rf, st, &( hRF->acelp_cfg_rf ), exc_rf, syn_rf ); - } - } - else - { - TD_Mode = 1; - hRF->rf_clas[0] = st->clas; - hRF->rf_gain_tcx[0] = param_core[0]; - - /* attenuate somewhat the gain for onset when the correlation with previous frame is too low: avoid preecho */ - if ( hRF->rf_gain_tcx[1] != 0 && hRF->rf_gain_tcx[0] > 1.6 * hRF->rf_gain_tcx[1] && hTcxEnc->tcxltp_gain_flt <= 0.2 ) - { - hRF->rf_gain_tcx[0] = (int16_t) ( 1.6f * hRF->rf_gain_tcx[1] ); - - if ( hRF->rf_gain_tcx[0] > 127 ) - { - hRF->rf_gain_tcx[0] = 127; - } - } - - /* get concealment decision*/ - rf_PLC_Mode = 0; - if ( st->core == TCX_20_CORE && ( st->last_core == TCX_20_CORE ) && ( hRF->rf_second_last_core == TCX_20_CORE ) && ( ( hTcxEnc->tcxltp_pitch_int <= 0.5f * st->L_frame ) || ( hTcxEnc->tcxltp_gain_flt <= 0.4f ) ) && ( hTcxEnc->tcxltp_pitch_int == hRF->rf_tcxltp_pitch_int_past ) && !hRF->rf_last_tns_active && !hRF->rf_second_last_tns_active && !( st->hTcxCfg->fIsTNSAllowed & hTcxEnc->fUseTns[0] ) ) - { - rf_PLC_Mode = 1; - } - else if ( st->last_core != ACELP_CORE ) - { - if ( ( st->clas <= UNVOICED_TRANSITION || st->last_clas <= UNVOICED_TRANSITION || hTcxEnc->tcxltp_gain_flt <= 0.4f ) && st->last_core != -1 ) - { - rf_PLC_Mode = st->last_core; - } - } - - /* call TD1 when the gain drop compare to previous frame*/ - if ( rf_PLC_Mode == 0 && hRF->rf_gain_tcx[1] != 0 && - ( ( st->hTranDet->transientDetector.bIsAttackPresent && hRF->rf_gain_tcx[0] < 0.97 * hRF->rf_gain_tcx[1] ) || - hRF->rf_gain_tcx[0] < 0.90 * hRF->rf_gain_tcx[1] ) ) - { - TD_Mode = 0; - } - else - { - TD_Mode = 1; - } - - /* updates */ - hRF->rf_tcxltp_pitch_int_past = hTcxEnc->tcxltp_pitch_int; - hRF->rf_second_last_tns_active = hRF->rf_last_tns_active; - hRF->rf_last_tns_active = st->hTcxCfg->fIsTNSAllowed & hTcxEnc->fUseTns[0]; - hRF->rf_second_last_core = st->last_core; - - hRF->rf_tcxltp_param[0] = hTcxEnc->tcxltp_param[1]; - - /* Configure partial copy estimation of the current n-th frame to be packed in future with n+fec_offset frame */ - BITS_ALLOC_TCX_config_rf( &hRF->rf_frame_type, &hRF->rf_target_bits, rf_PLC_Mode, st->coder_type, st->last_core, TD_Mode ); - - /* RF frame type in the buffer */ - hRF->rf_indx_frametype[0] = hRF->rf_frame_type; - hRF->rf_targetbits_buff[0] = hRF->rf_target_bits; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * closest_centroid_rf() - * - * Determine a set of closest VQ centroids for a given input - *-------------------------------------------------------------------*/ - -static void closest_centroid_rf( - const float *data, /* i : input data */ - const float *weights, /* i : weights */ - const float *quantizer, /* i : quantizer table */ - const int16_t centroids, /* i : number of centroids */ - const int16_t length, /* i : dimension of quantiser */ - int16_t *ind_vec /* o : list of best match indice vectors */ -) -{ - int16_t i, j; - float tmp, werr, best_werr; - - ind_vec[0] = 0; - best_werr = 1.0E20f; - - for ( i = 0; i < centroids; i++ ) - { - werr = 0.0f; - for ( j = 0; j < length; j++ ) - { - tmp = (float) *( data + j ) - quantizer[i * length + j]; - werr += (float) ( *( weights + j ) * tmp * tmp ); - } - - if ( werr < best_werr ) - { - ind_vec[0] = i; - best_werr = werr; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * core_acelp_tcx20_switching() - * - * Open-loop ACELP/TCX20 core decision - *-------------------------------------------------------------------*/ - -void core_acelp_tcx20_switching( - Encoder_State *st, /* i/o: encoder state structure */ - float non_staX, /* i : unbound non-stationarity for sp/mu clas */ - float *pitch_fr, /* i/o: fraction pitch values */ - float *voicing_fr, /* i/o: fractional voicing values */ - const float currFlatness, /* i : flatness */ - const float lsp_mid[M], /* i : LSPs at the middle of the frame */ - const float stab_fac /* i : LP filter stability */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, j; - float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; - float dsnr, snr_tcx, snr_acelp; - int16_t iter; - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - float Ap[M + 1]; - float gainlpc[FDNS_NPTS]; - float en[N_MAX / 4]; - float sqGain, ener, tmp, fac, offset; - int16_t L_frame = st->L_frame; - int16_t overlap; - int16_t tcx_offset = st->hTcxCfg->tcx_offset; - float *x = hTcxEnc->spectrum_long; - float target; - int16_t T0; - float gain, noise, scale; - float *pt_ener_sfr, ener_sfr[NB_SUBFR16k]; - - /* Check minimum pitch for quantization */ - for ( i = 0; i < 3; i++ ) - { - /* check minimum pitch for quantization */ - if ( st->pitch[i] < PIT_MIN_SHORTER ) - { - st->pitch[i] *= 2; - } - - /* convert pitch values to 16kHz domain */ - if ( st->L_frame == L_FRAME16k ) - { - st->pitch[i] = (int16_t) ( st->pitch[i] * 1.25f + 0.5f ); - } - } - if ( st->narrowBand == 1 ) - { - pitchDoubling_det( st->wspeech_enc_flt, st->pitch, pitch_fr, voicing_fr ); - } - - lsp2a_stab( lsp_mid, A_q_tcx, M ); - - tcx_ltp_encode( st, TCX_20, st->L_frame, st->speech_enc_flt + st->encoderLookahead_enc, hTcxEnc->speech_ltp_flt + st->encoderLookahead_enc, st->wspeech_enc_flt + st->encoderLookahead_enc, st->pitch, hTcxEnc->tcxltp_param, &hTcxEnc->tcxltp_bits, A_q_tcx, 0, st->element_mode ); - - - /* Force TCX when TCX20 in MODE1 is selected */ - if ( st->mdct_sw == MODE1 ) - { - st->core = TCX_20_CORE; - } - else - { - /*--------------------------------------------------------------* - * Estimate TCX SNR - *---------------------------------------------------------------*/ - - target = 1000.f; - if ( st->sr_core == INT_FS_16k ) - { - target = 850.f; - } - else if ( st->sr_core == INT_FS_12k8 ) - { - target = 850.f; - } - - if ( st->narrowBand == 1 ) - { - target = 500.f; - } - - if ( st->last_core == ACELP_CORE ) - { - L_frame += tcx_offset; - - if ( st->hTcxCfg->lfacNext < 0 ) - { - L_frame -= st->hTcxCfg->lfacNext; - tcx_offset = st->hTcxCfg->lfacNext; - } - else - { - tcx_offset = 0; - } - } - - overlap = st->hTcxCfg->tcx_mdct_window_delay; - - mvr2r( hTcxEnc->speech_ltp_flt - ( overlap >> 1 ) + tcx_offset, xn_buf, L_frame + overlap ); - - if ( st->last_core == ACELP_CORE ) - { - if ( tcx_offset < 0 ) - { - set_f( xn_buf, 0.0f, overlap >> 1 ); - } - } - else - { - for ( i = 0; i < overlap; i++ ) - { - xn_buf[i] *= st->hTcxCfg->tcx_mdct_window_flt[i]; - } - } - - for ( i = 0; i < overlap; i++ ) - { - xn_buf[L_frame + i] *= st->hTcxCfg->tcx_mdct_window_flt[overlap - 1 - i]; - } - - TCX_MDCT_flt( xn_buf, x, overlap, L_frame - overlap, overlap, st->element_mode ); - - for ( i = 0; i < L_frame; i++ ) - { - x[i] *= (float) ( L_frame / sqrt( 2 * NORM_MDCT_FACTOR ) ); - } - - weight_a( A_q_tcx, Ap, st->gamma_flt, M ); - - lpc2mdct_flt( Ap, M, gainlpc, FDNS_NPTS, 0 ); - - mdct_preShaping( x, L_frame, gainlpc ); - - if ( st->narrowBand == 1 ) - { - j = (int16_t) ( (float) L_frame * 0.625f ); - - set_f( x + j, 0.0f, L_frame - j ); - } - - for ( i = 0; i < L_frame; i += 4 ) - { - ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; - en[i / 4] = 9.0f + 10.0f * (float) log10( ener ); - } - - fac = 128.0f; - offset = fac; - - for ( iter = 0; iter < 10; iter++ ) - { - fac *= 0.5f; - offset -= fac; - ener = 0.0f; - - for ( i = 0; i < L_frame / 4; i++ ) - { - tmp = en[i] - offset; - - if ( tmp > 3.0f ) - { - ener += tmp; - } - - if ( ener > target ) - { - offset += fac; - break; - } - } - } - - if ( offset <= 32.f ) - { - offset = -128.f; - } - - sqGain = (float) pow( 10.0f, offset / 20.0f ); - ener = sqGain * sqGain / 12.f * (float) sqrt( 2.f ) / (float) L_frame; - - snr_tcx = 0.0f; - pt_ener_sfr = ener_sfr; - - for ( i = 0; i < st->L_frame; i += L_SUBFR ) - { - *pt_ener_sfr = sum2_f( st->wspeech_enc_flt + i, L_SUBFR ) + 1e-6f; - - snr_tcx += (float) log10( *pt_ener_sfr / ( ener * L_SUBFR ) ); - pt_ener_sfr++; - } - snr_tcx *= ( (float) ( 10 * L_SUBFR ) ) / (float) st->L_frame; - - - /*--------------------------------------------------------------* - * Estimate ACELP SNR - *---------------------------------------------------------------*/ - - scale = 0.055f; - if ( st->sr_core == INT_FS_16k ) - { - scale = 0.092f; - } - else if ( st->sr_core == INT_FS_12k8 ) - { - scale = 0.059f; - } - - if ( st->narrowBand ) - { - scale = 0.15f; - } - - snr_acelp = 0.0f; - fac = (float) st->sr_core / (float) INT_FS_12k8; - pt_ener_sfr = ener_sfr; - - for ( i = 0; i < st->L_frame; i += L_SUBFR ) - { - T0 = (int16_t) ( ( fac * pitch_fr[(int16_t) ( (float) ( i / L_SUBFR ) / fac + 0.5f )] ) + 0.5f ); - gain = get_gain_flt( st->wspeech_enc_flt + i, st->wspeech_enc_flt + i - T0, L_SUBFR, NULL ); - - noise = 1e-6f; - for ( j = 0; j < L_SUBFR; j++ ) - { - tmp = st->wspeech_enc_flt[i + j] - gain * st->wspeech_enc_flt[i + j - T0]; - noise += tmp * tmp; - } - - noise *= scale; - snr_acelp += (float) log10( *pt_ener_sfr / noise ); - pt_ener_sfr++; - } - - snr_acelp *= ( (float) ( 10 * L_SUBFR ) ) / (float) st->L_frame; - - - /*--------------------------------------------------------------* - * Switching Decision - *---------------------------------------------------------------*/ - - dsnr = 0.0f; - /* hysteresis for very small SNR differences between ACELP and TCX */ - - /* try to use TCX instead of ACELP on temporally stationary frames */ - if ( ( snr_acelp > snr_tcx ) && - ( snr_acelp < snr_tcx + 2.0f ) && - ( st->prevTempFlatness + currFlatness < 3.25f || stab_fac == 1.0f || ( st->sr_core == INT_FS_12k8 && st->sp_aud_decision0 == 1 && st->prevTempFlatness + currFlatness < 20.f ) ) && - ( st->acelpFramesCount <= 6 ) ) - { - dsnr = -2.0f; - } - - /* try to use ACELP instead of TCX on transient and "buzzy" frames */ - if ( ( snr_acelp < snr_tcx ) && - ( snr_acelp > snr_tcx - 2.0f ) && - ( st->prevTempFlatness + currFlatness > 3.25f ) && - ( st->acelpFramesCount >= 6 ) ) - { - dsnr = 2.0f; - } - - if ( ( st->sr_core == INT_FS_12k8 ) && ( offset < 74.0f ) && ( non_staX > 5.0f ) && ( snr_acelp >= snr_tcx - 4 ) && st->acelpFramesCount >= 1 && ( ( ( st->hSpMusClas->lps > st->hSpMusClas->lpm ) && mean( voicing_fr, 4 ) >= 0.3f ) || ( st->acelpFramesCount >= 6 && ( st->hSpMusClas->lps > st->hSpMusClas->lpm - 1.5f ) ) ) && ( st->sp_aud_decision0 == 0 ) && st->vad_flag ) - { - /* Fine tuned across various databases based on various metrics to detect TCX frames in speech.*/ - dsnr = 4.0f; - } - - if ( st->flag_noisy_speech_snr ) - { - if ( st->vad_flag || st->Opt_DTX_ON ) - { - dsnr += 2.f; - } - else - { - dsnr -= 2.f; - } - } - - if ( st->sr_core == INT_FS_12k8 && ( non_staX < 2.f || ( st->flag_noisy_speech_snr == 0 && st->vad_flag == 1 && offset == -128.f && st->acelpFramesCount >= 6 ) ) && ( st->last_core == ACELP_CORE || st->last_core == TCX_20_CORE ) ) - { - st->core = st->last_core; - } - else if ( snr_acelp + dsnr > snr_tcx ) - { - st->core = ACELP_CORE; - st->acelpFramesCount = min( MAX16B - 1, st->acelpFramesCount + 1 ); - } - else - { - st->core = TCX_20_CORE; - st->acelpFramesCount = 0; - } -#ifdef DEBUGGING - if ( st->force != -1 ) - { - if ( st->force == FORCE_SPEECH ) - { - st->core = ACELP_CORE; - } - else - { - st->core = TCX_20_CORE; - } - } -#endif - } - - /* Fixed Decision (using -C) */ - if ( st->acelpEnabled == 1 && st->tcx20Enabled == 0 ) - { - st->core = ACELP_CORE; - } - - if ( st->acelpEnabled == 0 && st->tcx20Enabled == 1 ) - { - st->core = TCX_20_CORE; - } - - st->prevTempFlatness = currFlatness; - - return; -} - -/*-------------------------------------------------------------------* - * BITS_ALLOC_ACELP_config_rf() - * - * configure channel aware mode - *-------------------------------------------------------------------*/ - -static void BITS_ALLOC_ACELP_config_rf( - const int16_t coder_type, - float *tilt_code_flt, - int16_t *rf_frame_type, - int16_t *rf_target_bits, - const int16_t nb_subfr, - const int16_t rf_fec_indicator, - float *pitch_buf ) -{ - float mean_tc, min_tilt_code, max_tilt_code; - int16_t nrgMode, ltfMode, ltpMode, gainsMode; - - int16_t en_partial_red = 1; - float dpit1, dpit2, dpit3; - - /* Init */ - *rf_target_bits = 0; - - /* ----------------------------------------* - * RF frame type selection * - *-----------------------------------------*/ - - /* Mean tilt code estimation */ - mean_tc = 0; - mean_tc = mean( tilt_code_flt, nb_subfr ); - - /* Maximum tilt code estimation */ - max_tilt_code = tilt_code_flt[0]; - maximum( tilt_code_flt, nb_subfr, &max_tilt_code ); - - /* Minimum tilt code estimation */ - min_tilt_code = tilt_code_flt[0]; - minimum( tilt_code_flt, nb_subfr, &min_tilt_code ); - - /* ----------------------------------------*/ - /* Decide Criticality */ - /*-----------------------------------------*/ - dpit1 = (float) fabs( pitch_buf[0] - pitch_buf[1] ); - dpit2 = (float) fabs( pitch_buf[1] - pitch_buf[2] ); - dpit3 = (float) fabs( pitch_buf[2] - pitch_buf[3] ); - - if ( rf_fec_indicator == 1 ) - { - if ( max_tilt_code > 0.48f && dpit1 <= 0.0f && dpit2 <= 0.0f && dpit3 <= 0.0f && coder_type == VOICED ) - { - en_partial_red = 0; - } - if ( max_tilt_code > 0.47f && dpit1 <= 1.0f && dpit2 <= 1.0f && dpit3 <= 1.0f && coder_type == GENERIC ) - { - en_partial_red = 0; - } - } - else - { - if ( max_tilt_code > 0.47 && dpit1 <= 0.25f && dpit2 <= 0.25f && dpit3 <= 0.25f && coder_type == VOICED ) - { - en_partial_red = 0; - } - if ( max_tilt_code > 0.45 && dpit1 <= 1.25f && dpit2 <= 1.25f && dpit3 <= 1.25f && coder_type == GENERIC ) - { - en_partial_red = 0; - } - } - - - /* ---------------------------------------------------------* - * Identify number of bits required as per rf frame type * - * ---------------------------------------------------------*/ - - /* rf_mode, 1 bit */ - *rf_target_bits += 1; - - /* rf_fec_offset 2 bits */ - *rf_target_bits += 2; - - /* rf_frame_type, 3 bits */ - *rf_target_bits += 3; - - /* LSF bits 8 + 8 bits */ - *rf_target_bits += 16; - - /* Intialize the RF mode frame type to all-pred */ - *rf_frame_type = RF_ALLPRED; - - if ( coder_type == INACTIVE || en_partial_red == 0 ) - { - *rf_frame_type = RF_NO_DATA; - } - else if ( coder_type == UNVOICED || coder_type == INACTIVE ) - { - *rf_frame_type = RF_NELP; - } - else if ( ( coder_type == GENERIC ) && max_tilt_code < 0.05f ) - { - *rf_frame_type = RF_NOPRED; - } - else if ( ( coder_type == GENERIC ) && mean_tc < 0.3f ) - { - *rf_frame_type = RF_GENPRED; - } - - nrgMode = ACELP_NRG_MODE[1][1][*rf_frame_type]; - ltfMode = ACELP_LTF_MODE[1][1][*rf_frame_type]; - ltpMode = ACELP_LTP_MODE[1][1][*rf_frame_type]; - gainsMode = ACELP_GAINS_MODE[1][1][*rf_frame_type]; - - /* Number of RF bits for different RF coder types */ - switch ( *rf_frame_type ) - { - case RF_ALLPRED: - /* Es_pred bits 3 bits, LTF: 1, pitch: 8,5,5,5, FCB: 0, gain: 7,0,7,0, Diff GFr: 4*/ - *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + ACELP_LTP_BITS_SFR[ltpMode][0] + ACELP_LTP_BITS_SFR[ltpMode][1] + ACELP_LTP_BITS_SFR[ltpMode][2] + ACELP_LTP_BITS_SFR[ltpMode][3] + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); - break; - - case RF_NOPRED: - /* Es_pred bits 3 bits, LTF: 0, pitch: 0, FCB: 7,7,7,7, gain: 6,0,6,0, Diff GFr: 2*/ - /*bits += (3 + 0 + 0 + 28 + 12 + 2); */ /* 64 rf bits */ - *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + 28 + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); - break; - - case RF_GENPRED: - /* Es_pred bits 3 bits, LTF: 0, pitch: 8,0,8,0, FCB: 6,7,5,5, gain: 5,0,5,0, Diff GFr: 0*/ - /*bits += (3 + 0 + 16 + 23 + 10 + 0); */ /* 72 rf bits */ - *rf_target_bits += ( ACELP_NRG_BITS[nrgMode] + ACELP_LTF_BITS[ltfMode] + ACELP_LTP_BITS_SFR[ltpMode][0] + ACELP_LTP_BITS_SFR[ltpMode][1] + ACELP_LTP_BITS_SFR[ltpMode][2] + ACELP_LTP_BITS_SFR[ltpMode][3] + 14 + ACELP_GAINS_BITS[gainsMode] + ACELP_GAINS_BITS[gainsMode] + 2 /*2 bits for PartialCopy GainFrame*/ ); - break; - - case RF_NELP: - /* gain: 19, Diff GFr: 5 */ - /*bits += (19 + 5); */ - *rf_target_bits += ( 19 + NUM_BITS_SHB_FRAMEGAIN ); - break; - - case RF_NO_DATA: - *rf_target_bits = 6; - break; - default: - assert( !"RF_Frame_type does not belong to ACELP Partial copy frame types possible!" ); - break; - } - - return; -} - - -/*-------------------------------------------------------------------* - * BITS_ALLOC_TCX_config_rf() - * - * configure channel aware mode - *-------------------------------------------------------------------*/ - -static void BITS_ALLOC_TCX_config_rf( int16_t *rf_frame_type, int16_t *rf_target_bits, const int16_t PLC_Mode, const int16_t coder_type, const int16_t last_core, const int16_t TD_Mode ) -{ - /* Init: rf_mode + rf_fec_offset + rf_frame_type */ - *rf_target_bits = 1 + 2 + 3; - - if ( coder_type == INACTIVE || last_core == ACELP_CORE ) - { - *rf_frame_type = RF_NO_DATA; - } - else - { - /* classification */ - *rf_target_bits += 2; - - if ( PLC_Mode ) - { - /* TCX global gain = 7 bits */ - *rf_target_bits += 7; - *rf_frame_type = RF_TCXFD; - } - else - { - /* pitch and gain */ - /* LTP data */ - if ( TD_Mode ) - { - *rf_target_bits += 9; - *rf_frame_type = RF_TCXTD2; - } - else - { - *rf_target_bits += 9; - *rf_frame_type = RF_TCXTD1; - } - } - - if ( *rf_frame_type == RF_TCXFD ) - { - /* TCXFD: LSF bits 5 + 4 + 4 bits */ - /* only embed LSF for FD concealment */ - *rf_target_bits += TCXLPC_NUMBITS; - } - } - return; -} -#endif diff --git a/lib_enc/core_enc_reconf.c b/lib_enc/core_enc_reconf.c index 3c699b4e6..911e4b7a4 100644 --- a/lib_enc/core_enc_reconf.c +++ b/lib_enc/core_enc_reconf.c @@ -56,11 +56,7 @@ void core_coder_reconfig( int16_t bwidth, i, index; /*Configuration of ACELP*/ -#ifndef IVAS_FLOAT_FIXED - BITS_ALLOC_init_config_acelp_IVAS( st->total_brate, st->narrowBand, st->nb_subfr, &( st->acelp_cfg ) ); -#else BITS_ALLOC_init_config_acelp( st->total_brate, st->narrowBand, st->nb_subfr, &( st->acelp_cfg ) ); -#endif /*Configuration of partial copy*/ if ( st->Opt_RF_ON ) @@ -72,13 +68,8 @@ void core_coder_reconfig( st->hRF->acelp_cfg_rf.formant_enh = 1; st->hRF->acelp_cfg_rf.formant_tilt = 1; st->hRF->acelp_cfg_rf.voice_tilt = 1; -#ifndef IVAS_FLOAT_FIXED - st->hRF->acelp_cfg_rf.formant_enh_num_flt = FORMANT_SHARPENING_G1_FLT; - st->hRF->acelp_cfg_rf.formant_enh_den_flt = FORMANT_SHARPENING_G2_FLT; -#else st->hRF->acelp_cfg_rf.formant_enh_num = FORMANT_SHARPENING_G1; st->hRF->acelp_cfg_rf.formant_enh_den = FORMANT_SHARPENING_G2; -#endif } if ( st->element_mode == IVAS_CPE_MDCT ) @@ -146,11 +137,7 @@ void core_coder_reconfig( /*Scale TCX for non-active frames to adjust loudness with ACELP*/ if ( st->hTcxCfg != NULL ) { -#ifndef IVAS_FLOAT_FIXED - st->hTcxCfg->na_scale_flt = 1.f; -#else st->hTcxCfg->na_scale = 32767; -#endif if ( bwidth < SWB && !( st->tcxonly ) ) { for ( i = 0; i < SIZE_SCALE_TABLE_TCX; i++ ) @@ -163,11 +150,7 @@ void core_coder_reconfig( { i--; } -#ifndef IVAS_FLOAT_FIXED - st->hTcxCfg->na_scale_flt = scaleTcxTable[i].scale_flt; -#else st->hTcxCfg->na_scale = scaleTcxTable[i].scale; -#endif break; } } @@ -192,11 +175,7 @@ void core_coder_reconfig( { if ( st->tec_tfa == 0 ) { -#ifndef IVAS_FLOAT_FIXED - set_zero( st->hTECEnc->loBuffer_flt, MAX_TEC_SMOOTHING_DEG ); -#else set16_fx( st->hTECEnc->loBuffer, 0, MAX_TEC_SMOOTHING_DEG ); -#endif } st->tec_tfa = 1; } @@ -263,7 +242,6 @@ void core_coder_reconfig( return; } -#ifdef IVAS_FLOAT_FIXED void core_coder_reconfig_ivas_fx( Encoder_State *st ) { @@ -558,4 +536,3 @@ void core_coder_reconfig_ivas_fx( } } } -#endif diff --git a/lib_enc/core_enc_switch.c b/lib_enc/core_enc_switch.c index 67563e2a6..f5a2e1245 100644 --- a/lib_enc/core_enc_switch.c +++ b/lib_enc/core_enc_switch.c @@ -39,10 +39,8 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" -#endif /*-------------------------------------------------------------------* @@ -50,7 +48,6 @@ * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void core_coder_mode_switch_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word32 last_total_brate, /* i : last bitrate */ @@ -279,153 +276,3 @@ void core_coder_mode_switch_ivas_fx( return; } -#else -void core_coder_mode_switch( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t last_total_brate, /* i : last bitrate */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0)*/ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, fscale, switchWB; - int32_t sr_core; - int16_t bSwitchFromAmrwbIO; - int16_t tcxonly_tmp; - - switchWB = 0; - bSwitchFromAmrwbIO = 0; - if ( st->last_core == AMR_WB_CORE ) - { - bSwitchFromAmrwbIO = 1; - } - - /* force active frame for the first frame when switching from high bitrates when DTX is enabled*/ - sr_core = getCoreSamplerateMode2_flt( st->element_mode, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode, st->is_ism_format ); - - fscale = sr2fscale( sr_core ); - - - if ( st->last_codec_mode == MODE1 ) - { - switchWB = 1; /*force init when coming from MODE1*/ - } - - tcxonly_tmp = getTcxonly_ivas( st->element_mode, st->total_brate, MCT_flag, st->is_ism_format ); - - if ( tcxonly_tmp != st->tcxonly ) - { - switchWB = 1; /*force init when coming from MODE1*/ - } - - if ( fscale == st->fscale && !bSwitchFromAmrwbIO && !switchWB ) - { - st->sr_core = sr_core; - st->L_frame = (int16_t) ( sr_core / FRAMES_PER_SEC ); - - st->tcxonly = getTcxonly_ivas( st->element_mode, st->total_brate, MCT_flag, st->is_ism_format ); - - st->bits_frame_nominal = (int16_t) ( (float) st->L_frame / (float) st->fscale * (float) FSCALE_DENOM / 128.0f * (float) st->total_brate / 100.0f + 0.49f ); - - st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode ); - - /* switch IGF configuration */ - if ( st->igf ) - { - IGFEncSetMode( st->hIGFEnc, st->total_brate, st->bwidth, st->element_mode, st->rf_mode ); - } - - st->hTcxCfg->tcx_coded_lines = getNumTcxCodedLines( st->bwidth ); - st->hTcxCfg->bandwidth_flt = getTcxBandwidth_flt( st->bwidth ); - st->hTcxCfg->tcxRateLoopOpt = ( st->tcxonly ) ? 2 : 0; - st->hTcxCfg->tcxRateLoopOpt = ( st->element_mode == IVAS_CPE_MDCT ) ? 3 : st->hTcxCfg->tcxRateLoopOpt; - st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->total_brate, st->rf_mode ); - st->hTcxCfg->resq = getResq( st->total_brate ); - hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->total_brate, st->rf_mode, st->element_mode ); - - st->hTcxCfg->tcxRateLoopOpt = ( st->hTcxCfg->resq && !st->tcxonly ) ? 1 : st->hTcxCfg->tcxRateLoopOpt; - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->total_brate, st->igf, st->element_mode ); - - if ( st->hTcxCfg->fIsTNSAllowed ) - { - InitTnsConfigs_flt( st->bwidth, st->hTcxCfg->tcx_coded_lines, st->hTcxCfg->tnsConfig, st->hIGFEnc->infoStopFrequency, st->total_brate, st->element_mode, MCT_flag ); - - SetAllowTnsOnWhite_flt( st->hTcxCfg->tnsConfig, st->element_mode == IVAS_CPE_MDCT ); - } - - if ( st->bwidth == NB ) - { - st->narrowBand = 1; - st->min_band = 1; - st->max_band = 16; - } - else - { - st->narrowBand = 0; - st->min_band = 0; - st->max_band = 19; - } - - for ( i = 0; i < FRAME_SIZE_NB; i++ ) - { - if ( FrameSizeConfig[i].frame_bits == st->bits_frame_nominal ) - { - st->frame_size_index = i; - st->bits_frame = FrameSizeConfig[i].frame_bits; - st->bits_frame_core = FrameSizeConfig[i].frame_net_bits; - break; - } - } - - st->restrictedMode = getRestrictedMode( st->element_mode, st->total_brate, 0 ); - - core_coder_reconfig( st, last_total_brate ); - } - else - { - st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode ); - init_coder_ace_plus( st, last_total_brate, MCT_flag ); - } - - if ( st->igf && st->hBWE_TD != NULL ) - { - /* reset TBE */ - if ( ( st->bwidth == WB && st->last_extl != WB_TBE ) || - ( st->bwidth == SWB && st->last_extl != SWB_TBE ) || - ( st->bwidth == FB && st->last_extl != FB_TBE ) ) - { - TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); - } - else - { - set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - st->hBWE_TD->gain_prec_swb = 1.0f; - } - } - - if ( st->envWeighted && !st->enableTcxLpc ) - { - /* Unweight the envelope */ - E_LPC_lsp_unweight_float( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma_flt ); - st->envWeighted = 0; - } - - if ( st->total_brate >= HQ_48k ) - { - st->enablePlcWaveadjust = 1; - } - else - { - st->enablePlcWaveadjust = 0; - } - - if ( ( last_total_brate > HQ_32k || st->last_codec_mode == MODE1 ) && st->element_mode == EVS_MONO ) - { - st->glr_reset = 1; - } - - return; -} -#endif diff --git a/lib_enc/core_enc_updt.c b/lib_enc/core_enc_updt.c index 03c642492..ff9f37628 100644 --- a/lib_enc/core_enc_updt.c +++ b/lib_enc/core_enc_updt.c @@ -40,9 +40,7 @@ #include "rom_com.h" #include "cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * core_encode_update() @@ -50,59 +48,6 @@ * Common updates of buffers *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void core_encode_update( - Encoder_State *st /* i/o: Encoder state structure */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t n; - - /* Update Input Signal Buffers */ - n = st->encoderPastSamples_enc + st->encoderLookahead_enc; - - mvr2r( st->buf_speech_enc_pe_flt + st->L_frame, st->buf_speech_enc_pe_flt, n ); - mvr2r( st->buf_speech_enc_flt + st->L_frame, st->buf_speech_enc_flt, n ); - - if ( !st->tcxonly ) - { - n = st->L_frame + st->L_frame / 4; - mvr2r( st->buf_wspeech_enc_flt + st->L_frame, st->buf_wspeech_enc_flt, n ); - } - - if ( hTcxEnc != NULL ) - { - if ( st->core == ACELP_CORE || st->core == AMR_WB_CORE || st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - mvr2r( st->buf_speech_enc_flt + st->L_frame, hTcxEnc->buf_speech_ltp_flt + st->L_frame, st->L_frame ); - } - } - - n = st->encoderPastSamples_enc + st->encoderLookahead_enc; - mvr2r( st->buf_synth_flt + st->L_frame, st->buf_synth_flt, st->L_frame + L_SUBFR ); - if ( hTcxEnc != NULL ) - { - mvr2r( hTcxEnc->buf_speech_ltp_flt + st->L_frame, hTcxEnc->buf_speech_ltp_flt, n ); - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - st->hTcxEnc->kernel_switch_corr_past_flt = 0.f; - st->hTcxEnc->kernel_type[0] = MDCT_IV; - st->hTcxEnc->kernel_symmetry_past = 0; - st->hTcxEnc->enc_ste_pre_corr_past = 0; - } - } - - if ( ( st->Opt_DTX_ON && st->core_brate <= SID_2k40 && st->cng_type == FD_CNG ) || ( st->tcxonly && ( st->codec_mode == MODE2 || st->element_mode > EVS_MONO ) ) ) - { - /* reset LP memories */ - set_zero( st->mem_MA, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - - return; -} -#else void core_encode_update_ivas_fx( Encoder_State *st /* i/o: Encoder state structure */ ) @@ -168,107 +113,3 @@ void core_encode_update_ivas_fx( } return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * core_encode_update_cng() - * - * Common updates in case of CNG - *-------------------------------------------------------------------*/ - -void core_encode_update_cng( - Encoder_State *st, - float *timeDomainBuffer, - float *A, - const float Aw[] /* i : weighted A(z) unquant. for subframes*/ -) -{ - float lsp[M], lsf[M]; - float *synth, synth_buf[M + 1 + L_FRAME_PLUS + L_FRAME_PLUS / 2], wsyn[L_FRAME_PLUS]; - float tmp; - float enr; - int16_t enr_index; - int16_t L_frame = st->L_frame; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /* LPC -> LSP/lsp */ - a2lsp_stab( A, lsp, st->lsp_old ); - - /* LSP/lsp -> LSF/lsf */ - if ( L_frame == L_FRAME16k ) - { - lsp2lsf( lsp, lsf, M, INT_FS_16k ); - } - else - { - lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); - } - - /* Update synth memory */ - synth = synth_buf + ( 1 + M ); - mvr2r( hLPDmem->syn_flt, synth_buf, 1 + M ); - mvr2r( timeDomainBuffer, synth, L_frame ); - mvr2r( synth + L_frame - ( 1 + M ), hLPDmem->syn_flt, 1 + M ); - mvr2r( synth, st->synth_flt, L_frame ); - - /* Update ZIR */ - set_zero( synth + L_frame, L_frame / 2 ); - syn_filt( A, M, synth + L_frame, synth + L_frame, L_frame / 2, &synth[L_frame - M], 0 ); - if ( st->hTcxEnc != NULL ) - { - mvr2r( synth + L_frame - ( L_frame / 2 ), st->hTcxEnc->Txnq_flt, L_frame / 2 ); - } - - /* Update pe-synth memory */ - tmp = synth[-( 1 + M )]; - preemph( synth - M, st->preemph_fac_flt, M + L_frame, &tmp ); - mvr2r( synth + L_frame - M, hLPDmem->mem_syn_flt, M ); - mvr2r( synth + L_frame - M, hLPDmem->mem_syn2_flt, M ); - - /* Update excitation memory */ - mvr2r( hLPDmem->old_exc_flt + L_frame, hLPDmem->old_exc_flt, max( L_EXC_MEM - L_frame, 0 ) ); - residu( A, M, synth, hLPDmem->old_exc_flt + max( L_EXC_MEM - L_frame, 0 ), L_frame ); - - if ( st->core_brate == SID_2k40 ) - { - enr = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, hLPDmem->old_exc_flt + max( L_EXC_MEM - L_frame, 0 ), L_frame ); - - enr_index = (int16_t) ( ( enr + 2.0f ) * STEP_SID ); - enr_index = min( max( enr_index, 0 ), 127 ); - st->hTdCngEnc->old_enr_index = enr_index; - } - - /* Update weighted synthesis memory */ - calc_residu( synth, wsyn, Aw, L_frame ); - tmp = st->wspeech_enc_flt[-1] - hLPDmem->mem_w0_flt; - deemph( wsyn, st->preemph_fac_flt, L_frame, &tmp ); - hLPDmem->mem_w0_flt = st->wspeech_enc_flt[L_frame - 1] - wsyn[L_frame - 1]; - - /* Update LPC-related memories */ - mvr2r( lsp, st->lsp_old, M ); - mvr2r( lsf, st->lsf_old, M ); - st->envWeighted = 0; - mvr2r( A, st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = 0; - - /* Reset acelp memories */ - set_zero( hLPDmem->dispMem_flt, 8 ); - hLPDmem->tilt_code_flt = TILT_CODE_FLT; - hLPDmem->gc_threshold_flt = 0.0f; - - /* Update ace/tcx mode */ - st->core = ACELP_CORE; - - /* Reset TCX overlap */ - st->hTcxCfg->tcx_curr_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - - if ( st->hDtxEnc->first_CNG == 0 ) - { - mvr2r( st->lsp_old, st->hDtxEnc->lspCNG, M ); - } - - return; -} -#endif diff --git a/lib_enc/core_switching_enc.c b/lib_enc/core_switching_enc.c index f1d9bbf44..d53e0892a 100644 --- a/lib_enc/core_switching_enc.c +++ b/lib_enc/core_switching_enc.c @@ -42,420 +42,10 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * core_switching_pre_enc() - * - * Preprocessing (preparing) for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - -void core_switching_pre_enc( - Encoder_State *st, /* i/o: encoder state structure */ -#ifndef IVAS_FLOAT_FIXED - const float *old_inp_12k8, /* i : old input signal @12.8kHz */ - const float *old_inp_16k, /* i : old input signal @16kHz */ -#endif - const int16_t active_cnt, /* i : active frame counter */ - const int16_t last_element_mode /* i : last_element_mode */ -) -{ - int16_t Sample_Delay_HP -#ifndef IVAS_FLOAT_FIXED - , - Sample_Delay_LP; -#else - ; -#endif - HQ_ENC_HANDLE hHQ_core = st->hHQ_core; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /* Codec mode switching */ - if ( st->last_codec_mode == MODE2 || ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) && st->element_mode > EVS_MONO ) ) - { - if ( hLPDmem != NULL ) - { -#ifndef IVAS_FLOAT_FIXED - mvr2r( hLPDmem->mem_syn2_flt, hLPDmem->mem_syn1_flt, M ); -#endif - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - st->igf = 0; - } - - if ( st->hBWE_TD != NULL ) - { - if ( st->last_core != ACELP_CORE ) - { - set16_fx( st->hBWE_TD->old_bwe_exc_fx, 0, PIT16k_MAX * 2 ); - st->hBWE_TD->bwe_non_lin_prev_scale_fx = 0; - } - set16_fx( st->hBWE_FD->old_syn_12k8_16k_fx, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - } - - if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) - { - if ( st->element_mode == EVS_MONO ) - { - st->last_core = HQ_CORE; - } - - if ( hHQ_core != NULL ) - { -#ifndef IVAS_FLOAT_FIXED - set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( hHQ_core->last_env, 0, BANDS_MAX ); -#else - set32_fx( hHQ_core->last_ni_gain_fx, 0, BANDS_MAX ); - set16_fx( hHQ_core->last_env_fx, 0, BANDS_MAX ); -#endif - - hHQ_core->last_max_pos_pulse = 0; - - hHQ_core->mode_count = 0; - hHQ_core->mode_count1 = 0; - - set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - hHQ_core->prev_frm_hfe2 = 0; - hHQ_core->prev_stab_hfe2 = 0; - } - - /*ALDO overlap windowed past: also used in MODE2 but for other MDCT-LB*/ - if ( st->element_mode == EVS_MONO && st->hTcxEnc != NULL ) - { - // set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); - } - } - if ( st->L_frame == L_FRAME16k && st->last_L_frame == L_FRAME ) - { -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->lsp_old, st->lsp_old16k, M ); - st->rate_switching_reset_16kHz = lsp_convert_poly( st->lsp_old16k, L_FRAME16k, 0 ); -#else - Copy( st->lsp_old_fx, st->lsp_old16k_fx, M ); - st->rate_switching_reset_16kHz = lsp_convert_poly_fx( st->lsp_old16k_fx, L_FRAME16k, 0 ); -#endif - } - - st->use_acelp_preq = 0; - } - - if ( st->last_core == -1 && ( st->core == HQ_CORE || st->core == TCX_20_CORE || st->core == TCX_10_CORE ) ) - { - /* very first frame is HQ_CORE */ - st->last_core = HQ_CORE; - } - - if ( st->core == HQ_CORE && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) /* HQ init */ - { - -#ifndef IVAS_FLOAT_FIXED - set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); - set_f( hHQ_core->last_env, 0, BANDS_MAX ); -#else - set32_fx( hHQ_core->last_ni_gain_fx, 0, BANDS_MAX ); - set16_fx( hHQ_core->last_env_fx, 0, BANDS_MAX ); -#endif - hHQ_core->last_max_pos_pulse = 0; - - hHQ_core->mode_count = 0; - hHQ_core->mode_count1 = 0; - - set_s( hHQ_core->prev_SWB_peak_pos, 0, SPT_SHORTEN_SBNUM ); - hHQ_core->prev_frm_hfe2 = 0; - hHQ_core->prev_stab_hfe2 = 0; - - if ( st->hTcxEnc != NULL ) - { - // set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); - } - } - - /* Here we only handle cases where last_ppp and last_nelp not updated when coming from CodecB or other cores - within ACELP_CORE if switching from another bitarate to vbr, last_ppp and last_nelp is always updated in the previous frame */ - if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 ) ) - { - /* reset in case of bitrate switching in EVS */ - if ( st->hSC_VBR != NULL ) - { - st->hSC_VBR->last_last_ppp_mode = 0; - st->hSC_VBR->last_ppp_mode = 0; - st->hSC_VBR->last_nelp_mode = 0; - } - } - - /* Handle state reset of stat_noise_uv_mod memory */ - if ( st->core == ACELP_CORE && ( st->last_core != ACELP_CORE || st->last_codec_mode == MODE2 || st->last_total_brate <= PPP_NELP_2k80 ) ) - { - st->act_count = 3; - st->uv_count = 0; - } - - if ( ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && st->last_core == HQ_CORE ) || ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || ( st->element_mode == IVAS_CPE_MDCT && last_element_mode == IVAS_CPE_DFT ) ) && active_cnt == 1 ) ) - { - /* Reset the ACELP core in case of HQ->ACELP core switching */ -#ifndef IVAS_FLOAT_FIXED - if ( st->L_frame == L_FRAME16k ) - { - mvr2r( TRWB2_Ave, st->lsf_old, M ); /* init of LSP */ - lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_16k ); - } - else - { - mvr2r( TRWB_Ave, st->lsf_old, M ); /* init of LSP */ - lsf2lsp( st->lsf_old, st->lsp_old, M, INT_FS_12k8 ); - } -#else - IF( st->L_frame == L_FRAME16k ) - { - Copy( TRWB2_Ave_fx, st->lsf_old_fx, M ); /* init of LSP */ - lsf2lsp_fx( st->lsf_old_fx, st->lsp_old_fx, M, INT_FS_16k ); - } - ELSE - { - Copy( TRWB_Ave_fx, st->lsf_old_fx, M ); /* init of LSP */ - lsf2lsp_fx( st->lsf_old_fx, st->lsp_old_fx, M, INT_FS_12k8 ); - } -#endif - - /* Reset ACELP parameters */ - if ( hLPDmem != NULL ) - { -#ifndef IVAS_FLOAT_FIXED - hLPDmem->syn_flt[M] = 0; - set_f( hLPDmem->mem_syn2_flt, 0.0f, M ); - set_f( hLPDmem->mem_syn_flt, 0.0f, M ); - set_f( hLPDmem->mem_syn1_flt, 0.0f, M ); - hLPDmem->mem_w0_flt = 0.0f; - hLPDmem->tilt_code_flt = 0.0f; - hLPDmem->gc_threshold_flt = 0.0f; - set_f( hLPDmem->dispMem_flt, 0, 8 ); -#else - hLPDmem->tilt_code = 0; - hLPDmem->gc_threshold = 0; - hLPDmem->dm_fx.prev_state = 0; - move16(); /* This corresponds to st_fx->dispMem in FLP */ - hLPDmem->dm_fx.prev_gain_code = 0; - move32(); - - FOR( Word16 i = 2; i < 8; i++ ) - { - hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0; - move16(); - } -#endif - } - st->Nb_ACELP_frames = 0; - -#ifndef IVAS_FLOAT_FIXED - set_zero( st->mem_MA, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - init_gp_clip( st->clip_var ); -#else - set16_fx( st->mem_MA_fx, 0, M ); - Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); - init_gp_clip_fx( st->clip_var_fx ); -#endif - - st->last_coder_type = GENERIC; - -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->old_pitch_buf + st->L_frame / L_SUBFR, st->old_pitch_buf, st->L_frame / L_SUBFR ); - set_f( st->old_pitch_buf + st->L_frame / L_SUBFR, L_SUBFR, st->L_frame / L_SUBFR ); -#else - Copy( st->old_pitch_buf_fx + st->L_frame / L_SUBFR, st->old_pitch_buf_fx, st->L_frame / L_SUBFR ); - set16_fx( st->old_pitch_buf_fx + st->L_frame / L_SUBFR, L_SUBFR_Q6, st->L_frame / L_SUBFR ); -#endif - - /* Reset old ACELP buffers */ - if ( st->element_mode == EVS_MONO && hLPDmem != NULL ) - { -#ifndef IVAS_FLOAT_FIXED - set_f( hLPDmem->old_exc_flt, 0, L_EXC_MEM ); -#endif - } - - IF( st->hBWE_TD != NULL ) - { - set16_fx( st->hBWE_TD->old_bwe_exc_fx, 0, PIT16k_MAX * 2 ); - - /* reset BWE memories */ - st->hBWE_TD->bwe_non_lin_prev_scale_fx = 0; - } - - if ( st->hBWE_FD != NULL ) - { - set16_fx( st->hBWE_FD->old_syn_12k8_16k_fx, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - } - } - - if ( ( st->core == ACELP_CORE || st->core == AMR_WB_CORE ) && ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) ) - { - /* Reset the ACELP core in case of TCX->ACELP core switching */ - st->Nb_ACELP_frames = 0; - - if ( hLPDmem != NULL ) - { -#ifndef IVAS_FLOAT_FIXED - hLPDmem->mem_w0_flt = 0.0f; - hLPDmem->tilt_code_flt = 0.0f; -#else - hLPDmem->tilt_code = 0; -#endif -#ifndef IVAS_FLOAT_FIXED - init_gp_clip( st->clip_var ); - hLPDmem->gc_threshold_flt = 0.0f; - set_f( hLPDmem->dispMem_flt, 0, 8 ); -#else - init_gp_clip_fx( st->clip_var_fx ); - hLPDmem->gc_threshold = 0; - hLPDmem->dm_fx.prev_state = 0; - move16(); /* This corresponds to st_fx->dispMem in FLP */ - hLPDmem->dm_fx.prev_gain_code = 0; - move32(); - - FOR( Word16 i = 2; i < 8; i++ ) - { - hLPDmem->dm_fx.prev_gain_pit[i - 2] = 0; - move16(); - } -#endif - } - - st->last_coder_type = GENERIC; - -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->old_pitch_buf + st->L_frame / L_SUBFR, st->old_pitch_buf, st->L_frame / L_SUBFR ); - set_f( st->old_pitch_buf + st->L_frame / L_SUBFR, L_SUBFR, st->L_frame / L_SUBFR ); -#else - Copy( st->old_pitch_buf_fx + st->L_frame / L_SUBFR, st->old_pitch_buf_fx, st->L_frame / L_SUBFR ); - set16_fx( st->old_pitch_buf_fx + st->L_frame / L_SUBFR, L_SUBFR_Q6, st->L_frame / L_SUBFR ); -#endif - - /* Reset old TD BWE buffers */ - IF( st->hBWE_TD != NULL ) - { - set16_fx( st->hBWE_TD->old_bwe_exc_fx, 0, PIT16k_MAX * 2 ); - st->hBWE_TD->bwe_non_lin_prev_scale_fx = 0; - } - - /* reset BWE memories */ - if ( st->hBWE_TD != NULL ) - { - set16_fx( st->hBWE_FD->old_syn_12k8_16k_fx, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - } - } - - if ( st->input_Fs >= 16000 && st->last_extl != WB_BWE && st->extl == WB_BWE && st->hBWE_FD != NULL ) - { - if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) - { - st->hBWE_FD->prev_mode = NORMAL; - st->hBWE_FD->modeCount = 0; - } - - st->hBWE_FD->prev_L_swb_norm1 = 8; - } - - if ( ( st->input_Fs >= 32000 && st->last_extl != SWB_BWE && st->extl == SWB_BWE ) || - ( st->input_Fs >= 48000 && st->last_extl != FB_BWE && st->extl == FB_BWE ) ) - { - /* we are switching to SWB BWE - reset SWB BWE buffers */ - if ( st->L_frame == L_FRAME ) - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); -#ifndef IVAS_FLOAT_FIXED - Sample_Delay_LP = NS2SA( 12800, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ); -#endif - - if ( st->element_mode > EVS_MONO ) - { - if ( st->element_mode == IVAS_CPE_TD ) - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); - } - Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); - } - -#ifndef IVAS_FLOAT_FIXED - mvr2r( old_inp_12k8 + L_INP_MEM + L_FRAME - Sample_Delay_LP, st->hBWE_FD->old_input_lp, Sample_Delay_LP ); -#endif - } - else - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); -#ifndef IVAS_FLOAT_FIXED - Sample_Delay_LP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ); -#endif - - if ( st->element_mode > EVS_MONO ) - { - if ( st->element_mode == IVAS_CPE_TD ) - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); - } - Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); - } - -#ifndef IVAS_FLOAT_FIXED - mvr2r( old_inp_16k + L_INP_MEM + L_FRAME - Sample_Delay_LP, st->hBWE_FD->old_input_lp, Sample_Delay_LP ); -#endif - } - -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, st->hBWE_FD->new_input_hp, Sample_Delay_HP ); -#else - Copy( st->hBWE_TD->old_speech_shb_fx + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, st->hBWE_FD->new_input_hp_fx, Sample_Delay_HP ); -#endif - - if ( st->last_extl != WB_BWE ) - { - st->hBWE_FD->prev_mode = NORMAL; - st->hBWE_FD->modeCount = 0; - } -#ifndef IVAS_FLOAT_FIXED - st->hBWE_FD->EnergyLF = 0.0f; -#else - st->hBWE_FD->EnergyLF_fx = 0; -#endif - st->hBWE_FD->prev_L_swb_norm1 = 8; - } - - /*---------------------------------------------------------------------* - * band-width switching from WB -> SWB/FB - *---------------------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO ) - { - if ( st->bwidth_sw_cnt == 0 ) - { - if ( st->bwidth >= SWB && st->last_bwidth == WB ) - { - st->bwidth_sw_cnt++; - } - } - else - { - st->bwidth_sw_cnt++; - - if ( st->bwidth_sw_cnt == BWS_TRAN_PERIOD ) - { - st->bwidth_sw_cnt = 0; - } - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void core_switching_pre_enc_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 *old_inp_12k8, /* i : old input signal @12.8kHz */ @@ -858,7 +448,6 @@ void core_switching_pre_enc_ivas_fx( return; } -#endif /*---------------------------------------------------------------------* * core_switching_post_enc() @@ -866,89 +455,6 @@ void core_switching_pre_enc_ivas_fx( * Postprocessing for ACELP/HQ core switching *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void core_switching_post_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *old_inp_12k8, /* i : old input signal @12.8kHz */ - const float *old_inp_16k, /* i : old input signal @16kHz */ - const float A[] /* i : unquant. LP filter coefs. */ -) -{ - if ( st->core == HQ_CORE ) - { - st->use_acelp_preq = 0; - - if ( ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) && st->element_mode == EVS_MONO ) /* core switching ==> ACELP subframe encoding */ - { - acelp_core_switch_enc( st, old_inp_12k8 + L_INP_MEM - NS2SA( INT_FS_12k8, ACELP_LOOK_NS ), old_inp_16k + L_INP_MEM - NS2SA( INT_FS_16k, ACELP_LOOK_NS ), A ); - } - - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; - st->hBWE_FD->mem_deemph_old_syn = 0.0f; - } - else - { - if ( st->hBWE_TD == NULL ) - { - return; - } - - /* reset SWB TBE buffers */ - if ( st->extl == WB_TBE && st->last_extl != WB_TBE ) - { - wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - - if ( st->last_extl != WB_BWE ) - { - set_f( st->hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( st->hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - } - - set_f( st->hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); - set_f( st->hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_csfilt, 0, 2 ); - } - - if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && - ( st->last_core == HQ_CORE || st->L_frame != st->last_L_frame || ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) ) ) - { - set_f( st->hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - InitSWBencBufferStates( st->hBWE_TD, NULL ); - swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); - set_f( st->hBWE_TD->dec_2_over_3_mem, 0.0f, L_FILT_2OVER3 ); - set_f( st->hBWE_TD->dec_2_over_3_mem_lp, 0.0f, L_FILT_2OVER3_LP ); - } - else if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && ( ( st->element_mode == IVAS_CPE_TD && st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || ( st->element_mode != IVAS_CPE_TD && st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) || ( st->last_codec_mode != MODE1 ) || ( st->rf_mode_last != st->rf_mode ) ) ) - { - set_f( st->hBWE_TD->state_lpc_syn, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->state_syn_shbexc, 0.0f, L_SHB_LAHEAD ); - set_f( st->hBWE_TD->mem_stp_swb, 0.0f, LPC_SHB_ORDER ); - set_f( st->hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - st->hBWE_TD->gain_prec_swb = 1.0f; - } - else if ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE ) - { - TBEreset_enc( st->hBWE_TD, st->last_core, st->bwidth ); - } - - /* Interp_3_2 CNG buffers reset */ - if ( st->extl == FB_TBE && ( ( st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) || st->L_frame != st->last_L_frame ) ) - { - set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - st->hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_enc( st->hBWE_TD->elliptic_bpf_2_48k_mem, &st->hBWE_TD->prev_fb_energy ); - } - /* Fade towards init value for non HQ_CORE */ - if ( st->hHQ_core != NULL ) - { - st->hHQ_core->crest_lp = HQ_CREST_FAC_SM * ( st->hHQ_core->crest_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * HQ_CREST_THRESHOLD; - st->hHQ_core->crest_mod_lp = HQ_CREST_FAC_SM * ( st->hHQ_core->crest_mod_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * HQ_CREST_MOD_THRESHOLD; - } - } - - return; -} -#else void core_switching_post_enc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ Word16 *old_inp_12k8_fx, /* i : old input signal @12.8kHz Q_new-1 */ @@ -1080,123 +586,3 @@ void core_switching_post_enc_ivas_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * core_switching_hq_prepare_enc() - * - * Preprocessing in the first HQ frame after ACELP frame - * - modify bit allocation for HQ core removing CELP subframe budget - * - update st->old_wtda to modify windows at the encoder - *---------------------------------------------------------------------*/ - -void core_switching_hq_prepare_enc( - Encoder_State *st, /* i/o: encoder state structure */ - int16_t *num_bits, /* i/o: bit budget update */ - const int16_t input_frame, /* i : frame length */ - float *wtda_audio, - const float *audio ) -{ - int16_t delta, Loverlapp, i; - int16_t n; - int32_t cbrate; - - /* set multiplication factor according to the sampling rate */ - delta = 1; - if ( input_frame == L_FRAME16k ) - { - delta = 2; - } - else if ( input_frame == L_FRAME32k ) - { - delta = 4; - } - else if ( input_frame == L_FRAME48k ) - { - delta = 6; - } - - /* set switching frame bitrate */ - if ( st->last_L_frame == L_FRAME ) - { - if ( st->core_brate > ACELP_24k40 ) - { - cbrate = ACELP_24k40; - } - else - { - cbrate = st->core_brate; - } - - /* subtract ACELP switching frame bits */ - if ( st->core_brate >= ACELP_11k60 ) - { - /* subtract one bit for LP filtering flag */ - ( *num_bits )--; - } - - *num_bits -= ACB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* pitch bits */ - *num_bits -= gain_bits_tbl[BIT_ALLOC_IDX( cbrate, TRANSITION, 0, 0 )]; /* gain bits */ - *num_bits -= FCB_bits_tbl[BIT_ALLOC_IDX( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ - } - else /* L_frame == L_FRAME16k */ - { - if ( st->core_brate <= ACELP_8k00 ) - { - cbrate = ACELP_8k00; - } - else if ( st->core_brate <= ACELP_14k80 ) - { - cbrate = ACELP_14k80; - } - else - { - cbrate = min( st->core_brate, ACELP_22k60 ); - } - - /* subtract ACELP switching frame bits */ - if ( st->core_brate >= ACELP_11k60 ) - { - /* subtract one bit for LP filtering flag */ - ( *num_bits )--; - } - - *num_bits -= ACB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* pitch bits */ - *num_bits -= gain_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* gain bits */ - *num_bits -= FCB_bits_16kHz_tbl[BIT_ALLOC_IDX_16KHZ( cbrate, GENERIC, 0, 0 )]; /* FCB bits */ - } - - /* subtract BWE bits */ - if ( !( ( inner_frame_tbl[st->bwidth] == L_FRAME16k && st->last_L_frame == L_FRAME16k ) || inner_frame_tbl[st->bwidth] == L_FRAME8k ) ) - { - *num_bits -= ( NOOFGAINBITS1 + AUDIODELAYBITS ); - } - - n = (int16_t) ( (float) input_frame * N_ZERO_MDCT_NS / FRAME_SIZE_NS ); - - /* Transition window at the encoder */ - Loverlapp = delta * SWITCH_OVERLAP_8k; - for ( i = 0; i < n; i++ ) - { - wtda_audio[i + input_frame / 2] = -audio[n - i - 1]; - } - - for ( i = n; i < input_frame / 2 - Loverlapp; i++ ) - { - wtda_audio[i + input_frame / 2] = -audio[n - i - 1]; - } - - for ( i = input_frame / 2 - Loverlapp; i < input_frame / 2; i++ ) - { - wtda_audio[i + input_frame / 2] = -audio[n - i - 1] * (float) cos( ( i + 1 - input_frame / 2 + Loverlapp ) * EVS_PI / ( 2 * ( Loverlapp + 1 ) ) ); /* win=cos() */ - } - - /* reset state of old_out if switching */ - if ( st->hTcxEnc != NULL ) - { - // set_f( st->hTcxEnc->old_out, 0.0f, L_FRAME32k ); - } - - return; -} -#endif diff --git a/lib_enc/corr_xh.c b/lib_enc/corr_xh.c index cb17bcf92..68195a7ec 100644 --- a/lib_enc/corr_xh.c +++ b/lib_enc/corr_xh.c @@ -39,37 +39,3 @@ #include "prot.h" #include "cnst.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * corr_xh() - * - * Compute the correlation between the target signal and the impulse - * response of the weighted synthesis filter. - * - * y[i] = sum(j=i,l-1) x[j]*h[j-i], i=0,l-1 - *-------------------------------------------------------------------*/ - -void corr_xh( - const float *x, /* i : target signal */ - float *y, /* o : correlation between x[] and h[] */ - const float *h, /* i : impulse response (of weighted synthesis filter) */ - const int16_t L_subfr /* i : length of the subframe */ -) -{ - int16_t i, j; - float s; - - for ( i = 0; i < L_subfr; i++ ) - { - s = 0.0f; - for ( j = i; j < L_subfr; j++ ) - { - s += x[j] * h[j - i]; - } - - y[i] = s; - } - - return; -} -#endif diff --git a/lib_enc/corr_xh_fx.c b/lib_enc/corr_xh_fx.c index 984c669dd..5a4eeb528 100644 --- a/lib_enc/corr_xh_fx.c +++ b/lib_enc/corr_xh_fx.c @@ -163,14 +163,14 @@ void corr_xh_ivas_fx( #endif /* first keep the result on 32 bits and find absolute maximum */ - L_tot = L_deposit_l( 1 ); + L_tot = L_deposit_l( 0 ); FOR( k = 0; k < NB_TRACK; k++ ) { L_maxloc = L_deposit_l( 0 ); FOR( i = k; i < L_subfr; i += STEP ) { - L_tmp = L_mac( 1L, x[i], h[0] ); /* 1 -> to avoid null dn[] */ // Qx+(15 - norm_s(h[0])) + L_tmp = L_mac( 0, x[i], h[0] ); // Qx+(15 - norm_s(h[0])) FOR( j = i; j < L_subfr - 1; j++ ) { #ifdef BASOP_NOGLOB diff --git a/lib_enc/decision_matrix_enc.c b/lib_enc/decision_matrix_enc.c index d105a2123..34d9fd39d 100644 --- a/lib_enc/decision_matrix_enc.c +++ b/lib_enc/decision_matrix_enc.c @@ -43,692 +43,3 @@ #include "stat_dec.h" #include "rom_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * decision_matrix_enc() - * - * Select operating point (combination of technologies) based on input signal properties and command-line parameters: - * - * 7.20 8.00 9.60 13.20 16.40 24.40 32 48 64 96 128 - * Mode 1 1 2 1 2 2 1 2 1 2 2 - * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - * NB - * speech ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@12k8 - * audio LR MDCT LR MDCT TCX LR MDCT - * inactive GSC@12k8 GSC@12k8 TCX GSC@12k8 - * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - * WB - * speech ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@12k8 ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX - * +0b WB BWE +0b WB BWE +TD WB BWE +TD WB BWE - * audio GSC@12k8 GSC@12k8 TCX LR MDCT TCX TCX HQ TCX HQ TCX TCX - * +0b WB BWE +0b WB BWE +IGF - * inactive GSC@12k8 GSC@12k8 TCX GSC@12k8 TCX TCX AVQ@16k TCX AVQ@16k TCX TCX - * +0b WB BWE +0b WB BWE +IGF +FD WB BWE - * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - * SWB - * speech ACELP@12k8 ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX - * +TD SWB BWE +TD SWB BWE +TD SWB BWE +TD SWB BWE +IGF +HR SWB BWE - * audio LR MDCT/GSC TCX TCX HQ TCX HQ TCX TCX - * +FD SWB BWE +IGF +IGF +FD SWB BWE +IGF - * inactive GSC@12k8 TCX TCX AVQ@16k TCX AVQ@16k TCX TCX - * +FD SWB BWE +IGF +IGF +FD SWB BWE +IGF +HR SWB BWE - * ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - * FB - * speech ACELP@16k ACELP@16k ACELP@16k TCX ACELP@16k TCX TCX - * +TD FB BWE +TD FB BWE +TD FB BWE +IGF +HR FB BWE - * audio TCX TCX HQ TCX HQ TCX TCX - * +IGF +IGF +FD FB BWE +IGF - * inactive TCX TCX AVQ@16k TCX AVQ@16k TCX TCX - * +IGF +IGF +FD FB BWE +IGF +HR FB BWE - * ----------------------------------------------------------------------------------------------------------------------------------------------------------------- - * - * Note: the GSC technology is part of the ACELP core as AUDIO coder_type (it is used also at 13.2 for SWB unvoiced noisy speech) - * Note2: FB processing is optional and is activated via "-band FB" option on the encoder command line - * Note3: NB (0-4kHz), WB (0-8kHz), SWB (0-16kHz), FB (0-20kHz) - * - * Signalling of modes (x marks a mode that must be signalled in the bitstream) - * - * 7.20 8.00 9.6 13.2 16.4 24.4 32 48 64 - * NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB NB WB SWB FB - * GC, 12k8 x x x x x x x x x x x x x - * UC, 12k8 x x x x x x - * VC, 12k8 x x x x x x x x x x x x x - * TC, 12k8 x x x x x x x x x x x x x - * GC, 16k x x x x x x x x x x x x - * TC, 16k x x x x x x x x x x x x - * AC(GSC) x x x x x x x x x x x x x - * IC x x x x x x x x x x x x x x x x x x x x x x x x x - * - * GC, 12k8, FS x x x x x x x x x x x x x - * GC, 16k, FS x x x x x x x x x x x - * VC, 12k8, FS x x x x x x x - * TC, 12k8, FS x - * TC, 16k, FS x x x x x x x x x x x - * - * LR MDCT x x x x x x x x x x x - * - *-----------------------------------------------------------------*/ - -void decision_matrix_enc( - Encoder_State *st, /* i : encoder state structure */ - int16_t *hq_core_type /* o : HQ core type */ -) -{ - /* initialization */ - st->core = -1; - st->extl = -1; - st->extl_brate = 0; - *hq_core_type = -1; - st->igf = 0; - - /* SID and FRAME_NO_DATA frames */ - if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) - { - st->core = ACELP_CORE; - - if ( st->input_Fs >= 32000 && st->bwidth >= SWB ) - { - st->extl = SWB_CNG; - } - - st->rf_mode = 0; - - return; - } - - st->core_brate = 0; - - /* SC-VBR */ - if ( st->Opt_SC_VBR ) - { - /* SC-VBR */ - st->core = ACELP_CORE; - st->core_brate = ACELP_7k20; - st->total_brate = ACELP_7k20; - - if ( st->hSC_VBR->ppp_mode == 1 ) - { - /* PPP mode */ - st->core_brate = PPP_NELP_2k80; - } - else if ( ( ( st->coder_type == UNVOICED || st->coder_type == TRANSITION ) && !st->sp_aud_decision1 ) || st->bwidth != NB ) - { - if ( st->coder_type == UNVOICED && st->vad_flag == 1 && ( ( st->last_bwidth >= SWB && st->last_Opt_SC_VBR ) || st->last_bwidth < SWB ) && ( st->last_core != HQ_CORE || st->bwidth != NB ) ) - { - /* NELP mode */ - st->hSC_VBR->nelp_mode = 1; - st->core_brate = PPP_NELP_2k80; - } - else if ( st->coder_type == TRANSITION || ( st->coder_type == UNVOICED && st->hSC_VBR->nelp_mode != 1 ) || ( ( st->coder_type == AUDIO || st->coder_type == INACTIVE ) && st->bwidth != NB ) ) - { - /* silence portions */ - st->core_brate = ACELP_8k00; - st->total_brate = ACELP_8k00; - } - } - - /* set inactive coder_type flag in ACELP core to GSC */ - st->inactive_coder_type_flag = 1; - - return; - } - - /*---------------------------------------------------------------------* - * NB - *---------------------------------------------------------------------*/ - - else if ( st->bwidth == NB ) - { - st->core = ACELP_CORE; - -#ifdef DEBUGGING - if ( st->total_brate >= HQCORE_NB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) - { - st->core = HQ_CORE; - } -#else - if ( st->total_brate >= HQCORE_NB_MIN_RATE && st->sp_aud_decision1 == 1 ) - { - st->core = HQ_CORE; - } -#endif - } - - /*---------------------------------------------------------------------* - * WB - *---------------------------------------------------------------------*/ - - else if ( st->bwidth == WB ) - { - st->core = ACELP_CORE; - -#ifdef DEBUGGING - if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) || st->total_brate >= HQ_96k ) -#else - if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && st->sp_aud_decision1 == 1 ) || st->total_brate >= HQ_96k ) -#endif - { - st->core = HQ_CORE; - } - else - { - if ( st->bwidth == WB && st->total_brate < ACELP_9k60 ) - { - st->extl = WB_BWE; - } - else if ( st->bwidth == WB && st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_16k40 ) - { - /* Note: WB BWE is used exceptionally at 13.2 kbps if GSC is selected instead of LR-MDCT */ - if ( st->sp_aud_decision1 == 1 || st->coder_type == INACTIVE || ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) - { - st->extl = WB_BWE; - st->extl_brate = WB_BWE_0k35; - } - else - { - st->extl = WB_TBE; - st->extl_brate = WB_TBE_1k05; - } - } - } - } - - /*---------------------------------------------------------------------* - * SWB and FB - *---------------------------------------------------------------------*/ - - else if ( st->bwidth == SWB || st->bwidth == FB ) - { -#ifdef DEBUGGING - if ( ( st->total_brate >= HQCORE_WB_MIN_RATE && ( st->force == FORCE_MUSIC || ( st->force == -1 && st->sp_aud_decision1 == 1 ) ) ) || st->total_brate >= HQ_96k ) -#else - if ( ( st->total_brate >= HQCORE_SWB_MIN_RATE && st->sp_aud_decision1 == 1 ) || st->total_brate >= HQ_96k ) -#endif - { - st->core = HQ_CORE; - } - else - { - st->core = ACELP_CORE; - - if ( st->total_brate >= ACELP_13k20 && st->total_brate < ACELP_48k ) - { - /* Note: SWB BWE is not used in case of GSC noisy speech */ - /* Note: SWB BWE is used exceptionally at 13.2 kbps if GSC is selected instead of LR-MDCT */ - if ( ( st->sp_aud_decision1 == 1 || st->coder_type == INACTIVE || ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) && !st->GSC_noisy_speech ) - { - st->extl = SWB_BWE; - st->extl_brate = SWB_BWE_1k6; - - if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) - { - st->extl = FB_BWE; - st->extl_brate = FB_BWE_1k8; - } - } - else - { - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - - if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = SWB_TBE_2k8; - } - - if ( st->bwidth == FB && st->total_brate >= ACELP_24k40 ) - { - st->extl = FB_TBE; - st->extl_brate = FB_TBE_3k0; - } - } - } - else if ( st->total_brate >= ACELP_48k ) - { - st->extl = SWB_BWE_HIGHRATE; - st->extl_brate = SWB_BWE_16k; - - if ( st->bwidth == FB ) - { - st->extl = FB_BWE_HIGHRATE; - } - } - } - } - - /*-----------------------------------------------------------------* - * Set HQ core type - *-----------------------------------------------------------------*/ - - if ( st->core == HQ_CORE ) - { - *hq_core_type = NORMAL_HQ_CORE; - - if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) - { - /* note that FB (bitrate >= 24400 bps) is always coded with NORMAL_HQ_CORE */ - *hq_core_type = LOW_RATE_HQ_CORE; - } - else if ( st->bwidth == NB ) - { - *hq_core_type = LOW_RATE_HQ_CORE; - } - } - - /* set core bitrate */ - st->core_brate = st->total_brate - st->extl_brate; - - if ( st->ini_frame == 0 ) - { - /* avoid switching in the very first frame */ - st->last_core = st->core; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - } - - /*-----------------------------------------------------------------* - * set inactive coder_type flag in ACELP core - *-----------------------------------------------------------------*/ - - st->inactive_coder_type_flag = 0; /* AVQ by default */ - if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE ) - { - st->inactive_coder_type_flag = 1; /* GSC */ - } - - return; -} - - -/*---------------------------------------------------------------------* - * signaling_mode1_tcx20_enc() - * - * write MODE1 TCX20 signaling information into the bitstream - *---------------------------------------------------------------------*/ - -int16_t signaling_mode1_tcx20_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t push /* i : flag to push indice */ -) -{ - int16_t num_bits; - int16_t nBits, idx, start_idx; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - assert( st->core == TCX_20_CORE ); - - num_bits = 0; - - /* Use ACELP signaling for LR MDCT */ - if ( st->total_brate <= ACELP_16k40 ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - idx = 0; - while ( acelp_sig_tbl[idx] != st->total_brate ) - { - idx++; - } - - /* retrieve the number of bits for signaling */ - nBits = (int16_t) acelp_sig_tbl[++idx]; - - /* retrieve the signaling index */ - start_idx = ++idx; - while ( acelp_sig_tbl[idx] != SIG2IND( LR_MDCT, st->bwidth, 0, 0 ) ) - { - idx++; - } - - num_bits += nBits; - if ( push ) - { - push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); - } - - /* HQ/TCX core switching flag */ - ++num_bits; - if ( push ) - { - push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); - } - } - else - { - if ( st->core_brate <= ACELP_64k ) - { - /* write ACELP/HQ core indication flag */ - ++num_bits; - if ( push ) - { - push_indice( hBstr, IND_CORE, 1, 1 ); - } - } - - /* HQ/TCX core switching flag */ - ++num_bits; - if ( push ) - { - push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); - } - - num_bits += 2; - if ( push ) - { - /* write band-width (needed for different I/O sampling rate support) */ - if ( st->bwidth == NB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 0, 2 ); - } - else if ( st->bwidth == WB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 1, 2 ); - } - else if ( st->bwidth == SWB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 2, 2 ); - } - else /* st->bwidth == FB */ - { - push_indice( hBstr, IND_HQ_BWIDTH, 3, 2 ); - } - } - } - - return num_bits; -} - - -/*---------------------------------------------------------------------* - * signaling_enc() - * - * write signaling information into the bitstream - *---------------------------------------------------------------------*/ - -void signaling_enc( - Encoder_State *st /* i : encoder state structure */ -) -{ - int16_t nBits, idx, start_idx; - int32_t total_brate_temp; - int16_t sig; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( st->mdct_sw == MODE2 ) - { - - assert( !st->tcxonly ); - assert( st->core == HQ_CORE ); - - push_next_indice( hBstr, 1, 1 ); /* TCX */ - push_next_indice( hBstr, 1, 1 ); /* HQ_CORE */ - - /* write ACELP->HQ core switching flag */ - if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); - - /* write ACELP L_frame info */ - if ( st->last_L_frame == L_FRAME ) - { - push_indice( hBstr, IND_LAST_L_FRAME, 0, 1 ); - } - else - { - push_indice( hBstr, IND_LAST_L_FRAME, 1, 1 ); - } - } - else - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); - } - - return; - } - - if ( st->core == ACELP_CORE ) - { - int16_t ppp_mode, nelp_mode; - - if ( st->Opt_SC_VBR ) - { - ppp_mode = st->hSC_VBR->ppp_mode; - nelp_mode = st->hSC_VBR->nelp_mode; - } - else - { - ppp_mode = 0; - nelp_mode = 0; - } - - if ( ppp_mode == 1 || nelp_mode == 1 ) - { - /* 1 bit to distinguish between 2.8kbps PPP/NELP frame and SID frame */ - push_indice( hBstr, IND_CORE, 0, 1 ); - - /* SC-VBR: 0 - PPP_NB, 1 - PPP_WB, 2 - NELP_NB, 3 - NELP_WB */ - if ( st->coder_type == VOICED && st->bwidth == NB && ppp_mode == 1 ) - { - push_indice( hBstr, IND_PPP_NELP_MODE, 0, 2 ); - } - else if ( st->coder_type == VOICED && st->bwidth != NB && ppp_mode == 1 ) - { - push_indice( hBstr, IND_PPP_NELP_MODE, 1, 2 ); - } - else if ( st->coder_type == UNVOICED && st->bwidth == NB && nelp_mode == 1 ) - { - push_indice( hBstr, IND_PPP_NELP_MODE, 2, 2 ); - } - else if ( st->coder_type == UNVOICED && st->bwidth != NB && nelp_mode == 1 ) - { - push_indice( hBstr, IND_PPP_NELP_MODE, 3, 2 ); - } - } - else if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) - { - /* write the ACELP/HQ core selection bit */ - if ( st->total_brate >= ACELP_24k40 ) - { - push_indice( hBstr, IND_CORE, 0, 1 ); - } - - /* find the section in the ACELP signaling table corresponding to bitrate */ - idx = 0; - while ( idx < MAX_ACELP_SIG ) - { - if ( st->total_brate <= brate_tbl[idx] ) - { - break; - } - idx++; - } - total_brate_temp = brate_tbl[idx]; - - idx = 0; - while ( acelp_sig_tbl[idx] != total_brate_temp ) - { - idx++; - } - - /* retrieve the number of bits for signaling */ - nBits = (int16_t) acelp_sig_tbl[++idx]; - - /* retrieve the signaling index */ - start_idx = ++idx; - if ( st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->total_brate <= ACELP_9k60 ) - { - /* patch to signal SWB as NB in Stereo */ - sig = SIG2IND( st->coder_type, NB, st->sharpFlag, st->rf_mode ); - } - else - { - sig = SIG2IND( st->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ); - } - - while ( acelp_sig_tbl[idx] != sig ) - { - idx++; - } - - push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); - } - - /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ - if ( st->extl_brate > 0 ) - { - if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) - { - push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); - } - else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) - { - push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); - } - } - } - else /* HQ core */ - { - /* write ACELP->HQ core switching flag */ - if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); - - /* write ACELP L_frame info */ - if ( st->last_L_frame == L_FRAME ) - { - push_indice( hBstr, IND_LAST_L_FRAME, 0, 1 ); - } - else - { - push_indice( hBstr, IND_LAST_L_FRAME, 1, 1 ); - } - } - else - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); - } - - /* HQ/TCX core switching flag */ - push_indice( hBstr, IND_MDCT_CORE, 0, 1 ); - - /* Use ACELP signaling for LR MDCT */ - if ( st->total_brate <= ACELP_16k40 ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - idx = 0; - while ( acelp_sig_tbl[idx] != st->total_brate ) - { - idx++; - } - - /* retrieve the number of bits for signaling */ - nBits = (int16_t) acelp_sig_tbl[++idx]; - - /* retrieve the signaling index */ - start_idx = ++idx; - while ( acelp_sig_tbl[idx] != SIG2IND( LR_MDCT, st->bwidth, 0, 0 ) ) - { - idx++; - } - - push_indice( hBstr, IND_ACELP_SIGNALLING, idx - start_idx, nBits ); - } - else - { - if ( st->core_brate <= ACELP_64k ) - { - /* write ACELP/HQ core indication flag */ - push_indice( hBstr, IND_CORE, 1, 1 ); - } - - /* write band-width (needed for different I/O sampling rate support) */ - if ( st->bwidth == NB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 0, 2 ); - } - else if ( st->bwidth == WB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 1, 2 ); - } - else if ( st->bwidth == SWB ) - { - push_indice( hBstr, IND_HQ_BWIDTH, 2, 2 ); - } - else /* st->bwidth == FB */ - { - push_indice( hBstr, IND_HQ_BWIDTH, 3, 2 ); - } - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * signaling_enc_rf() - * - * write channel-aware signaling information into the bitstream - *---------------------------------------------------------------------*/ - -void signaling_enc_rf( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t i, sfr; - RF_ENC_HANDLE hRF = st->hRF; - - /* write partial copy into bitstream */ - if ( st->rf_mode == 1 ) - { - enc_prm_rf( st, hRF->rf_indx_frametype[st->rf_fec_offset], st->rf_fec_offset ); - hRF->rf_indx_tbeGainFr[0] = hRF->RF_bwe_gainFr_ind; - } - - if ( hRF != NULL ) - { - /* Shift the RF indices such that the partial copy associated with - (n-fec_offset)th frame is included in the bitstream in nth frame. */ - for ( i = st->rf_fec_offset; i >= 0; i-- ) - { - /* RF frame type */ - hRF->rf_indx_frametype[i + 1] = hRF->rf_indx_frametype[i]; - - /* RF target bits buffer */ - hRF->rf_targetbits_buff[i + 1] = hRF->rf_targetbits_buff[i]; - - /* lsf indx */ - hRF->rf_indx_lsf[i + 1][0] = hRF->rf_indx_lsf[i][0]; - hRF->rf_indx_lsf[i + 1][1] = hRF->rf_indx_lsf[i][1]; - hRF->rf_indx_lsf[i + 1][2] = hRF->rf_indx_lsf[i][2]; - - /* ES pred energy */ - hRF->rf_indx_EsPred[i + 1] = hRF->rf_indx_EsPred[i]; - - /* LTF mode, sfr params: pitch, fcb and gain */ - for ( sfr = 0; sfr < st->nb_subfr; sfr++ ) - { - hRF->rf_indx_ltfMode[i + 1][sfr] = hRF->rf_indx_ltfMode[i][sfr]; - hRF->rf_indx_pitch[i + 1][sfr] = hRF->rf_indx_pitch[i][sfr]; - hRF->rf_indx_fcb[i + 1][sfr] = hRF->rf_indx_fcb[i][sfr]; - hRF->rf_indx_gain[i + 1][sfr] = hRF->rf_indx_gain[i][sfr]; - } - - /* shift the nelp indices */ - hRF->rf_indx_nelp_iG1[i + 1] = hRF->rf_indx_nelp_iG1[i]; - hRF->rf_indx_nelp_iG2[i + 1][0] = hRF->rf_indx_nelp_iG2[i][0]; - hRF->rf_indx_nelp_iG2[i + 1][1] = hRF->rf_indx_nelp_iG2[i][1]; - hRF->rf_indx_nelp_fid[i + 1] = hRF->rf_indx_nelp_fid[i]; - - /* tbe gain Fr shift */ - hRF->rf_indx_tbeGainFr[i + 1] = hRF->rf_indx_tbeGainFr[i]; - hRF->rf_clas[i + 1] = hRF->rf_clas[i]; - hRF->rf_gain_tcx[i + 1] = hRF->rf_gain_tcx[i]; - hRF->rf_tcxltp_param[i + 1] = hRF->rf_tcxltp_param[i]; - } - } - - return; -} -#endif diff --git a/lib_enc/decision_matrix_enc_fx.c b/lib_enc/decision_matrix_enc_fx.c index 3d31e7645..b2b464988 100644 --- a/lib_enc/decision_matrix_enc_fx.c +++ b/lib_enc/decision_matrix_enc_fx.c @@ -745,7 +745,6 @@ void signalling_enc_fx( * * write channel-aware signalling information into the bitstream *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void signaling_enc_rf_fx( Encoder_State *st /* i : encoder state structure */ ) @@ -820,7 +819,6 @@ void signaling_enc_rf_fx( return; } -#endif void signalling_enc_rf( Encoder_State *st /* i : encoder state structure */ ) diff --git a/lib_enc/detect_transient.c b/lib_enc/detect_transient.c index 72068c54b..4922b9e4c 100644 --- a/lib_enc/detect_transient.c +++ b/lib_enc/detect_transient.c @@ -40,224 +40,3 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * hp_filter() - * - * High pass filter - *--------------------------------------------------------------------------*/ - -static void hp_filter( - const float *x, /* i : input signal */ - float *y, /* o : output signal */ - float *oldx, /* i/o: previous filter input */ - float *oldy, /* i/o: previous filter output */ - const int16_t L /* i : length (32 or 48Hz) */ -) -{ - int16_t i; - - y[0] = 0.4931f * *oldy + 0.7466f * ( x[0] - *oldx ); - - for ( i = 1; i < L; i++ ) - { - y[i] = 0.4931f * y[i - 1] + 0.7466f * ( x[i] - x[i - 1] ); - } - - *oldx = x[L - 1]; - *oldy = y[L - 1]; - - return; -} - -/*-------------------------------------------------------------------------- - * detect_transient() - * - * Detect if the signal is a transient - *--------------------------------------------------------------------------*/ - -/*! r: transient flag */ -int16_t detect_transient( - Encoder_State *st, /* i/o: Encoder state structure */ - const float *in, /* i : input signal */ - const int16_t L /* i : length (32 or 48kHz) */ -) -{ - float Energy; - float EnergyLT; - int16_t i, blk; - int16_t IsTransient; - float out_filt[L_FRAME48k]; - int16_t position = 0; - float thr; - float Thres = 0.f; - float Energy_in[5]; - float E_low, E_high; - float E_in = 0.0f, E_out = 0.0f; - - IsTransient = 0; - - if ( st->last_extl != st->extl ) - { - st->TransientHangOver = 0; - st->old_hpfilt_in = 0; - st->old_hpfilt_out = 0; - st->Energy_Old = 0; - } - - /* High-pass filter */ - hp_filter( in, out_filt, &( st->old_hpfilt_in ), &( st->old_hpfilt_out ), L ); - - /* Long-term energy */ - if ( st->last_extl != st->extl || ( st->last_extl == st->extl && st->last_core != st->core ) || st->last_codec_mode == MODE2 ) - { - EnergyLT = EPSILON; - for ( i = 0; i < L / 4; i++ ) - { - EnergyLT += out_filt[i] * out_filt[i]; - } - } - else - { - EnergyLT = st->EnergyLT; - } - - if ( L == L_FRAME8k ) - { - Energy_in[0] = st->Energy_Old; - E_in = 0; - E_out = 0; - - /* Compute block energy */ - for ( blk = 0; blk < 4; blk++ ) - { - Energy = EPSILON; - Energy_in[blk + 1] = EPSILON; - - for ( i = 0; i < L / 4; i++ ) - { - Energy += out_filt[i + blk * ( L / 4 )] * out_filt[i + blk * ( L / 4 )]; - Energy_in[blk + 1] += in[i + blk * ( L / 4 )] * in[i + blk * ( L / 4 )]; - } - - E_in += Energy_in[blk + 1]; - E_out += Energy; - - Thres = 15.f; - - if ( Energy > 6.0f * EnergyLT ) - { - IsTransient = 1; - position = blk; - } - - EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; - } - } - else - { - /* Compute block energy */ - for ( blk = 0; blk < 4; blk++ ) - { - Energy = EPSILON; - for ( i = 0; i < L / 4; i++ ) - { - Energy += out_filt[i + blk * ( L / 4 )] * out_filt[i + blk * ( L / 4 )]; - } - - if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - if ( ( Energy > 13.5f * EnergyLT ) || ( Energy > 10.0f * EnergyLT && st->core == ACELP_CORE && st->coder_type == INACTIVE ) ) - { - IsTransient = 1; - position = blk; - } - } - else - { - if ( st->total_brate <= HQ_16k40 && st->bwidth == SWB ) - { - thr = 13.5f; - } - else - { - thr = 6.0f; - } - - if ( Energy > thr * EnergyLT ) - { - IsTransient = 1; - position = blk; - } - } - - EnergyLT = 0.75f * EnergyLT + 0.25f * Energy; - } - } - - st->EnergyLT = EnergyLT; - - if ( ( st->last_extl != SWB_BWE && st->last_extl != SWB_TBE && st->extl == SWB_BWE ) || - ( st->last_extl != FB_BWE && st->last_extl != FB_TBE && st->extl == FB_BWE ) ) - { - IsTransient = 0; - } - - if ( IsTransient && L == L_FRAME8k ) - { - E_low = 0.f; - blk = 0; - for ( i = 0; i < position + 1; i++ ) - { - E_low += Energy_in[i]; - blk++; - } - E_low /= (float) blk; - - E_high = 0.f; - blk = 0; - for ( i = position + 1; i < 5; i++ ) - { - E_high += Energy_in[i]; - blk++; - } - E_high /= (float) blk; - - if ( ( ( E_high / E_low < 2.0f ) && ( E_high / E_low > 0.7f ) ) && ( ( E_in / E_out ) > Thres ) ) - { - IsTransient = 0; - } - } - - if ( IsTransient ) - { - if ( L == L_FRAME8k ) - { - if ( position == 3 ) - { - st->TransientHangOver = 1; - } - } - else - { - st->TransientHangOver = 1; - } - } - else - { - if ( st->TransientHangOver ) - { - st->TransientHangOver = 0; - IsTransient = 1; - } - } - - if ( L == L_FRAME8k ) - { - st->Energy_Old = Energy_in[4]; - } - - return IsTransient; -} -#endif diff --git a/lib_enc/dtx.c b/lib_enc/dtx.c index 19cf29238..fd519a119 100644 --- a/lib_enc/dtx.c +++ b/lib_enc/dtx.c @@ -43,832 +43,3 @@ #include "ivas_prot.h" #include "rom_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define ALPHA_ENER_SLOW 0.99f /* Slow adaptation (noise up, speech down) */ -#define ALPHA_ENER_FAST 0.90f /* Fast adaptation (noise down, speech up) */ -#define MIN_CNT 50 /* Minimum frame number before SID interval adaptation */ - -#define SNR_H 51.0f /* Estimated SNR and corresponding SID interval */ - /* 51dB corresponds to 25dB SNR before noise supressor */ -#define SNR_L 36.0f -#define INT_H 50 -#define INT_L 8 - -#define LTE_VAR -4.0f - -#define MAX_BRATE_DTX_EVS ACELP_24k40 /* maximum bitrate to which the default DTX is applied in EVS; otherwise DTX is applied only in silence */ -#define MAX_BRATE_DTX_IVAS IVAS_80k /* maximum bitrate to which the default DTX is applied in IVAS; otherwise DTX is applied only in silence */ -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void update_SID_cnt( DTX_ENC_HANDLE hDtxEnc, const int32_t core_brate, const int16_t Opt_AMR_WB ); - -/*-------------------------------------------------------------------* - * dtx() - * - * Discontinuous transmission operation - *-------------------------------------------------------------------*/ - -void dtx( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t vad, /* i : VAD flag for DTX */ - const float speech[] /* i : Pointer to the speech frame */ -) -{ - float alpha; - DTX_ENC_HANDLE hDtxEnc = st->hDtxEnc; - int16_t last_br_cng_flag, last_br_flag, br_dtx_flag; - if ( st->dtx_sce_sba != 0 ) - { - last_br_cng_flag = 1; - last_br_flag = 1; - br_dtx_flag = 1; - } - else - { - last_br_cng_flag = st->last_total_brate_cng <= MAX_BRATE_DTX_EVS || st->lp_noise < 15 || ( st->element_mode == IVAS_SCE && st->last_total_brate_cng <= MAX_BRATE_DTX_IVAS ); - last_br_flag = st->last_total_brate <= MAX_BRATE_DTX_EVS || st->lp_noise < 15 || ( st->element_mode == IVAS_SCE && st->last_total_brate <= MAX_BRATE_DTX_IVAS ); - br_dtx_flag = 0; - } - - /* Initialization */ - if ( st->ini_frame == 0 ) - { - st->active_cnt = CNG_TYPE_HO; - - if ( ( st->codec_mode == MODE1 || st->Opt_AMR_WB ) && st->element_mode != IVAS_SCE && st->element_mode != IVAS_CPE_MDCT ) - { - st->cng_type = LP_CNG; - } - else - { - st->cng_type = FD_CNG; - } - } - - if ( st->Opt_DTX_ON && vad == 0 && - st->ini_frame > 2 && /* CNG coding starts after 3 frames */ - st->fd_cng_reset_flag == 0 && - st->last_core != AMR_WB_CORE && - st->Opt_AMR_WB == 0 ) - { - if ( st->last_core_brate > SID_2k40 && - st->last_total_brate_cng != -1 && - st->last_total_brate_cng != st->total_brate && - last_br_cng_flag ) - { - st->total_brate = st->last_total_brate_cng; - if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) ) - { - st->Opt_SC_VBR = 0; - } - - st->rf_mode = st->last_rf_mode_cng; - st->bwidth = st->last_bwidth_cng; - st->codec_mode = st->last_codec_mode_cng; - } - - if ( st->last_core_brate <= SID_2k40 && - st->last_total_brate != st->total_brate && - last_br_flag ) - { - st->total_brate = st->last_total_brate; - if ( !( st->total_brate == ACELP_7k20 && st->Opt_SC_VBR ) ) - { - st->Opt_SC_VBR = 0; - } - - st->Opt_RF_ON = 0; - if ( st->rf_mode && st->rf_fec_offset > 0 && st->total_brate == ACELP_13k20 && st->bwidth != NB ) - { - st->Opt_RF_ON = 1; - } - st->rf_mode = st->Opt_RF_ON; - st->bwidth = st->last_bwidth; - - if ( st->element_mode > EVS_MONO ) - { - st->codec_mode = MODE1; - } - else - { - st->codec_mode = get_codec_mode( st->total_brate ); - } - } - } - - /*------------------------------------------------------------------------* - * Select SID or FRAME_NO_DATA frame if DTX is enabled - *------------------------------------------------------------------------*/ - - if ( st->dtx_sce_sba == 0 ) - { - br_dtx_flag = ( st->element_mode == EVS_MONO && st->total_brate <= MAX_BRATE_DTX_EVS ) || - ( st->element_mode != EVS_MONO && ivas_total_brate <= MAX_BRATE_DTX_IVAS ) || - st->lp_noise < 15; - } - - if ( st->Opt_DTX_ON && vad == 0 && - st->ini_frame > 2 && /* CNG coding starts after 3 frames */ - - br_dtx_flag && - st->fd_cng_reset_flag == 0 ) - { - /* reset counter */ - st->active_cnt = 0; - - if ( st->Opt_AMR_WB ) - { - st->last_total_brate_cng = -1; - } - else - { - st->last_total_brate_cng = st->total_brate; - st->last_bwidth_cng = st->bwidth; - st->last_codec_mode_cng = st->codec_mode; - st->last_rf_mode_cng = st->rf_mode; - } - - if ( hDtxEnc->cnt_SID == 0 ) - { - /* this will be a SID frame */ - if ( st->Opt_AMR_WB ) - { - st->core_brate = SID_1k75; - } - else - { - st->core_brate = SID_2k40; - } - } - else - { - /* this will be a no data frame */ - st->core_brate = FRAME_NO_DATA; - } - - if ( st->core_brate == FRAME_NO_DATA && st->last_core != ACELP_CORE && !st->Opt_AMR_WB ) - { - /* force SID frame when switching from HQ core or AMR-WB IO mode into inactive frame in ACELP core when DTX is on */ - { - st->core_brate = SID_2k40; - } - } - - if ( ( st->last_core != ACELP_CORE || st->cng_type == FD_CNG ) && st->dtx_sce_sba == 1 ) - { - st->cng_type = FD_CNG; - if ( st->element_mode == EVS_MONO && ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 || st->total_brate == ACELP_48k || st->total_brate == HQ_96k || st->total_brate == HQ_128k ) ) - { - st->codec_mode = MODE2; - } - } - else - { - if ( ( st->cng_type == FD_CNG && ( st->total_brate <= MAX_BRATE_DTX_EVS || ( st->element_mode != EVS_MONO && ivas_total_brate <= MAX_BRATE_DTX_IVAS ) ) ) || ( st->element_mode == IVAS_CPE_MDCT ) ) /* at highest bitrates, use exclusively LP_CNG */ - { - if ( st->element_mode == EVS_MONO && ( st->total_brate == ACELP_9k60 || st->total_brate == ACELP_16k40 || st->total_brate == ACELP_24k40 ) ) - { - st->codec_mode = MODE2; - } - } - else - { - st->cng_type = LP_CNG; - if ( st->codec_mode == MODE2 ) - { - st->hTdCngEnc->lp_cng_mode2 = 1; - } - st->codec_mode = MODE1; - } - } - - /* reset the bitstream (IVAS format signaling was already written) */ - if ( st->element_mode != IVAS_CPE_MDCT && st->hBstr != NULL ) - { - reset_indices_enc( st->hBstr, st->hBstr->nb_ind_tot ); - } - } - - /*------------------------------------------------------------------------* - * Reset counters when in active frame (neither SID nor FRAME_NO_DATA frame) - *------------------------------------------------------------------------*/ - - if ( st->core_brate != SID_2k40 && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) - { - if ( hDtxEnc != NULL ) - { - hDtxEnc->cnt_SID = 0; - - /* change SID update rate */ - /* first SID update is only 8 (3 in AMR-WB IO mode) frames after the active speech end */ - if ( !st->Opt_AMR_WB ) - { - hDtxEnc->max_SID = FIXED_SID_RATE; - } - else - { - hDtxEnc->max_SID = 3; - } - - if ( hDtxEnc->max_SID > hDtxEnc->interval_SID ) - { - hDtxEnc->max_SID = hDtxEnc->interval_SID; - } - - /* reset the counter of CNG frames for averaging */ - hDtxEnc->cng_cnt = 0; - } - - if ( st->active_cnt >= CNG_TYPE_HO && !st->Opt_AMR_WB && st->element_mode != IVAS_CPE_MDCT ) - { - if ( st->element_mode == IVAS_SCE ) - { - float lp_thresh, fd_thresh; - if ( st->Opt_DTX_ON && st->dtx_sce_sba == 1 ) - { - lp_thresh = 5.f; - fd_thresh = 2.f; - } - else - - { - lp_thresh = 10.f; - fd_thresh = 5.f; - } - - /*More conservative selection of LP-CNG for SCE*/ - if ( st->cng_type == LP_CNG && ( st->bckr_tilt_lt_flt > lp_thresh ) ) - { - st->cng_type = FD_CNG; - } - else if ( st->cng_type == FD_CNG && ( st->bckr_tilt_lt_flt < fd_thresh ) && ( st->lp_noise > 2.f ) ) - { - st->cng_type = LP_CNG; - } - } - else - { - if ( st->cng_type == LP_CNG && ( ( st->input_bwidth == NB && st->bckr_tilt_lt_flt > 9.f ) || ( st->input_bwidth > NB && st->bckr_tilt_lt_flt > 45.f ) ) ) - { - st->cng_type = FD_CNG; - } - else if ( st->cng_type == FD_CNG && ( ( st->input_bwidth == NB && st->bckr_tilt_lt_flt < 2.f ) || ( st->input_bwidth > NB && st->bckr_tilt_lt_flt < 10.f ) ) ) - { - st->cng_type = LP_CNG; - } - } - st->last_total_brate_cng = -1; - } - else if ( st->Opt_AMR_WB ) - { - st->cng_type = LP_CNG; - } - - st->active_cnt++; - - st->active_cnt = min( st->active_cnt, 200 ); - } - - /*------------------------------------------------------------------------* - * Update speech and background noise long-term energy - *------------------------------------------------------------------------*/ - - if ( hDtxEnc != NULL ) - { - hDtxEnc->frame_ener = 0.0f; - - if ( st->Opt_DTX_ON ) - { - hDtxEnc->frame_ener = sum2_f( speech, L_FRAME ); - - /* Active speech (voiced) */ - if ( st->clas == VOICED_CLAS ) - { - alpha = ALPHA_ENER_SLOW; - if ( hDtxEnc->frame_ener > hDtxEnc->lt_ener_voiced ) - { - alpha = ALPHA_ENER_FAST; - } - - hDtxEnc->lt_ener_voiced = alpha * hDtxEnc->lt_ener_voiced + ( 1.0f - alpha ) * hDtxEnc->frame_ener; - - hDtxEnc->VarDTX_cnt_voiced++; - if ( hDtxEnc->VarDTX_cnt_voiced > MIN_CNT ) - { - hDtxEnc->VarDTX_cnt_voiced = MIN_CNT; - } - } - - /* Background noise */ - else if ( !st->Opt_AMR_WB ) - { - alpha = ALPHA_ENER_SLOW; - if ( hDtxEnc->frame_ener < hDtxEnc->lt_ener_noise ) - { - alpha = ALPHA_ENER_FAST; - } - - hDtxEnc->lt_ener_noise = alpha * hDtxEnc->lt_ener_noise + ( 1.0f - alpha ) * hDtxEnc->frame_ener; - - hDtxEnc->VarDTX_cnt_noise++; - - if ( hDtxEnc->VarDTX_cnt_noise > MIN_CNT ) - { - hDtxEnc->VarDTX_cnt_noise = MIN_CNT; - } - } - } - } - - /* Update of the SID counter */ - update_SID_cnt( hDtxEnc, st->core_brate, st->Opt_AMR_WB ); - - /* Update encoded bandwidth */ - if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) - { - st->bwidth = st->last_bwidth; - if ( st->last_core_brate > SID_2k40 && st->last_total_brate_cng != -1 ) - { - st->bwidth = st->last_bwidth_cng; - } - - if ( st->Opt_RF_ON && st->total_brate == ACELP_13k20 && st->bwidth == NB ) - { - st->codec_mode = MODE1; - reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); - st->Opt_RF_ON = 0; - st->rf_mode = 0; - } - - if ( st->Opt_RF_ON && st->total_brate != ACELP_13k20 && st->hRF != NULL ) - { - reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); - st->Opt_RF_ON = 0; - st->rf_mode = 0; - } - - if ( st->codec_mode == MODE2 ) - { - int16_t n, bits_frame_nominal, tmpBandwidthMin; - - bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( FrameSizeConfig[n].frame_bits == bits_frame_nominal ) - { - break; - } - } - if ( n == FRAME_SIZE_NB ) - { - assert( !"Bitrate not supported: not part of EVS" ); - } - - tmpBandwidthMin = FrameSizeConfig[n].bandwidth_min; - - if ( st->rf_mode ) - { - tmpBandwidthMin = WB; - } - - st->bwidth = check_bounds_s( st->bwidth, tmpBandwidthMin, FrameSizeConfig[n].bandwidth_max ); - } - } - - - return; -} - - -/*---------------------------------------------------------------------* - * update_SID_cnt() - * - * Update of the SID counter - *---------------------------------------------------------------------*/ - -static void update_SID_cnt( - DTX_ENC_HANDLE hDtxEnc, /* i/o: common DTX handle */ - const int32_t core_brate, /* i : core coder core bitrate */ - const int16_t Opt_AMR_WB /* i : AMR BW IO mode? */ -) -{ - float EstimatedSNR, delta; - - if ( core_brate == SID_2k40 || core_brate == SID_1k75 || core_brate == FRAME_NO_DATA ) - { - /* Adapt the SID interval */ - if ( hDtxEnc->var_SID_rate_flag && hDtxEnc->VarDTX_cnt_voiced == MIN_CNT && hDtxEnc->VarDTX_cnt_noise == MIN_CNT ) - { - EstimatedSNR = 10.0f * (float) log10( ( 0.01f + hDtxEnc->lt_ener_voiced ) / ( 0.01f + hDtxEnc->lt_ener_noise ) ); - if ( EstimatedSNR > SNR_H ) - { - hDtxEnc->interval_SID = INT_H; - } - else if ( EstimatedSNR < SNR_L ) - { - hDtxEnc->interval_SID = INT_L; - } - else - { - hDtxEnc->interval_SID = INT_L + (int16_t) ( ( INT_H - INT_L ) * ( EstimatedSNR - SNR_L ) / ( SNR_H - SNR_L ) ); - } - hDtxEnc->interval_SID = check_bounds_s( hDtxEnc->interval_SID, INT_L, INT_H ); - - if ( !Opt_AMR_WB || hDtxEnc->max_SID != 3 ) - { - hDtxEnc->max_SID = hDtxEnc->interval_SID; /* change SID update rate */ - } - } - - if ( hDtxEnc->cnt_SID != 0 ) - { - /* Send SID frame only if long-term energy variation is above threshold */ - delta = 10.0f * (float) log10( ( 0.01f + hDtxEnc->lt_ener_noise ) / ( 0.01f + hDtxEnc->lt_ener_last_SID ) ); - if ( delta < LTE_VAR && hDtxEnc->VarDTX_cnt_voiced == MIN_CNT && hDtxEnc->VarDTX_cnt_noise == MIN_CNT ) - { - /* Send SID frame, and reset hDtxEnc->lt_ener_noise */ - hDtxEnc->lt_ener_noise = hDtxEnc->frame_ener; - } - } - else - { - /* If SID frame was sent, update long-term energy */ - hDtxEnc->lt_ener_last_SID = hDtxEnc->lt_ener_noise; - } - - hDtxEnc->cnt_SID++; - - if ( hDtxEnc->var_SID_rate_flag ) - { - if ( Opt_AMR_WB && hDtxEnc->max_SID == 3 && hDtxEnc->cnt_SID == 3 ) - { - /* set the size of CNG history buffer for averaging to 3 frames */ - hDtxEnc->cng_hist_size = 3; - } - else if ( hDtxEnc->max_SID != 3 && hDtxEnc->cnt_SID == DTX_HIST_SIZE ) - { - /* set the size of CNG history buffer for averaging to DTX_HIST_SIZE frames */ - /* be sure that DTX_HIST_SIZE >= INT_L */ - hDtxEnc->cng_hist_size = DTX_HIST_SIZE; - } - } - - if ( !hDtxEnc->var_SID_rate_flag && hDtxEnc->interval_SID > 1 ) - { - /* set the size of CNG history buffer for averaging to interval_SID frames */ - hDtxEnc->cng_hist_size = hDtxEnc->interval_SID; - if ( hDtxEnc->cng_hist_size > DTX_HIST_SIZE ) - { - hDtxEnc->cng_hist_size = DTX_HIST_SIZE; - } - } - - if ( hDtxEnc->cnt_SID >= hDtxEnc->max_SID ) - { - /* adaptive SID update interval */ - hDtxEnc->max_SID = hDtxEnc->interval_SID; - hDtxEnc->cnt_SID = 0; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * dtx_hangover_control() - * - * - *-------------------------------------------------------------------*/ - -void dtx_hangover_control( - Encoder_State *st, /* i/o: encoder state structure */ - const float lsp_new[M] /* i : current frame LSPs */ -) -{ - int16_t ptr; - int16_t i, j, m; - float tmp_lsp[max( DTX_HIST_SIZE, HO_HIST_SIZE ) * M]; - float tmp_enr[max( DTX_HIST_SIZE, HO_HIST_SIZE )]; - float tmp[max( DTX_HIST_SIZE, HO_HIST_SIZE ) * M]; - float enr_new; - float weights; - float enr_est, lsp_est[M]; - float Dlsp, Denr; - float lsf_tmp[M]; - float C[M]; - float max_val[2]; - int16_t max_idx[2]; - float ftmp; - float Dlsp_n2e, Denr_n2e; - - TD_CNG_ENC_HANDLE hTdCngEnc = st->hTdCngEnc; - - /* get current frame exc energy in log2 */ - enr_new = (float) ( log10( hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr] ) / log10( 2.0f ) ); - - if ( enr_new < 0.0f ) - { - enr_new = 0.0f; - } - - /* get energies and lsps of hangover frames */ - ptr = hTdCngEnc->ho_circ_ptr - ( hTdCngEnc->burst_ho_cnt - 1 ); - if ( ptr < 0 ) - { - ptr += hTdCngEnc->ho_circ_size; - } - - for ( i = 0; i < hTdCngEnc->burst_ho_cnt - 1; i++ ) - { - mvr2r( &( hTdCngEnc->ho_lsp_circ[ptr * M] ), &( tmp_lsp[i * M] ), M ); - tmp_enr[i] = hTdCngEnc->ho_ener_circ[ptr]; - - ptr++; - if ( ptr == hTdCngEnc->ho_circ_size ) - { - ptr = 0; - } - } - - /* get estimated CNG energy and lsps assuming terminate hangover at current frame */ - ptr = hTdCngEnc->burst_ho_cnt - 2; - enr_est = W_DTX_HO[0] * tmp_enr[ptr]; - weights = W_DTX_HO[0]; - mvr2r( &( tmp_lsp[ptr * M] ), tmp, M ); - m = 1; - - for ( i = 1; i < hTdCngEnc->burst_ho_cnt - 2; i++ ) - { - if ( tmp_enr[ptr - i] < tmp_enr[ptr] * BUF_H_NRG && tmp_enr[ptr - i] > tmp_enr[ptr] * BUF_L_NRG ) - { - enr_est += W_DTX_HO[i] * tmp_enr[ptr - i]; - weights += W_DTX_HO[i]; - mvr2r( &tmp_lsp[( ptr - i ) * M], &tmp[m * M], M ); - m++; - } - } - - enr_est /= weights; - - if ( enr_est < 1.0f ) - { - enr_est = 1.0f; - } - - Denr_n2e = (float) fabs( enr_new - log10( enr_est ) / log10( 2.0f ) ); - - if ( m < 3 ) - { - enr_est = 0.8f * enr_est + ( 1 - 0.8f ) * hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr]; - } - else - { - enr_est = 0.95f * enr_est + ( 1 - 0.95f ) * hTdCngEnc->ho_ener_circ[hTdCngEnc->ho_circ_ptr]; - } - - enr_est = (float) ( log10( enr_est ) / log10( 2.0f ) ); - - if ( enr_est < 0.0f ) - { - enr_est = 0.0f; - } - - set_f( max_val, 0.0f, 2 ); - set_s( max_idx, 0, 2 ); - - for ( i = 0; i < m; i++ ) - { - if ( st->L_frame == L_FRAME ) - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_12k8 ); - ftmp = 6400.0f / ( M + 1 ); - C[i] = ( 6400.0f - lsf_tmp[M - 1] - ftmp ) * ( 6400.0f - lsf_tmp[M - 1] - ftmp ); - } - else - { - lsp2lsf( &tmp[i * M], lsf_tmp, M, INT_FS_16k ); - ftmp = 8000.0f / ( M + 1 ); - C[i] = ( 8000.0f - lsf_tmp[M - 1] - ftmp ) * ( 8000.0f - lsf_tmp[M - 1] - ftmp ); - } - - C[i] += ( lsf_tmp[0] - ftmp ) * ( lsf_tmp[0] - ftmp ); - for ( j = 0; j < M - 1; j++ ) - { - C[i] += ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ) * ( lsf_tmp[j + 1] - lsf_tmp[j] - ftmp ); - } - - C[i] *= 0.0588235f; /* 0.0588235f = 1/(M+1) */ - - if ( C[i] > max_val[0] ) - { - max_val[1] = max_val[0]; - max_idx[1] = max_idx[0]; - max_val[0] = C[i]; - max_idx[0] = i; - } - else if ( C[i] > max_val[1] ) - { - max_val[1] = C[i]; - max_idx[1] = i; - } - } - - if ( m == 1 ) - { - mvr2r( tmp, lsp_est, M ); - } - else if ( m < 4 ) - { - for ( i = 0; i < M; i++ ) - { - lsp_est[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_est[i] += tmp[j * M + i]; - } - - lsp_est[i] -= tmp[max_idx[0] * M + i]; - lsp_est[i] /= (float) ( m - 1 ); - } - } - else - { - for ( i = 0; i < M; i++ ) - { - lsp_est[i] = 0.0f; - for ( j = 0; j < m; j++ ) - { - lsp_est[i] += tmp[j * M + i]; - } - - lsp_est[i] -= ( tmp[max_idx[0] * M + i] + tmp[max_idx[1] * M + i] ); - lsp_est[i] /= (float) ( m - 2 ); - } - } - - Dlsp_n2e = 0.0f; - for ( i = 0; i < M; i++ ) - { - Dlsp_n2e += (float) fabs( lsp_new[i] - lsp_est[i] ); - lsp_est[i] = 0.8f * lsp_est[i] + ( 1 - 0.8f ) * lsp_new[i]; - } - - /* get deviation of CNG parameters between newly estimated and current state memory */ - Dlsp = 0.0f; - max_val[0] = 0.0f; - - for ( i = 0; i < M; i++ ) - { - Dlsp += (float) fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ); - if ( fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ) > max_val[0] ) - { - max_val[0] = (float) fabs( st->hDtxEnc->lspCNG[i] - lsp_est[i] ); - } - } - Denr = (float) fabs( ( log10( hTdCngEnc->lp_ener + 0.1f ) / log10( 2.0f ) ) - enr_est ); - - /* make decision if DTX hangover can be terminated */ - st->hVAD->hangover_terminate_flag = 0; - - if ( ( Dlsp < 0.4f && Denr < 1.4f && max_val[0] < 0.1f && Dlsp_n2e < 0.4f && Denr_n2e < 1.2f && st->Opt_SC_VBR ) || - ( Dlsp < 0.4f && Denr < 0.8f && max_val[0] < 0.1f && Dlsp_n2e < 0.4f && Denr_n2e < 0.8f && !st->Opt_SC_VBR ) ) - { - st->hVAD->hangover_terminate_flag = 1; - } - - return; -} - - -/*-------------------------------------------------------------------* - * td_cng_enc_init() - * - * - *-------------------------------------------------------------------*/ - -void td_cng_enc_init( - TD_CNG_ENC_HANDLE hTdCngEnc, /* i/o: DTX/TD CNG data handle */ - const int16_t Opt_DTX_ON, /* i : flag indicating DTX operation */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -) -{ - - hTdCngEnc->cng_seed = RANDOM_INITSEED; - hTdCngEnc->cng_ener_seed = RANDOM_INITSEED; - hTdCngEnc->cng_ener_seed1 = RANDOM_INITSEED; - hTdCngEnc->lp_ener = 0.0f; - hTdCngEnc->old_enr_index = -1; - hTdCngEnc->Enew = 0.0f; - - hTdCngEnc->lp_sp_enr = 0.0f; - hTdCngEnc->last_allow_cn_step = 0; - - hTdCngEnc->CNG_att = 0.0f; - - if ( Opt_DTX_ON ) - { - hTdCngEnc->cng_hist_ptr = -1; - set_f( hTdCngEnc->cng_lsp_hist, 0, DTX_HIST_SIZE * M ); - set_f( hTdCngEnc->cng_ener_hist, 0, DTX_HIST_SIZE ); - hTdCngEnc->ho_hist_ptr = -1; - hTdCngEnc->ho_sid_bw = 0; - set_f( hTdCngEnc->ho_lsp_hist, 0, HO_HIST_SIZE * M ); - set_f( hTdCngEnc->ho_ener_hist, 0, HO_HIST_SIZE ); - set_f( hTdCngEnc->ho_env_hist, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngEnc->ho_hist_size = 0; - hTdCngEnc->act_cnt = 0; - } - - set_s( hTdCngEnc->ho_16k_lsp, 0, HO_HIST_SIZE ); - hTdCngEnc->act_cnt2 = 0; - hTdCngEnc->num_ho = 0; - - hTdCngEnc->ho_circ_ptr = -1; - set_f( hTdCngEnc->ho_lsp_circ, 0, HO_HIST_SIZE * M ); - set_f( hTdCngEnc->ho_ener_circ, 0, HO_HIST_SIZE ); - set_f( hTdCngEnc->ho_env_circ, 0, HO_HIST_SIZE * NUM_ENV_CNG ); - hTdCngEnc->ho_circ_size = 0; - hTdCngEnc->burst_ho_cnt = 0; - hTdCngEnc->cng_buf_cnt = 0; - - - set_f( hTdCngEnc->lp_env, 0.0f, 20 ); - set_f( hTdCngEnc->cng_res_env, 0.0f, 20 * 8 ); - set_f( hTdCngEnc->exc_mem, 0.0f, 24 ); - set_f( hTdCngEnc->exc_mem1, 0.0f, 30 ); - set_f( hTdCngEnc->exc_mem2, 0.0f, 30 ); - set_f( hTdCngEnc->old_env, 0.0f, NUM_ENV_CNG ); - - /* SWB CNG/DTX */ - hTdCngEnc->last_wb_cng_ener = -6.02f; - hTdCngEnc->last_shb_cng_ener = -6.02f; - hTdCngEnc->mov_wb_cng_ener = -6.02f; - hTdCngEnc->mov_shb_cng_ener = -6.02f; - hTdCngEnc->shb_cng_ini_cnt = 1; - hTdCngEnc->shb_NO_DATA_cnt = 0; - hTdCngEnc->last_SID_bwidth = min( max_bwidth, SWB ); - hTdCngEnc->last_vad = 0; - hTdCngEnc->last_idx_ener = 0; - - return; -} - - -/*-------------------------------------------------------------------* - * dtx_enc_init() - * - * Initialize DTX parameters - *-------------------------------------------------------------------*/ - -void dtx_enc_init( - Encoder_State *st, /* i : Encoder state handle */ - const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ - const int16_t interval_SID /* i : interval for SID update */ -) -{ - DTX_ENC_HANDLE hDtxEnc; - hDtxEnc = st->hDtxEnc; - - hDtxEnc->first_CNG = 0; - hDtxEnc->cnt_SID = 0; - hDtxEnc->max_SID = 2; - hDtxEnc->CNG_mode = -1; - mvr2r( st->lsp_old1, hDtxEnc->lspCNG, M ); - hDtxEnc->VarDTX_cnt_voiced = 0; - hDtxEnc->VarDTX_cnt_noise = 0; - hDtxEnc->lt_ener_voiced = 0.0f; - hDtxEnc->lt_ener_noise = 0.0f; - hDtxEnc->frame_ener = 0.0f; - hDtxEnc->lt_ener_last_SID = 0.0f; - hDtxEnc->last_CNG_L_frame = L_FRAME; - hDtxEnc->var_SID_rate_flag = var_SID_rate_flag; - hDtxEnc->last_active_brate = ACELP_7k20; - hDtxEnc->cng_cnt = 0; - - if ( hDtxEnc->var_SID_rate_flag ) - { - hDtxEnc->interval_SID = 12; - hDtxEnc->cng_hist_size = DTX_HIST_SIZE; - } - else - { - hDtxEnc->interval_SID = interval_SID; - if ( hDtxEnc->interval_SID >= DTX_HIST_SIZE ) - { - hDtxEnc->cng_hist_size = hDtxEnc->interval_SID; - } - } - - return; -} -#endif diff --git a/lib_enc/enc_acelp.c b/lib_enc/enc_acelp.c index 9f4f9d81f..e1517cb69 100644 --- a/lib_enc/enc_acelp.c +++ b/lib_enc/enc_acelp.c @@ -43,104 +43,6 @@ #include "rom_com.h" #include "rom_enc.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void E_ACELP_codearithp( const float v[], uint32_t *n, uint32_t *ps, int16_t *p, const int16_t trackstep, const int16_t tracklen ); - - -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define NB_MAX 8 - -/* - * E_ACELP_h_vec_corrx - * - * Parameters: - * h I: scaled impulse response - * vec I: vector to correlate with h[] - * track I: track to use - * sign I: sign vector - * rrixix I: correlation of h[x] with h[x] - * cor O: result of correlation (16 elements) - * - * Function: - * Calculate the correlations of h[] with vec[] for the specified track - * - * Returns: - * void - */ - -static void acelp_h_vec_corr1( - float h[], - float vec[], - int16_t track, - float sign[], - float ( *rrixix )[16], - float cor[], - int16_t dn2_pos[], - int16_t nb_pulse ) -{ - int16_t i, j; - int16_t dn; - int16_t *dn2; - float *p0; - float s; - - dn2 = &dn2_pos[track * 8]; - p0 = rrixix[track]; - for ( i = 0; i < nb_pulse; i++ ) - { - dn = dn2[i]; - s = 0.0F; - /* L_SUBFR-dn */ - /* vec[dn] */ - for ( j = 0; j < ( L_SUBFR - dn ); j++ ) - { - s += h[j] * vec[dn + j]; - } - - cor[dn >> 2] = sign[dn] * s + p0[dn >> 2]; - } - - return; -} - - -static void acelp_h_vec_corr2( - float h[], - float vec[], - int16_t track, - float sign[], - float ( *rrixix )[16], - float cor[] ) -{ - int16_t i, j; - float *p0; - float s; - - p0 = rrixix[track]; - /* sign[track] */ - for ( i = 0; i < 16; i++ ) - { - s = 0.0F; - /* h[0], vec[track] */ - /* L_SUBFR-track */ - for ( j = 0; j < L_SUBFR - track; j++ ) - { - s += h[j] * vec[track + j]; - } - - cor[i] = s * sign[track] + p0[i]; - track += 4; - } - return; -} -#endif /* @@ -166,80 +68,6 @@ static void acelp_h_vec_corr2( * Returns: * void */ -#ifndef IVAS_FLOAT_FIXED -static void acelp_2pulse_search( - int16_t nb_pos_ix, - int16_t track_x, - int16_t track_y, - float *ps, - float *alp, - int16_t *ix, - int16_t *iy, - float dn[], - int16_t *dn2, - float cor_x[], - float cor_y[], - float ( *rrixiy )[256] ) -{ - int16_t x, x2, y, x_save = 0, y_save = 0, i, *pos_x; - float ps0, alp0; - float ps1, ps2, sq, sqk; - float alp1, alp2, alpk; - float *p1, *p2; - float s; - - /* x_save=y_save=0 */ - /* eight dn2 max positions per track */ - pos_x = &dn2[track_x << 3]; - /* save these to limit memory searches */ - ps0 = *ps; - alp0 = *alp; - - alpk = 1.0F; - sqk = -1.0F; - x2 = pos_x[0] >> 2; - if ( ( alp0 + cor_x[x2] + cor_y[0] + rrixiy[track_x][x2 << 4] ) < 0 ) - { - sqk = 1.0F; - } - - /* loop track 1 */ - for ( i = 0; i < nb_pos_ix; i++ ) - { - x = pos_x[i]; - x2 = x >> 2; - /* dn[x] has only nb_pos_ix positions saved */ - ps1 = ps0 + dn[x]; - alp1 = alp0 + cor_x[x2]; - p1 = cor_y; - p2 = &rrixiy[track_x][x2 << 4]; - for ( y = track_y; y < L_SUBFR; y += 4 ) - { - ps2 = ps1 + dn[y]; - alp2 = alp1 + ( *p1++ ) + ( *p2++ ); - - sq = ps2 * ps2; - - s = ( alpk * sq ) - ( sqk * alp2 ); - - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp2; - y_save = y; - x_save = x; - } - } - } - - *ps = ps0 + dn[x_save] + dn[y_save]; - *alp = alpk; - *ix = x_save; - *iy = y_save; - - return; -} -#endif /* @@ -261,1262 +89,3 @@ static void acelp_2pulse_search( * Returns: * void */ -#ifndef IVAS_FLOAT_FIXED -static void E_ACELP_1pulse_search( - int16_t track_x, - int16_t track_y, - float *ps, - float *alp, - int16_t *ix, - float dn[], - float cor_x[], - float cor_y[] ) -{ - int16_t x, x_save = 0; - float ps0, alp0; - float ps1, sq, sqk; - float alp1, alpk; - float s; - - /* save these to limit memory searches */ - ps0 = *ps; - alp0 = *alp; - alpk = 1.0F; - sqk = -1.0F; - - if ( ( alp0 + cor_x[( track_x >> 2 )] ) < 0 ) - { - sqk = 1.0F; - } - for ( x = track_x; x < L_SUBFR; x += 4 ) - { - ps1 = ps0 + dn[x]; - alp1 = alp0 + cor_x[x >> 2]; - sq = ps1 * ps1; - s = ( alpk * sq ) - ( sqk * alp1 ); - - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp1; - x_save = x; - } - } - if ( track_y != track_x ) - { - for ( x = track_y; x < L_SUBFR; x += 4 ) - { - ps1 = ps0 + dn[x]; - alp1 = alp0 + cor_y[x >> 2]; - sq = ps1 * ps1; - s = ( alpk * sq ) - ( sqk * alp1 ); - - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp1; - x_save = x; - } - } - } - - *ps = ps0 + dn[x_save]; - *alp = alpk; - *ix = x_save; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/* - * acelp_pulsesign - * - * Parameters: - * cn I: residual after int32_t term prediction - * dn I: corr. between target and h[]. - * dn2 O: dn2[] = mix of dn[] and cn[] - * sign O: sign of pulse - * vec O: negative sign of pulse - * - * Function: - * Determine sign of each pulse position, store them in "sign" - * and change dn to all positive. - * Subframe size = L_SUBFR - * Returns: - * void - */ -void acelp_pulsesign( - const float cn[], - float dn[], - float dn2[], - float sign[], - float vec[], - const float alp ) -{ - int16_t i; - float val; - float s, cor; - - /* calculate energy for normalization of cn[] and dn[] */ - val = ( cn[0] * cn[0] ) + 1.0F; - cor = ( dn[0] * dn[0] ) + 1.0F; - for ( i = 1; i < L_SUBFR; i++ ) - { - val += ( cn[i] * cn[i] ); - cor += ( dn[i] * dn[i] ); - } - - s = (float) sqrt( cor / val ); - for ( i = 0; i < L_SUBFR; i++ ) - { - cor = ( s * cn[i] ) + ( alp * dn[i] ); - if ( cor >= 0.0F ) - { - sign[i] = 1.0F; - vec[i] = -1.0F; - dn2[i] = cor; /* dn2[] = mix of dn[] and cn[] */ - } - else - { - sign[i] = -1.0F; - vec[i] = 1.0F; - dn[i] = -dn[i]; /* modify dn[] according to the fixed sign */ - dn2[i] = -cor; /* dn2[] = mix of dn[] and cn[] */ - } - } - - return; -} - - -void acelp_findcandidates( - float dn2[], - int16_t dn2_pos[], - int16_t pos_max[], - const int16_t L_subfr, - const int16_t tracks ) -{ - int16_t i, k, j; - float *ps_ptr; - - /* &pos_max[0], &dn2_pos[0] */ - for ( i = 0; i < tracks; i++ ) - { - for ( k = 0; k < NB_MAX; k++ ) - { - ps_ptr = &dn2[i]; - for ( j = i + tracks; j < L_subfr; j += tracks ) - { - if ( dn2[j] > *ps_ptr ) - { - ps_ptr = &dn2[j]; - } - } - *ps_ptr = (float) k - NB_MAX; /* dn2 < 0 when position is selected */ - dn2_pos[i * 8 + k] = (int16_t) ( ps_ptr - dn2 ); - } - pos_max[i] = dn2_pos[i * 8]; - } - - return; -} - -static void acelp_hbuf( - float *h_buf, - float **h, - float **h_inv, - const float *H ) -{ - int16_t i; - - *h = h_buf + L_SUBFR; - *h_inv = h_buf + ( 3 * L_SUBFR ); - for ( i = 0; i < L_SUBFR; i++ ) - { - ( *h )[-1 - i] = 0.0f; - ( *h_inv )[-1 - i] = 0.0f; - ( *h )[i] = H[i]; - ( *h_inv )[i] = -H[i]; - } - - return; -} - - -static void E_ACELP_corrmatrix( - float h[], - float sign[], - float vec[], - float rrixix[4][16], - float rrixiy[4][256] ) -{ - float *p0, *p1, *p2, *p3, *psign0, *psign1, *psign2, *psign3; - float *ptr_h1, *ptr_h2, *ptr_hf; - float cor; - int16_t i, k, pos; - - /* Compute rrixix[][] needed for the codebook search. */ - /* storage order --> i3i3, i2i2, i1i1, i0i0 */ - - /* Init pointers to last position of rrixix[] */ - p0 = &rrixix[0][16 - 1]; - p1 = &rrixix[1][16 - 1]; - p2 = &rrixix[2][16 - 1]; - p3 = &rrixix[3][16 - 1]; - - ptr_h1 = h; - cor = 0.0F; - for ( i = 0; i < 16; i++ ) - { - cor += ( *ptr_h1 ) * ( *ptr_h1 ); - ptr_h1++; - *p3-- = cor * 0.5F; - cor += ( *ptr_h1 ) * ( *ptr_h1 ); - ptr_h1++; - *p2-- = cor * 0.5F; - cor += ( *ptr_h1 ) * ( *ptr_h1 ); - ptr_h1++; - *p1-- = cor * 0.5F; - cor += ( *ptr_h1 ) * ( *ptr_h1 ); - ptr_h1++; - *p0-- = cor * 0.5F; - } - - /* Compute rrixiy[][] needed for the codebook search. */ - /* storage order --> i2i3, i1i2, i0i1, i3i0 */ - - pos = 256 - 1; - ptr_hf = h + 1; - for ( k = 0; k < 16; k++ ) - { - - p3 = &rrixiy[2][pos]; - p2 = &rrixiy[1][pos]; - p1 = &rrixiy[0][pos]; - p0 = &rrixiy[3][pos - 16]; - - cor = 0.0F; - ptr_h1 = h; - ptr_h2 = ptr_hf; - for ( i = k; i < 15; i++ ) - { - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p3 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p2 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p1 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p0 = cor; - - p3 -= ( 16 + 1 ); - p2 -= ( 16 + 1 ); - p1 -= ( 16 + 1 ); - p0 -= ( 16 + 1 ); - } - - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p3 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p2 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p1 = cor; - - pos -= 16; - ptr_hf += 4; - } - - /* storage order --> i3i0, i2i3, i1i2, i0i1 */ - - pos = 256 - 1; - ptr_hf = h + 3; - for ( k = 0; k < 16; k++ ) - { - - p3 = &rrixiy[3][pos]; - p2 = &rrixiy[2][pos - 1]; - p1 = &rrixiy[1][pos - 1]; - p0 = &rrixiy[0][pos - 1]; - - cor = 0.0F; - ptr_h1 = h; - ptr_h2 = ptr_hf; - for ( i = k + 1; i < 16; i++ ) - { - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p3 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p2 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p1 = cor; - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - ptr_h1++; - ptr_h2++; - *p0 = cor; - - p3 -= ( 16 + 1 ); - p2 -= ( 16 + 1 ); - p1 -= ( 16 + 1 ); - p0 -= ( 16 + 1 ); - } - - cor += ( *ptr_h1 ) * ( *ptr_h2 ); - *p3 = cor; - - pos--; - ptr_hf += 4; - } - - /* Modification of rrixiy[][] to take signs into account. */ - - p0 = &rrixiy[0][0]; - /* speed-up: 11% */ - p1 = &rrixiy[1][0]; - p2 = &rrixiy[2][0]; - p3 = &rrixiy[3][0]; - for ( i = 0; i < L_SUBFR; i += 4 ) - { - if ( sign[i + 0] < 0.0F ) - psign0 = &vec[1]; - else - psign0 = &sign[1]; - if ( sign[i + 1] < 0.0F ) - psign1 = &vec[2]; - else - psign1 = &sign[2]; - if ( sign[i + 2] < 0.0F ) - psign2 = &vec[3]; - else - psign2 = &sign[3]; - if ( sign[i + 3] < 0.0F ) - psign3 = &vec[0]; - else - psign3 = &sign[0]; - p0[0] = p0[0] * psign0[0]; - p0[1] = p0[1] * psign0[4]; - p0[2] = p0[2] * psign0[8]; - p0[3] = p0[3] * psign0[12]; - p0[4] = p0[4] * psign0[16]; - p0[5] = p0[5] * psign0[20]; - p0[6] = p0[6] * psign0[24]; - p0[7] = p0[7] * psign0[28]; - p0[8] = p0[8] * psign0[32]; - p0[9] = p0[9] * psign0[36]; - p0[10] = p0[10] * psign0[40]; - p0[11] = p0[11] * psign0[44]; - p0[12] = p0[12] * psign0[48]; - p0[13] = p0[13] * psign0[52]; - p0[14] = p0[14] * psign0[56]; - p0[15] = p0[15] * psign0[60]; - p0 += 16; - - p1[0] = p1[0] * psign1[0]; - p1[1] = p1[1] * psign1[4]; - p1[2] = p1[2] * psign1[8]; - p1[3] = p1[3] * psign1[12]; - p1[4] = p1[4] * psign1[16]; - p1[5] = p1[5] * psign1[20]; - p1[6] = p1[6] * psign1[24]; - p1[7] = p1[7] * psign1[28]; - p1[8] = p1[8] * psign1[32]; - p1[9] = p1[9] * psign1[36]; - p1[10] = p1[10] * psign1[40]; - p1[11] = p1[11] * psign1[44]; - p1[12] = p1[12] * psign1[48]; - p1[13] = p1[13] * psign1[52]; - p1[14] = p1[14] * psign1[56]; - p1[15] = p1[15] * psign1[60]; - p1 += 16; - - p2[0] = p2[0] * psign2[0]; - p2[1] = p2[1] * psign2[4]; - p2[2] = p2[2] * psign2[8]; - p2[3] = p2[3] * psign2[12]; - p2[4] = p2[4] * psign2[16]; - p2[5] = p2[5] * psign2[20]; - p2[6] = p2[6] * psign2[24]; - p2[7] = p2[7] * psign2[28]; - p2[8] = p2[8] * psign2[32]; - p2[9] = p2[9] * psign2[36]; - p2[10] = p2[10] * psign2[40]; - p2[11] = p2[11] * psign2[44]; - p2[12] = p2[12] * psign2[48]; - p2[13] = p2[13] * psign2[52]; - p2[14] = p2[14] * psign2[56]; - p2[15] = p2[15] * psign2[60]; - p2 += 16; - - p3[0] = p3[0] * psign3[0]; - p3[1] = p3[1] * psign3[4]; - p3[2] = p3[2] * psign3[8]; - p3[3] = p3[3] * psign3[12]; - p3[4] = p3[4] * psign3[16]; - p3[5] = p3[5] * psign3[20]; - p3[6] = p3[6] * psign3[24]; - p3[7] = p3[7] * psign3[28]; - p3[8] = p3[8] * psign3[32]; - p3[9] = p3[9] * psign3[36]; - p3[10] = p3[10] * psign3[40]; - p3[11] = p3[11] * psign3[44]; - p3[12] = p3[12] * psign3[48]; - p3[13] = p3[13] * psign3[52]; - p3[14] = p3[14] * psign3[56]; - p3[15] = p3[15] * psign3[60]; - p3 += 16; - } - - return; -} - -void E_ACELP_4tsearch( - float dn[], - const float cn[], - const float H[], - float code[], - PulseConfig *config, - int16_t ind[], - float y[] ) -{ - float sign[L_SUBFR], vec[L_SUBFR]; - float cor_x[16], cor_y[16], h_buf[4 * L_SUBFR]; - float rrixix[4][16]; - float rrixiy[4][256]; - float dn2[L_SUBFR]; - float psk, ps, alpk, alp = 0.0F; - int16_t codvec[NB_PULSE_MAX]; - int16_t pos_max[4]; - int16_t dn2_pos[8 * 4]; - int16_t ipos[NB_PULSE_MAX]; - float *p0, *p1, *p2, *p3; - float *h, *h_inv; - int16_t i, j, k, l, st, pos = 0, track; - int16_t index, iPulse; - float val; - float s; - int16_t restpulses; - - alp = config->alp_flt; /* initial value for energy of all fixed pulses */ - - for ( k = 0; k < config->nb_pulse; k++ ) - { - codvec[k] = 0; - } - - /* Find sign for each pulse position. */ - acelp_pulsesign( cn, dn, dn2, sign, vec, alp ); - - /* Select the most important 8 position per track according to dn2[]. */ - acelp_findcandidates( dn2, dn2_pos, pos_max, L_SUBFR, NB_TRACK_FCB_4T ); - - /* Compute h_inv[i]. */ - acelp_hbuf( h_buf, &h, &h_inv, H ); - - /* Compute correlation matrices needed for the codebook search. */ - E_ACELP_corrmatrix( h, sign, vec, rrixix, rrixiy ); - - /* - * Deep first search: - * ------------------ - * 20 bits (4p): 4 iter x ((4x16)+(8x16)) = 768 tests - * 36 bits (8p): 4 iter x ((1x1)+(4x16)+(8x16)+(8x16)) = 1280 tests - * 52 bits (12p): 3 iter x ((1x1)+(1x1)+(4x16)+(6x16) - * +(8x16)+(8x16)) = 1248 tests - * 64 bits (16p): 2 iter x ((1x1)+(1x1)+(4x16)+(6x16) - * +(6x16)+(8x16)+(8x16)+(8x16)) = 1280 tests - */ - psk = -1.0; - alpk = 1.0; - /*Number of iterations*/ - for ( k = 0; k < config->nbiter; k++ ) - { - /* copy search order from hash-table */ - for ( l = 0; l < config->nb_pulse; l++ ) - { - ipos[l] = tipos[( k * 4 ) + l]; - } - - /* if all tracks do not have equal number of pulses */ - restpulses = config->nb_pulse & 3; - if ( restpulses ) - { - switch ( config->codetrackpos ) - { - case TRACKPOS_FIXED_FIRST: /* fixed track positions, starting from left */ - /* add tracks from left */ - for ( iPulse = 0; iPulse < restpulses; iPulse++ ) - { - ipos[config->nb_pulse - restpulses + iPulse] = iPulse; - } - /* Put the same track on the next position, because the 1-pulse search - * will access it to determine if this could be in any track. */ - ipos[config->nb_pulse] = ipos[config->nb_pulse - 1]; - break; - case TRACKPOS_FIXED_EVEN: /* fixed track positions, odd tracks */ - /* odd tracks, switch order for every iteration */ - ipos[config->nb_pulse - restpulses] = ( k << 1 ) & 2; /* 0 for even k, 2 for odd*/ - ipos[config->nb_pulse - restpulses + 1] = ipos[config->nb_pulse - restpulses] ^ 2; /* 2 for even k, 0 for odd*/ - break; - case TRACKPOS_FIXED_TWO: /* two tracks instead of four */ - /* Put the next track on the next position, because the 1-pulse search - * will access it to determine if this could be in any track. */ - ipos[config->nb_pulse] = ( ipos[config->nb_pulse - 1] + 1 ) & 3; - break; - default: /* one or three free track positions */ - /* copy an extra position from table - 1pulse search will access this */ - ipos[config->nb_pulse] = tipos[( k * 4 ) + config->nb_pulse]; - break; - } - } - if ( config->fixedpulses == 0 ) /* 1100, 11, 1110, 1111, 2211 */ - { - pos = 0; - ps = 0.0F; - alp = 0.0F; - for ( i = 0; i < L_SUBFR; i++ ) - { - vec[i] = 0; - } - } - else if ( config->fixedpulses == 2 ) /* 2222 and 3322 */ - { - /* first stage: fix 2 pulses */ - pos = 2; - - ind[0] = pos_max[ipos[0]]; - ind[1] = pos_max[ipos[1]]; - ps = dn[ind[0]] + dn[ind[1]]; - - /*ind[1]>>2 and ind[0]>>2 and save*/ - /* ipos[1] and ipos[0] and save*/ - alp = rrixix[ipos[0]][ind[0] >> 2] + rrixix[ipos[1]][ind[1] >> 2] + - rrixiy[ipos[0]][( ( ind[0] >> 2 ) << 4 ) + ( ind[1] >> 2 )]; - - if ( sign[ind[0]] < 0.0 ) - { - p0 = h_inv - ind[0]; - } - else - { - p0 = h - ind[0]; - } - if ( sign[ind[1]] < 0.0 ) - { - p1 = h_inv - ind[1]; - } - else - { - p1 = h - ind[1]; - } - /*ptx = &vec p1 and p0 already initialize*/ - vec[0] = p0[0] + p1[0]; - vec[1] = p0[1] + p1[1]; - vec[2] = p0[2] + p1[2]; - vec[3] = p0[3] + p1[3]; - for ( i = 4; i < L_SUBFR; i += 6 ) - { - vec[i] = p0[i] + p1[i]; - vec[i + 1] = p0[i + 1] + p1[i + 1]; - vec[i + 2] = p0[i + 2] + p1[i + 2]; - vec[i + 3] = p0[i + 3] + p1[i + 3]; - vec[i + 4] = p0[i + 4] + p1[i + 4]; - vec[i + 5] = p0[i + 5] + p1[i + 5]; - } - } - else /* 3333 and above */ - { - /* first stage: fix 4 pulses */ - pos = 4; - - ind[0] = pos_max[ipos[0]]; - ind[1] = pos_max[ipos[1]]; - ind[2] = pos_max[ipos[2]]; - ind[3] = pos_max[ipos[3]]; - ps = dn[ind[0]] + dn[ind[1]] + dn[ind[2]] + dn[ind[3]]; - - p0 = h - ind[0]; - if ( sign[ind[0]] < 0.0 ) - { - p0 = h_inv - ind[0]; - } - - p1 = h - ind[1]; - if ( sign[ind[1]] < 0.0 ) - { - p1 = h_inv - ind[1]; - } - - p2 = h - ind[2]; - if ( sign[ind[2]] < 0.0 ) - { - p2 = h_inv - ind[2]; - } - - p3 = h - ind[3]; - if ( sign[ind[3]] < 0.0 ) - { - p3 = h_inv - ind[3]; - } - /* pt =&vec; others already defined*/ - vec[0] = p0[0] + p1[0] + p2[0] + p3[0]; - for ( i = 1; i < L_SUBFR; i += 3 ) - { - vec[i] = p0[i] + p1[i] + p2[i] + p3[i]; - vec[i + 1] = p0[i + 1] + p1[i + 1] + p2[i + 1] + p3[i + 1]; - vec[i + 2] = p0[i + 2] + p1[i + 2] + p2[i + 2] + p3[i + 2]; - } - - alp = 0.0F; - alp += vec[0] * vec[0] + vec[1] * vec[1]; - alp += vec[2] * vec[2] + vec[3] * vec[3]; - - for ( i = 4; i < L_SUBFR; i += 6 ) - { - alp += vec[i] * vec[i]; - alp += vec[i + 1] * vec[i + 1]; - alp += vec[i + 2] * vec[i + 2]; - alp += vec[i + 3] * vec[i + 3]; - alp += vec[i + 4] * vec[i + 4]; - alp += vec[i + 5] * vec[i + 5]; - } - - alp *= 0.5F; - } - - /* other stages of 2 pulses */ - for ( j = pos, st = 0; j < config->nb_pulse; j += 2, st++ ) - { - if ( ( config->nb_pulse - j ) >= 2 ) /*pair-wise search*/ - { - /* Calculate correlation of all possible positions - * of the next 2 pulses with previous fixed pulses. - * Each pulse can have 16 possible positions. */ - acelp_h_vec_corr1( h, vec, ipos[j], sign, rrixix, cor_x, dn2_pos, config->nbpos[st] ); - acelp_h_vec_corr2( h, vec, ipos[j + 1], sign, rrixix, cor_y ); - - /* Find best positions of 2 pulses. */ - acelp_2pulse_search( config->nbpos[st], ipos[j], ipos[j + 1], &ps, &alp, &ind[j], &ind[j + 1], dn, dn2_pos, cor_x, cor_y, rrixiy ); - } - else /*single pulse search*/ - { - acelp_h_vec_corr2( h, vec, ipos[j], sign, rrixix, cor_x ); - acelp_h_vec_corr2( h, vec, ipos[j + 1], sign, rrixix, cor_y ); - E_ACELP_1pulse_search( ipos[j], ipos[j + 1], &ps, &alp, &ind[j], dn, cor_x, cor_y ); - } - if ( j < ( config->nb_pulse - 2 ) ) - { - p0 = h - ind[j]; - if ( sign[ind[j]] < 0.0 ) - { - p0 = h_inv - ind[j]; - } - - p1 = h - ind[j + 1]; - if ( sign[ind[j + 1]] < 0.0 ) - { - p1 = h_inv - ind[j + 1]; - } - - vec[0] += p0[0] + p1[0]; - vec[1] += p0[1] + p1[1]; - vec[2] += p0[2] + p1[2]; - vec[3] += p0[3] + p1[3]; - for ( i = 4; i < L_SUBFR; i += 6 ) - { - vec[i] += p0[i] + p1[i]; - vec[i + 1] += p0[i + 1] + p1[i + 1]; - vec[i + 2] += p0[i + 2] + p1[i + 2]; - vec[i + 3] += p0[i + 3] + p1[i + 3]; - vec[i + 4] += p0[i + 4] + p1[i + 4]; - vec[i + 5] += p0[i + 5] + p1[i + 5]; - } - } - } - - /* memorise the best codevector */ - ps = ps * ps; - s = ( alpk * ps ) - ( psk * alp ); - if ( psk < 0 ) - { - s = 1.0F; - } - if ( s > 0.0F ) - { - psk = ps; - alpk = alp; - for ( i = 0; i < config->nb_pulse; i++ ) - { - codvec[i] = ind[i]; - } - } - } - - /* Build the codeword, the filtered codeword and index of codevector, as well as store weighted correlations. */ - set_f( code, 0, L_SUBFR ); - set_f( y, 0, L_SUBFR ); - set_s( ind, -1, NPMAXPT * 4 ); - - for ( k = 0; k < config->nb_pulse; k++ ) - { - i = codvec[k]; /* read pulse position */ - val = sign[i]; /* read sign */ - - index = (int16_t) ( i / 4 ); /* pos of pulse (0..15) */ - track = i % 4; - if ( val > 0 ) - { - code[i] += 1.0f; - codvec[k] += ( 2 * L_SUBFR ); - } - else - { - code[i] -= 1.0f; - index += 16; - } - - i = track * NPMAXPT; - while ( ind[i] >= 0 ) - { - i++; - } - - ind[i] = index; - - p0 = h_inv - codvec[k]; - for ( i = 0; i < L_SUBFR; i++ ) - { - y[i] += *p0++; - } - } - - return; -} - - -/* - * E_ACELP_4t - * - * Parameters: - * dn I: corr. between target and h[]. - * cn I: residual after int32_t term prediction - * H I: impulse response of weighted synthesis filter (Q12) - * code O: algebraic (fixed) codebook excitation (Q9) - * y O: filtered fixed codebook excitation (Q9) - * nbbits I: 20, 36, 44, 52, 64, 72 or 88 bits - * mode I: speech mode - * _index O: index - * - * Function: - * 20, 36, 44, 52, 64, 72, 88 bits algebraic codebook. - * 4 tracks x 16 positions per track = 64 samples. - * - * 20 bits 5 + 5 + 5 + 5 --> 4 pulses in a frame of 64 samples. - * 36 bits 9 + 9 + 9 + 9 --> 8 pulses in a frame of 64 samples. - * 44 bits 13 + 9 + 13 + 9 --> 10 pulses in a frame of 64 samples. - * 52 bits 13 + 13 + 13 + 13 --> 12 pulses in a frame of 64 samples. - * 64 bits 2 + 2 + 2 + 2 + 14 + 14 + 14 + 14 --> - * 16 pulses in a frame of 64 samples. - * 72 bits 10 + 2 + 10 + 2 + 10 + 14 + 10 + 14 --> - * 18 pulses in a frame of 64 samples. - * 88 bits 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 --> - * 24 pulses in a frame of 64 samples. - * - * All pulses can have two (2) possible amplitudes: +1 or -1. - * Each pulse can sixteen (16) possible positions. - * - * Returns: - * void - */ - -void E_ACELP_4t( - float dn[], - float cn[], - float H[], - float R[], - const int16_t acelpautoc, - float code[], - const int16_t cdk_index, - int16_t _index[], - const int16_t L_frame, - const int16_t last_L_frame, - const int32_t total_brate, - const int16_t i_subfr, - const int16_t cmpl_flag ) -{ - PulseConfig config; - int16_t ind[NPMAXPT * 4]; - float y[L_SUBFR]; - - config = PulseConfTable[cdk_index]; - - if ( cmpl_flag > 0 ) - { - config.nbiter = cmpl_flag; - } - - if ( L_frame != last_L_frame && total_brate == ACELP_24k40 && i_subfr < 5 * L_SUBFR ) - { - ( config.nbiter )--; - config.nbiter = max( config.nbiter, 1 ); - } - - if ( acelpautoc & 0x01 ) - { - E_ACELP_4tsearchx( dn, cn, R, code, &config, ind ); - } - else - { - E_ACELP_4tsearch( dn, cn, H, code, &config, ind, y ); - } - - E_ACELP_indexing( code, config, NB_TRACK_FCB_4T, _index ); - - return; -} - - -int16_t E_ACELP_indexing( - float code[], - PulseConfig config, - const int16_t num_tracks, - int16_t prm[] ) -{ - uint16_t track; - int16_t p[NB_TRACK_FCB_4T], wordcnt; - int16_t k; - uint16_t idxs[MAX_IDX_LEN], maxppos; - uint32_t s[NB_TRACK_FCB_4T], n[NB_TRACK_FCB_4T]; - int16_t maxp; - int16_t saved_bits; - - assert( num_tracks == NB_TRACK_FCB_4T ); - - saved_bits = 0; - - /* Code state of pulses of all tracks */ - wordcnt = ( config.bits + 15 ) >> 4; /* ceil(bits/16) */ - for ( k = 0; k < wordcnt; k++ ) - { - idxs[k] = 0; - } - if ( config.bits == 43 ) /* EVS pulse indexing */ - { - saved_bits = E_ACELP_code43bit( code, s, p, idxs ); - } - else - { - for ( track = 0; track < num_tracks; track++ ) - { - /* Code track of length 2^4 where step between tracks is 4. */ - E_ACELP_codearithp( code + track, n + track, s + track, p + track, num_tracks, 16 ); - } - fcb_pulse_track_joint( idxs, wordcnt, s, p, num_tracks ); - } - - /* check if we need to code track positions */ - switch ( config.codetrackpos ) - { - case TRACKPOS_FIXED_TWO: - /* Code position of consecutive tracks with single extra pulses */ - - /* Find track with one pulse less. */ - if ( p[0] == p[1] ) - { - /* Either 1100 or 0011 */ - if ( p[1] > p[2] ) - { - track = 0; /* 1100 */ - } - else - { - track = 2; /* 0011 */ - } - } - else - { - /* Either 0110 or 1001 */ - if ( p[0] < p[1] ) - { - track = 1; /* 0110 */ - } - else - { - track = 3; /* 1001 */ - } - } - /* Multiply by number of possible states (=shift by two) and - * add actual state. */ - longshiftleft( idxs, 2, idxs, wordcnt ); - longadd( idxs, &track, wordcnt, 1 ); - break; - case TRACKPOS_FREE_THREE: - /* Code position of track with one pulse less than others */ - - /* Find track with one pulse less. */ - maxp = p[0]; - maxppos = 0; - for ( track = 1; track < 4; track++ ) - { - if ( p[track] < maxp ) - { - maxppos = track; - break; - } - } - /* Multiply by number of possible states (=shift by two) and - * add actual state. */ - longshiftleft( idxs, 2, idxs, wordcnt ); - longadd( idxs, &maxppos, wordcnt, 1 ); - break; - case TRACKPOS_FREE_ONE: - /* Code position of track with one pulse more than others */ - - /* Find track with one pulse more. */ - maxp = p[0]; - maxppos = 0; - for ( track = 1; track < 4; track++ ) - { - if ( p[track] > maxp ) - { - maxppos = track; - break; - } - } - /* Multiply by number of possible states (=shift by two) and - * add actual state. */ - longshiftleft( idxs, 2, idxs, wordcnt ); - longadd( idxs, &maxppos, wordcnt, 1 ); - break; - case TRACKPOS_FIXED_EVEN: - case TRACKPOS_FIXED_FIRST: - break; - default: - printf( "Codebook mode not implemented." ); - assert( 0 ); /* mode not yet implemented*/ - break; - } - - /* cast to output buffer */ - for ( k = 0; k < wordcnt; k++ ) - { - prm[k] = idxs[k]; - } - - return ( saved_bits ); -} - -/*--------------------------------------------------------------------------* - * E_ACELP_innovative_codebook - * - * Find innovative codebook. - *--------------------------------------------------------------------------*/ - -void E_ACELP_innovative_codebook( - const float *exc, /* i : pointer to the excitation frame */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : fraction of lag */ - const int16_t T0_res, /* i : pitch resolution */ - const float pitch_gain, /* i : adaptive codebook gain */ - const float tilt_code, /* i : tilt factor */ - ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ - const int16_t i_subfr, /* i : subframe index */ - const float *Aq, /* i : quantized LPC coefficients */ - const float *h1, /* i : impulse response of weighted synthesis filter */ - const float *xn, /* i : Close-loop Pitch search target vector */ - const float *cn, /* i : Innovative codebook search target vector */ - const float *y1, /* i : zero-memory filtered adaptive excitation */ - float *y2, /* o : zero-memory filtered algebraic excitation */ - const int16_t acelpautoc, /* i : autocorrelation mode enabled */ - int16_t **pt_indice, /* i/o: quantization indices pointer */ - float *code, /* o : innovative codebook */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t last_L_frame, /* i : length of the last frame */ - const int32_t total_brate /* i : total bitrate */ -) -{ - float xn2[L_SUBFR], cn2[L_SUBFR], dn[L_SUBFR], h2[L_SUBFR]; - float Rw2[L_SUBFR]; - int16_t i, k; - float pitch; - - pitch = (float) T0 + (float) T0_frac / (float) T0_res; - - /* Update target vector for ACELP codebook search */ - updt_tar( xn, xn2, y1, pitch_gain, L_SUBFR ); - - /* Include fixed-gain pitch contribution into impulse resp. h1[] */ - mvr2r( h1, h2, L_SUBFR ); - cb_shape( acelp_cfg->pre_emphasis, acelp_cfg->pitch_sharpening, acelp_cfg->phase_scrambling, acelp_cfg->formant_enh, acelp_cfg->formant_tilt, acelp_cfg->formant_enh_num_flt, acelp_cfg->formant_enh_den_flt, Aq, h2, tilt_code, pitch, L_SUBFR ); - - /* Correlation between target xn2[] and impulse response h1[] */ - if ( acelpautoc & 0x01 ) - { - corr_xh( h2, Rw2, h2, L_SUBFR ); - for ( k = 0; k < L_SUBFR; k++ ) - { - cn2[k] = xn2[k]; - for ( i = 0; i < k; i++ ) - { - cn2[k] -= cn2[i] * h2[k - i]; - } - } - - E_ACELP_toeplitz_mul( Rw2, cn2, dn ); - } - else - { - updt_tar( cn, cn2, &exc[i_subfr], pitch_gain, L_SUBFR ); - corr_xh( xn2, dn, h2, L_SUBFR ); - } - - /* Innovative codebook search */ - if ( acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR] < ACELP_FIXED_CDK_NB ) - { - E_ACELP_4t( dn, cn2, h2, Rw2, acelpautoc, code, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], *pt_indice, L_frame, last_L_frame, total_brate, i_subfr, 0 ); - } - else - { - assert( 0 ); - } - *pt_indice += 8; - /* Generate weighted code */ - set_f( y2, 0.0f, L_SUBFR ); - for ( i = 0; i < L_SUBFR; i++ ) - { - /* Code is sparse, so check which samples are non-zero */ - if ( code[i] != 0 ) - { - for ( k = 0; k < L_SUBFR - i; k++ ) - { - y2[i + k] += code[i] * h2[k]; - } - } - } - - /*-------------------------------------------------------* - * - Add the fixed-gain pitch contribution to code[]. * - *-------------------------------------------------------*/ - - cb_shape( acelp_cfg->pre_emphasis, acelp_cfg->pitch_sharpening, acelp_cfg->phase_scrambling, acelp_cfg->formant_enh, acelp_cfg->formant_tilt, acelp_cfg->formant_enh_num_flt, acelp_cfg->formant_enh_den_flt, Aq, code, tilt_code, pitch, L_SUBFR ); - - return; -} - - -/*--------------------------------------------------------------------------* - * E_ACELP_codearithp - * - * Fixed bit-length arithmetic coding of pulses - * v - (input) pulse vector - * s - (output) encoded state - * n - (output) range of possible states (0...n-1) - * p - (output) number of pulses found - * len - (input) length of pulse vector - * trackstep - (input) step between tracks - *--------------------------------------------------------------------------*/ - -static void E_ACELP_codearithp( - const float v[], - uint32_t *n, - uint32_t *ps, - int16_t *p, - const int16_t trackstep, - const int16_t tracklen ) -{ - int16_t k, h, t, pos[9], sig[9], posno, tmp, L_subfr; - uint32_t s; - - posno = 0; - L_subfr = trackstep * tracklen; - - for ( k = t = 0; k < L_subfr; k += trackstep, t++ ) - { - tmp = ( v[k] > 0 ? 1 : -1 ); /* sign */ - for ( h = 0; h < v[k] * tmp; h++ ) - { - pos[posno] = t; - sig[posno] = tmp; - posno++; - if ( posno > 9 ) - { - break; - } - } - if ( posno >= 9 ) - { - break; - } - } - *p = posno; - - s = 0; - for ( k = 0; k < posno; k++ ) - { - /* check if next position is the same as this one */ - if ( ( k == posno - 1 ) || ( pos[k] != pos[k + 1] ) ) - { - /* next position is not the same (or we are at the last position) - * -> save sign */ - s <<= 1; - if ( sig[k] < 0 ) - { - s++; - } - } - s += pulsestostates[pos[k]][k]; - } - *ps = s; - if ( posno ) - { - *n = pulsestostates[tracklen][posno - 1]; - } - else - { - *n = 0; - } - - return; -} - - -void fcb_pulse_track_joint( - uint16_t *idxs, - const int16_t wordcnt, - uint32_t *index_n, - const int16_t *pulse_num, - const int16_t track_num ) -{ - int16_t hi_to_low[10] = { 0, 0, 0, 3, 9, 5, 3, 1, 8, 8 }; - - uint32_t index, indx_tmp; - uint32_t index_mask; - int16_t indx_flag, indx_flag_1; - int16_t track, track_num1, pulse_num0, pulse_num1; - int16_t indx_flag_2; - - indx_flag = 0; - indx_flag_1 = 0; - indx_flag_2 = 0; - for ( track = 0; track < track_num; track++ ) - { - indx_flag += ( pulse_num[track] >> 2 ); - indx_flag_1 += ( pulse_num[track] >> 1 ); - indx_flag_2 += ( pulse_num[track] >> 3 ); - } - - if ( indx_flag_2 >= 1 ) - { - hi_to_low[7] = 9; - index_mask = 0xffffff; - } - else - { - hi_to_low[7] = 1; - if ( indx_flag >= track_num ) - { - hi_to_low[4] = 9; - index_mask = 0xffff; - } - else - { - hi_to_low[4] = 1; - index_mask = 0xff; - } - } - - if ( indx_flag_1 >= track_num ) - { - indx_tmp = 0; - index = index_n[0] >> low_len[pulse_num[0]]; - for ( track = 1; track < track_num; track++ ) - { - pulse_num0 = pulse_num[track - 1]; - pulse_num1 = pulse_num[track]; - indx_tmp = index_n[track] >> low_len[pulse_num1]; - index = index * indx_fact[pulse_num1] + indx_tmp; - - index_n[track - 1] = ( index_n[track - 1] & low_mask[pulse_num0] ) + ( ( index << low_len[pulse_num0] ) & index_mask ); - index = index >> hi_to_low[pulse_num0]; - } - track_num1 = track_num - 1; - pulse_num1 = pulse_num[track_num1]; - index_n[track_num1] = ( ( index_n[track_num1] & low_mask[pulse_num1] ) + ( index << low_len[pulse_num1] ) ) & index_mask; - index = index >> hi_to_low[pulse_num1]; - if ( indx_flag >= track_num ) - { - if ( indx_flag_2 >= 1 ) - { - idxs[0] = index_n[0] & 0xffff; - idxs[1] = ( ( index_n[1] << 8 ) + ( index_n[0] >> 16 ) ) & 0xffff; - idxs[2] = ( index_n[1] >> 8 ) & 0xffff; - idxs[3] = index_n[2] & 0xffff; - idxs[4] = ( ( index_n[3] << 8 ) + ( index_n[2] >> 16 ) ) & 0xffff; - idxs[5] = ( index_n[3] >> 8 ) & 0xffff; - for ( track = 6; track < wordcnt; track++ ) - { - idxs[track] = index & 0xffff; - index = index >> 16; - } - } - else - { - for ( track = 0; track < track_num; track++ ) - { - idxs[track] = index_n[track] & 0xffff; - } - for ( track = track_num; track < wordcnt; track++ ) - { - idxs[track] = index & 0xffff; - index = index >> 16; - } - } - } - else - { - idxs[0] = ( ( index_n[0] << 8 ) + index_n[1] ) & 0xffff; - idxs[1] = ( ( index_n[2] << 8 ) + index_n[3] ) & 0xffff; - for ( track = 2; track < wordcnt; track++ ) - { - idxs[track] = index & 0xffff; - index = index >> 16; - } - } - } - else - { - index = index_n[0]; - for ( track = 1; track < 4; track++ ) - { - pulse_num1 = pulse_num[track]; - index = ( index << index_len[pulse_num1] ) + index_n[track]; - } - for ( track = 0; track < wordcnt; track++ ) - { - idxs[track] = index & 0xffff; - index = index >> 16; - } - } - - return; -} -#endif diff --git a/lib_enc/enc_acelp_tcx_main.c b/lib_enc/enc_acelp_tcx_main.c index 2b5acec57..fc894ba6c 100644 --- a/lib_enc/enc_acelp_tcx_main.c +++ b/lib_enc/enc_acelp_tcx_main.c @@ -39,95 +39,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * enc_acelp_tcx_main() - * - * encoder function for coding ACELP/TCX - *--------------------------------------------------------------------*/ - -void enc_acelp_tcx_main( - Encoder_State *st, /* i/o: encoder state structure */ - const float new_samples[], /* i : new samples */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquant. for subframes*/ - const float lsp_new[M], /* i : LSPs at the end of the frame */ - const float lsp_mid[M], /* i : LSPs at the middle of the frame */ - float bwe_exc_extended[], /* i/o: bandwidth extended excitation */ - float *voice_factors, /* o : voicing factors */ - float pitch_buf[], /* o : floating pitch for each subframe */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - float old_bwe_exc[( PIT16k_MAX + ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2]; /* excitation buffer */ - float *ptr_bwe_exc; /* pointer to BWE excitation signal in the current frame */ - - push_wmops( "enc_acelp_tcx_main" ); - - ptr_bwe_exc = old_bwe_exc + PIT16k_MAX * 2; - - if ( st->last_core == ACELP_CORE ) - { - set_f( old_bwe_exc + PIT16k_MAX * 2, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k ) * 2 ); - mvr2r( st->hBWE_TD->old_bwe_exc, old_bwe_exc, PIT16k_MAX * 2 ); - } - else - { - set_f( old_bwe_exc, 0.f, ( ( L_FRAME16k + 1 ) + L_SUBFR16k + PIT16k_MAX ) * 2 ); - } - - /* Guided ACELP PLC */ - if ( st->hPlcExt ) - { - gPLC_encInfo( st->hPlcExt, st->total_brate, st->bwidth, st->clas, st->coder_type ); - } - - if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) - { - /* Run Core Coder */ - if ( st->tcxonly == 0 ) - { - core_encode_openloop( st, Aw, lsp_new, lsp_mid, pitch_buf, voice_factors, ptr_bwe_exc, vad_hover_flag ); - } - else - { - core_encode_twodiv( st, new_samples, Aw, vad_hover_flag ); - } - - /* Apply non linearity to the SHB excitation */ - if ( st->core == ACELP_CORE && st->igf ) - { - non_linearity( ptr_bwe_exc, bwe_exc_extended, st->hBWE_TD->old_bwe_exc_extended, L_FRAME32k, &st->hBWE_TD->bwe_non_lin_prev_scale, st->coder_type, voice_factors, st->L_frame ); - - /* update the old_BWE_exc memory */ - mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); - } - else - { - set_f( st->hBWE_TD->old_bwe_exc_extended, 0, NL_BUFF_OFFSET ); - set_f( st->hBWE_TD->old_bwe_exc, 0, PIT16k_MAX * 2 ); /* reset old non_linear exc during igf frames */ - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0f; - } - } - else - { - /* Run SID Coder */ - if ( st->core_brate == SID_2k40 ) - { - FdCng_encodeSID( st ); - } - - /* Generate Comfort Noise */ - generate_comfort_noise_enc( st ); - - /* Update Core Encoder */ - core_encode_update_cng( st, st->hFdCngEnc->hFdCngCom->timeDomainBuffer_flt, st->hFdCngEnc->hFdCngCom->A_cng_flt, Aw ); - } - - /* coreSwitching update of Mode 1 parameters in the last frame */ - st->last_coder_type = st->coder_type; - - pop_wmops(); - return; -} -#endif diff --git a/lib_enc/enc_acelpx.c b/lib_enc/enc_acelpx.c index c7fb86512..661cc4b7b 100644 --- a/lib_enc/enc_acelpx.c +++ b/lib_enc/enc_acelpx.c @@ -40,460 +40,3 @@ #include "prot.h" #include "rom_enc.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/* Iterations: nb_pos_ix*16 */ -static void E_ACELP_2pulse_searchx( - const int16_t nb_pos_ix, - const int16_t track_x, - const int16_t track_y, - float *R, - float *ps, - float *alp, - int16_t *ix, - int16_t *iy, - float dn[], - int16_t *dn2, - float cor[], - float sign[] ) -{ - int16_t i; - int16_t x, y, *pos_x, x_save = 0, y_save = 0; - float ps0, alp0, alp1, ps1, alp2, ps2, sq, s, sqk, alpk, *pR, sgnx, *pRx, *pRy, sign_x, sign_y; - - /* x_save=y_save=0 */ - /* eight dn2 max positions per track */ - pos_x = &dn2[track_x << 3]; - /* save these to limit memory searches */ - ps0 = *ps; - alp0 = *alp + 2.0f * R[0]; - - sqk = -1.0F; - alpk = 1.0F; - - x = pos_x[0]; - sgnx = sign[track_y]; - if ( sign[x] < 0 ) - { - sgnx = -sgnx; - } - if ( ( alp0 + ( cor[x] * sign[x] ) + ( cor[track_y] * sign[track_y] ) + ( R[track_y - x] * sgnx ) ) < 0.0F ) - { - sqk = 1.0F; - } - - /* loop track 1 */ - for ( i = 0; i < nb_pos_ix; i++ ) - { - x = pos_x[i]; - sgnx = sign[x]; - /* dn[x] has only nb_pos_ix positions saved */ - ps1 = ps0 + dn[x]; - alp1 = alp0 + 2 * sgnx * cor[x]; - pR = R - x; - - for ( y = track_y; y < L_SUBFR; y += 4 ) - { - ps2 = ps1 + dn[y]; - alp2 = alp1 + 2.0f * sign[y] * ( cor[y] + sgnx * pR[y] ); - sq = ps2 * ps2; - - s = ( alpk * sq ) - ( sqk * alp2 ); - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp2; - y_save = y; - x_save = x; - } - } - } - /* Update numerator */ - *ps = ps0 + dn[x_save] + dn[y_save]; - /* Update denominator */ - *alp = alpk; - - /* Update product of autocorrelation and already fixed pulses. with the - * two newly found ones */ - pRx = R - x_save; - pRy = R - y_save; - sign_x = sign[x_save]; - sign_y = sign[y_save]; - - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] += pRx[i] * sign_x + pRy[i] * sign_y; - } - - *ix = x_save; - *iy = y_save; - if ( ( ( x_save & 3 ) != track_x ) || ( ( y_save & 3 ) != track_y ) ) - { - /* sanity check */ - assert( 0 ); - } - - return; -} - -static void E_ACELP_1pulse_searchx( - int16_t track_x, - int16_t track_y, - float *R, - float *ps, - float *alp, - int16_t *ix, - float dn[], - float cor[], - float sign[] ) -{ - int16_t x, x_save = 0; - float ps0, alp0; - float ps1, sq, sqk; - float alp1, alpk; - float s; - - /* save these to limit memory searches */ - ps0 = *ps; - alp0 = *alp + R[0]; - sqk = -1.0F; - alpk = 1.0F; - - if ( ( alp0 + ( cor[track_x] * sign[track_x] ) ) < 0 ) - { - sqk = 1.0F; - } - - x_save = track_x; - for ( x = track_x; x < L_SUBFR; x += 4 ) - { - ps1 = ps0 + dn[x]; - alp1 = alp0 + 2 * sign[x] * cor[x]; - sq = ps1 * ps1; - s = ( alpk * sq ) - ( sqk * alp1 ); - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp1; - x_save = x; - } - } - - if ( track_y != track_x ) - { - for ( x = track_y; x < L_SUBFR; x += 4 ) - { - ps1 = ps0 + dn[x]; - alp1 = alp0 + 2 * sign[x] * cor[x]; - sq = ps1 * ps1; - s = ( alpk * sq ) - ( sqk * alp1 ); - if ( s > 0.0F ) - { - sqk = sq; - alpk = alp1; - x_save = x; - } - } - } - - *ps = ps0 + dn[x_save]; - *alp = alpk; - *ix = x_save; - - return; -} - - -/* Autocorrelation method for searching pulse positions effectively - * Algorithm is identical to traditional covariance method. */ -void E_ACELP_4tsearchx( - float dn[], - const float cn[], - float Rw[], - float code[], - PulseConfig *config, - int16_t ind[] ) -{ - float sign[L_SUBFR], vec[L_SUBFR]; - float cor[L_SUBFR]; - float R_buf[2 * L_SUBFR - 1], *R; - float dn2[L_SUBFR]; - float psk = 0.0F, ps2k, ps, ps2, alpk, alp = 0.0F; - int16_t codvec[NB_PULSE_MAX]; - int16_t pos_max[4]; - int16_t dn2_pos[8 * 4]; - int16_t ipos[NB_PULSE_MAX]; - float *p0; - int16_t i, j, k, l, st, pos = 0, index, track; - int16_t iPulse; - float val; - float s; - int16_t restpulses; - - alp = config->alp_flt; - for ( k = 0; k < config->nb_pulse; k++ ) - { - codvec[k] = ( k & 3 ); - } - - set_f( cor, 0.0f, L_SUBFR ); - - /* Set up autocorrelation vector */ - R = R_buf + L_SUBFR - 1; - R[0] = Rw[0]; - for ( k = 1; k < L_SUBFR; k++ ) - { - R[k] = R[-k] = Rw[k]; - } - - /* Find sign for each pulse position. */ - acelp_pulsesign( cn, dn, dn2, sign, vec, alp ); - - /* Select the most important 8 position per track according to dn2[]. */ - acelp_findcandidates( dn2, dn2_pos, pos_max, L_SUBFR, NB_TRACK_FCB_4T ); - - /* - * Deep first search: - * ------------------ - * 20 bits (4p): 4 iter x ((4x16)+(8x16)) = 768 tests - * 36 bits (8p): 4 iter x ((1x1)+(4x16)+(8x16)+(8x16)) = 1280 tests - * 52 bits (12p): 3 iter x ((1x1)+(1x1)+(4x16)+(6x16) - * +(8x16)+(8x16)) = 1248 tests - * 64 bits (16p): 2 iter x ((1x1)+(1x1)+(4x16)+(6x16) - * +(6x16)+(8x16)+(8x16)+(8x16)) = 1280 tests - */ - ps2k = -1.0; - alpk = 1000.0; - /*Number of iterations*/ - for ( k = 0; k < config->nbiter; k++ ) - { - /* copy search order from hash-table */ - for ( l = 0; l < config->nb_pulse; l++ ) - { - ipos[l] = tipos[( k * 4 ) + l]; - } - - /* if all tracks do not have equal number of pulses */ - restpulses = config->nb_pulse & 3; - if ( restpulses ) - { - switch ( config->codetrackpos ) - { - case TRACKPOS_FIXED_FIRST: /* fixed track positions, starting from left */ - /* add tracks from left */ - for ( iPulse = 0; iPulse < restpulses; iPulse++ ) - { - ipos[config->nb_pulse - restpulses + iPulse] = iPulse; - } - /* Put the same track on the next position, because the 1-pulse search - * will access it to determine if this could be in any track. */ - ipos[config->nb_pulse] = ipos[config->nb_pulse - 1]; - break; - case TRACKPOS_FIXED_EVEN: /* fixed track positions, odd tracks */ - /* odd tracks, switch order for every iteration */ - ipos[config->nb_pulse - restpulses] = ( k << 1 ) & 2; /* 0 for even k, 2 for odd*/ - ipos[config->nb_pulse - restpulses + 1] = ipos[config->nb_pulse - restpulses] ^ 2; /* 2 for even k, 0 for odd*/ - break; - case TRACKPOS_FIXED_TWO: /* two tracks instead of four */ - /* Put the next track on the next position, because the 1-pulse search - * will access it to determine if this could be in any track. */ - ipos[config->nb_pulse] = ( ipos[config->nb_pulse - 1] + 1 ) & 3; - break; - default: /* one or three free track positions */ - /* copy an extra position from table - 1pulse search will access this */ - ipos[config->nb_pulse] = tipos[( k * 4 ) + config->nb_pulse]; - break; - } - } - if ( config->fixedpulses == 0 ) /* 1100, 11, 1110, 1111, 2211 */ - { - pos = 0; - ps = 0.0F; - alp = 0.0F; - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] = 0; - } - } - else if ( config->fixedpulses == 2 ) /* 2222 and 3322 */ - { - /* --- first stage: fix 2 pulses --- */ - /* index to first non-fixed position */ - pos = 2; - - /* set fixed positions */ - ind[0] = pos_max[ipos[0]]; - ind[1] = pos_max[ipos[1]]; - - /* correlation of fixed part with residual */ - ps = dn[ind[0]] + dn[ind[1]]; - - /* multiplication of autocorrelation with signed fixed pulses */ - /* first pulse */ - p0 = R - ind[0]; - if ( sign[ind[0]] > 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] = *p0; - p0++; - } - } - else - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] = -*p0; - p0++; - } - } - /* second pulse */ - p0 = R - ind[1]; - if ( sign[ind[1]] > 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] += *p0; - p0++; - } - } - else - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] -= *p0; - p0++; - } - } - - /* normalisation contribution of fixed part */ - alp = sign[ind[0]] * cor[ind[0]] + sign[ind[1]] * cor[ind[1]]; - } - else /* if (config->fixedpulses == 4) */ /* 3333 and above */ - { - /* first stage: fix 4 pulses */ - pos = 4; - - ind[0] = pos_max[ipos[0]]; - ind[1] = pos_max[ipos[1]]; - ind[2] = pos_max[ipos[2]]; - ind[3] = pos_max[ipos[3]]; - - /* correlation of fixed part with residual */ - ps = dn[ind[0]] + dn[ind[1]] + dn[ind[2]] + dn[ind[3]]; - - /* multiplication of autocorrelation with signed fixed pulses */ - /* first pulse */ - p0 = R - ind[0]; - if ( sign[ind[0]] > 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] = *p0; - p0++; - } - } - else - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] = -*p0; - p0++; - } - } - /* pulses 1..3 */ - for ( j = 1; j < 4; j++ ) - { - p0 = R - ind[j]; - if ( sign[ind[j]] > 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] += *p0; - p0++; - } - } - else - { - for ( i = 0; i < L_SUBFR; i++ ) - { - cor[i] -= *p0; - p0++; - } - } - } - - /* normalisation contribution of fixed part */ - alp = sign[ind[0]] * cor[ind[0]] + sign[ind[1]] * cor[ind[1]] + sign[ind[2]] * cor[ind[2]] + sign[ind[3]] * cor[ind[3]]; - } - - /* other stages of 2 pulses */ - for ( j = pos, st = 0; j < config->nb_pulse; j += 2, st++ ) - { - if ( ( config->nb_pulse - j ) >= 2 ) - { - /*pair-wise search*/ - - /* Calculate correlation of all possible positions - * of the next 2 pulses with previous fixed pulses. - * Each pulse can have 16 possible positions. */ - - E_ACELP_2pulse_searchx( config->nbpos[st], ipos[j], ipos[j + 1], R, &ps, &alp, &ind[j], &ind[j + 1], dn, dn2_pos, cor, sign ); - } - else - { - /*single pulse search*/ - E_ACELP_1pulse_searchx( ipos[j], ipos[j + 1], R, &ps, &alp, &ind[j], dn, cor, sign ); - } - } - - /* memorise the best codevector */ - ps2 = ps * ps; - s = ( alpk * ps2 ) - ( ps2k * alp ); - if ( s > 0.0F ) - { - ps2k = ps2; - psk = ps; - alpk = alp; - for ( i = 0; i < config->nb_pulse; i++ ) - { - codvec[i] = ind[i]; - } - } - } - - /* Store weighted energy of code, build the codeword and index of codevector. */ - set_f( code, 0, L_SUBFR ); - set_s( ind, -1, NPMAXPT * 4 ); - - for ( k = 0; k < config->nb_pulse; k++ ) - { - i = codvec[k]; /* read pulse position */ - val = sign[i]; /* read sign */ - - index = i / 4; /* pos of pulse (0..15) */ - track = i % 4; - if ( val * psk > 0 ) - { - code[i] += 1.0f; - codvec[k] += ( 2 * L_SUBFR ); - } - else - { - code[i] -= 1.0f; - index += 16; - } - - i = track * NPMAXPT; - while ( ind[i] >= 0 ) - { - i++; - } - - ind[i] = index; - } - - return; -} -#endif diff --git a/lib_enc/enc_amr_wb.c b/lib_enc/enc_amr_wb.c index eae23b150..0fe8682da 100644 --- a/lib_enc/enc_amr_wb.c +++ b/lib_enc/enc_amr_wb.c @@ -40,201 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * encod_amr_wb() - * - * Encode excitation signal in AMR-WB IO mode - *-------------------------------------------------------------------*/ - -void encod_amr_wb( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : 12k8 Lp coefficient */ - const float *res, /* i : residual signal */ - float *syn, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - int16_t hf_gain[NB_SUBFR], /* o : decoded HF gain */ - const float *speech16k /* i : input speech @16kHz */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float xn2[L_SUBFR]; /* Target vector for codebook search */ - float cn[L_SUBFR]; /* Target vector in residual domain */ - float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float code[L_SUBFR]; /* Fixed codebook excitation */ - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float y2[L_SUBFR]; /* Filtered algebraic excitation */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - int16_t i, i_subfr; /* tmp variables */ - int16_t T_op[3]; /* pitch period for quantization */ - int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ - int16_t T0_min, T0_max; /* pitch variables */ - float *pt_pitch; /* pointer to floating pitch buffer */ - float g_corr[6]; /* ACELP correl, values + gain pitch */ - int16_t clip_gain; /* LSF clip gain */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ - int16_t unbits = 0; - float norm_gain_code; - int16_t pitch_limit_flag; - int16_t lp_select, lp_flag; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - pitch_limit_flag = 0; /* always restrained pitch Q range in IO mode */ - T0_max = PIT_MAX; - T0_min = PIT_MIN; - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; - - mvs2s( st->pitch, T_op, 2 ); - if ( T_op[0] <= PIT_MIN ) - { - T_op[0] *= 2; - } - - if ( T_op[1] <= PIT_MIN ) - { - T_op[1] *= 2; - } - - st->acelp_cfg.fcb_mode = 0; /* flag used in inov_encode() */ - - /*-----------------------------------------------------------------* - * Select LP filtering flag - *-----------------------------------------------------------------*/ - - if ( st->core_brate < ACELP_11k60 ) - { - lp_flag = LOW_PASS; - } - else - { - lp_flag = NORMAL_OPERATION; - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * Bandwidth expansion of A(z) filter coefficients - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, cn, h1 ); - - /*----------------------------------------------------------------* - * Close-loop pitch search and quantization - * Adaptive exc. construction - *----------------------------------------------------------------*/ - - *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 1, L_FRAME, -1, &pitch_limit_flag, i_subfr, exc, L_SUBFR, T_op, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, 0 /*tdm_Pitch_reuse_flag*/, NULL /*tdm_Pri_pitch_buf*/ ); - - /*-----------------------------------------------------------------* - * Find adaptive exitation - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, 0, xn, st->clip_var ); - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation, codebook target computation - *-----------------------------------------------------------------*/ - - lp_select = lp_filt_exc_enc( MODE1, -1, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, L_FRAME, g_corr, clip_gain, &gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 1, L_FRAME, st->last_L_frame, -1, -1, 0, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &unbits, L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain encoding - * Pitch gain clipping test - * Estimate spectrum tilt and voicing - *-----------------------------------------------------------------*/ - - gain_enc_amr_wb( hBstr, xn, y1, y2, code, st->core_brate, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain, st->hAmrwb_IO->past_qua_en ); - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1]; - - /*-----------------------------------------------------------------* - * Find the total excitation - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn[] - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - /*-----------------------------------------------------------------* - * HF gain modification factors at 23.85 kbps - *-----------------------------------------------------------------*/ - - if ( st->core_brate == ACELP_23k85 ) - { - if ( st->input_Fs >= 16000 ) - { - hf_cod( st->core_brate, &speech16k[i_subfr * L_SUBFR16k / L_SUBFR], p_Aq, &exc[i_subfr], &syn[i_subfr], &st->hAmrwb_IO->seed2_enc, st->hAmrwb_IO->mem_hp400_enc, st->hAmrwb_IO->mem_syn_hf_enc, st->hAmrwb_IO->mem_hf_enc, st->hAmrwb_IO->mem_hf2_enc, &st->hVAD->hangover_cnt, &st->hAmrwb_IO->gain_alpha, &hf_gain[i_subfr / L_SUBFR] ); - } - - push_indice( hBstr, IND_HF_GAIN_MODIFICATION, hf_gain[i_subfr / L_SUBFR], 4 ); - } - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - pt_pitch++; - } - - return; -} -#endif diff --git a/lib_enc/enc_gain.c b/lib_enc/enc_gain.c index 37ef9d3bd..a82d2075a 100644 --- a/lib_enc/enc_gain.c +++ b/lib_enc/enc_gain.c @@ -41,233 +41,3 @@ #include "rom_enc.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/* - * E_GAIN_norm_corr_interpolate - * - * Parameters: - * x I: input vector - * frac I: fraction (-4..+3) - * - * Function: - * Interpolating the normalized correlation - * - * Returns: - * interpolated value - */ -#ifndef IVAS_FLOAT_FIXED -static float E_GAIN_norm_corr_interpolate( - float *x, - int16_t frac ) -{ - float s, *x1, *x2; - const float *c1, *c2; - - if ( frac < 0 ) - { - frac += 4; - x--; - } - - x1 = &x[0]; - x2 = &x[1]; - c1 = &E_ROM_inter4_1[frac]; - c2 = &E_ROM_inter4_1[4 - frac]; - s = x1[0] * c1[0] + x2[0] * c2[0]; - s += x1[-1] * c1[4] + x2[1] * c2[4]; - s += x1[-2] * c1[8] + x2[2] * c2[8]; - s += x1[-3] * c1[12] + x2[3] * c2[12]; - - return s; -} - -static float E_GAIN_norm_corr_interpolate6( - float *x, - int16_t frac ) -{ - float s, *x1, *x2; - const float *c1, *c2; - - if ( frac < 0 ) - { - frac += 6; - x--; - } - - x1 = &x[0]; - x2 = &x[1]; - c1 = &E_ROM_inter6_1[frac]; - c2 = &E_ROM_inter6_1[6 - frac]; - s = x1[0] * c1[0] + x2[0] * c2[0]; - s += x1[-1] * c1[6] + x2[1] * c2[6]; - s += x1[-2] * c1[12] + x2[2] * c2[12]; - s += x1[-3] * c1[18] + x2[3] * c2[18]; - - return s; -} -#endif - -/* - * E_GAIN_closed_loop_search - * - * Parameters: - * exc I: excitation buffer - * xn I: target signal - * h I: weighted synthesis filter impulse response - * dn I: residual domain target signal - * t0_min I: minimum value in the searched range - * t0_max I: maximum value in the searched range - * pit_frac O: chosen fraction - * i_subfr I: flag to first subframe - * t0_fr2 I: minimum value for resolution 1/2 - * t0_fr1 I: minimum value for resolution 1 - * - * Function: - * Find the closed loop pitch period with 1/4 subsample resolution. - * - * Returns: - * chosen integer pitch lag - */ -int16_t E_GAIN_closed_loop_search( - float exc[], - float xn[], - float h[], - int16_t t0_min, - int16_t t0_min_frac, - int16_t t0_max, - int16_t t0_max_frac, - const int16_t t0_min_max_res, - int16_t *pit_frac, - int16_t *pit_res, - const int16_t pit_res_max, - const int16_t i_subfr, - const int16_t pit_min, - const int16_t pit_fr2, - const int16_t pit_fr1, - const int16_t L_subfr ) -{ - float corr_v[32 + 2 * L_INTERPOL1 + 1]; - float cor_max, max_val, temp; - float *corr; - int16_t i, fraction, frac1, frac2, step; - int16_t t0, t_min, t_max; - - /* Find interval to compute normalized correlation */ - if ( t0_min_frac > 0 ) - { - t0_min++; - } - t_min = t0_min - L_INTERPOL1; - t_max = t0_max + L_INTERPOL1; - - /* allocate memory to normalized correlation vector */ - corr = &corr_v[-t_min]; /* corr[t_min..t_max] */ - - /* Compute normalized correlation between target and filtered excitation */ - norm_corr( exc, xn, h, t_min, t_max, corr, L_subfr ); - - /* find integer pitch */ - max_val = corr[t0_min]; - t0 = t0_min; - for ( i = t0_min + 1; i <= t0_max; i++ ) - { - if ( corr[i] >= max_val ) - { - max_val = corr[i]; - t0 = i; - } - } - - /* If first subframe and t0 >= pit_fr1, do not search fractionnal pitch */ - if ( ( i_subfr == 0 ) & ( t0 >= pit_fr1 ) ) - { - *pit_frac = 0; - *pit_res = 1; - return ( t0 ); - } - - /* - * Search fractionnal pitch - * Test the fractions around t0 and choose the one which maximizes - * the interpolated normalized correlation. - */ - - if ( t0_min_max_res == ( pit_res_max >> 1 ) ) - { - t0_min_frac = t0_min_frac << 1; - t0_max_frac = t0_max_frac << 1; - } - - step = 1; - frac1 = -( pit_res_max - 1 ); - frac2 = pit_res_max - 1; - if ( ( ( i_subfr == 0 ) & ( t0 >= pit_fr2 ) ) | ( pit_fr2 <= pit_min ) ) - { - step = 2; - frac1 = -( pit_res_max - 2 ); - frac2 = pit_res_max - 2; - } - - if ( ( t0 == t0_min ) && ( t0_min_frac == 0 ) ) - { - frac1 = t0_min_frac; - } - else if ( ( t0 == t0_min ) && ( frac1 + pit_res_max < t0_min_frac ) ) - { - frac1 = t0_min_frac - pit_res_max; - } - if ( t0 == t0_max ) - { - frac2 = t0_max_frac; - } - assert( frac1 <= 0 && frac2 >= 0 && frac2 > frac1 ); - if ( pit_res_max == 6 ) - { - cor_max = E_GAIN_norm_corr_interpolate6( &corr[t0], frac1 ); - fraction = frac1; - for ( i = ( frac1 + step ); i <= frac2; i += step ) - { - temp = E_GAIN_norm_corr_interpolate6( &corr[t0], i ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - } - } - } - else - { - cor_max = E_GAIN_norm_corr_interpolate( &corr[t0], frac1 ); - fraction = frac1; - for ( i = ( frac1 + step ); i <= frac2; i += step ) - { - temp = E_GAIN_norm_corr_interpolate( &corr[t0], i ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - } - } - } - - /* limit the fraction value */ - if ( fraction < 0 ) - { - fraction += pit_res_max; - t0 -= 1; - } - if ( ( ( i_subfr == 0 ) & ( t0 >= pit_fr2 ) ) | ( pit_fr2 <= pit_min ) ) - { - *pit_res = pit_res_max >> 1; - *pit_frac = fraction >> 1; - } - else - { - *pit_res = pit_res_max; - *pit_frac = fraction; - } - - return ( t0 ); -} -#endif diff --git a/lib_enc/enc_gen_voic.c b/lib_enc/enc_gen_voic.c index 7339c7e7c..0fe8682da 100644 --- a/lib_enc/enc_gen_voic.c +++ b/lib_enc/enc_gen_voic.c @@ -40,287 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * encod_gen_voic() - * - * Encode excitation signal - *-------------------------------------------------------------------*/ - -void encod_gen_voic( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *syn, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - int16_t *unbits, /* i/o: number of unused bits */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float xn2[L_SUBFR]; /* Target vector for codebook search */ - float cn[L_SUBFR]; /* Target vector in residual domain */ - float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float code[L_SUBFR]; /* Fixed codebook excitation */ - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float y2[L_SUBFR]; /* Filtered algebraic excitation */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - int16_t i, i_subfr; /* tmp variables */ - int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ - int16_t T0_min, T0_max; /* pitch variables */ - float *pt_pitch; /* pointer to floating pitch buffer */ - float g_corr[6]; /* ACELP correl, values + gain pitch */ - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - int16_t clip_gain; /* LSF clip gain */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ - float error; - float gain_preQ; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - int16_t unbits_PI; /* number of unused bits for EVS_PI */ - float norm_gain_code; - int16_t pitch_limit_flag; - int16_t harm_flag_acelp; - int16_t lp_select, lp_flag; - int16_t L_frame; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - gain_pit = 0; - gain_code = 0; - gain_preQ = 0; - unbits_PI = 0; - error = 0.0f; - - L_frame = st->L_frame; - - if ( L_frame == L_FRAME ) - { - T0_max = PIT_MAX; - T0_min = PIT_MIN; - } - else /* L_frame == L_FRAME16k */ - { - T0_max = PIT16k_MAX; - T0_min = PIT16k_MIN; - } - - lp_flag = st->acelp_cfg.ltf_mode; - *unbits = 0; - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; - gain_preQ = 0; - set_f( code_preQ, 0, L_SUBFR ); - - /* set and write harmonicity flag */ - harm_flag_acelp = 0; - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && st->coder_type == GENERIC ) - { - if ( st->last_harm_flag_acelp > 2 ) - { - harm_flag_acelp = 1; - } - - push_indice( hBstr, IND_HARM_FLAG_ACELP, harm_flag_acelp, 1 ); - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac_flt, xn, cn, h1 ); - - /*----------------------------------------------------------------* - * Close-loop pitch search and quantization - * Adaptive exc. construction - *----------------------------------------------------------------*/ - - *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 0, L_frame, st->coder_type, &pitch_limit_flag, i_subfr, exc, L_SUBFR, st->pitch, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, L_frame, L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); - - /*-----------------------------------------------------------------* - * Find adaptive exitation - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); - - if ( st->coder_type == INACTIVE ) - { - /* in case of AVQ inactive, limit the gain to 0.65 */ - clip_gain = 2; - } - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation, codebook target computation - *-----------------------------------------------------------------*/ - - lp_select = lp_filt_exc_enc( MODE1, st->coder_type, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - - /* update long-term pitch gain for speech/music classifier */ - st->hSpMusClas->lowrate_pitchGain_flt = 0.9f * st->hSpMusClas->lowrate_pitchGain_flt + 0.1f * gain_pit; - - /*-----------------------------------------------------------------* - * Transform-domain contribution (active frames) - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC && st->coder_type != INACTIVE ) - { - transf_cdbk_enc( st, harm_flag_acelp, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); - } - - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, st->coder_type, st->bwidth, st->sharpFlag, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - if ( st->core_brate <= ACELP_8k00 ) - { - gain_enc_lbr( hBstr, st->acelp_cfg.gains_mode, st->coder_type, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, L_SUBFR ); - } - else if ( st->core_brate > ACELP_32k ) - { - gain_enc_SQ( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - else - { - gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, i_subfr, -1, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - - if ( st->Opt_SC_VBR ) - { - if ( st->hSC_VBR->last_ppp_mode == 1 ) - { - /* SC-VBR - all other st->clip_var values will be updated even in a PPP frame */ - st->clip_var[1] = gain_pit; - } - } - - /*-----------------------------------------------------------------* - * update LP-filtered gains for the case of frame erasures - *-----------------------------------------------------------------*/ - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Transform-domain contribution (inactive frames) - *-----------------------------------------------------------------*/ - - if ( st->total_brate >= MAX_GSC_INACTIVE_BRATE && st->coder_type == INACTIVE ) - { - transf_cdbk_enc( st, 0, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); - } - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - ( gain_pit * y1[L_SUBFR - 1] ) - ( gain_code * y2[L_SUBFR - 1] ); - - /*-----------------------------------------------------------------* - * Construct adaptive part of the excitation - * Save the non-enhanced excitation for FEC_exc - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Add the ACELP pre-quantizer contribution - *-----------------------------------------------------------------*/ - - if ( gain_preQ != 0 ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] += gain_preQ * code_preQ[i]; - exc[i + i_subfr] += gain_preQ * code_preQ[i]; - } - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - pt_pitch++; - } - - /* write reserved bits */ - while ( unbits_PI > 0 ) - { - i = min( unbits_PI, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - unbits_PI -= i; - } - - /* SC-VBR */ - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->prev_ppp_gain_pit = gain_pit; - st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code_flt; - } - - return; -} -#endif diff --git a/lib_enc/enc_gen_voic_rf.c b/lib_enc/enc_gen_voic_rf.c index 549a16ded..33df891b8 100644 --- a/lib_enc/enc_gen_voic_rf.c +++ b/lib_enc/enc_gen_voic_rf.c @@ -41,361 +41,3 @@ #include "rom_com.h" #include "wmc_auto.h" #include "prot_fx.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * reset_rf_indices() - * - * Initialization of oartial redundancy coding - *-------------------------------------------------------------------*/ - -void reset_rf_indices( - RF_ENC_HANDLE hRF, /* i/o: RF state structure */ - const int16_t L_frame, /* i : frame length */ - int16_t *rf_target_bits_write ) -{ - int16_t i, j; - - if ( hRF != NULL ) - { - hRF->rf_frame_type = 0; /* since this function is called every frame this will happen even for a SID frame, hence treating it as GSC frame, i.e no RF encoding */ - - hRF->rf_mem_w0_flt = 0; - set_f( hRF->rf_clip_var_flt, 0, 6 ); - hRF->rf_tilt_code_flt = 0; - set_f( hRF->rf_mem_syn2_flt, 0, M ); - set_f( hRF->rf_dispMem, 0, 8 ); - hRF->rf_gc_threshold_flt = 0; - set_f( hRF->rf_tilt_buf_flt, 0, NB_SUBFR16k ); - - hRF->rf_target_bits = 0; - *rf_target_bits_write = 0; - hRF->rf_tcxltp_pitch_int_past = L_frame; - hRF->rf_last_tns_active = 0; - hRF->rf_second_last_tns_active = 0; - hRF->rf_second_last_core = 0; - - for ( i = 0; i < MAX_RF_FEC_OFFSET; i++ ) - { - hRF->rf_indx_frametype[i] = RF_NO_DATA; - hRF->rf_targetbits_buff[i] = 6; /* rf_mode: 1, rf_frame_type: 3, and fec_offset: 2 */ - hRF->rf_indx_lsf[i][0] = 0; - hRF->rf_indx_lsf[i][1] = 0; - hRF->rf_indx_lsf[i][2] = 0; - hRF->rf_indx_EsPred[i] = 0; - hRF->rf_indx_nelp_fid[i] = 0; - hRF->rf_indx_nelp_iG1[i] = 0; - hRF->rf_indx_nelp_iG2[i][0] = 0; - hRF->rf_indx_nelp_iG2[i][1] = 0; - - for ( j = 0; j < NB_SUBFR16k; j++ ) - { - hRF->rf_indx_ltfMode[i][j] = 0; - hRF->rf_indx_pitch[i][j] = 0; - hRF->rf_indx_fcb[i][j] = 0; - hRF->rf_indx_gain[i][j] = 0; - } - - hRF->rf_clas[i] = UNVOICED_CLAS; - hRF->rf_gain_tcx[i] = 0; - hRF->rf_tcxltp_param[i] = 0; - - hRF->rf_indx_tbeGainFr[i] = 0; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * coder_acelp_rf() - * - * Encode excitation signal (partial redundancy) - *-------------------------------------------------------------------*/ - -void coder_acelp_rf( - const int16_t target_bits, /* i : target bits */ - const float speech[], /* i : speech[-M..lg] */ - const int16_t coder_type, /* i : coding type */ - const int16_t rf_frame_type, /* i : rf_frame_type */ - const float A[], /* i : coefficients 4xAz[M+1] */ - const float Aq[], /* i : coefficients 4xAz_q[M+1] */ - const float voicing[], /* i : open-loop LTP gain */ - const int16_t T_op[], /* i : open-loop LTP lag */ - const float stab_fac, /* i : LP stability factor */ - Encoder_State *st, /* i/o: coder memory state */ - ACELP_config *acelp_cfg, /* i/o: configuration of the ACELP */ - float *exc_rf, /* i/o: pointer to RF excitation */ - float *syn_rf /* i/o: pointer to RF synthesis */ -) -{ - int16_t i, i_subfr, nSubfr; - int16_t T0, T0_frac, T0_min, T0_min_frac, T0_max, T0_max_frac, T0_res; - float Es_pred_rf; - float gain_pit, gain_code, voice_fac; - float prev_gain_pit; - ACELP_CbkCorr g_corr; - float g_corr2[6]; - const float *p_A, *p_Aq; - float code[L_SUBFR]; - float xn[L_SUBFR], cn[L_SUBFR], h1[L_SUBFR]; - float xn2[L_SUBFR], y1[L_SUBFR], y2[L_SUBFR]; - float res_save; - float exc2[L_SUBFR]; - float exc_nelp[L_FRAME]; - float syn2[L_FRAME16k]; - float past_gcode, gain_inov; - int16_t clip_gain; - float gain_code2; - float code2[L_SUBFR]; - float y22[L_SUBFR]; - int16_t lp_select; - int16_t *prm_rf; - - RF_ENC_HANDLE hRF = st->hRF; - - /*-----------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------------*/ - past_gcode = 0; - gain_inov = 0; - T0 = 0; - T0_res = 0; - T0_frac = 0; - gain_pit = 0; - gain_code = 0; - voice_fac = 0; - prev_gain_pit = 0; - Es_pred_rf = 0; - set_f( code, 0.0f, L_SUBFR ); - - /*-----------------------------------------------------------------------* - * Configure ACELP partial copy * - *-----------------------------------------------------------------------*/ - - BITS_ALLOC_config_acelp( target_bits, rf_frame_type, &( hRF->acelp_cfg_rf ), 0, st->nb_subfr ); - - /* Reset phase dispersion */ - if ( st->last_core > ACELP_CORE ) - { - set_zero( hRF->rf_dispMem, 8 ); - } - - /*---------------------------------------------------------------* - * Calculation of LP residual (filtering through A[z] filter) - *---------------------------------------------------------------*/ - - calc_residu( speech, exc_rf, Aq, st->L_frame ); - - /*------------------------------------------------------------------------* - * Find and quantize mean_ener_code for gain quantizer * - *------------------------------------------------------------------------*/ - - Es_pred_rf = 0; - if ( acelp_cfg->nrg_mode > 0 && rf_frame_type != RF_NELP ) - { - Es_pred_enc( &Es_pred_rf, &hRF->rf_indx_EsPred[0], st->L_frame, L_SUBFR, exc_rf, voicing, acelp_cfg->nrg_bits, acelp_cfg->nrg_mode > 1 ); - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_A = A; - p_Aq = Aq; - - res_save = exc_rf[0]; - nSubfr = 0; - - for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) - { - if ( rf_frame_type != RF_NELP ) - { - /* Restore exc[i_subfr] and save next exc[L_SUBFR+i_subfr] */ - exc_rf[i_subfr] = res_save; - res_save = exc_rf[L_SUBFR + i_subfr]; - - /*--------------------------------------------------------------------------* - * Find target for pitch search (xn[]), target for innovation search (cn[]) * - * and impulse response of the weighted synthesis filter (h1[]). * - *--------------------------------------------------------------------------*/ - - find_targets( speech, &syn_rf[i_subfr - M], i_subfr, &( hRF->rf_mem_w0_flt ), p_Aq, exc_rf, L_SUBFR, p_A, st->preemph_fac_flt, xn, cn, h1 ); - } - - /* full frame nelp partial copy encoding */ - if ( rf_frame_type == RF_NELP ) - { - if ( i_subfr == 0 ) - { - nelp_encoder( st, exc_rf, exc_nelp, 0 ); - } - mvr2r( &exc_nelp[i_subfr], exc2, L_SUBFR ); - mvr2r( &exc_nelp[i_subfr], exc_rf, L_SUBFR ); - } - else - { - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, voicing, i_subfr, coder_type, xn, hRF->rf_clip_var_flt ); - - /*-----------------------------------------------------------------* - * - find unity gain pitch excitation (adaptive codebook entry) * - * with fractional interpolation. * - * - find filtered pitch exc. y1[]=exc[] convolved with h1[]) * - * - compute pitch gain1 * - *-----------------------------------------------------------------*/ - - if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] == 0 ) - { - gain_pit = prev_gain_pit; - } - - if ( acelp_cfg->ltp_bits != 0 ) - { - prm_rf = &hRF->rf_indx_pitch[0][nSubfr]; - - /* Adaptive Codebook (GC and VC) */ - Mode2_pit_encode( acelp_cfg->ltp_mode, i_subfr, &prm_rf, &exc_rf[i_subfr], T_op, &T0_min, &T0_min_frac, &T0_max, &T0_max_frac, &T0, &T0_frac, &T0_res, h1, xn, st->pit_min, st->pit_fr1, st->pit_fr1b, st->pit_fr2, st->pit_max, st->pit_res_max ); - - /* find ACB excitation */ - if ( T0_res == ( st->pit_res_max >> 1 ) ) /* st->pit_res_max is 4 for 12.8kHz core */ - { - pred_lt4_flt( &exc_rf[i_subfr], &exc_rf[i_subfr], T0, T0_frac << 1, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - else - { - pred_lt4_flt( &exc_rf[i_subfr], &exc_rf[i_subfr], T0, T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - } - - - /* filter adaptive codebook */ - lp_select = lp_filt_exc_enc( MODE2, ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] > 0 ) ? ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] ) : ( 100 ), i_subfr, exc_rf, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr2, clip_gain, &( gain_pit ), &( acelp_cfg->ltf_mode ) ); - - if ( acelp_cfg->ltf_mode == NORMAL_OPERATION ) - { - hRF->rf_indx_ltfMode[0][nSubfr] = lp_select; - } - - g_corr.y1y1_flt = g_corr2[0]; - g_corr.xy1_flt = -0.5f * ( g_corr2[1] - 0.01f ) + 0.01f; - } - else - { - gain_pit = 0.f; - g_corr.xy1_flt = 0.f; - g_corr.y1y1_flt = 0.f; - set_zero( y1, L_SUBFR ); - set_zero( exc_rf + i_subfr, L_SUBFR ); - T0 = L_SUBFR; - T0_frac = 0; - T0_res = 1; - } - - /*----------------------------------------------------------------------* - * Encode the algebraic innovation * - *----------------------------------------------------------------------*/ - - if ( acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR] >= 0 ) - { - prm_rf = &hRF->rf_indx_fcb[0][nSubfr]; - E_ACELP_innovative_codebook( exc_rf, T0, T0_frac, T0_res, gain_pit, hRF->rf_tilt_code_flt, acelp_cfg, i_subfr, p_Aq, h1, xn, cn, y1, y2, st->acelp_autocorr, &prm_rf, code, st->L_frame, st->last_L_frame, st->total_brate ); - } - else - { - set_f( code, 0.0f, L_SUBFR ); - set_f( y2, 0.0f, L_SUBFR ); - } - - if ( i_subfr < ( st->L_frame - L_SUBFR ) ) - { - E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); - g_corr.y2y2_flt = 0.01F + g_corr2[2]; - g_corr.xy2_flt = 0.01F + -0.5f * g_corr2[3]; - g_corr.y1y2_flt = 0.01F + 0.5f * g_corr2[4]; - - g_corr.xx_flt = 0.01F + dotp( xn, xn, L_SUBFR ); - - /*----------------------------------------------------------------------* - * Add Gaussian excitation * - *----------------------------------------------------------------------*/ - - gain_code2 = 0.f; - set_zero( code2, L_SUBFR ); - set_zero( y22, L_SUBFR ); - - /*----------------------------------------------------------* - * - Compute the fixed codebook gain * - * - quantize fixed codebook gain * - *----------------------------------------------------------*/ - - if ( acelp_cfg->gains_mode[i_subfr / L_SUBFR] != 0 ) - { - prm_rf = &hRF->rf_indx_gain[0][nSubfr]; - encode_acelp_gains( code, acelp_cfg->gains_mode[i_subfr / L_SUBFR], Es_pred_rf, clip_gain, &g_corr, &gain_pit, &gain_code, &prm_rf, &past_gcode, &gain_inov, L_SUBFR, code2, &gain_code2, st->flag_noisy_speech_snr ); - } - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, hRF->rf_clip_var_flt ); - - /*----------------------------------------------------------* - * - voice factor (for codebook tilt sharpening) * - *----------------------------------------------------------*/ - - hRF->rf_tilt_code_flt = est_tilt( exc_rf + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, acelp_cfg->voice_tilt ); - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hRF->rf_mem_w0_flt = xn[L_SUBFR - 1] - gain_pit * y1[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; - - /*-------------------------------------------------------* - * - Find the total excitation. * - *-------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i] = gain_pit * exc_rf[i + i_subfr]; - exc2[i] += gain_code2 * code2[i]; - exc_rf[i + i_subfr] = exc2[i] + gain_code * code[i]; - } - - /*---------------------------------------------------------* - * Enhance the excitation * - *---------------------------------------------------------*/ - - enhancer( MODE2, -1, acelp_cfg->fixed_cdk_index[i_subfr / L_SUBFR], 0, coder_type, st->L_frame, voice_fac, stab_fac, past_gcode, gain_inov, &hRF->rf_gc_threshold_flt, code, exc2, gain_pit, hRF->rf_dispMem ); - } - } - - if ( ( i_subfr < ( st->L_frame - L_SUBFR ) ) || ( rf_frame_type != RF_NELP ) ) - { - /*----------------------------------------------------------* - * - compute the synthesis speech * - *----------------------------------------------------------*/ - - syn_filt( p_Aq, M, exc2, &syn2[i_subfr], L_SUBFR, hRF->rf_mem_syn2_flt, 1 ); - - syn_filt( p_Aq, M, &exc_rf[i_subfr], &syn_rf[i_subfr], L_SUBFR, &syn_rf[i_subfr - M], 0 ); - - /*----------------------------------------------------------* - * Updates * - *----------------------------------------------------------*/ - - p_A += ( M + 1 ); - p_Aq += ( M + 1 ); - nSubfr++; - - /* copy current gain for next subframe use, in case there is no explicit encoding */ - prev_gain_pit = gain_pit; - } - - } /* end of subframe loop */ - - return; -} -#endif diff --git a/lib_enc/enc_higher_acelp.c b/lib_enc/enc_higher_acelp.c index c97dbfd40..a01b229ff 100644 --- a/lib_enc/enc_higher_acelp.c +++ b/lib_enc/enc_higher_acelp.c @@ -45,348 +45,3 @@ /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void find_cn( const float xn[], const float Ap[], const float *p_Aq, float cn[] ); - - -/*-----------------------------------------------------------------* - * transf_cdbk_enc() - * - * Transform domain contribution encoding - *-----------------------------------------------------------------*/ - -void transf_cdbk_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t harm_flag_acelp, /* i : harmonic flag for higher rates ACELP */ - const int16_t i_subfr, /* i : subframe index */ - float cn[], /* i/o: target vector in residual domain */ - float exc[], /* i/o: pointer to excitation signal frame */ - const float *p_Aq, /* i : 12k8 Lp coefficient */ - const float Ap[], /* i : weighted LP filter coefficients */ - const float h1[], /* i : weighted filter input response */ - float xn[], /* i/o: target vector */ - float xn2[], /* i/o: target vector for innovation search */ - float y1[], /* i/o: zero-memory filtered adaptive excitation */ - const float y2[], /* i : zero-memory filtered innovative excitation */ - const float Es_pred, /* i : predicited scaled innovation energy */ - float *gain_pit, /* i/o: adaptive excitation gain */ - const float gain_code, /* i : innovative excitation gain */ - float g_corr[], /* o : ACELP correlation values */ - const int16_t clip_gain, /* i : adaptive gain clipping flag */ - float *gain_preQ, /* o : prequantizer excitation gain */ - float code_preQ[], /* o : prequantizer excitation */ - int16_t *unbits /* o : number of AVQ unused bits */ -) -{ - int16_t i, index, nBits, Nsv; - float x_in[L_SUBFR], x_tran[L_SUBFR], temp; - int16_t x_norm[L_SUBFR + L_SUBFR / WIDTH_BAND]; - float corr, ener; - int16_t nq[L_SUBFR / WIDTH_BAND]; - int16_t avq_bit_sFlag; - int16_t trgtSvPos; - - avq_bit_sFlag = 0; - if ( st->element_mode > EVS_MONO ) - { - avq_bit_sFlag = 1; - } - - /*--------------------------------------------------------------* - * Set bit-allocation - *--------------------------------------------------------------*/ - - Nsv = 8; - nBits = st->acelp_cfg.AVQ_cdk_bits[i_subfr / L_SUBFR]; - - /* increase # of AVQ allocated bits by unused bits from the previous subframe */ - nBits += ( *unbits ); - - /*--------------------------------------------------------------* - * Compute/Update target - * For inactive frame, find target in residual domain - * Deemphasis - *--------------------------------------------------------------*/ - - if ( st->coder_type == INACTIVE ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - x_tran[i] = xn[i] - *gain_pit * y1[i] - gain_code * y2[i]; - } - - find_cn( x_tran, Ap, p_Aq, x_in ); - } - else - { - updt_tar( cn, x_in, &exc[i_subfr], *gain_pit, L_SUBFR ); - } - - deemph( x_in, FAC_PRE_AVQ, L_SUBFR, &st->mem_deemp_preQ ); - - /*--------------------------------------------------------------* - * DCT-II - *--------------------------------------------------------------*/ - - if ( st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp ) - { - mvr2r( x_in, x_tran, L_SUBFR ); - } - else - { - edct2( L_SUBFR, -1, x_in, x_tran, ip_edct2_64, w_edct2_64 ); - } - - /*--------------------------------------------------------------* - * Split algebraic vector quantizer based on RE8 lattice - *--------------------------------------------------------------*/ - - AVQ_cod( x_tran, x_norm, nBits, Nsv ); - - /*--------------------------------------------------------------* - * Find prequantizer excitation gain - * Quantize the gain - *--------------------------------------------------------------*/ - - corr = 0; - ener = 1e-6f; - - for ( i = 0; i < Nsv * 8; i++ ) - { - corr += x_tran[i] * (float) x_norm[i]; - ener += (float) x_norm[i] * (float) x_norm[i]; - } - - *gain_preQ = corr / ener; - - if ( st->coder_type == INACTIVE ) - { - *gain_preQ /= gain_code; - - if ( st->core_brate > 56000 ) - { - index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT_64k, G_AVQ_DELTA_INACT_64k, ( 1 << G_AVQ_BITS ) ); - } - else if ( st->core_brate > 42000 ) - { - index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT_48k, G_AVQ_DELTA_INACT_48k, ( 1 << G_AVQ_BITS ) ); - } - else - { - index = usquant( *gain_preQ, gain_preQ, G_AVQ_MIN_INACT, G_AVQ_DELTA_INACT, ( 1 << G_AVQ_BITS ) ); - } - - *gain_preQ *= gain_code; - } - else - { - if ( Es_pred < 0 ) - { - temp = (float) ( 0.25f * fabs( Es_pred ) ); - } - else - { - temp = Es_pred; - } - *gain_preQ /= temp; - - if ( st->core_brate > ACELP_24k40 && st->core_brate <= 42000 ) - { - index = gain_quant( gain_preQ, 0.1f * G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); - } - else - { - index = gain_quant( gain_preQ, G_AVQ_MIN, G_AVQ_MAX, G_AVQ_BITS ); - } - *gain_preQ *= temp; - } - - push_indice( st->hBstr, IND_AVQ_GAIN, index, G_AVQ_BITS ); - - /*--------------------------------------------------------------* - * Encode and multiplex subvectors into bitstream - *--------------------------------------------------------------*/ - - trgtSvPos = Nsv - 1; - if ( avq_bit_sFlag && nBits > 85 && !harm_flag_acelp && ( st->coder_type == GENERIC || st->coder_type == TRANSITION || st->coder_type == INACTIVE ) ) - { - trgtSvPos = 2; - avq_bit_sFlag = 2; - } - - AVQ_encmux( st->hBstr, -1, x_norm, &nBits, Nsv, nq, avq_bit_sFlag, trgtSvPos ); - - /* save # of AVQ unused bits for next subframe */ - *unbits = nBits; - - /* at the last subframe, write AVQ unused bits */ - if ( i_subfr == 4 * L_SUBFR && st->extl != SWB_BWE_HIGHRATE && st->extl != FB_BWE_HIGHRATE ) - { - while ( *unbits > 0 ) - { - i = min( *unbits, 16 ); - push_indice( st->hBstr, IND_UNUSED, 0, i ); - *unbits -= i; - } - } - - /*--------------------------------------------------------------* - * DCT transform - *--------------------------------------------------------------*/ - - for ( i = 0; i < Nsv * WIDTH_BAND; i++ ) - { - x_tran[i] = (float) ( x_norm[i] ); - } - - set_f( x_tran + Nsv * WIDTH_BAND, 0.0f, L_SUBFR - WIDTH_BAND * Nsv ); - - if ( st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp ) - { - mvr2r( x_tran, code_preQ, L_SUBFR ); - } - else - { - edct2( L_SUBFR, 1, x_tran, code_preQ, ip_edct2_64, w_edct2_64 ); - } - - /*--------------------------------------------------------------* - * Preemphasise - *--------------------------------------------------------------*/ - - /* in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ - if ( ( nq[7] != 0 ) && ( st->last_nq_preQ - nq[0] > 7 ) ) - { - st->mem_preemp_preQ /= 16; - } - - st->last_nq_preQ = nq[7]; - - /* TD pre-quantizer: in extreme cases at subframe boundaries, lower the preemphasis memory to avoid a saturation */ - if ( st->element_mode > EVS_MONO && st->coder_type != INACTIVE && st->core_brate >= MIN_BRATE_AVQ_EXC && st->core_brate <= MAX_BRATE_AVQ_EXC_TD && !harm_flag_acelp && code_preQ[0] != 0 ) - { - if ( (float) abs( st->last_code_preq ) > 16.0f * (float) fabs( code_preQ[0] ) ) - { - st->mem_preemp_preQ /= 16; - } - else if ( (float) abs( st->last_code_preq ) > 8.0f * (float) fabs( code_preQ[0] ) ) - { - st->mem_preemp_preQ /= 8; - } - } - - st->last_code_preq = (int16_t) code_preQ[L_SUBFR - 1]; - - preemph( code_preQ, FAC_PRE_AVQ, L_SUBFR, &st->mem_preemp_preQ ); - - /*--------------------------------------------------------------* - * For inactive segments - * - Zero-memory filtered pre-filter excitation - * - Update of targets and gain_pit - * For active segments - * - Update xn[L_subfr-1] for updating the memory of the weighting filter - *--------------------------------------------------------------*/ - - if ( st->coder_type == INACTIVE ) - { - temp = code_preQ[0] * h1[L_SUBFR - 1]; - - for ( i = 1; i < L_SUBFR; i++ ) - { - temp += code_preQ[i] * h1[L_SUBFR - 1 - i]; - } - - xn[L_SUBFR - 1] -= *gain_preQ * temp; - } - else - { - conv( code_preQ, h1, x_tran, L_SUBFR ); - - updt_tar( cn, cn, code_preQ, *gain_preQ, L_SUBFR ); - updt_tar( xn, xn, x_tran, *gain_preQ, L_SUBFR ); - - *gain_pit = corr_xy1( xn, y1, g_corr, L_SUBFR, 0 ); - - /* clip gain if necessary to avoid problems at decoder */ - if ( clip_gain == 1 && *gain_pit > 0.95f ) - { - *gain_pit = 0.95f; - } - - updt_tar( xn, xn2, y1, *gain_pit, L_SUBFR ); - } - - st->use_acelp_preq = 1; - - return; -} - -/*-------------------------------------------------------------------* - * Find target in residual domain - cn[] - *-------------------------------------------------------------------*/ - -static void find_cn( - const float xn[], /* i : target signal */ - const float Ap[], /* i : weighted LP filter coefficients */ - const float *p_Aq, /* i : 12k8 LP coefficients */ - float cn[] /* o : target signal in residual domain */ -) -{ - float tmp, tmp_fl[L_SUBFR + M]; - - set_f( tmp_fl, 0, M ); - mvr2r( xn, tmp_fl + M, L_SUBFR ); - tmp = 0.0f; - - preemph( tmp_fl + M, PREEMPH_FAC_16k_FLT, L_SUBFR, &tmp ); - syn_filt( Ap, M, tmp_fl + M, tmp_fl + M, L_SUBFR, tmp_fl, 0 ); - residu( p_Aq, M, tmp_fl + M, cn, L_SUBFR ); - - return; -} - -/*---------------------------------------------------------------* - * gain_quant() - * - * Quantization of gains between the specified range - * using the specified number of levels. - *---------------------------------------------------------------*/ - -/*! r: quantization index */ -int16_t gain_quant( - float *gain, /* i/o: quantized gain */ - const float min_val, /* i : value of lower limit */ - const float max_val, /* i : value of upper limit */ - const int16_t bits /* i : number of bits to quantize */ -) -{ - int16_t index, levels; - float tmp, c_min, c_mult; - - levels = 1 << bits; - - if ( *gain < FLT_MIN ) - { - *gain = FLT_MIN; - } - - c_min = (float) log10( min_val ); - c_mult = (float) ( ( levels - 1 ) / ( log10( max_val ) - c_min ) ); - - tmp = c_mult * ( (float) log10( *gain ) - c_min ); - index = (int16_t) ( tmp + 0.5f ); - - if ( index < 0 ) - { - index = 0; - } - if ( index > levels - 1 ) - { - index = levels - 1; - } - - *gain = (float) pow( 10.0, ( ( (float) index ) / c_mult ) + c_min ); - - return ( index ); -} -#endif diff --git a/lib_enc/enc_nelp.c b/lib_enc/enc_nelp.c index 8dcf7e032..fd4f3cb7c 100644 --- a/lib_enc/enc_nelp.c +++ b/lib_enc/enc_nelp.c @@ -40,111 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * encod_nelp() - * - * Encode Unvoiced frames in SC-VBR - *-------------------------------------------------------------------*/ - -void encod_nelp( - Encoder_State *st, /* i/o: state structure */ - const float *speech, /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float *Aq, /* i : 12k8 Lp coefficient */ - float *res, /* o : residual signal */ - float *synth, /* o : core synthesis */ - float *tmp_noise, /* o : long-term noise energy */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float h1[L_SUBFR]; /* Impulse response vector */ - float exc_nelp[L_FRAME]; - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ - int16_t i_subfr, j; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; - - int16_t reduce_gains = 0; - - if ( st->bwidth == NB && st->input_Fs >= 16000 ) - { - if ( hSC_VBR->last_nelp_mode == 0 ) - { - set_f( hSC_VBR->nelp_lp_fit_mem_flt, 0, NELP_LP_ORDER * 2 ); - } - polezero_filter( res, res, L_FRAME, num_nelp_lp, den_nelp_lp, NELP_LP_ORDER, hSC_VBR->nelp_lp_fit_mem_flt ); /*16-Q of filter coeff*/ - } - - p_Aw = Aw; - p_Aq = Aq; - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * - Find the excitation search target "xn" and innovation - * target in residual domain "cn" - * - Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, NULL, h1 ); - - if ( i_subfr == 0 ) - { - if ( hSC_VBR->Local_VAD == 1 && st->bwidth == NB ) - { - reduce_gains = 1; - } - - nelp_encoder( st, res, exc_nelp, reduce_gains ); - } - *tmp_noise = 0; - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc_nelp[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - *pitch_buf = L_SUBFR; - pitch_buf++; - } - - mvr2r( exc_nelp, exc, L_FRAME ); - - /*-----------------------------------------------------------------* - * Updates: last value of new target is stored in mem_w0_flt - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - ( exc[L_FRAME - 1] ); - hLPDmem->tilt_code_flt = 0.0f; /* purely unvoiced */ - hSC_VBR->prev_tilt_code = hLPDmem->tilt_code_flt; - - mvr2r( exc, exc2, L_FRAME ); - - hSC_VBR->prev_ppp_gain_pit = 0.0; - hLPDmem->dispMem_flt[0] = 0; - hLPDmem->dispMem_flt[2] = hSC_VBR->prev_ppp_gain_pit; - - for ( j = 3; j < 7; j++ ) - { - hLPDmem->dispMem_flt[j] = hLPDmem->dispMem_flt[j - 1]; - } - - interp_code_5over2( exc2, bwe_exc, L_FRAME ); - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - - return; -} -#endif diff --git a/lib_enc/enc_nelp_fx.c b/lib_enc/enc_nelp_fx.c index cbc8c02ab..004b43fd3 100644 --- a/lib_enc/enc_nelp_fx.c +++ b/lib_enc/enc_nelp_fx.c @@ -175,7 +175,6 @@ void encod_nelp_fx( return; } -#ifdef IVAS_FLOAT_FIXED void encod_nelp_ivas_fx( Encoder_State *st_fx, /* i/o: state structure */ const Word16 *speech_fx, @@ -319,4 +318,3 @@ void encod_nelp_ivas_fx( return; } -#endif diff --git a/lib_enc/enc_pit_exc.c b/lib_enc/enc_pit_exc.c index 791f5c59c..fd4f3cb7c 100644 --- a/lib_enc/enc_pit_exc.c +++ b/lib_enc/enc_pit_exc.c @@ -40,377 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * enc_pit_exc() - * - * Encode pitch only contribution - *-------------------------------------------------------------------*/ - -void enc_pit_exc( - Encoder_State *st, /* i/o: State structure */ - const float *speech, /* i : Input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float *Aq, /* i : 12k8 Lp coefficient */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close-loop pitch period - fractional part */ - float *pitch_buf, /* i/o: Fractionnal per subframe pitch */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - float *gpit, /* o : pitch mean gpit */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - float xn[PIT_EXC_L_SUBFR]; /* Target vector for pitch search */ - float xn2[PIT_EXC_L_SUBFR]; /* Target vector for codebook search */ - float cn[PIT_EXC_L_SUBFR]; /* Target vector in residual domain */ - float h1[PIT_EXC_L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float y1[PIT_EXC_L_SUBFR]; /* Filtered adaptive excitation */ - float code[2 * L_SUBFR]; /* Fixed codebook excitation */ - float y2[2 * L_SUBFR]; /* Filtered algebraic excitation */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - float gain_pit; /* Pitch gain */ - int16_t pit_idx, i_subfr; /* tmp variables */ - int16_t T0_min, T0_max; /* pitch variables */ - float g_corr[10]; /* ACELP correlation values + gain pitch */ - int16_t clip_gain, i; /* LSF clip gain and LP flag */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coefficient vector */ - float *pt_pitch; /* pointer to floating pitch */ - int16_t L_subfr; - float cum_gpit, gpit_tmp; - int32_t Local_BR, Pitch_BR; - int16_t Pitch_CT, unbits_PI; - float norm_gain_code; - int16_t pitch_limit_flag; - int16_t lp_select, lp_flag; - BSTR_ENC_HANDLE hBstr = st->hBstr; - int16_t use_fcb; - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - pitch_limit_flag = 1; /* always extended pitch Q range */ - use_fcb = 0; - unbits_PI = 0; - - if ( st->GSC_IVAS_mode > 0 && ( st->GSC_noisy_speech || st->core_brate > GSC_H_RATE_STG ) ) - { - Local_BR = ACELP_8k00; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_8k00; - if ( st->L_frame == L_FRAME16k ) - { - Local_BR = ACELP_14k80; - if ( st->GSC_IVAS_mode > 0 ) - { - Local_BR = ACELP_9k60; - } - Pitch_BR = st->core_brate; - } - } - else if ( st->GSC_noisy_speech ) - { - Local_BR = ACELP_7k20; - Pitch_CT = GENERIC; - Pitch_BR = ACELP_7k20; - if ( st->L_frame == L_FRAME16k ) - { - Pitch_BR = st->core_brate; - } - } - else - { - Local_BR = ACELP_7k20; - Pitch_CT = AUDIO; - Pitch_BR = st->core_brate; - - if ( st->L_frame == L_FRAME16k ) - { - Local_BR = ACELP_13k20; - Pitch_CT = GENERIC; - } - } - - gain_code = 0; - - if ( st->L_frame == L_FRAME16k ) - { - T0_max = PIT16k_MAX; - T0_min = PIT16k_MIN; - } - else - { - T0_max = PIT_MAX; - T0_min = PIT_MIN; - } - - cum_gpit = 0.0f; - - L_subfr = st->L_frame / nb_subfr; - - lp_flag = st->acelp_cfg.ltf_mode; - - if ( ( ( st->core_brate >= MIN_RATE_FCB || ( st->GSC_noisy_speech == 1 && ( ( st->L_frame == L_FRAME && st->core_brate >= ACELP_13k20 ) || ( st->L_frame == L_FRAME16k && st->core_brate >= GSC_H_RATE_STG ) || st->GSC_IVAS_mode == 0 ) ) ) && L_subfr == L_SUBFR ) ) - { - use_fcb = 1; - } - else if ( st->GSC_IVAS_mode > 0 && L_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) - { - use_fcb = 2; - st->acelp_cfg.fcb_mode = 1; - set_s( st->acelp_cfg.gains_mode, 6, NB_SUBFR ); - set_s( st->acelp_cfg.pitch_bits, 9, NB_SUBFR ); - set_s( st->acelp_cfg.fixed_cdk_index, 14, NB_SUBFR16k ); - } - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; /* pointer to the pitch buffer */ - - for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_subfr ) - { - /*----------------------------------------------------------------* - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_subfr ); - - find_targets( speech, st->hGSCEnc->mem_syn_tmp, i_subfr, &st->hGSCEnc->mem_w0_tmp, p_Aq, res, L_subfr, p_Aw, st->preemph_fac_flt, xn, cn, h1 ); - - /*----------------------------------------------------------------* - * Close-loop pitch search and quantization - * Adaptive exc. construction - *----------------------------------------------------------------*/ - - *pt_pitch = pit_encode( hBstr, st->acelp_cfg.pitch_bits, Pitch_BR, 0, st->L_frame, Pitch_CT, &pitch_limit_flag, i_subfr, exc, L_subfr, st->pitch, &T0_min, &T0_max, T0, T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - /*-----------------------------------------------------------------* - * Find adaptive exitation - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_subfr + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, AUDIO, xn, st->clip_var ); - - /*-----------------------------------------------------------------* - * Codebook target computation - * (No LP filtering of the adaptive excitation) - *-----------------------------------------------------------------*/ - - lp_select = lp_filt_exc_enc( MODE1, AUDIO, i_subfr, exc, h1, xn, y1, xn2, L_subfr, st->L_frame, g_corr, clip_gain, &gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - - /* update long-term pitc hgain for speech/music classifier */ - st->hSpMusClas->lowrate_pitchGain_flt = 0.9f * st->hSpMusClas->lowrate_pitchGain_flt + 0.1f * gain_pit; - - gpit_tmp = gain_pit; - - if ( use_fcb == 0 ) - { - if ( st->core_brate >= MIN_RATE_FCB ) - { - pit_idx = (int16_t) vquant( &gain_pit, mean_gp, &gain_pit, dic_gp, 1, 32 ); - push_indice( hBstr, IND_PIT_IDX, pit_idx, 5 ); - } - else - { - pit_idx = (int16_t) vquant( &gain_pit, mean_gp, &gain_pit, dic_gp, 1, 16 ); - push_indice( hBstr, IND_PIT_IDX, pit_idx, 4 ); - } - } - else if ( use_fcb == 2 ) - { - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 0, st->L_frame, st->last_L_frame, GENERIC, st->bwidth, 0, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &i, 2 * L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - gain_enc_lbr( st->hBstr, st->acelp_cfg.gains_mode, GENERIC, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, 2 * L_SUBFR ); - } - else - { - /*-----------------------------------------------------------------* - * Innovation & gain encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, Local_BR, 0, st->L_frame, st->last_L_frame, LOCAL_CT, WB, 1, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); - - gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, st->L_frame, i_subfr, -1, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - if ( use_fcb != 0 ) - { - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_subfr, 0 ); - } - else - { - hLPDmem->tilt_code_flt = 0.0f; - } - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - if ( use_fcb != 0 ) - { - st->hGSCEnc->mem_w0_tmp = xn[L_subfr - 1] - ( gain_pit * y1[L_subfr - 1] ) - ( gain_code * y2[L_subfr - 1] ); - } - else - { - st->hGSCEnc->mem_w0_tmp = xn[L_subfr - 1] - ( gain_pit * y1[L_subfr - 1] ); - } - - /*-----------------------------------------------------------------* - * Construct adaptive part of the excitation - * Save the non-enhanced excitation for FEC_exc - *-----------------------------------------------------------------*/ - - if ( use_fcb != 0 ) - { - for ( i = 0; i < L_subfr; i++ ) - { - exc[i + i_subfr] = gain_pit * exc[i + i_subfr] + gain_code * code[i]; - } - } - else - { - for ( i = 0; i < L_subfr; i++ ) - { - exc[i + i_subfr] = gain_pit * exc[i + i_subfr]; - } - } - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &synth[i_subfr], L_subfr, st->hGSCEnc->mem_syn_tmp, 1 ); - - if ( L_subfr == 5 * L_SUBFR ) - { - cum_gpit = gpit_tmp; - - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - - p_Aw += 5 * ( M + 1 ); - p_Aq += 5 * ( M + 1 ); - } - else if ( L_subfr == 5 * L_SUBFR / 2 ) - { - if ( i_subfr == 0 ) - { - cum_gpit = gpit_tmp * .4f; - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - p_Aw += 2 * ( M + 1 ); - p_Aq += 2 * ( M + 1 ); - } - else - { - cum_gpit += gpit_tmp * .6f; - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - p_Aw += 3 * ( M + 1 ); - p_Aq += 3 * ( M + 1 ); - } - } - else if ( L_subfr == 2 * L_SUBFR ) - { - if ( i_subfr == 0 ) - { - cum_gpit = gpit_tmp * .5f; - } - else - { - cum_gpit += gpit_tmp * .5f; - } - - p_Aw += 2 * ( M + 1 ); - p_Aq += 2 * ( M + 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - } - else if ( L_subfr == 4 * L_SUBFR ) - { - cum_gpit = gpit_tmp; - - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - - p_Aw += 4 * ( M + 1 ); - p_Aq += 4 * ( M + 1 ); - } - else - { - if ( i_subfr == 0 ) - { - cum_gpit = gpit_tmp * .25f; - } - else - { - cum_gpit += gpit_tmp * .25f; - } - - pt_pitch++; - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - } - } - - *gpit = 0.1f * *gpit + 0.9f * cum_gpit; - - return; -} -#endif diff --git a/lib_enc/enc_ppp.c b/lib_enc/enc_ppp.c index c432bc231..e7a8ca967 100644 --- a/lib_enc/enc_ppp.c +++ b/lib_enc/enc_ppp.c @@ -39,169 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------- - * encod_ppp() - * - * Encode PPP frames in SC-VBR - *-------------------------------------------------------------------*/ - -ivas_error encod_ppp( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : 12k8 Lp coefficient */ - float *res, /* i/o: residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* o : excitation for SWB TBE */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - int16_t i_subfr; /* tmp variables */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ - int16_t k; - float p_Aq_old[M + 1], excQ_ppp[L_FRAME], p_Aq_curr[M], pitch[NB_SUBFR]; - float LPC_de_old[M + 1], LPC_de_curr[M + 1]; - int16_t rate_ctrl; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; - BSTR_ENC_HANDLE hBstr = st->hBstr; - ivas_error error; - - error = IVAS_ERR_OK; - - rate_ctrl = hSC_VBR->rate_control; - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - p_Aw = Aw; - p_Aq = Aq; - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * Bandwidth expansion of A(z) filter coefficients - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, TILT_FAC, xn, NULL, h1 ); - - /* call voiced encoder at this point */ - if ( i_subfr == 0 ) /* generate the L_FRAME exc */ - { - for ( k = 0; k < M; k++ ) - { - p_Aq_curr[k] = p_Aq[k + ( 3 * ( M + 1 ) ) + 1]; - } - - lsp2a_stab( st->lsp_old, p_Aq_old, M ); - - deemph_lpc( p_Aq_curr, p_Aq_old, LPC_de_curr, LPC_de_old, 1 ); - - /* last frame-end lpc and curr frame-end lpc */ - if ( ( error = ppp_voiced_encoder( hBstr, st->hSC_VBR, st->bwidth, st->last_coder_type_raw, st->old_pitch_buf, res, excQ_ppp, st->pitch[1], LPC_de_old, LPC_de_curr, exc, pitch ) ) != IVAS_ERR_OK ) - { - return error; - } - - - if ( hSC_VBR->bump_up ) - { - i_subfr = L_FRAME; - } - } - - if ( hSC_VBR->bump_up != 1 ) - { - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - * or in case of floating point encoder & fixed p. decoder - *-----------------------------------------------------------------*/ - - gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, st->coder_type, xn, st->clip_var ); - - /* run the above to maintain gain clipping memories */ - gp_clip_test_gain_pit( st->element_mode, st->core_brate, hSC_VBR->prev_ppp_gain_pit, st->clip_var ); - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &excQ_ppp[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - } - - } /* end of subframe loop */ - - - if ( hSC_VBR->bump_up ) - { - /* PPP failed, bump up */ - hSC_VBR->ppp_mode = 0; - st->core_brate = ACELP_7k20; - hSC_VBR->pppcountE = 0; - - if ( hSC_VBR->set_ppp_generic ) - { - st->coder_type = GENERIC; - } - else - { - st->coder_type = VOICED; - } - - /* delete previous indices */ - reset_indices_enc( hBstr, hBstr->nb_ind_tot ); - - /* signaling matrix (writing of signaling bits) */ - signaling_enc( st ); - } - else - { - mvr2r( excQ_ppp, exc, L_FRAME ); - - /*-----------------------------------------------------------------* - * Updates: last value of new target is stored in mem_w0_flt - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - ( exc[L_FRAME - 1] ); - - mvr2r( exc, exc2, L_FRAME ); - - hLPDmem->dispMem_flt[0] = 2; - hLPDmem->dispMem_flt[2] = hSC_VBR->prev_ppp_gain_pit; - - for ( k = 3; k < 7; k++ ) - { - hLPDmem->dispMem_flt[k] = hLPDmem->dispMem_flt[k - 1]; - } - hLPDmem->tilt_code_flt = hSC_VBR->prev_tilt_code; - mvr2r( pitch, pitch_buf, NB_SUBFR ); - pitch_buf[NB_SUBFR16k - 1] = pitch[NB_SUBFR - 1]; - interp_code_5over2( exc2, bwe_exc, L_FRAME ); - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - } - - hSC_VBR->rate_control = rate_ctrl; - - set_f( hSC_VBR->nelp_lp_fit_mem_flt, 0, NELP_LP_ORDER * 2 ); - - return error; -} -#endif diff --git a/lib_enc/enc_prm.c b/lib_enc/enc_prm.c index fbc576dec..1239a104c 100644 --- a/lib_enc/enc_prm.c +++ b/lib_enc/enc_prm.c @@ -49,7 +49,6 @@ * write TCX mode *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void writeTCXMode( Encoder_State *st, /* i/o: encoder state structure */ BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ @@ -201,139 +200,6 @@ void writeTCXMode( return; } -#else -void writeTCXMode( - Encoder_State *st, /* i/o: encoder state structure */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - int16_t *nbits_start /* o : nbits start */ -) -{ - uint16_t index; - int16_t idx, start_idx; - int16_t nBits; - - if ( st->tcxonly ) - { - push_next_indice( hBstr, st->core == TCX_10_CORE, 1 ); - - if ( st->clas == UNVOICED_CLAS ) - { - index = 0; - } - else if ( st->clas == VOICED_TRANSITION || st->clas == UNVOICED_TRANSITION ) - { - index = 1; - } - else if ( st->clas == VOICED_CLAS ) - { - index = 2; - } - else - { - index = 3; - } - - push_next_indice( hBstr, index, 2 ); - - if ( st->element_mode == IVAS_CPE_MDCT && !MCT_flag ) - { - push_next_indice( hBstr, st->vad_flag, 1 ); - } - } - else - { - if ( st->core == ACELP_CORE ) - { - /* write the RF signaling information */ - if ( st->rf_mode == 1 ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - idx = 0; - while ( acelp_sig_tbl[idx] != st->total_brate ) /* total bitrate is kept at 13.2kbps */ - { - idx++; - } - - /* retrieve the number of bits for signaling */ - nBits = (int16_t) acelp_sig_tbl[++idx]; - - /* retrieve the signaling index */ - start_idx = ++idx; - while ( acelp_sig_tbl[idx] != SIG2IND( st->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ) ) - { - idx++; - } - push_next_indice( hBstr, idx - start_idx, nBits ); - push_next_indice( hBstr, 0, 1 ); /* Indicate to the decoder that the core is ACELP*/ - *nbits_start = 3; - } - else - { - push_next_indice( hBstr, st->coder_type, 3 ); - } - } - else - { - if ( st->mdct_sw == MODE1 ) - { - /* 2 bits instead of 3 as TCX is already signaled */ - push_next_indice( hBstr, st->hTcxCfg->coder_type, 2 ); - } - else - { - if ( st->mdct_sw_enable == MODE2 ) - { - push_next_indice( hBstr, 1, 1 ); /* TCX */ - push_next_indice( hBstr, 0, 1 ); /* not HQ_CORE */ - push_next_indice( hBstr, st->hTcxCfg->coder_type, 2 ); - } - else - { - /*write the RF signaling information*/ - if ( st->rf_mode == 1 ) - { - /* find the section in the ACELP signaling table corresponding to bitrate */ - idx = 0; - while ( acelp_sig_tbl[idx] != st->total_brate ) - { - idx++; - } - - /* retrieve the number of bits for signaling */ - nBits = (int16_t) acelp_sig_tbl[++idx]; - - if ( st->hTcxCfg->coder_type == VOICED || st->hTcxCfg->coder_type == GENERIC || st->hTcxCfg->coder_type == TRANSITION ) - { - st->sharpFlag = 1; - } - else - { - st->sharpFlag = 0; - } - - /* retrieve the signaling index */ - start_idx = ++idx; - while ( acelp_sig_tbl[idx] != SIG2IND( st->hTcxCfg->coder_type, st->bwidth, st->sharpFlag, st->rf_mode ) ) - { - idx++; - } - push_next_indice( hBstr, idx - start_idx, nBits ); - push_next_indice( hBstr, 1, 1 ); /* Indicate to the decoder that the core is TCX*/ - *nbits_start = 3; - } - else - { - push_next_indice( hBstr, ACELP_MODE_MAX + st->hTcxCfg->coder_type, 3 ); - } - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -342,7 +208,6 @@ void writeTCXMode( * write TCX transform type *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void writeTCXWindowing( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ const Word16 overlap_mode /* i : overlap mode */ @@ -364,705 +229,3 @@ void writeTCXWindowing( return; } -#else -void writeTCXWindowing( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t overlap_mode /* i : overlap mode */ -) -{ - - if ( overlap_mode == MIN_OVERLAP ) - { - push_next_indice( hBstr, 2, 2 ); - } - else if ( overlap_mode == HALF_OVERLAP ) - { - push_next_indice( hBstr, 3, 2 ); - } - else - { - push_next_indice( hBstr, 0, 1 ); - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * writeLPCparam() - * - * write LTC parameters - *-------------------------------------------------------------------*/ - -void writeLPCparam( - Encoder_State *st, /* i/o: encoder state structure */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t param_lpc[], /* i : LPC parameters to write */ - const int16_t bits_param_lpc[], /* i : bits per LPC parameter */ - const int16_t no_param_lpc, /* i : number of LPC parameters */ - int16_t *nbits_lpc /* o : LPC bits written */ -) -{ - int16_t numlpc; - - if ( st->enableTcxLpc && st->core != ACELP_CORE ) - { - /* Encode the indices */ - *nbits_lpc = enc_lsf_tcxlpc( ¶m_lpc, hBstr ); - } - else - { - if ( st->lpcQuantization == 0 ) - { - /* LPC quantizer */ - if ( st->core == TCX_20_CORE ) - { - numlpc = 1; - } - else - { - numlpc = 2; - } - - *nbits_lpc = encode_lpc_avq( hBstr, numlpc, param_lpc, st->core, st->element_mode ); - } - else if ( st->lpcQuantization == 1 ) - { - if ( st->sr_core == INT_FS_16k && st->coder_type == VOICED && st->core == ACELP_CORE ) - { - assert( st->element_mode == EVS_MONO ); - - *nbits_lpc = lsf_bctcvq_encprm( hBstr, param_lpc, bits_param_lpc, no_param_lpc ); - } - else - { - *nbits_lpc = lsf_msvq_ma_encprm( hBstr, param_lpc, st->core, st->coder_type, st->acelp_cfg.midLpc, bits_param_lpc, no_param_lpc ); - } - } - else - { - assert( 0 ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * enc_prm_hm() - * - * - *-------------------------------------------------------------------*/ - -static void enc_prm_hm( - const int16_t *prm_hm, - BSTR_ENC_HANDLE hBstr, - const int16_t coder_type, - const int16_t L_frame ) -{ - /* Disable HM for non-GC,VC modes */ - if ( coder_type != VOICED && coder_type != GENERIC ) - { - return; - } - - /* Flag */ - push_next_indice( hBstr, prm_hm[0], 1 ); - - if ( prm_hm[0] ) - { - /* Periodicy index */ - EncodeIndex( L_frame >= L_FRAME, prm_hm[1], hBstr ); - - if ( coder_type == VOICED ) - { - /* Gain index */ - push_next_indice( hBstr, prm_hm[2], kTcxHmNumGainBits ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * writeTCXparam() - * - * write TCX core parameters - *-------------------------------------------------------------------*/ - -void writeTCXparam( - Encoder_State *st, /* i/o: Encoder State handle */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - CONTEXT_HM_CONFIG hm_cfg[], /* i/o: HM config */ - int16_t param[], /* i : parameters */ - const int16_t nbits_header, - const int16_t nbits_start, - const int16_t nbits_lpc, - const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ - int16_t p_param[2], /* i/o: pointer to parameters from previous bs writing */ - const int16_t target_bitsTCX10[2], - const int16_t pre_past_flag ) -{ - int16_t *prm; - int16_t j, k, nSubframes, core, last_core; - int16_t lg, lgFB, hm_size, flag_ctx_hm; - int16_t total_nbbits, nbits_igf, nbits_tcx; - int16_t nTnsParams, nTnsBits; - int16_t pre_part, post_part; - - if ( pre_past_flag == 0 ) - { - pre_part = 1; - post_part = 0; - } - else if ( pre_past_flag == 1 ) - { - pre_part = 0; - post_part = 1; - } - else - { - pre_part = 1; - post_part = 1; - } - - /* Initialization */ - core = st->core; - last_core = st->last_core; - nbits_igf = 0; - - nSubframes = 1; - if ( core == TCX_10_CORE ) - { - nSubframes = 2; - } - - /* loop over subframes */ - for ( k = 0; k < nSubframes; k++ ) - { - if ( st->element_mode < IVAS_CPE_MDCT && k == 0 && st->igf && core == TCX_10_CORE ) - { - nbits_igf = IGFEncWriteConcatenatedBitstream( st->hIGFEnc, hBstr ); - } - - flag_ctx_hm = 0; - - prm = param + ( k * NPRM_DIV ); - j = 0; - - nbits_tcx = total_nbbits = hBstr->nb_bits_tot - nbits_start; - - if ( pre_part && st->enablePlcWaveadjust && k == ( nSubframes - 1 ) ) - { - push_next_indice( hBstr, st->Tonal_SideInfo, 1 ); - } - - if ( post_part ) - { - /* TCX Gain */ - push_next_indice( hBstr, prm[j++], NBITS_TCX_GAIN ); - - /* TCX Noise Filling = NBITS_NOISE_FILL_LEVEL bits */ - push_next_indice( hBstr, prm[j++], NBITS_NOISE_FILL_LEVEL ); - } - else - { - j += 1 + NOISE_FILL_RANGES; - } - - /* LTP data */ - if ( pre_part ) - { - if ( ( k == 0 ) && ( st->hTcxEnc->tcxltp || ( st->sr_core > 25600 ) ) ) /* PLC pitch info for HB */ - { - if ( prm[j] ) - { - push_next_indice( hBstr, 1, 1 ); - push_next_indice( hBstr, prm[j + 1], 9 ); - push_next_indice( hBstr, prm[j + 2], 2 ); - } - else - { - push_next_indice( hBstr, 0, 1 ); - } - } - j += 3; - } - else - { - j += p_param[k] - 2; - } - - /* TCX spectral data */ - lg = st->last_L_frame >> ( nSubframes - 1 ); - lgFB = st->hTcxCfg->tcx_coded_lines >> ( nSubframes - 1 ); - if ( post_part && k == 0 && last_core == ACELP_CORE ) - { - /* ACE->TCX transition */ - lg += st->hTcxCfg->tcx_offset; - lgFB += lgFB >> ( 3 - nSubframes ); - - if ( st->hTcxCfg->lfacNext < 0 ) - { - lg -= st->hTcxCfg->lfacNext; - } - } - - if ( pre_part ) - { - /* TNS data */ - nTnsParams = 0; - nTnsBits = 0; - - if ( st->hTcxCfg->fIsTNSAllowed ) - { - SetTnsConfig_flt( st->hTcxCfg, core == TCX_20_CORE, ( last_core == ACELP_CORE ) && ( k == 0 ) ); - - if ( no_param_tns ) - { - push_next_indice( hBstr, ( st->hTcxEnc->tnsData[k].nFilters < 0 ? 1 : 0 ), 1 ); /* common_tns_data[] for subframe k */ - } - if ( no_param_tns && ( st->hTcxEnc->tnsData[k].nFilters < 0 ) ) - { - /* a negative filter count means that the filters are identical to those in the first channel at the same sub-frame */ - nTnsParams = no_param_tns[k]; - } - else - { - WriteTnsData( st->hTcxCfg->pCurrentTnsConfig, prm + j, &nTnsParams, hBstr, &nTnsBits ); - } - if ( no_param_tns ) - { - nTnsBits++; - } - j += nTnsParams; - } - - if ( post_part ) - { - hm_size = (int16_t) ( 2.0f * st->hTcxCfg->bandwidth_flt * (float) lg ); - - if ( st->hTcxEnc->tcx_lpc_shaped_ari && last_core != ACELP_CORE && core == TCX_20_CORE ) - { - enc_prm_hm( &prm[j], hBstr, st->hTcxCfg->coder_type, hm_size ); - } - - /*Context HM flag*/ - if ( st->hTcxCfg != NULL && st->hTcxCfg->ctx_hm && !( last_core == ACELP_CORE && k == 0 ) ) - { - push_next_indice( hBstr, prm[j], 1 ); - - if ( prm[j] ) - { - EncodeIndex( hm_size >= 256, prm[j + 1], hBstr ); - - flag_ctx_hm = 1; - } - } - } - j += NPRM_CTX_HM; - - if ( post_part ) - { - /* IGF data */ - if ( st->igf && core == TCX_20_CORE ) - { - st->hIGFEnc->infoTotalBitsPerFrameWritten = 0; - IGFEncWriteBitstream( st->hIGFEnc, hBstr, &st->hIGFEnc->infoTotalBitsPerFrameWritten, ( last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - } - - total_nbbits = hBstr->nb_bits_tot - nbits_start; - - if ( core == TCX_20_CORE ) - { - if ( st->rf_mode ) - { - total_nbbits += st->rf_target_bits_write; - } - nbits_tcx = st->bits_frame_core - total_nbbits; - } - else /* TCX_10_CORE */ - { - nbits_tcx = ( ( st->bits_frame_core - nbits_header - nbits_lpc - nbits_igf + 1 - k ) >> 1 ) - ( total_nbbits - nbits_tcx ); - } - } - else - { - /*Context HM flag*/ - p_param[k] = j; - } - } - else - { - nbits_tcx = st->bits_frame_channel; - if ( core == TCX_10_CORE ) - { - nbits_tcx = target_bitsTCX10[k] - NBITS_TCX_GAIN - NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; - } - } - - if ( post_part ) - { - if ( st->hTcxEnc->tcx_lpc_shaped_ari && core == TCX_20_CORE ) - { - push_next_bits( hBstr, (uint16_t *) &prm[++j], nbits_tcx ); - j += nbits_tcx; - } - else - { - if ( st->element_mode > EVS_MONO ) - { - RCcontextMapping_encode2_no_mem_s17_LCS( hBstr, prm + j, lgFB, prm[j - 1], /* lastnz */ - nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg[k] : NULL ); - } - else - { - ACcontextMapping_encode2_no_mem_s17_LC( hBstr, prm + j, lgFB, prm[j - 1], /* lastnz */ - nbits_tcx, NPRM_RESQ * st->hTcxCfg->resq, flag_ctx_hm ? &hm_cfg[k] : NULL ); - } - } - } - } - - return; -} - - -/*-----------------------------------------------------------------* - * Function enc_prm_rf() * - * ~~~~~~~~~~~~~~~~~~~~~~ * - * * - * encode RF parameters for ACELP and TCX partial copy * - *-----------------------------------------------------------------*/ - -void enc_prm_rf( - Encoder_State *st, - const int16_t rf_frame_type, - const int16_t fec_offset ) -{ - int16_t sfr, nb_subfr, n, index; - int16_t ltp_mode, ltf_mode, gains_mode; - - RF_ENC_HANDLE hRF = st->hRF; - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - nb_subfr = st->nb_subfr; - - /* partial copy bitstream writing */ - if ( rf_frame_type >= RF_TCXFD && rf_frame_type <= RF_TCXTD2 ) - { - /* TCX frames partial copy write */ - if ( rf_frame_type == RF_TCXFD ) - { - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], lsf_numbits[0] ); /* VQ 1 */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], lsf_numbits[1] ); /* VQ 2 */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][2], lsf_numbits[2] ); /* VQ 3 */ - } - - /* classification */ - if ( hRF->rf_clas[fec_offset] == UNVOICED_CLAS ) - { - index = 0; - } - else if ( ( hRF->rf_clas[fec_offset] == VOICED_TRANSITION ) || ( hRF->rf_clas[fec_offset] == UNVOICED_TRANSITION ) ) - { - index = 1; - } - else if ( hRF->rf_clas[fec_offset] == VOICED_CLAS ) - { - index = 2; - } - else - { - index = 3; - } - push_next_indice( hBstr, index, 2 ); - - if ( rf_frame_type == RF_TCXFD ) - { - /* TCX global gain = 7 bits */ - push_next_indice( hBstr, hRF->rf_gain_tcx[fec_offset], 7 ); - } - else - { - /* LTP data */ - if ( ( rf_frame_type == RF_TCXTD1 || rf_frame_type == RF_TCXTD2 ) && hTcxEnc->tcxltp ) - { - push_next_indice( hBstr, hRF->rf_tcxltp_param[fec_offset], 9 ); - } - } - } - else if ( rf_frame_type == 7 ) /* NELP bitstream writing */ - { - /* LSF indices */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], 8 ); /* VQ 1 */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], 8 ); /* VQ 2 */ - - /* NELP gain indices */ - push_next_indice( hBstr, hRF->rf_indx_nelp_iG1[fec_offset], 5 ); - push_next_indice( hBstr, hRF->rf_indx_nelp_iG2[fec_offset][0], 6 ); - push_next_indice( hBstr, hRF->rf_indx_nelp_iG2[fec_offset][1], 6 ); - - /* NELP filter selection index */ - push_next_indice( hBstr, hRF->rf_indx_nelp_fid[fec_offset], 2 ); - - /* tbe gainFr */ - push_next_indice( hBstr, hRF->rf_indx_tbeGainFr[fec_offset], 5 ); - } - else if ( rf_frame_type >= 4 ) /* rf_frame_type ALL_PRED: 4, NO_PRED: 5, GEN_PRED: 6 */ - { - /* LSF indices */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][0], 8 ); /* VQ 1 */ - push_next_indice( hBstr, hRF->rf_indx_lsf[fec_offset][1], 8 ); /* VQ 2 */ - - /* ES pred */ - push_next_indice( hBstr, hRF->rf_indx_EsPred[fec_offset], 3 ); - - ltp_mode = ACELP_LTP_MODE[1][1][rf_frame_type]; - ltf_mode = ACELP_LTF_MODE[1][1][rf_frame_type]; - gains_mode = ACELP_GAINS_MODE[1][1][rf_frame_type]; - - /* Subframe parameters */ - for ( sfr = 0; sfr < nb_subfr; sfr++ ) - { - /* Pitch lag (5, or 8 bits) */ - n = ACELP_LTP_BITS_SFR[ltp_mode][sfr]; - if ( n != 0 ) - { - push_next_indice( hBstr, hRF->rf_indx_pitch[fec_offset][sfr], n ); - } - - /* Adaptive codebook filtering (1 bit) */ - if ( ltf_mode == 2 ) - { - push_next_indice( hBstr, hRF->rf_indx_ltfMode[fec_offset][sfr], 1 ); - } - - /*Innovative codebook*/ - if ( ( rf_frame_type == RF_NOPRED ) || ( rf_frame_type == RF_GENPRED && ( sfr == 0 || sfr == 2 ) ) ) - { - push_next_indice( hBstr, hRF->rf_indx_fcb[fec_offset][sfr], 7 ); - } - - /* Gains (5b, 6b or 7b / subfr) */ - if ( sfr == 0 || sfr == 2 ) - { - n = ACELP_GAINS_BITS[gains_mode]; - push_next_indice( hBstr, hRF->rf_indx_gain[fec_offset][sfr], n ); - } - } - /* tbe gainFr */ - push_next_indice( hBstr, hRF->rf_indx_tbeGainFr[fec_offset], 2 ); - } - - /***************/ - /*IMPORTANT: The last three bits are always the rf_frame_type in the bitstream (for both acelp and tcx partial copy); - the rf_frame_type indicates the length of the partial copy payload at the decoder. - The 2 bits before the rf_frame_type contains the fec_offset */ - - /***************/ - /* write FEC offset just before the rf_frame_type */ - if ( fec_offset == 2 ) - { - push_next_indice( hBstr, 0, 2 ); - } - else if ( fec_offset == 3 || fec_offset == 5 || fec_offset == 7 ) - { - push_next_indice( hBstr, ( fec_offset - 1 ) / 2, 2 ); - } - - /* write RF frame type last in the bitstream */ - push_next_indice( hBstr, rf_frame_type, 3 ); - - return; -} - - -/*-----------------------------------------------------------------* - * Function enc_prm() * - * ~~~~~~~~~~~~~~~~~~~~~~ * - * * - * encode parameters according to selected mode including * - * the FAC parameters when transition occurs. * - *-----------------------------------------------------------------*/ - -void enc_prm( - Encoder_State *st, /* i/o: encoder state structure */ - int16_t param[], /* i : parameters */ - int16_t param_lpc[], /* i : LPC parameters */ - CONTEXT_HM_CONFIG hm_cfg[], - const int16_t bits_param_lpc[], - const int16_t no_param_lpc ) -{ - int16_t j, n, sfr, core, last_core, nb_subfr; - int16_t *prm; - int16_t nbits_start, /*total_nbbits,*/ nbits_header, nbits_lpc; - int16_t ix, j_old, wordcnt, bitcnt; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*--------------------------------------------------------------------------------* - * initialization - *--------------------------------------------------------------------------------*/ - - nbits_lpc = 0; - - /* Useful parameters */ - nb_subfr = st->nb_subfr; - core = st->core; - last_core = st->last_core; - - /* Initialize pointers */ - prm = param; - - /* Init counters */ - j = 0; - nbits_start = hBstr->nb_bits_tot; - - /*--------------------------------------------------------------------------------* - * HEADER - *--------------------------------------------------------------------------------*/ - - if ( st->mdct_sw == MODE1 ) - { - /* Adjust st->bits_frame_core not to subtract MODE2 bandwidth signaling */ - st->bits_frame_core += FrameSizeConfig[st->frame_size_index].bandwidth_bits; - - /* Write MODE1 core & coder_type signaling */ - signaling_mode1_tcx20_enc( st, 1 ); - } - - /* EVS header */ - /* Modes (ACE_GC, ACE_UC, TCX20, TCX10...) */ - writeTCXMode( st, st->hBstr, 0 /* MCT_flag */, &nbits_start ); - - /* write last_core for error concealment */ - if ( !( core == ACELP_CORE && st->hTcxCfg->lfacNext <= 0 ) ) - { - push_next_indice( hBstr, ( ( last_core != ACELP_CORE ) || ( core == TCX_10_CORE ) ), 1 ); - } - - /* write TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - if ( core != ACELP_CORE ) - { - writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); - } - - if ( st->hPlcExt && st->hPlcExt->enableGplc ) - { - /* encode side information. */ - enc_prm_side_Info( st->hPlcExt, st ); - } - - if ( st->glr ) - { - if ( core != ACELP_CORE || st->coder_type == INACTIVE || - ( st->last_core == ACELP_CORE && st->last_coder_type_raw == INACTIVE ) || - st->glr_reset ) - { - st->glr_idx[0] = 0; - } - - if ( core == ACELP_CORE ) - { - push_next_indice( hBstr, st->glr_idx[0], G_LPC_RECOVERY_BITS ); - } - } - - st->glr_reset = 0; - - nbits_header = hBstr->nb_bits_tot - nbits_start; - - /*--------------------------------------------------------------------------------* - * LPC parameters - *--------------------------------------------------------------------------------*/ - - writeLPCparam( st, hBstr, param_lpc, bits_param_lpc, no_param_lpc, &nbits_lpc ); - - - /*--------------------------------------------------------------------------------* - * ACELP parameters - *--------------------------------------------------------------------------------*/ - - if ( core == ACELP_CORE ) - { - /* Adaptive BPF (2 bits)*/ - n = ACELP_BPF_BITS[st->acelp_cfg.bpf_mode]; - - if ( n != 0 ) - { - push_next_indice( hBstr, st->bpf_gain_param, n ); - } - - /* Mean energy (2 or 3 bits) */ - n = ACELP_NRG_BITS[st->acelp_cfg.nrg_mode]; - - if ( n != 0 ) - { - push_next_indice( hBstr, prm[j++], n ); - } - - /* Subframe parameters */ - for ( sfr = 0; sfr < nb_subfr; sfr++ ) - { - /* Pitch lag (4, 5, 6, 8 or 9 bits) */ - n = ACELP_LTP_BITS_SFR[st->acelp_cfg.ltp_mode][sfr]; - - if ( n != 0 ) - { - push_next_indice( hBstr, prm[j++], n ); - } - - /* Adaptive codebook filtering (1 bit) */ - if ( st->acelp_cfg.ltf_mode == 2 ) - { - push_next_indice( hBstr, prm[j++], 1 ); - } - - /*Innovative codebook*/ - - j_old = j; - if ( ( st->acelp_cfg.fixed_cdk_index[sfr] >= ACELP_FIXED_CDK_NB ) || ( st->acelp_cfg.fixed_cdk_index[sfr] < 0 ) ) - { - IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "ACELP bits allocation: wrong fixed cdk bit allocation" ); - } - - wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) >> 4; - bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[sfr] ) & 15; - for ( ix = 0; ix < wordcnt; ix++ ) - { - push_next_indice( hBstr, prm[j++], 16 ); - } - - if ( bitcnt ) - { - push_next_indice( hBstr, prm[j++], bitcnt ); - } - j = j_old + 8; - - /* Gains (5b, 6b or 7b / subfr) */ - n = ACELP_GAINS_BITS[st->acelp_cfg.gains_mode[sfr]]; - push_next_indice( hBstr, prm[j++], n ); - } - } - - - /*--------------------------------------------------------------------------------* - * TCX20/10 parameters - *--------------------------------------------------------------------------------*/ - - if ( core == TCX_20_CORE || core == TCX_10_CORE ) - { - writeTCXparam( st, hBstr, hm_cfg, param, nbits_header, nbits_start, nbits_lpc, NULL, NULL, NULL, -1 ); - } - - /*total_nbbits = hBstr->nb_bits_tot - nbits_start;*/ - - return; -} -#endif diff --git a/lib_enc/enc_prm_fx.c b/lib_enc/enc_prm_fx.c index 52d7dc8dd..edfe5619f 100644 --- a/lib_enc/enc_prm_fx.c +++ b/lib_enc/enc_prm_fx.c @@ -54,7 +54,6 @@ static void enc_prm_hm( } } } -#ifdef IVAS_FLOAT_FIXED static void enc_prm_hm_ivas_fx( Word16 *prm_hm, Encoder_State *st, @@ -93,7 +92,6 @@ static void enc_prm_hm_ivas_fx( } } } -#endif /*-----------------------------------------------------------------* * Function enc_prm_rf_fx() * @@ -101,7 +99,6 @@ static void enc_prm_hm_ivas_fx( * * * encode RF parameters for ACELP and TCX partial copy * *-----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void enc_prm_rf_ivas_fx( Encoder_State *st, const Word16 rf_frame_type, @@ -272,7 +269,6 @@ void enc_prm_rf_ivas_fx( Encoder_State *st, /* write RF frame type last in the bitstream */ push_next_indice( hBstr, rf_frame_type, 3 ); } -#endif void enc_prm_rf_fx( Encoder_State *st, const Word16 rf_frame_type, const Word16 fec_offset ) @@ -1196,7 +1192,6 @@ void writeLPCparam_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * writeTCXparam_fx() * @@ -1509,4 +1504,3 @@ void writeTCXparam_fx( return; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_enc/enc_tran.c b/lib_enc/enc_tran.c index 206227c2f..fc894ba6c 100644 --- a/lib_enc/enc_tran.c +++ b/lib_enc/enc_tran.c @@ -39,306 +39,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * encod_tran() - * - * Encode transition (TC) frames - *-------------------------------------------------------------------*/ - -int16_t encod_tran( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const float *res, /* i : residual signal */ - float *syn, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* i/o: excitation for SWB TBE */ - int16_t tc_subfr, /* i/o: TC subframe classification */ - int16_t position, /* i : maximum of residual signal index */ - int16_t *unbits /* i/o: number of unused bits */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float xn2[L_SUBFR]; /* Target vector for codebook search */ - float cn[L_SUBFR]; /* Target vector in residual domain */ - float h1[L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float code[L_SUBFR]; /* Fixed codebook excitation */ - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float y2[L_SUBFR]; /* Filtered algebraic excitation */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - int16_t i, i_subfr; /* tmp variables */ - int16_t T0_min, T0_max; /* pitch and TC variables */ - int16_t unbits_ACELP; - int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ - float *pt_pitch; /* pointer to floating pitch buffer */ - float g_corr[6]; /* ACELP correlation values and gain pitch */ - int16_t clip_gain; /* LSF clip gain */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coefficient vector */ - float gain_preQ; /* Gain of prequantizer excitation */ - float code_preQ[L_SUBFR]; /* Prequantizer excitation */ - int16_t Jopt_flag; /* joint optimization flag */ - int16_t unbits_PI; /* saved bits for EVS_PI */ - float norm_gain_code; - int16_t L_frame; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - gain_pit = 0; - gain_code = 0; - gain_preQ = 0; - unbits_PI = 0; - - L_frame = st->L_frame; - - if ( L_frame == L_FRAME ) - { - T0_max = PIT_MAX; - T0_min = PIT_MIN; - } - else /* L_frame == L_FRAME16k */ - { - T0_max = PIT16k_MAX; - T0_min = PIT16k_MIN; - } - - Jopt_flag = 0; - unbits_ACELP = *unbits; - *unbits = 0; - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; - gain_preQ = 0; - set_f( code_preQ, 0, L_SUBFR ); - - /*----------------------------------------------------------------* - * ACELP subframe loop - *----------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac_flt, xn, cn, h1 ); - - /*-----------------------------------------------------------------* - * TC: subframe determination & - * adaptive/glottal part of excitation construction - *-----------------------------------------------------------------*/ - - transition_enc( st, i_subfr, &tc_subfr, &Jopt_flag, &position, &T0, &T0_frac, &T0_min, &T0_max, exc, y1, h1, xn, xn2, st->clip_var, &gain_pit, g_corr, &clip_gain, &pt_pitch, bwe_exc, &unbits_ACELP ); - - /*-----------------------------------------------------------------* - * Transform domain contribution encoding - active frames - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) - { - transf_cdbk_enc( st, 0, i_subfr, cn, exc, p_Aq, p_Aw, h1, xn, xn2, y1, y2, Es_pred, &gain_pit, gain_code, g_corr, clip_gain, &gain_preQ, code_preQ, unbits ); - } - - /*-----------------------------------------------------------------* - * ACELP codebook search + pitch sharpening - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, st->coder_type, st->bwidth, st->sharpFlag, i_subfr, tc_subfr, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &unbits_PI, L_SUBFR ); - - if ( ( L_frame == L_FRAME16k ) && ( tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) && ( T0 == 2 * L_SUBFR ) ) - { - Jopt_flag = 1; - } - - /*-----------------------------------------------------------------* - * Quantize the gains - * Test quantized gain of pitch for pitch clipping algorithm - * Update tilt of code: 0.0 (unvoiced) to 0.5 (voiced) - *-----------------------------------------------------------------*/ - - if ( Jopt_flag == 0 ) - { - /* SQ gain_code */ - gain_enc_tc( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code ); - } - else - { - if ( st->core_brate > ACELP_32k ) - { - /* SQ gain_pit and gain_code */ - gain_enc_SQ( hBstr, st->acelp_cfg.gains_mode, i_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - else - { - /* VQ gain_pit and gain_code */ - gain_enc_mless( hBstr, st->acelp_cfg.gains_mode, st->element_mode, L_frame, i_subfr, tc_subfr, xn, y1, y2, code, Es_pred, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, clip_gain ); - } - } - - /*-----------------------------------------------------------------* - * update LP-filtered gains for the case of frame erasures - *-----------------------------------------------------------------*/ - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - ( gain_pit * y1[L_SUBFR - 1] ) - ( gain_code * y2[L_SUBFR - 1] ); - - /*-----------------------------------------------------------------* - * Construct adaptive part of the excitation - * Save the non-enhanced excitation for FEC_exc - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Add the ACELP pre-quantizer contribution - *-----------------------------------------------------------------*/ - - if ( st->core_brate >= MIN_BRATE_AVQ_EXC ) - { - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i + i_subfr] += gain_preQ * code_preQ[i]; - exc[i + i_subfr] += gain_preQ * code_preQ[i]; - } - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, gain_preQ, code_preQ, T0, st->coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - pt_pitch++; - } - - /* write reserved bits */ - while ( unbits_PI > 0 ) - { - i = min( unbits_PI, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - unbits_PI -= i; - } - - /* write TC configuration */ - if ( L_frame == L_FRAME ) - { - if ( tc_subfr == TC_0_0 ) - { - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - else if ( tc_subfr == TC_0_64 ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - else if ( tc_subfr == TC_0_128 ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - } - else if ( tc_subfr == TC_0_192 ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - else if ( tc_subfr == L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - else if ( tc_subfr == 2 * L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - else if ( tc_subfr == 3 * L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - } - } - else /* L_frame == L_FRAME16k */ - { - if ( tc_subfr == 0 ) - { - push_indice( hBstr, IND_TC_SUBFR, 0, 2 ); - } - else if ( tc_subfr == L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 1, 2 ); - } - else if ( tc_subfr == 2 * L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 2, 2 ); - } - else if ( tc_subfr == 3 * L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 3, 2 ); - push_indice( hBstr, IND_TC_SUBFR, 0, 1 ); - } - else if ( tc_subfr == 4 * L_SUBFR ) - { - push_indice( hBstr, IND_TC_SUBFR, 3, 2 ); - push_indice( hBstr, IND_TC_SUBFR, 1, 1 ); - } - } - - /* SC-VBR */ - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->prev_ppp_gain_pit = gain_pit; - st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code_flt; - } - - return tc_subfr; -} -#endif diff --git a/lib_enc/enc_uv.c b/lib_enc/enc_uv.c index 8e080956d..ccdf49ed3 100644 --- a/lib_enc/enc_uv.c +++ b/lib_enc/enc_uv.c @@ -41,202 +41,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * encod_unvoiced() - * - * Encode unvoiced (UC) frames - *-------------------------------------------------------------------*/ - -void encod_unvoiced( - Encoder_State *st, /* i/o: state structure */ - const float *speech, /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float *Aq, /* i : LP coefficients */ - const float Es_pred, /* i : predicted scaled innov. energy */ - const int16_t uc_two_stage_flag, /* i : flag indicating two-stage UC */ - const float *res, /* i : residual signal */ - float *syn, /* o : core synthesis */ - float *tmp_noise, /* o : long-term noise energy */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* o : floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc /* i/o: excitation for SWB TBE */ -) -{ - float xn[L_SUBFR]; /* Target vector for pitch search */ - float h1[L_SUBFR]; /* Impulse response vector */ - float code[L_SUBFR]; /* Fixed codebook excitation */ - float y2[L_SUBFR]; /* Filtered algebraic excitation */ - float *pt_pitch; /* pointer to floating pitch buffer */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* gain of code */ - float gain_inov; /* inovative gain */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector */ - int16_t i_subfr; - float norm_gain_code; - float cn[L_SUBFR]; /* Target vector in residual domain */ - float y1[L_SUBFR]; /* Filtered adaptive excitation */ - float code2[L_SUBFR]; /* Gaussian excitation */ - float y22[L_SUBFR]; /* Filtered Gaussian excitation */ - int16_t i, unbits_PI; - ACELP_CbkCorr g_corr; - float gain_code2, g_corr2[6], exc2[L_SUBFR]; - int16_t index; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - gain_pit = 0; - - if ( st->Opt_SC_VBR && st->vad_flag == 0 ) - { - if ( st->hSC_VBR->last_ppp_mode == 1 || st->hSC_VBR->last_nelp_mode == 1 ) - { - /* SC_VBR - reset the encoder, to avoid memory not updated issue for the - case when UNVOICED mode is used to code inactive speech */ - CNG_reset_enc( st, pitch_buf, voice_factors, 1 ); - } - } - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; - - /*----------------------------------------------------------------* - * subframe loop - *----------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - /*----------------------------------------------------------------* - * Bandwidth expansion of A(z) filter coefficients - * Find the excitation search target "xn" and innovation target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, L_SUBFR, p_Aw, st->preemph_fac_flt, xn, cn, h1 ); - - if ( !uc_two_stage_flag ) - { - /*----------------------------------------------------------------* - * Unvoiced subframe processing - *----------------------------------------------------------------*/ - - *pt_pitch = gaus_encode( st, i_subfr, h1, xn, exc, &hLPDmem->mem_w0_flt, st->clip_var, &hLPDmem->tilt_code_flt, code, &gain_code, y2, &gain_inov, &voice_fac, &gain_pit, &norm_gain_code ); - } - else - { - /*----------------------------------------------------------------* - * Unvoiced subframe processing in two stages - *----------------------------------------------------------------*/ - - /* No adaptive codebook (UC) */ - set_zero( y1, L_SUBFR ); - set_zero( exc + i_subfr, L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - *-----------------------------------------------------------------*/ - - gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, UNVOICED, xn, st->clip_var ); - - *pt_pitch = (float) L_SUBFR; - - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 0, L_FRAME, st->last_L_frame, UNVOICED, st->bwidth, 1, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn, code, y2, &unbits_PI, L_SUBFR ); - - E_corr_xy2( xn, y1, y2, g_corr2, L_SUBFR ); - g_corr.y2y2_flt = 0.01F + g_corr2[2]; - g_corr.xy2_flt = 0.01F + -0.5f * g_corr2[3]; - g_corr.y1y2_flt = 0.01F + 0.5f * g_corr2[4]; - - g_corr.xx_flt = 0.01F + dotp( xn, xn, L_SUBFR ); - - /*----------------------------------------------------------------------* - * Add Gaussian excitation - *----------------------------------------------------------------------*/ - - assert( gain_pit == 0.f ); - - gauss_L2( h1, code2, y2, y22, &gain_code2, g_corr2, hLPDmem->tilt_code_flt, p_Aq, FORMANT_SHARPENING_G1_FLT, &( st->seed_acelp ) ); - - g_corr.xy1_flt = 0.f; - g_corr.y1y1_flt = g_corr2[0]; - g_corr.y1y2_flt = g_corr2[4]; - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - index = gain_enc_gacelp_uv( code, code2, L_SUBFR, Es_pred, &gain_pit, &gain_code, &gain_code2, &g_corr, &norm_gain_code, &gain_inov, st->flag_noisy_speech_snr ); - - push_indice( st->hBstr, IND_GAIN, index, st->acelp_cfg.gains_mode[i_subfr / L_SUBFR] ); - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - /*----------------------------------------------------------* - * - voice factor (for codebook tilt sharpening) * - *----------------------------------------------------------*/ - - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[L_SUBFR - 1] - gain_code * y2[L_SUBFR - 1] - gain_code2 * y22[L_SUBFR - 1]; - - /*-------------------------------------------------------* - * - Find the total excitation. * - *-------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc2[i] = gain_pit * exc[i + i_subfr]; - exc2[i] += gain_code2 * code2[i]; - exc[i + i_subfr] = exc2[i] + gain_code * code[i]; - } - } - - *tmp_noise = norm_gain_code; - - voice_factors[i_subfr / L_SUBFR] = 0.0f; - - if ( st->hBWE_TD != NULL ) - { - interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); - } - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += ( M + 1 ); - p_Aq += ( M + 1 ); - pt_pitch++; - } - - /* SC-VBR */ - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->prev_ppp_gain_pit = gain_pit; - st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code_flt; - } - - return; -} -#endif diff --git a/lib_enc/energy.c b/lib_enc/energy.c index 77c28484f..59a3eb11a 100644 --- a/lib_enc/energy.c +++ b/lib_enc/energy.c @@ -40,250 +40,3 @@ #include "cnst.h" #include "rom_enc.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * background_update() - * - * - *-------------------------------------------------------------------*/ - -void background_update( - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - float frame_energy, /* i : current frame energy */ - const int16_t update_flag, /* i : current frame update flag */ - const int16_t music_backgound_f, /* i : background music flag */ - const float snr ) -{ - int16_t i, SNR_sb_num; - float *sb_bg_energy = hVAD_CLDFB->sb_bg_energy; - float *frame_sb_energy = hVAD_CLDFB->frame_sb_energy; - float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; - float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; - int16_t frameloop = hVAD_CLDFB->frameloop; - float t_bg_energy = hVAD_CLDFB->t_bg_energy; - - SNR_sb_num = ENERGY_BAND_NUM[hVAD_CLDFB->bw_index - CLDFBVAD_NB_ID]; - - frame_energy = frame_energy + 0.0001f; - - if ( ( frameloop < 60 ) && ( frameloop > 5 ) && ( f_tonality_rate[0] < 0.56 ) && - ( f_tonality_rate[1] < 0.5 ) && ltd_stable_rate[1] < 0.06 && snr < 2.5f ) - { - if ( frameloop < 50 ) - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; - hVAD_CLDFB->tbg_energy_count++; - } - else - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy; - hVAD_CLDFB->tbg_energy_count++; - } - - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.9f + frame_sb_energy[i] * 0.01f; - } - } - - if ( update_flag == 1 && frameloop > 2 && music_backgound_f == 0 ) - { - if ( hVAD_CLDFB->bg_update_count < 16 ) - { - if ( frameloop < 50 ) - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; - hVAD_CLDFB->tbg_energy_count++; - } - else - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy; - hVAD_CLDFB->tbg_energy_count++; - } - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.96f + frame_sb_energy[i] * 0.04f; - } - hVAD_CLDFB->bg_update_count++; - } - else - { - float a = 0.94f; - - if ( ( t_bg_energy < frame_energy ) && 24 * hVAD_CLDFB->frame_energy_smooth < frame_energy ) - { - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = (float) ( sb_bg_energy[i] * 0.999f + frame_sb_energy[i] * 0.001 ); - } - } - else if ( 12 * t_bg_energy < frame_energy ) - { - if ( frameloop < 50 ) - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; - hVAD_CLDFB->tbg_energy_count++; - } - else - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy; - hVAD_CLDFB->tbg_energy_count++; - } - - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.96f + frame_sb_energy[i] * 0.04f; - } - } - else - { - if ( t_bg_energy > frame_energy ) - { - a = 0.95f; - if ( frameloop < 50 ) - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; - hVAD_CLDFB->tbg_energy_count++; - } - else - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy; - hVAD_CLDFB->tbg_energy_count++; - } - - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * a + frame_sb_energy[i] * ( 1 - a ); - } - } - else - { - a = 0.96f; - if ( frameloop < 50 ) - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy / 10; - hVAD_CLDFB->tbg_energy_count++; - } - else - { - hVAD_CLDFB->t_bg_energy_sum += frame_energy; - hVAD_CLDFB->tbg_energy_count++; - } - - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * a + frame_sb_energy[i] * ( 1 - a ); - } - } - } - } - } - else - { - if ( ( t_bg_energy > 500 * frame_energy ) && ( sb_bg_energy[0] > 10 * frame_sb_energy[0] ) ) - { - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.9f + frame_sb_energy[i] * 0.1f; - } - } - else if ( t_bg_energy > 10 * frame_energy ) - { - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.999f + frame_sb_energy[i] * 0.001f; - } - } - } - - if ( hVAD_CLDFB->t_bg_energy_sum > 160 * hVAD_CLDFB->tbg_energy_count ) - { - hVAD_CLDFB->t_bg_energy_sum = 160.0f * hVAD_CLDFB->tbg_energy_count; - } - - if ( music_backgound_f == 1 && hVAD_CLDFB->lt_snr_org < 3.2 && t_bg_energy > 1 && update_flag == 0 ) - { - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.98f + 0.000001f; - } - } - if ( music_backgound_f == 1 && frame_energy < 5000 * t_bg_energy ) - { - for ( i = 0; i < SNR_sb_num; i++ ) - { - sb_bg_energy[i] = sb_bg_energy[i] * 0.98f + 0.000001f; - } - } - - if ( hVAD_CLDFB->tbg_energy_count == 64 ) - { - hVAD_CLDFB->tbg_energy_count = 48; - hVAD_CLDFB->t_bg_energy_sum = hVAD_CLDFB->t_bg_energy_sum * 0.75f; - } - - hVAD_CLDFB->t_bg_energy = hVAD_CLDFB->t_bg_energy_sum / hVAD_CLDFB->tbg_energy_count; - - return; -} - - -/*-------------------------------------------------------------------* - * est_energy() - * - * - *-------------------------------------------------------------------*/ - -void est_energy( - float sb_power[], /* o : energy of sub-band divided uniformly */ - float frame_sb_energy[], /* o : energy of sub-band divided non-uniformly */ - float *p_frame_energy, /* o : frame energy 1 */ - float *p_frame_energy2, /* o : frame energy 2 */ - float *p_high_energy, /* o : high frequency energy */ - const int16_t bw /* i : bandwidth */ -) -{ - int16_t i, j, SNR_sb_num; - float frame_energy2, high_energy; - int16_t band_num = BAND_NUM_TAB[bw]; - const float sb_power_scale[5] = { 0.0f, 0.16f, 0.24f, 0.28f, 0.28f }; - const int16_t *Nregion_index; - - frame_energy2 = 0.0f; - high_energy = 0.0f; - for ( i = 0; i < band_num; i++ ) - { - if ( i > 0 && ( i != band_num - 1 ) ) - { - frame_energy2 += sb_power[i]; - } - if ( i > 5 ) - { - high_energy += sb_power[i]; - } - } - - high_energy /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); - frame_energy2 /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); - - Nregion_index = REGION_INDEX[bw - CLDFBVAD_NB_ID]; - SNR_sb_num = ENERGY_BAND_NUM[bw - CLDFBVAD_NB_ID]; - - for ( i = 0; i < SNR_sb_num; i++ ) - { - frame_sb_energy[i] = 0; - for ( j = Nregion_index[i]; j < Nregion_index[i + 1]; j++ ) - { - frame_sb_energy[i] += sb_power[j]; - } - - frame_sb_energy[i] /= ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ); - } - *p_high_energy = high_energy; - *p_frame_energy2 = frame_energy2; - *p_frame_energy = frame_energy2 + ( sb_power_scale[bw] * sb_power[0] / ( PCM16_TO_FLT_FAC * PCM16_TO_FLT_FAC ) ); - - return; -} -#endif diff --git a/lib_enc/eval_pit_contr.c b/lib_enc/eval_pit_contr.c index aee0b4a47..d441f6ead 100644 --- a/lib_enc/eval_pit_contr.c +++ b/lib_enc/eval_pit_contr.c @@ -41,319 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constantes - *-------------------------------------------------------------------*/ - -#define NB_VOIC 13 -#define DIV_NB_VOIC ( 1.0f / NB_VOIC ) -#define ALPA 0.95f -#define ALPAM1 ( 1.0f - ALPA ) -#define BETA ( ALPAM1 / 2.0f ) -#define AFREQ_THR 2 -#define GPIT_THR 0.4f -#define HANGOVER_DELAY 2 - -/*-------------------------------------------------------------------* - * Pit_exc_contribution_len() - * - * Determine up to which band the pit contribution is significant - *-------------------------------------------------------------------*/ - -/*! r: bin where pitch contribution is significant */ -int16_t Pit_exc_contribution_len( - Encoder_State *st, /* i/o: state structure */ - const float *dct_res, /* i : DCT of residual */ - float *dct_pitex, /* i/o: DCT of pitch contribution */ - float *pitch_buf, /* i/o: Pitch per subframe */ - int16_t *hangover /* i : hangover for the time contribution switching*/ -) -{ - float corr_dct_pit[MBANDS_LOC], corr_tmp; - float av_corr, min_corr, ftmp; - int16_t freq, i, j; - int16_t last_pit_band, pit_contr_idx, last_pit_bin; - GSC_ENC_HANDLE hGSCEnc; - float ener_res; - float ener_pit; - float low_pit, F1st_harm, F8th_harm; - float corr_dct_pit_tmp[MBANDS_LOC]; - int16_t time_flg = 0; - int16_t Len, max_len; - int16_t tmp_dec; - int16_t Mbands_loc = MBANDS_LOC - 2; - BSTR_ENC_HANDLE hBstr; - - /* initialization */ - hGSCEnc = st->hGSCEnc; - hBstr = st->hBstr; - - if ( st->L_frame == L_FRAME16k ) - { - Mbands_loc = MBANDS_LOC; - } - - minimum( pitch_buf, st->L_frame >> 6, &low_pit ); - - F1st_harm = (float) INT_FS_12k8 / low_pit; - if ( st->L_frame == L_FRAME16k ) - { - F1st_harm = (float) INT_FS_16k / low_pit; - } - F8th_harm = 8.0f * F1st_harm; - - freq = 0; - for ( i = 0; i < Mbands_loc; i++ ) - { - corr_tmp = 0.0f; - ener_res = 0.1f; - ener_pit = 0.1f; - - for ( j = 0; j < mfreq_bindiv_loc[i]; j++ ) - { - corr_tmp += dct_res[j + freq] * dct_pitex[j + freq]; - ener_res += dct_res[j + freq] * dct_res[j + freq]; - ener_pit += dct_pitex[j + freq] * dct_pitex[j + freq]; - } - - corr_dct_pit[i] = (float) ( corr_tmp / sqrt( ener_res * ener_pit ) ); - freq += mfreq_bindiv_loc[i]; - } - - /* Smooth the inter-correlation value and skip the last band for the average (since last band is almost always 0)*/ - corr_dct_pit_tmp[0] = ALPA * corr_dct_pit[0] + ALPAM1 * corr_dct_pit[1]; - if ( corr_dct_pit_tmp[0] < 0.5f ) - { - corr_dct_pit_tmp[0] = 0.5f; - } - corr_dct_pit_tmp[0] = ( corr_dct_pit_tmp[0] - 0.5f ) * 2.0f; - - for ( i = 1; i < Mbands_loc - 1; i++ ) - { - corr_dct_pit_tmp[i] = ALPA * corr_dct_pit[i] + BETA * corr_dct_pit[i + 1] + BETA * corr_dct_pit[i - 1]; - if ( corr_dct_pit_tmp[i] < 0.5f ) - { - corr_dct_pit_tmp[i] = 0.5f; - } - corr_dct_pit_tmp[i] = ( corr_dct_pit_tmp[i] - 0.5f ) * 2.0f; - } - - corr_dct_pit_tmp[i] = ALPA * corr_dct_pit[i] + ALPAM1 * corr_dct_pit[i - 1]; - - if ( corr_dct_pit_tmp[i] < 0.5f ) - { - corr_dct_pit_tmp[i] = 0.5f; - } - corr_dct_pit_tmp[i] = ( corr_dct_pit_tmp[i] - 0.5f ) * 2.0f; - - for ( i = 0; i < Mbands_loc; i++ ) - { - corr_dct_pit[i] = corr_dct_pit_tmp[i]; - } - - av_corr = DIV_NB_VOIC * corr_dct_pit[0]; - for ( i = 1; i < NB_VOIC; i++ ) - { - av_corr += DIV_NB_VOIC * corr_dct_pit[i]; - } - - /* Find the cut-off freq similarly to HSX */ - last_pit_band = 0; - - av_corr *= 6400; - if ( st->L_frame == L_FRAME16k ) - { - av_corr *= 1.25f; - } - - if ( st->GSC_IVAS_mode >= 1 || st->core_brate < ACELP_9k60 ) - { - /* Correlation really poor at low rate, time domain still valide */ - av_corr *= 2.0; - } - - min_corr = (float) fabs( mfreq_loc[0] - av_corr ); - - for ( i = 1; i < Mbands_loc; i++ ) - { - ftmp = (float) fabs( mfreq_loc[i] - av_corr ); - if ( ftmp < min_corr ) - { - last_pit_band = i; - min_corr = ftmp; - } - } - - if ( F8th_harm > mfreq_loc[last_pit_band] ) - { - do - { - last_pit_band++; - } while ( F8th_harm >= mfreq_loc[last_pit_band] ); - } - - if ( st->GSC_IVAS_mode >= 1 ) - { - last_pit_band = max( last_pit_band, 7 ); - } - - if ( last_pit_band > 7 + BAND1k2 && ( st->core_brate < CFREQ_BITRATE || st->bwidth == NB ) ) - { - last_pit_band = 7 + BAND1k2; - } - else if ( last_pit_band > 10 + BAND1k2 && st->core_brate >= CFREQ_BITRATE ) - { - last_pit_band = 10 + BAND1k2; - } - - time_flg = 0; - if ( ( hGSCEnc->mem_last_pit_band > 0 && st->old_corr > 0.5f && st->hSpMusClas->mold_corr > 0.5f && hGSCEnc->lt_gpitch >= 1.5f * GPIT_THR ) || ( last_pit_band > 6 ) || ( last_pit_band >= 4 && hGSCEnc->lt_gpitch >= 1.5f * GPIT_THR && st->old_corr > 0.7f ) || ( last_pit_band > BAND1k2 && st->hSpMusClas->mold_corr > 0.80f && hGSCEnc->lt_gpitch >= GPIT_THR ) ) - { - tmp_dec = 1; - } - else - { - tmp_dec = 0; - } - - /* Different past and current decision */ - if ( ( hGSCEnc->mem_last_pit_band == 0 && tmp_dec == 1 ) || ( hGSCEnc->mem_last_pit_band > 0 && tmp_dec == 0 ) ) - { - if ( *hangover == 0 ) - { - time_flg = tmp_dec; - *hangover = HANGOVER_DELAY; - } - else - { - time_flg = 0; - if ( hGSCEnc->mem_last_pit_band > 0 ) - { - time_flg = 1; - } - - ( *hangover ) -= 1; - if ( *hangover < 0 ) - { - *hangover = 0; - } - } - } - else - { - time_flg = tmp_dec; - *hangover = HANGOVER_DELAY; - } - - /* Decicison on final length of time contribution */ - pit_contr_idx = 0; - if ( time_flg == 1 || st->coder_type != INACTIVE || st->GSC_noisy_speech ) - { - if ( st->core_brate < ACELP_9k60 && low_pit < 64 ) - { - last_pit_band = 9 + BAND1k2; - if ( st->bwidth == NB ) - { - last_pit_band = 7 + BAND1k2; - } - } - else if ( st->core_brate < ACELP_9k60 && low_pit < 128 ) - { - last_pit_band = 5 + BAND1k2; - } - else if ( st->core_brate < ACELP_9k60 ) - { - last_pit_band = 3 + BAND1k2; - } - else if ( last_pit_band < BAND1k2 + 1 ) - { - last_pit_band = BAND1k2 + 1; - } - - last_pit_bin = (int16_t) ( mfreq_loc[last_pit_band] / BIN_SIZE ); - - st->bpf_off = 0; - - max_len = st->L_frame - last_pit_bin; - if ( st->bwidth == NB ) - { - max_len = 160 - last_pit_bin; - } - - Len = 80; - if ( max_len < 80 ) - { - Len = max_len; - } - - if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) - { - for ( i = 0; i < max_len; i++ ) - { - dct_pitex[i + last_pit_bin] = 0.0f; - } - } - else - { - for ( i = 0; i < Len; i++ ) - { - dct_pitex[i + last_pit_bin] *= sm_table[i]; - } - - for ( ; i < max_len; i++ ) - { - dct_pitex[i + last_pit_bin] = 0.0f; - } - } - - hGSCEnc->mem_last_pit_band = last_pit_band; - pit_contr_idx = last_pit_band - BAND1k2; - } - else - { - set_f( dct_pitex, 0.0f, st->L_frame ); - st->bpf_off = 1; - last_pit_bin = 0; - last_pit_band = 0; - pit_contr_idx = 0; - hGSCEnc->mem_last_pit_band = 0; - set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR16k ); - - /* pitch contribution useless - delete all previously written indices belonging to pitch contribution */ - for ( i = TAG_ACELP_SUBFR_LOOP_START; i < TAG_ACELP_SUBFR_LOOP_END; i++ ) - { - delete_indice( hBstr, i ); - } - - delete_indice( hBstr, IND_ES_PRED ); - } - - if ( st->core_brate < CFREQ_BITRATE ) - { - if ( st->core_brate < ACELP_9k60 ) - { - if ( pit_contr_idx > 0 ) - { - pit_contr_idx = 1; - } - - if ( st->coder_type == INACTIVE ) - { - push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 1 ); - } - } - else - { - push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 3 ); - } - } - else - { - push_indice( hBstr, IND_PIT_CONTR_IDX, pit_contr_idx, 4 ); - } - - return last_pit_bin; -} -#endif diff --git a/lib_enc/evs_enc.c b/lib_enc/evs_enc.c index 8c8557c00..d4fe80222 100644 --- a/lib_enc/evs_enc.c +++ b/lib_enc/evs_enc.c @@ -40,782 +40,6 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "prot_fx_enc.h" -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void configure_core_coder( Encoder_State *st ); - -static void writeFrameHeader( Encoder_State *st ); - -static void initFrameHeader( Encoder_State *st ); - -/*-------------------------------------------------------------------* - * evs_enc() - * - * Principal encoder routine - *-------------------------------------------------------------------*/ - -ivas_error evs_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t *data, /* i : input signal */ - float *mem_hp20_in, /* i/o: hp20 filter memory */ - const int16_t n_samples /* i : number of input samples */ -) -{ - int16_t i, input_frame, delay; - float old_inp_12k8[L_INP_12k8], *inp; /* buffer of input signal @ 12k8 */ - float old_inp_16k[L_INP]; /* buffer of input signal @ 16kHz */ - float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ - float ener; /* residual energy from Levinson-Durbin */ - float A[NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ - float epsP[M + 1]; /* LP prediction errors */ - float lsp_new[M]; /* LSPs at the end of the frame */ - float lsp_mid[M]; /* ISPs in the middle of the frame */ - int16_t vad_hover_flag; /* VAD hangover flag */ - int16_t hq_core_type; /* HQ core type (HQ, or LR-MDCT) */ - int16_t attack_flag; /* attack flag (GSC or TC) */ - float new_inp_resamp16k[L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ - float old_syn_12k8_16k[L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ - float shb_speech[L_FRAME16k]; - float hb_speech[L_FRAME16k / 4]; - float new_swb_speech[L_FRAME48k]; - float bwe_exc_extended[L_FRAME32k + NL_BUFF_OFFSET]; - float voice_factors[NB_SUBFR16k]; - float fb_exc[L_FRAME16k]; - int16_t Voicing_flag; - float pitch_buf[NB_SUBFR16k]; - int16_t unbits; - int16_t padBits; - float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ - float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ - int16_t pitch_orig[3]; /* original open-loop pitch values that might be altered in core_acelp_tcx20_switching() within MODE2 */ - ivas_error error; - - error = IVAS_ERR_OK; - - push_wmops( "evs_enc" ); - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - input_frame = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); - st->core = -1; - st->extl = -1; - st->core_brate = -1; - st->input_bwidth = st->last_input_bwidth; - st->bwidth = st->last_bwidth; - hq_core_type = -1; - unbits = 0; - - st->bits_frame_core = 0; /* For getting bit consumption in core coder */ - st->hTdCngEnc->lp_cng_mode2 = 0; - st->mdct_sw_enable = 0; - st->mdct_sw = 0; - st->rate_switching_reset = 0; - - st->idchan = 0; - st->flag_ACELP16k = set_ACELP_flag_IVAS( EVS_MONO, -1, st->total_brate, 0, 0, -1, -1 ); - - /*----------------------------------------------------------------* - * set input samples buffer - *----------------------------------------------------------------*/ - - /* get delay to synchronize ACELP and MDCT frame */ - delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - - mvr2r( st->input - delay, st->old_input_signal, input_frame + delay ); - - /*----------------------------------------------------------------* - * convert 'short' input data to 'float' - *----------------------------------------------------------------*/ - - for ( i = 0; i < n_samples; i++ ) - { - st->input[i] = (float) data[i]; - } - - if ( n_samples < input_frame ) - { - set_f( st->input + n_samples, 0.0f, input_frame - n_samples ); - } - - /*----------------------------------------------------------------* - * HP filtering - *----------------------------------------------------------------*/ - - hp20_flt( st->input, input_frame, mem_hp20_in, st->input_Fs ); - - /*----------------------------------------------------------------* - * Updates in case of AMR-WB IO mode -> EVS primary mode switching - *----------------------------------------------------------------*/ - - if ( st->last_core == AMR_WB_CORE ) - { - updt_IO_switch_enc( st, input_frame ); - cldfb_reset_memory_ivas( st->cldfbAnaEnc ); - cldfb_reset_memory_ivas( st->cldfbSynTd ); - } - - /*---------------------------------------------------------------------* - * Pre-processing - *---------------------------------------------------------------------*/ - - pre_proc( st, input_frame, old_inp_12k8, old_inp_16k, &inp, fr_bands, &ener, pitch_orig, A, Aw, epsP, lsp_new, lsp_mid, &vad_hover_flag, &attack_flag, new_inp_resamp16k, &Voicing_flag, realBuffer, imagBuffer, &hq_core_type ); - - if ( st->mdct_sw == MODE2 ) - { - st->bits_frame_nominal = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - initFrameHeader( st ); - - writeFrameHeader( st ); - - if ( ( st->total_brate > ACELP_24k40 && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) - { - st->L_frame = L_FRAME16k; - st->gamma_flt = GAMMA16k_FLT; - st->preemph_fac_flt = PREEMPH_FAC_16k_FLT; - - weight_a_subfr( NB_SUBFR16k, A, Aw, GAMMA16k_FLT, M ); - - if ( st->last_L_frame == L_FRAME && st->ini_frame != 0 ) - { - /* this is just an approximation, but it is sufficient */ - mvr2r( st->lsp_old1, st->lspold_enc, M ); - } - } - else - { - st->L_frame = L_FRAME; - st->gamma_flt = GAMMA1_FLT; - st->preemph_fac_flt = PREEMPH_FAC_FLT; - } - - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->core_brate = st->total_brate; - - st->igf = 0; - hq_core_type = NORMAL_HQ_CORE; - - if ( ( st->bwidth == SWB || st->bwidth == WB ) && st->total_brate <= LRMDCT_CROSSOVER_POINT ) - { - /* note that FB (bitrate >= 24400 bps) is always coded with NORMAL_HQ_CORE */ - hq_core_type = LOW_RATE_HQ_CORE; - } - else if ( st->bwidth == NB ) - { - hq_core_type = LOW_RATE_HQ_CORE; - } - } - - /*---------------------------------------------------------------------* - * Encoding - *---------------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 ) - { - /* write signaling info into the bitstream */ - signaling_enc( st ); - - /*---------------------------------------------------------------------* - * Preprocessing (preparing) for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - core_switching_pre_enc( st, old_inp_12k8, old_inp_16k, 0, 0 ); - - /*---------------------------------------------------------------------* - * ACELP core encoding - *---------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - if ( ( error = acelp_core_enc( st, inp, /*ener,*/ A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, bwe_exc_extended, voice_factors, old_syn_12k8_16k, pitch_buf, &unbits, NULL, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*---------------------------------------------------------------------* - * HQ core encoding - *---------------------------------------------------------------------*/ - - if ( st->core == HQ_CORE ) - { -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - PWord16 *p; - Word16 q = 0; - Word16 overlap, tmp; - Word16 left_overlap, right_overlap; - IF( st->element_mode > EVS_MONO && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - left_overlap = st->hTcxCfg->tcx_mdct_window_lengthFB; - right_overlap = st->hTcxCfg->tcx_mdct_window_delayFB; - Word16 L_frame1 = 640; - - p = st->hTcxCfg->tcx_mdct_window_minimumFB; - tmp = shr( st->hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ); - - Word16 q1 = Q_factor_arr( st->hTcxCfg->tcx_mdct_window_minimumFB_flt, tmp ); - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_mdct_window_minimumFB_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_mdct_window_minimumFB_flt[i + tmp], q1 ); - } - - p = st->hTcxCfg->tcx_mdct_window_transFB; - tmp = shr( st->hTcxCfg->tcx_mdct_window_min_lengthFB, 1 ); - - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_mdct_window_transFB_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_mdct_window_transFB_flt[i + tmp], q1 ); - } - - p = st->hTcxCfg->tcx_aldo_window_2_FB; - tmp = shr( st->hTcxCfg->tcx_mdct_window_delayFB, 1 ); - - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_aldo_window_2_FB_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_aldo_window_2_FB_flt[i + tmp], q1 ); - } - - tmp = st->hTcxCfg->tcx_mdct_window_min_length / 2; - p = st->hTcxCfg->tcx_mdct_window_minimum; - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_mdct_window_minimum_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_mdct_window_minimum_flt[i + tmp], q1 ); - } - - - Word16 l1 = ( shr( left_overlap, 1 ) * 2 ) + sub( L_frame1, shr( add( left_overlap, right_overlap ), 1 ) ) + ( shr( right_overlap, 1 ) * 2 ) - shr( left_overlap, 1 ) + st->hTcxCfg->tcx_offsetFB; - q = Q_factor_arr( st->hTcxEnc->speech_TCX_flt, l1 ) - 1; - st->hTcxEnc->q_speech_TCX = q; - - Word16 offset, overlap1; - offset = negate( shr( st->hTcxCfg->tcx_mdct_window_trans_lengthFB, 1 ) ); - overlap1 = st->hTcxCfg->tcx_mdct_window_trans_lengthFB; - - floatToFixed_arr( st->hTcxEnc->speech_TCX_flt - overlap1 / 2 + offset, st->hTcxEnc->speech_TCX - overlap1 / 2 + offset, q, l1 ); - floatToFixed_arr( st->hTcxEnc->speech_TCX_flt - overlap1 / 2 + offset, st->hTcxEnc->speech_TCX - overlap1 / 2 + offset, q, 2 * L_FRAME48k + 960 ); - - q1 = 15; - tmp = st->hTcxCfg->tcx_mdct_window_half_length / 2; - p = st->hTcxCfg->tcx_mdct_window_half; - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_mdct_window_half_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_mdct_window_half_flt[i + tmp], q1 ); - } - - tmp = st->hTcxCfg->tcx_mdct_window_min_length / 2; - p = st->hTcxCfg->tcx_mdct_window_trans; - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_mdct_window_trans_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_mdct_window_trans_flt[i + tmp], q1 ); - } - - overlap = st->hTcxCfg->tcx_mdct_window_length; - tmp = overlap / 2; - p = st->hTcxCfg->tcx_aldo_window_2; - FOR( i = 0; i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_aldo_window_2_flt[i], q1 ); - } - FOR( i = 0; i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_aldo_window_2_flt[i + tmp], q1 ); - } - - tmp = overlap / 2; - p = st->hTcxCfg->tcx_aldo_window_1_trunc; - FOR( i = -NS2SA( st->sr_core, N_ZERO_MDCT_NS ); i < tmp; i++ ) - { - p[i].v.im = float_to_fix16( st->hTcxCfg->tcx_aldo_window_1_trunc_flt[i], q1 ); - } - FOR( i = -NS2SA( st->sr_core, N_ZERO_MDCT_NS ); i < tmp; i++ ) - { - p[tmp - 1 - i].v.re = float_to_fix16( st->hTcxCfg->tcx_aldo_window_1_trunc_flt[i + tmp], q1 ); - } - - FOR( i = 0; i < L_FRAME32k / 2 + 64; i++ ) - { - st->hTcxEnc->Txnq[i] = float_to_fix16( st->hTcxEnc->Txnq_flt[i], 0 ); - } - } - ELSE - { - FOR( i = 0; i < L_FRAME32k; i++ ) - { - st->hTcxEnc->old_out_fx[i] = float_to_fix16( st->hTcxEnc->old_out[i], 0 ); - } - } - - IF( NE_16( hq_core_type, LOW_RATE_HQ_CORE ) ) - { - IF( NE_16( st->element_mode, EVS_MONO ) ) - { - Word16 temp_e; - - f2me( st->hHQ_core->crest_lp, &st->hHQ_core->crest_lp_fx, &temp_e ); - st->hHQ_core->crest_lp_q = sub( Q31, temp_e ); - f2me( st->hHQ_core->crest_mod_lp, &st->hHQ_core->crest_mod_lp_fx, &temp_e ); - st->hHQ_core->crest_mod_lp_q = sub( Q31, temp_e ); - } - } - - floatToFixed_arr( st->input - delay, st->input_fx - delay, 0, 960 ); -#endif - hq_core_enc_ivas_fx( st, st->input_fx - delay, input_frame, hq_core_type, Voicing_flag, vad_hover_flag ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - IF( EQ_16( hq_core_type, LOW_RATE_HQ_CORE ) ) - { - fixedToFloat_arrL( st->hHQ_core->last_ni_gain_fx, st->hHQ_core->last_ni_gain, Q17, BANDS_MAX ); - fixedToFloat_arr( st->hHQ_core->last_env_fx, st->hHQ_core->last_env, Q1, BANDS_MAX ); - } - ELSE - { - IF( NE_16( st->element_mode, EVS_MONO ) ) - { - - st->hHQ_core->crest_lp = fix_to_float( st->hHQ_core->crest_lp_fx, st->hHQ_core->crest_lp_q ); - st->hHQ_core->crest_mod_lp = fix_to_float( st->hHQ_core->crest_mod_lp_fx, st->hHQ_core->crest_mod_lp_q ); - } - } - IF( st->element_mode > EVS_MONO ) - { - FOR( i = 0; i < L_FRAME32k; i++ ) - { - st->hLPDmem->old_exc_flt[i] = fix16_to_float( st->hLPDmem->old_exc[i], 0 ); - } - } -#endif -#else - hq_core_enc( st, st->input - delay, input_frame, hq_core_type, Voicing_flag, vad_hover_flag ); -#endif - } - - /*---------------------------------------------------------------------* - * Postprocessing for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - core_switching_post_enc( st, old_inp_12k8, old_inp_16k, A ); - - if ( st->core == HQ_CORE ) - { - mvs2s( pitch_orig, st->pitch, 3 ); /* original open-loop pitch values might be altered in core_acelp_tcx20_switching() */ - } - } - - else /* MODE2 */ - { - - /*----------------------------------------------------------------* - * Configuration of core coder/SID - * Write Frame Header - *----------------------------------------------------------------*/ - - configure_core_coder( st ); - - if ( st->mdct_sw != MODE1 ) - { - writeFrameHeader( st ); - } - - /*----------------------------------------------------------------* - * Core-Coder - *----------------------------------------------------------------*/ - - /* Call main encoding function */ - enc_acelp_tcx_main( st, old_inp_16k + L_INP_MEM, Aw, lsp_new, lsp_mid, bwe_exc_extended, voice_factors, pitch_buf, vad_hover_flag ); - - mvs2s( pitch_orig, st->pitch, 3 ); /* populate the original OL pitch values back */ - - /*---------------------------------------------------------------------* - * Postprocessing for Mode 1/2 switching - *---------------------------------------------------------------------*/ - /* TBE for Mode 2 interface */ - if ( st->igf && st->core_brate > SID_2k40 ) - { - if ( st->core == ACELP_CORE ) - { - switch ( st->bwidth ) - { - case WB: - st->extl = WB_TBE; - st->extl_brate = WB_TBE_0k35; - break; - - case SWB: - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - - if ( st->total_brate < ACELP_13k20 ) - { - st->extl_brate = SWB_TBE_0k95; - } - else if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = SWB_TBE_2k8; - } - - break; - - case FB: - st->extl = FB_TBE; - st->extl_brate = FB_TBE_1k8; - - if ( st->total_brate >= ACELP_24k40 ) - { - st->extl_brate = FB_TBE_3k0; - } - - break; - } - } - else - { - st->coder_type = -1; - st->extl = IGF_BWE; - st->extl_brate = 0; - } - - st->core_brate = st->total_brate - st->extl_brate; - - if ( st->tec_tfa == 1 ) - { - st->core_brate -= BITS_TEC; - st->core_brate -= BITS_TFA; - } - } - - /*----------------------------------------------------------------* - * Complete Bitstream Writing - *----------------------------------------------------------------*/ - - /* Pad the bitstream with zeros and byte-alignment*/ - if ( st->igf && st->core == ACELP_CORE && st->core_brate > SID_2k40 ) - { - padBits = ( ( st->bits_frame + 7 ) / 8 ) * 8 - ( st->hBstr->nb_bits_tot + ( st->rf_target_bits_write - ( ( st->rf_mode == 1 ) ? 1 : 0 ) ) + get_tbe_bits( st->total_brate, st->bwidth, st->rf_mode ) ); - } - else - { - padBits = ( ( st->bits_frame + 7 ) / 8 ) * 8 - ( st->hBstr->nb_bits_tot + ( st->rf_target_bits_write - ( ( st->rf_mode == 1 ) ? 1 : 0 ) ) ); - } - for ( i = 0; i < padBits; i++ ) - { - push_next_indice( st->hBstr, 0, 1 ); - } - } - - /*---------------------------------------------------------------------* - * WB TBE encoding - * WB BWE encoding - *---------------------------------------------------------------------*/ - push_wmops( "BWE_encoding" ); - - if ( st->input_Fs >= 16000 && st->bwidth < SWB ) - { - /* Common pre-processing for WB TBE and WB BWE */ - wb_pre_proc( st, -1, new_inp_resamp16k, hb_speech ); - } - - if ( st->extl == WB_TBE ) - { - /* WB TBE encoder */ - wb_tbe_enc( st, hb_speech, bwe_exc_extended, voice_factors, pitch_buf ); - - if ( st->codec_mode == MODE2 ) - { - tbe_write_bitstream( st ); - } - } - else if ( st->extl == WB_BWE ) - { - /* WB BWE encoder */ - wb_bwe_enc( st, new_inp_resamp16k ); - } - - /*---------------------------------------------------------------------* - * SWB(FB) TBE encoding - * SWB(FB) BWE encoding - *---------------------------------------------------------------------*/ - - if ( !st->Opt_SC_VBR && st->input_Fs >= 32000 ) - { - /* Common pre-processing for SWB(FB) TBE and SWB(FB) BWE */ - swb_pre_proc( st, new_swb_speech, shb_speech, realBuffer, imagBuffer, NULL ); - } - else if ( st->input_Fs >= 32000 ) - { - InitSWBencBufferStates( st->hBWE_TD, shb_speech ); - } - - /* SWB TBE encoder */ - if ( st->extl == SWB_TBE || st->extl == FB_TBE || ( st->igf && st->core == ACELP_CORE && st->extl != WB_TBE ) ) - { - if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) - { - swb_tbe_enc( st, NULL, shb_speech, bwe_exc_extended, voice_factors, fb_exc, pitch_buf ); - - if ( st->extl == FB_TBE ) - { - /* FB TBE encoder */ - fb_tbe_enc( st, st->input, fb_exc ); - } - - if ( st->codec_mode == MODE2 ) - { - if ( st->tec_tfa == 1 ) - { - tecEnc_TBE( &( st->hTECEnc->corrFlag ), st->voicing, st->coder_type ); - - if ( st->coder_type == INACTIVE ) - { - st->tec_flag = 0; - st->hTECEnc->corrFlag = 0; - } - st->tfa_flag = tfaEnc_TBE( st->tfa_enr_flt, st->last_core, st->voicing, pitch_buf ); - set_TEC_TFA_code( st->hTECEnc->corrFlag, &st->tec_flag, &st->tfa_flag ); - } - else - { - st->tec_flag = 0; - st->hTECEnc->corrFlag = 0; - st->tfa_flag = 0; - } - - tbe_write_bitstream( st ); - } - } - } - else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - /* SWB(FB) BWE encoder */ - swb_bwe_enc( st, EVS_MONO, old_inp_12k8, old_inp_16k, old_syn_12k8_16k, new_swb_speech, shb_speech ); - } - else if ( st->extl == SWB_BWE_HIGHRATE || st->extl == FB_BWE_HIGHRATE ) - { - swb_bwe_enc_hr( st, st->input - delay, input_frame, unbits ); - } - - - /*---------------------------------------------------------------------* - * SWB DTX/CNG encoding - *---------------------------------------------------------------------*/ - - if ( st->Opt_DTX_ON && input_frame >= L_FRAME32k ) - { - /* SHB DTX/CNG encoder */ - swb_CNG_enc( st, shb_speech, old_syn_12k8_16k ); - } - - pop_wmops(); - /*---------------------------------------------------------------------* - * Channel-aware mode - write signaling information into the bitstream - *---------------------------------------------------------------------*/ - - signaling_enc_rf( st ); - - - /*---------------------------------------------------------------------* - * Updates - *---------------------------------------------------------------------*/ - - updt_enc_common( st ); - - if ( st->mdct_sw == MODE1 ) - { - st->codec_mode = MODE1; - } - - - if ( st->hTdCngEnc->lp_cng_mode2 ) - { - st->codec_mode = MODE2; - } - - - pop_wmops(); - - return error; -} - - -/*-------------------------------------------------------------------* - * initFrameHeader() - * - * Init Mode 2 frame header - *-------------------------------------------------------------------*/ - -static void initFrameHeader( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t n; - - if ( st->core_brate == SID_2k40 ) - { - /*Get size of frame*/ - st->bits_frame = FRAME_2_4; - st->bits_frame_core += FRAME_2_4 - 4; /*1 bit for SID on/off + 2 bits for bandwith in case of SID + 1 bit CNG type */ - st->frame_size_index = 2; - } - else if ( st->core_brate == FRAME_NO_DATA ) - { - st->bits_frame = FRAME_0; - st->bits_frame_core += st->bits_frame; - st->frame_size_index = 0; - } - else - { - for ( n = 0; n < FRAME_SIZE_NB; n++ ) - { - if ( n < FRAME_SIZE_NB - 1 ) - { - if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal && FrameSizeConfig[n + 1].frame_bits > st->bits_frame_nominal ) - { - st->frame_size_index = n; - st->bits_frame = st->bits_frame_nominal; - st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; - break; - } - } - else - { - if ( FrameSizeConfig[n].frame_bits <= st->bits_frame_nominal ) - { - st->frame_size_index = n; - st->bits_frame = st->bits_frame_nominal; - st->bits_frame_core = st->bits_frame_nominal - FrameSizeConfig[n].transmission_bits - FrameSizeConfig[n].bandwidth_bits - FrameSizeConfig[n].reserved_bits; - break; - } - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * writeFrameHeader() - * - * Write Mode 2 frame header - *-------------------------------------------------------------------*/ - -static void writeFrameHeader( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( st->core_brate != FRAME_NO_DATA ) - { - /* SID flag at 2.4kbps */ - if ( st->core_brate == SID_2k40 ) - { - if ( st->cng_type == FD_CNG ) - { - /* write SID/CNG type flag */ - push_next_indice( hBstr, 1, 1 ); - - /* write bandwidth info */ - push_next_indice( hBstr, st->bwidth, 2 ); - - /* write L_frame */ - if ( st->L_frame == L_FRAME ) - { - push_next_indice( hBstr, 0, 1 ); - } - else - { - push_next_indice( hBstr, 1, 1 ); - } - } - } - else /* active frames */ - { - if ( st->rf_mode == 0 ) - { - push_next_indice( hBstr, st->bwidth - FrameSizeConfig[st->frame_size_index].bandwidth_min, FrameSizeConfig[st->frame_size_index].bandwidth_bits ); - } - } - - /* Write reserved bit */ - if ( FrameSizeConfig[st->frame_size_index].reserved_bits && st->rf_mode == 0 ) - { - push_next_indice( hBstr, 0, FrameSizeConfig[st->frame_size_index].reserved_bits ); - } - } - - return; -} - -/*------------------------------------------------------------------------* - * Configuration of core coder/SID - *------------------------------------------------------------------------*/ - -static void configure_core_coder( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - initFrameHeader( st ); - - if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) - { - if ( st->tcxonly ) - { - st->coder_type = GENERIC; - } - - st->hTcxCfg->coder_type = st->coder_type; - - - if ( !st->tcxonly && !st->localVAD && st->hTcxCfg->coder_type == GENERIC ) - { - st->hTcxCfg->coder_type = UNVOICED; - } - } - - st->igf = getIgfPresent( 0, st->total_brate, st->bwidth, st->rf_mode ); - - if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) - { - st->core_brate = st->total_brate; - } - - return; -} -#endif diff --git a/lib_enc/evs_enc_fx.c b/lib_enc/evs_enc_fx.c index 7a86e177b..4a706969e 100644 --- a/lib_enc/evs_enc_fx.c +++ b/lib_enc/evs_enc_fx.c @@ -19,7 +19,6 @@ * Local function prototypes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void initFrameHeader_loc( Encoder_State *st ); static void writeFrameHeader_loc( Encoder_State *st ); static void configure_core_coder_loc( Encoder_State *st ); @@ -764,4 +763,3 @@ static void configure_core_coder_loc( return; } -#endif diff --git a/lib_enc/ext_sig_ana.c b/lib_enc/ext_sig_ana.c index ce7f82c17..9f9fa4c23 100644 --- a/lib_enc/ext_sig_ana.c +++ b/lib_enc/ext_sig_ana.c @@ -41,410 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * core_signal_analysis_high_bitrate() - * - * - *-------------------------------------------------------------------*/ - -void core_signal_analysis_high_bitrate( - const float *new_samples, - const int16_t T_op[3], /* i : open-loop pitch values for quantiz. */ - float lsp_new[], - float lsp_mid[], - Encoder_State *st, - float *mdst_spectrum[2], - int16_t pTnsSize[], - int16_t pTnsBits[], - int16_t param_core[], - int16_t *ltpBits, - float *windowed_samples, /* i/o: backup of windowed time signal */ - const int16_t L_frame, - const int16_t L_frameTCX, - const int16_t last_element_mode, - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - const int16_t last_overlap = st->hTcxCfg->tcx_last_overlap_mode; - const int16_t curr_overlap = st->hTcxCfg->tcx_curr_overlap_mode; - const int16_t minWindowLen = st->hTcxCfg->tcx_mdct_window_min_lengthFB - 1; - int16_t i, frameno; - int16_t L_subframe; - int16_t left_overlap = -1, right_overlap = -1, folding_offset; - float buf[N_MAX + L_MDCT_OVLP_MAX]; /* Buffer for TCX20/TCX10 windowing */ - float mdstWin[N_MAX + L_MDCT_OVLP_MAX]; /* Buffer for MDST windowing */ - float *powerSpec; - float *tcx20Win; - float tcx5Win[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX]; /* Buffer for TCX5 windowing and interleaving. */ - float *interleaveBuf = tcx5Win; - int16_t nSubframes; - int16_t overlap_mode[3]; - int16_t *transform_type = hTcxEnc->transform_type; - float r[M + 1]; - float A[M + 1]; - float *lsp[2]; - const int16_t tcx10SizeFB = 2 * st->hTcxCfg->tcx5SizeFB; - const int16_t tcx5SizeFB = st->hTcxCfg->tcx5SizeFB; - const int16_t tcx10Size = 2 * st->hTcxCfg->tcx5Size; - int16_t alw_pitch_lag_12k8[2], alw_pitch_lag_12k8_wc = -1; - float alw_voicing[2], alw_voicing_wc = -1; - int16_t disable_ltp = 0; - - if ( last_element_mode != st->element_mode ) - { - disable_ltp = 1; /* disable TCX-LTP in stereo switching to avoid discontinuities in synthesis */ - } - - powerSpec = tcx20Win = buf; /* Share memory for windowed TD signal and for the power spectrum */ - - /*--------------------------------------------------------------* - * Input Signal Processing: copy, HP filter, pre-emphasis - *---------------------------------------------------------------*/ - - if ( st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) - { - /* Copy Samples */ - mvr2r( new_samples, st->new_speech_enc, L_frame ); - } - - /*--------------------------------------------------------------* - * TCX-LTP - *---------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_DFT ) - { - tcx_ltp_encode( st, hTcxEnc->tcxMode, L_frame, st->wspeech_enc, NULL, st->wspeech_enc, T_op, ¶m_core[1 + NOISE_FILL_RANGES], ltpBits, NULL, disable_ltp, st->element_mode ); - } - else if ( st->element_mode != IVAS_CPE_MDCT ) - { - tcx_ltp_encode( st, hTcxEnc->tcxMode, L_frame, st->speech_enc + st->encoderLookahead_enc, hTcxEnc->speech_ltp + st->encoderLookahead_enc, st->speech_enc + st->encoderLookahead_enc, T_op, ¶m_core[1 + NOISE_FILL_RANGES], ltpBits, NULL, disable_ltp, st->element_mode ); - } - - if ( st->tcxonly && st->element_mode != IVAS_CPE_MDCT ) - { - mvr2r( st->speech_enc + st->encoderLookahead_enc, st->new_speech_enc_pe, L_frame ); - - preemph( st->new_speech_enc_pe, st->preemph_fac, L_frame, &( st->mem_preemph_enc ) ); - } - - if ( hTcxEnc->tcxMode == TCX_10 ) - { - mvs2s( ¶m_core[1 + NOISE_FILL_RANGES], ¶m_core[NPRM_DIV + 1 + NOISE_FILL_RANGES], LTPSIZE ); - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - lsp[0] = lsp_new; - lsp[1] = lsp_mid; - } - - /*-------------------------------------------------------------------------* - * Decision matrix for the transform and overlap length - *--------------------------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - alw_pitch_lag_12k8[0] = st->pitch[0]; - alw_pitch_lag_12k8[1] = st->pitch[1]; - alw_voicing[0] = st->voicing[0]; - alw_voicing[1] = st->voicing[1]; - alw_pitch_lag_12k8_wc = min( alw_pitch_lag_12k8[0], alw_pitch_lag_12k8[1] ); - alw_voicing_wc = max( alw_voicing[0], alw_voicing[1] ); - } - - overlap_mode[0] = last_overlap; /* Overlap between the last and the current frame */ - - if ( hTcxEnc->tcxMode == TCX_20 ) - { - nSubframes = 1; - transform_type[0] = TCX_20; - transform_type[1] = TCX_20; - overlap_mode[1] = curr_overlap; /* Overlap between the current and the next frame */ - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - alw_pitch_lag_12k8[0] = alw_pitch_lag_12k8_wc; - alw_voicing[0] = alw_voicing_wc; - } - } - else - { - nSubframes = 2; - if ( curr_overlap == FULL_OVERLAP ) - { - transform_type[0] = TCX_5; - transform_type[1] = TCX_10; - overlap_mode[1] = ( last_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 2nd and 3rd sub-frame */ - } - else if ( last_overlap == FULL_OVERLAP ) - { - transform_type[0] = TCX_10; - transform_type[1] = TCX_5; - overlap_mode[1] = ( curr_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 1st and 2nd sub-frame */ - } - else - { - transform_type[0] = transform_type[1] = TCX_5; - overlap_mode[1] = ( last_overlap == HALF_OVERLAP && curr_overlap == HALF_OVERLAP ) ? HALF_OVERLAP : MIN_OVERLAP; /* Overlap between 2nd and 3rd sub-frame */ - } - overlap_mode[2] = curr_overlap; /* Overlap between the current and the next frame */ - } - - if ( st->igf && transform_type[0] != TCX_20 ) - { - IGFEncResetTCX10BitCounter( st->hIGFEnc ); - } - - for ( frameno = 0; frameno < nSubframes; frameno++ ) - { - /*-------------------------------------------------------------------------* - * Get MDCT output and TNS parameters. Apply TNS in the spectrum if needed - *--------------------------------------------------------------------------*/ - - L_subframe = L_frameTCX / nSubframes; - - if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - wtda( hTcxEnc->new_speech_TCX, tcx20Win, NULL, overlap_mode[frameno], overlap_mode[frameno + 1], L_frameTCX ); - - if ( windowed_samples != NULL ) /* store overlap data for later */ - { - assert( frameno == 0 ); - windowed_samples[0] = (float) overlap_mode[frameno]; - windowed_samples[1] = (float) overlap_mode[frameno + 1]; - } - if ( st->element_mode != IVAS_CPE_MDCT ) - { - /* Windowing of the 2xTCX5 subframes or 1xTCX10 or 1xTCX20 */ - WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, mdstWin, 1, 1 ); - } - } - else - { - /* Windowing of the 2xTCX5 subframes or 1xTCX10 or 1xTCX20 */ - WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno], overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, tcx20Win, st->element_mode != IVAS_CPE_MDCT, 1 ); - - if ( windowed_samples != NULL ) /* save windowed speech_TCX samples */ - { - assert( L_subframe + ( left_overlap + right_overlap ) / 2 < 2 * L_FRAME_MAX / nSubframes - L_FRAME_MAX / 8 ); - windowed_samples[frameno * L_FRAME_MAX + 0] = (float) overlap_mode[frameno]; - windowed_samples[frameno * L_FRAME_MAX + 1] = (float) overlap_mode[frameno + 1]; - mvr2r( tcx20Win, windowed_samples + frameno * L_FRAME_MAX + 2, L_subframe + ( left_overlap + right_overlap ) / 2 ); - } - } - - if ( transform_type[frameno] == TCX_5 ) - { - /* Outer left folding */ - for ( i = 0; i < left_overlap / 2; i++ ) - { - tcx20Win[left_overlap / 2 + i] -= tcx20Win[left_overlap / 2 - 1 - i]; - } - - if ( st->element_mode == IVAS_CPE_MDCT && frameno == 0 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) - { - for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ - { - tcx20Win[left_overlap + i] -= hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; - } - } - - /* Outer right folding */ - for ( i = 0; i < right_overlap / 2; i++ ) - { - tcx20Win[L_subframe + left_overlap / 2 - 1 - i] += tcx20Win[L_subframe + left_overlap / 2 + i]; - } - - /* 2xTCX5 */ - L_subframe = tcx5SizeFB; - folding_offset = left_overlap / 2; - - for ( i = 0; i < 2; i++ ) - { - WindowSignal( st->hTcxCfg, folding_offset, i == 0 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, i == 1 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, &left_overlap, &right_overlap, tcx20Win + i * tcx5SizeFB, &L_subframe, tcx5Win, st->element_mode != IVAS_CPE_MDCT, 1 ); - - TCX_MDCT( tcx5Win, hTcxEnc->spectrum[frameno] + i * tcx5SizeFB, left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - - /* high-band gain control in case of BWS */ - if ( st->bwidth_sw_cnt > 0 ) - { - v_multc( hTcxEnc->spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, hTcxEnc->spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), L_subframe - L_FRAME16k / ( 2 * nSubframes ) ); - } - } - } - else /* transform_type[frameno] != TCX_5 */ - { - assert( transform_type[frameno] == TCX_10 || transform_type[frameno] == TCX_20 ); - - if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - edct( tcx20Win, hTcxEnc->spectrum[frameno], L_subframe, st->element_mode ); - - v_multc( hTcxEnc->spectrum[frameno], (float) sqrt( (float) NORM_MDCT_FACTOR / L_subframe ), hTcxEnc->spectrum[frameno], L_subframe ); - } - else - { - /* TCX20/TCX10 */ - if ( st->element_mode == IVAS_CPE_MDCT && frameno == 0 && transform_type[0] == TCX_10 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) - { - for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ - { - tcx20Win[left_overlap + i] -= hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; - } - } - - TCX_MDCT( tcx20Win, hTcxEnc->spectrum[frameno], left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - } - - /* high-band gain control in case of BWS */ - if ( st->bwidth_sw_cnt > 0 ) - { - v_multc( hTcxEnc->spectrum[frameno] + L_FRAME16k / nSubframes, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, hTcxEnc->spectrum[frameno] + L_FRAME16k / nSubframes, L_subframe - L_FRAME16k / nSubframes ); - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - /* For TCX20 at bitrates up to 64 kbps we need the power spectrum */ - if ( hTcxEnc->tcxMode == TCX_20 && ( st->total_brate < HQ_96k || st->igf ) ) - { - /* Compute noise-measure flags for spectrum filling and quantization */ - AnalyzePowerSpectrum( st, L_subframe * st->L_frame / hTcxEnc->L_frameTCX, L_subframe, left_overlap, right_overlap, hTcxEnc->spectrum[frameno], ( ( hTcxEnc->tcxMode == TCX_20 ) && ( st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) ) ? mdstWin : tcx20Win, powerSpec ); - } - } - } - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - L_subframe = L_frameTCX / nSubframes; - - if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - wtda_ext( hTcxEnc->new_speech_TCX, mdstWin, overlap_mode[frameno], overlap_mode[frameno + 1], L_frameTCX, 3 ); - } - else - { - /* Windowing for the MDST */ - WindowSignal( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &left_overlap, &right_overlap, &hTcxEnc->speech_TCX[frameno * tcx10SizeFB], &L_subframe, mdstWin, 0, 1 ); - } - - if ( transform_type[frameno] == TCX_5 ) - { - /* Outer left folding */ - for ( i = 0; i < left_overlap / 2; i++ ) - { - mdstWin[left_overlap / 2 + i] += mdstWin[left_overlap / 2 - 1 - i]; - } - - if ( frameno == 0 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) - { - for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ - { - mdstWin[left_overlap + i] += hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; - } - } - - /* Outer right folding */ - for ( i = 0; i < right_overlap / 2; i++ ) - { - mdstWin[L_subframe + left_overlap / 2 - 1 - i] -= mdstWin[L_subframe + left_overlap / 2 + i]; - } - - /* 2xTCX5 */ - L_subframe = tcx5SizeFB; - folding_offset = left_overlap / 2; - - for ( i = 0; i < 2; i++ ) - { - WindowSignal( st->hTcxCfg, folding_offset, i == 0 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, i == 1 ? RECTANGULAR_OVERLAP : MIN_OVERLAP, &left_overlap, &right_overlap, mdstWin + i * tcx5SizeFB, &L_subframe, tcx5Win, 0, 1 ); - - TCX_MDST( tcx5Win, mdst_spectrum[frameno] + i * tcx5SizeFB, left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - /* high-band gain control in case of BWS */ - if ( st->bwidth_sw_cnt > 0 ) - { - v_multc( mdst_spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, mdst_spectrum[frameno] + i * tcx5SizeFB + L_FRAME16k / ( 2 * nSubframes ), L_subframe - L_FRAME16k / ( 2 * nSubframes ) ); - } - } - } - else /* transform_type[frameno] != TCX_5 */ - { - if ( transform_type[frameno] == TCX_20 && st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - edst( mdstWin, mdst_spectrum[frameno], L_subframe, st->element_mode ); - - v_multc( mdst_spectrum[frameno], (float) sqrt( (float) NORM_MDCT_FACTOR / L_subframe ), mdst_spectrum[frameno], L_subframe ); - } - else - { - if ( frameno == 0 && transform_type[0] == TCX_10 && overlap_mode[0] == FULL_OVERLAP && L_subframe - left_overlap > minWindowLen ) - { - for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ - { - mdstWin[left_overlap + i] += hTcxEnc->speech_TCX[-1 - i] * st->hTcxCfg->tcx_aldo_window_1_FB[left_overlap / 2 + minWindowLen - i] * st->hTcxCfg->tcx_mdct_window_minimumFB[minWindowLen - i]; - } - } - - TCX_MDST( mdstWin, mdst_spectrum[frameno], left_overlap, L_subframe - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - } - - /* high-band gain control in case of BWS */ - if ( st->bwidth_sw_cnt > 0 ) - { - v_multc( mdst_spectrum[frameno] + L_FRAME16k / nSubframes, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, mdst_spectrum[frameno] + L_FRAME16k / nSubframes, L_subframe - L_FRAME16k / nSubframes ); - } - } - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - TNSAnalysis( st->hTcxCfg, L_frameTCX, st->hTcxCfg->tcx_coded_lines, transform_type[frameno], ( frameno == 0 ) && ( st->last_core == ACELP_CORE ), hTcxEnc->spectrum[frameno], st->hTranDet, -1, &hTcxEnc->tnsData[frameno], &hTcxEnc->fUseTns[frameno], NULL ); - - if ( st->hTcxCfg->fIsTNSAllowed ) - { - EncodeTnsData( st->hTcxCfg->pCurrentTnsConfig, &hTcxEnc->tnsData[frameno], param_core + frameno * NPRM_DIV + 1 + NOISE_FILL_RANGES + LTPSIZE, pTnsSize + frameno, pTnsBits + frameno ); - } - - if ( transform_type[frameno] == TCX_5 ) - { - /* group sub-windows: interleave bins according to their frequencies */ - for ( i = 0; i < tcx5SizeFB; i++ ) - { - interleaveBuf[2 * i] = hTcxEnc->spectrum[frameno][i]; - interleaveBuf[2 * i + 1] = hTcxEnc->spectrum[frameno][tcx5SizeFB + i]; - } - mvr2r( interleaveBuf, hTcxEnc->spectrum[frameno], tcx10SizeFB ); - } - - /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ - - if ( st->tcxonly ) - { - HBAutocorrelation( st->hTcxCfg, overlap_mode[frameno] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno], overlap_mode[frameno + 1] == ALDO_WINDOW ? FULL_OVERLAP : overlap_mode[frameno + 1], &st->speech_enc_pe[frameno * tcx10Size], L_frame / nSubframes, r ); - - adapt_lag_wind( r, M, alw_pitch_lag_12k8[frameno], alw_voicing[frameno], st->sr_core ); - - lev_dur( A, r, M, NULL ); - - a2lsp_stab( A, lsp[nSubframes - 1 - frameno], st->lspold_enc ); - } - - if ( st->igf ) - { - ProcessIGF( st, hTcxEnc->spectrum[frameno], hTcxEnc->spectrum[frameno], powerSpec, transform_type[frameno] == TCX_20, frameno, 0, vad_hover_flag ); - } - } - } - if ( st->element_mode != IVAS_CPE_MDCT ) - { - /* Copy memory */ - mvr2r( lsp_new, st->lspold_enc, M ); - } - - return; -} -#endif diff --git a/lib_enc/ext_sig_ana_fx.c b/lib_enc/ext_sig_ana_fx.c index d43510f99..97d6f3b91 100644 --- a/lib_enc/ext_sig_ana_fx.c +++ b/lib_enc/ext_sig_ana_fx.c @@ -11,10 +11,8 @@ #include "basop_util.h" #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include #include -#endif /*-------------------------------------------------------------------* @@ -626,7 +624,6 @@ void core_signal_analysis_high_bitrate_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * core_signal_analysis_high_bitrate_ivas_fx() * @@ -1424,4 +1421,3 @@ void core_signal_analysis_high_bitrate_ivas_fx( return; } -#endif diff --git a/lib_enc/fd_cng_enc.c b/lib_enc/fd_cng_enc.c index ed55ab7da..474088451 100644 --- a/lib_enc/fd_cng_enc.c +++ b/lib_enc/fd_cng_enc.c @@ -48,287 +48,30 @@ #include "stat_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * initFdCngEnc() * * Initialize FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void initFdCngEnc( - HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ - const int32_t input_Fs, /* i : input signal sampling frequency in Hz */ - const float scale /* i : scaling factor */ -) -{ - int16_t j; - HANDLE_FD_CNG_COM hsCom = hFdCngEnc->hFdCngCom; - - /* Initialize common */ - initFdCngCom_flt( hsCom, scale ); - - /* Configure the Noise Estimator */ - hsCom->numSlots = 16; - hsCom->numCoreBands = 16; - hsCom->regularStopBand = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH ); - if ( hsCom->regularStopBand > 40 ) - { - hsCom->regularStopBand = 40; - } - - hsCom->startBand = 2; - if ( hsCom->regularStopBand == 10 ) - { - hsCom->stopFFTbin = 160; - hsCom->stopBand = 160; - hsCom->nFFTpart = 17; - } - else - { - hsCom->stopFFTbin = 256; - hsCom->stopBand = hsCom->regularStopBand - hsCom->numCoreBands + hsCom->stopFFTbin; - hsCom->nFFTpart = 20; - } - - initPartitions_flt( sidparts_encoder_noise_est, SIZE_SIDPARTS_ENC_NOISE_EST, hsCom->startBand, hsCom->stopBand, hsCom->part, &hsCom->npart, hsCom->midband, hsCom->psize_flt, hsCom->psize_inv_flt, 0 ); - - hsCom->nCLDFBpart = hsCom->npart - hsCom->nFFTpart; - for ( j = 0; j < hsCom->nCLDFBpart; j++ ) - { - hsCom->CLDFBpart[j] = hsCom->part[j + hsCom->nFFTpart] - ( 256 - hsCom->startBand ); - hsCom->CLDFBpsize_inv_flt[j] = hsCom->psize_inv_flt[j + hsCom->nFFTpart]; - } - - /* Initialize the Noise Estimator */ - set_f( hFdCngEnc->msPeriodog, 0.0f, NPART ); - set_f( hFdCngEnc->msBminWin, 0.0f, NPART ); - set_f( hFdCngEnc->msBminSubWin, 0.0f, NPART ); - set_f( hFdCngEnc->msAlpha, 0.0f, NPART ); - set_f( hFdCngEnc->msPsd, 0.0f, NPART ); - set_f( hFdCngEnc->msMinBuf, FLT_MAX, MSNUMSUBFR * NPART ); - set_f( hFdCngEnc->msCurrentMin, FLT_MAX, NPART ); - set_f( hFdCngEnc->msCurrentMinOut, FLT_MAX, NPART ); - set_f( hFdCngEnc->msCurrentMinSubWindow, FLT_MAX, NPART ); - set_f( hFdCngEnc->msPsdFirstMoment, 0.0f, NPART ); - set_f( hFdCngEnc->msPsdSecondMoment, 0.0f, NPART ); - set_f( hFdCngEnc->msNoiseFloor, 0.0f, NPART ); - set_f( hFdCngEnc->energy_ho, 0.0f, NPART ); - set_f( hFdCngEnc->msPeriodogBuf, 0.0f, MSBUFLEN * NPART ); - set_f( hFdCngEnc->msLogPeriodog, 0.0f, NPART ); - set_f( hFdCngEnc->msLogNoiseEst, 0.0f, NPART ); - set_f( hFdCngEnc->mem_coherence, EPSILON, 4 ); - set_f( hFdCngEnc->msNoiseEst_old, 0.0f, NPART ); - set_f( hFdCngEnc->msNoiseEst, 0.0f, NPART ); - set_s( hFdCngEnc->msLocalMinFlag, 0, NPART ); - set_s( hFdCngEnc->msNewMinFlag, 0, NPART ); - hFdCngEnc->msPeriodogBufPtr = 0; - - return; -} - -/*-------------------------------------------------------------------* - * configureFdCngEnc() - * - * Configure FD_CNG - *-------------------------------------------------------------------*/ - -void configureFdCngEnc( - HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: Contains the variables related to the FD-based CNG process */ - const int16_t bwidth, - const int32_t total_brate ) -{ - HANDLE_FD_CNG_COM hsCom = hFdCngEnc->hFdCngCom; - float psizeDec[NPART]; - float psize_invDec[NPART]; - - hsCom->CngBandwidth = bwidth; - if ( hsCom->CngBandwidth == FB ) - { - hsCom->CngBandwidth = SWB; - } - hsCom->CngBitrate = total_brate; - - /* NB configuration */ - if ( bwidth == NB ) - { - hsCom->FdCngSetup = FdCngSetup_nb; - } - - /* WB configuration */ - else if ( bwidth == WB ) - { - /* FFT 6.4kHz, no CLDFB */ - if ( total_brate <= ACELP_8k00 ) - { - hsCom->FdCngSetup = FdCngSetup_wb1; - } - /* FFT 6.4kHz, CLDFB 8.0kHz */ - else if ( total_brate <= ACELP_13k20 ) - { - hsCom->FdCngSetup = FdCngSetup_wb2; - } - /* FFT 8.0kHz, no CLDFB */ - else - { - hsCom->FdCngSetup = FdCngSetup_wb3; - } - } - - /* SWB/FB configuration */ - else - { - /* FFT 6.4kHz, CLDFB 14kHz */ - if ( total_brate <= ACELP_13k20 ) - { - hsCom->FdCngSetup = FdCngSetup_swb1; - } - /* FFT 8.0kHz, CLDFB 16kHz */ - else - { - hsCom->FdCngSetup = FdCngSetup_swb2; - } - } - hsCom->fftlen = hsCom->FdCngSetup.fftlen; - hFdCngEnc->stopFFTbinDec = hsCom->FdCngSetup.stopFFTbin; - - /* Configure the SID quantizer and the Confort Noise Generator */ - - hFdCngEnc->startBandDec = hsCom->startBand; - hFdCngEnc->stopBandDec = hsCom->FdCngSetup.sidPartitions[hsCom->FdCngSetup.numPartitions - 1] + 1; - initPartitions_flt( hsCom->FdCngSetup.sidPartitions, hsCom->FdCngSetup.numPartitions, hFdCngEnc->startBandDec, hFdCngEnc->stopBandDec, hFdCngEnc->partDec, &hFdCngEnc->npartDec, hFdCngEnc->midbandDec, psizeDec, psize_invDec, 0 ); - - if ( hFdCngEnc->stopFFTbinDec == 160 ) - { - hFdCngEnc->nFFTpartDec = 17; - } - else if ( hFdCngEnc->stopFFTbinDec == 256 ) - { - hFdCngEnc->nFFTpartDec = 20; - } - else - { - hFdCngEnc->nFFTpartDec = 21; - } - - switch ( hsCom->fftlen ) - { - case 512: - hsCom->fftSineTab_flt = NULL; - hsCom->olapWinAna_flt = olapWinAna512; - hsCom->olapWinSyn_flt = olapWinSyn256; - break; - case 640: - hsCom->fftSineTab_flt = fftSineTab640; - hsCom->olapWinAna_flt = olapWinAna640; - hsCom->olapWinSyn_flt = olapWinSyn320; - break; - default: - assert( !"Unsupported FFT length for FD-based CNG" ); - break; - } - hsCom->frameSize = shr( hsCom->fftlen, 1 ); - - return; -} -#endif /*-------------------------------------------------------------------* * deleteFdCngEnc() * * Delete the instance of type FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void deleteFdCngEnc( - HANDLE_FD_CNG_ENC *hFdCngEnc /* i/o: FD_CNG structure */ -) -{ - - HANDLE_FD_CNG_ENC hsEnc = *hFdCngEnc; - - IF( hsEnc != NULL ) - { - deleteFdCngCom_fx( &( hsEnc->hFdCngCom ) ); - free( hsEnc ); - *hFdCngEnc = NULL; - } - - return; -} -#endif /*-------------------------------------------------------------------* * resetFdCngEnc() * * Reset the instance of type FD_CNG *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void resetFdCngEnc( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t n; - float totalNoiseIncrease; - - /* Detect fast increase of totalNoise */ - totalNoiseIncrease = st->hNoiseEst->totalNoise - st->last_totalNoise; - st->last_totalNoise = st->hNoiseEst->totalNoise; - if ( totalNoiseIncrease > 0 ) - { - if ( st->totalNoise_increase_len == TOTALNOISE_HIST_SIZE ) - { - for ( n = 0; n < TOTALNOISE_HIST_SIZE - 1; n++ ) - { - st->totalNoise_increase_hist[n] = st->totalNoise_increase_hist[n + 1]; - } - st->totalNoise_increase_hist[TOTALNOISE_HIST_SIZE - 1] = totalNoiseIncrease; - } - else - { - st->totalNoise_increase_hist[st->totalNoise_increase_len] = totalNoiseIncrease; - st->totalNoise_increase_len++; - } - } - else - { - st->totalNoise_increase_len = 0; - } - - totalNoiseIncrease = 0.f; - for ( n = 0; n < st->totalNoise_increase_len; n++ ) - { - totalNoiseIncrease += st->totalNoise_increase_hist[n]; - } - - if ( - ( totalNoiseIncrease > 5 && st->totalNoise_increase_len == TOTALNOISE_HIST_SIZE && st->ini_frame > 150 ) || - ( st->input_bwidth > st->last_input_bwidth ) || - ( st->last_core == AMR_WB_CORE ) ) - { - st->fd_cng_reset_flag = 1; - st->hFdCngEnc->hFdCngCom->msFrCnt_init_counter = 0; - st->hFdCngEnc->hFdCngCom->init_old_flt = FLT_MAX; - } - else if ( st->fd_cng_reset_flag > 0 && st->fd_cng_reset_flag < 10 ) - { - st->fd_cng_reset_flag++; - } - else - { - st->fd_cng_reset_flag = 0; - } - - return; -} -#endif /*-------------------------------------------------------------------* * perform_noise_estimation_enc() * * Perform noise estimation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void perform_noise_estimation_enc_ivas_fx( Word32 *band_energies, /* i: energy in critical bands without minimum noise floor MODE2_E_MIN */ Word16 band_energies_exp, @@ -499,145 +242,12 @@ void perform_noise_estimation_enc_ivas_fx( return; } -#else -void perform_noise_estimation_enc( - float *band_energies, /* i : energy in critical bands without minimum noise floor E_MIN*/ - float *enerBuffer, /* i : energy buffer */ - HANDLE_FD_CNG_ENC hFdCngEnc, /* i/o: CNG structure containing all buffers and variables */ - const int32_t input_Fs, /* i : input sampling rate */ - CPE_ENC_HANDLE hCPE /* i : CPE encoder structure */ -) -{ - int16_t i, j; - int16_t numCoreBands = hFdCngEnc->hFdCngCom->numCoreBands; - int16_t regularStopBand = hFdCngEnc->hFdCngCom->regularStopBand; - int16_t numSlots = hFdCngEnc->hFdCngCom->numSlots; - float numSlots_inv = 1.f / (float) numSlots; /*enough if done only once*/ - float *periodog_flt = hFdCngEnc->hFdCngCom->periodog_flt; - float *ptr_per = periodog_flt; - int16_t npart = hFdCngEnc->hFdCngCom->npart; - int16_t nFFTpart = hFdCngEnc->hFdCngCom->nFFTpart; - float *psize_flt = hFdCngEnc->hFdCngCom->psize_flt; - float *msPeriodog = hFdCngEnc->msPeriodog; - float *msNoiseEst = hFdCngEnc->msNoiseEst; - - float *msLogPeriodog = hFdCngEnc->msLogPeriodog; - float *msLogNoiseEst = hFdCngEnc->msLogNoiseEst; - - float band_res_dft, chan_width_f; - float chan_width_bins; - float scaleEB; - - if ( hCPE != NULL && hCPE->hStereoDft != NULL ) - { - band_res_dft = ( (float) input_Fs ) / hCPE->hStereoDft->NFFT; - chan_width_f = 24000.f / CLDFB_NO_CHANNELS_MAX; - chan_width_bins = chan_width_f / band_res_dft; - - /* Scaling of Energy buffer to get energy per sample, same scaling as for band_energies, 3 is to compensate for the 1/3 scaling in calculate_energy_buffer */ - scaleEB = 3 * 4.0f / ( hCPE->hStereoDft->NFFT * hCPE->hStereoDft->NFFT ); - - /* Scale with number of bins in one band */ - scaleEB = scaleEB / chan_width_bins; - } - else - { - scaleEB = numSlots_inv * hFdCngEnc->hFdCngCom->scalingFactor_flt; - } - - /* preemphasis compensation and grouping of per bin energies into msPeriodog */ - for ( i = 0; i < nFFTpart; i++ ) - { - msPeriodog[i] = 0.5f * ( band_energies[i] + band_energies[i + NB_BANDS] ); - msPeriodog[i] *= preemphCompensation[i]; - } - - /* Adjust to the desired time resolution by averaging the periodograms over the time slots */ - for ( j = numCoreBands; j < regularStopBand; j++ ) - { - ( *ptr_per ) = enerBuffer[j] * scaleEB; - ptr_per++; - } - - /* Adjust filterbank to the desired frequency resolution by averaging over spectral partitions for SID transmission */ - if ( numCoreBands < regularStopBand ) - { - bandcombinepow_flt( periodog_flt, regularStopBand - numCoreBands, hFdCngEnc->hFdCngCom->CLDFBpart, hFdCngEnc->hFdCngCom->nCLDFBpart, hFdCngEnc->hFdCngCom->CLDFBpsize_inv_flt, &msPeriodog[nFFTpart] ); - } - - /* Compress MS inputs */ - compress_range_flt( msPeriodog, msLogPeriodog, npart ); - - /* Call the minimum statistics routine for noise estimation */ - minimum_statistics_flt( npart, nFFTpart, psize_flt, msLogPeriodog, hFdCngEnc->msNoiseFloor, msLogNoiseEst, hFdCngEnc->msAlpha, hFdCngEnc->msPsd, hFdCngEnc->msPsdFirstMoment, hFdCngEnc->msPsdSecondMoment, hFdCngEnc->msMinBuf, hFdCngEnc->msBminWin, hFdCngEnc->msBminSubWin, hFdCngEnc->msCurrentMin, hFdCngEnc->msCurrentMinOut, hFdCngEnc->msCurrentMinSubWindow, hFdCngEnc->msLocalMinFlag, hFdCngEnc->msNewMinFlag, hFdCngEnc->msPeriodogBuf, &( hFdCngEnc->msPeriodogBufPtr ), hFdCngEnc->hFdCngCom, - ENC, ( hCPE == NULL ) ? 0 : hCPE->element_mode ); - - /* Expand MS outputs */ - expand_range_flt( msLogNoiseEst, msNoiseEst, npart ); - - return; -} - -/*-------------------------------------------------------------------* - * AdjustFirstSID() - * - * Adjust the noise estimator at the beginning of each CNG phase (encoder-side) - *-------------------------------------------------------------------*/ - -void AdjustFirstSID( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - float lambda; - int16_t i; - int16_t npart = st->hFdCngEnc->hFdCngCom->npart; - float *msPeriodog = st->hFdCngEnc->msPeriodog; - float *energy_ho = st->hFdCngEnc->energy_ho; - float *msNoiseEst = st->hFdCngEnc->msNoiseEst; - float *msNoiseEst_old = st->hFdCngEnc->msNoiseEst_old; - int16_t *active_frame_counter = &( st->hFdCngEnc->hFdCngCom->active_frame_counter ); - - if ( st->hDtxEnc->cnt_SID == 1 && st->last_core_brate > SID_2k40 ) - { - /* Detect the hangover period and the first SID frame at the beginning of each CNG phase */ - - /* Average input energy over hangover period */ - mvr2r( msPeriodog, energy_ho, npart ); /*First hangover frame*/ - /* Set first SID to current input level but add some smoothing */ - lambda = (float) pow( 0.96f, (float) ( *active_frame_counter + 1 ) ); - v_multc( msNoiseEst_old, lambda, msNoiseEst_old, npart ); - v_multc( energy_ho, 1 - lambda, energy_ho, npart ); - - v_add( msNoiseEst_old, energy_ho, energy_ho, npart ); - for ( i = 0; i < npart; i++ ) - { - if ( msNoiseEst[i] > energy_ho[i] ) - { - msNoiseEst[i] = energy_ho[i]; - } - } - *active_frame_counter = 0; - } - - if ( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ) - { - ( *active_frame_counter )++; /* Count the number of active frames in a row */ - } - else - { - mvr2r( msNoiseEst, msNoiseEst_old, npart ); /* Store the noise estimate obtained in the CNG phases */ - } - - return; -} -#endif /*-------------------------------------------------------------------* * FdCng_encodeSID() * * Generate a bitstream out of the partition levels *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void FdCng_encodeSID_ivas_fx( Encoder_State *st /* i/o: encoder state structure */ ) @@ -866,472 +476,90 @@ void FdCng_encodeSID_ivas_fx( return; } -#else -void FdCng_encodeSID( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t N; - HANDLE_FD_CNG_ENC hFdCngEnc = st->hFdCngEnc; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; - BSTR_ENC_HANDLE hBstr = st->hBstr; - float *E = hFdCngEnc->msNoiseEst; - float gain; - int16_t i, index; - float v[32], e; - int16_t indices[32]; - float w[32]; - float preemph_fac = st->preemph_fac_flt; - - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - float dct_target[FDCNG_VQ_DCT_MAXTRUNC]; - float tot_sig_ext[FDCNG_VQ_MAX_LEN]; - const float gain_q_offset = ( st->element_mode == EVS_MONO ) ? GAIN_Q_OFFSET_EVS : GAIN_Q_OFFSET_IVAS; - - /* Init */ - N = hFdCngEnc->npartDec; - invTrfMatrix = (float *) tmpRAM; /* dynamically filled */ - set_zero( v, FDCNG_VQ_MAX_LEN ); +/*-------------------------------------------------------------------* + * stereoFdCngCoherence() + * + * compute coherence of channels for use in FD-CNG + *-------------------------------------------------------------------*/ +void stereoFdCngCoherence_fx( + Encoder_State **sts, /* i/o: core encoder structures */ + const Word16 last_element_mode, /* i : last element mode */ + Word16 fft_buf_fx[CPE_CHANNELS][2 * L_FFT], /* i : fft buffers for L and R channels fft_exp*/ + Word16 fft_exp ) +{ + const Word16 *pt_fftL, *pt_fftR; + Word16 i_subfr, i; + Word32 cr, ci, eL, eR; + Word16 cr_exp, ci_exp, eL_exp, eR_exp; + Word32 *mem; + Word16 *mem_exp; - /* Convert to LOG */ - e = 0.f; - for ( i = 0; i < N; i++ ) + IF( NE_16( last_element_mode, IVAS_CPE_MDCT ) ) { - v[i] = 10.f * (float) log10( E[i] + 1e-4f ); - e += v[i]; + set32_fx( sts[0]->hFdCngEnc->mem_coherence_fx, EPSILON_FX, 4 ); + set16_fx( sts[0]->hFdCngEnc->mem_coherence_exp, 0, 4 ); } - - /* Normalize MSVQ input */ - gain = 0.f; - for ( i = N_GAIN_MIN; i < N_GAIN_MAX; i++ ) + test(); + test(); + IF( EQ_32( sts[0]->core_brate, -1 ) || EQ_32( sts[1]->core_brate, -1 ) ) { - gain += v[i]; + /* case: at least one channel has triggered VAD -> ACTIVE FRAME */ + IF( EQ_32( sts[0]->core_brate, -1 ) ) + { + sts[1]->total_brate = sts[0]->total_brate; + move32(); + sts[1]->active_cnt = sts[0]->active_cnt; + move16(); + if ( GE_32( sts[1]->active_cnt, CNG_TYPE_HO ) ) + { + sts[1]->last_total_brate_cng = -1; + move16(); + } + } + IF( EQ_32( sts[1]->core_brate, -1 ) ) + { + sts[0]->total_brate = sts[1]->total_brate; + move32(); + sts[0]->active_cnt = sts[1]->active_cnt; + move16(); + if ( GE_16( sts[0]->active_cnt, CNG_TYPE_HO ) ) + { + sts[0]->last_total_brate_cng = -1; + move16(); + } + } + sts[0]->core_brate = -1; + move32(); + sts[1]->core_brate = -1; + move32(); + sts[0]->hDtxEnc->cnt_SID = 0; + move16(); + sts[1]->hDtxEnc->cnt_SID = 0; + move16(); } - - gain /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); - - for ( i = 0; i < N; i++ ) + ELSE IF( LE_32( sts[0]->core_brate, SID_2k40 ) && LE_32( sts[1]->core_brate, SID_2k40 ) ) { - v[i] -= gain; - } + /* case: no VAD for both channels -> INACTIVE FRAME */ + reset_indices_enc( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot ); - /* MSVQ encoder */ - set_f( w, 1.0f, N ); + reset_indices_enc( sts[1]->hBstr, sts[1]->hBstr->nb_ind_tot ); - if ( st->element_mode != EVS_MONO ) - { - /* DCT domain compressed/truncated indices used for first stage */ - /* quantization with stage1 stored in DCT24 domain, stages 2 through 6 directly dearched - in FDCNG band domain - */ - if ( N == FDCNG_VQ_MAX_LEN_WB ) + /* synchronize SID sending for variable SID rate */ + IF( EQ_32( sts[0]->core_brate, sts[1]->core_brate ) ) { - create_IDCT_N_Matrix( invTrfMatrix, N, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); - /* truncated DCT21 analysis */ - - dctT2_N_apply_matrix( (const float *) v, dct_target, FDCNG_VQ_DCT_MAXTRUNC, N, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); - /* truncated IDCT21 extension to 24 bands */ - extend_dctN_input( v, dct_target, N, tot_sig_ext, FDCNG_VQ_MAX_LEN, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); - - - mvr2r( tot_sig_ext, v, FDCNG_VQ_MAX_LEN ); /* write extended result as input to VQ stage #1 */ + sts[0]->core_brate = SID_2k40; + move32(); + sts[1]->core_brate = SID_2k40; + move32(); } - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); - msvq_enc( cdk_37bits_ivas, NULL, NULL, v, levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, w, N, FD_CNG_maxN_37bits, 1, invTrfMatrix, indices ); - - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 1, invTrfMatrix, v, NULL ); - } - else - { /* EVS_MONO tables */ - msvq_enc( cdk_37bits_flt, NULL, NULL, v, levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, w, N, FD_CNG_maxN_37bits, 0, NULL, indices ); - msvq_dec_float( cdk_37bits_flt, NULL, NULL, FD_CNG_stages_37bits, N, FD_CNG_maxN_37bits, indices, 0, NULL, v, NULL ); - } - - - /* Compute gain */ - gain = 0.f; - for ( i = 0; i < N; i++ ) - { - gain += v[i]; - } - - gain = ( e - gain ) / (float) N; - - /* Apply bitrate-dependant scale */ - if ( st->element_mode > EVS_MONO ) - { - apply_scale_flt( &gain, hFdCngCom->CngBandwidth, hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - } - else - { - apply_scale_flt( &gain, hFdCngCom->CngBandwidth, hFdCngCom->CngBitrate, scaleTableMono, SIZE_SCALE_TABLE_MONO ); - } - - /* Quantize gain */ - index = (int16_t) floor( gain * 1.5f + gain_q_offset + 0.5f ); - - if ( index < 0 ) - { - index = 0; - } - - if ( index > 127 ) - { - index = 127; - } - - gain = ( (float) index - gain_q_offset ) / 1.5f; - - /* Apply gain and undo log */ - for ( i = 0; i < N; i++ ) - { - - hFdCngCom->sidNoiseEst_flt[i] = (float) pow( 10.f, ( v[i] + gain ) / 10.f ); - } - - /* NB last band energy compensation */ - if ( hFdCngCom->CngBandwidth == NB ) - { - hFdCngCom->sidNoiseEst_flt[N - 1] *= NB_LAST_BAND_SCALE_FLT; - } - - if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) - { - hFdCngCom->sidNoiseEst_flt[N - 1] *= SWB_13k2_LAST_BAND_SCALE_FLT; - } - - /* Write bitstream */ - if ( st->codec_mode == MODE2 ) - { - for ( i = 0; i < FD_CNG_stages_37bits; i++ ) - { - push_next_indice( hBstr, indices[i], bits_37bits[i] ); - } - - push_next_indice( hBstr, index, 7 ); - } - else - { - push_indice( hBstr, IND_SID_TYPE, 1, 1 ); - push_indice( hBstr, IND_BWIDTH, st->bwidth, 2 ); - push_indice( hBstr, IND_ACELP_16KHZ, st->L_frame == L_FRAME16k ? 1 : 0, 1 ); - - for ( i = 0; i < FD_CNG_stages_37bits; i++ ) - { - push_indice( hBstr, IND_LSF, indices[i], bits_37bits[i] ); - } - - push_indice( hBstr, IND_ENERGY, index, 7 ); - } - - /* Interpolate the bin/band-wise levels from the partition levels */ - scalebands_flt( hFdCngCom->sidNoiseEst_flt, hFdCngEnc->partDec, hFdCngEnc->npartDec, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel_flt, 1 ); - - lpc_from_spectrum_flt( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, preemph_fac ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * generate_comfort_noise_enc() - * - * - *-------------------------------------------------------------------*/ - -void generate_comfort_noise_enc( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t i; - float *ptr_r; - float *ptr_i; - HANDLE_FD_CNG_ENC hFdCngEnc = st->hFdCngEnc; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; - float *cngNoiseLevel_flt = hFdCngCom->cngNoiseLevel_flt; - float *ptr_level = cngNoiseLevel_flt; - int16_t *seed = &( hFdCngCom->seed ); - float scale = 1.f; - float *fftBuffer = hFdCngCom->fftBuffer_flt; - float *timeDomainOutput = hFdCngCom->timeDomainBuffer_flt; - float preemph_fac = st->preemph_fac_flt; - int16_t tcx_transition = 0; - float enr; - - /* Generate Gaussian random noise in real and imaginary parts of the FFT bins - Amplitudes are adjusted to the estimated noise level cngNoiseLevel_flt in each bin */ - if ( hFdCngEnc->startBandDec == 0 ) - { - rand_gauss_flt( &fftBuffer[0], seed ); - fftBuffer[0] *= (float) sqrt( scale * *ptr_level ); /* DC component in FFT */ - ptr_level++; - ptr_r = fftBuffer + 2; - } - else - { - fftBuffer[0] = 0.f; - set_f( fftBuffer + 2, 0.0f, 2 * ( hFdCngEnc->startBandDec - 1 ) ); - ptr_r = fftBuffer + 2 * hFdCngEnc->startBandDec; - } - - ptr_i = ptr_r + 1; - for ( ; ptr_level < cngNoiseLevel_flt + hFdCngEnc->stopFFTbinDec - hFdCngEnc->startBandDec; ptr_level++ ) - { - /* Real part in FFT bins */ - rand_gauss_flt( ptr_r, seed ); - ( *ptr_r ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_r += 2; - /* Imaginary part in FFT bins */ - rand_gauss_flt( ptr_i, seed ); - ( *ptr_i ) *= (float) sqrt( ( scale * *ptr_level ) * 0.5f ); - ptr_i += 2; - } - - /* Remaining FFT bins are set to zero */ - set_f( fftBuffer + 2 * hFdCngEnc->stopFFTbinDec, 0.0f, hFdCngCom->fftlen - 2 * hFdCngEnc->stopFFTbinDec ); - - /* Nyquist frequency is discarded */ - fftBuffer[1] = 0.f; - - /* If previous frame is active, reset the overlap-add buffer */ - if ( st->last_core_brate > SID_2k40 ) - { - set_f( hFdCngCom->olapBufferSynth_flt, 0.0f, hFdCngCom->fftlen ); - - if ( ( st->last_core > ACELP_CORE && st->codec_mode == MODE2 ) || st->codec_mode == MODE1 ) - { - tcx_transition = 1; - } - } - - /* Perform STFT synthesis */ - SynthesisSTFT_flt( fftBuffer, timeDomainOutput, hFdCngCom->olapBufferSynth_flt, hFdCngCom->olapWinSyn_flt, tcx_transition, hFdCngCom, -1, -1 ); - - if ( st->hTdCngEnc != NULL ) - { - /* update CNG excitation energy for LP_CNG */ - /* calculate the residual signal energy */ - enr = cng_energy( st->element_mode, st->bwidth, st->hDtxEnc->CNG_mode, st->hTdCngEnc->CNG_att, hFdCngCom->exc_cng_flt, hFdCngCom->frameSize ); - - st->hTdCngEnc->lp_ener = (float) ( 0.8f * st->hTdCngEnc->lp_ener + 0.2f * pow( 2.0f, enr ) ); - } - - /* Overlap-add when previous frame is active */ - if ( st->last_core_brate > SID_2k40 && st->codec_mode == MODE2 ) - { - float noise[2048], old_exc_ener = 0.f, gain = 0.f, tmp; - int16_t N = hFdCngCom->frameSize; - int16_t seed_loc = hFdCngCom->seed; - float *old_exc, old_Aq[M + 1], *old_syn_pe, old_syn; - - if ( st->last_core > ACELP_CORE ) - { - tcx_windowing_synthesis_current_frame_flt( timeDomainOutput, st->hTcxCfg->tcx_mdct_window_flt, /*Keep sine windows for limiting Time modulation*/ - st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, 0, st->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ? FULL_OVERLAP : st->hTcxCfg->tcx_last_overlap_mode, NULL, NULL, NULL, NULL, NULL, N / 2, st->hTcxCfg->tcx_offset < 0 ? -st->hTcxCfg->tcx_offset : 0, 1, 0, 0 ); - - if ( st->hTcxCfg->last_aldo ) - { - for ( i = 0; i < hFdCngCom->frameSize; i++ ) - { - timeDomainOutput[i] += st->hTcxEnc->old_out[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )]; - } - } - else - { - tcx_windowing_synthesis_past_frame_flt( st->hTcxEnc->Txnq_flt, st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, st->hTcxCfg->tcx_mdct_window_length, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->hTcxCfg->tcx_last_overlap_mode ); - - for ( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) - { - timeDomainOutput[i] += st->hTcxEnc->Txnq_flt[i]; - } - } - } - else - { - lsp2a_stab( st->lsp_old, old_Aq, M ); - old_exc = st->hLPDmem->old_exc_flt + L_EXC_MEM - ( N / 2 ); - old_syn_pe = st->hLPDmem->mem_syn2_flt; - old_syn = st->hLPDmem->syn_flt[M]; - for ( i = 0; i < N / 2; i++ ) - { - old_exc_ener += old_exc[i] * old_exc[i]; - } - - old_exc_ener = (float) sqrt( old_exc_ener / (float) ( N / 2 ) ); - - for ( i = 0; i < N; i++ ) - { - rand_gauss_flt( &( noise[i] ), &( seed_loc ) ); - gain += noise[i] * noise[i]; - } - - gain = old_exc_ener / (float) sqrt( gain / (float) N ); - - for ( i = 0; i < N; i++ ) - { - noise[i] *= gain; - } - - syn_filt( old_Aq, M, noise, noise, N, old_syn_pe, 0 ); - - tmp = old_syn; - - deemph( noise, preemph_fac, N, &tmp ); - - for ( i = 0; i < N / 2; i++ ) - { - timeDomainOutput[i] += noise[i] * hFdCngCom->olapWinSyn_flt[N / 2 + i]; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * cng_energy() - * - * - *-------------------------------------------------------------------*/ - -/*! r: CNG energy */ -float cng_energy( - const int16_t element_mode, /* i : element mode */ - const int16_t bwidth, /* i : audio bandwidh */ - const int16_t CNG_mode, /* i : mode for DTX configuration */ - const float CNG_att, /* i : attenuation factor for CNG */ - const float *exc, /* i : input signal */ - const int16_t len /* i : vector length */ -) -{ - float enr, att; - - /* calculate the residual signal energy */ - enr = dotp( exc, exc, len ) / len; - - /* convert log2 of residual signal energy */ - enr = (float) log10( enr + 0.1f ) / (float) log10( 2.0f ); - - /* decrease the energy in case of WB input */ - if ( element_mode == IVAS_CPE_DFT || element_mode == IVAS_CPE_TD ) - { - enr += CNG_att * FAC_LOG2 / 10.0f; - } - else if ( bwidth != NB ) - { - if ( bwidth == WB ) - { - if ( CNG_mode >= 0 ) - { - /* Bitrate adapted attenuation */ - att = ENR_ATT[CNG_mode]; - } - else - { - /* Use least attenuation for higher bitrates */ - att = ENR_ATT[4]; - } - } - else - { - att = 1.5f; - } - enr -= att; - } - - return ( enr ); -} -#endif - - -/*-------------------------------------------------------------------* - * stereoFdCngCoherence() - * - * compute coherence of channels for use in FD-CNG - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void stereoFdCngCoherence_fx( - Encoder_State **sts, /* i/o: core encoder structures */ - const Word16 last_element_mode, /* i : last element mode */ - Word16 fft_buf_fx[CPE_CHANNELS][2 * L_FFT], /* i : fft buffers for L and R channels fft_exp*/ - Word16 fft_exp ) -{ - const Word16 *pt_fftL, *pt_fftR; - Word16 i_subfr, i; - Word32 cr, ci, eL, eR; - Word16 cr_exp, ci_exp, eL_exp, eR_exp; - Word32 *mem; - Word16 *mem_exp; - - IF( NE_16( last_element_mode, IVAS_CPE_MDCT ) ) - { - set32_fx( sts[0]->hFdCngEnc->mem_coherence_fx, EPSILON_FX, 4 ); - set16_fx( sts[0]->hFdCngEnc->mem_coherence_exp, 0, 4 ); - } - test(); - test(); - IF( EQ_32( sts[0]->core_brate, -1 ) || EQ_32( sts[1]->core_brate, -1 ) ) - { - /* case: at least one channel has triggered VAD -> ACTIVE FRAME */ - IF( EQ_32( sts[0]->core_brate, -1 ) ) - { - sts[1]->total_brate = sts[0]->total_brate; - move32(); - sts[1]->active_cnt = sts[0]->active_cnt; - move16(); - if ( GE_32( sts[1]->active_cnt, CNG_TYPE_HO ) ) - { - sts[1]->last_total_brate_cng = -1; - move16(); - } - } - IF( EQ_32( sts[1]->core_brate, -1 ) ) - { - sts[0]->total_brate = sts[1]->total_brate; - move32(); - sts[0]->active_cnt = sts[1]->active_cnt; - move16(); - if ( GE_16( sts[0]->active_cnt, CNG_TYPE_HO ) ) - { - sts[0]->last_total_brate_cng = -1; - move16(); - } - } - sts[0]->core_brate = -1; - move32(); - sts[1]->core_brate = -1; - move32(); - sts[0]->hDtxEnc->cnt_SID = 0; - move16(); - sts[1]->hDtxEnc->cnt_SID = 0; - move16(); - } - ELSE IF( LE_32( sts[0]->core_brate, SID_2k40 ) && LE_32( sts[1]->core_brate, SID_2k40 ) ) - { - /* case: no VAD for both channels -> INACTIVE FRAME */ - reset_indices_enc( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot ); - - reset_indices_enc( sts[1]->hBstr, sts[1]->hBstr->nb_ind_tot ); - - /* synchronize SID sending for variable SID rate */ - IF( EQ_32( sts[0]->core_brate, sts[1]->core_brate ) ) - { - sts[0]->core_brate = SID_2k40; - move32(); - sts[1]->core_brate = SID_2k40; - move32(); - } - - /* synchronize SID counters */ - sts[0]->hDtxEnc->cnt_SID = s_min( sts[0]->hDtxEnc->cnt_SID, sts[1]->hDtxEnc->cnt_SID ); - sts[1]->hDtxEnc->cnt_SID = sts[0]->hDtxEnc->cnt_SID; - move16(); - move16(); + /* synchronize SID counters */ + sts[0]->hDtxEnc->cnt_SID = s_min( sts[0]->hDtxEnc->cnt_SID, sts[1]->hDtxEnc->cnt_SID ); + sts[1]->hDtxEnc->cnt_SID = sts[0]->hDtxEnc->cnt_SID; + move16(); + move16(); } pt_fftL = fft_buf_fx[0]; @@ -1389,113 +617,13 @@ void stereoFdCngCoherence_fx( move16(); return; } -#else -void stereoFdCngCoherence( - Encoder_State **sts, /* i/o: core encoder structures */ - const int16_t last_element_mode, /* i : last element mode */ - float fft_buff[CPE_CHANNELS][2 * L_FFT] /* i : fft buffers for L and R channels */ -) -{ - const float *pt_fftL, *pt_fftR; - int16_t i_subfr, i; - float cr, ci, eL, eR; - float *mem; - if ( last_element_mode != IVAS_CPE_MDCT ) - { - set_f( sts[0]->hFdCngEnc->mem_coherence, EPSILON, 4 ); - } +/*-------------------------------------------------------------------* + * FdCngEncodeMDCTStereoSID() + * + * Encode DTX parameters and noise shapes into SID for MDCT-Stereo DTX + *-------------------------------------------------------------------*/ - if ( sts[0]->core_brate == -1 || sts[1]->core_brate == -1 ) - { - /* case: at least one channel has triggered VAD -> ACTIVE FRAME */ - if ( sts[0]->core_brate == -1 ) - { - sts[1]->total_brate = sts[0]->total_brate; - sts[1]->active_cnt = sts[0]->active_cnt; - if ( sts[1]->active_cnt >= CNG_TYPE_HO ) - { - sts[1]->last_total_brate_cng = -1; - } - } - if ( sts[1]->core_brate == -1 ) - { - sts[0]->total_brate = sts[1]->total_brate; - sts[0]->active_cnt = sts[1]->active_cnt; - if ( sts[0]->active_cnt >= CNG_TYPE_HO ) - { - sts[0]->last_total_brate_cng = -1; - } - } - sts[0]->core_brate = -1; - sts[1]->core_brate = -1; - sts[0]->hDtxEnc->cnt_SID = 0; - sts[1]->hDtxEnc->cnt_SID = 0; - } - else if ( sts[0]->core_brate <= SID_2k40 && sts[1]->core_brate <= SID_2k40 ) - { - /* case: no VAD for both channels -> INACTIVE FRAME */ - reset_indices_enc( sts[0]->hBstr, sts[0]->hBstr->nb_ind_tot ); - - reset_indices_enc( sts[1]->hBstr, sts[1]->hBstr->nb_ind_tot ); - - /* synchronize SID sending for variable SID rate */ - if ( sts[0]->core_brate != sts[1]->core_brate ) - { - sts[0]->core_brate = SID_2k40; - sts[1]->core_brate = SID_2k40; - } - - /* synchronize SID counters */ - sts[0]->hDtxEnc->cnt_SID = min( sts[0]->hDtxEnc->cnt_SID, sts[1]->hDtxEnc->cnt_SID ); - sts[1]->hDtxEnc->cnt_SID = sts[0]->hDtxEnc->cnt_SID; - } - - pt_fftL = fft_buff[0]; - pt_fftR = fft_buff[1]; - mem = sts[0]->hFdCngEnc->mem_coherence; - - for ( i_subfr = 0; i_subfr < 2; i_subfr++ ) - { - cr = ci = eL = eR = EPSILON; - - cr += pt_fftL[0] * pt_fftR[0] + pt_fftL[L_FFT / 2] * pt_fftR[L_FFT / 2]; - eL += pt_fftL[0] * pt_fftL[0] + pt_fftL[L_FFT / 2] * pt_fftL[L_FFT / 2]; - eR += pt_fftR[0] * pt_fftR[0] + pt_fftR[L_FFT / 2] * pt_fftR[L_FFT / 2]; - - for ( i = 1; i < L_FFT / 2; i++ ) - { - cr += pt_fftL[i] * pt_fftR[i] + pt_fftL[L_FFT - i] * pt_fftR[L_FFT - i]; - ci += -pt_fftL[i] * pt_fftR[L_FFT - i] + pt_fftR[i] * pt_fftL[L_FFT - i]; - eL += pt_fftL[i] * pt_fftL[i] + pt_fftL[L_FFT - i] * pt_fftL[L_FFT - i]; - eR += pt_fftR[i] * pt_fftR[i] + pt_fftR[L_FFT - i] * pt_fftR[L_FFT - i]; - } - - if ( sts[0]->ini_frame <= 50 || ( sts[0]->vad_flag == 0 && sts[1]->vad_flag == 0 ) ) - { - mem[0] = 0.95f * mem[0] + 0.05f * cr; - mem[1] = 0.95f * mem[1] + 0.05f * ci; - mem[2] = 0.95f * mem[2] + 0.05f * eL; - mem[3] = 0.95f * mem[3] + 0.05f * eR; - } - - pt_fftL += L_FFT; - pt_fftR += L_FFT; - } - - sts[0]->hFdCngEnc->hFdCngCom->coherence_flt = sqrtf( ( mem[0] * mem[0] + mem[1] * mem[1] ) / ( mem[2] * mem[3] ) ); - - return; -} -#endif - -/*-------------------------------------------------------------------* - * FdCngEncodeMDCTStereoSID() - * - * Encode DTX parameters and noise shapes into SID for MDCT-Stereo DTX - *-------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED void FdCngEncodeMDCTStereoSID_fx( CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ ) @@ -1510,441 +638,125 @@ void FdCngEncodeMDCTStereoSID_fx( Word16 ms_ptr_e; Word32 *lr_out_ptr_fx[CPE_CHANNELS]; Word16 lr_out_ptr_e[CPE_CHANNELS]; - Word32 logNoiseEst_fx[CPE_CHANNELS][NPART]; - Word32 E_fx[CPE_CHANNELS]; - Word32 gain_fx[CPE_CHANNELS]; - Word16 weights_fx[NPART]; - Word32 side_energy_fx; - Word16 Qside_energy; - Word32 *invTrfMatrix_fx; - Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; /*24*18*/ - invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /* dynamically filled */ - Word32 tot_sig_ext_fx[FDCNG_VQ_MAX_LEN], dct_target_fx[CPE_CHANNELS][FDCNG_VQ_DCT_MAXTRUNC]; /* 24 +2*18*/ - Word16 tmp, tmp_e; - Word16 no_side_flag; - Word16 is_inp_ms; - Word16 size_value, temp_e, gb, shift; - Word32 tmp32, t1, t2; - - is_inp_ms = 0; - move16(); - IF( EQ_16( hCPE->hCoreCoder[0]->cng_sba_flag, 1 ) ) - { - is_inp_ms = 1; - move16(); - } - - /* set pointers and initialize */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch] = hCPE->hCoreCoder[ch]; - lr_in_ptr_fx[ch] = &sts[ch]->hFdCngEnc->msNoiseEst_fx[0]; - lr_in_ptr_e[ch] = sts[ch]->hFdCngEnc->msNoiseEst_fx_exp; - ms_ptr_fx[ch] = &logNoiseEst_fx[ch][0]; - lr_out_ptr_fx[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst[0]; - lr_out_ptr_e[ch] = sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEstExp; - } - N = sts[0]->hFdCngEnc->npartDec; - move16(); - set16_fx( weights_fx, ONE_IN_Q8, NPART ); - - /* apply log and save energy of original left and right channels */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - // E[ch] = 0.0f; - E_fx[ch] = 0; - move32(); - FOR( p = 0; p < N; p++ ) - { - IF( lr_in_ptr_fx[ch][p] ) - { - t1 = BASOP_Util_Log2( lr_in_ptr_fx[ch][p] ); // Q25 - t2 = L_add( t1, L_shl( lr_in_ptr_e[ch], Q25 ) ); // Q25 - } - ELSE - { - t2 = 0; - move32(); - } - ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 - move32(); - E_fx[ch] = L_add( E_fx[ch], L_shr( ms_ptr_fx[ch][p], 4 ) ); // Q19 - move32(); - } - } - ms_ptr_e = Q31 - Q23; - move16(); - - /* M/S transform on log envelopes */ - IF( is_inp_ms == 0 ) - { - convertToMS_fx( N, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q30 ); // ms_ptr_e = Q23; - } - - gb = find_guarded_bits_fx( N ); - side_energy_fx = sum2_f_32_fx( ms_ptr_fx[1], N, gb ); - Qside_energy = sub( sub( shl( sub( 31, ms_ptr_e ), 1 ), 31 ), gb ); - - /* do not transmit side shape if initial noise shapes are very similar */ - IF( LE_32( side_energy_fx, L_shl( 214748365, sub( Qside_energy, Q31 ) ) ) ) - { - no_side_flag = 1; - move16(); - } - ELSE - { - no_side_flag = 0; - move16(); - } - - /* Quantize noise shapes */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - /* Normalize MSVQ input */ - gain_fx[ch] = 0; - move32(); - FOR( p = N_GAIN_MIN; p < N_GAIN_MAX; p++ ) - { - tmp32 = Mpy_32_32( ms_ptr_fx[ch][p], 165191050 ); // Q23 - gain_fx[ch] = L_add( gain_fx[ch], tmp32 ); // Q23 - move32(); - } - - FOR( p = 0; p < N; p++ ) - { - ms_ptr_fx[ch][p] = L_sub( ms_ptr_fx[ch][p], gain_fx[ch] ); - move32(); - } - } - - /* always split channel targetloop */ - - /* extend fdcng envelope from length 21 to a 24 length fdncg domain envelope signal */ - /* High quality cosine smooth basis extension used to not introduce noise in stage#1 DCT24 analysis and subsequent VQ-steps */ - IF( EQ_16( N, FDCNG_VQ_MAX_LEN_WB ) ) - { - size_value = BASOP_Util_Divide1616_Scale( sizeof( tmpRAM_fx ), ( sizeof( Word32 ) ), &temp_e ); /*Q15*/ - size_value = shr( size_value, sub( 15, temp_e ) ); - create_IDCT_N_Matrix_fx( invTrfMatrix_fx, N, FDCNG_VQ_DCT_MAXTRUNC, size_value ); // Q31 /*WB: create truncated IDCT21 matrix */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - /* run DCT_N N==21 , truncated at 18/21 ~= 86% , i.e use a bit better better quality in extrapolation , than subsequent DCT24 analysis which is truncated at 75%*/ - /* truncated DCT 21 analysis */ - dctT2_N_apply_matrix_fx( (const Word32 *) ms_ptr_fx[ch], dct_target_fx[ch], FDCNG_VQ_DCT_MAXTRUNC, N, invTrfMatrix_fx, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); - /* extrapolate extend fdcng envelope signal in the fdncg ienvelope/"time" domain using DCT21 basis vectors, - estimated DCT21 coeffs scaling extended basis vectors are used to create extrapolated length 24 input target envelope signal */ - /* this DCT21 extension does not introduce DCT24 coefficient noise for the subsequent dct24 target analysis, and later in IDCT24 synthesis */ - - /* truncated IDCT 21 extension synthesis */ - extend_dctN_input_fx( ms_ptr_fx[ch], dct_target_fx[ch], N, tot_sig_ext_fx, FDCNG_VQ_MAX_LEN, invTrfMatrix_fx /* DCT_N basis vectors */, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); /* use 18 basis vectors*/ - - Copy32( tot_sig_ext_fx, ms_ptr_fx[ch], FDCNG_VQ_MAX_LEN ); /* write extended result as input to VQ */ - } - } - - size_value = BASOP_Util_Divide1616_Scale( sizeof( tmpRAM_fx ), ( sizeof( Word32 ) ), &temp_e ); /*Q15*/ - size_value = shr( size_value, sub( 15, temp_e ) ); - create_IDCT_N_Matrix_fx( invTrfMatrix_fx, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, size_value ); /*always create/set up IDCT24 matrix in RAM */ - - /* end split */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - /* MSVQ */ - IF( ch ) - { - stages = FD_CNG_JOINT_stages_25bits; - move16(); - } - ELSE - { - stages = FD_CNG_stages_37bits; - move16(); - } - - /* DCT24 domain compressed/truncated indices used for first stage */ - /* mid channel quantization using stages 1 through 6 */ - /* & side channel quantization using stages 1 through 4 */ - - { - msvq_enc_ivas_fx( ivas_cdk_37bits_fx, Q7, NULL, NULL, ms_ptr_fx[ch], ms_ptr_e, levels_37bits, FD_CNG_maxC_37bits, stages, weights_fx, N, FD_CNG_maxN_37bits, 1, invTrfMatrix_fx, indices[ch] ); - msvq_dec_fx( ivas_cdk_37bits_fx, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices[ch], 1, invTrfMatrix_fx, ms_ptr_fx[ch], NULL, 7 ); - } - } - shift = find_guarded_bits_fx( N ); - ms_ptr_e = sub( 31, sub( 20, shift ) ); - - IF( no_side_flag ) - { - set32_fx( ms_ptr_fx[1], 0, N ); - } - - /* undo M/S */ - IF( is_inp_ms == 0 ) - { - convertToMS_fx( N, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q31 ); - } - - /* Compute gain against original left and right channels */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - gain_fx[ch] = 0; - move32(); - - tmp_e = 15; - move16(); - tmp = Inv16( N, &tmp_e ); - FOR( p = 0; p < N; p++ ) - { - gain_fx[ch] = L_add( gain_fx[ch], Mpy_32_16_1( ms_ptr_fx[ch][p], shl( tmp, tmp_e ) ) ); - move32(); - } - gain_fx[ch] = L_sub( L_shl( Mpy_32_16_1( E_fx[ch], shl( tmp, tmp_e ) ), Q23 - Q19 ), L_shl( gain_fx[ch], sub( ms_ptr_e, 8 ) ) ); // Q23 - move32(); - - apply_scale( &gain_fx[ch], sts[ch]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[ch]->element_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - - /* quantize gain */ - gain_idx[ch] = (Word16) Mpy_32_32_r( L_add( gain_fx[ch], 251658240 ), 384 ); - move16(); - gain_idx[ch] = s_max( 0, s_min( 127, gain_idx[ch] ) ); - move16(); - - gain_fx[ch] = Mpy_32_16_1( L_shl( sub( gain_idx[ch], GAIN_Q_OFFSET_IVAS_FX_Q0 ), 23 ), 21845 ); // Q23 - move32(); - } - - /* restore channel noise envelopes */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - HANDLE_FD_CNG_ENC hFdCngEnc = sts[ch]->hFdCngEnc; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; - - tmp_e = 0; - move16(); - Word32 pow; - - Word16 e_lr_out[NPART]; - - FOR( p = 0; p < N; p++ ) - { - pow = L_shl( gain_fx[ch], 8 - ms_ptr_e ); - pow = L_add( ms_ptr_fx[ch][p], pow ); - pow = Mpy_32_32( pow, 214748365 ); /*pow = 0.1*/ - lr_out_ptr_fx[ch][p] = BASOP_Util_fPow( 10, 31, pow, ms_ptr_e, &e_lr_out[p] ); - move32(); - tmp_e = s_max( tmp_e, e_lr_out[p] ); - } - - FOR( p = 0; p < N; p++ ) - { - lr_out_ptr_fx[ch][p] = L_shl( lr_out_ptr_fx[ch][p], e_lr_out[p] - tmp_e ); - move32(); - } - lr_out_ptr_e[ch] = tmp_e; - move32(); - - sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEstExp = tmp_e; - move16(); - - /* scale bands and get scalefactors */ - scalebands( lr_out_ptr_fx[ch], hFdCngEnc->partDec, N, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, sub( hFdCngEnc->stopBandDec, hFdCngEnc->startBandDec ), hFdCngCom->cngNoiseLevel, 1 ); - hFdCngCom->cngNoiseLevelExp = lr_out_ptr_e[ch]; - move16(); - - lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); - - sts[ch]->hDtxEnc->last_CNG_L_frame = sts[ch]->L_frame; - } - - /* quantize channel coherence */ - coh_idx = mult_r( sts[0]->hFdCngEnc->hFdCngCom->coherence_fx, 15 ); - coh_idx = max( 0, min( coh_idx, 15 ) ); - - /* ---- Write SID bitstream ---- */ - - - /* noise shapes and channel gains */ - FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - IF( ch ) - { - stages = FD_CNG_JOINT_stages_25bits; - sts[ch]->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - - /* side info */ - push_indice( sts[ch]->hBstr, IND_SID_TYPE, coh_idx, 4 ); - push_indice( sts[ch]->hBstr, IND_SID_TYPE, no_side_flag, 1 ); - } - ELSE - { - stages = FD_CNG_stages_37bits; - /* side info */ - push_indice( sts[ch]->hBstr, IND_SID_TYPE, 1, 1 ); - push_indice( sts[ch]->hBstr, IND_BWIDTH, sts[0]->bwidth, 2 ); - push_indice( sts[ch]->hBstr, IND_ACELP_16KHZ, sts[0]->L_frame == L_FRAME16k ? 1 : 0, 1 ); - } - - FOR( Word16 i = 0; i < stages; i++ ) - { - push_indice( sts[ch]->hBstr, IND_LSF, indices[ch][i], bits_37bits[i] ); - } - push_indice( sts[ch]->hBstr, IND_ENERGY, gain_idx[ch], 7 ); - } - - /* pad with zeros to reach common SID frame size */ - push_indice( sts[1]->hBstr, IND_ENERGY, 0, ( IVAS_SID_5k2 - 4400 ) / FRAMES_PER_SEC ); - - return; -} -#else -void FdCngEncodeMDCTStereoSID( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ -) -{ - ENC_CORE_HANDLE sts[CPE_CHANNELS]; - float *lr_in_ptr[CPE_CHANNELS]; - float *ms_ptr[CPE_CHANNELS]; - float *lr_out_ptr[CPE_CHANNELS]; - float logNoiseEst[CPE_CHANNELS][NPART]; - float E[CPE_CHANNELS]; - float gain[CPE_CHANNELS]; - float weights[NPART]; - int16_t indices[CPE_CHANNELS][FD_CNG_stages_37bits]; - int16_t gain_idx[CPE_CHANNELS]; - int16_t N, stages, ch, p, coh_idx; - float side_energy; -#ifdef IVAS_FLOAT_FIXED - Word32 *lr_out_ptr_fx[CPE_CHANNELS]; + Word32 logNoiseEst_fx[CPE_CHANNELS][NPART]; + Word32 E_fx[CPE_CHANNELS]; Word32 gain_fx[CPE_CHANNELS]; + Word16 weights_fx[NPART]; Word32 side_energy_fx; + Word16 Qside_energy; Word32 *invTrfMatrix_fx; - Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; /*24*18*/ - invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /* dynamically filled */ -#endif - int16_t no_side_flag; - int16_t is_inp_ms; - - float tot_sig_ext[FDCNG_VQ_MAX_LEN] /*, dct_target[CPE_CHANNELS][FDCNG_VQ_DCT_MAXTRUNC]*/; /* 24 +2*18*/ + Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; /*24*18*/ + invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /* dynamically filled */ Word32 tot_sig_ext_fx[FDCNG_VQ_MAX_LEN], dct_target_fx[CPE_CHANNELS][FDCNG_VQ_DCT_MAXTRUNC]; /* 24 +2*18*/ - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; /*24*18*/ - invTrfMatrix = (float *) tmpRAM; /* dynamically filled */ - + Word16 tmp, tmp_e; + Word16 no_side_flag; + Word16 is_inp_ms; + Word16 size_value, temp_e, gb, shift; + Word32 tmp32, t1, t2; is_inp_ms = 0; - if ( hCPE->hCoreCoder[0]->cng_sba_flag == 1 ) + move16(); + IF( EQ_16( hCPE->hCoreCoder[0]->cng_sba_flag, 1 ) ) { is_inp_ms = 1; + move16(); } /* set pointers and initialize */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { sts[ch] = hCPE->hCoreCoder[ch]; - lr_in_ptr[ch] = &sts[ch]->hFdCngEnc->msNoiseEst[0]; - ms_ptr[ch] = &logNoiseEst[ch][0]; - lr_out_ptr[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst_flt[0]; -#ifdef IVAS_FLOAT_FIXED + lr_in_ptr_fx[ch] = &sts[ch]->hFdCngEnc->msNoiseEst_fx[0]; + lr_in_ptr_e[ch] = sts[ch]->hFdCngEnc->msNoiseEst_fx_exp; + ms_ptr_fx[ch] = &logNoiseEst_fx[ch][0]; lr_out_ptr_fx[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst[0]; -#endif + lr_out_ptr_e[ch] = sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEstExp; } N = sts[0]->hFdCngEnc->npartDec; - set_f( weights, 1.f, NPART ); + move16(); + set16_fx( weights_fx, ONE_IN_Q8, NPART ); /* apply log and save energy of original left and right channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { - E[ch] = 0.0f; - for ( p = 0; p < N; p++ ) + // E[ch] = 0.0f; + E_fx[ch] = 0; + move32(); + FOR( p = 0; p < N; p++ ) { - ms_ptr[ch][p] = 10.f * log10f( lr_in_ptr[ch][p] + EPSILON ); - E[ch] += ms_ptr[ch][p]; + IF( lr_in_ptr_fx[ch][p] ) + { + t1 = BASOP_Util_Log2( lr_in_ptr_fx[ch][p] ); // Q25 + t2 = L_add( t1, L_shl( lr_in_ptr_e[ch], Q25 ) ); // Q25 + } + ELSE + { + t2 = 0; + move32(); + } + ms_ptr_fx[ch][p] = Mpy_32_32( t2, TEN_MULT_LOG10_2_IN_Q29 ); // Q23 + move32(); + E_fx[ch] = L_add( E_fx[ch], L_shr( ms_ptr_fx[ch][p], 4 ) ); // Q19 + move32(); } } -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 ms_ptr_fx[2][NPART]; - Word16 q = s_min( Q_factor_arrL( ms_ptr[0], N ), Q_factor_arrL( ms_ptr[1], N ) ) - 1; - floatToFixed_arrL( ms_ptr[0], ms_ptr_fx[0], q, N ); - floatToFixed_arrL( ms_ptr[1], ms_ptr_fx[1], q, N ); -#endif + ms_ptr_e = Q31 - Q23; + move16(); + /* M/S transform on log envelopes */ - if ( is_inp_ms == 0 ) + IF( is_inp_ms == 0 ) { -#ifndef IVAS_FLOAT_FIXED - convertToMS( N, ms_ptr[0], ms_ptr[1], 0.5f ); -#else - - - convertToMS_fx( N, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q30 ); - - fixedToFloat_arrL( ms_ptr_fx[0], ms_ptr[0], q, N ); - fixedToFloat_arrL( ms_ptr_fx[1], ms_ptr[1], q, N ); -#endif + convertToMS_fx( N, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q30 ); // ms_ptr_e = Q23; } -#ifndef IVAS_FLOAT_FIXED - side_energy = sum2_f( ms_ptr[1], N ); -#else - Word16 gb = find_guarded_bits_fx( N ); + + gb = find_guarded_bits_fx( N ); side_energy_fx = sum2_f_32_fx( ms_ptr_fx[1], N, gb ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - side_energy = fixedToFloat( side_energy_fx, 2 * q - 31 - gb ); -#endif -#endif + Qside_energy = sub( sub( shl( sub( 31, ms_ptr_e ), 1 ), 31 ), gb ); /* do not transmit side shape if initial noise shapes are very similar */ - if ( side_energy <= 0.1f ) + IF( LE_32( side_energy_fx, L_shl( 214748365, sub( Qside_energy, Q31 ) ) ) ) { no_side_flag = 1; + move16(); } - else + ELSE { no_side_flag = 0; + move16(); } /* Quantize noise shapes */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { /* Normalize MSVQ input */ - gain[ch] = 0.f; - for ( p = N_GAIN_MIN; p < N_GAIN_MAX; p++ ) + gain_fx[ch] = 0; + move32(); + FOR( p = N_GAIN_MIN; p < N_GAIN_MAX; p++ ) { - gain[ch] += ms_ptr[ch][p]; + tmp32 = Mpy_32_32( ms_ptr_fx[ch][p], 165191050 ); // Q23 + gain_fx[ch] = L_add( gain_fx[ch], tmp32 ); // Q23 + move32(); } - gain[ch] /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); - for ( p = 0; p < N; p++ ) + FOR( p = 0; p < N; p++ ) { - ms_ptr[ch][p] -= gain[ch]; + ms_ptr_fx[ch][p] = L_sub( ms_ptr_fx[ch][p], gain_fx[ch] ); + move32(); } } + /* always split channel targetloop */ /* extend fdcng envelope from length 21 to a 24 length fdncg domain envelope signal */ /* High quality cosine smooth basis extension used to not introduce noise in stage#1 DCT24 analysis and subsequent VQ-steps */ - if ( N == FDCNG_VQ_MAX_LEN_WB ) + IF( EQ_16( N, FDCNG_VQ_MAX_LEN_WB ) ) { -#ifdef IVAS_FLOAT_FIXED - Word16 size_value, temp_e; size_value = BASOP_Util_Divide1616_Scale( sizeof( tmpRAM_fx ), ( sizeof( Word32 ) ), &temp_e ); /*Q15*/ size_value = shr( size_value, sub( 15, temp_e ) ); create_IDCT_N_Matrix_fx( invTrfMatrix_fx, N, FDCNG_VQ_DCT_MAXTRUNC, size_value ); // Q31 /*WB: create truncated IDCT21 matrix */ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( int i = 0; i < FDCNG_VQ_MAX_LEN; i++ ) - { - fixedToFloat_arrL( tmpRAM_fx[i], tmpRAM[i], Q31, FDCNG_VQ_DCT_MAXTRUNC ); - } - q = s_min( Q_factor_arrL( ms_ptr[0], N ), Q_factor_arrL( ms_ptr[1], N ) ) - 1; - floatToFixed_arrL( ms_ptr[0], ms_ptr_fx[0], q, N ); - floatToFixed_arrL( ms_ptr[1], ms_ptr_fx[1], q, N ); - -#endif -#else - create_IDCT_N_Matrix( invTrfMatrix, N, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); /*WB: create truncated IDCT21 matrix */ -#endif for ( ch = 0; ch < CPE_CHANNELS; ch++ ) { /* run DCT_N N==21 , truncated at 18/21 ~= 86% , i.e use a bit better better quality in extrapolation , than subsequent DCT24 analysis which is truncated at 75%*/ -#ifdef IVAS_FLOAT_FIXED /* truncated DCT 21 analysis */ dctT2_N_apply_matrix_fx( (const Word32 *) ms_ptr_fx[ch], dct_target_fx[ch], FDCNG_VQ_DCT_MAXTRUNC, N, invTrfMatrix_fx, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); /* extrapolate extend fdcng envelope signal in the fdncg ienvelope/"time" domain using DCT21 basis vectors, @@ -1953,49 +765,28 @@ void FdCngEncodeMDCTStereoSID( /* truncated IDCT 21 extension synthesis */ extend_dctN_input_fx( ms_ptr_fx[ch], dct_target_fx[ch], N, tot_sig_ext_fx, FDCNG_VQ_MAX_LEN, invTrfMatrix_fx /* DCT_N basis vectors */, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); /* use 18 basis vectors*/ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( tot_sig_ext_fx, tot_sig_ext, q, FDCNG_VQ_MAX_LEN ); -#endif -#else - /* truncated DCT 21 analysis */ - dctT2_N_apply_matrix( (const float *) ms_ptr[ch], dct_target[ch], FDCNG_VQ_DCT_MAXTRUNC, N, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); - /* extrapolate extend fdcng envelope signal in the fdncg ienvelope/"time" domain using DCT21 basis vectors, - estimated DCT21 coeffs scaling extended basis vectors are used to create extrapolated length 24 input target envelope signal */ - /* this DCT21 extension does not introduce DCT24 coefficient noise for the subsequent dct24 target analysis, and later in IDCT24 synthesis */ - - /* truncated IDCT 21 extension synthesis */ - extend_dctN_input( ms_ptr[ch], dct_target[ch], N, tot_sig_ext, FDCNG_VQ_MAX_LEN, invTrfMatrix /* DCT_N basis vectors */, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); /* use 18 basis vectors*/ -#endif - - mvr2r( tot_sig_ext, ms_ptr[ch], FDCNG_VQ_MAX_LEN ); /* write extended result as input to VQ */ + Copy32( tot_sig_ext_fx, ms_ptr_fx[ch], FDCNG_VQ_MAX_LEN ); /* write extended result as input to VQ */ } } -#ifdef IVAS_FLOAT_FIXED - Word16 size_value, temp_e; + size_value = BASOP_Util_Divide1616_Scale( sizeof( tmpRAM_fx ), ( sizeof( Word32 ) ), &temp_e ); /*Q15*/ size_value = shr( size_value, sub( 15, temp_e ) ); create_IDCT_N_Matrix_fx( invTrfMatrix_fx, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, size_value ); /*always create/set up IDCT24 matrix in RAM */ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( int i = 0; i < FDCNG_VQ_MAX_LEN; i++ ) - { - fixedToFloat_arrL( tmpRAM_fx[i], tmpRAM[i], Q31, FDCNG_VQ_DCT_MAXTRUNC ); - } -#endif -#else - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); /*always create/set up IDCT24 matrix in RAM */ -#endif + /* end split */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { /* MSVQ */ - if ( ch ) + IF( ch ) { stages = FD_CNG_JOINT_stages_25bits; + move16(); } - else + ELSE { stages = FD_CNG_stages_37bits; + move16(); } /* DCT24 domain compressed/truncated indices used for first stage */ @@ -2003,131 +794,107 @@ void FdCngEncodeMDCTStereoSID( /* & side channel quantization using stages 1 through 4 */ { -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 ms_ptr_e; - Word16 weights_fx[24]; - invTrfMatrix_fx = (Word32 *) tmpRAM_fx; - - f2me_buf( ms_ptr[ch], ms_ptr_fx[ch], &ms_ptr_e, N ); - floatToFixed_arrL( invTrfMatrix, invTrfMatrix_fx, Q31, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); - floatToFixed_arr( weights, weights_fx, Q8, 24 ); - -#endif msvq_enc_ivas_fx( ivas_cdk_37bits_fx, Q7, NULL, NULL, ms_ptr_fx[ch], ms_ptr_e, levels_37bits, FD_CNG_maxC_37bits, stages, weights_fx, N, FD_CNG_maxN_37bits, 1, invTrfMatrix_fx, indices[ch] ); msvq_dec_fx( ivas_cdk_37bits_fx, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices[ch], 1, invTrfMatrix_fx, ms_ptr_fx[ch], NULL, 7 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( invTrfMatrix_fx, invTrfMatrix, Q31, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); - Word16 shift = find_guarded_bits_fx( N ); - ms_ptr_e = 31 - ( 20 - shift ); - me2f_buf( ms_ptr_fx[ch], ms_ptr_e, ms_ptr[ch], N ); -#endif -#else - msvq_enc( cdk_37bits_ivas, NULL, NULL, ms_ptr[ch], levels_37bits, FD_CNG_maxC_37bits, stages, weights, N, FD_CNG_maxN_37bits, 1, invTrfMatrix, indices[ch] ); - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, stages, N, FD_CNG_maxN_37bits, indices[ch], 1, invTrfMatrix, ms_ptr[ch], NULL ); -#endif } } + shift = find_guarded_bits_fx( N ); + ms_ptr_e = sub( 31, sub( 20, shift ) ); - if ( no_side_flag ) + IF( no_side_flag ) { - set_zero( ms_ptr[1], N ); + set32_fx( ms_ptr_fx[1], 0, N ); } /* undo M/S */ - if ( is_inp_ms == 0 ) + IF( is_inp_ms == 0 ) { -#ifndef IVAS_FLOAT_FIXED - convertToMS( N, ms_ptr[0], ms_ptr[1], 1.0f ); -#else -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - // Word32 ms_ptr_fx[2][NPART]; - q = s_min( Q_factor_arrL( ms_ptr[0], N ), Q_factor_arrL( ms_ptr[1], N ) ) - 1; - floatToFixed_arrL( ms_ptr[0], ms_ptr_fx[0], q, N ); - floatToFixed_arrL( ms_ptr[1], ms_ptr_fx[1], q, N ); -#endif convertToMS_fx( N, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q31 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( ms_ptr_fx[0], ms_ptr[0], q, N ); - fixedToFloat_arrL( ms_ptr_fx[1], ms_ptr[1], q, N ); -#endif -#endif } /* Compute gain against original left and right channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { - gain[ch] = 0.f; - for ( p = 0; p < N; p++ ) + gain_fx[ch] = 0; + move32(); + + tmp_e = 15; + move16(); + tmp = Inv16( N, &tmp_e ); + FOR( p = 0; p < N; p++ ) { - gain[ch] += ms_ptr[ch][p]; + gain_fx[ch] = L_add( gain_fx[ch], Mpy_32_16_1( ms_ptr_fx[ch][p], shl( tmp, tmp_e ) ) ); + move32(); } - gain[ch] = ( E[ch] - gain[ch] ) / (float) N; -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - gain_fx[ch] = floatToFixed_32( gain[ch], Q23 ); -#endif + gain_fx[ch] = L_sub( L_shl( Mpy_32_16_1( E_fx[ch], shl( tmp, tmp_e ) ), Q23 - Q19 ), L_shl( gain_fx[ch], sub( ms_ptr_e, 8 ) ) ); // Q23 + move32(); + apply_scale( &gain_fx[ch], sts[ch]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[ch]->element_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - gain[ch] = fixedToFloat_32( gain_fx[ch], Q23 ); -#endif -#else - apply_scale_flt( &gain[ch], sts[ch]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[ch]->element_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); -#endif /* quantize gain */ - gain_idx[ch] = (int16_t) floor( gain[ch] * 1.5f + GAIN_Q_OFFSET_IVAS + .5f ); - gain_idx[ch] = max( 0, min( 127, gain_idx[ch] ) ); + gain_idx[ch] = (Word16) Mpy_32_32_r( L_add( gain_fx[ch], 251658240 ), 384 ); + move16(); + gain_idx[ch] = s_max( 0, s_min( 127, gain_idx[ch] ) ); + move16(); - gain[ch] = ( (float) gain_idx[ch] - GAIN_Q_OFFSET_IVAS ) / 1.5f; + gain_fx[ch] = Mpy_32_16_1( L_shl( sub( gain_idx[ch], GAIN_Q_OFFSET_IVAS_FX_Q0 ), 23 ), 21845 ); // Q23 + move32(); } /* restore channel noise envelopes */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { HANDLE_FD_CNG_ENC hFdCngEnc = sts[ch]->hFdCngEnc; HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; - for ( p = 0; p < N; p++ ) + tmp_e = 0; + move16(); + Word32 pow; + + Word16 e_lr_out[NPART]; + + FOR( p = 0; p < N; p++ ) + { + pow = L_shl( gain_fx[ch], 8 - ms_ptr_e ); + pow = L_add( ms_ptr_fx[ch][p], pow ); + pow = Mpy_32_32( pow, 214748365 ); /*pow = 0.1*/ + lr_out_ptr_fx[ch][p] = BASOP_Util_fPow( 10, 31, pow, ms_ptr_e, &e_lr_out[p] ); + move32(); + tmp_e = s_max( tmp_e, e_lr_out[p] ); + } + + FOR( p = 0; p < N; p++ ) { - lr_out_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); + lr_out_ptr_fx[ch][p] = L_shl( lr_out_ptr_fx[ch][p], e_lr_out[p] - tmp_e ); + move32(); } + lr_out_ptr_e[ch] = tmp_e; + move32(); + + sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEstExp = tmp_e; + move16(); -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - q = Q_factor_arrL( lr_out_ptr[ch], N ); - floatToFixed_arrL( lr_out_ptr[ch], lr_out_ptr_fx[ch], q, N ); -#endif /* scale bands and get scalefactors */ scalebands( lr_out_ptr_fx[ch], hFdCngEnc->partDec, N, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, sub( hFdCngEnc->stopBandDec, hFdCngEnc->startBandDec ), hFdCngCom->cngNoiseLevel, 1 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel_flt, q, FFTCLDFBLEN ); -#endif - lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - sts[ch]->preemph_fac_flt = fixedToFloat( sts[ch]->preemph_fac, Q15 ); -#endif -#else - /* scale bands and get scalefactors */ - scalebands_flt( lr_out_ptr[ch], hFdCngEnc->partDec, N, hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel_flt, 1 ); - lpc_from_spectrum_flt( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac_flt ); + hFdCngCom->cngNoiseLevelExp = lr_out_ptr_e[ch]; + move16(); -#endif + lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); sts[ch]->hDtxEnc->last_CNG_L_frame = sts[ch]->L_frame; } /* quantize channel coherence */ - coh_idx = (int16_t) floor( sts[0]->hFdCngEnc->hFdCngCom->coherence_flt * 15.f + 0.5f ); + coh_idx = mult_r( sts[0]->hFdCngEnc->hFdCngCom->coherence_fx, 15 ); coh_idx = max( 0, min( coh_idx, 15 ) ); /* ---- Write SID bitstream ---- */ /* noise shapes and channel gains */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) + FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { - if ( ch ) + IF( ch ) { stages = FD_CNG_JOINT_stages_25bits; sts[ch]->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; @@ -2136,7 +903,7 @@ void FdCngEncodeMDCTStereoSID( push_indice( sts[ch]->hBstr, IND_SID_TYPE, coh_idx, 4 ); push_indice( sts[ch]->hBstr, IND_SID_TYPE, no_side_flag, 1 ); } - else + ELSE { stages = FD_CNG_stages_37bits; /* side info */ @@ -2145,7 +912,7 @@ void FdCngEncodeMDCTStereoSID( push_indice( sts[ch]->hBstr, IND_ACELP_16KHZ, sts[0]->L_frame == L_FRAME16k ? 1 : 0, 1 ); } - for ( int16_t i = 0; i < stages; i++ ) + FOR( Word16 i = 0; i < stages; i++ ) { push_indice( sts[ch]->hBstr, IND_LSF, indices[ch][i], bits_37bits[i] ); } @@ -2155,10 +922,8 @@ void FdCngEncodeMDCTStereoSID( /* pad with zeros to reach common SID frame size */ push_indice( sts[1]->hBstr, IND_ENERGY, 0, ( IVAS_SID_5k2 - 4400 ) / FRAMES_PER_SEC ); - return; } -#endif /*-------------------------------------------------------------------* * FdCngEncodeDiracMDCTStereoSID() @@ -2167,7 +932,6 @@ void FdCngEncodeMDCTStereoSID( * together with Dirac *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void FdCngEncodeDiracMDCTStereoSID_fx( CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ ) @@ -2388,255 +1152,3 @@ void FdCngEncodeDiracMDCTStereoSID_fx( return; } -#else -void FdCngEncodeDiracMDCTStereoSID( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder state structure */ -) -{ - ENC_CORE_HANDLE sts[CPE_CHANNELS]; - float *lr_in_ptr[CPE_CHANNELS]; - float *ms_ptr[CPE_CHANNELS]; - float *lr_out_ptr[CPE_CHANNELS]; -#ifdef IVAS_FLOAT_FIXED - Word32 *lr_out_ptr_fx[CPE_CHANNELS]; -#endif - float logNoiseEst[CPE_CHANNELS][NPART]; - float E[CPE_CHANNELS]; - float gain[CPE_CHANNELS]; - float weights[NPART]; - int16_t N[CPE_CHANNELS]; - int16_t indices[CPE_CHANNELS][FD_CNG_stages_37bits]; - int16_t gain_idx[CPE_CHANNELS]; - int16_t ch, p; - float *invTrfMatrix; - float tmpRAM[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - float dct_target[FDCNG_VQ_DCT_MAXTRUNC]; - float tot_sig_ext[FDCNG_VQ_MAX_LEN]; - invTrfMatrix = (float *) tmpRAM; /* dynamically filled */ - // assert(0); - - /* set pointers and initialize */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch] = hCPE->hCoreCoder[ch]; - N[ch] = sts[ch]->hFdCngEnc->npartDec; - lr_in_ptr[ch] = &sts[ch]->hFdCngEnc->msNoiseEst[0]; - ms_ptr[ch] = &logNoiseEst[ch][0]; - lr_out_ptr[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst_flt[0]; -#ifdef IVAS_FLOAT_FIXED - lr_out_ptr_fx[ch] = &sts[ch]->hFdCngEnc->hFdCngCom->sidNoiseEst[0]; -#endif - } - set_f( weights, 1.f, NPART ); - - /* apply log and save energy of original left and right channels */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - E[ch] = 0.0f; - for ( p = 0; p < N[ch]; p++ ) - { - ms_ptr[ch][p] = 10.f * log10f( lr_in_ptr[ch][p] + EPSILON ); - E[ch] += ms_ptr[ch][p]; - } - } - - /* M/S transform on log envelopes */ -#ifndef IVAS_FLOAT_FIXED - convertToMS( N[0], ms_ptr[0], ms_ptr[1], 0.5f ); -#else - Word32 ms_ptr_fx[2][NPART]; - Word16 q = s_min( Q_factor_arrL( ms_ptr[0], N[0] ), Q_factor_arrL( ms_ptr[1], N[0] ) ) - 1; - floatToFixed_arrL( ms_ptr[0], ms_ptr_fx[0], q, N[0] ); - floatToFixed_arrL( ms_ptr[1], ms_ptr_fx[1], q, N[0] ); - - convertToMS_fx( N[0], ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q30 ); - - fixedToFloat_arrL( ms_ptr_fx[0], ms_ptr[0], q, N[0] ); - fixedToFloat_arrL( ms_ptr_fx[1], ms_ptr[1], q, N[0] ); -#endif - - E[0] = sum_f( ms_ptr[0], N[0] ); - - /* Quantize M noise shape */ - /* Normalize MSVQ input */ - gain[0] = sum_f( ms_ptr[0] + N_GAIN_MIN, N_GAIN_MAX - N_GAIN_MIN ); - gain[0] /= (float) ( N_GAIN_MAX - N_GAIN_MIN ); - - for ( p = 0; p < N[0]; p++ ) - { - ms_ptr[0][p] -= gain[0]; - } - - /* MSVQ */ - /* DCT domain compressed/truncated indices used for first stage */ - /* mid quantization using stages #1 through 6 */ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 *invTrfMatrix_fx; - Word32 tmpRAM_fx[FDCNG_VQ_MAX_LEN][FDCNG_VQ_DCT_MAXTRUNC]; - invTrfMatrix_fx = (Word32 *) tmpRAM_fx; /* dynamically filled */ - Word32 dct_target_fx[FDCNG_VQ_DCT_MAXTRUNC]; - Word16 ms_ptr_e; - Word32 tot_sig_ext_fx[FDCNG_VQ_MAX_LEN]; - - f2me_buf( ms_ptr[0], ms_ptr_fx[0], &ms_ptr_e, FDCNG_VQ_DCT_MAXTRUNC ); - scale_sig32( ms_ptr_fx[0], FDCNG_VQ_DCT_MAXTRUNC, -5 ); // gaurd bits - ms_ptr_e += 5; - -#endif - if ( N[0] == FDCNG_VQ_MAX_LEN_WB ) - { -#ifdef IVAS_FLOAT_FIXED - create_IDCT_N_Matrix_fx( invTrfMatrix_fx, N[0], FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM_fx ) / ( sizeof( Word32 ) ) ); -#else - create_IDCT_N_Matrix( invTrfMatrix, N[0], FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); -#endif - /* truncated DCT 21 analysis */ -#ifdef IVAS_FLOAT_FIXED - dctT2_N_apply_matrix_fx( (const Word32 *) ms_ptr_fx[0], dct_target_fx, FDCNG_VQ_DCT_MAXTRUNC, N[0], invTrfMatrix_fx, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); -#else - dctT2_N_apply_matrix( (const float *) ms_ptr[0], dct_target, FDCNG_VQ_DCT_MAXTRUNC, N[0], invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, DCT_T2_21_XX ); -#endif - /* truncated IDCT21 extension to 24 synthesis */ - -#ifdef IVAS_FLOAT_FIXED - extend_dctN_input_fx( ms_ptr_fx[0], dct_target_fx, N[0], tot_sig_ext_fx, FDCNG_VQ_MAX_LEN, invTrfMatrix_fx, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); /* use 18 basis vectors*/ -#else - extend_dctN_input( ms_ptr[0], dct_target, N[0], tot_sig_ext, FDCNG_VQ_MAX_LEN, invTrfMatrix, FDCNG_VQ_DCT_MAXTRUNC, IDCT_T2_XX_21 ); /* use 18 basis vectors*/ -#endif - - mvr2r( tot_sig_ext, ms_ptr[0], FDCNG_VQ_MAX_LEN ); /* write extended result as input to VQ stage #1 */ - } -#ifdef IVAS_FLOAT_FIXED - create_IDCT_N_Matrix_fx( invTrfMatrix_fx, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( Word32 ) ) ); -#else - create_IDCT_N_Matrix( invTrfMatrix, FDCNG_VQ_MAX_LEN, FDCNG_VQ_DCT_MAXTRUNC, sizeof( tmpRAM ) / ( sizeof( float ) ) ); -#endif - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - me2f_buf( dct_target_fx, ms_ptr_e, dct_target, FDCNG_VQ_DCT_MAXTRUNC ); - me2f_buf( tot_sig_ext_fx, ms_ptr_e, tot_sig_ext, FDCNG_VQ_MAX_LEN ); - fixedToFloat_arrL( invTrfMatrix_fx, invTrfMatrix, Q31, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); -#endif - -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 weights_fx[24]; - - floatToFixed_arr( weights, weights_fx, Q8, 24 ); - -#endif - msvq_enc_ivas_fx( ivas_cdk_37bits_fx, Q7, NULL, NULL, ms_ptr_fx[0], ms_ptr_e, levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, weights_fx, N[0], FD_CNG_maxN_37bits, 1, invTrfMatrix_fx, indices[0] ); - msvq_dec_fx( ivas_cdk_37bits_fx, NULL, NULL, FD_CNG_stages_37bits, N[0], FD_CNG_maxN_37bits, indices[0], 1, invTrfMatrix_fx, ms_ptr_fx[0], NULL, 7 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 shift = find_guarded_bits_fx( N[0] ); - ms_ptr_e = 31 - ( 20 - shift ); - fixedToFloat_arrL( invTrfMatrix_fx, invTrfMatrix, Q31, FDCNG_VQ_MAX_LEN * FDCNG_VQ_DCT_MAXTRUNC ); - me2f_buf( ms_ptr_fx[0], ms_ptr_e, ms_ptr[0], FDCNG_VQ_DCT_MAXTRUNC ); -#endif -#else - msvq_enc( cdk_37bits_ivas, NULL, NULL, ms_ptr[0], levels_37bits, FD_CNG_maxC_37bits, FD_CNG_stages_37bits, weights, N[0], FD_CNG_maxN_37bits, 1, invTrfMatrix, indices[0] ); - msvq_dec_float( cdk_37bits_ivas, NULL, NULL, FD_CNG_stages_37bits, N[0], FD_CNG_maxN_37bits, indices[0], 1, invTrfMatrix, ms_ptr[0], NULL ); -#endif - - - /* set S to zero */ - set_zero( ms_ptr[1], NPART ); - - /* compute M gain */ - gain[0] = sum_f( ms_ptr[0], N[0] ); - gain[0] = ( E[0] - gain[0] ) / (float) N[0]; -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 gain_fx = floatToFixed( gain[0], Q23 ); -#endif - apply_scale( &gain_fx, sts[0]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[0]->hDtxEnc->last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - gain[0] = fixedToFloat( gain_fx, Q23 ); -#endif -#else - apply_scale_flt( &gain[0], sts[0]->hFdCngEnc->hFdCngCom->CngBandwidth, sts[0]->hDtxEnc->last_active_brate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); -#endif - - /* quantize gain */ - gain_idx[0] = (int16_t) floor( gain[0] * 1.5f + GAIN_Q_OFFSET_IVAS + .5f ); - gain_idx[0] = max( 0, min( 127, gain_idx[0] ) ); - - gain[0] = ( (float) gain_idx[0] - GAIN_Q_OFFSET_IVAS ) / 1.5f; - gain[1] = gain[0]; - - /* undo M/S */ -#ifndef IVAS_FLOAT_FIXED - convertToMS( NPART, ms_ptr[0], ms_ptr[1], 1.0f ); -#else - q = s_min( Q_factor_arrL( ms_ptr[0], NPART ), Q_factor_arrL( ms_ptr[1], NPART ) ) - 1; - floatToFixed_arrL( ms_ptr[0], ms_ptr_fx[0], q, NPART ); - floatToFixed_arrL( ms_ptr[1], ms_ptr_fx[1], q, NPART ); - - convertToMS_fx( NPART, ms_ptr_fx[0], ms_ptr_fx[1], ONE_IN_Q31 ); - - fixedToFloat_arrL( ms_ptr_fx[0], ms_ptr[0], q, NPART ); - fixedToFloat_arrL( ms_ptr_fx[1], ms_ptr[1], q, NPART ); -#endif - - /* restore channel noise envelopes */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - HANDLE_FD_CNG_ENC hFdCngEnc = sts[ch]->hFdCngEnc; - HANDLE_FD_CNG_COM hFdCngCom = hFdCngEnc->hFdCngCom; - - for ( p = 0; p < N[0]; p++ ) - { - lr_out_ptr[ch][p] = powf( 10.f, ( ms_ptr[ch][p] + gain[ch] ) / 10.f ); - } - - /* NB last band energy compensation */ - if ( hFdCngCom->CngBandwidth == NB ) - { - lr_out_ptr[ch][N[ch] - 1] *= NB_LAST_BAND_SCALE_FLT; - } - else if ( hFdCngCom->CngBandwidth == SWB && hFdCngCom->CngBitrate <= ACELP_13k20 ) - { - lr_out_ptr[ch][N[ch] - 1] *= SWB_13k2_LAST_BAND_SCALE_FLT; - } -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - q = Q_factor_arrL( lr_out_ptr[ch], N[ch] ); - floatToFixed_arrL( lr_out_ptr[ch], lr_out_ptr_fx[ch], q, N[ch] ); -#endif - /* scale bands and get scalefactors */ - scalebands( lr_out_ptr_fx[ch], hFdCngEnc->partDec, N[ch], hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, sub( hFdCngEnc->stopBandDec, hFdCngEnc->startBandDec ), hFdCngCom->cngNoiseLevel, 1 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arrL( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel_flt, q, FFTCLDFBLEN ); -#endif - lpc_from_spectrum( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - sts[ch]->preemph_fac_flt = fixedToFloat( sts[ch]->preemph_fac, Q15 ); -#endif -#else - /* scale bands and get scalefactors */ - scalebands_flt( lr_out_ptr[ch], hFdCngEnc->partDec, N[ch], hFdCngEnc->midbandDec, hFdCngEnc->nFFTpartDec, hFdCngEnc->stopBandDec - hFdCngEnc->startBandDec, hFdCngCom->cngNoiseLevel_flt, 1 ); - - lpc_from_spectrum_flt( hFdCngCom, hFdCngEnc->startBandDec, hFdCngEnc->stopFFTbinDec, sts[ch]->preemph_fac_flt ); -#endif - sts[ch]->hDtxEnc->last_CNG_L_frame = sts[ch]->L_frame; - } - sts[0]->hFdCngEnc->hFdCngCom->coherence_flt = 0.0f; - sts[1]->hFdCngEnc->hFdCngCom->coherence_flt = 0.0f; - - /* ---- Write SID bitstream ---- */ - - /* side info */ - push_indice( sts[0]->hBstr, IND_SID_TYPE, 1, 1 ); - push_indice( sts[0]->hBstr, IND_BWIDTH, sts[0]->bwidth, 2 ); - push_indice( sts[0]->hBstr, IND_ACELP_16KHZ, sts[0]->L_frame == L_FRAME16k ? 1 : 0, 1 ); - - /* noise shapes and channel gains */ - for ( int16_t i = 0; i < FD_CNG_stages_37bits; i++ ) - { - push_indice( sts[0]->hBstr, IND_LSF, indices[0][i], bits_37bits[i] ); - } - push_indice( sts[0]->hBstr, IND_ENERGY, gain_idx[0], 7 ); - - return; -} -#endif diff --git a/lib_enc/fd_cng_enc_fx.c b/lib_enc/fd_cng_enc_fx.c index 3ed840648..07a5e2a9c 100644 --- a/lib_enc/fd_cng_enc_fx.c +++ b/lib_enc/fd_cng_enc_fx.c @@ -1690,7 +1690,6 @@ void generate_comfort_noise_enc_fx( Encoder_State *stcod, } } -#ifdef IVAS_FLOAT_FIXED void generate_comfort_noise_enc_ivas_fx( Encoder_State *stcod, Word16 Q_new, Word16 gen_exc ) @@ -2085,7 +2084,6 @@ void generate_comfort_noise_enc_ivas_fx( Encoder_State *stcod, } } } -#endif /*-------------------------------------------------------------------* * cng_energy_fx() diff --git a/lib_enc/find_tar.c b/lib_enc/find_tar.c index bb172ebc2..e7a8ca967 100644 --- a/lib_enc/find_tar.c +++ b/lib_enc/find_tar.c @@ -39,84 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * find_targets() - * - * Find the target vectors for excitaiton search: - *-------------------------------------------------------------------*/ - -void find_targets( - const float *speech, /* i : pointer to the speech frame */ - const float *mem_syn, /* i : memory of the synthesis filter */ - const int16_t i_subfr, /* i : subframe index */ - float *mem_w0, /* i/o: weighting filter denominator memory */ - const float *p_Aq, /* i : interpolated quantized A(z) filter */ - const float *res, /* i : residual signal */ - const int16_t L_subfr, /* i : length of vectors for gain quantization */ - const float *Ap, /* i : unquantized A(z) filter with bandwidth expansion */ - const float tilt_fac, /* i : tilt factor */ - float *xn, /* o : Close-loop Pitch search target vector */ - float *cn, /* o : target vector in residual domain */ - float *h1 /* o : impulse response of weighted synthesis filter */ -) -{ - int16_t i; - float error[M + 6 * L_SUBFR]; /* error of quantization */ - float tmp_fl[M + 3 * L_SUBFR], tmp; - - /*------------------------------------------------------------------------* - * Find the target vector for excitation search: - * - * |------| res[n] - * speech[n]---| A(z) |-------- - * |------| | |--------| error[n] |------| - * zero -- (-)--| 1/A(z) |-----------| W(z) |-- target - * exc |--------| |------| - * - * Instead of subtracting the zero-input response of filters from - * the weighted input speech, the above configuration is used to - * compute the target vector. - *-----------------------------------------------------------------------*/ - - for ( i = 0; i < M; i++ ) - { - error[i] = speech[i + i_subfr - M] - mem_syn[i]; - } - - syn_filt( p_Aq, M, &res[i_subfr], error + M, L_subfr, error, 0 ); - residu( Ap, M, error + M, xn, L_subfr ); - deemph( xn, tilt_fac, L_subfr, mem_w0 ); - - /*-----------------------------------------------------------------* - * Find target in residual domain (cn[]) for innovation search - *--------------------------------------------------------------*/ - if ( cn != NULL ) - { - /* first half: xn[] --> cn[] */ - set_f( tmp_fl, 0, M ); - mvr2r( xn, tmp_fl + M, L_subfr / 2 ); - tmp = 0.0f; - - preemph( tmp_fl + M, tilt_fac, L_subfr / 2, &tmp ); - syn_filt( Ap, M, tmp_fl + M, tmp_fl + M, L_subfr / 2, tmp_fl, 0 ); - residu( p_Aq, M, tmp_fl + M, cn, L_subfr / 2 ); - - /* second half: res[] --> cn[] (approximated and faster) */ - mvr2r( &res[i_subfr + ( L_subfr / 2 )], cn + ( L_subfr / 2 ), L_subfr / 2 ); - } - - /*-----------------------------------------------------------------* - * Compute impulse response h1[] of the weighted synthesis filter - *-----------------------------------------------------------------*/ - - set_f( h1, 0, L_subfr ); - mvr2r( Ap, h1, M + 1 ); - syn_filt( p_Aq, M, h1, h1, L_subfr, h1 + ( M + 1 ), 0 ); - tmp = 0.0f; - deemph( h1, tilt_fac, L_subfr, &tmp ); - - return; -} -#endif diff --git a/lib_enc/find_tilt.c b/lib_enc/find_tilt.c index 9366c7728..c5e16ed22 100644 --- a/lib_enc/find_tilt.c +++ b/lib_enc/find_tilt.c @@ -41,29 +41,20 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Local constants *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define FACT 3.0f /* background noise energy estimation adjusting factor - to maintain the ADR about the same */ -#define TH_COR 0.6f /* Minimum correlation for per bin processing */ -#define TH_D 50.0f /* Difference limit between nearest harmonic and a frequency bin */ -#define TH_PIT ( INT_FS_12k8 / ( 2.0f * TH_D ) ) /* Maximum pitch for per bin processing */ -#endif /*-------------------------------------------------------------------* * find_tilt() * * Find LF/HF energy ratio *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void find_tilt_ivas_fx( const Word32 fr_bands[], /* i : energy in frequency bands Q_new*/ const Word32 bckr[], /* i : per band background noise energy estimate Q_new*/ @@ -331,160 +322,3 @@ void find_tilt_ivas_fx( return; } -#else -void find_tilt( - const float fr_bands[], /* i : energy in frequency bands */ - const float bckr[], /* i : per band background noise energy estimate */ - float ee[2], /* o : lf/hf E ration for present frame */ - const int16_t pitch[3], /* i : open loop pitch values for 3 half-frames */ - const float voicing[3], /* i : normalized correlation for 3 half-frames */ - const float *lf_E, /* i : per bin energy for low frequencies */ - const float corr_shift, /* i : normalized correlation correction */ - const int16_t bwidth, /* i : input signal bandwidth */ - const int16_t max_band, /* i : maximum critical band */ - float hp_E[], /* o : energy in HF */ - const int16_t codec_mode, /* i : Mode 1 or 2 */ - float *bckr_tilt_lt, /* i/o: lf/hf E ratio of background noise */ - int16_t Opt_vbr_mode ) -{ - float lp_bckr, hp_bckr, lp_E, freq, f0, f1, f2, mean_voi, bin; - const float *pt_bands, *pt_bckr, *tmp_E, *hf_bands, *pt_E; - int16_t cnt, i, nb_bands; - float th_pit; - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - th_pit = TH_PIT; - - if ( bwidth != NB ) - { - /* WB processing */ - bin = BIN; /* First useful frequency bin ~ 50 Hz */ - pt_bands = fr_bands; - tmp_E = lf_E; - pt_bckr = bckr; - nb_bands = 10; - } - else - { - /* NB processing */ - bin = 3.0f * BIN; /* first useful frequency bin ~ 150 Hz */ - pt_bands = fr_bands + 1; /* exlcude 1st critical band */ - tmp_E = lf_E + 2; /* start at the 3rd bin (150 Hz) */ - pt_bckr = bckr + 1; /* exclude 1st critical band */ - nb_bands = 9; /* nb. of "low" frequency bands taken into account in NB processing */ - } - - /*-----------------------------------------------------------------* - * Find spectrum tilt - *-----------------------------------------------------------------*/ - - pt_E = tmp_E; /* pointer at the 1st useful element of the per-bin energy vector */ - hf_bands = fr_bands; - - /* bckr + voicing */ - lp_bckr = mean( pt_bckr, nb_bands ); /* estimated noise E in first critical bands, up to 1270 Hz */ - hp_bckr = 0.5f * ( bckr[max_band - 1] + bckr[max_band] ); /* estimated noise E in last 2 critical bands */ - *bckr_tilt_lt = 0.9f * *bckr_tilt_lt + 0.1f * lp_bckr / hp_bckr; - - if ( codec_mode == MODE2 || Opt_vbr_mode ) - { - lp_bckr *= FACT; - hp_bckr *= FACT; - } - - mean_voi = 0.5f * ( voicing[1] + voicing[2] ) + corr_shift; - f0 = ( (float) INT_FS_12k8 ) / pitch[2]; - - for ( i = 0; i < 2; i++ ) - { - hp_E[i] = 0.5f * ( hf_bands[max_band - 1] + hf_bands[max_band] ) - hp_bckr; /* average E in last 2 critical bands */ - - if ( !Opt_vbr_mode ) - { - if ( hp_E[i] < E_MIN ) - { - /* to avoid division by 0 */ - hp_E[i] = E_MIN; - } - } - else - { - if ( hp_E[i] < 1.0f ) - { - /* to avoid division by 0 */ - hp_E[i] = 1.0f; - } - } - - - if ( ( mean_voi > TH_COR ) && ( pitch[2] < th_pit ) ) - { - /* high-pitched voiced frames */ - freq = bin; /* 1st useful frequency bin */ - cnt = 0; - lp_E = 0.0f; - f1 = 1.5f * f0; /* middle between 2 harmonics */ - f2 = f0; - - while ( freq <= 1270.0f ) /* end frequency of 10th critical band */ - { - /*pt_E*/ - while ( freq <= f1 ) - { - if ( fabs( freq - f2 ) < TH_D ) /* include only bins sufficiently close to harmonics */ - { - lp_E += *pt_E; - cnt++; - } - freq += BIN; - pt_E++; - } - f1 += f0; - f2 += f0; /* next harmonic */ - } - - lp_E = lp_E / (float) cnt - lp_bckr; - pt_E = tmp_E + VOIC_BINS; /* update for next half-frame */ - } - else - { - /* other than high-pitched voiced frames */ - lp_E = mean( pt_bands, nb_bands ) - lp_bckr; /* average E in first critical bands, up to 1270 Hz */ - } - - if ( !Opt_vbr_mode ) - { - if ( lp_E < E_MIN ) - { - /* avoid negative E due to noise subtraction */ - lp_E = E_MIN; - } - } - else - { - - if ( lp_E < 0.0f ) - { - /* avoid negative E due to noise subtraction */ - lp_E = 0.0f; - } - } - - /* calculate the tilt (LF/HF ratio) */ - ee[i] = lp_E / hp_E[i]; - - if ( bwidth == NB ) /* for NB input, compensate for the missing bands */ - { - ee[i] *= 6.0f; - } - - pt_bands += NB_BANDS; /* update pointers for the next half-frame */ - hf_bands += NB_BANDS; - } - - return; -} -#endif diff --git a/lib_enc/find_uv.c b/lib_enc/find_uv.c index e7d895745..972c40242 100644 --- a/lib_enc/find_uv.c +++ b/lib_enc/find_uv.c @@ -41,19 +41,14 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ #define L_ENR ( NB_SSF + 2 ) -#ifndef IVAS_FLOAT_FIXED -#define VOI_THRLD 0.2f -#endif /*-------------------------------------------------------------------* * find_ener_decrease() @@ -63,49 +58,6 @@ *-------------------------------------------------------------------*/ /*! r: maximum energy ratio */ -#ifndef IVAS_FLOAT_FIXED -static float find_ener_decrease( - const int16_t ind_deltaMax, /* i : index of the beginning of maximum energy search */ - const float *pt_enr_ssf /* i : Pointer to the energy buffer */ -) -{ - int16_t i, j, end, flag; - float maxEnr, minEnr, dE2; - - dE2 = 0.0f; - j = ind_deltaMax + 2; - end = j + L_ENR; - maxEnr = pt_enr_ssf[j]; - j++; - flag = 0; - for ( i = j; i < end; i++ ) - { - if ( pt_enr_ssf[i] > maxEnr && flag == 0 ) - { - maxEnr = pt_enr_ssf[i]; - j++; - } - else - { - flag = 1; - } - } - - minEnr = maxEnr; - for ( i = j; i < end; i++ ) - { - if ( pt_enr_ssf[i] < minEnr ) - { - minEnr = pt_enr_ssf[i]; - } - } - - dE2 = maxEnr / ( minEnr + 1.0e5f ); - - return dE2; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 find_ener_decrease_fx( /* o : maximum energy ratio Q10 */ const Word16 ind_deltaMax, /* i : index of the beginning of maximum energy search */ const Word32 *pt_enr_ssf /* i : Pointer to the energy buffer */ @@ -765,392 +717,8 @@ Word16 find_uv_ivas_fx( /* o : coding typ return coder_type; } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * find_uv() * * Decision about coder type *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: coding type */ -int16_t find_uv( - Encoder_State *st, /* i/o: encoder state structure */ - const float *pitch_fr, /* i : pointer to adjusted fractional pitch (4 val.) */ - const float *voicing_fr, /* i : refined correlation for each subframes */ - const float *speech, /* i : pointer to speech signal for E computation */ - const float *ee, /* i : lf/hf Energy ratio for present frame */ - float *dE1X, /* o : sudden energy increase for S/M classifier */ - const float corr_shift, /* i : normalized correlation correction in noise */ - const float relE, /* i : relative frame energy */ - const float Etot, /* i : total energy */ - const float hp_E[], /* i : energy in HF */ - int16_t *flag_spitch, /* i/o: flag to indicate very short stable pitch and high correlation */ - const int16_t last_core_orig, /* i : original last core */ - STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ -) -{ - const float *pt_speech; - int16_t i, coder_type, ind_deltaMax, tmp_offset_flag, nb_cond, flag_low_relE; - float fac, mean_voi3, mean_ee, relE_thres; - float enr_ssf[4 * NB_SSF + 2]; - float dE1, *pt_enr_ssf, *pt_enr_ssf1, dE2, dE3, dE2_th, ee0_th, ee1_th, voi_th; - float mean_voi3_offset; - float voicing_m, dpit1, dpit2, dpit3; - int16_t Last_Resort; - float vadnoise; - - if ( st->hSC_VBR != NULL ) - { - Last_Resort = st->hSC_VBR->Last_Resort; - vadnoise = st->hSC_VBR->vadnoise; - } - else - { - Last_Resort = 0; - vadnoise = 0; - } - - /*-----------------------------------------------------------------* - * Detect sudden energy increases to catch voice and music attacks (dE1) - * - * - Find maximum energy per short sub-subframe - * two sub-subframe sets are used, shifted by half the sub-subframe length - * - Find maximum energy increase (ratio) between adjacent sub-subframes - *-----------------------------------------------------------------*/ - - /* find maximum energy per sub-subframe */ - pt_speech = speech - SSF; - pt_enr_ssf = enr_ssf + 2 * NB_SSF; - for ( i = 0; i < 2 * ( NB_SSF + 1 ); i++ ) - { - emaximum( pt_speech, SSF, pt_enr_ssf ); - pt_speech += ( SSF / 2 ); - pt_enr_ssf++; - } - - dE1 = 0.0f; - ind_deltaMax = 0; - pt_enr_ssf = enr_ssf + 2 * NB_SSF; - pt_enr_ssf1 = pt_enr_ssf + 2; - - /* test on energy increase between adjacent sub-subframes */ - for ( i = 0; i < 2 * NB_SSF; i++ ) - { - fac = *pt_enr_ssf1 / ( *pt_enr_ssf + 1.0f ); - if ( fac > dE1 ) - { - dE1 = fac; - ind_deltaMax = i; - } - - pt_enr_ssf++; - pt_enr_ssf1++; - } - - if ( hStereoClassif != NULL ) - { - if ( st->idchan == 0 ) - { - hStereoClassif->dE1_ch1 = dE1; - } - else - { - hStereoClassif->dE1_ch2 = dE1; - } - } - - if ( dE1X != NULL ) - { - *dE1X = dE1; - } - - /*-----------------------------------------------------------------* - * Average spectral tilt - * Average voicing (normalized correlation) - *-----------------------------------------------------------------*/ - - mean_ee = 1.0f / 3.0f * ( st->ee_old + ee[0] + ee[1] ); - mean_voi3 = 1.0f / 3.0f * ( st->voicing[0] + st->voicing[1] + st->voicing[2] ); - - /*-----------------------------------------------------------------* - * Total frame energy difference (dE3) - *-----------------------------------------------------------------*/ - - dE3 = Etot - st->hNoiseEst->Etot_last; - - /*-----------------------------------------------------------------* - * Energy decrease after spike (dE2) - *-----------------------------------------------------------------*/ - - /* set different thresholds and conditions for NB and WB input */ - if ( st->input_bwidth == NB ) - { - dE2_th = 21.0f; - nb_cond = ( mean_voi3 + corr_shift ) < 0.68f; - } - else - { - dE2_th = 30.0f; - nb_cond = 1; /* no additional condition for WB input */ - } - - /* calcualte maximum energy decrease */ - dE2 = 0.0f; - pt_enr_ssf = enr_ssf + 2 * NB_SSF; - - if ( dE1 > 30.0f && nb_cond ) - { - if ( 2 * NB_SSF - ind_deltaMax < L_ENR ) - { - st->old_ind_deltaMax = ind_deltaMax; - mvr2r( pt_enr_ssf, st->old_enr_ssf, 2 * NB_SSF ); - } - else - { - st->old_ind_deltaMax = -1; - dE2 = find_ener_decrease( ind_deltaMax, pt_enr_ssf ); - if ( dE2 > dE2_th ) - { - st->spike_hyst = 0; - } - } - } - else - { - if ( st->old_ind_deltaMax >= 0 ) - { - mvr2r( st->old_enr_ssf, enr_ssf, 2 * NB_SSF ); - dE2 = find_ener_decrease( st->old_ind_deltaMax, enr_ssf ); - if ( dE2 > dE2_th ) - { - st->spike_hyst = 1; - } - } - st->old_ind_deltaMax = -1; - } - - /*-----------------------------------------------------------------* - * Detection of voiced offsets (tmp_offset_flag) - *-----------------------------------------------------------------*/ - - tmp_offset_flag = 1; - - if ( st->input_bwidth != NB ) - { - ee0_th = 2.4f; - voi_th = 0.74f; - } - else - { - ee0_th = 9.8f; - voi_th = 0.76f; - } - - if ( ( st->last_coder_type_raw == UNVOICED ) || /* previous frame was unvoiced */ - ( ( ee[0] < ee0_th ) && ( hp_E[0] > (float) E_MIN ) && /* energy is concentrated in high frequencies provided that some energy is present in HF. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[0] before */ - ( st->voicing[0] + corr_shift < voi_th ) ) ) /* normalized correlation is low */ - { - tmp_offset_flag = 0; - } - - /*-----------------------------------------------------------------* - * Decision about UC - *-----------------------------------------------------------------*/ - - /* SC-VBR - set additional parameters and thresholds for SC-VBR */ - mean_voi3_offset = 0.0f; - flag_low_relE = 0; - ee1_th = 9.5f; - if ( st->Opt_SC_VBR || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) /* Allow the low energy flag for the secondary channel */ - { - ee1_th = 8.5f; - - /* SC-VBR - determine the threshold on relative energy as a function of lp_noise */ - if ( st->input_bwidth != NB ) - { - if ( Last_Resort == 0 ) - { - relE_thres = 0.650f * st->lp_noise - 33.5f; - } - else - { - relE_thres = 0.700f * st->lp_noise - 33.5f; - } - } - else - { - relE_thres = 0.60f * st->lp_noise - 28.2f; - } - - if ( relE_thres < -25.0f ) - { - relE_thres = -25.0f; - } - - /* SC-VBR = set flag on low relative energy */ - if ( relE < relE_thres ) - { - flag_low_relE = 1; - } - - /* SC-VBR - correction of voicing threshold for NB inputs (important only in noisy conditions) */ - if ( st->input_bwidth == NB && vadnoise < 20.0f ) - { - mean_voi3_offset = 0.05f; - } - } - - /* make decision whether frame is unvoiced */ - coder_type = GENERIC; - if ( st->input_bwidth == NB ) - { - if ( ( ( mean_voi3 + corr_shift < 0.68f + mean_voi3_offset ) && /* normalized correlation low */ - ( ( st->voicing[2] + corr_shift ) < 0.79f ) && /* normalized correlation low on look-ahead - onset detection */ - ( ee[0] < 10.0f ) && ( hp_E[0] > (float) E_MIN ) && /* energy concentrated in high frequencies provided that some energy is present in HF... */ - ( ee[1] < ee1_th ) && ( hp_E[1] > (float) E_MIN ) && /* ... biased towards look-ahead to detect onsets. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[] before */ - ( tmp_offset_flag == 0 ) && /* take care of voiced offsets */ - ( dE1 <= 29.0f ) && /* avoid on sharp energy spikes */ - ( st->old_dE1 <= 29.0f ) && /* + one frame hysteresis */ - ( st->spike_hyst < 0 ) ) || /* avoid after sharp energy spikes followed by decay (e.g. castanets) */ - flag_low_relE ) /* low relative frame energy (only for SC-VBR) */ - { - coder_type = UNVOICED; - } - } - else - { - if ( ( ( mean_voi3 + corr_shift < 0.695f + mean_voi3_offset ) && /* normalized correlation low */ - ( ee[0] < 6.2f ) && ( hp_E[0] > (float) E_MIN ) && /* energy concentrated in high frequencies provided that some energy is present in HF */ - ( ee[1] < 6.2f ) && ( hp_E[1] > (float) E_MIN ) && /* ... biased towards look-ahead to detect onsets. The cast to (float) is needed for Linux i686 (gcc version 4.7.2), otherwise the criterion hp_E[0] > E_MIN holds true if E_MIN was assigned to hp_E[] before */ - ( tmp_offset_flag == 0 ) && /* take care of voiced offsets */ - ( dE1 <= 30.0f ) && /* avoid on sharp energy spikes */ - ( st->old_dE1 <= 30.0f ) && /* + one frame hysteresis */ - ( st->spike_hyst < 0 ) ) || /* avoid after sharp energy spikes followed by decay (e.g. castanets) */ - ( flag_low_relE && st->old_dE1 <= 30.0f ) ) /* low relative frame energy (only for SC-VBR) */ - { - coder_type = UNVOICED; - } - } - - /*-----------------------------------------------------------------* - * Decision about VC - *-----------------------------------------------------------------*/ - - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->set_ppp_generic = 0; - } - - if ( st->localVAD == 1 && coder_type == GENERIC && last_core_orig != AMR_WB_CORE ) - { - if ( ( voicing_fr[0] > 0.605f ) && /* normalized correlation high in 1st sf. */ - ( voicing_fr[1] > 0.605f ) && /* normalized correlation high in 2st sf. */ - ( voicing_fr[2] > 0.605f ) && /* normalized correlation high in 3st sf. */ - ( voicing_fr[3] > 0.605f ) && /* normalized correlation high in 4st sf. */ - ( mean_ee > 4.0f ) && /* energy concentrated in low frequencies */ - ( fabs( pitch_fr[1] - pitch_fr[0] ) < 3.0f ) && /* small OL pitch difference in 1st sf. */ - ( fabs( pitch_fr[2] - pitch_fr[1] ) < 3.0f ) && /* small OL pitch difference in 2nd sf. */ - ( fabs( pitch_fr[3] - pitch_fr[2] ) < 3.0f ) ) /* small OL pitch difference in 3rd sf. */ - { - coder_type = VOICED; - } - else if ( st->Opt_SC_VBR && st->input_bwidth == NB && vadnoise < 20 ) - { - if ( ( voicing_fr[0] > 0.25f ) && /* normalized correlation high in 1st sf. */ - ( voicing_fr[1] > 0.25f ) && /* normalized correlation high in 2st sf. */ - ( voicing_fr[2] > 0.25f ) && /* normalized correlation high in 3st sf. */ - ( voicing_fr[3] > 0.25f ) && /* normalized correlation high in 4st sf. */ - ( mean_ee > 1.0f ) && /* energy concentrated in low frequencies (used 1.0 for WB) */ - ( fabs( pitch_fr[1] - pitch_fr[0] ) < 5.0f ) && /* small OL pitch difference in 1st sf. */ - ( fabs( pitch_fr[2] - pitch_fr[1] ) < 5.0f ) && /* small OL pitch difference in 2nd sf. */ - ( fabs( pitch_fr[3] - pitch_fr[2] ) < 5.0f ) ) /* small OL pitch difference in 3rd sf. */ - { - st->hSC_VBR->set_ppp_generic = 1; - coder_type = VOICED; - } - } - - /* set VOICED mode for frames with very stable pitch and high correlation - and avoid to switch to AUDIO/MUSIC later */ - voicing_m = mean( voicing_fr, NB_SUBFR ); - - dpit1 = (float) fabs( pitch_fr[0] - pitch_fr[1] ); - dpit2 = (float) fabs( pitch_fr[1] - pitch_fr[2] ); - dpit3 = (float) fabs( pitch_fr[2] - pitch_fr[3] ); - - if ( *flag_spitch || ( dpit1 <= 3.0f && dpit2 <= 3.0f && dpit3 <= 3.0f && - voicing_m > 0.95f && st->voicing_sm > 0.97f ) ) - { - coder_type = VOICED; - *flag_spitch = 1; /*to avoid switch to AUDIO/MUSIC later*/ - } - } - - /*-----------------------------------------------------------------* - * Channel-aware mode - set RF mode and total bitrate - *-----------------------------------------------------------------*/ - - st->rf_mode = st->Opt_RF_ON; - - if ( coder_type == GENERIC ) - { - if ( ( voicing_fr[0] < VOI_THRLD ) && /* normalized correlation high in 1st sf. */ - ( voicing_fr[1] < VOI_THRLD ) && /* normalized correlation high in 2st sf. */ - ( voicing_fr[2] < VOI_THRLD ) && /* normalized correlation high in 3st sf. */ - ( voicing_fr[3] < VOI_THRLD ) && /* normalized correlation high in 4st sf. */ - ( vadnoise > 25.0f ) ) /* when speech is clean */ - { - st->rf_mode = 0; - - /* Current frame cannot be compressed to pack the partial redundancy */ - if ( st->rf_mode != st->Opt_RF_ON ) - { - core_coder_mode_switch( st, st->last_total_brate, 0 ); - } - } - } - - /*-----------------------------------------------------------------* - * UNCLR classifier - *-----------------------------------------------------------------*/ - - if ( hStereoClassif != NULL ) - { - if ( st->element_mode > EVS_MONO && ( coder_type == GENERIC || coder_type == UNVOICED || coder_type == INACTIVE || st->localVAD == 0 ) && hStereoClassif->unclr_sw_enable_cnt[st->idchan] < MAX_UV_CNT ) - { - hStereoClassif->unclr_sw_enable_cnt[st->idchan]++; - } - else - { - hStereoClassif->unclr_sw_enable_cnt[st->idchan] = 0; - } - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* update spike hysteresis parameters */ - if ( st->spike_hyst >= 0 && st->spike_hyst < 2 ) - { - st->spike_hyst++; - } - - /* reset spike hysteresis */ - if ( ( st->spike_hyst > 1 ) && - ( dE3 > 5.0f || /* energy increases */ - ( relE > -13.0f && ( mean_voi3 + corr_shift > 0.695f ) ) ) ) /* normalized correlation is high */ - { - st->spike_hyst = -1; - } - - /* update tilt parameters */ - st->ee_old = ee[1]; - st->old_dE1 = dE1; - - /* save the raw coder_type for various modules later in the codec (the reason is that e.g. UNVOICED is not used (rewritten) at higher rates) */ - st->coder_type_raw = coder_type; - - return coder_type; -} -#endif diff --git a/lib_enc/find_wsp.c b/lib_enc/find_wsp.c index 2bacbfe6f..9ba0a3c07 100644 --- a/lib_enc/find_wsp.c +++ b/lib_enc/find_wsp.c @@ -45,55 +45,6 @@ * * Compute weighted speech used in open-loop pitch search *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void find_wsp( - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_subfr, /* i : length of subframe */ - const int16_t nb_subfr, /* i : number of subframes */ - const float *A, /* i : A(z) filter coefficients */ - float *Aw, /* o : weighted A(z) filter coefficients */ - const float *speech, /* i : pointer to the denoised speech frame */ - const float tilt_fact, /* i : tilt factor */ - float *wsp, /* o : poitnter to the weighted speech frame */ - float *mem_wsp, /* i/o: W(Z) denominator memory */ - const float gamma, /* i : weighting factor */ - const int16_t L_look /* i : look-ahead */ -) -{ - float *p_Aw, tmp; - int16_t i_subfr; - - - /*-----------------------------------------------------------------* - * Compute weighted A(z) unquantized for subframes - *-----------------------------------------------------------------*/ - - weight_a_subfr( nb_subfr, A, Aw, gamma, M ); - - /*-----------------------------------------------------------------* - * Compute weighted speech for all subframes - *-----------------------------------------------------------------*/ - - p_Aw = Aw; - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) - { - residu( p_Aw, M, &speech[i_subfr], &wsp[i_subfr], L_subfr ); - p_Aw += ( M + 1 ); - } - p_Aw -= ( M + 1 ); - - /*-----------------------------------------------------------------* - * Weighted speech computation is extended on look-ahead - *-----------------------------------------------------------------*/ - - deemph( wsp, tilt_fact, L_frame, mem_wsp ); - residu( p_Aw, M, &speech[L_frame], &wsp[L_frame], L_look ); - tmp = *mem_wsp; - deemph( &wsp[L_frame], tilt_fact, L_look, &tmp ); - - return; -} -#else void ivas_find_wsp( const Word16 L_frame, /* i : length of the frame */ const Word16 L_subfr, /* i : length of subframe */ @@ -145,4 +96,3 @@ void ivas_find_wsp( deemph_fx( &wsp_fx[L_frame], tilt_fact, L_look, &tmp_fx ); return; } -#endif diff --git a/lib_enc/frame_spec_dif_cor_rate.c b/lib_enc/frame_spec_dif_cor_rate.c index ba235ad05..09ecb0cc8 100644 --- a/lib_enc/frame_spec_dif_cor_rate.c +++ b/lib_enc/frame_spec_dif_cor_rate.c @@ -45,54 +45,3 @@ * * *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void frame_spec_dif_cor_rate( - float spec_amp[], /* i : spectral amplitude */ - float pre_spec_low_dif[], /* i/o: low spectrum different */ - float f_tonality_rate[] /* o : tonality rate */ -) -{ - int16_t i; - float spec_low_dif[59]; - float tmp, spec_low_dif_cor_rate, spec_dif_cor_rate; - float m, dx, dy; - - - for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) - { - tmp = spec_amp[i + 6] - spec_amp[i + 5]; - if ( tmp < 0 ) - { - spec_low_dif[i] = 0; - } - else - { - spec_low_dif[i] = tmp; - } - } - m = 0; - dx = 0; - dy = 0; - for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) - { - m += spec_low_dif[i] * pre_spec_low_dif[i]; - dx += spec_low_dif[i] * spec_low_dif[i]; - dy += pre_spec_low_dif[i] * pre_spec_low_dif[i]; - } - - /* 1073741.824 = 0.001 * 32768 * 32768 */ - spec_low_dif_cor_rate = (float) ( m / sqrt( ( dx * dy + 1073741.824f ) ) ); - spec_dif_cor_rate = spec_low_dif_cor_rate; - f_tonality_rate[0] = spec_dif_cor_rate; - f_tonality_rate[1] = f_tonality_rate[1] * 0.96f + spec_dif_cor_rate * 0.04f; - f_tonality_rate[2] = f_tonality_rate[2] * 0.90f + spec_dif_cor_rate * 0.1f; - - for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) - { - pre_spec_low_dif[i] = spec_low_dif[i]; - } - - return; -} -#endif diff --git a/lib_enc/gain_enc.c b/lib_enc/gain_enc.c index 6cae37364..bd3da322a 100644 --- a/lib_enc/gain_enc.c +++ b/lib_enc/gain_enc.c @@ -53,996 +53,3 @@ * * Calculation and quantization of average predicted innovation energy to be *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void Es_pred_enc( - float *Es_pred, /* o : predicited scaled innovation energy */ - int16_t *Es_pred_indice, /* o : indice corresponding to above parameter */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_subfr, /* i : length of the subframe */ - const float *res, /* i : residual signal */ - const float *voicing, /* i : normalized correlation in three 1/2frames */ - const int16_t nb_bits, /* i : allocated number of bits */ - const int16_t no_ltp /* i : no_ltp flag */ -) -{ - int16_t i, i_subfr, size; - float tmp, dist, mean_ener_code, ener; - float weight; - const float *qua_table; - - /*----------------------------------------------------------* - * calculate the average residual signal energy - *----------------------------------------------------------*/ - if ( L_frame == L_FRAME ) - { - weight = 0.25f; - } - else /* L_frame == L_FRAME16k */ - { - weight = 0.2f; - } - - mean_ener_code = 0.0f; - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += L_subfr ) - { - /* calculate the energy of residual signal */ - ener = sum2_f( &res[i_subfr], L_subfr ) + 0.01f; - ener = 10 * (float) log10( ener / ( (float) L_subfr ) ); - if ( ( ener < 0 ) && !( no_ltp ) ) - { - ener = 0; - } - - /* update the average energy of residual signal */ - mean_ener_code += weight * ener; - } - - if ( !no_ltp ) - { - /*----------------------------------------------------------* - * subtract an estimate of adaptive codebook contribution - *----------------------------------------------------------*/ - - mean_ener_code -= 10.0f * ( 0.5f * voicing[0] + 0.5f * voicing[1] ); - - /*----------------------------------------------------------* - * quantize the average predicted innovation energy - *----------------------------------------------------------*/ - switch ( nb_bits ) - { - case 5: - { - qua_table = Es_pred_qua_5b; - break; - } - case 4: - { - qua_table = Es_pred_qua_4b; - break; - } - case 3: - { - qua_table = Es_pred_qua_3b; - break; - } - default: - { - qua_table = Es_pred_qua_5b; - break; - } - } - } - else - { - qua_table = Es_pred_qua_4b_no_ltp; - } - - /* select codebook, size and number of bits */ - size = 1 << nb_bits; - - /* find the nearest neighbour (codevector) */ - tmp = 1e30f; - *Es_pred_indice = 0; - for ( i = 0; i < size; i++ ) - { - dist = (float) fabs( mean_ener_code - qua_table[i] ); - if ( dist < tmp ) - { - tmp = dist; - *Es_pred = qua_table[i]; - *Es_pred_indice = i; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * gain_enc_amr_wb() - * - * Quantization of pitch and codebook gains (used also in AMR-WB IO mode) - * MA prediction is performed on the innovation energy (in dB with mean removed). - * An initial predicted gain, gcode0, is first determined and the correction - * factor alpha = g_code / gcode0 is quantized. - * The pitch gain and the correction factor are vector quantized and the - * mean-squared weighted error criterion is used in the quantizer search. - *-------------------------------------------------------------------*/ - -void gain_enc_amr_wb( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *xn, /* i : target vector */ - const float *y1, /* i : zero-memory filtered adaptive excitation */ - const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ - const float *code, /* i : algebraic excitation */ - const int32_t core_brate, /* i : core bitrate */ - float *gain_pit, /* i/o: pitch gain / Quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : gain of the innovation (used for normalization) */ - float *norm_gain_code, /* o : norm. gain of the codebook excitation */ - float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ - const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ - float *past_qua_en /* i/o: gain quantization memory (4 words) */ -) -{ - int16_t index, i, j, min_ind, size, nBits; - float dist, dist_min, g_pitch, g_code, qua_en, gcode0; - const float *p, *t_qua_gain; - - /*-----------------------------------------------------------------* - * gain computation correlations - * find raw innovation energy - *-----------------------------------------------------------------*/ - - E_corr_xy2( xn, y1, y2, g_corr, L_SUBFR ); - g_corr[2] += 0.01F; - g_corr[3] -= 0.02F; - g_corr[4] += 0.02F; - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); - - /*-----------------------------------------------------------------* - * find the initial quantization pitch index - * set gains search range - *-----------------------------------------------------------------*/ - - if ( core_brate < ACELP_12k65 ) - { - t_qua_gain = t_qua_gain6b; - nBits = 6; - min_ind = 0; - size = RANGE; - if ( clip_gain == 1 ) - { - size -= 16; /* limit pitch gain to 1.0 */ - } - } - else - { - t_qua_gain = t_qua_gain7b; - nBits = 7; - p = t_qua_gain7b + RANGE; /* pt at 1/4th of table */ - j = NB_QUA_GAIN7B - RANGE; - if ( clip_gain == 1 ) - { - j -= 27; /* limit pitch gain to 1.0 */ - } - - min_ind = 0; - g_pitch = *gain_pit; - - - for ( i = 0; i < j; i++, p += 2 ) - { - if ( g_pitch > *p ) - { - min_ind++; - } - } - size = RANGE; - } - - /*-----------------------------------------------------------------* - * predicted code gain - *-----------------------------------------------------------------*/ - - /* start with predicting code energy in dB */ - gcode0 = MEAN_ENER; - for ( i = 0; i < GAIN_PRED_ORDER; i++ ) - { - gcode0 += pred_gain[i] * past_qua_en[i]; - } - gcode0 += (float) ( 20.0 * log10( *gain_inov ) ); - - /* convert from energy in dB to gain */ - gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); - - /*-----------------------------------------------------------------* - * search the codebook - *-----------------------------------------------------------------*/ - - dist_min = 3.402823466e+38F; - p = t_qua_gain + min_ind * 2; - - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; /* pitch gain */ - g_code = gcode0 * *p++; /* code gain */ - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - index = index + min_ind; - *gain_pit = t_qua_gain[index * 2]; - qua_en = t_qua_gain[index * 2 + 1]; - *gain_code = qua_en * gcode0; - - /*-----------------------------------------------------------------* - * update table of past quantized energies - *-----------------------------------------------------------------*/ - - for ( i = GAIN_PRED_ORDER - 1; i > 0; i-- ) - { - past_qua_en[i] = past_qua_en[i - 1]; - } - past_qua_en[0] = (float) ( 20.0 * log10( qua_en ) ); - - push_indice( hBstr, IND_GAIN, index, nBits ); - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - - -/*---------------------------------------------------------------------* - * gain_enc_mless() - * - * Quantization of pitch and codebook gains without prediction (memory-less) - * - an initial predicted gain, gcode0, is first determined based on - * the predicted average innovation energy - * - a correction factor gamma = g_code / gcode0 is then vector quantized along with gain_pit - * - the mean-squared weighted error criterion is used for codebook search - *---------------------------------------------------------------------*/ - -void gain_enc_mless( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t gains_mode[], /* i : gain bits */ - const int16_t element_mode, /* i : element mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t tc_subfr, /* i : TC subframe index */ - const float *xn, /* i : target vector */ - const float *y1, /* i : zero-memory filtered adaptive excitation */ - const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ - const float *code, /* i : algebraic excitation */ - const float Es_pred, /* i : predicted scaled innovation energy */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : gain of the innovation (used for normalization) */ - float *norm_gain_code, /* o : norm. gain of the codebook excitation */ - float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ - const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ -) -{ - int16_t index, i, size, nBits; - float dist, dist_min, g_pitch, g_code, gcode0, Ei, Ecode; - int16_t nBits2; - float tmp1, tmp2; - const float *p, *qua_table; - - /*-----------------------------------------------------------------* - * calculate the rest of the correlation coefficients - * c2 = , c3 = -2, c4 = 2 - *-----------------------------------------------------------------*/ - - E_corr_xy2( xn, y1, y2, g_corr, L_SUBFR ); - g_corr[2] += 0.01F; - g_corr[3] -= 0.02F; - g_corr[4] += 0.02F; - - /*-----------------------------------------------------------------* - * calculate the unscaled innovation energy - * calculate the predicted gain code - *-----------------------------------------------------------------*/ - - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - /*-----------------------------------------------------------------* - * select the codebook, size and number of bits - * set the gains searching range - *-----------------------------------------------------------------*/ - - nBits = gains_mode[i_subfr / L_SUBFR]; - - if ( ( tc_subfr == 3 * L_SUBFR && i_subfr == 3 * L_SUBFR && L_frame == L_FRAME ) || - ( tc_subfr == 4 * L_SUBFR && i_subfr == 4 * L_SUBFR && L_frame == L_FRAME16k ) ) - { - /* in case of attack at the end of the frame, use scalar gain quantizers */ - tmp1 = ( g_corr[0] * g_corr[2] ) - ( 0.25f * g_corr[4] * g_corr[4] ); - tmp2 = -0.5f * g_corr[1] / tmp1; - tmp1 = -0.5f * g_corr[3] / tmp1; - - *gain_pit = ( g_corr[2] * tmp2 ) - ( 0.5f * g_corr[4] * tmp1 ); - *gain_code = ( g_corr[0] * tmp1 ) - ( 0.5f * g_corr[4] * tmp2 ); - - *gain_pit = max( G_PITCH_MIN_TC192, min( *gain_pit, G_PITCH_MAX_TC192 ) ); - - /* set number of bits for two SQs */ - nBits2 = ( nBits + 1 ) >> 1; - nBits = nBits >> 1; - - /* gain_pit Q */ - tmp1 = ( G_PITCH_MAX_TC192 - G_PITCH_MIN_TC192 ) / ( ( 1 << nBits ) - 1 ); /* set quantization step */ - index = usquant( *gain_pit, gain_pit, G_PITCH_MIN_TC192, tmp1, ( 1 << nBits ) ); - push_indice( hBstr, IND_GAIN_PIT, index, nBits ); - - /* gain_code Q */ - *gain_code /= gcode0; - index = gain_quant( gain_code, G_CODE_MIN_TC192, G_CODE_MAX_TC192, nBits2 ); - push_indice( hBstr, IND_GAIN_CODE, index, nBits2 ); - *gain_code *= gcode0; - } - else - { - size = 1 << nBits; - - switch ( nBits ) - { - case 7: - { - qua_table = gain_qua_mless_7b; - if ( clip_gain == 1 ) - { - size -= 30; - } - break; - } - case 6: - { - qua_table = gain_qua_mless_6b; - - if ( element_mode > EVS_MONO ) - { - qua_table = gain_qua_mless_6b_stereo; - } - - if ( clip_gain == 1 ) - { - size -= 14; - } - break; - } - case 5: - { - qua_table = gain_qua_mless_5b; - if ( clip_gain == 1 ) - { - size -= 6; - } - break; - } - default: - { - qua_table = gain_qua_mless_6b; - size = 64; - if ( clip_gain == 1 ) - { - size -= 14; - } - break; - } - } - - /* in case of AVQ inactive, limit the gain_pit to 0.65 */ - if ( clip_gain == 2 && nBits == 6 ) - { - size -= 36; - nBits--; - } - - /*-----------------------------------------------------------------* - * search for the best quantizer - *-----------------------------------------------------------------*/ - - p = qua_table; - dist_min = 3.402823466e+38F; - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; /* pitch gain */ - g_code = gcode0 * *p++; /* code gain */ - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - *gain_pit = qua_table[index * 2]; - *gain_code = qua_table[index * 2 + 1] * gcode0; - - push_indice( hBstr, IND_GAIN, index, nBits ); - } - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - - -/*---------------------------------------------------------------------* - * gain_enc_SQ() - * - * Scalar Quantization of pitch and codebook gains without prediction - * - an initial predicted gain, gcode0, is first determined based on - * the predicted scaled innovation energy - * - a correction factor gamma = g_code / gcode0 is then vector quantized - * along with gain_pit - * - the mean-squared weighted error criterion is used for codebook search - *---------------------------------------------------------------------*/ - -void gain_enc_SQ( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t gains_mode[], /* i : gain bits */ - const int16_t i_subfr, /* i : subframe index */ - const float *xn, /* i : target vector */ - const float *yy1, /* i : zero-memory filtered adaptive excitation */ - const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ - const float *code, /* i : algebraic excitation */ - const float Es_pred, /* i : predicted scaled innovation energy */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : gain of the innovation (used for normalization) */ - float *norm_gain_code, /* o : norm. gain of the codebook excitation */ - float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ - const int16_t clip_gain /* i : gain pitch clipping flag (1 = clipping) */ -) -{ - int16_t index, nBits_pitch, nBits_code; - float g_code, gcode0, Ei, Ecode, tmp1, tmp2; - int16_t tmp16; - /*-----------------------------------------------------------------* - * calculate the rest of the correlation coefficients - * c2 = , c3 = -2, c4 = 2 - *-----------------------------------------------------------------*/ - - g_corr[1] *= -0.5; - g_corr[2] = dotp( y2, y2, L_SUBFR ) + 0.01f; - g_corr[3] = dotp( xn, y2, L_SUBFR ) - 0.02f; - g_corr[4] = dotp( yy1, y2, L_SUBFR ) + 0.02f; - - /*-----------------------------------------------------------------* - * calculate the unscaled innovation energy - * calculate the predicted gain code - * calculate optimal gains - *-----------------------------------------------------------------*/ - - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - tmp1 = ( g_corr[0] * g_corr[2] ) - ( g_corr[4] * g_corr[4] ); - tmp2 = g_corr[1] / tmp1; - tmp1 = g_corr[3] / tmp1; - - *gain_pit = ( g_corr[2] * tmp2 ) - ( g_corr[4] * tmp1 ); - *gain_code = ( g_corr[0] * tmp1 ) - ( g_corr[4] * tmp2 ); - - *gain_pit = max( G_PITCH_MIN, min( *gain_pit, G_PITCH_MAX ) ); - - /*-----------------------------------------------------------------* - * limit the pitch gain searching range (if indicated by clip_gain) - *-----------------------------------------------------------------*/ - - if ( clip_gain == 1 && *gain_pit > 0.95f ) - { - *gain_pit = 0.95f; - } - else if ( clip_gain == 2 && *gain_pit > 0.65f ) - { - *gain_pit = 0.65f; - } - - /*-----------------------------------------------------------------* - * search for the best quantized values - *-----------------------------------------------------------------*/ - - nBits_pitch = gains_mode[i_subfr / L_SUBFR]; - nBits_code = ( nBits_pitch + 1 ) >> 1; - nBits_pitch = nBits_pitch >> 1; - - tmp16 = div_s( 1, ( ( 1 << ( nBits_pitch ) ) - 1 ) ); /* Q15*/ - tmp1 = (float) mult_r( (int16_t) ( G_PITCH_MAX * 8192.0f + 0.5f ), tmp16 ) / 8192.0f; - index = usquant( *gain_pit, gain_pit, G_PITCH_MIN, tmp1, ( 1 << nBits_pitch ) ); - push_indice( hBstr, IND_GAIN_PIT, index, nBits_pitch ); - - g_code = *gain_code / gcode0; - index = gain_quant( &g_code, G_CODE_MIN, G_CODE_MAX, nBits_code ); - *gain_code = g_code * gcode0; - push_indice( hBstr, IND_GAIN_CODE, index, nBits_code ); - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*-------------------------------------------------------------------* - * gain_enc_gaus() - * - * Quantization of gain for Gaussian codebook - *-------------------------------------------------------------------*/ - -/*! r: Return index of quantization */ -int16_t gain_enc_gaus( - float *gain, /* i/o: Code gain to quantize */ - const int16_t bits, /* i : number of bits to quantize */ - const float lowBound, /* i : lower bound of quantizer (dB) */ - const float topBound /* i : upper bound of quantizer (dB) */ -) -{ - int16_t index; - float enr, stepSize; - - enr = (float) ( 20.0 * log10( *gain + 0.001f ) ); /* codebook gain in dB */ - - /*-----------------------------------------------------------------* - * quantize linearly the log E - *-----------------------------------------------------------------*/ - - stepSize = ( topBound - lowBound ) / ( (float) ( 1 << bits ) ); - index = (int16_t) ( ( ( enr - lowBound ) / stepSize ) + 0.5f ); - if ( index >= ( 1 << bits ) ) - { - index = ( 1 << bits ) - 1; - } - - if ( index < 0 ) - { - index = 0; - } - - enr = (float) index * stepSize + lowBound; /* quantized codebook gain in dB */ - *gain = (float) pow( 10.0f, enr / 20.0f ); /* quantized codebook gain */ - - return index; -} - -/*-----------------------------------------------------------------* - * gain_enc_tc() - * - * Search and quantization of gain_code for subframes (in the - * beginning of frame) without pulses in TC - 3b coding. - * In this case: - * - gain_pit = 0 - * - gain_code - scalar quantization (no prediciton history used) - *-----------------------------------------------------------------*/ - -void gain_enc_tc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t gains_mode[], /* i : gain bits */ - const int16_t i_subfr, /* i : subframe index */ - const float xn[], /* i : target vector */ - const float y2[], /* i : zero-memory filtered algebraic codebook excitation */ - const float code[], /* i : algebraic excitation */ - const float Es_pred, /* i : predicted scaled innovation energy */ - float *gain_pit, /* o : Pitch gain / Quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : innovation gain */ - float *norm_gain_code /* o : norm. gain of the codebook excitation */ -) -{ - int16_t i, index, nBits; - float Ei, g_code, gcode0, Ecode; - - /*----------------------------------------------------------------* - * get number of bits for gain quantization - *----------------------------------------------------------------*/ - - nBits = gains_mode[i_subfr / L_SUBFR]; - - /*----------------------------------------------------------------* - * find the code pitch (for current subframe) - *----------------------------------------------------------------*/ - - *gain_code = dotp( xn, y2, L_SUBFR ) / ( dotp( y2, y2, L_SUBFR ) + 0.01f ); - - /*----------------------------------------------------------------* - * calculate the predicted gain code - * decode codebook gain - *----------------------------------------------------------------*/ - - *gain_pit = 0; - - Ecode = ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - Ei = 10 * (float) log10( Ecode ); - gcode0 = (float) pow( 10, 0.05 * ( Es_pred - Ei ) ); - - if ( nBits > 3 ) - { - g_code = *gain_code / gcode0; - index = gain_quant( &g_code, G_CODE_MIN, G_CODE_MAX, nBits ); - *gain_code = g_code * gcode0; - push_indice( hBstr, IND_GAIN_CODE, index, nBits ); - } - else - { - index = N_GAIN_CODE_TC - 1; - for ( i = 0; i < N_GAIN_CODE_TC - 1; i++ ) - { - if ( *gain_code < ( ( tbl_gain_code_tc[i] + ( tbl_gain_code_tc[i + 1] - tbl_gain_code_tc[i] ) / 2 ) * gcode0 ) ) - { - index = i; - break; - } - } - - /*----------------------------------------------------------------* - * 3-bit -> 2-bit encoding - *----------------------------------------------------------------*/ - - if ( nBits == 2 ) - { - index /= 2; - *gain_code = tbl_gain_code_tc[index * 2] * gcode0; - push_indice( hBstr, IND_GAIN_CODE, index, nBits ); - } - else - { - *gain_code = tbl_gain_code_tc[index] * gcode0; - push_indice( hBstr, IND_GAIN_CODE, index, nBits ); - } - } - - *norm_gain_code = *gain_code / *gain_inov; - - return; -} - -/*---------------------------------------------------------------------* - * E_corr_xy2() - * - * Find the correlations between the target xn[], the filtered adaptive - * codebook exc. y1[], and the filtered fixed codebook innovation y2[]. - * ( , -2 and 2 ) (stored in g_corr[2..4]) - *---------------------------------------------------------------------*/ - -void E_corr_xy2( - const float xn[], /* i : target vector */ - const float y1[], /* i : filtered excitation components 1 */ - const float y2[], /* i : filtered excitation components 2 */ - float g_corr[], /* o : correlations between x, y1, y2, y3, y4 */ - const int16_t L_subfr /* i : subframe size */ -) -{ - g_corr[2] = dotp( y2, y2, L_subfr ); - g_corr[3] = -2.0f * dotp( xn, y2, L_subfr ); - g_corr[4] = 2.0f * dotp( y1, y2, L_subfr ); - - return; -} - - -/*---------------------------------------------------------------------* - * gain_enc_lbr() - * - * Quantization of pitch and codebook gains without prediction (memory-less) - * in ACELP at 7.2 and 8.0 kbps - * - the gain codebooks and gain estimation constants are different in each subframe - * - the estimated gain, gcode0, is first determined based on - * classification and/or previous quantized gains (from previous subframes in the current frame) - * - a correction factor gamma = g_code / gcode0 is then vector quantized - * along with gain_pit - * - the mean-squared error criterion is used for codebook search - *---------------------------------------------------------------------*/ - -void gain_enc_lbr( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t gains_mode[], /* i : gain bits */ - const int16_t coder_type, /* i : coding type */ - const int16_t i_subfr, /* i : subframe index */ - const float *xn, /* i : target vector */ - const float *y1, /* i : zero-memory filtered adaptive excitation */ - const float *y2, /* i : zero-memory filtered algebraic codebook excitation */ - const float *code, /* i : algebraic excitation */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_inov, /* o : gain of the innovation (used for normalization) */ - float *norm_gain_code, /* o : norm. gain of the codebook excitation */ - float *g_corr, /* i/o: correlations , -2,, -2 and 2 */ - float gains_mem[], /* i/o: pitch gain and code gain from previous subframes */ - const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ - const int16_t L_subfr /* i : subframe length */ -) -{ - int16_t index = 0, i, size, nBits, n_pred, ctype; - float dist, dist_min, g_pitch, g_code, gcode0, aux[10], Ecode; - int16_t rf_flag = 0; - const float *p, *b, *cdbk = 0; - - /*-----------------------------------------------------------------* - * calculate the rest of the correlation coefficients - * c2 = , c3 = -2, c4 = 2, c5* = - * c5* - not necessary to calculate - *-----------------------------------------------------------------*/ - - E_corr_xy2( xn, y1, y2, g_corr, L_subfr ); - g_corr[2] += 0.01F; - g_corr[3] -= 0.02F; - g_corr[4] += 0.02F; - - Ecode = ( dotp( code, code, L_subfr ) + 0.01f ) / L_subfr; - *gain_inov = 1.0f / (float) sqrt( Ecode ); - - /*-----------------------------------------------------------------* - * select the codebook, size and number of bits - * set the gains searching range - *-----------------------------------------------------------------*/ - - nBits = gains_mode[i_subfr / L_subfr]; - size = 1 << nBits; - - /*-----------------------------------------------------------------* - * calculate prediction of gcode - * search for the best codeword - *-----------------------------------------------------------------*/ - - ctype = 2 * ( coder_type - 1 ); - if ( i_subfr == 0 ) - { - b = b_1sfr; - n_pred = 2; - - switch ( nBits ) - { - case 8: - { - cdbk = gp_gamma_1sfr_8b; - if ( clip_gain == 1 ) - { - size -= 60; - } - break; - } - case 7: - { - cdbk = gp_gamma_1sfr_7b; - if ( clip_gain == 1 ) - { - size -= 27; - } - break; - } - case 6: - { - cdbk = gp_gamma_1sfr_6b; - if ( clip_gain == 1 ) - { - size -= 10; - } - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) - 0.5f * (float) log10( Ecode ) ); - - /* searching of codebook */ - p = cdbk; - dist_min = 3.402823466e+38F; - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; - g_code = gcode0 * *p++; - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - - gains_mem[0] = *gain_code; - gains_mem[3] = *gain_pit; - } - else if ( i_subfr == L_SUBFR || ( L_subfr == 2 * L_SUBFR ) ) - { - b = b_2sfr; - n_pred = 4; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_2sfr_7b; - if ( clip_gain == 1 ) - { - size -= 30; - } - break; - } - case 6: - { - cdbk = gp_gamma_2sfr_6b; - if ( clip_gain == 1 ) - { - size -= 12; - } - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = gains_mem[3]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* searching of codebook */ - p = cdbk; - dist_min = 3.402823466e+38F; - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; - g_code = gcode0 * *p++; - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - - gains_mem[1] = *gain_code; - gains_mem[4] = *gain_pit; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - if ( rf_flag == 1 ) - { - gains_mem[1] = gains_mem[0]; - gains_mem[4] = gains_mem[3]; - } - - b = b_3sfr; - n_pred = 6; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_3sfr_7b; - if ( clip_gain == 1 ) - { - size -= 28; - } - break; - } - case 6: - { - cdbk = gp_gamma_3sfr_6b; - if ( clip_gain == 1 ) - { - size -= 11; - } - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = (float) log10( gains_mem[1] ); - aux[4] = gains_mem[3]; - aux[5] = gains_mem[4]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* searching of codebook */ - p = cdbk; - dist_min = 3.402823466e+38F; - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; - g_code = gcode0 * *p++; - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - - gains_mem[2] = *gain_code; - gains_mem[5] = *gain_pit; - } - else if ( i_subfr == 3 * L_SUBFR ) - { - b = b_4sfr; - n_pred = 8; - - switch ( nBits ) - { - case 7: - { - cdbk = gp_gamma_4sfr_7b; - if ( clip_gain == 1 ) - { - size -= 25; - } - break; - } - case 6: - { - cdbk = gp_gamma_4sfr_6b; - if ( clip_gain == 1 ) - { - size -= 11; - } - break; - } - } - - /* calculate predicted gain */ - aux[0] = 1.0f; - aux[1] = ctype; - aux[2] = (float) log10( gains_mem[0] ); - aux[3] = (float) log10( gains_mem[1] ); - aux[4] = (float) log10( gains_mem[2] ); - aux[5] = gains_mem[3]; - aux[6] = gains_mem[4]; - aux[7] = gains_mem[5]; - gcode0 = (float) pow( 10, dotp( b, aux, n_pred ) ); - - /* searching of codebook */ - p = cdbk; - dist_min = 3.402823466e+38F; - index = 0; - for ( i = 0; i < size; i++ ) - { - g_pitch = *p++; - g_code = gcode0 * *p++; - dist = g_pitch * g_pitch * g_corr[0] + g_pitch * g_corr[1] + g_code * g_code * g_corr[2] + g_code * g_corr[3] + g_pitch * g_code * g_corr[4]; - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - *gain_pit = cdbk[index * 2]; - *gain_code = cdbk[index * 2 + 1] * gcode0; - } - - *norm_gain_code = *gain_code / *gain_inov; - - push_indice( hBstr, IND_GAIN, index, nBits ); - - return; -} -#endif diff --git a/lib_enc/gaus_enc.c b/lib_enc/gaus_enc.c index 3b3b1e43c..d441f6ead 100644 --- a/lib_enc/gaus_enc.c +++ b/lib_enc/gaus_enc.c @@ -41,422 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define NMAX 8 /* Control of the routine's complexity */ -#define FAC_DELTA 16.0f - -/*---------------------------------------------------------------------* - * Prototypes - *---------------------------------------------------------------------*/ - -static int16_t cod_2pos( const int16_t ind1, const int16_t ind2, const float sign1, const float sign2, const int16_t n ); - -static void gauss2v( BSTR_ENC_HANDLE hBstr, const float h[], const float xn[], const float dn[], float code[], float y1[], float *gain, const int16_t lg, const int16_t nb_bits ); - -/*-------------------------------------------------------------------* - * Gaus_encode - * - * Encoder UnVoiced excitation coding using Gaussian codebooks - * - ACELP quantized Gaussian excitation - * - gain quantization - * - Total excitation for UnVoiced coders - * - Updates - *-------------------------------------------------------------------*/ - -float gaus_encode( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t i_subfr, /* i : subframe index */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - float *exc, /* o : pointer to excitation signal frame */ - float *mem_w0, /* o : weighting filter denominator memory */ - float *gp_clip_mem, /* o : memory of gain of pitch clipping algorithm */ - float *tilt_code, /* o : synthesis excitation spectrum tilt */ - float *code, /* o : algebraic excitation */ - float *gain_code, /* o : Code gain. */ - float *y2, /* o : zero-memory filtered adaptive excitation */ - float *gain_inov, /* o : innovation gain */ - float *voice_fac, /* o : voicing factor */ - float *gain_pit, /* o : adaptive excitation gain */ - float *norm_gain_code /* o : normalized innovative cb. gain */ -) -{ - int16_t i = 0, nb_bits, idx; - float dn[L_SUBFR]; /* Correlation between xn and h1 */ - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*----------------------------------------------------------------* - * Encode gaussian excitation - *----------------------------------------------------------------*/ - - corr_xh( xn, dn, h1, L_SUBFR ); /* Correlation between target xn[] and impulse response h1[] */ - - nb_bits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; - - gauss2v( hBstr, h1, xn, dn, code, y2, gain_code, L_SUBFR, nb_bits >> 1 ); - - /*----------------------------------------------------------------* - * Encode gaussian gain - *----------------------------------------------------------------*/ - - /* codeword energy computation */ - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, L_SUBFR ) + 0.01f ) / L_SUBFR ); - - nb_bits = st->acelp_cfg.gains_mode[i_subfr / L_SUBFR]; - - idx = gain_enc_gaus( gain_code, nb_bits, -30.0f, 190.0f ); - push_indice( hBstr, IND_GAIN, idx, nb_bits ); - - /*-----------------------------------------------------------------* - * Total excitation for Unvoiced coders - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i + i_subfr] = *gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Updates: last value of new target is stored in mem_w0 - *-----------------------------------------------------------------*/ - - *mem_w0 = xn[L_SUBFR - 1] - *gain_code * y2[L_SUBFR - 1]; - - init_gp_clip( gp_clip_mem ); /* reset pitch clipping parameters */ - *gain_pit = 0.0f; - *tilt_code = 0.0f; /* purely unvoiced */ - *voice_fac = -1.0f; /* purely unvoiced */ - - *norm_gain_code = *gain_code / *gain_inov; - - return L_SUBFR; -} - -/*-------------------------------------------------------------------* - * gauss2v() - * - * encoder of Gaussian Codebook for unvoiced - * consisting of addition of 2 Gaussian vectors - * - * One Gaussian vector of 192 values vectors delayed by 2 - *-------------------------------------------------------------------*/ - -static void gauss2v( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float h[], /* i : weighted LP filter impulse response */ - const float xn[], /* i : target signal */ - const float dn[], /* i : backward filtered target */ - float code[], /* o : gaussian excitation */ - float y11[], /* o : zero-memory filtered gauss. excitation */ - float *gain, /* o : excitation gain */ - const int16_t lg, /* i : subframe size */ - const int16_t nb_bits /* i : nb ob bits per track (max 6) */ -) -{ - int16_t i, j, ind1, ind2, idx; - int16_t nvec, step; - float cor, cora, cor2, cor2w, eneri, enerw; - float *pt1, *pt2; - float max_val[NMAX + 1], *pos[NMAX + 1], sign[NMAX + 1]; - float ener[NMAX + 1], corr[NMAX + 1], ener1; - float dico2[L_SUBFR * NMAX]; - float c1, c0; - float gxx, gcc; - float gaus_dico2[190]; - float hg[190]; - float delta; - int16_t index_delta; - - /*-----------------------------------------------------------------* - * Encode the tilt of gaussian excitation - *-----------------------------------------------------------------*/ - - c0 = 0.0f; /* Compute spectral tilt of target */ - c1 = 0.0f; - for ( i = 1; i < L_SUBFR; i++ ) - { - c0 += xn[i] * xn[i]; - c1 += xn[i] * xn[i - 1]; - } - if ( c0 < FLT_MIN ) - { - gxx = 0.f; - } - else - { - gxx = c1 / c0; - } - - set_f( hg, 0, 190 ); /* Compute spectral tilt of filtered codebook */ - mvr2r( h, hg, L_SUBFR ); - conv( gaus_dico, hg, gaus_dico2, 190 ); - - c0 = 0.0f; - c1 = 0.0f; - for ( i = 1; i < 190; i++ ) - { - c0 += gaus_dico2[i] * gaus_dico2[i]; - c1 += gaus_dico2[i] * gaus_dico2[i - 1]; - } - gcc = c1 / c0; - delta = ( 1 - gcc * gxx ) / ( 2 * gcc + gxx ); /* Compute and quantize spectral tilt modification factor (3b) */ - - index_delta = (int16_t) ( FAC_DELTA * delta ); - if ( index_delta < 0 ) - { - index_delta = 0; - } - if ( index_delta > 7 ) - { - index_delta = 7; - } - - delta = STEP_DELTA * (float) index_delta; - if ( delta > 0.0f ) /* Adapt spectral tilt of initial codebook */ - { - gaus_dico2[0] = gaus_dico[0]; - for ( i = 1; i < 190; i++ ) - { - gaus_dico2[i] = ( gaus_dico[i] - delta * gaus_dico[i - 1] ) / ( 1 + delta * delta ); - } - } - else - { - for ( i = 0; i < 190; i++ ) - { - gaus_dico2[i] = gaus_dico[i]; - } - } - - /*-----------------------------------------------------------------* - * Codebook search initializations - *-----------------------------------------------------------------*/ - - ind1 = 0; - ind2 = 0; - - nvec = 1 << nb_bits; - step = 0x80 >> nb_bits; - - /*-----------------------------------------------------------------* - * dot product between dn and gaussian codevectors, - * keep NMAX best vectors - *-----------------------------------------------------------------*/ - - set_f( max_val, 0, NMAX + 1 ); - set_f( sign, 0, NMAX + 1 ); - - for ( i = 0; i < NMAX + 1; i++ ) - { - pos[i] = (float *) gaus_dico2; - } - - pt1 = (float *) gaus_dico2; - - for ( i = 0; i < nvec; i++, pt1 += step ) - { - cor = dotp( pt1, dn, lg ); - cora = (float) fabs( cor ); - j = NMAX - 1; - do - { - if ( cora >= max_val[j] ) - { - max_val[j + 1] = max_val[j]; - pos[j + 1] = pos[j]; - sign[j + 1] = sign[j]; - max_val[j] = cora; - pos[j] = pt1; - sign[j] = cor; - } - - j--; - } while ( j >= 0 ); - } - - /*-----------------------------------------------------------------* - * filter selected vectors - * put sign - * compute energy - *-----------------------------------------------------------------*/ - - pt1 = dico2; - for ( i = 0; i < NMAX; i++, pt1 += L_SUBFR ) - { - conv( pos[i], h, pt1, lg ); - - /* put sign and compute energy */ - if ( sign[i] < 0.0f ) - { - for ( j = 0; j < lg; j++ ) - { - pt1[j] = -pt1[j]; /*Store into dico2*/ - } - } - ener[i] = dotp( pt1, pt1, lg ); - corr[i] = dotp( pt1, xn, lg ); /* must be equal to sign[i] */ - } - - /*-----------------------------------------------------------------* - * try all combinations of NMAX best vectors - *-----------------------------------------------------------------*/ - - pt1 = dico2; - - /* Initial values for search algorithm */ - enerw = 1.0f; - cor2w = -1.0f; - - for ( i = 0; i < NMAX; i++, pt1 += L_SUBFR ) - { - pt2 = pt1; - for ( j = i; j < NMAX; j++, pt2 += L_SUBFR ) - { - cor = corr[i] + corr[j]; - eneri = ener[i] + ener[j] + 2.0f * dotp( pt1, pt2, lg ); - cor2 = cor * cor; - if ( cor2 * enerw > cor2w * eneri ) - { - cor2w = cor2; - enerw = eneri; - ind1 = i; - ind2 = j; - } - } - } - - /*-----------------------------------------------------------------* - * Compute zero-memory filtered gauss. excitation y - *-----------------------------------------------------------------*/ - - pt1 = dico2 + ind1 * L_SUBFR; - pt2 = dico2 + ind2 * L_SUBFR; - for ( i = 0; i < lg; i++ ) - { - y11[i] = pt1[i] + pt2[i]; - } - - /*-----------------------------------------------------------------* - * Signs of vectors - *-----------------------------------------------------------------*/ - - if ( sign[ind1] >= 0.0f ) - { - sign[ind1] = 1.0f; - } - else - { - sign[ind1] = -1.0f; - } - - if ( sign[ind2] >= 0.0f ) - { - sign[ind2] = 1.0f; - } - else - { - sign[ind2] = -1.0f; - } - - /*-----------------------------------------------------------------* - * Compute code - *-----------------------------------------------------------------*/ - - pt1 = pos[ind1]; - pt2 = pos[ind2]; - for ( i = 0; i < lg; i++ ) - { - code[i] = pt1[i] * sign[ind1] + pt2[i] * sign[ind2]; - } - cor = corr[ind1] + corr[ind2]; - - /*-----------------------------------------------------------------* - * Compute index - *-----------------------------------------------------------------*/ - - i = (int16_t) ( ( pos[ind1] - gaus_dico2 ) / step ); /* Division by step can be replaced by shift */ - j = (int16_t) ( ( pos[ind2] - gaus_dico2 ) / step ); /* Division by step can be replaced by shift */ - - idx = cod_2pos( i, j, sign[ind1], sign[ind2], nvec ); - - push_indice( hBstr, IND_GAUS_CDBK_INDEX, idx, 2 * nb_bits + 1 ); - push_indice( hBstr, IND_TILT_FACTOR, index_delta, 3 ); - - /*-----------------------------------------------------------------* - * Find quantized gain - *-----------------------------------------------------------------*/ - - *gain = cor / enerw; - ener1 = dotp( xn, xn, lg ); - ener1 = (float) sqrt( ener1 / enerw ); /* Minimize ebergy error */ - *gain = *gain * 0.6f + ener1 * 0.4f; - - return; -} - -/*---------------------------------------------------------------------* - * Put selected codevector positions and signs into quantization index - *---------------------------------------------------------------------*/ - -/*! r: codebook quantization index */ -static int16_t cod_2pos( - const int16_t ind1, /* i : index of 1st gaussian vector */ - const int16_t ind2, /* i : index of 2nd gaussian vector */ - const float sign1, /* i : sign of 1st gaussian vector */ - const float sign2, /* i : sign of 2nd gaussian vector */ - const int16_t n /* i : nb. of codebook vectors */ -) -{ - int16_t i1, i2, index, s1, s2; - - - s1 = 1; - if ( sign1 > 0.0f ) - { - s1 = 0; - } - - s2 = 1; - if ( sign2 > 0.0f ) - { - s2 = 0; - } - - if ( s1 == s2 ) - { - if ( ind1 <= ind2 ) - { - i1 = ind1; - i2 = ind2; - } - else - { - i1 = ind2; - i2 = ind1; - } - } - else - { - if ( ind1 > ind2 ) - { - i1 = ind1; - i2 = ind2; - } - else - { - i1 = ind2; - i2 = ind1; - s1 = s2; - } - } - index = i1 * n + i2; - index = ( index << 1 ) + s1; - - return index; -} -#endif diff --git a/lib_enc/gp_clip.c b/lib_enc/gp_clip.c index fecd64220..7dd2c1f21 100644 --- a/lib_enc/gp_clip.c +++ b/lib_enc/gp_clip.c @@ -40,213 +40,3 @@ #include "prot.h" #include "cnst.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ -#define DIST_ISF_MAX_IO 150.0f - -#define DIST_ISF_MAX 120.0f -#define DIST_ISF_THRES 60 -#define GAIN_PIT_THRES 0.9f -#define GAIN_PIT_MIN 0.6f - -#define ALPHA1 0.98f -#define ALPHA4 0.99f -#define WINDOW_SIZE 50 -#define THRESH_TYPE 0.85f -#define THRESH_VOICING 0.86f - -/*-------------------------------------------------------------------* - * init_gp_clip - * - * Pitch Gain clipping initializations - *-------------------------------------------------------------------*/ -void init_gp_clip( - float mem[] /* o : memory of gain of pitch clipping algorithm */ -) -{ - mem[0] = DIST_ISF_MAX; - mem[1] = GAIN_PIT_MIN; - mem[2] = 0.0f; /* old energy of target (dB) */ - mem[3] = 0.0f; - mem[4] = 0.0f; - mem[5] = 0.8f; - - return; -} - -/*-------------------------------------------------------------------* - * Function gp_clip - * - * The gain needs to be limited (gain pitch < 1.0) when one of the - * following cases occurs: - * - a resonance on LPC filter (lp_disp < 60 Hz) AND a good pitch - * prediction (lp_gp > 0.9) - * - target energy drops by 6 dB AND a good pitch prediction (lp_gp>1.0) - *-------------------------------------------------------------------*/ - -int16_t gp_clip( - const int16_t element_mode, /* i : element mode */ - const int32_t core_brate, /* i : core bitrate */ - const float *voicing, /* i : normalized correlations (from OL pitch) */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t coder_type, /* i : type of coder */ - const float xn[], /* i : target vector */ - float mem[] /* i/o: memory of gain of pitch clipping algorithm */ -) -{ - int16_t clip; - int16_t i; - float wener, tmp; - - clip = 0; - - if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) - { - tmp = 0.9f + ( 0.1f * mem[0] / DIST_ISF_MAX_IO ); /* clipping is activated when filtered pitch gain > threshold (0.94 to 1) */ - if ( mem[1] > tmp ) - { - clip = 1; - } - } - else if ( ( mem[0] < DIST_ISF_THRES ) && ( mem[1] > GAIN_PIT_THRES ) ) - { - clip = 1; - } - - wener = 0.01f; - for ( i = 0; i < L_SUBFR; i++ ) - { - wener += xn[i] * xn[i]; - } - wener = 10.0f * (float) log10( wener ); - if ( ( wener < ( mem[2] - 6.0f ) ) && ( mem[1] > 1.0f ) ) - { - clip = 1; - } - - mem[2] = wener; - tmp = ALPHA1 * mem[4]; - - if ( coder_type == GENERIC || coder_type == TRANSITION || coder_type == INACTIVE ) - { - tmp += ( 1 - ALPHA1 ); - } - - mem[4] = tmp; - tmp = ALPHA4 * mem[5]; - if ( i_subfr == 0 ) - { - mem[5] = ( 1 - ALPHA4 ) * voicing[0] + tmp; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - mem[5] = ( 1 - ALPHA4 ) * voicing[1] + tmp; - } - if ( mem[3] > WINDOW_SIZE ) - { - if ( ( mem[4] > THRESH_TYPE ) && ( mem[5] > THRESH_VOICING ) ) - { - clip = 1; - } - } - else - { - mem[3]++; - } - - return ( clip ); -} - -/*-------------------------------------------------------------------* - * gp_clip_test_lsf() - * - * check the minimum distance of LSFs for pitch gain clipping flag - *-------------------------------------------------------------------*/ - -void gp_clip_test_lsf( - const int16_t element_mode, /* i : element mode */ - const int32_t core_brate, /* i : core bitrate */ - const float lsf[], /* i : LSF vector */ - float mem[], /* i/o: memory of gain of pitch clipping algorithm */ - const int16_t Opt_AMR_WB /* i : flag indicating AMR-WB IO mode */ -) -{ - int16_t i; - int16_t m; - float dist, dist_min; - - dist_min = lsf[1] - lsf[0]; - - if ( Opt_AMR_WB ) - { - m = M - 1; - } - else - { - m = M; - } - - for ( i = 2; i < m; i++ ) - { - dist = lsf[i] - lsf[i - 1]; - if ( dist < dist_min ) - { - dist_min = dist; - } - } - - dist = 0.8f * mem[0] + 0.2f * dist_min; - - if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) - { - if ( dist > DIST_ISF_MAX_IO ) - { - dist = DIST_ISF_MAX_IO; - } - } - else if ( dist > DIST_ISF_MAX ) - { - dist = DIST_ISF_MAX; - } - - mem[0] = dist; - - return; -} - -/*-------------------------------------------------------------------* - * gp_clip_test_gain_pit() - * - * low-pass filtering of the pitch gain for pitch gain clipping flag - *-------------------------------------------------------------------*/ - -void gp_clip_test_gain_pit( - const int16_t element_mode, /* i : element mode */ - const int32_t core_brate, /* i : core bitrate */ - const float gain_pit, /* i : gain of quantized pitch */ - float mem[] /* i/o: memory of gain of pitch clipping algorithm */ -) -{ - float gain; - - if ( ( core_brate == ACELP_6k60 ) || ( core_brate == ACELP_8k85 ) || ( element_mode > EVS_MONO ) ) - { - gain = 0.98f * mem[1] + 0.02f * gain_pit; /* long term LTP gain average (>250ms) */ - } - else - { - gain = 0.9f * mem[1] + 0.1f * gain_pit; - } - - if ( gain < GAIN_PIT_MIN ) - { - gain = GAIN_PIT_MIN; - } - mem[1] = gain; - - return; -} -#endif diff --git a/lib_enc/gp_clip_fx.c b/lib_enc/gp_clip_fx.c index d99636a1b..bf532a085 100644 --- a/lib_enc/gp_clip_fx.c +++ b/lib_enc/gp_clip_fx.c @@ -467,7 +467,6 @@ void gp_clip_test_lsf_fx( return; } -#ifdef IVAS_FLOAT_FIXED void gp_clip_test_lsf_ivas_fx( const Word16 element_mode, /* i : element mode */ const Word32 core_brate, /* i : core bitrate */ @@ -523,4 +522,3 @@ void gp_clip_test_lsf_ivas_fx( return; } -#endif diff --git a/lib_enc/gs_enc.c b/lib_enc/gs_enc.c index 2bd0c49b1..4468194be 100644 --- a/lib_enc/gs_enc.c +++ b/lib_enc/gs_enc.c @@ -42,654 +42,15 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float edyn( const float *vec, const int16_t lvec ); - -/*-------------------------------------------------------------------* - * encod_audio() - * - * Encode audio (AC) frames - *-------------------------------------------------------------------*/ -void encod_audio( - Encoder_State *st, /* i/o: State structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : 12k8 Lp coefficient */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t attack_flag, /* i : attack flag (GSC or TC) */ - float *lsf_new, /* i : current frame ISF vector */ - float *tmp_noise, /* o : long-term noise energy */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - const float *p_Aq; - int16_t i, i_subfr, nb_subfr, last_pit_bin; - int16_t T0_tmp, T0_frac_tmp, nb_subfr_flag; - int16_t tmp_nb_bits_tot; - GSC_ENC_HANDLE hGSCEnc; - float Es_pred; - float dct_res[L_FRAME16k], dct_epit[L_FRAME16k]; - float m_mean; - float exc_wo_nf[L_FRAME16k]; - int16_t nb_bits; /*number of bits*/ - BSTR_ENC_HANDLE hBstr = st->hBstr; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*---------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - hGSCEnc = st->hGSCEnc; - - m_mean = 0.0f; - - T0_tmp = 64; - T0_frac_tmp = 0; - mvr2r( hLPDmem->mem_syn_flt, hGSCEnc->mem_syn_tmp, M ); - hGSCEnc->mem_w0_tmp = hLPDmem->mem_w0_flt; - Es_pred = 0; - - /*---------------------------------------------------------------* - * Encode GSC IVAS mode - * Encode GSC attack flag (used to reduce possible pre-echo) - * Encode GSC SWB speech flag - *---------------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO && st->idchan == 0 ) - { - push_indice( hBstr, IND_GSC_IVAS_SP, st->GSC_IVAS_mode, 2 ); - } - - if ( attack_flag > 0 ) - { - push_indice( hBstr, IND_GSC_ATTACK, 1, 1 ); - } - else - { - push_indice( hBstr, IND_GSC_ATTACK, 0, 1 ); - } - - if ( st->GSC_IVAS_mode >= 1 || ( st->coder_type != INACTIVE && ( ( st->element_mode == EVS_MONO && st->total_brate >= ACELP_13k20 ) || - ( st->element_mode > EVS_MONO && st->total_brate > MIN_BRATE_GSC_NOISY_FLAG && st->bwidth >= SWB && !st->flag_ACELP16k ) ) ) ) - { - push_indice( hBstr, IND_GSC_SWB_SPEECH, st->GSC_noisy_speech, 1 ); - } - - /*---------------------------------------------------------------*+ - * Find and encode the number of subframes - *---------------------------------------------------------------*/ - - if ( st->core_brate >= ACELP_9k60 && st->core_brate <= ACELP_13k20 ) - { - for ( i = 0; i < 5; i++ ) - { - if ( fabs( st->hSpMusClas->gsc_lt_diff_etot[MAX_LT - i - 1] ) > 6.0f && hGSCEnc->cor_strong_limit == 1 ) - { - hGSCEnc->cor_strong_limit = 0; - } - } - } - - if ( st->GSC_IVAS_mode >= 1 || ( st->GSC_noisy_speech == 1 && st->GSC_IVAS_mode == 0 ) ) - { - nb_subfr = NB_SUBFR; - if ( st->GSC_IVAS_mode > 0 && st->GSC_IVAS_mode < 3 && st->core_brate < GSC_L_RATE_STG ) - { - nb_subfr = 2; - } - - hGSCEnc->cor_strong_limit = 0; - nb_subfr_flag = 1; - } - else if ( st->L_frame == L_FRAME16k && ( st->core_brate <= ACELP_13k20 || st->coder_type == INACTIVE ) ) - { - hGSCEnc->cor_strong_limit = 0; - nb_subfr = SWNB_SUBFR; - nb_subfr_flag = 1; - } - else - { - if ( ( hGSCEnc->cor_strong_limit == 0 || st->coder_type == INACTIVE ) && st->core_brate >= ACELP_9k60 ) - { - nb_subfr = 2; - nb_subfr_flag = 0; - hGSCEnc->cor_strong_limit = 0; - } - else - { - nb_subfr = SWNB_SUBFR; - nb_subfr_flag = 1; - } - - if ( st->L_frame == L_FRAME16k && ( st->hSpMusClas->mold_corr > .8f && st->core_brate >= MIN_RATE_4SBFR && st->coder_type != INACTIVE ) ) - { - nb_subfr *= 2; - nb_subfr_flag |= 0x2; - } - - if ( st->L_frame == L_FRAME16k && st->core_brate >= MIN_RATE_4SBFR ) - { - push_indice( hBstr, IND_HF_NOISE, nb_subfr_flag, 2 ); - } - else if ( st->core_brate >= ACELP_9k60 ) - { - /* nb_subfr_flag can only have the value 0 or 1 */ - push_indice( hBstr, IND_HF_NOISE, nb_subfr_flag, 1 ); - } - } - - if ( st->L_frame == L_FRAME16k && nb_subfr == NB_SUBFR ) - { - nb_subfr = NB_SUBFR16k; - } - - /*---------------------------------------------------------------* - * Compute adaptive (pitch) excitation contribution - *---------------------------------------------------------------*/ - - if ( !( st->GSC_IVAS_mode > 0 && st->L_frame / nb_subfr == 2 * L_SUBFR && st->GSC_IVAS_mode < 3 ) && - ( ( st->core_brate >= MIN_RATE_FCB || st->GSC_noisy_speech ) && - ( ( nb_subfr == NB_SUBFR && st->L_frame == L_FRAME ) || ( nb_subfr == NB_SUBFR16k && st->L_frame == L_FRAME16k ) ) ) ) - { - if ( st->element_mode > EVS_MONO ) - { - nb_bits = 5; - } - else - { - nb_bits = Es_pred_bits_tbl[BIT_ALLOC_IDX( st->core_brate, GENERIC, -1, -1 )]; - } - Es_pred_enc( &Es_pred, &i, st->L_frame, L_SUBFR, res, st->voicing, nb_bits, 0 ); - push_indice( hBstr, IND_ES_PRED, i, nb_bits ); - } - - enc_pit_exc( st, speech, Aw, Aq, Es_pred, res, synth, exc, &T0_tmp, &T0_frac_tmp, pitch_buf, nb_subfr, &hGSCEnc->lt_gpitch, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - /*---------------------------------------------------------------* - * DCT transform - *---------------------------------------------------------------*/ - - edct( exc, dct_epit, st->L_frame, st->element_mode ); - - edct( res, dct_res, st->L_frame, st->element_mode ); - - /*---------------------------------------------------------------* - * Calculate energy dynamics - *---------------------------------------------------------------*/ - - for ( i = 7; i < 15; i++ ) - { - m_mean += edyn( dct_res + i * 16, 16 ); - } - m_mean *= 0.125f; - - if ( m_mean > hGSCEnc->mid_dyn ) - { - hGSCEnc->mid_dyn = 0.2f * hGSCEnc->mid_dyn + 0.8f * m_mean; - } - else - { - hGSCEnc->mid_dyn = 0.6f * hGSCEnc->mid_dyn + 0.4f * m_mean; - } - - if ( st->coder_type != INACTIVE ) - { - hGSCEnc->noise_lev = ( NOISE_LEVEL_SP3 + 1 ) - usquant( hGSCEnc->mid_dyn, &m_mean, MIN_DYNAMIC, DYNAMIC_RANGE / GSC_NF_STEPS, GSC_NF_STEPS ); - if ( hGSCEnc->noise_lev > NOISE_LEVEL_SP3 ) - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - } - - hGSCEnc->past_dyn_dec = hGSCEnc->noise_lev; - - if ( st->GSC_IVAS_mode >= 1 ) - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP2; - if ( st->GSC_IVAS_mode == 3 ) /* Music like */ - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - } - else if ( st->GSC_noisy_speech == 0 ) - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - } - else if ( st->core_brate <= ACELP_8k00 ) - { - if ( hGSCEnc->noise_lev <= NOISE_LEVEL_SP2 ) - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP2; - } - - push_indice( hBstr, IND_NOISE_LEVEL, hGSCEnc->noise_lev - NOISE_LEVEL_SP2, 2 ); - } - else if ( st->GSC_noisy_speech ) - { - hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - else - { - push_indice( hBstr, IND_NOISE_LEVEL, hGSCEnc->noise_lev - NOISE_LEVEL_SP0, 3 ); - } - - /*---------------------------------------------------------------* - * Find and encode the last band where the adaptive (pitch) contribution is significant - *---------------------------------------------------------------*/ - - last_pit_bin = Pit_exc_contribution_len( st, dct_res, dct_epit, pitch_buf, &hGSCEnc->pit_exc_hangover ); - - if ( last_pit_bin == 0 ) - { - hLPDmem->tilt_code_flt = 0.0f; - } - else - { - last_pit_bin++; - } - - /*--------------------------------------------------------------------------------------* - * GSC encoder - *--------------------------------------------------------------------------------------*/ - - /* Find the current total number of bits used */ - tmp_nb_bits_tot = hBstr->nb_bits_tot; - - if ( st->extl_brate > 0 ) - { - /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ - tmp_nb_bits_tot--; - } - - if ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 && st->idchan == 0 ) - { - /* add 5 bits for noisiness */ - tmp_nb_bits_tot += 5; - } - - gsc_enc( st, dct_res, dct_epit, last_pit_bin, tmp_nb_bits_tot, nb_subfr, lsf_new, exc_wo_nf, tmp_noise ); - - /*--------------------------------------------------------------------------------------* - * iDCT transform - *--------------------------------------------------------------------------------------*/ - - edct( dct_epit, exc, st->L_frame, st->element_mode ); - - edct( exc_wo_nf, exc_wo_nf, st->L_frame, st->element_mode ); - - /*--------------------------------------------------------------------------------------* - * Remove potential pre-echo in case an onset has been detected - *--------------------------------------------------------------------------------------*/ - - pre_echo_att( &hGSCEnc->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Update BWE excitation - *--------------------------------------------------------------------------------------*/ - - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME16k ) - { - set_f( voice_factors, 0.0f, NB_SUBFR16k ); - interp_code_4over2( exc, bwe_exc, L_FRAME16k ); - } - else - { - set_f( voice_factors, 0.0f, NB_SUBFR ); - interp_code_5over2( exc, bwe_exc, L_FRAME ); - } - } - - /*--------------------------------------------------------------------------------------* - * Synthesis - *--------------------------------------------------------------------------------------*/ - - p_Aq = Aq; - for ( i_subfr = 0; i_subfr < st->L_frame; i_subfr += L_SUBFR ) - { - syn_filt( p_Aq, M, &exc_wo_nf[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - p_Aq += ( M + 1 ); - } - - /*--------------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = hGSCEnc->mem_w0_tmp; - mvr2r( exc_wo_nf, exc, st->L_frame ); - - return; -} - -/*-------------------------------------------------------------------* - * gsc_enc() - * - * Generic audio signal encoder - *-------------------------------------------------------------------*/ - -void gsc_enc( - Encoder_State *st, /* i/o: State structure */ - float res_dct_in[], /* i : dct of residual signal */ - float exc_dct_in[], /* i/o: dct of pitch-only excitation / total excitation */ - const int16_t Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ - const int16_t bits_used, /* i : Number of bit used before frequency Q */ - const int16_t nb_subfr, /* i : Number of subframe considered */ - const float *lsf_new, /* i : ISFs at the end of the frame */ - float *exc_wo_nf, /* o : excitation (in f domain) without noisefill */ - float *tmp_noise /* o : long-term noise energy */ -) -{ - int16_t i; - GSC_ENC_HANDLE hGSCEnc; - BSTR_ENC_HANDLE hBstr; - float exc_diffQ[L_FRAME16k]; - float exc_diff[L_FRAME16k]; - int16_t bit; - int16_t nb_subbands; - int16_t pvq_len; - int16_t bits_per_bands[MBANDS_GN_BITALLOC16k]; /*Q3*/ - int16_t tmp_band; - float concat_in[L_FRAME16k]; - float concat_out[L_FRAME16k]; - int16_t max_ener_band[MBANDS_GN_BITALLOC16k], j; - float Ener_per_bd_iQ[MBANDS_GN16k]; - int16_t last_bin; - int16_t bitallocation_band[MBANDS_GN_BITALLOC16k]; - int16_t bitallocation_exc[2]; - int16_t npulses[NB_SFM]; - int16_t maxpulse[NB_SFM]; - float mean_gain; - int16_t seed_init; - float max_eq, max_eq_val; - - /*--------------------------------------------------------------------------------------* - * Initialization - *--------------------------------------------------------------------------------------*/ - - hGSCEnc = st->hGSCEnc; - hBstr = st->hBstr; - - bit = bits_used; - if ( st->coder_type == INACTIVE && ( st->tdm_LRTD_flag == 1 || st->element_mode == IVAS_SCE ) && st->core_brate <= GSC_LRES_GAINQ_LIMIT ) - { - bit += GSC_LRES_NB_NITS; - } - - set_f( exc_diffQ, 0.0f, st->L_frame ); - set_f( Ener_per_bd_iQ, 0.0f, MBANDS_GN16k ); - - /*--------------------------------------------------------------------------------------* - * Calculate the difference between the residual spectrum and the spectrum of adaptive excitation - * (non valuable temporal content present in exc_dct_in is already zeroed) - *--------------------------------------------------------------------------------------*/ - - v_sub( res_dct_in, exc_dct_in, exc_diff, st->L_frame ); - exc_diff[0] = 0; - - /*--------------------------------------------------------------------------------------* - * Multiply the difference spectrum with the normalized spectral shape of the residual signal - * This improves the stability of the differnece spectrum since the spectral shape of the - * residual signal is less suseptible to rapid changes than the difference spectrum - *--------------------------------------------------------------------------------------*/ - - if ( Diff_len == 0 ) - { - tmp_band = 0; - } - else - { - tmp_band = hGSCEnc->mem_last_pit_band; - } - - Ener_per_band_comp( exc_diff, Ener_per_bd_iQ, MBANDS_GN, 1, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Gain quantizaion - *--------------------------------------------------------------------------------------*/ - - i = 0; - while ( i < SIZE_BRATE_INTERMED_TBL ) - { - if ( st->core_brate <= brate_intermed_tbl[i] ) - { - break; - } - i++; - } - if ( st->element_mode > EVS_MONO && st->coder_type == AUDIO && - st->core_brate <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ - { - i--; - } - - mean_gain = gsc_gainQ( hBstr, st->element_mode, st->idchan, Ener_per_bd_iQ, Ener_per_bd_iQ, brate_intermed_tbl[i], st->coder_type, st->bwidth, st->L_frame, st->tdm_LRTD_flag, st->core_brate ); - - *tmp_noise = 10.0f * mean_gain; - - /*--------------------------------------------------------------------------------------* - * PVQ encoder - *--------------------------------------------------------------------------------------*/ - - bands_and_bit_alloc( hGSCEnc->cor_strong_limit, hGSCEnc->noise_lev, st->core_brate, Diff_len, bit, &bit, Ener_per_bd_iQ, max_ener_band, bits_per_bands, &nb_subbands, exc_diff, concat_in, &pvq_len, st->coder_type, st->bwidth, st->GSC_noisy_speech, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); - - set_s( npulses, 0, NB_SFM ); - - if ( bit == 0 ) - { - set_zero( concat_out, L_FRAME16k ); - } - else - { - bit -= pvq_core_enc( hBstr, concat_in, concat_out, bit, nb_subbands, gsc_sfm_start, gsc_sfm_end, gsc_sfm_size, bits_per_bands, NULL, npulses, maxpulse, ACELP_CORE ); - } - - /* write unused bits */ - while ( bit > 0 ) - { - i = min( bit, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - bit -= i; - } - - /* Reorder Q bands */ - last_bin = 0; - set_s( bitallocation_band, 0, MBANDS_GN_BITALLOC16k ); - seed_init = 0; - max_eq = 0; - max_eq_val = 1.0f; - - if ( ( ( ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 ) || st->core_brate < 6000 ) && st->coder_type <= UNVOICED ) || st->GSC_IVAS_mode >= 1 ) - { - j = emaximum( concat_out, nb_subbands * 16, &max_eq ); - max_eq = max_eq_val / ( fabsf( concat_out[j] ) + 0.01f ); - max_eq = min( max_eq_val, max_eq ); - } - - for ( j = 0; j < nb_subbands; j++ ) - { - mvr2r( concat_out + j * 16, exc_diffQ + max_ener_band[j] * 16, 16 ); - - if ( max_ener_band[j] > last_bin ) - { - last_bin = max_ener_band[j]; - } - - bitallocation_band[max_ener_band[j]] = 1; - - seed_init += npulses[j]; - } - if ( st->last_coder_type != AUDIO /* First audio frame */ - && st->last_coder_type != UNVOICED ) /* last_coder_type == INACTIVE is overwritten in update_enc to UNVOICED */ - { - for ( j = 0; j < nb_subbands * 16; j++ ) - { - if ( concat_out[j] > 0 ) - { - seed_init = (int16_t) ( (int32_t) seed_init * 8 ); - } - if ( concat_out[j] < 0 ) - { - seed_init = (int16_t) ( (int32_t) seed_init + 3 ); - } - } - - hGSCEnc->seed_tcx = seed_init; - } - - if ( st->core_brate == ACELP_8k00 && st->bwidth != NB ) - { - bitallocation_exc[0] = 0; - bitallocation_exc[1] = 0; - - if ( exc_diffQ[L_FRAME8k - 2] != 0 ) - { - bitallocation_exc[0] = 1; - } - - if ( exc_diffQ[L_FRAME8k - 1] != 0 ) - { - bitallocation_exc[1] = 1; - } - } - - /*--------------------------------------------------------------------------------------* - * Skip adaptive (pitch) contribution frequency band (no noise added over the adaptive (pitch) contribution) - * Find x pulses between 1.6-3.2kHz to code in the spectrum of the residual signal - * Gain is based on the inter-correlation gain between the pulses found and residual signal - *--------------------------------------------------------------------------------------*/ - - if ( st->GSC_IVAS_mode >= 1 && st->GSC_noisy_speech == 1 ) - { - for ( i = 64; i < st->L_frame; i++ ) - { - exc_diffQ[i] *= max_eq; - } - } - else if ( st->core_brate < ACELP_7k20 && st->GSC_noisy_speech == 1 && st->coder_type <= UNVOICED ) - { - for ( i = 0; i < L_FRAME; i++ ) - { - exc_diffQ[i] *= max_eq; - } - } - else - { - freq_dnw_scaling( hGSCEnc->cor_strong_limit, st->coder_type, hGSCEnc->noise_lev, st->core_brate, exc_diffQ, st->L_frame ); - } - - /*--------------------------------------------------------------------------------------* - * Estimate noise level - *--------------------------------------------------------------------------------------*/ - - highband_exc_dct_in( st->core_brate, mfreq_bindiv_loc, last_bin, Diff_len, hGSCEnc->noise_lev, tmp_band, exc_diffQ, &hGSCEnc->seed_tcx, Ener_per_bd_iQ, nb_subfr, exc_dct_in, st->last_coder_type, bitallocation_band, lsf_new, hGSCEnc->last_exc_dct_in, &hGSCEnc->last_ener, hGSCEnc->last_bitallocation_band, bitallocation_exc, 0, st->coder_type, st->bwidth, exc_wo_nf, st->GSC_noisy_speech, NULL, st->L_frame, st->element_mode, st->GSC_IVAS_mode ); - - exc_dct_in[0] = 0; - - return; -} - - -/*---------------------------------------------------------------------* - * edyn() - * - * Calculate energy dynamics in a vector (ratio of energy maximum to energy mean) - *---------------------------------------------------------------------*/ - -/*! r: ratio of max to mean */ -static float edyn( - const float *vec, /* i : input vector */ - const int16_t lvec /* i : length of input vector */ -) -{ - int16_t j; - float temp, ener_max, ener_mean, dyn; - - ener_mean = 1.0f; - ener_max = 1.0f; - - for ( j = 0; j < lvec; j++ ) - { - temp = vec[j] * vec[j]; - - if ( temp > ener_max ) - { - ener_max = temp; - } - ener_mean += temp; - } - ener_mean /= lvec; - dyn = 10.0f * ( ener_max / ener_mean ); - - return dyn; -} -#endif - /*-------------------------------------------------------------------* * GSC_enc_init() * * Initialize GSC encoder state structure *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void GSC_enc_init( - GSC_ENC_HANDLE hGSCEnc /* i/o: GSC data handle */ -) -{ - /* AC mode */ - hGSCEnc->seed_tcx = 15687; - hGSCEnc->cor_strong_limit = 1; -#ifndef IVAS_FLOAT_FIXED - set_f( hGSCEnc->last_exc_dct_in, 0, L_FRAME16k ); - hGSCEnc->last_ener = 0.0f; -#else - set16_fx( hGSCEnc->last_exc_dct_in_fx, 0, L_FRAME16k ); - hGSCEnc->last_ener_fx = 0; -#endif - set_s( hGSCEnc->last_bitallocation_band, 0, 6 ); - hGSCEnc->mem_last_pit_band = BAND1k2 + 1; - -#ifndef IVAS_FLOAT_FIXED - hGSCEnc->lt_gpitch = 0.0f; -#else - hGSCEnc->lt_gpitch_fx = 0; -#endif - hGSCEnc->pit_exc_hangover = 0; - - /* GSC - pitch excitation parameters */ -#ifndef IVAS_FLOAT_FIXED - hGSCEnc->mem_w0_tmp = 0.0f; - set_f( hGSCEnc->mem_syn_tmp, 0.0f, M ); -#else - hGSCEnc->mem_w0_tmp_fx = 0; - move16(); - set16_fx( hGSCEnc->mem_syn_tmp_fx, 0, M ); -#endif - -#ifndef IVAS_FLOAT_FIXED - hGSCEnc->Last_frame_ener = (float) MAX_32; - hGSCEnc->mid_dyn = 40.0f; -#else - hGSCEnc->mid_dyn_fx = 5120; - move16(); /*40 -> Q7 */ -#endif - hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - hGSCEnc->past_dyn_dec = 0; - - return; -} -#endif diff --git a/lib_enc/gs_enc_fx.c b/lib_enc/gs_enc_fx.c index 9a8af4188..bc2e2a091 100644 --- a/lib_enc/gs_enc_fx.c +++ b/lib_enc/gs_enc_fx.c @@ -998,7 +998,6 @@ void gsc_enc_fx( } -#ifdef IVAS_FLOAT_FIXED void gsc_enc_ivas_fx( Encoder_State *st, /* i/o: State structure */ Word16 res_dct_in_fx[], @@ -1286,7 +1285,6 @@ void gsc_enc_ivas_fx( return; } -#endif /*======================================================================*/ /* FUNCTION : edyn_fx() */ diff --git a/lib_enc/guided_plc_enc.c b/lib_enc/guided_plc_enc.c index 63d085011..c10866a49 100644 --- a/lib_enc/guided_plc_enc.c +++ b/lib_enc/guided_plc_enc.c @@ -40,349 +40,3 @@ #include "prot.h" #include "stat_enc.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * coderLookAheadInnovation() - * - * - *-------------------------------------------------------------------*/ - -static void coderLookAheadInnovation( - const float A[], /* i : coefficients NxAz[M+1] */ - int16_t *pT, /* o : pitch */ - PLC_ENC_EVS_HANDLE st, /* i/o: coder memory state */ - float *speechLookAhead, - float *old_exc, - const int16_t L_subfr, - const int16_t L_frame ) -{ - int16_t i; - float *exc, exc_buf[L_EXC_MEM + 2 * L_SUBFR + 8]; - int16_t T0 = 0; - int16_t prev_pitch; - float ps, alp, max_ps; - int16_t subfr_len; - int16_t search_range; - - search_range = 9; - - set_f( exc_buf, 0.0f, L_EXC_MEM + 2 * L_SUBFR + 8 ); - - /* Framing parameters */ - if ( L_frame < L_FRAME16k ) - { - subfr_len = (int16_t) ( 1.75 * L_subfr ); - } - else - { - subfr_len = (int16_t) ( 2 * L_subfr ); - } - - /*------------------------------------------------------------------------* - * Initialize buffers * - *------------------------------------------------------------------------*/ - - /* set excitation memory */ - exc = exc_buf + L_EXC_MEM + 8; - mvr2r( old_exc, exc_buf, L_EXC_MEM + 8 ); - - /*------------------------------------------------------------------------* - * - Get residual signal and target at lookahead part. * - *------------------------------------------------------------------------*/ - - /* find LP residual signal for look-ahead part */ - getLookAheadResSig_flt( speechLookAhead, A, exc, L_frame, L_subfr, M, 2 ); - - /* Initialize excitation buffer */ - prev_pitch = st->T0_4th; - /* find target signals */ - /* find best candidate of pitch lag */ - { - max_ps = -1.0e10; - T0 = st->T0_4th; - for ( i = -search_range; i < search_range; i++ ) - { - if ( prev_pitch + i > st->pit_max || prev_pitch + i < st->pit_min ) - { - continue; - } - ps = dotp( exc, &exc[-( prev_pitch + i )], subfr_len ); - alp = dotp( &exc[-( prev_pitch + i )], &exc[-( prev_pitch + i )], subfr_len ); - ps /= (float) sqrt( alp + 1.0e-10 ); - if ( max_ps < ps ) - { - max_ps = ps; - T0 = prev_pitch + i; - } - } - if ( max_ps < 0.0 ) - { - T0 = st->T0_4th; - } - } - - pT[0] = T0; - - return; -} - - -/*-------------------------------------------------------------------* - * getConcealedlsf() - * - * - *-------------------------------------------------------------------*/ - -static void getConcealedlsf( - PLC_ENC_EVS_HANDLE memDecState, - const float lsfBase[], - const int16_t L_frame, - const int16_t last_good ) -{ - float *lsf = memDecState->lsf_con_flt; - - dlpc_bfi_flt( L_frame, &lsf[0], memDecState->lsfold, last_good, 1 /*assumes packet loss */, memDecState->mem_MA, memDecState->mem_AR_flt, &( memDecState->stab_fac ), memDecState->lsf_adaptive_mean, 1, NULL, 0, NULL, NULL, lsfBase ); - - return; -} - - -/*-------------------------------------------------------------------* - * enc_prm_side_Info() - * - * - *-------------------------------------------------------------------*/ - -void enc_prm_side_Info( - PLC_ENC_EVS_HANDLE hPlc_Ext, - Encoder_State *st ) -{ - int16_t diff_pitch; - int16_t bits_per_subfr, search_range; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - bits_per_subfr = 4; - search_range = 8; - - if ( hPlc_Ext->nBits > 1 ) - { - push_next_indice( hBstr, 1, 1 ); - - diff_pitch = hPlc_Ext->T0 - hPlc_Ext->T0_4th; - - if ( ( diff_pitch > search_range - 1 ) || ( diff_pitch < -search_range + 1 ) ) - { - diff_pitch = -8; - } - - push_next_indice( hBstr, ( diff_pitch + search_range ), bits_per_subfr ); - } - else - { - push_next_indice( hBstr, 0, 1 ); - } - - return; -} - -/*-------------------------------------------------------------------* - * encoderSideLossSimulation() - * - * Encoder side loss simulation - *-------------------------------------------------------------------*/ - -void encoderSideLossSimulation( - Encoder_State *st, - PLC_ENC_EVS_HANDLE hPlc_Ext, - float *lsf_q, - const float stab_fac, - const int16_t calcOnlylsf, - const int16_t L_frame ) -{ - float lspLocal[M]; - const float *lsfBase; /* base for differential lsf coding */ - - /* Decoder State Update */ - lsf2lsp( lsf_q, lspLocal, M, st->sr_core ); - - lsfBase = PlcGetlsfBase_flt( st->lpcQuantization, st->narrowBand, st->sr_core ); - - mvr2r( st->mem_MA, hPlc_Ext->mem_MA, M ); - - /* lsf parameter processing for concealment */ - updatelsfForConcealment_flt( hPlc_Ext, lsf_q ); - hPlc_Ext->stab_fac = stab_fac; - - /* Update Decoder State for the loss simulation at the next frame */ - mvr2r( lsf_q, hPlc_Ext->lsfold, M ); - mvr2r( lspLocal, hPlc_Ext->lspold, M ); - - if ( calcOnlylsf ) - { - /* lsf concealment simulation */ - getConcealedlsf( hPlc_Ext, lsfBase, L_frame, st->clas ); - hPlc_Ext->T0 = hPlc_Ext->T0_4th; - } - else - { - float AqCon[( NB_SUBFR16k + 1 ) * ( M + 1 )]; - float *speechLookAhead; - float old_exc[L_EXC_MEM + 8]; - - /* Initialize pointers here */ - mvr2r( hPlc_Ext->old_exc, old_exc, 8 ); - mvr2r( hPlc_Ext->LPDmem->old_exc_flt, &old_exc[8], L_EXC_MEM ); - speechLookAhead = &( st->speech_enc_pe_flt[L_frame] ); - - /* lsf concealment simulation */ - getConcealedLP_flt( hPlc_Ext, AqCon, lsfBase, st->sr_core, st->clas, L_frame ); - - /* apply encoder side PLC simulation */ - hPlc_Ext->pit_min = st->pit_min; - hPlc_Ext->pit_max = st->pit_max; - coderLookAheadInnovation( AqCon, &( hPlc_Ext->T0 ), hPlc_Ext, speechLookAhead, old_exc, L_SUBFR, st->L_frame ); - } - - return; -} - -/*-------------------------------------------------------------------* - * GplcTcxEncSetup() - * - * - *-------------------------------------------------------------------*/ - -void GplcTcxEncSetup( - const int16_t tcxltp_pitch_int, - PLC_ENC_EVS_HANDLE hPlc_Ext ) -{ - hPlc_Ext->T0_4th = tcxltp_pitch_int; - - return; -} - -/*-------------------------------------------------------------------* - * encSideSpecPowDiffuseDetector() - * - * - *-------------------------------------------------------------------*/ - -int16_t encSideSpecPowDiffuseDetector( - float *lsf_ref, - float *lsf_con, - const int32_t sr_core, - float *prev_lsf4_mean, - const int16_t sw, - const int16_t coder_type ) -{ - float lsf_mod[M]; - float dist1, dist2, cum_dist1, cum_dist2; - float lsf4_mean; - float th; - float th_dif_lsf4_mean; - int16_t idx; - int16_t cnt_imprv, i; - - /* calculate the mean of the lowest 4 lsfs */ - lsf4_mean = 0; - - for ( i = 0; i < 4; i++ ) - { - lsf4_mean += lsf_ref[i]; - } - lsf4_mean /= 4.0f; - - if ( sw ) - { - mvr2r( lsf_con, lsf_mod, M ); - - modify_lsf_flt( lsf_mod, M, sr_core, 1 ); - - cum_dist1 = 0; - cum_dist2 = 0; - - cnt_imprv = 0; - - - for ( i = 0; i < M; i++ ) - { - dist1 = ( lsf_con[i] - lsf_ref[i] ) * ( lsf_con[i] - lsf_ref[i] ); - dist2 = ( lsf_mod[i] - lsf_ref[i] ) * ( lsf_mod[i] - lsf_ref[i] ); - cum_dist1 += dist1; - cum_dist2 += dist2; - - if ( dist1 > dist2 ) - { - cnt_imprv++; - } - } - - th = 800; - th_dif_lsf4_mean = 90; - - if ( sr_core == INT_FS_16k ) - { - th *= 1.25; - th_dif_lsf4_mean *= 1.25; - } - - - if ( cum_dist1 > cum_dist2 * 1.15 && lsf4_mean - *prev_lsf4_mean > th_dif_lsf4_mean && *prev_lsf4_mean < th && cnt_imprv > 2 && coder_type == GENERIC ) - { - idx = 1; - } - else - { - idx = 0; - } - } - else - { - idx = 0; - } - - /* update parameters */ - *prev_lsf4_mean = lsf4_mean; - - return idx; -} - -/*-------------------------------------------------------------------* - * updateSpecPowDiffuseIdx() - * - * - *-------------------------------------------------------------------*/ - -void updateSpecPowDiffuseIdx( - const float gain_pitch_buf[], /* i : gain pitch values */ - const float gain_code_buf[], /* i : gain pitch values */ - int16_t glr_idx[2], /* o : */ - float mean_gc[2] /* o : */ -) -{ - float min_gp; - int16_t k; - - mean_gc[1] = gain_code_buf[0]; - min_gp = gain_pitch_buf[0]; - - for ( k = 1; k < 4; k++ ) - { - mean_gc[1] += gain_code_buf[k]; - - if ( gain_pitch_buf[k] < min_gp ) - { - min_gp = gain_pitch_buf[k]; - } - } - - if ( mean_gc[1] / ( mean_gc[0] + 1e-6 ) < 1.098 || min_gp > 0.82 ) - { - glr_idx[0] = 0; - } - mean_gc[0] = mean_gc[1]; - - return; -} -#endif diff --git a/lib_enc/hf_cod_amrwb.c b/lib_enc/hf_cod_amrwb.c index 03cbad6e3..d1de09bc7 100644 --- a/lib_enc/hf_cod_amrwb.c +++ b/lib_enc/hf_cod_amrwb.c @@ -41,302 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void hp400_12k8( float signal[], const int16_t lg, float mem[] ); -static void filt_6k_8k( float signal[], const int16_t lg, float mem[] ); - - -/*---------------------------------------------------------------------* - * hf_cod_init() - * - * - *---------------------------------------------------------------------*/ - -void hf_cod_init( - float *mem_hp400_enc, /* o : memory of hp 400 Hz filter */ - float *mem_hf1_enc, /* o : HF band-pass filter memory */ - float *mem_syn_hf_enc, /* o : HF synthesis memory */ - float *mem_hf2_enc, /* o : HF band-pass filter memory */ - float *gain_alpha /* o : smoothing gain for transitions between active and inactive frames */ -) -{ - set_f( mem_hp400_enc, 0, 4 ); - set_f( mem_hf1_enc, 0, L_FIR - 1 ); - set_f( mem_syn_hf_enc, 0, M ); - set_f( mem_hf2_enc, 0, L_FIR - 1 ); - *gain_alpha = 1.0; - - return; -} - - -/*---------------------------------------------------------------------* - * hf_cod() - * - * - *---------------------------------------------------------------------*/ - -void hf_cod( - const int32_t core_brate, /* i : core bitrate */ - const float *speech16k, /* i : original speech at 16 kHz */ - const float Aq[], /* i : quantized Aq */ - const float exc[], /* i : excitation at 12.8 kHz */ - float synth[], /* i : 12.8kHz synthesis signal */ - int16_t *seed2_enc, /* i/o: random seed for HF noise gen */ - float *mem_hp400_enc, /* i/o: memory of hp 400 Hz filter */ - float *mem_syn_hf_enc, /* i/o: HF synthesis memory */ - float *mem_hf1_enc, /* i/o: HF band-pass filter memory */ - float *mem_hf2_enc, /* i/o: HF band-pass filter memory */ - const int16_t *dtxHangoverCount, - float *gain_alpha, /* i/o: smoothing gain for transitions between active and inactive frames */ - int16_t *hf_gain /* o : HF gain to be transmitted to decoder */ -) -{ - int16_t i; - float ener_hf, ener_exc, ener_input, fac, HF_syn[L_SUBFR16k], tmp, ener, scale; - float Ap[M16k + 1]; - float HF_SP[L_SUBFR16k]; - float HF_est_gain; - float HF_calc_gain; - float HF_corr_gain; - int16_t HF_gain_ind; - float dist_min, dist; - float HF[L_SUBFR16k]; /* HF excitation */ - - /* Original speech signal as reference for high band gain quantisation */ - for ( i = 0; i < L_SUBFR16k; i++ ) - { - HF_SP[i] = speech16k[i]; - } - - /*-----------------------------------------------------------------* - * generate white noise vector - *-----------------------------------------------------------------*/ - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - HF[i] = (float) own_random( seed2_enc ); - } - - /*-----------------------------------------------------------------* - * calculate energy scaling factor so that white noise would have the - * same energy as exc12k8 - *-----------------------------------------------------------------*/ - - ener_exc = 0.01f; - for ( i = 0; i < L_SUBFR; i++ ) - { - ener_exc += exc[i] * exc[i]; - } - - ener_hf = 0.01f; - for ( i = 0; i < L_SUBFR16k; i++ ) - { - ener_hf += HF[i] * HF[i]; - } - - scale = (float) ( sqrt( ener_exc / ener_hf ) ); - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - HF[i] *= scale; - } - - /*-----------------------------------------------------------------* - * calculate energy scaling factor to respect tilt of synth12k8 - * (tilt: 1=voiced, -1=unvoiced) - *-----------------------------------------------------------------*/ - - hp400_12k8( synth, L_SUBFR, mem_hp400_enc ); - - ener = 0.001f; - tmp = 0.001f; - for ( i = 1; i < L_SUBFR; i++ ) - { - ener += synth[i] * synth[i]; /* ener = r[0] */ - tmp += synth[i] * synth[i - 1]; /* tmp = r[1] */ - } - fac = tmp / ener; - - HF_est_gain = (float) ( 1.0f - fac ); - if ( core_brate == SID_1k75 || core_brate == FRAME_NO_DATA ) - { - /* emphasize HF noise in CNG */ - HF_est_gain *= 1.25f; /* full alignment with G.722 and AMR-WB */ - } - - if ( HF_est_gain < 0.1f ) - { - HF_est_gain = 0.1f; - } - - if ( HF_est_gain > 1.0f ) /* this condition is not in G.722.2, but in AMR-WB!*/ - { - HF_est_gain = 1.0f; - } - - /*-----------------------------------------------------------------* - * synthesis of noise: 4.8kHz..5.6kHz --> 6kHz..7kHz - *-----------------------------------------------------------------*/ - - weight_a( Aq, Ap, 0.6f, M ); - syn_filt( Ap, M, HF, HF_syn, L_SUBFR16k, mem_syn_hf_enc, 1 ); - - /*-----------------------------------------------------------------* - * high pass filtering (0.9375ms of delay = 15 samples@16k) - *-----------------------------------------------------------------*/ - - filt_6k_8k( HF_syn, L_SUBFR16k, mem_hf1_enc ); - - /* filtering of the original signal */ - filt_6k_8k( HF_SP, L_SUBFR16k, mem_hf2_enc ); - - /* check the gain difference */ - ener_input = 0.01f; - ener_hf = 0.01f; - for ( i = 0; i < L_SUBFR16k; i++ ) - { - ener_input += HF_SP[i] * HF_SP[i]; - ener_hf += HF_syn[i] * HF_syn[i]; - } - - HF_calc_gain = (float) sqrt( ener_input / ener_hf ); - - /* set energy of HF synthesis to energy of original HF: - cross-fade between HF levels in active and inactive frame in hangover period */ - - *gain_alpha *= (float) ( 10 - ( *dtxHangoverCount ) ) / 7.0f; - if ( ( 10 - ( *dtxHangoverCount ) ) > 6 ) - { - *gain_alpha = 1.0f; - } - - HF_corr_gain = ( *gain_alpha ) * HF_calc_gain + ( 1.0f - ( *gain_alpha ) ) * HF_est_gain; - HF_corr_gain /= 2.0f; /* to stay in aligned with AMR-WB legacy decoder where decoded gain is multiplied by 2 */ - - /* Quantize the correction gain */ - dist_min = 100000.0f; - HF_gain_ind = 0; - for ( i = 0; i < 16; i++ ) - { - dist = ( HF_corr_gain - HP_gain[i] ) * ( HF_corr_gain - HP_gain[i] ); - if ( dist_min > dist ) - { - dist_min = dist; - HF_gain_ind = i; - } - } - - *hf_gain = HF_gain_ind; - - return; -} - -/*-----------------------------------------------------------------------* - * Function hp400_12k8() * - * * - * 2nd order Cheb2 high pass filter with cut off frequency at 400 Hz. * - * Optimized for fixed-point to get the following frequency response : * - * * - * frequency : 0Hz 100Hz 200Hz 300Hz 400Hz 630Hz 1.5kHz 3kHz * - * dB loss : -infdB -30dB -20dB -10dB -3dB +6dB +1dB 0dB * - * * - * Algorithm : * - * * - * y[i] = b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] * - * + a[1]*y[i-1] + a[2]*y[i-2]; * - * * - * short b[3] = {3660, -7320, 3660}; in Q12 * - * short a[3] = {4096, 7320, -3540}; in Q12 * - * * - * float --> b[3] = {0.893554687, -1.787109375, 0.893554687}; * - * a[3] = {1.000000000, 1.787109375, -0.864257812}; * - *-----------------------------------------------------------------------*/ - -static void hp400_12k8( - float signal[], /* i/o: signal */ - const int16_t lg, /* i : length of signal */ - float mem[] /* i/o: filter memory [4] */ -) -{ - int16_t i; - float x0, x1, x2; - float yy0, yy1, y2; - - yy1 = mem[0]; - y2 = mem[1]; - x0 = mem[2]; - x1 = mem[3]; - for ( i = 0; i < lg; i++ ) - { - x2 = x1; - x1 = x0; - x0 = signal[i]; - yy0 = yy1 * a_hp400[1] + y2 * a_hp400[2] + x0 * b_hp400[0] + x1 * b_hp400[1] + x2 * b_hp400[2]; - - signal[i] = yy0; - y2 = yy1; - yy1 = yy0; - } - - mem[0] = yy1; - mem[1] = y2; - mem[2] = x0; - mem[3] = x1; - - return; -} - -/*-------------------------------------------------------------------* - * filt_6k_7k: - * - * 15th order band pass 6kHz to 7kHz FIR filter. - * - * frequency :4kHz 5kHz 5.5kHz 6kHz 6.5kHz 7kHz 7.5kHz 8kHz - * dB loss : -60dB -45dB -13dB -3dB 0dB -3dB -13dB -45dB - * (gain=4.0) - *-------------------------------------------------------------------*/ - -static void filt_6k_8k( - float signal[], /* i/o: signal */ - const int16_t lg, /* i : signal length */ - float mem[] /* i/o: filter memory */ -) -{ - int16_t i, j; - float s, x[L_FRAME48k / NB_SUBFR + ( L_FIR - 1 )]; - - for ( i = 0; i < ( L_FIR - 1 ); i++ ) - { - x[i] = mem[i]; - } - - for ( i = 0; i < lg; i++ ) - { - x[i + ( L_FIR - 1 )] = signal[i]; - } - - for ( i = 0; i < lg; i++ ) - { - s = 0.0; - for ( j = 0; j < L_FIR; j++ ) - { - s += x[i + j] * fir_6k_8k[j]; - } - - signal[i] = (float) ( s * 1.0f ); - } - - for ( i = 0; i < ( L_FIR - 1 ); i++ ) - { - mem[i] = x[i + lg]; - } - - return; -} -#endif diff --git a/lib_enc/hq_classifier_enc.c b/lib_enc/hq_classifier_enc.c index 1aece086b..273cba75c 100644 --- a/lib_enc/hq_classifier_enc.c +++ b/lib_enc/hq_classifier_enc.c @@ -46,581 +46,7 @@ /*-----------------------------------------------------------------* * Local constants *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define SHARP_DIST_THRES 22.2f -#define HALF_WIN_LENGTH 10 -#define L_SPEC_HB 320 -#define PEAK_THRESHOLD 0.1f - -#define LOW_COUNT_THRESHOLD 220 -#endif /*-----------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void hvq_classifier( const float *input, int16_t *prev_Npeaks, int16_t *prev_peaks, int16_t *hqswb_clas, int16_t *Npeaks, int16_t *peaks, const int32_t core_brate, const int16_t last_core, float *nf_gains, int16_t *hvq_hangover, float *pe_gains ); -/*--------------------------------------------------------------------------* - * hq_classifier_enc() - * - * HQ mode selector (decision_matrix) - *--------------------------------------------------------------------------*/ - -/*! r: Consumed bits */ -int16_t hq_classifier_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t length, /* i : Frame length */ - const float *coefs, /* i : Spectral coefficients */ - const int16_t is_transient, /* i : Transient flag */ - int16_t *Npeaks, /* o : Number of identified peaks */ - int16_t *peaks, /* o : Peak indices */ - float *pe_gains, /* o : Peak gains */ - float *nf_gains, /* o : Noise-fill gains */ - int16_t *hqswb_clas /* o : HQ class */ -) -{ - int16_t bits; - int32_t max_brate; - int16_t harmonic_decision; - - HQ_ENC_HANDLE hHQ_core = st->hHQ_core; - - max_brate = HQ_32k; - if ( st->element_mode > EVS_MONO ) - { - max_brate = HQ_48k; - } - - *hqswb_clas = HQ_NORMAL; - bits = 1; - if ( is_transient ) - { - *hqswb_clas = HQ_TRANSIENT; - } - - if ( length == L_SPEC32k || length == L_SPEC48k ) - { - if ( st->core_brate <= max_brate ) - { - - if ( !is_transient && st->bwidth == st->last_bwidth ) - { - /* Detect HQ_HARMONIC mode */ - *hqswb_clas = peak_avrg_ratio( st->total_brate, coefs, NUMC_N + 96, &hHQ_core->mode_count, &hHQ_core->mode_count1 ); - - harmonic_decision = hf_spectrum_sparseness( st, coefs ); - if ( *hqswb_clas == HQ_HARMONIC && !harmonic_decision ) - { - *hqswb_clas = HQ_NORMAL; - } - else - { - /* Detect HQ_HVQ mode */ - hvq_classifier( coefs, &hHQ_core->prev_Npeaks, hHQ_core->prev_peaks, hqswb_clas, Npeaks, peaks, st->core_brate, st->last_core, nf_gains, &hHQ_core->hvq_hangover, pe_gains ); - } - } - bits = 2; - } - } - else if ( length == L_SPEC16k_EXT || length == L_SPEC48k_EXT ) - { - bits = 0; /* HQ_NORMAL only -- no signaling needed */ - } - - /* write signaling info to the bitstream */ - push_indice( st->hBstr, IND_HQ_SWB_CLAS, *hqswb_clas, bits ); - - if ( st->core_brate <= HQ_32k && *hqswb_clas == HQ_NORMAL ) - { - if ( length == L_SPEC32k ) - { - *hqswb_clas = HQ_GEN_SWB; - } - else if ( length == L_SPEC48k ) - { - *hqswb_clas = HQ_GEN_FB; - } - } - - return bits; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * peak_avrg_ratio() - * - * Classify the input signal and decide if it has a harmonic structure - *--------------------------------------------------------------------------*/ - -/*! r: hqswb_clas */ -int16_t peak_avrg_ratio( - const int32_t total_brate, /* i : total bitrate */ - const float *input_hi, /* i : input signal */ - const int16_t N, /* i : number of coefficients */ - int16_t *mode_count, /* i/o: HQ_HARMONIC mode count */ - int16_t *mode_count1 /* i/o: HQ_NORMAL mode count */ -) -{ - float mean, peak, sharp; - int16_t i, j, q, k, k1, hqswb_clas; - float input_abs[L_FRAME32k]; - - for ( i = 96; i < N; i++ ) - { - input_abs[i] = (float) fabs( input_hi[i] ); - } - - hqswb_clas = HQ_NORMAL; - - k = 0; - k1 = 0; - q = 96; - for ( i = 3; i < 17; i++ ) - { - peak = 0.0f; - mean = EPSILON; - for ( j = 0; j < 32; j++, q++ ) - { - mean += input_abs[q]; - - if ( input_abs[q] > peak ) - { - peak = input_abs[q]; - } - } - - sharp = 32 * peak / mean; - - if ( i < 8 ) - { - if ( sharp > 4.5 ) - { - k += 1; - } - } - else - { - if ( sharp > 3.6 && peak > 10 ) - { - k1 += 1; - } - } - } - - if ( k + k1 >= 10 && k1 > 5 ) - { - if ( *mode_count < 8 ) - { - ( *mode_count )++; - } - - if ( *mode_count1 > 0 ) - { - ( *mode_count1 )--; - } - } - else - { - if ( *mode_count > 0 ) - { - ( *mode_count )--; - } - - if ( *mode_count1 < 8 ) - { - ( *mode_count1 )++; - } - } - if ( ( k + k1 >= 5 && k1 > 2 && total_brate < HQ_BWE_CROSSOVER_BRATE && total_brate > HQ_16k40 ) || ( ( ( k + k1 >= 10 && k1 > 5 ) || *mode_count >= 5 ) && *mode_count1 < 5 ) ) - { - hqswb_clas = HQ_HARMONIC; - } - - return hqswb_clas; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hvq_classifier() - * - * Classification of spectral content for HQ_HVQ mode - *--------------------------------------------------------------------------*/ -static void hvq_classifier( - const float *input, /* i : input signal */ - int16_t *prev_Npeaks, /* i/o: Peak number memory */ - int16_t *prev_peaks, /* i/o: Peak indices memory */ - int16_t *hqswb_clas, /* i/o: HQ class */ - int16_t *Npeaks, /* o : Number of peaks */ - int16_t *peaks, /* o : Peak indices */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t last_core, /* i : Last core used */ - float *nf_gains, /* o : Noisefloor gains */ - int16_t *hvq_hangover, /* i/o: Mode-switch hangover */ - float *pe_gains /* o : peak gains */ -) -{ - const float *p_adj; - float sharp_dist; - float nf, pe, d, peak, thr_tmp, m; - float input_abs[L_FRAME32k], thr[L_FRAME16k]; - float pe_mean[HVQ_NSUB_32k], nf_mean[HVQ_NSUB_32k]; - float sharp[HVQ_NSUB_32k]; - - int16_t num_sharp_bands, i, j, k, q, peak_th, nsub, pindx, N, offset; - int16_t num_peak_cands, high, low; - int16_t peak_cand_idx[HVQ_THRES_BIN_32k], avail_peaks[HVQ_NSUB_32k]; - - if ( *hqswb_clas == HQ_HARMONIC && last_core != ACELP_CORE && last_core != AMR_WB_CORE ) - { - set_f( thr, 0.0f, L_FRAME16k ); - - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - nsub = HVQ_NSUB_24k; - } - else - { - nsub = HVQ_NSUB_32k; - } - - N = nsub * HVQ_BW; - - for ( i = 0; i < N; i++ ) - { - input_abs[i] = (float) fabs( input[i] ); - } - - *Npeaks = 0; - nf = 800; - pe = 800; - num_sharp_bands = 0; - k = 0; - q = 0; - sharp_dist = 0; - - /* Find peak threshold */ - for ( i = 0; i < nsub; i++ ) - { - peak = 0.0f; - nf_mean[i] = EPSILON; - pe_mean[i] = EPSILON; - for ( j = 0; j < HVQ_BW; j++, q++ ) - { - d = input_abs[q]; - - if ( d > nf ) - { - nf = HVQ_NF_WEIGHT1 * nf + ( 1 - HVQ_NF_WEIGHT1 ) * d; - } - else - { - nf = HVQ_NF_WEIGHT2 * nf + ( 1 - HVQ_NF_WEIGHT2 ) * d; - } - - if ( d > pe ) - { - pe = HVQ_PE_WEIGHT1 * pe + ( 1 - HVQ_PE_WEIGHT1 ) * d; - } - else - { - pe = HVQ_PE_WEIGHT2 * pe + ( 1 - HVQ_PE_WEIGHT2 ) * d; - } - - nf_mean[i] += nf; - pe_mean[i] += pe; - - if ( d > peak ) - { - peak = d; - } - } - - nf_mean[i] /= HVQ_BW; - pe_mean[i] /= HVQ_BW; - - - thr_tmp = (float) pow( pe_mean[i] / nf_mean[i], HVQ_THR_POW ) * nf_mean[i]; - set_f( &thr[k], thr_tmp, HVQ_BW ); - k += HVQ_BW; - - sharp[i] = peak / nf_mean[i]; - sharp_dist += sharp[i] - HVQ_SHARP_THRES; - - if ( sharp[i] > HVQ_SHARP_THRES ) - { - num_sharp_bands++; - } - } - - /* Estimate noise floor gains */ - offset = nsub % 2; - for ( i = 0; i < 2 * ( nsub / 2 ); i++ ) - { - nf_gains[( 2 * i + 1 ) / nsub] += nf_mean[i + offset]; - pe_gains[( 2 * i + 1 ) / nsub] += pe_mean[i + offset]; - } - - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - nf_gains[i] /= nsub / HVQ_NF_GROUPS; - pe_gains[i] /= nsub / HVQ_NF_GROUPS; - } - - /* Allocate available peaks */ - for ( i = 0; i < nsub; i++ ) - { - avail_peaks[i] = HVQ_PA_PEAKS_SHARP1; - if ( nf_mean[i] < nf_gains[( 2 * i + 1 ) / nsub] * HVQ_PA_FAC ) - { - if ( sharp[i] < HVQ_PA_SHARP_THRES3 ) - { - avail_peaks[i] = HVQ_PA_PEAKS_SHARP3; - } - else if ( sharp[i] < HVQ_PA_SHARP_THRES2 ) - { - avail_peaks[i] = HVQ_PA_PEAKS_SHARP2; - } - } - } - - /* Adjust threshold around previous peaks */ - for ( i = 0; i < *prev_Npeaks; i++ ) - { - j = prev_peaks[i] - 2; - k = prev_peaks[i] + 2; - p_adj = hvq_thr_adj; - - for ( q = j; q < k; q++ ) - { - thr[q] *= *p_adj++; - } - } - - num_peak_cands = 0; - - /* Remove everything below threshold for peak search */ - input_abs[0] = 0; - input_abs[1] = 0; - input_abs[N - 2] = 0; - input_abs[N - 1] = 0; - for ( i = 0; i < N - 2; i++ ) - { - if ( input_abs[i] < thr[i] ) - { - input_abs[i] = 0; - } - else - { - input_abs[num_peak_cands] = input_abs[i]; - peak_cand_idx[num_peak_cands] = i; - num_peak_cands++; - } - } - - /* maximum 27 (5+9+13) bits for additional peak */ - peak_th = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA_THR + HVQ_PEAKS_PER_DELTA_THR_OFFS ) / HVQ_PEAKS_BPS_DELTA ); - - /* Find peaks */ - pindx = maximum( input_abs, num_peak_cands, &m ); - i = 0; - - while ( m > 0 && i < peak_th + 1 ) - { - if ( avail_peaks[peak_cand_idx[pindx] / HVQ_BW] > 0 ) - { - peaks[i++] = peak_cand_idx[pindx]; - avail_peaks[peak_cand_idx[pindx] / HVQ_BW]--; - } - - j = pindx - 2; - k = pindx + 2; - - if ( j < 0 ) - { - j = 0; - } - - if ( k > num_peak_cands - 1 ) - { - k = num_peak_cands - 1; - } - - low = peak_cand_idx[pindx] - 2; - high = peak_cand_idx[pindx] + 2; - - if ( low < 0 ) - { - low = 0; - } - - if ( high > N - 1 ) - { - high = N - 1; - } - - for ( q = j; q <= pindx; q++ ) - { - if ( peak_cand_idx[q] >= low ) - { - peak_cand_idx[q] = 0; - input_abs[q] = 0; - } - } - - for ( q = pindx + 1; q <= k; q++ ) - { - if ( peak_cand_idx[q] <= high ) - { - peak_cand_idx[q] = 0; - input_abs[q] = 0; - } - } - - pindx = maximum( input_abs, num_peak_cands, &m ); - } - - *Npeaks = i; - - /* decision about HQ_HVQ mode */ - if ( *Npeaks > HVQ_MIN_PEAKS ) - { - if ( num_sharp_bands > nsub - 3 && *Npeaks <= peak_th ) - { - sharp_dist /= nsub; - if ( sharp_dist <= SHARP_DIST_THRES && *hvq_hangover < 0 ) - { - ( *hvq_hangover )++; - } - else - { - *hqswb_clas = HQ_HVQ; - *hvq_hangover = 2; - } - - /* update memory */ - *prev_Npeaks = *Npeaks; - mvs2s( peaks, prev_peaks, *Npeaks ); - } - else - { - if ( *hvq_hangover > 0 ) - { - *hqswb_clas = HQ_HVQ; - ( *hvq_hangover )--; - } - else - { - *hvq_hangover = -1; - } - } - } - else - { - *hvq_hangover = -1; - } - - *Npeaks = (int16_t) ( min( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA, *Npeaks ) ); - } - else - { - *prev_Npeaks = 0; - *hvq_hangover = 0; - } - - return; -} -/*--------------------------------------------------------------------------* - * hf_spectrum_sparseness() - * - * Detection of sparse spectrum in high band for activation of harmonic - * modes HQ_HARMONIC and HQ_HVQ - *--------------------------------------------------------------------------*/ -/*! r: Harmonic decision for high band */ -static int16_t hf_spectrum_sparseness( - Encoder_State *st, /* i/o: encoder state structure */ - const float *coefs /* i : MDCT spectrum */ -) -{ - int16_t i; - float thr; - int16_t low_count; - float A[L_SPEC_HB]; - float Amax; - float movmean; - float inv_rms; - float crest; - float crest_mod; - const float *p_num; - float *crest_lp; - float *crest_mod_lp; - int16_t result; - - crest_lp = &st->hHQ_core->crest_lp; - crest_mod_lp = &st->hHQ_core->crest_mod_lp; - - result = TRUE; - if ( st->element_mode != EVS_MONO ) - { - for ( i = 0; i < L_SPEC_HB; i++ ) - { - A[i] = (float) fabsf( coefs[i + L_SPEC_HB] ); - } - low_count = 0; - inv_rms = 0.0f; - crest_mod = 0.0f; - maximum( A, L_SPEC_HB, &Amax ); - thr = Amax * PEAK_THRESHOLD; - movmean = 0.0f; /* avoid uninitialized warning */ - p_num = &inv_tbl[HALF_WIN_LENGTH + 1]; /* Table for division 1./(11:21) */ - for ( i = 0; i < L_SPEC_HB; i++ ) - { - inv_rms += A[i] * A[i]; - if ( A[i] < thr ) - { - low_count += 1; - } - if ( i <= HALF_WIN_LENGTH ) - { - if ( i == 0 ) - { - movmean = sum_f( &A[0], i + HALF_WIN_LENGTH + 1 ) * ( *p_num ); - } - else - { - p_num++; - movmean = movmean + ( A[i + HALF_WIN_LENGTH] - movmean ) * ( *p_num ); - } - } - else - { - if ( L_SPEC_HB <= i + HALF_WIN_LENGTH ) - { - p_num--; - movmean = movmean + ( movmean - A[i - HALF_WIN_LENGTH - 1] ) * ( *p_num ); - } - else - { - movmean = movmean + ( A[i + HALF_WIN_LENGTH] - A[i - HALF_WIN_LENGTH - 1] ) * ( *p_num ); - } - } - if ( crest_mod < movmean ) - { - crest_mod = movmean; - } - } - inv_rms = 1.0f / (float) sqrtf( inv_rms / L_SPEC_HB ); - crest = Amax * inv_rms; - crest_mod = crest_mod * inv_rms; - *crest_lp = HQ_CREST_FAC_SM * ( *crest_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * crest; - *crest_mod_lp = HQ_CREST_FAC_SM * ( *crest_mod_lp ) + ( 1.0f - HQ_CREST_FAC_SM ) * crest_mod; - - if ( ( ( *crest_lp ) > HQ_CREST_THRESHOLD ) && ( ( *crest_mod_lp ) > HQ_CREST_MOD_THRESHOLD ) && ( low_count > LOW_COUNT_THRESHOLD ) ) - { - result = FALSE; - } - } - - return result; -} -#endif diff --git a/lib_enc/hq_classifier_enc_fx.c b/lib_enc/hq_classifier_enc_fx.c index d7d30149a..f2475ef8d 100644 --- a/lib_enc/hq_classifier_enc_fx.c +++ b/lib_enc/hq_classifier_enc_fx.c @@ -29,7 +29,6 @@ *-----------------------------------------------------------------*/ void hvq_classifier_fx( const Word32 *input, Word16 *prev_Npeaks, Word16 *prev_peaks, Word16 *hqswb_clas, Word16 *Npeaks, Word16 *peaks, const Word32 L_core_brate, const Word16 last_core, Word32 *L_nf_gains, Word16 *hvq_hangover, Word32 *L_pe_gains ); -#ifdef IVAS_FLOAT_FIXED static Word16 hf_spectrum_sparseness_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word32 *coefs_fx /* i : MDCT spectrum */ @@ -160,7 +159,6 @@ static Word16 hf_spectrum_sparseness_fx( return result; } -#endif /*--------------------------------------------------------------------------* * hq_classifier_enc_fx() * @@ -342,7 +340,6 @@ Word16 hq_classifier_enc_fx( /* o : Consumed bits #endif return bits; } -#ifdef IVAS_FLOAT_FIXED Word16 hq_classifier_enc_ivas_fx( /* o : Consumed bits Q0 */ Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 length, /* i : Frame length Q0 */ @@ -436,8 +433,6 @@ Word16 hq_classifier_enc_ivas_fx( /* o : Consumed bi return bits; } -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * peak_avrg_ratio() * @@ -548,7 +543,6 @@ Word16 peak_avrg_ratio_ivas_fx( } return hqswb_clas; } -#endif /*--------------------------------------------------------------------------* * peak_avrg_ratio() * @@ -667,7 +661,6 @@ Word16 peak_avrg_ratio_fx( * * Classification of harmonic low band content for Harmonic VQ *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void hvq_classifier_ivas_fx( const Word32 *input, /* i : input signal Q12 */ Word16 *prev_Npeaks, /* i/o: Peak number memory Q0 */ @@ -1108,7 +1101,6 @@ void hvq_classifier_ivas_fx( return; } -#endif void hvq_classifier_fx( const Word32 *input, /* i : input signal Q12 */ Word16 *prev_Npeaks, /* i/o: Peak number memory Q0 */ diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c index 1f2afdd9b..91701fd7f 100644 --- a/lib_enc/hq_core_enc.c +++ b/lib_enc/hq_core_enc.c @@ -42,10 +42,8 @@ #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" -#endif /*-------------------------------------------------------------------------- * hq_core_enc() @@ -53,7 +51,6 @@ * HQ core encoder *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void hq_core_enc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 *audio_fx, /* i : input audio signal Q0 */ @@ -404,242 +401,3 @@ void hq_core_enc_ivas_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -void hq_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *audio, /* i : input audio signal */ - const int16_t input_frame_orig, /* i : frame length */ - const int16_t hq_core_type, /* i : HQ core type */ - const int16_t Voicing_flag, /* i : Voicing flag for FER method selection */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - int16_t i, is_transient, num_bits, extra_unused; - float wtda_audio[2 * L_FRAME48k]; - float t_audio[L_FRAME48k_EXT]; - int16_t inner_frame, input_frame, L_frame; - float ener_match; - int16_t left_overlap, right_overlap; - int16_t L_spec, overlap, nz, tcx_offset; - float Aq_old[M + 1]; - float output[L_FRAME16k]; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - push_wmops( "hq_core_enc" ); - - set_f( t_audio, 0, L_FRAME48k_EXT ); - st->Nb_ACELP_frames = 0; - - /* set input_frame length */ - input_frame = input_frame_orig; - - /* Sanity check, it should never happen at the encoder side (no BFI) */ - if ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) - { - st->hTcxCfg->tcx_last_overlap_mode = ALDO_WINDOW; - } - else - { - st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - } - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - - /*-------------------------------------------------------------------------- - * Preprocessing in the first HQ frame after ACELP frame - * Find the number of bits for PVQ coding - * Write signaling information - *--------------------------------------------------------------------------*/ - - num_bits = (int16_t) ( st->total_brate / FRAMES_PER_SEC ); - extra_unused = 0; - - /*-------------------------------------------------------------------------- - * Detect signal transition - *--------------------------------------------------------------------------*/ - is_transient = detect_transient( st, audio, input_frame ); - if ( st->element_mode > EVS_MONO && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - /*-------------------------------------------------------------------------- - * IVAS switching frame - *--------------------------------------------------------------------------*/ - L_spec = input_frame; - left_overlap = -1; - right_overlap = -1; - WindowSignal_flt( st->hTcxCfg, st->hTcxCfg->tcx_offsetFB, TRANSITION_OVERLAP, FULL_OVERLAP, &left_overlap, &right_overlap, st->hTcxEnc->speech_TCX_flt, &L_spec, wtda_audio, 1, 1 ); - TCX_MDCT_flt( wtda_audio, t_audio, left_overlap, L_spec - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - inner_frame = inner_frame_tbl[st->bwidth]; - L_spec = l_spec_ext_tbl[st->bwidth]; - is_transient = 0; - } - else - { - /*-------------------------------------------------------------------------- - * Windowing and time-domain aliasing - * DCT transform - *--------------------------------------------------------------------------*/ - - wtda( audio, wtda_audio, NULL, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, input_frame ); - - if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) - { - /* Preprocessing in the first HQ frame after ACELP frame */ - core_switching_hq_prepare_enc( st, &num_bits, input_frame, wtda_audio, audio ); - - /* During ACELP->HQ core switching, limit the HQ core bitrate to 48kbps */ - if ( num_bits > HQ_48k / FRAMES_PER_SEC ) - { - extra_unused = num_bits - (int16_t) ( HQ_48k / FRAMES_PER_SEC ); - num_bits = (int16_t) ( HQ_48k / FRAMES_PER_SEC ); - } - } - - direct_transform( wtda_audio, t_audio, is_transient, input_frame, st->element_mode ); - - /* scale coefficients to their nominal level (8kHz) */ - if ( input_frame != NORM_MDCT_FACTOR ) - { - ener_match = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) input_frame ); - - for ( i = 0; i < input_frame; i++ ) - { - t_audio[i] *= ener_match; - } - } - - /* limit encoded band-width according to the command-line OR BWD limitation */ - inner_frame = inner_frame_tbl[st->bwidth]; - L_spec = l_spec_tbl[st->bwidth]; - - if ( input_frame > inner_frame ) - { - if ( is_transient ) - { - for ( i = 1; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - mvr2r( t_audio + i * input_frame / NUM_TIME_SWITCHING_BLOCKS, t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS, inner_frame / NUM_TIME_SWITCHING_BLOCKS ); - } - } - - set_f( t_audio + inner_frame, 0.0f, input_frame - inner_frame ); - } - } - - /* subtract signaling bits */ - num_bits -= hBstr->nb_bits_tot; - - /*-------------------------------------------------------------------------- - * High-band gain control in case of BWS - *--------------------------------------------------------------------------*/ - - if ( st->bwidth_sw_cnt > 0 ) - { - if ( is_transient ) - { - for ( i = 0; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - v_multc( t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, t_audio + i * inner_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS, inner_frame / NUM_TIME_SWITCHING_BLOCKS - L_FRAME16k / NUM_TIME_SWITCHING_BLOCKS ); - } - } - else - { - v_multc( t_audio + L_FRAME16k, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, t_audio + L_FRAME16k, L_spec - L_FRAME16k ); - } - } - - /*-------------------------------------------------------------------------- - * Classify whether to put extra bits for FER mitigation - *--------------------------------------------------------------------------*/ - - if ( ( st->last_core == TCX_20_CORE || st->last_core == TCX_10_CORE || st->last_core == HQ_CORE ) && st->core_brate > MINIMUM_RATE_TO_ENCODE_VOICING_FLAG ) - { - if ( Voicing_flag > 0 ) - { - push_indice( hBstr, IND_HQ_VOICING_FLAG, 1, 1 ); - num_bits -= 1; - } - else - { - push_indice( hBstr, IND_HQ_VOICING_FLAG, 0, 1 ); - num_bits -= 1; - } - } - - /*-------------------------------------------------------------------------- - * Transform-domain encoding - *--------------------------------------------------------------------------*/ - - if ( hq_core_type == LOW_RATE_HQ_CORE ) - { - - /* HQ low rate encoder */ - hq_lr_enc( st, t_audio, inner_frame, &num_bits, is_transient ); - } - else - { - hq_hr_enc( st, t_audio, L_spec, &num_bits, is_transient, vad_hover_flag ); - } - - /* write all unused bits to the bitstream */ - num_bits += extra_unused; - - while ( num_bits >= 16 ) - { - push_indice( hBstr, IND_UNUSED, 0, 16 ); - num_bits -= 16; - } - - if ( num_bits != 0 ) - { - push_indice( hBstr, IND_UNUSED, 0, num_bits ); - } - - if ( st->element_mode > EVS_MONO && ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) ) - { - overlap = st->hTcxCfg->tcx_mdct_window_length; - nz = NS2SA( st->sr_core, N_ZERO_MDCT_NS ); - L_frame = (int16_t) ( st->L_frame + st->hTcxCfg->tcx_offset - st->hTcxCfg->lfacNext ); - tcx_offset = st->hTcxCfg->lfacNext; - set_f( Aq_old, 0, M + 1 ); /* Dummy filter */ - Aq_old[0] = 1; - - /* Code taken from InternalTCXDecoder() */ - TCX_MDCT_Inverse_flt( t_audio, wtda_audio, overlap, L_frame - overlap, overlap, st->element_mode ); - - /* Window current frame */ - tcx_windowing_synthesis_current_frame_flt( wtda_audio, st->hTcxCfg->tcx_aldo_window_2_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, /*st->hTcxCfg->tcx_mdct_window_length*/ st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, st->last_core == ACELP_CORE, st->hTcxCfg->tcx_last_overlap_mode, /*left mode*/ st->hTcxEnc->acelp_zir_flt, st->hTcxEnc->Txnq_flt, NULL, Aq_old, st->hTcxCfg->tcx_mdct_window_trans_flt, st->L_frame >> 1, tcx_offset < 0 ? -tcx_offset : 0, st->last_core, 0, 0 ); - - /*Compute windowed synthesis in case of switching to ALDO windows in next frame*/ - mvr2r( wtda_audio + L_frame - nz, st->hTcxEnc->old_out, nz + overlap ); - set_zero( st->hTcxEnc->old_out + nz + overlap, nz ); - - tcx_windowing_synthesis_past_frame_flt( st->hTcxEnc->old_out + nz, st->hTcxCfg->tcx_aldo_window_1_trunc_flt, st->hTcxCfg->tcx_mdct_window_half_flt, st->hTcxCfg->tcx_mdct_window_minimum_flt, overlap, st->hTcxCfg->tcx_mdct_window_half_length, st->hTcxCfg->tcx_mdct_window_min_length, FULL_OVERLAP ); - - for ( i = 0; i < nz; i++ ) - { - st->hTcxEnc->old_out[nz + overlap + i] = wtda_audio[L_frame - 1 - i] * st->hTcxCfg->tcx_aldo_window_1_trunc_flt[-1 - i]; - } - mvr2r( wtda_audio + ( overlap >> 1 ) - tcx_offset, output, st->L_frame ); - } - else - { - ener_match = (float) sqrt( (float) L_FRAME16k / (float) NORM_MDCT_FACTOR ); - v_multc( t_audio, ener_match, t_audio, inner_frame ); - - inverse_transform( t_audio, wtda_audio, is_transient, L_FRAME16k, inner_frame, st->element_mode ); - - window_ola( wtda_audio, output, st->hTcxEnc->old_out, L_FRAME16k, st->hTcxCfg->tcx_last_overlap_mode, st->hTcxCfg->tcx_curr_overlap_mode, 0, 0, NULL ); - } - - if ( st->element_mode > EVS_MONO ) - { - /* Store LB synthesis in case of switch to ACELP */ - mvr2r( output, st->hLPDmem->old_exc_flt, L_FRAME16k ); - } - - pop_wmops(); - - return; -} -#endif diff --git a/lib_enc/hq_core_enc_fx.c b/lib_enc/hq_core_enc_fx.c index 32b3b1954..4d26d0a5c 100644 --- a/lib_enc/hq_core_enc_fx.c +++ b/lib_enc/hq_core_enc_fx.c @@ -10,7 +10,6 @@ #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------- * hq_core_enc() * @@ -379,4 +378,3 @@ void HQ_core_enc_init_fx( return; } -#endif diff --git a/lib_enc/hq_env_enc.c b/lib_enc/hq_env_enc.c index 2f43d38da..4e446e1c5 100644 --- a/lib_enc/hq_env_enc.c +++ b/lib_enc/hq_env_enc.c @@ -40,524 +40,3 @@ #include "rom_com.h" #include "rom_enc.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------------------* - * encode_envelope_indices() - * - * Encode envelope indices - *--------------------------------------------------------------------------------------*/ - -/*! r: Number of bits if flag_pack=0,0 if flag_pack=1 */ -int16_t encode_envelope_indices( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t num_sfm, /* i : Number of subbands */ - const int16_t numnrmibits, /* i : Bitrate of fall-back coding mode */ - int16_t *difidx, /* i/o: Diff indices/encoded diff indices */ - int16_t *LCmode, /* o : Coding mode if flag_pack=0, i : if flag_pack=1 */ - const int16_t flag_pack, /* i : indicator of packing or estimating bits */ - const int16_t flag_HQ2, /* i : indicator of HQ2 core */ - const int16_t is_transient /* i : transient flag */ -) -{ - int16_t bits; - int16_t prevj; - int16_t hcode_l; - int16_t i, j; - int16_t difidx_flag; - int16_t index_max, index_min, index_rad; - int16_t difidx_org[NB_SFM]; /* length of this buffer is max(BANDS_MAX,NB_SFM) */ - int16_t m, r; - int16_t v, k; - - set_s( difidx_org, 0, NB_SFM ); - difidx_flag = 0; - - /*------------------------------------------------------------------* - * Check Huffman encoding for QNorm indices - *------------------------------------------------------------------*/ - - /* LC mode index is changed to synchronize LR-MDCT signaling */ - /* LC mode 0 = Context based coding */ - /* LC mode 1 = resized huffman coding */ - /* LC mode 2 = normal Huffman Coding */ - /* LC mode 3 = bit packing */ - if ( flag_pack == 0 ) - { - if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) - { - bits = 0; - index_max = 0; - index_min = 31; - for ( i = 0; i < num_sfm; i++ ) - { - if ( difidx[i] > index_max ) - { - index_max = difidx[i]; - } - if ( difidx[i] < index_min ) - { - index_min = difidx[i]; - } - } - if ( index_min > 10 && index_max < 22 ) - { - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - bits += huffsizn_tran[j]; - } - } - hcode_l = 0; - *LCmode = 0; - prevj = difidx[0] + OFFSET_NORM; - /* LC mode 0 = Context based coding */ - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - if ( prevj > HTH_NORM ) - { - /* above */ - hcode_l += huffsizn_n[31 - j]; - } - else - { - if ( prevj < LTH_NORM ) - { - /* less */ - hcode_l += huffsizn_n[j]; - } - else - { - /* equal */ - hcode_l += huffsizn_e[j]; - } - } - prevj = j; - } - if ( hcode_l >= bits && bits != 0 ) - { - /* LC mode 1 Transient Huffman Coding */ - *LCmode = 1; - hcode_l = bits; - } - } - else - { - /* Check bits if LC mode == 3 -> Check bits if LC mode == 0 */ - hcode_l = 0; - prevj = difidx[0] + OFFSET_NORM; - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - if ( prevj > HTH_NORM ) - { - /* above */ - hcode_l += huffsizn_n[31 - j]; - } - else - { - if ( prevj < LTH_NORM ) - { - /* less */ - hcode_l += huffsizn_n[j]; - } - else - { - /* equal */ - hcode_l += huffsizn_e[j]; - } - } - prevj = j; - } - - *LCmode = 0; - - /* LR-MDCT core doesn't have coding mode 2 and 3 */ - if ( flag_HQ2 == NORMAL_HQ_CORE ) - { - /* Check bits if LC mode == 1 -> Check bits if LC mode == 2 */ - bits = 0; - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - bits += huffsizn[j]; - } - - /*------------------------------------------------------------------------------* - * comparing bit expenses of coding mode 2 with that of the optimal coding mode - *------------------------------------------------------------------------------*/ - - if ( hcode_l > bits ) - { - *LCmode = 2; - hcode_l = bits; - } - } - - /* Check bits if LC mode == 2 -> Check bits if LC mode == 1 */ - bits = 0; - index_max = 0; - index_min = 31; - for ( i = 1; i < num_sfm; i++ ) - { - difidx_org[i] = difidx[i]; - } - - difidx_flag = 0; - for ( i = 2; i < num_sfm; i++ ) - { - if ( difidx_org[i - 1] > 17 ) - { - difidx[i] = difidx_org[i] + min( ( difidx_org[i - 1] - 17 ), 3 ); - if ( difidx[i] > 31 ) - { - difidx_flag = 1; - break; - } - } - - if ( difidx_org[i - 1] < 13 ) - { - difidx[i] = difidx_org[i] + max( ( difidx_org[i - 1] - 13 ), -3 ); - if ( difidx[i] < 0 ) - { - difidx_flag = 1; - break; - } - } - } - - index_rad = 0; - if ( difidx_flag != 1 ) - { - for ( i = 1; i < num_sfm; i++ ) - { - if ( difidx[i] > index_max ) - { - index_max = difidx[i]; - } - - if ( difidx[i] < index_min ) - { - index_min = difidx[i]; - } - } - - index_rad = max( ( 15 - index_min ), ( index_max - 15 ) ); - - if ( index_rad <= HUFF_THR ) - { - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - bits += resize_huffsizn[j]; - } - - /*------------------------------------------------------------------* - * comparing bit expenses of coding mode 1 with that of coding mode 0 - *------------------------------------------------------------------*/ - - if ( hcode_l > bits ) - { - hcode_l = bits; - *LCmode = 1; - } - } - } - - /* LR-MDCT core doesn't have coding mode 2 and 3 */ - if ( flag_HQ2 == NORMAL_HQ_CORE ) - { - /*------------------------------------------------------------------------------* - * comparing bit expenses of coding mode 3 with that of the optimal coding mode - *------------------------------------------------------------------------------*/ - - if ( hcode_l >= numnrmibits ) - { - hcode_l = numnrmibits; - *LCmode = 3; - } - } - - if ( ( *LCmode != 1 && flag_HQ2 == NORMAL_HQ_CORE ) || flag_HQ2 == LOW_RATE_HQ_CORE ) - { - for ( i = 2; i < num_sfm; i++ ) - { - difidx[i] = difidx_org[i]; - } - } - } - } - else - { - if ( flag_HQ2 == LOW_RATE_HQ_CORE_TRAN || flag_HQ2 == LOW_RATE_HQ_CORE ) - { - push_indice( hBstr, IND_HQ2_DENG_HMODE, *LCmode, BITS_DE_HMODE ); - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, difidx[0], BITS_DE_FCOMP ); - } - else - { - push_indice( hBstr, IND_LC_MODE, *LCmode, 2 ); - push_indice( hBstr, IND_YNRM, difidx[0], NORM0_BITS ); - } - - if ( is_transient && flag_HQ2 == LOW_RATE_HQ_CORE_TRAN ) - { - hcode_l = 0; - if ( *LCmode == 1 ) - { - /* LC mode 0 Transient Huffman Coding */ - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - m = huffnorm_tran[j]; - r = huffsizn_tran[j]; - v = 0; - - /* Bit reverse */ - for ( k = 0; k < r; k++ ) - { - v <<= 1; - v |= m & 1; - m >>= 1; - } - - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, v, r ); - } - } - else - { - /* LC mode 1 context based Coding */ - prevj = difidx[0] + OFFSET_NORM; - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - - if ( prevj > HTH_NORM ) - { - /* above */ - r = huffsizn_n[31 - j]; - m = huffnorm_n[31 - j]; - } - else - { - if ( prevj < LTH_NORM ) - { - /* less */ - r = huffsizn_n[j]; - m = huffnorm_n[j]; - } - else - { - /* equal */ - r = huffsizn_e[j]; - m = huffnorm_e[j]; - } - } - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, m, r ); - prevj = j; - } - } - } - else - { - hcode_l = 0; - if ( *LCmode == 0 ) - { - /* LC mode 3 -> LC mode 0 */ - prevj = difidx[0] + OFFSET_NORM; - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - - if ( prevj > HTH_NORM ) - { - /* above */ - r = huffsizn_n[31 - j]; - m = huffnorm_n[31 - j]; - } - else - { - if ( prevj < LTH_NORM ) - { - /* less */ - r = huffsizn_n[j]; - m = huffnorm_n[j]; - } - else - { - /* equal */ - r = huffsizn_e[j]; - m = huffnorm_e[j]; - } - } - - if ( flag_HQ2 == LOW_RATE_HQ_CORE ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, m, r ); - } - else - { - push_indice( hBstr, IND_YNRM, m, r ); - } - - prevj = j; - } - } - else if ( *LCmode == 1 ) - { - if ( flag_HQ2 == 1 ) - { - index_max = 0; - index_min = 31; - for ( i = 1; i < num_sfm; i++ ) - { - difidx_org[i] = difidx[i]; - } - - for ( i = 2; i < num_sfm; i++ ) - { - if ( difidx_org[i - 1] > 17 ) - { - difidx[i] = difidx_org[i] + min( ( difidx_org[i - 1] - 17 ), 3 ); - if ( difidx[i] > 31 ) - { - difidx_flag = 1; - break; - } - } - - if ( difidx_org[i - 1] < 13 ) - { - difidx[i] = difidx_org[i] + max( ( difidx_org[i - 1] - 13 ), -3 ); - if ( difidx[i] < 0 ) - { - difidx_flag = 1; - break; - } - } - } - - if ( difidx_flag != 1 ) - { - for ( i = 1; i < num_sfm; i++ ) - { - if ( difidx[i] > index_max ) - { - index_max = difidx[i]; - } - - if ( difidx[i] < index_min ) - { - index_min = difidx[i]; - } - } - - index_rad = max( ( 15 - index_min ), ( index_max - 15 ) ); - - if ( index_rad <= HUFF_THR ) - { - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - } - } - } - } - - /* LC mode 2 -> LC mode 1 */ - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - - m = resize_huffnorm[j]; - r = resize_huffsizn[j]; - v = 0; - - /* Bit reverse */ - for ( k = 0; k < r; k++ ) - { - v <<= 1; - v |= m & 1; - m >>= 1; - } - - if ( flag_HQ2 ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, v, r ); - } - else - { - push_indice( hBstr, IND_YNRM, v, r ); - } - } - } - else if ( *LCmode == 2 ) - { - /* LC mode 1 -> LC mode 2 */ - for ( i = 1; i < num_sfm; i++ ) - { - j = difidx[i]; - - m = huffnorm[j]; - r = huffsizn[j]; - - push_indice( hBstr, IND_YNRM, m, r ); - } - } - else - { - for ( i = 1; i < num_sfm; i++ ) - { - push_indice( hBstr, IND_YNRM, difidx[i], NORMI_BITS ); - } - } - } - } - - return hcode_l; -} - -/*--------------------------------------------------------------------------* - * diff_envelope_coding() - * - * Create differential code of norm indices - *--------------------------------------------------------------------------*/ - -void diff_envelope_coding( - const int16_t is_transient, /* i : transient indicator */ - const int16_t num_env_bands, /* i : number of envelope bands to code */ - const int16_t start_norm, /* i : start of envelope coding */ - int16_t *ynrm, /* i/o: quantization indices for norms */ - int16_t *normqlg2, /* i/o: quantized norms */ - int16_t *difidx /* o : differential code */ -) -{ - int16_t i; - int16_t idxbuf[NB_SFM]; - int16_t normbuf[NB_SFM]; - - /* Differential coding for indices of quantized norms */ - if ( is_transient ) - { - /* Reorder quantization indices and quantized norms */ - reordernorm( ynrm, normqlg2, idxbuf, normbuf, num_env_bands ); - diffcod( num_env_bands, idxbuf, &difidx[1] ); - difidx[0] = idxbuf[0]; - recovernorm( idxbuf, ynrm, normqlg2, num_env_bands ); - } - else - { - diffcod( num_env_bands, &ynrm[start_norm], &difidx[1] ); - difidx[0] = ynrm[start_norm]; - - for ( i = start_norm; i < start_norm + num_env_bands; i++ ) - { - normqlg2[i] = dicnlg2_float[ynrm[i]]; - } - } - - return; -} -#endif diff --git a/lib_enc/hq_env_enc_fx.c b/lib_enc/hq_env_enc_fx.c index a133f2ce6..e04489b18 100644 --- a/lib_enc/hq_env_enc_fx.c +++ b/lib_enc/hq_env_enc_fx.c @@ -553,7 +553,6 @@ Word16 encode_envelope_indices_fx( /* o : Number of b return hcode_l; } -#ifdef IVAS_FLOAT_FIXED Word16 encode_envelope_indices_ivas_fx( /* o : Number of bits if flag_pack=0,0 if flag_pack=1 Q0 */ BSTR_ENC_HANDLE hBstr, /* i : handle to the bitstream */ const Word16 num_sfm, /* i : Number of subbands Q0 */ @@ -1089,7 +1088,6 @@ Word16 encode_envelope_indices_ivas_fx( /* o : Number return hcode_l; } -#endif /*--------------------------------------------------------------------------* * diff_envelope_coding_fx() * diff --git a/lib_enc/hq_hr_enc.c b/lib_enc/hq_hr_enc.c index 23c7fa739..07080804e 100644 --- a/lib_enc/hq_hr_enc.c +++ b/lib_enc/hq_hr_enc.c @@ -38,11 +38,9 @@ #include "options.h" #include "cnst.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "prot_fx_enc.h" -#endif #include "rom_enc.h" #include "rom_com.h" #include "wmc_auto.h" @@ -52,210 +50,6 @@ * * HQ high rate encoding routine *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void hq_hr_enc( - Encoder_State *st, /* i/o: encoder state structure */ - float *t_audio, /* i/o: transform-domain coefficients */ - const int16_t length, /* i : length of spectrum */ - int16_t *num_bits, /* i/o: number of available bits */ - const int16_t is_transient, /* i : transient flag */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - int16_t nb_sfm; - int16_t sum, hcode_l; - int16_t difidx[NB_SFM]; - int16_t normqlg2[NB_SFM], ynrm[NB_SFM]; - int16_t nf_idx; - int16_t LCmode; - int16_t shape_bits, num_sfm, numnrmibits; - int16_t hqswb_clas; - int16_t num_env_bands; - int16_t Npeaks, start_norm; - int16_t difidx_org[NB_SFM]; - int16_t R[NB_SFM]; - int16_t peaks[HVQ_MAX_PEAKS]; - int16_t sfmsize[NB_SFM], sfm_start[NB_SFM], sfm_end[NB_SFM]; - int16_t npulses[NB_SFM], maxpulse[NB_SFM]; - int16_t Rsubband[NB_SFM]; /* Q3 */ - float t_audio_q[L_SPEC48k_EXT]; - float nf_gains[HVQ_NF_GROUPS], pe_gains[HVQ_NF_GROUPS]; - float noise_level[HVQ_BWE_NOISE_BANDS]; - int16_t hq_generic_offset; - float hq_generic_fenv[HQ_FB_FENV]; - int16_t hq_generic_exc_clas = 0; - int16_t core_sfm; - int16_t har_freq_est1 = 0, har_freq_est2 = 0; - int16_t flag_dis = 1; - const int16_t *subband_search_offset; - int16_t wBands[2]; - int16_t b_delta_env; - float att; - HQ_ENC_HANDLE hHQ_core = st->hHQ_core; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - Npeaks = 0; - set_s( npulses, 0, NB_SFM ); - set_s( maxpulse, 0, NB_SFM ); - set_s( difidx_org, 0, NB_SFM ); - set_f( t_audio_q, 0.0f, L_FRAME48k ); - set_f( nf_gains, 0.0f, HVQ_NF_GROUPS ); - set_f( pe_gains, 0.0f, HVQ_NF_GROUPS ); - - /*------------------------------------------------------------------* - * Classification - *------------------------------------------------------------------*/ - - *num_bits -= hq_classifier_enc( st, length, t_audio, is_transient, &Npeaks, peaks, pe_gains, nf_gains, &hqswb_clas ); - - - /*------------------------------------------------------------------* - * Set quantization parameters - *------------------------------------------------------------------*/ - - hq_configure( length, hqswb_clas, st->core_brate, &num_sfm, &nb_sfm, &start_norm, &num_env_bands, &numnrmibits, &hq_generic_offset, sfmsize, sfm_start, sfm_end ); - - /*------------------------------------------------------------------* - * Transient frame handling - *------------------------------------------------------------------*/ - - /* Interleave MLT coefficients of 4 sub-vectors in case of transient frame */ - if ( is_transient ) - { - interleave_spectrum( t_audio, length ); - } - - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); - if ( att != 1.0f ) - { - v_multc( t_audio, att, t_audio, sfm_end[num_sfm - 1] ); - } - } - - /*------------------------------------------------------------------* - * Scalar quantization of norms - * Encode norm indices - *------------------------------------------------------------------*/ - - /* calculate and quantize norms */ - calc_norm( t_audio, ynrm, normqlg2, start_norm, num_env_bands, sfmsize, sfm_start ); - - /* create differential code of quantized norm indices */ - diff_envelope_coding( is_transient, num_env_bands, start_norm, ynrm, normqlg2, difidx ); - - /* Find norm coding mode and calculate number of bits */ - hcode_l = encode_envelope_indices( hBstr, num_env_bands, numnrmibits, difidx, &LCmode, 0, NORMAL_HQ_CORE, is_transient ); - *num_bits -= hcode_l + NORM0_BITS + FLAGS_BITS; - - /* Encode norm indices */ - encode_envelope_indices( hBstr, num_env_bands, numnrmibits, difidx, &LCmode, 1, NORMAL_HQ_CORE, is_transient ); - - /*------------------------------------------------------------------* - * HQ GENERIC BWE encoding - *------------------------------------------------------------------*/ - - if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) - { - hq_generic_hf_encoding( t_audio, hq_generic_fenv, hq_generic_offset, st, &hq_generic_exc_clas, length ); - - if ( hq_generic_exc_clas == HQ_GENERIC_SP_EXC ) - { - ( *num_bits )++; /* conditional 1 bit saving for representing FD3 BWE excitation class */ - } - map_hq_generic_fenv_norm( hqswb_clas, hq_generic_fenv, ynrm, normqlg2, num_env_bands, nb_sfm, hq_generic_offset ); - } - - /*------------------------------------------------------------------* - * Bit allocation - *------------------------------------------------------------------*/ - - hq_bit_allocation( st->core_brate, length, hqswb_clas, num_bits, normqlg2, nb_sfm, sfmsize, noise_level, R, Rsubband, &sum, &core_sfm, num_env_bands ); - - /*------------------------------------------------------------------* - * Normalize coefficients with quantized norms - *------------------------------------------------------------------*/ - if ( hqswb_clas != HQ_HVQ ) - { - if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) - { - b_delta_env = calc_nor_delta_hf( hBstr, t_audio, ynrm, Rsubband, num_env_bands, nb_sfm, sfmsize, sfm_start, core_sfm ); - sum -= b_delta_env; - } - normalizecoefs( t_audio, ynrm, nb_sfm, sfm_start, sfm_end ); - } - - /*------------------------------------------------------------------* - * Quantize/code spectral fine structure using PVQ or HVQ - *------------------------------------------------------------------*/ - - if ( hqswb_clas == HQ_HVQ ) - { - sum = hvq_enc( hBstr, st->bwidth, st->core_brate, *num_bits, Npeaks, ynrm, R, peaks, nf_gains, noise_level, pe_gains, t_audio, t_audio_q ); - *num_bits -= sum; - } - else - { - shape_bits = pvq_core_enc( hBstr, t_audio, t_audio_q, sum, nb_sfm, sfm_start, sfm_end, sfmsize, Rsubband, R, npulses, maxpulse, HQ_CORE ); - *num_bits += ( sum - shape_bits ); - } - - if ( hqswb_clas == HQ_HVQ || hqswb_clas == HQ_HARMONIC ) - { - subband_search_offset = subband_search_offsets_13p2kbps_Har; - wBands[0] = SWB_SB_BW_LEN0_16KBPS_HAR; - wBands[1] = SWB_SB_BW_LEN1_16KBPS_HAR; - - har_est( t_audio_q, 300, &har_freq_est1, &har_freq_est2, &flag_dis, &hHQ_core->prev_frm_hfe2, subband_search_offset, wBands, &hHQ_core->prev_stab_hfe2 ); - - hHQ_core->prev_frm_hfe2 = har_freq_est2; - } - - /* reset LR-HQ memories */ - hHQ_core->prev_frm_hfe2 = 0; /*reset*/ - hHQ_core->prev_stab_hfe2 = 0; - - nf_idx = 0; - if ( !is_transient && hqswb_clas != HQ_HVQ && !( length == L_FRAME16k && st->core_brate <= HQ_32k ) ) - { - if ( hqswb_clas == HQ_GEN_SWB || hqswb_clas == HQ_GEN_FB ) - { - nf_idx = noise_adjust( t_audio, R, sfm_start, sfm_end, max( core_sfm, num_env_bands - 1 ) ); - push_indice( hBstr, IND_NF_IDX, nf_idx, 2 ); - } - else - { - nf_idx = noise_adjust( t_audio, R, sfm_start, sfm_end, core_sfm ); - push_indice( hBstr, IND_NF_IDX, nf_idx, 2 ); - } - } - - - /* updates */ - hHQ_core->prev_hqswb_clas = hqswb_clas; - - /* Prepare synthesis for LB generation in case of switch to ACELP */ - if ( hqswb_clas != HQ_HVQ ) - { - apply_envelope_enc( t_audio_q, ynrm, num_sfm, sfm_start, sfm_end ); - } - - if ( is_transient ) - { - de_interleave_spectrum( t_audio_q, length ); - } - - mvr2r( t_audio_q, t_audio, length ); - - - return; -} -#else void hq_hr_enc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ @@ -482,4 +276,3 @@ void hq_hr_enc_ivas_fx( return; } -#endif diff --git a/lib_enc/hq_hr_enc_fx.c b/lib_enc/hq_hr_enc_fx.c index 043e917ca..f1ff0d62f 100644 --- a/lib_enc/hq_hr_enc_fx.c +++ b/lib_enc/hq_hr_enc_fx.c @@ -9,7 +9,6 @@ #include "rom_com.h" /* Static table prototypes */ #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * hq_hr_enc_fx() * @@ -255,4 +254,3 @@ void hq_hr_enc_fx( return; } -#endif diff --git a/lib_enc/hq_lr_enc.c b/lib_enc/hq_lr_enc.c index 8e860af39..b184c5ac6 100644 --- a/lib_enc/hq_lr_enc.c +++ b/lib_enc/hq_lr_enc.c @@ -44,1731 +44,3 @@ #include "stl.h" #include "basop_util.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * Local function prototypes - *--------------------------------------------------------------------------*/ - -static int16_t small_symbol_enc( BSTR_ENC_HANDLE hBstr, const int16_t *qbidx, const int16_t bands, int16_t *hLCmode, const int16_t flag_pack, const int16_t is_transient ); - -static int16_t small_symbol_enc_tran( BSTR_ENC_HANDLE hBstr, const int16_t *qbidx, const int16_t bands, int16_t *hLCmode, const int16_t flag_pack, const int16_t is_transient ); - -static float band_energy_quant( BSTR_ENC_HANDLE hBstr, const float *t_audio, const int16_t band_start[], const int16_t band_end[], float band_energy[], const int16_t bands, const Word32 L_qint, const Word16 eref_fx, const int16_t is_transient ); - -static int16_t p2a_threshold_quant( BSTR_ENC_HANDLE hBstr, const float *t_audio, const int16_t band_start[], const int16_t band_end[], const int16_t band_width[], const int16_t bands, const int16_t p2a_bands, const float p2a_th, int16_t *p2a_flags ); - -static void mdct_spectrum_fine_gain_enc( BSTR_ENC_HANDLE hBstr, const float ybuf[], float y2[], const int16_t band_start[], const int16_t band_end[], const int16_t k_sort[], const int16_t bands, const Word32 L_qint, const int16_t Ngq, const int16_t gqlevs, const int16_t gqbits ); - - -/*--------------------------------------------------------------------------* - * spt_shorten_domain_set() - * - * Track the spectral peak based on peak -avg analysis - *--------------------------------------------------------------------------*/ - -static void spt_shorten_domain_set( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - HQ_ENC_HANDLE hHQ_core, /* i/o: HQ core encoder handle */ - const float t_audio[], /* i : input spectrum */ - const int16_t p2a_flags[], /* i : p2a anlysis information */ - const int16_t new_band_start[], /* i : new band start position */ - const int16_t new_band_end[], /* i : new band end position */ - const int16_t new_band_width[], /* i : new subband band width */ - const int16_t bands, /* i : total number of subbands */ - int16_t band_start[], /* i/o: band start position */ - int16_t band_end[], /* i/o: band end position */ - int16_t band_width[], /* i : sub band band width */ - int16_t *bit_budget /* i/o: bit budget */ -) -{ - int16_t i, j, k; - int16_t kpos; - float max_y2; - int16_t max_y2_pos; - int16_t spt_shorten_flag[SPT_SHORTEN_SBNUM]; - - kpos = 0; - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - if ( p2a_flags[k] == 1 ) - { - spt_shorten_flag[j] = 0; - if ( hHQ_core->prev_SWB_peak_pos[kpos] != 0 ) - { - max_y2 = 0.0f; - max_y2_pos = 0; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - if ( max_y2 < fabs( t_audio[i] ) ) - { - max_y2 = (float) fabs( t_audio[i] ); - max_y2_pos = i; - } - } - if ( max_y2_pos >= new_band_start[j] && max_y2_pos <= new_band_end[j] ) - { - band_start[k] = new_band_start[j]; - band_end[k] = new_band_end[j]; - band_width[k] = new_band_width[j]; - spt_shorten_flag[j] = 1; - } - } - push_indice( hBstr, IND_HQ2_SPT_SHORTEN, spt_shorten_flag[j], 1 ); - *bit_budget -= 1; - } - - kpos++; - j++; - } - - return; -} - -/*--------------------------------------------------------------------------* - * hq_lr_enc() - * - * HQ low rate encoding routine - *--------------------------------------------------------------------------*/ - -void hq_lr_enc( - Encoder_State *st, /* i/o: encoder state structure */ - float t_audio[], /* i/o: transform-domain coefs. */ - const int16_t inner_frame, /* i : inner frame length */ - int16_t *num_bits, /* i/o: number of available bits */ - const int16_t is_transient /* i : transient flag */ -) -{ - int16_t i, k1, k2; - int16_t bit_budget, pbits; - int16_t bands, length, ni_seed, gqlevs, gqbits, Ngq, p2a_bands; - int16_t p2a_flags[BANDS_MAX]; - int16_t band_start[BANDS_MAX], band_end[BANDS_MAX], band_width[BANDS_MAX]; - float band_energy[BANDS_MAX], Rk[BANDS_MAX]; - Word32 Rk_fx[BANDS_MAX]; - float ebits; - float p2a_th, ni_coef, ni_pd_th, pd_thresh, ld_slope; - Word32 L_qint; /* Q29 */ - Word16 eref_fx; /* Q10 */ - Word16 bit_alloc_weight_fx; /* Q13 */ - int16_t k_sort[BANDS_MAX]; - int16_t npulses[BANDS_MAX]; - int32_t inp_vector[L_FRAME48k]; - float y2[L_FRAME48k]; - float y2_ni[L_FRAME48k]; - int16_t hqswb_clas; - int16_t lowlength; - int16_t highlength; - float m[L_FRAME32k]; - int16_t har_bands; - float Ep[BANDS_MAX], enerH = 0.0f, enerL = 0.0f; - int16_t lowband, highband, bw_low = 0, bw_high = 20; - float band_energy_tmp[BANDS_MAX]; - int32_t bwe_br; - int16_t trans_bit, p2a_flags_tmp[BANDS_MAX]; - int16_t adjustFlag = 0; - int16_t prev_SWB_peak_pos_tmp[SPT_SHORTEN_SBNUM]; - int16_t k, j; - int16_t flag_spt; - int16_t org_band_start[SPT_SHORTEN_SBNUM]; - int16_t org_band_end[SPT_SHORTEN_SBNUM]; - int16_t org_band_width[SPT_SHORTEN_SBNUM]; - int16_t new_band_start[SPT_SHORTEN_SBNUM]; - int16_t new_band_end[SPT_SHORTEN_SBNUM]; - int16_t new_band_width[SPT_SHORTEN_SBNUM]; - int16_t bws_cnt = 0; - Word32 L_tmp, L_tmp2, L_tmp3; - Word16 exp, tmp, exp2, tmp1, tmp2, tmp3, alpha_fx, frac1; - Word32 enerH_fx; - Word32 enerL_fx; - Word32 Ep_fx[BANDS_MAX]; - Word32 Ep_avrg_fx, Ep_vari_fx; - Word32 Ep_avrgL_fx; - Word32 Ep_peak_fx; - Word32 Ep_tmp_fx[BANDS_MAX]; - Word16 gama_fx; /*Q15 0.85f; */ - Word16 beta_fx; /*Q14 1.05f; */ - Word32 L_band_energy[BANDS_MAX], L_band_energy_tmp[BANDS_MAX]; - UWord16 lo; - Word16 Q_band_energy; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - BSTR_ENC_HANDLE hBstr = st->hBstr; - HQ_ENC_HANDLE hHQ_core = st->hHQ_core; - - set_f( y2, 0.0f, L_FRAME48k ); - set_l( inp_vector, 0, inner_frame ); - flag_spt = 0; - set_s( prev_SWB_peak_pos_tmp, 0, SPT_SHORTEN_SBNUM ); - - bwe_br = st->core_brate; - hqswb_clas = HQ_NORMAL; - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - if ( is_transient == 1 ) - { - hqswb_clas = HQ_TRANSIENT; - } - else - { - /* classification of HQ_HARMONIC and HQ_NORMAL frames for SWB BWE */ - hqswb_clas = peak_avrg_ratio( st->total_brate, t_audio, NUMC_N, &hHQ_core->mode_count, &hHQ_core->mode_count1 ); - } - - /* write the classification information into the bitstream */ - push_indice( hBstr, IND_HQ2_SWB_CLAS, hqswb_clas, 2 ); - ( *num_bits ) -= 2; - - if ( hqswb_clas == HQ_NORMAL ) - { - flag_spt = 1; - } - } - else - { - /* write the transient bit into the bitstream */ - push_indice( hBstr, IND_HQ2_SWB_CLAS, is_transient, 1 ); - - /* subtract one bit for the transient flag */ - ( *num_bits )--; - } - - /* Configure encoder for different bandwidths, bitrates, etc. */ - hq2_core_configure( inner_frame, *num_bits, is_transient, &bands, &length, band_width, band_start, band_end, &L_qint, &eref_fx, &bit_alloc_weight_fx, &gqlevs, &Ngq, &p2a_bands, &p2a_th, &pd_thresh, &ld_slope, &ni_coef, &ni_pd_th, bwe_br ); - - highlength = band_end[bands - 1]; - har_bands = bands; - - if ( st->bwidth == SWB && is_transient == 0 && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - /* reserve bits for HQ_NORMAL and HQ_HARMONIC modes */ - if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) - { - ( *num_bits ) -= get_usebit_npswb( hqswb_clas ); - } - } - - if ( ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) - { - if ( hHQ_core->prev_hqswb_clas != HQ_NORMAL ) - { - j = 0; - for ( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) - { - hHQ_core->prev_SWB_peak_pos[j] = 0; - j++; - } - } - } - - /* Check if input frame is larger than coded bandwidth */ - if ( inner_frame > length && is_transient ) - { - /* If so, collapse transient frame (4 short transforms) to remove uncoded coefficients */ - for ( i = 1; i < NUM_TIME_SWITCHING_BLOCKS; i++ ) - { - k1 = i * length / NUM_TIME_SWITCHING_BLOCKS; - k2 = i * inner_frame / NUM_TIME_SWITCHING_BLOCKS; - - mvr2r( &t_audio[k2], &t_audio[k1], length / NUM_TIME_SWITCHING_BLOCKS ); - } - } - - /* Spectral energy calculation/quantization */ - ebits = band_energy_quant( hBstr, t_audio, band_start, band_end, band_energy, bands, L_qint, eref_fx, is_transient ); - - for ( i = 0; i < bands; i++ ) - { - L_band_energy[i] = (Word32) ( band_energy[i] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - /* First pass bit budget for TCQ of spectral band information */ - gqbits = (int16_t) log2_f( (float) gqlevs ); - bit_budget = ( *num_bits ) - (int16_t) ceil( ebits ) - Ngq * gqbits; - - pbits = 0; - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - if ( hqswb_clas == HQ_HARMONIC ) - { - set_s( p2a_flags, 1, har_bands ); - } - else - { - /* High band tonality detector based on per band peak-to-average ratio */ - pbits = p2a_threshold_quant( hBstr, t_audio, band_start, band_end, band_width, bands, p2a_bands, p2a_th, p2a_flags ); - bit_budget -= pbits; - - if ( hqswb_clas == HQ_NORMAL ) - { - return_bits_normal2( &bit_budget, p2a_flags, bands, bits_lagIndices_modeNormal ); - } - } - } - else - { - /* High band tonality detector based on per band peak-to-average ratio */ - pbits = p2a_threshold_quant( hBstr, t_audio, band_start, band_end, band_width, bands, p2a_bands, p2a_th, p2a_flags ); - bit_budget -= pbits; - } - - if ( flag_spt == 1 ) - { - /* initialize the desired parameters for SPT */ - spt_shorten_domain_band_save( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); - spt_shorten_domain_pre( band_start, band_end, hHQ_core->prev_SWB_peak_pos, bands, bwe_br, new_band_start, new_band_end, new_band_width ); - spt_shorten_domain_set( hBstr, hHQ_core, t_audio, p2a_flags, new_band_start, new_band_end, new_band_width, bands, band_start, band_end, band_width, &bit_budget ); - } - -#define WMC_TOOL_SKIP - /* Estimate number of bits per band */ - Q_band_energy = SWB_BWE_LR_Qbe; - FOR( i = 0; i < bands; i++ ) - { - L_tmp = L_shl( L_band_energy[i], sub( 16, Q_band_energy ) ); /*Q16 */ - - frac1 = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - L_tmp = Pow2( 30, frac1 ); - exp = sub( exp, 30 ); - Ep_fx[i] = L_shl( L_tmp, sub( exp, 6 ) ); /* Q -6 */ - Ep[i] = (float) ( Ep_fx[i] / pow( 2.0, -6 ) ); - } - - FOR( i = 0; i < bands; i++ ) - { - L_tmp2 = Ep_fx[i]; - L_tmp = L_max( 1, L_tmp2 ); - exp = norm_l( L_tmp ); - tmp = extract_h( L_shl( L_tmp, exp ) ); - - L_tmp3 = (Word32) band_width[i]; - exp2 = norm_l( L_tmp3 ); - tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); - - exp2 = sub( exp, exp2 ); /* Denormalize and substract */ - - tmp3 = sub( tmp2, tmp ); - IF( tmp3 > 0 ) - { - tmp2 = shr( tmp2, 1 ); - } - IF( tmp3 > 0 ) - { - exp2 = add( exp2, 1 ); - } - tmp = div_s( tmp2, tmp ); - L_tmp = L_deposit_h( tmp ); - L_tmp = Isqrt_lc1( L_tmp, &exp2 ); - move32(); /*Q(31-exp2) */ - Ep_tmp_fx[i] = L_shr( L_tmp, sub( 15, exp2 ) ); /*Q13 */ - } -#undef WMC_TOOL_SKIP - - if ( is_transient == 0 && inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) - { -#define WMC_TOOL_SKIP - lowband = 6; - move16(); - trans_bit = 2; - move16(); - bit_budget = sub( bit_budget, trans_bit ); - gama_fx = 27852; /*Q15 0.85f; */ - beta_fx = 17203; - move16(); /*Q14 1.05f; */ - set_s( &p2a_flags_tmp[bands - trans_bit], 0, 2 ); - - IF( st->core_brate == ACELP_13k20 ) - { - beta_fx = 13107; - move16(); /*14 1.25f; */ - gama_fx = 31130; - move16(); /*0.95f; */ - mvs2s( &p2a_flags[sub( bands, trans_bit )], &p2a_flags_tmp[sub( bands, trans_bit )], trans_bit ); - } - - /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ - Ep_vari_fx = 0; - move32(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { - Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ - } - ELSE - { -#ifdef BASOP_NOGLOB - Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#else - Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ -#endif - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q15 */ - } - } - } - /* modify the last p2a_bands subbands band_energies */ - k = bands; - mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ - Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_peak_fx, shl( sub( bands, lowband ), 9 ), &L_tmp2, &lo ); - Mpy_32_16_ss( Ep_avrg_fx, 1126, &L_tmp3, &lo ); - - IF( ( ( L_sub( L_tmp, L_shr( Ep_avrgL_fx, 1 ) ) < 0 && st->core_brate == ACELP_13k20 ) || st->core_brate < ACELP_13k20 ) && - L_sub( L_tmp2, L_tmp3 ) < 0 && L_sub( L_tmp2, L_shr( Ep_avrg_fx, 7 ) ) > 0 ) - { - FOR( i = lowband; i < bands; i++ ) - { - Mpy_32_16_ss( Ep_avrg_fx, 24576, &L_tmp, &lo ); - IF( L_sub( L_shr( Ep_tmp_fx[i], 1 ), L_tmp ) < 0 ) - { - Mpy_32_16_ss( Ep_peak_fx, sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +4 = 15) */ - L_tmp2 = L_add( L_tmp, 13107 ); /*15 */ - tmp2 = extract_l( L_min( L_max( L_tmp2, 16384 ), gama_fx ) ); /*15 = 15 */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_band_energy_tmp[i], &lo ); - } - } - } - ELSE - { - j = 0; - FOR( i = sub( bands, trans_bit ); i < bands; i++ ) - { - alpha_fx = 16384; - move16(); /*Q14 */ - IF( sub( p2a_flags_tmp[i], 1 ) == 0 ) - { - Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_vari_fx, 3277, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 12, exp ) ); /*Q(13+exp-15 +12-exp +4 = 14) */ - - tmp2 = extract_h( Ep_avrg_fx ); /*Q13-16=-3 */ - IF( tmp2 != 0 ) - { - exp = norm_s( tmp2 ); - tmp2 = shl( tmp2, exp ); /*Q(exp) */ - tmp2 = div_s( 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp2 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_vari_fx, 6554, &L_tmp2, &lo ); - Mpy_32_16_ss( L_tmp2, tmp2, &L_tmp2, &lo ); - L_tmp2 = L_shl( L_tmp2, sub( 13, exp ) ); /*Q(13+exp-15 +13-exp +3 = 14) */ - L_tmp = L_min( L_tmp, L_tmp2 ); /*14 */ - tmp = extract_l( L_min( L_tmp, 13107 ) ); /*14 */ - alpha_fx = add( 16384, tmp ); - } - IF( sub( hHQ_core->last_bitalloc_max_band[j++], 1 ) == 0 ) - { - Mpy_32_16_ss( Ep_tmp_fx[i], sub( bands, lowband ), &L_tmp, &lo ); - tmp = extract_h( L_shl( L_tmp, 14 ) ); /*Q-2 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q(13+exp-15 +14-exp+2 = 14) */ - L_tmp = L_max( L_tmp, 16384 ); /*14 */ - tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ -#else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ - L_tmp = L_max( L_tmp, 16384 ); /*14 */ - tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ -#endif /* BASOP_NOGLOB */ - } - ELSE - { - tmp2 = extract_h( Ep_avrg_fx ); /*13 -16 =-3 */ - IF( tmp2 != 0 ) - { - exp = norm_s( tmp2 ); - tmp2 = shl( tmp2, exp ); /*Q(exp) */ - tmp2 = div_s( 16384, tmp2 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp2 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp2, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 19, exp ) ); /*Q(13+exp-15 +19-exp +3 = 20) */ - Mpy_32_16_ss( L_tmp, shl( sub( bands, lowband ), 9 ), &L_tmp, &lo ); - L_tmp = L_max( L_tmp, 13926 ); /*14 */ - tmp2 = extract_l( L_min( L_tmp, 16384 ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp2 ), 1 ); /*14+14-15+1 =14 */ - } - Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q(Q_band_energy+14-15 +1= Q_band_energy) */ - } - } - lowband = 3; - move16(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { -#ifdef BASOP_NOGLOB - Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#else - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ -#endif - } - ELSE - { - Ep_avrgL_fx = L_add( Ep_avrgL_fx, L_shr( Ep_tmp_fx[i], 1 ) ); /*Q12 */ - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q13 */ - } - } - } - Mpy_32_16_ss( Ep_peak_fx, 28262, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp2, &lo ); - IF( L_sub( L_shr( Ep_avrg_fx, 2 ), L_tmp2 ) > 0 && L_sub( L_shr( Ep_avrg_fx, 4 ), L_tmp2 ) < 0 && L_sub( L_tmp, Ep_avrgL_fx ) > 0 ) - { - adjustFlag = 1; - move16(); - FOR( i = 0; i < lowband; i++ ) - { - tmp = extract_h( Ep_avrgL_fx ); /*Q-4 */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - /*when the divisor is zero, happens rarely*/ - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, 18842, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - L_tmp = L_shl( L_tmp, sub( 27, exp ) ); /*Q14 0.5 */ - tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ -#else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ - tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ -#endif /* BASOP_NOGLOB */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ - } - } -#undef WMC_TOOL_SKIP - - for ( i = 0; i < bands; i++ ) - { - band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); - - /* encode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ - for ( i = 0; i < 2; i++ ) - { - push_indice( hBstr, IND_HQ2_LAST_BA_MAX_BAND, hHQ_core->last_bitalloc_max_band[i], 1 ); - } - } - else if ( is_transient == 0 && inner_frame == L_FRAME16k ) - { -#define WMC_TOOL_SKIP - bit_budget = sub( bit_budget, 2 ); /* bits in high bands to indicate the last 2 subbands is allocated bits or not */ - FOR( i = 0; i < bands; i++ ) - { -#ifndef BASOP_NOGLOB - Ep_tmp_fx[i] = L_shl( Ep_tmp_fx[i], 2 ); -#else /* BASOP_NOGLOB */ - Ep_tmp_fx[i] = L_shl_o( Ep_tmp_fx[i], 2, &Overflow ); -#endif /* BASOP_NOGLOB */ - } - IF( st->core_brate == ACELP_13k20 ) - { - lowband = 8; - move16(); - highband = 15; - move16(); - bw_low = sub( band_start[highband], band_start[lowband] ); - bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); - } - ELSE - { - lowband = 8; - move16(); - highband = 16; - move16(); - bw_low = sub( band_start[highband], band_start[lowband] ); - bw_high = sub( add( band_end[sub( bands, 1 )], 1 ), band_start[highband] ); - } - /* calculate the the low band/high band energy and the variance/avrage of the envelopes */ - enerL_fx = 0; - move32(); - enerH_fx = 0; - move32(); - Ep_vari_fx = 0; - move32(); - Ep_avrg_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 && add( sub( i, bands ), p2a_bands ) < 0 ) - { - Ep_vari_fx = L_add( Ep_vari_fx, L_abs( L_sub( Ep_tmp_fx[i], Ep_tmp_fx[sub( i, 1 )] ) ) ); /*Q15 */ -#ifndef BASOP_NOGLOB - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - } - - IF( sub( i, highband ) >= 0 ) - { - enerH_fx = L_add( enerH_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ - } - ELSE IF( sub( i, lowband ) >= 0 ) - { - enerL_fx = L_add( enerL_fx, L_shl( Ep_fx[i], 2 ) ); /*Q0 */ - } - } - enerL = (float) ( enerL_fx / pow( 2.0, -4 ) ); - enerH = (float) ( enerH_fx / pow( 2.0, -4 ) ); - /* modify the last p2a_bands subbands band_energies */ - k = bands; - mvl2l( L_band_energy, L_band_energy_tmp, k ); /*Q_band_energy */ - - L_tmp = L_max( enerH_fx, enerL_fx ); - tmp = s_max( bw_low, bw_high ); - i = norm_l( L_tmp ); - j = norm_s( tmp ); - Mpy_32_16_ss( L_shl( enerH_fx, i ), shl( bw_low, j ), &L_tmp, &lo ); - Mpy_32_16_ss( L_shl( enerL_fx, i ), shl( bw_high, j ), &L_tmp2, &lo ); - L_tmp2 = L_sub( L_tmp, L_tmp2 ); - - FOR( i = sub( bands, p2a_bands ); i < bands; i++ ) - { - IF( sub( p2a_flags[i], 1 ) == 0 || L_tmp2 > 0 ) - { - tmp = sub( bands, p2a_bands ); - tmp = sub( tmp, lowband ); /*Q0 */ - -#ifndef BASOP_NOGLOB - tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ -#else - tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp1 != 0 ) - { - exp = norm_s( tmp1 ); - tmp1 = shl( tmp1, exp ); /*Q(exp) */ - tmp1 = div_s( 16384, tmp1 ); /*Q(15+14-exp = 29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp1 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, 16384, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 32, exp ) ); /*Q15 */ - tmp = extract_l( L_min( L_tmp, 6554 ) ); /*Q15 */ - Mpy_32_16_ss( Ep_vari_fx, tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 15, exp ) ); /*Q15 */ - tmp = extract_l( L_shr( L_min( L_tmp, 13107 ), 1 ) ); /*Q14 */ - alpha_fx = add( tmp, 16384 ); /*Q14 */ - } - ELSE - { - alpha_fx = 16384; - move16(); /*Q14 */ - } - - IF( add( sub( i, bands ), p2a_bands ) > 0 ) - { - tmp = sub( bands, p2a_bands ); - IF( sub( hHQ_core->last_bitalloc_max_band[sub( i, add( tmp, 1 ) )], 1 ) == 0 ) - { - tmp = sub( tmp, lowband ); - Mpy_32_16_ss( Ep_tmp_fx[i], tmp, &L_tmp, &lo ); -#ifndef BASOP_NOGLOB - tmp = extract_h( L_shl( L_tmp, 16 ) ); /*Q0 */ -#else /* BASOP_NOGLOB */ - tmp = extract_h( L_shl_o( L_tmp, 16, &Overflow ) ); /*Q0 */ -#endif /* BASOP_NOGLOB */ - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_avrg_fx, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 14, exp ) ); /*Q14 */ - tmp = extract_l( L_min( L_max( L_tmp, 16384 ), 20480 ) ); /*Q14 */ - L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ - alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14*/ - } - ELSE - { - tmp = sub( tmp, lowband ); - -#ifndef BASOP_NOGLOB - tmp1 = extract_h( L_shl( Ep_avrg_fx, 1 ) ); /*Q0 */ -#else - tmp1 = extract_h( L_shl_o( Ep_avrg_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp1 != 0 ) - { - exp = norm_s( tmp1 ); - tmp1 = shl( tmp1, exp ); /*Q(exp) */ - tmp1 = div_s( 16384, tmp1 ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp1 = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_tmp_fx[i], tmp1, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, tmp, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 29, exp ) ); /*Q14 */ - tmp = extract_l( L_min( L_max( L_tmp, 13926 ), 16384 ) ); /*Q14 */ - L_tmp = L_mult( alpha_fx, tmp ); /*Q(14+14+1=29) */ - alpha_fx = extract_l( L_shr( L_tmp, 15 ) ); /*Q14 */ - } - } - Mpy_32_16_ss( L_band_energy_tmp[i], alpha_fx, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q Q_band_energy */ - } - lowband = 6; - move16(); - Ep_avrg_fx = 0; - move32(); - Ep_avrgL_fx = 0; - move32(); - Ep_peak_fx = 0; - move32(); - FOR( i = 0; i < bands; i++ ) - { - IF( sub( i, lowband ) >= 0 ) - { -#ifndef BASOP_NOGLOB - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - } - ELSE - { -#ifndef BASOP_NOGLOB - Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ -#else /* BASOP_NOGLOB */ - Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ -#endif /* BASOP_NOGLOB */ - IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) - { - Ep_peak_fx = Ep_tmp_fx[i]; - move32(); /*Q15 */ - } - } - } - - Mpy_32_16_ss( Ep_peak_fx, 24576, &L_tmp, &lo ); - Mpy_32_16_ss( Ep_peak_fx, 19661, &L_tmp2, &lo ); - Mpy_32_16_ss( Ep_avrgL_fx, 24576, &L_tmp3, &lo ); - - IF( ( L_sub( L_shr( Ep_avrgL_fx, 1 ), Ep_avrg_fx ) > 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 && L_sub( L_shr( Ep_avrgL_fx, 1 ), L_tmp2 ) < 0 ) || - ( L_sub( L_shr( Ep_avrg_fx, 1 ), Ep_avrgL_fx ) > 0 && L_sub( L_shr( Ep_avrg_fx, 3 ), L_tmp3 ) < 0 && L_sub( L_tmp, L_shr( Ep_avrgL_fx, 2 ) ) > 0 ) ) - { - adjustFlag = 1; - move16(); - FOR( i = 0; i < lowband; i++ ) - { -#ifndef BASOP_NOGLOB - tmp = extract_h( L_shl( Ep_avrgL_fx, 1 ) ); /*Q0 */ -#else - tmp = extract_h( L_shl_o( Ep_avrgL_fx, 1, &Overflow ) ); /*Q0 */ -#endif - IF( tmp != 0 ) - { - exp = norm_s( tmp ); - tmp = shl( tmp, exp ); /*Q(exp) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-exp=29-exp) */ - exp = sub( 29, exp ); - } - ELSE - { - tmp = 0x7fff; - move16(); - exp = 0; - move16(); - } - Mpy_32_16_ss( Ep_peak_fx, tmp, &L_tmp, &lo ); - Mpy_32_16_ss( L_tmp, lowband, &L_tmp, &lo ); - L_tmp = L_shl( L_tmp, sub( 28, exp ) ); /*Q14 0.5 */ - tmp = extract_l( L_min( L_tmp, 19661 ) ); /*Q14 */ - Mpy_32_16_ss( L_band_energy_tmp[i], tmp, &L_tmp, &lo ); - L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ - } - } -#undef WMC_TOOL_SKIP - - for ( i = 0; i < bands; i++ ) - { - band_energy_tmp[i] = (float) ( L_band_energy_tmp[i] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - hq2_bit_alloc( band_energy_tmp, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); - - /* encode the last p2a_bands-1 subbands bit-allocation index of the previous frame */ - for ( i = 0; i < 2; i++ ) - { - push_indice( hBstr, IND_HQ2_LAST_BA_MAX_BAND, hHQ_core->last_bitalloc_max_band[i], 1 ); - } - } - else if ( st->bwidth == SWB && hqswb_clas == HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - /* bit allocation for harmonic mode */ - hq2_bit_alloc_har( band_energy, bit_budget, bands, Rk_fx, p2a_bands, bwe_br, p2a_flags, band_width ); - } - else - { - - /* estimate number of bits per band */ - hq2_bit_alloc( band_energy, bands, Rk_fx, &bit_budget, p2a_flags, bit_alloc_weight_fx, band_width, *num_bits, hqswb_clas, st->bwidth, is_transient ); - } - - tcq_core_LR_enc( hBstr, inp_vector, t_audio, y2, bit_budget, bands, band_start, band_end, band_width, Rk_fx, npulses, k_sort, p2a_flags, p2a_bands, hHQ_core->last_bitalloc_max_band, inner_frame, adjustFlag, is_transient ); - - if ( ( inner_frame == L_FRAME8k && st->core_brate <= ACELP_13k20 ) || inner_frame == L_FRAME16k ) - { - j = 0; - for ( i = 2; i > 0; i-- ) - { - if ( npulses[bands - i] > 0 ) - { - hHQ_core->last_bitalloc_max_band[j] = 1; - } - else - { - hHQ_core->last_bitalloc_max_band[j] = 0; - } - j++; - } - } - - /* Prepare floating Rk for next modules */ - for ( k = 0; k < bands; k++ ) - { - Rk[k] = WORD322FL_SCALE( Rk_fx[k], SWB_BWE_LR_QRk - 1 ); - } - - /* Denormalize the coded MDCT spectrum */ - mdct_spectrum_denorm( inp_vector, y2, band_start, band_end, band_width, band_energy, npulses, bands, ld_slope, pd_thresh ); - - /* Apply fine gain quantization to denormalized coded spectrum */ - mdct_spectrum_fine_gain_enc( hBstr, t_audio, y2, band_start, band_end, k_sort, bands, L_qint, Ngq, gqlevs, gqbits ); - - /* reStore the subband information*/ - if ( flag_spt == 1 ) - { - spt_shorten_domain_band_restore( bands, band_start, band_end, band_width, org_band_start, org_band_end, org_band_width ); - } - - /* Inject noise into components having relatively low pulse energy per band */ - ni_seed = npulses[0] + npulses[1] + npulses[2] + npulses[3]; - - for ( i = 0; i < band_end[bands - 1] + 1; i++ ) - y2_ni[i] = y2[i]; - hq2_noise_inject( y2_ni, band_start, band_end, band_width, Ep, Rk, npulses, ni_seed, bands, 0, bw_low, bw_high, enerL, enerH, hHQ_core->last_ni_gain, hHQ_core->last_env, &hHQ_core->last_max_pos_pulse, p2a_flags, p2a_bands, hqswb_clas, st->bwidth, bwe_br ); - - if ( st->bwidth == SWB && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) ) - { - if ( hqswb_clas == HQ_NORMAL || hqswb_clas == HQ_HARMONIC ) - { - preset_hq2_swb( hqswb_clas, band_end, &har_bands, p2a_bands, length, bands, &lowlength, &highlength, m ); - - swb_bwe_enc_lr( st, y2, t_audio, m, bwe_br, bands, band_start, band_end, band_energy, p2a_flags, hqswb_clas, lowlength, highlength, hHQ_core->prev_frm_index, har_bands, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, band_width, y2_ni, &ni_seed ); - - post_hq2_swb( m, lowlength, highlength, hqswb_clas, har_bands, bands, p2a_flags, band_start, band_end, y2, npulses ); - - if ( hqswb_clas == HQ_NORMAL ) - { - spt_swb_peakpos_tmp_save( y2, bands, band_start, band_end, prev_SWB_peak_pos_tmp ); - for ( k = 0; k < SPT_SHORTEN_SBNUM; k++ ) - { - if ( p2a_flags[bands - SPT_SHORTEN_SBNUM + k] == 0 || npulses[bands - SPT_SHORTEN_SBNUM + k] == 0 ) - { - prev_SWB_peak_pos_tmp[k] = 0; - } - } - } - - mvr2r( y2_ni, y2, lowlength ); - } - else - { - mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* HQ_TRANSIENT */ - } - } - else - { - mvr2r( y2_ni, y2, band_end[bands - 1] + 1 ); /* NB, WB */ - } - - - updat_prev_frm( y2, t_audio, bwe_br, length, inner_frame, bands, st->bwidth, is_transient, hqswb_clas, &hHQ_core->prev_hqswb_clas, hHQ_core->prev_SWB_peak_pos, prev_SWB_peak_pos_tmp, &hHQ_core->prev_frm_hfe2, &hHQ_core->prev_stab_hfe2, bws_cnt ); - - if ( st->bwidth != SWB ) - { - /* reset HQ classifier memories */ - hHQ_core->mode_count = 0; - hHQ_core->mode_count1 = 0; - } - if ( hqswb_clas != HQ_HARMONIC && ( bwe_br == HQ_16k40 || bwe_br == HQ_13k20 ) && st->bwidth == SWB ) - { - hHQ_core->prev_frm_index[0] = -1; - hHQ_core->prev_frm_index[1] = -1; - } - /* update number of unused bits */ - *num_bits = 0; - - hHQ_core->hvq_hangover = 0; - - return; -} - -/*--------------------------------------------------------------------------* - * small_symbol_enc_tran() - * - * Huffman encoding of differential energies, estimating or packing bits - * if flag_pack = 0, LC mode info. is output else LC mode info. is input - * if flag_pack = 0, estimatng else packing bits - *--------------------------------------------------------------------------*/ - -/*! r: bits */ -static int16_t small_symbol_enc_tran( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t *qbidx, /* i : input of dequantized differential energy */ - const int16_t BANDS, /* i : number of bands */ - int16_t *hLCmode, /* i/o: LC mode info */ - const int16_t flag_pack, /* i : indicator of packing or estimating bits */ - const int16_t is_transient ) -{ - int16_t i, bits; - int16_t difidx[BANDS_MAX]; - - for ( i = 0; i < BANDS; i++ ) - { - difidx[i] = qbidx[i] + LRMDCT_BE_OFFSET; - } - - for ( i = 0; i < BANDS; ++i ) - { - if ( difidx[i] > LRMDCT_BE_LIMIT || difidx[i] < 0 ) - { - /* Huffman cannot encode this vector */ - return -1; - } - } - - /* Preparing lossless coding input */ - if ( flag_pack == 0 ) - { - /* estimating # of bits */ - bits = encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE_TRAN, is_transient ); - bits += BITS_DE_FCOMP; /* xx bits for diff. energies + BITS_DE_FCOMP bits for first energies */ - } - else - { - bits = 0; - encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE_TRAN, is_transient ); - } - - return bits + BITS_DE_HMODE; /* xx bits for diff. energies + 1 bit for LC coding mode */ -} - - -/*--------------------------------------------------------------------------* - * small_symbol_enc() - * - * Huffman encoding of differential energies, estimating or packing bits - * if flag_pack = 0, LC mode info. is output else LC mode info. is input - * if flag_pack = 0, estimatng else packing bits - *--------------------------------------------------------------------------*/ - -/*! r: bits */ -static int16_t small_symbol_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t *qbidx, /* i : input of dequantized differential energy */ - const int16_t BANDS, /* i : number of bands */ - int16_t *hLCmode, /* i/o: LC mode info */ - const int16_t flag_pack, /* i : indicator of packing or estimating bits */ - const int16_t is_transient ) -{ - int16_t i, bits; - int16_t difidx[BANDS_MAX], LSB[BANDS_MAX]; - - /* Preparing lossless coding input */ - difidx[0] = qbidx[0] + DE_OFFSET0; - - for ( i = 1; i < BANDS; ++i ) - { - difidx[i] = qbidx[i] + DE_OFFSET1; - } - - for ( i = 0; i < BANDS; ++i ) - { - if ( difidx[i] >= DE_LIMIT || difidx[i] < 0 ) - { - /* Huffman cannot encode this vector */ - return -1; - } - } - - /* splitting MSB and LSB */ - for ( i = 0; i < BANDS; ++i ) - { - LSB[i] = difidx[i] & 1; - difidx[i] >>= 1; - } - - /* Preparing lossless coding input */ - if ( flag_pack == 0 ) - { - /* estimating # of bits */ - /* Encoding MSB bits */ - bits = encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE, is_transient ); - bits += BITS_DE_FCOMP; /* xx bits for diff. energies + BITS_DE_FCOMP bits for first energies */ - - /* Encoding LSB bit packing */ - bits += BANDS; - } - else - { - /* Encoding MSB bits */ - bits = 0; - encode_envelope_indices( hBstr, BANDS, -1, difidx, hLCmode, flag_pack, LOW_RATE_HQ_CORE, is_transient ); - - /* Encoding LSB bit packing */ - for ( i = 0; i < BANDS; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, LSB[i], BITS_DE_LSB ); - } - } - - return bits + BITS_DE_HMODE; /* xx bits for diff. energies + 1 bit for LC coding mode */ -} - - -/*--------------------------------------------------------------------------* - * large_symbol_enc() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: bits */ -static int16_t large_symbol_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *qbidx, /* i : input of dequantized differential energy */ - const int16_t BANDS, /* i : number of bands */ - int16_t *hLCmode0, /* i/o: LC mode info */ - const int16_t flag_pack /* i : indicator of packing or estimating bits */ -) -{ - int16_t i, bits; - int16_t LSB1[BANDS_MAX]; - int16_t min_q = 513, max_q = -1, offset0; - int16_t min_bits, min_bits_pos; - int16_t tdifidx0[BANDS_MAX], tdifidx1[BANDS_MAX]; - int16_t basic_shift; - int16_t bitsmode0, bitsmode1; - int16_t lsbdepth1; - int16_t cnt_outlyer, pos_outlyer, cnt_outlyer0; - - cnt_outlyer0 = 0; - cnt_outlyer = 0; - bitsmode0 = 0; - bitsmode1 = 0; - pos_outlyer = 0; - lsbdepth1 = 0; - - if ( flag_pack == 0 || ( flag_pack == 1 && *hLCmode0 == 0 ) ) - { - if ( qbidx[0] > ABS_ENG_OFFSET - 1 || qbidx[0] < -ABS_ENG_OFFSET ) - { - cnt_outlyer0 = 2; - } - else if ( qbidx[0] > 3 || qbidx[0] < -4 ) - { - cnt_outlyer0 = 1; - } - else - { - cnt_outlyer0 = 0; - } - - cnt_outlyer = 0; - pos_outlyer = -1; - for ( i = 1; i < BANDS; ++i ) - { - if ( qbidx[i] > 3 || qbidx[i] < -4 ) - { - cnt_outlyer++; - pos_outlyer = i; - } - - if ( qbidx[i] > ABS_ENG_OFFSET - 1 || qbidx[i] < -ABS_ENG_OFFSET ) - { - cnt_outlyer++; - } - } - - if ( cnt_outlyer0 == 0 && cnt_outlyer <= 1 ) - { - bitsmode0 = BITS_DE_8SMODE + BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; - if ( cnt_outlyer == 1 ) - { - /* 01 */ - bitsmode0 += BITS_DE_8SPOS + BITS_ABS_ENG; - } - - for ( i = 0; i < pos_outlyer; ++i ) - { - tdifidx0[i] = qbidx[i]; - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - - for ( i = pos_outlyer + 1; i < BANDS; ++i ) - { - tdifidx0[i] = qbidx[i]; - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - } - else if ( cnt_outlyer0 == 1 && cnt_outlyer <= 1 ) - { - bitsmode0 = BITS_DE_8SMODE + BITS_DE_8SMODE_N0 + BITS_DE_8SMODE_N1; - tdifidx0[0] = qbidx[0]; - bitsmode0 += BITS_ABS_ENG; - if ( cnt_outlyer == 1 ) - { - /* 11 */ - bitsmode0 += BITS_DE_8SPOS + BITS_ABS_ENG; - } - else - { - pos_outlyer = 0; - } - - for ( i = 1; i < pos_outlyer; ++i ) - { - tdifidx0[i] = qbidx[i]; - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - - for ( i = pos_outlyer + 1; i < BANDS; ++i ) - { - tdifidx0[i] = qbidx[i]; - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - } - else - { - bitsmode0 = 20000; - } - } - - if ( flag_pack == 0 || ( flag_pack == 1 && *hLCmode0 == 1 ) ) - { - /* components 0 range : -256~255 */ - max_q = MINIMUM_ENERGY_LOWBRATE; - min_q = MAXIMUM_ENERGY_LOWBRATE; - for ( i = 0; i < BANDS; ++i ) - { - if ( qbidx[i] > max_q ) - { - max_q = qbidx[i]; - } - - if ( qbidx[i] < min_q ) - { - min_q = qbidx[i]; - } - } - - /* Counting bits for transmitting all components using same method */ - for ( i = 0;; ++i ) - { - if ( max_q <= ( ( 2 << ( i + 1 ) ) - 1 ) && min_q >= -( 2 << ( i + 1 ) ) ) - { - break; - } - } - basic_shift = i; - - min_bits = 1000; - min_bits_pos = basic_shift; - for ( offset0 = basic_shift; offset0 < basic_shift + 3; offset0++ ) - { - max_q = MINIMUM_ENERGY_LOWBRATE; - min_q = MAXIMUM_ENERGY_LOWBRATE; - - bitsmode1 = BITS_DE_8SMODE + BITS_MAX_DEPTH; - for ( i = 0; i < BANDS; ++i ) - { - bitsmode1 += ( hessize[( qbidx[i] >> offset0 ) + 4] + ( offset0 ) ); - } - - if ( min_bits > bitsmode1 ) - { - min_bits_pos = offset0; - min_bits = bitsmode1; - } - } - - bitsmode1 = min_bits; - lsbdepth1 = min_bits_pos; - - for ( i = 0; i < BANDS; ++i ) - { - LSB1[i] = qbidx[i] & ( ( 1 << lsbdepth1 ) - 1 ); - tdifidx1[i] = qbidx[i] >> lsbdepth1; - } - } - - /* Preparing lossless coding input */ - if ( flag_pack == 0 ) - { - /* estimating # of bits */ - /* Encoding MSB bits */ - if ( bitsmode0 < bitsmode1 ) - { - bits = bitsmode0; - *hLCmode0 = 0; - } - else - { - bits = bitsmode1; - *hLCmode0 = 1; - } - } - else - { - /* Encoding MSB bits */ - if ( *hLCmode0 == 0 ) - { - push_indice( hBstr, IND_HQ2_DENG_8SMODE, 0, BITS_DE_8SMODE ); - bits = BITS_DE_8SMODE; - if ( cnt_outlyer0 == 0 ) - { - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N0, 0, BITS_DE_8SMODE_N0 ); - bits += BITS_DE_8SMODE_N0; - if ( cnt_outlyer == 1 ) - { - /* 01 */ - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 1, BITS_DE_8SMODE_N1 ); - bits += BITS_DE_8SMODE_N1; - push_indice( hBstr, IND_HQ2_DENG_8SPOS, pos_outlyer, BITS_DE_8SPOS ); - bits += BITS_DE_8SPOS; - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[pos_outlyer] + ABS_ENG_OFFSET, BITS_ABS_ENG ); - bits += BITS_ABS_ENG; - } - else - { - /* 00 */ - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 0, BITS_DE_8SMODE_N1 ); - bits += BITS_DE_8SMODE_N1; - } - - for ( i = 0; i < pos_outlyer; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - - for ( i = pos_outlyer + 1; i < BANDS; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); - bitsmode0 += hessize[tdifidx0[i] + 4]; - } - } - else if ( cnt_outlyer0 == 1 ) - { - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N0, 1, BITS_DE_8SMODE_N0 ); - bits += BITS_DE_8SMODE_N0; - if ( cnt_outlyer == 1 ) - { - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 1, BITS_DE_8SMODE_N1 ); - bits += BITS_DE_8SMODE_N1; - push_indice( hBstr, IND_HQ2_DENG_8SPOS, pos_outlyer, BITS_DE_8SPOS ); - bits += BITS_DE_8SPOS; - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[0] + ABS_ENG_OFFSET, BITS_ABS_ENG ); - bits += BITS_ABS_ENG; - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[pos_outlyer] + ABS_ENG_OFFSET, BITS_ABS_ENG ); - bits += BITS_ABS_ENG; - } - else - { - push_indice( hBstr, IND_HQ2_DENG_8SMODE_N1, 0, BITS_DE_8SMODE_N1 ); - bits += BITS_DE_8SMODE_N1; - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, qbidx[0] + ABS_ENG_OFFSET, BITS_ABS_ENG ); - bits += BITS_ABS_ENG; - } - - for ( i = 1; i < pos_outlyer; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); - bits += hessize[tdifidx0[i] + 4]; - } - - for ( i = pos_outlyer + 1; i < BANDS; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx0[i] + 4], hessize[tdifidx0[i] + 4] ); - bits += hessize[tdifidx0[i] + 4]; - } - } - } - else - { - bits = BITS_DE_8SMODE + BITS_MAX_DEPTH; - push_indice( hBstr, IND_HQ2_DENG_8SMODE, 1, BITS_DE_8SMODE ); - push_indice( hBstr, IND_HQ2_DENG_8SDEPTH, lsbdepth1, BITS_MAX_DEPTH ); - - for ( i = 0; i < BANDS; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, hescode[tdifidx1[i] + 4], hessize[tdifidx1[i] + 4] ); - bits += hessize[tdifidx1[i] + 4]; - } - - if ( lsbdepth1 > 0 ) - { - for ( i = 0; i < BANDS; ++i ) - { - push_indice( hBstr, IND_HQ2_DIFF_ENERGY, LSB1[i], lsbdepth1 ); - } - bits += BANDS * lsbdepth1; - } - } - } - - return bits; /* xx bits for diff. energies + 1 bit for LC coding mode */ -} - -/*-------------------------------------------------------------------* - * band_energy_quant() - * - * - *-------------------------------------------------------------------*/ - -static float band_energy_quant( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *t_audio, - const int16_t band_start[], - const int16_t band_end[], - float band_energy[], - const int16_t bands, - const Word32 L_qint, /* Q29 */ - const Word16 eref_fx, /* Q10 */ - const int16_t is_transient ) -{ - int16_t i, k; - float E; - int16_t ebits; - int16_t hLCmode0, hLCmode1, deng_bits; - int16_t bq1_temp[BANDS_MAX], bq2_temp[BANDS_MAX]; - int16_t bq0; - int16_t bq1[BANDS_MAX]; - int16_t bq2[BANDS_MAX]; - int16_t deng_cmode = 0; - int16_t hbits; - Word32 L_tmp; - Word32 L_band_energy[BANDS_MAX]; - Word16 exp_normd; - Word16 rev_qint_fx; - Word16 Qrev_qint; - - /* Calculate the band energies */ - for ( k = 0; k < bands; k++ ) - { - E = 0.0f; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - E += t_audio[i] * t_audio[i]; - } - - band_energy[k] = (float) log2_f( E + 0.18e-1f ); - } - - if ( is_transient ) - { - reverse_transient_frame_energies( band_energy, bands ); - } - - /* Quantize the reference and band energies */ - for ( k = 0; k < bands; k++ ) - L_band_energy[k] = (Word32) ( band_energy[k] * pow( 2.0f, SWB_BWE_LR_Qbe ) ); - -#define WMC_TOOL_SKIP - exp_normd = norm_l( L_qint ); - rev_qint_fx = div_s( 0x4000, round_fx( L_shl( L_qint, exp_normd ) ) ); /* Q14-(29+exp_normd-16)+15 */ - Qrev_qint = sub( 14 - ( 29 - 16 ) + 15, exp_normd ); - - bq0 = round_fx( L_shl( L_mult( eref_fx, rev_qint_fx ), sub( 5, Qrev_qint ) ) ); /* 16-(10+Qrev_qint+1) */ - FOR( k = 0; k < bands; k++ ) - { - /*bq1[k] = round_f (band_energy[k] / qint); */ - L_tmp = L_mls( L_band_energy[k], rev_qint_fx ); /* Q14+Qrev_qint-15 */ - bq1[k] = round_fx( L_shl( L_tmp, sub( 17, Qrev_qint ) ) ); /* 16-(14+Qrev_qint-15) */ - } -#undef WMC_TOOL_SKIP - - if ( is_transient ) - { - mvs2s( bq1, bq1_temp, bands ); - - /* Calculate the differential energies */ - diffcod_lrmdct( bands, bq0, bq1_temp, bq2_temp, is_transient ); - } - - /* Calculate the differential energies */ - bq2[0] = bq1[0] - bq0; - for ( k = 1; k < bands; k++ ) - { - bq2[k] = bq1[k] - bq1[k - 1]; - } - - /* Modifying qbidx to be located in the range -256~255 */ - for ( i = 0; i < bands; ++i ) - { - if ( bq2[i] > MAXIMUM_ENERGY_LOWBRATE ) - { - bq2[i] = MAXIMUM_ENERGY_LOWBRATE; - } - if ( bq2[i] < MINIMUM_ENERGY_LOWBRATE ) - { - bq2[i] = MINIMUM_ENERGY_LOWBRATE; - } - } - - /* Get number of bits by Huffman0 coding */ - ebits = large_symbol_enc( hBstr, bq2, bands, &hLCmode0, 0 ); - - if ( is_transient ) - { - /* Get number of bits by Huffman coding */ - hbits = small_symbol_enc_tran( hBstr, bq2_temp, bands, &hLCmode1, 0, is_transient ); - } - else - { - /* Get number of bits by Huffman coding */ - hbits = small_symbol_enc( hBstr, bq2, bands, &hLCmode1, 0, is_transient ); - } - - /* comparing used bits */ - if ( ebits < hbits || hbits == -1 ) - { - deng_cmode = 0; - push_indice( hBstr, IND_HQ2_DENG_MODE, deng_cmode, BITS_DE_CMODE ); - large_symbol_enc( hBstr, bq2, bands, &hLCmode0, 1 ); - deng_bits = ebits + BITS_DE_CMODE; - } - else - { - /* setting energy difference coding mode and storing it */ - deng_cmode = 1; - push_indice( hBstr, IND_HQ2_DENG_MODE, deng_cmode, BITS_DE_CMODE ); - - deng_bits = hbits + BITS_DE_CMODE; - - /* packing indice */ - if ( is_transient ) - { - mvs2s( bq2_temp, bq2, bands ); - - small_symbol_enc_tran( hBstr, bq2, bands, &hLCmode1, 1, is_transient ); - } - else - { - small_symbol_enc( hBstr, bq2, bands, &hLCmode1, 1, is_transient ); - } - } - - /* Reconstruct quantized spectrum */ - bq1[0] = bq2[0] + bq0; - for ( k = 1; k < bands; k++ ) - { - bq1[k] = bq2[k] + bq1[k - 1]; - } - - for ( k = 0; k < bands; k++ ) - { -#define WMC_TOOL_SKIP - L_band_energy[k] = L_mls( L_qint, (Word16) bq1[k] ); - move32(); /* 29+0-15 -> Qbe(Q14) */ -#undef WMC_TOOL_SKIP - band_energy[k] = (float) ( L_band_energy[k] / pow( 2.0f, SWB_BWE_LR_Qbe ) ); - } - - if ( is_transient ) - { - reverse_transient_frame_energies( band_energy, bands ); - } - - return ( deng_bits ); -} - - -/*-------------------------------------------------------------------* - * p2a_threshold_quant() - * - * - *-------------------------------------------------------------------*/ - -static int16_t p2a_threshold_quant( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *t_audio, - const int16_t band_start[], - const int16_t band_end[], - const int16_t band_width[], - const int16_t bands, - const int16_t p2a_bands, - const float p2a_th, - int16_t *p2a_flags ) -{ - int16_t i, j, k; - float p, a, e; - float p2a; - - set_s( p2a_flags, 1, bands ); - - j = 0; - for ( k = bands - p2a_bands; k < bands; k++ ) - { - a = 0.0f; - p = 0.0f; - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - e = t_audio[i] * t_audio[i]; - if ( e > p ) - { - p = e; - } - a += e; - } - - if ( a > 0.0f ) - { - a /= band_width[k]; - p2a = 10.0f * (float) log10( p / a ); - - if ( p2a <= p2a_th ) - { - p2a_flags[k] = 0; - } - } - - push_indice( hBstr, IND_HQ2_P2A_FLAGS, p2a_flags[k], 1 ); - j++; - } - - return ( j ); -} - - -/*-------------------------------------------------------------------* - * mdct_spectrum_fine_gain_enc() - * - * - *-------------------------------------------------------------------*/ - -static void mdct_spectrum_fine_gain_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float ybuf[], - float y2[], - const int16_t band_start[], - const int16_t band_end[], - const int16_t k_sort[], - const int16_t bands, - const Word32 L_qint, - const int16_t Ngq, - const int16_t gqlevs, - const int16_t gqbits ) -{ - int16_t i, k, imin; - float Eyy, Exy, gamma; - float dmin, d; - float gain_table[MAX_GQLEVS]; - Word16 exp_normn, exp_normd; - Word16 delta_fx, Qdelta; - Word32 L_delta, L_q; - Word32 L_temp; - Word16 gain_table_fx[MAX_GQLEVS]; - Word16 Qgt; - Word16 temp_lo_fx, temp_hi_fx; - -#define WMC_TOOL_SKIP - /* Fine gain quantization on only the most significant energy bands */ - /*delta = qint / gqlevs; */ - exp_normn = norm_l( L_qint ); - exp_normn = sub( exp_normn, 1 ); - exp_normd = norm_s( gqlevs ); - delta_fx = div_l( L_shl( L_qint, exp_normn ), shl( gqlevs, exp_normd ) ); - Qdelta = add( sub( exp_normn, exp_normd ), 28 ); /* 29+exp_normn-(exp_normd)-1; */ - L_delta = L_shl( L_deposit_h( delta_fx ), sub( 13, Qdelta ) ); - /*q = (-qint + delta) / 2.0f; */ - L_q = L_shr( L_sub( L_delta, L_qint ), 1 ); - - FOR( i = 0; i < gqlevs; i++ ) - { - /*gain_table[i] = (float) pow (2.0f, q * 0.5f); */ - L_temp = L_shr( L_shr( L_q, 1 ), sub( 29, 16 ) ); - temp_lo_fx = L_Extract_lc( L_temp, &temp_hi_fx ); - Qgt = sub( 14, temp_hi_fx ); - gain_table_fx[i] = extract_l( Pow2( 14, temp_lo_fx ) ); /* Qgt */ - - /*q += delta; */ - L_q = L_add( L_q, L_delta ); - gain_table_fx[i] = shl( gain_table_fx[i], sub( 14, Qgt ) ); /* Qgt -> Q14 */ - gain_table[i] = (float) ( gain_table_fx[i] / pow( 2.0f, 14 ) ); - } -#undef WMC_TOOL_SKIP - - for ( k = bands - Ngq; k < bands; k++ ) - { - Eyy = 0.0f; - Exy = 0.0f; - for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) - { - Eyy += y2[i] * y2[i]; - Exy += ybuf[i] * y2[i]; - } - - if ( Eyy > 0.0f && Exy > 0.0f ) - { - gamma = Exy / Eyy; - dmin = FLT_MAX; - imin = -1; - for ( i = 0; i < gqlevs; i++ ) - { - d = (float) fabs( gamma - gain_table[i] ); - if ( d < dmin ) - { - dmin = d; - imin = i; - } - } - - gamma = gain_table[imin]; - - for ( i = band_start[k_sort[k]]; i <= band_end[k_sort[k]]; i++ ) - { - y2[i] *= gamma; - } - } - else - { - imin = 0; - } - - push_indice( hBstr, IND_HQ2_SUBBAND_GAIN, imin, gqbits ); - } - - return; -} -#endif diff --git a/lib_enc/hq_lr_enc_fx.c b/lib_enc/hq_lr_enc_fx.c index 4bb300f53..e602d28b3 100644 --- a/lib_enc/hq_lr_enc_fx.c +++ b/lib_enc/hq_lr_enc_fx.c @@ -24,7 +24,6 @@ static Word16 p2a_threshold_quant_fx( BSTR_ENC_HANDLE hBstr, const Word32 *L_t_a static void mdct_spectrum_fine_gain_enc_fx( Encoder_State *st_fx, const Word32 L_ybuf[], Word32 L_y2[], const Word16 band_start[], const Word16 band_end[], const Word16 k_sort[], const Word16 bands, const Word32 L_qint, const Word16 Ngq, const Word16 gqlevs, const Word16 gqbits ); -#ifdef IVAS_FLOAT_FIXED static Word16 p2a_threshold_quant_ivas_fx( BSTR_ENC_HANDLE hBstr, const Word32 *L_t_audio, const Word16 band_start[], const Word16 band_end[], const Word16 band_width[], const Word16 bands, const Word16 p2a_bands, const Word16 p2a_th, Word16 *p2a_flags ); static void mdct_spectrum_fine_gain_enc_ivas_fx( @@ -51,7 +50,6 @@ static Word16 band_energy_quant_ivas_fx( const Word32 L_qint, /* Q29 */ const Word16 eref_fx, /* Q10 */ const Word16 is_transient ); -#endif /*--------------------------------------------------------------------------* * spt_shorten_domain_set() @@ -127,7 +125,6 @@ static void spt_shorten_domain_set_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void spt_shorten_domain_set_ivas_fx( Encoder_State *st_fx, /* i: encoder state structure */ const Word32 L_t_audio[], /* i: input spectrum */ @@ -197,7 +194,6 @@ static void spt_shorten_domain_set_ivas_fx( return; } -#endif /*--------------------------------------------------------------------------* * hq_lr_enc_fx() @@ -1166,7 +1162,6 @@ void hq_lr_enc_fx( return; } -#ifdef IVAS_FLOAT_FIXED void hq_lr_enc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ Word32 L_t_audio[], /* i/o: transform-domain coefs. */ @@ -1514,7 +1509,7 @@ void hq_lr_enc_ivas_fx( #ifdef BASOP_NOGLOB Ep_avrgL_fx = L_add_o( Ep_avrgL_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ #else - Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ + Ep_avrgL_fx = L_add( Ep_avrgL_fx, Ep_tmp_fx[i] ); /*Q15 */ #endif IF( L_sub( Ep_tmp_fx[i], Ep_peak_fx ) > 0 ) { @@ -1641,10 +1636,10 @@ void hq_lr_enc_ivas_fx( tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ #else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ - L_tmp = L_max( L_tmp, 16384 ); /*14 */ - tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ - alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ + L_tmp = L_shl_o( L_tmp, sub( 14, exp ), &Overflow ); /*Q(13+exp-15 +14-exp+2 = 14) */ + L_tmp = L_max( L_tmp, 16384 ); /*14 */ + tmp = extract_l( L_min( L_tmp, beta_fx ) ); /*14 */ + alpha_fx = shl( mult( alpha_fx, tmp ), 1 ); /*14+14-15 +1=14 */ #endif /* BASOP_NOGLOB */ } ELSE @@ -1691,7 +1686,7 @@ void hq_lr_enc_ivas_fx( #ifdef BASOP_NOGLOB Ep_avrg_fx = L_add_o( Ep_avrg_fx, Ep_tmp_fx[i], &Overflow ); /*Q15 */ #else - Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ + Ep_avrg_fx = L_add( Ep_avrg_fx, Ep_tmp_fx[i] ); /*Q15 */ #endif } ELSE @@ -1735,8 +1730,8 @@ void hq_lr_enc_ivas_fx( L_tmp = L_shl( L_tmp, sub( 27, exp ) ); /*Q14 0.5 */ tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ #else /* BASOP_NOGLOB */ - L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ - tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ + L_tmp = L_shl_o( L_tmp, sub( 27, exp ), &Overflow ); /*Q14 0.5 */ + tmp2 = extract_l( L_min( L_tmp, 19661 ) ); /*14 */ #endif /* BASOP_NOGLOB */ Mpy_32_16_ss( L_band_energy_tmp[i], tmp2, &L_tmp, &lo ); L_band_energy_tmp[i] = L_shl( L_tmp, 1 ); /*Q_band_energy */ @@ -2145,7 +2140,6 @@ void hq_lr_enc_ivas_fx( return; } -#endif /*--------------------------------------------------------------------------* @@ -2201,8 +2195,6 @@ static Word16 small_symbol_enc_tran_fx( /* o : bits } -#ifdef IVAS_FLOAT_FIXED - static Word16 small_symbol_enc_tran_ivas_fx( /* o : bits */ BSTR_ENC_HANDLE hBstr, /* i : handle to the bitstream */ const Word16 *qbidx, /* i : input of dequantized differential energy */ @@ -2247,7 +2239,6 @@ static Word16 small_symbol_enc_tran_ivas_fx( /* o : bit return add( bits, BITS_DE_HMODE ); /* xx bits for diff. energies + 1 bit for LC coding mode */ } -#endif /*--------------------------------------------------------------------------* * small_symbol_enc() @@ -2326,7 +2317,6 @@ static Word16 small_symbol_enc_fx( /* o : bits return add( bits, BITS_DE_HMODE ); /* xx bits for diff. energies + 1 bit for LC coding mode */ } -#ifdef IVAS_FLOAT_FIXED static Word16 small_symbol_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *qbidx, /* i : input of dequantized differential energy */ @@ -2395,7 +2385,6 @@ static Word16 small_symbol_enc_ivas_fx( return add( bits, BITS_DE_HMODE ); /* xx bits for diff. energies + 1 bit for LC coding mode */ } -#endif static Word16 large_symbol_enc_fx( /* o : bits */ BSTR_ENC_HANDLE hBstr, /* i : handle to the bitstream */ @@ -2730,7 +2719,6 @@ static Word16 large_symbol_enc_fx( /* o : bits } -#ifdef IVAS_FLOAT_FIXED static Word16 large_symbol_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 *qbidx, /* i : input of dequantized differential energy */ @@ -3062,7 +3050,6 @@ static Word16 large_symbol_enc_ivas_fx( return bits; /* xx bits for diff. energies + 1 bit for LC coding mode */ } -#endif /*-------------------------------------------------------------------* * band_energy_quant() @@ -3260,7 +3247,6 @@ static Word16 band_energy_quant_fx( } -#ifdef IVAS_FLOAT_FIXED static Word16 band_energy_quant_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word32 *L_t_audio, /* i : Q12 : input MDCT signal (Qs) */ @@ -3451,7 +3437,6 @@ static Word16 band_energy_quant_ivas_fx( return ( deng_bits ); } -#endif /*-------------------------------------------------------------------* * p2a_threshold_quant() @@ -3558,7 +3543,7 @@ static Word16 p2a_threshold_quant_fx( #ifdef BASOP_NOGLOB p2a_fx = round_fx_o( L_shl_o( L_p2a, 13, &Overflow ), &Overflow ); /* 27 -16 -> 11 */ #else - p2a_fx = round_fx( L_shl( L_p2a, 13 ) ); /* 27 -16 -> 11 */ + p2a_fx = round_fx( L_shl( L_p2a, 13 ) ); /* 27 -16 -> 11 */ #endif } @@ -3581,7 +3566,6 @@ static Word16 p2a_threshold_quant_fx( return ( j ); } -#ifdef IVAS_FLOAT_FIXED static Word16 p2a_threshold_quant_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: : bit stream */ const Word32 *L_t_audio, /* i : Q12 : input spectrum */ @@ -3704,7 +3688,6 @@ static Word16 p2a_threshold_quant_ivas_fx( return ( j ); } -#endif /*-------------------------------------------------------------------* * mdct_spectrum_fine_gain_enc() @@ -3873,7 +3856,6 @@ static void mdct_spectrum_fine_gain_enc_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void mdct_spectrum_fine_gain_enc_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word32 L_ybuf[], /* i : Q12 : input spectrum */ @@ -4034,4 +4016,3 @@ static void mdct_spectrum_fine_gain_enc_ivas_fx( return; } -#endif diff --git a/lib_enc/hvq_enc.c b/lib_enc/hvq_enc.c index a1caa95a8..b693d838b 100644 --- a/lib_enc/hvq_enc.c +++ b/lib_enc/hvq_enc.c @@ -42,114 +42,3 @@ #include "rom_enc.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * hvq_enc() - * - * Harmonic VQ encoder - *--------------------------------------------------------------------------*/ - -/*! r: Consumed bits */ -int16_t hvq_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t bwidth, /* i : audio bandwidth */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t hvq_bits, /* i : HVQ bit budget */ - const int16_t Npeaks, /* i : Number of peaks */ - const int16_t *ynrm, /* i : Envelope coefficients */ - int16_t *R, /* i/o: Bit allocation/updated bit allocation */ - int16_t *peaks, /* i/o: Peak pos. / Encoded peak pos. */ - float *nf_gains, /* i/o: Noise fill gains / Quant. nf gains */ - float *noise_level, /* o : Quantized noise level */ - const float *pe_gains, /* i : Peak gains */ - const float *coefs, /* i : spectrum coefficients */ - float *coefs_out /* o : encoded spectrum coefficients */ -) -{ - int16_t bin_th, q, j, i; - int16_t nf_cnt; - int16_t q_noise_level_idx[HVQ_BWE_NOISE_BANDS]; - float q_noise_level[HVQ_BWE_NOISE_BANDS]; - float d, nf, nf_mean, pe, pe_mean, nfpe; - int16_t bits_used; - float lb_nfpe; - - bits_used = 0; - - bin_th = HVQ_THRES_BIN_32k; - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - bin_th = HVQ_THRES_BIN_24k; - } - - nf = 800; - pe = 800; - q = bin_th; - - /* Find HB noise level */ - for ( i = 0; i < HVQ_BWE_NOISE_BANDS; i++ ) - { - nf_cnt = 0; - nf_mean = EPSILON; - pe_mean = EPSILON; - for ( j = 0; j < ( L_FRAME32k - bin_th ) / HVQ_BWE_NOISE_BANDS; j++, q++ ) - { - d = (float) fabs( coefs[q] ); - - if ( d > pe ) - { - pe = HVQ_BWE_WEIGHT2 * pe + ( 1 - HVQ_BWE_WEIGHT2 ) * d; - } - else - { - pe = HVQ_BWE_WEIGHT1 * pe + ( 1 - HVQ_BWE_WEIGHT1 ) * d; - if ( d > nf ) - { - nf = HVQ_BWE_WEIGHT1 * nf + ( 1 - HVQ_BWE_WEIGHT1 ) * d; - } - else - { - nf = HVQ_BWE_WEIGHT2 * nf + ( 1 - HVQ_BWE_WEIGHT2 ) * d; - } - nf_mean += nf; - nf_cnt++; - } - - pe_mean += pe; - } - - if ( nf_cnt > 0 ) - { - nf_mean /= nf_cnt; - } - pe_mean /= ( L_FRAME32k - bin_th ) / HVQ_BWE_NOISE_BANDS; - - nfpe = HVQ_NFPE_FACTOR * nf_mean / pe_mean; - noise_level[i] = nfpe * nfpe * nfpe; - - q_noise_level_idx[i] = usquant( noise_level[i], &q_noise_level[i], 0.0f, 0.1f, 4 ); - push_indice( hBstr, IND_HVQ_BWE_NL, q_noise_level_idx[i], 2 ); - bits_used += 2; - - noise_level[i] = q_noise_level[i]; - } - - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - lb_nfpe = HVQ_LB_NFPE_FACTOR * nf_gains[i] / pe_gains[i]; - lb_nfpe = lb_nfpe * lb_nfpe * lb_nfpe; - - if ( lb_nfpe > 0.5f ) - { - lb_nfpe = 0.5f; - } - nf_gains[i] *= 2 * lb_nfpe; - } - - bits_used += peak_vq_enc( hBstr, bwidth, coefs, coefs_out, core_brate, hvq_bits - bits_used, Npeaks, ynrm, R, peaks, &nf_gains[0] ); - - - return bits_used; -} -#endif diff --git a/lib_enc/hvq_enc_fx.c b/lib_enc/hvq_enc_fx.c index f0852cda6..aae437c01 100644 --- a/lib_enc/hvq_enc_fx.c +++ b/lib_enc/hvq_enc_fx.c @@ -21,7 +21,6 @@ static Word16 quant_lc( const Word16, Word16 * ); * * Harmonic VQ encoder *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 hvq_enc_ivas_fx( /*o : Consumed bits */ Encoder_State *st_fx, /*i/o: encoder state structure */ const Word32 core_brate, /*i : Total bit rate */ @@ -215,7 +214,6 @@ Word16 hvq_enc_ivas_fx( /*o : Consumed bits return bits_used; } -#endif Word16 hvq_enc_fx( /*o : Consumed bits */ Encoder_State *st_fx, /*i/o: encoder state structure */ const Word32 core_brate, /*i : Total bit rate */ diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index bbfc7b771..4fa98f20b 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -43,10 +43,8 @@ #include "cnst.h" #include "stat_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED #define INV_Log2_10_Q15 9864 /*1/log2(10) in Q15*/ @@ -57,7 +55,6 @@ * * write single bit to stream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void IGF_write_bit( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 *bitCount, /* i/o: bit counter */ @@ -74,31 +71,12 @@ static void IGF_write_bit( return; } -#else -static void IGF_write_bit( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *bitCount, /* i/o: bit counter */ - const int16_t value /* i : value */ -) -{ - if ( hBstr ) - { - push_next_indice( hBstr, value, 1 ); - } - - ( *bitCount )++; - - return; -} - -#endif /*-------------------------------------------------------------------* * IGF_write_bits() * * write bits to stream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void IGF_write_bits( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 *bitCount, /* i/o: bit counter */ @@ -120,22 +98,6 @@ static void IGF_write_bits( return; } -#else -static void IGF_write_bits( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *bitCount, /* i/o: bit counter */ - const int16_t value, /* i/o: value */ - int16_t bits /* i : number of bits */ -) -{ - while ( bits-- ) - { - IGF_write_bit( hBstr, bitCount, ( ( value & ( 1 << bits ) ) == 0 ) ? 0 : 1 ); - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -145,7 +107,6 @@ static void IGF_write_bits( *-------------------------------------------------------------------*/ /*! r: crest factor */ -#ifdef IVAS_FLOAT_FIXED static Word16 IGF_getCrest_new_fx( const Word16 *logSpec, /* i : power spectrum */ const Word16 start, /* i : start subband index */ @@ -209,40 +170,6 @@ static Word16 IGF_getCrest_new_fx( move16(); return crest; } -#else -static float IGF_getCrest_new( - const int16_t *logSpec, /* i : power spectrum */ - const int16_t start, /* i : start subband index */ - const int16_t stop /* i : stop subband index */ -) -{ - int16_t i; - int16_t x; - int32_t x_eff = 0; - int16_t x_max = 0; - float crest = 1.f; - - for ( i = start; i < stop; i++ ) - { - x = logSpec[i]; - x_eff += x * x; - - if ( x > x_max ) - { - x_max = x; - } - } - - x_eff /= ( stop - start ); - - if ( x_eff > 0 && x_max > 0 ) - { - crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); - } - - return crest; -} -#endif /*-------------------------------------------------------------------* @@ -252,7 +179,6 @@ static float IGF_getCrest_new( *-------------------------------------------------------------------*/ /*! r: SFM value */ -#ifdef IVAS_FLOAT_FIXED static Word16 IGF_getSFM_new_fx( const Word32 *powerSpectrum, /* i : power spectrum */ const Word16 *logSpec, /* i : log of power spectrum */ @@ -306,45 +232,6 @@ static Word16 IGF_getSFM_new_fx( return sfm; } -#else -static float IGF_getSFM_new( - const float *powerSpectrum, /* i : power spectrum */ - const int16_t *logSpec, /* i : log of power spectrum */ - const int16_t start, /* i : start subband index */ - const int16_t stop /* i : stop subband index */ -) -{ - int16_t n; - int16_t i; - int16_t num; - float denom; - float numf; - float tmp; - float sfm; - - num = 0; - denom = 1.f; - sfm = 1.f; - - for ( i = start; i < stop; i++ ) - { - tmp = powerSpectrum[i]; - n = logSpec[i /*-start*/]; - num += n; - denom += tmp; - } - - numf = (float) num / (float) ( stop - start ); - denom /= (float) ( stop - start ); - - if ( denom != 0 ) - { - sfm = min( ( powf( 2.0f, numf + 0.5f ) / denom ), 1.0f ); - } - - return sfm; -} -#endif /*-------------------------------------------------------------------* @@ -354,43 +241,6 @@ static float IGF_getSFM_new( *-------------------------------------------------------------------*/ /*! r: spectral tilt value */ -#ifndef IVAS_FLOAT_FIXED -static float IGF_getTilt( - const float *powerSpectrum, /* i : energies */ - const int16_t start, /* i : start subband index */ - const int16_t stop /* i : stop subband index */ -) -{ - int16_t i; - int16_t x; - int16_t width; - float y; - float mean_x, mean_y, mean_xy, mean_x2; - float slope; - - x = 1; - mean_x = mean_y = mean_xy = mean_x2 = 0.f; - - width = stop - start; - for ( i = start; i < stop; i++ ) - { - mean_x += x; - mean_x2 += x * x; - y = 20.f * log10f( max( 1.f, powerSpectrum[i] ) ); - mean_y += y; - mean_xy += y * x; - - x++; - } - mean_y /= width; - mean_x /= width; - mean_xy /= width; - mean_x2 /= width; - slope = ( mean_xy - mean_x * mean_y ) / ( mean_x2 - mean_x * mean_x ); - - return slope; -} -#endif /*-------------------------------------------------------------------* * IGF_getTNR() @@ -399,7 +249,6 @@ static float IGF_getTilt( *-------------------------------------------------------------------*/ /*! r: spectral tilt value */ -#ifdef IVAS_FLOAT_FIXED /* Returns value with exponent as 9 and Q as 22*/ static Word32 IGF_getTNR_fx( const Word32 *powerSpectrum, /* i : energies */ @@ -490,138 +339,6 @@ static Word32 IGF_getTNR_fx( return tonalToNoise; } -#else -static float IGF_getTNR( - const float *powerSpectrum, /* i : energies */ - const int16_t start, /* i : start subband index */ - const int16_t stop, /* i : stop subband index */ - const float adap /* i : SFB width adaptation */ -) -{ - int16_t i; - int16_t width; - float avg = 0.f; - float tonal = 0.f; - float noise = EPSILON; - float tonalToNoise; - float rootSpec[300]; - - set_f( rootSpec, 0, 300 ); - - width = stop - start; - for ( i = start; i < stop; i++ ) - { - rootSpec[i - start] = sqrtf( powerSpectrum[i] ); - avg += rootSpec[i - start]; - } - avg /= width; - - for ( i = start; i < stop; i++ ) - { - float normSpec = rootSpec[i - start] / avg; - if ( normSpec > 1 + adap ) - { - tonal += rootSpec[i - start]; - } - else if ( normSpec < 1 ) - { - noise += rootSpec[i - start]; - } - } - - tonalToNoise = 20.f * log10f( max( 1e-018f, tonal / noise ) ); - - return tonalToNoise; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGF_getCrest() - * - * crest factor calculation - *-------------------------------------------------------------------*/ - -/*! r: crest factor */ -static float IGF_getCrest_ivas( - const float *powerSpectrum, /* i : power spectrum */ - const int16_t start, /* i : start subband index */ - const int16_t stop /* i : stop subband index */ -) -{ - int16_t i; - int16_t x; - int32_t x_eff = 0; - int16_t x_max = 0; - float crest = 1.f; - - for ( i = start; i < stop; i++ ) - { - x = max( 0, (int16_t) ( logf( max( FLT_MIN, powerSpectrum[i] ) ) * INV_LOG_2 ) ); - x_eff += x * x; - - if ( x > x_max ) - { - x_max = x; - } - } - - x_eff /= ( stop - start ); - - if ( x_eff > 0 && x_max > 0 ) - { - crest = max( 1.f, (float) x_max / sqrtf( (float) x_eff ) ); - } - - return crest; -} - - -/*-------------------------------------------------------------------* - * IGF_getSFM() - * - * calculates spectral flatness measurement - *-------------------------------------------------------------------*/ - -/*! r: SFM value */ -static float IGF_getSFM_ivas( - const float *powerSpectrum, /* i : energies */ - const int16_t start, /* i : start subband index */ - const int16_t stop /* i : stop subband index */ -) -{ - int16_t n; - int16_t i; - int16_t num; - float denom; - float numf; - float tmp; - float sfm; - - num = 0; - denom = 1.f; - sfm = 1.f; - - for ( i = start; i < stop; i++ ) - { - tmp = powerSpectrum[i]; - n = max( 0, (int16_t) ( logf( max( FLT_MIN, tmp ) ) * INV_LOG_2 ) ); - num += n; - denom += tmp; - } - - numf = (float) num / (float) ( stop - start ); - denom /= (float) ( stop - start ); - - if ( denom != 0 ) - { - sfm = min( ( powf( 2.0f, numf + 0.5f ) / denom ), 1.0f ); - } - - return sfm; -} -#endif /*-------------------------------------------------------------------* @@ -630,236 +347,6 @@ static float IGF_getSFM_ivas( * envelope estimation *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_CalculateEnvelope( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - const float *pMDCTSpectrum, /* i : MDCT spectrum */ - const float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ - const int16_t igfGridIdx, /* i : IGF grid index */ - const int16_t isTransient, /* i : flag indicating if transient is detected */ - const int16_t last_core_acelp, /* i : indicator if last frame was ACELP core */ - const int16_t element_mode, /* i : IVAS element_mode */ - const float att /* i : attenuation */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t *swb_offset; - int16_t sfb; /* this is the actual scalefactor band */ - int16_t width; /* this is width in subbands of the actual scalefactor band */ - int16_t tile_idx; - int16_t strt_cpy; - float gain; /* the gain which has to be applied to the source tile to get the destination energy */ - int16_t sb; - float sfbEnergyR; - float sfbEnergyC; /* the energy of the destination region of the tile */ - float sfbEnergyTileR; - float sfbEnergyTileC; /* the energy of the destination region of the tile */ - int16_t tmp; - float tmp_tb; - float tmp_sb; - int16_t sfbCnt; - - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; - swb_offset = hGrid->swb_offset; - - if ( element_mode > EVS_MONO ) - { - if ( igfGridIdx != IGF_GRID_LB_NORM ) - { - for ( sfbCnt = 0; sfbCnt < hGrid->sfbWrap[hGrid->nTiles] - hGrid->sfbWrap[0]; sfbCnt++ ) - { - /* reset filter */ - hPrivateData->prevSFM_FIR_SFB_TB[sfbCnt] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfbCnt] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfbCnt] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfbCnt] = 0.f; - hPrivateData->prevDampingFactor_IIR[sfbCnt] = -1.f; - hPrivateData->dampingFactorSmoothing[sfbCnt] = 2; - } - } - } - - if ( pPowerSpectrum ) - { - for ( sb = hGrid->sbWrap[0]; sb < swb_offset[hGrid->sfbWrap[hGrid->nTiles]]; sb++ ) - { - hPrivateData->logSpec[sb] = max( 0, (int16_t) ( log( max( FLT_MIN, pPowerSpectrum[sb] ) ) * INV_LOG_2 ) ); - } - } - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - strt_cpy = hGrid->sbWrap[tile_idx]; - - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - width = swb_offset[sfb + 1] - swb_offset[sfb]; - - sfbEnergyTileR = EPSILON; - sfbEnergyTileC = EPSILON; - sfbEnergyC = EPSILON; - - if ( pPowerSpectrum ) - { - tmp = strt_cpy; - for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) - { - sfbEnergyC += pPowerSpectrum[sb]; - sfbEnergyTileR += pMDCTSpectrum[strt_cpy] * pMDCTSpectrum[strt_cpy]; - sfbEnergyTileC += pPowerSpectrum[strt_cpy]; - - strt_cpy++; - } - - sfbEnergyTileR /= width; - gain = (float) ( sfbEnergyTileR * ( sfbEnergyC / sfbEnergyTileC ) ); - - if ( element_mode > EVS_MONO ) - { - if ( !isTransient ) - { - float diffSFM; - float shiftedSFM = 0.f; - - tmp_tb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb], swb_offset[sfb + 1] ); - tmp_sb = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, tmp, strt_cpy ) / IGF_getCrest_new( hPrivateData->logSpec, tmp, strt_cpy ); - - if ( last_core_acelp || hPrivateData->wasTransient ) - { - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = hPrivateData->prevSFM_IIR_SFB_TB[sfb] = tmp_tb; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = hPrivateData->prevSFM_IIR_SFB_SB[sfb] = tmp_sb; - } - - hPrivateData->SFM_tb[sfb] = tmp_tb + hPrivateData->prevSFM_FIR_SFB_TB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_TB[sfb]; - hPrivateData->SFM_tb[sfb] = min( 2.7f, hPrivateData->SFM_tb[sfb] ); - hPrivateData->SFM_sb[sfb] = tmp_sb + hPrivateData->prevSFM_FIR_SFB_SB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_SB[sfb]; - hPrivateData->SFM_sb[sfb] = min( 2.7f, hPrivateData->SFM_sb[sfb] ); - - diffSFM = hPrivateData->SFM_sb[sfb] - hPrivateData->SFM_tb[sfb]; - - if ( diffSFM > 0.f && hPrivateData->SFM_tb[sfb] < 0.1f ) /* check whether target SFB is more tonal than source SFB */ - { - float currDampingFactor, dampingFactor; - float slope, threshold; - float tonalToNoise, adap; - float alpha; - - /* calculate spectral tilt to detect sudden drops (or increases) in energy in the current SFB */ - slope = IGF_getTilt( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ); - - /* determine whether strong tilt is due to a step in the spectrum (e.g. band limitation, no damping) - or a tonal component close the band border (apply damping) by calculating SFM for a shift of 1/2 SFB width*/ - threshold = 60.f / ( (float) width ); - if ( slope < -threshold ) - { - int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); - } - else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) - { - int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_new( pPowerSpectrum, hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_new( hPrivateData->logSpec, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); - } - - if ( shiftedSFM > 0.04f ) - { - currDampingFactor = 1.f; - } - else - { - alpha = min( 320.f / (float) swb_offset[sfb + 1], 1.25f ); - currDampingFactor = expf( 1.25f * alpha * logf( hPrivateData->SFM_tb[sfb] / hPrivateData->SFM_sb[sfb] ) ); - - - /* calculate tonal-to-noise ratio and reduce damping for low values*/ - adap = (float) width / 40.f; - tonalToNoise = IGF_getTNR( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1], adap ); - if ( ( tonalToNoise - ( 10 + adap ) ) < 0 ) - { - currDampingFactor += 0.03f * ( ( 10 + adap ) - tonalToNoise ); - } - } - - if ( last_core_acelp || hPrivateData->wasTransient || hPrivateData->prevDampingFactor_IIR[sfb] == -1 ) - { - hPrivateData->prevDampingFactor_IIR[sfb] = max( currDampingFactor, 0.1f ); - } - if ( last_core_acelp ) - { - hPrivateData->dampingFactorSmoothing[sfb] = 2; - } - - dampingFactor = ( currDampingFactor + hPrivateData->prevDampingFactor_IIR[sfb] ) / 2; - - gain *= min( dampingFactor + hPrivateData->dampingFactorSmoothing[sfb] * 0.1f, 1 ); - - hPrivateData->prevDampingFactor_IIR[sfb] = dampingFactor; - if ( hPrivateData->dampingFactorSmoothing[sfb] > 0 ) - { - hPrivateData->dampingFactorSmoothing[sfb]--; - } - } - else - { - hPrivateData->prevDampingFactor_IIR[sfb] = -1; - hPrivateData->dampingFactorSmoothing[sfb] = 1; - } - - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = tmp_tb; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = hPrivateData->SFM_tb[sfb]; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = tmp_sb; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = hPrivateData->SFM_sb[sfb]; - } - else - { - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevDampingFactor_IIR[sfb] = -1.f; - hPrivateData->dampingFactorSmoothing[sfb] = 2; - } - } - } - else - { - sfbEnergyR = EPSILON + sum2_f( pMDCTSpectrum + swb_offset[sfb], width ) / width; - gain = (float) ( sfbEnergyR ); - - if ( element_mode > EVS_MONO ) - { - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevDampingFactor_IIR[sfb] = -1.f; - hPrivateData->dampingFactorSmoothing[sfb] = 2; - } - } - - gain *= att; - - gain = 0.5f + (float) ( 2.885390081777927f * logf( gain ) + 16.f ); - if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) - { - gain += 0.25f; /* better preservation of original HF band energy */ - } - if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_64000_CPE ) ) - { - gain += 0.125f; - } - gain = min( gain, 91.f ); /* 13+15+63, see arithcode encode residual */ - gain = max( gain, 0.f ); - - hPrivateData->igfScfQuantized[sfb] = (int16_t) ( gain ); - } - } - - return; -} -#else static void IGF_CalculateEnvelope_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ Word32 *pMDCTSpectrum_fx, /* i : MDCT spectrum */ @@ -1414,7 +901,6 @@ static void IGF_CalculateEnvelope_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* * IGF_CalculateStereoEnvelope_fx() @@ -1422,7 +908,6 @@ static void IGF_CalculateEnvelope_ivas_fx( * envelope estimation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void IGF_CalculateStereoEnvelope_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ const Word32 *pMDCTSpectrum_fx, /* i : MDCT spectrum */ @@ -1946,273 +1431,28 @@ static void IGF_CalculateStereoEnvelope_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED + + /*-------------------------------------------------------------------* - * IGF_CalculateStereoEnvelope() + * IGF_WriteEnvelope() * - * envelope estimation + * writes IGF SCF values *-------------------------------------------------------------------*/ -static void IGF_CalculateStereoEnvelope( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - const float *pMDCTSpectrum, /* i : MDCT spectrum */ - const float *pMDCTSpectrumMsInv, /* i : MDCT spectrum */ - const float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ - const float *pPowerSpectrumMsInv, /* i : inverse power spectrum */ - const int16_t igfGridIdx, /* i : IGF grid index */ - const int16_t coreMsMask[N_MAX], /* i : line wise ms Mask */ - const int16_t isTransient, /* i : flag indicating if transient is detected */ - const int16_t last_core_acelp /* i : indicator if last frame was ACELP core */ +/*! r: number of bits writen */ +static Word16 IGF_WriteEnvelope( + const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + Word16 *pBitOffset, /* i : ptr to bitOffset counter */ + const Word16 igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ + const Word16 isIndepFlag, /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ + Word16 *igfAllZero /* i : returns 1 if all IGF scfs are zero, else 0 */ ) { IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; H_IGF_GRID hGrid; - int16_t *swb_offset; - int16_t sfb; /* this is the actual scalefactor band */ - int16_t width; /* this is width in subbands of the actual scalefactor band */ - int16_t tile_idx; - int16_t strt_cpy; - float gain; /* the gain which has to be applied to the source tile to get the destination energy */ - int16_t sb; - float sfbEnergyR; - float sfbEnergyC; /* the energy of the destination region of the tile */ - float sfbEnergyTileR; - float sfbEnergyTileC; /* the energy of the destination region of the tile */ - int16_t tmp, x, y; - float mean_x, mean_y, mean_xy, mean_x2; - float slope; - float tmp_tb; - float tmp_sb; - int16_t sfbCnt; - float tileSrcSpec[MAX_IGF_SFB_LEN]; - - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; - swb_offset = hGrid->swb_offset; - - if ( igfGridIdx != IGF_GRID_LB_NORM ) - { - for ( sfbCnt = 0; sfbCnt < hGrid->sfbWrap[hGrid->nTiles] - hGrid->sfbWrap[0]; sfbCnt++ ) - { - /* reset filter */ - hPrivateData->prevSFM_FIR_SFB_TB[sfbCnt] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfbCnt] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfbCnt] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfbCnt] = 0.f; - } - } - - if ( pPowerSpectrum ) - { - for ( sb = hGrid->sbWrap[0]; sb < swb_offset[hGrid->sfbWrap[hGrid->nTiles]]; sb++ ) - { - hPrivateData->logSpec[sb] = max( 0, (int16_t) ( logf( max( FLT_MIN, pPowerSpectrum[sb] ) ) * INV_LOG_2 ) ); - } - } - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - strt_cpy = hGrid->sbWrap[tile_idx]; - - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - width = swb_offset[sfb + 1] - swb_offset[sfb]; - sfbEnergyTileR = EPSILON; - sfbEnergyTileC = EPSILON; - sfbEnergyC = EPSILON; - - if ( pPowerSpectrum ) - { - tmp = strt_cpy; - - for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) - { - if ( coreMsMask[sb] != coreMsMask[strt_cpy] ) - { - sfbEnergyC += pPowerSpectrum[sb]; - sfbEnergyTileR += pMDCTSpectrumMsInv[strt_cpy] * pMDCTSpectrumMsInv[strt_cpy]; - sfbEnergyTileC += pPowerSpectrumMsInv[strt_cpy]; - tileSrcSpec[strt_cpy - tmp] = pPowerSpectrumMsInv[strt_cpy]; - } - else - { - sfbEnergyC += pPowerSpectrum[sb]; - sfbEnergyTileR += pMDCTSpectrum[strt_cpy] * pMDCTSpectrum[strt_cpy]; - sfbEnergyTileC += pPowerSpectrum[strt_cpy]; - tileSrcSpec[strt_cpy - tmp] = pPowerSpectrum[strt_cpy]; - } - strt_cpy++; - } - - sfbEnergyTileR /= width; - gain = (float) ( sfbEnergyTileR * ( sfbEnergyC / sfbEnergyTileC ) ); - - if ( !isTransient ) - { - float diffSFM; - float shiftedSFM = 0.f; - - tmp_tb = IGF_getSFM_ivas( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ) / IGF_getCrest_ivas( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1] ); - tmp_sb = IGF_getSFM_ivas( tileSrcSpec, 0, strt_cpy - tmp ) / IGF_getCrest_ivas( tileSrcSpec, 0, strt_cpy - tmp ); - - if ( last_core_acelp || hPrivateData->wasTransient ) - { - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = hPrivateData->prevSFM_IIR_SFB_TB[sfb] = tmp_tb; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = hPrivateData->prevSFM_IIR_SFB_SB[sfb] = tmp_sb; - } - - hPrivateData->SFM_tb[sfb] = tmp_tb + hPrivateData->prevSFM_FIR_SFB_TB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_TB[sfb]; - hPrivateData->SFM_tb[sfb] = min( 2.7f, hPrivateData->SFM_tb[sfb] ); - hPrivateData->SFM_sb[sfb] = tmp_sb + hPrivateData->prevSFM_FIR_SFB_SB[sfb] + 0.5f * hPrivateData->prevSFM_IIR_SFB_SB[sfb]; - hPrivateData->SFM_sb[sfb] = min( 2.7f, hPrivateData->SFM_sb[sfb] ); - - diffSFM = hPrivateData->SFM_sb[sfb] - hPrivateData->SFM_tb[sfb]; - - if ( diffSFM > 0.f && hPrivateData->SFM_tb[sfb] < 0.1f ) /* check whether target SFB is more tonal than source SFB */ - { - float currDampingFactor, dampingFactor, threshold, alpha; - - /* calculate spectral tilt to detect sudden drops (or increases) in energy in the current SFB */ - x = 1; - mean_x = mean_y = mean_xy = mean_x2 = 0; - for ( sb = swb_offset[sfb]; sb < swb_offset[sfb + 1]; sb++ ) - { - mean_x += x; - mean_x2 += x * x; - y = 20 * (int16_t) log10f( max( 1e-018f, pPowerSpectrum[sb] ) ); - mean_y += y; - mean_xy += y * x; - - x++; - } - mean_y /= width; - mean_x /= width; - mean_xy /= width; - mean_x2 /= width; - slope = ( mean_xy - mean_x * mean_y ) / ( mean_x2 - mean_x * mean_x ); - - /* determine whether strong tilt is due to a step in the spectrum (e.g. band limitation, no damping) - or a tonal component close the band border (apply damping) by calculating SFM for a shift of 1/2 SFB width*/ - threshold = 60.f / ( (float) width ); - if ( slope < -threshold ) - { - int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_ivas( pPowerSpectrum, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ) / IGF_getCrest_ivas( pPowerSpectrum, swb_offset[sfb] - shift, swb_offset[sfb + 1] - shift ); - } - else if ( ( slope > 1.f * threshold ) && ( sfb != hGrid->sfbWrap[hGrid->nTiles] - 1 ) ) - { - int16_t shift = width >> 1; - shiftedSFM = IGF_getSFM_ivas( pPowerSpectrum, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ) / IGF_getCrest_ivas( pPowerSpectrum, swb_offset[sfb] + shift, swb_offset[sfb + 1] + shift ); - } - - alpha = min( 320.f / (float) swb_offset[sfb + 1], 1.25f ); - currDampingFactor = expf( alpha * logf( hPrivateData->SFM_tb[sfb] / hPrivateData->SFM_sb[sfb] ) ); - - if ( shiftedSFM > 0.04f ) - { - currDampingFactor = 1.f; - } - - if ( last_core_acelp || hPrivateData->wasTransient || hPrivateData->prevDampingFactor_IIR[sfb] == -1 ) - { - hPrivateData->prevDampingFactor_IIR[sfb] = max( currDampingFactor, 0.1f ); - } - - { - float tonalToNoise; - float adap = ( (float) width ) / 30.f; - tonalToNoise = IGF_getTNR( pPowerSpectrum, swb_offset[sfb], swb_offset[sfb + 1], adap ); - if ( ( tonalToNoise - ( 10 + adap ) ) < 0 ) - { - currDampingFactor += 0.1f * ( ( 10 + adap ) - tonalToNoise ); - } - } - - dampingFactor = ( currDampingFactor + hPrivateData->prevDampingFactor_IIR[sfb] ) / 2; - dampingFactor = max( dampingFactor, hPrivateData->prevDampingFactor_IIR[sfb] / 2 ); - - gain *= min( dampingFactor + hPrivateData->dampingFactorSmoothing[sfb] * 0.1f, 1 ); - - hPrivateData->prevDampingFactor_IIR[sfb] = dampingFactor; - if ( hPrivateData->dampingFactorSmoothing[sfb] > 0 ) - { - hPrivateData->dampingFactorSmoothing[sfb]--; - } - } - else - { - hPrivateData->prevDampingFactor_IIR[sfb] = -1; - hPrivateData->dampingFactorSmoothing[sfb] = 1; - } - - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = tmp_tb; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = hPrivateData->SFM_tb[sfb]; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = tmp_sb; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = hPrivateData->SFM_sb[sfb]; - } - else - { - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; - - hPrivateData->dampingFactorSmoothing[sfb] = 2; - } - } - else - { - sfbEnergyR = EPSILON + sum2_f( pMDCTSpectrum + swb_offset[sfb], width ) / width; - gain = (float) ( sfbEnergyR ); - - hPrivateData->prevSFM_FIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_TB[sfb] = 0.f; - hPrivateData->prevSFM_FIR_SFB_SB[sfb] = 0.f; - hPrivateData->prevSFM_IIR_SFB_SB[sfb] = 0.f; - } - - gain = 0.5f + (float) ( 2.885390081777927f * logf( gain ) + 16.f ); - if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) - { - gain += 0.25f; /* better preservation of original HF band energy */ - } - if ( !isTransient && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_64000_CPE ) ) - { - gain += 0.125f; - } - gain = min( gain, 91.f ); /* 13+15+63, see arithcode encode residual */ - gain = max( gain, 0.f ); - - hPrivateData->igfScfQuantized[sfb] = (int16_t) ( gain ); - } - } - - return; -} -#endif - - -/*-------------------------------------------------------------------* - * IGF_WriteEnvelope() - * - * writes IGF SCF values - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: number of bits writen */ -static Word16 IGF_WriteEnvelope( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - Word16 *pBitOffset, /* i : ptr to bitOffset counter */ - const Word16 igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const Word16 isIndepFlag, /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ - Word16 *igfAllZero /* i : returns 1 if all IGF scfs are zero, else 0 */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - Word16 sfb; - Word16 totBitCount; - Word16 startBitCount; + Word16 sfb; + Word16 totBitCount; + Word16 startBitCount; startBitCount = *pBitOffset; totBitCount = 0; @@ -2270,209 +1510,6 @@ static Word16 IGF_WriteEnvelope( return totBitCount; } -#else // IVAS_FLOAT_FIXED - -/*! r: number of bits writen */ -static int16_t IGF_WriteEnvelope( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *pBitOffset, /* i : ptr to bitOffset counter */ - const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const int16_t isIndepFlag, /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ - int16_t *igfAllZero /* i : returns 1 if all IGF scfs are zero, else 0 */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t totBitCount; - int16_t startBitCount; - int16_t sfb; - - startBitCount = *pBitOffset; - totBitCount = 0; - *igfAllZero = 1; - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - - for ( sfb = hGrid->startSfb; sfb < hGrid->stopSfb; sfb++ ) - { - if ( hPrivateData->igfScfQuantized[sfb] != 0 ) - { - *igfAllZero = 0; - break; - } - } - - if ( *igfAllZero ) - { - IGF_write_bit( hBstr, pBitOffset, 1 ); - - if ( hBstr == NULL ) - { - IGFSCFEncoderSaveContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); - } - - IGFSCFEncoderReset( &hPrivateData->hIGFSCFArithEnc ); - - if ( hBstr == NULL ) - { - IGFSCFEncoderRestoreContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); - } - } - else - { - IGF_write_bit( hBstr, pBitOffset, 0 ); - - if ( hBstr == NULL ) - { - IGFSCFEncoderSaveContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); - } - - *pBitOffset = IGFSCFEncoderEncode( &hPrivateData->hIGFSCFArithEnc, hBstr, *pBitOffset, &hPrivateData->igfScfQuantized[hGrid->startSfb], igfGridIdx, isIndepFlag ); - - if ( hBstr == NULL ) - { - IGFSCFEncoderRestoreContextState( &hPrivateData->hIGFSCFArithEnc, igfGridIdx ); - } - } - totBitCount = *pBitOffset - startBitCount; - - return totBitCount; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IGF_ErodeSpectrum() - * - * identifies significant spectral content - *-------------------------------------------------------------------*/ - -/*! r: highPassEnergy */ -static float IGF_ErodeSpectrum_ivas( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - float *pSpectrum, /* i/o: MDCT spectrum */ - float *pPowerSpectrum, /* i/o: power spectrum */ - const int16_t igfGridIdx, /* i : IGF grid index */ - const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t i; - int16_t igfBgn; - int16_t igfEnd; - float highPassEner; - float lastLine; - float nextLine; - float factor; - int16_t *igfScaleF; - int16_t startSfb; - int16_t stopSfb; - int16_t *swb_offset; - int16_t tmp; - int16_t sfb; - int16_t line; - - highPassEner = 0.f; - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; - igfBgn = hGrid->startLine; - igfEnd = hGrid->stopLine; - startSfb = hGrid->startSfb; - stopSfb = hGrid->stopSfb; - swb_offset = hGrid->swb_offset; - igfScaleF = hPrivateData->igfScfQuantized; - - if ( pPowerSpectrum == NULL ) - { - for ( i = igfBgn; i < hGrid->infoGranuleLen; i++ ) - { - pSpectrum[i] = 0.f; - } - return 0; - } - - if ( igfBgn > 0 ) - { - for ( i = 0; i < igfBgn; i++ ) - { - highPassEner += (float) i * pPowerSpectrum[i]; - } - - if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_9600 || - hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_RF_SWB_13200 || - hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_13200 || - hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_16400_CPE ) - { - factor = 1.f; - } - else if ( mct_on && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_64000_CPE ) ) - { - factor = 0.7f; - } - else - { - factor = 2.f; - } - highPassEner /= igfBgn * factor; /* for 9.6kbs use 1.f */ - lastLine = pSpectrum[i - 1]; - nextLine = ( pPowerSpectrum[i - 1] < highPassEner ) ? 0.0f : pSpectrum[i]; - - for ( /*i*/; i < igfEnd - 1; i++ ) - { - if ( pPowerSpectrum[i] < highPassEner ) - { - lastLine = pSpectrum[i]; - pSpectrum[i] = nextLine; - nextLine = 0.0f; - } - else - { - pSpectrum[i - 1] = lastLine; - lastLine = pSpectrum[i]; - nextLine = pSpectrum[i + 1]; - } - } - - /* i == igfEnd - 1 */ - if ( pPowerSpectrum[i] < highPassEner ) - { - pSpectrum[i] = 0.f; - } - } - - /* delete spectrum above igfEnd: */ - for ( i = igfEnd; i < hGrid->infoGranuleLen; i++ ) - { - pSpectrum[i] = 0.f; - pPowerSpectrum[i] = 0.f; - } - - if ( NULL != pPowerSpectrum ) - { - for ( sfb = startSfb; sfb < stopSfb; sfb++ ) - { - tmp = 0; - for ( line = swb_offset[sfb]; line < swb_offset[sfb + 1]; line++ ) - { - if ( pSpectrum[line] != 0.f ) - { - tmp++; - } - } - - if ( tmp && igfScaleF[sfb] ) - { - igfScaleF[sfb]--; - } - } - } - - return highPassEner; -} -#endif /*-------------------------------------------------------------------* @@ -2480,7 +1517,6 @@ static float IGF_ErodeSpectrum_ivas( * * calculates the IGF whitening levels by SFM and crest *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void IGF_Whitening_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : | instance handle of IGF Encoder */ Word32 *powerSpectrum, /* i : Q31 | MDCT/MDST power spectrum */ @@ -2926,430 +1962,49 @@ static void IGF_Whitening_ivas_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void IGF_Whitening( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : | instance handle of IGF Encoder */ - float *powerSpectrum, /* i : Q31 | MDCT/MDST power spectrum */ - const int16_t igfGridIdx, /* i : Q0 | IGF grid index */ - const int16_t isTransient, /* i : Q0 | flag indicating if transient is detected */ - const int16_t last_core_acelp, /* i : Q0 | indicator if last frame was ACELP core */ - const int16_t isTNSActive, /* i : Q0 | indicator if TNS is active */ - const int16_t sp_aud_decision0, /* i : Q0 | first stage classifier decision */ - const int32_t brate, /* i : Q0 | bitrate */ - const int16_t element_mode /* i : Q0 | element mode */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t p; - float tmp; - float SFM_src; - float SFM_tar; - int16_t num_Tiles; - float SFM; - - SFM = -1.f; - - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[(int16_t) igfGridIdx]; - - if ( igfGridIdx != IGF_GRID_LB_NORM ) - { - for ( p = 0; p < hGrid->nTiles; p++ ) - { - /* reset filter */ - hPrivateData->prevSFM_FIR_flt[p] = 0.f; - hPrivateData->prevSFM_IIR_flt[p] = 0.f; - - /* preset values: */ - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; - } - } - - for ( p = 0; p < IGF_MAX_TILES; p++ ) - { - /* update prev data: */ - hPrivateData->igfPrevWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p]; - /* preset values: */ - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; - } - - if ( !( isTransient || hPrivateData->wasTransient ) ) - { - if ( powerSpectrum ) - { - for ( p = 0; p < hGrid->nTiles; p++ ) - { - int16_t sb; - - if ( isTNSActive ) - { - for ( sb = hGrid->tile[p]; sb < hGrid->tile[p + 1]; sb++ ) - { - hPrivateData->logSpec[sb] = max( 0, (int16_t) ( logf( max( FLT_MIN, powerSpectrum[sb] ) ) * INV_LOG_2 ) ); - } - } - - /* if current tile contains only a single SFB, reuse already computed SFM values */ - if ( element_mode > EVS_MONO && ( hGrid->sfbWrap[p + 1] - hGrid->sfbWrap[p] ) == 1 ) - { - tmp = hPrivateData->SFM_tb[p]; - } - else - { - tmp = IGF_getSFM_new( powerSpectrum, hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ) / IGF_getCrest_new( hPrivateData->logSpec, hGrid->tile[p], hGrid->tile[p + 1] ); - } - - if ( last_core_acelp || hPrivateData->wasTransient ) - { - hPrivateData->prevSFM_FIR_flt[p] = hPrivateData->prevSFM_IIR_flt[p] = tmp; - } - - if ( brate <= IVAS_48k && element_mode == IVAS_CPE_MDCT ) - { - num_Tiles = 0; - SFM_src = 0.f; - SFM_tar = 0.f; - - for ( sb = hGrid->sfbWrap[p]; sb < hGrid->sfbWrap[p + 1]; sb++ ) - { - num_Tiles++; - SFM_src += hPrivateData->SFM_sb[sb]; - SFM_tar += hPrivateData->SFM_tb[sb]; - } - - /* compute the average */ - SFM_src /= num_Tiles; - SFM_tar /= num_Tiles; - - if ( ( p > 0 ) && ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) ) - { - if ( ( p == 1 ) && ( abs( hPrivateData->igfCurrWhiteningLevel[0] - hPrivateData->igfCurrWhiteningLevel[1] ) == 2 ) ) /* OFF vs. STRONG */ - { - hPrivateData->igfCurrWhiteningLevel[0] = IGF_WHITENING_MID; - } - hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p - 1]; - } - else if ( sp_aud_decision0 ) - { - /* Music */ - /* whitening Off: when tonality of target is more than source or tonality of target is close to that of source */ - if ( ( SFM_tar <= SFM_src ) || ( SFM_tar <= ( SFM_src + 0.5f ) ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; - } - - /* whitening mid: */ - if ( ( SFM_tar > ( SFM_src + 0.5f ) ) && ( SFM_tar <= ( SFM_src + 1.25f ) ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; - } - - /* whitening strong */ - if ( SFM_tar > ( SFM_src + 1.25f ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; - } - } - else - { - /* Speech */ - /* whitening Off: when tonality of target is more than source or tonality of target is close to that of source */ - if ( ( SFM_tar <= SFM_src ) || ( SFM_tar <= ( SFM_src + 0.1f ) ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; - } - - /* whitening mid: */ - if ( ( SFM_tar > ( SFM_src + 0.1f ) ) && ( SFM_tar <= ( SFM_src + 0.5f ) ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; - } - - /* whitening strong */ - if ( SFM_tar > ( SFM_src + 0.5f ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; - } - } - - SFM = SFM_tar; - } - else - { - if ( element_mode > EVS_MONO && ( hGrid->sfbWrap[p + 1] - hGrid->sfbWrap[p] ) == 1 ) - { - SFM = tmp; - } - else - { - SFM = tmp + hPrivateData->prevSFM_FIR_flt[p] + 0.5f * hPrivateData->prevSFM_IIR_flt[p]; - SFM = min( 2.7f, SFM ); - } - - hPrivateData->prevSFM_FIR_flt[p] = tmp; - hPrivateData->prevSFM_IIR_flt[p] = SFM; - - if ( SFM > hGrid->whiteningThreshold_flt[1][p] ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_STRONG; - } - else if ( SFM > hGrid->whiteningThreshold_flt[0][p] ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; - } - else - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_OFF; - } - } - - if ( element_mode > EVS_MONO ) - { - if ( last_core_acelp ) /* reset */ - { - set_f( hPrivateData->igfPastSFM[p], -1.f, IGF_PAST_SFM_LEN ); - hPrivateData->igfWhiteningHangoverCnt[p] = 2; - } - else - { - /* check whether change in whitening level should be allowed or not (if SFM is inside a certain margin around thresholds) */ - if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] && - ( ( SFM > hGrid->whiteningThreshold_flt[0][p] - 0.15f && SFM < hGrid->whiteningThreshold_flt[0][p] + 0.15f ) || - ( SFM > hGrid->whiteningThreshold_flt[1][p] - 0.15f && SFM < hGrid->whiteningThreshold_flt[1][p] + 0.15f ) ) ) - { - float mean_past_SFM = 0.f; - int16_t countable = 0; - int16_t i; - - /* compute mean of last (available) SFM values */ - for ( i = 0; i < IGF_PAST_SFM_LEN; i++ ) - { - if ( hPrivateData->igfPastSFM[p][i] >= 0.f ) - { - mean_past_SFM += hPrivateData->igfPastSFM[p][i]; - countable++; - } - } - if ( countable ) - { - mean_past_SFM /= countable; - - /* deny change in whitening level for small deviations from mean SFM */ - if ( fabs( SFM - mean_past_SFM ) < 0.2f ) - { - hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfPrevWhiteningLevel[p]; - } - } - } - } - - hPrivateData->igfPastSFM[p][hPrivateData->igfPastSFM_pos] = SFM; - } - } - - switch ( hPrivateData->igfInfo.bitRateIndex ) - { - case IGF_BITRATE_WB_9600: - case IGF_BITRATE_RF_WB_13200: - case IGF_BITRATE_WB_13200_CPE: - case IGF_BITRATE_WB_16400_CPE: - case IGF_BITRATE_RF_SWB_13200: - case IGF_BITRATE_SWB_9600: - case IGF_BITRATE_SWB_13200_CPE: - case IGF_BITRATE_SWB_16400: - case IGF_BITRATE_SWB_24400: - case IGF_BITRATE_SWB_24400_CPE: - case IGF_BITRATE_SWB_32000_CPE: - case IGF_BITRATE_SWB_32000: - case IGF_BITRATE_FB_16400: - case IGF_BITRATE_FB_24400: - case IGF_BITRATE_FB_24400_CPE: - case IGF_BITRATE_FB_32000_CPE: - case IGF_BITRATE_FB_32000: - hPrivateData->igfCurrWhiteningLevel[hGrid->nTiles - 1] = hPrivateData->igfCurrWhiteningLevel[hGrid->nTiles - 2]; - break; - default: - break; - } - } - else - { - for ( p = 0; p < hGrid->nTiles; p++ ) - { - hPrivateData->igfCurrWhiteningLevel[p] = IGF_WHITENING_MID; - } - } - } - else - { - /* reset filter */ - for ( p = 0; p < IGF_MAX_TILES; p++ ) - { - hPrivateData->prevSFM_FIR_flt[p] = 0.f; - hPrivateData->prevSFM_IIR_flt[p] = 0.f; - } - } - - if ( element_mode > EVS_MONO ) - { - if ( SFM == -1.f ) /* reset */ - { - for ( p = 0; p < hGrid->nTiles; p++ ) - { - set_f( hPrivateData->igfPastSFM[p], -1.f, IGF_PAST_SFM_LEN ); - hPrivateData->igfWhiteningHangoverCnt[p] = 2; - } - } - - /* vibrato handling */ - for ( p = 0; p < hGrid->nTiles; p = p + 2 ) - { - if ( ( hPrivateData->igfPrevWhiteningLevel[p] == IGF_WHITENING_OFF && hPrivateData->igfCurrWhiteningLevel[p] != IGF_WHITENING_OFF ) || - ( hPrivateData->igfPrevWhiteningLevel[p + 1] == IGF_WHITENING_OFF && hPrivateData->igfCurrWhiteningLevel[p + 1] != IGF_WHITENING_OFF ) ) - { - int16_t i; - float pastSfm_a[4], pastSfm_b[4]; - float pastSfmDiffSum_a, pastSfmDiffSum_b; - - for ( i = 0; i < 4; i++ ) - { - pastSfm_a[i] = hPrivateData->igfPastSFM[p][( hPrivateData->igfPastSFM_pos + 4 - i ) % IGF_PAST_SFM_LEN]; - pastSfm_b[i] = hPrivateData->igfPastSFM[p + 1][( hPrivateData->igfPastSFM_pos + 4 - i ) % IGF_PAST_SFM_LEN]; - } - pastSfmDiffSum_a = pastSfmDiffSum_b = 0; - for ( i = 0; i < 3; i++ ) - { - if ( pastSfm_a[i + 1] != -1.f ) - { - pastSfmDiffSum_a += ( pastSfm_a[i] - pastSfm_a[i + 1] ); - pastSfmDiffSum_b += ( pastSfm_b[i] - pastSfm_b[i + 1] ); - } - else - { - break; - } - } - - /* if tonality oscillates between two tiles, turn whitening off in both */ - if ( ( ( pastSfmDiffSum_a > 0.f && pastSfmDiffSum_b < 0.f ) || - ( pastSfmDiffSum_a < 0.f && pastSfmDiffSum_b > 0.f ) ) && - ( fabs( pastSfmDiffSum_a - pastSfmDiffSum_b ) > 0.5f ) ) - { - hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfCurrWhiteningLevel[p + 1] = IGF_WHITENING_OFF; - } - } - } - - /* hangover */ - for ( p = 0; p < hGrid->nTiles; p++ ) - { - if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] ) - { - hPrivateData->igfWhiteningHangoverCnt[p]++; - if ( hPrivateData->igfWhiteningHangoverCnt[p] == 3 ) - { - hPrivateData->igfWhiteningHangoverCnt[p] = 0; - } - else - { - hPrivateData->igfCurrWhiteningLevel[p] = hPrivateData->igfPrevWhiteningLevel[p]; - } - } - else - { - hPrivateData->igfWhiteningHangoverCnt[p] = 0; - } - } - - hPrivateData->igfPastSFM_pos = ( hPrivateData->igfPastSFM_pos + 1 ) % IGF_PAST_SFM_LEN; - } - - hPrivateData->wasTransient = isTransient; - - return; -} -#endif /*-------------------------------------------------------------------* - * IGF_WriteWhiteningTile() - * - * write whitening levels into bitstream - *-------------------------------------------------------------------*/ - -/*! r: number of bits written */ -#ifdef IVAS_FLOAT_FIXED -static Word16 IGF_WriteWhiteningTile( /**< out: Q0 | number of bits written */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - Word16 *pBitOffset, /**< in: | ptr to bitOffset counter */ - Word16 whiteningLevel /**< in: Q0 | whitening levels to write */ -) -{ - Word16 totBitCount; - Word16 startBitCount; - - totBitCount = 0; - startBitCount = *pBitOffset; - move16(); - move16(); - - IF( EQ_32( whiteningLevel, IGF_WHITENING_MID ) ) - { - IGF_write_bits( hBstr, pBitOffset, 0, 1 ); - } - ELSE - { - IGF_write_bits( hBstr, pBitOffset, 1, 1 ); - IF( whiteningLevel == IGF_WHITENING_OFF ) - { - IGF_write_bits( hBstr, pBitOffset, 0, 1 ); - } - ELSE - { - IGF_write_bits( hBstr, pBitOffset, 1, 1 ); - } - } - totBitCount = sub( *pBitOffset, startBitCount ); + * IGF_WriteWhiteningTile() + * + * write whitening levels into bitstream + *-------------------------------------------------------------------*/ - return totBitCount; -} -#else -static int16_t IGF_WriteWhiteningTile( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *pBitOffset, /* i : ptr to bitOffset counter */ - int16_t whiteningLevel /* i : whitening levels to write */ +/*! r: number of bits written */ +static Word16 IGF_WriteWhiteningTile( /**< out: Q0 | number of bits written */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + Word16 *pBitOffset, /**< in: | ptr to bitOffset counter */ + Word16 whiteningLevel /**< in: Q0 | whitening levels to write */ ) { - int16_t totBitCount; - int16_t startBitCount; + Word16 totBitCount; + Word16 startBitCount; totBitCount = 0; startBitCount = *pBitOffset; + move16(); + move16(); - if ( whiteningLevel == IGF_WHITENING_MID ) + IF( EQ_32( whiteningLevel, IGF_WHITENING_MID ) ) { IGF_write_bits( hBstr, pBitOffset, 0, 1 ); } - else + ELSE { IGF_write_bits( hBstr, pBitOffset, 1, 1 ); - if ( whiteningLevel == IGF_WHITENING_OFF ) + IF( whiteningLevel == IGF_WHITENING_OFF ) { IGF_write_bits( hBstr, pBitOffset, 0, 1 ); } - else + ELSE { IGF_write_bits( hBstr, pBitOffset, 1, 1 ); } } - totBitCount = *pBitOffset - startBitCount; + totBitCount = sub( *pBitOffset, startBitCount ); return totBitCount; } -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -3358,7 +2013,6 @@ static int16_t IGF_WriteWhiteningTile( * writes the whitening levels *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 IGF_WriteWhiteningLevels( /**< out: Q0 | total number of bits written */ const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in: | instance handle of IGF encoder */ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -3470,97 +2124,6 @@ static Word16 IGF_WriteWhiteningLevels( return totBitCount; } -#else -/*! r: total number of bits written */ -static int16_t IGF_WriteWhiteningLevels( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF encoder */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *pBitOffset, /* i : ptr to bitOffset counter */ - const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const int16_t isIndepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ -) -{ - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - H_IGF_GRID hGrid; - int16_t p; - int16_t nTiles; - int16_t totBitCount; - int16_t isSame; - int16_t startBitCount; - - totBitCount = 0; - isSame = 1; - startBitCount = *pBitOffset; - hPrivateData = &hIGFEnc->igfData; - hGrid = &hPrivateData->igfInfo.grid[igfGridIdx]; - nTiles = hGrid->nTiles; - - if ( isIndepFlag ) - { - isSame = 0; - } - else - { - for ( p = 0; p < nTiles; p++ ) - { - if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfPrevWhiteningLevel[p] ) - { - isSame = 0; - break; - } - } - } - - if ( isSame ) - { - IGF_write_bits( hBstr, pBitOffset, 1, 1 ); - } - else - { - if ( !isIndepFlag ) - { - IGF_write_bits( hBstr, pBitOffset, 0, 1 ); - } - - IGF_WriteWhiteningTile( hBstr, pBitOffset, hPrivateData->igfCurrWhiteningLevel[0] ); - - if ( hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_SWB_48000_CPE || hPrivateData->igfInfo.bitRateIndex == IGF_BITRATE_FB_48000_CPE ) - { - isSame = 1; - } - else - { - for ( p = 1; p < nTiles; p++ ) - { - isSame = 1; - if ( hPrivateData->igfCurrWhiteningLevel[p] != hPrivateData->igfCurrWhiteningLevel[p - 1] ) - { - isSame = 0; - break; - } - } - } - - if ( !isSame ) - { - IGF_write_bits( hBstr, pBitOffset, 1, 1 ); - - for ( p = 1; p < nTiles; p++ ) - { - IGF_WriteWhiteningTile( hBstr, pBitOffset, hPrivateData->igfCurrWhiteningLevel[p] ); - } - } - else if ( hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_SWB_48000_CPE && hPrivateData->igfInfo.bitRateIndex != IGF_BITRATE_FB_48000_CPE ) - { - IGF_write_bits( hBstr, pBitOffset, 0, 1 ); - } - } - - totBitCount = *pBitOffset - startBitCount; - - return totBitCount; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -3569,7 +2132,6 @@ static int16_t IGF_WriteWhiteningLevels( * write flattening trigger *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits written */ static Word16 IGF_WriteFlatteningTrigger( /**< out: | number of bits written */ const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in: | instance handle of IGF Encoder */ @@ -3593,28 +2155,6 @@ static Word16 IGF_WriteFlatteningTrigger( return totBitCount; } -#else -static int16_t IGF_WriteFlatteningTrigger( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t *pBitOffset /* i : ptr to bitOffset counter */ -) -{ - int16_t totBitCount; - int16_t startBitCount; - int16_t flatteningTrigger; - - totBitCount = 0; - startBitCount = *pBitOffset; - flatteningTrigger = hIGFEnc->flatteningTrigger; - - IGF_write_bits( hBstr, pBitOffset, flatteningTrigger, 1 ); - - totBitCount = *pBitOffset - startBitCount; - - return totBitCount; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -3630,7 +2170,6 @@ static int16_t IGF_WriteFlatteningTrigger( *-------------------------------------------------------------------*/ /*! r: number of bits written per frame */ -#ifdef IVAS_FLOAT_FIXED Word16 IGFEncWriteBitstream_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -3677,7 +2216,6 @@ Word16 IGFEncWriteBitstream_ivas_fx( return hIGFEnc->infoTotalBitsPerFrameWritten; } -#endif // IVAS_FLOAT_FIXED int16_t IGFEncWriteBitstream( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -3713,74 +2251,6 @@ int16_t IGFEncWriteBitstream( * * sets the IGF mode according to given bitrate *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFEncSetMode( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ - const int32_t total_brate, /* i : encoder total bitrate */ - const int16_t bwidth, /* i : encoder audio bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - int16_t i; - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - - hPrivateData = &hIGFEnc->igfData; - hPrivateData->igfBitstreamBits = 0; - set_s( hPrivateData->igfScfQuantized, 0, IGF_MAX_SFB ); - set_s( hPrivateData->igfCurrWhiteningLevel, 0, IGF_MAX_TILES ); - set_s( hPrivateData->igfPrevWhiteningLevel, 0, IGF_MAX_TILES ); - set_s( hPrivateData->igfWhiteningHangoverCnt, 0, IGF_MAX_TILES ); - - hPrivateData->igfPastSFM_pos = 0; - - for ( i = 0; i < IGF_BITBUFSIZE / 8; i++ ) - { - hPrivateData->igfBitstream[i] = 0; - } - - hPrivateData->wasTransient = 0; - set_s( hPrivateData->dampingFactorSmoothing, 2, IGF_MAX_SFB ); -#ifdef IVAS_FLOAT_FIXED - set_s( hPrivateData->prevDampingFactor_IIR_fx, MIN16B, IGF_MAX_SFB ); - set_s( hPrivateData->prevDampingFactor_IIR_e, 0, IGF_MAX_SFB ); -#endif - set_s( hPrivateData->logSpec, 0, L_FRAME_PLUS ); - -#ifndef IVAS_FLOAT_FIXED - if ( IGFCommonFuncsIGFConfiguration_flt( total_brate, bwidth, element_mode, &hPrivateData->igfInfo, rf_mode ) ) -#else - IF( IGFCommonFuncsIGFConfiguration_ivas_fx( total_brate, bwidth, element_mode, &hPrivateData->igfInfo, rf_mode ) ) -#endif - { - IGFSCFEncoderOpen( &hPrivateData->hIGFSCFArithEnc, &hPrivateData->igfInfo, total_brate, bwidth, element_mode, rf_mode ); - - hIGFEnc->infoSamplingRate = hPrivateData->igfInfo.sampleRate; - hIGFEnc->infoStartFrequency = hPrivateData->igfInfo.grid[0].startFrequency; - hIGFEnc->infoStopFrequency = hPrivateData->igfInfo.grid[0].stopFrequency; - hIGFEnc->infoStartLine = hPrivateData->igfInfo.grid[0].startLine; - hIGFEnc->infoStopLine = hPrivateData->igfInfo.grid[0].stopLine; - } - else - { - /* IGF configuration failed -> error! */ - hIGFEnc->infoSamplingRate = 0; - hIGFEnc->infoStartFrequency = -1; - hIGFEnc->infoStopFrequency = -1; - hIGFEnc->infoStartLine = -1; - hIGFEnc->infoStopLine = -1; - IVAS_ERROR( IVAS_ERR_INTERNAL, "IGFEncSetMode: initialization error!" ); - } - - /* reset remaining variables */ - hIGFEnc->infoTotalBitsWritten = 0; - hIGFEnc->infoTotalBitsPerFrameWritten = 0; - hIGFEnc->flatteningTrigger = 0; - - return; -} - -#else void IGFEncSetMode_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ const Word32 total_brate, /* i : encoder total bitrate */ @@ -3878,40 +2348,12 @@ void IGFEncSetMode_ivas_fx( set32_fx( hIGFEnc->spec_be_igf, 0, N_MAX_TCX - IGF_START_MN ); return; } -#endif /*-------------------------------------------------------------------* * pack_bit_ivas() * * insert a bit into packed octet *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void pack_bit_ivas( - const int16_t bit, /* i : bit to be packed */ - uint8_t **pt, /* i/o: pointer to octet array into which bit will be placed */ - uint8_t *omask /* i/o: output mask to indicate where in the octet the bit is to be written */ -) -{ - if ( *omask == 0x80 ) - { - **pt = 0; - } - - if ( bit != 0 ) - { - **pt = **pt | *omask; - } - - *omask >>= 1; - if ( *omask == 0 ) - { - *omask = 0x80; - ( *pt )++; - } - - return; -} -#endif /*-------------------------------------------------------------------* * IGFEncConcatenateBitstream() @@ -3919,7 +2361,6 @@ static void pack_bit_ivas( * IGF bitstream concatenation for TCX10 modes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void IGFEncConcatenateBitstream( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ const Word16 bsBits, /* i : number of IGF bits written to list of indices */ @@ -3977,62 +2418,6 @@ move16(); return; } -#else -void IGFEncConcatenateBitstream( - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ - const int16_t bsBits, /* i : number of IGF bits written to list of indices */ - BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ -) -{ - int16_t i; - IGF_ENC_PRIVATE_DATA_HANDLE hPrivateData; - Indice *ind_list; - uint8_t *pFrame; /* byte array with bit packet and byte aligned coded speech data */ - int16_t *pFrame_size; /* number of bits in the binary encoded access unit [bits] */ - int16_t k, nb_bits_written; - int32_t imask; - uint8_t omask; - - hPrivateData = &hIGFEnc->igfData; - - ind_list = &hBstr->ind_list[hBstr->nb_ind_tot - bsBits]; /* here, we assume that each bit has been written as a single indice */ - pFrame = hPrivateData->igfBitstream; - pFrame_size = &hPrivateData->igfBitstreamBits; - nb_bits_written = 0; - - omask = ( 0x80 >> ( *pFrame_size & 0x7 ) ); - pFrame += *pFrame_size >> 3; - - /* bitstream packing (conversion of individual indices into a serial stream) */ - for ( i = 0; i < bsBits; i++ ) - { - if ( ind_list[i].nb_bits > 0 ) - { - /* mask from MSB to LSB */ - imask = 1 << ( ind_list[i].nb_bits - 1 ); - - /* write bit by bit */ - for ( k = 0; k < ind_list[i].nb_bits; k++ ) - { - pack_bit_ivas( ind_list[i].value & imask, &pFrame, &omask ); - imask >>= 1; - } - nb_bits_written += ind_list[i].nb_bits; - - /* delete the indice */ - ind_list[i].nb_bits = -1; - } - } - - *pFrame_size += nb_bits_written; - - /* update list of indices */ - hBstr->nb_ind_tot -= bsBits; - hBstr->nb_bits_tot -= nb_bits_written; - - return; -} -#endif /*-------------------------------------------------------------------* @@ -4096,7 +2481,6 @@ int16_t IGFEncWriteConcatenatedBitstream( * apply the IGF encoder, main encoder interface *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void IGFEncApplyMono_ivas_fx( Encoder_State *st, /* i : Encoder state */ const Word16 igfGridIdx, /* i : IGF grid index */ @@ -4169,45 +2553,6 @@ void IGFEncApplyMono_ivas_fx( IGF_ErodeSpectrum( &highPassEner_exp, st->hIGFEnc, pMDCTSpectrum_fx, pPowerSpectrumParameter_fx, e_ps, igfGridIdx ); } -#else -void IGFEncApplyMono( - Encoder_State *st, /* i : Encoder state */ - const int16_t igfGridIdx, /* i : IGF grid index */ - float *pMDCTSpectrum, /* i/o: MDCT spectrum */ - float *pPowerSpectrum, /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ - const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ - const int16_t isTNSActive, /* i : flag indicating if the TNS is active */ - const int16_t sp_aud_decision0, /* i : first stage switching decision */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - float *pPowerSpectrumParameter; /* If it is NULL it informs a function that specific handling is needed */ - float att = 1.0f; - int16_t last_core_acelp; - - last_core_acelp = ( st->last_core == ACELP_CORE ); - - pPowerSpectrumParameter = !isTNSActive && isTCX20 ? pPowerSpectrum : NULL; - - IGF_UpdateInfo( st->hIGFEnc, igfGridIdx ); - - if ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) - { - calculate_hangover_attenuation_gain( st, &att, vad_hover_flag ); - } - - - IGF_CalculateEnvelope( st->hIGFEnc, pMDCTSpectrum, pPowerSpectrumParameter, igfGridIdx, st->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, st->element_mode, att ); - - pPowerSpectrumParameter = isTCX20 ? pPowerSpectrum : NULL; - - IGF_Whitening( st->hIGFEnc, pPowerSpectrumParameter, igfGridIdx, st->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, isTNSActive, sp_aud_decision0, ( st->element_mode == IVAS_CPE_MDCT ? st->element_brate : st->total_brate ), st->element_mode ); - - IGF_ErodeSpectrum_ivas( st->hIGFEnc, pMDCTSpectrum, pPowerSpectrumParameter, igfGridIdx, 0 ); - - return; -} -#endif /*-------------------------------------------------------------------* @@ -4216,7 +2561,6 @@ void IGFEncApplyMono( * apply the IGF encoder, main encoder interface *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void IGFEncApplyStereo_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ Word16 ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ @@ -4306,84 +2650,6 @@ void IGFEncApplyStereo_fx( } return; } -#else -void IGFEncApplyStereo( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ - int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ - const IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS], /* i : instance handle of IGF Encoder */ - const int16_t igfGridIdx, /* i : IGF grid index */ - Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ - float *pPowerSpectrum[CPE_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ - float *pPowerSpectrumMsInv[CPE_CHANNELS][NB_DIV], /* i/o: inverse power spectrum */ - float *inv_spectrum[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ - const int16_t frameno, /* i : flag indicating index of current subfr. */ - const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ -) -{ - float *pPowerSpectrumParameter[NB_DIV]; /* If it is NULL it informs a function that specific handling is needed */ - float *pPowerSpectrumParameterMsInv[NB_DIV]; - int16_t coreMsMask[N_MAX]; - int16_t sfb, ch, last_core_acelp; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - - /* assumptions: stereo filling was already done on the flattened spectra - * IGF region is always coded M/S, never L/R (to be done in the encoder) - * for residual bands with stereo filling infoTcxNoise is set to zero - * both channels have the same IGF configuration - */ - - /* sanity checks: check if both channels have the same configuration...*/ - assert( ( sts[0]->core == sts[1]->core ) ); - - /* initialization */ - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - if ( sts[0]->last_core == ACELP_CORE ) - { - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - /* create line wise ms mask for the core bands */ - set_s( coreMsMask, 0, N_MAX ); - for ( sfb = 0; sfb < sfbConf->sfbCnt; sfb++ ) - { - set_s( &coreMsMask[sfbConf->sfbOffset[sfb]], ms_mask[frameno][sfb], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); - } - - if ( sts[0]->core == TCX_20_CORE && !sts[0]->hTcxEnc->fUseTns[frameno] && !sts[1]->hTcxEnc->fUseTns[frameno] ) - { - pPowerSpectrumParameter[0] = &pPowerSpectrum[0][0]; - pPowerSpectrumParameter[1] = &pPowerSpectrum[1][0]; - pPowerSpectrumParameterMsInv[0] = pPowerSpectrumMsInv[0][0]; - pPowerSpectrumParameterMsInv[1] = pPowerSpectrumMsInv[1][0]; - } - else - { - pPowerSpectrumParameter[0] = NULL; - pPowerSpectrumParameter[1] = NULL; - pPowerSpectrumParameterMsInv[0] = NULL; - pPowerSpectrumParameterMsInv[1] = NULL; - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - last_core_acelp = ( sts[ch]->last_core == ACELP_CORE ); - - IGF_UpdateInfo_ivas( hIGFEnc[ch], igfGridIdx ); - - IGF_CalculateStereoEnvelope( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum[frameno], inv_spectrum[ch][frameno], pPowerSpectrumParameter[ch], pPowerSpectrumParameterMsInv[ch], igfGridIdx, coreMsMask, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp ); - - pPowerSpectrumParameter[ch] = sts[ch]->core == TCX_20_CORE ? pPowerSpectrum[ch] : NULL; - - IGF_Whitening( hIGFEnc[ch], pPowerSpectrumParameter[ch], igfGridIdx, sts[ch]->hTranDet->transientDetector.bIsAttackPresent, last_core_acelp, ( sts[0]->hTcxEnc->fUseTns[frameno] || sts[1]->hTcxEnc->fUseTns[frameno] ), sp_aud_decision0, element_brate, sts[ch]->element_mode ); - - IGF_ErodeSpectrum_ivas( hIGFEnc[ch], sts[ch]->hTcxEnc->spectrum[frameno], pPowerSpectrumParameter[ch], igfGridIdx, mct_on ); - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -4392,7 +2658,6 @@ void IGFEncApplyStereo( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void IGFSaveSpectrumForITF_ivas_fx( IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i/o: instance handle of IGF Encoder */ const Word16 igfGridIdx, /* i : IGF grid index */ @@ -4405,44 +2670,7 @@ void IGFSaveSpectrumForITF_ivas_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -ivas_error IGF_Reconfig( - IGF_ENC_INSTANCE_HANDLE *hIGFEnc, /* i/o: instance handle of IGF Encoder */ - const int16_t igf, /* i : IGF on/off */ - const int16_t reset, /* i : reset flag */ - const int32_t brate, /* i : bitrate for configuration */ - const int16_t bwidth, /* i : signal bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - ivas_error error; - error = IVAS_ERR_OK; - - if ( igf && *hIGFEnc == NULL ) - { - if ( ( *hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); - } - IGFEncSetMode( *hIGFEnc, brate, bwidth, element_mode, rf_mode ); - } - else if ( igf && reset ) - { - IGFEncSetMode( *hIGFEnc, brate, bwidth, element_mode, rf_mode ); - } - else if ( !igf && *hIGFEnc != NULL ) - { - free( *hIGFEnc ); - *hIGFEnc = NULL; - } - - return error; -} -#else ivas_error IGF_Reconfig( IGF_ENC_INSTANCE_HANDLE *hIGFEnc, /* i/o: instance handle of IGF Encoder */ const Word16 igf, /* i : IGF on/off */ @@ -4481,4 +2709,3 @@ ivas_error IGF_Reconfig( return error; } -#endif diff --git a/lib_enc/igf_enc_fx.c b/lib_enc/igf_enc_fx.c index 0de32bdac..f0d83e416 100644 --- a/lib_enc/igf_enc_fx.c +++ b/lib_enc/igf_enc_fx.c @@ -1235,7 +1235,6 @@ void IGFEncSetMode_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * pack_bit() * @@ -1334,7 +1333,6 @@ hBstr->nb_bits_tot = sub( hBstr->nb_bits_tot, nb_bits_written ); return; } -#endif /**********************************************************************/ /* IGF bitsream concatenation for TCX10 modes @@ -1410,7 +1408,6 @@ Word16 IGFEncWriteConcatenatedBitstream_fx( return hInstance->infoTotalBitsWritten; } -#ifdef IVAS_FLOAT_FIXED Word16 IGFEncWriteConcatenatedBitstream_ivas_fx( /**< out: Q0 | total number of bits written */ const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in: | instance handle of IGF Encoder */ BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ @@ -1439,7 +1436,6 @@ Word16 IGFEncWriteConcatenatedBitstream_ivas_fx( return hInstance->infoTotalBitsWritten; } -#endif /**********************************************************************/ /* apply the IGF encoder, main encoder interface @@ -1508,7 +1504,6 @@ void IGFEncApplyMono_fx( const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in } -#ifdef IVAS_FLOAT_FIXED ivas_error IGF_Reconfig_fx( IGF_ENC_INSTANCE_HANDLE *hIGFEnc, /* i/o: instance handle of IGF Encoder */ const Word16 igf, /* i : IGF on/off */ @@ -1547,4 +1542,3 @@ ivas_error IGF_Reconfig_fx( return error; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_enc/igf_scf_enc.c b/lib_enc/igf_scf_enc.c index 09e2ba1b7..5ac4f4e3e 100644 --- a/lib_enc/igf_scf_enc.c +++ b/lib_enc/igf_scf_enc.c @@ -41,48 +41,8 @@ #include "stat_com.h" #include "cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGFSCFEncoderOpen() - * - * initialization of an instance of this module, pass a ptr to a hPublicData - *---------------------------------------------------------------------*/ - -void IGFSCFEncoderOpen( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data */ - H_IGF_INFO hIgfInfo, /* i : IGF info handle */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t rf_mode /* i : flag to signal the RF mode */ -) -{ - - hPublicData->ptrBitIndex = 0; - hPublicData->bitCount = 0; - hPublicData->Tsave = 0; - hPublicData->contex_saved = 0; - hPublicData->acState.low = 0; - hPublicData->acState.high = 0; - hPublicData->acState.bits_to_follow = 0; - set_s( hPublicData->prev, 0, 64 ); - set_s( hPublicData->prevSave, 0, 64 ); - - hPublicData->scfCountLongBlock[0] = hIgfInfo->grid[0].swb_offset_len - 1; - hPublicData->scfCountLongBlock[1] = hIgfInfo->grid[1].swb_offset_len - 1; - hPublicData->scfCountLongBlock[2] = hIgfInfo->grid[2].swb_offset_len - 1; - hPublicData->t = 0; /* protect against the invalid request of starting encoding with a dependent block */ - - IGFCommonFuncsIGFGetCFTables_flt( total_brate, bwidth, element_mode, rf_mode, &hPublicData->cf_se00, &hPublicData->cf_se01, &hPublicData->cf_off_se01, &hPublicData->cf_se02, &hPublicData->cf_off_se02, &hPublicData->cf_se10, &hPublicData->cf_off_se10, &hPublicData->cf_se11, &hPublicData->cf_off_se11 ); - - return; -} -#endif /*---------------------------------------------------------------------* @@ -119,7 +79,6 @@ static Word16 quant_ctx( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_bits( IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ Word16 *ptr, /* i/o: pointer to expanded bit buffer, one bit in each Word16 */ @@ -141,26 +100,6 @@ static void arith_encode_bits( bit ); } } -#else -static void arith_encode_bits( - IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ - int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short*/ - const int16_t x, /* i : value to encode */ - const int16_t nBits /* i : number of bits to encode */ -) -{ - int16_t i; - int16_t bit; - - for ( i = nBits - 1; i >= 0; --i ) - { - bit = ( x >> i ) & 1; - hPrivateData->ptrBitIndex = ari_encode_14bits_sign( ptr, hPrivateData->ptrBitIndex, MAX16B, /* disable the bit count limitation */ &hPrivateData->acState, bit ); - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* @@ -169,7 +108,6 @@ static void arith_encode_bits( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_residual( IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ Word16 *ptr, /* i/o: pointer to expanded bit buffer, one bit in each Word16 */ @@ -246,69 +184,6 @@ static void arith_encode_residual( } } } -#else -static void arith_encode_residual( - IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ - int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short */ - int16_t x, /* i : prediction residual to encode */ - const uint16_t *cumulativeFrequencyTable, /* i : cumulative frequency table to be used */ - const int16_t tableOffset /* i : offset used to align the table */ -) -{ - int16_t extra; - - x += tableOffset; - if ( ( x >= IGF_MIN_ENC_SEPARATE ) && ( x <= IGF_MAX_ENC_SEPARATE ) ) - { - /* encode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ - hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, ( x - IGF_MIN_ENC_SEPARATE ) + 1, cumulativeFrequencyTable ); - - return; - } - else if ( x < IGF_MIN_ENC_SEPARATE ) - { - /* send escape code 0 to indicate x <= IGF_MIN_ENC_SEPARATE - 1 */ - extra = ( IGF_MIN_ENC_SEPARATE - 1 ) - x; - hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, 0, cumulativeFrequencyTable ); - } - else - { - /* x > IGF_MAX_ENC_SEPARATE */ - /* send escape code (IGF_SYMBOLS_IN_TABLE - 1) to indicate x >= IGF_MAX_ENC_SEPARATE + 1 */ - extra = x - ( IGF_MAX_ENC_SEPARATE + 1 ); - hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, IGF_SYMBOLS_IN_TABLE - 1, cumulativeFrequencyTable ); - } - - /* encode one of the tails of the distribution */ - if ( extra < 15 ) - { - /* encode extra with 4 bits if extra < 15 */ - arith_encode_bits( hPrivateData, ptr, extra, 4 ); - } - else - { - /* extra >= 15 */ - /* send escape code 15 to indicate extra >= 15 */ - arith_encode_bits( hPrivateData, ptr, 15, 4 ); - extra -= 15; - - if ( extra < 63 ) - { - /* encode additional extra with 6 bits */ - arith_encode_bits( hPrivateData, ptr, extra, 6 ); - } - else /* extra >= 63 */ - { - arith_encode_bits( hPrivateData, ptr, 63, 6 ); - extra -= 63; - /* encode safety extra with 7 bits */ - arith_encode_bits( hPrivateData, ptr, extra, 7 ); - } - } - - return; -} -#endif /*---------------------------------------------------------------------* @@ -316,7 +191,6 @@ static void arith_encode_residual( * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void encode_sfe_vector( IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ Word16 *ptr, /* i : pointer to expanded bit buffer, one bit in each short */ @@ -390,90 +264,6 @@ static void encode_sfe_vector( return; } -#else -static void encode_sfe_vector( - IGFSCFENC_INSTANCE_HANDLE hPrivateData, /* i/o: instance handle */ - int16_t *ptr, /* i : pointer to expanded bit buffer, one bit in each short */ - const int16_t t, /* i : frame counter reset to 0 at each independent frame */ - int16_t *prev_x, /* i : previous vector */ - int16_t *x, /* i : current vector to encode */ - const int16_t length /* i : number of elements to encode */ -) -{ - /* - f - ^ - | d a x - | c b - | e --> t - */ - int16_t f, pred; - int16_t ctx, ctx_f, ctx_t; - - for ( f = 0; f < length; f++ ) - { - if ( t == 0 ) - { - if ( f == 0 ) - { - /* encode one of the IGF_SYMBOLS_IN_TABLE == 27 alphabet symbols using the new raw AC function */ - hPrivateData->ptrBitIndex = ari_encode_14bits_ext( ptr, hPrivateData->ptrBitIndex, &hPrivateData->acState, x[f] >> 2, hPrivateData->cf_se00 ); - arith_encode_bits( hPrivateData, ptr, x[f] & 3, 2 ); /* LSBs as 2 bit raw */ - } - else if ( f == 1 ) - { - pred = x[f - 1]; /* pred = b */ - arith_encode_residual( hPrivateData, ptr, x[f] - pred, hPrivateData->cf_se01, hPrivateData->cf_off_se01 ); - } - else - { - /* f >= 2 */ - pred = x[f - 1]; /* pred = b */ - ctx = quant_ctx( x[f - 1] - x[f - 2] ); /* Q(b - e) */ - arith_encode_residual( hPrivateData, ptr, x[f] - pred, &hPrivateData->cf_se02[( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx )], hPrivateData->cf_off_se02[IGF_CTX_OFFSET + ctx] ); - } - } - else - { - /* t == 1 */ - if ( f == 0 ) - { - pred = prev_x[f]; /* pred = a */ - arith_encode_residual( hPrivateData, ptr, x[f] - pred, hPrivateData->cf_se10, hPrivateData->cf_off_se10 ); - } - else - { - /* (t == 1) && (f >= 1) */ - pred = prev_x[f] + x[f - 1] - prev_x[f - 1]; /* pred = a + b - c */ - ctx_f = quant_ctx( prev_x[f] - prev_x[f - 1] ); /* Q(a - c) */ - ctx_t = quant_ctx( x[f - 1] - prev_x[f - 1] ); /* Q(b - c) */ - arith_encode_residual( hPrivateData, ptr, x[f] - pred, &hPrivateData->cf_se11[( IGF_SYMBOLS_IN_TABLE + 1 ) * IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_SYMBOLS_IN_TABLE + 1 ) * ( IGF_CTX_OFFSET + ctx_f )], hPrivateData->cf_off_se11[IGF_CTX_COUNT * ( IGF_CTX_OFFSET + ctx_t ) + ( IGF_CTX_OFFSET + ctx_f )] ); - } - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGFSCFEncoderReset() - * - * Reset of Arith enc context memory - *---------------------------------------------------------------------*/ - -void IGFSCFEncoderReset( - IGFSCFENC_INSTANCE_HANDLE hPublicData /* i/o: handle to public data */ -) -{ - hPublicData->t = 0; - - /* we do not need to fill hPublicData->prev with zeros, because when t = 0 no previous information is used */ - - return; -} -#endif /*---------------------------------------------------------------------* @@ -481,7 +271,6 @@ void IGFSCFEncoderReset( * * main IGF encoder function *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 IGFSCFEncoderEncode( IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -531,89 +320,3 @@ Word16 IGFSCFEncoderEncode( /* return next bit offset in the stream */ return hPublicData->bitCount; } -#else // IVAS_FLOAT_FIXED - -int16_t IGFSCFEncoderEncode( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t bitCount, /* i : offset to the first bit in bitbuffer which should be readed by iisArithDecoderDecode function */ - int16_t *sfe, /* i : ptr to an array which contain quantized scalefactor energies */ - const int16_t igfGridIdx, /* i : igf grid index see declaration of IGF_GRID_IDX for details */ - const int16_t indepFlag /* i : if 1 frame is independent, 0 = frame is coded with data from previous frame */ -) -{ - int16_t ptr[IGF_BITBUFSIZE]; /* temporary expanded bit buffer, one bit in each short */ - int16_t i; - - /* insert data: */ - hPublicData->ptrBitIndex = 0; - hPublicData->bitCount = bitCount; - ari_start_encoding_14bits( &hPublicData->acState ); /* start AC encoding */ - - /* check if coder needs a reset and do it if necessary */ - if ( indepFlag ) - { - IGFSCFEncoderReset( hPublicData ); - } - - encode_sfe_vector( hPublicData, ptr, hPublicData->t, hPublicData->prev, sfe, hPublicData->scfCountLongBlock[igfGridIdx] ); - - hPublicData->ptrBitIndex = ari_done_encoding_14bits( ptr, hPublicData->ptrBitIndex, &hPublicData->acState ); /* finish AC encoding */ - hPublicData->bitCount = hPublicData->bitCount + hPublicData->ptrBitIndex; - - /* advancing history: */ - mvs2s( sfe, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); - hPublicData->t++; - - /* copy the bits from the temporary bit buffer, if doRealEncoding is enabled */ - if ( hBstr ) - { - for ( i = 0; i < hPublicData->ptrBitIndex; ++i ) - { - push_next_indice( hBstr, ptr[i], 1 ); - } - } - - /* return next bit offset in the stream */ - return hPublicData->bitCount; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IGFSCFEncoderSaveContextState() - * - * for a closed loop enc, the ArithEncoder needs to memorize the context - *---------------------------------------------------------------------*/ - -void IGFSCFEncoderSaveContextState( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ - const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ -) -{ - hPublicData->Tsave = hPublicData->t; - - mvs2s( hPublicData->prev, hPublicData->prevSave, hPublicData->scfCountLongBlock[igfGridIdx] ); - - return; -} - - -/*---------------------------------------------------------------------* - * IGFSCFEncoderRestoreContextState() - * - * for a closed loop enc, the ArithEncoder needs to memorize the context - *---------------------------------------------------------------------*/ - -void IGFSCFEncoderRestoreContextState( - IGFSCFENC_INSTANCE_HANDLE hPublicData, /* i/o: handle to public data or NULL in case there was no instance created */ - const int16_t igfGridIdx /* i : igf grid index see declaration of IGF_GRID_IDX for details */ -) -{ - hPublicData->t = hPublicData->Tsave; - - mvs2s( hPublicData->prevSave, hPublicData->prev, hPublicData->scfCountLongBlock[igfGridIdx] ); - - return; -} -#endif diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 84b73c6c8..e7c667388 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -44,1250 +44,8 @@ #include "prot_fx.h" #include "ivas_cnst.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#include "prot_fx_enc.h" -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------* - * init_encoder() - * - * Initialization of state variables - *-----------------------------------------------------------------------*/ - -ivas_error init_encoder( - Encoder_State *st, /* i/o: state structure */ - Encoder_Struct *st_ivas, /* i/o: encoder state structure */ - const int16_t idchan, /* i : channel ID */ - const int16_t var_SID_rate_flag, /* i : flag for variable SID update rate */ - const int16_t interval_SID, /* i : interval for SID update */ - const int16_t vad_only_flag, /* i : flag to indicate front-VAD structure */ - const ISM_MODE ism_mode, /* i : ISM mode */ - const int32_t element_brate /* i : element bitrate */ -) -{ - int16_t i; - ivas_error error; - int32_t igf_brate; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * General parameters - *-----------------------------------------------------------------*/ - - if ( st->Opt_AMR_WB ) - { - st->last_core = AMR_WB_CORE; - } - else - { - st->last_core = -1; - } - - st->L_frame = L_FRAME; - st->last_coder_type = GENERIC; - st->coder_type = GENERIC; - st->last_total_brate = st->total_brate; - st->last_bits_frame_nominal = -1; - st->last_total_brate_cng = -1; - st->last_core_brate = st->total_brate; - st->dtx_sce_sba = 0; - st->extl = -1; - st->last_extl = -1; - st->last_L_frame = L_FRAME; - st->rate_switching_reset = 0; - st->rate_switching_reset_16kHz = 0; - st->clas = UNVOICED_CLAS; - st->low_rate_mode = 0; - st->ini_frame = 0; - st->inactive_coder_type_flag = 0; - st->sba_br_sw_while_no_data = 0; - - st->coder_type_raw = VOICED; - st->last_coder_type_raw = st->coder_type_raw; - - st->flag_ACELP16k = set_ACELP_flag_IVAS( st->element_mode, st->total_brate, st->total_brate, idchan, 0, -1, -1 ); - - st->is_ism_format = 0; - if ( ism_mode != ISM_MODE_NONE ) - { - st->is_ism_format = 1; - } - - /*-----------------------------------------------------------------* - * Bitstream - *-----------------------------------------------------------------*/ - - if ( !vad_only_flag ) - { - if ( ( st->hBstr = (BSTR_ENC_HANDLE) malloc( sizeof( BSTR_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Bitstream structure\n" ) ); - } - - /* set pointer to the buffer of indices */ - st->hBstr->ind_list = st_ivas->ind_list; - st->hBstr->ivas_ind_list_zero = &st_ivas->ind_list; - st->hBstr->ivas_max_num_indices = &st_ivas->ivas_max_num_indices; - st->hBstr->nb_ind_tot = 0; - st->hBstr->nb_bits_tot = 0; - st->hBstr->st_ivas = st_ivas; - } - else - { - st->hBstr = NULL; - } - - /*-----------------------------------------------------------------* - * Pre-processing and ACELP core parameters - *-----------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED - mvr2r( GEWB_Ave, st->mem_AR, M ); - mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); - mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); - mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); -#else - Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); - Copy( GEWB_Ave_fx, st->lsfoldbfi0_fx, M ); - Copy( GEWB_Ave_fx, st->lsfoldbfi1_fx, M ); - Copy( GEWB_Ave_fx, st->lsf_adaptive_mean_fx, M ); -#endif - - st->next_force_safety_net = 0; - - st->pstreaklen = 0; -#ifndef IVAS_FLOAT_FIXED - st->streaklimit = 1.0f; - set_f( st->mem_MA, 0, M ); -#else - st->streaklimit_fx = 32767; - set16_fx( st->mem_MA_fx, 0, M ); -#endif - -#ifndef IVAS_FLOAT_FIXED - init_gp_clip( st->clip_var ); - pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); - set_f( st->old_wsp, 0, L_WSP_MEM ); - set_f( st->old_wsp2, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); -#else - init_gp_clip_fx( st->clip_var_fx ); - pitch_ol_init_fx( &st->old_thres_fx, &st->old_pitch, &st->delta_pit, &st->old_corr_fx ); - set16_fx( st->old_wsp_fx, 0, L_WSP_MEM ); - st->exp_old_wsp = 0; - move16(); - set16_fx( st->old_wsp2_fx, 0, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); // Needs to change depending on usage. - st->Q_old_wsp2 = Q15; - move16(); -#endif - -#ifndef IVAS_FLOAT_FIXED - st->mem_preemph = 0.0f; - st->mem_preemph16k = 0.0f; - st->mem_preemph_enc_flt = 0.0; -#else - st->mem_preemph_fx = 0; - st->mem_preemph16k_fx = 0; - st->mem_preemph_enc = 0; - st->exp_mem_preemph_enc = 0; -#endif - - /* AVQ pre-quantizer memory */ -#ifndef IVAS_FLOAT_FIXED - st->mem_preemp_preQ = 0.0f; - st->mem_deemp_preQ = 0.0f; -#else - st->mem_preemp_preQ_fx = 0; - st->mem_deemp_preQ_fx = 0; -#endif - st->last_nq_preQ = 0; - st->last_code_preq = 0; - st->use_acelp_preq = 0; - st->last_harm_flag_acelp = 0; - - /* (Decimated) Weighted Speech Memory */ -#ifndef IVAS_FLOAT_FIXED - st->mem_wsp_enc_flt = 0.0; - st->mem_wsp = 0.0f; - - set_f( st->mem_decim2, 0, 3 ); -#else -#ifdef MSAN_FIX - st->mem_wsp_enc = 0; - move16(); - st->mem_wsp_fx = 0; - move16(); - st->mem_wsp_q = 0; - move16(); - set16_fx( st->mem_decim2_fx, 0, 3 ); -#endif -#endif - -#ifndef IVAS_FLOAT_FIXED - set_f( st->Bin_E, 0, L_FFT ); - st->ee_old = 10.0f; -#else - set32_fx( st->Bin_E_fx, 0, L_FFT ); - st->q_Bin_E = Q31; - move16(); - st->ee_old_fx = 640; -#endif - st->Nb_ACELP_frames = 0; - st->audio_frame_cnt = AUDIO_COUNTER_INI; /* Initialization of the audio frame counter mildly into the audio mode */ - - /* adaptive lag window memory */ - st->old_pitch_la = 0; -#ifdef IVAS_FLOAT_FIXED - st->prev_Q_new = 0; -#endif - - if ( st->input_Fs == 8000 ) - { - st->min_band = 1; - st->max_band = 16; - } - else - { - st->min_band = 0; - st->max_band = 19; - } - -#ifndef IVAS_FLOAT_FIXED - if ( st->Opt_AMR_WB ) - { - mvr2r( mean_isf_amr_wb, st->lsf_old, M ); - isf2isp( st->lsf_old, st->lsp_old1, M, INT_FS_12k8 ); - } - else - { - mvr2r( GEWB_Ave, st->lsf_old, M ); - lsf2lsp( st->lsf_old, st->lsp_old1, M, INT_FS_12k8 ); - } -#else - IF( st->Opt_AMR_WB ) - { - Copy( mean_isf_amr_wb_fx, st->lsf_old_fx, M ); - E_LPC_isf_isp_conversion( st->lsf_old_fx, st->lsp_old1_fx, M ); - } - ELSE - { - Copy( GEWB_Ave_fx, st->lsf_old_fx, M ); - lsf2lsp_fx( st->lsf_old_fx, st->lsp_old1_fx, M, INT_FS_12k8 ); - } -#endif - -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->lsf_old, st->lsf_old1, M ); - mvr2r( st->lsp_old1, st->lsp_old, M ); - mvr2r( st->lsp_old, st->lsp_old16k, M ); - mvr2r( st->lsp_old, st->lspold_enc, M ); -#else - Copy( st->lsf_old_fx, st->lsf_old1_fx, M ); - Copy( st->lsp_old1_fx, st->lsp_old_fx, M ); - Copy( st->lsp_old_fx, st->lsp_old16k_fx, M ); - Copy( st->lsp_old_fx, st->lspold_enc_fx, M ); -#endif - -#ifndef IVAS_FLOAT_FIXED - st->stab_fac = 0.0f; -#else - st->stab_fac_fx = 0; - move16(); -#endif - /* Bass post-filter memories - encoder side of MODE2 */ - st->bpf_off = 0; -#ifndef IVAS_FLOAT_FIXED - st->pst_mem_deemp_err = 0.0f; - st->pst_lp_ener = 0.0f; -#else - st->pst_mem_deemp_err_fx = 0; - st->pst_lp_ener_fx = 0; -#endif - - /* TC coder type */ - st->tc_cnt = 0; - - /* find_uv() parameters */ -#ifndef IVAS_FLOAT_FIXED - st->old_dE1 = 0.0f; -#else - st->old_dE1_fx = 0; -#endif - st->old_ind_deltaMax = 0; -#ifndef IVAS_FLOAT_FIXED - set_f( st->old_enr_ssf, 0.0f, 2 * NB_SSF ); -#else - set32_fx( st->old_enr_ssf_fx, 0, 2 * NB_SSF ); -#endif - st->spike_hyst = -1; - - /* stereo switching memories */ -#ifndef IVAS_FLOAT_FIXED - st->mem_preemph_DFT = 0.0f; - set_f( st->inp_12k8_mem_stereo_sw, 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); - st->mem_preemph16k_DFT = 0.0f; - set_f( st->inp_16k_mem_stereo_sw, 0, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); -#else - st->mem_preemph_DFT_fx = 0; - set16_fx( st->inp_12k8_mem_stereo_sw_fx, 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); - st->mem_preemph16k_DFT_fx = 0; - set16_fx( st->inp_16k_mem_stereo_sw_fx, 0, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); -#endif - - st->sharpFlag = 0; - - /* Stationary noise UV modification */ -#ifndef IVAS_FLOAT_FIXED - st->ge_sm = 10; -#else - st->ge_sm_fx = L_deposit_l( 640 ); -#endif - st->uv_count = 0; - st->act_count = 3; -#ifndef IVAS_FLOAT_FIXED - mvr2r( st->lsp_old, st->lspold_s, M ); -#else - Copy( st->lsp_old_fx, st->lspold_s_fx, M ); -#endif - st->noimix_seed = RANDOM_INITSEED; -#ifndef IVAS_FLOAT_FIXED - st->min_alpha = 1; -#else - st->min_alpha_fx = 32767; -#endif -#ifdef IVAS_FLOAT_FIXED - st->exc_pe_fx = 0; - move16(); - st->Q_stat_noise = 15; - move16(); -#endif - /* FEC */ - st->last_clas = UNVOICED_CLAS; -#ifndef IVAS_FLOAT_FIXED - st->prev_fmerit_flt = 0.0f; - st->fmerit_dt_flt = 0.0f; -#else - st->prev_fmerit = 0; - st->fmerit_dt = 0; -#endif - st->Last_pulse_pos = 0; - -#ifndef IVAS_FLOAT_FIXED - for ( i = 0; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf[i] = L_SUBFR; - } -#else - for ( i = 0; i < 2 * NB_SUBFR16k; i++ ) - { - st->old_pitch_buf_fx[i] = L_SUBFR_Q6; - } -#endif - - /* mode1 core switching */ -#ifndef IVAS_FLOAT_FIXED - st->old_Es_pred = 0; - set_f( st->old_Aq_12_8 + 1, 0, M ); - st->old_Aq_12_8[0] = 1; -#else - st->old_Es_pred_fx = 0; - set16_fx( st->old_Aq_12_8_fx + 1, 0, M ); - st->old_Aq_12_8_fx[0] = ONE_IN_Q12; - move16(); -#endif - -#ifndef IVAS_FLOAT_FIXED - set_f( st->old_Aq_12_8 + 1, 0, M ); - st->old_Aq_12_8[0] = 1; -#endif - - /* stable short pitch detection */ -#ifndef IVAS_FLOAT_FIXED - st->voicing0_sm = 0; - st->voicing_sm = 0; - st->LF_EnergyRatio_sm = 1; -#else - st->voicing0_sm_fx = 0; - st->voicing_sm_fx = 0; - st->LF_EnergyRatio_sm_fx = ONE_IN_Q7; -#endif - st->predecision_flag = 0; -#ifndef IVAS_FLOAT_FIXED - st->diff_sm = 0; - st->energy_sm = 0; -#else - st->diff_sm_fx = 0; - st->energy_sm_fx = 0; -#endif - set_s( st->pitch, L_SUBFR, 3 ); -#ifndef IVAS_FLOAT_FIXED - set_f( st->voicing, 0.0f, 3 ); -#else - set16_fx( st->voicing_fx, 0, 3 ); -#endif - - /*-----------------------------------------------------------------* - * General signal buffers - *-----------------------------------------------------------------*/ - - if ( !vad_only_flag ) - { - if ( ( st->hSignalBuf = (SIGNAL_BUFFERS_ENC_HANDLE) malloc( sizeof( SIGNAL_BUFFERS_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Signal buffers\n" ) ); - } - -#ifdef IVAS_FLOAT_FIXED - st->Bin_E_old_fx = st->hSignalBuf->Bin_E_old_fx; - st->mem_decim_fx = st->hSignalBuf->mem_decim_fx; - st->mem_decim16k_fx = st->hSignalBuf->mem_decim16k_fx; -#else - st->Bin_E_old = st->hSignalBuf->Bin_E_old; - st->mem_decim = st->hSignalBuf->mem_decim_flt; - st->mem_decim16k = st->hSignalBuf->mem_decim16k_flt; - st->old_inp_12k8 = st->hSignalBuf->old_inp_12k8_flt; -#endif -#ifdef IVAS_FLOAT_FIXED - st->mem_decim_fx = st->hSignalBuf->mem_decim_fx; - st->mem_decim16k_fx = st->hSignalBuf->mem_decim16k_fx; - st->old_inp_12k8_fx = st->hSignalBuf->old_inp_12k8_fx; - st->old_inp_16k_fx = st->hSignalBuf->old_inp_16k_fx; -#endif -#ifndef IVAS_FLOAT_FIXED - st->old_inp_16k = st->hSignalBuf->old_inp_16k_flt; - st->buf_synth_flt = st->hSignalBuf->buf_synth_flt; - st->buf_speech_enc_flt = st->hSignalBuf->buf_speech_enc_flt; - st->buf_wspeech_enc_flt = st->hSignalBuf->buf_wspeech_enc_flt; -#endif - -#ifdef IVAS_FLOAT_FIXED - st->buf_speech_enc_pe = st->hSignalBuf->buf_speech_enc_pe; - st->buf_synth = st->hSignalBuf->buf_synth; - st->buf_speech_enc = st->hSignalBuf->buf_speech_enc; - st->buf_wspeech_enc = st->hSignalBuf->buf_wspeech_enc; -#endif - /* initializations */ - -#ifdef IVAS_FLOAT_FIXED - set32_fx( st->Bin_E_old_fx, 0, L_FFT / 2 ); - st->q_Bin_E_old = Q31; - move16(); - set16_fx( st->mem_decim_fx, 0, 2 * L_FILT_MAX ); - set16_fx( st->mem_decim16k_fx, 0, 2 * L_FILT_MAX ); -#else - set_f( st->Bin_E_old, 0, L_FFT / 2 ); - set_f( st->mem_decim, 0, 2 * L_FILT_MAX ); - set_f( st->mem_decim16k, 0, 2 * L_FILT_MAX ); - set_f( st->old_inp_16k, 0, L_INP_MEM ); - set_f( st->old_inp_12k8, 0, L_INP_MEM ); -#endif -#ifdef IVAS_FLOAT_FIXED - set16_fx( st->old_inp_12k8_fx, 0, L_INP_MEM ); - set16_fx( st->old_inp_16k_fx, 0, L_INP_MEM ); -#ifdef MSAN_FIX - st->exp_old_inp_12k8 = 0; - move16(); -#endif - st->exp_old_inp_16k = 0; - move16(); - st->input_buff_fx = st->hSignalBuf->input_buff; - st->input_buff32_fx = st->hSignalBuf->input_buff32; - set32_fx( st->hSignalBuf->input_buff32, 0, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); - st->q_inp32 = Q31; - move16(); - st->q_inp = Q15; - move16(); - st->q_old_inp = Q15; - move16(); - set16_fx( st->hSignalBuf->input_buff, 0, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); -#endif -// This part needs to be removed once fx fn is invoked// -#ifdef IVAS_FLOAT_FIXED - st->input_buff_fx = st->hSignalBuf->input_buff; - set16_fx( st->input_buff_fx, 0, add( L_FRAME48k, add( L_FRAME48k, NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ) ) ); - st->old_input_signal_fx = st->input_buff_fx; -#endif - if ( st->element_mode == EVS_MONO ) - { -#ifdef IVAS_FLOAT_FIXED - st->input_fx = st->input_buff_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC + NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ); -#else - st->input = st->input_buff + st->input_Fs / FRAMES_PER_SEC + NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); -#endif - } - else - { -#ifdef IVAS_FLOAT_FIXED - st->input_fx = st->input_buff_fx + st->input_Fs / FRAMES_PER_SEC; - st->input32_fx = st->input_buff32_fx + st->input_Fs / FRAMES_PER_SEC; -#else - st->input = st->input_buff + st->input_Fs / FRAMES_PER_SEC; -#endif - } - } - else - { - st->hSignalBuf = NULL; -#ifndef IVAS_FLOAT_FIXED - st->Bin_E_old = NULL; - st->mem_decim = NULL; - st->mem_decim16k = NULL; -#else - st->Bin_E_old_fx = NULL; - st->mem_decim_fx = NULL; - st->mem_decim16k_fx = NULL; -#endif -#ifndef IVAS_FLOAT_FIXED - st->old_inp_12k8 = NULL; - st->old_inp_16k = NULL; - st->buf_synth_flt = NULL; - st->buf_speech_enc_flt = NULL; - st->buf_speech_enc = NULL; -#endif -#ifndef IVAS_FLOAT_FIXED - st->buf_wspeech_enc_flt = NULL; -#endif - } - - /*-----------------------------------------------------------------* - * Noise estimator - *-----------------------------------------------------------------*/ - - if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) - { - if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ); - } -#ifdef IVAS_FLOAT_FIXED - noise_est_init_ivas_fx( st->hNoiseEst ); -#else - noise_est_init( st->hNoiseEst ); -#endif - } - else - { - st->hNoiseEst = NULL; - } - - /*-----------------------------------------------------------------* - * VAD - *-----------------------------------------------------------------*/ - - st->vad_flag = 1; - st->localVAD = 0; - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) && ( !vad_only_flag ) ) - { - if ( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); - } -#ifndef IVAS_FLOAT_FIXED - wb_vad_init( st->hVAD ); -#else -#ifndef MSAN_FIX - wb_vad_init_fx( st->hVAD ); -#else - wb_vad_init_ivas_fx( st->hVAD ); -#endif -#endif - } - else - { - st->hVAD = NULL; - } - st->Pos_relE_cnt = 20; - - /* CLDFB-based VAD */ - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hVAD_CLDFB = (VAD_CLDFB_HANDLE) malloc( sizeof( T_CldfbVadState ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CLDFB VAD\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - vad_init( st->hVAD_CLDFB ); -#else -#ifndef MSAN_FIX - wb_vad_init_fx( st->hVAD ); -#else - wb_vad_init_ivas_fx( st->hVAD ); -#endif -#endif - } - else - { - st->hVAD_CLDFB = NULL; - } - - /*-----------------------------------------------------------------* - * Speech/music classifier - *-----------------------------------------------------------------*/ - - if ( idchan == 0 || st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_MDCT || st->element_mode == EVS_MONO ) - { - if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - speech_music_clas_init( st->hSpMusClas ); -#else - speech_music_clas_init_ivas_fx( st->hSpMusClas ); -#endif - - st->sp_aud_decision0 = 0; - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - } - else - { - st->hSpMusClas = NULL; - } - - - /*-----------------------------------------------------------------* - * WB, SWB and FB bandwidth detector - *-----------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED - st->lt_mean_NB = 0; - st->lt_mean_WB = 0; - st->lt_mean_SWB = 0; -#else - st->lt_mean_NB_fx = 0; - st->lt_mean_WB_fx = 0; - st->lt_mean_SWB_fx = 0; -#endif - st->count_WB = BWD_COUNT_MAX; - st->count_SWB = BWD_COUNT_MAX; - st->count_FB = BWD_COUNT_MAX; - st->bwidth = st->max_bwidth; - st->last_input_bwidth = st->bwidth; - st->last_bwidth = st->bwidth; - st->last_bwidth_cng = st->bwidth; - st->bwidth_sw_cnt = 0; - - - /*-----------------------------------------------------------------* - * DTX - *-----------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED - st->lp_speech = 45.0f; /* Initialize the long-term active speech level in dB */ - st->lp_noise = 0.0f; -#else - st->lp_speech_fx = 11520; /* Initialize the long-term active speech level in dB : 45.0f in Q8 */ - st->lp_noise_fx = 0; -#endif - st->flag_noisy_speech_snr = 0; - st->fd_cng_reset_flag = 0; - st->cng_type = -1; -#ifndef IVAS_FLOAT_FIXED - st->bckr_tilt_lt_flt = 0.f; -#else - st->bckr_tilt_lt = 0; -#endif - st->active_cnt = 0; - - if ( ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO ) || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) - { - if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); - } -#ifndef IVAS_FLOAT_FIXED - dtx_enc_init( st, var_SID_rate_flag, interval_SID ); -#else - dtx_enc_init_fx( st, var_SID_rate_flag, interval_SID ); -#endif - } - else - { - st->hDtxEnc = NULL; - } - - /*-----------------------------------------------------------------* - * No other handles needed to be allocated for front-VAD structure - *-----------------------------------------------------------------*/ - - if ( vad_only_flag ) - { - st->hTdCngEnc = NULL; - st->cldfbAnaEnc = NULL; - st->hFdCngEnc = NULL; - st->hSC_VBR = NULL; - st->hAmrwb_IO = NULL; - st->hLPDmem = NULL; - st->hGSCEnc = NULL; - st->hBWE_TD = NULL; - st->cldfbSynTd = NULL; - st->hBWE_FD = NULL; - st->hHQ_core = NULL; - st->hRF = NULL; - st->hTECEnc = NULL; - st->hTcxEnc = NULL; - st->hTcxCfg = NULL; - st->hIGFEnc = NULL; - st->hPlcExt = NULL; - st->hTranDet = NULL; - - st->element_mode = IVAS_SCE; - st->idchan = 100; /* indicates hCoreCoderVAD */ - st->core = -1; - st->rf_mode = 0; - - return error; - } - - /*-----------------------------------------------------------------* - * LP-CNG - *-----------------------------------------------------------------*/ - - if ( ( ( idchan == 0 && st->Opt_DTX_ON && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == EVS_MONO ) && !( ism_mode == ISM_MODE_PARAM || ism_mode == ISM_MODE_DISC ) ) - { - if ( ( st->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - td_cng_enc_init( st->hTdCngEnc, st->Opt_DTX_ON, st->max_bwidth ); -#else - td_cng_enc_init_ivas_fx( st->hTdCngEnc, st->Opt_DTX_ON, st->max_bwidth ); -#endif - } - else - { - st->hTdCngEnc = NULL; - } - - /*-----------------------------------------------------------------* - * CLDFB & resampling tools parameters - *-----------------------------------------------------------------*/ - - if ( ( st->element_mode != IVAS_CPE_MDCT && idchan == 0 ) || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - else - { - st->cldfbAnaEnc = NULL; - } -#ifdef IVAS_FLOAT_FIXED - st->energyCoreLookahead_Fx = 0; - st->sf_energyCoreLookahead_Fx = 0; -#endif - - /*-----------------------------------------------------------------* - * SC-VBR parameters - *-----------------------------------------------------------------*/ - - if ( st->Opt_SC_VBR || st->element_mode == EVS_MONO ) - { - if ( ( st->hSC_VBR = (SC_VBR_ENC_HANDLE) malloc( sizeof( SC_VBR_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SC-VBR\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - sc_vbr_enc_init( st->hSC_VBR ); -#else - sc_vbr_enc_init_fx( st->hSC_VBR ); -#endif - } - else - { - st->hSC_VBR = NULL; - } - - st->last_Opt_SC_VBR = 0; - - - /*-----------------------------------------------------------------* - * AMR-WB IO initialization - *-----------------------------------------------------------------*/ - - if ( st->Opt_AMR_WB || st->element_mode == EVS_MONO ) - { - if ( ( st->hAmrwb_IO = (AMRWB_IO_ENC_HANDLE) malloc( sizeof( AMRWB_IO_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for AMR-WB IO\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - amr_wb_enc_init( st->hAmrwb_IO ); -#else - amr_wb_enc_init_fx( st->hAmrwb_IO ); -#endif - } - else - { - st->hAmrwb_IO = NULL; - } - - /*-----------------------------------------------------------------* - * ACELP LPDmem - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - LPDmem_enc_init( st->hLPDmem ); -#else - LPDmem_enc_init_ivas_fx( st->hLPDmem ); -#endif - } - else - { - st->hLPDmem = NULL; - } - - /*-----------------------------------------------------------------* - * parameters for AC coder type (GSC) - *-----------------------------------------------------------------*/ - - st->GSC_noisy_speech = 0; - st->GSC_IVAS_mode = 0; - - if ( ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) || st->element_mode == IVAS_CPE_TD ) - { - if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - GSC_enc_init_fx( st->hGSCEnc ); -#else - GSC_enc_init( st->hGSCEnc ); -#endif - } - else - { - st->hGSCEnc = NULL; - } - - /*-----------------------------------------------------------------* - * TBE parameters - *-----------------------------------------------------------------*/ - - if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - -#ifndef IVAS_FLOAT_FIXED - InitSWBencBuffer( st->hBWE_TD ); - ResetSHBbuffer_Enc( st->hBWE_TD ); -#else - InitSWBencBuffer_ivas_fx( st ); - ResetSHBbuffer_Enc_fx( st ); -#endif - } - else - { - st->hBWE_TD = NULL; - st->cldfbSynTd = NULL; - } - - /*-----------------------------------------------------------------* - * SWB BWE parameters - *-----------------------------------------------------------------*/ - - if ( idchan == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - fd_bwe_enc_init( st->hBWE_FD ); -#else - fd_bwe_enc_init_fx( st->hBWE_FD ); -#ifdef MSAN_FIX - st->Q_old_wtda = 0; - move16(); -#endif -#endif - } - else - { - st->hBWE_FD = NULL; - } - - /*-----------------------------------------------------------------* - * HQ core parameters - *-----------------------------------------------------------------*/ - - if ( st->element_mode != IVAS_CPE_TD && st->element_mode != IVAS_CPE_MDCT && idchan == 0 ) - { - if ( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); - } - - HQ_core_enc_init_fx( st->hHQ_core ); - } - else - { - st->hHQ_core = NULL; - } - - /* init memory for detect_transient(), used by HQ core and swb_bwe_enc */ -#ifndef IVAS_FLOAT_FIXED - st->old_hpfilt_in = 0.0f; - st->old_hpfilt_out = 0.0f; - st->EnergyLT = 0.0f; - st->Energy_Old = 0; -#else - st->old_hpfilt_in_fx = 0; - st->old_hpfilt_out_fx = 0; - st->EnergyLT_fx = 0; - st->Energy_Old_fx = 0; - st->EnergyLT_fx_exp = 30; -#endif - st->TransientHangOver = 0; -#ifdef IVAS_FLOAT_FIXED - st->last_enerBuffer_exp = 0; - move16(); -#endif - - /*-----------------------------------------------------------------* - * Channel-aware mode - *-----------------------------------------------------------------*/ - - if ( !st->Opt_RF_ON || ( st->bwidth != WB && st->bwidth != SWB ) || st->total_brate != ACELP_13k20 ) - { - st->rf_mode = 0; - } - else - { - st->rf_mode = st->Opt_RF_ON; - } - - st->rf_mode_last = st->rf_mode; - - if ( st->Opt_RF_ON || st->element_mode == EVS_MONO ) - { - if ( ( st->hRF = (RF_ENC_HANDLE) malloc( sizeof( RF_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for RF\n" ) ); - } - - /* initialize RF indice buffers */ -#ifndef IVAS_FLOAT_FIXED - reset_rf_indices( st->hRF, st->L_frame, &st->rf_target_bits_write ); -#else - reset_rf_indices_fx( st ); -#endif - } - else - { - st->hRF = NULL; - } - - /*-----------------------------------------------------------------* - * Temporal Envelope Coding - *-----------------------------------------------------------------*/ - - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hTECEnc = (TEC_ENC_HANDLE) malloc( sizeof( TEC_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TEC\n" ) ); - } - } - else - { - st->hTECEnc = NULL; - } - /* note: initialization done later in init_coder_ace_plus() */ - - /*-----------------------------------------------------------------* - * TCX core - *-----------------------------------------------------------------*/ - - // ToDo: reduction possible for MCT_CHAN_MODE_LFE channel - if ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) - { - if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); - } -#ifdef MSAN_FIX - // set_f( st->hTcxEnc->spectrum_long, 0, N_MAX ); - set32_fx( st->hTcxEnc->spectrum_long_fx, 0, N_MAX ); - st->hTcxEnc->spectrum_long_e = 0; -#endif // MSAN_FIX - - /* Share the memories for 2xTCX10/4xTCX5 and for TCX20 */ -#ifdef IVAS_FLOAT_FIXED - st->hTcxEnc->spectrum_fx[0] = st->hTcxEnc->spectrum_long_fx; - st->hTcxEnc->spectrum_fx[1] = st->hTcxEnc->spectrum_long_fx + N_TCX10_MAX; - st->hTcxEnc->spectrum_e[0] = st->hTcxEnc->spectrum_e[1] = 0; - move16(); - move16(); -#endif // IVAS_FLOAT_FIXED - - // st->hTcxEnc->spectrum[0] = st->hTcxEnc->spectrum_long; - // st->hTcxEnc->spectrum[1] = st->hTcxEnc->spectrum_long + N_TCX10_MAX; - -#ifdef MSAN_FIX - set32_fx( st->hTcxEnc->spectrum_fx[0], 0, N_TCX10_MAX ); - set32_fx( st->hTcxEnc->spectrum_fx[1], 0, N_TCX10_MAX ); -#endif -#ifdef IVAS_FLOAT_FIXED - set16_fx( st->hTcxEnc->old_out_fx, 0, L_FRAME32k ); - st->hTcxEnc->Q_old_out = 0; -#else - set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); -#endif - - /* MDCT selector */ -#ifndef IVAS_FLOAT_FIXED - MDCT_selector_reset( st->hTcxEnc ); -#else - MDCT_selector_reset_fx( st->hTcxEnc ); -#endif - - /* MDCT classifier */ -#ifndef IVAS_FLOAT_FIXED - MDCT_classifier_reset( st->hTcxEnc ); -#else - MDCT_classifier_reset_fx( st->hTcxEnc ); -#endif - - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); - } - } - else - { - st->hTcxEnc = NULL; - st->hTcxCfg = NULL; - } - - /*-----------------------------------------------------------------* - * IGF - *-----------------------------------------------------------------*/ - - igf_brate = st->total_brate; - if ( st->element_mode == IVAS_SCE && ( st_ivas->hEncoderConfig->ivas_format == ISM_FORMAT || st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) ) - { - igf_brate = st->total_brate - ISM_NB_BITS_METADATA_NOMINAL * FRAMES_PER_SEC; - } - else if ( st->element_mode == IVAS_CPE_DFT || ( st->element_mode == IVAS_SCE && ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT || - st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT || - st_ivas->hEncoderConfig->ivas_format == MC_FORMAT || - st_ivas->hEncoderConfig->ivas_format == MASA_FORMAT ) ) ) - { - /* use nominal bitrates for DFT Stereo and (O)SBA, same as in stereo_dft_config()/ivas_spar_config() */ - if ( element_brate == IVAS_13k2 ) - { - igf_brate = ACELP_9k60; - } - else if ( element_brate == IVAS_16k4 ) - { - igf_brate = ACELP_13k20; - } - else if ( element_brate == IVAS_24k4 ) - { - igf_brate = ACELP_16k40; - } - else if ( element_brate == IVAS_32k ) - { - igf_brate = ACELP_24k40; - } - } - else if ( st->element_mode == IVAS_CPE_MDCT ) - { - igf_brate = element_brate; - } - - if ( st->codec_mode == MODE2 || st->element_mode > EVS_MONO ) - { -#ifndef IVAS_FLOAT_FIXED - st->igf = getIgfPresent( st->element_mode, igf_brate, st->max_bwidth, st->rf_mode ); -#else - st->igf = getIgfPresent_fx( st->element_mode, igf_brate, st->max_bwidth, st->rf_mode ); -#endif - } - else - { - st->igf = 0; - } - - if ( ( idchan == 0 || st->element_mode == IVAS_CPE_MDCT ) && ( st->igf || st->element_mode == EVS_MONO ) ) - { - if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); - } - } - else - { - st->hIGFEnc = NULL; - } - - /*-----------------------------------------------------------------* - * Mode 2 initialization - *-----------------------------------------------------------------*/ - - st->last_sr_core = st->last_L_frame * FRAMES_PER_SEC; - - - /* PLC encoder */ - if ( st->element_mode == EVS_MONO ) - { - if ( ( st->hPlcExt = (PLC_ENC_EVS_HANDLE) malloc( sizeof( PLC_ENC_EVS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hPlcExt\n" ) ); - } - } - else - { - st->hPlcExt = NULL; - } - - /* Init Mode 2 core coder */ - -#ifndef IVAS_FLOAT_FIXED - st->last_totalNoise = 0.f; - set_f( st->totalNoise_increase_hist, 0.f, TOTALNOISE_HIST_SIZE ); -#else - st->last_totalNoise_fx = 0; - set16_fx( st->totalNoise_increase_hist_fx, 0, TOTALNOISE_HIST_SIZE ); -#endif - st->totalNoise_increase_len = 0; - - init_coder_ace_plus_ivas_fx( st, st->last_total_brate, 0 /* initialization value */ ); - - /*-----------------------------------------------------------------* - * FD-CNG encoder - *-----------------------------------------------------------------*/ - - if ( ( idchan == 0 && st->Opt_DTX_ON ) || st->element_mode == EVS_MONO || ( st->element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) - { - createFdCngEnc_fx( &st->hFdCngEnc ); - -#ifdef IVAS_FLOAT_FIXED - initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); -#else - initFdCngEnc( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale_flt ); -#endif - /* initialization for IVAS modes happens in first frame pre-processing */ - if ( st->element_mode == EVS_MONO ) - { -#ifdef IVAS_FLOAT_FIXED - Word32 total_brate; - - test(); - IF( st->rf_mode && EQ_32( st->total_brate, ACELP_13k20 ) ) - { - total_brate = ACELP_9k60; - move32(); - } - ELSE - { - total_brate = st->total_brate; - move32(); - } - configureFdCngEnc_ivas_fx( st->hFdCngEnc, st->bwidth, total_brate ); -#else - configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); -#endif - } - } - else - { - st->hFdCngEnc = NULL; - } - - /*-----------------------------------------------------------------* - * Transient detector - *-----------------------------------------------------------------*/ - - if ( ( st->hTranDet = (TRAN_DET_HANDLE) malloc( sizeof( TRAN_DET_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Transient Detection\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - IF( GT_16( st->element_mode, EVS_MONO ) ) - { - InitTransientDetection_ivas_fx( shl( div_l( st->input_Fs, FRAMES_PER_SEC ), 1 ), 0, st->hTranDet, 1 ); - } - ELSE - { - InitTransientDetection_ivas_fx( shl( div_l( st->input_Fs, FRAMES_PER_SEC ), 1 ), NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ), st->hTranDet, 0 ); - } -#else - - if ( st->element_mode > EVS_MONO ) - { - InitTransientDetection( (int16_t) ( st->input_Fs / FRAMES_PER_SEC ), 0, st->hTranDet, 1 ); - } - else - { - InitTransientDetection( (int16_t) ( st->input_Fs / FRAMES_PER_SEC ), NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ), st->hTranDet, 0 ); - } -#endif - - /*-----------------------------------------------------------------* - * IVAS parameters - *-----------------------------------------------------------------*/ - - st->tdm_LRTD_flag = 0; - st->cng_sba_flag = 0; - st->bits_frame_channel = 0; - st->side_bits_frame_channel = 0; -#ifdef IVAS_FLOAT_FIXED - st->Q_syn2 = 0; - move16(); - st->Q_syn = 0; - move16(); - set16_fx( st->Q_max, Q_MAX, L_Q_MEM ); - set16_fx( st->Q_max_16k, Q_MAX, L_Q_MEM ); - st->Q_old = 15; - move16(); - st->old_wsp_max = 0; - move16(); - st->old_wsp_shift = 0; - move16(); - st->sharpFlag = 0; - move16(); -#endif - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED +#include "prot_fx_enc.h" ivas_error init_encoder_ivas_fx( Encoder_State *st, /* i/o: state structure */ Encoder_Struct *st_ivas, /* i/o: encoder state structure */ @@ -1438,12 +196,6 @@ ivas_error init_encoder_ivas_fx( #if 1 // TODO: Float Initializations. To be removed later st->active_cnt = 0; -#ifndef IVAS_FLOAT_FIXED - st->old_hpfilt_in = 0.0f; - st->old_hpfilt_out = 0.0f; - st->EnergyLT = 0.0f; - st->Energy_Old = 0; -#endif #endif st->pst_mem_deemp_err_fx = 0; @@ -1568,12 +320,10 @@ ivas_error init_encoder_ivas_fx( move16(); st->min_alpha_fx = 32767; move16(); -#ifdef IVAS_FLOAT_FIXED st->exc_pe_fx = 0; move16(); st->Q_stat_noise = 15; move16(); -#endif /* FEC */ st->last_clas = UNVOICED_CLAS; move16(); @@ -1685,17 +435,6 @@ ivas_error init_encoder_ivas_fx( st->input_fx = st->input_buff_fx + frame_length; } #if 1 // TODO: To be removed later -#ifndef IVAS_FLOAT_FIXED - st->old_inp_12k8 = st->hSignalBuf->old_inp_12k8_flt; - st->buf_synth_flt = st->hSignalBuf->buf_synth_flt; - st->buf_speech_enc_flt = st->hSignalBuf->buf_speech_enc_flt; - st->buf_wspeech_enc_flt = st->hSignalBuf->buf_wspeech_enc_flt; -#endif -#ifndef IVAS_FLOAT_FIXED - set_f( st->old_inp_12k8, 0, L_INP_MEM ); - set_f( st->hSignalBuf->buf_speech_enc_flt, 0, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - set_f( st->hSignalBuf->buf_wspeech_enc_flt, 0, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320 ); -#endif #endif } ELSE @@ -1712,13 +451,6 @@ ivas_error init_encoder_ivas_fx( st->buf_wspeech_enc = NULL; st->input_buff_fx = NULL; #if 1 -#ifndef IVAS_FLOAT_FIXED - st->old_inp_12k8 = NULL; - st->old_inp_16k = NULL; - st->buf_synth_flt = NULL; - st->buf_speech_enc_flt = NULL; - st->buf_wspeech_enc_flt = NULL; -#endif #endif } @@ -1995,9 +727,6 @@ ivas_error init_encoder_ivas_fx( } amr_wb_enc_init_fx( st->hAmrwb_IO ); -#ifndef IVAS_FLOAT_FIXED - amr_wb_enc_init( st->hAmrwb_IO ); -#endif } ELSE { @@ -2350,12 +1079,6 @@ ivas_error init_encoder_ivas_fx( #endif /* Initialize TCX */ -#ifndef IVAS_FLOAT_FIXED - IF( hTcxEnc != NULL ) - { - st->preemph_fac = (Word16) floatToFixed( st->preemph_fac_flt, Q15 ); - } -#endif /* Initialize Signal Buffers */ Word16 shift = getScaleFactor16( st->old_inp_16k_fx, L_INP_MEM ); @@ -2424,7 +1147,6 @@ ivas_error init_encoder_ivas_fx( Word16 frame_length = BASOP_Util_Divide3232_Scale( st->input_Fs, FRAMES_PER_SEC, &temp ); frame_length = shr( frame_length, sub( 15, temp ) ); -#ifdef IVAS_FLOAT_FIXED IF( GT_16( st->element_mode, EVS_MONO ) ) { InitTransientDetection_ivas_fx( frame_length, 0, st->hTranDet, 1 ); @@ -2433,16 +1155,6 @@ ivas_error init_encoder_ivas_fx( { InitTransientDetection_ivas_fx( frame_length, NS2SA_FX2( st->input_Fs, DELAY_FIR_RESAMPL_NS ), st->hTranDet, 0 ); } -#else - if ( GT_16( st->element_mode, EVS_MONO ) ) - { - InitTransientDetection( frame_length, 0, st->hTranDet, 1 ); - } - else - { - InitTransientDetection( frame_length, NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ), st->hTranDet, 0 ); - } -#endif /*-----------------------------------------------------------------* * IVAS parameters @@ -2473,35 +1185,6 @@ ivas_error init_encoder_ivas_fx( return error; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------* - * LPDmem_enc_init() - * - * Initialization of ACELP LPDmem state variables - *-----------------------------------------------------------------------*/ - -void LPDmem_enc_init( - LPD_state_HANDLE hLPDmem /* i/o: LP memories */ -) -{ - set_zero( hLPDmem->syn_flt, 1 + M ); - set_f( hLPDmem->old_exc_flt, 0, L_EXC_MEM ); - hLPDmem->mem_w0_flt = 0.0f; - set_f( hLPDmem->mem_syn_flt, 0, M ); - set_f( hLPDmem->mem_syn1_flt, 0, M ); - set_f( hLPDmem->mem_syn2_flt, 0, M ); - set_f( hLPDmem->mem_syn3_flt, 0, M ); - set_zero( hLPDmem->mem_syn_r_flt, L_SYN_MEM ); - - hLPDmem->tilt_code_flt = 0.0f; - hLPDmem->gc_threshold_flt = 0.0f; - set_f( hLPDmem->dispMem_flt, 0, 8 ); - - return; -} -#endif /*-----------------------------------------------------------------------* diff --git a/lib_enc/inov_enc.c b/lib_enc/inov_enc.c index 80af44816..754e202e5 100644 --- a/lib_enc/inov_enc.c +++ b/lib_enc/inov_enc.c @@ -47,336 +47,3 @@ * * Encode the algebraic innovation *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void inov_encode( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t last_L_frame, /* i : length of the last frame */ - const int16_t coder_type, /* i : coding type */ - const int16_t bwidth, /* i : input signal bandwidth */ - const int16_t sharpFlag, /* i : formant sharpening flag */ - const int16_t i_subfr, /* i : subframe index */ - const int16_t tc_subfr, /* i : TC subframe index */ - const float *p_Aq, /* i : LP filter coefficients */ - const float gain_pit, /* i : adaptive excitation gain */ - float *cn, /* i/o: target vector in residual domain */ - const float *exc, /* i : pointer to excitation signal frame */ - float *h1, /* i/o: weighted filter input response */ - const float tilt_code, /* i : tilt of the excitation of previous subframe */ - const float pt_pitch, /* i : pointer to current subframe fractional pitch */ - const float *xn2, /* i : target vector for innovation search */ - float *code, /* o : algebraic excitation */ - float *y2, /* o : zero-memory filtered algebraic excitation */ - int16_t *unbits, /* o : number of unused bits for EVS_PI */ - const int16_t L_subfr /* i : subframe length */ -) -{ - float dn[2 * L_SUBFR]; /* Correlation between xn2 and h1 */ - int16_t nBits, cmpl_flag; - int16_t k; - float g1, g2; - float cn2[L_SUBFR]; - float Rw[L_SUBFR]; - int16_t i, acelpautoc; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( L_frame == L_FRAME ) - { - g1 = FORMANT_SHARPENING_G1_FLT; - g2 = FORMANT_SHARPENING_G2_FLT; - } - else - { - g1 = FORMANT_SHARPENING_G1_16k_FLT; - g2 = FORMANT_SHARPENING_G2_16k_FLT; - } - - /*----------------------------------------------------------------* - * Update target vector for codebook search in residual domain - * Preemphasize the impulse response and include fixed-gain pitch contribution into impulse resp. h1[] (pitch sharpenning) - * Correlation between target xn2[] and impulse response h1[] - *----------------------------------------------------------------*/ - - if ( core_brate > ACELP_13k20 && !Opt_AMR_WB && L_subfr == L_SUBFR ) - { - acelpautoc = 1; - - cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, h1, tilt_code, pt_pitch, L_SUBFR ); - - corr_xh( h1, Rw, h1, L_SUBFR ); - - for ( k = 0; k < L_SUBFR; k++ ) - { - cn2[k] = xn2[k]; - - for ( i = 0; i < k; i++ ) - { - cn2[k] -= cn2[i] * h1[k - i]; - } - } - - E_ACELP_toeplitz_mul( Rw, cn2, dn ); - mvr2r( cn2, cn, L_SUBFR ); - } - else - { - acelpautoc = 0; - - updt_tar( cn, cn, &exc[i_subfr], gain_pit, L_subfr ); - - cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, h1, tilt_code, pt_pitch, L_subfr ); - - corr_xh( xn2, dn, h1, L_subfr ); - } - - /*-----------------------------------------------------------------* - * Set complexity reduction flag to limit the number of iterations - * in algebraic innovation search - *-----------------------------------------------------------------*/ - - cmpl_flag = 0; - - if ( st->acelp_cfg.fcb_mode ) - { - /* set number of iterations in TD stereo, secondary channel */ - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - cmpl_flag = 1; - } - } - else - { - if ( L_frame == L_FRAME && coder_type == TRANSITION ) - { - if ( core_brate == ACELP_8k00 && i_subfr == 0 && tc_subfr < L_SUBFR ) - { - cmpl_flag = 3; - } - - if ( core_brate == ACELP_11k60 && ( ( i_subfr == 0 && tc_subfr < L_SUBFR ) || tc_subfr == TC_0_0 || ( i_subfr == 3 * L_SUBFR && tc_subfr == TC_0_64 ) ) ) - { - cmpl_flag = 3; - } - - if ( ( core_brate == ACELP_13k20 || core_brate == ACELP_12k15 ) && ( ( i_subfr == 0 && tc_subfr < L_SUBFR ) || tc_subfr <= TC_0_64 ) ) - { - cmpl_flag = 3; - } - } - - if ( L_frame == L_FRAME16k ) - { - if ( core_brate <= ACELP_32k ) - { - cmpl_flag = 4; - - if ( coder_type == TRANSITION && bwidth > WB ) - { - if ( i_subfr <= L_SUBFR ) - { - cmpl_flag -= 1; - } - else - { - cmpl_flag -= 2; - } - } - } - else if ( core_brate <= ACELP_48k ) - { - cmpl_flag = 3; - - if ( coder_type == TRANSITION ) - { - if ( i_subfr <= L_SUBFR ) - { - cmpl_flag -= 1; - } - else - { - cmpl_flag -= 2; - } - } - } - else - { - cmpl_flag = 4; - - if ( coder_type == TRANSITION ) - { - if ( i_subfr <= L_SUBFR ) - { - cmpl_flag -= 1; - } - else - { - cmpl_flag -= 2; - } - } - } - - if ( coder_type == INACTIVE ) - { - cmpl_flag = 4; - } - } - - /* reduce number of iterations in a frame where there is an internal sampling rate switch in order not to increase the WC complexity */ - if ( L_frame != st->last_L_frame && core_brate > ACELP_13k20 && ( core_brate < ACELP_32k || bwidth == WB ) ) - { - if ( cmpl_flag > 1 ) - { - cmpl_flag--; - } - } - } - - /*-----------------------------------------------------------------* - * Find and encode the algebraic innovation - *-----------------------------------------------------------------*/ - - set_f( y2, 0, L_SUBFR ); - - if ( !Opt_AMR_WB ) - { - if ( st->acelp_cfg.fcb_mode ) - { - if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] < ACELP_FIXED_CDK_NB ) - { - int16_t wordcnt, bitcnt; - int16_t prm[8]; - - if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr] >= 0 ) - { - if ( L_subfr == 2 * L_SUBFR ) - { - nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_subfr]; - - if ( nBits == 8 ) - { - acelp_1t64( hBstr, dn, h1, code, y2, L_subfr ); - } - else - { - acelp_fast( hBstr, nBits, dn, cn, h1, code, y2, L_subfr ); - } - } - else if ( ( st->idchan == 1 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 7 ) || ( st->idchan == 0 && st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] <= 3 ) ) - { - if ( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] == 0 ) - { - acelp_1t64( hBstr, dn, h1, code, y2, L_subfr ); - } - else - { - acelp_fast( hBstr, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], dn, cn, h1, code, y2, L_SUBFR ); - } - } - else - { - E_ACELP_4t( dn, cn, h1, Rw, acelpautoc, code, st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR], prm, L_frame, last_L_frame, st->total_brate, i_subfr, cmpl_flag ); - - wordcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) >> 4; - bitcnt = ACELP_FIXED_CDK_BITS( st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR] ) & 15; - - for ( i = 0; i < wordcnt; i++ ) - { - push_indice( hBstr, IND_ALG_CDBK_4T64, prm[i], 16 ); - } - if ( bitcnt ) - { - push_indice( hBstr, IND_ALG_CDBK_4T64, prm[i], bitcnt ); - } - - /* Generate weighted code */ - set_f( y2, 0.0f, L_SUBFR ); - for ( i = 0; i < L_SUBFR; i++ ) - { - /* Code is sparse, so check which samples are non-zero */ - if ( code[i] != 0 ) - { - for ( k = 0; k < L_SUBFR - i; k++ ) - { - y2[i + k] += code[i] * h1[k]; - } - } - } - } - } - else - { - set_f( code, 0.0f, L_SUBFR ); - set_f( y2, 0.0f, L_SUBFR ); - } - } - } - else - { - nBits = st->acelp_cfg.fixed_cdk_index[i_subfr / L_SUBFR]; - - if ( nBits == 7 ) - { - acelp_1t64( hBstr, dn, h1, code, y2, L_SUBFR ); - } - else if ( nBits == 12 ) - { - acelp_2t32( hBstr, dn, h1, code, y2 ); - } - else - { - *unbits += acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, nBits, cmpl_flag, Opt_AMR_WB ); - } - } - } - else - { - if ( core_brate == ACELP_6k60 ) - { - acelp_2t32( hBstr, dn, h1, code, y2 ); - } - else if ( ( core_brate == ACELP_8k85 ) ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 20, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_12k65 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 36, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_14k25 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 44, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_15k85 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 52, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_18k25 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 64, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_19k85 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 72, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_23k05 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 88, cmpl_flag, Opt_AMR_WB ); - } - else if ( core_brate == ACELP_23k85 ) - { - acelp_4t64( hBstr, dn, cn, h1, Rw, acelpautoc, code, y2, 88, cmpl_flag, Opt_AMR_WB ); - } - } - - /*----------------------------------------------------------------* - * Pitch sharpening - *----------------------------------------------------------------*/ - - cb_shape( 1, 1, 0, sharpFlag, 0, g1, g2, p_Aq, code, tilt_code, pt_pitch, L_subfr ); - - return; -} -#endif diff --git a/lib_enc/inov_enc_fx.c b/lib_enc/inov_enc_fx.c index 4016ecb4f..725cad913 100644 --- a/lib_enc/inov_enc_fx.c +++ b/lib_enc/inov_enc_fx.c @@ -422,7 +422,6 @@ Word16 inov_encode_fx( return stack_pulses; } -#ifdef IVAS_FLOAT_FIXED Word16 inov_encode_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word32 core_brate, /* i : core bitrate */ @@ -823,5 +822,3 @@ Word16 inov_encode_ivas_fx( return stack_pulses; } - -#endif diff --git a/lib_enc/isf_enc_amr_wb.c b/lib_enc/isf_enc_amr_wb.c index 62df18647..08af81cf8 100644 --- a/lib_enc/isf_enc_amr_wb.c +++ b/lib_enc/isf_enc_amr_wb.c @@ -41,484 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define DICO1_NS_19b 16 /* codebook dimensions for SID ISF quantizers */ -#define DICO2_NS_19b 16 -#define DICO3_NS_19b 16 -#define DICO4_NS_19b 8 -#define DICO5_NS_19b 16 - -#define DICO1_NS_28b 64 -#define DICO2_NS_28b 64 -#define DICO3_NS_28b 64 -#define DICO4_NS_28b 32 -#define DICO5_NS_28b 32 - -#define N_SURV_MAX 4 /* maximum number of survivors */ - -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void qisf_ns_28b( BSTR_ENC_HANDLE hBstr, float *isf ); -static void qisf_2s_46b( BSTR_ENC_HANDLE hBstr, float *isf, int16_t nb_surv, float *mem_AR, float *mem_MA ); -static void qisf_2s_36b( BSTR_ENC_HANDLE hBstr, float *isf, int16_t nb_surv, float *mem_AR, float *mem_MA ); -static void VQ_stage1( const float *x, const float *dico, const int16_t dim, const int16_t dico_size, int16_t *index, const int16_t surv ); -static int16_t sub_VQ( float *x, const float *dico, const int16_t dim, const int16_t dico_size, float *distance ); - - -/*-------------------------------------------------------------------* - * isf_enc_amr_wb() - * - * Quantization of ISF parameters in AMR-WB IO mode - *-------------------------------------------------------------------*/ - -void isf_enc_amr_wb( - Encoder_State *st, /* i/o: state structure */ - float *isf_new, /* i/o: quantized ISF vector */ - float *isp_new, /* i/o: ISP vector to quantize/quantized */ - float *Aq /* o : quantized A(z) for 4 subframes */ -) -{ - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*---------------------------------* - * ISF quantization of SID frames - *---------------------------------*/ - - if ( st->core_brate == SID_1k75 ) - { - qisf_ns_28b( hBstr, isf_new ); - - reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); - - isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); - - /* return if SID frame (conversion to A(z) done in the calling function) */ - return; - } - - /* check resonance for pitch clipping algorithm */ - gp_clip_test_lsf( st->element_mode, st->core_brate, isf_new, st->clip_var, 1 ); - - /*---------------------------------------* - * ISF quantization of all other frames - *---------------------------------------*/ - - if ( st->core_brate == ACELP_6k60 ) - { - qisf_2s_36b( hBstr, isf_new, 4, st->mem_AR, st->mem_MA ); - } - else if ( st->core_brate >= ACELP_8k85 ) - { - qisf_2s_46b( hBstr, isf_new, 4, st->mem_AR, st->mem_MA ); - } - - reorder_isf( isf_new, ISF_GAP, M, INT_FS_12k8 ); - - /* convert quantized ISFs back to ISPs */ - isf2isp( isf_new, isp_new, M, INT_FS_12k8 ); - - /*------------------------------------------------------------------* - * ISP interpolation - * A(z) calculation - *------------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( isf_new, st->lsf_old, M ); - mvr2r( isp_new, st->lsp_old, M ); - } - - int_lsp( L_FRAME, st->lsp_old, isp_new, Aq, M, interpol_isp_amr_wb, 1 ); - - /*------------------------------------------------------------------* - * Calculate ISF stability (distance between old ISF and current ISF) - *------------------------------------------------------------------*/ - - if ( st->last_core_brate != SID_1k75 ) - { - st->stab_fac = lsf_stab( isf_new, st->lsf_old, 1, st->L_frame ); - } - - return; -} - -/*-------------------------------------------------------------------* - * qisf_ns_28b() - * - * ISF quantizer for SID frames (only in AMR-WB IO mode) - *-------------------------------------------------------------------*/ - -static void qisf_ns_28b( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float *isf /* i/o: unquantized/quantized ISF vector */ -) -{ - int16_t i, indice[5]; - float tmp; - - for ( i = 0; i < M; i++ ) - { - isf[i] -= mean_isf_noise_amr_wb[i]; - } - - indice[0] = sub_VQ( &isf[0], dico1_ns_28b, 2, DICO1_NS_28b, &tmp ); - indice[1] = sub_VQ( &isf[2], dico2_ns_28b, 3, DICO2_NS_28b, &tmp ); - indice[2] = sub_VQ( &isf[5], dico3_ns_28b, 3, DICO3_NS_28b, &tmp ); - indice[3] = sub_VQ( &isf[8], dico4_ns_28b, 4, DICO4_NS_28b, &tmp ); - indice[4] = sub_VQ( &isf[12], dico5_ns_28b + 4, 4, DICO5_NS_28b - 1, &tmp ) + 1; /* First vector has a problem -> do not allow */ - - /* write indices to array */ - push_indice( hBstr, IND_ISF_0_0, indice[0], 6 ); - push_indice( hBstr, IND_ISF_0_1, indice[1], 6 ); - push_indice( hBstr, IND_ISF_0_2, indice[2], 6 ); - push_indice( hBstr, IND_ISF_0_3, indice[3], 5 ); - push_indice( hBstr, IND_ISF_0_4, indice[4], 5 ); - - /* decoding the ISFs */ - disf_ns_28b( indice, isf ); - - return; -} - -/*---------------------------------------------------------------------* - * qisf_2s_36b() - * - * ISF quantizer for AMR-WB 6k60 frames - * - * The ISF vector is quantized using two-stage MA-prediction VQ with split-by-2 - * in 1st stage and split-by-3 in the second stage. - *---------------------------------------------------------------------*/ - -static void qisf_2s_36b( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float *isf, /* i/o: unquantized/quantized ISF vector */ - int16_t nb_surv, /* i : number of survivors (1, 2, 3 or 4) */ - float *mem_AR, /* o : quantizer memory for AR model */ - float *mem_MA /* i/o: quantizer memory for MA model */ -) -{ - int16_t i, k, indice[5], tmp_ind[2]; - int16_t surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ - float temp, min_err, distance, isf2[M]; - - /*------------------------------------------------------------------------* - * Subtract mean - *------------------------------------------------------------------------*/ - - for ( i = 0; i < M; i++ ) - { - isf[i] -= mean_isf_amr_wb[i] + MU_MA * mem_MA[i]; - } - - /*------------------------------------------------------------------------* - * Quantize ISFs 0 - 8 - *------------------------------------------------------------------------*/ - - VQ_stage1( &isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv ); - - distance = 1.0e30f; - if ( nb_surv > N_SURV_MAX ) - { - nb_surv = N_SURV_MAX; - } - - for ( k = 0; k < nb_surv; k++ ) - { - for ( i = 0; i < 9; i++ ) - { - isf2[i] = isf[i] - dico1_isf[i + surv1[k] * 9]; - } - - tmp_ind[0] = sub_VQ( &isf2[0], dico21_isf_36b, 5, SIZE_BK21_36b, &min_err ); - temp = min_err; - - tmp_ind[1] = sub_VQ( &isf2[5], dico22_isf_36b, 4, SIZE_BK22_36b, &min_err ); - temp += min_err; - - if ( temp < distance ) - { - distance = temp; - indice[0] = surv1[k]; - for ( i = 0; i < 2; i++ ) - { - indice[i + 2] = tmp_ind[i]; - } - } - } - - /*------------------------------------------------------------------------* - * Quantize ISFs 9 - 15 - *------------------------------------------------------------------------*/ - - VQ_stage1( &isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv ); - - distance = 1.0e30f; - for ( k = 0; k < nb_surv; k++ ) - { - for ( i = 0; i < 7; i++ ) - { - isf2[9 + i] = isf[9 + i] - dico2_isf[i + surv1[k] * 7]; - } - - tmp_ind[0] = sub_VQ( &isf2[9], dico23_isf_36b, 3, SIZE_BK23_36b, &min_err ); - temp = min_err; - if ( temp < distance ) - { - distance = temp; - indice[1] = surv1[k]; - indice[4] = tmp_ind[0]; - } - } - - /*------------------------------------------------------------------------* - * write indices to array - *------------------------------------------------------------------------*/ - - push_indice( hBstr, IND_ISF_0_0, indice[0], 8 ); - push_indice( hBstr, IND_ISF_0_1, indice[1], 8 ); - push_indice( hBstr, IND_ISF_1_0, indice[2], 7 ); - push_indice( hBstr, IND_ISF_1_1, indice[3], 7 ); - push_indice( hBstr, IND_ISF_1_2, indice[4], 6 ); - - /*------------------------------------------------------------------------* - * decoding the ISFs - *------------------------------------------------------------------------*/ - - disf_2s_36b( indice, isf, mem_AR, mem_MA ); - - return; -} - - -/*-------------------------------------------------------------------* - * qisf_2s_46b() - * - * ISF quantizer for all other AMR-WB frames - * - * The ISF vector is quantized using two-stage VQ with split-by-2 - * in 1st stage and split-by-5 in the second stage. - *-------------------------------------------------------------------*/ - -static void qisf_2s_46b( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float *isf, /* i/o: unquantized/quantized ISF vector */ - int16_t nb_surv, /* i : number of survivors (1, 2, 3 or 4) */ - float *mem_AR, /* o : quantizer memory for AR model */ - float *mem_MA /* i/o: quantizer memory for MA model */ -) -{ - int16_t i, k, indice[7], tmp_ind[5]; - int16_t surv1[N_SURV_MAX]; /* indices of survivors from 1st stage */ - float temp, min_err, distance, isf2[M]; - - - /*------------------------------------------------------------------------* - * Subtract mean - *------------------------------------------------------------------------*/ - - for ( i = 0; i < M; i++ ) - { - isf[i] -= mean_isf_amr_wb[i] + MU_MA * mem_MA[i]; - } - - /*------------------------------------------------------------------------* - * Quantize ISFs 0 - 8 - *------------------------------------------------------------------------*/ - - VQ_stage1( &isf[0], dico1_isf, 9, SIZE_BK1, surv1, nb_surv ); - - distance = 1.0e30f; - if ( nb_surv > N_SURV_MAX ) - { - nb_surv = N_SURV_MAX; - } - - for ( k = 0; k < nb_surv; k++ ) - { - for ( i = 0; i < 9; i++ ) - { - isf2[i] = isf[i] - dico1_isf[i + surv1[k] * 9]; - } - - tmp_ind[0] = sub_VQ( &isf2[0], dico21_isf_46b, 3, SIZE_BK21, &min_err ); - temp = min_err; - tmp_ind[1] = sub_VQ( &isf2[3], dico22_isf_46b, 3, SIZE_BK22, &min_err ); - temp += min_err; - tmp_ind[2] = sub_VQ( &isf2[6], dico23_isf_46b, 3, SIZE_BK23, &min_err ); - temp += min_err; - if ( temp < distance ) - { - distance = temp; - indice[0] = surv1[k]; - for ( i = 0; i < 3; i++ ) - { - indice[i + 2] = tmp_ind[i]; - } - } - } - - /*------------------------------------------------------------------------* - * Quantize ISFs 9 - 15 - *------------------------------------------------------------------------*/ - - VQ_stage1( &isf[9], dico2_isf, 7, SIZE_BK2, surv1, nb_surv ); - - distance = 1.0e30f; - for ( k = 0; k < nb_surv; k++ ) - { - for ( i = 0; i < 7; i++ ) - { - isf2[9 + i] = isf[9 + i] - dico2_isf[i + surv1[k] * 7]; - } - tmp_ind[0] = sub_VQ( &isf2[9], dico24_isf_46b, 3, SIZE_BK24, &min_err ); - temp = min_err; - - tmp_ind[1] = sub_VQ( &isf2[12], dico25_isf_46b, 4, SIZE_BK25, &min_err ); - temp += min_err; - - if ( temp < distance ) - { - - distance = temp; - indice[1] = surv1[k]; - for ( i = 0; i < 2; i++ ) - { - indice[i + 5] = tmp_ind[i]; - } - } - } - - /*------------------------------------------------------------------------* - * write indices to array - *------------------------------------------------------------------------*/ - - push_indice( hBstr, IND_ISF_0_0, indice[0], 8 ); - push_indice( hBstr, IND_ISF_0_1, indice[1], 8 ); - push_indice( hBstr, IND_ISF_1_0, indice[2], 6 ); - push_indice( hBstr, IND_ISF_1_1, indice[3], 7 ); - push_indice( hBstr, IND_ISF_1_2, indice[4], 7 ); - push_indice( hBstr, IND_ISF_1_3, indice[5], 5 ); - push_indice( hBstr, IND_ISF_1_4, indice[6], 5 ); - - /*------------------------------------------------------------------------* - * decoding the ISFs - *------------------------------------------------------------------------*/ - - disf_2s_46b( indice, isf, mem_AR, mem_MA ); - - return; -} - -/*-------------------------------------------------------------------* - * VQ_stage1() - * - * 1st stage of ISF quantization - *-------------------------------------------------------------------*/ - -static void VQ_stage1( - const float *x, /* i : ISF vector */ - const float *dico, /* i : ISF codebook */ - const int16_t dim, /* i : codebook dimension */ - const int16_t dico_size, /* i : codebook size */ - int16_t *index, /* o : indices of best vector candidates */ - const int16_t surv /* i : nb of surviving best candidates */ -) -{ - float dist_min[N_SURV_MAX]; - float dist, temp; - const float *p_dico; - int16_t i, j, k, l; - - - for ( i = 0; i < surv; i++ ) - { - dist_min[i] = 1.0e30f; - index[i] = i; - } - - p_dico = dico; - - for ( i = 0; i < dico_size; i++ ) - { - dist = 0.0; - for ( j = 0; j < dim; j++ ) - { - temp = x[j] - *p_dico++; - dist += temp * temp; - } - - for ( k = 0; k < surv; k++ ) - { - if ( dist < dist_min[k] ) - { - for ( l = surv - 1; l > k; l-- ) - { - dist_min[l] = dist_min[l - 1]; - index[l] = index[l - 1]; - } - dist_min[k] = dist; - index[k] = i; - break; - } - } - } - return; -} - -/*-------------------------------------------------------------------* - * sub_VQ() - * - * Quantization of a subvector in Split-VQ of ISFs - *-------------------------------------------------------------------*/ - -/*! r: selected codebook vector index */ -static int16_t sub_VQ( - float *x, /* i/o: ISF vector */ - const float *dico, /* i : ISF codebook */ - const int16_t dim, /* i : codebook dimension */ - const int16_t dico_size, /* i : codebook size */ - float *distance /* o : quantization error (min. distance) */ -) -{ - float dist_min, dist, temp; - const float *p_dico; - int16_t i, j, index; - - - dist_min = 1.0e30f; - p_dico = dico; - - index = 0; - for ( i = 0; i < dico_size; i++ ) - { - dist = 0.0f; - for ( j = 0; j < dim; j++ ) - { - temp = x[j] - *p_dico++; - dist += temp * temp; - } - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - - *distance = dist_min; - - /* Reading the selected vector */ - p_dico = &dico[index * dim]; - for ( j = 0; j < dim; j++ ) - { - x[j] = *p_dico++; - } - return index; -} -#endif diff --git a/lib_enc/ivas_agc_enc.c b/lib_enc/ivas_agc_enc.c index f13a8ba89..761542c4f 100644 --- a/lib_enc/ivas_agc_enc.c +++ b/lib_enc/ivas_agc_enc.c @@ -38,25 +38,18 @@ #include #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "basop_util.h" -#endif /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #define AGC_MIN_DELTA_FX 1 // q31 #define TWO_IN_Q29 1073741824 #define ONE_MINUS_M_DELTA_PROD_FLT_FC 1073741824 // Q15 -#else -#define AGC_MIN_DELTA ( 4.656612873077393e-10f ) /*2^-31*/ -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ceil_fx( Word16 inp, Word16 Q ); static Word32 pow32_fx( Word16 inp, Word16 indx ); static Word16 BASOP_Util_Cmp_Mant32Exp_sat( Word32 a_m, Word16 a_e, Word32 b_m, Word16 b_e ); @@ -206,7 +199,6 @@ Word32 pow32_fx( Word16 inp, Word16 indx ) } return temp_1; } -#endif /*-----------------------------------------------------------------------------------------* @@ -216,20 +208,6 @@ Word32 pow32_fx( Word16 inp, Word16 indx ) *-----------------------------------------------------------------------------------------*/ /*! r: AGC enable flag */ -#ifndef IVAS_FLOAT_FIXED -Word16 ivas_agc_enc_get_flag( - const Word16 nchan_transport /* i : number of transport channels */ -) -{ - Word16 agc_flag; - - /* AGC is enabled only if there is one transport channel. */ - agc_flag = (Word16) ( EQ_16( nchan_transport, 1 ) ); - - - return agc_flag; -} -#else Word16 ivas_agc_enc_get_flag( const Word16 nchan_transport /* i : number of transport channels */ ) @@ -247,7 +225,6 @@ Word16 ivas_agc_enc_get_flag( return agc_flag; } -#endif /*-----------------------------------------------------------------------------------------* @@ -256,48 +233,6 @@ Word16 ivas_agc_enc_get_flag( * AGC encoder initialization *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_agc_enc_init( - ivas_agc_enc_state_t *hAgcEnc, - const int16_t input_frame, - const int16_t nchan_inp, - const uint16_t delay ) -{ - int16_t i; - ivas_agc_enc_chan_state_t *ptrG = hAgcEnc->gain_state; - ivas_agc_chan_data_t *ptr = hAgcEnc->gain_data; - - hAgcEnc->agc_com.in_delay = delay; - hAgcEnc->agc_com.num_coeff = FOA_CHANNELS; - - ivas_agc_calcGainParams( &hAgcEnc->agc_com.absEmin, &hAgcEnc->agc_com.betaE, &hAgcEnc->agc_com.maxAttExp, hAgcEnc->agc_com.num_coeff ); - - ivas_agc_initWindowFunc( hAgcEnc->agc_com.winFunc, input_frame - hAgcEnc->agc_com.in_delay ); - - hAgcEnc->minDelta = AGC_MIN_DELTA; - hAgcEnc->smFact = 0.1f; - - for ( i = 0; i < nchan_inp; i++ ) - { - /* gain_state */ - ptrG->lastExp = 0; - ptrG->prevExp = 0; - ptrG->lastGain = 1.f; - ptrG->lastMaxAbs = 0.f; - ptrG->gainExpVal = 0; - ptrG->MaxAbsVal_del = 0.f; - ptrG->MaxAbsValIdx_del = 0; - ptrG++; - - /* gain_data */ - ptr->absGainExp = hAgcEnc->agc_com.absEmin; - ptr->absGainExpCurr = hAgcEnc->agc_com.absEmin; - ptr++; - } - - return; -} -#else static void ivas_agc_enc_init_fx( ivas_agc_enc_state_t *hAgcEnc, const Word16 input_frame, @@ -357,7 +292,6 @@ static void ivas_agc_enc_init_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -366,46 +300,6 @@ static void ivas_agc_enc_init_fx( * Allocate and initialize SPAR AGC encoder handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_agc_enc_open( - ivas_agc_enc_state_t **hAgcEnc, /* i/o: SPAR AGC encoder handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t nchan_inp /* i : number of input channels */ -) -{ - ivas_agc_enc_state_t *hAgc; - int16_t input_frame, delay; - - if ( ( hAgc = (ivas_agc_enc_state_t *) malloc( sizeof( ivas_agc_enc_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); - } - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - delay = NS2SA( input_Fs, ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) ); - - if ( ( hAgc->agc_com.winFunc = (float *) malloc( sizeof( float ) * ( input_frame - delay ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); - } - - if ( ( hAgc->gain_state = (ivas_agc_enc_chan_state_t *) malloc( sizeof( ivas_agc_enc_chan_state_t ) * nchan_inp ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); - } - - if ( ( hAgc->gain_data = (ivas_agc_chan_data_t *) malloc( sizeof( ivas_agc_chan_data_t ) * nchan_inp ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR AGC encoder" ); - } - - ivas_agc_enc_init( hAgc, input_frame, nchan_inp, delay ); - - *hAgcEnc = hAgc; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_spar_agc_enc_open_fx( ivas_agc_enc_state_t **hAgcEnc, /* i/o: SPAR AGC encoder handle */ const Word32 input_Fs, /* i : input sampling rate */ @@ -444,7 +338,6 @@ ivas_error ivas_spar_agc_enc_open_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -453,35 +346,6 @@ ivas_error ivas_spar_agc_enc_open_fx( * Deallocate SPAR AGC encoder handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spar_agc_enc_close( - ivas_agc_enc_state_t **hAgcEnc /* i/o: SPAR AGC encoder handle */ -) -{ - ivas_agc_enc_state_t *hAgc; - - if ( hAgcEnc == NULL || *hAgcEnc == NULL ) - { - return; - } - - hAgc = *hAgcEnc; - - free( hAgc->agc_com.winFunc ); - hAgc->agc_com.winFunc = NULL; - - free( hAgc->gain_state ); - hAgc->gain_state = NULL; - - free( hAgc->gain_data ); - hAgc->gain_data = NULL; - - free( *hAgcEnc ); - *hAgcEnc = NULL; - - return; -} -#else void ivas_spar_agc_enc_close_fx( ivas_agc_enc_state_t **hAgcEnc /* i/o: SPAR AGC encoder handle */ ) @@ -510,7 +374,6 @@ void ivas_spar_agc_enc_close_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -519,238 +382,6 @@ void ivas_spar_agc_enc_close_fx( * AGC encoder *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_agc_enc_process( - ivas_agc_enc_state_t *hAgcEnc, /* i/o: AGC encoder handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ - float **ppPcm_in, /* i : input audio channels */ - float **ppPcm_out, /* o : output audio channels */ - const int16_t n_channels, /* i : number of channels */ - const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ -) -{ - int16_t i, j, idx, input_frame, offset; - int16_t per_ch_bit[FOA_CHANNELS], AGC_flag; - int16_t extendedExpVal = FALSE; - int16_t isGainAdjusted; - float gain; - ivas_agc_enc_state_t *pState = hAgcEnc; - - input_frame = (int16_t) ( hEncoderConfig->input_Fs / FRAMES_PER_SEC ); - offset = input_frame - pState->agc_com.in_delay; - - AGC_flag = 0; - - for ( i = 0; i < n_channels; i++ ) - { - float sampleAbsVal; - int16_t isClipped = FALSE; - int16_t clippedIdx = 0; - int16_t MaxAbsValIdx = 0; - float MaxAbsVal = pState->gain_state[i].MaxAbsVal_del; - float predMaxAbsVal = fabsf( ppPcm_in[i][offset] ); - - for ( j = 0; j < input_frame; j++ ) - { - sampleAbsVal = fabsf( ppPcm_in[i][j] ); - - if ( sampleAbsVal > MaxAbsVal ) - { - MaxAbsVal = sampleAbsVal; - MaxAbsValIdx = j; - } - - if ( j > offset ) - { - if ( sampleAbsVal > predMaxAbsVal ) - { - predMaxAbsVal = sampleAbsVal; - } - } - - ppPcm_out[i][j] = ppPcm_in[i][j] * pState->gain_state[i].lastGain; - - if ( !isClipped ) - { - if ( ( ppPcm_out[i][j] > ( 1.f - pState->minDelta ) * PCM16_TO_FLT_FAC ) || ( ppPcm_out[i][j] < MIN16B_FLT ) ) - { - clippedIdx = j; - isClipped = TRUE; - } - } - } - - pState->gain_state[i].MaxAbsVal_del = predMaxAbsVal; - - isGainAdjusted = FALSE; - if ( !isClipped ) - { - - if ( pState->gain_state[i].lastExp == AGC_EMAX || MaxAbsVal < FLT_MIN ) - { - pState->gain_state[i].gainExpVal = 0; - pState->gain_state[i].prevExp = pState->gain_state[i].lastExp; - isGainAdjusted = TRUE; - } - else - { - float smoothedMaxAbsVal, maxGain; - smoothedMaxAbsVal = pState->smFact * MaxAbsVal + ( 1.f - pState->smFact ) * pState->gain_state[i].lastMaxAbs; - pState->gain_state[i].lastMaxAbs = smoothedMaxAbsVal; - - maxGain = max( smoothedMaxAbsVal, MaxAbsVal ) * pState->gain_state[i].lastGain * 2.f; - - if ( maxGain < ( 1.f - pState->minDelta ) * PCM16_TO_FLT_FAC ) - { - pState->gain_state[i].gainExpVal = -1; - } - else - { - pState->gain_state[i].gainExpVal = 0; - } - } - } - else - { - pState->gain_state[i].lastMaxAbs = MaxAbsVal; - } - - if ( !isGainAdjusted ) - { - float actualMaxAbsVal = 0.f; - int16_t currMaxAttExp; - - currMaxAttExp = min( ( pState->gain_state[i].lastExp + pState->agc_com.absEmin ), pState->agc_com.maxAttExp ); - extendedExpVal = FALSE; - - if ( isClipped ) - { - int16_t isCompensated = FALSE; - actualMaxAbsVal = pState->gain_state[i].lastMaxAbs * pState->gain_state[i].lastGain; - idx = min( offset - 1, MaxAbsValIdx ); - pState->gain_state[i].gainExpVal = (int16_t) ceilf( -logf( actualMaxAbsVal * MDFT_NORM_SCALING ) / logf( pState->agc_com.winFunc[idx] ) ); - - while ( !isCompensated ) - { - float tmpSignal; - isCompensated = TRUE; - - for ( idx = clippedIdx; idx <= MaxAbsValIdx; idx++ ) - { - if ( idx >= offset ) - { - idx = MaxAbsValIdx; - tmpSignal = ppPcm_out[i][idx] * powf( pState->agc_com.winFunc[offset - 1], (float) pState->gain_state[i].gainExpVal ); - } - else - { - tmpSignal = ppPcm_out[i][idx] * powf( pState->agc_com.winFunc[idx], (float) pState->gain_state[i].gainExpVal ); - } - - if ( ( tmpSignal > ( 1.f - pState->minDelta ) * PCM16_TO_FLT_FAC ) || ( tmpSignal < MIN16B_FLT ) ) - { - isCompensated = FALSE; - break; - } - } - - if ( !isCompensated ) - { - pState->gain_state[i].gainExpVal++; - } - - if ( pState->gain_state[i].gainExpVal > currMaxAttExp ) - { - pState->gain_state[i].gainExpVal = min( pState->gain_state[i].gainExpVal, currMaxAttExp ); - break; - } - } - } - - for ( idx = 0; idx < input_frame; idx++ ) - { - if ( idx < offset ) - { - gain = powf( pState->agc_com.winFunc[idx], pState->gain_state[i].gainExpVal ); - } - else - { - - gain = powf( pState->agc_com.winFunc[offset - 1], pState->gain_state[i].gainExpVal ); - } - ppPcm_out[i][idx] *= gain; - } - - pState->gain_state[i].lastGain *= powf( pState->agc_com.winFunc[offset - 1], pState->gain_state[i].gainExpVal ); - /*safety check starts*/ - if ( pState->gain_state[i].gainExpVal == pState->agc_com.maxAttExp + 1 ) - { - extendedExpVal = TRUE; - } - /*safety check ends*/ - - pState->gain_state[i].prevExp = pState->gain_state[i].lastExp; - - pState->gain_state[i].lastExp -= pState->gain_state[i].gainExpVal; - if ( extendedExpVal ) - { - - pState->gain_state[i].gainExpVal = -1; - } - } - - pState->gain_data[i].absGainExp = pState->gain_state[i].prevExp + pState->agc_com.absEmin; - - if ( extendedExpVal && pState->gain_state[i].gainExpVal <= 0 ) - { - pState->gain_state[i].gainExpVal = pState->agc_com.maxAttExp + 1; - } - - pState->gain_data[i].absGainExpCurr = pState->gain_data[i].absGainExp - pState->gain_state[i].gainExpVal; - - if ( ( pState->gain_data[i].absGainExpCurr > pState->agc_com.absEmin ) || ( pState->gain_data[i].absGainExpCurr < 0 ) ) - { - assert( 0 ); - } - - if ( pState->gain_data[i].absGainExpCurr == pState->agc_com.absEmin ) - { - per_ch_bit[i] = 0; - } - else - { - per_ch_bit[i] = 1; - AGC_flag = 1; - } - } - - push_next_indice( hMetaData, AGC_flag, 1 ); - - /* encode AGC parameters */ - if ( AGC_flag == 1 ) - { - if ( n_channels > 1 ) - { - for ( i = 0; i < n_channels; i++ ) - { - push_next_indice( hMetaData, per_ch_bit[i], 1 ); - } - } - assert( AGC_BITS_PER_CH == ( pState->agc_com.betaE + 1 ) ); - - for ( i = 0; i < n_channels; i++ ) - { - if ( per_ch_bit[i] == 1 ) - { - push_next_indice( hMetaData, (uint16_t) pState->gain_data[i].absGainExpCurr, (int16_t) pState->agc_com.betaE ); - } - } - } - - - return; -} -#else void ivas_agc_enc_process_fx( ivas_agc_enc_state_t *hAgcEnc, /* i/o: AGC encoder handle */ BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ @@ -1281,4 +912,3 @@ void ivas_agc_enc_process_fx( return; } -#endif diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index c1f2a50de..0b2a39231 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -39,12 +39,10 @@ #include "ivas_prot.h" #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" #include "prot_fx_enc.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -55,7 +53,6 @@ * * Principal IVAS core coder routine, where number of core channels is 1 or 2 *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_core_enc( SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -906,434 +903,3 @@ ivas_error ivas_core_enc( return error; } -#else -ivas_error ivas_core_enc( - SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - const int16_t n_CoreChannels, /* i : number of core channels to be coded */ - float old_inp_12k8[][L_INP_12k8], /* i : buffer of old input signal */ - float old_inp_16k[][L_INP], /* i : buffer of old input signal */ - float ener[], /* i : residual energy from Levinson-Durbin */ - float A[][NB_SUBFR16k * ( M + 1 )], /* i : A(z) unquantized for the 4 subframes */ - float Aw[][NB_SUBFR16k * ( M + 1 )], /* i : weighted A(z) unquantized for subframes */ - float epsP[][M + 1], /* i : LP prediction errors */ - float lsp_new[][M], /* i : LSPs at the end of the frame */ - float lsp_mid[][M], /* i : LSPs in the middle of the frame */ - const int16_t vad_hover_flag[], /* i : VAD hanglover flag */ - int16_t attack_flag[], /* i : attack flag (GSC or TC) */ - float realBuffer[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ - float imagBuffer[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ - float old_wsp[][L_WSP], /* i : weighted input signal buffer */ - const int16_t loc_harm[], /* i : harmonicity flag */ - const float cor_map_sum[], /* i : speech/music clasif. parameter */ - const int16_t vad_flag_dtx[], /* i : HE-SAD flag with additional DTX HO */ - float enerBuffer[][CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ - float fft_buff[][2 * L_FFT], /* i : FFT buffer */ - const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag */ - const int16_t ivas_format, /* i : IVAS format */ - const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ -) -{ - int16_t n, input_frame; - int16_t cpe_id, MCT_flag; - Encoder_State **sts, *st; - STEREO_ICBWE_ENC_HANDLE hStereoICBWE; - STEREO_TD_ENC_DATA_HANDLE hStereoTD; - float *inp[CPE_CHANNELS]; - float new_inp_resamp16k[CPE_CHANNELS][L_FRAME16k]; /* new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ - float old_syn_12k8_16k[CPE_CHANNELS][L_FRAME16k]; /* ACELP core synthesis at 12.8kHz or 16kHz to be used by the SWB BWE */ - float shb_speech[L_FRAME16k]; - float hb_speech[L_FRAME16k / 4]; - float *new_swb_speech; - float new_swb_speech_buffer[L_FRAME48k + STEREO_DFT_OVL_MAX]; - float bwe_exc_extended[CPE_CHANNELS][L_FRAME32k + NL_BUFF_OFFSET]; - float voice_factors[CPE_CHANNELS][NB_SUBFR16k]; - int16_t Voicing_flag[CPE_CHANNELS]; - float pitch_buf[CPE_CHANNELS][NB_SUBFR16k]; - int16_t unbits[CPE_CHANNELS]; - float tdm_lspQ_PCh[M], tdm_lsfQ_PCh[M]; - int16_t last_element_mode, tdm_Pitch_reuse_flag; - int32_t element_brate, last_element_brate, input_Fs; - int16_t diff_nBits; - ivas_error error; - int16_t max_num_indices_BWE; - - push_wmops( "ivas_core_enc" ); - - error = IVAS_ERR_OK; - - /*------------------------------------------------------------------* - * General initialization - *-----------------------------------------------------------------*/ - - if ( hSCE != NULL ) - { - cpe_id = -1; - MCT_flag = 0; - sts = hSCE->hCoreCoder; - hStereoTD = NULL; - hStereoICBWE = NULL; - element_brate = hSCE->element_brate; - last_element_brate = hSCE->last_element_brate; - last_element_mode = IVAS_SCE; - tdm_Pitch_reuse_flag = -1; - } - else - { - cpe_id = hCPE->cpe_id; - MCT_flag = 0; - if ( hMCT != NULL ) - { - MCT_flag = 1; - } - sts = hCPE->hCoreCoder; - hStereoICBWE = hCPE->hStereoICBWE; - element_brate = hCPE->element_brate; - last_element_brate = hCPE->last_element_brate; - last_element_mode = hCPE->last_element_mode; - - if ( hCPE->hStereoTD != NULL ) - { - hStereoTD = hCPE->hStereoTD; - tdm_Pitch_reuse_flag = hCPE->hStereoTD->tdm_Pitch_reuse_flag; - } - else - { - hStereoTD = NULL; - tdm_Pitch_reuse_flag = -1; - } - } - - input_Fs = sts[0]->input_Fs; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - - set_f( new_swb_speech_buffer, 0, L_FRAME48k + STEREO_DFT_OVL_MAX ); - - for ( n = 0; n < n_CoreChannels; n++ ) - { - st = sts[n]; - - /*------------------------------------------------------------------* - * Initializiation per core-coder channel - *-----------------------------------------------------------------*/ - - - st->extl = -1; - unbits[n] = 0; - - st->element_brate = element_brate; - - /*---------------------------------------------------------------------* - * Pre-processing, incl. Decision matrix - *---------------------------------------------------------------------*/ - - if ( ( error = pre_proc_ivas( st, last_element_mode, element_brate, ivas_format == SBA_FORMAT ? last_element_brate : element_brate, input_frame, old_inp_12k8[n], old_inp_16k[n], &inp[n], &ener[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], new_inp_resamp16k[n], &Voicing_flag[n], old_wsp[n], loc_harm[n], cor_map_sum[n], vad_flag_dtx[n], enerBuffer[n], fft_buff[n], MCT_flag, vad_hover_flag[n], flag_16k_smc ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st->element_mode == IVAS_CPE_MDCT || st->element_mode == IVAS_SCE ) - { - st->enablePlcWaveadjust = 0; - } - } - - /*------------------------------------------------------------------* - * Sanity check in combined format coding - *-----------------------------------------------------------------*/ - - diff_nBits = 0; - if ( hCPE != NULL && hCPE->element_mode == IVAS_CPE_DFT && hCPE->brate_surplus > 0 ) - { - ivas_combined_format_brate_sanity( hCPE->element_brate, sts[0]->core, sts[0]->total_brate, &( sts[0]->core_brate ), &( sts[0]->inactive_coder_type_flag ), &diff_nBits ); - } - - /*---------------------------------------------------------------------* - * Core Encoding - *---------------------------------------------------------------------*/ - - for ( n = 0; n < n_CoreChannels; n++ ) - { - st = sts[n]; - - /* update pointer to the buffer of indices of the second channel */ - if ( n == 1 && st->element_mode == IVAS_CPE_TD ) - { - /* adjust the pointer to the buffer of indices of the secondary channel (make space for BWE indices) */ - max_num_indices_BWE = get_BWE_max_num_indices( sts[0]->extl_brate ); - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot + max_num_indices_BWE; - - /* write TD stereo spatial parameters */ - move_indices( hStereoTD->tdm_hBstr_tmp.ind_list, st->hBstr->ind_list, hStereoTD->tdm_hBstr_tmp.nb_ind_tot ); - st->hBstr->nb_ind_tot += hStereoTD->tdm_hBstr_tmp.nb_ind_tot; - st->hBstr->nb_bits_tot += hStereoTD->tdm_hBstr_tmp.nb_bits_tot; - - reset_indices_enc( &hStereoTD->tdm_hBstr_tmp, MAX_IND_TDM_TMP ); - } - - /*---------------------------------------------------------------------* - * Write signaling info into the bitstream - *---------------------------------------------------------------------*/ - - if ( !MCT_flag || ( MCT_flag && cpe_id == 0 ) ) - { - ivas_signaling_enc( st, MCT_flag, element_brate, tdm_SM_or_LRTD_Pri, tdm_Pitch_reuse_flag ); - } - - /*---------------------------------------------------------------------* - * Preprocessing (preparing) for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - core_switching_pre_enc( st, old_inp_12k8[n], old_inp_16k[n], sts[0]->active_cnt, last_element_mode ); - - /*---------------------------------------------------------------------* - * ACELP core encoding - * TCX core encoding - * HQ core encoding - *---------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - /* ACELP core encoder */ - if ( ( error = acelp_core_enc( st, inp[n], ener[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], vad_hover_flag[0], attack_flag[n], bwe_exc_extended[n], voice_factors[n], old_syn_12k8_16k[n], pitch_buf[n], &unbits[n], hStereoTD, tdm_lsfQ_PCh ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( st->core == TCX_20_CORE || st->core == TCX_10_CORE ) && st->element_mode != IVAS_CPE_MDCT ) - { - /* TCX core encoder */ - stereo_tcx_core_enc( st, old_inp_12k8[n] + L_INP_MEM, old_inp_16k[n] + L_INP_MEM, Aw[n], lsp_new[n], lsp_mid[n], pitch_buf[n], last_element_mode, vad_hover_flag[0] ); - } - - if ( st->core == HQ_CORE ) - { - /* HQ core encoder */ - hq_core_enc( st, st->input, input_frame, NORMAL_HQ_CORE, Voicing_flag[n], vad_hover_flag[0] ); - } - - /*---------------------------------------------------------------------* - * TD stereo updates - *---------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_TD && n == 0 ) - { - td_stereo_param_updt( st->lsp_old, st->lsf_old, pitch_buf[0], tdm_lspQ_PCh, tdm_lsfQ_PCh, hStereoTD->tdm_Pri_pitch_buf, st->flag_ACELP16k, hStereoTD->tdm_use_IAWB_Ave_lpc ); - } - } - - - /*---------------------------------------------------------------------* - * MDCT stereo: joint TCX Core Encoding - *---------------------------------------------------------------------*/ - - if ( sts[0]->element_mode == IVAS_CPE_MDCT ) - { - if ( sts[0]->core_brate > SID_2k40 && sts[1]->core_brate > SID_2k40 ) - { - if ( MCT_flag ) - { - ivas_mdct_core_whitening_enc( hCPE, old_inp_16k, old_wsp, pitch_buf, hMCT->p_mdst_spectrum_long[cpe_id], hMCT->tnsBits[cpe_id], hMCT->p_orig_spectrum_long[cpe_id], - hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], hMCT->hBstr, 1, hMCT->nchan_out_woLFE ); - } - else - { - stereo_mdct_core_enc( hCPE, old_inp_16k, old_wsp, pitch_buf ); - } - } - else if ( sts[0]->core_brate == SID_2k40 && sts[1]->core_brate == SID_2k40 ) - { - /* synch CNG configs between channels */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st = sts[n]; - if ( ( st->hFdCngEnc->hFdCngCom->frameSize != st->L_frame ) || ( st->hFdCngEnc->hFdCngCom->CngBandwidth != st->bwidth ) ) - { - configureFdCngEnc( st->hFdCngEnc, max( st->bwidth, WB ), st->L_frame == L_FRAME16k ? ACELP_16k40 : ACELP_9k60 ); - } - } - - if ( sts[0]->cng_sba_flag ) - { - FdCngEncodeDiracMDCTStereoSID( hCPE ); - } - else - { - FdCngEncodeMDCTStereoSID( hCPE ); - } - } - } - - - /*---------------------------------------------------------------------* - * Postprocessing, BWEs and Updates - *---------------------------------------------------------------------*/ - - for ( n = 0; n < n_CoreChannels; n++ ) - { - st = sts[n]; - - /*---------------------------------------------------------------------* - * Postprocessing for ACELP/HQ core switching - *---------------------------------------------------------------------*/ - - core_switching_post_enc( st, old_inp_12k8[n], old_inp_16k[n], A[n] ); - - /*---------------------------------------------------------------------* - * WB TBE encoding - * WB BWE encoding - *---------------------------------------------------------------------*/ - - if ( input_Fs >= 16000 && st->bwidth < SWB && st->hBWE_TD != NULL ) - { - /* Common pre-processing for WB TBE and WB BWE */ - wb_pre_proc( st, last_element_mode, new_inp_resamp16k[n], hb_speech ); - } - - if ( st->extl == WB_TBE ) - { - /* WB TBE encoder */ - wb_tbe_enc( st, hb_speech, bwe_exc_extended[n], voice_factors[n], pitch_buf[n] ); - } - else if ( st->extl == WB_BWE && n == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - /* WB BWE encoder */ - wb_bwe_enc( st, new_inp_resamp16k[n] ); - } - - /*---------------------------------------------------------------------* - * SWB(FB) TBE encoding - * SWB(FB) BWE encoding - *---------------------------------------------------------------------*/ - - new_swb_speech = new_swb_speech_buffer + STEREO_DFT_OVL_MAX; - - if ( !st->Opt_SC_VBR && input_Fs >= 32000 && st->hBWE_TD != NULL ) - { - /* Common pre-processing for SWB(FB) TBE and SWB(FB) BWE */ - swb_pre_proc( st, new_swb_speech, shb_speech, realBuffer[n], imagBuffer[n], hCPE ); - } - else if ( input_Fs >= 32000 ) - { - if ( st->hBWE_TD != NULL ) - { - InitSWBencBufferStates( st->hBWE_TD, shb_speech ); - } - } - - /* SWB TBE encoder */ - if ( st->extl == SWB_TBE || st->extl == FB_TBE ) - { - if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) - { - float fb_exc[L_FRAME16k]; - - swb_tbe_enc( st, hStereoICBWE, shb_speech, bwe_exc_extended[n], voice_factors[n], fb_exc, pitch_buf[n] ); - - if ( st->extl == FB_TBE ) - { - /* FB TBE encoder */ - fb_tbe_enc( st, st->input, fb_exc ); - } - } - } - else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - /* SWB(FB) BWE encoder */ - swb_bwe_enc( st, last_element_mode, old_inp_12k8[n], old_inp_16k[n], old_syn_12k8_16k[n], new_swb_speech, shb_speech ); - } - - /*---------------------------------------------------------------------* - * SWB DTX/CNG encoding - *---------------------------------------------------------------------*/ - - if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && ( input_frame >= L_FRAME32k || st->element_mode == IVAS_CPE_DFT ) ) - { - /* SHB DTX/CNG encoder */ - swb_CNG_enc( st, shb_speech, old_syn_12k8_16k[n] ); - } - - /*-------------------------------------------------------------------* - * Inter-channel BWE encoding - *-------------------------------------------------------------------*/ - - if ( n == 0 && input_Fs >= 32000 && hStereoICBWE != NULL ) - { - stereo_icBWE_preproc( hCPE, input_frame, new_swb_speech_buffer /*tmp buffer*/ ); - - stereo_icBWE_enc( hCPE, shb_speech, new_swb_speech_buffer, voice_factors[0] ); - } - - /*---------------------------------------------------------------------* - * Channel-aware mode - write signaling information into the bitstream - *---------------------------------------------------------------------*/ - - signaling_enc_rf( st ); - - /*---------------------------------------------------------------------* - * Common updates - *---------------------------------------------------------------------*/ - - if ( !MCT_flag ) /* for MCT do this later, otherwise there can be a problem because TCX quant happens later and might get the wrong last_core on a bit rate switch */ - { - updt_enc_common( st ); - } - } - - /*------------------------------------------------------------------* - * Write potentially unused bits in combined format coding - *-----------------------------------------------------------------*/ - - if ( hCPE != NULL && hCPE->element_mode == IVAS_CPE_DFT && hCPE->brate_surplus > 0 ) - { - while ( diff_nBits > 0 ) - { - n = min( diff_nBits, 16 ); - push_indice( sts[0]->hBstr, IND_UNUSED, 0, n ); - diff_nBits -= n; - } - } - -#ifdef DEBUG_MODE_INFO - for ( n = 0; n < n_CoreChannels; n++ ) - { - float tmpF; - short tmpS, id; - - st = sts[n]; - id = st->id_element; - - dbgwrite( &st->core, sizeof( short ), 1, input_frame, fname( debug_dir, "core", n, id, ENC ) ); - dbgwrite( &st->extl, sizeof( short ), 1, input_frame, fname( debug_dir, "extl", n, id, ENC ) ); - dbgwrite( &st->bwidth, sizeof( short ), 1, input_frame, fname( debug_dir, "bwidth", n, id, ENC ) ); - tmpF = st->total_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "total_brate", n, id, ENC ) ); - tmpS = st->bits_frame_nominal; - dbgwrite( &tmpS, sizeof( short ), 1, input_frame, fname( debug_dir, "bits_nominal", n, id, ENC ) ); - tmpF = st->core_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "core_brate", n, id, ENC ) ); - tmpF = st->extl_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "extl_brate", n, id, ENC ) ); - - dbgwrite( &st->coder_type, sizeof( short ), 1, input_frame, fname( debug_dir, "coder_type", n, id, ENC ) ); - dbgwrite( &st->clas, sizeof( short ), 1, input_frame, fname( debug_dir, "clas", n, id, ENC ) ); - dbgwrite( &st->cng_type, sizeof( short ), 1, input_frame, fname( debug_dir, "cng_type", n, id, ENC ) ); - dbgwrite( &st->L_frame, sizeof( short ), 1, input_frame, fname( debug_dir, "L_frame", n, id, ENC ) ); - dbgwrite( &st->vad_flag, sizeof( short ), 1, input_frame, fname( debug_dir, "vad_flag", n, id, ENC ) ); - dbgwrite( &st->localVAD, sizeof( short ), 1, input_frame, fname( debug_dir, "localVAD", n, id, ENC ) ); - - dbgwrite( &st->count_WB, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "count_WB", n, id, ENC ) ); - dbgwrite( &st->count_SWB, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "count_SWB", n, id, ENC ) ); - - dbgwrite( &st->sp_aud_decision0, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision0", n, id, ENC ) ); - dbgwrite( &st->sp_aud_decision1, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision1", n, id, ENC ) ); - dbgwrite( &st->sp_aud_decision2, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "sp_aud_decision2", n, id, ENC ) ); - } -#endif - pop_wmops(); - - return error; -} -#endif diff --git a/lib_enc/ivas_core_pre_proc.c b/lib_enc/ivas_core_pre_proc.c index 98250da87..aaa9789bf 100644 --- a/lib_enc/ivas_core_pre_proc.c +++ b/lib_enc/ivas_core_pre_proc.c @@ -50,7 +50,6 @@ * Pre-processing (Selection of internal Fs, classification, SC VBR decision, * Decision matrix, Preprocessing at other Fs, core switching decision, ...) *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error pre_proc_ivas( Encoder_State *st, /* i/o: encoder state structure */ const Word16 last_element_mode, /* i : last element mode */ @@ -661,432 +660,6 @@ ivas_error pre_proc_ivas( pop_wmops(); return error; } -#else -ivas_error pre_proc_ivas( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t last_element_mode, /* i : last element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int32_t last_element_brate, /* i : last element bitrate */ - const int16_t input_frame, /* i : frame length */ - float old_inp_12k8[], /* i/o: buffer of old input signal */ - float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ - float **inp, /* o : ptr. to inp. signal in the current frame*/ - float *ener, /* o : residual energy from Levinson-Durbin */ - float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ - float epsP[M + 1], /* i/o: LP prediction errors */ - float lsp_new[M], /* i/o: LSPs at the end of the frame */ - float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ - float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ - int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ - const float old_wsp[], /* i : weighted input signal buffer */ - const int16_t loc_harm, /* i : harmonicity flag */ - const float cor_map_sum, /* i : speech/music clasif. parameter */ - const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ - const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ - const float fft_buff[2 * L_FFT], /* i : FFT buffer */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t vad_hover_flag, /* i : VAD hangover flag */ - const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ -) -{ - int16_t L_look, element_mode, lMemRecalc_12k8; - float *inp_12k8, *new_inp_12k8, *inp_16k; /* pointers to current frame and new data */ - const float *wsp; /* weighted input signal buffer */ - int32_t sr_core_tmp, total_brate_tmp; - ivas_error error; - - push_wmops( "pre_proc" ); - - error = IVAS_ERR_OK; - - /*----------------------------------------------------------------* - * Initialization - *----------------------------------------------------------------*/ - - element_mode = st->element_mode; - - new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ - inp_12k8 = new_inp_12k8 - L_LOOK_12k8; - - if ( element_mode != IVAS_CPE_DFT ) - { - new_inp_12k8 -= L_FILT; - } - - wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ - - lMemRecalc_12k8 = 0; - if ( element_mode == IVAS_CPE_TD ) - { - lMemRecalc_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_NS ); - } - - /*----------------------------------------------------------------* - * Selection of internal ACELP Fs (12.8 kHz or 16 kHz) - *----------------------------------------------------------------*/ - - if ( st->core_brate == FRAME_NO_DATA ) - { - /* prevent "L_frame" changes in CNG segments */ - st->L_frame = st->last_L_frame; - } - else if ( st->core_brate == SID_2k40 && st->bwidth >= WB && st->hDtxEnc->first_CNG && ( st->hTdCngEnc != NULL && st->hTdCngEnc->act_cnt2 < MIN_ACT_CNG_UPD ) ) - { - /* prevent "L_frame" changes in SID frame after short segment of active frames */ - st->L_frame = st->hDtxEnc->last_CNG_L_frame; - } - else if ( ( ( st->element_mode == IVAS_CPE_MDCT && st->element_brate >= IVAS_64k && st->bwidth >= SWB ) || ( element_mode == IVAS_SCE && st->total_brate > MAX_ACELP_BRATE && st->bwidth >= SWB ) ) && st->core_brate != SID_2k40 ) - { - st->L_frame = L_FRAME32k; - } - else if ( st->bwidth >= SWB && st->total_brate > MAX_ACELP_BRATE_ISM && st->total_brate <= MAX_ACELP_BRATE && element_mode == IVAS_SCE && st->is_ism_format && st->tcxonly && st->core_brate != SID_2k40 ) - { - st->L_frame = L_FRAME25_6k; - } - else if ( st->flag_ACELP16k ) - { - st->L_frame = L_FRAME16k; - } - else - { - st->L_frame = L_FRAME; - } - - if ( st->hFdCngEnc != NULL && st->element_mode != IVAS_CPE_MDCT && ( ( st->hFdCngEnc->hFdCngCom->frameSize != st->L_frame ) || ( st->hFdCngEnc->hFdCngCom->CngBandwidth != st->input_bwidth ) ) ) - { - configureFdCngEnc( st->hFdCngEnc, max( st->input_bwidth, WB ), st->L_frame == L_FRAME16k ? ACELP_16k40 : ACELP_9k60 ); - } - - if ( st->ini_frame == 0 ) - { - /* avoid switching of internal ACELP Fs in the very first frame */ - st->last_L_frame = st->L_frame; - } - - if ( st->L_frame == L_FRAME ) - { - st->gamma = GAMMA1; - st->preemph_fac = PREEMPH_FAC; - } - else if ( st->L_frame == L_FRAME32k ) - { - st->gamma = GAMMA16k; - st->preemph_fac = PREEMPH_FAC_SWB; - } - else - { - st->gamma = GAMMA16k; - st->preemph_fac = PREEMPH_FAC_16k; - } - - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); - st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; - - - /*-----------------------------------------------------------------* - * coder_type rewriting in case of switching - * IC frames selection - * enforce TC frames in case of switching - *-----------------------------------------------------------------*/ - - /* enforce TRANSITION frames */ - if ( !( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) && st->last_L_frame != st->L_frame && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->last_core_brate != FRAME_NO_DATA && st->last_core_brate != SID_2k40 && st->coder_type_raw != VOICED ) - { - /* enforce TC frame in case of ACELP@12k8 <-> ACELP@16k core switching */ - st->coder_type = TRANSITION; - } - else if ( st->last_core == HQ_CORE && st->coder_type_raw != VOICED ) - { - /* enforce TC frame in case of HQ -> ACELP core switching */ - st->coder_type = TRANSITION; - } - else if ( st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG && !( element_mode == IVAS_CPE_TD ) ) - { - /* enforce TC frame in case of FD_CNG -> ACELP switching (past excitation not available) */ - st->coder_type = TRANSITION; - } - /* select INACTIVE frames */ - else if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE && st->vad_flag == 0 && st->element_mode != IVAS_CPE_MDCT ) - { - /* inactive frames will be coded by GSC technology */ - /* except for the VBR mode. VBR mode uses NELP for that */ - if ( !( st->Opt_SC_VBR && vad_flag_dtx ) && ( st->idchan == 0 || element_mode != IVAS_CPE_TD ) ) - { - st->coder_type = INACTIVE; - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - } - else if ( st->total_brate > MAX_GSC_INACTIVE_BRATE && ( ( st->vad_flag == 0 && st->bwidth >= SWB && st->max_bwidth >= SWB ) || ( st->localVAD == 0 && ( st->bwidth <= WB || st->max_bwidth <= WB ) ) ) ) - { - /* inactive frames will be coded by AVQ technology */ - st->coder_type = INACTIVE; - } - - - /*---------------------------------------------------------------------* - * Decision matrix (selection of technologies) - *---------------------------------------------------------------------*/ - - st->mdct_sw = MODE1; - st->mdct_sw_enable = MODE1; - if ( ( st->total_brate <= MIN_BRATE_GSC_NOISY_FLAG || st->bwidth < SWB || st->flag_ACELP16k ) && st->GSC_IVAS_mode == 0 ) - { - st->GSC_noisy_speech = 0; - } - - /* core selection */ - ivas_decision_matrix_enc( st, element_brate, fft_buff, enerBuffer, last_element_mode ); - - if ( st->L_frame == L_FRAME16k && ( st->coder_type == VOICED || st->coder_type == UNVOICED ) ) /* VOICED and UNVOICED are not supported in ACELP@16k */ - { - st->coder_type = GENERIC; - } - - if ( st->core == TCX_20_CORE || st->core == HQ_CORE ) - { - st->Nb_ACELP_frames = 0; - /* Configure TCX with the same bitrate as given when (re-)initializing TCX */ - total_brate_tmp = st->total_brate; - st->total_brate = st->bits_frame_nominal * FRAMES_PER_SEC; - SetModeIndex( st, st->last_bits_frame_nominal * FRAMES_PER_SEC, last_element_mode, MCT_flag ); - - st->sr_core = getCoreSamplerateMode2( element_mode, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode, st->is_ism_format ); - st->total_brate = total_brate_tmp; - - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); - st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; - - if ( st->sr_core == INT_FS_12k8 ) - { - st->preemph_fac = PREEMPH_FAC; - st->gamma = GAMMA1; - } - else if ( st->sr_core == INT_FS_16k ) - { - st->preemph_fac = PREEMPH_FAC_16k; - st->gamma = GAMMA16k; - } - else /* st->sr_core >=25600 */ - { - st->preemph_fac = PREEMPH_FAC_SWB; - st->gamma = GAMMA16k; - } - - if ( st->vad_flag == 0 ) - { - st->coder_type = INACTIVE; - } - else if ( st->coder_type > GENERIC ) - { - st->coder_type = GENERIC; - } - if ( st->element_mode != IVAS_CPE_MDCT ) - { - SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); - } - } - else if ( st->element_mode == IVAS_CPE_MDCT ) - { - st->hTcxEnc->tfm_mem = 0.75f; - } - else if ( element_brate != last_element_brate ) - { - if ( st->core_brate != FRAME_NO_DATA ) - { - SetModeIndex( st, st->bits_frame_nominal * FRAMES_PER_SEC, element_mode, MCT_flag ); - } - - if ( st->extl != -1 && st->extl != IGF_BWE && st->igf == 1 ) - { - st->igf = 0; - } - } - - - /*-----------------------------------------------------------------* - * Update of ACELP harmonicity counter (used in ACELP transform codebook @32kbps) - *-----------------------------------------------------------------*/ - - if ( loc_harm == 1 && cor_map_sum > 50 && st->clas == VOICED_CLAS && st->coder_type == GENERIC ) - { - st->last_harm_flag_acelp++; - - if ( st->last_harm_flag_acelp > 10 ) - { - st->last_harm_flag_acelp = 10; - } - } - else - { - st->last_harm_flag_acelp = 0; - } - - /*-----------------------------------------------------------------* - * Update audio frames counter (used for UV decision) - *-----------------------------------------------------------------*/ - - if ( st->coder_type == AUDIO ) - { - st->audio_frame_cnt += AUDIO_COUNTER_STEP; - } - else if ( st->coder_type != INACTIVE ) - { - st->audio_frame_cnt--; - } - - if ( st->audio_frame_cnt > AUDIO_COUNTER_MAX ) - { - st->audio_frame_cnt = AUDIO_COUNTER_MAX; - } - - if ( st->audio_frame_cnt < 0 ) - { - st->audio_frame_cnt = 0; - } - - /*-----------------------------------------------------------------* - * Set formant sharpening flag - *-----------------------------------------------------------------*/ - - st->sharpFlag = 0; - - if ( st->coder_type == GENERIC || st->coder_type == VOICED || st->coder_type == TRANSITION ) - { - if ( element_brate >= FRMT_SHP_MIN_BRATE_IVAS && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD ) - { - st->sharpFlag = 0; - } - else - { - st->sharpFlag = 1; - } - } - - /* channel-aware mode - due to lack of signaling bit, sharpFlag is 1 always in RF mode */ - if ( st->rf_mode && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) - { - st->sharpFlag = 1; - } - - /* TD stereo, secondary channel - due to lack of signaling bits, sharpFlag is always 1 */ - if ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - st->sharpFlag = 0; - if ( st->coder_type == GENERIC || st->coder_type == VOICED ) - { - st->sharpFlag = 1; - } - } - - /*-----------------------------------------------------------------* - * Set voicing flag for HQ FEC - *-----------------------------------------------------------------*/ - - if ( st->sp_aud_decision1 == 0 && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) - { - *Voicing_flag = 1; - } - else - { - *Voicing_flag = 0; - } - - /*-----------------------------------------------------------------* - * Compute core-coder buffers at internal sampling rate - *-----------------------------------------------------------------*/ - - sr_core_tmp = ( st->tcxonly == 0 ) ? INT_FS_16k : max( INT_FS_16k, st->sr_core ); /* indicates the ACELP sampling rate */ - - L_look = NS2SA( sr_core_tmp, ACELP_LOOK_NS ); /* lookahead at other sampling rate (16kHz, 25.6kHz, 32kHz) */ - - inp_16k = old_inp_16k + L_INP_MEM - L_look; - - if ( !flag_16k_smc ) - { - error = ivas_compute_core_buffers( st, &inp_16k, old_inp_16k, new_inp_resamp16k, input_frame, last_element_mode, sr_core_tmp, ener, A, Aw, epsP, lsp_new, lsp_mid ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - } - - if ( !( st->L_frame == L_FRAME16k && element_mode != IVAS_CPE_MDCT ) ) - { - /* update signal buffers */ - mvr2r( new_inp_12k8, st->buf_speech_enc_pe + st->L_frame, L_FRAME ); - mvr2r( st->buf_speech_enc + L_FRAME32k, st->buf_speech_enc + st->L_frame, L_FRAME ); - - if ( element_mode == IVAS_CPE_DFT ) - { - mvr2r( st->buf_speech_enc + L_FRAME32k - STEREO_DFT_OVL_12k8, st->buf_speech_enc + st->L_frame - STEREO_DFT_OVL_12k8, STEREO_DFT_OVL_12k8 ); - } - else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) - { - mvr2r( st->buf_speech_enc + L_FRAME32k - lMemRecalc_12k8 - L_FILT, st->buf_speech_enc + st->L_frame - lMemRecalc_12k8 - L_FILT, lMemRecalc_12k8 + L_FILT ); - } - else if ( element_mode == IVAS_SCE ) - { - mvr2r( st->buf_speech_enc + L_FRAME32k - L_FILT, st->buf_speech_enc + st->L_frame - L_FILT, L_FILT ); - } - - if ( st->tcxonly == 0 ) - { - mvr2r( wsp, st->wspeech_enc, L_FRAME + L_LOOK_12k8 ); - } - } - - if ( flag_16k_smc ) - { - mvr2r( st->buf_speech_enc + L_FRAME16k, new_inp_resamp16k, L_FRAME16k ); - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* update old weighted speech buffer - for OL pitch analysis */ - mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); - - - /* set the pointer of the current frame for the ACELP core */ - if ( st->L_frame == L_FRAME ) - { - *inp = inp_12k8; - } - else - { - *inp = inp_16k; - } - - /* Update VAD hangover frame counter in active frames */ - if ( !( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) && st->tcxonly == 0 ) - { - if ( st->hTdCngEnc != NULL && st->Opt_DTX_ON && vad_hover_flag ) - { - st->hTdCngEnc->burst_ho_cnt++; - if ( st->hTdCngEnc->burst_ho_cnt > HO_HIST_SIZE ) - { - st->hTdCngEnc->burst_ho_cnt = HO_HIST_SIZE; - } - } - else if ( st->hTdCngEnc != NULL && vad_flag_dtx ) - { - st->hTdCngEnc->burst_ho_cnt = 0; - } - } - -#ifdef DEBUG_MODE_ACELP - dbgwrite( inp_12k8, sizeof( float ), L_FRAME, 1, fname( debug_dir, "inp_12k8", st->idchan, st->id_element, ENC ) ); - dbgwrite( inp_16k, sizeof( float ), L_FRAME, 1, fname( debug_dir, "inp_16k", st->idchan, st->id_element, ENC ) ); -#endif - - pop_wmops(); - return error; -} -#endif /*-------------------------------------------------------------------* * ivas_compute_core_buffers() @@ -1448,7 +1021,7 @@ ivas_error ivas_compute_core_buffers_fx( Word16 Q_min, i; shift = s_max( shift, 0 ); shift = s_min( shift, Q_MAX ); - minimum_fx( st->Q_max, L_Q_MEM, &Q_min ); + minimum_fx( st->Q_max_16k, L_Q_MEM, &Q_min ); *Q_new = s_min( 1, s_min( shift, Q_min ) ); move16(); IF( inp_max == 0 ) @@ -1462,10 +1035,10 @@ ivas_error ivas_compute_core_buffers_fx( FOR( i = L_Q_MEM - 1; i > 0; i-- ) { - st->Q_max[i] = st->Q_max[i - 1]; + st->Q_max_16k[i] = st->Q_max_16k[i - 1]; move16(); } - st->Q_max[i] = shift; + st->Q_max_16k[i] = shift; move16(); Copy_Scale_sig32_16( sig_out, preemp_start_idx, preemp_len, *Q_new ); diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 05848dc4c..2b48d5f32 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -44,838 +44,42 @@ #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif - -/*---------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------*/ - -#define SCE_SMC_THR 16000 - - -#ifdef IVAS_FLOAT_FIXED -static void calculate_energy_buffer_ivas_fx( CPE_ENC_HANDLE hCPE, Word32 enerBuffer_dft[], const Word16 no_channels, const Word32 input_Fs, Word16 *enerBuffer_dft_e ); -#else -static void calculate_energy_buffer( CPE_ENC_HANDLE hCPE, float enerBuffer_dft[], const int16_t no_channels, const int32_t input_Fs ); -#endif - -#ifdef IVAS_FIXED_ENC -static void calculate_energy_buffer_fx( CPE_ENC_HANDLE hCPE, Word64 enerBuffer_dft_fx[], Word16 *enerBuffer_dft_q_fx, const Word16 no_channels, const Word32 input_Fs ); -#endif - -/*-------------------------------------------------------------------* - * pre_proc_front_ivas() - * - * Front Pre-processing for IVAS - * (resampling, spectral analysis, LP analysis, VAD, OL pitch calculation, classification) - *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 get_zero_flag( Word32 arr[], Word16 len ) -{ - FOR( Word16 j = 0; j < len; j++ ) - { - IF( arr[j] != 0 ) - { - return 1; - BREAK; - } - } - return 0; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -ivas_error pre_proc_front_ivas( - SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int32_t element_brate, /* i : SCE/CPE element bitrate */ - const int16_t nb_bits_metadata, /* i : number of metadata bits */ - const int16_t input_frame, /* i : frame length */ - const int16_t n, /* i : channel number */ - float old_inp_12k8[], /* o : buffer of old input signal */ - float old_inp_16k[], /* o : buffer of old input signal @16kHz */ - float *ener, /* o : residual energy from Levinson-Durbin */ - float *relE, /* o : frame relative energy */ - float A[NB_SUBFR16k * ( M + 1 )], /* o : A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* o : weighted A(z) unquantized for subframes */ - float epsP[M + 1], /* o : LP prediction errors */ - float lsp_new[M], /* o : LSPs at the end of the frame */ - float lsp_mid[M], /* o : LSPs in the middle of the frame */ - int16_t *vad_hover_flag, /* o : VAD hangover flag */ - int16_t *attack_flag, /* o : flag signaling attack */ - float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ - float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ - float old_wsp[], /* o : weighted input signal buffer */ - float pitch_fr[NB_SUBFR], /* o : fractional pitch values */ - float voicing_fr[NB_SUBFR], /* o : fractional pitch gains */ - int16_t *loc_harm, /* o : harmonicity flag */ - float *cor_map_sum, /* o : speech/music clasif. parameter */ - int16_t *vad_flag_dtx, /* o : HE-SAD flag with additional DTX HO */ - float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* o : energy buffer */ - float fft_buff[2 * L_FFT], /* o : FFT buffer */ - const float tdm_A_PCh[M + 1], /* i : unq. LP coeff. of primary channel */ - const float tdm_lsp_new_PCh[M], /* i : unq. LSPs of primary channel */ - const float currFlatness, /* i : flatness parameter */ - const int16_t tdm_ratio_idx, /* i : Current Ratio_L index */ - float fr_bands_LR[][2 * NB_BANDS], /* i : energy in frequency bands */ - const float Etot_LR[], /* i : total energy Left & Right channel */ - float lf_E_LR[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ - const int16_t localVAD_HE_SAD_LR[], /* i : HE-SAD flag without hangover, LR channels */ - float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN */ - const int16_t flag_16k_smc, /* i : flag to indicate if the OL SMC is run at 16 kHz */ - const int16_t front_vad_flag, /* i : front-VAD flag to overwrite VAD decision */ - const int16_t force_front_vad, /* i : flag to force VAD decision */ - const int16_t front_vad_dtx_flag, /* i : front-VAD DTX flag to overwrite VAD decision*/ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int32_t ivas_total_brate /* i : IVAS total bitrate - for setting the DTX */ -) -{ - float *inp_12k8, *new_inp_12k8; /* pointers to current frame and new data */ - float *wsp; /* weighted input signal buffer */ - float Etot; /* total energy */ - float fr_bands[2 * NB_BANDS]; /* energy in frequency bands */ - float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - float tmpN[NB_BANDS]; /* Temporary noise update */ - float tmpE[NB_BANDS]; /* Temporary averaged energy of 2 sf. */ - float tmpN_LR[CPE_CHANNELS][NB_BANDS]; /* Temporary noise update */ - float tmpE_LR[CPE_CHANNELS][NB_BANDS]; /* Temporary averaged energy of 2 sf. */ - float cor_map_sum_LR[CPE_CHANNELS]; /* speech/music clasif. parameter */ - float non_staX_LR; /* non-stationarity for sp/mus classifier */ - float ncharX_LR; /* noise character for sp/mus classifier */ - float sp_div_LR; /* spectral diversity feature */ - float S_map_LR[L_FFT / 2]; /* short-term correlation map */ - float corr_shiftL; /* correlation shift */ - float corr_shiftR; /* correlation shift */ - int16_t loc_harmLR[CPE_CHANNELS]; /* harmonicity flag */ - int16_t lr_vad_enabled; /* LR VAD indicator */ - float ee[2]; /* Spectral tilt */ - float corr_shift; /* correlation shift */ - float sp_div, PS[128]; /* speech/music clasif. parameters */ - int16_t L_look; /* length of look-ahead */ - float snr_sum_he; /* HE SAD parameters */ - float hp_E[2]; /* Energy in HF */ - int16_t flag_spitch; - int16_t high_lpn_flag; - float lsf_new[M]; - float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ - int16_t localVAD_HE_SAD; - float non_staX; - float stab_fac; - int16_t alw_pitch_lag_12k8[2]; - float alw_voicing[2]; - int16_t last_core_orig; - float dummy; - float mem_decim_dummy[2 * L_FILT_MAX]; /* dummy decimation filter memory */ - float S_map[L_FFT / 2]; - int16_t i, lMemRecalc, lMemRecalc_12k8; - int16_t smc_dec; - float ncharX, dE1X; - Encoder_State *st; - float *signal_in; - int16_t element_mode; - int32_t input_Fs, last_element_brate; - int16_t *tdm_SM_last_clas, tmpS; - float *res_cod_SNR_M, tmpF[STEREO_DFT_BAND_MAX]; - STEREO_CLASSIF_HANDLE hStereoClassif; - float temp1F_icatdmResampBuf[L_FILT_MAX]; /* temp buffers for ICA TDM resamplers */ - int16_t old_pitch1; /* previous frame OL pitch[1] @12.8 kHz */ - int16_t LR_localVAD; - ivas_error error; - - push_wmops( "pre_proc_front" ); - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - error = IVAS_ERR_OK; - - tmpS = 0; - tdm_SM_last_clas = &tmpS; - set_f( tmpF, 0, STEREO_DFT_BAND_MAX ); - res_cod_SNR_M = tmpF; - - LR_localVAD = 0; - - if ( hSCE != NULL ) - { - st = hSCE->hCoreCoder[n]; - signal_in = hSCE->hCoreCoder[n]->input; - element_mode = IVAS_SCE; - last_element_brate = hSCE->last_element_brate; - hStereoClassif = NULL; - lr_vad_enabled = 0; - } - else /* CPE */ - { - st = hCPE->hCoreCoder[n]; - signal_in = hCPE->hCoreCoder[n]->input; - element_mode = hCPE->element_mode; - last_element_brate = hCPE->last_element_brate; - hStereoClassif = hCPE->hStereoClassif; - lr_vad_enabled = 0; - if ( hCPE->hFrontVad[0] != NULL && hCPE->element_mode != IVAS_CPE_MDCT ) - { - lr_vad_enabled = 1; - } - - if ( lr_vad_enabled && n == 0 ) - { - /* Combine localVAD and vad_flag from LR processing */ - LR_localVAD = hCPE->hCoreCoder[0]->localVAD || hCPE->hCoreCoder[1]->localVAD; - } - - if ( hCPE->hStereoTD != NULL ) - { - tdm_SM_last_clas = &hCPE->hStereoTD->tdm_SM_last_clas[n]; - mvs2s( hCPE->hStereoTD->tdm_SM_last_clas, hCPE->hStereoTD->tdm_SM_last2_clas, CPE_CHANNELS ); - } - - if ( hCPE->hStereoDft != NULL ) - { - res_cod_SNR_M = hCPE->hStereoDft->res_cod_SNR_M; - } - } - - lMemRecalc_12k8 = 0; - lMemRecalc = 0; - if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) - { - lMemRecalc = NS2SA( st->input_Fs, L_MEM_RECALC_NS ); - lMemRecalc_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_NS ); - } - - input_Fs = st->input_Fs; - - localVAD_HE_SAD = 0; - snr_sum_he = 0; - - corr_shiftL = 0; - corr_shiftR = 0; - - if ( hSCE != NULL ) - { - *vad_hover_flag = 0; - } - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - st->coder_type = GENERIC; - if ( st->hGSCEnc != NULL ) - { - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - } - *attack_flag = 0; - - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->bump_up = 0; - st->hSC_VBR->ppp_mode = 0; - st->hSC_VBR->nelp_mode = 0; - st->hSC_VBR->avoid_HQ_VBR_NB = 0; - } - - L_look = L_LOOK_12k8; /* lookahead at 12.8kHz */ - - new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ - inp_12k8 = new_inp_12k8 - L_look; /* pointer to the current frame of input signal in 12.8kHz core */ - - if ( element_mode != IVAS_CPE_DFT ) - { - new_inp_12k8 -= L_FILT; - } - - if ( element_mode == IVAS_CPE_DFT ) - { - mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - STEREO_DFT_OVL_12k8 ); - } - else if ( element_mode == IVAS_CPE_TD ) - { - mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - lMemRecalc_12k8 - L_FILT ); - } - else - { - mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM - L_FILT ); - } - - mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); - wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ - - st->rf_mode = st->Opt_RF_ON; - - last_core_orig = st->last_core; - - /*--------------------------------------------------------------* - * energy analysis - *---------------------------------------------------------------*/ - - if ( element_mode == IVAS_SCE || ( element_mode == IVAS_CPE_MDCT && st->Opt_DTX_ON ) ) - { - analysisCldfbEncoder_ivas( st, signal_in, input_frame, realBuffer, imagBuffer, enerBuffer ); - } - else if ( ( element_mode == IVAS_CPE_TD && st->idchan == 0 ) || ( st->idchan == 1 && st->tdm_LRTD_flag ) ) - { - /* cldfb analysis only for pri. channel */ - analysisCldfbEncoder_ivas( st, signal_in - NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ), input_frame, realBuffer, imagBuffer, enerBuffer ); - } - else if ( element_mode == IVAS_CPE_DFT ) - { - calculate_energy_buffer( hCPE, enerBuffer, st->cldfbAnaEnc->no_channels, input_Fs ); - } - else - { - set_f( enerBuffer, 0, CLDFB_NO_CHANNELS_MAX ); - } - - /*----------------------------------------------------------------* - * Change the sampling frequency to 12.8 kHz - * (if not available from downsampled DMX) - *----------------------------------------------------------------*/ - - if ( element_mode == IVAS_SCE ) - { - modify_Fs( signal_in, input_frame, input_Fs, new_inp_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); - - mvr2r( st->mem_decim, mem_decim_dummy, 2 * L_FILT_MAX ); - set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); - modify_Fs( temp1F_icatdmResampBuf, NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_12k8 + L_FRAME, INT_FS_12k8, mem_decim_dummy, 0 ); - } - else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) - { - /* reconstruct past segment of the Secondary channel input signal when switching from DFT stereo */ - if ( hCPE->last_element_mode == IVAS_CPE_DFT && st->idchan == 1 ) - { - int16_t length_inp = NS2SA( input_Fs, L_MEM_RECALC_SCH_NS ); - int16_t length_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_SCH_NS ); - - modify_Fs( signal_in - lMemRecalc - length_inp, length_inp, input_Fs, new_inp_12k8 - lMemRecalc_12k8 - length_12k8, INT_FS_12k8, st->mem_decim, 0 ); - } - - modify_Fs( signal_in - lMemRecalc, input_frame, input_Fs, new_inp_12k8 - lMemRecalc_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); - mvr2r( st->mem_decim, mem_decim_dummy, 2 * L_FILT_MAX ); - - if ( lMemRecalc > 0 ) - { - modify_Fs( signal_in + input_frame - lMemRecalc, lMemRecalc, input_Fs, new_inp_12k8 + L_FRAME - lMemRecalc_12k8, INT_FS_12k8, mem_decim_dummy, ( st->max_bwidth == NB ) ); - } - set_f( temp1F_icatdmResampBuf, 0, L_FILT_MAX ); - modify_Fs( temp1F_icatdmResampBuf, NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_12k8 + L_FRAME, INT_FS_12k8, mem_decim_dummy, 0 ); - } - else /* DFT stereo */ - { - /* update the FIR resampling filter memory, needed for switching to time-domain (FIR) resampling */ - mvr2r( signal_in + input_frame - NS2SA( input_Fs, L_MEM_RECALC_NS ) - 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ), st->mem_decim, 2 * NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ) ); - } - - /* save input resampled at 12.8kHz, non-preemhasised */ - if ( element_mode == IVAS_CPE_DFT ) - { - mvr2r( new_inp_12k8 - STEREO_DFT_OVL_12k8, st->buf_speech_enc_flt + L_FRAME32k - STEREO_DFT_OVL_12k8, L_FRAME + STEREO_DFT_OVL_12k8 ); - } - else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) - { - mvr2r( new_inp_12k8 - lMemRecalc_12k8, st->buf_speech_enc_flt + L_FRAME32k - lMemRecalc_12k8 - L_FILT, L_FRAME + lMemRecalc_12k8 + L_FILT ); - } - else - { - mvr2r( new_inp_12k8, st->buf_speech_enc_flt + L_FRAME32k, L_FRAME ); - } - - /*------------------------------------------------------------------* - * Perform fixed preemphasis (12.8 kHz signal) through 1 - g*z^-1 - *-----------------------------------------------------------------*/ - - if ( element_mode == IVAS_CPE_DFT ) - { - mvr2r( new_inp_12k8 - STEREO_DFT_OVL_12k8 + L_FRAME, st->inp_12k8_mem_stereo_sw, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); /* memory for TD/DFT stereo switching */ - - st->mem_preemph = st->mem_preemph_DFT; - st->mem_preemph_DFT = old_inp_12k8[L_INP_MEM - STEREO_DFT_OVL_12k8 + L_FRAME - 1]; - - preemph( new_inp_12k8 - STEREO_DFT_OVL_12k8, PREEMPH_FAC_FLT, L_FRAME, &st->mem_preemph ); - dummy = st->mem_preemph; - preemph( new_inp_12k8 - STEREO_DFT_OVL_12k8 + L_FRAME, PREEMPH_FAC_FLT, STEREO_DFT_OVL_12k8, &dummy ); - } - else if ( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_MDCT ) - { - if ( st->idchan == 0 ) - { - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - st->mem_preemph = st->mem_preemph_DFT; - mvr2r( st->inp_12k8_mem_stereo_sw, new_inp_12k8 - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); - preemph( new_inp_12k8 - L_MEM_RECALC_12K8 - ( STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ), PREEMPH_FAC_FLT, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT, &st->mem_preemph ); - } - - st->mem_preemph_DFT = old_inp_12k8[L_INP_MEM - STEREO_DFT_OVL_12k8 + L_FRAME - 1]; /* == inp_12k8[L_FRAME-1] */ - } - - /* preemphasise past segment of the Secondary channel input signal when switching from DFT stereo */ - if ( hCPE->last_element_mode == IVAS_CPE_DFT && st->idchan == 1 ) - { - int16_t length_12k8 = NS2SA( INT_FS_12k8, L_MEM_RECALC_SCH_NS ); - preemph( new_inp_12k8 - lMemRecalc_12k8 - length_12k8, PREEMPH_FAC_FLT, length_12k8, &st->mem_preemph ); - } - - preemph( new_inp_12k8 - lMemRecalc_12k8, PREEMPH_FAC_FLT, L_FRAME, &st->mem_preemph ); - dummy = st->mem_preemph; - preemph( new_inp_12k8 - lMemRecalc_12k8 + L_FRAME, PREEMPH_FAC_FLT, lMemRecalc_12k8 + L_FILT, &dummy ); - } - else /* IVAS_SCE or IVAS_CPE_MDCT */ - { - preemph( new_inp_12k8, PREEMPH_FAC_FLT, L_FRAME, &st->mem_preemph ); - dummy = st->mem_preemph; - preemph( new_inp_12k8 + L_FRAME, PREEMPH_FAC_FLT, L_FILT, &dummy ); - } - - /*-------------------------------------------------------------------------* - * Spectral analysis - *--------------------------------------------------------------------------*/ - - analy_sp( element_mode, hCPE, input_Fs, inp_12k8, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, &Etot, st->min_band, st->max_band, band_energies, PS, fft_buff ); - - if ( hStereoClassif != NULL ) - { - if ( st->lp_speech - Etot > 25 ) - { - hStereoClassif->silence_flag = 2; - } - else - { - hStereoClassif->silence_flag = hStereoClassif->silence_flag - 1; - } - hStereoClassif->silence_flag = max( 0, hStereoClassif->silence_flag ); - } - - /*----------------------------------------------------------------* - * SAD (1-signal, 0-noise) - *----------------------------------------------------------------*/ - - noise_est_pre( Etot, st->ini_frame, st->hNoiseEst, st->idchan, element_mode, hCPE != NULL ? hCPE->last_element_mode : element_mode ); - - if ( element_mode == IVAS_CPE_TD && ( ( abs( hCPE->hStereoTD->tdm_last_ratio_idx - tdm_ratio_idx ) > 5 && st->idchan == 1 ) || abs( hCPE->hStereoTD->tdm_last_inst_ratio_idx - hCPE->hStereoTD->tdm_inst_ratio_idx ) > 10 ) ) - { - st->ini_frame = 1; - } - - st->vad_flag = wb_vad( st, fr_bands, &i, &i, &i, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); - - - if ( force_front_vad == 1 || front_vad_flag == 1 ) - { - /* overwrite VAD decision with front-VAD decision if external VAD is set to 1*/ - st->vad_flag = front_vad_flag; - st->localVAD = front_vad_flag; - } - if ( ( hCPE != NULL && !( lr_vad_enabled && st->idchan == 0 ) ) || hSCE != NULL ) - { - *vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, 0, vad_hover_flag, NULL, NULL, NULL ); - } - else - { - /* This only applies to st->idchan==0 now */ - /* Add down mix stereo activity to LR vad_flag_dtx */ - *vad_flag_dtx = *vad_flag_dtx || st->vad_flag; - - - /* Determine hangover flag status based on LR localVAD and downmix localVAD */ - *vad_hover_flag = *vad_flag_dtx && !( LR_localVAD || st->localVAD ); - } - - if ( force_front_vad == 1 || front_vad_dtx_flag == 1 ) - { - /* overwrite VAD decision with front-VAD decision if external VAD is set to 1*/ - *vad_flag_dtx = front_vad_dtx_flag; - } - - /*----------------------------------------------------------------* - * NB/WB/SWB/FB bandwidth detector - *----------------------------------------------------------------*/ - - if ( st->idchan == 0 && element_mode != IVAS_CPE_MDCT ) - { - bw_detect( st, st->input, NULL, enerBuffer, ivas_format, 0 ); - } - - if ( element_mode != IVAS_CPE_MDCT ) /* in MDCT stereo, set_bw_stereo() is used instead */ - { - set_bw( element_mode, element_brate, st, MODE1 ); - } - - /* set the BW of the TD secondary channel in LRTD mode same as BW of the primary channel (only at higher bitrates) */ - if ( st->idchan == 1 && element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag == 1 && st->bits_frame_channel >= IVAS_16k4 / FRAMES_PER_SEC ) - { - st->bwidth = hCPE->hCoreCoder[0]->bwidth; - } - - /*----------------------------------------------------------------* - * Noise energy down-ward update and total noise energy estimation - * Long-term energies and relative frame energy updates - * Correlation correction as a function of total noise level - *----------------------------------------------------------------*/ - - noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); - - if ( lr_vad_enabled && st->idchan == 0 ) - { - noise_est_down( fr_bands_LR[0], hCPE->hFrontVad[0]->hNoiseEst->bckr, tmpN_LR[0], tmpE_LR[0], st->min_band, st->max_band, &hCPE->hFrontVad[0]->hNoiseEst->totalNoise, Etot_LR[0], &hCPE->hFrontVad[0]->hNoiseEst->Etot_last, &hCPE->hFrontVad[0]->hNoiseEst->Etot_v_h2 ); - noise_est_down( fr_bands_LR[1], hCPE->hFrontVad[1]->hNoiseEst->bckr, tmpN_LR[1], tmpE_LR[1], st->min_band, st->max_band, &hCPE->hFrontVad[1]->hNoiseEst->totalNoise, Etot_LR[1], &hCPE->hFrontVad[1]->hNoiseEst->Etot_last, &hCPE->hFrontVad[1]->hNoiseEst->Etot_v_h2 ); - corr_shiftL = correlation_shift( hCPE->hFrontVad[0]->hNoiseEst->totalNoise ); - corr_shiftR = correlation_shift( hCPE->hFrontVad[1]->hNoiseEst->totalNoise ); - } - - *relE = Etot - st->lp_speech; - - corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); - - /*----------------------------------------------------------------* - * FD-CNG Noise Estimator - *----------------------------------------------------------------*/ - - if ( st->hFdCngEnc != NULL ) - { - resetFdCngEnc( st ); - - if ( st->idchan == 0 || element_mode == IVAS_CPE_MDCT ) - { - if ( element_mode == IVAS_CPE_TD && lr_vad_enabled && band_energies_LR != NULL ) - { - perform_noise_estimation_enc( band_energies_LR, enerBuffer, st->hFdCngEnc, input_Fs, hCPE ); - } - else - { - perform_noise_estimation_enc( band_energies, enerBuffer, st->hFdCngEnc, input_Fs, hCPE ); - } - } - } - - /*-----------------------------------------------------------------* - * Select SID or FRAME_NO_DATA frame if DTX enabled - *-----------------------------------------------------------------*/ - - if ( hCPE != NULL && element_mode != IVAS_CPE_DFT && element_mode != IVAS_CPE_MDCT ) - { - *vad_flag_dtx = 1; - } - - if ( st->Opt_DTX_ON == 1 && *vad_flag_dtx == 0 && element_mode == IVAS_CPE_DFT && element_brate <= ACELP_16k40 && hCPE->hStereoDft->hConfig->force_mono_transmission == 1 ) /* force LP_CNG usage for MASA DTX when mono tranmission */ - { - st->cng_type = LP_CNG; - } - - dtx( st, ivas_total_brate, *vad_flag_dtx, inp_12k8 ); - - if ( hCPE != NULL && hCPE->hStereoDft != NULL && st->core_brate == SID_2k40 ) - { - /* Add another period of expected xcorr updates */ - hCPE->hStereoDft->expectedNumUpdates += st->hDtxEnc->max_SID; - } - - /*----------------------------------------------------------------* - * Adjust FD-CNG Noise Estimator - *----------------------------------------------------------------*/ - - if ( st->hFdCngEnc != NULL && ( st->ini_frame == 0 || last_element_brate != element_brate || st->last_bwidth != st->bwidth ) ) - { - int32_t total_brate; - - total_brate = ( element_mode == IVAS_SCE ) ? st->total_brate : st->bits_frame_nominal * FRAMES_PER_SEC; - configureFdCngEnc( st->hFdCngEnc, max( st->input_bwidth, WB ), total_brate ); - if ( hCPE != NULL ) - { - st->hFdCngEnc->hFdCngCom->CngBitrate = hCPE->element_brate - 1; - } - } - - if ( st->hFdCngEnc != NULL && st->Opt_DTX_ON ) - { - AdjustFirstSID( st ); - } - - /*----------------------------------------------------------------* - * LP analysis - *----------------------------------------------------------------*/ - - alw_pitch_lag_12k8[0] = st->old_pitch_la; - alw_pitch_lag_12k8[1] = st->old_pitch_la; - alw_voicing[0] = st->voicing[2]; - alw_voicing[1] = st->voicing[2]; - - i = 0; - if ( element_mode == IVAS_CPE_TD && st->idchan == 1 && hCPE->hStereoTD->tdm_low_rate_mode == 1 ) - { - i = 1; - } - - analy_lp( inp_12k8, L_FRAME, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, i ); - - lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); - stab_fac = lsf_stab( lsf_new, st->lsf_old1, 0, L_FRAME ); - mvr2r( lsf_new, st->lsf_old1, M ); - - if ( element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - /*----------------------------------------------------------------* - * Comparison of the LP coefficents to determine if it is possible - * to reuse the primary channel LP coefficients in the secondary channel - *----------------------------------------------------------------*/ - - hCPE->hStereoTD->tdm_lp_reuse_flag = tdm_lp_comparison( hCPE->hStereoTD, hCPE->hStereoClassif, st, inp_12k8, tdm_A_PCh, A, M, tdm_lsp_new_PCh, lsp_new, L_FRAME, element_brate - nb_bits_metadata * FRAMES_PER_SEC ); - } - - /*----------------------------------------------------------------* - * Compute weighted input (for OL pitch analysis) - * OL pitch analysis - * stable high pitch detection - * 1/4 pitch precision improvement - *----------------------------------------------------------------*/ - - find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1_FLT, L_look ); - - if ( st->vad_flag == 0 ) - { - /* reset the OL pitch tracker memories during inactive frames */ - pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); - } - - old_pitch1 = st->pitch[1]; - - pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, *relE, L_look, st->clas, st->input_bwidth, st->Opt_SC_VBR ); - - /* Updates for adaptive lag window memory */ - st->old_pitch_la = st->pitch[2]; - - /* Detection of very short stable pitch period */ - StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); - - /* 1/4 pitch precision improvement */ - if ( element_brate <= IVAS_32k ) - { - pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[0], &voicing_fr[0], 0, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[1], &voicing_fr[1], L_SUBFR, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[2], &voicing_fr[2], 2 * L_SUBFR, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[3], &voicing_fr[3], 3 * L_SUBFR, wsp, 7 ); - } - else - { - pitch_fr[0] = st->pitch[0]; - pitch_fr[1] = st->pitch[0]; - pitch_fr[2] = st->pitch[1]; - pitch_fr[3] = st->pitch[1]; - - voicing_fr[0] = st->voicing[0]; - voicing_fr[1] = st->voicing[0]; - voicing_fr[2] = st->voicing[1]; - voicing_fr[3] = st->voicing[1]; - } - - /*------------------------------------------------------------------* - * Update estimated noise energy and voicing cut-off frequency - *-----------------------------------------------------------------*/ - - noise_est( st, old_pitch1, tmpN, epsP, Etot, *relE, corr_shift, tmpE, fr_bands, cor_map_sum, &ncharX, &sp_div, - &non_staX, loc_harm, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &dummy /*sp_floor*/, S_map, hStereoClassif, NULL, st->ini_frame ); - - if ( lr_vad_enabled && st->idchan == 0 ) - { - /* Run noise_est for Left and Right channel */ - *loc_harmLR = *loc_harm; - noise_est( st, old_pitch1, tmpN_LR[0], epsP, Etot_LR[0], Etot_LR[0] - hCPE->hFrontVad[0]->lp_speech, corr_shiftL, tmpE_LR[0], fr_bands_LR[0], &cor_map_sum_LR[0], &ncharX_LR, &sp_div_LR, - &non_staX_LR, loc_harmLR, lf_E_LR[0], &hCPE->hFrontVad[0]->hNoiseEst->harm_cor_cnt, hCPE->hFrontVad[0]->hNoiseEst->Etot_l_lp, &dummy, S_map_LR, NULL, hCPE->hFrontVad[0], hCPE->hFrontVad[0]->ini_frame ); - - /* Note: the index [0] in the last argument is intended, the ini_frame counter is only maintained in the zero-th channel's VAD handle */ - noise_est( st, old_pitch1, tmpN_LR[1], epsP, Etot_LR[1], Etot_LR[1] - hCPE->hFrontVad[1]->lp_speech, corr_shiftR, tmpE_LR[1], fr_bands_LR[1], &cor_map_sum_LR[1], &ncharX_LR, &sp_div_LR, - &non_staX_LR, loc_harmLR, lf_E_LR[1], &hCPE->hFrontVad[1]->hNoiseEst->harm_cor_cnt, hCPE->hFrontVad[1]->hNoiseEst->Etot_l_lp, &dummy, S_map_LR, NULL, hCPE->hFrontVad[1], hCPE->hFrontVad[0]->ini_frame ); - } - - /*------------------------------------------------------------------* - * Update parameters used in the VAD and DTX - *-----------------------------------------------------------------*/ - - vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); - - if ( lr_vad_enabled && st->idchan == 0 ) - { - vad_param_updt( st, corr_shiftL, corr_shiftR, A, old_pitch1, &hCPE->hFrontVad[0], CPE_CHANNELS ); - } - - /*-----------------------------------------------------------------* - * Find spectral tilt - * UC and VC frame selection - *-----------------------------------------------------------------*/ - - find_tilt( fr_bands, st->hNoiseEst->bckr, ee, st->pitch, st->voicing, lf_E, corr_shift, st->input_bwidth, st->max_band, hp_E, MODE1, &( st->bckr_tilt_lt_flt ), st->Opt_SC_VBR ); - - st->coder_type = find_uv( st, pitch_fr, voicing_fr, inp_12k8, ee, &dE1X, corr_shift, *relE, Etot, hp_E, &flag_spitch, last_core_orig, hStereoClassif ); - - /*-----------------------------------------------------------------* - * channel aware mode configuration * - *-----------------------------------------------------------------*/ - - st->rf_mode = 0; - st->rf_target_bits_write = 0; - - /*-----------------------------------------------------------------* - * Signal classification for FEC - * TC frame selection - *-----------------------------------------------------------------*/ - - st->clas = signal_clas( st, inp_12k8, ee, *relE, L_look, tdm_SM_last_clas ); - select_TC( MODE1, st->tc_cnt, &st->coder_type, st->localVAD ); - - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->Local_VAD = st->localVAD; - } - - /*-----------------------------------------------------------------* - * Collect stereo classifier features - *-----------------------------------------------------------------*/ +/*---------------------------------------------------------------* + * Local constants + *---------------------------------------------------------------*/ - if ( hStereoClassif != NULL ) - { - stereo_classifier_features( hStereoClassif, st->idchan, element_mode, localVAD_HE_SAD, lsf_new, epsP, st->pitch, st->voicing, *cor_map_sum, non_staX, sp_div, st->clas ); - } +#define SCE_SMC_THR 16000 - /*----------------------------------------------------------------* - * 1st stage speech/music classification (GMM model) - *----------------------------------------------------------------*/ - smc_dec = ivas_smc_gmm( st, hStereoClassif, localVAD_HE_SAD, Etot, lsp_new, *cor_map_sum, epsP, PS, non_staX, *relE, &high_lpn_flag, flag_spitch ); +static void calculate_energy_buffer_ivas_fx( CPE_ENC_HANDLE hCPE, Word32 enerBuffer_dft[], const Word16 no_channels, const Word32 input_Fs, Word16 *enerBuffer_dft_e ); -#ifdef DEBUGGING - if ( st->idchan == 0 ) - { - if ( st->force == FORCE_SPEECH ) - { - /* enforce speech */ - st->sp_aud_decision0 = 0; - } - else if ( st->force == FORCE_MUSIC ) - { - /* enforce music */ - st->sp_aud_decision0 = 1; - } - } +#ifdef IVAS_FIXED_ENC +static void calculate_energy_buffer_fx( CPE_ENC_HANDLE hCPE, Word64 enerBuffer_dft_fx[], Word16 *enerBuffer_dft_q_fx, const Word16 no_channels, const Word32 input_Fs ); #endif - /*----------------------------------------------------------------* - * VAD energy updates - * Update of old per-band energy spectrum - *----------------------------------------------------------------*/ - - long_enr( st, Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); - - mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); - - if ( lr_vad_enabled && st->idchan == 0 ) - { - long_enr( st, -1, localVAD_HE_SAD, high_lpn_flag, hCPE->hFrontVad, CPE_CHANNELS, localVAD_HE_SAD_LR, Etot_LR ); - - mvr2r( fr_bands_LR[0] + NB_BANDS, hCPE->hFrontVad[0]->hNoiseEst->enrO, NB_BANDS ); - mvr2r( fr_bands_LR[1] + NB_BANDS, hCPE->hFrontVad[1]->hNoiseEst->enrO, NB_BANDS ); - } - - /*----------------------------------------------------------------* - * SNR-based speech/music classification - * AC frame selection - *----------------------------------------------------------------*/ - - st->GSC_IVAS_mode = 0; - if ( st->idchan == 1 && element_mode == IVAS_CPE_TD ) - { - /* No speech/music classification in the secondary channel of TD stereo */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - - st->GSC_noisy_speech = 0; - if ( st->hGSCEnc != NULL ) - { - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - } - else if ( element_mode != IVAS_CPE_MDCT ) +/*-------------------------------------------------------------------* + * pre_proc_front_ivas() + * + * Front Pre-processing for IVAS + * (resampling, spectral analysis, LP analysis, VAD, OL pitch calculation, classification) + *--------------------------------------------------------------------*/ +static Word16 get_zero_flag( Word32 arr[], Word16 len ) +{ + FOR( Word16 j = 0; j < len; j++ ) { - /* SNR-based speech/music classification */ - if ( ( element_mode >= IVAS_CPE_DFT && element_brate >= IVAS_24k4 ) || ( element_mode == IVAS_SCE && element_brate >= SCE_SMC_THR ) ) - { - if ( ivas_format == SBA_FORMAT && st->core_brate != FRAME_NO_DATA && st->last_core_brate == FRAME_NO_DATA && st->sba_br_sw_while_no_data ) - { - SetModeIndex( st, st->bits_frame_nominal * FRAMES_PER_SEC, element_mode, MCT_flag ); - st->sba_br_sw_while_no_data = 0; - } - else if ( ivas_format == SBA_FORMAT && st->core_brate == FRAME_NO_DATA && element_brate != last_element_brate ) - { - st->sba_br_sw_while_no_data = 1; - } - - if ( flag_16k_smc ) - { - /* Compute core-coder buffers at internal sampling rate */ - error = ivas_compute_core_buffers( st, NULL, old_inp_16k, NULL, input_frame, IVAS_SCE /*last_element_mode*/, INT_FS_16k /*sr_core_tmp*/, ener, A, Aw, epsP, lsp_new, lsp_mid ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - - smc_dec = ivas_acelp_tcx20_switching( st, st->speech_enc_flt, st->wspeech_enc_flt, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac, res_cod_SNR_M, flag_16k_smc ); - } - else - { - smc_dec = ivas_acelp_tcx20_switching( st, inp_12k8, wsp, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac, res_cod_SNR_M, flag_16k_smc ); - } - } - /* Switch to ACELP for non-harmonic transient signals */ - else if ( ( ( element_mode >= IVAS_CPE_DFT && element_brate <= IVAS_16k4 ) || ( element_mode == IVAS_SCE && element_brate < SCE_SMC_THR ) ) && ( loc_harm[0] != 1 ) && smc_dec == MUSIC ) + IF( arr[j] != 0 ) { - if ( element_mode == IVAS_SCE ) - { - if ( transient_analysis( st->hTranDet, st->hNoiseEst->cor_map, st->hNoiseEst->multi_harm_limit ) ) - { - smc_dec = SPEECH; - } - } - else if ( element_mode == IVAS_CPE_DFT ) - { - for ( i = 0; i < CPE_CHANNELS; i++ ) - { - if ( smc_dec != SPEECH && transient_analysis( hCPE->hCoreCoder[i]->hTranDet, st->hNoiseEst->cor_map, st->hNoiseEst->multi_harm_limit ) ) - { - smc_dec = SPEECH; /* overwrite initial music decision, initial SPEECH_MUSIC never changed */ - } - } - } + return 1; + BREAK; } - - /* 2nd stage speech/music classification (ACELP/GSC/TCX core selection) */ - ivas_smc_mode_selection( st, element_brate, smc_dec, *relE, Etot, attack_flag, inp_12k8, S_map, flag_spitch ); - } - - /*----------------------------------------------------------------* - * Final VAD correction (when HE-SAD is used instead of the normal VAD, - * rewrite the VAD flag by VAD flag with DTX hangover for further processing) - *----------------------------------------------------------------*/ - - if ( st->Opt_DTX_ON && element_mode != IVAS_CPE_DFT ) - { - st->vad_flag = *vad_flag_dtx; } - - /*-----------------------------------------------------------------* - * Update old input signal buffer - *-----------------------------------------------------------------*/ - - mvr2r( &old_inp_12k8[L_FRAME], st->old_inp_12k8, L_INP_MEM ); - - pop_wmops(); - return error; + return 0; } -#else + ivas_error pre_proc_front_ivas_fx( SCE_ENC_HANDLE hSCE, /* i/o: SCE encoder structure */ CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -1405,7 +609,7 @@ ivas_error pre_proc_front_ivas_fx( move16(); // PREEMPH_FX( new_inp_12k8_fx - STEREO_DFT_OVL_12k8 + L_FRAME, PREEMPH_FAC, STEREO_DFT_OVL_12k8, &dummy_fx ); - PREEMPH_32FX( new_inp_12k8_fx - STEREO_DFT_OVL_12k8 + L_FRAME, sig_out, PREEMPH_FAC, STEREO_DFT_OVL_12k8, &dummy_fx ); + PREEMPH_32FX( new_inp_12k8_fx - STEREO_DFT_OVL_12k8 + L_FRAME, sig_out + L_FRAME, PREEMPH_FAC, STEREO_DFT_OVL_12k8, &dummy_fx ); preemp_start_idx = new_inp_12k8_fx - STEREO_DFT_OVL_12k8; move16(); preemp_len = STEREO_DFT_OVL_12k8 + L_FRAME; @@ -1446,11 +650,11 @@ ivas_error pre_proc_front_ivas_fx( } // PREEMPH_FX( new_inp_12k8_fx - lMemRecalc_12k8, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); - PREEMPH_32FX( new_inp_12k8_fx - lMemRecalc_12k8, sig_out, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); + PREEMPH_32FX( new_inp_12k8_fx - lMemRecalc_12k8, sig_out + preemp_len, PREEMPH_FAC, L_FRAME, &st->mem_preemph_fx ); dummy_fx = st->mem_preemph_fx; move16(); // PREEMPH_FX( new_inp_12k8_fx - lMemRecalc_12k8 + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy_fx ); - PREEMPH_32FX( new_inp_12k8_fx - lMemRecalc_12k8 + L_FRAME, sig_out + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy_fx ); + PREEMPH_32FX( new_inp_12k8_fx - lMemRecalc_12k8 + L_FRAME, sig_out + preemp_len + L_FRAME, PREEMPH_FAC, lMemRecalc_12k8 + L_FILT, &dummy_fx ); test(); IF( preemp_start_idx && preemp_len ) @@ -1472,7 +676,7 @@ ivas_error pre_proc_front_ivas_fx( dummy_fx = st->mem_preemph_fx; move16(); // PREEMPH_FX( new_inp_12k8_fx + L_FRAME, PREEMPH_FAC, L_FILT, &dummy_fx ); - PREEMPH_32FX( new_inp_12k8_fx + L_FRAME, sig_out, PREEMPH_FAC, L_FILT, &dummy_fx ); + PREEMPH_32FX( new_inp_12k8_fx + L_FRAME, sig_out + L_FRAME, PREEMPH_FAC, L_FILT, &dummy_fx ); preemp_start_idx = new_inp_12k8_fx; preemp_len = L_FRAME + L_FILT; move16(); @@ -2555,14 +1759,11 @@ ivas_error pre_proc_front_ivas_fx( Scale_sig( old_inp_12k8_fx, L_INP_12k8, negate( add( Q_new, 1 ) ) ); -#ifdef IVAS_FLOAT_FIXED free( mem_decim_dummy_fx ); free( temp1F_icatdmResampBuf_fx ); -#endif pop_wmops(); return error; } -#endif #ifdef IVAS_FIXED_ENC /*-------------------------------------------------------------------* @@ -2632,7 +1833,6 @@ static void calculate_energy_buffer_fx( * * calculate DFT-based energies *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void calculate_energy_buffer_ivas_fx( CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ Word32 enerBuffer_dft_fx[], /* o : energy buffer() */ @@ -2709,52 +1909,3 @@ static void calculate_energy_buffer_ivas_fx( } return; } -#else -static void calculate_energy_buffer( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - float enerBuffer_dft[], /* o : energy buffer */ - const int16_t no_channels, /* i : no. of used CLDFB channels */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - int16_t i, j; - float *pDFT_DMX, *p_nrg_DMX; - float nrg_DMX[CLDFB_NO_CHANNELS_MAX]; - float band_res_dft, chan_width_f, chan_width_bins; - int16_t start, stop; - - band_res_dft = ( (float) input_Fs ) / hCPE->hStereoDft->NFFT; - chan_width_f = 24000.f / CLDFB_NO_CHANNELS_MAX; - chan_width_bins = chan_width_f / band_res_dft; - - set_f( nrg_DMX, 0, CLDFB_NO_CHANNELS_MAX ); - - pDFT_DMX = hCPE->hStereoDft->DFT[0]; - start = 1; - p_nrg_DMX = nrg_DMX; - - *p_nrg_DMX += (float) ( pDFT_DMX[0] * pDFT_DMX[0] ); - for ( i = 0; i < no_channels; i++ ) - { - stop = (int16_t) ( ( i + 1 ) * chan_width_bins + 0.5f ); - for ( j = start; j < stop; j++ ) - { - *p_nrg_DMX += (float) ( pDFT_DMX[2 * j] * pDFT_DMX[2 * j] + pDFT_DMX[2 * j + 1] * pDFT_DMX[2 * j + 1] ); - } - start = stop; - p_nrg_DMX++; - } - - for ( i = 0; i < no_channels; i++ ) /* Consider only used channels, dependent on Fs */ - { - enerBuffer_dft[i] = nrg_DMX[i] / 3; - } - - /* Set remaining entries of enerBuffer to zero */ - for ( ; i < CLDFB_NO_CHANNELS_MAX; i++ ) - { - enerBuffer_dft[i] = 0.f; - } - return; -} -#endif diff --git a/lib_enc/ivas_corecoder_enc_reconfig.c b/lib_enc/ivas_corecoder_enc_reconfig.c index 9c831efdc..c35d3f572 100644 --- a/lib_enc/ivas_corecoder_enc_reconfig.c +++ b/lib_enc/ivas_corecoder_enc_reconfig.c @@ -45,453 +45,6 @@ * * Allocate, initialize, and configure SCE/CPE/MCT handles in case of bitrate switching *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_corecoder_enc_reconfig( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t nSCE_old, /* i : number of SCEs in previous frame */ - const int16_t nCPE_old, /* i : number of CPEs in previous frame */ - const int16_t nchan_transport_old, /* i : number of TCs in previous frame */ - const int32_t brate_SCE, /* i : bitrate to be set for the SCEs */ - const int32_t brate_CPE, /* i : bitrate to be set for the CPEs */ - const MC_MODE last_mc_mode /* i : switching between MC modes: last mode */ -) -{ - int16_t n, sce_id, cpe_id; - int16_t len_inp_memory, n_CoreCoder_existing, nSCE_existing, nCPE_existing; - float input_buff[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )]; - BSTR_ENC_HANDLE hBstr; - int16_t i, nb_bits; - Indice temp_ind_list[MAX_NUM_IND_TEMP_LIST]; - int16_t nb_bits_tot; - int16_t nchan_transport_real, nchan_transport_old_real; - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - hEncoderConfig = st_ivas->hEncoderConfig; - error = IVAS_ERR_OK; - - len_inp_memory = (int16_t) ( hEncoderConfig->input_Fs / FRAMES_PER_SEC ); - if ( hEncoderConfig->ivas_format == SBA_FORMAT ) - { - len_inp_memory += NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); - } - - nchan_transport_old_real = nchan_transport_old; - nchan_transport_real = st_ivas->nchan_transport; - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - nchan_transport_real += st_ivas->hEncoderConfig->nchan_ism; - } - - /*-----------------------------------------------------------------* - * Switching between SCE(s)/CPE(s)/MCT - *-----------------------------------------------------------------*/ - - if ( nchan_transport_real == nchan_transport_old_real && st_ivas->nSCE == nSCE_old && st_ivas->nCPE == nCPE_old ) /* in McMASA, nchan_transport may be the same, but nSCE/nCPE differs */ - { - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); - st_ivas->hSCE[sce_id]->element_brate = brate_SCE; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = brate_CPE; - - /* prepare bitstream buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); - - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - } - - if ( st_ivas->nCPE > 1 ) - { - if ( ( error = mct_enc_reconfigure( st_ivas, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - - /* in SCE+CPE McMASA nchan_transport is still 2, fix the numbers */ - if ( hEncoderConfig->ivas_format == MC_FORMAT && last_mc_mode == MC_MODE_MCMASA ) - { - nchan_transport_old_real = nSCE_old + CPE_CHANNELS * nCPE_old; - } - - if ( hEncoderConfig->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) - { - nchan_transport_real = st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE; - } - - /* something in transport changes */ - hBstr = NULL; - - /* get the index list pointers */ - if ( nSCE_old ) - { - hBstr = st_ivas->hSCE[0]->hCoreCoder[0]->hBstr; - } - else if ( nCPE_old ) - { - hBstr = st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; - } - - /* save bitstream information */ - nb_bits_tot = hBstr->nb_bits_tot; - i = 0; - nb_bits = 0; - while ( nb_bits < nb_bits_tot && i < MAX_NUM_IND_TEMP_LIST ) - { - if ( hBstr->ind_list[i].nb_bits > 0 ) - { - temp_ind_list[i].id = hBstr->ind_list[i].id; - temp_ind_list[i].value = hBstr->ind_list[i].value; - temp_ind_list[i].nb_bits = hBstr->ind_list[i].nb_bits; - hBstr->ind_list[i].nb_bits = -1; - } - - hBstr->nb_bits_tot = 0; - hBstr->nb_ind_tot = 0; - - nb_bits += temp_ind_list[i].nb_bits; - i++; - } - - for ( ; i < MAX_NUM_IND_TEMP_LIST; i++ ) - { - /* reset nb_bits of all other indices to -1 */ - temp_ind_list[i].nb_bits = -1; - } - - - if ( hEncoderConfig->ivas_format == MC_FORMAT && last_mc_mode == MC_MODE_MCMASA && st_ivas->mc_mode == MC_MODE_MCMASA ) - { - /* within McMASA we can modify the transport signals when switching */ - /* copy earlier dmx buffers */ - if ( nSCE_old > 0 ) - { - set_zero( input_buff[0], len_inp_memory ); - mvr2r( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff, input_buff[0], len_inp_memory ); - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - set_zero( input_buff[n + 1], len_inp_memory ); - if ( nCPE_old > 0 ) - { - mvr2r( st_ivas->hCPE[0]->hCoreCoder[n]->input_buff, input_buff[n + 1], len_inp_memory ); - } - } - - ivas_mcmasa_dmx_modify( len_inp_memory, input_buff, nSCE_old + CPE_CHANNELS * nCPE_old, st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE ); - - n_CoreCoder_existing = 0; - } - else - { - n_CoreCoder_existing = min( nchan_transport_real, nchan_transport_old_real ); - } - - /* destroy superfluous core-coder elements */ - for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ ) - { - /* save input audio buffers */ - if ( n_CoreCoder_existing > sce_id ) - { - mvr2r( st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, input_buff[sce_id], len_inp_memory ); - } - - destroy_sce_enc( st_ivas->hSCE[sce_id], EQ_16( st_ivas->hEncoderConfig->element_mode_init, EVS_MONO ) ); - st_ivas->hSCE[sce_id] = NULL; - } - - for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ ) - { - /* save input audio buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( n_CoreCoder_existing > cpe_id * CPE_CHANNELS + n ) - { - mvr2r( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->input_buff, input_buff[( cpe_id - st_ivas->nCPE ) * CPE_CHANNELS + n], len_inp_memory ); - } - } - - destroy_cpe_enc( st_ivas->hCPE[cpe_id] ); - st_ivas->hCPE[cpe_id] = NULL; - } - - if ( st_ivas->nCPE <= 1 && st_ivas->hMCT != NULL ) - { - ivas_mct_enc_close( &( st_ivas->hMCT ) ); - } - - /* special case, if we have MCT now and had a single CPE before, remove the MDCT Stereo handles */ - if ( st_ivas->nCPE > 1 && nCPE_old == 1 ) - { - free( st_ivas->hCPE[0]->hStereoMdct ); - st_ivas->hCPE[0]->hStereoMdct = NULL; - } - - /* create missing core coder elements and set element bitrates for already existing ones */ - if ( st_ivas->nSCE > 0 ) - { - nSCE_existing = min( nSCE_old, st_ivas->nSCE ); - - for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ ) - { - copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); - st_ivas->hSCE[sce_id]->element_brate = brate_SCE; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - - ivas_destroy_MD_bstr_enc( &( st_ivas->hSCE[sce_id]->hMetaData ) ); - } - - for ( sce_id = nSCE_existing; sce_id < st_ivas->nSCE; sce_id++ ) - { - if ( ( error = create_sce_enc( st_ivas, sce_id, brate_SCE ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* propagate input audio buffers */ - if ( n_CoreCoder_existing > sce_id && hEncoderConfig->ivas_format != MASA_ISM_FORMAT ) - { - mvr2r( input_buff[sce_id], st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, len_inp_memory ); - } - - /* only reset indices if it is not the first index list, this already contains the IVAS format bits */ - if ( sce_id > 0 || hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - reset_indices_enc( st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr, st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->nb_ind_tot ); - } - } - - if ( st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData == NULL ) - { - if ( ( error = ivas_initialize_MD_bstr_enc( &( st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData ), st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( st_ivas->nCPE > 0 ) - { - nCPE_existing = min( nCPE_old, st_ivas->nCPE ); - - for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = brate_CPE; - - /* allocate buffer of indices */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - - if ( ( cpe_id * CPE_CHANNELS + n > 0 ) || - ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->nSCE > 0 ) || - ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 ) ) - { - reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->nb_ind_tot ); - } - } - } - - for ( cpe_id = nCPE_existing; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - if ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->hMcMasa->separateChannelEnabled ) - { - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - } - - if ( ( error = create_cpe_enc( st_ivas, cpe_id, brate_CPE ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* propagate input audio buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( n_CoreCoder_existing > cpe_id * CPE_CHANNELS + n ) - { - mvr2r( input_buff[n], st_ivas->hCPE[cpe_id]->hCoreCoder[n]->input_buff, len_inp_memory ); - } - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - /* only reset indices if it is not the first index list, this already contains the IVAS format bits */ - if ( cpe_id * CPE_CHANNELS + n > 0 || ( st_ivas->mc_mode == MC_MODE_MCMASA && st_ivas->nSCE > 0 ) ) - { - reset_indices_enc( st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr, st_ivas->hCPE[cpe_id]->hCoreCoder[n]->hBstr->nb_ind_tot ); - } - - if ( hEncoderConfig->Opt_DTX_ON ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->cng_sba_flag = 1; - } - } - } - } - - /* restore bitstream - IVAS format bits should be written in the first core channel of the first SCE/CPE */ - i = 0; - nb_bits = 0; - if ( st_ivas->nSCE > 0 ) - { - while ( nb_bits < nb_bits_tot && i < MAX_NUM_IND_TEMP_LIST ) - { - if ( temp_ind_list[i].nb_bits > 0 ) - { - st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->ind_list[i].id = temp_ind_list[i].id; - st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->ind_list[i].value = temp_ind_list[i].value; - st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->ind_list[i].nb_bits = temp_ind_list[i].nb_bits; - } - - nb_bits += temp_ind_list[i].nb_bits; - i++; - } - st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->nb_ind_tot = i; - st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->nb_bits_tot = nb_bits_tot; - } - else if ( st_ivas->nCPE > 0 ) - { - while ( nb_bits < nb_bits_tot && i < MAX_NUM_IND_TEMP_LIST ) - { - if ( temp_ind_list[i].nb_bits > 0 ) - { - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->ind_list[i].id = temp_ind_list[i].id; - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->ind_list[i].value = temp_ind_list[i].value; - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->ind_list[i].nb_bits = temp_ind_list[i].nb_bits; - } - - nb_bits += temp_ind_list[i].nb_bits; - i++; - } - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->nb_ind_tot = i; - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->nb_bits_tot = nb_bits_tot; - } - - - if ( last_mc_mode == MC_MODE_MCMASA && st_ivas->mc_mode == MC_MODE_MCMASA ) - { - /* restore modified transport signal */ - if ( st_ivas->nSCE ) - { - mvr2r( input_buff[0], st_ivas->hSCE[0]->hCoreCoder[0]->input_buff, len_inp_memory ); - } - - if ( st_ivas->nCPE ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( input_buff[n + 1], st_ivas->hCPE[0]->hCoreCoder[n]->input_buff, len_inp_memory ); - } - } - } - - if ( st_ivas->nCPE > 1 && nCPE_old <= 1 ) - { - if ( nCPE_old == 1 ) - { - /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handles for MCT */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; - st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); - st_ivas->hCPE[0]->hCoreCoder[n]->igf = getIgfPresent( st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, - st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal * FRAMES_PER_SEC, - st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, - st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ); - - IF( ( error = IGF_Reconfig_fx( &st_ivas->hCPE[0]->hCoreCoder[n]->hIGFEnc, st_ivas->hCPE[0]->hCoreCoder[n]->igf, 1, st_ivas->hCPE[0]->element_brate, st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( ( error = create_mct_enc( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->hMCT != NULL && st_ivas->nCPE > 1 ) - { - if ( ( error = mct_enc_reconfigure( st_ivas, st_ivas->nchan_transport != nchan_transport_old ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* alllocate buffer for metadata indices */ - if ( st_ivas->nCPE > 0 ) - { - if ( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData == NULL ) - { - if ( ( error = ivas_initialize_MD_bstr_enc( &( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData ), st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - reset_indices_enc( st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData, st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData->nb_ind_tot ); - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE - 1; cpe_id++ ) - { - ivas_destroy_MD_bstr_enc( &( st_ivas->hCPE[cpe_id]->hMetaData ) ); - } - } - - /* special case, if we have a single CPE and had MCT before we need to init the MDCT stereo handles here */ - if ( st_ivas->nCPE == 1 && nCPE_old > 1 ) - { - if ( ( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - - /* set correct nominal bitrates and igf config already here, needed for the correct init of the MDCT Stereo handle */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[0]->hCoreCoder[n]->total_brate = st_ivas->hCPE[0]->element_brate; - st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[0]->element_brate / FRAMES_PER_SEC ); - st_ivas->hCPE[0]->hCoreCoder[n]->igf = getIgfPresent( st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, - st_ivas->hCPE[0]->hCoreCoder[n]->bits_frame_nominal * FRAMES_PER_SEC, - st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, - st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ); - - if ( ( error = IGF_Reconfig( &st_ivas->hCPE[0]->hCoreCoder[n]->hIGFEnc, st_ivas->hCPE[0]->hCoreCoder[n]->igf, 1, st_ivas->hCPE[0]->element_brate, st_ivas->hCPE[0]->hCoreCoder[n]->bwidth, st_ivas->hCPE[0]->hCoreCoder[n]->element_mode, st_ivas->hCPE[0]->hCoreCoder[n]->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* reset mct_chan_mode */ - st_ivas->hCPE[0]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - - initMdctStereoEncData( st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct, hEncoderConfig->ivas_format, st_ivas->hCPE[st_ivas->nCPE - 1]->element_mode, st_ivas->hCPE[st_ivas->nCPE - 1]->element_brate, hEncoderConfig->max_bwidth, 0, NULL, 1 ); - st_ivas->hCPE[st_ivas->nCPE - 1]->hStereoMdct->isSBAStereoMode = ( ( hEncoderConfig->ivas_format == SBA_FORMAT || hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); - } - } - - return error; -} -#else /* Some float operations are still pending */ ivas_error ivas_corecoder_enc_reconfig_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ @@ -1154,4 +707,3 @@ ivas_error ivas_corecoder_enc_reconfig_fx( return error; } -#endif diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index f40980db9..83a6d0e4b 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -44,29 +44,22 @@ #include "debug.h" #endif #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "ivas_rom_enc.h" #include "prot_fx_enc.h" -#endif /*--------------------------------------------------------------------------* * Local function prototypes *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_mode_combined_format_enc_fx( const Encoder_Struct *st_ivas, CPE_ENC_HANDLE hCPE ); -#else -static void stereo_mode_combined_format_enc( const Encoder_Struct *st_ivas, CPE_ENC_HANDLE hCPE ); -#endif /*-------------------------------------------------------------------* * ivas_cpe_enc() * * Channel Pair Element (CPE) encoding routine *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_cpe_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const Word16 cpe_id, /* i : CPE # identifier */ @@ -80,7 +73,6 @@ ivas_error ivas_cpe_enc_fx( CPE_ENC_HANDLE hCPE; Encoder_State **sts; Word16 n, n_CoreChannels; -#ifdef IVAS_FLOAT_FIXED Word32 old_inp_12k8_fx[CPE_CHANNELS][L_INP_12k8]; /* buffer of input signal @ 12k8 Q16 */ Word16 old_inp_12k8_16fx[CPE_CHANNELS][L_INP_12k8]; /* buffer of input signal @ 12k8 Q-1 */ Word32 old_inp_16k_fx[CPE_CHANNELS][L_INP]; /* buffer of input signal @ 16kHz Q16 */ @@ -88,7 +80,6 @@ ivas_error ivas_cpe_enc_fx( Word16 fft_buff_fx[CPE_CHANNELS][2 * L_FFT]; /* FFT buffer */ Word16 fft_buff_fx_q[CPE_CHANNELS]; /* FFT buffer */ Word16 fft_buff_fx_final_q = MAX_16; -#endif Word32 ener_fx[CPE_CHANNELS]; /* residual energy from Levinson-Durbin Q6 */ Word16 relE_fx[CPE_CHANNELS]; /* frame relative energy Q8 */ Word16 A_fx[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )] = { 0 }; /* A(z) unquantized for subframes Q12 */ @@ -109,11 +100,9 @@ ivas_error ivas_cpe_enc_fx( Word16 vad_flag_dtx[CPE_CHANNELS]; /* HE-SAD flag with additional DTX HO */ Word32 enerBuffer_fx[CPE_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ Word16 enerBuffer_fx_exp[CPE_CHANNELS]; /* energy buffer */ -#ifdef IVAS_FLOAT_FIXED - Word16 currFlatness_fx[CPE_CHANNELS]; /* flatness parameter Q7 */ -#endif - Word16 tdm_ratio_idx, tdm_ratio_idx_SM; /* temp. TD stereo parameters */ - Word16 tdm_SM_or_LRTD_Pri; /* temp. TD stereo parameters */ + Word16 currFlatness_fx[CPE_CHANNELS]; /* flatness parameter Q7 */ + Word16 tdm_ratio_idx, tdm_ratio_idx_SM; /* temp. TD stereo parameters */ + Word16 tdm_SM_or_LRTD_Pri; /* temp. TD stereo parameters */ Word16 nb_bits; /* number of DFT stereo side bits */ Word32 fr_bands_fx[CPE_CHANNELS][2 * NB_BANDS]; /* energy in frequency bands (Q_buffer + QSCALE) */ @@ -246,7 +235,6 @@ ivas_error ivas_cpe_enc_fx( stereo_mode_combined_format_enc_fx( st_ivas, hCPE ); -#ifdef IVAS_FLOAT_FIXED Word16 Q_inp = 0; move16(); Word16 band_ener_guardbits = find_guarded_bits_fx( 2 * NB_BANDS ); @@ -299,13 +287,6 @@ ivas_error ivas_cpe_enc_fx( hCPE->hFrontVad[n]->q_buffer_12k8 = Q_buffer[n]; } } -#endif -#else - - if ( ( error = front_vad( hCPE, NULL, hEncoderConfig, &hCPE->hFrontVad[0], st_ivas->hMCT != NULL, input_frame, vad_flag_dtx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies_LR, NULL, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } #endif sts[0]->element_mode = hCPE->element_mode; sts[1]->element_mode = hCPE->element_mode; @@ -321,17 +302,10 @@ ivas_error ivas_cpe_enc_fx( /*----------------------------------------------------------------* * dynamically allocate data structures depending on the actual stereo mode *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED IF( NE_32( ( error = stereo_memory_enc_fx( hCPE, input_Fs, max_bwidth, ivas_format, st_ivas->nchan_transport ) ), IVAS_ERR_OK ) ) { return error; } -#else - if ( ( error = stereo_memory_enc( hCPE, input_Fs, max_bwidth, &tdm_last_ratio, ivas_format, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif /*----------------------------------------------------------------* @@ -367,7 +341,6 @@ ivas_error ivas_cpe_enc_fx( /*----------------------------------------------------------------* * Resets/updates in case of stereo switching *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED shift = getScaleFactor16( sts[1]->old_input_signal_fx, input_frame ); Scale_sig( sts[1]->old_input_signal_fx, input_frame, shift ); sts[1]->q_old_inp = add( sts[1]->q_old_inp, shift ); @@ -402,13 +375,9 @@ ivas_error ivas_cpe_enc_fx( stereo_switching_enc_fx( hCPE, sts[0]->old_input_signal_fx, input_frame, q_inp ); -#else - stereo_switching_enc( hCPE, sts[0]->old_input_signal, input_frame ); -#endif /*----------------------------------------------------------------* * Temporal inter-channel alignment, stereo adjustment *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Copy_Scale_sig_16_32( sts[0]->input_buff_fx, sts[0]->input_buff32_fx, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ), Q6 ); sts[0]->q_inp32 = add( Q6, sts[0]->q_inp ); @@ -427,9 +396,6 @@ ivas_error ivas_cpe_enc_fx( move16(); move16(); move16(); -#else - stereo_tca_enc( hCPE, input_frame ); -#endif /*----------------------------------------------------------------* * Input signal buffering - needed in IC-BWE and TD ITD in MDCT stereo *----------------------------------------------------------------*/ @@ -576,11 +542,7 @@ ivas_error ivas_cpe_enc_fx( #ifdef DEBUGGING hCPE->hStereoMdct->mdct_stereo_mode_cmdl = hEncoderConfig->mdct_stereo_mode_cmdl; #endif -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 0 ); -#else initMdctStereoEncData_fx( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 0 ); -#endif hCPE->hStereoMdct->isSBAStereoMode = ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); } } @@ -605,7 +567,6 @@ ivas_error ivas_cpe_enc_fx( } /*flt2fix end*/ #endif -#ifdef IVAS_FLOAT_FIXED Word16 temp = getScaleFactor32( hCPE->hStereoDft->Spd_L_smooth_fx, STEREO_DFT_N_32k_ENC / 2 ); scale_sig32( hCPE->hStereoDft->Spd_L_smooth_fx, STEREO_DFT_N_32k_ENC / 2, temp ); hCPE->hStereoDft->Spd_L_smooth_fx_e = sub( hCPE->hStereoDft->Spd_L_smooth_fx_e, temp ); @@ -650,15 +611,6 @@ ivas_error ivas_cpe_enc_fx( stereo_td_itd_fx( hCPE->hStereoDft->hItd, hCPE->hStereoDft->input_mem_itd_fx, hCPE->hStereoDft->q_input_mem_itd, hCPE->hStereoDft->hConfig->hybrid_itd_flag, hCPE->hStereoDft->dft_ovl, sts, input_frame, hCPE->input_mem_fx, hCPE->q_input_mem ); stereo_dft_enc_analyze_fx( sts, CPE_CHANNELS, input_frame, hCPE->hStereoDft, NULL, hCPE->hStereoDft->DFT_fx, hCPE->hStereoDft->DFT_fx_e, hCPE->input_mem_fx, hCPE->q_input_mem ); -#else - stereo_dft_hybrid_ITD_flag( hCPE->hStereoDft->hConfig, input_Fs, hCPE->hStereoDft->hItd->hybrid_itd_max ); - - /* Time Domain ITD compensation using extrapolation */ - stereo_td_itd( hCPE->hStereoDft->hItd, hCPE->hStereoDft->input_mem_itd, hCPE->hStereoDft->hConfig->hybrid_itd_flag, hCPE->hStereoDft->dft_ovl, sts, input_frame, hCPE->input_mem ); - - /* DFT on right and left input channels */ - stereo_dft_enc_analyze( sts, CPE_CHANNELS, input_frame, hCPE->hStereoDft, NULL, hCPE->hStereoDft->DFT, hCPE->input_mem ); -#endif sts[0]->total_brate = L_mult0( add( sts[0]->bits_frame_nominal, 10 ), FRAMES_PER_SEC ); /* add small overhead; st[0]->total_brate used in coder_type_modif() */ /* Update DFT Stereo memories */ @@ -717,7 +669,6 @@ ivas_error ivas_cpe_enc_fx( } else if ( hCPE->element_mode == IVAS_CPE_MDCT ) { -#ifdef IVAS_FLOAT_FIXED #ifdef IVAS_FLOAT_FIXED_CONVERSIONS if ( hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) { @@ -765,9 +716,6 @@ ivas_error ivas_cpe_enc_fx( } stereo_td_itd_mdct_stereo_fx( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); -#else - stereo_td_itd_mdct_stereo( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); -#endif } /*----------------------------------------------------------------* @@ -844,7 +792,6 @@ ivas_error ivas_cpe_enc_fx( FOR( n = 0; n < n_CoreChannels; n++ ) { -#ifdef IVAS_FLOAT_FIXED FOR( Word16 i = 0; i < hCPE->hCoreCoder[n]->nb_subfr; i++ ) { Scale_sig( &A_fx[n][i * ( M + 1 )], M + 1, sub( norm_s( A_fx[n][i * ( M + 1 )] ), 2 ) ); // scaling to Q12 @@ -859,12 +806,6 @@ ivas_error ivas_cpe_enc_fx( band_energies_LR_fx, sub( add( Q_buffer[n], QSCALE ), band_ener_guardbits ), 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, 0, 0, ivas_format, st_ivas->hMCT != NULL, ivas_total_brate ); e_old_wsp[n] = sub( Q15, q_old_wsp ); move16(); -#else - error = pre_proc_front_ivas( NULL, hCPE, hCPE->element_brate, nb_bits_metadata, input_frame, n, old_inp_12k8[n], old_inp_16k[n], - &ener[n], &relE[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], &vad_hover_flag[n], &attack_flag[n], - realBuffer[n], imagBuffer[n], old_wsp[n], pitch_fr[n], voicing_fr[n], &loc_harm[n], &cor_map_sum[n], &vad_flag_dtx[n], enerBuffer[n], - fft_buff[n], A[0], lsp_new[0], currFlatness[n], tdm_ratio_idx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, band_energies_LR, 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, 0, 0, ivas_format, st_ivas->hMCT != NULL, ivas_total_brate ); -#endif if ( error != IVAS_ERR_OK ) { return error; @@ -907,11 +848,7 @@ ivas_error ivas_cpe_enc_fx( /* MDCT stereo DTX: active/inactive frame decision; compute FD CNG coherence */ if ( hCPE->element_mode == IVAS_CPE_MDCT && hEncoderConfig->Opt_DTX_ON ) { -#ifdef IVAS_FLOAT_FIXED stereoFdCngCoherence_fx( sts, hCPE->last_element_mode, fft_buff_fx, sub( 15, fft_buff_fx_final_q ) /*fft exp*/ ); -#else - stereoFdCngCoherence( sts, hCPE->last_element_mode, fft_buff ); -#endif /* Reset metadata */ test(); @@ -924,7 +861,6 @@ ivas_error ivas_cpe_enc_fx( /*----------------------------------------------------------------* * Core codec configuration *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* IGF reconfiguration */ FOR( n = 0; n < n_CoreChannels; n++ ) { @@ -944,47 +880,20 @@ ivas_error ivas_cpe_enc_fx( } } } -#else - /* IGF reconfiguration */ - for ( n = 0; n < n_CoreChannels; n++ ) - { - if ( ( hCPE->last_element_brate != hCPE->element_brate || hCPE->element_mode != hCPE->last_element_mode || ( hCPE->element_mode == IVAS_CPE_TD && sts[0]->bits_frame_nominal != last_bits_frame_nominal ) || sts[n]->last_bwidth != sts[n]->bwidth ) && ( n == 0 || hCPE->element_mode == IVAS_CPE_MDCT ) ) - { - int16_t igf; - igf = getIgfPresent( sts[n]->element_mode, sts[n]->bits_frame_nominal * FRAMES_PER_SEC, sts[n]->max_bwidth, sts[n]->rf_mode ); - if ( ( error = IGF_Reconfig( &sts[n]->hIGFEnc, igf, 0, sts[n]->bits_frame_nominal * FRAMES_PER_SEC, sts[n]->max_bwidth, sts[n]->element_mode, sts[n]->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } -#endif if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->hMCT == NULL ) { /* set coded BW for MDCT stereo */ -#ifndef IVAS_FLOAT_FIXED - set_bw_stereo( hCPE ); -#else set_bw_stereo_fx( hCPE ); -#endif /* reconfiguration of MDCT stereo */ if ( sts[0]->bwidth != sts[0]->last_bwidth || ( ( hCPE->last_element_brate != hCPE->element_brate || hCPE->last_element_mode != hCPE->element_mode ) && sts[0]->bwidth != sts[0]->max_bwidth ) ) { -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, sts[0]->bwidth, 0, NULL, 0 ); -#else initMdctStereoEncData_fx( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, sts[0]->bwidth, 0, NULL, 0 ); -#endif hCPE->hStereoMdct->isSBAStereoMode = ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); if ( hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) -#else IF( NE_32( ( error = initMdctItdHandling_fx( hCPE->hStereoMdct, input_Fs ) ), IVAS_ERR_OK ) ) -#endif { return error; } @@ -1008,26 +917,13 @@ ivas_error ivas_cpe_enc_fx( /* configure TD stereo encoder */ if ( hCPE->element_mode == IVAS_CPE_TD ) { -#ifdef IVAS_FLOAT_FIXED tdm_ol_pitch_comparison_fx( hCPE, pitch_fr_fx, voicing_fr_fx ); -#else - tdm_ol_pitch_comparison( hCPE, pitch_fr, voicing_fr ); -#endif -#ifdef IVAS_FLOAT_FIXED tdm_configure_enc_fx( ivas_format, st_ivas->ism_mode, hCPE, Etot_last_fx, tdm_SM_or_LRTD_Pri, tdm_ratio_idx, tdm_ratio_idx_SM, attack_flag[0], nb_bits_metadata ); IF( hEncoderConfig->Opt_DTX_ON ) { stereo_cng_upd_counters_fx( hCPE->hStereoCng, hCPE->element_mode, -1, NULL, sts[0]->hTdCngEnc->burst_ho_cnt, NULL ); } -#else - tdm_configure_enc( ivas_format, st_ivas->ism_mode, hCPE, Etot_last, tdm_SM_or_LRTD_Pri, tdm_ratio_idx, tdm_ratio_idx_SM, attack_flag[0], nb_bits_metadata ); - - if ( hEncoderConfig->Opt_DTX_ON ) - { - stereo_cng_upd_counters( hCPE->hStereoCng, hCPE->element_mode, -1, NULL, sts[0]->hTdCngEnc->burst_ho_cnt, NULL ); - } -#endif } /* modify the coder_type depending on the total_brate per channel */ @@ -1046,17 +942,10 @@ ivas_error ivas_cpe_enc_fx( * Write IVAS format signaling in SID frames *----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - if ( sts[0]->core_brate == SID_2k40 ) - { - ivas_write_format_sid( ivas_format, hCPE->element_mode, sts[0]->hBstr ); - } -#else IF( EQ_32( sts[0]->core_brate, SID_2k40 ) ) { ivas_write_format_sid_fx( ivas_format, hCPE->element_mode, sts[0]->hBstr ); } -#endif /*----------------------------------------------------------------* * DFT Stereo residual coding @@ -1073,16 +962,6 @@ ivas_error ivas_cpe_enc_fx( IF( EQ_32( sts[0]->core_brate, SID_2k40 ) || EQ_32( sts[0]->core_brate, FRAME_NO_DATA ) ) { /* Reconfigure DFT Stereo for inactive frames */ -#ifndef IVAS_FLOAT_FIXED - if ( sts[0]->core_brate == SID_2k40 ) - { - stereo_dft_config( hCPE->hStereoDft->hConfig, IVAS_SID_5k2, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft->hConfig, FRAME_NO_DATA, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } -#else IF( EQ_32( sts[0]->core_brate, SID_2k40 ) ) { stereo_dft_config_fx( hCPE->hStereoDft->hConfig, IVAS_SID_5k2, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); @@ -1091,7 +970,6 @@ ivas_error ivas_cpe_enc_fx( { stereo_dft_config_fx( hCPE->hStereoDft->hConfig, FRAME_NO_DATA, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); } -#endif stereo_dft_cng_side_gain_fx( hCPE->hStereoDft, hCPE->hStereoCng, sts[0]->core_brate, sts[0]->last_core_brate, sts[0]->bwidth ); } @@ -1244,1255 +1122,149 @@ ivas_error ivas_cpe_enc_fx( pop_wmops(); return error; } -#else -ivas_error ivas_cpe_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - float data_f_ch0[], /* i : input signal for channel 0 */ - float data_f_ch1[], /* i : input signal for channel 1 */ - const int16_t input_frame, /* i : input frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ + +/*------------------------------------------------------------------------- + * create_cpe_enc() + * + * Create, allocate and initialize IVAS encoder CPE handle + *-------------------------------------------------------------------------*/ +ivas_error create_cpe_enc_fx( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const Word16 cpe_id, /* i : CPE # identifier */ + const Word32 element_brate /* i : element bitrate */ ) { + Word16 n; + Word16 ivas_format, element_mode_init, max_bwidth; + Word32 input_Fs; CPE_ENC_HANDLE hCPE; - Encoder_State **sts; - int16_t n, n_CoreChannels; - float old_inp_12k8[CPE_CHANNELS][L_INP_12k8]; /* buffer of input signal @ 12k8 */ - float old_inp_16k[CPE_CHANNELS][L_INP]; /* buffer of input signal @ 16kHz */ - float ener[CPE_CHANNELS]; /* residual energy from Levinson-Durbin */ - float relE[CPE_CHANNELS]; /* frame relative energy */ - float A[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ - float Aw[CPE_CHANNELS][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ - float epsP[CPE_CHANNELS][M + 1]; /* LP prediction errors */ - float lsp_new[CPE_CHANNELS][M]; /* LSPs at the end of the frame */ - float lsp_mid[CPE_CHANNELS][M]; /* ISPs in the middle of the frame */ - int16_t vad_hover_flag[CPE_CHANNELS]; /* VAD hangover flag */ - int16_t attack_flag[CPE_CHANNELS]; /* attack flag (GSC or TC) */ - float realBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ - float imagBuffer[CPE_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ - float old_wsp[CPE_CHANNELS][L_WSP]; /* old weighted input signal */ - float pitch_fr[CPE_CHANNELS][NB_SUBFR]; /* fractional pitch values */ - float voicing_fr[CPE_CHANNELS][NB_SUBFR]; /* fractional pitch gains */ - int16_t loc_harm[CPE_CHANNELS]; /* harmonicity flag */ - float cor_map_sum[CPE_CHANNELS]; /* speech/music clasif. parameter */ - int16_t vad_flag_dtx[CPE_CHANNELS]; /* HE-SAD flag with additional DTX HO */ - float enerBuffer[CPE_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ - float currFlatness[CPE_CHANNELS]; /* flatness parameter */ - float fft_buff[CPE_CHANNELS][2 * L_FFT]; /* FFT buffer */ - int16_t tdm_ratio_idx, tdm_ratio_idx_SM; /* temp. TD stereo parameters */ - int16_t tdm_SM_or_LRTD_Pri; /* temp. TD stereo parameters */ - float tdm_last_ratio; /* temp. TD stereo parameters */ - int16_t nb_bits; /* number of DFT stereo side bits */ - float fr_bands[CPE_CHANNELS][2 * NB_BANDS]; /* energy in frequency bands */ - float Etot_LR[CPE_CHANNELS]; /* total energy */ - float lf_E[CPE_CHANNELS][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - int16_t localVAD_HE_SAD[CPE_CHANNELS]; /* HE-SAD flag without hangover, LR channels */ - float band_energies_LR[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ - float orig_input[CPE_CHANNELS][L_FRAME48k]; - float Etot_last[CPE_CHANNELS]; - int32_t tmp, input_Fs; - int16_t max_bwidth, ivas_format; + Encoder_State *st; ENCODER_CONFIG_HANDLE hEncoderConfig; - int32_t ivas_total_brate; ivas_error error; - int32_t cpe_brate; - int32_t element_brate_ref; - int16_t last_bits_frame_nominal; /* last_bits_frame_nominal for M or PCh channel */ error = IVAS_ERR_OK; - push_wmops( "ivas_cpe_enc" ); - hCPE = st_ivas->hCPE[cpe_id]; - sts = hCPE->hCoreCoder; hEncoderConfig = st_ivas->hEncoderConfig; - max_bwidth = hEncoderConfig->max_bwidth; + ivas_format = hEncoderConfig->ivas_format; + move16(); + element_mode_init = hEncoderConfig->element_mode_init; + move16(); input_Fs = hEncoderConfig->input_Fs; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - element_brate_ref = hCPE->element_brate; - last_bits_frame_nominal = sts[0]->bits_frame_nominal; - - /*------------------------------------------------------------------* - * Initialization - general - *-----------------------------------------------------------------*/ - - tdm_SM_or_LRTD_Pri = 0; - tdm_ratio_idx = -1; - tdm_ratio_idx_SM = -1; -#ifndef IVAS_FLOAT_FIXED - tdm_last_ratio = 0; -#endif - + move16(); + max_bwidth = hEncoderConfig->max_bwidth; + move16(); - /*------------------------------------------------------------------* - * CPE initialization - core coder + /*-----------------------------------------------------------------* + * Allocate CPE handle *-----------------------------------------------------------------*/ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - sts[n]->idchan = n; - sts[n]->core = -1; - sts[n]->core_brate = -1; /* updated in dtx() */ - sts[n]->max_bwidth = max_bwidth; - if ( st_ivas->hMCT == NULL ) /*already updated before CPE call*/ - { - sts[n]->input_bwidth = sts[n]->last_input_bwidth; /* updated in BWD */ - sts[n]->bwidth = sts[n]->last_bwidth; /* updated in BWD */ - } - sts[n]->rate_switching_reset = 0; -#ifdef DEBUGGING - sts[n]->force = hEncoderConfig->force; - sts[n]->id_element = cpe_id + st_ivas->nSCE; -#endif - } - - mvr2r( data_f_ch0, sts[0]->input, input_frame ); - if ( data_f_ch1 != NULL ) /*this may happen for cases with odd number of channels*/ + IF( ( hCPE = (CPE_ENC_HANDLE) malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) { - mvr2r( data_f_ch1, sts[1]->input, input_frame ); + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); } - /*----------------------------------------------------------------* - * Stereo technology selection - * Front-VAD on input L and R channels - *----------------------------------------------------------------*/ + /*-----------------------------------------------------------------* + * Initialization - general parameters + *-----------------------------------------------------------------*/ - if ( sts[0]->ini_frame > 0 && st_ivas->hMCT == NULL ) - { - hCPE->element_mode = select_stereo_mode( hCPE, ivas_format ); - } + hCPE->cpe_id = cpe_id; + move16(); + hCPE->element_brate = element_brate; + move16(); + hCPE->last_element_brate = hCPE->element_brate; + move16(); + hCPE->element_mode = element_mode_init; + move16(); + hCPE->last_element_mode = element_mode_init; + move16(); - stereo_mode_combined_format_enc( st_ivas, hCPE ); + hCPE->hStereoDft = NULL; + hCPE->hStereoTD = NULL; + hCPE->hStereoMdct = NULL; + hCPE->hStereoTCA = NULL; + hCPE->hStereoICBWE = NULL; + hCPE->hMetaData = NULL; - if ( ( error = front_vad( hCPE, NULL, hEncoderConfig, &hCPE->hFrontVad[0], st_ivas->hMCT != NULL, input_frame, vad_flag_dtx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies_LR, NULL, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } + hCPE->hStereoCng = NULL; + hCPE->hFrontVad[0] = NULL; + hCPE->hFrontVad[1] = NULL; - sts[0]->element_mode = hCPE->element_mode; - sts[1]->element_mode = hCPE->element_mode; + hCPE->brate_surplus = 0; + move16(); + /*-----------------------------------------------------------------* + * Input memory buffer: allocate and initialize + *-----------------------------------------------------------------*/ - n_CoreChannels = 2; - if ( hCPE->element_mode == IVAS_CPE_DFT ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { - n_CoreChannels = 1; /* in DFT stereo, only M channel is coded */ + test(); + test(); + test(); + test(); + IF( EQ_16( ivas_format, STEREO_FORMAT ) || EQ_16( ivas_format, MASA_FORMAT ) || ( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) ) + { + IF( ( hCPE->input_mem_fx[n] = (Word16 *) malloc( sizeof( Word16 ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) + { + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); + } - sts[1]->vad_flag = 0; + set16_zero_fx( hCPE->input_mem_fx[n], NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ); + } + ELSE + { + hCPE->input_mem_fx[n] = NULL; + } } +#ifdef MSAN_FIX + set16_fx( hCPE->q_input_mem, Q15, CPE_CHANNELS ); +#endif - /*----------------------------------------------------------------* - * dynamically allocate data structures depending on the actual stereo mode - *----------------------------------------------------------------*/ + /*-----------------------------------------------------------------* + * stereo classifier: allocate and initialize + *-----------------------------------------------------------------*/ - if ( ( error = stereo_memory_enc( hCPE, input_Fs, max_bwidth, &tdm_last_ratio, ivas_format, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) + IF( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) { - return error; + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo classifier structure\n" ) ); } + stereo_classifier_init_fx( hCPE->hStereoClassif ); - /*----------------------------------------------------------------* - * Set TD stereo parameters - *----------------------------------------------------------------*/ + /*-----------------------------------------------------------------* + * Metadata: allocate and initialize + *-----------------------------------------------------------------*/ - if ( ( error = stereo_set_tdm( hCPE, input_frame ) ) != IVAS_ERR_OK ) + IF( EQ_16( cpe_id, sub( st_ivas->nCPE, 1 ) ) ) { - return error; + IF( NE_32( ( error = ivas_initialize_MD_bstr_enc( &( hCPE->hMetaData ), st_ivas ) ), IVAS_ERR_OK ) ) + { + return error; + } } - /*----------------------------------------------------------------* - * Resets/updates in case of stereo switching - *----------------------------------------------------------------*/ - - stereo_switching_enc( hCPE, sts[0]->old_input_signal, input_frame ); - - /*----------------------------------------------------------------* - * Temporal inter-channel alignment, stereo adjustment - *----------------------------------------------------------------*/ - - stereo_tca_enc( hCPE, input_frame ); - - /*----------------------------------------------------------------* - * Input signal buffering - needed in IC-BWE and TD ITD in MDCT stereo - *----------------------------------------------------------------*/ + /*-----------------------------------------------------------------* + * CoreCoder, 2 instances: allocate and initialize + *-----------------------------------------------------------------*/ - for ( n = 0; n < CPE_CHANNELS; n++ ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { - mvr2r( sts[n]->input, orig_input[n], input_frame ); - - if ( hCPE->hStereoICBWE != NULL ) + IF( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) { - hCPE->hStereoICBWE->dataChan[n] = &orig_input[n][0]; + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); } - } - /*---------------------------------------------------------------* - * Time Domain Transient Detector - *---------------------------------------------------------------*/ + copy_encoder_config_fx( st_ivas, st, 1 ); - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( sts[n]->hTranDet == NULL ) + IF( GT_16( st_ivas->nCPE, 1 ) ) { - currFlatness[n] = 0; - continue; + st->total_brate = hCPE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + move32(); } - - if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) ) + ELSE { - RunTransientDetection( sts[n]->input, input_frame, sts[n]->hTranDet ); - } - currFlatness[n] = GetTCXAvgTemporalFlatnessMeasure( sts[n]->hTranDet, NSUBBLOCKS, 0 ); - } - - /* Synchonize detection for downmix-based stereo */ - if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) - { - set_transient_stereo( hCPE, currFlatness ); - } - - /*----------------------------------------------------------------* - * Configuration of stereo encoder - *----------------------------------------------------------------*/ - - for ( n = 0; n < n_CoreChannels; n++ ) - { - /* Force to MODE1 in IVAS */ - sts[n]->codec_mode = MODE1; - - sts[n]->element_mode = hCPE->element_mode; - } - - - if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || sts[0]->ini_frame == 0 || - ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) || sts[0]->last_core_brate <= SID_2k40 ) ) /* If the last frame was SID or NO_DATA, we need to run stereo_dft_config here since VAD decision is not known yet */ - { - if ( st_ivas->hQMetaData != NULL ) - { - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MODE_NONE ) - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, (int32_t) ( 0.70f * st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC ), &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - else - { - /* note; "bits_frame_nominal" needed in TD stereo as well */ - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->tdm_LRTD_flag ) - { - sts[0]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - sts[1]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - } - else - { - stereo_dft_config( NULL, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - - mvr2r( data_f_ch0, sts[0]->input, input_frame ); - if ( data_f_ch1 != NULL ) /*this may happen for cases with odd number of channels*/ - { - mvr2r( data_f_ch1, sts[1]->input, input_frame ); - } - - /*----------------------------------------------------------------* - * Stereo technology selection - * Front-VAD on input L and R channels - *----------------------------------------------------------------*/ - - if ( sts[0]->ini_frame > 0 && st_ivas->hMCT == NULL ) - { - hCPE->element_mode = select_stereo_mode( hCPE, ivas_format ); - } - - stereo_mode_combined_format_enc( st_ivas, hCPE ); - - if ( ( error = front_vad( hCPE, NULL, hEncoderConfig, &hCPE->hFrontVad[0], st_ivas->hMCT != NULL, input_frame, vad_flag_dtx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies_LR, NULL, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - - sts[0]->element_mode = hCPE->element_mode; - sts[1]->element_mode = hCPE->element_mode; - - n_CoreChannels = 2; - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - n_CoreChannels = 1; /* in DFT stereo, only M channel is coded */ - - sts[1]->vad_flag = 0; - } - - /*----------------------------------------------------------------* - * dynamically allocate data structures depending on the actual stereo mode - *----------------------------------------------------------------*/ - - if ( ( error = stereo_memory_enc( hCPE, input_Fs, max_bwidth, &tdm_last_ratio, ivas_format, st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - - - /*----------------------------------------------------------------* - * Set TD stereo parameters - *----------------------------------------------------------------*/ - - if ( ( error = stereo_set_tdm( hCPE, input_frame ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*----------------------------------------------------------------* - * Resets/updates in case of stereo switching - *----------------------------------------------------------------*/ - - stereo_switching_enc( hCPE, sts[0]->old_input_signal, input_frame ); - - /*----------------------------------------------------------------* - * Temporal inter-channel alignment, stereo adjustment - *----------------------------------------------------------------*/ - - stereo_tca_enc( hCPE, input_frame ); - - /*----------------------------------------------------------------* - * Input signal buffering - needed in IC-BWE and TD ITD in MDCT stereo - *----------------------------------------------------------------*/ - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( sts[n]->input, orig_input[n], input_frame ); - - if ( hCPE->hStereoICBWE != NULL ) - { - hCPE->hStereoICBWE->dataChan[n] = &orig_input[n][0]; - } - } - - /*---------------------------------------------------------------* - * Time Domain Transient Detector - *---------------------------------------------------------------*/ - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( sts[n]->hTranDet == NULL ) - { - currFlatness[n] = 0; - continue; - } - - if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) ) - { - RunTransientDetection( sts[n]->input, input_frame, sts[n]->hTranDet ); - } - currFlatness[n] = GetTCXAvgTemporalFlatnessMeasure( sts[n]->hTranDet, NSUBBLOCKS, 0 ); - } - - /* Synchonize detection for downmix-based stereo */ - if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) - { - set_transient_stereo( hCPE, currFlatness ); - } - - /*----------------------------------------------------------------* - * Configuration of stereo encoder - *----------------------------------------------------------------*/ - - for ( n = 0; n < n_CoreChannels; n++ ) - { - /* Force to MODE1 in IVAS */ - sts[n]->codec_mode = MODE1; - - sts[n]->element_mode = hCPE->element_mode; - } - - - if ( hCPE->element_mode != IVAS_CPE_MDCT && ( hCPE->element_brate != hCPE->last_element_brate || hCPE->last_element_mode != hCPE->element_mode || sts[0]->ini_frame == 0 || - ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) || sts[0]->last_core_brate <= SID_2k40 ) ) /* If the last frame was SID or NO_DATA, we need to run stereo_dft_config here since VAD decision is not known yet */ - { - if ( st_ivas->hQMetaData != NULL ) - { - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode != ISM_MODE_NONE ) - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, (int32_t) ( 0.70f * st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC ), &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, st_ivas->hQMetaData->bits_frame_nominal * FRAMES_PER_SEC, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - else - { - /* note; "bits_frame_nominal" needed in TD stereo as well */ - stereo_dft_config( hCPE->hStereoDft == NULL ? NULL : hCPE->hStereoDft->hConfig, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->tdm_LRTD_flag ) - { - sts[0]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - sts[1]->bits_frame_nominal = (int16_t) ( ( hCPE->element_brate >> 1 ) / FRAMES_PER_SEC ); - } - else - { - stereo_dft_config( NULL, hCPE->element_brate, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - /* compute bit-rate surplus per channel in combined format coding */ - int32_t brate_surplus[CPE_CHANNELS]; - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - brate_surplus[0] = ( ( hCPE->brate_surplus / FRAMES_PER_SEC ) >> 1 ) * FRAMES_PER_SEC; - brate_surplus[1] = hCPE->brate_surplus - brate_surplus[0]; - } - - /* this is just for initialization, the true values of "total_brate" and "bits_frame_channel" are set later */ - for ( n = 0; n < n_CoreChannels; n++ ) - { - if ( st_ivas->hMCT ) - { - int16_t lfe_bits; - lfe_bits = ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ? st_ivas->hLFE->lfe_bits : 0 ); - sts[n]->total_brate = hCPE->element_brate; - sts[n]->bits_frame_nominal = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); - sts[n]->bits_frame_channel = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC - lfe_bits - nb_bits_metadata ) / st_ivas->hMCT->nchan_out_woLFE ); - } - else - { - sts[n]->bits_frame_nominal = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); - sts[n]->bits_frame_channel = (int16_t) ( ( hCPE->element_brate / FRAMES_PER_SEC ) / n_CoreChannels ); - sts[n]->total_brate = hCPE->element_brate / n_CoreChannels; - - /* subtract bit-rate for combined format coding */ - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - sts[n]->bits_frame_channel += (int16_t) ( brate_surplus[n] / FRAMES_PER_SEC ); - sts[n]->total_brate += brate_surplus[n]; - } - } - } - - /* reconfiguration in case of bitrate switching */ - if ( hCPE->element_brate != hCPE->last_element_brate && st_ivas->hMCT == NULL ) - { - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 0 ); - hCPE->hStereoMdct->isSBAStereoMode = ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); - } - } - - /*----------------------------------------------------------------* - * Stereo processing - * Stereo down-mix - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - stereo_dft_hybrid_ITD_flag( hCPE->hStereoDft->hConfig, input_Fs, hCPE->hStereoDft->hItd->hybrid_itd_max ); - - /* Time Domain ITD compensation using extrapolation */ - stereo_td_itd( hCPE->hStereoDft->hItd, hCPE->hStereoDft->input_mem_itd, hCPE->hStereoDft->hConfig->hybrid_itd_flag, hCPE->hStereoDft->dft_ovl, sts, input_frame, hCPE->input_mem ); - - /* DFT on right and left input channels */ - stereo_dft_enc_analyze( sts, CPE_CHANNELS, input_frame, hCPE->hStereoDft, NULL, hCPE->hStereoDft->DFT, hCPE->input_mem ); - - sts[0]->total_brate = ( sts[0]->bits_frame_nominal + 10 ) * FRAMES_PER_SEC; /* add small overhead; st[0]->total_brate used in coder_type_modif() */ - /* Update DFT Stereo memories */ - stereo_dft_enc_update( hCPE->hStereoDft, sts[0]->max_bwidth ); - - /* DFT stereo processing */ - stereo_dft_enc_process( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); - } - else if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* Determine the energy ratio between the 2 channels */ - tdm_ratio_idx = stereo_tdm_ener_analysis( - ivas_format, - hCPE, input_frame, &tdm_SM_or_LRTD_Pri, &tdm_ratio_idx_SM ); - - /* Compute the downmix signal based on the ratio index */ - stereo_tdm_downmix( hCPE->hStereoTD, sts[0]->input, sts[1]->input, input_frame, tdm_ratio_idx, ( ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) ? tdm_SM_or_LRTD_Pri : 0 ), tdm_ratio_idx_SM ); - - /* signal the bitrate for BW selection in the SCh */ - sts[0]->bits_frame_channel = 0; - sts[1]->bits_frame_channel = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC ); - sts[1]->bits_frame_channel += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); - if ( st_ivas->hQMetaData != NULL ) - { - sts[1]->bits_frame_channel -= st_ivas->hQMetaData->metadata_max_bits; - } - - Etot_last[0] = sts[0]->hNoiseEst->Etot_last; - Etot_last[1] = sts[1]->hNoiseEst->Etot_last; - } - else if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - stereo_td_itd_mdct_stereo( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); - } - - /*----------------------------------------------------------------* - * DFT stereo: iDFT and resampling on both channels - *----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - int32_t internal_Fs; - - internal_Fs = getTcxonly_ivas( IVAS_CPE_MDCT, sts[0]->bits_frame_nominal * FRAMES_PER_SEC, 0, sts[0]->is_ism_format ) == 0 ? INT_FS_16k : max( INT_FS_16k, sts[0]->sr_core ); - - /* iDFT at input sampling rate */ - stereo_dft_enc_synthesize( hCPE->hStereoDft, sts[0]->input, 0, input_Fs, input_Fs, 0 ); - - /* iDFT & resampling to 12.8kHz internal sampling rate */ - stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_12k8[0] + L_INP_MEM, 0, input_Fs, INT_FS_12k8, 0 ); - - /* iDFT & resampling to 16kHz internal sampling rate for M channel */ - if ( input_Fs == internal_Fs ) - { - mvr2r( sts[0]->input - STEREO_DFT_OVL_16k, old_inp_16k[0] + L_INP_MEM - STEREO_DFT_OVL_16k, input_frame + STEREO_DFT_OVL_16k ); - } - else - { - stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_16k[0] + L_INP_MEM, 0, input_Fs, internal_Fs, 0 ); - } - - /* DFT Stereo: iDFT of residual signal at 8kHz sampling rate */ - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) - { - mvr2r( sts[1]->old_inp_12k8, old_inp_12k8[1], L_INP_MEM ); - stereo_dft_enc_synthesize( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM, 1, input_Fs, 8000, 0 ); - - /* update old input signal buffer */ - mvr2r( old_inp_12k8[1] + L_FRAME8k, sts[1]->old_inp_12k8, L_INP_MEM ); - } - - /* no iDFT at input sampling rate for Side channel -> reset the buffer */ - set_zero( sts[1]->input, input_frame ); - } - - - /*----------------------------------------------------------------* - * Front Pre-processing - *----------------------------------------------------------------*/ - - for ( n = 0; n < n_CoreChannels; n++ ) - { - error = pre_proc_front_ivas( NULL, hCPE, hCPE->element_brate, nb_bits_metadata, input_frame, n, old_inp_12k8[n], old_inp_16k[n], - &ener[n], &relE[n], A[n], Aw[n], epsP[n], lsp_new[n], lsp_mid[n], &vad_hover_flag[n], &attack_flag[n], - realBuffer[n], imagBuffer[n], old_wsp[n], pitch_fr[n], voicing_fr[n], &loc_harm[n], &cor_map_sum[n], &vad_flag_dtx[n], enerBuffer[n], - fft_buff[n], A[0], lsp_new[0], currFlatness[n], tdm_ratio_idx, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, band_energies_LR, 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, 0, 0, ivas_format, st_ivas->hMCT != NULL, ivas_total_brate ); - if ( error != IVAS_ERR_OK ) - { - return error; - } - } - - /* sanity check -> DTX not supported for more than one SCEs/CPEs */ - if ( st_ivas->nSCE + st_ivas->nCPE > 1 ) - { - if ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) - { - sts[0]->core_brate = -1; - sts[0]->total_brate = hCPE->element_brate; - } - } - - /*----------------------------------------------------------------* - * Stereo DTX updates - *----------------------------------------------------------------*/ - - if ( ivas_format == MASA_FORMAT && nb_bits_metadata > 0 && hCPE->hCoreCoder[0]->Opt_DTX_ON ) - { - if ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) - { - reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata ); - } - } - - /* MDCT stereo DTX: active/inactive frame decision; compute FD CNG coherence */ - if ( hCPE->element_mode == IVAS_CPE_MDCT && hEncoderConfig->Opt_DTX_ON ) - { - stereoFdCngCoherence( sts, hCPE->last_element_mode, fft_buff ); - - /* Reset metadata */ - if ( sts[0]->cng_sba_flag || ( ivas_format == SBA_FORMAT ) ) - { - reset_metadata_spatial( ivas_format, hCPE->hMetaData, hCPE->element_brate, &tmp, sts[0]->core_brate, nb_bits_metadata ); - } - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - /* IGF reconfiguration */ - for ( n = 0; n < n_CoreChannels; n++ ) - { - if ( ( hCPE->last_element_brate != hCPE->element_brate || hCPE->element_mode != hCPE->last_element_mode || ( hCPE->element_mode == IVAS_CPE_TD && sts[0]->bits_frame_nominal != last_bits_frame_nominal ) || sts[n]->last_bwidth != sts[n]->bwidth ) && ( n == 0 || hCPE->element_mode == IVAS_CPE_MDCT ) ) - { - int16_t igf; - igf = getIgfPresent( sts[n]->element_mode, sts[n]->bits_frame_nominal * FRAMES_PER_SEC, sts[n]->max_bwidth, sts[n]->rf_mode ); - if ( ( error = IGF_Reconfig( &sts[n]->hIGFEnc, igf, 0, sts[n]->bits_frame_nominal * FRAMES_PER_SEC, sts[n]->max_bwidth, sts[n]->element_mode, sts[n]->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->hMCT == NULL ) - { - /* set coded BW for MDCT stereo */ - set_bw_stereo( hCPE ); - - /* reconfiguration of MDCT stereo */ - if ( sts[0]->bwidth != sts[0]->last_bwidth || ( ( hCPE->last_element_brate != hCPE->element_brate || hCPE->last_element_mode != hCPE->element_mode ) && sts[0]->bwidth != sts[0]->max_bwidth ) ) - { - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, sts[0]->bwidth, 0, NULL, 0 ); - hCPE->hStereoMdct->isSBAStereoMode = ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); - - if ( hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) - { - if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - - /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ - for ( n = 0; n < n_CoreChannels; n++ ) - { - if ( ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) && hCPE->element_mode == IVAS_CPE_DFT ) - { - sts[n]->flag_ACELP16k = set_ACELP_flag_IVAS( hCPE->element_mode, hCPE->element_brate, sts[n]->core_brate, n, sts[0]->tdm_LRTD_flag, sts[n]->bwidth, sts[n]->cng_type ); - } - else - { - sts[n]->flag_ACELP16k = set_ACELP_flag_IVAS( hCPE->element_mode, hCPE->element_brate, sts[n]->total_brate, n, sts[0]->tdm_LRTD_flag, sts[n]->bwidth, sts[n]->cng_type ); - } - } - - /* configure TD stereo encoder */ - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - tdm_ol_pitch_comparison( hCPE, pitch_fr, voicing_fr ); - - tdm_configure_enc( ivas_format, st_ivas->ism_mode, hCPE, Etot_last, tdm_SM_or_LRTD_Pri, tdm_ratio_idx, tdm_ratio_idx_SM, attack_flag[0], nb_bits_metadata ); - - if ( hEncoderConfig->Opt_DTX_ON ) - { - stereo_cng_upd_counters( hCPE->hStereoCng, hCPE->element_mode, -1, NULL, sts[0]->hTdCngEnc->burst_ho_cnt, NULL ); - } - } - - /* modify the coder_type depending on the total_brate per channel */ - for ( n = 0; n < n_CoreChannels; n++ ) - { - if ( ( hCPE->element_mode != IVAS_CPE_DFT && hCPE->element_mode != IVAS_CPE_TD ) || n == 0 ) /* modify coder_type of primary channel */ - { - /* limit coder_type depending on the bitrate */ - coder_type_modif( sts[n], relE[n] ); - } - } - - /*----------------------------------------------------------------* - * Write IVAS format signaling in SID frames - *----------------------------------------------------------------*/ - - if ( sts[0]->core_brate == SID_2k40 ) - { - ivas_write_format_sid( ivas_format, hCPE->element_mode, sts[0]->hBstr ); - } - - /*----------------------------------------------------------------* - * DFT Stereo residual coding - * DFT Stereo parameters writing into the bitstream - *----------------------------------------------------------------*/ - - cpe_brate = 0; - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( hEncoderConfig->Opt_DTX_ON ) - { - if ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) - { - /* Reconfigure DFT Stereo for inactive frames */ - if ( sts[0]->core_brate == SID_2k40 ) - { - stereo_dft_config( hCPE->hStereoDft->hConfig, IVAS_SID_5k2, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - else - { - stereo_dft_config( hCPE->hStereoDft->hConfig, FRAME_NO_DATA, &sts[0]->bits_frame_nominal, &sts[1]->bits_frame_nominal ); - } - - stereo_dft_cng_side_gain( hCPE->hStereoDft, hCPE->hStereoCng, sts[0]->core_brate, sts[0]->last_core_brate, sts[0]->bwidth ); - } - else - { - stereo_cng_upd_counters( hCPE->hStereoCng, hCPE->element_mode, hCPE->hStereoDft->nbands, hCPE->hStereoDft->sidSideGain, sts[0]->hTdCngEnc->burst_ho_cnt, &hCPE->hStereoDft->coh_fade_counter ); - } - } - - /* Write stereo bitstream */ - cpe_brate = st_ivas->hCPE[0]->element_brate; - - /* DFT stereo side bits */ - if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && cpe_brate < MASA_STEREO_MIN_BITRATE && sts[0]->core_brate != SID_2k40 && sts[0]->core_brate != FRAME_NO_DATA ) - { - nb_bits = 0; /* Only mono downmix is transmitted in this case */ - } - else if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) ) - { - nb_bits = hCPE->hMetaData->nb_bits_tot; - } - else - { - stereo_dft_enc_write_BS( hCPE, &nb_bits ); - } - - /* Residual coding in MDCT domain */ - if ( !( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) ) ) - { - int16_t max_bits = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal ); - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - max_bits -= nb_bits_metadata; - if ( hCPE->brate_surplus < 0 ) - { - max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC ); - } - } - - stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, max_bits ); - } - - if ( sts[0]->core_brate == FRAME_NO_DATA || sts[0]->core_brate == SID_2k40 ) - { - assert( ( nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS ) ) && "Stereo DFT CNG: bit budget is violated" ); - } - else - { - /* Flexible total bitrate in M channel */ - sts[0]->total_brate = hCPE->element_brate - ( nb_bits * FRAMES_PER_SEC ); - } - - /* subtract metadata bitbudget */ - sts[0]->total_brate -= ( nb_bits_metadata * FRAMES_PER_SEC ); - - /* subtract bit-rate for combined format coding */ - if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) - { - sts[0]->total_brate += hCPE->brate_surplus; - } - } - - - /*----------------------------------------------------------------* - * Core Encoder - *----------------------------------------------------------------*/ - - if ( ( error = ivas_core_enc( NULL, hCPE, st_ivas->hMCT, n_CoreChannels, old_inp_12k8, old_inp_16k, ener, A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, realBuffer, imagBuffer, old_wsp, loc_harm, cor_map_sum, vad_flag_dtx, enerBuffer, fft_buff, tdm_SM_or_LRTD_Pri, ivas_format, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - hCPE->last_element_brate = hCPE->element_brate; - hCPE->last_element_mode = hCPE->element_mode; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - hCPE->element_brate = element_brate_ref; - } - - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) - { - /* update input samples buffer */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( orig_input[n], sts[n]->old_input_signal, input_frame ); - } - } - else if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - mvr2r( sts[0]->input, sts[0]->old_input_signal, input_frame ); - } - else if ( st_ivas->hMCT == NULL ) /* note: in MCT, input buffers are updated later in ivas_mct_enc() */ - { - /* update input samples buffer */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( sts[n]->input, sts[n]->old_input_signal, input_frame ); - } - } - - if ( hCPE->hFrontVad[0] != NULL ) - { - hCPE->hFrontVad[0]->ini_frame++; - hCPE->hFrontVad[0]->ini_frame = min( hCPE->hFrontVad[0]->ini_frame, MAX_FRAME_COUNTER ); - } - - /* Store previous attack detection flag */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - sts[n]->hTranDet->transientDetector.prev_bIsAttackPresent = sts[n]->hTranDet->transientDetector.bIsAttackPresent; - } - - - pop_wmops(); - return error; -} -#endif - -/*------------------------------------------------------------------------- - * create_cpe_enc() - * - * Create, allocate and initialize IVAS encoder CPE handle - *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error create_cpe_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t cpe_id, /* i : CPE # identifier */ - const int32_t element_brate /* i : element bitrate */ -) -{ - int16_t n; - int16_t ivas_format, element_mode_init, max_bwidth; - int32_t input_Fs; - CPE_ENC_HANDLE hCPE; - Encoder_State *st; - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - - error = IVAS_ERR_OK; - - hEncoderConfig = st_ivas->hEncoderConfig; - - ivas_format = hEncoderConfig->ivas_format; - element_mode_init = hEncoderConfig->element_mode_init; - input_Fs = hEncoderConfig->input_Fs; - max_bwidth = hEncoderConfig->max_bwidth; - - /*-----------------------------------------------------------------* - * Allocate CPE handle - *-----------------------------------------------------------------*/ - - if ( ( hCPE = (CPE_ENC_HANDLE) malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialization - general parameters - *-----------------------------------------------------------------*/ - - hCPE->cpe_id = cpe_id; - hCPE->element_brate = element_brate; - hCPE->last_element_brate = hCPE->element_brate; - hCPE->element_mode = element_mode_init; - hCPE->last_element_mode = element_mode_init; - - hCPE->hStereoDft = NULL; - hCPE->hStereoTD = NULL; - hCPE->hStereoMdct = NULL; - hCPE->hStereoTCA = NULL; - hCPE->hStereoICBWE = NULL; - hCPE->hMetaData = NULL; - - hCPE->hStereoCng = NULL; - hCPE->hFrontVad[0] = NULL; - hCPE->hFrontVad[1] = NULL; - - hCPE->brate_surplus = 0; - - /*-----------------------------------------------------------------* - * Input memory buffer: allocate and initialize - *-----------------------------------------------------------------*/ - - // This should be removed when actual create_cpe_enc_fx -#ifdef IVAS_FLOAT_FIXED - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - IF( EQ_16( ivas_format, STEREO_FORMAT ) || EQ_16( ivas_format, MASA_FORMAT ) || ( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) ) - { - IF( ( hCPE->input_mem_fx[n] = (Word16 *) malloc( sizeof( Word16 ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - - set16_zero_fx( hCPE->input_mem_fx[n], NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ); - } - ELSE - { - hCPE->input_mem_fx[n] = NULL; - } - } -#ifdef MSAN_FIX - set16_fx( hCPE->q_input_mem, Q15, CPE_CHANNELS ); -#endif -#endif - - /*-----------------------------------------------------------------* - * stereo classifier: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo classifier structure\n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - stereo_classifier_init( hCPE->hStereoClassif ); -#else - stereo_classifier_init_fx( hCPE->hStereoClassif ); -#endif - - /*-----------------------------------------------------------------* - * Metadata: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( cpe_id == ( st_ivas->nCPE - 1 ) ) - { - if ( ( error = ivas_initialize_MD_bstr_enc( &( hCPE->hMetaData ), st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * CoreCoder, 2 instances: allocate and initialize - *-----------------------------------------------------------------*/ - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - -#ifdef IVAS_FLOAT_FIXED - copy_encoder_config_fx( st_ivas, st, 1 ); -#else - copy_encoder_config( st_ivas, st, 1 ); -#endif - - st->total_brate = hCPE->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - - if ( ( error = init_encoder( st, st_ivas, n, hEncoderConfig->var_SID_rate_flag, hEncoderConfig->interval_SID, 0, ISM_MODE_NONE, hCPE->element_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st->hFdCngEnc != NULL ) - { - st->hFdCngEnc->hFdCngCom->CngBitrate = hCPE->element_brate - 1; - } - - hCPE->hCoreCoder[n] = st; - } - - /*-----------------------------------------------------------------* - * LR VAD initialization - *-----------------------------------------------------------------*/ - -#ifdef DEBUGGING - if ( hEncoderConfig->Opt_DTX_ON && ( hCPE->element_mode == IVAS_CPE_TD || hEncoderConfig->stereo_mode_cmdl == 1 ) && !( ivas_format == MASA_FORMAT && element_mode_init == IVAS_CPE_MDCT ) ) -#else - if ( hEncoderConfig->Opt_DTX_ON ) -#endif - { - if ( hCPE->element_mode == IVAS_CPE_TD || hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD \n" ) ); - } - -#ifndef IVAS_FLOAT_FIXED - stereo_enc_cng_init( hCPE->hStereoCng ); -#else - stereo_enc_cng_init_fx( hCPE->hStereoCng ); -#endif - } - } - else - { - hCPE->hStereoCng = NULL; - } - - if ( hEncoderConfig->Opt_DTX_ON && element_mode_init != IVAS_CPE_MDCT ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( ( error = front_vad_create( &( hCPE->hFrontVad[n] ), hEncoderConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hCPE->hFrontVad[n] = NULL; - } - } - - /*-----------------------------------------------------------------* - * DFT stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = stereo_dft_enc_create( &( hCPE->hStereoDft ), input_Fs, max_bwidth ) ) != IVAS_ERR_OK ) -#else - if ( ( error = stereo_dft_enc_create_fx( &( hCPE->hStereoDft ), input_Fs, max_bwidth ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - - /*-----------------------------------------------------------------* - * Temporal inter-channel alignment initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode != IVAS_CPE_MDCT ) - { - if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - - stereo_tca_init_enc_fx( hCPE->hStereoTCA, input_Fs ); - } - - /*-----------------------------------------------------------------* - * Stereo IC BWE initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode != IVAS_CPE_MDCT ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_enc_fx( hCPE->hStereoICBWE ); - } - - /*-----------------------------------------------------------------* - * TD stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); - } -#ifndef IVAS_FLOAT_FIXED - stereo_td_init_enc( hCPE->hStereoTD, hCPE->last_element_mode ); -#else - stereo_td_init_enc_fx( hCPE->hStereoTD, hCPE->last_element_mode ); -#endif - } - - /*-----------------------------------------------------------------* - * MDCT stereo initialization - *-----------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_MDCT && st_ivas->nCPE == 1 ) - { - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - -#ifdef DEBUGGING - hCPE->hStereoMdct->mdct_stereo_mode_cmdl = st_ivas->hEncoderConfig->mdct_stereo_mode_cmdl; -#endif - -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 1 ); -#else - initMdctStereoEncData_fx( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, max_bwidth, 0, NULL, 1 ); -#endif - hCPE->hStereoMdct->isSBAStereoMode = ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && ( st_ivas->nchan_transport == 2 ) ); - - if ( hCPE->element_mode == IVAS_CPE_MDCT && element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) - { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) -#else - IF( ( error = initMdctItdHandling_fx( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - } - - st_ivas->hCPE[cpe_id] = hCPE; - - return error; -} -#else -ivas_error create_cpe_enc_fx( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const Word16 cpe_id, /* i : CPE # identifier */ - const Word32 element_brate /* i : element bitrate */ -) -{ - Word16 n; - Word16 ivas_format, element_mode_init, max_bwidth; - Word32 input_Fs; - CPE_ENC_HANDLE hCPE; - Encoder_State *st; - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - - error = IVAS_ERR_OK; - - hEncoderConfig = st_ivas->hEncoderConfig; - - ivas_format = hEncoderConfig->ivas_format; - move16(); - element_mode_init = hEncoderConfig->element_mode_init; - move16(); - input_Fs = hEncoderConfig->input_Fs; - move16(); - max_bwidth = hEncoderConfig->max_bwidth; - move16(); - - /*-----------------------------------------------------------------* - * Allocate CPE handle - *-----------------------------------------------------------------*/ - - IF( ( hCPE = (CPE_ENC_HANDLE) malloc( sizeof( CPE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CPE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialization - general parameters - *-----------------------------------------------------------------*/ - - hCPE->cpe_id = cpe_id; - move16(); - hCPE->element_brate = element_brate; - move16(); - hCPE->last_element_brate = hCPE->element_brate; - move16(); - hCPE->element_mode = element_mode_init; - move16(); - hCPE->last_element_mode = element_mode_init; - move16(); - - hCPE->hStereoDft = NULL; - hCPE->hStereoTD = NULL; - hCPE->hStereoMdct = NULL; - hCPE->hStereoTCA = NULL; - hCPE->hStereoICBWE = NULL; - hCPE->hMetaData = NULL; - - hCPE->hStereoCng = NULL; - hCPE->hFrontVad[0] = NULL; - hCPE->hFrontVad[1] = NULL; - - hCPE->brate_surplus = 0; - move16(); - /*-----------------------------------------------------------------* - * Input memory buffer: allocate and initialize - *-----------------------------------------------------------------*/ - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - test(); - test(); - test(); - test(); - IF( EQ_16( ivas_format, STEREO_FORMAT ) || EQ_16( ivas_format, MASA_FORMAT ) || ( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_MCMASA ) ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) ) - { - IF( ( hCPE->input_mem_fx[n] = (Word16 *) malloc( sizeof( Word16 ) * NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT stereo memory\n" ) ); - } - - set16_zero_fx( hCPE->input_mem_fx[n], NS2SA( input_Fs, STEREO_DFT_OVL_NS ) ); - } - ELSE - { - hCPE->input_mem_fx[n] = NULL; - } - } -#ifdef MSAN_FIX - set16_fx( hCPE->q_input_mem, Q15, CPE_CHANNELS ); -#endif - - /*-----------------------------------------------------------------* - * stereo classifier: allocate and initialize - *-----------------------------------------------------------------*/ - - IF( ( hCPE->hStereoClassif = (STEREO_CLASSIF_HANDLE) malloc( sizeof( STEREO_CLASSIF_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for stereo classifier structure\n" ) ); - } - - stereo_classifier_init_fx( hCPE->hStereoClassif ); - - /*-----------------------------------------------------------------* - * Metadata: allocate and initialize - *-----------------------------------------------------------------*/ - - IF( EQ_16( cpe_id, sub( st_ivas->nCPE, 1 ) ) ) - { - IF( NE_32( ( error = ivas_initialize_MD_bstr_enc( &( hCPE->hMetaData ), st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * CoreCoder, 2 instances: allocate and initialize - *-----------------------------------------------------------------*/ - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - IF( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - - copy_encoder_config_fx( st_ivas, st, 1 ); - - IF( GT_16( st_ivas->nCPE, 1 ) ) - { - st->total_brate = hCPE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - move32(); - } - ELSE - { - st->total_brate = L_shr( hCPE->element_brate, 1 ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - move32(); + st->total_brate = L_shr( hCPE->element_brate, 1 ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ + move32(); } st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; move16(); @@ -2638,7 +1410,6 @@ ivas_error create_cpe_enc_fx( return error; } -#endif /*------------------------------------------------------------------------- * destroy_cpe_enc() * @@ -2658,95 +1429,78 @@ void destroy_cpe_enc( hCPE->hStereoClassif = NULL; } - FOR( n = 0; n < CPE_CHANNELS; n++ ){ -#ifdef IVAS_FLOAT_FIXED - IF( hCPE->input_mem_fx[n] != NULL ){ + FOR( n = 0; n < CPE_CHANNELS; n++ ) + { + IF( hCPE->input_mem_fx[n] != NULL ) + { free( hCPE->input_mem_fx[n] ); - hCPE->input_mem_fx[n] = NULL; -} -#endif -} - -ivas_destroy_MD_bstr_enc( &( hCPE->hMetaData ) ); + hCPE->input_mem_fx[n] = NULL; + } + } -FOR( n = 0; n < CPE_CHANNELS; n++ ) -{ - st = hCPE->hCoreCoder[n]; + ivas_destroy_MD_bstr_enc( &( hCPE->hMetaData ) ); - IF( st != NULL ) + FOR( n = 0; n < CPE_CHANNELS; n++ ) { - destroy_core_enc_fx( st ); - st = NULL; + st = hCPE->hCoreCoder[n]; + + IF( st != NULL ) + { + destroy_core_enc_fx( st ); + st = NULL; + } } -} -#ifndef IVAS_FLOAT_FIXED -if ( hCPE->hStereoDft != NULL ) -{ - stereo_dft_enc_destroy( &hCPE->hStereoDft ); - hCPE->hStereoDft = NULL; -} -#else IF( hCPE->hStereoDft != NULL ) { stereo_dft_enc_destroy_fx( &hCPE->hStereoDft ); hCPE->hStereoDft = NULL; } -#endif -IF( hCPE->hStereoTD != NULL ) -{ - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; -} + IF( hCPE->hStereoTD != NULL ) + { + free( hCPE->hStereoTD ); + hCPE->hStereoTD = NULL; + } -#ifndef IVAS_FLOAT_FIXED -if ( hCPE->hStereoMdct != NULL ) -{ - stereo_mdct_enc_destroy( &hCPE->hStereoMdct ); - hCPE->hStereoMdct = NULL; -} -#else IF( hCPE->hStereoMdct != NULL ) { stereo_mdct_enc_destroy_fx( &hCPE->hStereoMdct ); hCPE->hStereoMdct = NULL; } -#endif -IF( hCPE->hStereoTCA != NULL ) -{ - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; -} + IF( hCPE->hStereoTCA != NULL ) + { + free( hCPE->hStereoTCA ); + hCPE->hStereoTCA = NULL; + } -IF( hCPE->hStereoICBWE != NULL ) -{ - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; -} + IF( hCPE->hStereoICBWE != NULL ) + { + free( hCPE->hStereoICBWE ); + hCPE->hStereoICBWE = NULL; + } -IF( hCPE->hStereoCng != NULL ) -{ - free( hCPE->hStereoCng ); - hCPE->hStereoCng = NULL; -} + IF( hCPE->hStereoCng != NULL ) + { + free( hCPE->hStereoCng ); + hCPE->hStereoCng = NULL; + } -IF( hCPE->hFrontVad[0] != NULL ) -{ - FOR( n = 0; n < CPE_CHANNELS; n++ ) + IF( hCPE->hFrontVad[0] != NULL ) { - front_vad_destroy_fx( &hCPE->hFrontVad[n] ); - hCPE->hFrontVad[n] = NULL; + FOR( n = 0; n < CPE_CHANNELS; n++ ) + { + front_vad_destroy_fx( &hCPE->hFrontVad[n] ); + hCPE->hFrontVad[n] = NULL; + } } -} -free( hCPE ); + free( hCPE ); -return; + return; } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * stereo_mode_combined_format_enc() @@ -2814,60 +1568,3 @@ static void stereo_mode_combined_format_enc_fx( return; } -#else -/*------------------------------------------------------------------------- - * stereo_mode_combined_format_enc() - * - * Set stereo format in a combined format - *-------------------------------------------------------------------------*/ - -static void stereo_mode_combined_format_enc( - const Encoder_Struct *st_ivas, /* i : encoder main structure */ - CPE_ENC_HANDLE hCPE /* i/o: CPE handle */ -) -{ - ENCODER_CONFIG_HANDLE hEncoderConfig; - int32_t element_brate_ref; - - hEncoderConfig = st_ivas->hEncoderConfig; - - if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - element_brate_ref = hCPE->element_brate; - - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && - ( ( hEncoderConfig->nchan_ism == 3 && hEncoderConfig->ivas_total_brate == IVAS_96k ) || - ( hEncoderConfig->nchan_ism == 4 && hEncoderConfig->ivas_total_brate == IVAS_128k ) ) ) - { - if ( hCPE->element_brate + hCPE->brate_surplus > IVAS_64k ) - { - st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt = 0; - } - else - { - st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt++; - st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt = min( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt, OMASA_STEREO_SW_CNT_MAX ); - } - - if ( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) - { - hCPE->element_mode = IVAS_CPE_MDCT; - hCPE->element_brate = IVAS_64k; - hCPE->brate_surplus -= ( hCPE->element_brate - element_brate_ref ); - } - - /* write OMASA stereo mode signalling */ - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - push_indice( hCPE->hCoreCoder[0]->hBstr, IND_SMODE_OMASA, 1, NBITS_ELEMENT_MODE ); - } - else - { - push_indice( hCPE->hCoreCoder[0]->hBstr, IND_SMODE_OMASA, 0, NBITS_ELEMENT_MODE ); - } - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_decision_matrix_enc.c b/lib_enc/ivas_decision_matrix_enc.c index 1da1b2272..84939b602 100644 --- a/lib_enc/ivas_decision_matrix_enc.c +++ b/lib_enc/ivas_decision_matrix_enc.c @@ -72,310 +72,6 @@ * Note: in MDCT stereo mode, TCX core is selected for all content * -------------------------------------------------------------------------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_decision_matrix_enc( - Encoder_State *st, /* i : encoder state structure */ - const int32_t element_brate, /* i : element bitrate */ - const float fft_buff[], /* i : FFT buffer */ - const float enerBuffer[], /* i : energy buffer */ - const int16_t last_element_mode /* i : last element mode */ -) -{ - int32_t icbwe_brate; - /* init */ - icbwe_brate = 0; - - /* initialization */ - st->core = -1; - st->extl = -1; - st->extl_brate = 0; - if ( st->element_mode != IVAS_CPE_MDCT ) - { - st->igf = 0; - } - - /* SID and FRAME_NO_DATA frames */ - if ( st->Opt_DTX_ON && ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) - { - st->core = ACELP_CORE; - - if ( st->input_Fs >= 32000 && st->bwidth >= SWB ) - { - st->extl = SWB_CNG; - } - - st->rf_mode = 0; - - return; - } - - /*---------------------------------------------------------------------* - * Select the core - *---------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - /* ISM low-rate mode */ - st->core = ACELP_CORE; - st->coder_type = INACTIVE; - } - else if ( st->total_brate > MAX_ACELP_BRATE ) - { - /* highest bitrates */ - st->core = TCX_20_CORE; - } - else if ( st->element_mode == IVAS_CPE_MDCT ) - { - /* in MDCT stereo set TCX core */ - st->core = TCX_20_CORE; - } - else if ( st->coder_type == INACTIVE ) - { - /* inactive frames */ - if ( st->cng_type == FD_CNG && st->total_brate >= STEREO_TCX_MIN_RATE ) - { - st->core = TCX_20_CORE; - } - else - { - st->core = ACELP_CORE; - } - } - else if ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 0 ) - { - /* speech */ - st->core = ACELP_CORE; - } - else if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) - { - /* music w. GSC core */ - st->core = ACELP_CORE; - } - else /* sp_aud_decision1 == 1 && *sp_aud_decision2 == 1 */ - { - /* music w. TCX or HQ core */ - st->core = TCX_20_CORE; - - if ( st->element_mode == IVAS_CPE_TD || st->sp_aud_decision0 == 0 ) - { - st->core = TCX_20_CORE; - } - else - { - /* select TCX core or HQ core using bits_frame_nominal to match the TCX configuration bitrate */ - st->core = mdct_classifier( st, fft_buff, enerBuffer, st->bits_frame_nominal * FRAMES_PER_SEC ); - } - } - - /* do not allow TD stereo ACELP core -> DFT stereo TCX core switching as it is on the WC complexity path */ - if ( ( ( st->last_core == ACELP_CORE && last_element_mode == IVAS_CPE_TD && st->element_mode == IVAS_CPE_DFT ) || ( st->tdm_LRTD_flag == 1 && st->total_brate <= IVAS_16k4 ) ) && st->core == TCX_20_CORE && st->total_brate <= MAX_ACELP_BRATE ) /* Override TCX in case of LRTD && primary channel has low bitrate*/ - { - st->core = ACELP_CORE; - } - - if ( st->is_ism_format && st->tcxonly ) - { - st->core = TCX_20_CORE; - } - -#ifdef DEBUGGING - if ( st->idchan == 0 ) - { - if ( st->force == FORCE_SPEECH && st->element_mode != IVAS_CPE_MDCT && st->total_brate <= MAX_ACELP_BRATE ) - { - st->core = ACELP_CORE; - } - else if ( st->force == FORCE_MUSIC && st->core == ACELP_CORE ) - { - st->core = TCX_20_CORE; - } - else if ( st->force == FORCE_ACELP && st->element_mode != IVAS_CPE_MDCT && st->total_brate <= MAX_ACELP_BRATE ) - { - st->core = ACELP_CORE; - if ( st->coder_type == AUDIO ) - { - st->coder_type = GENERIC; - } - } - else if ( st->force == FORCE_GSC && element_brate < IVAS_24k4 ) - { - st->core = ACELP_CORE; - } - else if ( st->force == FORCE_TCX ) - { - st->core = TCX_20_CORE; - } - else if ( st->force == FORCE_HQ && st->element_mode != IVAS_CPE_MDCT && element_brate >= IVAS_24k4 ) - { - st->core = HQ_CORE; - } - } -#endif - - /* TCX not available at low bitrates -> replace it by GSC */ - if ( st->core == TCX_20_CORE && st->total_brate < STEREO_TCX_MIN_RATE ) - { - st->core = ACELP_CORE; - st->coder_type = AUDIO; - st->sp_aud_decision2 = 0; - - if ( st->low_rate_mode ) - { - st->coder_type = INACTIVE; - } - } - - /* sanity check to avoid too low ACELP bitrate in case of "limitation to avoid too high bitrate in one active TCX channel" at element_brate = 32000 */ - if ( st->is_ism_format && st->flag_ACELP16k && !st->low_rate_mode && st->core == ACELP_CORE && st->total_brate < ACELP_16k_LOW_LIMIT + FB_TBE_1k8 ) - { - st->core = TCX_20_CORE; - } - - /*---------------------------------------------------------------------* - * Select ACELP and GSC extension layer - *---------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - /* WB */ - if ( st->bwidth == WB ) - { - if ( st->total_brate < MIN_BRATE_WB_BWE || ( st->idchan == 1 && st->element_mode == IVAS_CPE_TD ) ) - { - st->extl = WB_BWE; - } - else if ( st->total_brate >= MIN_BRATE_WB_BWE && !st->flag_ACELP16k ) - { - if ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->coder_type == INACTIVE ) - { - st->extl = WB_BWE; - st->extl_brate = WB_BWE_0k35; - } - else - { - st->extl = WB_TBE; - - if ( st->total_brate < MIN_BRATE_WB_TBE_1k05 || ( st->element_mode == IVAS_CPE_TD && st->total_brate < MIN_TDM_BRATE_WB_TBE_1k05 ) ) - { - st->extl_brate = WB_TBE_0k35; - } - else - { - st->extl_brate = WB_TBE_1k05; - } - } - } - } - - /* SWB and FB */ - else if ( st->bwidth == SWB || st->bwidth == FB ) - { - if ( st->total_brate >= MIN_BRATE_SWB_BWE /*&& (*coder_type != AUDIO || st->total_brate >= (MIN_BWE_PRI_BRATE+600))*/ - || ( st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB && st->tdm_LRTD_flag ) || ( element_brate < IVAS_16k4 && st->total_brate >= MIN_MIN_BRATE_LRTD_SWB_BWE && st->element_mode == IVAS_CPE_TD && st->bwidth == SWB ) ) - { - if ( ( ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->coder_type == INACTIVE ) && !st->GSC_noisy_speech ) /* Note: SWB BWE is not used for GSC noisy speech */ ) - { - st->extl = SWB_BWE; - st->extl_brate = SWB_BWE_1k6; - - if ( st->bwidth == FB ) - { - st->extl = FB_BWE; - st->extl_brate = FB_BWE_1k8; - } - } - else - { - st->extl = SWB_TBE; - st->extl_brate = SWB_TBE_1k6; - - if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) - { - st->extl_brate = SWB_TBE_2k8; - } - else if ( st->tdm_LRTD_flag == 1 && st->element_mode == IVAS_CPE_TD ) - { - if ( st->element_brate < IVAS_24k4 ) - { - st->extl_brate = SWB_TBE_1k10; - } - else - { - st->extl_brate = SWB_TBE_1k75; - } - } - else if ( st->total_brate < MIN_BRATE_SWB_TBE_1k60 ) - { - st->extl_brate = SWB_TBE_0k95; - } - - if ( st->bwidth == FB ) - { - st->extl = FB_TBE; - st->extl_brate = FB_TBE_1k8; - - if ( st->total_brate >= MIN_BRATE_SWB_TBE_2k80 && st->flag_ACELP16k && st->element_mode == IVAS_SCE ) - { - st->extl_brate = FB_TBE_3k0; - } - } - } - } - else - { - st->extl = WB_BWE; - st->extl_brate = 0; - } - - /* set IC-BWE bitrate */ - if ( st->element_mode == IVAS_CPE_TD && ( st->idchan == 0 ) && !st->tdm_LRTD_flag ) - { - icbwe_brate = STEREO_BITS_ICBWE * FRAMES_PER_SEC; - if ( st->flag_ACELP16k == 0 ) - { - icbwe_brate = ( STEREO_BITS_ICBWE - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; - } - } - else if ( st->element_mode == IVAS_CPE_DFT ) - { - icbwe_brate = STEREO_BITS_ICBWE_DFT * FRAMES_PER_SEC; - if ( st->flag_ACELP16k == 0 ) - { - icbwe_brate = ( STEREO_BITS_ICBWE_DFT - STEREO_ICBWE_SPBITS ) * FRAMES_PER_SEC; - } - } - - if ( st->element_mode >= IVAS_CPE_DFT && st->core == ACELP_CORE && ( st->extl == SWB_TBE || st->extl == FB_TBE ) && !( st->element_mode == IVAS_CPE_TD && st->tdm_LRTD_flag ) ) - { - icbwe_brate += STEREO_ICBWE_MSFLAG_BITS * FRAMES_PER_SEC; - } - } - } - - /* set core bitrate */ - st->core_brate = st->total_brate - st->extl_brate - icbwe_brate; - - if ( st->ini_frame == 0 ) - { - /* avoid core switching in the very first frame */ - st->last_core = st->core; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - } - - /*-----------------------------------------------------------------* - * set inactive coder_type flag in ACELP core - *-----------------------------------------------------------------*/ - - st->inactive_coder_type_flag = 0; /* AVQ by default */ - if ( st->total_brate <= MAX_GSC_INACTIVE_BRATE ) - { - st->inactive_coder_type_flag = 1; /* GSC */ - } - - return; -} -#else void ivas_decision_matrix_enc_fx( Encoder_State *st, /* i : encoder state structure */ const Word32 element_brate, /* i : element bitrate */ @@ -816,7 +512,6 @@ void ivas_decision_matrix_enc_fx( return; } -#endif /*---------------------------------------------------------------------* * ivas_signaling_enc() @@ -824,7 +519,6 @@ void ivas_decision_matrix_enc_fx( * write signaling information of SCE/CPE mode into the bitstream *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_signaling_enc_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ @@ -975,144 +669,3 @@ void ivas_signaling_enc_fx( return; } -#else -void ivas_signaling_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ - const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag in TD stereo */ -) -{ - int16_t ind; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( st->element_mode == IVAS_CPE_TD && st->idchan == 1 ) - { - /* minimal signaling for the secondary channel, most of the parameters are deduced from the primary channel */ - signaling_enc_secondary( st, tdm_SM_or_LRTD_Pri, tdm_Pitch_reuse_flag ); - } - else if ( st->element_mode == IVAS_SCE && st->low_rate_mode ) - { - /* ISM Low-rate mode -> do nothing -> always WB, ACELP core, IC coder_type */ - } - else if ( ( st->element_mode == IVAS_CPE_MDCT && st->idchan == 1 ) || st->core_brate <= SID_2k40 ) - { - /* do nothing */ - } - else - { - if ( st->idchan == 0 ) - { - /*-------------------------------------------------------------------------- - * Write element mode info - *--------------------------------------------------------------------------*/ - - if ( ( st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && !MCT_flag ) /* note: in MCT, the MDCT stereo is used exclusively */ - { - ind = st->element_mode - IVAS_CPE_DFT; - push_indice( hBstr, IND_SMODE, ind, NBITS_ELEMENT_MODE ); - } - - /*-------------------------------------------------------------------------- - * Write band-width info - *--------------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_SCE && element_brate < MIN_BRATE_SWB_SCE ) - { - /* only WB is supported */ - } - else if ( ( element_brate < MIN_BRATE_FB_STEREO && !st->is_ism_format ) || - ( element_brate < MIN_BRATE_FB_ISM && st->is_ism_format ) ) - { - /* WB and SWB are supported */ - ind = st->bwidth - WB; - push_indice( hBstr, IND_BWIDTH, ind, 1 ); - } - else - { - /* WB, SWB and FB are supported */ - push_indice( hBstr, IND_BWIDTH, st->bwidth, NBITS_BWIDTH ); - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - /*-------------------------------------------------------------------------- - * Write ACELP/MDCT core selection bit - *--------------------------------------------------------------------------*/ - - if ( st->element_mode == IVAS_CPE_TD || st->total_brate >= STEREO_TCX_MIN_RATE ) - { - if ( st->core == ACELP_CORE ) - { - push_indice( hBstr, IND_CORE, 0, 1 ); - } - else - { - push_indice( hBstr, IND_CORE, 1, 1 ); - } - } - - /*-------------------------------------------------------------------------- - * Write core dependent signaling - *--------------------------------------------------------------------------*/ - - if ( st->core == ACELP_CORE ) - { - if ( element_brate < FRMT_SHP_MIN_BRATE_IVAS ) - { - push_indice( hBstr, IND_ACELP_SIGNALLING, st->coder_type, 3 ); - } - else - { - /* write coder type */ - push_indice( hBstr, IND_ACELP_SIGNALLING, st->coder_type, 3 ); - - /* write sharpening flag */ - push_indice( hBstr, IND_SHARP_FLAG, st->sharpFlag, 1 ); - } - - /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ - if ( st->extl_brate > 0 ) - { - if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) - { - push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); - } - else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) - { - push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); - } - } - } - else /* MDCT core */ - { - /* write TCX/HQ selection flag */ - if ( st->core == HQ_CORE ) - { - push_indice( hBstr, IND_MDCT_CORE, 0, 1 ); - } - else /* TCX20/TCX10 core */ - { - push_indice( hBstr, IND_MDCT_CORE, 1, 1 ); - } - - if ( st->core == HQ_CORE ) - { - if ( st->last_core == ACELP_CORE ) - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 1, 1 ); - } - else - { - push_indice( hBstr, IND_HQ_SWITCHING_FLG, 0, 1 ); - } - } - } - } /* element_mode != IVAS_CPE_MDCT */ - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index 9ca148879..51a446d38 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -47,7 +47,6 @@ /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void computeIntensityVector_enc_fx( const DIRAC_ENC_HANDLE hDirAC, Word32 Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], @@ -55,9 +54,6 @@ static void computeIntensityVector_enc_fx( const Word16 enc_param_start_band, /* i : first band to process */ const Word16 num_frequency_bands, Word32 intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS] ); -#else -static void computeIntensityVector_enc( DIRAC_ENC_HANDLE hDirAC, float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], const int16_t enc_param_start_band, const int16_t num_frequency_bands, float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS] ); -#endif /*------------------------------------------------------------------------- * ivas_dirac_enc_open() @@ -65,7 +61,6 @@ static void computeIntensityVector_enc( DIRAC_ENC_HANDLE hDirAC, float Cldfb_Rea * Initialize DirAC handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -198,117 +193,6 @@ ivas_error ivas_dirac_enc_open_fx( return error; } -#else -ivas_error ivas_dirac_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i, j; - DIRAC_ENC_HANDLE hDirAC; - int32_t dirac_slot_ns; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( hDirAC = (DIRAC_ENC_HANDLE) malloc( sizeof( DIRAC_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hDirAC->hConfig = (DIRAC_CONFIG_DATA_HANDLE) malloc( sizeof( DIRAC_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC Config\n" ) ); - } - hDirAC->firstrun_sector_params = 1; - set_zero( hDirAC->sec_I_vec_smth_x[0], NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - set_zero( hDirAC->sec_I_vec_smth_y[0], NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - set_zero( hDirAC->sec_I_vec_smth_z[0], NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - set_zero( hDirAC->azi_prev, NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - set_zero( hDirAC->ele_prev, NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - set_zero( hDirAC->energy_smth[0], NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS ); - /*-----------------------------------------------------------------* - * DirAC main configuration - *-----------------------------------------------------------------*/ - - st_ivas->hDirAC = hDirAC; - - if ( ( error = ivas_dirac_config( (void *) st_ivas, ENC ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* set FB config. */ - hDirAC->hFbMixer = NULL; - - for ( i = 0; i < DIRAC_MAX_NBANDS + 1; i++ ) - { - /* adapt band grouping to from CLDFB to MDFT bands */ - hDirAC->band_grouping[i] *= CLDFB_TO_MDFT_FAC; - } - dirac_slot_ns = DIRAC_SLOT_ENC_NS; - - /* initialize delay for SPAR/DirAC delay synchronization */ - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hDirAC->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hDirAC->direction_vector_m[i][j] = (float *) malloc( DIRAC_MAX_NBANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hDirAC->direction_vector_m[i][j], 0.0f, DIRAC_MAX_NBANDS ); - } - } - - hDirAC->no_col_avg_diff = (int16_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hDirAC->buffer_intensity_real[i] = (float **) malloc( hDirAC->no_col_avg_diff * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - for ( j = 0; j < hDirAC->no_col_avg_diff; j++ ) - { - if ( ( hDirAC->buffer_intensity_real[i][j] = (float *) malloc( DIRAC_MAX_NBANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hDirAC->buffer_intensity_real[i][j], 0.0f, DIRAC_MAX_NBANDS ); - } - } - - if ( ( hDirAC->buffer_energy = (float *) malloc( DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hDirAC->buffer_energy, 0.0f, DIRAC_MAX_NBANDS * hDirAC->no_col_avg_diff ); - - if ( st_ivas->hQMetaData->useLowerRes ) - { - hDirAC->block_grouping[0] = 0; - hDirAC->block_grouping[1] = MAX_PARAM_SPATIAL_SUBFRAMES; - } - else - { - mvs2s( DirAC_block_grouping_5ms_MDFT, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - } - - hDirAC->index_buffer_intensity = 0; - hDirAC->mono_frame_count = 0; - - st_ivas->hDirAC = hDirAC; - st_ivas->hSpar->enc_param_start_band = st_ivas->hDirAC->hConfig->enc_param_start_band; - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -317,7 +201,6 @@ ivas_error ivas_dirac_enc_open( * Reconfigure DirAC handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_enc_reconfigure( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -353,40 +236,6 @@ ivas_error ivas_dirac_enc_reconfigure( return error; } -#else -ivas_error ivas_dirac_enc_reconfigure( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - DIRAC_ENC_HANDLE hDirAC; - ivas_error error; - - error = IVAS_ERR_OK; - - hDirAC = st_ivas->hDirAC; - - /*-----------------------------------------------------------------* - * DirAC main configuration - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_dirac_config( (void *) st_ivas, ENC ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hQMetaData->useLowerRes ) - { - hDirAC->block_grouping[0] = 0; - hDirAC->block_grouping[1] = MAX_PARAM_SPATIAL_SUBFRAMES; - } - else - { - mvs2s( DirAC_block_grouping_5ms_MDFT, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - } - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -394,7 +243,6 @@ ivas_error ivas_dirac_enc_reconfigure( * * Close DirAC encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_enc_close_fx( DIRAC_ENC_HANDLE *hDirAC_out, /* i/o: encoder DirAC handle */ const Word32 input_Fs /* i : input sampling rate */ @@ -454,96 +302,6 @@ void ivas_dirac_enc_close_fx( return; } -#else -void ivas_dirac_enc_close( - DIRAC_ENC_HANDLE *hDirAC_out, /* i/o: encoder DirAC handle */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - int16_t i, j; - DIRAC_ENC_HANDLE hDirAC; - - if ( hDirAC_out == NULL || *hDirAC_out == NULL ) - { - return; - } - - hDirAC = *hDirAC_out; - - if ( hDirAC->hFbMixer != NULL ) - { - ivas_FB_mixer_close( &hDirAC->hFbMixer, input_Fs, 0 ); - } - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { -#ifndef IVAS_FLOAT_FIXED - free( hDirAC->direction_vector_m[i][j] ); - hDirAC->direction_vector_m[i][j] = NULL; -#else - free( hDirAC->direction_vector_m_fx[i][j] ); - hDirAC->direction_vector_m_fx[i][j] = NULL; -#endif - } - -#ifndef IVAS_FLOAT_FIXED - for ( j = 0; j < hDirAC->no_col_avg_diff; j++ ) - { - if ( hDirAC->buffer_intensity_real[i][j] != 0 ) - { - free( hDirAC->buffer_intensity_real[i][j] ); - hDirAC->buffer_intensity_real[i][j] = NULL; - } - } - - free( hDirAC->buffer_intensity_real[i] ); - hDirAC->buffer_intensity_real[i] = NULL; - -#else - FOR( j = 0; j < hDirAC->no_col_avg_diff; j++ ) - { - IF( hDirAC->buffer_intensity_real_fx[i][j] != 0 ) - { - free( hDirAC->buffer_intensity_real_fx[i][j] ); - hDirAC->buffer_intensity_real_fx[i][j] = NULL; - } - } - - free( hDirAC->buffer_intensity_real_fx[i] ); - hDirAC->buffer_intensity_real_fx[i] = NULL; -#endif - -#ifndef IVAS_FLOAT_FIXED - free( hDirAC->direction_vector_m[i] ); - hDirAC->direction_vector_m[i] = NULL; -#else - free( hDirAC->direction_vector_m_fx[i] ); - hDirAC->direction_vector_m_fx[i] = NULL; -#endif - } - -#ifndef IVAS_FLOAT_FIXED - free( hDirAC->buffer_energy ); - hDirAC->buffer_energy = NULL; -#else - free( hDirAC->buffer_energy_fx ); - hDirAC->buffer_energy_fx = NULL; -#endif - - if ( hDirAC->hConfig != NULL ) - { - free( hDirAC->hConfig ); - hDirAC->hConfig = NULL; - } - - free( *hDirAC_out ); - *hDirAC_out = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_dirac_enc() @@ -552,7 +310,6 @@ void ivas_dirac_enc_close( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_enc_fx( DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ @@ -755,133 +512,6 @@ ivas_error ivas_dirac_enc_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_dirac_enc( - DIRAC_ENC_HANDLE hDirAC, /* i/o: encoder DirAC handle */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ - float *data_f[], /* i/o: SBA channels */ - float **ppIn_FR_real, /* o : real freq domain values */ - float **ppIn_FR_imag, /* o : imag freq domain values */ - const int16_t input_frame, /* i : input frame length */ - const int16_t dtx_vad, /* i : DTX vad flag */ - const IVAS_FORMAT ivas_format, /* i : ivas format */ - const int16_t hodirac_flag /* i : hodirac flag */ -) -{ - int16_t orig_dirac_bands; - float dir[3], avg_dir[3]; - float energySum, vecLen; - int16_t i, j, b, i_ts; - ivas_error error; - push_wmops( "ivas_dirac_enc" ); - - ivas_dirac_param_est_enc( hDirAC, hQMetaData->q_direction, hQMetaData->useLowerRes, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, ivas_format, hodirac_flag, hodirac_flag ? HOA2_CHANNELS : FOA_CHANNELS, &( hDirAC->mono_frame_count ), &( hQMetaData->dirac_mono_flag ) ); - - if ( hQMetaData->q_direction->cfg.nbands > 0 ) - { - orig_dirac_bands = hQMetaData->q_direction[0].cfg.nbands; - - if ( dtx_vad == 1 ) - { - /* WB 4TC mode bit : disable for now*/ - push_next_indice( hMetaData, 0, 1 ); - - /* Set Energy Ratio to 0.0 if the mono flag is set, before the metadata is encoded */ - if ( hQMetaData->dirac_mono_flag ) - { - for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) - { - for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio[i_ts] = 0.0f; - hQMetaData->q_direction[0].band_data[b].azimuth[i_ts] = 0.0f; - hQMetaData->q_direction[0].band_data[b].elevation[i_ts] = 0.0f; - } - } - } - - if ( ( error = ivas_qmetadata_enc_encode( hMetaData, hQMetaData, hodirac_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hQMetaData->q_direction[0].cfg.nbands = DIRAC_DTX_BANDS; - - /* compute directions */ - for ( i = 0; i < hQMetaData->q_direction[0].cfg.nblocks; i++ ) - { - set_zero( dir, 3 ); - set_zero( avg_dir, 3 ); - energySum = 0.0f; - - /* combine all DirAC bands except the last one, handle last band separately, last band covers BW above WB */ - for ( j = 0; j < orig_dirac_bands - 1; j++ ) - { - ivas_qmetadata_azimuth_elevation_to_direction_vector( hQMetaData->q_direction[0].band_data[j].azimuth[i], hQMetaData->q_direction[0].band_data[j].elevation[i], &dir[0] ); - vecLen = hQMetaData->q_direction[0].band_data[j].energy_ratio[i] * hDirAC->buffer_energy[i * orig_dirac_bands + j]; - - avg_dir[0] += dir[0] * vecLen; - avg_dir[1] += dir[1] * vecLen; - avg_dir[2] += dir[2] * vecLen; - - energySum += hDirAC->buffer_energy[i * orig_dirac_bands + j]; - } - - ivas_qmetadata_direction_vector_to_azimuth_elevation( &avg_dir[0], &hQMetaData->q_direction[0].band_data[0].azimuth[i], &hQMetaData->q_direction[0].band_data[0].elevation[i] ); - hQMetaData->q_direction[0].band_data[0].energy_ratio[i] = sqrtf( dotp( avg_dir, avg_dir, 3 ) ) / ( energySum + EPSILON ); - - hQMetaData->q_direction[0].band_data[1].azimuth[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i]; - hQMetaData->q_direction[0].band_data[1].elevation[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i]; - hQMetaData->q_direction[0].band_data[1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i]; - } - - /* 1 bit to indicate mode MD coding : temp solution*/ - push_next_indice( hMetaData, 1, 1 ); - - /* encode SID parameters */ - ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT ); - } - - for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) - { - for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) - { - hQMetaData->q_direction->band_data[b].azimuth[i_ts] = hQMetaData->q_direction->band_data[b].q_azimuth[i_ts]; - hQMetaData->q_direction->band_data[b].elevation[i_ts] = hQMetaData->q_direction->band_data[b].q_elevation[i_ts]; - hQMetaData->q_direction[0].band_data[b].energy_ratio[0] = 1.0f - diffuseness_reconstructions[hQMetaData->q_direction[0].band_data[b].energy_ratio_index[0]]; - } - } - - if ( dtx_vad == 0 ) - { - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].azimuth[i] = hQMetaData->q_direction[0].band_data[1].azimuth[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].elevation[i] = hQMetaData->q_direction[0].band_data[1].elevation[0]; - hQMetaData->q_direction[0].band_data[orig_dirac_bands - 1].energy_ratio[i] = hQMetaData->q_direction[0].band_data[1].energy_ratio[0]; - } - - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - for ( j = orig_dirac_bands - 2; j >= 0; j-- ) - { - hQMetaData->q_direction[0].band_data[j].azimuth[i] = hQMetaData->q_direction[0].band_data[0].azimuth[0]; - hQMetaData->q_direction[0].band_data[j].elevation[i] = hQMetaData->q_direction[0].band_data[0].elevation[0]; - hQMetaData->q_direction[0].band_data[j].energy_ratio[i] = hQMetaData->q_direction[0].band_data[0].energy_ratio[0]; - } - } - - hQMetaData->q_direction->cfg.nbands = orig_dirac_bands; - } - } - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -890,7 +520,6 @@ ivas_error ivas_dirac_enc( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_dirac_get_mono_flag_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ @@ -1015,244 +644,68 @@ static Word16 ivas_dirac_get_mono_flag_fx( threshold_e = 31; move32(); move16(); - } - - IF( BASOP_Util_Cmp_Mant32Exp( divide3232( W_band_power, other_ch_band_power ), 31, threshold, threshold_e ) == 0 ) - { - any_mono_band = 1; - move16(); - } - ELSE - { - any_mc_band = 1; - move16(); - } - } - } - } - - /* If any band contains multi-channel content it's not mono */ - IF( any_mc_band ) - { - local_mono_flag = 0; - move16(); - } - ELSE - { - /* If any band contains mono content the frame is mono. */ - if ( any_mono_band ) - { - local_mono_flag = 1; - move16(); - } - } - - /* Hysteresis - only after DIRAC_MONO_FRAME_THRESH frames on mono will the actual mono flag be set */ - IF( local_mono_flag ) - { - IF( LT_16( *mono_frame_count, DIRAC_MONO_FRAME_THRESH ) ) - { - *mono_frame_count = add( *mono_frame_count, 1 ); - move16(); - } - } - ELSE - { - /* Instantaneously disable actual mono flag if multi-channel content is observed */ - if ( any_mc_band ) - { - *mono_frame_count = 0; - move16(); - } - } - - /* Final check if there has been mono for DIRAC_MONO_FRAME_THRESH number of frames than the content is declared mono */ - IF( EQ_16( *mono_frame_count, DIRAC_MONO_FRAME_THRESH ) ) - { - return 1; - } - ELSE - { - return 0; - } -} -#else -static int16_t ivas_dirac_get_mono_flag( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ - const int16_t nchan_ana, /* i : number of analysis channels */ - int16_t *mono_frame_count ) /* i/o: current number of mono frames count */ -{ - int16_t brange[2]; - int16_t i, j, ch_idx; - float other_ch_band_power; - float W_band_power; - int16_t any_mc_band = 0; - int16_t any_mono_band = 0; - int16_t local_mono_flag = 0; - float W_band_power_norm; - float threshold = 0; - - /* Banded Power Calculations */ - for ( i = 0; i < DIRAC_MAX_NBANDS; i++ ) - { - W_band_power = 0; - other_ch_band_power = 0; - - brange[0] = band_grouping[i]; - brange[1] = band_grouping[i + 1]; - - /* Loop over the W channel bins to calculate the power in the band */ - for ( j = brange[0]; j < brange[1]; j++ ) - { - W_band_power += ( Cldfb_RealBuffer[0][j] * Cldfb_RealBuffer[0][j] ) + ( Cldfb_ImagBuffer[0][j] * Cldfb_ImagBuffer[0][j] ); - } + } - /* Loop over the other channels and bins to calculate the power in the band */ - for ( ch_idx = 1; ch_idx < nchan_ana; ch_idx++ ) - { - /* abs()^2 */ - for ( j = brange[0]; j < brange[1]; j++ ) - { - other_ch_band_power += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); - } - } - if ( other_ch_band_power < EPSILON ) - { - if ( W_band_power > DIRAC_MONO_THRESH_SILENCE ) - { - any_mono_band = 1; - } - } - else - { - if ( ( W_band_power > DIRAC_MONO_THRESH_SILENCE ) || ( other_ch_band_power > DIRAC_MONO_THRESH_SILENCE ) ) - { - W_band_power_norm = min( W_band_power, DIRAC_MONO_NORM_FACTOR ) * DIRAC_MONO_ONE_ON_NORM_FACTOR; - threshold = max( W_band_power_norm * DIRAC_MONO_MAX_THRESH, DIRAC_MONO_MIN_THRESH ); - if ( W_band_power / other_ch_band_power > threshold ) + IF( BASOP_Util_Cmp_Mant32Exp( divide3232( W_band_power, other_ch_band_power ), 31, threshold, threshold_e ) == 0 ) { any_mono_band = 1; + move16(); } - else + ELSE { any_mc_band = 1; + move16(); } } } } /* If any band contains multi-channel content it's not mono */ - if ( any_mc_band ) + IF( any_mc_band ) { local_mono_flag = 0; + move16(); } - else + ELSE { /* If any band contains mono content the frame is mono. */ if ( any_mono_band ) { local_mono_flag = 1; + move16(); } } /* Hysteresis - only after DIRAC_MONO_FRAME_THRESH frames on mono will the actual mono flag be set */ - if ( local_mono_flag ) + IF( local_mono_flag ) { - if ( *mono_frame_count < DIRAC_MONO_FRAME_THRESH ) + IF( LT_16( *mono_frame_count, DIRAC_MONO_FRAME_THRESH ) ) { - ( *mono_frame_count )++; + *mono_frame_count = add( *mono_frame_count, 1 ); + move16(); } } - else + ELSE { /* Instantaneously disable actual mono flag if multi-channel content is observed */ if ( any_mc_band ) { *mono_frame_count = 0; + move16(); } } /* Final check if there has been mono for DIRAC_MONO_FRAME_THRESH number of frames than the content is declared mono */ - if ( *mono_frame_count == DIRAC_MONO_FRAME_THRESH ) + IF( EQ_16( *mono_frame_count, DIRAC_MONO_FRAME_THRESH ) ) { return 1; } - else + ELSE { return 0; } } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * computeReferencePower_enc() - * - * - *-------------------------------------------------------------------------*/ - -void computeReferencePower_enc( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ - float *reference_power, /* o : Estimated power */ - const int16_t enc_param_start_band, /* i : first band to process */ - const int16_t num_freq_bands, /* i : Number of frequency bands */ - const IVAS_FORMAT ivas_format, /* i : ivas_format */ - int16_t ref_power_w, /* i : use 0 if hodirac is enabled */ - const int16_t nchan_ana, /* i : number of analysis channels */ - int16_t *mono_frame_count, /* i/o: Mono Frame Count */ - int16_t *dirac_mono_flag /* i/o: Mono Flag */ -) -{ - int16_t brange[2]; - int16_t ch_idx, i, j; - float reference_power_W[DIRAC_MAX_NBANDS]; - - if ( dirac_mono_flag != NULL ) - { - *dirac_mono_flag = ivas_dirac_get_mono_flag( band_grouping, Cldfb_RealBuffer, Cldfb_ImagBuffer, nchan_ana, mono_frame_count ); - } - - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = band_grouping[i + enc_param_start_band]; - brange[1] = band_grouping[i + enc_param_start_band + 1]; - - reference_power[i] = 0; - - reference_power_W[i] = 0; - for ( j = brange[0]; j < brange[1]; j++ ) - { - reference_power_W[i] += ( Cldfb_RealBuffer[0][j] * Cldfb_RealBuffer[0][j] ) + ( Cldfb_ImagBuffer[0][j] * Cldfb_ImagBuffer[0][j] ); - } - reference_power[i] += reference_power_W[i]; - - for ( ch_idx = 1; ch_idx < nchan_ana; ch_idx++ ) - { - /* abs()^2 */ - for ( j = brange[0]; j < brange[1]; j++ ) - { - reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); - } - } - } - - v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); - - if ( ivas_format == SBA_FORMAT && ref_power_w == 1 ) - { - for ( i = 0; i < num_freq_bands; i++ ) - { - reference_power[i] = max( reference_power[i], reference_power_W[i] ); - } - } - return; -} -#else /*------------------------------------------------------------------------- * computeReferencePower_enc_fx_dirac() * @@ -1452,14 +905,12 @@ void computeReferencePower_enc_fx( move16(); return; } -#endif /*------------------------------------------------------------------------- * ivas_dirac_param_est_enc() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_param_est_enc_fx( DIRAC_ENC_HANDLE hDirAC, IVAS_QDIRECTION *q_direction, @@ -1917,284 +1368,6 @@ void ivas_dirac_param_est_enc_fx( pop_wmops(); return; } -#else -void ivas_dirac_param_est_enc( - DIRAC_ENC_HANDLE hDirAC, - IVAS_QDIRECTION *q_direction, - const uint8_t useLowerRes, - float *data_f[], - float **pp_fr_real, - float **pp_fr_imag, - const int16_t input_frame, - const IVAS_FORMAT ivas_format, - const int16_t hodirac_flag, - const int16_t nchan_fb_in, - int16_t *mono_frame_count, - int16_t *dirac_mono_flag ) -{ - int16_t i, d, ts, index, l_ts, num_freq_bands; - int16_t band_m_idx, block_m_idx; - float dir_v[DIRAC_NUM_DIMS]; - float *pcm_in[DIRAC_MAX_ANA_CHANS]; - float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; - float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; - float *p_Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS]; - float *p_Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS]; - float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS]; - float direction_vector[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS]; - float diffuseness_vector[DIRAC_MAX_NBANDS]; - float renormalization_factor[DIRAC_MAX_NBANDS]; - float renormalization_factor_diff[DIRAC_MAX_NBANDS]; - float norm_tmp; - int16_t mrange[2]; - int16_t num_blocks; - float reference_power[CLDFB_NO_COL_MAX][DIRAC_NO_FB_BANDS_MAX]; - float azi_secs[2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS]; - float ele_secs[2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS]; - float diff_secs[2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS]; - float ene_secs[2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS]; - - push_wmops( "dirac_enc_param_est" ); - num_freq_bands = hDirAC->hConfig->nbands; - - /* Initialization */ - l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; - if ( useLowerRes ) - { - q_direction->cfg.nblocks = 1; - num_blocks = 1; - } - else - { - q_direction->cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; - num_blocks = MAX_PARAM_SPATIAL_SUBFRAMES; - } - - /* Need to initialize renormalization_factors, direction_m and diffuseness_m */ - for ( i = 0; i < hDirAC->hConfig->nbands; i++ ) - { - renormalization_factor_diff[i] = 0; - hDirAC->diffuseness_m[i] = 0; - } - - set_zero( azi_secs, 2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS ); - set_zero( ele_secs, 2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS ); - set_zero( diff_secs, 2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS ); - set_zero( ene_secs, 2 * DIRAC_MAX_ANA_CHANS * DIRAC_MAX_NBANDS ); - - /* Copy current frame to memory for delay compensation */ - for ( i = 0; i < nchan_fb_in; i++ ) - { - pcm_in[i] = data_f[i]; - p_Cldfb_RealBuffer[i] = &Cldfb_RealBuffer[i][0]; - p_Cldfb_ImagBuffer[i] = &Cldfb_ImagBuffer[i][0]; - } - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < num_blocks; block_m_idx++ ) - { - mrange[0] = hDirAC->block_grouping[block_m_idx]; - mrange[1] = hDirAC->block_grouping[block_m_idx + 1]; - - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - renormalization_factor[band_m_idx] = EPSILON; - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] = 0; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] = 0; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] = 0; - } - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - if ( hDirAC->hFbMixer ) - { - ivas_fb_mixer_get_windowed_fr( hDirAC->hFbMixer, pcm_in, p_Cldfb_RealBuffer, p_Cldfb_ImagBuffer, l_ts, l_ts, hDirAC->hFbMixer->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hDirAC->hFbMixer, pcm_in, l_ts, hDirAC->hFbMixer->fb_cfg->num_in_chans ); - - for ( i = 0; i < nchan_fb_in; i++ ) - { - pcm_in[i] += l_ts; - } - } - else - { - for ( i = 0; i < nchan_fb_in; i++ ) - { - mvr2r( &pp_fr_real[i][ts * l_ts], Cldfb_RealBuffer[i], l_ts ); - mvr2r( &pp_fr_imag[i][ts * l_ts], Cldfb_ImagBuffer[i], l_ts ); - } - } - - computeReferencePower_enc( - hDirAC->band_grouping, - Cldfb_RealBuffer, - Cldfb_ImagBuffer, - reference_power[ts], - hDirAC->hConfig->enc_param_start_band, - num_freq_bands, - ivas_format, - hodirac_flag ? 0 : 1, - FOA_CHANNELS, - mono_frame_count, - dirac_mono_flag ); - - computeIntensityVector_enc( - hDirAC, - Cldfb_RealBuffer, - Cldfb_ImagBuffer, - hDirAC->hConfig->enc_param_start_band, - num_freq_bands, - intensity_real ); - - if ( !hodirac_flag ) - { - computeDirectionVectors( - intensity_real[0], - intensity_real[1], - intensity_real[2], - hDirAC->hConfig->enc_param_start_band, - num_freq_bands, - direction_vector[0], - direction_vector[1], - direction_vector[2] ); - } - - /* fill buffers of length "averaging_length" time slots for intensity and energy */ - hDirAC->index_buffer_intensity = ( hDirAC->index_buffer_intensity % hDirAC->no_col_avg_diff ) + 1; /* averaging_length = 32 */ - index = hDirAC->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_real[i], &( hDirAC->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power[ts], &( hDirAC->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness_mdft( hDirAC->buffer_intensity_real, hDirAC->buffer_energy, num_freq_bands, hDirAC->no_col_avg_diff, diffuseness_vector ); - - if ( hodirac_flag ) - { - calculate_hodirac_sector_parameters( - hDirAC, - Cldfb_RealBuffer, - Cldfb_ImagBuffer, - 0.20f, - hDirAC->band_grouping, - hDirAC->hConfig->nbands, - hDirAC->hConfig->enc_param_start_band, - azi_secs, - ele_secs, - diff_secs, - ene_secs ); - } - - if ( hodirac_flag ) - { - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - hDirAC->diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - } - else - { - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - renormalization_factor[band_m_idx] += norm_tmp; - - hDirAC->diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - } - } - - if ( !hodirac_flag ) - { - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - renormalization_factor[band_m_idx] = EPSILON; - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - renormalization_factor[band_m_idx] += ( hDirAC->direction_vector_m[d][block_m_idx][band_m_idx] * hDirAC->direction_vector_m[d][block_m_idx][band_m_idx] ); - } - renormalization_factor[band_m_idx] = sqrtf( renormalization_factor[band_m_idx] ); - - if ( renormalization_factor[band_m_idx] > EPSILON ) - { - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] /= renormalization_factor[band_m_idx]; - } - else - { - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] = 1; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] = 0; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] = 0; - } - - /* save the elevation and azimuth values to be used later by the ivas_dirac_QuantizeParameters function */ - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hDirAC->direction_vector_m[d][block_m_idx][band_m_idx]; - } - - ivas_qmetadata_direction_vector_to_azimuth_elevation( - dir_v, - &q_direction->band_data[band_m_idx].azimuth[block_m_idx], - &q_direction->band_data[band_m_idx].elevation[block_m_idx] ); - } - } - - /* Sectors */ - if ( hodirac_flag ) - { - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - q_direction->band_data[band_m_idx].azimuth[block_m_idx] = azi_secs[band_m_idx]; - q_direction->band_data[band_m_idx].elevation[block_m_idx] = ele_secs[band_m_idx]; - // q_direction->band_data[band_m_idx].energy_ratio[block_m_idx] = 1.f - diffuseness_vector[band_m_idx]; // set later - - q_direction[1].band_data[band_m_idx].azimuth[block_m_idx] = azi_secs[num_freq_bands + band_m_idx]; - q_direction[1].band_data[band_m_idx].elevation[block_m_idx] = ele_secs[num_freq_bands + band_m_idx]; - q_direction[1].band_data[band_m_idx].energy_ratio[block_m_idx] = ( 1.f - diff_secs[band_m_idx] ) / ( ( 1.f - diff_secs[band_m_idx] ) + ( 1.f - diff_secs[num_freq_bands + band_m_idx] ) + EPSILON ); - } - } - } - - /* Diffuseness */ - for ( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - hDirAC->diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - hDirAC->diffuseness_m[band_m_idx] = 0.f; - } - - /* set coherence to zero and convert diffuseness to energy ratio*/ - - set_f( q_direction->band_data[band_m_idx].energy_ratio, 1.f - hDirAC->diffuseness_m[band_m_idx], q_direction->cfg.nblocks ); - - for ( block_m_idx = 0; block_m_idx < q_direction->cfg.nblocks; block_m_idx++ ) - { - if ( q_direction->coherence_band_data != NULL ) - { - q_direction->coherence_band_data[band_m_idx].spread_coherence[block_m_idx] = 0; - } - } - } - - pop_wmops(); - return; -} -#endif /*------------------------------------------------------------------------- @@ -2202,7 +1375,6 @@ void ivas_dirac_param_est_enc( * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void computeIntensityVector_enc_fx( const DIRAC_ENC_HANDLE hDirAC, Word32 Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], @@ -2260,116 +1432,7 @@ static void computeIntensityVector_enc_fx( return; } -#else -static void computeIntensityVector_enc( - DIRAC_ENC_HANDLE hDirAC, - float Cldfb_RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Imag part of input signal */ - const int16_t enc_param_start_band, - const int16_t num_frequency_bands, - float intensity_real[DIRAC_NUM_DIMS][DIRAC_MAX_NBANDS] ) -{ - /* Reminder - * X = a + ib; Y = c + id - * X*Y = ac - bd + i(ad +bc) - */ - int16_t i, j; - float real, img; - int16_t brange[2]; - - for ( i = 0; i < num_frequency_bands; i++ ) - { - brange[0] = hDirAC->band_grouping[i + enc_param_start_band]; - brange[1] = hDirAC->band_grouping[i + enc_param_start_band + 1]; - - intensity_real[0][i] = 0; - intensity_real[1][i] = 0; - intensity_real[2][i] = 0; - - for ( j = brange[0]; j < brange[1]; j++ ) - { - real = Cldfb_RealBuffer[0][j]; - img = Cldfb_ImagBuffer[0][j]; - intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; - intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; - intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * computeDiffuseness_mdft() - * - * - *------------------------------------------------------------------------*/ - -void computeDiffuseness_mdft( - float **buffer_intensity[DIRAC_NUM_DIMS], - const float *buffer_energy, - const int16_t num_freq_bands, - const uint16_t no_col_avg_diff, - float *diffuseness ) -{ - float intensity_slow[DIRAC_NUM_DIMS * MASA_FREQUENCY_BANDS]; - float intensity_slow_abs[MASA_FREQUENCY_BANDS]; - float energy_slow[MASA_FREQUENCY_BANDS]; - int16_t i, j, k; - float tmp = 0; - float *p_tmp; - const float *p_tmp_c; - - /* Compute Intensity slow and energy slow */ - set_f( intensity_slow, 0.0f, DIRAC_NUM_DIMS * MASA_FREQUENCY_BANDS ); - set_f( intensity_slow_abs, 0.0f, MASA_FREQUENCY_BANDS ); - set_f( energy_slow, 0.0f, MASA_FREQUENCY_BANDS ); - - for ( i = 0; i < no_col_avg_diff; ++i ) - { - /* Energy slow */ - p_tmp_c = buffer_energy + i * num_freq_bands; - for ( k = 0; k < num_freq_bands; k++ ) - { - energy_slow[k] += *( p_tmp_c++ ); - } - - /* Intensity slow */ - for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) - { - p_tmp = buffer_intensity[j][i]; - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow[j * num_freq_bands + k] += *( p_tmp++ ); - } - } - } - - /* intensity_slow.^2 + intensity_slow_abs*/ - for ( j = 0; j < DIRAC_NUM_DIMS; ++j ) - { - p_tmp = intensity_slow + j * num_freq_bands; - for ( k = 0; k < num_freq_bands; k++ ) - { - *( p_tmp ) *= ( *p_tmp ); - intensity_slow_abs[k] += *( p_tmp++ ); - } - } - - /* Compute Diffuseness */ - p_tmp = intensity_slow_abs; - for ( i = 0; i < num_freq_bands; ++i ) - { - tmp = sqrtf( *( p_tmp++ ) ) / ( energy_slow[i] + EPSILON ); - tmp = 1.0f - tmp; - diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); - } - return; -} -#else /*------------------------------------------------------------------------- * computeDiffuseness_mdft() * @@ -2482,4 +1545,3 @@ void computeDiffuseness_mdft_fx( return; } -#endif diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index ab7b2a7ca..9e2d975fc 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -43,593 +43,14 @@ #include "debug.h" #endif #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * ivas_enc() * * Principal IVAS encoder routine *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t *data, /* i : input signal */ - const int16_t n_samples /* i : number of input samples */ -) -{ - int16_t i, n, input_frame, n_samples_chan, nchan_inp; - int32_t input_Fs; - IVAS_FORMAT ivas_format; - ENCODER_CONFIG_HANDLE hEncoderConfig; - BSTR_ENC_HANDLE hMetaData; - int16_t nb_bits_metadata[MAX_SCE + 1]; - float *data_f[MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS]; -#ifdef IVAS_FLOAT_FIXED - Word16 *data_fx[MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS]; -#endif - int32_t ivas_total_brate; - ivas_error error; - error = IVAS_ERR_OK; - - push_wmops( "ivas_enc" ); - - /*------------------------------------------------------------------* - * Initialization - general - *-----------------------------------------------------------------*/ - - hEncoderConfig = st_ivas->hEncoderConfig; - - input_Fs = hEncoderConfig->input_Fs; - ivas_format = hEncoderConfig->ivas_format; - nchan_inp = hEncoderConfig->nchan_inp; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - n_samples_chan = n_samples / nchan_inp; - - set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); - - /*----------------------------------------------------------------* - * convert 'short' input data to 'float' - *----------------------------------------------------------------*/ - - for ( n = 0; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - data_f[n] = st_ivas->p_data_f[n]; - } - - n = 0; - while ( n < nchan_inp ) - { - for ( i = 0; i < n_samples_chan; i++ ) - { - data_f[n][i] = (float) data[i * nchan_inp + n]; - } - n++; - } - - if ( n_samples_chan < input_frame ) - { - for ( n = 0; n < nchan_inp; n++ ) - { - set_f( data_f[n] + n_samples_chan, 0.0f, input_frame - n_samples_chan ); - } - } -#ifdef IVAS_FLOAT_FIXED - FOR( n = 0; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - data_fx[n] = st_ivas->p_data_fx[n]; - } - - n = 0; - WHILE( n < nchan_inp ) - { - FOR( i = 0; i < n_samples_chan; i++ ) - { - data_fx[n][i] = (Word16) ( data[i * nchan_inp + n] ); - } - n++; - } - - IF( n_samples_chan < input_frame ) - { - FOR( n = 0; n < nchan_inp; n++ ) - { - set16_fx( data_fx[n] + n_samples_chan, 0, input_frame - n_samples_chan ); - } - } -#endif - - if ( ivas_format == SBA_FORMAT ) - { - if ( ( error = ivas_sba_enc_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( ivas_format == SBA_ISM_FORMAT ) - { - if ( ( error = ivas_osba_enc_reconfig( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*----------------------------------------------------------------* - * HP filtering - *----------------------------------------------------------------*/ - - n = getNumChanAnalysis( st_ivas ); - - /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ - for ( i = 0; i < n; i++ ) - { - if ( ( ivas_format == SBA_FORMAT ) && !( st_ivas->sba_analysis_order > 1 ) ) - { - hp20_flt( data_f[HOA_keep_ind[st_ivas->hSpar->hMdEnc->HOA_md_ind[i]]], input_frame, st_ivas->mem_hp20_in[i], input_Fs ); - } - else if ( !( ivas_format == MC_FORMAT && i == LFE_CHANNEL ) ) - { - hp20_flt( data_f[i], input_frame, st_ivas->mem_hp20_in[i], input_Fs ); - } - } - - /*----------------------------------------------------------------* - * write IVAS format signaling - *----------------------------------------------------------------*/ - - ivas_write_format( st_ivas ); - - /*----------------------------------------------------------------* - * Encoding - *----------------------------------------------------------------*/ - - if ( ivas_format == STEREO_FORMAT ) - { - st_ivas->hCPE[0]->element_brate = ivas_total_brate; - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, 0 /* no metadata */ ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( ivas_format == ISM_FORMAT ) - { - /* select ISM format mode; reconfigure the ISM format encoder */ - if ( ( error = ivas_ism_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - ivas_param_ism_enc( st_ivas, data_f, input_frame ); - - /* Stereo DMX generation */ - ivas_param_ism_stereo_dmx( st_ivas, data_f, input_frame ); - - /* Core coding of Stereo DMX */ - if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MODE_DISC ) - { - /* Analysis, decision about bitrates per channel & core coding */ - if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) - { - /* MASA configuration */ - if ( ivas_format == MASA_FORMAT ) - { - ivas_masa_enc_reconfigure( st_ivas ); - } - - /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */ - hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; - - if ( st_ivas->hQMetaData != NULL && ivas_format == MASA_FORMAT ) - { - ivas_masa_estimate_energy( st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport ); /* energy-estimation uses TF-resolution: 4x24 */ - - if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1, - ISM_MODE_NONE, -1, NULL, -1, NULL, 0, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( ivas_format == SBA_FORMAT ) - { - if ( ( error = ivas_spar_enc( st_ivas, data_f, input_frame, nb_bits_metadata, hMetaData ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ivas_format == SBA_FORMAT ) - { - ivas_sba_getTCs( data_f, st_ivas, input_frame ); - } - - /* core-coding of transport channels */ - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[0], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ - { - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE > 1 ) /* FOA/HOA format */ - { - if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( ivas_format == MASA_ISM_FORMAT ) - { - float *data_separated_object; - - int16_t idx_separated_object; - int16_t flag_omasa_ener_brate; - - flag_omasa_ener_brate = 0; - - /* Stereo transport is used also with monoMASA, duplicate mono if monoMASA */ - if ( ( st_ivas->hEncoderConfig->nchan_inp - hEncoderConfig->nchan_ism ) == 1 ) - { - v_multc( data_f[hEncoderConfig->nchan_ism], 1.0f / SQRT2, data_f[hEncoderConfig->nchan_ism], input_frame ); - mvr2r( data_f[hEncoderConfig->nchan_ism], data_f[hEncoderConfig->nchan_ism + 1], input_frame ); - } - - /* Estimate TF-tile energy for the input MASA stream */ - ivas_masa_estimate_energy( st_ivas->hMasa, &( data_f[hEncoderConfig->nchan_ism] ), input_frame, st_ivas->nchan_transport ); - - if ( ( error = ivas_omasa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - set_s( nb_bits_metadata, 0, MAX_SCE + 1 ); - idx_separated_object = 0; - - data_separated_object = data_f[hEncoderConfig->nchan_ism + CPE_CHANNELS]; - - /* put audio object data in SCE's */ - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - /* Estimate MASA parameters for the objects */ - ivas_omasa_enc( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hIsmMetaData, data_f, input_frame, st_ivas->nchan_transport, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object, &idx_separated_object ); - } - - /* Encode ISMs transport channels */ - n = 0; - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - if ( ( error = ivas_sce_enc( st_ivas, 0, data_separated_object, input_frame, nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) /* there are no metadata bits in SCE in this mode */ - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( ( error = ivas_ism_enc( st_ivas, &data_separated_object, input_frame, &nb_bits_metadata[1], 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - flag_omasa_ener_brate = ivas_omasa_ener_brate( st_ivas->hEncoderConfig->nchan_ism, ivas_total_brate, data_f, input_frame ); - - /* Analysis, decision about bitrates per channel & core coding */ - if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, &nb_bits_metadata[1], flag_omasa_ener_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - n = st_ivas->hEncoderConfig->nchan_ism; - } - - hMetaData = st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; - - if ( st_ivas->nSCE > 0 ) - { - /* update pointer to the buffer of indices (ISM indices were alredy written) */ - hMetaData->ind_list = st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData->ind_list + st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData->nb_ind_tot; - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->ind_list = st_ivas->hSCE[st_ivas->nSCE - 1]->hCoreCoder[0]->hBstr->ind_list + st_ivas->hSCE[st_ivas->nSCE - 1]->hCoreCoder[0]->hBstr->nb_ind_tot; - } - - /* Encode MASA parameters and write MASA metadata bitstream */ - if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, nb_bits_metadata, st_ivas->nchan_transport, ivas_format, ivas_total_brate, st_ivas->hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1, - st_ivas->ism_mode, hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, idx_separated_object, st_ivas->hOMasa, st_ivas->hIsmMetaData[0]->ism_imp, flag_omasa_ener_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Configuration of combined-format bit-budget distribution */ -#ifdef DEBUG_MODE_INFO - ivas_set_surplus_brate_enc( st_ivas, nb_bits_metadata ); -#else - ivas_set_surplus_brate_enc( st_ivas ); -#endif - - /* Encode MASA transport channels */ - if ( ( ivas_cpe_enc( st_ivas, 0, data_f[n], data_f[n + 1], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( ivas_format == SBA_ISM_FORMAT ) - { - int16_t planar_sba_orig; - planar_sba_orig = hEncoderConfig->sba_planar; - - /* Analyze objects and determine needed audio signals */ - ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, st_ivas->sba_analysis_order, hEncoderConfig->input_Fs, hEncoderConfig->sba_planar ); - - if ( st_ivas->ism_mode == ISM_MODE_NONE ) - { - /*once SBA and ISM are combined into SBA signal then disable planar flag*/ - hEncoderConfig->sba_planar = 0; - if ( st_ivas->nchan_transport == 1 ) - { - hMetaData = st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData; - } - else - { - hMetaData = st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; - } - - /* SBA metadata encoding and SBA metadata bitstream writing */ - if ( ( error = ivas_spar_enc( st_ivas, data_f, input_frame, nb_bits_metadata, hMetaData ) ) != IVAS_ERR_OK ) - { - return error; - } - - hEncoderConfig->sba_planar = planar_sba_orig; - } - else - { - n = hEncoderConfig->nchan_ism; - hMetaData = st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; -#ifdef IVAS_FLOAT_FIXED - /*===============================flt-to-fix=============================================*/ - IF( NE_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) || NE_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - FOR( int ch = 0; ch < st_ivas->hEncoderConfig->nchan_ism; ch++ ) - { - IF( EQ_16( st_ivas->ism_mode, ISM_MODE_DISC ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) || EQ_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - IF( EQ_16( st_ivas->hIsmMetaData[ch]->ism_metadata_flag, 1 ) ) - { - /*IF( NE_16( st_ivas->ism_mode, ISM_SBA_MODE_DISC ) ) - { - hSCE[ch]->hCoreCoder[0]->lp_noise_fx = float_to_fix16( hSCE[ch]->hCoreCoder[0]->lp_noise, Q8 ); - }*/ - IF( st_ivas->hIsmMetaData[ch]->ism_metadata_flag == 0 ) - { - st_ivas->hIsmMetaData[ch]->azimuth_fx = float_to_fix( st_ivas->hIsmMetaData[ch]->azimuth, Q22 ); - st_ivas->hIsmMetaData[ch]->last_true_azimuth_fx = float_to_fix( st_ivas->hIsmMetaData[ch]->last_true_azimuth, Q22 ); - st_ivas->hIsmMetaData[ch]->elevation_fx = float_to_fix( st_ivas->hIsmMetaData[ch]->elevation, Q22 ); - st_ivas->hIsmMetaData[ch]->last_true_elevation_fx = float_to_fix( st_ivas->hIsmMetaData[ch]->last_true_elevation, Q22 ); - st_ivas->hIsmMetaData[ch]->radius_fx = float_to_fix16( st_ivas->hIsmMetaData[ch]->radius, Q9 ); - st_ivas->hIsmMetaData[ch]->last_true_radius_fx = float_to_fix16( st_ivas->hIsmMetaData[ch]->last_true_radius, Q9 ); - } - } - } - } - } - IF( st_ivas->hIsmMetaData != NULL ) - { - FOR( int ch = 0; ch < st_ivas->hEncoderConfig->nchan_ism; ch++ ) - { - st_ivas->hIsmMetaData[ch]->azimuth_fx = floatToFixed( st_ivas->hIsmMetaData[ch]->azimuth, Q22 ); - st_ivas->hIsmMetaData[ch]->elevation_fx = floatToFixed( st_ivas->hIsmMetaData[ch]->elevation, Q22 ); - st_ivas->hIsmMetaData[ch]->yaw_fx = floatToFixed( st_ivas->hIsmMetaData[ch]->yaw, Q22 ); - st_ivas->hIsmMetaData[ch]->pitch_fx = floatToFixed( st_ivas->hIsmMetaData[ch]->pitch, Q22 ); - st_ivas->hIsmMetaData[ch]->radius_fx = float_to_fix16( st_ivas->hIsmMetaData[ch]->radius, Q9 ); - } - } - /*===============================flt-to-fix=============================================*/ - - IF( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, n, st_ivas->hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, NULL, hMetaData, &nb_bits_metadata[1], 0, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, L_negate( ONE_IN_Q8 ), 0, NULL, st_ivas->hCPE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*===============================flt-2-fix======================================*/ - IF( st_ivas->hIsmMetaData != NULL ) - { - FOR( int ch = 0; ch < st_ivas->hEncoderConfig->nchan_ism; ch++ ) - { - st_ivas->hIsmMetaData[ch]->last_true_azimuth = fix_to_float( st_ivas->hIsmMetaData[ch]->last_true_azimuth_fx, Q22 ); - st_ivas->hIsmMetaData[ch]->last_true_elevation = fix_to_float( st_ivas->hIsmMetaData[ch]->last_true_elevation_fx, Q22 ); - st_ivas->hIsmMetaData[ch]->last_true_radius = fix16_to_float( st_ivas->hIsmMetaData[ch]->last_true_radius_fx, Q9 ); - } - } - /*===============================fix-2-flt======================================*/ -#else - if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, n, st_ivas->hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, NULL, hMetaData, &nb_bits_metadata[1], 0, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hCPE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - /* SBA metadata encoding and SBA metadata bitstream writing */ - if ( ( error = ivas_spar_enc( st_ivas, &data_f[n], input_frame, nb_bits_metadata, hMetaData ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* get SBA TCs */ - ivas_sba_getTCs( &data_f[n], st_ivas, input_frame ); - } - - /* core-coding of transport channels */ - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[0], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ - { - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE > 1 ) /* FOA/HOA format */ - { - if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, nb_bits_metadata[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( ivas_format == MC_FORMAT ) - { - /* select MC format mode; write MC LS setup; reconfigure the MC format encoder */ - if ( ( error = ivas_mc_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; - - /* LFE low pass filter */ - ivas_lfe_lpf_enc_apply( st_ivas->hLfeLpf, data_f[LFE_CHANNEL], input_frame ); - - /* LFE channel encoder */ - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - st_ivas->hLFE->hBstr = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0]->hBstr : st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; - - ivas_lfe_enc( st_ivas->hLFE, data_f[LFE_CHANNEL], input_frame, st_ivas->hLFE->hBstr ); - } - - if ( st_ivas->mc_mode == MC_MODE_MCT ) - { - if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - /* encode MC ParamUpmix parameters and write bitstream */ - ivas_mc_paramupmix_enc( st_ivas, hMetaData, data_f, input_frame ); - - st_ivas->hLFE->hBstr = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[0]->hCoreCoder[0]->hBstr : st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; - - ivas_lfe_enc( st_ivas->hLFE, data_f[LFE_CHANNEL], input_frame, st_ivas->hLFE->hBstr ); - - if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - /* encode Parametric MC parameters and write bitstream */ - ivas_param_mc_enc( st_ivas, hMetaData, data_f, input_frame ); - - if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ - { - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE > 1 ) - { - if ( ( error = ivas_mct_enc( st_ivas, data_f, input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) - { - if ( st_ivas->hMcMasa->separateChannelEnabled ) - { - hMetaData = st_ivas->hCPE[0]->hMetaData; /* Metadata is always with CPE in the case of separated channel */ - } - - ivas_mcmasa_enc( st_ivas->hMcMasa, st_ivas->hQMetaData, st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport, nchan_inp ); - - if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, 0, -1, - ISM_MODE_NONE, -1, NULL, -1, NULL, 0, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hMcMasa->separateChannelEnabled ) - { - if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[2], input_frame, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->ind_list = st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->ind_list + st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->nb_ind_tot; - - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( st_ivas->nSCE == 1 ) - { - if ( ( error = ivas_sce_enc( st_ivas, 0, data_f[0], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->nCPE == 1 ) /* Stereo DMX */ - { - if ( ( error = ivas_cpe_enc( st_ivas, 0, data_f[0], data_f[1], input_frame, hMetaData->nb_bits_tot ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - hEncoderConfig->last_ivas_total_brate = ivas_total_brate; - - - pop_wmops(); - return error; -} -#else ivas_error ivas_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const Word16 *data, /* i : input signal Q0 */ @@ -737,11 +158,11 @@ ivas_error ivas_enc_fx( test(); IF( ( EQ_32( ivas_format, SBA_FORMAT ) ) && !( GT_16( st_ivas->sba_analysis_order, 1 ) ) ) { - hp20_fix32( data_fx[HOA_keep_ind[st_ivas->hSpar->hMdEnc->HOA_md_ind[i]]], input_frame, st_ivas->mem_hp20_in_fx[i], input_Fs ); + hp20_fx_32( data_fx[HOA_keep_ind[st_ivas->hSpar->hMdEnc->HOA_md_ind[i]]], input_frame, st_ivas->mem_hp20_in_fx[i], input_Fs ); } ELSE IF( !( EQ_32( ivas_format, MC_FORMAT ) && EQ_16( i, LFE_CHANNEL ) ) ) { - hp20_fix32( data_fx[i], input_frame, st_ivas->mem_hp20_in_fx[i], input_Fs ); + hp20_fx_32( data_fx[i], input_frame, st_ivas->mem_hp20_in_fx[i], input_Fs ); } } @@ -1275,4 +696,3 @@ ivas_error ivas_enc_fx( pop_wmops(); return error; } -#endif diff --git a/lib_enc/ivas_enc_cov_handler.c b/lib_enc/ivas_enc_cov_handler.c index 3804b1a9e..cf42f8cc8 100644 --- a/lib_enc/ivas_enc_cov_handler.c +++ b/lib_enc/ivas_enc_cov_handler.c @@ -36,37 +36,25 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#define MIN_POOL_SIZE 24 -#define MIN_POOL_SIZE_DTX 40 -#ifdef IVAS_FLOAT_FIXED +#define MIN_POOL_SIZE 24 +#define MIN_POOL_SIZE_DTX 40 #define MAX_UPDATE_RATE_Q31 ( 1717986944 ) #define MAX_UPDATE_RATE_DTX_Q31 ( 858993472 ) -#else -#define MAX_UPDATE_RATE 0.8f -#define MAX_UPDATE_RATE_DTX 0.4f -#endif /*------------------------------------------------------------------------------------------* * Local functions declarations *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_band_cov_fx( Word32 **ppIn_FR_real, Word32 **ppIn_FR_imag, Word16 q_In_FR, const Word16 num_chans, const Word16 num_bins, Word16 stride, Word32 **pFb_bin_to_band, const Word16 *pFb_start_bin_per_band, const Word16 *pFb_active_bins_per_band, const Word16 start_band, const Word16 end_band, Word32 *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word16 *q_cov_real[IVAS_SPAR_MAX_CH], const Word16 HOA_md_ind[IVAS_SPAR_MAX_CH] ); -#else -static void ivas_band_cov( float **ppIn_FR_real, float **ppIn_FR_imag, const int16_t num_chans, const int16_t num_bins, int16_t stride, float **pFb_bin_to_band, const int16_t *pFb_start_bin_per_band, const int16_t *pFb_active_bins_per_band, const int16_t start_band, const int16_t end_band, float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] ); -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_spar_covar_enc_open_fx() * @@ -135,69 +123,8 @@ ivas_error ivas_spar_covar_enc_open_fx( return error; } -#else -/*------------------------------------------------------------------------- - * ivas_spar_covar_enc_open() - * - * Allocate and initialize SPAR Covar. encoder handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_spar_covar_enc_open( - ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t nchan_inp, /* i : number of input channels */ - const COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC*/ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - ivas_enc_cov_handler_state_t *hCovState; - ivas_cov_smooth_cfg_t cov_smooth_cfg; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( hCovState = (ivas_enc_cov_handler_state_t *) malloc( sizeof( ivas_enc_cov_handler_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV encoder" ); - } - - cov_smooth_cfg.max_bands = IVAS_MAX_NUM_BANDS; - cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE; - cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE; - if ( smooth_mode == COV_SMOOTH_MC ) - { - cov_smooth_cfg.max_update_rate = 1.0f; - cov_smooth_cfg.min_pool_size = 20; - } - if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE_DTX; - cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE_DTX; - - if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - - hCovState->num_bins = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - hCovState->prior_dtx_present = 0; - - set_zero( hCovState->bb_var_lt, FOA_CHANNELS ); - hCovState->prior_var_flag = -1; - - *hCovEnc = hCovState; - - return error; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_spar_covar_enc_close_fx() * @@ -228,40 +155,8 @@ void ivas_spar_covar_enc_close_fx( return; } -#else -/*------------------------------------------------------------------------- - * ivas_spar_covar_enc_close() - * - * Deallocate SPAR Covar. encoder handle - *------------------------------------------------------------------------*/ -void ivas_spar_covar_enc_close( - ivas_enc_cov_handler_state_t **hCovEnc, /* i/o: SPAR Covar. encoder handle */ - const int16_t nchan_inp /* i : number of input channels */ -) -{ - ivas_enc_cov_handler_state_t *hCovState; - if ( hCovEnc == NULL || *hCovEnc == NULL ) - { - return; - } - - hCovState = *hCovEnc; - - ivas_spar_covar_smooth_enc_close( &hCovState->pCov_state, nchan_inp ); - - ivas_spar_covar_smooth_enc_close( &hCovState->pCov_dtx_state, nchan_inp ); - - free( *hCovEnc ); - *hCovEnc = NULL; - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_get_activeW_flag_fx() * @@ -423,121 +318,8 @@ ELSE IF( EQ_16( nchan_transport, 3 ) ) return activeW_flag; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_spar_get_activeW_flag() - * - * - *-----------------------------------------------------------------------------------------*/ - -static int16_t ivas_spar_get_activeW_flag( - ivas_enc_cov_handler_state_t *hCovEnc, - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t dtx_vad, - const int16_t nchan_inp, - const int16_t nchan_transport, - int16_t *res_ind, - const int16_t *dmx_order ) -{ - int16_t b, ch, num_bands, num_chs, activeW_flag; - float bb_var[FOA_CHANNELS], sm_fact, side_ch_var, en_ratio; - num_chs = min( nchan_inp, FOA_CHANNELS ); - num_bands = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW ); - - set_zero( bb_var, FOA_CHANNELS ); - - if ( dtx_vad == 1 ) - { - for ( ch = 0; ch < num_chs; ch++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - bb_var[ch] += cov_real[ch][ch][b]; - } - } - } - else - { - for ( ch = 0; ch < num_chs; ch++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - bb_var[ch] += cov_dtx_real[ch][ch][b]; - } - } - } - - if ( hCovEnc->prior_var_flag == -1 ) - { - for ( ch = 0; ch < num_chs; ch++ ) - { - hCovEnc->bb_var_lt[ch] = bb_var[ch]; - } - } - else - { - sm_fact = 0.5f; - for ( ch = 0; ch < num_chs; ch++ ) - { - hCovEnc->bb_var_lt[ch] = sm_fact * hCovEnc->bb_var_lt[ch] + ( 1 - sm_fact ) * bb_var[ch]; - } - } - - side_ch_var = 0.0f; - for ( ch = nchan_transport; ch < num_chs; ch++ ) - { - side_ch_var += hCovEnc->bb_var_lt[dmx_order[ch]]; - } - - if ( side_ch_var < ( IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH * IVAS_SPAR_SIDE_CH_DYN_ACTIVEW_THRESH ) ) - { - activeW_flag = 0; - } - else - { - en_ratio = hCovEnc->bb_var_lt[0] / side_ch_var; - if ( en_ratio < ( IVAS_SPAR_DYN_ACTIVEW_THRESH * IVAS_SPAR_DYN_ACTIVEW_THRESH ) ) - { - activeW_flag = 1; - } - else - { - activeW_flag = 0; - } - } - - if ( activeW_flag ) - { - *res_ind = 0; - if ( nchan_transport == 2 ) - { - int16_t max_idx; - float max_val; - max_idx = nchan_transport; - max_val = hCovEnc->bb_var_lt[max_idx]; - for ( ch = nchan_transport + 1; ch < num_chs; ch++ ) - { - if ( hCovEnc->bb_var_lt[ch] > max_val ) - { - max_idx = ch; - max_val = hCovEnc->bb_var_lt[ch]; - } - } - *res_ind = max_idx; - } - else if ( nchan_transport == 3 ) - { - *res_ind = dmx_order[nchan_transport]; - } - } - - return activeW_flag; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_enc_cov_handler_process_fx() * @@ -706,117 +488,8 @@ void ivas_enc_cov_handler_process_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_enc_cov_handler_process() - * - * Encoder covariance handler process call - *-----------------------------------------------------------------------------------------*/ -void ivas_enc_cov_handler_process( - ivas_enc_cov_handler_state_t *hCovEnc, /* i/o: SPAR Covar. encoder handle */ - float **ppIn_FR_real, - float **ppIn_FR_imag, - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - ivas_filterbank_t *pFb, /* i/o: FB handle */ - const int16_t start_band, - const int16_t end_band, - const int16_t num_ch, - const int16_t dtx_vad, - const int16_t transient_det[2], - const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH], - int16_t *res_ind, - const int16_t *remix_order, - int16_t *dyn_active_w_flag, - const int16_t nchan_transport, - const int16_t is_sba -) -{ - int16_t i, j; - int16_t dtx_cov_flag; - - dtx_cov_flag = ( dtx_vad == 1 ) ? 0 : 1; - - ivas_band_cov( ppIn_FR_real, ppIn_FR_imag, num_ch, hCovEnc->num_bins, - pFb->fb_bin_to_band.short_stride, - pFb->fb_bin_to_band.pp_short_stride_bin_to_band, - pFb->fb_bin_to_band.p_short_stride_start_bin_per_band, - pFb->fb_bin_to_band.p_short_stride_num_bins_per_band, - start_band, end_band, cov_real, HOA_md_ind ); - - if ( is_sba ) - { - *res_ind = 0; - if ( nchan_transport > 1 && nchan_transport <= ( FOA_CHANNELS - 1 ) ) - { - *dyn_active_w_flag = ivas_spar_get_activeW_flag( hCovEnc, cov_real, cov_real, dtx_vad, num_ch, nchan_transport, res_ind, remix_order ); - } - else - { - *dyn_active_w_flag = 0; - } - } - - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - mvr2r( cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); - } - } - - ivas_cov_smooth_process( hCovEnc->pCov_state, cov_real, pFb, start_band, end_band, num_ch, transient_det ); - - if ( dtx_cov_flag == 0 ) - { - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - mvr2r( cov_real[i][j], hCovEnc->pCov_dtx_state->pPrior_cov_real[i][j], pFb->filterbank_num_bands ); - mvr2r( cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); - } - } - - hCovEnc->prior_dtx_present = 1; - } - else - { - if ( ( transient_det[0] == 0 ) && ( transient_det[1] == 0 ) ) - { - ivas_cov_smooth_process( hCovEnc->pCov_dtx_state, cov_dtx_real, pFb, start_band, end_band, num_ch, transient_det ); - hCovEnc->prior_dtx_present = 1; - } - else - { - if ( hCovEnc->prior_dtx_present == 0 ) - { - ivas_cov_smooth_process( hCovEnc->pCov_dtx_state, cov_dtx_real, pFb, start_band, end_band, num_ch, transient_det ); - hCovEnc->prior_dtx_present = 1; - } - else - { - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - mvr2r( hCovEnc->pCov_dtx_state->pPrior_cov_real[i][j], cov_dtx_real[i][j], pFb->filterbank_num_bands ); - } - } - - hCovEnc->prior_dtx_present = 1; - } - } - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED static void ivas_band_cov_fx( Word32 **ppIn_FR_real, Word32 **ppIn_FR_imag, @@ -950,73 +623,3 @@ static void ivas_band_cov_fx( return; } -#else -static void ivas_band_cov( - float **ppIn_FR_real, - float **ppIn_FR_imag, - const int16_t num_chans, - const int16_t num_bins, - int16_t stride, - float **pFb_bin_to_band, - const int16_t *pFb_start_bin_per_band, - const int16_t *pFb_active_bins_per_band, - const int16_t start_band, - const int16_t end_band, - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] ) -{ - int16_t i, j, k; - float pV_re[L_FRAME48k]; - int16_t m, start_bin, active_bins; - - for ( i = 0; i < num_chans; i++ ) - { - for ( j = i; j < num_chans; j++ ) - { - int16_t i1 = HOA_md_ind[i]; - int16_t j1 = HOA_md_ind[j]; - - for ( k = 0; k < num_bins; k++ ) - { - pV_re[k] = ppIn_FR_real[i1][k] * ppIn_FR_real[j1][k] + ppIn_FR_imag[i1][k] * ppIn_FR_imag[j1][k]; - } - - for ( k = start_band; k < end_band; k++ ) - { - float temp = 0.0f; - const float *p_bin_to_band = pFb_bin_to_band[k]; - float *cov_ptr = pV_re; - int16_t num_blocks; - - num_blocks = num_bins / stride; - start_bin = pFb_start_bin_per_band[k]; - active_bins = pFb_active_bins_per_band[k]; - - for ( int16_t blk = 0; blk < num_blocks; blk++ ) - { - /* optional: add temporal weight here */ - for ( m = start_bin; m < start_bin + active_bins; m++ ) - { - temp += cov_ptr[m] * ( p_bin_to_band[m - start_bin] ); - } - cov_ptr += stride; - } - cov_real[i][j][k] = temp * (float) num_blocks; - } - } - } - - for ( i = 0; i < num_chans; i++ ) - { - for ( j = 0; j < i; j++ ) - { - for ( k = start_band; k < end_band; k++ ) - { - cov_real[i][j][k] = cov_real[j][i][k]; - } - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_entropy_coder.c b/lib_enc/ivas_entropy_coder.c index bcef80e89..9949aab63 100644 --- a/lib_enc/ivas_entropy_coder.c +++ b/lib_enc/ivas_entropy_coder.c @@ -39,91 +39,11 @@ #include "ivas_rom_com.h" #include "math.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_dyn_freq_model() - * - * Chooses frequency model dynamically - *-----------------------------------------------------------------------------------------*/ - -static ivas_error ivas_get_dyn_freq_model( - int16_t *pInput, - const int16_t length, - int16_t *model_index, - ivas_arith_t *pArith, - int16_t **ppCum_freq ) -{ - float curr_dist[IVAS_MAX_QUANT_LEVELS]; - int16_t i, n[IVAS_MAX_QUANT_LEVELS + 1], model_idx; - float curr_bps, curr_bps_min, curr_bps_new; - int16_t range = pArith->range; - int16_t m, offset = -pArith->vals[0]; - ivas_error error; - - error = IVAS_ERR_OK; - - for ( i = 0; i < range + 1; i++ ) - { - n[i] = 0; - } - - for ( i = 0; i < length; i++ ) - { - n[pInput[i] + offset] += 1; - } - - curr_bps = 0; - for ( i = 0; i < range; i++ ) - { - curr_dist[i] = (float) n[i]; - curr_bps -= ( curr_dist[i] * pArith->saved_dist_arr[0][i] ); - } - curr_bps_min = curr_bps; -#ifdef DEBUGGING - dbgwrite_txt( &curr_bps_min, 1, "float_curr_bps_min.txt", NULL ); -#endif - model_idx = 0; - - for ( m = 0; m < pArith->num_models - 1; m++ ) - { - curr_bps_new = 0; - for ( i = 0; i < range; i++ ) - { - curr_bps_new -= ( curr_dist[i] * pArith->saved_dist_arr[m + 1][i] ); - } -#ifdef DEBUGGING - dbgwrite_txt( &curr_bps_new, 1, "float_curr_bps_new.txt", NULL ); -#endif - if ( curr_bps_new < curr_bps_min ) - { - model_idx = m; - curr_bps_min = curr_bps_new; - } - } - - if ( curr_bps_min < curr_bps ) - { - *ppCum_freq = pArith->cum_freq[model_idx + 1]; - model_idx = model_idx + 1; - } - else - { - model_idx = 0; - *ppCum_freq = pArith->cum_freq[0]; - } - - *model_index = model_idx; - - return error; -} -#else /*-----------------------------------------------------------------------------------------* * Function ivas_get_dyn_freq_model_fx() * @@ -217,7 +137,6 @@ static ivas_error ivas_get_dyn_freq_model_fx( return error; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_arith_encode_array() * @@ -239,11 +158,7 @@ static Word16 ivas_arith_encode_array( { IF( pArith->dyn_model_bits > 0 ) { -#ifdef IVAS_FLOAT_FIXED ivas_get_dyn_freq_model_fx( pInput, in_len, &model_index, pArith, &pCum_freq ); -#else - ivas_get_dyn_freq_model( pInput, in_len, &model_index, pArith, &pCum_freq ); -#endif IF( GT_16( add( hMetaData->nb_bits_tot, pArith->dyn_model_bits ), wc_strat_arith ) ) { return -1; @@ -261,22 +176,14 @@ static Word16 ivas_arith_encode_array( FOR( i = 0; i < in_len; i++ ) { ind = sub( pInput[i], pArith->vals[0] ); -#ifdef IVAS_FLOAT_FIXED ivas_ari_encode_14bits_ext_fx( hMetaData, &as, ind, (const UWord16 *) pCum_freq ); -#else - ivas_ari_encode_14bits_ext( hMetaData, &as, ind, (const UWord16 *) pCum_freq ); -#endif IF( GT_16( hMetaData->nb_bits_tot, wc_strat_arith ) ) { return -1; } } -#ifdef IVAS_FLOAT_FIXED ivas_ari_done_encoding_14bits_fx( hMetaData, &as ); -#else - ivas_ari_done_encoding_14bits( hMetaData, &as ); -#endif IF( GT_16( hMetaData->nb_bits_tot, wc_strat_arith ) ) { return -1; @@ -312,11 +219,7 @@ static Word16 ivas_arithCoder_encode_array_diff( move16(); } -#ifndef IVAS_FLOAT_FIXED - ivas_wrap_arround( pIn_old_scratch, pArith_diff->vals[0], pArith_diff->vals[pArith_diff->range - 1], length ); -#else ivas_wrap_arround_fx( pIn_old_scratch, pArith_diff->vals[0], pArith_diff->vals[pArith_diff->range - 1], length ); -#endif arith_result = ivas_arith_encode_array( pIn_old_scratch, pArith_diff, hMetaData, length, wc_strat_arith ); IF( arith_result < 0 ) diff --git a/lib_enc/ivas_front_vad.c b/lib_enc/ivas_front_vad.c index 4984ead0c..f892dca8f 100644 --- a/lib_enc/ivas_front_vad.c +++ b/lib_enc/ivas_front_vad.c @@ -42,215 +42,15 @@ #include #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------------------------* * Function front_vad() * * Standalone front-VAD module *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error front_vad( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure, nullable */ - Encoder_State *st, /* i/o: encoder state structure */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - FRONT_VAD_ENC_HANDLE *hFrontVads, /* i/o: FrontVad handles */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - const int16_t input_frame, /* i : frame length */ - int16_t vad_flag_dtx[], /* o : HE-SAD flag with additional DTX HO */ - float fr_bands[][2 * NB_BANDS], /* i : energy in frequency bands */ - float Etot_LR[], /* o : total energy Left & Right channel */ - float lf_E[][2 * VOIC_BINS], /* i : per bin spectrum energy in lf, LR channels */ - int16_t localVAD_HE_SAD[], /* o : HE-SAD flag without hangover, LR channels */ - int16_t vad_hover_flag[], /* o : VAD hangover flag */ - float band_energies_LR[2 * NB_BANDS], /* o : energy in critical bands without minimum noise floor E_MIN*/ - float *PS_out, /* o : energy spectrum */ - float *Bin_E_out /* o : log-energy spectrum of the current frame */ -) -{ - ENC_CORE_HANDLE *sts; - float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ - float PS[L_FRAME / 2]; /* speech/music clasif. parameters */ - float snr_sum_he; /* HE SAD parameters */ - float Bin_E[L_FFT]; /* per bin log energy spectrum for mid-frame */ - float Bin_E_old[L_FFT / 2]; /* old per bin log energy spectrum for mid-frame */ - float fft_buffLR[2 * L_FFT]; /* fft buffer */ - int16_t n, n_chan, dummy; - int16_t element_mode, last_element_mode; - ivas_error error; - - error = IVAS_ERR_OK; - push_wmops( "front_vad" ); - - if ( hCPE != NULL ) - { - n_chan = CPE_CHANNELS; - sts = &hCPE->hCoreCoder[0]; - element_mode = hCPE->element_mode; - last_element_mode = hCPE->last_element_mode; - } - else if ( st != NULL ) - { - n_chan = 1; - sts = &st; - element_mode = IVAS_SCE; - last_element_mode = IVAS_SCE; - } - else - { - assert( 0 && "Either CPE or SCE must be given!" ); - return IVAS_ERR_INTERNAL_FATAL; - } - - snr_sum_he = 0; - for ( n = 0; n < n_chan; n++ ) - { - localVAD_HE_SAD[n] = 0; - vad_hover_flag[n] = 0; - vad_flag_dtx[n] = 1; - } - - /*------------------------------------------------------------------* - * Allocate/deallocate hFrontVad handles in case of element_mode change - *-----------------------------------------------------------------*/ - - if ( sts[0]->ini_frame > 0 && MCT_flag == 0 && last_element_mode != element_mode ) - { - if ( element_mode == IVAS_CPE_MDCT ) - { - if ( hFrontVads[0] != NULL ) - { - for ( n = 0; n < n_chan; n++ ) - { - front_vad_destroy_fx( &hFrontVads[n] ); - hFrontVads[n] = NULL; - } - } - } - else - { - if ( sts[0]->Opt_DTX_ON && hFrontVads[0] == NULL ) - { - for ( n = 0; n < n_chan; n++ ) - { - if ( ( error = front_vad_create( &hFrontVads[n], hEncoderConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - } - - /* Only run VAD if DTX is on and TD stereo or unified stereo is selected */ - if ( hFrontVads[0] != NULL && element_mode != IVAS_CPE_MDCT ) - { -#ifdef DEBUGGING - /* If stereo switching is not enabled and TD is selected restore element_mode to TD every frame before the VAD */ - if ( hCPE != NULL && hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) - { - hCPE->element_mode = IVAS_CPE_TD; - } -#endif - - /*------------------------------------------------------------------* - * VAD - *-----------------------------------------------------------------*/ - - set_zero( band_energies_LR, 2 * NB_BANDS ); - - for ( n = 0; n < n_chan; n++ ) - { - FRONT_VAD_ENC_HANDLE hFrontVad; - hFrontVad = hFrontVads[n]; - - /* Move previous frame 12k8 signal */ - mvr2r( hFrontVad->buffer_12k8 + L_FFT, hFrontVad->buffer_12k8, L_FFT / 2 ); - - /* Resample to 12k8 */ - modify_Fs( sts[n]->input, input_frame, sts[0]->input_Fs, hFrontVad->buffer_12k8 + L_FFT / 2, INT_FS_12k8, hFrontVad->mem_decim, ( sts[0]->max_bwidth == NB ) ); - - /* Preemphasis */ - preemph( hFrontVad->buffer_12k8 + L_FFT / 2, PREEMPH_FAC_FLT, L_FRAME, &hFrontVad->mem_preemph ); - - analy_sp( IVAS_CPE_TD, hCPE, sts[0]->input_Fs, hFrontVad->buffer_12k8 + L_FFT / 2 - 3 * ( L_SUBFR / 2 ), Bin_E, Bin_E_old, fr_bands[n], lf_E[n], &Etot_LR[n], sts[0]->min_band, sts[0]->max_band, band_energies, PS, fft_buffLR ); - - /* add up energies for later calculating average of channel energies */ - v_add( &band_energies[0], &band_energies_LR[0], &band_energies_LR[0], 2 * NB_BANDS ); - - noise_est_pre( Etot_LR[n], hFrontVads[0]->ini_frame, hFrontVad->hNoiseEst, 0, 0, 0 ); - - /* wb_vad */ - hFrontVad->hVAD->vad_flag = wb_vad( sts[n], fr_bands[n], &dummy, &dummy, &dummy, &snr_sum_he, &localVAD_HE_SAD[n], &dummy, hFrontVad->hVAD, hFrontVad->hNoiseEst, hFrontVad->lp_speech, hFrontVad->lp_noise ); - - if ( n == 0 && n_chan > 1 && last_element_mode == IVAS_CPE_DFT ) - { - sts[1]->last_coder_type = sts[0]->last_coder_type; - } - - /* DTX hangover addition */ - vad_flag_dtx[n] = dtx_hangover_addition( sts[n], hFrontVad->hVAD->vad_flag, hFrontVad->lp_speech - hFrontVad->lp_noise, 0 /* <- no cldfb addition */, &vad_hover_flag[n], hFrontVad->hVAD, hFrontVad->hNoiseEst, &hFrontVads[n]->rem_dtx_ho ); - - if ( n_chan == 1 ) - { - sts[n]->vad_flag = hFrontVad->hVAD->vad_flag; - } - } - - if ( n_chan == CPE_CHANNELS ) - { - /* get average channel energies, adding up was already done, so only need to scale by number of channels */ - v_multc( &band_energies_LR[0], 0.5f, &band_energies_LR[0], 2 * NB_BANDS ); - - /* Logical OR between L and R decisions */ - vad_flag_dtx[0] = vad_flag_dtx[0] || vad_flag_dtx[1]; - } - - if ( sts[0]->hFdCngEnc != NULL ) - { - resetFdCngEnc( sts[0] ); - } - - /* Part of DTX to decide if SID/NO_DATA */ - if ( vad_flag_dtx[0] == 0 && sts[0]->ini_frame > 2 ) /* CNG coding starts after 3 frames */ - { - if ( sts[0]->fd_cng_reset_flag == 0 ) - { - if ( hCPE != NULL ) - { - hCPE->element_mode = IVAS_CPE_DFT; - sts[1]->active_cnt = 0; - } - } - else - { - vad_flag_dtx[0] = 1; - } - } - else - { - vad_flag_dtx[0] = 1; - } - } - - if ( PS_out != NULL ) - { - mvr2r( PS, PS_out, L_FRAME / 2 ); - } - - if ( Bin_E_out != NULL ) - { - mvr2r( Bin_E, Bin_E_out, L_FRAME ); - } - - pop_wmops(); - return error; -} -#else ivas_error front_vad_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure, nullable */ Encoder_State *st, /* i/o: encoder state structure */ @@ -514,93 +314,12 @@ ivas_error front_vad_fx( return error; } -#endif /*-----------------------------------------------------------------------------------------* * Function front_vad_create() * * Allocate and initialize Standalone front-VAD module *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error front_vad_create( - FRONT_VAD_ENC_HANDLE *hFrontVad_out, /* i/o: front-VAD handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ -) -{ - FRONT_VAD_ENC_HANDLE hFrontVad; - - if ( ( hFrontVad = (FRONT_VAD_ENC_HANDLE) malloc( sizeof( FRONT_VAD_ENC ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for front-VAD structure \n" ) ); - } - - if ( ( hFrontVad->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - noise_est_init_ivas_fx( hFrontVad->hNoiseEst ); -#else - noise_est_init( hFrontVad->hNoiseEst ); -#endif - if ( ( hFrontVad->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) - { - - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); - } - -#ifdef IVAS_FLOAT_FIXED - set16_fx( hFrontVad->mem_decim_fx, 0, 2 * L_FILT_MAX ); - hFrontVad->q_mem_decim = Q31; - - wb_vad_init_ivas_fx( hFrontVad->hVAD ); - - hFrontVad->lp_speech_fx = 11520; /* Initialize the long-term active speech level in dB */ - hFrontVad->lp_noise_fx = 0; /* Initialize the long-term noise level in dB */ - set16_fx( hFrontVad->mem_decim_fx, 0, shl( L_FILT_MAX, 1 ) ); - set16_fx( hFrontVad->buffer_12k8_fx, 0, i_mult( 3, shr( L_FRAME, 1 ) ) ); - hFrontVad->mem_preemph_fx = 0; - hFrontVad->q_mem_preemph_fx = Q15; - hFrontVad->q_buffer_12k8 = Q31; - hFrontVad->q_mem_decim = Q31; -#else - set_f( hFrontVad->buffer_12k8, 0, 3 * L_FRAME / 2 ); - set_f( hFrontVad->mem_decim, 0, 2 * L_FILT_MAX ); - wb_vad_init( hFrontVad->hVAD ); - hFrontVad->mem_preemph = 0; -#endif - hFrontVad->ini_frame = 0; - hFrontVad->hVAD->vad_flag = 1; - - /* allocate delay buffer to compensate for filterbank delay */ - hFrontVad->delay_samples = NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); -#ifndef IVAS_FLOAT_FIXED - hFrontVad->delay_buf = NULL; - if ( hFrontVad->delay_samples > 0 ) - { - if ( ( hFrontVad->delay_buf = (float *) malloc( hFrontVad->delay_samples * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD delay buffer\n" ) ); - } - set_f( hFrontVad->delay_buf, 0, hFrontVad->delay_samples ); - } -#else - hFrontVad->delay_buf_fx = NULL; - IF( GT_16( hFrontVad->delay_samples, 0 ) ) - { - IF( ( hFrontVad->delay_buf_fx = (Word16 *) malloc( hFrontVad->delay_samples * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD delay buffer\n" ) ); - } - set16_fx( hFrontVad->delay_buf_fx, 0, hFrontVad->delay_samples ); - } -#endif - *hFrontVad_out = hFrontVad; - - return IVAS_ERR_OK; -} - -#else ivas_error front_vad_create_fx( FRONT_VAD_ENC_HANDLE *hFrontVad_out, /* i/o: front-VAD handle */ const ENCODER_CONFIG_HANDLE hEncoderConfig /* i : configuration structure */ @@ -659,7 +378,6 @@ ivas_error front_vad_create_fx( return IVAS_ERR_OK; } -#endif /*-----------------------------------------------------------------------------------------* * Function front_vad_destroy() @@ -685,7 +403,6 @@ void front_vad_destroy( return; } -#ifdef IVAS_FLOAT_FIXED void front_vad_destroy_fx( FRONT_VAD_ENC_HANDLE *hFrontVad /* i/o: front-VAD handle */ ) @@ -710,13 +427,11 @@ void front_vad_destroy_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function front_vad_spar() * * Standalone front-VAD module for SPAR *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error front_vad_spar_fx( SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder structure */ const Word32 *omni_in, /* i : omnidirectional input signal Q11 */ @@ -945,7 +660,7 @@ ivas_error front_vad_spar_fx( Word16 dummy_int; dummy_int = 0; move16(); - loc_harm = multi_harm_ivas_fx( st->lgBin_E_fx, hFrontVad->hNoiseEst->old_S_fx, hFrontVad->hNoiseEst->cor_map_fx, &hFrontVad->hNoiseEst->multi_harm_limit_fx, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &dummy_int, &st->hSpMusClas->mean_avr_dyn_fx, &st->hSpMusClas->last_sw_dyn_fx, &cor_map_sum_fx, &dummy_fx, S_map_fx ); + loc_harm = multi_harm_fx( st->lgBin_E_fx, hFrontVad->hNoiseEst->old_S_fx, hFrontVad->hNoiseEst->cor_map_fx, &hFrontVad->hNoiseEst->multi_harm_limit_fx, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &dummy_int, &st->hSpMusClas->mean_avr_dyn_fx, &st->hSpMusClas->last_sw_dyn_fx, &cor_map_sum_fx, &dummy_fx, S_map_fx ); } scale = getScaleFactor32( epsP_fx, M + 1 ); Q_esp = add( Q_r[0], scale ); @@ -1006,151 +721,3 @@ ivas_error front_vad_spar_fx( pop_wmops(); return error; } -#else -ivas_error front_vad_spar( - SPAR_ENC_HANDLE hSpar, /* i/o: SPAR encoder structure */ - const float *omni_in, /* i : omnidirectional input signal */ - ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : encoder configuration handle */ - const int16_t input_frame /* i : input frame length */ -) -{ - FRONT_VAD_ENC_HANDLE hFrontVad; - float input[L_FRAME48k]; - int16_t vad_flag_dtx[1]; - float fr_bands[1][2 * NB_BANDS]; - float Etot[1]; - float lf_E[1][2 * VOIC_BINS]; - int16_t localVAD_HE_SAD[1]; - int16_t vad_hover_flag[1]; - float band_energies[2 * NB_BANDS]; - int16_t high_lpn_flag; - Encoder_State *st; - float tmpN[NB_BANDS], tmpE[NB_BANDS]; - float corr_shift, dummy, res_energy; - float A[NB_SUBFR16k * ( M + 1 )], Aw[NB_SUBFR16k * ( M + 1 )]; - float epsP[M + 1]; - float lsp_new[M]; - float lsp_mid[M]; - int16_t alw_pitch_lag_12k8[2]; - float alw_voicing[2]; - float cor_map_sum; - float ncharX; - float sp_div; - float non_staX; - int16_t loc_harm; - float S_map[L_FFT / 2]; - float *inp_12k8; - float old_wsp[L_WSP]; - float *wsp; - float relE; - int16_t flag_spitch; - float PS[L_FRAME / 2]; - int16_t old_pitch; - ivas_error error; - - push_wmops( "front_vad_SPAR" ); - error = IVAS_ERR_OK; - hFrontVad = hSpar->hFrontVad; - st = hSpar->hCoreCoderVAD; - - if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_total_brate <= SBA_DTX_BITRATE_THRESHOLD ) - { - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - inp_12k8 = hFrontVad->buffer_12k8; - mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); - wsp = old_wsp + L_WSP_MEM; - - st->core_brate = -1; /* updated in dtx() */ - st->input_bwidth = st->last_input_bwidth; - - /*------------------------------------------------------------------* - * compensate for SPAR filterbank delay - *-----------------------------------------------------------------*/ - - st->input = input; - mvr2r( omni_in, st->input, input_frame ); - - delay_signal_float( st->input, input_frame, hFrontVad->delay_buf, hFrontVad->delay_samples ); - - /*------------------------------------------------------------------* - * Front-VAD - *-----------------------------------------------------------------*/ - - if ( ( error = front_vad( NULL, st, hEncoderConfig, &hFrontVad, 0 /* MCT_flag */, input_frame, vad_flag_dtx, fr_bands, Etot, lf_E, localVAD_HE_SAD, vad_hover_flag, band_energies, &PS[0], &st->Bin_E[0] ) ) != IVAS_ERR_OK ) - { - return error; - } - - noise_est_down( fr_bands[0], hFrontVad->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &hFrontVad->hNoiseEst->totalNoise, Etot[0], &hFrontVad->hNoiseEst->Etot_last, &hFrontVad->hNoiseEst->Etot_v_h2 ); - corr_shift = correlation_shift( hFrontVad->hNoiseEst->totalNoise ); - dtx( st, hEncoderConfig->ivas_total_brate, vad_flag_dtx[0], inp_12k8 ); - /* linear prediction analysis */ - alw_pitch_lag_12k8[0] = st->old_pitch_la; - alw_pitch_lag_12k8[1] = st->old_pitch_la; - alw_voicing[0] = st->voicing[2]; - alw_voicing[1] = st->voicing[2]; - analy_lp( inp_12k8, L_FRAME, L_LOOK_12k8, &res_energy, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, 0 /* <-- sec_chan_low_rate */ ); - - relE = Etot[0] - st->lp_speech; - - find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1_FLT, L_LOOK_12k8 ); - - if ( st->vad_flag == 0 ) - { - /* reset the OL pitch tracker memories during inactive frames */ - pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); - } - - old_pitch = st->pitch[1]; - pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_LOOK_12k8, st->clas, st->input_bwidth, st->Opt_SC_VBR ); - - /* Updates for adaptive lag window memory */ - st->old_pitch_la = st->pitch[2]; - - /* Detection of very short stable pitch period */ - StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); - - if ( st->hSpMusClas != NULL ) - { - int16_t dummy_int; - dummy_int = 0; - loc_harm = multi_harm( st->Bin_E, hFrontVad->hNoiseEst->old_S, hFrontVad->hNoiseEst->cor_map, &hFrontVad->hNoiseEst->multi_harm_limit, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &dummy_int, &st->hSpMusClas->mean_avr_dyn, &st->hSpMusClas->last_sw_dyn, &cor_map_sum, &dummy, S_map ); - } - - noise_est( st, old_pitch, tmpN, epsP, Etot[0], Etot[0] - hFrontVad->lp_speech, corr_shift, tmpE, fr_bands[0], &cor_map_sum, &ncharX, &sp_div, &non_staX, &loc_harm, lf_E[0], &hFrontVad->hNoiseEst->harm_cor_cnt, hFrontVad->hNoiseEst->Etot_l_lp, &dummy, S_map, NULL, hFrontVad, hFrontVad->ini_frame ); - - vad_param_updt( st, corr_shift, corr_shift, A, st->pitch[1], &hFrontVad, 1 ); - - /* 1st stage speech/music classification (GMM model) */ - /* run only to get 'high_lpn_flag' parameter */ - ivas_smc_gmm( st, NULL, localVAD_HE_SAD[0], Etot[0], lsp_new, cor_map_sum, epsP, PS, non_staX, relE, &high_lpn_flag, flag_spitch ); - - /* long-term energy update */ - long_enr( st, -1, localVAD_HE_SAD[0], high_lpn_flag, &hFrontVad, 1, localVAD_HE_SAD, Etot ); - - /* increase ini_frame counter */ - hFrontVad->ini_frame = min( hFrontVad->ini_frame + 1, MAX_FRAME_COUNTER ); - st->ini_frame = hFrontVad->ini_frame; - - hSpar->front_vad_flag = st->vad_flag; - hSpar->front_vad_dtx_flag = 1; - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - hSpar->front_vad_dtx_flag = 0; - } - hSpar->force_front_vad = 1; - st->last_core = 0; - } - else - { - hSpar->front_vad_flag = 1; - hSpar->front_vad_dtx_flag = 0; - hSpar->force_front_vad = 0; - } - - pop_wmops(); - return error; -} -#endif diff --git a/lib_enc/ivas_init_enc.c b/lib_enc/ivas_init_enc.c index fd48bc764..83c6655f0 100644 --- a/lib_enc/ivas_init_enc.c +++ b/lib_enc/ivas_init_enc.c @@ -39,11 +39,9 @@ #include "ivas_stat_enc.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx_enc.h" #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -52,82 +50,6 @@ * Write IVAS format signaling *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_write_format( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t ind, nBits, extra_bits; - - ind = 0; - nBits = IVAS_FORMAT_SIGNALING_NBITS; - extra_bits = ( IVAS_FORMAT_SIGNALING_NBITS_EXTENDED - IVAS_FORMAT_SIGNALING_NBITS ); - - switch ( st_ivas->hEncoderConfig->ivas_format ) - { - case STEREO_FORMAT: - ind = 0; - break; - case ISM_FORMAT: - ind = 2; - if ( st_ivas->hEncoderConfig->ivas_total_brate >= IVAS_24k4 ) - { - ind = 4; - nBits += extra_bits; - } - break; - case MC_FORMAT: - ind = 1; - break; - case SBA_FORMAT: - ind = 6; - nBits += extra_bits; - break; - case MASA_FORMAT: - ind = 7; - nBits += extra_bits; - break; - case MASA_ISM_FORMAT: - if ( st_ivas->ism_mode == ISM_MODE_NONE ) - { - ind = 7; /* send MASA format */ - nBits += extra_bits; - } - else - { - ind = 10; - nBits += extra_bits + IVAS_COMBINED_FORMAT_SIGNALLING_BITS; - } - break; - case SBA_ISM_FORMAT: - if ( st_ivas->hEncoderConfig->ivas_total_brate < IVAS_24k4 ) - { - ind = 6; /* send SBA format */ - nBits += extra_bits; - } - else - { - ind = 11; /* 1011 */ - nBits += extra_bits + IVAS_COMBINED_FORMAT_SIGNALLING_BITS; - } - break; - default: - assert( !"Invalid format. Aborting." ); - break; - } - - if ( st_ivas->hSCE[0] != NULL ) - { - push_indice( st_ivas->hSCE[0]->hCoreCoder[0]->hBstr, IND_IVAS_FORMAT, ind, nBits ); - } - else if ( st_ivas->hCPE[0] != NULL ) - { - push_indice( st_ivas->hCPE[0]->hCoreCoder[0]->hBstr, IND_IVAS_FORMAT, ind, nBits ); - } - - return; -} -#else void ivas_write_format_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -219,7 +141,6 @@ void ivas_write_format_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_write_format_sid() @@ -227,71 +148,6 @@ void ivas_write_format_fx( * Write IVAS format signaling in SID frames *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_write_format_sid( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t element_mode, /* i : element bitrate */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -) -{ - int16_t ind = 0; /* to avoid compilation warning */ - - switch ( ivas_format ) - { - case STEREO_FORMAT: - if ( element_mode == IVAS_CPE_MDCT ) - { - ind = SID_MDCT_STEREO; - } - else if ( element_mode == IVAS_CPE_DFT ) - { - ind = SID_DFT_STEREO; - } - else - { - assert( !"Wrong stereo mode for SID format signaling" ); - } - break; - case ISM_FORMAT: - ind = SID_ISM; - break; - case MC_FORMAT: - ind = SID_MULTICHANNEL; - break; - case SBA_FORMAT: - switch ( element_mode ) - { - case IVAS_SCE: - ind = SID_SBA_1TC; - break; - case IVAS_CPE_MDCT: - ind = SID_SBA_2TC; - break; - default: - assert( !"Wrong element mode for SBA DTX!" ); - break; - } - break; - case MASA_FORMAT: - if ( element_mode == IVAS_SCE ) - { - ind = SID_MASA_1TC; - } - else - { - ind = SID_MASA_2TC; - } - break; - default: - assert( !"Reserved SID format symbol written." ); - break; - } - - push_indice( hBstr, IND_IVAS_FORMAT, ind, SID_FORMAT_NBITS ); - - return; -} -#else void ivas_write_format_sid_fx( const IVAS_FORMAT ivas_format, /* i : IVAS format */ const Word16 element_mode, /* i : element bitrate */ @@ -364,7 +220,6 @@ void ivas_write_format_sid_fx( return; } -#endif /*-------------------------------------------------------------------* * getNumChanAnalysis() @@ -373,42 +228,6 @@ void ivas_write_format_sid_fx( *-------------------------------------------------------------------*/ /*! r: number of channels to be analysed */ -#ifndef IVAS_FLOAT_FIXED -int16_t getNumChanAnalysis( - Encoder_Struct *st_ivas /* i : IVAS encoder structure */ -) -{ - int16_t n; - - n = st_ivas->nSCE + CPE_CHANNELS * st_ivas->nCPE; - if ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT ) - { - n = ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); - } - else if ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_PARAMMC || st_ivas->mc_mode == MC_MODE_MCMASA ) ) - { - n = st_ivas->hEncoderConfig->nchan_inp; - } - else if ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - n = st_ivas->hEncoderConfig->nchan_inp; - } - else if ( st_ivas->hEncoderConfig->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM ) - { - n = st_ivas->hEncoderConfig->nchan_inp; - } - else if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - n = st_ivas->hEncoderConfig->nchan_inp; - } - else if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) - { - n = st_ivas->hEncoderConfig->nchan_ism + ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); - } - - return n; -} -#else Word16 getNumChanAnalysis_fx( Encoder_Struct *st_ivas /* i : IVAS encoder structure */ ) @@ -451,7 +270,6 @@ Word16 getNumChanAnalysis_fx( return n; } -#endif /*-------------------------------------------------------------------* * copy_encoder_config() @@ -491,7 +309,6 @@ void copy_encoder_config( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * copy_encoder_config_fx() * @@ -547,7 +364,6 @@ void copy_encoder_config_fx( return; } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_initialize_handles_enc() @@ -571,11 +387,7 @@ void ivas_initialize_handles_enc( st_ivas->hCPE[i] = NULL; } -#ifdef IVAS_FLOAT_FIXED st_ivas->mem_hp20_in_fx = NULL; -#else - st_ivas->mem_hp20_in = NULL; -#endif /* ISM metadata handles */ FOR( i = 0; i < MAX_NUM_OBJECTS; i++ ) @@ -775,17 +587,10 @@ ivas_error ivas_init_encoder( /* prepare stereo downmix for EVS */ if ( hEncoderConfig->stereo_dmx_evs == 1 ) { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = stereo_dmx_evs_init_encoder( &( st_ivas->hStereoDmxEVS ), input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } -#else if ( ( error = stereo_dmx_evs_init_encoder_fx( &( st_ivas->hStereoDmxEVS ), input_Fs ) ) != IVAS_ERR_OK ) { return error; } -#endif } } else if ( ivas_format == STEREO_FORMAT ) @@ -835,35 +640,28 @@ ivas_error ivas_init_encoder( } else if ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) { +#ifndef IVAS_FLOAT_FIXED if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#else + IF( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#endif { return error; } if ( ivas_format == SBA_FORMAT ) { -#ifndef IVAS_FLOAT_FIXED - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); -#else st_ivas->sba_analysis_order = ivas_sba_get_analysis_order_fx( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); -#endif if ( ( error = ivas_spar_enc_open_fx( st_ivas, 0 ) ) != IVAS_ERR_OK ) { return error; } -#ifdef IVAS_FLOAT_FIXED IF( ( error = ivas_dirac_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - if ( ( error = ivas_dirac_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif } else { @@ -877,17 +675,10 @@ ivas_error ivas_init_encoder( for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } -#else IF( ( error = create_sce_enc_fx( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK ) { return error; } -#endif if ( ivas_format == SBA_FORMAT && st_ivas->hEncoderConfig->Opt_DTX_ON ) { @@ -924,12 +715,8 @@ ivas_error ivas_init_encoder( int32_t ism_total_brate; int16_t k; -#ifndef IVAS_FLOAT_FIXED - st_ivas->ism_mode = ivas_omasa_ism_mode_select( ivas_total_brate, hEncoderConfig->nchan_ism ); -#else st_ivas->ism_mode = ivas_omasa_ism_mode_select_fx( ivas_total_brate, hEncoderConfig->nchan_ism ); move32(); -#endif st_ivas->nchan_transport = 2; if ( ( error = ivas_ism_metadata_enc_create( st_ivas, hEncoderConfig->nchan_ism, element_brate_tmp ) ) != IVAS_ERR_OK ) @@ -944,16 +731,6 @@ ivas_error ivas_init_encoder( } ism_total_brate = 0; -#ifndef IVAS_FLOAT_FIXED - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - ism_total_brate += sep_object_brate[k - 2][st_ivas->nSCE - 1]; - if ( ( error = create_sce_enc( st_ivas, sce_id, sep_object_brate[k - 2][st_ivas->nSCE - 1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#else FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { ism_total_brate = L_add( ism_total_brate, sep_object_brate[k - 2][st_ivas->nSCE - 1] ); @@ -962,9 +739,12 @@ ivas_error ivas_init_encoder( return error; } } -#endif +#ifndef IVAS_FLOAT_FIXED if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#else + IF( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -975,17 +755,10 @@ ivas_error ivas_init_encoder( if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) { -#ifdef IVAS_FLOAT_FIXED if ( ( error = ivas_omasa_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - if ( ( error = ivas_omasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif // IVAS_FLOAT_FIXED } if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO ) @@ -1017,46 +790,30 @@ ivas_error ivas_init_encoder( } /* allocate and initialize SBA handles */ +#ifndef IVAS_FLOAT_FIXED if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#else + IF( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#endif { return error; } -#ifndef IVAS_FLOAT_FIXED - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); -#else st_ivas->sba_analysis_order = ivas_sba_get_analysis_order_fx( ivas_total_brate, st_ivas->hEncoderConfig->sba_order ); -#endif if ( ( error = ivas_spar_enc_open_fx( st_ivas, 0 ) ) != IVAS_ERR_OK ) { return error; } -#ifdef IVAS_FLOAT_FIXED IF( ( error = ivas_dirac_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - if ( ( error = ivas_dirac_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif if ( st_ivas->ism_mode == ISM_MODE_NONE ) { /* allocate and initialize SBA core-coders */ -#ifndef IVAS_FLOAT_FIXED - if ( st_ivas->nchan_transport == 1 ) - { - if ( ( error = create_sce_enc( st_ivas, 0, ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#else IF( EQ_16( st_ivas->nchan_transport, 1 ) ) { IF( ( error = create_sce_enc_fx( st_ivas, 0, ivas_total_brate ) ) != IVAS_ERR_OK ) @@ -1064,7 +821,6 @@ ivas_error ivas_init_encoder( return error; } } -#endif for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { @@ -1100,31 +856,16 @@ ivas_error ivas_init_encoder( return error; } } -#ifdef IVAS_FLOAT_FIXED if ( ( error = ivas_osba_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#else - if ( ( error = ivas_osba_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif } else if ( ivas_format == MC_FORMAT ) { -#ifndef IVAS_FLOAT_FIXED - st_ivas->mc_mode = ivas_mc_mode_select( hEncoderConfig->mc_input_setup, ivas_total_brate ); -#else st_ivas->mc_mode = ivas_mc_mode_select_fx( hEncoderConfig->mc_input_setup, ivas_total_brate ); -#endif -#ifndef IVAS_FLOAT_FIXED - if ( ( error = ivas_create_lfe_lpf_enc( &st_ivas->hLfeLpf, hEncoderConfig->input_Fs ) ) != IVAS_ERR_OK ) -#else if ( ( error = ivas_create_lfe_lpf_enc_fx( &st_ivas->hLfeLpf, hEncoderConfig->input_Fs ) ) != IVAS_ERR_OK ) -#endif { return error; } @@ -1152,11 +893,7 @@ ivas_error ivas_init_encoder( return error; } -#ifndef IVAS_FLOAT_FIXED - st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels( st_ivas->hEncoderConfig->mc_input_setup ); -#else st_ivas->nchan_transport = ivas_mc_ls_setup_get_num_channels_fx( st_ivas->hEncoderConfig->mc_input_setup ); -#endif } else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { @@ -1189,11 +926,7 @@ ivas_error ivas_init_encoder( } else if ( st_ivas->mc_mode == MC_MODE_PARAMMC ) { -#ifdef IVAS_FLOAT_FIXED if ( ( error = ivas_param_mc_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) -#else - if ( ( error = ivas_param_mc_enc_open( st_ivas ) ) != IVAS_ERR_OK ) -#endif { return error; } @@ -1218,13 +951,13 @@ ivas_error ivas_init_encoder( { int32_t brate_sce, brate_cpe; -#ifndef IVAS_FLOAT_FIXED - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( hEncoderConfig->element_mode_init ), ivas_total_brate ); -#else ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( hEncoderConfig->element_mode_init ), ivas_total_brate ); -#endif +#ifndef IVAS_FLOAT_FIXED if ( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#else + IF( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ) != IVAS_ERR_OK ) +#endif { return error; } @@ -1233,33 +966,13 @@ ivas_error ivas_init_encoder( { return error; } -#ifndef IVAS_FLOAT_FIXED - if ( ( error = ivas_mcmasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#else if ( ( error = ivas_mcmasa_enc_open_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; } -#endif -#ifndef IVAS_FLOAT_FIXED - ivas_mcmasa_split_brate( st_ivas->hMcMasa->separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); -#else ivas_mcmasa_split_brate_fx( st_ivas->hMcMasa->separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); -#endif -#ifndef IVAS_FLOAT_FIXED - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - if ( ( error = create_sce_enc( st_ivas, sce_id, brate_sce ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#else FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) { IF( ( error = create_sce_enc_fx( st_ivas, sce_id, brate_sce ) ) != IVAS_ERR_OK ) @@ -1267,7 +980,6 @@ ivas_error ivas_init_encoder( return error; } } -#endif for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) { @@ -1286,35 +998,8 @@ ivas_error ivas_init_encoder( *-----------------------------------------------------------------*/ /* set number of input channels used for analysis/coding */ -#ifndef IVAS_FLOAT_FIXED - n = getNumChanAnalysis( st_ivas ); -#else n = getNumChanAnalysis_fx( st_ivas ); -#endif - -#ifndef IVAS_FLOAT_FIXED - if ( n > 0 ) - { - if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - } - else - { - st_ivas->mem_hp20_in = NULL; - } - - for ( i = 0; i < n; i++ ) - { - if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - set_f( st_ivas->mem_hp20_in[i], 0.0f, L_HP20_MEM ); - } -#else IF( n > 0 ) { IF( ( st_ivas->mem_hp20_in_fx = (Word32 **) malloc( n * sizeof( Word32 * ) ) ) == NULL ) @@ -1336,10 +1021,8 @@ ivas_error ivas_init_encoder( set32_fx( st_ivas->mem_hp20_in_fx[i], 0, L_HP20_MEM + 2 ); } -#endif return error; } -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_init_encoder_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -1552,7 +1235,7 @@ ivas_error ivas_init_encoder_fx( } ELSE IF( EQ_32( ivas_format, SBA_FORMAT ) || EQ_32( ivas_format, MASA_FORMAT ) ) { - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } @@ -1659,7 +1342,7 @@ ivas_error ivas_init_encoder_fx( } } - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } @@ -1709,7 +1392,7 @@ ivas_error ivas_init_encoder_fx( } /* allocate and initialize SBA handles */ - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } @@ -1883,7 +1566,7 @@ ivas_error ivas_init_encoder_fx( ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( hEncoderConfig->element_mode_init ), ivas_total_brate ); - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } @@ -1893,17 +1576,10 @@ ivas_error ivas_init_encoder_fx( return error; } -#ifndef IVAS_FLOAT_FIXED - if ( ( error = ivas_mcmasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } -#else IF( NE_32( ( error = ivas_mcmasa_enc_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) { return error; } -#endif ivas_mcmasa_split_brate_fx( st_ivas->hMcMasa->separateChannelEnabled, ivas_total_brate, st_ivas->nSCE, st_ivas->nCPE, &brate_sce, &brate_cpe ); FOR( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) @@ -1957,7 +1633,6 @@ ivas_error ivas_init_encoder_fx( return error; } -#endif /*------------------------------------------------------------------------- * destroy_core_enc() * @@ -2274,7 +1949,6 @@ void destroy_evs_core_enc_fx( * * Close IVAS encoder handles *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_destroy_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -2315,20 +1989,6 @@ void ivas_destroy_enc( free( st_ivas->mem_hp20_in_fx ); st_ivas->mem_hp20_in_fx = NULL; } -#ifndef IVAS_FLOAT_FIXED - if ( st_ivas->mem_hp20_in != NULL ) - { - n = getNumChanAnalysis_fx( st_ivas ); - - for ( i = 0; i < n; i++ ) - { - free( st_ivas->mem_hp20_in[i] ); - st_ivas->mem_hp20_in[i] = NULL; - } - free( st_ivas->mem_hp20_in ); - st_ivas->mem_hp20_in = NULL; - } -#endif /* ISM metadata handles */ ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); @@ -2341,14 +2001,10 @@ void ivas_destroy_enc( } /* Q Metadata handle */ - ivas_qmetadata_close( &( st_ivas->hQMetaData ) ); + ivas_qmetadata_close_fx( &( st_ivas->hQMetaData ) ); /* DirAC handle */ -#ifdef IVAS_FLOAT_FIXED ivas_dirac_enc_close_fx( &( st_ivas->hDirAC ), st_ivas->hEncoderConfig->input_Fs ); -#else - ivas_dirac_enc_close( &( st_ivas->hDirAC ), st_ivas->hEncoderConfig->input_Fs ); -#endif /* ParamISM handle */ ivas_param_ism_enc_close( &( st_ivas->hParamIsm ), st_ivas->hEncoderConfig->input_Fs ); @@ -2372,18 +2028,10 @@ void ivas_destroy_enc( ivas_mc_paramupmix_enc_close( &( st_ivas->hMCParamUpmix ), st_ivas->hEncoderConfig->input_Fs ); /* Parametric MC handle */ -#ifdef IVAS_FLOAT_FIXED ivas_param_mc_enc_close_fx( &( st_ivas->hParamMC ), st_ivas->hEncoderConfig->input_Fs ); -#else - ivas_param_mc_enc_close( &( st_ivas->hParamMC ), st_ivas->hEncoderConfig->input_Fs ); -#endif -/* Multi-channel MASA handle */ -#ifdef IVAS_FLOAT_FIXED + /* Multi-channel MASA handle */ ivas_mcmasa_enc_close_fx( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); -#else - ivas_mcmasa_enc_close( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); -#endif /* OMASA handle */ ivas_omasa_enc_close_fx( &( st_ivas->hOMasa ) ); @@ -2392,11 +2040,7 @@ void ivas_destroy_enc( ivas_osba_enc_close_fx( &( st_ivas->hOSba ) ); /* Stereo downmix for EVS encoder handle */ -#ifdef IVAS_FLOAT_FIXED stereo_dmx_evs_close_encoder_fx( &( st_ivas->hStereoDmxEVS ) ); -#else - stereo_dmx_evs_close_encoder( &( st_ivas->hStereoDmxEVS ) ); -#endif /* Encoder configuration handle */ if ( st_ivas->hEncoderConfig != NULL ) @@ -2431,141 +2075,6 @@ void ivas_destroy_enc( return; } -#else -void ivas_destroy_enc( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t i, n, nchan_inp; - nchan_inp = st_ivas->hEncoderConfig->nchan_inp; - - /* SCE handles */ - for ( i = 0; i < MAX_SCE; i++ ) - { - if ( st_ivas->hSCE[i] != NULL ) - { - destroy_sce_enc( st_ivas->hSCE[i] ); - st_ivas->hSCE[i] = NULL; - } - } - - /* CPE handles */ - for ( i = 0; i < MAX_CPE; i++ ) - { - if ( st_ivas->hCPE[i] != NULL ) - { - destroy_cpe_enc( st_ivas->hCPE[i] ); - st_ivas->hCPE[i] = NULL; - } - } - - /* HP20 filter handles */ - if ( st_ivas->mem_hp20_in != NULL ) - { - n = getNumChanAnalysis( st_ivas ); - - for ( i = 0; i < n; i++ ) - { - free( st_ivas->mem_hp20_in[i] ); - st_ivas->mem_hp20_in[i] = NULL; - } - free( st_ivas->mem_hp20_in ); - st_ivas->mem_hp20_in = NULL; - } - - /* ISM metadata handles */ - ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); - - /* ISM DTX Handle */ - if ( st_ivas->hISMDTX != NULL ) - { - free( st_ivas->hISMDTX ); - st_ivas->hISMDTX = NULL; - } - - /* Q Metadata handle */ - ivas_qmetadata_close( &( st_ivas->hQMetaData ) ); - - /* DirAC handle */ - ivas_dirac_enc_close( &( st_ivas->hDirAC ), st_ivas->hEncoderConfig->input_Fs ); - - /* ParamISM handle */ - ivas_param_ism_enc_close( &( st_ivas->hParamIsm ), st_ivas->hEncoderConfig->input_Fs ); - - /* SPAR handle */ - ivas_spar_enc_close( &( st_ivas->hSpar ), st_ivas->hEncoderConfig->input_Fs, nchan_inp, 0 ); - - /* MASA handle */ - ivas_masa_enc_close( &( st_ivas->hMasa ) ); - - /* MCT handle */ - ivas_mct_enc_close( &( st_ivas->hMCT ) ); - - /* LFE handle */ - ivas_lfe_enc_close( &( st_ivas->hLFE ) ); - - /* LFE low pass filter state */ - ivas_lfe_lpf_enc_close( &( st_ivas->hLfeLpf ) ); - - /* Param-Upmix MC handle */ - ivas_mc_paramupmix_enc_close( &( st_ivas->hMCParamUpmix ), st_ivas->hEncoderConfig->input_Fs ); - - /* Parametric MC handle */ - ivas_param_mc_enc_close( &( st_ivas->hParamMC ), st_ivas->hEncoderConfig->input_Fs ); - - /* Multi-channel MASA handle */ - ivas_mcmasa_enc_close( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); - - /* OMASA handle */ - ivas_omasa_enc_close( &( st_ivas->hOMasa ) ); - - /* OSBA handle */ - ivas_osba_enc_close( &( st_ivas->hOSba ) ); - - /* Stereo downmix for EVS encoder handle */ - stereo_dmx_evs_close_encoder( &( st_ivas->hStereoDmxEVS ) ); - - /* Encoder configuration handle */ - if ( st_ivas->hEncoderConfig != NULL ) - { - free( st_ivas->hEncoderConfig ); - st_ivas->hEncoderConfig = NULL; - } - - /* Buffer of indices */ - if ( st_ivas->ind_list != NULL ) - { - free( st_ivas->ind_list ); - } - - if ( st_ivas->ind_list_metadata != NULL ) - { - free( st_ivas->ind_list_metadata ); - } - - /* floating-point input audio buffers */ - for ( n = 0; n < MAX_INPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) - { - if ( st_ivas->p_data_f[n] != NULL ) - { - free( st_ivas->p_data_f[n] ); - st_ivas->p_data_f[n] = NULL; - } -#ifdef IVAS_FLOAT_FIXED - if ( st_ivas->p_data_fx[n] != NULL ) - { - free( st_ivas->p_data_fx[n] ); - st_ivas->p_data_fx[n] = NULL; - } -#endif - } - - /* main IVAS handle */ - free( st_ivas ); - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_initialize_MD_bstr_enc() diff --git a/lib_enc/ivas_ism_dtx_enc.c b/lib_enc/ivas_ism_dtx_enc.c index 07d3183be..244734b99 100644 --- a/lib_enc/ivas_ism_dtx_enc.c +++ b/lib_enc/ivas_ism_dtx_enc.c @@ -37,21 +37,17 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "prot_fx_enc.h" #define IVAS_FLOAT_FIXED_TO_BE_REMOVED -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* * Local constants *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #define MD_MAX_DIFF_AZIMUTH_FX 41943040 #define MD_MAX_DIFF_ELEVATION_FX 41943040 -#endif // IVAS_FLOAT_FIXED #define MD_MAX_DIFF_AZIMUTH 10 #define MD_MAX_DIFF_ELEVATION 10 @@ -109,7 +105,6 @@ ivas_error ivas_ism_dtx_open( *-------------------------------------------------------------------*/ /*! r: indication of DTX frame */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_ism_dtx_enc_fx( ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ @@ -348,218 +343,12 @@ Word16 ivas_ism_dtx_enc_fx( return dtx_flag; } -#else // IVAS_FLOAT_FIXED - -int16_t ivas_ism_dtx_enc( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t nchan_transport, /* i : number of transport channels */ - int16_t vad_flag[MAX_NUM_OBJECTS], /* i : VAD flag */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - int16_t md_diff_flag[], /* o : metadata differential flag */ - int16_t *sid_flag /* o : indication of SID frame */ -) -{ - int16_t ch, dtx_flag; - int16_t nBits, nBits_MD_max; - int16_t nBits_azimuth, nBits_elevation, nBits_coh, nBits_sce_id; - float lp_noise[MAX_NUM_OBJECTS], lp_noise_variation, lp_noise_mean; - float lp_noise_max; - float tmp1, tmp2; - - /* initialization */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; - } - - /*------------------------------------------------------------------* - * compute global ISM DTX flag - *-----------------------------------------------------------------*/ - - /* compute global ISM based on localVAD */ - dtx_flag = 1; - for ( ch = 0; ch < nchan_transport; ch++ ) - { - dtx_flag &= !vad_flag[ch]; - } - - /* compute global ISM based on long-term background noise */ - /* one of the channels is active -> no DTX */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - lp_noise[ch] = hSCE[ch]->hCoreCoder[0]->lp_noise; - } - - lp_noise_variation = var( lp_noise, nchan_transport ); - lp_noise_mean = mean( lp_noise, nchan_transport ); - - if ( lp_noise_mean > 50 || ( lp_noise_mean > 25 && lp_noise_variation > 32 ) ) - { - dtx_flag = 0; - } - - - /* default DTX is applied at lower bitrates; otherwise DTX is applied only in silence */ - maximum( lp_noise, nchan_transport, &lp_noise_max ); - - if ( !( ( nchan_ism == 1 && ivas_total_brate <= IVAS_24k4 ) || - ( nchan_ism == 2 && ivas_total_brate <= IVAS_48k ) || - ( nchan_ism == 3 && ivas_total_brate <= IVAS_80k ) || - ( nchan_ism == 4 && ivas_total_brate <= IVAS_96k ) || - lp_noise_max < 15 ) ) - { - dtx_flag = 0; - } - - /*------------------------------------------------------------------* - * Reset the bitstream - *-----------------------------------------------------------------*/ - - if ( dtx_flag ) - { - /* reset the bitstream (IVAS format signaling was already written) */ - reset_indices_enc( hSCE[0]->hCoreCoder[0]->hBstr, hSCE[0]->hCoreCoder[0]->hBstr->nb_ind_tot ); - } - - /*------------------------------------------------------------------* - * decide about SID metadata to be sent or not (per object) - * estimate the MD bit-budget consumption - *-----------------------------------------------------------------*/ - - if ( dtx_flag ) - { - ivas_get_ism_sid_quan_bitbudget( nchan_ism, &nBits_azimuth, &nBits_elevation, &tmp1, &tmp2, &nBits_coh, &nBits_sce_id ); - - nBits = 0; - for ( ch = 0; ch < nchan_ism; ch++ ) - { - /* check difference between current and last metadata */ - md_diff_flag[ch] = 0; - if ( fabsf( hIsmMeta[ch]->azimuth - hIsmMeta[ch]->last_azimuth ) > MD_MAX_DIFF_AZIMUTH ) - { - md_diff_flag[ch] = 1; - } - - if ( fabsf( hIsmMeta[ch]->elevation - hIsmMeta[ch]->last_elevation ) > MD_MAX_DIFF_ELEVATION ) - { - md_diff_flag[ch] = 1; - } - - /* estimate SID metadata bit-budget */ - nBits++; /* number of objects */ - nBits++; /* SID metadata flag */ - if ( md_diff_flag[ch] == 1 ) - { - nBits += nBits_azimuth; - nBits += nBits_elevation; - } - } - - /* calculate maximum available MD bit-budget */ - nBits_MD_max = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC; - nBits_MD_max -= SID_FORMAT_NBITS; - if ( nchan_transport > 1 ) - { - nBits_MD_max -= nBits_sce_id; - } - - for ( ch = 0; ch < nchan_transport - 1; ch++ ) - { - nBits_MD_max -= nBits_coh; /* coherence */ - } - - if ( nchan_ism > 3 ) - { - nBits_MD_max--; /* ism_mode flag */ - } - - /* too many metadata bits -> switch to active coding */ - if ( nBits > nBits_MD_max ) - { - dtx_flag = 0; - } - } - - /*------------------------------------------------------------------* - * set core_brate for all channels - * get 'sid_flag' value - *-----------------------------------------------------------------*/ - - *sid_flag = 0; - - if ( !dtx_flag ) - { - /* at least one of the channels is active -> no DTX */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->core_brate = -1; - set_bw( IVAS_SCE, hSCE[ch]->element_brate, hSCE[ch]->hCoreCoder[0], MODE1 ); - } - - hISMDTX->cnt_SID_ISM = -1; - - /* IVAS format signaling was erased in dtx() */ - if ( hSCE[0]->hCoreCoder[0]->hBstr->nb_bits_tot == 0 ) - { - /* replicate ivas_write_format() */ - int16_t ind = 2; - nBits = IVAS_FORMAT_SIGNALING_NBITS; - if ( ivas_total_brate >= IVAS_24k4 ) - { - ind = 4; - nBits = IVAS_FORMAT_SIGNALING_NBITS_EXTENDED; - } - - push_indice( hSCE[0]->hCoreCoder[0]->hBstr, IND_IVAS_FORMAT, ind, nBits ); - } - } - else /* ism_dtx_flag == 1 */ - { - for ( ch = 0; ch < nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->cng_type = FD_CNG; - } - - /* * update the global SID counter */ - hISMDTX->cnt_SID_ISM++; - if ( hISMDTX->cnt_SID_ISM >= hSCE[0]->hCoreCoder[0]->hDtxEnc->max_SID ) - { - /* adaptive SID update interval */ - hSCE[0]->hCoreCoder[0]->hDtxEnc->max_SID = hSCE[0]->hCoreCoder[0]->hDtxEnc->interval_SID; - hISMDTX->cnt_SID_ISM = 0; - } - - /* encode SID in one channel only */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->core_brate = FRAME_NO_DATA; - } - - if ( hISMDTX->cnt_SID_ISM == 0 ) - { - hSCE[hISMDTX->sce_id_dtx]->hCoreCoder[0]->core_brate = SID_2k40; - *sid_flag = 1; - } - } - - if ( dtx_flag == 1 && *sid_flag == 0 ) - { - set_s( md_diff_flag, 0, nchan_transport ); - } - - return dtx_flag; -} -#endif /*-------------------------------------------------------------------* * ivas_ism_get_sce_id_dtx() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_get_sce_id_dtx_fx( ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ @@ -637,60 +426,12 @@ void ivas_ism_get_sce_id_dtx_fx( return; } -#else -void ivas_ism_get_sce_id_dtx( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - float tmp_energy[MAX_NUM_OBJECTS]; - int16_t i, j; - - if ( nchan_transport == 1 ) - { - hISMDTX->sce_id_dtx = 0; - - return; - } - - /* Initialize*/ - set_f( tmp_energy, 0.0f, MAX_NUM_OBJECTS ); - - /* compute long term energy parameter */ - for ( j = 0; j < nchan_transport; j++ ) - { - for ( i = 0; i < ( PARAM_ISM_HYS_BUF_SIZE - 1 ); i++ ) - { - hISMDTX->long_term_energy_stereo_dmx_enc[j][i] = hISMDTX->long_term_energy_stereo_dmx_enc[j][i + 1]; - } - - hISMDTX->long_term_energy_stereo_dmx_enc[j][PARAM_ISM_HYS_BUF_SIZE - 1] = sum2_f( hSCE[j]->hCoreCoder[0]->input, input_frame ); - - tmp_energy[j] = sum_f( hISMDTX->long_term_energy_stereo_dmx_enc[j], PARAM_ISM_HYS_BUF_SIZE ); - } - - /* determine the sce_id */ - hISMDTX->sce_id_dtx = 0; - for ( j = 1; j < nchan_transport; j++ ) - { - if ( tmp_energy[j] > tmp_energy[hISMDTX->sce_id_dtx] ) - { - hISMDTX->sce_id_dtx = j; - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_ism_coh_estim_dtx_enc() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_coh_estim_dtx_enc_fx( ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ @@ -776,59 +517,3 @@ void ivas_ism_coh_estim_dtx_enc_fx( return; } -#else -void ivas_ism_coh_estim_dtx_enc( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t input_frame /* i : input frame length */ - -) -{ - Encoder_State *st, *st_id0; - int16_t sce_id, i; - float acorr_ene[MAX_NUM_OBJECTS], xcorr_ene; - - if ( nchan_transport == 1 ) - { - hISMDTX->coh[0] = 0.f; - return; - } - - /* Compute Coherence */ - acorr_ene[hISMDTX->sce_id_dtx] = 0.0f; - st_id0 = hSCE[hISMDTX->sce_id_dtx]->hCoreCoder[0]; - - for ( i = 0; i < input_frame; i++ ) - { - acorr_ene[hISMDTX->sce_id_dtx] += st_id0->input[i] * st_id0->input[i]; - } - - for ( sce_id = 0; sce_id < nchan_transport; sce_id++ ) - { - if ( sce_id == hISMDTX->sce_id_dtx ) - { - hISMDTX->coh[sce_id] = 1.0f; - continue; - } - - st = hSCE[sce_id]->hCoreCoder[0]; - - acorr_ene[sce_id] = 0.0f; - xcorr_ene = 0.0f; - - for ( i = 0; i < input_frame; i++ ) - { - acorr_ene[sce_id] += st->input[i] * st->input[i]; - xcorr_ene += st_id0->input[i] * st->input[i]; - } - - hISMDTX->coh[sce_id] = fabsf( xcorr_ene ) / ( sqrtf( ( acorr_ene[hISMDTX->sce_id_dtx] * acorr_ene[sce_id] ) + EPSILON ) ); - - /* ensure value of coherence is between [0,1] */ - hISMDTX->coh[sce_id] = check_bounds( hISMDTX->coh[sce_id], 0.0f, 1.0f ); - } - - return; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_enc/ivas_ism_enc.c b/lib_enc/ivas_ism_enc.c index e74741273..f89248049 100644 --- a/lib_enc/ivas_ism_enc.c +++ b/lib_enc/ivas_ism_enc.c @@ -37,11 +37,9 @@ #include "ivas_prot.h" #include "ivas_stat_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "prot_fx_enc.h" -#endif #ifdef DEBUGGING #include "debug.h" #endif @@ -52,377 +50,6 @@ * * ISM CoreCoders encoding routine *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - float *data[], /* i : input signal [channels][samples] */ - const int16_t input_frame, /* i : input frame length per channel */ - int16_t *nb_bits_metadata, /* i : number of metadata bits */ - const int16_t flag_omasa_ener_brate /* i : less bitrate for objects in OMASA flag */ -) -{ - SCE_ENC_HANDLE hSCE; - Encoder_State *st; - int16_t sce_id; - float old_inp_12k8[MAX_NUM_OBJECTS][1][L_INP_12k8]; /* buffer of input signal @ 12k8 */ - float old_inp_16k[MAX_NUM_OBJECTS][1][L_INP]; /* buffer of input signal @ 16kHz */ - int16_t vad_flag[MAX_NUM_OBJECTS]; /* VAD flag */ - float ener[MAX_NUM_OBJECTS][1]; /* residual energy from Levinson-Durbin */ - float relE[MAX_NUM_OBJECTS][1]; /* frame relative energy */ - float A[MAX_NUM_OBJECTS][1][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ - float Aw[MAX_NUM_OBJECTS][1][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ - float epsP[MAX_NUM_OBJECTS][1][M + 1]; /* LP prediction errors */ - float lsp_new[MAX_NUM_OBJECTS][1][M]; /* LSPs at the end of the frame */ - float lsp_mid[MAX_NUM_OBJECTS][1][M]; /* ISPs in the middle of the frame */ - int16_t vad_hover_flag[MAX_NUM_OBJECTS][1]; /* VAD hangover flag */ - int16_t attack_flag[MAX_NUM_OBJECTS][1]; /* attack flag (GSC or TC) */ - float realBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ - float imagBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ - float old_wsp[MAX_NUM_OBJECTS][1][L_WSP]; /* old weighted input signal */ - float pitch_fr[MAX_NUM_OBJECTS][1][NB_SUBFR]; /* fractional pitch values */ - float voicing_fr[MAX_NUM_OBJECTS][1][NB_SUBFR]; /* fractional pitch gains */ - int16_t loc_harm[MAX_NUM_OBJECTS][1]; /* harmonicity flag */ - float cor_map_sum[MAX_NUM_OBJECTS][1]; /* speech/music clasif. parameter */ - int16_t vad_flag_dtx[MAX_NUM_OBJECTS][1]; /* HE-SAD flag with additional DTX HO */ - float enerBuffer[MAX_NUM_OBJECTS][1][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ - float currFlatness[1]; /* flatness parameter */ - float fft_buff[MAX_NUM_OBJECTS][1][2 * L_FFT]; /* FFT buffer */ - float fr_bands[1][2 * NB_BANDS]; /* energy in frequency bands */ - float Etot_LR[1]; /* total energy; correlation shift */ - float lf_E[1][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - int16_t localVAD_HE_SAD[1]; /* local HE VAD */ - int16_t nchan_ism, dtx_flag, sid_flag, flag_noisy_speech; - int16_t md_diff_flag[MAX_NUM_OBJECTS]; - Encoder_State *prev_st = NULL; - int32_t ism_total_brate_ref, ism_total_brate; - int16_t i, nchan_transport_ism; - ivas_error error; - - push_wmops( "ivas_ism_enc" ); - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - error = IVAS_ERR_OK; - - dtx_flag = 0; - sid_flag = 0; - flag_noisy_speech = 0; - - nchan_ism = st_ivas->hEncoderConfig->nchan_ism; - set_s( md_diff_flag, 1, nchan_ism ); - - nchan_transport_ism = st_ivas->nchan_transport; - if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - nchan_transport_ism = 1; - nchan_ism = 1; - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - nchan_transport_ism = st_ivas->hEncoderConfig->nchan_ism; - } - - /*------------------------------------------------------------------* - * Preprocesing - *-----------------------------------------------------------------*/ - - for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ ) - { - hSCE = st_ivas->hSCE[sce_id]; - st = hSCE->hCoreCoder[0]; - - /*------------------------------------------------------------------* - * Initialization - general - *-----------------------------------------------------------------*/ - - mvr2r( data[sce_id], st->input, input_frame ); - - st->element_mode = IVAS_SCE; - - /*------------------------------------------------------------------* - * SCE initialization - core coder - *-----------------------------------------------------------------*/ - - st->idchan = 0; - st->core = -1; - st->core_brate = -1; /* updated in dtx() */ - st->max_bwidth = st_ivas->hEncoderConfig->max_bwidth; - st->input_bwidth = st->last_input_bwidth; /* updated in BWD */ - st->bwidth = st->last_bwidth; /* updated in BWD */ - st->rate_switching_reset = 0; -#ifdef DEBUGGING - st->force = st_ivas->hEncoderConfig->force; - st->id_element = sce_id; -#endif - - /*---------------------------------------------------------------* - * Time Domain Transient Detector - *---------------------------------------------------------------*/ - - RunTransientDetection( st->input, input_frame, st->hTranDet ); - currFlatness[0] = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); - - /*----------------------------------------------------------------* - * Configuration of core encoder - *----------------------------------------------------------------*/ - - /* Force to MODE1 in IVAS */ - st->codec_mode = MODE1; - - st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); - - /*----------------------------------------------------------------* - * Front Pre-processing - *----------------------------------------------------------------*/ - error = pre_proc_front_ivas( hSCE, NULL, hSCE->element_brate, nb_bits_metadata[sce_id], input_frame, 0, old_inp_12k8[sce_id][0], old_inp_16k[sce_id][0], - &ener[sce_id][0], &relE[sce_id][0], A[sce_id][0], Aw[sce_id][0], epsP[sce_id][0], lsp_new[sce_id][0], lsp_mid[sce_id][0], &vad_hover_flag[sce_id][0], &attack_flag[sce_id][0], - realBuffer[sce_id][0], imagBuffer[sce_id][0], old_wsp[sce_id][0], pitch_fr[sce_id][0], voicing_fr[sce_id][0], &loc_harm[sce_id][0], &cor_map_sum[sce_id][0], &vad_flag_dtx[sce_id][0], enerBuffer[sce_id][0], - fft_buff[sce_id][0], A[sce_id][0], lsp_new[sce_id][0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, 0, 0, 0, 0, ISM_FORMAT, 0, st_ivas->hEncoderConfig->ivas_total_brate ); - - if ( error != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hEncoderConfig->Opt_DTX_ON ) - { - vad_flag[sce_id] = vad_flag_dtx[sce_id][0]; - } - else - { - vad_flag[sce_id] = st->vad_flag; - } - } - - /*------------------------------------------------------------------* - * DTX analysis - *-----------------------------------------------------------------*/ - - if ( st_ivas->hEncoderConfig->Opt_DTX_ON ) - { - /* compute the dominant sce_id using long term energy */ - ivas_ism_get_sce_id_dtx( st_ivas->hISMDTX, st_ivas->hSCE, st_ivas->nchan_transport, input_frame ); - - /* analysis and decision about DTX */ - dtx_flag = ivas_ism_dtx_enc( st_ivas->hISMDTX, st_ivas->hSCE, st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, st_ivas->nchan_transport, vad_flag, st_ivas->hIsmMetaData, md_diff_flag, &sid_flag ); - - if ( sid_flag ) - { - /* estimate coherence between objects */ - ivas_ism_coh_estim_dtx_enc( st_ivas->hISMDTX, st_ivas->hSCE, st_ivas->nchan_transport, input_frame ); - } - } - - /*------------------------------------------------------------------* - * Analysis of objects, configuration and decision about bitrates per channel - * Metadata quantization and encoding - *-----------------------------------------------------------------*/ - - IF( EQ_16( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - ivas_param_ism_compute_noisy_speech_flag( st_ivas ); - flag_noisy_speech = st_ivas->hParamIsm->flag_noisy_speech; - } - - if ( dtx_flag ) - { - ivas_ism_metadata_sid_enc( st_ivas->hISMDTX, flag_noisy_speech, nchan_ism, st_ivas->nchan_transport, st_ivas->ism_mode, st_ivas->hIsmMetaData, sid_flag, md_diff_flag, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, nb_bits_metadata ); - } - else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, - nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else /* ISM_MODE_DISC */ - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - ism_total_brate = 0; - for ( i = 0; i < st_ivas->nSCE; i++ ) - { - ism_total_brate += st_ivas->hSCE[i]->element_brate; - } - } - else - { - ism_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - } - - ism_total_brate_ref = ism_total_brate; - - if ( ( error = ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData, - nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - ism_total_brate; - } - } - - update_last_metadata( nchan_ism, st_ivas->hIsmMetaData, md_diff_flag ); - - /*----------------------------------------------------------------* - * Write IVAS format signaling in SID frames - *----------------------------------------------------------------*/ - - st = st_ivas->hSCE[0]->hCoreCoder[0]; - -#ifndef IVAS_FLOAT_FIXED - if ( sid_flag ) - { - ivas_write_format_sid( st_ivas->hEncoderConfig->ivas_format, IVAS_SCE, st->hBstr ); - } -#else - IF( sid_flag ) - { - ivas_write_format_sid_fx( st_ivas->hEncoderConfig->ivas_format, IVAS_SCE, st->hBstr ); - } -#endif - /*only metadata encoding is needed for this case*/ - if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) - { - assert( st_ivas->ism_mode != ISM_MODE_NONE ); - return error; - } - - /*------------------------------------------------------------------* - * CoreCoders encoding - *-----------------------------------------------------------------*/ - - for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ ) - { - hSCE = st_ivas->hSCE[sce_id]; - st = hSCE->hCoreCoder[0]; - - /* update pointer to the buffer of indices of the next channel */ - if ( sce_id > 0 ) - { - st->hBstr->ind_list = prev_st->hBstr->ind_list + prev_st->hBstr->nb_ind_tot; - } - - if ( st->low_rate_mode ) - { - st->bwidth = WB; - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - /* IGF reconfiguration */ - if ( hSCE->last_element_brate != hSCE->element_brate || st->last_bwidth != st->bwidth ) - { - int16_t igf; - igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->max_bwidth, st->rf_mode ); - if ( ( error = IGF_Reconfig( &st->hIGFEnc, igf, 0, st->bits_frame_nominal * FRAMES_PER_SEC, st->max_bwidth, st->element_mode, st->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - st->flag_ACELP16k = set_ACELP_flag_IVAS( IVAS_SCE, hSCE->element_brate, st->core_brate, 0, 0, -1, -1 ); - } - else if ( st->low_rate_mode ) - { - st->flag_ACELP16k = 0; - } - else - { - st->flag_ACELP16k = set_ACELP_flag_IVAS( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); - } - - /* modify the coder_type depending on the total_brate per channel */ - coder_type_modif( st, relE[sce_id][0] ); - - /*----------------------------------------------------------------* - * Encoder - *----------------------------------------------------------------*/ - - if ( !dtx_flag || ( dtx_flag && sce_id == st_ivas->hISMDTX->sce_id_dtx ) ) - { - if ( ( error = ivas_core_enc( hSCE, NULL, NULL, 1, old_inp_12k8[sce_id], old_inp_16k[sce_id], ener[sce_id], A[sce_id], Aw[sce_id], epsP[sce_id], lsp_new[sce_id], lsp_mid[sce_id], vad_hover_flag[sce_id], attack_flag[sce_id], realBuffer[sce_id], imagBuffer[sce_id], old_wsp[sce_id], loc_harm[sce_id], cor_map_sum[sce_id], vad_flag_dtx[sce_id], enerBuffer[sce_id], fft_buff[sce_id], 0, ISM_FORMAT, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - /* update input samples buffer */ - mvr2r( st->input, st->old_input_signal, input_frame ); - - hSCE->last_element_brate = hSCE->element_brate; - - /* Store previous attack detection flag */ - st->hTranDet->transientDetector.prev_bIsAttackPresent = st->hTranDet->transientDetector.bIsAttackPresent; - - prev_st = st; - } - - if ( dtx_flag ) - { - for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ ) - { - if ( sce_id != st_ivas->hISMDTX->sce_id_dtx ) - { - st_ivas->hSCE[sce_id]->hCoreCoder[0]->last_core = st_ivas->hSCE[st_ivas->hISMDTX->sce_id_dtx]->hCoreCoder[0]->last_core; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->last_core_brate = st_ivas->hSCE[st_ivas->hISMDTX->sce_id_dtx]->hCoreCoder[0]->core_brate; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->last_L_frame = st_ivas->hSCE[st_ivas->hISMDTX->sce_id_dtx]->hCoreCoder[0]->last_L_frame; - } - } - } - -#ifdef DEBUG_MODE_INFO - if ( dtx_flag ) - { - float tmpF; - int16_t id, n; - - n = 0; - for ( sce_id = 0; sce_id < nchan_transport_ism; sce_id++ ) - { - if ( sce_id != st_ivas->hISMDTX->sce_id_dtx ) - { - st = st_ivas->hSCE[sce_id]->hCoreCoder[0]; - id = st->id_element; - - dbgwrite( &st->core, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "core", n, id, ENC ) ); - dbgwrite( &st->extl, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "extl", n, id, ENC ) ); - dbgwrite( &st->bwidth, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "bwidth", n, id, ENC ) ); - tmpF = st->total_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "total_brate", n, id, ENC ) ); - tmpF = st->core_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "core_brate", n, id, ENC ) ); - tmpF = st->extl_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "extl_brate", n, id, ENC ) ); - - dbgwrite( &st->coder_type, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "coder_type", n, id, ENC ) ); - dbgwrite( &st->coder_type_raw, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "coder_type_raw", n, id, ENC ) ); - dbgwrite( &st->vad_flag, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "vad_flag", n, id, ENC ) ); - dbgwrite( &st->localVAD, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "localVAD", n, id, ENC ) ); - } - } - } -#endif - - pop_wmops(); - - return error; -} -#else ivas_error ivas_ism_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ Word32 *data[], /* i : input signal [channels][samples] Q(q_data) */ @@ -849,7 +476,6 @@ ivas_error ivas_ism_enc_fx( return error; } -#endif /*------------------------------------------------------------------------- * ivas_ism_enc_config() @@ -858,73 +484,6 @@ ivas_error ivas_ism_enc_fx( * - reconfigure the ISM format encoder *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_ism_enc_config( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - ivas_error error; - ISM_MODE last_ism_mode; - int16_t nchan_transport_old; - int16_t nSCE_old, nCPE_old; - - error = IVAS_ERR_OK; - last_ism_mode = st_ivas->ism_mode; - - /* select ISM format mode */ - st_ivas->ism_mode = ivas_ism_mode_select( st_ivas->hEncoderConfig->nchan_inp, st_ivas->hEncoderConfig->ivas_total_brate ); - - /* ISM bit-rate switching */ - if ( ( st_ivas->ism_mode != last_ism_mode ) || ( st_ivas->hEncoderConfig->ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) ) - { - int32_t element_brate_tmp[MAX_NUM_OBJECTS]; - - nchan_transport_old = st_ivas->nchan_transport; - - /* Reset and Initialize */ - if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - st_ivas->nchan_transport = MAX_PARAM_ISM_WAVE; - } - else - { - st_ivas->nchan_transport = st_ivas->hEncoderConfig->nchan_inp; - } - - nCPE_old = st_ivas->nCPE; - nSCE_old = st_ivas->nSCE; - st_ivas->nSCE = st_ivas->nchan_transport; - st_ivas->nCPE = 0; - - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hEncoderConfig->nchan_inp, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_corecoder_enc_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, st_ivas->hEncoderConfig->ivas_total_brate / st_ivas->nchan_transport, ( st_ivas->hEncoderConfig->ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS, MC_MODE_NONE ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->ism_mode == ISM_MODE_PARAM && last_ism_mode == ISM_MODE_DISC ) - { - /* Allocate and Initialize the memory used by ParamISM when switch from Discrete ISM */ - if ( ( error = ivas_param_ism_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( st_ivas->ism_mode == ISM_MODE_DISC && last_ism_mode == ISM_MODE_PARAM ) - { - /* Deallocate the memory used by ParamISM when switch to Discrete ISM */ - ivas_param_ism_enc_close( &( st_ivas->hParamIsm ), st_ivas->hEncoderConfig->input_Fs ); - } - } - - return error; -} -#else ivas_error ivas_ism_enc_config( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -1002,4 +561,3 @@ ivas_error ivas_ism_enc_config( return error; } -#endif diff --git a/lib_enc/ivas_ism_metadata_enc.c b/lib_enc/ivas_ism_metadata_enc.c index 6d11340b6..ffd0e1b1d 100644 --- a/lib_enc/ivas_ism_metadata_enc.c +++ b/lib_enc/ivas_ism_metadata_enc.c @@ -41,15 +41,11 @@ #include "prot.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" #define IVAS_FLOAT_FIXED_TO_BE_REMOVED -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local constants @@ -86,7 +82,6 @@ static void encode_radius( BSTR_ENC_HANDLE hBstr, int16_t *last_radius_idx, int1 * * Set metadata of one ISM MD handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_set_ism_metadata_fx( ISM_METADATA_HANDLE hIsmMeta, /* o : ISM metadata handle */ const Word32 azimuth, /* i : azimuth value */ @@ -122,35 +117,6 @@ ivas_error ivas_set_ism_metadata_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_set_ism_metadata( - ISM_METADATA_HANDLE hIsmMeta, /* o : ISM metadata handle */ - const float azimuth, /* i : azimuth value */ - const float elevation, /* i : elevation */ - const float radius_meta, /* i : radius */ - const float yaw, /* i : yaw */ - const float pitch, /* i : pitch */ - const int16_t non_diegetic_flag /* i : non-diegetic object flag*/ -) -{ - if ( hIsmMeta == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hIsmMeta->ism_metadata_flag = 1; - - /* save read metadata parameters to the internal codec structure */ - hIsmMeta->azimuth = azimuth; - hIsmMeta->elevation = elevation; - hIsmMeta->radius = radius_meta; - hIsmMeta->yaw = yaw; - hIsmMeta->pitch = pitch; - hIsmMeta->non_diegetic_flag = non_diegetic_flag; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * rate_ism_importance() @@ -158,7 +124,6 @@ ivas_error ivas_set_ism_metadata( * Rate importance of particular ISM streams *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void rate_ism_importance( const Word16 nchan_transport, /* i : number of transported channels */ ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ @@ -215,54 +180,6 @@ static void rate_ism_importance( return; } -#else -static void rate_ism_importance( - const int16_t nchan_transport, /* i : number of transported channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ - const int16_t lowrate_metadata_flag[MAX_NUM_OBJECTS], /* i : low-rate MD flag */ - int16_t ism_imp[] /* o : ISM importance flags */ -) -{ - int16_t ch, ctype; - - for ( ch = 0; ch < nchan_transport; ch++ ) - { - ctype = hSCE[ch]->hCoreCoder[0]->coder_type_raw; - - if ( hSCE[ch]->hCoreCoder[0]->tcxonly ) - { - if ( hSCE[ch]->hCoreCoder[0]->localVAD == 0 ) - { - ctype = INACTIVE; - } - else if ( ctype == UNVOICED ) - { - ctype = GENERIC; - } - } - - if ( ( hIsmMeta[ch]->ism_metadata_flag == 0 || lowrate_metadata_flag[ch] == 1 ) && hSCE[ch]->hCoreCoder[0]->localVAD == 0 ) - { - ism_imp[ch] = ISM_NO_META; - } - else if ( ctype == INACTIVE || ctype == UNVOICED ) - { - ism_imp[ch] = ISM_LOW_IMP; - } - else if ( ctype == VOICED ) - { - ism_imp[ch] = ISM_MEDIUM_IMP; - } - else /* GENERIC */ - { - ism_imp[ch] = ISM_HIGH_IMP; - } - } - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_ism_metadata_enc() @@ -270,7 +187,6 @@ static void rate_ism_importance( * quantize and encode ISM metadata *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_ism_metadata_enc( Word32 *ism_total_brate, /* i/o: ISM total bitrate */ const Word16 nchan_ism, /* i : number of ISM channels */ @@ -868,14 +784,14 @@ ivas_error ivas_ism_metadata_enc( test(); IF( EQ_16( ism_mode, ISM_MASA_MODE_DISC ) || EQ_16( ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { - IF( NE_32( ( error = ivas_ism_config( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 1 ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_ism_config_fx( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 1 ) ), IVAS_ERR_OK ) ) { return error; } } ELSE { - IF( NE_32( ( error = ivas_ism_config( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 0 ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_ism_config_fx( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 0 ) ), IVAS_ERR_OK ) ) { return error; } @@ -946,732 +862,153 @@ ivas_error ivas_ism_metadata_enc( return error; } -#else -ivas_error ivas_ism_metadata_enc( - int32_t *ism_total_brate, /* i/o: ISM total bitrate */ - const int16_t nchan_ism, /* i : number of ISM channels */ - const int16_t nchan_transport, /* i : number of transport channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t nb_bits_metadata[], /* o : number of metadata bits */ - const int16_t vad_flag[], /* i : VAD flag */ - const int16_t ism_mode, /* i : ISM mode */ - const PARAM_ISM_CONFIG_HANDLE hParamIsm, /* i : Param ISM Enc Handle */ - const int16_t ism_extended_metadata_flag, /* i : Extended metadata flag */ - const float lp_noise_CPE, - const int16_t flag_omasa_ener_brate, /* i : less bitrate for objects in OMASA flag */ - int16_t *omasa_stereo_sw_cnt, - const int16_t ini_frame ) + +/*------------------------------------------------------------------------- + * ivas_ism_metadata_enc_create() + * + * Create, allocate, initialize and configure IVAS encoder ISM metadata handles + *-------------------------------------------------------------------------*/ + +ivas_error ivas_ism_metadata_enc_create( + Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ + const Word16 n_ISms, /* i : number of objects */ + Word32 element_brate_tmp[] /* o : element bitrate per object */ +) { - int16_t i, ch, nb_bits_start = 0; - int16_t flag_abs_azimuth[MAX_NUM_OBJECTS]; - int16_t flag_abs_elevation[MAX_NUM_OBJECTS]; - int16_t idx_angle1_abs = 0; - int16_t idx_angle2_abs = 0; - int16_t flag_abs_yaw[MAX_NUM_OBJECTS]; - int16_t flag_abs_pitch[MAX_NUM_OBJECTS]; - int16_t idx_radius_abs = 0, flag_abs_radius[MAX_NUM_OBJECTS]; - float valQ; - ISM_METADATA_HANDLE hIsmMetaData; - int32_t element_brate[MAX_NUM_OBJECTS], total_brate[MAX_NUM_OBJECTS]; - int16_t ism_metadata_flag_global; - int16_t non_diegetic_flag_global; - int16_t ism_imp[MAX_NUM_OBJECTS]; - int16_t null_metadata_flag[MAX_NUM_OBJECTS]; - int16_t lowrate_metadata_flag[MAX_NUM_OBJECTS]; - int16_t nbands, nblocks; + Word16 ch, nchan_transport; ivas_error error; - error = IVAS_ERR_OK; - push_wmops( "ism_meta_enc" ); - - /* initialization */ - ism_metadata_flag_global = 0; - non_diegetic_flag_global = 0; - set_s( nb_bits_metadata, 0, nchan_transport ); - set_s( flag_abs_azimuth, 0, nchan_ism ); - set_s( flag_abs_elevation, 0, nchan_ism ); - set_s( flag_abs_yaw, 0, nchan_ism ); - set_s( flag_abs_pitch, 0, nchan_ism ); - set_s( flag_abs_radius, 0, nchan_ism ); - set_s( null_metadata_flag, 0, nchan_ism ); - set_s( lowrate_metadata_flag, 0, nchan_ism ); - - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + nchan_transport = st_ivas->nchan_transport; + move16(); + IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) { - /*----------------------------------------------------------------* - * Rate importance of particular ISM streams in combined format coding - *----------------------------------------------------------------*/ - - ivas_set_ism_importance_interformat( *ism_total_brate, nchan_transport, hIsmMeta, hSCE, lp_noise_CPE, ism_imp ); + nchan_transport = MAX_PARAM_ISM_WAVE; + move16(); + ivas_set_omasa_TC_fx( st_ivas->ism_mode, n_ISms, &st_ivas->nSCE, &st_ivas->nCPE ); } - else + ELSE IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, SBA_ISM_FORMAT ) ) { - /*----------------------------------------------------------------* - * Set Metadata presence / importance flag - *----------------------------------------------------------------*/ - - for ( ch = 0; ch < nchan_ism; ch++ ) + nchan_transport = n_ISms; + move16(); + } + ELSE + { + IF( EQ_32( st_ivas->ism_mode, ISM_MODE_NONE ) ) { - if ( ism_mode == ISM_MODE_PARAM ) + nchan_transport = st_ivas->nchan_transport; + move16(); + + IF( EQ_16( nchan_transport, 1 ) ) { - hIsmMeta[ch]->ism_metadata_flag = 1; + st_ivas->nSCE = 1; + move16(); + st_ivas->nCPE = 0; + move16(); } - else if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) + ELSE { - null_metadata_flag[ch] = !hIsmMeta[ch]->ism_metadata_flag; - - if ( hIsmMeta[ch]->ism_metadata_flag == 1 ) - { - if ( ism_mode != ISM_SBA_MODE_DISC ) - { - /* In case of low level noise for low bitrate inactive frames, do not sent metadata */ - hIsmMeta[ch]->ism_metadata_flag = vad_flag[ch] || hSCE[ch]->hCoreCoder[0]->lp_noise > 10 || hSCE[ch]->hCoreCoder[0]->tcxonly; - } - - /* in inactive frames, send MD 1) in ISM_MD_INC_DIFF_CNT_MAX consecutive frames when MD significantly change, 2) at least every ISM_MD_FEC_DIFF frames */ - if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) - { - if ( ( fabsf( hIsmMeta[ch]->azimuth - hIsmMeta[ch]->last_true_azimuth ) > ISM_MD_FEC_DIFF ) || - ( fabsf( hIsmMeta[ch]->elevation - hIsmMeta[ch]->last_true_elevation ) > ISM_MD_FEC_DIFF ) || ( fabsf( hIsmMeta[ch]->radius - hIsmMeta[ch]->last_true_radius ) > ISM_MD_RAD_FEC_DIFF ) ) - { - - lowrate_metadata_flag[ch] = 1; - - hIsmMeta[ch]->ism_md_inc_diff_cnt = 0; - } - else if ( hIsmMeta[ch]->ism_md_inc_diff_cnt < ISM_MD_INC_DIFF_CNT_MAX ) - { - - lowrate_metadata_flag[ch] = 1; - - if ( hIsmMeta[ch]->ism_md_inc_diff_cnt % 2 == 0 ) - { - hIsmMeta[ch]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; - } - else - { - hIsmMeta[ch]->position_angle.angle2_diff_cnt = ISM_FEC_MAX; - } - } - else if ( hIsmMeta[ch]->ism_md_fec_cnt_enc == ISM_MD_FEC_CNT_MAX ) - { - - lowrate_metadata_flag[ch] = 1; - - hIsmMeta[ch]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; - } - } - } + st_ivas->nSCE = 0; + move16(); + st_ivas->nCPE = 1; + move16(); } } - - /*----------------------------------------------------------------* - * Rate importance of particular ISM streams - *----------------------------------------------------------------*/ - - if ( ism_mode != ISM_SBA_MODE_DISC ) + ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) { - rate_ism_importance( nchan_transport, hIsmMeta, hSCE, lowrate_metadata_flag, ism_imp ); + nchan_transport = 2; + move16(); } - } - - /*----------------------------------------------------------------* - * Write ISM common signaling - *----------------------------------------------------------------*/ - - if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ && ism_mode != ISM_SBA_MODE_DISC ) - { - /* write number of objects - unary coding */ - for ( ch = 1; ch < nchan_ism; ch++ ) + ELSE { - push_indice( hBstr, IND_ISM_NUM_OBJECTS, 1, 1 ); + nchan_transport = n_ISms; + move16(); } - push_indice( hBstr, IND_ISM_NUM_OBJECTS, 0, 1 ); - } - for ( ch = 0; ch < nchan_ism; ch++ ) - { - ism_metadata_flag_global |= hIsmMeta[ch]->ism_metadata_flag; - ism_metadata_flag_global |= lowrate_metadata_flag[ch]; - non_diegetic_flag_global |= hIsmMeta[ch]->non_diegetic_flag; + st_ivas->nchan_transport = nchan_transport; + st_ivas->nSCE = nchan_transport; + st_ivas->nCPE = 0; + move16(); + move16(); + move16(); } - /* write extended metadata presence flag */ - if ( ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) && *ism_total_brate >= ISM_EXTENDED_METADATA_BRATE ) + /* allocate ISM metadata handles */ + FOR( ch = 0; ch < n_ISms; ch++ ) { - push_indice( hBstr, IND_ISM_EXTENDED_FLAG, ism_extended_metadata_flag, ISM_EXTENDED_METADATA_BITS ); - - /* Write global non-diegetic object flag */ - if ( ism_extended_metadata_flag ) + IF( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) { - push_indice( hBstr, IND_ISM_EXTENDED_NDP_FLAG, non_diegetic_flag_global, ISM_EXTENDED_METADATA_BITS ); + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM MetaData\n" ) ); } + st_ivas->hIsmMetaData[ch]->position_angle.last_angle1_idx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; + move16(); + st_ivas->hIsmMetaData[ch]->position_angle.last_angle2_idx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->position_angle.angle2_diff_cnt = ISM_FEC_MAX - 1; + move16(); + st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle1_idx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->orientation_angle.angle1_diff_cnt = ISM_FEC_MAX - 2; + move16(); + st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle2_idx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->orientation_angle.angle2_diff_cnt = ISM_FEC_MAX - 2; + move16(); + st_ivas->hIsmMetaData[ch]->last_radius_idx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->radius_diff_cnt = ISM_FEC_MAX - 2; + move16(); + st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; + move16(); + + st_ivas->hIsmMetaData[ch]->ism_imp = -1; + move16(); + st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; + move16(); + st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; + move16(); + + st_ivas->hIsmMetaData[ch]->q_azimuth_old_fx = 0; + move16(); + st_ivas->hIsmMetaData[ch]->q_elevation_old_fx = 0; + move16(); + + ivas_ism_reset_metadata_enc( st_ivas->hIsmMetaData[ch] ); + + st_ivas->hIsmMetaData[ch]->last_azimuth_fx = 0; + move32(); + st_ivas->hIsmMetaData[ch]->last_elevation_fx = 0; + move32(); + + st_ivas->hIsmMetaData[ch]->last_true_azimuth_fx = 0; + move32(); + st_ivas->hIsmMetaData[ch]->last_true_elevation_fx = 0; + move32(); + + st_ivas->hIsmMetaData[ch]->ism_md_fec_cnt_enc = 0; + move16(); + st_ivas->hIsmMetaData[ch]->ism_md_inc_diff_cnt = ISM_MD_INC_DIFF_CNT_MAX; + move16(); + st_ivas->hIsmMetaData[ch]->last_true_radius_fx = ONE_IN_Q9; + move16(); } - /* write ISM metadata flag (one per object) */ - for ( ch = 0; ch < nchan_transport; ch++ ) + IF( EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) { - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) + test(); + IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) { - /* flags will be written in ivas_masa_encode() */ - hIsmMeta[ch]->ism_imp = ism_imp[ch]; - hIsmMeta[ch]->ism_md_null_flag = null_metadata_flag[ch]; - hIsmMeta[ch]->ism_md_lowrate_flag = lowrate_metadata_flag[ch]; + IF( NE_32( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, 1, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ), IVAS_ERR_OK ) ) + { + return error; + } } - else + ELSE IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - if ( null_metadata_flag[ch] ) + IF( NE_32( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, n_ISms, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ), IVAS_ERR_OK ) ) { - /* signal NULL metadata frame */ - push_indice( hBstr, IND_ISM_MD_NULL_FLAG, 1, ISM_METADATA_MD_FLAG_BITS ); - - /* write the ISM class to ISM_NO_META and again the true ISM class */ - if ( ism_mode != ISM_SBA_MODE_DISC ) - { - push_indice( hBstr, IND_ISM_METADATA_FLAG, ISM_NO_META, ISM_METADATA_FLAG_BITS ); - push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); - } - else - { - push_indice( hBstr, IND_ISM_METADATA_FLAG, ISM_NO_META, 1 ); - } - } - else if ( ism_mode != ISM_SBA_MODE_DISC ) - { - push_indice( hBstr, IND_ISM_METADATA_FLAG, ism_imp[ch], ISM_METADATA_FLAG_BITS ); - - if ( ism_imp[ch] == ISM_NO_META ) - { - /* signal low-rate ISM_NO_META frame */ - push_indice( hBstr, IND_ISM_MD_NULL_FLAG, 0, ISM_METADATA_MD_FLAG_BITS ); - - /* signal presence of MD in low-rate ISM_NO_META frame */ - push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, lowrate_metadata_flag[ch], ISM_METADATA_INACTIVE_FLAG_BITS ); - } - } - else /*ism_mode == ISM_SBA_MODE_DISC*/ - { - /* all objects are considered active*/ - push_indice( hBstr, IND_ISM_METADATA_FLAG, 1, 1 ); - } - } - } - - - if ( ism_metadata_flag_global ) - { - /*----------------------------------------------------------------* - * Metadata quantization and coding, loop over all objects - *----------------------------------------------------------------*/ - - int16_t total_bits_metadata = 0; - int16_t bits_metadata_ism = 0; - int16_t nb_bits_objcod_written; - - if ( ism_mode == ISM_MODE_PARAM ) - { - nb_bits_start = hBstr->nb_bits_tot; - } - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMetaData = hIsmMeta[ch]; - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_SBA_MODE_DISC ) - { - nb_bits_start = hBstr->nb_bits_tot; - } - - if ( hIsmMeta[ch]->ism_metadata_flag || lowrate_metadata_flag[ch] ) - { - /*----------------------------------------------------------------* - * Quantize and encode azimuth and elevation - *----------------------------------------------------------------*/ - - if ( ism_extended_metadata_flag && non_diegetic_flag_global ) - { - /* Write non-diegetic flag for each object */ - push_indice( hBstr, IND_ISM_NDP_FLAG, hIsmMeta[ch]->non_diegetic_flag, ISM_METADATA_IS_NDP_BITS ); - } - - if ( hIsmMeta[ch]->non_diegetic_flag && ism_extended_metadata_flag ) - { - /* Map azimuth to panning range [-90:90] */ - if ( hIsmMetaData->azimuth > 90.0f ) - { - hIsmMetaData->azimuth = 180.0f - hIsmMetaData->azimuth; - } - - if ( hIsmMetaData->azimuth < -90.0f ) - { - hIsmMetaData->azimuth = -180.0f - hIsmMetaData->azimuth; - } - - idx_angle1_abs = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, hSCE[0]->hCoreCoder[0]->ini_frame, idx_angle1_abs, 0, &flag_abs_azimuth[ch], NULL ); - } - else - { - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_SBA_MODE_DISC ) - { - idx_angle1_abs = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - idx_angle2_abs = ism_quant_meta( hIsmMetaData->elevation, &valQ, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); - } - else /* ISM_MODE_PARAM */ - { - idx_angle1_abs = hParamIsm->azi_index[ch]; - idx_angle2_abs = hParamIsm->ele_index[ch]; - } - encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_azimuth[ch], &flag_abs_elevation[ch] ); - - /*----------------------------------------------------------------* - * Quantize and encode radius, yaw, and pitch - *----------------------------------------------------------------*/ - if ( ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_SBA_MODE_DISC ) && ism_extended_metadata_flag ) - { - idx_angle1_abs = ism_quant_meta( hIsmMetaData->yaw, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - idx_angle2_abs = ism_quant_meta( hIsmMetaData->pitch, &valQ, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); - idx_radius_abs = usquant( hIsmMetaData->radius, &valQ, ISM_RADIUS_MIN, ISM_RADIUS_DELTA, 1 << ISM_RADIUS_NBITS ); - - encode_angle_indices( hBstr, &( hIsmMetaData->orientation_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_yaw[ch], &flag_abs_pitch[ch] ); - encode_radius( hBstr, &hIsmMetaData->last_radius_idx, &hIsmMetaData->radius_diff_cnt, hIsmMetaData->last_ism_metadata_flag, idx_radius_abs, &flag_abs_radius[ch] ); - } - } - - /* save number of metadata bits written */ - if ( ism_mode == ISM_MODE_DISC || ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_SBA_MODE_DISC ) - { - nb_bits_metadata[ch] = hBstr->nb_bits_tot - nb_bits_start; - } - - /* Updates */ - hIsmMeta[ch]->last_true_azimuth = hIsmMeta[ch]->azimuth; - hIsmMeta[ch]->last_true_elevation = hIsmMeta[ch]->elevation; - hIsmMeta[ch]->last_true_radius = hIsmMeta[ch]->radius; - } - } - - /*----------------------------------------------------------------* - * inter-object logic minimizing the use of several absolutely coded - * indexes in the same frame - *----------------------------------------------------------------*/ - - i = 0; - while ( i == 0 || i < nchan_ism / INTER_OBJECT_PARAM_CHECK ) - { - int16_t num, abs_num, abs_first, abs_next, pos_zero; - int16_t abs_matrice[INTER_OBJECT_PARAM_CHECK * ISM_NUM_PARAM]; - - num = min( INTER_OBJECT_PARAM_CHECK, nchan_ism - i * INTER_OBJECT_PARAM_CHECK ); - i++; - - set_s( abs_matrice, 0, INTER_OBJECT_PARAM_CHECK * ISM_NUM_PARAM ); - - for ( ch = 0; ch < num; ch++ ) - { - if ( flag_abs_azimuth[ch] == 1 ) - { - abs_matrice[ch * ISM_NUM_PARAM] = 1; - } - - if ( flag_abs_elevation[ch] == 1 ) - { - abs_matrice[ch * ISM_NUM_PARAM + 1] = 1; - } - } - abs_num = sum_s( abs_matrice, INTER_OBJECT_PARAM_CHECK * ISM_NUM_PARAM ); - - abs_first = 0; - while ( abs_num > 1 ) - { - /* find first "1" entry */ - while ( abs_matrice[abs_first] == 0 ) - { - abs_first++; - } - - /* find next "1" entry */ - abs_next = abs_first + 1; - while ( abs_matrice[abs_next] == 0 ) - { - abs_next++; - } - - /* find "0" position */ - pos_zero = 0; - while ( abs_matrice[pos_zero] == 1 ) - { - pos_zero++; - } - - ch = abs_next / ISM_NUM_PARAM; - - if ( abs_next % ISM_NUM_PARAM == 0 ) - { - hIsmMeta[ch]->position_angle.angle1_diff_cnt = abs_num - 1; - } - - if ( abs_next % ISM_NUM_PARAM == 1 ) - { - hIsmMeta[ch]->position_angle.angle2_diff_cnt = abs_num - 1; - /*hIsmMeta[ch]->elevation_diff_cnt = min( hIsmMeta[ch]->elevation_diff_cnt, ISM_FEC_MAX );*/ - } - - abs_first++; - abs_num--; - } - } - - if ( ism_mode == ISM_SBA_MODE_DISC ) - { - int16_t md_diff_flag[MAX_NUM_OBJECTS]; - - set_s( md_diff_flag, 1, nchan_ism ); - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; - - if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) - { - hIsmMeta[ch]->ism_md_fec_cnt_enc++; - } - else - { - hIsmMeta[ch]->ism_md_fec_cnt_enc = 0; - } - hIsmMeta[ch]->ism_md_inc_diff_cnt++; - hIsmMeta[ch]->ism_md_inc_diff_cnt = min( hIsmMeta[ch]->ism_md_inc_diff_cnt, ISM_MD_INC_DIFF_CNT_MAX ); - } - - update_last_metadata( nchan_ism, hIsmMeta, md_diff_flag ); - - pop_wmops(); - return error; - } - if ( ism_mode == ISM_MODE_PARAM ) - { - /* Keep the metdata transmission as is during active parts */ - /* But send the flag with 1 bit */ - push_next_indice( hBstr, hParamIsm->flag_noisy_speech, 1 ); - - /* Loop over multiwave to write the object indices into bitstream */ - for ( ch = 0; ch < MAX_PARAM_ISM_WAVE; ch++ ) - { - for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) - { - for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) - { - push_next_indice( hBstr, hParamIsm->obj_indices[nbands][nblocks][ch], PARAM_ISM_OBJ_IND_NBITS ); - } - } - } - - /* Loop over bands to write the power ratio's indices into bitstream */ - for ( nbands = 0; nbands < hParamIsm->nbands; nbands++ ) - { - for ( nblocks = 0; nblocks < hParamIsm->nblocks[nbands]; nblocks++ ) - { - push_next_indice( hBstr, hParamIsm->power_ratios_idx[nbands][nblocks], PARAM_ISM_POW_RATIO_NBITS ); - } - } - - /* total metadata bits */ - total_bits_metadata = hBstr->nb_bits_tot - nb_bits_start; - - /* bits per ISM*/ - bits_metadata_ism = (int16_t) ( total_bits_metadata / nchan_transport ); - - /* Divide the metadata bits into n_Isms*/ - nb_bits_objcod_written = 0; - for ( ch = 0; ch < nchan_transport; ch++ ) - { - if ( ch == nchan_transport - 1 ) - { - nb_bits_metadata[ch] = total_bits_metadata - nb_bits_objcod_written; - } - else - { - nb_bits_metadata[ch] = bits_metadata_ism; - nb_bits_objcod_written += bits_metadata_ism; - } - } - } - } - else if ( ism_mode == ISM_SBA_MODE_DISC ) - { - pop_wmops(); - return error; - } - - /*----------------------------------------------------------------* - * Take into account the combined format bit-budget distribution - *----------------------------------------------------------------*/ - - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - int16_t bits_ism, bits_element[MAX_NUM_OBJECTS]; - int16_t brate_limit_flag; - int32_t ism_total_brate_ref; - ism_total_brate_ref = *ism_total_brate; - brate_limit_flag = calculate_brate_limit_flag( ism_imp, nchan_ism ); - - bits_ism = (int16_t) ( *ism_total_brate / FRAMES_PER_SEC ); - set_s( bits_element, bits_ism / nchan_ism, nchan_ism ); - bits_element[nchan_ism - 1] += bits_ism % nchan_ism; - bitbudget_to_brate( bits_element, element_brate, nchan_ism ); - - *ism_total_brate = 0; - for ( ch = 0; ch < nchan_ism; ch++ ) - { - *ism_total_brate = L_add( *ism_total_brate, ivas_interformat_brate( ism_mode, nchan_ism, hSCE[ch]->element_brate, ism_imp[ch], brate_limit_flag ) ); - move32(); - - if ( ism_imp[ch] > 1 && flag_omasa_ener_brate == 1 && brate_limit_flag >= 0 ) - { - *ism_total_brate -= ADJUST_ISM_BRATE_NEG; - } - - if ( brate_limit_flag == -1 && ism_imp[ch] >= 1 && nchan_ism >= 3 && ( ism_total_brate_ref - *ism_total_brate > IVAS_48k ) ) - { - *ism_total_brate += ADJUST_ISM_BRATE_POS; - } - } - ism_metadata_flag_global = 1; - - if ( ism_mode == ISM_MASA_MODE_DISC ) - { - brate_limit_flag = 0; - for ( int16_t n = 0; n < nchan_ism; n++ ) - { - brate_limit_flag += ism_imp[n]; - } - - if ( brate_limit_flag >= nchan_ism * ISM_HIGH_IMP - 2 ) - { - *omasa_stereo_sw_cnt = OMASA_STEREO_SW_CNT_MAX; - } - } - } - - /*----------------------------------------------------------------* - * Configuration and decision about bitrates per channel - *----------------------------------------------------------------*/ - - if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( ( error = ivas_ism_config( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_ism_config( *ism_total_brate, nchan_transport, nchan_ism, hIsmMeta, ism_extended_metadata_flag, null_metadata_flag, ism_imp, element_brate, total_brate, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - hIsmMeta[ch]->last_ism_metadata_flag = hIsmMeta[ch]->ism_metadata_flag; - - if ( hIsmMeta[ch]->ism_metadata_flag == 0 ) - { - hIsmMeta[ch]->ism_md_fec_cnt_enc++; - } - else - { - hIsmMeta[ch]->ism_md_fec_cnt_enc = 0; - } - hIsmMeta[ch]->ism_md_inc_diff_cnt++; - hIsmMeta[ch]->ism_md_inc_diff_cnt = min( hIsmMeta[ch]->ism_md_inc_diff_cnt, ISM_MD_INC_DIFF_CNT_MAX ); - } - - for ( ch = 0; ch < nchan_transport; ch++ ) - { - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 0; - if ( ism_mode == ISM_MODE_DISC ) - { - if ( ism_imp[ch] == ISM_NO_META && ( ( total_brate[ch] < ACELP_8k00 && element_brate[ch] < SCE_CORE_16k_LOW_LIMIT ) || - ( total_brate[ch] <= ACELP_16k_LOW_LIMIT && element_brate[ch] >= SCE_CORE_16k_LOW_LIMIT ) ) ) - { - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 1; - } - - hSCE[ch]->element_brate = element_brate[ch]; - } - else if ( ism_mode == ISM_MASA_MODE_DISC || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( ism_imp[ch] == ISM_INACTIVE_IMP ) - { - hSCE[ch]->hCoreCoder[0]->low_rate_mode = 1; - } - } - - hSCE[ch]->hCoreCoder[0]->total_brate = total_brate[ch]; - - /* write metadata only in active frames */ - if ( hSCE[0]->hCoreCoder[0]->core_brate > SID_2k40 ) - { - reset_indices_enc( hSCE[ch]->hMetaData, hSCE[ch]->hMetaData->nb_ind_tot ); - } - } - - pop_wmops(); - - return error; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_ism_metadata_enc_create() - * - * Create, allocate, initialize and configure IVAS encoder ISM metadata handles - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -ivas_error ivas_ism_metadata_enc_create( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const Word16 n_ISms, /* i : number of objects */ - Word32 element_brate_tmp[] /* o : element bitrate per object */ -) -{ - Word16 ch, nchan_transport; - ivas_error error; - - nchan_transport = st_ivas->nchan_transport; - move16(); - IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) - { - nchan_transport = MAX_PARAM_ISM_WAVE; - move16(); - ivas_set_omasa_TC_fx( st_ivas->ism_mode, n_ISms, &st_ivas->nSCE, &st_ivas->nCPE ); - } - ELSE IF( EQ_32( st_ivas->hEncoderConfig->ivas_format, SBA_ISM_FORMAT ) ) - { - nchan_transport = n_ISms; - move16(); - } - ELSE - { - IF( EQ_32( st_ivas->ism_mode, ISM_MODE_NONE ) ) - { - nchan_transport = st_ivas->nchan_transport; - move16(); - - IF( EQ_16( nchan_transport, 1 ) ) - { - st_ivas->nSCE = 1; - move16(); - st_ivas->nCPE = 0; - move16(); - } - ELSE - { - st_ivas->nSCE = 0; - move16(); - st_ivas->nCPE = 1; - move16(); - } - } - ELSE IF( EQ_32( st_ivas->ism_mode, ISM_MODE_PARAM ) ) - { - nchan_transport = 2; - move16(); - } - ELSE - { - nchan_transport = n_ISms; - move16(); - } - - st_ivas->nchan_transport = nchan_transport; - st_ivas->nSCE = nchan_transport; - st_ivas->nCPE = 0; - move16(); - move16(); - move16(); - } - - /* allocate ISM metadata handles */ - FOR( ch = 0; ch < n_ISms; ch++ ) - { - IF( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM MetaData\n" ) ); - } - st_ivas->hIsmMetaData[ch]->position_angle.last_angle1_idx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; - move16(); - st_ivas->hIsmMetaData[ch]->position_angle.last_angle2_idx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->position_angle.angle2_diff_cnt = ISM_FEC_MAX - 1; - move16(); - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle1_idx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->orientation_angle.angle1_diff_cnt = ISM_FEC_MAX - 2; - move16(); - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle2_idx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->orientation_angle.angle2_diff_cnt = ISM_FEC_MAX - 2; - move16(); - st_ivas->hIsmMetaData[ch]->last_radius_idx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->radius_diff_cnt = ISM_FEC_MAX - 2; - move16(); - st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; - move16(); - - st_ivas->hIsmMetaData[ch]->ism_imp = -1; - move16(); - st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; - move16(); - st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; - move16(); - - st_ivas->hIsmMetaData[ch]->q_azimuth_old_fx = 0; - move16(); - st_ivas->hIsmMetaData[ch]->q_elevation_old_fx = 0; - move16(); - - ivas_ism_reset_metadata_enc( st_ivas->hIsmMetaData[ch] ); - - st_ivas->hIsmMetaData[ch]->last_azimuth_fx = 0; - move32(); - st_ivas->hIsmMetaData[ch]->last_elevation_fx = 0; - move32(); - - st_ivas->hIsmMetaData[ch]->last_true_azimuth_fx = 0; - move32(); - st_ivas->hIsmMetaData[ch]->last_true_elevation_fx = 0; - move32(); - - st_ivas->hIsmMetaData[ch]->ism_md_fec_cnt_enc = 0; - move16(); - st_ivas->hIsmMetaData[ch]->ism_md_inc_diff_cnt = ISM_MD_INC_DIFF_CNT_MAX; - move16(); - st_ivas->hIsmMetaData[ch]->last_true_radius_fx = ONE_IN_Q9; - move16(); - } - - IF( EQ_16( st_ivas->hEncoderConfig->ivas_format, MASA_ISM_FORMAT ) ) - { - test(); - IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - IF( NE_32( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, 1, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - IF( NE_32( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, n_ISms, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ), IVAS_ERR_OK ) ) - { - return error; + return error; } } } @@ -1685,137 +1022,12 @@ ivas_error ivas_ism_metadata_enc_create( return IVAS_ERR_OK; } -#else -ivas_error ivas_ism_metadata_enc_create( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t n_ISms, /* i : number of objects */ - int32_t element_brate_tmp[] /* o : element bitrate per object */ -) -{ - int16_t ch, nchan_transport; - ivas_error error; - - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - nchan_transport = MAX_PARAM_ISM_WAVE; -#ifndef IVAS_FLOAT_FIXED - ivas_set_omasa_TC( st_ivas->ism_mode, n_ISms, &st_ivas->nSCE, &st_ivas->nCPE ); -#else - ivas_set_omasa_TC_fx( st_ivas->ism_mode, n_ISms, &st_ivas->nSCE, &st_ivas->nCPE ); -#endif - } - else if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) - { - nchan_transport = n_ISms; - } - else - { - if ( st_ivas->ism_mode == ISM_MODE_NONE ) - { - nchan_transport = st_ivas->nchan_transport; - - if ( nchan_transport == 1 ) - { - st_ivas->nSCE = 1; - st_ivas->nCPE = 0; - } - else - { - st_ivas->nSCE = 0; - st_ivas->nCPE = 1; - } - } - else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) - { - nchan_transport = 2; - } - else - { - nchan_transport = n_ISms; - } - - st_ivas->nchan_transport = nchan_transport; - st_ivas->nSCE = nchan_transport; - st_ivas->nCPE = 0; - } - - /* allocate ISM metadata handles */ - for ( ch = 0; ch < n_ISms; ch++ ) - { - if ( ( st_ivas->hIsmMetaData[ch] = (ISM_METADATA_HANDLE) malloc( sizeof( ISM_METADATA_FRAME ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM MetaData\n" ) ); - } - st_ivas->hIsmMetaData[ch]->position_angle.last_angle1_idx = 0; - st_ivas->hIsmMetaData[ch]->position_angle.angle1_diff_cnt = ISM_FEC_MAX; - st_ivas->hIsmMetaData[ch]->position_angle.last_angle2_idx = 0; - st_ivas->hIsmMetaData[ch]->position_angle.angle2_diff_cnt = ISM_FEC_MAX - 1; - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle1_idx = 0; - st_ivas->hIsmMetaData[ch]->orientation_angle.angle1_diff_cnt = ISM_FEC_MAX - 2; - st_ivas->hIsmMetaData[ch]->orientation_angle.last_angle2_idx = 0; - st_ivas->hIsmMetaData[ch]->orientation_angle.angle2_diff_cnt = ISM_FEC_MAX - 2; - st_ivas->hIsmMetaData[ch]->last_radius_idx = 0; - st_ivas->hIsmMetaData[ch]->radius_diff_cnt = ISM_FEC_MAX - 2; - st_ivas->hIsmMetaData[ch]->last_ism_metadata_flag = 0; - - st_ivas->hIsmMetaData[ch]->ism_imp = -1; - st_ivas->hIsmMetaData[ch]->ism_md_null_flag = 0; - st_ivas->hIsmMetaData[ch]->ism_md_lowrate_flag = 0; - st_ivas->hIsmMetaData[ch]->q_azimuth_old = 0.0f; - st_ivas->hIsmMetaData[ch]->q_elevation_old = 0.0f; - -#ifdef IVAS_FLOAT_FIXED - ivas_ism_reset_metadata_enc( st_ivas->hIsmMetaData[ch] ); -#else - ivas_ism_reset_metadata( st_ivas->hIsmMetaData[ch] ); -#endif - - st_ivas->hIsmMetaData[ch]->last_azimuth = 0.0f; - st_ivas->hIsmMetaData[ch]->last_elevation = 0.0f; - - st_ivas->hIsmMetaData[ch]->last_true_azimuth = 0.0f; - st_ivas->hIsmMetaData[ch]->last_true_elevation = 0.0f; - st_ivas->hIsmMetaData[ch]->ism_md_fec_cnt_enc = 0; - st_ivas->hIsmMetaData[ch]->ism_md_inc_diff_cnt = ISM_MD_INC_DIFF_CNT_MAX; - st_ivas->hIsmMetaData[ch]->last_true_radius = 1.0f; - } - - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, 1, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, n_ISms, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, nchan_transport, n_ISms, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * encode_radius() * * Radius index encoding *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void encode_radius( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ Word16 *last_radius_idx, /* i/o: last radius index */ @@ -1913,114 +1125,17 @@ static void encode_radius( { push_indice( hBstr, IND_ISM_RADIUS, idx_radius, ISM_RADIUS_NBITS ); } - ELSE - { - push_indice( hBstr, IND_ISM_RADIUS, idx_radius, nbits_diff_radius ); - } - - /* Updates */ - *last_radius_idx = idx_radius_abs; - move16(); - - return; -} -#else -static void encode_radius( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t *last_radius_idx, /* i/o: last radius index */ - int16_t *radius_diff_cnt, /* i/o: radius diff coding counter */ - const int16_t last_ism_metadata_flag, /* last frame ism_metadata_flag */ - const int16_t idx_radius_abs, /* i : Azimuth index */ - int16_t *flag_abs_radius /* o : Radius encoding mode */ -) -{ - int16_t idx_radius, nbits_diff_radius, diff; - - idx_radius = idx_radius_abs; - nbits_diff_radius = 0; - *flag_abs_radius = 0; /* differential coding by default */ - - if ( *radius_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */ - || last_ism_metadata_flag == 0 /* If last frame had no metadata coded, do not use differential coding */ - ) - { - *flag_abs_radius = 1; - } - - diff = idx_radius_abs - *last_radius_idx; - - /* try differential coding */ - if ( *flag_abs_radius == 0 ) - { - if ( diff == 0 ) - { - idx_radius = 0; - nbits_diff_radius = 1; - } - else if ( ABSVAL( diff ) <= ISM_MAX_RADIUS_DIFF_IDX ) - { - idx_radius = 1 << 1; - nbits_diff_radius = 1; - - if ( diff < 0 ) - { - idx_radius += 1; /* negative sign */ - diff *= -1; - } - else - { - idx_radius += 0; /* positive sign */ - } - - idx_radius = idx_radius << diff; - nbits_diff_radius++; - - /* unary coding of "diff */ - idx_radius += ( ( 1 << diff ) - 1 ); - nbits_diff_radius += diff; - - if ( nbits_diff_radius < ISM_RADIUS_NBITS ) - { - /* add stop bit */ - idx_radius = idx_radius << 1; - nbits_diff_radius++; - } - } - else - { - *flag_abs_radius = 1; - } - } - - /* update counter */ - if ( *flag_abs_radius == 0 ) - { - ( *radius_diff_cnt )++; - *radius_diff_cnt = min( *radius_diff_cnt, ISM_FEC_MAX ); - } - else - { - *radius_diff_cnt = 0; - } - - /* Write radius */ - push_indice( hBstr, IND_ISM_RADIUS_DIFF_FLAG, *flag_abs_radius, 1 ); - - if ( *flag_abs_radius ) - { - push_indice( hBstr, IND_ISM_RADIUS, idx_radius, ISM_RADIUS_NBITS ); - } - else + ELSE { push_indice( hBstr, IND_ISM_RADIUS, idx_radius, nbits_diff_radius ); } /* Updates */ *last_radius_idx = idx_radius_abs; + move16(); return; } -#endif /*----------------------------------------------------------------* * encode_angle_indices() @@ -2028,7 +1143,6 @@ static void encode_radius( * Encoding of an angle *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void encode_angle_indices( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ @@ -2297,246 +1411,6 @@ static void encode_angle_indices( return; } -#else -static void encode_angle_indices( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - ISM_METADATA_ANGLE_HANDLE angle, /* i/o: angle handle */ - const int16_t last_ism_metadata_flag, /* i : last frame ism_metadata_flag */ - const int16_t ini_frame, /* i : initialization frames counter */ - const int16_t idx_angle1_abs, /* i : Azimuth index */ - const int16_t idx_angle2_abs, /* i : Elevation index */ - int16_t *flag_abs_angle1, /* o : Azimuth/yaw encoding mode */ - int16_t *flag_abs_angle2 /* o : Elevation/pitch encoding mode */ -) -{ - int16_t idx_angle1, nbits_diff_angle1, diff; - int16_t idx_angle2, nbits_diff_angle2; - - /*----------------------------------------------------------------* - * Azimuth/yaw index encoding - *----------------------------------------------------------------*/ - - idx_angle1 = idx_angle1_abs; - - nbits_diff_angle1 = 0; - - *flag_abs_angle1 = 0; /* differential coding by default */ - if ( angle->angle1_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */ - || last_ism_metadata_flag == 0 /* If last frame had no metadata coded, do not use differential coding */ - ) - { - *flag_abs_angle1 = 1; - } - - /* try differential coding */ - if ( *flag_abs_angle1 == 0 ) - { - diff = idx_angle1_abs - angle->last_angle1_idx; - - /* azimuth is on a circle - check for diff coding for -180° -> 180° and vice versa changes */ - if ( abs( diff ) > ( ( 1 << ISM_AZIMUTH_NBITS ) - 1 ) - ISM_MAX_AZIMUTH_DIFF_IDX ) - { - if ( diff > 0 ) - { - diff -= ( 1 << ISM_AZIMUTH_NBITS ) - 1; - } - else - { - diff += ( 1 << ISM_AZIMUTH_NBITS ) - 1; - } - } - - if ( diff == 0 ) - { - idx_angle1 = 0; - nbits_diff_angle1 = 1; - } - else if ( ABSVAL( diff ) < ISM_MAX_AZIMUTH_DIFF_IDX ) /* when diff bits >= abs bits, prefer abs */ - { - idx_angle1 = 1 << 1; - nbits_diff_angle1 = 1; - - if ( diff < 0 ) - { - idx_angle1 += 1; /* negative sign */ - diff *= -1; - } - else - { - idx_angle1 += 0; /* positive sign */ - } - - idx_angle1 = idx_angle1 << diff; - nbits_diff_angle1++; - - /* unary coding of "diff */ - idx_angle1 += ( ( 1 << diff ) - 1 ); - nbits_diff_angle1 += diff; - - if ( nbits_diff_angle1 < ISM_AZIMUTH_NBITS - 1 ) - { - /* add stop bit - only for codewords shorter than ISM_AZIMUTH_NBITS */ - idx_angle1 = idx_angle1 << 1; - nbits_diff_angle1++; - } - } - else - { - *flag_abs_angle1 = 1; - } - } - - /* update counter */ - if ( *flag_abs_angle1 == 0 ) - { - angle->angle1_diff_cnt++; - angle->angle1_diff_cnt = min( angle->angle1_diff_cnt, ISM_FEC_MAX ); - } - else - { - angle->angle1_diff_cnt = 0; - } - - /* Write azimuth/yaw */ - push_indice( hBstr, IND_ISM_AZIMUTH_DIFF_FLAG, *flag_abs_angle1, 1 ); - - if ( *flag_abs_angle1 ) - { - push_indice( hBstr, IND_ISM_AZIMUTH, idx_angle1, ISM_AZIMUTH_NBITS ); - } - else - { - push_indice( hBstr, IND_ISM_AZIMUTH, idx_angle1, nbits_diff_angle1 ); - } - - /*----------------------------------------------------------------* - * Elevation/pitch index encoding - *----------------------------------------------------------------*/ - - if ( flag_abs_angle2 ) - { - idx_angle2 = idx_angle2_abs; - nbits_diff_angle2 = 0; - *flag_abs_angle2 = 0; /* differential coding by default */ - if ( angle->angle2_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */ - || last_ism_metadata_flag == 0 /* If last frame had no metadata coded, do not use differential coding */ - ) - { - *flag_abs_angle2 = 1; - } - - /* note: elevation/pitch is coded starting from the second frame only (it is meaningless in the init_frame) */ - if ( ini_frame == 0 ) - { - *flag_abs_angle2 = 1; - angle->last_angle2_idx = idx_angle2_abs; - } - - diff = idx_angle2_abs - angle->last_angle2_idx; - - /* avoid absolute coding of elevation/pitch if absolute coding was already used for azimuth/yaw */ - if ( *flag_abs_angle1 == 1 ) - { - int16_t diff_orig = diff; - - *flag_abs_angle2 = 0; - - - if ( diff >= 0 ) - { - diff = min( diff, ISM_MAX_ELEVATION_DIFF_IDX ); - } - else - { - diff = -1 * min( -diff, ISM_MAX_ELEVATION_DIFF_IDX ); - } - - if ( last_ism_metadata_flag == 0 || abs( diff_orig - diff ) > ISM_MAX_ELEVATION_DIFF_IDX ) - { - angle->angle2_diff_cnt = ISM_FEC_MAX - 1; - } - } - - /* try differential coding */ - if ( *flag_abs_angle2 == 0 ) - { - if ( diff == 0 ) - { - idx_angle2 = 0; - nbits_diff_angle2 = 1; - } - else if ( ABSVAL( diff ) <= ISM_MAX_ELEVATION_DIFF_IDX ) - { - idx_angle2 = 1 << 1; - nbits_diff_angle2 = 1; - - if ( diff < 0 ) - { - idx_angle2 += 1; /* negative sign */ - diff *= -1; - } - else - { - idx_angle2 += 0; /* positive sign */ - } - - idx_angle2 = idx_angle2 << diff; - nbits_diff_angle2++; - - /* unary coding of "diff */ - idx_angle2 += ( ( 1 << diff ) - 1 ); - nbits_diff_angle2 += diff; - - if ( nbits_diff_angle2 < ISM_ELEVATION_NBITS ) - { - /* add stop bit */ - idx_angle2 = idx_angle2 << 1; - nbits_diff_angle2++; - } - } - else - { - *flag_abs_angle2 = 1; - } - } - - /* update counter */ - if ( *flag_abs_angle2 == 0 ) - { - angle->angle2_diff_cnt++; - angle->angle2_diff_cnt = min( angle->angle2_diff_cnt, ISM_FEC_MAX ); - } - else - { - angle->angle2_diff_cnt = 0; - } - - /* Write elevation */ - if ( *flag_abs_angle1 == 0 ) /* do not write "flag_abs_elevation/pitch" if "flag_abs_azimuth/yaw == 1" */ - { - push_indice( hBstr, IND_ISM_ELEVATION_DIFF_FLAG, *flag_abs_angle2, 1 ); - } - - if ( *flag_abs_angle2 ) - { - push_indice( hBstr, IND_ISM_ELEVATION, idx_angle2, ISM_ELEVATION_NBITS ); - } - else - { - push_indice( hBstr, IND_ISM_ELEVATION, idx_angle2, nbits_diff_angle2 ); - } - } - - /*----------------------------------------------------------------* - * Updates - *----------------------------------------------------------------*/ - - angle->last_angle1_idx = idx_angle1_abs; - angle->last_angle2_idx = idx_angle2_abs; - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_ism_metadata_sid_enc() @@ -2544,7 +1418,6 @@ static void encode_angle_indices( * Quantize and encode ISM metadata in SID frame *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_ism_metadata_sid_enc( ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ const Word16 flag_noisy_speech, /* i : noisy speech flag */ @@ -2696,144 +1569,3 @@ void ivas_ism_metadata_sid_enc( return; } -#else -void ivas_ism_metadata_sid_enc( - ISM_DTX_HANDLE hISMDTX, /* i/o: ISM DTX handle */ - const int16_t flag_noisy_speech, /* i : noisy speech flag */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t nchan_transport, /* i : number of transport channels */ - const ISM_MODE ism_mode, /* i : ISM mode */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int16_t sid_flag, /* i : indication of SID frame */ - const int16_t md_diff_flag[], /* i : metadata differental flag */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t nb_bits_metadata[] /* o : number of metadata bits */ -) -{ - int16_t i, ch, nBits, nBits_start, nBits_unused; - float q_step, q_step_border; - int16_t idx, idx_azimuth, idx_elevation; - int16_t nBits_azimuth, nBits_elevation, nBits_coh, nBits_sce_id; - float valQ; - ISM_METADATA_HANDLE hIsmMetaData; - - if ( sid_flag ) - { - nBits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC; - nBits -= SID_FORMAT_NBITS; - nBits_start = hBstr->nb_bits_tot; - - /*----------------------------------------------------------------* - * Write ISm common signaling - *----------------------------------------------------------------*/ - - /* write number of objects - unary coding */ - for ( ch = 1; ch < nchan_ism; ch++ ) - { - push_indice( hBstr, IND_ISM_NUM_OBJECTS, 1, 1 ); - } - push_indice( hBstr, IND_ISM_NUM_OBJECTS, 0, 1 ); - - /* write SID metadata flag (one per object) */ - for ( ch = 0; ch < nchan_ism; ch++ ) - { - push_indice( hBstr, IND_ISM_METADATA_FLAG, md_diff_flag[ch], 1 ); - } - - /*----------------------------------------------------------------* - * Set quantization bits based on the number of coded objects - *----------------------------------------------------------------*/ - - ivas_get_ism_sid_quan_bitbudget( nchan_ism, &nBits_azimuth, &nBits_elevation, &q_step, &q_step_border, &nBits_coh, &nBits_sce_id ); - - /*----------------------------------------------------------------* - * Spatial parameters, loop over TCs - 1 - *----------------------------------------------------------------*/ - - /* write ISM mode flag to explicitly signal number of spatial parameters */ - if ( nchan_ism > 2 ) - { - if ( ism_mode == ISM_MODE_DISC ) - { - push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, 0, 1 ); - } - else - { - push_indice( hBstr, IND_ISM_MD_INACTIVE_FLAG, 1, 1 ); - } - - if ( ism_mode == ISM_MODE_PARAM ) - { - /* write noisy speech flag */ - push_indice( hBstr, IND_ISM_NOISY_SPEECH_FLAG, flag_noisy_speech, 1 ); - nBits_sce_id = 1; - } - } - - if ( nchan_transport > 1 ) - { - /* write sce id */ - push_indice( hBstr, IND_ISM_SCE_ID_DTX, hISMDTX->sce_id_dtx, nBits_sce_id ); - - /* quantize and write coherence */ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - if ( ch == hISMDTX->sce_id_dtx ) - { - continue; - } - - idx = (int16_t) ( hISMDTX->coh[ch] * ( ( 1 << nBits_coh ) - 1 ) + 0.5f ); - assert( ( idx >= 0 ) && ( idx <= ( ( 1 << nBits_coh ) - 1 ) ) ); - push_indice( hBstr, IND_ISM_DTX_COH_SCA, idx, nBits_coh ); - } - } - - /*----------------------------------------------------------------* - * Metadata quantization and coding, loop over all objects - *----------------------------------------------------------------*/ - - for ( ch = 0; ch < nchan_ism; ch++ ) - { - if ( md_diff_flag[ch] == 1 ) - { - hIsmMetaData = hIsmMeta[ch]; - - idx_azimuth = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, q_step, q_step_border, 1 << nBits_azimuth ); - idx_elevation = ism_quant_meta( hIsmMetaData->elevation, &valQ, ism_elevation_borders, q_step, q_step_border, 1 << nBits_elevation ); - - push_indice( hBstr, IND_ISM_AZIMUTH, idx_azimuth, nBits_azimuth ); - push_indice( hBstr, IND_ISM_ELEVATION, idx_elevation, nBits_elevation ); - - /* update last indexes to correspond to active frames coding */ - if ( nBits_azimuth > ISM_AZIMUTH_NBITS ) - { - hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth >> ( nBits_azimuth - ISM_AZIMUTH_NBITS ); - hIsmMetaData->position_angle.last_angle2_idx = idx_elevation >> ( nBits_elevation - ISM_ELEVATION_NBITS ); - } - else - { - hIsmMetaData->position_angle.last_angle1_idx = idx_azimuth << ( ISM_AZIMUTH_NBITS - nBits_azimuth ); - hIsmMetaData->position_angle.last_angle2_idx = idx_elevation << ( ISM_ELEVATION_NBITS - nBits_elevation ); - } - - hIsmMetaData->ism_md_fec_cnt_enc = 0; - hIsmMeta[ch]->ism_md_inc_diff_cnt = ISM_MD_INC_DIFF_CNT_MAX; - } - } - - /* Write unused (padding) bits */ - nBits_unused = nBits - hBstr->nb_bits_tot; - while ( nBits_unused > 0 ) - { - i = min( nBits_unused, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - nBits_unused -= i; - } - - nb_bits_metadata[0] = hBstr->nb_bits_tot - nBits_start; - } - - return; -} -#endif diff --git a/lib_enc/ivas_ism_param_enc.c b/lib_enc/ivas_ism_param_enc.c index 6c3fc8ece..0935aae71 100644 --- a/lib_enc/ivas_ism_param_enc.c +++ b/lib_enc/ivas_ism_param_enc.c @@ -42,15 +42,12 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------- * Local function definitions *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_compute_obj_parameters_fx( const Word16 nchan_ism, /* i : number of ISM channels */ Word64 reference_power_obj[MAX_NUM_OBJECTS][PARAM_ISM_MDFT_NO_SLOTS][DIRAC_NO_FB_BANDS_MAX], /* i : Reference power Qx */ @@ -203,132 +200,7 @@ static void ivas_param_ism_compute_obj_parameters_fx( return; } -#else -static void ivas_param_ism_compute_obj_parameters( - const int16_t nchan_ism, /* i : number of ISM channels */ - float reference_power_obj[MAX_NUM_OBJECTS][PARAM_ISM_MDFT_NO_SLOTS][DIRAC_NO_FB_BANDS_MAX], /* i : Reference power */ - PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: Param ISM Enc Handle */ -) -{ - int16_t i, b, m, br, mr; - int16_t brange_start, brange_end, mrange_start, mrange_end, time_merge_fac; - float power_ratios_m[MAX_PARAM_ISM_NBANDS][MAX_PARAM_ISM_NBLOCKS]; - float ref_power_local_frame[MAX_NUM_OBJECTS]; - float tmp_ratio; - - set_f( ref_power_local_frame, 0, MAX_NUM_OBJECTS ); - - assert( nchan_ism == 3 || nchan_ism == 4 ); - - for ( b = 0; b < hParamIsm->nbands; b++ ) - { - /* current frequency band borders */ - brange_start = hParamIsm->band_grouping[b]; - brange_end = hParamIsm->band_grouping[b + 1]; - - /* time slots to aggregate for current block */ - time_merge_fac = PARAM_ISM_MDFT_NO_SLOTS / hParamIsm->nblocks[b]; - - for ( m = 0; m < hParamIsm->nblocks[b]; m++ ) - { - int16_t index_1, index_2; - float ref_power_local[MAX_NUM_OBJECTS]; - - /* initialize to 0 so unused entries are not considered later */ - set_f( ref_power_local, 0, MAX_NUM_OBJECTS ); - - /* current block borders */ - mrange_start = m * time_merge_fac; - mrange_end = ( m + 1 ) * time_merge_fac; - - /* for each object, sum up reference power within current T/F tile */ - - for ( i = 0; i < nchan_ism; i++ ) - { - for ( mr = mrange_start; mr < mrange_end; mr++ ) - { - for ( br = brange_start; br < brange_end; br++ ) - { - ref_power_local[i] += reference_power_obj[i][mr][br]; - } - } - /* Sum up T/F tiles per object */ - ref_power_local_frame[i] += ref_power_local[i]; - } - - /* find two dominant objects and derive object indices for current T/F tile */ - if ( ref_power_local[0] >= ref_power_local[1] ) - { - index_1 = 0; - index_2 = 1; - } - else - { - index_1 = 1; - index_2 = 0; - } - for ( i = MAX_PARAM_ISM_WAVE; i < nchan_ism; i++ ) - { - if ( ref_power_local[i] > ref_power_local[index_1] ) - { - index_2 = index_1; - index_1 = i; - } - else if ( ref_power_local[i] > ref_power_local[index_2] ) - { - index_2 = i; - } - } - - /* Copy the quantized indices */ - hParamIsm->obj_indices[b][m][0] = index_1; - hParamIsm->obj_indices[b][m][1] = index_2; - - /* Compute power ratios */ - if ( ( ref_power_local[index_1] + ref_power_local[index_2] ) == 0.f ) - { - power_ratios_m[b][m] = 0.5; - } - else - { - power_ratios_m[b][m] = ref_power_local[index_1] / ( ref_power_local[index_1] + ref_power_local[index_2] ); - } - assert( ( power_ratios_m[b][m] >= 0.5 ) && ( power_ratios_m[b][m] <= 1 ) ); - - /* Quantize power ratios */ - /* Power ratio range [0.5,1] is mapped to [0,1] first, rounding via truncation float->integer */ - hParamIsm->power_ratios_idx[b][m] = (int16_t) ( ( ( power_ratios_m[b][m] - 0.5f ) * 2 ) * ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) + 0.5f ); - assert( ( hParamIsm->power_ratios_idx[b][m] >= 0 ) && ( hParamIsm->power_ratios_idx[b][m] <= ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) ) ); - } - } - - /* Check if objects have roughly equal power by comparing reference power of first object against all others*/ - hParamIsm->flag_equal_energy = 1; - for ( i = 1; i < nchan_ism; i++ ) - { - if ( ref_power_local_frame[i] != 0.0f ) - { - tmp_ratio = ref_power_local_frame[0] / ref_power_local_frame[i]; - - if ( ( tmp_ratio > 0.975f ) && ( tmp_ratio < 1.025f ) ) - { - hParamIsm->flag_equal_energy &= 1; - } - else - { - hParamIsm->flag_equal_energy &= 0; - break; - } - } - } - - return; -} - -#endif - -#ifdef IVAS_FLOAT_FIXED static void ivas_param_ism_enc_quantize_DOA_fx( const Word16 nchan_ism, /* i : number of ISM channels */ ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS], /* i : ISM metadata */ @@ -360,37 +232,6 @@ static void ivas_param_ism_enc_quantize_DOA_fx( return; } -#else -static void ivas_param_ism_enc_quantize_DOA( - const int16_t nchan_ism, /* i : number of ISM channels */ - ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS], /* i : ISM metadata */ - PARAM_ISM_CONFIG_HANDLE hParamIsm /* i/o: Param ISM encoder handle */ -) -{ - int16_t i, azi_idx, ele_idx; - float valQ; - - - /* Loop over objects */ - for ( i = 0; i < nchan_ism; i++ ) - { - /* Quantize the elevation and obtain quantized elevation value and index */ - ele_idx = ism_quant_meta( hIsmMetaData[i]->elevation, &valQ, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS ); - - /* Obtain the index of quantized azimuth values */ - azi_idx = ism_quant_meta( hIsmMetaData[i]->azimuth, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS ); - - /*Replace azimuth with quantized values */ - hIsmMetaData[i]->azimuth = valQ; - - /* Copy the quantized indices */ - hParamIsm->azi_index[i] = azi_idx; - hParamIsm->ele_index[i] = ele_idx; - } - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -398,7 +239,6 @@ static void ivas_param_ism_enc_quantize_DOA( * * Downmix input channels to stereo *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_stereo_dmx_fx( Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ Word32 *data[MAX_NUM_OBJECTS], /* i/o: input signal/stereo dmx Qx */ @@ -590,129 +430,6 @@ void ivas_param_ism_stereo_dmx_fx( return; } -#else - -void ivas_param_ism_stereo_dmx( - Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ - float *data[MAX_NUM_OBJECTS], /* i/o: input signal/stereo dmx */ - const int16_t input_frame /* i : Length of input frame */ -) -{ - int16_t i, j; - float alpha, azi_shift, tmp, tmp_1; - float cardioid_left[MAX_NUM_OBJECTS], cardioid_right[MAX_NUM_OBJECTS]; - float stereo_dmx[2][L_FRAME48k]; - float dmx_gain, ene_dmx, ene_data, grad; - float last_dmx_gain; - float last_cardioid_left; - ISM_METADATA_HANDLE hIsmMetaData; - - push_wmops( "ivas_param_ism_st_dmx" ); - - /*Initialization*/ - alpha = 0.5; - azi_shift = 0; - dmx_gain = 0; - ene_dmx = 0; - ene_data = 0; - last_dmx_gain = st_ivas->hParamIsm->last_dmx_gain; - - /* Set the stereo dmx to zero */ - set_zero( stereo_dmx[0], L_FRAME48k ); - set_zero( stereo_dmx[1], L_FRAME48k ); - - /* Loop over all objects */ - for ( i = 0; i < st_ivas->hEncoderConfig->nchan_ism; i++ ) - { - hIsmMetaData = st_ivas->hIsmMetaData[i]; - last_cardioid_left = st_ivas->hParamIsm->last_cardioid_left[i]; - /*Compute the Cardioids for the corresponding object direction */ - tmp = hIsmMetaData->azimuth * ( EVS_PI / 180 ); - tmp_1 = ( EVS_PI / 2 ) + azi_shift; - cardioid_left[i] = alpha + ( 1 - alpha ) * cosf( tmp - tmp_1 ); - if ( st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame > 0 ) - { - float last_cardioid_right; - last_cardioid_right = 1.0f - last_cardioid_left; - /* Smoothing */ - cardioid_left[i] = 0.75f * cardioid_left[i] + 0.25f * last_cardioid_left; - grad = ( cardioid_left[i] - last_cardioid_left ) * 2.0f / (float) input_frame; /* for the right cardioid, multiply with -1 */ - /* Cardioids sum up to 1 */ - cardioid_right[i] = 1.0f - cardioid_left[i]; /* corresponds to: alpha + ( 1 - alpha ) * cosf( tmp + tmp_1 ); */ - /* Loop over all samples */ - for ( j = 0; j < input_frame / 2; j++ ) - { - tmp = data[i][j]; - stereo_dmx[0][j] += ( ( last_cardioid_left + j * grad ) * tmp ); /* DMX Left */ - stereo_dmx[1][j] += ( ( last_cardioid_right + j * grad * ( -1.0f ) ) * tmp ); /* DMX Right */ - ene_data += ( tmp * tmp ); /* energy of all objects combined */ - } - for ( ; j < input_frame; j++ ) - { - tmp = data[i][j]; - stereo_dmx[0][j] += cardioid_left[i] * tmp; /* DMX Left */ - stereo_dmx[1][j] += cardioid_right[i] * tmp; /* DMX Right */ - ene_data += ( tmp * tmp ); /* energy of all objects combined */ - } - } - else - { - /* Cardioids sum up to 1 */ - cardioid_right[i] = 1.0f - cardioid_left[i]; /* corresponds to: alpha + ( 1 - alpha ) * cosf( tmp + tmp_1 ); */ - /* Loop over all samples */ - for ( j = 0; j < input_frame; j++ ) - { - tmp = data[i][j]; - stereo_dmx[0][j] += cardioid_left[i] * tmp; /* DMX Left */ - stereo_dmx[1][j] += cardioid_right[i] * tmp; /* DMX Right */ - ene_data += ( tmp * tmp ); /* energy of all objects combined */ - } - } - st_ivas->hParamIsm->last_cardioid_left[i] = cardioid_left[i]; - } - - /* Energy compensation */ - for ( j = 0; j < input_frame; j++ ) - { - ene_dmx += stereo_dmx[0][j] * stereo_dmx[0][j] + stereo_dmx[1][j] * stereo_dmx[1][j]; - } - dmx_gain = sqrtf( ene_data / ( ene_dmx + EPSILON ) ); - /* Smoothing */ - if ( st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame > 0 ) - { - dmx_gain = 0.75f * dmx_gain + 0.25f * last_dmx_gain; - /* 10ms ramp */ - grad = ( dmx_gain - last_dmx_gain ) * 2.0f / (float) input_frame; /* slope between two consecutive gains, 480 samples length */ - for ( i = 0; i < ( input_frame / 2 ); i++ ) - { - stereo_dmx[0][i] *= ( last_dmx_gain + i * grad ); - stereo_dmx[1][i] *= ( last_dmx_gain + i * grad ); - } - for ( ; i < input_frame; i++ ) - { - stereo_dmx[0][i] *= dmx_gain; - stereo_dmx[1][i] *= dmx_gain; - } - } - else - { - for ( j = 0; j < input_frame; j++ ) - { - stereo_dmx[0][j] *= dmx_gain; - stereo_dmx[1][j] *= dmx_gain; - } - } - st_ivas->hParamIsm->last_dmx_gain = dmx_gain; - - /* Copy the stereo dmx to data variable */ - mvr2r( stereo_dmx[0], data[0], input_frame ); - mvr2r( stereo_dmx[1], data[1], input_frame ); - - pop_wmops(); - - return; -} -#endif /*-------------------------------------------------------------------------* * ivas_param_ism_enc_open() @@ -720,64 +437,6 @@ void ivas_param_ism_stereo_dmx( * Open Param ISM handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_param_ism_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t i; - IVAS_FB_CFG *fb_cfg; - PARAM_ISM_CONFIG_HANDLE hParamIsm; - int16_t max_bins; - int32_t input_Fs; - ivas_error error; - - error = IVAS_ERR_OK; - - - /* Assign memory to Param Object handle */ - if ( ( hParamIsm = (PARAM_ISM_CONFIG_HANDLE) malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Param ISM\n" ) ); - } - - input_Fs = st_ivas->hEncoderConfig->input_Fs; - - - /* set FB config. */ - if ( ( error = ivas_fb_set_cfg( &fb_cfg, ISM_FORMAT, st_ivas->hEncoderConfig->nchan_inp, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Allocate and initialize FB mixer handle */ - if ( ( error = ivas_FB_mixer_open( &( hParamIsm->hFbMixer ), input_Fs, fb_cfg, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - ivas_param_ism_config( hParamIsm, st_ivas->hEncoderConfig->nchan_inp ); - - /* Assign memories for Band and Block grouping */ - hParamIsm->nbands = MAX_PARAM_ISM_NBANDS; - - max_bins = (int16_t) ( ( MDFT_FB_BANDS_240 * input_Fs ) / 48000 ); - for ( i = 0; i < ( hParamIsm->nbands + 1 ); i++ ) - { - hParamIsm->band_grouping[i] = CLDFB_TO_MDFT_FAC * Param_ISM_band_grouping[i]; - if ( ( Param_ISM_band_grouping[i] * CLDFB_TO_MDFT_FAC ) > max_bins ) - { - hParamIsm->band_grouping[i] = max_bins; - } - } - - set_s( hParamIsm->noisy_speech_buffer, 0, PARAM_ISM_HYS_BUF_SIZE ); - - st_ivas->hParamIsm = hParamIsm; - - return error; -} -#else ivas_error ivas_param_ism_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -838,7 +497,6 @@ ivas_error ivas_param_ism_enc_open( return error; } -#endif /*-------------------------------------------------------------------------* @@ -847,25 +505,6 @@ ivas_error ivas_param_ism_enc_open( * Close Param ISM encoder handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_param_ism_enc_close( - PARAM_ISM_CONFIG_HANDLE *hParamIsm, /* i/o: ParamISM handle */ - const int32_t input_Fs /* i : input sampling_rate */ -) -{ - if ( hParamIsm == NULL || *hParamIsm == NULL ) - { - return; - } - - ivas_FB_mixer_close( &( *hParamIsm )->hFbMixer, input_Fs, 0 ); - - free( ( *hParamIsm ) ); - ( *hParamIsm ) = NULL; - - return; -} -#else void ivas_param_ism_enc_close( PARAM_ISM_CONFIG_HANDLE *hParamIsm, /* i/o: ParamISM handle */ const Word32 input_Fs /* i : input sampling_rate */ @@ -884,7 +523,6 @@ void ivas_param_ism_enc_close( return; } -#endif /*-------------------------------------------------------------------------* @@ -893,7 +531,6 @@ void ivas_param_ism_enc_close( * Parametric ISM encoder *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ Word32 *data[MAX_NUM_OBJECTS], /* i : input signal q_pcm_in */ @@ -960,69 +597,6 @@ void ivas_param_ism_enc_fx( return; } -#else - -void ivas_param_ism_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - float *data[MAX_NUM_OBJECTS], /* i : input signal */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - int16_t i, j, ts, l_ts; - int16_t nchan_ism; - int16_t num_time_slots; - float *pcm_in[MAX_NUM_OBJECTS]; - float fb_RealBuffer[MAX_NUM_OBJECTS][DIRAC_NO_FB_BANDS_MAX]; - float fb_ImagBuffer[MAX_NUM_OBJECTS][DIRAC_NO_FB_BANDS_MAX]; - float *p_fb_RealBuffer[MAX_NUM_OBJECTS]; - float *p_fb_ImagBuffer[MAX_NUM_OBJECTS]; - float reference_power_obj[MAX_NUM_OBJECTS][PARAM_ISM_MDFT_NO_SLOTS][DIRAC_NO_FB_BANDS_MAX]; - PARAM_ISM_CONFIG_HANDLE hParamIsm; - - nchan_ism = st_ivas->hEncoderConfig->nchan_ism; - hParamIsm = st_ivas->hParamIsm; - - push_wmops( "ivas_param_ism_enc" ); - - l_ts = input_frame / PARAM_ISM_MDFT_NO_SLOTS; - num_time_slots = PARAM_ISM_MDFT_NO_SLOTS; - - for ( i = 0; i < nchan_ism; i++ ) - { - pcm_in[i] = data[i]; - - set_zero( fb_RealBuffer[i], DIRAC_NO_FB_BANDS_MAX ); - set_zero( fb_ImagBuffer[i], DIRAC_NO_FB_BANDS_MAX ); - p_fb_RealBuffer[i] = &fb_RealBuffer[i][0]; - p_fb_ImagBuffer[i] = &fb_ImagBuffer[i][0]; - } - - for ( ts = 0; ts < num_time_slots; ts++ ) - { - ivas_fb_mixer_get_windowed_fr( hParamIsm->hFbMixer, pcm_in, p_fb_RealBuffer, p_fb_ImagBuffer, l_ts, l_ts, hParamIsm->hFbMixer->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hParamIsm->hFbMixer, pcm_in, l_ts, hParamIsm->hFbMixer->fb_cfg->num_in_chans ); - - for ( i = 0; i < nchan_ism; i++ ) - { - pcm_in[i] += l_ts; - for ( j = 0; j < DIRAC_NO_FB_BANDS_MAX; j++ ) - { - reference_power_obj[i][ts][j] = fb_RealBuffer[i][j] * fb_RealBuffer[i][j] + fb_ImagBuffer[i][j] * fb_ImagBuffer[i][j]; - } - } - } - - /* Quantize DOAs */ - ivas_param_ism_enc_quantize_DOA( nchan_ism, st_ivas->hIsmMetaData, hParamIsm ); - - /* Compute object indices and power ratios */ - ivas_param_ism_compute_obj_parameters( nchan_ism, reference_power_obj, hParamIsm ); - - pop_wmops(); - return; -} -#endif /*-------------------------------------------------------------------* * ivas_param_ism_compute_noisy_speech_flag() @@ -1030,7 +604,6 @@ void ivas_param_ism_enc( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_ism_compute_noisy_speech_flag( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -1088,52 +661,3 @@ void ivas_param_ism_compute_noisy_speech_flag( return; } -#else -void ivas_param_ism_compute_noisy_speech_flag( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t i; - - /* Move the Noisy speech buffer */ - for ( i = 0; i < ( PARAM_ISM_HYS_BUF_SIZE - 1 ); i++ ) - { - st_ivas->hParamIsm->noisy_speech_buffer[i] = st_ivas->hParamIsm->noisy_speech_buffer[i + 1]; - } - - /* Set flag_noisy_speech to 0 for cases where object energies are not roughly equal */ - if ( !st_ivas->hParamIsm->flag_equal_energy ) - { - st_ivas->hParamIsm->noisy_speech_buffer[i] = 0; - st_ivas->hParamIsm->flag_noisy_speech = 0; - } - else - { - /* For the current frame, make a decision based on some core-coder flags */ - if ( st_ivas->hSCE[0]->hCoreCoder[0]->flag_noisy_speech_snr && st_ivas->hSCE[1]->hCoreCoder[0]->flag_noisy_speech_snr ) - { - if ( st_ivas->hSCE[0]->hCoreCoder[0]->vad_flag || st_ivas->hSCE[1]->hCoreCoder[0]->vad_flag ) - { - st_ivas->hParamIsm->noisy_speech_buffer[i] = 0; - } - else - { - st_ivas->hParamIsm->noisy_speech_buffer[i] = 1; - } - } - else - { - st_ivas->hParamIsm->noisy_speech_buffer[i] = 0; - } - - /* Do a decision based on hysteresis */ - st_ivas->hParamIsm->flag_noisy_speech = 1; - for ( i = 0; i < PARAM_ISM_HYS_BUF_SIZE; i++ ) - { - st_ivas->hParamIsm->flag_noisy_speech = st_ivas->hParamIsm->flag_noisy_speech && st_ivas->hParamIsm->noisy_speech_buffer[i]; - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_enc/ivas_lfe_enc.c b/lib_enc/ivas_lfe_enc.c index 5127a9797..6a67cd814 100644 --- a/lib_enc/ivas_lfe_enc.c +++ b/lib_enc/ivas_lfe_enc.c @@ -38,10 +38,8 @@ #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------------------------* @@ -49,43 +47,6 @@ * * LFE Arithmetic coding block. Writes encoded data to bitstream. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_lfe_arith_coding( - LFE_ENC_HANDLE hLFE, - BSTR_ENC_HANDLE hBstr, - const int16_t quant_strategy, - int16_t *values ) -{ - Tastat as; - int16_t index, i; - int16_t max_value, offset; - uint16_t num_ele_per_grp; - int16_t num_groups; - index = 0; - num_ele_per_grp = IVAS_LFE_NUM_COEFFS_IN_SUBGRP << 1; - num_groups = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy] >> 1; - - for ( i = 0; i < num_groups; i++ ) - { - max_value = ivas_lfe_num_ele_in_coder_models[quant_strategy][i]; - ari_start_encoding_14bits( &as ); - offset = 4 * i; - - for ( index = 0; index < num_ele_per_grp; index++ ) - { - if ( values[index + offset] > max_value ) - { - values[index + offset] = max_value; - } - ivas_ari_encode_14bits_ext( hBstr, &as, values[index + offset], hLFE->cum_freq_models[quant_strategy][i] ); - } - - ivas_ari_done_encoding_14bits( hBstr, &as ); - } - - return; -} -#else static void ivas_lfe_arith_coding_fx( LFE_ENC_HANDLE hLFE, BSTR_ENC_HANDLE hBstr, @@ -125,239 +86,12 @@ static void ivas_lfe_arith_coding_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_lfe_enc_quant() * * LFE quatization block, calls arithmetic coding block inside *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_lfe_enc_quant( - LFE_ENC_HANDLE hLFE, - float *pLfe_dct, - BSTR_ENC_HANDLE hBstr ) -{ - int16_t bits_written; - int16_t nb_ind_tot; - uint16_t quant_strategy, write_bit; - int16_t num_quant_strategies; - int16_t shift_bits; - int16_t values[IVAS_LFE_MAX_NUM_DCT_COEFFS << 1]; - float temp_lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - int16_t target_bits; - int16_t base2_num_bits_tot; - int16_t coding_strategy; - int16_t bits_written_arith_enc; - int16_t next_ind_pos_arith_enc; - int16_t num_ele_per_grp = IVAS_LFE_NUM_COEFFS_IN_SUBGRP << 1; - - target_bits = (int16_t) ( IVAS_LFE_BITRATE_5000 / FRAMES_PER_SEC ); - - write_bit = 0; - num_quant_strategies = IVAS_MAX_NUM_QUANT_STRATS; - shift_bits = IVAS_LFE_SHIFT_BITS; - bits_written = hBstr->nb_bits_tot; - nb_ind_tot = hBstr->nb_ind_tot; - - - for ( quant_strategy = 0; quant_strategy < num_quant_strategies; quant_strategy++ ) - { - float lfe_abs_sum; - int16_t num_dct_pass_bins; - int16_t max_of_vals, num_groups; - int16_t shift; - uint16_t min_shift, i, j; - uint16_t max_shift; - uint16_t max_value, num_lfe_ele; - uint16_t all_zeros_dct; - - lfe_abs_sum = 0; - coding_strategy = 0; - num_dct_pass_bins = ivas_lfe_num_dct_pass_bins_tbl[quant_strategy]; - max_of_vals = 0; - num_groups = num_dct_pass_bins >> 1; - shift = 0; - min_shift = ivas_lfe_min_shift_tbl[quant_strategy]; - max_shift = min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE + ( 1 << shift_bits ) - 1; - num_lfe_ele = num_dct_pass_bins * IVAS_LFE_NUM_COEFFS_IN_SUBGRP; - all_zeros_dct = 0; - max_value = ivas_lfe_num_ele_in_coder_models[quant_strategy][0]; - - mvr2r( &pLfe_dct[IVAS_LFE_MAX_NUM_DCT_PASS_BINS], &pLfe_dct[num_dct_pass_bins], num_dct_pass_bins ); - - for ( i = 0; i < num_groups; i++ ) - { - temp_lfe_dct[4 * i] = pLfe_dct[2 * i]; - lfe_abs_sum += fabsf( temp_lfe_dct[4 * i] ); - temp_lfe_dct[4 * i + 1] = pLfe_dct[2 * i + 1]; - lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 1] ); - - temp_lfe_dct[4 * i + 2] = pLfe_dct[2 * i + num_dct_pass_bins]; - lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 2] ); - temp_lfe_dct[4 * i + 3] = pLfe_dct[2 * i + num_dct_pass_bins + 1]; - lfe_abs_sum += fabsf( temp_lfe_dct[4 * i + 3] ); - } - - if ( lfe_abs_sum <= IVAS_LFE_ABS_SUM_FLT_THR ) - { - shift = max_shift; - } - else - { - shift = (int16_t) floorf( IVAS_LFE_SHIFTS_PER_DOUBLE * log2_f( max_value / lfe_abs_sum ) ); - } - - shift = max( min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE, min( max_shift, shift ) ); - - while ( 1 ) - { - if ( shift == max_shift ) - { - /* write all LFE bits as 0 */ - all_zeros_dct = 1; - break; - } - else - { - max_of_vals = 0; - for ( i = 0; i < num_lfe_ele; i++ ) - { - float temp; - temp = temp_lfe_dct[i] * powf( 2, ( (float) shift / IVAS_LFE_SHIFTS_PER_DOUBLE ) ); - - if ( temp < 0 ) - { - values[i] = (int16_t) ( temp - 0.5f ); - } - else - { - values[i] = (int16_t) ( temp + 0.5f ); - } - - if ( max_of_vals < abs( values[i] ) ) - { - max_of_vals = (int16_t) abs( values[i] ); - } - } - } - if ( max_of_vals <= max_value ) - { - break; - } - shift = shift - 1; - } - - if ( shift < min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE ) - { - continue; - } - - if ( all_zeros_dct != 1 ) - { - push_next_indice( hBstr, all_zeros_dct, 1 ); - push_next_indice( hBstr, quant_strategy, 1 ); - push_next_indice( hBstr, shift - min_shift * IVAS_LFE_SHIFTS_PER_DOUBLE, shift_bits ); - } - else - { - push_next_indice( hBstr, all_zeros_dct, 1 ); - hLFE->lfe_bits = hBstr->nb_bits_tot - bits_written; - return; - } - - for ( i = 0; i < num_lfe_ele; i++ ) - { - if ( values[i] < 0 ) - { - write_bit = 1; - values[i] = values[i] + 1; - } - else - { - write_bit = 0; - } - - values[i] = (int16_t) abs( values[i] ); - - push_next_indice( hBstr, write_bit, 1 ); - } - - bits_written_arith_enc = hBstr->nb_bits_tot; - next_ind_pos_arith_enc = hBstr->nb_ind_tot; - push_next_indice( hBstr, coding_strategy, 1 ); - base2_num_bits_tot = hBstr->nb_bits_tot - bits_written; - - ivas_lfe_arith_coding( hLFE, hBstr, quant_strategy, values ); - - for ( i = 0; i < num_groups; i++ ) - { - int16_t base2_num_bits = hLFE->lfe_enc_indices_coeffs_tbl[quant_strategy][i]; - base2_num_bits_tot += ( num_ele_per_grp * base2_num_bits ); - } - - if ( ( base2_num_bits_tot ) < ( hBstr->nb_bits_tot - bits_written ) ) - { - if ( quant_strategy == ( num_quant_strategies - 1 ) || ( ( target_bits + IVAS_LFE_ID_BITS ) >= base2_num_bits_tot ) ) - { - /* reset bits buffer and code the indices with base 2 coding */ - for ( j = hBstr->nb_ind_tot - 1; j >= next_ind_pos_arith_enc; j-- ) - { - hBstr->ind_list[j].nb_bits = -1; - } - hBstr->nb_ind_tot = next_ind_pos_arith_enc; - hBstr->nb_bits_tot = bits_written_arith_enc; - coding_strategy = 1; - push_next_indice( hBstr, coding_strategy, 1 ); - - for ( i = 0; i < num_groups; i++ ) - { - int16_t base2_write_bits = hLFE->lfe_enc_indices_coeffs_tbl[quant_strategy][i]; - int16_t offset = 4 * i; - max_value = ivas_lfe_num_ele_in_coder_models[quant_strategy][i]; - - for ( j = 0; j < num_ele_per_grp; j++ ) - { - if ( values[j + offset] > max_value ) - { - values[j + offset] = max_value; - } - push_next_indice( hBstr, values[j + offset], base2_write_bits ); - } - } - break; - } - } - else - { - if ( ( target_bits + IVAS_LFE_ID_BITS ) >= ( hBstr->nb_bits_tot - bits_written ) ) - { - break; - } - else - { - if ( quant_strategy < ( num_quant_strategies - 1 ) ) - { - for ( j = hBstr->nb_ind_tot - 1; j >= nb_ind_tot; j-- ) - { - hBstr->ind_list[j].nb_bits = -1; - } - - hBstr->nb_bits_tot = bits_written; - hBstr->nb_ind_tot = nb_ind_tot; - } - } - } - } - - /* bits spent for LFE coding */ - hLFE->lfe_bits = hBstr->nb_bits_tot - bits_written; - - return; -} - - -#else static void ivas_lfe_enc_quant_fx( LFE_ENC_HANDLE hLFE, @@ -659,58 +393,12 @@ static void ivas_lfe_enc_quant_fx( return; } -#endif // IVAS_FLOAT_FIXED - /*-----------------------------------------------------------------------------------------* * Function ivas_lfe_enc() * * LFE channel encoder *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_lfe_enc( - LFE_ENC_HANDLE hLFE, /* i/o: LFE encoder handle */ - float data_lfe_ch[], /* i : input LFE signal */ - const int16_t input_frame, /* i : input frame length per channel */ - BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ -) -{ - float t_audio[L_FRAME48k]; - float wtda_audio[L_FRAME48k]; - float lfe_dct[IVAS_LFE_MAX_NUM_DCT_COEFFS]; - int16_t num_dct_pass_bins; - int16_t fade_len, full_len, dct_len, zero_pad_len; - const float *pWindow_coeffs; - - /* Initializations */ - num_dct_pass_bins = IVAS_LFE_MAX_NUM_DCT_PASS_BINS; - fade_len = hLFE->pWindow_state->fade_len; - full_len = hLFE->pWindow_state->full_len; - dct_len = hLFE->pWindow_state->dct_len; - zero_pad_len = hLFE->pWindow_state->zero_pad_len; - pWindow_coeffs = hLFE->pWindow_state->pWindow_coeffs; - - /* Windowing */ - ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, input_frame, wtda_audio, hLFE->old_wtda_audio, data_lfe_ch ); - - ivas_mdct( wtda_audio, t_audio, dct_len ); - - mvr2r( t_audio, lfe_dct, num_dct_pass_bins ); - - /* windowing */ - ivas_dct_windowing( fade_len, full_len, dct_len, zero_pad_len, pWindow_coeffs, input_frame, wtda_audio, hLFE->old_wtda_audio, data_lfe_ch + dct_len ); - - /* mdct */ - ivas_mdct( wtda_audio, t_audio, dct_len ); - - mvr2r( t_audio, lfe_dct + num_dct_pass_bins, num_dct_pass_bins ); - - ivas_lfe_enc_quant( hLFE, lfe_dct, hBstr ); - - return; -} - -#else void ivas_lfe_enc_fx( LFE_ENC_HANDLE hLFE, /* i/o: LFE encoder handle */ @@ -813,14 +501,12 @@ void ivas_lfe_enc_fx( return; } -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_create_lfe_enc() * * Create, allocate and initialize IVAS encoder LFE handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_create_lfe_enc( LFE_ENC_HANDLE *hLFE_out, /* o : IVAS LFE encoder structure */ const Word32 input_Fs /* i : input sampling rate */ @@ -898,101 +584,12 @@ ivas_error ivas_create_lfe_enc( return IVAS_ERR_OK; } -#else -ivas_error ivas_create_lfe_enc( - LFE_ENC_HANDLE *hLFE_out, /* o : IVAS LFE encoder structure */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - int16_t input_frame; - LFE_ENC_HANDLE hLFE; - int16_t i, j; - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - - /*-----------------------------------------------------------------* - * Allocate LFE handle - *-----------------------------------------------------------------*/ - - if ( ( hLFE = (LFE_ENC_HANDLE) malloc( sizeof( LFE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE\n" ) ); - } - - /* initializations */ - hLFE->lfe_bits = 0; - - hLFE->pWindow_state = NULL; - hLFE->hBstr = NULL; - - /*-----------------------------------------------------------------* - * Input memory buffer: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( ( hLFE->old_wtda_audio = (float *) malloc( sizeof( float ) * NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE memory\n" ) ); - } - - set_zero( hLFE->old_wtda_audio, NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ); - -#ifdef IVAS_FLOAT_FIXED - if ( ( hLFE->old_wtda_audio_fx = (Word32 *) malloc( sizeof( hLFE->old_wtda_audio_fx[0] ) * NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE memory\n" ) ); - } - - set32_fx( hLFE->old_wtda_audio_fx, 0, NS2SA( input_Fs, IVAS_LFE_FADE_NS ) ); - hLFE->q_old_wtda_audio = 31; -#endif // IVAS_FLOAT_FIXED - - - /*-----------------------------------------------------------------* - * LFE Window: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( ( hLFE->pWindow_state = (LFE_WINDOW_HANDLE) malloc( sizeof( LFE_WINDOW_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE window structure\n" ) ); - } - - ivas_lfe_window_init( hLFE->pWindow_state, input_Fs, input_frame ); -#ifdef IVAS_FLOAT_FIXED - ivas_lfe_window_init_fx( hLFE->pWindow_state, input_Fs, input_frame ); -#endif - - /* Initialization for entropy coding */ - hLFE->cum_freq_models[0][0] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg1; - hLFE->cum_freq_models[0][1] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg2; - hLFE->cum_freq_models[0][2] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg3; - hLFE->cum_freq_models[0][3] = ivas_str_lfe_freq_models.entropy_coder_model_fine_sg4; - hLFE->cum_freq_models[1][0] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg1; - hLFE->cum_freq_models[1][1] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg2; - hLFE->cum_freq_models[1][2] = ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg3; - hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; - - /* Initialization base2 bits for each subgroup for no entropy coding */ - for ( i = 0; i < IVAS_MAX_NUM_QUANT_STRATS; i++ ) - { - for ( j = 0; j < IVAS_MAX_NUM_DCT_COEF_GROUPS; j++ ) - { - hLFE->lfe_enc_indices_coeffs_tbl[i][j] = - (int16_t) ceilf( log2f( (float) ( ivas_lfe_num_ele_in_coder_models[i][j] + 1 ) ) ); - } - } - - *hLFE_out = hLFE; - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_lfe_enc_close() * * Destroy IVAS cncoder LFE handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_enc_close( LFE_ENC_HANDLE *hLFE /* i/o: LFE encoder handle */ ) @@ -1020,49 +617,12 @@ void ivas_lfe_enc_close( return; } -#else -void ivas_lfe_enc_close( - LFE_ENC_HANDLE *hLFE /* i/o: LFE encoder handle */ -) -{ - if ( hLFE == NULL || *hLFE == NULL ) - { - return; - } - - if ( ( *hLFE )->old_wtda_audio != NULL ) - { - free( ( *hLFE )->old_wtda_audio ); - ( *hLFE )->old_wtda_audio = NULL; - } - -#ifdef IVAS_FLOAT_FIXED - if ( ( *hLFE )->old_wtda_audio_fx != NULL ) - { - free( ( *hLFE )->old_wtda_audio_fx ); - ( *hLFE )->old_wtda_audio_fx = NULL; - } -#endif // IVAS_FLOAT_FIXED - - if ( ( *hLFE )->pWindow_state ) - { - free( ( *hLFE )->pWindow_state ); - ( *hLFE )->pWindow_state = NULL; - } - - free( ( *hLFE ) ); - ( *hLFE ) = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_create_lfe_lpf_enc() * * Create, allocate and initialize IVAS encoder LFE low pass filter state handle *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_create_lfe_lpf_enc_fx( ivas_filters_process_state_t **hLfeLpf, /* o : LFE LPF handle */ const Word32 input_Fs /* i : input sampling rate */ @@ -1091,42 +651,12 @@ ivas_error ivas_create_lfe_lpf_enc_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_create_lfe_lpf_enc( - ivas_filters_process_state_t **hLfeLpf, /* o : LFE LPF handle */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - const float *filt_coeff; - - if ( hLfeLpf == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Can not allocate memory for LFE LPF\n" ) ); - } - - /*-----------------------------------------------------------------* - * Allocate LFE LPF handle - *-----------------------------------------------------------------*/ - - if ( ( *hLfeLpf = (ivas_filters_process_state_t *) malloc( sizeof( ivas_filters_process_state_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LFE LPF\n" ) ); - } - - ivas_lfe_lpf_select_filt_coeff( input_Fs, IVAS_FILTER_ORDER_4, &filt_coeff ); - - ivas_filters_init( *hLfeLpf, filt_coeff, IVAS_FILTER_ORDER_4 ); - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_lfe_lpf_enc_close() * * Destroy IVAS cncoder LFE low pass filter state *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_lpf_enc_close( ivas_filters_process_state_t **hLfeLpf /* i/o: LFE LPF handle */ ) @@ -1142,22 +672,6 @@ void ivas_lfe_lpf_enc_close( return; } -#else -void ivas_lfe_lpf_enc_close( - ivas_filters_process_state_t **hLfeLpf /* i/o: LFE LPF handle */ -) -{ - if ( hLfeLpf == NULL || *hLfeLpf == NULL ) - { - return; - } - - free( ( *hLfeLpf ) ); - ( *hLfeLpf ) = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1165,7 +679,6 @@ void ivas_lfe_lpf_enc_close( * * Apply IVAS cncoder LFE low pass filter *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_lpf_enc_apply_fx( ivas_filters_process_state_t *hLfeLpf, /* i/o: LFE LPF handle */ Word32 data_lfe_ch[], /* i/o: LFE signal */ @@ -1176,15 +689,3 @@ void ivas_lfe_lpf_enc_apply_fx( return; } -#else -void ivas_lfe_lpf_enc_apply( - ivas_filters_process_state_t *hLfeLpf, /* i/o: LFE LPF handle */ - float data_lfe_ch[], /* i/o: LFE signal */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - ivas_filter_process( hLfeLpf, data_lfe_ch, input_frame ); - - return; -} -#endif diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 7437ccd5c..c7c0777db 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -39,119 +39,65 @@ #include "ivas_stat_enc.h" #include "wmc_auto.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void combine_freqbands_and_subframes_fx( MASA_ENCODER_HANDLE hMasa ); -#else -static void combine_freqbands_and_subframes( MASA_ENCODER_HANDLE hMasa ); -#endif -#ifdef IVAS_FLOAT_FIXED static void find_n_largest_fx( const Word32 *input_fx, Word16 exp_input, Word16 *largestIndices, const Word16 numElements, const Word16 numLargest ); static void move_metadata_to_qmetadata_fx( const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); -#else -static void find_n_largest( const float *input, int16_t *largestIndices, const int16_t numElements, const int16_t numLargest ); - -static void move_metadata_to_qmetadata( const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ); -#endif -#ifdef IVAS_FLOAT_FIXED static void detect_metadata_composition_fx( const MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ UWord8 *joinedSubframes, /* o : Result of subframe composition */ UWord8 *coherencePresent, /* o : Result of coherence presence */ UWord8 *isTwoDir /* o : Result of two direction check */ ); -#else -static void detect_metadata_composition( const MASA_ENCODER_HANDLE hMasa, uint8_t *joinedSubframes, uint8_t *coherencePresent, uint8_t *isTwoDir ); -#endif -#ifdef IVAS_FLOAT_FIXED static void compensate_energy_ratios_fx( MASA_ENCODER_HANDLE hMasa ); -#else -static void compensate_energy_ratios( MASA_ENCODER_HANDLE hMasa ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_lfe_to_total_energy_ratio_fx( MASA_ENCODER_HANDLE hMasa, BSTR_ENC_HANDLE hMetaData, const Word32 ivas_total_brate ); static void ivas_encode_masaism_metadata_fx( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, ISM_METADATA_HANDLE hIsmMeta[], const Word16 nchan_ism, const Word16 low_bitrate_mode, const Word16 omasa_nbands, const Word16 omasa_nblocks, const Word16 idx_separated_object, const Word16 ism_imp ); static void reduce_metadata_further_fx( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); -#else -static int16_t encode_lfe_to_total_energy_ratio( MASA_ENCODER_HANDLE hMasa, BSTR_ENC_HANDLE hMetaData, const int32_t ivas_total_brate ); -static void ivas_encode_masaism_metadata( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, BSTR_ENC_HANDLE hMetaData, ISM_METADATA_HANDLE hIsmMeta[], const int16_t nchan_ism, const int16_t low_bitrate_mode, const int16_t omasa_nbands, const int16_t omasa_nblocks, const int16_t idx_separated_object, const int16_t ism_imp ); - -static void reduce_metadata_further( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hqmetadata, const IVAS_FORMAT ivas_format ); -#endif - -#ifdef IVAS_FLOAT_FIXED static void average_masa_metadata_fx( MASA_METADATA_FRAME *hMeta, Word32 energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word16 energy_e[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const SPHERICAL_GRID_DATA *Sph_Grid16, const UWord8 useSphGrid ); -#else -static void average_masa_metadata( MASA_METADATA_FRAME *masaMetadata, float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const SPHERICAL_GRID_DATA *sphGrid, const uint8_t useSphGrid ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void copy_masa_metadata_subframe_fx( const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const UWord8 sfFrom, /* i : subframe index of the copy source */ MASA_METADATA_HANDLE hMetaTo, /* o : MASA frame metadata copy destination */ const UWord8 sfTo /* i : subframe index of the copy target */ ); -#else -static void copy_masa_metadata_subframe( const MASA_METADATA_HANDLE hMetaFrom, const uint8_t sfFrom, MASA_METADATA_HANDLE hMetaTo, const uint8_t sfTo ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void copy_masa_metadata_fx( const MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); -#else -static void copy_masa_metadata( const MASA_METADATA_HANDLE hMetaFrom, MASA_METADATA_HANDLE hMetaTo ); -#endif -#ifdef IVAS_FLOAT_FIXED static UWord8 are_masa_subframes_similar_fx( const MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const UWord8 sf1_idx, /* i : index of the subframe of frame1 to inspect */ const MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ const UWord8 sf2_idx /* i : index of the subframe of frame2 to inspect */ ); -#else -static uint8_t are_masa_subframes_similar( const MASA_METADATA_HANDLE frame1, const uint8_t sf1_idx, const MASA_METADATA_HANDLE frame2, const uint8_t sf2_idx ); -#endif -#ifdef IVAS_FLOAT_FIXED static void detect_framing_async_fx( MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder structure */ ); -#else -static void detect_framing_async( MASA_ENCODER_HANDLE hMasa ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void masa_metadata_direction_alignment_fx( MASA_ENCODER_HANDLE hMasa ); -#else -static void masa_metadata_direction_alignment( MASA_ENCODER_HANDLE hMasa ); -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* @@ -172,7 +118,6 @@ static void masa_metadata_direction_alignment( MASA_ENCODER_HANDLE hMasa ); * * open and initialize MASA encoder *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_masa_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -297,168 +242,12 @@ ivas_error ivas_masa_enc_open( return error; } -#else -ivas_error ivas_masa_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i; - MASA_ENCODER_HANDLE hMasa; - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - int32_t ism_total_brate; - - error = IVAS_ERR_OK; - - if ( ( hMasa = (MASA_ENCODER_HANDLE) malloc( sizeof( MASA_ENCODER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA encoder\n" ) ); - } - - hEncoderConfig = st_ivas->hEncoderConfig; - -#ifndef IVAS_FLOAT_FIXED - generate_gridEq( &( hMasa->data.Sph_Grid16 ) ); -#else - generate_gridEq_fx( &( hMasa->data.Sph_Grid16 ) ); -#endif - - if ( hEncoderConfig->ivas_format == MASA_FORMAT || hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - hMasa->data.num_Cldfb_instances = st_ivas->nchan_transport; - } - else - { - hMasa->data.num_Cldfb_instances = 0; - } - - for ( i = 0; i < hMasa->data.num_Cldfb_instances; i++ ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &( hMasa->data.cldfbAnaEnc[i] ), CLDFB_ANALYSIS, hEncoderConfig->input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &( hMasa->data.cldfbAnaEnc[i] ), CLDFB_ANALYSIS, hEncoderConfig->input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - - ism_total_brate = 0; - if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( i = 0; i < st_ivas->nSCE; i++ ) - { - ism_total_brate += st_ivas->hSCE[i]->element_brate; - } - } - -#ifndef IVAS_FLOAT_FIXED - ivas_masa_set_elements( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, hEncoderConfig->ivas_format, st_ivas->ism_mode, ism_total_brate ); -#else - ivas_masa_set_elements_fx( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, hEncoderConfig->ivas_format, st_ivas->ism_mode, ism_total_brate ); -#endif - - mvs2s( DirAC_block_grouping, hMasa->config.block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - mvs2s( MASA_band_grouping_24, hMasa->config.band_grouping, MASA_FREQUENCY_BANDS + 1 ); - - -#ifdef IVAS_FLOAT_FIXED - hMasa->data.onset_detector_1_fx = 0; - hMasa->data.onset_detector_2_fx = 0; - hMasa->data.q_onset_detector = 0; - move32(); - move32(); - move16(); -#else - hMasa->data.onset_detector_1 = 0.0f; - hMasa->data.onset_detector_2 = 0.0f; -#endif - -#ifdef IVAS_FLOAT_FIXED - set32_fx( hMasa->data.lfeToTotalEnergyRatio_fx, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - set16_fx( hMasa->data.lfeToTotalEnergyRatio_e, 0, MAX_PARAM_SPATIAL_SUBFRAMES ); - hMasa->data.prevq_lfeToTotalEnergyRatio_fx = 0; - move32(); -#else - set_zero( hMasa->data.lfeToTotalEnergyRatio, MAX_PARAM_SPATIAL_SUBFRAMES ); - hMasa->data.prevq_lfeToTotalEnergyRatio = 0.0f; -#endif - hMasa->data.prevq_lfeIndex = 0; - - hMasa->data.sync_state.prev_sim_stop = 0; - hMasa->data.sync_state.prev_offset = 0; - hMasa->data.sync_state.frame_mode = MASA_FRAME_4SF; - -#ifdef IVAS_FLOAT_FIXED - set_zero_fx( hMasa->data.dir_align_state.previous_azi_dir1_fx, MASA_FREQUENCY_BANDS ); - set_zero_fx( hMasa->data.dir_align_state.previous_ele_dir1_fx, MASA_FREQUENCY_BANDS ); - set_zero_fx( hMasa->data.dir_align_state.previous_azi_dir2_fx, MASA_FREQUENCY_BANDS ); - set_zero_fx( hMasa->data.dir_align_state.previous_ele_dir2_fx, MASA_FREQUENCY_BANDS ); -#else - set_zero( hMasa->data.dir_align_state.previous_azi_dir1, MASA_FREQUENCY_BANDS ); - set_zero( hMasa->data.dir_align_state.previous_ele_dir1, MASA_FREQUENCY_BANDS ); - set_zero( hMasa->data.dir_align_state.previous_azi_dir2, MASA_FREQUENCY_BANDS ); - set_zero( hMasa->data.dir_align_state.previous_ele_dir2, MASA_FREQUENCY_BANDS ); -#endif - - if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) - { - OMASA_ENCODER_DATA_HANDLE hOmasaData; - - if ( ( hOmasaData = (OMASA_ENCODER_DATA_HANDLE) malloc( sizeof( OMASA_ENCODER_DATA_STATE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data encoder\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - set32_fx( hOmasaData->masa_to_total_energy_ratio_fx[i], 0, MASA_FREQUENCY_BANDS ); - } -#else - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - set_f( hOmasaData->masa_to_total_energy_ratio[i], 0, MASA_FREQUENCY_BANDS ); - } -#endif -#ifndef IVAS_FLOAT_FIXED - hOmasaData->lp_noise_CPE = -1; -#else - hOmasaData->lp_noise_CPE_fx = -256; /* -1 in Q8 */ -#endif - hOmasaData->omasa_stereo_sw_cnt = OMASA_STEREO_SW_CNT_MAX; -#ifdef IVAS_FLOAT_FIXED - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - set_zero_fx( hOmasaData->energy_ism_fx[i], MASA_FREQUENCY_BANDS ); - set16_fx( hOmasaData->energy_ism_fx_e[i], 0, MASA_FREQUENCY_BANDS ); - } -#else - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - set_zero( hOmasaData->energy_ism[i], MASA_FREQUENCY_BANDS ); - } -#endif - - hMasa->data.hOmasaData = hOmasaData; - } - else - { - hMasa->data.hOmasaData = NULL; - } - - st_ivas->hMasa = hMasa; - - return error; -} -#endif /*-----------------------------------------------------------------------* * ivas_masa_enc_close() * * close MASA encoder *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_masa_enc_close( MASA_ENCODER_HANDLE *hMasa /* i/o: MASA metadata structure */ ) @@ -487,35 +276,6 @@ void ivas_masa_enc_close( return; } -#else -void ivas_masa_enc_close( - MASA_ENCODER_HANDLE *hMasa /* i/o: MASA metadata structure */ -) -{ - int16_t i; - - if ( hMasa == NULL || *hMasa == NULL ) - { - return; - } - - for ( i = 0; i < ( *hMasa )->data.num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hMasa )->data.cldfbAnaEnc[i] ) ); - } - - if ( ( *hMasa )->data.hOmasaData != NULL ) - { - free( ( *hMasa )->data.hOmasaData ); - ( *hMasa )->data.hOmasaData = NULL; - } - - free( ( *hMasa ) ); - ( *hMasa ) = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------* * ivas_masa_encode() @@ -523,7 +283,6 @@ void ivas_masa_enc_close( * main MASA encoder function *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_masa_encode_fx( MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ @@ -1006,544 +765,111 @@ ivas_error ivas_masa_encode_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_masa_encode( - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ - int16_t *nb_bits_metadata, /* o : number of metadata bits written */ - const int16_t nchan_transport, /* i : number of MASA input/transport channels */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t Opt_DTX_ON, /* i : DTX on flag */ - const int16_t element_mode, /* i : element mode */ - const ISM_MODE ism_mode, /* i : ISM format mode */ - const int16_t nchan_ism, /* i : number of ISM channels */ - ISM_METADATA_HANDLE hIsmMetaData[MAX_NUM_OBJECTS], /* i : ISM metadata handle */ - const int16_t idx_separated_object, /* i : index of the separated object */ - OMASA_ENC_HANDLE hOMasa, /* i : OMASA encoder handle */ - const int16_t ism_imp, /* i : importance of separated object */ - const int16_t flag_omasa_ener_brate /* i : less bitrate for objects in OMASA flag */ +/*-----------------------------------------------------------------------* + * ivas_masa_estimate_energy_fx() + * + * + *-----------------------------------------------------------------------*/ + +void ivas_masa_estimate_energy_fx( + MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ + Word32 *data_fx[], /* i : Input audio channels Q(q_data) */ + const Word16 input_frame, /* i : frame length */ + const Word16 nchan_transport, /* i : number of MASA input/transport channels */ + Word16 q_data /* i : q for data_fx */ ) { - MASA_DIRECTIONAL_SPATIAL_META *h_orig_metadata; - int16_t i, j; - int16_t masa_sid_descriptor; - int16_t low_bitrate_mode; - int32_t masa_total_brate; - ivas_error error; - - masa_sid_descriptor = -1; - h_orig_metadata = NULL; - low_bitrate_mode = 0; + Word32 Input_RealBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + Word32 Input_ImagBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; + Word16 block_m_idx, band_m_idx; + Word16 mrange[2], brange[2]; + Word16 i, j, ts, l_ts, maxBin; + Word64 energy_fx_temp[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word16 scale = 63; + move16(); + Word16 q_buf; + maxBin = extract_l( Mpy_32_32( 134217728 /*CLDFB_NO_CHANNELS_MAX / L_FRAME48k in Q31*/, input_frame ) ); + l_ts = idiv1616( input_frame, CLDFB_NO_COL_MAX ); - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - /* Create the MASA SID descriptor for the metadata and CPE mode, in order to have the SID frame self-contained. */ - if ( Opt_DTX_ON && hQMetaData != NULL ) + FOR( j = 0; j < MASA_FREQUENCY_BANDS; j++ ) { - if ( nchan_transport == 2 ) /* this is MASA format in CPE only */ - { - masa_sid_descriptor = 0; /* for IVAS_CPE_DFT */ - if ( element_mode == IVAS_CPE_MDCT ) - { - masa_sid_descriptor = 1; - } - } + energy_fx_temp[i][j] = 0; + move64(); } + } - /* Validate and compensate ratios as necessary */ - compensate_energy_ratios( hMasa ); + FOR( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + mrange[0] = hMasa->config.block_grouping[block_m_idx]; + move16(); + mrange[1] = hMasa->config.block_grouping[block_m_idx + 1]; + move16(); + set_zero_fx( hMasa->data.energy_fx[block_m_idx], MASA_FREQUENCY_BANDS ); + set16_fx( hMasa->data.energy_e[block_m_idx], 0, MASA_FREQUENCY_BANDS ); - if ( Opt_DTX_ON ) + FOR( ts = mrange[0]; ts < mrange[1]; ts++ ) { - if ( ( h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) ) ) == NULL ) + FOR( i = 0; i < nchan_transport; i++ ) { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA encoder\n" ) ); + q_buf = q_data; + move16(); + cldfbAnalysis_ts_fx_fixed_q( &( data_fx[i][l_ts * ts] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i], &q_buf ); // (q_data - 5) for Input_RealBuffer[i], Input_ImagBuffer[i] } - for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ ) + FOR( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) + brange[0] = hMasa->config.band_grouping[band_m_idx]; + move16(); + brange[1] = hMasa->config.band_grouping[band_m_idx + 1]; + move16(); + + FOR( i = 0; i < nchan_transport; i++ ) { - mvr2r( hMasa->masaMetadata.directional_meta[i].azimuth[j], h_orig_metadata[i].azimuth[j], MASA_FREQUENCY_BANDS ); - mvr2r( hMasa->masaMetadata.directional_meta[i].elevation[j], h_orig_metadata[i].elevation[j], MASA_FREQUENCY_BANDS ); - mvr2r( hMasa->masaMetadata.directional_meta[i].energy_ratio[j], h_orig_metadata[i].energy_ratio[j], MASA_FREQUENCY_BANDS ); - mvs2s( (int16_t *) ( hMasa->masaMetadata.directional_meta[i].spherical_index[j] ), (int16_t *) ( h_orig_metadata[i].spherical_index[j] ), MASA_FREQUENCY_BANDS ); + IF( GT_16( brange[0], maxBin ) ) + { + hMasa->data.energy_fx[block_m_idx][band_m_idx] = 0; + move32(); + CONTINUE; + } + ELSE IF( GE_16( brange[1], maxBin ) ) + { + brange[1] = maxBin; + move16(); + } + + FOR( j = brange[0]; j < brange[1]; j++ ) + { + energy_fx_temp[block_m_idx][band_m_idx] = W_add( energy_fx_temp[block_m_idx][band_m_idx], W_mac_32_32( W_mult_32_32( Input_RealBuffer[i][j], Input_RealBuffer[i][j] ), Input_ImagBuffer[i][j], Input_ImagBuffer[i][j] ) ); // Q: 2 * (q_data - 5) + 1 for energy_fx_temp + move64(); + } + IF( energy_fx_temp[block_m_idx][band_m_idx] != 0 ) + { + scale = s_min( scale, W_norm( energy_fx_temp[block_m_idx][band_m_idx] ) ); // scale calculates minimum shift can be done across a buffer + } } } } + } - if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && ivas_total_brate >= IVAS_384k ) - { - hMasa->config.mergeRatiosOverSubframes = 0; - } - - /* Combine frequency bands and sub-frames */ - combine_freqbands_and_subframes( hMasa ); - } - - if ( hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands < hMasa->config.numCodingBands && ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) ) - { - if ( ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) || ( ivas_format != MASA_ISM_FORMAT ) ) - { - /* Combine directions */ - ivas_masa_combine_directions( hMasa ); - } - - /* If we joined all bands, then metadata is now one directional. */ - if ( hMasa->config.numTwoDirBands == 0 ) - { - hMasa->config.numberOfDirections = 1; - hMasa->masaMetadata.descriptive_meta.numberOfDirections = 0; - hQMetaData->no_directions = 1; - } - } - - /* Reset qmetadata bit budget */ - hQMetaData->metadata_max_bits = hMasa->config.max_metadata_bits; - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - if ( ivas_format == MASA_ISM_FORMAT && ism_mode != ISM_MODE_NONE ) - { - /* write the number of objects in ISM_MASA format*/ - push_next_indice( hMetaData, nchan_ism - 1, NO_BITS_MASA_ISM_NO_OBJ ); - hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ; - - /* write index of separated object if needed */ - if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && nchan_ism > 1 ) - { - push_next_indice( hMetaData, idx_separated_object, NO_BITS_MASA_ISM_NO_OBJ ); - hQMetaData->metadata_max_bits -= NO_BITS_MASA_ISM_NO_OBJ; - } - - /* write ISM importance flag (one per object) */ - if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - push_next_indice( hMetaData, hIsmMetaData[0]->ism_imp, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - } - else if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - if ( hIsmMetaData[0]->ism_md_null_flag ) - { - /* signal NULL metadata frame */ - push_next_indice( hMetaData, 1, ISM_METADATA_MD_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_MD_FLAG_BITS; - - /* write the ISM class to ISM_NO_META and again the true ISM class */ - push_next_indice( hMetaData, ISM_NO_META, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - push_next_indice( hMetaData, hIsmMetaData[0]->ism_imp, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - } - else - { - push_next_indice( hMetaData, hIsmMetaData[0]->ism_imp, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - - if ( hIsmMetaData[0]->ism_imp == ISM_NO_META ) - { - /* signal low-rate ISM_NO_META frame */ - push_next_indice( hMetaData, 0, ISM_METADATA_MD_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_MD_FLAG_BITS; - - /* signal presence of MD in low-rate ISM_NO_META frame */ - push_next_indice( hMetaData, hIsmMetaData[0]->ism_md_lowrate_flag, ISM_METADATA_INACTIVE_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_INACTIVE_FLAG_BITS; - } - } - } - else if ( ism_mode == ISM_MASA_MODE_DISC ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - if ( hIsmMetaData[i]->ism_md_null_flag ) - { - /* signal NULL metadata frame */ - push_next_indice( hMetaData, 1, ISM_METADATA_MD_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_MD_FLAG_BITS; - - /* write the ISM class to ISM_NO_META and again the true ISM class */ - push_next_indice( hMetaData, ISM_NO_META, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - push_next_indice( hMetaData, hIsmMetaData[i]->ism_imp, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - } - else - { - push_next_indice( hMetaData, hIsmMetaData[i]->ism_imp, ISM_METADATA_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_FLAG_BITS; - - if ( hIsmMetaData[i]->ism_imp == ISM_NO_META ) - { - /* signal low-rate ISM_NO_META frame */ - push_next_indice( hMetaData, 0, ISM_METADATA_MD_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_MD_FLAG_BITS; - - /* signal presence of MD in low-rate ISM_NO_META frame */ - push_next_indice( hMetaData, hIsmMetaData[i]->ism_md_lowrate_flag, ISM_METADATA_INACTIVE_FLAG_BITS ); - hQMetaData->metadata_max_bits -= ISM_METADATA_INACTIVE_FLAG_BITS; - } - } - } - - if ( ivas_total_brate == IVAS_128k && nchan_ism >= 3 ) - { - push_next_indice( hMetaData, flag_omasa_ener_brate, 1 ); - hQMetaData->metadata_max_bits -= 1; - } - } - } - else - { - /* write the number of MASA transport channels */ - push_next_indice( hMetaData, nchan_transport - 1, MASA_TRANSP_BITS ); - hQMetaData->metadata_max_bits -= MASA_TRANSP_BITS; - } - - if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MODE_NONE ) - { - /* signal MASA_ISM_FORMAT to decoder */ - push_next_indice( hMetaData, 1, 1 ); - /* write reserved bit */ - push_next_indice( hMetaData, 0, MASA_HEADER_BITS - 1 ); - hQMetaData->metadata_max_bits -= MASA_HEADER_BITS; - } - else - { - /* the MASA_ISM_FORMAT is not signalled here */ - /* write reserved bits */ - push_next_indice( hMetaData, 0, MASA_HEADER_BITS ); - hQMetaData->metadata_max_bits -= MASA_HEADER_BITS; - } - /* write number of directions */ - push_next_indice( hMetaData, hQMetaData->no_directions - 1, 1 ); - hQMetaData->metadata_max_bits -= 1; - - /* write subframe mode */ - push_next_indice( hMetaData, hQMetaData->q_direction[0].cfg.nblocks == 1 ? 1 : 0, MASA_SUBFRAME_BITS ); - hQMetaData->metadata_max_bits -= MASA_SUBFRAME_BITS; - } - - if ( ivas_format == MC_FORMAT ) - { - int16_t lfeBitsWritten; - lfeBitsWritten = encode_lfe_to_total_energy_ratio( hMasa, hMetaData, ivas_total_brate ); - hQMetaData->metadata_max_bits -= lfeBitsWritten; - } - - /* Move data from encoder to qmetadata */ - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - move_metadata_to_qmetadata( hMasa, hQMetaData ); - } - - if ( hMasa->config.max_metadata_bits < MINIMUM_BIT_BUDGET_NORMAL_META && !hMasa->config.joinedSubframes ) - { - reduce_metadata_further( hMasa, hQMetaData, ivas_format ); - - low_bitrate_mode = ( ivas_total_brate <= 32000 ); - - /* Write low bitrate mode. 1 signals that we have merged through time, 0 signals merge through frequency. */ - push_next_indice( hMetaData, hQMetaData->q_direction[0].cfg.nblocks == 1 ? 1 : 0, MASA_LOWBITRATE_MODE_BITS ); - hQMetaData->metadata_max_bits -= MASA_LOWBITRATE_MODE_BITS; - } - - /* Encode MASA+ISM metadata */ - if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - /* encode MASA/ISM energy ratios */ - ivas_encode_masaism_metadata( hMasa, hQMetaData, hMetaData, hIsmMetaData, nchan_ism, low_bitrate_mode, hOMasa->nCodingBands, hOMasa->nSubframes, idx_separated_object, ism_imp ); - } - else - { - if ( ivas_format == MASA_ISM_FORMAT ) - { - hMasa->data.hOmasaData->masa_to_total_energy_ratio[0][0] = -1; /* signals NOT to adjust the energy ratios */ - } - } - - /* Encode metadata */ - masa_total_brate = ivas_total_brate; - - if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_DISC ) - { - masa_total_brate = calculate_cpe_brate_MASA_ISM( ism_mode, ivas_total_brate, nchan_ism ); - } - - if ( masa_total_brate >= IVAS_384k ) - { - if ( masa_total_brate >= IVAS_512k ) - { - if ( ( error = ivas_qmetadata_enc_encode_hr_384_512( hMetaData, hQMetaData, 16, 4 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_qmetadata_enc_encode_hr_384_512( hMetaData, hQMetaData, 11, 3 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else - { - if ( ( error = ivas_qmetadata_enc_encode( hMetaData, hQMetaData, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - /* Modify spatial metadata based on the MASA-to-total energy ratios */ - ivas_omasa_modify_masa_energy_ratios( hQMetaData, hMasa->data.hOmasaData->masa_to_total_energy_ratio ); - } - - *nb_bits_metadata = hMetaData->nb_bits_tot; - - if ( ivas_format == MASA_FORMAT && Opt_DTX_ON ) - { - /* save old values */ - uint8_t numCodingBands = hMasa->config.numCodingBands; - uint8_t numTwoDirBands = hMasa->config.numTwoDirBands; - int16_t nbands = hQMetaData->q_direction[0].cfg.nbands; - uint8_t numberOfDirections = hMasa->config.numberOfDirections; - uint8_t numberOfDirectionsMeta = hMasa->masaMetadata.descriptive_meta.numberOfDirections; - uint16_t numberOfDirectionsQMetaData = hQMetaData->no_directions; - - if ( !( hMasa->config.numberOfDirections == 1 && hQMetaData->q_direction->cfg.nbands == 5 ) ) - { - for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - mvr2r( h_orig_metadata[i].azimuth[j], hMasa->masaMetadata.directional_meta[i].azimuth[j], MASA_FREQUENCY_BANDS ); - mvr2r( h_orig_metadata[i].elevation[j], hMasa->masaMetadata.directional_meta[i].elevation[j], MASA_FREQUENCY_BANDS ); - mvr2r( h_orig_metadata[i].energy_ratio[j], hMasa->masaMetadata.directional_meta[i].energy_ratio[j], MASA_FREQUENCY_BANDS ); - } - } - - /* Force to have 5 bands and 1 direction */ - hMasa->config.numCodingBands = 5; - hMasa->config.numTwoDirBands = 0; - combine_freqbands_and_subframes( hMasa ); - hQMetaData->q_direction[0].cfg.nbands = 5; - - if ( hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands < hMasa->config.numCodingBands ) - { - /* Combine directions */ - ivas_masa_combine_directions( hMasa ); - - /* If we joined all bands, then metadata is now one directional. */ - if ( hMasa->config.numTwoDirBands == 0 ) - { - hMasa->config.numberOfDirections = 1; - hMasa->masaMetadata.descriptive_meta.numberOfDirections = 0; - hQMetaData->no_directions = 1; - } - } - - move_metadata_to_qmetadata( hMasa, hQMetaData ); - - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[0] = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - } - } - - free( h_orig_metadata ); - - ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, masa_sid_descriptor, ivas_format ); - - /* restore old values */ - hMasa->config.numCodingBands = numCodingBands; - hMasa->config.numTwoDirBands = numTwoDirBands; - hQMetaData->q_direction[0].cfg.nbands = nbands; - hMasa->config.numberOfDirections = numberOfDirections; - hMasa->masaMetadata.descriptive_meta.numberOfDirections = numberOfDirectionsMeta; - hQMetaData->no_directions = numberOfDirectionsQMetaData; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------* - * ivas_masa_estimate_energy_fx() - * - * - *-----------------------------------------------------------------------*/ - -void ivas_masa_estimate_energy_fx( - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ - Word32 *data_fx[], /* i : Input audio channels Q(q_data) */ - const Word16 input_frame, /* i : frame length */ - const Word16 nchan_transport, /* i : number of MASA input/transport channels */ - Word16 q_data /* i : q for data_fx */ -) -{ - Word32 Input_RealBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - Word32 Input_ImagBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - Word16 block_m_idx, band_m_idx; - Word16 mrange[2], brange[2]; - Word16 i, j, ts, l_ts, maxBin; - Word64 energy_fx_temp[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - Word16 scale = 63; - move16(); - Word16 q_buf; - maxBin = extract_l( Mpy_32_32( 134217728 /*CLDFB_NO_CHANNELS_MAX / L_FRAME48k in Q31*/, input_frame ) ); - l_ts = idiv1616( input_frame, CLDFB_NO_COL_MAX ); - - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - FOR( j = 0; j < MASA_FREQUENCY_BANDS; j++ ) - { - energy_fx_temp[i][j] = 0; - move64(); - } - } - - FOR( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMasa->config.block_grouping[block_m_idx]; - move16(); - mrange[1] = hMasa->config.block_grouping[block_m_idx + 1]; - move16(); - set_zero_fx( hMasa->data.energy_fx[block_m_idx], MASA_FREQUENCY_BANDS ); - set16_fx( hMasa->data.energy_e[block_m_idx], 0, MASA_FREQUENCY_BANDS ); - - FOR( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - FOR( i = 0; i < nchan_transport; i++ ) - { - q_buf = q_data; - move16(); - cldfbAnalysis_ts_fx_fixed_q( &( data_fx[i][l_ts * ts] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i], &q_buf ); // (q_data - 5) for Input_RealBuffer[i], Input_ImagBuffer[i] - } - - FOR( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) - { - brange[0] = hMasa->config.band_grouping[band_m_idx]; - move16(); - brange[1] = hMasa->config.band_grouping[band_m_idx + 1]; - move16(); - - FOR( i = 0; i < nchan_transport; i++ ) - { - IF( GT_16( brange[0], maxBin ) ) - { - hMasa->data.energy_fx[block_m_idx][band_m_idx] = 0; - move32(); - CONTINUE; - } - ELSE IF( GE_16( brange[1], maxBin ) ) - { - brange[1] = maxBin; - move16(); - } - - FOR( j = brange[0]; j < brange[1]; j++ ) - { - energy_fx_temp[block_m_idx][band_m_idx] = W_add( energy_fx_temp[block_m_idx][band_m_idx], W_mac_32_32( W_mult_32_32( Input_RealBuffer[i][j], Input_RealBuffer[i][j] ), Input_ImagBuffer[i][j], Input_ImagBuffer[i][j] ) ); // Q: 2 * (q_data - 5) + 1 for energy_fx_temp - move64(); - } - IF( energy_fx_temp[block_m_idx][band_m_idx] != 0 ) - { - scale = s_min( scale, W_norm( energy_fx_temp[block_m_idx][band_m_idx] ) ); // scale calculates minimum shift can be done across a buffer - } - } - } - } - } - - FOR( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - FOR( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) - { - energy_fx_temp[block_m_idx][band_m_idx] = W_shl( energy_fx_temp[block_m_idx][band_m_idx], scale ); // Q: 2 * (q_data - 5) + 1 + scale - move64(); - hMasa->data.energy_fx[block_m_idx][band_m_idx] = W_extract_h( energy_fx_temp[block_m_idx][band_m_idx] ); // Q: 2 * (q_data - 5) + 1 + scale - 32 - move32(); - hMasa->data.energy_e[block_m_idx][band_m_idx] = sub( 31, add( add( imult1616( 2, q_data ), scale ), 1 - 10 - 32 ) ); - move16(); - } - } - hMasa->data.q_energy = add( add( imult1616( 2, q_data ), scale ), 1 - 10 - 32 ); - move16(); - - return; -} -#else -/*-----------------------------------------------------------------------* - * ivas_masa_estimate_energy() - * - * - *-----------------------------------------------------------------------*/ - -void ivas_masa_estimate_energy( - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ - float *data_f[], /* i : Input audio channels */ - const int16_t input_frame, /* i : frame length */ - const int16_t nchan_transport /* i : number of MASA input/transport channels */ -) -{ - float Input_RealBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Input_ImagBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - int16_t block_m_idx, band_m_idx; - int16_t mrange[2], brange[2]; - int16_t i, j, ts, l_ts, maxBin; - - maxBin = (int16_t) ( (float) CLDFB_NO_CHANNELS_MAX * (float) input_frame / L_FRAME48k + 0.5f ); - - l_ts = input_frame / CLDFB_NO_COL_MAX; - - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMasa->config.block_grouping[block_m_idx]; - mrange[1] = hMasa->config.block_grouping[block_m_idx + 1]; - - set_zero( hMasa->data.energy[block_m_idx], MASA_FREQUENCY_BANDS ); - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < nchan_transport; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Input_RealBuffer[i], Input_ImagBuffer[i], l_ts, hMasa->data.cldfbAnaEnc[i] ); - } - - for ( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) - { - brange[0] = hMasa->config.band_grouping[band_m_idx]; - brange[1] = hMasa->config.band_grouping[band_m_idx + 1]; - - for ( i = 0; i < nchan_transport; i++ ) - { - if ( brange[0] > maxBin ) - { - hMasa->data.energy[block_m_idx][band_m_idx] = 0; - continue; - } - else if ( brange[1] >= maxBin ) - { - brange[1] = maxBin; - } - - for ( j = brange[0]; j < brange[1]; j++ ) - { - hMasa->data.energy[block_m_idx][band_m_idx] += Input_RealBuffer[i][j] * Input_RealBuffer[i][j] + Input_ImagBuffer[i][j] * Input_ImagBuffer[i][j]; - } - } - } + FOR( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) + { + FOR( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) + { + energy_fx_temp[block_m_idx][band_m_idx] = W_shl( energy_fx_temp[block_m_idx][band_m_idx], scale ); // Q: 2 * (q_data - 5) + 1 + scale + move64(); + hMasa->data.energy_fx[block_m_idx][band_m_idx] = W_extract_h( energy_fx_temp[block_m_idx][band_m_idx] ); // Q: 2 * (q_data - 5) + 1 + scale - 32 + move32(); + hMasa->data.energy_e[block_m_idx][band_m_idx] = sub( 31, add( add( imult1616( 2, q_data ), scale ), 1 - 10 - 32 ) ); + move16(); } } + hMasa->data.q_energy = add( add( imult1616( 2, q_data ), scale ), 1 - 10 - 32 ); + move16(); return; } -#endif /*-----------------------------------------------------------------------* @@ -1552,7 +878,6 @@ void ivas_masa_estimate_energy( * Frame-by-frame configuration of MASA encoder *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_masa_enc_config_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -1730,14 +1055,14 @@ ivas_error ivas_masa_enc_config_fx( test(); IF( EQ_16( hMasa->config.numberOfDirections, 2 ) && hMasa->config.numTwoDirBands != 0 ) { - IF( NE_32( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, 2, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_allocate_memory_fx( hQMetaData, hMasa->config.numCodingBands, 2, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) { return error; } } ELSE { - IF( NE_32( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, 1, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_allocate_memory_fx( hQMetaData, hMasa->config.numCodingBands, 1, hMasa->config.useCoherence ) ), IVAS_ERR_OK ) ) { return error; } @@ -1773,7 +1098,7 @@ ivas_error ivas_masa_enc_config_fx( hQMetaData->all_coherence_zero = !hMasa->config.coherencePresent; move16(); - ivas_set_qmetadata_maxbit_req( hQMetaData, ivas_format ); + ivas_set_qmetadata_maxbit_req_fx( hQMetaData, ivas_format ); /* Find maximum band usable */ maxBin = extract_l( Mpy_32_32( st_ivas->hEncoderConfig->input_Fs /*q0*/, INV_CLDFB_BANDWIDTH_Q31 /*Q31*/ ) ); /*q0+q31-q31->q0*/ @@ -1821,438 +1146,69 @@ ivas_error ivas_masa_enc_config_fx( IF( continueLoop ) { maxBand = (UWord8) sub( maxBand, 1 ); - move16(); /*because typecasting word16 to uword8*/ - } - } - - IF( LT_16( maxBand, MASA_MAXIMUM_CODING_SUBBANDS ) ) - { - st_ivas->hQMetaData->q_direction->cfg.inactiveBands = (UWord8) sub( MASA_MAXIMUM_CODING_SUBBANDS, maxBand ); - move16(); /*because typecasting word16 to uword8*/ - } - ELSE - { - st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; - move16(); - } - } - - - masa_sample_rate_band_correction_fx( &( hMasa->config ), hMasa->data.band_mapping, hQMetaData, maxBand, (UWord8) GE_32( masa_total_brate, IVAS_384k ), NULL ); - - - IF( GE_16( hMasa->config.numTwoDirBands, hMasa->config.numCodingBands ) ) - { - hMasa->config.numTwoDirBands = hMasa->config.numCodingBands; - move16(); - set8_fx( (Word8 *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); - } - - test(); - test(); - test(); - test(); - /* Transmit stereo signals using a mono downmix at lowest bitrates */ - IF( ( EQ_16( ivas_format, MASA_FORMAT ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) ) && EQ_16( st_ivas->nCPE, 1 ) && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) - { - IF( LT_32( L_sub( ivas_total_brate, ism_total_brate ), MASA_STEREO_MIN_BITRATE ) ) - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 1; - } - ELSE - { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 0; - } - move16(); - } - - test(); - test(); - test(); - IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) && ( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) ) - { - test(); - IF( EQ_16( st_ivas->hCPE[0]->element_mode, IVAS_CPE_DFT ) || LT_16( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt, OMASA_STEREO_SW_CNT_MAX ) ) - { - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx; /*Q8*/ - } - ELSE - { - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = shr( add( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx, st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise_fx ), 1 ); /*Q8*/ - } - move16(); - } - return error; -} -#else -ivas_error ivas_masa_enc_config( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t i; - MASA_ENCODER_HANDLE hMasa; - IVAS_QMETADATA_HANDLE hQMetaData; - IVAS_FORMAT ivas_format; - uint8_t joinedSubframes; - uint8_t coherencePresent; - uint8_t isActualTwoDir; /* Flag to tell that when there are two directions present in metadata, they both contain meaningful information. */ - int32_t ivas_total_brate; - uint8_t maxBand; - int16_t maxBin, sf; - ivas_error error; - int32_t ism_total_brate; - int32_t masa_total_brate; - - error = IVAS_ERR_OK; - - hMasa = st_ivas->hMasa; - hQMetaData = st_ivas->hQMetaData; - ivas_format = st_ivas->hEncoderConfig->ivas_format; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - ism_total_brate = 0; - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( i = 0; i < st_ivas->nSCE; i++ ) - { - ism_total_brate += st_ivas->hSCE[i]->element_brate; - } - } - -#ifndef IVAS_FLOAT_FIXED - ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); -#else - ivas_masa_set_elements_fx( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); -#endif - - hQMetaData->is_masa_ivas_format = 1; - - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { -#ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED - floatToFixed_arr32( hMasa->data.dir_align_state.previous_ele_dir1, hMasa->data.dir_align_state.previous_ele_dir1_fx, Q22, MASA_FREQUENCY_BANDS ); - floatToFixed_arr32( hMasa->data.dir_align_state.previous_ele_dir2, hMasa->data.dir_align_state.previous_ele_dir2_fx, Q22, MASA_FREQUENCY_BANDS ); - floatToFixed_arr32( hMasa->data.dir_align_state.previous_azi_dir1, hMasa->data.dir_align_state.previous_azi_dir1_fx, Q22, MASA_FREQUENCY_BANDS ); - floatToFixed_arr32( hMasa->data.dir_align_state.previous_azi_dir2, hMasa->data.dir_align_state.previous_azi_dir2_fx, Q22, MASA_FREQUENCY_BANDS ); -#endif // IVAS_FLOAT_FIXED_TO_BE_REMOVED - masa_metadata_direction_alignment_fx( hMasa ); -#ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED - fixedToFloat_arrL( hMasa->data.dir_align_state.previous_ele_dir1_fx, hMasa->data.dir_align_state.previous_ele_dir1, Q22, MASA_FREQUENCY_BANDS ); - fixedToFloat_arrL( hMasa->data.dir_align_state.previous_ele_dir2_fx, hMasa->data.dir_align_state.previous_ele_dir2, Q22, MASA_FREQUENCY_BANDS ); - fixedToFloat_arrL( hMasa->data.dir_align_state.previous_azi_dir1_fx, hMasa->data.dir_align_state.previous_azi_dir1, Q22, MASA_FREQUENCY_BANDS ); - fixedToFloat_arrL( hMasa->data.dir_align_state.previous_azi_dir2_fx, hMasa->data.dir_align_state.previous_ele_dir2, Q22, MASA_FREQUENCY_BANDS ); -#endif // IVAS_FLOAT_FIXED_TO_BE_REMOVED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - for ( int j = 0; j < MASA_FREQUENCY_BANDS; j++ ) - { - f2me( hMasa->data.energy[i][j], &hMasa->data.energy_fx[i][j], &hMasa->data.energy_e[i][j] ); - } - } -#endif // IVAS_FLOAT_FIXED_CONVERSIONS - detect_framing_async_fx( hMasa ); /* detect the offset, set 1sf/4sf mode based on this. potentially also shift the metadata using a history buffer */ - if ( hMasa->data.sync_state.frame_mode == MASA_FRAME_1SF && hMasa->data.sync_state.prev_offset != 0 ) - { - /* average over sub-frames */ - average_masa_metadata_fx( &( hMasa->masaMetadata ), hMasa->data.energy_fx, hMasa->data.energy_e, &( hMasa->data.Sph_Grid16 ), ivas_total_brate == IVAS_512k ? TRUE : FALSE ); - } - - - /* Inspect metadata for parameter changes that affect coding. */ - detect_metadata_composition_fx( hMasa, &joinedSubframes, &coherencePresent, &isActualTwoDir ); - - hMasa->config.joinedSubframes = joinedSubframes; - hMasa->config.coherencePresent = coherencePresent; - hMasa->config.numberOfDirections = ( hMasa->masaMetadata.descriptive_meta.numberOfDirections + 1 ) == 2 && isActualTwoDir ? 2 : 1; - } - else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) - { - /* For McMASA, these are set only once as this function is called only once. */ - hMasa->config.joinedSubframes = 0; - hMasa->config.numberOfDirections = 1; - } - -#ifndef IVAS_FLOAT_FIXED - if ( ivas_format == MASA_ISM_FORMAT ) - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); - } - else - { - ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); - } -#else - IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) ) - { - ivas_masa_set_coding_config_fx( &( hMasa->config ), hMasa->data.band_mapping, st_ivas->hCPE[0]->element_brate, st_ivas->nchan_transport, MC_MODE_NONE ); - } - ELSE - { - ivas_masa_set_coding_config_fx( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); - } -#endif -#ifdef IVAS_FLOAT_FIXED - /* Setup importance weights for two-direction band selection. */ - IF( EQ_16( hMasa->config.numberOfDirections, 2 ) ) - { - set32_fx( hMasa->data.importanceWeight_fx, ONE_IN_Q30, hMasa->config.numCodingBands ); - - IF( EQ_16( hMasa->config.numCodingBands, 5 ) ) - { - hMasa->data.importanceWeight_fx[4] = 751619277; // 0.7f in Q30 - move32(); - } - ELSE IF( EQ_16( hMasa->config.numCodingBands, 8 ) ) - { - hMasa->data.importanceWeight_fx[7] = 751619277; // 0.7f in Q30 - move32(); - } - ELSE IF( EQ_16( hMasa->config.numCodingBands, 10 ) ) - { - hMasa->data.importanceWeight_fx[8] = 751619277; // 0.7f in Q30 - hMasa->data.importanceWeight_fx[9] = 107374182; // 0.1f in Q30 - move32(); - move32(); - } - ELSE IF( EQ_16( hMasa->config.numCodingBands, 12 ) ) - { - hMasa->data.importanceWeight_fx[10] = 751619277; // 0.7f in Q30 - hMasa->data.importanceWeight_fx[11] = 107374182; // 0.1f in Q30 - move32(); - move32(); - } - ELSE IF( EQ_16( hMasa->config.numCodingBands, 18 ) ) - { - hMasa->data.importanceWeight_fx[14] = 858993459; // 0.8f in Q30 - hMasa->data.importanceWeight_fx[15] = 536870912; // 0.5f in Q30 - hMasa->data.importanceWeight_fx[16] = 214748365; // 0.2f in Q30 - hMasa->data.importanceWeight_fx[17] = 0; - move32(); - move32(); - move32(); - move32(); - } - ELSE IF( EQ_16( hMasa->config.numCodingBands, 24 ) ) - { - hMasa->data.importanceWeight_fx[20] = 858993459; // 0.8f in Q30 - hMasa->data.importanceWeight_fx[21] = 536870912; // 0.5f in Q30 - hMasa->data.importanceWeight_fx[22] = 214748365; // 0.2f in Q30 - hMasa->data.importanceWeight_fx[23] = 0; - move32(); - move32(); - move32(); - move32(); - } - - IF( EQ_16( hMasa->config.numTwoDirBands, hMasa->config.numCodingBands ) ) - { - set8_fx( (Word8 *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); - } - } - ELSE - { - set8_fx( (Word8 *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); - } -#else - /* Setup importance weights for two-direction band selection. */ - if ( hMasa->config.numberOfDirections == 2 ) - { - set_f( hMasa->data.importanceWeight, 1.0f, hMasa->config.numCodingBands ); - - if ( hMasa->config.numCodingBands == 5 ) - { - hMasa->data.importanceWeight[4] = 0.7f; - } - else if ( hMasa->config.numCodingBands == 8 ) - { - hMasa->data.importanceWeight[7] = 0.7f; - } - else if ( hMasa->config.numCodingBands == 10 ) - { - hMasa->data.importanceWeight[8] = 0.7f; - hMasa->data.importanceWeight[9] = 0.1f; - } - else if ( hMasa->config.numCodingBands == 12 ) - { - hMasa->data.importanceWeight[10] = 0.7f; - hMasa->data.importanceWeight[11] = 0.1f; - } - else if ( hMasa->config.numCodingBands == 18 ) - { - hMasa->data.importanceWeight[14] = 0.8f; - hMasa->data.importanceWeight[15] = 0.5f; - hMasa->data.importanceWeight[16] = 0.2f; - hMasa->data.importanceWeight[17] = 0.0f; - } - else if ( hMasa->config.numCodingBands == 24 ) - { - hMasa->data.importanceWeight[20] = 0.8f; - hMasa->data.importanceWeight[21] = 0.5f; - hMasa->data.importanceWeight[22] = 0.2f; - hMasa->data.importanceWeight[23] = 0.0f; - } - - if ( hMasa->config.numTwoDirBands == hMasa->config.numCodingBands ) - { - set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); - } - } - else - { - set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); - } -#endif - - /* Set qmeta to correct values */ - if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands != 0 ? 2 : 1, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( i = 0; i < hQMetaData->no_directions; i++ ) - { - hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; - hQMetaData->q_direction[i].cfg.nblocks = hMasa->config.joinedSubframes == TRUE ? 1 : 4; - - if ( ivas_format == MC_FORMAT ) - { - hQMetaData->q_direction[i].cfg.mc_ls_setup = st_ivas->hEncoderConfig->mc_input_setup; - } - else - { - /* Just to be sure that this default value is maintained */ - hQMetaData->q_direction[i].cfg.mc_ls_setup = MC_LS_SETUP_INVALID; - } - } - - hQMetaData->all_coherence_zero = !hMasa->config.coherencePresent; - - ivas_set_qmetadata_maxbit_req( hQMetaData, ivas_format ); - - /* Find maximum band usable */ - maxBin = (int16_t) ( st_ivas->hEncoderConfig->input_Fs * INV_CLDFB_BANDWIDTH ); - maxBand = 0; - while ( maxBand <= MASA_FREQUENCY_BANDS && MASA_band_grouping_24[maxBand] <= maxBin ) - { - maxBand++; - } - maxBand--; - - st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; - masa_total_brate = ivas_total_brate; -#ifndef IVAS_FLOAT_FIXED - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - masa_total_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, ivas_total_brate, st_ivas->hEncoderConfig->nchan_ism ); - } -#else - test(); - IF( EQ_32( ivas_format, MASA_ISM_FORMAT ) && EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) - { - masa_total_brate = calculate_cpe_brate_MASA_ISM_fx( st_ivas->ism_mode, ivas_total_brate, st_ivas->hEncoderConfig->nchan_ism ); - } -#endif - if ( masa_total_brate >= IVAS_384k && ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) ) - { - int16_t continueLoop; - continueLoop = 1; - while ( maxBand > 5 && continueLoop ) - { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - if ( hMasa->data.energy[sf][maxBand - 1] > 100000 ) - { - continueLoop = 0; - break; - } - } - if ( continueLoop ) - { - maxBand--; + move16(); /*because typecasting word16 to uword8*/ } } - if ( maxBand < MASA_MAXIMUM_CODING_SUBBANDS ) + IF( LT_16( maxBand, MASA_MAXIMUM_CODING_SUBBANDS ) ) { - st_ivas->hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand; + st_ivas->hQMetaData->q_direction->cfg.inactiveBands = (UWord8) sub( MASA_MAXIMUM_CODING_SUBBANDS, maxBand ); + move16(); /*because typecasting word16 to uword8*/ } - else + ELSE { st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; + move16(); } } -#ifndef IVAS_FLOAT_FIXED - masa_sample_rate_band_correction( &( hMasa->config ), hMasa->data.band_mapping, hQMetaData, maxBand, masa_total_brate >= IVAS_384k, NULL ); -#else - Word16 numBands48k = hMasa->config.numCodingBands, band; - - for ( band = 0; band < numBands48k; band++ ) - { - floatToFixed_arrL( hQMetaData->q_direction[0].band_data[band].azimuth, hQMetaData->q_direction[0].band_data[band].azimuth_fx, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - floatToFixed_arrL( hQMetaData->q_direction[0].band_data[band].elevation, hQMetaData->q_direction[0].band_data[band].elevation_fx, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - floatToFixed_arrL( hQMetaData->q_direction[0].band_data[band].energy_ratio, hQMetaData->q_direction[0].band_data[band].energy_ratio_fx, Q30, MAX_PARAM_SPATIAL_SUBFRAMES ); - if ( hQMetaData->no_directions == 2 ) - { - floatToFixed_arrL( hQMetaData->q_direction[1].band_data[band].azimuth, hQMetaData->q_direction[1].band_data[band].azimuth_fx, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - floatToFixed_arrL( hQMetaData->q_direction[1].band_data[band].elevation, hQMetaData->q_direction[1].band_data[band].elevation_fx, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - floatToFixed_arrL( hQMetaData->q_direction[1].band_data[band].energy_ratio, hQMetaData->q_direction[1].band_data[band].energy_ratio_fx, Q30, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } - masa_sample_rate_band_correction_fx( &( hMasa->config ), hMasa->data.band_mapping, hQMetaData, maxBand, masa_total_brate >= IVAS_384k, NULL ); + masa_sample_rate_band_correction_fx( &( hMasa->config ), hMasa->data.band_mapping, hQMetaData, maxBand, (UWord8) GE_32( masa_total_brate, IVAS_384k ), NULL ); - for ( band = 0; band < numBands48k; band++ ) - { - fixedToFloat_arrL( hQMetaData->q_direction[0].band_data[band].azimuth_fx, hQMetaData->q_direction[0].band_data[band].azimuth, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - fixedToFloat_arrL( hQMetaData->q_direction[0].band_data[band].elevation_fx, hQMetaData->q_direction[0].band_data[band].elevation, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - fixedToFloat_arrL( hQMetaData->q_direction[0].band_data[band].energy_ratio_fx, hQMetaData->q_direction[0].band_data[band].energy_ratio, Q30, MAX_PARAM_SPATIAL_SUBFRAMES ); - if ( hQMetaData->no_directions == 2 ) - { - fixedToFloat_arrL( hQMetaData->q_direction[1].band_data[band].azimuth_fx, hQMetaData->q_direction[1].band_data[band].azimuth, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - fixedToFloat_arrL( hQMetaData->q_direction[1].band_data[band].elevation_fx, hQMetaData->q_direction[1].band_data[band].elevation, Q22, MAX_PARAM_SPATIAL_SUBFRAMES ); - fixedToFloat_arrL( hQMetaData->q_direction[1].band_data[band].energy_ratio_fx, hQMetaData->q_direction[1].band_data[band].energy_ratio, Q30, MAX_PARAM_SPATIAL_SUBFRAMES ); - } - } -#endif - if ( hMasa->config.numTwoDirBands >= hMasa->config.numCodingBands ) + IF( GE_16( hMasa->config.numTwoDirBands, hMasa->config.numCodingBands ) ) { hMasa->config.numTwoDirBands = hMasa->config.numCodingBands; - set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); + move16(); + set8_fx( (Word8 *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); } + test(); + test(); + test(); + test(); /* Transmit stereo signals using a mono downmix at lowest bitrates */ - if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && st_ivas->nCPE == 1 && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) + IF( ( EQ_16( ivas_format, MASA_FORMAT ) || EQ_16( ivas_format, MASA_ISM_FORMAT ) ) && EQ_16( st_ivas->nCPE, 1 ) && st_ivas->hCPE[0]->hStereoDft != NULL && st_ivas->hCPE[0]->hStereoDft->hConfig != NULL ) { - st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = ( ivas_total_brate - ism_total_brate < MASA_STEREO_MIN_BITRATE ) ? 1 : 0; + IF( LT_32( L_sub( ivas_total_brate, ism_total_brate ), MASA_STEREO_MIN_BITRATE ) ) + { + st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 1; + } + ELSE + { + st_ivas->hCPE[0]->hStereoDft->hConfig->force_mono_transmission = 0; + } + move16(); } - if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) + test(); + test(); + test(); + IF( EQ_16( ivas_format, MASA_ISM_FORMAT ) && ( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) ) { - if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) + test(); + IF( EQ_16( st_ivas->hCPE[0]->element_mode, IVAS_CPE_DFT ) || LT_16( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt, OMASA_STEREO_SW_CNT_MAX ) ) { -#ifndef IVAS_FLOAT_FIXED - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise; -#else - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx; -#endif + st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx; /*Q8*/ } - else + ELSE { -#ifndef IVAS_FLOAT_FIXED - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS; -#else - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = shr( add( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx, st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise_fx ), 1 ); -#endif + st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = shr( add( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise_fx, st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise_fx ), 1 ); /*Q8*/ } + move16(); } - return error; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------* * ivas_masa_surrcoh_signicant() * @@ -2327,57 +1283,11 @@ UWord8 ivas_masa_surrcoh_signicant_fx( return 0; } -#else -/*-----------------------------------------------------------------------* - * ivas_masa_surrcoh_signicant() - * - * Determine if surrounding coherence is significant in this frame and should be encoded - *-----------------------------------------------------------------------*/ - -uint8_t ivas_masa_surrcoh_signicant( - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Surround coherence */ - float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Diffuse to total ratio */ - const int16_t nSubFrames, /* i : Number of sub frames */ - const int16_t nBands /* i : Number of frequency bands */ -) -{ - float significanceMeasure1, significanceMeasure2, significanceMeasure; - float surrCohToTotal, surrCohToTotalSum, surrCohToTotalTimesDiffSum, diffSum; - int16_t sf, band; - float surrCohSignificanceCoef = 0.4f; - float threshold = 0.1f; - - for ( sf = 0; sf < nSubFrames; sf++ ) - { - surrCohToTotalSum = 0.0f; - surrCohToTotalTimesDiffSum = 0.0f; - diffSum = 0.0f; - for ( band = 0; band < nBands; band++ ) - { - surrCohToTotal = diffuse_to_total_ratio[sf][band] * surroundingCoherence[sf][band]; - surrCohToTotalSum += surrCohToTotal; - surrCohToTotalTimesDiffSum += diffuse_to_total_ratio[sf][band] * surrCohToTotal; - diffSum += diffuse_to_total_ratio[sf][band]; - } - significanceMeasure1 = surrCohToTotalSum / (float) nBands; - significanceMeasure2 = surrCohSignificanceCoef * surrCohToTotalTimesDiffSum / ( diffSum + EPSILON ); - significanceMeasure = max( significanceMeasure1, significanceMeasure2 ); - - if ( significanceMeasure > threshold ) - { - return 1; /* Surrounding coherence was significant in at least one subframe */ - } - } - - return 0; /* Surrounding coherence was not significant in any subframe */ -} -#endif /*-----------------------------------------------------------------------* * Local functions *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void combine_freqbands_and_subframes_fx( MASA_ENCODER_HANDLE hMasa ) { @@ -2693,189 +1603,6 @@ static void combine_freqbands_and_subframes_fx( return; } -#else -static void combine_freqbands_and_subframes( - MASA_ENCODER_HANDLE hMasa ) -{ - int16_t i, j, k, m; - float aziRad, eleRad; - float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float vecLen; - float xSum, ySum, zSum; - float energySum; - float spreadCohSum; - float surrCohSum; - float energyRatioSum; - float surrCohTemp; - float energyRatioTemp; - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - int16_t brange[2]; - uint8_t numCodingBands; - uint8_t numSf; - uint8_t numDirections; - MASA_METADATA_HANDLE hMeta; - uint8_t mergeRatiosOverSubframes; - uint8_t computeCoherence; - - numCodingBands = hMasa->config.numCodingBands; - numDirections = hMasa->config.numberOfDirections; - numSf = hMasa->config.joinedSubframes == TRUE ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; - hMeta = &( hMasa->masaMetadata ); - - mergeRatiosOverSubframes = hMasa->config.mergeRatiosOverSubframes; - computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; - - /* If metadata subframes are joined then we need all energy to be in the first subframe for combining. - * This optimizes following computations a bit. - * Note: If energy is used elsewhere, then this can cause problems and local energy should be used. */ - if ( numSf == 1 ) - { - for ( j = 1; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) - { - hMasa->data.energy[0][k] += hMasa->data.energy[j][k]; - } - } - } - - if ( numCodingBands <= MAX_REDUCED_NBANDS ) - { - /* reduce metadata *frequency* resolution. time resolution is not touched */ - for ( i = 0; i < numDirections; i++ ) - { - for ( j = 0; j < numSf; j++ ) /* NB: for numSf==1, operates only on first sub-frame */ - { - for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) - { - aziRad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; - eleRad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; - vecLen = hMeta->directional_meta[i].energy_ratio[j][k] * hMasa->data.energy[j][k]; - - x[i][j][k] = cosf( aziRad ) * cosf( eleRad ) * vecLen; - y[i][j][k] = sinf( aziRad ) * cosf( eleRad ) * vecLen; - z[i][j][k] = sinf( eleRad ) * vecLen; - } - } - } - - for ( i = 0; i < numDirections; i++ ) - { - for ( j = 0; j < numSf; j++ ) - { - for ( k = 0; k < numCodingBands; k++ ) - { - brange[0] = hMasa->data.band_mapping[k]; - brange[1] = hMasa->data.band_mapping[k + 1]; - - xSum = 0.0f; - ySum = 0.0f; - zSum = 0.0f; - energySum = 0.0f; - spreadCohSum = 0.0f; - - for ( m = brange[0]; m < brange[1]; m++ ) - { - xSum += x[i][j][m]; - ySum += y[i][j][m]; - zSum += z[i][j][m]; - energySum += hMasa->data.energy[j][m]; - } - - aziRad = atan2f( ySum, xSum ); - eleRad = atan2f( zSum, sqrtf( xSum * xSum + ySum * ySum ) ); - - hMeta->directional_meta[i].azimuth[j][k] = aziRad / EVS_PI * 180.0f; - hMeta->directional_meta[i].elevation[j][k] = eleRad / EVS_PI * 180.0f; - - vecLen = sqrtf( xSum * xSum + ySum * ySum + zSum * zSum ); - hMeta->directional_meta[i].energy_ratio[j][k] = vecLen / ( energySum + EPSILON ); - - if ( computeCoherence ) - { - for ( m = brange[0]; m < brange[1]; m++ ) - { - spreadCohSum += hMeta->directional_meta[i].spread_coherence[j][m] * hMasa->data.energy[j][m]; - } - hMeta->directional_meta[i].spread_coherence[j][k] = spreadCohSum / ( energySum + EPSILON ); - - if ( i == 0 ) - { - surrCohSum = 0.0f; - for ( m = brange[0]; m < brange[1]; m++ ) - { - surrCohSum += hMeta->common_meta.surround_coherence[j][m] * hMasa->data.energy[j][m]; - } - hMeta->common_meta.surround_coherence[j][k] = surrCohSum / ( energySum + EPSILON ); - } - } - - if ( i == 0 ) - { - energy[j][k] = energySum; - } - } - } - } - } - else if ( mergeRatiosOverSubframes ) /* keep frequency resolution */ - { - for ( j = 0; j < numSf; j++ ) - { - for ( k = 0; k < numCodingBands; k++ ) - { - energy[j][k] = hMasa->data.energy[j][k]; - } - } - } - - if ( mergeRatiosOverSubframes ) - { - for ( k = 0; k < numCodingBands; k++ ) - { - energySum = 0.0f; - for ( j = 0; j < numSf; j++ ) - { - energySum += energy[j][k]; - } - - if ( computeCoherence ) - { - surrCohSum = 0.0f; - for ( j = 0; j < numSf; j++ ) - { - surrCohSum += energy[j][k] * hMeta->common_meta.surround_coherence[j][k]; - } - surrCohTemp = surrCohSum / ( energySum + EPSILON ); - - for ( j = 0; j < numSf; j++ ) - { - hMeta->common_meta.surround_coherence[j][k] = surrCohTemp; - } - } - - for ( i = 0; i < numDirections; i++ ) - { - energyRatioSum = 0.0f; - for ( j = 0; j < numSf; j++ ) - { - energyRatioSum += energy[j][k] * hMeta->directional_meta[i].energy_ratio[j][k]; - } - energyRatioTemp = energyRatioSum / ( energySum + EPSILON ); - - for ( j = 0; j < numSf; j++ ) - { - hMeta->directional_meta[i].energy_ratio[j][k] = energyRatioTemp; - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -2883,7 +1610,6 @@ static void combine_freqbands_and_subframes( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_masa_combine_directions_fx( MASA_ENCODER_HANDLE hMasa ) { @@ -3118,173 +1844,40 @@ void ivas_masa_combine_directions_fx( Word16 var5 = BASOP_Util_Divide3232_Scale( var3, var4, &exp_var5 ); exp_var5 = add( exp_var5, ( sub( sub( 31, Q30 ), exp_var4 ) ) ); Scale_sig( &var5, 1, sub( Q15, sub( 15, exp_var5 ) ) ); - hMeta->directional_meta[0].spread_coherence_fx[j][i] = var5; // Q15 - move16(); - } - - ambience2dir_fx = L_sub( ONE_IN_Q30, ratioSum_fx ); // Q30 - Word32 ambience2dir_fx_by_2 = L_shr( ambience2dir_fx, 1 ); - Word32 var_a = L_add( L_add( hMeta->directional_meta[0].energy_ratio_fx[j][i], hMeta->directional_meta[1].energy_ratio_fx[j][i] ), ambience2dir_fx_by_2 ); // Q30 - Word16 exp_var_b = 0; - move16(); - Word16 var_b = BASOP_Util_Divide3232_Scale( sumVecLen_fx[j][i], var_a, &exp_var_b ); - exp_var_b = add( exp_var_b, sub( exp_sumVecLen, 1 ) ); - Word32 var_b_32 = L_deposit_h( var_b ); - hMeta->directional_meta[0].energy_ratio_fx[j][i] = L_shr( var_b_32, 1 - exp_var_b ); // Q30 - hMeta->directional_meta[1].energy_ratio_fx[j][i] = 0; // Q30 - move16(); - move16(); - - IF( computeCoherence ) - { - ambience1dir_fx = L_sub( ONE_IN_Q30, hMeta->directional_meta[0].energy_ratio_fx[j][i] ); // Q30 - ambienceIncrease_fx = L_max( L_sub( ambience1dir_fx, ambience2dir_fx ), 0 ); // Q30 - origSurrCohEne_fx = Mpy_32_16_1( ambience2dir_fx /*Q30*/, hMeta->common_meta.surround_coherence_fx[j][i] /*Q15*/ ); // Q30 - newSurrCohEne_fx = Mpy_32_16_1( ambienceIncrease_fx /*Q30*/, hMeta->directional_meta[0].spread_coherence_fx[j][i] /*Q15*/ ); // Q30 - - Word16 exp_y = 0, exp_z = 0; - move16(); - move16(); - Word32 x = L_add( origSurrCohEne_fx, newSurrCohEne_fx ); // Q30 - Word32 y = BASOP_Util_Add_Mant32Exp( ambience1dir_fx, 1, EPSILON_FX_M, EPSILON_FX_E, &exp_y ); - Word16 z = BASOP_Util_Divide3232_Scale( x, y, &exp_z ); - exp_z = add( exp_z, ( sub( 31 - Q30, exp_y ) ) ); - z = shl_sat( z, exp_z ); // Q15 - hMeta->common_meta.surround_coherence_fx[j][i] = s_min( MAX16B, z ); - move16(); - } - } - } - } - - return; -} -#else -void ivas_masa_combine_directions( - MASA_ENCODER_HANDLE hMasa ) -{ - int16_t i, j, k; - uint8_t numCodingBands; - uint8_t numSf; - uint8_t numDirections; - uint8_t computeCoherence; - MASA_METADATA_HANDLE hMeta; - - float aziRad; - float eleRad; - float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float vecLen; - float xSum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float ySum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float zSum[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float sumVecLen[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float tempImportance; - float importance[MASA_FREQUENCY_BANDS]; - int16_t indicesOfLargest[MASA_FREQUENCY_BANDS]; - - float ambience1dir; - float ambience2dir; - float ambienceIncrease; - float ratioSum; - float origSurrCohEne; - float newSurrCohEne; - - numCodingBands = hMasa->config.numCodingBands; - numDirections = hMasa->config.numberOfDirections; - numSf = hMasa->config.joinedSubframes == TRUE ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; - - hMeta = &( hMasa->masaMetadata ); - - computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; - - for ( i = 0; i < numDirections; i++ ) - { - for ( j = 0; j < numSf; j++ ) - { - for ( k = 0; k < numCodingBands; k++ ) - { - aziRad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; - eleRad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; - vecLen = hMeta->directional_meta[i].energy_ratio[j][k]; - - x[i][j][k] = cosf( aziRad ) * cosf( eleRad ) * vecLen; - y[i][j][k] = sinf( aziRad ) * cosf( eleRad ) * vecLen; - z[i][j][k] = sinf( eleRad ) * vecLen; - } - } - } - - /* Compute sum vector */ - for ( j = 0; j < numSf; j++ ) - { - for ( k = 0; k < numCodingBands; k++ ) - { - xSum[j][k] = x[0][j][k] + x[1][j][k]; - ySum[j][k] = y[0][j][k] + y[1][j][k]; - zSum[j][k] = z[0][j][k] + z[1][j][k]; - sumVecLen[j][k] = sqrtf( xSum[j][k] * xSum[j][k] + ySum[j][k] * ySum[j][k] + zSum[j][k] * zSum[j][k] ); - } - } - - /* Estimate the importance of having two directions instead of one */ - for ( i = 0; i < numCodingBands; i++ ) - { - importance[i] = 0.0f; - for ( j = 0; j < numSf; j++ ) - { - tempImportance = hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i] - sumVecLen[j][i]; - importance[i] += tempImportance; - } - importance[i] /= (float) numSf; - importance[i] *= hMasa->data.importanceWeight[i]; - } - - /* Determine bands where to use two directions */ - find_n_largest( importance, indicesOfLargest, numCodingBands, hMasa->config.numTwoDirBands ); - - for ( i = 0; i < numCodingBands; i++ ) - { - hMasa->data.twoDirBands[i] = 0; - } - - for ( i = 0; i < hMasa->config.numTwoDirBands; i++ ) - { - hMasa->data.twoDirBands[indicesOfLargest[i]] = 1; - } - - /* Combine directions on the remaining bands */ - for ( i = 0; i < numCodingBands; i++ ) - { - if ( hMasa->data.twoDirBands[i] == 0 ) - { - for ( j = 0; j < numSf; j++ ) - { - aziRad = atan2f( ySum[j][i], xSum[j][i] ); - eleRad = atan2f( zSum[j][i], sqrtf( xSum[j][i] * xSum[j][i] + ySum[j][i] * ySum[j][i] ) ); - - hMeta->directional_meta[0].azimuth[j][i] = aziRad / EVS_PI * 180.0f; - hMeta->directional_meta[0].elevation[j][i] = eleRad / EVS_PI * 180.0f; - - ratioSum = hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i]; - if ( computeCoherence ) - { - hMeta->directional_meta[0].spread_coherence[j][i] = - ( hMeta->directional_meta[0].spread_coherence[j][i] * hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].spread_coherence[j][i] * hMeta->directional_meta[1].energy_ratio[j][i] ) / ( ratioSum + EPSILON ); + hMeta->directional_meta[0].spread_coherence_fx[j][i] = var5; // Q15 + move16(); } - ambience2dir = 1.0f - ratioSum; - hMeta->directional_meta[0].energy_ratio[j][i] = sumVecLen[j][i] / ( hMeta->directional_meta[0].energy_ratio[j][i] + hMeta->directional_meta[1].energy_ratio[j][i] + ambience2dir / 2.0f ); - hMeta->directional_meta[1].energy_ratio[j][i] = 0.0f; - if ( computeCoherence ) + ambience2dir_fx = L_sub( ONE_IN_Q30, ratioSum_fx ); // Q30 + Word32 ambience2dir_fx_by_2 = L_shr( ambience2dir_fx, 1 ); + Word32 var_a = L_add( L_add( hMeta->directional_meta[0].energy_ratio_fx[j][i], hMeta->directional_meta[1].energy_ratio_fx[j][i] ), ambience2dir_fx_by_2 ); // Q30 + Word16 exp_var_b = 0; + move16(); + Word16 var_b = BASOP_Util_Divide3232_Scale( sumVecLen_fx[j][i], var_a, &exp_var_b ); + exp_var_b = add( exp_var_b, sub( exp_sumVecLen, 1 ) ); + Word32 var_b_32 = L_deposit_h( var_b ); + hMeta->directional_meta[0].energy_ratio_fx[j][i] = L_shr( var_b_32, 1 - exp_var_b ); // Q30 + hMeta->directional_meta[1].energy_ratio_fx[j][i] = 0; // Q30 + move16(); + move16(); + + IF( computeCoherence ) { - ambience1dir = 1.0f - hMeta->directional_meta[0].energy_ratio[j][i]; - ambienceIncrease = max( ambience1dir - ambience2dir, 0.0f ); + ambience1dir_fx = L_sub( ONE_IN_Q30, hMeta->directional_meta[0].energy_ratio_fx[j][i] ); // Q30 + ambienceIncrease_fx = L_max( L_sub( ambience1dir_fx, ambience2dir_fx ), 0 ); // Q30 + origSurrCohEne_fx = Mpy_32_16_1( ambience2dir_fx /*Q30*/, hMeta->common_meta.surround_coherence_fx[j][i] /*Q15*/ ); // Q30 + newSurrCohEne_fx = Mpy_32_16_1( ambienceIncrease_fx /*Q30*/, hMeta->directional_meta[0].spread_coherence_fx[j][i] /*Q15*/ ); // Q30 - origSurrCohEne = ambience2dir * hMeta->common_meta.surround_coherence[j][i]; - newSurrCohEne = ambienceIncrease * hMeta->directional_meta[0].spread_coherence[j][i]; - hMeta->common_meta.surround_coherence[j][i] = min( 1.0f, ( origSurrCohEne + newSurrCohEne ) / ( ambience1dir + EPSILON ) ); + Word16 exp_y = 0, exp_z = 0; + move16(); + move16(); + Word32 x = L_add( origSurrCohEne_fx, newSurrCohEne_fx ); // Q30 + Word32 y = BASOP_Util_Add_Mant32Exp( ambience1dir_fx, 1, EPSILON_FX_M, EPSILON_FX_E, &exp_y ); + Word16 z = BASOP_Util_Divide3232_Scale( x, y, &exp_z ); + exp_z = add( exp_z, ( sub( 31 - Q30, exp_y ) ) ); + z = shl_sat( z, exp_z ); // Q15 + hMeta->common_meta.surround_coherence_fx[j][i] = s_min( MAX16B, z ); + move16(); } } } @@ -3292,9 +1885,7 @@ void ivas_masa_combine_directions( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void find_n_largest_fx( const Word32 *input_fx, Word16 exp_input, @@ -3345,115 +1936,7 @@ static void find_n_largest_fx( return; } -#else -static void find_n_largest( - const float *input, - int16_t *largestIndices, - const int16_t numElements, - const int16_t numLargest ) -{ - int16_t i, j; - float largestValue; - int16_t largestIndex; - float values[MASA_FREQUENCY_BANDS]; - - for ( j = 0; j < numElements; j++ ) - { - values[j] = input[j]; - } - - for ( i = 0; i < numLargest; i++ ) - { - largestValue = values[0]; - largestIndex = 0; - for ( j = 1; j < numElements; j++ ) - { - if ( values[j] > largestValue ) - { - largestValue = values[j]; - largestIndex = j; - } - } - largestIndices[i] = largestIndex; - values[largestIndex] = -1.0f; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void move_metadata_to_qmetadata( - const MASA_ENCODER_HANDLE hMasa, - IVAS_QMETADATA_HANDLE hQMeta ) -{ - int16_t dir, sf, band; - uint8_t numCodingBands; - uint8_t numDirections; - uint8_t numSf; - MASA_METADATA_HANDLE hMeta; - - numCodingBands = hMasa->config.numCodingBands; - numDirections = hMasa->config.numberOfDirections; - numSf = hMasa->config.joinedSubframes == TRUE ? 1 : 4; - hMeta = &( hMasa->masaMetadata ); - - for ( dir = 0; dir < numDirections; dir++ ) - { - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hQMeta->q_direction[dir].band_data[band].azimuth[sf] = hMeta->directional_meta[dir].azimuth[sf][band]; - hQMeta->q_direction[dir].band_data[band].elevation[sf] = hMeta->directional_meta[dir].elevation[sf][band]; - hQMeta->q_direction[dir].band_data[band].energy_ratio[sf] = hMeta->directional_meta[dir].energy_ratio[sf][band]; - hQMeta->q_direction[dir].band_data[band].spherical_index[sf] = hMeta->directional_meta[dir].spherical_index[sf][band]; - if ( hQMeta->q_direction[dir].coherence_band_data != NULL ) - { - hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = (uint8_t) roundf( hMeta->directional_meta[dir].spread_coherence[sf][band] * UINT8_MAX ); - } - } - } - } - - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - if ( hQMeta->surcoh_band_data != NULL ) - { - hQMeta->surcoh_band_data[band].surround_coherence[sf] = (uint8_t) roundf( hMeta->common_meta.surround_coherence[sf][band] * UINT8_MAX ); - } - } - } - - if ( numDirections > 1 ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hQMeta->twoDirBands[band] = hMasa->data.twoDirBands[band]; - } - hQMeta->numTwoDirBands = hMasa->config.numTwoDirBands; - } - - /* Copy spread coherence for DCT-based coding */ - if ( numSf == 1 && hMasa->config.useCoherence ) - { - for ( dir = 0; dir < numDirections; dir++ ) - { - for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[sf] = hQMeta->q_direction[dir].coherence_band_data[band].spread_coherence[0]; - } - } - } - } - return; -} -#else static void move_metadata_to_qmetadata_fx( const MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMeta ) @@ -3543,11 +2026,9 @@ static void move_metadata_to_qmetadata_fx( return; } -#endif /* This function studies parametric MASA metadata to provide information for codec configuration */ -#ifdef IVAS_FLOAT_FIXED static void detect_metadata_composition_fx( const MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ UWord8 *joinedSubframes, /* o : Result of subframe composition */ @@ -3610,263 +2091,136 @@ static void detect_metadata_composition_fx( } } - test(); - IF( dirValid[1] == FALSE ) - { - /* This handles also case where both are false. Then we just use first dir metadata. */ - *isTwoDir = FALSE; - move16(); - } - ELSE IF( dirValid[0] == FALSE && EQ_16( dirValid[1], TRUE ) ) - { - *isTwoDir = FALSE; - move16(); - /* Copy data to first direction */ - FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - FOR( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - hMeta->directional_meta[0].azimuth_fx[sf][band] = hMeta->directional_meta[1].azimuth_fx[sf][band]; /*q22*/ - hMeta->directional_meta[0].elevation_fx[sf][band] = hMeta->directional_meta[1].elevation_fx[sf][band]; /*q22*/ - hMeta->directional_meta[0].energy_ratio_fx[sf][band] = hMeta->directional_meta[1].energy_ratio_fx[sf][band]; /*q30*/ - hMeta->directional_meta[0].spread_coherence_fx[sf][band] = hMeta->directional_meta[1].spread_coherence_fx[sf][band]; /*q15*/ - move32(); - move16(); - move16(); - move16(); - } - } - } - - IF( *isTwoDir == FALSE ) - { - /* Further checks will be done with just one direction */ - numDir = 1; - move16(); - } - } - - /* Check if data over subframes is identical. Check is done by comparing to first subframe. */ - sfSimilar = TRUE; - sf = 1; - move16(); - move16(); - WHILE( EQ_16( sfSimilar, TRUE ) && LT_16( sf, MAX_PARAM_SPATIAL_SUBFRAMES ) ) - { - test(); - sfSimilar = are_masa_subframes_similar_fx( hMeta, 0, hMeta, sf ); - sf = (Word8) add( sf, 1 ); - move16(); - } - IF( sfSimilar == TRUE ) - sfDiffer = FALSE; - ELSE - sfDiffer = TRUE; - move16(); - - /* Further checks can be done with just one subframe if they are identical */ - IF( EQ_16( sfDiffer, TRUE ) ) - nSubFrames = MAX_PARAM_SPATIAL_SUBFRAMES; - ELSE - nSubFrames = 1; - move16(); - - /* Check spread coherence */ - dir = 0; - move16(); - WHILE( cohPresent == FALSE && LT_16( dir, numDir ) ) - { - test(); - sf = 0; - move16(); - WHILE( cohPresent == FALSE && LT_16( sf, nSubFrames ) ) - { - test(); - band = 0; - move16(); - WHILE( cohPresent == FALSE /*has value zero*/ && LT_16( band, MASA_FREQUENCY_BANDS ) ) - { - test(); - /* Check coherences for presence of coherence */ - IF( GT_16( hMeta->directional_meta[dir].spread_coherence_fx[sf][band] /*Q15*/, MASA_COHERENCE_THRESHOLD_FX >> 16 ) ) /*Q15*/ - { - cohPresent = TRUE; - move16(); - } - band = (Word8) add( band, 1 ); - move16(); - } - sf = (Word8) add( sf, 1 ); - move16(); - } - dir = (Word8) add( dir, 1 ); - move16(); - } - - /* Check surround coherence separately if we do not have already knowledge of coherence */ - IF( cohPresent == FALSE ) - { - Word32 surround_coherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - Word32 diffuse_to_total_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - Word16 i, j; - FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - FOR( j = 0; j < MASA_FREQUENCY_BANDS; j++ ) - { - surround_coherence_fx[i][j] = L_deposit_h( hMeta->common_meta.surround_coherence_fx[i][j] ); /*q31*/ - diffuse_to_total_ratio_fx[i][j] = L_shl_sat( hMeta->common_meta.diffuse_to_total_ratio_fx[i][j], 1 ); /*q31*/ - } - } - cohPresent = ivas_masa_surrcoh_signicant_fx( surround_coherence_fx, diffuse_to_total_ratio_fx, nSubFrames, MASA_FREQUENCY_BANDS ); - } - - /* Set output flags */ - IF( EQ_16( sfDiffer, TRUE ) ) - { - *joinedSubframes = FALSE; - } - ELSE - { - *joinedSubframes = TRUE; - } - move16(); - *coherencePresent = cohPresent; - move16(); - - return; -} -#else -static void detect_metadata_composition( - const MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder data */ - uint8_t *joinedSubframes, /* o : Result of subframe composition */ - uint8_t *coherencePresent, /* o : Result of coherence presence */ - uint8_t *isTwoDir /* o : Result of two direction check */ -) -{ - MASA_METADATA_FRAME *hMeta; - int8_t sf, band, dir, numDir; - int16_t nSubFrames; - uint8_t dirValid[2] = { FALSE, FALSE }; - uint8_t cohPresent = FALSE; - uint8_t sfDiffer = FALSE; - uint8_t sfSimilar; - - hMeta = &( hMasa->masaMetadata ); - numDir = hMeta->descriptive_meta.numberOfDirections + 1; - - *isTwoDir = FALSE; - - /* First check for valid two directions */ - if ( numDir == 1 ) - { - dirValid[0] = TRUE; - } - else - { - /* Default assumption */ - *isTwoDir = TRUE; - - /* Check for direct-to-total ratio values */ - for ( dir = 0; dir < numDir; dir++ ) - { - sf = 0; - while ( !dirValid[dir] && sf < MAX_PARAM_SPATIAL_SUBFRAMES ) - { - band = 0; - while ( !dirValid[dir] && band < MASA_FREQUENCY_BANDS ) - { - if ( hMeta->directional_meta[dir].energy_ratio[sf][band] >= MASA_RATIO_THRESHOLD ) - { - dirValid[dir] = TRUE; - } - band++; - } - sf++; - } - } - - if ( dirValid[1] == FALSE ) + test(); + IF( dirValid[1] == FALSE ) { /* This handles also case where both are false. Then we just use first dir metadata. */ *isTwoDir = FALSE; + move16(); } - else if ( dirValid[0] == FALSE && dirValid[1] == TRUE ) + ELSE IF( dirValid[0] == FALSE && EQ_16( dirValid[1], TRUE ) ) { *isTwoDir = FALSE; + move16(); /* Copy data to first direction */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) + FOR( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) { - hMeta->directional_meta[0].azimuth[sf][band] = hMeta->directional_meta[1].azimuth[sf][band]; - hMeta->directional_meta[0].elevation[sf][band] = hMeta->directional_meta[1].elevation[sf][band]; - hMeta->directional_meta[0].energy_ratio[sf][band] = hMeta->directional_meta[1].energy_ratio[sf][band]; - hMeta->directional_meta[0].spread_coherence[sf][band] = hMeta->directional_meta[1].spread_coherence[sf][band]; + hMeta->directional_meta[0].azimuth_fx[sf][band] = hMeta->directional_meta[1].azimuth_fx[sf][band]; /*q22*/ + hMeta->directional_meta[0].elevation_fx[sf][band] = hMeta->directional_meta[1].elevation_fx[sf][band]; /*q22*/ + hMeta->directional_meta[0].energy_ratio_fx[sf][band] = hMeta->directional_meta[1].energy_ratio_fx[sf][band]; /*q30*/ + hMeta->directional_meta[0].spread_coherence_fx[sf][band] = hMeta->directional_meta[1].spread_coherence_fx[sf][band]; /*q15*/ + move32(); + move16(); + move16(); + move16(); } } } - if ( *isTwoDir == FALSE ) + IF( *isTwoDir == FALSE ) { /* Further checks will be done with just one direction */ numDir = 1; + move16(); } } /* Check if data over subframes is identical. Check is done by comparing to first subframe. */ sfSimilar = TRUE; sf = 1; - while ( ( sfSimilar == TRUE ) && ( sf < MAX_PARAM_SPATIAL_SUBFRAMES ) ) + move16(); + move16(); + WHILE( EQ_16( sfSimilar, TRUE ) && LT_16( sf, MAX_PARAM_SPATIAL_SUBFRAMES ) ) { - sfSimilar = are_masa_subframes_similar( hMeta, 0, hMeta, sf ); - sf++; + test(); + sfSimilar = are_masa_subframes_similar_fx( hMeta, 0, hMeta, sf ); + sf = (Word8) add( sf, 1 ); + move16(); } - sfDiffer = sfSimilar == TRUE ? FALSE : TRUE; + IF( sfSimilar == TRUE ) + sfDiffer = FALSE; + ELSE + sfDiffer = TRUE; + move16(); /* Further checks can be done with just one subframe if they are identical */ - nSubFrames = sfDiffer == TRUE ? MAX_PARAM_SPATIAL_SUBFRAMES : 1; + IF( EQ_16( sfDiffer, TRUE ) ) + nSubFrames = MAX_PARAM_SPATIAL_SUBFRAMES; + ELSE + nSubFrames = 1; + move16(); /* Check spread coherence */ dir = 0; - while ( cohPresent == FALSE && dir < numDir ) + move16(); + WHILE( cohPresent == FALSE && LT_16( dir, numDir ) ) { + test(); sf = 0; - while ( cohPresent == FALSE && sf < nSubFrames ) + move16(); + WHILE( cohPresent == FALSE && LT_16( sf, nSubFrames ) ) { + test(); band = 0; - while ( cohPresent == FALSE && band < MASA_FREQUENCY_BANDS ) + move16(); + WHILE( cohPresent == FALSE /*has value zero*/ && LT_16( band, MASA_FREQUENCY_BANDS ) ) { + test(); /* Check coherences for presence of coherence */ - if ( hMeta->directional_meta[dir].spread_coherence[sf][band] >= MASA_COHERENCE_THRESHOLD ) + IF( GT_16( hMeta->directional_meta[dir].spread_coherence_fx[sf][band] /*Q15*/, MASA_COHERENCE_THRESHOLD_FX >> 16 ) ) /*Q15*/ { cohPresent = TRUE; + move16(); } - band++; + band = (Word8) add( band, 1 ); + move16(); } - sf++; + sf = (Word8) add( sf, 1 ); + move16(); } - dir++; + dir = (Word8) add( dir, 1 ); + move16(); } /* Check surround coherence separately if we do not have already knowledge of coherence */ - if ( cohPresent == FALSE ) + IF( cohPresent == FALSE ) { - cohPresent = ivas_masa_surrcoh_signicant( hMeta->common_meta.surround_coherence, hMeta->common_meta.diffuse_to_total_ratio, nSubFrames, MASA_FREQUENCY_BANDS ); + Word32 surround_coherence_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word32 diffuse_to_total_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word16 i, j; + FOR( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + FOR( j = 0; j < MASA_FREQUENCY_BANDS; j++ ) + { + surround_coherence_fx[i][j] = L_deposit_h( hMeta->common_meta.surround_coherence_fx[i][j] ); /*q31*/ + diffuse_to_total_ratio_fx[i][j] = L_shl_sat( hMeta->common_meta.diffuse_to_total_ratio_fx[i][j], 1 ); /*q31*/ + } + } + cohPresent = ivas_masa_surrcoh_signicant_fx( surround_coherence_fx, diffuse_to_total_ratio_fx, nSubFrames, MASA_FREQUENCY_BANDS ); } /* Set output flags */ - *joinedSubframes = sfDiffer == TRUE ? FALSE : TRUE; + IF( EQ_16( sfDiffer, TRUE ) ) + { + *joinedSubframes = FALSE; + } + ELSE + { + *joinedSubframes = TRUE; + } + move16(); *coherencePresent = cohPresent; + move16(); return; } -#endif // IVAS_FLOAT_FIXED /* Check and compensate energy ratios. This function verifies that energy ratios follow the principle of summing to one. * In addition, it implements simple remainder-to-total handling where remainder energy is proportionally added to other * ratios. */ -#ifdef IVAS_FLOAT_FIXED static void compensate_energy_ratios_fx( MASA_ENCODER_HANDLE hMasa ) { @@ -3876,343 +2230,59 @@ static void compensate_energy_ratios_fx( UWord8 numDirs; hMeta = &( hMasa->masaMetadata ); - numDirs = (UWord8) add( hMeta->descriptive_meta.numberOfDirections, 1 ); - - FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - FOR( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - /* Remainder is always set to zero and energy removal is compensated in following steps - * to other ratios. */ - hMeta->common_meta.remainder_to_total_ratio_fx[sf][band] = 0; // Q30 - move32(); - - ratioSum = 0; - move32(); - FOR( dir = 0; dir < numDirs; dir++ ) - { - ratioSum = L_add( ratioSum, hMeta->directional_meta[dir].energy_ratio_fx[sf][band] ); // Q30 - } - ratioSum = L_add( ratioSum, hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] ); // Q30 - - IF( ratioSum == 0 ) - { - FOR( dir = 0; dir < numDirs; dir++ ) - { - hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = 0; // Q30 - move32(); - } - hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = ONE_IN_Q30; // Q30 - move32(); - } - // ELSE IF( NE_32( ratioSum, ONE_IN_Q30 ) ) - ELSE /* Removing the check against 1 works well!!! */ - { - Word16 exp_diff; - FOR( dir = 0; dir < numDirs; dir++ ) - { - hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = - BASOP_Util_Divide3232_Scale_cadence( hMeta->directional_meta[dir].energy_ratio_fx[sf][band], ratioSum, &exp_diff ); - move32(); - hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = L_shl( hMeta->directional_meta[dir].energy_ratio_fx[sf][band], sub( exp_diff, Q1 ) ); // Q30 - move32(); - } - hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = - BASOP_Util_Divide3232_Scale_cadence( hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band], ratioSum, &exp_diff ); - move32(); - hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = L_shl( hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band], sub( exp_diff, Q1 ) ); // Q30 - move32(); - } - } - } - - return; -} -#else -static void compensate_energy_ratios( - MASA_ENCODER_HANDLE hMasa ) -{ - int16_t sf, band, dir; - float ratioSum; - MASA_METADATA_HANDLE hMeta; - uint8_t numDirs; - - hMeta = &( hMasa->masaMetadata ); - numDirs = hMeta->descriptive_meta.numberOfDirections + 1; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - /* Remainder is always set to zero and energy removal is compensated in following steps - * to other ratios. */ - hMeta->common_meta.remainder_to_total_ratio[sf][band] = 0.0f; - - ratioSum = 0; - for ( dir = 0; dir < numDirs; dir++ ) - { - ratioSum += hMeta->directional_meta[dir].energy_ratio[sf][band]; - } - ratioSum += hMeta->common_meta.diffuse_to_total_ratio[sf][band]; - - if ( ratioSum == 0.0f ) - { - for ( dir = 0; dir < numDirs; dir++ ) - { - hMeta->directional_meta[dir].energy_ratio[sf][band] = 0.0f; - } - hMeta->common_meta.diffuse_to_total_ratio[sf][band] = 1.0f; - } - else if ( ratioSum != 1.0f ) - { - for ( dir = 0; dir < numDirs; dir++ ) - { - hMeta->directional_meta[dir].energy_ratio[sf][band] /= ratioSum; - } - hMeta->common_meta.diffuse_to_total_ratio[sf][band] /= ratioSum; - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/* If the bit budget is very low, reduce metadata further to either 1 subframe and 5 bands, or 1 band and 4 subframes, based on which works better */ -static void reduce_metadata_further( - MASA_ENCODER_HANDLE hMasa, - IVAS_QMETADATA_HANDLE hqmetadata, - const IVAS_FORMAT ivas_format ) -{ - int16_t sf; - int16_t band; - int16_t selectedBand; - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][LOWBITRATE_NUM_BANDS]; - float totalEnergySum; - uint8_t numCodingBands; - uint8_t computeCoherence; - float onset_filter; - float bandEnergy; - uint8_t mergeOverFreqBands; - float meanRatio; - - numCodingBands = hMasa->config.numCodingBands; - computeCoherence = hMasa->config.useCoherence && hMasa->config.coherencePresent; - - /* Set default values */ - selectedBand = 0; - mergeOverFreqBands = 0; - - /* Get energy for the input data in 4-subframe, 5-band format */ - totalEnergySum = 0.0f; - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) /* Energy data is in 4-subframe, 24-band format */ - { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - int16_t brange[2]; - float eneSum; - int16_t m; - - for ( band = 0; band < numCodingBands; band++ ) - { - brange[0] = hMasa->data.band_mapping[band]; - brange[1] = hMasa->data.band_mapping[band + 1]; - - eneSum = 0.0f; - for ( m = brange[0]; m < brange[1]; m++ ) - { - eneSum += hMasa->data.energy[sf][m]; - } - energy[sf][band] = eneSum; - totalEnergySum += eneSum; - } - } - } - else /* Energy data is already in 4-subframe, 5-band format */ - { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - energy[sf][band] = hMasa->data.energy[sf][band]; - totalEnergySum += energy[sf][band]; - } - } - } - - /* Determine onsets */ - hMasa->data.onset_detector_1 = hMasa->data.onset_detector_1 * LOWBITRATE_ONSET_ALPHA; - hMasa->data.onset_detector_1 = max( hMasa->data.onset_detector_1, totalEnergySum ); - - hMasa->data.onset_detector_2 = LOWBITRATE_ONSET_BETA * hMasa->data.onset_detector_2 + ( 1.0f - LOWBITRATE_ONSET_BETA ) * hMasa->data.onset_detector_1; - hMasa->data.onset_detector_2 = LOWBITRATE_ONSET_GAIN * min( hMasa->data.onset_detector_1, hMasa->data.onset_detector_2 ); - - onset_filter = min( max( hMasa->data.onset_detector_2 / ( hMasa->data.onset_detector_1 + EPSILON ), 0.0f ), 1.0f ); - - /* If we have onset, continue checking if we should reduce in frequency instead of time. */ - if ( onset_filter < 0.99f ) - { - /* Determine one frequency band to use to represent all frequency bands */ - for ( band = numCodingBands - 1; band >= 0; band-- ) - { - float threshold; - float bandRatio; - - threshold = totalEnergySum / ( MAX_PARAM_SPATIAL_SUBFRAMES * LOWBITRATE_NUM_BANDS ) * 0.5f; /* Average energy multiplied with energy ratio of 0.5f */ - bandRatio = hqmetadata->q_direction[0].band_data[band].energy_ratio[0]; - - bandEnergy = 0.0f; - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - bandEnergy += energy[sf][band]; - } - - if ( bandEnergy / MAX_PARAM_SPATIAL_SUBFRAMES * bandRatio > threshold ) - { - selectedBand = band; - break; - } - } - - /* Determine if to merge over frequency instead of time */ - meanRatio = 0.0f; - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - meanRatio += hqmetadata->q_direction[0].band_data[band].energy_ratio[sf] * energy[sf][band]; - } - } - meanRatio /= ( totalEnergySum + EPSILON ); - - /* If the ratio of the selected band is larger than the average ratio of all bands and if there is an onset, merge over frequency bands. - * Otherwise, merge over subframes. */ - if ( hqmetadata->q_direction[0].band_data[selectedBand].energy_ratio[0] > meanRatio ) - { - mergeOverFreqBands = 1; - } - else - { - mergeOverFreqBands = 0; - } - } - else - { - mergeOverFreqBands = 0; - } - - /* Merge values over subframes or frequency bands, depending on which one is less important */ - if ( !mergeOverFreqBands ) /* Merge values over subframes */ - { - float xSum, ySum, zSum; - float bandSumEnergy; - float aziRad, eleRad; - float x, y, z; - float veclen; - - for ( band = 0; band < numCodingBands; band++ ) - { - xSum = 0.0f; - ySum = 0.0f; - zSum = 0.0f; - bandSumEnergy = 0.0f; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - aziRad = hqmetadata->q_direction[0].band_data[band].azimuth[sf] / 180.0f * EVS_PI; - eleRad = hqmetadata->q_direction[0].band_data[band].elevation[sf] / 180.0f * EVS_PI; - veclen = hqmetadata->q_direction[0].band_data[band].energy_ratio[sf] * energy[sf][band]; - - x = cosf( aziRad ) * cosf( eleRad ) * veclen; - y = sinf( aziRad ) * cosf( eleRad ) * veclen; - z = sinf( eleRad ) * veclen; - - xSum += x; - ySum += y; - zSum += z; - - bandSumEnergy += energy[sf][band]; - } - - aziRad = atan2f( ySum, xSum ); - eleRad = atan2f( zSum, sqrtf( xSum * xSum + ySum * ySum ) ); - - hqmetadata->q_direction[0].band_data[band].azimuth[0] = aziRad / EVS_PI * 180.0f; - hqmetadata->q_direction[0].band_data[band].elevation[0] = eleRad / EVS_PI * 180.0f; - - /* Energy ratio is already merged through time */ - - if ( computeCoherence && hqmetadata->q_direction[0].coherence_band_data != NULL ) - { - float spreadCoh; - float spreadCohSum = 0.0f; - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - spreadCoh = (float) hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] / 255.0f; - spreadCohSum += spreadCoh * energy[sf][band]; - } - hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[0] = (uint8_t) roundf( spreadCohSum / ( bandSumEnergy + EPSILON ) * 255.0f ); - - /* Copy spread coherence to the rest of subframes for the coherence coding algorithm. */ - for ( sf = 1; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[0]; - } - } - - /* Surround coherence is already merged through time */ - } - } + numDirs = (UWord8) add( hMeta->descriptive_meta.numberOfDirections, 1 ); - hqmetadata->q_direction->cfg.nblocks = 1; - hMasa->config.joinedSubframes = 1; - } - else /* Merge values over frequency bands */ + FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { - /* Use the selected frequency band to represent all data */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + FOR( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) { - hqmetadata->q_direction[0].band_data[0].azimuth[sf] = hqmetadata->q_direction[0].band_data[selectedBand].azimuth[sf]; - hqmetadata->q_direction[0].band_data[0].elevation[sf] = hqmetadata->q_direction[0].band_data[selectedBand].elevation[sf]; - hqmetadata->q_direction[0].band_data[0].energy_ratio[sf] = hqmetadata->q_direction[0].band_data[selectedBand].energy_ratio[sf]; - if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) - { - hqmetadata->q_direction[0].coherence_band_data[0].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[selectedBand].spread_coherence[sf]; - } - if ( hqmetadata->surcoh_band_data != NULL ) + /* Remainder is always set to zero and energy removal is compensated in following steps + * to other ratios. */ + hMeta->common_meta.remainder_to_total_ratio_fx[sf][band] = 0; // Q30 + move32(); + + ratioSum = 0; + move32(); + FOR( dir = 0; dir < numDirs; dir++ ) { - hqmetadata->surcoh_band_data[0].surround_coherence[sf] = hqmetadata->surcoh_band_data[selectedBand].surround_coherence[sf]; + ratioSum = L_add( ratioSum, hMeta->directional_meta[dir].energy_ratio_fx[sf][band] ); // Q30 } - } + ratioSum = L_add( ratioSum, hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] ); // Q30 - /* Copy coherence to rest of bands for the coherence coding algorithm. */ - for ( band = 1; band < numCodingBands; band++ ) - { - if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) + IF( ratioSum == 0 ) { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + FOR( dir = 0; dir < numDirs; dir++ ) { - hqmetadata->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hqmetadata->q_direction[0].coherence_band_data[0].spread_coherence[sf]; + hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = 0; // Q30 + move32(); } + hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = ONE_IN_Q30; // Q30 + move32(); } - if ( hqmetadata->q_direction[0].coherence_band_data != NULL ) + // ELSE IF( NE_32( ratioSum, ONE_IN_Q30 ) ) + ELSE /* Removing the check against 1 works well!!! */ { - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) + Word16 exp_diff; + FOR( dir = 0; dir < numDirs; dir++ ) { - hqmetadata->surcoh_band_data[band].surround_coherence[sf] = hqmetadata->surcoh_band_data[0].surround_coherence[sf]; + hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = + BASOP_Util_Divide3232_Scale_cadence( hMeta->directional_meta[dir].energy_ratio_fx[sf][band], ratioSum, &exp_diff ); + move32(); + hMeta->directional_meta[dir].energy_ratio_fx[sf][band] = L_shl( hMeta->directional_meta[dir].energy_ratio_fx[sf][band], sub( exp_diff, Q1 ) ); // Q30 + move32(); } + hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = + BASOP_Util_Divide3232_Scale_cadence( hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band], ratioSum, &exp_diff ); + move32(); + hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band] = L_shl( hMeta->common_meta.diffuse_to_total_ratio_fx[sf][band], sub( exp_diff, Q1 ) ); // Q30 + move32(); } } - - hqmetadata->q_direction[0].cfg.nbands = 1; } return; } -#else + /* If the bit budget is very low, reduce metadata further to either 1 subframe and 5 bands, or 1 band and 4 subframes, based on which works better */ static void reduce_metadata_further_fx( MASA_ENCODER_HANDLE hMasa, @@ -4557,10 +2627,8 @@ static void reduce_metadata_further_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_lfe_to_total_energy_ratio_fx( MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ @@ -4778,164 +2846,6 @@ static Word16 encode_lfe_to_total_energy_ratio_fx( return lfeBitsWritten; } -#else -static int16_t encode_lfe_to_total_energy_ratio( - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder structure */ - BSTR_ENC_HANDLE hMetaData, /* i/o: Metadata bitstream handle */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - int16_t i; - float xq; - int16_t VQLevels; - float maxLFESubFrameEner; - float log2LFEaverage; - float log2LFEratio[4]; - float xqv[4]; - float linearLFEaverage; - int16_t lfeToTotalEnergyRatioIndices[3]; - int16_t lfeAdaptiveVQBits; - int16_t lfeBitsWritten; - - VQLevels = 0; - lfeAdaptiveVQBits = 0; - - /* Determine maximum amount of LFE energy in any subframe */ - maxLFESubFrameEner = 0.0f; - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - if ( hMasa->data.lfeToTotalEnergyRatio[i] > maxLFESubFrameEner ) - { - maxLFESubFrameEner = hMasa->data.lfeToTotalEnergyRatio[i]; - } - } - - /* Set default values for the indices */ - for ( i = 0; i < 3; i++ ) - { - lfeToTotalEnergyRatioIndices[i] = 0; - } - - /* Check if there is enough energy in any subframe. If not, send only 1 bit (0) and abort. */ - /* If there is enough LFE energy at least in one subframe, quantize it. */ - if ( maxLFESubFrameEner > 0.005f ) - { - /* Convert energy to log2 domain, and clamp it to reasonable values */ - log2LFEaverage = 0.0f; - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - log2LFEratio[i] = log2f( max( 0.001f, hMasa->data.lfeToTotalEnergyRatio[i] ) ); - if ( log2LFEratio[i] > 1.0f ) /* Corresponds to linear value 2.0f */ - { - log2LFEratio[i] = 1.0f; - } - else if ( log2LFEratio[i] < -9.0f ) - { - log2LFEratio[i] = -9.0f; - } - log2LFEaverage += 0.25f * log2LFEratio[i]; - } - - if ( ivas_total_brate == IVAS_13k2 ) - { - /* Calculate adaptive 1-bit LFE quantizer index */ - linearLFEaverage = exp2f( log2LFEaverage ); /* Convert back to linear domain */ - if ( ( linearLFEaverage > MCMASA_LFE_1BIT_THRES ) && ( linearLFEaverage > ( 0.5f * ( MCMASA_LFE_BETA + hMasa->data.prevq_lfeToTotalEnergyRatio ) + 0.5f * ( MCMASA_LFE_ALPHA * hMasa->data.prevq_lfeToTotalEnergyRatio ) ) ) ) - { - lfeToTotalEnergyRatioIndices[0] = 1; - if ( hMasa->data.prevq_lfeIndex == 1 ) - { - hMasa->data.prevq_lfeToTotalEnergyRatio = hMasa->data.prevq_lfeToTotalEnergyRatio + MCMASA_LFE_THETA * MCMASA_LFE_BETA; /* larger "bump-up" to LFE-to-total energy ratio */ - } - else - { - hMasa->data.prevq_lfeToTotalEnergyRatio = hMasa->data.prevq_lfeToTotalEnergyRatio + MCMASA_LFE_BETA; /* default "bump-up" to LFE-to-total energy ratio */ - } - } - else - { - hMasa->data.prevq_lfeToTotalEnergyRatio = MCMASA_LFE_ALPHA * hMasa->data.prevq_lfeToTotalEnergyRatio; /* exponential decay */ - } - - if ( hMasa->data.prevq_lfeToTotalEnergyRatio > 1.0f ) - { - hMasa->data.prevq_lfeToTotalEnergyRatio = 1.0f; - } - hMasa->data.prevq_lfeIndex = lfeToTotalEnergyRatioIndices[0]; /* Update to previous frame's index memories */ - } - else /* Bitrate >= 16.4 kbps */ - { - /* Do 1st stage scalar quantization */ - lfeToTotalEnergyRatioIndices[0] = 1; - lfeToTotalEnergyRatioIndices[1] = usquant( log2LFEaverage, &xq, MCMASA_LFE_QLOW, MCMASA_LFE_DELTA, 8 ); - - if ( ivas_total_brate >= IVAS_24k4 ) /* Vector quantization is applied if bitrate >= 24.4 kbps */ - { - /* Remove scalar value from the vector*/ - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - log2LFEratio[i] -= xq; - } - - /* Vector quantize residual with energy adaptive bit allocation */ - switch ( lfeToTotalEnergyRatioIndices[1] ) - { - case 0: - case 1: - VQLevels = 0; - lfeAdaptiveVQBits = 0; - break; - case 2: - VQLevels = 2; - lfeAdaptiveVQBits = 1; - break; - case 3: - VQLevels = 4; - lfeAdaptiveVQBits = 2; - break; - case 4: - VQLevels = 8; - lfeAdaptiveVQBits = 3; - break; - default: - VQLevels = 16; - lfeAdaptiveVQBits = 4; - } - - if ( VQLevels > 0 ) - { - lfeToTotalEnergyRatioIndices[2] = vquant( log2LFEratio, 0, xqv, McMASA_LFEGain_vectors, 4, VQLevels ); - } - } - } - } - - /* Write first LFE bit */ - lfeBitsWritten = 0; - push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[0], 1 ); - lfeBitsWritten += 1; - - if ( lfeToTotalEnergyRatioIndices[0] == 1 && ivas_total_brate >= IVAS_16k4 ) - { - /* If bitrate >= 16.4kbit/s, send 1-bit on/off + 3-bit scalar */ - push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[1], 3 ); - lfeBitsWritten += 3; - - /* If bitrate >= 24.4kbit/s, use adaptive 1 + (3.. 7) bit quantizer */ - if ( ivas_total_brate >= IVAS_24k4 ) - { - /* Vector quantize residual with energy adaptive bit allocation */ - if ( lfeAdaptiveVQBits > 0 ) - { - push_next_indice( hMetaData, lfeToTotalEnergyRatioIndices[2], lfeAdaptiveVQBits ); - lfeBitsWritten += lfeAdaptiveVQBits; - } - } - } - - return lfeBitsWritten; -} -#endif /*-------------------------------------------------------------------* @@ -4943,75 +2853,6 @@ static int16_t encode_lfe_to_total_energy_ratio( * * Reconfigure IVAS MASA encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_enc_reconfigure( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t n, tmp; - int16_t sce_id, cpe_id; - int32_t ivas_total_brate; - int32_t ism_total_brate; - - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - ism_total_brate = 0; - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - ism_total_brate += st_ivas->hSCE[sce_id]->element_brate; - } - } - - if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) - { - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { -#ifdef IVAS_FLOAT_FIXED - copy_encoder_config_fx( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); -#else - copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 ); -#endif - st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport; - st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS; - - /* prepare bitstream buffers */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { -#ifdef IVAS_FLOAT_FIXED - copy_encoder_config_fx( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); -#else - copy_encoder_config( st_ivas, st_ivas->hCPE[cpe_id]->hCoreCoder[n], 0 ); -#endif - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->total_brate = st_ivas->hCPE[cpe_id]->element_brate / ( st_ivas->nCPE > 1 ? 1 : CPE_CHANNELS ); /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - } - - if ( ivas_total_brate - ism_total_brate < MIN_BRATE_MDCT_STEREO ) - { - st_ivas->hCPE[cpe_id]->element_mode = IVAS_CPE_DFT; - } - else - { - st_ivas->hCPE[cpe_id]->element_mode = IVAS_CPE_MDCT; - } - } - -#ifndef IVAS_FLOAT_FIXED - ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &tmp, &tmp, &tmp, st_ivas->hEncoderConfig->ivas_format, st_ivas->ism_mode, ism_total_brate ); -#else - ivas_masa_set_elements_fx( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, st_ivas->hQMetaData, &tmp, &tmp, &tmp, st_ivas->hEncoderConfig->ivas_format, st_ivas->ism_mode, ism_total_brate ); -#endif - } - - return; -} -#else void ivas_masa_enc_reconfigure_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -5090,14 +2931,12 @@ void ivas_masa_enc_reconfigure_fx( return; } -#endif /*-------------------------------------------------------------------* * average_masa_metadata() * * Average MASA metadata frame subframe contents: applies aggregation over time *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void average_masa_metadata_fx( MASA_METADATA_FRAME *hMeta, Word32 energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /*i*/ @@ -5253,118 +3092,6 @@ static void average_masa_metadata_fx( return; } -#else - -static void average_masa_metadata( - MASA_METADATA_FRAME *hMeta, - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - const SPHERICAL_GRID_DATA *Sph_Grid16, - const uint8_t useSphGrid ) -{ - int16_t i, j, k; - float azi_rad, ele_rad; - uint8_t numDirections; - - /* use the nominal values without data-adaptivity */ - numDirections = hMeta->descriptive_meta.numberOfDirections + 1; - - /* azi/ele/nrg into vectors for each sub-frame and band */ - for ( i = 0; i < numDirections; i++ ) - { - for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) - { - float x_sum, y_sum, z_sum, energy_sum, vec_len, spread_coh_sum, surr_coh_sum; - - x_sum = 0.0f; - y_sum = 0.0f; - z_sum = 0.0f; - energy_sum = 0.0f; - spread_coh_sum = 0.0f; - surr_coh_sum = 0.0f; - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - azi_rad = hMeta->directional_meta[i].azimuth[j][k] / 180.0f * EVS_PI; - ele_rad = hMeta->directional_meta[i].elevation[j][k] / 180.0f * EVS_PI; - vec_len = hMeta->directional_meta[i].energy_ratio[j][k] * energy[j][k]; - - /* energy-weighted sum over subframes */ - x_sum += cosf( azi_rad ) * cosf( ele_rad ) * vec_len; - y_sum += sinf( azi_rad ) * cosf( ele_rad ) * vec_len; - z_sum += sinf( ele_rad ) * vec_len; - - energy_sum += energy[j][k]; - - spread_coh_sum += hMeta->directional_meta[i].spread_coherence[j][k] * energy[j][k]; - if ( i == 0 ) - { - /* this is in common metadata and not in each direction */ - surr_coh_sum += hMeta->common_meta.surround_coherence[j][k] * energy[j][k]; - } - } - - /* the data from the combined sub-frames is written into the first sub-frame band */ - j = 0; - hMeta->directional_meta[i].azimuth[j][k] = atan2f( y_sum, x_sum ) / EVS_PI * 180.0f; - hMeta->directional_meta[i].elevation[j][k] = atan2f( z_sum, sqrtf( x_sum * x_sum + y_sum * y_sum ) ) / EVS_PI * 180.0f; - if ( useSphGrid == TRUE ) - { -#ifndef IVAS_FLOAT_FIXED - hMeta->directional_meta[i].spherical_index[j][k] = index_theta_phi_16( &( hMeta->directional_meta[i].elevation[j][k] ), - &( hMeta->directional_meta[i].azimuth[j][k] ), Sph_Grid16 ); -#else - hMeta->directional_meta[i].elevation_fx[j][k] = floatToFixed( hMeta->directional_meta[i].elevation[j][k], Q22 ); - hMeta->directional_meta[i].azimuth_fx[j][k] = floatToFixed( hMeta->directional_meta[i].azimuth[j][k], Q22 ); - - hMeta->directional_meta[i].spherical_index[j][k] = index_theta_phi_16_fx( &( hMeta->directional_meta[i].elevation_fx[j][k] ), - &( hMeta->directional_meta[i].azimuth_fx[j][k] ), Sph_Grid16 ); - - hMeta->directional_meta[i].elevation[j][k] = fixedToFloat( hMeta->directional_meta[i].elevation_fx[j][k], Q22 ); - hMeta->directional_meta[i].azimuth[j][k] = fixedToFloat( hMeta->directional_meta[i].azimuth_fx[j][k], Q22 ); -#endif - } - vec_len = sqrtf( x_sum * x_sum + y_sum * y_sum + z_sum * z_sum ); - hMeta->directional_meta[i].energy_ratio[j][k] = vec_len / ( energy_sum + EPSILON ); - - hMeta->directional_meta[i].spread_coherence[j][k] = spread_coh_sum / ( energy_sum + EPSILON ); - if ( i == 0 ) - { - hMeta->common_meta.surround_coherence[j][k] = surr_coh_sum / ( energy_sum + EPSILON ); - } - - /* copy the same value to all subframes */ - for ( j = 1; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - hMeta->directional_meta[i].azimuth[j][k] = hMeta->directional_meta[i].azimuth[0][k]; - hMeta->directional_meta[i].elevation[j][k] = hMeta->directional_meta[i].elevation[0][k]; - hMeta->directional_meta[i].energy_ratio[j][k] = hMeta->directional_meta[i].energy_ratio[0][k]; - hMeta->directional_meta[i].spread_coherence[j][k] = hMeta->directional_meta[i].spread_coherence[0][k]; - if ( i == 0 ) - { - hMeta->common_meta.surround_coherence[j][k] = hMeta->common_meta.surround_coherence[0][k]; - } - } - } - } - - for ( k = 0; k < MASA_FREQUENCY_BANDS; k++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( numDirections == 2 ) - { - hMeta->common_meta.diffuse_to_total_ratio[j][k] = max( 0.0f, 1.0f - hMeta->directional_meta[1].energy_ratio[j][k] - hMeta->directional_meta[0].energy_ratio[j][k] ); - } - else - { - hMeta->common_meta.diffuse_to_total_ratio[j][k] = max( 0.0f, 1.0f - hMeta->directional_meta[0].energy_ratio[j][k] ); - } - hMeta->common_meta.remainder_to_total_ratio[j][k] = 0.0f; - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -5372,7 +3099,6 @@ static void average_masa_metadata( * * Copy MASA metadata frame subframe contents *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void copy_masa_metadata_subframe_fx( const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ const UWord8 sfFrom, /* i : subframe index of the copy source */ @@ -5398,40 +3124,12 @@ static void copy_masa_metadata_subframe_fx( return; } -#else -static void copy_masa_metadata_subframe( - const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metdata to be copied */ - const uint8_t sfFrom, /* i : subframe index of the copy source */ - MASA_METADATA_HANDLE hMetaTo, /* o : MASA frame metadata copy destination */ - const uint8_t sfTo /* i : subframe index of the copy target */ -) -{ - uint8_t dir; - - /* directional metadata */ - for ( dir = 0; dir < MASA_MAXIMUM_DIRECTIONS; dir++ ) - { - mvr2r( hMetaFrom->directional_meta[dir].azimuth[sfFrom], hMetaTo->directional_meta[dir].azimuth[sfTo], MASA_FREQUENCY_BANDS ); - mvr2r( hMetaFrom->directional_meta[dir].elevation[sfFrom], hMetaTo->directional_meta[dir].elevation[sfTo], MASA_FREQUENCY_BANDS ); - mvr2r( hMetaFrom->directional_meta[dir].energy_ratio[sfFrom], hMetaTo->directional_meta[dir].energy_ratio[sfTo], MASA_FREQUENCY_BANDS ); - mvr2r( hMetaFrom->directional_meta[dir].spread_coherence[sfFrom], hMetaTo->directional_meta[dir].spread_coherence[sfTo], MASA_FREQUENCY_BANDS ); - } - - /* common metadata */ - mvr2r( hMetaFrom->common_meta.diffuse_to_total_ratio[sfFrom], hMetaTo->common_meta.diffuse_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); - mvr2r( hMetaFrom->common_meta.surround_coherence[sfFrom], hMetaTo->common_meta.surround_coherence[sfTo], MASA_FREQUENCY_BANDS ); - mvr2r( hMetaFrom->common_meta.remainder_to_total_ratio[sfFrom], hMetaTo->common_meta.remainder_to_total_ratio[sfTo], MASA_FREQUENCY_BANDS ); - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * copy_masa_metadata() * * Copy MASA metada frame contents *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void copy_masa_metadata_fx( const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ MASA_METADATA_HANDLE hMetaTo /* o : MASA frame metadata copy destination */ @@ -5469,37 +3167,6 @@ static void copy_masa_metadata_fx( return; } -#else -static void copy_masa_metadata( - const MASA_METADATA_HANDLE hMetaFrom, /* i : MASA frame metadata to be copied */ - MASA_METADATA_HANDLE hMetaTo /* o : MASA frame metadata copy destination */ -) -{ - uint8_t sf, byte_idx; - - /* descriptive metadata */ - for ( byte_idx = 0; byte_idx < 8; byte_idx++ ) - { - hMetaTo->descriptive_meta.formatDescriptor[byte_idx] = hMetaFrom->descriptive_meta.formatDescriptor[byte_idx]; - } - - hMetaTo->descriptive_meta.numberOfDirections = hMetaFrom->descriptive_meta.numberOfDirections; - hMetaTo->descriptive_meta.numberOfChannels = hMetaFrom->descriptive_meta.numberOfChannels; - hMetaTo->descriptive_meta.sourceFormat = hMetaFrom->descriptive_meta.sourceFormat; - hMetaTo->descriptive_meta.transportDefinition = hMetaFrom->descriptive_meta.transportDefinition; - hMetaTo->descriptive_meta.channelAngle = hMetaFrom->descriptive_meta.channelAngle; - hMetaTo->descriptive_meta.channelDistance = hMetaFrom->descriptive_meta.channelDistance; - hMetaTo->descriptive_meta.channelLayout = hMetaFrom->descriptive_meta.channelLayout; - - /* directional and common metadata */ - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - copy_masa_metadata_subframe( hMetaFrom, sf, hMetaTo, sf ); - } - - return; -} -#endif /*-------------------------------------------------------------------* * are_masa_subframes_similar() @@ -5508,7 +3175,6 @@ static void copy_masa_metadata( *-------------------------------------------------------------------*/ /* r: similarity decision */ -#ifdef IVAS_FLOAT_FIXED static UWord8 are_masa_subframes_similar_fx( const MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ const UWord8 sf1_idx, /* i : index of the subframe of frame1 to inspect */ @@ -5616,95 +3282,6 @@ static UWord8 are_masa_subframes_similar_fx( return TRUE; } } -#else -static uint8_t are_masa_subframes_similar( - const MASA_METADATA_HANDLE frame1, /* i : MASA metadata frame 1 */ - const uint8_t sf1_idx, /* i : index of the subframe of frame1 to inspect */ - const MASA_METADATA_HANDLE frame2, /* i : MASA metadata frame 2 */ - const uint8_t sf2_idx /* i : index of the subframe of frame2 to inspect */ -) -{ - uint8_t num_dir; - uint8_t dir; - uint8_t band_idx; - uint8_t sf_differ; - - num_dir = frame1->descriptive_meta.numberOfDirections; - dir = 0; - band_idx = 0; - sf_differ = FALSE; - - if ( num_dir != frame2->descriptive_meta.numberOfDirections ) - { - sf_differ = TRUE; - } - else - { - /* check per-direction metadata */ - dir = 0; - band_idx = 0; - - while ( ( sf_differ == FALSE ) && ( dir <= num_dir ) ) - { - band_idx = 0; - while ( ( sf_differ == FALSE ) && ( band_idx < MASA_FREQUENCY_BANDS ) ) - { - float azi_dif; - azi_dif = fabsf( frame1->directional_meta[dir].azimuth[sf1_idx][band_idx] - frame2->directional_meta[dir].azimuth[sf2_idx][band_idx] ); - azi_dif = azi_dif > 180.0f ? 360.0f - azi_dif : azi_dif; - - if ( azi_dif > MASA_ANGLE_TOLERANCE ) - { - sf_differ = TRUE; - break; - } - - if ( fabsf( frame1->directional_meta[dir].elevation[sf1_idx][band_idx] - frame2->directional_meta[dir].elevation[sf2_idx][band_idx] ) > MASA_ANGLE_TOLERANCE ) - { - sf_differ = TRUE; - break; - } - - if ( fabsf( frame1->directional_meta[dir].energy_ratio[sf1_idx][band_idx] - frame2->directional_meta[dir].energy_ratio[sf2_idx][band_idx] ) > MASA_RATIO_TOLERANCE ) - { - sf_differ = TRUE; - break; - } - - if ( fabsf( frame1->directional_meta[dir].spread_coherence[sf1_idx][band_idx] - frame2->directional_meta[dir].spread_coherence[sf2_idx][band_idx] ) > MASA_COHERENCE_TOLERANCE ) - { - sf_differ = TRUE; - break; - } - - band_idx++; - } - dir++; - } - - /* check the common metadata */ - while ( ( sf_differ == FALSE ) && ( band_idx < MASA_FREQUENCY_BANDS ) ) - { - if ( fabsf( frame1->common_meta.surround_coherence[sf1_idx][band_idx] - frame2->common_meta.surround_coherence[sf2_idx][band_idx] ) > MASA_COHERENCE_TOLERANCE ) - { - sf_differ = TRUE; - break; - } - - band_idx++; - } - } - - if ( sf_differ ) - { - return FALSE; - } - else - { - return TRUE; - } -} -#endif /*-------------------------------------------------------------------* * detect_framing_async() @@ -5713,7 +3290,6 @@ static uint8_t are_masa_subframes_similar( * Analysis result is stored in hMasa->data.sync_state, and * potentially hMasa->masaMetadata is modified *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void detect_framing_async_fx( MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder structure */ ) @@ -5858,131 +3434,6 @@ static void detect_framing_async_fx( return; } -#else -static void detect_framing_async( - MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder structure */ -) -{ - MASA_METADATA_HANDLE current_meta; - MASA_METADATA_HANDLE previous_meta; - MASA_SYNC_HANDLE sync_state; - MASA_FRAME_MODE frame_mode; - uint8_t n_sim_start, n_sim_stop, sf_idx; - uint8_t found_offset; - - current_meta = &( hMasa->masaMetadata ); /* metadata from current frame */ - sync_state = &( hMasa->data.sync_state ); /* synchronization structure */ - previous_meta = &( sync_state->previous_metadata ); - - /* check current frame, how many are similar from the start and from the end */ - n_sim_start = 1; - for ( sf_idx = n_sim_start; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - if ( are_masa_subframes_similar( current_meta, 0, current_meta, sf_idx ) == TRUE ) - { - n_sim_start = sf_idx + 1; - } - else - { - break; - } - } - - /* number of similar sub-frames starting from the end of the frame */ - if ( n_sim_start == MAX_PARAM_SPATIAL_SUBFRAMES ) /* shortcut */ - { - n_sim_stop = n_sim_start; - } - else - { - n_sim_stop = 1; - for ( sf_idx = 2; sf_idx < MAX_PARAM_SPATIAL_SUBFRAMES; sf_idx++ ) - { - /* we need to check only the two middle sub-frames, as all being the same would have taken the shortcut above */ - if ( are_masa_subframes_similar( current_meta, MAX_PARAM_SPATIAL_SUBFRAMES - 1, current_meta, MAX_PARAM_SPATIAL_SUBFRAMES - sf_idx ) == TRUE ) - { - n_sim_stop = sf_idx; - } - else - { - break; - } - } - } - - frame_mode = MASA_FRAME_4SF; /* default mode: 4sf */ - if ( sync_state->prev_offset > MAX_PARAM_SPATIAL_SUBFRAMES - 2 ) - { - /* earlier offset was large => reset the offset */ - found_offset = 0; - } - else - { - /* keep previous offset unless something else is found. alternatively, we could reset always */ - found_offset = sync_state->prev_offset; - } - - if ( ( n_sim_start == MAX_PARAM_SPATIAL_SUBFRAMES ) && ( n_sim_stop == MAX_PARAM_SPATIAL_SUBFRAMES ) ) - { - /* full frame consists of similar sub-frames */ - frame_mode = MASA_FRAME_1SF; - if ( ( sync_state->prev_sim_stop != 0 ) && ( are_masa_subframes_similar( current_meta, 0, previous_meta, MAX_PARAM_SPATIAL_SUBFRAMES - 1 ) == TRUE ) ) - { - /* > 4 sub-frames of similar data */ - if ( sync_state->prev_sim_stop < 3 ) - { - /* can nicely align the framing with the earlier data and a small offset */ - found_offset = sync_state->prev_sim_stop; - } - else - { - /* too many similar sub-frames to determine the offset accurately => keep earlier value */ - found_offset = sync_state->prev_offset; - } - } - else - { - /* earlier window was different => reset the offset */ - found_offset = 0; - } - } - else if ( n_sim_stop == 3 ) - { - /* first sub-frame different that the rest 3 - => make a risky guess that the future sf would be the same too and we're in an offset case */ - frame_mode = MASA_FRAME_1SF; - found_offset = 3; - } - else if ( ( sync_state->prev_sim_stop > 0 ) && ( are_masa_subframes_similar( current_meta, 0, previous_meta, MAX_PARAM_SPATIAL_SUBFRAMES - 1 ) == TRUE ) ) - { - /* seeing data similar to past */ - if ( ( n_sim_start > 1 ) && ( n_sim_start + sync_state->prev_sim_stop >= MAX_PARAM_SPATIAL_SUBFRAMES ) ) - { - /* with the past, would have at least one long frame similar subframes */ - frame_mode = MASA_FRAME_1SF; - - if ( sync_state->prev_offset == 0 ) - { - found_offset = min( 2, sync_state->prev_sim_stop ); - } - else - { - found_offset = sync_state->prev_offset; - } - } - } - - /* keep the original contents of the frame, but then perform interpolation later */ - /* just copy current frame to storage */ - copy_masa_metadata( current_meta, previous_meta ); - - sync_state->prev_sim_stop = n_sim_stop; - sync_state->prev_offset = found_offset; - sync_state->frame_mode = frame_mode; - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * masa_metadata_direction_alignment() @@ -5990,7 +3441,6 @@ static void detect_framing_async( * In 2dir MASA metadata, determine the ordering of the directional * fields such that the azi/ele change across time is minimized. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void masa_metadata_direction_alignment_fx( MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder handle */ ) @@ -6229,183 +3679,24 @@ static void masa_metadata_direction_alignment_fx( prev_ele_dir1_cos_fx = cos_ele1_fx; /*q15*/ prev_ele_dir1_sin_fx = sin_ele1_fx; /*q15*/ move16(); - move16(); - - prev_ele_dir2_cos_fx = cos_ele2_fx; /*q15*/ - prev_ele_dir2_sin_fx = sin_ele2_fx; /*q15*/ - move16(); - move16(); - } - } /* sf */ - } /* band */ - - return; -} -#else -static void masa_metadata_direction_alignment( - MASA_ENCODER_HANDLE hMasa /* i/o: MASA encoder handle */ -) -{ - uint8_t band, n_dirs; - MASA_DIR_ALIGN_HANDLE hAlignState; - MASA_METADATA_HANDLE hMeta; - - hAlignState = &( hMasa->data.dir_align_state ); - hMeta = &( hMasa->masaMetadata ); - - n_dirs = hMeta->descriptive_meta.numberOfDirections + 1; /* 1-based */ - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - uint8_t sf; - float diff_swap, diff_no_swap; - - /* trade 2*(cos+sin) against storing the values between frames */ - float prev_ele_dir1_sin, prev_ele_dir2_sin; - float prev_ele_dir1_cos, prev_ele_dir2_cos; - - prev_ele_dir1_sin = sinf( hAlignState->previous_ele_dir1[band] ); - prev_ele_dir2_sin = sinf( hAlignState->previous_ele_dir2[band] ); - - prev_ele_dir1_cos = cosf( hAlignState->previous_ele_dir1[band] ); - prev_ele_dir2_cos = cosf( hAlignState->previous_ele_dir2[band] ); - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - float azi_rad1, ele_rad1; - float azi_rad2, ele_rad2; - float cos_ele1, cos_ele2; - float sin_ele1, sin_ele2; - - azi_rad1 = hMeta->directional_meta[0].azimuth[sf][band] * PI_OVER_180; - ele_rad1 = hMeta->directional_meta[0].elevation[sf][band] * PI_OVER_180; - - if ( n_dirs > 1 ) - { - azi_rad2 = hMeta->directional_meta[1].azimuth[sf][band] * PI_OVER_180; - ele_rad2 = hMeta->directional_meta[1].elevation[sf][band] * PI_OVER_180; - - /* quick checks to detect constant data and earlier flip */ - if ( fabsf( azi_rad1 - hAlignState->previous_azi_dir1[band] ) < EPSILON && - fabsf( azi_rad2 - hAlignState->previous_azi_dir2[band] ) < EPSILON && - fabsf( ele_rad1 - hAlignState->previous_ele_dir1[band] ) < EPSILON && - fabsf( ele_rad2 - hAlignState->previous_ele_dir2[band] ) < EPSILON ) - { - diff_swap = 1.0f; - diff_no_swap = 0.0f; - /* cached values that will be used for the short-cuts and over-written by the real computations, if done */ - sin_ele1 = prev_ele_dir1_sin; - sin_ele2 = prev_ele_dir2_sin; - cos_ele1 = prev_ele_dir1_cos; - cos_ele2 = prev_ele_dir2_cos; - } - else if ( fabsf( azi_rad1 - hAlignState->previous_azi_dir2[band] ) < EPSILON && - fabsf( azi_rad2 - hAlignState->previous_azi_dir1[band] ) < EPSILON && - fabsf( ele_rad1 - hAlignState->previous_ele_dir2[band] ) < EPSILON && - fabsf( ele_rad2 - hAlignState->previous_ele_dir1[band] ) < EPSILON ) - { - diff_swap = 0.0f; - diff_no_swap = 1.0f; - /* cached values that will be used for the short-cuts and over-written by the real computations, if done */ - sin_ele1 = prev_ele_dir2_sin; - sin_ele2 = prev_ele_dir1_sin; - cos_ele1 = prev_ele_dir2_cos; - cos_ele2 = prev_ele_dir1_cos; - } - else - { - /* angular distance of the two vectors */ - /* pre-compute values for re-use */ - sin_ele1 = sinf( ele_rad1 ); - sin_ele2 = sinf( ele_rad2 ); - - cos_ele1 = cosf( ele_rad1 ); - cos_ele2 = cosf( ele_rad2 ); - - diff_no_swap = acosf( cos_ele1 * prev_ele_dir1_cos * cosf( azi_rad1 - hAlignState->previous_azi_dir1[band] ) + sin_ele1 * prev_ele_dir1_sin ) + - acosf( cos_ele2 * prev_ele_dir2_cos * cosf( azi_rad2 - hAlignState->previous_azi_dir2[band] ) + sin_ele2 * prev_ele_dir2_sin ); - - diff_swap = acosf( cos_ele1 * prev_ele_dir2_cos * cosf( azi_rad1 - hAlignState->previous_azi_dir2[band] ) + sin_ele1 * prev_ele_dir2_sin ) + - acosf( cos_ele2 * prev_ele_dir1_cos * cosf( azi_rad2 - hAlignState->previous_azi_dir1[band] ) + sin_ele2 * prev_ele_dir1_sin ); - } - } - else - { - /* 1dir */ - sin_ele1 = sinf( ele_rad1 ); - cos_ele1 = cosf( ele_rad1 ); - - azi_rad2 = 0.0f; - ele_rad2 = 0.0f; - - sin_ele2 = 0.0f; /* sin(0) */ - cos_ele2 = 1.0f; /* cos(0) */ - - diff_swap = 1.0f; - diff_no_swap = 0.0f; - } - - if ( n_dirs > 1 && diff_no_swap > diff_swap ) - { - /* swap the metadata of the two directions in this TF-tile */ - float tmp_val; - uint16_t tmp_int_val; - tmp_val = hMeta->directional_meta[0].azimuth[sf][band]; - hMeta->directional_meta[0].azimuth[sf][band] = hMeta->directional_meta[1].azimuth[sf][band]; - hMeta->directional_meta[1].azimuth[sf][band] = tmp_val; - - tmp_val = hMeta->directional_meta[0].elevation[sf][band]; - hMeta->directional_meta[0].elevation[sf][band] = hMeta->directional_meta[1].elevation[sf][band]; - hMeta->directional_meta[1].elevation[sf][band] = tmp_val; - tmp_int_val = hMeta->directional_meta[0].spherical_index[sf][band]; - hMeta->directional_meta[0].spherical_index[sf][band] = hMeta->directional_meta[1].spherical_index[sf][band]; - hMeta->directional_meta[1].spherical_index[sf][band] = tmp_int_val; - tmp_val = hMeta->directional_meta[0].energy_ratio[sf][band]; - hMeta->directional_meta[0].energy_ratio[sf][band] = hMeta->directional_meta[1].energy_ratio[sf][band]; - hMeta->directional_meta[1].energy_ratio[sf][band] = tmp_val; - - tmp_val = hMeta->directional_meta[0].spread_coherence[sf][band]; - hMeta->directional_meta[0].spread_coherence[sf][band] = hMeta->directional_meta[1].spread_coherence[sf][band]; - hMeta->directional_meta[1].spread_coherence[sf][band] = tmp_val; - - hAlignState->previous_azi_dir1[band] = azi_rad2; - hAlignState->previous_ele_dir1[band] = ele_rad2; - - hAlignState->previous_azi_dir2[band] = azi_rad1; - hAlignState->previous_ele_dir2[band] = ele_rad1; - - prev_ele_dir1_cos = cos_ele2; - prev_ele_dir1_sin = sin_ele2; - - prev_ele_dir2_cos = cos_ele1; - prev_ele_dir2_sin = sin_ele1; - } - else - { - hAlignState->previous_azi_dir1[band] = azi_rad1; - hAlignState->previous_ele_dir1[band] = ele_rad1; - - hAlignState->previous_azi_dir2[band] = azi_rad2; - hAlignState->previous_ele_dir2[band] = ele_rad2; - - prev_ele_dir1_cos = cos_ele1; - prev_ele_dir1_sin = sin_ele1; + move16(); - prev_ele_dir2_cos = cos_ele2; - prev_ele_dir2_sin = sin_ele2; + prev_ele_dir2_cos_fx = cos_ele2_fx; /*q15*/ + prev_ele_dir2_sin_fx = sin_ele2_fx; /*q15*/ + move16(); + move16(); } } /* sf */ } /* band */ return; } -#endif /*-------------------------------------------------------------------* * ivas_merge_masa_metadata() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_merge_masa_metadata_fx( MASA_ENCODER_HANDLE hMasa, /* i/o: MASA enc handle. source for MASA metadata and combined metadata will be here */ OMASA_SPATIAL_META_HANDLE hOMasaMeta /* i : ISM-object metadata to be merged with the MASA metadata */ @@ -6603,125 +3894,6 @@ void ivas_merge_masa_metadata_fx( return; } -#else - -void ivas_merge_masa_metadata( - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA enc handle. source for MASA metadata and combined metadata will be here */ - OMASA_SPATIAL_META_HANDLE hOMasaMeta /* i : ISM-object metadata to be merged with the MASA metadata */ -) -{ - int16_t sf, band; - uint8_t numCodingBands; - uint8_t numDirections; - uint8_t numSf; - MASA_METADATA_HANDLE hMeta; - float energyTimesRatioISM; - float energyTimesRatioMASA[2]; - float total_diff_nrg; - float eneBand; - float energyMerged[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - - numCodingBands = hMasa->config.numCodingBands; - numDirections = hMasa->config.numberOfDirections; - numSf = hMasa->config.joinedSubframes == TRUE ? 1 : 4; - hMeta = &( hMasa->masaMetadata ); - - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - int16_t merge_dest; - float dir_sum; - uint8_t band_n_dirs; - if ( numDirections == 1 || ( numDirections == 2 && hMasa->data.twoDirBands[band] == 0 ) ) - { - band_n_dirs = 1; - } - else - { - band_n_dirs = 2; - } - - /* Compute energies */ - eneBand = hMasa->data.energy[sf][band]; - energyMerged[sf][band] = eneBand + hMasa->data.hOmasaData->energy_ism[sf][band]; - - /* Compute weights */ - energyTimesRatioMASA[0] = eneBand * hMeta->directional_meta[0].energy_ratio[sf][band]; - if ( band_n_dirs == 2 ) - { - energyTimesRatioMASA[1] = eneBand * hMeta->directional_meta[1].energy_ratio[sf][band]; - } - else - { - energyTimesRatioMASA[1] = 0.0f; - } - - /* target is original MASA diffuseness */ - total_diff_nrg = eneBand * hMeta->common_meta.diffuse_to_total_ratio[sf][band]; - - /* criterion is mean of ISM ratio and new ratio */ - energyTimesRatioISM = ( hOMasaMeta->directional_meta[0].energy_ratio[sf][band] + ( 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.hOmasaData->energy_ism[sf][band] ) ) ) / 2.0f * hMasa->data.hOmasaData->energy_ism[sf][band]; - - /* Determine combined metadata based on the weights */ - merge_dest = -1; - if ( ( band_n_dirs == 1 && energyTimesRatioMASA[0] < energyTimesRatioISM ) || - ( band_n_dirs == 2 && energyTimesRatioMASA[0] < energyTimesRatioMASA[1] && energyTimesRatioMASA[0] < energyTimesRatioISM ) ) - { - /* 1dir and ISM the most energetic, or 2dir and ISM the more energetic than MASA1 */ - merge_dest = 0; - } - else if ( band_n_dirs == 2 && energyTimesRatioMASA[1] <= energyTimesRatioMASA[0] && energyTimesRatioMASA[1] < energyTimesRatioISM ) - { - /* 2dir and ISM the most energetic and MASA2 the least energetic */ - merge_dest = 1; - } - - if ( merge_dest >= 0 ) /* replace one MASA with ISM */ - { - hMeta->directional_meta[merge_dest].azimuth[sf][band] = hOMasaMeta->directional_meta[0].azimuth[sf][band]; - hMeta->directional_meta[merge_dest].elevation[sf][band] = hOMasaMeta->directional_meta[0].elevation[sf][band]; - /* limit with the earlier direct-energy ratio */ - dir_sum = 1.0f - total_diff_nrg / ( EPSILON + eneBand + hMasa->data.hOmasaData->energy_ism[sf][band] ); /* new dir ratio */ - hMeta->directional_meta[merge_dest].energy_ratio[sf][band] = min( dir_sum, hOMasaMeta->directional_meta[0].energy_ratio[sf][band] ); /* clip with original ISM dir */ - hMeta->common_meta.diffuse_to_total_ratio[sf][band] = 1.0f - hMeta->directional_meta[merge_dest].energy_ratio[sf][band]; - - if ( hMasa->config.useCoherence ) - { - hMeta->directional_meta[merge_dest].spread_coherence[sf][band] = hOMasaMeta->directional_meta[0].spread_coherence[sf][band]; - hMeta->common_meta.surround_coherence[sf][band] = hOMasaMeta->common_meta.surround_coherence[sf][band]; - } - - /* recompute direct energy ratios to match the diffuse ratio */ - float direct_quota, direct_scaler; - direct_quota = 1.0f - hMeta->common_meta.diffuse_to_total_ratio[sf][band]; - if ( band_n_dirs == 1 ) - { - hMeta->directional_meta[0].energy_ratio[sf][band] = direct_quota; - } - else - { - dir_sum = hMeta->directional_meta[0].energy_ratio[sf][band] + hMeta->directional_meta[1].energy_ratio[sf][band]; - direct_scaler = direct_quota / ( EPSILON + dir_sum ); - hMeta->directional_meta[0].energy_ratio[sf][band] *= direct_scaler; - hMeta->directional_meta[1].energy_ratio[sf][band] *= direct_scaler; - } - } - } - } - - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - hMasa->data.energy[sf][band] = energyMerged[sf][band]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void quantize_ratio_ism_vector_ivas_fx( const Word16 *ratio_ism, /* ratio_ism_e */ Word16 ratio_ism_e, @@ -6909,187 +4081,6 @@ static void quantize_ratio_ism_vector_ivas_fx( return; } -#else - -static void quantize_ratio_ism_vector( - const float *ratio_ism, - int16_t *idx, - const int16_t nchan_ism, - const float masa_to_total_energy_ratio, - const int16_t idx_sep_object ) -{ - int16_t i, j, best_i, best_i2; - float dist, div, tmp, dist2, best_dist; - int16_t part_idx_sum, max_sum_idx; - float ratio_ism_loc[MAX_NUM_OBJECTS]; - int16_t no_ism_loc; - - max_sum_idx = ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1; - - if ( idx_sep_object > -1 ) - { - if ( ratio_ism[idx_sep_object] < 1.0f / (float) ( max_sum_idx ) ) - { - /* take it out from quantize function */ - mvr2r( ratio_ism, ratio_ism_loc, idx_sep_object ); - mvr2r( &ratio_ism[idx_sep_object + 1], &ratio_ism_loc[idx_sep_object], nchan_ism - idx_sep_object - 1 ); - no_ism_loc = nchan_ism - 1; - } - else - { - no_ism_loc = nchan_ism; - mvr2r( ratio_ism, ratio_ism_loc, nchan_ism ); - } - } - else - { - no_ism_loc = nchan_ism; - mvr2r( ratio_ism, ratio_ism_loc, nchan_ism ); - } - - if ( nchan_ism > 1 ) - { - if ( masa_to_total_energy_ratio >= MASA2TOTAL_THR ) - { -#ifndef IVAS_FLOAT_FIXED - distribute_evenly_ism( idx, max_sum_idx, nchan_ism ); -#else - distribute_evenly_ism_fx( idx, max_sum_idx, nchan_ism ); -#endif - } - else - { - if ( no_ism_loc > 1 ) - { - - dist = 0.0f; - div = 1.0f / (float) ( max_sum_idx ); - - part_idx_sum = 0; - - for ( i = 0; i < no_ism_loc; i++ ) - { - idx[i] = (int16_t) ( ( ratio_ism_loc[i] ) * ( max_sum_idx ) ); - part_idx_sum += idx[i]; - - tmp = ( ratio_ism_loc[i] - ( idx[i] * div ) ); - dist += ( tmp * tmp ); - } - - best_dist = dist; - best_i2 = -1; - while ( part_idx_sum < max_sum_idx ) - { - best_i = -1; - /* check which index to increase by 1 for a possible improvement */ - - for ( i = 0; i < no_ism_loc; i++ ) - { - idx[i]++; - dist2 = 0.0f; - - for ( j = 0; j < no_ism_loc; j++ ) - { - tmp = ( ratio_ism_loc[i] - ( idx[i] * div ) ); - dist2 += ( tmp * tmp ); - } - - if ( dist2 < best_dist ) - { - best_i2 = best_i; - best_i = i; - best_dist = dist2; - } - idx[i]--; - } - if ( best_i > -1 ) - { - idx[best_i]++; - part_idx_sum++; - } - else - { - if ( best_i2 > -1 ) - { - idx[best_i2]++; - part_idx_sum++; - } - else - { - idx[no_ism_loc - 1] += max_sum_idx - part_idx_sum; - part_idx_sum = max_sum_idx; - } - } - } - assert( sum_s( idx, no_ism_loc ) == max_sum_idx ); - } - else - { - idx[0] = max_sum_idx; - } - - if ( no_ism_loc < nchan_ism ) - { - /* insert back the ratio of the separated object */ - for ( i = nchan_ism - 1; i > idx_sep_object; i-- ) - { - idx[i] = idx[i - 1]; - } - idx[idx_sep_object] = 0; - } - } - } - else - { - idx[0] = (int16_t) ( ( ratio_ism[0] ) * ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ) + 0.5f ); - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static int16_t index_slice_enum( - const int16_t *ratio_ism_idx, - const int16_t nchan_ism ) -{ - int16_t i; - int16_t x, index; - int16_t base; - - if ( nchan_ism == 2 ) - { - index = ratio_ism_idx[0]; - } - else - { - x = ratio_ism_idx[nchan_ism - 2]; - base = 10; - for ( i = nchan_ism - 3; i >= 0; i-- ) - { - x += ratio_ism_idx[i] * base; - base *= 10; - } - - index = 0; - i = 0; - while ( i <= x ) - { -#ifndef IVAS_FLOAT_FIXED - if ( valid_ratio_index( i, 7, nchan_ism - 1 ) ) -#else - IF( valid_ratio_index_fx( i, 7, nchan_ism - 1 ) ) -#endif - { - index++; - } - i++; - } - index--; - } - - return index; -} -#else static Word16 index_slice_enum_fx( const Word16 *ratio_ism_idx, const Word16 nchan_ism ) @@ -7132,30 +4123,7 @@ static Word16 index_slice_enum_fx( return index; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void transform_difference_index( - const int16_t *diff_idx, - int16_t *idx, - const int16_t len ) -{ - int16_t i; - for ( i = 0; i < len; i++ ) - { - if ( diff_idx[i] <= 0 ) - { - idx[i] = -2 * diff_idx[i]; - } - else - { - idx[i] = 2 * diff_idx[i] - 1; - } - } - return; -} -#else static void transform_difference_index_ivas_fx( const Word16 *diff_idx, Word16 *idx, @@ -7178,30 +4146,6 @@ static void transform_difference_index_ivas_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void transform_index_and_GR_encode( - int16_t *diff_idx, /* i : differenc eindex to encode */ - const int16_t len, /* i : input length */ - const int16_t GR_order, /* i : GR order */ - BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ -) -{ - int16_t i; - int16_t idx[IVAS_MAX_NUM_OBJECTS]; - - /* transform difference index into positive */ - transform_difference_index( diff_idx, idx, len ); - - /* GR encoding */ - for ( i = 0; i < len; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, idx[i], 100, GR_order ); - } - - return; -} -#else static void transform_index_and_GR_encode_ivas_fx( Word16 *diff_idx, /* i : differenc eindex to encode */ const Word16 len, /* i : input length */ @@ -7223,154 +4167,61 @@ static void transform_index_and_GR_encode_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 try_differential_fx( const Word16 numCodingBands, const Word32 *masa_to_total_energy_ratio, /* Q30 */ Word16 ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const Word16 nchan_ism, const Word16 bits_index, - Word16 *p_b_signif ) -{ - Word16 b, i; - Word16 nbits0; - Word16 b_signif; - Word16 ratio_ism_idx_ref[MAX_NUM_OBJECTS]; - Word16 diff_idx[MAX_NUM_OBJECTS]; - - b_signif = 0; - move16(); - WHILE( LT_16( b_signif, numCodingBands ) && GE_32( masa_to_total_energy_ratio[b_signif], MASA2TOTAL_THR_Q30 ) ) - { - test(); - b_signif = add( b_signif, 1 ); - } - - nbits0 = 0; - move16(); - - IF( LT_16( b_signif, numCodingBands ) ) - { - nbits0 = bits_index; - move16(); - Copy( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - - FOR( b = b_signif + 1; b < numCodingBands; b++ ) - { - IF( LT_32( masa_to_total_energy_ratio[b], MASA2TOTAL_THR_Q30 ) ) - { - v_sub_s16_fx( ratio_ism_idx[b], ratio_ism_idx_ref, diff_idx, nchan_ism ); - Copy( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); - - /* transform difference index into positive */ - transform_difference_index_ivas_fx( diff_idx, diff_idx, sub( nchan_ism, 1 ) ); - - /* GR encoding */ - FOR( i = 0; i < nchan_ism - 1; i++ ) - { - nbits0 = add( nbits0, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ) ); - } - } - } - } - *p_b_signif = b_signif; - move16(); - - return nbits0; -} -#else -static int16_t try_differential( - const int16_t numCodingBands, - const float *masa_to_total_energy_ratio, - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], - const int16_t nchan_ism, - const int16_t bits_index, - int16_t *p_b_signif ) + Word16 *p_b_signif ) { - int16_t b, i; - int16_t nbits0; - int16_t b_signif; - int16_t ratio_ism_idx_ref[MAX_NUM_OBJECTS]; - int16_t diff_idx[MAX_NUM_OBJECTS]; + Word16 b, i; + Word16 nbits0; + Word16 b_signif; + Word16 ratio_ism_idx_ref[MAX_NUM_OBJECTS]; + Word16 diff_idx[MAX_NUM_OBJECTS]; b_signif = 0; - while ( ( b_signif < numCodingBands ) && ( masa_to_total_energy_ratio[b_signif] >= MASA2TOTAL_THR ) ) + move16(); + WHILE( LT_16( b_signif, numCodingBands ) && GE_32( masa_to_total_energy_ratio[b_signif], MASA2TOTAL_THR_Q30 ) ) { - b_signif++; + test(); + b_signif = add( b_signif, 1 ); } nbits0 = 0; + move16(); - if ( b_signif < numCodingBands ) + IF( LT_16( b_signif, numCodingBands ) ) { nbits0 = bits_index; - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); + move16(); + Copy( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - for ( b = b_signif + 1; b < numCodingBands; b++ ) + FOR( b = b_signif + 1; b < numCodingBands; b++ ) { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) + IF( LT_32( masa_to_total_energy_ratio[b], MASA2TOTAL_THR_Q30 ) ) { - v_sub_s( ratio_ism_idx[b], ratio_ism_idx_ref, diff_idx, nchan_ism ); - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); + v_sub_s16_fx( ratio_ism_idx[b], ratio_ism_idx_ref, diff_idx, nchan_ism ); + Copy( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); /* transform difference index into positive */ - transform_difference_index( diff_idx, diff_idx, nchan_ism - 1 ); + transform_difference_index_ivas_fx( diff_idx, diff_idx, sub( nchan_ism, 1 ) ); /* GR encoding */ - for ( i = 0; i < nchan_ism - 1; i++ ) + FOR( i = 0; i < nchan_ism - 1; i++ ) { - nbits0 += ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ); + nbits0 = add( nbits0, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ) ); } } } } *p_b_signif = b_signif; + move16(); return nbits0; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void differential_coding_first_subframe( - BSTR_ENC_HANDLE hMetaData, - const float *masa_to_total_energy_ratio, - const int16_t b_signif, - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], - const int16_t nchan_ism, - const int16_t numCodingBands, - const int16_t bits_index ) -{ - int16_t index, b; - int16_t ratio_ism_idx_ref[MAX_NUM_OBJECTS]; - int16_t diff_idx[MAX_NUM_OBJECTS]; - - /* differential encoding*/ - push_next_indice( hMetaData, 0, 1 ); - - if ( b_signif < numCodingBands ) - { - index = index_slice_enum( ratio_ism_idx[b_signif], nchan_ism ); - push_next_indice( hMetaData, index, bits_index ); - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - - for ( b = b_signif + 1; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - v_sub_s( ratio_ism_idx[b], ratio_ism_idx_ref, diff_idx, nchan_ism ); - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); - - /* transform difference index into positive */ - transform_index_and_GR_encode( diff_idx, nchan_ism - 1, 0, hMetaData ); - } - } - } - - return; -} -#else static void differential_coding_first_subframe_ivas_fx( BSTR_ENC_HANDLE hMetaData, const Word32 *masa_to_total_energy_ratio, // Q30 @@ -7409,31 +4260,6 @@ static void differential_coding_first_subframe_ivas_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void independent_coding_ratio_ism_idx( - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* i : ISM ratios */ - const float *masa_to_total_energy_ratio, /* i : MASA to total ratios */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t numCodingBands, /* i : number of subbands */ - const int16_t bits_index, /* i : number of bits per index */ - BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ -) -{ - int16_t b, index; - - for ( b = 0; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - index = index_slice_enum( ratio_ism_idx[b], nchan_ism ); - push_next_indice( hMetaData, index, bits_index ); - } - } - - return; -} -#else static void independent_coding_ratio_ism_idx_fx( Word16 ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], /* i : ISM ratios */ const Word32 *masa_to_total_energy_ratio, /* i : MASA to total ratios, Q30 */ @@ -7456,25 +4282,7 @@ static void independent_coding_ratio_ism_idx_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void remove_sep_obj( - int16_t *diff_idx, /* i/o: array of difference of indexes */ - const int16_t nchan_ism, /* i : number of objects */ - const int16_t idx_sep_obj /* i : index of separated object, to be taken out of array */ -) -{ - int16_t i; - - for ( i = idx_sep_obj; i < nchan_ism - 1; i++ ) - { - diff_idx[i] = diff_idx[i + 1]; - } - return; -} -#else static void remove_sep_obj_fx( Word16 *diff_idx, /* i/o: array of difference of indexes */ const Word16 nchan_ism, /* i : number of objects */ @@ -7491,49 +4299,7 @@ static void remove_sep_obj_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void estimate_bits_subband_ism_ratio( - const int16_t *ratio_ism_idx, - const int16_t *ratio_ism_idx_ref, /* ( i/o ) */ - const int16_t nchan_ism, - const int16_t shift_one, - const int16_t idx_sep_obj, - int16_t *p_nbits0, - int16_t *p_nbits1 ) -{ - int16_t diff_idx[MAX_NUM_OBJECTS]; - int16_t nbits0, nbits1; - int16_t i; - - nbits0 = 0; - nbits1 = 0; - - /* take difference with respect to previous subframe */ - v_sub_s( ratio_ism_idx, ratio_ism_idx_ref, diff_idx, nchan_ism ); - - if ( shift_one ) - { - remove_sep_obj( diff_idx, nchan_ism, idx_sep_obj ); - } - - /* transform difference index into positive */ - transform_difference_index( diff_idx, diff_idx, nchan_ism - 1 - shift_one ); - - /* GR encoding */ - for ( i = 0; i < nchan_ism - 1 - shift_one; i++ ) - { - nbits0 += ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ); - nbits1 += ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 1 ); - } - - *p_nbits0 = nbits0; - *p_nbits1 = nbits1; - return; -} -#else static void estimate_bits_subband_ism_ratio_fx( const Word16 *ratio_ism_idx, const Word16 *ratio_ism_idx_ref, /* ( i/o ) */ @@ -7550,288 +4316,34 @@ static void estimate_bits_subband_ism_ratio_fx( nbits0 = 0; nbits1 = 0; move16(); - move16(); - - /* take difference with respect to previous subframe */ - v_sub_s16_fx( ratio_ism_idx, ratio_ism_idx_ref, diff_idx, nchan_ism ); - - IF( shift_one ) - { - remove_sep_obj_fx( diff_idx, nchan_ism, idx_sep_obj ); - } - - /* transform difference index into positive */ - transform_difference_index_ivas_fx( diff_idx, diff_idx, sub( sub( nchan_ism, 1 ), shift_one ) ); - - /* GR encoding */ - FOR( i = 0; i < nchan_ism - 1 - shift_one; i++ ) - { - nbits0 = add( nbits0, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ) ); - nbits1 = add( nbits1, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 1 ) ); - } - - *p_nbits0 = nbits0; - *p_nbits1 = nbits1; - move16(); - move16(); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static int16_t encode_ratio_ism_subframe( - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], - const int16_t nchan_ism, - const uint8_t numCodingBands, - const int16_t sf, - int16_t ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], - BSTR_ENC_HANDLE hMetaData, - // const float *masa_to_total_energy_ratio, - float *masa_to_total_energy_ratio, - const int16_t shift_one, - const int16_t idx_separated_obj ) -{ - int16_t b, b_signif; - int16_t diff_idx[MAX_NUM_OBJECTS]; - int16_t nbits, nbits0, nbits1, GR_order, GR_order_sb; - int16_t differential_subframe; - int16_t ratio_ism_idx_ref[MAX_NUM_OBJECTS]; - int16_t bits_index; - int16_t nbits00, nbits11; - int16_t idx_sep_obj_local; - - idx_sep_obj_local = idx_separated_obj; - if ( idx_separated_obj > -1 ) - { - if ( idx_separated_obj == nchan_ism - 1 ) - { - idx_sep_obj_local = 0; - } - } - nbits = 0; - nbits0 = 0; - nbits1 = 0; - - differential_subframe = 1; /* the differences are taken with respect to previous subframe */ - - /* first subframe */ - bits_index = 0; - if ( sf == 0 ) - { -#ifndef IVAS_FLOAT_FIXED - bits_index = bits_index_ism_ratio( nchan_ism ); -#else - bits_index = bits_index_ism_ratio_fx( nchan_ism ); -#endif - - nbits = 0; - for ( b = 0; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - nbits += bits_index; - } - } - - nbits0 = try_differential( numCodingBands, masa_to_total_energy_ratio, ratio_ism_idx, nchan_ism, bits_index, &b_signif ); - - if ( nbits <= nbits0 && nbits > 0 ) - { - /* independent encoding */ - push_next_indice( hMetaData, 1, 1 ); - independent_coding_ratio_ism_idx( ratio_ism_idx, masa_to_total_energy_ratio, nchan_ism, numCodingBands, bits_index, hMetaData ); - nbits = nbits + 1; - } - else - { - if ( nbits > 0 ) - { -#ifndef IVAS_FLOAT_FIXED - differential_coding_first_subframe( hMetaData, masa_to_total_energy_ratio, b_signif, ratio_ism_idx, nchan_ism, numCodingBands, bits_index ); -#else -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 masa_to_total_energy_ratio_fx[MASA_FREQUENCY_BANDS]; - floatToFixed_arrL( masa_to_total_energy_ratio, masa_to_total_energy_ratio_fx, 30, MASA_FREQUENCY_BANDS ); -#endif - differential_coding_first_subframe_ivas_fx( hMetaData, masa_to_total_energy_ratio_fx, b_signif, ratio_ism_idx, nchan_ism, numCodingBands, bits_index ); -#endif - nbits = nbits0 + 1; - } - } - } - else - { - /* not first subframe */ - if ( shift_one == 1 && nchan_ism == 2 ) - { - nbits = 0; - } - else - { - nbits0 = 0; - nbits1 = 0; - - for ( b = 0; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - estimate_bits_subband_ism_ratio( ratio_ism_idx[b], ratio_ism_idx_prev_sf[b], nchan_ism, shift_one, idx_sep_obj_local, &nbits00, &nbits11 ); - nbits0 += nbits00; - nbits1 += nbits11; - } - } - if ( nbits0 < nbits1 ) - { - GR_order = 0; - nbits = nbits0; - } - else - { - GR_order = 1; - nbits = nbits1; - } - - if ( numCodingBands > 1 ) - { - /* try the difference from subband to subband; first subband is compared to previous subframe first subband*/ - /* take difference with respect to previous subframe only for first subband */ - nbits0 = 0; - nbits1 = 0; - b_signif = 0; - while ( ( b_signif < numCodingBands ) && ( masa_to_total_energy_ratio[b_signif] >= MASA2TOTAL_THR ) ) - { - b_signif++; - } - - if ( b_signif < numCodingBands ) - { - estimate_bits_subband_ism_ratio( ratio_ism_idx[b_signif], ratio_ism_idx_prev_sf[b_signif], nchan_ism, shift_one, idx_sep_obj_local, &nbits0, &nbits1 ); - - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism ); - - for ( b = b_signif + 1; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - estimate_bits_subband_ism_ratio( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism, shift_one, idx_sep_obj_local, &nbits00, &nbits11 ); - nbits0 += nbits00; - nbits1 += nbits11; - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism ); - } - } - - if ( nbits0 < nbits1 ) - { - GR_order_sb = 0; - } - else - { - GR_order_sb = 1; - nbits0 = nbits1; - } - - if ( nbits0 < nbits ) - { - differential_subframe = 0; - nbits = nbits0; - GR_order = GR_order_sb; - } - - if ( nbits > 0 ) - { - /* write prediction type */ - push_next_indice( hMetaData, differential_subframe, 1 ); - /* write GR order */ - push_next_indice( hMetaData, GR_order, 1 ); - nbits++; /* for the prediction type */ - nbits++; /* for GR_order */ - - /* write data */ - if ( differential_subframe ) - { - for ( b = 0; b < numCodingBands; b++ ) - { - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - /* take difference with respect to previous subframe */ - v_sub_s( ratio_ism_idx[b], ratio_ism_idx_prev_sf[b], diff_idx, nchan_ism ); - - if ( shift_one ) - { - remove_sep_obj( diff_idx, nchan_ism, idx_sep_obj_local ); - } - - transform_index_and_GR_encode( diff_idx, nchan_ism - 1 - shift_one, GR_order, hMetaData ); - } - } - } - else - { - v_sub_s( ratio_ism_idx[b_signif], ratio_ism_idx_prev_sf[b_signif], diff_idx, nchan_ism ); - - if ( shift_one ) - { - remove_sep_obj( diff_idx, nchan_ism, idx_sep_obj_local ); - } - - transform_index_and_GR_encode( diff_idx, nchan_ism - 1 - shift_one, GR_order, hMetaData ); - - mvs2s( ratio_ism_idx[b_signif], ratio_ism_idx_ref, nchan_ism - shift_one ); - - for ( b = b_signif + 1; b < numCodingBands; b++ ) - { - /* take difference with respect to previous subband */ - if ( masa_to_total_energy_ratio[b] < MASA2TOTAL_THR ) - { - v_sub_s( ratio_ism_idx[b], ratio_ism_idx_ref, diff_idx, nchan_ism ); - - if ( shift_one ) - { - remove_sep_obj( diff_idx, nchan_ism, idx_sep_obj_local ); - } - - transform_index_and_GR_encode( diff_idx, nchan_ism - 1 - shift_one, GR_order, hMetaData ); - - mvs2s( ratio_ism_idx[b], ratio_ism_idx_ref, nchan_ism - shift_one ); - } - } - } - } - } - } - else - { - /* only differential wrt previous subframe is possible */ - /* write the differential to subframe case and no bit to signal the difference type */ + move16(); - if ( nbits > 0 ) - { - /* write GR order */ - push_next_indice( hMetaData, GR_order, 1 ); - nbits++; /* for GR_order */ - /* write data */ - /* only one subband */ - if ( masa_to_total_energy_ratio[0] < MASA2TOTAL_THR ) - { - /* take difference with respect to previous subframe */ - v_sub_s( ratio_ism_idx[0], ratio_ism_idx_prev_sf[0], diff_idx, nchan_ism ); + /* take difference with respect to previous subframe */ + v_sub_s16_fx( ratio_ism_idx, ratio_ism_idx_ref, diff_idx, nchan_ism ); - if ( shift_one ) - { - remove_sep_obj( diff_idx, nchan_ism, idx_sep_obj_local ); - } + IF( shift_one ) + { + remove_sep_obj_fx( diff_idx, nchan_ism, idx_sep_obj ); + } - transform_index_and_GR_encode( diff_idx, nchan_ism - 1 - shift_one, GR_order, hMetaData ); - } - } - } - } + /* transform difference index into positive */ + transform_difference_index_ivas_fx( diff_idx, diff_idx, sub( sub( nchan_ism, 1 ), shift_one ) ); + + /* GR encoding */ + FOR( i = 0; i < nchan_ism - 1 - shift_one; i++ ) + { + nbits0 = add( nbits0, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 0 ) ); + nbits1 = add( nbits1, ivas_qmetadata_encode_extended_gr_length( diff_idx[i], 100, 1 ) ); } - return nbits; + *p_nbits0 = nbits0; + *p_nbits1 = nbits1; + move16(); + move16(); + + return; } -#else + static Word16 encode_ratio_ism_subframe_fx( Word16 ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], const Word16 nchan_ism, @@ -8098,369 +4610,6 @@ static Word16 encode_ratio_ism_subframe_fx( return nbits; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_encode_masaism_metadata( - MASA_ENCODER_HANDLE hMasa, - IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - const int16_t nchan_ism, /* i : number of ISM channels */ - const int16_t low_bitrate_mode, /* i : is low bitrate more? 1/0 */ - const int16_t omasa_nbands, - const int16_t omasa_nblocks, - const int16_t idx_separated_object, - const int16_t ism_imp ) -{ - int16_t sf, band; - uint8_t numCodingBands; - uint8_t numSf; - int16_t brange[2]; - float eneBand; - int16_t bin; - int16_t obj; - int16_t bits_ism[MAX_NUM_OBJECTS]; - uint16_t idx_sph; - float theta_q, phi_q; - uint16_t index_theta, index_phi; - float ratio_ism[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - int16_t ratio_ism_idx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS], ratio_ism_idx_prev_sf[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - float step; - int16_t inv_step; - float energy_ism, energy_ism_ind[MAX_NUM_OBJECTS]; - int16_t tmp, rotate; - int16_t n_ism_tmp, i; - OMASA_ENCODER_DATA_HANDLE hOmasaData = hMasa->data.hOmasaData; - int16_t nbands_work; - - /* use the values from hQMetaData */ - numCodingBands = (uint8_t) hQMetaData->q_direction->cfg.nbands; - numSf = (int8_t) hQMetaData->q_direction->cfg.nblocks; - nbands_work = min( numCodingBands, omasa_nbands ); - if ( numCodingBands == 1 ) - { - for ( sf = 0; sf < numSf; sf++ ) - { - if ( sum_f( hOmasaData->energy_ism[sf], omasa_nbands ) == 0.0f ) - { - hOmasaData->masa_to_total_energy_ratio[sf][0] = 1.0f; - } - else - { - brange[0] = hMasa->data.band_mapping[0]; - brange[1] = hMasa->data.band_mapping[omasa_nbands]; - eneBand = 0.0f; - for ( bin = brange[0]; bin < brange[1]; bin++ ) - { - eneBand += hMasa->data.energy[sf][bin]; - } - - energy_ism = 0.0f; - for ( obj = 0; obj < nchan_ism; obj++ ) - { - energy_ism_ind[obj] = 0.0f; - } - - for ( band = 0; band < omasa_nbands; band++ ) - { - energy_ism += hOmasaData->energy_ism[sf][band]; - for ( obj = 0; obj < nchan_ism; obj++ ) - { - energy_ism_ind[obj] += hOmasaData->energy_ism[sf][band] * hOmasaData->energy_ratio_ism[sf][band][obj]; - } - } - - for ( obj = 0; obj < nchan_ism; obj++ ) - { - hOmasaData->energy_ratio_ism[sf][0][obj] = energy_ism_ind[obj] / energy_ism; - } - hOmasaData->masa_to_total_energy_ratio[sf][0] = eneBand / ( eneBand + energy_ism + EPSILON ); - } - } - } - else if ( numSf == 1 ) - { - for ( band = 0; band < nbands_work; band++ ) - { - energy_ism = 0.0f; /* ISM energy for current subband */ - for ( obj = 0; obj < nchan_ism; obj++ ) - { - energy_ism_ind[obj] = 0.0f; - } - for ( sf = 0; sf < omasa_nblocks; sf++ ) - { - energy_ism += hOmasaData->energy_ism[sf][band]; - for ( obj = 0; obj < nchan_ism; obj++ ) - { - energy_ism_ind[obj] += hOmasaData->energy_ism[sf][band] * hOmasaData->energy_ratio_ism[sf][band][obj]; - } - } - - if ( energy_ism == 0.0f ) - { - hOmasaData->masa_to_total_energy_ratio[0][band] = 1.0f; - } - else - { - for ( obj = 0; obj < nchan_ism; obj++ ) - { - hOmasaData->energy_ratio_ism[0][band][obj] = energy_ism_ind[obj] / energy_ism; - } - brange[0] = hMasa->data.band_mapping[band]; - brange[1] = hMasa->data.band_mapping[band + 1]; - - eneBand = 0.0f; - for ( sf = 0; sf < omasa_nblocks; sf++ ) - { - for ( bin = brange[0]; bin < brange[1]; bin++ ) - { - eneBand += hMasa->data.energy[sf][bin]; - } - } - hOmasaData->masa_to_total_energy_ratio[0][band] = eneBand / ( eneBand + energy_ism + EPSILON ); - } - } - for ( band = nbands_work; band < numCodingBands; band++ ) - { - hOmasaData->masa_to_total_energy_ratio[0][band] = 1.0f; - - for ( obj = 0; obj < nchan_ism; obj++ ) - { - hOmasaData->energy_ratio_ism[0][band][obj] = hOmasaData->energy_ratio_ism[0][nbands_work - 1][obj]; - } - } - } - else - { - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < nbands_work; band++ ) - { - if ( hOmasaData->energy_ism[sf][band] == 0.0f ) - { - hOmasaData->masa_to_total_energy_ratio[sf][band] = 1.0f; - } - else - { - brange[0] = hMasa->data.band_mapping[band]; - brange[1] = hMasa->data.band_mapping[band + 1]; - - eneBand = 0.0f; - for ( bin = brange[0]; bin < brange[1]; bin++ ) - { - eneBand += hMasa->data.energy[sf][bin]; - } - hOmasaData->masa_to_total_energy_ratio[sf][band] = eneBand / ( eneBand + hOmasaData->energy_ism[sf][band] + EPSILON ); - } - } - for ( band = nbands_work; band < numCodingBands; band++ ) - { - hOmasaData->masa_to_total_energy_ratio[sf][band] = 1.0f; - - for ( obj = 0; obj < nchan_ism; obj++ ) - { - hOmasaData->energy_ratio_ism[sf][band][obj] = hOmasaData->energy_ratio_ism[sf][nbands_work - 1][obj]; - } - } - } - } - - ivas_omasa_encode_masa_to_total( hOmasaData->masa_to_total_energy_ratio, hMetaData, low_bitrate_mode, numCodingBands, numSf ); - - /* quantize ism_ratios */ - if ( nchan_ism > 1 ) - { - inv_step = ( ( 1 << PARAM_ISM_POW_RATIO_NBITS ) - 1 ); - step = 1.0f / inv_step; - - rotate = 0; - n_ism_tmp = 0; - - for ( sf = 0; sf < numSf; sf++ ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - for ( obj = 0; obj < nchan_ism; obj++ ) - { - assert( ( hOmasaData->energy_ratio_ism[sf][band][obj] >= 0 ) && ( hOmasaData->energy_ratio_ism[sf][band][obj] <= 1 ) ); - ratio_ism[band][obj] = hOmasaData->energy_ratio_ism[sf][band][obj]; - } - - /* Quantize ISM ratios */ -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 ratio_ism_fx[MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - - Word16 ratio_ism_fx_q = Q_factor_arr( ratio_ism[band], nchan_ism ); - - floatToFixed_arr( ratio_ism[band], ratio_ism_fx[band], ratio_ism_fx_q, nchan_ism ); - - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - floatToFixed_arrL( hOmasaData->masa_to_total_energy_ratio[i], hOmasaData->masa_to_total_energy_ratio_fx[i], Q30, MASA_FREQUENCY_BANDS ); - } -#endif - quantize_ratio_ism_vector_ivas_fx( ratio_ism_fx[band], sub( Q15, ratio_ism_fx_q ), ratio_ism_idx[band], nchan_ism, hOmasaData->masa_to_total_energy_ratio_fx[sf][band], idx_separated_object ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - fixedToFloat_arr( ratio_ism_fx[band], ratio_ism[band], ratio_ism_fx_q, nchan_ism ); - - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - fixedToFloat_arrL( hOmasaData->masa_to_total_energy_ratio_fx[i], hOmasaData->masa_to_total_energy_ratio[i], Q30, MASA_FREQUENCY_BANDS ); - } -#endif -#else - quantize_ratio_ism_vector( ratio_ism[band], ratio_ism_idx[band], nchan_ism, hOmasaData->masa_to_total_energy_ratio[sf][band], idx_separated_object ); -#endif - if ( n_ism_tmp == numCodingBands && ratio_ism_idx[band][idx_separated_object] != 0 && hOmasaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR ) - { - i = 0; - while ( ratio_ism_idx[band][idx_separated_object] > 0 ) - { - if ( i != idx_separated_object ) - { - ratio_ism_idx[band][i]++; - ratio_ism_idx[band][idx_separated_object]--; - } - i++; - if ( i == nchan_ism ) - { - i = 0; - } - } - } - - /* reconstructed values */ -#ifndef IVAS_FLOAT_FIXED - reconstruct_ism_ratios( ratio_ism_idx[band], nchan_ism, step, hMasa->data.hOmasaData->q_energy_ratio_ism[sf][band] ); -#else - Word16 step_fx = float_to_fix16( step, Q15 ); - - reconstruct_ism_ratios_fx( ratio_ism_idx[band], nchan_ism, step_fx, hMasa->data.hOmasaData->q_energy_ratio_ism_fx[sf][band] ); - - fixedToFloat_arrL( hMasa->data.hOmasaData->q_energy_ratio_ism_fx[sf][band], hMasa->data.hOmasaData->q_energy_ratio_ism[sf][band], Q30, nchan_ism ); -#endif - } - - if ( ( nchan_ism > 2 ) && ( idx_separated_object == nchan_ism - 1 ) ) - { - /* rotate components */ - rotate = 1; - for ( band = 0; band < numCodingBands; band++ ) - { - if ( hOmasaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR ) - { - tmp = ratio_ism_idx[band][nchan_ism - 1]; - ratio_ism_idx[band][nchan_ism - 1] = ratio_ism_idx[band][0]; - ratio_ism_idx[band][0] = tmp; - if ( sf == 0 && tmp == 0 ) - { - n_ism_tmp += 1; - } - - if ( n_ism_tmp == numCodingBands ) - { - assert( tmp == 0 ); - } - } - } - } - else - { - if ( idx_separated_object > -1 ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - if ( hOmasaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR ) - { - if ( ratio_ism_idx[band][idx_separated_object] == 0 && sf == 0 ) - { - n_ism_tmp++; - } - } - } - } - } - - /* encode data for current subframe */ - if ( sf > 0 && n_ism_tmp == numCodingBands ) - { - encode_ratio_ism_subframe( ratio_ism_idx, nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hOmasaData->masa_to_total_energy_ratio[sf], 1, idx_separated_object ); - } - else - { - encode_ratio_ism_subframe( ratio_ism_idx, nchan_ism, numCodingBands, sf, ratio_ism_idx_prev_sf, hMetaData, hOmasaData->masa_to_total_energy_ratio[sf], 0, idx_separated_object ); - } - - /* calculate quantized ISM ratios */ - /* save previous subframe indexes */ - for ( band = 0; band < numCodingBands; band++ ) - { - mvs2s( ratio_ism_idx[band], ratio_ism_idx_prev_sf[band], nchan_ism ); - } - - if ( rotate ) - { - for ( band = 0; band < numCodingBands; band++ ) - { - if ( hOmasaData->masa_to_total_energy_ratio[sf][band] < MASA2TOTAL_THR ) - { - tmp = ratio_ism_idx[band][nchan_ism - 1]; - ratio_ism_idx[band][nchan_ism - 1] = ratio_ism_idx[band][0]; - ratio_ism_idx[band][0] = tmp; - } - } - } - } - } - -#ifndef IVAS_FLOAT_FIXED - calculate_nbits_meta( nchan_ism, hOmasaData->q_energy_ratio_ism, hOmasaData->masa_to_total_energy_ratio, numSf, numCodingBands, bits_ism, idx_separated_object, ism_imp ); -#else - FOR( sf = 0; sf < numSf; ++sf ) - { - FOR( band = 0; band < numCodingBands; ++band ) - { - floatToFixed_arr32( hOmasaData->q_energy_ratio_ism[sf][band], hOmasaData->q_energy_ratio_ism_fx[sf][band], Q30, nchan_ism ); - hOmasaData->masa_to_total_energy_ratio_fx[sf][band] = floatToFixed_32( hOmasaData->masa_to_total_energy_ratio[sf][band], Q30 ); - } - } - - calculate_nbits_meta_fx( nchan_ism, hOmasaData->q_energy_ratio_ism_fx, hOmasaData->masa_to_total_energy_ratio_fx, numSf, numCodingBands, bits_ism, idx_separated_object, ism_imp ); -#endif - - /* quantize directions */ - for ( obj = 0; obj < nchan_ism; obj++ ) - { - if ( bits_ism[obj] < 8 ) - { - /* check is same as previous */ - if ( ( fabs( hIsmMeta[obj]->elevation - hIsmMeta[obj]->q_elevation_old ) < 0.01f ) && ( fabs( hIsmMeta[obj]->azimuth - hIsmMeta[obj]->q_azimuth_old ) < 0.01f ) ) - { - push_next_indice( hMetaData, 1, 1 ); - /* the old stays the same */ - } - else - { - push_next_indice( hMetaData, 0, 1 ); - idx_sph = quantize_direction( hIsmMeta[obj]->elevation, hIsmMeta[obj]->azimuth, bits_ism[obj], &theta_q, &phi_q, &index_theta, &index_phi, MC_LS_SETUP_INVALID ); - push_next_indice( hMetaData, idx_sph, bits_ism[obj] ); - hIsmMeta[obj]->q_elevation_old = hIsmMeta[obj]->elevation; - hIsmMeta[obj]->q_azimuth_old = hIsmMeta[obj]->azimuth; - } - } - else - { - idx_sph = quantize_direction( hIsmMeta[obj]->elevation, hIsmMeta[obj]->azimuth, bits_ism[obj], &theta_q, &phi_q, &index_theta, &index_phi, MC_LS_SETUP_INVALID ); - push_next_indice( hMetaData, idx_sph, bits_ism[obj] ); - hIsmMeta[obj]->q_elevation_old = hIsmMeta[obj]->elevation; - hIsmMeta[obj]->q_azimuth_old = hIsmMeta[obj]->azimuth; - } - } - - return; -} -#else static void ivas_encode_masaism_metadata_fx( MASA_ENCODER_HANDLE hMasa, IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle */ @@ -8902,14 +5051,12 @@ static void ivas_encode_masaism_metadata_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_merge_masa_transports() * * Merge MASA transport channels *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_merge_masa_transports_fx( Word32 data_in_f1_fx[][L_FRAME48k], // Qx Word32 *data_in_f2_fx[], // Qx @@ -8930,25 +5077,3 @@ void ivas_merge_masa_transports_fx( return; } -#else - -void ivas_merge_masa_transports( - float data_in_f1[][L_FRAME48k], - float *data_in_f2[], - float *data_out_f[], - const int16_t input_frame, - const int16_t num_transport_channels ) -{ - int16_t i, j; - - for ( i = 0; i < num_transport_channels; i++ ) - { - for ( j = 0; j < input_frame; j++ ) - { - data_out_f[i][j] = data_in_f1[i][j] + data_in_f2[i][j]; - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_mc_param_enc.c b/lib_enc/ivas_mc_param_enc.c index aa14cf8a3..26a81c133 100644 --- a/lib_enc/ivas_mc_param_enc.c +++ b/lib_enc/ivas_mc_param_enc.c @@ -45,10 +45,8 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" -#endif /*------------------------------------------------------------------------- * Local function prototypes @@ -62,7 +60,6 @@ static void ivas_param_mc_encode_parameter( int16_t *idx_in, HANDLE_IVAS_PARAM_M static void ivas_param_mc_range_encoder( const int16_t *seq_in, const int16_t num_symbols, const uint16_t *cum_freq, const uint16_t *sym_freq, const uint16_t tot_shift, const int16_t max_nb_bits, uint16_t *bit_buffer, int16_t *bit_pos ); -#ifdef IVAS_FLOAT_FIXED #define ATTACKTHRESHOLD_E 4 static void ivas_param_mc_quantize_ilds_fx( PARAM_MC_ENC_HANDLE hParamMC, Word32 Cy_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], Word16 Cy_e[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], Word32 Cx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], Word16 Cx_fx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const Word16 freq_idx, const Word16 nchan_input, const Word16 nchan_transport, Word16 *ILD_idx_out, Word16 ILD_q[PARAM_MC_SZ_ILD_MAP] ); @@ -77,21 +74,6 @@ static void ivas_param_mc_transient_detection_fx( PARAM_MC_ENC_HANDLE hParamMC, static void ivas_param_mc_param_est_enc_fx( PARAM_MC_ENC_HANDLE hParamMC, Word32 *data_f[], Word32 Cy_sum_fx[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], Word16 Cy_sum_e[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], Word32 Cx_sum_fx[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], Word16 Cx_sum_e[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const Word16 input_frame, const Word16 nchan_input, const Word16 nchan_transport ); -#else - -static void ivas_param_mc_quantize_ilds( PARAM_MC_ENC_HANDLE hParamMC, float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], float Cx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const int16_t freq_idx, const int16_t nchan_input, const int16_t nchan_transport, int16_t *ILD_idx_out, float ILD_q[PARAM_MC_SZ_ILD_MAP] ); - -static void ivas_param_mc_quantize_iccs( PARAM_MC_ENC_HANDLE hParamMC, float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], const int16_t freq_idx, const int16_t nchan_input, int16_t *ICC_idx_out ); - -static void ivas_param_mc_dmx( PARAM_MC_ENC_HANDLE hParamMC, float *data_f[], float data_dmx[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_input, const int16_t nchan_transport ); - -static void ivas_param_mc_transient_detection( PARAM_MC_ENC_HANDLE hParamMC, TRAN_DET_HANDLE hTranDet, int16_t *bAttackPresent, int16_t *attackIdx ); - -static void ivas_param_mc_param_est_enc( PARAM_MC_ENC_HANDLE hParamMC, float *data_f[], float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], const int16_t input_frame, const int16_t nchan_input, const int16_t nchan_transport ); - -static void ivas_param_mc_parameter_quantizer( const float *x, const int16_t L, const int16_t sz_quantizer, const float *quantizer, int16_t *quant_idx, float *y ); - -#endif /*------------------------------------------------------------------------- * ivas_param_mc_enc_open() @@ -99,7 +81,6 @@ static void ivas_param_mc_parameter_quantizer( const float *x, const int16_t L, * Initialize Parametric MC encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_param_mc_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -137,11 +118,11 @@ ivas_error ivas_param_mc_enc_open_fx( /* Preparing Config */ hParamMC->lfe_index = LFE_CHANNEL; move16(); - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_input_setup ); + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_input_setup ); move16(); /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_input_setup, ivas_total_brate ); + config_index = ivas_param_mc_get_configuration_index_fx( mc_input_setup, ivas_total_brate ); /* set core coder dependent on the number of transport channels */ SWITCH( st_ivas->nchan_transport ) @@ -223,7 +204,7 @@ ivas_error ivas_param_mc_enc_open_fx( move16(); hParamMC->hMetadataPMC.last_coded_bwidth = max_bwidth; move16(); - ivas_param_mc_set_coded_bands( &hParamMC->hMetadataPMC ); + ivas_param_mc_set_coded_bands_fx( &hParamMC->hMetadataPMC ); /* initialize offset for transient detection */ tmp1 = NS2SA_FX2( input_Fs, DELAY_DIRAC_ENC_CMP_NS ); @@ -247,137 +228,6 @@ ivas_error ivas_param_mc_enc_open_fx( return error; } -#else -ivas_error ivas_param_mc_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i; - IVAS_FB_CFG *fb_cfg; - PARAM_MC_ENC_HANDLE hParamMC; - uint16_t config_index; - MC_LS_SETUP mc_input_setup; - int16_t max_bwidth, nchan_inp; - int32_t input_Fs, ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Sanity Checks */ - if ( ( hParamMC = (PARAM_MC_ENC_HANDLE) malloc( sizeof( PARAM_MC_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Paramtric MC\n" ) ); - } - - mc_input_setup = st_ivas->hEncoderConfig->mc_input_setup; - max_bwidth = st_ivas->hEncoderConfig->max_bwidth; - input_Fs = st_ivas->hEncoderConfig->input_Fs; - nchan_inp = st_ivas->hEncoderConfig->nchan_inp; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - /* Preparing Config */ - hParamMC->lfe_index = LFE_CHANNEL; - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_input_setup ); - - /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_input_setup, ivas_total_brate ); - - /* set core coder dependent on the number of transport channels */ - switch ( st_ivas->nchan_transport ) - { - case 4: - case 3: - st_ivas->nCPE = 2; - st_ivas->nSCE = 0; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - break; - case 2: - st_ivas->nCPE = 1; - st_ivas->nSCE = 0; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - break; - } - - /* get dmx factors */ - hParamMC->dmx_factors = ivas_param_mc_conf[config_index].dmx_fac; -#ifdef IVAS_FLOAT_FIXED - hParamMC->dmx_factors_fx = ivas_param_mc_conf[config_index].dmx_fac_fx; -#endif - - /* set FB config. */ - if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, nchan_inp, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Allocate and initialize FB mixer handle */ - if ( ( error = ivas_FB_mixer_open( &( hParamMC->hFbMixer ), input_Fs, fb_cfg, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* open/init parameter coding */ - ivas_param_mc_metadata_open( mc_input_setup, ivas_total_brate, &hParamMC->hMetadataPMC ); - - /* Band Grouping */ - if ( hParamMC->hMetadataPMC.num_parameter_bands == 20 ) - { - mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); - } - else if ( hParamMC->hMetadataPMC.num_parameter_bands == 14 ) - { - mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); - } - else if ( hParamMC->hMetadataPMC.num_parameter_bands == 10 ) - { - mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); - } - else - { - assert( 0 && "nbands must be 20, 14, or 10!" ); - } - - /* set max parameter band for abs cov */ - i = 0; - while ( hParamMC->band_grouping[i] <= PARAM_MC_MAX_BAND_ABS_COV_ENC ) - { - hParamMC->max_param_band_abs_cov = ( i++ ); - } - - /* parameter band grouping: 60 band CLDFB to 240 band MDFT resolution */ - for ( i = 0; i < hParamMC->hMetadataPMC.num_parameter_bands + 1; i++ ) - { - hParamMC->band_grouping[i] *= PARAM_MC_CLDFB_TO_MDFT_FAC; - } - - /* set correct coded band width */ - hParamMC->hMetadataPMC.coded_bwidth = max_bwidth; - hParamMC->hMetadataPMC.last_coded_bwidth = max_bwidth; - ivas_param_mc_set_coded_bands( &hParamMC->hMetadataPMC ); - - /* initialize offset for transient detection */ - hParamMC->transient_detector_delay = ( NSUBBLOCKS_SHIFT + 1 ) + NSUBBLOCKS + 1 - (int16_t) ceilf( (float) NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS ) / (float) NS2SA( input_Fs, 2 * DIRAC_SLOT_NS ) ); - - /* Init total/dmx ener factors */ - set_f( hParamMC->ener_fac, 0.0f, PARAM_MC_MAX_PARAMETER_BANDS ); -#ifdef IVAS_FLOAT_FIXED - set32_fx( hParamMC->ener_fac_fx, 0, PARAM_MC_MAX_PARAMETER_BANDS ); -#endif - - /* init previous ILDs */ - for ( i = 0; i < PARAM_MC_MAX_PARAMETER_BANDS; i++ ) - { -#ifdef IVAS_FLOAT_FIXED - set32_fx( hParamMC->prev_ilds_fx[i], 0, PARAM_MC_SZ_ILD_MAP ); -#endif - set_zero( hParamMC->prev_ilds[i], PARAM_MC_SZ_ILD_MAP ); - } - - st_ivas->hParamMC = hParamMC; - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -386,7 +236,6 @@ ivas_error ivas_param_mc_enc_open( * Reconfigure Parametric MC encoder *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_param_mc_enc_reconfig_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -414,11 +263,11 @@ ivas_error ivas_param_mc_enc_reconfig_fx( hParamMC = st_ivas->hParamMC; /* Preparing Config */ - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_input_setup ); + st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, mc_input_setup ); move16(); /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_input_setup, ivas_total_brate ); + config_index = ivas_param_mc_get_configuration_index_fx( mc_input_setup, ivas_total_brate ); /* set core coder dependent on the number of transport channels */ SWITCH( st_ivas->nchan_transport ) @@ -488,7 +337,7 @@ ivas_error ivas_param_mc_enc_reconfig_fx( move16(); hParamMC->hMetadataPMC.last_coded_bwidth = max_bwidth; move16(); - ivas_param_mc_set_coded_bands( &hParamMC->hMetadataPMC ); + ivas_param_mc_set_coded_bands_fx( &hParamMC->hMetadataPMC ); /* initialize offset for transient detection */ tmp1 = NS2SA_FX2( input_Fs, DELAY_DIRAC_ENC_CMP_NS ); @@ -505,107 +354,6 @@ ivas_error ivas_param_mc_enc_reconfig_fx( return error; } -#else -ivas_error ivas_param_mc_enc_reconfig( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i; - PARAM_MC_ENC_HANDLE hParamMC; - uint16_t config_index; - MC_LS_SETUP mc_input_setup; - int16_t max_bwidth; - int32_t input_Fs, ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - - mc_input_setup = st_ivas->hEncoderConfig->mc_input_setup; - max_bwidth = st_ivas->hEncoderConfig->max_bwidth; - input_Fs = st_ivas->hEncoderConfig->input_Fs; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - hParamMC = st_ivas->hParamMC; - - /* Preparing Config */ - st_ivas->nchan_transport = ivas_param_mc_getNumTransportChannels( ivas_total_brate, mc_input_setup ); - - /* get configuration index */ - config_index = ivas_param_mc_get_configuration_index( mc_input_setup, ivas_total_brate ); - - /* set core coder dependent on the number of transport channels */ - switch ( st_ivas->nchan_transport ) - { - case 4: - case 3: - st_ivas->nCPE = 2; - st_ivas->nSCE = 0; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - break; - case 2: - st_ivas->nCPE = 1; - st_ivas->nSCE = 0; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - break; - } - - /* get dmx factors */ - hParamMC->dmx_factors = ivas_param_mc_conf[config_index].dmx_fac; -#ifdef IVAS_FLOAT_FIXED - hParamMC->dmx_factors_fx = ivas_param_mc_conf[config_index].dmx_fac_fx; -#endif - - /* open/init parameter coding */ - ivas_param_mc_metadata_open( mc_input_setup, ivas_total_brate, &hParamMC->hMetadataPMC ); - - /* Band Grouping */ - if ( hParamMC->hMetadataPMC.num_parameter_bands == 20 ) - { - mvs2s( param_mc_band_grouping_20, hParamMC->band_grouping, 20 + 1 ); - } - else if ( hParamMC->hMetadataPMC.num_parameter_bands == 14 ) - { - mvs2s( param_mc_band_grouping_14, hParamMC->band_grouping, 14 + 1 ); - } - else if ( hParamMC->hMetadataPMC.num_parameter_bands == 10 ) - { - mvs2s( param_mc_band_grouping_10, hParamMC->band_grouping, 10 + 1 ); - } - else - { - assert( 0 && "nbands must be 20, 14, or 10!" ); - } - - /* set max parameter band for abs cov */ - i = 0; - while ( hParamMC->band_grouping[i] <= PARAM_MC_MAX_BAND_ABS_COV_ENC ) - { - hParamMC->max_param_band_abs_cov = ( i++ ); - } - - /* parameter band grouping: 60 band CLDFB to 240 band MDFT resolution */ - for ( i = 0; i < hParamMC->hMetadataPMC.num_parameter_bands + 1; i++ ) - { - hParamMC->band_grouping[i] *= PARAM_MC_CLDFB_TO_MDFT_FAC; - } - - /* set correct coded band width */ - hParamMC->hMetadataPMC.coded_bwidth = max_bwidth; - hParamMC->hMetadataPMC.last_coded_bwidth = max_bwidth; - ivas_param_mc_set_coded_bands( &hParamMC->hMetadataPMC ); - - /* initialize offset for transient detection */ - hParamMC->transient_detector_delay = ( NSUBBLOCKS_SHIFT + 1 ) + NSUBBLOCKS + 1 - (int16_t) ceilf( (float) NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS ) / (float) NS2SA( input_Fs, 2 * DIRAC_SLOT_NS ) ); - - /* Init total/dmx ener factors */ - set_f( hParamMC->ener_fac, 0.0f, PARAM_MC_MAX_PARAMETER_BANDS ); -#ifdef IVAS_FLOAT_FIXED - set32_fx( hParamMC->ener_fac_fx, 0, PARAM_MC_MAX_PARAMETER_BANDS ); -#endif - - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -614,7 +362,6 @@ ivas_error ivas_param_mc_enc_reconfig( * Close Parametric MC encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_enc_close_fx( PARAM_MC_ENC_HANDLE *hParamMC, /* i/o: Parametric MC encoder handle */ const Word32 sampling_rate ) @@ -632,24 +379,6 @@ void ivas_param_mc_enc_close_fx( return; } -#else -void ivas_param_mc_enc_close( - PARAM_MC_ENC_HANDLE *hParamMC, /* i/o: Parametric MC encoder handle */ - const int32_t sampling_rate ) -{ - if ( hParamMC == NULL || *hParamMC == NULL ) - { - return; - } - - ivas_FB_mixer_close( &( *hParamMC )->hFbMixer, sampling_rate, 0 ); - - free( ( *hParamMC ) ); - ( *hParamMC ) = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -658,7 +387,6 @@ void ivas_param_mc_enc_close( * Parametric MC Encoder main encoding function *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_param_mc_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ @@ -840,369 +568,61 @@ void ivas_param_mc_enc_fx( return; } -#else -void ivas_param_mc_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ - BSTR_ENC_HANDLE hMetaData, /* i/o: IVAS Metadata bitstream handle */ - float *data_f[], /* i/o: input/transport MC data */ - const int16_t input_frame /* i : input frame length */ -) -{ - int16_t k; - float Cy_sum[PARAM_MC_MAX_PARAMETER_BANDS][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; - float Cx_sum[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS]; - float ILD_q[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP]; - int16_t ILD_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; - int16_t ICC_idx[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ICC_MAP]; - uint16_t bit_buffer[PARAM_MC_MAX_BITS]; - int16_t bit_pos; - int16_t band_step; - float data_dmx[PARAM_MC_MAX_TRANSPORT_CHANS][L_FRAME48k]; - int16_t ch; - int16_t band; - PARAM_MC_ENC_HANDLE hParamMC; - int16_t nchan_inp; - -#ifdef IVAS_FLOAT_FIXED - Word16 data_dmx_fx[PARAM_MC_MAX_TRANSPORT_CHANS][L_FRAME48k]; -#endif - - push_wmops( "param_mc_enc" ); - - /* initializations */ - hParamMC = st_ivas->hParamMC; - bit_pos = 0; - band_step = 1; - nchan_inp = st_ivas->hEncoderConfig->nchan_inp; - for ( band = 0; band < PARAM_MC_MAX_PARAMETER_BANDS; band++ ) - { - for ( ch = 0; ch < MAX_CICP_CHANNELS; ch++ ) - { - set_zero( Cy_sum[band][ch], MAX_CICP_CHANNELS ); - } - for ( ch = 0; ch < PARAM_MC_MAX_TRANSPORT_CHANS; ch++ ) - { - set_zero( Cx_sum[band][ch], PARAM_MC_MAX_TRANSPORT_CHANS ); - } - } - for ( band = 0; band < PARAM_MC_MAX_PARAMETER_BANDS; band++ ) - { - set_zero( ILD_q[band], PARAM_MC_SZ_ILD_MAP ); - } - set_s( ILD_idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); - set_s( ICC_idx, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ICC_MAP ); +/*****************************************************************************************/ +/* local functions */ +/*****************************************************************************************/ - /* update parameter frame index */ - hParamMC->hMetadataPMC.param_frame_idx = ( hParamMC->hMetadataPMC.param_frame_idx + 1 ) % PARAM_MC_PARAMETER_FRAMES; +/*------------------------------------------------------------------------- + * ivas_param_mc_dmx() + * + * Computes the time domain down mix signal + *------------------------------------------------------------------------*/ - /* DMX generation*/ - ivas_param_mc_dmx( hParamMC, data_f, data_dmx, input_frame, nchan_inp, st_ivas->nchan_transport ); +static void ivas_param_mc_dmx_fx( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + Word32 *data_f_fx[], /* i : Input frame Q_x */ + Word32 data_dmx_fx[][L_FRAME48k], /* o : Down mixed frame Q_x - 11 */ + const Word16 input_frame, /* i : Input frame length */ + const Word16 nchan_input, /* i : number of input channels */ + const Word16 nchan_transport /* i : number of transport channels */ +) +{ + Word16 i; + const Word16 *idx; + Word16 dmx_ch; + Word16 inp_ch; + const Word32 *p_dmx_fac_fx; - /* Transient Detector */ - switch ( st_ivas->nchan_transport ) + idx = Param_MC_index; + FOR( i = 0; i < input_frame; i++ ) { - case 2: - case 3: - case 4: + p_dmx_fac_fx = hParamMC->dmx_factors_fx; + FOR( dmx_ch = 0; dmx_ch < nchan_transport; dmx_ch++ ) { - int16_t bAttackPresent[PARAM_MC_MAX_TRANSPORT_CHANS]; - int16_t attackIdx[PARAM_MC_MAX_TRANSPORT_CHANS]; - - set_s( attackIdx, -1, PARAM_MC_MAX_TRANSPORT_CHANS ); - set_s( bAttackPresent, 0, PARAM_MC_MAX_TRANSPORT_CHANS ); - - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) + Word32 *dmx_sample_fx = &data_dmx_fx[idx[dmx_ch]][i]; + *dmx_sample_fx = 0; + move16(); + FOR( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) { - int16_t cpe_idx = ch / 2; - -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1 = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1_flt, -1 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2 = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2_flt, -1 ); + ( *dmx_sample_fx ) = Madd_32_32( ( *dmx_sample_fx ), data_f_fx[idx[inp_ch]][i], ( *( p_dmx_fac_fx++ ) ) ); + move16(); + } + } + } - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY + 1; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg[i] = floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg_flt[i], 7 ); - } + return; +} - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg[i] = floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg_flt[i], 7 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange[i] = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange_flt[i], 7 ); - } +/*------------------------------------------------------------------------- + * ivas_param_mc_param_est_enc() + * + * run the CLDFB analysis on the input signal + * estimate the input and down mix covariances + *------------------------------------------------------------------------*/ - FOR( Word16 i = 0; i < L_FRAME_MAX / NSUBBLOCKS; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer[i] = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer_flt[i], 7 ); - } - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->transientDetector.attackRatioThreshold = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->transientDetector.attackRatioThreshold_flt, 11 ); - - floatToFixed_arr16( data_dmx[ch], data_dmx_fx[ch], -1, input_frame ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.facAccSubblockNrg = float_to_fix16( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.facAccSubblockNrg_flt, 15 ); - -#endif - - RunTransientDetection_ivas_fx( data_dmx_fx[ch], input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1_flt = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1, -1 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2_flt = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2, -1 ); - - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg_flt[i] = fixedToFloat( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg[i], 7 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange_flt[i] = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange[i], 7 ); - } - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY + 1; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg_flt[i] = fixedToFloat( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg[i], 7 ); - } - - FOR( Word16 i = 0; i < L_FRAME_MAX / NSUBBLOCKS; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer_flt[i] = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer[i], -1 ); - } -#endif -#else - RunTransientDetection( data_dmx[ch], input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); -#endif - ivas_param_mc_transient_detection( hParamMC, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet, &bAttackPresent[ch], &attackIdx[ch] ); - } - - /* if more than one attack, use the earlier */ - hParamMC->hMetadataPMC.bAttackPresent = 0; - hParamMC->hMetadataPMC.attackIndex = 16; - - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) - { - hParamMC->hMetadataPMC.bAttackPresent = max( hParamMC->hMetadataPMC.bAttackPresent, bAttackPresent[ch] ); - } - - if ( hParamMC->hMetadataPMC.bAttackPresent ) - { - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) - { - hParamMC->hMetadataPMC.attackIndex = min( hParamMC->hMetadataPMC.attackIndex, attackIdx[ch] ); - } - } - else - { - hParamMC->hMetadataPMC.attackIndex = 0; - } - } - break; - } - - /* Encoding */ - /* parameter estimation*/ - ivas_param_mc_param_est_enc( hParamMC, data_f, Cy_sum, Cx_sum, input_frame, nchan_inp, st_ivas->nchan_transport ); - - band_step = hParamMC->hMetadataPMC.bAttackPresent ? PARAM_MC_TRANSIENT_BAND_STEP : 1; - - - /* ILD parameter quantization */ - for ( k = 0; k < hParamMC->hMetadataPMC.nbands_coded; k += band_step ) - { - ivas_param_mc_quantize_ilds( hParamMC, Cy_sum[k], Cx_sum[k], k, nchan_inp, st_ivas->nchan_transport, ILD_idx, ILD_q[k] ); - } - - /* ICC parameter quantization */ - for ( k = 0; k < hParamMC->hMetadataPMC.nbands_coded; k += band_step ) - { - ivas_param_mc_quantize_iccs( hParamMC, Cy_sum[k], k, nchan_inp, ICC_idx ); - } - - /* time domain DMX generation*/ - /* just copy data_dmx generated above, contains already the downmix */ - for ( ch = 0; ch < st_ivas->nchan_transport; ch++ ) - { - mvr2r( data_dmx[ch], data_f[ch], input_frame ); - } - - /* we have to run the transient detector on the second channel of the last CPE if we - have an odd number of transport channels */ - if ( st_ivas->nchan_transport > 2 ) - { - for ( ; ch < st_ivas->nCPE * CPE_CHANNELS; ch++ ) - { - int16_t cpe_idx = ch / 2; - - set_zero( data_f[ch], input_frame ); - -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word16 data_fx[L_FRAME48k]; - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1 = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1_flt, -1 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2 = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2_flt, -1 ); - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY + 1; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg[i] = floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg_flt[i], 7 ); - } - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg[i] = floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg_flt[i], 7 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange[i] = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange_flt[i], 7 ); - } - - - FOR( Word16 i = 0; i < L_FRAME_MAX / NSUBBLOCKS; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer[i] = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer_flt[i], -1 ); - } - - - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->transientDetector.attackRatioThreshold = (Word16) floatToFixed( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->transientDetector.attackRatioThreshold_flt, 11 ); - - floatToFixed_arr16( data_f[ch], data_fx, -1, input_frame ); - - - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.facAccSubblockNrg = float_to_fix16( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.facAccSubblockNrg_flt, 15 ); - -#endif - - RunTransientDetection_ivas_fx( data_fx, input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1_flt = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState1, -1 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2_flt = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.firState2, -1 ); - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg_flt[i] = fixedToFloat( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrg[i], 7 ); - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange_flt[i] = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.subblockNrgChange[i], 7 ); - } - - FOR( Word16 i = 0; i < NSUBBLOCKS + MAX_TD_DELAY + 1; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg_flt[i] = fixedToFloat( st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->subblockEnergies.accSubblockNrg[i], 7 ); - } - - FOR( Word16 i = 0; i < L_FRAME_MAX / NSUBBLOCKS; i++ ) - { - st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer_flt[i] = fixedToFloat( (Word32) st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet->delayBuffer.buffer[i], -1 ); - } - -#endif -#else - RunTransientDetection( data_f[ch], input_frame, st_ivas->hCPE[cpe_idx]->hCoreCoder[ch - cpe_idx * CPE_CHANNELS]->hTranDet ); -#endif - } - } - - /* write Parametric MC side info bitstream into temporary buffer*/ - ivas_param_mc_write_bs( hParamMC, ILD_idx, ICC_idx, bit_buffer, &bit_pos ); - - /* push the Parametric MC side info from the temporary buffer into the medatdata bitstream*/ - push_next_bits( hMetaData, bit_buffer, bit_pos ); - - /* updates */ - hParamMC->hMetadataPMC.last_coded_bwidth = hParamMC->hMetadataPMC.coded_bwidth; - - pop_wmops(); - - return; -} -#endif - - -/*****************************************************************************************/ -/* local functions */ -/*****************************************************************************************/ - -/*------------------------------------------------------------------------- - * ivas_param_mc_dmx() - * - * Computes the time domain down mix signal - *------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_dmx( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - float *data_f[], /* i : Input frame */ - float data_dmx[][L_FRAME48k], /* o : Down mixed frame */ - const int16_t input_frame, /* i : Input frame length */ - const int16_t nchan_input, /* i : number of input channels */ - const int16_t nchan_transport /* i : number of transport channels */ -) -{ - int16_t i; - const int16_t *idx; - int16_t dmx_ch; - int16_t inp_ch; - const float *p_dmx_fac; - - idx = Param_MC_index; - for ( i = 0; i < input_frame; i++ ) - { - p_dmx_fac = hParamMC->dmx_factors; - for ( dmx_ch = 0; dmx_ch < nchan_transport; dmx_ch++ ) - { - float *dmx_sample = &data_dmx[idx[dmx_ch]][i]; - *dmx_sample = 0.0f; - for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) - { - ( *dmx_sample ) += data_f[idx[inp_ch]][i] * ( *( p_dmx_fac++ ) ); - } - } - } - - return; -} -#else -static void ivas_param_mc_dmx_fx( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - Word32 *data_f_fx[], /* i : Input frame Q_x */ - Word32 data_dmx_fx[][L_FRAME48k], /* o : Down mixed frame Q_x - 11 */ - const Word16 input_frame, /* i : Input frame length */ - const Word16 nchan_input, /* i : number of input channels */ - const Word16 nchan_transport /* i : number of transport channels */ -) -{ - Word16 i; - const Word16 *idx; - Word16 dmx_ch; - Word16 inp_ch; - const Word32 *p_dmx_fac_fx; - - idx = Param_MC_index; - FOR( i = 0; i < input_frame; i++ ) - { - p_dmx_fac_fx = hParamMC->dmx_factors_fx; - FOR( dmx_ch = 0; dmx_ch < nchan_transport; dmx_ch++ ) - { - Word32 *dmx_sample_fx = &data_dmx_fx[idx[dmx_ch]][i]; - *dmx_sample_fx = 0; - move16(); - FOR( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) - { - ( *dmx_sample_fx ) = Madd_32_32( ( *dmx_sample_fx ), data_f_fx[idx[inp_ch]][i], ( *( p_dmx_fac_fx++ ) ) ); - move16(); - } - } - } - - return; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_param_mc_param_est_enc() - * - * run the CLDFB analysis on the input signal - * estimate the input and down mix covariances - *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_param_est_enc_fx( PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ Word32 *data_f_fx[], /* i : Input frame in the time domain Q11 */ @@ -1761,456 +1181,81 @@ static void ivas_param_mc_param_est_enc_fx( return; } -#else -static void ivas_param_mc_param_est_enc( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - float *data_f[], /* i : Input frame in the time domain */ - float Cy_sum[][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* o : Covariance matrix for the original frame */ - float Cx_sum[][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* o : Covariance matrix for the downmixed frame */ - const int16_t input_frame, /* i : Input frame length */ - const int16_t nchan_input, /* i : number of input channels */ - const int16_t nchan_transport /* i : number of transport channels */ + +/*------------------------------------------------------------------------- + * ivas_param_mc_quantize_ilds() + * + * Quantize the ILD parameters + *------------------------------------------------------------------------*/ + +static void ivas_param_mc_quantize_ilds_fx( + PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ + Word32 Cy_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ + Word16 Cy_e[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ + Word32 Cx_fx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ + Word16 Cx_e[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ + const Word16 freq_idx, /* i : frequency index being processed */ + const Word16 nchan_input, /* i : number of input channels */ + const Word16 nchan_transport, /* i : number of transport channels */ + Word16 *ILD_idx_out, /* o : ILD indices */ + Word16 ILD_q[PARAM_MC_SZ_ILD_MAP] /* o : Quanzited ILD matrix */ ) { - int16_t i, cur_cldfb_band, cur_param_band, ch_idx1, ch_idx2, inp_ch; - int16_t ts; - int16_t l_ts; - int16_t num_time_slots; - int16_t num_parameter_bands; - int16_t brange[2]; - int16_t band_step; - const int16_t *map_ls = Param_MC_index; /* Loudspeakers mapping */ - int16_t idx_ls; - float *pcm_in[MAX_CICP_CHANNELS]; - float slot_frame_f_real[MAX_CICP_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; /* Output of the MDFT FB - real part */ - float slot_frame_f_imag[MAX_CICP_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; /* Output of the MDFT FB - imag part */ - float *p_slot_frame_f_real[MAX_CICP_CHANNELS]; /* Output of the MDFT FB - real part */ - float *p_slot_frame_f_imag[MAX_CICP_CHANNELS]; /* Output of the MDFT FB - imag part */ - - float dmx_real[PARAM_MC_MAX_TRANSPORT_CHANS]; /* Downmix channel - Real Part */ - float dmx_imag[PARAM_MC_MAX_TRANSPORT_CHANS]; /* Downmix channel - Imag Part */ - float a, b, c, d; /* Tmp complex values */ - float Cy_sum_imag[PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC][MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; - float Cx_sum_imag[PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC][PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS]; - float real_part, imag_part; - int16_t start_ts; - const float *p_dmx_fac; + Word16 i, k; + Word16 Ny; + Word16 num_ilds_to_code; + Word16 ild_map_size; + Word32 Nrg_fx[MAX_CICP_CHANNELS]; + Word16 Nrg_e[MAX_CICP_CHANNELS]; + Word32 ILD_fx[PARAM_MC_SZ_ILD_MAP]; + Word16 ILD_e[PARAM_MC_SZ_ILD_MAP]; + const PARAM_MC_ILD_MAPPING *h_ild_mapping; + Word32 tot_ener_fx, dmx_ener_fx, ener_fac_fx, delta_fac_fx; + Word16 tot_ener_e, dmx_ener_e; + Word16 ILD_idx[PARAM_MC_SZ_ILD_MAP]; + Word32 L_tmp; + Word16 tmp_e; - push_wmops( "param_mc_prm_est" ); + push_wmops( "param_mc_prm_q" ); - /* initializations */ - l_ts = input_frame / PARAM_MC_MDFT_NO_SLOTS; - num_time_slots = PARAM_MC_MDFT_NO_SLOTS; - start_ts = hParamMC->hMetadataPMC.bAttackPresent ? hParamMC->hMetadataPMC.attackIndex : 0; - num_parameter_bands = hParamMC->hMetadataPMC.nbands_coded; - band_step = 1; + /* Initialization */ + set32_fx( Nrg_fx, 0, MAX_CICP_CHANNELS ); + set32_fx( ILD_fx, 0, PARAM_MC_SZ_ILD_MAP ); - for ( cur_param_band = 0; cur_param_band < PARAM_MC_MAX_PARAM_BAND_ABS_COV_ENC; cur_param_band++ ) - { - for ( ch_idx1 = 0; ch_idx1 < MAX_CICP_CHANNELS; ch_idx1++ ) - { - set_zero( Cy_sum_imag[cur_param_band][ch_idx1], MAX_CICP_CHANNELS ); - } + Ny = nchan_input; + move16(); - for ( ch_idx1 = 0; ch_idx1 < PARAM_MC_MAX_TRANSPORT_CHANS; ch_idx1++ ) - { - set_zero( Cx_sum_imag[cur_param_band][ch_idx1], PARAM_MC_MAX_TRANSPORT_CHANS ); - } + h_ild_mapping = hParamMC->hMetadataPMC.ild_mapping_conf; + ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; + move16(); + IF( GE_16( freq_idx, PARAM_MC_MAX_BAND_LFE ) ) + { + num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; + move16(); } - - /* Copy current frame to memory for delay compensation */ - for ( i = 0; i < nchan_input; i++ ) + ELSE { - idx_ls = map_ls[i]; - pcm_in[i] = data_f[idx_ls]; - p_slot_frame_f_real[i] = &slot_frame_f_real[i][0]; - p_slot_frame_f_imag[i] = &slot_frame_f_imag[i][0]; + num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; + move16(); } - for ( ts = 0; ts < start_ts; ts++ ) + /* Downsampling */ + test(); + IF( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && NE_16( hParamMC->hMetadataPMC.param_frame_idx, hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) { - ivas_fb_mixer_update_prior_input( hParamMC->hFbMixer, pcm_in, l_ts, hParamMC->hFbMixer->fb_cfg->num_in_chans ); - for ( i = 0; i < nchan_input; i++ ) - { - pcm_in[i] += l_ts; - } + pop_wmops(); + + return; } - for ( ts = start_ts; ts < num_time_slots; ts++ ) + /* get ICLDs */ + FOR( k = 0; k < Ny; ++k ) { - ivas_fb_mixer_get_windowed_fr( hParamMC->hFbMixer, pcm_in, p_slot_frame_f_real, p_slot_frame_f_imag, l_ts, l_ts, hParamMC->hFbMixer->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hParamMC->hFbMixer, pcm_in, l_ts, hParamMC->hFbMixer->fb_cfg->num_in_chans ); - - for ( i = 0; i < nchan_input; i++ ) - { - pcm_in[i] += l_ts; - } - /* Computing the downmix */ - for ( cur_param_band = 0; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band++ ) - { - brange[0] = hParamMC->band_grouping[cur_param_band]; - brange[1] = hParamMC->band_grouping[cur_param_band + 1]; - - for ( cur_cldfb_band = brange[0]; cur_cldfb_band < brange[1]; cur_cldfb_band++ ) - { - /* Cx for DMX */ - /* Real Part */ - p_dmx_fac = hParamMC->dmx_factors; - - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - dmx_real[ch_idx1] = 0.0f; - dmx_imag[ch_idx1] = 0.0f; - for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) - { - dmx_real[ch_idx1] += slot_frame_f_real[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); - dmx_imag[ch_idx1] += slot_frame_f_imag[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); - p_dmx_fac++; - } - } - - /* Cx for transport channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) - { - a = dmx_real[ch_idx1]; - b = dmx_imag[ch_idx1]; - c = dmx_real[ch_idx2]; - d = dmx_imag[ch_idx2]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - Cx_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; - Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2] += a * d - b * c; - } - } - - /* Cy for input channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) - { - a = slot_frame_f_real[ch_idx1][cur_cldfb_band]; - b = slot_frame_f_imag[ch_idx1][cur_cldfb_band]; - c = slot_frame_f_real[ch_idx2][cur_cldfb_band]; - d = slot_frame_f_imag[ch_idx2][cur_cldfb_band]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - Cy_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; - Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2] += a * d - b * c; - } - } - } - } - - for ( ; cur_param_band < num_parameter_bands; cur_param_band++ ) - { - brange[0] = hParamMC->band_grouping[cur_param_band]; - brange[1] = hParamMC->band_grouping[cur_param_band + 1]; - - for ( cur_cldfb_band = brange[0]; cur_cldfb_band < brange[1]; cur_cldfb_band++ ) - { - /* Cx for DMX */ - /* Real Part */ - p_dmx_fac = hParamMC->dmx_factors; - - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - dmx_real[ch_idx1] = 0.0f; - dmx_imag[ch_idx1] = 0.0f; - - for ( inp_ch = 0; inp_ch < nchan_input; inp_ch++ ) - { - dmx_real[ch_idx1] += slot_frame_f_real[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); - dmx_imag[ch_idx1] += slot_frame_f_imag[inp_ch][cur_cldfb_band] * ( *p_dmx_fac ); - p_dmx_fac++; - } - } - - /* Cx for transport channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) - { - a = dmx_real[ch_idx1]; - b = dmx_imag[ch_idx1]; - c = dmx_real[ch_idx2]; - d = dmx_imag[ch_idx2]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - Cx_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; - } - } - - /* Cy for input channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) - { - a = slot_frame_f_real[ch_idx1][cur_cldfb_band]; - b = slot_frame_f_imag[ch_idx1][cur_cldfb_band]; - c = slot_frame_f_real[ch_idx2][cur_cldfb_band]; - d = slot_frame_f_imag[ch_idx2][cur_cldfb_band]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - Cy_sum[cur_param_band][ch_idx1][ch_idx2] += a * c + b * d; - } - } - } - } - } - - /* make sure energy and correlation is zero above the relevant LFE bands for LFE - * avoids wrong energy in case of band combining at transients */ - if ( hParamMC->lfe_index >= 0 ) - { - for ( cur_param_band = PARAM_MC_MAX_BAND_LFE; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band++ ) - { - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - Cy_sum[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; - Cy_sum[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; - Cy_sum_imag[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; - Cy_sum_imag[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; - } - } - - for ( ; cur_param_band < num_parameter_bands; cur_param_band++ ) - { - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - Cy_sum[cur_param_band][hParamMC->lfe_index][ch_idx1] = 0.0f; - Cy_sum[cur_param_band][ch_idx1][hParamMC->lfe_index] = 0.0f; - } - } - } - - if ( !hParamMC->hMetadataPMC.bAttackPresent ) - { - const PARAM_MC_ILD_MAPPING *h_ild_mapping; - int16_t ild_attack; - ild_attack = 0; - h_ild_mapping = hParamMC->hMetadataPMC.ild_mapping_conf; - /* create ILDs for to non transmitted parameter bands (only lower half) */ - for ( cur_param_band = 0; cur_param_band < hParamMC->hMetadataPMC.num_parameter_bands / 2; cur_param_band++ ) - { - float ILD[PARAM_MC_SZ_ILD_MAP]; - int16_t k; - int16_t num_ilds_to_code; - - if ( cur_param_band >= PARAM_MC_MAX_BAND_LFE ) - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; - } - else - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - } - if ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[cur_param_band] ) - { - float Nrg[MAX_CICP_CHANNELS]; - - /* get ICLDs */ - for ( k = 0; k < nchan_input; ++k ) - { - Nrg[k] = Cy_sum[cur_param_band][k][k]; - } - for ( k = 0; k < num_ilds_to_code; ++k ) - { - float ref_ener = 0.0f; - int16_t ref_channel_cnt; - int16_t ref_channel_idx; - - for ( ref_channel_cnt = 0; ref_channel_cnt < h_ild_mapping->num_ref_channels[k]; ref_channel_cnt++ ) - { - ref_channel_idx = h_ild_mapping->ref_channel_idx[k][ref_channel_cnt]; - ref_ener += Cx_sum[cur_param_band][ref_channel_idx][ref_channel_idx]; - } - ILD[k] = 10.0f * log10f( ( Nrg[h_ild_mapping->ild_index[k]] + EPSILON ) / ( hParamMC->hMetadataPMC.ild_factors[k] * ref_ener + EPSILON ) ); - if ( hParamMC->prev_ilds[cur_param_band][k] - ILD[k] > param_mc_ild_diff_threshold[cur_param_band] ) - { - ild_attack++; - } - } - } - } - /* check if the ILDs change too much -> go into transient mode... */ - if ( ild_attack > PARAM_MC_NUM_ATTACK_ILD_THRESH ) - { - hParamMC->hMetadataPMC.bAttackPresent = 1; - } - } - - - if ( hParamMC->hMetadataPMC.bAttackPresent ) - { - /* combine bands */ - for ( cur_param_band = 1; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band += 2 ) - { - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) - { - Cx_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum[cur_param_band][ch_idx1][ch_idx2]; - Cx_sum_imag[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2]; - } - } - - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) - { - Cy_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum[cur_param_band][ch_idx1][ch_idx2]; - Cy_sum_imag[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2]; - } - } - } - - for ( ; cur_param_band < num_parameter_bands; cur_param_band += 2 ) - { - if ( cur_param_band < num_parameter_bands ) - { - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ++ch_idx1 ) - { - for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ++ch_idx2 ) - { - Cx_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cx_sum[cur_param_band][ch_idx1][ch_idx2]; - } - } - - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ++ch_idx1 ) - { - for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ++ch_idx2 ) - { - Cy_sum[cur_param_band - 1][ch_idx1][ch_idx2] += Cy_sum[cur_param_band][ch_idx1][ch_idx2]; - } - } - } - } - - band_step = 2; - } - - - /* map complex covariances to real values */ - for ( cur_param_band = 0; cur_param_band < hParamMC->max_param_band_abs_cov; cur_param_band += band_step ) - { - /* Cx for transport channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_transport; ch_idx1++ ) - { - for ( ch_idx2 = 0; ch_idx2 < nchan_transport; ch_idx2++ ) - { - real_part = Cx_sum[cur_param_band][ch_idx1][ch_idx2]; - imag_part = Cx_sum_imag[cur_param_band][ch_idx1][ch_idx2]; - - /* (a-ib)(c+id) = ac + bd + i(ad-bc) */ - Cx_sum[cur_param_band][ch_idx1][ch_idx2] = sqrtf( real_part * real_part + imag_part * imag_part ); - } - } - - /* Cy for transport channels */ - for ( ch_idx1 = 0; ch_idx1 < nchan_input; ch_idx1++ ) - { - for ( ch_idx2 = ch_idx1; ch_idx2 < nchan_input; ch_idx2++ ) - { - real_part = Cy_sum[cur_param_band][ch_idx1][ch_idx2]; - imag_part = Cy_sum_imag[cur_param_band][ch_idx1][ch_idx2]; - Cy_sum[cur_param_band][ch_idx1][ch_idx2] = sqrtf( real_part * real_part + imag_part * imag_part ); - } - } - } - - if ( Cy_sum[0][LFE_CHANNEL][LFE_CHANNEL] < PARAM_MC_LFE_ON_THRESH ) - { - hParamMC->hMetadataPMC.lfe_on = 0; - } - else - { - hParamMC->hMetadataPMC.lfe_on = 1; - } - - pop_wmops(); - - return; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_param_mc_quantize_ilds() - * - * Quantize the ILD parameters - *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static void ivas_param_mc_quantize_ilds_fx( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - Word32 Cy_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ - Word16 Cy_e[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ - Word32 Cx_fx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ - Word16 Cx_e[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ - const Word16 freq_idx, /* i : frequency index being processed */ - const Word16 nchan_input, /* i : number of input channels */ - const Word16 nchan_transport, /* i : number of transport channels */ - Word16 *ILD_idx_out, /* o : ILD indices */ - Word16 ILD_q[PARAM_MC_SZ_ILD_MAP] /* o : Quanzited ILD matrix */ -) -{ - Word16 i, k; - Word16 Ny; - Word16 num_ilds_to_code; - Word16 ild_map_size; - Word32 Nrg_fx[MAX_CICP_CHANNELS]; - Word16 Nrg_e[MAX_CICP_CHANNELS]; - Word32 ILD_fx[PARAM_MC_SZ_ILD_MAP]; - Word16 ILD_e[PARAM_MC_SZ_ILD_MAP]; - const PARAM_MC_ILD_MAPPING *h_ild_mapping; - Word32 tot_ener_fx, dmx_ener_fx, ener_fac_fx, delta_fac_fx; - Word16 tot_ener_e, dmx_ener_e; - Word16 ILD_idx[PARAM_MC_SZ_ILD_MAP]; - Word32 L_tmp; - Word16 tmp_e; - - push_wmops( "param_mc_prm_q" ); - - /* Initialization */ - set32_fx( Nrg_fx, 0, MAX_CICP_CHANNELS ); - set32_fx( ILD_fx, 0, PARAM_MC_SZ_ILD_MAP ); - - Ny = nchan_input; - move16(); - - h_ild_mapping = hParamMC->hMetadataPMC.ild_mapping_conf; - ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - move16(); - IF( GE_16( freq_idx, PARAM_MC_MAX_BAND_LFE ) ) - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; - move16(); - } - ELSE - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - move16(); - } - - /* Downsampling */ - test(); - IF( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && NE_16( hParamMC->hMetadataPMC.param_frame_idx, hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) - { - pop_wmops(); - - return; - } - - /* get ICLDs */ - FOR( k = 0; k < Ny; ++k ) - { - Nrg_fx[k] = Cy_fx[k][k]; - move32(); - Nrg_e[k] = Cy_e[k][k]; - move16(); - } + Nrg_fx[k] = Cy_fx[k][k]; + move32(); + Nrg_e[k] = Cy_e[k][k]; + move16(); + } /* limit ILDs if DMX energy is lower than sum of channel energies */ tot_ener_fx = 0; @@ -2376,153 +1421,6 @@ static void ivas_param_mc_quantize_ilds_fx( return; } -#else -static void ivas_param_mc_quantize_ilds( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ - float Cx[PARAM_MC_MAX_TRANSPORT_CHANS][PARAM_MC_MAX_TRANSPORT_CHANS], /* i : Covariance matrix of the dmx */ - const int16_t freq_idx, /* i : frequency index being processed */ - const int16_t nchan_input, /* i : number of input channels */ - const int16_t nchan_transport, /* i : number of transport channels */ - int16_t *ILD_idx_out, /* o : ILD indices */ - float ILD_q[PARAM_MC_SZ_ILD_MAP] /* o : Quanzited ILD matrix */ -) -{ - int16_t k; - int16_t Ny; - int16_t num_ilds_to_code; - int16_t ild_map_size; - float Nrg[MAX_CICP_CHANNELS]; - float ILD[PARAM_MC_SZ_ILD_MAP]; - const PARAM_MC_ILD_MAPPING *h_ild_mapping; - float tot_ener, dmx_ener, ener_fac, delta_fac; - int16_t ILD_idx[PARAM_MC_SZ_ILD_MAP]; - - push_wmops( "param_mc_prm_q" ); - - /* Initialization */ - set_zero( Nrg, MAX_CICP_CHANNELS ); - set_zero( ILD, PARAM_MC_SZ_ILD_MAP ); - - Ny = nchan_input; - - h_ild_mapping = hParamMC->hMetadataPMC.ild_mapping_conf; - ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - if ( freq_idx >= PARAM_MC_MAX_BAND_LFE ) - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; - } - else - { - num_ilds_to_code = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - } - - /* Downsampling */ - if ( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) - { - pop_wmops(); - - return; - } - - /* get ICLDs */ - for ( k = 0; k < Ny; ++k ) - { - Nrg[k] = Cy[k][k]; - } - - /* limit ILDs if DMX energy is lower than sum of channel energies */ - tot_ener = 0.0f; - dmx_ener = 0.0f; - - for ( k = 0; k < ild_map_size; k++ ) - { - if ( k != hParamMC->lfe_index || hParamMC->hMetadataPMC.lfe_on ) - { - tot_ener += Nrg[k]; - } - } - - for ( k = 0; k < nchan_transport; k++ ) - { - dmx_ener += Cx[k][k]; - } - ener_fac = 10.0f * log10f( ( tot_ener + EPSILON ) / ( dmx_ener + EPSILON ) ); - - if ( ener_fac > PARAM_MC_ENER_LIMIT_INTRAFRAME ) - { - float limit_fac; - limit_fac = powf( 10.0f, ( ( 0.3f * logf( ener_fac - PARAM_MC_ENER_LIMIT_INTRAFRAME + 1.0f ) - ( ener_fac - PARAM_MC_ENER_LIMIT_INTRAFRAME ) ) / 10.0f ) ); - v_multc( Nrg, limit_fac, Nrg, num_ilds_to_code ); - } - - /* limit ILD jumps in non-tranient frames */ - tot_ener = 0.0f; - dmx_ener = 0.0f; - - for ( k = 0; k < ild_map_size; k++ ) - { - if ( k != hParamMC->lfe_index || hParamMC->hMetadataPMC.lfe_on ) - { - tot_ener += Nrg[k]; - } - } - - for ( k = 0; k < nchan_transport; k++ ) - { - dmx_ener += Cx[k][k]; - } - - ener_fac = 10.0f * log10f( ( tot_ener + EPSILON ) / ( dmx_ener + EPSILON ) ); - delta_fac = ener_fac - hParamMC->ener_fac[freq_idx]; - - if ( !hParamMC->hMetadataPMC.bAttackPresent && ( delta_fac > PARAM_MC_ENER_LIMIT_INTERFRAME ) && ( delta_fac < PARAM_MC_ENER_LIMIT_MAX_DELTA_FAC ) ) - { - float limit_fac; - limit_fac = powf( 10.0f, ( ( 0.3f * logf( delta_fac - PARAM_MC_ENER_LIMIT_INTERFRAME + 1.0f ) - ( delta_fac - PARAM_MC_ENER_LIMIT_INTERFRAME ) ) / 10.0f ) ); - v_multc( Nrg, limit_fac, Nrg, num_ilds_to_code ); - ener_fac += 10.0f * log10f( limit_fac ); - } - - hParamMC->ener_fac[freq_idx] = ener_fac; - - /* update also combined bands ener_fac when in transient frame */ - if ( hParamMC->hMetadataPMC.bAttackPresent && ( ( freq_idx + 1 ) < hParamMC->hMetadataPMC.nbands_coded ) ) - { - hParamMC->ener_fac[freq_idx + 1] = ener_fac; - } - - for ( k = 0; k < num_ilds_to_code; ++k ) - { - float ref_ener = 0.0f; - int16_t ref_channel_cnt; - int16_t ref_channel_idx; - - for ( ref_channel_cnt = 0; ref_channel_cnt < h_ild_mapping->num_ref_channels[k]; ref_channel_cnt++ ) - { - ref_channel_idx = h_ild_mapping->ref_channel_idx[k][ref_channel_cnt]; - ref_ener += Cx[ref_channel_idx][ref_channel_idx]; - } - ILD[k] = 10.0f * log10f( ( Nrg[h_ild_mapping->ild_index[k]] + EPSILON ) / ( hParamMC->hMetadataPMC.ild_factors[k] * ref_ener + EPSILON ) ); - hParamMC->prev_ilds[freq_idx][k] = ILD[k]; - if ( hParamMC->hMetadataPMC.bAttackPresent && ( ( freq_idx + 1 ) < hParamMC->hMetadataPMC.nbands_coded ) ) - { - hParamMC->prev_ilds[freq_idx + 1][k] = ILD[k]; - } - } - - - /* quantize parameters */ - ivas_param_mc_parameter_quantizer( ILD, num_ilds_to_code, hParamMC->hMetadataPMC.ild_coding.quantizer_size, hParamMC->hMetadataPMC.ild_coding.quantizer, ILD_idx, ILD_q ); - - /* Save current quantized ICLDs */ - mvs2s( ILD_idx, ILD_idx_out + freq_idx * ild_map_size, num_ilds_to_code ); - - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2531,7 +1429,6 @@ static void ivas_param_mc_quantize_ilds( * Quantize the ILD parameters *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_quantize_iccs_fx( PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ Word32 Cy_fx[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ @@ -2588,162 +1485,70 @@ static void ivas_param_mc_quantize_iccs_fx( Nrg_fx[k] = Cy_fx[k][k]; move32(); Nrg_e = Cy_e[k][k]; - move16(); - a_fx = ISqrt32( L_add( Nrg_fx[k], EPSILLON_FX ), &Nrg_e ); - - FOR( i = k; i < Ny; ++i ) - { - Cy_fx[k][i] = Mpy_32_32( Cy_fx[k][i], a_fx ); - move32(); - Cy_fx[k][i] = BASOP_Util_Add_Mant32Exp( Cy_fx[k][i], add( Cy_e[k][i], Nrg_e ), 0, 0, &Cy_e[k][i] ); - move32(); - } - - FOR( i = 0; i <= k; i++ ) - { - Cy_fx[i][k] = Mpy_32_32( Cy_fx[i][k], a_fx ); - move32(); - Cy_fx[i][k] = BASOP_Util_Add_Mant32Exp( Cy_fx[i][k], add( Cy_e[i][k], Nrg_e ), 0, 0, &Cy_e[i][k] ); - move32(); - } - } - - /* set ICCs for zero channels to 1 to avoid artifacts in the decoded signal */ - FOR( k = 0; k < Ny; ++k ) - { - IF( Nrg_fx[k] == 0 ) - { - FOR( i = k; i < Ny; ++i ) - { - Cy_fx[k][i] = ONE_IN_Q31; - move32(); - Cy_e[k][i] = 0; - move16(); - } - - FOR( i = 0; i <= k; ++i ) - { - Cy_fx[i][k] = ONE_IN_Q31; - move32(); - Cy_e[i][k] = 0; - move16(); - } - } - } - - /* Reduce set of parameters and quantize them */ - FOR( k = 0; k < num_iccs_to_code; ++k ) - { - tmp_map[0] = hParamMC->hMetadataPMC.icc_mapping_conf->icc_mapping[k][0]; - move16(); - tmp_map[1] = hParamMC->hMetadataPMC.icc_mapping_conf->icc_mapping[k][1]; - move16(); - ICC_vect_fx[k] = Cy_fx[tmp_map[0]][tmp_map[1]]; - move32(); - ICC_vect_e[k] = Cy_e[tmp_map[0]][tmp_map[1]]; - move16(); - } - - /* Quantization */ - ivas_param_mc_parameter_quantizer_fx( ICC_vect_fx, ICC_vect_e, num_iccs_to_code, hParamMC->hMetadataPMC.icc_coding.quantizer_size, hParamMC->hMetadataPMC.icc_coding.quantizer_fx, Q15, ICC_idx, ICC_vect_q_fx ); - - /* Save current quantized ICCs */ - Copy( ICC_idx, ICC_idx_out + freq_idx * icc_map_size, num_iccs_to_code ); - - return; -} -#else -static void ivas_param_mc_quantize_iccs( - PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder handle */ - float Cy[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS], /* i : Covariance matrix of the input */ - const int16_t freq_idx, /* i : frequency index being processed */ - const int16_t nchan_input, /* i : number of input channels */ - int16_t *ICC_idx_out /* o : quantizer indices */ -) -{ - int16_t i, k; - int16_t Ny; - int16_t num_iccs_to_code; - int16_t icc_map_size; - float a; - int16_t tmp_map[2]; - float Nrg[MAX_CICP_CHANNELS]; - float ICC_vect[PARAM_MC_SZ_ICC_MAP]; - float ICC_vect_q[PARAM_MC_SZ_ICC_MAP]; - int16_t ICC_idx[PARAM_MC_SZ_ICC_MAP]; - - /* Initialization */ - set_zero( Nrg, MAX_CICP_CHANNELS ); - set_zero( ICC_vect, PARAM_MC_SZ_ICC_MAP ); - set_zero( ICC_vect_q, PARAM_MC_SZ_ICC_MAP ); - - Ny = nchan_input; - - /* Downsampling */ - if ( ( hParamMC->hMetadataPMC.bAttackPresent == 0 ) && ( hParamMC->hMetadataPMC.param_frame_idx != hParamMC->hMetadataPMC.coding_band_mapping[freq_idx] ) ) - { - return; - } - - icc_map_size = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; - num_iccs_to_code = icc_map_size; - - if ( freq_idx >= PARAM_MC_MAX_BAND_LFE ) - { - num_iccs_to_code = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_wo_lfe; - } - - /* Get ICC matrix from Cy */ - for ( k = 0; k < Ny; ++k ) - { - Nrg[k] = Cy[k][k]; - a = 1.0f / ( sqrtf( Nrg[k] ) + EPSILON ); + move16(); + a_fx = ISqrt32( L_add( Nrg_fx[k], EPSILLON_FX ), &Nrg_e ); - for ( i = k; i < Ny; ++i ) + FOR( i = k; i < Ny; ++i ) { - Cy[k][i] = Cy[k][i] * a; + Cy_fx[k][i] = Mpy_32_32( Cy_fx[k][i], a_fx ); + move32(); + Cy_fx[k][i] = BASOP_Util_Add_Mant32Exp( Cy_fx[k][i], add( Cy_e[k][i], Nrg_e ), 0, 0, &Cy_e[k][i] ); + move32(); } - for ( i = 0; i <= k; i++ ) + FOR( i = 0; i <= k; i++ ) { - Cy[i][k] = Cy[i][k] * a; + Cy_fx[i][k] = Mpy_32_32( Cy_fx[i][k], a_fx ); + move32(); + Cy_fx[i][k] = BASOP_Util_Add_Mant32Exp( Cy_fx[i][k], add( Cy_e[i][k], Nrg_e ), 0, 0, &Cy_e[i][k] ); + move32(); } } /* set ICCs for zero channels to 1 to avoid artifacts in the decoded signal */ - for ( k = 0; k < Ny; ++k ) + FOR( k = 0; k < Ny; ++k ) { - if ( Nrg[k] == 0.0f ) + IF( Nrg_fx[k] == 0 ) { - for ( i = k; i < Ny; ++i ) + FOR( i = k; i < Ny; ++i ) { - Cy[k][i] = 1.0f; + Cy_fx[k][i] = ONE_IN_Q31; + move32(); + Cy_e[k][i] = 0; + move16(); } - for ( i = 0; i <= k; ++i ) + FOR( i = 0; i <= k; ++i ) { - Cy[i][k] = 1.0f; + Cy_fx[i][k] = ONE_IN_Q31; + move32(); + Cy_e[i][k] = 0; + move16(); } } } /* Reduce set of parameters and quantize them */ - for ( k = 0; k < num_iccs_to_code; ++k ) + FOR( k = 0; k < num_iccs_to_code; ++k ) { tmp_map[0] = hParamMC->hMetadataPMC.icc_mapping_conf->icc_mapping[k][0]; + move16(); tmp_map[1] = hParamMC->hMetadataPMC.icc_mapping_conf->icc_mapping[k][1]; - ICC_vect[k] = Cy[tmp_map[0]][tmp_map[1]]; + move16(); + ICC_vect_fx[k] = Cy_fx[tmp_map[0]][tmp_map[1]]; + move32(); + ICC_vect_e[k] = Cy_e[tmp_map[0]][tmp_map[1]]; + move16(); } /* Quantization */ - ivas_param_mc_parameter_quantizer( ICC_vect, num_iccs_to_code, hParamMC->hMetadataPMC.icc_coding.quantizer_size, hParamMC->hMetadataPMC.icc_coding.quantizer, ICC_idx, ICC_vect_q ); + ivas_param_mc_parameter_quantizer_fx( ICC_vect_fx, ICC_vect_e, num_iccs_to_code, hParamMC->hMetadataPMC.icc_coding.quantizer_size, hParamMC->hMetadataPMC.icc_coding.quantizer_fx, Q15, ICC_idx, ICC_vect_q_fx ); /* Save current quantized ICCs */ - mvs2s( ICC_idx, ICC_idx_out + freq_idx * icc_map_size, num_iccs_to_code ); + Copy( ICC_idx, ICC_idx_out + freq_idx * icc_map_size, num_iccs_to_code ); return; } -#endif /*------------------------------------------------------------------------- @@ -2752,7 +1557,6 @@ static void ivas_param_mc_quantize_iccs( * Parameter Quantization *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_parameter_quantizer_fx( const Word32 *x, /* i : input sequence */ const Word16 *x_e, /* i : input sequence */ @@ -2805,42 +1609,6 @@ static void ivas_param_mc_parameter_quantizer_fx( return; } -#else -static void ivas_param_mc_parameter_quantizer( - const float *x, /* i : input sequence */ - const int16_t L, /* i : input length */ - const int16_t sz_quantizer, /* i : quantizer size */ - const float *quantizer, /* i : quantizer table */ - int16_t *quant_idx, /* o : quant indices */ - float *y /* o : output sequence */ -) -{ - int16_t idx, i; - int16_t idx_min; - float tmp_min; - - set_f( y, 0.0f, L ); - idx_min = 0; - - for ( idx = 0; idx < L; ++idx ) - { - tmp_min = 1000.0f; - for ( i = 0; i < sz_quantizer; ++i ) - { - if ( fabsf( x[idx] - quantizer[i] ) < tmp_min ) - { - tmp_min = fabsf( x[idx] - quantizer[i] ); - idx_min = i; - } - } - - y[idx] = quantizer[idx_min]; - quant_idx[idx] = idx_min; - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2849,56 +1617,6 @@ static void ivas_param_mc_parameter_quantizer( * Detect if the current frame has a transient *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_param_mc_transient_detection( - PARAM_MC_ENC_HANDLE hParamMC, /* i : Parametric MC encoder handle */ - TRAN_DET_HANDLE hTranDet, /* i : Transient detector handle from core coder for a transport channel */ - int16_t *pbIsAttackPresent, /* o : Flag for indicating a found transient */ - int16_t *pAttackIndex /* o : Attack position (0 if no attack) */ -) -{ - int16_t i; - int16_t bIsAttackPresent, attackIndex; - float *pSubblockNrg; - float *pAccSubblockNrg; - float attackRatioThreshold; - - push_wmops( "param_mc_trn_det" ); - - attackRatioThreshold = hTranDet->transientDetector.attackRatioThreshold_flt; - pSubblockNrg = &hTranDet->subblockEnergies.subblockNrg_flt[hParamMC->transient_detector_delay]; - pAccSubblockNrg = &hTranDet->subblockEnergies.accSubblockNrg_flt[hParamMC->transient_detector_delay]; - - bIsAttackPresent = FALSE; - attackIndex = 16; - - /* Search for the last attack in the subblocks, - * if we had an attack very late in the last frame, - * make the current frame also a transient one... */ - if ( ( pSubblockNrg[-1] > pAccSubblockNrg[-1] * attackRatioThreshold ) || ( pSubblockNrg[-2] > pAccSubblockNrg[-2] * attackRatioThreshold ) ) - { - bIsAttackPresent = TRUE; - attackIndex = 0; - } - - for ( i = 0; i < NSUBBLOCKS; i++ ) - { - if ( pSubblockNrg[i] > pAccSubblockNrg[i] * attackRatioThreshold ) - { - bIsAttackPresent = TRUE; - attackIndex = i; - } - } - - /* avoid post-echos on click sounds (very short transients) due to TNS aliasing */ - *pAttackIndex = attackIndex; - *pbIsAttackPresent = bIsAttackPresent; - - pop_wmops(); - - return; -} -#else static void ivas_param_mc_transient_detection_fx( PARAM_MC_ENC_HANDLE hParamMC, /* i : Parametric MC encoder handle */ TRAN_DET_HANDLE hTranDet, /* i : Transient detector handle from core coder for a transport channel */ @@ -2955,7 +1673,6 @@ pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- * ivas_param_mc_entropy_encoder() @@ -2963,7 +1680,6 @@ return; * Write the metadata bitstream *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_write_bs( const PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder Handle */ Word16 *ILD_idx, /* i : ILD quantizer indices sequence */ @@ -3055,77 +1771,6 @@ static void ivas_param_mc_write_bs( return; } -#else -static void ivas_param_mc_write_bs( - const PARAM_MC_ENC_HANDLE hParamMC, /* i/o: Parametric MC encoder Handle */ - int16_t *ILD_idx, /* i : ILD quantizer indices sequence */ - int16_t *ICC_idx, /* i : ICC quantizer indices sequence */ - uint16_t bit_buffer[PARAM_MC_MAX_BITS], /* o : Output bit buffer */ - int16_t *bit_pos /* o : Number of bits used */ -) -{ - int16_t i, pos; - int16_t nbands; - int16_t band_step; - int16_t seq_tmp[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; - float seq_tmp_uni[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP]; - int16_t icc_map_size_wo_lfe; - int16_t icc_map_size; - int16_t ild_map_size_wo_lfe; - int16_t ild_map_size; - - push_wmops( "param_mc_prm_enc" ); - - /* Init */ - set_zero( seq_tmp_uni, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); - set_s( seq_tmp, 0, PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_SZ_ILD_MAP ); - nbands = hParamMC->hMetadataPMC.nbands_in_param_frame[hParamMC->hMetadataPMC.param_frame_idx]; - icc_map_size_wo_lfe = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_wo_lfe; - icc_map_size = hParamMC->hMetadataPMC.icc_mapping_conf->icc_map_size_lfe; - ild_map_size_wo_lfe = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_wo_lfe; - ild_map_size = hParamMC->hMetadataPMC.ild_mapping_conf->ild_map_size_lfe; - - /*-----------------------------------------------------------------* - * Signaling bits - *-----------------------------------------------------------------*/ - - /* reserved bit */ - bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.lfe_on; - - /* write coded band width */ - i = hParamMC->hMetadataPMC.coded_bwidth; - for ( pos = 0; pos < 2; pos++ ) - { - bit_buffer[( *bit_pos )++] = (uint16_t) ( ( i >> pos ) & 1 ); - } - - /* write param frame indicator */ - bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.param_frame_idx; - - /* write transient frame indicator */ - bit_buffer[( *bit_pos )++] = hParamMC->hMetadataPMC.bAttackPresent; - - band_step = 1; - if ( hParamMC->hMetadataPMC.bAttackPresent ) - { - band_step = PARAM_MC_TRANSIENT_BAND_STEP; - for ( pos = 2; pos >= 0; --pos ) - { - bit_buffer[( *bit_pos )++] = (uint16_t) ( ( hParamMC->hMetadataPMC.attackIndex >> pos ) & 1 ); - } - nbands = hParamMC->hMetadataPMC.nbands_coded / band_step + ( ( hParamMC->hMetadataPMC.nbands_coded % band_step ) ? 1 : 0 ); - } - - ivas_param_mc_encode_parameter( ICC_idx, &hParamMC->hMetadataPMC, &hParamMC->hMetadataPMC.icc_coding, - nbands, band_step, icc_map_size_wo_lfe, icc_map_size, bit_buffer, bit_pos ); - - ivas_param_mc_encode_parameter( ILD_idx, &hParamMC->hMetadataPMC, &hParamMC->hMetadataPMC.ild_coding, - nbands, band_step, ild_map_size_wo_lfe, ild_map_size, bit_buffer, bit_pos ); - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- @@ -3134,7 +1779,6 @@ static void ivas_param_mc_write_bs( * (entropy) encode a sequence of parameter indices *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_encode_parameter( int16_t *quant_idx, /* i : indices sequence to encode */ HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, /* i : Parametric MC metadata handle */ @@ -3275,130 +1919,6 @@ static void ivas_param_mc_encode_parameter( return; } -#else -static void ivas_param_mc_encode_parameter( - int16_t *quant_idx, /* i : indices sequence to encode */ - HANDLE_IVAS_PARAM_MC_METADATA hMetadataPMC, /* i : Parametric MC metadata handle */ - HANDLE_PARAM_MC_PARAMETER_CODING_INFO hParameterCodingInfo, /* i : parameter quantization and coding info */ - const int16_t nbands, /* i : number of parameter bands to encode */ - const int16_t band_step, /* i : parameter band step */ - const int16_t map_size_wo_lfe, /* i : number of parameters per band (w/o LFE) */ - const int16_t map_size, /* i : number of parameters per band */ - uint16_t bit_buffer[PARAM_MC_MAX_BITS], /* o : Output bit buffer */ - int16_t *bit_pos /* o : Number of bits used */ -) -{ - int16_t sz_seq; - int16_t idx_prev; - int16_t idx_offset; - int16_t bit_cnt_uni; - int16_t bit_cnt_range; - int16_t bit_cnt_range_diff; - int16_t bit_cnt_range_min; - int16_t bit_pos_tmp; - int16_t i, j; - int16_t idx; - int16_t seq_delta[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - int16_t seq[PARAM_MC_MAX_PARAMETER_BANDS * PARAM_MC_MAX_VAL_MAP_SIZE]; - uint16_t tmp_bit_buffer[PARAM_MC_MAX_BITS]; - uint16_t tmp_bit_buffer_diff[PARAM_MC_MAX_BITS]; - - /* Inits */ - sz_seq = nbands * ( map_size_wo_lfe ); - - /* Computing Delta Sequence */ - idx_prev = hParameterCodingInfo->quantizer_size / 2 + hParameterCodingInfo->quantizer_size % 2 - 1; - idx_offset = hParameterCodingInfo->quantizer_size - 1; - - for ( j = 0; j < map_size_wo_lfe; ++j ) - { - int16_t coding_band = 0; - - for ( i = 0; i < hMetadataPMC->nbands_coded; i += band_step ) - { - if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[i] ) - { - idx = quant_idx[i * map_size + j]; - seq[coding_band + j * nbands] = idx; - seq_delta[coding_band + j * nbands] = idx - idx_prev + idx_offset; - idx_prev = idx; - coding_band++; - } - } - } - - /* LFE */ - if ( hMetadataPMC->lfe_on ) - { - for ( i = 0; i < PARAM_MC_MAX_BAND_LFE; i += band_step ) - { - if ( hMetadataPMC->bAttackPresent || hMetadataPMC->param_frame_idx == hMetadataPMC->coding_band_mapping[i] ) - { - /* LFE ICC/ILDs are always the last ones in coding band 0 */ - int16_t n_lfe_idx, k; - n_lfe_idx = map_size - map_size_wo_lfe; - for ( k = 0; k < n_lfe_idx; k++ ) - { - idx = quant_idx[( i + 1 ) * map_size - n_lfe_idx + k]; - seq[sz_seq] = idx; - seq_delta[sz_seq] = idx - idx_prev + idx_offset; - idx_prev = idx; - sz_seq++; - } - } - } - } - - - bit_cnt_uni = sz_seq * hParameterCodingInfo->uni_bits - 1; /* -1 for the additional diff/direct signaling bit for the range encoder*/ - - /* code the direct index sequence */ - ivas_param_mc_range_encoder( seq, sz_seq, hParameterCodingInfo->cum_freq, hParameterCodingInfo->sym_freq, PARAM_MC_RANGE_CODER_TOT_SHIFT, bit_cnt_uni, &tmp_bit_buffer[0], &bit_cnt_range ); - - /* Coding the delta index sequence */ - ivas_param_mc_range_encoder( seq_delta, sz_seq, hParameterCodingInfo->cum_freq_delta, hParameterCodingInfo->sym_freq_delta, PARAM_MC_RANGE_CODER_TOT_SHIFT, bit_cnt_uni, &tmp_bit_buffer_diff[0], &bit_cnt_range_diff ); - - bit_cnt_range_min = min( bit_cnt_range, bit_cnt_range_diff ); - - /* uniform fallback */ - if ( bit_cnt_range_min > bit_cnt_uni ) - { - /* Uniform coding is used */ - bit_buffer[( *bit_pos )++] = 0; - bit_pos_tmp = 0; - - for ( i = 0; i < sz_seq; ++i ) - { - ivas_param_mc_dec2bin( seq[i], hParameterCodingInfo->uni_bits, &bit_buffer[*( bit_pos ) + bit_pos_tmp] ); - bit_pos_tmp += hParameterCodingInfo->uni_bits; - } - *bit_pos = *bit_pos + bit_pos_tmp; - } - else - { - /* Range Coding is used */ - bit_buffer[( *bit_pos )++] = 1; - if ( bit_cnt_range_diff < bit_cnt_range ) - { - bit_buffer[( *bit_pos )++] = 1; - for ( i = 0; i < bit_cnt_range_diff; i++ ) - { - bit_buffer[( *bit_pos )++] = tmp_bit_buffer_diff[i]; - } - } - else - { - bit_buffer[( *bit_pos )++] = 0; - for ( i = 0; i < bit_cnt_range; i++ ) - { - bit_buffer[( *bit_pos )++] = tmp_bit_buffer[i]; - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -3407,7 +1927,6 @@ static void ivas_param_mc_encode_parameter( * Decimal to binary routine *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_dec2bin( const Word16 val, /* i : value to encode */ const Word16 N, /* i : number of bits for encoding the value */ @@ -3426,24 +1945,6 @@ static void ivas_param_mc_dec2bin( return; } -#else -static void ivas_param_mc_dec2bin( - const int16_t val, /* i : value to encode */ - const int16_t N, /* i : number of bits for encoding the value */ - uint16_t bits[PARAM_MC_MAX_BITS] ) /* o : encoded bits buffer */ -{ - int16_t idx; - - idx = 0; - /* convert value to bitstream, MSB first */ - for ( idx = 0; idx < N; idx++ ) - { - bits[idx] = ( val >> ( N - 1 - idx ) ) & 1; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -3452,7 +1953,6 @@ static void ivas_param_mc_dec2bin( * Parametric MC Range encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_param_mc_range_encoder( const Word16 *seq_in, /* i : input sequence */ const Word16 num_symbols, /* i : Number of symbole to encode */ @@ -3540,80 +2040,3 @@ static void ivas_param_mc_range_encoder( return; } -#else -static void ivas_param_mc_range_encoder( - const int16_t *seq_in, /* i : input sequence */ - const int16_t num_symbols, /* i : Number of symbole to encode */ - const uint16_t *cum_freq, /* i : cumulated frequencies */ - const uint16_t *sym_freq, /* i : symbol frequencies */ - const uint16_t tot_shift, /* i : max cumulative freq as power of 2 */ - const int16_t max_nb_bits, /* i : Maximum number of bits allowed */ - uint16_t *bit_buffer, /* o : output bit buffer */ - int16_t *bit_pos /* o : number of bits used */ -) -{ - RangeUniEncState rc_st_enc; - int16_t rc_tot_bits; /* No. of bits returned by range coder */ - int16_t i; - uint8_t k, byte; - uint16_t *bits; - - /* Initialize range encoder */ - rc_uni_enc_init( &rc_st_enc ); - - /* Main loop over the length of the sequence */ - for ( i = 0; i < num_symbols; ++i ) - { - rc_uni_enc_encode_symbol_fastS( &rc_st_enc, (uint16_t) seq_in[i], cum_freq, sym_freq, tot_shift ); - - if ( rc_uni_enc_virtual_finish( &rc_st_enc ) > max_nb_bits ) - { - /* we alread have exceeded the maximum number of bits allowed, i.e. the uniform fallback */ - *bit_pos = MAX_BITS_PER_FRAME; - return; - } - } - - /* Finish range encoder */ - rc_tot_bits = rc_uni_enc_finish( &rc_st_enc ); /* No. of bits consumed by range coder */ - - /* Push range coded bits from byte_buffer to bitstream */ - - /* 1) Push all complete bytes, one byte at a time */ - for ( i = 0; i < ( rc_tot_bits >> 3 ); ++i ) - { - /* use rc_st_enc.byte_buffer */ - bits = &bit_buffer[i * 8]; - - byte = rc_st_enc.byte_buffer[i]; - - bits[0] = ( byte >> 7 ) & 1; - bits[1] = ( byte >> 6 ) & 1; - bits[2] = ( byte >> 5 ) & 1; - bits[3] = ( byte >> 4 ) & 1; - bits[4] = ( byte >> 3 ) & 1; - bits[5] = ( byte >> 2 ) & 1; - bits[6] = ( byte >> 1 ) & 1; - bits[7] = byte & 1; - } - - /* 2) Push remaining bits */ - if ( ( rc_tot_bits & 7 ) != 0 ) - { - uint8_t rem_bits = rc_tot_bits & 7; - - bits = &bit_buffer[i * 8]; - byte = rc_st_enc.byte_buffer[i]; - - for ( k = 0; k < rem_bits; k++ ) - { - bits[k] = ( byte >> ( 7 - k ) ) & 1; - } - } - - /* Update output number of bits */ - *bit_pos = rc_tot_bits; - - return; -} -#endif diff --git a/lib_enc/ivas_mc_paramupmix_enc.c b/lib_enc/ivas_mc_paramupmix_enc.c index c48a0a9c4..4c454a67b 100644 --- a/lib_enc/ivas_mc_paramupmix_enc.c +++ b/lib_enc/ivas_mc_paramupmix_enc.c @@ -38,12 +38,10 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "basop_util.h" #include "ivas_rom_com_fx.h" -#endif #include "ivas_cnst.h" #include "ivas_rom_com.h" #include "ivas_rom_enc.h" @@ -56,54 +54,22 @@ * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_mc_paramupmix_dmx_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, Word32 *data_f[], const Word16 input_frame ); -#else -static void ivas_mc_paramupmix_dmx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, float *data_f[], const int16_t input_frame ); -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_mc_paramupmix_param_est_enc_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, Word32 *input_frame_t_fx[], Word16 Q_input_frame_t, const Word16 input_frame, Word32 alphas_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], Word16 *exp_alphas, Word32 betas_fx[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], Word16 *exp_betas ); -#else -static void ivas_mc_paramupmix_param_est_enc( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, float *input_frame_t[], const int16_t input_frame, float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], float betas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS] ); -#endif -#ifdef IVAS_FLOAT_FIXED static void get_huff_table_fx( const PAR_TYPE par_type, HUFF_TAB *df0, HUFF_TAB *df ); -#else -static void get_huff_table( const PAR_TYPE par_type, HUFF_TAB *df0, HUFF_TAB *df ); -#endif -#ifdef IVAS_FLOAT_FIXED static void write_huff_bits_fx( const Word32 value, const UWord16 length, UWord16 bit_buffer[MC_PARAMUPMIX_MAX_BITS], Word16 *bit_pos ); -#else -static void write_huff_bits( const int32_t value, const uint16_t length, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -#endif -#ifdef IVAS_FLOAT_FIXED static void huffman_encode_fx( const Word32 *vqPrev, const Word32 *vq, const PAR_TYPE parType, const Word16 nq, UWord16 bit_buffer[MC_PARAMUPMIX_MAX_BITS], Word16 *bit_pos ); -#else -static void huffman_encode( const int32_t *vqPrev, const int32_t *vq, const PAR_TYPE parType, const int16_t nq, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -#endif -#ifdef IVAS_FLOAT_FIXED static void put_ec_data_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, const Word16 ch, const Word32 pars_fx[IVAS_MAX_NUM_BANDS], Word16 exp_paras, const Word32 alphas_fx[IVAS_MAX_NUM_BANDS], Word16 exp_alphas, const PAR_TYPE parType, UWord16 bit_buffer[MC_PARAMUPMIX_MAX_BITS], Word16 *bit_pos ); -#else -static void put_ec_data( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, const int16_t ch, const float pars[IVAS_MAX_NUM_BANDS], const float alphas[IVAS_MAX_NUM_BANDS], const PAR_TYPE parType, uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], int16_t *bit_pos ); -#endif -#ifdef IVAS_FLOAT_FIXED static void quantize_alpha_fx( const Word32 *alpha_fx, Word16 exp_alpha, Word16 *pnq, Word32 aq[IVAS_MAX_NUM_BANDS], Word32 *adeq_fx, Word16 *exp_adeq ); -#else -static void quantize_alpha( const float *alpha, int16_t *pnq, int32_t aq[IVAS_MAX_NUM_BANDS], float *adeq ); -#endif -#ifdef IVAS_FLOAT_FIXED static void quantize_pars_fx( const Word32 *v_fx, Word16 exp_v, const Word16 nq, const Word32 *data_fx, Word32 vq[IVAS_MAX_NUM_BANDS], Word32 *vdeq_fx, Word16 *exp_vdeq ); -#else -static void quantize_pars( const float *v, const int16_t nq, const float *data, int32_t vq[IVAS_MAX_NUM_BANDS], float *vdeq ); -#endif /*------------------------------------------------------------------------- * ivas_mc_paramupmix_enc() @@ -111,7 +77,6 @@ static void quantize_pars( const float *v, const int16_t nq, const float *data, * MC ParamUpmix Encoder main encoding function *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mc_paramupmix_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ BSTR_ENC_HANDLE hBStr, /* i/o: IVAS Metadata bitstream handle */ @@ -154,46 +119,6 @@ void ivas_mc_paramupmix_enc_fx( return; } -#else -void ivas_mc_paramupmix_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS Encoder handle */ - BSTR_ENC_HANDLE hBStr, /* i/o: IVAS Metadata bitstream handle */ - float *data_f[], /* i/o: input/transport MC data */ - const int16_t input_frame /* i : input frame length */ -) -{ - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix; - int16_t i; - float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - float betas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; - uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS]; - int16_t bit_pos; - - push_wmops( "mc_paramupmix_enc" ); - - hMCParamUpmix = st_ivas->hMCParamUpmix; - bit_pos = 0; - - /* Parameter estimation */ - ivas_mc_paramupmix_param_est_enc( hMCParamUpmix, data_f, input_frame, alphas, betas ); - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - put_ec_data( hMCParamUpmix, i, alphas[i], NULL, ALPHA, bit_buffer, &bit_pos ); - put_ec_data( hMCParamUpmix, i, betas[i], alphas[i], BETA, bit_buffer, &bit_pos ); - } - - /* push the PARAM UPMIX MC side info from the temporary buffer into the medatdata bitstream*/ - push_next_bits( hBStr, bit_buffer, bit_pos ); - - /* DMX generation*/ - ivas_mc_paramupmix_dmx( hMCParamUpmix, data_f, input_frame ); - - pop_wmops(); - - return; -} -#endif /*------------------------------------------------------------------------- @@ -201,7 +126,6 @@ void ivas_mc_paramupmix_enc( * * Initialize MC ParamUpmix encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_mc_paramupmix_enc_open( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -340,202 +264,12 @@ ivas_error ivas_mc_paramupmix_enc_open( return error; } -#else -ivas_error ivas_mc_paramupmix_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - IVAS_FB_CFG *fb_cfg; - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix; - int32_t input_Fs; - int32_t input_frame; - int16_t i, k, b, j; - ivas_error error; - - error = IVAS_ERR_OK; - input_Fs = st_ivas->hEncoderConfig->input_Fs; - input_frame = (int32_t) st_ivas->hEncoderConfig->input_Fs / FRAMES_PER_SEC; - - /* Sanity Checks */ - if ( ( hMCParamUpmix = (MC_PARAMUPMIX_ENC_HANDLE) malloc( sizeof( MC_PARAMUPMIX_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MC_MODE_PARAMUPMIX\n" ) ); - } - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - for ( k = 0; k < MC_PARAMUPMIX_NCH; k++ ) - { - if ( ( hMCParamUpmix->midside[i][k] = (float *) malloc( sizeof( float ) * input_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MC_MODE_PARAMUPMIX\n" ) ); - } - set_zero( hMCParamUpmix->midside[i][k], (int16_t) input_frame ); - -#ifdef IVAS_FLOAT_FIXED - if ( ( hMCParamUpmix->midside_fx[i][k] = (Word32 *) malloc( sizeof( Word32 ) * input_frame ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MC_MODE_PARAMUPMIX\n" ) ); - } - set_zero_fx( hMCParamUpmix->midside_fx[i][k], (Word16) input_frame ); -#endif - } - } - hMCParamUpmix->first_frame = 1; - - /* MC_LS_SETUP_5_1_2 is the only current configuration */ - st_ivas->nchan_transport = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS; - - /* set core coder dependent on the number of transport channels */ - switch ( st_ivas->nchan_transport ) - { - case 8: - st_ivas->nCPE = 4; - st_ivas->nSCE = 0; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - break; - } - - /* Transient Detector handle */ - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) - { - if ( ( error = ivas_transient_det_open( &( hMCParamUpmix->hTranDet[i] ), input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* set FB config. */ - /* need to set num output channels to a value > 0 to get pFb != NULL */ - if ( ( error = ivas_fb_set_cfg( &fb_cfg, MC_FORMAT, MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH, MC_PARAMUPMIX_COMBINATIONS, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - fb_cfg->remix_order = mc_paramupmix_fb_remix_order; - /* override latency, could be moved to ivas_fb_set_cfg */ - /* assuming parameters are calculated at end of frame, compensate for MCT delay and half of decoder fb */ - /* still 1.5ms off, since MCT delay is not large enough */ - /* param at end of frame */ - fb_cfg->prior_input_length = (int16_t) ( NS2SA( input_Fs, 12000000L ) + NS2SA( input_Fs, DELAY_FB_4_NS / 2 ) - input_frame / 2 - NS2SA( input_Fs, DELAY_FB_1_NS / 2 ) ); - fb_cfg->prior_input_length = (int16_t) max( fb_cfg->prior_input_length, input_frame / MAX_PARAM_SPATIAL_SUBFRAMES ); - - /* Allocate and initialize FB mixer handle */ - if ( ( error = ivas_FB_mixer_open( &( hMCParamUpmix->hFbMixer ), input_Fs, fb_cfg, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - /* Covariance handle */ -#ifdef IVAS_FLOAT_FIXED - IF( NE_32( ( error = ivas_spar_covar_enc_open_fx( &( hMCParamUpmix->hCovEnc[i] ), hMCParamUpmix->hFbMixer->pFb, input_Fs, MC_PARAMUPMIX_NCH + 1, COV_SMOOTH_MC, st_ivas->hEncoderConfig->ivas_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } -#else - if ( ( error = ivas_spar_covar_enc_open( &( hMCParamUpmix->hCovEnc[i] ), hMCParamUpmix->hFbMixer->pFb, input_Fs, MC_PARAMUPMIX_NCH + 1, COV_SMOOTH_MC, st_ivas->hEncoderConfig->ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - } - - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - if ( ( hMCParamUpmix->cov_real[b] = (float ***) malloc( MC_PARAMUPMIX_NCH * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - if ( ( hMCParamUpmix->cov_real[b][i] = (float **) malloc( MC_PARAMUPMIX_NCH * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - if ( ( hMCParamUpmix->cov_real[b][i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - } - } - - if ( ( hMCParamUpmix->cov_dtx_real[b] = (float ***) malloc( MC_PARAMUPMIX_NCH * sizeof( float ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - if ( ( hMCParamUpmix->cov_dtx_real[b][i] = (float **) malloc( MC_PARAMUPMIX_NCH * sizeof( float * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - if ( ( hMCParamUpmix->cov_dtx_real[b][i][j] = (float *) malloc( IVAS_MAX_NUM_BANDS * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - } - } - } -#ifdef IVAS_FLOAT_FIXED - FOR( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - IF( ( hMCParamUpmix->cov_real_fx[b] = (Word32 ***) malloc( MC_PARAMUPMIX_NCH * sizeof( Word32 ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - FOR( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - IF( ( hMCParamUpmix->cov_real_fx[b][i] = (Word32 **) malloc( MC_PARAMUPMIX_NCH * sizeof( Word32 * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - FOR( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - IF( ( hMCParamUpmix->cov_real_fx[b][i][j] = (Word32 *) malloc( IVAS_MAX_NUM_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov real matrix" ); - } - } - } - - IF( ( hMCParamUpmix->cov_dtx_real_fx[b] = (Word32 ***) malloc( MC_PARAMUPMIX_NCH * sizeof( Word32 ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - FOR( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - IF( ( hMCParamUpmix->cov_dtx_real_fx[b][i] = (Word32 **) malloc( MC_PARAMUPMIX_NCH * sizeof( Word32 * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - FOR( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - IF( ( hMCParamUpmix->cov_dtx_real_fx[b][i][j] = (Word32 *) malloc( IVAS_MAX_NUM_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR cov dtx real matrix" ); - } - } - } - } -#endif - - st_ivas->hMCParamUpmix = hMCParamUpmix; - - return error; -} -#endif /*------------------------------------------------------------------------- * ivas_mc_paramupmix_enc_close() * * Close MC Param-Upmix encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mc_paramupmix_enc_close( MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ const Word32 input_Fs /* i : input sampling rate */ @@ -623,100 +357,11 @@ void ivas_mc_paramupmix_enc_close( return; } -#else -void ivas_mc_paramupmix_enc_close( - MC_PARAMUPMIX_ENC_HANDLE *hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - int16_t i, k; - int16_t b, j; - - if ( hMCParamUpmix == NULL || *hMCParamUpmix == NULL ) - { - return; - } - - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - if ( ( *hMCParamUpmix )->cov_real[b] != NULL ) - { - for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - if ( ( *hMCParamUpmix )->cov_real[b][i] != NULL ) - { - for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - if ( ( *hMCParamUpmix )->cov_real[b][i][j] != NULL ) - { - free( ( *hMCParamUpmix )->cov_real[b][i][j] ); - } - } - free( ( *hMCParamUpmix )->cov_real[b][i] ); - } - } - free( ( *hMCParamUpmix )->cov_real[b] ); - } - - if ( ( *hMCParamUpmix )->cov_dtx_real[b] != NULL ) - { - for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - if ( ( *hMCParamUpmix )->cov_dtx_real[b][i] != NULL ) - { - for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - if ( ( *hMCParamUpmix )->cov_dtx_real[b][i][j] != NULL ) - { - free( ( *hMCParamUpmix )->cov_dtx_real[b][i][j] ); - } - } - free( ( *hMCParamUpmix )->cov_dtx_real[b][i] ); - } - } - free( ( *hMCParamUpmix )->cov_dtx_real[b] ); - } - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - for ( k = 0; k < MC_PARAMUPMIX_NCH; k++ ) - { - free( ( *hMCParamUpmix )->midside[i][k] ); - } - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) - { - ivas_transient_det_close( &( *hMCParamUpmix )->hTranDet[i] ); - } - - if ( ( *hMCParamUpmix )->hFbMixer != NULL ) - { - ivas_FB_mixer_close( &( *hMCParamUpmix )->hFbMixer, input_Fs, 0 ); - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - /* Covariance handle */ - if ( ( *hMCParamUpmix )->hCovEnc[i] != NULL ) - { - ivas_spar_covar_enc_close( &( *hMCParamUpmix )->hCovEnc[i], ( MC_PARAMUPMIX_NCH + 1 ) ); - } - } - - free( *hMCParamUpmix ); - *hMCParamUpmix = NULL; - - return; -} -#endif /*****************************************************************************************/ /* local functions */ /*****************************************************************************************/ -#ifdef IVAS_FLOAT_FIXED static void get_huff_table_fx( const PAR_TYPE par_type, HUFF_TAB *df0, @@ -818,99 +463,7 @@ static void huffman_encode_fx( return; } -#else -static void get_huff_table( - const PAR_TYPE par_type, - HUFF_TAB *df0, - HUFF_TAB *df ) -{ - switch ( par_type ) - { - case ALPHA: - df0->value = huff_alpha_table.df0.value; - df0->length = huff_alpha_table.df0.length; - df->value = huff_alpha_table.df.value; - df->length = huff_alpha_table.df.length; - break; - case BETA: - df0->value = huff_beta_table.df0.value; - df0->length = huff_beta_table.df0.length; - df->value = huff_beta_table.df.value; - df->length = huff_beta_table.df.length; - break; - } - - return; -} - -static void write_huff_bits( - const int32_t value, - const uint16_t length, - uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], - int16_t *bit_pos ) -{ - int16_t k; - - for ( k = length - 1; k >= 0; k-- ) - { - bit_buffer[( *bit_pos )++] = (uint16_t) ( ( value >> k ) & 1 ); - } - - return; -} - -static void huffman_encode( - const int32_t *vqPrev, - const int32_t *vq, - const PAR_TYPE parType, - const int16_t nq, - uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], - int16_t *bit_pos ) -{ - int16_t iv; - int32_t icode; - int16_t offset; - HUFF_TAB df0, df; - - get_huff_table( parType, &df0, &df ); - - offset = nq - 1; /* range [-(nquant - 1), nquant - 1] */ - - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - if ( iv == 0 ) - { - icode = vq[iv]; - } - else - { - icode = vq[iv] - vq[iv - 1] + offset; - } - - icode = vq[iv] - vqPrev[iv] + offset; - } - /* Write the bitstream */ - bit_buffer[( *bit_pos )++] = (uint16_t) 0 & 1; - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - if ( iv == 0 ) - { - icode = vq[iv]; - write_huff_bits( df0.value[icode], df0.length[icode], bit_buffer, bit_pos ); - } - else - { - icode = vq[iv] - vq[iv - 1] + offset; - write_huff_bits( df.value[icode], df.length[icode], bit_buffer, bit_pos ); - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void quantize_pars_fx( const Word32 *v_fx, Word16 exp_v, @@ -972,51 +525,7 @@ static void quantize_pars_fx( return; } -#else -static void quantize_pars( - const float *v, - const int16_t nq, - const float *data, - int32_t vq[IVAS_MAX_NUM_BANDS], - float *vdeq ) -{ - int16_t iv, iq, iq0, iq1; - - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - iq0 = 0; - iq1 = nq - 1; - - while ( iq1 - iq0 > 1 ) - { - iq = ( iq0 + iq1 ) / 2; - if ( v[iv] < data[iq] ) - { - iq1 = iq; - } - else - { - iq0 = iq; - } - } - - if ( fabs( v[iv] - data[iq0] ) < fabs( v[iv] - data[iq1] ) ) - { - vq[iv] = iq0; - vdeq[iv] = data[iq0]; - } - else - { - vq[iv] = iq1; - vdeq[iv] = data[iq1]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void quantize_alpha_fx( const Word32 *alpha_fx, Word16 exp_alpha, @@ -1028,7 +537,7 @@ static void quantize_alpha_fx( Word16 nq; const Word32 *data_fx; - nq = ivas_mc_paramupmix_alpha_quant_table.nquant; + nq = ivas_mc_paramupmix_alpha_quant_table_fx.nquant; move16(); data_fx = ivas_mc_paramupmix_alpha_quant_table_fx.data; // Q28 @@ -1039,27 +548,7 @@ static void quantize_alpha_fx( return; } -#else -static void quantize_alpha( - const float *alpha, - int16_t *pnq, - int32_t aq[IVAS_MAX_NUM_BANDS], - float *adeq ) -{ - int16_t nq; - const float *data; - - nq = ivas_mc_paramupmix_alpha_quant_table.nquant; - data = ivas_mc_paramupmix_alpha_quant_table.data; - - quantize_pars( alpha, nq, data, aq, adeq ); - *pnq = nq; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void quantize_beta_fx( const Word32 *beta_fx, Word16 exp_beta, @@ -1127,62 +616,12 @@ static void quantize_beta_fx( } *exp_bdeq = sub( 31, Q28 ); - *pnq = ivas_mc_paramupmix_beta_quant_table[0].nquant; + *pnq = ivas_mc_paramupmix_beta_quant_table_fx[0].nquant; move16(); return; } -#else -static void quantize_beta( - const float *beta, - const int32_t aq[IVAS_MAX_NUM_BANDS], - int16_t *pnq, - int32_t bq[IVAS_MAX_NUM_BANDS], - float *bdeq ) -{ - int16_t iv, iq, iq0, iq1; - const ACPL_QUANT_TABLE *tables = ivas_mc_paramupmix_beta_quant_table; - ACPL_QUANT_TABLE quant_table; - - for ( iv = 0; iv < IVAS_MAX_NUM_BANDS; iv++ ) - { - quant_table = tables[ivas_param_upmx_mx_qmap[aq[iv]]]; - iq0 = 0; - iq1 = quant_table.nquant - 1; - - while ( iq1 - iq0 > 1 ) - { - iq = ( iq0 + iq1 ) / 2; - if ( beta[iv] < quant_table.data[iq] ) - { - iq1 = iq; - } - else - { - iq0 = iq; - } - } - - if ( fabs( beta[iv] - quant_table.data[iq0] ) < fabs( beta[iv] - quant_table.data[iq1] ) ) - { - bq[iv] = iq0; - bdeq[iv] = quant_table.data[iq0]; - } - else - { - bq[iv] = iq1; - bdeq[iv] = quant_table.data[iq1]; - } - } - - *pnq = ivas_mc_paramupmix_beta_quant_table[0].nquant; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void put_ec_data_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, const Word16 ch, @@ -1247,67 +686,6 @@ static void put_ec_data_fx( return; } -#else -static void put_ec_data( - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, - const int16_t ch, - const float pars[IVAS_MAX_NUM_BANDS], - const float alphas[IVAS_MAX_NUM_BANDS], - const PAR_TYPE parType, - uint16_t bit_buffer[MC_PARAMUPMIX_MAX_BITS], - int16_t *bit_pos ) -{ - int16_t nq; - int32_t alphaQuant[IVAS_MAX_NUM_BANDS]; - int32_t betaQuant[IVAS_MAX_NUM_BANDS]; - float alphaDequant[IVAS_MAX_NUM_BANDS]; - float betaDequant[IVAS_MAX_NUM_BANDS]; - - if ( parType == ALPHA ) - { - quantize_alpha( pars, &nq, alphaQuant, alphaDequant ); - } - else - { - quantize_alpha( alphas, &nq, alphaQuant, alphaDequant ); - quantize_beta( pars, alphaQuant, &nq, betaQuant, betaDequant ); - } - - if ( hMCParamUpmix->first_frame ) - { - mvl2l( &( alphaQuant[0] ), &( hMCParamUpmix->alpha_quant_prev[ch][0] ), IVAS_MAX_NUM_BANDS ); - if ( parType == BETA ) - { - mvl2l( &( betaQuant[0] ), &( hMCParamUpmix->beta_quant_prev[ch][0] ), IVAS_MAX_NUM_BANDS ); - if ( ch == ( MC_PARAMUPMIX_COMBINATIONS - 1 ) ) - { - hMCParamUpmix->first_frame = 0; - } - } - } - - /* Always one parameter set per frame for transient frames. Original PS framing is used internally. */ - if ( parType == ALPHA ) - { - huffman_encode( hMCParamUpmix->alpha_quant_prev[ch], alphaQuant, ALPHA, nq, bit_buffer, bit_pos ); - } - else - { - huffman_encode( hMCParamUpmix->beta_quant_prev[ch], betaQuant, BETA, nq, bit_buffer, bit_pos ); - } - - if ( parType == ALPHA ) - { - mvl2l( alphaQuant, hMCParamUpmix->alpha_quant_prev[ch], IVAS_MAX_NUM_BANDS ); - } - else - { - mvl2l( betaQuant, hMCParamUpmix->beta_quant_prev[ch], IVAS_MAX_NUM_BANDS ); - } - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_mc_paramupmix_dmx() @@ -1315,7 +693,6 @@ static void put_ec_data( * Computes the time domain down mix signal *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_mc_paramupmix_dmx_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC ParamUpmix encoder handle */ Word32 *data_fx[], @@ -1373,45 +750,6 @@ static void ivas_mc_paramupmix_dmx_fx( return; } -#else -static void ivas_mc_paramupmix_dmx( - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC ParamUpmix encoder handle */ - float *data_f[], /* i/o: Input, downmix out */ - const int16_t input_frame /* i : Input frame length */ -) -{ - int16_t i, l; - const int16_t chan1s[4] = { 4, 5, 8, 9 }; - const int16_t chan2s[4] = { 6, 7, 10, 11 }; - const int16_t chanOut[4] = { 4, 5, 6, 7 }; - const int16_t chanZero[4] = { 8, 9, 10, 11 }; - - /* boxes = { 0 1 2 3 [4 6] [5 7] [8 10] [9 11] }; */ - /* 9+11 -> 7 */ - /* 8+10 -> 6 */ - /* 5+7 -> 5 */ - /* 4+6 -> 4 */ - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - for ( l = 0; l < input_frame; l++ ) - { - /* mid */ - hMCParamUpmix->midside[i][0][l] = ( data_f[chan1s[i]][l] + data_f[chan2s[i]][l] ) * 0.5f; - /* side */ - hMCParamUpmix->midside[i][1][l] = ( data_f[chan1s[i]][l] - data_f[chan2s[i]][l] ) * 0.5f; - data_f[chanOut[i]][l] = hMCParamUpmix->midside[i][0][l]; - } - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - set_zero( data_f[chanZero[i]], input_frame ); - } - - return; -} - -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_mc_paramupmix_param_est_enc() @@ -1420,7 +758,6 @@ static void ivas_mc_paramupmix_dmx( * estimate the input and down mix covariances *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_mc_paramupmix_param_est_enc_fx( MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ Word32 *data_f_fx[], @@ -1727,138 +1064,3 @@ static ivas_error ivas_mc_paramupmix_param_est_enc_fx( return IVAS_ERR_OK; } -#else -static void ivas_mc_paramupmix_param_est_enc( - MC_PARAMUPMIX_ENC_HANDLE hMCParamUpmix, /* i/o: MC Param-Upmix encoder handle */ - float *data_f[], /* i : Input frame in the time domain */ - const int16_t input_frame, /* i : Input frame length */ - float alphas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS], - float betas[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS] ) -{ - float *pcm_in[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; - float fr_realbuffer[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH][L_FRAME48k]; - float fr_imagbuffer[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH][L_FRAME48k]; - float FR_Real_Mid[L_FRAME48k], FR_Imag_Mid[L_FRAME48k]; - float *p_fr_realbuffer[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; - float *p_fr_imagbuffer[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; - float *pp_in_fr_real[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; - float *pp_in_fr_imag[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; - float rxx, rxy, ryy, cmat, rxxest, drxx, wetaux; - int16_t l_ts; - int16_t b, i, j, ts, bnd; - int16_t maxbands; - int16_t transient_det[MC_PARAMUPMIX_COMBINATIONS][2]; - int16_t transient_det_l[2], transient_det_r[2]; - const int16_t chan1s[MC_PARAMUPMIX_COMBINATIONS] = { 4, 5, 8, 9 }; - const int16_t chan2s[MC_PARAMUPMIX_COMBINATIONS] = { 6, 7, 10, 11 }; - const int16_t HOA_md_ind[IVAS_SPAR_MAX_CH] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - pcm_in[2 * i] = data_f[chan1s[i]]; - pcm_in[2 * i + 1] = data_f[chan2s[i]]; - } - - /*-----------------------------------------------------------------------------------------* - * Transient detector - *-----------------------------------------------------------------------------------------*/ - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ ) - { - ivas_transient_det_process( hMCParamUpmix->hTranDet[2 * i], pcm_in[2 * i], input_frame, transient_det_l ); - ivas_transient_det_process( hMCParamUpmix->hTranDet[2 * i + 1], pcm_in[2 * i + 1], input_frame, transient_det_r ); - transient_det[i][0] = transient_det_l[0] || transient_det_r[0]; - transient_det[i][1] = transient_det_l[0] || transient_det_r[0]; - /* should probably be transient_det_l[1] || transient_det_r[1] , but choosing 0 reproduces the before merge state */ - } - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) - { - p_fr_realbuffer[i] = fr_realbuffer[i]; - p_fr_imagbuffer[i] = fr_imagbuffer[i]; - } - - /* prepare Parameter MDFT analysis */ - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) - { - pp_in_fr_real[i] = p_fr_realbuffer[i]; - pp_in_fr_imag[i] = p_fr_imagbuffer[i]; - } - - l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; - for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) - { - ivas_fb_mixer_get_windowed_fr( hMCParamUpmix->hFbMixer, pcm_in, pp_in_fr_real, pp_in_fr_imag, l_ts, l_ts, hMCParamUpmix->hFbMixer->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hMCParamUpmix->hFbMixer, pcm_in, l_ts, hMCParamUpmix->hFbMixer->fb_cfg->num_in_chans ); - - for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH; i++ ) - { - pcm_in[i] += l_ts; - pp_in_fr_real[i] += l_ts; - pp_in_fr_imag[i] += l_ts; - } - } - - /*-----------------------------------------------------------------------------------------* - * Covariance process - *-----------------------------------------------------------------------------------------*/ - - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - pp_in_fr_real[0] = p_fr_realbuffer[2 * b]; - pp_in_fr_imag[0] = p_fr_imagbuffer[2 * b]; - pp_in_fr_real[1] = FR_Real_Mid; - pp_in_fr_imag[1] = FR_Imag_Mid; - - v_add( pp_in_fr_real[0], p_fr_realbuffer[2 * b + 1], pp_in_fr_real[1], L_FRAME48k ); - v_add( pp_in_fr_imag[0], p_fr_imagbuffer[2 * b + 1], pp_in_fr_imag[1], L_FRAME48k ); - - for ( i = 0; i < MC_PARAMUPMIX_NCH; i++ ) - { - for ( j = 0; j < MC_PARAMUPMIX_NCH; j++ ) - { - cov_real[i][j] = hMCParamUpmix->cov_real[b][i][j]; - cov_dtx_real[i][j] = hMCParamUpmix->cov_dtx_real[b][i][j]; - } - } - - ivas_enc_cov_handler_process( hMCParamUpmix->hCovEnc[b], pp_in_fr_real, pp_in_fr_imag, cov_real, cov_dtx_real, hMCParamUpmix->hFbMixer->pFb, 0, hMCParamUpmix->hFbMixer->pFb->filterbank_num_bands, MC_PARAMUPMIX_NCH, 0 /*dtx_vad*/, transient_det[b], HOA_md_ind, NULL, NULL, NULL, 0, 0 ); - } - - maxbands = hMCParamUpmix->hFbMixer->pFb->filterbank_num_bands; - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - for ( bnd = 0; bnd < maxbands; bnd++ ) - { - rxy = hMCParamUpmix->cov_real[b][1][0][bnd]; - ryy = hMCParamUpmix->cov_real[b][1][1][bnd]; - cmat = rxy / ( ryy + EPSILON ); - alphas[b][bnd] = 2.0f * cmat - 1.0f; - - rxx = hMCParamUpmix->cov_real[b][0][0][bnd]; - rxxest = cmat * cmat * ryy; - drxx = rxx - rxxest; - drxx = max( drxx, 0.0f ); - wetaux = sqrtf( drxx / ( ryy + EPSILON ) ); - betas[b][bnd] = 2.0f * wetaux; - } - } - - if ( maxbands < IVAS_MAX_NUM_BANDS ) - { - for ( b = 0; b < MC_PARAMUPMIX_COMBINATIONS; b++ ) - { - for ( bnd = maxbands; bnd < IVAS_MAX_NUM_BANDS; bnd++ ) - { - alphas[b][bnd] = 0.0f; - betas[b][bnd] = 0.0f; - } - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_mcmasa_enc.c b/lib_enc/ivas_mcmasa_enc.c index 2bf34200f..d37ac8df0 100644 --- a/lib_enc/ivas_mcmasa_enc.c +++ b/lib_enc/ivas_mcmasa_enc.c @@ -41,52 +41,24 @@ #include "prot.h" #include "prot_fx.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif #include "ivas_rom_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------- * Local constants *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #define NEAR_HORIZONTAL_PLANE_ELEVATION_FX 73400320 /*Q22*/ #define VERTICAL_ENERGY_RATIO_OFFSET_FX 4915 /*Q15*/ -#else -#define NEAR_HORIZONTAL_PLANE_ELEVATION 17.5f -#define VERTICAL_ENERGY_RATIO_OFFSET 0.15f -#endif /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ /* Structure for covariance matrix */ -#ifndef IVAS_FLOAT_FIXED -typedef struct -{ - float xr[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; - float xi[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; -} CovarianceMatrix; - -static void ivas_mcmasa_dmx( MCMASA_ENC_HANDLE hMcMasa, float *data_f[], const int16_t input_frame, const int16_t nchan_transport, const int16_t nchan_inp ); - -static void compute_cov_mtx( float sr[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], float si[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], const int16_t freq, const int16_t N, CovarianceMatrix *COVls ); - -static void computeIntensityVector_enc( const int16_t *band_grouping, float Cldfb_RealBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX], float Cldfb_ImagBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX], const int16_t enc_param_start_band, const int16_t num_frequency_bands, float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ); - -static void computeVerticalDiffuseness( float **buffer_intensity, const float *buffer_energy, const int16_t averaging_length, const int16_t num_freq_bands, float *diffuseness ); - -static void computeEvenLayout( const float *ls_azimuth, float *ls_azimuth_even, const int16_t numChannels ); - -static void computeLfeEnergy( MCMASA_ENC_HANDLE hMcMasa, float *data_f[], const int16_t input_frame ); -#else typedef struct { Word32 xr_fx[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; @@ -129,9 +101,7 @@ static void computeEvenLayout_fx( static void computeLfeEnergy_fx( MCMASA_ENC_HANDLE hMcMasa, Word32 *data_fx[], const Word16 input_frame, Word16 q_fac ); -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * ivas_mcmasa_enc_open() * @@ -552,351 +522,6 @@ ivas_error ivas_mcmasa_enc_open_fx( return error; } -#else -ivas_error ivas_mcmasa_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i, j; - float tmp_f; - MCMASA_ENC_HANDLE hMcMasa; - MASA_ENCODER_HANDLE hMasa; - float ls_azimuth[MCMASA_MAX_ANA_CHANS]; - float ls_elevation[MCMASA_MAX_ANA_CHANS]; - float ls_azimuth_even[MCMASA_MAX_ANA_CHANS]; - int16_t numAnalysisChannels; - float left_min, right_min, azi_diff; - const int16_t *band_mapping; - int16_t maxBin, input_frame; - int16_t nchan_inp; - int32_t input_Fs; - int32_t dirac_slot_ns; - IVAS_FB_CFG *fb_cfg, *fb_cfgLfe; - ivas_error error; - - error = IVAS_ERR_OK; - - assert( st_ivas->hMasa != NULL && "MASA encoder handle is not present" ); - hMasa = st_ivas->hMasa; - - if ( ( hMcMasa = (MCMASA_ENC_HANDLE) malloc( sizeof( MCMASA_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - nchan_inp = st_ivas->hEncoderConfig->nchan_inp; - input_Fs = st_ivas->hEncoderConfig->input_Fs; - - /* Determine if to separate some channels from the analysis */ - ivas_mcmasa_set_separate_channel_mode( &( hMcMasa->separateChannelEnabled ), &( hMcMasa->separateChannelIndex ), st_ivas->hEncoderConfig->ivas_total_brate ); - - numAnalysisChannels = nchan_inp - 1; - if ( hMcMasa->separateChannelEnabled ) - { - numAnalysisChannels = nchan_inp - 2; - } - - /* With McMASA, we config MASA encoder only in init as we know the input and there are no frame-by-frame changes currently. */ - if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - - /* Determine the number of bands */ - hMcMasa->nbands = st_ivas->hMasa->config.numCodingBands; - hMcMasa->nCodingBands = st_ivas->hMasa->config.numCodingBands; - - /* Determine band grouping */ - if ( hMcMasa->nbands == 24 ) - { - for ( i = 0; i < hMcMasa->nbands + 1; i++ ) - { - hMcMasa->band_grouping[i] = MASA_band_grouping_24[i] * CLDFB_TO_MDFT_FAC; - } - } - else - { - band_mapping = hMasa->data.band_mapping; - for ( i = 0; i < hMcMasa->nbands + 1; i++ ) - { - hMcMasa->band_grouping[i] = MASA_band_grouping_24[band_mapping[i]] * CLDFB_TO_MDFT_FAC; - } - } - - maxBin = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH * CLDFB_TO_MDFT_FAC + 0.5f ); - - for ( i = 1; i < hMcMasa->nbands + 1; i++ ) - { - if ( hMcMasa->band_grouping[i] >= maxBin ) - { - hMcMasa->band_grouping[i] = maxBin; - hMcMasa->nbands = i; - break; - } - } - - /* initialize delay compensation */ - hMcMasa->num_samples_delay_comp = NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS ); -#ifdef DISABLE_DIRAC_DELAY_COMP - hMcMasa->num_samples_delay_comp = 0; /* disable delay compensation by setting to 0 */ -#endif - tmp_f = (float) hMcMasa->num_samples_delay_comp / (float) ( NS2SA( input_Fs, DIRAC_SLOT_ENC_NS ) ); - hMcMasa->num_slots_delay_comp = (int16_t) ( tmp_f ); - - if ( tmp_f > (float) hMcMasa->num_slots_delay_comp ) - { - hMcMasa->num_slots_delay_comp++; - hMcMasa->offset_comp = -hMcMasa->num_samples_delay_comp; - hMcMasa->num_samples_delay_comp = hMcMasa->num_slots_delay_comp * NS2SA( input_Fs, DIRAC_SLOT_ENC_NS ); - hMcMasa->offset_comp += hMcMasa->num_samples_delay_comp; - } - else - { - hMcMasa->offset_comp = 0; - } - - /* set FB config. */ - if ( ( error = ivas_fb_set_cfg( &fb_cfg, MASA_FORMAT, numAnalysisChannels, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Allocate and initialize FB mixer handle */ - if ( ( error = ivas_FB_mixer_open( &( hMcMasa->hFbMixer ), input_Fs, fb_cfg, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - - if ( hMcMasa->separateChannelEnabled ) - { - /* TD Energy calculation with LP */ - if ( ( hMcMasa->delay_buffer_lfe[0] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->delay_buffer_lfe[0], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); - - if ( ( hMcMasa->delay_buffer_lfe[1] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->delay_buffer_lfe[1], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) ); - hMcMasa->hFbMixerLfe = NULL; - } - else - { - /* Allocate and initialize FB mixer handle for LFE channel */ - if ( ( error = ivas_fb_set_cfg( &fb_cfgLfe, MASA_FORMAT, 1, 0, 0, input_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_FB_mixer_open( &( hMcMasa->hFbMixerLfe ), input_Fs, fb_cfgLfe, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - hMcMasa->delay_buffer_lfe[0] = NULL; - hMcMasa->delay_buffer_lfe[1] = NULL; - } - - if ( hMcMasa->separateChannelEnabled ) - { - int16_t bufferSize; - - /* Ring buffer for the filterbank of the LFE analysis. - * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */ - bufferSize = (int16_t) ( ( input_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES ); - for ( i = 0; i < 2; i++ ) - { - if ( ( hMcMasa->lfeAnaRingBuffer[i] = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->lfeAnaRingBuffer[i], bufferSize ); - hMcMasa->lowpassSum[i] = 0.0f; - } - hMcMasa->ringBufferPointer = 0; - hMcMasa->ringBufferSize = bufferSize; - } - - - dirac_slot_ns = DIRAC_SLOT_ENC_NS; - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hMcMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hMcMasa->direction_vector_m[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - } - } - - hMcMasa->no_col_avg_diff = (int8_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns ); - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hMcMasa->buffer_intensity_real[i] = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) - { - if ( ( hMcMasa->buffer_intensity_real[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->buffer_intensity_real[i][j], hMcMasa->nbands ); - } - } - - if ( ( hMcMasa->buffer_intensity_real_vert = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ ) - { - if ( ( hMcMasa->buffer_intensity_real_vert[j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->buffer_intensity_real_vert[j], hMcMasa->nbands ); - } - - if ( ( hMcMasa->buffer_energy = (float *) malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->buffer_energy, hMcMasa->nbands * hMcMasa->no_col_avg_diff ); - - if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1 ) - { - mvr2r( ls_azimuth_CICP6, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP6, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 1; - } - else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_7_1 ) - { - mvr2r( ls_azimuth_CICP12, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP12, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 7; - hMcMasa->isHorizontalSetup = 1; - } - else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_2 ) - { - mvr2r( ls_azimuth_CICP14, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP14, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 0; - } - else if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1_4 ) - { - mvr2r( ls_azimuth_CICP16, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP16, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 0; - } - else - { - mvr2r( ls_azimuth_CICP19, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP19, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 7; - hMcMasa->isHorizontalSetup = 0; - } - - if ( hMcMasa->separateChannelEnabled ) - { - mvr2r( &ls_azimuth[hMcMasa->separateChannelIndex + 1], &ls_azimuth[hMcMasa->separateChannelIndex], numAnalysisChannels - hMcMasa->separateChannelIndex ); - mvr2r( &ls_elevation[hMcMasa->separateChannelIndex + 1], &ls_elevation[hMcMasa->separateChannelIndex], numAnalysisChannels - hMcMasa->separateChannelIndex ); - hMcMasa->numHorizontalChannels--; - } - - computeEvenLayout( ls_azimuth, ls_azimuth_even, hMcMasa->numHorizontalChannels ); - if ( !hMcMasa->isHorizontalSetup ) - { - computeEvenLayout( &ls_azimuth[hMcMasa->numHorizontalChannels], &ls_azimuth_even[hMcMasa->numHorizontalChannels], numAnalysisChannels - hMcMasa->numHorizontalChannels ); - } - - for ( i = 0; i < numAnalysisChannels; i++ ) - { - hMcMasa->chnlToFoaMtx[0][i] = 1.0f; - hMcMasa->chnlToFoaMtx[1][i] = sinf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaMtx[2][i] = sinf( ls_elevation[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaMtx[3][i] = cosf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); - - hMcMasa->chnlToFoaEvenMtx[0][i] = 1.0f; - hMcMasa->chnlToFoaEvenMtx[1][i] = sinf( ls_azimuth_even[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaEvenMtx[2][i] = 0.0f; - hMcMasa->chnlToFoaEvenMtx[3][i] = cosf( ls_azimuth_even[i] * PI_OVER_180 ); - } - - hMcMasa->combineRatios = hMasa->config.mergeRatiosOverSubframes; - - mvr2r( ls_azimuth, hMcMasa->ls_azimuth, numAnalysisChannels ); - - for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) - { - left_min = 360.0f; - right_min = -360.0f; - - for ( j = 0; j < hMcMasa->numHorizontalChannels; j++ ) - { - azi_diff = ls_azimuth[j] - ls_azimuth[i]; - - if ( azi_diff > 180.0f ) - { - azi_diff -= 360.0f; - } - else if ( azi_diff < -180.0f ) - { - azi_diff += 360.0f; - } - - if ( azi_diff < left_min && azi_diff > 0.0f ) - { - hMcMasa->leftNearest[i] = j; - left_min = azi_diff; - } - - if ( azi_diff > right_min && azi_diff < 0.0f ) - { - hMcMasa->rightNearest[i] = j; - right_min = azi_diff; - } - } - } - - hMcMasa->prevMultiChEne = 0.0f; - hMcMasa->prevDownmixEne = 0.0f; - hMcMasa->prevEQ = 1.0f; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - for ( i = 0; i < input_frame; i++ ) - { - hMcMasa->interpolator[i] = ( (float) i ) / ( (float) input_frame ); - } - - mvs2s( DirAC_block_grouping_5ms_MDFT, hMcMasa->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - - hMcMasa->index_buffer_intensity = 0; - - st_ivas->hMcMasa = hMcMasa; - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_mcmasa_enc_reconfig() * @@ -942,64 +567,6 @@ ivas_error ivas_mcmasa_enc_reconfig_fx( return error; } -#else -/*------------------------------------------------------------------------- - * ivas_mcmasa_enc_reconfig() - * - * Reconfigure McMASA encoder - *------------------------------------------------------------------------*/ - -ivas_error ivas_mcmasa_enc_reconfig( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int32_t ivas_total_brate; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - IF( NE_32( ivas_total_brate, st_ivas->hEncoderConfig->last_ivas_total_brate ) ) - { - /* bitrate changed, may need to do something */ - - /* brute-force solution: close McMASA and re-instantiate with new settings */ - ivas_masa_enc_close( &( st_ivas->hMasa ) ); -#ifndef IVAS_FLOAT_FIXED - ivas_mcmasa_enc_close( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); -#else - ivas_mcmasa_enc_close_fx( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); -#endif - - /* Determine if to separate some channels from the analysis */ -#ifndef IVAS_FLOAT_FIXED - ivas_mcmasa_setNumTransportChannels( &( st_ivas->nchan_transport ), &( st_ivas->hEncoderConfig->element_mode_init ), ivas_total_brate ); -#else - ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->hEncoderConfig->element_mode_init ), ivas_total_brate ); -#endif - - IF( NE_32( ( error = ivas_masa_enc_open( st_ivas ) ), IVAS_ERR_OK ) ) - { - return error; - } -#ifndef IVAS_FLOAT_FIXED - if ( ( error = ivas_mcmasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) -#else - IF( NE_32( ( error = ivas_mcmasa_enc_open_fx( st_ivas ) ), IVAS_ERR_OK ) ) -#endif - { - return error; - } - - /* core SCE, CPE reconfiguration happens later */ - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * ivas_mcmasa_enc_close() * @@ -1083,83 +650,6 @@ void ivas_mcmasa_enc_close_fx( return; } -#else -/*--------------------------------------------------------------------------* - * ivas_mcmasa_enc_close() - * - * - *--------------------------------------------------------------------------*/ - -void ivas_mcmasa_enc_close( - MCMASA_ENC_HANDLE *hMcMasa, /* i/o: encoder McMASA handle */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - int16_t i, j; - - if ( hMcMasa == NULL || *hMcMasa == NULL ) - { - return; - } - - if ( ( *hMcMasa )->separateChannelEnabled ) - { - free( ( *hMcMasa )->delay_buffer_lfe[0] ); - free( ( *hMcMasa )->delay_buffer_lfe[1] ); - - for ( i = 0; i < 2; i++ ) - { - free( ( *hMcMasa )->lfeAnaRingBuffer[i] ); - } - } - - ivas_FB_mixer_close( &( *hMcMasa )->hFbMixer, input_Fs, 0 ); - - if ( !( *hMcMasa )->separateChannelEnabled ) - { - ivas_FB_mixer_close( &( *hMcMasa )->hFbMixerLfe, input_Fs, 0 ); - } - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - free( ( *hMcMasa )->direction_vector_m[i][j] ); - ( *hMcMasa )->direction_vector_m[i][j] = NULL; - } - - for ( j = 0; j < ( *hMcMasa )->no_col_avg_diff; j++ ) - { - free( ( *hMcMasa )->buffer_intensity_real[i][j] ); - ( *hMcMasa )->buffer_intensity_real[i][j] = NULL; - } - - free( ( *hMcMasa )->buffer_intensity_real[i] ); - ( *hMcMasa )->buffer_intensity_real[i] = NULL; - - free( ( *hMcMasa )->direction_vector_m[i] ); - ( *hMcMasa )->direction_vector_m[i] = NULL; - } - - for ( j = 0; j < ( *hMcMasa )->no_col_avg_diff; j++ ) - { - free( ( *hMcMasa )->buffer_intensity_real_vert[j] ); - ( *hMcMasa )->buffer_intensity_real_vert[j] = NULL; - } - free( ( *hMcMasa )->buffer_intensity_real_vert ); - ( *hMcMasa )->buffer_intensity_real_vert = NULL; - - free( ( *hMcMasa )->buffer_energy ); - ( *hMcMasa )->buffer_energy = NULL; - - free( ( *hMcMasa ) ); - ( *hMcMasa ) = NULL; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * ivas_mcmasa_enc() * @@ -1347,201 +837,32 @@ void ivas_mcmasa_enc_fx( move16(); } ELSE - { - nSubFrames = MAX_PARAM_SPATIAL_SUBFRAMES; - move16(); - } - - FOR( i = 0; i < nSubFrames; i++ ) - { - FOR( j = 0; j < nBands; j++ ) - { - diffuse_to_total_ratio_fx[i][j] = L_max( 0, L_sub( ONE_IN_Q31, energyRatio_fx[i][j] ) ); // Q31 - move32(); - } - } - - cohSignificant = ivas_masa_surrcoh_signicant_fx( surroundingCoherence_fx, diffuse_to_total_ratio_fx, nSubFrames, nBands ); - IF( cohSignificant ) - { - hQMeta->all_coherence_zero = 0; - move16(); - } - } - hMasa->config.coherencePresent = !hQMeta->all_coherence_zero; - move16(); - - return; -} -#else -/*--------------------------------------------------------------------------* - * ivas_mcmasa_enc() - * - * Multichannel MASA encoder - *--------------------------------------------------------------------------*/ - -void ivas_mcmasa_enc( - MCMASA_ENC_HANDLE hMcMasa, /* i/o: Encoder McMASA handle */ - IVAS_QMETADATA_HANDLE hQMeta, /* o : Qmetadata handle */ - MASA_ENCODER_HANDLE hMasa, /* i/o: Encoder MASA handle */ - float *data_f[], /* i : Input frame of audio */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_inp /* i : Number of input channels */ -) -{ - int16_t i, j, k; - int16_t nBands = hMcMasa->nbands; - int16_t nBlocks = MAX_PARAM_SPATIAL_SUBFRAMES; - uint8_t fixedDistance = 0; - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float separatedChannelSignal[L_FRAME48k]; - - /* Compute low frequency energy */ - computeLfeEnergy( hMcMasa, data_f, input_frame ); - - /* Sum center and LFE, move surround channels */ - v_add( data_f[2], data_f[3], data_f[2], input_frame ); - for ( i = 4; i < nchan_inp; i++ ) - { - mvr2r( data_f[i], data_f[i - 1], input_frame ); - } - - if ( hMcMasa->separateChannelEnabled ) - { - /* Identify channel to separate */ - i = hMcMasa->separateChannelIndex; - - /* Separate the identified channel */ - mvr2r( data_f[i], separatedChannelSignal, input_frame ); - - /* Move the remaining channels in order to perform the analysis without the separated channel */ - for ( i = ( hMcMasa->separateChannelIndex + 1 ); i < ( nchan_inp - 1 ); i++ ) - { - mvr2r( data_f[i], data_f[i - 1], input_frame ); - } - } - - /* Analysis */ - ivas_mcmasa_param_est_enc( hMcMasa, hMasa, data_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, nchan_inp ); - - /* Determine LFE-to-total energy ratio */ - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - hMasa->data.lfeToTotalEnergyRatio[i] = hMcMasa->lfeLfEne[i] / ( EPSILON + hMcMasa->totalLfEne[i] ); - } - - /* Set analyzed values to the MASA struct */ - for ( i = 0; i < nBands; i++ ) - { - for ( j = 0; j < nBlocks; j++ ) - { - if ( hMcMasa->combineRatios ) - { - k = 0; - } - else - { - k = j; - } - - hQMeta->q_direction[0].band_data[i].azimuth[j] = azimuth_m_values[j][i]; - hQMeta->q_direction[0].band_data[i].elevation[j] = elevation_m_values[j][i]; - hQMeta->q_direction[0].band_data[i].energy_ratio[j] = energyRatio[k][i]; - hQMeta->q_direction[0].band_data[i].distance[j] = fixedDistance; - - if ( hQMeta->surcoh_band_data != NULL ) - { - hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = (uint8_t) roundf( spreadCoherence[j][i] * UINT8_MAX ); - hQMeta->surcoh_band_data[i].surround_coherence[j] = (uint8_t) roundf( surroundingCoherence[k][i] * UINT8_MAX ); - } - } - } - - /* At lower sampling rates, set zeros for higher bands that were not analyzed */ - if ( nBands < hMcMasa->nCodingBands ) - { - for ( i = nBands; i < hMcMasa->nCodingBands; i++ ) - { - for ( j = 0; j < nBlocks; j++ ) - { - hQMeta->q_direction[0].band_data[i].azimuth[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].elevation[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].energy_ratio[j] = 0.0f; - hQMeta->q_direction[0].band_data[i].distance[j] = 0; - - if ( hQMeta->surcoh_band_data != NULL ) - { - hQMeta->q_direction[0].coherence_band_data[i].spread_coherence[j] = 0; - hQMeta->surcoh_band_data[i].surround_coherence[j] = 0; - } - } - } - } - - /* Downmix */ - ivas_mcmasa_dmx( hMcMasa, data_f, input_frame, nchan_transport, nchan_inp ); - - if ( hMcMasa->separateChannelEnabled ) - { - /* Put separated channel back to data_f to first empty channel after the transport audio signals for encoding */ - mvr2r( separatedChannelSignal, data_f[2], input_frame ); - } - - /* Update mcMASA-relevant coding parameters */ - /* These are reset to default values as they may be modified during later processing. */ - hMasa->config.joinedSubframes = FALSE; - hQMeta->q_direction[0].cfg.nbands = hMcMasa->nbands; - hQMeta->q_direction[0].cfg.nblocks = MAX_PARAM_SPATIAL_SUBFRAMES; - hQMeta->all_coherence_zero = 1; - - /* Check spread coherence */ - i = 0; - while ( i < nBlocks && hQMeta->all_coherence_zero ) - { - j = 0; - while ( j < nBands && hQMeta->all_coherence_zero ) - { - if ( spreadCoherence[i][j] > MASA_COHERENCE_THRESHOLD ) - { - hQMeta->all_coherence_zero = 0; - } - j++; + { + nSubFrames = MAX_PARAM_SPATIAL_SUBFRAMES; + move16(); } - i++; - } - - /* Check surrounding coherence */ - if ( hQMeta->all_coherence_zero ) - { - float diffuse_to_total_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - uint8_t cohSignificant; - int16_t nSubFrames; - nSubFrames = hMcMasa->combineRatios ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; - for ( i = 0; i < nSubFrames; i++ ) + FOR( i = 0; i < nSubFrames; i++ ) { - for ( j = 0; j < nBands; j++ ) + FOR( j = 0; j < nBands; j++ ) { - diffuse_to_total_ratio[i][j] = fmaxf( 0.0f, 1.0f - energyRatio[i][j] ); + diffuse_to_total_ratio_fx[i][j] = L_max( 0, L_sub( ONE_IN_Q31, energyRatio_fx[i][j] ) ); // Q31 + move32(); } } - cohSignificant = ivas_masa_surrcoh_signicant( surroundingCoherence, diffuse_to_total_ratio, nSubFrames, nBands ); - if ( cohSignificant ) + cohSignificant = ivas_masa_surrcoh_signicant_fx( surroundingCoherence_fx, diffuse_to_total_ratio_fx, nSubFrames, nBands ); + IF( cohSignificant ) { hQMeta->all_coherence_zero = 0; + move16(); } } hMasa->config.coherencePresent = !hQMeta->all_coherence_zero; + move16(); return; } -#endif /*--------------------------------------------------------------------------* * ivas_mcmasa_param_est_enc() @@ -1549,7 +870,6 @@ void ivas_mcmasa_enc( * Estimate metadata parameters for McMASA *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_param_est_enc_fx( MCMASA_ENC_HANDLE hMcMasa, /* i : McMASA encoder structure */ MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder structure */ @@ -2389,527 +1709,13 @@ void ivas_mcmasa_param_est_enc_fx( ELSE { energyRatio_fx[i][j] = coherentEnergyRatio_fx[i][j]; // Q31 - move32(); - } - } - } - - return; -} -#else -void ivas_mcmasa_param_est_enc( - MCMASA_ENC_HANDLE hMcMasa, /* i : McMASA encoder structure */ - MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder structure */ - float *data_f[], /* i : Audio frame in MC-format */ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated elevation */ - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated azimuth */ - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated direct-to-total ratio */ - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated spread coherence */ - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated surround coherence */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_inp /* i : Number of input channels */ -) -{ - float reference_power[MDFT_NO_COL_MAX][DIRAC_NO_FB_BANDS_MAX]; - int16_t ts, i, j, d; - int16_t num_freq_bins, num_freq_bands, index; - float dir_v[DIRAC_NUM_DIMS]; - int16_t l_ts; - float *pcm_in[MCMASA_MAX_ANA_CHANS]; - float Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; - float Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX]; - float *p_Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS]; - float *p_Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS]; - float Foa_RealBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; - float Foa_ImagBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; - float FoaEven_RealBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; - float FoaEven_ImagBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX]; - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float intensity_even_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float diffuseness_vector[MASA_FREQUENCY_BANDS]; - float vertical_diffuseness_vector[MASA_FREQUENCY_BANDS]; - float diffuseness_m[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float coherentEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - int16_t band_m_idx, block_m_idx; - float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; - float norm_tmp; - int16_t mrange[2], brange[2]; - int16_t numSubFramesForRatio; - CovarianceMatrix COVls[MASA_FREQUENCY_BANDS]; - float absCOVls[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; - float lsEnergy[MCMASA_MAX_ANA_CHANS]; - float lsEnergySum, maxEne; - int16_t loudestCh; - float surrCoh, tempCoh, tempCoh2; - int16_t i1, i2, i3; - float angleDist, minAngleDist; - float currentAzi; - float lsEnergyRelation; - float tempLsEnergyRelation; - float stereoness, cohwideness, spreadCoh; - float stereoRatio, cohPanRatio; - float stereoCoh, cohPanCoh, cohRatio; - float renormalization_factor_coh[MASA_FREQUENCY_BANDS]; - int16_t numAnalysisChannels; - - num_freq_bins = input_frame / MDFT_NO_COL_MAX; - num_freq_bands = hMcMasa->nbands; - l_ts = input_frame / MDFT_NO_COL_MAX; - - numAnalysisChannels = nchan_inp - 1; - if ( hMcMasa->separateChannelEnabled ) - { - numAnalysisChannels = nchan_inp - 2; - } - - if ( hMcMasa->combineRatios ) - { - /* Need to initialize renormalization_factors, and variables to be normalized */ - set_zero( renormalization_factor_diff, hMcMasa->nbands ); - set_zero( diffuseness_m[0], hMcMasa->nbands ); - set_zero( renormalization_factor_coh, hMcMasa->nbands ); - set_zero( surroundingCoherence[0], hMcMasa->nbands ); - set_zero( coherentEnergyRatio[0], hMcMasa->nbands ); - } - - /* Copy current frame to memory for delay compensation */ - for ( i = 0; i < numAnalysisChannels; i++ ) - { - pcm_in[i] = data_f[i]; - p_Chnl_RealBuffer[i] = &Chnl_RealBuffer[i][0]; - p_Chnl_ImagBuffer[i] = &Chnl_ImagBuffer[i][0]; - } - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMcMasa->block_grouping[block_m_idx]; - mrange[1] = hMcMasa->block_grouping[block_m_idx + 1]; - - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] = 0; - hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] = 0; - hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] = 0; - } - - /* Reset variable */ - for ( i = 0; i < hMcMasa->nbands; i++ ) - { - for ( j = 0; j < numAnalysisChannels; j++ ) - { - set_zero( COVls[i].xr[j], numAnalysisChannels ); - set_zero( COVls[i].xi[j], numAnalysisChannels ); - } - } - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - ivas_fb_mixer_get_windowed_fr( hMcMasa->hFbMixer, pcm_in, p_Chnl_RealBuffer, p_Chnl_ImagBuffer, l_ts, l_ts, hMcMasa->hFbMixer->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hMcMasa->hFbMixer, pcm_in, l_ts, hMcMasa->hFbMixer->fb_cfg->num_in_chans ); - - for ( i = 0; i < numAnalysisChannels; i++ ) - { - pcm_in[i] += l_ts; - } - - /* Compute covariance matrix */ - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = hMcMasa->band_grouping[i]; - brange[1] = hMcMasa->band_grouping[i + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - compute_cov_mtx( Chnl_RealBuffer, Chnl_ImagBuffer, j, numAnalysisChannels, &( COVls[i] ) ); - } - - /* Store energies for guiding metadata encoding */ - hMasa->data.energy[block_m_idx][i] = 0.0f; - for ( j = 0; j < numAnalysisChannels; j++ ) - { - hMasa->data.energy[block_m_idx][i] += COVls[i].xr[j][j]; - } - } - - if ( !hMcMasa->separateChannelEnabled ) - { - /* Compute low frequency energy */ - for ( i = 0; i < numAnalysisChannels; i++ ) - { - for ( j = 0; j < CLDFB_TO_MDFT_FAC; j++ ) - { - hMcMasa->totalLfEne[block_m_idx] += Chnl_RealBuffer[i][j] * Chnl_RealBuffer[i][j] + Chnl_ImagBuffer[i][j] * Chnl_ImagBuffer[i][j]; - } - } - } - - /* Compute standard FOA */ - /* W */ - v_add( Chnl_RealBuffer[0], Chnl_RealBuffer[1], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[0], Chnl_ImagBuffer[1], Foa_ImagBuffer[0], num_freq_bins ); - for ( i = 2; i < numAnalysisChannels; i++ ) - { - v_add( Chnl_RealBuffer[i], Foa_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[i], Foa_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - } - - /* Y */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_ImagBuffer[1], num_freq_bins ); - } - - /* Z */ - if ( hMcMasa->isHorizontalSetup ) - { - /* Set zero for horizontal setups */ - set_zero( Foa_RealBuffer[2], num_freq_bins ); - set_zero( Foa_ImagBuffer[2], num_freq_bins ); - } - else - { - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_RealBuffer[2], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_ImagBuffer[2], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_RealBuffer[2], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_ImagBuffer[2], num_freq_bins ); - } - } - - /* X */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_ImagBuffer[3], num_freq_bins ); - } - - /* Compute even FOA */ - /* W */ - mvr2r( Foa_RealBuffer[0], FoaEven_RealBuffer[0], num_freq_bins ); - mvr2r( Foa_ImagBuffer[0], FoaEven_ImagBuffer[0], num_freq_bins ); - - /* Y */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_ImagBuffer[1], num_freq_bins ); - } - - /* Z (even setups are handled as horizontal) */ - set_zero( FoaEven_RealBuffer[2], num_freq_bins ); - set_zero( FoaEven_ImagBuffer[2], num_freq_bins ); - - /* X */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_ImagBuffer[3], num_freq_bins ); - } - - /* Direction estimation */ - computeIntensityVector_enc( - hMcMasa->band_grouping, - Foa_RealBuffer, - Foa_ImagBuffer, - 0, - num_freq_bands, - intensity_real ); - - computeDirectionVectors( - intensity_real[0], - intensity_real[1], - intensity_real[2], - 0, - num_freq_bands, - direction_vector[0], - direction_vector[1], - direction_vector[2] ); - - /* Power and intensity estimation for diffuseness */ - computeIntensityVector_enc( - hMcMasa->band_grouping, - FoaEven_RealBuffer, - FoaEven_ImagBuffer, - 0, - num_freq_bands, - intensity_even_real ); - - computeReferencePower_enc( hMcMasa->band_grouping, - FoaEven_RealBuffer, - FoaEven_ImagBuffer, - reference_power[ts], - 0, - num_freq_bands, - MC_FORMAT, - 0, - FOA_CHANNELS, - NULL, - NULL ); - - /* Fill buffers of length "averaging_length" time slots for intensity and energy */ - hMcMasa->index_buffer_intensity = ( hMcMasa->index_buffer_intensity % hMcMasa->no_col_avg_diff ) + 1; /* averaging_length = 32 */ - index = hMcMasa->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_even_real[i], &( hMcMasa->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power[ts], &( hMcMasa->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness_mdft( hMcMasa->buffer_intensity_real, hMcMasa->buffer_energy, num_freq_bands, hMcMasa->no_col_avg_diff, diffuseness_vector ); - - /* Compute vertical diffuseness, and tune original diffuseness if needed */ - if ( !hMcMasa->isHorizontalSetup ) - { - mvr2r( intensity_real[2], &( hMcMasa->buffer_intensity_real_vert[index - 1][0] ), num_freq_bands ); - computeVerticalDiffuseness( hMcMasa->buffer_intensity_real_vert, hMcMasa->buffer_energy, hMcMasa->no_col_avg_diff, num_freq_bands, vertical_diffuseness_vector ); - v_min( diffuseness_vector, vertical_diffuseness_vector, diffuseness_vector, num_freq_bands ); - } - - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - - if ( hMcMasa->combineRatios ) - { - diffuseness_m[0][band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - else - { - diffuseness_m[block_m_idx][band_m_idx] = diffuseness_vector[band_m_idx]; - } - } - } - - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hMcMasa->direction_vector_m[d][block_m_idx][band_m_idx]; - } - ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); - } - - /* Coherence processing */ - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - /* Compute absolute values */ - for ( i = 0; i < numAnalysisChannels; i++ ) - { - for ( j = i; j < numAnalysisChannels; j++ ) - { - absCOVls[i][j] = sqrtf( ( COVls[band_m_idx].xr[i][j] * COVls[band_m_idx].xr[i][j] + COVls[band_m_idx].xi[i][j] * COVls[band_m_idx].xi[i][j] ) ); - } - lsEnergy[i] = absCOVls[i][i]; - } - - /* Find loudest channel */ - maxEne = lsEnergy[0]; - loudestCh = 0; - for ( i = 1; i < numAnalysisChannels; i++ ) - { - if ( lsEnergy[i] > maxEne ) - { - maxEne = lsEnergy[i]; - loudestCh = i; - } - } - - /* Compute surrounding coherence */ - surrCoh = 1.0f; - for ( i = 0; i < numAnalysisChannels; i++ ) - { - if ( i != loudestCh ) - { - if ( i < loudestCh ) - { - i1 = i; - i2 = loudestCh; - } - else - { - i1 = loudestCh; - i2 = i; - } - tempCoh = absCOVls[i1][i2] / ( sqrtf( ( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ) ); - surrCoh = ( surrCoh < tempCoh ) ? surrCoh : tempCoh; - } - } - surrCoh = surrCoh * surrCoh; - surrCoh = ( surrCoh < 1.0f ) ? surrCoh : 1.0f; - surrCoh = ( surrCoh > 0.0f ) ? surrCoh : 0.0f; - - /* Compute spread coherence */ - if ( elevation_m_values[block_m_idx][band_m_idx] < NEAR_HORIZONTAL_PLANE_ELEVATION ) /* Computed only near horizontal plane */ - { - minAngleDist = 180.0f; - i1 = 0; - currentAzi = azimuth_m_values[block_m_idx][band_m_idx]; - for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) - { - angleDist = fabsf( currentAzi - hMcMasa->ls_azimuth[i] ); - if ( angleDist > 180.0f ) - { - angleDist = fabsf( angleDist - 360.0f ); - } - if ( angleDist < minAngleDist ) - { - minAngleDist = angleDist; - i1 = i; - } - } - i2 = hMcMasa->leftNearest[i1]; - i3 = hMcMasa->rightNearest[i1]; - - if ( i2 < i3 ) - { - stereoCoh = absCOVls[i2][i3] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); - } - else - { - stereoCoh = absCOVls[i3][i2] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); - } - lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] + EPSILON ); - stereoness = stereoCoh * lsEnergyRelation; - - if ( i1 < i2 ) - { - tempCoh = absCOVls[i1][i2] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); - } - else - { - tempCoh = absCOVls[i2][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); - } - if ( i1 < i3 ) - { - tempCoh2 = absCOVls[i1][i3] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); - } - else - { - tempCoh2 = absCOVls[i3][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); - } - cohPanCoh = ( tempCoh < tempCoh2 ) ? tempCoh : tempCoh2; - lsEnergyRelation = lsEnergy[i2] / ( lsEnergy[i1] + EPSILON ); - tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i2] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - tempLsEnergyRelation = lsEnergy[i3] / ( lsEnergy[i1] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i3] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - cohwideness = cohPanCoh * lsEnergyRelation; - - spreadCoh = ( cohwideness > stereoness ) ? cohwideness : stereoness; - if ( spreadCoh > 0.5f ) - { - if ( cohwideness > stereoness ) - { - tempCoh = stereoness - ( cohwideness - 0.5f ); - spreadCoh = ( tempCoh > 0.5f ) ? tempCoh : 0.5f; - } - } - spreadCoh = ( spreadCoh < 1.0f ) ? spreadCoh : 1.0f; - spreadCoh = ( spreadCoh > 0.0f ) ? spreadCoh : 0.0f; - - /* Compute energy ratio tuning parameter */ - lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ) + EPSILON; - lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; - stereoRatio = stereoCoh * lsEnergyRelation - surrCoh; - - lsEnergyRelation = ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; - cohPanRatio = cohPanCoh * lsEnergyRelation - surrCoh; - - cohRatio = ( stereoRatio > cohPanRatio ) ? stereoRatio : cohPanRatio; - cohRatio = ( cohRatio < 1.0f ) ? cohRatio : 1.0f; - cohRatio = ( cohRatio > 0.0f ) ? cohRatio : 0.0f; - } - else /* Otherwise, set spread coherence to zero */ - { - spreadCoh = 0.0f; - cohRatio = 0.0f; - lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ); - } - - /* Store values */ - spreadCoherence[block_m_idx][band_m_idx] = spreadCoh; - - if ( hMcMasa->combineRatios ) - { - surroundingCoherence[0][band_m_idx] += lsEnergySum * surrCoh; - coherentEnergyRatio[0][band_m_idx] += lsEnergySum * cohRatio; - renormalization_factor_coh[band_m_idx] += lsEnergySum; - } - else - { - surroundingCoherence[block_m_idx][band_m_idx] = surrCoh; - coherentEnergyRatio[block_m_idx][band_m_idx] = cohRatio; - } - } - } - - if ( hMcMasa->combineRatios ) - { - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - diffuseness_m[0][band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - diffuseness_m[0][band_m_idx] = 0.f; - } - if ( renormalization_factor_coh[band_m_idx] > EPSILON ) - { - surroundingCoherence[0][band_m_idx] /= renormalization_factor_coh[band_m_idx]; - coherentEnergyRatio[0][band_m_idx] /= renormalization_factor_coh[band_m_idx]; - } - else - { - surroundingCoherence[0][band_m_idx] = 0.f; - coherentEnergyRatio[0][band_m_idx] = 0.f; - } - } - } - - /* Determine energy ratios */ - if ( hMcMasa->combineRatios ) - { - numSubFramesForRatio = 1; - } - else - { - numSubFramesForRatio = MAX_PARAM_SPATIAL_SUBFRAMES; - } - - for ( i = 0; i < numSubFramesForRatio; i++ ) - { - for ( j = 0; j < hMcMasa->nbands; j++ ) - { - energyRatio[i][j] = 1.0f - diffuseness_m[i][j]; - energyRatio[i][j] = ( energyRatio[i][j] > coherentEnergyRatio[i][j] ) ? energyRatio[i][j] : coherentEnergyRatio[i][j]; + move32(); + } } } return; } -#endif /*--------------------------------------------------------------------------* @@ -2918,7 +1724,6 @@ void ivas_mcmasa_param_est_enc( * *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_dmx_modify_fx( const Word16 n_samples, /* i : input frame length in samples */ Word32 dmx_fx[][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )], /* i/o: downmix signal to be transformed into another format Qx*/ @@ -3002,86 +1807,11 @@ void ivas_mcmasa_dmx_modify_fx( return; } -#else -void ivas_mcmasa_dmx_modify( - const int16_t n_samples, /* i : input frame length in samples */ - float dmx[][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )], /* i/o: downmix signal to be transformed into another format */ - const int16_t n_chnls_dmx_old, /* i : number of downmix channels in the old format */ - const int16_t n_chnls_dmx_new ) /* i : number of downmix channels in the target format */ -{ - /* assumed data ordering in **dmx: [sce][cpe_chnl0][cpe_chnl1], i.e., [c][l][r] */ - int16_t i; - - assert( ( n_chnls_dmx_old == 1 || n_chnls_dmx_old == 2 || n_chnls_dmx_old == 3 ) && "Input downmix may contain only 1-3 channels." ); - assert( ( n_chnls_dmx_new == 1 || n_chnls_dmx_new == 2 || n_chnls_dmx_new == 3 ) && "Output downmix may contain only 1-3 channels." ); - - if ( n_chnls_dmx_old == n_chnls_dmx_new ) - { - /* same dmx layout -> nothing to do */ - return; - } - - if ( n_chnls_dmx_old == 1 ) - { - /* split mono energy into identical channels */ - for ( i = 0; i < n_samples; i++ ) - { - if ( n_chnls_dmx_new == 2 ) - { - dmx[1][i] = dmx[0][i] * INV_SQRT2; - dmx[2][i] = dmx[1][i]; - } - else if ( n_chnls_dmx_new == 3 ) - { - dmx[0][i] = dmx[0][i] * INV_SQRT3; - } - } - } - else if ( n_chnls_dmx_old == 2 ) - { - for ( i = 0; i < n_samples; i++ ) - { - if ( n_chnls_dmx_new == 1 ) - { - /* sum l and r */ - dmx[0][i] = dmx[1][i] + dmx[2][i]; - } - else if ( n_chnls_dmx_new == 3 ) - { - dmx[0][i] = 0.5f * ( dmx[1][i] + dmx[2][i] ); - dmx[1][i] = dmx[1][i] - dmx[0][i]; - dmx[2][i] = dmx[2][i] - dmx[0][i]; - } - } - } - else if ( n_chnls_dmx_old == 3 ) - { - for ( i = 0; i < n_samples; i++ ) - { - if ( n_chnls_dmx_new == 1 ) - { - /* sum all channels */ - dmx[0][i] = dmx[0][i] + dmx[1][i] + dmx[2][i]; - } - else if ( n_chnls_dmx_new == 2 ) - { - /* mix center into sides */ - dmx[0][i] *= INV_SQRT2; - dmx[1][i] += dmx[0][i]; - dmx[2][i] += dmx[0][i]; - } - } - } - - return; -} -#endif /*--------------------------------------------------------------------------* * Local functions *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* Compute downmix */ static void ivas_mcmasa_dmx_fx( MCMASA_ENC_HANDLE hMcMasa, @@ -3231,114 +1961,6 @@ static void ivas_mcmasa_dmx_fx( return; } -#else -/* Compute downmix */ -static void ivas_mcmasa_dmx( - MCMASA_ENC_HANDLE hMcMasa, - float *data_f[], - const int16_t input_frame, - const int16_t nchan_transport, - const int16_t nchan_inp ) -{ - int16_t i, j; - int16_t numAnalysisChannels; - float dmx_c; - float multiChEne, downmixEne; - float prevEQ, currEQ, instEQ; - float alpha; - - numAnalysisChannels = nchan_inp - 1; - if ( hMcMasa->separateChannelEnabled ) - { - numAnalysisChannels = nchan_inp - 2; - } - - multiChEne = 0.0f; - for ( j = 0; j < numAnalysisChannels; j++ ) - { - for ( i = 0; i < input_frame; i++ ) - { - multiChEne += data_f[j][i] * data_f[j][i]; - } - } - - if ( nchan_transport == 2 ) - { - int16_t numSideChannels; /* Channels other than left, right, center */ - int16_t leftIndex, rightIndex; - - numSideChannels = numAnalysisChannels / 2 - 1; - for ( j = 0; j < numSideChannels; j++ ) - { - if ( hMcMasa->separateChannelEnabled ) - { - leftIndex = j * 2 + 2; - rightIndex = j * 2 + 3; - } - else - { - leftIndex = j * 2 + 3; - rightIndex = j * 2 + 4; - } - - for ( i = 0; i < input_frame; i++ ) - { - data_f[0][i] += data_f[leftIndex][i]; - data_f[1][i] += data_f[rightIndex][i]; - } - } - - if ( !hMcMasa->separateChannelEnabled ) - { - for ( i = 0; i < input_frame; i++ ) - { - dmx_c = INV_SQRT2 * data_f[2][i]; - data_f[0][i] += dmx_c; - data_f[1][i] += dmx_c; - } - } - } - else if ( nchan_transport == 1 ) - { - for ( i = 0; i < input_frame; i++ ) - { - for ( j = 1; j < numAnalysisChannels; j++ ) - { - data_f[0][i] += data_f[j][i]; - } - } - } - - downmixEne = 0.0f; - for ( j = 0; j < nchan_transport; j++ ) - { - for ( i = 0; i < input_frame; i++ ) - { - downmixEne += data_f[j][i] * data_f[j][i]; - } - } - - alpha = 0.1f; - hMcMasa->prevMultiChEne = alpha * multiChEne + ( 1.0f - alpha ) * hMcMasa->prevMultiChEne; - hMcMasa->prevDownmixEne = alpha * downmixEne + ( 1.0f - alpha ) * hMcMasa->prevDownmixEne; - - prevEQ = hMcMasa->prevEQ; - currEQ = sqrtf( hMcMasa->prevMultiChEne / ( hMcMasa->prevDownmixEne + EPSILON ) ); - hMcMasa->prevEQ = currEQ; - - for ( i = 0; i < input_frame; i++ ) - { - instEQ = hMcMasa->interpolator[i] * currEQ + ( 1.0f - hMcMasa->interpolator[i] ) * prevEQ; - for ( j = 0; j < nchan_transport; j++ ) - { - data_f[j][i] *= instEQ; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /* Compute covariance matrix, i.e., xT * conj(x), and accumulate to the output */ static void compute_cov_mtx_fx( Word32 sr[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Input matrix, real, s[ch][freq] (inp_exp) */ @@ -3385,74 +2007,6 @@ static void compute_cov_mtx_fx( return; } -#else -/* Compute covariance matrix, i.e., xT * conj(x), and accumulate to the output */ -static void compute_cov_mtx( - float sr[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Input matrix, real, s[ch][freq] */ - float si[MCMASA_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i : Input matrix, imag, s[ch][freq] */ - const int16_t freq, /* i : Freq to process */ - const int16_t N, /* i : Number of channels */ - CovarianceMatrix *COVls /* o : Output matrix, contains upper part of cov mtx */ -) -{ - int16_t i, j; - float a, b, c, d; - - for ( i = 0; i < N; i++ ) - { - a = sr[i][freq]; - b = si[i][freq]; - for ( j = i; j < N; j++ ) - { - c = sr[j][freq]; - d = si[j][freq]; - COVls->xr[i][j] += a * c + b * d; - COVls->xi[i][j] += b * c - a * d; - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static void computeIntensityVector_enc( - const int16_t *band_grouping, - float Cldfb_RealBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX], - float Cldfb_ImagBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX], - const int16_t enc_param_start_band, /* i : first band to process */ - const int16_t num_frequency_bands, - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ) -{ - /* Reminder - * X = a + ib; Y = c + id - * X*Y = ac - bd + i(ad +bc) - */ - int16_t i, j; - float real, img; - int16_t brange[2]; - - for ( i = enc_param_start_band; i < enc_param_start_band + num_frequency_bands; i++ ) - { - brange[0] = band_grouping[i]; - brange[1] = band_grouping[i + 1]; - - intensity_real[0][i] = 0; - intensity_real[1][i] = 0; - intensity_real[2][i] = 0; - - for ( j = brange[0]; j < brange[1]; j++ ) - { - real = Cldfb_RealBuffer[0][j]; - img = Cldfb_ImagBuffer[0][j]; - intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; - intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; - intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; - } - } - - return; -} -#else static void computeIntensityVector_enc_fx( const Word16 *band_grouping, Word32 Cldfb_RealBuffer[FOA_CHANNELS][DIRAC_NO_FB_BANDS_MAX], @@ -3501,8 +2055,6 @@ static void computeIntensityVector_enc_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void computeVerticalDiffuseness_fx( Word32 **buffer_intensity, /* i : Intensity vectors */ const Word32 *buffer_energy, /* i : Energy */ @@ -3583,68 +2135,6 @@ static void computeVerticalDiffuseness_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * computeVerticalDiffuseness() - * - * - *------------------------------------------------------------------------*/ - -static void computeVerticalDiffuseness( - float **buffer_intensity, /* i : Intensity vectors */ - const float *buffer_energy, /* i : Energy */ - const int16_t averaging_length, /* i : Averaging length */ - const int16_t num_freq_bands, /* i : Number of frequency bands */ - float *diffuseness /* o : Estimated diffuseness */ -) -{ - float intensity_slow[MASA_FREQUENCY_BANDS]; - float intensity_slow_abs[MASA_FREQUENCY_BANDS]; - float energy_slow[MASA_FREQUENCY_BANDS]; - int16_t i, k; - float tmp = 0; - const float *p_tmp_c; - - /* Set variables to zero */ - set_f( intensity_slow, 0.0f, MASA_FREQUENCY_BANDS ); - set_f( energy_slow, 0.0f, MASA_FREQUENCY_BANDS ); - - for ( i = 0; i < averaging_length; ++i ) - { - /* Energy slow */ - p_tmp_c = buffer_energy + i * num_freq_bands; - for ( k = 0; k < num_freq_bands; k++ ) - { - energy_slow[k] += *( p_tmp_c++ ); - } - - /* Intensity slow */ - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow[k] += buffer_intensity[i][k]; - } - } - - /* Compute absolute value */ - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow_abs[k] = fabsf( intensity_slow[k] ); - } - - /* Compute Diffuseness */ - for ( i = 0; i < num_freq_bands; ++i ) - { - tmp = intensity_slow_abs[i] / ( energy_slow[i] + EPSILON ); - tmp = ( tmp - VERTICAL_ENERGY_RATIO_OFFSET ) / ( 1.0f - VERTICAL_ENERGY_RATIO_OFFSET ); /* Tuned to avoid effect due to ambience of vertically un-even setups */ - tmp = 1.0f - tmp; - diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeEvenLayout_fx( const Word32 *ls_azimuth, Word32 *ls_azimuth_even, @@ -3714,189 +2204,6 @@ static void computeEvenLayout_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -static void computeEvenLayout( - const float *ls_azimuth, - float *ls_azimuth_even, - const int16_t numChannels ) -{ - int16_t i; - int16_t j; - float ls_azimuth_temp[MCMASA_MAX_ANA_CHANS]; - float ls_azimuth_even_ordered[MCMASA_MAX_ANA_CHANS]; - int16_t ls_azimuth_order[MCMASA_MAX_ANA_CHANS]; - float smallestAzimuth; - int16_t smallestAzimuthIndex; - float lsSpacing; - uint8_t oddLayout; - float startAzimuth; - int16_t numChannelsHalf; - - lsSpacing = 360.0f / (float) numChannels; - oddLayout = numChannels % 2; - numChannelsHalf = numChannels / 2; - - mvr2r( ls_azimuth, ls_azimuth_temp, numChannels ); - for ( i = 0; i < numChannels; i++ ) - { - smallestAzimuth = 1000.0f; - smallestAzimuthIndex = 0; - for ( j = 0; j < numChannels; j++ ) - { - if ( ls_azimuth_temp[j] < smallestAzimuth ) - { - smallestAzimuth = ls_azimuth_temp[j]; - smallestAzimuthIndex = j; - } - } - ls_azimuth_order[i] = smallestAzimuthIndex; - ls_azimuth_temp[smallestAzimuthIndex] = 1000.0f; - } - - if ( oddLayout ) - { - startAzimuth = -lsSpacing * ( (float) numChannelsHalf ); - } - else - { - startAzimuth = -lsSpacing * ( (float) numChannelsHalf - 0.5f ); - } - - for ( i = 0; i < numChannels; i++ ) - { - ls_azimuth_even_ordered[i] = (float) i * lsSpacing + startAzimuth; - } - - for ( i = 0; i < numChannels; i++ ) - { - ls_azimuth_even[ls_azimuth_order[i]] = roundf( ls_azimuth_even_ordered[i] ); - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static void computeLfeEnergy( - MCMASA_ENC_HANDLE hMcMasa, - float *data_f[], - const int16_t input_frame ) -{ - int16_t l_ts; - int16_t block_m_idx; - int16_t mrange[2]; - int16_t separateChannelIndex; - int16_t lfeChannelIndex; - float *pcm_in[1]; - - - l_ts = input_frame / MDFT_NO_COL_MAX; - separateChannelIndex = hMcMasa->separateChannelIndex; - lfeChannelIndex = LFE_CHANNEL; - - if ( hMcMasa->separateChannelEnabled ) - { - mvr2r( data_f[lfeChannelIndex], &( hMcMasa->delay_buffer_lfe[0][hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp] ), hMcMasa->offset_comp ); - mvr2r( data_f[separateChannelIndex], &( hMcMasa->delay_buffer_lfe[1][hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp] ), hMcMasa->offset_comp ); - } - else - { - pcm_in[0] = &data_f[lfeChannelIndex][0]; - } - - /* Reset variables */ - set_zero( hMcMasa->lfeLfEne, MAX_PARAM_SPATIAL_SUBFRAMES ); - set_zero( hMcMasa->totalLfEne, MAX_PARAM_SPATIAL_SUBFRAMES ); - - /* Compute low-frequency energies */ - if ( hMcMasa->separateChannelEnabled ) /* Using low-pass filter */ - { - float lowpassCoef; - int16_t i, j; - float delayedInputSignal[2][L_FRAME48k]; - float lowPassSignal[2][L_FRAME48k]; - - mvr2r( &( hMcMasa->delay_buffer_lfe[0][0] ), &( delayedInputSignal[0][0] ), hMcMasa->num_slots_delay_comp * l_ts ); - mvr2r( data_f[lfeChannelIndex] + hMcMasa->offset_comp, &( delayedInputSignal[0][hMcMasa->num_slots_delay_comp * l_ts] ), ( MDFT_NO_COL_MAX - hMcMasa->num_slots_delay_comp ) * l_ts ); - mvr2r( &( hMcMasa->delay_buffer_lfe[1][0] ), &( delayedInputSignal[1][0] ), hMcMasa->num_slots_delay_comp * l_ts ); - mvr2r( data_f[separateChannelIndex] + hMcMasa->offset_comp, &( delayedInputSignal[1][hMcMasa->num_slots_delay_comp * l_ts] ), ( MDFT_NO_COL_MAX - hMcMasa->num_slots_delay_comp ) * l_ts ); - - lowpassCoef = 1.0f / ( (float) hMcMasa->ringBufferSize ); - - for ( i = 0; i < input_frame; i++ ) - { - for ( j = 0; j < 2; j++ ) - { - hMcMasa->lowpassSum[j] += lowpassCoef * delayedInputSignal[j][i] - lowpassCoef * hMcMasa->lfeAnaRingBuffer[j][hMcMasa->ringBufferPointer]; - lowPassSignal[j][i] = hMcMasa->lowpassSum[j]; - hMcMasa->lfeAnaRingBuffer[j][hMcMasa->ringBufferPointer] = delayedInputSignal[j][i]; - } - - hMcMasa->ringBufferPointer--; - if ( hMcMasa->ringBufferPointer < 0 ) - { - hMcMasa->ringBufferPointer = hMcMasa->ringBufferSize - 1; - } - } - - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMcMasa->block_grouping[block_m_idx] * l_ts; - mrange[1] = hMcMasa->block_grouping[block_m_idx + 1] * l_ts; - - for ( i = mrange[0]; i < mrange[1]; i++ ) - { - hMcMasa->lfeLfEne[block_m_idx] += lowPassSignal[0][i] * lowPassSignal[0][i]; - hMcMasa->totalLfEne[block_m_idx] += lowPassSignal[1][i] * lowPassSignal[1][i]; - } - hMcMasa->totalLfEne[block_m_idx] += hMcMasa->lfeLfEne[block_m_idx]; - } - } - else /* Using CLDFB */ - { - int16_t ts; - int16_t i; - float Chnl_RealBuffer[2][DIRAC_NO_FB_BANDS_MAX]; - float Chnl_ImagBuffer[2][DIRAC_NO_FB_BANDS_MAX]; - float *p_Chnl_RealBuffer[2]; - float *p_Chnl_ImagBuffer[2]; - - p_Chnl_RealBuffer[0] = &Chnl_RealBuffer[0][0]; - p_Chnl_RealBuffer[1] = &Chnl_RealBuffer[1][0]; - p_Chnl_ImagBuffer[0] = &Chnl_ImagBuffer[0][0]; - p_Chnl_ImagBuffer[1] = &Chnl_ImagBuffer[1][0]; - - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMcMasa->block_grouping[block_m_idx]; - mrange[1] = hMcMasa->block_grouping[block_m_idx + 1]; - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - ivas_fb_mixer_get_windowed_fr( hMcMasa->hFbMixerLfe, pcm_in, p_Chnl_RealBuffer, p_Chnl_ImagBuffer, l_ts, l_ts, hMcMasa->hFbMixerLfe->fb_cfg->num_in_chans ); - - ivas_fb_mixer_update_prior_input( hMcMasa->hFbMixerLfe, pcm_in, l_ts, hMcMasa->hFbMixerLfe->fb_cfg->num_in_chans ); - - pcm_in[0] += l_ts; - - /* Compute low frequency energy for LFE, for other channels it is computed in ivas_chnl_param_est_enc() */ - for ( i = 0; i < CLDFB_TO_MDFT_FAC; i++ ) - { - hMcMasa->lfeLfEne[block_m_idx] += Chnl_RealBuffer[0][i] * Chnl_RealBuffer[0][i] + Chnl_ImagBuffer[0][i] * Chnl_ImagBuffer[0][i]; - } - } - } - } - - if ( hMcMasa->separateChannelEnabled ) - { - mvr2r( data_f[lfeChannelIndex] + ( input_frame - hMcMasa->num_samples_delay_comp + hMcMasa->offset_comp ), &( hMcMasa->delay_buffer_lfe[0][0] ), ( hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp ) ); - mvr2r( data_f[separateChannelIndex] + ( input_frame - hMcMasa->num_samples_delay_comp + hMcMasa->offset_comp ), &( hMcMasa->delay_buffer_lfe[1][0] ), ( hMcMasa->num_samples_delay_comp - hMcMasa->offset_comp ) ); - } - - return; -} -#else static void computeLfeEnergy_fx( MCMASA_ENC_HANDLE hMcMasa, Word32 *data_fx[], @@ -4039,4 +2346,3 @@ static void computeLfeEnergy_fx( return; } -#endif diff --git a/lib_enc/ivas_mct_core_enc.c b/lib_enc/ivas_mct_core_enc.c index c27e35d6f..db8ca0154 100644 --- a/lib_enc/ivas_mct_core_enc.c +++ b/lib_enc/ivas_mct_core_enc.c @@ -38,13 +38,11 @@ #include "ivas_prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" #include "prot_fx.h" #include -#endif /*----------------------------------------------------------* @@ -53,49 +51,6 @@ * find ratio of channel energy to total energy for * bit distribution *----------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void FindChannelRatio( - Encoder_State **sts, /* i/o: encoder state structure */ - int16_t chBitRatios[MCT_MAX_CHANNELS], /* o : bit-disctribution channel ratios */ - const int16_t nChannels /* i : number of channels to be coded */ -) -{ - float sum_nrg, chRatio; - int16_t i; - float nrg[MCT_MAX_CHANNELS]; - - set_f( nrg, 0, MCT_MAX_CHANNELS ); - - getChannelEnergies( sts, nrg, nChannels ); - - /*calculate total energy without LFE*/ - sum_nrg = 0; - for ( i = 0; i < nChannels; i++ ) - { - if ( sts[i]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - sum_nrg += nrg[i]; - } - } - sum_nrg = 1.0f / max( sum_nrg, EPSILON ); - - for ( i = 0; i < nChannels; i++ ) - { - if ( sts[i]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - chRatio = nrg[i] * sum_nrg; - chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * chRatio + 0.5f ) ) ); - } - else if ( sts[i]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - chBitRatios[i] = 0; - } - } - - - return; -} -#else static void FindChannelRatio_fx( Encoder_State **sts, /* i/o: encoder state structure */ Word16 chBitRatios[MCT_MAX_CHANNELS], /* o : bit-disctribution channel ratios */ @@ -151,83 +106,12 @@ static void FindChannelRatio_fx( return; } -#endif /*----------------------------------------------------------* * AdjustChannelRatios() * * adjust ratio of channels for bit distribution *----------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void AdjustChannelRatios( - int16_t chBitRatios[MCT_MAX_CHANNELS], /* o : bit-disctribution channel ratios */ - const int16_t nChannels, /* i/o: number of channels */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t nAvailBits, /* i : number of available bits */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - int16_t force_ch_bit_ratios[IVAS_SPAR_MAX_DMX_CHS]; - int32_t temp_brs[IVAS_SPAR_MAX_DMX_CHS]; - float cur_ratio, tar_ratio, sum_ratio, sum_tar_ratio; - int16_t ratio_diff, i; - - ivas_spar_bitrate_dist( temp_brs, nAvailBits, ivas_total_brate, sba_order, (int16_t) FB ); - - sum_ratio = 0.0f; - for ( i = 0; i < nChannels; i++ ) - { - sum_ratio += (float) temp_brs[i]; - } - for ( i = 0; i < nChannels; i++ ) - { - cur_ratio = temp_brs[i] / sum_ratio; - force_ch_bit_ratios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * cur_ratio + 0.5f ) ) ); - } - - /* adjust the ratios further based on received chBitRatios[]*/ - ratio_diff = 0; - sum_ratio = 0.0f; - sum_tar_ratio = 0.0f; - for ( i = 0; i < nChannels; i++ ) - { - sum_ratio += (float) chBitRatios[i]; - sum_tar_ratio += (float) force_ch_bit_ratios[i]; - } - for ( i = 3; i < nChannels; i++ ) - { - cur_ratio = (float) chBitRatios[i] / ( sum_ratio + FLT_MIN ); - tar_ratio = (float) force_ch_bit_ratios[i] / ( sum_tar_ratio + FLT_MIN ); - - tar_ratio = min( tar_ratio, cur_ratio ); - chBitRatios[i] = (int16_t) ( tar_ratio * sum_tar_ratio ); - chBitRatios[i] = max( 1, chBitRatios[i] ); - assert( chBitRatios[i] < ( BITRATE_MCT_RATIO_RANGE - 1 ) ); - ratio_diff += force_ch_bit_ratios[i] - chBitRatios[i]; - } - - for ( i = 0; i < min( 3, nChannels ); i++ ) - { - assert( force_ch_bit_ratios[i] >= 0 ); - chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, force_ch_bit_ratios[i] ); - } - chBitRatios[1] += ratio_diff; - - /* make sure final ratios are within range*/ - sum_ratio = 0.0f; - for ( i = 0; i < nChannels; i++ ) - { - sum_ratio += (float) chBitRatios[i]; - } - for ( i = 0; i < nChannels; i++ ) - { - cur_ratio = chBitRatios[i] / sum_ratio; - chBitRatios[i] = min( BITRATE_MCT_RATIO_RANGE - 1, max( 1, (uint16_t) ( BITRATE_MCT_RATIO_RANGE * cur_ratio + 0.5f ) ) ); - } - - return; -} -#else static void AdjustChannelRatios_fx( Word16 chBitRatios[MCT_MAX_CHANNELS], /* o : bit-disctribution channel ratios */ const Word16 nChannels, /* i/o: number of channels */ @@ -330,7 +214,6 @@ static void AdjustChannelRatios_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -338,407 +221,6 @@ static void AdjustChannelRatios_fx( * * joint mct encoding *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mct_core_enc( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - CPE_ENC_HANDLE hCPE[MCT_MAX_BLOCKS], /* i/o: CPE encoder structures */ - const int16_t nChannels, /* i : number of channels to be coded */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const int16_t switch_bw, /* i : flag bandwidth switch occurance */ - const int16_t lfe_bits, /* i : bits spent for LFE */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ -#ifdef IVAS_FLOAT_FIXED - Word32 *orig_spectrum_fx[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ - Word32 powerSpec_fx[MCT_MAX_CHANNELS][L_FRAME48k]; - Word32 powerSpecMsInv_long_fx[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ - Word32 *powerSpecMsInv_fx[MCT_MAX_CHANNELS][2]; - Word32 *inv_mdst_spectrum_fx[MCT_MAX_CHANNELS][2]; - Word32 *inv_spectrum_fx[MCT_MAX_CHANNELS][2]; - Word32 inv_spectrum_long_fx[MCT_MAX_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ -#endif - int16_t ch, ch_core, nSubframes, L_subframeTCX; - int16_t i, cpe_id, n, nAvailBits; - int16_t nCPE; - float *orig_spectrum[MCT_MAX_CHANNELS][2]; /* Pointers to MDCT output for a short block (L/R) */ - float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k]; - float powerSpecMsInv_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* MS inv power spectrum, also inverse MDST spectrum */ - float *powerSpecMsInv[MCT_MAX_CHANNELS][2]; - float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2]; - float *inv_spectrum[MCT_MAX_CHANNELS][2]; - float *mdst_spectrum[MCT_MAX_CHANNELS][2]; - float inv_spectrum_long[MCT_MAX_CHANNELS][L_FRAME48k]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ - int16_t total_side_bits; - int16_t chBitRatios[MCT_MAX_CHANNELS]; - Encoder_State *sts[MCT_MAX_CHANNELS]; - Encoder_State *st; - int16_t sp_aud_decision0[MCT_MAX_CHANNELS]; - BSTR_ENC_HANDLE hBstr; - float mdst; - - - push_wmops( "mct_encoding" ); - - /*--------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - total_side_bits = 0; - - nCPE = nChannels / CPE_CHANNELS; - - /*in case of odd number of channels*/ - if ( ( nCPE * CPE_CHANNELS ) != nChannels ) - { - nCPE++; - } - - for ( ch = 0; ch < nChannels; ch++ ) - { -#ifdef IVAS_FLOAT_FIXED -#ifndef REMOVE_IVAS_UNUSED_PARAMETERS_WARNING - inv_mdst_spectrum_fx[ch][0] = powerSpecMsInv_fx[ch][0] = powerSpecMsInv_long_fx[ch]; - inv_mdst_spectrum_fx[ch][1] = powerSpecMsInv_fx[ch][1] = powerSpecMsInv_long_fx[ch] + N_TCX10_MAX; -#endif - inv_spectrum_fx[ch][0] = inv_spectrum_long_fx[ch]; - inv_spectrum_fx[ch][1] = inv_spectrum_long_fx[ch] + N_TCX10_MAX; -#endif - inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; - inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; - inv_spectrum[ch][0] = inv_spectrum_long[ch]; - inv_spectrum[ch][1] = inv_spectrum_long[ch] + N_TCX10_MAX; - } - - for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[i] = hCPE[cpe_id]->hCoreCoder[ch]; - if ( hCPE[cpe_id]->hCoreCoder[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - i++; - continue; - } - -#ifdef IVAS_FLOAT_FIXED - orig_spectrum_fx[i][0] = hMCT->p_orig_spectrum_long_fx[cpe_id][ch]; - orig_spectrum_fx[i][1] = hMCT->p_orig_spectrum_long_fx[cpe_id][ch] + N_TCX10_MAX; -#endif // IVAS_FLOAT_FIXED - - mdst_spectrum[i][0] = hMCT->p_mdst_spectrum_long[cpe_id][ch]; - mdst_spectrum[i][1] = hMCT->p_mdst_spectrum_long[cpe_id][ch] + N_TCX10_MAX; - - orig_spectrum[i][0] = hMCT->p_orig_spectrum_long[cpe_id][ch]; - orig_spectrum[i][1] = hMCT->p_orig_spectrum_long[cpe_id][ch] + N_TCX10_MAX; - - sp_aud_decision0[i] = hCPE[cpe_id]->hCoreCoder[0]->sp_aud_decision0; - - sts[i]->hTcxEnc->tns_ms_flag[0] = 0; - sts[i]->hTcxEnc->tns_ms_flag[1] = 0; - - i++; - } - } - - hBstr = sts[0]->hBstr; - - for ( ch = 0; ch < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); ch++ ) - { - ch_core = ch * CPE_CHANNELS; - - if ( switch_bw ) - { - initMdctStereoEncData( hMCT->hBlockData[ch]->hStereoMdct, ivas_format, sts[ch_core]->element_mode, sts[ch_core]->element_brate, sts[ch_core]->bwidth, - sts[ch_core]->igf, sts[ch_core]->hIGFEnc->igfData.igfInfo.grid, 0 ); - } - - if ( sts[ch_core]->igf ) - { - /* calculate the igf start band from the igf start line */ - stereo_mdct_init_igf_start_band( &hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20, 1.0f, sts[ch_core]->bwidth, sts[ch_core]->total_brate ); - - stereo_mdct_init_igf_start_band( &hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10, 0.5f, sts[ch_core]->bwidth, sts[ch_core]->total_brate ); - } - else - { - hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; - hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; - hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.nBandsStereoCore = hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX10.sfbCnt; - hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.nBandsStereoCore = hMCT->hBlockData[ch]->hStereoMdct->stbParamsTCX20.sfbCnt; - } - } - - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - st->side_bits_frame_channel += NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; - } - - /* Add estimated stereo bits */ - st->side_bits_frame_channel += NBBITS_MCT_RATIO; - } - - /*--------------------------------------------------------------* - * MCT algorithm - *---------------------------------------------------------------*/ - - apply_MCT_enc( hMCT, sts, mdst_spectrum, inv_spectrum, inv_mdst_spectrum, nChannels ); - - /*--------------------------------------------------------------* - * Power spectrum calculation for Noise Estimation - *---------------------------------------------------------------*/ - - for ( ch = 0; ch < nChannels; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; - /* in MCT only relevant for bitrate switching from non-MCT bitrates */ - if ( sts[ch]->last_core == ACELP_CORE ) - { - L_subframeTCX += L_subframeTCX / 4; - } - - for ( n = 0; n < nSubframes; n++ ) - { - if ( sts[ch]->hTcxEnc->tns_ms_flag[n] ) - { - /* power spectrum: MDCT^2 + MDST^2 */ - for ( i = 0; i < L_subframeTCX; i++ ) - { - powerSpec[ch][i + n * L_subframeTCX] = mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; - powerSpecMsInv[ch][n][i] = inv_mdst_spectrum[ch][n][i] * inv_mdst_spectrum[ch][n][i] + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; - } - } - else - { - if ( hMCT->currBlockDataCnt > 0 ) - { - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; - - for ( i = 1; i < L_subframeTCX - 1; i++ ) - { - mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ - powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; - } - - powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; - } - - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; - - for ( i = 1; i < L_subframeTCX - 1; i++ ) - { - mdst = ( sts[ch]->hTcxEnc->spectrum[n][i + 1] - sts[ch]->hTcxEnc->spectrum[n][i - 1] ); /* An MDST estimate */ - powerSpec[ch][i + n * L_subframeTCX] = mdst * mdst + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; - } - powerSpec[ch][L_subframeTCX - 1 + n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1] * sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1]; - } - } - } - - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; - /* in MCT only relevant for bitrate switching from non-MCT bitrates */ - if ( st->last_core == ACELP_CORE ) - { - L_subframeTCX += L_subframeTCX / 4; - } - - if ( ( st->hTcxEnc->tcxMode == TCX_20 ) && ( st->total_brate < HQ_96k || st->igf ) ) - { - /*-----------------------------------------------------------* - * Compute noise-measure flags for spectrum filling * - * and quantization (0: tonal, 1: noise-like). * - * Detect low pass if present. * - *-----------------------------------------------------------*/ - - ComputeSpectrumNoiseMeasure( powerSpec[ch], st->hTcxEnc->L_frameTCX, st->hTcxEnc->nmStartLine, ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), st->hTcxEnc->memQuantZeros, st->hTcxEnc->L_frameTCX ); - } - - st->hTcxEnc->measuredBwRatio_flt = 1.f; /* No bandwidth limit for the noise filling */ - } - - if ( sts[0]->igf ) - { - if ( hMCT->currBlockDataCnt > 0 ) - { -#ifdef IVAS_FLOAT_FIXED - mctStereoIGF_enc_fx( hMCT, sts, -#ifndef REMOVE_IVAS_UNUSED_PARAMETERS_WARNING - orig_spectrum_fx, -#endif - powerSpec_fx, powerSpecMsInv_fx, inv_spectrum_fx, orig_spectrum, powerSpec, powerSpecMsInv, inv_spectrum, sp_aud_decision0 ); -#else - mctStereoIGF_enc( hMCT, sts, orig_spectrum, powerSpec, powerSpecMsInv, inv_spectrum, sp_aud_decision0 ); -#endif // IVAS_FLOAT_FIXED - } - else - { - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - - /* update the pointer to the buffer of indices of the second channel */ - if ( ch > 0 ) - { - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - if ( - sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; - - if ( st->igf ) - { - for ( n = 0; n < nSubframes; n++ ) - { - ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch], 0 ); - } - } - } - } - - /*write IGF data to bitstream*/ - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - if ( - sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - enc_prm_igf_mdct( st, hBstr ); - } - } - - /* correct side bits per channel*/ - for ( ch = 0; ch < nChannels; ch++ ) - { - st = sts[ch]; - - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - st->side_bits_frame_channel -= NBBITS_MCT_RATIO; /* Subtract estimated stereo bits */ - total_side_bits += st->side_bits_frame_channel; - } - - /*--------------------------------------------------------------* - * Bitrate distribution among channels and MCT bitstream writing - *---------------------------------------------------------------*/ - - write_mct_bitstream( sts, hMCT, nChannels ); - - FindChannelRatio( sts, chBitRatios, nChannels ); - - nAvailBits = (int16_t) ( ( ivas_total_brate / FRAMES_PER_SEC ) - NBITS_BWIDTH - hMCT->nBitsMCT - lfe_bits ); - - - /* subtract IVAS format signaling bits */ - if ( ivas_format == MC_FORMAT ) - { - nAvailBits -= IVAS_FORMAT_SIGNALING_NBITS; - nAvailBits -= MC_LS_SETUP_BITS; - } - else if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - nAvailBits -= IVAS_FORMAT_SIGNALING_NBITS_EXTENDED; - nAvailBits -= SBA_ORDER_BITS + SBA_PLANAR_BITS; - if ( ivas_format == SBA_ISM_FORMAT && nChannels > 4 ) - { - nAvailBits -= IVAS_COMBINED_FORMAT_SIGNALLING_BITS; - } - } - - for ( cpe_id = 0, i = 0; cpe_id < nCPE; cpe_id++ ) - { - if ( hCPE[cpe_id]->hMetaData != NULL ) - { - nAvailBits -= hCPE[cpe_id]->hMetaData->nb_bits_tot; - } - } - - /*substract bits needed for the bitrate ratios */ - for ( ch = 0; ch < nChannels; ch++ ) - { - if ( - sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nAvailBits -= NBBITS_MCT_RATIO; - } - nAvailBits -= total_side_bits + hMCT->nchan_out_woLFE; /* if MC 1 extra bit that was initially send to signal LFE_off */ - - - if ( hMCT->hbr_mct ) - { - assert( ivas_total_brate >= IVAS_256k ); - AdjustChannelRatios( chBitRatios, nChannels, ivas_total_brate, nAvailBits, sba_order ); - } - - for ( ch = 0; ch < nChannels; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - push_next_indice( hBstr, chBitRatios[ch], NBBITS_MCT_RATIO ); - } - - /*distribute bits amongst channels*/ - splitAvailableBitsMCT( (void **) sts, nAvailBits, chBitRatios, ENC, nChannels ); - - for ( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = hCPE[cpe_id]->hCoreCoder[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - st->total_brate = ( st->bits_frame_channel + st->side_bits_frame_channel ) * FRAMES_PER_SEC; - } - } - - - pop_wmops(); - - return; -} -#else void ivas_mct_core_enc_fx( const IVAS_FORMAT ivas_format, /* i : IVAS format */ MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ @@ -1259,7 +741,7 @@ void ivas_mct_core_enc_fx( } /*distribute bits amongst channels*/ - splitAvailableBitsMCT( (void **) sts, nAvailBits, chBitRatios, ENC, nChannels ); + splitAvailableBitsMCT_fx( (void **) sts, nAvailBits, chBitRatios, ENC, nChannels ); FOR( cpe_id = 0; cpe_id < nCPE; cpe_id++ ) { @@ -1279,4 +761,3 @@ void ivas_mct_core_enc_fx( return; } -#endif diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index fa6c6d46b..510f94cf1 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -39,12 +39,10 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "prot_fx_enc.h" #include "rom_com.h" -#endif /*-----------------------------------------------------------------------* @@ -60,48 +58,6 @@ static ivas_error ivas_mc_enc_reconfig_fx( Encoder_Struct *st_ivas, const Word16 * Set hMCT handle parameters *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void set_mct_enc_params( - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - const IVAS_FORMAT ivas_format, /* i : IVAS_format */ - const uint16_t b_nchan_change /* i : flag indicating different channel count */ -) -{ - int16_t n; - - if ( b_nchan_change ) - { - hMCT->currBlockDataCnt = 0; - - /*Initialize bits required to signal channel-pair index*/ - hMCT->bitsChannelPairIndex = max( 1, (int16_t) ( floorf( ( logf( (float) hMCT->nchan_out_woLFE * ( hMCT->nchan_out_woLFE - 1 ) / 2 - 1 ) * INV_LOG_2 ) ) + 1 ) ); - - set_s( hMCT->lowE_ch, 0, MCT_MAX_CHANNELS ); - - for ( n = 0; n < MCT_MAX_CHANNELS; n++ ) - { - set_f( hMCT->lastxCorrMatrix[n], 0, MCT_MAX_CHANNELS ); - } -#ifdef IVAS_FLOAT_FIXED - FOR( n = 0; n < MCT_MAX_CHANNELS; n++ ) - { - set32_fx( hMCT->lastxCorrMatrix_fx[n], 0, MCT_MAX_CHANNELS ); - } - hMCT->lastxCorrMatrix_e = 0; - move16(); -#endif - } - - hMCT->hbr_mct = 0; - if ( ivas_format == SBA_FORMAT && ivas_total_brate >= IVAS_256k ) - { - hMCT->hbr_mct = 1; - } - - return; -} -#else static void set_mct_enc_params( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -141,7 +97,6 @@ static void set_mct_enc_params( return; } -#endif /*-------------------------------------------------------------------* * map_input_to_cpe_channels() @@ -154,56 +109,6 @@ static void set_mct_enc_params( * cpe_id 1: L=data[4] R=data[5] * cpe_id 2: L=data[2] (mid) R=NULL *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void map_input_to_cpe_channels( - const Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - float *pdata[MAX_INPUT_CHANNELS], /* o : mapped input pointers */ - float *data[MCT_MAX_CHANNELS] /* i : input channel data */ -) -{ - int16_t i, n; - int16_t nchan_transport; - - nchan_transport = st_ivas->nchan_transport; - if ( st_ivas->hEncoderConfig->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - nchan_transport += st_ivas->hEncoderConfig->nchan_ism; - } - i = 0; - - for ( n = 0; n < LFE_CHANNEL - 1; n++ ) - { - pdata[i] = data[n]; - i++; - } - if ( st_ivas->hEncoderConfig->ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) - { - for ( n = LFE_CHANNEL + 1; n < nchan_transport; n++ ) - { - pdata[i] = data[n]; - i++; - } - pdata[i] = data[LFE_CHANNEL - 1]; - } - else - { - for ( ; n < nchan_transport; n++ ) - { - pdata[i] = data[n]; - i++; - } - } - - /* odd channel CPE*/ - if ( ( nchan_transport < st_ivas->nCPE * CPE_CHANNELS ) || ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hMCT->nchan_out_woLFE < st_ivas->nCPE * CPE_CHANNELS ) ) - - { - pdata[st_ivas->nCPE * CPE_CHANNELS - 1] = NULL; - } - - return; -} -#endif static void map_input_to_cpe_channels_ivas_fx( const Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ Word32 *pdata[MAX_INPUT_CHANNELS], /* o : mapped input pointers */ @@ -265,127 +170,6 @@ static void map_input_to_cpe_channels_ivas_fx( * * Multi-Channel Coding Tool (MCT) encoding routine *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_mct_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - float *data[MCT_MAX_CHANNELS], /* i : input signal buffers */ - const int16_t input_frame, /* i : input frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - int16_t n, cpe_id; - MCT_ENC_HANDLE hMCT; - CPE_ENC_HANDLE hCPE; - float mdst_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS][L_FRAME48k]; -#ifdef IVAS_FLOAT_FIXED - Word32 orig_spectrum_long_fx[MCT_MAX_BLOCKS][CPE_CHANNELS][L_FRAME48k]; -#endif // IVAS_FLOAT_FIXED - float orig_spectrum_long[MCT_MAX_BLOCKS][CPE_CHANNELS][L_FRAME48k]; - int16_t switch_bw; - IVAS_FORMAT ivas_format; - int16_t max_bwidth; - int32_t ivas_total_brate; - ivas_error error; - float *pdata[MAX_INPUT_CHANNELS]; - - error = IVAS_ERR_OK; - - push_wmops( "ivas_mct_enc" ); - - /* Initialization */ - hMCT = st_ivas->hMCT; - hMCT->hBstr = st_ivas->hCPE[0]->hCoreCoder[0]->hBstr; /* pointer to write MCT side bits */ - - ivas_format = st_ivas->hEncoderConfig->ivas_format; - max_bwidth = st_ivas->hEncoderConfig->max_bwidth; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hCPE = st_ivas->hCPE[cpe_id]; - hMCT->p_mdst_spectrum_long[cpe_id][n] = mdst_spectrum_long[cpe_id][n]; -#ifdef IVAS_FLOAT_FIXED - hMCT->p_orig_spectrum_long_fx[cpe_id][n] = orig_spectrum_long_fx[cpe_id][n]; -#endif // IVAS_FLOAT_FIXED - hMCT->p_orig_spectrum_long[cpe_id][n] = orig_spectrum_long[cpe_id][n]; - hCPE->hCoreCoder[n]->input_bwidth = hCPE->hCoreCoder[n]->last_input_bwidth; /* updated in BWD */ - hCPE->hCoreCoder[n]->bwidth = hCPE->hCoreCoder[n]->last_bwidth; /* updated in BWD */ - /* reset channel mode from previous state*/ - if ( ( hCPE->cpe_id * CPE_CHANNELS + n ) >= hMCT->nchan_out_woLFE ) - { - hCPE->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - else - { - hCPE->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - } - - /* reconfiguration in case of bitrate switching */ - if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) - { - int32_t cp_bitrate; - cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; - - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - cp_bitrate = ivas_total_brate / st_ivas->nchan_transport * CPE_CHANNELS; - } - - for ( n = 0; n < (int16_t) ( hMCT->nchan_out_woLFE * 0.5 ); n++ ) - { - initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->igf ? st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid : NULL, 0 ); - } - } - - /* set coded audio band-width */ - switch_bw = set_bw_mct( st_ivas->hCPE, st_ivas->nCPE ); - - /*for MC and MCT remove pointer to LFE input that has been processed separately */ - map_input_to_cpe_channels( st_ivas, pdata, data ); - - /* pre-processing */ - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - if ( ( error = ivas_cpe_enc( st_ivas, cpe_id, pdata[cpe_id * CPE_CHANNELS], pdata[cpe_id * CPE_CHANNELS + 1], input_frame, nb_bits_metadata ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* joint MCT encoding */ - ivas_mct_core_enc( ivas_format, hMCT, st_ivas->hCPE, hMCT->nchan_out_woLFE, ivas_total_brate, switch_bw, ( ivas_format == MC_FORMAT && ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) ? (int16_t) st_ivas->hLFE->lfe_bits : 0, st_ivas->hEncoderConfig->sba_order ); - - /* Spectrum quantization and coding */ - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - hCPE = st_ivas->hCPE[cpe_id]; - - if ( cpe_id > 0 ) - { - hCPE->hCoreCoder[0]->hBstr->ind_list = st_ivas->hCPE[cpe_id - 1]->hCoreCoder[1]->hBstr->ind_list + st_ivas->hCPE[cpe_id - 1]->hCoreCoder[1]->hBstr->nb_ind_tot; - } - - ivas_mdct_quant_coder( hCPE, hMCT->tnsBits[cpe_id], hMCT->tnsSize[cpe_id], hMCT->p_param[cpe_id], 1 ); - - /* update input samples buffer (as done in ivas_cpe_enc() for other than MCT coding) */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( hCPE->hCoreCoder[n]->input, hCPE->hCoreCoder[n]->old_input_signal, input_frame ); - - /* common encoder updates */ - updt_enc_common( hCPE->hCoreCoder[n] ); - } - } - - pop_wmops(); - return error; -} -#else ivas_error ivas_mct_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ Word32 *data_fx[MCT_MAX_CHANNELS], /* i : input signal buffers Q(q_data_fx) */ @@ -731,7 +515,6 @@ ivas_error ivas_mct_enc_fx( hCPE->hCoreCoder[n]->q_old_inp = hCPE->hCoreCoder[n]->q_inp; move16(); /* common encoder updates */ -#ifdef IVAS_FLOAT_FIXED #ifdef IVAS_FLOAT_FIXED_CONVERSIONS st = hCPE->hCoreCoder[n]; IF( st->hTcxEnc != NULL ) @@ -747,9 +530,6 @@ ivas_error ivas_mct_enc_fx( { Scale_sig( st->hTcxEnc->buf_speech_ltp, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k, st->hTcxEnc->exp_buf_speech_ltp ); } -#endif -#else - updt_enc_common( hCPE->hCoreCoder[n] ); #endif } } @@ -757,7 +537,6 @@ ivas_error ivas_mct_enc_fx( pop_wmops(); return error; } -#endif /*------------------------------------------------------------------------- * create_mct_enc() @@ -765,130 +544,6 @@ ivas_error ivas_mct_enc_fx( * Create, allocate and initialize IVAS encoder MCT handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error create_mct_enc( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - MCT_ENC_HANDLE hMCT; - int16_t n; - int32_t cp_bitrate; - int16_t max_blocks; - int16_t cpe_id; - IVAS_FORMAT ivas_format; - int32_t ivas_total_brate; - - ivas_format = st_ivas->hEncoderConfig->ivas_format; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - /*-----------------------------------------------------------------* - * Allocate MCT handle - *-----------------------------------------------------------------*/ - - if ( ( hMCT = (MCT_ENC_HANDLE) malloc( sizeof( MCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT\n" ) ); - } - - /*-----------------------------------------------------------------* - * Allocate and initialize MCT BlockData handles - *-----------------------------------------------------------------*/ - - /* Determine active channels */ - if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) - { - hMCT->nchan_out_woLFE = st_ivas->hEncoderConfig->nchan_inp - 1; /* LFE channel is coded separately */ - } - else if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - hMCT->nchan_out_woLFE = ivas_get_sba_num_TCs( ivas_total_brate, st_ivas->sba_analysis_order ); - if ( ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - hMCT->nchan_out_woLFE += st_ivas->hEncoderConfig->nchan_ism; - } - } - else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); - } - else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS - 1; - } - - cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - cp_bitrate = ivas_total_brate / st_ivas->nchan_transport * CPE_CHANNELS; - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - - /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ - if ( hMCT->nchan_out_woLFE % 2 ) - { - st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } - - /*Initialize MCT block data */ - max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; - - for ( n = 0; n < max_blocks; n++ ) - { - assert( st_ivas->hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && "MCT is not supported for other stereo modes" ); - - if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); - } - - /*Initialize all parameters to zero*/ - hMCT->hBlockData[n]->isActive = 0; - hMCT->hBlockData[n]->ch1 = 0; - hMCT->hBlockData[n]->ch2 = 0; - - /*-----------------------------------------------------------------* - * MDCT stereo initialization - *-----------------------------------------------------------------*/ - - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - -#ifdef DEBUGGING - hMCT->hBlockData[n]->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; -#endif - -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->igf ? st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid : NULL, 1 ); -#else - initMdctStereoEncData_fx( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->igf ? st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid : NULL, 1 ); -#endif - } - - for ( ; n < MCT_MAX_BLOCKS; n++ ) - { - hMCT->hBlockData[n] = NULL; - } - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - set_mct_enc_params( hMCT, ivas_total_brate, ivas_format, 1 ); - - st_ivas->hMCT = hMCT; - - return IVAS_ERR_OK; -} -#else ivas_error create_mct_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -943,7 +598,7 @@ ivas_error create_mct_enc( } ELSE IF( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) { - hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); + hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); move16(); } ELSE IF( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) @@ -1027,7 +682,6 @@ ivas_error create_mct_enc( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -1036,200 +690,6 @@ ivas_error create_mct_enc( * Reconfigure IVAS encoder MCT handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error mct_enc_reconfigure( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const uint16_t b_nchan_change /* i : flag indicating different channel count */ -) -{ - MCT_ENC_HANDLE hMCT; - Encoder_State *st; - int16_t n, cpe_id, max_blocks; - int32_t ivas_total_brate, cp_bitrate; - IVAS_FORMAT ivas_format; - ivas_error error; - - error = IVAS_ERR_OK; - - hMCT = st_ivas->hMCT; - ivas_format = st_ivas->hEncoderConfig->ivas_format; - ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; - - /*-----------------------------------------------------------------* - * Allocate and initialize MCT BlockData handles - *-----------------------------------------------------------------*/ - - if ( b_nchan_change ) - { - /* Determine active channels */ - if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCT ) - { - hMCT->nchan_out_woLFE = st_ivas->hEncoderConfig->nchan_inp - 1; /* LFE channel is coded separately */ - } - else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) - { - hMCT->nchan_out_woLFE = MC_PARAMUPMIX_MAX_TRANSPORT_CHANS - 1; - } - else if ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_PARAMMC ) - { - hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); - } - else if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - hMCT->nchan_out_woLFE = st_ivas->nchan_transport; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - hMCT->nchan_out_woLFE += st_ivas->hEncoderConfig->nchan_ism; - } - } - } - - cp_bitrate = ivas_total_brate / hMCT->nchan_out_woLFE * CPE_CHANNELS; - if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - cp_bitrate = ivas_total_brate / st_ivas->nchan_transport * CPE_CHANNELS; - } - - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - st_ivas->hCPE[cpe_id]->element_brate = cp_bitrate; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st_ivas->hCPE[cpe_id]->hCoreCoder[n]->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - - /* in case we have an uneven number of transport channels, indicate last channel ID as inactive */ - if ( hMCT->nchan_out_woLFE % 2 ) - { - st_ivas->hCPE[st_ivas->nCPE - 1]->hCoreCoder[1]->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - } -#ifdef IVAS_FLOAT_FIXED - /* set correct nominal bitrates and igf config already here, otherwise we - * run into a number of problems; only do it when the bitrate changes */ - IF( NE_32( ivas_total_brate, st_ivas->hEncoderConfig->last_ivas_total_brate ) ) - { - FOR( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - st = st_ivas->hCPE[cpe_id]->hCoreCoder[n]; - - st->total_brate = st_ivas->hCPE[cpe_id]->element_brate; - move32(); - - IF( NE_32( st->mct_chan_mode, MCT_CHAN_MODE_IGNORE ) ) - { - st->bits_frame_nominal = extract_l( Mpy_32_32( st_ivas->hCPE[cpe_id]->element_brate, ONE_BY_FRAMES_PER_SEC_Q31 ) ); - move16(); - st->igf = getIgfPresent_fx( st->element_mode, L_mult0( st->bits_frame_nominal, FRAMES_PER_SEC ), st->bwidth, st->rf_mode ); - move16(); - - IF( NE_32( ( error = IGF_Reconfig_fx( &st->hIGFEnc, st->igf, 1, st_ivas->hCPE[cpe_id]->element_brate, st->bwidth, st->element_mode, st->rf_mode ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - } - } - } -#else - /* set correct nominal bitrates and igf config already here, otherwise we - * run into a number of problems; only do it when the bitrate changes */ - if ( ivas_total_brate != st_ivas->hEncoderConfig->last_ivas_total_brate ) - { - for ( cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - st = st_ivas->hCPE[cpe_id]->hCoreCoder[n]; - - st->total_brate = st_ivas->hCPE[cpe_id]->element_brate; - - if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - st->bits_frame_nominal = (int16_t) ( st_ivas->hCPE[cpe_id]->element_brate / FRAMES_PER_SEC ); - st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_mode ); - - if ( ( error = IGF_Reconfig( &st->hIGFEnc, st->igf, 1, st_ivas->hCPE[cpe_id]->element_brate, st->bwidth, st->element_mode, st->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - } - } -#endif - /* Initialize MCT block data */ - max_blocks = hMCT->nchan_out_woLFE / CPE_CHANNELS; - - for ( n = 0; n < max_blocks; n++ ) - { - uint16_t mem_init = 0; - assert( st_ivas->hEncoderConfig->element_mode_init == IVAS_CPE_MDCT && "MCT is not supported for other stereo modes" ); - - if ( b_nchan_change ) - { - if ( hMCT->hBlockData[n] == NULL ) - { - mem_init = 1; - if ( ( hMCT->hBlockData[n] = (MCT_BLOCK_DATA_HANDLE) malloc( sizeof( MCT_BLOCK_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MCT block data structure\n" ) ); - } - - /*Initialize all parameters to zero*/ - hMCT->hBlockData[n]->isActive = 0; - hMCT->hBlockData[n]->ch1 = 0; - hMCT->hBlockData[n]->ch2 = 0; - - /*-----------------------------------------------------------------* - * MDCT stereo initialization - *-----------------------------------------------------------------*/ - - if ( ( hMCT->hBlockData[n]->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - } - } - -#ifdef DEBUGGING - hMCT->hBlockData[n]->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; -#endif - -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->igf ? st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid : NULL, mem_init ); -#else - initMdctStereoEncData_fx( hMCT->hBlockData[n]->hStereoMdct, ivas_format, IVAS_CPE_MDCT, cp_bitrate, st_ivas->hEncoderConfig->max_bwidth, st_ivas->hCPE[0]->hCoreCoder[0]->igf, st_ivas->hCPE[0]->hCoreCoder[0]->igf ? st_ivas->hCPE[0]->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid : NULL, mem_init ); -#endif - } - - for ( ; n < MCT_MAX_BLOCKS; n++ ) - { - /* deallocate no longer needed blocks */ - if ( hMCT->hBlockData[n] != NULL ) - { - if ( hMCT->hBlockData[n]->hStereoMdct != NULL ) - { - free( hMCT->hBlockData[n]->hStereoMdct ); - hMCT->hBlockData[n]->hStereoMdct = NULL; - } - - free( hMCT->hBlockData[n] ); - hMCT->hBlockData[n] = NULL; - } - } - - /*-----------------------------------------------------------------* - * Initializations - *-----------------------------------------------------------------*/ - - set_mct_enc_params( hMCT, ivas_total_brate, ivas_format, b_nchan_change ); - - return error; -} -#else ivas_error mct_enc_reconfigure_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const UWord16 b_nchan_change /* i : flag indicating different channel count */ @@ -1272,7 +732,7 @@ ivas_error mct_enc_reconfigure_fx( } ELSE IF( EQ_16( ivas_format, MC_FORMAT ) && EQ_16( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) { - hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); + hMCT->nchan_out_woLFE = ivas_param_mc_getNumTransportChannels_fx( ivas_total_brate, st_ivas->hEncoderConfig->mc_input_setup ); } ELSE IF( EQ_16( ivas_format, SBA_FORMAT ) || EQ_16( ivas_format, SBA_ISM_FORMAT ) ) { @@ -1412,7 +872,6 @@ ivas_error mct_enc_reconfigure_fx( return error; } -#endif /*------------------------------------------------------------------------- @@ -1421,41 +880,6 @@ ivas_error mct_enc_reconfigure_fx( * Close MCT *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_mct_enc_close( - MCT_ENC_HANDLE *hMCT /* i/o: MCT encoder structure */ -) -{ - int16_t n, maxBlocks; - - if ( hMCT == NULL || *hMCT == NULL ) - { - return; - } - - maxBlocks = ( *hMCT )->nchan_out_woLFE / 2; - - for ( n = 0; n < maxBlocks; n++ ) - { - if ( ( *hMCT )->hBlockData[n] != NULL ) - { - if ( ( *hMCT )->hBlockData[n]->hStereoMdct != NULL ) - { - free( ( *hMCT )->hBlockData[n]->hStereoMdct ); - ( *hMCT )->hBlockData[n]->hStereoMdct = NULL; - } - - free( ( *hMCT )->hBlockData[n] ); - ( *hMCT )->hBlockData[n] = NULL; - } - } - - free( ( *hMCT ) ); - ( *hMCT ) = NULL; - - return; -} -#else void ivas_mct_enc_close( MCT_ENC_HANDLE *hMCT /* i/o: MCT encoder structure */ ) @@ -1490,7 +914,6 @@ void ivas_mct_enc_close( return; } -#endif /*------------------------------------------------------------------------- @@ -1608,7 +1031,7 @@ static ivas_error ivas_mc_enc_reconfig_fx( ivas_masa_enc_close( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); } } ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) @@ -1650,7 +1073,7 @@ static ivas_error ivas_mc_enc_reconfig_fx( ivas_mcmasa_enc_close_fx( &( st_ivas->hMcMasa ), st_ivas->hEncoderConfig->input_Fs ); ivas_masa_enc_close( &( st_ivas->hMasa ) ); - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); } ELSE IF( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMMC ) ) { @@ -1687,7 +1110,7 @@ static ivas_error ivas_mc_enc_reconfig_fx( ivas_lfe_enc_close( &( st_ivas->hLFE ) ); } - ivas_qmetadata_close( &st_ivas->hQMetaData ); + ivas_qmetadata_close_fx( &st_ivas->hQMetaData ); /* De-allocate MCT handle if last mode was MCT */ test(); @@ -1709,7 +1132,7 @@ static ivas_error ivas_mc_enc_reconfig_fx( { ivas_mcmasa_setNumTransportChannels_fx( &( st_ivas->nchan_transport ), &( st_ivas->hEncoderConfig->element_mode_init ), st_ivas->hEncoderConfig->ivas_total_brate ); - IF( NE_32( ( error = ivas_qmetadata_open( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = ivas_qmetadata_open_fx( &( st_ivas->hQMetaData ) ) ), IVAS_ERR_OK ) ) { return error; } diff --git a/lib_enc/ivas_mct_enc_mct.c b/lib_enc/ivas_mct_enc_mct.c index a70904e57..db6d8916c 100644 --- a/lib_enc/ivas_mct_enc_mct.c +++ b/lib_enc/ivas_mct_enc_mct.c @@ -38,9 +38,7 @@ #include "ivas_prot_fx.h" #include "prot.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" -#endif #include "wmc_auto.h" #include @@ -59,38 +57,6 @@ * * Calculate energy for each cahnnel *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void getChannelEnergies( - Encoder_State **sts, /* i/o: Encoder state structure */ - float nrg[MCT_MAX_CHANNELS], /* o : buffer with energies for each channel */ - const int16_t nchan /* i : number of channels */ -) -{ - int16_t ch, n; - int16_t nSubframes, L_subframe; - Encoder_State *st; - - /* Calculate energies per channel */ - for ( ch = 0; ch < nchan; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframe = st->hTcxEnc->L_frameTCX / nSubframes; - - nrg[ch] = 0; - for ( n = 0; n < nSubframes; n++ ) - { - nrg[ch] += sum2_f( st->hTcxEnc->spectrum[n], L_subframe ); - } - nrg[ch] = sqrtf( nrg[ch] ); - } - } - - return; -} -#else void getChannelEnergies_fx( Encoder_State **sts, /* i/o: Encoder state structure */ Word32 nrg[MCT_MAX_CHANNELS], /* o : buffer with energies for each channel */ @@ -147,7 +113,6 @@ void getChannelEnergies_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -155,60 +120,6 @@ void getChannelEnergies_fx( * * find channel pair with highest cross-correlation *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getNextBestCorrelation( - float xCorrMatrix[][MCT_MAX_CHANNELS], /* i : cross-correlation matrix */ - int16_t *_ch1, /* o : first channel of selected channel-pair */ - int16_t *_ch2, /* o : second channel of selected channel-pair */ - float *max_corr, /* o : normalized cross correlation value of selected channel pair */ - const int16_t sortInd, - const int16_t nChannels ) -{ - float tmp_corrVals[( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2]; - int16_t i; - int16_t ch1, ch2; - - set_f( tmp_corrVals, 0, ( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2 ); - - /* first sort correlation matrix */ - i = 0; - for ( ch1 = 0; ch1 < nChannels; ch1++ ) - { - for ( ch2 = ch1 + 1; ch2 < nChannels; ch2++ ) - { - if ( fabsf( xCorrMatrix[ch1][ch2] ) > 0 ) - { - assert( i < ( MCT_MAX_CHANNELS * ( MCT_MAX_CHANNELS - 1 ) ) / 2 ); - tmp_corrVals[i] = fabsf( xCorrMatrix[ch1][ch2] ); - i++; - } - } - } - - /* sort values */ - v_sort_float( tmp_corrVals, 0, ( ( nChannels * ( nChannels - 1 ) ) / 2 ) - 1 ); - - /* get max, or 2nd max and so on depending on sortInd value */ - *max_corr = tmp_corrVals[( nChannels * ( nChannels - 1 ) ) / 2 - 1 - sortInd]; - - /*find channel pair for this max_corr*/ - for ( ch1 = 0; ch1 < nChannels; ch1++ ) - { - for ( ch2 = ch1 + 1; ch2 < nChannels; ch2++ ) - { - if ( fabsf( xCorrMatrix[ch1][ch2] ) == *max_corr ) - { - *_ch1 = ch1; - *_ch2 = ch2; - *max_corr = xCorrMatrix[ch1][ch2]; /* assign to max_corr its actual value */ - break; - } - } - } - - return; -} -#else static void getNextBestCorrelation_fx( Word32 xCorrMatrix[][MCT_MAX_CHANNELS], /* i : cross-correlation matrix, Qx */ Word16 *_ch1, /* o : first channel of selected channel-pair */ @@ -270,7 +181,6 @@ static void getNextBestCorrelation_fx( return; } -#endif /*-----------------------------------------------------------------------* @@ -279,60 +189,6 @@ static void getNextBestCorrelation_fx( * calculates the cross correlation matrix for all active * channels *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getCorrelationMatrix( - Encoder_State **sts, /* i : core coder handle */ - MCT_ENC_HANDLE hMCT, /* i : MCT handle */ - float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] /* o : cross-correlation matrix */ -) -{ - int16_t ch1, ch2, n, nchan; - float tmp; - - nchan = hMCT->nchan_out_woLFE; - - /* correlation */ - for ( ch1 = 0; ch1 < nchan; ch1++ ) - { - for ( ch2 = ch1; ch2 < nchan; ch2++ ) - { - xCorrMatrix[ch1][ch2] = 0; - - if ( sts[ch1]->core == sts[ch2]->core && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && - sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - int16_t nSubframes = ( sts[ch1]->core == TCX_20_CORE ? 1 : NB_DIV ); - int16_t L_subframe = sts[ch1]->hTcxEnc->L_frameTCX / nSubframes; - - for ( n = 0; n < nSubframes; n++ ) - { - xCorrMatrix[ch1][ch2] += dotp( sts[ch1]->hTcxEnc->spectrum[n], sts[ch2]->hTcxEnc->spectrum[n], L_subframe ); - } - } - } - } - - /* normalize */ - for ( ch1 = 0; ch1 < nchan; ch1++ ) - { - for ( ch2 = ch1 + 1; ch2 < nchan; ch2++ ) - { - tmp = sqrtf( xCorrMatrix[ch1][ch1] * xCorrMatrix[ch2][ch2] ); - - if ( tmp > 0.f ) - { - xCorrMatrix[ch1][ch2] /= tmp; - } - else - { - xCorrMatrix[ch1][ch2] = 0.f; - } - } - } - - return; -} -#else static void getCorrelationMatrix_fx( Encoder_State **sts, /* i : core coder handle */ MCT_ENC_HANDLE hMCT, /* i : MCT handle */ @@ -449,7 +305,6 @@ static void getCorrelationMatrix_fx( return; } -#endif /*-----------------------------------------------------------------* @@ -457,37 +312,6 @@ static void getCorrelationMatrix_fx( * * searches for the best correlated channel pair *------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getBestCorrelation( - MCT_ENC_HANDLE hMCT, /* i : MCT handle */ - int16_t *_ch1, /* o : first channel of selected channel-pair */ - int16_t *_ch2, /* o : second channel of selected channel-pair */ - float *max_corr, /* o : normalized cross correlation value of selected channel pair */ - float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] ) /* i : cross-correlation matrix */ -{ - int16_t ch1, ch2; - - *_ch1 = -1; - *_ch2 = -1; - *max_corr = 0.f; - - for ( ch1 = 0; ch1 < ( hMCT->nchan_out_woLFE ); ch1++ ) - { - for ( ch2 = ch1 + 1; ch2 < ( hMCT->nchan_out_woLFE ); ch2++ ) - { - if ( fabsf( *max_corr ) < fabsf( xCorrMatrix[ch1][ch2] ) ) - { - *max_corr = xCorrMatrix[ch1][ch2]; - - *_ch1 = ch1; - *_ch2 = ch2; - } - } - } - - return; -} -#else static void getBestCorrelation_fx( MCT_ENC_HANDLE hMCT, /* i : MCT handle */ Word16 *_ch1, /* o : first channel of selected channel-pair, Q0 */ @@ -523,56 +347,12 @@ static void getBestCorrelation_fx( return; } -#endif /*----------------------------------------------------------------------* * getBlockValues() * stereo processing for the channels of current block *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getBlockValues( - Encoder_State **sts, /* i/o: core coder handle */ - const int16_t ch1, /* i : first channel of channel-pair */ - const int16_t ch2, /* i : second channel of channel-pair */ - MCT_BLOCK_DATA *hBlock, /* i : stereo block handle */ - float *mdst_spectrum[MCT_MAX_CHANNELS][2], /* i/o: MDST spectrum */ - float *inv_spectrum[MCT_MAX_CHANNELS][2], /* i/o: inverse spectrum */ - float *inv_mdst_spectrum[MCT_MAX_CHANNELS][2] /* i/o: invers MDST spectrum */ -) -{ - int16_t n; - float *p_mdst_spectrum[2][2]; - float *p_inv_spectrum[2][2]; - float *p_inv_mdst_spectrum[2][2]; - Encoder_State *p_st[2]; - - /* init return values: */ - hBlock->isActive = 1; - - /* map vectors to current block channels */ - for ( n = 0; n < 2; n++ ) - { - p_mdst_spectrum[0][n] = mdst_spectrum[ch1][n]; - p_mdst_spectrum[1][n] = mdst_spectrum[ch2][n]; - p_inv_spectrum[0][n] = inv_spectrum[ch1][n]; - p_inv_spectrum[1][n] = inv_spectrum[ch2][n]; - p_inv_mdst_spectrum[0][n] = inv_mdst_spectrum[ch1][n]; - p_inv_mdst_spectrum[1][n] = inv_mdst_spectrum[ch2][n]; - } - p_st[0] = sts[ch1]; - p_st[1] = sts[ch2]; - - stereo_coder_tcx( hBlock->hStereoMdct, p_st, hBlock->mask, p_mdst_spectrum, p_inv_spectrum, p_inv_mdst_spectrum, 1 ); - - if ( ( sts[ch1]->core == TCX_20_CORE && hBlock->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) || ( sts[ch1]->core == TCX_10_CORE && hBlock->hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO && hBlock->hStereoMdct->mdct_stereo_mode[1] == SMDCT_DUAL_MONO ) ) - { - hBlock->isActive = 0; - } - - return; -} -#else static void getBlockValues_fx( Encoder_State **sts, /* i/o: core coder handle */ const Word16 ch1, /* i : first channel of channel-pair */ @@ -621,7 +401,6 @@ static void getBlockValues_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -630,40 +409,6 @@ static void getBlockValues_fx( * updates the cross correlation matrix with modified spectra after * stereo block processing *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void updateCorrelationMatrix( - Encoder_State **sts, - MCT_ENC_HANDLE hMCT, - const int16_t _ch1, - const int16_t _ch2, - float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS] ) -{ - int16_t ch1, ch2, n; - - /* correlation: */ - for ( ch1 = 0; ch1 < ( hMCT->nchan_out_woLFE ); ch1++ ) - { - for ( ch2 = ch1; ch2 < ( hMCT->nchan_out_woLFE ); ch2++ ) - { - if ( sts[ch1]->core == sts[ch2]->core && sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && - sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - int16_t nSubframes = ( sts[ch1]->core == TCX_20_CORE ? 1 : NB_DIV ); - - if ( ch1 == _ch1 || ch2 == _ch2 || ch1 == _ch2 || ch2 == _ch1 ) - { - for ( n = 0; n < nSubframes; n++ ) - { - xCorrMatrix[ch1][ch2] = 0; /*disable combinations with channels already processed */ - } - } - } - } - } - - return; -} -#else static void updateCorrelationMatrix_fx( Encoder_State **sts, MCT_ENC_HANDLE hMCT, @@ -713,42 +458,12 @@ static void updateCorrelationMatrix_fx( return; } -#endif /*----------------------------------------------------------* * channelPairToIndex() * get the index of each channel pair *----------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t channelPairToIndex( - const int16_t chIdx1, - const int16_t chIdx2, - const int16_t nChannels ) -{ - int16_t ch1, ch2; - int16_t pairIdx; - - pairIdx = 0; - - for ( ch2 = 1; ch2 < nChannels; ch2++ ) - { - for ( ch1 = 0; ch1 < ch2; ch1++ ) - { - if ( ch1 == chIdx1 && ch2 == chIdx2 ) - { - return pairIdx; - } - else - { - pairIdx++; - } - } - } - - return -1; -} -#else static Word16 channelPairToIndex_fx( const Word16 chIdx1, const Word16 chIdx2, @@ -778,75 +493,11 @@ static Word16 channelPairToIndex_fx( return -1; } -#endif /*--------------------------------------------------------------------* * getGlobalILD() * get broadband ILD to mean energy and normalize channels with ratio *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getGlobalILD( - Encoder_State **sts, - MCT_ENC_HANDLE hMCT, - float *mdst_spectrum[MCT_MAX_CHANNELS][2], - const int16_t nchan ) -{ - int16_t k, ch, nSubframes, L_subframe; - float nrg[MCT_MAX_CHANNELS]; - float meanE = 0.f, ratio_float, qratio; - int16_t cnt = 0; - - /*Initializations*/ - set_s( hMCT->lowE_ch, 0, nchan ); - - getChannelEnergies( sts, nrg, nchan ); - - /*calculate total energy without LFE*/ - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - meanE += nrg[ch]; - cnt++; - } - } - - /*calculate mean energy*/ - assert( cnt >= 2 ); - meanE = max( meanE / cnt, EPSILON ); - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframe = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; - - if ( nrg[ch] > meanE ) /*change it to meanE if final solution*/ - { - ratio_float = meanE / nrg[ch]; - hMCT->mc_global_ild[ch] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * ratio_float + 0.5f ) ) ); - qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; - } - else - { - ratio_float = nrg[ch] / meanE; - hMCT->lowE_ch[ch] = 1; - hMCT->mc_global_ild[ch] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * ratio_float + 0.5f ) ) ); - qratio = (float) SMDCT_ILD_RANGE / hMCT->mc_global_ild[ch]; - } - - for ( k = 0; k < nSubframes; k++ ) - { - v_multc( sts[ch]->hTcxEnc->spectrum[k], qratio, sts[ch]->hTcxEnc->spectrum[k], L_subframe ); - v_multc( mdst_spectrum[ch][k], qratio, mdst_spectrum[ch][k], L_subframe ); - } - } - } - - - return; -} -#else static void getGlobalILD_fx( Encoder_State **sts, MCT_ENC_HANDLE hMCT, @@ -962,7 +613,6 @@ static void getGlobalILD_fx( return; } -#endif /*--------------------------------------------------------------------* @@ -970,224 +620,6 @@ static void getGlobalILD_fx( * * apply MCT algorithm to input channels *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void apply_MCT_enc( - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - Encoder_State **sts, /* i/o: encoder state structure */ - float *mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ - float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ - float *inv_mdst_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ - const int16_t nchan /* i : number of channels */ -) -{ - int16_t ch, k, ch1, ch2, nSubframes, L_subframeTCX; - float max_corr, qratio; - int16_t forceKeepTree, pair; - float sumCorrDiff, thr; - float xCorrMatrix[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS]; - int16_t currBlockDataCnt; - int16_t cpEle[MCT_MAX_CHANNELS]; - int16_t inactiveBlockDetected; - int16_t tmp_ch1, tmp_ch2; - float tmp_max_corr; - int16_t count_active_ch = 0; - - push_wmops( "mct_core_enc_mct" ); - - forceKeepTree = 1; - inactiveBlockDetected = 0; - set_s( cpEle, 0, MCT_MAX_CHANNELS ); - - /*Determine active channels*/ - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - count_active_ch++; - } - else - { - hMCT->mc_global_ild[ch] = 0; - } - } - - /*there should be at least one cp*/ - if ( count_active_ch >= CPE_CHANNELS ) - { - /*Normalize energies with global ILD*/ - getGlobalILD( sts, hMCT, mdst_spectrum, nchan ); - getCorrelationMatrix( sts, hMCT, xCorrMatrix ); - - /*check if previous tree should be kept*/ - sumCorrDiff = 0.0f; - thr = 0.15f * (float) ( count_active_ch ) * ( count_active_ch - 1 ) / 2.0f; - for ( ch2 = 1; ch2 < nchan; ch2++ ) - { - for ( ch1 = 0; ch1 < ch2; ch1++ ) - { - if ( sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && - sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - sumCorrDiff += fabsf( hMCT->lastxCorrMatrix[ch1][ch2] - xCorrMatrix[ch1][ch2] ); - } - } - } - - if ( sumCorrDiff > thr ) - { - forceKeepTree = 0; - } - - /* check if keepTree is applied on unallowed blocks (e.g. channel pairs with different cores) */ - if ( forceKeepTree ) - { - if ( !hMCT->currBlockDataCnt ) - { - forceKeepTree = 0; - } - else - { - for ( pair = 0; pair < hMCT->currBlockDataCnt; pair++ ) - { - if ( xCorrMatrix[hMCT->hBlockData[pair]->ch1][hMCT->hBlockData[pair]->ch2] == 0.0f ) - { - forceKeepTree = 0; - } - } - } - } - - /*save initial correlation matrix for next frame*/ - for ( ch1 = 0; ch1 < nchan; ch1++ ) - { - for ( ch2 = ch1; ch2 < nchan; ch2++ ) - { - hMCT->lastxCorrMatrix[ch1][ch2] = xCorrMatrix[ch1][ch2]; - } - } - - - currBlockDataCnt = 0; - while ( currBlockDataCnt < hMCT->nchan_out_woLFE ) - { - /* find best fitting channel pair: */ - ch1 = -1; - ch2 = -1; - max_corr = 0.f; - - if ( !forceKeepTree ) - { - getNextBestCorrelation( xCorrMatrix, &ch1, &ch2, &max_corr, inactiveBlockDetected, nchan ); - } - else - { - getBestCorrelation( hMCT, &tmp_ch1, &tmp_ch2, &tmp_max_corr, xCorrMatrix ); - - if ( currBlockDataCnt == hMCT->currBlockDataCnt ) - { - break; - } - else - { - ch1 = hMCT->hBlockData[currBlockDataCnt]->ch1; - ch2 = hMCT->hBlockData[currBlockDataCnt]->ch2; - - /*don't allow forcing of channel-pair if their correlation is under the threshold*/ - max_corr = xCorrMatrix[ch1][ch2]; - if ( fabsf( max_corr ) <= 0.3f ) - { - ch1 = tmp_ch1; - ch2 = tmp_ch2; - max_corr = tmp_max_corr; - forceKeepTree = 0; - } - } - } - - if ( ( fabsf( max_corr ) > DEFAULT_CORR_THRES && !hMCT->hbr_mct ) || ( fabsf( max_corr ) > SPAR_CORR_THRES && hMCT->hbr_mct ) ) - { - if ( !forceKeepTree ) - { - /*save channel pair*/ - hMCT->hBlockData[currBlockDataCnt]->ch1 = ch1; - hMCT->hBlockData[currBlockDataCnt]->ch2 = ch2; - } - - /* calculate all related values: */ - assert( sts[ch1]->mct_chan_mode != MCT_CHAN_MODE_IGNORE && sts[ch2]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ); - - getBlockValues( sts, ch1, ch2, hMCT->hBlockData[currBlockDataCnt], mdst_spectrum, inv_spectrum, inv_mdst_spectrum ); - - if ( hMCT->hBlockData[currBlockDataCnt]->isActive == 0 ) - { - inactiveBlockDetected++; - if ( inactiveBlockDetected > hMCT->nchan_out_woLFE / 2 ) - { - break; - } - forceKeepTree = 0; - - continue; /* skip inactive blocks where stereo mode is dual-mono */ - } - - updateCorrelationMatrix( sts, hMCT, ch1, ch2, xCorrMatrix ); - cpEle[ch1] = 1; - cpEle[ch2] = 1; - - currBlockDataCnt++; - } - else - { - break; - } - } - - /*save number of blocks for next frame*/ - hMCT->currBlockDataCnt = currBlockDataCnt; - - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - if ( ( !cpEle[ch] ) || hMCT->currBlockDataCnt == 0 ) - { - nSubframes = ( sts[ch]->core == TCX_20_CORE ) ? 1 : NB_DIV; - L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; - - if ( hMCT->lowE_ch[ch] ) - { - qratio = (float) hMCT->mc_global_ild[ch] / SMDCT_ILD_RANGE; - } - else - { - qratio = (float) SMDCT_ILD_RANGE / hMCT->mc_global_ild[ch]; - } - - for ( k = 0; k < nSubframes; k++ ) - { - v_multc( sts[ch]->hTcxEnc->spectrum[k], qratio, sts[ch]->hTcxEnc->spectrum[k], L_subframeTCX ); - v_multc( mdst_spectrum[ch][k], qratio, mdst_spectrum[ch][k], L_subframeTCX ); - set_zero( inv_spectrum[ch][k], L_subframeTCX ); - } - hMCT->mc_global_ild[ch] = 0; - } - } - } - } - else - { - hMCT->currBlockDataCnt = 0; - for ( ch = 0; ch < nchan; ch++ ) - { - hMCT->mc_global_ild[ch] = 0; - } - } - - pop_wmops(); - - return; -} -#else void apply_MCT_enc_fx( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ @@ -1468,73 +900,12 @@ void apply_MCT_enc_fx( return; } -#endif /*--------------------------------------------------------------------* * write_mct_bitstream() * * write mct metadata to bitstream *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void write_mct_bitstream( - Encoder_State **sts, /* i/o: encoder state structure */ - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - const int16_t nchan /* i : number of channels */ -) -{ - int16_t pair, ch; - int16_t channelPairIndex; - int16_t nbits_start; - MCT_BLOCK_DATA_HANDLE hBlock; - Encoder_State *p_st[2]; - BSTR_ENC_HANDLE hBstr = sts[0]->hBstr; - - nbits_start = hBstr->nb_bits_tot; - - push_next_indice( hBstr, hMCT->currBlockDataCnt, MCT_NUM_BLOCK_DATA_BITS ); - - /* first write core info and overlap mode for all channels */ - for ( ch = 0; ch < nchan; ch++ ) - { - if ( hMCT->currBlockDataCnt && sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - push_next_indice( hBstr, hMCT->mc_global_ild[ch], SMDCT_GLOBAL_ILD_BITS ); - } - } - - if ( hMCT->currBlockDataCnt ) - { - for ( ch = 0; ch < nchan; ch++ ) - { - if ( sts[ch]->mct_chan_mode != MCT_CHAN_MODE_IGNORE ) - { - push_next_indice( hBstr, hMCT->lowE_ch[ch], 1 ); - } - } - } - - /* Do for each stereo block */ - for ( pair = hMCT->currBlockDataCnt - 1; pair >= 0; pair-- ) - { - hBlock = hMCT->hBlockData[pair]; - - /*calculate channel pair index and write it to BS*/ - channelPairIndex = channelPairToIndex( hBlock->ch1, hBlock->ch2, nchan ); - push_next_indice( hBstr, channelPairIndex, hMCT->bitsChannelPairIndex ); - - /*point to encoder states of actual channels to write block pair bits*/ - p_st[0] = sts[hBlock->ch1]; - p_st[1] = sts[hBlock->ch2]; - - /*then business as usual for each block pair */ - write_stereo_to_bitstream( hMCT->hBlockData[pair]->hStereoMdct, p_st, hBlock->mask, 1, hBstr ); - } - - hMCT->nBitsMCT = hBstr->nb_bits_tot - nbits_start; - - return; -} -#else void write_mct_bitstream_fx( Encoder_State **sts, /* i/o: encoder state structure */ MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ @@ -1596,14 +967,12 @@ void write_mct_bitstream_fx( return; } -#endif /*--------------------------------------------------------------------* * mctStereoIGF_enc() * * IGF analysis of channels after MCT processing *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void mctStereoIGF_enc_fx( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ @@ -1791,116 +1160,3 @@ void mctStereoIGF_enc_fx( return; } -#else -void mctStereoIGF_enc( - MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ - Encoder_State **sts, /* i/o: encoder state structure */ - float *orig_spectrum[MCT_MAX_CHANNELS][2], /* i : MDCT spectrum for ITF */ - float powerSpec[MCT_MAX_CHANNELS][L_FRAME48k], /* i/o: MDCT^2 + MDST^2 spectrum,or estimate*/ - float *powerSpecMsInv[MCT_MAX_CHANNELS][NB_DIV], /* i : same as above but for inverse spect.*/ - float *inv_spectrum[MCT_MAX_CHANNELS][NB_DIV], /* i : inverse spectrum */ - const int16_t sp_aud_decision0[MCT_MAX_CHANNELS] /* i : speech audio decision */ -) -{ - int16_t b, nSubframes, L_subframeTCX; - int16_t p_ch[2], n, ch, ch1, ch2; - Encoder_State *p_st[NB_DIV]; - Encoder_State *st; - float *p_powerSpecMsInv[CPE_CHANNELS][NB_DIV]; - float *p_inv_spectrum[CPE_CHANNELS][NB_DIV]; - float *p_orig_spectrum[CPE_CHANNELS][NB_DIV]; - float *p_powerSpec[NB_DIV]; - int16_t singleChEle[MCT_MAX_CHANNELS]; - - L_subframeTCX = 0; /* to avoid compilation warning */ - set_s( singleChEle, 1, hMCT->nchan_out_woLFE ); - - for ( b = 0; b < hMCT->currBlockDataCnt; b++ ) - { - ch1 = hMCT->hBlockData[b]->ch1; - ch2 = hMCT->hBlockData[b]->ch2; - - p_ch[0] = ch1; - p_ch[1] = ch2; - - singleChEle[hMCT->hBlockData[b]->ch1] = 0; - singleChEle[hMCT->hBlockData[b]->ch2] = 0; - - /* point to encoder states of actual channels to write block pair bits */ - p_st[0] = sts[ch1]; - p_st[1] = sts[ch2]; - - if ( ch1 > 0 ) - { - sts[ch1]->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - - if ( ch2 > 0 ) - { - sts[ch2]->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - - p_powerSpec[0] = powerSpec[ch1]; - p_powerSpec[1] = powerSpec[ch2]; - - /* Band-wise M/S for MDST */ - nSubframes = p_st[0]->hTcxEnc->tcxMode == TCX_20 ? 1 : NB_DIV; - for ( n = 0; n < nSubframes; n++ ) - { - p_orig_spectrum[0][n] = orig_spectrum[ch1][n]; - p_orig_spectrum[1][n] = orig_spectrum[ch2][n]; - p_powerSpecMsInv[0][n] = powerSpecMsInv[ch1][n]; - p_powerSpecMsInv[1][n] = powerSpecMsInv[ch2][n]; - p_inv_spectrum[0][n] = inv_spectrum[ch1][n]; - p_inv_spectrum[1][n] = inv_spectrum[ch2][n]; - - if ( hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n] != hMCT->hBlockData[b]->hStereoMdct->IGFStereoMode[n] || - hMCT->hBlockData[b]->hStereoMdct->mdct_stereo_mode[n] == SMDCT_BW_MS ) - { - ProcessStereoIGF( hMCT->hBlockData[b]->hStereoMdct, p_st, hMCT->hBlockData[b]->mask, p_orig_spectrum, p_powerSpec, p_powerSpecMsInv, p_inv_spectrum, n, sp_aud_decision0[ch1], p_st[0]->total_brate, 1 ); - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = p_st[ch]; - - L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; - - ProcessIGF( st, st->hTcxEnc->spectrum[n], (float *) orig_spectrum[p_ch[ch]][n], &powerSpec[p_ch[ch]][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch1], 0 ); - } - } - } - } - - /* channel elements that are coded separately detected */ - if ( sum_s( singleChEle, ( hMCT->nchan_out_woLFE ) ) != 0 ) - { - for ( ch = 0; ch < ( hMCT->nchan_out_woLFE ); ch++ ) - { - if ( singleChEle[ch] ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - if ( ch > 0 ) - { - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - - nSubframes = st->hTcxEnc->tcxMode == TCX_20 ? 1 : NB_DIV; - for ( n = 0; n < nSubframes; n++ ) - { - ProcessIGF( st, st->hTcxEnc->spectrum[n], (float *) orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, sp_aud_decision0[ch], 0 ); - } - } - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_mdct_core_enc.c b/lib_enc/ivas_mdct_core_enc.c index ad16ade84..1313ba4f3 100644 --- a/lib_enc/ivas_mdct_core_enc.c +++ b/lib_enc/ivas_mdct_core_enc.c @@ -41,11 +41,9 @@ #include "rom_com.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*--------------------------------------------------------------* @@ -59,7 +57,6 @@ #define SILENT_CHANNEL_THRES_FX 1677721600 // Q24 -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------* * enc_prm_pre_mdct_fx() * @@ -124,63 +121,8 @@ static void enc_prm_pre_mdct_fx( return; } -#else -/*--------------------------------------------------------------* - * enc_prm_pre_mdct() - * - * encode all side parameters up to MDCT whitening - *---------------------------------------------------------------*/ - -static void enc_prm_pre_mdct( - Encoder_State *st, /* i/o: encoder state structure */ - int16_t param[], /* i : parameters */ - const int16_t *no_param_tns, /* i : number of TNS parameters per subframe */ - int16_t p_param[2], /* o : pointer to parameters for next round of bs writing */ - const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -) -{ - int16_t nbits_start; - - nbits_start = hBstr->nb_bits_tot; - - /*--------------------------------------------------------------------------------* - * Header - *--------------------------------------------------------------------------------*/ - - writeTCXMode( st, hBstr, MCT_flag, &nbits_start ); - - /* write last_core for core switching and error concealment */ - push_next_indice( hBstr, st->last_core != ACELP_CORE, 1 ); - - writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); - if ( st->core == TCX_10_CORE ) - { - writeTCXWindowing( hBstr, st->hTcxCfg->tcx_last_overlap_mode ); - } - push_next_indice( hBstr, st->hTcxEnc->kernel_type[0], st->last_core != ACELP_CORE ? 2 : 1 ); - if ( st->core == TCX_10_CORE ) - { - assert( ( st->hTcxEnc->kernel_type[0] & 1 ) == ( st->hTcxEnc->kernel_type[1] >> 1 ) ); - push_next_indice( hBstr, st->hTcxEnc->kernel_type[1] & 1, 1 ); - } - - st->glr_reset = 0; - - /*--------------------------------------------------------------------------------* - * TCX20/TCX10 parameters - *--------------------------------------------------------------------------------*/ - writeTCXparam( st, hBstr, NULL, param, 0, 0, 0, no_param_tns, p_param, NULL, 0 ); - - st->side_bits_frame_channel = hBstr->nb_bits_tot - nbits_start; - - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------* * kernel_switch_detect_fx() * @@ -356,82 +298,8 @@ static Word16 kernel_switch_detect_fx( } return 0; /* final decision */ } -#else -/*--------------------------------------------------------------* - * kernel_switch_detect() - * - * complex-valued detection method for transform kernel switching - *---------------------------------------------------------------*/ - -static int16_t kernel_switch_detect( - float *sigR0, /* i/o: MDCT samples of the 1st (left) channel */ - float *sigR1, /* i/o: MDCT samples of the 2nd (right) channel */ - float *sigI0, /* i/o: MDST samples of the 1st (left) channel */ - float *sigI1, /* i/o: MDST samples of the 2nd (right) channel */ - const int16_t nSamplesCore, /* i : number of core-coded samples below IGF */ - const int16_t nSamplesMax, /* i : transform length (number of MCLT lines) */ - const int16_t tcxTransType, /* i : TCX transform type (2*5, 1*10, or 1*20) */ - float *switchCovPrev, /* i/o: previous transform's correlation value */ - const uint32_t bitRateMode /* i : stereo bitrate mode (bps * L_frame) */ -) -{ - int16_t maxLength, anaLength, s; - float cov00, cov90, sumR0, sumR1, sumI0, sumI1; - - maxLength = ( nSamplesCore > 0 && nSamplesCore < nSamplesMax ) ? nSamplesCore : nSamplesMax; - anaLength = min( maxLength, (int16_t) ( bitRateMode >> 17 ) & 0xFFFE ); - s = ( nSamplesMax < 512 ? 2 : 4 ); /* exclude DC offset */ - - cov00 = 0.f; - cov90 = 0.f; - sumR0 = 0.f; - sumR1 = 0.f; - sumI0 = 0.f; - sumI1 = 0.f; - - if ( tcxTransType == TCX_5 ) - { - assert( nSamplesMax < 512 ); - anaLength >>= 1; - for ( s = 1; s < anaLength; s++ ) - { - cov00 += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; - cov90 += sigR0[s] * sigI1[s] - sigI0[s] * sigR1[s]; - sumR0 += sigR0[s] * sigR0[s]; - sumR1 += sigR1[s] * sigR1[s]; - sumI0 += sigI0[s] * sigI0[s]; - sumI1 += sigI1[s] * sigI1[s]; - } - anaLength += ( nSamplesMax >> 1 ); - s = 1 + ( nSamplesMax >> 1 ); /* 2nd TCX-5 spectrum is stacked onto 1st */ - } - for ( ; s < anaLength; s++ ) - { - cov00 += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; - cov90 += sigR0[s] * sigI1[s] - sigI0[s] * sigR1[s]; - sumR0 += sigR0[s] * sigR0[s]; - sumR1 += sigR1[s] * sigR1[s]; - sumI0 += sigI0[s] * sigI0[s]; - sumI1 += sigI1[s] * sigI1[s]; - } - - cov00 /= ( sqrtf( sumR0 * sumR1 ) + sqrtf( sumI0 * sumI1 ) + 1.f ); - cov90 /= ( sqrtf( sumR0 * sumI1 ) + sqrtf( sumI0 * sumR1 ) + 1.f ); - sumI0 = max( 0.f, fabsf( cov90 ) - fabsf( cov00 ) ); - sumI1 = ( switchCovPrev != NULL ? fabsf( *switchCovPrev ) : 0.f ); - s = ( cov90 < 0.f ? -1 : 1 ); - - if ( switchCovPrev != NULL ) /* update the decision smoothing history */ - { - *switchCovPrev = ( 0.875f * sumI1 + 0.125f * sumI0 ) * s; - } - - return ( ( sumI0 > 0.5f - 0.25f * sumI1 || fabsf( cov90 ) > 0.75f - 0.5f * sumI1 ) && ( sumI1 > 0.0625f ) ? s : 0 ); /* final decision */ -} -#endif -#ifdef IVAS_FLOAT_FIXED static void kernel_switch_trafo_fx( const Word32 *x, /* Input (Q_in) */ Word32 *y, /* Output (Q_in - 1) */ @@ -501,51 +369,8 @@ static void kernel_switch_trafo_fx( return; } -#else -static void kernel_switch_trafo( - const float *x, - float *y, - const int16_t l, - const int16_t m, - const int16_t r, - const uint16_t kernelType ) -{ - const float signLeft = ( kernelType >= MDCT_II ? -1.f : 1.f ); - const float signRight = ( kernelType & 1 ? 1.f : -1.f ); - int16_t i; - float inputBuffer[N_MAX]; - - /* Init */ - for ( i = 0; i < m / 2; i++ ) - { - inputBuffer[m / 2 + r / 2 + i] = -1.0f * x[l + m / 2 - 1 - i]; - } - - for ( i = 0; i < l / 2; i++ ) - { - inputBuffer[m / 2 + r / 2 + m / 2 + i] = signLeft * x[i] - x[l - 1 - i]; - } - - for ( i = 0; i < m / 2; i++ ) - { - inputBuffer[m / 2 + r / 2 - 1 - i] = -1.0f * x[l + m / 2 + i]; - } - - for ( i = 0; i < r / 2; i++ ) - { - inputBuffer[m / 2 + r / 2 - 1 - m / 2 - i] = -1.0f * x[l + m + i] + signRight * x[l + m + r - 1 - i]; - } - - edxt( inputBuffer, y, l / 2 + m + r / 2, kernelType, FALSE ); - - v_multc( y, sqrtf( (float) NORM_MDCT_FACTOR / ( l / 2 + m + r / 2 ) ), y, l / 2 + m + r / 2 ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void kernel_switch_update_transforms_fx( Word32 *sigR, /* i/o: MDCT samples of the given channel (*q_sig) */ Word32 *sigI, /* i/o: MDST samples of the given channel (*q_sig) */ @@ -779,113 +604,7 @@ static void kernel_switch_update_transforms_fx( return; } -#else -static void kernel_switch_update_transforms( - float *sigR, /* i/o: MDCT samples of the given channel */ - float *sigI, /* i/o: MDST samples of the given channel */ - const int16_t tcxTransType, /* i : TCX transform type, cf also above */ - TCX_CONFIG_HANDLE hTcxCfg, /* i : TCX configuration handle, pointer */ - const int16_t bwidthSwCnt, /* i : bandwidth switching counter in st */ - const uint16_t kernelType, /* i : TCX transform kernel type (0 - 3) */ - const float *tcxTimeSignal, /* i : hTcxEnc->new_speech_TCX buf in st */ - const float *speech_TCX, /* i : hTcxEnc->speech_TCX buffer in st */ - float *windowedTimeSignal, /* i/o: windowed input and scratch buffer */ - const int16_t L_subframe /* i : transform length (number of bins) */ -) -{ - int16_t s, nSubframes; - - s = L_subframe; - nSubframes = ( tcxTransType == TCX_20 ? 1 : NB_DIV ); - - if ( kernelType == MDCT_IV ) /* no updates required here! */ - { - return; - } - - if ( kernelType == MDST_IV ) /* swap real and imag. parts */ - { - for ( s = L_subframe - 1; s >= 0; s-- ) - { - const float sigTemp = -sigR[s]; - - sigR[s] = sigI[s]; - sigI[s] = sigTemp; - } - - return; - } - - /* MDCT/MDST-II as real part, keep imag. part for speedup */ - if ( tcxTransType == TCX_20 && hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - wtda_ext( tcxTimeSignal, windowedTimeSignal, (int16_t) windowedTimeSignal[0], (int16_t) windowedTimeSignal[1], s, kernelType ); - - edxt( windowedTimeSignal, sigR, s, kernelType, FALSE ); - - v_multc( sigR, sqrtf( (float) NORM_MDCT_FACTOR / s ), sigR, s ); - } - else /* 2 TCX5 subframes or 1 TCX10 or 1 transitory TCX20 */ - { - const float sign = ( kernelType >= MDCT_II ? 1.f : -1.f ); - const int16_t minWindowLen = hTcxCfg->tcx_mdct_window_min_lengthFB - 1; - int16_t i, leftOverlap = 0, rightOverlap = 0; - const float *left_win, *right_win; - - tcx_get_windows_flt( hTcxCfg, (int16_t) windowedTimeSignal[0], (int16_t) windowedTimeSignal[1], &leftOverlap, &left_win, &rightOverlap, &right_win, 1 ); - if ( speech_TCX != NULL && tcxTransType != TCX_20 && (int16_t) windowedTimeSignal[0] == FULL_OVERLAP && s - leftOverlap > minWindowLen ) - { - for ( i = minWindowLen; i >= 0; i-- ) /* outer left folding of shortened long ALDO slope */ - { - windowedTimeSignal[2 + leftOverlap + i] += sign * speech_TCX[-1 - i] * hTcxCfg->tcx_aldo_window_1_FB_flt[leftOverlap / 2 + minWindowLen - i] * hTcxCfg->tcx_mdct_window_minimumFB_flt[minWindowLen - i]; - } - } - - if ( tcxTransType == TCX_5 ) - { - float tcx5Win[N_TCX10_MAX / 2 + L_MDCT_OVLP_MAX]; /* temporary buffer for TCX5 windowing */ - - assert( L_subframe == nSubframes * hTcxCfg->tcx5SizeFB ); - - /* Outer left folding */ - for ( i = 0; i < leftOverlap / 2; i++ ) - { - windowedTimeSignal[2 + leftOverlap / 2 + i] += sign * windowedTimeSignal[2 + leftOverlap / 2 - 1 - i]; - } - - s = hTcxCfg->tcx5SizeFB; /* obtain 1st TCX5 again */ - nSubframes *= 2; - WindowSignal_flt( hTcxCfg, leftOverlap / 2, RECTANGULAR_OVERLAP, MIN_OVERLAP, &leftOverlap, &rightOverlap, windowedTimeSignal + 2, &s, tcx5Win, 0, 1 ); - kernel_switch_trafo( tcx5Win, sigR, leftOverlap, s /* L_subfr. */ - ( leftOverlap + rightOverlap ) / 2, rightOverlap, kernelType ); - - if ( kernelType & 1 ) /* 2nd TCX5 is kernelType 3 */ - { - for ( i = L_subframe - 1; i >= s; i-- ) - { - const float sigTemp = -sigR[i]; - - sigR[i] = sigI[i]; - sigI[i] = sigTemp; - } - } - } - else /* tcxTransType != TCX_5 */ - { - kernel_switch_trafo( windowedTimeSignal + 2, sigR, leftOverlap, s - ( leftOverlap + rightOverlap ) / 2, rightOverlap, kernelType ); - } - } - - /* high-band gain control, in case of bandwidth switching */ - if ( bwidthSwCnt > 0 ) - { - v_multc( sigR + L_FRAME16k / nSubframes, (float) bwidthSwCnt / (float) BWS_TRAN_PERIOD, sigR + L_FRAME16k / nSubframes, s - L_FRAME16k / nSubframes ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void applyStereoPreProcessingCplx( Word32 *mdctSample1_fx, // q_com Word32 *mdctSample2_fx, // q_com @@ -1066,87 +785,12 @@ static void applyStereoPreProcessingCplx( return; } -#else -static void applyStereoPreProcessingCplx( - float *mdctSample1, - float *mdctSample2, - float *mdstSample1, - float *mdstSample2, - const float factIn, - const float factDe, - const float sign ) -{ - const float valI1 = *mdstSample1; - const float valI2 = *mdstSample2; - const float valR1 = *mdctSample1; - const float valR2 = *mdctSample2; - float absR1, absR2; - float dmxI1, dmxR1, dmxI2, dmxR2; - float n, d; - - absR1 = fabsf( valR1 ); - absR2 = fabsf( valR2 ); - dmxR1 = valR1 * factDe + sign * valR2 * factIn; /* cross */ - dmxR2 = valR2 * factDe + sign * valR1 * factIn; /* -talk */ - - if ( fabsf( dmxR1 ) < absR1 + absR2 ) /* avoid destructive summations */ - { - if ( absR1 * factDe < absR2 * factIn ) - { - dmxR1 = valR2 * factIn - sign * valR1 * factDe; - dmxI1 = valI2 * factIn - sign * valI1 * factDe; - } - else - { - dmxR1 = valR1 * factDe - sign * valR2 * factIn; - dmxI1 = valI1 * factDe - sign * valI2 * factIn; - } - } - else - { - dmxI1 = valI1 * factDe + sign * valI2 * factIn; - } - - if ( fabsf( dmxR2 ) < absR1 + absR2 ) /* avoid destructive summations */ - { - if ( absR1 * factIn < absR2 * factDe ) - { - dmxR2 = valR2 * factDe - sign * valR1 * factIn; - dmxI2 = valI2 * factDe - sign * valI1 * factIn; - } - else - { - dmxR2 = valR1 * factIn - sign * valR2 * factDe; - dmxI2 = valI1 * factIn - sign * valI2 * factDe; - } - } - else - { - dmxI2 = valI2 * factDe + sign * valI1 * factIn; - } - - n = valR1 * valR1 + valI1 * valI1; /* maintain spectral magnitude (1) */ - d = dmxR1 * dmxR1 + dmxI1 * dmxI1; - d = sqrtf( n / max( 1.f, d ) ); - *mdctSample1 = dmxR1 * d; - *mdstSample1 = dmxI1 * d; - - n = valR2 * valR2 + valI2 * valI2; /* maintain spectral magnitude (2) */ - d = dmxR2 * dmxR2 + dmxI2 * dmxI2; - d = sqrtf( n / max( 1.f, d ) ); - *mdctSample2 = dmxR2 * d; - *mdstSample2 = dmxI2 * d; - - return; -} -#endif /*--------------------------------------------------------------* * enc_ste_pre_mdct() * * encoder-side complex-valued stereo pre-processing (crosstalk) *---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static uint16_t enc_ste_pre_mdct( Word32 *sigR0_fx, /* i/o: MDCT samples of the 1st (left) channel q_com*/ Word32 *sigR1_fx, /* i/o: MDCT samples of the 2nd (right) channel q_com*/ @@ -1433,118 +1077,12 @@ static uint16_t enc_ste_pre_mdct( return ans; } -#else -static uint16_t enc_ste_pre_mdct( - float *sigR0, /* i/o: MDCT samples of the 1st (left) channel */ - float *sigR1, /* i/o: MDCT samples of the 2nd (right) channel */ - float *sigI0, /* i/o: MDST samples of the 1st (left) channel */ - float *sigI1, /* i/o: MDST samples of the 2nd (right) channel */ - const int16_t nSamplesCore, /* i : number of core-coded samples below IGF */ - const int16_t nSamplesMax, /* i : transform length (number of MCLT lines) */ - const int16_t limitWeight, /* i : 1 means the pre-processing is softened */ - const uint16_t corrIdxPrev, /* i : previous transform's correlation index */ - const uint32_t bitRateMode /* i : stereo bitrate mode (bps * L_frame) */ -) -{ - int16_t fadeInLen, fadeInOff, nSampProc, preproLen; - float maxSqrValue, stepWeightI, stepWeightD; - float corr, sumL, sumR, chanCorrSign, xTalkI, xTalkD; - float sumMagnL, sumMagnR, sumPrdLR, sumPrdLL, sumPrdRR; - int16_t s; - - fadeInLen = ( nSamplesMax < 512 ? ( nSamplesMax < 256 ? 10 : 20 ) : 40 ); /* 1000Hz transition */ - fadeInOff = ( ( bitRateMode * 3 ) >> 19 ) & ( nSamplesMax < 512 ? 0xFFFF : 0xFFFE ); /* offset */ - nSampProc = ( nSamplesCore > 0 && nSamplesCore < nSamplesMax ) ? nSamplesCore : nSamplesMax; - preproLen = nSampProc - fadeInOff; - maxSqrValue = 16777216.f * preproLen * preproLen; - stepWeightI = ( limitWeight > 0 ? 1.f : 2.f ); /* crosstalk weight */ - stepWeightD = 4.f - stepWeightI; /* decrement, i.e., 1 - crosstalk */ - corr = 0.f, sumL = 0.f, sumR = 0.f; - sumMagnL = 0.f, sumMagnR = 0.f, sumPrdLR = 0.f, sumPrdLL = 0.f, sumPrdRR = 0.f; - - if ( fadeInOff + fadeInLen + MIN_STE_PRE_LEN >= nSampProc ) - { - return 0; - } - - for ( s = fadeInOff; s < nSampProc; s++ ) - { - float absMagnL, absMagnR; - absMagnL = sqrtf( sigR0[s] * sigR0[s] + sigI0[s] * sigI0[s] ); - absMagnR = sqrtf( sigR1[s] * sigR1[s] + sigI1[s] * sigI1[s] ); - - corr += sigR0[s] * sigR1[s] + sigI0[s] * sigI1[s]; - sumL += sigR0[s] + sigI0[s]; - sumR += sigR1[s] + sigI1[s]; - - sumMagnL += absMagnL; - sumMagnR += absMagnR; - sumPrdLR += absMagnL * absMagnR; - sumPrdLL += absMagnL * absMagnL; - sumPrdRR += absMagnR * absMagnR; - } - corr *= 2.f * preproLen; - corr -= sumL * sumR; - chanCorrSign = ( corr < -maxSqrValue ) ? -1.f : 1.f; - - sumL = sumMagnL / (float) preproLen; /* inter-channel correlation of magnitude */ - sumR = sumMagnR / (float) preproLen; - corr = sumPrdLR + sumL * sumR * preproLen - sumMagnL * sumR - sumMagnR * sumL; - sumL = sumPrdLL + sumL * sumL * preproLen - sumMagnL * sumL - sumMagnL * sumL; - sumR = sumPrdRR + sumR * sumR * preproLen - sumMagnR * sumR - sumMagnR * sumR; - corr = ( ( corr <= 0.f ) || ( sumL * sumR <= 0.f ) ? 0.f : ( corr * corr ) / ( sumL * sumR ) ); - - if ( ( corr > 0.75f && corrIdxPrev == 0 ) || /* processing weight fade-in/-out */ - ( corr <= 0.75f && corrIdxPrev > 0 ) ) - { - stepWeightI = 1.f; - stepWeightD = 4.f - stepWeightI; - } - - if ( corr <= 0.75f && corrIdxPrev == 0 ) /* bypass all processing, just return */ - { - return 0; - } - - sigR0 += fadeInOff + 1; /* stereo pre-processing starts with an offset of one! */ - sigR1 += fadeInOff + 1; - sigI0 += fadeInOff + 1; - sigI1 += fadeInOff + 1; - xTalkI = stepWeightI; - xTalkD = stepWeightD * ( 2 * fadeInLen - 1 ); - - for ( s = fadeInLen - 1; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) - { - applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); - xTalkI += stepWeightI; - xTalkD -= stepWeightD; - } - - for ( s = preproLen - fadeInLen; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) - { - applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); - } - - if ( nSampProc < nSamplesMax ) /* fade-out of processing at start of IGF range */ - { - for ( s = min( fadeInLen, nSamplesMax - nSampProc ) - 1; s > 0; s--, sigR0++, sigR1++, sigI0++, sigI1++ ) - { - xTalkI -= stepWeightI; - xTalkD += stepWeightD; - applyStereoPreProcessingCplx( sigR0, sigR1, sigI0, sigI1, xTalkI, xTalkD, chanCorrSign ); - } - } - - return ( corr > 0.75f ? 1 : 0 ); -} -#endif /*--------------------------------------------------------------* * enc_prm_igf_mdct() * * write igf parameters to bitstream *---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void enc_prm_igf_mdct( Encoder_State *st, /* i : Encoder state handle */ BSTR_ENC_HANDLE hBstr /* i/o: Bitstream handle */ @@ -1572,33 +1110,6 @@ void enc_prm_igf_mdct( return; } -#else -void enc_prm_igf_mdct( - Encoder_State *st, /* i : Encoder state handle */ - BSTR_ENC_HANDLE hBstr /* i/o: Bitstream handle */ -) -{ - int16_t nbits_start, total_nbbits; - - nbits_start = hBstr->nb_bits_tot; - - if ( st->core == TCX_20_CORE ) - { - st->hIGFEnc->infoTotalBitsPerFrameWritten = 0; - - IGFEncWriteBitstream( st->hIGFEnc, hBstr, &st->hIGFEnc->infoTotalBitsPerFrameWritten, ( st->last_core == ACELP_CORE ) ? IGF_GRID_LB_TRAN : IGF_GRID_LB_NORM, 1 ); - } - else - { - IGFEncWriteConcatenatedBitstream( st->hIGFEnc, hBstr ); - } - - total_nbbits = hBstr->nb_bits_tot - nbits_start; - st->side_bits_frame_channel += total_nbbits; - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_mdct_core_whitening_enc() @@ -1606,7 +1117,6 @@ void enc_prm_igf_mdct( * MCT preprocessing up to whitening the core spectrum *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mdct_core_whitening_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word16 new_samples_fx[CPE_CHANNELS][L_INP], /* i : new samples */ @@ -2960,804 +2470,27 @@ void ivas_mdct_core_whitening_enc_fx( pop_wmops(); return; } -#else -void ivas_mdct_core_whitening_enc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ - float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ - float pitch_buf[CPE_CHANNELS][NB_SUBFR16k], /* o : floating pitch for each subframe */ - float *mdst_spectrum_long[CPE_CHANNELS], /* o : buffer for MDST spectrum */ - int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* o : buffer TNS bits */ - float *orig_spectrum_long[CPE_CHANNELS], /* o : origingal spectrum w/o whitening */ - int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* o : number of tns parameters put into prm */ - int16_t p_param[CPE_CHANNELS][NB_DIV], /* o : pointer to the parameter table */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0) */ - const int16_t nChannels /* i : total number of coded channels */ +void ivas_mdct_quant_coder_fx( + CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ + Word16 tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ + Word16 tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ + Word16 p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ + const Word16 MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ) { - int16_t n, ch, nSubframes, L_subframe, L_subframeTCX, tcx_subframe_coded_lines; - float A_q[CPE_CHANNELS][NB_DIV][M + 1]; - int16_t sns_vq_indices[CPE_CHANNELS * NB_DIV * SNS_MSVQ_NSTAGES_TCX10]; - int16_t sns_stereo_mode[NB_DIV]; - int16_t idx; - int16_t param_lpc[CPE_CHANNELS][NPRM_LPC_NEW]; - int16_t param_core[CPE_CHANNELS][2 * NPRM_DIV]; - int16_t ltpBits[CPE_CHANNELS]; - int16_t i, T_op[CPE_CHANNELS][3]; - float *orig_spectrum[CPE_CHANNELS][NB_DIV]; /* Pointers to MDCT output for a short block (L/R) */ - float temp_buffer[15 * L_FRAME48k / 8]; - float *windowedSignal[CPE_CHANNELS]; - float *powerSpec = orig_spectrum_long[0]; - float *mdst_spectrum[CPE_CHANNELS][NB_DIV]; - float nrg; Encoder_State *st, **sts; - float scf[CPE_CHANNELS][NB_DIV][M]; - float scf_q[CPE_CHANNELS][NB_DIV][M]; - float chE[2], chE_tot; - int8_t sns_low_br_mode; - int16_t nbits_start_sns; - int16_t num_sns; - int8_t skipped_first_channel; - int16_t zero_side_flag[NB_DIV]; - - push_wmops( "mdct_core_whitening" ); - - /*--------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - sts = hCPE->hCoreCoder; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - stereo_tcx_init_enc( sts[ch] ); - - set_s( tnsSize[ch], 0, 2 ); - set_s( tnsBits[ch], 0, 2 ); - ltpBits[ch] = 0; - - for ( i = 0; i < 3; i++ ) - { - T_op[ch][i] = sts[ch]->pitch[i]; - - /* check minimum pitch for quantization */ - if ( T_op[ch][i] < PIT_MIN_SHORTER ) - { - T_op[ch][i] *= 2; - } - } - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - orig_spectrum[ch][0] = orig_spectrum_long[ch]; - orig_spectrum[ch][1] = orig_spectrum_long[ch] + N_TCX10_MAX; - mdst_spectrum[ch][0] = mdst_spectrum_long[ch]; - mdst_spectrum[ch][1] = mdst_spectrum_long[ch] + N_TCX10_MAX; - } - - windowedSignal[0] = orig_spectrum_long[0]; /* NOTE temporarily available */ - windowedSignal[1] = temp_buffer; /* orig_spectrum_long isn't long enough */ - - /*--------------------------------------------------------------* - * TCX20/TCX10 switching decision - *---------------------------------------------------------------*/ - - if ( mct_on ) - { - sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ - sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt = sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt + sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt ); - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); - } - } - - sts[0]->core = sts[0]->hTcxEnc->tcxMode; - sts[1]->core = sts[1]->hTcxEnc->tcxMode; - - /*--------------------------------------------------------------* - * Core Signal Analysis: MDCT, TNS - *---------------------------------------------------------------*/ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels ) - { - continue; - } - SetCurrentPsychParams( st->core, 0, st->hTcxCfg ); - - /* tcx ltp analysis on the 12.8kHz weighted speech, saves preproc resampling to sr_core */ - tcx_ltp_encode( st, st->hTcxEnc->tcxMode, L_FRAME, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, NULL, old_wsp[ch] + L_WSP_MEM + L_LOOK_12k8, T_op[ch], ¶m_core[ch][1 + NOISE_FILL_RANGES], <pBits[ch], NULL, 0, IVAS_CPE_MDCT ); - - core_signal_analysis_high_bitrate( new_samples[ch] + L_INP_MEM, T_op[ch], NULL, NULL, st, mdst_spectrum[ch], tnsSize[ch], tnsBits[ch], param_core[ch], <pBits[ch], windowedSignal[ch], st->L_frame, st->hTcxEnc->L_frameTCX, hCPE->last_element_mode, 0 ); - - /* BWD in MDCT domain */ - if ( st->hTcxCfg->tcx_last_overlap_mode != TRANSITION_OVERLAP ) - { - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - bw_detect( st, NULL, st->hTcxEnc->spectrum[n], NULL, MC_FORMAT /*just cannot be ISM_FORMAT*/, mct_on ); - - if ( nSubframes == NB_DIV && n == 0 ) - { - st->last_input_bwidth = st->input_bwidth; - } - } - } - - if ( st->last_core == ACELP_CORE ) /* reset past kernel info */ - { - st->hTcxEnc->kernel_switch_corr_past_flt = 0.f; - st->hTcxEnc->kernel_symmetry_past = 0; - } - } - - /*--------------------------------------------------------------* - * Transform Kernel Switching, Stereo Pre-Processing, and TNS - *---------------------------------------------------------------*/ - - sts[0]->hTcxEnc->fUseTns[1] = 0; - - if ( sts[0]->element_brate < IVAS_80k && sts[0]->core == sts[1]->core && sts[0]->element_mode == IVAS_CPE_MDCT && !mct_on && !hCPE->hStereoMdct->isSBAStereoMode ) - { - int16_t nSampCore; - int32_t totalRate; - TCX_ENC_HANDLE hTcxEnc0, hTcxEnc1; - - nSampCore = ( sts[0]->igf ) ? max( sts[0]->hIGFEnc->infoStartLine, sts[1]->hIGFEnc->infoStartLine ) : 0; - totalRate = sts[0]->element_brate; - hTcxEnc0 = sts[0]->hTcxEnc; - hTcxEnc1 = sts[1]->hTcxEnc; - - init_tcx_enc_info( sts[0], &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); - - if ( nSampCore == 0 ) - { - nSampCore = tcx_subframe_coded_lines; - } - - nrg = 0.25f * ( hTcxEnc0->tcxltp_norm_corr_past_flt + hTcxEnc0->tcxltp_norm_corr_mem_flt + /* tcxltp_norm_corr_past already contains the */ - hTcxEnc1->tcxltp_norm_corr_past_flt + hTcxEnc1->tcxltp_norm_corr_mem_flt ); /* normalized correlation of the current frame */ - - L_subframe = max( 512, L_subframe ); - nSubframes = ( hTcxEnc0->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - if ( hTcxEnc0->transform_type[n] == hTcxEnc1->transform_type[n] ) - { - const int16_t switchKernel = /* these 4 transform types can be applied: 0 = MDCT-IV, 1 = MDST-II, 2 = MDCT-II, 3 = MDST-IV */ - kernel_switch_detect( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / nSubframes, - L_subframeTCX / nSubframes, hTcxEnc0->transform_type[n], &hTcxEnc0->kernel_switch_corr_past_flt, ( totalRate * L_subframe ) / nSubframes ); - if ( switchKernel ) /* apply MDST-IV coding in one of the channels */ - { - hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 3 : 1 ) - max( 0, switchKernel ); - hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 2 : 0 ) + max( 0, switchKernel ); - } - else /* switchKernel == 0, switch back to MDCT-IV in both channels */ - { - hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 2 : 0 ); - hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 2 : 0 ); - } - } - else - { - hTcxEnc0->kernel_switch_corr_past_flt = 0.f; /* don't update the kernel switching state, postpone it to when data is available */ - hTcxEnc0->kernel_type[n] = ( hTcxEnc0->kernel_symmetry_past ? 3 : 0 ); - hTcxEnc1->kernel_type[n] = ( hTcxEnc1->kernel_symmetry_past ? 3 : 0 ); - } - hTcxEnc0->kernel_symmetry_past = hTcxEnc0->kernel_type[n] & 1; - hTcxEnc1->kernel_symmetry_past = hTcxEnc1->kernel_type[n] & 1; - - kernel_switch_update_transforms( hTcxEnc0->spectrum[n], mdst_spectrum[0][n], hTcxEnc0->transform_type[n], sts[0]->hTcxCfg, sts[0]->bwidth_sw_cnt, hTcxEnc0->kernel_type[n], - hTcxEnc0->new_speech_TCX_flt, ( n == 1 ? NULL : hTcxEnc0->speech_TCX_flt ), windowedSignal[0] + n * L_FRAME48k, L_subframeTCX / nSubframes ); - kernel_switch_update_transforms( hTcxEnc1->spectrum[n], mdst_spectrum[1][n], hTcxEnc1->transform_type[n], sts[1]->hTcxCfg, sts[1]->bwidth_sw_cnt, hTcxEnc1->kernel_type[n], - hTcxEnc1->new_speech_TCX_flt, ( n == 1 ? NULL : hTcxEnc1->speech_TCX_flt ), windowedSignal[1] + n * L_FRAME48k, L_subframeTCX / nSubframes ); - } - for ( n = 0; n < nSubframes; n++ ) - { - if ( hTcxEnc0->transform_type[n] == hTcxEnc1->transform_type[n] && /* do not combine TCX-5 and TCX-10 as this causes artifacts */ - sts[0]->hTcxCfg->tcx_curr_overlap_mode == sts[1]->hTcxCfg->tcx_curr_overlap_mode && - sts[0]->hTcxCfg->tcx_last_overlap_mode == sts[1]->hTcxCfg->tcx_last_overlap_mode ) - { - if ( hTcxEnc0->transform_type[n] == TCX_5 ) - { - const int16_t tcx5SizeFB = sts[1]->hTcxCfg->tcx5SizeFB; - - hTcxEnc0->enc_ste_pre_corr_past = - enc_ste_pre_mdct( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / ( 2 * NB_DIV ), - L_subframeTCX / ( 2 * NB_DIV ), ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / ( 2 * NB_DIV ) ); - - hTcxEnc0->enc_ste_pre_corr_past = - enc_ste_pre_mdct( hTcxEnc0->spectrum[n] + tcx5SizeFB, hTcxEnc1->spectrum[n] + tcx5SizeFB, mdst_spectrum[0][n] + tcx5SizeFB, mdst_spectrum[1][n] + tcx5SizeFB, nSampCore / ( 2 * NB_DIV ), - L_subframeTCX / ( 2 * NB_DIV ), ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / ( 2 * NB_DIV ) ); - } - else - { - hTcxEnc0->enc_ste_pre_corr_past = - enc_ste_pre_mdct( hTcxEnc0->spectrum[n], hTcxEnc1->spectrum[n], mdst_spectrum[0][n], mdst_spectrum[1][n], nSampCore / nSubframes, - L_subframeTCX / nSubframes, ( nrg > MAX_STE_PRE_NRG ? 1 : 0 ), hTcxEnc0->enc_ste_pre_corr_past, ( totalRate * L_subframe ) / nSubframes ); - } - } - else - { - hTcxEnc0->enc_ste_pre_corr_past = 0; - } - } - } - else - { - sts[0]->hTcxEnc->enc_ste_pre_corr_past = 0; - sts[0]->hTcxEnc->kernel_switch_corr_past_flt = 0.f; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - TCX_ENC_HANDLE hTcxEncCh = sts[ch]->hTcxEnc; - - if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels ) - { - hTcxEncCh->kernel_symmetry_past = hTcxEncCh->kernel_type[0] = 0; - - continue; - } - - init_tcx_enc_info( sts[ch], &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); - nSubframes = ( hTcxEncCh->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - hTcxEncCh->kernel_type[n] = ( hTcxEncCh->kernel_symmetry_past && sts[ch]->element_mode == IVAS_CPE_MDCT ? 3 - mct_on : 0 ); - hTcxEncCh->kernel_symmetry_past = hTcxEncCh->kernel_type[n] & 1; - - kernel_switch_update_transforms( hTcxEncCh->spectrum[n], mdst_spectrum[ch][n], hTcxEncCh->transform_type[n], sts[ch]->hTcxCfg, sts[ch]->bwidth_sw_cnt, hTcxEncCh->kernel_type[n], - hTcxEncCh->new_speech_TCX_flt, ( n /*1*/ ? NULL : hTcxEncCh->speech_TCX_flt ), windowedSignal[ch] + n * L_FRAME48k, L_subframeTCX / nSubframes ); - } - } - } - - TNSAnalysisStereo( sts, mdst_spectrum, 0, tnsSize, tnsBits, param_core, mct_on ); - - /*--------------------------------------------------------------* - * Envelope Quantization and FDNS - *---------------------------------------------------------------*/ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels ) - { - continue; - } - - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - if ( mct_on ) - { - set_zero( chE, NB_DIV ); - } - - init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); - - L_subframe = L_subframe / nSubframes; - L_subframeTCX = ( mct_on ? L_subframeTCX / nSubframes : L_subframe ); - tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; - - for ( n = 0; n < nSubframes; n++ ) - { - if ( st->hTcxEnc->fUseTns[n] ) - { - for ( i = 0; i < L_subframeTCX; i++ ) - { - powerSpec[i] = ( st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i] ); - } - } - else - { - for ( i = 0; i < L_subframeTCX; i++ ) - { - powerSpec[i] = ( mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i] ); - } - } - - if ( mct_on ) - { - chE[n] = sum_f( powerSpec, L_subframeTCX ); - } - - sns_compute_scf( powerSpec, st->hTcxCfg->psychParamsCurrent, st->L_frame, scf[ch][n] ); - } - - /* MCT: detect whether there are silent channels and set mct_chan_mode accordingly */ - if ( mct_on ) - { - chE_tot = sum_f( chE, NB_DIV ); - - if ( chE_tot < SILENT_CHANNEL_THRES && nSubframes == 1 ) - { - st->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - st->bits_frame_channel = 0; - } - else - { - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - } - } - } - - /* set low br mode, if possible. Can later be discarded, depending on the stereo mode used for SNS parameter decoding */ - if ( hCPE->element_brate == IVAS_48k && !( ( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) ) - { - sns_low_br_mode = !sts[0]->sp_aud_decision0; - } - else - { - sns_low_br_mode = 0; - } - - if ( !mct_on && sts[0]->sr_core == 25600 && ( ( hCPE->element_brate == IVAS_48k || hCPE->element_brate == IVAS_64k ) ) ) - { - quantize_sns( scf, scf_q, sts, sns_vq_indices, zero_side_flag, sns_stereo_mode ); - } - else - { - if ( sts[0]->hTcxEnc->tcxMode == TCX_20 && sts[1]->hTcxEnc->tcxMode == TCX_20 && - sts[0]->mct_chan_mode == MCT_CHAN_MODE_REGULAR && sts[1]->mct_chan_mode == MCT_CHAN_MODE_REGULAR ) - { - sns_avq_cod_stereo( scf[0][0], scf[1][0], sts[0]->L_frame, scf_q[0][0], scf_q[1][0], param_lpc[0], param_lpc[1] ); - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - param_lpc[ch][0] = ch; - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - st = sts[ch]; - if ( st->hTcxEnc->tcxMode == TCX_20 ) - { - sns_avq_cod( scf[ch][0], NULL, scf_q[ch][0], NULL, ¶m_lpc[ch][1], st->hTcxEnc->tcxMode, st->L_frame, sns_low_br_mode ); - } - else - { - sns_avq_cod( scf[ch][1], scf[ch][0], scf_q[ch][1], scf_q[ch][0], ¶m_lpc[ch][1], st->hTcxEnc->tcxMode, st->L_frame, sns_low_br_mode ); - } - } - } - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); - - L_subframe = L_subframe / nSubframes; - L_subframeTCX = L_subframeTCX / nSubframes; - tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; - - for ( n = 0; n < nSubframes; n++ ) - { - mvr2r( st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], L_subframeTCX ); - - /* Shape spectrum */ - ShapeSpectrum( st->hTcxCfg, A_q[ch][n], NULL, L_subframe, tcx_subframe_coded_lines, st->hTcxEnc->spectrum[n], st->hTcxEnc->fUseTns[n], st, scf_q[ch][n] ); - } - } - - /*--------------------------------------------------------------* - * TNS - *---------------------------------------------------------------*/ - - /* first deinterleave once more */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - if ( st->hTcxEnc->transform_type[n] == TCX_5 ) - { - tcx5SpectrumDeinterleaving( st->hTcxCfg->tcx5SizeFB, st->hTcxEnc->spectrum[n] ); - tcx5SpectrumDeinterleaving( st->hTcxCfg->tcx5SizeFB, mdst_spectrum[ch][n] ); - } - } - } - - TNSAnalysisStereo( sts, mdst_spectrum, 1, tnsSize, tnsBits, param_core, mct_on ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - if ( sts[ch]->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - init_tcx_enc_info( st, &L_subframe, &L_subframeTCX, &tcx_subframe_coded_lines ); - - L_subframe = L_subframe / nSubframes; - L_subframeTCX = L_subframeTCX / nSubframes; - tcx_subframe_coded_lines = tcx_subframe_coded_lines / nSubframes; - - for ( n = 0; n < nSubframes; n++ ) - { - if ( !st->hTcxEnc->fUseTns[n] ) - { - ShapeSpectrum( st->hTcxCfg, A_q[ch][n], NULL, L_subframe, tcx_subframe_coded_lines, mdst_spectrum[ch][n], st->hTcxEnc->fUseTns[n], st, scf_q[ch][n] ); - } - } - } - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - /*no need to write last channel bit in case of odd channels*/ - if ( ( hCPE->cpe_id * CPE_CHANNELS + ch ) >= nChannels ) - { - continue; - } - - st = sts[ch]; - - if ( mct_on ) /* signal bits should be written only for MCT*/ - { - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - push_next_indice( hBstr, 1, 1 ); - } - else - { - assert( st->mct_chan_mode == MCT_CHAN_MODE_REGULAR ); - push_next_indice( hBstr, 0, 1 ); - } - } - } - - /* write bitstream with info up to here */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - st->side_bits_frame_channel = 0; - /*dummy initialization to prevent range coder crashing in case all channels are silent and bits are distributed to channel 0 */ - *p_param[ch] = 1 + NOISE_FILL_RANGES + LTPSIZE + tnsSize[ch][0] + NPRM_CTX_HM; - continue; - } - - enc_prm_pre_mdct( st, param_core[ch], ( ( ( ch > 0 ) && ( sts[0]->hTcxEnc->fUseTns[0] + sts[0]->hTcxEnc->fUseTns[1] > 0 ) && !mct_on ) ? tnsSize[ch] : NULL ), p_param[ch], mct_on, hBstr ); - - if ( ch > 0 && sts[0]->hTcxEnc->fUseTns[0] + sts[0]->hTcxEnc->fUseTns[1] > 0 && !mct_on ) - { - if ( st->hTcxEnc->tnsData[0].nFilters < 0 ) - { - tnsBits[ch][0] = 1; - } - else - { - tnsBits[ch][0]++; - } - - if ( st->core == TCX_10_CORE ) - { - if ( st->hTcxEnc->tnsData[1].nFilters < 0 ) - { - tnsBits[ch][1] = 1; - } - else - { - tnsBits[ch][1]++; - } - } - } - } - - /*--------------------------------------------------------------------------------* - * SNS parameters - *--------------------------------------------------------------------------------*/ - - if ( !mct_on && sts[0]->sr_core == 25600 && ( ( hCPE->element_brate == IVAS_48k || hCPE->element_brate == IVAS_64k ) ) ) - { - idx = 0; - - if ( sts[0]->core == sts[1]->core ) - { - nSubframes = ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV; - - /* push all stereo mode bits first */ - for ( n = 0; n < nSubframes; ++n ) - { - push_next_indice( hBstr, sns_stereo_mode[n], 1 ); - sts[0]->side_bits_frame_channel++; - } - - /* zero side flags only get transmitted if needed */ - for ( n = 0; n < nSubframes; ++n ) - { - if ( sns_stereo_mode[n] == SNS_STEREO_MODE_MS ) - { - push_next_indice( hBstr, zero_side_flag[n], 1 ); - sts[0]->side_bits_frame_channel++; - } - } - } - - for ( ch = 0; ch < CPE_CHANNELS; ++ch ) - { - st = sts[ch]; - nbits_start_sns = hBstr->nb_bits_tot; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - for ( n = 0; n < nSubframes; ++n ) - { - const int16_t is_side = ch == 1 && sns_stereo_mode[n] == SNS_STEREO_MODE_MS; - const int16_t *bits = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20_bits : ivas_sns_cdbks_tcx10_bits; - int16_t nStages = ( ( nSubframes == 1 ) ? SNS_MSVQ_NSTAGES_TCX20 : SNS_MSVQ_NSTAGES_TCX10 ); - - if ( is_side ) - { - if ( zero_side_flag[n] ) - { - continue; - } - nStages = SNS_MSVQ_NSTAGES_SIDE; - bits = ( sts[ch]->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20_bits : ivas_sns_cdbks_side_tcx10_bits; - } - for ( int16_t j = 0; j < nStages; ++j, ++idx ) - { - push_next_indice( hBstr, sns_vq_indices[idx], bits[j] ); - } - } - st->side_bits_frame_channel += hBstr->nb_bits_tot - nbits_start_sns; - } - } - else - { - /* write SNS parameter separately since at the decoder, both channels' cores need to be decoded before, so the joint SNS decoding can be done */ - skipped_first_channel = 0; - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - skipped_first_channel = 1; - continue; - } - - nbits_start_sns = hBstr->nb_bits_tot; - - num_sns = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - - if ( ch == 0 || skipped_first_channel ) - { - push_next_indice( hBstr, param_lpc[0][0] >> 1, 1 ); - - if ( st->element_brate == IVAS_48k && !( ( sts[0]->core == TCX_20 && sts[1]->core == TCX_20 ) ) ) - { - /* write classifier decision to signal low br mode for SNS encoding, for all other configs, low_br mode is not possible */ - push_next_indice( hBstr, sns_low_br_mode, 1 ); - } - } - encode_lpc_avq( hBstr, num_sns, param_lpc[ch], st->core, st->element_mode ); - - st->side_bits_frame_channel += hBstr->nb_bits_tot - nbits_start_sns; - } - } - - - /*update pitch buffer*/ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - if ( param_core[ch][1 + NOISE_FILL_RANGES] != 0 ) - { - set_f( pitch_buf[ch], ( st->hTcxEnc->tcxltp_pitch_int + (float) st->hTcxEnc->tcxltp_pitch_fr / (float) st->pit_res_max ) * (float) st->sr_core / (float) INT_FS_12k8, NB_SUBFR16k ); - } - else - { - set_f( pitch_buf[ch], L_SUBFR, NB_SUBFR16k ); - } - } - - pop_wmops(); - return; -} - - -/*--------------------------------------------------------------* - * ivas_mdct_quant_coder() - * - * Spectrum quantization and coding - *---------------------------------------------------------------*/ - -void ivas_mdct_quant_coder( - CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ - int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ - int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ - int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - Encoder_State *st, **sts; - Word16 bitsAvailable, target_bits, nSubframes, ch, n; - Word16 L_frameTCX[CPE_CHANNELS][NB_DIV]; /* full frame length */ - Word16 L_frame[CPE_CHANNELS][NB_DIV]; /* frame length */ - Word16 L_spec[CPE_CHANNELS][NB_DIV]; /* length of the coded spectrum */ - Word16 tcx_offset[CPE_CHANNELS][NB_DIV]; /* folding point offset relative to the end of the previous frame */ - Word16 noiseFillingBorder[CPE_CHANNELS][NB_DIV]; /* noise filling border */ - Word16 nf_seed[CPE_CHANNELS][NB_DIV]; /* noise filling random seed */ - Word16 hm_active[CPE_CHANNELS][NB_DIV]; /* flag indicating if the harmonic model is active */ - float fac_ns[CPE_CHANNELS][NB_DIV]; /* noise filling level */ - float ener[CPE_CHANNELS][NB_DIV]; /* energy of the quantized spectrum */ - float gain_tcx[CPE_CHANNELS][NB_DIV]; /* global gain */ - float quantized_spectrum_long[CPE_CHANNELS][N_MAX]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ - float *quantized_spectrum[CPE_CHANNELS][NB_DIV]; - Word16 param_core[CPE_CHANNELS][2 * NPRM_DIV]; - Word16 ignore_chan[CPE_CHANNELS]; - Word16 target_bitsTCX10[CPE_CHANNELS][NB_DIV]; - Word16 nbits_start, total_nbbits; - push_wmops( "mdct_core_Q" ); - sts = hCPE->hCoreCoder; - - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - set_f( fac_ns[ch], 0.0f, NB_DIV ); - set_f( ener[ch], 0.0f, NB_DIV ); - set_f( gain_tcx[ch], 0.0f, NB_DIV ); - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - quantized_spectrum[ch][0] = quantized_spectrum_long[ch]; - quantized_spectrum[ch][1] = quantized_spectrum_long[ch] + N_TCX10_MAX; - - st = sts[ch]; - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - ignore_chan[ch] = 1; - continue; - } - - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - ignore_chan[ch] = 0; - - bitsAvailable = st->bits_frame_channel + nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ) + tnsBits[ch][0] + tnsBits[ch][1]; - - /* calculate TCX10 target bits before to assure minimum amount is distributed between subframes */ - if ( st->hTcxEnc->tcxMode == TCX_10 ) - { - int16_t nTnsBitsTCX10Tmp[2]; - nTnsBitsTCX10Tmp[0] = tnsBits[ch][0]; - nTnsBitsTCX10Tmp[1] = tnsBits[ch][1]; - - ivas_mdct_tcx10_bit_distribution( target_bitsTCX10[ch], bitsAvailable, nTnsBitsTCX10Tmp ); - } - - for ( n = 0; n < nSubframes; n++ ) - { - if ( nSubframes == 2 ) - { - target_bits = target_bitsTCX10[ch][n]; - } - else - { - target_bits = bitsAvailable / nSubframes - tnsBits[ch][n]; - } - - assert( target_bits >= NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ); - - /*-----------------------------------------------------------* - * Quantize the MDCT spectrum * - *-----------------------------------------------------------*/ - - QuantizeTCXSpectrum( st, n, st->hTcxEnc->spectrum[n], NULL, NULL, tnsSize[ch][n], target_bits, 0, &L_frameTCX[ch][n], - &L_frame[ch][n], &L_spec[ch][n], &tcx_offset[ch][n], &noiseFillingBorder[ch][n], quantized_spectrum[ch][n], NULL, - &hm_active[ch][n], NULL, &nf_seed[ch][n], &ener[ch][n], &gain_tcx[ch][n], param_core[ch] + n * NPRM_DIV ); - } - } - - EstimateStereoTCXNoiseLevel( sts, quantized_spectrum, gain_tcx, L_frame, noiseFillingBorder, hm_active, ignore_chan, fac_ns, param_core, MCT_flag ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - /* update the pointer to the buffer of indices of the second channel */ - if ( ch > 0 ) - { - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - /*Enable appropriate upadte of tcx_curr_overlap_mode even for uncoded channel index 1*/ - L_frameTCX[ch][0] = ( st->core == TCX_10_CORE ) ? st->hTcxEnc->L_frameTCX >> 1 : st->hTcxEnc->L_frameTCX; - L_frameTCX[ch][1] = ( st->core == TCX_10_CORE ) ? st->hTcxEnc->L_frameTCX >> 1 : st->hTcxEnc->L_frameTCX; - - L_frame[ch][0] = st->L_frame; - L_frame[ch][1] = st->L_frame; - } - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - /* Update L_frame_past */ - st->L_frame_past = L_frame[ch][n]; - - /* Update overlap */ - if ( ( ( ( L_frameTCX[ch][n] == st->hTcxEnc->L_frameTCX >> 1 ) && n > 0 ) || ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) ) && ( st->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) - { - st->hTcxCfg->tcx_curr_overlap_mode = ALDO_WINDOW; - } - } - - /*--------------------------------------------------------------* - * Generate Bitstream - *---------------------------------------------------------------*/ - - if ( st->mct_chan_mode == MCT_CHAN_MODE_IGNORE ) - { - continue; - } - nbits_start = st->hBstr->nb_bits_tot; - - writeTCXparam( st, st->hBstr, NULL, param_core[ch], 0, 0, 0, NULL, p_param[ch], target_bitsTCX10[ch], 1 ); - - total_nbbits = st->hBstr->nb_bits_tot - nbits_start - nSubframes * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL ); - - assert( st->bits_frame_channel == total_nbbits ); - } - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -void ivas_mdct_quant_coder_fx( - CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ - Word16 tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ - Word16 tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ - Word16 p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ - const Word16 MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - Encoder_State *st, **sts; - Word16 bitsAvailable, target_bits, nSubframes, ch, n; - Word16 L_frameTCX[CPE_CHANNELS][NB_DIV]; /* full frame length */ - Word16 L_frame[CPE_CHANNELS][NB_DIV]; /* frame length */ - Word16 L_spec[CPE_CHANNELS][NB_DIV]; /* length of the coded spectrum */ - Word16 tcx_offset[CPE_CHANNELS][NB_DIV]; /* folding point offset relative to the end of the previous frame */ - Word16 noiseFillingBorder[CPE_CHANNELS][NB_DIV]; /* noise filling border */ - Word16 nf_seed[CPE_CHANNELS][NB_DIV]; /* noise filling random seed */ - Word16 hm_active[CPE_CHANNELS][NB_DIV]; /* flag indicating if the harmonic model is active */ - Word16 param_core[CPE_CHANNELS][2 * NPRM_DIV]; - Word16 ignore_chan[CPE_CHANNELS]; - Word16 target_bitsTCX10[CPE_CHANNELS][NB_DIV]; - Word16 nbits_start, total_nbbits; + Word16 bitsAvailable, target_bits, nSubframes, ch, n; + Word16 L_frameTCX[CPE_CHANNELS][NB_DIV]; /* full frame length */ + Word16 L_frame[CPE_CHANNELS][NB_DIV]; /* frame length */ + Word16 L_spec[CPE_CHANNELS][NB_DIV]; /* length of the coded spectrum */ + Word16 tcx_offset[CPE_CHANNELS][NB_DIV]; /* folding point offset relative to the end of the previous frame */ + Word16 noiseFillingBorder[CPE_CHANNELS][NB_DIV]; /* noise filling border */ + Word16 nf_seed[CPE_CHANNELS][NB_DIV]; /* noise filling random seed */ + Word16 hm_active[CPE_CHANNELS][NB_DIV]; /* flag indicating if the harmonic model is active */ + Word16 param_core[CPE_CHANNELS][2 * NPRM_DIV]; + Word16 ignore_chan[CPE_CHANNELS]; + Word16 target_bitsTCX10[CPE_CHANNELS][NB_DIV]; + Word16 nbits_start, total_nbbits; Word16 fac_ns_fx[CPE_CHANNELS][NB_DIV]; /* noise filling level */ Word32 ener_fx[CPE_CHANNELS][NB_DIV]; /* energy of the quantized spectrum */ @@ -3993,9 +2726,7 @@ void ivas_mdct_quant_coder_fx( pop_wmops(); return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------* * init_tcx_enc_info_fx() * @@ -4043,42 +2774,3 @@ void init_tcx_enc_info_fx( return; } -#else -/*--------------------------------------------------------------* - * init_tcx_enc_info() - * - * Initialize TCX parameters - *---------------------------------------------------------------*/ - -void init_tcx_enc_info( - Encoder_State *st, /* i/o: coder memory state */ - int16_t *L_frame, - int16_t *L_frameTCX, - int16_t *L_spec ) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - TCX_CONFIG_HANDLE hTcxCfg = st->hTcxCfg; - int16_t tcx_offset, tcx_offsetFB; - - /* Init lengths */ - tcx_offset = hTcxCfg->tcx_offset; - tcx_offsetFB = hTcxCfg->tcx_offsetFB; - *L_frame = st->L_frame; - *L_frameTCX = hTcxEnc->L_frameTCX; - *L_spec = st->hTcxCfg->tcx_coded_lines; - - if ( st->last_core == ACELP_CORE ) - { - /* if past frame is ACELP */ - *L_frame += tcx_offset; - *L_frameTCX += tcx_offsetFB; - *L_spec += st->hTcxCfg->tcx_coded_lines >> 2; - - assert( hTcxCfg->lfacNext <= 0 ); - *L_frame -= hTcxCfg->lfacNext; - *L_frameTCX -= hTcxCfg->lfacNextFB; - } - - return; -} -#endif diff --git a/lib_enc/ivas_omasa_enc.c b/lib_enc/ivas_omasa_enc.c index 62334813d..aae7e058e 100644 --- a/lib_enc/ivas_omasa_enc.c +++ b/lib_enc/ivas_omasa_enc.c @@ -50,7 +50,6 @@ /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_param_est_enc_fx( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, @@ -66,11 +65,7 @@ static void ivas_omasa_param_est_enc_fx( const Word16 nchan_ism, Word16 q_data /*i: Qfactor for data*/ ); -#else -static void ivas_omasa_param_est_enc( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, ISM_METADATA_HANDLE hIsmMeta[], float *data_f[], float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float energyRatio[MASA_FREQUENCY_BANDS], float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float surroundingCoherence[MASA_FREQUENCY_BANDS], float diffuseness_m[MASA_FREQUENCY_BANDS], const int16_t input_frame, const int16_t nchan_inp ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_energy_and_ratio_est_fx( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, @@ -78,13 +73,7 @@ static void ivas_omasa_energy_and_ratio_est_fx( const Word16 input_frame, const Word16 nchan_ism, const Word16 q_data ); -#else -static void ivas_omasa_energy_and_ratio_est( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, float *data_f[], const int16_t input_frame, const int16_t nchan_inp ); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -static void ivas_omasa_dmx( float *data_in_f[], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_transport, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][MASA_MAX_TRANSPORT_CHANNELS], const float interpolator[L_FRAME48k] ); -#else static void ivas_omasa_dmx_fx( Word32 *data_in[], /*i:Qx*/ Word32 data_out[][L_FRAME48k], /*i:Qx*/ @@ -95,8 +84,6 @@ static void ivas_omasa_dmx_fx( Word16 prev_gains[][MASA_MAX_TRANSPORT_CHANNELS], /*o:q15*/ const Word16 interpolator[L_FRAME48k] /*i:q15*/ ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void computeIntensityVector_enc_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ @@ -104,21 +91,13 @@ static void computeIntensityVector_enc_fx( const Word16 num_frequency_bands, /* i : Number of frequency bands */ Word32 intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS], /* o : Intensity vector */ Word16 guard_bits ); -#else -static void computeIntensityVector_enc( const int16_t *band_grouping, float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], const int16_t num_frequency_bands, float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -static void computeReferencePower_omasa( const int16_t *band_grouping, float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], float *reference_power, const int16_t enc_param_start_band, const int16_t num_freq_bands ); -#else static void computeReferencePower_omasa_ivas_fx( const Word16 *band_grouping, Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], Word32 Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], Word32 *reference_power, const Word16 enc_param_start_band, const Word16 num_freq_bands, Word16 q_Cldfb, Word16 *ref_exp ); -#endif /*--------------------------------------------------------------------------* * ivas_omasa_enc_open() * * Allocate and initialize OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_omasa_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -228,135 +207,6 @@ ivas_error ivas_omasa_enc_open_fx( return error; } -#else -ivas_error ivas_omasa_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i, j; - OMASA_ENC_HANDLE hOMasa; - int16_t numAnalysisChannels; - int16_t input_frame; - ivas_error error; - - error = IVAS_ERR_OK; - - assert( st_ivas->hMasa != NULL && "MASA encoder handle is not present" ); - - if ( ( hOMasa = (OMASA_ENC_HANDLE) malloc( sizeof( OMASA_ENC_STATE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA encoder\n" ) ); - } - - numAnalysisChannels = st_ivas->hEncoderConfig->nchan_ism; - - /* open/initialize CLDFB */ - hOMasa->num_Cldfb_instances = numAnalysisChannels; - for ( i = 0; i < hOMasa->num_Cldfb_instances; i++ ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &( hOMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, st_ivas->hEncoderConfig->input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &( hOMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, st_ivas->hEncoderConfig->input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } -#ifdef IVAS_FLOAT_FIXED - set_zero_fx( &hOMasa->chnlToFoaMtx_fx[0][0], DIRAC_MAX_ANA_CHANS * MCMASA_MAX_ANA_CHANS ); -#ifdef IVAS_FLOAT_FIXED_TO_BE_REMOVED - set_zero( &hOMasa->chnlToFoaMtx[0][0], DIRAC_MAX_ANA_CHANS * MCMASA_MAX_ANA_CHANS ); -#endif // IVAS_FLOAT_FIXED_TO_BE_REMOVED -#endif - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { -#ifdef IVAS_FLOAT_FIXED - hOMasa->direction_vector_m_fx[i] = (Word32 **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( Word32 * ) ); - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hOMasa->direction_vector_m_fx[i][j] = (Word32 *) malloc( MASA_FREQUENCY_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero_fx( hOMasa->direction_vector_m_fx[i][j], MASA_FREQUENCY_BANDS ); - } - hOMasa->direction_vector_e[i] = (Word16 **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( Word16 * ) ); - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hOMasa->direction_vector_e[i][j] = (Word16 *) malloc( MASA_FREQUENCY_BANDS * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set16_fx( hOMasa->direction_vector_e[i][j], 0, MASA_FREQUENCY_BANDS ); - } -#endif // IVAS_FLOAT_FIXED - hOMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ); - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero( hOMasa->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); - } - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { -#ifdef IVAS_FLOAT_FIXED - IF( ( hOMasa->buffer_intensity_real_fx[i][j] = (Word32 *) malloc( MASA_FREQUENCY_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero_fx( hOMasa->buffer_intensity_real_fx[i][j], MASA_FREQUENCY_BANDS ); -#endif // IVAS_FLOAT_FIXED - if ( ( hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero( hOMasa->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); - } - } -#ifdef IVAS_FLOAT_FIXED - set16_fx( hOMasa->buffer_intensity_real_q, 31, DIRAC_NO_COL_AVG_DIFF ); - set_zero_fx( hOMasa->buffer_energy_fx, DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS ); - set16_fx( hOMasa->buffer_energy_q, 31, DIRAC_NO_COL_AVG_DIFF ); -#endif // IVAS_FLOAT_FIXED - - set_zero( hOMasa->buffer_energy, DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS ); - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - set_f( hOMasa->prev_object_dm_gains[i], INV_SQRT_2, MASA_MAX_TRANSPORT_CHANNELS ); - } - set_zero( hOMasa->broadband_energy_sm, MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS ); - set_zero( hOMasa->broadband_energy_prev, MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS ); - hOMasa->prev_selected_object = 0; - hOMasa->changing_object = 0; - - input_frame = (int16_t) ( st_ivas->hEncoderConfig->input_Fs / FRAMES_PER_SEC ); - for ( i = 0; i < input_frame; i++ ) - { - hOMasa->interpolator[i] = ( (float) i ) / ( (float) input_frame ); - hOMasa->fade_out_gain[i] = ( 1.0f + cosf( ( (float) i ) / ( (float) input_frame ) * EVS_PI ) ) / 2.0f; - hOMasa->fade_in_gain[i] = 1.0f - hOMasa->fade_out_gain[i]; - } - - hOMasa->index_buffer_intensity = 0; - - st_ivas->hOMasa = hOMasa; - - return error; -} -#endif /*--------------------------------------------------------------------------* * ivas_omasa_enc_close() @@ -364,7 +214,6 @@ ivas_error ivas_omasa_enc_open( * Close OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_enc_close_fx( OMASA_ENC_HANDLE *hOMasa /* i/o: encoder OMASA handle */ @@ -409,67 +258,12 @@ void ivas_omasa_enc_close_fx( return; } -#else -void ivas_omasa_enc_close( - OMASA_ENC_HANDLE *hOMasa /* i/o: encoder OMASA handle */ -) -{ - int16_t i, j; - - if ( hOMasa == NULL || *hOMasa == NULL ) - { - return; - } - - for ( i = 0; i < ( *hOMasa )->num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hOMasa )->cldfbAnaEnc[i] ) ); - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { -#ifdef IVAS_FLOAT_FIXED - free( ( *hOMasa )->direction_vector_m_fx[i][j] ); - ( *hOMasa )->direction_vector_m_fx[i][j] = NULL; - free( ( *hOMasa )->direction_vector_e[i][j] ); - ( *hOMasa )->direction_vector_e[i][j] = NULL; -#endif // IVAS_FLOAT_FIXED - free( ( *hOMasa )->direction_vector_m[i][j] ); - ( *hOMasa )->direction_vector_m[i][j] = NULL; - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { -#ifdef IVAS_FLOAT_FIXED - free( ( *hOMasa )->buffer_intensity_real_fx[i][j] ); - ( *hOMasa )->buffer_intensity_real_fx[i][j] = NULL; -#endif // IVAS_FLOAT_FIXED - free( ( *hOMasa )->buffer_intensity_real[i][j] ); - ( *hOMasa )->buffer_intensity_real[i][j] = NULL; - } -#ifdef IVAS_FLOAT_FIXED - free( ( *hOMasa )->direction_vector_m_fx[i] ); - ( *hOMasa )->direction_vector_m_fx[i] = NULL; -#endif // IVAS_FLOAT_FIXED - free( ( *hOMasa )->direction_vector_m[i] ); - ( *hOMasa )->direction_vector_m[i] = NULL; - } - - free( *hOMasa ); - ( *hOMasa ) = NULL; - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_omasa_enc_config() * * oMASA encoder configuration *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_omasa_enc_config_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -512,14 +306,14 @@ ivas_error ivas_omasa_enc_config_fx( IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) ) { - IF( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, 1, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) + IF( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, 1, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) { return error; } } ELSE IF( EQ_16( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) { - IF( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nSCE, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) + IF( ( error = ivas_ism_config_fx( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nSCE, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) { return error; } @@ -596,131 +390,6 @@ ivas_error ivas_omasa_enc_config_fx( return IVAS_ERR_OK; } -#else - -ivas_error ivas_omasa_enc_config( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t k, sce_id, nSCE_old; - int32_t ivas_total_brate, ism_total_brate; - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - - hEncoderConfig = st_ivas->hEncoderConfig; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - nSCE_old = st_ivas->nSCE; - -#ifndef IVAS_FLOAT_FIXED - st_ivas->ism_mode = ivas_omasa_ism_mode_select( ivas_total_brate, hEncoderConfig->nchan_ism ); -#else - st_ivas->ism_mode = ivas_omasa_ism_mode_select_fx( ivas_total_brate, hEncoderConfig->nchan_ism ); - move32(); -#endif - st_ivas->nchan_transport = 2; - - /* reconfiguration in case of bitrate switching */ - if ( hEncoderConfig->last_ivas_total_brate != ivas_total_brate ) - { -#ifndef IVAS_FLOAT_FIXED - ivas_set_omasa_TC( st_ivas->ism_mode, hEncoderConfig->nchan_ism, &st_ivas->nSCE, &st_ivas->nCPE ); -#else - ivas_set_omasa_TC_fx( st_ivas->ism_mode, hEncoderConfig->nchan_ism, &st_ivas->nSCE, &st_ivas->nCPE ); -#endif - - k = 0; - while ( k < SIZE_IVAS_BRATE_TBL && ivas_total_brate != ivas_brate_tbl[k] ) - { - k++; - } - - ism_total_brate = 0; - for ( sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ ) - { - ism_total_brate += sep_object_brate[k - 2][st_ivas->nSCE - 1]; - } - - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, 1, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - if ( ( error = ivas_ism_config( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nSCE, NULL, 0, NULL, NULL, NULL, NULL, NULL, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* reconfigure core-coders for ISMs */ - if ( ( error = ivas_corecoder_enc_reconfig_fx( st_ivas, nSCE_old, 1, 2, st_ivas->nSCE > 0 ? sep_object_brate[k - 2][st_ivas->nSCE - 1] : 0, ivas_total_brate - ism_total_brate, MC_MODE_NONE ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* re-write IVAS format signalling - actual 'ism_mode' was not known before */ - if ( st_ivas->nSCE > 0 ) - { - reset_indices_enc( st_ivas->hSCE[0]->hCoreCoder[0]->hBstr, st_ivas->hSCE[0]->hCoreCoder[0]->hBstr->nb_bits_tot ); - } - else - { - reset_indices_enc( st_ivas->hCPE[0]->hCoreCoder[0]->hBstr, st_ivas->hCPE[0]->hCoreCoder[0]->hBstr->nb_bits_tot ); - } - -#ifndef IVAS_FLOAT_FIXED - ivas_write_format( st_ivas ); -#else - ivas_write_format_fx( st_ivas ); -#endif - - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->hOMasa == NULL ) - { - if ( ( error = ivas_omasa_enc_open( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->hOMasa != NULL ) - { - ivas_omasa_enc_close( &( st_ivas->hOMasa ) ); - st_ivas->hOMasa = NULL; - } - - st_ivas->hCPE[0]->element_brate = ivas_total_brate - ism_total_brate; - - if ( ivas_total_brate - ism_total_brate >= MIN_BRATE_MDCT_STEREO ) - { - hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - } - else - { - hEncoderConfig->element_mode_init = IVAS_CPE_DFT; - } - } - - /* Configure MASA encoder based on frame parameters */ - if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC ) - { - /* Configure oMASA analysis based on MASA config */ -#ifdef IVAS_FLOAT_FIXED - ivas_omasa_set_config_fx( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hEncoderConfig->input_Fs, st_ivas->ism_mode ); -#else - ivas_omasa_set_config( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hEncoderConfig->input_Fs, st_ivas->ism_mode ); -#endif // IVAS_FLOAT_FIXED - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* @@ -728,7 +397,6 @@ ivas_error ivas_omasa_enc_config( * * Frame-by-frame config for oMASA *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_set_config_fx( OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder handle */ @@ -799,66 +467,6 @@ void ivas_omasa_set_config_fx( return; } -#else -void ivas_omasa_set_config( - OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ - MASA_ENCODER_HANDLE hMasa, /* i : MASA encoder handle */ - const int32_t input_Fs, /* i : Input sample rate */ - const ISM_MODE ism_mode /* i : ISM mode */ -) -{ - uint8_t i, maxBin; - - /* Determine the number of bands */ - if ( ism_mode == ISM_MODE_NONE || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - /* use full resolution for the ISM+MASA merge and reduce later */ - hOMasa->nbands = 24; - } - else - { - hOMasa->nbands = hMasa->config.numCodingBands; - } - - hOMasa->nCodingBands = hMasa->config.numCodingBands; - - /* Determine the number of subframes */ - hOMasa->nSubframes = hMasa->config.joinedSubframes == TRUE ? 1 : MAX_PARAM_SPATIAL_SUBFRAMES; - - /* Determine band grouping */ - if ( hOMasa->nbands == 24 ) - { - mvs2s( MASA_band_grouping_24, hOMasa->band_grouping, 24 + 1 ); - } - else - { - for ( i = 0; i < hOMasa->nbands + 1; i++ ) - { - hOMasa->band_grouping[i] = MASA_band_grouping_24[hMasa->data.band_mapping[i]]; - } - } - - maxBin = (uint8_t) ( input_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - - for ( i = 1; i < hOMasa->nbands + 1; i++ ) - { - if ( hOMasa->band_grouping[i] >= maxBin ) - { - hOMasa->band_grouping[i] = maxBin; - hOMasa->nbands = i; - break; - } - } - - mvs2s( DirAC_block_grouping, hOMasa->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - if ( hOMasa->nSubframes == 1 ) - { - hOMasa->block_grouping[1] = hOMasa->block_grouping[MAX_PARAM_SPATIAL_SUBFRAMES]; - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* @@ -866,7 +474,6 @@ void ivas_omasa_set_config( * * Main OMASA encoding function *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_enc_fx( OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder handle */ @@ -1160,220 +767,6 @@ void ivas_omasa_enc_fx( return; } -#else - -void ivas_omasa_enc( - OMASA_ENC_HANDLE hOMasa, /* i/o: OMASA encoder handle */ - MASA_ENCODER_HANDLE hMasa, /* i/o: MASA encoder handle */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handle */ - float *data_in_f[], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ - const ISM_MODE ism_mode, /* i : ISM mode */ - float *data_separated_object, /* o : Separated object audio signal */ - int16_t *idx_separated_object /* o : Index of the separated object */ -) -{ - int16_t i, j; - float data_out_f[MASA_MAX_TRANSPORT_CHANNELS][L_FRAME48k]; - - /* Determine separated object (when applicable) */ - if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - float broadband_energy[MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS]; - int16_t loudest_object; - int16_t selected_object; - int16_t nchan_all_inp; - float alpha; - uint8_t fade_out_separate_object; - uint8_t fade_in_separate_object; - - /* Estimate broadband energies */ - nchan_all_inp = nchan_ism + nchan_transport; - set_zero( broadband_energy, nchan_all_inp ); - for ( i = 0; i < nchan_all_inp; i++ ) - { - for ( j = 0; j < input_frame; j++ ) - { - broadband_energy[i] += data_in_f[i][j] * data_in_f[i][j]; - } - } - - /* Temporal averaging */ - alpha = 0.8f; - for ( i = 0; i < nchan_all_inp; i++ ) - { - hOMasa->broadband_energy_sm[i] = ( 1.0f - alpha ) * broadband_energy[i] + alpha * hOMasa->broadband_energy_sm[i]; - } - - /* Determine loudest object */ - loudest_object = 0; - for ( i = 1; i < nchan_ism; i++ ) - { - if ( hOMasa->broadband_energy_sm[i] > hOMasa->broadband_energy_sm[loudest_object] ) - { - loudest_object = i; - } - } - - /* Determine object to separate */ - selected_object = hOMasa->prev_selected_object; - fade_out_separate_object = 0; - fade_in_separate_object = 0; - if ( hOMasa->changing_object ) - { - hOMasa->changing_object = 0; - selected_object = loudest_object; - fade_in_separate_object = 1; - } - else - { - if ( loudest_object != hOMasa->prev_selected_object ) - { - float selected_ene; - float total_ene; - float selected_ratio; - float adaptive_threshold_dB; - float ratio_objects_dB; - float hardswitch_threshold = 0.25f; - - /* Compute the energy of the current and the previous selected object in the current and the previous frame */ - selected_ene = broadband_energy[loudest_object] + broadband_energy[hOMasa->prev_selected_object] + hOMasa->broadband_energy_prev[loudest_object] + hOMasa->broadband_energy_prev[hOMasa->prev_selected_object]; - - /* Compute the energy of all objects and MASA channels in the current and the previous frame */ - total_ene = 0.0f; - for ( i = 0; i < nchan_all_inp; i++ ) - { - total_ene += broadband_energy[i] + hOMasa->broadband_energy_prev[i]; - } - - /* Compute the ratio */ - selected_ratio = selected_ene / ( total_ene + EPSILON ); - - adaptive_threshold_dB = selected_ratio * 9.0f + 1.0f; /* selected ratio = 0 -> 1 dB, selected ratio = 1 -> 10 dB */ - ratio_objects_dB = 10.0f * log10f( hOMasa->broadband_energy_sm[loudest_object] / ( hOMasa->broadband_energy_sm[hOMasa->prev_selected_object] + EPSILON ) ); - - /* Adaptively determine whether to change the separated object. If they are quiet compared to the total energy, change easier, as other signals mask the change. */ - if ( ratio_objects_dB > adaptive_threshold_dB ) - { - if ( selected_ratio < hardswitch_threshold ) /* If low level compared to all audio channels, perform hardswitch */ - { - selected_object = loudest_object; - } - else /* If high level compared to all audio channels, perform switch via fade out fade in */ - { - hOMasa->changing_object = 1; - fade_out_separate_object = 1; - } - } - } - } - - /* Set values for next frame */ - for ( i = 0; i < nchan_all_inp; i++ ) - { - hOMasa->broadband_energy_prev[i] = broadband_energy[i]; - } - hOMasa->prev_selected_object = selected_object; - - /* Separate the selected object */ - *idx_separated_object = selected_object; - mvr2r( data_in_f[selected_object], data_separated_object, input_frame ); - if ( fade_out_separate_object ) - { - v_mult( data_separated_object, hOMasa->fade_out_gain, data_separated_object, input_frame ); - v_mult( data_in_f[selected_object], hOMasa->fade_in_gain, data_in_f[selected_object], input_frame ); - } - else if ( fade_in_separate_object ) - { - v_mult( data_separated_object, hOMasa->fade_in_gain, data_separated_object, input_frame ); - v_mult( data_in_f[selected_object], hOMasa->fade_out_gain, data_in_f[selected_object], input_frame ); - } - else - { - set_zero( data_in_f[selected_object], input_frame ); - } - } - - /* Analysis */ - if ( ism_mode == ISM_MODE_NONE || ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - OMASA_SPATIAL_META OMasaMeta; /* working memory for the ISM-object MASA-parameters */ - OMASA_SPATIAL_META_HANDLE hOMasaMeta; - uint8_t n_bands_orig, n_subframes_orig; - uint8_t numCodingBands_orig, joinedSubframes_orig; - - hOMasaMeta = &OMasaMeta; - hOMasaMeta->num_dirs = 1; - - /* merge MASA directions before adding ISM to the mixture */ - if ( hMasa->config.numberOfDirections == 2 ) - { - n_bands_orig = hMasa->config.numCodingBands; - hMasa->config.numCodingBands = MASA_FREQUENCY_BANDS; - - ivas_masa_combine_directions( hMasa ); - - hMasa->config.numCodingBands = (int8_t) n_bands_orig; - } - - /* force computation into high resolution */ - - n_subframes_orig = hOMasa->nSubframes; - hOMasa->nSubframes = MAX_PARAM_SPATIAL_SUBFRAMES; - - /* Estimate MASA parameters from the objects */ - /* NB: only first direction is populated */ - /* NB2: in energy_ratios and surround_coherence only first sub-frame contains valid data */ - ivas_omasa_param_est_enc( hOMasa, hMasa->data.hOmasaData, hIsmMeta, data_in_f, hOMasaMeta->directional_meta[0].elevation, hOMasaMeta->directional_meta[0].azimuth, hOMasaMeta->directional_meta[0].energy_ratio[0], hOMasaMeta->directional_meta[0].spread_coherence, hOMasaMeta->common_meta.surround_coherence[0], - hOMasaMeta->common_meta.diffuse_to_total_ratio[0], input_frame, nchan_ism ); - - /* copy energy_ratios and surrCoh from first sub-frame to the remaining ones */ - for ( i = 1; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - mvr2r( hOMasaMeta->directional_meta[0].energy_ratio[0], hOMasaMeta->directional_meta[0].energy_ratio[i], MASA_FREQUENCY_BANDS ); - mvr2r( hOMasaMeta->common_meta.surround_coherence[0], hOMasaMeta->common_meta.surround_coherence[i], MASA_FREQUENCY_BANDS ); - mvr2r( hOMasaMeta->common_meta.diffuse_to_total_ratio[0], hOMasaMeta->common_meta.diffuse_to_total_ratio[i], MASA_FREQUENCY_BANDS ); - } - - /* restore resolution parameters */ - hOMasa->nSubframes = n_subframes_orig; - - /* perform MASA+ISM merge in full resolution */ - numCodingBands_orig = hMasa->config.numCodingBands; - joinedSubframes_orig = hMasa->config.joinedSubframes; - - hMasa->config.numCodingBands = hOMasa->nbands; - hMasa->config.joinedSubframes = 0; - - ivas_merge_masa_metadata( hMasa, hOMasaMeta ); /* => merge result in hMasa->masaMetadata */ - - hMasa->config.numCodingBands = numCodingBands_orig; - hMasa->config.joinedSubframes = joinedSubframes_orig; - } - else if ( ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - /* Estimate energies and ratios */ - ivas_omasa_energy_and_ratio_est( hOMasa, hMasa->data.hOmasaData, data_in_f, input_frame, nchan_ism ); - } - - /* Downmix */ - ivas_omasa_dmx( data_in_f, data_out_f, input_frame, nchan_transport, nchan_ism, hIsmMeta, hOMasa->prev_object_dm_gains, hOMasa->interpolator ); - - /* Move the ISM metadata to the first entry for encoding in the MASA_ONE_OBJ mode */ - if ( ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - hIsmMeta[0]->azimuth = hIsmMeta[*idx_separated_object]->azimuth; - hIsmMeta[0]->elevation = hIsmMeta[*idx_separated_object]->elevation; - } - - /* Merge transport signals */ - ivas_merge_masa_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, nchan_transport ); - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* @@ -1382,7 +775,6 @@ void ivas_omasa_enc( * Set the importance of particular ISM streams in combined-format coding *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_set_ism_importance_interformat_fx( const Word32 ism_total_brate, /* i/o: ISms total bitrate */ const Word16 nchan_transport, /* i : number of transported channels */ @@ -1425,97 +817,37 @@ void ivas_set_ism_importance_interformat_fx( ctype = hSCE[ch]->hCoreCoder[0]->coder_type_raw; st->low_rate_mode = 0; - move16(); - test(); - IF( active_flag == 0 ) - { - ism_imp[ch] = ISM_INACTIVE_IMP; - move16(); - st->low_rate_mode = 1; - move16(); - } - ELSE IF( EQ_16( ctype, INACTIVE ) || EQ_16( ctype, UNVOICED ) ) - { - ism_imp[ch] = ISM_LOW_IMP; - move16(); - } - ELSE IF( EQ_16( ctype, VOICED ) ) - { - ism_imp[ch] = ISM_MEDIUM_IMP; - move16(); - } - ELSE /* GENERIC */ - { - ism_imp[ch] = ISM_HIGH_IMP; - move16(); - } - - hIsmMeta[ch]->ism_metadata_flag = active_flag; /* flag is needed for the MD coding */ - move16(); - } - - return; -} -#else -void ivas_set_ism_importance_interformat( - const int32_t ism_total_brate, /* i/o: ISms total bitrate */ - const int16_t nchan_transport, /* i : number of transported channels */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handles */ - SCE_ENC_HANDLE hSCE[], /* i/o: SCE encoder handles */ - const float lp_noise_CPE, /* i : LP filtered total noise estimation */ - int16_t ism_imp[] /* o : ISM importance flags */ -) -{ - Encoder_State *st; - int16_t ch, ctype, active_flag; - - for ( ch = 0; ch < nchan_transport; ch++ ) - { - st = hSCE[ch]->hCoreCoder[0]; - - active_flag = st->vad_flag; - - if ( active_flag == 0 ) - { - if ( st->lp_noise > 15 || lp_noise_CPE - st->lp_noise < 30 ) - { - active_flag = 1; - } - } - - /* do not use the low-rate core-coder mode at highest bit-rates */ - if ( ism_total_brate / nchan_transport > IVAS_48k ) - { - active_flag = 1; - } - - ctype = hSCE[ch]->hCoreCoder[0]->coder_type_raw; - - st->low_rate_mode = 0; - if ( active_flag == 0 ) + move16(); + test(); + IF( active_flag == 0 ) { ism_imp[ch] = ISM_INACTIVE_IMP; + move16(); st->low_rate_mode = 1; + move16(); } - else if ( ctype == INACTIVE || ctype == UNVOICED ) + ELSE IF( EQ_16( ctype, INACTIVE ) || EQ_16( ctype, UNVOICED ) ) { ism_imp[ch] = ISM_LOW_IMP; + move16(); } - else if ( ctype == VOICED ) + ELSE IF( EQ_16( ctype, VOICED ) ) { ism_imp[ch] = ISM_MEDIUM_IMP; + move16(); } - else /* GENERIC */ + ELSE /* GENERIC */ { ism_imp[ch] = ISM_HIGH_IMP; + move16(); } hIsmMeta[ch]->ism_metadata_flag = active_flag; /* flag is needed for the MD coding */ + move16(); } return; } -#endif /*--------------------------------------------------------------------------* * ivas_set_surplus_brate_enc() @@ -1523,7 +855,6 @@ void ivas_set_ism_importance_interformat( * set bit-rate surplus in combined format coding *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_set_surplus_brate_enc( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ #ifdef DEBUG_MODE_INFO @@ -1578,29 +909,6 @@ void ivas_set_surplus_brate_enc( return; } -#else -void ivas_set_surplus_brate_enc( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { - st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - ivas_interformat_brate( ISM_MASA_MODE_PARAM_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ); - /* note: ISM st->total_brate is iset in ivas_sce_enc() */ - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) - { - /* it is already set in ivas_ism_enc() */ - } - else - { - st_ivas->hCPE[0]->brate_surplus = 0; - } - - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_omasa_ener_brate() @@ -1609,7 +917,6 @@ void ivas_set_surplus_brate_enc( *--------------------------------------------------------------------------*/ /*! r: OMASA energy bitrate flag */ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_omasa_ener_brate_fx( const Word16 nchan_ism, /* i : number of ISMs */ const Word32 ivas_total_brate, /* i : IVAS total bitrate */ @@ -1680,51 +987,12 @@ Word16 ivas_omasa_ener_brate_fx( return flag_omasa_ener_brate; } -#else -int16_t ivas_omasa_ener_brate( - const int16_t nchan_ism, /* i : number of ISMs */ - const int32_t ivas_total_brate, /* i : IVAS total bitrate */ - float *data_f[], /* i : Input / transport audio signals */ - const int16_t input_frame /* i : Input frame size */ -) -{ - int16_t i, flag_omasa_ener_brate; - float energy_ism, energy_masa; - - flag_omasa_ener_brate = 0; - - if ( nchan_ism >= 3 && ivas_total_brate == IVAS_128k ) - { - energy_ism = 0.0f; - for ( i = 0; i < nchan_ism; i++ ) - { - energy_ism += sum2_f( data_f[i], input_frame ); - } - - energy_masa = 0.0f; - for ( i = nchan_ism; i < nchan_ism + MASA_MAXIMUM_DIRECTIONS; i++ ) - { - energy_masa += sum2_f( data_f[i], input_frame ); - } - - energy_ism = energy_ism / ( energy_masa + 1.0f ) * 2.0f / (float) ( nchan_ism ); - - if ( energy_ism < 1.0f ) - { - flag_omasa_ener_brate = 1; - } - } - - return flag_omasa_ener_brate; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * Local functions *--------------------------------------------------------------------------*/ /* Estimate MASA parameters from the objects */ -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_param_est_enc_fx( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, @@ -2021,200 +1289,9 @@ static void ivas_omasa_param_est_enc_fx( } return; } -#else -static void ivas_omasa_param_est_enc( - OMASA_ENC_HANDLE hOMasa, - OMASA_ENCODER_DATA_HANDLE hOmasaData, - ISM_METADATA_HANDLE hIsmMeta[], - float *data_f[], - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float energyRatio[MASA_FREQUENCY_BANDS], - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float surroundingCoherence[MASA_FREQUENCY_BANDS], - float diffuseness_m[MASA_FREQUENCY_BANDS], - const int16_t input_frame, - const int16_t nchan_ism ) -{ - float reference_power[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t ts, i, j, d, k; - int16_t num_freq_bins, num_freq_bands, index; - float dir_v[DIRAC_NUM_DIMS]; - int16_t l_ts; - float Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX]; - float Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX]; - float Foa_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Foa_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float diffuseness_vector[MASA_FREQUENCY_BANDS]; - int16_t band_m_idx, block_m_idx; - float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; - float norm_tmp; - int16_t mrange[2], brange[2]; - - num_freq_bins = hOMasa->cldfbAnaEnc[0]->no_channels; - num_freq_bands = hOMasa->nbands; - l_ts = input_frame / CLDFB_NO_COL_MAX; - - /* Need to initialize renormalization_factors, and variables to be normalized */ - set_zero( renormalization_factor_diff, hOMasa->nbands ); - set_zero( diffuseness_m, hOMasa->nbands ); - - /* Compute ISM to FOA matrices */ - for ( i = 0; i < nchan_ism; i++ ) - { - hOMasa->chnlToFoaMtx[0][i] = 1.0f; - hOMasa->chnlToFoaMtx[1][i] = sinf( ( hIsmMeta[i]->azimuth / 180.0f * EVS_PI ) ) * cosf( ( hIsmMeta[i]->elevation / 180.0f * EVS_PI ) ); - hOMasa->chnlToFoaMtx[2][i] = sinf( ( hIsmMeta[i]->elevation / 180.0f * EVS_PI ) ); - hOMasa->chnlToFoaMtx[3][i] = cosf( ( hIsmMeta[i]->azimuth / 180.0f * EVS_PI ) ) * cosf( ( hIsmMeta[i]->elevation / 180.0f * EVS_PI ) ); - } - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < hOMasa->nSubframes; block_m_idx++ ) - { - mrange[0] = hOMasa->block_grouping[block_m_idx]; - mrange[1] = hOMasa->block_grouping[block_m_idx + 1]; - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - hOMasa->direction_vector_m[0][block_m_idx][band_m_idx] = 0.0f; - hOMasa->direction_vector_m[1][block_m_idx][band_m_idx] = 0.0f; - hOMasa->direction_vector_m[2][block_m_idx][band_m_idx] = 0.0f; - } - - set_zero( hOmasaData->energy_ism[block_m_idx], num_freq_bands ); - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } - - /* Compute energy */ - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = hOMasa->band_grouping[i]; - brange[1] = hOMasa->band_grouping[i + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - for ( k = 0; k < nchan_ism; k++ ) - { - hOmasaData->energy_ism[block_m_idx][i] += Chnl_RealBuffer[k][j] * Chnl_RealBuffer[k][j] + Chnl_ImagBuffer[k][j] * Chnl_ImagBuffer[k][j]; - } - } - } - - /* Compute FOA */ - /* W */ - mvr2r( Chnl_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - mvr2r( Chnl_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_add( Chnl_RealBuffer[i], Foa_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[i], Foa_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - } - - /* Y */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[1][0], Foa_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[1][0], Foa_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[1][i], Foa_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[1][i], Foa_ImagBuffer[1], num_freq_bins ); - } - - /* Z */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[2][0], Foa_RealBuffer[2], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[2][0], Foa_ImagBuffer[2], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[2][i], Foa_RealBuffer[2], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[2][i], Foa_ImagBuffer[2], num_freq_bins ); - } - - /* X */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[3][0], Foa_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[3][0], Foa_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[3][i], Foa_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[3][i], Foa_ImagBuffer[3], num_freq_bins ); - } - - /* Direction estimation */ - computeIntensityVector_enc( hOMasa->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, num_freq_bands, intensity_real ); - computeDirectionVectors( intensity_real[0], intensity_real[1], intensity_real[2], 0, num_freq_bands, direction_vector[0], direction_vector[1], direction_vector[2] ); - - /* Power estimation for diffuseness */ - computeReferencePower_omasa( hOMasa->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, reference_power[ts], 0, num_freq_bands ); - - /* Fill buffers of length "averaging_length" time slots for intensity and energy */ - hOMasa->index_buffer_intensity = ( hOMasa->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ - index = hOMasa->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_real[i], &( hOMasa->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power[ts], &( hOMasa->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness( hOMasa->buffer_intensity_real, hOMasa->buffer_energy, num_freq_bands, diffuseness_vector ); - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hOMasa->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hOMasa->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hOMasa->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - - diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - } - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hOMasa->direction_vector_m[d][block_m_idx][band_m_idx]; - } - - ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); - } - - /* Set coherences to zero, as this mode is used at lowest bit rates where the coherences are not transmitted */ - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - spreadCoherence[block_m_idx][band_m_idx] = 0.0f; - surroundingCoherence[band_m_idx] = 0.0f; - } - } - - /* Determine energy ratios */ - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - diffuseness_m[band_m_idx] = 0.0f; - } - - energyRatio[band_m_idx] = 1.0f - diffuseness_m[band_m_idx]; - } - - return; -} -#endif /* Estimate energies and ratios */ -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_energy_and_ratio_est_fx( OMASA_ENC_HANDLE hOMasa, OMASA_ENCODER_DATA_HANDLE hOmasaData, @@ -2339,93 +1416,9 @@ static void ivas_omasa_energy_and_ratio_est_fx( return; } -#else -static void ivas_omasa_energy_and_ratio_est( - OMASA_ENC_HANDLE hOMasa, - OMASA_ENCODER_DATA_HANDLE hOmasaData, - float *data_f[], - const int16_t input_frame, - const int16_t nchan_ism ) -{ - int16_t ts, i, j, k; - int16_t num_freq_bands; - int16_t l_ts; - float Chnl_RealBuffer[MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float Chnl_ImagBuffer[MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - int16_t block_m_idx; - int16_t mrange[2], brange[2]; - float tftile_energy; - float ism_ratio_sum; - - num_freq_bands = hOMasa->nbands; - l_ts = input_frame / CLDFB_NO_COL_MAX; - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < hOMasa->nSubframes; block_m_idx++ ) - { - mrange[0] = hOMasa->block_grouping[block_m_idx]; - mrange[1] = hOMasa->block_grouping[block_m_idx + 1]; - - /* Reset variable */ - for ( i = 0; i < hOMasa->nbands; i++ ) - { - set_zero( hOmasaData->energy_ratio_ism[block_m_idx][i], nchan_ism ); - } - set_zero( hOmasaData->energy_ism[block_m_idx], num_freq_bands ); - - /* Compute CLDFB */ - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } - - /* Compute energy */ - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = hOMasa->band_grouping[i]; - brange[1] = hOMasa->band_grouping[i + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - for ( k = 0; k < nchan_ism; k++ ) - { - tftile_energy = Chnl_RealBuffer[k][j] * Chnl_RealBuffer[k][j] + Chnl_ImagBuffer[k][j] * Chnl_ImagBuffer[k][j]; - hOmasaData->energy_ism[block_m_idx][i] += tftile_energy; - hOmasaData->energy_ratio_ism[block_m_idx][i][k] += tftile_energy; - } - } - } - } - - /* Compute ISM energy ratios */ - for ( i = 0; i < num_freq_bands; i++ ) - { - ism_ratio_sum = 0.0f; - for ( j = 0; j < nchan_ism; j++ ) - { - hOmasaData->energy_ratio_ism[block_m_idx][i][j] /= ( hOmasaData->energy_ism[block_m_idx][i] + EPSILON ); - ism_ratio_sum += hOmasaData->energy_ratio_ism[block_m_idx][i][j]; - } - - if ( ism_ratio_sum == 0.0f ) - { - float temp_ism_ratio = 1.0f / ( (float) nchan_ism ); - for ( j = 0; j < nchan_ism; j++ ) - { - hOmasaData->energy_ratio_ism[block_m_idx][i][j] = temp_ism_ratio; - } - } - } - } - - return; -} -#endif /* Compute downmix */ -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_dmx_fx( Word32 *data_in[], /*i:Qx*/ Word32 data_out[][L_FRAME48k], /*i:Qx*/ @@ -2479,56 +1472,7 @@ static void ivas_omasa_dmx_fx( return; } -#else - -static void ivas_omasa_dmx( - float *data_in_f[], - float data_out_f[][L_FRAME48k], - const int16_t input_frame, - const int16_t nchan_transport, - const int16_t nchan_ism, - ISM_METADATA_HANDLE hIsmMeta[], - float prev_gains[][MASA_MAX_TRANSPORT_CHANNELS], - const float interpolator[L_FRAME48k] ) -{ - int16_t i, j, k; - float azimuth, elevation; - float gains[MASA_MAX_TRANSPORT_CHANNELS]; - float g1, g2; - - for ( i = 0; i < nchan_transport; i++ ) - { - set_zero( data_out_f[i], input_frame ); - } - - for ( i = 0; i < nchan_ism; i++ ) - { - azimuth = hIsmMeta[i]->azimuth; - elevation = hIsmMeta[i]->elevation; - - ivas_get_stereo_panning_gains( azimuth, elevation, gains ); - - /* Downmix using the panning gains */ - for ( j = 0; j < nchan_transport; j++ ) - { - if ( fabsf( gains[j] ) > 0.0 || fabsf( prev_gains[i][j] ) > 0.0f ) - { - for ( k = 0; k < input_frame; k++ ) - { - g1 = interpolator[k]; - g2 = 1.0f - g1; - data_out_f[j][k] += ( g1 * gains[j] + g2 * prev_gains[i][j] ) * data_in_f[i][k]; - } - } - prev_gains[i][j] = gains[j]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void computeIntensityVector_enc_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ @@ -2575,80 +1519,8 @@ void computeIntensityVector_enc_fx( return; } -#else -static void computeIntensityVector_enc( - const int16_t *band_grouping, - float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], - const int16_t num_frequency_bands, - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] ) -{ - /* Reminder - * X = a + ib; Y = c + id - * X*Y = ac - bd + i(ad +bc) - */ - int16_t i, j; - float real, img; - int16_t brange[2]; - - for ( i = 0; i < num_frequency_bands; i++ ) - { - brange[0] = band_grouping[i]; - brange[1] = band_grouping[i + 1]; - - intensity_real[0][i] = 0; - intensity_real[1][i] = 0; - intensity_real[2][i] = 0; - - for ( j = brange[0]; j < brange[1]; j++ ) - { - real = Cldfb_RealBuffer[0][j]; - img = Cldfb_ImagBuffer[0][j]; - intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; /* Intensity is XYZ order, audio is WYZX order. */ - intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; - intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; - } - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void computeReferencePower_omasa( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Imag part of input signal */ - float *reference_power, /* o : Estimated power */ - const int16_t enc_param_start_band, /* i : first band to process */ - const int16_t num_freq_bands /* i : Number of frequency bands */ -) -{ - int16_t brange[2]; - int16_t ch_idx, i, j; - - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = band_grouping[i + enc_param_start_band]; - brange[1] = band_grouping[i + enc_param_start_band + 1]; - reference_power[i] = 0; - - for ( ch_idx = 0; ch_idx < FOA_CHANNELS; ch_idx++ ) - { - /* abs()^2 */ - for ( j = brange[0]; j < brange[1]; j++ ) - { - reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); - } - } - } - v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); - return; -} -#else static void computeReferencePower_omasa_ivas_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal Q6*/ @@ -2707,4 +1579,3 @@ static void computeReferencePower_omasa_ivas_fx( move16(); return; } -#endif diff --git a/lib_enc/ivas_osba_enc.c b/lib_enc/ivas_osba_enc.c index 866f13ce2..c78b21d50 100644 --- a/lib_enc/ivas_osba_enc.c +++ b/lib_enc/ivas_osba_enc.c @@ -40,18 +40,13 @@ #include "ivas_rom_com.h" #include "ivas_rom_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_osba_render_ism_to_sba( float *data_in_f[], float data_out_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_sba, const int16_t nchan_ism, ISM_METADATA_HANDLE hIsmMeta[], float prev_gains[][MAX_INPUT_CHANNELS], const float interpolator[L_FRAME48k] ); -#else static void ivas_osba_render_ism_to_sba_fx( Word32 *data_in_fx[], Word32 data_out_fx[][L_FRAME48k], @@ -62,13 +57,11 @@ static void ivas_osba_render_ism_to_sba_fx( Word32 prev_gains_fx[][MAX_INPUT_CHANNELS], const Word32 interpolator_fx[L_FRAME48k], Word16 *Q_data ); -#endif /*-------------------------------------------------------------------* * ivas_merge_sba_transports() * * Merge SBA transport channels *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_merge_sba_transports_fx( Word32 data_in_f1[][L_FRAME48k], Word32 *data_in_f2[], @@ -93,35 +86,11 @@ static void ivas_merge_sba_transports_fx( *Q_out = sub( Q_f1, 1 ); return; } -#else -static void ivas_merge_sba_transports( - float data_in_f1[][L_FRAME48k], - float *data_in_f2[], - float *data_out_f[], - const int16_t input_frame, - const int16_t sba_analysis_order ) -{ - int16_t i, j, nchan_sba; - - nchan_sba = ( sba_analysis_order + 1 ) * ( sba_analysis_order + 1 ); - - for ( i = 0; i < nchan_sba; i++ ) - { - for ( j = 0; j < input_frame; j++ ) - { - data_out_f[i][j] = ( data_in_f1[i][j] + data_in_f2[i][j] ); - } - } - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_osba_enc_open() * * Allocate and initialize OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_osba_enc_open_fx( Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ ) @@ -170,62 +139,12 @@ ivas_error ivas_osba_enc_open_fx( return error; } -#else -ivas_error ivas_osba_enc_open( - Encoder_Struct *st_ivas /* i/o: IVAS encoder handle */ -) -{ - int16_t i; - OSBA_ENC_HANDLE hOSba; - int16_t input_frame; - ivas_error error; - int16_t len; - error = IVAS_ERR_OK; - - if ( ( hOSba = (OSBA_ENC_HANDLE) malloc( sizeof( OSBA_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA encoder\n" ) ); - } - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - set_f( hOSba->prev_object_dm_gains[i], INV_SQRT_2, MAX_INPUT_CHANNELS ); - } - - len = NS2SA( st_ivas->hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS ); - - for ( i = 0; i < st_ivas->hEncoderConfig->nchan_ism; i++ ) - { - if ( ( hOSba->input_data_mem[i] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OSBA input buffers" ); - } - set_f( hOSba->input_data_mem[i], 0.0f, len ); - } - - for ( ; i < MAX_NUM_OBJECTS; i++ ) - { - hOSba->input_data_mem[i] = NULL; - } - - input_frame = (int16_t) ( st_ivas->hEncoderConfig->input_Fs / FRAMES_PER_SEC ); - for ( i = 0; i < input_frame; i++ ) - { - hOSba->interpolator[i] = ( (float) i ) / ( (float) input_frame ); - } - - st_ivas->hOSba = hOSba; - - return error; -} -#endif /*--------------------------------------------------------------------------* * ivas_omasa_enc_close() * * Close OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_osba_enc_close_fx( OSBA_ENC_HANDLE *hOSba /* i/o: encoder OSBA handle */ ) @@ -249,38 +168,12 @@ void ivas_osba_enc_close_fx( return; } -#else -void ivas_osba_enc_close( - OSBA_ENC_HANDLE *hOSba /* i/o: encoder OSBA handle */ -) -{ - if ( hOSba == NULL || *hOSba == NULL ) - { - return; - } - - for ( int16_t n = 0; n < MAX_NUM_OBJECTS; n++ ) - { - if ( ( *hOSba )->input_data_mem[n] != NULL ) - { - free( ( *hOSba )->input_data_mem[n] ); - ( *hOSba )->input_data_mem[n] = NULL; - } - } - - free( *hOSba ); - ( *hOSba ) = NULL; - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_osba_enc_reconfig() * * oSBA encoder reconfiguration *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_osba_enc_reconfig( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) @@ -502,198 +395,6 @@ ivas_error ivas_osba_enc_reconfig( return error; } -#else -ivas_error ivas_osba_enc_reconfig( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - - int16_t n, nSCE_old, nCPE_old, nchan_transport_old; - ISM_MODE old_ism_mode; - int32_t ivas_total_brate; - ivas_error error; - ENCODER_CONFIG_HANDLE hEncoderConfig; - - error = IVAS_ERR_OK; - hEncoderConfig = st_ivas->hEncoderConfig; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - - if ( ivas_total_brate != hEncoderConfig->last_ivas_total_brate ) - { - DIRAC_ENC_HANDLE hDirAC = st_ivas->hDirAC; - SPAR_ENC_HANDLE hSpar; - int16_t analysis_order_old; - int16_t spar_reconfig_flag; - int16_t nbands_old; - int16_t ndir_old; - - spar_reconfig_flag = 0; - old_ism_mode = st_ivas->ism_mode; - if ( ivas_total_brate >= IVAS_256k ) - { - st_ivas->ism_mode = ISM_SBA_MODE_DISC; - } - else - { - st_ivas->ism_mode = ISM_MODE_NONE; - } - nchan_transport_old = st_ivas->nchan_transport; - nCPE_old = st_ivas->nCPE; - nSCE_old = st_ivas->nSCE; - - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, hEncoderConfig->sba_order ); - analysis_order_old = ivas_sba_get_analysis_order( hEncoderConfig->last_ivas_total_brate, hEncoderConfig->sba_order ); - - nbands_old = st_ivas->hQMetaData->q_direction->cfg.nbands; - ndir_old = st_ivas->hQMetaData->no_directions; - - if ( ( analysis_order_old != st_ivas->sba_analysis_order ) || ( old_ism_mode != st_ivas->ism_mode ) ) - { - int16_t i, n_old; - float **old_mem_hp20_in; - - n_old = st_ivas->hEncoderConfig->nchan_ism + ( analysis_order_old + 1 ) * ( analysis_order_old + 1 ); - n = st_ivas->hEncoderConfig->nchan_ism + ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); - - if ( n > n_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_in = st_ivas->mem_hp20_in; - st_ivas->mem_hp20_in = NULL; - - if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < n_old; i++ ) - { - st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i]; - old_mem_hp20_in[i] = NULL; - } - /* create additional hp20 memories */ - for ( ; i < n; i++ ) - { - if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - set_f( st_ivas->mem_hp20_in[i], 0.0f, L_HP20_MEM ); - } - - free( old_mem_hp20_in ); - old_mem_hp20_in = NULL; - } - else if ( n < n_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_in = st_ivas->mem_hp20_in; - st_ivas->mem_hp20_in = NULL; - - if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < n; i++ ) - { - st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i]; - old_mem_hp20_in[i] = NULL; - } - /* remove superfluous hp20 memories */ - for ( ; i < n_old; i++ ) - { - free( old_mem_hp20_in[i] ); - old_mem_hp20_in[i] = NULL; - } - - free( old_mem_hp20_in ); - old_mem_hp20_in = NULL; - } - } - - ivas_spar_config( ivas_total_brate, min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ), &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->hSpar->core_nominal_brate, -1 ); - - hSpar = st_ivas->hSpar; - - if ( st_ivas->nchan_transport == 1 ) - { - hEncoderConfig->element_mode_init = IVAS_SCE; - } - else - { - hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - } - if ( nchan_transport_old != st_ivas->nchan_transport || ( ivas_total_brate < IVAS_512k && hEncoderConfig->last_ivas_total_brate >= IVAS_512k ) || ( ivas_total_brate >= IVAS_512k && hEncoderConfig->last_ivas_total_brate < IVAS_512k ) ) - { - /* FB mixer handle */ - if ( hDirAC->hFbMixer != NULL ) - { - ivas_FB_mixer_close( &( hDirAC->hFbMixer ), hEncoderConfig->input_Fs, 0 ); - hDirAC->hFbMixer = NULL; - } - spar_reconfig_flag = 1; - ivas_spar_enc_close( &( st_ivas->hSpar ), hEncoderConfig->input_Fs, hEncoderConfig->nchan_inp, spar_reconfig_flag ); - - if ( ( error = ivas_spar_enc_open( st_ivas, spar_reconfig_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - } - st_ivas->hSpar->spar_reconfig_flag = spar_reconfig_flag; - if ( ( error = ivas_dirac_enc_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( st_ivas->hQMetaData->q_direction->cfg.nbands != nbands_old || st_ivas->hQMetaData->no_directions != ndir_old ) - { - int16_t dir, j, i; - IVAS_QDIRECTION *q_direction = st_ivas->hQMetaData->q_direction; - for ( dir = 0; dir < st_ivas->hQMetaData->no_directions; dir++ ) - { - for ( j = 0; j < q_direction[dir].cfg.nbands; j++ ) - { - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - q_direction[dir].band_data[j].energy_ratio_index[i] = 0; - q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0; - } - } - } - } - hSpar->enc_param_start_band = hDirAC->hConfig->enc_param_start_band; - - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SCE/CPE/MCT handles - *-----------------------------------------------------------------*/ - - if ( old_ism_mode == ISM_MODE_NONE && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - st_ivas->nCPE += ( st_ivas->hEncoderConfig->nchan_ism + 1 ) >> 1; - } - else if ( old_ism_mode == ISM_SBA_MODE_DISC && st_ivas->ism_mode == ISM_MODE_NONE ) - { - nchan_transport_old += st_ivas->hEncoderConfig->nchan_ism; - } - else if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) - { - st_ivas->nCPE += ( st_ivas->hEncoderConfig->nchan_ism + 1 ) >> 1; - nCPE_old = st_ivas->nCPE; - nchan_transport_old = st_ivas->nchan_transport; - nchan_transport_old += st_ivas->hEncoderConfig->nchan_ism; - } - - if ( ( error = ivas_corecoder_enc_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, ivas_total_brate / st_ivas->nchan_transport, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS, MC_MODE_NONE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * ivas_osba_enc() * @@ -756,69 +457,10 @@ void ivas_osba_enc_fx( move16(); return; } -#else -void ivas_osba_enc( - OSBA_ENC_HANDLE hOSba, /* i/o: OSBA encoder handle */ - ISM_METADATA_HANDLE hIsmMeta[], /* i/o: ISM metadata handle */ - float *data_in_f[], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_ism, /* i : Number of objects for parameter analysis */ - const ISM_MODE ism_mode, /* i : ISM mode */ - const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t sba_planar /* i : planar SBA flag */ -) -{ - float data_out_f[MAX_INPUT_CHANNELS][L_FRAME48k]; - int16_t n, delay_s; - delay_s = NS2SA( input_Fs, IVAS_FB_ENC_DELAY_NS ); - - if ( ism_mode == ISM_MODE_NONE ) - { - /*keep the delay buffer up to date*/ - for ( n = 0; n < nchan_ism; n++ ) - { - mvr2r( &data_in_f[n][input_frame - delay_s], hOSba->input_data_mem[n], delay_s ); - } - - /* Convert ISM to SBA */ - ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, sba_analysis_order, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator ); - - if ( sba_planar ) - { - ivas_sba_zero_vert_comp( &( data_in_f[nchan_ism] ), sba_analysis_order, sba_planar, input_frame ); - } - - /* Merge SBA signals */ - ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, sba_analysis_order ); - } - else - { - int16_t azimuth, elevation; - /* delay ISM input channels to match the SBA encoder delay */ - for ( n = 0; n < nchan_ism; n++ ) - { - delay_signal_float( data_in_f[n], input_frame, hOSba->input_data_mem[n], delay_s ); - - - /*keep prev gain upto date for bitrate switching*/ - azimuth = (int16_t) floorf( hIsmMeta[n]->azimuth + 0.5f ); - elevation = (int16_t) floorf( hIsmMeta[n]->elevation + 0.5f ); - ivas_dirac_dec_get_response( azimuth, elevation, hOSba->prev_object_dm_gains[n], sba_analysis_order ); - } - } - - /* Set the number of objects */ - hOSba->nchan_ism = nchan_ism; - - return; -} -#endif /*--------------------------------------------------------------------------* * Local functions *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* Render ISMs to SBA */ static void ivas_osba_render_ism_to_sba_fx( Word32 *data_in_fx[], @@ -892,67 +534,3 @@ static void ivas_osba_render_ism_to_sba_fx( return; } -#else -/* Render ISMs to SBA */ -static void ivas_osba_render_ism_to_sba( - float *data_in_f[], - float data_out_f[][L_FRAME48k], - const int16_t input_frame, - const int16_t sba_analysis_order, - const int16_t nchan_ism, - ISM_METADATA_HANDLE hIsmMeta[], - float prev_gains[][MAX_INPUT_CHANNELS], - const float interpolator[L_FRAME48k] ) -{ - int16_t i, j, k; - int16_t azimuth, elevation; - float gains[MAX_INPUT_CHANNELS]; - float g1, g2; - float output_gain; - - int16_t nchan_sba; - - nchan_sba = ( sba_analysis_order + 1 ) * ( sba_analysis_order + 1 ); - - for ( i = 0; i < nchan_sba; i++ ) - { - set_zero( data_out_f[i], input_frame ); - } - - for ( i = 0; i < nchan_ism; i++ ) - { - azimuth = (int16_t) floorf( hIsmMeta[i]->azimuth + 0.5f ); - elevation = (int16_t) floorf( hIsmMeta[i]->elevation + 0.5f ); - - ivas_dirac_dec_get_response( azimuth, elevation, gains, sba_analysis_order ); - - /* Render using the sh gains */ - for ( j = 0; j < nchan_sba; j++ ) - { - if ( fabsf( gains[j] ) > 0.0 || fabsf( prev_gains[i][j] ) > 0.0f ) - { - for ( k = 0; k < input_frame; k++ ) - { - g1 = interpolator[k]; - g2 = 1.0f - g1; - data_out_f[j][k] += ( g1 * gains[j] + g2 * prev_gains[i][j] ) * data_in_f[i][k]; - } - } - prev_gains[i][j] = gains[j]; - } - } - - /* Gain with loudness-matching gains */ - output_gain = 0.7499f; - for ( j = 0; j < nchan_sba; j++ ) - { - for ( k = 0; k < input_frame; k++ ) - { - data_out_f[j][k] *= output_gain; - } - } - - return; -} - -#endif diff --git a/lib_enc/ivas_pca_enc.c b/lib_enc/ivas_pca_enc.c index 4e81efaac..fccef0036 100644 --- a/lib_enc/ivas_pca_enc.c +++ b/lib_enc/ivas_pca_enc.c @@ -50,29 +50,12 @@ #define IVAS_PCA_SM_FAC 0.0234375f #define IVAS_PCA_N_ITER_QR 10 -#ifdef IVAS_FLOAT_FIXED #define IVAS_PCA_SM_FAC_FX 50331648 // Q31 #define ONE_MINUS_IVAS_PCA_SM_FAC_FX 2097152000 // MAX_32 - IVAS_PCA_SM_FAC_FX -> Q31 -#endif /*-----------------------------------------------------------------------* * Local function definitions *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_bitstream_write_int32( - BSTR_ENC_HANDLE hMetaData, - const int32_t val, - const int16_t bits ) -{ - /* MSBs */ - push_next_indice( hMetaData, (uint16_t) ( val >> 16 ), bits - 16 ); - - /* LSBs */ - push_next_indice( hMetaData, (uint16_t) ( val & 0x0000FFFF ), 16 ); - - return; -} -#else static void ivas_bitstream_write_int32( BSTR_ENC_HANDLE hMetaData, const Word32 val, @@ -86,7 +69,6 @@ static void ivas_bitstream_write_int32( return; } -#endif static void pca_enc_reset_fx( @@ -269,7 +251,6 @@ static void sort4_D_eigVec_fx( * Initialize PCA encoder *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_pca_enc_init_fx( PCA_ENC_STATE *hPCA /* i/o: PCA encoder structure */ ) @@ -280,17 +261,6 @@ void ivas_pca_enc_init_fx( return; } -#else -void ivas_pca_enc_init( - PCA_ENC_STATE *hPCA /* i/o: PCA encoder structure */ -) -{ - hPCA->prev_bypass_decision = PCA_MODE_INACTIVE; - pca_enc_reset( hPCA ); - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_pca_enc() diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index 498c2a834..28218d70d 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -44,46 +44,27 @@ #include "prot.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "basop_util.h" #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *needed_bits, int16_t *nbits_diff, int16_t *dfRatioBits, const int16_t hodirac_flag ); -#else static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *needed_bits, int16_t *nbits_diff, int16_t *dfRatioBits, const int16_t hodirac_flag ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_encode_diffuseness_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, UWord16 *diffuseness_index_max_ec_frame ); -#else -static int16_t ivas_qmetadata_entropy_encode_diffuseness( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, uint16_t *diffuseness_index_max_ec_frame ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_qmetadata_reorder_2dir_bands_fx( IVAS_QMETADATA_HANDLE hQMetaData ); -#else -static void ivas_qmetadata_reorder_2dir_bands( IVAS_QMETADATA_HANDLE hQMetaData ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_encode_df_ratio_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, Word16 *df_ratio_bits ); -#else -static int16_t ivas_qmetadata_entropy_encode_df_ratio( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, int16_t *df_ratio_bits ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_entropy_encode_dir_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, @@ -93,68 +74,38 @@ static Word16 ivas_qmetadata_entropy_encode_dir_fx( const Word16 direction_bits_raw, Word16 max_bits, const Word16 hrmasa_flag ); -#else -static int16_t ivas_qmetadata_entropy_encode_dir( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const uint16_t diffuseness_index_max_ec_frame, const int16_t nbands, const int16_t start_band, const int16_t direction_bits_raw, int16_t max_bits, const int16_t hrmasa_flag ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_raw_encode_dir_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const Word16 nbands, const Word16 start_band ); -#else -static int16_t ivas_qmetadata_raw_encode_dir( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t nbands, const int16_t start_band ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_get_optimal_gr_param_fx( UWord16 *unsigned_data, const Word16 count, const Word16 gr_param_count, Word16 *opt_gr_size ); -#else -static int16_t ivas_qmetadata_get_optimal_gr_param( uint16_t *unsigned_data, const int16_t count, const int16_t gr_param_count, int16_t *opt_gr_size ); -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_qmetadata_encode_extended_gr_length( const UWord16 value, const UWord16 alphabet_size, const Word16 gr_param ); static Word16 ivas_qmetadata_encode_quasi_uniform_length( const UWord16 value, const UWord16 alphabet_size ); static void ivas_qmetadata_encode_quasi_uniform( BSTR_ENC_HANDLE hMetaData, const UWord16 value, const UWord16 alphabet_size ); -#else -int16_t ivas_qmetadata_encode_extended_gr_length( const uint16_t value, const uint16_t alphabet_size, const int16_t gr_param ); -static int16_t ivas_qmetadata_encode_quasi_uniform_length( const uint16_t value, const uint16_t alphabet_size ); - -static void ivas_qmetadata_encode_quasi_uniform( BSTR_ENC_HANDLE hMetaData, const uint16_t value, const uint16_t alphabet_size ); -#endif - -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_reorder_elevation_index_fx( const Word16 elevation_index, const Word16 avg_elevation_index, const Word16 elevation_alphabet ); -#else -static int16_t ivas_qmetadata_reorder_elevation_index( const int16_t elevation_index, const int16_t avg_elevation_index, const int16_t elevation_alphabet ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_reorder_azimuth_index_fx( const Word16 azimuth_index, const Word16 avg_azimuth_index, const Word16 azimuth_alphabet ); static ivas_error requantize_direction_EC_3_fx( Word16 *extra_bits, IVAS_QDIRECTION *q_direction, const Word16 coding_subbands, BSTR_ENC_HANDLE hMetaData, Word32 elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word32 azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], Word16 *ind_order ); -#else -static int16_t ivas_qmetadata_reorder_azimuth_index( const int16_t azimuth_index, const int16_t avg_azimuth_index, const int16_t azimuth_alphabet ); -static ivas_error requantize_direction_EC_3( int16_t *extra_bits, IVAS_QDIRECTION *q_direction, const int16_t coding_subbands, BSTR_ENC_HANDLE hMetaData, float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], int16_t *ind_order ); -#endif - -#ifdef IVAS_FLOAT_FIXED static void calculate_two_distances_fx( Word32 *el_fx, /* i : elevation values */ Word16 *bits, /* i : number of bits for each tile */ @@ -163,23 +114,12 @@ static void calculate_two_distances_fx( Word32 *p_d1, /* o : first distortion */ Word32 *p_d2, /* o : second distortion */ Word16 *Q_out ); -#else -static void calculate_two_distances( float *el, int16_t *bits, const int16_t total_bits, const int16_t len, float *p_d1, float *p_d2 ); - -#endif -#ifdef IVAS_FLOAT_FIXED static void joint_encoding_fx( IVAS_QDIRECTION *q_direction, const Word16 j, const Word16 next_j, const Word16 coding_subbands, Word16 *bits_dir0, const Word16 allowed_bits, BSTR_ENC_HANDLE hMetaData, Word16 *diff ); static ivas_error write_ec_direction_fx( Word16 *num_bits_written, BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const Word16 j_idx, const Word16 len, const Word16 GR_ord_elevation, const Word16 GR_ord_azimuth, const Word16 use_context, const Word16 same ); static Word16 write_fixed_rate_direction_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const Word16 j_idx, const Word16 len ); -#else -static void joint_encoding( IVAS_QDIRECTION *q_direction, const int16_t j, const int16_t next_j, const int16_t coding_subbands, int16_t *bits_dir0, const int16_t allowed_bits, BSTR_ENC_HANDLE hMetaData, int16_t *diff ); -static ivas_error write_ec_direction( int16_t *num_bits_written, BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t j_idx, const int16_t len, const int16_t GR_ord_elevation, const int16_t GR_ord_azimuth, const int16_t use_context, const int16_t same ); -static int16_t write_fixed_rate_direction( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, const int16_t j_idx, const int16_t len ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_quantize_coherence_fx( IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ const Word16 idx_d, /* i : current direction index */ @@ -189,20 +129,12 @@ static Word16 ivas_qmetadata_quantize_coherence_fx( Word16 *indice_coherence, const Word16 hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ ); -#else -static int16_t ivas_qmetadata_quantize_coherence( IVAS_QMETADATA *hQMetaData, const int16_t idx_d, const int16_t all_coherence_zero, BSTR_ENC_HANDLE hMetaData, const int16_t write_flag, int16_t *indice_coherence, const int16_t hrmasa_flag ); -#endif -#ifdef IVAS_FLOAT_FIXED static void dct4_transform_fx( uint8_t *v, /* i : input 4D vector */ Word32 *dct_v /* o : output transformed vector Q31 */ ); -#else -static void dct4_transform( uint8_t *v, float *dct_v ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 quantize_DCT_0_coh_fx( // o:Q21 const Word16 x, /* i : input value Q14 */ const int16_t j, /* i : subband index */ @@ -214,11 +146,7 @@ static Word32 quantize_DCT_0_coh_fx( // o:Q21 Word16 *p_no_cb, /* o : actual number of codewords dependent on energy ratio value */ const Word16 hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ ); -#else -static float quantize_DCT_0_coh( const float x, const int16_t j, const float *coherence_cb, const float delta_var, const int16_t no_cb, IVAS_QDIRECTION *q_direction, uint16_t *idx_x, int16_t *p_no_cb, const int16_t hrmasa_flag ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_coherence_indexesDCT0_fx( UWord16 *idx_dct, /* i : indexes to be encoded */ const Word16 len, /* i : number of indexes */ @@ -227,37 +155,19 @@ static Word16 encode_coherence_indexesDCT0_fx( const Word16 indice_coherence, const Word16 nbits, const Word16 nbits1 ); -#else -static int16_t encode_coherence_indexesDCT0( uint16_t *idx_dct, const int16_t len, int16_t *no_cb_vec, BSTR_ENC_HANDLE hMetaData, const int16_t indice_coherence, const int16_t nbits, const int16_t nbits1 ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_coherence_indexesDCT1_fx( UWord16 *idx_dct, /* i : data to be encoded */ const Word16 len, /* i : number of data */ BSTR_ENC_HANDLE hMetaData /* i : metadata handle */ ); -#else -static int16_t encode_coherence_indexesDCT1( uint16_t *idx_dct, const int16_t len, BSTR_ENC_HANDLE hMetaData ); -#endif -#ifdef IVAS_FLOAT_FIXED static UWord64 create_combined_index( uint16_t *idx_dct, const int16_t len, const int16_t *no_cb_vec ); -#else -static uint64_t create_combined_index( uint16_t *idx_dct, const int16_t len, const int16_t *no_cb_vec ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_surround_coherence_fx( IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ ); -#else -static int16_t encode_surround_coherence( IVAS_QMETADATA *hQMetaData, BSTR_ENC_HANDLE hMetaData ); -#endif -#ifndef IVAS_FLOAT_FIXED -static int16_t common_direction( IVAS_QDIRECTION *q_direction, const int16_t band_idx, const int16_t len, const int16_t bits_allowed, BSTR_ENC_HANDLE hMetaData, float *elevation_orig, float *azimuth_orig ); -#else static Word16 common_direction_fx( IVAS_QDIRECTION *q_direction, const Word16 band_idx, @@ -266,53 +176,24 @@ static Word16 common_direction_fx( BSTR_ENC_HANDLE hMetaData, Word32 *elevation_orig_fx, Word32 *azimuth_orig_fx ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_diffuseness_huff_ec_encode_fx( BSTR_ENC_HANDLE hMetaData, const UWord16 idx ); -#else -static int16_t ivas_diffuseness_huff_ec_encode( BSTR_ENC_HANDLE hMetaData, const uint16_t idx ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_diffuseness_huff_ec_prepare_fx( IVAS_QDIRECTION *q_direction, Word16 *best_av, UWord16 *avr_idx, Word16 *diffuseness_bits_huff ); -#else -static void ivas_diffuseness_huff_ec_prepare( IVAS_QDIRECTION *q_direction, int16_t *best_av, uint16_t *avr_idx, int16_t *diffuseness_bits_huff ); -#endif static int16_t coherence_coding_length( const uint16_t *idx_sur_coh_shift, const uint8_t idx_shift_len, const int16_t coding_subbands, const int16_t *no_cv, uint16_t *mr_idx, int16_t *no_cv_shift, int16_t *p_min_idx, int16_t *GR_ord, int16_t *nbits_fr, int16_t *nbits_fr1 ); static int16_t write_2dir_info( BSTR_ENC_HANDLE hMetaData, uint8_t *twoDirBands, const int16_t n, const int16_t k ); -#ifdef IVAS_FLOAT_FIXED static void transform_azimuth_dir2_fx( IVAS_QMETADATA_HANDLE hQMetaData, Word16 *dir2_bands ); -#else -static void transform_azimuth_dir2( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *dir2_bands ); -#endif - -#ifndef IVAS_FLOAT_FIXED - -static int16_t calc_var_azi( const IVAS_QDIRECTION *q_direction, const int16_t diffuseness_index_max_ec_frame, const float avg_azimuth, float *avg_azimuth_out ); - -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( IVAS_QMETADATA_HANDLE hQMetaData, int16_t *needed_bits, const int16_t bits_dir_hr, BSTR_ENC_HANDLE hMetaData ); - -static int16_t ivas_qmetadata_quantize_coherence_hr_512( IVAS_QMETADATA *hQMetaData, const int16_t idx_d, const int16_t all_coherence_zero, BSTR_ENC_HANDLE hMetaData, const int16_t bits_coh ); -static int16_t encode_surround_coherence_hr( IVAS_QMETADATA *hQMetaData, BSTR_ENC_HANDLE hMetaData ); - -static int16_t write_stream_dct_coeffs_omasa( int16_t *q_idx, const int16_t len_stream, BSTR_ENC_HANDLE hMetaData, const int16_t first_line, const int16_t low_bitrate_mode ); - -static int16_t find_optimal_GR_order( const int16_t *q_idx, const int16_t len, int16_t *GR ); - -static int16_t find_optimal_GR_orders( const int16_t *q_idx, const int16_t len, const int16_t len_max_GR1, int16_t *GR1, int16_t *GR2, int16_t *i_min ); -#else static Word16 ivas_qmetadata_quantize_coherence_hr_512_fx( IVAS_QMETADATA *hQMetaData, const Word16 idx_d, const Word16 all_coherence_zero, BSTR_ENC_HANDLE hMetaData, const Word16 bits_coh ); static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( IVAS_QMETADATA_HANDLE hQMetaData, Word16 *needed_bits, const Word16 bits_dir_hr, BSTR_ENC_HANDLE hMetaData ); @@ -326,7 +207,6 @@ static Word16 write_stream_dct_coeffs_omasa_fx( Word16 *q_idx, const Word16 len_ static Word16 find_optimal_GR_order_fx( const Word16 *q_idx, const Word16 len, Word16 *GR ); static Word16 find_optimal_GR_orders_fx( const Word16 *q_idx, const Word16 len, const Word16 len_max_GR1, Word16 *GR1, Word16 *GR2, Word16 *i_min ); -#endif /*-----------------------------------------------------------------------* @@ -335,7 +215,6 @@ static Word16 find_optimal_GR_orders_fx( const Word16 *q_idx, const Word16 len, * Main function for quantizing and coding Spatial Metadata *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_qmetadata_enc_encode_fx( BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ @@ -800,4416 +679,2104 @@ ivas_error ivas_qmetadata_enc_encode_fx( return error; } -#else -ivas_error ivas_qmetadata_enc_encode( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) + + +/*-----------------------------------------------------------------------* + * ivas_qmetadata_enc_encode_hr_384_512() + * + * Main function for quantizing and coding Spatial Metadata at HRs + *-----------------------------------------------------------------------*/ +ivas_error ivas_qmetadata_enc_encode_hr_384_512_fx( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ + const Word16 bits_sph_idx, + const Word16 bits_sp_coh ) { - int16_t i, bit_pos_start, bit_pos_start_coh; - int16_t next_ind_start; - uint16_t diffuseness_index_max_ec_frame; - uint16_t diffuseness_index_max_ec_frame_pre[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t bits_dir_raw_pre[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t bits_diff_sum; - int16_t bits_diff[QMETADATA_MAX_NO_DIRECTIONS], bits_coherence[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t bits_dir[QMETADATA_MAX_NO_DIRECTIONS], bits_dir_raw; - int16_t extra_bits; + Word16 i, j; + Word16 bits_diff[QMETADATA_MAX_NO_DIRECTIONS]; IVAS_QDIRECTION *q_direction; - int16_t nbands, nblocks, start_band; - int16_t ndirections, d; - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t all_coherence_zero; - int16_t bit_pos_0, total_bits_1dir, bits_no_dirs_coh; - int16_t bits_signaling[QMETADATA_MAX_NO_DIRECTIONS]; - int16_t indice_coherence; - int16_t bits_dir_bands[MASA_MAXIMUM_CODING_SUBBANDS], raw_flag[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t diff_bits, bits_ec, next_ind_raw_flag; - int16_t dfRatio_bits[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bits_surround_coh, no_TF; - int16_t dir2_bands[MASA_MAXIMUM_TWO_DIR_BANDS]; - int16_t ind_order[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t reduce_bits; + Word16 nbands, nblocks, start_band; + Word16 ndirections, d; + Word16 all_coherence_zero; + Word16 bits_ec; + Word32 azimuth_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; // Q22 ivas_error error; error = IVAS_ERR_OK; + move32(); - /* Save initial position in bitstream */ - bit_pos_0 = hMetaData->nb_bits_tot; - bit_pos_start = bit_pos_0; - ndirections = hQMetaData->no_directions; - extra_bits = 0; + move16(); /* Check if coherence should be encoded */ all_coherence_zero = 1; - bits_no_dirs_coh = 0; - - if ( hQMetaData->coherence_flag ) + move16(); + IF( hQMetaData->q_direction->cfg.inactiveBands > 0 ) + { + push_next_indice( hMetaData, 1, 1 ); + /* write the number of inactive higher bands */ + ivas_qmetadata_encode_extended_gr( hMetaData, sub( hQMetaData->q_direction->cfg.inactiveBands, 1 ), MASA_MAXIMUM_CODING_SUBBANDS, 1 ); + } + ELSE + { + /* no change */ + push_next_indice( hMetaData, 0, 1 ); + } + IF( hQMetaData->coherence_flag ) { all_coherence_zero = hQMetaData->all_coherence_zero; - + move16(); push_next_indice( hMetaData, all_coherence_zero, 1 ); /* signal coherence */ - bits_no_dirs_coh += 1; } - if ( ndirections > 1 ) + /* encode 2 direction subbands position */ + test(); + IF( EQ_16( ndirections, 2 ) && EQ_16( bits_sph_idx, 11 ) ) { - /* Reorder 2dir bands for more efficient encoding. */ - if ( !hodirac_flag ) - { - ivas_qmetadata_reorder_2dir_bands( hQMetaData ); - } + write_2dir_info( hMetaData, hQMetaData->twoDirBands, hQMetaData->q_direction[0].cfg.nbands, hQMetaData->numTwoDirBands ); d = 0; - for ( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) + move16(); + FOR( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) { - if ( hQMetaData->twoDirBands[i] == 1 ) + IF( EQ_16( hQMetaData->twoDirBands[i], 1 ) ) { - mvr2r( hQMetaData->q_direction[1].band_data[i].azimuth, hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].cfg.nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[i].elevation, hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].cfg.nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[i].energy_ratio, hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].cfg.nblocks ); - - dir2_bands[d] = i; + Copy32( hQMetaData->q_direction[1].band_data[i].azimuth_fx, hQMetaData->q_direction[1].band_data[d].azimuth_fx, hQMetaData->q_direction[1].cfg.nblocks ); + Copy32( hQMetaData->q_direction[1].band_data[i].elevation_fx, hQMetaData->q_direction[1].band_data[d].elevation_fx, hQMetaData->q_direction[1].cfg.nblocks ); + Copy32( hQMetaData->q_direction[1].band_data[i].energy_ratio_fx, hQMetaData->q_direction[1].band_data[d].energy_ratio_fx, hQMetaData->q_direction[1].cfg.nblocks ); - if ( hQMetaData->coherence_flag ) + IF( hQMetaData->coherence_flag ) { mvc2c( hQMetaData->q_direction[1].coherence_band_data[i].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].cfg.nblocks ); } - d++; + d = add( d, 1 ); } } - - bits_no_dirs_coh += write_2dir_info( hMetaData, hQMetaData->twoDirBands, hQMetaData->q_direction[0].cfg.nbands, hQMetaData->numTwoDirBands ); - - for ( i = d; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + FOR( i = hQMetaData->numTwoDirBands; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) { - set_f( hQMetaData->q_direction[1].band_data[i].energy_ratio, 0.0f, hQMetaData->q_direction[1].cfg.nblocks ); + set32_fx( hQMetaData->q_direction[1].band_data[i].energy_ratio_fx, 0, hQMetaData->q_direction[1].cfg.nblocks ); } hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; + move16(); } - /*Quantization of the Diffuseness */ - ivas_qmetadata_quantize_diffuseness_nrg_ratios( hQMetaData, bits_dir_raw_pre, bits_diff, dfRatio_bits, hodirac_flag ); - - bits_diff_sum = 0; - bits_diff[0] = ivas_qmetadata_entropy_encode_diffuseness( hMetaData, &( hQMetaData->q_direction[0] ), &diffuseness_index_max_ec_frame_pre[0] ); - bits_diff_sum += bits_diff[0]; - - if ( ndirections == 2 ) - { - bits_diff[1] = ivas_qmetadata_entropy_encode_df_ratio( hMetaData, &( hQMetaData->q_direction[1] ), dfRatio_bits ); - bits_diff_sum += bits_diff[1]; - } - - /* 2dir energy ratio encoding reuses index memory. Now that diffRatio and dFRatio have been encoded, - * we retrieve index_dirRatio1Inv and index_dirRatio1Inv for further parameter encoding. This is - * necessary only for bands that have two concurrent directions. */ - if ( hQMetaData->no_directions == 2 ) - { - int16_t j, k, dir2band, index_dirRatio1Inv, index_dirRatio2Inv; - - dir2band = 0; - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) - { - if ( hQMetaData->twoDirBands[j] == 1 ) - { - index_dirRatio1Inv = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - index_dirRatio2Inv = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; - } - - for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = index_dirRatio2Inv; - } + /*Quantization and encoding of the Diffuseness */ + ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( hQMetaData, bits_diff, bits_sph_idx, hMetaData ); - dir2band++; - } - } - } /* Encode surround coherence */ - if ( ndirections == 2 ) + IF( all_coherence_zero == 0 ) { - no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks + hQMetaData->q_direction[1].cfg.nbands * hQMetaData->q_direction[1].cfg.nblocks; - if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - sum_s( bits_diff, ndirections ) >= MASA_MIN_BITS_SURR_COH ) ) - { - bits_surround_coh = encode_surround_coherence( hQMetaData, hMetaData ); - } - else - { - bits_surround_coh = 0; - for ( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); - } - } - } - bits_no_dirs_coh += bits_surround_coh; - total_bits_1dir = ( ( hQMetaData->metadata_max_bits - bits_no_dirs_coh ) * hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks ) / no_TF; + encode_surround_coherence_hr_fx( hQMetaData, hMetaData ); } - else + ELSE { - no_TF = hQMetaData->q_direction[0].cfg.nbands * hQMetaData->q_direction[0].cfg.nblocks; - if ( ( all_coherence_zero == 0 ) && ( hQMetaData->metadata_max_bits - bits_no_dirs_coh - 4.3f * no_TF - bits_diff[0] >= MASA_MIN_BITS_SURR_COH ) ) - { - bits_surround_coh = encode_surround_coherence( hQMetaData, hMetaData ); - } - else + FOR( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) { - bits_surround_coh = 0; - for ( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) + IF( hQMetaData->surcoh_band_data != NULL ) { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); - } + set8_fx( (Word8 *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); } } - total_bits_1dir = hQMetaData->metadata_max_bits - bits_no_dirs_coh - bits_surround_coh; } /* Loop over number of directions*/ - for ( d = 0; d < ndirections; d++ ) + FOR( d = 0; d < ndirections; d++ ) { q_direction = &( hQMetaData->q_direction[d] ); - if ( d == 1 ) - { - transform_azimuth_dir2( hQMetaData, dir2_bands ); - } - nbands = q_direction->cfg.nbands; nblocks = q_direction->cfg.nblocks; start_band = q_direction->cfg.start_band; - diffuseness_index_max_ec_frame = diffuseness_index_max_ec_frame_pre[0]; - bits_dir_raw = bits_dir_raw_pre[d]; - - /* This sets bit budget correctly for the second direction */ - if ( d == 0 ) - { - bits_diff[d] = bits_diff_sum; - } - else - { - bits_diff[d] = 0; - } - + move16(); + move16(); + move16(); - bits_signaling[d] = 0; + q_direction->not_in_2D = 0; + move16(); /*Coherence */ - bits_coherence[d] = 0; - bit_pos_start_coh = hMetaData->nb_bits_tot; - - if ( all_coherence_zero == 0 ) - { - bits_coherence[d] = ivas_qmetadata_quantize_coherence( hQMetaData, d, all_coherence_zero, hMetaData, 0, &indice_coherence, 0 ); - } - - if ( q_direction->cfg.mc_ls_setup == MC_LS_SETUP_5_1 || q_direction->cfg.mc_ls_setup == MC_LS_SETUP_7_1 ) - { - q_direction->not_in_2D = 0; - /* Quantize directions*/ - quantize_direction_frame2D( q_direction, azimuth_orig, elevation_orig ); - } - else - { - /* Quantize directions*/ - quantize_direction_frame( q_direction, azimuth_orig, elevation_orig, 0 ); - } - - /* Signalling 2D*/ - push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ - bits_signaling[d] = 1; - - /* Save state of metadata bitstream buffer after writing energy ratios, number of dirs and save space for coherence*/ - bit_pos_start = hMetaData->nb_bits_tot; - next_ind_start = hMetaData->nb_ind_tot; - - /* Encode quantized directions with EC frame-wise*/ - if ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) + IF( all_coherence_zero == 0 ) { - push_next_indice( hMetaData, 0, 1 ); /*Write 1 bit to signal EC frame-wise (EC1)*/ - bits_signaling[d]++; + ivas_qmetadata_quantize_coherence_hr_512_fx( hQMetaData, d, all_coherence_zero, hMetaData, bits_sp_coh ); } - next_ind_raw_flag = hMetaData->nb_ind_tot; - push_next_indice( hMetaData, 0, 1 ); /* Raw coding flag*/ - - bits_dir_bands[0] = ivas_qmetadata_raw_encode_dir( NULL, q_direction, q_direction->cfg.nbands, q_direction->cfg.start_band ); - - reduce_bits = hQMetaData->is_masa_ivas_format ? ( total_bits_1dir - ( bits_diff[d] + bits_coherence[d] + bits_signaling[d] ) - 1 ) : MASA_MAX_BITS; - bits_ec = ivas_qmetadata_entropy_encode_dir( hMetaData, q_direction, diffuseness_index_max_ec_frame, q_direction->cfg.nbands, q_direction->cfg.start_band, bits_dir_bands[0], reduce_bits, 0 ); + /* write the spherical indexes */ + bits_ec = hMetaData->nb_bits_tot; + move16(); - if ( bits_ec < 0 ) + IF( EQ_16( bits_sph_idx, 11 ) ) { - hMetaData->ind_list[next_ind_raw_flag].value = 1; /*rewrite flag*/ - bits_ec = ivas_qmetadata_raw_encode_dir( hMetaData, q_direction, q_direction->cfg.nbands, q_direction->cfg.start_band ); + /* do the quantization */ + quantize_direction_frame_fx( q_direction, azimuth_orig_fx, elevation_orig_fx, 1 ); } - bits_dir[d] = bits_ec + 1; - extra_bits = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); - /* Encode quantized directions with EC band-wise */ - if ( ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) && ( bits_dir[d] + bits_diff[d] + bits_coherence[d] + bits_signaling[d] > total_bits_1dir ) && q_direction->cfg.nblocks > 1 ) + FOR( i = start_band; i < nbands; i++ ) { - restore_metadata_buffer( hMetaData, next_ind_start, bit_pos_start ); - - /* Write signaling */ - push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal no EC frame-wise (EC1)*/ - push_next_indice( hMetaData, 0, 1 ); /*Write 1 bit to signal EC band-wise (EC2)*/ - bits_signaling[d] = 3; - - /* Write raw flags */ - next_ind_raw_flag = hMetaData->nb_ind_tot; - for ( i = start_band; i < nbands; i++ ) + FOR( j = 0; j < nblocks; j++ ) { - push_next_indice( hMetaData, 0, 1 ); /* Raw coding flag*/ + push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], bits_sph_idx ); } + } + bits_ec = sub( hMetaData->nb_bits_tot, bits_ec ); - bits_dir[d] = 0; - diff_bits = bits_diff[d] + bits_coherence[d] + bits_signaling[d] - total_bits_1dir; - for ( i = start_band; i < nbands; i++ ) - { - bits_dir_bands[i] = ivas_qmetadata_raw_encode_dir( NULL, q_direction, i + 1, i ); - - /* Write ec bits */ - bits_ec = ivas_qmetadata_entropy_encode_dir( hMetaData, q_direction, diffuseness_index_max_ec_frame, i + 1, i, bits_dir_bands[i], MASA_MAX_BITS, 0 ); - if ( bits_ec >= 0 ) - { - bits_dir_bands[i] = bits_ec; - raw_flag[i] = 0; - } - else - { - raw_flag[i] = 1; - } - diff_bits += bits_dir_bands[i] + 1; + /* Save quantized DOAs */ + IF( EQ_16( bits_sph_idx, 11 ) ) + { + FOR( i = start_band; i < nbands; i++ ) + { + Copy32( azimuth_orig_fx[i], q_direction->band_data[i].azimuth_fx, nblocks ); + Copy32( elevation_orig_fx[i], q_direction->band_data[i].elevation_fx, nblocks ); } - - small_requantize_direction_frame( q_direction, azimuth_orig, elevation_orig, raw_flag, bits_dir_bands, &diff_bits ); - - for ( i = start_band; i < nbands; i++ ) + } + ELSE + { + FOR( i = start_band; i < nbands; i++ ) { - if ( raw_flag[i] ) - { - /* Rewrite raw flag value */ - hMetaData->ind_list[next_ind_raw_flag + i - start_band].value = 1; - - /* Write ec bits */ - bits_ec = ivas_qmetadata_raw_encode_dir( hMetaData, q_direction, i + 1, i ); - } - bits_dir[d] += bits_dir_bands[i] + 1; + Copy32( q_direction->band_data[i].azimuth_fx, q_direction->band_data[i].q_azimuth_fx, nblocks ); + Copy32( q_direction->band_data[i].elevation_fx, q_direction->band_data[i].q_elevation_fx, nblocks ); } - - extra_bits = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); } + } - /* Requantized directions */ - if ( ( total_bits_1dir + bits_surround_coh <= hQMetaData->qmetadata_max_bit_req ) && ( bits_dir[d] + bits_diff[d] + bits_coherence[d] + bits_signaling[d] > total_bits_1dir ) ) + IF( hQMetaData->q_direction->cfg.inactiveBands > 0 ) + { + hQMetaData->q_direction[0].cfg.nbands = add( hQMetaData->q_direction[0].cfg.nbands, hQMetaData->q_direction->cfg.inactiveBands ); + move16(); + IF( GT_16( ndirections, 1 ) ) { + hQMetaData->q_direction[1].cfg.nbands = add( hQMetaData->q_direction[1].cfg.nbands, hQMetaData->q_direction->cfg.inactiveBands ); + move16(); + } + } - /*Bit budget exceeded, bit reduction strategy?*/ - extra_bits = 0; - - restore_metadata_buffer( hMetaData, next_ind_start, bit_pos_start ); - - push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal no EC frame-wise (EC1)*/ - if ( nblocks > 1 ) - { - push_next_indice( hMetaData, 1, 1 ); /*Write 1 bit to signal requantization stage (EC3)*/ - bits_signaling[d] = 3; - } - else - { - bits_signaling[d] = 2; - } - - if ( hQMetaData->is_masa_ivas_format == 0 ) - { - reduce_bits = bits_dir_raw - ( total_bits_1dir - bits_diff[d] - bits_coherence[d] - bits_signaling[d] ); - ind_order[0] = -1; - } - else - { - ind_order[0] = 0; - reduce_bits = min( nbands * nblocks + MASA_BIT_REDUCT_PARAM, bits_dir_raw - ( total_bits_1dir - bits_diff[d] - bits_coherence[d] - bits_signaling[d] ) ); - - if ( reduce_bits > bits_dir_raw - nbands * nblocks ) - { - reduce_bits = bits_dir_raw - nbands * nblocks; - } - } - - only_reduce_bits_direction( &extra_bits, q_direction, reduce_bits, nbands, nblocks, ind_order ); - bits_dir[d] = hMetaData->nb_bits_tot; - requantize_direction_EC_3( &extra_bits, q_direction, nbands, hMetaData, elevation_orig, azimuth_orig, ind_order ); - bits_dir[d] = hMetaData->nb_bits_tot - bits_dir[d]; - } - - /* finalize writing coherence */ - if ( ( bits_coherence[d] > 0 ) && ( all_coherence_zero == 0 ) && ( nblocks > 1 ) ) - { - bit_pos_start = hMetaData->nb_bits_tot; - hMetaData->nb_bits_tot = bit_pos_start_coh; - ivas_qmetadata_quantize_coherence( hQMetaData, d, all_coherence_zero, hMetaData, 1, &indice_coherence, 0 ); - hMetaData->nb_bits_tot = bit_pos_start; - } - - if ( d == 0 ) - { - total_bits_1dir = hQMetaData->metadata_max_bits - ( hMetaData->nb_bits_tot - bit_pos_0 ); - } - - /* Save quantized DOAs */ - for ( i = start_band; i < nbands; i++ ) - { - mvr2r( q_direction->band_data[i].azimuth, q_direction->band_data[i].q_azimuth, nblocks ); - mvr2r( q_direction->band_data[i].elevation, q_direction->band_data[i].q_elevation, nblocks ); - } - - /* Copy original DOAs back to q_direction*/ - for ( i = start_band; i < nbands; i++ ) - { - mvr2r( azimuth_orig[i], q_direction->band_data[i].azimuth, nblocks ); - mvr2r( elevation_orig[i], q_direction->band_data[i].elevation, nblocks ); - } - } - - return error; -} -#endif + return error; +} /*-----------------------------------------------------------------------* - * ivas_qmetadata_enc_encode_hr_384_512() + * ivas_qmetadata_enc_sid_encode() * - * Main function for quantizing and coding Spatial Metadata at HRs + * Main function for coding SID for Spatial Metadata *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_qmetadata_enc_encode_hr_384_512( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ - const int16_t bits_sph_idx, - const int16_t bits_sp_coh ) + +/*! r: number of bits written */ +void ivas_qmetadata_enc_sid_encode_fx( + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ + const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure */ + const Word16 ivas_format /* i : IVAS format */ +) { - int16_t i, j; - int16_t bits_diff[QMETADATA_MAX_NO_DIRECTIONS]; + Word16 b, m; + Word16 bit_pos_start; IVAS_QDIRECTION *q_direction; - int16_t nbands, nblocks, start_band; - int16_t ndirections, d; - int16_t all_coherence_zero; - int16_t bits_ec; - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - Word32 azimuth_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - ivas_error error; - - error = IVAS_ERR_OK; - - - ndirections = hQMetaData->no_directions; + Word16 nbands, nblocks, start_band; + Word32 avg_direction_vector_fx[3]; + Word32 avg_elevation_fx[MASA_MAXIMUM_CODING_SUBBANDS]; + Word32 direction_vector_fx[3]; + Word32 avg_azimuth_fx[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 bits_dir, bits_diff, bits_delta; + Word16 metadata_sid_bits; /* bits allocated to SID for metadata */ - /* Check if coherence should be encoded */ - all_coherence_zero = 1; - if ( hQMetaData->q_direction->cfg.inactiveBands > 0 ) - { - push_next_indice( hMetaData, 1, 1 ); - /* write the number of inactive higher bands */ - ivas_qmetadata_encode_extended_gr( hMetaData, hQMetaData->q_direction->cfg.inactiveBands - 1, MASA_MAXIMUM_CODING_SUBBANDS, 1 ); - } - else + IF( EQ_16( ivas_format, SBA_FORMAT ) ) { - /* no change */ - push_next_indice( hMetaData, 0, 1 ); + metadata_sid_bits = (Word16) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 2 - SID_FORMAT_NBITS; /* -1 for inactive mode header bit*/ + move16(); } - if ( hQMetaData->coherence_flag ) + ELSE { - all_coherence_zero = hQMetaData->all_coherence_zero; - push_next_indice( hMetaData, all_coherence_zero, 1 ); /* signal coherence */ + metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + move16(); } - /* encode 2 direction subbands position */ - if ( ndirections == 2 && bits_sph_idx == 11 ) - { - write_2dir_info( hMetaData, hQMetaData->twoDirBands, hQMetaData->q_direction[0].cfg.nbands, hQMetaData->numTwoDirBands ); - d = 0; - for ( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) - { - if ( hQMetaData->twoDirBands[i] == 1 ) - { - mvr2r( hQMetaData->q_direction[1].band_data[i].azimuth, hQMetaData->q_direction[1].band_data[d].azimuth, hQMetaData->q_direction[1].cfg.nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[i].elevation, hQMetaData->q_direction[1].band_data[d].elevation, hQMetaData->q_direction[1].cfg.nblocks ); - mvr2r( hQMetaData->q_direction[1].band_data[i].energy_ratio, hQMetaData->q_direction[1].band_data[d].energy_ratio, hQMetaData->q_direction[1].cfg.nblocks ); - if ( hQMetaData->coherence_flag ) - { - mvc2c( hQMetaData->q_direction[1].coherence_band_data[i].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].cfg.nblocks ); - } - d++; - } - } - for ( i = hQMetaData->numTwoDirBands; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) - { - set_f( hQMetaData->q_direction[1].band_data[i].energy_ratio, 0.0f, hQMetaData->q_direction[1].cfg.nblocks ); - } + /* Save initial position in bitstream */ + bit_pos_start = hMetaData->nb_bits_tot; + move16(); - hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; - } -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) - { - for ( int k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = floatToFixed( hQMetaData->q_direction[0].band_data[j].energy_ratio[k], Q30 ); - } - } - if ( EQ_16( hQMetaData->no_directions, 2 ) ) + /* write for MASA the number of transport channels used at coding and the CPE mode DFT/MDCT */ + IF( GT_16( masa_sid_descriptor, negate( 1 ) ) ) { - for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; ++j ) - { - for ( int k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = floatToFixed( hQMetaData->q_direction[1].band_data[j].energy_ratio[k], Q30 ); - } - } + push_next_indice( hMetaData, masa_sid_descriptor, 1 ); } -#endif // IVAS_FLOAT_FIXED_CONVERSIONS - /*Quantization and encoding of the Diffuseness */ - ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( hQMetaData, bits_diff, bits_sph_idx, hMetaData ); + /* Code for one direction: diffuseness and average DOA(s)*/ + q_direction = &( q_metadata->q_direction[0] ); + nbands = q_direction->cfg.nbands; + nblocks = q_direction->cfg.nblocks; + move16(); + move16(); + start_band = 0; /*Start always with band 0 for SID*/ + move16(); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + /* sanity checks*/ + assert( q_metadata->no_directions == 1 && "Qmetadata SID: only one direction supported!" ); + IF( EQ_16( ivas_format, SBA_FORMAT ) ) { - for ( int k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = fixedToFloat( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], Q30 ); - } + assert( ( q_direction->cfg.nbands == DIRAC_DTX_BANDS ) && "Qmetadata SID: only 2 bands supported!" ); } - if ( EQ_16( hQMetaData->no_directions, 2 ) ) + ELSE { - for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; ++j ) - { - for ( int k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = fixedToFloat( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], Q30 ); - } - } + assert( ( q_direction->cfg.nbands == 5 ) && "Qmetadata SID: only 5 bands supported!" ); } -#endif // IVAS_FLOAT_FIXED_CONVERSIONS -#else - /*Quantization and encoding of the Diffuseness */ - ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( hQMetaData, bits_diff, bits_sph_idx, hMetaData ); -#endif // IVAS_FLOAT_FIXED - - - /* Encode surround coherence */ - if ( all_coherence_zero == 0 ) + IF( NE_16( ivas_format, SBA_FORMAT ) ) { - encode_surround_coherence_hr_fx( hQMetaData, hMetaData ); + /* Signalling 2D*/ + push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ } - else + ELSE { - for ( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) - { - if ( hQMetaData->surcoh_band_data != NULL ) - { - set_c( (int8_t *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); - } - } + q_direction->not_in_2D = 1; /* force for merged modes */ + move16(); } - /* Loop over number of directions*/ - for ( d = 0; d < ndirections; d++ ) + /*Encode the quantized diffuseness in raw coding*/ + bits_dir = 0; + bits_diff = 0; + move16(); + move16(); + IF( NE_16( ivas_format, SBA_FORMAT ) ) { - q_direction = &( hQMetaData->q_direction[d] ); - - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - start_band = q_direction->cfg.start_band; - - - q_direction->not_in_2D = 0; -#ifdef IVAS_FLOAT_FIXED - /*Coherence */ - IF( all_coherence_zero == 0 ) - { - ivas_qmetadata_quantize_coherence_hr_512_fx( hQMetaData, d, all_coherence_zero, hMetaData, bits_sp_coh ); - } -#else - /*Coherence */ - if ( all_coherence_zero == 0 ) + FOR( b = start_band; b < nbands; b++ ) { - ivas_qmetadata_quantize_coherence_hr_512( hQMetaData, d, all_coherence_zero, hMetaData, bits_sp_coh ); + q_direction->band_data[b].energy_ratio_index[0] = s_max( q_direction->band_data[b].energy_ratio_index[0], 4 ); + move16(); + bits_diff = add( bits_diff, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ) ); + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + move16(); + + IF( q_direction->not_in_2D == 0 ) + { + q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); + move16(); + bits_dir = add( bits_dir, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ), q_direction->band_data[b].azimuth_m_alphabet[0] ) ); + } + ELSE + { + bits_dir = add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ); + } } -#endif - /* write the spherical indexes */ - bits_ec = hMetaData->nb_bits_tot; -#ifdef IVAS_FLOAT_FIXED - IF( EQ_16( bits_sph_idx, 11 ) ) + /* Reduce bit demand by increasing diffuseness*/ + bits_delta = sub( sub( sub( metadata_sid_bits, sub( hMetaData->nb_bits_tot, bit_pos_start ) ), bits_diff ), bits_dir ); + IF( bits_delta > 0 ) { -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + WHILE( bits_delta > 0 ) { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + test(); + FOR( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) { - q_direction->band_data[i].elevation_fx[j] = float_to_fix( q_direction->band_data[i].elevation[j], Q22 ); - q_direction->band_data[i].azimuth_fx[j] = float_to_fix( q_direction->band_data[i].azimuth[j], Q22 ); + test(); + IF( LT_16( q_direction->band_data[b].bits_sph_idx[0], 11 ) ) + { + bits_delta = sub( bits_delta, 1 ); + q_direction->band_data[b].bits_sph_idx[0] = add( q_direction->band_data[b].bits_sph_idx[0], 1 ); + move16(); + } } } -#endif // IVAS_FLOAT_FIXED_CONVERSIONS - - /* do the quantization */ - quantize_direction_frame_fx( q_direction, azimuth_orig_fx, elevation_orig_fx, 1 ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) + IF( q_direction->not_in_2D == 0 ) { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + FOR( b = start_band; b < nbands; b++ ) { - azimuth_orig[i][j] = fix_to_float( azimuth_orig_fx[i][j], Q22 ); - elevation_orig[i][j] = fix_to_float( elevation_orig_fx[i][j], Q22 ); - q_direction->band_data[i].elevation[j] = fix_to_float( q_direction->band_data[i].elevation_fx[j], Q22 ); - q_direction->band_data[i].azimuth[j] = fix_to_float( q_direction->band_data[i].azimuth_fx[j], Q22 ); + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); } } -#endif // IVAS_FLOAT_FIXED_CONVERSIONS - } -#else - if ( bits_sph_idx == 11 ) - { - /* do the quantization */ - quantize_direction_frame( q_direction, azimuth_orig, elevation_orig, 1 ); } -#endif - for ( i = start_band; i < nbands; i++ ) + ELSE { - for ( j = 0; j < nblocks; j++ ) + WHILE( bits_delta < 0 ) { - push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], bits_sph_idx ); + test(); + FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) + { + test(); + IF( GE_16( q_direction->band_data[b].bits_sph_idx[0], 4 ) ) + { + bits_delta = add( bits_delta, 1 ); + q_direction->band_data[b].bits_sph_idx[0] = sub( q_direction->band_data[b].bits_sph_idx[0], 1 ); + IF( q_direction->not_in_2D == 0 ) + { + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); + } + } + } } } - bits_ec = hMetaData->nb_bits_tot - bits_ec; - - - /* Save quantized DOAs */ - if ( bits_sph_idx == 11 ) + } + ELSE + { + FOR( b = start_band; b < nbands; b++ ) { - for ( i = start_band; i < nbands; i++ ) + q_direction->band_data[b].energy_ratio_index[0] = s_max( q_direction->band_data[b].energy_ratio_index[0], 4 ); + bits_diff = add( bits_diff, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ) ); + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + move16(); + move16(); + + IF( q_direction->not_in_2D == 0 ) { - mvr2r( azimuth_orig[i], q_direction->band_data[i].azimuth, nblocks ); - mvr2r( elevation_orig[i], q_direction->band_data[i].elevation, nblocks ); + q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + move16(); + bits_dir = add( bits_dir, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ), q_direction->band_data[b].azimuth_m_alphabet[0] ) ); } - } - else - { - for ( i = start_band; i < nbands; i++ ) + ELSE { - mvr2r( q_direction->band_data[i].azimuth, q_direction->band_data[i].q_azimuth, nblocks ); - mvr2r( q_direction->band_data[i].elevation, q_direction->band_data[i].q_elevation, nblocks ); + bits_dir = add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ); } } - } - if ( hQMetaData->q_direction->cfg.inactiveBands > 0 ) - { - hQMetaData->q_direction[0].cfg.nbands += hQMetaData->q_direction->cfg.inactiveBands; - if ( ndirections > 1 ) - { - hQMetaData->q_direction[1].cfg.nbands += hQMetaData->q_direction->cfg.inactiveBands; - } - } - - return error; -} -#else -ivas_error ivas_qmetadata_enc_encode_hr_384_512_fx( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *hQMetaData, /* i/o: metadata handle */ - const Word16 bits_sph_idx, - const Word16 bits_sp_coh ) -{ - Word16 i, j; - Word16 bits_diff[QMETADATA_MAX_NO_DIRECTIONS]; - IVAS_QDIRECTION *q_direction; - Word16 nbands, nblocks, start_band; - Word16 ndirections, d; - Word16 all_coherence_zero; - Word16 bits_ec; - Word32 azimuth_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], elevation_orig_fx[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; // Q22 - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - - ndirections = hQMetaData->no_directions; - move16(); - - /* Check if coherence should be encoded */ - all_coherence_zero = 1; - move16(); - IF( hQMetaData->q_direction->cfg.inactiveBands > 0 ) - { - push_next_indice( hMetaData, 1, 1 ); - /* write the number of inactive higher bands */ - ivas_qmetadata_encode_extended_gr( hMetaData, sub( hQMetaData->q_direction->cfg.inactiveBands, 1 ), MASA_MAXIMUM_CODING_SUBBANDS, 1 ); - } - ELSE - { - /* no change */ - push_next_indice( hMetaData, 0, 1 ); - } - IF( hQMetaData->coherence_flag ) - { - all_coherence_zero = hQMetaData->all_coherence_zero; - move16(); - push_next_indice( hMetaData, all_coherence_zero, 1 ); /* signal coherence */ - } + /* Reduce bit demand by increasing diffuseness*/ + bits_delta = sub( sub( sub( metadata_sid_bits, sub( hMetaData->nb_bits_tot, bit_pos_start ) ), bits_diff ), bits_dir ); - /* encode 2 direction subbands position */ - test(); - IF( EQ_16( ndirections, 2 ) && EQ_16( bits_sph_idx, 11 ) ) - { - write_2dir_info( hMetaData, hQMetaData->twoDirBands, hQMetaData->q_direction[0].cfg.nbands, hQMetaData->numTwoDirBands ); - d = 0; - move16(); - FOR( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) + test(); + WHILE( bits_delta < 0 && ( q_direction->not_in_2D > 0 ) ) { - IF( EQ_16( hQMetaData->twoDirBands[i], 1 ) ) + test(); + test(); + FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) { - Copy32( hQMetaData->q_direction[1].band_data[i].azimuth_fx, hQMetaData->q_direction[1].band_data[d].azimuth_fx, hQMetaData->q_direction[1].cfg.nblocks ); - Copy32( hQMetaData->q_direction[1].band_data[i].elevation_fx, hQMetaData->q_direction[1].band_data[d].elevation_fx, hQMetaData->q_direction[1].cfg.nblocks ); - Copy32( hQMetaData->q_direction[1].band_data[i].energy_ratio_fx, hQMetaData->q_direction[1].band_data[d].energy_ratio_fx, hQMetaData->q_direction[1].cfg.nblocks ); - - IF( hQMetaData->coherence_flag ) + test(); + IF( LT_16( q_direction->band_data[b].energy_ratio_index[0], ( DIRAC_DIFFUSE_LEVELS - 1 ) ) ) { - mvc2c( hQMetaData->q_direction[1].coherence_band_data[i].spread_coherence, hQMetaData->q_direction[1].coherence_band_data[d].spread_coherence, hQMetaData->q_direction[1].cfg.nblocks ); + bits_delta = add( bits_delta, q_direction->band_data[b].bits_sph_idx[0] ); + q_direction->band_data[b].energy_ratio_index[0] = add( q_direction->band_data[b].energy_ratio_index[0], 1 ); + move16(); + q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + move16(); + bits_delta = sub( bits_delta, q_direction->band_data[b].bits_sph_idx[0] ); } - d = add( d, 1 ); } } - FOR( i = hQMetaData->numTwoDirBands; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) - { - set32_fx( hQMetaData->q_direction[1].band_data[i].energy_ratio_fx, 0, hQMetaData->q_direction[1].cfg.nblocks ); - } - - hQMetaData->q_direction[1].cfg.nbands = hQMetaData->numTwoDirBands; - move16(); } + assert( ( bits_delta >= 0 ) && "Bit budget in Qmetadata SID is violated!!!" ); - /*Quantization and encoding of the Diffuseness */ - ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( hQMetaData, bits_diff, bits_sph_idx, hMetaData ); - - - /* Encode surround coherence */ - IF( all_coherence_zero == 0 ) - { - encode_surround_coherence_hr_fx( hQMetaData, hMetaData ); - } - ELSE + /*Code diffuseness*/ + FOR( b = start_band; b < nbands; b++ ) { - FOR( i = 0; i < hQMetaData->q_direction[0].cfg.nbands; i++ ) - { - IF( hQMetaData->surcoh_band_data != NULL ) - { - set8_fx( (Word8 *) hQMetaData->surcoh_band_data[i].surround_coherence, 0, hQMetaData->q_direction[0].cfg.nblocks ); - } - } + ivas_qmetadata_encode_quasi_uniform( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ); } - /* Loop over number of directions*/ - FOR( d = 0; d < ndirections; d++ ) + /* Compute and Quantize an average direction per band*/ + FOR( b = start_band; b < nbands; b++ ) { - q_direction = &( hQMetaData->q_direction[d] ); - - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - start_band = q_direction->cfg.start_band; - move16(); - move16(); - move16(); - - q_direction->not_in_2D = 0; - move16(); - - /*Coherence */ - IF( all_coherence_zero == 0 ) + set32_fx( avg_direction_vector_fx, 0, 3 ); + FOR( m = 0; m < nblocks; m++ ) { - ivas_qmetadata_quantize_coherence_hr_512_fx( hQMetaData, d, all_coherence_zero, hMetaData, bits_sp_coh ); + /*compute the average direction */ + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[m], q_direction->band_data[b].elevation_fx[m], direction_vector_fx ); + scale_sig32( direction_vector_fx, 3, Q22 - Q30 ); // Q30 -> Q22 + v_add_fixed( avg_direction_vector_fx, direction_vector_fx, avg_direction_vector_fx, 3, 0 ); // Q22 } - /* write the spherical indexes */ - bits_ec = hMetaData->nb_bits_tot; - move16(); + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, Q22, &avg_azimuth_fx[b], &avg_elevation_fx[b] ); - IF( EQ_16( bits_sph_idx, 11 ) ) + /* Quantize the average direction */ + IF( q_direction->not_in_2D == 0 ) { - /* do the quantization */ - quantize_direction_frame_fx( q_direction, azimuth_orig_fx, elevation_orig_fx, 1 ); + q_direction->band_data[b].spherical_index[0] = quantize_direction2D_fx( avg_azimuth_fx[b], q_direction->band_data[b].azimuth_m_alphabet[0], &avg_azimuth_fx[b], + &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); + move16(); } - - FOR( i = start_band; i < nbands; i++ ) + ELSE { - FOR( j = 0; j < nblocks; j++ ) - { - push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], bits_sph_idx ); - } + q_direction->band_data[b].spherical_index[0] = quantize_direction_fx( avg_elevation_fx[b], avg_azimuth_fx[b], q_direction->band_data[b].bits_sph_idx[0], &avg_elevation_fx[b], &avg_azimuth_fx[b], + &q_direction->band_data[b].elevation_index[0], &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); + move16(); } - bits_ec = sub( hMetaData->nb_bits_tot, bits_ec ); - /* Save quantized DOAs */ - IF( EQ_16( bits_sph_idx, 11 ) ) + q_direction->band_data[b].q_azimuth_fx[0] = avg_azimuth_fx[b]; + q_direction->band_data[b].q_elevation_fx[0] = avg_elevation_fx[b]; + move32(); + move32(); + + IF( EQ_16( q_direction->band_data[b].azimuth_index[0], MASA_NO_INDEX ) ) { - FOR( i = start_band; i < nbands; i++ ) - { - Copy32( azimuth_orig_fx[i], q_direction->band_data[i].azimuth_fx, nblocks ); - Copy32( elevation_orig_fx[i], q_direction->band_data[i].elevation_fx, nblocks ); - } + q_direction->band_data[b].azimuth_index[0] = 0; + move16(); } - ELSE + } + + /* quantize average elevation and azimuth angles */ + IF( q_direction->not_in_2D > 0 ) + { + FOR( b = start_band; b < nbands; b++ ) { - FOR( i = start_band; i < nbands; i++ ) - { - Copy32( q_direction->band_data[i].azimuth_fx, q_direction->band_data[i].q_azimuth_fx, nblocks ); - Copy32( q_direction->band_data[i].elevation_fx, q_direction->band_data[i].q_elevation_fx, nblocks ); - } + push_next_indice( hMetaData, q_direction->band_data[b].spherical_index[0], q_direction->band_data[b].bits_sph_idx[0] ); } } - - IF( hQMetaData->q_direction->cfg.inactiveBands > 0 ) + ELSE { - hQMetaData->q_direction[0].cfg.nbands = add( hQMetaData->q_direction[0].cfg.nbands, hQMetaData->q_direction->cfg.inactiveBands ); - move16(); - IF( GT_16( ndirections, 1 ) ) + FOR( b = start_band; b < nbands; b++ ) { - hQMetaData->q_direction[1].cfg.nbands = add( hQMetaData->q_direction[1].cfg.nbands, hQMetaData->q_direction->cfg.inactiveBands ); - move16(); + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].azimuth_index[0], q_direction->band_data[b].azimuth_m_alphabet[0] ); } } - return error; + + /* fill bits*/ + assert( ( hMetaData->nb_bits_tot - bit_pos_start ) <= metadata_sid_bits && "Too many written bits!" ); + WHILE( LT_16( ( sub( hMetaData->nb_bits_tot, bit_pos_start ) ), metadata_sid_bits ) ) + { + push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ + } + + return; } -#endif -/*-----------------------------------------------------------------------* - * ivas_qmetadata_enc_sid_encode() +/*------------------------------------------------------------------------- + * reset_metadata_spatial() * - * Main function for coding SID for Spatial Metadata - *-----------------------------------------------------------------------*/ - -/*! r: number of bits written */ -#ifdef IVAS_FLOAT_FIXED -void ivas_qmetadata_enc_sid_encode_fx( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ - const Word16 masa_sid_descriptor, /* i : description of MASA SID coding structure */ - const Word16 ivas_format /* i : IVAS format */ + * Reset metadata in spatial formats + *------------------------------------------------------------------------*/ +void reset_metadata_spatial_fx( + const IVAS_FORMAT ivas_format, /* i : IVAS format */ + BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ + const Word32 element_brate, /* i : element bitrate */ + Word32 *total_brate, /* o : total bitrate */ + const Word32 core_brate, /* i : core bitrate */ + const Word16 nb_bits_metadata /* i : number of meatdata bits */ ) { - Word16 b, m; - Word16 bit_pos_start; - IVAS_QDIRECTION *q_direction; - Word16 nbands, nblocks, start_band; - Word32 avg_direction_vector_fx[3]; - Word32 avg_elevation_fx[MASA_MAXIMUM_CODING_SUBBANDS]; - Word32 direction_vector_fx[3]; - Word32 avg_azimuth_fx[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 bits_dir, bits_diff, bits_delta; - Word16 metadata_sid_bits; /* bits allocated to SID for metadata */ - - IF( EQ_16( ivas_format, SBA_FORMAT ) ) - { - metadata_sid_bits = (Word16) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 2 - SID_FORMAT_NBITS; /* -1 for inactive mode header bit*/ - move16(); - } - ELSE - { - metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - move16(); - } - - - /* Save initial position in bitstream */ - bit_pos_start = hMetaData->nb_bits_tot; - move16(); + Word16 i, next_ind_sid, last_ind_sid; + Word16 j; + Word16 metadata_sid_bits; - /* write for MASA the number of transport channels used at coding and the CPE mode DFT/MDCT */ - IF( GT_16( masa_sid_descriptor, negate( 1 ) ) ) + test(); + IF( EQ_32( core_brate, SID_2k40 ) || core_brate == FRAME_NO_DATA ) { - push_next_indice( hMetaData, masa_sid_descriptor, 1 ); - } - - /* Code for one direction: diffuseness and average DOA(s)*/ - q_direction = &( q_metadata->q_direction[0] ); - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - move16(); - move16(); - start_band = 0; /*Start always with band 0 for SID*/ - move16(); - - /* sanity checks*/ - assert( q_metadata->no_directions == 1 && "Qmetadata SID: only one direction supported!" ); - IF( EQ_16( ivas_format, SBA_FORMAT ) ) - { - assert( ( q_direction->cfg.nbands == DIRAC_DTX_BANDS ) && "Qmetadata SID: only 2 bands supported!" ); - } - ELSE - { - assert( ( q_direction->cfg.nbands == 5 ) && "Qmetadata SID: only 5 bands supported!" ); - } - - IF( NE_16( ivas_format, SBA_FORMAT ) ) - { - /* Signalling 2D*/ - push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ - } - ELSE - { - q_direction->not_in_2D = 1; /* force for merged modes */ - move16(); - } - - /*Encode the quantized diffuseness in raw coding*/ - bits_dir = 0; - bits_diff = 0; - move16(); - move16(); - IF( NE_16( ivas_format, SBA_FORMAT ) ) - { - FOR( b = start_band; b < nbands; b++ ) + test(); + test(); + IF( ( EQ_32( ivas_format, SBA_FORMAT ) || EQ_32( ivas_format, MASA_FORMAT ) ) && core_brate != FRAME_NO_DATA ) { - q_direction->band_data[b].energy_ratio_index[0] = s_max( q_direction->band_data[b].energy_ratio_index[0], 4 ); - move16(); - bits_diff = add( bits_diff, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ) ); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; - move16(); - - IF( q_direction->not_in_2D == 0 ) + IF( EQ_32( ivas_format, SBA_FORMAT ) ) { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); + hMetaData->ind_list[0].value = 1; + move16(); + metadata_sid_bits = (Word16) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; move16(); - bits_dir = add( bits_dir, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ), q_direction->band_data[b].azimuth_m_alphabet[0] ) ); - } - ELSE - { - bits_dir = add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ); - } - } - /* Reduce bit demand by increasing diffuseness*/ - bits_delta = sub( sub( sub( metadata_sid_bits, sub( hMetaData->nb_bits_tot, bit_pos_start ) ), bits_diff ), bits_dir ); - IF( bits_delta > 0 ) - { - WHILE( bits_delta > 0 ) - { - test(); - FOR( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) + WHILE( LT_16( hMetaData->nb_bits_tot, metadata_sid_bits ) ) { - test(); - IF( LT_16( q_direction->band_data[b].bits_sph_idx[0], 11 ) ) - { - bits_delta = sub( bits_delta, 1 ); - q_direction->band_data[b].bits_sph_idx[0] = add( q_direction->band_data[b].bits_sph_idx[0], 1 ); - move16(); - } + push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ } } - - IF( q_direction->not_in_2D == 0 ) + ELSE { - FOR( b = start_band; b < nbands; b++ ) + /* Reset metadata and keep only SID metadata*/ + last_ind_sid = hMetaData->nb_ind_tot; + next_ind_sid = hMetaData->nb_ind_tot; + move16(); + move16(); + WHILE( GT_16( hMetaData->nb_bits_tot, nb_bits_metadata ) ) { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + next_ind_sid--; + hMetaData->nb_bits_tot = sub( hMetaData->nb_bits_tot, hMetaData->ind_list[next_ind_sid].nb_bits ); move16(); } - } - } - ELSE - { - WHILE( bits_delta < 0 ) - { - test(); - FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) - { - test(); - IF( GE_16( q_direction->band_data[b].bits_sph_idx[0], 4 ) ) - { - bits_delta = add( bits_delta, 1 ); - q_direction->band_data[b].bits_sph_idx[0] = sub( q_direction->band_data[b].bits_sph_idx[0], 1 ); - IF( q_direction->not_in_2D == 0 ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ) ); - move16(); - } - } - } - } - } - } - ELSE - { - FOR( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = s_max( q_direction->band_data[b].energy_ratio_index[0], 4 ); - bits_diff = add( bits_diff, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ) ); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; - move16(); - move16(); - IF( q_direction->not_in_2D == 0 ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = shl( 1, ( s_min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ) ); + hMetaData->nb_bits_tot = 0; move16(); - bits_dir = add( bits_dir, ivas_qmetadata_encode_quasi_uniform_length( sub( q_direction->band_data[b].azimuth_m_alphabet[0], 1 ), q_direction->band_data[b].azimuth_m_alphabet[0] ) ); - } - ELSE - { - bits_dir = add( bits_dir, q_direction->band_data[b].bits_sph_idx[0] ); - } - } - /* Reduce bit demand by increasing diffuseness*/ - bits_delta = sub( sub( sub( metadata_sid_bits, sub( hMetaData->nb_bits_tot, bit_pos_start ) ), bits_diff ), bits_dir ); + FOR( i = 0; i < next_ind_sid; i++ ) + { + hMetaData->ind_list[i].nb_bits = -1; + move16(); + } - test(); - WHILE( bits_delta < 0 && ( q_direction->not_in_2D > 0 ) ) - { - test(); - test(); - FOR( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) - { - test(); - IF( LT_16( q_direction->band_data[b].energy_ratio_index[0], ( DIRAC_DIFFUSE_LEVELS - 1 ) ) ) + FOR( ( j = 0, i = next_ind_sid ); i < last_ind_sid; ( i++, j++ ) ) { - bits_delta = add( bits_delta, q_direction->band_data[b].bits_sph_idx[0] ); - q_direction->band_data[b].energy_ratio_index[0] = add( q_direction->band_data[b].energy_ratio_index[0], 1 ); + hMetaData->ind_list[j].value = hMetaData->ind_list[i].value; + hMetaData->ind_list[j].nb_bits = hMetaData->ind_list[i].nb_bits; + hMetaData->nb_bits_tot = add( hMetaData->nb_bits_tot, hMetaData->ind_list[j].nb_bits ); + hMetaData->ind_list[i].nb_bits = -1; + move16(); + move16(); move16(); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; move16(); - bits_delta = sub( bits_delta, q_direction->band_data[b].bits_sph_idx[0] ); } + + hMetaData->nb_ind_tot = j; + move16(); } } - } - assert( ( bits_delta >= 0 ) && "Bit budget in Qmetadata SID is violated!!!" ); - - /*Code diffuseness*/ - FOR( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], 4 ), DIRAC_DIFFUSE_LEVELS - 4 ); - } - - /* Compute and Quantize an average direction per band*/ - FOR( b = start_band; b < nbands; b++ ) - { - set32_fx( avg_direction_vector_fx, 0, 3 ); - FOR( m = 0; m < nblocks; m++ ) + ELSE { - /*compute the average direction */ - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[m], q_direction->band_data[b].elevation_fx[m], direction_vector_fx ); - scale_sig32( direction_vector_fx, 3, Q22 - Q30 ); // Q30 -> Q22 - v_add_fixed( avg_direction_vector_fx, direction_vector_fx, avg_direction_vector_fx, 3, 0 ); // Q22 + /*Reset metadata*/ + reset_indices_enc( hMetaData, hMetaData->nb_ind_tot ); } - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, Q22, &avg_azimuth_fx[b], &avg_elevation_fx[b] ); - - /* Quantize the average direction */ - IF( q_direction->not_in_2D == 0 ) + *total_brate = element_brate; + move32(); + } + ELSE IF( NE_32( ivas_format, SBA_FORMAT ) ) + { + /* Reset SID metadata bits*/ + WHILE( GT_16( hMetaData->nb_bits_tot, nb_bits_metadata ) ) { - q_direction->band_data[b].spherical_index[0] = quantize_direction2D_fx( avg_azimuth_fx[b], q_direction->band_data[b].azimuth_m_alphabet[0], &avg_azimuth_fx[b], - &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); + hMetaData->nb_ind_tot--; + hMetaData->nb_bits_tot = sub( hMetaData->nb_bits_tot, hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits ); + hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits = -1; + move16(); move16(); - } - ELSE - { - q_direction->band_data[b].spherical_index[0] = quantize_direction_fx( avg_elevation_fx[b], avg_azimuth_fx[b], q_direction->band_data[b].bits_sph_idx[0], &avg_elevation_fx[b], &avg_azimuth_fx[b], - &q_direction->band_data[b].elevation_index[0], &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); move16(); } + } - /* Save quantized DOAs */ - q_direction->band_data[b].q_azimuth_fx[0] = avg_azimuth_fx[b]; - q_direction->band_data[b].q_elevation_fx[0] = avg_elevation_fx[b]; - move32(); + return; +} + + +/*------------------------------------------------------------------------- + * quantize_direction2D() + * + * + *------------------------------------------------------------------------*/ +/*! r: quantized spherical index */ +Word16 quantize_direction2D_fx( + Word32 phi, /* i : input azimuth value Q22 */ + const Word16 no_cw, /* i : number of bits */ + Word32 *phi_q, /* o : quantized azimuth value Q22 */ + UWord16 *index_phi, /* o : quantized azimuth index */ + const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ +) +{ + Word16 idx_sph; + UWord16 id_phi; + IF( LT_16( no_cw, 2 ) ) + { + *phi_q = 0; move32(); - IF( EQ_16( q_direction->band_data[b].azimuth_index[0], MASA_NO_INDEX ) ) - { - q_direction->band_data[b].azimuth_index[0] = 0; - move16(); - } + return 0; } - /* quantize average elevation and azimuth angles */ - IF( q_direction->not_in_2D > 0 ) + IF( NE_32( mc_format, MC_LS_SETUP_INVALID ) ) { - FOR( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, q_direction->band_data[b].spherical_index[0], q_direction->band_data[b].bits_sph_idx[0] ); - } + id_phi = quantize_phi_chan_compand_fx( L_add( phi, DEGREE_180_Q_22 ), phi_q, no_cw, 0, mc_format ); } ELSE { - FOR( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].azimuth_index[0], q_direction->band_data[b].azimuth_m_alphabet[0] ); - } + id_phi = quantize_phi_enc_fx( L_add( phi, DEGREE_180_Q_22 ), 0, phi_q, no_cw ); } + *phi_q = L_sub( *phi_q, DEGREE_180_Q_22 ); + move32(); + *index_phi = ivas_qmetadata_reorder_generic_fx( sub( id_phi, shr( no_cw, 1 ) ) ); + move16(); - /* fill bits*/ - assert( ( hMetaData->nb_bits_tot - bit_pos_start ) <= metadata_sid_bits && "Too many written bits!" ); - WHILE( LT_16( ( sub( hMetaData->nb_bits_tot, bit_pos_start ) ), metadata_sid_bits ) ) - { - push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ - } + idx_sph = id_phi; + move16(); - return; + return idx_sph; } -#else -void ivas_qmetadata_enc_sid_encode( - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - IVAS_QMETADATA *q_metadata, /* i/o: metadata handle */ - const int16_t masa_sid_descriptor, /* i : description of MASA SID coding structure */ - const int16_t ivas_format /* i : IVAS format */ -) -{ - int16_t b, m; - int16_t bit_pos_start; - IVAS_QDIRECTION *q_direction; - int16_t nbands, nblocks, start_band; - float avg_direction_vector[3]; - float direction_vector[3]; - float avg_azimuth[MASA_MAXIMUM_CODING_SUBBANDS]; - float avg_elevation[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t bits_dir, bits_diff, bits_delta; - int16_t metadata_sid_bits; /* bits allocated to SID for metadata */ - - if ( ivas_format == SBA_FORMAT ) - { - metadata_sid_bits = (int16_t) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - ( SPAR_DTX_BANDS * SPAR_SID_BITS_TAR_PER_BAND ) - 2 - SID_FORMAT_NBITS; /* -1 for inactive mode header bit*/ - } - else - { - metadata_sid_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - } - - - /* Save initial position in bitstream */ - bit_pos_start = hMetaData->nb_bits_tot; - - /* write for MASA the number of transport channels used at coding and the CPE mode DFT/MDCT */ - if ( masa_sid_descriptor > -1 ) - { - push_next_indice( hMetaData, masa_sid_descriptor, 1 ); - } - - /* Code for one direction: diffuseness and average DOA(s)*/ - q_direction = &( q_metadata->q_direction[0] ); - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - start_band = 0; /*Start always with band 0 for SID*/ - /* sanity checks*/ - assert( q_metadata->no_directions == 1 && "Qmetadata SID: only one direction supported!" ); - if ( ivas_format == SBA_FORMAT ) - { - assert( ( q_direction->cfg.nbands == DIRAC_DTX_BANDS ) && "Qmetadata SID: only 2 bands supported!" ); - } - else - { - assert( ( q_direction->cfg.nbands == 5 ) && "Qmetadata SID: only 5 bands supported!" ); - } +static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( + IVAS_QMETADATA_HANDLE hQMetaData, + Word16 *needed_bits, + const Word16 bits_dir_hr, + BSTR_ENC_HANDLE hMetaData ) +{ + Word16 j, k; + Word16 index; - if ( ivas_format != SBA_FORMAT ) - { - /* Signalling 2D*/ - push_next_indice( hMetaData, ( q_direction->not_in_2D > 0 ), 1 ); /*2D flag*/ - } - else - { - q_direction->not_in_2D = 1; /* force for merged modes */ - } + needed_bits[0] = 0; + needed_bits[1] = 0; + move16(); + move16(); - /*Encode the quantized diffuseness in raw coding*/ - bits_dir = 0; - bits_diff = 0; - if ( ivas_format != SBA_FORMAT ) + FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) { - for ( b = start_band; b < nbands; b++ ) + FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) { - q_direction->band_data[b].energy_ratio_index[0] = max( q_direction->band_data[b].energy_ratio_index[0], 4 ); - bits_diff += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0] - 4, DIRAC_DIFFUSE_LEVELS - 4 ); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; + index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); - if ( q_direction->not_in_2D == 0 ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); - bits_dir += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].azimuth_m_alphabet[0] - 1, q_direction->band_data[b].azimuth_m_alphabet[0] ); - } - else - { - bits_dir += q_direction->band_data[b].bits_sph_idx[0]; - } + push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index; + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index; + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); // Q30 + needed_bits[0] = add( needed_bits[0], MASA_BITS_ER_HR ); + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_dir_hr; + move16(); + move16(); + move32(); + move16(); + move16(); } + } - /* Reduce bit demand by increasing diffuseness*/ - bits_delta = metadata_sid_bits - ( hMetaData->nb_bits_tot - bit_pos_start ) - bits_diff - bits_dir; - if ( bits_delta > 0 ) + IF( EQ_16( hQMetaData->no_directions, 2 ) ) + { + Word32 ratioSum; + Word16 div_e; + IF( EQ_16( bits_dir_hr, 16 ) ) { - while ( bits_delta > 0 ) + FOR( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) { - for ( b = start_band; b < nbands && ( bits_delta > 0 ); b++ ) + FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { - if ( q_direction->band_data[b].bits_sph_idx[0] < 11 ) + index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); + + push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); + hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; + move16(); + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); + move32(); + + ratioSum = L_add( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ); + IF( GT_32( ratioSum, ONE_IN_Q30 /*1.0f*/ ) ) { - bits_delta -= 1; - q_direction->band_data[b].bits_sph_idx[0]++; + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); + move32(); + move32(); + + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); + move32(); + move32(); } - } - } - if ( q_direction->not_in_2D == 0 ) - { - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); + needed_bits[1] = add( needed_bits[1], MASA_BITS_ER_HR ); + move16(); + hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; + move16(); } } } - else + ELSE { - while ( bits_delta < 0 ) + Word16 pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; + k = 0; + move16(); + FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; j++ ) { - for ( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) + IF( EQ_16( hQMetaData->twoDirBands[j], 1 ) ) { - if ( q_direction->band_data[b].bits_sph_idx[0] >= 4 ) - { - bits_delta += 1; - q_direction->band_data[b].bits_sph_idx[0]--; - if ( q_direction->not_in_2D == 0 ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 8, q_direction->band_data[b].bits_sph_idx[0] ) ); - } - } + pos_2dir_band[k] = j; + move16(); + k = add( k, 1 ); } - } - } - } - else - { - for ( b = start_band; b < nbands; b++ ) - { - q_direction->band_data[b].energy_ratio_index[0] = max( q_direction->band_data[b].energy_ratio_index[0], 4 ); - bits_diff += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0] - 4, DIRAC_DIFFUSE_LEVELS - 4 ); - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; - - if ( q_direction->not_in_2D == 0 ) - { - q_direction->band_data[b].azimuth_m_alphabet[0] = 1 << ( min( 5, q_direction->band_data[b].bits_sph_idx[0] ) ); - bits_dir += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].azimuth_m_alphabet[0] - 1, q_direction->band_data[b].azimuth_m_alphabet[0] ); - } - else - { - bits_dir += q_direction->band_data[b].bits_sph_idx[0]; - } - } - - /* Reduce bit demand by increasing diffuseness*/ - bits_delta = metadata_sid_bits - ( hMetaData->nb_bits_tot - bit_pos_start ) - bits_diff - bits_dir; - - while ( bits_delta < 0 && ( q_direction->not_in_2D > 0 ) ) - { - for ( b = nbands - 1; b >= start_band && ( bits_delta < 0 ); b-- ) - { - if ( q_direction->band_data[b].energy_ratio_index[0] < ( DIRAC_DIFFUSE_LEVELS - 1 ) ) + ELSE { - bits_delta += q_direction->band_data[b].bits_sph_idx[0]; - q_direction->band_data[b].energy_ratio_index[0]++; - q_direction->band_data[b].bits_sph_idx[0] = bits_direction_masa[q_direction->band_data[b].energy_ratio_index[0]]; - bits_delta -= q_direction->band_data[b].bits_sph_idx[0]; + pos_2dir_band[k] = 0; + move16(); } } - } - } - assert( ( bits_delta >= 0 ) && "Bit budget in Qmetadata SID is violated!!!" ); - - /*Code diffuseness*/ - for ( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - 4, DIRAC_DIFFUSE_LEVELS - 4 ); - } - - /* Compute and Quantize an average direction per band*/ - for ( b = start_band; b < nbands; b++ ) - { - set_zero( avg_direction_vector, 3 ); - for ( m = 0; m < nblocks; m++ ) - { - /*compute the average direction */ - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[b].azimuth[m], q_direction->band_data[b].elevation[m], direction_vector ); - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); - } + FOR( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) + { + FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth[b], &avg_elevation[b] ); + push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); + hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; + move16(); + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); + move32(); - /* Quantize the average direction */ - if ( q_direction->not_in_2D == 0 ) - { - avg_elevation[b] = 0; - q_direction->band_data[b].spherical_index[0] = quantize_direction2D( avg_azimuth[b], q_direction->band_data[b].azimuth_m_alphabet[0], &avg_azimuth[b], - &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); - } - else - { - q_direction->band_data[b].spherical_index[0] = quantize_direction( avg_elevation[b], avg_azimuth[b], q_direction->band_data[b].bits_sph_idx[0], &avg_elevation[b], &avg_azimuth[b], - &q_direction->band_data[b].elevation_index[0], &q_direction->band_data[b].azimuth_index[0], q_direction->cfg.mc_ls_setup ); - } + ratioSum = L_add( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ); - /* Save quantized DOAs */ - q_direction->band_data[b].q_azimuth[0] = avg_azimuth[b]; - q_direction->band_data[b].q_elevation[0] = avg_elevation[b]; + IF( GT_32( ratioSum, ONE_IN_Q30 /*1.0f*/ ) ) + { + hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], ratioSum, &div_e ); + hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], sub( div_e, 1 ) ); + move32(); + move32(); - if ( q_direction->band_data[b].azimuth_index[0] == MASA_NO_INDEX ) - { - q_direction->band_data[b].azimuth_index[0] = 0; - } - } + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); + hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); + move32(); + move32(); + } - /* quantize average elevation and azimuth angles */ - if ( q_direction->not_in_2D > 0 ) - { - for ( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, q_direction->band_data[b].spherical_index[0], q_direction->band_data[b].bits_sph_idx[0] ); - } - } - else - { - for ( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].azimuth_index[0], q_direction->band_data[b].azimuth_m_alphabet[0] ); + needed_bits[1] = add( needed_bits[1], MASA_BITS_ER_HR ); + move16(); + hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; + move16(); + } + } } } - - /* fill bits*/ - assert( ( hMetaData->nb_bits_tot - bit_pos_start ) <= metadata_sid_bits && "Too many written bits!" ); - while ( ( hMetaData->nb_bits_tot - bit_pos_start ) < metadata_sid_bits ) - { - push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ - } - return; } -#endif /*------------------------------------------------------------------------- - * reset_metadata_spatial() + * ivas_qmetadata_quantize_diffuseness_nrg_ratios() * - * Reset metadata in spatial formats + * Quantize diffuseness *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void reset_metadata_spatial_fx( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - const Word32 element_brate, /* i : element bitrate */ - Word32 *total_brate, /* o : total bitrate */ - const Word32 core_brate, /* i : core bitrate */ - const Word16 nb_bits_metadata /* i : number of meatdata bits */ -) + +static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( + IVAS_QMETADATA_HANDLE hQMetaData, + Word16 *needed_bits, + Word16 *nbits_diff, + Word16 *dfRatioBits, + const Word16 hodirac_flag ) { - Word16 i, next_ind_sid, last_ind_sid; - Word16 j; - Word16 metadata_sid_bits; + Word16 j, k, dir2band; + Word16 index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; + Word16 index_diff; - test(); - IF( EQ_32( core_brate, SID_2k40 ) || core_brate == FRAME_NO_DATA ) - { - test(); - test(); - IF( ( EQ_32( ivas_format, SBA_FORMAT ) || EQ_32( ivas_format, MASA_FORMAT ) ) && core_brate != FRAME_NO_DATA ) + nbits_diff[0] = 0; + nbits_diff[1] = 0; + needed_bits[0] = 0; + needed_bits[1] = 0; + dir2band = 0; + move16(); + move16(); + move16(); + move16(); + move16(); + + FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + { + test(); + IF( EQ_32( hQMetaData->no_directions, 2 ) && EQ_16( hQMetaData->twoDirBands[j], 1 ) ) { - IF( EQ_32( ivas_format, SBA_FORMAT ) ) - { - hMetaData->ind_list[0].value = 1; - move16(); - metadata_sid_bits = (Word16) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - move16(); + Word32 diffRatio, dfRatio, dfRatioQ, diffRatioQ, dirRatio1Q, dirRatio2Q; /* Q30 */ + Word32 dirRatio1, dirRatio2, sumRatio; /* Q30 */ + Word16 dfRatio_index, dfRatio_qsteps, dfRatio_bits; - WHILE( LT_16( hMetaData->nb_bits_tot, metadata_sid_bits ) ) - { - push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ - } + /* With 2dir metadata, we quantize and transmit diffuse-to-total ratio (diffRatio) and + * distribution factor of direct-to-total ratios (dFRatio). This is more efficient and + * accurate than simple separate quantization of each direct-to-total ratio or their + * separate inverses. */ + IF( hodirac_flag ) + { + /* already encoded as total and ratios in HO-DirAC */ + diffRatio = L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ); // Q30 + dfRatio = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 + move32(); } ELSE { - /* Reset metadata and keep only SID metadata*/ - last_ind_sid = hMetaData->nb_ind_tot; - next_ind_sid = hMetaData->nb_ind_tot; - move16(); - move16(); - WHILE( GT_16( hMetaData->nb_bits_tot, nb_bits_metadata ) ) + dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0]; // Q30 + move32(); + dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 + move32(); + sumRatio = L_add( dirRatio1, dirRatio2 ); // Q30 + diffRatio = L_sub( ONE_IN_Q30, sumRatio ); // Q30 + IF( LT_32( sumRatio, EPSILON_FIX ) ) { - next_ind_sid--; - hMetaData->nb_bits_tot = sub( hMetaData->nb_bits_tot, hMetaData->ind_list[next_ind_sid].nb_bits ); - move16(); + dfRatio = ONE_IN_Q29 /* 0.5f in Q30*/; // Q30 + move32(); } - - hMetaData->nb_bits_tot = 0; - move16(); - - FOR( i = 0; i < next_ind_sid; i++ ) + ELSE { - hMetaData->ind_list[i].nb_bits = -1; - move16(); + Word16 exp_diff; + dfRatio = L_deposit_h( BASOP_Util_Divide3232_Scale( dirRatio1, sumRatio, &exp_diff ) ); + dfRatio = L_shl( dfRatio, sub( exp_diff, Q1 ) ); // Q30 } + } - FOR( ( j = 0, i = next_ind_sid ); i < last_ind_sid; ( i++, j++ ) ) - { - hMetaData->ind_list[j].value = hMetaData->ind_list[i].value; - hMetaData->ind_list[j].nb_bits = hMetaData->ind_list[i].nb_bits; - hMetaData->nb_bits_tot = add( hMetaData->nb_bits_tot, hMetaData->ind_list[j].nb_bits ); - hMetaData->ind_list[i].nb_bits = -1; - move16(); - move16(); - move16(); - move16(); - } - hMetaData->nb_ind_tot = j; - move16(); + index_diff = masa_sq_fx( diffRatio, diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); + diffRatioQ = diffuseness_reconstructions_fx[index_diff]; // Q30 + move32(); + + IF( hodirac_flag ) + { + dfRatio_bits = ivas_get_df_ratio_bits_hodirac_fx( index_diff ); + } + ELSE + { + dfRatio_bits = ivas_get_df_ratio_bits_fx( index_diff ); } - } - ELSE - { - /*Reset metadata*/ - reset_indices_enc( hMetaData, hMetaData->nb_ind_tot ); - } - *total_brate = element_brate; - move32(); - } - ELSE IF( NE_32( ivas_format, SBA_FORMAT ) ) - { - /* Reset SID metadata bits*/ - WHILE( GT_16( hMetaData->nb_bits_tot, nb_bits_metadata ) ) - { - hMetaData->nb_ind_tot--; - hMetaData->nb_bits_tot = sub( hMetaData->nb_bits_tot, hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits ); - hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits = -1; - move16(); - move16(); + dfRatioBits[dir2band] = dfRatio_bits; move16(); - } - } - return; -} -#else -void reset_metadata_spatial( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - const int32_t element_brate, /* i : element bitrate */ - int32_t *total_brate, /* o : total bitrate */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t nb_bits_metadata /* i : number of meatdata bits */ -) -{ - int16_t i, next_ind_sid, last_ind_sid; - int16_t j; - int16_t metadata_sid_bits; + dfRatio_qsteps = shl( 1, dfRatio_bits ); + IF( hodirac_flag ) + { + Word16 dfRatioQ16; /* Q14 */ + dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, 0, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 2 ), dfRatio_qsteps ); + dfRatioQ = L_deposit_h( dfRatioQ16 ); // Q30 + dirRatio1Q = L_sub( ONE_IN_Q30, diffRatioQ ); // Q30 + dirRatio2Q = dfRatioQ; // Q30 + move32(); + } + ELSE + { + Word16 dfRatioQ16; /* Q14 */ + dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, ONE_IN_Q13 /* 0.5f in Q14 */, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 3 ), dfRatio_qsteps ); - if ( core_brate == SID_2k40 || core_brate == FRAME_NO_DATA ) - { - if ( ( ivas_format == SBA_FORMAT || ivas_format == MASA_FORMAT ) && core_brate != FRAME_NO_DATA ) - { - if ( ivas_format == SBA_FORMAT ) + /* Direction quantization requires also separately quantized direct-to-total ratios. Thus, we calculate them. */ + dirRatio1Q = L_shl( Mpy_32_16_1( L_sub( ONE_IN_Q30, diffRatioQ ), dfRatioQ16 ), 1 ); // Q30 + dirRatio2Q = L_sub( L_sub( ONE_IN_Q30, diffRatioQ ), dirRatio1Q ); // Q30 + } + + index_dirRatio1Inv = masa_sq_fx( L_sub( ONE_IN_Q30, dirRatio1Q ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); + + /* Note: To save memory, we store temporarily index_diff and dfRatio_index into first and second direction + * energy ratio index variables until they have been encoded. index_dirRatio1Inv and index_dirRatio2Inv are + * then later retrieved for further use in encoding. */ + FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) { - hMetaData->ind_list[0].value = 1; - metadata_sid_bits = (int16_t) ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; // Q0 + move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = dirRatio1Q; // Q30 + move32(); + } + nbits_diff[0] = add( nbits_diff[0], MASA_BITS_ER ); + move16(); - while ( hMetaData->nb_bits_tot < metadata_sid_bits ) - { - push_next_indice( hMetaData, 0, 1 ); /*fill bit*/ - } + IF( hodirac_flag ) + { + Word16 tmp; /* Q14 */ + index_dirRatio2Inv = usquant_fx( extract_h( dirRatio2Q ), &tmp /* Q14 */, 0, shr( div_s( 1, sub( DIRAC_DIFFUSE_LEVELS, 1 ) ), 2 ), DIRAC_DIFFUSE_LEVELS ); } - else + ELSE { - /* Reset metadata and keep only SID metadata*/ - last_ind_sid = hMetaData->nb_ind_tot; - next_ind_sid = hMetaData->nb_ind_tot; - while ( hMetaData->nb_bits_tot > nb_bits_metadata ) - { - next_ind_sid--; - hMetaData->nb_bits_tot -= hMetaData->ind_list[next_ind_sid].nb_bits; - } + index_dirRatio2Inv = masa_sq_fx( L_sub( ONE_IN_Q30, dirRatio2Q ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); + } - hMetaData->nb_bits_tot = 0; + FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; // Q0 + move16(); + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[k] = dirRatio2Q; // Q30 + move32(); + } + nbits_diff[1] = add( nbits_diff[1], dfRatio_bits ); + move16(); - for ( i = 0; i < next_ind_sid; i++ ) - { - hMetaData->ind_list[i].nb_bits = -1; - } + /* Obtain compensated direct-to-total ratios for direction quantization. This compensates for the + * fact that with 2dir data, it is harder to achieve separate high direct-to-total ratio values + * which are assumed by the direction quantization system. In practice, this improves direction + * accuracy when it is perceptual meaningful. */ + masa_compensate_two_dir_energy_ratio_index_fx( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod, hodirac_flag ); - for ( j = 0, i = next_ind_sid; i < last_ind_sid; i++, j++ ) - { - hMetaData->ind_list[j].value = hMetaData->ind_list[i].value; - hMetaData->ind_list[j].nb_bits = hMetaData->ind_list[i].nb_bits; - hMetaData->nb_bits_tot += hMetaData->ind_list[j].nb_bits; - hMetaData->ind_list[i].nb_bits = -1; - } + FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv_mod; + move16(); + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; + move16(); + } + needed_bits[0] = add( needed_bits[0], imult1616( hQMetaData->q_direction[0].cfg.nblocks, bits_direction_masa[index_dirRatio1Inv_mod] ) ); + move16(); - hMetaData->nb_ind_tot = j; + FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[k] = index_dirRatio2Inv_mod; + move16(); + hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; + move16(); } + needed_bits[1] = add( needed_bits[1], imult1616( hQMetaData->q_direction[1].cfg.nblocks, bits_direction_masa[index_dirRatio2Inv_mod] ) ); + move16(); + + dir2band = add( dir2band, 1 ); } - else + ELSE { - /*Reset metadata*/ - reset_indices_enc( hMetaData, hMetaData->nb_ind_tot ); - } + index_dirRatio1Inv = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - *total_brate = element_brate; - } - else if ( ivas_format != SBA_FORMAT ) - { - /* Reset SID metadata bits*/ - while ( hMetaData->nb_bits_tot > nb_bits_metadata ) - { - hMetaData->nb_ind_tot--; - hMetaData->nb_bits_tot -= hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits; - hMetaData->ind_list[hMetaData->nb_ind_tot].nb_bits = -1; + FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + { + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; + move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; + move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[index_dirRatio1Inv] ); // Q30 + move32(); + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; + move16(); + } + + nbits_diff[0] = add( nbits_diff[0], MASA_BITS_ER ); + move16(); + + needed_bits[0] = add( needed_bits[0], imult1616( hQMetaData->q_direction[0].cfg.nblocks, bits_direction_masa[index_dirRatio1Inv] ) ); + move16(); } } return; } -#endif /*------------------------------------------------------------------------- - * quantize_direction2D() + * ivas_diffuseness_huff_ec_encode() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: quantized spherical index */ -Word16 quantize_direction2D_fx( - Word32 phi, /* i : input azimuth value Q22 */ - const Word16 no_cw, /* i : number of bits */ - Word32 *phi_q, /* o : quantized azimuth value Q22 */ - UWord16 *index_phi, /* o : quantized azimuth index */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) +static Word16 ivas_diffuseness_huff_ec_encode_fx( + BSTR_ENC_HANDLE hMetaData, + const UWord16 idx ) { - Word16 idx_sph; - UWord16 id_phi; - IF( LT_16( no_cw, 2 ) ) + Word16 nbits; + nbits = 0; + move16(); + IF( LE_16( idx, DIFF_EC_HUFF_GR0_LIMIT ) ) { - *phi_q = 0; - move32(); - - return 0; + IF( idx > 0 ) + { + push_next_indice( hMetaData, (UWord16) L_sub( L_shl( 1, idx ), 1 ), idx ); + nbits = add( nbits, idx ); + } + push_next_indice( hMetaData, 0, 1 ); + nbits = add( nbits, 1 ); } - - IF( NE_32( mc_format, MC_LS_SETUP_INVALID ) ) + ELSE { - id_phi = quantize_phi_chan_compand_fx( L_add( phi, DEGREE_180_Q_22 ), phi_q, no_cw, 0, mc_format ); + push_next_indice( hMetaData, 511, DIFF_EC_HUFF_GR0_LIMIT + 1 ); + push_next_indice( hMetaData, (UWord16) L_sub( idx, DIFF_EC_HUFF_GR0_LIMIT + 1 ), 2 ); + nbits = add( nbits, DIFF_EC_HUFF_GR0_LIMIT + 3 ); } - ELSE + return nbits; +} + +/*------------------------------------------------------------------------- + * ivas_diffuseness_huff_ec_prepare() + * + * + *------------------------------------------------------------------------*/ +static void ivas_diffuseness_huff_ec_prepare_fx( + IVAS_QDIRECTION *q_direction, + Word16 *best_av, + UWord16 *avr_idx, + Word16 *diffuseness_bits_huff ) +{ + Word16 bits; + Word16 av_crt; + Word16 av; + Word16 av_e; + Word16 sh_idx; + UWord16 ui_sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 b, start_band, nbands; + + start_band = q_direction->cfg.start_band; + move16(); + nbands = q_direction->cfg.nbands; + move16(); + + *diffuseness_bits_huff = 0; + move16(); + av = 0; + move16(); + FOR( b = start_band; b < nbands; b++ ) { - id_phi = quantize_phi_enc_fx( L_add( phi, DEGREE_180_Q_22 ), 0, phi_q, no_cw ); + av = add( av, q_direction->band_data[b].energy_ratio_index[0] ); } - *phi_q = L_sub( *phi_q, DEGREE_180_Q_22 ); - move32(); + // av = (int16_t) ( 0.5f + av / (float) nbands ); + av = BASOP_Util_Divide1616_Scale( av, nbands, &av_e ); + av = shr_r( av, sub( 15, av_e ) ); + *best_av = av; + move16(); - *index_phi = ivas_qmetadata_reorder_generic( sub( id_phi, shr( no_cw, 1 ) ) ); + *diffuseness_bits_huff = MAX16B; move16(); + FOR( av_crt = av - 1; av_crt <= av + 1; av_crt++ ) + { + bits = 0; + move16(); + FOR( b = start_band; b < nbands; b++ ) + { + sh_idx = sub( q_direction->band_data[b].energy_ratio_index[0], av_crt ); + // ui_sh_idx[b] = ( sh_idx <= 0 ) ? ( -2 * sh_idx ) : sh_idx * 2 - 1; + IF( sh_idx <= 0 ) + { + ui_sh_idx[b] = negate( shl( sh_idx, 1 ) ); + } + ELSE + { + ui_sh_idx[b] = sub( shl( sh_idx, 1 ), 1 ); + } + move16(); + if ( GE_32( ui_sh_idx[b], 2 * DIRAC_DIFFUSE_LEVELS - 3 ) ) + { + bits = 100; /* to avoid difference larger than 6 in absolute value */ + move16(); + } - idx_sph = id_phi; + // bits += ( ui_sh_idx[b] <= DIFF_EC_HUFF_GR0_LIMIT ) ? ( ui_sh_idx[b] + 1 ) : 11; + IF( LE_32( ui_sh_idx[b], DIFF_EC_HUFF_GR0_LIMIT ) ) + { + bits = add( bits, add( ui_sh_idx[b], 1 ) ); + } + ELSE + { + bits = add( bits, 11 ); + } + } + + IF( LT_16( bits, *diffuseness_bits_huff ) ) + { + *diffuseness_bits_huff = bits; + move16(); + Copy( (Word16 *) ui_sh_idx, (Word16 *) avr_idx, nbands ); + *best_av = av_crt; + move16(); + } + } + + *diffuseness_bits_huff = add( *diffuseness_bits_huff, MASA_BITS_ER ); /* for the average */ move16(); - return idx_sph; + return; } -#else -int16_t quantize_direction2D( - float phi, /* i : input azimuth value */ - const int16_t no_cw, /* i : number of bits */ - float *phi_q, /* o : quantized azimuth value */ - uint16_t *index_phi, /* o : quantized azimuth index */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_diffuseness() + * + * encode diffuseness + *------------------------------------------------------------------------*/ +static Word16 ivas_qmetadata_entropy_encode_diffuseness_fx( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + UWord16 *diffuseness_index_max_ec_frame ) { - int16_t idx_sph; - uint16_t id_phi; - if ( no_cw < 2 ) - { - *phi_q = 0; + Word16 start_bit_pos; + Word16 diffuseness_bits_raw; + Word16 b; + Word16 min_diffuseness_m_index, max_diffuseness_m_index; + Word16 nbands; + Word16 start_band; - return 0; - } + nbands = q_direction->cfg.nbands; + move16(); + start_band = q_direction->cfg.start_band; + move16(); + + start_bit_pos = hMetaData->nb_bits_tot; + move16(); - if ( mc_format != MC_LS_SETUP_INVALID ) + IF( EQ_16( nbands, 1 ) ) { - id_phi = quantize_phi_chan_compand( phi + 180, phi_q, no_cw, 0, mc_format ); + /* If there is only one band, diffuseness should be coded directly as raw with no signaling. */ + push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], MASA_BITS_ER ); + *diffuseness_index_max_ec_frame = 5; + move16(); + return sub( hMetaData->nb_bits_tot, start_bit_pos ); } - else + + /* compute the number of raw coding bits */ + diffuseness_bits_raw = 0; + move16(); + FOR( b = start_band; b < nbands; b++ ) { - id_phi = quantize_phi( phi + 180, 0, phi_q, no_cw ); + diffuseness_bits_raw = add( diffuseness_bits_raw, ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ) ); } - *phi_q -= 180; - *index_phi = ivas_qmetadata_reorder_generic( id_phi - ( no_cw >> 1 ) ); - - idx_sph = id_phi; - - return idx_sph; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512_fx( - IVAS_QMETADATA_HANDLE hQMetaData, - Word16 *needed_bits, - const Word16 bits_dir_hr, - BSTR_ENC_HANDLE hMetaData ) -{ - Word16 j, k; - Word16 index; - needed_bits[0] = 0; - needed_bits[1] = 0; + min_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; move16(); + max_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; move16(); - FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + FOR( b = start_band; b < nbands; b++ ) { - FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + if ( LT_16( q_direction->band_data[b].energy_ratio_index[0], min_diffuseness_m_index ) ) { - index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); - - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index; - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); // Q30 - needed_bits[0] = add( needed_bits[0], MASA_BITS_ER_HR ); - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_dir_hr; - move16(); - move16(); - move32(); + min_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; move16(); + } + + if ( GT_16( q_direction->band_data[b].energy_ratio_index[0], max_diffuseness_m_index ) ) + { + max_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; move16(); } } - IF( EQ_16( hQMetaData->no_directions, 2 ) ) + IF( LT_16( nbands, DIFF_EC_HUFF_BAND_LIMIT ) ) { - Word32 ratioSum; - Word16 div_e; - IF( EQ_16( bits_dir_hr, 16 ) ) + /* Use similarity coding approach or raw coding when there is a low number of bands. */ + /* one bit is used to indicate whether diffuseness values are entropy coded or coded raw */ + IF( EQ_16( min_diffuseness_m_index, max_diffuseness_m_index ) ) /* all values are equal */ { - FOR( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) - { - FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); - - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; - move16(); - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); - move32(); - - ratioSum = L_add( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ); - IF( GT_32( ratioSum, ONE_IN_Q30 /*1.0f*/ ) ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); - move32(); - move32(); - - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); - move32(); - move32(); - } + push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ + push_next_indice( hMetaData, 1, 1 ); /* dif_have_unique_value */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ + } + ELSE IF( EQ_16( add( min_diffuseness_m_index, 1 ), max_diffuseness_m_index ) ) /* only two consecutive values are present */ + { + push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ + push_next_indice( hMetaData, 0, 1 ); /* dif_have_unique_value */ + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ - needed_bits[1] = add( needed_bits[1], MASA_BITS_ER_HR ); - move16(); - hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; - move16(); - } + FOR( b = start_band; b < nbands; b++ ) + { + push_next_indice( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], min_diffuseness_m_index ), 1 ); /* dif_bit_offset_values */ } } - ELSE + ELSE /* raw coding */ { - Word16 pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - k = 0; - move16(); - FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; j++ ) + push_next_indice( hMetaData, 1, 1 ); /* dif_use_raw_coding */ + + FOR( b = start_band; b < nbands; b++ ) { - IF( EQ_16( hQMetaData->twoDirBands[j], 1 ) ) - { - pos_2dir_band[k] = j; - move16(); - k = add( k, 1 ); - } - ELSE - { - pos_2dir_band[k] = 0; - move16(); - } + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ } - FOR( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) - { - FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - index = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ), diffuseness_thresholds_hr_fx, HR_MASA_ER_LEVELS ); - - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; - move16(); - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = W_extract_h( W_sub( ONE_IN_Q62, diffuseness_reconstructions_hr_fx[index] ) ); - move32(); - - ratioSum = L_add( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] ); - - IF( GT_32( ratioSum, ONE_IN_Q30 /*1.0f*/ ) ) - { - hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], ratioSum, &div_e ); - hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio_fx[k], sub( div_e, 1 ) ); - move32(); - move32(); + } + } + ELSE + { + /* Use Huffman-coding approach or raw coding when there is a high number of bands. */ + Word16 diffuseness_bits_huff; + Word16 best_av; + UWord16 avr_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = BASOP_Util_Divide3232_Scale_cadence( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], ratioSum, &div_e ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k] = L_shl( hQMetaData->q_direction[1].band_data[j].energy_ratio_fx[k], sub( div_e, 1 ) ); - move32(); - move32(); - } + /* First, obtain average indices and bit usage for Huffman-coding. */ + ivas_diffuseness_huff_ec_prepare_fx( q_direction, &best_av, avr_idx, &diffuseness_bits_huff ); - needed_bits[1] = add( needed_bits[1], MASA_BITS_ER_HR ); - move16(); - hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; - move16(); - } + /* If there is benefit, use Huffman-coding. Otherwise, use raw coding. */ + IF( LT_16( diffuseness_bits_huff, diffuseness_bits_raw ) ) + { + /* Signal Huffman EC */ + push_next_indice( hMetaData, 0, 1 ); + push_next_indice( hMetaData, best_av, MASA_BITS_ER ); + FOR( b = start_band; b < nbands; b++ ) + { + ivas_diffuseness_huff_ec_encode_fx( hMetaData, avr_idx[b] ); + } + } + ELSE + { + /* Signal raw */ + push_next_indice( hMetaData, 1, 1 ); + FOR( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ } } } - return; + *diffuseness_index_max_ec_frame = 5; + move16(); + /* adaptively select the diffuseness_index_max_ec threshold */ + if ( GT_16( min_diffuseness_m_index, 5 ) ) + { + *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; + move16(); + } + + + return sub( hMetaData->nb_bits_tot, start_bit_pos ); } -#else -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_hr_512( - IVAS_QMETADATA_HANDLE hQMetaData, - int16_t *needed_bits, - const int16_t bits_dir_hr, - BSTR_ENC_HANDLE hMetaData ) + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_df_ratio() + * + * encode dfRatio + *------------------------------------------------------------------------*/ +static Word16 ivas_qmetadata_entropy_encode_df_ratio_fx( + BSTR_ENC_HANDLE hMetaData, + IVAS_QDIRECTION *q_direction, + Word16 *df_ratio_bits ) { - int16_t j, k; - int16_t index; + Word16 start_bit_pos; + Word16 bits_raw; + Word16 b; + Word16 min_index, max_index; + Word16 nbands, start_band; + Word16 max_df_ratio_bits; + Word16 ec_mode = 0; + move16(); + Word16 max_alphabet_size; - needed_bits[0] = 0; - needed_bits[1] = 0; + nbands = q_direction->cfg.nbands; + move16(); + start_band = q_direction->cfg.start_band; + move16(); + + start_bit_pos = hMetaData->nb_bits_tot; + move16(); + + IF( EQ_16( nbands, 1 ) ) + { + /* If there is only one band, ratio should be coded directly as raw with no signaling. */ + push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], df_ratio_bits[0] ); + + return sub( hMetaData->nb_bits_tot, start_bit_pos ); + } + + /* compute the number of raw coding bits */ + bits_raw = 0; + move16(); + max_df_ratio_bits = 0; + move16(); + FOR( b = start_band; b < nbands; b++ ) + { + bits_raw = add( bits_raw, df_ratio_bits[b] ); + max_df_ratio_bits = s_max( df_ratio_bits[b], max_df_ratio_bits ); + } - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + min_index = q_direction->band_data[start_band].energy_ratio_index[0]; + move16(); + max_index = q_direction->band_data[start_band].energy_ratio_index[0]; + move16(); + FOR( b = start_band; b < nbands; b++ ) { - for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) + if ( LT_16( q_direction->band_data[b].energy_ratio_index[0], min_index ) ) { - index = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index; - hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; - needed_bits[0] += MASA_BITS_ER_HR; - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_dir_hr; + min_index = q_direction->band_data[b].energy_ratio_index[0]; + move16(); + } + + if ( GT_16( q_direction->band_data[b].energy_ratio_index[0], max_index ) ) + { + max_index = q_direction->band_data[b].energy_ratio_index[0]; + move16(); } } - if ( hQMetaData->no_directions == 2 ) + /* Decide what modes are possible */ + IF( GE_16( bits_raw, add( add( max_df_ratio_bits, 2 ), nbands ) ) ) + { + ec_mode = 2; + } + ELSE IF( GE_16( bits_raw, add( max_df_ratio_bits, 1 ) ) ) + { + ec_mode = 1; + } + ELSE + { + ec_mode = 0; + } + move16(); + max_alphabet_size = shl( 1, max_df_ratio_bits ); + + test(); + test(); + IF( EQ_16( min_index, max_index ) && ec_mode > 0 ) /* all values are equal */ { - float ratioSum; - if ( bits_dir_hr == 16 ) + push_next_indice( hMetaData, 0, 1 ); /* Signal between EC and raw */ + IF( GT_16( ec_mode, 1 ) ) { - for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) - { - for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; - hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; + /* Only use bit for signaling if necessary */ + push_next_indice( hMetaData, 0, 1 ); /* Signal between one value or bandwise diff mode */ + } - ratioSum = hQMetaData->q_direction[0].band_data[j].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; - if ( ratioSum > 1.0f ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio[k] /= ratioSum; - hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; - } + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size ); + } + ELSE IF( EQ_16( add( min_index, 1 ), max_index ) && GT_16( ec_mode, 1 ) ) /* only two consecutive values are present */ + { + push_next_indice( hMetaData, 0, 1 ); + push_next_indice( hMetaData, 1, 1 ); + ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, sub( max_alphabet_size, 1 ) ); - needed_bits[1] += MASA_BITS_ER_HR; - hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; - } - } + FOR( b = start_band; b < nbands; b++ ) + { + push_next_indice( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], min_index ), 1 ); /* Band-wise offset values */ } - else + } + ELSE /* raw coding */ + { + IF( ec_mode > 0 ) { - int16_t pos_2dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - k = 0; - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; j++ ) - { - if ( hQMetaData->twoDirBands[j] == 1 ) - { - pos_2dir_band[k] = j; - k++; - } - else - { - pos_2dir_band[k] = 0; - } - } - for ( j = hQMetaData->q_direction[1].cfg.start_band; j < hQMetaData->q_direction[1].cfg.nbands; j++ ) - { - for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - index = masa_sq( 1.0f - hQMetaData->q_direction[1].band_data[j].energy_ratio[k], diffuseness_thresholds_hr, HR_MASA_ER_LEVELS ); - push_next_indice( hMetaData, index, MASA_BITS_ER_HR ); - hQMetaData->q_direction[1].band_data[j].energy_ratio_index[k] = index; - hQMetaData->q_direction[1].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions_hr[index]; - - ratioSum = hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] + hQMetaData->q_direction[1].band_data[j].energy_ratio[k]; - - if ( ratioSum > 1.0f ) - { - hQMetaData->q_direction[0].band_data[pos_2dir_band[j]].energy_ratio[k] /= ratioSum; - hQMetaData->q_direction[1].band_data[j].energy_ratio[k] /= ratioSum; - } + push_next_indice( hMetaData, 1, 1 ); /* Only signal raw mode if not implicitly using it */ + } - needed_bits[1] += MASA_BITS_ER_HR; - hQMetaData->q_direction[1].band_data[j].bits_sph_idx[k] = bits_dir_hr; - } - } + FOR( b = start_band; b < nbands; b++ ) + { + ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], shl( 1, df_ratio_bits[b] ) ); /* dif_values */ } } - return; + return sub( hMetaData->nb_bits_tot, start_bit_pos ); } -#endif - /*------------------------------------------------------------------------- - * ivas_qmetadata_quantize_diffuseness_nrg_ratios() + * restore_metadata_buffer() * - * Quantize diffuseness + * Restore metadata buffer *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( - IVAS_QMETADATA_HANDLE hQMetaData, - Word16 *needed_bits, - Word16 *nbits_diff, - Word16 *dfRatioBits, - const Word16 hodirac_flag ) +void restore_metadata_buffer_fx( + BSTR_ENC_HANDLE hMetaData, + const Word16 next_ind_start, + const Word16 bit_pos_start ) { - Word16 j, k, dir2band; - Word16 index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; - Word16 index_diff; + Word16 i; - nbits_diff[0] = 0; - nbits_diff[1] = 0; - needed_bits[0] = 0; - needed_bits[1] = 0; - dir2band = 0; - move16(); - move16(); - move16(); + FOR( i = next_ind_start; i < hMetaData->nb_ind_tot; i++ ) + { + hMetaData->ind_list[i].nb_bits = -1; + move16(); + } + hMetaData->nb_bits_tot = bit_pos_start; move16(); + hMetaData->nb_ind_tot = next_ind_start; move16(); - FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) - { - test(); - IF( EQ_32( hQMetaData->no_directions, 2 ) && EQ_16( hQMetaData->twoDirBands[j], 1 ) ) - { - Word32 diffRatio, dfRatio, dfRatioQ, diffRatioQ, dirRatio1Q, dirRatio2Q; /* Q30 */ - Word32 dirRatio1, dirRatio2, sumRatio; /* Q30 */ - Word16 dfRatio_index, dfRatio_qsteps, dfRatio_bits; - - /* With 2dir metadata, we quantize and transmit diffuse-to-total ratio (diffRatio) and - * distribution factor of direct-to-total ratios (dFRatio). This is more efficient and - * accurate than simple separate quantization of each direct-to-total ratio or their - * separate inverses. */ - IF( hodirac_flag ) - { - /* already encoded as total and ratios in HO-DirAC */ - diffRatio = L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ); // Q30 - dfRatio = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 - move32(); - } - ELSE - { - dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0]; // Q30 - move32(); - dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 - move32(); - sumRatio = L_add( dirRatio1, dirRatio2 ); // Q30 - diffRatio = L_sub( ONE_IN_Q30, sumRatio ); // Q30 - IF( LT_32( sumRatio, EPSILON_FIX ) ) - { - dfRatio = ONE_IN_Q29 /* 0.5f in Q30*/; // Q30 - move32(); - } - ELSE - { - Word16 exp_diff; - dfRatio = L_deposit_h( BASOP_Util_Divide3232_Scale( dirRatio1, sumRatio, &exp_diff ) ); - dfRatio = L_shl( dfRatio, sub( exp_diff, Q1 ) ); // Q30 - } - } - - - index_diff = masa_sq_fx( diffRatio, diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - diffRatioQ = diffuseness_reconstructions_fx[index_diff]; // Q30 - move32(); - - IF( hodirac_flag ) - { - dfRatio_bits = ivas_get_df_ratio_bits_hodirac( index_diff ); - } - ELSE - { - dfRatio_bits = ivas_get_df_ratio_bits( index_diff ); - } - - dfRatioBits[dir2band] = dfRatio_bits; - move16(); - - dfRatio_qsteps = shl( 1, dfRatio_bits ); - IF( hodirac_flag ) - { - Word16 dfRatioQ16; /* Q14 */ - dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, 0, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 2 ), dfRatio_qsteps ); - dfRatioQ = L_deposit_h( dfRatioQ16 ); // Q30 - dirRatio1Q = L_sub( ONE_IN_Q30, diffRatioQ ); // Q30 - dirRatio2Q = dfRatioQ; // Q30 - move32(); - } - ELSE - { - Word16 dfRatioQ16; /* Q14 */ - dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, ONE_IN_Q13 /* 0.5f in Q14 */, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 3 ), dfRatio_qsteps ); - - /* Direction quantization requires also separately quantized direct-to-total ratios. Thus, we calculate them. */ - dirRatio1Q = L_shl( Mpy_32_16_1( L_sub( ONE_IN_Q30, diffRatioQ ), dfRatioQ16 ), 1 ); // Q30 - dirRatio2Q = L_sub( L_sub( ONE_IN_Q30, diffRatioQ ), dirRatio1Q ); // Q30 - } - - index_dirRatio1Inv = masa_sq_fx( L_sub( ONE_IN_Q30, dirRatio1Q ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - - /* Note: To save memory, we store temporarily index_diff and dfRatio_index into first and second direction - * energy ratio index variables until they have been encoded. index_dirRatio1Inv and index_dirRatio2Inv are - * then later retrieved for further use in encoding. */ - FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; // Q0 - move16(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = dirRatio1Q; // Q30 - move32(); - } - nbits_diff[0] = add( nbits_diff[0], MASA_BITS_ER ); - move16(); - - IF( hodirac_flag ) - { - Word16 tmp; /* Q14 */ - index_dirRatio2Inv = usquant_fx( extract_h( dirRatio2Q ), &tmp /* Q14 */, 0, shr( div_s( 1, sub( DIRAC_DIFFUSE_LEVELS, 1 ) ), 2 ), DIRAC_DIFFUSE_LEVELS ); - } - ELSE - { - index_dirRatio2Inv = masa_sq_fx( L_sub( ONE_IN_Q30, dirRatio2Q ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - } - - FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; // Q0 - move16(); - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[k] = dirRatio2Q; // Q30 - move32(); - } - nbits_diff[1] = add( nbits_diff[1], dfRatio_bits ); - move16(); - - /* Obtain compensated direct-to-total ratios for direction quantization. This compensates for the - * fact that with 2dir data, it is harder to achieve separate high direct-to-total ratio values - * which are assumed by the direction quantization system. In practice, this improves direction - * accuracy when it is perceptual meaningful. */ - masa_compensate_two_dir_energy_ratio_index_fx( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod, hodirac_flag ); - - FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv_mod; - move16(); - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; - move16(); - } - needed_bits[0] = add( needed_bits[0], imult1616( hQMetaData->q_direction[0].cfg.nblocks, bits_direction_masa[index_dirRatio1Inv_mod] ) ); - move16(); - - FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[k] = index_dirRatio2Inv_mod; - move16(); - hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; - move16(); - } - needed_bits[1] = add( needed_bits[1], imult1616( hQMetaData->q_direction[1].cfg.nblocks, bits_direction_masa[index_dirRatio2Inv_mod] ) ); - move16(); - - dir2band = add( dir2band, 1 ); - } - ELSE - { - index_dirRatio1Inv = masa_sq_fx( L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ), diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - - FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; - move16(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; - move16(); - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[index_dirRatio1Inv] ); // Q30 - move32(); - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; - move16(); - } - - nbits_diff[0] = add( nbits_diff[0], MASA_BITS_ER ); - move16(); - - needed_bits[0] = add( needed_bits[0], imult1616( hQMetaData->q_direction[0].cfg.nblocks, bits_direction_masa[index_dirRatio1Inv] ) ); - move16(); - } - } - return; } -#else -static void ivas_qmetadata_quantize_diffuseness_nrg_ratios( - IVAS_QMETADATA_HANDLE hQMetaData, - int16_t *needed_bits, - int16_t *nbits_diff, - int16_t *dfRatioBits, - const int16_t hodirac_flag ) + +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_quasi_uniform() + * + * encode value using a quasi-uniform code of b or b + 1 bits, where b = floor(log2(alphabet_size)) + *------------------------------------------------------------------------*/ +static void ivas_qmetadata_encode_quasi_uniform( + BSTR_ENC_HANDLE hMetaData, + const UWord16 value, + const UWord16 alphabet_size ) { - int16_t j, k, dir2band; - int16_t index_dirRatio1Inv, index_dirRatio2Inv, index_dirRatio1Inv_mod, index_dirRatio2Inv_mod; - int16_t index_diff; + Word16 bits; + UWord16 tresh; - nbits_diff[0] = 0; - nbits_diff[1] = 0; - needed_bits[0] = 0; - needed_bits[1] = 0; - dir2band = 0; + bits = sub( 30, norm_l( alphabet_size ) ); /* bits = floor(log2(alphabet_size)) */ + tresh = (UWord16) L_sub( L_shl( 1U, add( bits, 1 ) ), alphabet_size ); - for ( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) + IF( LT_32( value, tresh ) ) { - if ( hQMetaData->no_directions == 2 && hQMetaData->twoDirBands[j] == 1 ) - { - float diffRatio, dfRatio, dfRatioQ, diffRatioQ, dirRatio1Q, dirRatio2Q; - float dirRatio1, dirRatio2, sumRatio; - int16_t dfRatio_index, dfRatio_qsteps, dfRatio_bits; - - /* With 2dir metadata, we quantize and transmit diffuse-to-total ratio (diffRatio) and - * distribution factor of direct-to-total ratios (dFRatio). This is more efficient and - * accurate than simple separate quantization of each direct-to-total ratio or their - * separate inverses. */ - if ( hodirac_flag ) - { - /* already encoded as total and ratios in HO-DirAC */ - diffRatio = 1.f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0]; - dfRatio = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[0]; - } - else - { - dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio[0]; - dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[0]; - sumRatio = dirRatio1 + dirRatio2; - diffRatio = 1.0f - sumRatio; - dfRatio = sumRatio < EPSILON ? 0.5f : dirRatio1 / sumRatio; - } - - - index_diff = masa_sq( diffRatio, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - diffRatioQ = diffuseness_reconstructions[index_diff]; - - if ( hodirac_flag ) - { - dfRatio_bits = ivas_get_df_ratio_bits_hodirac( index_diff ); - } - else - { - dfRatio_bits = ivas_get_df_ratio_bits( index_diff ); - } - - dfRatioBits[dir2band] = dfRatio_bits; - - dfRatio_qsteps = ( 1 << dfRatio_bits ); - if ( hodirac_flag ) - { - dfRatio_index = usquant( dfRatio, &dfRatioQ, 0.0f, 1.f / ( dfRatio_qsteps - 1 ), dfRatio_qsteps ); - dirRatio1Q = 1.f - diffRatioQ; - dirRatio2Q = dfRatioQ; - } - else - { - dfRatio_index = usquant( dfRatio, &dfRatioQ, 0.5f, 0.5f / ( dfRatio_qsteps - 1 ), dfRatio_qsteps ); - - /* Direction quantization requires also separately quantized direct-to-total ratios. Thus, we calculate them. */ - dirRatio1Q = dfRatioQ * ( 1.0f - diffRatioQ ); - dirRatio2Q = ( 1.0f - diffRatioQ ) - dirRatio1Q; - } - - index_dirRatio1Inv = masa_sq( 1.0f - dirRatio1Q, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - /* Note: To save memory, we store temporarily index_diff and dfRatio_index into first and second direction - * energy ratio index variables until they have been encoded. index_dirRatio1Inv and index_dirRatio2Inv are - * then later retrieved for further use in encoding. */ - for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; - hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = dirRatio1Q; - } - nbits_diff[0] += MASA_BITS_ER; - - if ( hodirac_flag ) - { - float tmp; - index_dirRatio2Inv = usquant( dirRatio2Q, &tmp, 0.0f, 1.f / ( DIRAC_DIFFUSE_LEVELS - 1 ), DIRAC_DIFFUSE_LEVELS ); - } - else - { - index_dirRatio2Inv = masa_sq( 1.0f - dirRatio2Q, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - } - - for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio[k] = dirRatio2Q; - } - nbits_diff[1] += dfRatio_bits; - - /* Obtain compensated direct-to-total ratios for direction quantization. This compensates for the - * fact that with 2dir data, it is harder to achieve separate high direct-to-total ratio values - * which are assumed by the direction quantization system. In practice, this improves direction - * accuracy when it is perceptual meaningful. */ - - masa_compensate_two_dir_energy_ratio_index( index_dirRatio1Inv, index_dirRatio2Inv, &index_dirRatio1Inv_mod, &index_dirRatio2Inv_mod, hodirac_flag ); - - for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv_mod; - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; - } - needed_bits[0] += hQMetaData->q_direction[0].cfg.nblocks * bits_direction_masa[index_dirRatio1Inv_mod]; - - for ( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[k] = index_dirRatio2Inv_mod; - hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; - } - needed_bits[1] += hQMetaData->q_direction[1].cfg.nblocks * bits_direction_masa[index_dirRatio2Inv_mod]; - - dir2band++; - } - else - { - index_dirRatio1Inv = masa_sq( 1.0f - hQMetaData->q_direction[0].band_data[j].energy_ratio[0], diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); - - for ( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) - { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; - hQMetaData->q_direction[0].band_data[j].energy_ratio[k] = 1.0f - diffuseness_reconstructions[index_dirRatio1Inv]; - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; - } - - nbits_diff[0] += MASA_BITS_ER; - - needed_bits[0] += hQMetaData->q_direction[0].cfg.nblocks * bits_direction_masa[index_dirRatio1Inv]; - } + push_next_indice( hMetaData, value, bits ); + } + ELSE /* value >= tresh */ + { + push_next_indice( hMetaData, (UWord16) L_add( value, tresh ), add( bits, 1 ) ); } return; } -#endif +/*-----------------------------------------------------------------------* + * GR encoder function definitions + *-----------------------------------------------------------------------*/ /*------------------------------------------------------------------------- - * ivas_diffuseness_huff_ec_encode() - * - * - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_diffuseness_huff_ec_encode_fx( - BSTR_ENC_HANDLE hMetaData, - const UWord16 idx ) -{ - Word16 nbits; - nbits = 0; - move16(); - IF( LE_16( idx, DIFF_EC_HUFF_GR0_LIMIT ) ) - { - IF( idx > 0 ) - { - push_next_indice( hMetaData, (UWord16) L_sub( L_shl( 1, idx ), 1 ), idx ); - nbits = add( nbits, idx ); - } - push_next_indice( hMetaData, 0, 1 ); - nbits = add( nbits, 1 ); - } - ELSE - { - push_next_indice( hMetaData, 511, DIFF_EC_HUFF_GR0_LIMIT + 1 ); - push_next_indice( hMetaData, (UWord16) L_sub( idx, DIFF_EC_HUFF_GR0_LIMIT + 1 ), 2 ); - nbits = add( nbits, DIFF_EC_HUFF_GR0_LIMIT + 3 ); - } - return nbits; -} -#else -static int16_t ivas_diffuseness_huff_ec_encode( - BSTR_ENC_HANDLE hMetaData, - const uint16_t idx ) -{ - int16_t nbits; - nbits = 0; - if ( idx <= DIFF_EC_HUFF_GR0_LIMIT ) - { - if ( idx > 0 ) - { - push_next_indice( hMetaData, ( 1 << idx ) - 1, idx ); - nbits += idx; - } - push_next_indice( hMetaData, 0, 1 ); - nbits += 1; - } - else - { - push_next_indice( hMetaData, 511, DIFF_EC_HUFF_GR0_LIMIT + 1 ); - push_next_indice( hMetaData, idx - DIFF_EC_HUFF_GR0_LIMIT - 1, 2 ); - nbits += DIFF_EC_HUFF_GR0_LIMIT + 3; - } - return nbits; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_diffuseness_huff_ec_prepare() - * + * GR_bits_new() * - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static void ivas_diffuseness_huff_ec_prepare_fx( - IVAS_QDIRECTION *q_direction, - Word16 *best_av, - UWord16 *avr_idx, - Word16 *diffuseness_bits_huff ) -{ - Word16 bits; - Word16 av_crt; - Word16 av; - Word16 av_e; - Word16 sh_idx; - UWord16 ui_sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 b, start_band, nbands; - - start_band = q_direction->cfg.start_band; - move16(); - nbands = q_direction->cfg.nbands; - move16(); - - *diffuseness_bits_huff = 0; - move16(); - av = 0; - move16(); - FOR( b = start_band; b < nbands; b++ ) - { - av = add( av, q_direction->band_data[b].energy_ratio_index[0] ); - } - // av = (int16_t) ( 0.5f + av / (float) nbands ); - av = BASOP_Util_Divide1616_Scale( av, nbands, &av_e ); - av = shr_r( av, sub( 15, av_e ) ); - *best_av = av; - move16(); - - *diffuseness_bits_huff = MAX16B; - move16(); - FOR( av_crt = av - 1; av_crt <= av + 1; av_crt++ ) - { - bits = 0; - move16(); - FOR( b = start_band; b < nbands; b++ ) - { - sh_idx = sub( q_direction->band_data[b].energy_ratio_index[0], av_crt ); - // ui_sh_idx[b] = ( sh_idx <= 0 ) ? ( -2 * sh_idx ) : sh_idx * 2 - 1; - IF( sh_idx <= 0 ) - { - ui_sh_idx[b] = negate( shl( sh_idx, 1 ) ); - } - ELSE - { - ui_sh_idx[b] = sub( shl( sh_idx, 1 ), 1 ); - } - move16(); - if ( GE_32( ui_sh_idx[b], 2 * DIRAC_DIFFUSE_LEVELS - 3 ) ) - { - bits = 100; /* to avoid difference larger than 6 in absolute value */ - move16(); - } - - // bits += ( ui_sh_idx[b] <= DIFF_EC_HUFF_GR0_LIMIT ) ? ( ui_sh_idx[b] + 1 ) : 11; - IF( LE_32( ui_sh_idx[b], DIFF_EC_HUFF_GR0_LIMIT ) ) - { - bits = add( bits, add( ui_sh_idx[b], 1 ) ); - } - ELSE - { - bits = add( bits, 11 ); - } - } - - IF( LT_16( bits, *diffuseness_bits_huff ) ) - { - *diffuseness_bits_huff = bits; - move16(); - Copy( (Word16 *) ui_sh_idx, (Word16 *) avr_idx, nbands ); - *best_av = av_crt; - move16(); - } - } - - *diffuseness_bits_huff = add( *diffuseness_bits_huff, MASA_BITS_ER ); /* for the average */ - move16(); - - return; -} -#else -static void ivas_diffuseness_huff_ec_prepare( - IVAS_QDIRECTION *q_direction, - int16_t *best_av, - uint16_t *avr_idx, - int16_t *diffuseness_bits_huff ) -{ - int16_t bits; - int16_t av_crt; - int16_t av; - int16_t sh_idx; - uint16_t ui_sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t b, start_band, nbands; - - start_band = q_direction->cfg.start_band; - nbands = q_direction->cfg.nbands; - - *diffuseness_bits_huff = 0; - av = 0; - for ( b = start_band; b < nbands; b++ ) - { - av += q_direction->band_data[b].energy_ratio_index[0]; - } - av = (int16_t) ( 0.5f + av / (float) nbands ); - *best_av = av; - - *diffuseness_bits_huff = MAX16B; - for ( av_crt = av - 1; av_crt <= av + 1; av_crt++ ) - { - bits = 0; - for ( b = start_band; b < nbands; b++ ) - { - sh_idx = q_direction->band_data[b].energy_ratio_index[0] - av_crt; - ui_sh_idx[b] = ( sh_idx <= 0 ) ? ( -2 * sh_idx ) : sh_idx * 2 - 1; - if ( ui_sh_idx[b] >= 2 * DIRAC_DIFFUSE_LEVELS - 3 ) - { - bits = 100; /* to avoid difference larger than 6 in absolute value */ - } - - bits += ( ui_sh_idx[b] <= DIFF_EC_HUFF_GR0_LIMIT ) ? ( ui_sh_idx[b] + 1 ) : 11; - } - - if ( bits < *diffuseness_bits_huff ) - { - *diffuseness_bits_huff = bits; - mvs2s( (int16_t *) ui_sh_idx, (int16_t *) avr_idx, nbands ); - *best_av = av_crt; - } - } - - *diffuseness_bits_huff += MASA_BITS_ER; /* for the average */ - - return; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_qmetadata_entropy_encode_diffuseness() * - * encode diffuseness *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_qmetadata_entropy_encode_diffuseness_fx( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - UWord16 *diffuseness_index_max_ec_frame ) +/*! r: number of bits using Golomb Rice code */ +static Word16 GR_bits_new( + UWord16 *data, /* i : data to encode with GR */ + Word16 *no_symb, /* i : number of symbols for each component*/ + const Word16 no_data, /* i : number of input data */ + const Word16 GR_order, /* i : GR order to be used */ + const Word16 check_two_orders, /* i : check also coding with GR_order-1 */ + Word16 *real_GR_ord /* o : the GR order that has been used */ +) { - Word16 start_bit_pos; - Word16 diffuseness_bits_raw; - Word16 b; - Word16 min_diffuseness_m_index, max_diffuseness_m_index; - Word16 nbands; - Word16 start_band; - - nbands = q_direction->cfg.nbands; - move16(); - start_band = q_direction->cfg.start_band; - move16(); - - start_bit_pos = hMetaData->nb_bits_tot; - move16(); - - IF( EQ_16( nbands, 1 ) ) - { - /* If there is only one band, diffuseness should be coded directly as raw with no signaling. */ - push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], MASA_BITS_ER ); - *diffuseness_index_max_ec_frame = 5; - move16(); - return sub( hMetaData->nb_bits_tot, start_bit_pos ); - } - - /* compute the number of raw coding bits */ - diffuseness_bits_raw = 0; - move16(); - FOR( b = start_band; b < nbands; b++ ) - { - diffuseness_bits_raw = add( diffuseness_bits_raw, ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ) ); - } - - min_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; - move16(); - max_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; - move16(); - - FOR( b = start_band; b < nbands; b++ ) - { - if ( LT_16( q_direction->band_data[b].energy_ratio_index[0], min_diffuseness_m_index ) ) - { - min_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; - move16(); - } - - if ( GT_16( q_direction->band_data[b].energy_ratio_index[0], max_diffuseness_m_index ) ) - { - max_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; - move16(); - } - } - - IF( LT_16( nbands, DIFF_EC_HUFF_BAND_LIMIT ) ) - { - /* Use similarity coding approach or raw coding when there is a low number of bands. */ - /* one bit is used to indicate whether diffuseness values are entropy coded or coded raw */ - IF( EQ_16( min_diffuseness_m_index, max_diffuseness_m_index ) ) /* all values are equal */ - { - push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ - push_next_indice( hMetaData, 1, 1 ); /* dif_have_unique_value */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ - } - ELSE IF( EQ_16( add( min_diffuseness_m_index, 1 ), max_diffuseness_m_index ) ) /* only two consecutive values are present */ - { - push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ - push_next_indice( hMetaData, 0, 1 ); /* dif_have_unique_value */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ - - FOR( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], min_diffuseness_m_index ), 1 ); /* dif_bit_offset_values */ - } - } - ELSE /* raw coding */ - { - push_next_indice( hMetaData, 1, 1 ); /* dif_use_raw_coding */ - - FOR( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ - } - } - } - ELSE - { - /* Use Huffman-coding approach or raw coding when there is a high number of bands. */ - Word16 diffuseness_bits_huff; - Word16 best_av; - UWord16 avr_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - - /* First, obtain average indices and bit usage for Huffman-coding. */ - ivas_diffuseness_huff_ec_prepare_fx( q_direction, &best_av, avr_idx, &diffuseness_bits_huff ); - - /* If there is benefit, use Huffman-coding. Otherwise, use raw coding. */ - IF( LT_16( diffuseness_bits_huff, diffuseness_bits_raw ) ) - { - /* Signal Huffman EC */ - push_next_indice( hMetaData, 0, 1 ); - push_next_indice( hMetaData, best_av, MASA_BITS_ER ); - FOR( b = start_band; b < nbands; b++ ) - { - ivas_diffuseness_huff_ec_encode_fx( hMetaData, avr_idx[b] ); - } - } - ELSE - { - /* Signal raw */ - push_next_indice( hMetaData, 1, 1 ); - FOR( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ - } - } - } - - *diffuseness_index_max_ec_frame = 5; - move16(); - /* adaptively select the diffuseness_index_max_ec threshold */ - if ( GT_16( min_diffuseness_m_index, 5 ) ) - { - *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; - move16(); - } - - - return sub( hMetaData->nb_bits_tot, start_bit_pos ); -} -#else -static int16_t ivas_qmetadata_entropy_encode_diffuseness( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - uint16_t *diffuseness_index_max_ec_frame ) -{ - int16_t start_bit_pos; - int16_t diffuseness_bits_raw; - int16_t b; - int16_t min_diffuseness_m_index, max_diffuseness_m_index; - int16_t nbands; - int16_t start_band; - - nbands = q_direction->cfg.nbands; - start_band = q_direction->cfg.start_band; - - start_bit_pos = hMetaData->nb_bits_tot; - - if ( nbands == 1 ) - { - /* If there is only one band, diffuseness should be coded directly as raw with no signaling. */ - push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], MASA_BITS_ER ); - *diffuseness_index_max_ec_frame = 5; - return ( hMetaData->nb_bits_tot - start_bit_pos ); - } - - /* compute the number of raw coding bits */ - diffuseness_bits_raw = 0; - for ( b = start_band; b < nbands; b++ ) - { - diffuseness_bits_raw += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); - } - - min_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; - max_diffuseness_m_index = q_direction->band_data[start_band].energy_ratio_index[0]; - - for ( b = start_band; b < nbands; b++ ) - { - if ( q_direction->band_data[b].energy_ratio_index[0] < min_diffuseness_m_index ) - { - min_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; - } - - if ( q_direction->band_data[b].energy_ratio_index[0] > max_diffuseness_m_index ) - { - max_diffuseness_m_index = q_direction->band_data[b].energy_ratio_index[0]; - } - } - - if ( nbands < DIFF_EC_HUFF_BAND_LIMIT ) - { - /* Use similarity coding approach or raw coding when there is a low number of bands. */ - /* one bit is used to indicate whether diffuseness values are entropy coded or coded raw */ - if ( min_diffuseness_m_index == max_diffuseness_m_index ) /* all values are equal */ - { - push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ - push_next_indice( hMetaData, 1, 1 ); /* dif_have_unique_value */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS ); /* dif_unique_value */ - } - else if ( min_diffuseness_m_index + 1 == max_diffuseness_m_index ) /* only two consecutive values are present */ - { - push_next_indice( hMetaData, 0, 1 ); /* dif_use_raw_coding */ - push_next_indice( hMetaData, 0, 1 ); /* dif_have_unique_value */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_diffuseness_m_index, DIRAC_DIFFUSE_LEVELS - 1 ); /* dif_min_value */ - - for ( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - min_diffuseness_m_index, 1 ); /* dif_bit_offset_values */ - } - } - else /* raw coding */ - { - push_next_indice( hMetaData, 1, 1 ); /* dif_use_raw_coding */ - - for ( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ - } - } - } - else - { - /* Use Huffman-coding approach or raw coding when there is a high number of bands. */ - int16_t diffuseness_bits_huff; - int16_t best_av; - uint16_t avr_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - - /* First, obtain average indices and bit usage for Huffman-coding. */ - ivas_diffuseness_huff_ec_prepare( q_direction, &best_av, avr_idx, &diffuseness_bits_huff ); - - /* If there is benefit, use Huffman-coding. Otherwise, use raw coding. */ - if ( diffuseness_bits_huff < diffuseness_bits_raw ) - { - /* Signal Huffman EC */ - push_next_indice( hMetaData, 0, 1 ); - push_next_indice( hMetaData, best_av, MASA_BITS_ER ); - for ( b = start_band; b < nbands; b++ ) - { - ivas_diffuseness_huff_ec_encode( hMetaData, avr_idx[b] ); - } - } - else - { - /* Signal raw */ - push_next_indice( hMetaData, 1, 1 ); - for ( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], DIRAC_DIFFUSE_LEVELS ); /* dif_values */ - } - } - } - - *diffuseness_index_max_ec_frame = 5; - /* adaptively select the diffuseness_index_max_ec threshold */ - if ( min_diffuseness_m_index > 5 ) - { - *diffuseness_index_max_ec_frame = DIRAC_DIFFUSE_LEVELS - 1; - } - - - return ( hMetaData->nb_bits_tot - start_bit_pos ); -} -#endif - -/*------------------------------------------------------------------------- - * ivas_qmetadata_entropy_encode_df_ratio() - * - * encode dfRatio - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_qmetadata_entropy_encode_df_ratio_fx( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - Word16 *df_ratio_bits ) -{ - Word16 start_bit_pos; - Word16 bits_raw; - Word16 b; - Word16 min_index, max_index; - Word16 nbands, start_band; - Word16 max_df_ratio_bits; - Word16 ec_mode = 0; - move16(); - Word16 max_alphabet_size; - - nbands = q_direction->cfg.nbands; - move16(); - start_band = q_direction->cfg.start_band; - move16(); - - start_bit_pos = hMetaData->nb_bits_tot; - move16(); - - IF( EQ_16( nbands, 1 ) ) - { - /* If there is only one band, ratio should be coded directly as raw with no signaling. */ - push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], df_ratio_bits[0] ); - - return sub( hMetaData->nb_bits_tot, start_bit_pos ); - } - - /* compute the number of raw coding bits */ - bits_raw = 0; - move16(); - max_df_ratio_bits = 0; - move16(); - FOR( b = start_band; b < nbands; b++ ) - { - bits_raw = add( bits_raw, df_ratio_bits[b] ); - max_df_ratio_bits = s_max( df_ratio_bits[b], max_df_ratio_bits ); - } - - min_index = q_direction->band_data[start_band].energy_ratio_index[0]; - move16(); - max_index = q_direction->band_data[start_band].energy_ratio_index[0]; - move16(); - FOR( b = start_band; b < nbands; b++ ) - { - if ( LT_16( q_direction->band_data[b].energy_ratio_index[0], min_index ) ) - { - min_index = q_direction->band_data[b].energy_ratio_index[0]; - move16(); - } - - if ( GT_16( q_direction->band_data[b].energy_ratio_index[0], max_index ) ) - { - max_index = q_direction->band_data[b].energy_ratio_index[0]; - move16(); - } - } - - /* Decide what modes are possible */ - IF( GE_16( bits_raw, add( add( max_df_ratio_bits, 2 ), nbands ) ) ) - { - ec_mode = 2; - } - ELSE IF( GE_16( bits_raw, add( max_df_ratio_bits, 1 ) ) ) - { - ec_mode = 1; - } - ELSE - { - ec_mode = 0; - } - move16(); - max_alphabet_size = shl( 1, max_df_ratio_bits ); - - test(); - test(); - IF( EQ_16( min_index, max_index ) && ec_mode > 0 ) /* all values are equal */ - { - push_next_indice( hMetaData, 0, 1 ); /* Signal between EC and raw */ - IF( GT_16( ec_mode, 1 ) ) - { - /* Only use bit for signaling if necessary */ - push_next_indice( hMetaData, 0, 1 ); /* Signal between one value or bandwise diff mode */ - } - - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size ); - } - ELSE IF( EQ_16( add( min_index, 1 ), max_index ) && GT_16( ec_mode, 1 ) ) /* only two consecutive values are present */ - { - push_next_indice( hMetaData, 0, 1 ); - push_next_indice( hMetaData, 1, 1 ); - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, sub( max_alphabet_size, 1 ) ); - - FOR( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, sub( q_direction->band_data[b].energy_ratio_index[0], min_index ), 1 ); /* Band-wise offset values */ - } - } - ELSE /* raw coding */ - { - IF( ec_mode > 0 ) - { - push_next_indice( hMetaData, 1, 1 ); /* Only signal raw mode if not implicitly using it */ - } - - FOR( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], shl( 1, df_ratio_bits[b] ) ); /* dif_values */ - } - } - - return sub( hMetaData->nb_bits_tot, start_bit_pos ); -} -#else -static int16_t ivas_qmetadata_entropy_encode_df_ratio( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - int16_t *df_ratio_bits ) -{ - int16_t start_bit_pos; - int16_t bits_raw; - int16_t b; - int16_t min_index, max_index; - int16_t nbands, start_band; - int16_t max_df_ratio_bits; - int16_t ec_mode = 0; - int16_t max_alphabet_size; - - nbands = q_direction->cfg.nbands; - start_band = q_direction->cfg.start_band; - - start_bit_pos = hMetaData->nb_bits_tot; - - if ( nbands == 1 ) - { - /* If there is only one band, ratio should be coded directly as raw with no signaling. */ - push_next_indice( hMetaData, q_direction->band_data[0].energy_ratio_index[0], df_ratio_bits[0] ); - - return ( hMetaData->nb_bits_tot - start_bit_pos ); - } - - /* compute the number of raw coding bits */ - bits_raw = 0; - max_df_ratio_bits = 0; - for ( b = start_band; b < nbands; b++ ) - { - bits_raw += df_ratio_bits[b]; - max_df_ratio_bits = max( df_ratio_bits[b], max_df_ratio_bits ); - } - - min_index = q_direction->band_data[start_band].energy_ratio_index[0]; - max_index = q_direction->band_data[start_band].energy_ratio_index[0]; - for ( b = start_band; b < nbands; b++ ) - { - if ( q_direction->band_data[b].energy_ratio_index[0] < min_index ) - { - min_index = q_direction->band_data[b].energy_ratio_index[0]; - } - - if ( q_direction->band_data[b].energy_ratio_index[0] > max_index ) - { - max_index = q_direction->band_data[b].energy_ratio_index[0]; - } - } - - /* Decide what modes are possible */ - if ( bits_raw >= max_df_ratio_bits + 2 + nbands ) - { - ec_mode = 2; - } - else if ( bits_raw >= max_df_ratio_bits + 1 ) - { - ec_mode = 1; - } - else - { - ec_mode = 0; - } - max_alphabet_size = 1 << max_df_ratio_bits; - - if ( min_index == max_index && ec_mode > 0 ) /* all values are equal */ - { - push_next_indice( hMetaData, 0, 1 ); /* Signal between EC and raw */ - if ( ec_mode > 1 ) - { - /* Only use bit for signaling if necessary */ - push_next_indice( hMetaData, 0, 1 ); /* Signal between one value or bandwise diff mode */ - } - - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size ); - } - else if ( min_index + 1 == max_index && ec_mode > 1 ) /* only two consecutive values are present */ - { - push_next_indice( hMetaData, 0, 1 ); - push_next_indice( hMetaData, 1, 1 ); - ivas_qmetadata_encode_quasi_uniform( hMetaData, min_index, max_alphabet_size - 1 ); - - for ( b = start_band; b < nbands; b++ ) - { - push_next_indice( hMetaData, q_direction->band_data[b].energy_ratio_index[0] - min_index, 1 ); /* Band-wise offset values */ - } - } - else /* raw coding */ - { - if ( ec_mode > 0 ) - { - push_next_indice( hMetaData, 1, 1 ); /* Only signal raw mode if not implicitly using it */ - } - - for ( b = start_band; b < nbands; b++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[b].energy_ratio_index[0], 1 << df_ratio_bits[b] ); /* dif_values */ - } - } - - return ( hMetaData->nb_bits_tot - start_bit_pos ); -} -#endif - -/*------------------------------------------------------------------------- - * restore_metadata_buffer() - * - * Restore metadata buffer - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void restore_metadata_buffer_fx( - BSTR_ENC_HANDLE hMetaData, - const Word16 next_ind_start, - const Word16 bit_pos_start ) -{ - Word16 i; - - FOR( i = next_ind_start; i < hMetaData->nb_ind_tot; i++ ) - { - hMetaData->ind_list[i].nb_bits = -1; - move16(); - } - hMetaData->nb_bits_tot = bit_pos_start; - move16(); - hMetaData->nb_ind_tot = next_ind_start; - move16(); - - return; -} -#else -void restore_metadata_buffer( - BSTR_ENC_HANDLE hMetaData, - const int16_t next_ind_start, - const int16_t bit_pos_start ) -{ - int16_t i; - - for ( i = next_ind_start; i < hMetaData->nb_ind_tot; i++ ) - { - hMetaData->ind_list[i].nb_bits = -1; - } - hMetaData->nb_bits_tot = bit_pos_start; - hMetaData->nb_ind_tot = next_ind_start; - - return; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_qmetadata_encode_quasi_uniform() - * - * encode value using a quasi-uniform code of b or b + 1 bits, where b = floor(log2(alphabet_size)) - *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_qmetadata_encode_quasi_uniform( - BSTR_ENC_HANDLE hMetaData, - const uint16_t value, - const uint16_t alphabet_size ) -{ - int16_t bits; - uint16_t tresh; - - bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ - tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; - - if ( value < tresh ) - { - push_next_indice( hMetaData, value, bits ); - } - else /* value >= tresh */ - { - push_next_indice( hMetaData, value + tresh, bits + 1 ); - } - - return; -} -#else -static void ivas_qmetadata_encode_quasi_uniform( - BSTR_ENC_HANDLE hMetaData, - const UWord16 value, - const UWord16 alphabet_size ) -{ - Word16 bits; - UWord16 tresh; - - bits = sub( 30, norm_l( alphabet_size ) ); /* bits = floor(log2(alphabet_size)) */ - tresh = (UWord16) L_sub( L_shl( 1U, add( bits, 1 ) ), alphabet_size ); - - IF( LT_32( value, tresh ) ) - { - push_next_indice( hMetaData, value, bits ); - } - ELSE /* value >= tresh */ - { - push_next_indice( hMetaData, (UWord16) L_add( value, tresh ), add( bits, 1 ) ); - } - - return; -} -#endif - - -/*-----------------------------------------------------------------------* - * GR encoder function definitions - *-----------------------------------------------------------------------*/ -/*------------------------------------------------------------------------- - * GR_bits_new() - * - * - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: number of bits using Golomb Rice code */ -static Word16 GR_bits_new( - UWord16 *data, /* i : data to encode with GR */ - Word16 *no_symb, /* i : number of symbols for each component*/ - const Word16 no_data, /* i : number of input data */ - const Word16 GR_order, /* i : GR order to be used */ - const Word16 check_two_orders, /* i : check also coding with GR_order-1 */ - Word16 *real_GR_ord /* o : the GR order that has been used */ -) -{ - Word16 nbits = 0, i; - Word16 nbits1 = 0; - Word16 nb; - move16(); - move16(); - - FOR( i = 0; i < no_data; i++ ) - { - nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order ); - nbits = add( nbits, nb ); - } - - IF( EQ_16( check_two_orders, 1 ) ) - { - FOR( i = 0; i < no_data; i++ ) - { - nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order - 1 ); - nbits1 = add( nbits1, nb ); - } - - IF( nbits1 < nbits ) - { - nbits = add( nbits1, 1 ); - *real_GR_ord = sub( GR_order, 1 ); - move16(); - } - ELSE - { - nbits = add( nbits, 1 ); - *real_GR_ord = GR_order; - move16(); - } - } - ELSE - { - *real_GR_ord = GR_order; - move16(); - } - - return nbits; -} -#else -/*! r: number of bits using Golomb Rice code */ -static int16_t GR_bits_new( - uint16_t *data, /* i : data to encode with GR */ - int16_t *no_symb, /* i : number of symbols for each component*/ - const int16_t no_data, /* i : number of input data */ - const int16_t GR_order, /* i : GR order to be used */ - const int16_t check_two_orders, /* i : check also coding with GR_order-1 */ - int16_t *real_GR_ord /* o : the GR order that has been used */ -) -{ - int16_t nbits = 0, i; - int16_t nbits1 = 0; - int16_t nb; - - for ( i = 0; i < no_data; i++ ) - { - nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order ); - nbits += nb; - } - - if ( check_two_orders == 1 ) - { - for ( i = 0; i < no_data; i++ ) - { - nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order - 1 ); - nbits1 += nb; - } - - if ( nbits1 < nbits ) - { - nbits = nbits1 + 1; - *real_GR_ord = GR_order - 1; - } - else - { - nbits += 1; - *real_GR_ord = GR_order; - } - } - else - { - *real_GR_ord = GR_order; - } - - return nbits; -} -#endif - - -/*------------------------------------------------------------------------- - * GR_bits_azimuth_context() - * - * Encoding azimuth indexes with GR code using context - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: numer of bits used for coding */ -static Word16 GR_bits_azimuth_context( - UWord16 *data_in, /* i : data to be encoded */ - Word16 *no_symb, /* i : number of symbols for each component */ - const Word16 no_data_in, /* i : number of input data */ - const Word16 GR_order, /* i : GR order (GR_order or GR_order-1 are used ) */ - const UWord16 *bits_dir, /* i : bits for encoding the direction for each TF tile */ - Word16 *real_GR_ord, /* o : which GR order has been used Q0 */ - Word16 *p_use_context /* o : flag telling if context has been used or not Q0 */ -) -{ - Word16 i, nbits, nbits1, use_context; - UWord16 cdata[MAX_PARAM_SPATIAL_SUBFRAMES]; - UWord16 data[MAX_PARAM_SPATIAL_SUBFRAMES]; - Word16 min_val, max_val; - Word16 real_GR_ord1; - Word16 no_symb_local[MAX_PARAM_SPATIAL_SUBFRAMES]; - Word16 no_data = 0; - move16(); - FOR( i = 0; i < no_data_in; i++ ) - { - IF( LT_32( data_in[i], MASA_NO_INDEX ) ) - { - no_symb_local[no_data] = no_symb[i]; - move16(); - data[no_data++] = data_in[i]; - move16(); - } - } - - IF( no_data == 0 ) - { - *p_use_context = -3; /* corresponding to nothing to be written */ - move16(); - return 0; - } - - nbits = 0; - move16(); - use_context = 0; - move16(); - FOR( i = 0; i < no_data; i++ ) - { - IF( LE_16( bits_dir[i], 1 ) ) - { - nbits = add( nbits, bits_dir[i] ); - use_context = 1; - move16(); - } - ELSE - { - *real_GR_ord = sub( GR_order, (Word16) EQ_16( bits_dir[i], 2 ) ); - move16(); - nbits = add( nbits, ivas_qmetadata_encode_extended_gr_length( data[i], no_symb_local[i], *real_GR_ord ) ); - } - } - - real_GR_ord1 = 0; - move16(); - IF( use_context == 0 ) - { - nbits = GR_bits_new( data, no_symb_local, no_data, GR_order, 1, real_GR_ord ); - nbits1 = nbits; - move16(); - min_val = data[0]; - move16(); - FOR( i = 1; i < no_data; i++ ) - { - if ( LT_32( data[i], min_val ) ) - { - min_val = data[i]; - move16(); - } - } - FOR( i = 0; i < no_data; i++ ) - { - cdata[i] = (UWord16) L_sub( data[i], min_val ); - move16(); - } - - maximum_s( no_symb_local, no_data, &max_val ); - nbits1 = add( GR_bits_new( cdata, no_symb_local, no_data, sub( GR_order, 1 ), 1, &real_GR_ord1 ), ivas_qmetadata_encode_extended_gr_length( min_val, max_val, MASA_GR_ORD_AZ ) ); - - IF( LT_16( nbits1, nbits ) ) - { - nbits = add( nbits1, 1 ); - use_context = -2; - move16(); - *real_GR_ord = real_GR_ord1; - move16(); - } - ELSE - { - nbits = add( nbits, 1 ); - use_context = -1; - move16(); - } - } - - *p_use_context = use_context; - move16(); - return nbits; -} -#else -/*! r: numer of bits used for coding */ -static int16_t GR_bits_azimuth_context( - uint16_t *data_in, /* i : data to be encoded */ - int16_t *no_symb, /* i : number of symbols for each component */ - const int16_t no_data_in, /* i : number of input data */ - const int16_t GR_order, /* i : GR order (GR_order or GR_order-1 are used ) */ - const uint16_t *bits_dir, /* i : bits for encoding the direction for each TF tile */ - int16_t *real_GR_ord, /* o : which GR order has been used */ - int16_t *p_use_context /* o : flag telling if context has been used or not */ -) -{ - int16_t i, nbits, nbits1, use_context; - uint16_t cdata[MAX_PARAM_SPATIAL_SUBFRAMES]; - uint16_t data[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t min_val, max_val; - int16_t real_GR_ord1; - int16_t no_symb_local[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t no_data = 0; - - for ( i = 0; i < no_data_in; i++ ) - { - if ( data_in[i] < MASA_NO_INDEX ) - { - no_symb_local[no_data] = no_symb[i]; - data[no_data++] = data_in[i]; - } - } - - if ( no_data == 0 ) - { - *p_use_context = -3; /* corresponding to nothing to be written */ - return 0; - } - - nbits = 0; - use_context = 0; - - for ( i = 0; i < no_data; i++ ) - { - if ( ( bits_dir[i] <= 1 ) ) - { - nbits += bits_dir[i]; - use_context = 1; - } - else - { - *real_GR_ord = GR_order - ( bits_dir[i] == 2 ); - nbits += ivas_qmetadata_encode_extended_gr_length( data[i], no_symb_local[i], *real_GR_ord ); - } - } - - real_GR_ord1 = 0; - if ( use_context == 0 ) - { - nbits = GR_bits_new( data, no_symb_local, no_data, GR_order, 1, real_GR_ord ); - nbits1 = nbits; - - min_val = data[0]; - for ( i = 1; i < no_data; i++ ) - { - if ( data[i] < min_val ) - { - min_val = data[i]; - } - } - for ( i = 0; i < no_data; i++ ) - { - cdata[i] = data[i] - min_val; - } - - maximum_s( no_symb_local, no_data, &max_val ); - nbits1 = GR_bits_new( cdata, no_symb_local, no_data, GR_order - 1, 1, &real_GR_ord1 ) + ivas_qmetadata_encode_extended_gr_length( min_val, max_val, MASA_GR_ORD_AZ ); - - if ( nbits1 < nbits ) - { - nbits = nbits1 + 1; - use_context = -2; - *real_GR_ord = real_GR_ord1; - } - else - { - nbits = nbits + 1; - use_context = -1; - } - } - - *p_use_context = use_context; - - return nbits; -} -#endif - -/*------------------------------------------------------------------------- - * mean_removed_GR_new() - * - * Golomb Rice encoding with mean removing - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: number of bits used */ -static Word16 mean_removed_GR_new( - const UWord16 *idx, /* i : data to encode */ - const Word16 max_no_symb, - const Word16 len, /* i : number of data */ - const Word16 adapt_GR, /* i : flag for telling to use or nor two GR order values */ - Word16 *GR_ord, /* i/o: GR order */ - UWord16 *p_av, /* o : average index */ - UWord16 *mr_idx /* o : mean removed indexes */ -) -{ - Word16 av, i, nbits; - Word16 sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 max_ns[MASA_MAXIMUM_CODING_SUBBANDS]; - - /* av = (Word16) ( 0.5f + sum_s( (const Word16 *) idx, len ) / (float) len ); */ - av = div_l( L_add( L_shl( sum16_fx( (const Word16 *) idx, len ), 1 ), 1 ), len ); - - *p_av = av; - move16(); - FOR( i = 0; i < len; i++ ) - { - max_ns[i] = shl( max_no_symb, 1 ); - sh_idx[i] = sub( idx[i], av ); - move16(); - move16(); - } - - FOR( i = 0; i < len; i++ ) - { - IF( sh_idx[i] < 0 ) - { - sh_idx[i] = -2 * sh_idx[i]; - } - ELSE IF( sh_idx[i] > 0 ) - { - sh_idx[i] = sub( shl( sh_idx[i], 1 ), 1 ); - move16(); - } - ELSE - { - sh_idx[i] = 0; - move16(); - } - mr_idx[i] = (UWord16) sh_idx[i]; - move16(); - } - - nbits = GR_bits_new( mr_idx, max_ns, len, *GR_ord, adapt_GR, GR_ord ); - - return nbits; -} -#else -/*! r: number of bits used */ -static int16_t mean_removed_GR_new( - const uint16_t *idx, /* i : data to encode */ - const int16_t max_no_symb, - const int16_t len, /* i : number of data */ - const int16_t adapt_GR, /* i : flag for telling to use or nor two GR order values */ - int16_t *GR_ord, /* i/o: GR order */ - uint16_t *p_av, /* o : average index */ - uint16_t *mr_idx /* o : mean removed indexes */ -) -{ - int16_t av, i, nbits; - int16_t sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t max_ns[MASA_MAXIMUM_CODING_SUBBANDS]; - - av = (int16_t) ( 0.5f + sum_s( (const int16_t *) idx, len ) / (float) len ); - *p_av = av; - for ( i = 0; i < len; i++ ) - { - max_ns[i] = 2 * ( max_no_symb ); - sh_idx[i] = idx[i] - av; - } - - for ( i = 0; i < len; i++ ) - { - if ( sh_idx[i] < 0 ) - { - sh_idx[i] = -2 * sh_idx[i]; - } - else if ( sh_idx[i] > 0 ) - { - sh_idx[i] = sh_idx[i] * 2 - 1; - } - else - { - sh_idx[i] = 0; - } - mr_idx[i] = (uint16_t) sh_idx[i]; - } - - nbits = GR_bits_new( mr_idx, max_ns, len, *GR_ord, adapt_GR, GR_ord ); - - return nbits; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_qmetadata_encode_quasi_uniform_length() - * - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_qmetadata_encode_quasi_uniform_length( - const UWord16 value, - const UWord16 alphabet_size ) -{ - Word16 bits; - UWord16 tresh; - - bits = sub( 30, norm_l( alphabet_size ) ); /* bits = floor(log2(alphabet_size)) */ - tresh = (UWord16) L_sub( L_shl( 1U, add( bits, 1 ) ), alphabet_size ); - - IF( GE_32( value, tresh ) ) - { - bits = add( bits, 1 ); - } - - return bits; -} -#else -static int16_t ivas_qmetadata_encode_quasi_uniform_length( - const uint16_t value, - const uint16_t alphabet_size ) -{ - int16_t bits; - uint16_t tresh; - - bits = 30 - norm_l( alphabet_size ); /* bits = floor(log2(alphabet_size)) */ - tresh = ( 1U << ( bits + 1 ) ) - alphabet_size; - - if ( value >= tresh ) - { - bits++; - } - - return bits; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_qmetadata_entropy_encode_dir() - * - * Main function for entropy coding of the directions - *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_qmetadata_entropy_encode_dir_fx( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - const UWord16 diffuseness_index_max_ec_frame, - const Word16 nbands, - const Word16 start_band, - const Word16 direction_bits_raw, - Word16 max_bits, - const Word16 hrmasa_flag ) -{ - UWord16 diff_idx_min; - Word16 i, j; - Word16 nblocks; - - Word32 avg_direction_vector[3], direction_vector[3], avg_azimuth, avg_elevation; - Word16 avg_azimuth_alphabet, avg_elevation_alphabet; - UWord16 avg_azimuth_index, avg_elevation_index; - Word16 avg_elevation_index_projected; - Word16 avg_azimuth_index_projected; - UWord16 avg_elevation_index_initial, avg_elevation_offset; - UWord16 avg_azimuth_index_initial, avg_azimuth_offset; - Word16 elevation_bits_ec_best, azimuth_bits_ec_best; - - Word16 gr_param_elevation_best = 0, avg_elevation_index_best = 0; - move16(); - move16(); - UWord16 dist_elevation_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 gr_param_azimuth_best, avg_azimuth_index_best; - uint16_t dist_azimuth_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - - UWord16 idx, dist_count; - Word16 direction_bits_ec; - - UWord16 dist_elevation_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - UWord16 dist_elevation_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - UWord16 dist_azimuth_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - UWord16 dist_azimuth_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 all_zero_dist_elevation_indexes = 1, all_zero_dist_azimuth_indexes = 1; - move16(); - move16(); - Word16 gr_param_elevation, gr_size_elevation, egr_size_elevation, gr_param_azimuth, gr_size_azimuth; - Word16 egr_size_azimuth, elevation_bits_ec, azimuth_bits_ec; - - Word32 abs_theta; - Word16 theta_cb[MAX_NO_THETA]; // Q22-Q16 = Q6 - Word16 sign_th, no_th; - Word16 avg_azimuth_index_upd = 0, use_adapt_avg; - move16(); - Word16 make_gain = 0; - move16(); - Word16 bits_gained = 0; - move16(); - nblocks = q_direction->cfg.nblocks; - move16(); - - /* estimate the number of bits for entropy coding of the direction values */ - direction_bits_ec = 0; - move16(); - diff_idx_min = DIRAC_DIFFUSE_LEVELS; - move16(); - idx = 0; - move16(); - dist_count = 0; - move16(); - set_zero_fx( avg_direction_vector, 3 ); - - FOR( i = start_band; i < nbands; i++ ) - { - IF( hrmasa_flag ) - { - diff_idx_min = 0; // min( q_direction->band_data[i].energy_ratio_index_mod[0]>>1, diff_idx_min ); - move16(); - } - ELSE - { - diff_idx_min = s_min( q_direction->band_data[i].energy_ratio_index_mod[0], diff_idx_min ); - } - - IF( GT_32( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) - { - /* estimate the raw part */ - IF( q_direction->not_in_2D > 0 ) - { - FOR( j = 0; j < nblocks; j++ ) - { - direction_bits_ec = add( direction_bits_ec, q_direction->band_data[i].bits_sph_idx[j] ); - } - } - ELSE - { - FOR( j = 0; j < nblocks; j++ ) - { - direction_bits_ec = add( direction_bits_ec, ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ) ); - } - } - } - ELSE - { - dist_count = add( dist_count, nblocks ); - - FOR( j = 0; j < nblocks; j++ ) - { - /*compute the average direction */ - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); - scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 - v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); - } - } - } - - /* quantize average elevation and azimuth angles using the best angle spacing and equatorial precision */ - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector, Q22, &avg_azimuth, &avg_elevation ); - - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; - move16(); - avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ - move16(); - } - ELSE - { - avg_elevation_alphabet = sub( shl( no_theta_masa[bits_direction_masa[diff_idx_min] - 3], 1 ), 1 ); - avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ - move16(); - } - - no_th = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; - move16(); - - FOR( i = 0; i < no_th; i++ ) - { - theta_cb[i] = imult1616( i, round_fx( delta_theta_masa_fx[bits_direction_masa[diff_idx_min] - 3] ) ); - move16(); - } - - if ( GT_32( theta_cb[i - 1], 90 << Q6 ) ) - { - theta_cb[i - 1] = 90 << Q6; - move16(); - } - - IF( avg_elevation < 0 ) - { - abs_theta = L_negate( avg_elevation ); - sign_th = -1; - move16(); - } - ELSE - { - abs_theta = avg_elevation; - move32(); - sign_th = 1; - move16(); - } - - Word16 tmp; - avg_elevation_index = squant_fx( round_fx( abs_theta ), &tmp, theta_cb, no_th ); - avg_elevation = L_deposit_h( tmp ); // Q22 - - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - assert( avg_elevation >= 0 ); - } - ELSE - { - IF( sign_th < 0 ) - { - avg_elevation_index = sub( shr( avg_elevation_alphabet, 1 ), avg_elevation_index ); - } - ELSE - { - avg_elevation_index = add( avg_elevation_index, shr( avg_elevation_alphabet, 1 ) ); - } - // avg_elevation *= sign_th; - if ( sign_th < 0 ) - { - avg_elevation = L_negate( avg_elevation ); - } - } - - avg_azimuth_index = (UWord16) ( quantize_phi_enc_fx( L_add( avg_azimuth, DEGREE_180_Q_22 ), 0, &avg_azimuth, avg_azimuth_alphabet ) ); - - /* Elevation only if not 2D */ - IF( q_direction->not_in_2D > 0 ) - { - avg_elevation_index_initial = avg_elevation_index; - move16(); - elevation_bits_ec_best = MAX16B; - move16(); - avg_elevation_index_best = -1; /* out of range value */ - move16(); - gr_param_elevation_best = -1; /* out of range value */ - move16(); - - FOR( avg_elevation_offset = 0; avg_elevation_offset < q_direction->cfg.search_effort; avg_elevation_offset++ ) - { - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index_initial, avg_elevation_offset ) ); - } - ELSE - { - avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index_initial, ivas_qmetadata_dereorder_generic( avg_elevation_offset ) ) ); - } - // avg_elevation_index = (uint16_t) ( ( avg_elevation_index + avg_elevation_alphabet ) % avg_elevation_alphabet ); - avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index, avg_elevation_alphabet ) % avg_elevation_alphabet ); - - all_zero_dist_elevation_indexes = 1; - move16(); - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( avg_elevation_index, avg_elevation_alphabet ); - } - ELSE - { - elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( sub( avg_elevation_index, shr( avg_elevation_alphabet, 1 ) ) ), avg_elevation_alphabet ); - } - idx = 0; - move16(); - FOR( i = start_band; i < nbands; i++ ) - { - IF( LE_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) - { - FOR( j = 0; j < nblocks; j++ ) - { - /* project the quantized average elevation to the same grid as the current sample */ - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); - } - ELSE - { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); - } - - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - IF( L_sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ) > 0 ) - { - // dist_elevation_indexes[idx] = 2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ) - 1; - dist_elevation_indexes[idx] = sub( shl( sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ), 1 ), 1 ); - move16(); - } - ELSE - { - // dist_elevation_indexes[idx] = -2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ); - dist_elevation_indexes[idx] = imult1616( -2, sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ) ); - move16(); - } - } - ELSE - { - dist_elevation_indexes[idx] = ivas_qmetadata_reorder_elevation_index_fx( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected, q_direction->band_data[i].elevation_m_alphabet[j] ); - move16(); - } - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - dist_elevation_alphabets[idx] = sub( shl( q_direction->band_data[i].elevation_m_alphabet[j], 1 ), 1 ); - move16(); - } - ELSE - { - dist_elevation_alphabets[idx] = q_direction->band_data[i].elevation_m_alphabet[j]; - move16(); - } - - if ( dist_elevation_indexes[idx] != 0 ) - { - all_zero_dist_elevation_indexes = 0; - move16(); - } - idx = add( idx, 1 ); - } - } - } - - IF( all_zero_dist_elevation_indexes ) - { - egr_size_elevation = 0; - move16(); - gr_param_elevation = 4; - move16(); - } - ELSE - { - gr_param_elevation = ivas_qmetadata_get_optimal_gr_param_fx( dist_elevation_indexes, idx, 4, &gr_size_elevation ); - egr_size_elevation = 0; - move16(); - FOR( i = 0; i < idx; i++ ) - { - egr_size_elevation = add( egr_size_elevation, ivas_qmetadata_encode_extended_gr_length( dist_elevation_indexes[i], dist_elevation_alphabets[i], gr_param_elevation ) ); - } - } - elevation_bits_ec = add( elevation_bits_ec, add( ivas_qmetadata_encode_quasi_uniform_length( gr_param_elevation, 4 + 1 ), egr_size_elevation ) ); - - IF( LT_16( elevation_bits_ec, elevation_bits_ec_best ) ) - { - elevation_bits_ec_best = elevation_bits_ec; - move16(); - avg_elevation_index_best = avg_elevation_index; - move16(); - gr_param_elevation_best = gr_param_elevation; - move16(); - FOR( idx = 0; idx < dist_count; idx++ ) - { - dist_elevation_indexes_best[idx] = dist_elevation_indexes[idx]; - move16(); - } - } - } + Word16 nbits = 0, i; + Word16 nbits1 = 0; + Word16 nb; + move16(); + move16(); - direction_bits_ec = add( direction_bits_ec, elevation_bits_ec_best ); + FOR( i = 0; i < no_data; i++ ) + { + nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order ); + nbits = add( nbits, nb ); } - /*Azimuth*/ - use_adapt_avg = 0; - move16(); - test(); - test(); - IF( GE_16( sub( nbands, start_band ), 5 ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( nblocks, 1 ) ) + IF( EQ_16( check_two_orders, 1 ) ) { - use_adapt_avg = calc_var_azi_fx( q_direction, diffuseness_index_max_ec_frame, L_sub( avg_azimuth, DEGREE_180_Q_22 ), &avg_azimuth ); // 180.Q22 + FOR( i = 0; i < no_data; i++ ) + { + nb = ivas_qmetadata_encode_extended_gr_length( data[i], no_symb[i], GR_order - 1 ); + nbits1 = add( nbits1, nb ); + } - avg_azimuth_index = (UWord16) ( quantize_phi_enc_fx( L_add( avg_azimuth, DEGREE_180_Q_22 ), 0, &avg_azimuth, avg_azimuth_alphabet ) ); + IF( nbits1 < nbits ) + { + nbits = add( nbits1, 1 ); + *real_GR_ord = sub( GR_order, 1 ); + move16(); + } + ELSE + { + nbits = add( nbits, 1 ); + *real_GR_ord = GR_order; + move16(); + } } - avg_azimuth_index_initial = avg_azimuth_index; /* avg_azimuth_index;*/ - move16(); - azimuth_bits_ec_best = MAX16B; - move16(); - avg_azimuth_index_best = -1; /* out of range value */ - move16(); - gr_param_azimuth_best = -1; /* out of range value */ - move16(); - - FOR( avg_azimuth_offset = 0; avg_azimuth_offset < q_direction->cfg.search_effort; avg_azimuth_offset++ ) + ELSE { - set_zero_fx( avg_direction_vector, 3 ); - avg_azimuth_index = (UWord16) add( avg_azimuth_index_initial, ivas_qmetadata_dereorder_generic( avg_azimuth_offset ) ); - avg_azimuth_index = (UWord16) ( add( avg_azimuth_index, avg_azimuth_alphabet ) % avg_azimuth_alphabet ); - all_zero_dist_azimuth_indexes = 1; - move16(); - azimuth_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( sub( avg_azimuth_index, shr( avg_azimuth_alphabet, 1 ) ) ), avg_azimuth_alphabet ); - - idx = 0; + *real_GR_ord = GR_order; move16(); - FOR( i = start_band; i < nbands; i++ ) - { - IF( LE_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) - { - FOR( j = 0; j < nblocks; j++ ) - { - test(); - test(); - IF( GT_16( idx, MASA_LIMIT_IDX_AVG_AZI ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && EQ_16( use_adapt_avg, 1 ) ) - { - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index_upd, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); - } - ELSE - { - test(); - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) - { - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); - scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 - - IF( LT_16( idx, 4 ) ) - { - v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); - } - } - /* project the quantized average azimuth angle to the same grid as the current sample */ - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); - } - dist_azimuth_indexes[idx] = ivas_qmetadata_reorder_azimuth_index_fx( add( ivas_qmetadata_dereorder_generic( q_direction->band_data[i].azimuth_index[j] ), shr( q_direction->band_data[i].azimuth_m_alphabet[j], 1 ) ), avg_azimuth_index_projected, q_direction->band_data[i].azimuth_m_alphabet[j] ); - move16(); - dist_azimuth_alphabets[idx] = q_direction->band_data[i].azimuth_m_alphabet[j]; - move16(); - - if ( dist_azimuth_indexes[idx] != 0 ) - { - all_zero_dist_azimuth_indexes = 0; - move16(); - } - - test(); - test(); - IF( GE_16( idx, MASA_LIMIT_IDX_AVG_AZI ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && EQ_16( use_adapt_avg, 1 ) ) - { - IF( idx % nblocks == 0 ) - { - // v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); - scale_sig32( avg_direction_vector, 3, -1 ); - } + } - /*compute the average direction per already coded subband */ - ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); - scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 + return nbits; +} - v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector, Q22, &avg_azimuth, &avg_elevation ); - avg_azimuth_index_upd = quantize_phi_enc_fx( L_add( avg_azimuth, 180 << Q22 ), 0, &avg_azimuth, avg_azimuth_alphabet ); - } - idx = add( idx, 1 ); - } - } +/*------------------------------------------------------------------------- + * GR_bits_azimuth_context() + * + * Encoding azimuth indexes with GR code using context + *------------------------------------------------------------------------*/ +/*! r: numer of bits used for coding */ +static Word16 GR_bits_azimuth_context( + UWord16 *data_in, /* i : data to be encoded */ + Word16 *no_symb, /* i : number of symbols for each component */ + const Word16 no_data_in, /* i : number of input data */ + const Word16 GR_order, /* i : GR order (GR_order or GR_order-1 are used ) */ + const UWord16 *bits_dir, /* i : bits for encoding the direction for each TF tile */ + Word16 *real_GR_ord, /* o : which GR order has been used Q0 */ + Word16 *p_use_context /* o : flag telling if context has been used or not Q0 */ +) +{ + Word16 i, nbits, nbits1, use_context; + UWord16 cdata[MAX_PARAM_SPATIAL_SUBFRAMES]; + UWord16 data[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word16 min_val, max_val; + Word16 real_GR_ord1; + Word16 no_symb_local[MAX_PARAM_SPATIAL_SUBFRAMES]; + Word16 no_data = 0; + move16(); + FOR( i = 0; i < no_data_in; i++ ) + { + IF( LT_32( data_in[i], MASA_NO_INDEX ) ) + { + no_symb_local[no_data] = no_symb[i]; + move16(); + data[no_data++] = data_in[i]; + move16(); } + } - IF( all_zero_dist_azimuth_indexes ) + IF( no_data == 0 ) + { + *p_use_context = -3; /* corresponding to nothing to be written */ + move16(); + return 0; + } + + nbits = 0; + move16(); + use_context = 0; + move16(); + FOR( i = 0; i < no_data; i++ ) + { + IF( LE_16( bits_dir[i], 1 ) ) { - egr_size_azimuth = 0; - move16(); - gr_param_azimuth = 5; + nbits = add( nbits, bits_dir[i] ); + use_context = 1; move16(); } ELSE { - /* estimate the ExtendedGR part for azimuth */ - gr_param_azimuth = ivas_qmetadata_get_optimal_gr_param_fx( dist_azimuth_indexes, idx, 5, &gr_size_azimuth ); - egr_size_azimuth = 0; + *real_GR_ord = sub( GR_order, (Word16) EQ_16( bits_dir[i], 2 ) ); move16(); - FOR( i = 0; i < idx; i++ ) + nbits = add( nbits, ivas_qmetadata_encode_extended_gr_length( data[i], no_symb_local[i], *real_GR_ord ) ); + } + } + + real_GR_ord1 = 0; + move16(); + IF( use_context == 0 ) + { + nbits = GR_bits_new( data, no_symb_local, no_data, GR_order, 1, real_GR_ord ); + nbits1 = nbits; + move16(); + min_val = data[0]; + move16(); + FOR( i = 1; i < no_data; i++ ) + { + if ( LT_32( data[i], min_val ) ) { - egr_size_azimuth = add( egr_size_azimuth, ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes[i], dist_azimuth_alphabets[i], gr_param_azimuth ) ); + min_val = data[i]; + move16(); } } + FOR( i = 0; i < no_data; i++ ) + { + cdata[i] = (UWord16) L_sub( data[i], min_val ); + move16(); + } - azimuth_bits_ec = add( azimuth_bits_ec, add( ivas_qmetadata_encode_quasi_uniform_length( gr_param_azimuth, 5 + 1 ), egr_size_azimuth ) ); + maximum_s( no_symb_local, no_data, &max_val ); + nbits1 = add( GR_bits_new( cdata, no_symb_local, no_data, sub( GR_order, 1 ), 1, &real_GR_ord1 ), ivas_qmetadata_encode_extended_gr_length( min_val, max_val, MASA_GR_ORD_AZ ) ); - IF( LT_16( azimuth_bits_ec, azimuth_bits_ec_best ) ) + IF( LT_16( nbits1, nbits ) ) { - azimuth_bits_ec_best = azimuth_bits_ec; + nbits = add( nbits1, 1 ); + use_context = -2; move16(); - avg_azimuth_index_best = avg_azimuth_index; + *real_GR_ord = real_GR_ord1; move16(); - gr_param_azimuth_best = gr_param_azimuth; + } + ELSE + { + nbits = add( nbits, 1 ); + use_context = -1; move16(); - - FOR( idx = 0; idx < dist_count; idx++ ) - { - dist_azimuth_indexes_best[idx] = dist_azimuth_indexes[idx]; - move16(); - } } } - test(); - test(); - test(); - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( dist_count, 4 ) && NE_16( gr_param_azimuth_best, 5 ) && GT_16( nblocks, 1 ) ) + *p_use_context = use_context; + move16(); + return nbits; +} + +/*------------------------------------------------------------------------- + * mean_removed_GR_new() + * + * Golomb Rice encoding with mean removing + *------------------------------------------------------------------------*/ +/*! r: number of bits used */ +static Word16 mean_removed_GR_new( + const UWord16 *idx, /* i : data to encode */ + const Word16 max_no_symb, + const Word16 len, /* i : number of data */ + const Word16 adapt_GR, /* i : flag for telling to use or nor two GR order values */ + Word16 *GR_ord, /* i/o: GR order */ + UWord16 *p_av, /* o : average index */ + UWord16 *mr_idx /* o : mean removed indexes */ +) +{ + Word16 av, i, nbits; + Word16 sh_idx[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 max_ns[MASA_MAXIMUM_CODING_SUBBANDS]; + + /* av = (Word16) ( 0.5f + sum_s( (const Word16 *) idx, len ) / (float) len ); */ + av = div_l( L_add( L_shl( sum16_fx( (const Word16 *) idx, len ), 1 ), 1 ), len ); + + *p_av = av; + move16(); + FOR( i = 0; i < len; i++ ) { - azimuth_bits_ec_best = add( azimuth_bits_ec_best, 1 ); + max_ns[i] = shl( max_no_symb, 1 ); + sh_idx[i] = sub( idx[i], av ); + move16(); + move16(); } - direction_bits_ec = add( direction_bits_ec, azimuth_bits_ec_best ); - - /*Decision raw or EC*/ - /* one bit is used to indicate whether the direction values are entropy coded or coded raw */ - IF( LT_16( direction_bits_ec, direction_bits_raw ) ) /* entropy coding is better */ + FOR( i = 0; i < len; i++ ) { - - /* encode the raw part first */ - FOR( i = start_band; i < nbands; i++ ) + IF( sh_idx[i] < 0 ) { - IF( GT_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) - { - IF( q_direction->not_in_2D > 0 ) - { - FOR( j = 0; j < nblocks; j++ ) - { - push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); - } - } - ELSE - { - FOR( j = 0; j < nblocks; j++ ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); - } - } - } + sh_idx[i] = -2 * sh_idx[i]; } - - test(); - test(); - if ( GT_16( nbands, 1 ) && sub( direction_bits_ec, max_bits ) > 0 && LT_16( sub( direction_bits_ec, max_bits ), imult1616( nblocks, nbands ) ) ) + ELSE IF( sh_idx[i] > 0 ) { - make_gain = 1; + sh_idx[i] = sub( shl( sh_idx[i], 1 ), 1 ); move16(); } - - IF( q_direction->not_in_2D > 0 ) + ELSE { - /* encode the ExtendedGR part for elevation */ - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, avg_elevation_index_best, avg_elevation_alphabet ); - } - ELSE - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( sub( avg_elevation_index_best, shr( avg_elevation_alphabet, 1 ) ) ), avg_elevation_alphabet ); - } - - ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_elevation_best, 4 + 1 ); - - IF( NE_16( gr_param_elevation_best, 4 ) ) /* not all zero */ - { - FOR( idx = 0; idx < dist_count; idx++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_elevation_indexes_best[idx], dist_elevation_alphabets[idx], gr_param_elevation_best ); - } - } + sh_idx[i] = 0; + move16(); } + mr_idx[i] = (UWord16) sh_idx[i]; + move16(); + } - /* encode the ExtendedGR part for azimuth */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( sub( avg_azimuth_index_best, shr( avg_azimuth_alphabet, 1 ) ) ), avg_azimuth_alphabet ); + nbits = GR_bits_new( mr_idx, max_ns, len, *GR_ord, adapt_GR, GR_ord ); - ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_azimuth_best, 5 + 1 ); + return nbits; +} - IF( NE_16( gr_param_azimuth_best, 5 ) ) /* not all zero */ - { - FOR( idx = 0; idx < s_min( nblocks, dist_count ); idx++ ) - { - test(); - test(); - IF( EQ_16( make_gain, 1 ) && LT_16( bits_gained, sub( direction_bits_ec, max_bits ) ) && GT_16( dist_azimuth_alphabets[idx], 40 ) ) - { - IF( GT_16( dist_azimuth_indexes_best[idx], 1 ) ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), - ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); - } - ELSE IF( EQ_16( dist_azimuth_indexes_best[idx], 1 ) ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), - ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); - } - ELSE - { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - } - } - ELSE - { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - } - } +/*------------------------------------------------------------------------- + * ivas_qmetadata_encode_quasi_uniform_length() + * + *------------------------------------------------------------------------*/ +static Word16 ivas_qmetadata_encode_quasi_uniform_length( + const UWord16 value, + const UWord16 alphabet_size ) +{ + Word16 bits; + UWord16 tresh; - IF( GT_16( dist_count, nblocks ) ) - { - test(); - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( nblocks, 1 ) ) - { - push_next_indice( hMetaData, use_adapt_avg, 1 ); - } - FOR( idx = nblocks; idx < dist_count; idx++ ) - { - test(); - test(); - IF( EQ_16( make_gain, 1 ) && LT_16( bits_gained, sub( direction_bits_ec, max_bits ) ) && GT_16( dist_azimuth_alphabets[idx], 40 ) ) - { - IF( GT_16( dist_azimuth_indexes_best[idx], 1 ) ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), - ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); - } - ELSE IF( EQ_16( dist_azimuth_indexes_best[idx], 1 ) ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), - ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); - } - ELSE - { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - } - } - ELSE - { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - } - } - } - } + bits = sub( 30, norm_l( alphabet_size ) ); /* bits = floor(log2(alphabet_size)) */ + tresh = (UWord16) L_sub( L_shl( 1U, add( bits, 1 ) ), alphabet_size ); - direction_bits_ec = sub( direction_bits_ec, bits_gained ); - } - ELSE + IF( GE_32( value, tresh ) ) { - direction_bits_ec = -1; - move16(); + bits = add( bits, 1 ); } - return direction_bits_ec; + return bits; } -#else -static int16_t ivas_qmetadata_entropy_encode_dir( + +/*------------------------------------------------------------------------- + * ivas_qmetadata_entropy_encode_dir() + * + * Main function for entropy coding of the directions + *------------------------------------------------------------------------*/ + +static Word16 ivas_qmetadata_entropy_encode_dir_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, - const uint16_t diffuseness_index_max_ec_frame, - const int16_t nbands, - const int16_t start_band, - const int16_t direction_bits_raw, - int16_t max_bits, - const int16_t hrmasa_flag ) + const UWord16 diffuseness_index_max_ec_frame, + const Word16 nbands, + const Word16 start_band, + const Word16 direction_bits_raw, + Word16 max_bits, + const Word16 hrmasa_flag ) { - uint16_t diff_idx_min; - int16_t i, j; - int16_t nblocks; - - float avg_direction_vector[3], direction_vector[3], avg_azimuth, avg_elevation; - int16_t avg_azimuth_alphabet, avg_elevation_alphabet; - uint16_t avg_azimuth_index, avg_elevation_index; - int16_t avg_elevation_index_projected; - int16_t avg_azimuth_index_projected; - uint16_t avg_elevation_index_initial, avg_elevation_offset; - uint16_t avg_azimuth_index_initial, avg_azimuth_offset; - int16_t elevation_bits_ec_best, azimuth_bits_ec_best; - - int16_t gr_param_elevation_best = 0, avg_elevation_index_best = 0; - uint16_t dist_elevation_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t gr_param_azimuth_best, avg_azimuth_index_best; + UWord16 diff_idx_min; + Word16 i, j; + Word16 nblocks; + + Word32 avg_direction_vector[3], direction_vector[3], avg_azimuth, avg_elevation; + Word16 avg_azimuth_alphabet, avg_elevation_alphabet; + UWord16 avg_azimuth_index, avg_elevation_index; + Word16 avg_elevation_index_projected; + Word16 avg_azimuth_index_projected; + UWord16 avg_elevation_index_initial, avg_elevation_offset; + UWord16 avg_azimuth_index_initial, avg_azimuth_offset; + Word16 elevation_bits_ec_best, azimuth_bits_ec_best; + + Word16 gr_param_elevation_best = 0, avg_elevation_index_best = 0; + move16(); + move16(); + UWord16 dist_elevation_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 gr_param_azimuth_best, avg_azimuth_index_best; uint16_t dist_azimuth_indexes_best[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t idx, dist_count; - int16_t direction_bits_ec; - - uint16_t dist_elevation_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t dist_elevation_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t dist_azimuth_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t dist_azimuth_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t all_zero_dist_elevation_indexes = 1, all_zero_dist_azimuth_indexes = 1; - int16_t gr_param_elevation, gr_size_elevation, egr_size_elevation, gr_param_azimuth, gr_size_azimuth; - int16_t egr_size_azimuth, elevation_bits_ec, azimuth_bits_ec; - - float abs_theta; - float theta_cb[MAX_NO_THETA]; - int16_t sign_th, no_th; - int16_t avg_azimuth_index_upd = 0, use_adapt_avg; - int16_t make_gain = 0; - int16_t bits_gained = 0; + UWord16 idx, dist_count; + Word16 direction_bits_ec; + + UWord16 dist_elevation_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + UWord16 dist_elevation_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + UWord16 dist_azimuth_indexes[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + UWord16 dist_azimuth_alphabets[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 all_zero_dist_elevation_indexes = 1, all_zero_dist_azimuth_indexes = 1; + move16(); + move16(); + Word16 gr_param_elevation, gr_size_elevation, egr_size_elevation, gr_param_azimuth, gr_size_azimuth; + Word16 egr_size_azimuth, elevation_bits_ec, azimuth_bits_ec; + + Word32 abs_theta; + Word16 theta_cb[MAX_NO_THETA]; // Q22-Q16 = Q6 + Word16 sign_th, no_th; + Word16 avg_azimuth_index_upd = 0, use_adapt_avg; + move16(); + Word16 make_gain = 0; + move16(); + Word16 bits_gained = 0; + move16(); nblocks = q_direction->cfg.nblocks; + move16(); /* estimate the number of bits for entropy coding of the direction values */ direction_bits_ec = 0; + move16(); diff_idx_min = DIRAC_DIFFUSE_LEVELS; + move16(); idx = 0; + move16(); dist_count = 0; - set_zero( avg_direction_vector, 3 ); + move16(); + set_zero_fx( avg_direction_vector, 3 ); - for ( i = start_band; i < nbands; i++ ) + FOR( i = start_band; i < nbands; i++ ) { - if ( hrmasa_flag ) + IF( hrmasa_flag ) { diff_idx_min = 0; // min( q_direction->band_data[i].energy_ratio_index_mod[0]>>1, diff_idx_min ); + move16(); } - else + ELSE { - diff_idx_min = min( q_direction->band_data[i].energy_ratio_index_mod[0], diff_idx_min ); + diff_idx_min = s_min( q_direction->band_data[i].energy_ratio_index_mod[0], diff_idx_min ); } - if ( q_direction->band_data[i].energy_ratio_index_mod[0] > diffuseness_index_max_ec_frame ) + IF( GT_32( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) { /* estimate the raw part */ - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { - direction_bits_ec += q_direction->band_data[i].bits_sph_idx[j]; + direction_bits_ec = add( direction_bits_ec, q_direction->band_data[i].bits_sph_idx[j] ); } } - else + ELSE { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { - direction_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + direction_bits_ec = add( direction_bits_ec, ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ) ); } } } - else + ELSE { - dist_count += nblocks; + dist_count = add( dist_count, nblocks ); - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { /*compute the average direction */ - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); + scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 + v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); } } } /* quantize average elevation and azimuth angles using the best angle spacing and equatorial precision */ - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector, Q22, &avg_azimuth, &avg_elevation ); - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + move16(); avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ + move16(); } - else + ELSE { - avg_elevation_alphabet = no_theta_masa[bits_direction_masa[diff_idx_min] - 3] * 2 - 1; + avg_elevation_alphabet = sub( shl( no_theta_masa[bits_direction_masa[diff_idx_min] - 3], 1 ), 1 ); avg_azimuth_alphabet = no_phi_masa[bits_direction_masa[diff_idx_min] - 1][0]; /* average azimuth is quantized on the equatorial plane */ + move16(); } no_th = no_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + move16(); - for ( i = 0; i < no_th; i++ ) + FOR( i = 0; i < no_th; i++ ) { - theta_cb[i] = i * delta_theta_masa[bits_direction_masa[diff_idx_min] - 3]; + theta_cb[i] = imult1616( i, round_fx( delta_theta_masa_fx[bits_direction_masa[diff_idx_min] - 3] ) ); + move16(); } - if ( theta_cb[i - 1] > 90 ) + if ( GT_32( theta_cb[i - 1], 90 << Q6 ) ) { - theta_cb[i - 1] = 90; + theta_cb[i - 1] = 90 << Q6; + move16(); } - if ( avg_elevation < 0 ) + IF( avg_elevation < 0 ) { - abs_theta = -avg_elevation; + abs_theta = L_negate( avg_elevation ); sign_th = -1; + move16(); } - else + ELSE { abs_theta = avg_elevation; + move32(); sign_th = 1; + move16(); } - avg_elevation_index = squant( abs_theta, &avg_elevation, theta_cb, no_th ); + Word16 tmp; + avg_elevation_index = squant_fx( round_fx( abs_theta ), &tmp, theta_cb, no_th ); + avg_elevation = L_deposit_h( tmp ); // Q22 - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { assert( avg_elevation >= 0 ); } - else + ELSE { - if ( sign_th < 0 ) + IF( sign_th < 0 ) + { + avg_elevation_index = sub( shr( avg_elevation_alphabet, 1 ), avg_elevation_index ); + } + ELSE { - avg_elevation_index = ( avg_elevation_alphabet >> 1 ) - avg_elevation_index; + avg_elevation_index = add( avg_elevation_index, shr( avg_elevation_alphabet, 1 ) ); } - else + // avg_elevation *= sign_th; + if ( sign_th < 0 ) { - avg_elevation_index += ( avg_elevation_alphabet >> 1 ); + avg_elevation = L_negate( avg_elevation ); } - avg_elevation *= sign_th; } - avg_azimuth_index = (uint16_t) ( quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ) ); + avg_azimuth_index = (UWord16) ( quantize_phi_enc_fx( L_add( avg_azimuth, DEGREE_180_Q_22 ), 0, &avg_azimuth, avg_azimuth_alphabet ) ); /* Elevation only if not 2D */ - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { avg_elevation_index_initial = avg_elevation_index; + move16(); elevation_bits_ec_best = MAX16B; + move16(); avg_elevation_index_best = -1; /* out of range value */ - gr_param_elevation_best = -1; /* out of range value */ + move16(); + gr_param_elevation_best = -1; /* out of range value */ + move16(); - for ( avg_elevation_offset = 0; avg_elevation_offset < q_direction->cfg.search_effort; avg_elevation_offset++ ) + FOR( avg_elevation_offset = 0; avg_elevation_offset < q_direction->cfg.search_effort; avg_elevation_offset++ ) { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - avg_elevation_index = avg_elevation_index_initial + avg_elevation_offset; + avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index_initial, avg_elevation_offset ) ); } - else + ELSE { - avg_elevation_index = (uint16_t) ( avg_elevation_index_initial + ivas_qmetadata_dereorder_generic( avg_elevation_offset ) ); + avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index_initial, ivas_qmetadata_dereorder_generic_fx( avg_elevation_offset ) ) ); } - avg_elevation_index = (uint16_t) ( ( avg_elevation_index + avg_elevation_alphabet ) % avg_elevation_alphabet ); + // avg_elevation_index = (uint16_t) ( ( avg_elevation_index + avg_elevation_alphabet ) % avg_elevation_alphabet ); + avg_elevation_index = u_extract_l( UL_addNsD( avg_elevation_index, avg_elevation_alphabet ) % avg_elevation_alphabet ); all_zero_dist_elevation_indexes = 1; - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + move16(); + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( avg_elevation_index, avg_elevation_alphabet ); } - else + ELSE { - elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( avg_elevation_index - ( avg_elevation_alphabet >> 1 ) ), avg_elevation_alphabet ); + elevation_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic_fx( sub( avg_elevation_index, shr( avg_elevation_alphabet, 1 ) ) ), avg_elevation_alphabet ); } idx = 0; - for ( i = start_band; i < nbands; i++ ) + move16(); + FOR( i = start_band; i < nbands; i++ ) { - if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) + IF( LE_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { /* project the quantized average elevation to the same grid as the current sample */ - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - avg_elevation_index_projected = ivas_chan_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); + avg_elevation_index_projected = ivas_chan_project_elevation_index_fx( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); } - else + ELSE { - avg_elevation_index_projected = ivas_dirac_project_elevation_index( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); + avg_elevation_index_projected = ivas_dirac_project_elevation_index_fx( avg_elevation_index, avg_elevation_alphabet, q_direction->band_data[i].elevation_m_alphabet[j] ); } - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - if ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected > 0 ) + IF( L_sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ) > 0 ) { - dist_elevation_indexes[idx] = 2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ) - 1; + // dist_elevation_indexes[idx] = 2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ) - 1; + dist_elevation_indexes[idx] = sub( shl( sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ), 1 ), 1 ); + move16(); } - else + ELSE { - dist_elevation_indexes[idx] = -2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ); + // dist_elevation_indexes[idx] = -2 * ( q_direction->band_data[i].elevation_index[j] - avg_elevation_index_projected ); + dist_elevation_indexes[idx] = imult1616( -2, sub( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected ) ); + move16(); } } - else + ELSE { - dist_elevation_indexes[idx] = ivas_qmetadata_reorder_elevation_index( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected, q_direction->band_data[i].elevation_m_alphabet[j] ); + dist_elevation_indexes[idx] = ivas_qmetadata_reorder_elevation_index_fx( q_direction->band_data[i].elevation_index[j], avg_elevation_index_projected, q_direction->band_data[i].elevation_m_alphabet[j] ); + move16(); } - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - dist_elevation_alphabets[idx] = 2 * q_direction->band_data[i].elevation_m_alphabet[j] - 1; + dist_elevation_alphabets[idx] = sub( shl( q_direction->band_data[i].elevation_m_alphabet[j], 1 ), 1 ); + move16(); } - else + ELSE { dist_elevation_alphabets[idx] = q_direction->band_data[i].elevation_m_alphabet[j]; + move16(); } if ( dist_elevation_indexes[idx] != 0 ) { all_zero_dist_elevation_indexes = 0; + move16(); } - idx++; + idx = add( idx, 1 ); } } } - if ( all_zero_dist_elevation_indexes ) + IF( all_zero_dist_elevation_indexes ) { egr_size_elevation = 0; + move16(); gr_param_elevation = 4; + move16(); } - else + ELSE { - gr_param_elevation = ivas_qmetadata_get_optimal_gr_param( dist_elevation_indexes, idx, 4, &gr_size_elevation ); + gr_param_elevation = ivas_qmetadata_get_optimal_gr_param_fx( dist_elevation_indexes, idx, 4, &gr_size_elevation ); egr_size_elevation = 0; - for ( i = 0; i < idx; i++ ) + move16(); + FOR( i = 0; i < idx; i++ ) { - egr_size_elevation += ivas_qmetadata_encode_extended_gr_length( dist_elevation_indexes[i], dist_elevation_alphabets[i], gr_param_elevation ); + egr_size_elevation = add( egr_size_elevation, ivas_qmetadata_encode_extended_gr_length( dist_elevation_indexes[i], dist_elevation_alphabets[i], gr_param_elevation ) ); } } - elevation_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( gr_param_elevation, 4 + 1 ) + egr_size_elevation; + elevation_bits_ec = add( elevation_bits_ec, add( ivas_qmetadata_encode_quasi_uniform_length( gr_param_elevation, 4 + 1 ), egr_size_elevation ) ); - if ( elevation_bits_ec < elevation_bits_ec_best ) + IF( LT_16( elevation_bits_ec, elevation_bits_ec_best ) ) { elevation_bits_ec_best = elevation_bits_ec; + move16(); avg_elevation_index_best = avg_elevation_index; + move16(); gr_param_elevation_best = gr_param_elevation; - for ( idx = 0; idx < dist_count; idx++ ) + move16(); + FOR( idx = 0; idx < dist_count; idx++ ) { dist_elevation_indexes_best[idx] = dist_elevation_indexes[idx]; + move16(); } } } - direction_bits_ec += elevation_bits_ec_best; + direction_bits_ec = add( direction_bits_ec, elevation_bits_ec_best ); } /*Azimuth*/ use_adapt_avg = 0; - if ( ( nbands - start_band >= 5 ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) + move16(); + test(); + test(); + IF( GE_16( sub( nbands, start_band ), 5 ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( nblocks, 1 ) ) { - use_adapt_avg = calc_var_azi( q_direction, diffuseness_index_max_ec_frame, avg_azimuth - 180, &avg_azimuth ); - avg_azimuth_index = (uint16_t) ( quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ) ); + use_adapt_avg = calc_var_azi_fx( q_direction, diffuseness_index_max_ec_frame, L_sub( avg_azimuth, DEGREE_180_Q_22 ), &avg_azimuth ); // 180.Q22 + + avg_azimuth_index = (UWord16) ( quantize_phi_enc_fx( L_add( avg_azimuth, DEGREE_180_Q_22 ), 0, &avg_azimuth, avg_azimuth_alphabet ) ); } avg_azimuth_index_initial = avg_azimuth_index; /* avg_azimuth_index;*/ + move16(); azimuth_bits_ec_best = MAX16B; + move16(); avg_azimuth_index_best = -1; /* out of range value */ - gr_param_azimuth_best = -1; /* out of range value */ + move16(); + gr_param_azimuth_best = -1; /* out of range value */ + move16(); - for ( avg_azimuth_offset = 0; avg_azimuth_offset < q_direction->cfg.search_effort; avg_azimuth_offset++ ) + FOR( avg_azimuth_offset = 0; avg_azimuth_offset < q_direction->cfg.search_effort; avg_azimuth_offset++ ) { - set_zero( avg_direction_vector, 3 ); - avg_azimuth_index = (uint16_t) ( avg_azimuth_index_initial + ivas_qmetadata_dereorder_generic( avg_azimuth_offset ) ); - avg_azimuth_index = (uint16_t) ( ( avg_azimuth_index + avg_azimuth_alphabet ) % avg_azimuth_alphabet ); + set_zero_fx( avg_direction_vector, 3 ); + avg_azimuth_index = (UWord16) add( avg_azimuth_index_initial, ivas_qmetadata_dereorder_generic_fx( avg_azimuth_offset ) ); + avg_azimuth_index = (UWord16) ( add( avg_azimuth_index, avg_azimuth_alphabet ) % avg_azimuth_alphabet ); all_zero_dist_azimuth_indexes = 1; - azimuth_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic( avg_azimuth_index - ( avg_azimuth_alphabet >> 1 ) ), avg_azimuth_alphabet ); + move16(); + azimuth_bits_ec = ivas_qmetadata_encode_quasi_uniform_length( ivas_qmetadata_reorder_generic_fx( sub( avg_azimuth_index, shr( avg_azimuth_alphabet, 1 ) ) ), avg_azimuth_alphabet ); idx = 0; - for ( i = start_band; i < nbands; i++ ) + move16(); + FOR( i = start_band; i < nbands; i++ ) { - if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) + IF( LE_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { - - if ( ( idx > MASA_LIMIT_IDX_AVG_AZI ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + test(); + test(); + IF( GT_16( idx, MASA_LIMIT_IDX_AVG_AZI ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && EQ_16( use_adapt_avg, 1 ) ) { - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index_upd, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index_fx( avg_azimuth_index_upd, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); } - else + ELSE { - if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + test(); + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) { - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); - if ( idx < 4 ) + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); + scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 + + IF( LT_16( idx, 4 ) ) { - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); + v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); } } /* project the quantized average azimuth angle to the same grid as the current sample */ - avg_azimuth_index_projected = ivas_dirac_project_azimuth_index( avg_azimuth_index, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); + avg_azimuth_index_projected = ivas_dirac_project_azimuth_index_fx( avg_azimuth_index, avg_azimuth_alphabet, q_direction->band_data[i].azimuth_m_alphabet[j] ); } - dist_azimuth_indexes[idx] = ivas_qmetadata_reorder_azimuth_index( ivas_qmetadata_dereorder_generic( q_direction->band_data[i].azimuth_index[j] ) + ( q_direction->band_data[i].azimuth_m_alphabet[j] >> 1 ), avg_azimuth_index_projected, q_direction->band_data[i].azimuth_m_alphabet[j] ); + dist_azimuth_indexes[idx] = ivas_qmetadata_reorder_azimuth_index_fx( add( ivas_qmetadata_dereorder_generic_fx( q_direction->band_data[i].azimuth_index[j] ), shr( q_direction->band_data[i].azimuth_m_alphabet[j], 1 ) ), avg_azimuth_index_projected, q_direction->band_data[i].azimuth_m_alphabet[j] ); + move16(); dist_azimuth_alphabets[idx] = q_direction->band_data[i].azimuth_m_alphabet[j]; + move16(); if ( dist_azimuth_indexes[idx] != 0 ) { all_zero_dist_azimuth_indexes = 0; + move16(); } - if ( ( idx >= MASA_LIMIT_IDX_AVG_AZI ) && ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( use_adapt_avg == 1 ) ) + test(); + test(); + IF( GE_16( idx, MASA_LIMIT_IDX_AVG_AZI ) && NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && EQ_16( use_adapt_avg, 1 ) ) { - if ( idx % nblocks == 0 ) + IF( idx % nblocks == 0 ) { - v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); + // v_multc( avg_direction_vector, 0.5f, avg_direction_vector, 3 ); + scale_sig32( avg_direction_vector, 3, -1 ); } /*compute the average direction per already coded subband */ - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); - v_add( avg_direction_vector, direction_vector, avg_direction_vector, 3 ); - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector, &avg_azimuth, &avg_elevation ); - avg_azimuth_index_upd = quantize_phi( avg_azimuth + 180, 0, &avg_azimuth, avg_azimuth_alphabet ); + ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[i].azimuth_fx[j], q_direction->band_data[i].elevation_fx[j], direction_vector ); + scale_sig32( direction_vector, 3, -8 ); // Q30 -> Q22 + + v_add_fixed( avg_direction_vector, direction_vector, avg_direction_vector, 3, 0 ); + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector, Q22, &avg_azimuth, &avg_elevation ); + + avg_azimuth_index_upd = quantize_phi_enc_fx( L_add( avg_azimuth, 180 << Q22 ), 0, &avg_azimuth, avg_azimuth_alphabet ); } - idx++; + idx = add( idx, 1 ); } } } - if ( all_zero_dist_azimuth_indexes ) + IF( all_zero_dist_azimuth_indexes ) { egr_size_azimuth = 0; + move16(); gr_param_azimuth = 5; + move16(); } - else + ELSE { /* estimate the ExtendedGR part for azimuth */ - gr_param_azimuth = ivas_qmetadata_get_optimal_gr_param( dist_azimuth_indexes, idx, 5, &gr_size_azimuth ); + gr_param_azimuth = ivas_qmetadata_get_optimal_gr_param_fx( dist_azimuth_indexes, idx, 5, &gr_size_azimuth ); egr_size_azimuth = 0; - for ( i = 0; i < idx; i++ ) + move16(); + FOR( i = 0; i < idx; i++ ) { - egr_size_azimuth += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes[i], dist_azimuth_alphabets[i], gr_param_azimuth ); + egr_size_azimuth = add( egr_size_azimuth, ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes[i], dist_azimuth_alphabets[i], gr_param_azimuth ) ); } } - azimuth_bits_ec += ivas_qmetadata_encode_quasi_uniform_length( gr_param_azimuth, 5 + 1 ) + egr_size_azimuth; + azimuth_bits_ec = add( azimuth_bits_ec, add( ivas_qmetadata_encode_quasi_uniform_length( gr_param_azimuth, 5 + 1 ), egr_size_azimuth ) ); - if ( azimuth_bits_ec < azimuth_bits_ec_best ) + IF( LT_16( azimuth_bits_ec, azimuth_bits_ec_best ) ) { azimuth_bits_ec_best = azimuth_bits_ec; + move16(); avg_azimuth_index_best = avg_azimuth_index; + move16(); gr_param_azimuth_best = gr_param_azimuth; + move16(); - for ( idx = 0; idx < dist_count; idx++ ) + FOR( idx = 0; idx < dist_count; idx++ ) { dist_azimuth_indexes_best[idx] = dist_azimuth_indexes[idx]; + move16(); } } } - if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( dist_count > 4 ) && ( gr_param_azimuth_best != 5 ) && ( nblocks > 1 ) ) + test(); + test(); + test(); + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( dist_count, 4 ) && NE_16( gr_param_azimuth_best, 5 ) && GT_16( nblocks, 1 ) ) { - azimuth_bits_ec_best += 1; + azimuth_bits_ec_best = add( azimuth_bits_ec_best, 1 ); } - direction_bits_ec += azimuth_bits_ec_best; + direction_bits_ec = add( direction_bits_ec, azimuth_bits_ec_best ); /*Decision raw or EC*/ /* one bit is used to indicate whether the direction values are entropy coded or coded raw */ - if ( direction_bits_ec < direction_bits_raw ) /* entropy coding is better */ + IF( LT_16( direction_bits_ec, direction_bits_raw ) ) /* entropy coding is better */ { /* encode the raw part first */ - for ( i = start_band; i < nbands; i++ ) + FOR( i = start_band; i < nbands; i++ ) { - if ( q_direction->band_data[i].energy_ratio_index_mod[0] > diffuseness_index_max_ec_frame ) + IF( GT_16( q_direction->band_data[i].energy_ratio_index_mod[0], diffuseness_index_max_ec_frame ) ) { - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); } } - else + ELSE { - for ( j = 0; j < nblocks; j++ ) + FOR( j = 0; j < nblocks; j++ ) { ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); } @@ -5217,28 +2784,31 @@ static int16_t ivas_qmetadata_entropy_encode_dir( } } - if ( nbands > 1 && direction_bits_ec - max_bits > 0 && direction_bits_ec - max_bits < nblocks * nbands ) + test(); + test(); + if ( GT_16( nbands, 1 ) && sub( direction_bits_ec, max_bits ) > 0 && LT_16( sub( direction_bits_ec, max_bits ), imult1616( nblocks, nbands ) ) ) { make_gain = 1; + move16(); } - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { /* encode the ExtendedGR part for elevation */ - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { ivas_qmetadata_encode_quasi_uniform( hMetaData, avg_elevation_index_best, avg_elevation_alphabet ); } - else + ELSE { - ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( avg_elevation_index_best - ( avg_elevation_alphabet >> 1 ) ), avg_elevation_alphabet ); + ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic_fx( sub( avg_elevation_index_best, shr( avg_elevation_alphabet, 1 ) ) ), avg_elevation_alphabet ); } ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_elevation_best, 4 + 1 ); - if ( gr_param_elevation_best != 4 ) /* not all zero */ + IF( NE_16( gr_param_elevation_best, 4 ) ) /* not all zero */ { - for ( idx = 0; idx < dist_count; idx++ ) + FOR( idx = 0; idx < dist_count; idx++ ) { ivas_qmetadata_encode_extended_gr( hMetaData, dist_elevation_indexes_best[idx], dist_elevation_alphabets[idx], gr_param_elevation_best ); } @@ -5246,67 +2816,72 @@ static int16_t ivas_qmetadata_entropy_encode_dir( } /* encode the ExtendedGR part for azimuth */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic( avg_azimuth_index_best - ( avg_azimuth_alphabet >> 1 ) ), avg_azimuth_alphabet ); + ivas_qmetadata_encode_quasi_uniform( hMetaData, ivas_qmetadata_reorder_generic_fx( sub( avg_azimuth_index_best, shr( avg_azimuth_alphabet, 1 ) ) ), avg_azimuth_alphabet ); ivas_qmetadata_encode_quasi_uniform( hMetaData, gr_param_azimuth_best, 5 + 1 ); - if ( gr_param_azimuth_best != 5 ) /* not all zero */ + IF( NE_16( gr_param_azimuth_best, 5 ) ) /* not all zero */ { - for ( idx = 0; idx < min( nblocks, dist_count ); idx++ ) + FOR( idx = 0; idx < s_min( nblocks, dist_count ); idx++ ) { - if ( make_gain == 1 && bits_gained < direction_bits_ec - max_bits && dist_azimuth_alphabets[idx] > 40 ) + test(); + test(); + IF( EQ_16( make_gain, 1 ) && LT_16( bits_gained, sub( direction_bits_ec, max_bits ) ) && GT_16( dist_azimuth_alphabets[idx], 40 ) ) { - if ( dist_azimuth_indexes_best[idx] > 1 ) + IF( GT_16( dist_azimuth_indexes_best[idx], 1 ) ) { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - - ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), + ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); } - else if ( dist_azimuth_indexes_best[idx] == 1 ) + ELSE IF( EQ_16( dist_azimuth_indexes_best[idx], 1 ) ) { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - - ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), + ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); } - else + ELSE { ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); } } - else + ELSE { ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); } } - if ( dist_count > nblocks ) + IF( GT_16( dist_count, nblocks ) ) { - if ( ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) && ( nblocks > 1 ) ) + test(); + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) && GT_16( nblocks, 1 ) ) { push_next_indice( hMetaData, use_adapt_avg, 1 ); } - for ( idx = nblocks; idx < dist_count; idx++ ) + FOR( idx = nblocks; idx < dist_count; idx++ ) { - if ( make_gain == 1 && bits_gained < direction_bits_ec - max_bits && dist_azimuth_alphabets[idx] > 40 ) + test(); + test(); + IF( EQ_16( make_gain, 1 ) && LT_16( bits_gained, sub( direction_bits_ec, max_bits ) ) && GT_16( dist_azimuth_alphabets[idx], 40 ) ) { - if ( dist_azimuth_indexes_best[idx] > 1 ) + IF( GT_16( dist_azimuth_indexes_best[idx], 1 ) ) { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - - ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 2, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), + ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 2 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); } - else if ( dist_azimuth_indexes_best[idx] == 1 ) + ELSE IF( EQ_16( dist_azimuth_indexes_best[idx], 1 ) ) { - ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); - bits_gained += ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ) - - ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx] - 1, dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + ivas_qmetadata_encode_extended_gr( hMetaData, sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ); + bits_gained = add( bits_gained, sub( ivas_qmetadata_encode_extended_gr_length( dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ), + ivas_qmetadata_encode_extended_gr_length( sub( dist_azimuth_indexes_best[idx], 1 ), dist_azimuth_alphabets[idx], gr_param_azimuth_best ) ) ); } - else + ELSE { ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); } } - else + ELSE { ivas_qmetadata_encode_extended_gr( hMetaData, dist_azimuth_indexes_best[idx], dist_azimuth_alphabets[idx], gr_param_azimuth_best ); } @@ -5314,134 +2889,73 @@ static int16_t ivas_qmetadata_entropy_encode_dir( } } - direction_bits_ec -= bits_gained; + direction_bits_ec = sub( direction_bits_ec, bits_gained ); } - else + ELSE { direction_bits_ec = -1; - } - - return direction_bits_ec; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_qmetadata_raw_encode_dir() - * - * Main function for raw coding of the directions (writing and bit estimation) - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 ivas_qmetadata_raw_encode_dir_fx( - BSTR_ENC_HANDLE hMetaData, - IVAS_QDIRECTION *q_direction, - const Word16 nbands, - const Word16 start_band ) -{ - Word16 i, j; - Word16 direction_bits_raw; - Word16 start_bits = 0; /*To avoid compiler warning*/ - move16(); - - direction_bits_raw = 0; - move16(); - if ( hMetaData != NULL ) - { - start_bits = hMetaData->nb_bits_tot; move16(); } - IF( q_direction->not_in_2D > 0 ) - { - FOR( i = start_band; i < nbands; i++ ) - { - IF( hMetaData != NULL ) - { - FOR( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); - } - } - ELSE - { - direction_bits_raw = add( direction_bits_raw, imult1616( q_direction->cfg.nblocks, q_direction->band_data[i].bits_sph_idx[0] ) ); - } - } - } - ELSE - { - FOR( i = start_band; i < nbands; i++ ) - { - FOR( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - IF( hMetaData != NULL ) - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); - } - ELSE - { - direction_bits_raw = add( direction_bits_raw, - ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ) ); - } - } - } - } - - if ( hMetaData != NULL ) - { - direction_bits_raw = sub( hMetaData->nb_bits_tot, start_bits ); - } - - return direction_bits_raw; + return direction_bits_ec; } -#else -static int16_t ivas_qmetadata_raw_encode_dir( + + +/*------------------------------------------------------------------------- + * ivas_qmetadata_raw_encode_dir() + * + * Main function for raw coding of the directions (writing and bit estimation) + *------------------------------------------------------------------------*/ +static Word16 ivas_qmetadata_raw_encode_dir_fx( BSTR_ENC_HANDLE hMetaData, IVAS_QDIRECTION *q_direction, - const int16_t nbands, - const int16_t start_band ) + const Word16 nbands, + const Word16 start_band ) { - int16_t i, j; - int16_t direction_bits_raw; - int16_t start_bits = 0; /*To avoid compiler warning*/ + Word16 i, j; + Word16 direction_bits_raw; + Word16 start_bits = 0; /*To avoid compiler warning*/ + move16(); direction_bits_raw = 0; + move16(); if ( hMetaData != NULL ) { start_bits = hMetaData->nb_bits_tot; + move16(); } - if ( q_direction->not_in_2D > 0 ) + IF( q_direction->not_in_2D > 0 ) { - for ( i = start_band; i < nbands; i++ ) + FOR( i = start_band; i < nbands; i++ ) { - if ( hMetaData != NULL ) + IF( hMetaData != NULL ) { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + FOR( j = 0; j < q_direction->cfg.nblocks; j++ ) { push_next_indice( hMetaData, q_direction->band_data[i].spherical_index[j], q_direction->band_data[i].bits_sph_idx[j] ); } } - else + ELSE { - direction_bits_raw += q_direction->cfg.nblocks * q_direction->band_data[i].bits_sph_idx[0]; + direction_bits_raw = add( direction_bits_raw, imult1616( q_direction->cfg.nblocks, q_direction->band_data[i].bits_sph_idx[0] ) ); } } } - else + ELSE { - for ( i = start_band; i < nbands; i++ ) + FOR( i = start_band; i < nbands; i++ ) { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) + FOR( j = 0; j < q_direction->cfg.nblocks; j++ ) { - if ( hMetaData != NULL ) + IF( hMetaData != NULL ) { ivas_qmetadata_encode_quasi_uniform( hMetaData, q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); } - else + ELSE { - direction_bits_raw += ivas_qmetadata_encode_quasi_uniform_length( - q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ); + direction_bits_raw = add( direction_bits_raw, + ivas_qmetadata_encode_quasi_uniform_length( q_direction->band_data[i].azimuth_index[j], q_direction->band_data[i].azimuth_m_alphabet[j] ) ); } } } @@ -5449,19 +2963,17 @@ static int16_t ivas_qmetadata_raw_encode_dir( if ( hMetaData != NULL ) { - direction_bits_raw = hMetaData->nb_bits_tot - start_bits; + direction_bits_raw = sub( hMetaData->nb_bits_tot, start_bits ); } return direction_bits_raw; } -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_get_optimal_gr_param() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_get_optimal_gr_param_fx( UWord16 *unsigned_data, const Word16 count, @@ -5499,47 +3011,12 @@ static Word16 ivas_qmetadata_get_optimal_gr_param_fx( return opt_gr_param; } -#else -static int16_t ivas_qmetadata_get_optimal_gr_param( - uint16_t *unsigned_data, - const int16_t count, - const int16_t gr_param_count, - int16_t *opt_gr_size ) -{ - int16_t opt_bits, bits, idx; - int16_t opt_gr_param; - int16_t p; - - opt_bits = MAX16B; - opt_gr_param = -1; - - for ( p = 0; p < gr_param_count; p++ ) - { - bits = count * ( 1 + p ); /* terminating zero bit and the lsb bits */ - for ( idx = 0; idx < count; idx++ ) - { - bits += unsigned_data[idx] >> p; /* leading one bits */ - } - - if ( bits < opt_bits ) - { - opt_gr_param = p; - opt_bits = bits; - } - } - - *opt_gr_size = opt_bits; - - return opt_gr_param; -} -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_encode_extended_gr_length() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 ivas_qmetadata_encode_extended_gr_length( const UWord16 value, @@ -5577,51 +3054,12 @@ ivas_qmetadata_encode_extended_gr_length( return bits; } -#else -int16_t -ivas_qmetadata_encode_extended_gr_length( - const uint16_t value, - const uint16_t alphabet_size, - const int16_t gr_param ) -{ - uint16_t msb_alphabet_size; - int16_t bits; - uint16_t msb, lsb; - - - msb_alphabet_size = ( alphabet_size + ( 1U << gr_param ) - 1 ) >> gr_param; - - if ( msb_alphabet_size <= 3 ) - { - /* EncodeQuasiUniform is always equal or better than Limited GR with up to 3 msb values */ - bits = ivas_qmetadata_encode_quasi_uniform_length( value, alphabet_size ); - } - else - { - msb = value >> gr_param; - - bits = msb; /* leading one bits */ - if ( msb < msb_alphabet_size - 1 ) - { - bits += 1 + gr_param; /* terminating zero bit, if not the largest msb (Limited GR), and the lsb bits */ - } - else - { - lsb = value & ( ( 1U << gr_param ) - 1 ); - bits += ivas_qmetadata_encode_quasi_uniform_length( lsb, alphabet_size - ( ( msb_alphabet_size - 1 ) << gr_param ) ); - } - } - - return bits; -} -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_reorder_elevation_index() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_reorder_elevation_index_fx( const Word16 elevation_index, const Word16 avg_elevation_index, @@ -5644,45 +3082,16 @@ static Word16 ivas_qmetadata_reorder_elevation_index_fx( } /* fold reduced signed distance value for converting to unsigned */ - elevation_index_reordered = ivas_qmetadata_reorder_generic( elevation_index_reordered ); - - return elevation_index_reordered; -} -#else -static int16_t ivas_qmetadata_reorder_elevation_index( - const int16_t elevation_index, - const int16_t avg_elevation_index, - const int16_t elevation_alphabet ) -{ - int16_t elevation_alphabet_half; - int16_t elevation_index_reordered; - - elevation_alphabet_half = elevation_alphabet >> 1; - elevation_index_reordered = elevation_index - avg_elevation_index; - - /* reduce the distance for the index elevation to the range [-elevation_alphabet_half, elevation_alphabet_half] */ - if ( elevation_index_reordered < -elevation_alphabet_half ) - { - elevation_index_reordered += elevation_alphabet; - } - else if ( elevation_index_reordered > elevation_alphabet_half ) - { - elevation_index_reordered -= elevation_alphabet; - } - - /* fold reduced signed distance value for converting to unsigned */ - elevation_index_reordered = ivas_qmetadata_reorder_generic( elevation_index_reordered ); + elevation_index_reordered = ivas_qmetadata_reorder_generic_fx( elevation_index_reordered ); return elevation_index_reordered; } -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_reorder_azimuth_index() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_reorder_azimuth_index_fx( const Word16 azimuth_index, const Word16 avg_azimuth_index, @@ -5711,7 +3120,7 @@ static Word16 ivas_qmetadata_reorder_azimuth_index_fx( azimuth_index_reordered = sub( azimuth_index_reordered, azimuth_alphabet ); } /* fold reduced signed distance value for converting to unsigned */ - azimuth_index_reordered = ivas_qmetadata_reorder_generic( azimuth_index_reordered ); + azimuth_index_reordered = ivas_qmetadata_reorder_generic_fx( azimuth_index_reordered ); } ELSE { @@ -5722,52 +3131,12 @@ static Word16 ivas_qmetadata_reorder_azimuth_index_fx( return azimuth_index_reordered; } -#else -static int16_t ivas_qmetadata_reorder_azimuth_index( - const int16_t azimuth_index, - const int16_t avg_azimuth_index, - const int16_t azimuth_alphabet ) -{ - int16_t azimuth_alphabet_half; - int16_t azimuth_index_reordered; - - azimuth_index_reordered = azimuth_index - avg_azimuth_index; - - if ( ( azimuth_alphabet != 1 ) && ( ( azimuth_alphabet & 0x01 ) == 1 ) ) - { - return ( ivas_qmetadata_reorder_elevation_index( azimuth_index, avg_azimuth_index, azimuth_alphabet ) ); - } - else if ( azimuth_alphabet != 1 ) - { - azimuth_alphabet_half = azimuth_alphabet >> 1; - /* reduce the distance for the index azimuth to the range [-azimuth_alphabet_half, azimuth_alphabet_half - 1] */ - if ( azimuth_index_reordered < -azimuth_alphabet_half ) - { - azimuth_index_reordered += azimuth_alphabet; - } - else if ( azimuth_index_reordered > azimuth_alphabet_half - 1 ) - { - azimuth_index_reordered -= azimuth_alphabet; - } - /* fold reduced signed distance value for converting to unsigned */ - azimuth_index_reordered = ivas_qmetadata_reorder_generic( azimuth_index_reordered ); - } - else - { - /* for North and South poles, a single azimuth direction exists */ - azimuth_index_reordered = 0; - } - - return azimuth_index_reordered; -} -#endif /*------------------------------------------------------------------------- * ivas_qmetadata_encode_extended_gr() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_qmetadata_encode_extended_gr( BSTR_ENC_HANDLE hMetaData, const UWord16 value, @@ -5812,57 +3181,10 @@ void ivas_qmetadata_encode_extended_gr( return; } -#else -void ivas_qmetadata_encode_extended_gr( - BSTR_ENC_HANDLE hMetaData, - const uint16_t value, - const uint16_t alphabet_size, - const int16_t gr_param ) -{ - uint16_t msb_alphabet_size; - uint16_t msb, lsb, cnt; - - - msb_alphabet_size = ( alphabet_size + ( 1U << gr_param ) - 1 ) >> gr_param; - - if ( msb_alphabet_size <= 3 ) - { - /* EncodeQuasiUniform is always equal or better than Limited GR with up to 3 msb values */ - ivas_qmetadata_encode_quasi_uniform( hMetaData, value, alphabet_size ); - } - else - { - msb = value >> gr_param; - lsb = value & ( ( 1U << gr_param ) - 1 ); - - for ( cnt = 0; cnt < msb; cnt++ ) - { - /* leading one bits */ - push_next_indice( hMetaData, 1, 1 ); - } - - if ( msb < msb_alphabet_size - 1 ) - { - push_next_indice( hMetaData, 0, 1 ); /* terminating zero bit, if not the largest msb (Limited GR) */ - if ( gr_param > 0 ) - { - push_next_indice( hMetaData, lsb, gr_param ); - } - } - else - { - ivas_qmetadata_encode_quasi_uniform( hMetaData, lsb, alphabet_size - ( ( msb_alphabet_size - 1 ) << gr_param ) ); - } - } - - return; -} -#endif /*-----------------------------------------------------------------------* * Local functions (EC3, requantize directions) *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 truncGR0_fx( Word32 *data_fx, // Q22 Word32 *data_hat_fx, // Q22 @@ -5932,245 +3254,115 @@ static Word16 truncGR0_fx( data_idx[i] = remap3b[data_idx[i]]; move16(); bits = add( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[i], 8, 0 ) ); - // diff[i] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[i] - data_hat[i] ) ); /*(data[i] - data_hat[i])*(data[i] - data_hat[i]);*/ - L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[i], data_hat_fx[i] ), 91 ), 7 ) ) ) ); // Q31 - diff_fx[i] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 - move32(); - } - - i = 0; - move16(); - IF( GT_16( bits, bits_allowed ) ) - { - sort_desc_ind_32_fx( diff_fx, len, indx ); - FOR( i = len - 1; i >= 0; i-- ) - { - IF( GT_32( data_idx[indx[i]], 3 ) ) - { - bits = sub( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); - // data_idx[indx[i]] = quantize_phi( data[indx[i]] + 180, 0, &data_hat[indx[i]], 4 ); - data_idx[indx[i]] = quantize_phi_enc_fx( L_add( data_fx[indx[i]], DEGREE_180_Q_22 ), 0, &data_hat_fx[indx[i]], 4 ); - move16(); - // data_hat[indx[i]] -= 180; - data_hat_fx[indx[i]] = L_sub( data_hat_fx[indx[i]], DEGREE_180_Q_22 ); - move32(); - data_idx[indx[i]] = remap2b[data_idx[indx[i]]]; - move16(); - bits = add( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); - // diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); - L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[indx[i]], data_hat_fx[indx[i]] ), 91 ), 7 ) ) ) ); // Q31 - - diff_fx[indx[i]] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 - move32(); - } - IF( LE_16( bits, bits_allowed ) ) - { - BREAK; - } - } - } - - IF( GT_16( bits, bits_allowed ) ) - { - sort_desc_ind_32_fx( diff_fx, len, indx ); - FOR( i = len - 1; i >= 0; i-- ) - { - - IF( GT_16( data_idx[indx[i]], 1 ) ) - { - bits = sub( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); - - IF( LE_32( L_abs( data_fx[indx[i]] ), 377487360 ) ) // 90 in Q22 - { - data_idx[indx[i]] = 0; - move16(); - // data_hat[i] = 0.0f; - data_hat_fx[indx[i]] = 0; - move32(); - } - ELSE - { - data_idx[indx[i]] = 1; - move16(); - // data_hat[i] = -180.0f; - data_hat_fx[indx[i]] = -754974720; //-180 in Q22 - move32(); - } - - bits = add( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); - // diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); - L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[indx[i]], data_hat_fx[indx[i]] ), 91 ), 7 ) ) ) ); // Q31 - - diff_fx[indx[i]] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 - move32(); - } - - IF( LE_16( bits, bits_allowed ) ) - { - BREAK; - } - } - } - - IF( GT_16( bits, bits_allowed ) ) - { - - sort_desc_ind_32_fx( diff_fx, len, indx ); - FOR( i = len - 1; i >= 0; i-- ) - { - - IF( data_idx[indx[i]] > 0 ) - { - bits = sub( bits, data_idx[indx[i]] ); - data_idx[indx[i]] = 0; - move16(); - data_hat_fx[indx[i]] = 0; - move32(); - } - IF( LE_16( bits, bits_allowed ) ) - { - BREAK; - } - } - } - - return bits; -} -#else -static int16_t truncGR0( - float *data, - float *data_hat, - uint16_t *data_idx, - const int16_t len, - const int16_t bits_allowed, - float *st, - float *ct ) -{ - int16_t i; - int16_t bits; - const int16_t remap3b[8] = { 1, 6, 2, 4, 0, 5, 3, 7 }; - const int16_t remap2b[4] = { 1, 2, 0, 3 }; - float diff[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t indx[MAX_PARAM_SPATIAL_SUBFRAMES]; - - bits = 0; - set_f( data_hat, 0.0f, len ); - set_f( diff, 10000.0f, len ); - - if ( bits_allowed <= len + 1 ) - { - bits = min( bits_allowed, len ); - set_f( data_hat, 0.0f, len ); - /*set_s(data_idx, 0, len); */ - for ( i = 0; i < bits; i++ ) - { - if ( fabsf( data[i] ) <= 90 ) - { - data_idx[i] = 0; - data_hat[i] = 0.0f; - } - else - { - data_idx[i] = 1; - data_hat[i] = -180.0f; - } - } - - return bits; - } - - for ( i = 0; i < len; i++ ) - { - data_idx[i] = quantize_phi( data[i] + 180, 0, &data_hat[i], 8 ); - data_hat[i] -= 180; - data_idx[i] = remap3b[data_idx[i]]; - bits += ivas_qmetadata_encode_extended_gr_length( data_idx[i], 8, 0 ); - diff[i] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[i] - data_hat[i] ) ); /*(data[i] - data_hat[i])*(data[i] - data_hat[i]);*/ + // diff[i] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[i] - data_hat[i] ) ); /*(data[i] - data_hat[i])*(data[i] - data_hat[i]);*/ + L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[i], data_hat_fx[i] ), 91 ), 7 ) ) ) ); // Q31 + diff_fx[i] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 + move32(); } i = 0; - if ( bits > bits_allowed ) + move16(); + IF( GT_16( bits, bits_allowed ) ) { - sort_desc_ind( diff, len, indx ); - for ( i = len - 1; i >= 0; i-- ) + sort_desc_ind_32_fx( diff_fx, len, indx ); + FOR( i = len - 1; i >= 0; i-- ) { - if ( data_idx[indx[i]] > 3 ) + IF( GT_32( data_idx[indx[i]], 3 ) ) { - bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); - data_idx[indx[i]] = quantize_phi( data[indx[i]] + 180, 0, &data_hat[indx[i]], 4 ); - data_hat[indx[i]] -= 180; + bits = sub( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); + // data_idx[indx[i]] = quantize_phi( data[indx[i]] + 180, 0, &data_hat[indx[i]], 4 ); + data_idx[indx[i]] = quantize_phi_enc_fx( L_add( data_fx[indx[i]], DEGREE_180_Q_22 ), 0, &data_hat_fx[indx[i]], 4 ); + move16(); + // data_hat[indx[i]] -= 180; + data_hat_fx[indx[i]] = L_sub( data_hat_fx[indx[i]], DEGREE_180_Q_22 ); + move32(); data_idx[indx[i]] = remap2b[data_idx[indx[i]]]; - bits += ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); - diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + move16(); + bits = add( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); + // diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[indx[i]], data_hat_fx[indx[i]] ), 91 ), 7 ) ) ) ); // Q31 + + diff_fx[indx[i]] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 + move32(); } - if ( bits <= bits_allowed ) + IF( LE_16( bits, bits_allowed ) ) { - break; + BREAK; } } } - if ( bits > bits_allowed ) + IF( GT_16( bits, bits_allowed ) ) { - sort_desc_ind( diff, len, indx ); - for ( i = len - 1; i >= 0; i-- ) + sort_desc_ind_32_fx( diff_fx, len, indx ); + FOR( i = len - 1; i >= 0; i-- ) { - if ( data_idx[indx[i]] > 1 ) + IF( GT_16( data_idx[indx[i]], 1 ) ) { - bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); - if ( fabsf( data[indx[i]] ) <= 90 ) + bits = sub( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); + + IF( LE_32( L_abs( data_fx[indx[i]] ), 377487360 ) ) // 90 in Q22 { data_idx[indx[i]] = 0; - data_hat[indx[i]] = 0; + move16(); + // data_hat[i] = 0.0f; + data_hat_fx[indx[i]] = 0; + move32(); } - else + ELSE { data_idx[indx[i]] = 1; - data_hat[indx[i]] = -180; + move16(); + // data_hat[i] = -180.0f; + data_hat_fx[indx[i]] = -754974720; //-180 in Q22 + move32(); } - bits += ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ); - diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + bits = add( bits, ivas_qmetadata_encode_extended_gr_length( data_idx[indx[i]], 8, 0 ) ); + // diff[indx[i]] = -st[i] - ct[i] * cosf( PI_OVER_180 * ( data[indx[i]] - data_hat[indx[i]] ) ); + L_temp = L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( L_sub( data_fx[indx[i]], data_hat_fx[indx[i]] ), 91 ), 7 ) ) ) ); // Q31 + + diff_fx[indx[i]] = L_negate( L_add( L_shr( st_fx[i], 1 ), L_shr( Mpy_32_32( ct_fx[i], L_temp ), 1 ) ) ); // Q30 + move32(); } - if ( bits <= bits_allowed ) + IF( LE_16( bits, bits_allowed ) ) { - break; + BREAK; } } } - if ( bits > bits_allowed ) + IF( GT_16( bits, bits_allowed ) ) { - - sort_desc_ind( diff, len, indx ); - for ( i = len - 1; i >= 0; i-- ) + sort_desc_ind_32_fx( diff_fx, len, indx ); + FOR( i = len - 1; i >= 0; i-- ) { - if ( data_idx[indx[i]] > 0 ) + IF( data_idx[indx[i]] > 0 ) { - bits -= data_idx[indx[i]]; + bits = sub( bits, data_idx[indx[i]] ); data_idx[indx[i]] = 0; - data_hat[indx[i]] = 0; + move16(); + data_hat_fx[indx[i]] = 0; + move32(); } - if ( bits <= bits_allowed ) + IF( LE_16( bits, bits_allowed ) ) { - break; + BREAK; } } } return bits; } -#endif /*-------------------------------------------------------------------* * truncGR0_chan() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 truncGR0_chan_fx( const Word32 *data_fx, // Q22 Word32 *data_hat_fx, // Q22 @@ -6306,121 +3498,12 @@ static Word16 truncGR0_chan_fx( return bits; } -#else -static int16_t truncGR0_chan( - const float *data, - float *data_hat, - uint16_t *data_idx, - const int16_t len, - const int16_t bits_allowed, - float *st, - float *ct ) -{ - int16_t i, idx_crt; - int16_t bits; - float diff[MAX_PARAM_SPATIAL_SUBFRAMES], sort_diff[MAX_PARAM_SPATIAL_SUBFRAMES], min_diff, sum_diff; - int16_t indx[MAX_PARAM_SPATIAL_SUBFRAMES]; - - bits = 0; - set_f( data_hat, 0.0f, len ); - set_f( diff, 10000.0f, len ); - - if ( bits_allowed <= len + 1 ) - { - bits = min( bits_allowed, len ); - set_f( data_hat, 0.0f, len ); - /*set_s(data_idx, 0, len); */ - for ( i = 0; i < bits; i++ ) - { - if ( fabsf( data[i] ) <= 90 ) - { - data_idx[i] = 0; - data_hat[i] = 0.0f; - } - else - { - data_idx[i] = 1; - data_hat[i] = -180.0f; - } - } - return bits; - } - - for ( i = 0; i < len; i++ ) - { - data_idx[i] = quantize_phi_chan_lbr( data[i], &data_hat[i], 9 ); - - bits += ivas_qmetadata_encode_extended_gr_length( data_idx[i], 9, 0 ); - diff[i] = -st[i] - ct[i] * cosf( ( data[i] - data_hat[i] ) * PI_OVER_180 ); - } - - while ( bits > bits_allowed ) - { - min_diff = 1000.0f; - idx_crt = -1; - mvr2r( diff, sort_diff, len ); - for ( i = 0; i < len; i++ ) - { - if ( data_idx[i] > 0 ) - { - sort_diff[i] = -st[i] - ct[i] * cosf( ( fabsf( data[i] ) - cb_azi_chan[( ( data_idx[i] + 1 ) >> 1 ) - 1] ) * PI_OVER_180 ); - sum_diff = sum_f( sort_diff, len ); - - if ( sum_diff < min_diff ) - { - min_diff = sum_diff; - idx_crt = i; - } - sort_diff[i] = diff[i]; - } - } - - if ( idx_crt > -1 ) - { - bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); - data_idx[idx_crt] = quantize_phi_chan_lbr( data[idx_crt], &data_hat[idx_crt], data_idx[idx_crt] + 1 ); - bits += ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); - diff[idx_crt] = -st[idx_crt] - ct[idx_crt] * cosf( ( data[idx_crt] - data_hat[idx_crt] ) * PI_OVER_180 ); - } - else - { - break; - } - } - - if ( bits > bits_allowed ) - { - mvr2r( diff, sort_diff, len ); - sort_desc_ind( sort_diff, len, indx ); - - for ( i = len - 1; i >= 0; i-- ) - { - idx_crt = indx[i]; - if ( data_idx[idx_crt] > 0 ) - { - bits -= ivas_qmetadata_encode_extended_gr_length( data_idx[idx_crt], 9, 0 ); - data_idx[idx_crt] = 0; - data_hat[idx_crt] = 0; - bits += 1; - } - - if ( bits <= bits_allowed ) - { - break; - } - } - } - - return bits; -} -#endif /*-------------------------------------------------------------------* * common_direction() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 common_direction_fx( IVAS_QDIRECTION *q_direction, const Word16 band_idx, @@ -6544,270 +3627,90 @@ static Word16 common_direction_fx( move32(); } - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - nbits = truncGR0_chan_fx( /*azimuth_orig,*/ azimuth_orig_fx, /*q_direction->band_data[band_idx].azimuth,*/ q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, 1 ), /* st,*/ st_fx, /*ct,*/ ct_fx ) + 1; - } - ELSE - { - - nbits = truncGR0_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st_fx, ct_fx ) + 1; - } - } - ELSE - { - IF( GE_16( id_th, 3 ) ) - { - /* theta is 90 or -90; only theta is sent */ - push_next_indice( hMetaData, add( id_th, 11 ), 4 ); /* average theta index */ - - set_val_Word32( q_direction->band_data[band_idx].azimuth_fx, 0, len ); - FOR( i = 0; i < len; i++ ) - { - q_direction->band_data[band_idx].azimuth_index[i] = 0; - move16(); - } - nbits = 4; - move16(); - return nbits; - } - - set_val_Word32( st_fx, L_deposit_h( getSineWord16R2( extract_l( L_shr( Mpy_32_16_1( theta_cb_fx[id_th], 91 ), 7 ) ) ) ), len ); - set_val_Word32( ct_fx, L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( theta_cb_fx[id_th], 91 ), 7 ) ) ) ), len ); - - FOR( i = 0; i < len; i++ ) - { - // st[i] *= sinf( elevation_orig[i] * PI_OVER_180 ); - st_fx[i] = Mpy_32_32( st_fx[i], L_deposit_h( getSineWord16R2( extract_l( L_shr( Mpy_32_16_1( elevation_orig_fx[i], 91 ), 7 ) ) ) ) ); // Q31; - move32(); - // ct[i] *= cosf( elevation_orig[i] * PI_OVER_180 ); - ct_fx[i] = Mpy_32_32( ct_fx[i], L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( elevation_orig_fx[i], 91 ), 7 ) ) ) ) ); // Q31; - move32(); - q_direction->band_data[band_idx].azimuth_index[i] = 0; - move16(); - } - - IF( EQ_16( id_th, 1 ) ) - { - push_next_indice( hMetaData, 2, 2 ); /* average theta index */ - } - ELSE - { - assert( id_th == 2 ); - push_next_indice( hMetaData, 6, 3 ); /* average theta index */ - } - - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - nbits = add( truncGR0_chan_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, add( id_th, 1 ) ), st_fx, ct_fx ), add( id_th, 1 ) ); - } - ELSE - { - - nbits = add( truncGR0_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, add( id_th, 1 ) ), st_fx, ct_fx ), add( id_th, 1 ) ); - } - } - - IF( LE_16( sub( bits_allowed, add( id_th, 1 ) ), add( len, 1 ) ) ) - { - - FOR( i = 0; i < s_min( len, sub( bits_allowed, add( id_th, 1 ) ) ); i++ ) - { - push_next_indice( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 1 ); - } - } - ELSE - { - IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) - { - FOR( i = 0; i < len; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 9, 0 ); - } - } - ELSE - { - FOR( i = 0; i < len; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 8, 0 ); - } - } - } - - return nbits; -} -#else -static int16_t common_direction( - IVAS_QDIRECTION *q_direction, - const int16_t band_idx, - const int16_t len, - const int16_t bits_allowed, - BSTR_ENC_HANDLE hMetaData, - float *elevation_orig, - float *azimuth_orig ) -{ - int16_t nbits; - int16_t no_th, i, id_th, k; - float theta_cb[5]; - float dist, best_dist; - float ct[MAX_PARAM_SPATIAL_SUBFRAMES], st[MAX_PARAM_SPATIAL_SUBFRAMES]; - - nbits = 0; - - if ( bits_allowed == 0 ) - { - for ( i = 0; i < len; i++ ) - { - q_direction->band_data[band_idx].elevation[i] = 0; - q_direction->band_data[band_idx].azimuth[i] = 0; - } - - return 0; - } - - if ( bits_allowed <= len + 1 ) - { - set_f( q_direction->band_data[band_idx].elevation, 0.0f, len ); - set_f( st, 0.0f, len ); - - for ( i = 0; i < len; i++ ) - { - ct[i] = cosf( elevation_orig[i] * PI_OVER_180 ); - } - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed, st, ct ); - } - else - { - nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed, st, ct ); - } - - for ( i = 0; i < nbits; i++ ) - { - push_next_indice( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 1 ); - } - - return nbits; - } - - no_th = no_theta_masa[0] + 3; /* only 5 values for theta; the lat 2 are +/-90 */ - - theta_cb[0] = 0; - theta_cb[1] = delta_theta_masa[2]; - theta_cb[2] = -theta_cb[1]; - theta_cb[3] = 90.0f; - theta_cb[4] = -90.0f; - best_dist = 900000.0f; - id_th = 0; - - for ( i = 0; i < no_th; i++ ) - { - dist = 0.0f; - for ( k = 0; k < len; k++ ) - { - dist += ( elevation_orig[k] - theta_cb[i] ) * ( elevation_orig[k] - theta_cb[i] ); - } - if ( dist < best_dist ) - { - id_th = i; - best_dist = dist; - } - } - - set_f( q_direction->band_data[band_idx].elevation, theta_cb[id_th], len ); - - for ( i = 0; i < len; i++ ) - { - q_direction->band_data[band_idx].elevation_index[i] = id_th; - } - - if ( id_th == 0 ) - { - push_next_indice( hMetaData, 0, 1 ); /* average theta index */ - set_f( st, 0.0f, len ); - - for ( i = 0; i < len; i++ ) - { - ct[i] = cosf( elevation_orig[i] * PI_OVER_180 ); - } - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st, ct ) + 1; + nbits = truncGR0_chan_fx( /*azimuth_orig,*/ azimuth_orig_fx, /*q_direction->band_data[band_idx].azimuth,*/ q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, 1 ), /* st,*/ st_fx, /*ct,*/ ct_fx ) + 1; } - else + ELSE { - nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st, ct ) + 1; + + nbits = truncGR0_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - 1, st_fx, ct_fx ) + 1; } } - else + ELSE { - if ( id_th >= 3 ) + IF( GE_16( id_th, 3 ) ) { /* theta is 90 or -90; only theta is sent */ - push_next_indice( hMetaData, id_th + 11, 4 ); /* average theta index */ - set_f( q_direction->band_data[band_idx].azimuth, 0.0f, len ); - for ( i = 0; i < len; i++ ) + push_next_indice( hMetaData, add( id_th, 11 ), 4 ); /* average theta index */ + + set_val_Word32( q_direction->band_data[band_idx].azimuth_fx, 0, len ); + FOR( i = 0; i < len; i++ ) { q_direction->band_data[band_idx].azimuth_index[i] = 0; + move16(); } nbits = 4; - + move16(); return nbits; } - set_f( st, sinf( theta_cb[id_th] * PI_OVER_180 ), len ); - set_f( ct, cosf( theta_cb[id_th] * PI_OVER_180 ), len ); + set_val_Word32( st_fx, L_deposit_h( getSineWord16R2( extract_l( L_shr( Mpy_32_16_1( theta_cb_fx[id_th], 91 ), 7 ) ) ) ), len ); + set_val_Word32( ct_fx, L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( theta_cb_fx[id_th], 91 ), 7 ) ) ) ), len ); - for ( i = 0; i < len; i++ ) + FOR( i = 0; i < len; i++ ) { - st[i] *= sinf( elevation_orig[i] * PI_OVER_180 ); - ct[i] *= cosf( elevation_orig[i] * PI_OVER_180 ); + // st[i] *= sinf( elevation_orig[i] * PI_OVER_180 ); + st_fx[i] = Mpy_32_32( st_fx[i], L_deposit_h( getSineWord16R2( extract_l( L_shr( Mpy_32_16_1( elevation_orig_fx[i], 91 ), 7 ) ) ) ) ); // Q31; + move32(); + // ct[i] *= cosf( elevation_orig[i] * PI_OVER_180 ); + ct_fx[i] = Mpy_32_32( ct_fx[i], L_deposit_h( getCosWord16R2( extract_l( L_shr( Mpy_32_16_1( elevation_orig_fx[i], 91 ), 7 ) ) ) ) ); // Q31; + move32(); q_direction->band_data[band_idx].azimuth_index[i] = 0; + move16(); } - if ( id_th == 1 ) + IF( EQ_16( id_th, 1 ) ) { push_next_indice( hMetaData, 2, 2 ); /* average theta index */ } - else + ELSE { assert( id_th == 2 ); push_next_indice( hMetaData, 6, 3 ); /* average theta index */ } - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - nbits = truncGR0_chan( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - ( id_th + 1 ), st, ct ) + ( id_th + 1 ); + nbits = add( truncGR0_chan_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, add( id_th, 1 ) ), st_fx, ct_fx ), add( id_th, 1 ) ); } - else + ELSE { - nbits = truncGR0( azimuth_orig, q_direction->band_data[band_idx].azimuth, q_direction->band_data[band_idx].azimuth_index, len, bits_allowed - ( id_th + 1 ), st, ct ) + ( id_th + 1 ); + + nbits = add( truncGR0_fx( azimuth_orig_fx, q_direction->band_data[band_idx].azimuth_fx, q_direction->band_data[band_idx].azimuth_index, len, sub( bits_allowed, add( id_th, 1 ) ), st_fx, ct_fx ), add( id_th, 1 ) ); } } - if ( bits_allowed - ( id_th + 1 ) <= len + 1 ) + IF( LE_16( sub( bits_allowed, add( id_th, 1 ) ), add( len, 1 ) ) ) { - for ( i = 0; i < min( len, bits_allowed - ( id_th + 1 ) ); i++ ) + FOR( i = 0; i < s_min( len, sub( bits_allowed, add( id_th, 1 ) ) ); i++ ) { push_next_indice( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 1 ); } } - else + ELSE { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) + IF( NE_32( q_direction->cfg.mc_ls_setup, MC_LS_SETUP_INVALID ) ) { - for ( i = 0; i < len; i++ ) + FOR( i = 0; i < len; i++ ) { ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 9, 0 ); } } - else + ELSE { - for ( i = 0; i < len; i++ ) + FOR( i = 0; i < len; i++ ) { ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[band_idx].azimuth_index[i], 8, 0 ); } @@ -6817,14 +3720,11 @@ static int16_t common_direction( return nbits; } -#endif - /*-------------------------------------------------------------------* * encode_directions_subband() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 encode_directions_subband_fx( IVAS_QDIRECTION *q_direction, Word16 coding_subbands, @@ -6898,7 +3798,7 @@ static Word16 encode_directions_subband_fx( IF( last_subband == 0 ) { - update_bits_next_block( q_direction, &diff, next_j, coding_subbands, no_subframes ); + update_bits_next_block_fx( q_direction, &diff, next_j, coding_subbands, no_subframes ); } } ELSE @@ -6993,163 +3893,6 @@ static Word16 encode_directions_subband_fx( move16(); return nbits; } -#else -static int16_t encode_directions_subband( - IVAS_QDIRECTION *q_direction, - int16_t coding_subbands, - BSTR_ENC_HANDLE hMetaData, - const int16_t j, - const int16_t next_j, - const int16_t no_subframes, - const int16_t last_subband, - int16_t *p_diff, - float *elevation_orig, - float *azimuth_orig ) -{ - int16_t allowed_bits, use_vq, max_nb_idx, k; - int16_t diff; - float d1, d2; - int16_t nbits; - int16_t *bits_dir0; - - nbits = 0; - diff = *p_diff; - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - allowed_bits = sum_s( bits_dir0, no_subframes ); - - if ( allowed_bits > 0 ) - { - use_vq = 0; - max_nb_idx = 0; - - for ( k = 0; k < no_subframes; k++ ) - { - if ( bits_dir0[k] > use_vq ) - { - use_vq = bits_dir0[k]; - max_nb_idx = k; - } - } - - if ( no_subframes > 1 ) - { - if ( ( use_vq > 1 ) && ( use_vq <= LIMIT_USE_COMMON ) ) - { - bits_dir0[max_nb_idx] -= 1; - allowed_bits -= 1; - } - } - if ( no_subframes > 1 ) - { - if ( use_vq <= LIMIT_USE_COMMON ) - { - /* calculate the two distances */ - calculate_two_distances( q_direction->band_data[j].elevation, bits_dir0, allowed_bits, no_subframes, &d1, &d2 ); - if ( ( ( use_vq > 1 ) && ( d2 <= d1 ) ) || ( use_vq <= 1 ) ) - { - if ( use_vq > 1 ) - { - push_next_indice( hMetaData, 1, 1 ); /* signal VQ */ - } - - diff += common_direction( q_direction, j, no_subframes, allowed_bits, hMetaData, elevation_orig, azimuth_orig ) - allowed_bits; - - if ( last_subband == 0 ) - { - update_bits_next_block( q_direction, &diff, next_j, coding_subbands, no_subframes ); - } - } - else - { - push_next_indice( hMetaData, 0, 1 ); - - if ( last_subband == 0 ) - { - mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); - mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); - joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); - } - else - { - for ( k = 0; k < no_subframes; k++ ) - { - /* requantize the direction */ - q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], azimuth_orig[k], q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].elevation[k], &q_direction->band_data[j].azimuth[k], - &q_direction->band_data[j].elevation_index[k], &q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup ); - } - - if ( allowed_bits > 0 ) - { - nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); - } - } - } - } - else - { - /* there is only joint coding */ - mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); - mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); - - if ( last_subband == 0 ) - { - joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); - } - else - { - for ( k = 0; k < no_subframes; k++ ) - { - /* requantize the direction */ - q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], azimuth_orig[k], q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].elevation[k], &q_direction->band_data[j].azimuth[k], - &q_direction->band_data[j].elevation_index[k], &q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup ); - } - - if ( allowed_bits > 0 ) - { - nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); - } - } - } - } - else - { - /* 1 subframe case */ - /* there is only joint coding */ - mvr2r( elevation_orig, q_direction->band_data[j].elevation, no_subframes ); - mvr2r( azimuth_orig, q_direction->band_data[j].azimuth, no_subframes ); - - if ( last_subband == 0 ) - { - joint_encoding( q_direction, j, next_j, coding_subbands, bits_dir0, allowed_bits, hMetaData, &diff ); - } - else - { - for ( k = 0; k < no_subframes; k++ ) - { - /* requantize the direction */ - q_direction->band_data[j].spherical_index[k] = quantize_direction( elevation_orig[k], azimuth_orig[k], q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].elevation[k], &q_direction->band_data[j].azimuth[k], - &q_direction->band_data[j].elevation_index[k], &q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup ); - } - - if ( allowed_bits > 0 ) - { - nbits = write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); - } - } - } - } - else - { - set_f( q_direction->band_data[j].elevation, 0.0f, no_subframes ); - set_f( q_direction->band_data[j].azimuth, 0.0f, no_subframes ); - } - - *p_diff = diff; - - return nbits; -} - -#endif /*-------------------------------------------------------------------* * calc_var_azi() @@ -7157,7 +3900,6 @@ static int16_t encode_directions_subband( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 calc_var_azi_fx( const IVAS_QDIRECTION *q_direction, const Word16 diffuseness_index_max_ec_frame, @@ -7229,71 +3971,6 @@ static Word16 calc_var_azi_fx( return 1; } } -#else -static int16_t calc_var_azi( - const IVAS_QDIRECTION *q_direction, - const int16_t diffuseness_index_max_ec_frame, - const float avg_azimuth, - float *avg_azimuth_out ) -{ - float var_band, dif; - float avg_direction_vector_band[3], avg_azimuth_band[24], direction_vector[3]; - float avg_elevation; - int16_t i, j, idx; - - idx = 0; - set_zero( avg_azimuth_band, 24 ); - - for ( i = 0; i < q_direction->cfg.nbands; i++ ) - { - set_zero( avg_direction_vector_band, 3 ); - if ( q_direction->band_data[i].energy_ratio_index_mod[0] <= diffuseness_index_max_ec_frame ) - { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - /*compute the average direction */ - ivas_qmetadata_azimuth_elevation_to_direction_vector( q_direction->band_data[i].azimuth[j], q_direction->band_data[i].elevation[j], direction_vector ); - v_add( avg_direction_vector_band, direction_vector, avg_direction_vector_band, 3 ); - } - ivas_qmetadata_direction_vector_to_azimuth_elevation( avg_direction_vector_band, &avg_azimuth_band[idx], &avg_elevation ); - idx++; - } - } - - var_band = 0.0f; - - for ( i = 0; i < idx; i++ ) - { - dif = ( avg_azimuth_band[idx] - avg_azimuth ); - if ( dif < 0 ) - { - dif = -dif; - } - if ( dif > 180 ) - { - dif = 360 - dif; - } - - var_band += dif * dif; - } - - if ( idx > 0 ) - { - var_band = var_band / idx; - } - - if ( var_band <= VAR_AZI_THRESH ) - { - *avg_azimuth_out = avg_azimuth; - return 0; - } - else - { - *avg_azimuth_out = avg_azimuth_band[0]; - return 1; - } -} -#endif /*-------------------------------------------------------------------* @@ -7301,122 +3978,6 @@ static int16_t calc_var_azi( * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error requantize_direction_EC_3( - int16_t *extra_bits, - IVAS_QDIRECTION *q_direction, - const int16_t coding_subbands, - BSTR_ENC_HANDLE hMetaData, - float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - int16_t *ind_order ) -{ - /* gradually increase the bits following the performance of the EC layer*/ - int16_t j, k; - int16_t use_vq; - int16_t diff, allowed_bits, nbits, last_j; - int16_t no_subframes, start_band; - float st[MAX_PARAM_SPATIAL_SUBFRAMES], ct[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t *bits_dir0; - - nbits = 0; - no_subframes = q_direction->cfg.nblocks; - start_band = q_direction->cfg.start_band; - - if ( q_direction->not_in_2D > MASA_LIMIT_2D ) - { - j = ind_order[coding_subbands - 1]; - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - allowed_bits = sum_s( bits_dir0, no_subframes ); - last_j = j - ( allowed_bits == 0 ); - diff = 0; - if ( coding_subbands == 1 ) - { - last_j = start_band; - } - for ( j = 0; j < last_j; j++ ) - { - k = ind_order[j]; - encode_directions_subband( q_direction, coding_subbands, hMetaData, k, ind_order[j + 1], no_subframes, 0, &diff, elevation_orig[k], azimuth_orig[k] ); - } - - /* last subbands to be written in fixed rate */ - for ( j = last_j; j < coding_subbands; j++ ) - { - k = ind_order[j]; - encode_directions_subband( q_direction, coding_subbands, hMetaData, k, 0, no_subframes, 1, &diff, elevation_orig[k], azimuth_orig[k] ); - } - } - else /* 2D */ - { - diff = 0; - nbits = 0; - for ( j = start_band; j < coding_subbands; j++ ) - { - bits_dir0 = (int16_t *) q_direction->band_data[j].bits_sph_idx; - allowed_bits = sum_s( bits_dir0, no_subframes ); - use_vq = 0; - - for ( k = 0; k < no_subframes; k++ ) - { - if ( bits_dir0[k] > use_vq ) - { - use_vq = bits_dir0[k]; - } - } - - if ( ( use_vq <= 3 ) && ( allowed_bits <= 11 ) ) - { - set_f( st, 0.0f, no_subframes ); - - for ( k = 0; k < no_subframes; k++ ) - { - ct[k] = cosf( elevation_orig[j][k] * PI_OVER_180 ); - } - - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - nbits += truncGR0_chan( azimuth_orig[j], q_direction->band_data[j].azimuth, q_direction->band_data[j].azimuth_index, no_subframes, allowed_bits, st, ct ); - } - else - { - nbits += truncGR0( azimuth_orig[j], q_direction->band_data[j].azimuth, q_direction->band_data[j].azimuth_index, no_subframes, allowed_bits, st, ct ); - } - - if ( allowed_bits <= no_subframes + 1 ) - { - for ( k = 0; k < min( no_subframes, allowed_bits ); k++ ) - { - push_next_indice( hMetaData, q_direction->band_data[j].azimuth_index[k], 1 ); - } - } - else - { - for ( k = 0; k < no_subframes; k++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ? 9 : 8, 0 ); - } - } - } - else - { - for ( k = 0; k < no_subframes; k++ ) - { - /* requantize the direction */ - q_direction->band_data[j].spherical_index[k] = quantize_direction2D( azimuth_orig[j][k], 1 << q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].azimuth[k], - &q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup ); - q_direction->band_data[j].elevation_index[k] = 0; - } - nbits += write_fixed_rate_direction( hMetaData, q_direction, j, no_subframes ); - } - } - } - - *extra_bits = -diff; - - return IVAS_ERR_OK; -} -#else static ivas_error requantize_direction_EC_3_fx( Word16 *extra_bits, IVAS_QDIRECTION *q_direction, @@ -7553,62 +4114,38 @@ static ivas_error requantize_direction_EC_3_fx( move16(); return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * write_fixed_rate_direction() * - * writing of the spherical indexes - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -/*! r: number of bits written */ -static Word16 write_fixed_rate_direction_fx( - BSTR_ENC_HANDLE hMetaData, /* i : MASA metadata structure */ - IVAS_QDIRECTION *qdirection, /* i/o: quantized directional parameters */ - const Word16 j_idx, /* i : index of subband for which the data is written */ - const Word16 len /* i : number of data */ -) -{ - Word16 nbits, i; - - nbits = 0; - move16(); - FOR( i = 0; i < len; i++ ) - { - push_next_indice( hMetaData, qdirection->band_data[j_idx].spherical_index[i], qdirection->band_data[j_idx].bits_sph_idx[i] ); - nbits = extract_l( L_add( nbits, qdirection->band_data[j_idx].bits_sph_idx[i] ) ); - } - - return nbits; -} -#else + * writing of the spherical indexes + *-------------------------------------------------------------------*/ /*! r: number of bits written */ -static int16_t write_fixed_rate_direction( +static Word16 write_fixed_rate_direction_fx( BSTR_ENC_HANDLE hMetaData, /* i : MASA metadata structure */ IVAS_QDIRECTION *qdirection, /* i/o: quantized directional parameters */ - const int16_t j_idx, /* i : index of subband for which the data is written */ - const int16_t len /* i : number of data */ + const Word16 j_idx, /* i : index of subband for which the data is written */ + const Word16 len /* i : number of data */ ) { - int16_t nbits, i; + Word16 nbits, i; nbits = 0; - for ( i = 0; i < len; i++ ) + move16(); + FOR( i = 0; i < len; i++ ) { push_next_indice( hMetaData, qdirection->band_data[j_idx].spherical_index[i], qdirection->band_data[j_idx].bits_sph_idx[i] ); - nbits += qdirection->band_data[j_idx].bits_sph_idx[i]; + nbits = extract_l( L_add( nbits, qdirection->band_data[j_idx].bits_sph_idx[i] ) ); } return nbits; } -#endif /*-------------------------------------------------------------------* * joint_encoding() * * joint encoding of elevation and azimuth *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void joint_encoding_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized directional parameters */ const Word16 j, /* i : subband index */ @@ -7772,161 +4309,16 @@ static void joint_encoding_fx( } *diff = add( *diff, sub( nbits, allowed_bits ) ); move16(); - update_bits_next_block( q_direction, diff, next_j, coding_subbands, q_direction->cfg.nblocks ); - - return; -} -#else -static void joint_encoding( - IVAS_QDIRECTION *q_direction, /* i/o: quantized directional parameters */ - const int16_t j, /* i : subband index */ - const int16_t next_j, /* i : next subband index */ - const int16_t coding_subbands, /* i : total number of subband */ - int16_t *bits_dir0, /* i/o: number of bits for each tile in each subband */ - const int16_t allowed_bits, /* i : maximum number of bits available for the current subband */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream handle */ - int16_t *diff /* o : bits to be given/taken to next subband */ -) -{ - int16_t k; - int16_t GR_ord_azimuth, use_context, GR_ord_elevation; - uint8_t method; - int16_t nbits; - int16_t same; - uint16_t data[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t len_data = 0; - int16_t no_symb_ele[MAX_PARAM_SPATIAL_SUBFRAMES]; - - for ( k = 0; k < q_direction->cfg.nblocks; k++ ) - { - q_direction->band_data[j].bits_sph_idx[k] = bits_dir0[k]; - - /* requantize the direction */ - q_direction->band_data[j].spherical_index[k] = quantize_direction( q_direction->band_data[j].elevation[k], q_direction->band_data[j].azimuth[k], q_direction->band_data[j].bits_sph_idx[k], &q_direction->band_data[j].elevation[k], - &q_direction->band_data[j].azimuth[k], &q_direction->band_data[j].elevation_index[k], &q_direction->band_data[j].azimuth_index[k], q_direction->cfg.mc_ls_setup ); - - if ( bits_dir0[k] >= 3 ) - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3]; - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][q_direction->band_data[j].elevation_index[k]]; - } - else - { - q_direction->band_data[j].elevation_m_alphabet[k] = no_theta_masa[bits_dir0[k] - 3] * 2 - 1; - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][( q_direction->band_data[j].elevation_index[k] + 1 ) >> 1]; - } - assert( q_direction->band_data[j].elevation_index[k] != MASA_NO_INDEX ); - } - else if ( bits_dir0[k] > 0 ) - { - q_direction->band_data[j].elevation_m_alphabet[k] = 1; - q_direction->band_data[j].azimuth_m_alphabet[k] = no_phi_masa[bits_dir0[k] - 1][0]; - } - else - { - q_direction->band_data[j].elevation_m_alphabet[k] = 1; - q_direction->band_data[j].azimuth_m_alphabet[k] = 1; - } - } - - for ( k = 0; k < q_direction->cfg.nblocks; k++ ) - { - if ( q_direction->band_data[j].bits_sph_idx[k] <= 2 ) - { - q_direction->band_data[j].elevation_index[k] = MASA_NO_INDEX; - } - else - { - no_symb_ele[len_data] = q_direction->band_data[j].elevation_m_alphabet[k]; - data[len_data++] = q_direction->band_data[j].elevation_index[k]; - } - } - - - /* encode indexes for current subband and count the number of bits */ - - if ( q_direction->cfg.nblocks == 1 && q_direction->band_data[j].bits_sph_idx[0] <= MASA_MIN_BITS_TF + 1 ) - { - /* encode with fixed rate only if only one subframe and very low number of bits */ - nbits = write_fixed_rate_direction( hMetaData, q_direction, j, q_direction->cfg.nblocks ); - } - else - { - - if ( len_data > 0 ) - { - nbits = GR_bits_new( data, no_symb_ele, len_data, MASA_GR_ORD_EL, 1, &GR_ord_elevation ); - } - else - { - nbits = 0; - GR_ord_elevation = MASA_GR_ORD_EL; - } - - same = 1; - for ( k = 1; k < q_direction->cfg.nblocks; k++ ) - { - if ( q_direction->band_data[j].elevation_index[k] != q_direction->band_data[j].elevation_index[0] ) - { - same = 0; - } - } - if ( same == 1 && q_direction->band_data[j].elevation_index[0] < 4 ) - { - nbits = 3; - } - else - { - same = 0; - nbits += 1; - } - - nbits += GR_bits_azimuth_context( q_direction->band_data[j].azimuth_index, - q_direction->band_data[j].azimuth_m_alphabet, q_direction->cfg.nblocks, MASA_GR_ORD_AZ, - q_direction->band_data[j].bits_sph_idx, &GR_ord_azimuth, &use_context ); - - if ( allowed_bits == 0 ) - { - nbits = 0; - } - else - { - if ( nbits >= allowed_bits ) - { - nbits = allowed_bits + 1; /* fixed rate encoding */ - method = 1; - push_next_indice( hMetaData, method, 1 ); - - /* write current subband data */ - nbits = 1 + write_fixed_rate_direction( hMetaData, q_direction, j, q_direction->cfg.nblocks ); - } - else - { - nbits += 1; /* EC coding */ - method = 0; - push_next_indice( hMetaData, method, 1 ); - - /* write current subband data */ - write_ec_direction( &nbits, hMetaData, q_direction, j, q_direction->cfg.nblocks, GR_ord_elevation, GR_ord_azimuth, use_context, same ); - nbits++; - } - } - } - *diff += nbits - allowed_bits; - update_bits_next_block( q_direction, diff, next_j, coding_subbands, q_direction->cfg.nblocks ); + update_bits_next_block_fx( q_direction, diff, next_j, coding_subbands, q_direction->cfg.nblocks ); return; } -#endif /*-------------------------------------------------------------------* * calculate_two_distances() * * calculate estimated distortions if encoding with VQ or not *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void calculate_two_distances_fx( Word32 *el_fx, /* i : elevation values Q22 */ Word16 *bits, /* i : number of bits for each tile */ @@ -8053,89 +4445,12 @@ static void calculate_two_distances_fx( move16(); return; } -#else -static void calculate_two_distances( - float *el, /* i : elevation values */ - int16_t *bits, /* i : number of bits for each tile */ - const int16_t total_bits, /* i : total number of bits for subband */ - const int16_t len, /* i : number of tiles */ - float *p_d1, /* o : first distortion */ - float *p_d2 /* o : second distortion */ -) -{ - int16_t i; - float d1, d2, el_av; - const float cos_delta_phi_cb[] = { 0.848f, 0.8988f, 0.9272f, 0.9563f, 0.9744f, 0.9816f, 0.9877f, 0.9925f }; - float var_el; - - d1 = 0.0f; - d2 = 0.0f; - - el_av = mean( el, len ); - if ( total_bits > 9 ) - { - for ( i = 0; i < len; i++ ) - { - if ( bits[i] > 2 ) - { - if ( fabsf( el[i] ) < fabsf( ( fabsf( el[i] ) - 45 ) ) ) - { - /* el_hat = 0*/ - if ( bits[i] == 3 ) - { - d1 += 1 - 0.7f * cosf( el[i] * PI_OVER_180 ); - } - else - { - d1 += 1 - 0.92f * cosf( el[i] * PI_OVER_180 ); - } - } - else - { - if ( bits[i] == 3 ) - { - d1 += 1 - sinf( el[i] * PI_OVER_180 ) * 0.7f * sign( el[i] ); - } - else - { - d1 += 1 - 0.7f * 0.92f * cosf( el[i] * PI_OVER_180 ) - sinf( fabsf( el[i] * PI_OVER_180 ) ) * 0.7f; - } - } - } - else - { - if ( bits[i] == 2 ) - { - d1 += 1 - cosf( el[i] * PI_OVER_180 ) * 0.7f; - } - else - { - d1 += 1; - } - } - d2 += 1 - sinf( el_av * PI_OVER_180 ) * sinf( el[i] * PI_OVER_180 ) - cosf( el[i] * PI_OVER_180 ) * cosf( el_av * PI_OVER_180 ) * cos_delta_phi_cb[total_bits - 9]; - } - } - - var_el = var( el, len ); - if ( var_el > 1300.0f ) - { - d2 = d1 + 0.1f; - } - - *p_d1 = d1; - *p_d2 = d2; - - return; -} -#endif /*-------------------------------------------------------------------* * write_ec_direction() * * write metadata using entropy encoding *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits written */ static ivas_error write_ec_direction_fx( Word16 *num_bits_written, /* o : Number of bits written */ @@ -8228,237 +4543,81 @@ static ivas_error write_ec_direction_fx( push_next_indice( hMetaData, 1, 1 ); nbits = add( nbits, 1 ); push_next_indice( hMetaData, sub( 1, (Word16) EQ_16( GR_ord_azimuth, sub( MASA_GR_ORD_AZ, 1 ) ) ), 1 ); - nbits = add( nbits, 1 ); - - /* find min */ - min_val = MASA_NO_INDEX; - move16(); - FOR( i = 0; i < len; i++ ) - { - if ( LT_32( qdirection->band_data[j_idx].azimuth_index[i], min_val ) ) - { - min_val = qdirection->band_data[j_idx].azimuth_index[i]; - move16(); - } - } - - - /* write min*/ - bits_crt = hMetaData->nb_bits_tot; - move16(); - maximum_s( qdirection->band_data[j_idx].azimuth_m_alphabet, len, &max_val ); - ivas_qmetadata_encode_extended_gr( hMetaData, min_val, max_val, MASA_GR_ORD_AZ ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); - - FOR( i = 0; i < len; i++ ) - { - data = (UWord16) L_sub( qdirection->band_data[j_idx].azimuth_index[i], min_val ); - IF( LT_32( data, sub( MASA_NO_INDEX, min_val ) ) ) - { - bits_crt = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], GR_ord_azimuth ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); - } - } - } - } - ELSE - { - FOR( i = 0; i < len; i++ ) - { - data = qdirection->band_data[j_idx].azimuth_index[i]; - IF( LT_32( data, MASA_NO_INDEX ) ) - { - SWITCH( qdirection->band_data[j_idx].bits_sph_idx[i] ) - { - case 0: - BREAK; - case 1: - nbits = add( nbits, 1 ); - push_next_indice( hMetaData, data, 1 ); - BREAK; - case 2: - bits_crt = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ - 1 ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); - BREAK; - default: - bits_crt = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); - BREAK; - } - } - } - } - - *num_bits_written = nbits; - move16(); - return IVAS_ERR_OK; -} -#else -/*! r: number of bits written */ -static ivas_error write_ec_direction( - int16_t *num_bits_written, /* o : Number of bits written */ - BSTR_ENC_HANDLE hMetaData, /* i : MASA metadata structure */ - IVAS_QDIRECTION *qdirection, /* i : quantized directional info */ - const int16_t j_idx, /* i : index of subband to encode and write */ - const int16_t len, /* i : number of tiles */ - const int16_t GR_ord_elevation, /* i : GR order for elevation encoding */ - const int16_t GR_ord_azimuth, /* i : GR order for azimuth encoding */ - const int16_t use_context, /* i : flag for context usiage in azimuth encoding */ - const int16_t same /* i : flag if elevation indexes are the same or not */ -) -{ - int16_t i, nbits, bits_crt, nr_NO_INDEX; - uint16_t data; - int16_t min_val, max_val; - - nr_NO_INDEX = 0; - - nbits = 0; - - /* write elevation */ - for ( i = 0; i < len; i++ ) - { - data = qdirection->band_data[j_idx].elevation_index[i]; - if ( ( data == MASA_NO_INDEX ) || ( qdirection->band_data[j_idx].bits_sph_idx[i] == 0 ) ) - { - nr_NO_INDEX += 1; - } - } - - if ( nr_NO_INDEX < len ) - { - if ( same == 1 ) - { - push_next_indice( hMetaData, 1, 1 ); - nbits += 1; - push_next_indice( hMetaData, qdirection->band_data[j_idx].elevation_index[0], 2 ); - nbits += 2; - } - else - { - push_next_indice( hMetaData, 0, 1 ); - nbits += 1; - - push_next_indice( hMetaData, 1 - ( GR_ord_elevation == MASA_GR_ORD_EL ), 1 ); - nbits += 1; - - for ( i = 0; i < len; i++ ) - { - data = qdirection->band_data[j_idx].elevation_index[i]; - if ( data < MASA_NO_INDEX ) - { - bits_crt = hMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].elevation_m_alphabet[i], GR_ord_elevation ); - nbits += hMetaData->nb_bits_tot - bits_crt; - } - } - } - } - - /* write azimuth */ - if ( use_context < 0 ) - { - if ( use_context == -1 ) - { - /* regular GR coding */ - push_next_indice( hMetaData, 0, 1 ); - nbits += 1; - push_next_indice( hMetaData, 1 - ( GR_ord_azimuth == MASA_GR_ORD_AZ ), 1 ); - nbits += 1; - - for ( i = 0; i < len; i++ ) - { - data = qdirection->band_data[j_idx].azimuth_index[i]; - if ( data < MASA_NO_INDEX ) - { - bits_crt = hMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], GR_ord_azimuth ); - nbits += hMetaData->nb_bits_tot - bits_crt; - } - } - } - else if ( use_context == -2 ) - { - /* min removed GR coding */ - push_next_indice( hMetaData, 1, 1 ); - nbits += 1; - push_next_indice( hMetaData, 1 - ( GR_ord_azimuth == MASA_GR_ORD_AZ - 1 ), 1 ); - nbits += 1; + nbits = add( nbits, 1 ); /* find min */ min_val = MASA_NO_INDEX; - for ( i = 0; i < len; i++ ) + move16(); + FOR( i = 0; i < len; i++ ) { - if ( qdirection->band_data[j_idx].azimuth_index[i] < min_val ) + if ( LT_32( qdirection->band_data[j_idx].azimuth_index[i], min_val ) ) { min_val = qdirection->band_data[j_idx].azimuth_index[i]; + move16(); } } /* write min*/ bits_crt = hMetaData->nb_bits_tot; + move16(); maximum_s( qdirection->band_data[j_idx].azimuth_m_alphabet, len, &max_val ); ivas_qmetadata_encode_extended_gr( hMetaData, min_val, max_val, MASA_GR_ORD_AZ ); - nbits += hMetaData->nb_bits_tot - bits_crt; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); - for ( i = 0; i < len; i++ ) + FOR( i = 0; i < len; i++ ) { - data = qdirection->band_data[j_idx].azimuth_index[i] - min_val; - if ( data < MASA_NO_INDEX - min_val ) + data = (UWord16) L_sub( qdirection->band_data[j_idx].azimuth_index[i], min_val ); + IF( LT_32( data, sub( MASA_NO_INDEX, min_val ) ) ) { bits_crt = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], GR_ord_azimuth ); - nbits += hMetaData->nb_bits_tot - bits_crt; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); } } } } - else + ELSE { - for ( i = 0; i < len; i++ ) + FOR( i = 0; i < len; i++ ) { data = qdirection->band_data[j_idx].azimuth_index[i]; - if ( data < MASA_NO_INDEX ) + IF( LT_32( data, MASA_NO_INDEX ) ) { - switch ( qdirection->band_data[j_idx].bits_sph_idx[i] ) + SWITCH( qdirection->band_data[j_idx].bits_sph_idx[i] ) { case 0: - break; + BREAK; case 1: - nbits += 1; + nbits = add( nbits, 1 ); push_next_indice( hMetaData, data, 1 ); - break; + BREAK; case 2: bits_crt = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ - 1 ); - nbits += hMetaData->nb_bits_tot - bits_crt; - break; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); + BREAK; default: bits_crt = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, data, qdirection->band_data[j_idx].azimuth_m_alphabet[i], MASA_GR_ORD_AZ ); - nbits += hMetaData->nb_bits_tot - bits_crt; - break; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_crt ) ); + BREAK; } } } } *num_bits_written = nbits; + move16(); return IVAS_ERR_OK; } -#endif /*-----------------------------------------------------------------------* * Local functions (coherence Q and coding) *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: index */ static UWord64 create_combined_index( UWord16 *idx_dct, /* i : indexes to combine */ @@ -8481,33 +4640,10 @@ static UWord64 create_combined_index( return idx; } -#else -/*! r: index */ -static uint64_t create_combined_index( - uint16_t *idx_dct, /* i : indexes to combine */ - const int16_t len, /* i : number of indexes */ - const int16_t *no_cb_vec /* i : how many codewords for each position */ -) -{ - int16_t i; - uint64_t idx, base; - - base = 1; - idx = 0; - for ( i = 0; i < len; i++ ) - { - idx += base * idx_dct[i]; - base *= no_cb_vec[i]; - } - - return idx; -} -#endif /*-----------------------------------------------------------------------* * encoding DCT0 coeffs with joint index *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits written */ static Word16 encode_coherence_indexesDCT0_fx( UWord16 *idx_dct, /* i : indexes to be encoded */ @@ -8591,87 +4727,12 @@ static Word16 encode_coherence_indexesDCT0_fx( return add( nbits, nbits1 ); } -#else - -/*! r: number of bits written */ -static int16_t encode_coherence_indexesDCT0( - uint16_t *idx_dct, /* i : indexes to be encoded */ - const int16_t len, /* i : number of indexes */ - int16_t *no_cb_vec, /* i : number of codewords for each position */ - BSTR_ENC_HANDLE hMetaData, - const int16_t indice_coherence, - const int16_t nbits, - const int16_t nbits1 ) -{ - int16_t i; - uint64_t idx; - int16_t no_idx16; - int16_t k; - int16_t half_len, j; - uint64_t idx1; - - /* calculate bits for dct0 components with joint encoding */ - if ( nbits1 > 0 ) - { - half_len = len / 2; - idx = create_combined_index( idx_dct, half_len, no_cb_vec ); - idx1 = create_combined_index( &idx_dct[half_len], half_len, &no_cb_vec[half_len] ); - } - else - { - idx = create_combined_index( idx_dct, len, no_cb_vec ); - idx1 = 0; - } - - if ( nbits % 16 == 0 ) - { - no_idx16 = nbits / 16; - } - else - { - no_idx16 = (int16_t) round_f( ( nbits / 16.0f + 0.5f ) ); - } - - k = nbits; - i = 0; - for ( i = 0; i < no_idx16 - 1; i++ ) - { - k -= 16; - hMetaData->ind_list[indice_coherence + i].value = ( ( idx >> k ) & 65535 ); /* 16 bits */ - } - hMetaData->ind_list[indice_coherence + i].value = ( idx & ( ( 1 << k ) - 1 ) ); - - if ( nbits1 > 0 ) - { - if ( nbits1 % 16 == 0 ) - { - no_idx16 = nbits1 / 16; - } - else - { - no_idx16 = (int16_t) round_f( ( nbits1 / 16.0f + 0.5f ) ); - } - - k = nbits1; - - for ( j = i + 1; j < no_idx16 + i; j++ ) - { - k -= 16; - hMetaData->ind_list[indice_coherence + j].value = ( ( idx1 >> k ) & 65535 ); /* 16 bits */ - } - hMetaData->ind_list[indice_coherence + j].value = ( idx1 & ( ( 1 << k ) - 1 ) ); - } - - return nbits + nbits1; -} -#endif /*-------------------------------------------------------------------* * coherence_coding_length() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 coherence_coding_length( const UWord16 *idx_sur_coh_shift, const UWord8 idx_shift_len, @@ -8767,75 +4828,12 @@ static Word16 coherence_coding_length( return nbits; } -#else -static int16_t coherence_coding_length( - const uint16_t *idx_sur_coh_shift, - const uint8_t idx_shift_len, - const int16_t coding_subbands, - const int16_t *no_cv, - uint16_t *mr_idx, - int16_t *no_cv_shift, - int16_t *p_min_idx, - int16_t *GR_ord, - int16_t *nbits_fr, - int16_t *nbits_fr1 ) -{ - int16_t half_coding_subbands; - int16_t j; - int16_t nbits; - uint64_t no_cb; - int16_t min_idx; - - half_coding_subbands = 0; - - if ( sum_s( no_cv, coding_subbands ) > MASA_COH_LIMIT_2IDX ) - { - - no_cb = 1; - half_coding_subbands = coding_subbands / 2; - for ( j = 0; j < half_coding_subbands; j++ ) - { - no_cb *= no_cv[j]; - } - *nbits_fr = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - no_cb = 1; - for ( j = half_coding_subbands; j < coding_subbands; j++ ) - { - no_cb *= no_cv[j]; - } - *nbits_fr1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - } - else - { - no_cb = 1; - for ( j = 0; j < coding_subbands; j++ ) - { - no_cb *= no_cv[j]; - } - *nbits_fr = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - *nbits_fr1 = 0; - } - - - minimum_s( (const int16_t *) idx_sur_coh_shift, (int16_t) idx_shift_len, &min_idx ); - for ( j = 0; j < idx_shift_len; j++ ) - { - mr_idx[j] = idx_sur_coh_shift[j] - min_idx; - no_cv_shift[j] -= min_idx; - } - nbits = min_idx + 1 + GR_bits_new( mr_idx, no_cv_shift, idx_shift_len, *GR_ord, 1, GR_ord ); - *p_min_idx = min_idx; - - return nbits; -} -#endif /*-------------------------------------------------------------------* * encode_spread_coherence_1sf() * * Encoding spread coherence for 1 subframe bands *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits written */ static Word16 encode_spread_coherence_1sf_fx( IVAS_QMETADATA *q_metadata, /* i : quantized metadata */ @@ -8969,708 +4967,329 @@ static Word16 encode_spread_coherence_1sf_fx( bits_GR = hMasaMetaData->nb_bits_tot; move16(); ivas_qmetadata_encode_extended_gr( hMasaMetaData, add( sub( sub( MASA_MAX_NO_CV_SUR_COH, max_val ), 1 ), extra_cv ), add( MASA_MAX_NO_CV_SUR_COH, extra_cv ), 0 ); - nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); - } - - IF( nbits_fr1 > 0 ) - { - half_coding_subbands = shr( coding_subbands, 1 ); - idx = create_combined_index( idx_sp_coh, half_coding_subbands, no_cv ); - idx1 = create_combined_index( &idx_sp_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); - } - ELSE - { - idx = create_combined_index( idx_sp_coh, coding_subbands, no_cv ); - } - - // if ( nbits_fr % 16 == 0 ) - IF( s_and( nbits_fr, 15 ) == 0 ) - { - no_idx16 = shr( nbits_fr, 4 ); - } - ELSE - { - // no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); - no_idx16 = shr_r( add( nbits_fr, ONE_IN_Q3 ), 4 ); - } - - /* write combined index */ - k = nbits_fr; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMasaMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ - } - - push_next_indice( hMasaMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - - IF( nbits_fr1 > 0 ) - { - // if ( nbits_fr1 % 16 == 0 ) - IF( s_and( nbits_fr1, 15 ) == 0 ) - { - no_idx16 = shr( nbits_fr1, 4 ); - } - ELSE - { - // no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); - no_idx16 = shr_r( add( nbits_fr1, ONE_IN_Q3 ), 4 ); - } - - assert( no_idx16 <= 4 ); - - k = nbits_fr1; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMasaMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ - } - push_next_indice( hMasaMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); - } - } - ELSE - { - /* write flag */ - nbits = 1; - move16(); - - /* write flag*/ - push_next_indice( hMasaMetaData, 1, 1 ); - - /* write GR_ord */ - push_next_indice( hMasaMetaData, GR_ord, 1 ); - nbits = add( nbits, 1 ); - - /* write the min */ - bits_GR = hMasaMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMasaMetaData, min_idx, add( MASA_MAX_NO_CV_SUR_COH, extra_cv ), 0 ); - nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); - - /* write GR data */ - FOR( j = 0; j < idx_shift; j++ ) - { - bits_GR = hMasaMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMasaMetaData, mr_idx_sp_coh[j], no_cv_shift[j], GR_ord ); - nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); - } - } - - return nbits; -} -#else -/*! r: number of bits written */ -static int16_t encode_spread_coherence_1sf( - IVAS_QMETADATA *q_metadata, /* i : quantized metadata */ - const int16_t idx_d, /* i : current direction index */ - BSTR_ENC_HANDLE hMasaMetaData, /* i/o: metadata bitstream handle */ - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ -) -{ - int16_t i, j, k; - int16_t idx_ER; - int16_t nbits, nbits_fr; - uint16_t idx_sp_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t mr_idx_sp_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t GR_ord, bits_GR; - uint64_t idx, idx1; - int16_t no_idx16; - int16_t no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t half_coding_subbands, nbits_fr1, coding_subbands; - uint16_t idx_sp_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; - uint8_t idx_shift; - int16_t max_val = 0, nbits_max; - int16_t extra_cv; - int16_t no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; - - coding_subbands = q_metadata->q_direction[idx_d].cfg.nbands; - q_direction = &( q_metadata->q_direction[idx_d] ); - nbits = 0; - GR_ord = 1; - idx_shift = 0; - - /* number of codevectors added dependent on number of subbands */ - extra_cv = coding_subbands / MASA_FACTOR_CV_COH; - for ( j = 0; j < coding_subbands; j++ ) - { - if ( hrmasa_flag ) - { - idx_ER = 7 - ( q_direction->band_data[j].energy_ratio_index_mod[0] >> 1 ) + extra_cv; - } - else - { - idx_ER = 7 - q_direction->band_data[j].energy_ratio_index_mod[0] + extra_cv; - } - - if ( idx_ER > 0 ) - { - idx_sp_coh[j] = (uint16_t) roundf( q_direction->coherence_band_data[j].spread_coherence[0] / ( 255.0f / (float) idx_ER ) ); - q_direction->coherence_band_data[j].spread_coherence[0] = (uint8_t) roundf( idx_sp_coh[j] * ( 255.0f / (float) idx_ER ) ); - } - else - { - idx_sp_coh[j] = 0; - q_direction->coherence_band_data[j].spread_coherence[0] = 0; - } - no_cv[j] = idx_ER + 1; - - no_cv_shift[idx_shift] = no_cv[j]; - idx_sp_coh_shift[idx_shift++] = idx_sp_coh[j]; - } - - if ( sum_s( no_cv, coding_subbands ) == coding_subbands ) - { - return 0; - } - - nbits_max = 0; - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) - { - j = maximum_s( (int16_t *) idx_sp_coh, coding_subbands, &max_val ); - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv[j] > max_val + 1 ) - { - no_cv[j] = max_val + 1; - } - } - nbits_max = MASA_MAX_NO_CV_SUR_COH - max_val + extra_cv; - } - - nbits = coherence_coding_length( idx_sp_coh_shift, idx_shift, coding_subbands, no_cv, - mr_idx_sp_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); - half_coding_subbands = 0; - idx1 = 0; - - if ( nbits_fr + nbits_fr1 + nbits_max < nbits ) - { - /* write flag*/ - push_next_indice( hMasaMetaData, 0, 1 ); - - /* create combined index */ - nbits = nbits_fr + nbits_fr1 + 1; - - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) - { - /* write max value*/ - bits_GR = hMasaMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMasaMetaData, MASA_MAX_NO_CV_SUR_COH - max_val - 1 + extra_cv, MASA_MAX_NO_CV_SUR_COH + extra_cv, 0 ); - nbits += hMasaMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); } - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { - half_coding_subbands = coding_subbands / 2; + half_coding_subbands = shr( coding_subbands, 1 ); idx = create_combined_index( idx_sp_coh, half_coding_subbands, no_cv ); idx1 = create_combined_index( &idx_sp_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); } - else + ELSE { idx = create_combined_index( idx_sp_coh, coding_subbands, no_cv ); } - if ( nbits_fr % 16 == 0 ) + // if ( nbits_fr % 16 == 0 ) + IF( s_and( nbits_fr, 15 ) == 0 ) { - no_idx16 = nbits_fr / 16; + no_idx16 = shr( nbits_fr, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + // no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + no_idx16 = shr_r( add( nbits_fr, ONE_IN_Q3 ), 4 ); } /* write combined index */ k = nbits_fr; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMasaMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMasaMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { - if ( nbits_fr1 % 16 == 0 ) + // if ( nbits_fr1 % 16 == 0 ) + IF( s_and( nbits_fr1, 15 ) == 0 ) { - no_idx16 = nbits_fr1 / 16; + no_idx16 = shr( nbits_fr1, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + // no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + no_idx16 = shr_r( add( nbits_fr1, ONE_IN_Q3 ), 4 ); } assert( no_idx16 <= 4 ); k = nbits_fr1; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMasaMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMasaMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); } } - else + ELSE { /* write flag */ nbits = 1; + move16(); /* write flag*/ push_next_indice( hMasaMetaData, 1, 1 ); /* write GR_ord */ push_next_indice( hMasaMetaData, GR_ord, 1 ); - nbits += 1; + nbits = add( nbits, 1 ); /* write the min */ bits_GR = hMasaMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMasaMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH + extra_cv, 0 ); - nbits += hMasaMetaData->nb_bits_tot - bits_GR; + move16(); + ivas_qmetadata_encode_extended_gr( hMasaMetaData, min_idx, add( MASA_MAX_NO_CV_SUR_COH, extra_cv ), 0 ); + nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); /* write GR data */ - for ( j = 0; j < idx_shift; j++ ) + FOR( j = 0; j < idx_shift; j++ ) { bits_GR = hMasaMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMasaMetaData, mr_idx_sp_coh[j], no_cv_shift[j], GR_ord ); - nbits += hMasaMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMasaMetaData->nb_bits_tot, bits_GR ) ); } } return nbits; } -#endif /*-------------------------------------------------------------------* * encode_surround_coherence() - * - * encoding surround coherence - *-------------------------------------------------------------------*/ - -/*! r: number of bits written */ -#ifdef IVAS_FLOAT_FIXED -static Word16 encode_surround_coherence_fx( - IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ - BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ -) -{ - Word16 i, j, k; - Word16 idx_ER, idx16; - Word16 nbits, nbits_fr; - UWord16 idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - UWord16 mr_idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 GR_ord, bits_GR; - UWord64 idx, idx1; - Word16 no_idx16; - Word16 no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; - Word32 error_ratio_surr; // Q30 - IVAS_QDIRECTION *q_direction; - Word16 half_coding_subbands, nbits_fr1, coding_subbands; - Word16 all_coherence_zero; - UWord16 idx_sur_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; - UWord8 idx_shift; - Word16 max_val = 0, nbits_max; - move16(); - Word16 no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; - - coding_subbands = hQMetaData->q_direction[0].cfg.nbands; - move16(); - all_coherence_zero = hQMetaData->all_coherence_zero; - move16(); - q_direction = &( hQMetaData->q_direction[0] ); - nbits = 0; - move16(); - - IF( EQ_16( all_coherence_zero, 1 ) ) - { - nbits = 0; - move16(); - } - ELSE - { - GR_ord = 1; - move16(); - k = 0; - move16(); - idx_shift = 0; - move16(); - FOR( j = 0; j < coding_subbands; j++ ) - { - IF( EQ_16( hQMetaData->no_directions, 2 ) ) - { - k = add( k, hQMetaData->twoDirBands[j] ); - idx16 = s_max( sub( k, 1 ), 0 ); - error_ratio_surr = W_sat_l( W_sub( W_sub( ONE_IN_Q30, q_direction[0].band_data[j].energy_ratio_fx[0] ), W_mult0_32_32( q_direction[1].band_data[idx16].energy_ratio_fx[0], hQMetaData->twoDirBands[j] ) ) ); - } - ELSE - { - error_ratio_surr = L_sub( ONE_IN_Q30, q_direction[0].band_data[j].energy_ratio_fx[0] ); - } - - IF( error_ratio_surr <= 0 ) - { - error_ratio_surr = 0; - move16(); - idx_sur_coh[j] = 0; - move16(); - no_cv[j] = 1; - move16(); - hQMetaData->surcoh_band_data[j].surround_coherence[0] = 0; /* sur_coherence_cb_masa[idx_cb_sur_coh_masa[DIRAC_DIFFUSE_LEVELS - 1] * MASA_MAX_NO_CV_SUR_COH]; */ - move16(); - } - ELSE - { - idx_ER = masa_sq_fx( error_ratio_surr, diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - - idx_sur_coh[j] = squant_int_fx( hQMetaData->surcoh_band_data[j].surround_coherence[0], &hQMetaData->surcoh_band_data[j].surround_coherence[0], - &sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER] * MASA_MAX_NO_CV_SUR_COH], add( idx_cb_sur_coh_masa[idx_ER], 2 ) ); - move16(); - - no_cv[j] = add( idx_cb_sur_coh_masa[idx_ER], 2 ); - move16(); - no_cv_shift[idx_shift] = no_cv[j]; - move16(); - idx_sur_coh_shift[idx_shift++] = idx_sur_coh[j]; - move16(); - } - } - - IF( EQ_16( sum16_fx( no_cv, coding_subbands ), coding_subbands ) ) - { - return 0; - } - - nbits_max = 0; - move16(); - IF( GT_16( coding_subbands, MASA_LIMIT_NO_BANDS_SUR_COH ) ) - { - j = maximum_s( (Word16 *) idx_sur_coh, coding_subbands, &max_val ); - FOR( j = 0; j < coding_subbands; j++ ) - { - IF( GT_16( no_cv[j], add( max_val, 1 ) ) ) - { - no_cv[j] = add( max_val, 1 ); - move16(); - } - } - nbits_max = sub( MASA_MAX_NO_CV_SUR_COH, max_val ); /* encoded with GR0 as max_no_vals - no_vals*/ - } - - nbits = coherence_coding_length( idx_sur_coh_shift, idx_shift, coding_subbands, no_cv, - mr_idx_sur_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); - half_coding_subbands = shr( coding_subbands, 1 ); - idx1 = 0; - move16(); - - /* should check how to encode the average - check distribution */ - IF( LT_16( add( add( nbits_fr, nbits_fr1 ), nbits_max ), nbits ) ) - { - /* write flag*/ - push_next_indice( hMetaData, 0, 1 ); - - /* create combined index */ - nbits = add( add( nbits_fr, nbits_fr1 ), 1 ); - IF( GT_16( coding_subbands, MASA_LIMIT_NO_BANDS_SUR_COH ) ) - { - /* write max value*/ - bits_GR = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, sub( MASA_MAX_NO_CV_SUR_COH - 1, max_val ), MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - } - - IF( nbits_fr1 > 0 ) - { - idx = create_combined_index( idx_sur_coh, half_coding_subbands, no_cv ); - idx1 = create_combined_index( &idx_sur_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); - } - ELSE - { - idx = create_combined_index( idx_sur_coh, coding_subbands, no_cv ); - } - - // if ( nbits_fr % 16 == 0 ) - IF( s_and( nbits_fr, 15 ) == 0 ) - { - no_idx16 = shr( nbits_fr, 4 ); - } - ELSE - { - // no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); - no_idx16 = shr_r( add( nbits_fr, ONE_IN_Q3 ), 4 ); - } - - /* write combined index */ - k = nbits_fr; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ - } - - push_next_indice( hMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - - IF( nbits_fr1 > 0 ) - { - // if ( nbits_fr1 % 16 == 0 ) - IF( s_and( nbits_fr1, 15 ) == 0 ) - { - no_idx16 = shr( nbits_fr1, 4 ); - } - ELSE - { - // no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); - no_idx16 = shr_r( add( nbits_fr1, ONE_IN_Q3 ), 4 ); - } - - assert( no_idx16 <= 4 ); - - k = nbits_fr1; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ - } - - push_next_indice( hMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); - } - } - ELSE - { - /* write flag */ - nbits = 1; - move16(); - - /* write flag*/ - push_next_indice( hMetaData, 1, 1 ); - - /* write GR_ord */ - push_next_indice( hMetaData, GR_ord, 1 ); - nbits = add( nbits, 1 ); - - /* write the min */ - bits_GR = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - - /* write GR data */ - FOR( j = 0; j < idx_shift; j++ ) - { - bits_GR = hMetaData->nb_bits_tot; - move16(); - - ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_sur_coh[j], no_cv_shift[j], GR_ord ); - - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - } - } - } + * + * encoding surround coherence + *-------------------------------------------------------------------*/ - return nbits; -} -#else -static int16_t encode_surround_coherence( +/*! r: number of bits written */ +static Word16 encode_surround_coherence_fx( IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ ) { - int16_t i, j, k; - int16_t idx_ER, idx16; - int16_t nbits, nbits_fr; - uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t mr_idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t GR_ord, bits_GR; - uint64_t idx, idx1; - int16_t no_idx16; - int16_t no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; - float error_ratio_surr; + Word16 i, j, k; + Word16 idx_ER, idx16; + Word16 nbits, nbits_fr; + UWord16 idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + UWord16 mr_idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 GR_ord, bits_GR; + UWord64 idx, idx1; + Word16 no_idx16; + Word16 no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; + Word32 error_ratio_surr; // Q30 IVAS_QDIRECTION *q_direction; - int16_t half_coding_subbands, nbits_fr1, coding_subbands; - int16_t all_coherence_zero; - uint16_t idx_sur_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; - uint8_t idx_shift; - int16_t max_val = 0, nbits_max; - int16_t no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; + Word16 half_coding_subbands, nbits_fr1, coding_subbands; + Word16 all_coherence_zero; + UWord16 idx_sur_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; + UWord8 idx_shift; + Word16 max_val = 0, nbits_max; + move16(); + Word16 no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; coding_subbands = hQMetaData->q_direction[0].cfg.nbands; + move16(); all_coherence_zero = hQMetaData->all_coherence_zero; + move16(); q_direction = &( hQMetaData->q_direction[0] ); nbits = 0; + move16(); - if ( all_coherence_zero == 1 ) + IF( EQ_16( all_coherence_zero, 1 ) ) { nbits = 0; + move16(); } - else + ELSE { GR_ord = 1; + move16(); k = 0; + move16(); idx_shift = 0; - for ( j = 0; j < coding_subbands; j++ ) + move16(); + FOR( j = 0; j < coding_subbands; j++ ) { - if ( hQMetaData->no_directions == 2 ) + IF( EQ_16( hQMetaData->no_directions, 2 ) ) { - k += hQMetaData->twoDirBands[j]; - idx16 = max( k - 1, 0 ); - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0] - q_direction[1].band_data[idx16].energy_ratio[0] * hQMetaData->twoDirBands[j]; + k = add( k, hQMetaData->twoDirBands[j] ); + idx16 = s_max( sub( k, 1 ), 0 ); + error_ratio_surr = W_sat_l( W_sub( W_sub( ONE_IN_Q30, q_direction[0].band_data[j].energy_ratio_fx[0] ), W_mult0_32_32( q_direction[1].band_data[idx16].energy_ratio_fx[0], hQMetaData->twoDirBands[j] ) ) ); } - else + ELSE { - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[0]; + error_ratio_surr = L_sub( ONE_IN_Q30, q_direction[0].band_data[j].energy_ratio_fx[0] ); } - if ( error_ratio_surr <= 0 ) + IF( error_ratio_surr <= 0 ) { error_ratio_surr = 0; + move16(); idx_sur_coh[j] = 0; + move16(); no_cv[j] = 1; + move16(); hQMetaData->surcoh_band_data[j].surround_coherence[0] = 0; /* sur_coherence_cb_masa[idx_cb_sur_coh_masa[DIRAC_DIFFUSE_LEVELS - 1] * MASA_MAX_NO_CV_SUR_COH]; */ + move16(); } - else + ELSE { - idx_ER = masa_sq( error_ratio_surr, diffuseness_thresholds, DIRAC_DIFFUSE_LEVELS ); + idx_ER = masa_sq_fx( error_ratio_surr, diffuseness_thresholds_fx, DIRAC_DIFFUSE_LEVELS ); - idx_sur_coh[j] = squant_int( hQMetaData->surcoh_band_data[j].surround_coherence[0], &hQMetaData->surcoh_band_data[j].surround_coherence[0], - &sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER] * MASA_MAX_NO_CV_SUR_COH], idx_cb_sur_coh_masa[idx_ER] + 2 ); + idx_sur_coh[j] = squant_int_fx( hQMetaData->surcoh_band_data[j].surround_coherence[0], &hQMetaData->surcoh_band_data[j].surround_coherence[0], + &sur_coherence_cb_masa[idx_cb_sur_coh_masa[idx_ER] * MASA_MAX_NO_CV_SUR_COH], add( idx_cb_sur_coh_masa[idx_ER], 2 ) ); + move16(); - no_cv[j] = idx_cb_sur_coh_masa[idx_ER] + 2; + no_cv[j] = add( idx_cb_sur_coh_masa[idx_ER], 2 ); + move16(); no_cv_shift[idx_shift] = no_cv[j]; + move16(); idx_sur_coh_shift[idx_shift++] = idx_sur_coh[j]; + move16(); } } - if ( sum_s( no_cv, coding_subbands ) == coding_subbands ) + IF( EQ_16( sum16_fx( no_cv, coding_subbands ), coding_subbands ) ) { return 0; } nbits_max = 0; - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + move16(); + IF( GT_16( coding_subbands, MASA_LIMIT_NO_BANDS_SUR_COH ) ) { - j = maximum_s( (int16_t *) idx_sur_coh, coding_subbands, &max_val ); - for ( j = 0; j < coding_subbands; j++ ) + j = maximum_s( (Word16 *) idx_sur_coh, coding_subbands, &max_val ); + FOR( j = 0; j < coding_subbands; j++ ) { - if ( no_cv[j] > max_val + 1 ) + IF( GT_16( no_cv[j], add( max_val, 1 ) ) ) { - no_cv[j] = max_val + 1; + no_cv[j] = add( max_val, 1 ); + move16(); } } - nbits_max = MASA_MAX_NO_CV_SUR_COH - max_val; /* encoded with GR0 as max_no_vals - no_vals*/ + nbits_max = sub( MASA_MAX_NO_CV_SUR_COH, max_val ); /* encoded with GR0 as max_no_vals - no_vals*/ } nbits = coherence_coding_length( idx_sur_coh_shift, idx_shift, coding_subbands, no_cv, mr_idx_sur_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); - half_coding_subbands = coding_subbands / 2; + half_coding_subbands = shr( coding_subbands, 1 ); idx1 = 0; + move16(); /* should check how to encode the average - check distribution */ - if ( nbits_fr + nbits_fr1 + nbits_max < nbits ) + IF( LT_16( add( add( nbits_fr, nbits_fr1 ), nbits_max ), nbits ) ) { /* write flag*/ push_next_indice( hMetaData, 0, 1 ); /* create combined index */ - nbits = nbits_fr + nbits_fr1 + 1; - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) + nbits = add( add( nbits_fr, nbits_fr1 ), 1 ); + IF( GT_16( coding_subbands, MASA_LIMIT_NO_BANDS_SUR_COH ) ) { /* write max value*/ bits_GR = hMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMetaData, MASA_MAX_NO_CV_SUR_COH - max_val - 1, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits += hMetaData->nb_bits_tot - bits_GR; + move16(); + ivas_qmetadata_encode_extended_gr( hMetaData, sub( MASA_MAX_NO_CV_SUR_COH - 1, max_val ), MASA_MAX_NO_CV_SUR_COH, 0 ); + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); } - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { idx = create_combined_index( idx_sur_coh, half_coding_subbands, no_cv ); idx1 = create_combined_index( &idx_sur_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); } - else + ELSE { idx = create_combined_index( idx_sur_coh, coding_subbands, no_cv ); } - if ( nbits_fr % 16 == 0 ) + // if ( nbits_fr % 16 == 0 ) + IF( s_and( nbits_fr, 15 ) == 0 ) { - no_idx16 = nbits_fr / 16; + no_idx16 = shr( nbits_fr, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + // no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + no_idx16 = shr_r( add( nbits_fr, ONE_IN_Q3 ), 4 ); } /* write combined index */ k = nbits_fr; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { - if ( nbits_fr1 % 16 == 0 ) + // if ( nbits_fr1 % 16 == 0 ) + IF( s_and( nbits_fr1, 15 ) == 0 ) { - no_idx16 = nbits_fr1 / 16; + no_idx16 = shr( nbits_fr1, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + // no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + no_idx16 = shr_r( add( nbits_fr1, ONE_IN_Q3 ), 4 ); } assert( no_idx16 <= 4 ); k = nbits_fr1; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); } } - else + ELSE { /* write flag */ nbits = 1; + move16(); /* write flag*/ push_next_indice( hMetaData, 1, 1 ); /* write GR_ord */ push_next_indice( hMetaData, GR_ord, 1 ); - nbits += 1; + nbits = add( nbits, 1 ); /* write the min */ bits_GR = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits += hMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); /* write GR data */ - for ( j = 0; j < idx_shift; j++ ) + FOR( j = 0; j < idx_shift; j++ ) { bits_GR = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_sur_coh[j], no_cv_shift[j], GR_ord ); - nbits += hMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); } } } return nbits; } -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 encode_surround_coherence_hr_fx( IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ @@ -9805,292 +5424,91 @@ static Word16 encode_surround_coherence_hr_fx( /* write max value*/ bits_GR = hMetaData->nb_bits_tot; move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, sub( MASA_MAX_NO_CV_SUR_COH - 1, max_val ), MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - } - - IF( nbits_fr1 > 0 ) - { - idx = create_combined_index( idx_sur_coh, half_coding_subbands, no_cv ); - idx1 = create_combined_index( &idx_sur_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); - } - ELSE - { - idx = create_combined_index( idx_sur_coh, coding_subbands, no_cv ); - } - - IF( nbits_fr % 16 == 0 ) - { - no_idx16 = shr( nbits_fr, 4 ); - } - ELSE - { - no_idx16 = shr_r( nbits_fr, 4 ); - } - - /* write combined index */ - k = nbits_fr; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ - } - - push_next_indice( hMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - - IF( nbits_fr1 > 0 ) - { - IF( nbits_fr1 % 16 == 0 ) - { - no_idx16 = shr( nbits_fr1, 4 ); - } - ELSE - { - no_idx16 = shr_r( nbits_fr1, 4 ); - } - - assert( no_idx16 <= 4 ); - - k = nbits_fr1; - move16(); - FOR( i = 0; i < no_idx16 - 1; i++ ) - { - k = sub( k, 16 ); - push_next_indice( hMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ - } - - push_next_indice( hMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); - } - } - ELSE - { - /* write flag */ - nbits = add( nbits, 1 ); - - /* write flag*/ - push_next_indice( hMetaData, 1, 1 ); - - /* write GR_ord */ - push_next_indice( hMetaData, GR_ord, 1 ); - nbits = add( nbits, 1 ); - - /* write the min */ - bits_GR = hMetaData->nb_bits_tot; - move16(); - ivas_qmetadata_encode_extended_gr( hMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - - /* write GR data */ - FOR( j = 0; j < idx_shift; j++ ) - { - bits_GR = hMetaData->nb_bits_tot; - move16(); - - ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_sur_coh[j], no_cv_shift[j], GR_ord ); - - nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); - } - } - } - } - } - - return nbits; -} -#else -static int16_t encode_surround_coherence_hr( - IVAS_QMETADATA *hQMetaData, /* i : quantized metadata */ - BSTR_ENC_HANDLE hMetaData /* i/o: metadata bitstream handle */ -) -{ - int16_t i, j, k, sf; - int16_t nbits, nbits_fr, nbits_sf; - uint16_t idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t mr_idx_sur_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t GR_ord, bits_GR; - uint64_t idx, idx1; - int16_t no_idx16; - int16_t no_cv[MASA_MAXIMUM_CODING_SUBBANDS]; - float error_ratio_surr; - IVAS_QDIRECTION *q_direction; - int16_t half_coding_subbands, nbits_fr1, coding_subbands; - int16_t all_coherence_zero; - uint16_t idx_sur_coh_shift[MASA_MAXIMUM_CODING_SUBBANDS]; - uint8_t idx_shift; - int16_t max_val = 0, nbits_max; - int16_t no_cv_shift[MASA_MAXIMUM_CODING_SUBBANDS], min_idx; - int16_t idx16; - int32_t int_error_ratio_surr; - - coding_subbands = hQMetaData->q_direction[0].cfg.nbands; - all_coherence_zero = hQMetaData->all_coherence_zero; - q_direction = &( hQMetaData->q_direction[0] ); - nbits = 0; - - if ( all_coherence_zero == 1 ) - { - nbits = 0; - } - else - { - for ( sf = 0; sf < hQMetaData->q_direction[0].cfg.nblocks; sf++ ) - { - GR_ord = 1; - k = 0; - idx_shift = 0; - for ( j = 0; j < coding_subbands; j++ ) - { - if ( hQMetaData->no_directions == 2 ) - { - k += hQMetaData->twoDirBands[j]; - idx16 = max( k - 1, 0 ); - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[sf] - q_direction[1].band_data[idx16].energy_ratio[sf] * hQMetaData->twoDirBands[j]; - } - else - { - error_ratio_surr = 1.0f - q_direction[0].band_data[j].energy_ratio[sf]; - } - int_error_ratio_surr = (int32_t) ( MASA_SUR_COH_PRECISION * error_ratio_surr ); - error_ratio_surr = (float) ( int_error_ratio_surr * MASA_SUR_COH_THRESHOLD ); - - if ( error_ratio_surr <= 0 ) - { - error_ratio_surr = 0; - idx_sur_coh[j] = 0; - no_cv[j] = 1; - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = 0; /* sur_coherence_cb_masa[idx_cb_sur_coh_masa[DIRAC_DIFFUSE_LEVELS - 1] * MASA_MAX_NO_CV_SUR_COH]; */ - } - else - { - idx_sur_coh[j] = squant_int( hQMetaData->surcoh_band_data[j].surround_coherence[sf], &hQMetaData->surcoh_band_data[j].surround_coherence[sf], - &sur_coherence_cb_masa[idx_cb_sur_coh_masa[7] * MASA_MAX_NO_CV_SUR_COH], idx_cb_sur_coh_masa[7] + 2 ); - no_cv[j] = idx_cb_sur_coh_masa[7] + 2; - no_cv_shift[idx_shift] = no_cv[j]; - idx_sur_coh_shift[idx_shift++] = idx_sur_coh[j]; - } - } - - if ( sum_s( no_cv, coding_subbands ) != coding_subbands ) - { - nbits_max = 0; - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) - { - j = maximum_s( (int16_t *) idx_sur_coh, coding_subbands, &max_val ); - for ( j = 0; j < coding_subbands; j++ ) - { - if ( no_cv[j] > max_val + 1 ) - { - no_cv[j] = max_val + 1; - } - } - nbits_max = MASA_MAX_NO_CV_SUR_COH - max_val; /* encoded with GR0 as max_no_vals - no_vals*/ - } - if ( max_val == 0 ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - hQMetaData->surcoh_band_data[j].surround_coherence[sf] = 0; - } - } - nbits_sf = coherence_coding_length( idx_sur_coh_shift, idx_shift, coding_subbands, no_cv, - mr_idx_sur_coh, no_cv_shift, &min_idx, &GR_ord, &nbits_fr, &nbits_fr1 ); - half_coding_subbands = coding_subbands / 2; - idx1 = 0; - - /* should check how to encode the average - check distribution */ - if ( nbits_fr + nbits_fr1 + nbits_max < nbits_sf ) - { - /* write flag*/ - push_next_indice( hMetaData, 0, 1 ); - - /* create combined index */ - nbits += nbits_fr + nbits_fr1 + 1; - if ( coding_subbands > MASA_LIMIT_NO_BANDS_SUR_COH ) - { - /* write max value*/ - bits_GR = hMetaData->nb_bits_tot; - ivas_qmetadata_encode_extended_gr( hMetaData, MASA_MAX_NO_CV_SUR_COH - max_val - 1, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits += hMetaData->nb_bits_tot - bits_GR; + ivas_qmetadata_encode_extended_gr( hMetaData, sub( MASA_MAX_NO_CV_SUR_COH - 1, max_val ), MASA_MAX_NO_CV_SUR_COH, 0 ); + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); } - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { idx = create_combined_index( idx_sur_coh, half_coding_subbands, no_cv ); idx1 = create_combined_index( &idx_sur_coh[half_coding_subbands], half_coding_subbands, &no_cv[half_coding_subbands] ); } - else + ELSE { idx = create_combined_index( idx_sur_coh, coding_subbands, no_cv ); } - if ( nbits_fr % 16 == 0 ) + IF( nbits_fr % 16 == 0 ) { - no_idx16 = nbits_fr / 16; + no_idx16 = shr( nbits_fr, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr / 16.0f + 0.5f ) ); + no_idx16 = shr_r( nbits_fr, 4 ); } /* write combined index */ k = nbits_fr; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMetaData, ( ( idx >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMetaData, ( idx & ( ( 1 << k ) - 1 ) ), k ); - if ( nbits_fr1 > 0 ) + IF( nbits_fr1 > 0 ) { - if ( nbits_fr1 % 16 == 0 ) + IF( nbits_fr1 % 16 == 0 ) { - no_idx16 = nbits_fr1 / 16; + no_idx16 = shr( nbits_fr1, 4 ); } - else + ELSE { - no_idx16 = (int16_t) round_f( ( nbits_fr1 / 16.0f + 0.5f ) ); + no_idx16 = shr_r( nbits_fr1, 4 ); } assert( no_idx16 <= 4 ); k = nbits_fr1; - for ( i = 0; i < no_idx16 - 1; i++ ) + move16(); + FOR( i = 0; i < no_idx16 - 1; i++ ) { - k -= 16; + k = sub( k, 16 ); push_next_indice( hMetaData, ( ( idx1 >> k ) & 65535 ), 16 ); /* 16 bits */ } push_next_indice( hMetaData, ( idx1 & ( ( 1 << k ) - 1 ) ), k ); } } - else + ELSE { /* write flag */ - nbits += 1; + nbits = add( nbits, 1 ); /* write flag*/ push_next_indice( hMetaData, 1, 1 ); /* write GR_ord */ push_next_indice( hMetaData, GR_ord, 1 ); - nbits += 1; + nbits = add( nbits, 1 ); /* write the min */ bits_GR = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, min_idx, MASA_MAX_NO_CV_SUR_COH, 0 ); - nbits += hMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); /* write GR data */ - for ( j = 0; j < idx_shift; j++ ) + FOR( j = 0; j < idx_shift; j++ ) { bits_GR = hMetaData->nb_bits_tot; + move16(); ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_sur_coh[j], no_cv_shift[j], GR_ord ); - nbits += hMetaData->nb_bits_tot - bits_GR; + nbits = add( nbits, sub( hMetaData->nb_bits_tot, bits_GR ) ); } } } @@ -10099,7 +5517,6 @@ static int16_t encode_surround_coherence_hr( return nbits; } -#endif /*-------------------------------------------------------------------* @@ -10107,7 +5524,6 @@ static int16_t encode_surround_coherence_hr( * * quanization of DCT component of order zero for transformed coherence vector *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: quantized value */ static Word32 quantize_DCT_0_coh_fx( // o:Q21 const Word16 x, /* i : input value Q14 */ @@ -10158,60 +5574,12 @@ static Word32 quantize_DCT_0_coh_fx( // o:Q21 return L_shl( xhat, 7 ); // Q21 } -#else -/*! r: quantized value */ -static float quantize_DCT_0_coh( - const float x, /* i : input value */ - const int16_t j, /* i : subband index */ - const float *coherence_cb, /* i : coherence codebook */ - const float delta_var, /* i : azimuth variance threshold */ - const int16_t no_cb, /* i : maximum number of codewords */ - IVAS_QDIRECTION *q_direction, /* i : quantized metadata */ - uint16_t *idx_x, /* o : codewords index */ - int16_t *p_no_cb, /* o : actual number of codewords dependent on energy ratio value */ - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ -) -{ - float var_azi, xhat; - int16_t idx_sub_cb, idx; - int16_t min_index; - /* quantize first DCT component */ - var_azi = var( q_direction->band_data[j].azimuth, q_direction->cfg.nblocks ); - - if ( hrmasa_flag ) - { - minimum_s( (int16_t *) ( q_direction->band_data[j].energy_ratio_index ), q_direction->cfg.nblocks, &min_index ); - min_index = min_index >> 1; - } - else - { - min_index = q_direction->band_data[j].energy_ratio_index[0]; - } - - if ( var_azi < delta_var ) - { - idx_sub_cb = no_cb * min_index; - } - else - { - idx_sub_cb = no_cb * ( min_index + DIRAC_DIFFUSE_LEVELS ); - } - - idx = squant( x, &xhat, &coherence_cb[idx_sub_cb], len_cb_dct0_masa[min_index] ); - - *p_no_cb = len_cb_dct0_masa[min_index]; - *idx_x = idx; - - return xhat; -} -#endif /*-------------------------------------------------------------------* * encode_coherence_indexesDCT1() * * Encoding DCT1 coeffs with joint index or EC *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: number of bits written */ static Word16 encode_coherence_indexesDCT1_fx( UWord16 *idx_dct, /* i : data to be encoded */ @@ -10241,42 +5609,12 @@ static Word16 encode_coherence_indexesDCT1_fx( return nbits; } -#else -/*! r: number of bits written */ -static int16_t encode_coherence_indexesDCT1( - uint16_t *idx_dct, /* i : data to be encoded */ - const int16_t len, /* i : number of data */ - BSTR_ENC_HANDLE hMetaData /* i : metadata handle */ -) -{ - int16_t i, nbits, GR_ord; - uint16_t av; - uint16_t mr_idx_dct[MASA_MAXIMUM_CODING_SUBBANDS]; - - GR_ord = 0; - nbits = 0; - - nbits = mean_removed_GR_new( idx_dct, MASA_NO_CV_COH1, len, 0, &GR_ord, &av, mr_idx_dct ); - - for ( i = 0; i < len; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx_dct[i], 2 * MASA_NO_CV_COH1, GR_ord ); - } - - nbits += len_huf_masa[av]; - - push_next_indice( hMetaData, huff_code_av_masa[av], len_huf_masa[av] ); - - return nbits; -} -#endif /*-------------------------------------------------------------------* * dct4_transform() * * 4D implementation of DCT transform *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void dct4_transform_fx( uint8_t *v, /* i : input 4D vector */ Word32 *dct_v /* o : output transformed vector Q21 */ @@ -10300,34 +5638,12 @@ static void dct4_transform_fx( return; } -#else -static void dct4_transform( - uint8_t *v, /* i : input 4D vector */ - float *dct_v /* o : output transformed vector */ -) -{ - float a, b, c, d; - - a = ( v[0] + v[3] ) / 256.0f; - b = ( v[1] + v[2] ) / 256.0f; - c = ( v[0] - v[3] ) / 256.0f; - d = ( v[1] - v[2] ) / 256.0f; - - dct_v[0] = 0.5f * ( a + b ); - dct_v[1] = 0.653281482438188f * c + 0.270598050073099f * d; - dct_v[2] = 0.5f * ( a - b ); - dct_v[3] = 0.270598050073099f * c - 0.653281482438188f * d; - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_qmetadata_quantize_coherence_hr_512() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_quantize_coherence_hr_512_fx( IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ const Word16 idx_d, /* i : current direction index */ @@ -10452,114 +5768,6 @@ static Word16 ivas_qmetadata_quantize_coherence_hr_512_fx( nbits = sub( hMetaData->nb_bits_tot, nbits ); return nbits; } -#else -static int16_t ivas_qmetadata_quantize_coherence_hr_512( - IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ - const int16_t idx_d, /* i : current direction index */ - const int16_t all_coherence_zero, /* i : all coherence is zero - flag */ - BSTR_ENC_HANDLE hMetaData, /* i : metadata handle */ - const int16_t bits_coh ) -{ - int16_t j, k; - int16_t nbands, nblocks; - int16_t nbits; - int16_t nbits1, nbits0, nbits_av; - uint16_t idx_coh[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t cbsize; - float delta, tmp; - int16_t min_idx, GR_param, GR_param_av; - uint16_t av, mr_idx[MASA_MAXIMUM_CODING_SUBBANDS]; - - q_direction = &( hQMetaData->q_direction[idx_d] ); - nbands = q_direction->cfg.nbands; - nblocks = q_direction->cfg.nblocks; - nbits = 0; - - if ( all_coherence_zero == 1 ) - { - return nbits; - } - nbits = hMetaData->nb_bits_tot; - - cbsize = 1 << bits_coh; - delta = 256.0f / cbsize; - - for ( k = 0; k < nblocks; k++ ) - { - min_idx = 0; - for ( j = 0; j < nbands; j++ ) - { - idx_coh[j] = usquant( (float) ( q_direction->coherence_band_data[j].spread_coherence[k] ), &tmp, delta / 2.0f, delta, cbsize ); - q_direction->coherence_band_data[j].spread_coherence[k] = (uint8_t) ( idx_coh[j] * delta + delta / 2.0f ); - if ( idx_coh[j] < min_idx ) - { - min_idx = idx_coh[j]; - } - } - - nbits0 = 0; - nbits1 = 0; - for ( j = 0; j < nbands; j++ ) - { - idx_coh[j] = idx_coh[j] - min_idx; - nbits0 += ivas_qmetadata_encode_extended_gr_length( idx_coh[j], cbsize - min_idx, 0 ); - nbits1 += ivas_qmetadata_encode_extended_gr_length( idx_coh[j], cbsize - min_idx, 1 ); - } - if ( nbits0 < nbits1 ) - { - GR_param = 0; - nbits1 = nbits0; - } - else - { - GR_param = 1; - } - - GR_param_av = 1; - nbits_av = mean_removed_GR_new( idx_coh, cbsize, nbands, 1, &GR_param_av, &av, mr_idx ); - - if ( nbits_av < nbits1 ) - { - nbits1 = nbits_av; - GR_param = GR_param_av; - - /* use average removed */ - push_next_indice( hMetaData, 1, 1 ); - - /* write average */ - push_next_indice( hMetaData, av, bits_coh ); - - /* write GR param */ - push_next_indice( hMetaData, GR_param, 1 ); - - for ( j = 0; j < nbands; j++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, mr_idx[j], 2 * cbsize, GR_param ); - } - } - else - { - /* use min removed */ - push_next_indice( hMetaData, 0, 1 ); - - /* write min index */ - push_next_indice( hMetaData, min_idx, bits_coh ); - - /* write GR param */ - push_next_indice( hMetaData, GR_param, 1 ); - - for ( j = 0; j < nbands; j++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, idx_coh[j], cbsize - min_idx, GR_param ); - } - } - } - - nbits = hMetaData->nb_bits_tot - nbits; - return nbits; -} -#endif /*-------------------------------------------------------------------* * ivas_qmetadata_quantize_coherence() @@ -10568,7 +5776,6 @@ static int16_t ivas_qmetadata_quantize_coherence_hr_512( *-------------------------------------------------------------------*/ /*! r: number of bits written */ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_qmetadata_quantize_coherence_fx( IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ const Word16 idx_d, /* i : current direction index */ @@ -10815,201 +6022,6 @@ static Word16 ivas_qmetadata_quantize_coherence_fx( } return nbits; } -#else -static int16_t ivas_qmetadata_quantize_coherence( - IVAS_QMETADATA *hQMetaData, /* i/o: quantized metadata */ - const int16_t idx_d, /* i : current direction index */ - const int16_t all_coherence_zero, /* i : all coherence is zero - flag */ - BSTR_ENC_HANDLE hMetaData, /* i : metadata handle */ - const int16_t write_flag, /* i : flag to actually write the data or not */ - int16_t *indice_coherence, - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding */ -) -{ - int16_t j, k; - float dct_coh[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - uint16_t idx_dct[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t coding_subbands; - int16_t nbits; - uint64_t no_cb; - int16_t MASA_grouping[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t nbits1; - int16_t coding_subbands_0, d; - int16_t two_dir_band[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t no_cb_vec[MASA_MAXIMUM_CODING_SUBBANDS]; - IVAS_QDIRECTION *q_direction; - int16_t min_index; - min_index = 0; - q_direction = &( hQMetaData->q_direction[idx_d] ); - coding_subbands = q_direction->cfg.nbands; - nbits = 0; - - if ( all_coherence_zero == 1 ) - { - return nbits; - } - - if ( hQMetaData->q_direction[idx_d].cfg.nblocks == 1 ) - { - nbits = encode_spread_coherence_1sf( hQMetaData, idx_d, hMetaData, hrmasa_flag ); - - return nbits; - } - else - { - k = 0; - no_cb = 1; - coding_subbands_0 = hQMetaData->q_direction[0].cfg.nbands; - if ( coding_subbands_0 <= 5 ) - { - for ( j = 0; j < 5; j++ ) - { - MASA_grouping[j] = j; - } - } - else - { - if ( coding_subbands_0 <= 8 ) - { - mvs2s( MASA_grouping_8_to_5, MASA_grouping, 8 ); - } - else if ( coding_subbands_0 <= 12 ) - { - mvs2s( MASA_grouping_12_to_5, MASA_grouping, 12 ); - } - else if ( coding_subbands_0 <= 18 ) - { - mvs2s( MASA_grouping_18_to_5, MASA_grouping, 18 ); - } - else - { - if ( coding_subbands_0 <= 24 ) - { - mvs2s( MASA_grouping_24_to_5, MASA_grouping, 24 ); - } - } - } - - if ( coding_subbands < coding_subbands_0 ) - { - d = 0; - for ( j = 0; j < coding_subbands_0; j++ ) - { - if ( hQMetaData->twoDirBands[j] == 1 ) - { - two_dir_band[d++] = j; - } - } - } - - for ( j = 0; j < coding_subbands; j++ ) - { - /* DCT transform */ - dct4_transform( hQMetaData->q_direction[idx_d].coherence_band_data[j].spread_coherence, dct_coh[j] ); - - if ( hrmasa_flag ) - { - minimum_s( (int16_t *) ( q_direction->band_data[j].energy_ratio_index ), q_direction->cfg.nblocks, &min_index ); - no_cb_vec[j] = len_cb_dct0_masa[min_index >> 1]; - } - else - { - no_cb_vec[j] = len_cb_dct0_masa[q_direction->band_data[j].energy_ratio_index[0]]; - } - - if ( write_flag ) - { - /* quantize first DCT parameter */ - dct_coh[j][0] = quantize_DCT_0_coh( dct_coh[j][0], j, coherence_cb0_masa, MASA_DELTA_AZI_DCT0, MASA_NO_CV_COH, q_direction, &idx_dct[k], &no_cb_vec[j], hrmasa_flag ); - } - - if ( coding_subbands < coding_subbands_0 ) - { - idx_dct[k + coding_subbands] = squant( dct_coh[j][1], &dct_coh[j][1], &coherence_cb1_masa[MASA_grouping[two_dir_band[j]] * MASA_NO_CV_COH1], MASA_NO_CV_COH1 ); - } - else - { - idx_dct[k + coding_subbands] = squant( dct_coh[j][1], &dct_coh[j][1], &coherence_cb1_masa[MASA_grouping[j] * MASA_NO_CV_COH1], MASA_NO_CV_COH1 ); - } - k++; - - dct_coh[j][2] = 0.0f; - dct_coh[j][3] = 0.0f; - } - - nbits1 = 0; - if ( sum_s( no_cb_vec, coding_subbands ) > MASA_COH_LIMIT_2IDX ) - { - /* make two indxes */ - no_cb = 1; - - for ( j = 0; j < coding_subbands / 2; j++ ) - { - no_cb *= no_cb_vec[j]; - } - - nbits = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - no_cb = 1; - - for ( j = coding_subbands / 2; j < coding_subbands; j++ ) - { - no_cb *= no_cb_vec[j]; - } - nbits1 = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - } - else - { - no_cb = 1; - - for ( j = 0; j < coding_subbands; j++ ) - { - no_cb *= no_cb_vec[j]; - } - - nbits = (int16_t) ceilf( logf( (float) no_cb ) * INV_LOG_2 ); - } - - if ( write_flag ) - { - for ( j = 0; j < coding_subbands; j++ ) - { - /* inverse DCT transform */ - invdct4_transform( dct_coh[j], q_direction->coherence_band_data[j].spread_coherence ); - } - - nbits = encode_coherence_indexesDCT0( idx_dct, coding_subbands, no_cb_vec, hMetaData, *indice_coherence, nbits, nbits1 ); - } - else - { - /* write dummy data now and save the position */ - *indice_coherence = hMetaData->nb_ind_tot; - k = nbits; - while ( k > 0 ) - { - push_next_indice( hMetaData, 0, min( 16, k ) ); - k -= 16; - } - - if ( nbits1 > 0 ) - { - k = nbits1; - while ( k > 0 ) - { - push_next_indice( hMetaData, 0, min( 16, k ) ); - k -= 16; - } - } - nbits += nbits1; - set_s( no_cb_vec, MASA_NO_CV_COH1, coding_subbands ); - nbits += encode_coherence_indexesDCT1( &idx_dct[coding_subbands], coding_subbands, hMetaData ); - - return nbits; - } - } - - return nbits; -} -#endif /*-------------------------------------------------------------------* @@ -11018,7 +6030,6 @@ static int16_t ivas_qmetadata_quantize_coherence( * Reorders metadata on 2dir bands such that direct-to-total ratio of first direction is * always larger or equal to direct-to-total ratio of second direction. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_qmetadata_reorder_2dir_bands_fx( IVAS_QMETADATA_HANDLE hQMetaData ) { @@ -11078,537 +6089,123 @@ static void ivas_qmetadata_reorder_2dir_bands_fx( { uint8_tmp = hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf]; move16(); - hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf]; - move16(); - hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = uint8_tmp; - move16(); - } - } - IF( hQMetaData->coherence_flag ) - { - fx_tmp = hQMetaData->q_direction[0].band_data[band].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[0].band_data[band].energy_ratio_fx[0] = hQMetaData->q_direction[1].band_data[band].energy_ratio_fx[0]; - move32(); - hQMetaData->q_direction[1].band_data[band].energy_ratio_fx[0] = fx_tmp; - move32(); - } - } - } - } - - return; -} -#else -static void ivas_qmetadata_reorder_2dir_bands( - IVAS_QMETADATA_HANDLE hQMetaData ) -{ - int16_t nbands; - int16_t nsubframes; - int16_t band, sf; - - nbands = hQMetaData->q_direction[0].cfg.nbands; - nsubframes = hQMetaData->q_direction[0].cfg.nblocks; - - for ( band = 0; band < nbands; band++ ) - { - if ( hQMetaData->twoDirBands[band] == 1 ) - { - if ( hQMetaData->q_direction[0].band_data[band].energy_ratio[0] < hQMetaData->q_direction[1].band_data[band].energy_ratio[0] ) - { - uint16_t uint16_tmp = 0; - float flt_tmp = 0; - uint8_t uint8_tmp = 0; - - for ( sf = 0; sf < nsubframes; sf++ ) - { - uint16_tmp = hQMetaData->q_direction[0].band_data[band].spherical_index[sf]; - hQMetaData->q_direction[0].band_data[band].spherical_index[sf] = hQMetaData->q_direction[1].band_data[band].spherical_index[sf]; - hQMetaData->q_direction[1].band_data[band].spherical_index[sf] = uint16_tmp; - - flt_tmp = hQMetaData->q_direction[0].band_data[band].azimuth[sf]; - hQMetaData->q_direction[0].band_data[band].azimuth[sf] = hQMetaData->q_direction[1].band_data[band].azimuth[sf]; - hQMetaData->q_direction[1].band_data[band].azimuth[sf] = flt_tmp; - - flt_tmp = hQMetaData->q_direction[0].band_data[band].elevation[sf]; - hQMetaData->q_direction[0].band_data[band].elevation[sf] = hQMetaData->q_direction[1].band_data[band].elevation[sf]; - hQMetaData->q_direction[1].band_data[band].elevation[sf] = flt_tmp; - - uint8_tmp = hQMetaData->q_direction[0].band_data[band].distance[sf]; - hQMetaData->q_direction[0].band_data[band].distance[sf] = hQMetaData->q_direction[1].band_data[band].distance[sf]; - hQMetaData->q_direction[1].band_data[band].distance[sf] = uint8_tmp; - - if ( hQMetaData->coherence_flag ) - { - uint8_tmp = hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf]; - hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf]; - hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = uint8_tmp; - } - } - if ( hQMetaData->coherence_flag ) - { - flt_tmp = hQMetaData->q_direction[0].band_data[band].energy_ratio[0]; - hQMetaData->q_direction[0].band_data[band].energy_ratio[0] = hQMetaData->q_direction[1].band_data[band].energy_ratio[0]; - hQMetaData->q_direction[1].band_data[band].energy_ratio[0] = flt_tmp; - } - } - } - } - - return; -} -#endif - -/*-------------------------------------------------------------------* - * write_2dir_info() - * - * - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word16 write_2dir_info( - BSTR_ENC_HANDLE hMetaData, - UWord8 *twoDirBands, - const Word16 n, - const Word16 k ) -{ - Word16 nbits; - Word16 p[MASA_MAXIMUM_CODING_SUBBANDS]; - UWord16 dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; - Word16 i, j; - - j = 0; - p[0] = 0; - move16(); - move16(); - FOR( i = 0; i < n; i++ ) - { - IF( EQ_16( twoDirBands[i], 1 ) ) - { - p[j] = i; - j = add( j, 1 ); - move16(); - } - } - - dif_p[0] = p[0]; - move16(); - FOR( i = 1; i < j; i++ ) - { - dif_p[i] = sub( sub( p[i], p[i - 1] ), 1 ); - move16(); - } - - j = hMetaData->nb_bits_tot; - move16(); - FOR( i = 0; i < k; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, dif_p[i], 24, 0 ); - } - nbits = sub( hMetaData->nb_bits_tot, j ); - - return nbits; -} -#else -static int16_t write_2dir_info( - BSTR_ENC_HANDLE hMetaData, - uint8_t *twoDirBands, - const int16_t n, - const int16_t k ) -{ - int16_t nbits; - int16_t p[MASA_MAXIMUM_CODING_SUBBANDS]; - uint16_t dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; - int16_t i, j; - - j = 0; - p[0] = 0; - for ( i = 0; i < n; i++ ) - { - if ( twoDirBands[i] == 1 ) - { - p[j] = i; - j++; - } - } - - dif_p[0] = p[0]; - for ( i = 1; i < j; i++ ) - { - dif_p[i] = p[i] - p[i - 1] - 1; - } - - j = hMetaData->nb_bits_tot; - for ( i = 0; i < k; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, dif_p[i], 24, 0 ); - } - nbits = hMetaData->nb_bits_tot - j; - - return nbits; -} -#endif - -/*-------------------------------------------------------------------* - * transform_azimuth_dir2() - * - * - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static void transform_azimuth_dir2_fx( - IVAS_QMETADATA_HANDLE hQMetaData, - Word16 *dir2_bands ) -{ - Word16 i, b; - - FOR( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) - { - IF( LT_16( hQMetaData->q_direction[0].band_data[dir2_bands[i]].energy_ratio_index[0], 7 ) ) - { - /* transform azimuth */ - FOR( b = 0; b < hQMetaData->q_direction[1].cfg.nblocks; b++ ) - { - Word64 azimuth; - azimuth = W_add( W_deposit32_l( L_sub( hQMetaData->q_direction[1].band_data[i].azimuth_fx[b], hQMetaData->q_direction[0].band_data[dir2_bands[i]].azimuth_fx[b] ) ), DEGREE_180_Q_22 ); - - IF( GE_64( azimuth, DEGREE_180_Q_22 ) ) - { - azimuth = W_sub( azimuth, DEGREE_360_Q_22 ); - } - IF( LT_64( azimuth, -DEGREE_180_Q_22 ) ) - { - azimuth = W_add( azimuth, DEGREE_360_Q_22 ); - } - IF( GE_64( azimuth, DEGREE_180_Q_22 ) ) - { - azimuth = W_sub( azimuth, DEGREE_360_Q_22 ); - } - IF( LT_64( azimuth, -DEGREE_180_Q_22 ) ) - { - azimuth = W_add( azimuth, DEGREE_360_Q_22 ); - } - - hQMetaData->q_direction[1].band_data[i].azimuth_fx[b] = W_extract_l( azimuth ); - move32(); - } - } - } - - return; -} -#else -static void transform_azimuth_dir2( - IVAS_QMETADATA_HANDLE hQMetaData, - int16_t *dir2_bands ) -{ - int16_t i, b; - - for ( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) - { - if ( hQMetaData->q_direction[0].band_data[dir2_bands[i]].energy_ratio_index[0] < 7 ) - { - /* transform azimuth */ - for ( b = 0; b < hQMetaData->q_direction[1].cfg.nblocks; b++ ) - { - hQMetaData->q_direction[1].band_data[i].azimuth[b] = hQMetaData->q_direction[1].band_data[i].azimuth[b] - hQMetaData->q_direction[0].band_data[dir2_bands[i]].azimuth[b] + 180; - if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] >= 180 ) - { - hQMetaData->q_direction[1].band_data[i].azimuth[b] -= 360; - } - if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] < -180 ) - { - hQMetaData->q_direction[1].band_data[i].azimuth[b] += 360; - } - if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] >= 180 ) - { - hQMetaData->q_direction[1].band_data[i].azimuth[b] -= 360; - } - if ( hQMetaData->q_direction[1].band_data[i].azimuth[b] < -180 ) - { - hQMetaData->q_direction[1].band_data[i].azimuth[b] += 360; - } - } - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static int16_t divide_GR_orders( - const int16_t *q_idx, - const int16_t GR1, - const int16_t GR2, - const int16_t len, - const int16_t len_max_GR1, - int16_t *i_min ) -{ - int16_t nb_GR_min; - int16_t i, j, nb_GR; - nb_GR_min = 1000; - *i_min = -1; - for ( i = 0; i < min( len_max_GR1, len ); i++ ) - { - nb_GR = 0; - - for ( j = 0; j <= i; j++ ) - { - nb_GR += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR1 ); - } - for ( j = i + 1; j < len; j++ ) - { - nb_GR += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR2 ); - } - - if ( nb_GR < nb_GR_min ) - { - nb_GR_min = nb_GR; - *i_min = i + 1; - } - } - - return nb_GR_min; -} - - -static int16_t find_optimal_GR_order( - const int16_t *q_idx, - const int16_t len, - int16_t *GR ) -{ - int16_t nb_GR_0, nb_GR_1; - int16_t i; - /* find optimum length of the part encoded with GR2 */ - nb_GR_0 = 0; - nb_GR_1 = 0; - for ( i = 0; i < len; i++ ) - { - nb_GR_0 += ivas_qmetadata_encode_extended_gr_length( q_idx[i], 100, 0 ); - nb_GR_1 += ivas_qmetadata_encode_extended_gr_length( q_idx[i], 100, 1 ); - } - - if ( nb_GR_0 < nb_GR_1 ) - { - *GR = 0; - return nb_GR_0; - } - else - { - *GR = 1; - - return nb_GR_1; - } -} - - -static int16_t find_optimal_GR_orders( - const int16_t *q_idx, - const int16_t len, - const int16_t len_max_GR1, - int16_t *GR1, - int16_t *GR2, - int16_t *i_min ) -{ - int16_t nb_GR_20, nb_GR_21, nb_GR_10, nb_GR_min; - int16_t i_min_20, i_min_21, i_min_10; - /* find optimum length of the part encoded with GR2 */ - nb_GR_20 = divide_GR_orders( q_idx, 2, 0, len, len_max_GR1, &i_min_20 ); - nb_GR_21 = divide_GR_orders( q_idx, 2, 1, len, len_max_GR1, &i_min_21 ); - nb_GR_10 = divide_GR_orders( q_idx, 1, 0, len, len_max_GR1, &i_min_10 ); - - if ( nb_GR_20 < nb_GR_21 && nb_GR_20 < nb_GR_10 ) - { - *GR1 = 2; - *GR2 = 0; - nb_GR_min = nb_GR_20; - *i_min = i_min_20; - } - else - { - if ( nb_GR_21 < nb_GR_20 && nb_GR_21 < nb_GR_10 ) - { - *GR1 = 2; - *GR2 = 1; - nb_GR_min = nb_GR_21; - *i_min = i_min_21; - } - else - { - *GR1 = 1; - *GR2 = 0; - nb_GR_min = nb_GR_10; - *i_min = i_min_10; + hQMetaData->q_direction[0].coherence_band_data[band].spread_coherence[sf] = hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf]; + move16(); + hQMetaData->q_direction[1].coherence_band_data[band].spread_coherence[sf] = uint8_tmp; + move16(); + } + } + IF( hQMetaData->coherence_flag ) + { + fx_tmp = hQMetaData->q_direction[0].band_data[band].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[0].band_data[band].energy_ratio_fx[0] = hQMetaData->q_direction[1].band_data[band].energy_ratio_fx[0]; + move32(); + hQMetaData->q_direction[1].band_data[band].energy_ratio_fx[0] = fx_tmp; + move32(); + } + } } } - return nb_GR_min; + return; } - -static int16_t write_stream_dct_coeffs_omasa( - int16_t *q_idx, /* i : array of indexes to be written */ - const int16_t len_stream, /* i : array length */ - BSTR_ENC_HANDLE hMetaData, /* i/o: metadata bitstream */ - const int16_t first_line, /* i : is first line of the matrix? 1/0 */ - const int16_t low_bitrate_mode /* i : is low bitrate mode? if yes, limit the number of bits written */ -) +/*-------------------------------------------------------------------* + * write_2dir_info() + * + * + *-------------------------------------------------------------------*/ +static Word16 write_2dir_info( + BSTR_ENC_HANDLE hMetaData, + UWord8 *twoDirBands, + const Word16 n, + const Word16 k ) { - int16_t nb_bits = 0, bits_pos; - uint16_t nb_GR_min; - int16_t i, j; - int16_t changed, update_needed; - - int16_t GR1, GR2, i_min; - int16_t max_bits; - - bits_pos = hMetaData->nb_bits_tot; - if ( low_bitrate_mode == 1 ) - { - max_bits = 50; - } - else - { - max_bits = 1000; - } + Word16 nbits; + Word16 p[MASA_MAXIMUM_CODING_SUBBANDS]; + UWord16 dif_p[MASA_MAXIMUM_CODING_SUBBANDS]; + Word16 i, j; - /* write DCT 0 component */ - /* write sign only if not the very first DCT coeff */ - if ( first_line == 0 ) + j = 0; + p[0] = 0; + move16(); + move16(); + FOR( i = 0; i < n; i++ ) { - if ( q_idx[0] > 0 ) - { - push_next_indice( hMetaData, 1, 1 ); - push_next_indice( hMetaData, q_idx[0], BITS_MASA2TOTTAL_DCT0 ); - } - else + IF( EQ_16( twoDirBands[i], 1 ) ) { - push_next_indice( hMetaData, 0, 1 ); - push_next_indice( hMetaData, -q_idx[0], BITS_MASA2TOTTAL_DCT0 ); + p[j] = i; + j = add( j, 1 ); + move16(); } - nb_bits += BITS_MASA2TOTTAL_DCT0 + 1; } - else + + dif_p[0] = p[0]; + move16(); + FOR( i = 1; i < j; i++ ) { - push_next_indice( hMetaData, q_idx[0], BITS_MASA2TOTTAL_DCT0 ); - nb_bits += BITS_MASA2TOTTAL_DCT0; + dif_p[i] = sub( sub( p[i], p[i - 1] ), 1 ); + move16(); } - if ( q_idx[0] != 0 ) + j = hMetaData->nb_bits_tot; + move16(); + FOR( i = 0; i < k; i++ ) { - i_min = 1; - GR2 = 0; - if ( len_stream >= 8 ) - { - nb_GR_min = find_optimal_GR_orders( &q_idx[1], len_stream - 1, 15, &GR1, &GR2, &i_min ); - } - else - { - nb_GR_min = find_optimal_GR_order( &q_idx[1], len_stream - 1, &GR1 ); - } + ivas_qmetadata_encode_extended_gr( hMetaData, dif_p[i], 24, 0 ); + } + nbits = sub( hMetaData->nb_bits_tot, j ); - assert( nb_GR_min < 1000 ); - changed = 1; - update_needed = 0; - while ( len_stream >= 8 && nb_GR_min > max_bits && changed >= 1 ) + return nbits; +} + +/*-------------------------------------------------------------------* + * transform_azimuth_dir2() + * + * + *-------------------------------------------------------------------*/ +static void transform_azimuth_dir2_fx( + IVAS_QMETADATA_HANDLE hQMetaData, + Word16 *dir2_bands ) +{ + Word16 i, b; + + FOR( i = hQMetaData->q_direction[1].cfg.start_band; i < hQMetaData->q_direction[1].cfg.nbands; i++ ) + { + IF( LT_16( hQMetaData->q_direction[0].band_data[dir2_bands[i]].energy_ratio_index[0], 7 ) ) { - update_needed = 1; - changed = 0; - for ( j = len_stream - 1; j > 6; j-- ) + /* transform azimuth */ + FOR( b = 0; b < hQMetaData->q_direction[1].cfg.nblocks; b++ ) { - if ( q_idx[j] >= 2 ) - { + Word64 azimuth; + azimuth = W_add( W_deposit32_l( L_sub( hQMetaData->q_direction[1].band_data[i].azimuth_fx[b], hQMetaData->q_direction[0].band_data[dir2_bands[i]].azimuth_fx[b] ) ), DEGREE_180_Q_22 ); - if ( j > i_min ) - { - changed = 1; - nb_GR_min -= ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR2 ); - q_idx[j] -= 2; - nb_GR_min += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR2 ); - } - else - { - changed = 1; - nb_GR_min -= ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR1 ); - q_idx[j] -= 2; - nb_GR_min += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, 0 ); - } + IF( GE_64( azimuth, DEGREE_180_Q_22 ) ) + { + azimuth = W_sub( azimuth, DEGREE_360_Q_22 ); } - else if ( q_idx[j] == 1 ) + IF( LT_64( azimuth, -DEGREE_180_Q_22 ) ) { - if ( j > i_min ) - { - changed = 1; - nb_GR_min -= ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR2 ); - q_idx[j] -= 1; - - nb_GR_min += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR2 ); - } - else - { - changed = 1; - nb_GR_min -= ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, GR1 ); - q_idx[j] -= 1; - nb_GR_min += ivas_qmetadata_encode_extended_gr_length( q_idx[j], 100, 0 ); - } + azimuth = W_add( azimuth, DEGREE_360_Q_22 ); } - if ( nb_GR_min < max_bits ) + IF( GE_64( azimuth, DEGREE_180_Q_22 ) ) { - break; + azimuth = W_sub( azimuth, DEGREE_360_Q_22 ); + } + IF( LT_64( azimuth, -DEGREE_180_Q_22 ) ) + { + azimuth = W_add( azimuth, DEGREE_360_Q_22 ); } - } - } - - if ( update_needed == 1 ) - { - /* re-calculate */ - /* find optimum length of the part encoded with GR2 */ - nb_GR_min = find_optimal_GR_orders( &q_idx[1], len_stream - 1, 15, &GR1, &GR2, &i_min ); - } - - if ( len_stream >= 8 ) - { - /* write number of indexes encoded with GR2 on 4 bits */ - push_next_indice( hMetaData, i_min, 4 ); - nb_bits += 4; - /* write GR orders */ - push_next_indice( hMetaData, GR1 - 1, 1 ); - nb_bits += 1; - if ( GR1 == 2 ) - { - push_next_indice( hMetaData, GR2, 1 ); - nb_bits += 1; - } - - /* write GR data */ - for ( i = 1; i <= i_min; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_idx[i], 100, GR1 ); - } - for ( i = i_min + 1; i < len_stream; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_idx[i], 100, GR2 ); - } - } - else - { - /* len_stream <= 8 */ - /* write GR order */ - push_next_indice( hMetaData, GR1, 1 ); - nb_bits += 1; - for ( i = 1; i < len_stream; i++ ) - { - ivas_qmetadata_encode_extended_gr( hMetaData, q_idx[i], 100, GR1 ); + hQMetaData->q_direction[1].band_data[i].azimuth_fx[b] = W_extract_l( azimuth ); + move32(); } } - - nb_bits += nb_GR_min; - - assert( nb_bits == ( hMetaData->nb_bits_tot - bits_pos ) ); } - return nb_bits; + return; } -#else static Word16 divide_GR_orders_fx( const Word16 *q_idx, const Word16 GR1, @@ -11925,192 +6522,12 @@ static Word16 write_stream_dct_coeffs_omasa_fx( return nb_bits; } -#endif /*------------------------------------------------------------------------- * ivas_omasa_encode_masa_to_total() * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_encode_masa_to_total( - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - BSTR_ENC_HANDLE hMetaData, - const int16_t low_bitrate_mode, - const int16_t nbands, - const int16_t nblocks ) -{ - int16_t i, j, k; - float data[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - float q_dct_data[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - float step = STEP_M2T; - int16_t q_idx[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - float dct_data_tmp[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - float dct_data[MAX_PARAM_SPATIAL_SUBFRAMES * MASA_FREQUENCY_BANDS]; - int16_t bits_pos, nb_bits; - int16_t n_streams, len_stream; - int32_t int_tmp; - - bits_pos = hMetaData->nb_bits_tot; - k = 0; - for ( i = 0; i < nbands; i++ ) - { - for ( j = 0; j < nblocks; j++ ) - { - data[k] = masa_to_total_energy_ratio[j][i]; - k++; - } - } - - /* DCT2 transform */ - n_streams = 1; - len_stream = nbands * nblocks; - switch ( len_stream ) - { - case 4: - matrix_product( dct4, nblocks, nblocks, 0, data, 1, nblocks, 1, dct_data ); - n_streams = 1; - len_stream = 4; - break; - case 5: - matrix_product( dct5, nbands, nbands, 0, data, 1, nbands, 1, dct_data ); - n_streams = 1; - len_stream = nbands; - break; - case 8: - matrix_product( dct8, nbands, nbands, 0, data, 1, nbands, 1, dct_data ); - n_streams = 1; - len_stream = nbands; - break; - case 12: - matrix_product( dct12, nbands, nbands, 0, data, 1, nbands, 1, dct_data ); - n_streams = 1; - len_stream = nbands; - break; - case 20: - matrix_product( dct5, nbands, nbands, 0, data, nblocks, nbands, 1, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 1, dct_data ); - n_streams = 1; - len_stream = nbands * nblocks; - break; - case 32: - matrix_product( dct8, nbands, nbands, 0, data, nblocks, nbands, 1, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 1, dct_data ); - n_streams = nblocks; - len_stream = nbands; - break; - default: - printf( "Incorrect number of coefficients for OMASA.\n" ); - break; - } - - for ( k = 0; k < n_streams; k++ ) - { - j = k * len_stream; - /* quantize with fixed common step */ - q_idx[j] = (int16_t) rintf( dct_data[j] / step ); - - if ( q_idx[j] > ( ( 1 << BITS_MASA2TOTTAL_DCT0 ) - 1 ) ) /* limit DCT0 to BITS_MASA2TOTTAL_DCT0 bit representation */ - { - q_idx[j] = ( ( 1 << BITS_MASA2TOTTAL_DCT0 ) - 1 ); - } - - q_dct_data[j] = step * q_idx[j]; - - if ( q_idx[j] == 0 ) - { - set_s( &q_idx[j], 0, len_stream ); - set_zero( &q_dct_data[j], len_stream ); - } - else - { - for ( i = 1; i < len_stream; i++ ) - { - q_idx[j + i] = (int16_t) rintf( dct_data[j + i] / step ); - q_dct_data[j + i] = step * q_idx[j + i]; - if ( q_idx[j + i] <= 0 ) - { - q_idx[j + i] = -2 * q_idx[j + i]; - } - else - { - q_idx[j + i] = 2 * q_idx[j + i] - 1; - } - } - } - } - - /* write data */ - nb_bits = 0; - for ( i = 0; i < n_streams; i++ ) - { - nb_bits += write_stream_dct_coeffs_omasa( &q_idx[i * len_stream], len_stream, hMetaData, ( i == 0 ), low_bitrate_mode ); - } - - /* reconstruct masa2total */ - q_dct_data[0] = q_idx[0] * step; - for ( i = 1; i < len_stream; i++ ) - { - if ( ( q_idx[i] % 2 ) == 0 ) - { - q_dct_data[i] = -( q_idx[i] >> 1 ) * step; - } - else - { - q_dct_data[i] = ( ( q_idx[i] + 1 ) >> 1 ) * step; - } - } - - /* inverse DCT2 transform */ - switch ( len_stream ) - { - case 4: - matrix_product( dct4, nblocks, nblocks, 1, q_dct_data, nblocks, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nblocks ); - break; - case 5: - matrix_product( dct5, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 8: - matrix_product( dct8, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 12: - matrix_product( dct12, nbands, nbands, 1, q_dct_data, nbands, 1, 0, dct_data_tmp ); - mvr2r( dct_data_tmp, q_dct_data, nbands ); - break; - case 20: - matrix_product( dct5, nbands, nbands, 1, q_dct_data, nbands, nblocks, 0, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 0, q_dct_data ); /* reuse of variable*/ - break; - case 32: - matrix_product( dct8, nbands, nbands, 1, q_dct_data, nbands, nblocks, 0, dct_data_tmp ); - matrix_product( dct_data_tmp, nbands, nblocks, 0, dct4, nblocks, nblocks, 0, q_dct_data ); - break; - default: - printf( "Incorrect number of coefficients for OMASA.\n" ); - break; - } - - k = 0; - for ( i = 0; i < nblocks; i++ ) - { - for ( j = 0; j < nbands; j++ ) - { - masa_to_total_energy_ratio[i][j] = max( 0.0f, q_dct_data[k] ); - masa_to_total_energy_ratio[i][j] = min( 1.0f, masa_to_total_energy_ratio[i][j] ); - int_tmp = (int32_t) ( MASA_SUR_COH_PRECISION * masa_to_total_energy_ratio[i][j] ); - masa_to_total_energy_ratio[i][j] = (float) ( int_tmp * MASA_SUR_COH_THRESHOLD ); - k++; - } - } - assert( nb_bits == ( hMetaData->nb_bits_tot - bits_pos ) ); - - - return; -} -#else void ivas_omasa_encode_masa_to_total_fx( Word32 masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* Q30 */ BSTR_ENC_HANDLE hMetaData, @@ -12334,4 +6751,3 @@ void ivas_omasa_encode_masa_to_total_fx( return; } -#endif diff --git a/lib_enc/ivas_qspherical_enc.c b/lib_enc/ivas_qspherical_enc.c index c0d065d63..f0596bab3 100644 --- a/lib_enc/ivas_qspherical_enc.c +++ b/lib_enc/ivas_qspherical_enc.c @@ -40,133 +40,23 @@ #include "ivas_stat_enc.h" #include "wmc_auto.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float quantize_theta_phi( float *theta_cb, const int16_t no_th, const int16_t *no_phi_loc, const float abs_theta, int16_t *id_phi, int16_t *id_phi_remap, float *phi_hat, const float phi, const int16_t no_bits, int16_t *id_theta, float *phi_q, const int16_t remap, const MC_LS_SETUP mc_format ); - -static float direction_distance_cp( float theta, float theta_hat, float theta_hat1, const float phi, const float phi_hat, const float phi_hat1, float *d1 ); - -#else static Word32 quantize_theta_phi_fx( Word32 *theta_cb, const Word16 no_th, const Word16 *no_phi_loc, const Word32 abs_theta, Word16 *id_phi, Word16 *id_phi_remap, Word32 *phi_hat, const Word32 phi, const Word16 no_bits, Word16 *id_theta, Word32 *phi_q, const Word16 remap, const MC_LS_SETUP mc_format ); static Word16 direction_distance_cp_fx( Word32 theta, Word32 theta_hat, Word32 theta_hat1, const Word32 phi, const Word32 phi_hat, const Word32 phi_hat1, Word16 *d1 ); -#endif /*-------------------------------------------------------------------* * quantize_direction_frame() * * *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void quantize_direction_frame( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - const int16_t hrmasa_flag /* i : flag indicating high-rate MASA MD coding*/ -) -{ - int16_t i, j; - uint16_t idx; - - /* Quantize directions */ - q_direction->not_in_2D = 0; - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - idx = q_direction->band_data[i].energy_ratio_index_mod[0]; - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - if ( azimuth_orig != NULL ) - { - azimuth_orig[i][j] = q_direction->band_data[i].azimuth[j]; - } - - if ( elevation_orig != NULL ) - { - elevation_orig[i][j] = q_direction->band_data[i].elevation[j]; - } - - /* requantize the direction */ - q_direction->band_data[i].spherical_index[j] = quantize_direction( q_direction->band_data[i].elevation[j], - q_direction->band_data[i].azimuth[j], - q_direction->band_data[i].bits_sph_idx[j], - &q_direction->band_data[i].elevation[j], - &q_direction->band_data[i].azimuth[j], &q_direction->band_data[i].elevation_index[j], - &q_direction->band_data[i].azimuth_index[j], - q_direction->cfg.mc_ls_setup ); - - q_direction->not_in_2D += q_direction->band_data[i].elevation_index[j]; - - if ( hrmasa_flag ) - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[0] - 3]; - q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[0] - 1][q_direction->band_data[i].elevation_index[j]]; - } - else - { - q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[0] - 3] * 2 - 1; - q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[0] - 1][( q_direction->band_data[i].elevation_index[j] + 1 ) >> 1]; - } - } - else - { - if ( q_direction->cfg.mc_ls_setup != MC_LS_SETUP_INVALID ) - { - q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[idx] - 3]; - q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][q_direction->band_data[i].elevation_index[j]]; - } - else - { - q_direction->band_data[i].elevation_m_alphabet[j] = no_theta_masa[bits_direction_masa[idx] - 3] * 2 - 1; - q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][( q_direction->band_data[i].elevation_index[j] + 1 ) >> 1]; - } - } - - if ( q_direction->band_data[i].azimuth_index[j] == MASA_NO_INDEX ) - { - q_direction->band_data[i].azimuth_index[j] = 0; - } - - if ( q_direction->band_data[i].bits_sph_idx[j] <= 2 ) - { - q_direction->band_data[i].elevation_index[j] = 0; - } - else - { - if ( q_direction->cfg.mc_ls_setup == MC_LS_SETUP_INVALID ) - { - /*deorder elevation indexing*/ - if ( ( q_direction->band_data[i].elevation_index[j] & 1 ) != 0 ) - { - q_direction->band_data[i].elevation_index[j] = ( ( q_direction->band_data[i].elevation_index[j] + 1 ) >> 1 ) + ( q_direction->band_data[i].elevation_m_alphabet[j] >> 1 ); - } - else - { - q_direction->band_data[i].elevation_index[j] = -( ( q_direction->band_data[i].elevation_index[j] ) >> 1 ) + ( q_direction->band_data[i].elevation_m_alphabet[j] >> 1 ); - } - } - } - } - } - - if ( q_direction->not_in_2D > 0 ) - { - q_direction->not_in_2D = 1 + MASA_LIMIT_2D; - } - - return; -} -#else void quantize_direction_frame_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ Word32 azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], /* o : Q22 */ @@ -286,7 +176,6 @@ void quantize_direction_frame_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -294,7 +183,6 @@ void quantize_direction_frame_fx( * * *----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void quantize_direction_frame2D_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ Word32 azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], // Q22 @@ -339,52 +227,12 @@ void quantize_direction_frame2D_fx( return; } -#else -void quantize_direction_frame2D( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES] ) -{ - int16_t i, j; - uint16_t idx; - /* Quantize directions */ - q_direction->not_in_2D = 0; - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - idx = q_direction->band_data[i].energy_ratio_index[0]; - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - if ( azimuth_orig != NULL ) - { - azimuth_orig[i][j] = q_direction->band_data[i].azimuth[j]; - } - if ( elevation_orig != NULL ) - { - elevation_orig[i][j] = q_direction->band_data[i].elevation[j]; - } - q_direction->band_data[i].azimuth_m_alphabet[j] = no_phi_masa[bits_direction_masa[idx] - 1][0]; - - /* requantize the direction */ - q_direction->band_data[i].spherical_index[j] = quantize_direction2D( q_direction->band_data[i].azimuth[j], - q_direction->band_data[i].azimuth_m_alphabet[j], - &q_direction->band_data[i].azimuth[j], - &q_direction->band_data[i].azimuth_index[j], - q_direction->cfg.mc_ls_setup ); - - q_direction->band_data[i].elevation_m_alphabet[j] = 1; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * small_requantize_direction_frame() * * *----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void small_requantize_direction_frame_fx( IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ Word32 azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], // Q22 @@ -408,7 +256,7 @@ void small_requantize_direction_frame_fx( } } - small_reduction_direction( q_direction, bits_dir, raw_flag, diff ); + small_reduction_direction_fx( q_direction, bits_dir, raw_flag, diff ); IF( *diff <= 0 ) { @@ -447,290 +295,12 @@ void small_requantize_direction_frame_fx( return; } -#else -void small_requantize_direction_frame( - IVAS_QDIRECTION *q_direction, /* i/o: quantized direction structure */ - float azimuth_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - float elevation_orig[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES], - const int16_t raw_flag[MASA_MAXIMUM_CODING_SUBBANDS], - int16_t bits_dir_bands[MASA_MAXIMUM_CODING_SUBBANDS], - int16_t *diff ) -{ - int16_t i, j; - uint16_t bits_dir[MASA_MAXIMUM_CODING_SUBBANDS][MAX_PARAM_SPATIAL_SUBFRAMES]; - - if ( ( *diff > 0 ) && ( q_direction->not_in_2D > 0 ) ) - { - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - bits_dir[i][j] = q_direction->band_data[i].bits_sph_idx[j]; - } - } - - small_reduction_direction( q_direction, bits_dir, raw_flag, diff ); - - if ( *diff <= 0 ) - { - for ( i = q_direction->cfg.start_band; i < q_direction->cfg.nbands; i++ ) - { - if ( raw_flag[i] == 1 ) - { - bits_dir_bands[i] = 0; - for ( j = 0; j < q_direction->cfg.nblocks; j++ ) - { - bits_dir_bands[i] += bits_dir[i][j]; - q_direction->band_data[i].bits_sph_idx[j] = bits_dir[i][j]; - - /* requantize the direction */ - q_direction->band_data[i].spherical_index[j] = quantize_direction( - elevation_orig[i][j], azimuth_orig[i][j], - q_direction->band_data[i].bits_sph_idx[j], - &q_direction->band_data[i].elevation[j], &q_direction->band_data[i].azimuth[j], - &q_direction->band_data[i].elevation_index[j], &q_direction->band_data[i].azimuth_index[j], - q_direction->cfg.mc_ls_setup ); - - if ( q_direction->band_data[i].azimuth_index[j] == MASA_NO_INDEX ) - { - q_direction->band_data[i].azimuth_index[j] = 0; - } - } - } - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * quantize_direction() * * *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: quantized spherical index */ -uint16_t quantize_direction( - const float theta, /* i : input elevation value */ - float phi, /* i : input azimuth value */ - const int16_t no_bits, /* i : number of bits */ - float *theta_q, /* o : quantized elevation */ - float *phi_q, /* o : quantized azimuth */ - uint16_t *index_theta, /* o : quantized elevation index */ - uint16_t *index_phi, /* o : quantized azimuth index */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - float abs_theta, theta_hat, phi_hat; - int16_t i, sign_th; - int16_t cum_n[500]; - int16_t id_th, id_phi; - float theta_cb[MAX_NO_THETA]; - int16_t no_th; - uint16_t idx_sph; - int16_t id_phi_remap; - - if ( no_bits == 0 ) - { - *theta_q = 0; - *phi_q = 0; - *index_theta = MASA_NO_INDEX; - *index_phi = MASA_NO_INDEX; - return 0; - } - - if ( no_bits == 1 ) - { - *theta_q = 0; - *index_theta = MASA_NO_INDEX; - if ( ( phi < -90 ) || ( phi > 90 ) ) - { - *phi_q = -180; - *index_phi = 1; - - return 1; - } - else - { - *phi_q = 0; - *index_phi = 0; - - return 0; - } - } - - if ( no_bits == 2 ) - { - *theta_q = 0; - *index_theta = MASA_NO_INDEX; - if ( mc_format != MC_LS_SETUP_INVALID ) - { - id_phi = quantize_phi_chan_lbr( phi, &phi_hat, no_phi_masa[no_bits - 1][0] ); - phi_hat += 180; - idx_sph = id_phi; - *phi_q = phi_hat - 180; - id_phi_remap = id_phi; - *index_phi = id_phi_remap; - } - else - { - id_phi = quantize_phi( phi + 180, 0, &phi_hat, no_phi_masa[no_bits - 1][0] ); - idx_sph = id_phi; - *phi_q = phi_hat - 180; - id_phi_remap = ivas_qmetadata_reorder_generic( id_phi - ( no_phi_masa[no_bits - 1][0] >> 1 ) ); - *index_phi = id_phi_remap; - } - - return idx_sph; - } - - no_th = no_theta_masa[no_bits - 3]; - - for ( i = 0; i < no_th; i++ ) - { - theta_cb[i] = i * delta_theta_masa[no_bits - 3]; - } - - if ( theta_cb[i - 1] > 90 ) - { - theta_cb[i - 1] = 90; - } - - phi = phi + 180; - - if ( theta < 0 ) - { - abs_theta = -theta; - sign_th = -1; - } - else - { - abs_theta = theta; - sign_th = 1; - } - - theta_hat = quantize_theta_phi( theta_cb, no_th, no_phi_masa[no_bits - 1], abs_theta, &id_phi, - &id_phi_remap, &phi_hat, phi, no_bits, &id_th, phi_q, 1, mc_format ); - - if ( mc_format != MC_LS_SETUP_INVALID ) - { - /* indexing only for upper hemisphere */ - cum_n[0] = no_phi_masa[no_bits - 1][0]; - for ( i = 1; i < no_th; i++ ) - { - cum_n[i] = cum_n[i - 1] + no_phi_masa[no_bits - 1][i]; - } - - if ( id_phi < MASA_NO_INDEX ) - { - if ( id_th == 0 ) - { - idx_sph = id_phi; - } - else - { - idx_sph = cum_n[id_th - 1] + id_phi; - } - } - else - { - if ( id_th == 0 ) - { - idx_sph = 0; - } - else - { - idx_sph = cum_n[id_th - 1]; - } - } - *theta_q = theta_hat; - if ( theta_hat == 90 ) - { - *phi_q = 0; - id_phi = MASA_NO_INDEX; - } - else - { - *phi_q = phi_hat - 180; - } - *index_theta = id_th; - *index_phi = id_phi_remap; - } - else - { - /* Starting from Equator, alternating positive and negative */ - cum_n[0] = no_phi_masa[no_bits - 1][0]; - for ( i = 1; i < no_th; i++ ) - { - cum_n[2 * i - 1] = cum_n[2 * i - 2] + no_phi_masa[no_bits - 1][i]; - cum_n[2 * i] = cum_n[2 * i - 1] + no_phi_masa[no_bits - 1][i]; - } - - if ( no_th > 0 ) - { - assert( abs( cum_n[2 * ( no_th - 1 )] ) < 32768 ); - } - - if ( id_th == 0 ) - { - if ( id_phi < MASA_NO_INDEX ) - { - idx_sph = id_phi; - } - else - { - idx_sph = 0; - } - } - else - { - if ( sign_th > 0 ) - { - if ( id_phi < MASA_NO_INDEX ) - { - idx_sph = cum_n[2 * id_th - 2] + id_phi; - } - else - { - idx_sph = cum_n[2 * id_th - 2]; - } - - id_th = 2 * id_th - 1; - } - else - { - if ( id_phi < MASA_NO_INDEX ) - { - idx_sph = cum_n[2 * id_th - 1] + id_phi; - } - else - { - idx_sph = cum_n[2 * id_th - 1]; - } - id_th = 2 * id_th; - } - } - - *theta_q = sign_th * theta_hat; - if ( theta_hat == 90 ) - { - *phi_q = 0; - id_phi = MASA_NO_INDEX; - } - else - { - *phi_q = phi_hat - 180; - } - - *index_theta = id_th; - *index_phi = id_phi_remap; - } - - return idx_sph; -} -#else /*! r: quantized spherical index */ UWord16 quantize_direction_fx( const Word32 theta, /* i : input elevation value, Q22 */ @@ -820,7 +390,7 @@ UWord16 quantize_direction_fx( id_phi = quantize_phi_enc_fx( L_add( phi, DEGREE_180_Q_22 ), 0, &phi_hat, no_phi_masa[no_bits - 1][0] ); idx_sph = id_phi; *phi_q = L_sub( phi_hat, DEGREE_180_Q_22 ); - id_phi_remap = ivas_qmetadata_reorder_generic( sub( id_phi, shr( no_phi_masa[no_bits - 1][0], 1 ) ) ); + id_phi_remap = ivas_qmetadata_reorder_generic_fx( sub( id_phi, shr( no_phi_masa[no_bits - 1][0], 1 ) ) ); *index_phi = id_phi_remap; move16(); move32(); @@ -999,40 +569,12 @@ move16(); return idx_sph; } -#endif /*-------------------------------------------------------------------* * direction_distance_cp() * * quantization distortion calculated on the sphere *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: distortion value */ -static float direction_distance_cp( - float theta, /* i : elevation absolute value */ - float theta_hat, /* i : quantized elevation value in absolute value */ - float theta_hat1, /* i : quantized elevation value in absolute value */ - const float phi, /* i : azimuth value */ - const float phi_hat, /* i : quantized azimuth value */ - const float phi_hat1, /* i : quantized azimuth value */ - float *d1 ) -{ - float d, ct, st, st1, st2; - - theta *= PI_OVER_180; - theta_hat *= PI_OVER_180; - theta_hat1 *= PI_OVER_180; - st = sinf( theta ); - ct = cosf( theta ); - st1 = sinf( theta_hat ); - st2 = sinf( theta_hat1 ); - - d = st * st1 + ct * ( sqrtf( 1 - st1 * st1 ) ) * cosf( ( phi - phi_hat ) * PI_OVER_180 ); - *d1 = st * st2 + ct * ( sqrtf( 1 - st2 * st2 ) ) * cosf( ( phi - phi_hat1 ) * PI_OVER_180 ); - - return d; -} -#else /*! r: distortion value */ static Word16 direction_distance_cp_fx( // Q14 Word32 theta, /* i : elevation absolute value, Q22 */ @@ -1121,143 +663,12 @@ static Word16 direction_distance_cp_fx( // Q14 return d; } -#endif /*-------------------------------------------------------------------* * quantize_theta_phi() * * joint quantization of elevation and azimuth *----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: quantized elevation value */ -static float quantize_theta_phi( - float *theta_cb, /* i : elevation codebook */ - const int16_t no_th, /* i : elevation codebook size */ - const int16_t *no_phi_loc, /* i : number of azimuth values for each elevation codeword*/ - const float abs_theta, /* i : absolute value of elevation to be quantized */ - int16_t *id_phi, /* o : azimuth index */ - int16_t *id_phi_remap, /* o : remapped azimuth index */ - float *phi_hat, /* o : quantized azimuth value */ - const float phi, /* i : input azimuth value; to be quantized */ - const int16_t no_bits, /* i : number of bits used for quantization */ - int16_t *id_theta, /* o : elevation index */ - float *phi_q, /* o : rotated quantized azimuth */ - const int16_t remap, /* i : flag for remapping */ - const MC_LS_SETUP mc_format /* i : channel format if in MC-mode */ -) -{ - float theta_hat, theta_hat1, phi_hat1; - int16_t id_th, id_th1, id_th2, id_ph, id_ph1; - float d, d1; - - id_th = (int16_t) ( abs_theta / delta_theta_masa[no_bits - 3] ); - if ( id_th >= no_th ) - { - id_th = no_th - 1; - } - theta_hat = theta_cb[id_th]; - if ( id_th < no_th - 1 ) - { - id_th += squant( abs_theta, &theta_hat, &theta_cb[id_th], 2 ); - } - - if ( no_th > 1 ) - { - if ( ( no_th < 6 ) && mc_format == MC_LS_SETUP_INVALID ) - { - if ( id_th == 0 ) - { - id_th1 = 1; - } - else if ( id_th == no_th - 1 ) - { - id_th1 = no_th - 2; - } - else - { - id_th1 = id_th - 1; - id_th2 = id_th + 1; - - if ( fabsf( abs_theta - theta_cb[id_th1] ) > fabsf( abs_theta - theta_cb[id_th2] ) ) - { - id_th1 = id_th2; - } - } - } - else - { - id_th1 = id_th; - } - - if ( no_phi_loc[id_th] > 1 ) - { - /* Note: (id_th % 2 == 1) must be equal to id_th % 2 */ - if ( mc_format != MC_LS_SETUP_INVALID ) - { - id_ph = quantize_phi_chan_compand( phi, phi_hat, no_phi_loc[id_th], ( theta_cb[id_th] > MC_MASA_THR_ELEVATION ), mc_format ); - *id_phi_remap = id_ph; - } - else - { - id_ph = quantize_phi( phi, ( id_th % 2 == 1 ), phi_hat, no_phi_loc[id_th] ); - } - } - else - { - id_ph = MASA_NO_INDEX; - *id_phi_remap = MASA_NO_INDEX; - *phi_hat = 180; - *phi_q = 0; - } - - if ( ( no_phi_loc[id_th1] > 1 ) && ( id_ph < MASA_NO_INDEX ) && ( no_th < 6 ) && ( mc_format == MC_LS_SETUP_INVALID ) ) - { - theta_hat1 = theta_cb[id_th1]; - - id_ph1 = quantize_phi( phi, ( id_th1 % 2 == 1 ), &phi_hat1, no_phi_loc[id_th1] ); - - d = direction_distance_cp( abs_theta, theta_hat, theta_hat1, phi, *phi_hat, phi_hat1, &d1 ); - - if ( d1 > d ) - { - *phi_hat = phi_hat1; - id_ph = id_ph1; - theta_hat = theta_cb[id_th1]; - id_th = id_th1; - } - } - } - else - { - if ( mc_format != MC_LS_SETUP_INVALID ) - { - id_ph = quantize_phi_chan_compand( phi, phi_hat, no_phi_loc[id_th], 0, mc_format ); - *id_phi_remap = id_ph; - } - else - { - id_ph = quantize_phi( phi, ( id_th % 2 == 1 ), phi_hat, no_phi_loc[id_th] ); - } - } - - if ( remap ) - { - if ( id_ph < MASA_NO_INDEX ) - { - *id_phi_remap = ivas_qmetadata_reorder_generic( id_ph - ( no_phi_loc[id_th] >> 1 ) ); - } - } - else - { - *id_phi_remap = id_ph; - } - - *id_phi = id_ph; - *id_theta = id_th; - - return theta_hat; -} -#else /*! r: quantized elevation value */ static Word32 quantize_theta_phi_fx( // Q22 Word32 *theta_cb, /* i : elevation codebook, Q22 */ @@ -1402,7 +813,7 @@ static Word32 quantize_theta_phi_fx( // Q22 { IF( LT_16( id_ph, MASA_NO_INDEX ) ) { - *id_phi_remap = ivas_qmetadata_reorder_generic( sub( id_ph, shr( no_phi_loc[id_th], 1 ) ) ); + *id_phi_remap = ivas_qmetadata_reorder_generic_fx( sub( id_ph, shr( no_phi_loc[id_th], 1 ) ) ); move16(); } } @@ -1419,4 +830,3 @@ static Word32 quantize_theta_phi_fx( // Q22 return theta_hat; } -#endif diff --git a/lib_enc/ivas_range_uni_enc.c b/lib_enc/ivas_range_uni_enc.c index dbf0caa24..5bb5118a1 100644 --- a/lib_enc/ivas_range_uni_enc.c +++ b/lib_enc/ivas_range_uni_enc.c @@ -63,23 +63,6 @@ static void rc_uni_enc_shift( RangeUniEncState *rc_st_enc ); * * Initalize the range encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void rc_uni_enc_init( - RangeUniEncState *rc_st_enc /* i/o: RC state handle */ -) -{ - rc_st_enc->rc_low = 0; - rc_st_enc->rc_range = 0xFFFFFFFF; - rc_st_enc->rc_cache = -1; - rc_st_enc->rc_carry = 0; - rc_st_enc->rc_carry_count = 0; - - rc_st_enc->byte_count = 0; - rc_st_enc->last_byte_bit_count = -1; - - return; -} -#else void rc_uni_enc_init( RangeUniEncState *rc_st_enc /* i/o: RC state handle */ ) @@ -102,49 +85,12 @@ void rc_uni_enc_init( return; } -#endif /*-------------------------------------------------------------------* * rc_uni_enc_encode_fast() * * Encode given cumulative frequency and frequency when total frequency is a power of 2 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void rc_uni_enc_encode_fast( - RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ - const uint16_t cum_freq, /* i : Cumulative frequency up to symbol */ - const uint16_t sym_freq, /* i : Symbol frequency */ - const uint16_t tot_shift /* i : Total frequency as a power of 2 */ -) -{ - uint32_t r, tmp; - - r = rc_st_enc->rc_range >> tot_shift; - tmp = r * cum_freq; - - rc_st_enc->rc_low += tmp; - if ( rc_st_enc->rc_low < tmp ) - { - rc_st_enc->rc_carry = 1; - } - - rc_st_enc->rc_range = r * sym_freq; - - /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ - if ( rc_st_enc->rc_range < 0x01000000 ) - { - rc_st_enc->rc_range <<= 8; - rc_uni_enc_shift( rc_st_enc ); - if ( rc_st_enc->rc_range < 0x01000000 ) - { - rc_st_enc->rc_range <<= 8; - rc_uni_enc_shift( rc_st_enc ); - } - } - - return; -} -#else void rc_uni_enc_encode_fast( RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ const UWord16 cum_freq, /* i : Cumulative frequency up to symbol */ @@ -184,7 +130,6 @@ void rc_uni_enc_encode_fast( return; } -#endif /*-------------------------------------------------------------------* @@ -192,20 +137,6 @@ void rc_uni_enc_encode_fast( * * Encode an alphabet symbol when total frequency is a power of 2 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void rc_uni_enc_encode_symbol_fastS( - RangeUniEncState *rc_st_enc, /* i/o: Encoder state */ - const uint16_t symbol, /* i : Symbol to encode */ - const uint16_t cum_freq[], /* i : Cumulative frequency up to symbol */ - const uint16_t sym_freq[], /* i : Symbol frequency */ - const uint16_t tot_shift /* i : Total frequency as a power of 2 */ -) -{ - rc_uni_enc_encode_fast( rc_st_enc, cum_freq[symbol], sym_freq[symbol], tot_shift ); - - return; -} -#else void rc_uni_enc_encode_symbol_fastS( RangeUniEncState *rc_st_enc, /* i/o: Encoder state */ const UWord16 symbol, /* i : Symbol to encode */ @@ -218,80 +149,12 @@ void rc_uni_enc_encode_symbol_fastS( return; } -#endif /*-------------------------------------------------------------------* * rc_uni_enc_finish() * * Finalize the range encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: Total number of bits produced */ -int16_t rc_uni_enc_finish( - RangeUniEncState *rc_st_enc /* i/o: RC state handle */ -) -{ - int16_t total_bit_count; - uint32_t val, mask; - int16_t bits; - - /* floor(log2(x)) = floor(log2(x >> 24)) + 24, for any x >= 2 ^ 24 */ - /* 32 - floor(log2(y)) = norm_ul_float(y) + 1 = norm_l(y >> 24) - 22 */ - bits = norm_l( rc_st_enc->rc_range >> 24 ) - 22; /* bits = 32 - floor(log2(rc_range)) */ - /* completely equivalent with norm_ul_float(rc_st_enc->rc_range) + 1, but norm_l is faster */ - - bits++; /* conservative number of bits, because the decoder only has rc_range available */ - - - mask = 0xFFFFFFFFu >> bits; - val = ( rc_st_enc->rc_low + mask ) & ~mask; - - if ( val < rc_st_enc->rc_low ) - { - rc_st_enc->rc_carry = 1; - } - - rc_st_enc->rc_low = val; - - while ( bits > 0 ) - { - rc_uni_enc_shift( rc_st_enc ); - bits -= 8; - } - - bits += 8; - - if ( rc_st_enc->rc_carry_count > 0 ) - { - /* rc_carry_count > 0, therefore the last call to rc_uni_enc_shift incremented rc_carry_count */ - if ( rc_st_enc->rc_cache >= 0 ) /* may actually be always true, but it is difficult to prove formally */ - { - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ); - } - - while ( rc_st_enc->rc_carry_count > 1 ) - { - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_carry + 0xFF ); - rc_st_enc->rc_carry_count--; - } - /* pack the last 1 to 8 bits into the MSB of the last byte, with zero padding into the LSB */ - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( ( rc_st_enc->rc_carry + 0xFF ) & ( 0xFFu << ( 8 - bits ) ) ); - rc_st_enc->last_byte_bit_count = bits; - } - else - { - /* rc_carry_count == 0, therefore the last call to rc_uni_enc_shift wrote into rc_cache */ - /* pack the last 1 to 8 bits into the MSB of the last byte, with zero padding into the LSB */ - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ) & ( 0xFFu << ( 8 - bits ) ) ); - rc_st_enc->last_byte_bit_count = bits; - } - - - total_bit_count = ( ( rc_st_enc->byte_count - 1 ) << 3 ) + rc_st_enc->last_byte_bit_count; - - return total_bit_count; -} -#else /*! r: Total number of bits produced */ Word16 rc_uni_enc_finish( RangeUniEncState *rc_st_enc /* i/o: RC state handle */ @@ -374,7 +237,6 @@ Word16 rc_uni_enc_finish( return total_bit_count; } -#endif /*-------------------------------------------------------------------* @@ -382,25 +244,6 @@ Word16 rc_uni_enc_finish( * * Get the total number of bits that would be produced by finalization *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: Total number of bits produced */ -int16_t rc_uni_enc_virtual_finish( - RangeUniEncState *rc_st_enc /* i : RC state handle */ -) -{ - - /* - byte_count bytes have already been written to the byte_buffer array - 1 byte is pending if rc_cache >= 0, consisting of rc_cache or rc_cache + 1 - the pending byte bits are computed as 8 - 8 * ((uint16_t) rc_st_enc->rc_cache >> 15) - rc_carry_count bytes are pending, consisting of 0x00 or 0xFF - bits bits will be additionally written during the finalization procedure - bits is computed as norm_l(rc_st_enc->rc_range >> 24) - 21, as in rc_uni_enc_finish - */ - return ( ( rc_st_enc->byte_count + rc_st_enc->rc_carry_count ) << 3 ) + - norm_l( rc_st_enc->rc_range >> 24 ) - 13 - 8 * ( (uint16_t) rc_st_enc->rc_cache >> 15 ); -} -#else /*! r: Total number of bits produced */ Word16 rc_uni_enc_virtual_finish( RangeUniEncState *rc_st_enc /* i : RC state handle */ @@ -432,7 +275,6 @@ Word16 rc_uni_enc_virtual_finish( return tmp; } -#endif /*-------------------------------------------------------------------* @@ -440,37 +282,6 @@ Word16 rc_uni_enc_virtual_finish( * * Shift a byte out to bitstream (internal function) *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void rc_uni_enc_shift( - RangeUniEncState *rc_st_enc /* i/o: RC state handle */ -) -{ - if ( ( rc_st_enc->rc_low < 0xFF000000u ) || rc_st_enc->rc_carry ) - { - if ( rc_st_enc->rc_cache >= 0 ) - { - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_cache + rc_st_enc->rc_carry ); - } - - while ( rc_st_enc->rc_carry_count > 0 ) - { - rc_st_enc->byte_buffer[rc_st_enc->byte_count++] = (uint8_t) ( rc_st_enc->rc_carry + 0xFF ); - rc_st_enc->rc_carry_count--; - } - - rc_st_enc->rc_cache = (int16_t) ( rc_st_enc->rc_low >> 24 ); - rc_st_enc->rc_carry = 0; - } - else - { - rc_st_enc->rc_carry_count++; - } - - rc_st_enc->rc_low <<= 8; - - return; -} -#else static void rc_uni_enc_shift( RangeUniEncState *rc_st_enc /* i/o: RC state handle */ ) @@ -512,7 +323,6 @@ static void rc_uni_enc_shift( return; } -#endif /*-------------------------------------------------------------------* @@ -520,39 +330,6 @@ static void rc_uni_enc_shift( * * Encode up to 16 bits with uniform probability *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void rc_uni_enc_encode_bits( - RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ - const uint16_t value, /* i : Value to encode */ - const int16_t bits /* i : Number of bits */ -) -{ - uint32_t tmp; - - rc_st_enc->rc_range >>= bits; - tmp = rc_st_enc->rc_range * value; - - rc_st_enc->rc_low += tmp; - if ( rc_st_enc->rc_low < tmp ) - { - rc_st_enc->rc_carry = 1; - } - - /* rc_range was shifted right by up to 16, so at most two renormalizations are needed */ - if ( rc_st_enc->rc_range < 0x01000000 ) - { - rc_st_enc->rc_range <<= 8; - rc_uni_enc_shift( rc_st_enc ); - if ( rc_st_enc->rc_range < 0x01000000 ) - { - rc_st_enc->rc_range <<= 8; - rc_uni_enc_shift( rc_st_enc ); - } - } - - return; -} -#else void rc_uni_enc_encode_bits( RangeUniEncState *rc_st_enc, /* i/o: RC state handle */ const UWord16 value, /* i : Value to encode */ @@ -589,4 +366,3 @@ void rc_uni_enc_encode_bits( return; } -#endif diff --git a/lib_enc/ivas_rom_enc.c b/lib_enc/ivas_rom_enc.c index 0a23fce18..2326c5c8c 100644 --- a/lib_enc/ivas_rom_enc.c +++ b/lib_enc/ivas_rom_enc.c @@ -43,7 +43,6 @@ /*----------------------------------------------------------------------------------* * Stereo classifiers ROM tables *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* UNCLR classifier in TD stereo: list of selected features */ const Word16 unclr_isel_td[SIZE_UNCLR_ISEL_TD] = { @@ -66,31 +65,6 @@ const Word32 unclr_coef_td[SIZE_UNCLR_ISEL_TD] = /*Q15*/ { -5875, -80055, -115720, 47164, 22570, 95476, 1290, -1332, -148091, -14371 }; -#else - -/* UNCLR classifier in TD stereo: list of selected features */ -const Word16 unclr_isel_td[SIZE_UNCLR_ISEL_TD] = -{ - E_corrLagStats0, E_ica_instTargetGain, E_sum_prod, E_tdm_es_em, E_m_corrL_corrR, E_d_corrL_corrR, E_corrEst0, E_corrLagMax, E_corrEstMax, E_corrEst_ncorr -}; - -/* UNCLR classifier in TD stereo:: mean & scale for feature normalization */ -const float unclr_mean_td[SIZE_UNCLR_ISEL_TD] = -{ - 5.074380f, 4.997180f, 6.392375f, 1.542880f, 1.060308f, 7.301348f, 0.000628f, 38.998173f, 0.001354f, 0.588078f -}; - -const float unclr_scale_td[SIZE_UNCLR_ISEL_TD] = -{ - 42.281556f, 0.960498f, 1.846462f, 2.370811f, 0.738786f, 1.301314f, 0.001185f, 20.638149f, 0.009281f, 0.348742f -}; - -/* UNCLR classifier in TD stereo: classifier parameters for logistic regression */ -const float unclr_coef_td[SIZE_UNCLR_ISEL_TD] = -{ - -0.179304f, -2.443089f, -3.531498f, 1.439316f, 0.688796f, 2.913693f, 0.039382f, -0.040637f, -4.519369f, -0.438573f -}; -#endif /* UNCLR classifier in DFT stereo: list of selected features */ const int16_t unclr_isel_dft[SIZE_UNCLR_ISEL_DFT] = @@ -99,49 +73,27 @@ const int16_t unclr_isel_dft[SIZE_UNCLR_ISEL_DFT] = }; /* UNCLR classifier in DFT stereo: mean & scale for normalization */ -#ifdef IVAS_FLOAT_FIXED const Word32 unclr_mean_dft_Q15[SIZE_UNCLR_ISEL_DFT] = { 13920, -152730, 17610, 792661, 1153203, 90241, -106132544, 9412 }; -#else -const float unclr_mean_dft[SIZE_UNCLR_ISEL_DFT] = -{ - 0.424806f, -4.660972f, 0.537442f, 24.190099f, 35.192984f, 2.753954f, -3238.908177f, 0.287240f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 unclr_scale_dft_Q15[SIZE_UNCLR_ISEL_DFT] = { 11084, 110512, 17867, 97544, 2400784, 106505, 9133285, 7412 }; -#else -const float unclr_scale_dft[SIZE_UNCLR_ISEL_DFT] = -{ - 0.338259f, 3.372571f, 0.545282f, 2.976819f, 73.266110f, 3.250287f, 278.725735f, 0.226197f -}; -#endif /* UNCLR classifier in DFT stereo: classifier parameters for logistic regression */ -#ifdef IVAS_FLOAT_FIXED const Word32 unclr_coef_dft_Q28[SIZE_UNCLR_ISEL_DFT] = { 122724664, -426667424, -93744376, -365534720, 1127074816, 406588992, -220729920, -818419200 }; -#else -const float unclr_coef_dft[SIZE_UNCLR_ISEL_DFT] = -{ - 0.457185f, -1.589460f, -0.349225f, -1.361723f, 4.198681f, 1.514662f, -0.822283f, -3.048849f -}; -#endif /* xtalk clasifier in TD stereo: list of selected features */ const int16_t xtalk_isel_td[SIZE_XTALK_ISEL_TD] = { E_d_clas, E_d_voicing, E_sum_d_LSF, E_d_lepsP_13, E_d_cor_map_sum, E_d_nchar, E_d_non_sta, E_d_sp_div, E_sum_prod, E_tdm_es_em, E_m_corrL_corrR, E_corrEst0, E_corrEst_ncorr, E_corrLagStats0, E_ica_corr_value0, E_diff_corrLM_corrRM, E_tdm_LT_es_em }; -#ifdef IVAS_FLOAT_FIXED const Word32 xtalk_mean_td[SIZE_XTALK_ISEL_TD] = /*Q15*/ { 19572, 4323, 44674958, 20928, 248554, 5077, 123099, 19205, 217973, 57391, 22648, 21, 23142, 342411, 59, 612, -71224 @@ -156,77 +108,25 @@ const Word32 xtalk_coef_td[SIZE_XTALK_ISEL_TD] = /*Q15*/ { 1841, 4353, 3322, -5411, 1061, 2716, -2453, 1046, 45199, -51474, -2431, -2245, 2194, -542, -135853, 99, 18138 }; -#else -const float xtalk_mean_td[SIZE_XTALK_ISEL_TD] = -{ - 0.597295f, 0.131934f, 1363.371521f, 0.638677f, 7.585252f, 0.154930f, 3.756674f, 0.586091f, - 6.652016f, 1.751437f, 0.691171f, 0.000635f, 0.706242f, 10.449559f, 0.001793f, 0.018677f, - -2.173592f, -}; - -const float xtalk_scale_td[SIZE_XTALK_ISEL_TD] = -{ - 1.135851f, 0.077901f, 492.796683f, 0.573300f, 5.836897f, 0.400097f, 4.251400f, 0.627058f, - 1.385744f, 1.849872f, 0.537935f, 0.001305f, 0.278421f, 63.178669f, 0.002675f, 0.657621f, - 2.104726f -}; - -const float xtalk_coef_td[SIZE_XTALK_ISEL_TD] = -{ - 0.056173f, 0.132854f, 0.101365f, -0.165130f, 0.032372f, 0.082887f, -0.074870f, 0.031933f, - 1.379376f, -1.570864f, -0.074181f, -0.068519f, 0.066952f, -0.016555f, -4.145916f, 0.003024f, - 0.553536f -}; -#endif const int16_t xtalk_isel_dft[SIZE_XTALK_ISEL_DFT] = { E_clas, E_gainILD, E_gainIPD, E_angle_rot, E_g_pred, E_d_prodL_prodR, E_sum_xcorr, E_xcorr_itd_value, E_gphat_d_itd2, E_gphat_ratio_m1_m2, E_gphat_m2_m2 }; -#ifndef IVAS_FLOAT_FIXED -const float xtalk_mean_dft[SIZE_XTALK_ISEL_DFT] = -{ - 1.852478f, 0.211747f, -3.253483f, 0.758069f, 23.766095f, 1.634010f, -3115.264805f, 0.423402f, - 14.629498f, 0.000570f, 0.011686f -}; -#endif const Word32 xtalk_mean_dft_q15[SIZE_XTALK_ISEL_DFT] = { 60702, 6939, -106610, 24840, 778767, 53543, -102081000, 13874, 479379, 19, 383 }; -#ifndef IVAS_FLOAT_FIXED -const float xtalk_scale_dft[SIZE_XTALK_ISEL_DFT] = -{ - 1.507352f, 0.159956f, 2.497517f, 0.469123f, 2.825375f, 0.932028f, 261.555949f, 0.205413f, - 35.216496f, 0.001153f, 0.025744f -}; -#else const Word32 xtalk_scale_dft_q15[SIZE_XTALK_ISEL_DFT] = { 49393, 5241, 81839, 15372, 92582, 30541, 8570665, 6731, 1153974, 38, 844 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float xtalk_coef_dft[SIZE_XTALK_ISEL_DFT] = -{ - -0.082911f, -0.057949f, 0.089754f, -0.167106f, 1.289470f, 0.054620f, 0.667244f, -0.358486f, - 0.032200f, 1.141818f, 1.824479f -}; -#else const Word32 xtalk_coef_dft_q30[SIZE_XTALK_ISEL_DFT] = { -89025008, -62222264, 96372624, -179428704, 1384557824, 58647780, 716447808, -384921408, 34574488, 1226017792, 1959019392 }; -#endif /*----------------------------------------------------------------------------------* * Stereo IC-BWE ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float icbwe_thr_TDM[7] = { -1.22828f, -1.55314f, -0.998893f, 0.856996f, 0.836244f, 0.872327f, 0.972167f }; -const float icbwe_thr_DFT[7] = { -1.19952f, -1.42293f, -1.074940f, -1.63089f, 0.889989f, 0.893530f, 0.975288f }; -const float icbwe_regressionValuesTDM[8] = { 0.104430f, 0.025943f, 0.50332f, 0.12767f, 0.80566f, 0.27640f, 0.98366f, 0.35556f }; -const float icbwe_regressionValuesDFT[8] = { 0.030371f, 0.155500f, 0.52510f, 0.10623f, 0.79167f, 0.23188f, 0.98325f, 0.00000f }; -#endif -#ifdef IVAS_FLOAT_FIXED #define FLOAT_2_FIX_Q30(a) ((Word32)(a * 1024.0 * 1024.0 * 1024.0)) #define FLOAT_2_FIX_Q31(a) ((Word32)(a * 1024.0 * 1024.0 * 1024.0 * 2.0)) /* Q30Value >> Q5 */ @@ -243,7 +143,6 @@ const Word32 icbwe_regressionValuesTDM_fx[8] = {224261712, 55712168, 1080871424, /* Q31 */ const Word32 icbwe_regressionValuesDFT_fx[8] = {65221224, 333933696, 1127643648, 228127184, 1700098432, 497958496, 2111513344, 0}; -#endif /*----------------------------------------------------------------------------------* * DFT stereo ROM tables @@ -256,19 +155,16 @@ const int16_t itd_vad_band_tbl[STEREO_DFT_ITD_VAD_BAND_NUM+1] = 69, 80, 93, 107, 126, 147, 176, 211, 254, 320 }; -#ifdef IVAS_FLOAT_FIXED const Word32 ild_q_Q25[16] = { 0, 67108864, 134217728, 201326592, 268435456, 335544320, 436207616, 536870912, 637534208, 738197504, 838860800, 1006632960, 1174405120, 1342177280, 1509949440, 1677721600 }; -#endif const int16_t ild_q[16] = { 0,2,4,6,8,10,13,16,19,22,25,30,35,40,45,50 }; /* table of values of the analysis window cross-correlation function at 32kHz (stride 8) */ -#ifdef IVAS_FLOAT_FIXED const Word32 Wn_table_fx[50] = /*Q31*/ { 2147483647, 2145959424, 2142122880, 2136402432, 2129028864, 2120167040, 2109947136, 2098477824, @@ -279,108 +175,7 @@ const Word32 Wn_table_fx[50] = /*Q31*/ 1400134400, 1376157184, 1352179840, 1328202752, 1304225408, 1280248192, 1256271104, 1232293760, 1208316416, 1184339328 }; -#else -const float Wn_table[50] = -{ - 1.0000000f, 0.9992902f, 0.9975037f, 0.9948399f, 0.9914063f, 0.9872797f, 0.9825207f, 0.9771799f, - 0.9713015f, 0.9649245f, 0.9580846f, 0.9508143f, 0.9431443f, 0.9351030f, 0.9267174f, 0.9180131f, - 0.9090145f, 0.8997447f, 0.8902261f, 0.8804801f, 0.8705271f, 0.8603868f, 0.8500779f, 0.8396186f, - 0.8290262f, 0.8183170f, 0.8075067f, 0.7966103f, 0.7856416f, 0.7746140f, 0.7635394f, 0.7524292f, - 0.7412935f, 0.7301411f, 0.7189796f, 0.7078147f, 0.6966495f, 0.6854842f, 0.6743189f, 0.6631536f, - 0.6519884f, 0.6408231f, 0.6296578f, 0.6184926f, 0.6073273f, 0.5961620f, 0.5849968f, 0.5738315f, - 0.5626662f, 0.5515010f -}; -#endif - -#ifndef IVAS_FLOAT_FIXED -const float win_ana_8k[STEREO_DFT_OVL_8k] = { - 0.1059233f, 0.1834491f, 0.2367920f, 0.2801055f, 0.3175031f, 0.3508655f, 0.3812388f, 0.4092752f, 0.4354137f, 0.4599658f, 0.4831618f, 0.5051779f, 0.5261516f, 0.5461931f, - 0.5653920f, 0.5838222f, 0.6015455f, 0.6186141f, 0.6350726f, 0.6509591f, 0.6663070f, 0.6811452f, 0.6954990f, 0.7093909f, 0.7228406f, 0.7358659f, 0.7484825f, 0.7607045f, - 0.7725446f, 0.7840144f, 0.7951242f, 0.8058834f, 0.8163005f, 0.8263834f, 0.8361392f, 0.8455743f, 0.8546946f, 0.8635057f, 0.8720126f, 0.8802198f, 0.8881316f, 0.8957518f, - 0.9030841f, 0.9101318f, 0.9168978f, 0.9233852f, 0.9295963f, 0.9355338f, 0.9411997f, 0.9465961f, 0.9517249f, 0.9565878f, 0.9611865f, 0.9655225f, 0.9695970f, 0.9734113f, - 0.9769666f, 0.9802639f, 0.9833041f, 0.9860882f, 0.9886168f, 0.9908907f, 0.9929104f, 0.9946765f, 0.9961895f, 0.9974497f, 0.9984575f, 0.9992131f, 0.9997167f, 0.9999685f -}; - -const float win_ana_12k8[STEREO_DFT_OVL_12k8] = { - 0.0837402f, 0.1450376f, 0.1872304f, 0.2215122f, 0.2511383f, 0.2775984f, 0.3017218f, 0.3240268f, 0.3448624f, 0.3644768f, 0.3830541f, 0.4007353f, 0.4176308f, 0.4338293f, - 0.4494032f, 0.4644124f, 0.4789072f, 0.4929302f, 0.5065180f, 0.5197022f, 0.5325102f, 0.5449661f, 0.5570911f, 0.5689042f, 0.5804221f, 0.5916599f, 0.6026310f, 0.6133477f, - 0.6238210f, 0.6340610f, 0.6440769f, 0.6538770f, 0.6634690f, 0.6728599f, 0.6820563f, 0.6910641f, 0.6998889f, 0.7085358f, 0.7170096f, 0.7253147f, 0.7334552f, 0.7414351f, - 0.7492578f, 0.7569267f, 0.7644450f, 0.7718156f, 0.7790413f, 0.7861246f, 0.7930681f, 0.7998740f, 0.8065444f, 0.8130814f, 0.8194870f, 0.8257629f, 0.8319109f, 0.8379325f, - 0.8438293f, 0.8496028f, 0.8552543f, 0.8607852f, 0.8661966f, 0.8714897f, 0.8766657f, 0.8817256f, 0.8866704f, 0.8915011f, 0.8962185f, 0.9008235f, 0.9053169f, 0.9096996f, - 0.9139721f, 0.9181354f, 0.9221899f, 0.9261364f, 0.9299754f, 0.9337076f, 0.9373334f, 0.9408535f, 0.9442682f, 0.9475780f, 0.9507835f, 0.9538850f, 0.9568830f, 0.9597777f, - 0.9625697f, 0.9652591f, 0.9678465f, 0.9703319f, 0.9727159f, 0.9749986f, 0.9771802f, 0.9792612f, 0.9812416f, 0.9831216f, 0.9849016f, 0.9865817f, 0.9881621f, 0.9896429f, - 0.9910243f, 0.9923065f, 0.9934895f, 0.9945735f, 0.9955587f, 0.9964450f, 0.9972326f, 0.9979216f, 0.9985121f, 0.9990040f, 0.9993975f, 0.9996926f, 0.9998894f, 0.9999877f -}; - -const float win_ana_16k[STEREO_DFT_OVL_16k] = { - 0.0748996f, 0.1297273f, 0.1674702f, 0.1981409f, 0.2246518f, 0.2483359f, 0.2699355f, 0.2899147f, 0.3085859f, 0.3261718f, 0.3428373f, 0.3587088f, 0.3738855f, 0.3884471f, - 0.4024586f, 0.4159739f, 0.4290383f, 0.4416903f, 0.4539628f, 0.4658842f, 0.4774796f, 0.4887705f, 0.4997764f, 0.5105143f, 0.5209995f, 0.5312456f, 0.5412649f, 0.5510687f, - 0.5606670f, 0.5700690f, 0.5792832f, 0.5883171f, 0.5971780f, 0.6058722f, 0.6144058f, 0.6227843f, 0.6310130f, 0.6390964f, 0.6470392f, 0.6548454f, 0.6625189f, 0.6700633f, - 0.6774820f, 0.6847781f, 0.6919547f, 0.6990145f, 0.7059601f, 0.7127940f, 0.7195186f, 0.7261361f, 0.7326485f, 0.7390578f, 0.7453658f, 0.7515744f, 0.7576852f, 0.7636998f, - 0.7696197f, 0.7754464f, 0.7811811f, 0.7868252f, 0.7923800f, 0.7978465f, 0.8032260f, 0.8085194f, 0.8137279f, 0.8188523f, 0.8238936f, 0.8288528f, 0.8337305f, 0.8385278f, - 0.8432452f, 0.8478836f, 0.8524437f, 0.8569262f, 0.8613317f, 0.8656608f, 0.8699141f, 0.8740923f, 0.8781958f, 0.8822253f, 0.8861811f, 0.8900638f, 0.8938739f, 0.8976117f, - 0.9012778f, 0.9048726f, 0.9083963f, 0.9118496f, 0.9152326f, 0.9185457f, 0.9217893f, 0.9249638f, 0.9280693f, 0.9311063f, 0.9340749f, 0.9369756f, 0.9398085f, 0.9425739f, - 0.9452721f, 0.9479033f, 0.9504677f, 0.9529655f, 0.9553969f, 0.9577622f, 0.9600615f, 0.9622951f, 0.9644630f, 0.9665655f, 0.9686028f, 0.9705749f, 0.9724820f, 0.9743244f, - 0.9761020f, 0.9778151f, 0.9794637f, 0.9810480f, 0.9825681f, 0.9840241f, 0.9854162f, 0.9867443f, 0.9880086f, 0.9892091f, 0.9903460f, 0.9914194f, 0.9924292f, 0.9933757f, - 0.9942587f, 0.9950785f, 0.9958349f, 0.9965282f, 0.9971583f, 0.9977253f, 0.9982292f, 0.9986700f, 0.9990478f, 0.9993626f, 0.9996144f, 0.9998033f, 0.9999292f, 0.9999921f -}; -const float win_ana_32k[STEREO_DFT_OVL_32k] = { - 0.0529622f, 0.0917327f, 0.1184251f, 0.1401203f, 0.1588781f, 0.1756418f, 0.1909367f, 0.2050914f, 0.2183273f, 0.2308022f, 0.2426331f, 0.2539096f, 0.2647024f, 0.2750681f, - 0.2850529f, 0.2946952f, 0.3040274f, 0.3130769f, 0.3218673f, 0.3304190f, 0.3387497f, 0.3468753f, 0.3548095f, 0.3625647f, 0.3701518f, 0.3775808f, 0.3848606f, 0.3919992f, - 0.3990041f, 0.4058820f, 0.4126390f, 0.4192807f, 0.4258123f, 0.4322386f, 0.4385641f, 0.4447928f, 0.4509286f, 0.4569750f, 0.4629354f, 0.4688128f, 0.4746101f, 0.4803301f, - 0.4859752f, 0.4915480f, 0.4970507f, 0.5024854f, 0.5078541f, 0.5131587f, 0.5184011f, 0.5235829f, 0.5287058f, 0.5337712f, 0.5387807f, 0.5437357f, 0.5486374f, 0.5534872f, - 0.5582862f, 0.5630356f, 0.5677365f, 0.5723899f, 0.5769968f, 0.5815583f, 0.5860751f, 0.5905483f, 0.5949786f, 0.5993669f, 0.6037139f, 0.6080204f, 0.6122871f, 0.6165148f, - 0.6207040f, 0.6248554f, 0.6289696f, 0.6330473f, 0.6370889f, 0.6410952f, 0.6450665f, 0.6490034f, 0.6529064f, 0.6567761f, 0.6606128f, 0.6644170f, 0.6681891f, 0.6719296f, - 0.6756389f, 0.6793174f, 0.6829654f, 0.6865834f, 0.6901716f, 0.6937305f, 0.6972603f, 0.7007615f, 0.7042343f, 0.7076790f, 0.7110959f, 0.7144854f, 0.7178476f, 0.7211830f, - 0.7244917f, 0.7277740f, 0.7310301f, 0.7342604f, 0.7374650f, 0.7406442f, 0.7437982f, 0.7469272f, 0.7500315f, 0.7531112f, 0.7561666f, 0.7591979f, 0.7622051f, 0.7651886f, - 0.7681486f, 0.7710851f, 0.7739984f, 0.7768886f, 0.7797560f, 0.7826006f, 0.7854226f, 0.7882223f, 0.7909996f, 0.7937548f, 0.7964881f, 0.7991995f, 0.8018892f, 0.8045574f, - 0.8072041f, 0.8098295f, 0.8124337f, 0.8150168f, 0.8175790f, 0.8201204f, 0.8226411f, 0.8251411f, 0.8276207f, 0.8300798f, 0.8325187f, 0.8349374f, 0.8373360f, 0.8397146f, - 0.8420733f, 0.8444122f, 0.8467314f, 0.8490310f, 0.8513110f, 0.8535716f, 0.8558128f, 0.8580348f, 0.8602375f, 0.8624211f, 0.8645856f, 0.8667312f, 0.8688579f, 0.8709657f, - 0.8730548f, 0.8751252f, 0.8771769f, 0.8792101f, 0.8812248f, 0.8832211f, 0.8851990f, 0.8871586f, 0.8891000f, 0.8910231f, 0.8929281f, 0.8948151f, 0.8966840f, 0.8985350f, - 0.9003680f, 0.9021832f, 0.9039805f, 0.9057601f, 0.9075220f, 0.9092663f, 0.9109928f, 0.9127019f, 0.9143934f, 0.9160674f, 0.9177239f, 0.9193631f, 0.9209849f, 0.9225894f, - 0.9241766f, 0.9257466f, 0.9272994f, 0.9288350f, 0.9303534f, 0.9318548f, 0.9333392f, 0.9348065f, 0.9362568f, 0.9376902f, 0.9391066f, 0.9405062f, 0.9418889f, 0.9432548f, - 0.9446039f, 0.9459362f, 0.9472518f, 0.9485506f, 0.9498328f, 0.9510983f, 0.9523472f, 0.9535795f, 0.9547953f, 0.9559944f, 0.9571771f, 0.9583432f, 0.9594929f, 0.9606261f, - 0.9617429f, 0.9628432f, 0.9639272f, 0.9649948f, 0.9660460f, 0.9670810f, 0.9680996f, 0.9691019f, 0.9700880f, 0.9710578f, 0.9720113f, 0.9729487f, 0.9738699f, 0.9747748f, - 0.9756637f, 0.9765363f, 0.9773929f, 0.9782333f, 0.9790576f, 0.9798658f, 0.9806580f, 0.9814341f, 0.9821941f, 0.9829381f, 0.9836661f, 0.9843781f, 0.9850741f, 0.9857542f, - 0.9864182f, 0.9870663f, 0.9876985f, 0.9883147f, 0.9889149f, 0.9894993f, 0.9900678f, 0.9906203f, 0.9911570f, 0.9916778f, 0.9921827f, 0.9926718f, 0.9931450f, 0.9936024f, - 0.9940439f, 0.9944696f, 0.9948794f, 0.9952735f, 0.9956517f, 0.9960142f, 0.9963608f, 0.9966916f, 0.9970067f, 0.9973060f, 0.9975895f, 0.9978572f, 0.9981091f, 0.9983453f, - 0.9985657f, 0.9987704f, 0.9989593f, 0.9991324f, 0.9992898f, 0.9994315f, 0.9995574f, 0.9996676f, 0.9997620f, 0.9998407f, 0.9999036f, 0.9999508f, 0.9999823f, 0.9999980f -}; - -const float win_ana_48k[STEREO_DFT_OVL_MAX] = { - 0.0432434f, 0.0748996f, 0.0966946f, 0.1144098f, 0.1297273f, 0.1434172f, 0.1559088f, 0.1674702f, 0.1782823f, 0.1884740f, 0.1981409f, 0.2073563f, 0.2161779f, 0.2246518f, - 0.2328160f, 0.2407019f, 0.2483359f, 0.2557404f, 0.2629347f, 0.2699355f, 0.2767575f, 0.2834135f, 0.2899147f, 0.2962713f, 0.3024923f, 0.3085859f, 0.3145594f, 0.3204193f, - 0.3261718f, 0.3318223f, 0.3373759f, 0.3428373f, 0.3482106f, 0.3534999f, 0.3587088f, 0.3638406f, 0.3688985f, 0.3738855f, 0.3788042f, 0.3836573f, 0.3884471f, 0.3931758f, - 0.3978457f, 0.4024586f, 0.4070164f, 0.4115210f, 0.4159739f, 0.4203768f, 0.4247311f, 0.4290383f, 0.4332998f, 0.4375167f, 0.4416903f, 0.4458218f, 0.4499123f, 0.4539628f, - 0.4579743f, 0.4619478f, 0.4658842f, 0.4697845f, 0.4736493f, 0.4774796f, 0.4812760f, 0.4850395f, 0.4887705f, 0.4924700f, 0.4961384f, 0.4997764f, 0.5033847f, 0.5069638f, - 0.5105143f, 0.5140367f, 0.5175316f, 0.5209995f, 0.5244408f, 0.5278560f, 0.5312456f, 0.5346100f, 0.5379496f, 0.5412649f, 0.5445563f, 0.5478241f, 0.5510687f, 0.5542905f, - 0.5574898f, 0.5606670f, 0.5638224f, 0.5669563f, 0.5700690f, 0.5731609f, 0.5762322f, 0.5792832f, 0.5823142f, 0.5853254f, 0.5883171f, 0.5912897f, 0.5942432f, 0.5971780f, - 0.6000943f, 0.6029923f, 0.6058722f, 0.6087343f, 0.6115788f, 0.6144058f, 0.6172156f, 0.6200084f, 0.6227843f, 0.6255436f, 0.6282864f, 0.6310130f, 0.6337234f, 0.6364178f, - 0.6390964f, 0.6417595f, 0.6444070f, 0.6470392f, 0.6496563f, 0.6522583f, 0.6548454f, 0.6574178f, 0.6599756f, 0.6625189f, 0.6650479f, 0.6675626f, 0.6700633f, 0.6725500f, - 0.6750229f, 0.6774820f, 0.6799275f, 0.6823595f, 0.6847781f, 0.6871835f, 0.6895756f, 0.6919547f, 0.6943208f, 0.6966740f, 0.6990145f, 0.7013422f, 0.7036574f, 0.7059601f, - 0.7082504f, 0.7105283f, 0.7127940f, 0.7150476f, 0.7172891f, 0.7195186f, 0.7217363f, 0.7239420f, 0.7261361f, 0.7283185f, 0.7304892f, 0.7326485f, 0.7347963f, 0.7369327f, - 0.7390578f, 0.7411716f, 0.7432743f, 0.7453658f, 0.7474463f, 0.7495159f, 0.7515744f, 0.7536222f, 0.7556591f, 0.7576852f, 0.7597007f, 0.7617056f, 0.7636998f, 0.7656836f, - 0.7676569f, 0.7696197f, 0.7715723f, 0.7735144f, 0.7754464f, 0.7773681f, 0.7792797f, 0.7811811f, 0.7830725f, 0.7849539f, 0.7868252f, 0.7886867f, 0.7905383f, 0.7923800f, - 0.7942119f, 0.7960341f, 0.7978465f, 0.7996493f, 0.8014424f, 0.8032260f, 0.8050000f, 0.8067644f, 0.8085194f, 0.8102650f, 0.8120011f, 0.8137279f, 0.8154453f, 0.8171534f, - 0.8188523f, 0.8205419f, 0.8222224f, 0.8238936f, 0.8255558f, 0.8272088f, 0.8288528f, 0.8304877f, 0.8321136f, 0.8337305f, 0.8353385f, 0.8369376f, 0.8385278f, 0.8401091f, - 0.8416815f, 0.8432452f, 0.8448001f, 0.8463462f, 0.8478836f, 0.8494123f, 0.8509324f, 0.8524437f, 0.8539465f, 0.8554406f, 0.8569262f, 0.8584032f, 0.8598717f, 0.8613317f, - 0.8627832f, 0.8642262f, 0.8656608f, 0.8670870f, 0.8685047f, 0.8699141f, 0.8713152f, 0.8727079f, 0.8740923f, 0.8754684f, 0.8768363f, 0.8781958f, 0.8795472f, 0.8808903f, - 0.8822253f, 0.8835520f, 0.8848706f, 0.8861811f, 0.8874834f, 0.8887777f, 0.8900638f, 0.8913419f, 0.8926119f, 0.8938739f, 0.8951278f, 0.8963738f, 0.8976117f, 0.8988417f, - 0.9000637f, 0.9012778f, 0.9024840f, 0.9036822f, 0.9048726f, 0.9060550f, 0.9072296f, 0.9083963f, 0.9095552f, 0.9107063f, 0.9118496f, 0.9129850f, 0.9141127f, 0.9152326f, - 0.9163447f, 0.9174491f, 0.9185457f, 0.9196346f, 0.9207158f, 0.9217893f, 0.9228551f, 0.9239133f, 0.9249638f, 0.9260066f, 0.9270418f, 0.9280693f, 0.9290892f, 0.9301015f, - 0.9311063f, 0.9321034f, 0.9330930f, 0.9340749f, 0.9350494f, 0.9360163f, 0.9369756f, 0.9379274f, 0.9388717f, 0.9398085f, 0.9407378f, 0.9416596f, 0.9425739f, 0.9434808f, - 0.9443802f, 0.9452721f, 0.9461566f, 0.9470337f, 0.9479033f, 0.9487655f, 0.9496203f, 0.9504677f, 0.9513076f, 0.9521402f, 0.9529655f, 0.9537833f, 0.9545938f, 0.9553969f, - 0.9561927f, 0.9569811f, 0.9577622f, 0.9585360f, 0.9593024f, 0.9600615f, 0.9608134f, 0.9615579f, 0.9622951f, 0.9630250f, 0.9637477f, 0.9644630f, 0.9651711f, 0.9658720f, - 0.9665655f, 0.9672519f, 0.9679309f, 0.9686028f, 0.9692674f, 0.9699247f, 0.9705749f, 0.9712178f, 0.9718535f, 0.9724820f, 0.9731033f, 0.9737175f, 0.9743244f, 0.9749241f, - 0.9755166f, 0.9761020f, 0.9766802f, 0.9772512f, 0.9778151f, 0.9783718f, 0.9789213f, 0.9794637f, 0.9799990f, 0.9805271f, 0.9810480f, 0.9815619f, 0.9820686f, 0.9825681f, - 0.9830606f, 0.9835459f, 0.9840241f, 0.9844953f, 0.9849593f, 0.9854162f, 0.9858660f, 0.9863087f, 0.9867443f, 0.9871728f, 0.9875942f, 0.9880086f, 0.9884158f, 0.9888160f, - 0.9892091f, 0.9895952f, 0.9899741f, 0.9903460f, 0.9907109f, 0.9910687f, 0.9914194f, 0.9917631f, 0.9920997f, 0.9924292f, 0.9927518f, 0.9930672f, 0.9933757f, 0.9936771f, - 0.9939714f, 0.9942587f, 0.9945390f, 0.9948122f, 0.9950785f, 0.9953376f, 0.9955898f, 0.9958349f, 0.9960730f, 0.9963041f, 0.9965282f, 0.9967453f, 0.9969553f, 0.9971583f, - 0.9973543f, 0.9975433f, 0.9977253f, 0.9979003f, 0.9980682f, 0.9982292f, 0.9983831f, 0.9985301f, 0.9986700f, 0.9988030f, 0.9989289f, 0.9990478f, 0.9991598f, 0.9992647f, - 0.9993626f, 0.9994536f, 0.9995375f, 0.9996144f, 0.9996844f, 0.9997473f, 0.9998033f, 0.9998523f, 0.9998942f, 0.9999292f, 0.9999572f, 0.9999781f, 0.9999921f, 0.9999991f -}; -#endif const Word16 win_ana_8k_fx[STEREO_DFT_OVL_8k] = { 3471, 6011, 7759, 9178, 10404, 11497, 12492, 13411, 14268, 15072, 15832, 16554, 17241, 17898, 18527, 19131, 19711, 20271, @@ -458,103 +253,6 @@ const Word16 win_ana_48k_fx[STEREO_DFT_OVL_MAX] = { 32699, 32705, 32710, 32715, 32720, 32724, 32729, 32733, 32737, 32740, 32744, 32747, 32750, 32753, 32755, 32758, 32760, 32762, 32763, 32765, 32766, 32767, 32767, 32767, 32767 }; -#ifndef IVAS_FLOAT_FIXED -const float win_syn_8k[STEREO_DFT_OVL_8k] = { - 0.0011884f, 0.0061737f, 0.0132770f, 0.0219768f, 0.0320069f, 0.0431939f, 0.0554104f, 0.0685561f, 0.0825479f, 0.0973143f, 0.1127919f, 0.1289238f, 0.1456574f, 0.1629441f, - 0.1807378f, 0.1989949f, 0.2176735f, 0.2367334f, 0.2561357f, 0.2758425f, 0.2958170f, 0.3160233f, 0.3364260f, 0.3569906f, 0.3776832f, 0.3984704f, 0.4193193f, 0.4401978f, - 0.4610741f, 0.4819169f, 0.5026954f, 0.5233794f, 0.5439391f, 0.5643452f, 0.5845689f, 0.6045821f, 0.6243569f, 0.6438663f, 0.6630836f, 0.6819827f, 0.7005383f, 0.7187255f, - 0.7365200f, 0.7538984f, 0.7708375f, 0.7873153f, 0.8033101f, 0.8188011f, 0.8337681f, 0.8481918f, 0.8620536f, 0.8753355f, 0.8880206f, 0.9000925f, 0.9115358f, 0.9223360f, - 0.9324792f, 0.9419526f, 0.9507440f, 0.9588425f, 0.9662377f, 0.9729202f, 0.9788816f, 0.9841143f, 0.9886119f, 0.9923686f, 0.9953796f, 0.9976412f, 0.9991505f, 0.9999056f -}; - -const float win_syn_12k8[STEREO_DFT_OVL_12k8] = { - 0.0005872f, 0.0030510f, 0.0065634f, 0.0108691f, 0.0158394f, 0.0213920f, 0.0274676f, 0.0340207f, 0.0410145f, 0.0484183f, 0.0562057f, 0.0643536f, 0.0728413f, 0.0816501f, - 0.0907629f, 0.1001639f, 0.1098384f, 0.1197723f, 0.1299525f, 0.1403665f, 0.1510023f, 0.1618484f, 0.1728935f, 0.1841270f, 0.1955383f, 0.2071173f, 0.2188540f, 0.2307386f, - 0.2427616f, 0.2549137f, 0.2671857f, 0.2795684f, 0.2920531f, 0.3046309f, 0.3172931f, 0.3300312f, 0.3428367f, 0.3557012f, 0.3686166f, 0.3815746f, 0.3945671f, 0.4075861f, - 0.4206237f, 0.4336721f, 0.4467234f, 0.4597700f, 0.4728043f, 0.4858187f, 0.4988057f, 0.5117581f, 0.5246683f, 0.5375293f, 0.5503338f, 0.5630748f, 0.5757453f, 0.5883383f, - 0.6008469f, 0.6132645f, 0.6255843f, 0.6377997f, 0.6499043f, 0.6618916f, 0.6737551f, 0.6854888f, 0.6970865f, 0.7085420f, 0.7198494f, 0.7310029f, 0.7419966f, 0.7528248f, - 0.7634821f, 0.7739629f, 0.7842618f, 0.7943737f, 0.8042932f, 0.8140155f, 0.8235355f, 0.8328484f, 0.8419495f, 0.8508342f, 0.8594981f, 0.8679368f, 0.8761460f, 0.8841216f, - 0.8918596f, 0.8993562f, 0.9066077f, 0.9136103f, 0.9203606f, 0.9268553f, 0.9330910f, 0.9390648f, 0.9447737f, 0.9502148f, 0.9553854f, 0.9602830f, 0.9649051f, 0.9692495f, - 0.9733140f, 0.9770966f, 0.9805954f, 0.9838088f, 0.9867351f, 0.9893729f, 0.9917208f, 0.9937779f, 0.9955429f, 0.9970151f, 0.9981937f, 0.9990782f, 0.9996681f, 0.9999631f -}; - -const float win_syn_16k[STEREO_DFT_OVL_16k] = { - 0.0004202f, 0.0021832f, 0.0046969f, 0.0077790f, 0.0113378f, 0.0153150f, 0.0196689f, 0.0243675f, 0.0293852f, 0.0347008f, 0.0402962f, 0.0461558f, 0.0522656f, 0.0586132f, - 0.0651874f, 0.0719777f, 0.0789748f, 0.0861695f, 0.0935536f, 0.1011193f, 0.1088590f, 0.1167656f, 0.1248324f, 0.1330527f, 0.1414203f, 0.1499291f, 0.1585732f, 0.1673468f, - 0.1762443f, 0.1852603f, 0.1943895f, 0.2036266f, 0.2129665f, 0.2224042f, 0.2319348f, 0.2415533f, 0.2512551f, 0.2610353f, 0.2708893f, 0.2808125f, 0.2908003f, 0.3008483f, - 0.3109520f, 0.3211069f, 0.3313088f, 0.3415533f, 0.3518362f, 0.3621531f, 0.3724999f, 0.3828724f, 0.3932665f, 0.4036781f, 0.4141031f, 0.4245374f, 0.4349772f, 0.4454184f, - 0.4558570f, 0.4662892f, 0.4767110f, 0.4871187f, 0.4975085f, 0.5078764f, 0.5182189f, 0.5285321f, 0.5388124f, 0.5490561f, 0.5592596f, 0.5694193f, 0.5795316f, 0.5895930f, - 0.5996000f, 0.6095492f, 0.6194370f, 0.6292602f, 0.6390153f, 0.6486990f, 0.6583081f, 0.6678392f, 0.6772892f, 0.6866548f, 0.6959330f, 0.7051206f, 0.7142146f, 0.7232119f, - 0.7321095f, 0.7409045f, 0.7495941f, 0.7581752f, 0.7666451f, 0.7750011f, 0.7832403f, 0.7913601f, 0.7993578f, 0.8072309f, 0.8149767f, 0.8225927f, 0.8300765f, 0.8374257f, - 0.8446379f, 0.8517106f, 0.8586418f, 0.8654291f, 0.8720703f, 0.8785634f, 0.8849062f, 0.8910966f, 0.8971328f, 0.9030128f, 0.9087347f, 0.9142967f, 0.9196970f, 0.9249339f, - 0.9300057f, 0.9349108f, 0.9396477f, 0.9442148f, 0.9486107f, 0.9528340f, 0.9568834f, 0.9607576f, 0.9644553f, 0.9679754f, 0.9713168f, 0.9744784f, 0.9774592f, 0.9802583f, - 0.9828748f, 0.9853079f, 0.9875568f, 0.9896207f, 0.9914991f, 0.9931914f, 0.9946969f, 0.9960153f, 0.9971462f, 0.9980891f, 0.9988438f, 0.9994100f, 0.9997876f, 0.9999764f -}; - -const float win_syn_32k[STEREO_DFT_OVL_32k] = { - 0.0001486f, 0.0007719f, 0.0016609f, 0.0027511f, 0.0040104f, 0.0054186f, 0.0069609f, 0.0086267f, 0.0104070f, 0.0122948f, 0.0142840f, 0.0163696f, 0.0185470f, 0.0208123f, - 0.0231620f, 0.0255929f, 0.0281021f, 0.0306869f, 0.0333450f, 0.0360740f, 0.0388720f, 0.0417369f, 0.0446669f, 0.0476603f, 0.0507154f, 0.0538306f, 0.0570046f, 0.0602359f, - 0.0635232f, 0.0668651f, 0.0702604f, 0.0737080f, 0.0772066f, 0.0807552f, 0.0843527f, 0.0879981f, 0.0916903f, 0.0954283f, 0.0992113f, 0.1030382f, 0.1069082f, 0.1108203f, - 0.1147737f, 0.1187676f, 0.1228011f, 0.1268733f, 0.1309836f, 0.1351311f, 0.1393150f, 0.1435345f, 0.1477890f, 0.1520777f, 0.1563998f, 0.1607546f, 0.1651415f, 0.1695597f, - 0.1740086f, 0.1784874f, 0.1829955f, 0.1875322f, 0.1920969f, 0.1966888f, 0.2013075f, 0.2059521f, 0.2106222f, 0.2153170f, 0.2200359f, 0.2247784f, 0.2295437f, 0.2343314f, - 0.2391407f, 0.2439712f, 0.2488221f, 0.2536930f, 0.2585831f, 0.2634920f, 0.2684191f, 0.2733638f, 0.2783254f, 0.2833035f, 0.2882975f, 0.2933068f, 0.2983309f, 0.3033691f, - 0.3084211f, 0.3134861f, 0.3185636f, 0.3236532f, 0.3287542f, 0.3338661f, 0.3389884f, 0.3441206f, 0.3492621f, 0.3544124f, 0.3595709f, 0.3647371f, 0.3699106f, 0.3750908f, - 0.3802771f, 0.3854691f, 0.3906662f, 0.3958679f, 0.4010738f, 0.4062832f, 0.4114958f, 0.4167109f, 0.4219282f, 0.4271470f, 0.4323670f, 0.4375875f, 0.4428081f, 0.4480284f, - 0.4532478f, 0.4584658f, 0.4636819f, 0.4688957f, 0.4741067f, 0.4793144f, 0.4845184f, 0.4897180f, 0.4949129f, 0.5001027f, 0.5052867f, 0.5104646f, 0.5156359f, 0.5208001f, - 0.5259568f, 0.5311054f, 0.5362456f, 0.5413769f, 0.5464988f, 0.5516109f, 0.5567127f, 0.5618038f, 0.5668837f, 0.5719520f, 0.5770082f, 0.5820519f, 0.5870826f, 0.5921000f, - 0.5971036f, 0.6020929f, 0.6070675f, 0.6120270f, 0.6169710f, 0.6218990f, 0.6268107f, 0.6317055f, 0.6365831f, 0.6414431f, 0.6462850f, 0.6511084f, 0.6559130f, 0.6606983f, - 0.6654639f, 0.6702094f, 0.6749345f, 0.6796386f, 0.6843215f, 0.6889827f, 0.6936218f, 0.6982385f, 0.7028324f, 0.7074030f, 0.7119500f, 0.7164731f, 0.7209718f, 0.7254458f, - 0.7298946f, 0.7343180f, 0.7387156f, 0.7430869f, 0.7474317f, 0.7517496f, 0.7560402f, 0.7603032f, 0.7645382f, 0.7687449f, 0.7729229f, 0.7770719f, 0.7811916f, 0.7852815f, - 0.7893415f, 0.7933711f, 0.7973700f, 0.8013379f, 0.8052744f, 0.8091793f, 0.8130523f, 0.8168929f, 0.8207010f, 0.8244762f, 0.8282181f, 0.8319265f, 0.8356012f, 0.8392417f, - 0.8428478f, 0.8464192f, 0.8499556f, 0.8534568f, 0.8569224f, 0.8603522f, 0.8637459f, 0.8671032f, 0.8704238f, 0.8737076f, 0.8769541f, 0.8801632f, 0.8833347f, 0.8864681f, - 0.8895634f, 0.8926202f, 0.8956384f, 0.8986176f, 0.9015576f, 0.9044582f, 0.9073192f, 0.9101403f, 0.9129213f, 0.9156620f, 0.9183622f, 0.9210216f, 0.9236401f, 0.9262174f, - 0.9287533f, 0.9312477f, 0.9337003f, 0.9361109f, 0.9384793f, 0.9408054f, 0.9430890f, 0.9453299f, 0.9475279f, 0.9496828f, 0.9517945f, 0.9538628f, 0.9558875f, 0.9578684f, - 0.9598056f, 0.9616986f, 0.9635475f, 0.9653520f, 0.9671121f, 0.9688276f, 0.9704983f, 0.9721241f, 0.9737049f, 0.9752406f, 0.9767310f, 0.9781761f, 0.9795757f, 0.9809296f, - 0.9822379f, 0.9835003f, 0.9847169f, 0.9858874f, 0.9870119f, 0.9880901f, 0.9891221f, 0.9901077f, 0.9910470f, 0.9919397f, 0.9927858f, 0.9935853f, 0.9943381f, 0.9950441f, - 0.9957033f, 0.9963157f, 0.9968811f, 0.9973995f, 0.9978710f, 0.9982954f, 0.9986728f, 0.9990030f, 0.9992861f, 0.9995221f, 0.9997109f, 0.9998525f, 0.9999469f, 0.9999941f -}; - -const float win_syn_48k[STEREO_DFT_OVL_MAX] = { - 0.0000809f, 0.0004202f, 0.0009041f, 0.0014976f, 0.0021832f, 0.0029499f, 0.0037898f, 0.0046969f, 0.0056666f, 0.0066951f, 0.0077790f, 0.0089156f, 0.0101026f, 0.0113378f, - 0.0126194f, 0.0139456f, 0.0153150f, 0.0167262f, 0.0181779f, 0.0196689f, 0.0211982f, 0.0227647f, 0.0243675f, 0.0260057f, 0.0276785f, 0.0293852f, 0.0311249f, 0.0328970f, - 0.0347008f, 0.0365356f, 0.0384010f, 0.0402962f, 0.0422208f, 0.0441741f, 0.0461558f, 0.0481652f, 0.0502020f, 0.0522656f, 0.0543556f, 0.0564716f, 0.0586132f, 0.0607800f, - 0.0629715f, 0.0651874f, 0.0674273f, 0.0696909f, 0.0719777f, 0.0742876f, 0.0766200f, 0.0789748f, 0.0813515f, 0.0837498f, 0.0861695f, 0.0886102f, 0.0910717f, 0.0935536f, - 0.0960557f, 0.0985777f, 0.1011193f, 0.1036802f, 0.1062602f, 0.1088590f, 0.1114763f, 0.1141120f, 0.1167656f, 0.1194371f, 0.1221261f, 0.1248324f, 0.1275558f, 0.1302959f, - 0.1330527f, 0.1358259f, 0.1386151f, 0.1414203f, 0.1442412f, 0.1470775f, 0.1499291f, 0.1527957f, 0.1556771f, 0.1585732f, 0.1614836f, 0.1644082f, 0.1673468f, 0.1702991f, - 0.1732650f, 0.1762443f, 0.1792367f, 0.1822421f, 0.1852603f, 0.1882911f, 0.1913342f, 0.1943895f, 0.1974568f, 0.2005359f, 0.2036266f, 0.2067287f, 0.2098421f, 0.2129665f, - 0.2161018f, 0.2192478f, 0.2224042f, 0.2255710f, 0.2287479f, 0.2319348f, 0.2351314f, 0.2383377f, 0.2415533f, 0.2447782f, 0.2480122f, 0.2512551f, 0.2545067f, 0.2577668f, - 0.2610353f, 0.2643120f, 0.2675967f, 0.2708893f, 0.2741895f, 0.2774973f, 0.2808125f, 0.2841348f, 0.2874641f, 0.2908003f, 0.2941432f, 0.2974925f, 0.3008483f, 0.3042102f, - 0.3075781f, 0.3109520f, 0.3143315f, 0.3177165f, 0.3211069f, 0.3245026f, 0.3279032f, 0.3313088f, 0.3347191f, 0.3381340f, 0.3415533f, 0.3449769f, 0.3484045f, 0.3518362f, - 0.3552716f, 0.3587106f, 0.3621531f, 0.3655989f, 0.3690479f, 0.3724999f, 0.3759547f, 0.3794123f, 0.3828724f, 0.3863349f, 0.3897997f, 0.3932665f, 0.3967353f, 0.4002059f, - 0.4036781f, 0.4071518f, 0.4106268f, 0.4141031f, 0.4175804f, 0.4210585f, 0.4245374f, 0.4280170f, 0.4314969f, 0.4349772f, 0.4384576f, 0.4419381f, 0.4454184f, 0.4488984f, - 0.4523780f, 0.4558570f, 0.4593353f, 0.4628127f, 0.4662892f, 0.4697645f, 0.4732385f, 0.4767110f, 0.4801820f, 0.4836513f, 0.4871187f, 0.4905842f, 0.4940475f, 0.4975085f, - 0.5009671f, 0.5044231f, 0.5078764f, 0.5113269f, 0.5147745f, 0.5182189f, 0.5216601f, 0.5250979f, 0.5285321f, 0.5319627f, 0.5353895f, 0.5388124f, 0.5422312f, 0.5456458f, - 0.5490561f, 0.5524619f, 0.5558631f, 0.5592596f, 0.5626512f, 0.5660378f, 0.5694193f, 0.5727955f, 0.5761663f, 0.5795316f, 0.5828913f, 0.5862451f, 0.5895930f, 0.5929349f, - 0.5962706f, 0.5996000f, 0.6029230f, 0.6062395f, 0.6095492f, 0.6128521f, 0.6161481f, 0.6194370f, 0.6227188f, 0.6259932f, 0.6292602f, 0.6325196f, 0.6357714f, 0.6390153f, - 0.6422513f, 0.6454792f, 0.6486990f, 0.6519105f, 0.6551136f, 0.6583081f, 0.6614939f, 0.6646710f, 0.6678392f, 0.6709984f, 0.6741484f, 0.6772892f, 0.6804206f, 0.6835425f, - 0.6866548f, 0.6897574f, 0.6928502f, 0.6959330f, 0.6990058f, 0.7020683f, 0.7051206f, 0.7081625f, 0.7111939f, 0.7142146f, 0.7172246f, 0.7202237f, 0.7232119f, 0.7261890f, - 0.7291549f, 0.7321095f, 0.7350527f, 0.7379845f, 0.7409045f, 0.7438129f, 0.7467095f, 0.7495941f, 0.7524666f, 0.7553270f, 0.7581752f, 0.7610110f, 0.7638343f, 0.7666451f, - 0.7694432f, 0.7722286f, 0.7750011f, 0.7777606f, 0.7805070f, 0.7832403f, 0.7859603f, 0.7886669f, 0.7913601f, 0.7940397f, 0.7967056f, 0.7993578f, 0.8019961f, 0.8046205f, - 0.8072309f, 0.8098271f, 0.8124090f, 0.8149767f, 0.8175299f, 0.8200686f, 0.8225927f, 0.8251021f, 0.8275968f, 0.8300765f, 0.8325413f, 0.8349911f, 0.8374257f, 0.8398451f, - 0.8422492f, 0.8446379f, 0.8470110f, 0.8493687f, 0.8517106f, 0.8540369f, 0.8563473f, 0.8586418f, 0.8609203f, 0.8631828f, 0.8654291f, 0.8676592f, 0.8698729f, 0.8720703f, - 0.8742512f, 0.8764156f, 0.8785634f, 0.8806944f, 0.8828087f, 0.8849062f, 0.8869867f, 0.8890502f, 0.8910966f, 0.8931259f, 0.8951380f, 0.8971328f, 0.8991103f, 0.9010703f, - 0.9030128f, 0.9049378f, 0.9068451f, 0.9087347f, 0.9106066f, 0.9124606f, 0.9142967f, 0.9161149f, 0.9179150f, 0.9196970f, 0.9214609f, 0.9232065f, 0.9249339f, 0.9266429f, - 0.9283335f, 0.9300057f, 0.9316593f, 0.9332944f, 0.9349108f, 0.9365086f, 0.9380875f, 0.9396477f, 0.9411890f, 0.9427114f, 0.9442148f, 0.9456992f, 0.9471645f, 0.9486107f, - 0.9500377f, 0.9514455f, 0.9528340f, 0.9542032f, 0.9555530f, 0.9568834f, 0.9581944f, 0.9594858f, 0.9607576f, 0.9620098f, 0.9632424f, 0.9644553f, 0.9656485f, 0.9668219f, - 0.9679754f, 0.9691091f, 0.9702229f, 0.9713168f, 0.9723907f, 0.9734446f, 0.9744784f, 0.9754922f, 0.9764858f, 0.9774592f, 0.9784125f, 0.9793456f, 0.9802583f, 0.9811508f, - 0.9820230f, 0.9828748f, 0.9837063f, 0.9845173f, 0.9853079f, 0.9860780f, 0.9868277f, 0.9875568f, 0.9882653f, 0.9889533f, 0.9896207f, 0.9902675f, 0.9908936f, 0.9914991f, - 0.9920839f, 0.9926480f, 0.9931914f, 0.9937140f, 0.9942159f, 0.9946969f, 0.9951572f, 0.9955967f, 0.9960153f, 0.9964132f, 0.9967901f, 0.9971462f, 0.9974814f, 0.9977957f, - 0.9980891f, 0.9983616f, 0.9986131f, 0.9988438f, 0.9990535f, 0.9992422f, 0.9994100f, 0.9995568f, 0.9996827f, 0.9997876f, 0.9998715f, 0.9999344f, 0.9999764f, 0.9999974f -}; - -const float win_mdct_8k[STEREO_DFT_OVL_8k] = { - 0.0112197f, 0.0336536f, 0.0560704f, 0.0784591f, 0.1008082f, 0.1231066f, 0.1453430f, 0.1675062f, 0.1895851f, 0.2115685f, 0.2334454f, 0.2552047f, 0.2768355f, 0.2983269f, - 0.3196681f, 0.3408484f, 0.3618570f, 0.3826834f, 0.4033172f, 0.4237478f, 0.4439651f, 0.4639588f, 0.4837189f, 0.5032354f, 0.5224986f, 0.5414986f, 0.5602260f, 0.5786713f, - 0.5968252f, 0.6146786f, 0.6322225f, 0.6494480f, 0.6663466f, 0.6829096f, 0.6991287f, 0.7149958f, 0.7305029f, 0.7456422f, 0.7604060f, 0.7747869f, 0.7887777f, 0.8023713f, - 0.8155609f, 0.8283398f, 0.8407016f, 0.8526402f, 0.8641494f, 0.8752234f, 0.8858568f, 0.8960441f, 0.9057802f, 0.9150603f, 0.9238795f, 0.9322336f, 0.9401183f, 0.9475296f, - 0.9544637f, 0.9609173f, 0.9668870f, 0.9723699f, 0.9773632f, 0.9818643f, 0.9858710f, 0.9893813f, 0.9923935f, 0.9949059f, 0.9969173f, 0.9984268f, 0.9994336f, 0.9999371f -}; -#endif const Word32 win_syn_8k_fx[STEREO_DFT_OVL_8k] = { 2552069, 13257920, 28512140, 47194820, 68734296, 92758192, 118992928, 147223104, 177270272, 208980864, 242218768, 276861760, 312796896, 349919776, 388131456, 427338304, 467450272, 508381120, 550047232, 592367232, 635262144, 678654848, 722469312, 766631488, 811068480, 855708672, 900481344, 945317568, 990149120, @@ -670,31 +368,14 @@ const int16_t log2_1px_table[65] = 827, 840, 853, 866, 879, 891, 904, 916, 929, 941, 953, 965, 977, 989, 1001, 1012, 1024 }; -#ifndef IVAS_FLOAT_FIXED -/* table with log2(T(2 ^ param)), where T(x) = x * (exp(0.5 / x) - exp(-0.5 / x)), for param = -2 .. 10 */ -/* the last two entries present are zero, like all values for larger param values */ -const float log2TB[ECSQ_log2TB_SIZE] = -{ - 0.858721f, 0.232908f, 0.059619f, 0.014997f, 0.003755f, 0.000939f, 0.000235f, 0.000059f, 0.000015f, 0.000004f, 0.000001f, 0.000000f, 0.000000f -}; -#else const Word32 log2TB_Q31[ECSQ_log2TB_SIZE] = { 1844089344, 500166112, 128030824, 32205812, 8063801, 2016487, 504658, 126701, 32212, 8589, 2147, 0, 0 }; -#endif -#ifndef IVAS_FLOAT_FIXED -/* precomuputed table for log_2(factorial(i)), for i in {0, .., ECSQ_SEGMENT_SIZE} */ -const float ECSQ_log2_fact[1 + ECSQ_SEGMENT_SIZE] = -{ - 0.0000000f, 0.0000000f, 1.0000000f, 2.5849625f, 4.5849625f, 6.9068906f, 9.4918531f, 12.2992080f, 15.2992080f -}; -#else const Word16 ECSQ_log2_fact_Q10[1 + ECSQ_SEGMENT_SIZE] = { 0, 0, 1024, 2647, 4695, 7072, 9719, 12594, 15666 }; -#endif const uint16_t ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT] = { { 16384, 15360, 14336, 13312, 12288, 11264, 10240, 9216, 8192, 7168, 6144, 5120, 4096, 3072, 2048, 1024, 0 }, /* un-optimized (reserved) */ @@ -759,76 +440,6 @@ const uint16_t * const ECSQ_tab_abs_lsbs[1 + 4] = /*------------------------------------------------------------------------- * Range Coder ROM tables *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/* Bit-estimation table which maps entropy directly to the bit-demand */ -const float ari_bit_estimate_s17_LC[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = -{ - { 10.0f,9.0458f,7.2721f,7.5406f,9.1926f,8.1926f,6.8401f,7.0575f,7.625f,7.0458f,7.1671f,7.2858f,7.9776f,7.3418f,7.4454f,7.5571f,0.1254f }, - { 1.1465f,5.2088f,8.6077f,10.3f,1.9756f,4.6491f,7.8301f,10.093f,3.6624f,5.4416f,8.1671f,10.0f,5.0085f,6.3135f,8.8707f,10.541f,3.9312f }, - { 1.9092f,3.0465f,4.9804f,6.5571f,3.0349f,3.0256f,4.5758f,5.9447f,4.8528f,4.4843f,5.5283f,6.625f,6.3634f,5.71f,6.5002f,7.4764f,3.2048f }, - { 2.4711f,2.8785f,4.6803f,6.4226f,2.9366f,2.7019f,4.1189f,5.6381f,4.6713f,4.1022f,5.0782f,6.3065f,6.3205f,5.6206f,6.2996f,7.3276f,3.6513f }, - { 2.3766f,3.1655f,4.6917f,6.0931f,2.9542f,3.0458f,4.3816f,5.6163f,4.2468f,4.1846f,5.4647f,6.5488f,5.415f,5.2318f,6.3779f,7.3853f,3.1189f }, - { 3.7521f,3.5344f,4.6917f,5.8003f,3.686f,3.1483f,4.0604f,5.0458f,4.8915f,4.1655f,4.8151f,5.5991f,5.9944f,5.2056f,5.6557f,6.2926f,1.8304f }, - { 3.2195f,3.1219f,4.5304f,5.9666f,3.2577f,2.7997f,3.9583f,5.2552f,4.7031f,4.0342f,4.8427f,5.8656f,6.0871f,5.3135f,5.9179f,6.7332f,2.6206f }, - { 3.885f,3.3598f,4.4922f,5.776f,3.455f,2.8288f,3.7712f,4.9474f,4.5182f,3.8151f,4.5488f,5.5654f,5.7616f,5.0458f,5.612f,6.3634f,2.5162f }, - { 0.50765f,3.4282f,7.0458f,9.6077f,3.2145f,4.4454f,7.2858f,9.415f,6.4226f,6.9339f,8.9556f,10.83f,8.6424f,8.7905f,10.3f,11.678f,7.6077f }, - { 1.0294f,2.6786f,5.6646f,7.9776f,2.822f,3.3835f,5.7905f,7.7712f,5.7568f,5.8251f,7.5081f,9.142f,7.8503f,7.7521f,8.9556f,10.3f,6.0458f }, - { 4.2961f,3.7712f,4.6781f,5.6646f,3.9099f,3.2219f,3.9666f,4.8604f,4.8326f,4.059f,4.6013f,5.367f,5.8151f,4.986f,5.415f,6.0285f,1.7544f }, - { 1.4401f,2.4264f,5.4882f,7.9125f,2.5421f,2.9039f,5.3853f,7.5081f,5.6513f,5.4226f,6.902f,8.5081f,8.0458f,7.5081f,8.4764f,9.6781f,5.9072f }, - { 1.7918f,2.472f,4.6141f,6.4226f,2.9152f,2.8921f,4.5612f,6.1296f,5.2219f,4.8941f,6.0871f,7.3853f,6.9447f,6.5324f,7.4922f,8.5737f,4.432f }, - { 4.4589f,3.9804f,4.8604f,5.7332f,4.2154f,3.5222f,4.1846f,4.9179f,5.1639f,4.3543f,4.8102f,5.4075f,5.9944f,5.1545f,5.5202f,6.0342f,1.3503f }, - { 2.0498f,2.5298f,4.2269f,5.6381f,3.231f,3.0834f,4.317f,5.4647f,5.2056f,4.8176f,5.8102f,6.8102f,6.625f,6.2451f,7.0811f,7.8503f,3.4706f }, - { 2.5596f,2.6507f,4.6939f,6.5081f,2.7826f,2.5643f,4.1735f,5.8503f,4.8376f,4.2451f,5.2619f,6.5737f,6.5821f,5.8301f,6.5571f,7.5906f,3.9152f }, - { 5.1926f,4.5243f,5.1389f,5.7954f,4.6424f,3.8579f,4.3347f,4.9366f,5.2823f,4.4301f,4.7688f,5.2619f,5.9285f,5.0313f,5.3065f,5.7146f,1.1033f }, - { 14.0f,14.0f,3.3992f,4.5675f,14.0f,14.0f,3.7227f,4.7169f,3.6152f,3.8364f,4.5365f,5.3276f,4.7688f,4.8579f,5.3927f,6.0285f,1.2545f }, - { 2.7146f,2.7628f,4.6917f,6.5243f,2.8157f,2.5748f,4.2023f,5.8503f,4.7473f,4.2121f,5.317f,6.5991f,6.4531f,5.7568f,6.5488f,7.4922f,3.3734f }, - { 4.1529f,3.6546f,4.6381f,5.7332f,3.7485f,3.0976f,3.9165f,4.8993f,4.7285f,3.9735f,4.5906f,5.4188f,5.776f,4.9666f,5.4378f,6.1052f,1.9413f }, - { 2.6446f,3.1679f,4.8351f,6.2451f,3.1553f,2.9359f,4.2351f,5.5162f,4.7521f,4.1782f,5.0693f,6.1296f,6.0811f,5.3853f,6.0056f,6.8707f,2.6125f }, - { 0.54814f,3.1243f,7.4454f,10.83f,3.0509f,4.2755f,7.8503f,10.678f,7.0693f,7.5081f,9.8301f,12.0f,10.093f,10.093f,11.678f,13.0f,9.5406f }, - { 5.5162f,4.8759f,5.4608f,6.0113f,4.9972f,4.2154f,4.6403f,5.1296f,5.6034f,4.7285f,5.0142f,5.4188f,6.1608f,5.2285f,5.4764f,5.7954f,0.84076f }, - { 2.1963f,3.432f,5.2088f,6.3634f,3.2918f,3.2048f,4.5633f,5.7239f,4.9259f,4.4113f,5.2318f,6.142f,6.0634f,5.415f,6.1862f,6.8003f,2.3481f }, - { 14.0f,14.0f,4.6826f,5.3706f,14.0f,14.0f,4.6962f,5.2653f,4.7712f,4.793f,5.2023f,5.6601f,5.5041f,5.4188f,5.7426f,6.1358f,0.56889f }, - { 4.0796f,5.2585f,7.0811f,8.0931f,3.957f,4.5385f,6.1671f,7.2318f,4.9721f,5.1327f,6.4075f,7.3561f,5.6293f,5.6034f,6.6962f,7.4922f,0.64052f }, - { 0.64768f,3.3153f,6.4301f,8.7905f,3.0969f,4.0085f,6.5654f,8.5406f,5.9179f,6.2252f,8.0931f,9.7521f,7.8707f,7.9556f,9.415f,11.0f,6.625f }, - { 1.1906f,2.6747f,5.7954f,8.2451f,2.6513f,3.0999f,5.5529f,7.6601f,5.6871f,5.4608f,6.902f,8.415f,8.0693f,7.4764f,8.4454f,9.5406f,6.0634f }, - { 3.6579f,3.8707f,5.1514f,6.1296f,3.9874f,3.5874f,4.5122f,5.3779f,5.2451f,4.5447f,5.1113f,5.7239f,6.1113f,5.3205f,5.7426f,6.2056f,1.2965f }, - { 1.7247f,2.5344f,5.1327f,7.2858f,2.6441f,2.7748f,4.8126f,6.6871f,5.1959f,4.8226f,6.1052f,7.5737f,7.2721f,6.6781f,7.5081f,8.6781f,4.9666f }, - { 1.7643f,2.2939f,5.3347f,7.7332f,2.4701f,2.6753f,5.0811f,7.2186f,5.5821f,5.1894f,6.5654f,8.142f,7.9339f,7.2451f,8.142f,9.2451f,5.5949f }, - { 1.7909f,2.8483f,5.0142f,6.8401f,2.8164f,2.8681f,4.5821f,6.2384f,4.9366f,4.5324f,5.7008f,7.0342f,6.6962f,6.0931f,6.9776f,8.0458f,4.0634f }, - { 2.2845f,2.7019f,4.3982f,5.8553f,3.0909f,2.8649f,4.183f,5.5365f,4.9749f,4.4416f,5.4454f,6.4764f,6.4226f,5.9179f,6.6962f,7.625f,3.4706f }, - { 2.673f,2.755f,4.3871f,5.8251f,3.1475f,2.8114f,4.0961f,5.3816f,4.9583f,4.3761f,5.3454f,6.3634f,6.5406f,5.8707f,6.5162f,7.2996f,2.9468f }, - { 6.2926f,5.4764f,5.9179f,6.3706f,5.625f,4.7616f,5.0841f,5.4686f,6.1113f,5.2154f,5.4301f,5.7285f,6.5737f,5.6381f,5.8151f,6.0516f,0.55615f }, - { 2.9818f,2.856f,4.5263f,6.1798f,3.0021f,2.6098f,3.9461f,5.4301f,4.6359f,4.0242f,4.9232f,6.1358f,6.2518f,5.4922f,6.1735f,7.1052f,3.3798f }, - { 3.3391f,3.0774f,4.4922f,5.9666f,3.1616f,2.6702f,3.8364f,5.2154f,4.5571f,3.8669f,4.7239f,5.8759f,6.0056f,5.2121f,5.8915f,6.8003f,3.0321f }, - { 7.5243f,6.6077f,6.4764f,6.8604f,6.7521f,5.8201f,5.7664f,6.0752f,6.7905f,5.9393f,6.0991f,6.2996f,7.1545f,6.3205f,6.4226f,6.6077f,0.30358f }, - { 2.8954f,3.5895f,5.0901f,6.2186f,3.5263f,3.3048f,4.4378f,5.4454f,4.9502f,4.3048f,5.0458f,5.8656f,6.0227f,5.2186f,5.7954f,6.4454f,1.8335f }, - { 3.7473f,3.3734f,4.5675f,5.8102f,3.5091f,2.9205f,3.885f,5.0285f,4.6736f,3.9353f,4.6381f,5.5821f,5.8604f,5.0546f,5.5779f,6.3135f,2.2905f }, - { 0.37589f,3.7869f,7.5081f,10.193f,3.4696f,5.0056f,7.9556f,10.093f,6.7521f,7.4922f,9.6077f,11.415f,9.0f,9.2996f,11.0f,12.415f,8.142f }, - { 3.3752f,3.3454f,4.6781f,5.9339f,3.3752f,2.957f,4.0737f,5.2023f,4.6871f,4.0648f,4.8528f,5.8052f,5.8863f,5.1576f,5.7473f,6.5081f,2.2343f }, - { 4.7784f,4.1592f,4.8967f,5.7008f,4.2552f,3.5061f,4.0961f,4.8301f,4.9776f,4.1608f,4.6185f,5.2219f,5.7857f,4.9046f,5.2721f,5.7712f,1.4347f }, - { 0.82118f,2.7186f,5.6871f,7.8503f,3.1181f,3.8052f,6.1174f,7.9125f,6.2789f,6.3276f,7.9556f,9.415f,8.3853f,8.1926f,9.415f,10.678f,6.1798f }, - { 0.82664f,2.7456f,6.5821f,9.6781f,2.7509f,3.6141f,6.7054f,9.2451f,6.4686f,6.5906f,8.415f,10.415f,9.4764f,9.0458f,10.093f,11.415f,7.9556f }, - { 1.2706f,2.7658f,5.6293f,8.0227f,2.6304f,3.0796f,5.4531f,7.5571f,5.2687f,5.2121f,6.902f,8.5406f,7.3853f,7.0575f,8.2996f,9.4764f,5.3525f }, - { 1.1912f,2.3382f,5.0634f,7.0f,3.0306f,3.3716f,5.4264f,7.0811f,6.0693f,5.8503f,7.2056f,8.5406f,8.142f,7.7905f,8.8301f,9.8301f,5.3853f }, - { 1.6951f,2.632f,5.2552f,7.4608f,2.5965f,2.8102f,5.0113f,6.9447f,5.0752f,4.8326f,6.3489f,7.8915f,7.0342f,6.5906f,7.6424f,8.8707f,4.4882f }, - { 2.1385f,2.6613f,4.9072f,6.9232f,2.6753f,2.643f,4.5182f,6.3347f,4.8376f,4.455f,5.7712f,7.1926f,6.7332f,6.1671f,7.0811f,8.1671f,4.0429f }, - { 1.4562f,2.3043f,4.4378f,6.1862f,3.2501f,3.278f,4.902f,6.2926f,5.71f,5.4301f,6.6513f,7.6601f,7.5906f,7.0931f,8.0227f,8.8707f,4.5344f }, - { 2.4268f,2.8553f,4.7808f,6.5821f,2.8573f,2.706f,4.3048f,5.9393f,4.6917f,4.2485f,5.3135f,6.5906f,6.3853f,5.7054f,6.4922f,7.4454f,3.3798f }, - { 2.9909f,2.8843f,4.5222f,6.1235f,3.0538f,2.6928f,4.0342f,5.5002f,4.745f,4.1894f,5.1052f,6.2653f,6.3347f,5.5991f,6.3065f,7.1174f,2.8817f }, - { 1.7899f,2.3512f,4.1374f,5.5324f,3.4047f,3.251f,4.5243f,5.6917f,5.4843f,5.1608f,6.1052f,7.0342f,7.1296f,6.6513f,7.3853f,8.1671f,3.7344f }, - { 2.3396f,3.1798f,4.8028f,6.1671f,3.2277f,2.9686f,4.1766f,5.4378f,4.8077f,4.1782f,5.0285f,6.0227f,6.2121f,5.4339f,6.0693f,6.9339f,2.9125f }, - { 3.16f,2.9944f,4.3779f,5.5447f,3.555f,3.0656f,4.0357f,5.017f,5.1358f,4.4764f,5.1576f,5.9556f,6.4001f,5.6601f,6.142f,6.7521f,2.1573f }, - { 2.0382f,2.5137f,5.0516f,7.2585f,2.5514f,2.6109f,4.6894f,6.6424f,5.0199f,4.6446f,5.9888f,7.5243f,7.0693f,6.4764f,7.3853f,8.5406f,4.5612f }, - { 3.4853f,3.2401f,4.5243f,5.7192f,3.5426f,3.0465f,4.0014f,5.0487f,4.9502f,4.2468f,4.8759f,5.7616f,6.1735f,5.415f,5.902f,6.5324f,2.0553f }, - { 0.20305f,4.2687f,9.3561f,13.0f,4.0946f,6.1483f,10.193f,13.0f,8.8301f,9.8301f,12.415f,14.0f,12.415f,12.415f,14.0f,14.0f,13.0f }, - { 14.0f,14.0f,2.6513f,4.5843f,14.0f,14.0f,3.1846f,4.8351f,2.5509f,3.135f,4.3798f,5.6871f,4.3816f,4.7077f,5.612f,6.6781f,2.4306f }, - { 3.027f,3.0035f,4.6713f,6.2585f,3.0568f,2.7054f,4.0414f,5.4922f,4.6713f,4.059f,5.0056f,6.1358f,6.1608f,5.4378f,6.0871f,6.9556f,2.842f }, - { 1.1109f,2.4828f,6.0871f,8.9556f,2.5737f,3.1838f,6.1483f,8.6077f,6.1735f,6.1174f,7.9125f,9.7521f,8.9556f,8.5737f,9.6781f,11.0f,7.2056f }, - { 2.4212f,2.5943f,4.7784f,6.7239f,2.7025f,2.5695f,4.3908f,6.1483f,4.902f,4.4416f,5.6601f,7.0f,6.8003f,6.1545f,6.9666f,7.9556f,3.7204f }, - { 0.92268f,3.07f,6.2252f,8.5737f,2.7604f,3.5365f,6.1296f,8.2186f,5.4493f,5.6337f,7.4922f,9.1926f,7.3853f,7.2721f,8.7146f,10.093f,5.6469f }, - { 1.2858f,2.9245f,5.1959f,6.8503f,2.9659f,3.2823f,5.0458f,6.4686f,5.1703f,5.0458f,6.3065f,7.6781f,6.8301f,6.5324f,7.6601f,8.7521f,4.3982f } -}; -#else const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q23 { {83886080, 75881672, 61002796, 63255136, 77113120, 68724512, 57378916, 59202600, 63963136, 59104456, 60121992, 61117720, 66920960, 61587484, 62456544, 63393548, 1051931 }, @@ -896,24 +507,15 @@ const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q {7740001, 25753026, 52220764, 71921408, 23155914, 29666312, 51418812, 68942616, 45712040, 47258900, 62849128, 77113120, 61952388, 61002796, 73103360, 84666224, 47369632 }, {10786072, 24532484, 43586368, 57464480, 24879772, 27533928, 42327240, 54262548, 43371620, 42327240, 52902756, 64408572, 57295032, 54797744, 64257576, 73417936, 36894776 }, }; -#endif /*----------------------------------------------------------------------------------* * Stereo downmix to EVS ROM tables *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4] = { 3309988, 29667578, 81733728, 158226416, 257262128, 376402368, 512713184, 662838656, 823081792, 989497088, 1157986560, 1324401920, 1484645120, 1634770560, 1771081600, 1890221568, 1989257344, 2065750016, 2117816064, 2144173568 }; -#else -const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 4] = { - 0.00154133327f, 0.0138150426f, 0.0380602330f, 0.0736799166f, 0.119797014f, 0.175276011f, 0.238750681f, 0.308658302f, 0.383277327f, 0.460770488f, - 0.539229512f, 0.616722703f, 0.691341758f, 0.761249363f, 0.824724138f, 0.880203009f, 0.926320136f, 0.961939812f, 0.986184955f, 0.998458624f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED // Q31 const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 4] = { 827816, 7442688, 20631648, 40313376, 66366540, 98630536, 136906352, 180958112, 230514208, 285269056, @@ -921,15 +523,6 @@ const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 4] = { 1115896832, 1199946752, 1283218432, 1365198592, 1445382400, 1523274368, 1598395136, 1670280960, 1738488832, 1802598528, 1862214528, 1916969472, 1966525568, 2010577280, 2048853120, 2081117056, 2107170304, 2126851968, 2140040960, 2146655872 }; -#else -const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 4] = { - 0.000385481922f, 0.00346577191f, 0.00960735977f, 0.0187723786f, 0.0309043285f, 0.0459284224f, 0.0637519881f, 0.0842651874f, 0.107341543f, 0.132838756f, - 0.160599619f, 0.190453023f, 0.222214893f, 0.255689442f, 0.290670186f, 0.326941460f, 0.364279807f, 0.402454913f, 0.441231340f, 0.480370134f, - 0.519629955f, 0.558768749f, 0.597545147f, 0.635720134f, 0.673058629f, 0.709329903f, 0.744310737f, 0.777785182f, 0.809546947f, 0.839400351f, - 0.867161214f, 0.892658472f, 0.915734828f, 0.936248004f, 0.954071581f, 0.969095647f, 0.981227636f, 0.990392625f, 0.996534228f, 0.999614537f -}; -#endif -#ifdef IVAS_FLOAT_FIXED // Q31 const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 4] = { 367944, 3309988, 9186011, 17979908, 29667578, 44216976, 61588232, 81733728, 104598264, 130119136, @@ -939,17 +532,6 @@ const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 4] = { 1634770560, 1681915904, 1727394560, 1771081600, 1812856960, 1852606720, 1890221568, 1925598592, 1958640640, 1989257344, 2017364480, 2042885504, 2065750016, 2085895424, 2103266688, 2117816064, 2129503616, 2138297728, 2144173568, 2147115776 }; -#else -const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 4] = { - 0.000171337553f, 0.00154133327f, 0.00427756971f, 0.00837254710f, 0.0138150426f, 0.0205901340f, 0.0286792554f, 0.0380602330f, 0.0487073623f, 0.0605914444f, - 0.0736799166f, 0.0879369006f, 0.103323318f, 0.119797014f, 0.137312800f, 0.155822709f, 0.175276011f, 0.195619285f, 0.216796920f, 0.238750681f, - 0.261420637f, 0.284744442f, 0.308658302f, 0.333096594f, 0.357992321f, 0.383277327f, 0.408882231f, 0.434736967f, 0.460770488f, 0.486911595f, - 0.513088524f, 0.539229512f, 0.565263212f, 0.591117799f, 0.616722703f, 0.642007649f, 0.666903436f, 0.691341758f, 0.715255499f, 0.738579512f, - 0.761249363f, 0.783203125f, 0.804380774f, 0.824724138f, 0.844177306f, 0.862687230f, 0.880203009f, 0.896676719f, 0.912063122f, 0.926320136f, - 0.939408541f, 0.951292694f, 0.961939812f, 0.971320748f, 0.979409873f, 0.986184955f, 0.991627395f, 0.995722473f, 0.998458624f, 0.999828696f -}; -#endif -#ifdef IVAS_FLOAT_FIXED // Q31 const Word32 Stereo_dmx_wnd_coef_32k_fx[L_FRAME32k] = { 5270712, 15812011, 26352928, 36893212, 47432604, 57970856, 68507712, 79042912, 89576208, 100107344, @@ -1017,75 +599,6 @@ const Word32 Stereo_dmx_wnd_coef_32k_fx[L_FRAME32k] = { 205244320, 194748592, 184248144, 173743280, 163234208, 152721728, 142205056, 131684952, 121161680, 110635488, 100107136, 89576376, 79042944, 68507608, 57970624, 47432244, 36893228, 26352814, 15811765, 5270335 }; -#else -const float Stereo_dmx_wnd_coef_32k[L_FRAME32k] = { - 0.00245436677f, 0.00736304140f, 0.0122715384f, 0.0171797406f, 0.0220875274f, 0.0269947834f, 0.0319013894f, 0.0368072242f, 0.0417121723f, 0.0466161147f, - 0.0515189394f, 0.0564205162f, 0.0613207407f, 0.0662194863f, 0.0711166263f, 0.0760120600f, 0.0809056610f, 0.0857973173f, 0.0906868950f, 0.0955742970f, - 0.100459389f, 0.105342068f, 0.110222206f, 0.115099691f, 0.119974405f, 0.124846220f, 0.129715025f, 0.134580702f, 0.139443144f, 0.144302234f, - 0.149157837f, 0.154009849f, 0.158858150f, 0.163702622f, 0.168543145f, 0.173379615f, 0.178211913f, 0.183039904f, 0.187863469f, 0.192682534f, - 0.197496951f, 0.202306598f, 0.207111374f, 0.211911172f, 0.216705844f, 0.221495330f, 0.226279438f, 0.231058136f, 0.235831216f, 0.240598634f, - 0.245360270f, 0.250115991f, 0.254865676f, 0.259609222f, 0.264346480f, 0.269077420f, 0.273801833f, 0.278519720f, 0.283230811f, 0.287935138f, - 0.292632490f, 0.297322810f, 0.302005947f, 0.306681842f, 0.311350316f, 0.316011310f, 0.320664674f, 0.325310320f, 0.329948068f, 0.334577978f, - 0.339199722f, 0.343813360f, 0.348418683f, 0.353015631f, 0.357604057f, 0.362183869f, 0.366754949f, 0.371317208f, 0.375870496f, 0.380414754f, - 0.384949833f, 0.389475614f, 0.393992066f, 0.398498982f, 0.402996302f, 0.407483906f, 0.411961704f, 0.416429579f, 0.420887381f, 0.425335079f, - 0.429772556f, 0.434199631f, 0.438616246f, 0.443022311f, 0.447417706f, 0.451802254f, 0.456176013f, 0.460538715f, 0.464890391f, 0.469230741f, - 0.473559886f, 0.477877617f, 0.482183754f, 0.486478329f, 0.490761191f, 0.495032281f, 0.499291331f, 0.503538370f, 0.507773340f, 0.511996031f, - 0.516206384f, 0.520404339f, 0.524589717f, 0.528762460f, 0.532922447f, 0.537069619f, 0.541203856f, 0.545324981f, 0.549433053f, 0.553527832f, - 0.557609320f, 0.561677337f, 0.565731823f, 0.569772661f, 0.573799849f, 0.577813148f, 0.581812501f, 0.585797846f, 0.589769125f, 0.593726158f, - 0.597668886f, 0.601597190f, 0.605511069f, 0.609410286f, 0.613294840f, 0.617164612f, 0.621019602f, 0.624859512f, 0.628684402f, 0.632494152f, - 0.636288643f, 0.640067816f, 0.643831551f, 0.647579789f, 0.651312411f, 0.655029356f, 0.658730507f, 0.662415802f, 0.666085124f, 0.669738412f, - 0.673375487f, 0.676996410f, 0.680601001f, 0.684189200f, 0.687760890f, 0.691316068f, 0.694854558f, 0.698376238f, 0.701881170f, 0.705369174f, - 0.708840191f, 0.712294042f, 0.715730846f, 0.719150305f, 0.722552538f, 0.725937307f, 0.729304552f, 0.732654333f, 0.735986352f, 0.739300668f, - 0.742597163f, 0.745875776f, 0.749136388f, 0.752379000f, 0.755603433f, 0.758809745f, 0.761997640f, 0.765167236f, 0.768318474f, 0.771451116f, - 0.774565160f, 0.777660608f, 0.780737281f, 0.783795059f, 0.786834061f, 0.789854050f, 0.792855084f, 0.795836926f, 0.798799634f, 0.801743090f, - 0.804667175f, 0.807571888f, 0.810457170f, 0.813322961f, 0.816169143f, 0.818995655f, 0.821802378f, 0.824589312f, 0.827356398f, 0.830103517f, - 0.832830667f, 0.835537791f, 0.838224769f, 0.840891480f, 0.843537927f, 0.846164107f, 0.848769844f, 0.851355195f, 0.853920043f, 0.856464267f, - 0.858987868f, 0.861490726f, 0.863972843f, 0.866434216f, 0.868874609f, 0.871294141f, 0.873692691f, 0.876070142f, 0.878426433f, 0.880761623f, - 0.883075595f, 0.885368288f, 0.887639642f, 0.889889598f, 0.892118156f, 0.894325078f, 0.896510601f, 0.898674488f, 0.900816679f, 0.902937233f, - 0.905035973f, 0.907112896f, 0.909168005f, 0.911201119f, 0.913212419f, 0.915201664f, 0.917168796f, 0.919113874f, 0.921036780f, 0.922937512f, - 0.924816012f, 0.926672220f, 0.928506076f, 0.930317640f, 0.932106674f, 0.933873355f, 0.935617447f, 0.937339008f, 0.939038038f, 0.940714359f, - 0.942368090f, 0.943999112f, 0.945607364f, 0.947192788f, 0.948755443f, 0.950295210f, 0.951812088f, 0.953306019f, 0.954777062f, 0.956224978f, - 0.957649887f, 0.959051788f, 0.960430562f, 0.961786151f, 0.963118553f, 0.964427769f, 0.965713739f, 0.966976464f, 0.968215883f, 0.969431996f, - 0.970624745f, 0.971794069f, 0.972939968f, 0.974062443f, 0.975161433f, 0.976236939f, 0.977288902f, 0.978317380f, 0.979322255f, 0.980303526f, - 0.981261134f, 0.982195139f, 0.983105481f, 0.983992159f, 0.984855056f, 0.985694289f, 0.986509740f, 0.987301409f, 0.988069296f, 0.988813400f, - 0.989533663f, 0.990230083f, 0.990902662f, 0.991551340f, 0.992176116f, 0.992776990f, 0.993353963f, 0.993906975f, 0.994436026f, 0.994941175f, - 0.995422304f, 0.995879471f, 0.996312618f, 0.996721745f, 0.997106910f, 0.997467995f, 0.997805059f, 0.998118103f, 0.998407125f, 0.998672009f, - 0.998912871f, 0.999129653f, 0.999322414f, 0.999491036f, 0.999635577f, 0.999756038f, 0.999852419f, 0.999924719f, 0.999972880f, 0.999996960f, - 0.999996960f, 0.999972880f, 0.999924719f, 0.999852419f, 0.999756038f, 0.999635577f, 0.999491036f, 0.999322355f, 0.999129653f, 0.998912871f, - 0.998672009f, 0.998407066f, 0.998118103f, 0.997805059f, 0.997467995f, 0.997106910f, 0.996721745f, 0.996312618f, 0.995879471f, 0.995422304f, - 0.994941175f, 0.994436026f, 0.993906975f, 0.993353963f, 0.992776990f, 0.992176116f, 0.991551340f, 0.990902603f, 0.990230083f, 0.989533663f, - 0.988813400f, 0.988069296f, 0.987301409f, 0.986509740f, 0.985694289f, 0.984855056f, 0.983992159f, 0.983105481f, 0.982195139f, 0.981261134f, - 0.980303526f, 0.979322195f, 0.978317380f, 0.977288902f, 0.976236939f, 0.975161433f, 0.974062383f, 0.972939968f, 0.971794069f, 0.970624685f, - 0.969431937f, 0.968215883f, 0.966976464f, 0.965713739f, 0.964427769f, 0.963118494f, 0.961786091f, 0.960430503f, 0.959051728f, 0.957649887f, - 0.956224918f, 0.954777002f, 0.953306079f, 0.951812088f, 0.950295210f, 0.948755443f, 0.947192788f, 0.945607305f, 0.943999052f, 0.942368090f, - 0.940714359f, 0.939037979f, 0.937338948f, 0.935617387f, 0.933873296f, 0.932106674f, 0.930317581f, 0.928506076f, 0.926672220f, 0.924815953f, - 0.922937512f, 0.921036780f, 0.919113815f, 0.917168736f, 0.915201545f, 0.913212359f, 0.911201119f, 0.909167886f, 0.907112896f, 0.905035913f, - 0.902937233f, 0.900816679f, 0.898674428f, 0.896510541f, 0.894325078f, 0.892118096f, 0.889889598f, 0.887639582f, 0.885368228f, 0.883075476f, - 0.880761623f, 0.878426373f, 0.876070142f, 0.873692632f, 0.871294081f, 0.868874550f, 0.866434216f, 0.863972843f, 0.861490667f, 0.858987749f, - 0.856464148f, 0.853919983f, 0.851355135f, 0.848769784f, 0.846163988f, 0.843537807f, 0.840891421f, 0.838224769f, 0.835537791f, 0.832830667f, - 0.830103517f, 0.827356339f, 0.824589312f, 0.821802318f, 0.818995535f, 0.816169024f, 0.813322842f, 0.810457170f, 0.807571888f, 0.804667115f, - 0.801743090f, 0.798799574f, 0.795836866f, 0.792855084f, 0.789854050f, 0.786834002f, 0.783794999f, 0.780737102f, 0.777660549f, 0.774565101f, - 0.771450996f, 0.768318295f, 0.765167117f, 0.761997640f, 0.758809745f, 0.755603492f, 0.752379000f, 0.749136329f, 0.745875657f, 0.742597163f, - 0.739300609f, 0.735986292f, 0.732654154f, 0.729304433f, 0.725937247f, 0.722552478f, 0.719150245f, 0.715730846f, 0.712294042f, 0.708840072f, - 0.705369234f, 0.701881170f, 0.698376238f, 0.694854438f, 0.691315889f, 0.687760890f, 0.684189141f, 0.680600941f, 0.676996291f, 0.673375309f, - 0.669738352f, 0.666085184f, 0.662415802f, 0.658730507f, 0.655029297f, 0.651312292f, 0.647579789f, 0.643831551f, 0.640067756f, 0.636288524f, - 0.632493973f, 0.628684342f, 0.624859452f, 0.621019423f, 0.617164493f, 0.613294840f, 0.609410226f, 0.605511129f, 0.601597250f, 0.597668827f, - 0.593726039f, 0.589769006f, 0.585797846f, 0.581812441f, 0.577813029f, 0.573799670f, 0.569772482f, 0.565731764f, 0.561677217f, 0.557609320f, - 0.553527832f, 0.549432993f, 0.545324862f, 0.541203856f, 0.537069559f, 0.532922387f, 0.528762341f, 0.524589539f, 0.520404279f, 0.516206324f, - 0.511995912f, 0.507773161f, 0.503538132f, 0.499291241f, 0.495032310f, 0.490761220f, 0.486478329f, 0.482183695f, 0.477877438f, 0.473559886f, - 0.469230711f, 0.464890242f, 0.460538566f, 0.456175804f, 0.451802224f, 0.447417587f, 0.443022132f, 0.438616246f, 0.434199572f, 0.429772437f, - 0.425335139f, 0.420887381f, 0.416429490f, 0.411961585f, 0.407483727f, 0.402996272f, 0.398498893f, 0.393991917f, 0.389475435f, 0.384949595f, - 0.380414665f, 0.375870585f, 0.371317238f, 0.366754919f, 0.362183779f, 0.357603908f, 0.353015631f, 0.348418653f, 0.343813270f, 0.339199573f, - 0.334577739f, 0.329948068f, 0.325310200f, 0.320664495f, 0.316011310f, 0.311350256f, 0.306681722f, 0.302006006f, 0.297322810f, 0.292632431f, - 0.287935019f, 0.283230633f, 0.278519690f, 0.273801804f, 0.269077301f, 0.264346302f, 0.259608954f, 0.254865587f, 0.250116080f, 0.245360300f, - 0.240598619f, 0.235831141f, 0.231057972f, 0.226279467f, 0.221495286f, 0.216705769f, 0.211911023f, 0.207111165f, 0.202306569f, 0.197496846f, - 0.192682371f, 0.187863261f, 0.183039844f, 0.178211793f, 0.173379675f, 0.168543145f, 0.163702562f, 0.158858031f, 0.154009670f, 0.149157837f, - 0.144302174f, 0.139443025f, 0.134580523f, 0.129714787f, 0.124846153f, 0.119974270f, 0.115099736f, 0.110222198f, 0.105341993f, 0.100459255f, - 0.0955743343f, 0.0906868801f, 0.0857972279f, 0.0809055194f, 0.0760118514f, 0.0711165965f, 0.0662193894f, 0.0613205843f, 0.0564203039f, 0.0515186638f, - 0.0466160178f, 0.0417122506f, 0.0368072391f, 0.0319013409f, 0.0269946754f, 0.0220873598f, 0.0171797480f, 0.0122714853f, 0.00736292684f, 0.00245419098f -}; -#endif -#ifdef IVAS_FLOAT_FIXED // Q31 const Word32 Stereo_dmx_wnd_coef_48k_fx[L_FRAME48k] = { 3513810, 10541394, 17568864, 24596146, 31623164, 38649844, 45676112, 52701888, 59727100, 66751676, @@ -1185,106 +698,6 @@ const Word32 Stereo_dmx_wnd_coef_48k_fx[L_FRAME48k] = { 136945664, 129931544, 122916024, 115899184, 108881112, 101861864, 94841528, 87820688, 80798400, 73775248, 66751300, 59726636, 52701336, 45675472, 38649628, 31623374, 24596266, 17568896, 10541338, 3513666 }; -#else -const float Stereo_dmx_wnd_coef_48k[L_FRAME48k] = { - 0.00163624552f, 0.00490871910f, 0.00818113983f, 0.0114534730f, 0.0147256833f, 0.0179977361f, 0.0212695971f, 0.0245412290f, 0.0278125983f, 0.0310836714f, - 0.0343544111f, 0.0376247801f, 0.0408947468f, 0.0441642813f, 0.0474333353f, 0.0507018827f, 0.0539698936f, 0.0572373196f, 0.0605041310f, 0.0637703016f, - 0.0670357868f, 0.0703005567f, 0.0735645667f, 0.0768277943f, 0.0800902024f, 0.0833517388f, 0.0866123885f, 0.0898721218f, 0.0931308791f, 0.0963886455f, - 0.0996453837f, 0.102901049f, 0.106155604f, 0.109409027f, 0.112661287f, 0.115912341f, 0.119162142f, 0.122410677f, 0.125657901f, 0.128903762f, - 0.132148281f, 0.135391355f, 0.138632968f, 0.141873136f, 0.145111740f, 0.148348823f, 0.151584297f, 0.154818162f, 0.158050373f, 0.161280856f, - 0.164509654f, 0.167736664f, 0.170961902f, 0.174185291f, 0.177406818f, 0.180626437f, 0.183844119f, 0.187059864f, 0.190273583f, 0.193485275f, - 0.196694881f, 0.199902371f, 0.203107744f, 0.206310928f, 0.209511906f, 0.212710649f, 0.215907112f, 0.219101235f, 0.222293034f, 0.225482464f, - 0.228669465f, 0.231854036f, 0.235036105f, 0.238215655f, 0.241392657f, 0.244567066f, 0.247738868f, 0.250908017f, 0.254074484f, 0.257238209f, - 0.260399193f, 0.263557374f, 0.266712755f, 0.269865274f, 0.273014903f, 0.276161611f, 0.279305339f, 0.282446116f, 0.285583824f, 0.288718522f, - 0.291850090f, 0.294978559f, 0.298103839f, 0.301225930f, 0.304344803f, 0.307460397f, 0.310572743f, 0.313681751f, 0.316787392f, 0.319889635f, - 0.322988451f, 0.326083839f, 0.329175681f, 0.332264036f, 0.335348845f, 0.338430017f, 0.341507554f, 0.344581485f, 0.347651720f, 0.350718200f, - 0.353780955f, 0.356839925f, 0.359895051f, 0.362946332f, 0.365993738f, 0.369037211f, 0.372076690f, 0.375112236f, 0.378143758f, 0.381171227f, - 0.384194613f, 0.387213886f, 0.390229046f, 0.393239975f, 0.396246701f, 0.399249226f, 0.402247399f, 0.405241340f, 0.408230871f, 0.411216080f, - 0.414196879f, 0.417173237f, 0.420145124f, 0.423112512f, 0.426075369f, 0.429033697f, 0.431987405f, 0.434936464f, 0.437880874f, 0.440820634f, - 0.443755597f, 0.446685851f, 0.449611336f, 0.452531993f, 0.455447793f, 0.458358735f, 0.461264789f, 0.464165837f, 0.467061967f, 0.469953090f, - 0.472839147f, 0.475720167f, 0.478596091f, 0.481466919f, 0.484332532f, 0.487192988f, 0.490048259f, 0.492898166f, 0.495742917f, 0.498582304f, - 0.501416385f, 0.504245043f, 0.507068336f, 0.509886205f, 0.512698591f, 0.515505493f, 0.518306911f, 0.521102786f, 0.523893058f, 0.526677668f, - 0.529456615f, 0.532230020f, 0.534997642f, 0.537759542f, 0.540515661f, 0.543266058f, 0.546010554f, 0.548749268f, 0.551482081f, 0.554209054f, - 0.556930006f, 0.559644997f, 0.562354028f, 0.565056980f, 0.567753971f, 0.570444822f, 0.573129594f, 0.575808227f, 0.578480661f, 0.581146955f, - 0.583806932f, 0.586460710f, 0.589108169f, 0.591749430f, 0.594384253f, 0.597012758f, 0.599634886f, 0.602250516f, 0.604859710f, 0.607462525f, - 0.610058725f, 0.612648487f, 0.615231633f, 0.617808223f, 0.620378077f, 0.622941375f, 0.625498056f, 0.628047943f, 0.630591154f, 0.633127630f, - 0.635657310f, 0.638180137f, 0.640696168f, 0.643205345f, 0.645707667f, 0.648203015f, 0.650691390f, 0.653172910f, 0.655647278f, 0.658114731f, - 0.660575151f, 0.663028479f, 0.665474653f, 0.667913795f, 0.670345724f, 0.672770441f, 0.675188005f, 0.677598298f, 0.680001378f, 0.682397127f, - 0.684785664f, 0.687166810f, 0.689540565f, 0.691906929f, 0.694265962f, 0.696617484f, 0.698961616f, 0.701298177f, 0.703627348f, 0.705948830f, - 0.708262801f, 0.710569263f, 0.712868035f, 0.715159237f, 0.717442751f, 0.719718635f, 0.721986711f, 0.724247098f, 0.726499736f, 0.728744626f, - 0.730981648f, 0.733210862f, 0.735432267f, 0.737645686f, 0.739851296f, 0.742048979f, 0.744238734f, 0.746420443f, 0.748594224f, 0.750759959f, - 0.752917647f, 0.755067289f, 0.757208824f, 0.759342313f, 0.761467636f, 0.763584793f, 0.765693724f, 0.767794549f, 0.769887090f, 0.771971405f, - 0.774047434f, 0.776115239f, 0.778174698f, 0.780225754f, 0.782268524f, 0.784302890f, 0.786328912f, 0.788346410f, 0.790355563f, 0.792356193f, - 0.794348359f, 0.796332002f, 0.798307180f, 0.800273776f, 0.802231789f, 0.804181218f, 0.806122005f, 0.808054149f, 0.809977651f, 0.811892509f, - 0.813798666f, 0.815696120f, 0.817584813f, 0.819464803f, 0.821335912f, 0.823198318f, 0.825051904f, 0.826896608f, 0.828732491f, 0.830559433f, - 0.832377613f, 0.834186733f, 0.835986972f, 0.837778270f, 0.839560628f, 0.841333985f, 0.843098283f, 0.844853640f, 0.846599817f, 0.848336995f, - 0.850065112f, 0.851784110f, 0.853493989f, 0.855194688f, 0.856886268f, 0.858568668f, 0.860241890f, 0.861905873f, 0.863560677f, 0.865206122f, - 0.866842389f, 0.868469357f, 0.870086968f, 0.871695340f, 0.873294353f, 0.874884009f, 0.876464248f, 0.878035188f, 0.879596710f, 0.881148815f, - 0.882691383f, 0.884224594f, 0.885748327f, 0.887262523f, 0.888767302f, 0.890262544f, 0.891748250f, 0.893224299f, 0.894690871f, 0.896147847f, - 0.897595227f, 0.899033010f, 0.900461137f, 0.901879668f, 0.903288484f, 0.904687643f, 0.906077147f, 0.907456934f, 0.908827007f, 0.910187364f, - 0.911537945f, 0.912878752f, 0.914209783f, 0.915530980f, 0.916842461f, 0.918144047f, 0.919435859f, 0.920717835f, 0.921989918f, 0.923252106f, - 0.924504459f, 0.925746918f, 0.926979423f, 0.928201973f, 0.929414630f, 0.930617392f, 0.931810081f, 0.932992756f, 0.934165537f, 0.935328305f, - 0.936480999f, 0.937623739f, 0.938756406f, 0.939879060f, 0.940991580f, 0.942094028f, 0.943186462f, 0.944268763f, 0.945340872f, 0.946402907f, - 0.947454870f, 0.948496580f, 0.949528158f, 0.950549603f, 0.951560915f, 0.952561915f, 0.953552783f, 0.954533458f, 0.955503881f, 0.956464112f, - 0.957414031f, 0.958353758f, 0.959283173f, 0.960202336f, 0.961111188f, 0.962009788f, 0.962898076f, 0.963776052f, 0.964643717f, 0.965501070f, - 0.966348052f, 0.967184663f, 0.968010962f, 0.968826830f, 0.969632387f, 0.970427573f, 0.971212327f, 0.971986651f, 0.972750604f, 0.973504126f, - 0.974247217f, 0.974979877f, 0.975702107f, 0.976413906f, 0.977115214f, 0.977806091f, 0.978486478f, 0.979156435f, 0.979815841f, 0.980464756f, - 0.981103182f, 0.981731117f, 0.982348502f, 0.982955396f, 0.983551800f, 0.984137595f, 0.984712899f, 0.985277653f, 0.985831857f, 0.986375451f, - 0.986908555f, 0.987431049f, 0.987942994f, 0.988444328f, 0.988935113f, 0.989415288f, 0.989884853f, 0.990343809f, 0.990792215f, 0.991229951f, - 0.991657078f, 0.992073655f, 0.992479563f, 0.992874801f, 0.993259430f, 0.993633449f, 0.993996799f, 0.994349539f, 0.994691610f, 0.995023012f, - 0.995343804f, 0.995653868f, 0.995953321f, 0.996242106f, 0.996520221f, 0.996787608f, 0.997044384f, 0.997290432f, 0.997525871f, 0.997750580f, - 0.997964621f, 0.998167932f, 0.998360574f, 0.998542547f, 0.998713851f, 0.998874426f, 0.999024272f, 0.999163449f, 0.999291956f, 0.999409735f, - 0.999516785f, 0.999613166f, 0.999698818f, 0.999773800f, 0.999838054f, 0.999891579f, 0.999934435f, 0.999966562f, 0.999987960f, 0.999998689f, - 0.999998689f, 0.999987960f, 0.999966562f, 0.999934435f, 0.999891579f, 0.999838054f, 0.999773800f, 0.999698818f, 0.999613166f, 0.999516785f, - 0.999409735f, 0.999291956f, 0.999163449f, 0.999024272f, 0.998874426f, 0.998713851f, 0.998542547f, 0.998360574f, 0.998167932f, 0.997964621f, - 0.997750580f, 0.997525871f, 0.997290432f, 0.997044384f, 0.996787608f, 0.996520162f, 0.996242106f, 0.995953321f, 0.995653868f, 0.995343745f, - 0.995023012f, 0.994691610f, 0.994349539f, 0.993996799f, 0.993633449f, 0.993259430f, 0.992874801f, 0.992479503f, 0.992073596f, 0.991657078f, - 0.991229951f, 0.990792215f, 0.990343809f, 0.989884853f, 0.989415288f, 0.988935113f, 0.988444328f, 0.987942994f, 0.987431049f, 0.986908555f, - 0.986375451f, 0.985831797f, 0.985277653f, 0.984712899f, 0.984137595f, 0.983551741f, 0.982955396f, 0.982348502f, 0.981731117f, 0.981103182f, - 0.980464756f, 0.979815781f, 0.979156375f, 0.978486478f, 0.977806091f, 0.977115214f, 0.976413906f, 0.975702167f, 0.974979877f, 0.974247217f, - 0.973504126f, 0.972750604f, 0.971986651f, 0.971212268f, 0.970427513f, 0.969632387f, 0.968826830f, 0.968010902f, 0.967184663f, 0.966347992f, - 0.965501010f, 0.964643717f, 0.963776052f, 0.962898076f, 0.962009788f, 0.961111248f, 0.960202336f, 0.959283173f, 0.958353698f, 0.957414031f, - 0.956464052f, 0.955503821f, 0.954533398f, 0.953552783f, 0.952561915f, 0.951560855f, 0.950549603f, 0.949528158f, 0.948496580f, 0.947454810f, - 0.946402907f, 0.945340872f, 0.944268644f, 0.943186402f, 0.942094028f, 0.940991521f, 0.939879000f, 0.938756347f, 0.937623739f, 0.936481059f, - 0.935328305f, 0.934165537f, 0.932992816f, 0.931810021f, 0.930617273f, 0.929414630f, 0.928201973f, 0.926979363f, 0.925746858f, 0.924504459f, - 0.923252106f, 0.921989858f, 0.920717835f, 0.919435859f, 0.918144047f, 0.916842401f, 0.915531039f, 0.914209723f, 0.912878692f, 0.911537826f, - 0.910187304f, 0.908826947f, 0.907456875f, 0.906077087f, 0.904687583f, 0.903288484f, 0.901879609f, 0.900461137f, 0.899032950f, 0.897595286f, - 0.896147847f, 0.894690871f, 0.893224299f, 0.891748130f, 0.890262425f, 0.888767183f, 0.887262583f, 0.885748327f, 0.884224534f, 0.882691383f, - 0.881148815f, 0.879596710f, 0.878035188f, 0.876464248f, 0.874883950f, 0.873294294f, 0.871695280f, 0.870087028f, 0.868469357f, 0.866842330f, - 0.865206063f, 0.863560557f, 0.861905754f, 0.860241890f, 0.858568668f, 0.856886268f, 0.855194628f, 0.853493869f, 0.851784110f, 0.850065112f, - 0.848336995f, 0.846599758f, 0.844853640f, 0.843098342f, 0.841333985f, 0.839560628f, 0.837778270f, 0.835986972f, 0.834186673f, 0.832377613f, - 0.830559492f, 0.828732491f, 0.826896548f, 0.825051844f, 0.823198259f, 0.821335852f, 0.819464624f, 0.817584813f, 0.815696061f, 0.813798606f, - 0.811892450f, 0.809977591f, 0.808054030f, 0.806121826f, 0.804181159f, 0.802231669f, 0.800273657f, 0.798307061f, 0.796332061f, 0.794348359f, - 0.792356133f, 0.790355623f, 0.788346469f, 0.786328912f, 0.784302890f, 0.782268524f, 0.780225694f, 0.778174579f, 0.776115119f, 0.774047494f, - 0.771971405f, 0.769887090f, 0.767794490f, 0.765693665f, 0.763584673f, 0.761467457f, 0.759342313f, 0.757208824f, 0.755067229f, 0.752917588f, - 0.750759840f, 0.748594046f, 0.746420264f, 0.744238496f, 0.742048919f, 0.739851236f, 0.737645745f, 0.735432208f, 0.733210862f, 0.730981588f, - 0.728744507f, 0.726499796f, 0.724247098f, 0.721986711f, 0.719718575f, 0.717442691f, 0.715159178f, 0.712867975f, 0.710569263f, 0.708262861f, - 0.705948830f, 0.703627229f, 0.701298118f, 0.698961437f, 0.696617365f, 0.694265783f, 0.691906929f, 0.689540505f, 0.687166691f, 0.684785485f, - 0.682397008f, 0.680001199f, 0.677598119f, 0.675188124f, 0.672770500f, 0.670345724f, 0.667913795f, 0.665474653f, 0.663028419f, 0.660575032f, - 0.658114791f, 0.655647337f, 0.653172851f, 0.650691390f, 0.648202896f, 0.645707548f, 0.643205225f, 0.640696049f, 0.638180137f, 0.635657251f, - 0.633127570f, 0.630591094f, 0.628047824f, 0.625497878f, 0.622941196f, 0.620378077f, 0.617808104f, 0.615231514f, 0.612648308f, 0.610058606f, - 0.607462287f, 0.604859710f, 0.602250636f, 0.599634945f, 0.597012818f, 0.594384313f, 0.591749430f, 0.589108169f, 0.586460650f, 0.583806813f, - 0.581146955f, 0.578480661f, 0.575808167f, 0.573129535f, 0.570444763f, 0.567753851f, 0.565056860f, 0.562354028f, 0.559644997f, 0.556929946f, - 0.554208934f, 0.551481962f, 0.548749089f, 0.546010375f, 0.543265820f, 0.540515602f, 0.537759423f, 0.534997463f, 0.532229841f, 0.529456675f, - 0.526677608f, 0.523892939f, 0.521102846f, 0.518306971f, 0.515505552f, 0.512698591f, 0.509886146f, 0.507068276f, 0.504244924f, 0.501416445f, - 0.498582333f, 0.495742887f, 0.492898136f, 0.490048110f, 0.487192839f, 0.484332353f, 0.481466681f, 0.478596061f, 0.475720108f, 0.472839057f, - 0.469952941f, 0.467061788f, 0.464165628f, 0.461264521f, 0.458358675f, 0.455447704f, 0.452532053f, 0.449611366f, 0.446685851f, 0.443755567f, - 0.440820515f, 0.437880963f, 0.434936523f, 0.431987405f, 0.429033667f, 0.426075339f, 0.423112422f, 0.420145005f, 0.417173088f, 0.414196908f, - 0.411216080f, 0.408230841f, 0.405241221f, 0.402247280f, 0.399249017f, 0.396246493f, 0.393239945f, 0.390228957f, 0.387213796f, 0.384194493f, - 0.381171048f, 0.378143549f, 0.375111997f, 0.372076422f, 0.369037300f, 0.365993798f, 0.362946361f, 0.359895051f, 0.356839865f, 0.353780866f, - 0.350718081f, 0.347651780f, 0.344581515f, 0.341507554f, 0.338429958f, 0.335348725f, 0.332263887f, 0.329175502f, 0.326083839f, 0.322988421f, - 0.319889575f, 0.316787302f, 0.313681602f, 0.310572565f, 0.307460219f, 0.304344565f, 0.301225871f, 0.298103720f, 0.294978380f, 0.291849911f, - 0.288718283f, 0.285583586f, 0.282446027f, 0.279305458f, 0.276161671f, 0.273014933f, 0.269865274f, 0.266712725f, 0.263557315f, 0.260399073f, - 0.257238269f, 0.254074514f, 0.250908017f, 0.247738823f, 0.244566977f, 0.241392523f, 0.238215476f, 0.235035881f, 0.231854007f, 0.228669405f, - 0.225482360f, 0.222292900f, 0.219101071f, 0.215906888f, 0.212710381f, 0.209511846f, 0.206310824f, 0.203107595f, 0.199902192f, 0.196694881f, - 0.193485230f, 0.190273508f, 0.187059984f, 0.183844209f, 0.180626482f, 0.177406818f, 0.174185246f, 0.170961812f, 0.167736545f, 0.164509490f, - 0.161280900f, 0.158050358f, 0.154818118f, 0.151584208f, 0.148348689f, 0.145111576f, 0.141872913f, 0.138632968f, 0.135391295f, 0.132148176f, - 0.128903642f, 0.125657722f, 0.122410461f, 0.119161889f, 0.115912043f, 0.112661190f, 0.109408893f, 0.106155664f, 0.102901056f, 0.0996453464f, - 0.0963885784f, 0.0931307673f, 0.0898722038f, 0.0866124406f, 0.0833517462f, 0.0800901577f, 0.0768277124f, 0.0735644475f, 0.0703003928f, 0.0670358241f, - 0.0637702942f, 0.0605040900f, 0.0572372340f, 0.0539697632f, 0.0507017188f, 0.0474331267f, 0.0441640280f, 0.0408946946f, 0.0376246870f, 0.0343542770f, - 0.0310834963f, 0.0278123822f, 0.0245409720f, 0.0212692991f, 0.0179976355f, 0.0147257810f, 0.0114535289f, 0.00818115473f, 0.00490869302f, 0.00163617858f -}; -#endif /*----------------------------------------------------------------------------------* * ParamUpmix ROM tables @@ -1339,15 +752,9 @@ const int16_t mc_paramupmix_fb_remix_order[4] = {0, 1, 2, 3}; /*----------------------------------------------------------------------------------* * ParamMC ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float param_mc_ild_diff_threshold[20] = { 8.0f, 8.0f, 10.0f, 20.0f, - 20.0f, 20.0f, 20.0f, 20.0f, - 20.0f, 20.0f, 20.0f, 20.0f }; -#else //Q21 const Word32 param_mc_ild_diff_threshold_fx[20] = { 16777216, 16777216, 20971520, 41943040, 41943040, 41943040, 41943040, 41943040, 41943040, 41943040, 41943040, 41943040 }; -#endif /* clang-format on */ diff --git a/lib_enc/ivas_rom_enc.h b/lib_enc/ivas_rom_enc.h index edd9a9637..e859dc5e6 100644 --- a/lib_enc/ivas_rom_enc.h +++ b/lib_enc/ivas_rom_enc.h @@ -43,96 +43,43 @@ * Stereo classifiers *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED extern const Word16 unclr_isel_td[]; extern const Word32 unclr_mean_td[]; extern const Word32 unclr_scale_td[]; extern const Word32 unclr_coef_td[]; -#else -extern const int16_t unclr_isel_td[]; -extern const float unclr_mean_td[]; -extern const float unclr_scale_td[]; -extern const float unclr_coef_td[]; -#endif extern const int16_t xtalk_isel_td[]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 xtalk_mean_td[]; extern const Word32 xtalk_scale_td[]; extern const Word32 xtalk_coef_td[]; -#else -extern const float xtalk_mean_td[]; -extern const float xtalk_scale_td[]; -extern const float xtalk_coef_td[]; -#endif -#ifndef IVAS_FLOAT_FIXED -extern const float xtalk_mean_dft[]; -extern const float xtalk_scale_dft[]; -extern const float xtalk_coef_dft[]; -#else extern const int16_t xtalk_isel_dft[]; extern const Word32 xtalk_mean_dft_q15[]; extern const Word32 xtalk_scale_dft_q15[]; extern const Word32 xtalk_coef_dft_q30[]; -#endif extern const int16_t unclr_isel_dft[]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 unclr_mean_dft_Q15[]; extern const Word32 unclr_scale_dft_Q15[]; extern const Word32 unclr_coef_dft_Q28[]; -#else -extern const float unclr_mean_dft[]; -extern const float unclr_scale_dft[]; -extern const float unclr_coef_dft[]; -#endif /*----------------------------------------------------------------------------------* * Stereo IC-BWE ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float icbwe_thr_TDM[]; -extern const float icbwe_thr_DFT[]; -extern const float icbwe_regressionValuesTDM[]; -extern const float icbwe_regressionValuesDFT[]; -#else extern const Word32 icbwe_thr_TDM_fx[]; extern const Word32 icbwe_thr_DFT_fx[]; extern const Word32 icbwe_regressionValuesTDM_fx[]; extern const Word32 icbwe_regressionValuesDFT_fx[]; -#endif /*----------------------------------------------------------------------------------* * DFT stereo ROM tables *----------------------------------------------------------------------------------*/ extern const int16_t itd_vad_band_tbl[]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 ild_q_Q25[16]; -#endif extern const int16_t ild_q[]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 Wn_table_fx[50]; -#else -extern const float Wn_table[]; -#endif -#ifndef IVAS_FLOAT_FIXED -extern const float win_ana_8k[STEREO_DFT_OVL_8k]; -extern const float win_ana_12k8[STEREO_DFT_OVL_12k8]; -extern const float win_ana_16k[STEREO_DFT_OVL_16k]; -extern const float win_ana_32k[STEREO_DFT_OVL_32k]; -extern const float win_ana_48k[STEREO_DFT_OVL_MAX]; - -extern const float win_syn_8k[STEREO_DFT_OVL_8k]; -extern const float win_syn_12k8[STEREO_DFT_OVL_12k8]; -extern const float win_syn_16k[STEREO_DFT_OVL_16k]; -extern const float win_syn_32k[STEREO_DFT_OVL_32k]; -extern const float win_syn_48k[STEREO_DFT_OVL_MAX]; - -extern const float win_mdct_8k[STEREO_DFT_OVL_8k]; -#else extern const Word16 win_ana_8k_fx[STEREO_DFT_OVL_8k]; extern const Word16 win_ana_12k8_fx[STEREO_DFT_OVL_12k8]; extern const Word16 win_ana_16k_fx[STEREO_DFT_OVL_16k]; @@ -146,48 +93,30 @@ extern const Word32 win_syn_32k_fx[STEREO_DFT_OVL_32k]; extern const Word32 win_syn_48k_fx[STEREO_DFT_OVL_MAX]; extern const Word32 win_mdct_8k_fx[STEREO_DFT_OVL_8k]; -#endif /*----------------------------------------------------------------------------------* * Range Coder ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float ari_bit_estimate_s17_LC[RANGE_N_CONTEXT][RANGE_N_SYMBOLS]; -#else extern const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS]; -#endif /*----------------------------------------------------------------------------------* * ECLVQ Stereo ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float log2TB[ECSQ_log2TB_SIZE]; -extern const float ECSQ_log2_fact[1 + ECSQ_SEGMENT_SIZE]; -#else extern const int16_t log2_1px_table[65]; extern const Word32 log2TB_Q31[ECSQ_log2TB_SIZE]; extern const Word16 ECSQ_log2_fact_Q10[1 + ECSQ_SEGMENT_SIZE]; extern const uint16_t ECSQ_tab_param[ECSQ_CONFIG_COUNT][1 + ECSQ_PARAM_COUNT]; extern const uint16_t *const ECSQ_tab_abs_lsbs[1 + 4]; extern const uint16_t ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE]; -#endif /*----------------------------------------------------------------------------------* * Stereo downmix to EVS ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 4]; -extern const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 4]; -extern const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 4]; -extern const float Stereo_dmx_wnd_coef_32k[L_FRAME32k]; -extern const float Stereo_dmx_wnd_coef_48k[L_FRAME48k]; -#else extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 4]; extern const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 4]; extern const Word32 Stereo_dmx_wnd_coef_32k_fx[L_FRAME32k]; extern const Word32 Stereo_dmx_wnd_coef_48k_fx[L_FRAME48k]; -#endif /*----------------------------------------------------------------------------------* * ParamUpmix ROM tables *----------------------------------------------------------------------------------*/ @@ -199,11 +128,7 @@ extern const int16_t mc_paramupmix_fb_remix_order[4]; /*----------------------------------------------------------------------------------* * ParamMC ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float param_mc_ild_diff_threshold[20]; -#else extern const Word32 param_mc_ild_diff_threshold_fx[20]; -#endif #endif diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index f0ecb4101..0fe07179a 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -41,10 +41,8 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* @@ -52,7 +50,6 @@ * * Get TCs from Ambisonics signal in ACN *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_sba_getTCs_fx( Word32 *sba_data[], /* i : SBA signals Q11 */ Encoder_Struct *st_ivas, /* i/o: Encoder struct */ @@ -87,44 +84,12 @@ void ivas_sba_getTCs_fx( return; } -#else -void ivas_sba_getTCs( - float *sba_data[], /* i : SBA signals */ - Encoder_Struct *st_ivas, /* i/o: Encoder struct */ - const int16_t input_frame /* i : frame length */ -) -{ - if ( st_ivas->hEncoderConfig->sba_planar ) - { - ivas_sba_zero_vert_comp( sba_data, st_ivas->sba_analysis_order, st_ivas->hEncoderConfig->sba_planar, input_frame ); - } - - st_ivas->nchan_transport = ivas_get_sba_num_TCs( st_ivas->hEncoderConfig->ivas_total_brate, st_ivas->sba_analysis_order ); - - if ( st_ivas->nchan_transport >= 3 ) - { - /*convert WYZX downmix to WYXZ*/ - int16_t i = 0; - float temp; - for ( i = 0; i < input_frame; i++ ) - { - temp = sba_data[2][i]; - sba_data[2][i] = sba_data[3][i]; - sba_data[3][i] = temp; - } - } - - - return; -} -#endif /*-------------------------------------------------------------------* * ivas_sba_enc_reconfigure() * * Reconfigure IVAS SBA encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* To be renamed as ivas_sba_enc_reconfigure_fx later */ ivas_error ivas_sba_enc_reconfigure( Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ @@ -312,171 +277,3 @@ ivas_error ivas_sba_enc_reconfigure( return error; } -#else -ivas_error ivas_sba_enc_reconfigure( - Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ -) -{ - int16_t n, nSCE_old, nCPE_old, nchan_transport_old; - int32_t ivas_total_brate; - ivas_error error; - ENCODER_CONFIG_HANDLE hEncoderConfig; - - error = IVAS_ERR_OK; - hEncoderConfig = st_ivas->hEncoderConfig; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - - if ( ivas_total_brate != hEncoderConfig->last_ivas_total_brate ) - { - DIRAC_ENC_HANDLE hDirAC = st_ivas->hDirAC; - SPAR_ENC_HANDLE hSpar; - int16_t analysis_order_old; - int16_t spar_reconfig_flag; - int16_t nbands_old; - int16_t ndir_old; - - spar_reconfig_flag = 0; - nchan_transport_old = st_ivas->nchan_transport; - nCPE_old = st_ivas->nCPE; - nSCE_old = st_ivas->nSCE; - - st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, hEncoderConfig->sba_order ); - analysis_order_old = ivas_sba_get_analysis_order( hEncoderConfig->last_ivas_total_brate, hEncoderConfig->sba_order ); - - nbands_old = st_ivas->hQMetaData->q_direction->cfg.nbands; - ndir_old = st_ivas->hQMetaData->no_directions; - - if ( analysis_order_old != st_ivas->sba_analysis_order ) - { - int16_t i, n_old; - float **old_mem_hp20_in; - - n_old = ( analysis_order_old + 1 ) * ( analysis_order_old + 1 ); - n = ( st_ivas->sba_analysis_order + 1 ) * ( st_ivas->sba_analysis_order + 1 ); - - if ( n > n_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_in = st_ivas->mem_hp20_in; - st_ivas->mem_hp20_in = NULL; - - if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < n_old; i++ ) - { - st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i]; - old_mem_hp20_in[i] = NULL; - } - /* create additional hp20 memories */ - for ( ; i < n; i++ ) - { - if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - set_f( st_ivas->mem_hp20_in[i], 0.0f, L_HP20_MEM ); - } - - free( old_mem_hp20_in ); - old_mem_hp20_in = NULL; - } - else if ( n < n_old ) - { - /* save old mem_hp_20 pointer */ - old_mem_hp20_in = st_ivas->mem_hp20_in; - st_ivas->mem_hp20_in = NULL; - - if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) ); - } - - for ( i = 0; i < n; i++ ) - { - st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i]; - old_mem_hp20_in[i] = NULL; - } - /* remove superfluous hp20 memories */ - for ( ; i < n_old; i++ ) - { - free( old_mem_hp20_in[i] ); - old_mem_hp20_in[i] = NULL; - } - - free( old_mem_hp20_in ); - old_mem_hp20_in = NULL; - } - } - - ivas_spar_config( ivas_total_brate, min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ), &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->hSpar->core_nominal_brate, -1 ); - - hSpar = st_ivas->hSpar; - - if ( st_ivas->nchan_transport == 1 ) - { - hEncoderConfig->element_mode_init = IVAS_SCE; - } - else - { - hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - } - - if ( nchan_transport_old != st_ivas->nchan_transport || ( ivas_total_brate < IVAS_512k && hEncoderConfig->last_ivas_total_brate >= IVAS_512k ) || ( ivas_total_brate >= IVAS_512k && hEncoderConfig->last_ivas_total_brate < IVAS_512k ) ) - { - /* FB mixer handle */ - if ( hDirAC->hFbMixer != NULL ) - { - ivas_FB_mixer_close( &( hDirAC->hFbMixer ), hEncoderConfig->input_Fs, 0 ); - hDirAC->hFbMixer = NULL; - } - spar_reconfig_flag = 1; - ivas_spar_enc_close( &( st_ivas->hSpar ), hEncoderConfig->input_Fs, hEncoderConfig->nchan_inp, spar_reconfig_flag ); - - if ( ( error = ivas_spar_enc_open( st_ivas, spar_reconfig_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - st_ivas->hSpar->spar_reconfig_flag = spar_reconfig_flag; - - if ( ( error = ivas_dirac_enc_reconfigure( st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( st_ivas->hQMetaData->q_direction->cfg.nbands != nbands_old || st_ivas->hQMetaData->no_directions != ndir_old ) - { - int16_t dir, j, i; - IVAS_QDIRECTION *q_direction = st_ivas->hQMetaData->q_direction; - for ( dir = 0; dir < st_ivas->hQMetaData->no_directions; dir++ ) - { - for ( j = 0; j < q_direction[dir].cfg.nbands; j++ ) - { - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - q_direction[dir].band_data[j].energy_ratio_index[i] = 0; - q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0; - } - } - } - } - hSpar->enc_param_start_band = hDirAC->hConfig->enc_param_start_band; - - /*-----------------------------------------------------------------* - * Allocate, initialize, and configure SCE/CPE/MCT handles - *-----------------------------------------------------------------*/ - - if ( ( error = ivas_corecoder_enc_reconfig( st_ivas, nSCE_old, nCPE_old, nchan_transport_old, ivas_total_brate / st_ivas->nchan_transport, ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS, MC_MODE_NONE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#endif diff --git a/lib_enc/ivas_sce_enc.c b/lib_enc/ivas_sce_enc.c index b77e9009a..0c3b3b2d7 100644 --- a/lib_enc/ivas_sce_enc.c +++ b/lib_enc/ivas_sce_enc.c @@ -45,10 +45,8 @@ #include "debug.h" #endif #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx_enc.h" -#endif /*-------------------------------------------------------------------* @@ -58,7 +56,6 @@ *-------------------------------------------------------------------*/ Indice ind_list[MAX_NUM_INDICES]; -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_sce_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const Word16 sce_id, /* i : SCE # identifier */ @@ -246,7 +243,6 @@ ivas_error ivas_sce_enc_fx( /*----------------------------------------------------------------* * Front Pre-processing *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED FOR( Word16 i = 0; i < hSCE->hCoreCoder[0]->nb_subfr; i++ ) { Scale_sig( &A_fx[0][i * ( M + 1 )], M + 1, sub( norm_s( A_fx[0][i * ( M + 1 )] ), 2 ) ); // scaling to Q12 @@ -262,13 +258,6 @@ ivas_error ivas_sce_enc_fx( st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->force_front_vad : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_dtx_flag : 0, ivas_format, 0, st_ivas->hEncoderConfig->ivas_total_brate ); e_old_wsp[0] = sub( Q15, q_old_wsp ); move16(); -#else - error = pre_proc_front_ivas( hSCE, NULL, hSCE->element_brate, nb_bits_metadata, input_frame, 0, old_inp_12k8[0], old_inp_16k[0], - &ener[0], &relE[0], A[0], Aw[0], epsP[0], lsp_new[0], lsp_mid[0], &vad_hover_flag[0], &attack_flag[0], - realBuffer[0], imagBuffer[0], old_wsp[0], pitch_fr[0], voicing_fr[0], &loc_harm[0], &cor_map_sum[0], &vad_flag_dtx[0], enerBuffer[0], - fft_buff[0], A[0], lsp_new[0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, flag_16k_smc, - st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->force_front_vad : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_dtx_flag : 0, ivas_format, 0, st_ivas->hEncoderConfig->ivas_total_brate ); -#endif IF( error != IVAS_ERR_OK ) { return error; @@ -391,402 +380,12 @@ ivas_error ivas_sce_enc_fx( return error; } -#else -ivas_error ivas_sce_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t sce_id, /* i : SCE # identifier */ - const float data_f[], /* i : input signal for single channel */ - const int16_t input_frame, /* i : input frame length per channel */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS // required for float to fix conversion - float old_inp_12k8[1][L_INP_12k8] = { 0 }; /* buffer of input signal @ 12k8 */ - float old_inp_16k[1][L_INP] = { 0 }; /* buffer of input signal @ 16kHz */ - Word16 old_inp_12k8_fx[1][L_INP_12k8]; /* buffer of input signal @ 12k8 */ -#else - float old_inp_12k8[1][L_INP_12k8]; /* buffer of input signal @ 12k8 */ - float old_inp_16k[1][L_INP]; /* buffer of input signal @ 16kHz */ -#endif - float ener[1]; /* residual energy from Levinson-Durbin */ - float relE[1]; /* frame relative energy */ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS // required for float to fix conversion - float A[1][NB_SUBFR16k * ( M + 1 )] = { 0 }; /* A(z) unquantized for subframes */ - float Aw[1][NB_SUBFR16k * ( M + 1 )] = { 0 }; /* weighted A(z) unquantized for subframes */ -#else - float A[1][NB_SUBFR16k * ( M + 1 )]; /* A(z) unquantized for subframes */ - float Aw[1][NB_SUBFR16k * ( M + 1 )]; /* weighted A(z) unquantized for subframes */ -#endif - float epsP[1][M + 1]; /* LP prediction errors */ - float lsp_new[1][M]; /* LSPs at the end of the frame */ - float lsp_mid[1][M]; /* ISPs in the middle of the frame */ - int16_t vad_hover_flag[1]; /* VAD hangover flag */ - int16_t attack_flag[1]; /* attack flag (GSC or TC) */ - float realBuffer[1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* real buffer */ - float imagBuffer[1][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; /* imag buffer */ - float old_wsp[1][L_WSP]; /* old weighted input signal */ - float pitch_fr[1][NB_SUBFR]; /* fractional pitch values */ - float voicing_fr[1][NB_SUBFR]; /* fractional pitch gains */ - int16_t loc_harm[1]; /* harmonicity flag */ - float cor_map_sum[1]; /* speech/music clasif. parameter */ - int16_t vad_flag_dtx[1]; /* HE-SAD flag with additional DTX HO */ - float enerBuffer[1][CLDFB_NO_CHANNELS_MAX]; /* energy buffer */ - float currFlatness[1]; /* flatness parameter */ - float fft_buff[1][2 * L_FFT]; /* FFT buffer */ - Word16 fft_buff_fx[1][2 * L_FFT]; /* FFT buffer */ - float fr_bands[1][2 * NB_BANDS]; /* energy in frequency bands */ - float Etot_LR[1]; /* total energy */ - float lf_E[1][2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - int16_t localVAD_HE_SAD[1]; /* local HE SAD */ - SCE_ENC_HANDLE hSCE; - Encoder_State *st; - IVAS_FORMAT ivas_format; - ivas_error error; - int16_t flag_16k_smc; - - push_wmops( "ivas_sce_enc" ); - - error = IVAS_ERR_OK; - - hSCE = st_ivas->hSCE[sce_id]; - st = hSCE->hCoreCoder[0]; - ivas_format = st_ivas->hEncoderConfig->ivas_format; - - /*------------------------------------------------------------------* - * Initialization - general - *-----------------------------------------------------------------*/ - - mvr2r( data_f, st->input, input_frame ); - - st->element_mode = IVAS_SCE; - - /*------------------------------------------------------------------* - * SCE initialization - core coder - *-----------------------------------------------------------------*/ - - st->idchan = 0; - st->core = -1; - st->core_brate = -1; /* updated in dtx() */ - st->max_bwidth = st_ivas->hEncoderConfig->max_bwidth; - st->input_bwidth = st->last_input_bwidth; /* updated in BWD */ - st->bwidth = st->last_bwidth; /* updated in BWD */ - st->rate_switching_reset = 0; -#ifdef DEBUGGING - st->force = st_ivas->hEncoderConfig->force; - st->id_element = sce_id; -#endif - - /*---------------------------------------------------------------* - * Time Domain Transient Detector - *---------------------------------------------------------------*/ - - if ( ivas_format != MC_FORMAT || st_ivas->mc_mode != MC_MODE_PARAMMC ) - { -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - floatToFixed_arr16( st->input, st->input_fx, -1, input_frame ); -#endif - RunTransientDetection_ivas_fx( st->input_fx, input_frame, st->hTranDet ); - st->hTranDet->subblockEnergies.subblockNrg_e = 31 - Q7; - st->hTranDet->subblockEnergies.accSubblockNrg_e = 31 - Q7; - move16(); - move16(); -#else - RunTransientDetection( st->input, input_frame, st->hTranDet ); -#endif - } - -#ifdef IVAS_FLOAT_FIXED - Word16 tmp = GetTCXAvgTemporalFlatnessMeasure_fx( (const TransientDetection *) st->hTranDet, NSUBBLOCKS, 0 ); - currFlatness[0] = me2f_16( tmp, 15 - Q7 ); -#else - currFlatness[0] = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); -#endif - - /*----------------------------------------------------------------* - * Configuration of core encoder - *----------------------------------------------------------------*/ - - /* Force to MODE1 in IVAS */ - st->codec_mode = MODE1; - - /* set "bits_frame_nominal" */ - if ( st_ivas->hQMetaData != NULL && st_ivas->hSpar == NULL ) - { - if ( ( ( st_ivas->mc_mode == MC_MODE_MCMASA ) && ( st_ivas->hEncoderConfig->ivas_total_brate >= MCMASA_SEPARATE_BRATE ) ) || ( st_ivas->ism_mode >= ISM_MASA_MODE_MASA_ONE_OBJ ) ) - { - st->bits_frame_nominal = (int16_t) ( hSCE->element_brate / FRAMES_PER_SEC ); - } - else - { - st->bits_frame_nominal = st_ivas->hQMetaData->bits_frame_nominal; - } - } - else if ( st_ivas->hSpar != NULL ) - { - st->bits_frame_nominal = (int16_t) ( st_ivas->hSpar->core_nominal_brate / FRAMES_PER_SEC ); - } - else - { - st->bits_frame_nominal = (int16_t) ( ( hSCE->element_brate / FRAMES_PER_SEC ) - ISM_NB_BITS_METADATA_NOMINAL ); - } - - /* set "total_brate" */ - st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; - - /* set flag for sampling rate of OL S/M classifier */ - flag_16k_smc = 0; - if ( st_ivas->hEncoderConfig->ivas_format == SBA_FORMAT && ( st_ivas->hEncoderConfig->ivas_total_brate == IVAS_24k4 || st_ivas->hEncoderConfig->ivas_total_brate == IVAS_32k ) && hSCE->element_brate == hSCE->last_element_brate ) - { - flag_16k_smc = 1; - } - -#ifdef DEBUG_MODE_INFO - dbgwrite( st->input - NS2SA( st->input_Fs, ACELP_LOOK_NS ), sizeof( float ), input_frame, 1, "res/input_DMX" ); - dbgwrite( &st->element_mode, sizeof( int16_t ), 1, input_frame, fname( debug_dir, "element_mode", 0, st->id_element, ENC ) ); -#endif - - - /*----------------------------------------------------------------* - * Front Pre-processing - *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED - error = pre_proc_front_ivas_fx( hSCE, NULL, hSCE->element_brate, nb_bits_metadata, input_frame, 0, old_inp_12k8_fx[0], old_inp_12k8[0], old_inp_16k[0], - &ener[0], &relE[0], A[0], Aw[0], epsP[0], lsp_new[0], lsp_mid[0], &vad_hover_flag[0], &attack_flag[0], - realBuffer[0], imagBuffer[0], old_wsp[0], pitch_fr[0], voicing_fr[0], &loc_harm[0], &cor_map_sum[0], &vad_flag_dtx[0], enerBuffer[0], - fft_buff[0], fft_buff_fx[0], A[0], lsp_new[0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, flag_16k_smc, - st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->force_front_vad : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_dtx_flag : 0, ivas_format, 0, st_ivas->hEncoderConfig->ivas_total_brate ); -#else - error = pre_proc_front_ivas( hSCE, NULL, hSCE->element_brate, nb_bits_metadata, input_frame, 0, old_inp_12k8[0], old_inp_16k[0], - &ener[0], &relE[0], A[0], Aw[0], epsP[0], lsp_new[0], lsp_mid[0], &vad_hover_flag[0], &attack_flag[0], - realBuffer[0], imagBuffer[0], old_wsp[0], pitch_fr[0], voicing_fr[0], &loc_harm[0], &cor_map_sum[0], &vad_flag_dtx[0], enerBuffer[0], - fft_buff[0], A[0], lsp_new[0], currFlatness[0], 0, fr_bands, Etot_LR, lf_E, localVAD_HE_SAD, NULL, flag_16k_smc, - st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_flag : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->force_front_vad : 0, st_ivas->hSpar != NULL ? st_ivas->hSpar->front_vad_dtx_flag : 0, ivas_format, 0, st_ivas->hEncoderConfig->ivas_total_brate ); -#endif - if ( error != IVAS_ERR_OK ) - { - return error; - } - - /* sanity check -> DTX not supported for more than one SCEs/CPEs */ - if ( st_ivas->nSCE + st_ivas->nCPE > 1 ) - { - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - st->core_brate = -1; - st->total_brate = hSCE->element_brate - nb_bits_metadata * FRAMES_PER_SEC; - } - } - - /*----------------------------------------------------------------* - * Reset metadata - *----------------------------------------------------------------*/ - - reset_metadata_spatial( ivas_format, hSCE->hMetaData, hSCE->element_brate, &st->total_brate, st->core_brate, nb_bits_metadata ); - - /*----------------------------------------------------------------* - * Combined format coding: get the ISM importance and the bit-rate - *----------------------------------------------------------------*/ - - if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) - { -#ifndef IVAS_FLOAT_FIXED - ivas_set_ism_importance_interformat( hSCE->element_brate, 1, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hMasa->data.hOmasaData->lp_noise_CPE, &st_ivas->hIsmMetaData[0]->ism_imp ); -#else -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx = 0; -#endif - ivas_set_ism_importance_interformat_fx( hSCE->element_brate, 1, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hMasa->data.hOmasaData->lp_noise_CPE_fx, &st_ivas->hIsmMetaData[0]->ism_imp ); -#endif -#ifndef IVAS_FLOAT_FIXED - st->total_brate = ivas_interformat_brate( ISM_MASA_MODE_PARAM_ONE_OBJ, 1, hSCE->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ) - nb_bits_metadata * FRAMES_PER_SEC; -#else - st->total_brate = L_sub( ivas_interformat_brate_fx( ISM_MASA_MODE_PARAM_ONE_OBJ, 1, hSCE->element_brate, st_ivas->hIsmMetaData[0]->ism_imp, 0 ), L_mult0( nb_bits_metadata, FRAMES_PER_SEC ) ); - move32(); -#endif - } - - /*----------------------------------------------------------------* - * Write IVAS format signaling in SID frames - *----------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED - if ( st->core_brate == SID_2k40 ) - { - ivas_write_format_sid( ivas_format, IVAS_SCE, st->hBstr ); - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - /* IGF reconfiguration */ - if ( hSCE->last_element_brate != hSCE->element_brate || st->last_bwidth != st->bwidth ) - { - int16_t igf; - igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->max_bwidth, st->rf_mode ); - if ( ( error = IGF_Reconfig( &st->hIGFEnc, igf, 0, st->bits_frame_nominal * FRAMES_PER_SEC, st->max_bwidth, st->element_mode, st->rf_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - } -#else - IF( EQ_32( st->core_brate, SID_2k40 ) ) - { - ivas_write_format_sid_fx( ivas_format, IVAS_SCE, st->hBstr ); - } - - /*----------------------------------------------------------------* - * Core codec configuration - *----------------------------------------------------------------*/ - - /* IGF reconfiguration */ - test(); - IF( hSCE->last_element_brate != hSCE->element_brate || st->last_bwidth != st->bwidth ) - { - Word16 igf; - igf = getIgfPresent_fx( st->element_mode, L_mult0( st->bits_frame_nominal, FRAMES_PER_SEC ), st->max_bwidth, st->rf_mode ); - IF( NE_32( ( error = IGF_Reconfig_fx( &st->hIGFEnc, igf, 0, L_mult0( st->bits_frame_nominal, FRAMES_PER_SEC ), st->max_bwidth, st->element_mode, st->rf_mode ) ), IVAS_ERR_OK ) ) - { - return error; - } - } -#endif - - /* set ACELP@12k8 / ACELP@16k flag for flexible ACELP core */ - if ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) - { - st->flag_ACELP16k = set_ACELP_flag_IVAS( IVAS_SCE, hSCE->element_brate, st->core_brate, 0, 0, -1, -1 ); - } - else if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ && st->low_rate_mode ) - { - st->flag_ACELP16k = 0; - } - else - { - st->flag_ACELP16k = set_ACELP_flag_IVAS( IVAS_SCE, hSCE->element_brate, st->total_brate, 0, 0, -1, -1 ); - } - - /* modify the coder_type depending on the total_brate per channel */ - coder_type_modif( st, relE[0] ); - - /*----------------------------------------------------------------* - * Encoder - *----------------------------------------------------------------*/ - - if ( ( error = ivas_core_enc( hSCE, NULL, NULL, 1, old_inp_12k8, old_inp_16k, ener, A, Aw, epsP, lsp_new, lsp_mid, vad_hover_flag, attack_flag, realBuffer, imagBuffer, old_wsp, loc_harm, cor_map_sum, vad_flag_dtx, enerBuffer, fft_buff, 0, ivas_format, flag_16k_smc ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*----------------------------------------------------------------* - * Common updates - *----------------------------------------------------------------*/ - - /* update input samples buffer */ - mvr2r( st->input, st->old_input_signal, input_frame ); - - hSCE->last_element_brate = hSCE->element_brate; - - /* Store previous attack detection flag */ - st->hTranDet->transientDetector.prev_bIsAttackPresent = st->hTranDet->transientDetector.bIsAttackPresent; - -#ifdef DEBUG_MODE_INFO - { - float tmpF = hSCE->element_brate / 1000.0f; - dbgwrite( &tmpF, sizeof( float ), 1, input_frame, fname( debug_dir, "element_brate", 0, sce_id, ENC ) ); - } -#endif - - - pop_wmops(); - - return error; -} -#endif /*------------------------------------------------------------------------- * create_sce_enc() * * Create, allocate and initialize IVAS encoder SCE handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error create_sce_enc( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const int16_t sce_id, /* i : SCE # identifier */ - const int32_t element_brate /* i : element bitrate */ -) -{ - SCE_ENC_HANDLE hSCE; - Encoder_State *st; - - ivas_error error; - - error = IVAS_ERR_OK; - - /*-----------------------------------------------------------------* - * Allocate SCE handle - *-----------------------------------------------------------------*/ - - if ( ( hSCE = (SCE_ENC_HANDLE) malloc( sizeof( SCE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SCE\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialization - general parameters - *-----------------------------------------------------------------*/ - - hSCE->sce_id = sce_id; - hSCE->element_brate = element_brate; - hSCE->last_element_brate = hSCE->element_brate; - - /*-----------------------------------------------------------------* - * Metadata: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( st_ivas->hEncoderConfig->ivas_format != MONO_FORMAT && sce_id == ( st_ivas->nSCE - 1 ) ) - { - if ( ( error = ivas_initialize_MD_bstr_enc( &( hSCE->hMetaData ), st_ivas ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hSCE->hMetaData = NULL; - } - - /*-----------------------------------------------------------------* - * Core Coder, 1 instance: allocate and initialize - *-----------------------------------------------------------------*/ - - if ( ( st = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - - copy_encoder_config_fx( st_ivas, st, 1 ); - - if ( st_ivas->hEncoderConfig->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) - { - st->element_mode = IVAS_SCE; - } - - st->total_brate = hSCE->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - st->mct_chan_mode = MCT_CHAN_MODE_REGULAR; - - if ( ( error = init_encoder( st, st_ivas, 0, st_ivas->hEncoderConfig->var_SID_rate_flag, st_ivas->hEncoderConfig->interval_SID, 0, st_ivas->ism_mode, hSCE->element_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - hSCE->hCoreCoder[0] = st; - - st_ivas->hSCE[sce_id] = hSCE; - - return error; -} -#else ivas_error create_sce_enc_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const Word16 sce_id, /* i : SCE # identifier */ @@ -872,7 +471,6 @@ ivas_error create_sce_enc_fx( return error; } -#endif /*------------------------------------------------------------------------- * create_evs_sce_enc() diff --git a/lib_enc/ivas_sns_enc.c b/lib_enc/ivas_sns_enc.c index 87ac472a6..d36fcaaa5 100644 --- a/lib_enc/ivas_sns_enc.c +++ b/lib_enc/ivas_sns_enc.c @@ -53,7 +53,6 @@ *-------------------------------------------------------------------*/ /* r : codebook index */ -#ifdef IVAS_FLOAT_FIXED static Word16 sns_1st_cod_fx( const Word32 *sns_fx, /* i : vector to quantize */ Word16 exp_sns, @@ -172,90 +171,6 @@ static Word16 sns_1st_cod_fx( return index; } -#else -static int16_t sns_1st_cod( - const float *sns, /* i : vector to quantize */ - const int16_t L_frame, - const int16_t core, - float *snsq /* o : quantized sns */ -) -{ - int16_t index; - const int16_t split_len = M / 2; - const int16_t *means; - const float means_fix2float = 1.f / powf( 2, SNS_MEANS_BITS_4_FRAC ); - /* remove means */ - means = NULL; - switch ( L_frame ) - { - case L_FRAME16k: - means = &sns_1st_means_16k[core - 1][0]; - break; - case L_FRAME25_6k: - means = &sns_1st_means_25k6[core - 1][0]; - break; - case L_FRAME32k: - means = &sns_1st_means_32k[core - 1][0]; - break; - default: - assert( !"illegal frame length in sns_1st_cod" ); - } - for ( int16_t i = 0; i < M; ++i ) - { - snsq[i] = sns[i] - means[i] * means_fix2float; - } - index = 0; - for ( int16_t split = 0; split < 2; ++split ) - { - const int16_t *cdbk_ptr; - int16_t j0, j1, index_split; - float dist_min; - const float cdbk_fix2float = 1.f / powf( 2, SNS_CDBKS_BITS_4_FRAC ); - const int16_t *const cdbk = &sns_1st_cdbk[split][core - 1][0]; - - j0 = split * split_len; - j1 = j0 + split_len; - - cdbk_ptr = cdbk; - dist_min = 1.0e30f; - index_split = 0; - for ( int16_t i = 0; i < 32; ++i ) - { - float dist; - dist = 0.f; - for ( int16_t j = j0; j < j1; ++j ) - { - float tmp; - tmp = snsq[j] - ( *cdbk_ptr++ ) * cdbk_fix2float; - dist += tmp * tmp; - } - - if ( dist < dist_min ) - { - dist_min = dist; - index_split = i; - } - } - - /* set quantized vector */ - cdbk_ptr = &cdbk[index_split * split_len]; - for ( int16_t j = j0; j < j1; ++j ) - { - snsq[j] = ( *cdbk_ptr++ ) * cdbk_fix2float + means[j] * means_fix2float; - } - - /* for second split shift by five bits to store both indices as one 10 bit value */ - if ( split == 1 ) - { - index_split <<= 5; - } - - index += index_split; - } - - return index; -} -#endif /*------------------------------------------------------------------- * sns_2st_cod() @@ -264,7 +179,6 @@ static int16_t sns_1st_cod( *-------------------------------------------------------------------*/ /* r : number of allocated bits */ -#ifdef IVAS_FLOAT_FIXED static Word16 sns_2st_cod_fx( const Word32 *sns_fx, /* i : normalized vector to quantize */ Word16 exp_sns, @@ -339,63 +253,12 @@ static Word16 sns_2st_cod_fx( return ( nbits ); } -#else -static int16_t sns_2st_cod( - const float *sns, /* i : normalized vector to quantize */ - float *snsq, /* i/o: i:1st stage o:1st+2nd stage */ - int16_t *indx /* o : index[] (4 bits per words) */ -) -{ - int16_t i, nbits; - float x[M]; - int16_t nq, xq[M]; - float scale = 1.0f / 2.5f; - - for ( i = 0; i < M; i++ ) - { - x[i] = ( sns[i] - snsq[i] ) / scale; - } - - /* quantize */ - AVQ_cod_lpc( x, xq, indx, 2 ); - - for ( i = 0; i < M; i++ ) - { - snsq[i] += scale * (float) xq[i]; - } - - /* total number of bits using entropic code to index the quantizer number */ - nbits = 0; - - for ( i = 0; i < 2; i++ ) - { - nq = indx[i]; - nbits += ( 2 + ( nq * 4 ) ); /* 2 bits to specify Q2,Q3,Q4,ext */ - - if ( nq > 6 ) - { - nbits += nq - 3; /* unary code (Q7=1110, ...) */ - } - else if ( nq > 4 ) - { - nbits += nq - 4; /* Q5=0, Q6=10 */ - } - else if ( nq == 0 ) - { - nbits += 3; /* Q0=110 */ - } - } - - return ( nbits ); -} -#endif /*------------------------------------------------------------------- * sns_avq_cod() * * Stereo noise-shaping AVQ encoder for 1 channel *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void sns_avq_cod_fx( const Word32 *sns_fx, /* i : Input sns vectors */ Word16 exp_sns, @@ -496,90 +359,6 @@ void sns_avq_cod_fx( } return; } -#else -void sns_avq_cod( - const float *sns, /* i : Input sns vectors */ - const float *snsmid, /* i : Input mid-sns vectors */ - float *sns_q, /* o : Quantized LFS vectors */ - float *snsmid_q, /* o : Quantized mid-LFS vectors */ - int16_t *index, /* o : Quantization indices */ - const int16_t core, /* i : core */ - const int16_t L_frame, - const int16_t low_brate_mode /* i : flag low bit operating mode */ -) -{ - int16_t i; - float snsmid_q0[M]; - int16_t indxt[256], nbits, nbt, nit; - - index[0] = sns_1st_cod( sns, L_frame, core, sns_q ); - nit = 1 + 2; - if ( !low_brate_mode ) - { - nbt = sns_2st_cod( sns, sns_q, &index[1] ); - nit += index[1] + index[2]; - } - else - { - index[1] = SNS_LOW_BR_MODE; - index[2] = 0; - } - - index += nit; - nit = 0; - *index = 0; - - if ( core == TCX_10_CORE ) - { - index++; - - index[0] = sns_1st_cod( snsmid, L_frame, core, snsmid_q ); - nit = 1 + 2; - if ( !low_brate_mode ) - { - nbits = sns_2st_cod( snsmid, snsmid_q, &index[1] ); - nit += index[1] + index[2]; - } - else - { - index[1] = SNS_LOW_BR_MODE; - index[2] = 0; - nbits = 0; - } - - - nbt = 10 + nbits; - - if ( !low_brate_mode ) - { - for ( i = 0; i < M; i++ ) - { - snsmid_q0[i] = sns_q[i]; - } - nbits = sns_2st_cod( snsmid, snsmid_q0, indxt ); - if ( nbits < nbt ) - { - nbt = nbits; - nit = 2 + indxt[0] + indxt[1]; - index[-1] = 1; - - for ( i = 0; i < M; i++ ) - { - snsmid_q[i] = snsmid_q0[i]; - } - - for ( i = 0; i < nit; i++ ) - { - index[i] = indxt[i]; - } - } - } - index += nit; - } - - return; -} -#endif /*------------------------------------------------------------------- * sns_avq_cod_stereo() @@ -587,7 +366,6 @@ void sns_avq_cod( * Stereo noise-shaping AVQ encoder for 2 channels *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void sns_avq_cod_stereo_fx( const Word32 *snsl_fx, /* i : Input sns vector (left channel) */ Word16 exp_snl, @@ -721,93 +499,6 @@ void sns_avq_cod_stereo_fx( } return; } -#else -void sns_avq_cod_stereo( - const float *snsl, /* i : Input sns vector (left channel) */ - const float *snsr, /* i : Input sns vector (right channel) */ - const int16_t L_frame, - float *snsl_q, /* o : Quantized sns vector (left channel) */ - float *snsr_q, /* o : Quantized sns vector (right channel) */ - int16_t *indexl, /* o : Quantization indices (left channel) */ - int16_t *indexr /* o : Quantization indices (right channel) */ -) -{ - int16_t i, flag_zero; - float mid[M], side[M], mid_q[M], side_q[M], ener_side; - - /* Compute side */ - ener_side = 0.f; - for ( i = 0; i < M; i++ ) - { - side[i] = snsl[i] - snsr[i]; - ener_side += side[i] * side[i]; - } - - if ( ener_side < 12.f ) - { - /* MS coding */ - *indexl++ = 2; - *indexr++ = 3; - - /* Compute mid */ - for ( i = 0; i < M; i++ ) - { - mid[i] = ( snsl[i] + snsr[i] ) * 0.5f; - } - - /* Quantize mid */ - indexl[0] = sns_1st_cod( mid, L_frame, TCX_20_CORE, mid_q ); - sns_2st_cod( mid, mid_q, &indexl[1] ); - - /* Quantize side */ - indexr[0] = -1; - for ( i = 0; i < M; i++ ) - { - side_q[i] = 0.f; - } - sns_2st_cod( side, side_q, &indexr[1] ); - - /* Detect zero side */ - flag_zero = 1; - for ( i = 0; i < M; i++ ) - { - if ( side_q[i] != 0 ) - { - flag_zero = 0; - break; - } - } - if ( flag_zero ) - { - indexr[0] = -2; - } - - /* Go back to LR */ - for ( i = 0; i < M; i++ ) - { - snsl_q[i] = mid_q[i] + side_q[i] * 0.5f; - snsr_q[i] = mid_q[i] - side_q[i] * 0.5f; - } - } - else - { - /* LR coding */ - *indexl++ = 0; - *indexr++ = 1; - - /* Quantize left */ - indexl[0] = sns_1st_cod( snsl, L_frame, TCX_20_CORE, snsl_q ); - sns_2st_cod( snsl, snsl_q, &indexl[1] ); - - /* Quantize right */ - indexr[0] = sns_1st_cod( snsr, L_frame, TCX_20_CORE, snsr_q ); - sns_2st_cod( snsr, snsr_q, &indexr[1] ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 quantize_sns_fx( Word32 sns_in_fx[CPE_CHANNELS][NB_DIV][M], /* sns_e */ Word32 snsQ_out_fx[CPE_CHANNELS][NB_DIV][M], /* sns_e */ @@ -1062,163 +753,3 @@ Word16 quantize_sns_fx( return nbits; } - -#else -int16_t quantize_sns( - float sns_in[CPE_CHANNELS][NB_DIV][M], - float snsQ_out[CPE_CHANNELS][NB_DIV][M], - Encoder_State **sts, - int16_t *indices, - int16_t *zero_side_flag, - int16_t *sns_stereo_mode ) -{ - int16_t nSubframes, k, ch, i; - int16_t nbits, idxIndices; - Encoder_State *st; - float weights[M]; - - nbits = 0; - idxIndices = 0; - set_f( weights, 1.0f, M ); - - sns_stereo_mode[0] = SNS_STEREO_MODE_LR; - sns_stereo_mode[1] = SNS_STEREO_MODE_LR; - zero_side_flag[0] = 0; - zero_side_flag[1] = 0; - - /* use snsQ_out as buffer, move input vectors */ - for ( ch = 0; ch < CPE_CHANNELS; ++ch ) - { - nSubframes = ( sts[ch]->core == TCX_20_CORE ) ? 1 : NB_DIV; - for ( k = 0; k < nSubframes; ++k ) - { - mvr2r( sns_in[ch][k], snsQ_out[ch][k], M ); - } - } - - /* stereo mode decision */ - if ( sts[0]->core == sts[1]->core ) - { - nSubframes = ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; ++k ) - { - float side[M]; - float ener_side; - - v_sub( snsQ_out[0][k], snsQ_out[1][k], side, M ); - ener_side = dotp( side, side, M ); - - sns_stereo_mode[k] = ener_side < 12.f; - zero_side_flag[k] = ener_side < 1.f; - - if ( sns_stereo_mode[k] == SNS_STEREO_MODE_MS ) - { -#ifndef IVAS_FLOAT_FIXED - convertToMS( M, snsQ_out[0][k], snsQ_out[1][k], 0.5f ); -#else - Word32 snsQ_out_fx[2][2][M]; - Word16 q = s_min( Q_factor_arrL( snsQ_out[0][k], M ), Q_factor_arrL( snsQ_out[1][k], M ) ) - 1; - floatToFixed_arrL( snsQ_out[0][k], snsQ_out_fx[0][k], q, M ); - floatToFixed_arrL( snsQ_out[1][k], snsQ_out_fx[1][k], q, M ); - - convertToMS_fx( M, snsQ_out_fx[0][k], snsQ_out_fx[1][k], ONE_IN_Q30 ); - - fixedToFloat_arrL( snsQ_out_fx[0][k], snsQ_out[0][k], q, M ); - fixedToFloat_arrL( snsQ_out_fx[1][k], snsQ_out[1][k], q, M ); -#endif - } - } - } - - /* run MSVQ */ - for ( ch = 0; ch < CPE_CHANNELS; ++ch ) - { - st = sts[ch]; - nSubframes = ( st->core == TCX_20_CORE ) ? 1 : NB_DIV; - - for ( k = 0; k < nSubframes; ++k ) - { - const int16_t is_side = ch == 1 && sns_stereo_mode[k] == SNS_STEREO_MODE_MS; - const float *const *cdbks = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20 : ivas_sns_cdbks_tcx10; - const int16_t *levels = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20_levels : ivas_sns_cdbks_tcx10_levels; - const int16_t *bits = ( nSubframes == 1 ) ? ivas_sns_cdbks_tcx20_bits : ivas_sns_cdbks_tcx10_bits; - int16_t nStages = ( ( nSubframes == 1 ) ? SNS_MSVQ_NSTAGES_TCX20 : SNS_MSVQ_NSTAGES_TCX10 ); - float *snsQ = snsQ_out[ch][k]; - const float *sns_ptr = snsQ_out[ch][k]; - - if ( is_side ) - { -#ifdef IVAS_FLOAT_FIXED - const Word16 *const *side_cdbks_fx = ( st->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20_fx : ivas_sns_cdbks_side_tcx10_fx; -#endif - const float *const *side_cdbks = ( st->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20 : ivas_sns_cdbks_side_tcx10; - const int16_t *side_levels = ( st->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20_levels : ivas_sns_cdbks_side_tcx10_levels; - - if ( zero_side_flag[k] ) - { - set_zero( snsQ, M ); - continue; - } - - nStages = SNS_MSVQ_NSTAGES_SIDE; - bits = ( st->core == TCX_20_CORE ) ? ivas_sns_cdbks_side_tcx20_bits : ivas_sns_cdbks_side_tcx10_bits; -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - Word32 snsQ_fx[32]; - Word16 sns_e; - Word16 weights_fx[24]; - - f2me_buf( snsQ, snsQ_fx, &sns_e, M ); - Scale_sig32( snsQ_fx, M, sns_e - s_max( 0, sns_e + 1 ) ); - sns_e = s_max( sns_e + 1, 0 ); - floatToFixed_arr( weights, weights_fx, Q8, 24 ); -#endif - msvq_enc_ivas_fx( side_cdbks_fx, Q15, NULL, NULL, snsQ_fx, sns_e, side_levels, 3, nStages, weights_fx, M, M, 0, NULL, &indices[idxIndices] ); -#else - msvq_enc( side_cdbks, NULL, NULL, snsQ, side_levels, 3, nStages, weights, M, M, 0, NULL, &indices[idxIndices] ); -#endif - msvq_dec_float( side_cdbks, NULL, NULL, nStages, M, M, &indices[idxIndices], 0, NULL, snsQ, NULL ); - } - else - { - msvq_enc( cdbks, NULL, NULL, sns_ptr, levels, 3, nStages, weights, M, M, 0, NULL, &indices[idxIndices] ); - msvq_dec_float( cdbks, NULL, NULL, nStages, M, M, &indices[idxIndices], 0, NULL, snsQ, NULL ); - } - idxIndices += nStages; - - for ( i = 0; i < nStages; ++i ) - { - nbits += bits[i]; - } - } - } - - /* get back to L/F representation */ - if ( sns_stereo_mode[0] == SNS_STEREO_MODE_MS || sns_stereo_mode[1] == SNS_STEREO_MODE_MS ) - { - nSubframes = ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV; - for ( k = 0; k < nSubframes; ++k ) - { - if ( sns_stereo_mode[k] == SNS_STEREO_MODE_MS ) - { -#ifndef IVAS_FLOAT_FIXED - convertToMS( M, snsQ_out[0][k], snsQ_out[1][k], 1.f ); -#else - Word32 snsQ_out_fx[2][2][M]; - Word16 q = s_min( Q_factor_arrL( snsQ_out[0][k], M ), Q_factor_arrL( snsQ_out[0][k], M ) ) - 1; - floatToFixed_arrL( snsQ_out[0][k], snsQ_out_fx[0][k], q, M ); - floatToFixed_arrL( snsQ_out[1][k], snsQ_out_fx[1][k], q, M ); - - convertToMS_fx( M, snsQ_out_fx[0][k], snsQ_out_fx[1][k], ONE_IN_Q31 ); - - fixedToFloat_arrL( snsQ_out_fx[0][k], snsQ_out[0][k], q, M ); - fixedToFloat_arrL( snsQ_out_fx[1][k], snsQ_out[1][k], q, M ); -#endif - } - } - } - - return nbits; -} -#endif diff --git a/lib_enc/ivas_spar_encoder.c b/lib_enc/ivas_spar_encoder.c index d21a9f3eb..53359bb40 100644 --- a/lib_enc/ivas_spar_encoder.c +++ b/lib_enc/ivas_spar_encoder.c @@ -34,10 +34,8 @@ #include #include "options.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif #include "ivas_rom_com.h" #include "ivas_stat_com.h" #include "prot.h" @@ -60,223 +58,6 @@ static ivas_error ivas_spar_enc_process_fx( Encoder_Struct *st_ivas, const ENCOD * * Allocate and initialize SPAR encoder handle and sub-handles *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_enc_open( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder handle */ - const int16_t spar_reconfig_flag /* i : SPAR reconfiguration flag */ -) -{ - SPAR_ENC_HANDLE hSpar; - ENCODER_CONFIG_HANDLE hEncoderConfig; - IVAS_FB_CFG *fb_cfg; - int16_t nchan_inp, nchan_transport, sba_order_internal; - int16_t nchan_fb_in; - int16_t table_idx, active_w_mixing; - int32_t input_Fs, ivas_total_brate; - ivas_error error; - - hEncoderConfig = st_ivas->hEncoderConfig; - error = IVAS_ERR_OK; - hSpar = st_ivas->hSpar; - - if ( !spar_reconfig_flag ) - { - /* SPAR encoder handle */ - if ( ( hSpar = (SPAR_ENC_HANDLE) malloc( sizeof( SPAR_ENC_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR encoder" ); - } - } - - hSpar->spar_reconfig_flag = 0; - input_Fs = hEncoderConfig->input_Fs; - sba_order_internal = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - nchan_inp = ivas_sba_get_nchan_metadata_fx( sba_order_internal, hEncoderConfig->ivas_total_brate ); - assert( nchan_inp <= hEncoderConfig->nchan_inp ); - ivas_total_brate = hEncoderConfig->ivas_total_brate; - - nchan_fb_in = 0; - if ( st_ivas->sba_analysis_order == 1 ) - { - nchan_fb_in = FOA_CHANNELS; - } - else if ( st_ivas->sba_analysis_order == 2 ) - { - nchan_fb_in = 9; - } - else if ( st_ivas->sba_analysis_order == 3 ) - { - nchan_fb_in = 11; - } - else - { - assert( 0 && "sba_order must be 1,2, or 3!" ); - } - - nchan_transport = ivas_get_sba_num_TCs_fx( hEncoderConfig->ivas_total_brate, sba_order_internal ); - - table_idx = ivas_get_spar_table_idx_fx( ivas_total_brate, sba_order_internal, SPAR_CONFIG_BW, NULL, NULL ); - - /* MD handle */ - if ( ( error = ivas_spar_md_enc_open_fx( &( hSpar->hMdEnc ), hEncoderConfig, sba_order_internal ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* set FB config. */ - active_w_mixing = ivas_spar_br_table_consts[table_idx].active_w; - if ( ( error = ivas_fb_set_cfg( &fb_cfg, SBA_FORMAT, nchan_inp, nchan_transport, active_w_mixing, input_Fs, nchan_fb_in ) ) != IVAS_ERR_OK ) - { - return error; - } - fb_cfg->remix_order = remix_order_set[hSpar->hMdEnc->spar_md_cfg.remix_unmix_order]; - - /* FB mixer handle */ - if ( ( error = ivas_FB_mixer_open_fx( &( hSpar->hFbMixer ), input_Fs, fb_cfg, spar_reconfig_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Covariance handle */ -#ifdef IVAS_FLOAT_FIXED - IF( NE_32( ( error = ivas_spar_covar_enc_open_fx( &( hSpar->hCovEnc ), hSpar->hFbMixer->pFb, input_Fs, nchan_inp, COV_SMOOTH_SPAR, hEncoderConfig->ivas_total_brate ) ), IVAS_ERR_OK ) ) - { - return error; - } -#else - if ( ( error = ivas_spar_covar_enc_open( &( hSpar->hCovEnc ), hSpar->hFbMixer->pFb, input_Fs, nchan_inp, COV_SMOOTH_SPAR, hEncoderConfig->ivas_total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - - if ( !spar_reconfig_flag ) - { - /* Transient Detector handle */ -#ifdef IVAS_FLOAT_FIXED - IF( ( error = ivas_transient_det_open_fx( &( hSpar->hTranDet ), input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } -#else - if ( ( error = ivas_transient_det_open( &( hSpar->hTranDet ), input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - } - - /* initialization */ - hSpar->hMdEnc->table_idx = -1; - - /* AGC handle */ -#ifdef IVAS_FLOAT_FIXED - hSpar->AGC_Enable = ivas_agc_enc_get_flag( nchan_transport ); -#else - hSpar->AGC_Enable = ivas_agc_enc_get_flag( nchan_transport ); -#endif - - hSpar->hAgcEnc = NULL; - if ( hSpar->AGC_Enable ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = ivas_spar_agc_enc_open_fx( &hSpar->hAgcEnc, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) - { - return error; - } -#else - if ( ( error = ivas_spar_agc_enc_open( &hSpar->hAgcEnc, input_Fs, nchan_inp ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - } - - /* PCA handle */ - hSpar->hPCA = NULL; - if ( hEncoderConfig->Opt_PCA_ON ) - { - if ( ( hSpar->hPCA = (PCA_ENC_STATE *) malloc( sizeof( PCA_ENC_STATE ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR PCA encoder" ); - } -#ifndef IVAS_FLOAT_FIXED - ivas_pca_enc_init( hSpar->hPCA ); -#else - ivas_pca_enc_init_fx( hSpar->hPCA ); -#endif - } - - /* initialization */ - hSpar->hMdEnc->table_idx = -1; - - /*-----------------------------------------------------------------* - * Configuration - set SPAR high-level parameters - *-----------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED - ivas_spar_config_fx( hEncoderConfig->ivas_total_brate, min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ), &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, -1 ); -#else - ivas_spar_config( hEncoderConfig->ivas_total_brate, min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ), &st_ivas->nchan_transport, &st_ivas->nSCE, &st_ivas->nCPE, &hSpar->core_nominal_brate, -1 ); -#endif - - if ( st_ivas->nchan_transport == 1 ) - { - hEncoderConfig->element_mode_init = IVAS_SCE; - } - else - { - hEncoderConfig->element_mode_init = IVAS_CPE_MDCT; - } - - /*-----------------------------------------------------------------* - * Allocate and initialize Front-VAD handle - *-----------------------------------------------------------------*/ - - if ( !spar_reconfig_flag ) - { - hSpar->front_vad_flag = 0; - hSpar->front_vad_dtx_flag = 0; - hSpar->force_front_vad = 0; - - if ( hEncoderConfig->Opt_DTX_ON ) - { - if ( ( error = front_vad_create_fx( &( hSpar->hFrontVad ), hEncoderConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( hSpar->hCoreCoderVAD = (ENC_CORE_HANDLE) malloc( sizeof( Encoder_State ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CoreCoder structure\n" ) ); - } - - copy_encoder_config( st_ivas, hSpar->hCoreCoderVAD, 1 ); - - hSpar->hCoreCoderVAD->total_brate = hEncoderConfig->ivas_total_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */ - hSpar->hCoreCoderVAD->mct_chan_mode = MCT_CHAN_MODE_IGNORE; - - if ( ( error = init_encoder_ivas_fx( hSpar->hCoreCoderVAD, st_ivas, 0, hEncoderConfig->var_SID_rate_flag, hEncoderConfig->interval_SID, 1, st_ivas->ism_mode, hSpar->hCoreCoderVAD->total_brate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hSpar->hCoreCoderVAD = NULL; - hSpar->hFrontVad = NULL; - } - } - - /*-----------------------------------------------------------------* - * Final assignment - *-----------------------------------------------------------------*/ - - st_ivas->hSpar = hSpar; - - return error; -} -#else ivas_error ivas_spar_enc_open_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder handle */ const Word16 spar_reconfig_flag /* i : SPAR reconfiguration flag */ @@ -469,7 +250,6 @@ ivas_error ivas_spar_enc_open_fx( return error; } -#endif /*------------------------------------------------------------------------- * ivas_spar_enc_close() * @@ -882,7 +662,6 @@ static ivas_error ivas_spar_cov_md_process_fx( * Process call for SPAR encoder *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_spar_enc_process_fx( Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ @@ -1249,301 +1028,3 @@ static ivas_error ivas_spar_enc_process_fx( return error; } -#else -static ivas_error ivas_spar_enc_process( - Encoder_Struct *st_ivas, /* i/o: IVAS encoder structure */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ - const int16_t front_vad_flag, /* i : front-VAD decision */ - float *data_f[] /* i/o: input/transport audio channels */ -) -{ - float pcm_tmp[DIRAC_MAX_ANA_CHANS][L_FRAME48k * 2]; - float *p_pcm_tmp[DIRAC_MAX_ANA_CHANS]; -#ifdef IVAS_FLOAT_FIXED - Word32 pcm_tmp_fx[DIRAC_MAX_ANA_CHANS][L_FRAME48k * 2]; - Word32 *p_pcm_tmp_fx[DIRAC_MAX_ANA_CHANS]; - // Word16 q_pcm_tmp_fx[DIRAC_MAX_ANA_CHANS][L_FRAME48k * 2]; - // Word16 *q_p_pcm_tmp_fx[DIRAC_MAX_ANA_CHANS]; - Word16 q_pcm_fx[DIRAC_MAX_ANA_CHANS]; -#endif - int16_t i, j, input_frame, dtx_vad; - int16_t transient_det[2]; - int16_t hodirac_flag; - int32_t ivas_total_brate, input_Fs; - int16_t nchan_inp, sba_order, nchan_transport; - int16_t in_out_mixer_map[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH]; - ivas_error error; - const int16_t *order; - SPAR_ENC_HANDLE hSpar = st_ivas->hSpar; - IVAS_QMETADATA_HANDLE hQMetaData = st_ivas->hQMetaData; - int16_t ts, l_ts, num_del_samples, b, i_ts; - - float *ppIn_FR_real[IVAS_SPAR_MAX_CH], *ppIn_FR_imag[IVAS_SPAR_MAX_CH]; - float wyzx_del_buf[FOA_CHANNELS][IVAS_FB_1MS_48K_SAMP]; - int16_t dyn_active_w_flag; - int16_t nchan_fb_in; - - push_wmops( "ivas_spar_enc_process" ); - - /*-----------------------------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------------------------------*/ - - error = IVAS_ERR_OK; - - input_Fs = hEncoderConfig->input_Fs; - ivas_total_brate = hEncoderConfig->ivas_total_brate; - num_del_samples = hSpar->hFbMixer->fb_cfg->fb_latency; - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - sba_order = min( st_ivas->sba_analysis_order, IVAS_MAX_SBA_ORDER ); - nchan_inp = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); - assert( nchan_inp <= hEncoderConfig->nchan_inp ); - - nchan_fb_in = hSpar->hFbMixer->fb_cfg->nchan_fb_in; - nchan_transport = st_ivas->nchan_transport; - - for ( i = FOA_CHANNELS + 1; i < nchan_fb_in; i++ ) - { - mvr2r( data_f[HOA_keep_ind[i]], data_f[i], input_frame ); - } - - /*-----------------------------------------------------------------------------------------* - * Transient detector - *-----------------------------------------------------------------------------------------*/ - ivas_transient_det_process( hSpar->hTranDet, data_f[0], input_frame, transient_det ); - -#ifdef DEBUGGING - { - float a[2]; - a[0] = transient_det[0]; - a[1] = transient_det[1]; - dbgwrite_txt( a, 2, "fixed.txt", NULL ); - } -#endif - - if ( ivas_total_brate < IVAS_24k4 ) - { - transient_det[1] = 0; - } - - /* store previous input samples for W in local buffer */ - assert( num_del_samples <= IVAS_FB_1MS_48K_SAMP ); - if ( hSpar->hFbMixer->fb_cfg->active_w_mixing == 0 ) - { - /* fill delay (1 ms) buffer for all Transport channels */ - for ( i = 0; i < FOA_CHANNELS; i++ ) - { - int16_t idx = hSpar->hFbMixer->fb_cfg->remix_order[i]; - mvr2r( &hSpar->hFbMixer->ppFilterbank_prior_input[idx][hSpar->hFbMixer->fb_cfg->prior_input_length - num_del_samples], wyzx_del_buf[idx], num_del_samples ); - } - } - - /*-----------------------------------------------------------------------------------------* - * FB mixer ingest - *-----------------------------------------------------------------------------------------*/ - - for ( i = 0; i < nchan_fb_in; i++ ) - { - p_pcm_tmp[i] = pcm_tmp[i]; - } - - /* run Filter Bank overlapping MDFT analysis first, then we can use the temporary buffer for Parameter MDFT analysis*/ - ivas_fb_mixer_pcm_ingest( hSpar->hFbMixer, data_f, p_pcm_tmp, input_frame, hSpar->hMdEnc->HOA_md_ind ); - - /* prepare Parameter MDFT analysis */ - for ( i = 0; i < nchan_fb_in; i++ ) - { - ppIn_FR_real[i] = p_pcm_tmp[i]; - ppIn_FR_imag[i] = p_pcm_tmp[i] + input_frame; - p_pcm_tmp[i] = data_f[i]; - } - - l_ts = input_frame / MAX_PARAM_SPATIAL_SUBFRAMES; - - for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) - { - ivas_fb_mixer_get_windowed_fr( hSpar->hFbMixer, p_pcm_tmp, ppIn_FR_real, ppIn_FR_imag, l_ts, l_ts, nchan_fb_in ); - - ivas_fb_mixer_update_prior_input( hSpar->hFbMixer, p_pcm_tmp, l_ts, nchan_fb_in ); - - for ( i = 0; i < nchan_fb_in; i++ ) - { - p_pcm_tmp[i] += l_ts; - ppIn_FR_real[i] += l_ts; - ppIn_FR_imag[i] += l_ts; - } - } - - /* turn pointers back to the local buffer, needed for the following processing */ - for ( i = 0; i < nchan_fb_in; i++ ) - { - ppIn_FR_real[i] = pcm_tmp[i]; - ppIn_FR_imag[i] = pcm_tmp[i] + input_frame; - p_pcm_tmp[i] = pcm_tmp[i]; - } - - dtx_vad = ( hEncoderConfig->Opt_DTX_ON == 1 ) ? front_vad_flag : 1; - - /*-----------------------------------------------------------------------------------------* - * DirAC encoding - *-----------------------------------------------------------------------------------------*/ - - hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ); - - if ( ( error = ivas_dirac_enc( st_ivas->hDirAC, hQMetaData, hMetaData, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, dtx_vad, hEncoderConfig->ivas_format, hodirac_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Set Energy Ratio to 0.0 if the mono flag has been set */ - if ( hQMetaData->dirac_mono_flag ) - { - for ( b = hQMetaData->q_direction->cfg.start_band; b < hQMetaData->q_direction->cfg.nbands; b++ ) - { - for ( i_ts = 0; i_ts < ( ( dtx_vad == 1 ) ? hQMetaData->q_direction[0].cfg.nblocks : 1 ); i_ts++ ) - { - hQMetaData->q_direction[0].band_data[b].energy_ratio[i_ts] = 0.0f; - } - } - } - - /*-----------------------------------------------------------------------------------------* - * Covariance and MD processing - *-----------------------------------------------------------------------------------------*/ - - if ( ( error = ivas_spar_cov_md_process( hEncoderConfig, st_ivas->hSpar, st_ivas->hQMetaData, hMetaData, nchan_inp, sba_order, ppIn_FR_real, ppIn_FR_imag, transient_det, dtx_vad, nchan_transport, &dyn_active_w_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /*-----------------------------------------------------------------------------------------* - * FB mixer - *-----------------------------------------------------------------------------------------*/ - - ivas_fb_mixer_get_in_out_mapping( hSpar->hFbMixer->fb_cfg, in_out_mixer_map ); - -#ifdef DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS - { - static FILE *fid = 0; - int16_t band = 9; - if ( !fid ) - { - fid = fopen( "pred_coeffs_enc.txt", "wt" ); - } - fprintf( fid, "%.6f\n", hSpar->hMdEnc->mixer_mat[1][0][band] ); - } -#endif - - ivas_fb_mixer_process( hSpar->hFbMixer, hSpar->hMdEnc->mixer_mat, p_pcm_tmp, input_frame, in_out_mixer_map ); - - if ( hSpar->hFbMixer->fb_cfg->active_w_mixing == 0 ) - { - - /*cross fade between new active W channels and old passive W channel*/ - if ( dyn_active_w_flag == 1 ) - { - if ( hSpar->hMdEnc->spar_md.prior_dyn_active_w_flag != dyn_active_w_flag ) - { - float new_w[L_FRAME48k]; - - /* delayed W */ - mvr2r( wyzx_del_buf[0], p_pcm_tmp[0], num_del_samples ); - mvr2r( data_f[0], p_pcm_tmp[0] + num_del_samples, input_frame - num_del_samples ); - - mvr2r( wyzx_del_buf[hSpar->hMdEnc->spar_md.res_ind], new_w, num_del_samples ); - mvr2r( data_f[hSpar->hMdEnc->spar_md.res_ind], &new_w[num_del_samples], input_frame - num_del_samples ); - - if ( hSpar->hMdEnc->spar_md.prior_dyn_active_w_flag == 0 && dyn_active_w_flag == 1 ) - { - ivas_fb_mixer_cross_fading( hSpar->hFbMixer, p_pcm_tmp, p_pcm_tmp[0], new_w, 0, input_frame, 0 ); - } - else if ( hSpar->hMdEnc->spar_md.prior_dyn_active_w_flag == 1 && dyn_active_w_flag == 0 ) - { - ivas_fb_mixer_cross_fading( hSpar->hFbMixer, p_pcm_tmp, new_w, p_pcm_tmp[0], 0, input_frame, 0 ); - } - } - else - { - mvr2r( wyzx_del_buf[hSpar->hMdEnc->spar_md.res_ind], p_pcm_tmp[0], num_del_samples ); - mvr2r( data_f[hSpar->hMdEnc->spar_md.res_ind], p_pcm_tmp[0] + num_del_samples, input_frame - num_del_samples ); - } - } - else - { - /* delayed W */ - mvr2r( wyzx_del_buf[0], p_pcm_tmp[0], num_del_samples ); - mvr2r( data_f[0], p_pcm_tmp[0] + num_del_samples, input_frame - num_del_samples ); - } - - for ( i = 1; i < hSpar->hFbMixer->fb_cfg->num_out_chans; i++ ) - { - int16_t idx = hSpar->hFbMixer->fb_cfg->remix_order[i]; - - /* delayed, reorderd and accumulated with (negative) prediction from W */ - v_add( wyzx_del_buf[idx], p_pcm_tmp[i], p_pcm_tmp[i], num_del_samples ); - v_add( data_f[idx], p_pcm_tmp[i] + num_del_samples, p_pcm_tmp[i] + num_del_samples, input_frame - num_del_samples ); - } - } - - /*-----------------------------------------------------------------------------------------* - * PCA encoder - *-----------------------------------------------------------------------------------------*/ - - if ( hSpar->hPCA != NULL ) - { - ivas_pca_enc( hEncoderConfig, hSpar->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS ); - } - else - { - if ( ivas_total_brate == PCA_BRATE && sba_order == SBA_FOA_ORDER ) - { - /* write PCA bypass bit */ - push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); - } - } - - - /*-----------------------------------------------------------------------------------------* - * AGC - *-----------------------------------------------------------------------------------------*/ - - if ( dtx_vad == 1 ) - { - if ( hSpar->AGC_Enable != 0 ) - { - ivas_agc_enc_process( hSpar->hAgcEnc, hMetaData, p_pcm_tmp, p_pcm_tmp, hSpar->hFbMixer->fb_cfg->num_out_chans, hEncoderConfig ); - } - } - - - /*-----------------------------------------------------------------------------------------* - * Re-order the dmx back to ACN/SN3D format - *-----------------------------------------------------------------------------------------*/ - - order = remix_order_set[hSpar->hMdEnc->spar_md_cfg.remix_unmix_order]; - - for ( j = 0; j < nchan_transport; j++ ) - { - if ( st_ivas->nchan_transport < 3 ) - { - mvr2r( p_pcm_tmp[j], data_f[j], input_frame ); - } - else - { - mvr2r( p_pcm_tmp[j], data_f[order[j]], input_frame ); - } - } - for ( ; j < IVAS_SPAR_MAX_DMX_CHS; j++ ) - { - set_f( data_f[order[j]], 0.0f, input_frame ); - } - - hSpar->hMdEnc->spar_md.prior_dyn_active_w_flag = dyn_active_w_flag; - - pop_wmops(); - - return error; -} -#endif diff --git a/lib_enc/ivas_spar_md_enc.c b/lib_enc/ivas_spar_md_enc.c index 11e585cf5..21c876f56 100644 --- a/lib_enc/ivas_spar_md_enc.c +++ b/lib_enc/ivas_spar_md_enc.c @@ -34,31 +34,21 @@ #include #include "options.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif #include "ivas_prot.h" #include "ivas_prot_fx.h" #include "math.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*------------------------------------------------------------------------------------------* * PreProcessor *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static const float pr_boost_range[2] = { 0.1f, 0.4f }; -#else /*Q28*/ static const Word32 pr_boost_range_fx[2] = { 26843546, 107374182 }; -#endif typedef enum ivas_strats_t { @@ -77,71 +67,30 @@ typedef enum ivas_strats_t /*------------------------------------------------------------------------------------------* * Static functions declaration *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_band_mixer( float *cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const int16_t num_ch, int16_t *num_bands, int16_t red_band_fact ); -#else static void ivas_band_mixer_fx( Word32 *cov_re[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], Word16 *cov_real_q[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], const Word16 num_ch, Word16 *num_bands, Word16 red_band_fact ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_huffman_coded_bs_fx( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const Word16 nB, const Word16 qsi, const Word16 bands_bw ); -#else -static int16_t ivas_get_huffman_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t nB, const int16_t qsi, const int16_t bands_bw ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_arith_coded_bs_fx( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const Word16 *pDo_diff, const Word16 bands_bw, const Word16 nB, const Word16 qsi, const Word16 strat, const Word32 ivas_total_brate ); -#else -static int16_t ivas_get_arith_coded_bs( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, const int16_t *pDo_diff, const int16_t bands_bw, const int16_t nB, const int16_t qsi, const int16_t strat, const int32_t ivas_total_brate ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_spar_set_enc_config_fx( ivas_spar_md_enc_state_t *hMdEnc, Word16 *max_freq_per_chan, const Word16 nchan_transport, Word32 *pFC, const Word16 nchan_inp ); -#else -static void ivas_spar_set_enc_config( ivas_spar_md_enc_state_t *hMdEnc, int16_t *max_freq_per_chan, const int16_t nchan_transport, float *pFC, const int16_t nchan_inp ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void ivas_select_next_strat_fx( ivas_strats_t prior_strat, ivas_strats_t cs[MAX_QUANT_STRATS], const Word16 dmx_switch, const Word16 dtx_vad ); -#else -static void ivas_select_next_strat( ivas_strats_t prior_strat, ivas_strats_t cs[MAX_QUANT_STRATS], const int16_t dmx_switch, const int16_t dtx_vad ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_store_prior_coeffs_fx( ivas_spar_md_enc_state_t *hMdEnc, const Word16 num_bands, const Word16 strat, const Word16 dtx_vad, const Word16 qsi ); -#else -static void ivas_store_prior_coeffs( ivas_spar_md_enc_state_t *hMdEnc, const int16_t num_bands, const int16_t strat, const int16_t dtx_vad, const int16_t qsi ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_write_spar_md_bitstream_fx( ivas_spar_md_enc_state_t *hMdEnc, const Word16 nB, const Word16 bands_bw, BSTR_ENC_HANDLE hMetaData, const Word32 ivas_total_brate, const Word16 strat, const Word16 qsi ); -#else -static void ivas_write_spar_md_bitstream( ivas_spar_md_enc_state_t *hMdEnc, const int16_t nB, const int16_t bands_bw, BSTR_ENC_HANDLE hMetaData, const int32_t ivas_total_brate, const int16_t strat, const int16_t qsi ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_quant_pred_coeffs_dtx( ivas_spar_md_t *pSpar_md, const float *pValues, const int16_t ndm, int16_t *pIndex, const int16_t dim1, float *pQuant ); -static void ivas_quant_p_per_band_dtx( float *pP_mat, const int16_t num_dec, const int16_t num_dmx, int16_t *ppIdx_pd, float *pP_out, const int16_t num_ch ); -#else static void ivas_spar_quant_pred_coeffs_dtx_fx( ivas_spar_md_t *pSpar_md, const Word32 *pValues, const Word16 ndm, Word16 *pIndex, const Word16 dim1, Word32 *pQuant ); static void ivas_quant_p_per_band_dtx_fx( Word32 *pP_mat, const Word16 num_dec, const Word16 num_dmx, Word16 *ppIdx_pd, Word32 *pP_out, const Word16 num_ch ); -#endif static void ivas_write_parameter_bitstream_dtx_fx( ivas_spar_md_t *pSpar_md, BSTR_ENC_HANDLE hMetaData, Word16 *num_dmx, Word16 *num_dec, const Word16 num_bands ); -#ifndef IVAS_FLOAT_FIXED -static void ivas_quant_p_per_band( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const int16_t num_ch ); -#else static void ivas_quant_p_per_band_fx( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const Word16 num_ch ); -#endif static void ivas_quant_c_per_band_fx( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const Word16 ndec, const Word16 ndm, const Word16 q_C ); -#ifndef IVAS_FLOAT_FIXED -static void ivas_quant_pred_coeffs_per_band( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const int16_t num_ch ); -#else static void ivas_quant_pred_coeffs_per_band_fx( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, ivas_quant_strat_t *pQs, const Word16 num_ch ); -#endif /*------------------------------------------------------------------------- * ivas_spar_md_enc_open() @@ -149,84 +98,6 @@ static void ivas_quant_pred_coeffs_per_band_fx( ivas_band_coeffs_t *pband_coeffs * Allocate and initialize SPAR MD encoder handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_md_enc_open( - ivas_spar_md_enc_state_t **hMdEnc_in, /* i/o: SPAR MD encoder handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - ivas_spar_md_enc_state_t *hMdEnc; - ivas_error error; - int16_t num_channels, i, j; - error = IVAS_ERR_OK; - - if ( ( hMdEnc = (ivas_spar_md_enc_state_t *) malloc( sizeof( ivas_spar_md_enc_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD encoder" ); - } - -#ifdef IVAS_FLOAT_FIXED - num_channels = ivas_sba_get_nchan_metadata_fx( sba_order, hEncoderConfig->ivas_total_brate ); -#else - num_channels = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); -#endif // IVAS_FLOAT_FIXED - - if ( ( hMdEnc->spar_md.band_coeffs = (ivas_band_coeffs_t *) malloc( IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for band_coeffs in SPAR MD" ); - } - IF( ( hMdEnc->mixer_mat_fx = (Word32 ***) malloc( num_channels * sizeof( Word32 ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - FOR( i = 0; i < num_channels; i++ ) - { - IF( ( hMdEnc->mixer_mat_fx[i] = (Word32 **) malloc( num_channels * sizeof( Word32 * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - FOR( j = 0; j < num_channels; j++ ) - { - IF( ( hMdEnc->mixer_mat_fx[i][j] = (Word32 *) malloc( IVAS_MAX_NUM_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - memset( hMdEnc->spar_md.band_coeffs, 0, IVAS_MAX_NUM_BANDS * sizeof( ivas_band_coeffs_t ) ); - IF( ( hMdEnc->mixer_mat_fx = (Word32 ***) malloc( num_channels * sizeof( Word32 ** ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - FOR( i = 0; i < num_channels; i++ ) - { - IF( ( hMdEnc->mixer_mat_fx[i] = (Word32 **) malloc( num_channels * sizeof( Word32 * ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - FOR( j = 0; j < num_channels; j++ ) - { - IF( ( hMdEnc->mixer_mat_fx[i][j] = (Word32 *) malloc( IVAS_MAX_NUM_BANDS * sizeof( Word32 ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD matrix" ); - } - } - } - hMdEnc->q_mixer_mat_fx = 0; -#endif - - if ( ( error = ivas_spar_md_enc_init_fx( hMdEnc, hEncoderConfig, sba_order ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hMdEnc_in = hMdEnc; - - return error; -} -#else ivas_error ivas_spar_md_enc_open_fx( ivas_spar_md_enc_state_t **hMdEnc_in, /* i/o: SPAR MD encoder handle */ const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ @@ -280,14 +151,12 @@ ivas_error ivas_spar_md_enc_open_fx( return error; } -#endif /*------------------------------------------------------------------------- * ivas_spar_md_enc_close() * * Deallocate SPAR MD encoder handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_spar_md_enc_close_fx( ivas_spar_md_enc_state_t **hMdEnc_in /* i/o: SPAR MD encoder handle */ ) @@ -328,60 +197,6 @@ void ivas_spar_md_enc_close_fx( return; } -#else -void ivas_spar_md_enc_close( - ivas_spar_md_enc_state_t **hMdEnc_in /* i/o: SPAR MD encoder handle */ -) -{ - int16_t num_channels, i, j; - ivas_spar_md_enc_state_t *hMdEnc; - - if ( hMdEnc_in == NULL || *hMdEnc_in == NULL ) - { - return; - } - - hMdEnc = *hMdEnc_in; - num_channels = hMdEnc->num_umx_ch; - - if ( hMdEnc->spar_md.band_coeffs != NULL ) - { - free( hMdEnc->spar_md.band_coeffs ); - hMdEnc->spar_md.band_coeffs = NULL; - } - if ( hMdEnc->mixer_mat != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - for ( j = 0; j < num_channels; j++ ) - { - free( hMdEnc->mixer_mat[i][j] ); - } - free( hMdEnc->mixer_mat[i] ); - } - free( hMdEnc->mixer_mat ); - } - - if ( hMdEnc->mixer_mat_local != NULL ) - { - for ( i = 0; i < num_channels; i++ ) - { - - for ( j = 0; j < num_channels; j++ ) - { - free( hMdEnc->mixer_mat_local[i][j] ); - } - free( hMdEnc->mixer_mat_local[i] ); - } - free( hMdEnc->mixer_mat_local ); - } - - free( *hMdEnc_in ); - *hMdEnc_in = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -390,79 +205,6 @@ void ivas_spar_md_enc_close( * SPAR MD encoder initialization *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_spar_md_enc_init( - ivas_spar_md_enc_state_t *hMdEnc, /* o : MD encoder handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - const int16_t sba_order /* i : Ambisonic (SBA) order */ -) -{ - float pFC[IVAS_MAX_NUM_BANDS]; - int16_t table_idx; - float PR_minmax[2]; - int16_t num_channels, i, j, k; - - ivas_sba_get_spar_hoa_md_flag( sba_order, hEncoderConfig->ivas_total_brate, &hMdEnc->spar_hoa_md_flag, &hMdEnc->spar_hoa_dirac2spar_md_flag ); - num_channels = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); - ivas_sba_get_spar_hoa_ch_ind( num_channels, hEncoderConfig->ivas_total_brate, hMdEnc->HOA_md_ind ); - - table_idx = ivas_get_spar_table_idx( hEncoderConfig->ivas_total_brate, sba_order, SPAR_CONFIG_BW, NULL, NULL ); - - hMdEnc->spar_md.prior_dyn_active_w_flag = 0; - - ivas_spar_set_bitrate_config_fx( &hMdEnc->spar_md_cfg, table_idx, ( hMdEnc->spar_hoa_md_flag ) ? IVAS_MAX_NUM_BANDS : SPAR_DIRAC_SPLIT_START_BAND, - hMdEnc->spar_hoa_dirac2spar_md_flag, 1, hEncoderConfig->Opt_PCA_ON, ivas_agc_enc_get_flag( ivas_spar_br_table_consts[table_idx].nchan_transport ) ); - - /* get FB coefficients */ - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - pFC[i] = ivas_fb_fcs_12band_1ms[i] * hEncoderConfig->input_Fs * 0.5f; - } - - ivas_spar_set_enc_config( hMdEnc, hMdEnc->spar_md_cfg.max_freq_per_chan, hMdEnc->spar_md_cfg.nchan_transport, pFC, num_channels ); - - if ( hMdEnc->spar_md_cfg.nchan_transport != 2 && ( ( hMdEnc->spar_md_cfg.remix_unmix_order == 1 ) || ( hMdEnc->spar_md_cfg.remix_unmix_order == 2 ) ) ) - { - return IVAS_ERR_INTERNAL; - } - - ivas_spar_arith_coeffs_com_init( &hMdEnc->arith_coeffs, &hMdEnc->spar_md_cfg, table_idx, ENC ); - ivas_spar_huff_coeffs_com_init( &hMdEnc->huff_coeffs, NULL, table_idx, ENC ); - - if ( hEncoderConfig->Opt_DTX_ON == 1 ) - { - /* DTX quant init */ - PR_minmax[0] = hMdEnc->spar_md_cfg.quant_strat[0].PR.min; - PR_minmax[1] = hMdEnc->spar_md_cfg.quant_strat[0].PR.max; - ivas_spar_quant_dtx_init( &hMdEnc->spar_md, PR_minmax ); - } - - hMdEnc->spar_md_cfg.prior_strat = START; - hMdEnc->spar_md_cfg.prev_quant_idx = -1; -#ifdef MSAN_FIX - FOR( i = 0; i < num_channels; i++ ) - { - FOR( j = 0; j < num_channels; j++ ) - { - FOR( k = 0; k < IVAS_MAX_NUM_BANDS; k++ ) - { - hMdEnc->mixer_mat_fx[i][j][k] = 0; - move32(); - } - } - } - hMdEnc->q_mixer_mat_fx = Q30; - move16(); -#endif - - ivas_clear_band_coeffs_fx( hMdEnc->spar_md.band_coeffs, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdEnc->spar_md.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdEnc->spar_md_prior.band_coeffs_idx, IVAS_MAX_NUM_BANDS ); - ivas_clear_band_coeff_idx( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, IVAS_MAX_NUM_BANDS ); - - return IVAS_ERR_OK; -} -#else ivas_error ivas_spar_md_enc_init_fx( ivas_spar_md_enc_state_t *hMdEnc, /* o : MD encoder handle */ const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ @@ -544,56 +286,12 @@ ivas_error ivas_spar_md_enc_init_fx( return IVAS_ERR_OK; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_set_enc_config() * * Set configuration for SPAR MD encoder *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_spar_set_enc_config( - ivas_spar_md_enc_state_t *hMdEnc, - int16_t *max_freq_per_chan, - const int16_t nchan_transport, - float *pFC, - const int16_t nchan_inp ) -{ - int16_t i, j; - int16_t tmp_dmx_ch; - - for ( i = 0; i < nchan_transport; i++ ) - { - if ( max_freq_per_chan != NULL ) - { - hMdEnc->spar_md_cfg.max_freq_per_chan[i] = ( max_freq_per_chan[i] != 0 ) ? max_freq_per_chan[i] : max_freq_per_chan[0]; - } - else - { - hMdEnc->spar_md_cfg.max_freq_per_chan[i] = IVAS_SPAR_FOA_DFLT_FREQ_PER_CHAN; - } - } - hMdEnc->num_umx_ch = nchan_inp; - hMdEnc->num_decorr = nchan_inp - 1; - - for ( i = 0; i < IVAS_MAX_NUM_BANDS; i++ ) - { - tmp_dmx_ch = 0; - for ( j = 0; j < nchan_transport; j++ ) - { - if ( pFC[i] < hMdEnc->spar_md_cfg.max_freq_per_chan[j] ) - { - tmp_dmx_ch += 1; - } - } - - hMdEnc->spar_md_cfg.num_dmx_chans_per_band[i] = tmp_dmx_ch; - hMdEnc->spar_md_cfg.num_decorr_per_band[i] = hMdEnc->num_umx_ch - tmp_dmx_ch; - } - - return; -} -#else static void ivas_spar_set_enc_config_fx( ivas_spar_md_enc_state_t *hMdEnc, Word16 *max_freq_per_chan, @@ -648,7 +346,6 @@ static void ivas_spar_set_enc_config_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_band_limit_dmx_matrix() * @@ -751,7 +448,6 @@ static void write_metadata_buffer_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_spar_md_enc_process() * @@ -1286,521 +982,73 @@ ivas_error ivas_spar_md_enc_process_fx( return IVAS_ERR_OK; } -#else /*-----------------------------------------------------------------------------------------* - * Function ivas_spar_md_enc_process() + * Function ivas_band_mixer() * - * SPAR FoA Meta Data generation process + * band mixer *-----------------------------------------------------------------------------------------*/ -ivas_error ivas_spar_md_enc_process( - ivas_spar_md_enc_state_t *hMdEnc, /* i/o: SPAR MD encoder handle */ - const ENCODER_CONFIG_HANDLE hEncoderConfig, /* i : configuration structure */ - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - float *cov_dtx_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ - const int16_t dtx_vad, - const int16_t nchan_inp, - const int16_t sba_order, /* i : Ambisonic (SBA) order */ - float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH], /* i : prior mixer_matrix */ - const int16_t dyn_active_w_flag, /* i : flag to indicate dynamic active W */ - const int16_t dirac_mono_flag /* i : flag to indicate mono only mode in SBA */ -) +static void ivas_band_mixer_fx( + Word32 *cov_real_fx[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + Word16 *cov_real_q[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], + const Word16 num_ch, + Word16 *num_bands, + Word16 red_band_fact ) { - float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; - float dm_fv_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; - int16_t i, j, b, qsi, ndm, ndec, num_ch, num_quant_strats; - float pred_coeffs_re_local[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; - int16_t k, bwidth, num_bands, num_bands_full, num_bands_bw; - int16_t active_w, nchan_transport, dmx_switch, strat; - int16_t nB, bands_bw, packed_ok = 0; - ivas_strats_t cs[MAX_CODING_STRATS]; - int16_t code_strat; - int16_t bit_pos_start, next_ind_start; - BSTR_ENC_DATA hMetaData_tmp; - Indice *ind_list_tmp; - int16_t md_indices_allocated; - int16_t max_num_indices_tmp; - float Wscale[IVAS_MAX_NUM_BANDS]; - - /*extra 16 bits for arithmetic coder as overshoot check is after a symbol is written*/ - md_indices_allocated = hMdEnc->spar_md_cfg.max_bits_per_blk + IVAS_SPAR_ARITH_OVERSHOOT_BITS; - if ( ( ind_list_tmp = (Indice *) malloc( sizeof( Indice ) * md_indices_allocated ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR MD encoder indices" ); - } - - num_quant_strats = hMdEnc->spar_md_cfg.num_quant_strats; -#ifndef IVAS_FLOAT_FIXED - num_ch = ivas_sba_get_nchan_metadata( sba_order, hEncoderConfig->ivas_total_brate ); -#else - num_ch = ivas_sba_get_nchan_metadata_fx( sba_order, hEncoderConfig->ivas_total_brate ); -#endif - active_w = ( hMdEnc->spar_md_cfg.active_w == 1 ) || ( dyn_active_w_flag == 1 ); - nchan_transport = hMdEnc->spar_md_cfg.nchan_transport; + Word16 i, j, k, b, orig_band, rem_band; + Word32 avg_cov; + Word16 avg_cov_e; -#ifdef IVAS_FLOAT_FIXED - bwidth = ivas_get_bw_idx_from_sample_rate_fx( hEncoderConfig->input_Fs ); -#else - bwidth = ivas_get_bw_idx_from_sample_rate( hEncoderConfig->input_Fs ); -#endif - bwidth = min( bwidth, hEncoderConfig->max_bwidth ); - int16_t active_w_vlbr; - active_w_vlbr = ( hEncoderConfig->ivas_total_brate < IVAS_24k4 ) ? 1 : 0; - num_bands = ivas_get_num_bands_from_bw_idx( SPAR_CONFIG_BW ); - if ( hMdEnc->spar_hoa_md_flag == 0 ) - { - num_bands = min( num_bands, SPAR_DIRAC_SPLIT_START_BAND ); - } - num_bands_full = num_bands; - num_bands_bw = ivas_get_num_bands_from_bw_idx( bwidth ); + orig_band = *num_bands; + move16(); + *num_bands = idiv1616( *num_bands, red_band_fact ); + move16(); + rem_band = sub( orig_band, i_mult( *num_bands, red_band_fact ) ); - if ( dtx_vad == 0 ) + FOR( i = 0; i < num_ch; i++ ) { - for ( i = 0; i < nchan_inp; i++ ) + FOR( j = 0; j < num_ch; j++ ) { - for ( j = 0; j < nchan_inp; j++ ) + FOR( k = 0; k < *num_bands - 1; k++ ) { - cov_real[i][j] = cov_dtx_real[i][j]; + avg_cov_e = 0; + move16(); + avg_cov = 0; + move32(); + FOR( b = 0; b < red_band_fact; b++ ) + { + avg_cov = BASOP_Util_Add_Mant32Exp( avg_cov, avg_cov_e, cov_real_fx[i][j][red_band_fact * k + b], sub( Q31, cov_real_q[i][j][red_band_fact * k + b] ), &avg_cov_e ); + } + cov_real_fx[i][j][k] = avg_cov; + move32(); + cov_real_q[i][j][k] = sub( Q31, avg_cov_e ); + move16(); } - } - } - for ( i = 0; i < nchan_inp; i++ ) - { - for ( j = 0; j < nchan_inp; j++ ) - { - for ( k = num_bands_bw; k < IVAS_MAX_NUM_BANDS; k++ ) + avg_cov_e = 0; + move16(); + avg_cov = 0; + move32(); + FOR( b = 0; b < red_band_fact + rem_band; b++ ) { - cov_real[i][j][k] = 0; + avg_cov = BASOP_Util_Add_Mant32Exp( avg_cov, avg_cov_e, cov_real_fx[i][j][red_band_fact * ( *num_bands - 1 ) + b], sub( Q31, cov_real_q[i][j][red_band_fact * ( *num_bands - 1 ) + b] ), &avg_cov_e ); } - } - } - if ( hEncoderConfig->ivas_total_brate == BRATE_SPAR_Q_STRAT && sba_order == SBA_FOA_ORDER ) - { - /* make sure that qsi is always 0 (temporary bits are '00') */ - num_quant_strats = 1; + cov_real_fx[i][j][*num_bands - 1] = avg_cov; + move32(); + cov_real_q[i][j][*num_bands - 1] = sub( Q31, avg_cov_e ); + move16(); + } } - hMetaData_tmp.ind_list = ind_list_tmp; - hMetaData_tmp.nb_bits_tot = 0; - max_num_indices_tmp = MAX_BITS_METADATA; - hMetaData_tmp.ivas_max_num_indices = &max_num_indices_tmp; - hMetaData_tmp.ivas_ind_list_zero = (Indice **) ( &hMetaData_tmp.ind_list ); - hMetaData_tmp.st_ivas = NULL; - - /* Save state of metadata bitstream buffer */ - bit_pos_start = hMetaData->nb_bits_tot; - next_ind_start = hMetaData->nb_ind_tot; - - dmx_switch = 0; - - if ( dtx_vad == 0 ) - { - nB = SPAR_DTX_BANDS; - bands_bw = num_bands / nB; - - ivas_band_mixer( cov_real, num_ch, &num_bands, bands_bw ); - } - else if ( hEncoderConfig->ivas_total_brate < IVAS_24k4 ) - { - bands_bw = 2; - nB = num_bands / bands_bw; - - ivas_band_mixer( cov_real, num_ch, &num_bands, bands_bw ); - } - else - { - nB = num_bands; - bands_bw = 1; - } - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) - { - for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) - { - pred_coeffs_re_local[i][b] = hMdEnc->spar_md.band_coeffs[b].pred_re[i]; - } - } - } - - ivas_compute_spar_params( cov_real, dm_fv_re, 0, hMdEnc->mixer_mat, 0, nB, dtx_vad, num_ch, bands_bw, active_w, active_w_vlbr, &hMdEnc->spar_md_cfg, &hMdEnc->spar_md, Wscale, 0, dyn_active_w_flag ); - - if ( dirac_mono_flag ) - { - int16_t i_ts; - int16_t num_md_sub_frames = 1; - - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[0]; - - for ( i_ts = 0; i_ts < num_md_sub_frames; i_ts++ ) - { - for ( b = 0; b < IVAS_MAX_NUM_BANDS; b++ ) - { - for ( j = 0; j < ndm + ndec - 1; j++ ) - { - hMdEnc->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].pred_re[j] = 0.0f; - } - for ( j = 0; j < ndec; j++ ) - { - for ( k = 0; k < ndm - 1; k++ ) - { - hMdEnc->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].C_re[j][k] = 0.0f; - } - } - - for ( j = 0; j < ndec; j++ ) - { - hMdEnc->spar_md.band_coeffs[b + i_ts * IVAS_MAX_NUM_BANDS].P_re[j] = 0.0f; - } - } - } - } - - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - hMdEnc->mixer_mat_local[i][j][b] = hMdEnc->mixer_mat[i][j][b]; - } - } - } - code_strat = 0; - for ( qsi = 0; qsi < num_quant_strats; qsi++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[b * bands_bw]; - - if ( dtx_vad == 1 ) - { - if ( ndm != num_ch ) - { - ivas_quant_p_per_band( &hMdEnc->spar_md.band_coeffs[b], &hMdEnc->spar_md.band_coeffs_idx[b], &hMdEnc->spar_md_cfg.quant_strat[qsi], num_ch ); - } - ivas_quant_pred_coeffs_per_band( &hMdEnc->spar_md.band_coeffs[b], &hMdEnc->spar_md.band_coeffs_idx[b], &hMdEnc->spar_md_cfg.quant_strat[qsi], num_ch ); - if ( active_w_vlbr ) - { - for ( i = 0; i < 3; i++ ) - { - int16_t i2; - i2 = 0; - switch ( i ) /* PRED (Y,Z,X) and DECD (Y,X,Z) coeffs are in different orders */ - { - case 0: - i2 = 0; - break; - case 1: - i2 = 2; - break; - case 2: - i2 = 1; - break; - } - if ( ( hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[i] == 0 ) && ( hMdEnc->spar_md.band_coeffs_idx[b].decd_index_re[i2] == 0 ) && ( hMdEnc->spar_md.band_coeffs[b].pred_re[i] != 0.0f ) && ( cov_real[i + 1][i + 1][b] != 0.0f ) ) - { - /* bump up the Pred coeff */ - float PR_uq, PR_step; - ivas_quant_strat_t qs; - qs = hMdEnc->spar_md_cfg.quant_strat[qsi]; - PR_uq = hMdEnc->spar_md.band_coeffs[b].pred_re[i]; - PR_step = ( qs.PR.max - qs.PR.min ) / ( qs.PR.q_levels[0] - 1 ); - - int16_t PR_sign; - PR_sign = ( PR_uq > 0 ) - ( PR_uq < 0 ); - - hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[i] = PR_sign; - - /* deindex the modified coefficient */ - hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] = PR_sign * PR_step; - } - } - } - } - else - { - if ( ndm != num_ch ) - { - ivas_quant_p_per_band_dtx( hMdEnc->spar_md.band_coeffs[b].P_re, ndec, ndm, &hMdEnc->spar_md.band_coeffs_idx[b].decd_index_re[0], hMdEnc->spar_md.band_coeffs[b].P_quant_re, num_ch ); - } - - for ( i = 0; i < num_ch - 1; i++ ) - { - hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] = 0; - } - ivas_spar_quant_pred_coeffs_dtx( &hMdEnc->spar_md, hMdEnc->spar_md.band_coeffs[b].pred_re, ndm, hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re, num_ch - 1, hMdEnc->spar_md.band_coeffs[b].pred_quant_re ); - } - } - - for ( i = 0; i < num_ch - 1; i++ ) - { - for ( b = 0; b < num_bands; b++ ) - { - pred_coeffs_re[i][b] = Wscale[b] * hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i]; - } - } - - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - for ( b = SPAR_DIRAC_SPLIT_START_BAND; b < num_bands; b++ ) - { - for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) - { - /* Use the prediction coeffs computed based on DirAC MD to generate mixer matrix */ - pred_coeffs_re[i][b] = pred_coeffs_re_local[i][b]; - hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] = 0; - hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[i] = 0; - } - } - } - - ivas_create_fullr_dmx_mat( pred_coeffs_re, dm_fv_re, hMdEnc->mixer_mat, num_ch, 0, num_bands, active_w, &hMdEnc->spar_md_cfg ); - - for ( b = 0; b < num_bands; b++ ) - { - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[b * bands_bw]; - - for ( i = 0; i < num_ch; i++ ) - { - hMdEnc->mixer_mat[0][i][b] *= Wscale[b]; - } - - if ( ( ndm != num_ch ) && ( ndm != 1 ) ) - { - ivas_calc_c_p_coeffs( &hMdEnc->spar_md, cov_real, 0, hMdEnc->mixer_mat, num_ch, ndm, b, dtx_vad, 0, dyn_active_w_flag ); - - if ( dirac_mono_flag ) - { - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[0]; - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[0]; - for ( j = 0; j < ndec; j++ ) - { - for ( k = 0; k < ndm - 1; k++ ) - { - hMdEnc->spar_md.band_coeffs[b].C_re[j][k] = 0.0f; - } - } - } - - ivas_quant_c_per_band( &hMdEnc->spar_md.band_coeffs[b], &hMdEnc->spar_md.band_coeffs_idx[b], - &hMdEnc->spar_md_cfg.quant_strat[qsi], ndec, ndm ); - } - } - - /* band limit downmix matrix */ - ivas_band_limit_dmx_matrix( hMdEnc, num_ch, num_bands, bands_bw ); - - /* band mixing */ - if ( bands_bw > 1 ) - { - ivas_band_mixing( hMdEnc, num_ch, num_bands, nchan_transport, num_bands_full ); - } - - if ( dtx_vad == 0 ) - { - ivas_write_parameter_bitstream_dtx( &hMdEnc->spar_md, hMetaData, hMdEnc->spar_md_cfg.num_dmx_chans_per_band, hMdEnc->spar_md_cfg.num_decorr_per_band, num_bands ); - break; - } - - ivas_select_next_strat( hMdEnc->spar_md_cfg.prior_strat, cs, dmx_switch, dtx_vad ); - - for ( i = 0; i < MAX_CODING_STRATS; i++ ) - { - strat = cs[i]; - if ( strat != NO_STRAT ) - { - reset_indices_enc( &hMetaData_tmp, md_indices_allocated ); - - ivas_write_spar_md_bitstream( hMdEnc, num_bands, bands_bw, &hMetaData_tmp, hEncoderConfig->ivas_total_brate, strat, qsi ); - - /*write to main buffer if its a valid bitstream*/ - if ( hMetaData_tmp.nb_bits_tot > 0 ) - { - if ( hMetaData->nb_bits_tot == bit_pos_start || hMetaData_tmp.nb_bits_tot < ( hMetaData->nb_bits_tot - bit_pos_start ) ) - { - write_metadata_buffer( &hMetaData_tmp, hMetaData, bit_pos_start, next_ind_start ); - code_strat = strat; - } - - if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.tgt_bits_per_blk ) - { - packed_ok = 1; - break; - } - } - } - } - - if ( packed_ok == 1 ) - { - break; - } - - /*only if valid bitstream was written to main buffer*/ - if ( hMetaData->nb_bits_tot > bit_pos_start ) - { - if ( hMetaData->nb_bits_tot - bit_pos_start + ( ( ( hEncoderConfig->ivas_total_brate == IVAS_256k ) && ( sba_order == SBA_FOA_ORDER ) ) ? 1 : 0 ) <= hMdEnc->spar_md_cfg.max_bits_per_blk ) - { - packed_ok = 1; - break; - } - } - } - - - /* Reuse mixer matrix values for unsent bands */ - if ( ( hEncoderConfig->ivas_total_brate < IVAS_24k4 ) && ( code_strat > 3 ) ) - { - for ( b = 0; b < num_bands * bands_bw; b += 2 * bands_bw ) - { - if ( ( b == 0 ) && ( code_strat % 2 == 0 ) ) - { - b += 2; - } - for ( i = 0; i < 1; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - hMdEnc->mixer_mat[i][j][b] = prior_mixer[i][j][b]; - hMdEnc->mixer_mat[i][j][b + 1] = prior_mixer[i][j][b + 1]; - } - } - } - } - - ivas_store_prior_coeffs( hMdEnc, num_bands, code_strat, dtx_vad, qsi ); - - hMdEnc->spar_md.dtx_vad = dtx_vad; - hMdEnc->spar_md.num_bands = num_bands; - - free( ind_list_tmp ); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_band_mixer() - * - * band mixer - *-----------------------------------------------------------------------------------------*/ - -static void ivas_band_mixer_fx( - Word32 *cov_real_fx[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - Word16 *cov_real_q[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const Word16 num_ch, - Word16 *num_bands, - Word16 red_band_fact ) -{ - Word16 i, j, k, b, orig_band, rem_band; - Word32 avg_cov; - Word16 avg_cov_e; - - orig_band = *num_bands; - move16(); - *num_bands = idiv1616( *num_bands, red_band_fact ); - move16(); - rem_band = sub( orig_band, i_mult( *num_bands, red_band_fact ) ); - - FOR( i = 0; i < num_ch; i++ ) - { - FOR( j = 0; j < num_ch; j++ ) - { - FOR( k = 0; k < *num_bands - 1; k++ ) - { - avg_cov_e = 0; - move16(); - avg_cov = 0; - move32(); - FOR( b = 0; b < red_band_fact; b++ ) - { - avg_cov = BASOP_Util_Add_Mant32Exp( avg_cov, avg_cov_e, cov_real_fx[i][j][red_band_fact * k + b], sub( Q31, cov_real_q[i][j][red_band_fact * k + b] ), &avg_cov_e ); - } - cov_real_fx[i][j][k] = avg_cov; - move32(); - cov_real_q[i][j][k] = sub( Q31, avg_cov_e ); - move16(); - } - - avg_cov_e = 0; - move16(); - avg_cov = 0; - move32(); - FOR( b = 0; b < red_band_fact + rem_band; b++ ) - { - avg_cov = BASOP_Util_Add_Mant32Exp( avg_cov, avg_cov_e, cov_real_fx[i][j][red_band_fact * ( *num_bands - 1 ) + b], sub( Q31, cov_real_q[i][j][red_band_fact * ( *num_bands - 1 ) + b] ), &avg_cov_e ); - } - - cov_real_fx[i][j][*num_bands - 1] = avg_cov; - move32(); - cov_real_q[i][j][*num_bands - 1] = sub( Q31, avg_cov_e ); - move16(); - } - } - - return; -} -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_band_mixer() - * - * band mixer - *-----------------------------------------------------------------------------------------*/ - -static void ivas_band_mixer( - float *cov_real[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH], - const int16_t num_ch, - int16_t *num_bands, - int16_t red_band_fact ) -{ - int16_t i, j, k, b, orig_band, rem_band; - float avg_cov; - - orig_band = *num_bands; - *num_bands /= red_band_fact; - rem_band = orig_band - ( *num_bands * red_band_fact ); - - for ( i = 0; i < num_ch; i++ ) - { - for ( j = 0; j < num_ch; j++ ) - { - for ( k = 0; k < *num_bands - 1; k++ ) - { - avg_cov = 0.0f; - for ( b = 0; b < red_band_fact; b++ ) - { - avg_cov += cov_real[i][j][red_band_fact * k + b]; - } - cov_real[i][j][k] = avg_cov; - } - - avg_cov = 0.0f; - for ( b = 0; b < red_band_fact + rem_band; b++ ) - { - avg_cov += cov_real[i][j][red_band_fact * ( *num_bands - 1 ) + b]; - } - - cov_real[i][j][*num_bands - 1] = avg_cov; - } - } - - return; -} -#endif + return; +} /*-----------------------------------------------------------------------------------------* * Function ivas_write_spar_md_bitstream() * * Write MD parameters into bitstream *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_write_spar_md_bitstream_fx( ivas_spar_md_enc_state_t *hMdEnc, const Word16 nB, @@ -1937,141 +1185,11 @@ static void ivas_write_spar_md_bitstream_fx( if ( entropy_coding_result < 0 ) { hMetaData->nb_bits_tot = 0; - move16(); - } - - return; -} -#else -static void ivas_write_spar_md_bitstream( - ivas_spar_md_enc_state_t *hMdEnc, - const int16_t nB, - const int16_t bands_bw, - BSTR_ENC_HANDLE hMetaData, - const int32_t ivas_total_brate, - const int16_t strat, - const int16_t qsi ) -{ - int16_t no_ec, i; - int16_t do_diff[IVAS_MAX_NUM_BANDS]; - int16_t entropy_coding_result; - - if ( strat == NO_STRAT ) - { - return; - } - - /* write quant strat */ - if ( ivas_total_brate >= BRATE_SPAR_Q_STRAT ) - { - push_next_indice( hMetaData, qsi >> 1, hMdEnc->spar_md_cfg.quant_strat_bits - 1 ); - } - else - { - push_next_indice( hMetaData, qsi, hMdEnc->spar_md_cfg.quant_strat_bits ); - } - - no_ec = 0; - - if ( ivas_total_brate < IVAS_24k4 ) - { - switch ( strat ) - { - case BASE: - push_next_indice( hMetaData, bands_bw - 1, SPAR_NUM_CODING_STRAT_BITS ); - break; - case BASE_NOEC: - push_next_indice( hMetaData, bands_bw + 1, SPAR_NUM_CODING_STRAT_BITS ); - no_ec = 1; - break; - case FOUR_A: - case FOUR_C: - case FOUR_B: - case FOUR_D: - push_next_indice( hMetaData, strat, SPAR_NUM_CODING_STRAT_BITS ); - break; - } - /* for LBR SBA 40MS MD never do time diff */ - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = 0; - } - } - else - { - switch ( strat ) - { - case BASE: - push_next_indice( hMetaData, bands_bw - 1, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = 0; - } - break; - case BASE_NOEC: - push_next_indice( hMetaData, bands_bw + 1, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = 0; - } - no_ec = 1; - break; - case FOUR_A: - push_next_indice( hMetaData, 4, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != 0 ); - } - ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); - break; - case FOUR_B: - push_next_indice( hMetaData, 5, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != 1 ); - } - ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); - break; - case FOUR_C: - push_next_indice( hMetaData, 6, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != 2 ); - } - ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); - break; - case FOUR_D: - push_next_indice( hMetaData, 7, SPAR_NUM_CODING_STRAT_BITS ); - for ( i = 0; i < nB; i++ ) - { - do_diff[i] = ( ( ( i + 1 ) & 3 ) != 3 ); - } - ivas_map_prior_coeffs_quant( &hMdEnc->spar_md_prior, &hMdEnc->spar_md_cfg, qsi, nB ); - break; - } - } - - if ( no_ec == 1 ) - { - entropy_coding_result = - ivas_get_huffman_coded_bs( hMdEnc, hMetaData, nB, qsi, - bands_bw ); - } - else - { - entropy_coding_result = - ivas_get_arith_coded_bs( hMdEnc, hMetaData, do_diff, bands_bw, nB, qsi, - strat, ivas_total_brate ); - } - - if ( entropy_coding_result < 0 ) - { - hMetaData->nb_bits_tot = 0; + move16(); } return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -2079,7 +1197,6 @@ static void ivas_write_spar_md_bitstream( * * Generate huffman coded bitstream *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_huffman_coded_bs_fx( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, @@ -2146,68 +1263,6 @@ static Word16 ivas_get_huffman_coded_bs_fx( return 0; } -#else -static int16_t ivas_get_huffman_coded_bs( - ivas_spar_md_enc_state_t *hMdEnc, - BSTR_ENC_HANDLE hMetaData, - const int16_t nB, - const int16_t qsi, - const int16_t bands_bw ) -{ - int16_t i, j; - int16_t pred_coeff_dim, pred_offset; - - for ( i = 0; i < nB; i++ ) - { - int16_t code, len; - int16_t ndm, ndec; - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[i * bands_bw]; - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[i * bands_bw]; - - pred_coeff_dim = ndm + ndec - 1; - pred_offset = 0; - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - pred_offset = DIRAC_TO_SPAR_HBR_PRED_CHS; - } - } - - for ( j = pred_offset; j < pred_coeff_dim; j++ ) - { - ivas_huffman_encode( &hMdEnc->huff_coeffs.pred_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j], &code, &len ); - if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) - { - return -1; - } - push_next_indice( hMetaData, code, len ); - } - - for ( j = 0; j < ndec * ( ndm - 1 ); j++ ) - { - ivas_huffman_encode( &hMdEnc->huff_coeffs.drct_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].drct_index_re[j], &code, &len ); - if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) - { - return -1; - } - push_next_indice( hMetaData, code, len ); - } - - for ( j = 0; j < ndec; j++ ) - { - ivas_huffman_encode( &hMdEnc->huff_coeffs.decd_huff_re[qsi], hMdEnc->spar_md.band_coeffs_idx[i].decd_index_re[j], &code, &len ); - if ( ( hMetaData->nb_bits_tot + len ) > hMdEnc->spar_md_cfg.max_bits_per_blk ) - { - return -1; - } - push_next_indice( hMetaData, code, len ); - } - } - - return 0; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -2216,7 +1271,6 @@ static int16_t ivas_get_huffman_coded_bs( * Generate arithmetic coded bitstream *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_arith_coded_bs_fx( ivas_spar_md_enc_state_t *hMdEnc, BSTR_ENC_HANDLE hMetaData, @@ -2411,165 +1465,6 @@ static Word16 ivas_get_arith_coded_bs_fx( return 0; } -#else -static int16_t ivas_get_arith_coded_bs( - ivas_spar_md_enc_state_t *hMdEnc, - BSTR_ENC_HANDLE hMetaData, - const int16_t *pDo_diff, - const int16_t bands_bw, - const int16_t nB, - const int16_t qsi, - const int16_t strat, - const int32_t ivas_total_brate ) -{ - int16_t i, any_diff; - int16_t j; - ivas_cell_dim_t pred_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t drct_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t decd_cell_dims[IVAS_MAX_NUM_BANDS]; - ivas_cell_dim_t decx_cell_dims[IVAS_MAX_NUM_BANDS]; - int16_t symbol_arr_re[IVAS_MAX_INPUT_LEN]; - int16_t symbol_arr_old_re[IVAS_MAX_INPUT_LEN]; - int16_t arith_result; - - for ( i = 0; i < nB; i++ ) - { - int16_t ndm, ndec; - ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[bands_bw * i]; - ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[bands_bw * i]; - - if ( ( ivas_total_brate < IVAS_24k4 ) && ( strat > 3 ) && ( ( ( i % 2 == 1 ) && ( strat % 2 == 0 ) ) || ( ( i % 2 == 0 ) && ( strat % 2 == 1 ) ) ) ) - { - pred_cell_dims[i].dim1 = 0; - pred_cell_dims[i].dim2 = 0; - drct_cell_dims[i].dim1 = 0; - drct_cell_dims[i].dim2 = 0; - decd_cell_dims[i].dim1 = 0; - decd_cell_dims[i].dim2 = 0; - decx_cell_dims[i].dim1 = 0; - decx_cell_dims[i].dim2 = 0; - } - else - { - pred_cell_dims[i].dim1 = ndm + ndec - 1; - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - pred_cell_dims[i].dim1 -= ( FOA_CHANNELS - 1 ); - } - } - pred_cell_dims[i].dim2 = 1; - drct_cell_dims[i].dim1 = ndec; - drct_cell_dims[i].dim2 = ndm - 1; - decd_cell_dims[i].dim1 = ndec; - decd_cell_dims[i].dim2 = 1; - decx_cell_dims[i].dim1 = ( ndec * ( ndec - 1 ) ) >> 1; - decx_cell_dims[i].dim2 = 1; - } - } - - any_diff = 0; - for ( i = 0; i < nB; i++ ) - { - if ( pDo_diff[i] != 0 ) - { - any_diff = 1; - break; - } - } - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - for ( i = 0; i < nB; i++ ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - for ( j = 0; j < pred_cell_dims[i].dim1; j++ ) - { - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; - - if ( any_diff == 1 ) - { - hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j] = - hMdEnc->spar_md_prior.band_coeffs_idx_mapped[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS]; - } - } - } - } - } - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, pred_cell_dims, PRED_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, pred_cell_dims, PRED_COEFF ); - } - - arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.pred_arith_re[qsi], &hMdEnc->arith_coeffs.pred_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, pred_cell_dims, hMetaData, any_diff, hMdEnc->spar_md_cfg.max_bits_per_blk ); - if ( arith_result < 0 ) - { - return -1; - } - - if ( hMdEnc->spar_hoa_md_flag && hMdEnc->spar_hoa_dirac2spar_md_flag ) - { - for ( i = 0; i < nB; i++ ) - { - if ( i >= SPAR_DIRAC_SPLIT_START_BAND ) - { - for ( j = pred_cell_dims[i].dim1 - 1; j >= 0; j-- ) - { - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j + DIRAC_TO_SPAR_HBR_PRED_CHS] = - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j]; - } - for ( j = 0; j < DIRAC_TO_SPAR_HBR_PRED_CHS; j++ ) - { - hMdEnc->spar_md.band_coeffs_idx[i].pred_index_re[j] = 0; - } - } - } - } - - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, drct_cell_dims, DRCT_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, drct_cell_dims, DRCT_COEFF ); - } - - - arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.drct_arith_re[qsi], &hMdEnc->arith_coeffs.drct_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, drct_cell_dims, hMetaData, any_diff, hMdEnc->spar_md_cfg.max_bits_per_blk ); - if ( arith_result < 0 ) - { - return -1; - } - - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decd_cell_dims, DECD_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decd_cell_dims, DECD_COEFF ); - } - - arith_result = ivas_arith_encode_cmplx_cell_array( &hMdEnc->arith_coeffs.decd_arith_re[qsi], &hMdEnc->arith_coeffs.decd_arith_re_diff[qsi], pDo_diff, nB, - symbol_arr_re, symbol_arr_old_re, decd_cell_dims, hMetaData, any_diff, hMdEnc->spar_md_cfg.max_bits_per_blk ); - if ( arith_result < 0 ) - { - return -1; - } - - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md.band_coeffs_idx, nB, symbol_arr_re, decx_cell_dims, DECX_COEFF ); - - if ( any_diff == 1 ) - { - ivas_copy_band_coeffs_idx_to_arr( hMdEnc->spar_md_prior.band_coeffs_idx_mapped, nB, symbol_arr_old_re, decx_cell_dims, DECX_COEFF ); - } - - return 0; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -2577,7 +1472,6 @@ static int16_t ivas_get_arith_coded_bs( * * Select next strategy *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_select_next_strat_fx( ivas_strats_t prior_strat, ivas_strats_t cs[MAX_QUANT_STRATS], @@ -2633,58 +1527,12 @@ static void ivas_select_next_strat_fx( return; } -#else -static void ivas_select_next_strat( - ivas_strats_t prior_strat, - ivas_strats_t cs[MAX_QUANT_STRATS], - const int16_t dmx_switch, - const int16_t dtx_vad ) -{ - cs[0] = BASE; - cs[1] = BASE_NOEC; - if ( dmx_switch == 0 && dtx_vad ) - { - switch ( prior_strat ) - { - case START: - cs[2] = NO_STRAT; - break; - case BASE: - cs[2] = FOUR_A; - break; - case BASE_DIFF: - cs[2] = FOUR_A; - break; - case BASE_NOEC: - cs[2] = FOUR_A; - break; - case FOUR_A: - cs[2] = FOUR_B; - break; - case FOUR_B: - cs[2] = FOUR_C; - break; - case FOUR_C: - cs[2] = FOUR_D; - break; - case FOUR_D: - cs[2] = FOUR_A; - break; - default: - assert( !"bad value of prior_strat" ); - } - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_store_prior_coeffs() * * Store prior coeffs *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_store_prior_coeffs_fx( ivas_spar_md_enc_state_t *hMdEnc, const Word16 num_bands, @@ -2728,51 +1576,12 @@ static void ivas_store_prior_coeffs_fx( return; } -#else -static void ivas_store_prior_coeffs( - ivas_spar_md_enc_state_t *hMdEnc, - const int16_t num_bands, - const int16_t strat, - const int16_t dtx_vad, - const int16_t qsi ) -{ - int16_t i, j, b; - if ( dtx_vad == 0 ) - { - hMdEnc->spar_md_cfg.prior_strat = START; - } - else - { - hMdEnc->spar_md_cfg.prior_strat = strat; - } - - hMdEnc->spar_md_cfg.prev_quant_idx = qsi; - - for ( i = 0; i < num_bands; i++ ) - { - b = i; - - for ( j = 0; j < IVAS_SPAR_MAX_CH - 1; j++ ) - { - hMdEnc->spar_md_prior.band_coeffs_idx[i].pred_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].pred_index_re[j]; - hMdEnc->spar_md_prior.band_coeffs_idx[i].decd_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].decd_index_re[j]; - } - for ( j = 0; j < IVAS_SPAR_MAX_C_COEFF; j++ ) - { - hMdEnc->spar_md_prior.band_coeffs_idx[i].drct_index_re[j] = hMdEnc->spar_md.band_coeffs_idx[b].drct_index_re[j]; - } - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_spar_quant_pred_coeffs_dtx() * * Calculate quantization pred coeffs *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_spar_quant_pred_coeffs_dtx_fx( ivas_spar_md_t *pSpar_md, const Word32 *pValues, // Q28 @@ -2800,31 +1609,6 @@ static void ivas_spar_quant_pred_coeffs_dtx_fx( return; } -#else -static void ivas_spar_quant_pred_coeffs_dtx( - ivas_spar_md_t *pSpar_md, - const float *pValues, - const int16_t ndm, - int16_t *pIndex, - const int16_t dim1, - float *pQuant ) -{ - int16_t i; - int16_t q_lvl; - float pr_min_max[2]; - - pr_min_max[0] = pSpar_md->min_max[0]; - pr_min_max[1] = pSpar_md->min_max[1]; - - for ( i = 0; i < dim1; i++ ) - { - q_lvl = dtx_pr_real_q_levels[ndm - 1][i]; - ivas_quantise_real_values( &pValues[i], q_lvl, pr_min_max[0], pr_min_max[1], &pIndex[i], &pQuant[i], 1 ); - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* @@ -2832,42 +1616,6 @@ static void ivas_spar_quant_pred_coeffs_dtx( * * Calculate quantization p *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_quant_p_per_band_dtx( - float *pP_mat, - const int16_t num_dec, - const int16_t num_dmx, - int16_t *ppIdx_pd, - float *pP_out, - const int16_t num_ch ) -{ - int16_t i; - int16_t dim = num_ch - num_dmx; - - if ( num_dec == num_ch - 1 ) - { - for ( i = 0; i < dim; i++ ) - { - if ( pP_mat[i] < pr_boost_range[1] && pP_mat[i] > pr_boost_range[0] ) - { - pP_mat[i] = pr_boost_range[1]; - } - } - } - - if ( dim != num_dec ) - { - assert( !"Not Supported!" ); - } - - for ( i = 0; i < dim; i++ ) - { - ivas_quantise_real_values( &pP_mat[i], dtx_pd_real_q_levels[num_ch - num_dec - 1][i], dtx_pd_real_min_max[0], dtx_pd_real_min_max[1], &ppIdx_pd[i], &pP_out[i], 1 ); - } - - return; -} -#else static void ivas_quant_p_per_band_dtx_fx( Word32 *pP_mat, // Q28 const Word16 num_dec, @@ -2904,7 +1652,6 @@ static void ivas_quant_p_per_band_dtx_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_write_parameter_bitstream_dtx() * @@ -3021,7 +1768,6 @@ static void ivas_write_parameter_bitstream_dtx_fx( * * Quantization of prediction coefficients *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_quant_pred_coeffs_per_band_fx( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, @@ -3032,18 +1778,6 @@ static void ivas_quant_pred_coeffs_per_band_fx( return; } -#else -static void ivas_quant_pred_coeffs_per_band( - ivas_band_coeffs_t *pband_coeffs, - ivas_band_coeffs_ind_t *pBand_coeffs_idx, - ivas_quant_strat_t *pQs, - const int16_t num_ch ) -{ - ivas_quantise_real_values( pband_coeffs->pred_re, pQs->PR.q_levels[0], pQs->PR.min, pQs->PR.max, pBand_coeffs_idx->pred_index_re, pband_coeffs->pred_quant_re, ( num_ch - 1 ) ); - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_quant_c_per_band() @@ -3094,7 +1828,6 @@ static void ivas_quant_c_per_band_fx( * * Quantization of decorrelation p coeffs for each band *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_quant_p_per_band_fx( ivas_band_coeffs_t *pband_coeffs, ivas_band_coeffs_ind_t *pBand_coeffs_idx, @@ -3105,15 +1838,3 @@ static void ivas_quant_p_per_band_fx( return; } -#else -static void ivas_quant_p_per_band( - ivas_band_coeffs_t *pband_coeffs, - ivas_band_coeffs_ind_t *pBand_coeffs_idx, - ivas_quant_strat_t *pQs, - const int16_t num_ch ) -{ - ivas_quantise_real_values( pband_coeffs->P_re, pQs->P_r.q_levels[0], pQs->P_r.min, pQs->P_r.max, pBand_coeffs_idx->decd_index_re, pband_coeffs->P_quant_re, num_ch - 1 ); - - return; -} -#endif diff --git a/lib_enc/ivas_stat_enc.h b/lib_enc/ivas_stat_enc.h index 538362f3e..e9b06d77d 100644 --- a/lib_enc/ivas_stat_enc.h +++ b/lib_enc/ivas_stat_enc.h @@ -47,55 +47,25 @@ typedef struct stereo_itd_data_struct { Word16 prev_itd; -#ifndef IVAS_FLOAT_FIXED - float itd[STEREO_DFT_ENC_DFT_NB]; - float deltaItd[STEREO_DFT_ENC_DFT_NB]; -#endif Word16 td_itd[STEREO_DFT_ENC_DFT_NB]; Word16 td_itd_32k[STEREO_DFT_ENC_DFT_NB]; Word16 itd_index[STEREO_DFT_ENC_DFT_NB]; -#ifndef IVAS_FLOAT_FIXED - float xcorr_smooth[STEREO_DFT_N_32k_ENC]; - float lp_phat_peak; /* low-pass GCC PHAT peak value */ -#endif Word16 itd_hangover; /* ITD hangover counter */ Word16 itd_cnt; /* Consecutive valid ITD counter */ -#ifndef IVAS_FLOAT_FIXED - float prev_sum_nrg_L_lb; - float prev_xcorr_lb[STEREO_DFT_XCORR_LB_MAX]; - float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM]; -#endif Word16 vad_frm_cnt; Word16 pre_vad; Word16 itd_nonzero_cnt; -#ifndef IVAS_FLOAT_FIXED - float acorr_L[STEREO_DFT_BAND_MAX]; - float acorr_R[STEREO_DFT_BAND_MAX]; - float cohSNR; - float itd_thres; -#endif Word16 valid_itd_cnt; /* Extra variable to store value of itd_cnt for fine-control decision making */ Word16 detected_itd_flag; Word16 itd_tracking; -#ifndef IVAS_FLOAT_FIXED - float prev_max; - float prev_avg_max; -#endif Word32 prev_max_fx; // Q31 Word16 prev_index; Word32 prev_avg_max_fx; Word16 prev_avg_max_fx_e; -#ifndef IVAS_FLOAT_FIXED - float currFlatness; -#endif Word16 currFlatness_fx; /* Xtalk classifier */ -#ifndef IVAS_FLOAT_FIXED - float prev_m1; - float prev_m2; -#endif Word32 prev_m1_fx; // Q31 Word32 prev_m2_fx; // Q31 Word16 prev_itd1; @@ -134,11 +104,6 @@ typedef struct dft_ana_struct Word16 dft_ovl; /* Overlap size */ Word16 dft_zp; /* Zero padding */ -#ifndef IVAS_FLOAT_FIXED - const float *win_ana; /* DFT analysis window */ - const float *dft_trigo; - const float *dft_trigo_32k; -#endif const Word16 *win_ana_fx; /* DFT analysis window */ const Word16 *dft_trigo_fx; @@ -173,66 +138,21 @@ typedef struct stereo_dft_enc_data_struct Word16 NFFT; /* Size of the FFT=frame size+overlap */ /*FFT*/ -#ifdef IVAS_FLOAT_FIXED Word32 DFT_fx[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; Word16 DFT_fx_e[CPE_CHANNELS]; // Word16 DFT_q_fx[CLDFB_NO_CHANNELS_MAX]; -#endif Word16 dft_ovl; /* Overlap size */ Word16 dft_zp; /* Zero padding */ -#ifndef IVAS_FLOAT_FIXED - float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; - const float *win; /* DFT window */ - const float *win_8k; /* DFT window */ - const float *win_12k8; /* DFT window */ - const float *win_16k; /* DFT window */ - const float *win_32k; /* DFT window */ - - const float *win_ana; /* DFT analysis window */ - const float *win_ana_8k; /* DFT analysis window */ - const float *win_ana_12k8; /* DFT analysis window */ - const float *win_ana_16k; /* DFT analysis window */ - const float *win_ana_32k; /* DFT analysis window */ - - const float *win_mdct_8k; /* DFT analysis window */ - - const float *dft_trigo; - const float *dft_trigo_8k; - const float *dft_trigo_12k8; - const float *dft_trigo_16k; - const float *dft_trigo_32k; -#endif Word16 dft_trigo_step; -#ifndef IVAS_FLOAT_FIXED - float output_mem_res_8k[STEREO_DFT_OVL_8k]; - - /*I/O channel buffers */ - float output_mem_dmx[STEREO_DFT_OVL_MAX]; - float output_mem_dmx_12k8[STEREO_DFT_OVL_12k8]; - float output_mem_dmx_16k_shb[STEREO_DFT_OVL_16k]; - float output_mem_dmx_32k[STEREO_DFT_OVL_32k]; /*can hold 16, 12.8 or 32kHz signals*/ - float output_mem_dmx_16k[STEREO_DFT_OVL_16k]; /*can hold 16, 12.8 or 32kHz signals*/ - float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX]; -#endif /*Bands*/ Word16 band_res[STEREO_DFT_ENC_DFT_NB]; Word16 band_limits[STEREO_DFT_BAND_MAX + 1]; Word16 nbands; Word16 band_limits_dmx[STEREO_DFT_BAND_MAX + 1]; Word16 nbands_dmx; -#ifndef IVAS_FLOAT_FIXED - /*Stereo parameters*/ - float past_nrgL[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; - float past_nrgR[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; - float past_dot_prod_real[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; - float past_dot_prod_imag[STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX]; -#endif Word16 nrg_past_pos; /*Side Gain*/ -#ifndef IVAS_FLOAT_FIXED - float side_gain[STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX]; -#endif Word32 side_gain_fx[STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX]; // Q31 Word16 side_gain_flag_1; Word16 side_gain_flag_2; @@ -240,22 +160,10 @@ typedef struct stereo_dft_enc_data_struct Word16 side_gain_index_ECprevious[STEREO_DFT_BAND_MAX]; Word16 side_gain_index_EC[STEREO_DFT_BAND_MAX]; Word16 side_gain_counter; -#ifdef IVAS_FLOAT_FIXED Word16 side_gain_bitdiff_lp_fx; Word16 q_side_gain_bitdiff_lp; -#else - float side_gain_bitdiff_lp; -#endif /* Stereo CNG */ -#ifndef IVAS_FLOAT_FIXED - float sidSideGain[STEREO_DFT_ERB4_BANDS]; - float win_ana_energy; - float xspec_smooth[STEREO_DFT_N_32k_ENC]; - float Spd_L_smooth[STEREO_DFT_N_32k_ENC / 2]; - float Spd_R_smooth[STEREO_DFT_N_32k_ENC / 2]; - float sid_gipd; -#else Word32 sidSideGain_fx[STEREO_DFT_ERB4_BANDS]; // Q31? Word16 win_ana_energy_fx; // Q15 Word32 xspec_smooth_fx[STEREO_DFT_N_32k_ENC]; // Q(31 - xspec_smooth_fx_e) @@ -264,20 +172,12 @@ typedef struct stereo_dft_enc_data_struct Word16 Spd_L_smooth_fx_e; Word32 Spd_R_smooth_fx[STEREO_DFT_N_32k_ENC / 2]; // Q(31 - Spd_R_smooth_fx_e) Word16 Spd_R_smooth_fx_e; - Word32 sid_gipd_fx; // Q13 -#endif + Word32 sid_gipd_fx; // Q13 Word16 coh_fade_counter; -#ifndef IVAS_FLOAT_FIXED - float prev_sid_gipd; -#else - Word32 prev_sid_gipd_fx; // Q13 -#endif + Word32 prev_sid_gipd_fx; // Q13 Word16 prev_sid_no_ipd_flag; /*IPD*/ -#ifndef IVAS_FLOAT_FIXED - float gipd[STEREO_DFT_ENC_DFT_NB]; -#endif Word16 gipd_band_max; Word16 gipd_index; Word16 no_ipd_flag; /* flag to indicate when group IPD gets used */ @@ -286,92 +186,40 @@ typedef struct stereo_dft_enc_data_struct Word16 no_ipd_cnt1; /* counter */ Word16 attackPresent; Word16 wasTransient; -#ifndef IVAS_FLOAT_FIXED - float gainIPD_sm; /* long-term gain IPD for NIPD detection */ - float sfm; - float sum_dot_prod_real; - float sum_dot_prod_img; - float dot_prod_real_smooth[STEREO_DFT_BAND_MAX]; - float dot_prod_img_smooth[STEREO_DFT_BAND_MAX]; - float ipd_buf[STEREO_DFT_BAND_MAX][STEREO_DFT_IPD_BUF_LEN]; - float prev_gipd; -#endif /*ITD*/ ITD_DATA_HANDLE hItd; -#ifndef IVAS_FLOAT_FIXED - float voicing_lt; -#endif Word32 voicing_lt_fx; // Q31 Word16 currentNumUpdates; Word16 expectedNumUpdates; /* Expected number of frames before use of ITD estimate */ Word16 resetFrames; -#ifndef IVAS_FLOAT_FIXED - /* energy buffers for ICBWE */ - float nrg_L[2]; - float nrg_R[2]; - float nrg_DMX[2]; -#endif /*Residual prediction*/ Word16 res_pred_mode[STEREO_DFT_ENC_DFT_NB]; /* mode from 0 (off) to 1 (on) */ -#ifndef IVAS_FLOAT_FIXED - float res_pred_gain[STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX]; /*prediction gain for the residual HFs */ -#endif - Word16 res_pred_band_min; /* Band min for prediction of residual */ + Word16 res_pred_band_min; /* Band min for prediction of residual */ Word16 res_pred_flag_1; Word16 res_pred_flag_2; Word16 res_pred_counter; -#ifndef IVAS_FLOAT_FIXED - float res_pred_gain_f[STEREO_DFT_BAND_MAX]; -#endif Word16 res_pred_index_EC[STEREO_DFT_BAND_MAX]; Word16 res_pred_index_ECDiff[STEREO_DFT_BAND_MAX]; Word16 res_pred_index_ECprevious[STEREO_DFT_BAND_MAX]; Word16 reverb_flag; -#ifndef IVAS_FLOAT_FIXED - float pre_sub_nrg_DMX[STEREO_DFT_BAND_MAX]; - float diff_l_h_sm; - float diff_r_h_sm; - float prev_fac2; -#endif /*Residual coding*/ Word16 res_cod_mode[STEREO_DFT_ENC_DFT_NB]; /* mode from 0 (off) to 3 */ Word16 res_cod_band_max; /* Band max for coding of residual */ Word16 res_cod_line_max; /* Maximum number of MDCT lines to code for the residual coding */ -#ifndef IVAS_FLOAT_FIXED - float res_cod_SNR_M[STEREO_DFT_BAND_MAX]; - float res_cod_NRG_M[STEREO_DFT_BAND_MAX]; - float res_cod_NRG_S[STEREO_DFT_BAND_MAX]; - float old_snr; -#endif - Word16 first_frm_flag; /* ADAP first frame flag */ + Word16 first_frm_flag; /* ADAP first frame flag */ /* flags and data for adaptive wideband residual coding */ -#ifndef IVAS_FLOAT_FIXED - float res_dmx_ratio_lt; /* long term energy ratio between RES and DMX */ -#endif - Word16 hangover_cnt0; /* counter 0 for hangover */ - Word16 hangover_cnt1; /* counter 1 for hangover */ -#ifndef IVAS_FLOAT_FIXED - float dmx_res_all_prev; /* energy of the previous frame */ -#endif + Word16 hangover_cnt0; /* counter 0 for hangover */ + Word16 hangover_cnt1; /* counter 1 for hangover */ Word16 last_res_cod_mode_modify_flag; /* a flag to indicate whether the res_cod_mode_flag has been modified for the switching frame in which res_cod_mode_flag should be swithced from 1 to 0 */ Word16 res_cod_sw_flag; /* a flag to indicate whether it is a switching frame */ -#ifndef IVAS_FLOAT_FIXED - float switch_fade_factor; /* Adaptive fade factor for switch frame */ -#endif /*misc*/ -#ifndef IVAS_FLOAT_FIXED - float icbweRefEner; - float lbEner; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 icbweRefEner_fx; Word16 icbweRefEner_fx_e; Word32 lbEner_fx; Word16 lbEner_fx_e; -#endif Word16 flip_sign; Word32 dmx_res_all_prev_fx; /* energy of the previous frame Q(31 - dmx_res_all_prev_fx_e) */ Word16 dmx_res_all_prev_fx_e; /* energy of the previous frame */ @@ -498,18 +346,6 @@ typedef struct stereo_td_enc_data_structure Word16 tdm_lp_reuse_flag; /* Flag that indicate if it is possible to reuse the LP coefficient from the primary channel or not */ Word16 tdm_low_rate_mode; /* secondary channel low rate mode flag */ -#ifndef IVAS_FLOAT_FIXED - float tdm_Pri_pitch_buf[NB_SUBFR]; - float tdm_lt_corr_RM; /* Long term right-mono correlation */ - float tdm_lt_corr_LM; /* Long term left-mono correlation */ - float tdm_last_diff_lt_corr; /* long term correlation difference mem */ - float tdm_last_ratio; /* Last TDM ratio */ - - float tdm_lt_rms_L; /* Left channel long term rms */ - float tdm_lt_rms_R; /* Right channel long term rms */ - float tdm_last_ener_lt_R; /* Right channel long term energy */ - float tdm_last_ener_lt_L; /* Left channel long term energy */ -#endif Word16 tdm_Pitch_reuse_flag; Word32 tdm_lt_corr_RM_fx; /* Long term right-mono correlation */ @@ -522,30 +358,17 @@ typedef struct stereo_td_enc_data_structure Word32 tdm_last_ener_lt_R_fx; /* Right channel long term energy */ /*Q16*/ Word32 tdm_last_ener_lt_L_fx; /* Left channel long term energy */ /*Q16*/ - Word16 tdm_last_ratio_idx; /* last TDM ratio index */ - Word16 tdm_last_SM_flag; /* Flag to signal a SM encoding scheme -> better for some music item */ - Word16 tdm_ratio_transition_mov_flag; /* Flag that indicates that L-R energy is changing */ - Word16 tdm_ratio_transition_cnt; /* Counter */ - Word16 tdm_hyst_cnt; /* Counter */ - Word16 tdm_prev_stable_idx; /* Previous Transmitted ratio index*/ - Word16 tdm_prev_desired_idx; /* Previous Transmitted ratio index*/ -#ifndef IVAS_FLOAT_FIXED - float tdm_LT_es_em; /* Long term evoluation of the side to mono energy ratio */ -#endif + Word16 tdm_last_ratio_idx; /* last TDM ratio index */ + Word16 tdm_last_SM_flag; /* Flag to signal a SM encoding scheme -> better for some music item */ + Word16 tdm_ratio_transition_mov_flag; /* Flag that indicates that L-R energy is changing */ + Word16 tdm_ratio_transition_cnt; /* Counter */ + Word16 tdm_hyst_cnt; /* Counter */ + Word16 tdm_prev_stable_idx; /* Previous Transmitted ratio index*/ + Word16 tdm_prev_desired_idx; /* Previous Transmitted ratio index*/ Word32 tdm_LT_es_em_fx; /* Long term evoluation of the side to mono energy ratio */ /*Q21*/ Word16 tdm_use_IAWB_Ave_lpc; /* Flag to indicate the usage of mean inactive LP coefficients */ /* NOOP parameters */ -#ifndef IVAS_FLOAT_FIXED - float tdm_lt_corr_RM_SM; /* Long term right-mono correlation in SM mode*/ - float tdm_lt_corr_LM_SM; /* Long term left-mono correlation in SM mode*/ - float tdm_last_diff_lt_corr_SM; /* long term correlation difference mem in SM mode*/ - float tdm_last_ratio_SM; /* Last TDM ratio in SM mode*/ - float tdm_lt_rms_L_SM; /* Left channel long term rms in SM mode*/ - float tdm_lt_rms_R_SM; /* Right channel long term rms in SM mode*/ - float tdm_last_ener_lt_R_SM; /* Right channel long term energy in SM mode*/ - float tdm_last_ener_lt_L_SM; /* Left channel long term energy in SM mode*/ -#endif Word32 tdm_lt_corr_RM_SM_fx; /* Long term right-mono correlation in SM mode*/ Word32 tdm_lt_corr_LM_SM_fx; /* Long term left-mono correlation in SM mode*/ @@ -564,16 +387,13 @@ typedef struct stereo_td_enc_data_structure Word16 tdm_hyst_cnt_SM; /* Counter in SM mode*/ Word16 tdm_prev_stable_idx_SM; /* Previous Transmitted ratio index in SM mode*/ Word16 tdm_prev_desired_idx_SM; /* Previous Transmitted ratio index in SM mode*/ -#ifndef IVAS_FLOAT_FIXED - float tdm_LT_es_em_SM; /* Long term evoluation of the side to mono energy ratio in SM mode*/ -#endif - Word32 tdm_LT_es_em_SM_fx; /* Long term evoluation of the side to mono energy ratio in SM mode*/ - Word16 tdm_NOOP_cnt; /* Counter for channel combination scheme */ - Word16 tdm_SM_flag; /* Flag for channel combination scheme */ - Word16 tdm_SM_last2_clas[2]; /* Class of the frame immediately prior to the previous frame */ - Word16 tdm_SM_last_clas[2]; /* Class of the previous frame */ - Word16 tdm_SM_modi_flag; /* Flag that indicates to modify ratio */ - Word16 tdm_SM_reset_flag; /* Flag that indicates to reset the parameters for SM mode */ + Word32 tdm_LT_es_em_SM_fx; /* Long term evoluation of the side to mono energy ratio in SM mode*/ + Word16 tdm_NOOP_cnt; /* Counter for channel combination scheme */ + Word16 tdm_SM_flag; /* Flag for channel combination scheme */ + Word16 tdm_SM_last2_clas[2]; /* Class of the frame immediately prior to the previous frame */ + Word16 tdm_SM_last_clas[2]; /* Class of the previous frame */ + Word16 tdm_SM_modi_flag; /* Flag that indicates to modify ratio */ + Word16 tdm_SM_reset_flag; /* Flag that indicates to reset the parameters for SM mode */ Word16 tdm_FD2LRTD_SW_cnt; /* Count the number of frames following a FD to LRTD switching */ Word16 tdm_LRTD_flag; /* LRTD stereo mode flag */ @@ -596,16 +416,10 @@ typedef struct stereo_td_enc_data_structure typedef struct stereo_tca_enc_data_structure { - Word16 refChanIndx; /* reference channel index in current frame */ - Word16 prevRefChanIndx; /* reference channel index in previous frame */ - Word16 indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ - Word16 indx_ica_gD; /* ICA target gain */ -#ifndef IVAS_FLOAT_FIXED - float targetGain; /* gain norm applied on target (or right) channel in current frame */ - float instTargetGain; /* instantaneous gain norm applied on target (or right) channel in current frame */ - float prevTargetGain; /* gain norm applied on target (or right) channel in previous frame */ - float corrStatsSmoothFac; /* gD/corrStats smoothing based on corrStats */ -#endif + Word16 refChanIndx; /* reference channel index in current frame */ + Word16 prevRefChanIndx; /* reference channel index in previous frame */ + Word16 indx_ica_NCShift; /* ICA target channel inter-channel corrstats */ + Word16 indx_ica_gD; /* ICA target gain */ Word32 targetGain_fx; /* gain norm applied on target (or right) channel in current frame //Q29 take from decoder*/ Word32 instTargetGain_fx; /* instantaneous gain norm applied on target (or right) channel in current frame //Q29*/ Word32 prevTargetGain_fx; /* gain norm applied on target (or right) channel in previous frame //Q29 taken from decoder*/ @@ -618,22 +432,6 @@ typedef struct stereo_tca_enc_data_structure Word16 corrLagStats[3]; /* corr lag stats in current frame */ Word16 prevCorrLagStats[3]; /* corr lag stats in previous frame */ -#ifndef IVAS_FLOAT_FIXED - float memChanL[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* left channel input to correct at the cross-over */ - float memChanR[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* right channel input to correct at the cross-over */ - - float memChanL_DS[ADDED_MEM_DS]; /* left channel input speech memory for downmix */ - float memChanR_DS[ADDED_MEM_DS]; /* right channel input speech memory for downmix */ - float mem_tempF; - float memdecim[12]; /* memory for pre-rmphasis filter for resampling */ - float corrEstPrev[3][2 * L_NCSHIFT_DS + 1]; /* Prev correlation vector */ - float corrEstLT[2 * L_NCSHIFT_DS + 1]; /* Long term correlation vector smoothed */ - float ica_envVarLT; - float C_mem[2 * L_NCSHIFT_DS + 1]; - float E1_mem, E2_mem; - float delay_0_mem[MAX_DELAYREGLEN]; - float smooth_dist_reg_prv_corr; -#endif Word32 memChanL_fx[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* left channel input to correct at the cross-over */ Word32 memChanR_fx[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH]; /* right channel input to correct at the cross-over */ @@ -675,31 +473,7 @@ typedef struct stereo_icbwe_enc_data_structure { Word16 prev_refChanIndx_bwe; Word16 refChanIndx_bwe; -#ifndef IVAS_FLOAT_FIXED - float mem_decim_shb_ch0[2 * L_FILT_MAX]; -#endif -#ifndef IVAS_FLOAT_FIXED - float prevSpecMapping; - float prevgsMapping; -#endif - -#ifndef IVAS_FLOAT_FIXED - float prevRefEner; - float prevNonRefEner; -#endif - -#ifndef IVAS_FLOAT_FIXED - float mem_nrg_L[CPE_CHANNELS]; - float mem_nrg_R[CPE_CHANNELS]; - float mem_nrg_DMX[CPE_CHANNELS]; - float gDes_pastFrame; - float icbweRefEner; - float lpSHBRef[LPC_SHB_ORDER + 1]; - float shbSynthRef[L_FRAME16k]; - float nlExc16k[L_FRAME16k]; - float mixExc16k[L_FRAME16k]; -#endif /* SHB speech resampler memory */ Word16 memHPF_fx[8]; // Q -> q_dataChan_fx @@ -767,58 +541,17 @@ typedef struct ivas_stereo_classifier_data_structure /* features for xtalk classifier and UNCLR classifier */ Word16 clas_ch1; Word16 pitch_ch1[3]; -#ifndef IVAS_FLOAT_FIXED - float voicing_ch1[3]; - float cor_map_sum_ch1; - float lsf_ch1[M]; - float lepsP_ch1; - float dE1_ch1, dE1_ch2; - float nchar_ch1, nchar_ch2; - float non_sta_ch1; - float sp_div_ch1; - float ps_diff_ch1, ps_diff_ch2; - float ps_sta_ch1, ps_sta_ch2; - float prev_g_IPD; - float prev_IPD; - float prev_ratio_m1_m2; - float ratio_L; -#endif Word32 ps_diff_ch1_fx, ps_diff_ch2_fx; Word16 ps_diff_ch1_e, ps_diff_ch2_e; Word16 vad_flag_glob; Word16 vad_relE; Word16 aEn_raw[CPE_CHANNELS]; /* raw aEn for local relative energy estimation */ -#ifndef IVAS_FLOAT_FIXED - float ave_ener_L; /* average energy of the L channel */ - float ave_ener_R; /* average energy of the R channel */ - float Etot_dn; /* average energy in dB - lower bound */ - float Etot_up; /* average energy in dB - upper bound */ - float relE_buf[UNCLR_L_RELE]; /* running buffer for relative energy */ - float Etot_buf[UNCLR_L_ETOT]; /* running buffer for average energy in dB */ - float relE_0_1; /* relative energy in the current frame normalized to (0,1) */ - float relE_0_1_LT; -#endif Word16 unclr_sw_enable_cnt[CPE_CHANNELS]; /* UNCLR classifier - counter of frames suitable for UNCLR switching */ -#ifndef IVAS_FLOAT_FIXED - float unclr_relE_0_1_LT[UNCLR_RC_ORDER]; - float unclr_wscore; - float unclr_fv[SSC_MAX_NFEA]; /* UNCLR - feature vector */ -#endif - Word16 unclr_decision; /* UNCLR stereo classifier decision (0/1) */ + Word16 unclr_decision; /* UNCLR stereo classifier decision (0/1) */ Word16 unclr_corrLagMax_prev; -#ifndef IVAS_FLOAT_FIXED - float xtalk_score_buf[XTALK_SCORE_BUF_LEN]; -#endif Word16 xtalk_decision; /* xtalk stereo classifier decision (0/1) */ -#ifndef IVAS_FLOAT_FIXED - float xtalk_fv[SSC_MAX_NFEA]; /* xtalk - feature vector */ - float xtalk_wscore; - float xtalk_score; - float xtalk_score_wrelE; - float is_speech; -#endif Word16 lrtd_mode; Word16 prev_lrtd_mode; @@ -880,20 +613,14 @@ typedef struct ivas_stereo_classifier_data_structure typedef struct { -#ifdef IVAS_FLOAT_FIXED Word32 long_term_energy_stereo_dmx_enc_fx[MAX_NUM_OBJECTS][PARAM_ISM_HYS_BUF_SIZE]; Word16 long_term_energy_stereo_dmx_enc_e; Word16 coh_fx[MAX_NUM_OBJECTS]; -#endif // IVAS_FLOAT_FIXED Word16 dtx_flag; Word16 sce_id_dtx; Word16 cnt_SID_ISM; -#ifndef IVAS_FLOAT_FIXED - float long_term_energy_stereo_dmx_enc[MAX_NUM_OBJECTS][PARAM_ISM_HYS_BUF_SIZE]; - float coh[MAX_NUM_OBJECTS]; -#endif } ISM_DTX_DATA, *ISM_DTX_HANDLE; /*----------------------------------------------------------------------------------* @@ -903,15 +630,6 @@ typedef struct typedef struct front_vad_enc { Word16 ini_frame; /* initialization frames counter */ -#ifndef IVAS_FLOAT_FIXED - float lp_speech; /* long term speech average */ - /* Q9 long term speech average */ - float lp_noise; /* long term noise average */ - float *delay_buf; - float mem_preemph; /* preemph filter memory */ - float mem_decim[2 * L_FILT_MAX]; /* decimation filter memory */ - float buffer_12k8[3 * L_FRAME / 2]; /* 12k8 signal buffer */ -#endif Word16 mem_preemph_fx; /* preemph filter memory */ Word16 q_mem_preemph_fx; /* preemph filter memory */ @@ -921,14 +639,12 @@ typedef struct front_vad_enc Word16 delay_samples; Word16 rem_dtx_ho; /* Remaining hangover frames */ -#ifdef IVAS_FLOAT_FIXED Word16 lp_speech_fx; Word16 lp_noise_fx; Word16 mem_decim_fx[2 * L_FILT_MAX]; /* decimation filter memory */ Word16 buffer_12k8_fx[3 * L_FRAME / 2]; Word16 q_mem_decim; Word16 q_buffer_12k8; -#endif // Word32 buffer_12k8_fx[3 * L_FRAME / 2]; /* 12k8 signal buffer */ } FRONT_VAD_ENC, *FRONT_VAD_ENC_HANDLE; @@ -944,57 +660,34 @@ typedef struct ivas_dirac_enc_data_structure IVAS_FB_MIXER_HANDLE hFbMixer; /* DirAC parameter estimation */ -#ifdef IVAS_FLOAT_FIXED Word32 **direction_vector_m_fx[DIRAC_NUM_DIMS]; /* Average direction vector */ Word16 direction_vector_m_exp[MAX_PARAM_SPATIAL_SUBFRAMES]; // direction_vector_m_fx[i][j][k] will map to direction_vector_m_exp[j] exponent. Word32 diffuseness_m_fx[DIRAC_MAX_NBANDS]; Word16 diffuseness_m_exp[DIRAC_MAX_NBANDS]; -#else - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ - float **direction_vector[DIRAC_NUM_DIMS]; - float diffuseness_m[DIRAC_MAX_NBANDS]; -#endif Word16 band_grouping[DIRAC_MAX_NBANDS + 1]; Word16 block_grouping[5]; Word16 firstrun_sector_params; -#ifdef IVAS_FLOAT_FIXED Word32 sec_I_vec_smth_x_fx[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word16 sec_I_vec_smth_x_exp[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word32 sec_I_vec_smth_y_fx[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word16 sec_I_vec_smth_y_exp[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word32 sec_I_vec_smth_z_fx[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word16 sec_I_vec_smth_z_exp[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; -#else - float sec_I_vec_smth_x[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; - float sec_I_vec_smth_y[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; - float sec_I_vec_smth_z[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 energy_smth_fx[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word16 energy_smth_exp[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; Word32 azi_prev_fx[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS]; Word32 ele_prev_fx[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS]; -#else - float energy_smth[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS]; - float azi_prev[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS]; - float ele_prev[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS]; -#endif /* diffuseness */ Word16 index_buffer_intensity; Word16 no_col_avg_diff; -#ifdef IVAS_FLOAT_FIXED Word32 **buffer_intensity_real_fx[DIRAC_NUM_DIMS]; Word16 buffer_intensity_real_q[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF][DIRAC_MAX_NBANDS]; Word32 *buffer_energy_fx; Word16 buffer_energy_q[DIRAC_NO_COL_AVG_DIFF * DIRAC_MAX_NBANDS]; -#else - float **buffer_intensity_real[DIRAC_NUM_DIMS]; - float *buffer_energy; -#endif /* Frame count for detecting mono */ Word16 mono_frame_count; @@ -1010,22 +703,13 @@ typedef struct ivas_agc_enc_chan_state_t { Word16 lastExp; Word16 prevExp; -#ifndef IVAS_FLOAT_FIXED - float lastGain; - float lastMaxAbs; -#else Word32 lastGain_fx; /* Q(q_lastGain_fx) */ Word16 q_lastGain_fx; Word32 lastMaxAbs_fx; /* Q(q_lastMaxAbs_fx) */ Word16 q_lastMaxAbs_fx; -#endif Word16 gainExpVal; -#ifndef IVAS_FLOAT_FIXED - float MaxAbsVal_del; -#else Word32 MaxAbsVal_del_fx; /* Q(q_MaxAbsVal_del_fx) */ Word16 q_MaxAbsVal_del_fx; -#endif Word16 MaxAbsValIdx_del; } ivas_agc_enc_chan_state_t; @@ -1033,13 +717,8 @@ typedef struct ivas_agc_enc_chan_state_t typedef struct ivas_agc_enc_state_t { ivas_agc_com_state_t agc_com; -#ifndef IVAS_FLOAT_FIXED - float minDelta; - float smFact; -#else Word32 minDelta_fx; /* Q31 */ Word32 smFact_fx; /* Q31 */ -#endif ivas_agc_enc_chan_state_t *gain_state; ivas_agc_chan_data_t *gain_data; @@ -1053,11 +732,7 @@ typedef struct ivas_enc_cov_handler_state_t int16_t num_bins; int16_t prior_dtx_present; int16_t prior_var_flag; -#ifdef IVAS_FLOAT_FIXED Word32 bb_var_lt_fx[FOA_CHANNELS]; -#else - float bb_var_lt[FOA_CHANNELS]; -#endif } ivas_enc_cov_handler_state_t; @@ -1118,9 +793,6 @@ typedef struct ivas_spar_enc_lib_t Word16 front_vad_flag; Word16 front_vad_dtx_flag; Word16 force_front_vad; -#ifndef IVAS_FLOAT_FIXED - float *input_data_mem[MAX_NUM_OBJECTS]; -#endif } SPAR_ENC_DATA, *SPAR_ENC_HANDLE; @@ -1133,11 +805,7 @@ typedef struct ivas_param_mc_enc_data_structure { IVAS_FB_MIXER_HANDLE hFbMixer; Word16 transient_detector_delay; -#ifndef IVAS_FLOAT_FIXED - const float *dmx_factors; -#else - const Word32 *dmx_factors_fx; /* Q31 */ -#endif + const Word32 *dmx_factors_fx; /* Q31 */ /* Multichannel Specific Parameters */ IVAS_PARAM_MC_METADATA hMetadataPMC; @@ -1145,15 +813,9 @@ typedef struct ivas_param_mc_enc_data_structure Word16 lfe_index; Word16 icc_map_index[PARAM_MC_PARAMETER_FRAMES][PARAM_MC_SZ_ICC_MAP]; Word16 max_param_band_abs_cov; -#ifndef IVAS_FLOAT_FIXED - float prev_ilds[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP]; - - float ener_fac[PARAM_MC_MAX_PARAMETER_BANDS]; -#else Word32 prev_ilds_fx[PARAM_MC_MAX_PARAMETER_BANDS][PARAM_MC_SZ_ILD_MAP]; /*Q21*/ Word32 ener_fac_fx[PARAM_MC_MAX_PARAMETER_BANDS]; /*Q21*/ -#endif } PARAM_MC_ENC_DATA, *PARAM_MC_ENC_HANDLE; @@ -1166,15 +828,9 @@ typedef struct ivas_mc_paramupmix_enc_data_structure ivas_trans_det_state_t *hTranDet[MC_PARAMUPMIX_COMBINATIONS * MC_PARAMUPMIX_NCH]; IVAS_FB_MIXER_HANDLE hFbMixer; ivas_enc_cov_handler_state_t *hCovEnc[MC_PARAMUPMIX_COMBINATIONS]; -#ifndef IVAS_FLOAT_FIXED - float ***cov_real[MC_PARAMUPMIX_COMBINATIONS]; - float ***cov_dtx_real[MC_PARAMUPMIX_COMBINATIONS]; - float *midside[MC_PARAMUPMIX_COMBINATIONS][MC_PARAMUPMIX_NCH]; /* hold PCM of mid-side data */ -#else Word32 ***cov_real_fx[MC_PARAMUPMIX_COMBINATIONS]; Word32 ***cov_dtx_real_fx[MC_PARAMUPMIX_COMBINATIONS]; Word32 *midside_fx[MC_PARAMUPMIX_COMBINATIONS][MC_PARAMUPMIX_NCH]; /* hold PCM of mid-side data */ //(st_ivas->q_data_fx) -#endif Word32 alpha_quant_prev[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; Word32 beta_quant_prev[MC_PARAMUPMIX_COMBINATIONS][IVAS_MAX_NUM_BANDS]; Word16 first_frame; @@ -1188,7 +844,6 @@ typedef struct ivas_mc_paramupmix_enc_data_structure typedef struct ivas_omasa_enc_state_structure { -#ifdef IVAS_FLOAT_FIXED Word16 interpolator_fx[L_FRAME48k]; /*q15*/ Word16 prev_object_dm_gains_fx[MAX_NUM_OBJECTS][MASA_MAX_TRANSPORT_CHANNELS]; /*q15*/ Word32 chnlToFoaMtx_fx[DIRAC_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; /*q31*/ @@ -1204,7 +859,6 @@ typedef struct ivas_omasa_enc_state_structure Word16 broadband_energy_prev_e; /*exponent for broadband_energy_prev_fx*/ Word16 fade_out_gain_fx[L_FRAME48k]; /*q15*/ Word16 fade_in_gain_fx[L_FRAME48k]; /*q15*/ -#endif // IVAS_FLOAT_FIXED uint8_t nbands; uint8_t nCodingBands; uint8_t nSubframes; @@ -1214,57 +868,26 @@ typedef struct ivas_omasa_enc_state_structure HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[MAX_NUM_OBJECTS]; /* DirAC parameter estimation */ -#ifndef IVAS_FLOAT_FIXED - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ -#endif int16_t band_grouping[MASA_FREQUENCY_BANDS + 1]; int16_t block_grouping[5]; /* diffuseness */ int16_t index_buffer_intensity; -#ifndef IVAS_FLOAT_FIXED - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; - float buffer_energy[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; - float chnlToFoaMtx[DIRAC_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; - - float interpolator[L_FRAME48k]; -#endif // !IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED - float prev_object_dm_gains[MAX_NUM_OBJECTS][MASA_MAX_TRANSPORT_CHANNELS]; - float broadband_energy_sm[MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS]; - float broadband_energy_prev[MAX_NUM_OBJECTS + MASA_MAX_TRANSPORT_CHANNELS]; -#endif // !IVAS_FLOAT_FIXED int16_t prev_selected_object; uint8_t changing_object; -#ifndef IVAS_FLOAT_FIXED - float fade_out_gain[L_FRAME48k]; - float fade_in_gain[L_FRAME48k]; -#endif // !IVAS_FLOAT_FIXED } OMASA_ENC_STATE, *OMASA_ENC_HANDLE; typedef struct ivas_omasa_encoder_one_data_struct { -#ifndef IVAS_FLOAT_FIXED - float energy_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - float q_energy_ratio_ism[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; - float masa_to_total_energy_ratio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 energy_ism_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_ism_fx_e[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word32 energy_ratio_ism_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; /*q30*/ Word32 q_energy_ratio_ism_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS][MAX_NUM_OBJECTS]; /* Q30 */ Word32 masa_to_total_energy_ratio_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; /* Q30 */ -#endif -#ifndef IVAS_FLOAT_FIXED - float lp_noise_CPE; /* LP filtered total noise estimation */ -#else Word16 lp_noise_CPE_fx; /* LP filtered total noise estimation Q8 */ -#endif Word16 omasa_stereo_sw_cnt; @@ -1277,20 +900,11 @@ typedef struct ivas_omasa_encoder_one_data_struct typedef struct ivas_masa_dir_align_struct { -#ifdef IVAS_FLOAT_FIXED Word32 previous_azi_dir1_fx[MASA_FREQUENCY_BANDS]; /*q22*/ Word32 previous_ele_dir1_fx[MASA_FREQUENCY_BANDS]; /*q22*/ Word32 previous_azi_dir2_fx[MASA_FREQUENCY_BANDS]; /*q22*/ Word32 previous_ele_dir2_fx[MASA_FREQUENCY_BANDS]; /*q22*/ -#else - - float previous_azi_dir1[MASA_FREQUENCY_BANDS]; - float previous_ele_dir1[MASA_FREQUENCY_BANDS]; - - float previous_azi_dir2[MASA_FREQUENCY_BANDS]; - float previous_ele_dir2[MASA_FREQUENCY_BANDS]; -#endif } MASA_DIR_ALIGN_STATE, *MASA_DIR_ALIGN_HANDLE; @@ -1306,40 +920,23 @@ typedef struct ivas_masa_sync_struct typedef struct ivas_masa_encoder_data_struct { -#ifndef IVAS_FLOAT_FIXED - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 energy_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_e[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - Word16 q_energy; // Common Q for all energy_fx elements -#endif + Word16 q_energy; // Common Q for all energy_fx elements Word16 num_Cldfb_instances; HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[MAX_NUM_ENC_CLDFB_INSTANCES]; Word16 band_mapping[MASA_FREQUENCY_BANDS + 1]; UWord8 twoDirBands[MASA_FREQUENCY_BANDS]; SPHERICAL_GRID_DATA Sph_Grid16; -#ifdef IVAS_FLOAT_FIXED Word32 importanceWeight_fx[MASA_FREQUENCY_BANDS]; /*q30*/ Word32 lfeToTotalEnergyRatio_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; Word16 lfeToTotalEnergyRatio_e[MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif -#ifndef IVAS_FLOAT_FIXED - float importanceWeight[MASA_FREQUENCY_BANDS]; - float lfeToTotalEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES]; - float prevq_lfeToTotalEnergyRatio; -#else Word32 prevq_lfeToTotalEnergyRatio_fx; // Q31 -#endif Word16 prevq_lfeIndex; -#ifndef IVAS_FLOAT_FIXED - float onset_detector_1; - float onset_detector_2; -#else Word32 onset_detector_1_fx; Word32 onset_detector_2_fx; Word16 q_onset_detector; -#endif MASA_SYNC_STATE sync_state; @@ -1368,11 +965,7 @@ typedef struct ivas_mcmasa_enc_data_structure int16_t nCodingBands; /* delay compensation */ -#ifndef IVAS_FLOAT_FIXED - float *delay_buffer_lfe[2]; /* Delay buffer for LFE estimation */ -#else - Word32 *delay_buffer_lfe[2]; /* Delay buffer for LFE estimation */ -#endif + Word32 *delay_buffer_lfe[2]; /* Delay buffer for LFE estimation */ int16_t num_samples_delay_comp; int16_t num_slots_delay_comp; @@ -1382,27 +975,14 @@ typedef struct ivas_mcmasa_enc_data_structure IVAS_FB_MIXER_HANDLE hFbMixerLfe; /* DirAC parameter estimation */ -#ifndef IVAS_FLOAT_FIXED - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ -#else Word32 **direction_vector_m_fx[DIRAC_NUM_DIMS]; /* Average direction vector */ -#endif - Word16 **direction_vector_e[DIRAC_NUM_DIMS]; /* Average direction vector */ + Word16 **direction_vector_e[DIRAC_NUM_DIMS]; /* Average direction vector */ int16_t band_grouping[MASA_FREQUENCY_BANDS + 1]; int16_t block_grouping[5]; /* diffuseness */ int16_t index_buffer_intensity; int8_t no_col_avg_diff; -#ifndef IVAS_FLOAT_FIXED - float **buffer_intensity_real[DIRAC_NUM_DIMS]; - float **buffer_intensity_real_vert; - float *buffer_energy; - - float chnlToFoaMtx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; - float chnlToFoaEvenMtx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; - float ls_azimuth[MCMASA_MAX_ANA_CHANS]; -#else Word32 **buffer_intensity_real_fx[DIRAC_NUM_DIMS]; Word16 buffer_intensity_real_q[DIRAC_NO_COL_AVG_DIFF]; Word32 **buffer_intensity_real_vert_fx; @@ -1412,7 +992,6 @@ typedef struct ivas_mcmasa_enc_data_structure Word32 chnlToFoaMtx_fx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; Word32 chnlToFoaEvenMtx_fx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; Word32 ls_azimuth_fx[MCMASA_MAX_ANA_CHANS]; -#endif int16_t leftNearest[MCMASA_MAX_ANA_CHANS]; int16_t rightNearest[MCMASA_MAX_ANA_CHANS]; @@ -1420,12 +999,6 @@ typedef struct ivas_mcmasa_enc_data_structure uint8_t isHorizontalSetup; uint8_t combineRatios; -#ifndef IVAS_FLOAT_FIXED - float prevMultiChEne; - float prevDownmixEne; - float prevEQ; - float interpolator[L_FRAME48k]; -#else Word32 prevMultiChEne_fx; Word16 prevMultiChEne_e; Word32 prevDownmixEne_fx; @@ -1433,29 +1006,18 @@ typedef struct ivas_mcmasa_enc_data_structure Word32 prevEQ_fx; Word16 prevEQ_e; Word16 interpolator_fx[L_FRAME48k]; -#endif uint8_t separateChannelEnabled; int16_t separateChannelIndex; /* LFE coding */ -#ifndef IVAS_FLOAT_FIXED - float lfeLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; - float totalLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *lfeAnaRingBuffer[2]; -#else Word32 lfeLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; Word16 lfeLfEne_e[MAX_PARAM_SPATIAL_SUBFRAMES]; Word32 totalLfEne[MAX_PARAM_SPATIAL_SUBFRAMES]; Word16 totalLfEne_e[MAX_PARAM_SPATIAL_SUBFRAMES]; Word32 *lfeAnaRingBuffer[2]; -#endif int16_t ringBufferPointer; -#ifndef IVAS_FLOAT_FIXED - float lowpassSum[2]; -#else Word32 lowpassSum[2]; -#endif int16_t ringBufferSize; } MCMASA_ENC_DATA, *MCMASA_ENC_HANDLE; @@ -1468,24 +1030,12 @@ typedef struct ivas_osba_enc_data_structure { -#ifdef IVAS_FLOAT_FIXED Word32 interpolator_fx[L_FRAME48k]; -#else - float interpolator[L_FRAME48k]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 prev_object_dm_gains_fx[MAX_NUM_OBJECTS][MAX_INPUT_CHANNELS]; -#else - float prev_object_dm_gains[MAX_NUM_OBJECTS][MAX_INPUT_CHANNELS]; -#endif int16_t nchan_ism; -#ifdef IVAS_FLOAT_FIXED Word32 *input_data_mem_fx[MAX_NUM_OBJECTS]; -#else - float *input_data_mem[MAX_NUM_OBJECTS]; -#endif } OSBA_ENC_DATA, *OSBA_ENC_HANDLE; /*----------------------------------------------------------------------------------* @@ -1494,24 +1044,17 @@ typedef struct ivas_osba_enc_data_structure typedef struct stereo_cng_enc { - Word16 prev_sg_average_counter; /* Counter for sidegain averaging */ - Word16 sg_active_cnt; /* Counter for sidegain averaging */ - Word16 sg_average_counter; /* Counter for sidegain averaging */ -#ifndef IVAS_FLOAT_FIXED - float sg_average[STEREO_DFT_ERB4_BANDS]; /* Sidegain average */ - float prev_sg_average[STEREO_DFT_ERB4_BANDS]; /* Previous sidegain average */ - float mem_cohBand[STEREO_DFT_BAND_MAX / 2]; /* Coherence memory */ - float prev_cohBand[2 * ( STEREO_DFT_BAND_MAX / 2 )]; /* Previous coherence */ -#else + Word16 prev_sg_average_counter; /* Counter for sidegain averaging */ + Word16 sg_active_cnt; /* Counter for sidegain averaging */ + Word16 sg_average_counter; /* Counter for sidegain averaging */ Word32 sg_average_fx[STEREO_DFT_ERB4_BANDS]; /* Sidegain average Q26 */ Word32 prev_sg_average_fx[STEREO_DFT_ERB4_BANDS]; /* Previous sidegain average Q26 */ Word32 mem_cohBand_fx[STEREO_DFT_BAND_MAX / 2]; /* Coherence memory Q31 */ Word32 prev_cohBand_fx[2 * ( STEREO_DFT_BAND_MAX / 2 )]; /* Previous coherence Q31 */ -#endif - Word16 cng_counter; /* Counter for cng period length */ - Word16 td_active; /* TD-stereo indication */ - Word16 first_SID_after_TD; /* Set if first SID frame after TD stereo */ - Word16 first_SID; /* Set if first SID frame since codec start */ + Word16 cng_counter; /* Counter for cng period length */ + Word16 td_active; /* TD-stereo indication */ + Word16 first_SID_after_TD; /* Set if first SID frame after TD stereo */ + Word16 first_SID; /* Set if first SID frame since codec start */ } STEREO_CNG_ENC, *STEREO_CNG_ENC_HANDLE; @@ -1593,22 +1136,18 @@ typedef struct mct_enc_data_structure int16_t bitsChannelPairIndex; /* bits needed to code channel pair index, depends on number of active channels */ MCT_BLOCK_DATA_HANDLE hBlockData[MCT_MAX_BLOCKS]; -#ifdef IVAS_FLOAT_FIXED Word32 lastxCorrMatrix_fx[MCT_MAX_CHANNELS][MCT_MAX_CHANNELS]; Word16 lastxCorrMatrix_e; -#endif int16_t lowE_ch[MCT_MAX_CHANNELS]; uint16_t mc_global_ild[MCT_MAX_CHANNELS]; int16_t nBitsMCT; /* number of bits spent on mct side info */ /* pointers to local buffers */ -#ifdef IVAS_FLOAT_FIXED Word32 *p_mdst_spectrum_long_fx[MCT_MAX_BLOCKS][CPE_CHANNELS]; Word32 *p_orig_spectrum_long_fx[MCT_MAX_BLOCKS][CPE_CHANNELS]; Word16 q_orig_spectrum_long_fx[MCT_MAX_BLOCKS][CPE_CHANNELS]; Word16 q_orig_spectrum_long_com; Word16 q_mdst_spectrum_long_fx[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; -#endif int16_t tnsBits[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; /* number of tns bits in the frame */ int16_t tnsSize[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; /* number of tns parameters put into prm */ int16_t p_param[MCT_MAX_BLOCKS][CPE_CHANNELS][NB_DIV]; @@ -1624,12 +1163,6 @@ typedef struct mct_enc_data_structure typedef struct stereo_dmx_evs_phase_only_correlation_structure { -#ifndef IVAS_FLOAT_FIXED - float P[L_FRAME48k]; - float peakQ[CPE_CHANNELS]; - float peak_width[CPE_CHANNELS]; - float confidence; -#endif Word32 P_fx[L_FRAME48k]; // Q31 Word32 peakQ_fx[CPE_CHANNELS]; // Q16 @@ -1640,11 +1173,6 @@ typedef struct stereo_dmx_evs_phase_only_correlation_structure int16_t itdLR[CPE_CHANNELS]; int16_t shift_limit; -#ifndef IVAS_FLOAT_FIXED - const float *wnd; - float eps; - const float *sin; -#endif const Word32 *wnd_fx; Word32 eps_fx; // Q31 @@ -1655,14 +1183,6 @@ typedef struct stereo_dmx_evs_phase_only_correlation_structure typedef struct stereo_dmx_evs_correlation_filter_structure { int16_t init_frmCntr; -#ifndef IVAS_FLOAT_FIXED - float isd_rate_s; - float iccr_s; - float ipd_ff[STEREO_DMX_EVS_NB_SUBBAND_MAX]; - float Pr[STEREO_DMX_EVS_NB_SUBBAND_MAX]; - float Pi[STEREO_DMX_EVS_NB_SUBBAND_MAX]; - float rfft_ipd_coef[L_FRAME48k / 2 + 1]; -#endif Word16 isd_rate_s_fx; // Q15 Word32 iccr_s_fx; // Q31 @@ -1674,14 +1194,6 @@ typedef struct stereo_dmx_evs_correlation_filter_structure int16_t pha_len; int16_t fad_len; -#ifndef IVAS_FLOAT_FIXED - float win[STEREO_DMX_EVS_PHA_LEN_MAX]; - float fad_g[STEREO_DMX_EVS_FAD_LEN_MAX]; - float *p_prev_taps[CPE_CHANNELS], prev_taps[CPE_CHANNELS][STEREO_DMX_EVS_PHA_LEN_MAX]; - float *p_curr_taps[CPE_CHANNELS], curr_taps[CPE_CHANNELS][STEREO_DMX_EVS_PHA_LEN_MAX]; - - float data_mem[CPE_CHANNELS][STEREO_DMX_EVS_PHA_LEN_MAX]; -#endif Word16 win_fx[STEREO_DMX_EVS_PHA_LEN_MAX]; // Q14 Word32 fad_g_fx[STEREO_DMX_EVS_FAD_LEN_MAX]; // Q31 @@ -1698,16 +1210,9 @@ typedef struct stereo_dmx_evs_correlation_filter_structure STEREO_DMX_EVS_PRC curr_prc; STEREO_DMX_EVS_PRC prev_prc; int16_t prc_hys_cnt; -#ifndef IVAS_FLOAT_FIXED - float fad_g_prc[L_FRAME48k]; -#endif Word32 fad_g_prc_fx[L_FRAME48k]; // Q31 int16_t fad_len_prc; -#ifndef IVAS_FLOAT_FIXED - float trns_aux_energy[CPE_CHANNELS]; - float crst_fctr; -#endif Word32 trns_aux_energy_fx[CPE_CHANNELS]; Word16 trns_aux_energy_fx_e[CPE_CHANNELS]; @@ -1720,16 +1225,6 @@ typedef struct stereo_dmx_evs_enc_data_structure STEREO_DMX_EVS_POC_HANDLE hPOC; STEREO_DMX_EVS_PHA_HANDLE hPHA; -#ifndef IVAS_FLOAT_FIXED - float itd; - - float pre_dmx_energy[1]; - float aux_dmx_energy[CPE_CHANNELS]; - - float dmx_weight[1 + CPE_CHANNELS]; - - const float *s_wnd; -#endif Word32 itd_fx; // Q16 @@ -1756,12 +1251,8 @@ typedef struct ivas_lfe_enc_data_structure const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; int16_t lfe_enc_indices_coeffs_tbl[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; int16_t lfe_bits; -#ifndef IVAS_FLOAT_FIXED - float *old_wtda_audio; -#else Word32 *old_wtda_audio_fx; Word16 q_old_wtda_audio; -#endif // IVAS_FLOAT_FIXED } LFE_ENC_DATA, *LFE_ENC_HANDLE; @@ -1806,7 +1297,7 @@ typedef struct encoder_config_structure Word16 Opt_PCA_ON; /* flag indicating PCA operation in SBA */ #ifdef DEBUGGING - /* debugging options */ +/* debugging options */ int16_t stereo_mode_cmdl; /* stereo mode forced from the command-line */ int16_t force; /* parameter to force specific "core" of the Core-Coder*/ int16_t mdct_stereo_mode_cmdl; /* mdct stereo mode forced from command-line, employed only when DEBUG_FORCE_MDCT_STEREO_MODE is activated */ @@ -1826,10 +1317,8 @@ typedef struct { ENCODER_CONFIG_HANDLE hEncoderConfig; /* Encoder configuration structure */ -#ifdef IVAS_FLOAT_FIXED Word32 *p_data_fx[MAX_INPUT_CHANNELS+MAX_NUM_OBJECTS]; /* fixed-point input audio buffers */ Word16 q_data_fx; /* Q-factor of fixed-point input audio buffers */ -#endif Indice *ind_list; /* List of indices */ Word16 ivas_max_num_indices; /* Maximum allowed number of indices in the list */ Indice *ind_list_metadata; /* List of indices for metadata */ @@ -1840,11 +1329,7 @@ typedef struct Word16 sba_analysis_order; /* Ambisonic (SBA) order used for analysis and coding */ Word16 codec_mode; /* Mode1 or Mode2 of core codec */ Word16 last_codec_mode; /* previous frame Mode 1 or 2 */ -#ifdef IVAS_FLOAT_FIXED Word32 **mem_hp20_in_fx; /* input signals HP filter memories */ -#else - float **mem_hp20_in; /* input signals HP filter memories */ -#endif /* core-encoder modules */ Word16 nSCE; /* number of total SCEs */ diff --git a/lib_enc/ivas_stereo_adapt_GR_enc.c b/lib_enc/ivas_stereo_adapt_GR_enc.c index 310e2ec72..e5cd1da07 100644 --- a/lib_enc/ivas_stereo_adapt_GR_enc.c +++ b/lib_enc/ivas_stereo_adapt_GR_enc.c @@ -47,7 +47,6 @@ static int16_t adapt_GR_sg( const int16_t *in, const int16_t len, const int16_t no_symb, int16_t *nbits, int16_t *in_enc, const int16_t *map0, const int16_t no_GR_ord ); -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * calculate_diff() * @@ -88,48 +87,8 @@ static void calculate_diff( return; } -#else -/*---------------------------------------------------------------------* - * calculate_diff() - * - * calculate difference wrt previous frame and maps it to positive integer - *---------------------------------------------------------------------*/ -static void calculate_diff( - const int16_t *in, /* i : current frame values */ - const int16_t *prev, /* i : previous frmae values */ - int16_t *in_diff, /* o : difference values */ - const int16_t len /* i : vector length */ -) -{ - int16_t i, tmp; - for ( i = 0; i < len; i++ ) - { - tmp = in[i] - prev[i]; - if ( tmp > 0 ) - { - in_diff[i] = 2 * tmp - 1; - } - else - { - if ( tmp < 0 ) - { - in_diff[i] = -2 * tmp; - } - else - { - in_diff[i] = 0; - } - } - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * calculate_bit_diff() * @@ -173,50 +132,8 @@ static Word16 calculate_bit_diff( return nb; } -#else -/*---------------------------------------------------------------------* - * calculate_bit_diff() - * - * estimates the GR number of bits for encoding differential values - * selects between GR order 0 or 1 - *---------------------------------------------------------------------*/ - -/*! r: number of bits */ -static int16_t calculate_bit_diff( - int16_t *in_diff, /* i : values to be encoded */ - int16_t len, /* i : number of params */ - int16_t *flag_diff /* o : selected GR order */ -) -{ - int16_t i, nb, nb1; - nb = 0; - nb1 = 0; - for ( i = 0; i < len; i++ ) - { - nb += in_diff[i]; - nb1 += ( ( in_diff[i] ) >> 1 ); - } - nb += len; - nb1 += 2 * len; - if ( nb1 < nb ) - { - nb = nb1 + 1; - *flag_diff = 1; /* GR order for differential coding */ - } - else - { - nb = nb + 1; - *flag_diff = 0; - } - - return nb; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * adapt_GR_ief_fx() * @@ -282,60 +199,8 @@ Word16 adapt_GR_ief_fx( return flag; } -#else -/*---------------------------------------------------------------------* - * adapt_GR_ief() - * - * adaptive GR coding considering also the differential case - *---------------------------------------------------------------------*/ - -/*! r: used GR order */ -int16_t adapt_GR_ief( - const int16_t *in, /* i : vector to encode */ - int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ - const int16_t *prev, /* i : previous frame data */ - const int16_t len, /* i : input vector length */ - const int16_t no_symb, /* i : number of symbols */ - int16_t *nbits, /* o : number of used bits */ - int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ - const int16_t *map0, /* i : mapping array */ - const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ - int16_t *nbits_diff, /* o : number bits in diff encoding */ - const int16_t side_gain_counter, /* i : number of frames since last abs coding */ - float *side_gain_bitdiff_lp, /* i/o: LP-filtered bit difference between abs/diff */ - const int16_t try_diff /* i : diff coding allowed 1/0 */ -) -{ - int16_t nb_diff, flag, flag_diff; - int16_t bitdiff; - - flag = adapt_GR_sg( in, len, no_symb, nbits, in_enc, map0, no_GR_ord ); - - if ( try_diff ) /* inter-frame prediction allowed */ - { - calculate_diff( in, prev, in_diff, len ); - nb_diff = calculate_bit_diff( in_diff, len, &flag_diff ); - *nbits_diff = nb_diff; - bitdiff = min( 5 * len, *nbits ) - ( nb_diff + 1 ); - *side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_LP_FAC * ( (float) bitdiff ) + ( 1.0f - STEREO_DFT_BITDIFF_LP_FAC ) * ( *side_gain_bitdiff_lp ); - if ( bitdiff > STEREO_DFT_BITDIFF_ABS_SELECT * ( *side_gain_bitdiff_lp ) * ( (float) side_gain_counter ) / ( (float) ( STEREO_DFT_FEC_THRESHOLD + 1 ) ) ) - { - flag = no_GR_ord + flag_diff; - *nbits = nb_diff + 1; - } - } - else - { - *nbits_diff = 100; - flag_diff = -1; - } - - return flag; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * adapt_GR_rpg1_ief() * @@ -415,82 +280,8 @@ Word16 adapt_GR_rpg1_ief( return GR_ord; } -#else -/*---------------------------------------------------------------------* - * adapt_GR_rpg1_ief() - * - * use adaptive GR for RPG's considering also the differential case - *---------------------------------------------------------------------*/ - -/*! r: used GR order */ -int16_t adapt_GR_rpg1_ief( - const int16_t *in, /* i : res pred gains input vector */ - int16_t *in_diff, /* o : encoded symbols in case of differential encoding */ - const int16_t *prev, /* i : previous frame data */ - const int16_t len, /* i : input vector length */ - const int16_t no_symb, /* i : number of symbols */ - int16_t *nbits, /* o : number of used bits */ - int16_t *in_enc, /* o : symbold actually encoded after adapt_GR */ - const int16_t *maps, /* i : mapping array */ - int16_t *nbits_diff, /* o : estimated no of bits for differential encoding */ - const int16_t no_GR_ord, /* i : number of GR order to try 2: 0,1; 3:0,1,2 */ - const int16_t try_diff /* i : diff coding allowed 1/0 */ -) -{ - const int16_t *map0; - int16_t s, i, GR_ord, flag_diff, nb_diff; - - map0 = &maps[8 * NO_SYMB_GR_PRED_G]; - - if ( in[0] == 0 ) - { - s = 0; - for ( i = 0; i < len; i++ ) - { - s += in[i]; - } - - if ( s == 0 ) - { - /* encode only the first zero with GR1 */ - *nbits = ( ( map0[0] ) >> 1 ) + 2; - in_enc[0] = map0[0]; - } - else - { - *nbits = 1000; /* large number such that the plain coding will be selected */ - } - GR_ord = 1; - } - else - { - GR_ord = adapt_GR_sg( in, len, no_symb, nbits, in_enc, maps, no_GR_ord ); - } - - if ( try_diff ) - { - calculate_diff( in, prev, in_diff, len ); - nb_diff = calculate_bit_diff( in_diff, len, &flag_diff ); - *nbits_diff = nb_diff; - - if ( ( nb_diff + 1 ) < *nbits ) /* there is one more bit to signal differential coding */ - { - GR_ord = no_GR_ord + flag_diff; - - *nbits = nb_diff + 1; - } - } - else - { - *nbits_diff = 100; - } - - return GR_ord; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * adapt_GR_sg() * @@ -617,122 +408,8 @@ static Word16 adapt_GR_sg( return -1; } -#else -/*---------------------------------------------------------------------* - * adapt_GR_sg() - * - * adaptive GR coding - *---------------------------------------------------------------------*/ - -/*! r: GR order */ -static int16_t adapt_GR_sg( - const int16_t *in, /* i : data to be encoded */ - const int16_t len, /* i : number of params to be encoded */ - const int16_t no_symb, /* i : max number of symbols */ - int16_t *nbits, /* o : estimated number of bits */ - int16_t *in_enc, /* o : mapped symbols */ - const int16_t *map0, /* i : mapping */ - const int16_t no_GR_ord /* i : number of GR orders to be tested (2 or 3)*/ -) -{ - const int16_t *map; - int16_t nbits0, nbits1, nbits2, symb, map_symb, i, nb0, nb1, nb2; - - if ( no_symb == NO_SYMB_GR_SIDE_G ) - { - map = &map0[15 * no_symb]; - } - else - { - map = &( map0[8 * no_symb] ); - } - - set_s( in_enc, 0, len ); - - nbits1 = 0; - nbits0 = 0; - nbits2 = 0; - - for ( i = 0; i < len; i++ ) - { - symb = in[i]; - map_symb = map[symb]; - - if ( i == 0 ) - { - /* GR order is 1 for first band*/ - nb0 = ( map_symb >> 1 ) + 1; - nb2 = nb0 - 2; - } - else - { - nb0 = map_symb; - nb2 = ( ( map_symb ) >> 2 ); - } - nb1 = ( ( map_symb ) >> 1 ); - - in_enc[i] = map_symb; - nbits0 += nb0; - nbits1 += nb1; - nbits2 += nb2; - - /* update counts */ - map = &( map0[symb * no_symb] ); - } - - if ( no_GR_ord == 2 ) - { - nbits0 += len + 1; - nbits1 += 2 * len + 1; - if ( ( nbits0 <= nbits1 ) ) - { - *nbits = nbits0; - return 0; - } - else - { - *nbits = nbits1; - return 1; - } - } - else - { - if ( no_GR_ord == 3 ) - { - nbits0 += len + 2; - nbits1 += 2 * len + 1; - nbits2 += 3 * len + 2; - - if ( ( nbits1 <= nbits2 ) && ( nbits1 <= nbits0 ) ) - { - *nbits = nbits1; - return 1; - } - - if ( ( nbits0 <= nbits2 ) && ( nbits0 <= nbits1 ) ) - { - *nbits = nbits0; - return 0; - } - - if ( ( nbits2 <= nbits0 ) && ( nbits2 <= nbits1 ) ) - { - *nbits = nbits2; - return 2; - } - } - else - { - IVAS_ERROR( IVAS_ERR_INTERNAL, "Wrong number of GR orders!" ); - } - } - - return -1; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * write_GR0() * @@ -772,48 +449,8 @@ Word16 write_GR0( return nb; } -#else -/*---------------------------------------------------------------------* - * write_GR0() - * - * write data with GR order 0 - *---------------------------------------------------------------------*/ - -/*! r: number of bits written */ -int16_t write_GR0( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : data to be encoded */ - const int16_t len /* i : input data length */ -) -{ - int16_t nb = 0, i, n, val; - for ( i = 0; i < len; i++ ) - { - n = in[i] + 1; - if ( n < 16 ) - { - val = ( 1 << in[i] ) - 1; - val = 2 * val; - push_indice( hBstr, ind, val, n ); - } - else - { - push_indice( hBstr, ind, 16383, 14 ); - push_indice( hBstr, ind, ( 1 << ( n - 15 ) ) - 1, n - 15 ); - push_indice( hBstr, ind, 0, 1 ); - } - nb += n; - } - - return nb; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * write_GR1() * @@ -856,51 +493,8 @@ Word16 write_GR1( return nb; } -#else -/*---------------------------------------------------------------------* - * write_GR1() - * - * write data with GR order 1 - *---------------------------------------------------------------------*/ - -/*! r: number of bits written */ -int16_t write_GR1( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : data to be encoded */ - const int16_t len /* i : input data length */ -) -{ - int16_t nb = 0, i, n, val; - - for ( i = 0; i < len; i++ ) - { - n = ( in[i] >> 1 ); - if ( n < 14 ) - { - val = ( 1 << n ) - 1; - val = 4 * val + ( in[i] & 1 ); - push_indice( hBstr, ind, val, n + 2 ); - } - else - { - push_indice( hBstr, ind, 16383, 14 ); - if ( n > 14 ) - { - push_indice( hBstr, ind, ( 1 << ( n - 14 ) ) - 1, n - 14 ); /* 1 n times */ - } - push_indice( hBstr, ind, 0, 1 ); - push_indice( hBstr, ind, in[i] & 1, 1 ); - } - nb += n + 2; - } - - return nb; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * write_GR2() * @@ -946,54 +540,8 @@ static Word16 write_GR2( return nb; } -#else -/*---------------------------------------------------------------------* - * write_GR2() - * - * write data with GR order 2 - *---------------------------------------------------------------------*/ - -/*! r: number of bits written */ -static int16_t write_GR2( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : data to be encoded */ - const int16_t len /* i : input data length */ -) -{ - int16_t nb = 0, i, n; - - for ( i = 0; i < len; i++ ) - { - n = ( in[i] >> 2 ); - if ( n < 14 ) - { - if ( n > 0 ) - { - push_indice( hBstr, ind, ( 1 << n ) - 1, n ); /* 1 n times */ - } - push_indice( hBstr, ind, 0, 1 ); - push_indice( hBstr, ind, in[i] & 3, 2 ); - } - else - { - push_indice( hBstr, ind, 16383, 14 ); - if ( n > 14 ) - { - push_indice( hBstr, ind, ( 1 << ( n - 14 ) ) - 1, n - 14 ); /* 1 n times */ - } - push_indice( hBstr, ind, 0, 1 ); - push_indice( hBstr, ind, in[i] & 3, 2 ); - } - nb += n + 3; - } - - return nb; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * write_bitstream_GR() * @@ -1027,42 +575,8 @@ Word16 write_bitstream_GR( return nb; } -#else -/*---------------------------------------------------------------------* - * write_bitstream_GR() - * - * generic GR encoder for GR order 0 or 1 - *---------------------------------------------------------------------*/ - -/*! r: number of bits written */ -int16_t write_bitstream_GR( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : input vector */ - const int16_t len, /* i : input vector length */ - const int16_t GR_ord /* i : GR order */ -) -{ - int16_t nb = 0; - push_indice( hBstr, ind, GR_ord, 1 ); - nb += 1; - - if ( GR_ord == 0 ) - { - nb += write_GR0( hBstr, ind, in, len ); - } - else - { - nb += write_GR1( hBstr, ind, in, len ); - } - return nb; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * write_bitstream_adapt_GR() * @@ -1124,67 +638,3 @@ Word16 write_bitstream_adapt_GR( return nb; } -#else -/*---------------------------------------------------------------------* - * write_bitstream_adapt_GR() - * - * write encoded data using adaptive GR - *---------------------------------------------------------------------*/ - -/*! r: number of bits written */ -int16_t write_bitstream_adapt_GR( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - const int16_t ind, /* i : bitstream index */ - const int16_t *in, /* i : values to be written in bitstream */ - const int16_t len, /* i : values vector length */ - const int16_t GR_ord, /* i : GR order to be used */ - const int16_t no_GR_ord /* i : speech/music 0/1 */ -) -{ - int16_t nb = 0; - - nb = 0; - /* first component first */ - nb += write_GR1( hBstr, ind, in, 1 ); - - /* write the GR order */ - if ( no_GR_ord == 2 ) - { - push_indice( hBstr, ind, GR_ord, 1 ); - nb += 1; - } - else - { - if ( GR_ord == 1 ) - { - push_indice( hBstr, ind, 0, 1 ); /* GR order = 1*/ - nb += 1; - } - else - { - push_indice( hBstr, ind, 1, 1 ); - push_indice( hBstr, ind, GR_ord >> 1, 1 ); /* '10' for GR ord = 0; '11' for GR ord 2 */ - nb += 2; - } - } - - if ( GR_ord == 0 ) - { - - nb += write_GR0( hBstr, ind, &in[1], len - 1 ); - } - else - { - if ( GR_ord == 1 ) - { - nb += write_GR1( hBstr, ind, &in[1], len - 1 ); - } - else - { - nb += write_GR2( hBstr, ind, &in[1], len - 1 ); - } - } - - return nb; -} -#endif diff --git a/lib_enc/ivas_stereo_classifier.c b/lib_enc/ivas_stereo_classifier.c index b63cf8de3..621a63524 100644 --- a/lib_enc/ivas_stereo_classifier.c +++ b/lib_enc/ivas_stereo_classifier.c @@ -85,22 +85,10 @@ /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void rc_filter_fx( const Word32 x, Word32 *y, const Word16 order, const Word32 tau ); -#else -static void rc_filter( const float x, float *y, const int16_t order, const float tau ); -#endif -#ifdef IVAS_FLOAT_FIXED static void edge_detect( const Word32 *inp, const Word16 len, const Word32 inp_min, const Word32 inp_max, Word16 *edge_str, Word16 *edge_type ); -#else -static void edge_detect( const float *inp, const int16_t len, const float inp_min, const float inp_max, float *edge_str, int16_t *edge_type ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 redge_detect_fx( const Word32 *inp, const Word16 len, const Word32 inp_min, const Word32 inp_max, Word16 *edge_min_e ); -#else -static float redge_detect( const float *inp, const int16_t len, const float inp_min, const float inp_max ); -#endif /*-------------------------------------------------------------------* * Function select_stereo_mode() @@ -109,7 +97,6 @@ static float redge_detect( const float *inp, const int16_t len, const float inp_ *-------------------------------------------------------------------*/ /*! r: element mode */ -#ifdef IVAS_FLOAT_FIXED Word16 select_stereo_mode( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ const IVAS_FORMAT ivas_format /* i : IVAS format */ @@ -263,11 +250,7 @@ Word16 select_stereo_mode( move16(); /* reset stereo classifier when switching from MDCT stereo to Unified stereo */ -#ifndef IVAS_FLOAT_FIXED - stereo_classifier_init( hCPE->hStereoClassif ); -#else stereo_classifier_init_fx( hCPE->hStereoClassif ); -#endif hStereoClassif->lrtd_mode = lrtd_mode; move16(); } @@ -293,215 +276,7 @@ Word16 select_stereo_mode( return ( element_mode ); } -#else -int16_t select_stereo_mode( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -) -{ - int16_t element_mode; - STEREO_CLASSIF_HANDLE hStereoClassif; - int16_t is_speech; - int16_t stereo_switching_flag; - - /* initialization */ - element_mode = hCPE->element_mode; - hStereoClassif = hCPE->hStereoClassif; - - /* set binary flag to prevent LRTD mode on music */ - hStereoClassif->is_speech = 0.97f * hStereoClassif->is_speech + 0.03f * hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0]; - is_speech = ( hStereoClassif->is_speech < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < 0.0f ); - - /* set binary flag indicating LRTD mode based on unclr/xtalk classifiers' decisions */ - hStereoClassif->prev_lrtd_mode = hStereoClassif->lrtd_mode; - hStereoClassif->unclr_decision = ( hStereoClassif->unclr_decision && hCPE->hCoreCoder[0]->flag_noisy_speech_snr == 0 && hCPE->element_brate > IVAS_16k4 ); - hStereoClassif->lrtd_mode = ( ( hStereoClassif->unclr_decision | hStereoClassif->xtalk_decision ) && is_speech ); - - stereo_switching_flag = 1; - - if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO || ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && hCPE->element_brate < MASA_STEREO_MIN_BITRATE ) -#ifdef DEBUGGING - || ( hCPE->stereo_mode_cmdl == IVAS_CPE_DFT || hCPE->stereo_mode_cmdl == IVAS_CPE_TD ) -#endif - ) - { - stereo_switching_flag = 0; - } - - if ( hCPE->element_brate >= MIN_BRATE_MDCT_STEREO ) - { - hStereoClassif->prev_lrtd_mode = 0; - hStereoClassif->lrtd_mode = 0; - element_mode = IVAS_CPE_MDCT; - } - else if ( hCPE->element_brate < MIN_BRATE_MDCT_STEREO && hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - hStereoClassif->lrtd_mode = 0; - element_mode = IVAS_CPE_DFT; - - if ( stereo_switching_flag == 1 && hCPE->element_brate > IVAS_13k2 && hCPE->hCoreCoder[0]->hSpMusClas->past_dlp[0] < 1.0f && hCPE->hCoreCoder[0]->hSpMusClas->wdlp_xtalk < -0.01f && hCPE->hCoreCoder[0]->vad_flag == 1 && ( hCPE->hStereoMdct->sw_uncorr || hStereoClassif->xtalk_decision ) ) - { - hStereoClassif->lrtd_mode = 1; - element_mode = IVAS_CPE_TD; - } - } - - /* set the element mode */ - if ( hStereoClassif->lrtd_mode == 1 && stereo_switching_flag == 1 ) - { - element_mode = IVAS_CPE_TD; - } - else if ( element_mode < IVAS_CPE_MDCT ) - { - if ( stereo_switching_flag == 0 ) - { - if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && hCPE->element_brate < MASA_STEREO_MIN_BITRATE ) - { - element_mode = IVAS_CPE_DFT; - } -#ifdef DEBUGGING - if ( hCPE->stereo_mode_cmdl > 1 ) - { - element_mode = hCPE->stereo_mode_cmdl; - } -#endif - } - else if ( element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec > 0 && is_speech ) - { - /* if unclr_decision goes from 1->0 on active content, continue in LRTD mode */ - hStereoClassif->lrtd_mode = 1; - } - else if ( stereo_switching_flag == 1 ) - { - element_mode = IVAS_CPE_DFT; - } - } - else if ( stereo_switching_flag == 1 ) - { - element_mode = IVAS_CPE_DFT; - } - } - - /* switch from LRTD to DFT when xtalk_decision goes from 0->1 (note: this special case is not handled in the xtalk classifier) */ - if ( hCPE->last_element_mode == IVAS_CPE_TD && element_mode == IVAS_CPE_TD && hStereoClassif->xtalk_decision == 1 ) - { - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 && hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt > 15 && hCPE->hStereoTD->tdm_last_LRTD_frame_cnt > 3 && hCPE->hCoreCoder[0]->clas < VOICED_CLAS && ( hCPE->element_brate >= IVAS_16k4 || hStereoClassif->xtalk_wscore < 0.01f ) ) - { - if ( stereo_switching_flag == 1 ) - { - element_mode = IVAS_CPE_DFT; - } - hStereoClassif->xtalk_decision = 0; - hStereoClassif->lrtd_mode = 0; - } - } - - if ( hCPE->last_element_mode != element_mode ) - { - if ( hCPE->last_element_mode != IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_TD ) - { - int16_t lrtd_mode = hStereoClassif->lrtd_mode; - - /* reset stereo classifier when switching from MDCT stereo to Unified stereo */ - stereo_classifier_init( hCPE->hStereoClassif ); - - hStereoClassif->lrtd_mode = lrtd_mode; - } - else - { - /* reset UNCLR classifier parameters */ - set_f( hStereoClassif->unclr_fv, -1.0f, SSC_MAX_NFEA ); - hStereoClassif->unclr_corrLagMax_prev = 0; - - /* reset xtalk classifier parameters */ - set_f( hStereoClassif->xtalk_fv, -1.0f, SSC_MAX_NFEA ); - } - } - - if ( element_mode == IVAS_CPE_TD && hCPE->hCoreCoder[0]->Opt_DTX_ON ) - { - hCPE->hStereoCng->td_active = 1; - hCPE->hStereoCng->first_SID_after_TD = 1; - } - - return ( element_mode ); -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function stereo_classifier_init() - * - * Initialize stereo classifier handle - *-------------------------------------------------------------------*/ - -void stereo_classifier_init( - STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier structure */ -) -{ - /* initialization of features for xtalk classifier and UNCLR classifier */ - hStereoClassif->clas_ch1 = 0; - set_s( hStereoClassif->pitch_ch1, 0, 3 ); - set_f( hStereoClassif->voicing_ch1, 0.0f, 3 ); - hStereoClassif->cor_map_sum_ch1 = 0.0f; - set_f( hStereoClassif->lsf_ch1, 0.0f, M ); - hStereoClassif->lepsP_ch1 = 0.0f; - hStereoClassif->dE1_ch1 = 0.0f; - hStereoClassif->dE1_ch2 = 0.0f; - hStereoClassif->nchar_ch1 = 0.0f; - hStereoClassif->nchar_ch2 = 0.0f; - hStereoClassif->non_sta_ch1 = 0.0f; - hStereoClassif->sp_div_ch1 = 0.0f; - hStereoClassif->ps_diff_ch1 = 0.0f; - hStereoClassif->ps_diff_ch2 = 0.0f; - hStereoClassif->ps_sta_ch1 = 0.0f; - hStereoClassif->ps_sta_ch2 = 0.0f; - hStereoClassif->prev_g_IPD = 0.5f; - hStereoClassif->prev_IPD = 0.0f; - hStereoClassif->prev_ratio_m1_m2 = 0.0f; - set_f( hStereoClassif->xtalk_score_buf, 0.0f, XTALK_SCORE_BUF_LEN ); - hStereoClassif->ratio_L = 0.5f; - hStereoClassif->vad_flag_glob = 0; - hStereoClassif->vad_relE = 0; - hStereoClassif->is_speech = 0.0f; - - set_s( hStereoClassif->aEn_raw, 0, CPE_CHANNELS ); - - hStereoClassif->Etot_dn = 0.0f; - hStereoClassif->Etot_up = 0.0f; - - set_f( hStereoClassif->relE_buf, 0.0f, UNCLR_L_RELE ); - set_f( hStereoClassif->Etot_buf, 0.0f, UNCLR_L_ETOT ); - set_f( hStereoClassif->unclr_relE_0_1_LT, 0.0f, UNCLR_RC_ORDER ); - hStereoClassif->unclr_sw_enable_cnt[0] = 0; - hStereoClassif->unclr_sw_enable_cnt[1] = 0; - - hStereoClassif->unclr_decision = 0; - hStereoClassif->unclr_wscore = 0.0f; - - set_f( hStereoClassif->unclr_fv, -1.0f, SSC_MAX_NFEA ); - hStereoClassif->unclr_corrLagMax_prev = 0; - hStereoClassif->ave_ener_L = 0; - hStereoClassif->ave_ener_R = 0; - hStereoClassif->relE_0_1 = 0.01f; - hStereoClassif->relE_0_1_LT = 0.01f; - - set_f( hStereoClassif->xtalk_fv, -1.0f, SSC_MAX_NFEA ); - hStereoClassif->xtalk_wscore = 0.0f; - hStereoClassif->xtalk_decision = 0; - hStereoClassif->xtalk_score_wrelE = 0.0f; - - hStereoClassif->lrtd_mode = 0; - hStereoClassif->prev_lrtd_mode = 0; - - hStereoClassif->silence_flag = 0; - - return; -} -#else /*-------------------------------------------------------------------* * Function stereo_classifier_init_fx() * @@ -641,7 +416,6 @@ void stereo_classifier_init_fx( return; } -#endif /*-----------------------------------------------------------------* @@ -672,7 +446,6 @@ hStereoClassif->ps_sta_ch1_fx has exponent hStereoClassif->ps_sta_ch1_e hStereoClassif->ps_diff_ch2_fx has exponent hStereoClassif->ps_diff_ch2_e hStereoClassif->ps_sta_ch2_fx has exponent hStereoClassif->ps_sta_ch2_e */ -#ifdef IVAS_FLOAT_FIXED void stereo_classifier_features_ivas_fx( STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ const Word16 idchan, /* i : channel ID */ @@ -1053,306 +826,71 @@ void stereo_classifier_features_ivas_fx( move16(); return; } -#else -void stereo_classifier_features( - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ - const int16_t idchan, /* i : channel ID */ - const int16_t element_mode, /* i : element mode */ - const int16_t vad_flag, /* i : VAD flag */ - const float lsf_new[], /* i : LSFs at the end of the frame */ - const float epsP[], /* i : LP analysis residual energies for each iteration*/ - const int16_t pitch[], /* i : open-loop pitch values for quantiz. */ - const float voicing[], /* i : OL maximum normalized correlation */ - const float cor_map_sum, /* i : speech/music clasif. parameter */ - const float non_staX, /* i : unbound non-stationarity for sp/mu clas. */ - const float sp_div, /* i : spectral diversity feature */ - const int16_t clas /* i : signal class */ + +/*-------------------------------------------------------------------* + * Function unclr_classifier_td() + * + * Classify current TD frame as uncorrelated L/R (1) or normal (0) + *-------------------------------------------------------------------*/ +void unclr_classifier_td_fx( + CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ ) { - int16_t i, clas_ch2; - float lepsP_ch2, ener_l, ener_r; - - /* combine VAD flags from both channels */ - if ( idchan == 0 ) - { - hStereoClassif->vad_flag_glob = vad_flag; - } - else - { - hStereoClassif->vad_flag_glob |= vad_flag; - } + Word16 i, ind, exp; + Word32 relE_ST, score, fvn; + Word16 edge, edge_0_1, score_exp; + STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; - if ( ( element_mode == IVAS_CPE_DFT && idchan == 0 ) || ( element_mode == IVAS_CPE_TD && idchan == 1 ) ) + /* calcualte raw score based on LR */ + exp = 0; + move16(); + score = UNCLR_INTERCEPT_TD_Q28; + move32(); + score_exp = 3; + move16(); + FOR( i = 0; i < SIZE_UNCLR_ISEL_TD; i++ ) { - /* update Etot_up and Etot_dn based on aEn */ - ener_l = 10.0f * log10f( hStereoClassif->ave_ener_L + 1.0f ); - ener_r = 10.0f * log10f( hStereoClassif->ave_ener_R + 1.0f ); - mvr2r( &hStereoClassif->Etot_buf[0], &hStereoClassif->Etot_buf[1], UNCLR_L_ETOT - 1 ); - hStereoClassif->Etot_buf[0] = max( 0, max( ener_l, ener_r ) ); - - if ( hStereoClassif->aEn_raw[0] == 6 || ( element_mode == IVAS_CPE_TD && hStereoClassif->aEn_raw[1] == 6 ) ) - { - /* active signal, update upper bound */ - if ( hStereoClassif->Etot_buf[0] < hStereoClassif->Etot_up ) - { - /* energy decreases -> slower update */ - hStereoClassif->Etot_up = 0.99f * hStereoClassif->Etot_up + 0.01f * hStereoClassif->Etot_buf[0]; - } - else - { - /* energy increases -> faster update */ - hStereoClassif->Etot_up = 0.95f * hStereoClassif->Etot_up + 0.05f * hStereoClassif->Etot_buf[0]; - } - } - else if ( ( element_mode == IVAS_CPE_DFT && hStereoClassif->aEn_raw[0] == 0 ) || - ( element_mode == IVAS_CPE_TD && hStereoClassif->aEn_raw[0] == 0 && hStereoClassif->aEn_raw[1] == 0 ) ) - { - /* inactive signal, update lower bound */ - if ( hStereoClassif->Etot_buf[0] < hStereoClassif->Etot_dn ) - { - /* energy decreases -> faster update */ - hStereoClassif->Etot_dn = 0.9f * hStereoClassif->Etot_dn + 0.1f * hStereoClassif->Etot_buf[0]; - } - else - { - /* energy increases -> slower update */ - hStereoClassif->Etot_dn = 0.95f * hStereoClassif->Etot_dn + 0.05f * hStereoClassif->Etot_buf[0]; - } - - if ( hStereoClassif->Etot_dn < 30.0f ) - { - /* do not decrease below lower bound threshold */ - hStereoClassif->Etot_dn = 30.0f; - } - } - - /* upper bound is too low and close to lower bound -> update it */ - if ( hStereoClassif->Etot_up < hStereoClassif->Etot_dn + 20.0f ) - { - hStereoClassif->Etot_up = hStereoClassif->Etot_dn + 20.0f; - } - - /* normalize Etot to (0,1) */ - hStereoClassif->relE_0_1 = lin_interp( hStereoClassif->Etot_buf[0], hStereoClassif->Etot_dn, 0.0f, hStereoClassif->Etot_up, 0.9f, 1 ); + ind = unclr_isel_td[i]; + move16(); - /* update relE_buf */ - mvr2r( &hStereoClassif->relE_buf[0], &hStereoClassif->relE_buf[1], UNCLR_L_RELE - 1 ); - hStereoClassif->relE_buf[0] = hStereoClassif->relE_0_1; + /* mean & std removal */ + fvn = BASOP_Util_Divide3232_Scale_cadence( L_sub( hStereoClassif->unclr_fv_fx[ind], unclr_mean_td[i] ), unclr_scale_td[i], &exp ); + fvn = Mpy_32_32( fvn, unclr_coef_td[i] ); // Q = 31-exp+15-31 = 15-exp + exp = add( exp, 16 ); // exp = 31-(15-exp) = 16+exp - if ( hStereoClassif->relE_0_1 >= hStereoClassif->relE_buf[1] ) - { - hStereoClassif->relE_0_1_LT = 0.9f * hStereoClassif->relE_0_1_LT + 0.1f * hStereoClassif->relE_0_1; - } - else - { - hStereoClassif->relE_0_1_LT = 0.95f * hStereoClassif->relE_0_1_LT + 0.05f * hStereoClassif->relE_0_1; - } + /* LR */ + score = BASOP_Util_Add_Mant32Exp( score, score_exp, fvn, exp, &score_exp ); + } - /* estimate VAD flag based on relative energy */ - if ( hStereoClassif->relE_0_1_LT < 0.1f ) - { - hStereoClassif->vad_relE = 0; - } - else - { - hStereoClassif->vad_relE = 1; - } + score = L_shl_sat( score, sub( score_exp, 3 ) ); // Q28 - /* combine classical VAD flag with VAD flag based on relative energy */ - hStereoClassif->vad_flag_glob &= hStereoClassif->vad_relE; - } - if ( idchan == 0 ) + /* normalize score to -1:+1 */ + IF( GT_32( score, UNCLR_SCORE_THR_Q28 ) ) { - mvr2r( lsf_new, hStereoClassif->lsf_ch1, M ); - hStereoClassif->lepsP_ch1 = logf( epsP[13] + 1e-5f ) - logf( epsP[0] + 1e-5f ); - - hStereoClassif->xtalk_fv[E_lsf_1] = lsf_new[0]; - hStereoClassif->xtalk_fv[E_lsf_4] = lsf_new[3]; - hStereoClassif->xtalk_fv[E_lsf_9] = lsf_new[8]; - hStereoClassif->xtalk_fv[E_lsf_14] = lsf_new[13]; - hStereoClassif->xtalk_fv[E_lepsP_13] = hStereoClassif->lepsP_ch1; + score = UNCLR_SCORE_THR_Q28; + move32(); } - else + ELSE IF( LT_32( score, -UNCLR_SCORE_THR_Q28 ) ) { - hStereoClassif->xtalk_fv[E_sum_d_LSF] = 0; - for ( i = 0; i < M; i++ ) - { - hStereoClassif->xtalk_fv[E_sum_d_LSF] += fabsf( lsf_new[i] - hStereoClassif->lsf_ch1[i] ); - } - - if ( hStereoClassif->vad_flag_glob && ( hStereoClassif->ratio_L > 0.0f && hStereoClassif->ratio_L < 1.0f ) ) - { - hStereoClassif->xtalk_fv[E_sum_d_LSF] = 0.0f; - } - lepsP_ch2 = logf( epsP[13] + 1e-5f ) - logf( epsP[0] + 1e-5f ); - hStereoClassif->xtalk_fv[E_d_lepsP_13] = fabsf( hStereoClassif->lepsP_ch1 - lepsP_ch2 ); + score = -UNCLR_SCORE_THR_Q28; + move32(); } + /*score /= 2 * UNCLR_SCORE_THR; = score = score / 8 + score Q will be 31 to account the above operation*/ - if ( idchan == 0 ) - { - mvs2s( pitch, hStereoClassif->pitch_ch1, 3 ); - mvr2r( voicing, hStereoClassif->voicing_ch1, 3 ); + /* weight raw score with relative energy */ + score = Mpy_32_32( score, hStereoClassif->relE_0_1_fx ); // Q31 - hStereoClassif->xtalk_fv[E_pitch] = 1 / 3.0f * ( pitch[0] + pitch[1] + pitch[2] ); - hStereoClassif->xtalk_fv[E_voicing] = 1 / 3.0f * ( voicing[0] + voicing[1] + voicing[2] ); + /* rising edge detection on relE */ + relE_ST = Mean32( hStereoClassif->relE_buf_fx, UNCLR_L_RELE ); // Q31 + IF( hStereoClassif->relE_0_1_fx > relE_ST ) + { + rc_filter_fx( hStereoClassif->relE_0_1_fx, hStereoClassif->unclr_relE_0_1_LT_fx, UNCLR_RC_ORDER, RC_FACT_UP_Q31 ); } - else + ELSE { - hStereoClassif->xtalk_fv[E_d_pitch] = 0; - hStereoClassif->xtalk_fv[E_d_voicing] = 0; - for ( i = 0; i < 3; i++ ) - { - hStereoClassif->xtalk_fv[E_d_pitch] += (float) abs( pitch[i] - hStereoClassif->pitch_ch1[i] ); - hStereoClassif->xtalk_fv[E_d_voicing] += fabsf( voicing[i] - hStereoClassif->voicing_ch1[i] ); - } - hStereoClassif->xtalk_fv[E_d_pitch] /= 3.0f; - hStereoClassif->xtalk_fv[E_d_voicing] /= 3.0f; - } - - if ( idchan == 0 ) - { - hStereoClassif->cor_map_sum_ch1 = cor_map_sum; - hStereoClassif->non_sta_ch1 = non_staX; - hStereoClassif->sp_div_ch1 = sp_div; - - hStereoClassif->xtalk_fv[E_cor_map_sum] = cor_map_sum; - hStereoClassif->xtalk_fv[E_nchar] = logf( hStereoClassif->nchar_ch1 + 1.0f ); - hStereoClassif->xtalk_fv[E_non_sta] = non_staX; - hStereoClassif->xtalk_fv[E_sp_div] = logf( sp_div + 1.0f ); - } - else - { - hStereoClassif->xtalk_fv[E_d_cor_map_sum] = fabsf( hStereoClassif->cor_map_sum_ch1 - cor_map_sum ); - hStereoClassif->xtalk_fv[E_d_nchar] = fabsf( logf( hStereoClassif->nchar_ch1 + 1.0f ) - logf( hStereoClassif->nchar_ch2 + 1.0f ) ); - hStereoClassif->xtalk_fv[E_d_non_sta] = fabsf( hStereoClassif->non_sta_ch1 - non_staX ); - hStereoClassif->xtalk_fv[E_d_sp_div] = fabsf( logf( hStereoClassif->sp_div_ch1 + 1.0f ) - logf( sp_div + 1.0f ) ); - } - - if ( idchan == 0 ) - { - hStereoClassif->xtalk_fv[E_dE1] = logf( hStereoClassif->dE1_ch1 + 1.0f ); - } - else - { - hStereoClassif->xtalk_fv[E_d_dE1] = fabsf( logf( hStereoClassif->dE1_ch1 + 1.0f ) - logf( hStereoClassif->dE1_ch2 + 1.0f ) ); - } - - if ( idchan == 0 ) - { - if ( clas > VOICED_CLAS ) - { - hStereoClassif->clas_ch1 = VOICED_CLAS; - } - else if ( clas < VOICED_CLAS ) - { - hStereoClassif->clas_ch1 = UNVOICED_CLAS; - } - else - { - hStereoClassif->clas_ch1 = clas; - } - - hStereoClassif->xtalk_fv[E_clas] = hStereoClassif->clas_ch1; - } - else - { - if ( clas > VOICED_CLAS ) - { - clas_ch2 = VOICED_CLAS; - } - else if ( clas < VOICED_CLAS ) - { - clas_ch2 = UNVOICED_CLAS; - } - else - { - clas_ch2 = clas; - } - - hStereoClassif->xtalk_fv[E_d_clas] = (float) abs( hStereoClassif->clas_ch1 - clas_ch2 ); - } - - if ( idchan == 0 ) - { - hStereoClassif->xtalk_fv[E_ps_diff] = hStereoClassif->ps_diff_ch1; - hStereoClassif->xtalk_fv[E_ps_sta] = hStereoClassif->ps_sta_ch1; - } - else - { - hStereoClassif->xtalk_fv[E_d_ps_diff] = fabsf( hStereoClassif->ps_diff_ch1 - hStereoClassif->ps_diff_ch2 ); - hStereoClassif->xtalk_fv[E_d_ps_sta] = fabsf( hStereoClassif->ps_sta_ch1 - hStereoClassif->ps_sta_ch2 ); - } - - return; -} -#endif - -/*-------------------------------------------------------------------* - * Function unclr_classifier_td() - * - * Classify current TD frame as uncorrelated L/R (1) or normal (0) - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void unclr_classifier_td_fx( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -) -{ - Word16 i, ind, exp; - Word32 relE_ST, score, fvn; - Word16 edge, edge_0_1, score_exp; - STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; - - /* calcualte raw score based on LR */ - exp = 0; - move16(); - score = UNCLR_INTERCEPT_TD_Q28; - move32(); - score_exp = 3; - move16(); - FOR( i = 0; i < SIZE_UNCLR_ISEL_TD; i++ ) - { - ind = unclr_isel_td[i]; - move16(); - - /* mean & std removal */ - fvn = BASOP_Util_Divide3232_Scale_cadence( L_sub( hStereoClassif->unclr_fv_fx[ind], unclr_mean_td[i] ), unclr_scale_td[i], &exp ); - fvn = Mpy_32_32( fvn, unclr_coef_td[i] ); // Q = 31-exp+15-31 = 15-exp - exp = add( exp, 16 ); // exp = 31-(15-exp) = 16+exp - - /* LR */ - score = BASOP_Util_Add_Mant32Exp( score, score_exp, fvn, exp, &score_exp ); - } - - score = L_shl_sat( score, sub( score_exp, 3 ) ); // Q28 - - - /* normalize score to -1:+1 */ - IF( GT_32( score, UNCLR_SCORE_THR_Q28 ) ) - { - score = UNCLR_SCORE_THR_Q28; - move32(); - } - ELSE IF( LT_32( score, -UNCLR_SCORE_THR_Q28 ) ) - { - score = -UNCLR_SCORE_THR_Q28; - move32(); - } - /*score /= 2 * UNCLR_SCORE_THR; = score = score / 8 - score Q will be 31 to account the above operation*/ - - /* weight raw score with relative energy */ - score = Mpy_32_32( score, hStereoClassif->relE_0_1_fx ); // Q31 - - /* rising edge detection on relE */ - relE_ST = Mean32( hStereoClassif->relE_buf_fx, UNCLR_L_RELE ); // Q31 - IF( hStereoClassif->relE_0_1_fx > relE_ST ) - { - rc_filter_fx( hStereoClassif->relE_0_1_fx, hStereoClassif->unclr_relE_0_1_LT_fx, UNCLR_RC_ORDER, RC_FACT_UP_Q31 ); - } - ELSE - { - rc_filter_fx( hStereoClassif->relE_0_1_fx, hStereoClassif->unclr_relE_0_1_LT_fx, UNCLR_RC_ORDER, RC_FACT_DOWN_Q31 ); + rc_filter_fx( hStereoClassif->relE_0_1_fx, hStereoClassif->unclr_relE_0_1_LT_fx, UNCLR_RC_ORDER, RC_FACT_DOWN_Q31 ); } edge = extract_h( L_sub( hStereoClassif->relE_0_1_fx, hStereoClassif->unclr_relE_0_1_LT_fx[UNCLR_RC_ORDER - 1] ) ); // Q15 @@ -1378,81 +916,12 @@ void unclr_classifier_td_fx( return; } -#else -void unclr_classifier_td( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -) -{ - int16_t i, ind; - float relE_ST, edge, edge_0_1; - float score, fvn[SSC_MAX_NFEA]; - STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; - - set_f( fvn, -1.0f, SSC_MAX_NFEA ); - - /* calcualte raw score based on LR */ - score = UNCLR_INTERCEPT_TD; - for ( i = 0; i < SIZE_UNCLR_ISEL_TD; i++ ) - { - ind = unclr_isel_td[i]; - - /* mean & std removal */ - fvn[i] = ( hStereoClassif->unclr_fv[ind] - unclr_mean_td[i] ) / unclr_scale_td[i]; - - /* LR */ - score += fvn[i] * unclr_coef_td[i]; - } - - - /* normalize score to -1:+1 */ - if ( score > UNCLR_SCORE_THR ) - { - score = UNCLR_SCORE_THR; - } - else if ( score < -UNCLR_SCORE_THR ) - { - score = -UNCLR_SCORE_THR; - } - score /= 2 * UNCLR_SCORE_THR; - - /* weight raw score with relative energy */ - score *= hStereoClassif->relE_0_1; - - /* rising edge detection on relE */ - relE_ST = mean( hStereoClassif->relE_buf, UNCLR_L_RELE ); - if ( hStereoClassif->relE_0_1 > relE_ST ) - { - rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_UP ); - } - else - { - rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_DOWN ); - } - - edge = hStereoClassif->relE_0_1 - hStereoClassif->unclr_relE_0_1_LT[UNCLR_RC_ORDER - 1]; - edge_0_1 = lin_interp( edge, 0.0f, 0.95f, 1.0f, 0.9f, 1 ); - - /* LT average */ - hStereoClassif->unclr_wscore = edge_0_1 * hStereoClassif->unclr_wscore + ( 1 - edge_0_1 ) * score; - - /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ - if ( ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->unclr_wscore > 0.1f ) || ( hStereoClassif->unclr_decision == 1 && hStereoClassif->unclr_wscore < -0.07f ) ) && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 || hStereoClassif->unclr_sw_enable_cnt[1] > 0 ) ) - { - /* let's switch the binary decision */ - hStereoClassif->unclr_decision = !hStereoClassif->unclr_decision; - } - - - return; -} -#endif /*-------------------------------------------------------------------* * Function unclr_classifier_dft() * * Classifies current DFT frame as uncorrelated L/R (1) or normal stereo (0) *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void unclr_classifier_dft_fx( CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ ) @@ -1554,85 +1023,12 @@ void unclr_classifier_dft_fx( return; } -#else -void unclr_classifier_dft( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -) -{ - int16_t i, ind; - float edge, relE_ST, edge_0_1; - float score, fvn[SSC_MAX_NFEA]; - - STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; - - /* calculate raw score based on LR */ - score = UNCLR_INTERCEPT_DFT; - for ( i = 0; i < SIZE_UNCLR_ISEL_DFT; i++ ) - { - ind = unclr_isel_dft[i]; - - /* mean & std removal */ - fvn[i] = ( hStereoClassif->unclr_fv[ind] - unclr_mean_dft[i] ) / unclr_scale_dft[i]; - - /* LR */ - score += fvn[i] * unclr_coef_dft[i]; - } - - - /* normalize score to -1:+1 */ - if ( score > UNCLR_SCORE_THR ) - { - score = UNCLR_SCORE_THR; - } - else if ( score < -UNCLR_SCORE_THR ) - { - score = -UNCLR_SCORE_THR; - } - score /= 2 * UNCLR_SCORE_THR; - - /* weight raw score with relative energy */ - score *= hStereoClassif->relE_0_1; - - if ( !hStereoClassif->vad_flag_glob ) - { - score = 0; - } - - /* rising edge detector on relE */ - relE_ST = mean( hStereoClassif->relE_buf, UNCLR_L_RELE ); - if ( hStereoClassif->relE_0_1 > relE_ST ) - { - rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_UP ); - } - else - { - rc_filter( hStereoClassif->relE_0_1, hStereoClassif->unclr_relE_0_1_LT, UNCLR_RC_ORDER, RC_FACT_DOWN ); - } - - edge = hStereoClassif->relE_0_1 - hStereoClassif->unclr_relE_0_1_LT[UNCLR_RC_ORDER - 1]; - edge_0_1 = lin_interp( edge, 0.0f, 0.95f, 1.0f, 0.9f, 1 ); - - /* LT average */ - hStereoClassif->unclr_wscore = edge_0_1 * hStereoClassif->unclr_wscore + ( 1 - edge_0_1 ) * score; - - /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ - if ( ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->unclr_wscore > 0.1f ) || ( hStereoClassif->unclr_decision == 1 && hStereoClassif->unclr_wscore < -0.07f ) ) && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 ) ) - { - /* let's switch the binary decision */ - hStereoClassif->unclr_decision = !hStereoClassif->unclr_decision; - } - - - return; -} -#endif /*-------------------------------------------------------------------* * Function xtalk_classifier_td() * * Classify current TD frame as cross-talk frame (1) or normal stereo frame (0) *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void xtalk_classifier_td_fx( CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ ) @@ -1774,122 +1170,6 @@ void xtalk_classifier_td_fx( return; } -#else -void xtalk_classifier_td( - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -) -{ - int16_t i, ind, edge_type; - float score, fvn[SSC_MAX_NFEA]; - float edge, edge_0_1, wedge, scr_min, scr_max, wrelE; - - - STEREO_CLASSIF_HANDLE hStereoClassif = hCPE->hStereoClassif; - - set_f( fvn, -1.0f, SSC_MAX_NFEA ); - - /* calcualte raw score based on LR */ - score = XTALK_INTERCEPT_TD; - for ( i = 0; i < SIZE_XTALK_ISEL_TD; i++ ) - { - ind = xtalk_isel_td[i]; - - /* mean & std removal */ - fvn[i] = ( hStereoClassif->xtalk_fv[ind] - xtalk_mean_td[i] ) / xtalk_scale_td[i]; - - /* LR */ - score += fvn[i] * xtalk_coef_td[i]; - } - - /* normalize raw score to -1:+1 */ - if ( score > XTALK_SCORE_THR_TD_UP ) - { - score = 1.0f; - } - else if ( score < -XTALK_SCORE_THR_TD_DN ) - { - score = -1.0f; - } - else if ( score > 0.0f ) - { - score /= XTALK_SCORE_THR_TD_UP; - } - else - { - score /= XTALK_SCORE_THR_TD_DN; - } - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - /* overwrite score if we have just switched from DFT stereo */ - score = hStereoClassif->xtalk_score; - } - else - { - hStereoClassif->xtalk_score = score; - } - - if ( !hStereoClassif->vad_flag_glob ) - { - /* reset score to 0 in inactive segments */ - score = 0; - } - - - /* weight raw score with relative energy */ - wrelE = lin_interp( hStereoClassif->relE_0_1, 0.5f, 0.95f, 0.9f, 0.0f, 1 ); - hStereoClassif->xtalk_score_wrelE = wrelE * hStereoClassif->xtalk_score_wrelE + ( 1 - wrelE ) * score; - score = hStereoClassif->xtalk_score_wrelE; - - /* rising edge detector on raw score -> yields 1 if strong rising edge is detected in the raw score buffer */ - mvr2r( &hStereoClassif->xtalk_score_buf[0], &hStereoClassif->xtalk_score_buf[1], XTALK_SCORE_BUF_LEN - 1 ); - hStereoClassif->xtalk_score_buf[0] = score; - - minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); - maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); - - if ( ( ( scr_min < 0.0f && scr_max > 0.2f ) || ( scr_max - scr_min > 0.5f ) ) ) - { - /* test rising edge (use 0 as edge_type because of newer->older buffer samples ordering) */ - edge_type = 0; - edge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f, &edge, &edge_type ); - - if ( edge_type == 0 && edge < 0.3f ) - { - /* normalize edge to 0-1 interval */ - edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.6f, 0.0f, 1 ); - } - else - { - edge_0_1 = 0; - } - } - else - { - edge_0_1 = 0.0f; - } - - /* weight raw score based on rising edge detector */ - wedge = lin_interp( edge_0_1, 0.0f, 0.9f, 1.0f, 0.5f, 1 ); - - hStereoClassif->xtalk_wscore = wedge * hStereoClassif->xtalk_wscore + ( 1 - wedge ) * score; - - if ( !hStereoClassif->vad_flag_glob ) - { - hStereoClassif->xtalk_wscore = 0; - } - - /* binary decision w. hysteresis (switch the decision only when coder_type is GC, UC or IC) */ - if ( ( hStereoClassif->unclr_decision == 0 && hStereoClassif->xtalk_decision == 0 && hStereoClassif->xtalk_wscore > 0.03f ) /*|| (hStereoClassif->xtalk_decision == 1 && hStereoClassif->xtalk_wscore < 0.00f)*/ && ( hStereoClassif->unclr_sw_enable_cnt[0] > 0 || hStereoClassif->unclr_sw_enable_cnt[1] > 0 ) ) - { - /* let's switch the binary decision */ - hStereoClassif->xtalk_decision = !hStereoClassif->xtalk_decision; - } - - - return; -} -#endif /*-------------------------------------------------------------------* * Function xtalk_classifier_dft() @@ -1897,7 +1177,6 @@ void xtalk_classifier_td( * Classify current DFT frame as cross-talk frame (1) or normal stereo frame (0) *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void xtalk_classifier_dft_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ const Word16 itd, /* i : ITD from DFT stereo - used as a feature */ @@ -2121,164 +1400,12 @@ void xtalk_classifier_dft_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -void xtalk_classifier_dft( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int16_t itd, /* i : ITD from DFT stereo - used as a feature */ - const float gcc_phat[] /* i : GPHAT cross-channel correlation function*/ -) -{ - int16_t i, ind, itd2, thr; - float score, m1, m2; - STEREO_CLASSIF_HANDLE hStereoClassif; - ITD_DATA_HANDLE hItd; - float fvn[SSC_MAX_NFEA], edge, edge_0_1, wedge; - float ratio_m1_m2, m2_m2, d_itd2, itd1_flip; - float scr_min, scr_max; - - hStereoClassif = hCPE->hStereoClassif; - hItd = ( hCPE->hStereoDft != NULL ) ? hCPE->hStereoDft->hItd : hCPE->hStereoMdct->hItd; - - m1 = 0.0f; - m2 = 0.0f; - - itd2 = 0; - thr = ( hCPE->element_brate >= IVAS_32k ? 2 : 1 ) * CLASSIFIER_ITD_THRES; - - if ( itd > thr ) - { - m1 = fabsf( gcc_phat[itd + XTALK_PHAT_LEN] ); - m2 = fabsf( gcc_phat[0] ); - itd2 = -XTALK_PHAT_LEN; - for ( i = 1; i < XTALK_PHAT_LEN - thr; i++ ) - { - if ( fabsf( gcc_phat[i] ) > m2 ) - { - itd2 = -XTALK_PHAT_LEN + i; - m2 = fabsf( gcc_phat[i] ); - } - } - } - else if ( itd < -thr ) - { - m1 = fabsf( gcc_phat[itd + XTALK_PHAT_LEN] ); - m2 = fabsf( gcc_phat[XTALK_PHAT_LEN + thr + 1] ); - itd2 = thr + 1; - for ( i = XTALK_PHAT_LEN + thr + 2; i < 2 * XTALK_PHAT_LEN + 1; i++ ) - { - if ( fabsf( gcc_phat[i] ) > m2 ) - { - itd2 = -XTALK_PHAT_LEN + i; - m2 = fabsf( gcc_phat[i] ); - } - } - } - - ratio_m1_m2 = fabsf( m1 * m2 ) / fabsf( m1 + m2 + 1.0f ); - m2_m2 = hItd->prev_m2 * m2; - d_itd2 = (float) abs( itd2 - hItd->prev_itd2 ); - itd1_flip = (float) ( max( itd, hItd->prev_itd1 ) * ( -min( itd, hItd->prev_itd1 ) ) ); - - - hStereoClassif->xtalk_fv[E_gphat_d_itd2] = d_itd2; - hStereoClassif->xtalk_fv[E_gphat_itd1_flip] = itd1_flip; - hStereoClassif->xtalk_fv[E_gphat_ratio_m1_m2] = ratio_m1_m2 * hStereoClassif->prev_ratio_m1_m2; - hStereoClassif->xtalk_fv[E_gphat_m2_m2] = m2_m2; - - hStereoClassif->prev_ratio_m1_m2 = ratio_m1_m2; - - set_f( fvn, -1.0f, SSC_MAX_NFEA ); - - /* calcualte raw score based on LR */ - score = XTALK_INTERCEPT_DFT; - for ( i = 0; i < SIZE_XTALK_ISEL_DFT; i++ ) - { - ind = xtalk_isel_dft[i]; - - /* mean & std removal */ - fvn[i] = ( hStereoClassif->xtalk_fv[ind] - xtalk_mean_dft[i] ) / xtalk_scale_dft[i]; - - /* LR */ - score += fvn[i] * xtalk_coef_dft[i]; - } - - /* normalize score to -1:+1 */ - if ( score > XTALK_SCORE_THR_DFT ) - { - score = 1.0f; - } - else if ( score < -XTALK_SCORE_THR_DFT ) - { - score = -1.0f; - } - else - { - score /= XTALK_SCORE_THR_DFT; - } - - /* raw score */ - hStereoClassif->xtalk_score = score; - - if ( !hStereoClassif->vad_flag_glob ) - { - score = 0; - } - - - /* rising edge detector on raw score -> yields 1 if strong rising edge is detected in the given buffer */ - mvr2r( &hStereoClassif->xtalk_score_buf[0], &hStereoClassif->xtalk_score_buf[1], XTALK_SCORE_BUF_LEN - 1 ); - hStereoClassif->xtalk_score_buf[0] = score; - - minimum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_min ); - maximum( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, &scr_max ); - - if ( scr_min < 0.2f && scr_max > 0.0f ) - { - edge = redge_detect( hStereoClassif->xtalk_score_buf, XTALK_SCORE_BUF_LEN, -0.2f, 1.0f ); - edge_0_1 = lin_interp( 1 - edge, 1.0f, 1.0f, 0.83f, 0.0f, 1 ); - } - else - { - edge_0_1 = 0.0f; - } - - /* weight raw score based on rising edge detector */ - wedge = lin_interp( edge_0_1, 0.0f, 0.95f, 1.0f, 0.3f, 1 ); - hStereoClassif->xtalk_wscore = wedge * hStereoClassif->xtalk_wscore + ( 1 - wedge ) * score; - - if ( ( itd == 0 ) || ( hCPE->hCoreCoder[0]->vad_flag == 0 ) ) - { - hStereoClassif->xtalk_decision = 0; - } - else if ( hCPE->element_brate >= IVAS_24k4 && - hStereoClassif->xtalk_decision == 0 && ( ( m1 * 0.8 < m2 && hItd->prev_m1 * 0.8 < hItd->prev_m2 && abs( itd2 - hItd->prev_itd2 ) < 4 && m1 > 0.15 && hItd->prev_m1 > 0.15 ) || ( hStereoClassif->xtalk_wscore > 0.8 ) || ( itd > thr && hItd->prev_itd1 < -thr && hStereoClassif->silence_flag == 0 ) || ( hItd->prev_itd1 > thr && itd < -thr && hStereoClassif->silence_flag == 0 ) ) && - hCPE->hCoreCoder[0]->vad_flag == 1 && hCPE->hCoreCoder[0]->flag_noisy_speech_snr == 0 && hCPE->hCoreCoder[0]->hNoiseEst->aEn_inac_cnt > 15 ) - { - hStereoClassif->xtalk_decision = 1; - } - else if ( hCPE->element_brate >= IVAS_16k4 && hStereoClassif->xtalk_decision == 0 && abs( itd ) > STEREO_DFT_ITD_MAX && ( hCPE->hCoreCoder[0]->lp_speech - hCPE->hCoreCoder[0]->lp_noise ) > 25.0f ) - { - hStereoClassif->xtalk_decision = 1; - } - - - /* updates */ - hItd->prev_m1 = m1; - hItd->prev_m2 = m2; - hItd->prev_itd1 = itd; - hItd->prev_itd2 = itd2; - - return; -} -#endif /*-------------------------------------------------------------------* * Function rc_filter() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void rc_filter_fx( const Word32 x, // Q31 Word32 *y, // Q31 @@ -2297,24 +1424,6 @@ static void rc_filter_fx( return; } -#else -static void rc_filter( - const float x, - float *y, - const int16_t order, - const float tau ) -{ - int16_t i; - - y[0] = tau * y[0] + ( 1 - tau ) * x; - for ( i = 1; i < order; i++ ) - { - y[i] = tau * y[i] + ( 1 - tau ) * y[i - 1]; - } - - return; -} -#endif /*-------------------------------------------------------------------* * Function edge_detect() @@ -2324,7 +1433,6 @@ static void rc_filter( * Set edge_type to 0/1/2 when calling this function to specify the edge type you want to detect. The returned value will be modified * according to the edge type detected (-1 indicates that no edge has been detected) *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void edge_detect( const Word32 *inp, /* i : input buffer Q31*/ const Word16 len, /* i : length of the input buffer Q0*/ @@ -2460,105 +1568,6 @@ static void edge_detect( return; } -#else -static void edge_detect( - const float *inp, /* i : input buffer */ - const int16_t len, /* i : length of the input buffer */ - const float inp_min, /* i : minimum value for edge detection */ - const float inp_max, /* i : maximum value for edge detection */ - float *edge_str, /* o : edge strength (from 0 to Inf) */ - int16_t *edge_type /* i/o: edge type (to be) detected: 0 = falling, 1 = rising, 2 = both */ -) -{ - int16_t i, j, et; - float y, err, edge_slope, edge[EDGE_MAX_LEN]; - float edge_min, err0; - - et = -1; - edge_min = 1e7f; - - if ( *edge_type == 0 || *edge_type == 2 ) - { - /* falling edge detection */ - set_f( edge, 0.0f, EDGE_MAX_LEN ); - - /* set error at 0th index */ - if ( inp[0] > inp_max ) - { - err0 = 0.0f; - } - else - { - /* inhibits edge smearing effect */ - err0 = powf( inp[0] - inp_max, 2 ); - } - - /* test edges on intervals from 2 to len */ - for ( i = 1; i < len; i++ ) - { - edge_slope = ( inp_max - inp_min ) / i; - edge[i] = err0; - for ( j = 1; j <= i; j++ ) - { - y = inp_max - edge_slope * j; - err = y - check_bounds( inp[j], inp_min, inp_max ); - edge[i] += err * err; - } - - edge[i] /= i + 1; - - if ( edge[i] < edge_min ) - { - edge_min = edge[i]; - et = 0; - } - } - } - - if ( *edge_type == 1 || *edge_type == 2 ) - { - /* rising edge detection */ - set_f( edge, 0.0f, EDGE_MAX_LEN ); - - /* set error at 0th index */ - if ( inp[0] < inp_min ) - { - err0 = 0.0f; - } - else - { - /* inhibits edge smearing effect */ - err0 = powf( inp[0] - inp_min, 2 ); - } - - /* test edges on intervals from 2 to len */ - for ( i = 1; i <= len; i++ ) - { - edge_slope = ( inp_max - inp_min ) / i; - edge[i] = err0; - for ( j = 1; j < i; j++ ) - { - y = inp_min + edge_slope * j; - err = y - check_bounds( inp[j], inp_min, inp_max ); - edge[i] += err * err; - } - - edge[i] /= i + 1; - - if ( edge[i] < edge_min ) - { - edge_min = edge[i]; - et = 1; - } - } - } - - *edge_str = edge_min; - *edge_type = et; - - return; -} -#endif /*-------------------------------------------------------------------* * Function redge_detect() @@ -2567,7 +1576,6 @@ static void edge_detect( * Analyzes the input buffer and outputs value close to 1 when it detects strong rising edge *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: rising edge strength normalized to 0-1 */ static Word32 redge_detect_fx( const Word32 *inp, /* i : input buffer (ordered from newest to oldest values)*/ @@ -2661,64 +1669,3 @@ static Word32 redge_detect_fx( return edge_min; // Q31 } -#else -/*! r: rising edge strength normalized to 0-1 */ -static float redge_detect( - const float *inp, /* i : input buffer (ordered from newest to oldest values)*/ - const int16_t len, /* i : length of the input buffer */ - const float inp_min, /* i : minimum value for edge detection */ - const float inp_max /* i : maximum value for edge detection */ -) -{ - int16_t i, j; - float y, err, edge_slope, edge[REDGE_MAX_LEN]; - float edge_min, err0; - - set_f( edge, 0.0f, REDGE_MAX_LEN ); - edge_min = 1e7f; - - /* test rising edges on intervals from 2 to len */ - if ( inp[0] > inp_max ) - { - err0 = 0.0f; - } - else - { - err0 = powf( inp[0] - inp_max, 2 ); - } - for ( i = 1; i < len; i++ ) - { - edge_slope = ( inp_max - inp_min ) / i; - edge[i] = err0; - for ( j = 1; j < i; j++ ) - { - y = inp_max - edge_slope * j; - if ( inp[j] == inp[j - 1] && inp[j] == inp_max ) - { - /* we are saturated at inp_max */ - err = 0.0f; - } - else if ( inp[j] < inp_min ) - { - /* we are below inp_min */ - err = y - inp_min; - } - else - { - err = y - inp[j]; - } - err = err * err; - edge[i] += err; - } - - edge[i] /= i + 1; - - if ( edge[i] < edge_min ) - { - edge_min = edge[i]; - } - } - - return edge_min; -} -#endif diff --git a/lib_enc/ivas_stereo_cng_enc.c b/lib_enc/ivas_stereo_cng_enc.c index 7fd2e4766..0a3c84b1e 100644 --- a/lib_enc/ivas_stereo_cng_enc.c +++ b/lib_enc/ivas_stereo_cng_enc.c @@ -42,9 +42,7 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------- @@ -60,7 +58,6 @@ * * Encodes the coherence in SID frames * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_enc_sid_calc_coh_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ Word32 prev_cohBand[2 * ( STEREO_DFT_BAND_MAX / 2 )], /* i/o: Previous coherence Q31 */ @@ -225,86 +222,6 @@ void stereo_dft_enc_sid_calc_coh_fx( return; } -#else -void stereo_dft_enc_sid_calc_coh( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ - float prev_cohBand[2 * ( STEREO_DFT_BAND_MAX / 2 )], /* i/o: Previous coherence */ - int16_t *td_active, /* i/o: TD stereo mode indicator */ - int16_t *first_SID, /* i/o: First SID indicator */ - float *cohBand /* i/o: Coherence per band */ -) -{ - int16_t b, k; - float coh_weight; - float coh_weight_sum; - float xspec_scale; - /* Cluster the coherence into bands using a weighted average. The coherence is weighted with the energy spectrum of the - mixdown signal. */ - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - cohBand[b] = 0; - coh_weight_sum = 0; - - if ( hStereoDft->coh_fade_counter == 0 && !*first_SID ) - { - for ( k = hStereoDft->band_limits[b]; k < hStereoDft->band_limits[b + 1]; k++ ) - { - xspec_scale = sqrtf( ( prev_cohBand[b] * ( hStereoDft->Spd_L_smooth[k] * hStereoDft->Spd_R_smooth[k] ) ) / ( hStereoDft->xspec_smooth[2 * k] * hStereoDft->xspec_smooth[2 * k] + hStereoDft->xspec_smooth[2 * k + 1] * hStereoDft->xspec_smooth[2 * k + 1] + EPSILON ) ); - hStereoDft->xspec_smooth[2 * k] *= xspec_scale; - hStereoDft->xspec_smooth[2 * k + 1] *= xspec_scale; - } - - cohBand[b] = prev_cohBand[b]; - } - else - { - for ( k = hStereoDft->band_limits[b]; k < hStereoDft->band_limits[b + 1]; k++ ) - { - coh_weight = hStereoDft->DFT[0][2 * k] * hStereoDft->DFT[0][2 * k] + hStereoDft->DFT[0][2 * k + 1] * hStereoDft->DFT[0][2 * k + 1]; - cohBand[b] += coh_weight * ( hStereoDft->xspec_smooth[2 * k] * hStereoDft->xspec_smooth[2 * k] + hStereoDft->xspec_smooth[2 * k + 1] * hStereoDft->xspec_smooth[2 * k + 1] ) / ( hStereoDft->Spd_L_smooth[k] * hStereoDft->Spd_R_smooth[k] + EPSILON ); - coh_weight_sum += coh_weight; - } - if ( coh_weight_sum > 0 ) - { - cohBand[b] = cohBand[b] / coh_weight_sum; - } - } - } - - if ( *first_SID ) - { - mvr2r( cohBand, prev_cohBand, hStereoDft->nbands ); - mvr2r( prev_cohBand, &( prev_cohBand[STEREO_DFT_BAND_MAX / 2] ), hStereoDft->nbands ); - *first_SID = 0; - } - - if ( hStereoDft->coh_fade_counter < COH_FADE_MAX && ( *td_active || hStereoDft->currentNumUpdates < COH_FADE_UPDATES ) ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - cohBand[b] = ( cohBand[b] * hStereoDft->coh_fade_counter + prev_cohBand[b] * ( COH_FADE_MAX - hStereoDft->coh_fade_counter ) ) / COH_FADE_MAX; - } - hStereoDft->coh_fade_counter++; - if ( hStereoDft->coh_fade_counter > 0 ) - { - mvr2r( &prev_cohBand[STEREO_DFT_BAND_MAX / 2], prev_cohBand, hStereoDft->nbands ); - } - mvr2r( cohBand, &prev_cohBand[STEREO_DFT_BAND_MAX / 2], hStereoDft->nbands ); - } - else - { - if ( hStereoDft->coh_fade_counter > 0 ) - { - mvr2r( &prev_cohBand[STEREO_DFT_BAND_MAX / 2], prev_cohBand, hStereoDft->nbands ); - } - mvr2r( cohBand, &prev_cohBand[STEREO_DFT_BAND_MAX / 2], hStereoDft->nbands ); - hStereoDft->coh_fade_counter = COH_FADE_MAX; - *td_active = 0; - } - - return; -} -#endif /*--------------------------------------------------------------- * stereo_dft_enc_sid_coh() @@ -312,7 +229,6 @@ void stereo_dft_enc_sid_calc_coh( * Encodes the coherence in SID frames * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_enc_sid_coh_fx( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ Word32 *mem_cohBand, /* i/o: Coherence memory */ @@ -531,193 +447,6 @@ void stereo_dft_enc_sid_coh_fx( return; } -#else -void stereo_dft_enc_sid_coh( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - float *mem_cohBand, /* i/o: Coherence memory */ - const int16_t nbands, /* i : number of DFT stereo bands */ - int16_t *nb_bits, /* i/o: number of bits written */ - float *cohBand /* i/o: Coherence per band */ -) -{ - int16_t b, k; - int16_t zeropad; - int16_t nr_of_sid_stereo_bits; - int16_t coh_pred_index; - float min_pred_err; - float pred_err; - int16_t res_index; - int16_t i; - float tmp; - const float *pptr; - float pred; - float cohBandq[STEREO_DFT_BAND_MAX / 2]; /* Reconstructed coherence values for intra-frame prediction */ - const float *alphaptr; - int16_t nbbits_test; - int16_t prev_nbbits_test; - int16_t alpha_step; - int16_t alpha_level; - int16_t n; - - nr_of_sid_stereo_bits = ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS; - zeropad = 0; - - /* Encode coherence vector. Find best fixed predictor by minimizing prediction error on input vector. - The prediction is formed by a linear combination of the previous values - in the vector. Hence, prediction is only done for coefficient 1 and up. - If not enough bits for at least one bit for encoding prediction - residual then skip the coding and write zeroes to the bitstream if needed. - In this case the decoder will set alpha to 0, i.e. reuse previous coherence */ - - if ( ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS - STEREO_DFT_PRED_NBITS ) > 0 ) - { - min_pred_err = 1e6f; - coh_pred_index = -1; - pptr = dft_cng_coh_pred[0]; - for ( k = 0; k < STEREO_DFT_N_COH_PRED; k++ ) - { - pred_err = 0; - for ( b = 1; b < nbands; b++ ) /* Set b=1 to skip first coefficient (same error would otherwise be added for all predictors: (cohBand[0] - 0).^2) */ - { - pred = 0; - for ( i = 0; i < b; i++ ) - { - pred += ( *pptr++ ) * cohBand[i]; - } - tmp = cohBand[b] - pred; - pred_err += tmp * tmp; - } - if ( pred_err < min_pred_err ) /* Store best candidate */ - { - min_pred_err = pred_err; - coh_pred_index = k; - } - } - - push_next_indice( hBstr, coh_pred_index, STEREO_DFT_PRED_NBITS ); /* Write selected predictor to bitstream */ - ( *nb_bits ) += STEREO_DFT_PRED_NBITS; - - /* Pick two different alphas (one low and one high) as a function - of the number of available bits. */ - alpha_step = 0; - for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_STEPS - 1; i++ ) - { - if ( nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS > dft_cng_coh_alpha_start[i] ) - { - alpha_step = i + 1; - } - } - - /* Calculate the number of encoded bits. */ - alphaptr = dft_cng_alpha_bits[alpha_step]; - alpha_level = 0; - prev_nbbits_test = 100; - for ( i = 0; i < STEREO_DFT_N_COH_ALPHA_LEVELS; i++ ) - { - nbbits_test = 0; - pptr = dft_cng_coh_pred[coh_pred_index]; - pred = 0.4f; - for ( b = 0; b < nbands; b++ ) - { - for ( n = 0; n < b; n++ ) - { - pred += ( *pptr++ ) * cohBandq[n]; - } - - pred = ( *alphaptr ) * pred + ( 1 - ( *alphaptr ) ) * mem_cohBand[b]; - pred_err = cohBand[b] - pred; - res_index = usquant( pred_err, &pred_err, -0.4f, 0.1f, 9 ); - res_index = dft_cng_coh_i2u[res_index]; - nbbits_test += res_index + 1; - res_index = dft_cng_coh_u2i[res_index]; - pred_err = usdequant( res_index, -0.4f, 0.1f ); - cohBandq[b] = pred + pred_err; - if ( cohBandq[b] > 1 ) - { - cohBandq[b] = 1; - } - else if ( cohBandq[b] < 0 ) - { - cohBandq[b] = 0; - } - pred = 0; - } - - if ( nbbits_test < nr_of_sid_stereo_bits - *nb_bits - STEREO_DFT_N_COH_ALPHA_BITS ) - { - alpha_level = i; - } - - if ( nbbits_test < prev_nbbits_test ) - { - alpha_level = i; - } - - prev_nbbits_test = nbbits_test; - alphaptr++; - } - - /* Do the actual encoding using the selected predictor and alpha */ - push_next_indice( hBstr, alpha_level, STEREO_DFT_N_COH_ALPHA_BITS ); /* Write selected alpha index to bitstream */ - ( *nb_bits ) += STEREO_DFT_N_COH_ALPHA_BITS; - alphaptr = &dft_cng_alpha_bits[alpha_step][alpha_level]; - pptr = dft_cng_coh_pred[coh_pred_index]; /* Set pointer to selected predictor */ - pred = 0.4f; - - for ( b = 0; b < nbands; b++ ) - { - /* Intra-frame prediction using quantized values */ - for ( i = 0; i < b; i++ ) - { - pred += ( *pptr++ ) * cohBandq[i]; - } - /* Weighted intra/inter-frame prediction */ - pred = ( *alphaptr ) * pred + ( 1 - ( *alphaptr ) ) * mem_cohBand[b]; - pred_err = cohBand[b] - pred; - res_index = usquant( pred_err, &pred_err, -0.4f, 0.1f, 9 ); /* Quantize prediction residual */ - res_index = dft_cng_coh_i2u[res_index]; /* Convert to unary codeword - res_index+1 now equal to codeword - length in bits with the following order: - [0.0, 0.1, -0.1, 0.2, -0.2, 0.3, -0.3, 0.4, -0.4] */ - /* Bit rate truncation */ - while ( res_index + 1 + *nb_bits > nr_of_sid_stereo_bits && res_index > 0 ) - { - res_index = max( 0, res_index - 2 ); /* Reduce step by one, keeping sign. */ - } - /* Write residual index to bitstream */ - if ( res_index + 1 + *nb_bits <= nr_of_sid_stereo_bits ) /* If the bit limit is reached, res_index = 0 is assumed for remaining indices */ - { - *nb_bits += write_GR0( hBstr, IND_STEREO_DFT_SID_COH, &res_index, 1 ); - } - - /* Reconstruct */ - res_index = dft_cng_coh_u2i[res_index]; - pred_err = usdequant( res_index, -0.4f, 0.1f ); - cohBandq[b] = pred + pred_err; /* Store for intra-frame prediction */ - if ( cohBandq[b] > 1 ) - { - cohBandq[b] = 1; - } - else if ( cohBandq[b] < 0 ) - { - cohBandq[b] = 0; - } - - mem_cohBand[b] = cohBandq[b]; /* Update memory for next frame */ - pred = 0; - } - } - - /* Zero pad up to max number of bits to get constant bitrate */ - for ( k = *nb_bits; k < nr_of_sid_stereo_bits; k++ ) - { - push_next_indice( hBstr, zeropad, 1 ); - ( *nb_bits )++; - } - - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_cng_side_gain() @@ -725,7 +454,6 @@ void stereo_dft_enc_sid_coh( * Calculate CNG side gain *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_cng_side_gain_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ @@ -887,123 +615,6 @@ void stereo_dft_cng_side_gain_fx( return; } -#else -void stereo_dft_cng_side_gain( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: DFT stereo handle */ - STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ - const int32_t core_brate, /* i : core bitrate */ - const int32_t last_core_brate, /* i : last core bitrate */ - const int16_t bwidth /* i : audio band-width */ -) -{ - int16_t b; - int16_t sgSum; - int16_t band_limits_full[STEREO_DFT_BAND_MAX + 1]; - float prev_weight; - int16_t NFFT_inner; - int16_t nbands_full; - float tmp; - - NFFT_inner = ( STEREO_DFT_N_MAX_ENC * inner_frame_tbl[bwidth] ) / L_FRAME48k; - nbands_full = hStereoDft->nbands; - - /* Calculate side gain average. First average in an inactive period */ - /* uses a weighted sum of the current average and the one from the */ - /* previous inactive segment */ - - /* Inactive frame => Update both sets of averages */ - for ( b = 0; b < nbands_full; b++ ) - { - hStereoCng->sg_average[b] += hStereoDft->sidSideGain[b]; - } - hStereoCng->sg_average_counter++; - - hStereoCng->cng_counter++; - hStereoCng->cng_counter = min( hStereoCng->cng_counter, STEREO_DFT_SG_ACT_CNT_MAX ); - - if ( core_brate == SID_2k40 ) - { - /* SID frame */ - if ( last_core_brate == FRAME_NO_DATA || hStereoCng->first_SID ) - { - /* If first ever SID frame or not the first SID in an inactive segment */ - /* Calculate average only based on current sg_average */ - /* Copy current sum to previous */ - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hStereoCng->prev_sg_average[b] = hStereoCng->sg_average[b]; - hStereoCng->sg_average[b] = hStereoCng->sg_average[b] / (float) hStereoCng->sg_average_counter; - } - - hStereoCng->prev_sg_average_counter = hStereoCng->sg_average_counter; - } - else - { - /* If first SID in a new inactive segment */ - /* Calculate weighting factor based on the time since the last inactive segment */ - prev_weight = 0.8f * (float) ( STEREO_DFT_SG_ACT_CNT_MAX - hStereoCng->sg_active_cnt ) / (float) STEREO_DFT_SG_ACT_CNT_MAX + 0.2f; - - /* Calculate weighted average between prev and current sg */ - /* Set prev_sg sum to current. */ - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - tmp = hStereoCng->sg_average[b]; - hStereoCng->sg_average[b] = ( hStereoCng->sg_average[b] + prev_weight * hStereoCng->prev_sg_average[b] ) / ( (float) hStereoCng->sg_average_counter + prev_weight * (float) hStereoCng->prev_sg_average_counter ); - hStereoCng->prev_sg_average[b] = tmp; - } - hStereoCng->prev_sg_average_counter = hStereoCng->sg_average_counter; - } - - /* Use coarse band partitioning in inactive frames */ - /* Rescale bands to the coarser partitioning taking the band size into account */ - mvs2s( hStereoDft->band_limits, band_limits_full, STEREO_DFT_BAND_MAX + 1 ); -#ifndef IVAS_FLOAT_FIXED - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, min( STEREO_DFT_N_32k_ENC, NFFT_inner ), ENC ); -#else - hStereoDft->nbands = stereo_dft_band_config_fx( hStereoDft->band_limits, hStereoDft->hConfig->band_res, s_min( STEREO_DFT_N_32k_ENC, NFFT_inner ), ENC ); -#endif - if ( nbands_full > hStereoDft->nbands + 1 ) - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hStereoDft->sidSideGain[b] = hStereoCng->sg_average[2 * b] * ( band_limits_full[2 * b + 1] - band_limits_full[2 * b] ); - sgSum = band_limits_full[2 * b + 1] - band_limits_full[2 * b]; - if ( ( 2 * b + 1 ) < nbands_full ) - { - hStereoDft->sidSideGain[b] += hStereoCng->sg_average[2 * b + 1] * ( band_limits_full[2 * b + 2] - band_limits_full[2 * b + 1] ); - sgSum += band_limits_full[2 * b + 2] - band_limits_full[2 * b + 1]; - } - hStereoDft->sidSideGain[b] = hStereoDft->sidSideGain[b] / sgSum; - stereo_dft_quantize_res_gains( &hStereoDft->sidSideGain[b], NULL, NULL, NULL, hStereoDft->side_gain_index_EC + b, NULL ); - } - } - else - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - stereo_dft_quantize_res_gains( &hStereoCng->sg_average[b], NULL, NULL, NULL, hStereoDft->side_gain_index_EC + b, NULL ); - } - } - /* Restart SID avg after sending SID */ - hStereoCng->sg_average_counter = 0; - set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); - } - else - { - for ( b = 0; b < nbands_full; b++ ) - { - hStereoCng->prev_sg_average[b] += hStereoDft->sidSideGain[b]; - } - - hStereoCng->prev_sg_average_counter++; - } - - hStereoCng->sg_active_cnt = 0; - hStereoCng->first_SID_after_TD = 0; - - return; -} -#endif /*--------------------------------------------------------------- * stereo_enc_cng_init() @@ -1011,7 +622,6 @@ void stereo_dft_cng_side_gain( * Initializes counters and averages * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_enc_cng_init_fx( STEREO_CNG_ENC_HANDLE hStereoCng /* i/o: stereo CNG encoder structure */ ) @@ -1037,26 +647,6 @@ void stereo_enc_cng_init_fx( return; } -#else -void stereo_enc_cng_init( - STEREO_CNG_ENC_HANDLE hStereoCng /* i/o: stereo CNG encoder structure */ -) -{ - hStereoCng->sg_average_counter = 0; - set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); - hStereoCng->prev_sg_average_counter = 0; - set_zero( hStereoCng->prev_sg_average, STEREO_DFT_BAND_MAX ); - hStereoCng->sg_active_cnt = 0; - hStereoCng->first_SID = 1; - set_f( hStereoCng->mem_cohBand, 0.5f, STEREO_DFT_BAND_MAX / 2 ); /*Q31*/ - set_zero( hStereoCng->prev_cohBand, 2 * ( STEREO_DFT_BAND_MAX / 2 ) ); - hStereoCng->td_active = 0; - hStereoCng->first_SID_after_TD = 1; - hStereoCng->cng_counter = 0; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1064,7 +654,6 @@ void stereo_enc_cng_init( * * Update Stereo CNG counters *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_cng_upd_counters_fx( STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ const Word32 element_mode, /* i : element mode */ @@ -1115,46 +704,3 @@ void stereo_cng_upd_counters_fx( } return; } -#else -void stereo_cng_upd_counters( - STEREO_CNG_ENC_HANDLE hStereoCng, /* i/o: Stereo CNG data structure */ - const int32_t element_mode, /* i : element mode */ - const int16_t nbands, /* i : Number of bands in active */ - const float sidSideGain[], /* i : SID side gains */ - const int16_t burst_ho_count, /* i : Hang-over count */ - int16_t *coh_fade_counter /* i : Coherence fade counter */ -) -{ - int16_t b; - - /* Update sg avg in hangover frames, reset in active frames */ - if ( burst_ho_count > 0 && element_mode == IVAS_CPE_DFT ) - { - for ( b = 0; b < nbands; b++ ) - { - hStereoCng->sg_average[b] += sidSideGain[b]; - } - hStereoCng->sg_average_counter++; - } - else - { - hStereoCng->sg_average_counter = 0; - set_zero( hStereoCng->sg_average, STEREO_DFT_BAND_MAX ); - } - - /* Increment active counter, stop at max value */ - hStereoCng->sg_active_cnt++; - hStereoCng->sg_active_cnt = min( hStereoCng->sg_active_cnt, STEREO_DFT_SG_ACT_CNT_MAX ); - - if ( hStereoCng->sg_active_cnt > STEREO_DFT_CNG_ITD_CNT ) - { - hStereoCng->cng_counter = 0; - } - - if ( element_mode == IVAS_CPE_DFT ) - { - *coh_fade_counter = 0; - } - return; -} -#endif diff --git a/lib_enc/ivas_stereo_dft_enc.c b/lib_enc/ivas_stereo_dft_enc.c index f208b2d5c..e2b459765 100644 --- a/lib_enc/ivas_stereo_dft_enc.c +++ b/lib_enc/ivas_stereo_dft_enc.c @@ -63,13 +63,8 @@ * Local function prototypes *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_dft_enc_open( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const int32_t input_Fs, const int16_t max_bwidth ); -#else static void stereo_dft_enc_open_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const Word32 input_Fs, const Word16 max_bwidth ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_compute_prm_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, Word32 *DFT_L_fx, // Q(31-DFT_L_fx_e[]) @@ -86,77 +81,41 @@ static void stereo_dft_enc_compute_prm_fx( Word16 *bin_nrgR_fx_e, Word32 *dot_prod_nrg_ratio_fx, // Q(31-dot_prod_nrg_ratio_fx_e[]) Word16 *dot_prod_nrg_ratio_fx_e ); -#else -static void stereo_dft_enc_compute_prm( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *DFT_L, float *DFT_R, int16_t k_offset, int16_t flag_quant, const int16_t sp_aud_decision0, const int16_t vad_flag, float *bin_nrgL, float *bin_nrgR, float *dot_prod_nrg_ratio ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 stereo_dft_calc_mean_bipd_fx( Word32 *pIpd, Word32 ipd_buf[STEREO_DFT_IPD_BUF_LEN] ); -#else -static float stereo_dft_calc_mean_bipd( float *pIpd, float ipd_buf[STEREO_DFT_IPD_BUF_LEN] ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 stereo_dft_calc_mean_ipd_change_fx( Word32 *pIpd, /* i : bandwise IPDs Q13 */ Word32 *ipd_smooth, /* i : mean of previous bandwise IPDs Q13 */ Word16 gipd_band_max /* i : number of IPD bands */ ); -#else -static float stereo_dft_calc_mean_ipd_change( float *pIpd, float *ipd_smooth, int16_t gipd_band_max ); -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_gipd_stabilization_fx( Word32 *pgIpd, /* i/o: global IPD to be stabilized Q13 */ Word32 prev_gipd, /* i : previous global IPD Q13 */ Word32 ipd_mean_change /* i : mean of previous bandwise IPDs Q13 */ ); -#else -static void stereo_dft_gipd_stabilization( float *pgIpd, float prev_gipd, float ipd_mean_change ); -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_get_nipd_flag_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const Word16 sp_aud_decision0, const Word32 gainIPD ); -#else -static void stereo_dft_enc_get_nipd_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const int16_t sp_aud_decision0, const float gainIPD ); -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_get_reverb_flag_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, Word32 *pPredGain, Word32 *sub_nrg_DMX, Word16 *sub_nrg_DMX_e, const Word32 *sub_nrg_L, const Word16 *sub_nrg_L_e, const Word32 *sub_nrg_R, const Word16 *sub_nrg_R_e, const Word16 k_offset, const Word32 *bin_nrgL, const Word16 *bin_nrgL_e, const Word32 *bin_nrgR, const Word16 *bin_nrgR_e ); -#else -static void stereo_dft_enc_get_reverb_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, float *pPredGain, float *sub_nrg_DMX, const float *sub_nrg_L, const float *sub_nrg_R, const int16_t k_offset, const float *bin_nrgL, const float *bin_nrgR ); -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 stereo_dft_gain_offset_fx( const Word32 c, const Word16 c_e, const Word16 itd ); -#else -static float stereo_dft_gain_offset( const float c, const int16_t itd ); -#endif -#ifdef IVAS_FLOAT_FIXED static void side_gain_mode_decision_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ Word16 encoded_ind_GR[], const Word16 sp_aud_decision0, /* i : Speech/audio decision 0 */ const Word32 last_core_brate /* i : Last core bitrate */ ); -#else -static void side_gain_mode_decision( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, int16_t encoded_ind_GR[], const int16_t sp_aud_decision0, const int32_t last_core_brate ); -#endif -#ifdef IVAS_FLOAT_FIXED static void res_pred_gain_mode_decision_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ Word16 encoded_ind_pred_GR[], const Word16 k_offset, /* i : Parameter offset */ const Word32 last_core_brate /* i : Last core bitrate */ ); -#else -static void res_pred_gain_mode_decision( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, int16_t encoded_ind_pred_GR[], const int16_t k_offset, const int32_t last_core_brate ); -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_calculate_nrg_for_icbwe_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ const Word16 *DFT_L_e, @@ -165,11 +124,7 @@ static void stereo_dft_enc_calculate_nrg_for_icbwe_fx( const Word16 *DMX_e, /* i : DFT Stereo downmix */ const Word32 input_Fs /* i : input sampling rate */ ); -#else -static void stereo_dft_enc_calculate_nrg_for_icbwe( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const float *DMX, const int32_t input_Fs ); -#endif -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_get_res_cod_mode_flag_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const Word32 res_nrg_all_curr, @@ -178,16 +133,12 @@ static void stereo_dft_enc_get_res_cod_mode_flag_fx( const Word16 dmx_nrg_all_curr_e, Word32 *res_dmx_ratio, // Q31 Word32 *frame_nrg_ratio ); // Q28 -#else -static void stereo_dft_enc_get_res_cod_mode_flag( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const float res_nrg_all_curr, const float dmx_nrg_all_curr, float *res_dmx_ratio, float *frame_nrg_ratio ); -#endif /*------------------------------------------------------------------------- * stereo_dft_quantize_res_gains() * * Joint quantization routine for residual gains *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_quantize_res_gains_fx( const Word32 *g, // Q31 const Word32 *r, // Q31 @@ -334,101 +285,6 @@ void stereo_dft_quantize_res_gains_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_quantize_res_gains( - const float *g, - const float *r, - float *gq, - float *rq, - int16_t *ig, - int16_t *ir ) -{ - int8_t sign; - int16_t min_ind, i; - float min_val, old_val, gg, rr; - int16_t level, index; - float ild; - - gg = *g; - - if ( rq != NULL ) - { - rr = *r; - } - else - { - rr = 0; - } - - if ( gg < 0 ) - { - gg = -gg; - sign = -1; - } - else - { - sign = 1; - } - - - gg = min( gg, 1 - EPSILON ); - rr = min( rr, sqrtf( 1 - gg * gg ) - EPSILON ); - - /* we calculate the ILD ... */ - ild = 10.f * log10f( ( ( 1 + gg ) * ( 1 + gg ) + rr * rr ) / ( ( 1 - gg ) * ( 1 - gg ) + rr * rr ) ); - - /* ... which is truncated to the range [0,50] ... */ - ild = ild > 50 ? 50 : ild; - - /* ... and determine the optimal ILD quantization ...*/ - min_ind = 0; - old_val = fabsf( ild_q[0] - ild ); - - for ( i = 1; i < 16; i++ ) - { - min_val = fabsf( ild_q[i] - ild ); - if ( min_val < old_val ) - { - min_ind = i; - } - else - { - break; - } - old_val = min_val; - } - - /* ... which determines the quantization level: */ - level = min_ind; - - /* Now we look for the closest quantization point in the corresponding column of res_gain_energy_q*/ - old_val = FLT_MAX; - min_ind = 0; - index = -1; - for ( i = 0; i < 8; i++ ) - { - min_val = ( gg - dft_res_gains_q[8 * level + i][0] ) * ( gg - dft_res_gains_q[8 * level + i][0] ) + ( rr - dft_res_gains_q[8 * level + i][1] ) * ( rr - dft_res_gains_q[8 * level + i][1] ); - - min_ind = min_val < old_val ? i : min_ind; - old_val = min_val < old_val ? min_val : old_val; - - index = min_ind; - } - - /* and here we are: */ - if ( rq != NULL ) - { - *gq = dft_res_gains_q[8 * level + index][0] * sign; - *rq = dft_res_gains_q[8 * level + index][1]; - - *ir = index; - } - *ig = sign < 0 ? 15 - level : 15 + level; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -436,7 +292,6 @@ void stereo_dft_quantize_res_gains( * * Quantize the IPD between [-PI, PI] on 3 or 4 bits *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_quantize_ipd_fx( const Word32 *in, // Q13 Word32 *out, // Q13 @@ -498,54 +353,6 @@ static void stereo_dft_quantize_ipd_fx( return; } -#else -static void stereo_dft_quantize_ipd( - const float *in, - float *out, - int16_t *ind, - const int16_t bits ) -{ - int16_t max_ind; - float delta; - - if ( bits == 2 ) /* New 2-bit phase quantization for the highest frequency band only */ - { - delta = EVS_PI / 2.0f; - max_ind = 3; - } - else if ( bits == 3 ) - { - delta = EVS_PI / 4.f; - max_ind = 7; - } - else if ( bits == 4 ) - { - delta = EVS_PI / 8.f; - max_ind = 15; - } - else - { - delta = EVS_PI / 4.f; - max_ind = 7; - assert( 0 ); - } - - *ind = (int16_t) ( ( ( *in + EVS_PI ) / delta ) + 0.5f ); - - /*modulo 2*PI*/ - if ( *ind == max_ind + 1 ) - { - *ind = 0; - } - - /*Sanity check since no saturation can normally happen*/ - *ind = min( max( *ind, 0 ), max_ind ); - - *out = *ind * delta - EVS_PI; - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_create() @@ -553,50 +360,6 @@ static void stereo_dft_quantize_ipd( * Create DFT stereo handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error stereo_dft_enc_create( - STEREO_DFT_ENC_DATA_HANDLE *hStereoDft, /* i/o: encoder DFT stereo handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -) -{ - STEREO_DFT_ENC_DATA_HANDLE hStereoDft_loc; - int16_t tmpS; - - if ( *hStereoDft != NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: DFT Stereo memory already allocated\n" ); - } - - if ( ( hStereoDft_loc = (STEREO_DFT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_DFT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo\n" ) ); - } - - if ( ( hStereoDft_loc->hConfig = (STEREO_DFT_CONFIG_DATA_HANDLE) malloc( sizeof( STEREO_DFT_CONFIG_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DFT Stereo Config\n" ) ); - } - - if ( ( hStereoDft_loc->hItd = (ITD_DATA_HANDLE) malloc( sizeof( ITD_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); - } - - hStereoDft_loc->hConfig->force_mono_transmission = 0; - - stereo_dft_config( hStereoDft_loc->hConfig, IVAS_24k4, &tmpS, &tmpS ); - - stereo_dft_enc_open( hStereoDft_loc, input_Fs, max_bwidth ); - - stereo_dft_hybrid_ITD_flag( hStereoDft_loc->hConfig, input_Fs, - hStereoDft_loc->hItd->hybrid_itd_max ); - - *hStereoDft = hStereoDft_loc; - - return IVAS_ERR_OK; -} -#else ivas_error stereo_dft_enc_create_fx( STEREO_DFT_ENC_DATA_HANDLE *hStereoDft, /* i/o: encoder DFT stereo handle */ const Word32 input_Fs, /* i : input sampling rate */ @@ -640,7 +403,6 @@ ivas_error stereo_dft_enc_create_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -649,102 +411,6 @@ ivas_error stereo_dft_enc_create_fx( * Initialize DFT stereo handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_dft_enc_open( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -) -{ - int16_t NFFT_inner; - float win[STEREO_DFT_OVL_MAX]; - - /*Sizes*/ - hStereoDft->N = (int16_t) ( STEREO_DFT_HOP_MAX_ENC * input_Fs / 48000 ); - assert( ( ( input_Fs / FRAMES_PER_SEC ) / hStereoDft->N ) == 1 ); - - /*Init. DFT sizes*/ - hStereoDft->NFFT = (int16_t) ( STEREO_DFT_N_MAX_ENC * input_Fs / 48000 ); - hStereoDft->dft_ovl = (int16_t) ( STEREO_DFT_OVL_MAX * input_Fs / 48000 ); - mdct_window_sine_flt( win, input_Fs, hStereoDft->dft_ovl, FULL_OVERLAP, IVAS_CPE_DFT ); - - hStereoDft->win_ana_energy = (float) hStereoDft->N - hStereoDft->dft_ovl; - hStereoDft->win_ana_energy += 2 * sum_f( win, hStereoDft->dft_ovl ); - hStereoDft->win_ana_energy = hStereoDft->win_ana_energy / hStereoDft->NFFT; - - hStereoDft->dft_zp = (int16_t) ( STEREO_DFT_ZP_MAX_ENC * input_Fs / 48000 ); - set_f( hStereoDft->output_mem_dmx_32k, 0, STEREO_DFT_OVL_32k ); - hStereoDft->dft_trigo_8k = dft_trigo_32k; - hStereoDft->dft_trigo_12k8 = dft_trigo_12k8; - hStereoDft->dft_trigo_16k = dft_trigo_32k; - hStereoDft->dft_trigo_32k = dft_trigo_32k; - - hStereoDft->win_ana_8k = win_ana_8k; - hStereoDft->win_ana_12k8 = win_ana_12k8; - hStereoDft->win_ana_16k = win_ana_16k; - hStereoDft->win_ana_32k = win_ana_32k; - - hStereoDft->win_8k = win_syn_8k; - hStereoDft->win_12k8 = win_syn_12k8; - hStereoDft->win_16k = win_syn_16k; - hStereoDft->win_32k = win_syn_32k; - - if ( input_Fs == 16000 ) - { - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; - hStereoDft->dft_trigo = dft_trigo_32k; - hStereoDft->win_ana = win_ana_16k; - hStereoDft->win = win_syn_16k; - } - else if ( input_Fs == 32000 ) - { - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; - hStereoDft->dft_trigo = dft_trigo_32k; - hStereoDft->win_ana = win_ana_32k; - hStereoDft->win = win_syn_32k; - } - else - { - assert( input_Fs == 48000 ); - hStereoDft->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; - hStereoDft->dft_trigo = dft_trigo_48k; - hStereoDft->win_ana = win_ana_48k; - hStereoDft->win = win_syn_48k; - } - - hStereoDft->win_mdct_8k = win_mdct_8k; - - /*I/O Buffers*/ - set_zero( hStereoDft->output_mem_dmx, STEREO_DFT_OVL_MAX ); - set_zero( hStereoDft->output_mem_dmx_12k8, STEREO_DFT_OVL_12k8 ); - set_zero( hStereoDft->output_mem_dmx_16k, STEREO_DFT_OVL_16k ); - set_zero( hStereoDft->output_mem_dmx_16k_shb, STEREO_DFT_OVL_16k ); - set_zero( hStereoDft->output_mem_res_8k, STEREO_DFT_OVL_8k ); - - /*Bands: find the number of bands, Nyquist freq. is not taken into account*/ - NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[max_bwidth] / L_FRAME48k; - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, NFFT_inner, ENC ); - hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); - - /*Set configuration*/ - set_s( hStereoDft->band_res, hStereoDft->hConfig->band_res, STEREO_DFT_ENC_DFT_NB ); - if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) - { - /* residual coding is only applied for 16 kHz sampling rate */ - set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->ada_wb_res_cod_mode, STEREO_DFT_ENC_DFT_NB ); - } - else - { - set_s( hStereoDft->res_cod_mode, hStereoDft->hConfig->res_cod_mode, STEREO_DFT_ENC_DFT_NB ); - } - set_s( hStereoDft->res_pred_mode, hStereoDft->hConfig->res_pred_mode, STEREO_DFT_ENC_DFT_NB ); - - /* reset DFT stereo memories */ - stereo_dft_enc_reset( hStereoDft ); - - return; -} -#else static void stereo_dft_enc_open_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ const Word32 input_Fs, /* i : input sampling rate */ @@ -866,7 +532,6 @@ static void stereo_dft_enc_open_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -875,100 +540,6 @@ static void stereo_dft_enc_open_fx( * Reset DFT stereo memories *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_reset( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft /* i/o: encoder stereo handle */ -) -{ - /*reset parameters*/ - int16_t i; - set_zero( hStereoDft->side_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->side_gain_index_EC, 15, STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->side_gain_index_ECDiff, 0, STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->side_gain_index_ECprevious, 15, STEREO_DFT_BAND_MAX ); - hStereoDft->side_gain_counter = 0; - hStereoDft->side_gain_bitdiff_lp = STEREO_DFT_BITDIFF_INIT; - set_zero( hStereoDft->gipd, STEREO_DFT_ENC_DFT_NB ); - set_zero( hStereoDft->dot_prod_real_smooth, STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->dot_prod_img_smooth, STEREO_DFT_BAND_MAX ); - for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) - { - set_zero( hStereoDft->ipd_buf[i], STEREO_DFT_IPD_BUF_LEN ); - } - hStereoDft->prev_gipd = 0.f; - set_zero( hStereoDft->res_pred_gain, STEREO_DFT_ENC_DFT_NB * STEREO_DFT_BAND_MAX ); - hStereoDft->gipd_index = 0; - set_s( hStereoDft->res_pred_index_EC, 0, STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->res_pred_index_ECDiff, 0, STEREO_DFT_BAND_MAX ); - set_s( hStereoDft->res_pred_index_ECprevious, 0, STEREO_DFT_BAND_MAX ); - hStereoDft->res_pred_counter = 0; - set_zero( hStereoDft->past_nrgL, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->past_nrgR, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->past_dot_prod_real, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); - set_zero( hStereoDft->past_dot_prod_imag, STEREO_DFT_NRG_PAST_LEN * STEREO_DFT_BAND_MAX ); - hStereoDft->nrg_past_pos = 0; - hStereoDft->res_dmx_ratio_lt = 1.0f; - hStereoDft->hangover_cnt0 = 0; - hStereoDft->hangover_cnt1 = 0; - hStereoDft->dmx_res_all_prev = EPSILON; - hStereoDft->last_res_cod_mode_modify_flag = 0; - hStereoDft->res_cod_sw_flag = 0; - hStereoDft->switch_fade_factor = 0.5f; - hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1] = STEREO_DFT_RES_COD_1kHz; - for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) - { - hStereoDft->res_cod_NRG_M[i] = 0; - hStereoDft->res_cod_NRG_S[i] = 0; - } - hStereoDft->old_snr = 0.f; - - hStereoDft->reverb_flag = 0; - set_zero( hStereoDft->pre_sub_nrg_DMX, STEREO_DFT_BAND_MAX ); - hStereoDft->diff_l_h_sm = 0.0f; - hStereoDft->diff_r_h_sm = 0.0f; - hStereoDft->prev_fac2 = 1.0f; - set_zero( hStereoDft->res_pred_gain_f, STEREO_DFT_BAND_MAX ); - - /*misc*/ - hStereoDft->no_ipd_flag = 1; /* Initialization of the no IPD variables */ - hStereoDft->prev_no_ipd_flag = 1; - hStereoDft->no_ipd_cnt = 0; - hStereoDft->no_ipd_cnt1 = 0; - hStereoDft->attackPresent = 0; - hStereoDft->wasTransient = 0; - hStereoDft->gainIPD_sm = 1.f; - hStereoDft->voicing_lt = 0; - - hStereoDft->flip_sign = 1; - hStereoDft->sfm = 0.f; - hStereoDft->sum_dot_prod_real = 0.f; - hStereoDft->sum_dot_prod_img = 0.f; - /*Coherence*/ - set_f( hStereoDft->xspec_smooth, 1.0f, STEREO_DFT_N_32k_ENC ); - hStereoDft->sid_gipd = 0; - hStereoDft->prev_sid_gipd = 0; - set_f( hStereoDft->Spd_L_smooth, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); - set_f( hStereoDft->Spd_R_smooth, 1.0f, STEREO_DFT_N_32k_ENC / 2 ); - hStereoDft->currentNumUpdates = 0; - hStereoDft->expectedNumUpdates = FIXED_SID_RATE; - hStereoDft->resetFrames = 0; - hStereoDft->prev_sid_no_ipd_flag = 1; - - hStereoDft->coh_fade_counter = 0; - - /* Xtalk classifier */ - hStereoDft->hItd->prev_m1 = 0; - hStereoDft->hItd->prev_m2 = 0; - hStereoDft->hItd->prev_itd1 = 0; - hStereoDft->hItd->prev_itd2 = 0; - - hStereoDft->first_frm_flag = 1; - - stereo_enc_itd_init( hStereoDft->hItd ); - - return; -} -#else void stereo_dft_enc_reset_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft /* i/o: encoder stereo handle */ ) @@ -1146,7 +717,6 @@ void stereo_dft_enc_reset_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -1155,49 +725,6 @@ void stereo_dft_enc_reset_fx( * initialize ITD struct *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_enc_itd_init( - ITD_DATA_HANDLE hItd /* i/o: encoder ITD handle */ -) -{ - hItd->prev_itd = 0; - set_zero( hItd->itd, STEREO_DFT_ENC_DFT_NB ); - set_zero( hItd->deltaItd, STEREO_DFT_ENC_DFT_NB ); - set_s( hItd->td_itd, 0, STEREO_DFT_ENC_DFT_NB ); - set_s( hItd->td_itd_32k, 0, STEREO_DFT_ENC_DFT_NB ); - set_s( hItd->itd_index, 0, STEREO_DFT_ENC_DFT_NB ); - set_zero( hItd->xcorr_smooth, STEREO_DFT_N_32k_ENC ); - hItd->lp_phat_peak = 0.f; - hItd->itd_hangover = 0; - hItd->itd_cnt = 0; - hItd->prev_sum_nrg_L_lb = 0.f; - set_zero( hItd->prev_xcorr_lb, STEREO_DFT_XCORR_LB_MAX ); - set_f( hItd->E_band_n, (float) ITD_VAD_E_BAND_N_INIT, STEREO_DFT_ITD_VAD_BAND_NUM ); - hItd->vad_frm_cnt = 0; - hItd->pre_vad = 0; - hItd->itd_nonzero_cnt = 0; - set_zero( hItd->acorr_L, STEREO_DFT_BAND_MAX ); - set_zero( hItd->acorr_R, STEREO_DFT_BAND_MAX ); - hItd->cohSNR = 15.f; - hItd->itd_thres = 0.f; - hItd->valid_itd_cnt = 0; - - hItd->detected_itd_flag = 0; - hItd->itd_tracking = 0; - hItd->prev_index = 0; - hItd->prev_max = 0.f; - hItd->prev_avg_max = 0.f; - hItd->currFlatness = 0.f; - /* Xtalk classifier */ - hItd->prev_m1 = 0; - hItd->prev_m2 = 0; - hItd->prev_itd1 = 0; - hItd->prev_itd2 = 0; - - hItd->hybrid_itd_max = 0; - return; -} -#else void stereo_enc_itd_init_fx( ITD_DATA_HANDLE hItd /* i/o: encoder ITD handle */ ) @@ -1271,7 +798,6 @@ void stereo_enc_itd_init_fx( move16(); return; } -#endif /*-------------------------------------------------------------------------- @@ -1280,7 +806,6 @@ void stereo_enc_itd_init_fx( * Update DFT stereo memories for new frame *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_enc_update_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ const Word16 max_bwidth /* i : maximum encoded bandwidth */ @@ -1371,77 +896,6 @@ void stereo_dft_enc_update_fx( return; } -#else -void stereo_dft_enc_update( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ - const int16_t max_bwidth /* i : maximum encoded bandwidth */ -) -{ - int16_t i, k_offset; - int16_t NFFT_inner; - - /* Initialization */ - k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ - - /* Update the parameters and serial */ - for ( i = 0; i < k_offset * STEREO_DFT_BAND_MAX; i++ ) - { - hStereoDft->side_gain[i] = hStereoDft->side_gain[STEREO_DFT_BAND_MAX + i]; - hStereoDft->res_pred_gain[i] = hStereoDft->res_pred_gain[STEREO_DFT_BAND_MAX + i]; - } - - for ( i = 0; i < k_offset; i++ ) - { - hStereoDft->gipd[i] = hStereoDft->gipd[i + 1]; - } - - /*Update configurations*/ - for ( i = 0; i < k_offset; i++ ) - { - hStereoDft->band_res[i] = hStereoDft->band_res[i + 1]; - hStereoDft->hItd->itd[i] = hStereoDft->hItd->itd[i + 1]; - hStereoDft->res_cod_mode[i] = hStereoDft->res_cod_mode[i + 1]; - hStereoDft->res_pred_mode[i] = hStereoDft->res_pred_mode[i + 1]; - } - - /*Set new configurations*/ - hStereoDft->band_res[k_offset] = hStereoDft->hConfig->band_res; - - if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) - { - hStereoDft->res_cod_mode[k_offset] = hStereoDft->hConfig->ada_wb_res_cod_mode; - } - else - { - hStereoDft->res_cod_mode[k_offset] = hStereoDft->hConfig->res_cod_mode; - } - hStereoDft->res_pred_mode[k_offset] = hStereoDft->hConfig->res_pred_mode; - - hStereoDft->last_res_cod_mode_modify_flag = hStereoDft->res_cod_sw_flag; - hStereoDft->res_cod_sw_flag = 0; - - /* update band limits in case of rate switching assuming max_bwidth as BWD output not yet know here */ - NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[max_bwidth] / L_FRAME48k; - -#ifndef IVAS_FLOAT_FIXED - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->hConfig->band_res, NFFT_inner, ENC ); - hStereoDft->nbands_dmx = stereo_dft_band_config( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); -#else - hStereoDft->nbands = stereo_dft_band_config_fx( hStereoDft->band_limits, hStereoDft->hConfig->band_res, NFFT_inner, ENC ); - hStereoDft->nbands_dmx = stereo_dft_band_config_fx( hStereoDft->band_limits_dmx, 1, NFFT_inner, ENC ); -#endif - - /*Compute main parameters*/ - hStereoDft->gipd_band_max = dft_band_ipd[1][3]; - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; - hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * hStereoDft->N / (float) ( hStereoDft->NFFT ) ); - hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); - hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_destroy() @@ -1449,29 +903,6 @@ void stereo_dft_enc_update( * destroy DFT stereo handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_destroy( - STEREO_DFT_ENC_DATA_HANDLE *hStereoDft /* i/o: encoder DFT stereo handle */ -) -{ - if ( ( *hStereoDft )->hConfig != NULL ) - { - free( ( *hStereoDft )->hConfig ); - ( *hStereoDft )->hConfig = NULL; - } - - if ( ( *hStereoDft )->hItd != NULL ) - { - free( ( *hStereoDft )->hItd ); - ( *hStereoDft )->hItd = NULL; - } - - free( *hStereoDft ); - *hStereoDft = NULL; - - return; -} -#else void stereo_dft_enc_destroy_fx( STEREO_DFT_ENC_DATA_HANDLE *hStereoDft /* i/o: encoder DFT stereo handle */ ) @@ -1493,7 +924,6 @@ void stereo_dft_enc_destroy_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -1501,135 +931,6 @@ void stereo_dft_enc_destroy_fx( * * DFT analysis on a 20ms frame *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_analyze( - Encoder_State **sts, /* i/o: encoder state structure */ - const int16_t n_channels, /* i : number of input channels */ - const int16_t input_frame, /* i : input frame length */ - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: encoder MDCT stereo handle */ - float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC], /* o : DFT buffers */ - float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ -) -{ - int16_t i, n; - float *pDFT_L, *pDFT_R; - int16_t N, NFFT; - int16_t dft_zp, dft_ovl; - const float *pWin, *pTrigo; - int16_t offset; - float *input[CPE_CHANNELS], *mem[CPE_CHANNELS]; - float trigo_enc[STEREO_DFT_N_MAX_ENC / 2 + 1]; - int16_t trigo_step; - - - push_wmops( "DFT_analysis" ); - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - for ( n = 0; n < n_channels; n++ ) - { - input[n] = sts[n]->input; - mem[n] = input_mem[n]; - } - - - /*-----------------------------------------------------------------* - * DFT Analysis - *-----------------------------------------------------------------*/ - - pDFT_L = DFT[0]; - pDFT_R = DFT[1]; - - if ( hStereoDft != NULL ) - { - N = hStereoDft->N; - NFFT = hStereoDft->NFFT; - dft_zp = hStereoDft->dft_zp; - dft_ovl = hStereoDft->dft_ovl; - offset = -dft_ovl; - pWin = hStereoDft->win_ana; - pTrigo = hStereoDft->dft_trigo; - trigo_step = hStereoDft->dft_trigo_step; - } - else - { - N = hStereoMdct->hDft_ana->N; - NFFT = hStereoMdct->hDft_ana->NFFT; - dft_zp = hStereoMdct->hDft_ana->dft_zp; - dft_ovl = hStereoMdct->hDft_ana->dft_ovl; - offset = -dft_ovl; - pWin = hStereoMdct->hDft_ana->win_ana; - pTrigo = hStereoMdct->hDft_ana->dft_trigo; - trigo_step = hStereoMdct->hDft_ana->dft_trigo_step; - } - - for ( i = 0; i < NFFT / 4; i++ ) - { - trigo_enc[i] = pTrigo[i * trigo_step]; - trigo_enc[NFFT / 2 - i] = pTrigo[i * trigo_step]; - } - trigo_enc[NFFT / 4] = pTrigo[NFFT / 4 * trigo_step]; - - /*Forwards FFT: L and R*/ - /*zero padding*/ - for ( i = 0; i < dft_zp; i++ ) - { - pDFT_L[i] = 0.f; - pDFT_L[NFFT - 1 - i] = 0.f; - - pDFT_R[i] = 0.f; - pDFT_R[NFFT - 1 - i] = 0.f; - } - - /*overlapping parts*/ - for ( i = 0; i < dft_ovl; i++ ) - { - pDFT_L[dft_zp + i] = mem[0][i] * pWin[i]; - pDFT_L[dft_zp + N + dft_ovl - 1 - i] = input[0][offset + N + dft_ovl - 1 - i] * pWin[i]; - - pDFT_R[dft_zp + i] = mem[1][i] * pWin[i]; - pDFT_R[dft_zp + N + dft_ovl - 1 - i] = input[1][offset + N + dft_ovl - 1 - i] * pWin[i]; - } - - /*middle part*/ - for ( i = 0; i < N - dft_ovl; i++ ) - { - pDFT_L[dft_zp + dft_ovl + i] = input[0][offset + dft_ovl + i]; - - pDFT_R[dft_zp + dft_ovl + i] = input[1][offset + dft_ovl + i]; - } - - rfft( pDFT_L, trigo_enc, NFFT, -1 ); - rfft( pDFT_R, trigo_enc, NFFT, -1 ); - - /* update pointers to overlap memory */ - for ( n = 0; n < n_channels; n++ ) - { - mem[n] = &input[n][N - dft_ovl]; - } - - if ( hStereoDft != NULL && hStereoDft->hConfig->hybrid_itd_flag && hStereoDft->hItd->td_itd[STEREO_DFT_OFFSET] ) - { - for ( n = 0; n < n_channels; n++ ) - { - mvr2r( hStereoDft->input_mem_itd[n], input_mem[n], dft_ovl ); - } - } - else - { - for ( n = 0; n < n_channels; n++ ) - { - mvr2r( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl ); - } - } - - pop_wmops(); - return; -} -#else void stereo_dft_enc_analyze_fx( Encoder_State **sts, /* i/o: encoder state structure */ const Word16 n_channels, /* i : number of input channels */ @@ -1821,7 +1122,6 @@ void stereo_dft_enc_analyze_fx( pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_synthesize() @@ -1829,7 +1129,6 @@ void stereo_dft_enc_analyze_fx( * Inverse DFT on a 20ms frame *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word32 stereo_dft_enc_synthesize_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ // float *output, /* o : output synthesis */ @@ -2246,384 +1545,100 @@ Word32 stereo_dft_enc_synthesize_fx( pop_wmops(); return ( nrg_fx ); } -#else -float stereo_dft_enc_synthesize( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ - float *output, /* o : output synthesis */ - const int16_t chan, /* i : channel number */ - const int32_t input_Fs, /* i : input sampling rate */ - const int32_t output_sampling_rate, /* i : output sampling rate */ - const int16_t L_frame /* i : frame length at internal Fs */ + +/*------------------------------------------------------------------------- + * stereo_dft_enc_process() + * + * DFT-based stereo main processing function: + * 1) compute/encode stereo parameters + * 2) Mid/Side computation + *-------------------------------------------------------------------------*/ +void stereo_dft_enc_process_fx( + CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ + const Word16 vad_flag_dtx[], /* i : VAD dtx flags */ + const Word16 vad_hover_flag[], /* i : VAD hangover flags */ + const Word16 input_frame /* i : input frame length */ ) { - int16_t i, j, sign; - float *pDFT_in; - int16_t offset, NFFT, N, ovl, zp; - float fac; - float *mem; - const float *trigo, *win, *win_ana; - float tmp[STEREO_DFT_N_MAX_ENC]; - float nrg; - float trigo_enc[STEREO_DFT_N_MAX_ENC / 2 + 1]; - int16_t trigo_step; - + Word16 i, j, b; + Word32 *pDFT_L_fx, *pDFT_R_fx; + Word32 *pDFT_DMX; + Word32 *pDFT_RES; + Word16 k_offset; + Word32 *pgIpd; + Word32 *pSideGain; + Word16 c_fx /*Q15*/, alpha_fx /*Q13*/; + Word32 g_fx; // Q31 + Word32 wL, wR; + Word16 wL_e, wR_e; + Word16 wS; + Word16 tmp_fx; + Word32 tmp_32fx; + Word16 s_fx /*Q15*/, c1_fx /*Q15*/, s1_fx /*Q15*/; + Word16 fac_att_fx; // Q15 + STEREO_DFT_ENC_DATA_HANDLE hStereoDft; + Word32 DFT_DMX[STEREO_DFT_N_MAX_ENC]; + Word16 DFT_DMX_e[STEREO_DFT_N_MAX_ENC]; + Word32 DFT_RES[STEREO_DFT_N_8k_ENC]; + Word16 DFT_RES_e[STEREO_DFT_N_8k_ENC]; + Word32 input_Fs; + Word32 bin_nrgL_fx[STEREO_DFT_N_MAX_ENC]; + Word16 bin_nrgL_fx_e[STEREO_DFT_N_MAX_ENC]; + Word32 bin_nrgR_fx[STEREO_DFT_N_MAX_ENC]; + Word16 bin_nrgR_fx_e[STEREO_DFT_N_MAX_ENC]; + Word32 *pNrgL, *pNrgR; + Word32 res_nrg_all_curr, dmx_nrg_all_curr; + Word16 res_nrg_all_curr_e, dmx_nrg_all_curr_e; + Word32 res_dmx_ratio /*Q31*/, frame_nrg_ratio /*Q28*/; + Word32 dot_prod_nrg_ratio_fx[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands Q31 */ + Word16 dot_prod_nrg_ratio_fx_e[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands Q31 */ + Word32 sum_nrg_L2, sum_nrg_R2, dot_prod_real2; + Word16 sum_nrg_L2_e, sum_nrg_R2_e, dot_prod_real2_e; + Word32 sum_nrg_Mid, sum_abs; + Word16 sum_nrg_Mid_e, sum_abs_e; + Word16 tmp_e; + Word16 DFT_L_e_tmp[STEREO_DFT_N_MAX_ENC], DFT_R_e_tmp[STEREO_DFT_N_MAX_ENC]; + Word32 L_tmp1, L_tmp2, L_tmp3; + Word16 L_tmp1_e, L_tmp2_e, L_tmp3_e; - /*-----------------------------------------------------------------* + /*------------------------------------------------------------------* * Initialization *-----------------------------------------------------------------*/ - if ( L_frame > 0 ) - { - assert( ( output_sampling_rate == 16000 ) && "High-band generation only possible at 16kHz!" ); - } - nrg = 0.f; + input_Fs = L_mult0( input_frame, FRAMES_PER_SEC ); - hStereoDft->icbweRefEner = 0; - hStereoDft->lbEner = 0; + hStereoDft = hCPE->hStereoDft; - if ( chan == 0 ) - { - pDFT_in = hStereoDft->DFT[0]; - } - else - { - pDFT_in = hStereoDft->DFT[1]; - } + wL = 0; /* avoid compilation warning */ + move32(); + wL_e = 0; /* avoid compilation warning */ + move16(); + wR = 0; /* avoid compilation warning */ + move32(); + wR_e = 0; /* avoid compilation warning */ + move16(); - if ( output_sampling_rate == input_Fs ) - { - assert( chan == 0 ); + /* Initialization */ + k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ + move16(); - NFFT = hStereoDft->NFFT; - fac = 1.f; - N = hStereoDft->N; - ovl = hStereoDft->dft_ovl; - zp = hStereoDft->dft_zp; - trigo = hStereoDft->dft_trigo; - trigo_step = hStereoDft->dft_trigo_step; - if ( L_frame > 0 ) - { - mem = hStereoDft->output_mem_dmx_16k_shb; - } - else - { - mem = hStereoDft->output_mem_dmx; - } - win = hStereoDft->win; - win_ana = hStereoDft->win_ana; + hStereoDft->gipd_band_max = dft_band_ipd[1][3]; + move16(); + hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; + move16(); + // hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); + tmp_32fx = L_shl( L_mult0( sub( hStereoDft->band_limits[hStereoDft->res_cod_band_max], 1 ), input_frame ), 1 ); + tmp_32fx = BASOP_Util_Divide3216_Scale( tmp_32fx, hStereoDft->NFFT, &tmp_e ); + hStereoDft->res_cod_line_max = extract_l( L_shr_r( tmp_32fx, sub( 31, tmp_e ) ) ); + move16(); + // hStereoDft->res_cod_line_max = 8 * (hStereoDft->res_cod_line_max / 8); + hStereoDft->res_cod_line_max = shl( shr( hStereoDft->res_cod_line_max, 3 ), 3 ); + move16(); + hStereoDft->res_pred_band_min = s_max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); + move16(); - push_wmops( "DFT_synth_fs" ); - } - else if ( output_sampling_rate == INT_FS_12k8 ) - { - assert( chan == 0 ); - - NFFT = STEREO_DFT_N_12k8_ENC; - N = STEREO_DFT_HOP_12k8_ENC; - zp = STEREO_DFT_ZP_12k8_ENC; - fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); - ovl = STEREO_DFT_OVL_12k8; - trigo = hStereoDft->dft_trigo_12k8; - trigo_step = STEREO_DFT_TRIGO_SRATE_12k8_STEP; - mem = hStereoDft->output_mem_dmx_12k8; - win = hStereoDft->win_12k8; - win_ana = hStereoDft->win_ana_12k8; - - push_wmops( "DFT_synth_12k8" ); - } - else if ( output_sampling_rate == 16000 ) - { - assert( chan == 0 ); - - NFFT = STEREO_DFT_N_16k_ENC; - N = STEREO_DFT_HOP_16k_ENC; - zp = STEREO_DFT_ZP_16k_ENC; - fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); - ovl = STEREO_DFT_OVL_16k; - trigo = hStereoDft->dft_trigo_16k; - trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; - if ( L_frame > 0 ) - { - mem = hStereoDft->output_mem_dmx_16k_shb; - - push_wmops( "DFT_synth_16k_shb" ); - } - else - { - mem = hStereoDft->output_mem_dmx_16k; - - push_wmops( "DFT_synth_16k" ); - } - win = hStereoDft->win_16k; - win_ana = hStereoDft->win_ana_16k; - } - else if ( output_sampling_rate == 32000 ) - { - assert( chan == 0 ); - - NFFT = STEREO_DFT_N_32k_ENC; - N = STEREO_DFT_HOP_32k_ENC; - zp = STEREO_DFT_ZP_32k_ENC; - fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); - ovl = STEREO_DFT_OVL_32k; - trigo = hStereoDft->dft_trigo_32k; - trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; - mem = hStereoDft->output_mem_dmx_32k; - win = hStereoDft->win_32k; - win_ana = hStereoDft->win_ana_32k; - - push_wmops( "DFT_synth_32k" ); - } - else if ( output_sampling_rate == 8000 ) - { - assert( chan == 1 ); - - NFFT = STEREO_DFT_N_8k_ENC; - N = STEREO_DFT_HOP_8k_ENC; - zp = STEREO_DFT_ZP_8k_ENC; - fac = (float) ( NFFT ) / (float) ( hStereoDft->NFFT ); - ovl = STEREO_DFT_OVL_8k; - trigo = hStereoDft->dft_trigo_8k; - trigo_step = STEREO_DFT_TRIGO_SRATE_8k_STEP; - mem = hStereoDft->output_mem_res_8k; - win = hStereoDft->win_8k; - win_ana = hStereoDft->win_ana_8k; - - push_wmops( "DFT_synth_8k" ); - } - else - { - assert( 0 && "DFT stereo: sampling rate not supported!" ); - NFFT = -1; /* to avoid compilation warning */ - fac = -1; /* to avoid compilation warning */ - N = -1; /* to avoid compilation warning */ - zp = -1; /* to avoid compilation warning */ - win = NULL; /* to avoid compilation warning */ - trigo = NULL; /* to avoid compilation warning */ - trigo_step = -1; /* to avoid compilation warning */ - ovl = -1; /* to avoid compilation warning */ - mem = NULL; /* to avoid compilation warning */ - win_ana = NULL; /* to avoid compilation warning */ - } - - offset = 0; - - for ( i = 0; i < NFFT / 4; i++ ) - { - trigo_enc[i] = trigo[i * trigo_step]; - trigo_enc[NFFT / 2 - i] = trigo[i * trigo_step]; - } - trigo_enc[NFFT / 4] = trigo[NFFT / 4 * trigo_step]; - - /*-----------------------------------------------------------------* - * Synthesizing & resampling - *-----------------------------------------------------------------*/ - - offset = -ovl; - - if ( L_frame == L_FRAME || L_frame == L_FRAME16k ) - { - for ( i = (int16_t) ( 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i < (int16_t) ( 400 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i++ ) - { - hStereoDft->icbweRefEner += pDFT_in[2 * i] * pDFT_in[2 * i] + pDFT_in[2 * i + 1] * pDFT_in[2 * i + 1]; - } - for ( i = 0; i < (int16_t) ( 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i++ ) - { - hStereoDft->lbEner += pDFT_in[2 * i] * pDFT_in[2 * i] + pDFT_in[2 * i + 1] * pDFT_in[2 * i + 1]; - } - hStereoDft->icbweRefEner *= fac; - hStereoDft->lbEner *= fac; - } - - /*Flip?*/ - if ( L_frame == L_FRAME ) - { - /* 6 to 14 kHz SHB target signal*/ - j = 2; - set_zero( tmp, STEREO_DFT_N_MAX_ENC ); - sign = hStereoDft->flip_sign; - - for ( i = (int16_t) ( 350 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); i >= (int16_t) 150 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i-- ) - { - /* alternate sign between frames for even starting index */ - tmp[j++] = sign * pDFT_in[2 * i] * fac; - tmp[j++] = -sign * pDFT_in[2 * i + 1] * fac; - } - hStereoDft->flip_sign = -sign; - - for ( i = 0; i <= (int16_t) 100 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i++ ) - { - nrg += tmp[2 * i] * tmp[2 * i]; - nrg += tmp[2 * i + 1] * tmp[2 * i + 1]; - } - } - else if ( L_frame == L_FRAME16k ) - { - /* 7.5 - 15.5 kHz SHB target signal*/ - j = 2; - set_zero( tmp, STEREO_DFT_N_MAX_ENC ); - for ( i = (int16_t) ( 400 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ) - 1; i >= (int16_t) 200 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i-- ) - { - tmp[j++] = pDFT_in[2 * i] * fac; - tmp[j++] = -1.f * pDFT_in[2 * i + 1] * fac; - } - - for ( i = 0; i <= (int16_t) 100 * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ); i++ ) - { - nrg += tmp[2 * i] * tmp[2 * i]; - nrg += tmp[2 * i + 1] * tmp[2 * i + 1]; - } - } - else if ( fac != 1.f ) - { - /*Copy and scale*/ - tmp[0] = pDFT_in[0] * fac; - tmp[1] = 0.f; - for ( i = 2; i < NFFT; i++ ) - { - tmp[i] = pDFT_in[i] * fac; - } - - if ( fac < 1.f ) - { - tmp[1] = 0.f; /*Nyquist is set to 0*/ - tmp[0] = 0.f; /*DC is set to 0*/ - } - } - else - { - for ( i = 0; i < NFFT; i++ ) - { - tmp[i] = pDFT_in[i]; - } - } - - /*Reconstruct */ - /*IFFT*/ - rfft( tmp, trigo_enc, NFFT, +1 ); - - for ( i = 0; i < ovl; i++ ) - { - output[offset + i] = mem[i] + tmp[zp + i] * win[i]; - mem[i] = tmp[zp + N + i] * win[ovl - 1 - i]; - } - - /*Middle->Copy*/ - for ( i = 0; i < N - ovl; i++ ) - { - output[offset + ovl + i] = tmp[zp + ovl + i]; - } - - /*-----------------------------------------------------------------* - * Lookahead: redress signal - *-----------------------------------------------------------------*/ - - for ( i = 0; i < ovl; i++ ) - { - float ifft_deviation = tmp[zp + N + ovl]; - output[offset + N + i] = ( tmp[zp + N + i] - ifft_deviation ) / win_ana[ovl - 1 - i] + ifft_deviation; - } - - - pop_wmops(); - return ( nrg ); -} -#endif - -/*------------------------------------------------------------------------- - * stereo_dft_enc_process() - * - * DFT-based stereo main processing function: - * 1) compute/encode stereo parameters - * 2) Mid/Side computation - *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void stereo_dft_enc_process_fx( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const Word16 vad_flag_dtx[], /* i : VAD dtx flags */ - const Word16 vad_hover_flag[], /* i : VAD hangover flags */ - const Word16 input_frame /* i : input frame length */ -) -{ - Word16 i, j, b; - Word32 *pDFT_L_fx, *pDFT_R_fx; - Word32 *pDFT_DMX; - Word32 *pDFT_RES; - Word16 k_offset; - Word32 *pgIpd; - Word32 *pSideGain; - Word16 c_fx /*Q15*/, alpha_fx /*Q13*/; - Word32 g_fx; // Q31 - Word32 wL, wR; - Word16 wL_e, wR_e; - Word16 wS; - Word16 tmp_fx; - Word32 tmp_32fx; - Word16 s_fx /*Q15*/, c1_fx /*Q15*/, s1_fx /*Q15*/; - Word16 fac_att_fx; // Q15 - STEREO_DFT_ENC_DATA_HANDLE hStereoDft; - Word32 DFT_DMX[STEREO_DFT_N_MAX_ENC]; - Word16 DFT_DMX_e[STEREO_DFT_N_MAX_ENC]; - Word32 DFT_RES[STEREO_DFT_N_8k_ENC]; - Word16 DFT_RES_e[STEREO_DFT_N_8k_ENC]; - Word32 input_Fs; - Word32 bin_nrgL_fx[STEREO_DFT_N_MAX_ENC]; - Word16 bin_nrgL_fx_e[STEREO_DFT_N_MAX_ENC]; - Word32 bin_nrgR_fx[STEREO_DFT_N_MAX_ENC]; - Word16 bin_nrgR_fx_e[STEREO_DFT_N_MAX_ENC]; - Word32 *pNrgL, *pNrgR; - Word32 res_nrg_all_curr, dmx_nrg_all_curr; - Word16 res_nrg_all_curr_e, dmx_nrg_all_curr_e; - Word32 res_dmx_ratio /*Q31*/, frame_nrg_ratio /*Q28*/; - Word32 dot_prod_nrg_ratio_fx[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands Q31 */ - Word16 dot_prod_nrg_ratio_fx_e[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands Q31 */ - Word32 sum_nrg_L2, sum_nrg_R2, dot_prod_real2; - Word16 sum_nrg_L2_e, sum_nrg_R2_e, dot_prod_real2_e; - Word32 sum_nrg_Mid, sum_abs; - Word16 sum_nrg_Mid_e, sum_abs_e; - Word16 tmp_e; - Word16 DFT_L_e_tmp[STEREO_DFT_N_MAX_ENC], DFT_R_e_tmp[STEREO_DFT_N_MAX_ENC]; - Word32 L_tmp1, L_tmp2, L_tmp3; - Word16 L_tmp1_e, L_tmp2_e, L_tmp3_e; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - input_Fs = L_mult0( input_frame, FRAMES_PER_SEC ); - - hStereoDft = hCPE->hStereoDft; - - wL = 0; /* avoid compilation warning */ - move32(); - wL_e = 0; /* avoid compilation warning */ - move16(); - wR = 0; /* avoid compilation warning */ - move32(); - wR_e = 0; /* avoid compilation warning */ - move16(); - - /* Initialization */ - k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ - move16(); - - hStereoDft->gipd_band_max = dft_band_ipd[1][3]; - move16(); - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; - move16(); - // hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); - tmp_32fx = L_shl( L_mult0( sub( hStereoDft->band_limits[hStereoDft->res_cod_band_max], 1 ), input_frame ), 1 ); - tmp_32fx = BASOP_Util_Divide3216_Scale( tmp_32fx, hStereoDft->NFFT, &tmp_e ); - hStereoDft->res_cod_line_max = extract_l( L_shr_r( tmp_32fx, sub( 31, tmp_e ) ) ); - move16(); - // hStereoDft->res_cod_line_max = 8 * (hStereoDft->res_cod_line_max / 8); - hStereoDft->res_cod_line_max = shl( shr( hStereoDft->res_cod_line_max, 3 ), 3 ); - move16(); - hStereoDft->res_pred_band_min = s_max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - move16(); - - // hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[0]; - // hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[1]; + // hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[0]; + // hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[1]; hStereoDft->voicing_lt_fx = L_add( Mpy_32_16_1( hStereoDft->voicing_lt_fx, 24576 ), L_mult( 8192, hCPE->hCoreCoder[0]->voicing_fx[0] ) ); move32(); @@ -3424,455 +2439,30 @@ void stereo_dft_enc_process_fx( return; } -#else -void stereo_dft_enc_process( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int16_t vad_flag_dtx[], /* i : VAD dtx flags */ - const int16_t vad_hover_flag[], /* i : VAD hangover flags */ - const int16_t input_frame /* i : input frame length */ -) +/*------------------------------------------------------------------------- + * stereo_dft_enc_get_res_cod_mode_flag() + * + * Get the residual signal coding flag + *-------------------------------------------------------------------------*/ +static void stereo_dft_enc_get_res_cod_mode_flag_fx( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, + const Word32 res_nrg_all_curr, // Q(31-res_nrg_all_curr_e) + const Word16 res_nrg_all_curr_e, + const Word32 dmx_nrg_all_curr, // Q(31-dmx_nrg_all_curr_e) + const Word16 dmx_nrg_all_curr_e, + Word32 *res_dmx_ratio, // Q31 + Word32 *frame_nrg_ratio ) // Q28 { - int16_t i, j, b; - float *pDFT_L, *pDFT_R; - float *pDFT_DMX; - float *pDFT_RES; - int16_t k_offset; - float *pgIpd; - float *pSideGain; - float c, alpha, g; - float wL, wR, wS; - float tmp; - float s, c1, s1; - float fac_att; - STEREO_DFT_ENC_DATA_HANDLE hStereoDft; - float DFT_DMX[STEREO_DFT_N_MAX_ENC]; - float DFT_RES[STEREO_DFT_N_8k_ENC]; - int32_t input_Fs; - float bin_nrgL[STEREO_DFT_N_MAX_ENC]; - float bin_nrgR[STEREO_DFT_N_MAX_ENC]; - float *pNrgL, *pNrgR; - float res_nrg_all_curr, dmx_nrg_all_curr; - float res_dmx_ratio, frame_nrg_ratio; - float dot_prod_nrg_ratio[STEREO_DFT_BAND_MAX]; /* contains only dot product for higher bands */ - float sum_nrg_L2, sum_nrg_R2, dot_prod_real2; - float sum_nrg_Mid, sum_abs; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - input_Fs = input_frame * FRAMES_PER_SEC; - - hStereoDft = hCPE->hStereoDft; - - wL = 0; /* avoid compilation warning */ - wR = 0; /* avoid compilation warning */ + Word16 b, k_offset; + Word32 dmx_res_all, g /*Q31*/; + Word16 dmx_res_all_e; + Word16 fast_update_flag; + Word16 prev_res_cod_mode_flag, res_cod_mode_flag; + Word32 L_tmp1, L_tmp2; + Word16 L_tmp1_e, L_tmp2_e; - /* Initialization */ k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ - - hStereoDft->gipd_band_max = dft_band_ipd[1][3]; - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->res_cod_mode[k_offset]]; - hStereoDft->res_cod_line_max = (int16_t) ( 0.5f + ( hStereoDft->band_limits[hStereoDft->res_cod_band_max] - 1 ) * 2.f * input_frame / (float) ( hStereoDft->NFFT ) ); - hStereoDft->res_cod_line_max = 8 * ( hStereoDft->res_cod_line_max / 8 ); - - hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - - - hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[0]; - hStereoDft->voicing_lt = 0.75f * hStereoDft->voicing_lt + 0.25f * hCPE->hCoreCoder[0]->voicing[1]; - - /*------------------------------------------------------------------* - * Compute stereo parameters - *-----------------------------------------------------------------*/ - - /*ITD in Frequency domain*/ - fac_att = 1.0f; - - pDFT_L = hStereoDft->DFT[0]; - pDFT_R = hStereoDft->DFT[1]; - - { - stereo_dft_enc_compute_itd( hCPE, pDFT_L, pDFT_R, k_offset, input_frame, vad_flag_dtx, vad_hover_flag, bin_nrgL, bin_nrgR ); - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - return; - } - - if ( hStereoDft->hItd->deltaItd[k_offset] != 0 && hStereoDft->hConfig->dmx_active ) - { - /*time shift channels*/ - alpha = -2.0f * EVS_PI * hStereoDft->hItd->deltaItd[k_offset] / hStereoDft->NFFT; - c = 1.f; /*cos(0)*/ - s = 0.f; /*sin(0)*/ - c1 = cosf( alpha ); - s1 = sinf( alpha ); - - if ( alpha >= 0 ) - { - for ( i = 1; i < hStereoDft->NFFT / 2; i++ ) - { - tmp = s * c1 + c * s1; - c = c * c1 - s * s1; - s = tmp; - - /*time shift of L*/ - tmp = pDFT_L[2 * i] * c - pDFT_L[2 * i + 1] * s; - pDFT_L[2 * i + 1] = pDFT_L[2 * i] * s + pDFT_L[2 * i + 1] * c; - pDFT_L[2 * i] = tmp; - } - } - else - { - for ( i = 1; i < hStereoDft->NFFT / 2; i++ ) - { - tmp = s * c1 + c * s1; - c = c * c1 - s * s1; - s = tmp; - - /*time shift of R*/ - tmp = pDFT_R[2 * i] * c + pDFT_R[2 * i + 1] * s; - pDFT_R[2 * i + 1] = -pDFT_R[2 * i] * s + pDFT_R[2 * i + 1] * c; - pDFT_R[2 * i] = tmp; - } - } - - if ( fabsf( hStereoDft->hItd->deltaItd[k_offset] * 32000.f / input_Fs ) > 80.0f ) - { - fac_att = min( 1.0f, max( 0.2f, 2.6f - 0.02f * fabsf( hStereoDft->hItd->deltaItd[1] ) * 32000.f / input_Fs ) ); - } - } - - /* compute remaining binwise energies for FB mode (ITD function only computes energies up to 16 kHz) */ - for ( i = STEREO_DFT_N_32k_ENC / 2; i < hStereoDft->NFFT / 2; i++ ) - { - bin_nrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; - bin_nrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; - } - } - - /* DFT stereo parameters */ - stereo_dft_enc_compute_prm( hStereoDft, pDFT_L, pDFT_R, k_offset, 1, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->vad_flag, bin_nrgL, bin_nrgR, dot_prod_nrg_ratio ); - - if ( vad_flag_dtx[0] == 0 ) - { - if ( hCPE->hStereoCng->cng_counter == 0 && !hCPE->hStereoCng->first_SID_after_TD ) - { - hStereoDft->sid_gipd = hStereoDft->prev_sid_gipd; - hStereoDft->no_ipd_flag = hStereoDft->prev_sid_no_ipd_flag; - } - - if ( hCPE->hStereoCng->cng_counter > ITD_SID_PREV_FRAMES ) - { - hStereoDft->prev_sid_gipd = hStereoDft->sid_gipd; - hStereoDft->prev_sid_no_ipd_flag = hStereoDft->no_ipd_flag; - } - } - - /*----------------------------------------------------------------* - * UNCLR classifier (detection of uncorrelated L and R channels) - *----------------------------------------------------------------*/ - - unclr_classifier_dft( hCPE ); - - /*------------------------------------------------------------------* - * Channel mapping: computation of DMX and RES - *-----------------------------------------------------------------*/ - - res_nrg_all_curr = EPSILON; - dmx_nrg_all_curr = EPSILON; - - pDFT_DMX = DFT_DMX; - pDFT_RES = DFT_RES; - pNrgL = bin_nrgL; - pNrgR = bin_nrgR; - - set_zero( pDFT_DMX, STEREO_DFT_N_MAX_ENC ); - set_zero( pDFT_RES, STEREO_DFT_N_8k_ENC ); - - pgIpd = hStereoDft->gipd + k_offset; - pSideGain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; - - if ( hStereoDft->hConfig->dmx_active ) - { - /*Active DMX*/ - alpha = 0; /* to avoid compilation warning */ - g = 1.f; - - /*Apply active DMX*/ - pDFT_DMX[0] = 0.f; - pDFT_RES[0] = 0.f; - for ( b = 0; b < hStereoDft->nbands_dmx; b++ ) - { - g = pSideGain[b]; - - if ( pgIpd[0] != 0.f ) - { - c = cosf( pgIpd[0] ); - s = sinf( pgIpd[0] ); - for ( i = hStereoDft->band_limits_dmx[b]; i < hStereoDft->band_limits_dmx[b + 1]; i++ ) - { - /*rotate L*/ - tmp = pDFT_L[2 * i] * c + pDFT_L[2 * i + 1] * s; - pDFT_L[2 * i + 1] = pDFT_L[2 * i + 1] * c - pDFT_L[2 * i] * s; - pDFT_L[2 * i] = tmp; - } - } - - if ( b < hStereoDft->res_cod_band_max && vad_flag_dtx[0] ) - { - - /*Get the previous frame energy*/ - if ( hStereoDft->hConfig->ada_wb_res_cod_mode ) - { - /*Calculate the energy of RES and DMX*/ - /* 90% of old frame ... */ - dmx_nrg_all_curr += hStereoDft->res_cod_NRG_M[b] * 0.9f; - res_nrg_all_curr += hStereoDft->res_cod_NRG_S[b] * 0.9f; - } - hStereoDft->res_cod_NRG_M[b] = EPSILON; - hStereoDft->res_cod_NRG_S[b] = EPSILON; - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - pDFT_DMX[2 * i] = ( pDFT_L[2 * i] + pDFT_R[2 * i] ) * 0.5f; - pDFT_DMX[2 * i + 1] = ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) * 0.5f; - - pDFT_RES[2 * i] = ( pDFT_L[2 * i] - pDFT_R[2 * i] ) * 0.5f; - pDFT_RES[2 * i + 1] = ( pDFT_L[2 * i + 1] - pDFT_R[2 * i + 1] ) * 0.5f; - - /*Prediction of RES with DMX*/ - pDFT_RES[2 * i] = pDFT_RES[2 * i] - g * pDFT_DMX[2 * i]; - pDFT_RES[2 * i + 1] = pDFT_RES[2 * i + 1] - g * pDFT_DMX[2 * i + 1]; - - pDFT_RES[2 * i] *= fac_att; - pDFT_RES[2 * i + 1] *= fac_att; - - /*Energy of the DMX and RES*/ - hStereoDft->res_cod_NRG_M[b] += pDFT_DMX[2 * i] * pDFT_DMX[2 * i] + pDFT_DMX[2 * i + 1] * pDFT_DMX[2 * i + 1]; - hStereoDft->res_cod_NRG_S[b] += pDFT_RES[2 * i] * pDFT_RES[2 * i] + pDFT_RES[2 * i + 1] * pDFT_RES[2 * i + 1]; - } - - if ( hStereoDft->hConfig->ada_wb_res_cod_mode ) - { - /*Calculate the energy of RES and DMX*/ - /* ... + 10% of current frame. */ - dmx_nrg_all_curr += hStereoDft->res_cod_NRG_M[b] * 0.1f; - res_nrg_all_curr += hStereoDft->res_cod_NRG_S[b] * 0.1f; - } - } - else - { - int16_t upper_border; - int16_t triple_bin; - float frac_dot_prod; /* fraction of dot product according to energy ratio of current bins and whole band */ - float Sr, Si; - float comb_nrgL, comb_nrgR; - - upper_border = min( STEREO_DFT_DMX_CROSSOVER, hStereoDft->band_limits_dmx[b + 1] ); - - triple_bin = 0; - if ( upper_border > hStereoDft->band_limits_dmx[b] && ( upper_border - hStereoDft->band_limits_dmx[b] ) % 2 ) - { - /* if odd number of bins in band, combine last 3 bins */ - triple_bin = 1; - upper_border -= 3; - } - - for ( i = hStereoDft->band_limits_dmx[b]; i < upper_border; i += 2 ) - { - comb_nrgL = pNrgL[i] + pNrgL[i + 1]; - comb_nrgR = pNrgR[i] + pNrgR[i + 1]; - Sr = ( pDFT_L[2 * i] + pDFT_R[2 * i] ) * ( pDFT_L[2 * i] + pDFT_R[2 * i] ) + ( pDFT_L[2 * i + 2] + pDFT_R[2 * i + 2] ) * ( pDFT_L[2 * i + 2] + pDFT_R[2 * i + 2] ); - Si = ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) * ( pDFT_L[2 * i + 1] + pDFT_R[2 * i + 1] ) + ( pDFT_L[2 * i + 3] + pDFT_R[2 * i + 3] ) * ( pDFT_L[2 * i + 3] + pDFT_R[2 * i + 3] ); - - sum_abs = sqrtf( comb_nrgL ) + sqrtf( comb_nrgR ) + EPSILON; - frac_dot_prod = ( comb_nrgL + comb_nrgR ) * dot_prod_nrg_ratio[b]; - wR = sqrtf( 0.5f * ( comb_nrgL + comb_nrgR ) + frac_dot_prod ) / sum_abs; - - wL = wR + sqrtf( 2.f ) * ( 1.f - ( sqrtf( Sr + Si ) / sum_abs ) ); - - /*DMX Mapping*/ - pDFT_DMX[2 * i] = ( wL * pDFT_L[2 * i] + wR * pDFT_R[2 * i] ) * INV_SQRT_2; - pDFT_DMX[2 * i + 1] = ( wL * pDFT_L[2 * i + 1] + wR * pDFT_R[2 * i + 1] ) * INV_SQRT_2; - pDFT_DMX[2 * i + 2] = ( wL * pDFT_L[2 * i + 2] + wR * pDFT_R[2 * i + 2] ) * INV_SQRT_2; - pDFT_DMX[2 * i + 3] = ( wL * pDFT_L[2 * i + 3] + wR * pDFT_R[2 * i + 3] ) * INV_SQRT_2; - } - - if ( triple_bin ) - { - comb_nrgL = comb_nrgR = 0.f; - Sr = Si = 0.f; - for ( j = i; j < i + 3; j++ ) - { - comb_nrgL += pNrgL[j]; - comb_nrgR += pNrgR[j]; - Sr += ( pDFT_L[2 * j] + pDFT_R[2 * j] ) * ( pDFT_L[2 * j] + pDFT_R[2 * j] ); - Si += ( pDFT_L[2 * j + 1] + pDFT_R[2 * j + 1] ) * ( pDFT_L[2 * j + 1] + pDFT_R[2 * j + 1] ); - } - - sum_abs = sqrtf( comb_nrgL ) + sqrtf( comb_nrgR ) + EPSILON; - frac_dot_prod = ( comb_nrgL + comb_nrgR ) * dot_prod_nrg_ratio[b]; - wR = sqrtf( 0.5f * ( comb_nrgL + comb_nrgR ) + frac_dot_prod ) / sum_abs; - wL = wR + sqrtf( 2.f ) * ( 1.f - ( sqrtf( Sr + Si ) / sum_abs ) ); - - for ( j = i; j < i + 3; j++ ) - { - pDFT_DMX[2 * j] = ( wL * pDFT_L[2 * j] + wR * pDFT_R[2 * j] ) * INV_SQRT_2; - pDFT_DMX[2 * j + 1] = ( wL * pDFT_L[2 * j + 1] + wR * pDFT_R[2 * j + 1] ) * INV_SQRT_2; - } - i += 3; - } - - if ( i < hStereoDft->band_limits_dmx[b + 1] ) - { - sum_nrg_L2 = EPSILON; - sum_nrg_R2 = EPSILON; - dot_prod_real2 = EPSILON; - for ( j = hStereoDft->band_limits_dmx[b]; j < hStereoDft->band_limits_dmx[b + 1]; j++ ) - { - sum_nrg_L2 += pDFT_L[2 * j] * pDFT_L[2 * j] + pDFT_L[2 * j + 1] * pDFT_L[2 * j + 1]; - sum_nrg_R2 += pDFT_R[2 * j] * pDFT_R[2 * j] + pDFT_R[2 * j + 1] * pDFT_R[2 * j + 1]; - dot_prod_real2 += pDFT_L[2 * j] * pDFT_R[2 * j] + pDFT_L[2 * j + 1] * pDFT_R[2 * j + 1]; - } - - sum_nrg_Mid = max( 0.f, sum_nrg_L2 + sum_nrg_R2 + 2.f * dot_prod_real2 ); - sum_abs = sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) + EPSILON; - wR = sqrtf( 0.5f * ( sum_nrg_L2 + sum_nrg_R2 ) + dot_prod_nrg_ratio[b] ) / sum_abs; - wL = wR + sqrtf( 2.f ) * ( 1.f - sqrtf( sum_nrg_Mid ) / sum_abs ); - } - - for ( ; i < hStereoDft->band_limits_dmx[b + 1]; i++ ) - { - /*DMX Mapping*/ - pDFT_DMX[2 * i] = ( wL * pDFT_L[2 * i] + wR * pDFT_R[2 * i] ) * INV_SQRT_2; - pDFT_DMX[2 * i + 1] = ( wL * pDFT_L[2 * i + 1] + wR * pDFT_R[2 * i + 1] ) * INV_SQRT_2; - } - } - } - - for ( i = hStereoDft->band_limits_dmx[b]; i < hStereoDft->NFFT / 2; i++ ) - { - pDFT_DMX[2 * i] = 0.f; - pDFT_DMX[2 * i + 1] = 0.f; - } - - /*Nyquist Freq.*/ - if ( hStereoDft->band_limits_dmx[b] >= hStereoDft->NFFT / 2 ) - { - pDFT_DMX[1] = ( pDFT_L[1] + pDFT_R[1] ) * 0.5f; - } - else - { - pDFT_DMX[1] = 0.f; - } - - /* DC component */ - pDFT_DMX[0] = ( pDFT_L[0] + pDFT_R[0] ) * 0.5f; - } - else - { - /*passive DMX*/ - assert( hStereoDft->nbands == hStereoDft->nbands_dmx && "Don't use coarser stereo parameter resolution for residual coding bitrates!" ); - for ( i = 0; i < hStereoDft->band_limits[hStereoDft->res_cod_band_max]; i++ ) - { - pDFT_DMX[i] = ( pDFT_L[i] + pDFT_R[i] ) * 0.5f; - pDFT_RES[i] = ( pDFT_L[i] - pDFT_R[i] ) * 0.5f; - } - for ( ; i < hStereoDft->NFFT; i++ ) - { - pDFT_DMX[i] = ( pDFT_L[i] + pDFT_R[i] ) * 0.5f; - } - } - - /*------------------------------------------------------------------* - * Recalculate RES and DMX - *-----------------------------------------------------------------*/ - - if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC && hStereoDft->hConfig->ada_wb_res_cod_mode ) - { - stereo_dft_enc_get_res_cod_mode_flag( hStereoDft, res_nrg_all_curr, dmx_nrg_all_curr, &res_dmx_ratio, &frame_nrg_ratio ); - - if ( hStereoDft->res_cod_sw_flag ) - { - int16_t res_cod_band_max; - - res_cod_band_max = dft_band_res_cod[hStereoDft->band_res[k_offset]][hStereoDft->hConfig->ada_wb_res_cod_mode]; - - /* Recalculate RES and DMX */ - for ( b = 0; b < res_cod_band_max; b++ ) - { - sum_nrg_L2 = EPSILON; - sum_nrg_R2 = EPSILON; - dot_prod_real2 = EPSILON; - for ( j = hStereoDft->band_limits_dmx[b]; j < hStereoDft->band_limits_dmx[b + 1]; j++ ) - { - sum_nrg_L2 += pDFT_L[2 * j] * pDFT_L[2 * j] + pDFT_L[2 * j + 1] * pDFT_L[2 * j + 1]; - sum_nrg_R2 += pDFT_R[2 * j] * pDFT_R[2 * j] + pDFT_R[2 * j + 1] * pDFT_R[2 * j + 1]; - dot_prod_real2 += pDFT_L[2 * j] * pDFT_R[2 * j] + pDFT_L[2 * j + 1] * pDFT_R[2 * j + 1]; - } - - sum_nrg_Mid = max( 0.f, sum_nrg_L2 + sum_nrg_R2 + 2.f * dot_prod_real2 ); - wL = 0.5f * max( sqrtf( sum_nrg_L2 ) + sqrtf( sum_nrg_R2 ) - sqrtf( sum_nrg_Mid ), 0 ) * inv_sqrt( sum_nrg_L2 + EPSILON ); - wS = 1; - - if ( hStereoDft->res_cod_sw_flag ) - { - wL *= ( 1 - hStereoDft->switch_fade_factor ); - wS = hStereoDft->switch_fade_factor; - } - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) - { - /*DMX Recalculation*/ - DFT_DMX[2 * i] += wL * pDFT_L[2 * i]; - DFT_DMX[2 * i + 1] += wL * pDFT_L[2 * i + 1]; - - /*RES Recalculation*/ - DFT_RES[2 * i] *= wS; - DFT_RES[2 * i + 1] *= wS; - } - } - } - } - - if ( input_Fs >= 32000 ) - { - stereo_dft_enc_calculate_nrg_for_icbwe( hStereoDft, DFT_DMX, input_Fs ); - } - - mvr2r( DFT_DMX, hStereoDft->DFT[0], STEREO_DFT_N_MAX_ENC ); - mvr2r( DFT_RES, hStereoDft->DFT[1], STEREO_DFT_N_8k_ENC ); - set_zero( hStereoDft->DFT[1] + STEREO_DFT_N_8k_ENC, STEREO_DFT_N_MAX_ENC - STEREO_DFT_N_8k_ENC ); - - return; -} -#endif -/*------------------------------------------------------------------------- - * stereo_dft_enc_get_res_cod_mode_flag() - * - * Get the residual signal coding flag - *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static void stereo_dft_enc_get_res_cod_mode_flag_fx( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, - const Word32 res_nrg_all_curr, // Q(31-res_nrg_all_curr_e) - const Word16 res_nrg_all_curr_e, - const Word32 dmx_nrg_all_curr, // Q(31-dmx_nrg_all_curr_e) - const Word16 dmx_nrg_all_curr_e, - Word32 *res_dmx_ratio, // Q31 - Word32 *frame_nrg_ratio ) // Q28 -{ - Word16 b, k_offset; - Word32 dmx_res_all, g /*Q31*/; - Word16 dmx_res_all_e; - Word16 fast_update_flag; - Word16 prev_res_cod_mode_flag, res_cod_mode_flag; - Word32 L_tmp1, L_tmp2; - Word16 L_tmp1_e, L_tmp2_e; - - k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ - move16(); + move16(); /*Calculate energy ratio between residual signal and downmix signal */ *res_dmx_ratio = 0; @@ -4077,190 +2667,37 @@ static void stereo_dft_enc_get_res_cod_mode_flag_fx( return; } -#else -static void stereo_dft_enc_get_res_cod_mode_flag( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, - const float res_nrg_all_curr, - const float dmx_nrg_all_curr, - float *res_dmx_ratio, - float *frame_nrg_ratio ) -{ - int16_t b, k_offset; - float dmx_res_all, g; - int16_t fast_update_flag; - int16_t prev_res_cod_mode_flag, res_cod_mode_flag; - - k_offset = STEREO_DFT_OFFSET; /*Add an offset at encoder*/ +/*------------------------------------------------------------------------- + * stereo_dft_enc_res() + * + * Code the residual signal + *-------------------------------------------------------------------------*/ - /*Calculate energy ratio between residual signal and downmix signal */ - *res_dmx_ratio = 0; +void stereo_dft_enc_res_fx( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ + const Word32 *input_8k, /* i : input buffer sampled at 8kHz Q16 */ + BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ + Word16 *nb_bits, /* o : number of bits written */ + const Word16 max_bits ) +{ + Word16 i, b; + RangeUniEncState range_uni_enc_state; + ECSQ_instance ecsq_inst; + Word32 MDCT_RES[L_FRAME8k]; + Word16 MDCT_RES_e; + Word16 win[L_FRAME8k + STEREO_DFT_OVL_8k]; // Q0 + Word16 global_gain_index; + Word16 total_bit_count; + Word32 max_snr; // Q25 + Word32 panning_gain, panning_gain_min; + Word32 res_cod_gain[10]; // Q25 + Word32 in_phase_ratio; + Word16 in_phase_ratio_e; + Word32 L_tmp1, L_tmp2; + Word16 /*L_tmp1_e,*/ L_tmp2_e; + assert( hStereoDft->res_cod_line_max <= L_FRAME8k ); - for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) - { - g = fabsf( hStereoDft->side_gain[(k_offset) *STEREO_DFT_BAND_MAX + b] ); - *res_dmx_ratio = max( hStereoDft->res_cod_NRG_S[b] / ( hStereoDft->res_cod_NRG_S[b] + ( 1 - g ) * ( 1 - g ) * hStereoDft->res_cod_NRG_M[b] + 1 ), *res_dmx_ratio ); - } - *res_dmx_ratio = check_bounds( *res_dmx_ratio, 0, 1 ); /*should always be satisfied*/ - - /*Calculate the total energy of RES and DMX*/ - dmx_res_all = res_nrg_all_curr + dmx_nrg_all_curr; - - /*Calculate the energy ratio of the inter-frame */ - *frame_nrg_ratio = dmx_res_all / hStereoDft->dmx_res_all_prev; - *frame_nrg_ratio = min( 5.0f, max( 0.2f, *frame_nrg_ratio ) ); - - /* Get fast update flag */ - fast_update_flag = 0; - if ( ( *frame_nrg_ratio > 3.2f && *res_dmx_ratio < 0.1f ) || ( *frame_nrg_ratio < 0.21f && *res_dmx_ratio > 0.4f ) ) - { - fast_update_flag = 1; - } - - /* Calculate long term energy ratio between residual signal and downmix signal */ - if ( fast_update_flag ) - { - hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.2f + hStereoDft->res_dmx_ratio_lt * 0.8f; - } - else - { - hStereoDft->res_dmx_ratio_lt = *res_dmx_ratio * 0.05f + hStereoDft->res_dmx_ratio_lt * 0.95f; - } - - /*Get the residual signal coding initial flag */ - if ( hStereoDft->res_dmx_ratio_lt > 0.01f ) - { - res_cod_mode_flag = 1; - } - else - { - res_cod_mode_flag = 0; - } - - /* Get the residual signal coding flag */ - if ( hStereoDft->first_frm_flag ) - { - prev_res_cod_mode_flag = res_cod_mode_flag; - hStereoDft->first_frm_flag = 0; - } - else - { - prev_res_cod_mode_flag = hStereoDft->res_cod_mode[STEREO_DFT_OFFSET - 1]; - } - if ( res_cod_mode_flag != prev_res_cod_mode_flag ) - { - if ( prev_res_cod_mode_flag == 1 ) - { - if ( hStereoDft->hangover_cnt0 < 5 && hStereoDft->last_res_cod_mode_modify_flag == 0 && fast_update_flag == 0 ) - { - res_cod_mode_flag = prev_res_cod_mode_flag; - hStereoDft->hangover_cnt0++; - } - else - { - /* reset hangover */ - hStereoDft->hangover_cnt0 = 0; - } - } - else - { - if ( *frame_nrg_ratio > 2.5f || *frame_nrg_ratio < 0.21f ) - { - /* reset hangover */ - hStereoDft->hangover_cnt1 = 0; - } - else - { - if ( hStereoDft->hangover_cnt1 < 5 ) - { - res_cod_mode_flag = prev_res_cod_mode_flag; - hStereoDft->hangover_cnt1++; - } - else - { - /* reset hangover */ - hStereoDft->hangover_cnt1 = 0; - } - } - } - } - - /* handle switching frames */ - if ( res_cod_mode_flag != prev_res_cod_mode_flag && hStereoDft->last_res_cod_mode_modify_flag == 0 ) - { - hStereoDft->res_cod_sw_flag = 1; - - /* Update switch_fade_factor */ - if ( *frame_nrg_ratio > 3.2f && *res_dmx_ratio < 0.1f ) - { - hStereoDft->switch_fade_factor = 0.75f; - } - else if ( *frame_nrg_ratio < 0.21f && *res_dmx_ratio > 0.4f ) - { - hStereoDft->switch_fade_factor = 0.25f; - } - else - { - hStereoDft->switch_fade_factor = 0.5f; - } - - if ( res_cod_mode_flag == 0 ) - { - res_cod_mode_flag = 1; - } - } - - /*update previous frame's total energy of RES and DMX */ - hStereoDft->dmx_res_all_prev = dmx_res_all; - - /* update residual coding mode */ - hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] = res_cod_mode_flag; - if ( !hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) - { - hStereoDft->res_cod_band_max = 0; - hStereoDft->res_cod_line_max = 0; - } - - /*Update residual signal memory when switching from not coding residual signal to coding it*/ - if ( prev_res_cod_mode_flag == 0 && res_cod_mode_flag == 1 ) - { - set_zero( hStereoDft->output_mem_res_8k, STEREO_DFT_OVL_8k ); - } - - return; -} -#endif -/*------------------------------------------------------------------------- - * stereo_dft_enc_res() - * - * Code the residual signal - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void stereo_dft_enc_res_fx( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ - const Word32 *input_8k, /* i : input buffer sampled at 8kHz Q16 */ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - Word16 *nb_bits, /* o : number of bits written */ - const Word16 max_bits ) -{ - Word16 i, b; - RangeUniEncState range_uni_enc_state; - ECSQ_instance ecsq_inst; - Word32 MDCT_RES[L_FRAME8k]; - Word16 MDCT_RES_e; - Word16 win[L_FRAME8k + STEREO_DFT_OVL_8k]; // Q0 - Word16 global_gain_index; - Word16 total_bit_count; - Word32 max_snr; // Q25 - Word32 panning_gain, panning_gain_min; - Word32 res_cod_gain[10]; // Q25 - Word32 in_phase_ratio; - Word16 in_phase_ratio_e; - Word32 L_tmp1, L_tmp2; - Word16 /*L_tmp1_e,*/ L_tmp2_e; - assert( hStereoDft->res_cod_line_max <= L_FRAME8k ); - - IF( hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) + IF( hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) { /* Windowing */ /* overlapping parts */ @@ -4396,139 +2833,12 @@ void stereo_dft_enc_res_fx( return; } -#else -void stereo_dft_enc_res( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder stereo handle */ - const float *input_8k, /* i : input buffer sampled at 8kHz*/ - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - int16_t *nb_bits, /* o : number of bits written */ - const int16_t max_bits ) -{ - int16_t i, b; - RangeUniEncState range_uni_enc_state; - ECSQ_instance ecsq_inst; - float MDCT_RES[L_FRAME8k]; - float win[L_FRAME8k + STEREO_DFT_OVL_8k]; - int16_t global_gain_index; - int16_t total_bit_count; - float max_snr; - float panning_gain, panning_gain_min; - float res_cod_gain[10]; - float in_phase_ratio; - assert( hStereoDft->res_cod_line_max <= L_FRAME8k ); - - if ( hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] ) - { - /* Windowing */ - /* overlapping parts */ - /*input_8k-=STEREO_DFT_OVL_8k;*/ - for ( i = 0; i < STEREO_DFT_OVL_8k; i++ ) - { - win[i] = input_8k[i] * hStereoDft->win_mdct_8k[i]; - win[L_FRAME8k + i] = input_8k[L_FRAME8k + i] * hStereoDft->win_mdct_8k[STEREO_DFT_OVL_8k - 1 - i]; - } - /* middle part */ - for ( ; i < L_FRAME8k; i++ ) - { - win[i] = input_8k[i]; - } - - /* MDCT analysis */ - TCX_MDCT_flt( win, MDCT_RES, STEREO_DFT_OVL_8k, L_FRAME8k - STEREO_DFT_OVL_8k, STEREO_DFT_OVL_8k, IVAS_CPE_DFT ); - - /*Compute the DMX to RES for each band*/ - max_snr = 0.f; /*minimum gain for residual coding -> no coding*/ - for ( b = 0; b < hStereoDft->res_cod_band_max; b++ ) - { - /*Get side gain information and it is we*/ - panning_gain = hStereoDft->side_gain[STEREO_DFT_OFFSET * STEREO_DFT_BAND_MAX + b]; - panning_gain_min = 1.f - fabsf( panning_gain ); - - in_phase_ratio = ( panning_gain_min * panning_gain_min * hStereoDft->res_cod_NRG_M[b] ) / ( panning_gain_min * panning_gain_min * hStereoDft->res_cod_NRG_M[b] + hStereoDft->res_cod_NRG_S[b] + 1 ); - in_phase_ratio = check_bounds( in_phase_ratio, 0, 1 ); - res_cod_gain[b] = in_phase_ratio * STEREO_DFT_RES_COD_SNR_MIN + ( 1 - in_phase_ratio ) * STEREO_DFT_RES_COD_SNR_MAX; - - /*get the maximum through bands*/ - if ( res_cod_gain[b] > max_snr ) - { - max_snr = res_cod_gain[b]; - } - } - - /*Smooth max_snr because of several perturbations in computation*/ - hStereoDft->old_snr = 0.2f * max_snr + 0.8f * hStereoDft->old_snr; - max_snr = hStereoDft->old_snr; - - if ( max_snr < STEREO_DFT_RES_COD_SNR_MIN ) - { - max_snr = STEREO_DFT_RES_COD_SNR_MIN; - } - - push_wmops( "residual_encode" ); - /* residual encoding */ - ECSQ_init_instance( &ecsq_inst, 0 /*dummy index*/, &range_uni_enc_state ); - rc_uni_enc_init( &range_uni_enc_state ); - - ecsq_inst.bit_count_estimate = 0; - ecsq_inst.config_index = 2 * hStereoDft->res_cod_mode[STEREO_DFT_OFFSET] - 1; - - /* 7 bits (STEREO_DFT_RES_GLOBAL_GAIN_BITS) for global_gain_index, 2 bits for closing of the arithmetic coder, 8 safety bits to account for the size estimation accuracy */ - ECSQ_encode_target_SNR( &ecsq_inst, MDCT_RES, hStereoDft->res_cod_line_max, max_snr, max_bits - ( *nb_bits ) - STEREO_DFT_RES_GLOBAL_GAIN_BITS - 2 - 8, NULL, &global_gain_index ); - if ( global_gain_index != ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO ) - { - total_bit_count = rc_uni_enc_finish( &range_uni_enc_state ); - - if ( total_bit_count <= max_bits - *nb_bits - STEREO_DFT_RES_GLOBAL_GAIN_BITS ) - { - int16_t idx; - uint8_t *byte_buffer; - - /* Global gain */ - push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); - ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; - - /* Push arithmetic coded bits */ - byte_buffer = range_uni_enc_state.byte_buffer; - for ( idx = 0; idx < ( total_bit_count >> 3 ); ++idx ) - { - push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_COD, byte_buffer[idx], 8 ); - } - if ( ( total_bit_count & 7 ) != 0 ) - { - /* move the last 1 to 7 bits from the MSB position of the last byte to the LSB postion */ - push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_COD, byte_buffer[idx] >> ( 8 - ( total_bit_count & 7 ) ), total_bit_count & 7 ); - } - ( *nb_bits ) += total_bit_count; - } - else - { - /* Global gain -> 127*/ - global_gain_index = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; - push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); - ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; - } - } - else - { - /* Global gain -> 127*/ - push_indice( hBstr, IND_STEREO_DFT_RESIDUAL_GLOBAL_GAIN, global_gain_index, STEREO_DFT_RES_GLOBAL_GAIN_BITS ); - ( *nb_bits ) += STEREO_DFT_RES_GLOBAL_GAIN_BITS; - } - - pop_wmops(); - } - - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_write_BS() * * Write DFT stereo bitstream *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_enc_write_BS_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word16 *nb_bits /* o : number of bits written */ @@ -4941,392 +3251,14 @@ IF( EQ_32( core_brate, SID_2k40 ) ) return; } -#else -void stereo_dft_enc_write_BS( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - int16_t *nb_bits /* o : number of bits written */ -) -{ - int16_t b, k_offset, itd, nb, nbands, sp_aud_decision0; - int16_t NFFT_inner, nbands_full; - int16_t no_GR_ord; - int16_t encoded_ind_GR[STEREO_DFT_BAND_MAX]; - int16_t encoded_ind_pred_GR[STEREO_DFT_BAND_MAX]; - int16_t sid_gIpd_index, sid_itd; - float cohBand[STEREO_DFT_BAND_MAX / 2]; - BSTR_ENC_HANDLE hBstr; - STEREO_DFT_ENC_DATA_HANDLE hStereoDft; - int32_t core_brate; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - hStereoDft = hCPE->hStereoDft; - hBstr = hCPE->hMetaData; - core_brate = hCPE->hCoreCoder[0]->core_brate; - - sp_aud_decision0 = 0; - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - sp_aud_decision0 = hCPE->hCoreCoder[0]->sp_aud_decision0; - } - - *nb_bits = 0; - k_offset = STEREO_DFT_OFFSET; - - nbands_full = hStereoDft->nbands; - - if ( core_brate == FRAME_NO_DATA || core_brate == SID_2k40 ) - { - NFFT_inner = min( STEREO_DFT_N_32k_ENC, STEREO_DFT_N_MAX_ENC * inner_frame_tbl[hCPE->hCoreCoder[0]->bwidth] / L_FRAME48k ); - hStereoDft->band_res[k_offset] = hStereoDft->hConfig->band_res; - hStereoDft->res_pred_mode[k_offset] = 0; - hStereoDft->res_cod_mode[k_offset] = 0; - } - else - { - NFFT_inner = STEREO_DFT_N_MAX_ENC * inner_frame_tbl[hCPE->hCoreCoder[0]->bwidth] / L_FRAME48k; - } - - /* set number of bands according to bandwidth after BWD */ -#ifndef IVAS_FLOAT_FIXED - hStereoDft->nbands = stereo_dft_band_config( hStereoDft->band_limits, hStereoDft->band_res[k_offset], NFFT_inner, ENC ); -#else - hStereoDft->nbands = stereo_dft_band_config_fx( hStereoDft->band_limits, hStereoDft->band_res[k_offset], NFFT_inner, ENC ); -#endif - if ( core_brate == FRAME_NO_DATA ) - { - /* No data frame */ - ( *nb_bits ) = 0; - return; - } - - /* attack present */ - /* attackPresent not sent in inactive frames, receiver assumes = 0 */ - if ( core_brate != SID_2k40 ) - { - push_indice( hBstr, IND_STEREO_DFT_ATTACK_PRESENT, hStereoDft->attackPresent, 1 ); - ( *nb_bits )++; - } - - /* Writing coding residual coding mode into bitstream */ - if ( hStereoDft->hConfig->ada_wb_res_cod_mode && hCPE->hCoreCoder[0]->bwidth == WB ) - { - push_indice( hBstr, IND_STEREO_DFT_RES_COD, hStereoDft->res_cod_mode[k_offset], 1 ); - ( *nb_bits )++; - hStereoDft->res_cod_band_max = dft_band_res_cod[hStereoDft->hConfig->band_res][hStereoDft->res_cod_mode[k_offset]]; - hStereoDft->res_pred_band_min = max( STEREO_DFT_RES_PRED_BAND_MIN, hStereoDft->res_cod_band_max ); - } - - - if ( nbands_full < hStereoDft->nbands ) - { - hStereoDft->reverb_flag = 0; - } - - /* Side gains */ - hStereoDft->side_gain_flag_1 = 0; /* EC coding by default */ - side_gain_mode_decision( hStereoDft, encoded_ind_GR, sp_aud_decision0, hCPE->hCoreCoder[0]->last_core_brate ); - - /* residual pred. gains */ - hStereoDft->res_pred_flag_1 = 0; /* EC coding by default */ - - res_pred_gain_mode_decision( hStereoDft, encoded_ind_pred_GR, k_offset, hCPE->hCoreCoder[0]->last_core_brate ); - - /*------------------------------------------------------------------* - * write ITD indices - *-----------------------------------------------------------------*/ - - if ( core_brate != SID_2k40 ) - { - push_indice( hBstr, IND_STEREO_DFT_ITD_MODE, ( hStereoDft->hItd->itd[k_offset] != 0 ), STEREO_DFT_ITD_MODE_NBITS ); - ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ - } - - if ( core_brate != SID_2k40 ) - { - if ( hStereoDft->hItd->itd[k_offset] ) - { - itd = hStereoDft->hItd->itd_index[k_offset]; - if ( itd > 255 ) - { - itd -= 256; - - if ( itd < 20 ) - { - push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 1, 1 ); /* use Huffman*/ - push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, dft_code_itd[itd], dft_len_itd[itd] ); - ( *nb_bits ) += dft_len_itd[itd] + 2; - } - else - { - push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 0, 1 ); /* don't use Huffman */ - push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_ITD_NBITS - 1 ); - ( *nb_bits ) += STEREO_DFT_ITD_NBITS + 1; - } - } - else - { - if ( itd < 20 ) - { - push_indice( hBstr, IND_STEREO_DFT_ITD_HUFF, 1, 1 ); /* use Huffman*/ - push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 0, 1 ); /* positive */ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, dft_code_itd[itd], dft_len_itd[itd] ); - ( *nb_bits ) += dft_len_itd[itd] + 2; - } - else - { - /* don't use Huffman and positive*/ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_ITD_NBITS + 1 ); - ( *nb_bits ) += STEREO_DFT_ITD_NBITS + 1; - } - } - } - } - -#ifdef DEBUG_MODE_DFT_BITS - fprintf( ITD_bits, "%d ", *nb_bits ); -#endif - - /*------------------------------------------------------------------* - * write Side gain indices - *-----------------------------------------------------------------*/ - - /* Side Gain flag 1 */ - nb = 0; - if ( hStereoDft->side_gain_flag_1 > 0 ) - { - push_indice( hBstr, IND_STEREO_DFT_SIDEGAIN_FLAG, hStereoDft->side_gain_flag_1, 2 ); - nb += 2; - } - else - { - push_indice( hBstr, IND_STEREO_DFT_SIDEGAIN_FLAG, hStereoDft->side_gain_flag_1, STEREO_DFT_FLAG_BITS ); - nb += STEREO_DFT_FLAG_BITS; - } - - no_GR_ord = 3; - - if ( hStereoDft->side_gain_flag_1 == 0 ) - { - nb += write_bitstream_adapt_GR( hBstr, IND_STEREO_DFT_SIDEGAINS, encoded_ind_GR, hStereoDft->nbands, hStereoDft->side_gain_flag_2, no_GR_ord ); - } - else - { - if ( hStereoDft->side_gain_flag_1 == 2 ) - { - nb += write_bitstream_GR( hBstr, IND_STEREO_DFT_SIDEGAINS, hStereoDft->side_gain_index_ECDiff, hStereoDft->nbands, hStereoDft->side_gain_flag_2 - no_GR_ord ); - } - else - { - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - /*ILD*/ - push_indice( hBstr, IND_STEREO_DFT_SIDEGAINS, hStereoDft->side_gain_index_EC[b], STEREO_DFT_SIDEGAIN_NBITS ); - nb += STEREO_DFT_SIDEGAIN_NBITS; - } - } - } - - /* nb bits are used for side gain*/ - ( *nb_bits ) += nb; -#ifdef DEBUG_MODE_DFT_BITS - fprintf( SG_bits, "%d ", nb ); -#endif - nb = 0; - - if ( core_brate == SID_2k40 ) - { - stereo_dft_enc_sid_calc_coh( hStereoDft, hCPE->hStereoCng->prev_cohBand, &hCPE->hStereoCng->td_active, &hCPE->hStereoCng->first_SID, cohBand ); - - if ( *nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS - STEREO_DFT_ITD_MODE_NBITS - STEREO_DFT_SID_ITD_NBITS - 1 ) ) - { - if ( hStereoDft->hItd->itd[k_offset] != 0 ) - { - /* Re-quantize ITD with lower resolution for Stereo CNG */ - itd = hStereoDft->hItd->itd_index[k_offset]; - if ( itd > 255 ) - { - itd -= 256; - } - itd = itd >> STEREO_DFT_SID_ITD_FAC; - - sid_itd = itd && 1; - } - else - { - sid_itd = 0; - } - - push_indice( hBstr, IND_STEREO_DFT_ITD_MODE, sid_itd, STEREO_DFT_ITD_MODE_NBITS ); - ( *nb_bits ) += STEREO_DFT_ITD_MODE_NBITS; /*ITD mode flag: 1bit*/ - - if ( sid_itd ) - { - itd = hStereoDft->hItd->itd_index[k_offset]; - if ( itd > 255 ) - { - itd -= 256; - itd = itd >> STEREO_DFT_SID_ITD_FAC; - - if ( itd > ( ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1 ) ) - { - itd = ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1; - } - - push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 1, 1 ); /* negative */ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_SID_ITD_NBITS ); - ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; - } - else - { - itd = itd >> STEREO_DFT_SID_ITD_FAC; - - if ( itd > ( ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1 ) ) - { - itd = ( 1 << STEREO_DFT_SID_ITD_NBITS ) - 1; - } - - push_indice( hBstr, IND_STEREO_DFT_ITD_NEG, 0, 1 ); /* Positive */ - push_indice( hBstr, IND_STEREO_DFT_ITD_COD, itd, STEREO_DFT_SID_ITD_NBITS ); - ( *nb_bits ) += STEREO_DFT_SID_ITD_NBITS + 1; - } - } - } - } - - /*------------------------------------------------------------------* - * write IPD indices - *-----------------------------------------------------------------*/ - - if ( core_brate != SID_2k40 ) - { - push_indice( hBstr, IND_STEREO_DFT_NO_IPD_FLAG, hStereoDft->no_ipd_flag, STEREO_DFT_FLAG_BITS ); - nb += STEREO_DFT_FLAG_BITS; /*IPD mode flag: 1bit*/ - - if ( hStereoDft->no_ipd_flag == 0 ) - { - push_indice( hBstr, IND_STEREO_DFT_GIPD, hStereoDft->gipd_index, STEREO_DFT_GIPD_NBITS ); - nb += STEREO_DFT_GIPD_NBITS; - } - } - else if ( *nb_bits <= ( ( IVAS_SID_5k2 - SID_2k40 ) / FRAMES_PER_SEC - SID_FORMAT_NBITS - STEREO_DFT_FLAG_BITS - STEREO_DFT_SID_GIPD_NBITS ) ) - { - push_indice( hBstr, IND_STEREO_DFT_NO_IPD_FLAG, hStereoDft->no_ipd_flag, STEREO_DFT_FLAG_BITS ); - nb += STEREO_DFT_FLAG_BITS; /*IPD mode flag: 1bit*/ - - if ( hStereoDft->no_ipd_flag == 0 ) - { - stereo_dft_quantize_ipd( &hStereoDft->sid_gipd, &hStereoDft->sid_gipd, &sid_gIpd_index, STEREO_DFT_SID_GIPD_NBITS ); - push_indice( hBstr, IND_STEREO_DFT_GIPD, sid_gIpd_index, STEREO_DFT_SID_GIPD_NBITS ); - nb += STEREO_DFT_SID_GIPD_NBITS; - } - } - - -#ifdef DEBUG_MODE_DFT_BITS - fprintf( IPD_bits, "%d ", nb ); -#endif - ( *nb_bits ) += nb; - - /*----------------------------------------------------------------* - * Residual prediction - *----------------------------------------------------------------*/ - - nb = 0; /* bits for residual pred gains */ - if ( hStereoDft->res_pred_mode[k_offset] ) - { - if ( hStereoDft->attackPresent == 0 ) - { - nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); - b = hStereoDft->res_pred_band_min; - - /*Adaptive SF*/ - if ( hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - /*read flag*/ - push_indice( hBstr, IND_STEREO_DFT_REVERB_MODE, hStereoDft->reverb_flag, STEREO_DFT_REVERB_MODE_NBITS ); - nb += STEREO_DFT_REVERB_MODE_NBITS; - if ( hStereoDft->reverb_flag ) - { - nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; - } - } - - /* Res Pred Gain flag 0 */ - if ( hStereoDft->res_pred_flag_1 > 0 ) - { - push_indice( hBstr, IND_STEREO_DFT_RES_PRED_FLAG, hStereoDft->res_pred_flag_1, 2 ); - nb += 2; /*pred gain mode flag: 2 bits*/ - } - else - { - push_indice( hBstr, IND_STEREO_DFT_RES_PRED_FLAG, hStereoDft->res_pred_flag_1, STEREO_DFT_FLAG_BITS ); - nb += STEREO_DFT_FLAG_BITS; /*pred gain mode flag: 1bit*/ - } - - no_GR_ord = 2; - if ( hStereoDft->res_pred_flag_1 == 0 ) - { - if ( encoded_ind_pred_GR[0] == dft_maps_rpg[8 * NO_SYMB_GR_PRED_G] ) - { - nb += write_GR1( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, encoded_ind_pred_GR, 1 ); - } - else - { - nb += write_bitstream_adapt_GR( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, encoded_ind_pred_GR, nbands - hStereoDft->res_pred_band_min, hStereoDft->res_pred_flag_2, 2 ); - } - } - else - { - if ( hStereoDft->res_pred_flag_1 == 2 ) - { - nb += write_bitstream_GR( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, &hStereoDft->res_pred_index_ECDiff[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, hStereoDft->res_pred_flag_2 - no_GR_ord ); - } - else - { - for ( b = hStereoDft->res_pred_band_min; b < nbands; b++ ) - { - push_indice( hBstr, IND_STEREO_DFT_PRED_GAIN_COD, hStereoDft->res_pred_index_EC[b], STEREO_DFT_RES_GAINS_BITS ); - nb += STEREO_DFT_RES_GAINS_BITS; - } - } - } - } - else - { - set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands - hStereoDft->res_pred_band_min ); - } - } - else - { - set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands - hStereoDft->res_pred_band_min ); - } - - ( *nb_bits ) += nb; - - if ( core_brate == SID_2k40 ) - { - stereo_dft_enc_sid_coh( hBstr, hCPE->hStereoCng->mem_cohBand, hStereoDft->nbands, nb_bits, cohBand ); - } - - - return; -} -#endif - -/*------------------------------------------------------------------------- - * stereo_dft_enc_compute_prm() - * - * Compute stereo parameters: IPD and SIDE_GAIN - * SIDE_GAIN: Interchannel Level Difference - * IPD: Interchannel Phase Difference: angle(L)-angle(R) = acos(/(|L|.|R|)) or atan2(Img(L.R*)/Re(L.R*)) - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED +/*------------------------------------------------------------------------- + * stereo_dft_enc_compute_prm() + * + * Compute stereo parameters: IPD and SIDE_GAIN + * SIDE_GAIN: Interchannel Level Difference + * IPD: Interchannel Phase Difference: angle(L)-angle(R) = acos(/(|L|.|R|)) or atan2(Img(L.R*)/Re(L.R*)) + *------------------------------------------------------------------------*/ static void stereo_dft_enc_compute_prm_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, @@ -6113,477 +4045,51 @@ static void stereo_dft_enc_compute_prm_fx( return; } -#else -static void stereo_dft_enc_compute_prm( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, - float *DFT_L, - float *DFT_R, - int16_t k_offset, - int16_t flag_quant, - const int16_t sp_aud_decision0, - const int16_t vad_flag, - float *bin_nrgL, - float *bin_nrgR, - float *dot_prod_nrg_ratio ) -{ - int16_t b, i; - int16_t b2; - float *pDFT_L, *pDFT_R; - float sum_nrg_L, sum_nrg_R; - float dot_prod_real, dot_prod_img; - float sum_nrg_L2, sum_nrg_R2; - float dot_prod_real2, dot_prod_img2; - float *pPredGain; - float *pSideGain; - float sum_energy_L, sum_energy_R; - float g, c; - float abs_L_R; - float abs_L_R2; - float gain_IPD; - float sub_nrg_DMX[STEREO_DFT_BAND_MAX]; - float sub_nrg_DMX2; - float sub_nrg_L[STEREO_DFT_BAND_MAX]; - float sub_nrg_R[STEREO_DFT_BAND_MAX]; - float diff_ipd; - float *pNrgL, *pNrgR; - float reg; - float *pgIpd, sum_dot_prod_real, sum_dot_prod_img; - float sum_past_nrgL, sum_past_nrgL2; - float sum_past_nrgR, sum_past_nrgR2; - float sum_past_dpr, sum_past_dpr2; - float sum_past_dpi, sum_past_dpi2; - float sum_past_dot_prod_abs, sum_past_dot_prod_abs2; - float sum_past_nrg_dmx; - int16_t pos; - float pIpd[STEREO_DFT_BAND_MAX]; - float ipd_smooth[STEREO_DFT_BAND_MAX]; - float ipd_mean_change; - - /*------------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - sum_past_dot_prod_abs2 = 0.0f; - pos = hStereoDft->nrg_past_pos; - - set_f( sub_nrg_DMX, 0, STEREO_DFT_BAND_MAX ); - set_f( sub_nrg_L, 0, STEREO_DFT_BAND_MAX ); - set_f( sub_nrg_R, 0, STEREO_DFT_BAND_MAX ); - pSideGain = hStereoDft->side_gain + k_offset * STEREO_DFT_BAND_MAX; - pgIpd = hStereoDft->gipd + k_offset; - pPredGain = hStereoDft->res_pred_gain + k_offset * STEREO_DFT_BAND_MAX; - gain_IPD = EPSILON; - sum_energy_L = EPSILON; /* Set the accumulations for the no IPD Calculation */ - sum_energy_R = EPSILON; - sum_dot_prod_real = EPSILON; - sum_dot_prod_img = EPSILON; - sub_nrg_DMX2 = 0.f; - - /*------------------------------------------------------------------* - * Band-wise processing - *-----------------------------------------------------------------*/ +/*---------------------------------------------------------------------* + * side_gain_mode_decision() + * + * + *---------------------------------------------------------------------*/ +static void side_gain_mode_decision_fx( + STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ + Word16 encoded_ind_GR[], + const Word16 sp_aud_decision0, /* i : Speech/audio decision 0 */ + const Word32 last_core_brate /* i : Last core bitrate */ +) +{ + Word16 try_diff, nb_diff, no_GR_ord, n_bits, i; - b2 = 0; - for ( b = 0; b < hStereoDft->nbands; b++ ) + try_diff = sp_aud_decision0; + move16(); + IF( try_diff ) { - pPredGain[b] = 1.f; - sum_nrg_L = EPSILON; - sum_nrg_R = EPSILON; - dot_prod_real = EPSILON; - dot_prod_img = EPSILON; - sum_past_nrgL = 0; - sum_past_nrgR = 0; - sum_past_dpr = 0; - sum_past_dpi = 0; - - while ( hStereoDft->band_limits_dmx[b2] < hStereoDft->band_limits[b + 1] ) + IF( EQ_16( hStereoDft->side_gain_counter, STEREO_DFT_FEC_THRESHOLD ) ) { - pDFT_L = DFT_L; - pDFT_R = DFT_R; - pNrgL = bin_nrgL; - pNrgR = bin_nrgR; + try_diff = 0; + move16(); + hStereoDft->side_gain_counter = 0; + move16(); + } + } + ELSE + { + hStereoDft->side_gain_counter = 0; + move16(); + } - sum_nrg_L2 = EPSILON; - sum_nrg_R2 = EPSILON; - dot_prod_real2 = EPSILON; - dot_prod_img2 = EPSILON; - - for ( i = hStereoDft->band_limits_dmx[b2]; i < hStereoDft->band_limits_dmx[b2 + 1]; i++ ) - { - sum_nrg_L2 += pNrgL[i]; - sum_nrg_R2 += pNrgR[i]; - - /* compute dot product*/ - dot_prod_real2 += pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; - dot_prod_img2 += pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; - } - abs_L_R2 = sqrtf( dot_prod_real2 * dot_prod_real2 + dot_prod_img2 * dot_prod_img2 ); - sub_nrg_DMX2 = sum_nrg_L2 + sum_nrg_R2 + 2 * abs_L_R2; - - if ( b2 < hStereoDft->gipd_band_max ) - { - hStereoDft->dot_prod_real_smooth[b2] = 0.5f * hStereoDft->dot_prod_real_smooth[b2] + 0.5f * dot_prod_real2; - hStereoDft->dot_prod_img_smooth[b2] = 0.5f * hStereoDft->dot_prod_img_smooth[b2] + 0.5f * dot_prod_img2; - pIpd[b2] = (float) atan2f( hStereoDft->dot_prod_img_smooth[b2], hStereoDft->dot_prod_real_smooth[b2] ); - - ipd_smooth[b2] = stereo_dft_calc_mean_bipd( &pIpd[b2], hStereoDft->ipd_buf[b2] ); - - gain_IPD += ( sum_nrg_L2 + sum_nrg_R2 + 2 * dot_prod_real2 ) / sub_nrg_DMX2 / hStereoDft->gipd_band_max; - } - - sum_past_nrgL2 = EPSILON; - sum_past_nrgR2 = EPSILON; - sum_past_dpr2 = EPSILON; - sum_past_dpi2 = EPSILON; - if ( ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH && b2 < STEREO_DFT_NRG_PAST_MAX_BAND ) || - ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW && b2 < 2 * STEREO_DFT_NRG_PAST_MAX_BAND_LB ) ) - { - hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = sum_nrg_L2; - hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = sum_nrg_R2; - hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = dot_prod_real2; - hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = dot_prod_img2; - - for ( i = 0; i < STEREO_DFT_NRG_PAST_LEN; i++ ) - { - sum_past_nrgL2 += hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + i]; - sum_past_nrgR2 += hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + i]; - sum_past_dpr2 += hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + i]; - sum_past_dpi2 += hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + i]; - } - - if ( hStereoDft->attackPresent ) - { - /* omit transient frames from past part of parameter estimation in following frames */ - int16_t prev_pos = ( pos + STEREO_DFT_NRG_PAST_LEN - 1 ) % STEREO_DFT_NRG_PAST_LEN; - hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_nrgL[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; - hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_nrgR[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; - hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_dot_prod_real[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; - hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + pos] = hStereoDft->past_dot_prod_imag[b2 * STEREO_DFT_NRG_PAST_LEN + prev_pos]; - } - - sum_past_dot_prod_abs2 = sqrtf( sum_past_dpr2 * sum_past_dpr2 + sum_past_dpi2 * sum_past_dpi2 ); - dot_prod_nrg_ratio[b2] = sum_past_dot_prod_abs2 / ( sum_past_nrgL2 + sum_past_nrgR2 + EPSILON ); - } - else - { - sum_past_nrgL2 += sum_nrg_L2; - sum_past_nrgR2 += sum_nrg_R2; - dot_prod_nrg_ratio[b2] = sqrtf( dot_prod_real2 * dot_prod_real2 + dot_prod_img2 * dot_prod_img2 ); - if ( b2 == 2 * STEREO_DFT_NRG_PAST_MAX_BAND_LB ) /* hStereoDft->band_res[k_offset] == 2 */ - { - dot_prod_nrg_ratio[b2] /= ( sum_nrg_L2 + sum_nrg_R2 + EPSILON ); - } - } - sum_nrg_L += sum_nrg_L2; - sum_nrg_R += sum_nrg_R2; - dot_prod_real += dot_prod_real2; - dot_prod_img += dot_prod_img2; - - sum_past_nrgL += sum_past_nrgL2; - sum_past_nrgR += sum_past_nrgR2; - sum_past_dpr += sum_past_dpr2; - sum_past_dpi += sum_past_dpi2; - - b2++; - } - sum_energy_L += sum_nrg_L; /* Energies of the individual Band for Left and Right */ - sum_energy_R += sum_nrg_R; - sum_dot_prod_real += dot_prod_real; - sum_dot_prod_img += dot_prod_img; - - /* compute side and residual gains over two frames */ - abs_L_R = sqrtf( dot_prod_real * dot_prod_real + dot_prod_img * dot_prod_img ); - - if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW && b < 4 ) - { - sum_past_dot_prod_abs = sqrtf( sum_past_dpr * sum_past_dpr + sum_past_dpi * sum_past_dpi ); - } - else if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_HIGH && b < 9 ) - { - sum_past_dot_prod_abs = sum_past_dot_prod_abs2; - } - else - { - sum_past_dot_prod_abs = abs_L_R; - } - - c = sqrtf( sum_past_nrgL / sum_past_nrgR ); - sum_past_nrg_dmx = sum_past_nrgL + sum_past_nrgR + 2 * sum_past_dot_prod_abs; - sub_nrg_DMX[b] = sum_nrg_L + sum_nrg_R + 2 * abs_L_R; - - sub_nrg_L[b] = sum_nrg_L; - sub_nrg_R[b] = sum_nrg_R; - - if ( ( hStereoDft->res_pred_mode[k_offset] && b >= hStereoDft->res_pred_band_min ) || ( b < hStereoDft->res_cod_band_max ) ) - { - g = ( sum_past_nrgL - sum_past_nrgR ) / ( sum_past_nrg_dmx ); - pSideGain[b] = g; - } - else - { - g = 0.0f; /* to avoid compilation warning */ - pSideGain[b] = ( c - 1 ) / ( c + 1 ); - } - - if ( hStereoDft->res_pred_mode[k_offset] && b >= hStereoDft->res_pred_band_min && !( hStereoDft->attackPresent ) ) - { - /*(1-g)^2*L*L' + (1+g)^2*R*R' - 2(1-g^2)*abs(L*R')*/ - pPredGain[b] = max( 0, ( ( 1 - g ) * sum_past_nrgL + ( 1 + g ) * sum_past_nrgR - 2 * sum_past_dot_prod_abs ) ); - - /*Normalized with energy of DMX*/ - - /*Regularized gain computation by adding a coherent low energy contribution->avoid singularity for very low energy signals */ - - reg = ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) * sqrtf( STEREO_DFT_N_32k_ENC ); - reg *= reg; - - pPredGain[b] = sqrtf( pPredGain[b] / ( reg + sum_past_nrg_dmx ) ); - - if ( hStereoDft->hItd->deltaItd[k_offset] != 0 ) - { - float gain_offset, conversion_factor; - int16_t dItd32; - - /* factor for converting deltaItd to 32kHz */ - conversion_factor = 1.f; - if ( hStereoDft->NFFT == STEREO_DFT_N_16k_ENC ) - { - conversion_factor = 2.f; - } - else if ( hStereoDft->NFFT == STEREO_DFT_N_MAX_ENC ) - { - conversion_factor = 2.f / 3; - } - dItd32 = (int16_t) floorf( conversion_factor * hStereoDft->hItd->deltaItd[k_offset] + 0.5f ); - - gain_offset = stereo_dft_gain_offset( c, dItd32 ); - pPredGain[b] = max( 0, pPredGain[b] - gain_offset ); - } - - /*Limiter for active speech*/ - if ( sp_aud_decision0 == 0 && vad_flag ) - { - /*Avoid jump of residual prediction gain when ITD is changing*/ - if ( hStereoDft->hItd->deltaItd[k_offset] != hStereoDft->hItd->deltaItd[0] ) - { - pPredGain[b] = min( hStereoDft->res_pred_gain_f[b], pPredGain[b] ); - } - - /*Limiter*/ - hStereoDft->res_pred_gain_f[b] = 0.9f * hStereoDft->res_pred_gain_f[b] + 0.1f * pPredGain[b]; - pPredGain[b] = min( 1.1f * hStereoDft->res_pred_gain_f[b], pPredGain[b] ); - } - else - { - hStereoDft->res_pred_gain_f[b] = pPredGain[b]; - } - } - else - { - pPredGain[b] = 0.f; - } - - - if ( b2 == hStereoDft->gipd_band_max ) - { - ipd_mean_change = stereo_dft_calc_mean_ipd_change( pIpd, ipd_smooth, hStereoDft->gipd_band_max ); - hStereoDft->sum_dot_prod_real = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_real + hStereoDft->sfm * sum_dot_prod_real; - hStereoDft->sum_dot_prod_img = ( 1.f - hStereoDft->sfm ) * hStereoDft->sum_dot_prod_img + hStereoDft->sfm * sum_dot_prod_img; - - pgIpd[0] = (float) atan2f( hStereoDft->sum_dot_prod_img, hStereoDft->sum_dot_prod_real ); - - stereo_dft_gipd_stabilization( &pgIpd[0], hStereoDft->prev_gipd, ipd_mean_change ); - hStereoDft->prev_gipd = pgIpd[0]; - } - } - - hStereoDft->nrg_past_pos = ( pos + 1 ) % STEREO_DFT_NRG_PAST_LEN; - - - /*------------------------------------------------------------------* - * Compute IPDs - *-----------------------------------------------------------------*/ - - stereo_dft_enc_get_nipd_flag( hStereoDft, sp_aud_decision0, gain_IPD ); - - - if ( flag_quant ) - { - if ( hStereoDft->no_ipd_flag == 0 ) - { - hStereoDft->sid_gipd = *pgIpd; - stereo_dft_quantize_ipd( pgIpd, pgIpd, &( hStereoDft->gipd_index ), STEREO_DFT_GIPD_NBITS ); - } - else - { - pgIpd[0] = 0; - } - } - diff_ipd = pgIpd[0] - pgIpd[-1]; - - if ( diff_ipd < -EVS_PI ) - { - pgIpd[0] += PI2; - } - else if ( diff_ipd > EVS_PI ) - { - pgIpd[0] -= PI2; - } - - if ( !hStereoDft->attackPresent ) - { - if ( hStereoDft->wasTransient ) - { - pgIpd[0] = 0.8f * pgIpd[0] + 0.2f * pgIpd[-1]; - } - else - { - pgIpd[0] = 0.5f * pgIpd[0] + 0.5f * pgIpd[-1]; - } - } - - c = sqrtf( sum_energy_L / sum_energy_R ); - g = fabsf( ( c - 1 ) / ( c + 1 ) ); - if ( g > 0.8f ) - { - g = max( 0.f, -10.f * g + 9.0f ); - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - pPredGain[b] *= g; - } - } - - if ( hStereoDft->hConfig->band_res == STEREO_DFT_BAND_RES_LOW ) - { - hStereoDft->reverb_flag = 1; - } - else - { - stereo_dft_enc_get_reverb_flag( hStereoDft, pPredGain, sub_nrg_DMX, sub_nrg_L, sub_nrg_R, k_offset, bin_nrgL, bin_nrgR ); - } - - - /*------------------------------------------------------------------* - * Compute Side gains - *-----------------------------------------------------------------*/ - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - hStereoDft->sidSideGain[b] = *( pSideGain + b ); - - /* Quantization */ - if ( flag_quant ) - { - stereo_dft_quantize_res_gains( pSideGain + b, pPredGain + b, pSideGain + b, pPredGain + b, hStereoDft->side_gain_index_EC + b, hStereoDft->res_pred_index_EC + b ); - } - - - if ( !hStereoDft->attackPresent ) - { - if ( b < hStereoDft->res_cod_band_max ) - { - pSideGain[b] = dft_res_cod_alpha[b] * pSideGain[b] + ( 1 - dft_res_cod_alpha[b] ) * pSideGain[b - STEREO_DFT_BAND_MAX]; - } - } - } - - /*------------------------------------------------------------------* - * simulate prediction of parameters at the decoder - *-----------------------------------------------------------------*/ - - if ( hStereoDft->reverb_flag ) - { - int16_t ipred, bpred0, bpred1, max_dev, sum_abs_dev; - - ipred = 0; - max_dev = 0; - sum_abs_dev = 0; - - /* parameters for bred0 <= b < bpred1 are estimated from parameters of - the remaining bands with ptrans0 <= b < btrans1. */ - bpred1 = ( hStereoDft->nbands > 10 ) ? STEREO_DFT_RES_PRED_BAND_MAX - 2 : hStereoDft->nbands; - if ( hStereoDft->band_res[k_offset] == STEREO_DFT_BAND_RES_LOW ) - { - bpred1 = min( bpred1, 6 ); - } - bpred0 = bpred1 - STEREO_DFT_RES_PRED_BAND_MIN_CONST; - - /* get estimate (currently the maximal index) */ - for ( b = hStereoDft->res_pred_band_min; b < bpred0; b++ ) - { - ipred = max( ipred, hStereoDft->res_pred_index_EC[b] ); - } - - /* check prediction error */ - for ( b = bpred0; b < bpred1; b++ ) - { - max_dev = (int16_t) max( max_dev, abs( ipred - hStereoDft->res_pred_index_EC[b] ) ); - sum_abs_dev += (int16_t) abs( ipred - hStereoDft->res_pred_index_EC[b] ); - } - - hStereoDft->reverb_flag = ( max_dev <= 1 && sum_abs_dev <= 2 ); - - if ( hStereoDft->reverb_flag && hStereoDft->nbands > 10 ) /*SWB and FB*/ - { - for ( b = STEREO_DFT_RES_PRED_BAND_MAX - 1; b >= STEREO_DFT_RES_PRED_BAND_MAX - 2; b-- ) - { - hStereoDft->res_pred_index_EC[b - STEREO_DFT_RES_PRED_BAND_MIN_CONST] = hStereoDft->res_pred_index_EC[b]; - } - } - } - - assert( hStereoDft->nbands <= 13 ); /* always use band_limits_erb4 and not band_limits_erb2 */ - - return; -} -#endif - -/*---------------------------------------------------------------------* - * side_gain_mode_decision() - * - * - *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static void side_gain_mode_decision_fx( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ - Word16 encoded_ind_GR[], - const Word16 sp_aud_decision0, /* i : Speech/audio decision 0 */ - const Word32 last_core_brate /* i : Last core bitrate */ -) -{ - Word16 try_diff, nb_diff, no_GR_ord, n_bits, i; - - try_diff = sp_aud_decision0; - move16(); - IF( try_diff ) - { - IF( EQ_16( hStereoDft->side_gain_counter, STEREO_DFT_FEC_THRESHOLD ) ) - { - try_diff = 0; - move16(); - hStereoDft->side_gain_counter = 0; - move16(); - } - } - ELSE - { - hStereoDft->side_gain_counter = 0; - move16(); - } - - /* If last frame SID/NO_DATA do not use differential coding */ - if ( LE_32( last_core_brate, SID_2k40 ) ) - { - try_diff = 0; - move16(); - } - no_GR_ord = 3; - move16(); - hStereoDft->side_gain_flag_2 = adapt_GR_ief_fx( hStereoDft->side_gain_index_EC, hStereoDft->side_gain_index_ECDiff, hStereoDft->side_gain_index_ECprevious, - hStereoDft->nbands, NO_SYMB_GR_SIDE_G, &n_bits, encoded_ind_GR, dft_maps_sg, no_GR_ord, &nb_diff, - hStereoDft->side_gain_counter, &hStereoDft->side_gain_bitdiff_lp_fx, &hStereoDft->q_side_gain_bitdiff_lp, try_diff ); - move16(); + /* If last frame SID/NO_DATA do not use differential coding */ + if ( LE_32( last_core_brate, SID_2k40 ) ) + { + try_diff = 0; + move16(); + } + no_GR_ord = 3; + move16(); + hStereoDft->side_gain_flag_2 = adapt_GR_ief_fx( hStereoDft->side_gain_index_EC, hStereoDft->side_gain_index_ECDiff, hStereoDft->side_gain_index_ECprevious, + hStereoDft->nbands, NO_SYMB_GR_SIDE_G, &n_bits, encoded_ind_GR, dft_maps_sg, no_GR_ord, &nb_diff, + hStereoDft->side_gain_counter, &hStereoDft->side_gain_bitdiff_lp_fx, &hStereoDft->q_side_gain_bitdiff_lp, try_diff ); + move16(); FOR( i = 0; i < hStereoDft->nbands; i++ ) { @@ -6613,268 +4119,120 @@ static void side_gain_mode_decision_fx( hStereoDft->side_gain_flag_1 = 0; move16(); hStereoDft->side_gain_counter = 0; - move16(); - } - } - - return; -} -#else -static void side_gain_mode_decision( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ - int16_t encoded_ind_GR[], - const int16_t sp_aud_decision0, /* i : Speech/audio decision 0 */ - const int32_t last_core_brate /* i : Last core bitrate */ -) -{ - int16_t try_diff, nb_diff, no_GR_ord, n_bits, i; - - try_diff = sp_aud_decision0; - if ( try_diff ) - { - if ( hStereoDft->side_gain_counter == STEREO_DFT_FEC_THRESHOLD ) - { - try_diff = 0; - hStereoDft->side_gain_counter = 0; - } - } - else - { - hStereoDft->side_gain_counter = 0; - } - - /* If last frame SID/NO_DATA do not use differential coding */ - if ( last_core_brate <= SID_2k40 ) - { - try_diff = 0; - } - no_GR_ord = 3; - - hStereoDft->side_gain_flag_2 = adapt_GR_ief( hStereoDft->side_gain_index_EC, hStereoDft->side_gain_index_ECDiff, hStereoDft->side_gain_index_ECprevious, - hStereoDft->nbands, NO_SYMB_GR_SIDE_G, &n_bits, encoded_ind_GR, dft_maps_sg, no_GR_ord, &nb_diff, - hStereoDft->side_gain_counter, &hStereoDft->side_gain_bitdiff_lp, try_diff ); - - for ( i = 0; i < hStereoDft->nbands; i++ ) - { - hStereoDft->side_gain_index_ECprevious[i] = hStereoDft->side_gain_index_EC[i]; - } - - if ( n_bits > ( hStereoDft->nbands * STEREO_DFT_SIDE_GAIN_NBITS - 1 ) ) - { - /* use fixed rate */ - hStereoDft->side_gain_flag_1 = 3; - hStereoDft->side_gain_counter = 0; - } - else - { - if ( hStereoDft->side_gain_flag_2 >= no_GR_ord ) - { - hStereoDft->side_gain_flag_1 = 2; - hStereoDft->side_gain_counter += 1; - } - else - { - hStereoDft->side_gain_flag_1 = 0; - hStereoDft->side_gain_counter = 0; - } - } - - return; -} -#endif - -/*---------------------------------------------------------------------* - * res_pred_gain_mode_decision() - * - * - *---------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static void res_pred_gain_mode_decision_fx( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ - Word16 encoded_ind_pred_GR[], - const Word16 k_offset, /* i : Parameter offset */ - const Word32 last_core_brate /* i : Last core bitrate */ -) -{ - Word16 nb_diff, try_diff, no_GR_ord, i, n_bits; - Word16 nbands; - - /* Residual Prediction Gain */ - IF( hStereoDft->res_pred_mode[k_offset] ) - { - IF( hStereoDft->attackPresent == 0 ) - { - nbands = s_min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); - - if ( hStereoDft->reverb_flag ) - { - nbands = sub( nbands, STEREO_DFT_RES_PRED_BAND_MIN_CONST ); - } - - try_diff = 1; - move16(); - IF( EQ_16( hStereoDft->res_pred_counter, STEREO_DFT_FEC_THRESHOLD ) ) - { - try_diff = 0; - move16(); - hStereoDft->res_pred_counter = 0; - move16(); - } - - /* If last frame SID/NO_DATA do not use differential coding */ - IF( LE_32( last_core_brate, SID_2k40 ) ) - { - try_diff = 0; - move16(); - } - - no_GR_ord = 2; - move16(); - - hStereoDft->res_pred_flag_2 = adapt_GR_rpg1_ief( &hStereoDft->res_pred_index_EC[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECDiff[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECprevious[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, NO_SYMB_GR_PRED_G, &n_bits, encoded_ind_pred_GR, dft_maps_rpg, &nb_diff, no_GR_ord, try_diff ); - move16(); - - FOR( i = 0; i < nbands; i++ ) - { - hStereoDft->res_pred_index_ECprevious[i] = hStereoDft->res_pred_index_EC[i]; - move16(); - } - - FOR( ; i < hStereoDft->nbands; i++ ) - { - hStereoDft->res_pred_index_ECprevious[i] = 0; - move16(); - } - - IF( GT_16( n_bits, sub( imult1616( sub( nbands, hStereoDft->res_pred_band_min ), STEREO_DFT_RES_GAINS_BITS ), 1 ) ) ) - { - hStereoDft->res_pred_flag_1 = 3; - move16(); - hStereoDft->res_pred_counter = 0; - move16(); - } - ELSE - { - IF( GT_16( hStereoDft->res_pred_flag_2, 1 ) ) - { - /* differential coding */ - hStereoDft->res_pred_flag_1 = 2; - move16(); - hStereoDft->res_pred_counter = add( hStereoDft->res_pred_counter, 1 ); - move16(); - } - ELSE - { - hStereoDft->res_pred_counter = 0; - move16(); - hStereoDft->res_pred_flag_1 = 0; - move16(); - } - } - } - ELSE - { - set16_fx( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); - } - } - ELSE - { - set16_fx( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); + move16(); + } } return; } -#else -static void res_pred_gain_mode_decision( + +/*---------------------------------------------------------------------* + * res_pred_gain_mode_decision() + * + * + *---------------------------------------------------------------------*/ + +static void res_pred_gain_mode_decision_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : DFT stereo encoder handle */ - int16_t encoded_ind_pred_GR[], - const int16_t k_offset, /* i : Parameter offset */ - const int32_t last_core_brate /* i : Last core bitrate */ + Word16 encoded_ind_pred_GR[], + const Word16 k_offset, /* i : Parameter offset */ + const Word32 last_core_brate /* i : Last core bitrate */ ) { - int16_t nb_diff, try_diff, no_GR_ord, i, n_bits; - int16_t nbands; + Word16 nb_diff, try_diff, no_GR_ord, i, n_bits; + Word16 nbands; /* Residual Prediction Gain */ - if ( hStereoDft->res_pred_mode[k_offset] ) + IF( hStereoDft->res_pred_mode[k_offset] ) { - if ( hStereoDft->attackPresent == 0 ) + IF( hStereoDft->attackPresent == 0 ) { - nbands = min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); + nbands = s_min( hStereoDft->nbands, STEREO_DFT_RES_PRED_BAND_MAX ); if ( hStereoDft->reverb_flag ) { - nbands -= STEREO_DFT_RES_PRED_BAND_MIN_CONST; + nbands = sub( nbands, STEREO_DFT_RES_PRED_BAND_MIN_CONST ); } try_diff = 1; - if ( hStereoDft->res_pred_counter == STEREO_DFT_FEC_THRESHOLD ) + move16(); + IF( EQ_16( hStereoDft->res_pred_counter, STEREO_DFT_FEC_THRESHOLD ) ) { try_diff = 0; + move16(); hStereoDft->res_pred_counter = 0; + move16(); } /* If last frame SID/NO_DATA do not use differential coding */ - if ( last_core_brate <= SID_2k40 ) + IF( LE_32( last_core_brate, SID_2k40 ) ) { try_diff = 0; + move16(); } no_GR_ord = 2; + move16(); hStereoDft->res_pred_flag_2 = adapt_GR_rpg1_ief( &hStereoDft->res_pred_index_EC[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECDiff[hStereoDft->res_pred_band_min], &hStereoDft->res_pred_index_ECprevious[hStereoDft->res_pred_band_min], nbands - hStereoDft->res_pred_band_min, NO_SYMB_GR_PRED_G, &n_bits, encoded_ind_pred_GR, dft_maps_rpg, &nb_diff, no_GR_ord, try_diff ); + move16(); - for ( i = 0; i < nbands; i++ ) + FOR( i = 0; i < nbands; i++ ) { hStereoDft->res_pred_index_ECprevious[i] = hStereoDft->res_pred_index_EC[i]; + move16(); } - for ( ; i < hStereoDft->nbands; i++ ) + FOR( ; i < hStereoDft->nbands; i++ ) { hStereoDft->res_pred_index_ECprevious[i] = 0; + move16(); } - if ( n_bits > ( nbands - hStereoDft->res_pred_band_min ) * STEREO_DFT_RES_GAINS_BITS - 1 ) + IF( GT_16( n_bits, sub( imult1616( sub( nbands, hStereoDft->res_pred_band_min ), STEREO_DFT_RES_GAINS_BITS ), 1 ) ) ) { hStereoDft->res_pred_flag_1 = 3; + move16(); hStereoDft->res_pred_counter = 0; + move16(); } - else + ELSE { - if ( hStereoDft->res_pred_flag_2 > 1 ) + IF( GT_16( hStereoDft->res_pred_flag_2, 1 ) ) { /* differential coding */ hStereoDft->res_pred_flag_1 = 2; - hStereoDft->res_pred_counter += 1; + move16(); + hStereoDft->res_pred_counter = add( hStereoDft->res_pred_counter, 1 ); + move16(); } - else + ELSE { hStereoDft->res_pred_counter = 0; + move16(); hStereoDft->res_pred_flag_1 = 0; + move16(); } } } - else + ELSE { - set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); + set16_fx( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); } } - else + ELSE { - set_s( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); + set16_fx( hStereoDft->res_pred_index_ECprevious, 0, hStereoDft->nbands ); } return; } -#endif /*------------------------------------------------------------------------- * stereo_dft_calc_mean_bipd() * * Calculate mean of previous bandwise IPD values *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ipd_table1[STEREO_DFT_IPD_BUF_LEN] = { 0, 16384, 21845, 24576, 26214 }; //(i / (float)(i + 1)) static Word16 ipd_table2[STEREO_DFT_IPD_BUF_LEN] = { MAX_16, 16384, 10923, 8192, 6554 }; //(1 / (float)(i + 1)) static Word32 stereo_dft_calc_mean_bipd_fx( @@ -6935,68 +4293,12 @@ static Word32 stereo_dft_calc_mean_bipd_fx( return ipd_smooth; } -#else -static float stereo_dft_calc_mean_bipd( - float *pIpd, /* i : current bandwise IPD */ - float ipd_buf[STEREO_DFT_IPD_BUF_LEN] /* i/o: previous bandwise IPDs */ -) -{ - int16_t i; - float ipd_smooth; - float diff_to_last; - - assert( *pIpd <= EVS_PI && *pIpd >= -EVS_PI ); - - ipd_smooth = 0.f; - for ( i = 0; i < STEREO_DFT_IPD_BUF_LEN; i++ ) - { - if ( i == 0 ) - { - diff_to_last = ipd_buf[0]; - } - else - { - diff_to_last = fabsf( ipd_buf[i] - ipd_smooth ); - } - if ( diff_to_last > EVS_PI ) - { - if ( ipd_buf[i] > 0 ) - { - ipd_buf[i] -= 2 * EVS_PI; - } - else - { - ipd_buf[i] += 2 * EVS_PI; - } - } - ipd_smooth = ( i / (float) ( i + 1 ) ) * ipd_smooth + ( 1 / (float) ( i + 1 ) ) * ipd_buf[i]; - if ( ipd_smooth < -EVS_PI ) - { - ipd_smooth += 2 * EVS_PI; - } - else if ( ipd_smooth > EVS_PI ) - { - ipd_smooth -= 2 * EVS_PI; - } - } - - for ( i = 0; i < STEREO_DFT_IPD_BUF_LEN - 1; i++ ) - { - ipd_buf[i] = ipd_buf[i + 1]; - } - ipd_buf[STEREO_DFT_IPD_BUF_LEN - 1] = *pIpd; - - - return ipd_smooth; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_calc_mean_ipd_change() * * Calculate mean IPD change over all bands *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 stereo_dft_calc_mean_ipd_change_fx( Word32 *pIpd, /* i : bandwise IPDs Q13 */ Word32 *ipd_smooth, /* i : mean of previous bandwise IPDs Q13 */ @@ -7028,40 +4330,12 @@ static Word32 stereo_dft_calc_mean_ipd_change_fx( return ipd_mean_change; } -#else -static float stereo_dft_calc_mean_ipd_change( - float *pIpd, /* i : bandwise IPDs */ - float *ipd_smooth, /* i : mean of previous bandwise IPDs */ - int16_t gipd_band_max /* i : number of IPD bands */ -) -{ - int16_t b; - float ipd_mean_change; - float ipd_change[STEREO_DFT_BAND_MAX]; - - ipd_mean_change = 0.f; - for ( b = 0; b < gipd_band_max; b++ ) - { - ipd_change[b] = fabsf( pIpd[b] - ipd_smooth[b] ); - if ( ipd_change[b] > EVS_PI ) - { - ipd_change[b] = 2 * EVS_PI - ipd_change[b]; - } - ipd_mean_change += ipd_change[b]; - } - ipd_mean_change /= gipd_band_max; - - - return ipd_mean_change; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_gipd_stabilization() * * stabilize global IPD based on stability of bandwise IPDs *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_gipd_stabilization_fx( Word32 *pgIpd, /* i/o: global IPD to be stabilized Q13 */ Word32 prev_gipd, /* i : previous global IPD Q13 */ @@ -7124,71 +4398,12 @@ static void stereo_dft_gipd_stabilization_fx( } return; } -#else - -static void stereo_dft_gipd_stabilization( - float *pgIpd, /* i/o: global IPD to be stabilized */ - float prev_gipd, /* i : previous global IPD */ - float ipd_mean_change /* i : mean of previous bandwise IPDs */ -) -{ - float diff_gipd; - - if ( ipd_mean_change < 0.3f ) - { - *pgIpd = prev_gipd; - } - else - { - diff_gipd = fabsf( *pgIpd - prev_gipd ); - if ( diff_gipd > EVS_PI ) - { - diff_gipd = 2 * EVS_PI - diff_gipd; - } - if ( diff_gipd > ipd_mean_change ) - { - if ( *pgIpd > prev_gipd ) - { - if ( *pgIpd - prev_gipd < EVS_PI ) - { - *pgIpd = prev_gipd + ipd_mean_change; - } - else - { - *pgIpd = prev_gipd - ipd_mean_change; - if ( *pgIpd < -EVS_PI ) - { - *pgIpd += 2 * EVS_PI; - } - } - } - else - { - if ( prev_gipd - *pgIpd < EVS_PI ) - { - *pgIpd = prev_gipd - ipd_mean_change; - } - else - { - *pgIpd = prev_gipd + ipd_mean_change; - if ( *pgIpd > EVS_PI ) - { - *pgIpd -= 2 * EVS_PI; - } - } - } - } - } - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_get_nipd_flag() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_get_nipd_flag_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, const Word16 sp_aud_decision0, @@ -7231,46 +4446,12 @@ static void stereo_dft_enc_get_nipd_flag_fx( return; } -#else -static void stereo_dft_enc_get_nipd_flag( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, - const int16_t sp_aud_decision0, - const float gainIPD ) -{ - hStereoDft->gainIPD_sm = 0.5f * hStereoDft->gainIPD_sm + 0.5f * gainIPD; /* to decide on use of no IPD */ - - hStereoDft->no_ipd_flag = 0; /* Set flag initially to zero - subband IPD */ - - if ( hStereoDft->gainIPD_sm >= 0.75f || ( hStereoDft->prev_no_ipd_flag && ( sp_aud_decision0 || hStereoDft->voicing_lt > 0.98f ) ) ) - { - hStereoDft->no_ipd_flag = 1; /* Set the flag */ - } - - - /* hangover between the group IPD and subband IPD */ - if ( hStereoDft->prev_no_ipd_flag != hStereoDft->no_ipd_flag && hStereoDft->no_ipd_cnt < 5 ) - { - hStereoDft->no_ipd_flag = hStereoDft->prev_no_ipd_flag; - hStereoDft->no_ipd_cnt++; - } - else - { - hStereoDft->no_ipd_cnt = 0; - } - - hStereoDft->prev_no_ipd_flag = hStereoDft->no_ipd_flag; /* Save the no IPD flag for the next frame */ - - - return; -} -#endif /*--------------------------------------------------------------- * stereo_dft_enc_get_reverb_flag() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_get_reverb_flag_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, Word32 *pPredGain, // Q31 @@ -7587,165 +4768,11 @@ static void stereo_dft_enc_get_reverb_flag_fx( return; } -#else -static void stereo_dft_enc_get_reverb_flag( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, - float *pPredGain, - float *sub_nrg_DMX, - const float *sub_nrg_L, - const float *sub_nrg_R, - const int16_t k_offset, - const float *bin_nrgL, - const float *bin_nrgR ) -{ - int16_t i, b, b1, index_min, nbands; - float nrg_DMX_min; - float norm_r, norm_l, norm_dmx; - float diff_l_l, diff_r_l, diff_l_h, diff_r_h; - float ener_l, ener_r, ener_dmx; - float nrg_DMX_max_avrg, nrg_DMX_min_avrg; - float fac; - - hStereoDft->reverb_flag = 0; - if ( hStereoDft->res_pred_mode[k_offset] && hStereoDft->hConfig->res_cod_mode == STEREO_DFT_RES_COD_OFF ) - { - diff_r_l = EPSILON; - diff_l_l = EPSILON; - diff_r_h = EPSILON; - diff_l_h = EPSILON; - - for ( b = 0; b <= min( hStereoDft->nbands, 6 ); b++ ) /* choose the subbands used for stereo filling */ - { - norm_dmx = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_DMX[b] ); - norm_l = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_L[b] ); - norm_r = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_R[b] ); - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) /* normalization on each subbands */ - { - ener_l = bin_nrgL[i]; - ener_r = bin_nrgR[i]; - ener_dmx = ( ener_l + ener_r + 2 * sqrtf( ener_l * ener_r ) ) * norm_dmx; /*approximation of nrg of DMX per line*/ - ener_l *= norm_l; - ener_r *= norm_r; - - diff_l_l += fabsf( ener_l - ener_dmx ); - diff_r_l += fabsf( ener_r - ener_dmx ); - } - } - if ( hStereoDft->nbands <= 10 ) - { - for ( ; b < min( hStereoDft->nbands, 10 ); b++ ) /* choose the subbands used for stereo filling */ - { - norm_dmx = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_DMX[b] ); - norm_l = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_L[b] ); - norm_r = ( ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ) / sub_nrg_R[b] ); - - for ( i = hStereoDft->band_limits[b]; i < hStereoDft->band_limits[b + 1]; i++ ) /* normalization on each subbands */ - { - ener_l = bin_nrgL[i]; - ener_r = bin_nrgR[i]; - ener_dmx = ( ener_l + ener_r + 2 * sqrtf( ener_l * ener_r ) ) * norm_dmx; /*approximation of nrg of DMX per line*/ - ener_l *= norm_l; - ener_r *= norm_r; - - diff_l_h += fabsf( ener_l - ener_dmx ); - diff_r_h += fabsf( ener_r - ener_dmx ); - } - } - } - - for ( b = 0; b < hStereoDft->nbands; b++ ) /* choose the subbands used for stereo filling */ - { - sub_nrg_DMX[b] /= ( hStereoDft->band_limits[b + 1] - hStereoDft->band_limits[b] ); - sub_nrg_DMX[b] = 0.6f * hStereoDft->pre_sub_nrg_DMX[b] + 0.4f * sub_nrg_DMX[b]; - hStereoDft->pre_sub_nrg_DMX[b] = sub_nrg_DMX[b]; - } - - /* adaptively select the subbands to predict based on the energy */ - nbands = ( hStereoDft->nbands > 10 ) ? ( hStereoDft->nbands - 2 ) : hStereoDft->nbands; - nrg_DMX_min_avrg = 0.0f; - for ( b = 2; b < STEREO_DFT_RES_PRED_BAND_MIN_RED; b++ ) - { - nrg_DMX_min = sub_nrg_DMX[b]; - index_min = b; - - for ( b1 = 2; b1 < nbands; b1++ ) - { - if ( nrg_DMX_min > sub_nrg_DMX[b1] ) - { - nrg_DMX_min = sub_nrg_DMX[b1]; - index_min = b1; - } - } - - nrg_DMX_min_avrg += nrg_DMX_min; - sub_nrg_DMX[index_min] = FLT_MAX; - } - - nrg_DMX_max_avrg = 0.0f; - for ( b = 2, b1 = STEREO_DFT_RES_PRED_BAND_MIN_RED; b < nbands; b++ ) - { - if ( sub_nrg_DMX[b] != FLT_MAX ) - { - nrg_DMX_max_avrg += sub_nrg_DMX[b]; - } - } - - if ( hStereoDft->nbands <= 10 ) /*WB*/ - { - if ( hStereoDft->res_pred_mode[0] == STEREO_DFT_RESPRED_OFF || hStereoDft->hConfig->res_cod_mode != STEREO_DFT_RES_COD_OFF ) - { - hStereoDft->diff_l_h_sm = diff_l_h; - hStereoDft->diff_r_h_sm = diff_r_h; - } - else - { - hStereoDft->diff_l_h_sm = 0.9f * hStereoDft->diff_l_h_sm + 0.1f * diff_l_h; - hStereoDft->diff_r_h_sm = 0.9f * hStereoDft->diff_r_h_sm + 0.1f * diff_r_h; - } - - if ( hStereoDft->diff_l_h_sm > 120.0f || hStereoDft->diff_r_h_sm > 120.0f ) - { - hStereoDft->reverb_flag = 1; - } - } - else /*SWB/FB*/ - { - if ( 3 * nrg_DMX_max_avrg > 64 * 5 * nrg_DMX_min_avrg ) - { - hStereoDft->reverb_flag = 1; - } - } - - /*Stereo Filling gain damping*/ - fac = ( ( diff_l_l > diff_r_l ) ? diff_r_l / diff_l_l : diff_l_l / diff_r_l ); - fac = fac > 0.25f ? 1.0f : 4.f * fac; - fac = 0.98f * hStereoDft->prev_fac2 + 0.02f * fac; - hStereoDft->prev_fac2 = fac; - - for ( b = 0; b < hStereoDft->nbands; b++ ) - { - if ( b < 5 ) - { - pPredGain[b] *= max( 0.5f, fac ); - } - else - { - pPredGain[b] *= min( 1.0f, max( 0.75f, 0.5f + fac ) ); - } - } - } - - - return; -} -#endif /*--------------------------------------------------------------- * stereo_dft_gain_offset() * * c = gain between L and R, itd = itd in samples @ 32kHz * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 stereo_dft_gain_offset_fx( const Word32 c, // Q(31-c_e) const Word16 c_e, @@ -7785,26 +4812,6 @@ static Word32 stereo_dft_gain_offset_fx( return go; } -#else -static float stereo_dft_gain_offset( - const float c, - const int16_t itd ) -{ - float wnt, go, alpha; - int16_t tau, k0; - - tau = (int16_t) min( abs( itd ), 160 ); - /* Wn_table contains every 8th sample of the window's cross-correlation - * function @ 32kHz from which the values are interpolated: */ - k0 = tau >> 3; - alpha = ( tau & 7 ) / 8.f; - wnt = ( 1 - alpha ) * Wn_table[k0] + alpha * Wn_table[k0 + 1]; - - go = sqrtf( 8 * c * c / ( ( 1 + c ) * ( 1 + c ) ) * ( 1 - wnt ) / ( 1 + c * c + 2 * c * wnt ) ); - - return go; -} -#endif /*--------------------------------------------------------------- * stereo_dft_enc_calculate_nrg_for_icbwe() @@ -7812,7 +4819,6 @@ static float stereo_dft_gain_offset( * calculate energy of downmix and left and right channel in the * SHB region for later use in ICBWE * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_enc_calculate_nrg_for_icbwe_fx( STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ const Word16 *DFT_L_e, @@ -7896,42 +4902,3 @@ static void stereo_dft_enc_calculate_nrg_for_icbwe_fx( return; } -#else -static void stereo_dft_enc_calculate_nrg_for_icbwe( - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i/o: encoder DFT stereo handle */ - const float *DMX, /* i : DFT Stereo downmix */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - float *pDFT_L, *pDFT_R, bandResDft; - int16_t i, shbBins[3]; - - bandResDft = ( (float) input_Fs ) / hStereoDft->NFFT; - shbBins[0] = (int16_t) ( 6400 / bandResDft ); - shbBins[1] = (int16_t) ( 10400 / bandResDft ); - shbBins[2] = (int16_t) ( 14400 / bandResDft ); - assert( shbBins[1] <= hStereoDft->NFFT / 2 ); - - set_f( hStereoDft->nrg_L, EPSILON, 2 ); - set_f( hStereoDft->nrg_R, EPSILON, 2 ); - set_f( hStereoDft->nrg_DMX, EPSILON, 2 ); - - pDFT_L = hStereoDft->DFT[0]; - pDFT_R = hStereoDft->DFT[1]; - - for ( i = shbBins[0]; i < shbBins[1]; i++ ) - { - hStereoDft->nrg_L[0] += pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; - hStereoDft->nrg_R[0] += pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; - hStereoDft->nrg_DMX[0] += DMX[2 * i] * DMX[2 * i] + DMX[2 * i + 1] * DMX[2 * i + 1]; - } - for ( ; i < shbBins[2]; i++ ) - { - hStereoDft->nrg_L[1] += pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; - hStereoDft->nrg_R[1] += pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; - hStereoDft->nrg_DMX[1] += DMX[2 * i] * DMX[2 * i] + DMX[2 * i + 1] * DMX[2 * i + 1]; - } - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_dft_enc_itd.c b/lib_enc/ivas_stereo_dft_enc_itd.c index 7e077fe22..45eb643a5 100644 --- a/lib_enc/ivas_stereo_dft_enc_itd.c +++ b/lib_enc/ivas_stereo_dft_enc_itd.c @@ -100,7 +100,6 @@ * configure bands as used in DFT Stereo *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void set_band_limits_fx( Word16 *nbands, Word16 band_limits[STEREO_DFT_BAND_MAX + 1], @@ -122,24 +121,6 @@ static void set_band_limits_fx( return; } -#else -static void set_band_limits( - int16_t *nbands, - int16_t band_limits[STEREO_DFT_BAND_MAX + 1], - int16_t NFFT ) -{ - band_limits[0] = 1; - *nbands = 0; - while ( band_limits[( *nbands )++] < NFFT / 2 ) - { - band_limits[*nbands] = (int16_t) round_f( dft_band_limits_erb4[*nbands] * ( (float) ( STEREO_DFT_N_NS_ENC ) / STEREO_DFT_N_NS ) ); - } - ( *nbands )--; - band_limits[*nbands] = NFFT / 2; /*Nyquist Freq*/ - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_hybrid_ITD_flag() @@ -147,32 +128,6 @@ static void set_band_limits( * Get the hybrid ITD flag *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_hybrid_ITD_flag( - STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ - const int32_t input_Fs, /* i : CPE element sampling rate */ - const int16_t hybrid_itd_max /* i : flag for hybrid ITD for very large ITDs */ -) -{ - if ( hConfig != NULL ) - { - if ( hConfig->res_cod_mode || ( hConfig->ada_wb_res_cod_mode && input_Fs == 16000 ) || ( hybrid_itd_max == 1 ) ) - { - hConfig->hybrid_itd_flag = 1; - } - else - { - hConfig->hybrid_itd_flag = 0; - } - } - else - { - assert( 0 && "Stereo Dft Config Data Handle is uninitialized" ); - } - - return; -} -#else void stereo_dft_hybrid_ITD_flag_fx( STEREO_DFT_CONFIG_DATA_HANDLE hConfig, /* o : DFT stereo configuration */ const Word32 input_Fs, /* i : CPE element sampling rate */ @@ -202,7 +157,6 @@ void stereo_dft_hybrid_ITD_flag_fx( return; } -#endif /*------------------------------------------------------------------------- * stereo_dft_quantize_itd() @@ -210,7 +164,6 @@ void stereo_dft_hybrid_ITD_flag_fx( * Quantize the ITD *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void stereo_dft_quantize_itd_fx( const Word16 in, Word32 *out, @@ -244,33 +197,6 @@ static void stereo_dft_quantize_itd_fx( return; } -#else -static void stereo_dft_quantize_itd( - const int16_t in, - float *out, - const int32_t input_Fs, - int16_t *ind ) -{ - int16_t itd; - - itd = (int16_t) ( sign( in ) * 0.5f + in ); - - /*Limit ITD*/ - if ( ( ABSVAL( itd ) > STEREO_DFT_ITD_MAX ) || ( ABSVAL( itd ) < STEREO_DFT_ITD_MIN ) ) - { - itd = 0; - } - else - { - *ind = ( ( itd < 0 ) << ( STEREO_DFT_ITD_NBITS - 1 ) ) + ABSVAL( itd ) - STEREO_DFT_ITD_MIN; - } - - /*Convert back @ fs*/ - *out = (float) ( itd * input_Fs ) / ( (float) ( STEREO_DFT_ITD_FS ) ); - - return; -} -#endif /*------------------------------------------------------------------------- * itd_vad_ms_snr_calc() @@ -278,7 +204,6 @@ static void stereo_dft_quantize_itd( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 itd_vad_ms_snr_calc_fx( Word32 E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], // Q0 Word32 *Spd, @@ -352,53 +277,12 @@ static Word32 itd_vad_ms_snr_calc_fx( return ( ms_snr ); } -#else -static float itd_vad_ms_snr_calc( - float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], - float *Spd, - float *E_band ) -{ - float snr[STEREO_DFT_ITD_VAD_BAND_NUM]; - float msnr[STEREO_DFT_ITD_VAD_BAND_NUM]; - float ms_snr; - int16_t i, j; - - for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) - { - E_band[i] = 0; - for ( j = itd_vad_band_tbl[i]; j < itd_vad_band_tbl[i + 1]; j++ ) - { - E_band[i] += Spd[j]; - } - E_band[i] = E_band[i] / ( itd_vad_band_tbl[i + 1] - itd_vad_band_tbl[i] ); - } - - ms_snr = 0; - for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) - { - snr[i] = E_band[i] / E_band_n[i]; - if ( snr[i] < 1 ) - { - snr[i] = 1; - } - msnr[i] = snr[i] - 1.0f; - if ( msnr[i] < 6 ) - { - msnr[i] = powf( msnr[i], 2 ) / 6.0f; - } - ms_snr += msnr[i]; - } - - return ( ms_snr ); -} -#endif /*------------------------------------------------------------------------- * itd_vad_background_update() * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void itd_vad_background_update_fx( Word32 E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], // Q0 Word16 *vad_frm_cnt, @@ -496,60 +380,12 @@ static void itd_vad_background_update_fx( return; } -#else -static void itd_vad_background_update( - float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], - int16_t *vad_frm_cnt, - const float ms_snr, - float *E_band ) -{ - int16_t i; - float energy; - - energy = 0.0f; - for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) - { - energy += E_band[i] / (float) STEREO_DFT_ITD_VAD_BAND_NUM; - } - - if ( *vad_frm_cnt < ITD_VAD_NOISE_INIT_FRAMES ) - { - ( *vad_frm_cnt )++; - } - - if ( ( *vad_frm_cnt < ITD_VAD_NOISE_INIT_FRAMES ) && energy < 40000000 ) - { - for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) - { - /* using the init values as frame (-1) values */ - E_band_n[i] = ( E_band_n[i] * ( (float) ( *vad_frm_cnt ) ) + E_band[i] ) / ( (float) ( *vad_frm_cnt + 1 ) ); - } - } - else - { - if ( ms_snr < ITD_VAD_MS_SNR_UPDATE_THRESH ) - { - for ( i = 0; i < STEREO_DFT_ITD_VAD_BAND_NUM; i++ ) - { - E_band_n[i] = 0.96f * E_band_n[i] + 0.04f * E_band[i]; - if ( E_band_n[i] < 1.0f ) - { - E_band_n[i] = 1.0f; - } - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * stereo_dft_enc_itd_vad() * * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 stereo_dft_enc_itd_vad_fx( Word32 E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], // Q0 Word16 *vad_frm_cnt, @@ -598,44 +434,6 @@ static Word16 stereo_dft_enc_itd_vad_fx( return ( vad_flag_itd ); } -#else -static int16_t stereo_dft_enc_itd_vad( - float E_band_n[STEREO_DFT_ITD_VAD_BAND_NUM], - int16_t *vad_frm_cnt, - float *Spd_L, - float *Spd_R, - float *mssnr ) -{ - int16_t i; - float E_band[STEREO_DFT_ITD_VAD_BAND_NUM]; - int16_t vad_flag_itd; - - float Spd[STEREO_DFT_N_16k_ENC / 2 + 1]; - - - /* Spd is later only used starting at itd_vad_band_tbl[0], so only compute values starting from there */ - /* -> this avoids uninitialized values in Spd_L and Spd_R at index 0 to be used */ - for ( i = itd_vad_band_tbl[0]; i < STEREO_DFT_N_16k_ENC / 2; i++ ) - { - Spd[i] = 0.5f * ( Spd_L[i] + Spd_R[i] ); - } - - *mssnr = itd_vad_ms_snr_calc( E_band_n, Spd, E_band ); - - itd_vad_background_update( E_band_n, vad_frm_cnt, *mssnr, E_band ); - - if ( *mssnr < ITD_VAD_THRSHOLD ) - { - vad_flag_itd = 0; - } - else - { - vad_flag_itd = 1; - } - - return ( vad_flag_itd ); -} -#endif /*------------------------------------------------------------------------- * calc_mean_E_ratio() @@ -643,7 +441,6 @@ static int16_t stereo_dft_enc_itd_vad( * calculates mean energy of main-to-background signal ratio *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 calc_mean_E_ratio_fx( ITD_DATA_HANDLE hItd, Word16 nbands, @@ -815,82 +612,12 @@ static Word32 calc_mean_E_ratio_fx( // return ( sum_Er * B_DENOM ); return Mpy_32_32( sum_Er, B_DENOM_Q31 ); } -#else -static float calc_mean_E_ratio( - ITD_DATA_HANDLE hItd, - int16_t nbands, - int16_t band_limits[], - const float sfm, - const float nrg_L[STEREO_DFT_N_32k_ENC / 2], - const float nrg_R[STEREO_DFT_N_32k_ENC / 2], - float *total_mEr ) -{ - float sum_xcorr[2]; - float Sxcorr; - float Er[STEREO_DFT_BAND_MAX], fi[STEREO_DFT_BAND_MAX], a, acorr; - float sum_nrg_L, sum_nrg_R; - int16_t b, i; - float sum_Er; - float total_fi; - float grand_nrg_L, grand_nrg_R, grand_sum_xcorr_real, grand_sum_xcorr_img; - - grand_nrg_L = 0.0f; - grand_nrg_R = 0.0f; - grand_sum_xcorr_real = 0.0f; - grand_sum_xcorr_img = 0.0f; - - /*take bands up to 32kHz bandwidth as ITD is always calculated at 32kHz sampling rate*/ - nbands -= ( band_limits[nbands] > STEREO_DFT_N_32k_ENC / 2 ); - - sum_Er = 0; - for ( b = 0; b < nbands; b++ ) - { - /*reset buffers*/ - sum_xcorr[0] = 0.f; - sum_xcorr[1] = 0.f; - sum_nrg_L = 0.f; - sum_nrg_R = 0.f; - - for ( i = band_limits[b]; i < min( band_limits[b + 1], STEREO_DFT_N_32k_ENC / 2 ); i++ ) - { - sum_xcorr[0] += hItd->xcorr_smooth[2 * i]; - sum_xcorr[1] += hItd->xcorr_smooth[2 * i + 1]; - sum_nrg_L += nrg_L[i]; - sum_nrg_R += nrg_R[i]; - } - - Sxcorr = sum_xcorr[0] * sum_xcorr[0] + sum_xcorr[1] * sum_xcorr[1]; - hItd->acorr_L[b] = ( 1.f - sfm ) * hItd->acorr_L[b] + sfm * sum_nrg_L; - hItd->acorr_R[b] = ( 1.f - sfm ) * hItd->acorr_R[b] + sfm * sum_nrg_R; - - a = hItd->acorr_L[b] - hItd->acorr_R[b]; - acorr = hItd->acorr_L[b] + hItd->acorr_R[b]; - fi[b] = sqrtf( a * a + 4 * Sxcorr ); - Er[b] = ( acorr + fi[b] ) / ( acorr - fi[b] + EPSILON ); - sum_Er += Er[b]; - - grand_nrg_L += sum_nrg_L; - grand_nrg_R += sum_nrg_R; - grand_sum_xcorr_real += sum_xcorr[0]; - grand_sum_xcorr_img += sum_xcorr[1]; - } - - Sxcorr = grand_sum_xcorr_real * grand_sum_xcorr_real + grand_sum_xcorr_img * grand_sum_xcorr_img; - a = grand_nrg_L - grand_nrg_R; - acorr = grand_nrg_L + grand_nrg_R; - total_fi = sqrtf( a * a + 4 * Sxcorr ); - *total_mEr = ( acorr + total_fi ) / ( acorr - total_fi + EPSILON ); - - return ( sum_Er * B_DENOM ); -} -#endif /*------------------------------------------------------------------------- * resetEstimates() * * resets long term estimates to initial values. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void resetEstimates_fx( ITD_DATA_HANDLE hItd ) { @@ -908,24 +635,11 @@ static void resetEstimates_fx( return; } -#else -static void resetEstimates( - ITD_DATA_HANDLE hItd ) -{ - set_zero( hItd->xcorr_smooth, STEREO_DFT_N_32k_ENC ); - set_zero( hItd->acorr_L, STEREO_DFT_BAND_MAX ); - set_zero( hItd->acorr_R, STEREO_DFT_BAND_MAX ); - hItd->cohSNR = 15; - - return; -} -#endif /*------------------------------------------------------------------------- * td_sm_filter() * * time-domain smoothing filter for smoothing the cross-correlation vector *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void td_sm_filter_fx( Word32 *x, Word32 *y, @@ -953,38 +667,12 @@ static void td_sm_filter_fx( return; } -#else -static void td_sm_filter( - float *x, - float *y, - const int16_t L ) -{ - int16_t i; - float tmp_x[STEREO_DFT_N_32k_ENC + 1]; - float a0, a1; - - set_f( tmp_x, 0, STEREO_DFT_N_32k_ENC + 1 ); - mvr2r( x, tmp_x, L ); - - a0 = 0.5f; - a1 = 0.25f; - - y[0] = a0 * tmp_x[0] + a1 * x[1]; - for ( i = 1; i < L; i++ ) - { - y[i] = a1 * tmp_x[i + 1] + a0 * tmp_x[i] + a1 * tmp_x[i - 1]; - } - - return; -} -#endif /*------------------------------------------------------------------------- * peak_detect() * * function for calculating the threshold for peak detection of the * cross-correlation vector *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 peak_detect_fx( Word32 *xcorr_itd, Word32 *max_max, // xcorr_itd_e @@ -1199,158 +887,11 @@ static Word32 peak_detect_fx( return Mpy_32_32( wfac, avg_max ); // 2+sum_max_e } } -#else -static float peak_detect( - float *xcorr_itd, - float *max_max, - int16_t *index, - int16_t *zero_itd_flag, - const float snr, - const int16_t vad, - float *second_max, - int16_t *second_max_lag, - const float prev_itd, - const int16_t flag_noisy_speech_snr, - const int16_t detected_itd_flag, - float *prev_max, - int16_t *prev_index, - float *prev_avg_max, - float *total_max ) -{ - int16_t i; - float tmp_max[SUBDIV], tmp_xcorr_itd[2 * STEREO_DFT_ITD_MAX_ANA + 1], tmp_xcorr_itd_sm[2 * STEREO_DFT_ITD_MAX_ANA + 1]; - int16_t index_subd[SUBDIV], ind; - float avg_max, max_low, max_high, sum_max, tmp_max_max; - float thres_diff; - float wfac; - int16_t d, i1, i2; - - wfac = 2.5f; - if ( snr > 50.f ) - { - wfac = 3.f; - } - - /*detect maxima outside the [-5, 5] ms boundaries */ - maximum( xcorr_itd, STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA, &max_low ); - maximum( xcorr_itd + STEREO_DFT_N_32k_ENC / 2 + STEREO_DFT_ITD_MAX_ANA + 1, STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA - 1, &max_high ); - - /* create temp buffer that includes xcorr within [-5, 5] ms */ - mvr2r( xcorr_itd + STEREO_DFT_N_32k_ENC / 2 - STEREO_DFT_ITD_MAX_ANA, tmp_xcorr_itd, 2 * STEREO_DFT_ITD_MAX_ANA + 1 ); - - *index = maximumAbs( tmp_xcorr_itd, 2 * STEREO_DFT_ITD_MAX_ANA + 1, max_max ); - *total_max = *max_max; - - d = max( 2, (int16_t) round_f( fabsf( prev_itd ) / 16.f ) ); - i1 = max( 0, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA - d ); - i2 = min( 2 * STEREO_DFT_ITD_MAX_ANA, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA + d ); - *second_max_lag = maximumAbs( tmp_xcorr_itd + i1, i2 - i1 + 1, second_max ); - *second_max_lag += i1; - - - /*if maximum is out of boundaries signal zero itd OR maximum value is negative*/ - *zero_itd_flag = ( *max_max < max_low || *max_max < max_high ); - - if ( *zero_itd_flag ) - { - return 0; - } - else - { - sum_max = 0; - - if ( snr >= 25.f ) - { - /*apply smoothing filter*/ - td_sm_filter( tmp_xcorr_itd, tmp_xcorr_itd_sm, 2 * STEREO_DFT_ITD_MAX_ANA + 1 ); - - /*subdivide the area of interest and look for local maxima*/ - for ( i = 0; i < SUBDIV - 1; i++ ) - { - index_subd[i] = maximumAbs( &tmp_xcorr_itd_sm[i * L_SAMPLES], L_SAMPLES, &tmp_max[i] ); - sum_max += tmp_max[i]; - } - - index_subd[i] = maximumAbs( &tmp_xcorr_itd_sm[i * L_SAMPLES], L_SAMPLES + 1, &tmp_max[i] ); - sum_max += tmp_max[i]; - - ind = maximumAbs( tmp_max, SUBDIV, &tmp_max_max ); - - /*final position of maxmimum*/ - *index = index_subd[ind] + ind * L_SAMPLES; - *max_max = tmp_max_max; - /*calculate average of all maxima to determine the threshold*/ - avg_max = sum_max * DENOM; - - d = max( 2, (int16_t) round_f( fabsf( prev_itd ) / 16.f ) ); - i1 = max( 0, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA - d ); - i2 = min( 2 * STEREO_DFT_ITD_MAX_ANA, (int16_t) prev_itd + STEREO_DFT_ITD_MAX_ANA + d ); - *second_max_lag = maximumAbs( tmp_xcorr_itd_sm + i1, i2 - i1 + 1, second_max ); - *second_max_lag += i1; - } - else - { - /*determine weight for threshold depending on snr value*/ - if ( snr <= 20.f && snr > 15.f ) - { - wfac = snr * 0.1f + 0.5f; - } - else - { - wfac = 2.5f; - } - - for ( i = 0; i < SUBDIV - 1; i++ ) - { - index_subd[i] = maximumAbs( &tmp_xcorr_itd[i * L_SAMPLES], L_SAMPLES, &tmp_max[i] ); - sum_max += tmp_max[i]; - } - - index_subd[i] = maximumAbs( &tmp_xcorr_itd[i * L_SAMPLES], L_SAMPLES + 1, &tmp_max[i] ); - sum_max += tmp_max[i]; - - /*calculate average of all maxima to determine the threshold*/ - avg_max = sum_max * DENOM; - } - - /*relax threshold if threshold is very close to max: when 7 0.f && ( ( thres_diff < 0.05f && ( snr <= 15 && snr > 7.f ) ) || ( thres_diff < 0.01f && ( snr > 15.f && snr < 30.f ) ) ) ) - { - wfac = 2.0f; - } - - if ( flag_noisy_speech_snr == 1 ) - { - if ( vad == 0 ) - { - wfac = 2.5f; - } - else if ( detected_itd_flag == 0 && *max_max > 1.5f * avg_max && *prev_max > 1.5f * *prev_avg_max && abs( *index - *prev_index ) <= 2 ) - { - wfac = 1.5f; - } - else - { - wfac = 2.0f; - } - } - *prev_max = *max_max; - *prev_avg_max = avg_max; - *prev_index = *index; - - return ( wfac * avg_max ); - } -} -#endif /*------------------------------------------------------------------------- * Compute stereo parameter: ITD * ITD: Interchannel Time Difference *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dft_enc_compute_itd_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word32 *DFT_L, /* i : exp : DFT_L_e */ @@ -3046,766 +2587,3 @@ void stereo_dft_enc_compute_itd_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_dft_enc_compute_itd( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - float *DFT_L, - float *DFT_R, - const int16_t k_offset, - const int16_t input_frame, - const int16_t vad_flag_dtx[], - const int16_t vad_hover_flag[], - float *bin_nrgL, - float *bin_nrgR ) -{ - int16_t i, j; - STEREO_DFT_ENC_DATA_HANDLE hStereoDft; - ITD_DATA_HANDLE hItd; - float *pDFT_L, *pDFT_R; - float abs_L, abs_R, prod_L, prod_R, sum_abs_L, sum_abs_R; - float log_prod_L, log_prod_R; - float sum_nrg_L, sum_nrg_R; - float sfm_L, sfm_R; - float xcorr[STEREO_DFT_N_32k_ENC]; - int16_t itd, itd_td; - float xcorr_itd[STEREO_DFT_N_32k_ENC]; - float tmpf1, tmpf2, tmpf3; - float thres, alpha; - int16_t index; - float xcorr_max, sum_nrg_L_lb, par_L[XCORR_LB_NUM_BANDS], par_L_avrg, sum_nrg_L_tmp; - float xcorr_lb[STEREO_DFT_XCORR_LB_MAX]; - float num_cor, den_cor_cur, den_cor_prev, cor_lb_avrg; - float cor_lb[XCORR_LB_NUM_BANDS]; - float Spd_L[STEREO_DFT_N_32k_ENC / 2 + 1]; - float Spd_R[STEREO_DFT_N_32k_ENC / 2 + 1]; - int16_t vad_flag_itd; - float mssnr; - int16_t itd_cal_flag; - int16_t NFFT, NFFT_mid; - int16_t zero_itd; - float mEr; - float cohSNR; - float *pNrgL, *pNrgR; - float second_max; - int16_t second_max_lag; - int16_t fc_condition_1, fc_condition_2, fc_condition_3, fc_condition_4, fc_condition_5, fc_condition_6_a, fc_condition_6_b, fc_condition_6_c; - int16_t fc_condition_1234; - int16_t split, shift, flag_noisy_speech_snr; - float gcc_phat[2 * XTALK_PHAT_LEN + 1]; - float grand_dot_prod_real, grand_dot_prod_img; - float xcorr_abs[STEREO_DFT_N_32k_ENC], sum_xcorr, prod_LL, prod_RR, total_mEr, total_max; - STEREO_CLASSIF_HANDLE hStereoClassif; - const float *dft_trigo32k; - float trigo_enc[STEREO_DFT_N_32k_ENC / 2 + 1]; - - float cng_xcorr_filt; - - int16_t prev_itd_max; - int16_t itd_max_flip; - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - hStereoDft = hCPE->hStereoDft; - hItd = hCPE->hStereoDft->hItd; - NFFT = min( STEREO_DFT_N_32k_ENC, hStereoDft->NFFT ); - dft_trigo32k = hStereoDft->dft_trigo_32k; - } - else - { - hStereoDft = NULL; - hItd = hCPE->hStereoMdct->hItd; - NFFT = min( STEREO_DFT_N_32k_ENC, hCPE->hStereoMdct->hDft_ana->NFFT ); - dft_trigo32k = hCPE->hStereoMdct->hDft_ana->dft_trigo_32k; - } - hStereoClassif = hCPE->hStereoClassif; - - for ( i = 0; i < STEREO_DFT_N_32k_ENC / 4; i++ ) - { - trigo_enc[i] = dft_trigo32k[i]; - trigo_enc[STEREO_DFT_N_32k_ENC / 2 - i] = dft_trigo32k[i]; - } - trigo_enc[STEREO_DFT_N_32k_ENC / 4] = dft_trigo32k[STEREO_DFT_N_32k_ENC / 4]; - - flag_noisy_speech_snr = hCPE->hCoreCoder[0]->flag_noisy_speech_snr; /* flag from the previous frame */ - - /* initializations to avoid compilation warnings */ - sum_nrg_L = 0.0f; - sum_nrg_R = 0.0f; - sum_nrg_L_lb = 0.0f; - mssnr = 0.0f; - sfm_L = 0.0f; - - - NFFT_mid = (int16_t) ( ( min( STEREO_DFT_N_16k_ENC, NFFT ) ) * 0.5f ); - - pDFT_L = DFT_L; - pDFT_R = DFT_R; - pNrgL = bin_nrgL; - pNrgR = bin_nrgR; - xcorr[0] = 0.f; - xcorr[1] = 0.f; - log_prod_L = logf( max( FLT_MIN, ABSVAL( pDFT_L[0] ) ) ); - log_prod_R = logf( max( FLT_MIN, ABSVAL( pDFT_R[0] ) ) ); - prod_L = 1.0f; - prod_R = 1.0f; - sum_nrg_L = pDFT_L[0] * pDFT_L[0] + FLT_MIN; - sum_nrg_R = pDFT_R[0] * pDFT_R[0] + FLT_MIN; - sum_abs_L = ABSVAL( pDFT_L[0] ) + EPSILON; - sum_abs_R = ABSVAL( pDFT_R[0] ) + EPSILON; - xcorr_lb[0] = pDFT_L[0] * pDFT_L[0] + EPSILON; - sum_nrg_L_lb = xcorr_lb[0]; - prod_LL = 1.0f; - prod_RR = 1.0f; - grand_dot_prod_real = EPSILON; - grand_dot_prod_img = EPSILON; - - for ( i = 1, j = 0; i < NFFT_mid; i++, j++ ) - { - xcorr[2 * i] = pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; - xcorr[2 * i + 1] = pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; - - pNrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; - pNrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; - - Spd_L[i] = pNrgL[i]; - Spd_R[i] = pNrgR[i]; - - abs_L = sqrtf( pNrgL[i] ); - abs_R = sqrtf( pNrgR[i] ); - - sum_nrg_L += pNrgL[i]; - sum_nrg_R += pNrgR[i]; - - sum_abs_L += abs_L; - sum_abs_R += abs_R; - prod_L *= abs_L; - prod_R *= abs_R; - - grand_dot_prod_real += xcorr[2 * i]; - grand_dot_prod_img += xcorr[2 * i + 1]; - xcorr_abs[i] = sqrtf( xcorr[2 * i] * xcorr[2 * i] + xcorr[2 * i + 1] * xcorr[2 * i + 1] ); - /* VM: prod_LL tends to overflow, better to replace with sum(log(prod_L)) and retrain the classifier */ - prod_LL = prod_L; - prod_RR = prod_R; - - if ( j == SFM_PROD_GRP || i == NFFT_mid - 1 ) - { - prod_L = max( FLT_MIN, prod_L ); - prod_R = max( FLT_MIN, prod_R ); - log_prod_L += logf( prod_L ); - log_prod_R += logf( prod_R ); - prod_L = 1; - prod_R = 1; - j = 0; - } - } - - /* collect UNCLR classifier parameters */ - { - float IPD, d_IPD, g_IPD, g_ILD, angle_rot, g_side, g_pred, abs_L_R, grand_nrg_DMX; - - if ( hCPE->last_element_mode != IVAS_CPE_DFT ) - { - hStereoClassif->prev_g_IPD = 0.5f; - hStereoClassif->prev_IPD = 0.0f; - } - - - abs_L_R = sqrtf( grand_dot_prod_real * grand_dot_prod_real + grand_dot_prod_img * grand_dot_prod_img ); - grand_nrg_DMX = sum_nrg_L + sum_nrg_R + 2 * abs_L_R; - - g_ILD = sqrtf( sum_nrg_L / ( sum_nrg_R + 1.0f ) ); - g_ILD = fabsf( ( g_ILD - 1 ) / ( g_ILD + 1 ) ); - hStereoClassif->unclr_fv[E_gainILD] = g_ILD; - hStereoClassif->xtalk_fv[E_gainILD] = g_ILD; - - IPD = atan2f( grand_dot_prod_img, grand_dot_prod_real ); - hStereoClassif->unclr_fv[E_IPD] = IPD; - hStereoClassif->xtalk_fv[E_IPD] = IPD; - - d_IPD = fabsf( IPD - hStereoClassif->prev_IPD ); - hStereoClassif->unclr_fv[E_d_IPD] = IPD; /* VM: need to replace IPD by d_IPD and re-train the UNCLR classifier for DFT stereo */ - hStereoClassif->xtalk_fv[E_d_IPD] = d_IPD; - hStereoClassif->prev_IPD = IPD; - - g_IPD = ( sum_nrg_L + sum_nrg_R + 2 * grand_dot_prod_real ) / grand_nrg_DMX; - if ( g_IPD >= 1.0f ) - { - g_IPD = hStereoClassif->prev_g_IPD; - } - else - { - hStereoClassif->prev_g_IPD = g_IPD; - } - g_IPD = logf( 1.0f - g_IPD ); - hStereoClassif->unclr_fv[E_gainIPD] = g_IPD; - hStereoClassif->xtalk_fv[E_gainIPD] = g_IPD; - - angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / ( sum_nrg_L - sum_nrg_R + 1.0f ) ) ); - hStereoClassif->unclr_fv[E_angle_rot] = angle_rot; - hStereoClassif->xtalk_fv[E_angle_rot] = angle_rot; - - g_side = fabsf( sum_nrg_L - sum_nrg_R ) / ( grand_nrg_DMX ); - g_side = max( 0.01f, min( g_side, 0.99f ) ); - hStereoClassif->unclr_fv[E_g_side] = g_side; - hStereoClassif->xtalk_fv[E_g_side] = g_side; - - g_pred = logf( max( 0, ( ( 1 - g_side ) * sum_nrg_L + ( 1 + g_side ) * sum_nrg_R - 2 * abs_L_R ) ) + 1.0f ); - g_pred = max( 14.0f, g_pred ); - hStereoClassif->unclr_fv[E_g_pred] = g_pred; - hStereoClassif->xtalk_fv[E_g_pred] = g_pred; - } - - mvr2r( &Spd_L[1], &xcorr_lb[1], STEREO_DFT_XCORR_LB_MAX - 1 ); - sum_nrg_L_lb = sum_nrg_L_lb + sum_f( &Spd_L[1], 11 ); - - vad_flag_itd = stereo_dft_enc_itd_vad( hItd->E_band_n, &( hItd->vad_frm_cnt ), Spd_L, Spd_R, &mssnr ); - - vad_flag_itd = vad_flag_itd && vad_flag_dtx[0]; - - if ( sum_nrg_L < EPSILON ) - { - sfm_L = 0; - } - else - { - sfm_L = expf( log_prod_L / ( NFFT_mid ) ) / ( sum_abs_L / ( NFFT_mid ) ); - } - - if ( sum_nrg_R < EPSILON ) - { - sfm_R = 0; - } - else - { - sfm_R = expf( log_prod_R / ( NFFT_mid ) ) / ( sum_abs_R / ( NFFT_mid ) ); - } - - if ( sfm_R > sfm_L ) - { - sfm_L = sfm_R; - } - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - hStereoDft->sfm = sfm_L; - } - - for ( ; i < NFFT / 2; i++ ) - { - xcorr[2 * i] = pDFT_L[2 * i] * pDFT_R[2 * i] + pDFT_L[2 * i + 1] * pDFT_R[2 * i + 1]; - xcorr[2 * i + 1] = pDFT_L[2 * i + 1] * pDFT_R[2 * i] - pDFT_L[2 * i] * pDFT_R[2 * i + 1]; - - pNrgL[i] = pDFT_L[2 * i] * pDFT_L[2 * i] + pDFT_L[2 * i + 1] * pDFT_L[2 * i + 1]; - pNrgR[i] = pDFT_R[2 * i] * pDFT_R[2 * i] + pDFT_R[2 * i + 1] * pDFT_R[2 * i + 1]; - /* Calculate L and R energy power spectrum */ - Spd_L[i] = pNrgL[i]; - Spd_R[i] = pNrgR[i]; - } - - for ( ; i < STEREO_DFT_N_32k_ENC / 2; i++ ) - { - xcorr[2 * i] = 0.f; - xcorr[2 * i + 1] = 0.f; - } - - hItd->xcorr_smooth[0] = 0.f; - hItd->xcorr_smooth[1] = 0.f; - xcorr[0] = sign( hItd->xcorr_smooth[0] ); - xcorr[1] = sign( hItd->xcorr_smooth[1] ); - - - if ( hCPE->element_mode == IVAS_CPE_DFT && ( hItd->td_itd[k_offset] - hItd->td_itd[k_offset - 1] ) ) - { - float alphaD, c, s, c1, s1, ctmp, vtmp; - alphaD = -2.f * EVS_PI * ( (float) hItd->td_itd[k_offset] - hItd->td_itd[k_offset - 1] ) / hStereoDft->NFFT; - c1 = cosf( alphaD ); - s1 = sinf( alphaD ); - c = 1.f; /* cos(0) */ - s = 0.f; /* sin(0) */ - - for ( i = 1; i < NFFT / 2; i++ ) - { - ctmp = c; - c = c * c1 - s * s1; - s = ctmp * s1 + s * c1; - vtmp = hItd->xcorr_smooth[2 * i] * c - hItd->xcorr_smooth[2 * i + 1] * s; - hItd->xcorr_smooth[2 * i + 1] = hItd->xcorr_smooth[2 * i] * s + hItd->xcorr_smooth[2 * i + 1] * c; - hItd->xcorr_smooth[2 * i] = vtmp; - } - } - - tmpf3 = 2.f; - if ( flag_noisy_speech_snr ) - { - alpha = -0.8f; - } - else - { - alpha = -1.0f; - } - - if ( hCPE->hCoreCoder[0]->Opt_DTX_ON && hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( hCPE->hFrontVad[0] != NULL ) - { - /* Determine if we are in hangover */ - if ( vad_hover_flag[0] && vad_hover_flag[1] ) - { - /* Determine if we are in the first DTX hangover frame (also triggers for VAD hangover frame) */ - if ( hStereoDft->resetFrames > CORR_RESET_FRAMES_MAX ) - { - /* Reset cross spectrum when there is hangover */ - set_f( hStereoDft->xspec_smooth, 0.0f, STEREO_DFT_N_32k_ENC ); - hStereoDft->resetFrames = 0; - hStereoDft->currentNumUpdates = 0; - /* Expected minimum number of updates including first SID */ - hStereoDft->expectedNumUpdates = 1 + min( hCPE->hFrontVad[0]->rem_dtx_ho, hCPE->hFrontVad[1]->rem_dtx_ho ); - } - else if ( hStereoDft->currentNumUpdates >= hStereoDft->expectedNumUpdates ) - { - hStereoDft->expectedNumUpdates += 1 + min( hCPE->hFrontVad[0]->rem_dtx_ho, hCPE->hFrontVad[1]->rem_dtx_ho ); - } - cng_xcorr_filt = max( min( CORR_FILT, 10.0f * CORR_FILT / ( hStereoDft->expectedNumUpdates + hStereoDft->currentNumUpdates ) ), sfm_L ); - hStereoDft->currentNumUpdates++; - for ( i = 1; i < NFFT / 2; i++ ) - { - /* Low pass filter cross L/R power spectrum */ - hStereoDft->xspec_smooth[2 * i] = ( 1.f - cng_xcorr_filt ) * hStereoDft->xspec_smooth[2 * i] + cng_xcorr_filt * xcorr[2 * i]; - hStereoDft->xspec_smooth[2 * i + 1] = ( 1.f - cng_xcorr_filt ) * hStereoDft->xspec_smooth[2 * i + 1] + cng_xcorr_filt * xcorr[2 * i + 1]; - - /* Low pass filter L/R power spectrum */ - /* Calculate coherence as cross spectral density divided by L*R power spectrum */ - hStereoDft->Spd_L_smooth[i] = ( 1.f - cng_xcorr_filt ) * hStereoDft->Spd_L_smooth[i] + cng_xcorr_filt * Spd_L[i]; - hStereoDft->Spd_R_smooth[i] = ( 1.f - cng_xcorr_filt ) * hStereoDft->Spd_R_smooth[i] + cng_xcorr_filt * Spd_R[i]; - } - } - else if ( vad_flag_dtx[0] == 0 ) - { - hStereoDft->resetFrames = 0; - } - else - { - if ( hStereoDft->resetFrames < CORR_RESET_FRAMES_MAX + 1 ) - { - hStereoDft->resetFrames++; - } - if ( !vad_hover_flag[0] && !vad_hover_flag[1] ) - { - hStereoDft->expectedNumUpdates = hStereoDft->currentNumUpdates; - } - } - } - if ( ( vad_flag_dtx[0] == 0 ) || ( hCPE->hFrontVad[0] == NULL && ( hCPE->hCoreCoder[0]->last_core_brate == SID_2k40 || hCPE->hCoreCoder[0]->last_core_brate == FRAME_NO_DATA ) ) || hCPE->hStereoCng->first_SID_after_TD ) - { - if ( vad_flag_dtx[0] == 0 ) - { - /* expectedNumUpdates updated after call to dtx() in SID frames */ - cng_xcorr_filt = max( min( CORR_FILT, 10.0f * CORR_FILT / ( hStereoDft->expectedNumUpdates + hStereoDft->currentNumUpdates ) ), sfm_L ); - hStereoDft->currentNumUpdates++; - hStereoDft->sfm = cng_xcorr_filt; - } - else /* use sfm for active frames */ - { - cng_xcorr_filt = sfm_L; - } - - /* Copy state of xspec_smooth to xcorr_smooth in first CNG frame */ - if ( hCPE->hStereoCng->cng_counter == 0 && vad_flag_dtx[0] == 0 ) - { - mvr2r( hStereoDft->xspec_smooth, hItd->xcorr_smooth, NFFT ); - } - for ( i = 1; i < NFFT / 2; i++ ) - { - /* Low pass filter cross L/R power spectrum */ - hStereoDft->xspec_smooth[2 * i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->xspec_smooth[2 * i] + XSPEC_ALPHA * xcorr[2 * i]; - hStereoDft->xspec_smooth[2 * i + 1] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->xspec_smooth[2 * i + 1] + XSPEC_ALPHA * xcorr[2 * i + 1]; - hItd->xcorr_smooth[2 * i] = ( 1.f - cng_xcorr_filt ) * hItd->xcorr_smooth[2 * i] + cng_xcorr_filt * xcorr[2 * i]; - hItd->xcorr_smooth[2 * i + 1] = ( 1.f - cng_xcorr_filt ) * hItd->xcorr_smooth[2 * i + 1] + cng_xcorr_filt * xcorr[2 * i + 1]; - tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); - tmpf1 += EPSILON; - tmpf2 = tmpf1; - tmpf1 = powf( tmpf1, alpha ); - tmpf3 += tmpf2 * tmpf1; - xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; - xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; - - /* Low pass filter L/R power spectrum */ - /* Calculate coherence as cross spectral density divided by L*R power spectrum */ - hStereoDft->Spd_L_smooth[i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->Spd_L_smooth[i] + XSPEC_ALPHA * Spd_L[i]; - hStereoDft->Spd_R_smooth[i] = ( 1.f - XSPEC_ALPHA ) * hStereoDft->Spd_R_smooth[i] + XSPEC_ALPHA * Spd_R[i]; - } - } - else - { - for ( i = 1; i < NFFT / 2; i++ ) - { - hItd->xcorr_smooth[2 * i] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i] + sfm_L * xcorr[2 * i]; - hItd->xcorr_smooth[2 * i + 1] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i + 1] + sfm_L * xcorr[2 * i + 1]; - tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); - tmpf1 += EPSILON; - tmpf2 = tmpf1; - tmpf1 = powf( tmpf1, alpha ); - tmpf3 += tmpf2 * tmpf1; - xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; - xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; - } - } - } - else - { - for ( i = 1; i < NFFT / 2; i++ ) - { - hItd->xcorr_smooth[2 * i] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i] + sfm_L * xcorr[2 * i]; - hItd->xcorr_smooth[2 * i + 1] = ( 1.f - sfm_L ) * hItd->xcorr_smooth[2 * i + 1] + sfm_L * xcorr[2 * i + 1]; - tmpf1 = sqrtf( hItd->xcorr_smooth[i * 2] * hItd->xcorr_smooth[i * 2] + hItd->xcorr_smooth[i * 2 + 1] * hItd->xcorr_smooth[i * 2 + 1] ); - tmpf1 += EPSILON; - tmpf2 = tmpf1; - tmpf1 = powf( tmpf1, alpha ); - tmpf3 += tmpf2 * tmpf1; - xcorr[2 * i] = hItd->xcorr_smooth[2 * i] * tmpf1; - xcorr[2 * i + 1] = hItd->xcorr_smooth[2 * i + 1] * tmpf1; - } - } - tmpf1 = (float) ( NFFT / 2 + 1 ) / tmpf3; - for ( i = 0; i < NFFT; i++ ) - { - xcorr[i] *= tmpf1; - } - /*calculate mean E ratio of main to background signal for cohSNR*/ - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - mEr = calc_mean_E_ratio( hItd, hStereoDft->nbands, hStereoDft->band_limits, sfm_L, pNrgL, pNrgR, &total_mEr ); - } - else - { - int16_t nbands; - int16_t band_limits[STEREO_DFT_BAND_MAX + 1]; - - set_s( band_limits, 0, STEREO_DFT_BAND_MAX + 1 ); - set_band_limits( &nbands, band_limits, hCPE->hStereoMdct->hDft_ana->NFFT ); - mEr = calc_mean_E_ratio( hItd, nbands, band_limits, sfm_L, pNrgL, pNrgR, &total_mEr ); - } - - /*calculate total cohSNR for frame in dB*/ - if ( mEr > 1.0f ) - { - cohSNR = 20 * log10f( mEr ); - } - else - { - cohSNR = 0; - } - - /* collect UNCLR classifier parameters */ - { - float es_em, d_prodL_prodR; - - if ( total_mEr < 1.0f ) - { - hStereoClassif->unclr_fv[E_cohSNR] = 0; - } - else - { - hStereoClassif->unclr_fv[E_cohSNR] = 20 * log10f( total_mEr ); - } - - es_em = fabsf( sum_nrg_L - sum_nrg_R ) / ( sum_nrg_L + sum_nrg_R + 1e-5f ); - hStereoClassif->unclr_fv[E_es_em] = es_em; - hStereoClassif->xtalk_fv[E_es_em] = es_em; - - d_prodL_prodR = logf( max( prod_LL, prod_RR ) / ( min( prod_LL, prod_RR ) + 1e-5f ) + 1.0f ); - hStereoClassif->unclr_fv[E_d_prodL_prodR] = d_prodL_prodR; - hStereoClassif->xtalk_fv[E_d_prodL_prodR] = d_prodL_prodR; - - sum_xcorr = 0.0f; - for ( i = 1; i < NFFT_mid; i++ ) - { - xcorr_abs[i] = logf( xcorr_abs[i] / ( sum_nrg_L + sum_nrg_R + 1e-5f ) + 1e-5f ); - sum_xcorr += xcorr_abs[i]; - } - - hStereoClassif->unclr_fv[E_sum_xcorr] = sum_xcorr; - hStereoClassif->xtalk_fv[E_sum_xcorr] = sum_xcorr; - } - - /* reset estimates when silence is detected*/ - if ( ( sum_nrg_L && sum_nrg_R ) < EPSILON ) - { - resetEstimates( hItd ); - } - - /*smooth cohSNR with time */ - if ( ( hItd->cohSNR - cohSNR ) < 10.0f ) - { - tmpf1 = max( 0.05f, min( 0.25f, sfm_L * 0.5f ) ); - hItd->cohSNR = ( 1.f - tmpf1 ) * hItd->cohSNR + tmpf1 * cohSNR; - } - else - { - hItd->cohSNR = hItd->cohSNR - 0.05f; - } - - cohSNR = hItd->cohSNR; - - rfft( xcorr, trigo_enc, STEREO_DFT_N_32k_ENC, +1 ); - - itd_td = hItd->td_itd_32k[k_offset]; /* This ITD always operates at 32kHz*/ - shift = ( STEREO_DFT_N_32k_ENC / 2 - itd_td ) % STEREO_DFT_N_32k_ENC; - split = STEREO_DFT_N_32k_ENC - shift; - - mvr2r( &xcorr[0], &xcorr_itd[shift], split ); - mvr2r( &xcorr[split], &xcorr_itd[0], shift ); - - mvr2r( &xcorr_itd[STEREO_DFT_N_32k_ENC / 2 - XTALK_PHAT_LEN], gcc_phat, 2 * XTALK_PHAT_LEN + 1 ); - - - thres = peak_detect( xcorr_itd, &tmpf1, &index, &zero_itd, cohSNR, hCPE->hCoreCoder[0]->vad_flag, &second_max, &second_max_lag, hItd->prev_itd, flag_noisy_speech_snr, hItd->detected_itd_flag, &hItd->prev_max, &hItd->prev_index, &hItd->prev_avg_max, &total_max ); - - hStereoClassif->ave_ener_L = sum_nrg_L / ( NFFT_mid * NFFT_mid ); - hStereoClassif->ave_ener_R = sum_nrg_R / ( NFFT_mid * NFFT_mid ); - - if ( hCPE->hCoreCoder[0]->input_Fs == 16000 ) - { - total_max *= 2.0f; - } - hStereoClassif->unclr_fv[E_xcorr_itd_value] = total_max; - hStereoClassif->xtalk_fv[E_xcorr_itd_value] = total_max; - - - /*for tonal music items increase thresholing by a factor up to 2.*/ - if ( hCPE->hCoreCoder[0]->sp_aud_decision0 && ( index - STEREO_DFT_ITD_MAX_ANA ) != hItd->prev_itd && !flag_noisy_speech_snr && hCPE->hCoreCoder[0]->vad_flag && tmpf1 < 0.3 ) - { - thres *= 1.0f + 1.f * min( 1.f, max( 0.f, ( -1.0f * sfm_L + 0.5f ) / ( 0.5f - 0.2f ) ) ); - } - - - itd_cal_flag = 0; - /*smooth threshold value depending on sfm for music items*/ - if ( hCPE->hCoreCoder[0]->ini_frame == 0 || hCPE->last_element_mode != IVAS_CPE_DFT || !hCPE->hCoreCoder[0]->sp_aud_decision0 || flag_noisy_speech_snr || cohSNR < 20 ) - { - hItd->itd_thres = thres; - } - else - { - hItd->itd_thres = ( 1.0f - sfm_L ) * hItd->itd_thres + sfm_L * thres; - } - - if ( flag_noisy_speech_snr == 0 && hCPE->hCoreCoder[0]->vad_flag == 1 && hItd->detected_itd_flag == 0 && ( hItd->currFlatness < 1.5f || hCPE->hCoreCoder[0]->sp_aud_decision0 == 1 ) ) - { - hItd->itd_thres *= 1.5f; - } - if ( hCPE->hCoreCoder[0]->vad_flag == 0 || hItd->detected_itd_flag == 0 ) - { - hItd->itd_tracking = 0; - } - else if ( abs( hItd->prev_itd ) > 2 ) - { - hItd->itd_tracking = 1; - } - - if ( hItd->itd_tracking == 1 && ( second_max > hItd->itd_thres || tmpf1 - second_max < min( tmpf1 * 0.5f, 0.2f ) ) ) - { - index = second_max_lag; - } - - if ( hItd->itd_tracking == 1 && abs( hItd->prev_itd - ( index - STEREO_DFT_ITD_MAX_ANA ) ) <= max( 2, (int16_t) round_f( abs( hItd->prev_itd ) / 16.f ) ) ) - { - hItd->itd_thres *= 0.75f; - } - - if ( tmpf1 > hItd->itd_thres && !zero_itd ) - { - /* LP filter GCC PHAT peak to follow peak envelope */ - if ( tmpf1 > hItd->lp_phat_peak ) - { - alpha = LP_GCC_PHAT_UP; - } - else - { - alpha = LP_GCC_PHAT_DOWN; - } - hItd->lp_phat_peak = alpha * tmpf1 + ( 1 - alpha ) * hItd->lp_phat_peak; - hItd->itd_cnt++; - if ( hItd->itd_cnt > ITD_CNT_MAX || hItd->itd_hangover > 0 ) - { - /* If max count is reached, or if an ITD candidate is found during hangover, - set itd_cnt = ITD_CNT_MAX to ensure hangover is applied */ - hItd->itd_cnt = ITD_CNT_MAX; - } - hItd->itd_hangover = 0; - - itd = index - STEREO_DFT_ITD_MAX_ANA; - hItd->itd_nonzero_cnt = 0; /* (1+0+9) <= hItd->itd_nonzero_cnt <= (1+6+3) */ - itd_cal_flag = 1; /* Indicates P>T case */ - hItd->valid_itd_cnt = hItd->itd_cnt; /* Store last non-zero value (when P>T) before reset */ - hItd->detected_itd_flag = 1; - } - else - { - /* Set prev_itd hangover period */ - if ( hItd->itd_cnt == ITD_CNT_MAX ) - { - hItd->itd_hangover = max( 0, min( ITD_HO_MAX, (int16_t) ( hItd->lp_phat_peak * ITD_HO_GCC_PHAT_INCL + ITD_HO_GCC_PHAT_OFFS ) ) ); - } - - if ( hItd->itd_hangover > 0 ) - { - itd = hItd->prev_itd; - if ( hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER ) - { - hItd->itd_nonzero_cnt++; - } - hItd->itd_hangover--; - hItd->detected_itd_flag = 1; - } - else - { - itd = 0; - hItd->detected_itd_flag = 0; - } - - /* Reset */ - hItd->itd_cnt = 0; - hItd->lp_phat_peak = 0.0f; - } - - { - /* stereo Xtalk classifier */ - xtalk_classifier_dft( hCPE, itd, gcc_phat ); - } - - /*avoid enabling ITD fine control for music*/ - if ( !hCPE->hCoreCoder[0]->sp_aud_decision0 || flag_noisy_speech_snr || cohSNR < 20 ) - { - /* ITD fine control base on vad and correlation parameters */ - cor_lb_avrg = 0.0f; - par_L_avrg = 0.0f; - for ( i = 0; i < XCORR_LB_NUM_BANDS; i++ ) - { - num_cor = xcorr_lb[i * XCORR_LB_BAND_WIDTH] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH]; - den_cor_cur = xcorr_lb[i * XCORR_LB_BAND_WIDTH] * xcorr_lb[i * XCORR_LB_BAND_WIDTH] + 1.0f; - den_cor_prev = hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH] + 1.0f; - xcorr_max = xcorr_lb[i * XCORR_LB_BAND_WIDTH]; - sum_nrg_L_tmp = xcorr_lb[i * XCORR_LB_BAND_WIDTH]; - for ( j = 1; j < XCORR_LB_BAND_WIDTH; j++ ) - { - num_cor += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; - den_cor_cur += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; - den_cor_prev += hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] * hItd->prev_xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; - if ( xcorr_lb[i * XCORR_LB_BAND_WIDTH + j] > xcorr_max ) - { - xcorr_max = xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; - } - sum_nrg_L_tmp += xcorr_lb[i * XCORR_LB_BAND_WIDTH + j]; - } - cor_lb[i] = num_cor / ( sqrtf( den_cor_cur ) * sqrtf( den_cor_prev ) ); - cor_lb_avrg += cor_lb[i]; - par_L[i] = xcorr_max / ( sum_nrg_L_tmp + FLT_MIN ); - par_L_avrg += par_L[i]; - } - cor_lb_avrg /= XCORR_LB_NUM_BANDS; - par_L_avrg /= XCORR_LB_NUM_BANDS; - - /*Breakdown of fine-control conditions */ - fc_condition_1 = abs( hItd->prev_itd ) > 0.2f * abs( itd ); - fc_condition_2 = cor_lb_avrg > 0.85f; - fc_condition_3 = ( cor_lb_avrg > 0.7f && ( cor_lb[0] > 0.9f || cor_lb[1] > 0.9f || cor_lb[2] > 0.9f ) && hItd->prev_sum_nrg_L_lb > 0.5f * sum_nrg_L_lb && hItd->prev_sum_nrg_L_lb < 2.0f * sum_nrg_L_lb ); - fc_condition_4 = par_L_avrg > 0.6f; - fc_condition_5 = hItd->prev_itd != 0; - fc_condition_6_a = itd * hItd->prev_itd < 0; /* ITD sign change */ - fc_condition_6_b = itd * hItd->prev_itd == 0; /* ITD jump to zero */ - fc_condition_6_c = abs( itd - hItd->prev_itd ) > 0.5f * ( ( abs( itd ) > abs( hItd->prev_itd ) ) ? abs( itd ) : abs( hItd->prev_itd ) ); /* Magnitude of the ITD jump */ - - /* Combining conditions 1,2,3,4 */ - fc_condition_1234 = fc_condition_1 && ( fc_condition_2 || fc_condition_3 || fc_condition_4 ); - - if ( ( fc_condition_1234 && ( ( fc_condition_5 && fc_condition_6_b ) || fc_condition_6_c ) ) || ( fc_condition_1234 && fc_condition_6_a ) ) - { - itd = hItd->prev_itd; - - if ( hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER ) - { - hItd->itd_nonzero_cnt++; - } - hItd->detected_itd_flag = 1; - } - - /* stop the fine control when inactive or very high mssnr is detected*/ - if ( mssnr < 6e-7f * HIGHT_SNR_VOICE_TH || mssnr > 200 * HIGHT_SNR_VOICE_TH ) - { - hItd->itd_nonzero_cnt = MAX_ITD_VAD_HANGOVER; - } - - if ( vad_flag_itd ) - { - /* Fine-control for hangover if set HR period = 0 or if HR period expires */ - /* However fine-control shouldn't be used when HR is disabled because itd_cnt < 2 - hence the extra last condition */ - if ( hItd->itd_hangover == 0 && hItd->prev_itd != 0 && itd == 0 && itd_cal_flag != 1 && hItd->itd_nonzero_cnt < MAX_ITD_VAD_HANGOVER && hItd->valid_itd_cnt == ITD_CNT_MAX && hItd->pre_vad == 1 ) - { - itd = hItd->prev_itd; - hItd->itd_nonzero_cnt++; - hItd->detected_itd_flag = 1; - } - hItd->pre_vad = 1; - } - else - { - hItd->pre_vad = 0; - } - - if ( itd == 0 && itd_cal_flag != 1 ) - { - hItd->itd_nonzero_cnt = 0; - } - - hItd->prev_sum_nrg_L_lb = sum_nrg_L_lb; - mvr2r( xcorr_lb, hItd->prev_xcorr_lb, STEREO_DFT_XCORR_LB_MAX ); - } - /*save previous flag*/ - prev_itd_max = hItd->hybrid_itd_max; - /* enable hybrid ITD handling for very large ITDs*/ - hItd->hybrid_itd_max = ( abs( itd ) > STEREO_DFT_ITD_MAX && abs( itd ) < STEREO_DFT_ITD_MAX_ANA && !hCPE->hCoreCoder[0]->sp_aud_decision0 && hCPE->element_brate < IVAS_32k ); - /* Update memory */ - hItd->prev_itd = itd; - - itd = check_bounds_s( itd, -STEREO_DFT_ITD_MAX, STEREO_DFT_ITD_MAX ); - - /*Inverse the time diff*/ - hItd->itd[k_offset] = -1.f * itd; - - /* collect UNCLR classifier parameters */ - hStereoClassif->unclr_fv[E_ITD] = hItd->itd[k_offset]; - - - /* limit ITD range for MDCT stereo even more */ - if ( hCPE->element_mode == IVAS_CPE_MDCT && fabsf( hItd->itd[k_offset] ) > ITD_MAX_MDCT ) - { - itd = 0; - } - - stereo_dft_quantize_itd( -1 * itd, hItd->itd + k_offset, input_frame * FRAMES_PER_SEC, hItd->itd_index + k_offset ); - - hItd->deltaItd[k_offset] = hItd->itd[k_offset] - hItd->td_itd[k_offset]; - - if ( hItd->hybrid_itd_max ) - { - /*check if there is an ITD flip*/ - itd_max_flip = ( hItd->itd[k_offset] * hItd->itd[k_offset - 1] < 0 ); - - if ( hItd->deltaItd[k_offset - 1] != 0 && itd_max_flip == 0 ) - { - int16_t tmp_itd = (int16_t) floorf( ( ( hItd->prev_itd ) * ( (float) input_frame / 640 ) ) + 0.5f ); - hItd->deltaItd[k_offset] = -1.0f * tmp_itd - hItd->td_itd[k_offset]; - } - } - /*signal change for next frame*/ - if ( prev_itd_max == 1 && hItd->hybrid_itd_max == 0 ) - { - hItd->hybrid_itd_max = -1; - } - - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_dft_td_itd.c b/lib_enc/ivas_stereo_dft_td_itd.c index eaafe3bdf..fbcb2ce00 100644 --- a/lib_enc/ivas_stereo_dft_td_itd.c +++ b/lib_enc/ivas_stereo_dft_td_itd.c @@ -52,10 +52,8 @@ #define STEREO_DFT_CHANNEL_EXTR_LPC_ORDER 10 #define STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT 320 -#ifdef IVAS_FLOAT_FIXED -#define FLR_FX 16384 // Q15 -#define ONE_HALF 24576 // Q14 -#endif +#define FLR_FX 16384 // Q15 +#define ONE_HALF 24576 // Q14 const Word16 wac_swb_h_fx[LPC_SHB_ORDER + 1] = { 32767, 32758, @@ -89,33 +87,6 @@ const Word16 wac_swb_l_fx[LPC_SHB_ORDER + 1] = { * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_td_get_td_itd( - int16_t *td_itd, /* o : td_itd in samples at sampling frequency */ - int16_t *td_itd_32, /* o : td_itd in samples at 32kHz */ - const float itd, /* i : itd in samples at sampling frequency */ - const int32_t input_Fs /* i : sampling frequency */ -) -{ - /* *td_itd is the closest integer to itd that transforms into an integer value * - * under the transform x -> (32000/fs) x. */ - int16_t d; - - if ( input_Fs == 32000 ) - { - *td_itd_32 = *td_itd = (int16_t) itd; - } - else - { - assert( ( input_Fs % 16000 ) == 0 && "sampling frequency should be divisible by 16000" ); - d = (int16_t) ( input_Fs / 16000 ); - *td_itd_32 = 2 * (int16_t) floorf( itd / d + 0.5f ); - *td_itd = ( ( *td_itd_32 ) / 2 ) * d; - } - - return; -} -#else static void stereo_td_get_td_itd_fx( Word16 *td_itd, /* o : td_itd in samples at sampling frequency */ Word16 *td_itd_32, /* o : td_itd in samples at 32kHz */ @@ -152,7 +123,6 @@ static void stereo_td_get_td_itd_fx( return; } -#endif /*--------------------------------------------------------------- * stereo_td_channel_extrapolate() @@ -160,135 +130,6 @@ static void stereo_td_get_td_itd_fx( * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void stereo_td_channel_extrapolate( - Encoder_State **sts, - const int16_t dft_ovl, - const float shift_mem[], - float shift_input[], - const int16_t input_frame, - const int16_t itd_shift, - const int16_t lagging_channel, - float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ -) -{ - int16_t leading_channel, i, size_ovl, pred_ovlp; - float g, nsr, g_lpc, dot_lead_lag, dot_lead_lead, dot_lag_lag; - float window[STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT], mem_zero[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER]; - float residual[STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + ( STEREO_DFT_ITD_MAX * L_FRAME48k ) / L_FRAME32k]; - float r[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER + 1]; - float A[STEREO_DFT_CHANNEL_EXTR_LPC_ORDER + 1]; - float shift_combined[L_FRAME48k + L_FRAME48k]; - int16_t flag; - int16_t pitch_lag; - int16_t res_shift; - int16_t pitch0; - - set_f( shift_combined, 0.0f, L_FRAME48k + L_FRAME48k ); - set_f( residual, 0.0f, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + ( STEREO_DFT_ITD_MAX * input_frame ) / L_FRAME32k ); - - leading_channel = ( lagging_channel + 1 ) % 2; - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - size_ovl = dft_ovl; - pitch0 = sts[0]->pitch[0]; - } - else - { - size_ovl = input_frame; - pitch0 = sts[lagging_channel]->pitch[0]; - } - - pred_ovlp = input_frame / 10; - - /*get pitch lag from previous frame */ - pitch_lag = (int16_t) ( pitch0 * ( (float) input_frame / L_FRAME ) ); - - /* compute the parameters g, nsr and g_lpc */ - dot_lead_lag = EPSILON; - dot_lead_lead = EPSILON; - dot_lag_lag = EPSILON; - for ( i = 0; i < size_ovl; i++ ) - { - shift_combined[i] = shift_mem[i]; - dot_lead_lag += input_mem[leading_channel][i] * shift_mem[i]; - dot_lead_lead += input_mem[leading_channel][i] * input_mem[leading_channel][i]; - dot_lag_lag += shift_mem[i] * shift_mem[i]; - } - for ( i = 0; i < input_frame - itd_shift; i++ ) - { - shift_combined[i + size_ovl] = shift_input[i]; - dot_lead_lag += sts[leading_channel]->input[i] * shift_input[i]; - dot_lead_lead += sts[leading_channel]->input[i] * sts[leading_channel]->input[i]; - dot_lag_lag += shift_input[i] * shift_input[i]; - } - - g = dot_lead_lag / dot_lead_lead; - nsr = 1 - ( ( dot_lead_lag * dot_lead_lag ) / ( dot_lead_lead * dot_lag_lag ) ); - - g = check_bounds( g, -1, 1.5f ); - nsr = check_bounds( nsr, 0.0f, 1 ); - g_lpc = sqrtf( nsr ); - - /* rectangular window */ - set_f( window, 1.0f, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT ); - set_zero( mem_zero, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER ); - - /* get the LPC filter */ - autocorr( shift_combined + input_frame + size_ovl - itd_shift - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, r, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, window, 0, 0, 0 ); - - /* Ensure R[0] isn't zero when entering Levinson-Durbin */ - r[0] = max( r[0], 1.0e-8f ); - for ( i = 0; i <= STEREO_DFT_CHANNEL_EXTR_LPC_ORDER; i++ ) - { - r[i] = r[i] * wac_swb[i]; - } - - /* Ensure R[0] isn't zero when entering Levinson-Durbin */ - r[0] += 1.0e-8f; - - flag = lev_dur( A, r, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, NULL ); - - if ( flag == 1 ) - { - g_lpc = 0.0f; - } - else - { - /* get the residual */ - fir( shift_combined + input_frame + size_ovl - itd_shift - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, A, residual, mem_zero, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, 0 ); - - /* extend the residual */ - /* to prevent out of bound reading */ - - res_shift = ( pitch_lag < PIT_MAX ? pitch_lag : itd_shift ); - - for ( i = STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT; i < STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + itd_shift; i++ ) - { - residual[i] = residual[i - res_shift]; - } - - /* perform sythesis */ - syn_filt( A, STEREO_DFT_CHANNEL_EXTR_LPC_ORDER, residual, shift_combined + input_frame + size_ovl - STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT - itd_shift, STEREO_DFT_CHANNEL_EXTR_LPC_VEC_LIMIT + itd_shift, mem_zero, 0 ); - } - - mvr2r( shift_combined + size_ovl, shift_input, input_frame ); - - /* use this synthesis part to replace the zeros in the lagging channel */ - for ( i = input_frame - itd_shift; i < input_frame; i++ ) - { - shift_input[i] = ( g_lpc * shift_input[i] ) + ( g * sts[leading_channel]->input[i] ); - } - - /* smooth transition (currently done by blending over linearly, could be replaced by something more elaborate.) */ - for ( i = input_frame - itd_shift - pred_ovlp; i < input_frame - itd_shift; i++ ) - { - shift_input[i] = ( i - input_frame + itd_shift + pred_ovlp ) * ( ( g_lpc * shift_input[i] ) + ( g * sts[leading_channel]->input[i] ) ) / pred_ovlp + ( input_frame - itd_shift - i ) * shift_input[i] / pred_ovlp; - } - - return; -} -#else static void stereo_td_channel_extrapolate_fx( Encoder_State **sts, const Word16 dft_ovl, @@ -478,7 +319,6 @@ static void stereo_td_channel_extrapolate_fx( move16(); return; } -#endif /*--------------------------------------------------------------- * stereo_td_itd() @@ -486,131 +326,6 @@ static void stereo_td_channel_extrapolate_fx( * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_td_itd( - ITD_DATA *hITD, /* i/o: ITD data structure */ - float input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX], /* o : ITD memory (only used in DFT Stereo) */ - const int16_t hybrid_itd_flag, /* i : flag for hybrid TD/FD ITD processing */ - const int16_t dft_ovl, /* i : size of DFT overlap */ - Encoder_State **sts, /* i/o: Encoder state structure */ - const int16_t input_frame, /* i : input frame length */ - float *input_mem[CPE_CHANNELS] /* i/o: input buffer memory */ -) -{ - int16_t i, ch, n; - int16_t size_ovl, k_offset; - int16_t shift[2]; - int16_t itd, itd_max; - float shift_input[L_FRAME48k]; - float shift_mem[L_FRAME48k]; - float *mdct_mem[CPE_CHANNELS]; - - k_offset = STEREO_DFT_OFFSET; - set_f( shift_input, 0.0f, input_frame ); - if ( sts[0]->element_mode == IVAS_CPE_MDCT ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mdct_mem[n] = sts[n]->old_input_signal; - } - } - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - /* Update the parameters */ - for ( i = 0; i < k_offset; i++ ) - { - hITD->deltaItd[i] = hITD->deltaItd[i + 1]; - hITD->td_itd[i] = hITD->td_itd[i + 1]; - hITD->td_itd_32k[i] = hITD->td_itd_32k[i + 1]; - } - } - /*reset TD ITDs in case of hybrid itd_max change - turn hybrid ITD off*/ - if ( hITD->hybrid_itd_max == -1 && hybrid_itd_flag == 0 ) - { - hITD->td_itd[k_offset] = 0; - hITD->td_itd_32k[k_offset] = 0; - } - if ( hybrid_itd_flag == 0 ) - { - return; - } - stereo_td_get_td_itd( &( hITD->td_itd[k_offset] ), &( hITD->td_itd_32k[k_offset] ), hITD->itd[k_offset], sts[0]->input_Fs ); - - /* initializations*/ - { - size_ovl = dft_ovl; - - itd_max = ( STEREO_DFT_ITD_MAX * input_frame ) / L_FRAME32k; - - assert( ( fabsf( hITD->itd[k_offset] ) <= itd_max ) && "ITD value is too high!" ); - assert( ( fabsf( hITD->itd[k_offset - 1] ) <= itd_max ) && "ITD value is too high!" ); - - itd = hITD->td_itd[k_offset]; - - /*Time shift with current ITD*/ - if ( itd < 0 ) - { - shift[1] = 0; - shift[0] = -itd; - ch = 0; - } - else - { - shift[1] = itd; - shift[0] = 0; - ch = 1; - } - - /* extrapolate lagging channel */ - if ( shift[ch] > 0 ) - { - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - /* store last part of signal before extrapolation */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( sts[n]->input + input_frame - dft_ovl, input_mem_itd[n], dft_ovl ); - } - - /*shift past part*/ - mvr2r( input_mem[ch] + shift[ch], shift_mem, size_ovl - shift[ch] ); - mvr2r( sts[ch]->input, shift_mem + size_ovl - shift[ch], shift[ch] ); - } - else - { - /*shift past part*/ - mvr2r( mdct_mem[ch] + shift[ch], shift_mem, input_frame - shift[ch] ); - mvr2r( sts[ch]->input, shift_mem + input_frame - shift[ch], shift[ch] ); - } - /*shift current part*/ - mvr2r( sts[ch]->input + shift[ch], shift_input, input_frame - shift[ch] ); - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - /*Extrapolate current frame*/ - stereo_td_channel_extrapolate( sts, dft_ovl, shift_mem, shift_input, input_frame, shift[ch], ch, input_mem ); - } - else - { - /*Extrapolate current frame*/ - stereo_td_channel_extrapolate( sts, 0, shift_mem, shift_input, input_frame, shift[ch], ch, mdct_mem ); - } - - /* write back the extrapolated signal into sts[ch]->input */ - mvr2r( shift_input, sts[ch]->input, input_frame ); - if ( sts[0]->element_mode == IVAS_CPE_DFT ) - { - mvr2r( shift_mem, input_mem[ch], size_ovl ); - } - else - { - mvr2r( shift_mem, mdct_mem[ch], input_frame ); - } - } - } - - return; -} -#else void stereo_td_itd_fx( ITD_DATA *hITD, /* i/o: ITD data structure */ Word16 input_mem_itd[CPE_CHANNELS][STEREO_DFT_OVL_MAX], /* o : ITD memory (only used in DFT Stereo) */ @@ -782,55 +497,12 @@ void stereo_td_itd_fx( return; } -#endif /*--------------------------------------------------------------- * stereo_td_itd_mdct_stereo() * * Time-domain ITD in MDCT stereo * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_td_itd_mdct_stereo( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder handle */ - const int16_t vad_flag_dtx[], /* i : VAD dtx flags */ - const int16_t vad_hover_flag[], /* i : VAD hangover flags */ - const int16_t input_frame /* i : frame length */ -) -{ - int16_t i; - float bin_nrgL[STEREO_DFT_N_32k_ENC]; - float bin_nrgR[STEREO_DFT_N_32k_ENC]; - float DFT[CPE_CHANNELS][STEREO_DFT_N_MAX_ENC]; - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; - - if ( hCPE->hStereoMdct != NULL && hCPE->hStereoMdct->hItd != NULL ) - { - hStereoMdct = hCPE->hStereoMdct; - - hCPE->hStereoMdct->hItd->td_itd_32k[STEREO_DFT_OFFSET] = 0; - hStereoMdct->hItd->td_itd[STEREO_DFT_OFFSET] = 0; - - /* Update the parameters */ - for ( i = 0; i < STEREO_DFT_OFFSET; i++ ) - { - hStereoMdct->hItd->deltaItd[i] = hStereoMdct->hItd->deltaItd[i + 1]; - hStereoMdct->hItd->td_itd[i] = hStereoMdct->hItd->td_itd[i + 1]; - hStereoMdct->hItd->td_itd_32k[i] = hStereoMdct->hItd->td_itd_32k[i + 1]; - } - - stereo_dft_enc_analyze( hCPE->hCoreCoder, CPE_CHANNELS, input_frame, NULL, hStereoMdct, DFT, hCPE->input_mem ); - - /*call ITD function*/ - stereo_dft_enc_compute_itd( hCPE, DFT[0], DFT[1], STEREO_DFT_OFFSET, input_frame, vad_flag_dtx, vad_hover_flag, bin_nrgL, bin_nrgR ); - - /* Time Domain ITD compensation using extrapolation */ - stereo_td_itd( hStereoMdct->hItd, NULL, 1, hStereoMdct->hDft_ana->dft_ovl, hCPE->hCoreCoder, input_frame, hCPE->input_mem ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void stereo_td_itd_mdct_stereo_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder handle */ const Word16 vad_flag_dtx[], /* i : VAD dtx flags */ @@ -887,4 +559,3 @@ void stereo_td_itd_mdct_stereo_fx( return; } -#endif diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index c4f14de99..4494b56b3 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -151,7 +151,6 @@ const Word32 ipd_ff_Q31[STEREO_DMX_EVS_NB_SUBBAND_MAX] = { * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void estimate_itd_wnd_fft_fx( const Word32 *input, /* i : input signal Q16 */ Word32 *specr, /* o : real-part spectra Q(31-spec_e) */ @@ -226,24 +225,12 @@ static Word32 find_poc_peak_fx( const Word16 input_frame, /* i : input frame length per channel */ const Word32 ratio_fixed /* i : adapting ratio */ ); -#else -static void estimate_itd_wnd_fft( const float *input, float *specr, float *speci, const float *rfft_coef, const float *wnd, const int16_t input_frame ); -static void calc_poc( STEREO_DMX_EVS_POC_HANDLE hPOC, STEREO_DMX_EVS_PHA_HANDLE hPHA, const float wnd[], const float rfft_coef[], const float specLr[], const float specLi[], const float specRr[], const float specRi[], const int16_t input_frame ); -static ivas_error estimate_itd( float *corr, STEREO_DMX_EVS_POC_HANDLE hPOC, STEREO_DMX_EVS_PHA_HANDLE hPHA, const float srcL[], const float srcR[], float itd[], const int16_t input_frame ); -static void weighted_ave( const float src1[], const float src2[], float dst[], const float gain, const float old_gain, const int16_t input_frame, const float wnd[] ); -static void adapt_gain( const float src[], float dst[], const float gain, const float old_gain, const int16_t input_frame, const float wnd[] ); -static void create_M_signal( const float srcL[], const float srcR[], float dmx[], const float w_curr, const int16_t input_frame, const float wnd[], float *w_prev, float *dmx_energy, float *src_energy ); -static float find_poc_peak( STEREO_DMX_EVS_POC_HANDLE hPOC, float itd[], const int16_t input_frame, const float ratio ); -static void calc_energy( const float src1[], const float src2[], float energy[], const int16_t input_frame, const float ratio ); - -#endif /*-------------------------------------------------------------------* * estimate_itd_wnd_fft() * * Transforms input signal from time domain into frequency domain. * The input signal is windowed before being transformed. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void estimate_itd_wnd_fft_fx( const Word32 *input, /* i : input signal Q16 */ Word32 *specr, /* o : real-part spectra Q(31-spec_e) */ @@ -307,61 +294,12 @@ void estimate_itd_wnd_fft_fx( return; } -#else -void estimate_itd_wnd_fft( - const float *input, /* i : input signal */ - float *specr, /* o : real-part spectra */ - float *speci, /* o : imaginary-part spectra */ - const float *rfft_coef, /* i : rfft coef */ - const float *wnd, /* i : window coef */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - int16_t n0, i; - float rfft_buf[L_FRAME48k]; - int16_t step, bias; - - n0 = input_frame >> 1; - if ( input_frame == L_FRAME16k ) - { - step = 3; - bias = 1; - } - else - { - step = 1; - bias = 0; - } - - for ( i = 0; i < input_frame; i++ ) - { - /* window */ - rfft_buf[i] = input[i] * wnd[i * step + bias]; - } - - rfft( rfft_buf, rfft_coef, input_frame, -1 ); - - for ( i = 1; i < n0; i++ ) - { - specr[i] = rfft_buf[i * 2]; - speci[i] = rfft_buf[i * 2 + 1]; - } - - specr[0] = rfft_buf[0]; - specr[n0] = rfft_buf[1]; - speci[0] = 0.f; - speci[n0] = 0.f; - - return; -} -#endif /*-------------------------------------------------------------------* * calc_poc() * * calculate phase only correlation *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void calc_poc_fx( STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ STEREO_DMX_EVS_PHA_HANDLE hPHA, /* i/o: correlation filter structure */ @@ -1178,754 +1116,193 @@ static void calc_poc_fx( return; } -#else -static void calc_poc( + + +/*-------------------------------------------------------------------* + * find_poc_peak() + * + * find peak phase only correlation + *-------------------------------------------------------------------*/ +static Word32 find_poc_peak_fx( STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ - STEREO_DMX_EVS_PHA_HANDLE hPHA, /* i/o: correlation filter structure */ - const float wnd[], /* i : window coef */ - const float rfft_coef[], /* i : RFFT coef */ - const float specLr[], /* i : Lch real-part spectra */ - const float specLi[], /* i : Lch imaginary-part input signal */ - const float specRr[], /* i : Rch real-part spectra */ - const float specRi[], /* i : Rch imaginary-part input signal */ - const int16_t input_frame /* i : input frame length per channel */ + Word32 itd_fx[], /* o : estimated itd */ + const Word16 input_frame, /* i : input frame length per channel */ + const Word32 ratio_fixed /* i : adapting ratio */ ) { - int16_t i, n1, n2; - int16_t n0, *itdLR; - const float *s; - float *P; - float tmp1, tmp2, Lr, Li, Rr, Ri, gamma, igamma, iN; - - float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary values for searching phase angle*/ - float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; - float rfft_buf[L_FRAME48k]; - int16_t step, bias; - int16_t mult_angle; - int16_t j; - int16_t end; - - int16_t cos_step, cos_max; - float eps_cos, eps_sin, EPS; - - int16_t isd_cnt_h, isd_cnt_l, ild_cnt, n, freq_8k, freq_ipd_max, nsbd, input_frame_pha; - float Nr, Ni, Dr, Di, tPr, tPi, Pn, energy, isd_rate; - float eneL, eneR, IPDr, IPDi, tIPDr, tIPDi, ICCr; - float *Pr, *Pi, *ipd_ff, *p_curr_taps; - float rfft_pha_buf[L_FRAME48k], tEr[STEREO_DMX_EVS_NB_SUBBAND_MAX], tEl[STEREO_DMX_EVS_NB_SUBBAND_MAX]; + Word16 itd_cand[CPE_CHANNELS], i, n, cnt[CPE_CHANNELS], Lh, peak_range, *on, *itdLR, prev_off[CPE_CHANNELS], eps_fx; + Word32 Q_fx[CPE_CHANNELS], aQ_fx[CPE_CHANNELS], cQ_fx[CPE_CHANNELS], width_fx, *peak_width_fx, *peakQ_fx, cconfidence_fx, *P_fx, tmpf_fx, eps2_fx; + Word16 tmpf_e = 0, eps2_e = 0, Q_e[CPE_CHANNELS], eps_e = 15, peakQ_e[CPE_CHANNELS]; + move16(); + move16(); + move16(); /* Initialization */ - iN = 1.0f / (float) input_frame; - s = hPOC->sin; - P = hPOC->P; - n0 = input_frame / 2; + Lh = shr( input_frame, 1 ); + on = hPOC->ispeak; itdLR = hPOC->itdLR; + itd_cand[0] = itd_cand[1] = 0; + move16(); + move16(); + move16(); + move16(); - Pr = hPHA->Pr; - Pi = hPHA->Pi; - nsbd = n0 / STEREO_DMX_EVS_SUBBAND_SIZE; - input_frame_pha = input_frame / STEREO_DMX_EVS_SUBBAND_SIZE; - - igamma = STEREO_DMX_EVS_POC_GAMMA * iN; - gamma = 1.0f - igamma; - - step = 1; - bias = 0; - cos_step = 2; - cos_max = n0; - mult_angle = 3; + width_fx = 816043776; /*0.38f in Q31*/ + eps_fx = Inv16( input_frame, &eps_e ); + peak_width_fx = hPOC->peak_width_fx; + peakQ_fx = hPOC->peakQ_fx; // Q16 + move16(); + move16(); + move16(); + set16_fx( peakQ_e, 31 - Q16, CPE_CHANNELS ); + Q_fx[0] = hPOC->P_fx[Lh]; // Q31 + Q_fx[1] = 0; + move16(); + move16(); + set16_fx( Q_e, 0, CPE_CHANNELS ); // Q31 - if ( input_frame == L_FRAME16k ) - { - step = 3; - bias = 1; - cos_step = 4; - cos_max = input_frame; - mult_angle = 2; /*****/ - } - if ( input_frame == L_FRAME32k ) - { - mult_angle = 2; - } + P_fx = hPOC->P_fx; - end = min( n0, 320 ); - specPOr[0] = sign( specLr[0] * specRr[0] ) * wnd[bias]; - specPOi[0] = 0.0f; - EPS = hPOC->eps; - if ( input_frame == L_FRAME48k ) + FOR( i = 1; i < hPOC->shift_limit; i++ ) /*find peaks of POC P[] with positive and negative ITD */ { - for ( i = 1; i < n0 / 2; i++ ) + IF( GT_32( P_fx[Lh - i], Q_fx[0] ) ) { - eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; - eps_sin = s[i * cos_step /*i_for*/] * EPS; - Lr = specLr[i] + specRr[i] * eps_cos + specRi[i] * eps_sin; - Li = specLi[i] - specRr[i] * eps_sin + specRi[i] * eps_cos; - Rr = specRr[i] + specLr[i] * eps_cos + specLi[i] * eps_sin; - Ri = specRi[i] - specLr[i] * eps_sin + specLi[i] * eps_cos; - - specPOr[i] = ( Lr * Rr + Li * Ri ); - specPOi[i] = ( Lr * Ri - Li * Rr ); - j = n0 - i; - if ( j < 320 ) - { - Lr = specLr[j] - specRr[j] * eps_cos + specRi[j] * eps_sin; - Li = specLi[j] - specRr[j] * eps_sin - specRi[j] * eps_cos; - Rr = specRr[j] - specLr[j] * eps_cos + specLi[j] * eps_sin; - Ri = specRi[j] - specLr[j] * eps_sin - specLi[j] * eps_cos; - - specPOr[j] = ( Lr * Rr + Li * Ri ); - specPOi[j] = ( Lr * Ri - Li * Rr ); - } + Q_fx[0] = P_fx[Lh - i]; // Q31 + itd_cand[0] = i; + Q_e[0] = 0; + move32(); + move16(); + move16(); } - } - else /* 16kHz and 32 kHz*/ - { - for ( i = 1; i < n0 / 2; i++ ) + IF( GT_32( P_fx[Lh + i], Q_fx[1] ) ) { - eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; - eps_sin = s[i * cos_step /*i_for*/] * EPS; - - Lr = specLr[i] + specRr[i] * eps_cos + specRi[i] * eps_sin; - Li = specLi[i] - specRr[i] * eps_sin + specRi[i] * eps_cos; - Rr = specRr[i] + specLr[i] * eps_cos + specLi[i] * eps_sin; - Ri = specRi[i] - specLr[i] * eps_sin + specLi[i] * eps_cos; - specPOr[i] = ( Lr * Rr + Li * Ri ); - specPOi[i] = ( Lr * Ri - Li * Rr ); - - j = n0 - i; - Lr = specLr[j] - specRr[j] * eps_cos + specRi[j] * eps_sin; - Li = specLi[j] - specRr[j] * eps_sin - specRi[j] * eps_cos; - Rr = specRr[j] - specLr[j] * eps_cos + specLi[j] * eps_sin; - Ri = specRi[j] - specLr[j] * eps_sin - specLi[j] * eps_cos; - specPOr[j] = ( Lr * Rr + Li * Ri ); - specPOi[j] = ( Lr * Ri - Li * Rr ); + Q_fx[1] = P_fx[Lh + i]; // Q31 + itd_cand[1] = -i; + Q_e[1] = 0; + move32(); + move16(); + move16(); } } - { - /* i=n0/2*/ - Lr = specLr[i] + specRi[i] * EPS; - Li = specLi[i] - specRr[i] * EPS; - Rr = specRr[i] + specLi[i] * EPS; - Ri = specRi[i] - specLr[i] * EPS; - specPOr[i] = ( Lr * Rr + Li * Ri ); - specPOi[i] = ( Lr * Ri - Li * Rr ); - } - /* complex spectrum (specPOr[i], specPOi[i]) are placed on an unit circle without using srqt()*/ - for ( i = 1; i < 10; i++ ) /*search from 4 angles */ - { - tmp1 = wnd[i * step + bias] * gamma; - specPOr[i] = sign( specPOr[i] ) * 0.866f * tmp1; /* low angles are more frequent for low frequency */ - specPOi[i] = sign( specPOi[i] ) * 0.5f * tmp1; - gamma -= igamma; - } - for ( ; i < n0 >> 4; i++ ) /*search from 4 angles */ + Word16 tmp1, tmp11, tmp_var1, tmp12 = 0, tmp13; + Word32 tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp14, tmp15, tmp16; + Word16 tmp8_e, tmp9_e, tmp10_e, tmp11_e, tmp12_e, tmp13_e, tmp15_e; + + FOR( n = 0; n < CPE_CHANNELS; n++ ) { - tmp1 = wnd[i * step + bias] * gamma * 0.7071f; + prev_off[n] = !on[n]; + move16(); - specPOr[i] = sign( specPOr[i] ) * tmp1; - specPOi[i] = sign( specPOi[i] ) * tmp1; /* low accuracy is adequate for low frequency */ - gamma -= igamma; - } + cnt[n] = 0; + aQ_fx[n] = Mpy_32_32( Q_fx[n], width_fx ); // Q31+Q31 - 31 + cQ_fx[n] = P_fx[Lh - itd_cand[n]]; // Q31 + move16(); + move16(); + move16(); - for ( ; i < n0 >> 3; i++ ) /* binary search from 8 angles */ - { - tmp1 = wnd[i * step + bias] * gamma; + tmp12 = 0, tmp8_e = 0, tmp9_e = 0, tmp10_e = 0, tmp11_e = 0, tmp12_e = 0; + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); - if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) - { - specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; /* cos(PI/8)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; - } - else - { - specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; /* cos(PI*3/8)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; - } - gamma -= igamma; - } - for ( ; i < end; i++ ) /* binary search from 16 angles */ - { - tmp1 = wnd[i * step + bias] * gamma; - if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) - { - if ( ( specPOr[i] * 0.414213f - specPOi[i] ) * ( specPOr[i] * 0.414213f + specPOi[i] ) > 0 ) /*tan(PI/8)*/ - { - specPOr[i] = sign( specPOr[i] ) * tmp1 /*0.980785f */ * s[140 * mult_angle]; /* cos(PI/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /*0.195090f */ * s[20 * mult_angle]; - } - else - { - specPOr[i] = sign( specPOr[i] ) * tmp1 /* 0.831470f */ * s[100 * mult_angle]; /*cos(PI*3/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /* 0.555570f*/ * s[60 * mult_angle]; - } - } - else + /*compute peak_range*/ + tmp1 = idiv1616( hPOC->shift_limit, STEREO_DMX_EVS_FIND_POC_PEAK_TAU ); + peak_range = idiv1616( add( (Word16) abs( itd_cand[n] ), tmp1 ), STEREO_DMX_EVS_FIND_POC_PEAK_TAU2 ); // Q0 + + FOR( i = 1; i <= peak_range; i++ ) { - if ( ( specPOr[i] - specPOi[i] * 0.414213f ) * ( specPOr[i] + specPOi[i] * 0.414213f ) > 0 ) /*tan(PI/8)*/ - { - specPOr[i] = sign( specPOr[i] ) * tmp1 /** 0.555570f*/ * s[60 * mult_angle]; /*cos(PI*5/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.831470f*/ * s[100 * mult_angle]; - } - else - { - specPOr[i] = sign( specPOr[i] ) * tmp1 /** 0.195090f*/ * s[20 * mult_angle]; /*cos(PI*7/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.980785f*/ * s[140 * mult_angle]; - } + cnt[n] = add( cnt[n], extract_l( L_add( GT_32( P_fx[Lh - itd_cand[n] + i], aQ_fx[n] ), GT_32( P_fx[Lh - itd_cand[n] - i], aQ_fx[n] ) ) ) ); + tmp4 = L_add( P_fx[Lh - itd_cand[n] + i], P_fx[Lh - itd_cand[n] - i] ); // Q31 + cQ_fx[n] = L_add( cQ_fx[n], tmp4 ); + move16(); + move16(); } - gamma -= igamma; - } - if ( i < n0 ) - { - gamma -= igamma * ( n0 - 320 ); - } - for ( ; i < n0; i++ ) /*neglect higher frequency bins when 48 kHz samplng*/ - { - specPOr[i] = 0.f; - specPOi[i] = 0.f; - } - specPOr[n0] = sign( specLr[n0] * specRr[n0] ) * wnd[i * step + bias] * gamma; + /*compute eps2_fx*/ + tmp5 = Mpy_32_32( peak_width_fx[n], ratio_fixed ); // Q31 + Q16 - Q31 + tmp6 = Mpy_32_32( L_deposit_h( cnt[n] ), L_sub( ONE_IN_Q31, ratio_fixed ) ); // Q16 + Q31 - 31 + peak_width_fx[n] = L_add( tmp5, tmp6 ); // Q16 + move16(); + tmp7 = Mpy_32_32( L_deposit_h( eps_fx ), peak_width_fx[n] ); // eps_e + 31 - Q16 - hPHA->init_frmCntr--; - if ( hPHA->init_frmCntr < 0 ) - { - hPHA->init_frmCntr = 0; - } - freq_8k = L_FRAME16k / 2; - freq_ipd_max = (int16_t) ( freq_8k * 5000.0f / ( 8000.0f * STEREO_DMX_EVS_SUBBAND_SIZE ) ); + eps2_fx = L_shr( tmp7, 2 ); + eps2_e = add( eps_e, 31 - Q16 ); - /* Memorize the filters N-1 */ - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( hPHA->p_curr_taps[n] ) - { - hPHA->p_prev_taps[n] = hPHA->prev_taps[n]; - mvr2r( hPHA->p_curr_taps[n], hPHA->p_prev_taps[n], hPHA->pha_len ); - } - else - { - hPHA->p_prev_taps[n] = NULL; - } - } + /*compute Q_fx[n]*/ + tmp8 = BASOP_Util_Add_Mant32Exp( Q_fx[n], 0, eps2_fx, eps2_e, &tmp8_e ); + tmp_var1 = BASOP_Util_Divide3232_Scale( cQ_fx[n], L_deposit_h( ( add( shl( peak_range, 1 ), 1 ) ) ) /*Q16*/, &tmp9_e ); + tmp9_e = sub( tmp9_e, ( 31 - Q16 ) ); + tmp9 = L_deposit_h( tmp_var1 ); + tmp10 = BASOP_Util_Add_Mant32Exp( tmp9, tmp9_e, eps2_fx, eps2_e, &tmp10_e ); + tmp11 = BASOP_Util_Divide3232_Scale( tmp10, tmp8, &tmp11_e ); + tmp11_e = add( tmp11_e, sub( tmp10_e, tmp8_e ) ); + tmp12_e = BASOP_Util_Add_MantExp( ONE_IN_Q14, 1, negate( tmp11 ), tmp11_e, &tmp12 ); - /* ISD */ - isd_cnt_l = 0; - isd_cnt_h = 0; - for ( i = 1; i <= freq_8k; i++ ) - { - Nr = ( specLr[i] - specRr[i] ); - Ni = ( specLi[i] - specRi[i] ); - Dr = ( specLr[i] + specRr[i] ); - Di = ( specLi[i] + specRi[i] ); - if ( ( Nr * Nr + Ni * Ni ) > STEREO_DMX_EVS_ISD_THRES_H * ( Dr * Dr + Di * Di ) ) + Q_fx[n] = L_deposit_h( tmp12 ); + Q_e[n] = tmp12_e; + Q_fx[n] = L_max( Q_fx[n], 0 ); + move16(); + move16(); + move16(); + if ( Q_fx[n] == 0 ) { - isd_cnt_h++; + Q_e[n] = 0; + move16(); } - if ( ( Nr * Nr + Ni * Ni ) < STEREO_DMX_EVS_ISD_THRES_L * ( Dr * Dr + Di * Di ) ) + + IF( on[n] ) /*if channel n was active (likely to be preceding) in the previous frame*/ { - isd_cnt_l++; - } - } + tmp13_e = 0, tmp15_e = 0; + tmp13 = BASOP_Util_Divide1616_Scale( (Word16) abs( itd_cand[n] ), hPOC->shift_limit, &tmp13_e ); + tmp14 = L_mult( 6554 /*0.2f Q15*/, tmp13 ); // tmp13_e + tmp15 = BASOP_Util_Add_Mant32Exp( 644245120 /*0.75f in Q31*/, 0, L_negate( tmp14 ), tmp13_e, &tmp15_e ); + tmp15 = Mpy_32_32( tmp15, peakQ_fx[n] ); // tmp15_e + peakQ_e[n] + move16(); + move16(); + + tmpf_fx = tmp15; + move16(); + tmpf_e = add( tmp15_e, peakQ_e[n] ); - isd_rate = (float) isd_cnt_h / (float) freq_8k; - hPHA->isd_rate_s = STEREO_DMX_EVS_ISD_FORGETTING * hPHA->isd_rate_s + ( 1.0f - STEREO_DMX_EVS_ISD_FORGETTING ) * isd_rate; + Word16 flag1 = BASOP_Util_Cmp_Mant32Exp( Q_fx[n], Q_e[n], tmpf_fx, tmpf_e ); + tmp16 = Mpy_32_32( 1342177280 /*1.25f in Q30*/, peakQ_fx[n] ); // peakQ_e[n]+1 + Word16 flag2 = BASOP_Util_Cmp_Mant32Exp( Q_fx[n], Q_e[n], tmp16, peakQ_e[n] + 1 ); - if ( hPHA->isd_rate_s > STEREO_DMX_EVS_ISD_DIST_HYST_H ) - { - if ( hPHA->curr_pha != STEREO_DMX_EVS_PHA_IPD ) - { - if ( hPHA->prev_pha == STEREO_DMX_EVS_PHA_IPD ) + IF( EQ_16( flag1, negate( 1 ) ) ) { - hPHA->pha_hys_cnt += 1; + itdLR[n] = 0; + on[n] = 0; + peakQ_fx[n] = 0; + peakQ_e[n] = 0; + Q_fx[n] = 0; + Q_e[n] = 0; + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); } - else + ELSE IF( EQ_16( flag2, 1 ) ) { - hPHA->pha_hys_cnt = 0; + itdLR[n] = itd_cand[n]; + move16(); } - - if ( hPHA->pha_hys_cnt >= STEREO_DMX_EVS_SWTCH_HYS_THRES ) + Word16 flag3 = BASOP_Util_Cmp_Mant32Exp( peakQ_fx[n], peakQ_e[n], Q_fx[n], Q_e[n] ); + IF( EQ_16( flag3, negate( 1 ) ) ) { - hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD; + peakQ_fx[n] = Q_fx[n]; + peakQ_e[n] = Q_e[n]; + move16(); + move16(); } } - - hPHA->prev_pha = STEREO_DMX_EVS_PHA_IPD; - } - else if ( hPHA->isd_rate_s < STEREO_DMX_EVS_ISD_DIST_HYST_L ) - { - if ( hPHA->curr_pha != STEREO_DMX_EVS_PHA_IPD2 ) - { - if ( hPHA->prev_pha == STEREO_DMX_EVS_PHA_IPD2 ) - { - hPHA->pha_hys_cnt += 1; - } - else - { - hPHA->pha_hys_cnt = 0; - } - - if ( hPHA->pha_hys_cnt >= STEREO_DMX_EVS_SWTCH_HYS_THRES ) - { - hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD2; - } - } - hPHA->prev_pha = STEREO_DMX_EVS_PHA_IPD2; - } - - ipd_ff = hPHA->ipd_ff; - - Nr = 0; - Ni = 0; - eneL = 0; - eneR = 0; - - for ( n = 1, i = 1; n < nsbd; n++ ) - { - tPr = 0.0f; - tPi = 0.0f; - tEr[n] = 0.0f; - tEl[n] = 0.0f; - - for ( j = 0; j < STEREO_DMX_EVS_SUBBAND_SIZE; j++, i++ ) - { - /* Energy */ - tEl[n] += specLr[i] * specLr[i] + specLi[i] * specLi[i]; - tEr[n] += specRr[i] * specRr[i] + specRi[i] * specRi[i]; - - /* IPD */ - IPDr = specLr[i] * specRr[i] + specLi[i] * specRi[i]; - IPDi = specLi[i] * specRr[i] - specLr[i] * specRi[i]; - tPr += IPDr; - tPi += IPDi; - - /* ICCr */ - Pn = (float) inv_sqrt( ( IPDr * IPDr + IPDi * IPDi ) + EPSILON ); - IPDr *= Pn; - IPDi *= Pn; - - tIPDr = ( specRr[i] * IPDr - specRi[i] * IPDi ); - tIPDi = ( specRr[i] * IPDi + specRi[i] * IPDr ); - - Nr += ( specLr[i] * tIPDr + specLi[i] * tIPDi ); - Ni += ( specLi[i] * tIPDr - specLr[i] * tIPDi ); - - eneL += ( specLr[i] * specLr[i] + specLi[i] * specLi[i] ); - eneR += ( specRr[i] * specRr[i] + specRi[i] * specRi[i] ); - } - - Pn = (float) inv_sqrt( ( tPr * tPr + tPi * tPi ) + EPSILON ); - tPr *= Pn; - tPi *= Pn; - - if ( hPHA->init_frmCntr == 0 ) - { - Pr[n] = ipd_ff[n] * Pr[n] + ( 1.0f - ipd_ff[n] ) * tPr; - Pi[n] = ipd_ff[n] * Pi[n] + ( 1.0f - ipd_ff[n] ) * tPi; - Pn = (float) inv_sqrt( ( Pr[n] * Pr[n] + Pi[n] * Pi[n] ) + EPSILON ); - Pr[n] *= Pn; - Pi[n] *= Pn; - } - else - { - Pr[n] = tPr; - Pi[n] = tPi; - } - - Pr[n] = ( Pr[n] > 1.0f ) ? 1.0f : Pr[n]; - Pr[n] = ( Pr[n] < -1.0f ) ? -1.0f : Pr[n]; - } - ICCr = (float) sqrt( ( Nr * Nr + Ni * Ni ) / ( eneL * eneR + EPSILON ) ); - hPHA->iccr_s = STEREO_DMX_EVS_ICCR_FORGETTING * hPHA->iccr_s + ( 1.0f - STEREO_DMX_EVS_ICCR_FORGETTING ) * ICCr; - - if ( hPHA->curr_pha == STEREO_DMX_EVS_PHA_IPD ) - { - hPHA->p_curr_taps[0] = NULL; - hPHA->p_curr_taps[1] = hPHA->curr_taps[1]; - - rfft_pha_buf[0] = 1.; - rfft_pha_buf[1] = 1.; - - ild_cnt = 0; - for ( i = 1; i < nsbd; i++ ) - { - rfft_pha_buf[i * 2] = Pr[i]; - rfft_pha_buf[i * 2 + 1] = Pi[i]; - if ( ( tEr[i] > STEREO_DMX_EVS_LR_EGY * tEl[i] ) || ( tEl[i] > STEREO_DMX_EVS_LR_EGY * tEr[i] ) ) - { - ild_cnt++; - tEr[i] = 1; - } - else - { - tEr[i] = -1; - } - } - if ( ild_cnt > nsbd * STEREO_DMX_EVS_ILD_PRC ) - { - for ( i = 1; i < nsbd; i++ ) - { - if ( tEr[i] > 0 ) - { - rfft_pha_buf[i * 2] = 1.; - rfft_pha_buf[i * 2 + 1] = 0.; - } - } - } - - rfft( rfft_pha_buf, hPHA->rfft_ipd_coef, input_frame_pha, +1 ); - mvr2r( rfft_pha_buf, hPHA->p_curr_taps[1], hPHA->pha_len ); - } - else - { - if ( ( hPHA->iccr_s < STEREO_DMX_EVS_ICCR_HYST_L ) || ( ( hPHA->iccr_s < STEREO_DMX_EVS_ICCR_HYST_H ) && ( hPHA->p_curr_taps[0] != NULL ) ) ) - { - /* IPDn */ - - set_f( &( Pr[freq_ipd_max] ), 1.0f, ( nsbd - freq_ipd_max ) ); - set_f( &( Pi[freq_ipd_max] ), 0.0f, ( nsbd - freq_ipd_max ) ); - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hPHA->p_curr_taps[n] = hPHA->curr_taps[n]; - } - - rfft_pha_buf[0] = 1.; - rfft_pha_buf[1] = 1.; - - ild_cnt = 0; - isd_rate = (float) isd_cnt_l / freq_8k; - for ( i = 1; i < nsbd; i++ ) - { - rfft_pha_buf[i * 2] = (float) sqrt( ( 1.0f + Pr[i] ) / 2.0f ); - rfft_pha_buf[i * 2 + 1] = (float) sqrt( ( 1.0f - Pr[i] ) / 2.0f ) * sign( Pi[i] ); - if ( isd_rate > STEREO_DMX_EVS_ISD_DIST_THRES_IPD ) - { - rfft_pha_buf[i * 2 + 1] = (float) sqrt( ( 1.0f - rfft_pha_buf[i * 2] ) / 2.0f ) * sign( rfft_pha_buf[i * 2 + 1] ); - rfft_pha_buf[i * 2] = (float) sqrt( ( 1.0f + rfft_pha_buf[i * 2] ) / 2.0f ); - } - - if ( ( tEr[i] > STEREO_DMX_EVS_LR_EGY * tEl[i] ) || ( tEl[i] > STEREO_DMX_EVS_LR_EGY * tEr[i] ) ) - { - ild_cnt++; - tEr[i] = 1; - } - else - { - tEr[i] = -1; - } - } - if ( ild_cnt > nsbd * STEREO_DMX_EVS_ILD_PRC ) - { - for ( i = 1; i < nsbd; i++ ) - { - if ( tEr[i] > 0 ) - { - rfft_pha_buf[i * 2] = 1.; - rfft_pha_buf[i * 2 + 1] = 0.; - } - } - } - - rfft( rfft_pha_buf, hPHA->rfft_ipd_coef, input_frame_pha, +1 ); - mvr2r( rfft_pha_buf, hPHA->p_curr_taps[1], hPHA->pha_len ); - - /* PHA L2R */ - p_curr_taps = hPHA->p_curr_taps[0]; - p_curr_taps[0] = rfft_pha_buf[0]; - for ( i = 1; i < hPHA->pha_len; i++ ) - { - p_curr_taps[i] = rfft_pha_buf[input_frame_pha - i]; - } - } - else - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hPHA->p_curr_taps[n] = NULL; - } - } - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - if ( hPHA->p_curr_taps[n] ) - { - for ( i = 0; i < hPHA->pha_len; i++ ) - { - hPHA->p_curr_taps[n][i] *= hPHA->win[i]; - } - - energy = 0.; - for ( i = 0; i < hPHA->pha_len; i++ ) - { - energy += hPHA->p_curr_taps[n][i] * hPHA->p_curr_taps[n][i]; - } - energy = (float) inv_sqrt( energy + EPSILON ); - for ( i = 0; i < hPHA->pha_len; i++ ) - { - hPHA->p_curr_taps[n][i] *= energy; - } - } - } - - - rfft_buf[0] = specPOr[0]; - rfft_buf[1] = specPOr[n0]; - for ( i = 1; i < n0; i++ ) - { - rfft_buf[i * 2] = specPOr[i]; - rfft_buf[i * 2 + 1] = specPOi[i]; - } - - rfft( rfft_buf, rfft_coef, input_frame, +1 ); - - tmp1 = rfft_buf[0]; - tmpPOC1[n0] = tmp1 * tmp1; - - for ( i = 1; i < hPOC->shift_limit + 1; i++ ) - { - n1 = n0 + i; - n2 = n0 - i; - - tmp1 = rfft_buf[i]; - tmpPOC1[n1] = tmp1 * tmp1; - - tmp1 = rfft_buf[input_frame - i]; - tmpPOC1[n2] = tmp1 * tmp1; - } - - tmp1 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n0] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n0 - 1] + tmpPOC1[n0 + 1] ); - tmpPOC2[n0] = max( tmp1, 0.0f ); - - for ( i = 1; i < hPOC->shift_limit; i++ ) - { - n1 = n0 + i; - n2 = n0 - i; - tmp1 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n1] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n1 - 1] + tmpPOC1[n1 + 1] ); - tmp2 = STEREO_DMX_EVS_POC_SMOOTH * tmpPOC1[n2] + 0.5f * ( 1.0f - STEREO_DMX_EVS_POC_SMOOTH ) * ( tmpPOC1[n2 - 1] + tmpPOC1[n2 + 1] ); - tmpPOC2[n1] = max( tmp1, 0.0f ); - tmpPOC2[n2] = max( tmp2, 0.0f ); - } - - P[n0] = P[n0] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n0] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); - - for ( i = 1; i < hPOC->shift_limit; i++ ) - { - n1 = n0 + i; - n2 = n0 - i; - - if ( i == -itdLR[1] ) - { - P[n1] = P[n1] * STEREO_DMX_EVS_TARGET_POC_FORGETTING + tmpPOC2[n1] * ( 1.0f - STEREO_DMX_EVS_TARGET_POC_FORGETTING ); - } - else - { - P[n1] = P[n1] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n1] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); - } - - if ( i == itdLR[0] ) - { - P[n2] = P[n2] * STEREO_DMX_EVS_TARGET_POC_FORGETTING + tmpPOC2[n2] * ( 1.0f - STEREO_DMX_EVS_TARGET_POC_FORGETTING ); - } - else - { - P[n2] = P[n2] * STEREO_DMX_EVS_POC_FORGETTING + tmpPOC2[n2] * ( 1.0f - STEREO_DMX_EVS_POC_FORGETTING ); - } - } - - return; -} -#endif - - -/*-------------------------------------------------------------------* - * find_poc_peak() - * - * find peak phase only correlation - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static Word32 find_poc_peak_fx( - STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ - Word32 itd_fx[], /* o : estimated itd */ - const Word16 input_frame, /* i : input frame length per channel */ - const Word32 ratio_fixed /* i : adapting ratio */ -) -{ - Word16 itd_cand[CPE_CHANNELS], i, n, cnt[CPE_CHANNELS], Lh, peak_range, *on, *itdLR, prev_off[CPE_CHANNELS], eps_fx; - Word32 Q_fx[CPE_CHANNELS], aQ_fx[CPE_CHANNELS], cQ_fx[CPE_CHANNELS], width_fx, *peak_width_fx, *peakQ_fx, cconfidence_fx, *P_fx, tmpf_fx, eps2_fx; - Word16 tmpf_e = 0, eps2_e = 0, Q_e[CPE_CHANNELS], eps_e = 15, peakQ_e[CPE_CHANNELS]; - move16(); - move16(); - move16(); - - /* Initialization */ - Lh = shr( input_frame, 1 ); - on = hPOC->ispeak; - itdLR = hPOC->itdLR; - itd_cand[0] = itd_cand[1] = 0; - move16(); - move16(); - move16(); - move16(); - - width_fx = 816043776; /*0.38f in Q31*/ - eps_fx = Inv16( input_frame, &eps_e ); - peak_width_fx = hPOC->peak_width_fx; - peakQ_fx = hPOC->peakQ_fx; // Q16 - move16(); - move16(); - move16(); - set16_fx( peakQ_e, 31 - Q16, CPE_CHANNELS ); - Q_fx[0] = hPOC->P_fx[Lh]; // Q31 - Q_fx[1] = 0; - move16(); - move16(); - set16_fx( Q_e, 0, CPE_CHANNELS ); // Q31 - - P_fx = hPOC->P_fx; - - FOR( i = 1; i < hPOC->shift_limit; i++ ) /*find peaks of POC P[] with positive and negative ITD */ - { - IF( GT_32( P_fx[Lh - i], Q_fx[0] ) ) - { - Q_fx[0] = P_fx[Lh - i]; // Q31 - itd_cand[0] = i; - Q_e[0] = 0; - move32(); - move16(); - move16(); - } - IF( GT_32( P_fx[Lh + i], Q_fx[1] ) ) - { - Q_fx[1] = P_fx[Lh + i]; // Q31 - itd_cand[1] = -i; - Q_e[1] = 0; - move32(); - move16(); - move16(); - } - } - - Word16 tmp1, tmp11, tmp_var1, tmp12 = 0, tmp13; - Word32 tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp14, tmp15, tmp16; - Word16 tmp8_e, tmp9_e, tmp10_e, tmp11_e, tmp12_e, tmp13_e, tmp15_e; - - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - prev_off[n] = !on[n]; - move16(); - - cnt[n] = 0; - aQ_fx[n] = Mpy_32_32( Q_fx[n], width_fx ); // Q31+Q31 - 31 - cQ_fx[n] = P_fx[Lh - itd_cand[n]]; // Q31 - move16(); - move16(); - move16(); - - tmp12 = 0, tmp8_e = 0, tmp9_e = 0, tmp10_e = 0, tmp11_e = 0, tmp12_e = 0; - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - - /*compute peak_range*/ - tmp1 = idiv1616( hPOC->shift_limit, STEREO_DMX_EVS_FIND_POC_PEAK_TAU ); - peak_range = idiv1616( add( (Word16) abs( itd_cand[n] ), tmp1 ), STEREO_DMX_EVS_FIND_POC_PEAK_TAU2 ); // Q0 - - FOR( i = 1; i <= peak_range; i++ ) - { - cnt[n] = add( cnt[n], extract_l( L_add( GT_32( P_fx[Lh - itd_cand[n] + i], aQ_fx[n] ), GT_32( P_fx[Lh - itd_cand[n] - i], aQ_fx[n] ) ) ) ); - tmp4 = L_add( P_fx[Lh - itd_cand[n] + i], P_fx[Lh - itd_cand[n] - i] ); // Q31 - cQ_fx[n] = L_add( cQ_fx[n], tmp4 ); - move16(); - move16(); - } - - /*compute eps2_fx*/ - tmp5 = Mpy_32_32( peak_width_fx[n], ratio_fixed ); // Q31 + Q16 - Q31 - tmp6 = Mpy_32_32( L_deposit_h( cnt[n] ), L_sub( ONE_IN_Q31, ratio_fixed ) ); // Q16 + Q31 - 31 - peak_width_fx[n] = L_add( tmp5, tmp6 ); // Q16 - move16(); - - tmp7 = Mpy_32_32( L_deposit_h( eps_fx ), peak_width_fx[n] ); // eps_e + 31 - Q16 - - eps2_fx = L_shr( tmp7, 2 ); - eps2_e = add( eps_e, 31 - Q16 ); - - /*compute Q_fx[n]*/ - tmp8 = BASOP_Util_Add_Mant32Exp( Q_fx[n], 0, eps2_fx, eps2_e, &tmp8_e ); - tmp_var1 = BASOP_Util_Divide3232_Scale( cQ_fx[n], L_deposit_h( ( add( shl( peak_range, 1 ), 1 ) ) ) /*Q16*/, &tmp9_e ); - tmp9_e = sub( tmp9_e, ( 31 - Q16 ) ); - tmp9 = L_deposit_h( tmp_var1 ); - tmp10 = BASOP_Util_Add_Mant32Exp( tmp9, tmp9_e, eps2_fx, eps2_e, &tmp10_e ); - tmp11 = BASOP_Util_Divide3232_Scale( tmp10, tmp8, &tmp11_e ); - tmp11_e = add( tmp11_e, sub( tmp10_e, tmp8_e ) ); - tmp12_e = BASOP_Util_Add_MantExp( ONE_IN_Q14, 1, negate( tmp11 ), tmp11_e, &tmp12 ); - - Q_fx[n] = L_deposit_h( tmp12 ); - Q_e[n] = tmp12_e; - Q_fx[n] = L_max( Q_fx[n], 0 ); - move16(); - move16(); - move16(); - if ( Q_fx[n] == 0 ) - { - Q_e[n] = 0; - move16(); - } - - IF( on[n] ) /*if channel n was active (likely to be preceding) in the previous frame*/ - { - tmp13_e = 0, tmp15_e = 0; - tmp13 = BASOP_Util_Divide1616_Scale( (Word16) abs( itd_cand[n] ), hPOC->shift_limit, &tmp13_e ); - tmp14 = L_mult( 6554 /*0.2f Q15*/, tmp13 ); // tmp13_e - tmp15 = BASOP_Util_Add_Mant32Exp( 644245120 /*0.75f in Q31*/, 0, L_negate( tmp14 ), tmp13_e, &tmp15_e ); - tmp15 = Mpy_32_32( tmp15, peakQ_fx[n] ); // tmp15_e + peakQ_e[n] - move16(); - move16(); - - tmpf_fx = tmp15; - move16(); - tmpf_e = add( tmp15_e, peakQ_e[n] ); - - Word16 flag1 = BASOP_Util_Cmp_Mant32Exp( Q_fx[n], Q_e[n], tmpf_fx, tmpf_e ); - tmp16 = Mpy_32_32( 1342177280 /*1.25f in Q30*/, peakQ_fx[n] ); // peakQ_e[n]+1 - Word16 flag2 = BASOP_Util_Cmp_Mant32Exp( Q_fx[n], Q_e[n], tmp16, peakQ_e[n] + 1 ); - - IF( EQ_16( flag1, negate( 1 ) ) ) - { - itdLR[n] = 0; - on[n] = 0; - peakQ_fx[n] = 0; - peakQ_e[n] = 0; - Q_fx[n] = 0; - Q_e[n] = 0; - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - } - ELSE IF( EQ_16( flag2, 1 ) ) - { - itdLR[n] = itd_cand[n]; - move16(); - } - Word16 flag3 = BASOP_Util_Cmp_Mant32Exp( peakQ_fx[n], peakQ_e[n], Q_fx[n], Q_e[n] ); - IF( EQ_16( flag3, negate( 1 ) ) ) - { - peakQ_fx[n] = Q_fx[n]; - peakQ_e[n] = Q_e[n]; - move16(); - move16(); - } - } - ELSE /*if channel n was not active (not likely to be preceding) in the previous frame*/ + ELSE /*if channel n was not active (not likely to be preceding) in the previous frame*/ { tmp13_e = 0, tmp15_e = 0; move16(); @@ -2035,142 +1412,12 @@ static Word32 find_poc_peak_fx( return hPOC->confidence_fx; } -#else -static float find_poc_peak( - STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ - float itd[], /* o : estimated itd */ - const int16_t input_frame, /* i : input frame length per channel */ - const float ratio_float /* i : adapting ratio */ -) -{ - int16_t itd_cand[CPE_CHANNELS], i, n, cnt[CPE_CHANNELS], Lh, peak_range, *on, *itdLR, prev_off[CPE_CHANNELS]; - float Q[CPE_CHANNELS], aQ[CPE_CHANNELS], cQ[CPE_CHANNELS], width, eps, cconfidence, *peak_width, *peakQ; - float *P, tmpf; - float eps2; - - /* Initialization */ - Lh = input_frame / 2; - on = hPOC->ispeak; - itdLR = hPOC->itdLR; - width = 0.38f; - eps = 1.0f / (float) input_frame; - peak_width = hPOC->peak_width; - peakQ = hPOC->peakQ; - Q[0] = hPOC->P[Lh]; - Q[1] = 0.0f; - itd_cand[0] = itd_cand[1] = 0; - P = hPOC->P; - - for ( i = 1; i < hPOC->shift_limit; i++ ) /*find peaks of POC P[] with positive and negative ITD */ - { - if ( P[Lh - i] > Q[0] ) - { - Q[0] = P[Lh - i]; - itd_cand[0] = i; - } - if ( P[Lh + i] > Q[1] ) - { - Q[1] = P[Lh + i]; - itd_cand[1] = -i; - } - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - prev_off[n] = !on[n]; - - aQ[n] = Q[n] * width; - cnt[n] = 0; - cQ[n] = P[Lh - itd_cand[n]]; - - peak_range = (int16_t) ( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; - - for ( i = 1; i <= peak_range; i++ ) - { - cnt[n] += ( P[Lh - itd_cand[n] + i] > aQ[n] ) + ( P[Lh - itd_cand[n] - i] > aQ[n] ); - cQ[n] += P[Lh - itd_cand[n] + i] + P[Lh - itd_cand[n] - i]; - } - - peak_width[n] = peak_width[n] * ratio_float + (float) cnt[n] * ( 1.0f - ratio_float ); - eps2 = eps * peak_width[n] * 0.25f; - Q[n] = ( 1.0f - ( cQ[n] / ( peak_range * 2 + 1 ) + eps2 ) / ( Q[n] + eps2 ) ); - Q[n] = max( Q[n], 0.0f ); - - if ( on[n] ) /*if channel n was active (likely to be preceding) in the previous frame*/ - { - tmpf = ( 0.3f - 0.2f * (float) abs( itd_cand[n] ) / (float) hPOC->shift_limit ) * peakQ[n]; - if ( Q[n] < tmpf ) - { - itdLR[n] = 0; - on[n] = 0; - peakQ[n] = 0.0f; - Q[n] = 0.0f; - } - else if ( Q[n] > 1.25f * peakQ[n] ) - { - itdLR[n] = itd_cand[n]; - } - - peakQ[n] = max( peakQ[n], Q[n] ); - } - else /*if channel n was not active (not likely to be preceding) in the previous frame*/ - { - tmpf = ( 0.75f - 0.2f * (float) abs( itd_cand[n] ) / (float) hPOC->shift_limit ); - - if ( Q[n] < tmpf ) - { - itdLR[n] = 0; - Q[n] = 0.0f; - } - else - { - itdLR[n] = itd_cand[n]; - on[n] = 1; - } - } - } - - if ( ( on[0] && prev_off[0] ) && ( on[1] && prev_off[1] ) ) /*if both channels have newly detected as active (possibility of preceding), select channel by peakness Q[] of POC */ - { - *itd = ( Q[0] > Q[1] ) ? (float) itdLR[0] : (float) itdLR[1]; - } - else if ( ( on[0] && prev_off[0] ) && ( Q[0] > ( Q[1] - 0.1 ) ) ) /* if channel 0 becomes active, select channel 0*/ - { - *itd = (float) itdLR[0]; - } - else if ( ( on[1] && prev_off[1] ) && ( Q[1] > ( Q[0] - 0.1 ) ) ) /*if channel 1 becomes active, selsect channel 1*/ - { - *itd = (float) itdLR[1]; - } - else if ( Q[0] > ( Q[1] + Q_BAND ) ) /* if no status change, use Q[]*/ - { - *itd = (float) itdLR[0]; - } - else if ( Q[1] > ( Q[0] + Q_BAND ) ) /* if no status change, use Q[]*/ - { - *itd = (float) itdLR[1]; - } - else if ( *itd == 0.0 ) /*if no channels are likely to be preceding, follow the status of the previous frame*/ - { - *itd = 0; - } - else /*follow the status of the previous frame*/ - { - *itd = ( *itd > 0 ) ? (float) itdLR[0] : (float) itdLR[1]; - } - - cconfidence = sqrtf( fabsf( Q[0] - Q[1] ) ); /*higher value indicates higher confidence for one preceding channel*/ - - return hPOC->confidence = hPOC->confidence * STEREO_DMX_EVS_CORR_FORGETTING + cconfidence * ( 1.0f - STEREO_DMX_EVS_CORR_FORGETTING ); -} -#endif /*-------------------------------------------------------------------* * estimate_itd() * * estimate itd *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error estimate_itd_fx( Word16 *corr, /* o : correlation */ STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ @@ -2246,74 +1493,12 @@ static ivas_error estimate_itd_fx( return error; } -#else - -static ivas_error estimate_itd( - float *corr, /* o : correlation */ - STEREO_DMX_EVS_POC_HANDLE hPOC, /* i/o: phase only correlation structure */ - STEREO_DMX_EVS_PHA_HANDLE hPHA, /* i/o: correlation filter structure */ - const float srcL[], /* i : Lch input signal */ - const float srcR[], /* i : Rch input signal */ - float itd[], /* o : estimated itd */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - float specLr[L_FRAME48k / 2 + 1], specLi[L_FRAME48k / 2 + 1], specRr[L_FRAME48k / 2 + 1], specRi[L_FRAME48k / 2 + 1]; - float rfft_coef[L_FRAME48k]; - const float *p_w; - int16_t n, n0, n1; - int16_t rfft_coef_step; - ivas_error error; - - error = IVAS_ERR_OK; - - n0 = input_frame >> 1; - n1 = input_frame >> 2; - - if ( input_frame == L_FRAME16k ) - { - p_w = dft_trigo_32k; - rfft_coef_step = 4; - } - else if ( input_frame == L_FRAME32k ) - { - p_w = dft_trigo_32k; - rfft_coef_step = 2; - } - else if ( input_frame == L_FRAME48k ) - { - p_w = dft_trigo_48k; - rfft_coef_step = 2; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "failed estimate_itd()\n" ); - } - - for ( n = 0; n < n1; n++ ) - { - rfft_coef[n] = p_w[n * rfft_coef_step]; - rfft_coef[n0 - n] = p_w[n * rfft_coef_step]; - } - rfft_coef[n1] = p_w[n1 * rfft_coef_step]; - - estimate_itd_wnd_fft( srcL, specLr, specLi, rfft_coef, hPOC->wnd, input_frame ); - estimate_itd_wnd_fft( srcR, specRr, specRi, rfft_coef, hPOC->wnd, input_frame ); - - calc_poc( hPOC, hPHA, hPOC->wnd, rfft_coef, specLr, specLi, specRr, specRi, input_frame ); - - *corr = find_poc_peak( hPOC, itd, input_frame, STEREO_DMX_EVS_POC_W_FORGETTING ); - - return error; -} -#endif /*-------------------------------------------------------------------* * weighted_ave() * * create weighted downmix signal *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void weighted_ave_fx( const Word32 src1_fx[], /* i : Lch input signal Q16 */ const Word32 src2_fx[], /* i : Rch input signal Q16 */ @@ -2343,43 +1528,11 @@ static void weighted_ave_fx( return; } -#else -static void weighted_ave( - const float src1[], /* i : Lch input signal */ - const float src2[], /* i : Rch input signal */ - float dst[], /* o : output signal */ - const float gain, /* i : adapting gain */ - const float old_gain, /* i : adapting prev gain */ - const int16_t input_frame, /* i : input frame length per channel */ - const float wnd[] /* i : window coef */ -) -{ - int16_t i, len; - float gain_tmp = 0.f, gain_sub; - - len = input_frame >> 4; - gain_sub = gain - old_gain; - - for ( i = 0; i < len; i++ ) - { - gain_tmp = old_gain + gain_sub * wnd[i]; - dst[i] = src1[i] * gain_tmp + src2[i] * ( 1.0f - gain_tmp ); - } - for ( ; i < input_frame; i++ ) - { - dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); - } - - return; -} - -#endif /*-------------------------------------------------------------------* * calc_energy() * * calculate energy *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void calc_energy_fx( const Word32 src1_fx[], /* i : Lch input signal Q16*/ const Word32 src2_fx[], /* i : Rch input signal Q16 */ @@ -2455,53 +1608,12 @@ static void calc_energy_fx( return; } -#else -static void calc_energy( - const float src1[], /* i : Lch input signal */ - const float src2[], /* i : Rch input signal */ - float energy[], /* o : calculated energy */ - const int16_t input_frame, /* i : input frame length per channel */ - const float ratio_float /* i : adapting ratio */ -) -{ - float E, wnd, wnd_diff; - int16_t i, adaptlen; - - /* Initialization */ - E = 0.0f; - adaptlen = input_frame >> 4; - wnd = 0.5f / (float) adaptlen; - wnd_diff = 1.0f / (float) adaptlen; - - for ( i = 0; i < adaptlen; i++ ) - { - E += ( src1[i] * wnd ) * ( src2[i] * wnd ); - - wnd += wnd_diff; - } - for ( ; i < input_frame - adaptlen; i++ ) - { - E += src1[i] * src2[i]; - } - for ( ; i < input_frame; i++ ) - { - wnd -= wnd_diff; - - E += ( src1[i] * wnd ) * ( src2[i] * wnd ); - } - - *energy = *energy * ratio_float + ( E / (float) input_frame ) * ( 1.0f - ratio_float ); - - return; -} -#endif /*-------------------------------------------------------------------* * adapt_gain() * * adapt gain to the signal *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void adapt_gain_fx( const Word32 src_fx[], /* i : input signal Q16 */ Word32 dst_fx[], /* o : output signal */ @@ -2534,42 +1646,12 @@ static void adapt_gain_fx( return; } -#else -static void adapt_gain( - const float src[], /* i : input signal */ - float dst[], /* o : output signal */ - const float gain, /* i : adapting gain */ - const float old_gain, /* i : adapting prev gain */ - const int16_t input_frame, /* i : input frame length per channel */ - const float wnd[] /* i : window coef */ -) -{ - int16_t i, len; - float gain_tmp, gain_sub; - - len = input_frame >> 4; - gain_sub = gain - old_gain; - - for ( i = 0; i < len; i++ ) - { - gain_tmp = old_gain + gain_sub * wnd[i]; - dst[i] = src[i] * gain_tmp; - } - for ( ; i < input_frame; i++ ) - { - dst[i] = src[i] * gain; - } - - return; -} -#endif /*-------------------------------------------------------------------* * create_M_signal() * * create downmix signal *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void create_M_signal_fx( const Word32 srcL_fx[], /* i : Lch input signal Q16 */ const Word32 srcR_fx[], /* i : Rch input signal Q16 */ @@ -2644,77 +1726,25 @@ static void create_M_signal_fx( amp_mod_fx[0] = 0; move32(); } - adapt_gain_fx( srcL_fx, weighted_fx, amp_mod_fx[0], w_prev_fx[1], input_frame, wnd_fx ); - v_add_fx( dmx_fx, weighted_fx, dmx_fx, input_frame ); // Q16 - adapt_gain_fx( srcR_fx, weighted_fx, amp_mod_fx[1], w_prev_fx[2], input_frame, wnd_fx ); - v_add_fx( dmx_fx, weighted_fx, dmx_fx, input_frame ); // Q16 - w_prev_fx[0] = w_curr_fx; - move32(); - w_prev_fx[1] = amp_mod_fx[0]; - move32(); - w_prev_fx[2] = amp_mod_fx[1]; - move32(); - - return; -} - -#else -static void create_M_signal( - const float srcL[], /* i : Lch input signal */ - const float srcR[], /* i : Rch input signal */ - float dmx[], /* o : output signal */ - const float w_curr, /* i : adapting weight */ - const int16_t input_frame, /* i : input frame length per channel */ - const float wnd[], /* i : window coef */ - float *w_prev, /* i/o: adapting prev weight */ - float *dmx_energy, /* i/o: downmix signal energy */ - float *src_energy /* i/o: input signal energy */ -) -{ - float weighted[L_FRAME48k], eps, amp_mod[CPE_CHANNELS], Lbias; - - /* Initialization */ - eps = 1024.0f; - Lbias = ( w_prev[2] == 0 ) ? 4.0f : 0.25f; - - weighted_ave( srcL, srcR, dmx, w_curr, w_prev[0], input_frame, wnd ); - - calc_energy( srcL, srcL, src_energy, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); - calc_energy( srcR, srcR, src_energy + 1, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); - calc_energy( dmx, dmx, dmx_energy, input_frame, STEREO_DMX_EVS_DMX_EGY_FORGETTING ); - - if ( src_energy[0] * Lbias > src_energy[1] ) - { - amp_mod[0] = 1.0f - sqrtf( ( dmx_energy[0] + eps ) / ( src_energy[0] + eps ) ); - amp_mod[0] = max( amp_mod[0], 0.0f ); - amp_mod[1] = 0.0f; - } - else - { - amp_mod[1] = 1.0f - sqrtf( ( dmx_energy[0] + eps ) / ( src_energy[1] + eps ) ); - amp_mod[1] = max( amp_mod[1], 0.0f ); - amp_mod[0] = 0.0f; - } - - adapt_gain( srcL, weighted, amp_mod[0], w_prev[1], input_frame, wnd ); - v_add( dmx, weighted, dmx, input_frame ); - adapt_gain( srcR, weighted, amp_mod[1], w_prev[2], input_frame, wnd ); - v_add( dmx, weighted, dmx, input_frame ); - - w_prev[0] = w_curr; - w_prev[1] = amp_mod[0]; - w_prev[2] = amp_mod[1]; + adapt_gain_fx( srcL_fx, weighted_fx, amp_mod_fx[0], w_prev_fx[1], input_frame, wnd_fx ); + v_add_fx( dmx_fx, weighted_fx, dmx_fx, input_frame ); // Q16 + adapt_gain_fx( srcR_fx, weighted_fx, amp_mod_fx[1], w_prev_fx[2], input_frame, wnd_fx ); + v_add_fx( dmx_fx, weighted_fx, dmx_fx, input_frame ); // Q16 + w_prev_fx[0] = w_curr_fx; + move32(); + w_prev_fx[1] = amp_mod_fx[0]; + move32(); + w_prev_fx[2] = amp_mod_fx[1]; + move32(); return; } -#endif /*-------------------------------------------------------------------* * stereo_dmx_evs_enc() * * Stereo downmix for EVS encoder routine *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dmx_evs_enc_fx( STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS, /* i/o: Stereo downmix for EVS encoder handle */ const Word32 input_Fs, /* i : input sampling rate */ @@ -2912,467 +1942,192 @@ void stereo_dmx_evs_enc_fx( move16(); fad_len = hStereoDmxEVS->hPHA->fad_len; move16(); - fad_g = hStereoDmxEVS->hPHA->fad_g_fx; - - set_zero_fx( dmx_pha_data, n_samples ); - set_zero_fx( mem_prev, fad_len ); - - FOR( k = 0; k < CPE_CHANNELS; k++ ) - { - p_data = data_fx[k]; - Copy32( hStereoDmxEVS->hPHA->data_mem_fx[k], data_mem, pha_len ); - Copy32( &( p_data[n_samples - pha_len] ), hStereoDmxEVS->hPHA->data_mem_fx[k], pha_len ); - p_data_mem = &( data_mem[pha_len] ); - Copy32( p_data, p_data_mem, n_samples ); - - p_prev_taps = hStereoDmxEVS->hPHA->p_prev_taps_fx[k]; - IF( p_prev_taps ) - { - FOR( n = 0; n < fad_len; n++ ) - { - FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) - { - // ftmp += p_data_mem[n - m] * p_prev_taps[m]; - // fx_tmp = BASOP_Util_Add_Mant32Exp(fx_tmp, fx_tmp_e, Mpy_32_32(p_data_mem[n - m], p_prev_taps[m]),15,&fx_tmp_e); - fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_prev_taps[m] ) ); // Q11 - } - mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); - move32(); - } - } - ELSE - { - FOR( n = 0; n < fad_len; n++ ) - { - // mem_prev[n] += p_data[n] * INV_SQRT_2; - mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( p_data[n], INV_SQRT_2_Q31 ) ); // Q11 - move32(); - } - } - - p_curr_taps = hStereoDmxEVS->hPHA->p_curr_taps_fx[k]; - IF( p_curr_taps ) - { - FOR( n = 0; n < n_samples; n++ ) - { - FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) - { - // ftmp += p_data_mem[n - m] * p_curr_taps[m]; - fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_curr_taps[m] ) ); // Q11 - } - // dmx_pha_data[n] += ftmp * INV_SQRT_2; - dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); // Q11 - move32(); - } - } - ELSE - { - FOR( n = 0; n < n_samples; n++ ) - { - // dmx_pha_data[n] += p_data[n] * INV_SQRT_2; - dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( p_data[n], INV_SQRT_2_Q31 ) ); // Q11 - move32(); - } - } - } - - FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) - { - dmx_pha_data[n] = Mpy_32_32( dmx_pha_data[n], fad_g[n] ); - move32(); - dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( mem_prev[n], fad_g[m] ) ); // Q11 - move32(); - } - - /* prc switch */ - - curr_prc = hStereoDmxEVS->hPHA->curr_prc; - move32(); - // if ( abs( (int16_t) hStereoDmxEVS->itd ) > hStereoDmxEVS->hPHA->prc_thres ) - IF( GT_16( abs_s( round_fx( hStereoDmxEVS->itd_fx ) ), hStereoDmxEVS->hPHA->prc_thres ) ) - { - IF( NE_32( hStereoDmxEVS->hPHA->curr_prc, STEREO_DMX_EVS_PRC_POC ) ) - { - IF( EQ_32( hStereoDmxEVS->hPHA->prev_prc, STEREO_DMX_EVS_PRC_POC ) ) - { - hStereoDmxEVS->hPHA->prc_hys_cnt = add( hStereoDmxEVS->hPHA->prc_hys_cnt, 1 ); - move16(); - } - ELSE - { - hStereoDmxEVS->hPHA->prc_hys_cnt = 0; - move16(); - } - - if ( GE_16( hStereoDmxEVS->hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) - { - hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; - move32(); - } - } - hStereoDmxEVS->hPHA->prev_prc = STEREO_DMX_EVS_PRC_POC; - move32(); - } - ELSE - { - IF( NE_32( hStereoDmxEVS->hPHA->curr_prc, STEREO_DMX_EVS_PRC_PHA ) ) - { - IF( EQ_32( hStereoDmxEVS->hPHA->prev_prc, STEREO_DMX_EVS_PRC_PHA ) ) - { - hStereoDmxEVS->hPHA->prc_hys_cnt = add( hStereoDmxEVS->hPHA->prc_hys_cnt, 1 ); - move16(); - } - ELSE - { - hStereoDmxEVS->hPHA->prc_hys_cnt = 0; - move16(); - } - - if ( GE_16( hStereoDmxEVS->hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) - { - hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_PHA; - move32(); - } - } - hStereoDmxEVS->hPHA->prev_prc = STEREO_DMX_EVS_PRC_PHA; - move32(); - } - - // if ( ( is_transient == 1 ) || ( hStereoDmxEVS->aux_dmx_energy[0] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[1] ) || ( hStereoDmxEVS->aux_dmx_energy[1] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[0] ) || ( ( hStereoDmxEVS->hPHA->p_curr_taps[0] == NULL ) && ( hStereoDmxEVS->hPHA->p_curr_taps[1] == NULL ) ) ) - test(); - test(); - test(); - test(); - IF( EQ_16( is_transient, 1 ) || - BASOP_Util_Cmp_Mant32Exp( hStereoDmxEVS->aux_dmx_energy_fx[0], hStereoDmxEVS->aux_dmx_energy_fx_e[0], Mpy_32_32( STEREO_DMX_EVS_ILDS_EGY_Q17, hStereoDmxEVS->aux_dmx_energy_fx[1] ), add( hStereoDmxEVS->aux_dmx_energy_fx_e[1], 14 ) ) > 0 || - BASOP_Util_Cmp_Mant32Exp( hStereoDmxEVS->aux_dmx_energy_fx[1], hStereoDmxEVS->aux_dmx_energy_fx_e[1], Mpy_32_32( STEREO_DMX_EVS_ILDS_EGY_Q17, hStereoDmxEVS->aux_dmx_energy_fx[0] ), add( hStereoDmxEVS->aux_dmx_energy_fx_e[0], 14 ) ) > 0 || - ( ( hStereoDmxEVS->hPHA->p_curr_taps_fx[0] == NULL ) && ( hStereoDmxEVS->hPHA->p_curr_taps_fx[1] == NULL ) ) ) - { - hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; - move32(); - hStereoDmxEVS->hPHA->prc_hys_cnt = 0; - move16(); - } - - IF( hStereoDmxEVS->hPHA->curr_prc == STEREO_DMX_EVS_PRC_POC ) - { - p_dmx_data = dmx_poc_data; - - IF( NE_32( curr_prc, hStereoDmxEVS->hPHA->curr_prc ) ) - { - fad_len = hStereoDmxEVS->hPHA->fad_len_prc; - move16(); - fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; - - FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) - { - p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n] ); // Q11 - move32(); - p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m], dmx_pha_data[n] ) ); // Q11 - move32(); - } - } - } - ELSE - { - p_dmx_data = dmx_pha_data; - - IF( NE_32( curr_prc, hStereoDmxEVS->hPHA->curr_prc ) ) - { - fad_len = hStereoDmxEVS->hPHA->fad_len_prc; - move16(); - fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; - - FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) - { - p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n] ); // Q11 - move32(); - p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m], dmx_poc_data[n] ) ); // Q11 - move32(); - } - } - } - - Copy_Scale_sig32_16( p_dmx_data, data, n_samples, 5 ); - - - return; -} -#else -void stereo_dmx_evs_enc( - STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS, /* i/o: Stereo downmix for EVS encoder handle */ - const int32_t input_Fs, /* i : input sampling rate */ - int16_t data[CPE_CHANNELS * L_FRAME48k], /* i/o: input signal */ - const int16_t n_samples, /* i : number of input samples */ - const bool is_binaural /* i : indication that input is binaural audio */ -) -{ - int16_t n; - float dmx_weight, corr; - float data_f[CPE_CHANNELS][L_FRAME48k]; -#ifdef IVAS_FLOAT_FIXED - Word32 data_fx[CPE_CHANNELS][L_FRAME48k]; - Word32 dmx_weight_fx; - Word32 dmx_poc_data_fx[L_FRAME48k]; -#endif - int16_t k, m, pha_len, fad_len; - float mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; - float *p_data_mem, *p_prev_taps, *p_curr_taps, *fad_g, *p_data; - float dmx_poc_data[L_FRAME48k], dmx_pha_data[L_FRAME48k], *p_dmx_data, ftmp; - STEREO_DMX_EVS_PRC curr_prc; - int16_t input_subframe, is_transient; - float *p_sub_frame, subframe_energy[STEREO_DMX_EVS_NB_SBFRM]; - - int16_t input_frame; - - if ( is_binaural ) - { - /* use of is_binaural flag is to be considered */ - } - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - - for ( n = 0; n < input_frame; n++ ) - { - data_f[0][n] = (float) data[2 * n]; - data_f[1][n] = (float) data[2 * n + 1]; - } - if ( n_samples < input_frame ) - { - set_f( data_f[0] + n_samples, 0.0f, input_frame - n_samples ); - set_f( data_f[1] + n_samples, 0.0f, input_frame - n_samples ); - } - - - input_subframe = n_samples / STEREO_DMX_EVS_NB_SBFRM; - is_transient = 0; - for ( k = 0; k < CPE_CHANNELS; k++ ) - { - ftmp = 0; - for ( m = 0; m < STEREO_DMX_EVS_NB_SBFRM; m++ ) - { - p_sub_frame = &( data_f[k][m * input_subframe] ); - subframe_energy[m] = 0; - for ( n = 0; n < input_subframe; n++ ) - { - subframe_energy[m] += p_sub_frame[n] * p_sub_frame[n]; - } - - if ( subframe_energy[m] / ( hStereoDmxEVS->hPHA->trns_aux_energy[k] + EPSILON ) > hStereoDmxEVS->hPHA->crst_fctr ) - { - is_transient = 1; - } - - if ( hStereoDmxEVS->hPHA->init_frmCntr == 0 ) - { - hStereoDmxEVS->hPHA->trns_aux_energy[k] = STEREO_DMX_EVS_TRNS_EGY_FORGETTING * hStereoDmxEVS->hPHA->trns_aux_energy[k] + ( 1.0f - STEREO_DMX_EVS_TRNS_EGY_FORGETTING ) * subframe_energy[m]; - } - else - { - hStereoDmxEVS->hPHA->trns_aux_energy[k] = 0.5f * hStereoDmxEVS->hPHA->trns_aux_energy[k] + 0.5f * subframe_energy[m]; - } - - ftmp += subframe_energy[m]; - } - - for ( m = 1; m < STEREO_DMX_EVS_NB_SBFRM; m++ ) - { - if ( subframe_energy[m] / ( subframe_energy[m - 1] + EPSILON ) > STEREO_DMX_EVS_TRNS_DTC_INST ) - { - is_transient = 1; - } - } - } - - estimate_itd( &corr, hStereoDmxEVS->hPOC, hStereoDmxEVS->hPHA, data_f[0], data_f[1], &hStereoDmxEVS->itd, input_frame ); - - /* poc */ - - if ( hStereoDmxEVS->itd ) - { - dmx_weight = ( ( hStereoDmxEVS->itd > 0 ) ? ( -1 ) : 1 ) * 0.5f * corr + 0.5f; - } - else - { - dmx_weight = 0.5f; - } -#ifdef IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( int i = 0; i < CPE_CHANNELS; i++ ) - { - floatToFixed_arrL32( data_f[i], data_fx[i], Q16, L_FRAME48k ); - f2me( hStereoDmxEVS->aux_dmx_energy[i], &hStereoDmxEVS->aux_dmx_energy_fx[i], &hStereoDmxEVS->aux_dmx_energy_fx_e[i] ); - } - f2me( hStereoDmxEVS->pre_dmx_energy[0], &hStereoDmxEVS->pre_dmx_energy_fx[0], &hStereoDmxEVS->pre_dmx_energy_fx_e[0] ); - floatToFixed_arrL32( hStereoDmxEVS->dmx_weight, hStereoDmxEVS->dmx_weight_fx, Q31, 1 + CPE_CHANNELS ); - dmx_weight_fx = floatToFixed( dmx_weight, Q31 ); -#endif - create_M_signal_fx( data_fx[0], data_fx[1], dmx_poc_data_fx, dmx_weight_fx, input_frame, hStereoDmxEVS->s_wnd_fx, - hStereoDmxEVS->dmx_weight_fx, hStereoDmxEVS->pre_dmx_energy_fx, hStereoDmxEVS->pre_dmx_energy_fx_e, hStereoDmxEVS->aux_dmx_energy_fx, hStereoDmxEVS->aux_dmx_energy_fx_e ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - me2f_buf( dmx_poc_data_fx, 31 - 16, dmx_poc_data, input_frame ); - fixedToFloat_arrL32( hStereoDmxEVS->dmx_weight_fx, hStereoDmxEVS->dmx_weight, Q31, CPE_CHANNELS + 1 ); - hStereoDmxEVS->aux_dmx_energy[0] = me2f( hStereoDmxEVS->aux_dmx_energy_fx[0], hStereoDmxEVS->aux_dmx_energy_fx_e[0] ); - hStereoDmxEVS->aux_dmx_energy[1] = me2f( hStereoDmxEVS->aux_dmx_energy_fx[1], hStereoDmxEVS->aux_dmx_energy_fx_e[1] ); - hStereoDmxEVS->pre_dmx_energy[0] = me2f( hStereoDmxEVS->pre_dmx_energy_fx[0], hStereoDmxEVS->pre_dmx_energy_fx_e[0] ); -#endif -#else - create_M_signal( data_f[0], data_f[1], dmx_poc_data, dmx_weight, input_frame, hStereoDmxEVS->s_wnd, - hStereoDmxEVS->dmx_weight, hStereoDmxEVS->pre_dmx_energy, hStereoDmxEVS->aux_dmx_energy ); -#endif - /* pha */ - - pha_len = hStereoDmxEVS->hPHA->pha_len; - fad_len = hStereoDmxEVS->hPHA->fad_len; - fad_g = hStereoDmxEVS->hPHA->fad_g; + fad_g = hStereoDmxEVS->hPHA->fad_g_fx; - set_zero( dmx_pha_data, n_samples ); - set_zero( mem_prev, fad_len ); + set_zero_fx( dmx_pha_data, n_samples ); + set_zero_fx( mem_prev, fad_len ); - for ( k = 0; k < CPE_CHANNELS; k++ ) + FOR( k = 0; k < CPE_CHANNELS; k++ ) { - p_data = data_f[k]; - mvr2r( hStereoDmxEVS->hPHA->data_mem[k], data_mem, pha_len ); - mvr2r( &( p_data[n_samples - pha_len] ), hStereoDmxEVS->hPHA->data_mem[k], pha_len ); + p_data = data_fx[k]; + Copy32( hStereoDmxEVS->hPHA->data_mem_fx[k], data_mem, pha_len ); + Copy32( &( p_data[n_samples - pha_len] ), hStereoDmxEVS->hPHA->data_mem_fx[k], pha_len ); p_data_mem = &( data_mem[pha_len] ); - mvr2r( p_data, p_data_mem, n_samples ); + Copy32( p_data, p_data_mem, n_samples ); - p_prev_taps = hStereoDmxEVS->hPHA->p_prev_taps[k]; - if ( p_prev_taps ) + p_prev_taps = hStereoDmxEVS->hPHA->p_prev_taps_fx[k]; + IF( p_prev_taps ) { - for ( n = 0; n < fad_len; n++ ) + FOR( n = 0; n < fad_len; n++ ) { - for ( ftmp = 0, m = 0; m < pha_len; m++ ) + FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { - ftmp += p_data_mem[n - m] * p_prev_taps[m]; + // ftmp += p_data_mem[n - m] * p_prev_taps[m]; + // fx_tmp = BASOP_Util_Add_Mant32Exp(fx_tmp, fx_tmp_e, Mpy_32_32(p_data_mem[n - m], p_prev_taps[m]),15,&fx_tmp_e); + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_prev_taps[m] ) ); // Q11 } - mem_prev[n] += ftmp * INV_SQRT_2; + mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); + move32(); } } - else + ELSE { - for ( n = 0; n < fad_len; n++ ) + FOR( n = 0; n < fad_len; n++ ) { - mem_prev[n] += p_data[n] * INV_SQRT_2; + // mem_prev[n] += p_data[n] * INV_SQRT_2; + mem_prev[n] = L_add( mem_prev[n], Mpy_32_32( p_data[n], INV_SQRT_2_Q31 ) ); // Q11 + move32(); } } - p_curr_taps = hStereoDmxEVS->hPHA->p_curr_taps[k]; - if ( p_curr_taps ) + p_curr_taps = hStereoDmxEVS->hPHA->p_curr_taps_fx[k]; + IF( p_curr_taps ) { - for ( n = 0; n < n_samples; n++ ) + FOR( n = 0; n < n_samples; n++ ) { - for ( ftmp = 0, m = 0; m < pha_len; m++ ) + FOR( ( fx_tmp = 0, m = 0 ); m < pha_len; m++ ) { - ftmp += p_data_mem[n - m] * p_curr_taps[m]; + // ftmp += p_data_mem[n - m] * p_curr_taps[m]; + fx_tmp = L_add( fx_tmp, Mpy_32_32( p_data_mem[n - m], p_curr_taps[m] ) ); // Q11 } - dmx_pha_data[n] += ftmp * INV_SQRT_2; + // dmx_pha_data[n] += ftmp * INV_SQRT_2; + dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( fx_tmp, INV_SQRT_2_Q31 ) ); // Q11 + move32(); } } - else + ELSE { - for ( n = 0; n < n_samples; n++ ) + FOR( n = 0; n < n_samples; n++ ) { - dmx_pha_data[n] += p_data[n] * INV_SQRT_2; + // dmx_pha_data[n] += p_data[n] * INV_SQRT_2; + dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( p_data[n], INV_SQRT_2_Q31 ) ); // Q11 + move32(); } } } - for ( n = 0, m = ( fad_len - 1 ); n < fad_len; n++, m-- ) + FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) { - dmx_pha_data[n] *= fad_g[n]; - dmx_pha_data[n] += ( mem_prev[n] ) * fad_g[m]; + dmx_pha_data[n] = Mpy_32_32( dmx_pha_data[n], fad_g[n] ); + move32(); + dmx_pha_data[n] = L_add( dmx_pha_data[n], Mpy_32_32( mem_prev[n], fad_g[m] ) ); // Q11 + move32(); } /* prc switch */ curr_prc = hStereoDmxEVS->hPHA->curr_prc; - if ( abs( (int16_t) hStereoDmxEVS->itd ) > hStereoDmxEVS->hPHA->prc_thres ) + move32(); + // if ( abs( (int16_t) hStereoDmxEVS->itd ) > hStereoDmxEVS->hPHA->prc_thres ) + IF( GT_16( abs_s( round_fx( hStereoDmxEVS->itd_fx ) ), hStereoDmxEVS->hPHA->prc_thres ) ) { - if ( hStereoDmxEVS->hPHA->curr_prc != STEREO_DMX_EVS_PRC_POC ) + IF( NE_32( hStereoDmxEVS->hPHA->curr_prc, STEREO_DMX_EVS_PRC_POC ) ) { - if ( hStereoDmxEVS->hPHA->prev_prc == STEREO_DMX_EVS_PRC_POC ) + IF( EQ_32( hStereoDmxEVS->hPHA->prev_prc, STEREO_DMX_EVS_PRC_POC ) ) { - hStereoDmxEVS->hPHA->prc_hys_cnt += 1; + hStereoDmxEVS->hPHA->prc_hys_cnt = add( hStereoDmxEVS->hPHA->prc_hys_cnt, 1 ); + move16(); } - else + ELSE { hStereoDmxEVS->hPHA->prc_hys_cnt = 0; + move16(); } - if ( hStereoDmxEVS->hPHA->prc_hys_cnt >= STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) + if ( GE_16( hStereoDmxEVS->hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) { hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; + move32(); } } hStereoDmxEVS->hPHA->prev_prc = STEREO_DMX_EVS_PRC_POC; + move32(); } - else + ELSE { - if ( hStereoDmxEVS->hPHA->curr_prc != STEREO_DMX_EVS_PRC_PHA ) + IF( NE_32( hStereoDmxEVS->hPHA->curr_prc, STEREO_DMX_EVS_PRC_PHA ) ) { - if ( hStereoDmxEVS->hPHA->prev_prc == STEREO_DMX_EVS_PRC_PHA ) + IF( EQ_32( hStereoDmxEVS->hPHA->prev_prc, STEREO_DMX_EVS_PRC_PHA ) ) { - hStereoDmxEVS->hPHA->prc_hys_cnt += 1; + hStereoDmxEVS->hPHA->prc_hys_cnt = add( hStereoDmxEVS->hPHA->prc_hys_cnt, 1 ); + move16(); } - else + ELSE { hStereoDmxEVS->hPHA->prc_hys_cnt = 0; + move16(); } - if ( hStereoDmxEVS->hPHA->prc_hys_cnt >= STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) + if ( GE_16( hStereoDmxEVS->hPHA->prc_hys_cnt, STEREO_DMX_EVS_SWTCH_PRC_HYS_THRES ) ) { hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_PHA; + move32(); } } hStereoDmxEVS->hPHA->prev_prc = STEREO_DMX_EVS_PRC_PHA; + move32(); } - if ( ( is_transient == 1 ) || ( hStereoDmxEVS->aux_dmx_energy[0] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[1] ) || ( hStereoDmxEVS->aux_dmx_energy[1] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[0] ) || ( ( hStereoDmxEVS->hPHA->p_curr_taps[0] == NULL ) && ( hStereoDmxEVS->hPHA->p_curr_taps[1] == NULL ) ) ) + // if ( ( is_transient == 1 ) || ( hStereoDmxEVS->aux_dmx_energy[0] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[1] ) || ( hStereoDmxEVS->aux_dmx_energy[1] > STEREO_DMX_EVS_ILDS_EGY * hStereoDmxEVS->aux_dmx_energy[0] ) || ( ( hStereoDmxEVS->hPHA->p_curr_taps[0] == NULL ) && ( hStereoDmxEVS->hPHA->p_curr_taps[1] == NULL ) ) ) + test(); + test(); + test(); + test(); + IF( EQ_16( is_transient, 1 ) || + BASOP_Util_Cmp_Mant32Exp( hStereoDmxEVS->aux_dmx_energy_fx[0], hStereoDmxEVS->aux_dmx_energy_fx_e[0], Mpy_32_32( STEREO_DMX_EVS_ILDS_EGY_Q17, hStereoDmxEVS->aux_dmx_energy_fx[1] ), add( hStereoDmxEVS->aux_dmx_energy_fx_e[1], 14 ) ) > 0 || + BASOP_Util_Cmp_Mant32Exp( hStereoDmxEVS->aux_dmx_energy_fx[1], hStereoDmxEVS->aux_dmx_energy_fx_e[1], Mpy_32_32( STEREO_DMX_EVS_ILDS_EGY_Q17, hStereoDmxEVS->aux_dmx_energy_fx[0] ), add( hStereoDmxEVS->aux_dmx_energy_fx_e[0], 14 ) ) > 0 || + ( ( hStereoDmxEVS->hPHA->p_curr_taps_fx[0] == NULL ) && ( hStereoDmxEVS->hPHA->p_curr_taps_fx[1] == NULL ) ) ) { hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; + move32(); hStereoDmxEVS->hPHA->prc_hys_cnt = 0; + move16(); } - if ( hStereoDmxEVS->hPHA->curr_prc == STEREO_DMX_EVS_PRC_POC ) + IF( hStereoDmxEVS->hPHA->curr_prc == STEREO_DMX_EVS_PRC_POC ) { p_dmx_data = dmx_poc_data; - if ( curr_prc != hStereoDmxEVS->hPHA->curr_prc ) + IF( NE_32( curr_prc, hStereoDmxEVS->hPHA->curr_prc ) ) { fad_len = hStereoDmxEVS->hPHA->fad_len_prc; - fad_g = hStereoDmxEVS->hPHA->fad_g_prc; + move16(); + fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; - for ( n = 0, m = ( fad_len - 1 ); n < fad_len; n++, m-- ) + FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) { - p_dmx_data[n] *= fad_g[n]; - p_dmx_data[n] += fad_g[m] * dmx_pha_data[n]; + p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n] ); // Q11 + move32(); + p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m], dmx_pha_data[n] ) ); // Q11 + move32(); } } } - else + ELSE { p_dmx_data = dmx_pha_data; - if ( curr_prc != hStereoDmxEVS->hPHA->curr_prc ) + IF( NE_32( curr_prc, hStereoDmxEVS->hPHA->curr_prc ) ) { fad_len = hStereoDmxEVS->hPHA->fad_len_prc; - fad_g = hStereoDmxEVS->hPHA->fad_g_prc; + move16(); + fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; - for ( n = 0, m = ( fad_len - 1 ); n < fad_len; n++, m-- ) + FOR( ( n = 0, m = ( fad_len - 1 ) ); n < fad_len; ( n++, m-- ) ) { - p_dmx_data[n] *= fad_g[n]; - p_dmx_data[n] += fad_g[m] * dmx_poc_data[n]; + p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n] ); // Q11 + move32(); + p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m], dmx_poc_data[n] ) ); // Q11 + move32(); } } } - mvr2s( p_dmx_data, data, n_samples ); + Copy_Scale_sig32_16( p_dmx_data, data, n_samples, 5 ); return; } -#endif /*-------------------------------------------------------------------* @@ -3380,7 +2135,6 @@ void stereo_dmx_evs_enc( * * open and initialize stereo downmix for EVS encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error stereo_dmx_evs_init_encoder_fx( STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS_out, /* o : Stereo downmix for EVS encoder handle */ const Word32 input_Fs /* i : input sampling rate */ @@ -3779,259 +2533,6 @@ ivas_error stereo_dmx_evs_init_encoder_fx( return IVAS_ERR_OK; } -#else -ivas_error stereo_dmx_evs_init_encoder( - STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS_out, /* o : Stereo downmix for EVS encoder handle */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS; - int16_t n, input_frame; - - int16_t m, len, pha_len, fad_len, fad_len2, trans_len, itrh, rfft_ipd_coef_step, n0, input_frame_pha; - float *win, *fad_g, fad_r, tmp_r, a_min, a_max, a_step, *ipd_ff; - const float *p_ipd_w; - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - - hStereoDmxEVS = NULL; - if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_ENC_DATA\n" ) ); - } - - hStereoDmxEVS->itd = 0.0f; - hStereoDmxEVS->pre_dmx_energy[0] = 0.0f; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hStereoDmxEVS->aux_dmx_energy[n] = 0.0f; - } - - hStereoDmxEVS->dmx_weight[0] = 0.5f; - hStereoDmxEVS->dmx_weight[1] = 0.0f; - hStereoDmxEVS->dmx_weight[2] = 0.0f; - - if ( input_frame == L_FRAME16k ) - { - hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_16k; - } - else if ( input_frame == L_FRAME32k ) - { - hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_32k; - } - else if ( input_frame == L_FRAME48k ) - { - hStereoDmxEVS->s_wnd = Stereo_dmx_s_wnd_coef_48k; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); - } - - hStereoDmxEVS->hPOC = NULL; - if ( ( hStereoDmxEVS->hPOC = (STEREO_DMX_EVS_POC_HANDLE) malloc( sizeof( STEREO_DMX_EVS_POC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) ); - } - - hStereoDmxEVS->hPOC->shift_limit = (int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hStereoDmxEVS->hPOC->peakQ[n] = 0.0f; - hStereoDmxEVS->hPOC->peak_width[n] = (float) hStereoDmxEVS->hPOC->shift_limit / 2; - hStereoDmxEVS->hPOC->ispeak[n] = 0; - hStereoDmxEVS->hPOC->itdLR[n] = 0; - } - set_f( hStereoDmxEVS->hPOC->P, 0.0f, L_FRAME48k ); - - if ( input_frame == L_FRAME16k ) - { - hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_48k; - } - else if ( input_frame == L_FRAME32k ) - { - hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_32k; - } - else if ( input_frame == L_FRAME48k ) - { - hStereoDmxEVS->hPOC->wnd = Stereo_dmx_wnd_coef_48k; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); - } - hStereoDmxEVS->hPOC->eps = 2.0f * EVS_PI / ( (float) input_frame ); - - if ( input_frame == L_FRAME16k ) - { - hStereoDmxEVS->hPOC->sin = dft_trigo_32k; - } - else if ( input_frame == L_FRAME32k ) - { - hStereoDmxEVS->hPOC->sin = dft_trigo_32k; - } - else if ( input_frame == L_FRAME48k ) - { - hStereoDmxEVS->hPOC->sin = dft_trigo_48k; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid frame length\n" ); - } - - hStereoDmxEVS->hPOC->confidence = 0.0f; - - hStereoDmxEVS->hPHA = NULL; - if ( ( hStereoDmxEVS->hPHA = (STEREO_DMX_EVS_PHA_HANDLE) malloc( sizeof( STEREO_DMX_EVS_PHA_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_CORFILT_DATA\n" ) ); - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hStereoDmxEVS->hPHA->p_curr_taps[n] = NULL; - hStereoDmxEVS->hPHA->p_prev_taps[n] = NULL; - - set_zero( hStereoDmxEVS->hPHA->data_mem[n], STEREO_DMX_EVS_PHA_LEN_MAX ); - set_zero( hStereoDmxEVS->hPHA->curr_taps[n], STEREO_DMX_EVS_PHA_LEN_MAX ); - } - - if ( input_Fs == 16000 ) - { - len = STEREO_DMX_EVS_PHA_LEN_16; - hStereoDmxEVS->hPHA->fad_len = STEREO_DMX_EVS_FAD_LEN_16; - hStereoDmxEVS->hPHA->prc_thres = STEREO_DMX_EVS_SWTCH_PRC_THRES_16; - hStereoDmxEVS->hPHA->crst_fctr = STEREO_DMX_EVS_CRST_FCTR_16; - } - else if ( input_Fs == 32000 ) - { - len = STEREO_DMX_EVS_PHA_LEN_32; - hStereoDmxEVS->hPHA->fad_len = STEREO_DMX_EVS_FAD_LEN_32; - hStereoDmxEVS->hPHA->prc_thres = STEREO_DMX_EVS_SWTCH_PRC_THRES_32; - hStereoDmxEVS->hPHA->crst_fctr = STEREO_DMX_EVS_CRST_FCTR_32; - } - else if ( input_Fs == 48000 ) - { - len = STEREO_DMX_EVS_PHA_LEN_48; - hStereoDmxEVS->hPHA->fad_len = STEREO_DMX_EVS_FAD_LEN_48; - hStereoDmxEVS->hPHA->prc_thres = STEREO_DMX_EVS_SWTCH_PRC_THRES_48; - hStereoDmxEVS->hPHA->crst_fctr = STEREO_DMX_EVS_CRST_FCTR_48; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid sampling frequency\n" ); - } - - hStereoDmxEVS->hPHA->pha_len = len / 2; - hStereoDmxEVS->hPHA->init_frmCntr = (int16_t) ( FRAMES_PER_SEC * 0.2f ); - hStereoDmxEVS->hPHA->isd_rate_s = 0.0f; - hStereoDmxEVS->hPHA->iccr_s = 0.0f; - - pha_len = hStereoDmxEVS->hPHA->pha_len; - fad_len = hStereoDmxEVS->hPHA->fad_len; - - trans_len = (int16_t) ( (float) pha_len / 20.0f ); - set_f( hStereoDmxEVS->hPHA->win, 1.8f, pha_len - trans_len ); - hStereoDmxEVS->hPHA->win[0] = 1.0f; - tmp_r = 1.0f / ( ( trans_len * 2 ) + 1 ); - win = &( hStereoDmxEVS->hPHA->win[pha_len - trans_len] ); - for ( n = 0; n < trans_len; n++ ) - { - win[n] = ( 0.5f * ( 1.0f + cosf( ( PI2 * ( n + 1 ) ) * tmp_r ) ) ) * 1.8f; - } - - fad_g = hStereoDmxEVS->hPHA->fad_g; - fad_r = 1.0f / (float) ( fad_len + 1 ); - fad_len2 = fad_len / 2; - for ( n = 0, m = ( fad_len - 1 ); n < fad_len2; n++, m-- ) - { - fad_g[n] = (float) ( n + 1 ) * fad_r; - fad_g[m] = 1.0f - fad_g[n]; - } - - hStereoDmxEVS->hPHA->curr_pha = STEREO_DMX_EVS_PHA_IPD; - hStereoDmxEVS->hPHA->prev_pha = STEREO_DMX_EVS_PHA_IPD; - hStereoDmxEVS->hPHA->pha_hys_cnt = 0; - - /* Compute the forgetting factor */ - a_min = 0.8576958985908941f; - a_max = 0.9440608762859234f; - itrh = (int16_t) ( ( 3000 * input_frame ) / ( input_Fs * STEREO_DMX_EVS_SUBBAND_SIZE ) ); /* 3kHz */ - n0 = L_FRAME16k / ( 2 * STEREO_DMX_EVS_SUBBAND_SIZE ); - a_step = ( a_min - a_max ) / ( n0 + 1 - itrh ); - ipd_ff = hStereoDmxEVS->hPHA->ipd_ff; - for ( n = 0; n < itrh; n++ ) - { - ipd_ff[n] = a_max; - } - for ( ; n < ( n0 + 1 ); n++ ) /* 8kHz */ - { - ipd_ff[n] = a_max + ( n - itrh ) * a_step; - } - for ( ; n < STEREO_DMX_EVS_NB_SUBBAND_MAX; n++ ) - { - ipd_ff[n] = a_min; - } - set_f( hStereoDmxEVS->hPHA->Pr, 1.0, STEREO_DMX_EVS_NB_SUBBAND_MAX ); - set_zero( hStereoDmxEVS->hPHA->Pi, STEREO_DMX_EVS_NB_SUBBAND_MAX ); - - n0 = input_frame / ( 4 * STEREO_DMX_EVS_SUBBAND_SIZE ); - input_frame_pha = input_frame / ( 2 * STEREO_DMX_EVS_SUBBAND_SIZE ); - - if ( input_frame == L_FRAME16k ) - { - p_ipd_w = dft_trigo_32k; - rfft_ipd_coef_step = 4; - } - else if ( input_frame == L_FRAME32k ) - { - p_ipd_w = dft_trigo_32k; - rfft_ipd_coef_step = 2; - } - else if ( input_frame == L_FRAME48k ) - { - p_ipd_w = dft_trigo_48k; - rfft_ipd_coef_step = 2; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid sampling frequency\n" ); - } - - win = hStereoDmxEVS->hPHA->rfft_ipd_coef; - len = rfft_ipd_coef_step * STEREO_DMX_EVS_SUBBAND_SIZE; - for ( n = 0; n < n0; n++ ) - { - win[n] = p_ipd_w[n * len]; - win[input_frame_pha - n] = p_ipd_w[n * len]; - } - win[n0] = p_ipd_w[n0 * len]; - - hStereoDmxEVS->hPHA->curr_prc = STEREO_DMX_EVS_PRC_POC; - hStereoDmxEVS->hPHA->prev_prc = STEREO_DMX_EVS_PRC_POC; - hStereoDmxEVS->hPHA->prc_hys_cnt = 0; - - hStereoDmxEVS->hPHA->fad_len_prc = (int16_t) ( STEREO_DMX_EVS_FADE_LEN_PRC * (float) input_Fs / 1000.0f ); - fad_len = hStereoDmxEVS->hPHA->fad_len_prc; - fad_g = hStereoDmxEVS->hPHA->fad_g_prc; - fad_r = 1.0f / (float) ( fad_len + 1 ); - fad_len2 = fad_len / 2; - for ( n = 0, m = ( fad_len - 1 ); n < fad_len2; n++, m-- ) - { - fad_g[n] = (float) ( n + 1 ) * fad_r; - fad_g[m] = 1.0f - fad_g[n]; - } - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hStereoDmxEVS->hPHA->trns_aux_energy[n] = 0.0f; - } - - *hStereoDmxEVS_out = hStereoDmxEVS; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -4039,7 +2540,6 @@ ivas_error stereo_dmx_evs_init_encoder( * * close stereo downmix for EVS encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_dmx_evs_close_encoder_fx( STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS /* i/o: Stereo downmix for EVS encoder handle */ ) @@ -4067,31 +2567,3 @@ void stereo_dmx_evs_close_encoder_fx( return; } -#else -void stereo_dmx_evs_close_encoder( - STEREO_DMX_EVS_ENC_HANDLE *hStereoDmxEVS /* i/o: Stereo downmix for EVS encoder handle */ -) -{ - if ( hStereoDmxEVS == NULL || *hStereoDmxEVS == NULL ) - { - return; - } - - if ( ( *hStereoDmxEVS )->hPOC != NULL ) - { - free( ( *hStereoDmxEVS )->hPOC ); - ( *hStereoDmxEVS )->hPOC = NULL; - } - - if ( ( *hStereoDmxEVS )->hPHA != NULL ) - { - free( ( *hStereoDmxEVS )->hPHA ); - ( *hStereoDmxEVS )->hPHA = NULL; - } - - free( ( *hStereoDmxEVS ) ); - ( *hStereoDmxEVS ) = NULL; - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_eclvq_enc.c b/lib_enc/ivas_stereo_eclvq_enc.c index 39ededb64..d108e3add 100644 --- a/lib_enc/ivas_stereo_eclvq_enc.c +++ b/lib_enc/ivas_stereo_eclvq_enc.c @@ -52,37 +52,22 @@ * * ---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static double log_base2( - double x ) -{ - return log( x ) * INV_LOG_2; -} -#endif /*--------------------------------------------------------------- * get_sign() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 get_sign_fx( Word16 n ) { return extract_l( L_shr( (UWord16) n, 15 ) ); /* extract the sign bit */ } -#else -static int16_t get_sign( int16_t n ) -{ - return (uint16_t) n >> 15; /* extract the sign bit */ -} -#endif /*--------------------------------------------------------------- * ECSQ_quantize_vector() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ECSQ_quantize_vector_fx( const Word32 *input, const Word16 input_e, @@ -106,25 +91,6 @@ void ECSQ_quantize_vector_fx( return; } -#else -void ECSQ_quantize_vector( - const float *input, - const float global_gain, - const int16_t N, - int16_t *output ) -{ - int16_t i; - float inv_global_gain; - - inv_global_gain = 1.0f / global_gain; - for ( i = 0; i < N; ++i ) - { - output[i] = (int16_t) round_f( input[i] * inv_global_gain ); - } - - return; -} -#endif /*--------------------------------------------------------------- * ECSQ_compute_optimal_gain() @@ -132,7 +98,6 @@ void ECSQ_quantize_vector( * compute the optimal global gain for dequantization of output * if all the values in output are zero, it returns 0 * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word32 ECSQ_compute_optimal_gain_fx( // Q15 const Word32 *input, const Word16 input_e, @@ -168,34 +133,6 @@ Word32 ECSQ_compute_optimal_gain_fx( // Q15 return optimal_global_gain; } -#else -float ECSQ_compute_optimal_gain( - const float *input, - const int16_t N, - const int16_t *output ) -{ - int16_t i; - float sum_sq_output; - float sum_input_output; - float optimal_global_gain; - - sum_sq_output = 0.0f; - sum_input_output = 0.0f; - for ( i = 0; i < N; ++i ) - { - sum_sq_output += (float) output[i] * (float) output[i]; - sum_input_output += input[i] * (float) output[i]; - } - - optimal_global_gain = 0.0f; - if ( sum_sq_output != 0.0f ) - { - optimal_global_gain = sum_input_output / sum_sq_output; - } - - return optimal_global_gain; -} -#endif /*--------------------------------------------------------------- * ECSQ_quantize_gain() @@ -203,7 +140,6 @@ float ECSQ_compute_optimal_gain( * quantize global gain * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ECSQ_quantize_gain_fx( Word32 global_gain ) // Q15 { @@ -226,36 +162,12 @@ static Word16 ECSQ_quantize_gain_fx( return index; } -#else -static int16_t ECSQ_quantize_gain( - float global_gain ) -{ - int16_t index; - - - global_gain = max( global_gain, 1.0f ); /* because always index >= 0 anyway */ - - /* min gain = 1 (index 0), max gain ~= 29145 (index 126), domain range ~= 90 dB, resolution 90 / 127 ~= 0.7 dB */ - /* value 127 (ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO) is reserved and indicates that all values in the vector are zero */ - - index = (int16_t) ( ECLVQ_GLOBAL_GAIN_FACTOR * log10f( global_gain ) + 0.4898f ); - - /* for MSE quantization, the value f in (0, 1) is the middle between consecutive quantization points in the linear scale */ - /* 10 ^ (inv_global_gain_factor * f) - 1 = 10 ^ inv_global_gain_factor - 10 ^ (inv_global_gain_factor * f) */ - /* f = 0.5102, and when applying floor to convert to integer, 1 - f = 0.4898 must be used as the offset */ - - index = (int16_t) min( max( index, 0 ), 126 ); - - return index; -} -#endif /*--------------------------------------------------------------- * arith_encode_bit() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_bit_fx( ECSQ_instance *ecsq_inst, const Word16 bit ) @@ -275,32 +187,11 @@ static void arith_encode_bit_fx( return; } -#else -static void arith_encode_bit( - ECSQ_instance *ecsq_inst, - const int16_t bit ) -{ - RangeUniEncState *rc_st_enc; - rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; - - - ecsq_inst->bit_count_estimate += 1024; /* 1024 eq 1 << 10, 22Q10 fixed-point representation */ - - if ( ecsq_inst->encoding_active ) - { - /* call to the actual AC */ - rc_uni_enc_encode_bits( rc_st_enc, bit, 1 ); - } - - return; -} -#endif /*--------------------------------------------------------------- * arith_encode_bits() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_bits_fx( ECSQ_instance *ecsq_inst, const UWord16 n, @@ -320,33 +211,12 @@ static void arith_encode_bits_fx( return; } -#else -static void arith_encode_bits( - ECSQ_instance *ecsq_inst, - const uint16_t n, - int16_t size ) -{ - RangeUniEncState *rc_st_enc; - rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; - - - ecsq_inst->bit_count_estimate += size << 10; /* 22Q10 fixed-point representation */ - - if ( ecsq_inst->encoding_active ) - { - rc_uni_enc_encode_bits( rc_st_enc, n, size ); - } - - return; -} -#endif /*--------------------------------------------------------------- * code_length_from_count() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 code_length_from_count_fx( // Q10 const Word16 c ) { @@ -368,35 +238,11 @@ static Word16 code_length_from_count_fx( // Q10 /* complexity: 1 norm_s, 2 adds, 3 shifts, 1 table lookup */ return res; } -#else -static int16_t code_length_from_count( - const int16_t c ) -{ - /* compute the approximation of code length, 14 - log2(c), in 22Q10 fixed-point representation */ - /* with c in {1, ..., 2 ^ 14}, representing a probability count in 14-bit AC implementations */ - int16_t c_norm; - int16_t res; - -#define WMC_TOOL_SKIP - c_norm = norm_s( (int16_t) c ); /* equivalent with 14 - floor(log_base2(c)) */ -#undef WMC_TOOL_SKIP - - /* compute linear approximation of log2(1 + x), for x in [0, 1], using a look-up table with 64 entries */ - /* normalize to {16384, ..., 32767}, subtract MSB bit, and convert to Q6 for indexing log2_1px_table */ - res = ( c_norm << 10 ) - log2_1px_table[( ( c << c_norm ) - ( 1 << 14 ) + ( 1 << 7 ) ) >> 8]; - - - /* |(14 - log2(c)) - res / (1 << 10)| < 0.0113, for c in {1, ..., 2 ^ 14} */ - /* complexity: 1 norm_s, 2 adds, 3 shifts, 1 table lookup */ - return res; -} -#endif /*--------------------------------------------------------------- * arith_encode_bit_prob() * * encoding for one bit with the probabilies prob_0 = count0 / 2 ^ ECSQ_PROB_BITS and prob_1 = 1 - prob_0 * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_bit_prob_fx( ECSQ_instance *ecsq_inst, const Word16 count0, @@ -426,41 +272,11 @@ static void arith_encode_bit_prob_fx( return; } -#else -static void arith_encode_bit_prob( - ECSQ_instance *ecsq_inst, - const int16_t count0, - const int16_t bit ) -{ - int16_t count; - RangeUniEncState *rc_st_enc; - rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; - - - count = ECSQ_PROB_TOTAL - count0; - - if ( bit == 0 ) - { - count = count0; - } - - ecsq_inst->bit_count_estimate += code_length_from_count( count ); /* 22Q10 fixed-point representation */ - - if ( ecsq_inst->encoding_active ) - { - /* call to the actual AC */ - rc_uni_enc_encode_fast( rc_st_enc, bit * count0, count, 14 ); - } - - return; -} -#endif /*--------------------------------------------------------------- * arith_encode_prob() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_prob_fx( ECSQ_instance *ecsq_inst, const UWord16 table[], @@ -488,40 +304,12 @@ static void arith_encode_prob_fx( return; } -#else -static void arith_encode_prob( - ECSQ_instance *ecsq_inst, - const uint16_t table[], - const int16_t table_size, - const int16_t symbol ) -{ - int16_t count; - RangeUniEncState *rc_st_enc; - - rc_st_enc = (RangeUniEncState *) ecsq_inst->ac_handle; - - count = table_size; /* just to avoid warning when DEBUGGING is deactivated */ - - count = table[symbol] - table[symbol + 1]; - - ecsq_inst->bit_count_estimate += code_length_from_count( count ); /* 22Q10 fixed-point representation */ - - if ( ecsq_inst->encoding_active ) - { - /* call to the actual AC */ - rc_uni_enc_encode_fast( rc_st_enc, ECSQ_PROB_TOTAL - table[symbol], count, 14 ); - } - - return; -} -#endif /*--------------------------------------------------------------- * arith_encode_elias_mod() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_elias_mod_fx( ECSQ_instance *ecsq_inst, const Word16 n ) @@ -553,46 +341,12 @@ static void arith_encode_elias_mod_fx( return; } -#else -static void arith_encode_elias_mod( - ECSQ_instance *ecsq_inst, - const int16_t n ) -{ - int16_t i; - - if ( n <= 1 ) - { - /* code for 0 is 10 and code for 1 is 11 */ - arith_encode_bit( ecsq_inst, 1 ); - arith_encode_bit( ecsq_inst, n ); - } - else /* n >= 2 */ - { - /* code consists of n_bits zero bits, an one bit, and n_bits data bits */ - int16_t n_bits; - - /* n_bits is floor(log_2(n)), the number of bits after the leading one bit */ - n_bits = 30 - norm_l( n ); - for ( i = 0; i < n_bits; i++ ) - { - arith_encode_bit( ecsq_inst, 0 ); - } - arith_encode_bit( ecsq_inst, 1 ); - - /* encode the n_bits data bits at once */ - arith_encode_bits( ecsq_inst, n - ( 1 << n_bits ), n_bits ); - } - - return; -} -#endif /*--------------------------------------------------------------- * arith_encode_prob_escape() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void arith_encode_prob_escape_fx( ECSQ_instance *ecsq_inst, const UWord16 table[], @@ -612,34 +366,12 @@ static void arith_encode_prob_escape_fx( return; } -#else -static void arith_encode_prob_escape( - ECSQ_instance *ecsq_inst, - const uint16_t table[], - const int16_t table_size, - const int16_t symbol ) -{ - if ( symbol < table_size - 1 ) - { - arith_encode_prob( ecsq_inst, table, table_size, symbol ); - } - else - { - arith_encode_prob( ecsq_inst, table, table_size, table_size - 1 ); /* escape symbol */ - /* encode the additional value using a modified Elias integer code */ - arith_encode_elias_mod( ecsq_inst, symbol - ( table_size - 1 ) ); - } - - return; -} -#endif /*--------------------------------------------------------------- * get_best_param() * * * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 get_best_param_fx( Word16 *x, const Word16 start_offset, @@ -712,62 +444,6 @@ static Word16 get_best_param_fx( return param; } -#else -static int16_t get_best_param( - int16_t *x, - const int16_t start_offset, - const int16_t stop_offset, - float *avg_abs_sum, - int16_t *N0 ) -{ - int16_t v; - int16_t val; - int32_t sum_abs; - int16_t count; - int16_t count0; - int16_t param; - - const float offset = INV_LOG_2; /* offset = 1 / ln(2) and log2(offset) ~ 0.528766 */ - - sum_abs = 0; - count = stop_offset - start_offset + 1; - count0 = 0; - - /* compute sum(abs(x[v])) and sum(x[v] == 0) */ - for ( v = start_offset; v <= stop_offset; ++v ) - { - - val = x[v]; - sum_abs += abs( val ); - if ( val == 0 ) - { - ++count0; - } - } - - - /* the vector has at most ECSQ_NONZERO_MAX values of +-1 and the rest are zeros */ - if ( ( count - count0 <= ECSQ_NONZERO_MAX ) && ( sum_abs == count - count0 ) ) - { - *avg_abs_sum = ( sum_abs + 0.25f * count0 ) / count; - *N0 = count0; - - return ECSQ_ALL_ZERO_PARAM; - } - - *avg_abs_sum = ( sum_abs + 0.25f * count0 ) / count; - *N0 = count0; - - /* the best Laplace integer parameter is floor(log2(avg_abs_sum) + log2(offset)) */ - param = (int16_t) floor( log_base2( *avg_abs_sum * offset ) ); - - /* limit param value to the available exponent range */ - param = max( ECSQ_ALL_ZERO_PARAM + 1, param ); - param = min( param, ECSQ_ALL_ZERO_PARAM + ECSQ_PARAM_COUNT - 1 ); - - return param; -} -#endif /*--------------------------------------------------------------- * get_est_size() @@ -776,7 +452,6 @@ static int16_t get_best_param( * ---------------------------------------------------------------*/ #define ECSQ_log2TB_FIRST_PARAM -2 -#ifdef IVAS_FLOAT_FIXED static Word32 get_est_size_fx( // Q10 const Word16 N, Word32 avg_abs_sum, // Q10 @@ -850,72 +525,12 @@ static Word32 get_est_size_fx( // Q10 return size; } -#else -static float get_est_size( - const int16_t N, - float avg_abs_sum, - const int16_t N0, - int16_t param ) -{ - float size; - float two_to_param; - - two_to_param = (float) ( 1 << abs( param ) ); - if ( param < 0 ) - { - two_to_param = 1.0f / two_to_param; - } - - if ( param != ECSQ_ALL_ZERO_PARAM ) /* not all values are zeros */ - { - int16_t index; - index = param - ECSQ_log2TB_FIRST_PARAM; - index = min( index, ECSQ_log2TB_SIZE - 2 ); - - - /* the estimated size in bits is N * log2(2 * 2 ^ param) + */ - /* + N * log2(e) * (avg_abs_sum / 2 ^ param) - (N - N0) * log2(T(2 ^ param)) - */ - /* - N0 * log2(T(2 * 2 ^ param)) */ - size = N * ( 1 + param + INV_LOG_2 * ( avg_abs_sum / two_to_param ) ); - size -= ( N - N0 ) * log2TB[index]; - size -= N0 * log2TB[index + 1]; - } - else - { - /* used for all zero values or for very low entropy with number of nonzeros <= ECSQ_NONZERO_MAX */ - int16_t nonzero; - float required_avg_abs_sum; - - nonzero = N - N0; - - required_avg_abs_sum = ( nonzero + 0.25f * N0 ) / N; /* the vector must have nonzero +-1 and N0 zeros */ - - if ( ( avg_abs_sum == required_avg_abs_sum ) && ( nonzero <= ECSQ_NONZERO_MAX ) ) - { - size = 2.0f; /* log_base2(1 + ECSQ_NONZERO_MAX), indicate the nonzero count */ - - /* the number of bits for the nonzero mask is log2(nchoosek(N, nonzero)) */ - size += ECSQ_log2_fact[N] - ECSQ_log2_fact[N - nonzero] - ECSQ_log2_fact[nonzero]; - - size += (float) nonzero; /* indicate the signs for nonzero values */ - } - else - { - /* the method cannot be used, return a huge value so that it will never be chosen */ - size = 1.0e11f; - } - } - - return size; -} -#endif /*--------------------------------------------------------------- * ECSQ_encode_raw() * * encode input, which contains a concatenation of quantized RE8 integer-valued vectors; * the return value is the approximate number of bits written, expressed in 22Q10 fixed-point representation * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word32 ECSQ_encode_raw_fx( ECSQ_instance *ecsq_inst, Word16 *input, @@ -1114,188 +729,6 @@ static Word32 ECSQ_encode_raw_fx( return L_sub( ecsq_inst->bit_count_estimate, bit_count_estimate_initial ); } -#else -static int32_t ECSQ_encode_raw( - ECSQ_instance *ecsq_inst, - int16_t *input, - const int16_t N ) -{ - int32_t bit_count_estimate_initial; - - float total_size; - int16_t segment_count; - - int16_t seg_length, seg_start, seg_stop, segment, seg_count0; - int32_t est_size; - - int16_t est_param, first_param, last_param, param; - float best_size, test_size; - int16_t best_param, best_params[ECSQ_VECTOR_SIZE_MAX / ECSQ_SEGMENT_SIZE]; - int16_t saved_seg_count0[ECSQ_VECTOR_SIZE_MAX / ECSQ_SEGMENT_SIZE]; - - float avg_abs_sum; - const float scale_Q10 = 1.0f / 1024.0f; - int16_t i, idx, shift, val, sym, nonzero, left0, left1, count, count0, lsbs; - int16_t param_zb, best_param_zb; /* zero-based parameter index for coding */ - const uint16_t *tab_vals, *tab_abs_lsbs; - - bit_count_estimate_initial = ecsq_inst->bit_count_estimate; - - - total_size = 0.0f; - segment_count = ( N + ECSQ_SEGMENT_SIZE - 1 ) / ECSQ_SEGMENT_SIZE; - - for ( segment = 0; segment < segment_count; ++segment ) - { - seg_start = segment * ECSQ_SEGMENT_SIZE; - seg_stop = min( seg_start + ECSQ_SEGMENT_SIZE, N ) - 1; - seg_length = seg_stop - seg_start + 1; - - est_param = get_best_param( input, seg_start, seg_stop, &avg_abs_sum, &seg_count0 ); - saved_seg_count0[segment] = seg_count0; - - /* find the best param around est_param for the current segment count */ - best_size = 1.0e10f; - best_param = -1000; - - if ( est_param == ECSQ_ALL_ZERO_PARAM ) /* all values are zero */ - { - first_param = ECSQ_ALL_ZERO_PARAM; - last_param = ECSQ_ALL_ZERO_PARAM + 2 * ECSQ_PARAM_SEARCH_RANGE; - } - else - { - first_param = max( ECSQ_ALL_ZERO_PARAM, est_param - ECSQ_PARAM_SEARCH_RANGE ); - last_param = min( est_param + ECSQ_PARAM_SEARCH_RANGE, ECSQ_ALL_ZERO_PARAM + ECSQ_PARAM_COUNT - 1 ); - } - - for ( param = first_param; param <= last_param; ++param ) - { - param_zb = param - ECSQ_ALL_ZERO_PARAM; - count = ECSQ_tab_param[ecsq_inst->config_index][param_zb] - ECSQ_tab_param[ecsq_inst->config_index][param_zb + 1]; - test_size = scale_Q10 * code_length_from_count( count ); - - test_size += get_est_size( seg_length, avg_abs_sum, seg_count0, param ); - - if ( test_size < best_size ) - { - best_param = param; - best_size = test_size; - } - } - - best_params[segment] = best_param; - total_size += best_size; - } - - if ( !ecsq_inst->encoding_active ) /* only size estimation is needed */ - { - est_size = (int32_t) ( total_size * 1024.0 + 0.5 ); /* 22Q10 fixed-point representation */ - - return est_size; - } - - /* encode with the best parameters: best_params[] */ - for ( segment = 0; segment < segment_count; ++segment ) - { - seg_start = segment * ECSQ_SEGMENT_SIZE; - seg_stop = seg_start + ECSQ_SEGMENT_SIZE - 1; - seg_length = ECSQ_SEGMENT_SIZE; - if ( segment == segment_count - 1 ) - { - seg_stop = N - 1; - seg_length = seg_stop - seg_start + 1; - } - - best_param_zb = best_params[segment] - ECSQ_ALL_ZERO_PARAM; - shift = max( 0, best_param_zb - 3 ); /* first nonzero shift of 1 is used for param 3 */ - - arith_encode_prob( ecsq_inst, ECSQ_tab_param[ecsq_inst->config_index], ECSQ_PARAM_COUNT, best_param_zb ); - - /* encode the actual values if not using the ECSQ_ALL_ZERO_PARAM parameter */ - if ( best_param_zb != 0 ) - { - tab_vals = ECSQ_tab_vals[best_param_zb - 1]; - idx = min( shift, 4 ); - tab_abs_lsbs = ECSQ_tab_abs_lsbs[idx]; - - for ( i = seg_start; i <= seg_stop; ++i ) - { - val = input[i]; - sym = (int16_t) abs( val ); - - if ( shift != 0 ) - { - lsbs = sym & ( ( 1 << shift ) - 1 ); - sym = sym >> shift; - - arith_encode_prob_escape( ecsq_inst, tab_vals, ECSQ_TAB_VALS_SIZE, sym ); - - if ( ( sym > 0 ) || ( shift > 4 ) ) - { - arith_encode_bits( ecsq_inst, lsbs, shift ); - } - else /* (sym == 0) && (shift <= 4) */ - { - arith_encode_prob( ecsq_inst, tab_abs_lsbs, 1 << shift, lsbs ); - } - } - else /* shift == 0 */ - { - arith_encode_prob_escape( ecsq_inst, tab_vals, ECSQ_TAB_VALS_SIZE, sym ); - } - - if ( val != 0 ) - { - arith_encode_bit( ecsq_inst, get_sign( val ) ); - } - } - } - else - { - nonzero = seg_length - saved_seg_count0[segment]; - - - arith_encode_bits( ecsq_inst, nonzero, 2 ); /* log_base2(ECSQ_NONZERO_MAX + 1) == 2 */ - - left1 = nonzero; - left0 = seg_length - nonzero; - - for ( i = seg_start; i <= seg_stop; ++i ) - { - val = input[i]; - sym = (int16_t) abs( val ); - - - if ( left1 == 0 ) - { - } - else if ( left0 == 0 ) - { - } - else - { - count0 = left0 * ECSQ_tab_inverse[left0 + left1]; /* left0 * round(ECSQ_PROB_TOTAL / (left0 + left1)) */ - arith_encode_bit_prob( ecsq_inst, count0, sym ); - } - - if ( sym != 0 ) - { - arith_encode_bit( ecsq_inst, get_sign( val ) ); - --left1; - } - else - { - --left0; - } - } - } - } - - - return ecsq_inst->bit_count_estimate - bit_count_estimate_initial; -} -#endif /*--------------------------------------------------------------- * ECSQ_encode_target_SNR() @@ -1309,7 +742,6 @@ static int32_t ECSQ_encode_raw( #define ECSQ_MAX_BITS_ITERATIONS 2 -#ifdef IVAS_FLOAT_FIXED Word32 ECSQ_encode_target_SNR_fx( ECSQ_instance *ecsq_inst, const Word32 *input, @@ -1487,144 +919,3 @@ Word32 ECSQ_encode_target_SNR_fx( return L_sub( ecsq_inst->bit_count_estimate, saved_bit_count_estimate ); } -#else -int32_t ECSQ_encode_target_SNR( - ECSQ_instance *ecsq_inst, - const float *input, - const int16_t N, - const float target_SNR, - const int16_t max_bits, - float *output, - int16_t *global_gain_index_output ) -{ - int16_t global_gain_index; - int16_t global_gain_index_last; /* used to potentially save one call to ECSQ_quantize_vector */ - int16_t quantized_input[ECSQ_VECTOR_SIZE_MAX]; - int16_t saved_encoding_active; - int32_t saved_bit_count_estimate; - int32_t test_size, adjust_size; - int16_t i, iteration; - float global_gain, adjust_global_gain_index; - int32_t max_bits_fixpt; - float sum_squared, target_ratio, target_sum_squared_error; - const float global_gain_step = powf( 10.0f, ECLVQ_INV_GLOBAL_GAIN_FACTOR ); - - max_bits_fixpt = max_bits * 1024; /* max_bits_fixpt is in 22Q10 fixed-point representation */ - - if ( target_SNR <= 0.0f ) - { - /* a target SNR of 0.0 dB is already achieved by quantizing all values in the vector to zero */ - *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; - if ( output != NULL ) - { - set_f( output, 0.0f, N ); - } - - return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ - } - - sum_squared = 0.0f; - for ( i = 0; i < N; ++i ) - { - sum_squared += input[i] * input[i]; - } - - if ( sum_squared < 0.25f ) /* all the values in the input vector will always be quantized to zero */ - { - /* the condition above holds because sum(input[i] ^ 2) < 0.25 => max(abs(input[i])) < 0.5 */ - *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; - if ( output != NULL ) - { - set_f( output, 0.0f, N ); - } - - return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ - } - - /* save internal state and activate size evaluation only */ - saved_encoding_active = ecsq_inst->encoding_active; - saved_bit_count_estimate = ecsq_inst->bit_count_estimate; - ecsq_inst->encoding_active = 0; - - /* target_ratio is the target ratio between the sum squared values of input and sum squared values of quantization error */ - target_ratio = powf( 10.0f, target_SNR / 10.0f ); - target_sum_squared_error = sum_squared / target_ratio; - /* the mean of squared quantization error for uniform scalar quantization is 1 / 12, approximately 0.0833 */ - /* when including global_gain, the relationship is target_sum_squared_error ~ (0.0833 * N) * global_gain ^ 2 */ - /* the representable range for global_gain is from 1 (global_gain_index 0) to 29145 (global_gain_index 126) inclusive */ - global_gain = sqrtf( target_sum_squared_error / ( 0.0833f * (float) N ) ); - /* quantize the estimated global_gain */ - global_gain_index = ECSQ_quantize_gain( global_gain ); - - iteration = 0; - - /* do the quantization with the dequantized estimated global_gain_index found */ - global_gain = ECSQ_dequantize_gain( global_gain_index ); - global_gain_index_last = global_gain_index; - ECSQ_quantize_vector( input, global_gain, N, quantized_input ); - - test_size = ECSQ_encode_raw( ecsq_inst, quantized_input, N ); - - ++iteration; - while ( ( test_size > max_bits_fixpt ) && ( iteration < ECSQ_MAX_BITS_ITERATIONS ) ) - { - adjust_size = test_size - max_bits_fixpt; - /* assume doubling the quantization step size will reduce the entropy with (up to) one bit */ - adjust_global_gain_index = (int16_t) ceil( adjust_size / ( 1024.0f * N * log_base2( global_gain_step ) ) ); - global_gain_index = min( (int16_t) ( global_gain_index + adjust_global_gain_index ), 126 ); - - global_gain = ECSQ_dequantize_gain( global_gain_index ); - global_gain_index_last = global_gain_index; - ECSQ_quantize_vector( input, global_gain, N, quantized_input ); - - test_size = ECSQ_encode_raw( ecsq_inst, quantized_input, N ); - - ++iteration; - } - - if ( test_size > max_bits_fixpt ) - { - /* further increase the quantization step with the smallest increment for global_gain_index */ - global_gain_index = (int16_t) min( global_gain_index + 1, 126 ); - } - - /* restore internal state */ - ecsq_inst->encoding_active = saved_encoding_active; - ecsq_inst->bit_count_estimate = saved_bit_count_estimate; - - /* do the quantization with the dequantized final global_gain_index found */ - global_gain = ECSQ_dequantize_gain( global_gain_index ); - - if ( global_gain_index != global_gain_index_last ) - { - ECSQ_quantize_vector( input, global_gain, N, quantized_input ); - } - - global_gain = ECSQ_compute_optimal_gain( input, N, quantized_input ); - - if ( global_gain == 0.0f ) /* all values in quantized_input are zero */ - { - *global_gain_index_output = ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO; - if ( output != NULL ) - { - set_f( output, 0.0f, N ); - } - - return 0; /* nothing is coded when global gain index is ECSQ_GLOBAL_GAIN_INDEX_ALL_ZERO */ - } - - global_gain_index = ECSQ_quantize_gain( global_gain ); - *global_gain_index_output = global_gain_index; - - - if ( output != NULL ) - { - global_gain = ECSQ_dequantize_gain( global_gain_index ); - ECSQ_dequantize_vector( quantized_input, global_gain, N, output ); - } - - ECSQ_encode_raw( ecsq_inst, quantized_input, N ); - - return ecsq_inst->bit_count_estimate - saved_bit_count_estimate; -} -#endif diff --git a/lib_enc/ivas_stereo_ica_enc.c b/lib_enc/ivas_stereo_ica_enc.c index 8cd1d01d8..dbf4e1f7c 100644 --- a/lib_enc/ivas_stereo_ica_enc.c +++ b/lib_enc/ivas_stereo_ica_enc.c @@ -43,15 +43,12 @@ #include "ivas_rom_com.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*--------------------------------------------------------------- * Local function prototypes * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void unclr_calc_corr_features_fx( STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ @@ -64,24 +61,7 @@ static void unclr_calc_corr_features_fx( const int16_t lagSearchRange[], /* i : minimum and maximum lags for corrEst[] */ Word32 *corrEst_ncorr, /* o : norm. x-correlation btw. current and previous correlation buffers */ Word16 *corrEst_ncorr_exp ); -#else -static void unclr_calc_corr_features( STEREO_CLASSIF_HANDLE hStereoClassif, STEREO_TCA_ENC_HANDLE hStereoTCA, const float buf1[], const float buf2[], const int16_t length, const float corrEst[], const int16_t lagSearchRange[], float *corrEst_ncorr ); -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define XL_BIAS 0.20f -#define XH_BIAS 0.40f -#define XL_WIDTH 0.12f -#define XH_WIDTH 0.15f /* 0.25 is MAX */ -#define YL_DIST 7.0f -#define YH_DIST 9.0f -#define SMOOTH_DIST_FACTOR 0.4f -#define SMOOTH_ENV_FACTOR 0.6f -#endif #define XL_BIAS_FX_Q15 6554 #define XH_BIAS_FX_Q15 13107 @@ -94,19 +74,12 @@ static void unclr_calc_corr_features( STEREO_CLASSIF_HANDLE hStereoClassif, STER #define B_WIDTH_FX_Q31 32212192 #define SMOOTH_ENV_FACTOR_FX_Q15 19661 -#ifndef IVAS_FLOAT_FIXED -#define A_BIAS ( ( XH_BIAS - XL_BIAS ) / ( YH_DIST - YL_DIST ) ) -#define B_BIAS ( XH_BIAS - ( A_BIAS * YH_DIST ) ) -#define A_WIDTH ( ( XH_WIDTH - XL_WIDTH ) / ( YH_DIST - YL_DIST ) ) -#define B_WIDTH ( XH_WIDTH - ( A_WIDTH * YH_DIST ) ) -#endif /*--------------------------------------------------------------- * tcaTargetCh_LA() * * Temporal channel adjustment of LA samples in target channel * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void tcaTargetCh_LA_fx( STEREO_TCA_ENC_HANDLE hStereoTCA, Word32 *ptrChanL, @@ -224,68 +197,12 @@ static void tcaTargetCh_LA_fx( return; } -#else -static void tcaTargetCh_LA( - STEREO_TCA_ENC_HANDLE hStereoTCA, - float *ptrChanL, - float *ptrChanR, - const int16_t currentNCShift, - const int16_t input_frame ) -{ - int16_t i, j; - int16_t tempS; - float tempF1, tempF2, gAdj; - - float *ref, *target; - float win[240]; /* 5 ms at 48 kHz */ - - if ( hStereoTCA->refChanIndx == L_CH_INDX ) - { - ref = ptrChanL; - target = ptrChanR; - } - else - { - ref = ptrChanR; - target = ptrChanL; - } - - tempS = NS2SA( input_frame * FRAMES_PER_SEC, L_SAMPLES_LA_NS ); - tempF1 = 0.0f; - tempF2 = 0.0f; - for ( i = 0; i < ( input_frame - currentNCShift ); i++ ) - { - tempF1 += fabsf( ref[i] ); - tempF2 += fabsf( target[i + currentNCShift] ); - } - gAdj = ( tempF1 == 0 ) ? 1.0f : tempF2 / max( tempF1, 0.00001f ); - - tempF1 = EVS_PI / ( 2.0f * (float) tempS ); - for ( i = 0; i < tempS; i++ ) - { - win[i] = sinf( tempF1 * ( 0.5f + (float) i ) ); - } - - j = 0; - for ( i = ( input_frame - currentNCShift - tempS ); i < input_frame - currentNCShift; i++, j++ ) - { - target[i + currentNCShift] = ( win[j] * gAdj ) * ref[i] + ( 1.0f - win[j] ) * target[i + currentNCShift]; - } - for ( ; i < input_frame; i++, j++ ) - { - target[i + currentNCShift] = gAdj * ref[i]; - } - - return; -} -#endif /*--------------------------------------------------------------- * spectral_balancer() * * Spectral-balancer to take care of the low-freq rumble and * compensate for the pre-emphasis. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void spectral_balancer_fx16( Word16 *signal, /* i/o : signal Qx */ Word16 *mem, /* i/o : mem Qx */ @@ -460,66 +377,6 @@ void spectral_balancer_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -void spectral_balancer( - float *signal, - float *mem, - const int16_t lg, - const int16_t coeff_set ) -{ - int16_t i; - float x0, x1, x2, y0, y1, y2; - float a1, a2, b0, b1, b2; - - y1 = mem[0]; - y2 = mem[1]; - x0 = mem[2]; - x1 = mem[3]; - - /* hp filter 60Hz at 3dB for 8000KHz sampling rate - 1. [b,a] = butter(1, 60.0/8000.0, 'high'); - 2. spectral_balancing_filter - < maybe not needed>> - b =[1, -1] [1, -0.6] - a =[1, -0.95395255590776329] [1, 0.5] */ - if ( coeff_set == 0 ) - { - a1 = 0.747789178258504f; - a2 = -0.272214937925007f; - b0 = 0.505001029045878f; - b1 = -1.01000205809176f; - b2 = 0.505001029045878f; - } - else - { - a1 = -0.13456126833218354f; - a2 = -0.38813694706072926f; - b0 = 1.0f; - b1 = -1.9980666374183167f; - b2 = 1.0f; - } - - for ( i = 0; i < lg; i++ ) - { - x2 = x1; - x1 = x0; - x0 = signal[i]; - y0 = ( y1 * a1 ) + ( y2 * a2 ) + ( x0 * b0 ) + ( x1 * b1 ) + ( x2 * b2 ); - signal[i] = y0; - y2 = y1; - y1 = y0; - } - - mem[0] = ( ( y1 > 1e-10 ) | ( y1 < -1e-10 ) ) ? y1 : 0; - mem[1] = ( ( y2 > 1e-10 ) | ( y2 < -1e-10 ) ) ? y2 : 0; - mem[2] = ( ( x0 > 1e-10 ) | ( x0 < -1e-10 ) ) ? x0 : 0; - mem[3] = ( ( x1 > 1e-10 ) | ( x1 < -1e-10 ) ) ? x1 : 0; - - return; -} -#endif /*--------------------------------------------------------------- @@ -527,7 +384,6 @@ void spectral_balancer( * * De-emphasize and resample the L and R channels. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void deEmphResample( STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA encoder handle */ const Word32 *tempChan1_fx, /* i : Stereo data Qx*/ @@ -580,66 +436,16 @@ static void deEmphResample( return; } -#else -static void deEmphResample( - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA encoder handle */ - const float *tempChan1, /* i : Stereo data */ - const float *tempChan2, /* i : Stereo data */ - float *chan1, - float *chan2, - const int16_t input_frame, - const int16_t dsFactor ) -{ - float buf1[L_FRAME48k], buf2[L_FRAME48k]; - float tempBuf1[2 * L_FRAME_DS], tempBuf2[2 * L_FRAME_DS]; - int16_t i; - int16_t dsFac1, dsFac2; - - /* Estimate first and second stage downsample factors */ - dsFac1 = ( dsFactor >> 1 ); - dsFac2 = dsFactor / dsFac1; - - /* convert stereo data to two distinct channels, e.g., L, R */ - mvr2r( tempChan1, buf1, input_frame ); - mvr2r( tempChan2, buf2, input_frame ); - - /* De-emphasis, 1/(1-mu z^-1), and resample, stage 1 */ - deemph( buf1, PREEMPH_FAC_16k_FLT, input_frame, &hStereoTCA->memdecim[0] ); - deemph( buf2, PREEMPH_FAC_16k_FLT, input_frame, &hStereoTCA->memdecim[1] ); - - for ( i = 0; i < ( input_frame / dsFac1 ); i++ ) - { - tempBuf1[i] = buf1[i * dsFac1]; - tempBuf2[i] = buf2[i * dsFac1]; - } - - /* De-emphasis, 1/(1-mu z^-1), and resample, stage 2 */ - deemph( tempBuf1, PREEMPH_FAC_16k_FLT, ( input_frame / dsFac1 ), &hStereoTCA->memdecim[2] ); - deemph( tempBuf2, PREEMPH_FAC_16k_FLT, ( input_frame / dsFac1 ), &hStereoTCA->memdecim[3] ); - - for ( i = 0; i < ( input_frame / dsFactor ); i++ ) - { - chan1[i] = tempBuf1[i * dsFac2]; - chan2[i] = tempBuf2[i * dsFac2]; - } - - spectral_balancer( chan1, &hStereoTCA->memdecim[4], input_frame / dsFactor, 0 ); /*4 mem */ - spectral_balancer( chan2, &hStereoTCA->memdecim[8], input_frame / dsFactor, 0 ); /*4 mem */ - - return; -} -#endif /*--------------------------------------------------------------- * utilCrossCorr_mod() * * Biased crossCorr estimation between buf1, buf2 over the * lag range of (lagSearchRange[0], lagSearchRange[1]). * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void utilCrossCorr_mod_fx( STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ - const Word32 *buf1, - const Word32 *buf2, + Word32 *buf1, + Word32 *buf2, const Word16 q_com, Word32 *corrEst, /* o : correlation estimate */ Word16 *corrEst_Exp, /* o : correlation estimate */ @@ -647,7 +453,7 @@ static void utilCrossCorr_mod_fx( const Word16 len ) { Word32 C, E1, E2, C_C_mem; - Word16 i, j, E1_exp, E2_exp, Inv_Tot_E_exp, k, C_exp, exp, E1_mul_exp, E2_mul_exp; + Word16 i, j, E1_exp, E2_exp, Inv_Tot_E_exp, k, C_exp, exp, gb; Word16 Inv_Tot_E, corrEst_exp[2 * L_NCSHIFT_DS + 1]; Word64 L64_sum; @@ -655,18 +461,28 @@ static void utilCrossCorr_mod_fx( E1_exp = sub( 31, q_com ); E2_exp = sub( 31, q_com ); - E1 = sum2_32_exp_fx( buf1, len, &E1_exp, 2 ); - E2 = sum2_32_exp_fx( buf2, len, &E2_exp, 2 ); - - // E1E2_exp = s_max( E1_exp, E2_exp ); - // E1 = L_shl( E1, sub( E1_exp, E1E2_exp ) ); - // E2 = L_shl( E2, sub( E2_exp, E1E2_exp ) ); + gb = 0; + move16(); + if ( LT_16( L_norm_arr( buf1, len ), 2 ) ) + { + gb = 2; + move16(); + } + E1 = sum2_32_exp_fx( buf1, len, &E1_exp, gb ); + gb = 0; + move16(); + if ( LT_16( L_norm_arr( buf2, len ), 2 ) ) + { + gb = 2; + move16(); + } + E2 = sum2_32_exp_fx( buf2, len, &E2_exp, gb ); - Word32 E1_mul = BASOP_Util_Add_Mant32Exp( E1, E1_exp, hStereoTCA->E1_mem_fx, hStereoTCA->E1_mem_exp, &E1_mul_exp ); - Word32 E2_mul = BASOP_Util_Add_Mant32Exp( E2, E2_exp, hStereoTCA->E2_mem_fx, hStereoTCA->E2_mem_exp, &E2_mul_exp ); + Word32 E1_mul = BASOP_Util_Add_Mant32Exp( E1, E1_exp, hStereoTCA->E1_mem_fx, hStereoTCA->E1_mem_exp, &E1_exp ); + Word32 E2_mul = BASOP_Util_Add_Mant32Exp( E2, E2_exp, hStereoTCA->E2_mem_fx, hStereoTCA->E2_mem_exp, &E2_exp ); Word32 sqr_inp = Mpy_32_32( E1_mul, E2_mul ); - Word16 sq_exp = add( E1_mul_exp, E2_mul_exp ); + Word16 sq_exp = add( E1_exp, E2_exp ); IF( sqr_inp ) { @@ -757,51 +573,12 @@ static void utilCrossCorr_mod_fx( return; } -#else -static void utilCrossCorr_mod( - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ - const float *buf1, - const float *buf2, - float *corrEst, /* o : correlation estimate */ - const int16_t *lagSearchRange, - const int16_t len ) -{ - float C, E1, E2; - int16_t i, j; - float Inv_Tot_E; - - E1 = sum2_f( buf1, len ); - E2 = sum2_f( buf2, len ); - - Inv_Tot_E = 1.0f / ( ( 2.0f * (float) len ) * sqrtf( ( E1 + hStereoTCA->E1_mem ) * ( E2 + hStereoTCA->E2_mem ) + 0.000000001f ) ); - - hStereoTCA->E1_mem = E1; - hStereoTCA->E2_mem = E2; - - for ( i = lagSearchRange[0], j = 0; i <= 0; i++, j++ ) - { - C = dotp( buf1, buf2 + i, len ); - corrEst[j] = ( C + hStereoTCA->C_mem[j] ) * Inv_Tot_E; - hStereoTCA->C_mem[j] = C; - } - - for ( ; i <= lagSearchRange[1]; i++, j++ ) - { - C = dotp( buf1 - i, buf2, len ); - corrEst[j] = ( C + hStereoTCA->C_mem[j] ) * Inv_Tot_E; - hStereoTCA->C_mem[j] = C; - } - - return; -} -#endif /*--------------------------------------------------------------- * utilCrossCorr() * * crossCorr estimation between buf1, buf2 over the * lag range of (lagSearchRange[0], lagSearchRange[1]). * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void utilCrossCorr_fx( const Word32 *buf1, // buf1_q Word16 buf1_q, @@ -933,79 +710,12 @@ static void utilCrossCorr_fx( return; } -#else -static void utilCrossCorr( - const float *buf1, - const float *buf2, - const float *win, - float *corrEst, /* o : correlation estimate */ - const int16_t *lagSearchRange, - const int16_t len, - const int16_t winSymmFlag ) -{ - float tempBuf1[L_FRAME48k]; - float tempBuf2[L_FRAME48k]; - float temp, scale; - int16_t i, j; - - /* Apply windowing */ - if ( win != NULL ) - { - if ( winSymmFlag == 0 ) - { - v_mult( buf1, win, tempBuf1, len ); - v_mult( buf2, win, tempBuf2, len ); - } - else - { - v_mult( buf1, win, tempBuf1, ( len >> 1 ) ); - v_mult( buf2, win, tempBuf2, ( len >> 1 ) ); - - for ( i = ( len >> 1 ); i < len; i++ ) - { - tempBuf1[i] = win[len - 1 - i] * buf1[i]; - tempBuf2[i] = win[len - 1 - i] * buf2[i]; - } - } - } - else - { - mvr2r( buf1, tempBuf1, len ); - mvr2r( buf2, tempBuf2, len ); - } - - temp = sum2_f( tempBuf1, len ); - temp *= sum2_f( tempBuf2, len ); - scale = ( temp == 0 ) ? 1.0f : inv_sqrt( temp ); - - /* starting point of lag search range should be less than the ending point */ - assert( lagSearchRange[0] <= lagSearchRange[1] ); - - /* first part of noncausal corr est. */ - for ( i = lagSearchRange[0], j = 0; i <= min( 0, lagSearchRange[1] ); i++, j++ ) - { - temp = dotp( tempBuf1 - i, tempBuf2, ( len + i ) ); - corrEst[j] = temp / ( len + i ); - } - - /* second part of noncausal corr est. */ - for ( ; i <= lagSearchRange[1]; i++, j++ ) - { - temp = dotp( tempBuf1, tempBuf2 + i, ( len - i ) ); - corrEst[j] = temp / ( len - i ); - } - v_multc( corrEst, scale, corrEst, j ); - - return; -} -#endif /*--------------------------------------------------------------- * corrStatsEst() * * Non-causal shift estimation to encode future samples. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 TRUNC_FX( Word32 inp, Word16 exp ) { Word16 ouptut; @@ -1506,276 +1216,7 @@ static void corrStatsEst_fx( return; } -#else -static void corrStatsEst( - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA Encoder handle */ - const float *buf1, /* i : channel 1 */ - const float *buf2, /* i : channel 2 */ - const int16_t bufLenDS, /* i : buffer length */ - const int16_t dsFactor, /* i : buffer length */ - const int16_t vad_flag1, /* i : VAD flag channel 1 */ - const int16_t vad_flag2, /* i : VAD flag channel 2 */ - STEREO_CLASSIF_HANDLE hStereoClassif /* i/o: stereo classifier handle */ -) -{ - int16_t lagSearchRange[2]; - float corrEst[2 * L_NCSHIFT_DS + 1]; - int16_t corrLagStats[3]; - float *tempRK; - const float *winInterp; - float rInterp[MAX_INTERPOLATE]; - int16_t interpMin, interpMax, interpLen; - int16_t i, j, k, m; - float tempF, alpha; - float win_bias; - int16_t tempLen, win_width; - float loc_weight_win[4 * L_NCSHIFT_DS + 1]; - float X_hat, Y_hat, XY_hat, X_SQR_hat; - float alpha_reg, beta_reg, reg_prv_corr, dist_reg_prv_corr, bias_par, width_par; - float k1, k2, temp_A, temp_B; - int16_t stmp; - float corrEst_ncorr; - - /* init of regression parameters*/ - X_hat = 0; - X_SQR_hat = 0; - XY_hat = 0; - - /* Initializations */ - alpha = 0.7f; - lagSearchRange[0] = -L_NCSHIFT_DS; - lagSearchRange[1] = L_NCSHIFT_DS; - tempLen = ( 2 * L_NCSHIFT_DS + 1 ); - - set_s( corrLagStats, 0, 3 ); - - /* First iteration of xcorr estimation */ - utilCrossCorr_mod( hStereoTCA, buf1, buf2, corrEst, lagSearchRange, bufLenDS - L_XCORRMEM_DS ); - - /* calculate features for the UNCLR classifier */ - unclr_calc_corr_features( hStereoClassif, hStereoTCA, buf1, buf2, bufLenDS - L_XCORRMEM_DS, corrEst, lagSearchRange, &corrEst_ncorr ); - - for ( i = 1; i < 3; i++ ) - { - v_add( hStereoTCA->corrEstPrev[i], hStereoTCA->corrEstPrev[0], hStereoTCA->corrEstPrev[0], tempLen ); - } - - /* back up the corrEst */ - for ( i = 0; i < 2; i++ ) - { - mvr2r( hStereoTCA->corrEstPrev[i + 1], hStereoTCA->corrEstPrev[i], tempLen ); - } - mvr2r( corrEst, hStereoTCA->corrEstPrev[2], tempLen ); - - temp_A = sumAbs( buf1, L_FRAME_DS - L_XCORRMEM_DS ) + sumAbs( buf2, L_FRAME_DS - L_XCORRMEM_DS ); - temp_B = sumAbs( buf1 + ( L_FRAME_DS - L_XCORRMEM_DS ), L_XCORRMEM_DS ) + sumAbs( buf2 + ( L_FRAME_DS - L_XCORRMEM_DS ), L_XCORRMEM_DS ); - tempF = temp_A + temp_B + hStereoTCA->mem_tempF; - hStereoTCA->mem_tempF = temp_B; - - alpha = 0.93f; - if ( tempF > 4.0f * hStereoTCA->ica_envVarLT ) - { - alpha = 0.83f; - } - else if ( tempF > 2.0f * hStereoTCA->ica_envVarLT ) - { - alpha = 0.85f; - } - else if ( tempF > hStereoTCA->ica_envVarLT ) - { - alpha = 0.90f; - } - - hStereoTCA->corrStatsSmoothFac = alpha; - - /* long term corr Stats estimation */ - v_multc( hStereoTCA->corrEstLT, alpha, hStereoTCA->corrEstLT, 2 * L_NCSHIFT_DS + 1 ); - v_multc( corrEst, 1.0f - alpha, corrEst, 2 * L_NCSHIFT_DS + 1 ); - v_add( hStereoTCA->corrEstLT, corrEst, hStereoTCA->corrEstLT, 2 * L_NCSHIFT_DS + 1 ); - - hStereoTCA->ica_envVarLT = SMOOTH_ENV_FACTOR * hStereoTCA->ica_envVarLT + ( 1 - SMOOTH_ENV_FACTOR ) * tempF; - - mvr2r( hStereoTCA->corrEstLT, corrEst, 2 * L_NCSHIFT_DS + 1 ); - Y_hat = hStereoTCA->delay_0_mem[0]; - /* Note: keep X_hat and X_SQR_hat calculations inside the loop to allow future tuning of MAX_DELAYREGLEN */ - for ( i = 1; i < MAX_DELAYREGLEN; i++ ) - { - X_hat += (float) i; - Y_hat += hStereoTCA->delay_0_mem[i]; - XY_hat += i * hStereoTCA->delay_0_mem[i]; - X_SQR_hat += (float) ( i * i ); - } - X_hat *= INV_MAX_DELAYREGLEN; - Y_hat *= INV_MAX_DELAYREGLEN; - XY_hat *= INV_MAX_DELAYREGLEN; - X_SQR_hat *= INV_MAX_DELAYREGLEN; - - beta_reg = 0; - tempF = X_SQR_hat - ( X_hat * X_hat ); - if ( tempF != 0 ) - { - beta_reg = ( XY_hat - X_hat * Y_hat ) / tempF; - } - alpha_reg = ( Y_hat - beta_reg * X_hat ); - reg_prv_corr = beta_reg * MAX_DELAYREGLEN + alpha_reg; - - if ( TRUNC( reg_prv_corr ) <= -L_NCSHIFT_DS ) - { - reg_prv_corr = -L_NCSHIFT_DS + 1; - } - - if ( TRUNC( reg_prv_corr ) >= L_NCSHIFT_DS ) - { - reg_prv_corr = L_NCSHIFT_DS - 1; - } - - bias_par = A_BIAS * hStereoTCA->smooth_dist_reg_prv_corr + B_BIAS; - bias_par = min( bias_par, XH_BIAS ); - bias_par = max( bias_par, XL_BIAS ); - - width_par = A_WIDTH * hStereoTCA->smooth_dist_reg_prv_corr + B_WIDTH; - width_par = min( width_par, XH_WIDTH ); - width_par = max( width_par, XL_WIDTH ); - - win_width = (int16_t) ( width_par * ( 4 * L_NCSHIFT_DS + 1 ) ); - win_bias = bias_par; - k1 = 0.5f * ( 1.0f + win_bias ); - k2 = 0.5f * ( 1.0f - win_bias ); - - for ( i = 0; i < ( 2 * L_NCSHIFT_DS - 2 * win_width ); i++ ) - { - loc_weight_win[i] = win_bias; - } - - for ( i = ( 2 * L_NCSHIFT_DS - 2 * win_width ); i <= ( 2 * L_NCSHIFT_DS + 2 * win_width ); i++ ) - { - loc_weight_win[i] = k1 + k2 * cosf( EVS_PI * ( ( i - 2 * L_NCSHIFT_DS ) / ( 2.0f * win_width ) ) ); - } - - for ( i = ( 2 * L_NCSHIFT_DS + 2 * win_width ); i < ( 4 * L_NCSHIFT_DS + 1 ); i++ ) - { - loc_weight_win[i] = win_bias; - } - - for ( i = 0, j = L_NCSHIFT_DS - TRUNC( reg_prv_corr ); i < 2 * L_NCSHIFT_DS + 1; i++, j++ ) - { - corrEst[i] *= loc_weight_win[j]; - } - - if ( hStereoTCA->prevTargetGain < 0.8f && vad_flag1 ) - { - /* ch 2 is prev reference channel */ - v_multc( corrEst, 1.2f, corrEst, L_NCSHIFT_DS + 1 ); - v_multc( corrEst + L_NCSHIFT_DS + 1, 0.833f, corrEst + L_NCSHIFT_DS + 1, L_NCSHIFT_DS ); - } - else if ( hStereoTCA->prevTargetGain > 1.2f && vad_flag1 ) - { - /* ch 1 is prev reference channel */ - v_multc( corrEst, 0.833f, corrEst, L_NCSHIFT_DS ); - v_multc( corrEst + L_NCSHIFT_DS, 1.2f, corrEst + L_NCSHIFT_DS, L_NCSHIFT_DS + 1 ); - } - - if ( corrEst_ncorr > 0.8f && vad_flag1 ) - { - i = max( 0, hStereoTCA->prevCorrLagStats[0] - 1 + L_NCSHIFT_DS ); - j = min( 2 * L_NCSHIFT_DS, hStereoTCA->prevCorrLagStats[0] + 1 + L_NCSHIFT_DS ); - k = j - i + 1; - v_multc( corrEst + i, 1.2f, corrEst + i, k ); - } - - /* Initial corr lag estimate */ - corrLagStats[0] = maximum( corrEst, ( lagSearchRange[1] - lagSearchRange[0] + 1 ), &tempF ); - corrLagStats[0] += lagSearchRange[0]; - - stmp = corrLagStats[0] * dsFactor; - hStereoClassif->unclr_fv[E_corrLagStats0] = (float) stmp; - hStereoClassif->xtalk_fv[E_corrLagStats0] = (float) stmp; - hStereoClassif->xtalk_fv[E_ica_corr_value0] = tempF; - - if ( vad_flag1 == 0 && alpha > 0.7f ) - { - corrLagStats[0] = 0; - } - - dist_reg_prv_corr = fabsf( reg_prv_corr - corrLagStats[0] ); - - if ( vad_flag1 == 1 && vad_flag2 == 1 ) - { - hStereoTCA->smooth_dist_reg_prv_corr = SMOOTH_DIST_FACTOR * hStereoTCA->smooth_dist_reg_prv_corr + ( 1.0f - SMOOTH_DIST_FACTOR ) * dist_reg_prv_corr; - - mvr2r( &( hStereoTCA->delay_0_mem[1] ), &( hStereoTCA->delay_0_mem[0] ), MAX_DELAYREGLEN - 1 ); - - hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] = 0.2f * hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] + 0.8f * corrLagStats[0]; - - if ( fabsf( reg_prv_corr - hStereoTCA->delay_0_mem[0] ) > 25 ) - { - set_f( &( hStereoTCA->delay_0_mem[0] ), hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1], MAX_DELAYREGLEN - 1 ); - } - } - else - { - hStereoTCA->smooth_dist_reg_prv_corr = 0.; - } - - if ( vad_flag1 == 0 || vad_flag2 == 0 ) - { - corrLagStats[0] = TRUNC( hStereoTCA->delay_0_mem[MAX_DELAYREGLEN - 1] ); - } - - /* second iteration of xcorr update @ inputFs with interp*/ - tempRK = hStereoTCA->corrEstLT - lagSearchRange[0] + corrLagStats[0]; - set_f( rInterp, 0, MAX_INTERPOLATE ); - - /* select the Rk interp sinc window */ - winInterp = ica_sincInterp4 + SINC_ORDER1; - if ( dsFactor == 2 ) - { - winInterp = ica_sincInterp2 + SINC_ORDER1; - } - else if ( dsFactor == 6 ) - { - winInterp = ica_sincInterp6 + SINC_ORDER1; - } - - corrLagStats[1] = corrLagStats[0] * dsFactor; - - interpMin = max( -( dsFactor - 1 ), -corrLagStats[1] - L_NCSHIFT_DS * dsFactor ); - interpMax = min( ( dsFactor - 1 ), L_NCSHIFT_DS * dsFactor - corrLagStats[1] ); - interpLen = interpMax - interpMin + 1; - - for ( i = interpMin, k = 0; i <= interpMax; i++, k++ ) - { - rInterp[k] = 0.0f; - for ( j = -SINC_ORDER1 / dsFactor; j <= SINC_ORDER1 / dsFactor; j++ ) - { - m = j * dsFactor; - if ( ( m - i >= -SINC_ORDER1 ) && ( m - i <= SINC_ORDER1 ) ) - { - if ( j > lagSearchRange[1] - corrLagStats[0] ) - { - rInterp[k] += winInterp[m - i] * tempRK[lagSearchRange[1] - corrLagStats[0]]; - } - else if ( j < lagSearchRange[0] - corrLagStats[0] ) - { - rInterp[k] += winInterp[m - i] * tempRK[lagSearchRange[0] - corrLagStats[0]]; - } - else - { - rInterp[k] += winInterp[m - i] * tempRK[j]; - } - } - } - } - corrLagStats[1] += ( maximum( rInterp, interpLen, &tempF ) + interpMin ); - - /* save corr lag stats for the current frame */ - mvs2s( corrLagStats, hStereoTCA->corrLagStats, 3 ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------- * Function estDownmixGain_fx() * @@ -1938,85 +1379,12 @@ static void estDownmixGain_fx( move32(); return; } -#else + /*--------------------------------------------------------------- - * Function estDownmixGain() - * - * Down mix gain estimation module; convert L/R to M/S. - * ---------------------------------------------------------------*/ - -static void estDownmixGain( - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo TCA Encoder handle */ - const float *chan1, /* i : reference signal */ - const float *chan2, /* i/o: target signal to be scaled */ - const int16_t ncShift, /* i : shift */ - const int16_t length, /* i : input frame length */ - const int16_t element_mode, /* i : element mode */ - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ - const int16_t tdm_LRTD_flag /* i : LRTD stereo mode flag */ -) -{ - int16_t i, i1, i2; - float tempN, tempD; - float alpha, currentGain; - float unclr_instTargetGain; - - if ( hStereoTCA->refChanIndx == L_CH_INDX ) - { - i1 = 0; - i2 = ncShift; - } - else - { - i1 = ncShift; - i2 = 0; - } - - /* abs sample sum estimation */ - tempN = 0; - tempD = 0; - for ( i = 0, tempN = 0.0f, tempD = 0.0f; i < length; i++ ) - { - tempN += fabsf( chan1[i1 + i] ); - tempD += fabsf( chan2[i2 + i] ); - } - - alpha = hStereoTCA->corrStatsSmoothFac; - currentGain = ( tempD == 0 ) ? ( hStereoTCA->prevTargetGain ) : ( tempN / tempD ); - currentGain = max( 1e-5f, currentGain ); - hStereoTCA->instTargetGain = currentGain; - currentGain = (alpha) *log10f( hStereoTCA->prevTargetGain ) + ( 1.0f - alpha ) * log10f( currentGain ); - - if ( element_mode == IVAS_CPE_TD && hStereoClassif != NULL ) - { - tempD = powf( 10, currentGain ); - unclr_instTargetGain = log10f( tempN / ( tempD + 1e-5f ) + 1.0f ); - hStereoClassif->unclr_fv[E_ica_instTargetGain] = unclr_instTargetGain; - } - - if ( tdm_LRTD_flag == 1 ) - { - currentGain = 0.0f; - } - else if ( hStereoTCA->LRTD_G_ATT_cnt > 1 ) /* lrtd_mode == 1 but tdm_LRTD_flag still 0 */ - { - currentGain /= ( (float) hStereoTCA->LRTD_G_ATT_cnt ); - } - - /* quantize the target gain */ - hStereoTCA->indx_ica_gD = (int16_t) usquant( currentGain, &tempD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP, 1 << STEREO_BITS_TCA_GD ); - hStereoTCA->targetGain = powf( 10, tempD ); - - return; -} -#endif - -/*--------------------------------------------------------------- - * Function icaMemUpdate() + * Function icaMemUpdate() * * Recalculates the memories corresponding to the previous frame. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void icaMemUpdate_fx( Encoder_State **sts, /* i/o: encoder state structure */ CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ @@ -2159,137 +1527,12 @@ static void icaMemUpdate_fx( return; } -#else -static void icaMemUpdate( - Encoder_State **sts, /* i/o: encoder state structure */ - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - float *bufChanL, /* i/o: L signal correction from previous frame */ - float *bufChanR, /* i/o: R signal correction from previous frame */ - const int16_t lMemRecalc, /* i : memory length at input Sampling Rate */ - const int16_t lMemRecalc_SCh, /* i : SCh memory length at input Sampling Rate*/ - const int16_t input_frame /* i : frame length */ -) -{ - float *ptr1, *ptr2; - int16_t i; - float ratio_L, One_m_Ratio; - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* Recalc of the memories - Downmix @ inputFs */ - /*----------------------------------------------------------------* - * Create first part of the mixture using the old ratios - *----------------------------------------------------------------*/ - - if ( hCPE->hStereoTD->tdm_last_SM_flag ) - { - ratio_L = hCPE->hStereoTD->tdm_last_ratio_SM; - One_m_Ratio = ratio_L - 1.0f; - } - else - { - ratio_L = hCPE->hStereoTD->tdm_last_ratio; - One_m_Ratio = 1.0f - ratio_L; - } - - ptr1 = sts[0]->input - lMemRecalc - lMemRecalc_SCh; - ptr2 = sts[1]->input - lMemRecalc - lMemRecalc_SCh; - - if ( hCPE->last_element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->flag_skip_DMX ) - { - for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) - { - ptr1[i] = bufChanL[i]; - ptr2[i] = bufChanR[i]; - } - } - else - { - for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) - { - ptr1[i] = bufChanR[i] * One_m_Ratio + bufChanL[i] * ratio_L; - ptr2[i] = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; - } - } - } - else - { - float fac, incr, tmp1, tmp2; - - /* reset the past input signal (the signal is used in SWB BWE) */ - set_f( sts[1]->input - input_frame, 0, input_frame ); - - if ( hCPE->hStereoTD->flag_skip_DMX ) - { - /* reconstruction of the Secondary channel past segment */ - for ( i = 0; i < lMemRecalc_SCh; i++ ) - { - ptr2[i] = bufChanL[i] * One_m_Ratio + bufChanR[i] * ratio_L; - } - - /* overlap-add smoothing to equalize for different DMX signal energy between DFT and TD stereo */ - fac = 1.0f / (float) lMemRecalc; - incr = fac; - - for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) - { - tmp1 = bufChanL[i]; - tmp2 = bufChanR[i]; - - ptr1[i] = ( 1.0f - fac ) * ptr1[i] + fac * tmp1; - /*ptr2[i] = (1.0f - fac) * ptr2[i] + fac * tmp2;*/ /* the secondary channel (downmixed) buffer of DFT stereo is empty ! */ - ptr2[i] = tmp2; - - fac += incr; - } - } - else - { - /* reconstruction of the Secondary channel past segment */ - for ( i = 0; i < lMemRecalc_SCh; i++ ) - { - ptr2[i] = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; - } - - /* overlap-add smoothing to equalize for different DMX signal energy between DFT and TD stereo */ - fac = 1.0f / (float) lMemRecalc; - incr = fac; - - for ( i = lMemRecalc_SCh; i < lMemRecalc + lMemRecalc_SCh; i++ ) - { - tmp1 = bufChanR[i] * One_m_Ratio + bufChanL[i] * ratio_L; - tmp2 = bufChanL[i] * One_m_Ratio - bufChanR[i] * ratio_L; - - ptr1[i] = ( 1.0f - fac ) * ptr1[i] + fac * tmp1; - /*ptr2[i] = (1.0f - fac) * ptr2[i] + fac * tmp2;*/ /* the secondary channel (downmixed) buffer of DFT stereo is empty ! */ - ptr2[i] = tmp2; - - fac += incr; - } - } - } - } - - if ( hCPE->hStereoICBWE != NULL ) - { - assert( L_MEM_RECALC_TBE_NS <= L_MEM_RECALC_NS ); - i = NS2SA( sts[0]->input_Fs, L_MEM_RECALC_TBE_NS ); - mvr2r( bufChanL + lMemRecalc + lMemRecalc_SCh - i, hCPE->hStereoICBWE->icbwe_inp_mem[0], i ); - mvr2r( bufChanR + lMemRecalc + lMemRecalc_SCh - i, hCPE->hStereoICBWE->icbwe_inp_mem[1], i ); - } - - return; -} -#endif /*--------------------------------------------------------------- * stereo_tca_enc() * * Stereo temporal inter-channel adjustment/allocation processing module; * Downmix, convert L/R to M/S. * ---------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tca_enc_fx( CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ const Word16 input_frame /* i : length of a frame per channel */ @@ -2871,448 +2114,11 @@ void stereo_tca_enc_fx( move32(); return; } -#else -void stereo_tca_enc( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int16_t input_frame /* i : length of a frame per channel */ -) -{ - /* temp variables */ - int16_t i, dsFactor, lMemRecalc; - Encoder_State **sts; - STEREO_TCA_ENC_HANDLE hStereoTCA; - - /* Buffers, input Left and right channels @ input_Fs*/ - int16_t lMemRecalc_SCh; - float bufChanL[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH + L_FRAME48k + L_NCSHIFTMAX]; - float bufChanR[L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH + L_FRAME48k + L_NCSHIFTMAX]; - float input_mem_loc[2][NS2SA( 48000, L_MEM_RECALC_NS + L_MEM_RECALC_SCH_NS )]; - float *ptrChanL, *ptrChanR; - /* Buffers at internal sampling rate, i.e., CORR_INTER_FS */ - float bufChanL_DS[L_FRAME_DS + ADDED_MEM_DS]; - float bufChanR_DS[L_FRAME_DS + ADDED_MEM_DS]; - float *ptrChanL_DS, *ptrChanR_DS; - float *target; - int16_t target_idx; - - int16_t prevNCShift, currentNCShift; - int16_t tempLag[2]; - float corrEstStage2[N_MAX_SHIFT_CHANGE + 1]; - - /* temp variables */ - float tempF, tempF1; - int16_t tempS, tempS_buff[3]; - int16_t maxCorrStatsDev, L_shift_adapt; - int16_t musicMode = 0, neighborLimit; - int32_t input_Fs; - int16_t prev_ICA_flag; - - /* initialization */ - sts = hCPE->hCoreCoder; - hStereoTCA = hCPE->hStereoTCA; - - input_Fs = sts[0]->input_Fs; - - lMemRecalc = NS2SA( input_Fs, L_MEM_RECALC_NS ); - lMemRecalc_SCh = NS2SA( input_Fs, L_MEM_RECALC_SCH_NS ); - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - return; - } - - /* populate L/R memories into current buffers */ - mvr2r( hStereoTCA->memChanL, bufChanL, lMemRecalc + lMemRecalc_SCh ); - mvr2r( hStereoTCA->memChanR, bufChanR, lMemRecalc + lMemRecalc_SCh ); - - /* pointers to the current frame */ - ptrChanL = bufChanL + lMemRecalc + lMemRecalc_SCh; - ptrChanR = bufChanR + lMemRecalc + lMemRecalc_SCh; - /* copy interleaved stereo data to two channels, e.g., L, R */ - mvr2r( sts[0]->input, ptrChanL, input_frame ); - mvr2r( sts[1]->input, ptrChanR, input_frame ); - - /* UNCLR classifier update */ - if ( hCPE->hStereoClassif->lrtd_mode == 0 ) /* Normal TD mode, no attenuation */ - { - hStereoTCA->LRTD_G_ATT_cnt = 1; - } - else if ( hCPE->hStereoTD != NULL ) - { - if ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) /* lrtd_mode == 1, but in td section */ - { - hStereoTCA->LRTD_G_ATT_cnt++; - hStereoTCA->LRTD_G_ATT_cnt = min( 1000, hStereoTCA->LRTD_G_ATT_cnt ); - } - } - - if ( hCPE->element_mode != IVAS_CPE_TD ) - { - hStereoTCA->refChanIndx = L_CH_INDX; - hStereoTCA->corrStatsSmoothFac = 0.7f; - estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, 0, input_frame, hCPE->element_mode, NULL, 0 ); - hStereoTCA->prevTargetGain = hStereoTCA->targetGain; -#ifdef DEBUG_MODE_INFO - hStereoTCA->indx_ica_NCShift = 0; -#endif - - /* back up the L/R missing target */ - mvr2r( bufChanL + input_frame, hStereoTCA->memChanL, lMemRecalc + lMemRecalc_SCh ); - mvr2r( bufChanR + input_frame, hStereoTCA->memChanR, lMemRecalc + lMemRecalc_SCh ); - - hStereoTCA->lMemRecalc = 0; - hStereoTCA->lMemRecalc_12k8 = 0; - hStereoTCA->lMemRecalc_16k = 0; - - return; - } - else if ( hCPE->last_element_mode != IVAS_CPE_TD ) - { - tempF = hStereoTCA->targetGain; - tempF1 = hStereoTCA->prevTargetGain; - tempS = hStereoTCA->prevRefChanIndx; - mvs2s( hStereoTCA->prevCorrLagStats, tempS_buff, 3 ); - stereo_tca_init_enc( hStereoTCA, input_Fs ); - hStereoTCA->targetGain = tempF; - hStereoTCA->prevTargetGain = tempF1; - - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - hStereoTCA->targetGain = min( hStereoTCA->targetGain, 1.0f ); - hStereoTCA->prevTargetGain = min( hStereoTCA->prevTargetGain, 1.0f ); - - hStereoTCA->prevTargetGain = 1; - } - - hStereoTCA->prevRefChanIndx = tempS; - mvs2s( tempS_buff, hStereoTCA->prevCorrLagStats, 3 ); - - /* populate memory */ - if ( hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - mvr2r( sts[0]->input - lMemRecalc - lMemRecalc_SCh, bufChanL, lMemRecalc + lMemRecalc_SCh ); - mvr2r( sts[1]->input - lMemRecalc - lMemRecalc_SCh, bufChanR, lMemRecalc + lMemRecalc_SCh ); - } - } - - /* populate L/R DS memories into current buffers */ - mvr2r( hStereoTCA->memChanL_DS, bufChanL_DS, ADDED_MEM_DS ); - mvr2r( hStereoTCA->memChanR_DS, bufChanR_DS, ADDED_MEM_DS ); - - /* pointers to the current frame of DS */ - ptrChanL_DS = bufChanL_DS + ADDED_MEM_DS; - ptrChanR_DS = bufChanR_DS + ADDED_MEM_DS; - /* resample factor */ - dsFactor = (int16_t) ( input_Fs / CORR_INTER_FS ); - - /* resample the stereo channels */ - - deEmphResample( hStereoTCA, ptrChanL, ptrChanR, ptrChanL_DS, ptrChanR_DS, input_frame, dsFactor ); - - /**********************NEED to Allign first 40 index in each channel ************************************/ - /* inter-channel corrStats estimation */ - - corrStatsEst( hStereoTCA, bufChanL_DS + ADDED_MEM_DS, bufChanR_DS + ADDED_MEM_DS, ( L_FRAME_DS + L_XCORRMEM_DS ), dsFactor, hCPE->hCoreCoder[0]->vad_flag, hCPE->hCoreCoder[1]->vad_flag, hCPE->hStereoClassif ); - /*-----------------------------------------------------------------* - * refine the ICA stats - *-----------------------------------------------------------------*/ - - prev_ICA_flag = 0; - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec && abs( hStereoTCA->prevCorrLagStats[2] ) != 0 ) - { - prev_ICA_flag = 1; - } - - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 || prev_ICA_flag == 1 ) - { - /* initialize the refinement search for NC-shift */ - hStereoTCA->corrLagStats[2] = hStereoTCA->corrLagStats[1]; - - maxCorrStatsDev = N_MAX_SHIFT_CHANGE; - if ( hStereoTCA->corrStatsSmoothFac <= 0.7f ) - { - maxCorrStatsDev = 160; /* L_NCSHIFT_MAX @ 32kHz */ - } - - if ( input_Fs < 32000 ) - { - maxCorrStatsDev = (int16_t) ( maxCorrStatsDev * input_Fs / 32000.0f ); - } - - musicMode = ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 1 || sts[0]->last_core > ACELP_CORE ); - if ( musicMode ) - { - maxCorrStatsDev = 1; - set_s( hStereoTCA->corrLagStats + 1, 0, 2 ); - } - - tempS = ( hStereoTCA->corrLagStats[1] - hStereoTCA->prevCorrLagStats[2] ); - if ( abs( tempS ) > maxCorrStatsDev ) - { - hStereoTCA->corrLagStats[2] = hStereoTCA->prevCorrLagStats[2] + ( ( tempS > 0 ) ? maxCorrStatsDev : -maxCorrStatsDev ); - } - - neighborLimit = maxCorrStatsDev; - - /* refine and search based on the corrlag stats */ - if ( tempS != 0 && dsFactor != 1 && prev_ICA_flag == 0 ) - { - tempF = 0; - if ( !musicMode ) - { - tempLag[0] = min( hStereoTCA->corrLagStats[2], hStereoTCA->prevCorrLagStats[2] ); - tempLag[1] = max( hStereoTCA->corrLagStats[2], hStereoTCA->prevCorrLagStats[2] ); - - neighborLimit = min( 3, maxCorrStatsDev ); - if ( hStereoTCA->prevCorrLagStats[2] < hStereoTCA->corrLagStats[2] ) - { - tempLag[1] = min( tempLag[1], tempLag[0] + neighborLimit ); - } - else - { - tempLag[0] = max( tempLag[0], tempLag[1] - neighborLimit ); - } - - utilCrossCorr( ptrChanL, ptrChanR, NULL, corrEstStage2, tempLag, input_frame, 0 ); - - hStereoTCA->corrLagStats[2] = maximum( corrEstStage2, ( tempLag[1] - tempLag[0] + 1 ), &tempF ); - hStereoTCA->corrLagStats[2] += tempLag[0]; - } - - if ( abs( tempS ) > neighborLimit ) - { - tempLag[0] = hStereoTCA->corrLagStats[1]; - tempLag[1] = hStereoTCA->corrLagStats[1]; - utilCrossCorr( ptrChanL, ptrChanR, NULL, &tempF1, tempLag, input_frame, 0 ); - - if ( tempF1 > tempF || musicMode ) - { - hStereoTCA->corrLagStats[2] = hStereoTCA->prevCorrLagStats[2] + ( ( tempS > 0 ) ? min( (int16_t) abs( tempS ), maxCorrStatsDev ) : max( (int16_t) -abs( tempS ), -maxCorrStatsDev ) ); - } - } - - /* restrict the reference channel for +/- variation */ - if ( ( hStereoTCA->corrLagStats[2] < 0 && hStereoTCA->prevCorrLagStats[2] > 0 ) || ( hStereoTCA->corrLagStats[2] > 0 && hStereoTCA->prevCorrLagStats[2] < 0 ) ) - { - hStereoTCA->corrLagStats[2] = 0; - } - } - - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec /*hCPE->hStereoClassif->lrtd_mode*/ == 1 ) /* Content is considered as uncorrelated -> ICA shift is turned off */ - { - hStereoTCA->corrLagStats[2] = 0; - - if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 && prev_ICA_flag == 0 ) - { - hStereoTCA->prevCorrLagStats[2] = 0; - } - } - - /* Perform the following: - 1. adjust samples, - 2. interp shift variation, - 3. gain estimation */ - prevNCShift = (int16_t) abs( hStereoTCA->prevCorrLagStats[2] ); - currentNCShift = (int16_t) abs( hStereoTCA->corrLagStats[2] ); - - if ( hStereoTCA->prevRefChanIndx == L_CH_INDX ) - { - mvr2r( ptrChanL - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); - v_multc( ptrChanR + prevNCShift - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); - } - else - { - mvr2r( ptrChanL + prevNCShift - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); - v_multc( ptrChanR - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); - } - - target = ptrChanR; - target_idx = R_CH_INDX; - /* identify target signal to correct for shift variations */ - if ( ( prevNCShift == 0 && hStereoTCA->corrLagStats[2] < 0 ) || ( hStereoTCA->prevRefChanIndx == R_CH_INDX ) ) - { - target = ptrChanL; - target_idx = L_CH_INDX; - } - - /* target signal adjustment for temporal shift variations */ - if ( ( prevNCShift - currentNCShift ) != 0 ) - { - L_shift_adapt = L_SHIFT_ADAPT_16k; - if ( input_Fs > INT_FS_16k ) - { - L_shift_adapt = L_SHIFT_ADAPT_MAX; - } - - /* Note!! : Always keep the assert (prevNCShift>>1) below according to the equation used here to get tempS */ - tempS = ( currentNCShift >> 1 ); - if ( abs( currentNCShift - prevNCShift ) <= min( N_MAX_SHIFT_CHANGE, N_MAX_SHIFT_CHANGE * input_Fs / 32000.0f ) ) - { - adjustTargetSignal( ( target - tempS ), prevNCShift, currentNCShift, L_shift_adapt, 0 ); - } - else - { - tempS = min( max( tempS, prevNCShift - currentNCShift + L_shift_adapt - input_frame ), prevNCShift - currentNCShift + lMemRecalc ); - adjustTargetSignal( ( target - tempS ), prevNCShift, currentNCShift, L_shift_adapt, 1 ); - } - if ( target_idx == L_CH_INDX ) - { - mvr2r( target - tempS, &( input_mem_loc[target_idx][lMemRecalc + lMemRecalc_SCh - tempS - currentNCShift] ), currentNCShift + tempS ); - } - else - { - v_multc( target - tempS, hStereoTCA->prevTargetGain, &( input_mem_loc[target_idx][lMemRecalc + lMemRecalc_SCh - tempS - currentNCShift] ), currentNCShift + tempS ); - } - } - - /* reference channel index */ - if ( hStereoTCA->corrLagStats[2] >= 0 ) - { - hStereoTCA->refChanIndx = L_CH_INDX; - } - else - { - hStereoTCA->refChanIndx = R_CH_INDX; - } - - /* Estimate and quantize the gain for scaling */ - estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, currentNCShift, ( input_frame - currentNCShift ), hCPE->element_mode, hCPE->hStereoClassif, hCPE->hStereoTD->tdm_LRTD_flag ); - - /* quantize the corrStats */ - hStereoTCA->indx_ica_NCShift = (int16_t) usquant( ( (float) currentNCShift ) / dsFactor, &tempF, 0, 1.0f, 1 << STEREO_BITS_TCA_CORRSTATS ); - } - else - { - hStereoTCA->refChanIndx = L_CH_INDX; - hStereoTCA->corrLagStats[2] = 0; - hStereoTCA->prevCorrLagStats[2] = 0; - hStereoTCA->indx_ica_NCShift = 0; - - currentNCShift = 0; /* only to avoid compilation warning */ - target = ptrChanL; /* only to avoid compilation warning */ - target_idx = L_CH_INDX; /* only to avoid compilation warning */ - - mvr2r( ptrChanL - lMemRecalc - lMemRecalc_SCh, input_mem_loc[0], lMemRecalc + lMemRecalc_SCh ); - v_multc( ptrChanR - lMemRecalc - lMemRecalc_SCh, hStereoTCA->prevTargetGain, input_mem_loc[1], lMemRecalc + lMemRecalc_SCh ); - - /* Estimate and quantize the gain for scaling */ - estDownmixGain( hStereoTCA, ptrChanL, ptrChanR, 0, input_frame, hCPE->element_mode, hCPE->hStereoClassif, hCPE->hStereoTD->tdm_LRTD_flag ); - } - - /*-----------------------------------------------------------------* - * updates and memory backups - *-----------------------------------------------------------------*/ - - /* back up the L/R missing target */ - mvr2r( bufChanL + input_frame, hStereoTCA->memChanL, lMemRecalc + lMemRecalc_SCh ); - mvr2r( bufChanR + input_frame, hStereoTCA->memChanR, lMemRecalc + lMemRecalc_SCh ); - - if ( currentNCShift != 0 ) - { - /* Temporal channel adjustment of the LA samples based on the NC shift */ - tcaTargetCh_LA( hStereoTCA, ptrChanL, ptrChanR, currentNCShift, input_frame ); - } - /* Update of changed samples corresponding to the memory */ - - icaMemUpdate( sts, hCPE, input_mem_loc[0], input_mem_loc[1], lMemRecalc, lMemRecalc_SCh, input_frame ); - /* populate the st->input target buffer */ - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 0 || prev_ICA_flag == 1 ) - { - mvr2r( target + currentNCShift, sts[target_idx]->input, input_frame ); - } - - if ( hCPE->element_mode != IVAS_CPE_DFT ) - { - /* Scale the Right channel with the gain */ - int16_t j; - int16_t l_ica_ovl = NS2SA( input_Fs, STEREO_L_TCA_OVLP_NS ); - float winSlope = 1.0f / (float) l_ica_ovl; - - tempF1 = hStereoTCA->targetGain; - tempF = hStereoTCA->prevTargetGain; - - for ( i = 0, j = 0; i < l_ica_ovl; i++, j++ ) - { - sts[1]->input[i] = ( 1.0f - j * winSlope ) * tempF * sts[1]->input[i] + ( j * winSlope ) * tempF1 * sts[1]->input[i]; - } - for ( ; i < input_frame; i++ ) - { - sts[1]->input[i] *= tempF1; - } - } - - /* update L/R DS memories */ - mvr2r( bufChanL_DS + L_FRAME_DS, hStereoTCA->memChanL_DS, ADDED_MEM_DS ); - mvr2r( bufChanR_DS + L_FRAME_DS, hStereoTCA->memChanR_DS, ADDED_MEM_DS ); - - /* save the reference channel index for next frame */ - hStereoTCA->prevRefChanIndx = hStereoTCA->refChanIndx; - - /* save the corr lag stats for next frame */ - mvs2s( hStereoTCA->corrLagStats, hStereoTCA->prevCorrLagStats, 3 ); - - /* save the target gain for next frame */ - hStereoTCA->prevTargetGain = hStereoTCA->targetGain; - - return; -} -#endif /*-------------------------------------------------------------------* * stereo_tca_init_enc() * * Stereo temporal inter-channel adjustment (ICA) encoder initialization *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_tca_init_enc( - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo ICA handle */ - const int32_t input_Fs /* i : input sampling frequency */ -) -{ - hStereoTCA->lMemRecalc = NS2SA( input_Fs, L_MEM_RECALC_NS ); - hStereoTCA->lMemRecalc_12k8 = (int16_t) ( ( hStereoTCA->lMemRecalc * INT_FS_12k8 ) / input_Fs ); - hStereoTCA->lMemRecalc_16k = (int16_t) ( ( hStereoTCA->lMemRecalc * INT_FS_16k ) / input_Fs ); - - hStereoTCA->refChanIndx = L_CH_INDX; - hStereoTCA->prevRefChanIndx = L_CH_INDX; - - hStereoTCA->targetGain = 1.0f; - hStereoTCA->prevTargetGain = 1.0f; - hStereoTCA->instTargetGain = 1.0f; - hStereoTCA->corrStatsSmoothFac = 0.7f; - - set_s( hStereoTCA->corrLagStats, 0, 3 ); - set_s( hStereoTCA->prevCorrLagStats, 0, 3 ); - - set_f( hStereoTCA->memChanL, 0.0f, L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH ); - set_f( hStereoTCA->memChanR, 0.0f, L_MEM_RECALC_48K + L_MEM_RECALC_48k_SCH ); - set_f( hStereoTCA->memChanL_DS, 0.0f, ADDED_MEM_DS ); - set_f( hStereoTCA->memChanR_DS, 0.0f, ADDED_MEM_DS ); - set_f( hStereoTCA->memdecim, 0.0f, 12 ); -#ifndef IVAS_FLOAT_FIXED - hStereoTCA->mem_tempF = 0.; - set_f( hStereoTCA->corrEstPrev[0], 0.0f, 2 * L_NCSHIFT_DS + 1 ); - set_f( hStereoTCA->corrEstPrev[1], 0.0f, 2 * L_NCSHIFT_DS + 1 ); - set_f( hStereoTCA->corrEstPrev[2], 0.0f, 2 * L_NCSHIFT_DS + 1 ); - set_f( hStereoTCA->corrEstLT, 0.0f, 2 * L_NCSHIFT_DS + 1 ); - hStereoTCA->ica_envVarLT = 2000.0f; - set_f( hStereoTCA->C_mem, 0.0f, 2 * L_NCSHIFT_DS + 1 ); - hStereoTCA->E1_mem = 0.0f; - hStereoTCA->E2_mem = 0.0f; - set_f( hStereoTCA->delay_0_mem, 0.0f, MAX_DELAYREGLEN ); - hStereoTCA->smooth_dist_reg_prv_corr = 1.0f; -#endif - hStereoTCA->LRTD_G_ATT_cnt = 1; - set32_fx( hStereoTCA->C_mem_fx, 0, add( shl( L_NCSHIFT_DS, 1 ), 1 ) ); - set16_fx( hStereoTCA->C_mem_exp, 0, add( shl( L_NCSHIFT_DS, 1 ), 1 ) ); - hStereoTCA->E1_mem_fx = 0; - move32(); - hStereoTCA->E2_mem_fx = 0; - move32(); - hStereoTCA->E1_E2_mem_exp = 0; - move16(); - return; -} -#endif void stereo_tca_init_enc_fx( STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: Stereo ICA handle */ const Word32 input_Fs /* i : input sampling frequency */ @@ -3398,7 +2204,6 @@ void stereo_tca_init_enc_fx( * Function unclr_calc_corr_features() * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void unclr_calc_corr_features_fx( STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ @@ -3610,103 +2415,3 @@ static void unclr_calc_corr_features_fx( return; } -#else -static void unclr_calc_corr_features( - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier handle */ - STEREO_TCA_ENC_HANDLE hStereoTCA, /* i/o: ICA Stereo Encoder handle */ - const float buf1[], /* i : left channel */ - const float buf2[], /* i : right channel */ - const int16_t length, /* i : length of input signal buffers */ - const float corrEst[], /* i : buffer containing inter-channel correlation values */ - const int16_t lagSearchRange[], /* i : minimum and maximum lags for corrEst[] */ - float *corrEst_ncorr /* o : norm. x-correlation btw. current and previous correlation buffers */ -) -{ - int16_t i, corrLagMax, d_corrLagMax, tempLen; - float num, den; - float corrL, corrR, ener, ener_side, mono_i, side_i, ic_Lm, ic_Rm, tdm_es_em, m_corrL_corrR, d_corrL_corrR; - float prod_i, sum_prod, corrEstMax; - - corrL = 1.0f; - corrR = 1.0f; - ener = 1.0f; - ener_side = 1.0f; - sum_prod = 0.0f; - - for ( i = 0; i < length; i++ ) - { - mono_i = ( buf1[i] + buf2[i] ) / 2.0f; - corrL += buf1[i] * mono_i; - corrR += buf2[i] * mono_i; - ener += mono_i * mono_i; - side_i = ( buf1[i] - buf2[i] ) / 2.0f; - ener_side += side_i * side_i; - prod_i = buf1[i] * buf2[i]; - sum_prod += prod_i; - } - - /* average energy of L and R channels */ - hStereoClassif->ave_ener_L = hStereoTCA->E1_mem / length; - hStereoClassif->ave_ener_R = hStereoTCA->E2_mem / length; - - /* unnormalized L/R correlation */ - sum_prod = log10f( fabsf( sum_prod ) + 1.0f ); - hStereoClassif->unclr_fv[E_sum_prod] = sum_prod; - hStereoClassif->xtalk_fv[E_sum_prod] = sum_prod; - - /* S/M energy ratio */ - tdm_es_em = fabsf( 10.0f * ( log10f( sqrtf( ener_side / L_FRAME_DS ) ) - log10f( sqrtf( ener / L_FRAME_DS ) ) ) ); - hStereoClassif->unclr_fv[E_tdm_es_em] = tdm_es_em; - hStereoClassif->xtalk_fv[E_tdm_es_em] = tdm_es_em; - - /* L/R correlation values (zero lag, maximum) */ - corrLagMax = maximum( corrEst, ( lagSearchRange[1] - lagSearchRange[0] + 1 ), &corrEstMax ); - d_corrLagMax = corrLagMax - hStereoClassif->unclr_corrLagMax_prev; - hStereoClassif->unclr_fv[E_d_corrLagMax] = (float) d_corrLagMax; - hStereoClassif->unclr_corrLagMax_prev = corrLagMax; - hStereoClassif->xtalk_fv[E_d_corrLagMax] = (float) d_corrLagMax; - - if ( corrEstMax < 0 ) - { - corrEstMax = 0; - } - - hStereoClassif->unclr_fv[E_corrEst0] = corrEst[abs( lagSearchRange[0] )]; - hStereoClassif->unclr_fv[E_corrEstMax] = corrEstMax; - hStereoClassif->unclr_fv[E_corrLagMax] = corrLagMax; - hStereoClassif->xtalk_fv[E_corrEst0] = corrEst[abs( lagSearchRange[0] )]; - hStereoClassif->xtalk_fv[E_corrEstMax] = corrEstMax; - hStereoClassif->xtalk_fv[E_corrLagMax] = corrLagMax; - - /* L/M and R/M correlation */ - if ( corrL < 0 ) - { - corrL = 0; - } - - if ( corrR < 0 ) - { - corrR = 0; - } - - ic_Lm = corrL / ener; - ic_Rm = corrR / ener; - m_corrL_corrR = max( fabsf( ic_Lm ), fabsf( ic_Rm ) ) - min( fabsf( ic_Lm ), fabsf( ic_Rm ) ); - d_corrL_corrR = log10f( fabsf( corrL - corrR ) + 1.0f ); - - hStereoClassif->unclr_fv[E_m_corrL_corrR] = m_corrL_corrR; - hStereoClassif->unclr_fv[E_d_corrL_corrR] = d_corrL_corrR; - hStereoClassif->xtalk_fv[E_m_corrL_corrR] = m_corrL_corrR; - - /* norm. x-correlation btw. current and previous correlation buffers */ - tempLen = ( 2 * L_NCSHIFT_DS + 1 ); - num = dotp( corrEst, hStereoTCA->corrEstPrev[2], tempLen ); - den = sqrtf( sum2_f( corrEst, tempLen ) * sum2_f( hStereoTCA->corrEstPrev[2], tempLen ) ); - - *corrEst_ncorr = ( den == 0 ) ? 0.0f : ( num / den ); - hStereoClassif->unclr_fv[E_corrEst_ncorr] = *corrEst_ncorr; - hStereoClassif->xtalk_fv[E_corrEst_ncorr] = *corrEst_ncorr; - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_icbwe_enc.c b/lib_enc/ivas_stereo_icbwe_enc.c index 64e3c4b82..7ed9d71d1 100644 --- a/lib_enc/ivas_stereo_icbwe_enc.c +++ b/lib_enc/ivas_stereo_icbwe_enc.c @@ -42,40 +42,14 @@ #include "ivas_rom_com.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*-------------------------------------------------------------------* * ic_bwe_enc_reset() * * core switching reset of IC BWE memory *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ic_bwe_enc_reset( - STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ -) -{ - /* unscaled & scaled SHB synthesis memory */ - set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, LPC_SHB_ORDER ); - - /* inter-channel BWE spectral shape adj. */ - hStereoICBWE->prevSpecMapping = 0; - hStereoICBWE->prevgsMapping = 1.0f; - set_f( &( hStereoICBWE->memShbSpecMapping ), 0, 1 ); - set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); - set_f( hStereoICBWE->memGsEnerMap, 1.0f, 2 ); - set_f( hStereoICBWE->mem_nrg_L, 0, 2 ); - set_f( hStereoICBWE->mem_nrg_R, 0, 2 ); - set_f( hStereoICBWE->mem_nrg_DMX, 0, 2 ); - hStereoICBWE->gDes_pastFrame = 1.0f; - hStereoICBWE->icbweRefEner = 0.0f; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ic_bwe_enc_reset_fx( STEREO_ICBWE_ENC_HANDLE hStereoICBWE /* i/o: Stereo ICBWE handle */ ) @@ -120,105 +94,12 @@ static void ic_bwe_enc_reset_fx( return; } -#endif /*--------------------------------------------------------------------------* * ic_bwe_specMapping() * * Encode and apply the spectral shape mapping of ref to the non-ref channel *---------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t ic_bwe_enc_specMapping( - const float *shb_frame_target, /* i : target shb */ - float *shb_synth_nonref, /* o : non-ref shb synth */ - float *specMapping, /* i/o: current frame's mapping */ - float *memShbSpecMapping, /* i/o: ic bwe filtering memory */ - float *memShbSpecXcorr /* i/o: ic bwe spec mapping scorr memory */ -) -{ - int16_t idx; - float Txx1 = 0, Txx2 = 0, Txx3 = 0, T_desired = 0; - float T_nonref_target; - float temp, temp0, temp1, temp2, temp3, alpha; - float a, b, c; - float u, u1, u2; - - alpha = 0.5f; - /* Calculate rxx(1)/rxx(0) of the non ref target */ - temp0 = dotp( shb_frame_target, shb_frame_target, L_FRAME16k - 1 ); - temp1 = dotp( shb_frame_target, shb_frame_target + 1, L_FRAME16k - 1 ); - - /* Smoothing */ - temp0 = alpha * memShbSpecXcorr[0] + ( 1 - alpha ) * temp0; - temp1 = alpha * memShbSpecXcorr[1] + ( 1 - alpha ) * temp1; - memShbSpecXcorr[0] = temp0; - memShbSpecXcorr[1] = temp1; - - T_nonref_target = ( temp0 != 0 ) ? ( temp1 / temp0 ) : ( 0 ); - - /* Calculate rxx(1)/rxx(0) of the non ref synth */ - temp0 = dotp( shb_synth_nonref, shb_synth_nonref, L_FRAME16k - 3 ); - temp1 = dotp( shb_synth_nonref, shb_synth_nonref + 1, L_FRAME16k - 3 ); - temp2 = dotp( shb_synth_nonref, shb_synth_nonref + 2, L_FRAME16k - 3 ); - temp3 = dotp( shb_synth_nonref, shb_synth_nonref + 3, L_FRAME16k - 3 ); - - /* Smoothing */ - temp0 = alpha * memShbSpecXcorr[2] + ( 1 - alpha ) * temp0; - temp1 = alpha * memShbSpecXcorr[3] + ( 1 - alpha ) * temp1; - temp2 = alpha * memShbSpecXcorr[4] + ( 1 - alpha ) * temp2; - temp3 = alpha * memShbSpecXcorr[5] + ( 1 - alpha ) * temp3; - - memShbSpecXcorr[2] = temp0; - memShbSpecXcorr[3] = temp1; - memShbSpecXcorr[4] = temp2; - memShbSpecXcorr[5] = temp3; - - if ( temp0 != 0 ) - { - Txx1 = temp1 / temp0; - Txx2 = temp2 / temp0; - Txx3 = temp3 / temp0; - } - - T_desired = T_nonref_target; - - a = 2 * Txx2 * T_desired - Txx3 - Txx1; - b = ( 2 * T_desired * Txx1 - Txx2 - 1.0f ); - c = ( T_desired - Txx1 ); - - u = *specMapping; - temp = ( b * b - 4 * a * c ); - if ( temp >= 0 && a != 0 ) - { - temp = sqrtf( temp ); - u1 = ( -b + temp ) / ( 2 * a ); - u2 = ( -b - temp ) / ( 2 * a ); - - if ( fabsf( u1 ) < 1.0f && fabsf( u2 ) < 1.0f ) - { - u = min( u1, u2 ); - } - else if ( fabsf( u1 ) < 1.0f ) - { - u = u1; - } - else if ( fabsf( u2 ) < 1.0f ) - { - u = u2; - } - } - u = max( min( u, 0 ), -0.6f ); - - /* Quantize spec. mapping **/ - idx = (int16_t) usquant( u, specMapping, -0.6f, 0.2f, 1 << STEREO_ICBWE_SPBITS ); - - /* IC-BWE spec mapping */ - deemph( shb_synth_nonref, *specMapping, L_FRAME16k, memShbSpecMapping ); - - return idx; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 ic_bwe_enc_specMapping_ivas_fx( const Word32 *shb_frame_target_fx, /* i : target shb */ Word16 shb_frame_target_e, @@ -427,8 +308,6 @@ static Word16 ic_bwe_enc_specMapping_ivas_fx( return idx; } -#endif - /*----------------------------------------------------------------------* * ic_bwe_gsMapping() @@ -437,55 +316,6 @@ static Word16 ic_bwe_enc_specMapping_ivas_fx( *-----------------------------------------------------------------------*/ /*! r: return quant. index value */ -#ifndef IVAS_FLOAT_FIXED -static int16_t ic_bwe_enc_gsMapping( - const float relG_targ, /* i : gDes, rel gain target */ - const float *shbSynth, /* i : ref synth signal */ - float *synthSHB_nonref, /* i : nonref synth signal */ - float *gsMapping, /* i/o: gs mapping */ - float *memEner, - const int16_t element_mode /* i : element mode */ -) -{ - int16_t i; - int16_t idx = 0; - float temp1, temp2; - float alpha; - float prev_gsMapping; - - alpha = 0; - prev_gsMapping = *gsMapping; - - /* rel gain of synth signals */ - for ( i = 0, temp1 = 0, temp2 = 0; i < L_FRAME16k; i++ ) - { - temp1 += fabsf( shbSynth[i] ); - temp2 += fabsf( synthSHB_nonref[i] ); - } - temp1 = alpha * memEner[0] + ( 1 - alpha ) * temp1; - temp2 = alpha * memEner[1] + ( 1 - alpha ) * temp2; - - memEner[0] = temp1; - memEner[1] = temp2; - - *gsMapping = ( temp2 == 0 ) ? ( *gsMapping ) : ( ( relG_targ * temp1 ) / temp2 ); - temp2 = ( 0.0f ) * log10f( prev_gsMapping ) + ( 1.0f ) * log10f( *gsMapping ); /* no impact from prev_gsMapping */ - - /* quantize the IC-BWE GS mapping*/ - if ( element_mode == IVAS_CPE_TD ) - { - idx = squant( temp2, gsMapping, icbwe_gsMapping_tbl, 1 << STEREO_ICBWE_GSBITS ); - } - else - { - idx = squant( temp2, gsMapping, icbwe_gsMappingDFT_tbl, 1 << STEREO_ICBWE_GSBITS_DFT ); - } - - *gsMapping = powf( 10, *gsMapping ); - - return idx; -} -#endif /*----------------------------------------------------------------------* * ic_bwe_gsMapping() * @@ -586,102 +416,6 @@ static Word16 ic_bwe_enc_gsMapping_ivas_fx( * * Estimate ICBWE parameters in DFT stereo *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void icbwe_dft_stereo_param( - STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: */ - STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : */ - Encoder_State *st, /* i/o: */ - float *shb_synth_nonref /* i/o: */ -) -{ - float slopeILD, normFac, gDes, alpha; - int16_t gsIndx, spIndx; - float *nrg_L, *nrg_R, *nrg_DMX; - float sum_nrg_L, sum_nrg_R, sum_nrg_DMX; - const float slope_table[4] = { -2.17141801027151f, -1.29118591145892f, -0.588623666024448f, 0 }; - const float spec_table[4] = { -0.6f, -0.4f, -0.2f, 0 }; - - BSTR_ENC_HANDLE hBstr = st->hBstr; - - normFac = 2.5f; /* 1000 * (10/((14400+10400)/2 - (6400+10400)/2)) */ - - nrg_L = hStereoDft->nrg_L; - nrg_R = hStereoDft->nrg_R; - nrg_DMX = hStereoDft->nrg_DMX; - - alpha = 0.0f; - hStereoICBWE->mem_nrg_L[0] = alpha * hStereoICBWE->mem_nrg_L[0] + ( 1 - alpha ) * nrg_L[0]; - hStereoICBWE->mem_nrg_R[0] = alpha * hStereoICBWE->mem_nrg_R[0] + ( 1 - alpha ) * nrg_R[0]; - hStereoICBWE->mem_nrg_DMX[0] = alpha * hStereoICBWE->mem_nrg_DMX[0] + ( 1 - alpha ) * nrg_DMX[0]; - hStereoICBWE->mem_nrg_L[1] = alpha * hStereoICBWE->mem_nrg_L[1] + ( 1 - alpha ) * nrg_L[1]; - hStereoICBWE->mem_nrg_R[1] = alpha * hStereoICBWE->mem_nrg_R[1] + ( 1 - alpha ) * nrg_R[1]; - hStereoICBWE->mem_nrg_DMX[1] = alpha * hStereoICBWE->mem_nrg_DMX[1] + ( 1 - alpha ) * nrg_DMX[1]; - - sum_nrg_L = sum_f( hStereoICBWE->mem_nrg_L, 2 ); - sum_nrg_R = sum_f( hStereoICBWE->mem_nrg_R, 2 ); - sum_nrg_DMX = sum_f( hStereoICBWE->mem_nrg_DMX, 2 ); - - /* refChanIndex_bwe refinement */ - if ( ( sum_nrg_R < 0.64f * sum_nrg_L && hStereoICBWE->refChanIndx_bwe == hStereoICBWE->prev_refChanIndx_bwe ) || sum_nrg_R < 0.36f * sum_nrg_L ) - { - hStereoICBWE->refChanIndx_bwe = L_CH_INDX; - } - else if ( ( sum_nrg_L < 0.64f * sum_nrg_R && hStereoICBWE->refChanIndx_bwe == hStereoICBWE->prev_refChanIndx_bwe ) || sum_nrg_L < 0.36f * sum_nrg_R ) - { - hStereoICBWE->refChanIndx_bwe = R_CH_INDX; - } - - /* Initialization of spIndx */ - slopeILD = 0; - spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); - - if ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - /* Spec Mapping Estimate */ - slopeILD = normFac * ( log10f( ( hStereoICBWE->mem_nrg_L[1] * hStereoICBWE->mem_nrg_R[0] ) / ( hStereoICBWE->mem_nrg_R[1] * hStereoICBWE->mem_nrg_L[0] ) ) ); - slopeILD = ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) ? ( -slopeILD ) : ( slopeILD ); - spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); - if ( spec_table[spIndx] * hStereoICBWE->prevSpecMapping < 0 ) - { - slopeILD = 0; - spIndx = squant( slopeILD, &slopeILD, slope_table, 1 << STEREO_ICBWE_SPBITS_DFT ); - } - hStereoICBWE->prevSpecMapping = spec_table[spIndx]; - - /* ic bwe spec mapping application */ - deemph( shb_synth_nonref, hStereoICBWE->prevSpecMapping, L_FRAME16k, &hStereoICBWE->memShbSpecMapping ); - } - else - { - hStereoICBWE->memShbSpecMapping = 0; - hStereoICBWE->prevSpecMapping = 0; - } - - /* gsMapping estimate */ - - gDes = ( hStereoICBWE->refChanIndx_bwe == L_CH_INDX ) ? ( sum_nrg_R / sum_nrg_DMX ) : ( sum_nrg_L / sum_nrg_DMX ); - gDes = sqrtf( gDes ); - - alpha = 0.5f; - /* Geometric Mean */ - hStereoICBWE->gDes_pastFrame = powf( hStereoICBWE->gDes_pastFrame, alpha ) * powf( gDes, 1 - alpha ); - - gsIndx = ic_bwe_enc_gsMapping( hStereoICBWE->gDes_pastFrame, hStereoICBWE->shbSynthRef, shb_synth_nonref, &( hStereoICBWE->prevgsMapping ), hStereoICBWE->memGsEnerMap, st->element_mode ); - hStereoICBWE->gDes_pastFrame = gDes; - - push_indice( hBstr, IND_STEREO_ICBWE_REF, hStereoICBWE->refChanIndx_bwe, STEREO_ICBWE_REFBITS ); - if ( st->flag_ACELP16k == 1 ) - { - push_indice( hBstr, IND_STEREO_ICBWE_SP, spIndx, STEREO_ICBWE_SPBITS_DFT ); - } - - /* IC BWE GS mapping */ - push_indice( hBstr, IND_STEREO_ICBWE_GS, gsIndx, STEREO_ICBWE_GSBITS_DFT ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void icbwe_dft_stereo_param_ivas_fx( STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: */ STEREO_DFT_ENC_DATA_HANDLE hStereoDft, /* i : */ @@ -847,245 +581,6 @@ static void icbwe_dft_stereo_param_ivas_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -void stereo_icBWE_enc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const float shb_speech_ref[], /* i : SHB speech ref channel */ - float shb_speech_nonref[], /* i/o: SHB speech non-ref channel */ - const float *voice_factors /* i : voicing factors */ -) -{ - int16_t i, j, k, nbSubFr; - STEREO_DFT_ENC_DATA_HANDLE hStereoDft; - STEREO_ICBWE_ENC_HANDLE hStereoICBWE; - BSTR_ENC_HANDLE hBstr; - Encoder_State *st; - int16_t spIndx, gsIndx; - float shb_frame_ref[L_LOOK_16k + L_FRAME16k]; - float excSHB_nonref[L_FRAME16k]; - float shb_frame_nonref[L_LOOK_16k + L_FRAME16k]; - float shb_synth_nonref[L_FRAME16k]; - - float nlMixFac[NB_SUBFR16k]; - float temp1, temp2; - float gDes, gTarget; - int16_t nonRefMemLen, refMemLen; - - /* initialization */ - hStereoDft = hCPE->hStereoDft; - hStereoICBWE = hCPE->hStereoICBWE; - st = hCPE->hCoreCoder[0]; - hBstr = st->hBstr; - - gTarget = hCPE->hStereoTCA->targetGain; /* i : gain norm for target (or R) channel */ - - nonRefMemLen = L_MEM_RECALC_TBE_16K + L_FILT16k; - - if ( st->element_mode == IVAS_CPE_TD ) - { - refMemLen = L_MEM_RECALC_TBE_16K + 20; - } - else if ( st->element_mode == IVAS_CPE_DFT && st->core_brate > SID_2k40 ) - { - refMemLen = 20; - } - else - { - ic_bwe_enc_reset( hStereoICBWE ); - - return; - } - - if ( st->element_mode == IVAS_CPE_DFT ) - { - /* memory resets */ - set_f( hStereoICBWE->mem_shb_speech_nonref, 0, L_LOOK_16k ); - set_f( shb_speech_nonref, 0, L_FRAME16k ); - - /* core switching reset */ - if ( st->last_core != ACELP_CORE || st->core != ACELP_CORE || st->bwidth < SWB || st->extl == -1 ) - { - ic_bwe_enc_reset( hStereoICBWE ); - if ( st->core != ACELP_CORE || st->bwidth < SWB || st->input_Fs < 32000 || st->extl == -1 ) - { - return; - } - } - - set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); - - hStereoICBWE->prevRefEner = 0; - hStereoICBWE->prevNonRefEner = 0; - - /* SHB frame buffer offsets for TBE processing << re-adjust check >>*/ - set_f( shb_frame_ref, 0, L_LOOK_16k + L_FRAME16k ); - mvr2r( hStereoICBWE->mem_shb_speech_ref, shb_frame_ref, L_LOOK_16k ); - - /* shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */ - mvr2r( shb_speech_ref, shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k ); - mvr2r( shb_frame_ref + L_FRAME16k, hStereoICBWE->mem_shb_speech_ref, L_LOOK_16k ); - - if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); - /*if( gDes < 0.5f || gDes > 2.0f )*/ - if ( gTarget < 0.5f || gTarget > 2.0f ) - { - v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); - } - - nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; - for ( i = 0, k = 0; i < nbSubFr; i++ ) - { - if ( st->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) - { - temp1 = 0; - temp2 = 1.0f; - } - else - { - temp1 = sqrtf( nlMixFac[i] ); - temp2 = sqrtf( 1.0f - nlMixFac[i] ); - } - - for ( j = 0; j < ( L_FRAME16k / nbSubFr ); j++, k++ ) - { - excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; - } - } - - /* LP synthesis */ - syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); - } - else - { - mvr2r( shb_frame_ref, hStereoICBWE->shbSynthRef, L_FRAME16k ); - mvr2r( shb_frame_ref, shb_synth_nonref, L_FRAME16k ); - set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, 10 ); - } - - icbwe_dft_stereo_param( hStereoICBWE, hStereoDft, st, shb_synth_nonref ); - } - else - { - /* SHB frame buffer offsets for TBE processing << re-adjust check >>*/ - set_f( shb_frame_ref, 0, L_LOOK_16k + L_FRAME16k ); - mvr2r( hStereoICBWE->mem_shb_speech_ref, shb_frame_ref, L_LOOK_16k ); - - /* shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */ - mvr2r( shb_speech_ref, shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k ); - mvr2r( shb_frame_ref + L_FRAME16k, hStereoICBWE->mem_shb_speech_ref, L_LOOK_16k ); - - set_f( shb_frame_nonref, 0, L_LOOK_16k + L_FRAME16k ); - mvr2r( hStereoICBWE->mem_shb_speech_nonref, shb_frame_nonref, L_LOOK_16k ); - mvr2r( shb_speech_nonref, shb_frame_nonref + L_LOOK_16k - nonRefMemLen, L_FRAME16k ); - mvr2r( shb_frame_nonref + L_FRAME16k, hStereoICBWE->mem_shb_speech_nonref, L_LOOK_16k ); - - /* core switching reset */ - if ( st->last_core != ACELP_CORE || st->core != ACELP_CORE || st->bwidth < SWB || st->element_mode != IVAS_CPE_TD || st->extl == -1 ) - { - ic_bwe_enc_reset( hStereoICBWE ); - - if ( st->core != ACELP_CORE || st->bwidth < SWB || st->input_Fs < 32000 || st->element_mode != IVAS_CPE_TD || st->extl == -1 ) - { - return; - } - } - - /* resets done here. Need to move them to a separate function */ - if ( ( hStereoICBWE->prev_refChanIndx_bwe != hStereoICBWE->refChanIndx_bwe ) || ( st->last_extl != st->extl ) || st->flag_ACELP16k != 1 ) - { - hStereoICBWE->prevSpecMapping = 0; - hStereoICBWE->memShbSpecMapping = 0; - set_f( hStereoICBWE->memShbSpecXcorr, 0, 6 ); - } - - /* voice fac adjustment based on IC intensities */ - /*temp2 = (float)sqrt(sum2_f(shb_frame_ref + L_LOOK_16k - refMemLen, L_FRAME16k));*/ - temp2 = hStereoICBWE->icbweRefEner; - temp1 = sqrtf( sum2_f( shb_frame_nonref + L_LOOK_16k - refMemLen, L_FRAME16k ) ); - /*temp1 = 0.8f*hStereoICBWE->prevNonRefEner + 0.2f*temp1;*/ - /*temp2 = 0.8f*hStereoICBWE->prevRefEner + 0.2f*temp2;*/ - gDes = ( temp2 == 0 ) ? 1.0f : ( temp1 / temp2 ); - hStereoICBWE->gDes_pastFrame = powf( hStereoICBWE->gDes_pastFrame, 0.5f ) * powf( gDes, 1 - 0.5f ); - - hStereoICBWE->prevRefEner = temp2; - hStereoICBWE->prevNonRefEner = temp1; - - if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - mvr2r( voice_factors, nlMixFac, NB_SUBFR16k ); - - if ( gTarget < 0.5f || gTarget > 2.0f ) - { - v_multc( voice_factors, 0.5f, nlMixFac, NB_SUBFR16k ); - } - - nbSubFr = ( st->flag_ACELP16k == 0 ) ? NB_SUBFR : NB_SUBFR16k; - for ( i = 0, k = 0; i < nbSubFr; i++ ) - { - if ( st->coder_type == UNVOICED || hStereoICBWE->MSFlag == 1 ) - { - temp1 = 0; - temp2 = 1.0f; - } - else - { - temp1 = sqrtf( nlMixFac[i] ); - temp2 = sqrtf( 1.0f - nlMixFac[i] ); - } - - for ( j = 0; j < ( L_FRAME16k / nbSubFr ); j++, k++ ) - { - excSHB_nonref[k] = temp1 * hStereoICBWE->nlExc16k[k] + temp2 * hStereoICBWE->mixExc16k[k]; - } - } - - /* LP synthesis */ - syn_filt( hStereoICBWE->lpSHBRef, LPC_SHB_ORDER, excSHB_nonref, shb_synth_nonref, L_FRAME16k, hStereoICBWE->mem_lpc_shbsynth_nonref, 1 ); - } - else - { - mvr2r( shb_frame_ref, hStereoICBWE->shbSynthRef, L_FRAME16k ); - mvr2r( shb_frame_ref, shb_synth_nonref, L_FRAME16k ); - set_f( hStereoICBWE->mem_lpc_shbsynth_nonref, 0, 10 ); - } - - if ( ( st->extl == SWB_TBE || st->extl == WB_TBE || st->extl == FB_TBE ) && st->flag_ACELP16k == 1 ) - { - /* IC BWE spectral mapping */ - spIndx = ic_bwe_enc_specMapping( shb_frame_nonref, shb_synth_nonref, &( hStereoICBWE->prevSpecMapping ), &( hStereoICBWE->memShbSpecMapping ), hStereoICBWE->memShbSpecXcorr ); - } - else - { - spIndx = 3; - hStereoICBWE->prevSpecMapping = 0; - } - - push_indice( hBstr, IND_STEREO_ICBWE_REF, hStereoICBWE->refChanIndx_bwe, STEREO_ICBWE_REFBITS ); - - if ( st->flag_ACELP16k == 1 ) - { - push_indice( hBstr, IND_STEREO_ICBWE_SP, spIndx, STEREO_ICBWE_SPBITS ); - } - else - { - hStereoICBWE->prevSpecMapping = -0.6f; - } - - /* IC BWE GS mapping */ - gsIndx = ic_bwe_enc_gsMapping( hStereoICBWE->gDes_pastFrame, hStereoICBWE->shbSynthRef, shb_synth_nonref, &( hStereoICBWE->prevgsMapping ), hStereoICBWE->memGsEnerMap, st->element_mode ); - hStereoICBWE->gDes_pastFrame = gDes; - push_indice( hBstr, IND_STEREO_ICBWE_GS, gsIndx, STEREO_ICBWE_GSBITS ); - } - - /* IC-BWE updates */ - hStereoICBWE->prev_refChanIndx_bwe = hStereoICBWE->refChanIndx_bwe; - - return; -} -#endif void stereo_icBWE_enc_ivas_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -1656,7 +1151,6 @@ void stereo_icBWE_init_enc_fx( * * Inter-channel BWE pre-proc of the non-ref channel *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void findRefChanBWE_fx( const Word16 *input0_fx, /* i/o : input 0 Qx */ const Word16 *input1_fx, /* i/o : input 1 Qx */ @@ -1691,39 +1185,6 @@ static void findRefChanBWE_fx( return; } -#else -static void findRefChanBWE( - const float *input0, - const float *input1, - int16_t *refChanIndx_bwe, - const int16_t input_frame, - float *mem0, - float *mem1 ) -{ - float inp0[L_FRAME48k], inp1[L_FRAME48k]; - float tempF, tempF1; - - mvr2r( input0, inp0, input_frame ); - mvr2r( input1, inp1, input_frame ); - - spectral_balancer( inp0, mem0, input_frame, 1 ); - spectral_balancer( inp1, mem1, input_frame, 1 ); - - tempF = sum2_f( inp0, input_frame ); - tempF1 = sum2_f( inp1, input_frame ); - - if ( tempF1 < 0.64f * tempF ) - { - *refChanIndx_bwe = L_CH_INDX; - } - else if ( tempF < 0.64f * tempF1 ) - { - *refChanIndx_bwe = R_CH_INDX; - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -1731,7 +1192,6 @@ static void findRefChanBWE( * * Inter-channel BWE pre-proc of the non-ref channel *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_icBWE_preproc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ const Word16 input_frame, /* i : input frame length */ @@ -1914,153 +1374,3 @@ void stereo_icBWE_preproc_fx( return; } - -#else - -void stereo_icBWE_preproc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - const int16_t input_frame, /* i : input frame length */ - float shb_speech_nonref[] /* o : SHB speech non-ref channel */ -) -{ - int16_t i, refChanIndx_bwe; - STEREO_TCA_ENC_HANDLE hStereoTCA; - STEREO_ICBWE_ENC_HANDLE hStereoICBWE; - Encoder_State *st; - float temp_inp[L_FRAME48k]; - float tempSHB[L_FRAME16k]; - float temp_in[L_FRAME48k]; - int16_t /*nonRefOffset,*/ nonRefMemLen; - float gD; - int32_t input_Fs; - - /* initialization */ - hStereoTCA = hCPE->hStereoTCA; /* Stereo TCA encoder handle */ - hStereoICBWE = hCPE->hStereoICBWE; /* Stereo IC BWE encoder handle */ - st = hCPE->hCoreCoder[0]; - input_Fs = st->input_Fs; - - /*nonRefOffset = NS2SA(st_ivas->input_Fs, ACELP_LOOK_NS - L_MEM_RECALC_TBE_NS);*/ - nonRefMemLen = NS2SA( input_Fs, L_MEM_RECALC_TBE_NS ); - - if ( hCPE->element_mode == IVAS_CPE_MDCT || st->core != ACELP_CORE || st->extl == -1 || input_Fs < 32000 ) - { - set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); - set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); - set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); - set_f( shb_speech_nonref, 0, L_FRAME16k ); - set_f( hStereoICBWE->memHPF, 0, 8 ); - hStereoICBWE->refChanIndx_bwe = hStereoICBWE->prev_refChanIndx_bwe = L_CH_INDX; - - if ( hCPE->element_mode >= IVAS_CPE_DFT && input_Fs >= 32000 ) - { - set_f( temp_inp, 0, L_FRAME48k ); - mvr2r( hStereoICBWE->dataChan[0], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); - - if ( input_Fs == 48000 ) - { - mvr2r( temp_inp, temp_in, L_FRAME48k ); - set_f( temp_inp, 0, L_FRAME48k ); - i = 2 * L_FILT48k + L_FILT_2OVER3; - decimate_2_over_3_allpass( temp_in + ( input_frame - i ), i, temp_inp + ( 2 * ( input_frame - i ) ) / 3, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); - } - /* flip the spectrum */ - for ( i = 0; i < L_FRAME32k; i += 2 ) - { - temp_inp[i] *= -1.0f; - } - mvr2r( temp_inp + L_FRAME32k - 2 * L_FILT32k, hStereoICBWE->memModifyFs_icbwe[0], 2 * L_FILT32k ); - - set_f( temp_inp, 0, L_FRAME48k ); - mvr2r( hStereoICBWE->dataChan[1], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); - - if ( input_Fs == 48000 ) - { - mvr2r( temp_inp, temp_in, L_FRAME48k ); - set_f( temp_inp, 0, L_FRAME48k ); - i = 2 * L_FILT48k + L_FILT_2OVER3; - /* IVAS-219: the same filter memories are used for both channels; the continuity is thus lost; shouldn't the memories be separated? */ - decimate_2_over_3_allpass( temp_in + ( input_frame - i ), i, temp_inp + ( 2 * ( input_frame - i ) ) / 3, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); - } - /* flip the spectrum */ - for ( i = 0; i < input_frame; i += 2 ) - { - temp_inp[i] *= -1.0f; - } - mvr2r( temp_inp + L_FRAME32k - 2 * L_FILT32k, hStereoICBWE->memModifyFs_icbwe[1], 2 * L_FILT32k ); - } - - return; - } - - if ( hCPE->element_mode != IVAS_CPE_TD ) - { - /* initial estimate of refChanIndx_bwe */ - gD = hStereoTCA->targetGain; - - refChanIndx_bwe = hStereoTCA->refChanIndx; - if ( ( gD > 1.0f && refChanIndx_bwe == R_CH_INDX ) || ( gD < 1.0f && refChanIndx_bwe == L_CH_INDX ) ) - { - refChanIndx_bwe = !( hStereoTCA->refChanIndx ); - } - hStereoICBWE->refChanIndx_bwe = refChanIndx_bwe; - - set_f( hStereoICBWE->dec_2over3_mem, 0, L_FILT_2OVER3 ); - set_f( hStereoICBWE->dec_2over3_mem_lp, 0, L_FILT_2OVER3_LP ); - set_f( hStereoICBWE->mem_decim_shb_ch0, 0, ( 2 * L_FILT_MAX ) ); - set_f( shb_speech_nonref, 0, L_FRAME16k ); - set_f( hStereoICBWE->memHPF, 0, 8 ); - - return; - } - - gD = hStereoTCA->targetGain; - - refChanIndx_bwe = hStereoTCA->refChanIndx; - if ( ( gD > 1.0f && refChanIndx_bwe == R_CH_INDX ) || ( gD < 1.0f && refChanIndx_bwe == L_CH_INDX ) ) - { - refChanIndx_bwe = !( hStereoTCA->refChanIndx ); - } - - findRefChanBWE( hStereoICBWE->dataChan[0], hStereoICBWE->dataChan[1], &refChanIndx_bwe, input_frame, &hStereoICBWE->memHPF[0], &hStereoICBWE->memHPF[4] ); - - hStereoICBWE->refChanIndx_bwe = refChanIndx_bwe; - - if ( refChanIndx_bwe == R_CH_INDX ) - { - mvr2r( hStereoICBWE->icbwe_inp_mem[0], temp_inp, nonRefMemLen ); - mvr2r( hStereoICBWE->dataChan[0], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); - } - else - { - mvr2r( hStereoICBWE->icbwe_inp_mem[1], temp_inp, nonRefMemLen ); - mvr2r( hStereoICBWE->dataChan[1], temp_inp + nonRefMemLen, input_frame - nonRefMemLen ); - } - - if ( input_Fs == 48000 ) - { - /*printf("\n Non-ref target HB generation for 48 kHz sample rate needs alignment verification \n");*/ - mvr2r( temp_inp, temp_in, L_FRAME48k ); - set_f( temp_inp, 0, L_FRAME48k ); - decimate_2_over_3_allpass( temp_in, L_FRAME48k, temp_inp, hStereoICBWE->dec_2over3_mem, hStereoICBWE->dec_2over3_mem_lp ); - } - - /* flip the spectrum */ - for ( i = 0; i < input_frame; i += 2 ) - { - temp_inp[i] *= -1.0f; - } - - if ( hCPE->element_mode >= IVAS_CPE_DFT && input_Fs >= 32000 && ( st->last_core != ACELP_CORE || st->last_extl == -1 ) ) - { - mvr2r( hStereoICBWE->memModifyFs_icbwe[!refChanIndx_bwe], hStereoICBWE->mem_decim_shb_ch0, 2 * L_FILT32k ); - } - - /* IVAS-219: Re-wire the shb nonref estimation through a lite CLDFB */ - modify_Fs( temp_inp, L_FRAME32k, 32000, tempSHB, 16000, hStereoICBWE->mem_decim_shb_ch0, 0 ); - - mvr2r( tempSHB, shb_speech_nonref, L_FRAME16k ); - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_mdct_core_enc.c b/lib_enc/ivas_stereo_mdct_core_enc.c index 63499ba90..1b4c9d49f 100644 --- a/lib_enc/ivas_stereo_mdct_core_enc.c +++ b/lib_enc/ivas_stereo_mdct_core_enc.c @@ -40,10 +40,8 @@ #include "ivas_prot.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx_enc.h" -#endif /*-------------------------------------------------------------------* * sync_tcx_mode() @@ -51,7 +49,6 @@ * Synchronize under certain conditions the tcx modes and set overlap * windows accordingly *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void sync_tcx_mode( Encoder_State **st /* i/o: Encoder state */ ) @@ -125,408 +122,12 @@ static void sync_tcx_mode( return; } -#else -static void sync_tcx_mode( - Encoder_State **st /* i/o: Encoder state */ -) -{ - const float prevAccNrg0 = st[0]->hTranDet->subblockEnergies.accSubblockNrg_flt[st[0]->hTranDet->subblockEnergies.nDelay]; - const float prevAccNrg1 = st[1]->hTranDet->subblockEnergies.accSubblockNrg_flt[st[1]->hTranDet->subblockEnergies.nDelay]; - const float lastAccNrg0 = st[0]->hTranDet->subblockEnergies.accSubblockNrg_flt[st[0]->hTranDet->subblockEnergies.nDelay + st[0]->hTranDet->transientDetector.nSubblocksToCheck]; - const float lastAccNrg1 = st[1]->hTranDet->subblockEnergies.accSubblockNrg_flt[st[1]->hTranDet->subblockEnergies.nDelay + st[1]->hTranDet->transientDetector.nSubblocksToCheck]; - - if ( ( st[0]->hTcxEnc->tcxMode == st[1]->hTcxEnc->tcxMode ) && ( st[0]->element_brate == IVAS_48k ) && - ( st[0]->hTcxCfg->tcx_curr_overlap_mode != st[1]->hTcxCfg->tcx_curr_overlap_mode ) ) - { - if ( ( st[0]->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) || ( st[1]->hTcxCfg->tcx_curr_overlap_mode == FULL_OVERLAP ) ) /* synchronize overlaps */ - { - st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode = max( st[0]->hTcxCfg->tcx_curr_overlap_mode, st[1]->hTcxCfg->tcx_curr_overlap_mode ); - } - else - { - st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode = min( st[0]->hTcxCfg->tcx_curr_overlap_mode, st[1]->hTcxCfg->tcx_curr_overlap_mode ); - } - } - - if ( ( prevAccNrg0 * 25.0f > prevAccNrg1 ) && ( prevAccNrg1 * 25.0f > prevAccNrg0 ) && /* 14 dB */ - ( lastAccNrg0 * 16.0f > lastAccNrg1 ) && ( lastAccNrg1 * 16.0f > lastAccNrg0 ) ) /* 12 dB */ - { - st[0]->hTcxEnc->tcxMode = st[1]->hTcxEnc->tcxMode = max( st[0]->hTcxEnc->tcxMode, st[1]->hTcxEnc->tcxMode ); /* synchronize TCX mode of both channels */ - - if ( st[0]->hTcxEnc->tcxMode == TCX_10 ) - { - if ( st[0]->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) - { - st[0]->hTcxCfg->tcx_curr_overlap_mode = st[1]->hTcxCfg->tcx_curr_overlap_mode; - } - - if ( st[0]->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ) - { - st[0]->hTcxCfg->tcx_last_overlap_mode = st[1]->hTcxCfg->tcx_last_overlap_mode; - } - } - - if ( st[1]->hTcxEnc->tcxMode == TCX_10 ) - { - if ( st[1]->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) - { - st[1]->hTcxCfg->tcx_curr_overlap_mode = st[0]->hTcxCfg->tcx_curr_overlap_mode; - } - - if ( st[1]->hTcxCfg->tcx_last_overlap_mode == ALDO_WINDOW ) - { - st[1]->hTcxCfg->tcx_last_overlap_mode = st[0]->hTcxCfg->tcx_last_overlap_mode; - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * stereo_mdct_core_enc() * * joint stereo mdct core encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_mdct_core_enc( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - float new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ - float old_wsp[CPE_CHANNELS][L_WSP], /* i : 12.8kHz weighted speech (for LTP */ - float pitch_buf[CPE_CHANNELS][NB_SUBFR16k] /* o : floating pitch for each subframe */ -) -{ - int16_t i, ch, nSubframes, L_subframeTCX; - int16_t n, nAvailBits; - int16_t tnsSize[CPE_CHANNELS][NB_DIV]; /* number of tns parameters put into prm */ - int16_t tnsBits[CPE_CHANNELS][NB_DIV]; /* number of tns bits in the frame */ - float *p_orig_spectrum_long[CPE_CHANNELS], orig_spectrum_long[CPE_CHANNELS][N_MAX]; /* MDCT output (L/R). */ - float *orig_spectrum[CPE_CHANNELS][NB_DIV]; /* Pointers to MDCT output for a short block (L/R) */ - float powerSpec[CPE_CHANNELS][N_MAX]; - float *p_powerSpec[CPE_CHANNELS]; - float powerSpecMsInv_long[CPE_CHANNELS][N_MAX]; /* MS inv power spectrum, also inverse MDST spectrum */ - float *powerSpecMsInv[CPE_CHANNELS][NB_DIV]; - float quantized_spectrum_long[CPE_CHANNELS][N_MAX]; /* quantized MDCT spectrum, inv ms mask mdst spectrum, scratch for MS spectra in the MS decision */ - float *quantized_spectrum[CPE_CHANNELS][NB_DIV]; - float *inv_mdst_spectrum[CPE_CHANNELS][NB_DIV]; - float *inv_spectrum[CPE_CHANNELS][NB_DIV]; - float *p_mdst_spectrum_long[CPE_CHANNELS], mdst_spectrum_long[CPE_CHANNELS][N_MAX]; - float *mdst_spectrum[CPE_CHANNELS][NB_DIV]; - Encoder_State *st, **sts; - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct; - BSTR_ENC_HANDLE hBstr; - int16_t ms_mask[2][MAX_SFB]; - int16_t p_param[CPE_CHANNELS][NB_DIV]; - int16_t stereo_bits; - int16_t meta_bits, signal_bits; - - push_wmops( "stereo_mdct_core_enc" ); - - L_subframeTCX = 0; /* to avoid compilation warning */ - - /*--------------------------------------------------------------* - * Set pointers - *---------------------------------------------------------------*/ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - p_mdst_spectrum_long[ch] = mdst_spectrum_long[ch]; - p_orig_spectrum_long[ch] = orig_spectrum_long[ch]; - } - - sts = hCPE->hCoreCoder; - hStereoMdct = hCPE->hStereoMdct; - hBstr = sts[0]->hBstr; - - meta_bits = hCPE->hMetaData->nb_bits_tot; - signal_bits = hBstr->nb_bits_tot; - - /*--------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - sts[0]->hTcxEnc->tfm_mem = sts[1]->hTcxEnc->tfm_mem = sqrtf( 0.5f * ( sts[0]->hTcxEnc->tfm_mem * sts[0]->hTcxEnc->tfm_mem + sts[1]->hTcxEnc->tfm_mem * sts[1]->hTcxEnc->tfm_mem ) ); /* RMS */ - sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt = sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt = 0.5f * ( sts[0]->hTcxEnc->tcxltp_norm_corr_past_flt + sts[1]->hTcxEnc->tcxltp_norm_corr_past_flt ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); - } - - /* adaptively sync tcx modes*/ - if ( ( hCPE->last_element_mode == IVAS_CPE_MDCT ) && ( abs( sts[0]->hTcxCfg->tcx_last_overlap_mode - sts[1]->hTcxCfg->tcx_last_overlap_mode ) > 2 || - sts[0]->hTcxCfg->tcx_last_overlap_mode == sts[1]->hTcxCfg->tcx_last_overlap_mode || - sts[0]->hTcxCfg->tcx_last_overlap_mode + sts[1]->hTcxCfg->tcx_last_overlap_mode == 5 ) ) /* disable syncing for stereo switching or large diff in last frame overlap */ - { - sync_tcx_mode( sts ); - } - - if ( hCPE->hCoreCoder[0]->igf ) - { -#ifdef DEBUGGING - int16_t orig_mdct_stereo_mode_cmdl = hCPE->hStereoMdct->mdct_stereo_mode_cmdl; - hCPE->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; -#endif - - initMdctStereoEncData_fx( hCPE->hStereoMdct, STEREO_FORMAT, IVAS_CPE_MDCT, hCPE->element_brate, hCPE->hCoreCoder[0]->bwidth, hCPE->hCoreCoder[0]->igf, hCPE->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, 0 ); - -#ifdef DEBUGGING - hCPE->hStereoMdct->mdct_stereo_mode_cmdl = orig_mdct_stereo_mode_cmdl; -#endif - - stereo_mdct_init_igf_start_band_fx( &( hCPE->hStereoMdct->stbParamsTCX20 ), 16384 /* 1.0f in Q14 */, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); - stereo_mdct_init_igf_start_band_fx( &( hCPE->hStereoMdct->stbParamsTCX10 ), 8192 /* 0.5f in Q14 */, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); - stereo_mdct_init_igf_start_band_fx( &( hCPE->hStereoMdct->stbParamsTCX20afterACELP ), 20480 /* 1.25f in Q14 */, hCPE->hCoreCoder[0]->bwidth, hCPE->element_brate ); - } - else - { - hCPE->hStereoMdct->stbParamsTCX20.sfbIgfStart = -1; - hCPE->hStereoMdct->stbParamsTCX10.sfbIgfStart = -1; - hCPE->hStereoMdct->stbParamsTCX10.nBandsStereoCore = hCPE->hStereoMdct->stbParamsTCX10.sfbCnt; - hCPE->hStereoMdct->stbParamsTCX20.nBandsStereoCore = hCPE->hStereoMdct->stbParamsTCX20.sfbCnt; - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - orig_spectrum[ch][0] = orig_spectrum_long[ch]; - orig_spectrum[ch][1] = orig_spectrum_long[ch] + N_TCX10_MAX; - quantized_spectrum[ch][0] = quantized_spectrum_long[ch]; - quantized_spectrum[ch][1] = quantized_spectrum_long[ch] + N_TCX10_MAX; - inv_mdst_spectrum[ch][0] = powerSpecMsInv[ch][0] = powerSpecMsInv_long[ch]; - inv_mdst_spectrum[ch][1] = powerSpecMsInv[ch][1] = powerSpecMsInv_long[ch] + N_TCX10_MAX; - inv_spectrum[ch][0] = quantized_spectrum[ch][0]; - inv_spectrum[ch][1] = quantized_spectrum[ch][1]; - mdst_spectrum[ch][0] = mdst_spectrum_long[ch]; - mdst_spectrum[ch][1] = mdst_spectrum_long[ch] + N_TCX10_MAX; - sts[ch]->hTcxEnc->tns_ms_flag[0] = 0; - sts[ch]->hTcxEnc->tns_ms_flag[1] = 0; - } - - /*--------------------------------------------------------------* - * MDCT core preprocessing: - * - initialization - * - Core Signal Analysis: MDCT, TNS - * - Envelope Quantization and FDNS - * - TNS - *---------------------------------------------------------------*/ - - ivas_mdct_core_whitening_enc( hCPE, new_samples, old_wsp, pitch_buf, p_mdst_spectrum_long, - tnsBits, p_orig_spectrum_long, tnsSize, p_param, hBstr, 0, CPE_CHANNELS ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - - for ( n = 0; n < nSubframes; n++ ) - { - st->side_bits_frame_channel += NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL; - } - } - - sts[0]->side_bits_frame_channel += SMDCT_NBBITS_SPLIT_RATIO; - - - /*--------------------------------------------------------------* - * Stereo Processing - *---------------------------------------------------------------*/ - - if ( !hStereoMdct->isSBAStereoMode ) - { - stereo_coder_tcx( hStereoMdct, sts, ms_mask, mdst_spectrum, inv_spectrum, inv_mdst_spectrum, 0 ); - } - - /*--------------------------------------------------------------* - * Power spectrum calculation - *---------------------------------------------------------------*/ - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - nSubframes = ( sts[ch]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = sts[ch]->hTcxEnc->L_frameTCX / nSubframes; - if ( sts[ch]->last_core == ACELP_CORE ) - { - L_subframeTCX += L_subframeTCX / 4; - } - - for ( n = 0; n < nSubframes; n++ ) - { - if ( sts[ch]->hTcxEnc->tns_ms_flag[n] ) - { - /* power spectrum: MDCT^2 + MDST^2 */ - for ( i = 0; i < L_subframeTCX; i++ ) - { - powerSpecMsInv[ch][n][i] = inv_mdst_spectrum[ch][n][i] * inv_mdst_spectrum[ch][n][i] + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; - powerSpec[ch][i + n * L_subframeTCX] = mdst_spectrum[ch][n][i] * mdst_spectrum[ch][n][i] + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; - } - } - else - { - if ( hStereoMdct->mdct_stereo_mode[n] != SMDCT_DUAL_MONO ) - { - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpecMsInv[ch][n][0] = inv_spectrum[ch][n][0] * inv_spectrum[ch][n][0]; - for ( i = 1; i < L_subframeTCX - 1; i++ ) - { - float mdst = ( inv_spectrum[ch][n][i + 1] - inv_spectrum[ch][n][i - 1] ); /* An MDST estimate */ - powerSpecMsInv[ch][n][i] = mdst * mdst + inv_spectrum[ch][n][i] * inv_spectrum[ch][n][i]; - } - powerSpecMsInv[ch][n][L_subframeTCX - 1] = inv_spectrum[ch][n][L_subframeTCX - 1] * inv_spectrum[ch][n][L_subframeTCX - 1]; - } - - /* power spectrum: MDCT^2 + MDST^2 */ - powerSpec[ch][n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][0] * sts[ch]->hTcxEnc->spectrum[n][0]; - for ( i = 1; i < L_subframeTCX - 1; i++ ) - { - float mdst = ( sts[ch]->hTcxEnc->spectrum[n][i + 1] - sts[ch]->hTcxEnc->spectrum[n][i - 1] ); /* An MDST estimate */ - powerSpec[ch][i + n * L_subframeTCX] = mdst * mdst + sts[ch]->hTcxEnc->spectrum[n][i] * sts[ch]->hTcxEnc->spectrum[n][i]; - } - powerSpec[ch][L_subframeTCX - 1 + n * L_subframeTCX] = sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1] * sts[ch]->hTcxEnc->spectrum[n][L_subframeTCX - 1]; - } - } - } - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; - if ( st->last_core == ACELP_CORE ) - { - L_subframeTCX += L_subframeTCX / 4; - } - - if ( ( st->hTcxEnc->tcxMode == TCX_20 ) && ( st->element_brate < HQ_96k || st->igf ) ) - { - /*-----------------------------------------------------------* - * Compute noise-measure flags for spectrum filling * - * and quantization (0: tonal, 1: noise-like). * - * Detect low pass if present. * - *-----------------------------------------------------------*/ - - ComputeSpectrumNoiseMeasure( powerSpec[ch], L_subframeTCX, st->hTcxEnc->nmStartLine * ( L_subframeTCX / st->hTcxEnc->L_frameTCX ), - ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), st->hTcxEnc->memQuantZeros, L_subframeTCX ); - } - - st->hTcxEnc->measuredBwRatio_flt = 1.f; /* No bandwidth limit for the noise filling */ - } - - /*--------------------------------------------------------------* - * IGF - *---------------------------------------------------------------*/ - - if ( sts[0]->igf || sts[1]->igf ) - { - if ( sts[0]->hTcxEnc->tcxMode == sts[1]->hTcxEnc->tcxMode ) - { - /* Band-wise M/S for MDST */ - nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 || sts[1]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - for ( n = 0; n < nSubframes; n++ ) - { - if ( ( hStereoMdct->mdct_stereo_mode[n] != hStereoMdct->IGFStereoMode[n] || hStereoMdct->mdct_stereo_mode[n] == SMDCT_BW_MS ) && !hStereoMdct->isSBAStereoMode ) - { - p_powerSpec[0] = powerSpec[0]; - p_powerSpec[1] = powerSpec[1]; - ProcessStereoIGF( hStereoMdct, sts, ms_mask, orig_spectrum, p_powerSpec, powerSpecMsInv, inv_spectrum, n, hCPE->hCoreCoder[0]->sp_aud_decision0, hCPE->hCoreCoder[0]->element_brate, 0 ); - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - /* update the pointer to the buffer of indices of the second channel */ - if ( ch == 1 ) - { - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, hCPE->hCoreCoder[0]->sp_aud_decision0, 0 ); - } - } - } - } - else - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - - /* update the pointer to the buffer of indices of the second channel */ - if ( ch == 1 ) - { - st->hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - - nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - if ( st->igf ) - { - for ( n = 0; n < nSubframes; n++ ) - { - ProcessIGF( st, st->hTcxEnc->spectrum[n], orig_spectrum[ch][n], &powerSpec[ch][n * L_subframeTCX], st->core == TCX_20_CORE, n, hCPE->hCoreCoder[0]->sp_aud_decision0, 0 ); - } - } - } - } - - /*write IGF data to bitstream*/ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st = sts[ch]; - enc_prm_igf_mdct( st, hBstr ); - } - } - - /* correct side bits per channel*/ - sts[0]->side_bits_frame_channel -= SMDCT_NBBITS_SPLIT_RATIO; - if ( !hStereoMdct->isSBAStereoMode ) - { - stereo_bits = write_stereo_to_bitstream( hStereoMdct, sts, ms_mask, 0, hBstr ); - } - else - { - stereo_bits = 0; - } - - /*--------------------------------------------------------------* - * Split available bits between channels - *---------------------------------------------------------------*/ - - FindSplitRatio( hCPE, sts ); - - assert( hStereoMdct->split_ratio > 0 && hStereoMdct->split_ratio < SMDCT_BITRATE_RATIO_RANGE ); - - /* Split available bits between channels */ - nAvailBits = sts[0]->bits_frame_channel + sts[1]->bits_frame_channel - hBstr->nb_bits_tot - sts[0]->core * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ) - sts[1]->core * ( NBITS_TCX_GAIN + NOISE_FILL_RANGES * NBITS_NOISE_FILL_LEVEL + SMDCT_MINIMUM_ARITH_BITS ); - - /* remove metadata bits */ - nAvailBits -= meta_bits; - - nAvailBits -= SMDCT_NBBITS_SPLIT_RATIO; - - splitAvailableBits( nAvailBits, hStereoMdct->split_ratio, hStereoMdct->isSBAStereoMode, &sts[0]->bits_frame_channel, &sts[1]->bits_frame_channel ); - - sts[0]->bits_frame_channel += sts[0]->core * SMDCT_MINIMUM_ARITH_BITS; - sts[1]->bits_frame_channel += sts[1]->core * SMDCT_MINIMUM_ARITH_BITS; - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - sts[ch]->total_brate = ( sts[ch]->bits_frame_channel + sts[ch]->side_bits_frame_channel ) * FRAMES_PER_SEC; - } - stereo_bits += SMDCT_NBBITS_SPLIT_RATIO; - assert( ( sts[0]->total_brate + sts[1]->total_brate + ( stereo_bits + signal_bits + meta_bits ) * FRAMES_PER_SEC ) == hCPE->element_brate + hCPE->brate_surplus ); - assert( hStereoMdct->split_ratio > 0 && hStereoMdct->split_ratio < SMDCT_BITRATE_RATIO_RANGE ); - - push_next_indice( hBstr, hStereoMdct->split_ratio, SMDCT_NBBITS_SPLIT_RATIO ); - - - ivas_mdct_quant_coder( hCPE, tnsBits, tnsSize, p_param, 0 ); - - pop_wmops(); - - return; -} -#else void stereo_mdct_core_enc_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Word16 new_samples[CPE_CHANNELS][L_INP], /* i : new samples */ @@ -632,11 +233,11 @@ void stereo_mdct_core_enc_fx( } IF( hCPE->hCoreCoder[0]->igf ) { + #ifdef DEBUGGING int16_t orig_mdct_stereo_mode_cmdl = hCPE->hStereoMdct->mdct_stereo_mode_cmdl; hCPE->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; #endif - initMdctStereoEncData_fx( hCPE->hStereoMdct, STEREO_FORMAT, IVAS_CPE_MDCT, hCPE->element_brate, hCPE->hCoreCoder[0]->bwidth, hCPE->hCoreCoder[0]->igf, hCPE->hCoreCoder[0]->hIGFEnc->igfData.igfInfo.grid, 0 ); #ifdef DEBUGGING @@ -763,7 +364,7 @@ void stereo_mdct_core_enc_fx( q_spec = s_max( q_spec, mdst_spectrum_e[ch][k] ); } } - q_spec = sub( sub( Q31, q_spec ), 1 ); + q_spec = sub( Q31, q_spec ); FOR( ch = 0; ch < CPE_CHANNELS; ch++ ) { @@ -1184,4 +785,3 @@ void stereo_mdct_core_enc_fx( return; } -#endif diff --git a/lib_enc/ivas_stereo_mdct_igf_enc.c b/lib_enc/ivas_stereo_mdct_igf_enc.c index 85eaa073d..c200a748c 100644 --- a/lib_enc/ivas_stereo_mdct_igf_enc.c +++ b/lib_enc/ivas_stereo_mdct_igf_enc.c @@ -47,20 +47,11 @@ * Local constants *-------------------------------------------------------------------*/ -#define IGF_PATCH_MS 1 -#define IGF_PATCH_LR 0 -#ifndef IVAS_FLOAT_FIXED -#define TARGET_COH_THRESHOLD 0.6f -#endif +#define IGF_PATCH_MS 1 +#define IGF_PATCH_LR 0 #define TARGET_COH_THRESHOLD_FX 19661 -#ifndef IVAS_FLOAT_FIXED -#define SOURCE_COH_THRESHOLD 0.7f -#endif #define SOURCE_COH_THRESHOLD_FX 22938 -#ifndef IVAS_FLOAT_FIXED -#define PANNING_THRESHOLD 0.07f -#endif -#define PANNING_THRESHOLD_FX 2294 +#define PANNING_THRESHOLD_FX 2294 /*-------------------------------------------------------------------* @@ -69,44 +60,6 @@ * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float calcCoh( - const float *sig1, - const float *sig2, - const int16_t nSamples, - float *corr, - float *predCoeff ) -{ - float coh, ener1, ener2, cEner, cc; - - coh = 0.0f; - ener1 = dotp( sig1, sig1, nSamples ); - ener2 = dotp( sig2, sig2, nSamples ); - cEner = sqrtf( ener1 * ener2 ); - cc = dotp( sig1, sig2, nSamples ); - - if ( corr != NULL ) - { - *corr = cc; - } - - if ( cEner > 0.0f ) - { - coh = cc / cEner; - } - - if ( predCoeff != NULL ) - { - *predCoeff = 0.f; - if ( ener1 > 0.0f ) - { - *predCoeff = cc / ener1; - } - } - - return coh; -} -#else static Word16 calcCoh_fx( // Q15 const Word32 *sig1_fx, // Q( q_sig ) const Word32 *sig2_fx, // Q( q_sig ) @@ -167,7 +120,6 @@ static Word16 calcCoh_fx( // Q15 return coh_fx; } -#endif /*-------------------------------------------------------------------* @@ -176,132 +128,6 @@ static Word16 calcCoh_fx( // Q15 * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void IGF_MsStereoDecision( - STEREO_MDCT_BAND_PARAMETERS *sfbParam, - H_IGF_GRID hGrid, - const float *specL, - const float *specR, - int16_t *igfStereoMode, /* output*/ - int16_t *msMask, /* output*/ - const int16_t mdct_stereo_mode ) -{ - int16_t sfb; - int16_t msMaskTrueSomewhere, msMaskFalseSomewhere; - int16_t numMsMaskTrue, numMsMaskFalse, numMsMaskThresh, numMsMaskMSForLR; - int16_t tile_idx; - int16_t strt_cpy; - float thresh; - - thresh = TARGET_COH_THRESHOLD; - if ( mdct_stereo_mode == SMDCT_MS_FULL ) - { - thresh *= 0.7f; /* lower threshold if core is already MS */ - } - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - strt_cpy = hGrid->sbWrap[tile_idx]; - - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - int16_t width = hGrid->swb_offset[sfb + 1] - hGrid->swb_offset[sfb]; - float cc_src, cc_target, pc_target, pc_src; - float coh_src = calcCoh( &specL[strt_cpy], &specR[strt_cpy], width, &cc_src, &pc_src ); - float coh_target = calcCoh( &specL[hGrid->swb_offset[sfb]], &specR[hGrid->swb_offset[sfb]], width, &cc_target, &pc_target ); - - strt_cpy += width; - if ( fabsf( coh_target ) > thresh ) - { - /* target is very coherent */ - if ( fabsf( coh_src ) > SOURCE_COH_THRESHOLD ) - { - if ( fabsf( pc_target - pc_src ) < PANNING_THRESHOLD && fabsf( pc_target - 1.0f ) > 2.0f * PANNING_THRESHOLD ) /* same position but not close to the MID */ - { - /* same for the source, stereo pos are close, stay on LR */ - msMask[sfb] = IGF_PATCH_LR; - } - else - { - msMask[sfb] = IGF_PATCH_MS; - } - } - else - { - /* we need to get the coherent patch, do MS */ - msMask[sfb] = IGF_PATCH_MS; - } - } - else - { - /* target is not coherent, stick to LR patching */ - msMask[sfb] = IGF_PATCH_LR; - } - } - } - - msMaskTrueSomewhere = 0; - msMaskFalseSomewhere = 0; - numMsMaskTrue = 0; - numMsMaskFalse = 0; - numMsMaskThresh = ( sfbParam->sfbCnt - sfbParam->nBandsStereoCore ) / 4; - numMsMaskMSForLR = 0; - - for ( tile_idx = 0; tile_idx < hGrid->nTiles; tile_idx++ ) - { - for ( sfb = hGrid->sfbWrap[tile_idx]; sfb < hGrid->sfbWrap[tile_idx + 1]; sfb++ ) - { - switch ( msMask[sfb] ) - { - case IGF_PATCH_LR: - msMask[sfb] = 0; - numMsMaskFalse++; - msMaskFalseSomewhere = 1; - break; - case IGF_PATCH_MS: - msMask[sfb] = 1; - numMsMaskTrue++; - msMaskTrueSomewhere = 1; - break; - default: - assert( 0 ); - break; - } - } - } - - if ( msMaskTrueSomewhere ) - { - if ( msMaskFalseSomewhere ) - { - *igfStereoMode = SMDCT_BW_MS; - - if ( numMsMaskFalse <= numMsMaskThresh ) - { - *igfStereoMode = SMDCT_MS_FULL; - set_s( &msMask[0], 1, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); - } - else if ( numMsMaskTrue <= numMsMaskThresh && !numMsMaskMSForLR ) - { - *igfStereoMode = SMDCT_DUAL_MONO; - set_s( &msMask[0], 0, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); - } - } - else - { - *igfStereoMode = SMDCT_MS_FULL; - set_s( &msMask[0], 1, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); - } - } - else - { - *igfStereoMode = SMDCT_DUAL_MONO; - set_s( &msMask[0], 0, sfbParam->sfbCnt - sfbParam->nBandsStereoCore ); - } - - return; -} -#else static void IGF_MsStereoDecision_fx( STEREO_MDCT_BAND_PARAMETERS *sfbParam, H_IGF_GRID hGrid, @@ -465,7 +291,6 @@ static void IGF_MsStereoDecision_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -474,43 +299,6 @@ static void IGF_MsStereoDecision_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void IGFEncStereoEncoder( - STEREO_MDCT_BAND_PARAMETERS *sfbParam, /* i/o: sfb parameters for the right channel */ - const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : IGF handle */ - const float *mdctSpectrumL, /* i : left spectrum */ - const float *mdctSpectrumR, /* i : right spectrum */ - int16_t *msMask, /* i/o: MS mask */ - int16_t *igfStereoMode, /* o : IGF stereo mode */ - const int16_t mdct_stereo_mode, /* i : MDCT stereo mode */ - const int16_t isTCX20, /* i : flag for indicating TCX20 */ - const int16_t isTransition /* i : flag for transtition */ -) -{ - int16_t igfGridIdx; - H_IGF_GRID hGrid; - - if ( isTransition && isTCX20 ) - { - igfGridIdx = IGF_GRID_LB_TRAN; - } - else if ( isTCX20 ) - { - igfGridIdx = IGF_GRID_LB_NORM; - } - else - { - /* It is short block */ - igfGridIdx = IGF_GRID_LB_SHORT; - } - - hGrid = &hIGFEnc->igfData.igfInfo.grid[igfGridIdx]; - - IGF_MsStereoDecision( sfbParam, hGrid, mdctSpectrumL, mdctSpectrumR, igfStereoMode, msMask + sfbParam->nBandsStereoCore, mdct_stereo_mode ); - - return; -} -#else void IGFEncStereoEncoder_fx( STEREO_MDCT_BAND_PARAMETERS *sfbParam, /* i/o: sfb parameters for the right channel */ const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : IGF handle */ @@ -549,4 +337,3 @@ void IGFEncStereoEncoder_fx( return; } -#endif diff --git a/lib_enc/ivas_stereo_mdct_stereo_enc.c b/lib_enc/ivas_stereo_mdct_stereo_enc.c index a444a920c..9148b89e2 100644 --- a/lib_enc/ivas_stereo_mdct_stereo_enc.c +++ b/lib_enc/ivas_stereo_mdct_stereo_enc.c @@ -59,29 +59,13 @@ * Local function prototypes *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void convertToBwMS( const int16_t startLine, const int16_t stopLine, float x0[], float x1[], const float norm_fac ); -#else static void convertToBwMS_fx( const Word16 startLine, const Word16 stopLine, Word32 x0[], Word32 x1[], const Word32 norm_fac ); -#endif -#ifndef IVAS_FLOAT_FIXED -void convertToMS( const int16_t L_frame, float x0[], float x1[], const float norm_fac ); -#else void convertToMS_fx( const Word16 L_frame, Word32 x0_fx[], Word32 x1_fx[], const Word32 norm_fac ); -#endif -#ifndef IVAS_FLOAT_FIXED -static float GetChannelEnergyRatio( Encoder_State **st, const int16_t iFirstSubframe, const int16_t iLastSubframe, const uint8_t ratioInRmsDomain ); -#else static Word16 GetChannelEnergyRatio_fx( Encoder_State **st, const Word16 iFirstSubframe, const Word16 iLastSubframe, const UWord8 ratioInRmsDomain ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void MsStereoDecision( STEREO_MDCT_BAND_PARAMETERS *sfbParam, float *specL, float *specR, float *specM, float *specS, int16_t *mdct_stereo_mode, int16_t *msMask, const int16_t nBitsAvailable ); -#else static void MsStereoDecision_fx( STEREO_MDCT_BAND_PARAMETERS *sfbParam, Word32 *specL_fx, Word32 *specR_fx, Word32 *specM_fx, Word32 *specS_fx, Word16 q_spec, Word16 *mdct_stereo_mode, Word16 *msMask, const Word16 nBitsAvailable ); -#endif /*-------------------------------------------------------------------* @@ -91,42 +75,6 @@ static void MsStereoDecision_fx( STEREO_MDCT_BAND_PARAMETERS *sfbParam, Word32 * * MDCT-stereo *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void dft_ana_init( - DFT_ANA_HANDLE hDft_ana, /*i : DFT analysis handle */ - const int32_t input_Fs /*i : Input sampling frequency */ -) -{ - hDft_ana->N = (int16_t) ( STEREO_DFT_HOP_MAX_ENC * input_Fs / 48000 ); - hDft_ana->NFFT = (int16_t) ( STEREO_DFT_N_MAX_ENC * input_Fs / 48000 ); - hDft_ana->dft_ovl = (int16_t) ( STEREO_DFT_OVL_MAX * input_Fs / 48000 ); - hDft_ana->dft_zp = (int16_t) ( STEREO_DFT_ZP_MAX_ENC * input_Fs / 48000 ); - - hDft_ana->dft_trigo_32k = dft_trigo_32k; - - if ( input_Fs == 16000 ) - { - hDft_ana->dft_trigo = dft_trigo_32k; - hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_16k_STEP; - hDft_ana->win_ana = win_ana_16k; - } - else if ( input_Fs == 32000 ) - { - hDft_ana->dft_trigo = dft_trigo_32k; - hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_32k_STEP; - hDft_ana->win_ana = win_ana_32k; - } - else - { - assert( input_Fs == 48000 ); - hDft_ana->dft_trigo = dft_trigo_48k; - hDft_ana->dft_trigo_step = STEREO_DFT_TRIGO_SRATE_48k_STEP; - hDft_ana->win_ana = win_ana_48k; - } - - return; -} -#else static void dft_ana_init_fx( DFT_ANA_HANDLE hDft_ana, /*i : DFT analysis handle */ const Word32 input_Fs /*i : Input sampling frequency */ @@ -168,7 +116,6 @@ static void dft_ana_init_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -177,57 +124,6 @@ static void dft_ana_init_fx( * Bitstream writing of ITDs *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void write_itd_data( - ITD_DATA_HANDLE hItd, /* i : ITD data handle */ - BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ -) -{ - int16_t k_offset; - int16_t itd; - - k_offset = 1; - - push_next_indice( hBstr, ( hItd->itd[k_offset] != 0 ), STEREO_DFT_ITD_MODE_NBITS ); - - if ( hItd->itd[k_offset] ) - { - itd = hItd->itd_index[k_offset]; - if ( itd > 255 ) - { - itd -= 256; - - if ( itd < 20 ) - { - push_next_indice( hBstr, 1, 1 ); /* use Huffman*/ - push_next_indice( hBstr, 1, 1 ); /* negative */ - push_next_indice( hBstr, dft_code_itd[itd], dft_len_itd[itd] ); - } - else - { - push_next_indice( hBstr, 0, 1 ); /* don't use Huffman */ - push_next_indice( hBstr, 1, 1 ); /* negative */ - push_next_indice( hBstr, itd, STEREO_DFT_ITD_NBITS - 1 ); - } - } - else - { - if ( itd < 20 ) - { - push_next_indice( hBstr, 1, 1 ); /* use Huffman*/ - push_next_indice( hBstr, 0, 1 ); /* positive */ - push_next_indice( hBstr, dft_code_itd[itd], dft_len_itd[itd] ); - } - else - { - /* don't use Huffman and positive*/ - push_next_indice( hBstr, itd, STEREO_DFT_ITD_NBITS + 1 ); - } - } - } - return; -} -#else static void write_itd_data_fx( ITD_DATA_HANDLE hItd, /* i : ITD data handle */ BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ @@ -278,7 +174,6 @@ static void write_itd_data_fx( } return; } -#endif /*-------------------------------------------------------------------* * stereo_coder_tcx() @@ -286,240 +181,6 @@ static void write_itd_data_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_coder_tcx( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ - Encoder_State **sts, /* i/o: encoder state structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - float *mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: MDST spectrum */ - float *inv_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse spectrum */ - float *inv_mdst_spectrum[CPE_CHANNELS][NB_DIV], /* i/o: inverse MDST spectrum */ - const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ -) -{ - STEREO_MDCT_BAND_PARAMETERS *sfbConf = NULL; - float nrgRatio[CPE_CHANNELS]; - float nonQNrgRatio[CPE_CHANNELS]; - int16_t k; - int16_t nSubframes, L_frameTCX; - int16_t nAvailBitsMS[NB_DIV]; - push_wmops( "stereo_coder_tcx" ); - - set_s( nAvailBitsMS, 0, NB_DIV ); - - nSubframes = ( sts[0]->core == TCX_20_CORE && sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV; - L_frameTCX = sts[0]->hTcxEnc->L_frameTCX / nSubframes; - - set_s( &ms_mask[0][0], 0, MAX_SFB ); - set_s( &ms_mask[1][0], 0, MAX_SFB ); - - if ( !mct_on ) - { - if ( sts[0]->core == sts[1]->core ) - { - for ( k = 0; k < nSubframes; k++ ) - { - nonQNrgRatio[k] = GetChannelEnergyRatio( sts, k, k, 1 ); - - hStereoMdct->global_ild[k] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * nonQNrgRatio[k] + 0.5f ) ) ); - nrgRatio[k] = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[k] - 1; /* nrgRatio = nrg[1]/nrg[0] */ - - nonQNrgRatio[k] = max( 0.5f / SMDCT_ILD_RANGE, min( ( SMDCT_ILD_RANGE - 0.5f ) / SMDCT_ILD_RANGE, nonQNrgRatio[k] ) ); - nonQNrgRatio[k] = 1.0f / nonQNrgRatio[k] - 1.0f; - } - } - else - { - nonQNrgRatio[0] = nonQNrgRatio[1] = GetChannelEnergyRatio( sts, 0, nSubframes - 1, - 1 ); - hStereoMdct->global_ild[0] = max( 1, min( SMDCT_ILD_RANGE - 1, (int16_t) ( SMDCT_ILD_RANGE * nonQNrgRatio[0] + 0.5f ) ) ); - nrgRatio[0] = nrgRatio[1] = (float) SMDCT_ILD_RANGE / hStereoMdct->global_ild[0] - 1; /* nrgRatio = nrg[1]/nrg[0] */ - nonQNrgRatio[0] = nonQNrgRatio[1] = max( 0.5f / SMDCT_ILD_RANGE, min( ( SMDCT_ILD_RANGE - 0.5f ) / SMDCT_ILD_RANGE, nonQNrgRatio[0] ) ); - nonQNrgRatio[0] = nonQNrgRatio[1] = 1.0f / nonQNrgRatio[0] - 1.0f; - } - - for ( k = 0; k < nSubframes; k++ ) - { - if ( ( nrgRatio[k] > 1.0f ) && ( k < ( ( sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV ) ) ) - { - L_frameTCX = sts[1]->hTcxEnc->L_frameTCX + ( ( sts[1]->last_core == 0 ) ? sts[1]->hTcxEnc->L_frameTCX / 4 : 0 ); - L_frameTCX /= ( ( sts[1]->core == TCX_20_CORE ) ? 1 : NB_DIV ); - - v_multc( sts[1]->hTcxEnc->spectrum[k], 1.0f / nrgRatio[k], sts[1]->hTcxEnc->spectrum[k], L_frameTCX ); - v_multc( mdst_spectrum[1][k], 1.0f / nrgRatio[k], mdst_spectrum[1][k], L_frameTCX ); - } - else if ( ( nrgRatio[k] < 1.0f ) && k < ( ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV ) ) - { - L_frameTCX = sts[0]->hTcxEnc->L_frameTCX + ( ( sts[0]->last_core == 0 ) ? sts[0]->hTcxEnc->L_frameTCX / 4 : 0 ); - L_frameTCX /= ( ( sts[0]->core == TCX_20_CORE ) ? 1 : NB_DIV ); - - v_multc( sts[0]->hTcxEnc->spectrum[k], nrgRatio[k], sts[0]->hTcxEnc->spectrum[k], L_frameTCX ); - v_multc( mdst_spectrum[0][k], nrgRatio[k], mdst_spectrum[0][k], L_frameTCX ); - } - } - } - - if ( -#ifdef DEBUG_FORCE_MDCT_STEREO_MODE - hStereoMdct->fDualMono || -#endif - ( sts[0]->hTcxEnc->transform_type[0] != sts[1]->hTcxEnc->transform_type[0] ) || ( sts[0]->hTcxEnc->transform_type[1] != sts[1]->hTcxEnc->transform_type[1] ) || ( sts[0]->last_core != sts[1]->last_core && ( sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) ) || sts[0]->last_core == ACELP_CORE || sts[1]->last_core == ACELP_CORE ) - { - hStereoMdct->mdct_stereo_mode[0] = SMDCT_DUAL_MONO; - hStereoMdct->mdct_stereo_mode[1] = SMDCT_DUAL_MONO; - - - if ( sts[0]->igf ) - { - hStereoMdct->IGFStereoMode[0] = SMDCT_DUAL_MONO; - hStereoMdct->IGFStereoMode[1] = SMDCT_DUAL_MONO; - } - hStereoMdct->sw_uncorr = 1; - - pop_wmops(); - return; - } -#ifdef DEBUG_FORCE_MDCT_STEREO_MODE - else if ( hStereoMdct->fMSstereo ) - { - hStereoMdct->mdct_stereo_mode[0] = SMDCT_MS_FULL; - hStereoMdct->mdct_stereo_mode[1] = SMDCT_MS_FULL; - if ( sts[0]->igf ) - { - hStereoMdct->IGFStereoMode[0] = SMDCT_MS_FULL; - hStereoMdct->IGFStereoMode[1] = SMDCT_MS_FULL; - } - for ( k = 0; k < nSubframes; k++ ) - { - convertToMS( L_frameTCX, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], SQRT2_OVER_2 ); - - /* Make sure that the MDST is processed in the correct way also */ - set_s( &ms_mask[k][0], 1, MAX_SFB ); - } - - pop_wmops(); - return; - } -#endif - else /* decide based on signal */ - { - for ( k = 0; k < nSubframes; k++ ) - { - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - if ( sts[0]->last_core == ACELP_CORE ) - { - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - if ( ( sts[0]->element_brate < IVAS_80k ) && ( sts[0]->core == sts[1]->core ) && !mct_on ) /* band-wise HF ILD alignment to increase channel compaction */ - { - int16_t sfb = 1; - - while ( ( sfb < sfbConf->nBandsStereoCore ) && ( sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] < 12 ) ) - { - sfb++; /* find start offset */ - } - - for ( sfb--; sfb < sfbConf->nBandsStereoCore; sfb++ ) /* start one SFB early for the fade-in */ - { - const int16_t startLine = sfbConf->sfbOffset[sfb]; - const int16_t endLine = sfbConf->sfbOffset[sfb + 1]; - const int16_t sfbWidth = endLine - startLine; - - nrgRatio[0] = sum2_f( &sts[0]->hTcxEnc->spectrum[k][startLine], sfbWidth ); - nrgRatio[1] = sum2_f( &sts[1]->hTcxEnc->spectrum[k][startLine], sfbWidth ); - - if ( !sts[0]->hTcxEnc->fUseTns[k] && !sts[1]->hTcxEnc->fUseTns[k] ) /* no TNS in either ch */ - { - nrgRatio[0] += sum2_f( &mdst_spectrum[0][k][startLine], sfbWidth ); - nrgRatio[1] += sum2_f( &mdst_spectrum[1][k][startLine], sfbWidth ); - } - if ( ( nrgRatio[0] > 0.f ) && ( nrgRatio[1] > 0.f ) && ( nrgRatio[0] != nrgRatio[1] ) ) - { - float fTemp = 0.5f * ( nrgRatio[0] + nrgRatio[1] ); - nrgRatio[0] = sqrtf( fTemp / nrgRatio[0] ); - nrgRatio[1] = sqrtf( fTemp / nrgRatio[1] ); - - nrgRatio[0] = max( 0.25f, min( 4.f, nrgRatio[0] ) ); - nrgRatio[1] = max( 0.25f, min( 4.f, nrgRatio[1] ) ); - - if ( ( sfbWidth < 12 && sfb + 1 < sfbConf->nBandsStereoCore ) || ( sts[0]->element_brate > IVAS_48k ) ) /* attenuate ILD alignment in the first SFB or at 64k */ - { - nrgRatio[0] = powf( nrgRatio[0], 0.25f ); - nrgRatio[1] = powf( nrgRatio[1], 0.25f ); - } - else - { - nrgRatio[0] = sqrtf( nrgRatio[0] ); - nrgRatio[1] = sqrtf( nrgRatio[1] ); - } - v_multc( &sts[0]->hTcxEnc->spectrum[k][startLine], nrgRatio[0], &sts[0]->hTcxEnc->spectrum[k][startLine], sfbWidth ); - v_multc( &mdst_spectrum[0][k][startLine], nrgRatio[0], &mdst_spectrum[0][k][startLine], sfbWidth ); - - v_multc( &sts[1]->hTcxEnc->spectrum[k][startLine], nrgRatio[1], &sts[1]->hTcxEnc->spectrum[k][startLine], sfbWidth ); - v_multc( &mdst_spectrum[1][k][startLine], nrgRatio[1], &mdst_spectrum[1][k][startLine], sfbWidth ); - } - } - } - - /* set mask to zero */ - set_s( &ms_mask[k][0], 0, MAX_SFB ); - - nAvailBitsMS[k] = ( ( mct_on ? 2 * sts[0]->bits_frame_channel : sts[0]->bits_frame_nominal ) - sts[0]->side_bits_frame_channel - sts[1]->side_bits_frame_channel - ( nSubframes == 2 ? OFFSET_BITS_TCX10 : OFFSET_BITS_TCX20 ) ) / nSubframes; - - MsStereoDecision( sfbConf, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], inv_spectrum[0][k], inv_spectrum[1][k], &hStereoMdct->mdct_stereo_mode[k], &ms_mask[k][0], nAvailBitsMS[k] ); - - if ( sts[0]->igf ) - { - IGFEncStereoEncoder( sfbConf, sts[0]->hIGFEnc, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], &ms_mask[k][0], - &hStereoMdct->IGFStereoMode[k], hStereoMdct->mdct_stereo_mode[k], sts[0]->core == TCX_20_CORE, sts[0]->last_core == ACELP_CORE ); - } - else - { - hStereoMdct->IGFStereoMode[k] = hStereoMdct->mdct_stereo_mode[k]; - } - - if ( hStereoMdct->mdct_stereo_mode[k] != SMDCT_DUAL_MONO || hStereoMdct->IGFStereoMode[k] != SMDCT_DUAL_MONO ) - { - ms_inv_mask_processing( hStereoMdct, sts, ms_mask, k, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], inv_spectrum[0][k], inv_spectrum[1][k], sfbConf->sfbCnt ); - ms_processing( hStereoMdct, sts, ms_mask, k, sts[0]->hTcxEnc->spectrum[k], sts[1]->hTcxEnc->spectrum[k], sfbConf->sfbCnt ); - - if ( !sts[0]->hTcxEnc->fUseTns[k] && !sts[1]->hTcxEnc->fUseTns[k] ) - { - sts[0]->hTcxEnc->tns_ms_flag[k] = 1; - sts[1]->hTcxEnc->tns_ms_flag[k] = 1; - ms_inv_mask_processing( hStereoMdct, sts, ms_mask, k, mdst_spectrum[0][k], mdst_spectrum[1][k], inv_mdst_spectrum[0][k], inv_mdst_spectrum[1][k], -1 ); - ms_processing( hStereoMdct, sts, ms_mask, k, mdst_spectrum[0][k], mdst_spectrum[1][k], sfbConf->sfbCnt ); - } - } - } /* for k */ - } - /* for bitrate switching determine correlation depending on m/s decision */ - { - int16_t ms_bands[2]; - float sw_uncorr[2], sw_uncorr_mean; - for ( k = 0; k < nSubframes; k++ ) - { - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - ms_bands[k] = sum_s( ms_mask[k], sfbConf->nBandsStereoCore ); - sw_uncorr[k] = ( 1.0f - (float) ms_bands[k] / sfbConf->nBandsStereoCore ); - } - if ( sts[0]->core == TCX_20_CORE ) - { - sw_uncorr_mean = sw_uncorr[0]; - } - else - { - sw_uncorr_mean = ( sw_uncorr[0] + sw_uncorr[1] ) * 0.5f; - } - hStereoMdct->sw_uncorr = ( sw_uncorr_mean > 0.6f ); - } - - pop_wmops(); - - - return; -} -#else void stereo_coder_tcx_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ @@ -650,7 +311,7 @@ void stereo_coder_tcx_fx( } for ( k = 0; k < nSubframes; k++ ) { - convertToMS_fx( L_frameTCX, sts[0]->hTcxEnc->spectrum_fx[k], sts[1]->hTcxEnc->spectrum_fx[k], SQRT2_OVER_2 ); + convertToMS_fx( L_frameTCX, sts[0]->hTcxEnc->spectrum_fx[k], sts[1]->hTcxEnc->spectrum_fx[k], SQRT2_OVER_2_FIXED ); /* Make sure that the MDST is processed in the correct way also */ set_s( &ms_mask[k][0], 1, MAX_SFB ); @@ -872,7 +533,6 @@ void stereo_coder_tcx_fx( pop_wmops(); return; } -#endif /*-------------------------------------------------------------------* * ms_processing() @@ -880,44 +540,6 @@ void stereo_coder_tcx_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ms_processing( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ - Encoder_State **sts, /* i/o: Encoder state structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - const int16_t iSubframe, /* i : subframe number */ - float x_0[], /* i/o: spectrum 1 */ - float x_1[], /* i/o: spectrum 1 */ - int16_t maxSfb /* i : number of stereo frequency bands*/ -) -{ - int16_t sfb; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - - if ( sts[0]->last_core == ACELP_CORE ) - { - assert( sts[1]->last_core == ACELP_CORE ); - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - if ( maxSfb == -1 ) - { - maxSfb = sfbConf->sfbCnt; - } - - for ( sfb = 0; sfb < maxSfb; sfb++ ) - { - if ( ms_mask[iSubframe][sfb] ) - { - convertToBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], x_0, x_1, SQRT2_OVER_2 ); - } - } - - return; -} -#else void ms_processing_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ Encoder_State **sts, /* i/o: Encoder state structure */ @@ -957,7 +579,6 @@ void ms_processing_fx( return; } -#endif /*-------------------------------------------------------------------* * ms_inv_mask_processing() @@ -965,59 +586,6 @@ void ms_processing_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ms_inv_mask_processing( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ - Encoder_State **sts, /* i/o: Encoder state structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - const int16_t iSubframe, /* i : subframe number */ - const float x_0[], /* i : spectrum 1 */ - const float x_1[], /* i : spectrum 2 */ - float x_inv_0[], /* o : inverse spectrum 1 */ - float x_inv_1[], /* o : inverse spectrum 2 */ - int16_t maxSfb /* i : number of stereo frequency bands*/ -) -{ - int16_t sfb; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - int16_t nSubframes, L_subframeTCX; - - nSubframes = ( sts[0]->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - L_subframeTCX = sts[0]->hTcxEnc->L_frameTCX / nSubframes; - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - - if ( sts[0]->last_core == ACELP_CORE ) - { - assert( sts[1]->last_core == ACELP_CORE ); - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - if ( maxSfb == -1 ) - { - maxSfb = sfbConf->sfbCnt; - } - - for ( sfb = 0; sfb < maxSfb; sfb++ ) - { - mvr2r( &x_0[sfbConf->sfbOffset[sfb]], &x_inv_0[sfbConf->sfbOffset[sfb]], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); - mvr2r( &x_1[sfbConf->sfbOffset[sfb]], &x_inv_1[sfbConf->sfbOffset[sfb]], sfbConf->sfbOffset[sfb + 1] - sfbConf->sfbOffset[sfb] ); - - if ( ms_mask[iSubframe][sfb] == 0 ) - { - convertToBwMS( sfbConf->sfbOffset[sfb], sfbConf->sfbOffset[sfb + 1], x_inv_0, x_inv_1, SQRT2_OVER_2 ); - } - } - - /* set rest of inverse spectrum to zero */ - if ( L_subframeTCX > sfbConf->sfbOffset[maxSfb] ) - { - set_zero( &x_inv_0[sfbConf->sfbOffset[maxSfb]], L_subframeTCX - sfbConf->sfbOffset[maxSfb] ); - set_zero( &x_inv_1[sfbConf->sfbOffset[maxSfb]], L_subframeTCX - sfbConf->sfbOffset[maxSfb] ); - } - - return; -} -#else void ms_inv_mask_processing_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ Encoder_State **sts, /* i/o: Encoder state structure */ @@ -1074,7 +642,6 @@ void ms_inv_mask_processing_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -1083,118 +650,6 @@ void ms_inv_mask_processing_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t write_stereo_to_bitstream( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ - Encoder_State **sts, /* i/o: Encoder state structure */ - int16_t ms_mask[NB_DIV][MAX_SFB], /* i : bandwise MS mask */ - const int16_t mct_on, /* i : flag mct block (1) or stereo (0)*/ - BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ -) -{ - int16_t i, k, nSubframes; - uint16_t mdct_stereo_mode, stereo_mode_bits; - STEREO_MDCT_BAND_PARAMETERS *sfbConf; - int16_t start_bits = hBstr->nb_bits_tot; - - if ( !mct_on ) - { - assert( ( ( sts[0]->hTcxEnc->transform_type[0] == sts[1]->hTcxEnc->transform_type[0] ) && ( sts[0]->hTcxEnc->transform_type[1] == sts[1]->hTcxEnc->transform_type[1] ) ) || ( ( hStereoMdct->mdct_stereo_mode[0] == SMDCT_DUAL_MONO ) && ( hStereoMdct->mdct_stereo_mode[1] == SMDCT_DUAL_MONO ) ) ); - } - - nSubframes = ( sts[0]->core == TCX_10_CORE || ( sts[0]->core != sts[1]->core ) ) ? NB_DIV : 1; - sfbConf = ( sts[0]->core == TCX_20_CORE ) ? &hStereoMdct->stbParamsTCX20 : &hStereoMdct->stbParamsTCX10; - - if ( sts[0]->last_core == ACELP_CORE ) - { - assert( sts[1]->ini_frame == 0 || sts[1]->last_core == ACELP_CORE ); - sfbConf = &hStereoMdct->stbParamsTCX20afterACELP; - } - - if ( hStereoMdct->hItd != NULL ) - { - write_itd_data( hStereoMdct->hItd, hBstr ); - } - - for ( k = 0; k < nSubframes; k++ ) - { - mdct_stereo_mode = 0; - stereo_mode_bits = 1; - - switch ( hStereoMdct->mdct_stereo_mode[k] ) - { - case SMDCT_DUAL_MONO: - mdct_stereo_mode = 0; - stereo_mode_bits = 1; - break; - case SMDCT_MS_FULL: - mdct_stereo_mode = 2; - stereo_mode_bits = 2; - break; - case SMDCT_BW_MS: - mdct_stereo_mode = 3; - stereo_mode_bits = 2; - break; - default: - assert( !"Not supported MDCT stereo mode\n" ); - } - - push_next_indice( hBstr, mdct_stereo_mode, stereo_mode_bits ); - - if ( !mct_on ) - { - if ( ( sts[0]->core == sts[1]->core ) || ( k == 0 ) ) - { - push_next_indice( hBstr, hStereoMdct->global_ild[k], SMDCT_GLOBAL_ILD_BITS ); - } - } - - if ( hStereoMdct->mdct_stereo_mode[k] == SMDCT_BW_MS ) - { - for ( i = 0; i < sfbConf->nBandsStereoCore; i++ ) - { - push_next_indice( hBstr, ms_mask[k][i] ? 1 : 0, 1 ); - } - } - - if ( sts[0]->igf ) - { - mdct_stereo_mode = 0; - stereo_mode_bits = 1; - switch ( hStereoMdct->IGFStereoMode[k] ) - { - case SMDCT_DUAL_MONO: - mdct_stereo_mode = 0; - stereo_mode_bits = 1; - break; - case SMDCT_MS_FULL: - mdct_stereo_mode = 2; - stereo_mode_bits = 2; - break; - case SMDCT_BW_MS: - mdct_stereo_mode = 3; - stereo_mode_bits = 2; - break; - default: - assert( !"Not supported MDCT stereo mode\n" ); - } - - push_next_indice( hBstr, mdct_stereo_mode, stereo_mode_bits ); - - - if ( hStereoMdct->IGFStereoMode[k] == SMDCT_BW_MS ) - { - for ( i = sfbConf->nBandsStereoCore; i < sfbConf->sfbCnt; i++ ) - { - push_next_indice( hBstr, ms_mask[k][i] ? 1 : 0, 1 ); - } - } - } - } - - return ( hBstr->nb_bits_tot - start_bits ); -} -#else Word16 write_stereo_to_bitstream( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: Stereo MDCT encoder structure */ Encoder_State **sts, /* i/o: Encoder state structure */ @@ -1324,7 +779,6 @@ Word16 write_stereo_to_bitstream( return sub( hBstr->nb_bits_tot, start_bits ); } -#endif /*-------------------------------------------------------------------* * Band-wise M/S stereo processing @@ -1332,28 +786,6 @@ Word16 write_stereo_to_bitstream( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void convertToBwMS( - const int16_t startLine, /* i : start line of sfb */ - const int16_t stopLine, /* i : stop line of sfb */ - float x0[], /* i/o: mid/left channel coefficients */ - float x1[], /* i/o: side/right channel coefficients */ - const float norm_fac /* i : normalization factor */ -) -{ - int16_t j; - float tmpValue; - - for ( j = startLine; j < stopLine; j++ ) - { - tmpValue = x0[j]; - x0[j] = ( x0[j] + x1[j] ) * norm_fac; - x1[j] = ( tmpValue - x1[j] ) * norm_fac; - } - - return; -} -#else static void convertToBwMS_fx( const Word16 startLine, /* i : start line of sfb */ const Word16 stopLine, /* i : stop line of sfb */ @@ -1379,7 +811,6 @@ static void convertToBwMS_fx( return; } -#endif /*-------------------------------------------------------------------* * convertToMS() @@ -1387,112 +818,27 @@ static void convertToBwMS_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void convertToMS( - const int16_t L_frame, /* i : frame length */ - float x0[], /* i/o: mid/left channel coefficients */ - float x1[], /* i/o: side/right channel coefficients */ - const float norm_fac /* i : normalization factor */ -) -{ - convertToBwMS( 0, L_frame, x0, x1, norm_fac ); - - return; -} -#else void convertToMS_fx( const Word16 L_frame, /* i : frame length */ Word32 x0[], /* i/o: mid/left channel coefficients */ // Q(q_x) Word32 x1[], /* i/o: side/right channel coefficients */ // Q(q_x) - const Word32 norm_fac /* i : normalization factor */ // Q31 -) -{ - convertToBwMS_fx( 0, L_frame, x0, x1, norm_fac ); - - return; -} -#endif - -/*-------------------------------------------------------------------* - * SQ_gain_estimate_stereo() - * - * - *-------------------------------------------------------------------*/ - -/*! r: SQ gain */ -#ifndef IVAS_FLOAT_FIXED -static float SQ_gain_estimate_stereo( - float xL[], /* i : L vector to quantize */ - float xR[], /* i : R vector to quantize */ - const int16_t nbitsSQ, /* i : number of bits targeted */ - const int16_t lg /* i : vector size (2048 max) */ -) -{ - int16_t i, q, iter; - float ener, tmp, target, fac, offset; - float en[N_MAX / 2]; - int16_t lg2, lg_4, lg2_4; - - lg_4 = lg >> 2; - lg2_4 = 2 * lg_4; - lg2 = lg2_4 << 2; - i = 0; - - set_f( en, 0.01f, N_MAX / 2 ); - - /* energy of quadruples with 9dB offset */ - /* ignore that we may take no all lines into account, max. 3 lines at the upper end of the spectrum can be missed (if lg is not a multiple of 4, happens also in SQGain()*/ - for ( q = 0; q < lg_4; q++ ) - { - ener = 0.01f + xL[i] * xL[i] + xL[i + 1] * xL[i + 1] + xL[i + 2] * xL[i + 2] + xL[i + 3] * xL[i + 3]; - en[q] = log10f( ener ); /* saves a MAC */ - i += 4; - } - i = 0; - for ( ; q < lg2_4; q++ ) - { - ener = 0.01f + xR[i] * xR[i] + xR[i + 1] * xR[i + 1] + xR[i + 2] * xR[i + 2] + xR[i + 3] * xR[i + 3]; - en[q] = log10f( ener ); /* saves a MAC */ - i += 4; - } - - /* SQ scale: 4 bits / 6 dB per quadruple */ - target = 0.15f * (float) ( nbitsSQ - ( lg2 >> 4 ) ); - fac = 12.8f; - offset = fac; - - /* find offset (0 to 128 dB with step of 0.125dB) */ - for ( iter = 0; iter < 10; iter++ ) - { - fac *= 0.5f; - offset -= fac; - ener = 0.0f; - - for ( i = 0; i < lg2_4; i++ ) - { - tmp = en[i] - offset; - - /* avoid SV with 1 bin of amp < 0.5f */ - if ( tmp > 0.3f ) - { - ener += tmp; - - /* if ener is above target -> break and increase offset */ - if ( ener > target ) - { - offset += fac; - break; - } - } - } - } + const Word32 norm_fac /* i : normalization factor */ // Q31 +) +{ + convertToBwMS_fx( 0, L_frame, x0, x1, norm_fac ); - /* return gain */ - return powf( 10.0f, 0.45f + 0.5f * offset ); + return; } -#else + +/*-------------------------------------------------------------------* + * SQ_gain_estimate_stereo() + * + * + *-------------------------------------------------------------------*/ + +/*! r: SQ gain */ static Word32 SQ_gain_estimate_stereo_fx( // e_res Word32 xL_fx[], /* i : L vector to quantize */ // e_xL @@ -1589,7 +935,6 @@ static Word32 SQ_gain_estimate_stereo_fx( // e_res return BASOP_util_Pow2( tmp_32, Q8, e_res ); } -#endif /*-------------------------------------------------------------------* * QuantSpecEstimateBits() @@ -1597,31 +942,6 @@ static Word32 SQ_gain_estimate_stereo_fx( // e_res * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t QuantSpecEstimateBits( - float *spec, - float G, - const int16_t length, - const int16_t nBitsAvailable, - int16_t sqQ[] ) -{ - int16_t stop, sqBits, nEncoded; - int16_t lastnz; - - tcx_scalar_quantization( spec, sqQ, length, G, 0.5f, NULL, 1 ); - - stop = 0; - - sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( sqQ, length, &lastnz, &nEncoded, nBitsAvailable, &stop, 0, NULL ); - - if ( stop != 0 ) - { - sqBits = stop; - } - - return sqBits; -} -#else static Word16 QuantSpecEstimateBits_fx( Word32 *spec_fx, Word16 spec_e, @@ -1649,7 +969,6 @@ static Word16 QuantSpecEstimateBits_fx( return sqBits; } -#endif /*-------------------------------------------------------------------* * context_update() @@ -1657,23 +976,6 @@ static Word16 QuantSpecEstimateBits_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void context_update( - HANDLE_RC_CONTEXT_MEM ctxSrc, - HANDLE_RC_CONTEXT_MEM ctxTarget, - const int16_t endLine ) -{ - int16_t last_nz; - - /* check if last_nz of target is smaller than endLine, save and update */ - last_nz = max( ctxTarget->lastnz, endLine ); - - mvc2c( (uint8_t *) ctxSrc, (uint8_t *) ctxTarget, sizeof( RC_CONTEXT_MEM ) ); - ctxTarget->lastnz = last_nz; - - return; -} -#else static void context_update( HANDLE_RC_CONTEXT_MEM ctxSrc, HANDLE_RC_CONTEXT_MEM ctxTarget, @@ -1690,7 +992,6 @@ static void context_update( return; } -#endif /*-------------------------------------------------------------------* * GetChannelEnergyRatio() @@ -1698,46 +999,6 @@ static void context_update( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float GetChannelEnergyRatio( - Encoder_State **sts, /* i/o: Encoder state structure */ - const int16_t iFirstSubframe, - const int16_t iLastSubframe, - const uint8_t ratioInRmsDomain ) -{ - int16_t ch, n, i; - float nrg[2]; - - /* Calculate energies per channel */ - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - const Encoder_State *st = sts[ch]; - const int16_t nSubframes = ( st->hTcxEnc->tcxMode == TCX_20 ) ? 1 : NB_DIV; - int16_t L_subframeTCX = st->hTcxEnc->L_frameTCX / nSubframes; - - if ( st->last_core == ACELP_CORE ) - { - L_subframeTCX += L_subframeTCX / 4; - } - assert( iFirstSubframe >= 0 && iFirstSubframe <= iLastSubframe ); - - nrg[ch] = 0; - for ( n = iFirstSubframe; n <= min( nSubframes - 1, iLastSubframe ); n++ ) - { - for ( i = 0; i < L_subframeTCX; i++ ) - { - nrg[ch] += st->hTcxEnc->spectrum[n][i] * st->hTcxEnc->spectrum[n][i]; - } - } - if ( ratioInRmsDomain ) - { - nrg[ch] = sqrtf( nrg[ch] ); - } - } - - return ( nrg[0] + nrg[1] ) > 0 ? nrg[0] / ( nrg[0] + nrg[1] ) : -1.0f; -} -#else static Word16 GetChannelEnergyRatio_fx( // Q15 Encoder_State **sts, /* i/o: Encoder state structure */ const Word16 iFirstSubframe, @@ -1805,7 +1066,6 @@ static Word16 GetChannelEnergyRatio_fx( // Q15 return MIN_16; } -#endif /*-------------------------------------------------------------------* * FindSplitRatio() @@ -1813,38 +1073,6 @@ static Word16 GetChannelEnergyRatio_fx( // Q15 * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void FindSplitRatio( - CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ - Encoder_State **sts /* i/o: Encoder state structure */ -) -{ - const uint8_t highRateMdctStereo = ( sts[0]->element_brate < IVAS_80k && sts[0]->core == sts[1]->core && sts[0]->element_mode == IVAS_CPE_MDCT && sts[0]->hTcxEnc->enc_ste_pre_corr_past ? 0 : 1 ); - float ratio_float; - - /* Calculate split ratio and quantize it */ - hCPE->hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; /* Equal bits to both channels */ - ratio_float = GetChannelEnergyRatio( sts, 0, 1, highRateMdctStereo ); - - if ( ratio_float >= 0 ) - { - hCPE->hStereoMdct->split_ratio = (uint16_t) ( SMDCT_BITRATE_RATIO_RANGE * ratio_float + 0.5f ); - /* Tuning to get closer to the optimal split ratio */ - if ( ratio_float < 8.0f / 9.0f && hCPE->hStereoMdct->split_ratio > SMDCT_EQUAL_RATIO_RANGE + ( SMDCT_BITRATE_RATIO_RANGE >> 4 ) ) - { - hCPE->hStereoMdct->split_ratio -= SMDCT_BITRATE_RATIO_RANGE >> 3; - } - if ( ratio_float > 1.0f / 9.0f && hCPE->hStereoMdct->split_ratio < SMDCT_EQUAL_RATIO_RANGE - ( SMDCT_BITRATE_RATIO_RANGE >> 4 ) ) - { - hCPE->hStereoMdct->split_ratio += SMDCT_BITRATE_RATIO_RANGE >> 3; - } - - hCPE->hStereoMdct->split_ratio = min( SMDCT_BITRATE_RATIO_RANGE - 1, max( 1, hCPE->hStereoMdct->split_ratio ) ); - } - - return; -} -#else void FindSplitRatio_fx( CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ Encoder_State **sts /* i/o: Encoder state structure */ @@ -1882,7 +1110,6 @@ void FindSplitRatio_fx( return; } -#endif /*-------------------------------------------------------------------* * MsStereoDecision() @@ -1890,128 +1117,6 @@ void FindSplitRatio_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void MsStereoDecision( - STEREO_MDCT_BAND_PARAMETERS *sfbParam, - float *specL, - float *specR, - float *specM, /* scratch buffer for M, use buffer for inverse MS mask spectrum */ - float *specS, /* scratch buffer for M, use buffer for inverse MS mask spectrum */ - int16_t *mdct_stereo_mode, /* output */ - int16_t *msMask, /* output */ - const int16_t nBitsAvailable ) -{ - int16_t length = sfbParam->sfbOffset[sfbParam->nBandsStereoCore]; - - int16_t bitsL, bitsR, bitsM, bitsS; - int16_t bitsBW, bitsLR, bitsMS; - float G; - float GLR; - int16_t sfb, i; - int16_t nMSOn; /* Number of MS active bands */ - int16_t quantSpecL[N_MAX]; - int16_t quantSpecR[N_MAX]; - int16_t quantSpecM[N_MAX]; - int16_t quantSpecS[N_MAX]; - RC_CONTEXT_MEM ctxMem[4]; - HANDLE_RC_CONTEXT_MEM ctxL, ctxR, ctxM, ctxS; - - set_s( quantSpecL, 0, N_MAX ); - set_s( quantSpecR, 0, N_MAX ); - set_s( quantSpecM, 0, N_MAX ); - set_s( quantSpecS, 0, N_MAX ); - - assert( nBitsAvailable > 0 ); - - ctxL = &ctxMem[0]; - ctxR = &ctxMem[1]; - ctxM = &ctxMem[2]; - ctxS = &ctxMem[3]; - - GLR = SQ_gain_estimate_stereo( specL, specR, nBitsAvailable, length ); - - for ( i = 0; i < length; i++ ) - { - specM[i] = ( specL[i] + specR[i] ) * SQRT2_OVER_2; - specS[i] = ( specL[i] - specR[i] ) * SQRT2_OVER_2; - } - - G = 0.5f * GLR; /* seems to be favourable to underestimate a bit */ - - /* do the full spectrum estimates already here, as side effect we get the quantized spectra... */ - bitsLR = QuantSpecEstimateBits( specL, G, length, nBitsAvailable, quantSpecL ) + QuantSpecEstimateBits( specR, G, length, nBitsAvailable, quantSpecR ); - bitsMS = QuantSpecEstimateBits( specM, G, length, nBitsAvailable, quantSpecM ) + QuantSpecEstimateBits( specS, G, length, nBitsAvailable, quantSpecS ); - - /* clean-up MS scratch buffers */ - set_zero( specM, length ); - set_zero( specS, length ); - - nMSOn = 0; - bitsBW = 0; - - RCcontextMapping_encode2_estimate_bandWise_start( quantSpecL, length, nBitsAvailable, ctxL ); - RCcontextMapping_encode2_estimate_bandWise_start( quantSpecR, length, nBitsAvailable, ctxR ); - - bitsBW += RCcontextMapping_encode2_estimate_bandWise_start( quantSpecM, length, nBitsAvailable, ctxM ); - bitsBW += RCcontextMapping_encode2_estimate_bandWise_start( quantSpecS, length, nBitsAvailable, ctxS ); - - /*find_max_lastnz(ctxL,ctxR,ctxM,ctxS);*/ - - for ( sfb = 0; sfb < sfbParam->nBandsStereoCore; sfb++ ) - { - const int16_t startline = sfbParam->sfbOffset[sfb]; - const int16_t endline = sfbParam->sfbOffset[sfb + 1]; - - bitsL = RCcontextMapping_encode2_estimate_bandWise( quantSpecL, startline, endline, ctxL ); - bitsR = RCcontextMapping_encode2_estimate_bandWise( quantSpecR, startline, endline, ctxR ); - bitsM = RCcontextMapping_encode2_estimate_bandWise( quantSpecM, startline, endline, ctxM ); - bitsS = RCcontextMapping_encode2_estimate_bandWise( quantSpecS, startline, endline, ctxS ); - - if ( bitsM + bitsS <= bitsL + bitsR ) - { - msMask[sfb] = 1; - ++nMSOn; - context_update( ctxM, ctxL, endline ); - context_update( ctxS, ctxR, endline ); - bitsBW += bitsM + bitsS; - } - else - { - msMask[sfb] = 0; - context_update( ctxL, ctxM, endline ); - context_update( ctxR, ctxS, endline ); - bitsBW += bitsL + bitsR; - } - } - - bitsBW += sfbParam->nBandsStereoCore; /* Signaling bits */ - - if ( bitsLR < bitsBW ) - { - nMSOn = 0; - set_s( msMask, 0, sfbParam->sfbCnt ); - bitsBW = bitsLR; - } - - if ( bitsMS < bitsBW ) - { - nMSOn = sfbParam->nBandsStereoCore; - set_s( msMask, 1, sfbParam->sfbCnt ); - } - - *mdct_stereo_mode = SMDCT_BW_MS; - if ( nMSOn == sfbParam->nBandsStereoCore ) - { - *mdct_stereo_mode = SMDCT_MS_FULL; - } - else if ( nMSOn == 0 ) - { - *mdct_stereo_mode = SMDCT_DUAL_MONO; - } - - return; -} -#else static void MsStereoDecision_fx( STEREO_MDCT_BAND_PARAMETERS *sfbParam, Word32 *specL_fx, /* Q( q_spec ) */ @@ -2157,7 +1262,6 @@ static void MsStereoDecision_fx( return; } -#endif /*-----------------------------------------------------------------------* @@ -2166,80 +1270,6 @@ static void MsStereoDecision_fx( * initialize encoder mdct stereo structure *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void initMdctStereoEncData( - STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int16_t element_mode, /* i : element mode */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t bwidth, /* i : bandwidth */ - const int16_t igf, /* i : flag indicating IGF activity */ - const H_IGF_GRID hIgfGrid, /* i : IGF grid setup */ - const int16_t mem_init /* i : initialize memory after malloc */ -) -{ - int16_t tcx_coded_lines; - - tcx_coded_lines = getNumTcxCodedLines( bwidth ); - - /*initialize mdct stereo mode*/ - set_s( hStereoMdct->mdct_stereo_mode, -1, 2 ); - - /*Initialize sfb parameteres for TCX20 */ - stereo_mdct_init_bands( tcx_coded_lines, TCX_20_CORE, element_brate, igf, igf ? &hIgfGrid[IGF_GRID_LB_NORM] : NULL, &hStereoMdct->stbParamsTCX20.sfbOffset[0], &hStereoMdct->stbParamsTCX20.sfbCnt ); - - /*Initialize sfb parameteres for TCX10 */ - stereo_mdct_init_bands( tcx_coded_lines, TCX_10_CORE, element_brate, igf, igf ? &hIgfGrid[IGF_GRID_LB_SHORT] : NULL, - &hStereoMdct->stbParamsTCX10.sfbOffset[0], &hStereoMdct->stbParamsTCX10.sfbCnt ); - - /*Initialize sfb parameteres for transitions */ - stereo_mdct_init_bands( tcx_coded_lines, -1, element_brate, igf, igf ? &hIgfGrid[IGF_GRID_LB_TRAN] : NULL, - &hStereoMdct->stbParamsTCX20afterACELP.sfbOffset[0], &hStereoMdct->stbParamsTCX20afterACELP.sfbCnt ); - - set_s( hStereoMdct->IGFStereoMode, -1, 2 ); - -#ifdef DEBUG_FORCE_MDCT_STEREO_MODE - /*set all other members to defined states */ - hStereoMdct->fDualMono = 0; - hStereoMdct->fMSstereo = 0; - - if ( hStereoMdct->mdct_stereo_mode_cmdl == SMDCT_FORCE_LR ) - { - hStereoMdct->fDualMono = 1; - } - else if ( hStereoMdct->mdct_stereo_mode_cmdl == SMDCT_FORCE_MS ) - { - hStereoMdct->fMSstereo = 1; - } -#endif - - hStereoMdct->split_ratio = SMDCT_EQUAL_RATIO_RANGE; - set_s( hStereoMdct->global_ild, SMDCT_ILD_RANGE >> 1, 2 ); - - if ( mem_init ) - { - hStereoMdct->hItd = NULL; - hStereoMdct->hDft_ana = NULL; - } - - if ( !( element_mode == IVAS_CPE_MDCT && element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) ) - { - if ( hStereoMdct->hDft_ana != NULL ) - { - free( hStereoMdct->hDft_ana ); - hStereoMdct->hDft_ana = NULL; - } - - if ( hStereoMdct->hItd != NULL ) - { - free( hStereoMdct->hItd ); - hStereoMdct->hItd = NULL; - } - } - - return; -} -#else void initMdctStereoEncData_fx( STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ const IVAS_FORMAT ivas_format, /* i : IVAS format */ @@ -2315,7 +1345,6 @@ void initMdctStereoEncData_fx( return; } -#endif /*-----------------------------------------------------------------------* @@ -2324,37 +1353,6 @@ void initMdctStereoEncData_fx( * initialize encoder mdct ITD handling structures *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error initMdctItdHandling( - STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ - const int32_t input_Fs /* i : input sampling rate */ -) -{ - if ( hStereoMdct->hItd == NULL ) - { - if ( ( hStereoMdct->hItd = (ITD_DATA_HANDLE) malloc( sizeof( ITD_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); - } - } - - if ( hStereoMdct->hDft_ana == NULL ) - { - if ( ( hStereoMdct->hDft_ana = (DFT_ANA_HANDLE) malloc( sizeof( DFT_ANA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ITD data\n" ) ); - } - } - - /*Initialize ITD parameters*/ - stereo_enc_itd_init( hStereoMdct->hItd ); - - /*Initialize DFT analysis parameters*/ - dft_ana_init( hStereoMdct->hDft_ana, input_Fs ); - - return IVAS_ERR_OK; -} -#else ivas_error initMdctItdHandling_fx( STEREO_MDCT_ENC_DATA *hStereoMdct, /* i/o: mdct stereo parameters structure */ const Word32 input_Fs /* i : input sampling rate */ @@ -2384,7 +1382,6 @@ ivas_error initMdctItdHandling_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- * stereo_mdct_enc_destroy() @@ -2392,29 +1389,6 @@ ivas_error initMdctItdHandling_fx( * destroy MDCT stereo handle *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_mdct_enc_destroy( - STEREO_MDCT_ENC_DATA_HANDLE *hStereoMdct /* i/o: encoder MDCT stereo handle */ -) -{ - if ( ( *hStereoMdct )->hDft_ana != NULL ) - { - free( ( *hStereoMdct )->hDft_ana ); - ( *hStereoMdct )->hDft_ana = NULL; - } - - if ( ( *hStereoMdct )->hItd != NULL ) - { - free( ( *hStereoMdct )->hItd ); - ( *hStereoMdct )->hItd = NULL; - } - - free( *hStereoMdct ); - *hStereoMdct = NULL; - - return; -} -#else void stereo_mdct_enc_destroy_fx( STEREO_MDCT_ENC_DATA_HANDLE *hStereoMdct /* i/o: encoder MDCT stereo handle */ ) @@ -2436,4 +1410,3 @@ void stereo_mdct_enc_destroy_fx( return; } -#endif diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index 9eccb95c1..ba84be1a2 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -36,17 +36,13 @@ #include "rom_com.h" #include "prot.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif #include "ivas_rom_com.h" #include "assert.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * Function allocate_CoreCoder_enc() @@ -54,7 +50,6 @@ * Allocate CoreCoder modules *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error allocate_CoreCoder_enc_fx( ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ ) @@ -106,59 +101,6 @@ static ivas_error allocate_CoreCoder_enc_fx( return IVAS_ERR_OK; } -#else -static ivas_error allocate_CoreCoder_enc( - ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ -) -{ - if ( st->hLPDmem == NULL && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hLPDmem = (LPD_state_HANDLE) malloc( sizeof( LPD_state ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LPDmem\n" ) ); - } - LPDmem_enc_init( st->hLPDmem ); - } - - if ( st->hGSCEnc == NULL && st->element_mode != IVAS_CPE_MDCT ) - { - if ( ( st->hGSCEnc = (GSC_ENC_HANDLE) malloc( sizeof( GSC_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for GSC\n" ) ); - } - GSC_enc_init( st->hGSCEnc ); - } - - if ( st->hNoiseEst == NULL ) - { - if ( ( st->hNoiseEst = (NOISE_EST_HANDLE) malloc( sizeof( NOISE_EST_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Noise estimation\n" ) ); - } - noise_est_init( st->hNoiseEst ); - } - - if ( st->hVAD == NULL ) - { - if ( ( st->hVAD = (VAD_HANDLE) malloc( sizeof( VAD_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VAD\n" ) ); - } - wb_vad_init( st->hVAD ); - } - - if ( st->hSpMusClas == NULL ) - { - if ( ( st->hSpMusClas = (SP_MUS_CLAS_HANDLE) malloc( sizeof( SP_MUS_CLAS_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Speech/music classifier\n" ) ); - } - speech_music_clas_init( st->hSpMusClas ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * Function deallocate_CoreCoder_TCX_enc() @@ -166,38 +108,6 @@ static ivas_error allocate_CoreCoder_enc( * Deallocate CoreCoder TCX modules *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void deallocate_CoreCoder_TCX_enc( - ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ -) -{ - if ( st->hTcxEnc != NULL ) - { - free( st->hTcxEnc ); - st->hTcxEnc = NULL; - } - - if ( st->hTcxCfg != NULL ) - { - free( st->hTcxCfg ); - st->hTcxCfg = NULL; - } - - if ( st->hIGFEnc != NULL ) - { - free( st->hIGFEnc ); - st->hIGFEnc = NULL; - } - - if ( st->hHQ_core != NULL ) - { - free( st->hHQ_core ); - st->hHQ_core = NULL; - } - - return; -} -#else static void deallocate_CoreCoder_TCX_enc_fx( ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ ) @@ -228,7 +138,6 @@ static void deallocate_CoreCoder_TCX_enc_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -237,71 +146,6 @@ static void deallocate_CoreCoder_TCX_enc_fx( * Deallocate CoreCoder modules *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void deallocate_CoreCoder_enc( - ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ -) -{ - if ( st->hLPDmem != NULL ) - { - free( st->hLPDmem ); - st->hLPDmem = NULL; - } - - if ( st->hGSCEnc != NULL ) - { - free( st->hGSCEnc ); - st->hGSCEnc = NULL; - } - - if ( st->hNoiseEst != NULL && st->element_mode != IVAS_CPE_MDCT ) - { - free( st->hNoiseEst ); - st->hNoiseEst = NULL; - } - - if ( st->hVAD != NULL && st->element_mode != IVAS_CPE_MDCT ) - { - free( st->hVAD ); - st->hVAD = NULL; - } - - if ( st->hSpMusClas != NULL && st->element_mode != IVAS_CPE_MDCT ) - { - free( st->hSpMusClas ); - st->hSpMusClas = NULL; - } - - if ( st->cldfbAnaEnc != NULL ) - { - deleteCldfb( &st->cldfbAnaEnc ); - } - - if ( st->hBWE_TD != NULL ) - { - free( st->hBWE_TD ); - st->hBWE_TD = NULL; - } - - if ( st->cldfbSynTd != NULL ) - { - deleteCldfb( &st->cldfbSynTd ); - } - - if ( st->hBWE_FD != NULL ) - { - free( st->hBWE_FD ); - st->hBWE_FD = NULL; - } - - if ( st->element_mode != IVAS_CPE_MDCT ) - { - deallocate_CoreCoder_TCX_enc( st ); - } - - return; -} -#else static void deallocate_CoreCoder_enc_fx( ENC_CORE_HANDLE st /* i/o: Core encoder state structure */ ) @@ -368,9 +212,7 @@ static void deallocate_CoreCoder_enc_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function stereo_memory_enc() * @@ -675,24 +517,16 @@ ivas_error stereo_memory_enc_fx( // st->hTcxEnc->spectrum[0] = st->hTcxEnc->spectrum_long; // st->hTcxEnc->spectrum[1] = st->hTcxEnc->spectrum_long + N_TCX10_MAX; -#ifdef IVAS_FLOAT_FIXED st->hTcxEnc->spectrum_fx[0] = st->hTcxEnc->spectrum_long_fx; st->hTcxEnc->spectrum_fx[1] = st->hTcxEnc->spectrum_long_fx + N_TCX10_MAX; st->hTcxEnc->spectrum_e[0] = st->hTcxEnc->spectrum_e[1] = 0; move16(); move16(); -#endif // set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); // set_f( st->hTcxEnc->spectrum_long, 0, N_MAX ); -#ifdef IVAS_FLOAT_FIXED set32_fx( st->hTcxEnc->spectrum_long_fx, 0, N_MAX ); st->hTcxEnc->spectrum_long_e = 0; -#endif -#ifndef IVAS_FLOAT_FIXED - st->hTcxEnc->tfm_mem = 0.75f; -#else st->hTcxEnc->tfm_mem_fx = 1610612736; /* 0.75 in Q31 */ -#endif IF( EQ_16( hCPE->last_element_mode, IVAS_CPE_DFT ) ) { @@ -709,11 +543,7 @@ ivas_error stereo_memory_enc_fx( { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); } -#ifndef IVAS_FLOAT_FIXED - st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode ); -#else st->igf = getIgfPresent_fx( st->element_mode, st->total_brate, st->bwidth, st->rf_mode ); -#endif move16(); /* allocate and initialize MDCT stereo structure */ @@ -771,11 +601,7 @@ ivas_error stereo_memory_enc_fx( { createFdCngEnc_fx( &st->hFdCngEnc ); -#ifdef IVAS_FLOAT_FIXED initFdCngEnc_fx( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale ); -#else - initFdCngEnc( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale_flt ); -#endif configureFdCngEnc_ivas_fx( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); } } @@ -797,538 +623,122 @@ ivas_error stereo_memory_enc_fx( return error; } -#else +static void v_multc_fixed_32_16( + const Word16 x[], /* i : Input vector */ + const Word32 c, /* i : Constant */ + Word32 y[], /* o : Output vector that contains c*x */ + const Word16 N /* i : Vector length */ +) +{ + Word16 i; + + FOR( i = 0; i < N; i++ ) + { + y[i] = Mpy_32_16_1( c, x[i] ); + move32(); + } + + return; +} /*-------------------------------------------------------------------* - * Function stereo_memory_enc() + * Function stereo_switching_enc() * - * Dynamically allocate/deallocate data structures depending on the actual CPE mode + * Handling of memories in case of CPE modes switching *-------------------------------------------------------------------*/ -ivas_error stereo_memory_enc( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int32_t input_Fs, /* i : input sampling rate */ - const int16_t max_bwidth, /* i : maximum audio bandwidth */ - float *tdm_last_ratio, /* o : TD stereo last ratio */ - const IVAS_FORMAT ivas_format, /* i : ivas format */ - const int16_t nchan_transport /* i : number transport chans */ -) +void stereo_switching_enc_fx( + CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ + Word16 old_input_signal_pri[], /* i : old input signal of primary channel */ + const Word16 input_frame, /* i : input frame length */ + const Word16 q_inp ) { - Encoder_State *st; - ivas_error error; - - error = IVAS_ERR_OK; - - assert( hCPE->last_element_mode >= IVAS_CPE_DFT && "Switching from SCE to CPE is not a valid configuration!" ); + Word16 i, n, dft_ovl, offset; + Word16 tmp_fx; + move16(); + Encoder_State **sts; - /*--------------------------------------------------------------* - * save parameters from structures that will be freed - *---------------------------------------------------------------*/ + sts = hCPE->hCoreCoder; + dft_ovl = extract_l( Mpy_32_32( imult3216( input_frame, STEREO_DFT_OVL_MAX ), 2236963 ) ); // 1/L_FRAME48k = 2236963 (Q31) - if ( hCPE->last_element_mode == IVAS_CPE_TD ) + /* update DFT analysis overlap memory */ + test(); + test(); + IF( GT_16( hCPE->element_mode, IVAS_CPE_DFT ) && hCPE->input_mem_fx[0] != NULL && NE_16( hCPE->element_mode, IVAS_CPE_MDCT ) ) { - *tdm_last_ratio = hCPE->hStereoTD->tdm_last_ratio; /* note: this must be set to local variable before data structures are allocated/deallocated */ + FOR( n = 0; n < CPE_CHANNELS; n++ ) + { + Copy( sts[n]->input_fx + input_frame - dft_ovl, hCPE->input_mem_fx[n], dft_ovl ); + } } - if ( hCPE->hStereoTCA != NULL && hCPE->last_element_mode == IVAS_CPE_DFT ) + /* save original stereo input (MDCT overlap part) for both channels in unused old input of right channel for possible DFT->MDCT transition */ + IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) ) { - set_s( hCPE->hStereoTCA->prevCorrLagStats, (int16_t) hCPE->hStereoDft->hItd->itd[1], 3 ); - hCPE->hStereoTCA->prevRefChanIndx = ( hCPE->hStereoDft->hItd->itd[1] >= 0 ) ? ( L_CH_INDX ) : ( R_CH_INDX ); + Copy( sts[0]->input_fx + sub( (Word16) Mpy_32_32( sts[0]->input_Fs, 42949673 /* 1/50 in Q31*/ ), sts[0]->encoderLookahead_FB ), sts[1]->input_fx - shl( sts[0]->encoderLookahead_FB, 1 ), sts[0]->encoderLookahead_FB ); + + Copy( sts[1]->input_fx + sub( (Word16) Mpy_32_32( sts[1]->input_Fs, 42949673 /* 1/50 in Q31*/ ), sts[1]->encoderLookahead_FB ), sts[1]->input_fx - sts[1]->encoderLookahead_FB, sts[1]->encoderLookahead_FB ); } - /*--------------------------------------------------------------* - * allocate/deallocate data structures - *---------------------------------------------------------------*/ - if ( hCPE->element_mode != hCPE->last_element_mode ) + /* TD/MDCT -> DFT stereo switching */ + test(); + IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) && NE_16( hCPE->last_element_mode, IVAS_CPE_DFT ) ) { - /*--------------------------------------------------------------* - * switching CPE mode to DFT stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_DFT ) + /* window DFT synthesis overlap memory @input_Fs, primary channel */ + FOR( i = 0; i < dft_ovl; i++ ) { - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoTD != NULL ) - { - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; - } + hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shr( Mpy_32_16_r( hCPE->hStereoDft->win_fx[dft_ovl - 1 - i], old_input_signal_pri[input_frame - dft_ovl + i] ), q_inp ); // ( ( Q31 + q_inp ) - Q15 ) - Q16 ) -> Q16 + move32(); + } + /* reset 48kHz BWE overlap memory */ + set32_fx( hCPE->hStereoDft->output_mem_dmx_32k_fx, 0, STEREO_DFT_OVL_32k ); - if ( hCPE->hStereoMdct != NULL ) - { - stereo_mdct_enc_destroy( &( hCPE->hStereoMdct ) ); - hCPE->hStereoMdct = NULL; - } + stereo_dft_enc_reset_fx( hCPE->hStereoDft ); - /* deallocate CoreCoder secondary channel */ - deallocate_CoreCoder_enc( hCPE->hCoreCoder[1] ); + /* update ITD parameters */ + test(); + IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) && EQ_16( hCPE->last_element_mode, IVAS_CPE_TD ) ) + { + set32_fx( hCPE->hStereoDft->hItd->itd_fx, hCPE->hStereoTCA->prevCorrLagStats[2], STEREO_DFT_ENC_DFT_NB ); + } - /* allocate DFT stereo data structure */ - if ( ( error = stereo_dft_enc_create( &( hCPE->hStereoDft ), input_Fs, max_bwidth ) ) != IVAS_ERR_OK ) + /* Update the side_gain[] parameters */ + test(); + IF( hCPE->hStereoTCA != NULL && NE_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) + { + tmp_fx = usdequant_fx( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN_FX, STEREO_TCA_GDSTEP_FX ); + FOR( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) { - return error; + hCPE->hStereoDft->side_gain_fx[STEREO_DFT_BAND_MAX + i] = L_deposit_h( tmp_fx ); + move32(); } + } - /* allocate ICBWE structure */ - if ( hCPE->hStereoICBWE == NULL ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_enc( hCPE->hStereoICBWE ); - } + /* do not allow differential coding of DFT side parameters */ + hCPE->hStereoDft->res_pred_counter = STEREO_DFT_FEC_THRESHOLD; + move16(); - /* allocate HQ core in M channel */ - st = hCPE->hCoreCoder[0]; - if ( st->hHQ_core == NULL ) - { - if ( ( st->hHQ_core = (HQ_ENC_HANDLE) malloc( sizeof( HQ_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HQ core\n" ) ); - } + /* update DFT synthesis overlap memory @12.8kHz */ + FOR( i = 0; i < STEREO_DFT_OVL_12k8; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_12k8_fx[i] = L_shr( Mpy_32_16_r( hCPE->hStereoDft->win_12k8_fx[STEREO_DFT_OVL_12k8 - 1 - i], sts[0]->buf_speech_enc[L_FRAME32k + L_FRAME - STEREO_DFT_OVL_12k8 + i] ), q_inp ); + move32(); + } + Word16 q_dmx = Q16; + move16(); + /* update DFT synthesis overlap memory @16kHz, primary channel only */ + L_lerp_fx( hCPE->hStereoDft->output_mem_dmx_fx, hCPE->hStereoDft->output_mem_dmx_16k_fx, STEREO_DFT_OVL_16k, dft_ovl, &q_dmx ); + FOR( i = 0; i < STEREO_DFT_OVL_16k; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_16k_fx[i] = L_shl( hCPE->hStereoDft->output_mem_dmx_16k_fx[i], sub( Q16, q_dmx ) ); // Q16 + move32(); + } - HQ_core_enc_init( st->hHQ_core ); - } - } - - /*--------------------------------------------------------------* - * switching CPE mode to TD stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoDft != NULL ) - { - stereo_dft_enc_destroy( &( hCPE->hStereoDft ) ); - hCPE->hStereoDft = NULL; - } - - if ( hCPE->hStereoMdct != NULL ) - { - stereo_mdct_enc_destroy( &( hCPE->hStereoMdct ) ); - hCPE->hStereoMdct = NULL; - } - - /* deallocated TCX/IGF structures for second channel */ - deallocate_CoreCoder_TCX_enc( hCPE->hCoreCoder[1] ); - - /* allocate TD stereo data structure */ - if ( hCPE->hStereoTD != NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TD Stereo memory already allocated\n" ); - } - - if ( ( hCPE->hStereoTD = (STEREO_TD_ENC_DATA_HANDLE) malloc( sizeof( STEREO_TD_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD Stereo\n" ) ); - } - - stereo_td_init_enc( hCPE->hStereoTD, hCPE->last_element_mode ); - - /* allocate secondary channel */ - if ( ( error = allocate_CoreCoder_enc( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*--------------------------------------------------------------* - * allocate DFT/TD stereo structures after MDCT stereo frame - *---------------------------------------------------------------*/ - - if ( hCPE->last_element_mode == IVAS_CPE_MDCT && ( hCPE->element_mode == IVAS_CPE_DFT || hCPE->element_mode == IVAS_CPE_TD ) ) - { - /* Deallocate MDCT CNG structures */ - deleteCldfb_ivas( &hCPE->hCoreCoder[0]->cldfbAnaEnc ); - deleteCldfb_ivas( &hCPE->hCoreCoder[1]->cldfbAnaEnc ); - - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - if ( hCPE->hCoreCoder[1]->hDtxEnc != NULL ) - { - free( hCPE->hCoreCoder[1]->hDtxEnc ); - hCPE->hCoreCoder[1]->hDtxEnc = NULL; - } - - if ( hCPE->hCoreCoder[1]->hFdCngEnc != NULL ) - { - deleteFdCngEnc( &hCPE->hCoreCoder[1]->hFdCngEnc ); - } - } - - if ( hCPE->hCoreCoder[0]->Opt_DTX_ON && hCPE->hCoreCoder[0]->hTdCngEnc == NULL ) - { - if ( ( hCPE->hCoreCoder[0]->hTdCngEnc = (TD_CNG_ENC_HANDLE) malloc( sizeof( TD_CNG_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX/TD CNG\n" ) ); - } - - td_cng_enc_init( hCPE->hCoreCoder[0]->hTdCngEnc, hCPE->hCoreCoder[0]->Opt_DTX_ON, hCPE->hCoreCoder[0]->max_bwidth ); - } - - /* allocate TCA data structure */ - if ( hCPE->hStereoTCA != NULL ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: TCA Stereo memory already allocated\n" ); - } - - if ( ( hCPE->hStereoTCA = (STEREO_TCA_ENC_HANDLE) malloc( sizeof( STEREO_TCA_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo TCA\n" ) ); - } - - stereo_tca_init_enc( hCPE->hStereoTCA, input_Fs ); - - st = hCPE->hCoreCoder[0]; - - /* allocate primary channel substructures */ - if ( ( error = allocate_CoreCoder_enc( st ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* allocate CLDFB for primary channel */ - if ( st->cldfbAnaEnc == NULL ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbAnaEnc, CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbAnaEnc, CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - - /* allocate BWEs for primary channel */ - if ( st->hBWE_TD == NULL ) - { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } - - if ( st->cldfbSynTd == NULL ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - - InitSWBencBuffer( st->hBWE_TD ); - ResetSHBbuffer_Enc( st->hBWE_TD ); - - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - - fd_bwe_enc_init( st->hBWE_FD ); - } - - /* allocate stereo CNG structure */ - if ( hCPE->hStereoCng == NULL ) - { - if ( ( hCPE->hStereoCng = (STEREO_CNG_ENC_HANDLE) malloc( sizeof( STEREO_CNG_ENC ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo Cng for Unified/TD\n" ) ); - } - - stereo_enc_cng_init( hCPE->hStereoCng ); - } - } - - /*--------------------------------------------------------------* - * switching CPE mode to MDCT stereo - *---------------------------------------------------------------*/ - - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - int16_t i; - - /* deallocate data structure of the previous CPE mode */ - if ( hCPE->hStereoDft != NULL ) - { - stereo_dft_enc_destroy( &( hCPE->hStereoDft ) ); - hCPE->hStereoDft = NULL; - } - - if ( hCPE->hStereoTD != NULL ) - { - free( hCPE->hStereoTD ); - hCPE->hStereoTD = NULL; - } - - if ( hCPE->hStereoTCA != NULL ) - { - free( hCPE->hStereoTCA ); - hCPE->hStereoTCA = NULL; - } - - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - - for ( i = 0; i < CPE_CHANNELS; i++ ) - { - /* deallocate core-coder substructures */ - deallocate_CoreCoder_enc( hCPE->hCoreCoder[i] ); - } - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - /* allocate secondary channel */ - if ( ( error = allocate_CoreCoder_enc( hCPE->hCoreCoder[1] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* allocate TCX/IGF structures for second channel */ - st = hCPE->hCoreCoder[1]; - - if ( ( st->hTcxEnc = (TCX_ENC_HANDLE) malloc( sizeof( TCX_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxEnc\n" ) ); - } - - st->hTcxEnc->spectrum[0] = st->hTcxEnc->spectrum_long; - st->hTcxEnc->spectrum[1] = st->hTcxEnc->spectrum_long + N_TCX10_MAX; - set_f( st->hTcxEnc->old_out, 0, L_FRAME32k ); - set_f( st->hTcxEnc->spectrum_long, 0, N_MAX ); - st->hTcxEnc->tfm_mem = 0.75f; - - if ( hCPE->last_element_mode == IVAS_CPE_DFT ) - { - st->last_core = ACELP_CORE; /* needed to set-up TCX core in SetTCXModeInfo() */ - } - - if ( ( st->hTcxCfg = (TCX_CONFIG_HANDLE) malloc( sizeof( TCX_config ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hTcxCfg\n" ) ); - } - - if ( ( st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) malloc( sizeof( IGF_ENC_INSTANCE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for hIGFEnc\n" ) ); - } - st->igf = getIgfPresent( st->element_mode, st->total_brate, st->bwidth, st->rf_mode ); - - /* allocate and initialize MDCT stereo structure */ - if ( ( hCPE->hStereoMdct = (STEREO_MDCT_ENC_DATA_HANDLE) malloc( sizeof( STEREO_MDCT_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MDCT Stereo \n" ) ); - } - -#ifdef DEBUGGING - hCPE->hStereoMdct->mdct_stereo_mode_cmdl = SMDCT_MS_DECISION; -#endif - -#ifndef IVAS_FLOAT_FIXED - initMdctStereoEncData( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, hCPE->hCoreCoder[0]->max_bwidth, 0, NULL, 1 ); -#else - initMdctStereoEncData_fx( hCPE->hStereoMdct, ivas_format, hCPE->element_mode, hCPE->element_brate, hCPE->hCoreCoder[0]->max_bwidth, 0, NULL, 1 ); -#endif - - hCPE->hStereoMdct->isSBAStereoMode = ( ivas_format == SBA_FORMAT && nchan_transport == 2 ); - - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE && ivas_format == STEREO_FORMAT ) - { - if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* allocate/deallocate and initialize DTX/CNG structures */ - if ( hCPE->hCoreCoder[0]->Opt_DTX_ON ) - { - for ( i = 0; i < CPE_CHANNELS; i++ ) - { - st = hCPE->hCoreCoder[i]; -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - - { - return error; - } - - st->currEnergyLookAhead = 6.1e-5f; - - if ( st->hDtxEnc == NULL ) - { - if ( ( st->hDtxEnc = (DTX_ENC_HANDLE) malloc( sizeof( DTX_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DTX variables\n" ) ); - } - } - dtx_enc_init( st, 0, FIXED_SID_RATE ); - - if ( st->hTdCngEnc != NULL ) - { - free( st->hTdCngEnc ); - st->hTdCngEnc = NULL; - } - - if ( st->hFdCngEnc == NULL ) - { - if ( ( error = createFdCngEnc( &st->hFdCngEnc ) ) != IVAS_ERR_OK ) - { - return error; - } - - initFdCngEnc( st->hFdCngEnc, st->input_Fs, st->cldfbAnaEnc->scale_flt ); - configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); - } - } - } - } - } - - if ( ivas_format == STEREO_FORMAT && hCPE->element_mode == IVAS_CPE_MDCT && hCPE->element_brate <= MAX_MDCT_ITD_BRATE && hCPE->last_element_brate > MAX_MDCT_ITD_BRATE ) - { - /* allocate MDCT stereo ITD handling structure */ - if ( ( error = initMdctItdHandling( hCPE->hStereoMdct, input_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} - -#endif -#ifdef IVAS_FLOAT_FIXED - -static void v_multc_fixed_32_16( - const Word16 x[], /* i : Input vector */ - const Word32 c, /* i : Constant */ - Word32 y[], /* o : Output vector that contains c*x */ - const Word16 N /* i : Vector length */ -) -{ - Word16 i; - - FOR( i = 0; i < N; i++ ) - { - y[i] = Mpy_32_16_1( c, x[i] ); - move32(); - } - - return; -} -/*-------------------------------------------------------------------* - * Function stereo_switching_enc() - * - * Handling of memories in case of CPE modes switching - *-------------------------------------------------------------------*/ - -void stereo_switching_enc_fx( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - Word16 old_input_signal_pri[], /* i : old input signal of primary channel */ - const Word16 input_frame, /* i : input frame length */ - const Word16 q_inp ) -{ - Word16 i, n, dft_ovl, offset; - Word16 tmp_fx; - move16(); - Encoder_State **sts; - - sts = hCPE->hCoreCoder; - dft_ovl = extract_l( Mpy_32_32( imult3216( input_frame, STEREO_DFT_OVL_MAX ), 2236963 ) ); // 1/L_FRAME48k = 2236963 (Q31) - - /* update DFT analysis overlap memory */ - test(); - test(); - IF( GT_16( hCPE->element_mode, IVAS_CPE_DFT ) && hCPE->input_mem_fx[0] != NULL && NE_16( hCPE->element_mode, IVAS_CPE_MDCT ) ) - { - FOR( n = 0; n < CPE_CHANNELS; n++ ) - { - Copy( sts[n]->input_fx + input_frame - dft_ovl, hCPE->input_mem_fx[n], dft_ovl ); - } - } - - /* save original stereo input (MDCT overlap part) for both channels in unused old input of right channel for possible DFT->MDCT transition */ - IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) ) - { - Copy( sts[0]->input_fx + sub( (Word16) Mpy_32_32( sts[0]->input_Fs, 42949673 /* 1/50 in Q31*/ ), sts[0]->encoderLookahead_FB ), sts[1]->input_fx - shl( sts[0]->encoderLookahead_FB, 1 ), sts[0]->encoderLookahead_FB ); - - Copy( sts[1]->input_fx + sub( (Word16) Mpy_32_32( sts[1]->input_Fs, 42949673 /* 1/50 in Q31*/ ), sts[1]->encoderLookahead_FB ), sts[1]->input_fx - sts[1]->encoderLookahead_FB, sts[1]->encoderLookahead_FB ); - } - - - /* TD/MDCT -> DFT stereo switching */ - test(); - IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) && NE_16( hCPE->last_element_mode, IVAS_CPE_DFT ) ) - { - /* window DFT synthesis overlap memory @input_Fs, primary channel */ - FOR( i = 0; i < dft_ovl; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shr( Mpy_32_16_r( hCPE->hStereoDft->win_fx[dft_ovl - 1 - i], old_input_signal_pri[input_frame - dft_ovl + i] ), q_inp ); // ( ( Q31 + q_inp ) - Q15 ) - Q16 ) -> Q16 - move32(); - } - /* reset 48kHz BWE overlap memory */ - set32_fx( hCPE->hStereoDft->output_mem_dmx_32k_fx, 0, STEREO_DFT_OVL_32k ); - - stereo_dft_enc_reset_fx( hCPE->hStereoDft ); - - /* update ITD parameters */ - test(); - IF( EQ_16( hCPE->element_mode, IVAS_CPE_DFT ) && EQ_16( hCPE->last_element_mode, IVAS_CPE_TD ) ) - { - set32_fx( hCPE->hStereoDft->hItd->itd_fx, hCPE->hStereoTCA->prevCorrLagStats[2], STEREO_DFT_ENC_DFT_NB ); - } - - /* Update the side_gain[] parameters */ - test(); - IF( hCPE->hStereoTCA != NULL && NE_16( hCPE->last_element_mode, IVAS_CPE_MDCT ) ) - { - tmp_fx = usdequant_fx( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN_FX, STEREO_TCA_GDSTEP_FX ); - FOR( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) - { - hCPE->hStereoDft->side_gain_fx[STEREO_DFT_BAND_MAX + i] = L_deposit_h( tmp_fx ); - move32(); - } - } - - /* do not allow differential coding of DFT side parameters */ - hCPE->hStereoDft->res_pred_counter = STEREO_DFT_FEC_THRESHOLD; - move16(); - - /* update DFT synthesis overlap memory @12.8kHz */ - FOR( i = 0; i < STEREO_DFT_OVL_12k8; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_12k8_fx[i] = L_shr( Mpy_32_16_r( hCPE->hStereoDft->win_12k8_fx[STEREO_DFT_OVL_12k8 - 1 - i], sts[0]->buf_speech_enc[L_FRAME32k + L_FRAME - STEREO_DFT_OVL_12k8 + i] ), q_inp ); - move32(); - } - Word16 q_dmx = Q16; - move16(); - /* update DFT synthesis overlap memory @16kHz, primary channel only */ - L_lerp_fx( hCPE->hStereoDft->output_mem_dmx_fx, hCPE->hStereoDft->output_mem_dmx_16k_fx, STEREO_DFT_OVL_16k, dft_ovl, &q_dmx ); - FOR( i = 0; i < STEREO_DFT_OVL_16k; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_16k_fx[i] = L_shl( hCPE->hStereoDft->output_mem_dmx_16k_fx[i], sub( Q16, q_dmx ) ); // Q16 - move32(); - } - - FOR( i = 0; i < STEREO_DFT_OVL_MAX; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shl( hCPE->hStereoDft->output_mem_dmx_fx[i], sub( Q16, q_dmx ) ); // Q16 - move32(); + FOR( i = 0; i < STEREO_DFT_OVL_MAX; i++ ) + { + hCPE->hStereoDft->output_mem_dmx_fx[i] = L_shl( hCPE->hStereoDft->output_mem_dmx_fx[i], sub( Q16, q_dmx ) ); // Q16 + move32(); } /* reset DFT synthesis overlap memory @8kHz, secondary channel */ @@ -1547,234 +957,3 @@ void stereo_switching_enc_fx( return; } -#else -/*-------------------------------------------------------------------* - * Function stereo_switching_enc() - * - * Handling of memories in case of CPE modes switching - *-------------------------------------------------------------------*/ - -void stereo_switching_enc( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - float old_input_signal_pri[], /* i : old input signal of primary channel */ - const int16_t input_frame /* i : input frame length */ -) -{ - int16_t i, n, dft_ovl, offset; - float tmpF; - Encoder_State **sts; - - sts = hCPE->hCoreCoder; - dft_ovl = STEREO_DFT_OVL_MAX * input_frame / L_FRAME48k; - - /* update DFT analysis overlap memory */ - if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->input_mem[0] != NULL && hCPE->element_mode != IVAS_CPE_MDCT ) - { - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - mvr2r( sts[n]->input + input_frame - dft_ovl, hCPE->input_mem[n], dft_ovl ); - } - } - - /* save original stereo input (MDCT overlap part) for both channels in unused old input of right channel for possible DFT->MDCT transition */ - if ( hCPE->element_mode == IVAS_CPE_DFT ) - { - mvr2r( sts[0]->input + sts[0]->input_Fs / FRAMES_PER_SEC - sts[0]->encoderLookahead_FB, sts[1]->input - 2 * sts[0]->encoderLookahead_FB, sts[0]->encoderLookahead_FB ); - mvr2r( sts[1]->input + sts[1]->input_Fs / FRAMES_PER_SEC - sts[1]->encoderLookahead_FB, sts[1]->input - sts[1]->encoderLookahead_FB, sts[1]->encoderLookahead_FB ); - } - - /* TD/MDCT -> DFT stereo switching */ - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode != IVAS_CPE_DFT ) - { - /* window DFT synthesis overlap memory @input_Fs, primary channel */ - for ( i = 0; i < dft_ovl; i++ ) - { - hCPE->hStereoDft->output_mem_dmx[i] = old_input_signal_pri[input_frame - dft_ovl + i] * hCPE->hStereoDft->win[dft_ovl - 1 - i]; - } - - /* reset 48kHz BWE overlap memory */ - set_f( hCPE->hStereoDft->output_mem_dmx_32k, 0, STEREO_DFT_OVL_32k ); - - stereo_dft_enc_reset( hCPE->hStereoDft ); - - /* update ITD parameters */ - if ( hCPE->element_mode == IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_TD ) - { - set_f( hCPE->hStereoDft->hItd->itd, hCPE->hStereoTCA->prevCorrLagStats[2], STEREO_DFT_ENC_DFT_NB ); - } - - /* Update the side_gain[] parameters */ - if ( hCPE->hStereoTCA != NULL && hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - tmpF = usdequant( hCPE->hStereoTCA->indx_ica_gD, STEREO_TCA_GDMIN, STEREO_TCA_GDSTEP ); - for ( i = 0; i < STEREO_DFT_BAND_MAX; i++ ) - { - hCPE->hStereoDft->side_gain[STEREO_DFT_BAND_MAX + i] = tmpF; - } - } - - /* do not allow differential coding of DFT side parameters */ - hCPE->hStereoDft->res_pred_counter = STEREO_DFT_FEC_THRESHOLD; - - /* update DFT synthesis overlap memory @12.8kHz */ - for ( i = 0; i < STEREO_DFT_OVL_12k8; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_12k8[i] = sts[0]->buf_speech_enc_flt[L_FRAME32k + L_FRAME - STEREO_DFT_OVL_12k8 + i] * hCPE->hStereoDft->win_12k8[STEREO_DFT_OVL_12k8 - 1 - i]; - } - - /* update DFT synthesis overlap memory @16kHz, primary channel only */ - lerp_flt( hCPE->hStereoDft->output_mem_dmx, hCPE->hStereoDft->output_mem_dmx_16k, STEREO_DFT_OVL_16k, dft_ovl ); - - /* reset DFT synthesis overlap memory @8kHz, secondary channel */ - set_f( hCPE->hStereoDft->output_mem_res_8k, 0, STEREO_DFT_OVL_8k ); - - hCPE->hCoreCoder[1]->vad_flag = 0; - } - - /* MDCT -> TD stereo switching */ - if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - hCPE->hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_LEFT_IS_PRIM; - hCPE->hStereoTD->tdm_last_SM_flag = 0; - hCPE->hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_LEFT_IS_PRIM]; - } - /* DFT -> TD stereo switching */ - else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_DFT ) - { - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hCPE->hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; - hCPE->hStereoTD->tdm_last_SM_flag = 0; - hCPE->hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - - /* First frame after DFT frame AND the content is uncorrelated or xtalk -> the primary channel is forced to left */ - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - set_zero( sts[1]->input - input_frame, input_frame ); - - hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_LEFT_IS_PRIM]; - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - - if ( hCPE->hStereoTCA->instTargetGain < 0.05f && ( hCPE->hCoreCoder[0]->vad_flag || hCPE->hCoreCoder[1]->vad_flag ) ) /* but if there is no content in the L channel -> the primary channel is forced to right */ - { - hCPE->hStereoTD->tdm_last_ratio = tdm_ratio_tabl[LRTD_STEREO_RIGHT_IS_PRIM]; - hCPE->hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; - } - } - } - - /* no secondary channel in the previous frame -> memory resets */ - if ( hCPE->element_mode > IVAS_CPE_DFT && hCPE->last_element_mode == IVAS_CPE_DFT ) - { - if ( sts[0]->cldfbAnaEnc != NULL ) - { - offset = sts[0]->cldfbAnaEnc->p_filter_length - sts[0]->cldfbAnaEnc->no_channels; - mvr2r( old_input_signal_pri + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), sts[0]->cldfbAnaEnc->cldfb_state, offset ); - } - - if ( sts[0]->cldfbSynTd != NULL ) - { - cldfb_reset_memory_ivas( sts[0]->cldfbSynTd ); - sts[0]->currEnergyLookAhead = 6.1e-5f; - } - - if ( hCPE->hStereoICBWE == NULL && sts[1]->cldfbAnaEnc != NULL ) - { - offset = sts[1]->cldfbAnaEnc->p_filter_length - sts[1]->cldfbAnaEnc->no_channels; - - if ( hCPE->hStereoTD != NULL && hCPE->hStereoTD->tdm_last_ratio_idx == LRTD_STEREO_LEFT_IS_PRIM ) - { - v_multc( hCPE->hCoreCoder[1]->old_input_signal + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), -1.0f, sts[1]->cldfbAnaEnc->cldfb_state, offset ); - } - else - { - mvr2r( hCPE->hCoreCoder[1]->old_input_signal + input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ), sts[1]->cldfbAnaEnc->cldfb_state, offset ); - } - - if ( sts[1]->cldfbSynTd != NULL ) - { - cldfb_reset_memory_ivas( sts[1]->cldfbSynTd ); - sts[1]->currEnergyLookAhead = 6.1e-5f; - } - } - - sts[1]->last_extl = -1; - - /* no secondary channel in the previous frame -> memory resets */ - set_zero( sts[1]->old_inp_12k8, L_INP_MEM ); - set_zero( sts[1]->mem_decim, 2 * L_FILT_MAX ); - sts[1]->mem_preemph = 0; - - set_zero( sts[1]->buf_speech_enc_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - set_zero( sts[1]->buf_speech_enc_pe_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - - if ( sts[1]->hTcxEnc != NULL ) - { - set_zero( sts[1]->hTcxEnc->buf_speech_ltp_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); - } - set_zero( sts[1]->buf_wspeech_enc_flt, L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k ); - set_zero( sts[1]->buf_synth_flt, OLD_SYNTH_SIZE_ENC + L_FRAME32k ); - sts[1]->mem_wsp = 0.0f; - sts[1]->mem_wsp_enc_flt = 0.0f; - init_gp_clip( sts[1]->clip_var ); - - set_f( sts[1]->Bin_E, 0, L_FFT ); - set_f( sts[1]->Bin_E_old, 0, L_FFT / 2 ); - - /* sts[1]->hLPDmem reset already done in allocation of handles */ - - sts[1]->last_L_frame = sts[0]->last_L_frame; - - pitch_ol_init( &sts[1]->old_thres, &sts[1]->old_pitch, &sts[1]->delta_pit, &sts[1]->old_corr ); - set_zero( sts[1]->old_wsp, L_WSP_MEM ); - set_zero( sts[1]->old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); - set_zero( sts[1]->mem_decim2, 3 ); - mvs2s( sts[0]->pitch, sts[1]->pitch, 3 ); - - sts[1]->Nb_ACELP_frames = 0; - - /* populate PCh memories into the SCh */ - if ( sts[0]->hLPDmem != NULL ) - { - mvr2r( sts[0]->hLPDmem->old_exc_flt, sts[1]->hLPDmem->old_exc_flt, L_EXC_MEM ); - } - mvr2r( sts[0]->lsf_old, sts[1]->lsf_old, M ); - mvr2r( sts[0]->lsp_old, sts[1]->lsp_old, M ); - mvr2r( sts[0]->lsf_old1, sts[1]->lsf_old1, M ); - mvr2r( sts[0]->lsp_old1, sts[1]->lsp_old1, M ); - - sts[1]->GSC_noisy_speech = 0; - if ( hCPE->element_mode == IVAS_CPE_MDCT ) - { - /* cross-fade overlap region of DFT Stereo downmix and original stereo channels */ - tmpF = 1.f / sts[0]->encoderLookahead_FB; - for ( i = 0; i < sts[0]->encoderLookahead_FB; i++ ) - { - sts[1]->input[-sts[0]->encoderLookahead_FB + i] = ( ( sts[0]->encoderLookahead_FB - i ) * sts[0]->input[-sts[0]->encoderLookahead_FB + i] + i * sts[1]->input[-sts[0]->encoderLookahead_FB + i] ) * tmpF; - sts[0]->input[-sts[0]->encoderLookahead_FB + i] = ( ( sts[0]->encoderLookahead_FB - i ) * sts[0]->input[-sts[0]->encoderLookahead_FB + i] + i * sts[1]->input[-2 * sts[0]->encoderLookahead_FB + i] ) * tmpF; - } - /* restore continuous signal in right channel (part of old_output was used to store original left channel) */ - mvr2r( sts[0]->input - sts[0]->hTcxEnc->L_frameTCX, sts[1]->input - sts[0]->hTcxEnc->L_frameTCX, sts[0]->hTcxEnc->L_frameTCX - sts[0]->encoderLookahead_FB ); - - sts[1]->last_core = sts[0]->last_core; - sts[1]->last_coder_type = sts[0]->last_coder_type; - sts[1]->last_bwidth = sts[0]->last_bwidth; - } - } - else if ( hCPE->element_mode == IVAS_CPE_TD && hCPE->last_element_mode == IVAS_CPE_MDCT ) - { - set_f( sts[0]->hLPDmem->old_exc_flt, 0.0f, L_EXC_MEM ); - set_f( sts[1]->hLPDmem->old_exc_flt, 0.0f, L_EXC_MEM ); - } - - /* TD/DFT -> MDCT stereo switching (there is no TCX in the TD stereo secondary channel, or DFT stereo) */ - if ( hCPE->element_mode == IVAS_CPE_MDCT && hCPE->last_element_mode != IVAS_CPE_MDCT ) - { - sts[1]->hTcxCfg->last_aldo = sts[0]->hTcxCfg->last_aldo; - sts[1]->hTcxCfg->tcx_curr_overlap_mode = sts[0]->hTcxCfg->tcx_curr_overlap_mode; - } - - return; -} -#endif diff --git a/lib_enc/ivas_stereo_td_analysis.c b/lib_enc/ivas_stereo_td_analysis.c index 15fe8860a..fdf53370e 100644 --- a/lib_enc/ivas_stereo_td_analysis.c +++ b/lib_enc/ivas_stereo_td_analysis.c @@ -41,37 +41,27 @@ #include "ivas_cnst.h" #include "rom_enc.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED #define RMS_MIN_FX_Q20 ( 1572864000 ) /* 1500 in Q20 */ /* Minimum energy for ratio index*/ #define RMS_MIN2_FX_Q21 ( 2097152000 ) /* 1000 in Q21 */ /* Minimum energy for LR encoding*/ #define CORR_THRES_FX_Q15 ( 31130 ) /* 0.95f in Q15 */ /* Maximal open loop correlation */ #define DT_ENER_THR_FX_Q16 ( 13107200 ) /* 200 in Q16 */ /* Energy variation threshold */ -#endif -#define RMS_MIN 1500 /* Minimum energy for ratio index*/ -#define RMS_MIN2 1000 /* Minimum energy for LR encoding*/ -#define CORR_THRES 0.95f /* Maximal open loop correlation */ -#ifdef IVAS_FLOAT_FIXED +#define RMS_MIN 1500 /* Minimum energy for ratio index*/ +#define RMS_MIN2 1000 /* Minimum energy for LR encoding*/ +#define CORR_THRES 0.95f /* Maximal open loop correlation */ #define RMS_MIN_Q16 98304000 /* 1500 in Q16 */ /* Minimum energy for ratio index*/ #define RMS_MIN2_Q16 65536000 /* 1000 in Q16 */ /* Minimum energy for LR encoding*/ #define CORR_THRES_Q15 31130 /* Maximal open loop correlation */ -#endif -#ifndef IVAS_FLOAT_FIXED -#define DT_ENER_THR 200 /* Energy variation threshold */ -#endif -#ifdef IVAS_FLOAT_FIXED #define ALP_REF_FX_Q31 ( 1717986918 ) /* 0.8f in Q31 */ /* smoothing factor */ #define BET_REF_FX_Q31 ( ONE_IN_Q31 - ALP_REF_FX_Q31 ) @@ -80,36 +70,17 @@ #define ALP2_FX_Q31 ( 429496729 ) /* 0.2f in Q31 */ /* smoothing factor in case of correlation are going in different directions in SM mode*/ #define BET2_FX_Q31 ( ONE_IN_Q31 - ALP2_FX_Q31 ) /* increase the update rate in SM mode*/ -#else -#define ALP_REF 0.8f /* smoothing factor */ -#define BET_REF ( 1.0f - ALP_REF ) - -#define ALP1 0.5f /* smoothing factor in case of correlation are going in different directions */ -#define BET1 ( 1.0f - ALP1 ) /* increase the update rate */ - -#define ALP2 0.2f /* smoothing factor in case of correlation are going in different directions in SM mode*/ -#define BET2 ( 1.0f - ALP2 ) /* increase the update rate in SM mode*/ -#endif #define RATIO_MAX 1.5f /* Maximum correlation ratio */ -#ifdef IVAS_FLOAT_FIXED #define RATIO_MAX_FX_Q30 ( 1610612736 ) /* 1.5f in Q30 */ /* Maximum correlation ratio */ #define RATIO_MAX_FX_Q24 ( 2516582 ) /* 1.5f in Q24 */ /* Maximum correlation ratio */ #define RATIO_MAX_FX_Q23 ( 1258291 ) /* 1.5f in Q23 */ /* Maximum correlation ratio */ -#endif -#ifdef IVAS_FLOAT_FIXED #define LIMIT_ADAP_FAC_FX_Q16 ( 9830 ) /* 0.15f in Q16 */ #define MIN_ADAP_FAC_FX_Q16 ( 6554 ) /*0.1f in Q16*/ #define M_ADAP_FX_Q31 ( 1932735 ) /* 0.0009f in Q31 */ #define B_ADAP_FX_Q16 ( 10486 ) /* 0.16f in Q16 */ -#else -#define LIMIT_ADAP_FAC 0.15f -#define MIN_ADAP_FAC 0.1f -#define M_ADAP 0.0009f -#define B_ADAP 0.16f -#endif #define PC_LIMIT 64 #define RATIO_PG_HR 0.94f @@ -127,27 +98,22 @@ #define EUCLDST2 0.08f #define EUCLDST2_FX 171798692 // 0.08f in Q31 -#define RMS_THR 100 -#ifdef IVAS_FLOAT_FIXED -#define RMS_THR_Q16 ( 6553600 ) -#endif +#define RMS_THR 100 +#define RMS_THR_Q16 ( 6553600 ) #define RATIO_PG_LRTD 0.96f #define RATIO_PG_LRTD_FX 2061584302 // 0.96f in Q31 #define IVAS_BRATE_OMASA_STEREO_SW_THR 15000 -#ifdef IVAS_FLOAT_FIXED // #define ONE_BY_100_Q15 ( 328 ) #define ONE_BY_100_Q31 ( 21474896 ) #define TEN_IN_Q27 ( 1342177280 ) /* 10.0f in Q27 */ #define TEN_IN_Q16 ( 655360 ) /* 10.0f in Q16 */ -#endif /*-------------------------------------------------------------------* * Local function prototypes *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 stereo_tdm_ener_analysis_SM_fx( CPE_ENC_HANDLE hCPE, Encoder_State **sts, const Word16 input_frame, Word16 *tdm_SM_flag ); static void Get_corr_n_fx( const Word16 L[], const Word16 R[], Word32 *ic_Lm, Word16 *q_ic_Lm, Word32 *ic_Rm, Word16 *q_ic_Rm, const Word16 len, Word32 *es_em, const Word16 tdm_SM_calc_flag ); @@ -165,32 +131,12 @@ static Word16 Get_dt_lt_ener_fx( CPE_ENC_HANDLE hCPE, const Word16 IsSideMono, c static void NOOP_decision_fx( CPE_ENC_HANDLE hCPE, const Word16 tdm_NOOP_flag_loc, const Word16 tmp_SM_flag, const Word32 rms_L, const Word16 q_rms_L, const Word32 rms_R, const Word16 q_rms_R, Word16 *tdm_SM_flag_loc ); static Word32 Comp_diff_lt_corr_fx( CPE_ENC_HANDLE hCPE, const Word16 IsSideMono, const Word32 rms_L, const Word16 q_rms_L, const Word32 rms_R, const Word16 q_rms_R, const Word32 ener_L_dt, const Word32 ener_R_dt, Word32 corr_LM, Word16 q_corr_LM, Word32 corr_RM, Word16 q_corr_RM, const Word32 tdm_lt_rms_L, const Word32 tdm_lt_rms_R, Word32 *tdm_lt_corr_LM, Word32 *tdm_lt_corr_RM, Word32 *tdm_last_diff_lt_corr, Word16 *q_tdm_last_diff_lt_corr, Word32 *inst_ratio_L_out, Word32 *diff_lt_corr, Word16 *q_d_lt_corr_raw ); -#else -static int16_t stereo_tdm_ener_analysis_SM( CPE_ENC_HANDLE hCPE, Encoder_State **sts, const int16_t input_frame, int16_t *tdm_SM_flag ); - -static void Get_corr_n( const float L[], const float R[], float *ic_Lm, float *ic_Rm, const int16_t len, float *es_em, const int16_t tdm_SM_calc_flag ); - -static int16_t stereo_smooth_LR_transition( int16_t *tdm_prev_stable_idx, int16_t *tdm_ratio_transition_mov_flag, int16_t tdm_last_ratio_idx, int16_t *tdm_prev_desired_idx, int16_t *tdm_ratio_transition_cnt, const int16_t tdm_SM_flag, int16_t desired_idx ); - -static int16_t limit_idx_Dwnmix( const int16_t idx_in, const int16_t unclr_decision, const int16_t inst_idx, const int16_t previous_idx, const int16_t tdm_last_LRTD_PriCh_cnt, const int16_t tdm_last_LRTD_frame_cnt ); - -static int16_t limit_idx_NoDwnmix( const int16_t idx_in, const int16_t side_can_change, const float d_lt_corr_raw ); - -static void Get_LR_rms( const float *Left_in, const float *Right_in, const int16_t input_frame, float *rms_L, float *rms_R ); - -static int16_t Get_dt_lt_ener( CPE_ENC_HANDLE hCPE, const int16_t IsSideMono, const int16_t input_frame, const int16_t tdm_last_SM_flag, const float rms_L, const float rms_R, float *tdm_lt_rms_L, float *tdm_lt_rms_R, float *tdm_last_ener_lt_L, float *tdm_last_ener_lt_R, float *tdm_LT_es_em, int16_t *tdm_hyst_cnt, int16_t *tdm_NOOP_SM_flag_loc, float *ener_R_dt, float *ener_L_dt, float *corr_LM, float *corr_RM ); - -static void NOOP_decision( CPE_ENC_HANDLE hCPE, const int16_t tdm_NOOP_flag_loc, const int16_t tmp_SM_flag, const float rms_L, const float rms_R, int16_t *tdm_SM_flag_loc ); - -static float Comp_diff_lt_corr( CPE_ENC_HANDLE hCPE, const int16_t IsSideMono, const float rms_L, const float rms_R, const float ener_L_dt, const float ener_R_dt, float corr_LM, float corr_RM, const float tdm_lt_rms_L, const float tdm_lt_rms_R, float *tdm_lt_corr_LM, float *tdm_lt_corr_RM, float *tdm_last_diff_lt_corr, float *inst_ratio_L_out, float *diff_lt_corr ); -#endif /*-------------------------------------------------------------------* * Function stereo_tdm_ener_analysis() * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 stereo_tdm_ener_analysis_fx( const Word16 ivas_format, /* i : IVAS format */ CPE_ENC_HANDLE hCPE, /* i : CPE structure */ @@ -790,831 +736,249 @@ Word16 stereo_tdm_ener_analysis_fx( return idx; } -#else -int16_t stereo_tdm_ener_analysis( - const int16_t ivas_format, /* i : IVAS format */ - CPE_ENC_HANDLE hCPE, /* i : CPE structure */ - const int16_t input_frame, /* i : Number of samples */ - int16_t *tdm_SM_or_LRTD_Pri, /* o : channel combination scheme flag in TD stereo OR LRTD primary channel */ - int16_t *tdm_ratio_idx_SM /* o : TDM ratio index for SM mode */ -) + +/*-------------------------------------------------------------------* + * Function Get_LR_rms_fx() + * + * Get current frame left and right rms values + *-------------------------------------------------------------------*/ + +static void Get_LR_rms_fx( + const Word16 *Left_in, + const Word16 *Right_in, + const Word16 input_frame, + Word32 *rms_L, + Word16 *q_rms_L, + Word32 *rms_R, + Word16 *q_rms_R ) { - float rms_R, rms_L; - float corr_RM, corr_LM, diff_lt_corr = 0, ratio_L, dist; - int16_t i, side_can_change; - int16_t idx, tdm_SM_flag_loc; - int16_t tmp_SM_flag; - float ener_R_dt, ener_L_dt; - int16_t desired_idx; - float rms_thd; - int16_t tdm_NOOP_flag_loc, tdm_NOOP_flag; - STEREO_TD_ENC_DATA_HANDLE hStereoTD; - Encoder_State **sts; - const float *Left_in, *Right_in; - float d_lt_corr_raw; - float inst_ratio_L = 0; - int16_t tdm_LRTD_pri_side; + Word32 ener_l, ener_r; + Word32 ener_l_tmp, ener_r_tmp; + Word16 guard_bits; + Word64 W_ener_l_tmp, W_ener_r_tmp; + Word16 i; + Word16 exp_out_l, exp_out_r, exp_diff; - hStereoTD = hCPE->hStereoTD; - sts = hCPE->hCoreCoder; - Left_in = sts[0]->input; /* Left channel */ - Right_in = sts[1]->input; /* Right channel */ + W_ener_l_tmp = 0; + move64(); + W_ener_r_tmp = 0; + move64(); + ener_l = ONE_BY_100_Q31; + move32(); + ener_r = ONE_BY_100_Q31; + move32(); - desired_idx = 0; + guard_bits = sub( 32, find_guarded_bits_fx( input_frame ) ); + FOR( i = 0; i < input_frame; i++ ) + { + W_ener_l_tmp = W_mac0_16_16( W_ener_l_tmp, Left_in[i], Left_in[i] ); // Q0 + W_ener_r_tmp = W_mac0_16_16( W_ener_r_tmp, Right_in[i], Right_in[i] ); // Q0 + } + /* Scaling back to the original proposal */ + ener_l_tmp = W_extract_h( W_shl( W_ener_l_tmp, guard_bits ) ); // guard_bits - 32 + ener_r_tmp = W_extract_h( W_shl( W_ener_r_tmp, guard_bits ) ); // guard_bits - 32 - /*----------------------------------------------------------------* - * Compute L and R energy and Long term RMS of each channel - *----------------------------------------------------------------*/ + ener_l = BASOP_Util_Add_Mant32Exp( ener_l, 0, ener_l_tmp, sub( Q31, sub( guard_bits, 32 ) ), &exp_out_l ); + ener_r = BASOP_Util_Add_Mant32Exp( ener_r, 0, ener_r_tmp, sub( Q31, sub( guard_bits, 32 ) ), &exp_out_r ); - Get_LR_rms( Left_in, Right_in, input_frame, &rms_L, &rms_R ); + ener_l_tmp = BASOP_Util_Divide3232_Scale( ener_l, input_frame, &exp_diff ); + exp_out_l = sub( add( exp_diff, exp_out_l ), Q15 ); + ener_r_tmp = BASOP_Util_Divide3232_Scale( ener_r, input_frame, &exp_diff ); + exp_out_r = sub( add( exp_diff, exp_out_r ), Q15 ); - /*----------------------------------------------------------------* - * Compute the 1st order energy difference difference - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *----------------------------------------------------------------*/ + *rms_L = Sqrt32( ener_l_tmp, &exp_out_l ); // Q31 - exp_out_l + move32(); + *q_rms_L = sub( Q31, exp_out_l ); + move16(); + *rms_R = Sqrt32( ener_r_tmp, &exp_out_r ); // Q31 - exp_out_r + move32(); + *q_rms_R = sub( Q31, exp_out_r ); + move16(); - tdm_SM_flag_loc = hStereoTD->tdm_last_SM_flag; + return; +} - tmp_SM_flag = Get_dt_lt_ener( hCPE, 0, input_frame, hStereoTD->tdm_last_SM_flag, rms_L, rms_R, &hStereoTD->tdm_lt_rms_L, &hStereoTD->tdm_lt_rms_R, &hStereoTD->tdm_last_ener_lt_L, &hStereoTD->tdm_last_ener_lt_R, - &hStereoTD->tdm_LT_es_em, &hStereoTD->tdm_hyst_cnt, &tdm_NOOP_flag_loc, &ener_R_dt, &ener_L_dt, &corr_LM, &corr_RM ); - hStereoTD->tdm_SM_reset_flag = 0; +/*-------------------------------------------------------------------* + * Function Get_dt_lt_ener_fx() + * + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *-------------------------------------------------------------------*/ - /*----------------------------------------------------------------* - * Check if the signal has Near Out Of Phase characteristics - * and trigger side/mono configuration if needed - *----------------------------------------------------------------*/ +static Word16 Get_dt_lt_ener_fx( + CPE_ENC_HANDLE hCPE, + const Word16 IsSideMono, + const Word16 input_frame, + const Word16 tdm_last_SM_flag, + const Word32 rms_L, + const Word16 q_rms_L, + const Word32 rms_R, + const Word16 q_rms_R, + Word32 *tdm_lt_rms_L, + Word32 *tdm_lt_rms_R, + Word32 *tdm_last_ener_lt_L, + Word32 *tdm_last_ener_lt_R, + Word32 *tdm_LT_es_em, + Word16 *tdm_hyst_cnt, + Word16 *tdm_NOOP_SM_flag_loc, + Word32 *ener_R_dt, + Word32 *ener_L_dt, + Word32 *corr_LM, + Word16 *q_corr_LM, + Word32 *corr_RM, + Word16 *q_corr_RM ) +{ + Encoder_State **sts; + Word16 *Left_in_fx, *Right_in_fx; + Word32 es_em_fx; + Word16 tmp_SM_flag, tdm_SM_flag_loc; + Word32 L_tmp, L_tmp1; + Word16 exp_diff, tmp; - NOOP_decision( hCPE, tdm_NOOP_flag_loc, tmp_SM_flag, rms_L, rms_R, &tdm_SM_flag_loc ); + sts = hCPE->hCoreCoder; - /*----------------------------------------------------------------* - * Adjust stereo downmixing adaptation rate factor - * in function of the signal energy. If signal energy is low, - * adaptation rate factor is lower. This prevent stereo image - * move on speech offset - *----------------------------------------------------------------*/ + Left_in_fx = sts[0]->input_fx; /* Left channel */ + Right_in_fx = sts[1]->input_fx; /* Right channel */ - d_lt_corr_raw = Comp_diff_lt_corr( hCPE, 0, rms_L, rms_R, ener_L_dt, ener_R_dt, corr_LM, corr_RM, hStereoTD->tdm_lt_rms_L, hStereoTD->tdm_lt_rms_R, &hStereoTD->tdm_lt_corr_LM, - &hStereoTD->tdm_lt_corr_RM, &hStereoTD->tdm_last_diff_lt_corr, &inst_ratio_L, &diff_lt_corr ); + tmp = sub( getScaleFactor16( sts[0]->input_fx, input_frame ), 1 ); + Scale_sig( sts[0]->input_fx, input_frame, tmp ); + sts[0]->q_inp = add( tmp, sts[0]->q_inp ); + move16(); - /*----------------------------------------------------------------* - * UNCLR classifier (detection of uncorrelated L and R channels) - * Xtalk classifier (detection of cross-talk L and R channels) - *----------------------------------------------------------------*/ + tmp = getScaleFactor16( sts[1]->input_fx, input_frame ); + Scale_sig( sts[1]->input_fx, input_frame, tmp ); + sts[1]->q_inp = add( tmp, sts[1]->q_inp ); + move16(); - unclr_classifier_td( hCPE ); - xtalk_classifier_td( hCPE ); + Scale_sig( sts[0]->input_fx, input_frame, sub( s_min( sts[0]->q_inp, sts[1]->q_inp ), sts[0]->q_inp ) ); + Scale_sig( sts[1]->input_fx, input_frame, sub( s_min( sts[0]->q_inp, sts[1]->q_inp ), sts[1]->q_inp ) ); + sts[1]->q_inp = s_min( sts[0]->q_inp, sts[1]->q_inp ); + move16(); + sts[0]->q_inp = sts[1]->q_inp; + move16(); - /* switch to LRTD on cross-talk segments where two speakers are weakly correlated */ - hStereoTD->prev_fr_LRTD_TD_dec = hCPE->hStereoClassif->lrtd_mode; + tdm_SM_flag_loc = tdm_last_SM_flag; + move16(); + + test(); + IF( NE_16( hCPE->last_element_mode, IVAS_CPE_TD ) && IsSideMono == 0 ) /* last coding mode not TD and normal mono/side case, quick update of lt energy */ + { + *tdm_lt_rms_L = L_shl( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, rms_L ), sub( Q16, q_rms_L ) ); // (Q31, q_rms_L) -> q_rms_L -> Q16 + move32(); + *tdm_lt_rms_R = L_shl( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, rms_R ), sub( Q16, q_rms_R ) ); // (Q31, q_rms_R) -> q_rms_R -> Q16 + move32(); + L_tmp = Mpy_32_16_1( 1932735282 /* 0.9f in Q31 */, sts[0]->hNoiseEst->Etot_last_fx ); //(Q31, Q8) -> Q24 + sts[1]->hNoiseEst->Etot_last_fx = extract_h( L_tmp ); // (Q24 >> Q16) -> Q8 + sts[1]->hVAD->hangover_cnt = 0; + move16(); + } + ELSE + { + L_tmp = Mpy_32_32( 1288490188 /* 0.6f in Q31 */, *tdm_lt_rms_L ); // Q16 + L_tmp1 = Mpy_32_32( 858993459 /* 0.4f in Q31 */, rms_L ); // q_rms_L + *tdm_lt_rms_L = BASOP_Util_Add_Mant32Exp( L_tmp, Q31 - Q16, L_tmp1, sub( Q31, q_rms_L ), &exp_diff ); //(Q31 - exp_diff) + move32(); + *tdm_lt_rms_L = L_shl( *tdm_lt_rms_L, sub( Q16, sub( Q31, exp_diff ) ) ); // Q16 + move32(); + L_tmp = Mpy_32_32( 1288490188 /* 0.6f in Q31 */, *tdm_lt_rms_R ); // Q16 + L_tmp1 = Mpy_32_32( 858993459 /* 0.4f in Q31 */, rms_R ); // q_rms_L + *tdm_lt_rms_R = BASOP_Util_Add_Mant32Exp( L_tmp, Q31 - Q16, L_tmp1, sub( Q31, q_rms_R ), &exp_diff ); //(Q31 - exp_diff) + move32(); + *tdm_lt_rms_R = L_shl( *tdm_lt_rms_R, sub( Q16, sub( Q31, exp_diff ) ) ); // Q16 + move32(); + } /*----------------------------------------------------------------* - * When the energies of channels are low enough, compute the ratio - * of L and R needed to create new mono/side signals + * Compute the 1st order energy difference difference *----------------------------------------------------------------*/ - if ( ivas_format == MASA_ISM_FORMAT ) - { + *ener_R_dt = L_sub( *tdm_lt_rms_R, *tdm_last_ener_lt_R ); // Q16 + move32(); + *tdm_last_ener_lt_R = *tdm_lt_rms_R; // Q16 + move32(); - if ( ( hCPE->hStereoClassif->lrtd_mode == 1 || hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 1 ) && ( hCPE->element_brate - 50 * FRAMES_PER_SEC + hCPE->brate_surplus + hCPE->brate_surplus < IVAS_BRATE_OMASA_STEREO_SW_THR ) ) - { - hStereoTD->prev_fr_LRTD_TD_dec = 0; - } - } + *ener_L_dt = L_sub( *tdm_lt_rms_L, *tdm_last_ener_lt_L ); // Q16 + move32(); + *tdm_last_ener_lt_L = *tdm_lt_rms_L; // Q16 + move32(); - rms_thd = RMS_MIN; - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - rms_thd *= .25f; - if ( hStereoTD->tdm_lt_rms_L <= 75 || hStereoTD->tdm_lt_rms_R <= 75 /*|| sts[0]->last_coder_type == TRANSITION */ ) - { - rms_thd *= .03125f; - } - else if ( sts[0]->hVAD->hangover_cnt >= 8 && sts[1]->hVAD->hangover_cnt >= 8 ) - { - rms_thd /= .2f; - } + /*----------------------------------------------------------------* + * Compute the gain of L&R channel compared to mono + * - estimate the long term evolution of the L to Mono gain + * - estimate the long term evolution of the R to Mono gain + * - estimate the long term difference between the long term + * - evolution of the L and R to Mono gain + *----------------------------------------------------------------*/ - /* Overwrite the LR decision flag in case the signals is already considered as S/M or when the signal is very similar between left and right channel */ - if ( tdm_SM_flag_loc == 1 ) - { - hStereoTD->prev_fr_LRTD_TD_dec = 0; - } - else if ( hStereoTD->tdm_LRTD_flag == 1 && hStereoTD->tdm_FD2LRTD_SW_cnt > 10 && - ( hCPE->hStereoClassif->vad_flag_glob == 0 || ( hCPE->hStereoClassif->unclr_decision == 0 && ( hCPE->hStereoClassif->xtalk_score < -0.8f || hCPE->hStereoClassif->xtalk_wscore < -0.13f ) ) || - ( hCPE->hStereoClassif->unclr_decision == 1 && sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS && fabsf( hCPE->hStereoClassif->unclr_wscore ) < 0.005f ) ) ) - { - /* This forces the LRTD to switch to TD when inactive content happens on both channel */ - hStereoTD->prev_fr_LRTD_TD_dec = 0; - } - else if ( hStereoTD->tdm_LRTD_flag == 0 && - ( hCPE->hStereoClassif->vad_flag_glob == 0 || ( hCPE->hStereoClassif->unclr_decision == 0 && ( hCPE->hStereoClassif->xtalk_score <= 0.0f || hCPE->hStereoClassif->xtalk_wscore <= 0.1f ) ) || - ( hCPE->hStereoClassif->unclr_decision == 1 && ( sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS ) && fabsf( hCPE->hStereoClassif->unclr_wscore ) < 0.025f ) - /* (sts[0]->last_clas == UNVOICED_CLAS && sts[1]->last_clas == UNVOICED_CLAS && hCPE->hStereoClassif->xtalk_wscore <= 0.0f)*/ ) ) - { - /* This forces the LRTD to switch to TD when inactive content happens on both channel */ - hStereoTD->prev_fr_LRTD_TD_dec = 0; - } - } + Get_corr_n_fx( Left_in_fx, Right_in_fx, corr_LM, q_corr_LM, corr_RM, q_corr_RM, input_frame, &es_em_fx, IsSideMono ); - side_can_change = 0; + hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM] = BASOP_Util_Add_Mant32Exp( *corr_LM, sub( Q31, *q_corr_LM ), L_negate( *corr_RM ), sub( Q31, *q_corr_RM ), &exp_diff ); + move32(); + hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM] = L_shl( hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM], sub( Q15, sub( Q31, exp_diff ) ) ); // Q15 + move32(); - /* update LRTD->DFT stereo hangover counters */ - if ( hStereoTD->prev_fr_LRTD_TD_dec == 1 ) + IF( sts[0]->hVAD->hangover_cnt != 0 ) { - hStereoTD->tdm_last_LRTD_frame_cnt = 0; + *tdm_LT_es_em = Mpy_32_32( 1932735282 /* 0.9f in Q31 */, *tdm_LT_es_em ); // Q21 + move32(); } - else + ELSE { - hStereoTD->tdm_last_LRTD_frame_cnt++; - hStereoTD->tdm_last_LRTD_frame_cnt = min( hStereoTD->tdm_last_LRTD_frame_cnt, 100 ); + *tdm_LT_es_em = L_add( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, *tdm_LT_es_em ), Mpy_32_32( 214748365 /* 0.1f in Q31 */, es_em_fx ) ); // Q21 + move32(); } - if ( hCPE->last_element_mode != IVAS_CPE_TD ) + hCPE->hStereoClassif->xtalk_fv_fx[E_tdm_LT_es_em] = L_shr( *tdm_LT_es_em, 6 ); // Q15 + move32(); + + tmp_SM_flag = 0; + move16(); + if ( LT_16( s_min( sts[0]->old_corr_fx, sts[1]->old_corr_fx ), 27853 /* 0.85f in Q15 */ ) && LT_16( s_max( sts[0]->old_corr_fx, sts[1]->old_corr_fx ), 30147 /* 0.92f in Q15 */ ) && + ( GT_32( *tdm_LT_es_em, ONE_IN_Q22 /* 2.0f in Q21 */ ) || GT_32( es_em_fx, 5242880 /* 2.5f in Q21 */ ) ) && ( LE_16( sts[0]->hVAD->hangover_cnt, 1 ) && LE_16( sts[1]->hVAD->hangover_cnt, 3 ) && sts[0]->tdm_LRTD_flag == 0 ) ) { - side_can_change = 1; + tmp_SM_flag = 1; + move16(); + } + if ( IsSideMono == 0 ) + { + *tdm_NOOP_SM_flag_loc = tdm_SM_flag_loc; + move16(); } - if ( hStereoTD->prev_fr_LRTD_TD_dec == 1 && side_can_change == 0 ) + IF( NE_16( tmp_SM_flag, tdm_SM_flag_loc ) ) { - if ( ( hStereoTD->tdm_lt_rms_L <= rms_thd && hStereoTD->tdm_lt_rms_R <= 2 * rms_thd ) || - ( hStereoTD->tdm_lt_rms_R <= rms_thd && hStereoTD->tdm_lt_rms_L <= 2 * rms_thd ) || - ( sts[0]->hVAD->hangover_cnt != 0 && sts[1]->hNoiseEst->Etot_last < 12 ) || - ( sts[1]->hVAD->hangover_cnt != 0 && sts[0]->hNoiseEst->Etot_last < 12 ) || - ( sts[0]->hSpMusClas->past_dec[0] != sts[1]->hSpMusClas->past_dec[0] ) ) - { - if ( ( ( rms_L < RMS_THR && rms_R < RMS_THR && fabsf( rms_R - rms_L ) < RMS_THR / 2.0f && fabsf( d_lt_corr_raw ) > 0.3f ) || - ( fabsf( sts[0]->old_corr - sts[1]->old_corr ) < 0.15f && sts[0]->old_corr > 0.7f && sts[0]->old_corr < 0.85f && fabsf( rms_L - rms_R ) < rms_thd && fabsf( d_lt_corr_raw ) > 0.3f ) ) /* Both channels are low energy, clean background switching is allowed */ - ) - { - side_can_change = 1; - } - } - } - else if ( side_can_change == 0 ) /*if( hStereoTD->prev_fr_LRTD_TD_dec == 0 )*/ - { - if ( ( ( sts[0]->old_corr < CORR_THRES && sts[1]->old_corr < CORR_THRES ) || ( hStereoTD->tdm_lt_rms_L <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R <= RMS_MIN2 ) ) && - ( ( ( hStereoTD->tdm_lt_rms_L <= rms_thd && hStereoTD->tdm_lt_rms_R <= 2 * rms_thd ) || ( hStereoTD->tdm_lt_rms_R <= rms_thd && hStereoTD->tdm_lt_rms_L <= 2 * rms_thd ) ) || - ( hCPE->hStereoClassif->lrtd_mode == 1 && ( sts[0]->tdm_LRTD_flag == 0 || ( sts[0]->tdm_LRTD_flag == 1 && ( ( rms_L < 2 * rms_thd && rms_R < 2 * rms_thd ) || ( sts[0]->hSpMusClas->past_dec[0] != sts[1]->hSpMusClas->past_dec[0] ) ) ) ) ) /* Even if the UNCLR is set to 1, the content should be encoded with TD, lower swichting requierment */ - ) ) - { - side_can_change = 1; - } - } - - if ( hCPE->hStereoClassif->xtalk_wscore >= 0.05f && hStereoTD->prev_fr_LRTD_TD_dec == 0 && hCPE->hStereoClassif->lrtd_mode == 1 ) - { - side_can_change = 0; - } - if ( hCPE->last_element_mode == IVAS_CPE_MDCT || hStereoTD->flag_skip_DMX == 1 ) - { - desired_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_LEFT_IS_PRIM; - ratio_L = 1.0f; - hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_ratio_transition_mov_flag = 0; - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_ratio_transition_cnt = 0; - idx = TDM_NQ; /* Reserved quantizer index for special case */ - } - else if ( side_can_change || sts[1]->ini_frame <= 1 ) - { - ratio_L = max( diff_lt_corr, -RATIO_MAX ); - ratio_L = min( ratio_L, RATIO_MAX ); - ratio_L = 0.667f * ratio_L + 1.0f; - - if ( hCPE->hStereoClassif->lrtd_mode == 1 && ( hCPE->last_element_mode != IVAS_CPE_TD || hStereoTD->tdm_FD2LRTD_SW_cnt < 4 ) ) - { - ratio_L = hCPE->hStereoTD->tdm_last_ratio; /* note: the last_ratio is set in before in stereo_set_tdm() */ - } - else - { - ratio_L = ( 1.0f - cosf( EVS_PI * ratio_L / 2.0f ) ) / 2.0f; - } - - if ( hStereoTD->tdm_LRTD_flag == 1 || ( hCPE->hStereoClassif->lrtd_mode == 1 && ( hCPE->hStereoClassif->prev_lrtd_mode == 0 || abs( hCPE->hStereoTCA->indx_ica_gD - 20 ) > 2 ) ) ) - { - if ( ratio_L >= 0.53f ) /* small hysteresis is used to prevent undesired switching during inactive segment */ - { - desired_idx = LRTD_STEREO_LEFT_IS_PRIM - 1; - } - else if ( ratio_L < 0.47f ) - { - desired_idx = LRTD_STEREO_RIGHT_IS_PRIM + 1; - } - else if ( rms_L - rms_R > 10 ) - { - desired_idx = LRTD_STEREO_LEFT_IS_PRIM - 1; - } - else - { - desired_idx = LRTD_STEREO_RIGHT_IS_PRIM + 1; - } - - if ( desired_idx != hStereoTD->tdm_prev_desired_idx && hStereoTD->tdm_last_LRTD_frame_cnt == 1 && sts[0]->last_coder_type <= UNVOICED ) /* TD transtionning to FD, we don't want an inversion of channels on the first transition frame */ - { - desired_idx = hStereoTD->tdm_prev_desired_idx; - } - else - { - hStereoTD->tdm_prev_desired_idx = desired_idx; - } - idx = desired_idx; - } - else - { - if ( hCPE->element_brate >= IVAS_48k && sts[0]->hVAD->hangover_cnt != 0 && max( hStereoTD->tdm_lt_rms_L, hStereoTD->tdm_lt_rms_R ) < 512.0f ) - { - ratio_L = check_bounds( ratio_L, 0.3f, 0.7f ); - } - - if ( ( hCPE->hStereoTCA->instTargetGain > 1.2f || hCPE->hStereoTCA->targetGain > 1.0f ) && ratio_L < 0.4f ) - { - ratio_L = 0.4f; - } - else if ( ( hCPE->hStereoTCA->instTargetGain < 0.8f || hCPE->hStereoTCA->targetGain < 1.0f ) && ratio_L > 0.6f ) - { - ratio_L = 0.6f; - } - - dist = fabsf( ratio_L - tdm_ratio_tabl[0] ); - - desired_idx = 0; - for ( i = 1; i < TDM_NQ; i++ ) - { - if ( fabsf( ratio_L - tdm_ratio_tabl[i] ) <= dist ) - { - dist = fabsf( ratio_L - tdm_ratio_tabl[i] ); - desired_idx = i; - } - } - - idx = stereo_smooth_LR_transition( &hStereoTD->tdm_prev_stable_idx, &hStereoTD->tdm_ratio_transition_mov_flag, hStereoTD->tdm_last_ratio_idx, &hStereoTD->tdm_prev_desired_idx, &hStereoTD->tdm_ratio_transition_cnt, tdm_SM_flag_loc, desired_idx ); - - /* Change the switching level in case of dual mono (in case the scenario still accept left right switching */ - /* This logic is needed in case the content is exactly the same in the 2 channel and it is expected to get back to LRTD, to prevent the secondary channel to be completely empty */ - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - if ( idx <= LRTD_STEREO_MID_IS_PRIM ) - { - idx = min( idx, LRTD_STEREO_MID_IS_PRIM - 1 ); - } - else - { - idx = max( idx, LRTD_STEREO_MID_IS_PRIM + 1 ); - } - - hStereoTD->tdm_prev_desired_idx = idx; - } - /* 0 and 30 are reserved to signal L-R only coding */ - } - } - else - { - idx = hStereoTD->tdm_last_ratio_idx; - } - - hStereoTD->tdm_inst_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; - tdm_LRTD_pri_side = -1; - if ( hStereoTD->tdm_FD2LRTD_SW_cnt < 5 ) - { - desired_idx = 15; - } - else - { - desired_idx = 0; - dist = fabsf( inst_ratio_L - tdm_ratio_tabl[0] ); - - for ( i = 1; i < TDM_NQ; i++ ) - { - if ( fabsf( inst_ratio_L - tdm_ratio_tabl[i] ) <= dist ) - { - dist = fabsf( inst_ratio_L - tdm_ratio_tabl[i] ); - desired_idx = i; - } - } - } - - if ( ( sts[1]->lp_speech - sts[1]->lp_noise ) < 50.0f ) /* likely presence of noisy content */ - { - /* pointing in the right direction, inverse it else do nothing */ - if ( ( idx > LRTD_STEREO_MID_IS_PRIM && desired_idx > LRTD_STEREO_MID_IS_PRIM ) || ( idx < LRTD_STEREO_MID_IS_PRIM && desired_idx < LRTD_STEREO_MID_IS_PRIM ) ) - { - int16_t idx_offet; - idx_offet = 5; - if ( desired_idx > LRTD_STEREO_MID_IS_PRIM ) /* slightly Favor the 2nd channel */ - { - idx_offet *= -1; - } - desired_idx += idx_offet; - desired_idx = check_bounds_s( desired_idx, 0, 30 ); - } - } - - if ( sts[1]->clas != UNVOICED_CLAS || sts[0]->clas != UNVOICED_CLAS ) - { - desired_idx = check_bounds_s( desired_idx, 5, 25 ); - } - - hStereoTD->tdm_inst_ratio_idx = desired_idx; - if ( /*hCPE->last_element_mode == IVAS_CPE_MDCT ||*/ hStereoTD->flag_skip_DMX == 1 ) - { - /*force tdm_inst_ratio_idx to the reserved index */ - hStereoTD->tdm_inst_ratio_idx = idx; - tdm_LRTD_pri_side = 1; /* left channel */ - } - else if ( hStereoTD->tdm_LRTD_flag == 1 ) - { - idx = limit_idx_NoDwnmix( idx, side_can_change, d_lt_corr_raw ); - hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; - tdm_LRTD_pri_side = 0; /* right channel */ - if ( idx != LRTD_STEREO_RIGHT_IS_PRIM ) - { - tdm_LRTD_pri_side = 1; /* left channel */ - hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_RIGHT_IS_PRIM; - } - } - else - { - idx = limit_idx_Dwnmix( idx, ( hCPE->hStereoClassif->unclr_decision || ( sts[0]->flag_noisy_speech_snr == 1 && hCPE->hStereoClassif->xtalk_wscore > 0.1f ) ), desired_idx, hStereoTD->tdm_last_ratio_idx, hStereoTD->tdm_last_LRTD_PriCh_cnt, hStereoTD->tdm_last_LRTD_frame_cnt ); - } - - if ( abs( hStereoTD->tdm_last_ratio_idx - idx ) > LRTD_STEREO_MID_IS_PRIM ) - { - hStereoTD->tdm_last_LRTD_PriCh_cnt = 0; - } - else - { - hStereoTD->tdm_last_LRTD_PriCh_cnt++; - } - ratio_L = tdm_ratio_tabl[idx]; - - if ( hStereoTD->tdm_SM_modi_flag == 1 && hStereoTD->tdm_LRTD_flag == 0 ) - { - idx = (int16_t) ( ( hStereoTD->tdm_last_ratio_idx + ( LRTD_STEREO_MID_IS_PRIM + 1 ) ) * 0.5 ); - ratio_L = tdm_ratio_tabl[idx]; - } - - if ( ( hStereoTD->tdm_ratio_transition_mov_flag == 1 && hStereoTD->tdm_ratio_transition_cnt >= 31 ) || ( ( hStereoTD->tdm_last_SM_flag == tdm_SM_flag_loc ) && ( idx == hStereoTD->tdm_prev_stable_idx ) ) ) - { - hStereoTD->tdm_ratio_transition_cnt = 0; - hStereoTD->tdm_ratio_transition_mov_flag = 0; - } - - if ( hStereoTD->tdm_ratio_transition_mov_flag == 0 || tdm_SM_flag_loc == 0 ) - { - hStereoTD->tdm_prev_stable_idx = idx; - } - - /* NOOP ratio calculation */ - if ( tdm_SM_flag_loc ) - { - if ( hStereoTD->tdm_SM_reset_flag ) - { - hStereoTD->tdm_lt_corr_RM_SM = 0.01f; - hStereoTD->tdm_lt_corr_LM_SM = 0.01f; - hStereoTD->tdm_last_ratio_SM = hStereoTD->tdm_last_ratio; - hStereoTD->tdm_last_ratio_idx_SM = hStereoTD->tdm_last_ratio_idx; - hStereoTD->tdm_lt_rms_L_SM = 40.0f; - hStereoTD->tdm_lt_rms_R_SM = 40.0f; - hStereoTD->tdm_last_diff_lt_corr_SM = 0; - hStereoTD->tdm_last_ener_lt_R_SM = 0; - hStereoTD->tdm_last_ener_lt_L_SM = 0; - - hStereoTD->tdm_noop_mov_flag = 0; - hStereoTD->tdm_noop_cnt = 0; - hStereoTD->tdm_last_SM_flag_noop = 0; - hStereoTD->tdm_prev_stable_idx_SM = 0; - hStereoTD->tdm_prev_desired_idx_SM = 0; - hStereoTD->tdm_LT_es_em_SM = 0.1f; - hStereoTD->tdm_hyst_cnt_SM = 0; - } - - *tdm_ratio_idx_SM = stereo_tdm_ener_analysis_SM( hCPE, sts, input_frame, &tdm_NOOP_flag ); - } - else - { - *tdm_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; - tdm_NOOP_flag = 1; - } - - sts[0]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; - sts[1]->tdm_LRTD_flag = hStereoTD->tdm_LRTD_flag; - - /* set channel combination scheme flag */ - *tdm_SM_or_LRTD_Pri = tdm_SM_flag_loc; - if ( hCPE->hStereoTD->tdm_LRTD_flag == 1 ) - { - *tdm_SM_or_LRTD_Pri = tdm_LRTD_pri_side; - } - - hCPE->hStereoClassif->ratio_L = ratio_L; - - - return ( idx ); -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function Get_LR_rms_fx() - * - * Get current frame left and right rms values - *-------------------------------------------------------------------*/ - -static void Get_LR_rms_fx( - const Word16 *Left_in, - const Word16 *Right_in, - const Word16 input_frame, - Word32 *rms_L, - Word16 *q_rms_L, - Word32 *rms_R, - Word16 *q_rms_R ) -{ - Word32 ener_l, ener_r; - Word32 ener_l_tmp, ener_r_tmp; - Word16 guard_bits; - Word64 W_ener_l_tmp, W_ener_r_tmp; - Word16 i; - Word16 exp_out_l, exp_out_r, exp_diff; - - W_ener_l_tmp = 0; - move64(); - W_ener_r_tmp = 0; - move64(); - ener_l = ONE_BY_100_Q31; - move32(); - ener_r = ONE_BY_100_Q31; - move32(); - - guard_bits = sub( 32, find_guarded_bits_fx( input_frame ) ); - FOR( i = 0; i < input_frame; i++ ) - { - W_ener_l_tmp = W_mac0_16_16( W_ener_l_tmp, Left_in[i], Left_in[i] ); // Q0 - W_ener_r_tmp = W_mac0_16_16( W_ener_r_tmp, Right_in[i], Right_in[i] ); // Q0 - } - /* Scaling back to the original proposal */ - ener_l_tmp = W_extract_h( W_shl( W_ener_l_tmp, guard_bits ) ); // guard_bits - 32 - ener_r_tmp = W_extract_h( W_shl( W_ener_r_tmp, guard_bits ) ); // guard_bits - 32 - - ener_l = BASOP_Util_Add_Mant32Exp( ener_l, 0, ener_l_tmp, sub( Q31, sub( guard_bits, 32 ) ), &exp_out_l ); - ener_r = BASOP_Util_Add_Mant32Exp( ener_r, 0, ener_r_tmp, sub( Q31, sub( guard_bits, 32 ) ), &exp_out_r ); - - ener_l_tmp = BASOP_Util_Divide3232_Scale( ener_l, input_frame, &exp_diff ); - exp_out_l = sub( add( exp_diff, exp_out_l ), Q15 ); - ener_r_tmp = BASOP_Util_Divide3232_Scale( ener_r, input_frame, &exp_diff ); - exp_out_r = sub( add( exp_diff, exp_out_r ), Q15 ); - - *rms_L = Sqrt32( ener_l_tmp, &exp_out_l ); // Q31 - exp_out_l - move32(); - *q_rms_L = sub( Q31, exp_out_l ); - move16(); - *rms_R = Sqrt32( ener_r_tmp, &exp_out_r ); // Q31 - exp_out_r - move32(); - *q_rms_R = sub( Q31, exp_out_r ); - move16(); - - return; -} -#else -/*-------------------------------------------------------------------* - * Function Get_LR_rms() - * - * Get current frame left and right rms values - *-------------------------------------------------------------------*/ - -static void Get_LR_rms( - const float *Left_in, - const float *Right_in, - const int16_t input_frame, - float *rms_L, - float *rms_R ) -{ - float ener_l, ener_r; - int16_t i; - - ener_l = 0.01f; - ener_r = 0.01f; - - for ( i = 0; i < input_frame; i++ ) - { - ener_l += Left_in[i] * Left_in[i]; - ener_r += Right_in[i] * Right_in[i]; - } - *rms_L = sqrtf( ener_l / input_frame ); - *rms_R = sqrtf( ener_r / input_frame ); - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Function Get_dt_lt_ener_fx() - * - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *-------------------------------------------------------------------*/ - -static Word16 Get_dt_lt_ener_fx( - CPE_ENC_HANDLE hCPE, - const Word16 IsSideMono, - const Word16 input_frame, - const Word16 tdm_last_SM_flag, - const Word32 rms_L, - const Word16 q_rms_L, - const Word32 rms_R, - const Word16 q_rms_R, - Word32 *tdm_lt_rms_L, - Word32 *tdm_lt_rms_R, - Word32 *tdm_last_ener_lt_L, - Word32 *tdm_last_ener_lt_R, - Word32 *tdm_LT_es_em, - Word16 *tdm_hyst_cnt, - Word16 *tdm_NOOP_SM_flag_loc, - Word32 *ener_R_dt, - Word32 *ener_L_dt, - Word32 *corr_LM, - Word16 *q_corr_LM, - Word32 *corr_RM, - Word16 *q_corr_RM ) -{ - Encoder_State **sts; - Word16 *Left_in_fx, *Right_in_fx; - Word32 es_em_fx; - Word16 tmp_SM_flag, tdm_SM_flag_loc; - Word32 L_tmp, L_tmp1; - Word16 exp_diff, tmp; - - sts = hCPE->hCoreCoder; - - Left_in_fx = sts[0]->input_fx; /* Left channel */ - Right_in_fx = sts[1]->input_fx; /* Right channel */ - - tmp = getScaleFactor16( sts[0]->input_fx, input_frame ); - Scale_sig( sts[0]->input_fx, input_frame, tmp ); - sts[0]->q_inp = add( tmp, sts[0]->q_inp ); - move16(); - - tmp = getScaleFactor16( sts[1]->input_fx, input_frame ); - Scale_sig( sts[1]->input_fx, input_frame, tmp ); - sts[1]->q_inp = add( tmp, sts[1]->q_inp ); - move16(); - - Scale_sig( sts[0]->input_fx, input_frame, sub( s_min( sts[0]->q_inp, sts[1]->q_inp ), sts[0]->q_inp ) ); - Scale_sig( sts[1]->input_fx, input_frame, sub( s_min( sts[0]->q_inp, sts[1]->q_inp ), sts[1]->q_inp ) ); - sts[1]->q_inp = s_min( sts[0]->q_inp, sts[1]->q_inp ); - move16(); - sts[0]->q_inp = sts[1]->q_inp; - move16(); - - tdm_SM_flag_loc = tdm_last_SM_flag; - move16(); - - test(); - IF( NE_16( hCPE->last_element_mode, IVAS_CPE_TD ) && IsSideMono == 0 ) /* last coding mode not TD and normal mono/side case, quick update of lt energy */ - { - *tdm_lt_rms_L = L_shl( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, rms_L ), sub( Q16, q_rms_L ) ); // (Q31, q_rms_L) -> q_rms_L -> Q16 - move32(); - *tdm_lt_rms_R = L_shl( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, rms_R ), sub( Q16, q_rms_R ) ); // (Q31, q_rms_R) -> q_rms_R -> Q16 - move32(); - L_tmp = Mpy_32_16_1( 1932735282 /* 0.9f in Q31 */, sts[0]->hNoiseEst->Etot_last_fx ); //(Q31, Q8) -> Q24 - sts[1]->hNoiseEst->Etot_last_fx = extract_h( L_tmp ); // (Q24 >> Q16) -> Q8 - sts[1]->hVAD->hangover_cnt = 0; - move16(); - } - ELSE - { - L_tmp = Mpy_32_32( 1288490188 /* 0.6f in Q31 */, *tdm_lt_rms_L ); // Q16 - L_tmp1 = Mpy_32_32( 858993459 /* 0.4f in Q31 */, rms_L ); // q_rms_L - *tdm_lt_rms_L = BASOP_Util_Add_Mant32Exp( L_tmp, Q31 - Q16, L_tmp1, sub( Q31, q_rms_L ), &exp_diff ); //(Q31 - exp_diff) - move32(); - *tdm_lt_rms_L = L_shl( *tdm_lt_rms_L, sub( Q16, sub( Q31, exp_diff ) ) ); // Q16 - move32(); - L_tmp = Mpy_32_32( 1288490188 /* 0.6f in Q31 */, *tdm_lt_rms_R ); // Q16 - L_tmp1 = Mpy_32_32( 858993459 /* 0.4f in Q31 */, rms_R ); // q_rms_L - *tdm_lt_rms_R = BASOP_Util_Add_Mant32Exp( L_tmp, Q31 - Q16, L_tmp1, sub( Q31, q_rms_R ), &exp_diff ); //(Q31 - exp_diff) - move32(); - *tdm_lt_rms_R = L_shl( *tdm_lt_rms_R, sub( Q16, sub( Q31, exp_diff ) ) ); // Q16 - move32(); - } - - /*----------------------------------------------------------------* - * Compute the 1st order energy difference difference - *----------------------------------------------------------------*/ - - *ener_R_dt = L_sub( *tdm_lt_rms_R, *tdm_last_ener_lt_R ); // Q16 - move32(); - *tdm_last_ener_lt_R = *tdm_lt_rms_R; // Q16 - move32(); - - *ener_L_dt = L_sub( *tdm_lt_rms_L, *tdm_last_ener_lt_L ); // Q16 - move32(); - *tdm_last_ener_lt_L = *tdm_lt_rms_L; // Q16 - move32(); - - /*----------------------------------------------------------------* - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *----------------------------------------------------------------*/ - - Get_corr_n_fx( Left_in_fx, Right_in_fx, corr_LM, q_corr_LM, corr_RM, q_corr_RM, input_frame, &es_em_fx, IsSideMono ); - - hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM] = BASOP_Util_Add_Mant32Exp( *corr_LM, sub( Q31, *q_corr_LM ), L_negate( *corr_RM ), sub( Q31, *q_corr_RM ), &exp_diff ); - move32(); - hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM] = L_shl( hCPE->hStereoClassif->xtalk_fv_fx[E_diff_corrLM_corrRM], sub( Q15, sub( Q31, exp_diff ) ) ); // Q15 - move32(); - - IF( sts[0]->hVAD->hangover_cnt != 0 ) - { - *tdm_LT_es_em = Mpy_32_32( 1932735282 /* 0.9f in Q31 */, *tdm_LT_es_em ); // Q21 - move32(); - } - ELSE - { - *tdm_LT_es_em = L_add( Mpy_32_32( 1932735282 /* 0.9f in Q31 */, *tdm_LT_es_em ), Mpy_32_32( 214748365 /* 0.1f in Q31 */, es_em_fx ) ); // Q21 - move32(); - } - - hCPE->hStereoClassif->xtalk_fv_fx[E_tdm_LT_es_em] = L_shr( *tdm_LT_es_em, 6 ); // Q15 - move32(); - - tmp_SM_flag = 0; - move16(); - if ( LT_16( s_min( sts[0]->old_corr_fx, sts[1]->old_corr_fx ), 27853 /* 0.85f in Q15 */ ) && LT_16( s_max( sts[0]->old_corr_fx, sts[1]->old_corr_fx ), 30147 /* 0.92f in Q15 */ ) && - ( GT_32( *tdm_LT_es_em, ONE_IN_Q22 /* 2.0f in Q21 */ ) || GT_32( es_em_fx, 5242880 /* 2.5f in Q21 */ ) ) && ( LE_16( sts[0]->hVAD->hangover_cnt, 1 ) && LE_16( sts[1]->hVAD->hangover_cnt, 3 ) && sts[0]->tdm_LRTD_flag == 0 ) ) - { - tmp_SM_flag = 1; - move16(); - } - if ( IsSideMono == 0 ) - { - *tdm_NOOP_SM_flag_loc = tdm_SM_flag_loc; - move16(); - } - - IF( NE_16( tmp_SM_flag, tdm_SM_flag_loc ) ) - { - IF( GE_16( *tdm_hyst_cnt, 2 ) && EQ_16( tmp_SM_flag, 1 ) && ( GT_16( sts[0]->tdm_pc, PC_LIMIT ) || GT_16( sts[1]->tdm_pc, PC_LIMIT ) ) ) - { - tdm_hyst_cnt++; - *tdm_NOOP_SM_flag_loc = tmp_SM_flag; - move16(); - *tdm_hyst_cnt = 0; - move16(); - } - ELSE IF( GE_16( *tdm_hyst_cnt, 20 ) && tmp_SM_flag == 0 && - ( GT_16( sts[0]->tdm_pc, PC_LIMIT ) || GT_16( sts[1]->tdm_pc, PC_LIMIT ) ) && ( LE_32( *tdm_LT_es_em, ONE_IN_Q20 /* 0.5f in Q21 */ ) || LT_32( es_em_fx, -20971520 /* -10.0f in Q21 */ ) ) ) - { - tdm_hyst_cnt++; - *tdm_NOOP_SM_flag_loc = tmp_SM_flag; - move16(); - *tdm_hyst_cnt = 0; - move16(); - } - } - ELSE - { - *tdm_hyst_cnt = 0; - move16(); - } - - return tmp_SM_flag; -} -#else -/*-------------------------------------------------------------------* - * Function Get_dt_lt_ener() - * - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *-------------------------------------------------------------------*/ - -static int16_t Get_dt_lt_ener( - CPE_ENC_HANDLE hCPE, - const int16_t IsSideMono, - const int16_t input_frame, - const int16_t tdm_last_SM_flag, - const float rms_L, - const float rms_R, - float *tdm_lt_rms_L, - float *tdm_lt_rms_R, - float *tdm_last_ener_lt_L, - float *tdm_last_ener_lt_R, - float *tdm_LT_es_em, - int16_t *tdm_hyst_cnt, - int16_t *tdm_NOOP_SM_flag_loc, - float *ener_R_dt, - float *ener_L_dt, - float *corr_LM, - float *corr_RM ) -{ - Encoder_State **sts; - const float *Left_in, *Right_in; - float es_em; - int16_t tmp_SM_flag, tdm_SM_flag_loc; - - sts = hCPE->hCoreCoder; - Left_in = sts[0]->input; /* Left channel */ - Right_in = sts[1]->input; /* Right channel */ - - tdm_SM_flag_loc = tdm_last_SM_flag; - - if ( hCPE->last_element_mode != IVAS_CPE_TD && IsSideMono == 0 ) /* last coding mode not TD and normal mono/side case, quick update of lt energy */ - { - *tdm_lt_rms_L = .9f * rms_L; - *tdm_lt_rms_R = .9f * rms_R; - sts[1]->hNoiseEst->Etot_last = 0.9f * ( sts[0]->hNoiseEst->Etot_last ); - sts[1]->hVAD->hangover_cnt = 0; - } - else - { - *tdm_lt_rms_L = 0.6f * *tdm_lt_rms_L + 0.4f * rms_L; - *tdm_lt_rms_R = 0.6f * *tdm_lt_rms_R + 0.4f * rms_R; - } - - /*----------------------------------------------------------------* - * Compute the 1st order energy difference difference - *----------------------------------------------------------------*/ - - *ener_R_dt = *tdm_lt_rms_R - *tdm_last_ener_lt_R; - *tdm_last_ener_lt_R = *tdm_lt_rms_R; - - *ener_L_dt = *tdm_lt_rms_L - *tdm_last_ener_lt_L; - *tdm_last_ener_lt_L = *tdm_lt_rms_L; - - /*----------------------------------------------------------------* - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *----------------------------------------------------------------*/ - - Get_corr_n( Left_in, Right_in, corr_LM, corr_RM, input_frame, &es_em, IsSideMono ); - - hCPE->hStereoClassif->xtalk_fv[E_diff_corrLM_corrRM] = *corr_LM - *corr_RM; - - if ( sts[0]->hVAD->hangover_cnt != 0 ) - { - *tdm_LT_es_em = 0.9f * *tdm_LT_es_em; - } - else - { - *tdm_LT_es_em = 0.9f * *tdm_LT_es_em + 0.1f * es_em; - } - - hCPE->hStereoClassif->xtalk_fv[E_tdm_LT_es_em] = *tdm_LT_es_em; - - tmp_SM_flag = 0; - if ( min( sts[0]->old_corr, sts[1]->old_corr ) < 0.85f && max( sts[0]->old_corr, sts[1]->old_corr < 0.92f ) && - ( *tdm_LT_es_em > 2.0f || es_em > 2.5f ) && ( sts[0]->hVAD->hangover_cnt <= 1 && sts[1]->hVAD->hangover_cnt <= 3 && sts[0]->tdm_LRTD_flag == 0 ) ) - { - tmp_SM_flag = 1; - } - if ( IsSideMono == 0 ) - { - *tdm_NOOP_SM_flag_loc = tdm_SM_flag_loc; - } - - if ( tmp_SM_flag != tdm_SM_flag_loc ) - { - if ( ( *tdm_hyst_cnt )++ >= 2 && tmp_SM_flag == 1 && ( sts[0]->tdm_pc > PC_LIMIT || sts[1]->tdm_pc > PC_LIMIT ) ) + IF( GE_16( *tdm_hyst_cnt, 2 ) && EQ_16( tmp_SM_flag, 1 ) && ( GT_16( sts[0]->tdm_pc, PC_LIMIT ) || GT_16( sts[1]->tdm_pc, PC_LIMIT ) ) ) { + tdm_hyst_cnt++; *tdm_NOOP_SM_flag_loc = tmp_SM_flag; + move16(); *tdm_hyst_cnt = 0; + move16(); } - else if ( ( *tdm_hyst_cnt )++ >= 20 && tmp_SM_flag == 0 && - ( sts[0]->tdm_pc > PC_LIMIT || sts[1]->tdm_pc > PC_LIMIT ) && ( *tdm_LT_es_em <= 0.5f || es_em < -10.0f ) ) + ELSE IF( GE_16( *tdm_hyst_cnt, 20 ) && tmp_SM_flag == 0 && + ( GT_16( sts[0]->tdm_pc, PC_LIMIT ) || GT_16( sts[1]->tdm_pc, PC_LIMIT ) ) && ( LE_32( *tdm_LT_es_em, ONE_IN_Q20 /* 0.5f in Q21 */ ) || LT_32( es_em_fx, -20971520 /* -10.0f in Q21 */ ) ) ) { + tdm_hyst_cnt++; *tdm_NOOP_SM_flag_loc = tmp_SM_flag; + move16(); *tdm_hyst_cnt = 0; + move16(); } } - else + ELSE { *tdm_hyst_cnt = 0; + move16(); } return tmp_SM_flag; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function NOOP_decision_fx() * @@ -1755,124 +1119,8 @@ static void NOOP_decision_fx( return; } -#else -/*-------------------------------------------------------------------* - * Function NOOP_decision() - * - * Set Near Out Of Phase decision - *-------------------------------------------------------------------*/ - -static void NOOP_decision( - CPE_ENC_HANDLE hCPE, - const int16_t tdm_NOOP_flag_loc, - const int16_t tmp_SM_flag, - const float rms_L, - const float rms_R, - int16_t *tdm_SM_flag_loc ) -{ - int16_t tdm_NOOP_switch_flag; - STEREO_TD_ENC_DATA_HANDLE hStereoTD; - Encoder_State **sts; - - hStereoTD = hCPE->hStereoTD; - sts = hCPE->hCoreCoder; - - tdm_NOOP_switch_flag = 0; - hStereoTD->tdm_NOOP_cnt++; - if ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 0 ) - { - if ( ( ( hStereoTD->tdm_SM_last2_clas[0] > VOICED_TRANSITION && ( hStereoTD->tdm_SM_last_clas[0] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[0] == VOICED_TRANSITION ) ) || - ( hStereoTD->tdm_SM_last2_clas[1] > VOICED_TRANSITION && ( hStereoTD->tdm_SM_last_clas[1] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[1] == VOICED_TRANSITION ) ) ) && - ( !( sts[0]->last_coder_type_raw == VOICED || sts[1]->last_coder_type_raw == VOICED ) && hStereoTD->tdm_NOOP_cnt > 5 ) ) - { - tdm_NOOP_switch_flag = 1; - hStereoTD->tdm_NOOP_cnt = 0; - } - else if ( ( hStereoTD->tdm_SM_last_clas[0] == UNVOICED_CLAS || hStereoTD->tdm_SM_last_clas[1] == UNVOICED_CLAS ) && - ( !( sts[0]->last_coder_type_raw == VOICED || sts[1]->last_coder_type_raw == VOICED ) ) && ( rms_L < 400.0f && rms_R < 400.0f ) && ( hStereoTD->tdm_NOOP_cnt > 5 ) ) - { - tdm_NOOP_switch_flag = 1; - hStereoTD->tdm_NOOP_cnt = 0; - } - } - else - { - if ( sts[0]->ee_old < 5000.f && sts[1]->ee_old < 5000.f ) - { - tdm_NOOP_switch_flag = 1; - } - } - - if ( *tdm_SM_flag_loc != tdm_NOOP_flag_loc ) - { - hStereoTD->tdm_SM_flag = 1; - if ( hCPE->hCoreCoder[0]->sp_aud_decision0 == 0 ) - { - if ( tdm_NOOP_switch_flag == 1 ) - { - *tdm_SM_flag_loc = tdm_NOOP_flag_loc; - if ( *tdm_SM_flag_loc ) - { - hStereoTD->tdm_SM_reset_flag = 1; - } - hStereoTD->tdm_SM_flag = 0; - } - } - else - { - if ( tdm_NOOP_switch_flag == 1 ) - { - *tdm_SM_flag_loc = tdm_NOOP_flag_loc; - if ( *tdm_SM_flag_loc ) - { - hStereoTD->tdm_SM_reset_flag = 1; - } - hStereoTD->tdm_SM_flag = 0; - } - } - - if ( tdm_NOOP_flag_loc == 1 ) - { - hStereoTD->tdm_hyst_cnt = 2; - } - else - { - hStereoTD->tdm_hyst_cnt = 20; - } - } - - if ( hStereoTD->tdm_SM_flag > 0 && tdm_NOOP_switch_flag == 1 && *tdm_SM_flag_loc != tmp_SM_flag ) - { - *tdm_SM_flag_loc = !( *tdm_SM_flag_loc ); - hStereoTD->tdm_SM_flag = 0; - if ( *tdm_SM_flag_loc ) - { - hStereoTD->tdm_SM_reset_flag = 1; - } - } - - if ( hStereoTD->tdm_SM_modi_flag == 1 ) - { - *tdm_SM_flag_loc = 1; - hStereoTD->tdm_SM_modi_flag = 0; - hStereoTD->tdm_SM_reset_flag = 1; - } - else - { - if ( *tdm_SM_flag_loc == 1 && hStereoTD->tdm_SM_reset_flag == 1 && hStereoTD->tdm_last_ratio < 0.5 ) - { - hStereoTD->tdm_SM_reset_flag = 0; - *tdm_SM_flag_loc = 0; - hStereoTD->tdm_SM_modi_flag = 1; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function Comp_diff_lt_corr_fx() * @@ -2083,132 +1331,8 @@ static Word32 Comp_diff_lt_corr_fx( return d_lt_corr_raw_fx; } -#else -/*-------------------------------------------------------------------* - * Function Comp_diff_lt_corr() - * - * Adjust stereo downmixing adaptation rate factor - * in function of the signal energy. - *-------------------------------------------------------------------*/ - -static float Comp_diff_lt_corr( - CPE_ENC_HANDLE hCPE, - const int16_t IsSideMono, - const float rms_L, - const float rms_R, - const float ener_L_dt, - const float ener_R_dt, - float corr_LM, - float corr_RM, - const float tdm_lt_rms_L, - const float tdm_lt_rms_R, - float *tdm_lt_corr_LM, - float *tdm_lt_corr_RM, - float *tdm_last_diff_lt_corr, - float *inst_ratio_L_out, - float *diff_lt_corr ) -{ - float adaprate, adaprate_tmp, madaprate, d_lt_corr_raw, diff_lt_corr_tmp; - float d_lt_corr, inst_ratio_L, diff_lt_corr_LM_tmp, diff_lt_corr_RM_tmp; - Encoder_State **sts; - - sts = hCPE->hCoreCoder; - - /*----------------------------------------------------------------* - * Adjust stereo downmixing adaptation rate factor - * in function of the signal energy. If signal energy is low, - * adaptation rate factor is lower. This prevent stereo image - * move on speech offset - *----------------------------------------------------------------*/ - - if ( IsSideMono == 0 && hCPE->hStereoClassif->lrtd_mode == 1 && ( ( tdm_lt_rms_R > 2.0f * tdm_lt_rms_L ) || ( tdm_lt_rms_L > 2.0f * tdm_lt_rms_R ) ) ) - { - adaprate = M_ADAP * max( tdm_lt_rms_R, tdm_lt_rms_L ) + B_ADAP; - } - else - { - adaprate = M_ADAP * min( tdm_lt_rms_R, tdm_lt_rms_L ) + B_ADAP; - } - - adaprate = check_bounds( adaprate, MIN_ADAP_FAC, 1.0f ); - - /*----------------------------------------------------------------* - * In case of unvoiced content (expect when it is part of an onset), - * the adaptation rate is minimal. - *----------------------------------------------------------------*/ - - if ( sts[0]->ini_frame > 2 && - ( ( sts[0]->last_clas <= VOICED_TRANSITION && sts[0]->hVAD->hangover_cnt == 0 ) || - ( sts[1]->last_clas <= VOICED_TRANSITION && sts[1]->hVAD->hangover_cnt == 0 ) ) ) - { - adaprate = min( adaprate, LIMIT_ADAP_FAC ); - } - - d_lt_corr_raw = 0.0f; - if ( IsSideMono == 0 ) - { - if ( hCPE->last_element_mode != IVAS_CPE_TD || ( ( tdm_lt_rms_R < 1.0f || tdm_lt_rms_L < 1.0f ) && hCPE->hStereoClassif->lrtd_mode == 1 && max( tdm_lt_rms_R, tdm_lt_rms_L ) < 10.0f ) ) - { - adaprate = 0.98f; /* speed up the adaptation of the long term values to the current values after coming from DFT */ - } - adaprate_tmp = max( adaprate, 0.8f ); - madaprate = 1.0f - adaprate_tmp; /* madaprate has temporary value, will updated few lines below */ - - d_lt_corr_raw = ( adaprate_tmp * corr_LM + madaprate * *tdm_lt_corr_LM ) - - ( adaprate_tmp * corr_RM + madaprate * *tdm_lt_corr_RM ); /* Short term smooth correlation differences to mono */ - inst_ratio_L = 0.0f; - /*inst_ratio_L = max(diff_lt_corr,-RATIO_MAX);*/ - inst_ratio_L = max( d_lt_corr_raw, -RATIO_MAX ); - inst_ratio_L = min( inst_ratio_L, RATIO_MAX ); - inst_ratio_L = 0.667f * inst_ratio_L + 1.0f; - *inst_ratio_L_out = ( 1.0f - cosf( EVS_PI * inst_ratio_L / 2.0f ) ) / 2.0f; - } - madaprate = 1.0f - adaprate; - corr_RM = adaprate * corr_RM + madaprate * *tdm_lt_corr_RM; - corr_LM = adaprate * corr_LM + madaprate * *tdm_lt_corr_LM; - diff_lt_corr_LM_tmp = ( ALP_REF * *tdm_lt_corr_LM + BET_REF * corr_LM ); - diff_lt_corr_RM_tmp = ( ALP_REF * *tdm_lt_corr_RM + BET_REF * corr_RM ); - diff_lt_corr_tmp = diff_lt_corr_LM_tmp - diff_lt_corr_RM_tmp; - - d_lt_corr = diff_lt_corr_tmp - *tdm_last_diff_lt_corr; - *tdm_last_diff_lt_corr = diff_lt_corr_tmp; - - /*----------------------------------------------------------------* - * Correct the estimation depending of channels energies evolution - *----------------------------------------------------------------*/ - - if ( IsSideMono == 1 && ( ( rms_L < RMS_MIN2 && rms_R < RMS_MIN2 ) && ( ( tdm_lt_rms_L < 0.8f * rms_L ) && ( tdm_lt_rms_R < 0.8f * rms_R ) ) && - ( ( tdm_lt_rms_L > 2.0f * tdm_lt_rms_R ) || ( tdm_lt_rms_L < 0.5f * tdm_lt_rms_R ) ) ) ) - { - *tdm_lt_corr_LM = ALP2 * *tdm_lt_corr_LM + BET2 * corr_LM; - *tdm_lt_corr_RM = ALP2 * *tdm_lt_corr_RM + BET2 * corr_RM; - - *tdm_lt_corr_LM *= 2.5f; - *tdm_lt_corr_RM *= 2.5f; - } - else if ( ( !( ( ener_R_dt > DT_ENER_THR && ener_L_dt < DT_ENER_THR ) || ( ener_R_dt < DT_ENER_THR && ener_L_dt > DT_ENER_THR ) ) /* Energy are going in the same direction */ - && ( fabsf( d_lt_corr ) < 0.31f /* small difference regarding the difference gain evolution */ - || tdm_lt_rms_L > 2 * RMS_MIN2 || tdm_lt_rms_R > 2 * RMS_MIN2 ) ) /* Energy of at least one of the channel is not low */ - ) - { - /* Use estimated results */ - *tdm_lt_corr_LM = diff_lt_corr_LM_tmp; - *tdm_lt_corr_RM = diff_lt_corr_RM_tmp; - } - else - { - *tdm_lt_corr_LM = ALP1 * *tdm_lt_corr_LM + BET1 * corr_LM; - *tdm_lt_corr_RM = ALP1 * *tdm_lt_corr_RM + BET1 * corr_RM; - } - - *diff_lt_corr = *tdm_lt_corr_LM - *tdm_lt_corr_RM; /* update the difference */ - - return d_lt_corr_raw; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function limit_idx_Dnwmix_fx() * @@ -2264,63 +1388,8 @@ static Word16 limit_idx_Dwnmix_fx( return idx; } -#else -/*-------------------------------------------------------------------* - * Function limit_idx_Dnwmix() - * - * - *-------------------------------------------------------------------*/ - -static int16_t limit_idx_Dwnmix( - const int16_t idx_in, - const int16_t unclr_decision, - const int16_t inst_idx, - const int16_t previous_idx, - const int16_t tdm_last_LRTD_PriCh_cnt, - const int16_t tdm_last_LRTD_frame_cnt ) -{ - int16_t idx; - - idx = idx_in; - idx = check_bounds_s( idx, 1, 29 ); - - if ( unclr_decision == 1 && tdm_last_LRTD_frame_cnt > 1 ) - { - if ( tdm_last_LRTD_PriCh_cnt > 0 ) - { - if ( idx <= LRTD_STEREO_MID_IS_PRIM && ( inst_idx < LRTD_STEREO_MID_IS_PRIM + 2 ) ) - { - idx = min( 1, idx ); - } - else if ( idx >= LRTD_STEREO_MID_IS_PRIM && ( inst_idx > LRTD_STEREO_MID_IS_PRIM - 2 ) ) - { - idx = max( 29, idx ); - } - else if ( inst_idx < LRTD_STEREO_MID_IS_PRIM - 4 ) - { - idx = min( 1, idx ); - } - else if ( inst_idx > LRTD_STEREO_MID_IS_PRIM + 4 ) - { - idx = max( 29, idx ); - } - else - { - idx = previous_idx; - } - } - else - { - idx = previous_idx; - } - } - - return idx; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function limit_idx_NoDwnmix_fx() * @@ -2357,53 +1426,14 @@ static Word16 limit_idx_NoDwnmix_fx( ELSE { idx = 30; - move16(); - } - } - - return idx; -} -#else -/*-------------------------------------------------------------------* - * Function limit_idx_NoDwnmix() - * - *-------------------------------------------------------------------*/ - -static int16_t limit_idx_NoDwnmix( - const int16_t idx_in, /* i : Index */ - const int16_t side_can_change, /* i : Primary and secondary channel allowed to change ? */ - const float d_lt_corr_raw /* i : Raw corrrelation differences */ -) -{ - int16_t idx; - - idx = idx_in; - if ( side_can_change == 0 && idx_in > 10 && idx_in < 20 ) - { - idx = 30; - if ( d_lt_corr_raw < -0.1f ) - { - idx = 0; - } - } - else - { - if ( idx <= 15 ) - { - idx = 0; - } - else - { - idx = 30; + move16(); } } return idx; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function stereo_tdm_ener_analysis_SM_fx() * @@ -2589,163 +1619,6 @@ static Word16 stereo_tdm_ener_analysis_SM_fx( return ( idx ); } -#else -/*-------------------------------------------------------------------* - * Function stereo_tdm_ener_analysis_SM() - * - * - *-------------------------------------------------------------------*/ - -static int16_t stereo_tdm_ener_analysis_SM( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - Encoder_State **sts, /* i/o: Encoder static variables structure */ - const int16_t input_frame, /* i : Number of samples */ - int16_t *tdm_SM_flag /* i/o: channel combination scheme flag */ -) -{ - float rms_R, rms_L; - float corr_RM, corr_LM, diff_lt_corr, ratio_L, dist; - int16_t i, side_can_change; - int16_t idx, tdm_SM_flag_loc; - float es_em = 0.01f; - float ener_R_dt, ener_L_dt; - int16_t desired_idx = 0; - STEREO_TD_ENC_DATA_HANDLE hStereoTD; - - hStereoTD = hCPE->hStereoTD; - - /*----------------------------------------------------------------* - * set SM flag - *----------------------------------------------------------------*/ - - /* Simple logic to set SM flag, should be done in the frequency domain for low SM correlation signal, especially for music item such as Music_1_org_s */ - tdm_SM_flag_loc = hStereoTD->tdm_last_SM_flag_noop; - - /*----------------------------------------------------------------* - * Compute L and R energy and Long term RMS of each channel - *----------------------------------------------------------------*/ - - Get_LR_rms( sts[0]->input, sts[1]->input, input_frame, &rms_L, &rms_R ); - - /*----------------------------------------------------------------* - * Compute the 1st order energy difference difference - * Compute the gain of L&R channel compared to mono - * - estimate the long term evolution of the L to Mono gain - * - estimate the long term evolution of the R to Mono gain - * - estimate the long term difference between the long term - * - evolution of the L and R to Mono gain - *----------------------------------------------------------------*/ - - Get_dt_lt_ener( hCPE, 1, input_frame, hStereoTD->tdm_last_SM_flag_noop, rms_L, rms_R, - &hStereoTD->tdm_lt_rms_L_SM, &hStereoTD->tdm_lt_rms_R_SM, &hStereoTD->tdm_last_ener_lt_L_SM, &hStereoTD->tdm_last_ener_lt_R_SM, &hStereoTD->tdm_LT_es_em_SM, &hStereoTD->tdm_hyst_cnt_SM, &tdm_SM_flag_loc, - &ener_R_dt, &ener_L_dt, &corr_LM, &corr_RM ); - - hStereoTD->tdm_SM_reset_flag = 0; - - /*----------------------------------------------------------------* - * Adjust stereo downmixing adaptation rate factor - * in function of the signal energy. If signal energy is low, - * adaptation rate factor is lower. This prevent stereo image - * move on speech offset - *----------------------------------------------------------------*/ - - Comp_diff_lt_corr( hCPE, 1, rms_L, rms_R, ener_L_dt, ener_R_dt, corr_LM, corr_RM, hStereoTD->tdm_lt_rms_L_SM, hStereoTD->tdm_lt_rms_R_SM, &hStereoTD->tdm_lt_corr_LM_SM, - &hStereoTD->tdm_lt_corr_RM_SM, &( hStereoTD->tdm_last_diff_lt_corr_SM ), NULL, &diff_lt_corr ); - - side_can_change = 0; - - /*----------------------------------------------------------------* - * When the energies of channels are low enough, compute the ratio - * of L and R needed to create new mono/side signals - *----------------------------------------------------------------*/ - - if ( ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN && hStereoTD->tdm_lt_rms_R_SM <= 2 * RMS_MIN ) || ( hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN && hStereoTD->tdm_lt_rms_L_SM <= 2 * RMS_MIN ) ) - { - if ( ( sts[0]->old_corr < CORR_THRES && sts[1]->old_corr < CORR_THRES ) || ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN2 ) ) - { - side_can_change = 1; - } - } - - if ( ( hStereoTD->tdm_lt_rms_L_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_R_SM <= 2 * RMS_MIN2 ) || ( hStereoTD->tdm_lt_rms_R_SM <= RMS_MIN2 && hStereoTD->tdm_lt_rms_L_SM <= 2 * RMS_MIN2 ) ) - { - if ( ( ( hStereoTD->tdm_last_SM_flag_noop != tdm_SM_flag_loc ) && hStereoTD->tdm_noop_cnt == 0 ) || - hStereoTD->tdm_noop_mov_flag == 1 || hStereoTD->tdm_prev_desired_idx_SM != hStereoTD->tdm_prev_stable_idx_SM ) - { - hStereoTD->tdm_noop_mov_flag = 1; - if ( hStereoTD->tdm_last_ratio_idx_SM != 0 && hStereoTD->tdm_last_ratio_idx_SM != ( TDM_NQ - 1 ) ) - { - side_can_change = 1; - } - } - } - - if ( side_can_change == 0 && tdm_SM_flag_loc == 1 && es_em > 15.0f ) - { - side_can_change = 1; - } - - if ( side_can_change ) - { - ratio_L = max( diff_lt_corr, -RATIO_MAX ); - ratio_L = min( ratio_L, RATIO_MAX ); - - if ( ratio_L > 0.5f * RATIO_MAX ) - { - ratio_L = 1.08f * ratio_L + 0.38f; - } - else if ( ratio_L < -0.5f * RATIO_MAX ) - { - ratio_L = 0.64f * ratio_L + 1.28f; - } - else - { - ratio_L = 0.26f * ratio_L + 0.995f; - } - - ratio_L = ( 1.0f - cosf( EVS_PI * ratio_L / 2.0f ) ) / 2.0f; - - dist = fabsf( ratio_L - tdm_ratio_tabl[0] ); - - desired_idx = 0; - for ( i = 1; i < TDM_NQ; i++ ) - { - if ( fabsf( ratio_L - tdm_ratio_tabl[i] ) <= dist ) - { - dist = fabsf( ratio_L - tdm_ratio_tabl[i] ); - desired_idx = i; - } - } - - idx = stereo_smooth_LR_transition( &hStereoTD->tdm_prev_stable_idx_SM, &hStereoTD->tdm_noop_mov_flag, hStereoTD->tdm_last_ratio_idx_SM, &hStereoTD->tdm_prev_desired_idx_SM, &hStereoTD->tdm_noop_cnt, tdm_SM_flag_loc, desired_idx ); - - idx = (int16_t) ( idx * 0.8f + hStereoTD->tdm_last_ratio_idx_SM * 0.2f ); - - ratio_L = tdm_ratio_tabl[idx]; - } - else - { - ratio_L = hStereoTD->tdm_last_ratio_SM; - idx = hStereoTD->tdm_last_ratio_idx_SM; - } - - if ( ( hStereoTD->tdm_noop_mov_flag == 1 && hStereoTD->tdm_noop_cnt >= 31 ) || ( ( hStereoTD->tdm_last_SM_flag_noop == tdm_SM_flag_loc ) && ( idx == hStereoTD->tdm_prev_stable_idx_SM ) ) ) - { - hStereoTD->tdm_noop_cnt = 0; - hStereoTD->tdm_noop_mov_flag = 0; - } - - if ( hStereoTD->tdm_noop_mov_flag == 0 || tdm_SM_flag_loc == 0 ) - { - hStereoTD->tdm_prev_stable_idx_SM = idx; - } - - hStereoTD->tdm_last_SM_flag_noop = tdm_SM_flag_loc; - *tdm_SM_flag = tdm_SM_flag_loc; - - return ( idx ); -} -#endif /*-------------------------------------------------------------------* @@ -2753,7 +1626,6 @@ static int16_t stereo_tdm_ener_analysis_SM( * * Perform the comparison of the 2 sets of LP coefficients *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: replication decision; 1 = Use old LP */ Word16 tdm_lp_comparison_fx( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ @@ -2883,153 +1755,6 @@ Word16 tdm_lp_comparison_fx( return LP_mode; } -#else -/*! r: replication decision; 1 = Use old LP */ -int16_t tdm_lp_comparison( - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ - Encoder_State *st, /* i/o: Encoder structure */ - const float *speech, /* i : Current speech frame */ - const float *A_PCh, /* i : primary channel LP coefficients */ - const float *A_SCh, /* i : secondary channel LP coeff. */ - const int16_t m, /* i : filter length */ - const float *isp_PCh, /* i : primary channel LSPs */ - const float *isp_SCh, /* i : secondary channel LSPs */ - const int16_t L_frame, /* i : frame length */ - const int32_t element_brate_wo_meta /* i : element bitrate without metadata*/ -) -{ - float predgain_SCh, pred_gain_reuse_PCh, ener_sig; - float res[L_FRAME16k]; - int16_t LP_mode; - float dist, ftmp; - int16_t i; - /* Find prediction gain for current LP filter */ - residu( A_SCh, m, speech, res, L_frame ); - ener_sig = log10f( sum2_f( speech, L_frame ) + 0.01f ); - predgain_SCh = 10.0f * ( ener_sig - log10f( sum2_f( res, L_frame ) + 0.01f ) ); - - /* Find prediction gain when resuing the Primary Channel LP filter */ - residu( A_PCh, m, speech, res, L_frame ); - pred_gain_reuse_PCh = 10.0f * ( ener_sig - log10f( sum2_f( res, L_frame ) + 0.01f ) ); - - /* Find Euclidian distance between the 2 filters */ - dist = 0; - for ( i = 0; i < m; i++ ) - { - ftmp = isp_SCh[i] - isp_PCh[i]; - dist += ftmp * ftmp; - } - ener_sig *= 10.0f; - - /* Verification of the filters similartiies and prediction gain obtained for each channel */ - /* Threshold are more relax if alpha is close to 0.5 (Valid if ICA is used ) */ - if ( ( ( pred_gain_reuse_PCh >= RATIO_PG * predgain_SCh && dist < EUCLDST ) /* Prediction gain are close & Euclidian dist is small */ - || ( predgain_SCh < PG2ND && dist < EUCLDST2 ) ) /* Prediction gain if the secondary channel is low & Euclidian dist is not too large */ - || ( hStereoTD->tdm_last_ratio_idx >= ( LRTD_STEREO_MID_IS_PRIM - 2 ) && hStereoTD->tdm_last_ratio_idx <= ( LRTD_STEREO_MID_IS_PRIM + 2 ) && /* ratio between 0.4 and 0.6 */ - ( ( pred_gain_reuse_PCh >= RATIO_PG2 * predgain_SCh && dist < EUCLDST2 ) || predgain_SCh < PG2ND2 ) ) /* Prediction gain are not far & Euclidian dist is not too large or Prediction gain if the secondary channel is low */ - || ener_sig <= 30.0f /* secondary channel has low energy */ - ) - { - LP_mode = 1; - - if ( ( element_brate_wo_meta >= IVAS_48k && !( pred_gain_reuse_PCh >= RATIO_PG_HR * predgain_SCh && dist < EUCLDST ) ) || - ( hStereoClassif->lrtd_mode == 1 && element_brate_wo_meta < IVAS_16k4 && !( pred_gain_reuse_PCh >= RATIO_PG_HR * predgain_SCh && dist < EUCLDST / 2.0f ) ) || - ( hStereoClassif->lrtd_mode == 1 && element_brate_wo_meta >= IVAS_16k4 && !( pred_gain_reuse_PCh >= RATIO_PG_LRTD * predgain_SCh && dist < EUCLDST / 4.0f ) ) || st->tc_cnt > 0 ) - { - LP_mode = 0; - } - } - else - { - /* Prediction or and filters are too different -> quantize the difference*/ - LP_mode = 0; - } - - return LP_mode; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tdm_ol_pitch_comparison() - * - * Perform the comparison of the 2 sets of OL pitch - *-------------------------------------------------------------------*/ - -/*! r: replication decision; 1 = Use old LP */ -void tdm_ol_pitch_comparison( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - float pitch_fr[CPE_CHANNELS][NB_SUBFR], /* i/o: fractional pitch values */ - float voicing_fr[CPE_CHANNELS][NB_SUBFR] /* i/o: fractional pitch gains */ -) -{ - int16_t tmp_diff; - int16_t diff_thr = 6; - Encoder_State *st0, *st1; - - st0 = hCPE->hCoreCoder[0]; /* Encoder structure - primary channel */ - st1 = hCPE->hCoreCoder[1]; /* Encoder structure - secondary channel */ - - if ( hCPE->element_brate > IVAS_13k2 ) - { - diff_thr = 3; - } - - if ( hCPE->element_brate >= IVAS_48k || hCPE->hStereoTD->tdm_LRTD_flag == 1 ) - { - diff_thr = 1; - } - - hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; - - if ( ( ( st0->sp_aud_decision1 == 0 && st0->sp_aud_decision2 == 0 ) && /* Pitch is not recycled in case of music coding*/ - ( hCPE->element_brate <= IVAS_16k4 || ( hCPE->element_brate <= IVAS_24k4 && st0->coder_type == VOICED && st1->coder_type == VOICED ) ) ) || - hCPE->element_brate < IVAS_13k2 ) - { - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - float voicmin[4]; - - minimum( st0->voicing, 3, voicmin ); - minimum( st1->voicing, 3, voicmin + 1 ); - minimum( voicing_fr[0], 4, voicmin + 2 ); - minimum( voicing_fr[1], 4, voicmin + 3 ); - - tmp_diff = 10; - if ( voicmin[0] >= .9f && voicmin[1] >= .9f && voicmin[2] >= .85f && voicmin[3] >= .85f ) - { - tmp_diff = (int16_t) ( abs( ( st0->pitch[0] - st1->pitch[0] ) ) + abs( ( st0->pitch[1] - st1->pitch[1] ) ) + abs( ( st0->pitch[2] - st1->pitch[2] ) ) ); - } - } - else - { - tmp_diff = (int16_t) abs( ( st0->pitch[0] + st0->pitch[1] + st0->pitch[2] ) - ( st1->pitch[0] + st1->pitch[1] + st1->pitch[2] ) ); - } - - if ( tmp_diff <= diff_thr ) - { - hCPE->hStereoTD->tdm_Pitch_reuse_flag = 1; - - /* 1/4 pitch precision update*/ - mvs2s( st0->pitch, st1->pitch, 3 ); - mvr2r( st0->voicing, st1->voicing, 3 ); - - /* Update some parameters accordingly */ - st1->old_corr = st0->old_corr; - st1->old_thres = st0->old_thres; - st1->delta_pit = st0->delta_pit; - - /* Updates for adaptive lag window memory */ - st1->old_pitch_la = st0->old_pitch_la; - /* 1/4 pitch precision update*/ - mvr2r( pitch_fr[0], pitch_fr[1], NB_SUBFR ); - mvr2r( voicing_fr[0], voicing_fr[1], NB_SUBFR ); - } - } - - return; -} -#else /*-------------------------------------------------------------------* * tdm_ol_pitch_comparison() * @@ -3130,9 +1855,7 @@ void tdm_ol_pitch_comparison_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function Get_corr_n_fx() * @@ -3179,12 +1902,12 @@ static void Get_corr_n_fx( { FOR( i = 0; i < len; i++ ) { - mono_i = round_fx( L_msu( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in - W_corrL = W_mac0_16_16( W_corrL, abs_s( L[i] ), abs_s( mono_i ) ); // (q_in + q_in ) - W_corrR = W_mac0_16_16( W_corrR, abs_s( R[i] ), abs_s( mono_i ) ); // (q_in + q_in ) - W_ener = W_mac0_16_16( W_ener, mono_i, mono_i ); // (q_in + q_in ) - side_i = round_fx( L_mac( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in - W_ener_side = W_mac0_16_16( W_ener_side, side_i, side_i ); // (q_in + q_in ) + mono_i = extract_h( L_msu( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in + W_corrL = W_mac0_16_16( W_corrL, abs_s( L[i] ), abs_s( mono_i ) ); // (q_in + q_in ) + W_corrR = W_mac0_16_16( W_corrR, abs_s( R[i] ), abs_s( mono_i ) ); // (q_in + q_in ) + W_ener = W_mac0_16_16( W_ener, mono_i, mono_i ); // (q_in + q_in ) + side_i = extract_h( L_mac( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in + W_ener_side = W_mac0_16_16( W_ener_side, side_i, side_i ); // (q_in + q_in ) } /* Scaling back to the original proposal */ corrL = W_extract_h( W_shl( W_corrL, guard_bits ) ); @@ -3196,12 +1919,12 @@ static void Get_corr_n_fx( { FOR( i = 0; i < len; i++ ) { - mono_i = round_fx( L_mac( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in - W_corrL = W_mac0_16_16( W_corrL, L[i], mono_i ); // (q_in + q_in ) - W_corrR = W_mac0_16_16( W_corrR, R[i], mono_i ); // (q_in + q_in ) - W_ener = W_mac0_16_16( W_ener, mono_i, mono_i ); // (q_in + q_in ) - side_i = round_fx( L_msu( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in - W_ener_side = W_mac0_16_16( W_ener_side, side_i, side_i ); // (q_in + q_in ) + mono_i = extract_h( L_mac( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in + W_corrL = W_mac0_16_16( W_corrL, L[i], mono_i ); // (q_in + q_in ) + W_corrR = W_mac0_16_16( W_corrR, R[i], mono_i ); // (q_in + q_in ) + W_ener = W_mac0_16_16( W_ener, mono_i, mono_i ); // (q_in + q_in ) + side_i = extract_h( L_msu( L_mult( L[i], ONE_IN_Q14 ), R[i], ONE_IN_Q14 ) ); // q_in + W_ener_side = W_mac0_16_16( W_ener_side, side_i, side_i ); // (q_in + q_in ) } /* Scaling back to the original proposal */ corrL = W_extract_h( W_shl( W_corrL, guard_bits ) ); @@ -3262,72 +1985,8 @@ static void Get_corr_n_fx( return; } -#else -/*-------------------------------------------------------------------* - * Function Get_corr_n() - * - * - *-------------------------------------------------------------------*/ - -static void Get_corr_n( - const float L[], /* i : Left signal */ - const float R[], /* i : Right signal */ - float *ic_Lm, /* o : Right signal */ - float *ic_Rm, /* o : Right signal */ - const int16_t len, /* i : segment length */ - float *es_em, /* o : return the difference between the side and mono energy */ - const int16_t tdm_SM_calc_flag /* i : Flag that indicates that it is for SM mode */ -) -{ - float corrL, corrR, ener, mono_i; - int16_t i; - float ener_side, side_i; - - corrL = 0; - corrR = 0; - ener = 1e-6f; - ener_side = 1e-6f; - - /*----------------------------------------------------------------* - * Find the normalized correlation between: left/mono and right/mono based - *----------------------------------------------------------------*/ - - if ( tdm_SM_calc_flag ) - { - for ( i = 0; i < len; i++ ) - { - mono_i = ( L[i] - R[i] ) / 2.0f; - corrL += fabsf( L[i] ) * fabsf( mono_i ); - corrR += fabsf( R[i] ) * fabsf( mono_i ); - ener += mono_i * mono_i; - side_i = ( L[i] + R[i] ) / 2.0f; - ener_side += side_i * side_i; - } - } - else - { - for ( i = 0; i < len; i++ ) - { - mono_i = ( L[i] + R[i] ) / 2.0f; - corrL += L[i] * mono_i; - corrR += R[i] * mono_i; - ener += mono_i * mono_i; - side_i = ( L[i] - R[i] ) / 2.0f; - ener_side += side_i * side_i; - } - } - - *ic_Lm = corrL / ener; - *ic_Rm = corrR / ener; - - *es_em = 10 * ( log10f( sqrtf( ener_side / len ) ) - log10f( sqrtf( ener / len ) ) ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function stereo_smooth_LR_transition_fx() * @@ -3397,66 +2056,3 @@ static Word16 stereo_smooth_LR_transition_fx( return idx; } -#else -/*-------------------------------------------------------------------* - * Function stereo_smooth_LR_transition() - * - *-------------------------------------------------------------------*/ - -/*! r: smoothed position */ -static int16_t stereo_smooth_LR_transition( - int16_t *tdm_prev_stable_idx, /* i/o: Previous Transmitted ratio index */ - int16_t *tdm_ratio_transition_mov_flag, /* i/o: Flag that indicates that L-R energy is changing */ - int16_t tdm_last_ratio_idx, /* i : last TDM ratio index */ - int16_t *tdm_prev_desired_idx, /* i/o: Previous Transmitted ratio index */ - int16_t *tdm_ratio_transition_cnt, /* i/o: Counter */ - const int16_t tdm_SM_flag, /* i : channel combination scheme flag for current frame */ - int16_t desired_idx /* i : desired final position */ -) -{ - int16_t idx; - - if ( tdm_SM_flag == 1 ) - { - desired_idx = 15; - } - - if ( desired_idx != *tdm_prev_stable_idx ) - { - *tdm_ratio_transition_mov_flag = 1; - } - - if ( *tdm_ratio_transition_mov_flag == 1 ) - { - if ( desired_idx != *tdm_prev_desired_idx ) - { - *tdm_prev_stable_idx = tdm_last_ratio_idx; - *tdm_ratio_transition_cnt = 0; - } - - *tdm_ratio_transition_cnt += 4; - if ( desired_idx < *tdm_prev_stable_idx - 2 ) - { - idx = *tdm_prev_stable_idx - *tdm_ratio_transition_cnt; - idx = max( desired_idx, idx ); - } - else if ( desired_idx > *tdm_prev_stable_idx + 2 ) - { - idx = *tdm_prev_stable_idx + *tdm_ratio_transition_cnt; - idx = min( desired_idx, idx ); - } - else - { - idx = desired_idx; - } - } - else - { - idx = desired_idx; - } - - *tdm_prev_desired_idx = desired_idx; - - return idx; -} -#endif diff --git a/lib_enc/ivas_stereo_td_enc.c b/lib_enc/ivas_stereo_td_enc.c index a142ef225..a06c30301 100644 --- a/lib_enc/ivas_stereo_td_enc.c +++ b/lib_enc/ivas_stereo_td_enc.c @@ -42,12 +42,10 @@ #ifdef DEBUGGING #include "debug.h" #endif -#ifdef IVAS_FLOAT_FIXED #include "prot_fx_enc.h" #include "ivas_prot_fx.h" #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*-------------------------------------------------------------------* @@ -55,90 +53,6 @@ * * Initialize TD stereo encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_td_init_enc( - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ - const int16_t last_element_mode /* i : last element mode */ -) -{ - hStereoTD->tdm_lt_corr_RM = 0.01f; - hStereoTD->tdm_lt_corr_LM = 0.01f; - hStereoTD->tdm_last_ratio = 0.5f; - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_lt_rms_L = 40.0f; - hStereoTD->tdm_lt_rms_R = 40.0f; - hStereoTD->tdm_last_diff_lt_corr = 0; - hStereoTD->tdm_last_ener_lt_R = 0; - hStereoTD->tdm_last_ener_lt_L = 0; - - hStereoTD->tdm_ratio_transition_mov_flag = 0; - hStereoTD->tdm_ratio_transition_cnt = 0; - hStereoTD->tdm_noop_mov_flag = 0; - hStereoTD->tdm_noop_cnt = 0; - hStereoTD->tdm_last_SM_flag = 0; - - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_FD2LRTD_SW_cnt = 0; - hStereoTD->tdm_LT_es_em = 0.1f; - hStereoTD->tdm_hyst_cnt = 0; - /* NOOP parameters */ - hStereoTD->tdm_lt_corr_RM_SM = 0.01f; - hStereoTD->tdm_lt_corr_LM_SM = 0.01f; - hStereoTD->tdm_last_ratio_SM = 0.5f; - hStereoTD->tdm_last_ratio_idx_SM = 0; - hStereoTD->tdm_lt_rms_L_SM = 40.0f; - hStereoTD->tdm_lt_rms_R_SM = 40.0f; - hStereoTD->tdm_last_diff_lt_corr_SM = 0; - hStereoTD->tdm_last_ener_lt_R_SM = 0; - hStereoTD->tdm_last_ener_lt_L_SM = 0; - hStereoTD->tdm_noop_mov_flag = 0; - hStereoTD->tdm_NOOP_cnt = 0; - hStereoTD->tdm_last_SM_flag_noop = 0; - hStereoTD->tdm_last_ratio_idx_SM = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_prev_stable_idx_SM = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_prev_desired_idx_SM = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_LT_es_em_SM = 0.1f; - hStereoTD->tdm_hyst_cnt_SM = 0; - hStereoTD->tdm_noop_cnt = 0; - hStereoTD->tdm_SM_flag = 0; - hStereoTD->tdm_SM_last_clas[0] = VOICED_CLAS; - hStereoTD->tdm_SM_last_clas[1] = VOICED_CLAS; - hStereoTD->tdm_SM_last2_clas[0] = VOICED_CLAS; - hStereoTD->tdm_SM_last2_clas[1] = VOICED_CLAS; - hStereoTD->tdm_SM_modi_flag = 0; - hStereoTD->tdm_SM_reset_flag = 0; - hStereoTD->prev_fr_LRTD_TD_dec = 0; - hStereoTD->tdm_LRTD_flag = 0; - hStereoTD->tdm_inst_ratio_idx = LRTD_STEREO_RIGHT_IS_PRIM; - hStereoTD->tdm_last_inst_ratio_idx = LRTD_STEREO_MID_IS_PRIM; - hStereoTD->tdm_last_LRTD_frame_cnt = 0; - hStereoTD->tdm_vad_hangover_cnt = 0; - hStereoTD->tdm_ini_frame_cnt = 0; - hStereoTD->tdm_last_LRTD_PriCh_cnt = 0; - - hStereoTD->flag_skip_DMX = 0; - if ( last_element_mode == IVAS_CPE_MDCT ) - { - hStereoTD->flag_skip_DMX = 1; - hStereoTD->prev_fr_LRTD_TD_dec = 1; - hStereoTD->tdm_last_ratio = 1.0f; - hStereoTD->tdm_last_ratio_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_prev_stable_idx = LRTD_STEREO_LEFT_IS_PRIM; - hStereoTD->tdm_prev_desired_idx = LRTD_STEREO_LEFT_IS_PRIM; - } - - hStereoTD->tdm_hBstr_tmp.ind_list = hStereoTD->tdm_ind_list_tmp; - hStereoTD->tdm_hBstr_tmp.ivas_ind_list_zero = (Indice **) ( &hStereoTD->tdm_hBstr_tmp.ind_list ); - hStereoTD->max_ind_tdm_tmp = MAX_IND_TDM_TMP; - hStereoTD->tdm_hBstr_tmp.ivas_max_num_indices = &hStereoTD->max_ind_tdm_tmp; - hStereoTD->tdm_hBstr_tmp.st_ivas = NULL; - reset_indices_enc( &hStereoTD->tdm_hBstr_tmp, MAX_IND_TDM_TMP ); - - return; -} -#endif void stereo_td_init_enc_fx( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i/o: TD stereo encoder handle */ const Word16 last_element_mode /* i : last element mode */ @@ -288,7 +202,6 @@ void stereo_td_init_enc_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * stereo_set_tdm() * @@ -457,176 +370,11 @@ ivas_error stereo_set_tdm_fx( return error; } -#else -/*-------------------------------------------------------------------* - * stereo_set_tdm() - * - * Set TD stereo encoder parameters - *-------------------------------------------------------------------*/ - -ivas_error stereo_set_tdm( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const int16_t input_frame /* i : input frame length per channel */ -) -{ - Encoder_State **sts; - sts = hCPE->hCoreCoder; - ivas_error error; - - error = IVAS_ERR_OK; - - /* initialize TD stereo parameters */ - if ( hCPE->hStereoTD != NULL ) - { - hCPE->hStereoTD->tdm_lp_reuse_flag = 0; - hCPE->hStereoTD->tdm_low_rate_mode = 0; - hCPE->hStereoTD->tdm_Pitch_reuse_flag = 0; - - if ( hCPE->hStereoClassif->lrtd_mode == 1 ) - { - /* initialize this flag when uncorrelated L&R channels have been detected in the previous frame */ - if ( hCPE->hStereoTD->prev_fr_LRTD_TD_dec == 1 || hCPE->last_element_mode != IVAS_CPE_TD || hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt < 5 ) - { - hCPE->hStereoTD->tdm_LRTD_flag = 1; - } - else - { - hCPE->hStereoTD->tdm_LRTD_flag = 0; - } - } - else - { - hCPE->hStereoTD->tdm_LRTD_flag = hCPE->hStereoTD->prev_fr_LRTD_TD_dec; - } - -#ifdef DEBUG_MODE_INFO - dbgwrite( &hCPE->hStereoTD->tdm_LRTD_flag, 2, 1, (int16_t) ( hCPE->hCoreCoder[0]->input_Fs / FRAMES_PER_SEC ), "res/tdm_LRTD_flag" ); -#endif - - - /* normal TD / LRTD switching */ - if ( hCPE->hStereoTD->tdm_LRTD_flag == 0 ) - { - Encoder_State *st; - st = hCPE->hCoreCoder[1]; - - /* deallocate CLDFB ana for secondary channel */ - if ( st->cldfbAnaEnc != NULL ) - { - deleteCldfb_ivas( &st->cldfbAnaEnc ); - } - - /* deallocate BWEs for secondary channel */ - if ( st->hBWE_TD != NULL ) - { - if ( st->hBWE_TD != NULL ) - { - free( st->hBWE_TD ); - st->hBWE_TD = NULL; - } - - deleteCldfb_ivas( &st->cldfbSynTd ); - - if ( st->hBWE_FD != NULL ) - { - free( st->hBWE_FD ); - st->hBWE_FD = NULL; - } - } - - /* allocate ICBWE structure */ - if ( hCPE->hStereoICBWE == NULL ) - { - if ( ( hCPE->hStereoICBWE = (STEREO_ICBWE_ENC_HANDLE) malloc( sizeof( STEREO_ICBWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Stereo ICBWE \n" ) ); - } - - stereo_icBWE_init_enc( hCPE->hStereoICBWE ); - } - } - else /* tdm_LRTD_flag == 1 */ - { - Encoder_State *st; - st = hCPE->hCoreCoder[1]; - - /* deallocate ICBWE structure */ - if ( hCPE->hStereoICBWE != NULL ) - { - free( hCPE->hStereoICBWE ); - hCPE->hStereoICBWE = NULL; - } - - /* allocate CLDFB ana for secondary channel */ - if ( st->cldfbAnaEnc == NULL ) - { -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbAnaEnc, CLDFB_ANALYSIS, st->input_Fs, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - } - - /* allocate BWEs for secondary channel */ - if ( st->hBWE_TD == NULL ) - { - if ( ( st->hBWE_TD = (TD_BWE_ENC_HANDLE) malloc( sizeof( TD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD BWE\n" ) ); - } -#ifdef IVAS_FLOAT_FIXED - if ( ( error = openCldfb_ivas_enc( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#else - if ( ( error = openCldfb_ivas( &st->cldfbSynTd, CLDFB_SYNTHESIS, 16000, CLDFB_PROTOTYPE_1_25MS ) ) != IVAS_ERR_OK ) -#endif - { - return error; - } - - InitSWBencBuffer( st->hBWE_TD ); - ResetSHBbuffer_Enc( st->hBWE_TD ); - - if ( ( st->hBWE_FD = (FD_BWE_ENC_HANDLE) malloc( sizeof( FD_BWE_ENC_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FD BWE\n" ) ); - } - - fd_bwe_enc_init( st->hBWE_FD ); - } - } - - if ( hCPE->hStereoClassif->lrtd_mode == 0 ) - { - hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt = 0; - } - hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt = min( 100, hCPE->hStereoTD->tdm_FD2LRTD_SW_cnt + 1 ); - stereo_tdm_prep_dwnmx( hCPE, sts[1]->input, input_frame ); - } - else - { -#ifdef DEBUG_MODE_INFO - { - int16_t tmp = -2; - dbgwrite( &tmp, 2, 1, (int16_t) ( hCPE->hCoreCoder[0]->input_Fs / FRAMES_PER_SEC ), "res/tdm_LRTD_flag" ); - } -#endif - hCPE->hCoreCoder[0]->tdm_LRTD_flag = 0; - hCPE->hCoreCoder[1]->tdm_LRTD_flag = 0; - } - - return error; -} - -#endif /*-------------------------------------------------------------------* * tdm_configure_enc() * * Configure TD stereo encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void tdm_configure_enc_fx( const Word16 ivas_format, /* i : IVAS format */ const Word16 ism_mode, /* i : ISM mode in combined format */ @@ -972,302 +720,43 @@ void tdm_configure_enc_fx( return; } -#else -void tdm_configure_enc( - const int16_t ivas_format, /* i : IVAS format */ - const int16_t ism_mode, /* i : ISM mode in combined format */ - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const float Etot_last[CPE_CHANNELS], /* i/o: Energy of last frame */ - const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag in TD stereo OR LRTD primary channel */ - const int16_t tdm_ratio_idx, /* i : ratio index */ - const int16_t tdm_ratio_idx_SM, /* i : ratio index in SM mode */ - const int16_t attack_flag, /* i : Primary channel attack flag */ - const int16_t nb_bits_metadata /* i : number of metadata bits */ -) -{ - int16_t tdm_ratio_bit_alloc_idx, mod_ct; - STEREO_TD_ENC_DATA_HANDLE hStereoTD; - Encoder_State **sts; - int16_t loc_coder_tyape_raw0; - hStereoTD = hCPE->hStereoTD; - sts = hCPE->hCoreCoder; - loc_coder_tyape_raw0 = sts[0]->coder_type_raw; +/*-------------------------------------------------------------------* + * signaling_enc_secondary() + * + * Signalling of the secondary channel + *-------------------------------------------------------------------*/ - /*----------------------------------------------------------------* - * Overwrite certain decisions depending on the input - *----------------------------------------------------------------*/ +ivas_error signaling_enc_secondary_fx( + Encoder_State *st, /* i/o: Encoder structure */ + const Word16 tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag OR LRTD primary channel */ + const Word16 tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag*/ +) +{ + Word16 ind; + BSTR_ENC_HANDLE hBstr = st->hBstr; + ivas_error error; - hStereoTD->tdm_use_IAWB_Ave_lpc = 0; /* Flag initialisation */ - sts[0]->hSpMusClas->tdm_lt_Etot = 0.1f * Etot_last[0] + 0.9f * sts[0]->hSpMusClas->tdm_lt_Etot; - sts[1]->hSpMusClas->tdm_lt_Etot = 0.1f * Etot_last[1] + 0.9f * sts[1]->hSpMusClas->tdm_lt_Etot; + error = IVAS_ERR_OK; + move32(); - if ( hCPE->hStereoClassif->lrtd_mode == 0 && ( ( sts[1]->hSpMusClas->tdm_lt_Etot < 0 && hCPE->hCoreCoder[1]->vad_flag == 0 ) /* very clean signal */ - || ( hCPE->hCoreCoder[1]->vad_flag == 0 || ( Etot_last[1] < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) ) ) - { - sts[1]->coder_type = INACTIVE; + /* The secondary channel band-witdh is always the same as the primary channel bandwidth */ - if ( hStereoTD->tdm_lp_reuse_flag == 0 && hCPE->hCoreCoder[0]->vad_flag != 0 ) - { - hStereoTD->tdm_use_IAWB_Ave_lpc = 1; - } - hStereoTD->tdm_lp_reuse_flag = 1; - } - else if ( ( ( hCPE->hCoreCoder[1]->vad_flag == 0 ) || ( hCPE->hCoreCoder[0]->vad_flag == 0 && Etot_last[1] < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) && ( hCPE->hStereoClassif->lrtd_mode == 1 ) /* && NO_DTX */ ) /* boths channels are inactive but not DTX used*/ - { - sts[1]->coder_type = INACTIVE; - if ( tdm_ratio_idx > 1 && tdm_ratio_idx < 29 ) - { - if ( hStereoTD->tdm_lp_reuse_flag == 0 && hCPE->hCoreCoder[0]->vad_flag != 0 ) - { - hStereoTD->tdm_use_IAWB_Ave_lpc = 1; - } - hStereoTD->tdm_lp_reuse_flag = 1; - } - } - else if ( !( sts[1]->sp_aud_decision0 ) && sts[1]->tc_cnt <= 0 && ( sts[1]->coder_type_raw == UNVOICED || ( hStereoTD->tdm_LRTD_flag == 1 && hStereoTD->tdm_lp_reuse_flag == 0 && ( hCPE->hCoreCoder[1]->vad_flag == 0 || ( Etot_last[1] < 30.0f && ( sts[0]->hSpMusClas->tdm_lt_Etot - sts[1]->hSpMusClas->tdm_lt_Etot ) > 26.0f ) ) ) ) ) + ind = st->coder_type; + move16(); + IF( EQ_16( tdm_Pitch_reuse_flag, 1 ) ) /* possible only for bitrate <= 24400 */ { - sts[1]->coder_type = UNVOICED; - if ( hStereoTD->tdm_LRTD_flag == 1 ) - { - hStereoTD->tdm_lp_reuse_flag = 0; - } + ind = 3; + move16(); } - else if ( ( sts[1]->coder_type < AUDIO && sts[1]->coder_type != UNVOICED ) || /* TC and VC are not supported in secondary channel */ - ( ( sts[1]->coder_type == AUDIO && hCPE->element_brate <= IVAS_24k4 ) || ( sts[0]->sp_aud_decision1 == 1 && hCPE->element_brate >= IVAS_16k4 ) || ( sts[1]->sp_aud_decision0 == 1 && hCPE->element_brate > IVAS_13k2 ) ) ) + ELSE IF( EQ_16( st->coder_type, GENERIC ) ) { - sts[1]->coder_type = GENERIC; + ind = 2; + move16(); } - else if ( sts[1]->coder_type == GENERIC && sts[1]->coder_type_raw == UNVOICED ) + ELSE IF( EQ_16( st->coder_type, AUDIO ) ) { - hStereoTD->tdm_lp_reuse_flag = 0; - } - - if ( hCPE->element_brate > IVAS_24k4 && hCPE->hStereoClassif->lrtd_mode == 1 ) - { - if ( sts[1]->coder_type == UNVOICED ) - { - sts[1]->coder_type = GENERIC; - } - - if ( sts[0]->coder_type == UNVOICED ) - { - sts[0]->coder_type = GENERIC; - loc_coder_tyape_raw0 = GENERIC; - } - } - - if ( hCPE->element_brate >= IVAS_24k4 && hCPE->hStereoClassif->lrtd_mode == 0 && sts[0]->coder_type == UNVOICED ) - { - sts[0]->coder_type = GENERIC; - loc_coder_tyape_raw0 = GENERIC; - } - - if ( sts[1]->coder_type != GENERIC ) - { - hStereoTD->tdm_Pitch_reuse_flag = 0; - } - - if ( attack_flag != 0 ) - { - if ( sts[1]->coder_type != INACTIVE ) - { - hStereoTD->tdm_lp_reuse_flag = 0; /* Do not allow the LP filter reusing on TC or attack in the primary channel */ - } - } - - if ( tdm_SM_or_LRTD_Pri && hStereoTD->tdm_LRTD_flag == 0 ) - { - tdm_ratio_bit_alloc_idx = tdm_ratio_idx_SM; - } - else - { - tdm_ratio_bit_alloc_idx = tdm_ratio_idx; - } - - if ( ( hCPE->hStereoClassif->lrtd_mode == 1 && sts[1]->coder_type >= UNVOICED && abs( hStereoTD->tdm_last_ratio_idx - tdm_ratio_bit_alloc_idx ) > 15 ) /* channel inversion in lrtd */ - || ( hStereoTD->tdm_FD2LRTD_SW_cnt < 4 && hStereoTD->tdm_last_LRTD_frame_cnt < 4 ) ) - { - sts[1]->coder_type = GENERIC; - } - - if ( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus < 12000 ) - { - if ( sts[1]->coder_type == UNVOICED ) - { - sts[1]->coder_type = GENERIC; - } - hStereoTD->tdm_lp_reuse_flag = 1; - - if ( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus < 11000 ) - { - sts[1]->coder_type = INACTIVE; - } - } - - if ( hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus < 14700 ) - { - if ( sts[0]->coder_type == TRANSITION ) - { - sts[0]->coder_type = GENERIC; - } - } - - mod_ct = AUDIO; - if ( hCPE->element_brate < IVAS_24k4 ) - { - mod_ct = sts[0]->coder_type; - /* Only sure TRANSITION coding modes are important for bit allocation, otherwise mod_ct is set to AUDIO only to easy debugging if needed */ - if ( ( ( sts[0]->last_L_frame >= L_FRAME16k && sts[0]->flag_ACELP16k == 0 ) || ( sts[0]->last_L_frame == L_FRAME && sts[0]->flag_ACELP16k == 1 ) ) && sts[0]->last_core_brate != FRAME_NO_DATA && sts[0]->last_core_brate != SID_2k40 && sts[0]->coder_type_raw != VOICED /*in case of CNG, this code is not reached sts[0]->core_brate != FRAME_NO_DATA && sts[0]->core_brate != SID_2k40 &&*/ ) - { - mod_ct = TRANSITION; - } - else if ( sts[0]->sp_aud_decision1 == 1 || sts[0]->sp_aud_decision2 == 1 || mod_ct != TRANSITION ) - { - mod_ct = AUDIO; - } - } - - /* Correction of tdm_inst_ratio_idx in case of TC in the seecondary channel */ - if ( hStereoTD->flag_skip_DMX == 0 && hStereoTD->tdm_LRTD_flag == 1 && sts[1]->tc_cnt > 1 /*&& abs(hStereoTD->tdm_inst_ratio_idx-LRTD_STEREO_MID_IS_PRIM) > 5*/ ) - { - if ( tdm_SM_or_LRTD_Pri == 0 ) /* Primary is right */ - { - hStereoTD->tdm_inst_ratio_idx += LRTD_STEREO_QUARTER_RANGE; - } - else if ( tdm_SM_or_LRTD_Pri == 1 ) /* Primary is left */ - { - hStereoTD->tdm_inst_ratio_idx -= LRTD_STEREO_QUARTER_RANGE; - } - hStereoTD->tdm_inst_ratio_idx = check_bounds_s( hStereoTD->tdm_inst_ratio_idx, 8, 22 ); - } - - /*----------------------------------------------------------------* - * bitbudget distribution between channels (taking into account also metadata bitbudget) - *----------------------------------------------------------------*/ - - tdm_bit_alloc( ivas_format, ism_mode, hCPE->element_brate - nb_bits_metadata * FRAMES_PER_SEC + hCPE->brate_surplus, - hStereoTD->tdm_lp_reuse_flag, &( sts[0]->total_brate ), &( sts[1]->total_brate ), - &( hStereoTD->tdm_low_rate_mode ), sts[1]->coder_type, tdm_ratio_bit_alloc_idx, hStereoTD->tdm_Pitch_reuse_flag, - sts[0]->bwidth, sts[1]->bwidth, sts[0]->flag_ACELP16k, hStereoTD->tdm_LRTD_flag, mod_ct, hStereoTD->tdm_inst_ratio_idx ); - - if ( sts[0]->GSC_IVAS_mode > 0 && sts[0]->total_brate <= STEREO_GSC_BIT_RATE_ALLOC ) - { - sts[0]->GSC_IVAS_mode = 0; - } - if ( sts[1]->GSC_IVAS_mode > 0 && ( sts[1]->total_brate <= STEREO_GSC_BIT_RATE_ALLOC || hStereoTD->tdm_low_rate_mode == 1 ) ) - { - sts[1]->GSC_IVAS_mode = 0; - } - - if ( sts[0]->coder_type == GENERIC && loc_coder_tyape_raw0 == UNVOICED ) - { - if ( sts[0]->total_brate <= MAX_UNVOICED_BRATE ) - { - sts[0]->coder_type = UNVOICED; - } - } - - /*----------------------------------------------------------------* - * Bitstream writing - *----------------------------------------------------------------*/ - - /* transmit the ratio index */ - if ( tdm_SM_or_LRTD_Pri && hStereoTD->tdm_LRTD_flag == 0 ) - { - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_TD_ALPHA, tdm_ratio_idx_SM, TDM_RATIO_BITS ); - } - else - { - if ( hStereoTD->tdm_LRTD_flag == 1 ) - { - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_TD_ALPHA, hStereoTD->tdm_inst_ratio_idx, TDM_RATIO_BITS ); - } - else - { - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_TD_ALPHA, tdm_ratio_idx, TDM_RATIO_BITS ); - } - } - - /* LPC reuse flag */ - if ( sts[1]->coder_type == INACTIVE && tdm_ratio_idx < 29 && tdm_ratio_idx > 1 ) - { - /* normal TD, tdm_lp_reuse_flag always on, tdm_use_IAWB_Ave_lpc varies tdm_ratio_idx<29 && tdm_ratio_idx> 1*/ - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_LPC_REUSE, hStereoTD->tdm_use_IAWB_Ave_lpc, TDM_LP_REUSE_BITS ); - } - else - { - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_LPC_REUSE, hStereoTD->tdm_lp_reuse_flag, TDM_LP_REUSE_BITS ); - } - - /* LRTD flag */ - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_LRTD_FLAG, hStereoTD->tdm_LRTD_flag, TDM_LR_CONTENT_BITS ); - - /* Stereo ICA parameters */ - if ( hStereoTD->tdm_LRTD_flag == 0 ) - { - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_REFCHAN, hCPE->hStereoTCA->refChanIndx, STEREO_BITS_TCA_CHAN ); - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_CORRSTATS, hCPE->hStereoTCA->indx_ica_NCShift, STEREO_BITS_TCA_CORRSTATS ); - push_indice( &hStereoTD->tdm_hBstr_tmp, IND_STEREO_GD, hCPE->hStereoTCA->indx_ica_gD, STEREO_BITS_TCA_GD ); - } - - - /*----------------------------------------------------------------* - * Updates - *----------------------------------------------------------------*/ - - hStereoTD->tdm_last_ratio_idx = tdm_ratio_idx; - hStereoTD->tdm_last_ratio_idx_SM = tdm_ratio_idx_SM; - hStereoTD->tdm_last_SM_flag = tdm_SM_or_LRTD_Pri; - - if ( hStereoTD->tdm_LRTD_flag == 1 ) - { - hStereoTD->tdm_last_SM_flag = 0; - } - - hStereoTD->tdm_last_inst_ratio_idx = hStereoTD->tdm_inst_ratio_idx; - - return; -} -#endif - -/*-------------------------------------------------------------------* - * signaling_enc_secondary() - * - * Signalling of the secondary channel - *-------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -ivas_error signaling_enc_secondary_fx( - Encoder_State *st, /* i/o: Encoder structure */ - const Word16 tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag OR LRTD primary channel */ - const Word16 tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag*/ -) -{ - Word16 ind; - BSTR_ENC_HANDLE hBstr = st->hBstr; - ivas_error error; - - error = IVAS_ERR_OK; - move32(); - - /* The secondary channel band-witdh is always the same as the primary channel bandwidth */ - - ind = st->coder_type; - move16(); - IF( EQ_16( tdm_Pitch_reuse_flag, 1 ) ) /* possible only for bitrate <= 24400 */ - { - ind = 3; - move16(); - } - ELSE IF( EQ_16( st->coder_type, GENERIC ) ) - { - ind = 2; - move16(); - } - ELSE IF( EQ_16( st->coder_type, AUDIO ) ) - { - ind = sub( ind, 2 ); + ind = sub( ind, 2 ); } ind = shl( ind, 1 ); @@ -1293,86 +782,13 @@ ivas_error signaling_enc_secondary_fx( return error; } -#else -ivas_error signaling_enc_secondary( - Encoder_State *st, /* i/o: Encoder structure */ - const int16_t tdm_SM_or_LRTD_Pri, /* i : channel combination scheme flag OR LRTD primary channel */ - const int16_t tdm_Pitch_reuse_flag /* i : primary channel pitch reuse flag*/ -) -{ - int16_t ind; - BSTR_ENC_HANDLE hBstr = st->hBstr; - ivas_error error; - - error = IVAS_ERR_OK; - - /* The secondary channel band-witdh is always the same as the primary channel bandwidth */ - - ind = st->coder_type; - if ( tdm_Pitch_reuse_flag == 1 ) /* possible only for bitrate <= 24400 */ - { - ind = 3; - } - else if ( st->coder_type == GENERIC ) - { - ind = 2; - } - else if ( st->coder_type == AUDIO ) - { - ind -= 2; - } - - ind <<= 1; - ind += tdm_SM_or_LRTD_Pri; /* addition of the channel combination scheme flag value or the LRTD primary channel*/ - push_indice( hBstr, IND_STEREO_2ND_CODER_T, ind, TDM_SECONDARY_SIGNALLING ); - - /* write extension layer flag to distinguish between TBE (0) and BWE (1) */ - if ( st->extl_brate > 0 ) - { - if ( st->extl == WB_TBE || st->extl == SWB_TBE || st->extl == FB_TBE ) - { - push_indice( hBstr, IND_BWE_FLAG, 0, 1 ); - } - else if ( st->extl == WB_BWE || st->extl == SWB_BWE || st->extl == FB_BWE ) - { - push_indice( hBstr, IND_BWE_FLAG, 1, 1 ); - } - } - - return error; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function tdm_downmix_plain() * * downmix Left+Right to Primary+Secondary channel *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tdm_downmix_plain( - float FR_Y[], /* o : primary channel */ - float LR_X[], /* o : secondary channel */ - const float Left_in[], /* i : Left channel */ - const float Right_in[], /* i : Right channel */ - const float ratio_L, /* i : mixing ratio */ - const float One_m_Ratio, /* i : 1 - mixing ration */ - const int16_t start_index, /* i : start index */ - const int16_t end_index /* i : end index */ -) -{ - int16_t i; - - for ( i = start_index; i < end_index; i++ ) - { - FR_Y[i] = ( Right_in[i] * One_m_Ratio + ( Left_in[i] * ratio_L ) ); - LR_X[i] = ( Left_in[i] * One_m_Ratio - ( Right_in[i] * ratio_L ) ); - } - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void tdm_downmix_plain_ivas_fx( Word16 FR_Y_fx[], /*Qx*/ Word16 LR_X_fx[], /*Qx*/ @@ -1396,47 +812,12 @@ static void tdm_downmix_plain_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* * Function tdm_downmix_fade() * * downmix Left+Right to Primary+Secondary channel with fade in/out *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void tdm_downmix_fade( - float FR_Y[], /* o : primary channel */ - float LR_X[], /* o : secondary channel */ - const float Left_in[], /* i : Left channel */ - const float Right_in[], /* i : Right channel */ - const float ratio_L, /* i : mixing ratio */ - const float One_m_Ratio, /* i : 1 - mixing ratio */ - const float OldRatio_L, /* i : old mixing ratio */ - const float One_m_OldRatio, /* i : 1 - old mixing ratio */ - const int16_t start_index, /* i : start index */ - const int16_t end_index /* i : end index */ -) -{ - int16_t i; - float step, fade_in, fade_out; - - step = 1.0f / (float) ( end_index - start_index ); - fade_out = 1.0f; - fade_in = 0.0f; - - for ( i = start_index; i < end_index; i++ ) - { - FR_Y[i] = ( Right_in[i] * One_m_OldRatio + Left_in[i] * OldRatio_L ) * fade_out + ( Right_in[i] * One_m_Ratio + Left_in[i] * ratio_L ) * fade_in; - LR_X[i] = ( Left_in[i] * One_m_OldRatio - Right_in[i] * OldRatio_L ) * fade_out + ( Left_in[i] * One_m_Ratio - Right_in[i] * ratio_L ) * fade_in; - - fade_in += step; - fade_out -= step; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void tdm_downmix_fade_ivas_fx( Word16 FR_Y_fx[], /* o : primary channel Qx */ Word16 LR_X_fx[], /* o : secondary channel Qx */ @@ -1483,7 +864,6 @@ static void tdm_downmix_fade_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -1491,117 +871,6 @@ static void tdm_downmix_fade_ivas_fx( * * Compute the TD stereo downmix signal based on the ratio index *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void stereo_tdm_downmix( - STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i : TD stereo IVAS encoder structure */ - float *Left_in, /* i/o: Left channel -> Primary channel */ - float *Right_in, /* i/o: Right channel -> Secondary channel */ - const int16_t input_frame, /* i : Number of samples */ - const int16_t tdm_ratio_idx, /* i : TDM ratio index */ - const int16_t tdm_SM_flag, /* i : channel combination scheme flag */ - const int16_t tdm_ratio_idx_SM /* i : TDM ratio index for SM mode */ -) -{ - float FR_Y[L_FRAME48k], LR_X[L_FRAME48k]; - int16_t i, tdm_n_OVA; - int16_t stereo_tdm_coder_type; - - tdm_n_OVA = NS2SA( input_frame * FRAMES_PER_SEC, TDM_L_NOVA_NS ); - - if ( hStereoTD->flag_skip_DMX ) - { - stereo_tdm_coder_type = 10; /* no DMX */ - mvr2r( Left_in, FR_Y, input_frame ); - mvr2r( Right_in, LR_X, input_frame ); - } - else if ( tdm_SM_flag == 1 ) - { - if ( hStereoTD->tdm_last_SM_flag == 0 ) - { - stereo_tdm_coder_type = 0; /* mode 1 : Switching from YX scheme to SM scheme*/ - } - else - { - stereo_tdm_coder_type = 1; /* mode 2 : SM scheme*/ - } - } - else - { - if ( hStereoTD->tdm_last_SM_flag == 1 ) - { - stereo_tdm_coder_type = 2; /* mode 3 : Switching from SM scheme to YX scheme*/ - } - else - { - stereo_tdm_coder_type = 3; /* mode 4 : YX scheme*/ - } - } - - switch ( stereo_tdm_coder_type ) - { - case ( 0 ): - { - /* Switching from YX scheme to SM scheme */ - tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, hStereoTD->tdm_last_ratio, 1.0f - hStereoTD->tdm_last_ratio, 0, tdm_n_OVA ); - - /* Create new mixture of using the ratio computed above and formular for SM scheme */ - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, tdm_n_OVA, input_frame ); - } - break; - case ( 1 ): - { - /* Create new mixture of using the ratio computed above and formular for SM scheme */ - if ( tdm_ratio_tabl[tdm_ratio_idx_SM] == hStereoTD->tdm_last_ratio_SM ) - { - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, 0, input_frame ); - } - else - { - tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, hStereoTD->tdm_last_ratio_SM, hStereoTD->tdm_last_ratio_SM - 1.0f, 0, tdm_n_OVA ); - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx_SM], tdm_ratio_tabl[tdm_ratio_idx_SM] - 1.0f, tdm_n_OVA, input_frame ); - } - } - break; - case ( 2 ): - { - /* Switching from SM scheme to YX scheme */ - tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], hStereoTD->tdm_last_ratio_SM, hStereoTD->tdm_last_ratio_SM - 1.0f, 0, tdm_n_OVA ); - - /* Create new mixture of using the ratio computed above and formular for YX scheme */ - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], tdm_n_OVA, input_frame ); - } - break; - case ( 3 ): - { - /* Create new mixture of using the ratio computed above and formular for YX scheme */ - if ( tdm_ratio_tabl[tdm_ratio_idx] == hStereoTD->tdm_last_ratio ) - { - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], 0, input_frame ); - } - else - { - tdm_downmix_fade( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], hStereoTD->tdm_last_ratio, 1.0f - hStereoTD->tdm_last_ratio, 0, tdm_n_OVA ); - tdm_downmix_plain( FR_Y, LR_X, Left_in, Right_in, tdm_ratio_tabl[tdm_ratio_idx], 1.0f - tdm_ratio_tabl[tdm_ratio_idx], tdm_n_OVA, input_frame ); - } - } - break; - default: - break; - } - - for ( i = 0; i < input_frame; i++ ) - { - Left_in[i] = FR_Y[i]; - Right_in[i] = LR_X[i]; - } - - hStereoTD->tdm_last_ratio = tdm_ratio_tabl[tdm_ratio_idx]; - hStereoTD->tdm_last_ratio_SM = tdm_ratio_tabl[tdm_ratio_idx_SM]; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED void stereo_tdm_downmix_ivas_fx( STEREO_TD_ENC_DATA_HANDLE hStereoTD, /* i : TD stereo IVAS encoder structure */ Word16 *Left_in_fx, /* Qx */ @@ -1724,9 +993,7 @@ void stereo_tdm_downmix_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Function stereo_tdm_prep_dwnmx() * @@ -1782,49 +1049,3 @@ void stereo_tdm_prep_dwnmx_fx( return; } -#else -/*-------------------------------------------------------------------* - * Function stereo_tdm_prep_dwnmx() - * - * Reactivate downmixing after bitrate switching from MDCT to lower rate - *-------------------------------------------------------------------*/ - -void stereo_tdm_prep_dwnmx( - CPE_ENC_HANDLE hCPE, /* i : CPE encoder structure */ - const float *input1, /* i : right channel input */ - const int16_t input_frame /* i : frame lenght */ -) -{ -#define USER_ENER - float mener; - int16_t i, sw_pos, enr_len; - Encoder_State **sts; - sts = hCPE->hCoreCoder; - - i = input_frame / L_FRAME16k; - - sw_pos = 22 * i; - enr_len = 6 * i; - if ( hCPE->element_mode == IVAS_CPE_TD ) - { - if ( hCPE->hStereoTD->flag_skip_DMX == 1 ) /* hStereoTD is defined only if element mode == TD */ - { - if ( hCPE->last_element_mode == IVAS_CPE_TD ) - { - mener = sum2_f( input1 + input_frame - sw_pos, enr_len ) + EPSILON; - mener = sqrtf( mener / enr_len ); - if ( mener < 10.0f && ( sts[1]->vad_flag == 0 || sts[1]->coder_type_raw == UNVOICED ) ) - { - hCPE->hStereoTD->flag_skip_DMX = 0; /* Can start using the TD downmix whenever the right channel is sufficiently low energy to limit switching artefacts */ - } - } - else if ( hCPE->last_element_mode == IVAS_CPE_DFT || hCPE->last_element_brate == IVAS_13k2 ) /* Just security check, should not happened */ - { - hCPE->hStereoTD->flag_skip_DMX = 0; - } - } - } - - return; -} -#endif diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index 466d98b46..b944816a9 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -40,13 +40,11 @@ #include "basop_proto_func.h" #include "wmc_auto.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "prot_fx_enc.h" #include "rom_com_fx.h" #include "ivas_prot_fx.h" -#endif /*-------------------------------------------------------------------* * stereo_tcx_init_enc() @@ -54,7 +52,6 @@ * Initialize stereo TCX encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tcx_init_enc_fx( Encoder_State *st /* i/o: encoder state structure */ ) @@ -150,75 +147,6 @@ void stereo_tcx_init_enc_fx( return; } -#else - -void stereo_tcx_init_enc( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - int16_t prev_IsTNSAllowed; - assert( st->core_brate != SID_2k40 && st->core_brate != FRAME_NO_DATA ); - - /* Get the raw coder type from signal analysis*/ - st->coder_type = st->coder_type_raw; - if ( !st->localVAD ) - { - st->coder_type = INACTIVE; - } - else if ( st->coder_type > GENERIC ) - { - st->coder_type = GENERIC; - } - - if ( st->tcxonly ) - { - st->coder_type = GENERIC; - } - - st->hTcxCfg->coder_type = st->coder_type; - if ( !st->tcxonly && !st->localVAD && st->hTcxCfg->coder_type == GENERIC ) - { - st->hTcxCfg->coder_type = UNVOICED; - } - - /*sampling rate*/ - st->sr_core = getCoreSamplerateMode2_flt( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->flag_ACELP16k, st->rf_mode, st->is_ism_format ); - st->fscale = sr2fscale( st->sr_core ); - - /*frame size*/ - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - st->hTcxEnc->L_frameTCX = (int16_t) ( st->input_Fs / FRAMES_PER_SEC ); - - if ( ( st->L_frame == L_FRAME16k && ( st->bits_frame_nominal * FRAMES_PER_SEC ) <= MAX_ACELP_BRATE ) || ( st->tcxonly && ( st->sr_core == INT_FS_16k || st->sr_core == INT_FS_16k ) ) ) - { - st->nb_subfr = NB_SUBFR16k; - } - else - { - st->nb_subfr = NB_SUBFR; - } - - /*TCX tools*/ - st->hTcxCfg->ctx_hm = getCtxHm( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_mode ); - st->hTcxCfg->resq = getResq( st->bits_frame_nominal * FRAMES_PER_SEC ); - st->hTcxEnc->tcx_lpc_shaped_ari = getTcxLpcShapedAri( st->bits_frame_nominal * FRAMES_PER_SEC, st->rf_mode, st->element_mode ); - st->igf = getIgfPresent( st->element_mode, st->bits_frame_nominal * FRAMES_PER_SEC, st->bwidth, st->rf_mode ); - prev_IsTNSAllowed = st->hTcxCfg->fIsTNSAllowed; - if ( st->element_mode != EVS_MONO ) - { - st->hTcxCfg->fIsTNSAllowed = getTnsAllowed( st->bits_frame_nominal * FRAMES_PER_SEC, st->igf, st->element_mode ); - } - if ( !prev_IsTNSAllowed && st->hTcxCfg->fIsTNSAllowed && st->element_mode == IVAS_CPE_DFT ) /* may happen in unified stereo when switching stereo technologies */ - { - InitTnsConfigs_flt( st->bwidth, st->hTcxCfg->tcx_coded_lines, st->hTcxCfg->tnsConfig, st->hIGFEnc->infoStopFrequency, st->bits_frame_nominal * FRAMES_PER_SEC, st->element_mode, 0 ); - - SetAllowTnsOnWhite_flt( st->hTcxCfg->tnsConfig, 0 ); - } - st->core_brate = st->total_brate; - - return; -} -#endif /*-------------------------------------------------------------------* * stereo_tcx_core_enc() @@ -226,7 +154,6 @@ void stereo_tcx_init_enc( * Stereo TCX encoder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void stereo_tcx_core_enc( Encoder_State *st, /* i/o: encoder state structure */ const Word16 new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ @@ -813,395 +740,6 @@ void stereo_tcx_core_enc( pop_wmops(); return; } -#else -void stereo_tcx_core_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float new_samples_12k8[], /* i : buffer of input signal @12.8 kHz */ - const float new_samples_16k[], /* i : buffer of input signal @16 kHz */ - const float Aw[], /* i : weighted A(z) unquant. for subframes*/ - float lsp_new[], /* i : LSPs at the end of the frame */ - float lsp_mid[], /* i : LSPs in the middle of the frame */ - float pitch_buf[NB_SUBFR16k], /* o : floating pitch for each subframe */ - const int16_t last_element_mode, /* i : last element mode */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - TCX_ENC_HANDLE hTcxEnc; - int16_t i, n; - - /*size and windowing*/ - const float *p_new_samples; - int16_t n_subframes; - int16_t last_core_orig; - - /*Bits*/ - int16_t nbits_start, total_nbbits, nbits_header; - int16_t target_bits[2], bitsAvailable; - int16_t nbits_lpc[2]; - int16_t tnsSize[2]; /* number of tns parameters put into prm */ - int16_t tnsBits[2]; /* number of tns bits in the frame */ - int16_t ltpBits; - - /*Parameters*/ - int16_t param_lpc[NPRM_LPC_NEW]; - int16_t param_core[2 * NPRM_DIV]; - int16_t bits_param_lpc[10], no_param_lpc; - - /*LPC*/ - float lsf_q[M], lsp_q[M], lsp[M], lsf[M]; - float lspmid_q[M]; - float A_q[M + 1]; - float gainlpc[2][FDNS_NPTS]; - float lsp_tcx_q[M], lsf_tcx_q[M]; - int16_t tcx_lpc_cdk; - Word16 A_q_ind[M + 1]; /*for LPC-based AC*/ - Word16 lspq_ind[M]; /*for LPC-based AC*/ - - /*TCX-LTP*/ - int16_t T_op[3]; - - /*HM*/ - int16_t indexBuffer[2 * ( ( N_MAX / 2 ) + 1 )]; - - CONTEXT_HM_CONFIG hm_cfg[2]; - - /* bitstream */ - BSTR_ENC_HANDLE hBstr = st->hBstr; - - - push_wmops( "stereo_tcx_core_enc" ); - - /*Sanity check*/ - assert( st->mdct_sw == MODE1 && "MDCT switching should be in TCX MODE 1\n" ); - assert( st->rf_mode == 0 && "Channel aware not supported! " ); - - no_param_lpc = 0; - n_subframes = 1; - - hTcxEnc = st->hTcxEnc; - - /*--------------------------------------------------------------* - * Configuration of TCX - *---------------------------------------------------------------*/ - - stereo_tcx_init_enc( st ); - - /*--------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - /* Subtract the bits of common header */ - st->bits_frame_core = (int16_t) ( st->total_brate / FRAMES_PER_SEC ) - hBstr->nb_bits_tot; - - /*Get Bits of TCX header*/ - nbits_header = 3; /* Coder types (2) + last_core for bfi (1) */ - - if ( st->tcxonly ) - { - /* TCX20/10 flag */ - nbits_header++; - } - - /* bits for TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - nbits_header += ( st->hTcxCfg->tcx_curr_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_curr_overlap_mode == MIN_OVERLAP ) ? 2 : 1; - - hm_cfg[0].indexBuffer = &indexBuffer[0]; - hm_cfg[1].indexBuffer = &indexBuffer[N_MAX / 2 + 1]; - - set_s( tnsSize, 0, 2 ); - set_s( tnsBits, 0, 2 ); - set_s( nbits_lpc, 0, 2 ); - ltpBits = 0; - - for ( i = 0; i < 3; i++ ) - { - T_op[i] = st->pitch[i]; - - /* check minimum pitch for quantization */ - if ( T_op[i] < PIT_MIN_SHORTER ) - { - T_op[i] *= 2; - } - - /* convert pitch values to core sampling-rate */ - if ( st->L_frame != L_FRAME ) - { - T_op[i] = (int16_t) ( T_op[i] * (float) st->L_frame / (float) L_FRAME + 0.5f ); - } - } - - if ( st->L_frame == L_FRAME ) - { - p_new_samples = new_samples_12k8; - } - else - { - p_new_samples = new_samples_16k; - } - - /*--------------------------------------------------------------* - * TCX20/TCX10 switching decision - *---------------------------------------------------------------*/ - - if ( hTcxEnc->tcxMode == TCX_10 ) - { - st->core = TCX_10_CORE; - n_subframes = 2; - nbits_header += ( st->hTcxCfg->tcx_last_overlap_mode == HALF_OVERLAP || st->hTcxCfg->tcx_last_overlap_mode == MIN_OVERLAP ) ? 2 : 1; - } - else if ( hTcxEnc->tcxMode == TCX_20 ) - { - st->core = TCX_20_CORE; - n_subframes = 1; - } - - nbits_start = hBstr->nb_bits_tot; - - /*--------------------------------------------------------------------------------* - * Write TCX signaling - *--------------------------------------------------------------------------------*/ - - /* TCX20/TCX10 and coder type */ - writeTCXMode( st, hBstr, 0, /* MCT_flag */ &nbits_start ); - - /* write last_core for error concealment */ - push_next_indice( hBstr, ( st->last_core != ACELP_CORE || st->core == TCX_10_CORE ), 1 ); - - /* write TCX overlap mode (1 bit: full, 2 bits: half or no overlap) */ - writeTCXWindowing( hBstr, st->hTcxCfg->tcx_curr_overlap_mode ); - if ( st->core == TCX_10_CORE ) - { - writeTCXWindowing( hBstr, st->hTcxCfg->tcx_last_overlap_mode ); - } - - assert( nbits_header == ( hBstr->nb_bits_tot - nbits_start ) ); - - /*--------------------------------------------------------------* - * Core Signal Analysis: MDCT, TNS, LPC analysis - *---------------------------------------------------------------*/ - - core_signal_analysis_high_bitrate( p_new_samples, T_op, lsp_new, lsp_mid, st, NULL, tnsSize, tnsBits, param_core, <pBits, NULL, st->L_frame, hTcxEnc->L_frameTCX, last_element_mode, vad_hover_flag ); - - bitsAvailable = st->bits_frame_core - nbits_header; - if ( st->igf ) - { - bitsAvailable -= st->hIGFEnc->infoTotalBitsWritten; - } - - /*--------------------------------------------------------------* - * Envelope Quantization and FDNS - *---------------------------------------------------------------*/ - - if ( !st->enableTcxLpc ) - { - if ( st->envWeighted ) - { - /* Unweight the envelope */ - E_LPC_lsp_unweight_float( st->lsp_old, st->lsp_old, st->lsf_old, 1.0f / st->gamma_flt ); - st->envWeighted = 0; - } - - lpc_quantization( st, lsp_new, lsp_mid, lsp_q, lsf_q, lspmid_q, AUDIO, 0, /*No acelp->no need to compute any mid-LPC*/ - param_lpc, nbits_lpc, bits_param_lpc, &no_param_lpc ); - - /*--------------------------------------------------------------* - * Rate switching - *--------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - mvr2r( lsp_q, st->lsp_old, M ); - mvr2r( lsf_q, st->lsf_old, M ); - } - } - - last_core_orig = st->last_core; - - for ( n = 0; n < n_subframes; n++ ) - { - /* Get the envelope */ - if ( st->enableTcxLpc ) - { - tcx_lpc_cdk = tcxlpc_get_cdk_float( st->hTcxCfg->coder_type ); - - /* Get the envelope corresponding to the current frame */ - E_LPC_int_lpc_tcx_float( st->lspold_enc, lsp_new, A_q ); - - /* Weight the envelope */ - weight_a( A_q, A_q, st->gamma_flt, M ); - - /* Convert to lsp and lsf */ - float lsp[M]; - a2lsp_stab( A_q, lsp, lsp_new ); - lsp2lsf( lsp, lsf, M, INT_FS_12k8 ); - - /* Quantize */ - Q_lsf_tcxlpc( lsf, lsf_tcx_q, lspq_ind, param_lpc, st->narrowBand, tcx_lpc_cdk, st->mem_MA, st->hTcxCfg->coder_type, st->Bin_E ); - - /* Account for consumed bits */ - nbits_lpc[0] = TCXLPC_NUMBITS; - if ( param_lpc[0] ) - { - nbits_lpc[0] += TCXLPC_IND_NUMBITS; - } - - /* Convert quantized lsf to lsp and A */ - lsf2lsp( lsf_tcx_q, lsp_tcx_q, M, INT_FS_12k8 ); - lsp2a_stab( lsp_tcx_q, A_q, M ); - } - else if ( !st->tcxonly ) - { - E_LPC_int_lpc_tcx_float( st->lsp_old, lsp_q, A_q ); - } - else if ( n + 2 == n_subframes ) /* First TCX10/5 subframe */ - { - lsp2a_stab( lspmid_q, A_q, M ); - } - else - { - lsp2a_stab( lsp_q, A_q, M ); - } - - if ( hTcxEnc->tcx_lpc_shaped_ari ) - { - basop_E_LPC_f_lsp_a_conversion( lspq_ind, A_q_ind, M ); - } - - bitsAvailable -= nbits_lpc[n]; - - /* Shape spectrum */ - ShapeSpectrum( st->hTcxCfg, A_q, gainlpc[n], st->L_frame / n_subframes, st->hTcxCfg->tcx_coded_lines / n_subframes, hTcxEnc->spectrum[n], hTcxEnc->fUseTns[n], st, NULL ); - - st->last_core = st->core; - } - - st->last_core = last_core_orig; - - /*--------------------------------------------------------------------------------* - * Write LPC parameters - *--------------------------------------------------------------------------------*/ - - writeLPCparam( st, hBstr, param_lpc, bits_param_lpc, no_param_lpc, &total_nbbits ); - - assert( total_nbbits == ( nbits_lpc[0] + nbits_lpc[1] ) ); - - /*--------------------------------------------------------------* - * Run TCX10/20 Core - *---------------------------------------------------------------*/ - - hTcxEnc->measuredBwRatio_flt = 1.f; - - for ( n = 0; n < n_subframes; n++ ) - { - target_bits[n] = ( bitsAvailable + ( n_subframes - 1 ) - n ) / n_subframes - tnsBits[n]; - - if ( st->enablePlcWaveadjust && ( n == n_subframes - 1 ) ) - { - target_bits[n] -= 1; - } - if ( n == 0 ) - { - target_bits[n] -= ltpBits; - } - - /* Run TCX20/10 encoder */ - QuantizeSpectrum( st, A_q, A_q_ind, gainlpc[n], st->synth_flt + n * st->L_frame / n_subframes, target_bits[n], tnsSize[n], param_core + n * NPRM_DIV, n, &hm_cfg[n], vad_hover_flag ); - } - - /* Update tcx overlap mode */ - st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - - coder_tcx_post( st, A_q, Aw ); - - if ( st->enableTcxLpc ) - { - E_LPC_lsp_unweight_float( lsp_tcx_q, lsp_q, lsf_q, 1.0f / st->gamma_flt ); /* Update lsf_q for encoderSideLossSimulation() */ - } - - /* Update lsp/lsf memory */ - if ( st->enableTcxLpc && st->core != ACELP_CORE ) - { - /* Update lsf / lsp memory */ - mvr2r( lsf_tcx_q, st->lsf_old, M ); - mvr2r( lsp_tcx_q, st->lsp_old, M ); - st->envWeighted = 1; - - /* Update ACELP quantizer state */ - lsf_update_memory_float( st->narrowBand, st->lsf_old, st->mem_MA, st->mem_MA ); - st->pstreaklen = 0; - st->streaklimit = 1.0f; - /* check resonance for pitch clipping algorithm */ - gp_clip_test_lsf( st->element_mode, st->core_brate, st->lsf_old, st->clip_var, 0 ); - mvr2r( st->lsf_old, st->mem_AR, M ); - } - else - { - mvr2r( lsf_q, st->lsf_old, M ); - mvr2r( lsp_q, st->lsp_old, M ); - } - - if ( st->Opt_DTX_ON && !st->tcxonly && st->hTdCngEnc != NULL ) - { - /* update CNG parameters in active frames */ - if ( st->bwidth == NB && st->enableTcxLpc && st->core != ACELP_CORE ) - { - float buf[L_LP], res[L_FRAME], A[M + 1], r[M + 1], tmp, lsptmp[M]; - - assert( st->L_frame == L_FRAME ); - - mvr2r( st->synth_flt + L_FRAME - L_LP, buf, L_LP ); - tmp = st->synth_flt[L_FRAME - L_LP - 1]; - preemph( buf, st->preemph_fac_flt, L_LP, &tmp ); - autocorr( buf, r, M, L_LP, LP_assym_window, 0, 0, 0 ); - lag_wind_flt( r, M, INT_FS_12k8, LAGW_WEAK ); - lev_dur( A, r, M, NULL ); - a2lsp_stab( A, lsptmp, lsp_new ); - residu( A, M, buf + L_LP - L_FRAME, res, L_FRAME ); - - cng_params_upd( lsptmp, res, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - } - else - { - cng_params_upd( lsp_new, st->hLPDmem->old_exc_flt + L_EXC_MEM - st->L_frame, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); - } - - if ( st->L_frame == L_FRAME ) - { - /* store LSPs@16k, potentially to be used in CNG@16k */ - mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); - } - - /* Set 16k LSP flag for CNG buffer */ - st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); - - /* efficient DTX hangover control */ - if ( st->hTdCngEnc->burst_ho_cnt > 1 ) - { - dtx_hangover_control( st, lsp_new ); - } - } - - /*--------------------------------------------------------------------------------* - * Encode TCX20/10 parameters - *--------------------------------------------------------------------------------*/ - - writeTCXparam( st, hBstr, hm_cfg, param_core, nbits_header, nbits_start, nbits_lpc[0] + nbits_lpc[1], NULL, NULL, NULL, -1 ); - - total_nbbits = hBstr->nb_bits_tot - nbits_start; - - if ( param_core[1 + NOISE_FILL_RANGES] != 0 ) - { - set_f( pitch_buf, hTcxEnc->tcxltp_pitch_int + (float) hTcxEnc->tcxltp_pitch_fr / (float) st->pit_res_max, NB_SUBFR16k ); - } - else - { - set_f( pitch_buf, L_SUBFR, NB_SUBFR16k ); - } - - pop_wmops(); - return; -} -#endif /*-------------------------------------------------------------------* @@ -1211,331 +749,6 @@ void stereo_tcx_core_enc( *-------------------------------------------------------------------*/ /*! r: S/M decision (0=speech or noise,1=unclear,2=music) */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_acelp_tcx20_switching( - Encoder_State *st, /* i/o: encoder state structure */ - const float *inp, /* i : new input signal */ - const float *wsp, /* i : input weighted signal */ - const float non_staX, /* i : unbound non-stationarity for sp/mu clas.*/ - const float *pitch_fr, /* i : fraction pitch values */ - const float *voicing_fr, /* i : fractional voicing values */ - const float currFlatness, /* i : flatness */ - const float lsp_mid[M], /* i : LSPs at the middle of the frame */ - const float stab_fac, /* i : LP filter stability */ - float *res_cod_SNR_M, - const int16_t flag_16k_smc /* i : flag to compute parameters with 16kHz core */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, j; - float A_q_tcx[NB_SUBFR16k * ( M + 1 )]; - float dsnr, snr_tcx, snr_acelp; - int16_t iter; - float xn_buf[L_MDCT_OVLP_MAX + L_FRAME_PLUS + L_MDCT_OVLP_MAX]; - float window[L_LOOK_16k]; - float Ap[M + 1]; - float gainlpc[FDNS_NPTS]; - float en[N_MAX / 4]; - float sqGain, ener, tmp, fac, offset; - int16_t L_frame, L_frame_tmp, L_loop; - int16_t overlap; - int16_t tcx_offset; - float *x; - float target; - int16_t T0; - float gain, noise, scale; - float *pt_ener_sfr, ener_sfr[NB_SUBFR16k]; - float pitch_fr_local[4], voicing_fr_local[4]; - int16_t smc_dec_ol; - float y[N_MAX]; - - /* Initialization */ - L_frame = flag_16k_smc ? st->L_frame : L_FRAME; - L_frame_tmp = L_frame; - - x = hTcxEnc->spectrum_long; - - /* Check minimum pitch for quantization */ - for ( i = 0; i < 4; i++ ) - { - pitch_fr_local[i] = pitch_fr[i]; - voicing_fr_local[i] = voicing_fr[i]; - } - - lsp2a_stab( lsp_mid, A_q_tcx, M ); - - /*--------------------------------------------------------------* - * Estimate TCX SNR - *---------------------------------------------------------------*/ - - target = 850.f; - if ( flag_16k_smc ) - { - tcx_offset = st->hTcxCfg->tcx_offset; - - if ( st->last_core == ACELP_CORE ) - { - L_frame += tcx_offset; - - if ( st->hTcxCfg->lfacNext < 0 ) - { - L_frame -= st->hTcxCfg->lfacNext; - tcx_offset = st->hTcxCfg->lfacNext; - } - else - { - tcx_offset = 0; - } - } - - overlap = st->hTcxCfg->tcx_mdct_window_delay; - mvr2r( st->hTcxCfg->tcx_mdct_window_flt, window, L_LOOK_16k ); - } - else - { - overlap = L_LOOK_12k8; - tcx_offset = ( overlap >> 1 ); - mdct_window_sine_flt( window, INT_FS_12k8, overlap, FULL_OVERLAP, st->element_mode ); - - if ( st->last_core == ACELP_CORE ) - { - L_frame += L_frame / 4; - tcx_offset -= L_frame / 4; - } - } - mvr2r( inp - ( overlap >> 1 ) + tcx_offset, xn_buf, L_frame + overlap ); - - if ( st->last_core == ACELP_CORE ) - { - if ( ( tcx_offset < 0 && flag_16k_smc ) || !flag_16k_smc ) - { - set_f( xn_buf, 0.0f, overlap >> 1 ); - } - } - else - { - for ( i = 0; i < overlap; i++ ) - { - xn_buf[i] *= window[i]; - } - } - - for ( i = 0; i < overlap; i++ ) - { - xn_buf[L_frame + i] *= window[overlap - 1 - i]; - } - - TCX_MDCT_flt( xn_buf, x, overlap, L_frame - overlap, overlap, st->element_mode ); - - for ( i = 0; i < L_frame; i++ ) - { - x[i] *= (float) L_frame * inv_sqrt( 2 * NORM_MDCT_FACTOR ); - y[i] = x[i]; - } - - weight_a( A_q_tcx, Ap, GAMMA1_FLT, M ); - - lpc2mdct_flt( Ap, M, gainlpc, FDNS_NPTS, 0 ); - - mdct_preShaping( x, L_frame, gainlpc ); - - for ( i = 0; i < L_frame; i += 4 ) - { - ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; - en[i / 4] = 9.0f + 10.0f * log10f( ener ); - } - - fac = 128.0f; - offset = fac; - - for ( iter = 0; iter < 10; iter++ ) - { - fac *= 0.5f; - offset -= fac; - ener = 0.0f; - - for ( i = 0; i < L_frame / 4; i++ ) - { - tmp = en[i] - offset; - - if ( tmp > 3.0f ) - { - ener += tmp; - } - - if ( ener > target ) - { - offset += fac; - break; - } - } - } - - if ( offset <= 32.f ) - { - offset = -128.f; - } - - sqGain = powf( 10.0f, offset / 20.0f ); - ener = sqGain * sqGain / 12.f * sqrtf( 2.f ) / (float) L_frame; - - if ( !flag_16k_smc ) - { - const int16_t *bands; - const int16_t bands_20[8] = { 0, 5, 9, 19, 34, 51, 81, 111 }; - const int16_t bands_25[8] = { 0, 4, 7, 15, 28, 40, 65, 89 }; - float nrg_s, nrg_n; - - /*Approximate SNR of TCX*/ - set_f( x, sqrtf( ener ), L_frame ); - mdct_noiseShaping_flt( x, L_frame, gainlpc, FDNS_NPTS ); - - if ( st->last_core != ACELP_CORE ) - { - /*25Hz resolution*/ - bands = bands_25; - } - else - { - /*20Hz resolution*/ - bands = bands_20; - } - - for ( iter = 0; iter < 7; iter++ ) - { - nrg_s = 1e-6f; - nrg_n = 1e-6f; - for ( i = bands[iter]; i < bands[iter + 1]; i++ ) - { - nrg_s += y[i] * y[i]; - nrg_n += x[i] * x[i]; - } - res_cod_SNR_M[iter] = nrg_s / nrg_n; - } - } - - snr_tcx = 0.0f; - pt_ener_sfr = ener_sfr; - - L_loop = flag_16k_smc ? L_frame_tmp : L_frame; - - for ( i = 0; i < L_loop; i += L_SUBFR ) - { - *pt_ener_sfr = sum2_f( wsp + i, L_SUBFR ) + 1e-6f; - snr_tcx += log10f( *pt_ener_sfr / ( ener * L_SUBFR ) ); - pt_ener_sfr++; - } - snr_tcx *= ( (float) ( 10 * L_SUBFR ) ) / (float) L_loop; - - - /*--------------------------------------------------------------* - * Estimate ACELP SNR - *---------------------------------------------------------------*/ - - if ( flag_16k_smc ) - { - scale = 0.092f; - } - else - { - scale = 0.059f; - } - - snr_acelp = 0.0f; - fac = flag_16k_smc ? (float) st->sr_core / (float) INT_FS_12k8 : 1.0f; - L_loop = flag_16k_smc ? L_frame_tmp : L_FRAME; - - pt_ener_sfr = ener_sfr; - for ( i = 0; i < L_loop; i += L_SUBFR ) - { - T0 = (int16_t) ( ( fac * pitch_fr_local[(int16_t) ( (float) ( i / L_SUBFR ) / fac + 0.5f )] ) + 0.5f ); - gain = get_gain_flt( wsp + i, wsp + i - T0, L_SUBFR, NULL ); - noise = 1e-6f; - for ( j = 0; j < L_SUBFR; j++ ) - { - tmp = wsp[i + j] - gain * wsp[i + j - T0]; - noise += tmp * tmp; - } - - noise *= scale; - snr_acelp += log10f( *pt_ener_sfr / noise ); - pt_ener_sfr++; - } - - snr_acelp *= ( (float) ( 10 * L_SUBFR ) ) / (float) L_loop; - - - /*--------------------------------------------------------------* - * Switching Decision - *---------------------------------------------------------------*/ - - dsnr = 0.0f; - /* hysteresis for very small SNR differences between ACELP and TCX */ - - /* try to use TCX instead of ACELP on temporally stationary frames */ - if ( ( snr_acelp > snr_tcx ) && ( snr_acelp < snr_tcx + 2.0f ) && - ( st->prevTempFlatness + currFlatness < 3.25f || stab_fac == 1.0f || - ( !flag_16k_smc && st->sp_aud_decision0 > 0 && st->prevTempFlatness + currFlatness < 20.f ) ) && - ( st->Nb_ACELP_frames <= 6 ) ) - { - dsnr = -2.0f; - } - - /* try to use ACELP instead of TCX on transient and "buzzy" frames */ - if ( ( snr_acelp < snr_tcx ) && - ( snr_acelp > snr_tcx - 2.0f ) && - ( st->prevTempFlatness + currFlatness > 3.25f ) && - ( st->Nb_ACELP_frames >= 6 ) ) - { - dsnr = 2.0f; - } - if ( ( !flag_16k_smc ) && ( offset < 74.0f ) && ( non_staX > 5.0f ) && ( snr_acelp >= snr_tcx - 4 ) && st->Nb_ACELP_frames >= 1 && ( ( ( st->hSpMusClas->lps > st->hSpMusClas->lpm ) && mean( voicing_fr_local, 4 ) >= 0.3f ) || ( st->Nb_ACELP_frames >= 6 && ( st->hSpMusClas->lps > st->hSpMusClas->lpm - 1.5f ) ) ) && ( st->sp_aud_decision0 == 0 ) && st->vad_flag ) - { - /* Fine tuned across various databases based on various metrics to detect TCX frames in speech.*/ - dsnr = 4.0f; - } - - if ( st->flag_noisy_speech_snr ) - { - - if ( st->vad_flag || st->Opt_DTX_ON ) - { - dsnr += 2.f; - } - else - { - dsnr -= 2.f; - } - } - - /* Select ACELP or TCX */ - if ( ( snr_acelp + dsnr > snr_tcx ) && ( st->sp_aud_decision0 == 0 || st->prevTempFlatness + currFlatness > 3.25f ) ) - { - smc_dec_ol = 0; - } - else - { - smc_dec_ol = 2; - } - -#ifdef DEBUGGING - if ( st->force == FORCE_SPEECH ) - { - /* enforce ACELP */ - smc_dec_ol = 0; - } - else if ( st->force == FORCE_MUSIC ) - { - /* enforce TCX */ - smc_dec_ol = 2; - } -#endif - - st->prevTempFlatness = currFlatness; - - return smc_dec_ol; -} -#else Word16 ivas_acelp_tcx20_switching_fx( Encoder_State *st, /* i/o: encoder state structure */ Word16 *inp_fx, @@ -2141,4 +1354,3 @@ Word16 ivas_acelp_tcx20_switching_fx( move16(); return smc_dec_ol; } -#endif diff --git a/lib_enc/ivas_td_low_rate_enc.c b/lib_enc/ivas_td_low_rate_enc.c index 14c47ac7a..9a63a1525 100644 --- a/lib_enc/ivas_td_low_rate_enc.c +++ b/lib_enc/ivas_td_low_rate_enc.c @@ -51,115 +51,6 @@ * Encode secondary channel of TD Stereo with a low-bitrate encoder *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void tdm_low_rate_enc( - Encoder_State *st, /* i/o: State structure */ - const float Aq[], /* i : 12k8 Lp coefficient */ - const float *res, /* i : residual signal */ - float *synth, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t attack_flag, /* i : GSC attack flag */ - const float *lsf_new, /* i : current frame ISF vector */ - float *tmp_noise /* o : long-term noise energy */ -) -{ - const float *p_Aq; - int16_t i_subfr, nb_subfr, last_pit_bin; - int16_t tmp_nb_bits_tot; - float dct_res[L_FRAME], dct_epit[L_FRAME]; - float exc_wo_nf[L_FRAME]; - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*---------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------*/ - - nb_subfr = 2; - - st->GSC_IVAS_mode = 0; - st->GSC_noisy_speech = 1; - st->hGSCEnc->noise_lev = 14; - - hLPDmem->tilt_code_flt = 0.0f; - set_f( dct_epit, 0, L_FRAME ); - set_f( pitch_buf, L_SUBFR, NB_SUBFR ); - last_pit_bin = L_FRAME / 2; - - /*---------------------------------------------------------------* - * DCT transform of the residual and create a subsample residual - *---------------------------------------------------------------*/ - - edct( res, dct_res, L_FRAME, st->element_mode ); - - /*--------------------------------------------------------------------------------------* - * GSC encoder - *--------------------------------------------------------------------------------------*/ - - /* Find the current total number of bits used */ - tmp_nb_bits_tot = st->hBstr->nb_bits_tot; - - if ( st->extl_brate > 0 ) - { - /* subtract 1 bit for TBE/BWE BWE flag (bit counted in extl_brate) */ - tmp_nb_bits_tot--; - } - - gsc_enc( st, dct_res, dct_epit, last_pit_bin, tmp_nb_bits_tot, nb_subfr, lsf_new, exc_wo_nf, tmp_noise ); - - /*--------------------------------------------------------------------------------------* - * iDCT transform - *--------------------------------------------------------------------------------------*/ - - edct( dct_epit, exc, L_FRAME, st->element_mode ); - - edct( exc_wo_nf, exc_wo_nf, L_FRAME, st->element_mode ); - - /*--------------------------------------------------------------------------------------* - * Remove potential pre-echo in case an onset has been detected - *--------------------------------------------------------------------------------------*/ - - pre_echo_att( &st->hGSCEnc->Last_frame_ener, exc, attack_flag, st->last_coder_type, st->L_frame ); - - /*--------------------------------------------------------------------------------------* - * Update BWE excitation - *--------------------------------------------------------------------------------------*/ - - if ( st->hBWE_TD != NULL ) - { - set_f( voice_factors, 0.0f, NB_SUBFR ); - - if ( st->tdm_LRTD_flag ) - { - interp_code_5over2( exc, bwe_exc, L_FRAME ); - } - else - { - set_f( bwe_exc, 0, L_FRAME32k ); - } - } - - /*--------------------------------------------------------------------------------------* - * Synthesis - *--------------------------------------------------------------------------------------*/ - - p_Aq = Aq; - for ( i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR ) - { - syn_filt( p_Aq, M, &exc_wo_nf[i_subfr], &synth[i_subfr], L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - p_Aq += ( M + 1 ); - } - - /*--------------------------------------------------------------------------------------* - * Updates - *--------------------------------------------------------------------------------------*/ - mvr2r( exc_wo_nf, exc, L_FRAME ); - - return; -} -#else void tdm_low_rate_enc( Encoder_State *st, /* i/o: State structure */ const Word16 Aq[], /* i : 12k8 Lp coefficient */ @@ -277,7 +168,6 @@ void tdm_low_rate_enc( return; } -#endif /*-------------------------------------------------------------------* @@ -286,192 +176,6 @@ void tdm_low_rate_enc( * Encode GC, 2 subframes mode *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void encod_gen_2sbfr( - Encoder_State *st, /* i/o: state structure */ - const float speech[], /* i : input speech */ - const float Aw[], /* i : weighted A(z) unquantized for subframes */ - const float Aq[], /* i : LP coefficients */ - const float *res, /* i : residual signal */ - float *syn, /* i/o: core synthesis */ - float *exc, /* i/o: current non-enhanced excitation */ - float *exc2, /* i/o: current enhanced excitation */ - float *pitch_buf, /* i/o: floating pitch values for each subframe */ - float *voice_factors, /* o : voicing factors */ - float *bwe_exc, /* o : excitation for SWB TBE */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ -) -{ - float xn[2 * L_SUBFR]; /* Target vector for pitch search */ - float xn2[2 * L_SUBFR]; /* Target vector for codebook search */ - float cn[2 * L_SUBFR]; /* Target vector in residual domain */ - float h1[2 * L_SUBFR + ( M + 1 )]; /* Impulse response vector */ - float code[2 * L_SUBFR]; /* Fixed codebook excitation */ - float y1[2 * L_SUBFR]; /* Filtered adaptive excitation */ - float y2[2 * L_SUBFR]; /* Filtered algebraic excitation */ - float gain_pit; /* Pitch gain */ - float voice_fac; /* Voicing factor */ - float gain_code; /* Gain of code */ - float gain_inov; /* inovation gain */ - int16_t L_frame, coder_type; /* L_frame; coder type */ - int16_t i, i_subfr; /* tmp variables */ - int16_t T0, T0_frac; /* close loop integer pitch and fractional part */ - int16_t T0_min, T0_max; /* pitch variables */ - float *pt_pitch; /* pointer to floating pitch buffer */ - float g_corr[6]; /* ACELP correl, values + gain pitch */ - float gains_mem[2 * ( NB_SUBFR - 1 )]; /* pitch gain and code gain from previous subframes */ - int16_t clip_gain; /* LSF clip gain */ - const float *p_Aw, *p_Aq; /* pointer to LP filter coeff. vector*/ - float norm_gain_code; - int16_t pitch_limit_flag; - float error; - - LPD_state_HANDLE hLPDmem = st->hLPDmem; - - /*------------------------------------------------------------------* - * Initializations - *------------------------------------------------------------------*/ - - gain_pit = 0; - gain_code = 0; - error = 0.0f; - - T0_max = PIT_MAX; - T0_min = PIT_MIN; - - L_frame = L_FRAME; - coder_type = GENERIC; - - p_Aw = Aw; - p_Aq = Aq; - pt_pitch = pitch_buf; - - /*------------------------------------------------------------------* - * ACELP subframe loop - *------------------------------------------------------------------*/ - - for ( i_subfr = 0; i_subfr < L_frame; i_subfr += 2 * L_SUBFR ) - { - /*----------------------------------------------------------------* - * Find the the excitation search target "xn" and innovation - * target in residual domain "cn" - * Compute impulse response, h1[], of weighted synthesis filter - *----------------------------------------------------------------*/ - - mvr2r( &res[i_subfr], &exc[i_subfr], 2 * L_SUBFR ); - - find_targets( speech, hLPDmem->mem_syn_flt, i_subfr, &hLPDmem->mem_w0_flt, p_Aq, res, 2 * L_SUBFR, p_Aw, st->preemph_fac_flt, xn, cn, h1 ); - - /*------------------------------------------------------------------------* - * Close-loop pitch search on the 1st and 3rd subfr only and quantization - * Adaptive exc. construction - *------------------------------------------------------------------------*/ - - *pt_pitch = pit_encode( st->hBstr, st->acelp_cfg.pitch_bits, st->core_brate, 0, L_frame, coder_type, &pitch_limit_flag, i_subfr, exc, 2 * L_SUBFR, st->pitch, &T0_min, &T0_max, &T0, &T0_frac, h1, xn, tdm_Pitch_reuse_flag, tdm_Pri_pitch_buf ); - - tbe_celp_exc_flt( st->element_mode, st->idchan, bwe_exc, L_frame, 2 * L_SUBFR, i_subfr, T0, T0_frac, &error, st->tdm_LRTD_flag ); - - /*-----------------------------------------------------------------* - * Find adaptive exitation - *-----------------------------------------------------------------*/ - - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], T0, T0_frac, 2 * L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - /*-----------------------------------------------------------------* - * Gain clipping test to avoid unstable synthesis on frame erasure - *-----------------------------------------------------------------*/ - - clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, coder_type, xn, st->clip_var ); - - /*-----------------------------------------------------------------* - * LP filtering of the adaptive excitation, codebook target computation - *-----------------------------------------------------------------*/ - - lp_filt_exc_enc( MODE1, coder_type, i_subfr, exc, h1, xn, y1, xn2, 2 * L_SUBFR, L_frame, g_corr, clip_gain, &gain_pit, &st->acelp_cfg.ltf_mode ); - - /* update long-term pitch gain for speech/music classifier */ - st->hSpMusClas->lowrate_pitchGain_flt = 0.9f * st->hSpMusClas->lowrate_pitchGain_flt + 0.1f * gain_pit; - - /*-----------------------------------------------------------------* - * Innovation encoding - *-----------------------------------------------------------------*/ - - inov_encode( st, st->core_brate, 0, L_frame, st->last_L_frame, coder_type, st->bwidth, st->sharpFlag, i_subfr, -1, p_Aq, gain_pit, cn, exc, h1, hLPDmem->tilt_code_flt, *pt_pitch, xn2, code, y2, &i, 2 * L_SUBFR ); - - /*-----------------------------------------------------------------* - * Gain encoding - *-----------------------------------------------------------------*/ - - gain_enc_lbr( st->hBstr, st->acelp_cfg.gains_mode, coder_type, i_subfr, xn, y1, y2, code, &gain_pit, &gain_code, &gain_inov, &norm_gain_code, g_corr, gains_mem, clip_gain, 2 * L_SUBFR ); - - if ( st->Opt_SC_VBR ) - { - if ( st->hSC_VBR->last_ppp_mode == 1 ) - { - /* SC-VBR - all other st->clip_var values will be updated even in a PPP frame */ - st->clip_var[1] = gain_pit; - } - } - - /*-----------------------------------------------------------------* - * update LP-filtered gains for the case of frame erasures - *-----------------------------------------------------------------*/ - - gp_clip_test_gain_pit( st->element_mode, st->core_brate, gain_pit, st->clip_var ); - - hLPDmem->tilt_code_flt = est_tilt( exc + i_subfr, gain_pit, code, gain_code, &voice_fac, 2 * L_SUBFR, 0 ); - - /*-----------------------------------------------------------------* - * Update memory of the weighting filter - *-----------------------------------------------------------------*/ - - hLPDmem->mem_w0_flt = xn[2 * L_SUBFR - 1] - ( gain_pit * y1[2 * L_SUBFR - 1] ) - ( gain_code * y2[2 * L_SUBFR - 1] ); - - /*-----------------------------------------------------------------* - * Construct adaptive part of the excitation - * Save the non-enhanced excitation for FEC_exc - *-----------------------------------------------------------------*/ - - for ( i = 0; i < 2 * L_SUBFR; i++ ) - { - exc2[i + i_subfr] = gain_pit * exc[i + i_subfr]; - exc[i + i_subfr] = exc2[i + i_subfr] + gain_code * code[i]; - } - - /*-----------------------------------------------------------------* - * Prepare TBE excitation - *-----------------------------------------------------------------*/ - - prep_tbe_exc( L_frame, L_SUBFR, i_subfr, gain_pit, gain_code, code, voice_fac, &voice_factors[i_subfr / L_SUBFR], bwe_exc, 0, NULL, T0, coder_type, st->core_brate, st->element_mode, st->idchan, st->hBWE_TD != NULL, st->tdm_LRTD_flag ); - - voice_factors[i_subfr / L_SUBFR + 1] = voice_factors[i_subfr / L_SUBFR]; - - /*-----------------------------------------------------------------* - * Synthesize speech to update mem_syn_flt[]. - * Update A(z) filters - *-----------------------------------------------------------------*/ - - syn_filt( p_Aq, M, &exc[i_subfr], &syn[i_subfr], 2 * L_SUBFR, hLPDmem->mem_syn_flt, 1 ); - - p_Aw += 2 * ( M + 1 ); - p_Aq += 2 * ( M + 1 ); - - pt_pitch++; - *pt_pitch = *( pt_pitch - 1 ); - pt_pitch++; - } - - /* SC-VBR */ - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->prev_ppp_gain_pit = gain_pit; - st->hSC_VBR->prev_tilt_code = hLPDmem->tilt_code_flt; - } - - return; -} -#else void encod_gen_2sbfr( Encoder_State *st, /* i/o: state structure */ const Word16 speech[], /* i : input speech Q_new-1 */ @@ -683,4 +387,3 @@ void encod_gen_2sbfr( return; } -#endif diff --git a/lib_enc/lib_enc.c b/lib_enc/lib_enc.c index 6c8ec4e29..69d0f1ab9 100644 --- a/lib_enc/lib_enc.c +++ b/lib_enc/lib_enc.c @@ -72,16 +72,12 @@ struct IVAS_ENC * Local functions *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error configureEncoder_fx( IVAS_ENC_HANDLE hIvasEnc, const Word32 inputFs, const Word32 initBitrate, const IVAS_ENC_BANDWIDTH initBandwidth, const IVAS_ENC_DTX_CONFIG dtxConfig, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ); static ivas_error setBandwidth_fx( IVAS_ENC_HANDLE hIvasEnc, const IVAS_ENC_BANDWIDTH maxBandwidth ); static ivas_error setChannelAwareConfig_fx( IVAS_ENC_HANDLE hIvasEnc, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ); static ivas_error sanitizeBandwidth_fx( const IVAS_ENC_HANDLE hIvasEnc ); static ivas_error sanitizeBitrateISM_fx( const ENCODER_CONFIG_HANDLE hEncoderConfig, const bool extMetadataApi ); static Word16 getInputBufferSize_fx( const Encoder_Struct *st_ivas ); -#else -static int16_t getInputBufferSize( const Encoder_Struct *st_ivas ); -#endif // IVAS_FLOAT_FIXED static ivas_error configureEncoder( IVAS_ENC_HANDLE hIvasEnc, const int32_t inputFs, const int32_t initBitrate, const IVAS_ENC_BANDWIDTH initBandwidth, const IVAS_ENC_DTX_CONFIG dtxConfig, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ); static ivas_error setBitrate( IVAS_ENC_HANDLE hIvasEnc, const int32_t totalBitrate ); static ivas_error doCommonConfigureChecks( IVAS_ENC_HANDLE hIvasEnc ); @@ -397,7 +393,6 @@ ivas_error IVAS_ENC_ConfigureForStereo( * * Configure and initialize the combined MASA and ISM encoder. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_ENC_ConfigureForMASAObjects( IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ const Word32 inputFs, /* i : input sampling frequency */ @@ -452,55 +447,6 @@ ivas_error IVAS_ENC_ConfigureForMASAObjects( return configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); } -#else -ivas_error IVAS_ENC_ConfigureForMASAObjects( - IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ - const int32_t inputFs, /* i : input sampling frequency */ - const int32_t bitrate, /* i : requested bitrate of the ouput bitstream */ - const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ - const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ - const uint16_t numObjects, /* i : number of objects to be encoded */ - const int16_t masaVariant /* i : index specifying the number of MASA transport channels */ -) -{ - Encoder_Struct *st_ivas; - ivas_error error; - - if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( numObjects > MAX_NUM_OBJECTS ) - { - return IVAS_ERR_TOO_MANY_INPUTS; - } - st_ivas = hIvasEnc->st_ivas; - switch ( masaVariant ) - { - case IVAS_ENC_MASA_2CH: - st_ivas->hEncoderConfig->nchan_inp = CPE_CHANNELS + numObjects; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_DFT; /* initialization only, might be changed later based on element_brate */ - break; - case IVAS_ENC_MASA_1CH: - st_ivas->hEncoderConfig->nchan_inp = 1 + numObjects; - st_ivas->hEncoderConfig->element_mode_init = IVAS_CPE_DFT; /* initialization only, might be changed later based on element_brate */ - break; - default: - return IVAS_ERR_INVALID_MASA_CONFIG; - break; - } - - st_ivas = hIvasEnc->st_ivas; - - /* Currently this is true but it is already shown in descriptive metadata that there can be inequality for this. */ - st_ivas->nchan_transport = st_ivas->hEncoderConfig->nchan_inp - numObjects; - st_ivas->hEncoderConfig->ivas_format = MASA_ISM_FORMAT; - st_ivas->hEncoderConfig->nchan_ism = numObjects; - - return configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); -} -#endif /*---------------------------------------------------------------------* @@ -578,16 +524,12 @@ ivas_error IVAS_ENC_FeedObjectMetadata( { return IVAS_ERR_INVALID_INDEX; } -#ifdef IVAS_FLOAT_FIXED Word32 azimuth_fx = float_to_fix( metadata.azimuth, Q22 ); /* Q22 */ Word32 elevation_fx = float_to_fix( metadata.elevation, Q22 ); /* Q22 */ Word16 radius_fx = float_to_fix16( metadata.radius, Q9 ); /* Q9 */ Word32 yaw_fx = float_to_fix( metadata.yaw, Q22 ); /* Q22 */ Word32 pitch_fx = float_to_fix( metadata.pitch, Q22 ); /* Q22 */ error = ivas_set_ism_metadata_fx( hIvasEnc->st_ivas->hIsmMetaData[ismIndex], azimuth_fx, elevation_fx, radius_fx, yaw_fx, pitch_fx, metadata.non_diegetic_flag ); -#else - error = ivas_set_ism_metadata( hIvasEnc->st_ivas->hIsmMetaData[ismIndex], metadata.azimuth, metadata.elevation, metadata.radius, metadata.yaw, metadata.pitch, metadata.non_diegetic_flag ); -#endif if ( error != IVAS_ERR_OK ) { @@ -634,11 +576,7 @@ ivas_error IVAS_ENC_ConfigureForAmbisonics( hEncoderConfig->sba_order = order; /* Input in ACN/SN3D in all cases (3D and planar): get number of channels */ -#ifndef IVAS_FLOAT_FIXED - hEncoderConfig->nchan_inp = ivas_sba_get_nchan( hEncoderConfig->sba_order, 0 ); /*planar input arg. deliberately set to zero since input always in ACN/SN3D*/ -#else hEncoderConfig->nchan_inp = ivas_sba_get_nchan_fx( hEncoderConfig->sba_order, 0 ); /*planar input arg. deliberately set to zero since input always in ACN/SN3D*/ -#endif hEncoderConfig->Opt_PCA_ON = (int16_t) Opt_PCA_ON; @@ -650,7 +588,6 @@ ivas_error IVAS_ENC_ConfigureForAmbisonics( return error; } -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_ENC_ConfigureForAmbisonics_fx( IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ const Word32 inputFs, /* i : input sampling frequency */ @@ -691,7 +628,6 @@ ivas_error IVAS_ENC_ConfigureForAmbisonics_fx( return error; } -#endif /*---------------------------------------------------------------------* * IVAS_ENC_ConfigureForSBAObjects() * @@ -755,7 +691,6 @@ ivas_error IVAS_ENC_ConfigureForSBAObjects( * * Configure and initialize the MASA encoder. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_ENC_ConfigureForMasa( IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ const Word32 inputFs, /* i : input sampling frequency */ @@ -807,54 +742,6 @@ ivas_error IVAS_ENC_ConfigureForMasa( return error; } -#else -ivas_error IVAS_ENC_ConfigureForMasa( - IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ - const int32_t inputFs, /* i : input sampling frequency */ - const int32_t bitrate, /* i : requested bitrate of the output bitstream */ - const bool max_bwidth_user, /* i : shows if bandwidth limitation was set by the user (true) or if default bandwidth was used (false) */ - const IVAS_ENC_BANDWIDTH maxBandwidth, /* i : bandwidth limitation */ - const IVAS_ENC_DTX_CONFIG dtxConfig, /* i : configuration of DTX, can by set to default by using IVAS_ENC_GetDefaultDtxConfig() */ - const IVAS_ENC_MASA_VARIANT masaVariant /* i : type of MASA input (either 1 or 2 channels) */ -) -{ - ENCODER_CONFIG_HANDLE hEncoderConfig; - ivas_error error; - - if ( ( error = doCommonConfigureChecks( hIvasEnc ) ) != IVAS_ERR_OK ) - { - return error; - } - - hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; - - hEncoderConfig->ivas_format = MASA_FORMAT; - - switch ( masaVariant ) - { - case IVAS_ENC_MASA_1CH: - hEncoderConfig->nchan_inp = 1; - hEncoderConfig->element_mode_init = IVAS_SCE; - break; - case IVAS_ENC_MASA_2CH: - hEncoderConfig->nchan_inp = 2; -#ifdef DEBUGGING - hEncoderConfig->stereo_mode_cmdl = 1; /* set unified stereo by default */ -#endif - hEncoderConfig->element_mode_init = IVAS_CPE_DFT; /* initialization only, might be changed later based on element_brate */ - break; - default: - return IVAS_ERR_INVALID_MASA_CONFIG; - break; - } - - hIvasEnc->maxBandwidthUser = max_bwidth_user; - - error = configureEncoder( hIvasEnc, inputFs, bitrate, maxBandwidth, dtxConfig, IVAS_ENC_GetDefaultChannelAwareConfig() ); - - return error; -} -#endif /*---------------------------------------------------------------------* @@ -936,11 +823,7 @@ ivas_error IVAS_ENC_ConfigureForMultichannel( break; } -#ifndef IVAS_FLOAT_FIXED - hEncoderConfig->nchan_inp = ivas_mc_ls_setup_get_num_channels( hEncoderConfig->mc_input_setup ); -#else hEncoderConfig->nchan_inp = ivas_mc_ls_setup_get_num_channels_fx( hEncoderConfig->mc_input_setup ); -#endif hIvasEnc->maxBandwidthUser = max_bwidth_user; @@ -1112,16 +995,10 @@ static ivas_error configureEncoder( } else if ( hEncoderConfig->ivas_format == MASA_ISM_FORMAT ) { -#ifndef IVAS_FLOAT_FIXED - st_ivas->ism_mode = ivas_omasa_ism_mode_select( st_ivas->hEncoderConfig->ivas_total_brate, hEncoderConfig->nchan_ism ); - - cpe_brate = calculate_cpe_brate_MASA_ISM( st_ivas->ism_mode, st_ivas->hEncoderConfig->ivas_total_brate, hEncoderConfig->nchan_ism ); -#else st_ivas->ism_mode = ivas_omasa_ism_mode_select_fx( st_ivas->hEncoderConfig->ivas_total_brate, hEncoderConfig->nchan_ism ); move32(); cpe_brate = calculate_cpe_brate_MASA_ISM_fx( st_ivas->ism_mode, st_ivas->hEncoderConfig->ivas_total_brate, hEncoderConfig->nchan_ism ); -#endif /*adapt element_mode according to the bit-rate*/ if ( hEncoderConfig->element_mode_init != IVAS_SCE ) @@ -1210,7 +1087,7 @@ static ivas_error configureEncoder( } if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_format != MONO_FORMAT && - ( ( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_get_sba_num_TCs( hEncoderConfig->ivas_total_brate, 1 ) > 2 ) || + ( ( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_get_sba_num_TCs_fx( hEncoderConfig->ivas_total_brate, 1 ) > 2 ) || hEncoderConfig->ivas_format == MC_FORMAT || hEncoderConfig->ivas_format == MASA_ISM_FORMAT || hEncoderConfig->ivas_format == SBA_ISM_FORMAT ) ) { return IVAS_ERROR( IVAS_ERR_DTX_NOT_SUPPORTED, "DTX is not supported in this IVAS format and element mode." ); @@ -1257,7 +1134,6 @@ static ivas_error configureEncoder( return error; } -#ifdef IVAS_FLOAT_FIXED static ivas_error configureEncoder_fx( IVAS_ENC_HANDLE hIvasEnc, const Word32 inputFs, @@ -1545,40 +1421,12 @@ static ivas_error configureEncoder_fx( return error; } -#endif /*---------------------------------------------------------------------* * IVAS_ENC_GetDelay() * * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_ENC_GetDelay( - const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ - int16_t *delay /* o : encoder delay */ -) -{ - ENCODER_CONFIG_HANDLE hEncoderConfig; - - hEncoderConfig = hIvasEnc->st_ivas->hEncoderConfig; - - if ( !hIvasEnc->isConfigured ) - { - return IVAS_ERR_NOT_CONFIGURED; - } - - if ( delay == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *delay = NS2SA( hEncoderConfig->input_Fs, get_delay( ENC, hEncoderConfig->input_Fs, hEncoderConfig->ivas_format, NULL ) ); - - *delay *= hEncoderConfig->nchan_inp; - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_ENC_GetDelay( const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ Word16 *delay /* o : encoder delay */ @@ -1606,7 +1454,6 @@ ivas_error IVAS_ENC_GetDelay( return IVAS_ERR_OK; } -#endif /*---------------------------------------------------------------------* @@ -1614,21 +1461,12 @@ ivas_error IVAS_ENC_GetDelay( * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 getInputBufferSize_fx( const Encoder_Struct *st_ivas /* i : IVAS encoder handle */ ) { return extract_l( Mpy_32_32( imult3216( st_ivas->hEncoderConfig->input_Fs, st_ivas->hEncoderConfig->nchan_inp ), ONE_BY_FRAMES_PER_SEC_Q31 ) ); } -#else -static int16_t getInputBufferSize( - const Encoder_Struct *st_ivas /* i : IVAS encoder handle */ -) -{ - return (int16_t) ( st_ivas->hEncoderConfig->input_Fs * st_ivas->hEncoderConfig->nchan_inp / FRAMES_PER_SEC ); -} -#endif /*---------------------------------------------------------------------* * IVAS_ENC_GetNumInChannels() @@ -1661,7 +1499,6 @@ ivas_error IVAS_ENC_GetNumInChannels( * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_ENC_GetInputBufferSize( const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ Word16 *inputBufferSize /* o : total number of samples expected in the input buffer for current encoder configuration */ @@ -1682,27 +1519,6 @@ ivas_error IVAS_ENC_GetInputBufferSize( return IVAS_ERR_OK; } -#else -ivas_error IVAS_ENC_GetInputBufferSize( - const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ - int16_t *inputBufferSize /* o : total number of samples expected in the input buffer for current encoder configuration */ -) -{ - if ( !hIvasEnc->isConfigured ) - { - return IVAS_ERR_NOT_CONFIGURED; - } - - if ( inputBufferSize == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *inputBufferSize = getInputBufferSize( hIvasEnc->st_ivas ); - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* @@ -1710,7 +1526,6 @@ ivas_error IVAS_ENC_GetInputBufferSize( * * Main function to encode one frame to a serial bitstream *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_ENC_EncodeFrameToSerial( IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ Word16 *inputBuffer, /* i : PCM input, Q0 */ @@ -1972,310 +1787,7 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( return error; } -#else -ivas_error IVAS_ENC_EncodeFrameToSerial( - IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ - int16_t *inputBuffer, /* i : PCM input */ - int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ - uint16_t *outputBitStream, /* o : pointer to serial output bitstream. The array must already be allocated and be of size at least IVAS_MAX_BITS_PER_FRAME */ - uint16_t *numOutBits /* o : number of bits written to output bitstream. Each bit is stored as a single uint16_t value */ -) -{ - Encoder_Struct *st_ivas; - ENCODER_CONFIG_HANDLE hEncoderConfig; - int16_t i; - int16_t n, ch; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( !hIvasEnc->isConfigured ) - { - return IVAS_ERR_NOT_CONFIGURED; - } - - st_ivas = hIvasEnc->st_ivas; - hEncoderConfig = st_ivas->hEncoderConfig; - ENC_CORE_HANDLE hCoreCoder = hIvasEnc->hCoreCoder; - - if ( inputBufferSize != getInputBufferSize( st_ivas ) ) - { - return IVAS_ERR_INVALID_INPUT_BUFFER_SIZE; - } - - if ( ( error = sanitizeBandwidth_fx( hIvasEnc ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( hEncoderConfig->ivas_format == ISM_FORMAT ) - { - for ( i = 0; i < hEncoderConfig->nchan_inp; ++i ) - { - if ( !hIvasEnc->ismMetadataProvided[i] ) - { - ivas_ism_reset_metadata_API( hIvasEnc->st_ivas->hIsmMetaData[i] ); - } - } - resetIsmMetadataProvidedFlags( hIvasEnc ); - } - - if ( ( hEncoderConfig->Opt_RF_ON && ( hEncoderConfig->ivas_total_brate != ACELP_13k20 || hEncoderConfig->input_Fs == 8000 || hEncoderConfig->max_bwidth == NB ) ) || hEncoderConfig->rf_fec_offset == 0 ) - { - test(); - IF( EQ_32( hEncoderConfig->ivas_total_brate, ACELP_13k20 ) && EQ_32( hEncoderConfig->ivas_format, MONO_FORMAT ) ) - { - st_ivas->codec_mode = MODE1; - move16(); -#ifndef IVAS_FLOAT_FIXED - reset_rf_indices( hCoreCoder->hRF, hCoreCoder->L_frame, &( hCoreCoder->rf_target_bits_write ) ); -#else - reset_rf_indices_fx( hCoreCoder ); -#endif - } - hEncoderConfig->Opt_RF_ON = 0; - move16(); - hEncoderConfig->rf_fec_offset = 0; - move16(); - hIvasEnc->switchingActive = true; - move16(); - } - - if ( hIvasEnc->Opt_RF_ON_loc && hIvasEnc->rf_fec_offset_loc != 0 && L_sub( hEncoderConfig->ivas_total_brate, ACELP_13k20 ) == 0 && L_sub( hEncoderConfig->input_Fs, 8000 ) != 0 && hEncoderConfig->max_bwidth != NB ) - { - st_ivas->codec_mode = MODE2; - move16(); - test(); - if ( hEncoderConfig->Opt_RF_ON == 0 && EQ_16( hEncoderConfig->ivas_format, MONO_FORMAT ) ) - { -#ifndef IVAS_FLOAT_FIXED - reset_rf_indices( hCoreCoder->hRF, hCoreCoder->L_frame, &( hCoreCoder->rf_target_bits_write ) ); -#else - reset_rf_indices_fx( hCoreCoder ); -#endif - } - hEncoderConfig->Opt_RF_ON = 1; - hEncoderConfig->rf_fec_offset = hIvasEnc->rf_fec_offset_loc; - hIvasEnc->switchingActive = true; - } - - /* in case of 8kHz sampling rate or when in "max_band NB" mode, limit the total bitrate to 24.40 kbps */ - if ( ( ( hEncoderConfig->input_Fs == 8000 ) || ( hEncoderConfig->max_bwidth == NB ) ) && ( hEncoderConfig->ivas_total_brate > ACELP_24k40 ) ) - { - hEncoderConfig->ivas_total_brate = ACELP_24k40; - st_ivas->codec_mode = MODE2; - hIvasEnc->switchingActive = true; - } - - /*-----------------------------------------------------------------* - * Re-allocate and re-initialize buffer of indices if IVAS total bitrate has changed - *-----------------------------------------------------------------*/ - - if ( hEncoderConfig->ivas_total_brate != hEncoderConfig->last_ivas_total_brate ) - { - /* de-allocate old buffer of indices */ - free( st_ivas->ind_list ); - - /* set the maximum allowed number of indices in the list */ - st_ivas->ivas_max_num_indices = get_ivas_max_num_indices_fx( hEncoderConfig->ivas_format, hEncoderConfig->ivas_total_brate ); - - /* allocate new buffer of indices */ - if ( ( st_ivas->ind_list = (INDICE_HANDLE) malloc( st_ivas->ivas_max_num_indices * sizeof( Indice ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of indices!\n" ) ); - } - - /* reset the list of indices */ - for ( i = 0; i < st_ivas->ivas_max_num_indices; i++ ) - { - st_ivas->ind_list[i].nb_bits = -1; - } - - /* de-allocate old buffer of metadata indices */ - if ( st_ivas->ind_list_metadata != NULL ) - { - free( st_ivas->ind_list_metadata ); - } - - /* set the maximum allowed number of metadata indices in the list */ - st_ivas->ivas_max_num_indices_metadata = get_ivas_max_num_indices_metadata_fx( hEncoderConfig->ivas_format, hEncoderConfig->ivas_total_brate ); - - if ( st_ivas->ivas_max_num_indices_metadata > 0 ) - { - /* allocate new buffer of metadata indices */ - if ( ( st_ivas->ind_list_metadata = (INDICE_HANDLE) malloc( st_ivas->ivas_max_num_indices_metadata * sizeof( Indice ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for buffer of metadata indices!\n" ) ); - } - - /* reset the list of metadata indices */ - for ( i = 0; i < st_ivas->ivas_max_num_indices_metadata; i++ ) - { - st_ivas->ind_list_metadata[i].nb_bits = -1; - } - } - else - { - st_ivas->ind_list_metadata = NULL; - } - - /* set pointers to the new buffers of indices in each element */ - for ( n = 0; n < st_ivas->nSCE; n++ ) - { - if ( !( hIvasEnc->hCoreCoder == NULL && hEncoderConfig->ivas_format == MONO_FORMAT ) ) - { - if ( ( hEncoderConfig->element_mode_init != EVS_MONO ) ) - { - st_ivas->hSCE[n]->hCoreCoder[0]->hBstr->ind_list = st_ivas->ind_list; - } - st_ivas->hSCE[n]->hCoreCoder[0]->hBstr->ivas_ind_list_zero = &st_ivas->ind_list; - } - - if ( st_ivas->hSCE[n]->hMetaData != NULL ) - { - st_ivas->hSCE[n]->hMetaData->ind_list = st_ivas->ind_list_metadata; - st_ivas->hSCE[n]->hMetaData->ivas_ind_list_zero = &st_ivas->ind_list_metadata; - } - } - - for ( n = 0; n < st_ivas->nCPE; n++ ) - { - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr->ind_list = st_ivas->ind_list; - st_ivas->hCPE[n]->hCoreCoder[ch]->hBstr->ivas_ind_list_zero = &st_ivas->ind_list; - } - - if ( st_ivas->hCPE[n]->hMetaData != NULL ) - { - st_ivas->hCPE[n]->hMetaData->ind_list = st_ivas->ind_list_metadata; - st_ivas->hCPE[n]->hMetaData->ivas_ind_list_zero = &st_ivas->ind_list_metadata; - } - } - } - - test(); - IF( hIvasEnc->switchingActive && EQ_16( hEncoderConfig->ivas_format, MONO_FORMAT ) ) - { - test(); - copy_encoder_config_fx( st_ivas, hCoreCoder, 0 ); - hEncoderConfig->last_ivas_total_brate = hEncoderConfig->ivas_total_brate; - move32(); - } - - /* run the main encoding routine */ - if ( hEncoderConfig->ivas_format == MONO_FORMAT ) /* EVS mono */ - { - hCoreCoder->total_brate = hEncoderConfig->ivas_total_brate; /* needed in case of bitrate switching */ - - IF( EQ_16( hEncoderConfig->stereo_dmx_evs, 1 ) ) - { - inputBufferSize /= 2; -#ifdef IVAS_FLOAT_FIXED - stereo_dmx_evs_enc_fx( st_ivas->hStereoDmxEVS, hEncoderConfig->input_Fs, inputBuffer, inputBufferSize, hEncoderConfig->is_binaural ); -#else - stereo_dmx_evs_enc( st_ivas->hStereoDmxEVS, hEncoderConfig->input_Fs, inputBuffer, inputBufferSize, hEncoderConfig->is_binaural ); -#endif - } - - IF( hEncoderConfig->Opt_AMR_WB ) - { -#ifndef IVAS_FLOAT_FIXED - IF( NE_16( hEncoderConfig->element_mode_init, EVS_MONO ) ) - { - amr_wb_enc( hCoreCoder, inputBuffer, st_ivas->mem_hp20_in[0], inputBufferSize ); - } - ELSE -#endif - { - amr_wb_enc_fx( hCoreCoder, inputBuffer, inputBufferSize ); - } - } - ELSE - { - test(); -#ifndef IVAS_FLOAT_FIXED - IF( NE_16( hEncoderConfig->element_mode_init, EVS_MONO ) || st_ivas->hEncoderConfig->stereo_dmx_evs ) - { - IF( NE_32( ( error = evs_enc( hCoreCoder, inputBuffer, st_ivas->mem_hp20_in[0], inputBufferSize ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE -#else - { - hCoreCoder->input_frame_fx = inputBufferSize; - move32(); - IF( NE_32( ( error = evs_enc_fx( hCoreCoder, inputBuffer, hCoreCoder->mem_hp20_in_fx, inputBufferSize ) ), IVAS_ERR_OK ) ) - { - return error; - } - } -#endif - } - } - else /* IVAS */ - { - if ( ( error = ivas_enc( st_ivas, inputBuffer, inputBufferSize ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* write indices into bitstream buffer */ - test(); - IF( EQ_16( hEncoderConfig->element_mode_init, EVS_MONO ) ) - { - test(); - IF( EQ_16( hEncoderConfig->ivas_format, MONO_FORMAT ) && EQ_16( hCoreCoder->element_mode, EVS_MONO ) ) - { - /* write indices into bitstream file */ - UWord8 pFrame[( MAX_BITS_PER_FRAME + 7 ) >> 3]; - Word16 pFrame_size = 0; - move16(); - write_indices_buf_fx( hCoreCoder, hCoreCoder->hBstr, outputBitStream, pFrame, pFrame_size, numOutBits ); - } - } - ELSE - { - write_indices_ivas( st_ivas, outputBitStream, numOutBits ); - } - /* Reset switching flag before next call - can be set to "true" by some setters */ - hIvasEnc->switchingActive = false; - - return error; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * IVAS_ENC_EncodeFrameToCompact() - * - * Main function to encode one frame to a compact bitstream (bytestream) - *---------------------------------------------------------------------*/ - -ivas_error IVAS_ENC_EncodeFrameToCompact( - IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ - int16_t *inputBuffer, /* i : PCM input */ - const int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ - uint8_t *outputBitStream, /* o : pointer to compact output bitstream. The array must already be allocated. */ - uint16_t *numOutBits /* o : number of bits written to output bitstream */ -) -{ - ivas_error error; - uint16_t bitstream[IVAS_MAX_BITS_PER_FRAME]; - - if ( ( error = IVAS_ENC_EncodeFrameToSerial( hIvasEnc, inputBuffer, inputBufferSize, bitstream, numOutBits ) ) != IVAS_ERR_OK ) - { - return error; - } - - convertSerialToBytestream( bitstream, *numOutBits, outputBitStream ); - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IVAS_ENC_SetBandwidth() @@ -2778,7 +2290,6 @@ static ivas_error setBitrate( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error setChannelAwareConfig_fx( IVAS_ENC_HANDLE hIvasEnc, const IVAS_ENC_CHANNEL_AWARE_CONFIG caConfig ) @@ -2837,7 +2348,6 @@ static ivas_error setChannelAwareConfig_fx( return IVAS_ERR_OK; } -#endif /*---------------------------------------------------------------------* * doCommonConfigureChecks() * @@ -2892,7 +2402,6 @@ static ivas_error doCommonSetterChecks( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error sanitizeBandwidth_fx( const IVAS_ENC_HANDLE hIvasEnc ) { @@ -2987,14 +2496,12 @@ static ivas_error sanitizeBandwidth_fx( return IVAS_ERR_OK; } -#endif /*---------------------------------------------------------------------* * sanitizeBitrateISM_fx() * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error sanitizeBitrateISM_fx( const ENCODER_CONFIG_HANDLE hEncoderConfig, const bool extMetadataApi ) @@ -3040,7 +2547,6 @@ static ivas_error sanitizeBitrateISM_fx( return IVAS_ERR_OK; } -#endif /*---------------------------------------------------------------------* * setBandwidth_fx() * diff --git a/lib_enc/lib_enc.h b/lib_enc/lib_enc.h index 03a0bee9e..1fd4e0ad0 100644 --- a/lib_enc/lib_enc.h +++ b/lib_enc/lib_enc.h @@ -286,7 +286,6 @@ ivas_error IVAS_ENC_FeedMasaMetadata( IVAS_MASA_METADATA_HANDLE hMasaMetadata /* i : MASA metadata for current frame */ ); -#ifdef IVAS_FLOAT_FIXED /*! r: error code */ ivas_error IVAS_ENC_EncodeFrameToSerial( IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ @@ -295,16 +294,6 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( UWord16 *outputBitStream, /* o : pointer to serial output bitstream. The array must already be allocated and be of size at least IVAS_MAX_BITS_PER_FRAME */ UWord16 *numOutBits /* o : number of bits written to output bitstream. Each bit is stored as a single uint16_t value */ ); -#else -/*! r: error code */ -ivas_error IVAS_ENC_EncodeFrameToSerial( - IVAS_ENC_HANDLE hIvasEnc, /* i/o: IVAS encoder handle */ - int16_t *inputBuffer, /* i : PCM input */ - int16_t inputBufferSize, /* i : total number of samples in the input buffer. Related function: IVAS_ENC_GetInputBufferSize() */ - uint16_t *outputBitStream, /* o : pointer to serial output bitstream. The array must already be allocated and be of size at least IVAS_MAX_BITS_PER_FRAME */ - uint16_t *numOutBits /* o : number of bits written to output bitstream. Each bit is stored as a single uint16_t value */ -); -#endif /*! r: error code */ ivas_error IVAS_ENC_EncodeFrameToCompact( @@ -346,17 +335,10 @@ ivas_error IVAS_ENC_SetForcedMode( /* Getter functions - retrieve information from an encoder through a handle */ /*! r: encoder error code */ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_ENC_GetDelay( - const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ - int16_t *delay /* o : encoder delay */ -); -#else ivas_error IVAS_ENC_GetDelay( const IVAS_ENC_HANDLE hIvasEnc, /* i : IVAS encoder handle */ Word16 *delay /* o : encoder delay */ ); -#endif /*! r: encoder error code */ ivas_error IVAS_ENC_GetNumInChannels( diff --git a/lib_enc/long_enr.c b/lib_enc/long_enr.c index 87b67b12a..aba21a1fe 100644 --- a/lib_enc/long_enr.c +++ b/lib_enc/long_enr.c @@ -45,120 +45,3 @@ * * Compute relative energy, long-term average total noise energy and total active speech energy *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void long_enr( - Encoder_State *st, /* i/o: encoder state structure */ - const float Etot, /* i : total channel energy */ - const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ - const int16_t high_lpn_flag, /* i : sp/mus LPN flag */ - FRONT_VAD_ENC_HANDLE hFrontVad[], /* i/o: front-VAD handles */ - const int16_t n_chan, /* i : number of channels */ - const int16_t localVAD_HE_SAD_LR[], /* i : HE-SAD flag without hangover LR channels */ - const float Etot_LR[] /* i : total channel energy LR channels */ -) -{ - float tmp; - int16_t n; - - /*-----------------------------------------------------------------* - * Compute long term estimate of total noise energy - * and total active speech energy - *-----------------------------------------------------------------*/ - - if ( hFrontVad != NULL ) - { - if ( hFrontVad[0]->ini_frame < 4 ) - { - for ( n = 0; n < n_chan; n++ ) - { - hFrontVad[n]->lp_noise = hFrontVad[n]->hNoiseEst->totalNoise; - tmp = hFrontVad[n]->lp_noise + 10.0f; - - if ( hFrontVad[n]->lp_speech < tmp ) - { - hFrontVad[n]->lp_speech = tmp; - } - } - } - else - { - float smooth_prev, smooth_curr; - - if ( hFrontVad[0]->ini_frame < 150 ) - { - smooth_prev = 0.95f; - smooth_curr = 0.05f; - } - else - { - smooth_prev = 0.98f; - smooth_curr = 0.02f; - } - - for ( n = 0; n < n_chan; n++ ) - { - hFrontVad[n]->lp_noise = smooth_prev * hFrontVad[n]->lp_noise + smooth_curr * hFrontVad[n]->hNoiseEst->totalNoise; - - if ( localVAD_HE_SAD_LR[n] && !high_lpn_flag ) - { - if ( ( hFrontVad[n]->lp_speech - Etot_LR[n] ) < 10.0f ) - { - hFrontVad[n]->lp_speech = 0.98f * hFrontVad[n]->lp_speech + 0.02f * Etot_LR[n]; - } - else - { - hFrontVad[n]->lp_speech = hFrontVad[n]->lp_speech - 0.05f; - } - } - } - } - - /* Update */ - for ( n = 0; n < n_chan; n++ ) - { - hFrontVad[n]->hNoiseEst->Etot_last = Etot_LR[n]; - } - } - else - { - if ( st->ini_frame < 4 ) - { - st->lp_noise = st->hNoiseEst->totalNoise; - tmp = st->lp_noise + 10.0f; - - if ( st->lp_speech < tmp ) - { - st->lp_speech = tmp; - } - } - else - { - if ( st->ini_frame < 150 ) - { - st->lp_noise = 0.95f * st->lp_noise + 0.05f * st->hNoiseEst->totalNoise; - } - else - { - st->lp_noise = 0.98f * st->lp_noise + 0.02f * st->hNoiseEst->totalNoise; - } - - if ( localVAD_HE_SAD && !high_lpn_flag ) - { - if ( ( st->lp_speech - Etot ) < 10.0f ) - { - st->lp_speech = 0.98f * st->lp_speech + 0.02f * Etot; - } - else - { - st->lp_speech = st->lp_speech - 0.05f; - } - } - } - - /* Update */ - st->hNoiseEst->Etot_last = Etot; - } - - return; -} -#endif diff --git a/lib_enc/long_enr_fx.c b/lib_enc/long_enr_fx.c index b119478a6..0916b2b09 100644 --- a/lib_enc/long_enr_fx.c +++ b/lib_enc/long_enr_fx.c @@ -15,7 +15,6 @@ * * Compute relative energy, long-term average total noise energy and total active speech energy *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_long_enr_fx( Encoder_State *st_fx, /* i/o: state structure */ const Word16 Etot, /* i : total channel E (see lib_enc\analy_sp.c) Q8 */ @@ -151,7 +150,6 @@ void ivas_long_enr_fx( *-----------------------------------------------------------------*/ return; } -#endif void long_enr_fx( Encoder_State *st_fx, /* i/o: state structure */ const Word16 Etot, /* i : total channel E (see lib_enc\analy_sp.c) */ diff --git a/lib_enc/lp_exc_e.c b/lib_enc/lp_exc_e.c index 7f72670b5..7d23dd6f7 100644 --- a/lib_enc/lp_exc_e.c +++ b/lib_enc/lp_exc_e.c @@ -40,262 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - *-------------------------------------------------------------------*/ - -#define GAIN_PIT_MAX 1.2f -#define ACELP_GAINS_CONST 0.8f /* adaptive codebook gain constraint */ - - -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static float adpt_enr( const int16_t codec_mode, const float *exc, const float *h1, float *y1, const int16_t L_subfr, float *gain, float *g_corr, const int16_t clip_gain, const float *xn, float *xn2, int16_t use_prev_sf_pit_gain ); - - -/*-------------------------------------------------------------------* - * lp_filt_exc_enc() - * - * Low-pass filtering of the adaptive excitation - * Innovation target construction - * Gain quantization limitation - *-------------------------------------------------------------------*/ - -int16_t lp_filt_exc_enc( - const int16_t codec_mode, /* i : codec mode */ - const int16_t coder_type, /* i : coding type */ - const int16_t i_subfr, /* i : subframe index */ - float *exc, /* i/o: pointer to excitation signal frame */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - float *y1, /* o : zero-memory filtered adaptive excitation */ - float *xn2, /* o : target vector for innovation search */ - const int16_t L_subfr, /* i : length of vectors for gain quantization */ - const int16_t L_frame, /* i : frame size */ - float *g_corr, /* o : ACELP correlation values */ - const int16_t clip_gain, /* i : adaptive gain clipping flag */ - float *gain_pit, /* o : adaptive excitation gain */ - int16_t *lp_flag /* i/o: mode selection */ -) -{ - float ener, ener_tmp, gain1, gain2, g_corr2[2], exc_tmp[L_FRAME16k], xn2_tmp[L_FRAME16k]; - float y1_tmp[L_FRAME16k]; - int16_t select, i; - int16_t use_prev_sf_pit_gain; - - gain1 = 0.0f; - gain2 = 0.0f; - ener = 0.0f; - ener_tmp = 0.0f; - use_prev_sf_pit_gain = 0; - - /*----------------------------------------------------------------* - * Find energy of the fixed cb. target with respect to adaptive - * exc. filtering - * Find flag about splitting the gain quantizer in half - * - find the target energy if adaptive exc. is not filtered - * - filter the adaptive excitation and find the target energy - * if the exc. is filtered. - *----------------------------------------------------------------*/ - - if ( codec_mode == MODE2 && coder_type == 100 ) - { - use_prev_sf_pit_gain = 1; - } - - if ( *lp_flag == FULL_BAND || *lp_flag == NORMAL_OPERATION ) - { - if ( use_prev_sf_pit_gain == 1 ) - { - ener = adpt_enr( codec_mode, &exc[i_subfr], h1, y1, L_subfr, gain_pit, g_corr, clip_gain, xn, xn2, use_prev_sf_pit_gain ); - } - else - { - ener = adpt_enr( codec_mode, &exc[i_subfr], h1, y1, L_subfr, &gain1, g_corr, clip_gain, xn, xn2, use_prev_sf_pit_gain ); - } - } - - /*----------------------------------------------------------------* - * Find energy of the fixed cb. target with respect to adaptive - * exc. filtering - * filter the adaptive excitation and find the target energy - * if the exc. is filtered. - *----------------------------------------------------------------*/ - - if ( *lp_flag == LOW_PASS || *lp_flag == NORMAL_OPERATION ) - { - if ( codec_mode == MODE2 && L_frame == L_FRAME16k ) - { - for ( i = 0; i < L_subfr; i++ ) - { - exc_tmp[i] = (float) ( 0.21f * exc[i - 1 + i_subfr] + 0.58f * exc[i + i_subfr] + 0.21f * exc[i + 1 + i_subfr] ); - } - } - else - { - for ( i = 0; i < L_subfr; i++ ) - { - exc_tmp[i] = (float) ( 0.18f * exc[i - 1 + i_subfr] + 0.64f * exc[i + i_subfr] + 0.18f * exc[i + 1 + i_subfr] ); - } - } - - if ( use_prev_sf_pit_gain == 1 ) - { - ener_tmp = adpt_enr( codec_mode, exc_tmp, h1, y1_tmp, L_subfr, gain_pit, g_corr2, clip_gain, xn, xn2_tmp, use_prev_sf_pit_gain ); - } - else - { - ener_tmp = adpt_enr( codec_mode, exc_tmp, h1, y1_tmp, L_subfr, &gain2, g_corr2, clip_gain, xn, xn2_tmp, use_prev_sf_pit_gain ); - } - } - - /*-----------------------------------------------------------------* - * use the best prediction (minimize quadratic error) - *-----------------------------------------------------------------*/ - - if ( ( ( ener_tmp < ener ) && ( *lp_flag == NORMAL_OPERATION ) ) || ( *lp_flag == LOW_PASS ) ) - { - /* use the LP filter for pitch excitation prediction */ - select = LOW_PASS; - mvr2r( exc_tmp, &exc[i_subfr], L_subfr ); - mvr2r( y1_tmp, y1, L_subfr ); - mvr2r( xn2_tmp, xn2, L_subfr ); - - if ( use_prev_sf_pit_gain == 0 ) - { - *gain_pit = gain2; - g_corr[0] = g_corr2[0]; - g_corr[1] = g_corr2[1]; - } - } - else - { - /* no LP filter used for pitch excitation prediction */ - select = FULL_BAND; - if ( use_prev_sf_pit_gain == 0 ) - { - *gain_pit = gain1; - } - } - - return ( select ); -} - -/*-------------------------------------------------------------------* - * adpt_enr() - * - * Find the adaptive excitation energy - * This serves to decide about the filtering of the adaptive excitation - *-------------------------------------------------------------------*/ - -static float adpt_enr( - const int16_t codec_mode, /* i : codec mode */ - const float *exc, /* i : Excitation vector */ - const float *h1, /* i : impuls response */ - float *y1, /* o : zero-memory filtered adpt. excitation */ - const int16_t L_subfr, /* i : vector length */ - float *gain, /* o : subframe adaptive gain */ - float *g_corr, /* o : correlations for adptive gain */ - const int16_t clip_gain, /* i : adaptive gain clipping flag */ - const float *xn, /* i : adaptive codebook target */ - float *xn2, /* o : algebraic codebook target */ - int16_t use_prev_sf_pit_gain /* i : flag to use prev sf pitch gain or not */ -) -{ - float ener; - - conv( exc, h1, y1, L_subfr ); - if ( use_prev_sf_pit_gain == 0 ) - { - *gain = corr_xy1( xn, y1, g_corr, L_subfr, codec_mode == MODE2 ); - - /* clip gain, if necessary to avoid problems at decoder */ - if ( clip_gain == 1 && *gain > 0.95f ) - { - *gain = 0.95f; - } - - if ( clip_gain == 2 && *gain > 0.65f ) - { - *gain = 0.65f; - } - } - - /* find energy of new target xn2[] */ - updt_tar( xn, xn2, y1, *gain, L_subfr ); - ener = dotp( xn2, xn2, L_subfr ); - - return ener; -} - -/*-------------------------------------------------------------------* - * corr_xy1() - * - * Find the correlations between the target xn[] and the filtered adaptive - * codebook excitation y1[]. ( and -2 ) - *-------------------------------------------------------------------*/ - -/*! r: pitch gain (0..GAIN_PIT_MAX) */ -float corr_xy1( - const float xn[], /* i : target signal */ - const float y1[], /* i : filtered adaptive codebook excitation */ - float g_corr[], /* o : correlations and -2 */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t norm_flag /* i : flag for constraining pitch contribution */ -) -{ - float temp1, temp2, gain, gain_p_snr; - - /*-----------------------------------------------------------------* - * Find the ACELP correlations and the pitch gain - * (for current subframe) - *-----------------------------------------------------------------*/ - - /* Compute scalar product */ - temp1 = dotp( xn, y1, L_subfr ); - - /* Compute scalar product */ - temp2 = dotp( y1, y1, L_subfr ) + 0.01f; - - g_corr[0] = temp2; - g_corr[1] = -2.0f * temp1 + 0.01f; - - /* find pitch gain and bound it by [0,GAIN_PIT_MAX] */ - if ( norm_flag ) - { - gain = ( temp1 + 0.01f ) / temp2; - } - else - { - gain = temp1 / temp2; - } - - if ( gain < 0.0f ) - { - gain = 0.0f; - } - if ( gain > GAIN_PIT_MAX ) - { - gain = GAIN_PIT_MAX; - } - - /* Limit the energy of pitch contribution */ - if ( norm_flag ) - { - /* Compute scalar product */ - temp1 = dotp( xn, xn, L_subfr ); - gain_p_snr = (float) ( ACELP_GAINS_CONST * sqrt( temp1 / temp2 ) ); - - if ( gain > gain_p_snr ) - { - gain = gain_p_snr; - } - } - - return gain; -} -#endif diff --git a/lib_enc/lp_exc_e_fx.c b/lib_enc/lp_exc_e_fx.c index f29f4c478..8b9cb113e 100644 --- a/lib_enc/lp_exc_e_fx.c +++ b/lib_enc/lp_exc_e_fx.c @@ -15,10 +15,6 @@ #define GAIN_PIT_MAX 19661 -#ifndef IVAS_FLOAT_FIXED -#define HIGH_LTP_LIMIT 1.0f -#define LOW_LTP_LIMIT 0.55f -#endif /*-------------------------------------------------------------------* * Local function prototypes diff --git a/lib_enc/lsf_enc.c b/lib_enc/lsf_enc.c index 965caa246..06e686f81 100644 --- a/lib_enc/lsf_enc.c +++ b/lib_enc/lsf_enc.c @@ -44,2060 +44,6 @@ #include "prot_fx_enc.h" #include "basop_proto_func.h" #include "ivas_prot.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif #include "ivas_rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define MSVQ_MAXCNT 3000 - - -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void lsfq_CNG( BSTR_ENC_HANDLE hBstr, const float *lsf, const float *wghts, float *qlsf ); - -static void lsf_mid_enc( BSTR_ENC_HANDLE hBstr, int16_t nb_bits, const int32_t int_fs, const float qisp0[], const float qisp1[], float isp[], const int16_t coder_type, const int16_t bwidth, const float Bin_Ener[], const int16_t ppp_mode, const int16_t nelp_mode ); - -static float vq_lvq_lsf_enc( const int16_t pred_flag, const int16_t mode, const float u[], const int16_t *levels, const int16_t stages, const float w[], int16_t Idx[], const float *lsf, const float *pred, float *resq, float *lsfq ); - -static float qlsf_ARSN_tcvq_Enc_16k( const float *x, float *y, int16_t *indice, const float *w, const int16_t nBits, const int16_t safety_net ); - - -/*-------------------------------------------------------------------* - * lsf_enc() - * - * Quantization of LSF vector - *-------------------------------------------------------------------*/ - -void lsf_enc( - Encoder_State *st, /* i/o: state structure */ - float *lsf_new, /* o : quantized LSF vector */ - float *lsp_new, /* i/o: LSP vector to quantize/quantized */ - float *lsp_mid, /* i/o: mid-frame LSP vector */ - float *Aq, /* o : quantized A(z) for 4 subframes */ - const int16_t tdm_low_rate_mode, /* i : secondary channel low rate mode flag */ - const int16_t GSC_IVAS_mode, /* i : GSC IVAS mode */ - const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -) -{ - int16_t i, nBits, force_sf, no_param_lpc; - float fec_lsf[M], stab; - int16_t param_lpc[NPRM_LPC_NEW]; - int16_t coder_type, ppp_mode, nelp_mode; - - if ( st->core_brate == SID_2k40 || st->core_brate == SID_1k75 ) - { - coder_type = INACTIVE; - } - else - { - coder_type = st->coder_type; - } - - if ( coder_type == AUDIO && GSC_IVAS_mode > 0 ) - { - coder_type = GENERIC; - } - - - /* initialize */ - no_param_lpc = 0; - - if ( st->Opt_SC_VBR ) - { - ppp_mode = st->hSC_VBR->ppp_mode; - nelp_mode = st->hSC_VBR->nelp_mode; - } - else - { - ppp_mode = 0; - nelp_mode = 0; - } - - /* convert LSPs to LSFs */ - lsp2lsf( lsp_new, lsf_new, M, st->sr_core ); - - /* check resonance for pitch clipping algorithm */ - gp_clip_test_lsf( st->element_mode, st->core_brate, lsf_new, st->clip_var, 0 ); - - /*-------------------------------------------------------------------------------------* - * Find the number of bits for LSF quantization - *-------------------------------------------------------------------------------------*/ - - nBits = 0; - if ( st->core_brate == SID_2k40 ) - { - nBits = LSF_BITS_CNG; - } - else - { - if ( nelp_mode == 0 && ppp_mode == 0 ) - { - nBits = st->acelp_cfg.lsf_bits; - } - else if ( nelp_mode == 1 ) - { - if ( st->bwidth == NB ) - { - nBits = 32; /* Stole 1 bit for SID/NELP harmonization*/ - } - else if ( st->bwidth == WB ) - { - nBits = 30; /* Stole 1 bit for SID/NELP harmonization */ - } - } - else if ( ppp_mode == 1 ) - { - - /*The LSF bit scaling does not work here. */ - nBits = 26; /*Stole 1 bit for SID PPP harmonization*/ - } - } - - - force_sf = 0; - if ( st->Nb_ACELP_frames < 3 && st->core_brate != SID_2k40 ) - { - /* first three ACELP frames after an HQ frame shall be processed only with safety-net quantizer */ - force_sf = 1; - } - - if ( st->next_force_safety_net == 1 ) - { - /* in case of unstable filter, choose safety-net to help FEC */ - force_sf = 1; - st->next_force_safety_net = 0; - } - - /*-------------------------------------------------------------------------------------* - * LSF quantization - *-------------------------------------------------------------------------------------*/ - - lsf_end_enc( st, lsf_new, lsf_new, nBits, coder_type, force_sf, param_lpc, &no_param_lpc, NULL, st->coder_type_raw, tdm_lsfQ_PCh ); - - /* convert quantized LSFs back to LSPs */ - lsf2lsp( lsf_new, lsp_new, M, st->sr_core ); - - if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) - { - /* don't use old LSF values if this is the first ACELP frame after HQ frames */ - mvr2r( lsf_new, st->lsf_old, M ); - } - - /* set seed_acelp used in UC mode */ - if ( coder_type == UNVOICED && st->element_mode > EVS_MONO ) - { - st->seed_acelp = 0; - for ( i = no_param_lpc - 1; i >= 0; i-- ) - { - /* rightshift before *seed_acelp+param_lpc[i] to avoid overflows*/ - st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); - } - } - - if ( st->core_brate == SID_2k40 ) - { - /* return if SID frame (conversion to A(z) done in the calling function) */ - return; - } - - /*-------------------------------------------------------------------------------------* - * FEC - enforce safety-net in the next frame in case of unstable filter - *-------------------------------------------------------------------------------------*/ - - if ( st->last_L_frame != st->L_frame ) - { - /* FEC - in case of core switching, use old LSFs that have been smoothed with adaptive mean */ - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - } - - FEC_lsf_estim_enc( st, fec_lsf ); - - /* FEC - calculate LSF stability */ - stab = lsf_stab( lsf_new, fec_lsf, 0, st->L_frame ); - - if ( st->L_frame == L_FRAME16k && stab < STAB_FAC_LIMIT && coder_type == GENERIC ) - { - st->next_force_safety_net = 1; - } - else - { - if ( stab < STAB_FAC_LIMIT && ( st->clas == VOICED_CLAS || ( st->clas < VOICED_CLAS && coder_type == AUDIO ) ) ) - { - st->next_force_safety_net = 1; - } - } - - /* FEC - update adaptive LSF mean vector */ - for ( i = 0; i < M; i++ ) - { - st->lsf_adaptive_mean[i] = ( st->lsfoldbfi1[i] + st->lsfoldbfi0[i] + lsf_new[i] ) / 3; - } - - /* FEC - update LSF memories */ - mvr2r( st->lsfoldbfi0, st->lsfoldbfi1, M ); - mvr2r( lsf_new, st->lsfoldbfi0, M ); - - /*-------------------------------------------------------------------------------------* - * Mid-frame LSF encoding - * LSP interpolation and conversion of LSPs to A(z) - *-------------------------------------------------------------------------------------*/ - - if ( st->rate_switching_reset ) - { - /*extrapolation in case of unstable LSF convert*/ - mvr2r( lsp_new, st->lsp_old, M ); - mvr2r( lsf_new, st->lsf_old, M ); - } - - /* Mid-frame LSF encoding */ - lsf_mid_enc( st->hBstr, st->acelp_cfg.mid_lsf_bits, st->sr_core, st->lsp_old, lsp_new, lsp_mid, coder_type, st->bwidth, st->Bin_E_old, ppp_mode, nelp_mode ); - - if ( st->last_core == HQ_CORE && st->core == ACELP_CORE ) - { - /* don't use old LSP/LSF values if this is the first ACELP frame after HQ frames */ - mvr2r( lsp_mid, st->lsp_old, M ); - lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); - } - - if ( tdm_low_rate_mode == 1 && coder_type > UNVOICED ) - { - if ( st->active_cnt == 1 ) - { - mvr2r( lsp_mid, st->lsp_old, M ); - lsp2lsf( lsp_mid, st->lsf_old, M, st->sr_core ); - mvr2r( lsp_new, lsp_mid, M ); - } - - /* LSP interpolation and conversion of LSPs to A(z) - two-subframe mode */ - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, -2 ); - } - else - { - /* LSP interpolation and conversion of LSPs to A(z) */ - int_lsp4( st->L_frame, st->lsp_old, lsp_mid, lsp_new, Aq, M, 0 ); - } - - /*------------------------------------------------------------------* - * Check LSF stability (distance between old LSFs and current LSFs) - *------------------------------------------------------------------*/ - - if ( st->core_brate != SID_2k40 ) - { - st->stab_fac = lsf_stab( lsf_new, st->lsf_old, 0, st->L_frame ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * lsfq_CNG() - * - * LSF quantizer for SID frames (uses 29 bits, 4 for VQ, 25 for LVQ) - * Note: - * The sampling frequency of the LP-CNG frame can be determined by checking the value of the highest order LSF - * coefficient (last coefficient of lsf). If the last LSF coefficient (lsf[M-1]) is larger than 6350 - * the decoded frame is WB2 with sampling rate of 16 kHz, otherwise it is sampled at 12.8kHz and contains - * either NB or WB LSF data. - *-------------------------------------------------------------------*/ - -static void lsfq_CNG( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *lsf, - const float *wghts, - float *qlsf_out ) -{ - int16_t i, j, idx_cv, idx_lvq[3]; - float min_dist, dist, dd[M], ddq[M]; - const float *p_cb; - int16_t first_cb, last_cb; - int16_t idx_lead_cng[2], idx_scale_cng[2]; - - float qlsf[M]; - idx_cv = 0; - - /* quantize first stage with 4 bits */ - if ( lsf[M - 1] > WB_LIMIT_LSF ) /* 16kHz sampled LSF vector*/ - { - p_cb = &CNG_SN1[0]; - first_cb = 0; - last_cb = 6; - } - else /* 12.8kHz sampled LSF vector*/ - { - p_cb = &CNG_SN1[6 * M]; - first_cb = 6; - last_cb = M; - } - - min_dist = 1.0e30f; - for ( i = first_cb; i < last_cb; i++ ) - { - dist = 0.0f; - for ( j = 0; j < M; j++ ) - { - dist += wghts[j] * ( *p_cb ) * ( *p_cb - 2 * lsf[j] ); - p_cb++; - } - - if ( dist < min_dist ) - { - min_dist = dist; - idx_cv = i; - } - } - - /* calculate difference */ - for ( i = 0; i < M; i++ ) - { - dd[i] = lsf[i] - CNG_SN1[idx_cv * M + i]; - } - - /* quantize the difference with LVQ */ - mslvq_cng( idx_cv, dd, qlsf, ddq, idx_lead_cng, idx_scale_cng, wghts ); - - index_lvq( ddq, idx_lead_cng, idx_scale_cng, START_CNG_IVAS + idx_cv, idx_lvq, 0 ); - - v_add( qlsf, &CNG_SN1[idx_cv * M], qlsf, M ); - /* write the VQ index to the bitstream */ - push_indice( hBstr, IND_ISF_0_0, idx_cv, 4 ); - - /* write the LVQ index to the bitstream */ - push_indice( hBstr, IND_ISF_0_1, idx_lvq[0], LEN_INDICE ); - push_indice( hBstr, IND_ISF_0_1, idx_lvq[1], LSF_BITS_CNG - 4 - LEN_INDICE ); - - mvr2r( qlsf, qlsf_out, M ); - - return; -} - -/*-------------------------------------------------------------------* - * qlsf_Mode_Select() - * - * Mode selection for LSF quantizer - *-------------------------------------------------------------------*/ - -static int16_t qlsf_Mode_Select( - const float *lsf, /* i : LSF vector */ - const float *w, /* i : weighting vector */ - const float *pred1, /* i : prediction vector */ - const float streaklimit, /* i : predictive streak limit */ - const float op_loop_thr /* i : Open-loop Threshold */ -) -{ - int16_t i; - int16_t safety_net; - float pred_pow2[M], En; - - /* calculate the prediction residual */ - for ( i = 0; i < M; i++ ) - { - pred_pow2[i] = lsf[i] - pred1[i]; - } - - /* calculate its energy */ - v_mult( pred_pow2, pred_pow2, pred_pow2, M ); - En = dotp( pred_pow2, w, M ); - - /* choose the mode */ - if ( En > streaklimit * op_loop_thr ) - { - /* Safety-net */ - safety_net = 1; - } - else - { - /* Predictive */ - safety_net = 0; - } - - return safety_net; -} - - -/*-------------------------------------------------------------------* - * lsf_end_enc() - * - * Quantization of LSF parameters - *-------------------------------------------------------------------*/ - -void lsf_end_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *lsf, /* i : LSF in the frequency domain (0..6400) */ - float *qlsf, /* o : quantized LSF */ - const int16_t nBits_in, /* i : number of bits to spend on ISF quantization */ - const int16_t coder_type_org, /* i : coding type */ - const int16_t force_sf, /* i : Force safety-net usage (if possible), due to filter instability, MDCT-core switching etc. */ - int16_t *lpc_param, - int16_t *no_indices, - int16_t *bits_param_lpc, - const int16_t coder_type_raw, - const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ -) -{ - int16_t i; - int16_t Idx0[MAX_VQ_STAGES + 3]; /* Optimal codebook indices for safety-net quantizer */ - int16_t Idx1[MAX_VQ_STAGES + 3]; /* Optimal codebook indices for predictive quantizer */ - int16_t indice[MAX_VQ_STAGES + 3]; /* Temp. array of indice for vector de-quantizer */ - int16_t mode_lvq = 0, mode_lvq_p = 0; - int16_t bits0[MAX_VQ_STAGES], bits1[MAX_VQ_STAGES]; - const int16_t *Bit_alloc1 = NULL; - float Err[2]; /* Quantization error for safety-net(0) and predictive(1) quantizers */ - float Tmp[M]; /* Temporary target vector (mean and prediction removed) */ - float pred0[M]; /* Prediction for the safety-net quantizer (usually mean) */ - float pred1[M]; /* Prediction for the predictive quantizer */ - float pred2[M]; /* Prediction for the predictive quantizer */ - float wghts[M]; /* Weighting used for quantizer (currently GSM based) */ - int16_t stages0; /* Amount of stages used by safety-net quantizer */ - int16_t stages1; /* Amount of stages used by predictive quantizer */ - int16_t levels0[MAX_VQ_STAGES]; /* Sizes of different codebook stages for safety-net quantizer */ - int16_t levels1[MAX_VQ_STAGES]; /* Sizes of different codebook stages for predictive quantizer */ - int16_t predmode; /* 0: safety-net only, 1: predictive only, 2: best of the two */ - int16_t safety_net, cumleft, num_bits; - int16_t *Idx, stages, *bits; - float Tmp1[M], Tmp2[M]; /* Temporary target vectors for MA and AR quantizers respectively */ - float abs_threshold; /* Absolute Error value that is considered as "good enough" (in practice close to SD of 1.0dB)*/ - float lsfq[M * 2], resq[M * 2]; - int16_t coder_type; - int16_t nBits; - int16_t TCQIdx0[M + 2]; /* Optimal codebook indices for VQ-TCQ quantizer */ - int16_t *TCQIdx; - int16_t flag_1bit_gran; - BSTR_ENC_HANDLE hBstr = st->hBstr; - float pred3[M]; - int16_t dummy, dummy_v[5]; - - flag_1bit_gran = ( st->element_mode > EVS_MONO ); - nBits = nBits_in; - - if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k && st->codec_mode == MODE1 && ( st->idchan == 0 ) /* this bit is used only for primary channel or mono */ ) - { - if ( coder_type_raw == VOICED ) - { - coder_type = VOICED; /* Reflect Inactive mode */ - if ( flag_1bit_gran == 1 ) - { - nBits--; - } - } - else - { - nBits--; /* This is for real Generic*/ - coder_type = coder_type_org; - } - } - else - { - coder_type = coder_type_org; - } - - - /*--------------------------------------------------------------------------------* - * Calculate the number of stages and levels for each stage based on allowed bit budget - * Set absolute threshold for codebook-type decision logic - *--------------------------------------------------------------------------------*/ - - if ( st->bwidth == NB ) - { - abs_threshold = SFNETLOWLIMIT_NB_FLT; - } - else - { - abs_threshold = SFNETLOWLIMIT_WB_FLT; - } - - Unified_weighting( &st->Bin_E[L_FFT / 2], lsf, wghts, st->bwidth == NB, coder_type == UNVOICED, st->sr_core, M ); - - /*--------------------------------------------------------------------------------* - * LSF quantization of SID frames - *--------------------------------------------------------------------------------*/ - - if ( st->core_brate == SID_2k40 ) - { - lsfq_CNG( st->hBstr, lsf, wghts, qlsf ); - v_sort_float( qlsf, 0, M - 1 ); - reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); - - return; - } - - find_pred_mode_float( &predmode, coder_type, st->bwidth, st->sr_core, &mode_lvq, &mode_lvq_p, st->total_brate ); - - /*----------------------------------------------------------------* - * Calculate number of stages and levels for each stage based on the allowed bit allocation - * (subtract one bit for LSF predictor selection) - *----------------------------------------------------------------*/ - - lsf_allocate( nBits - ( predmode >> 1 ), mode_lvq, mode_lvq_p, &stages0, &stages1, levels0, levels1, bits0, bits1 ); - - /*--------------------------------------------------------------------------------* - * LSF quantization of all other frames but SID frames - * Select safety-net or predictive mode - *--------------------------------------------------------------------------------*/ - - Err[0] = FLT_MAX; - Err[1] = FLT_MAX; - /* for mem_MA update */ - for ( i = 0; i < M; i++ ) - { - pred1[i] = ModeMeans[mode_lvq][i] + MU_MA * st->mem_MA[i]; - } - - /* TD stereo SCh: perform intra-frame prediction with pulling-to-mean */ - if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) - { - /* if secondary channel predmode is set to be > 2 */ - predmode += 3; -#ifdef IVAS_FLOAT_FIXED - Word16 tdm_lsfQ_PCh_fx[M]; - Word16 pred3_fx[M]; - for ( int ii = 0; ii < M; ii++ ) - { - tdm_lsfQ_PCh_fx[ii] = (Word16) ( ( tdm_lsfQ_PCh[ii] ) * 2.56f ); - pred3_fx[ii] = (Word16) ( ( pred3[ii] ) * 2.56f ); - } - - tdm_SCh_LSF_intra_pred_fx( st->element_brate, tdm_lsfQ_PCh_fx, pred3_fx ); - - for ( int ii = 0; ii < M; ii++ ) - { - pred3[ii] = ( pred3_fx[ii] ) / 2.56f; - } -#else - tdm_SCh_LSF_intra_pred( st->element_brate, tdm_lsfQ_PCh, pred3 ); -#endif - } - - if ( predmode == 0 ) /* Safety-net only */ - { - /* Subtract only mean */ - mvr2r( ModeMeans[mode_lvq], pred0, M ); - v_sub( lsf, pred0, Tmp, M ); - - /* LVQ quantization (safety-net only) */ - Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, resq, lsfq ); - safety_net = 1; - st->pstreaklen = 0; /* Streak is ended with safety-net */ - } - else if ( predmode == 1 ) /* only MA prediction */ - { - v_sub( lsf, pred1, Tmp1, M ); - Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp1, levels1, stages1, wghts, Idx1, lsf, pred1, resq, lsfq ); - - safety_net = 0; - } - else /* Switched Safety-Net/AR prediction */ - { - if ( predmode == 2 ) - { - /* Subtract mean and AR prediction */ - mvr2r( ModeMeans[mode_lvq], pred0, M ); - - /* subtract only mean */ - v_sub( lsf, pred0, Tmp, M ); - - for ( i = 0; i < M; i++ ) - { - /* subtract mean and AR prediction */ - pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); - Tmp2[i] = lsf[i] - pred2[i]; - } - - /* Adaptive scaling factor (multiplier) is updated in order to reduce the amount of consecutive predictive frames in - case of possible frame erasure. AR-predictive usage for VOICED mode is allowed to be higher than other modes. */ - if ( ( ( st->pstreaklen > ( STREAKLEN + 3 ) ) && ( coder_type == VOICED ) ) || ( ( st->pstreaklen > ( STREAKLEN ) ) && ( coder_type != VOICED ) ) ) - { - /* update the adaptive scaling factor to become smaller with increasing number of concecutive predictive frames. */ - st->streaklimit *= STREAKMULT; - } - - if ( st->pstreaklen == 0 ) - { - /* reset the adaptive scaling factor */ - st->streaklimit = 1.0f; - } - - /* VOICED_WB@16kHz */ - if ( st->sr_core == INT_FS_16k && coder_type == VOICED && flag_1bit_gran == 0 ) - { - /* select safety_net or predictive in open loop*/ - safety_net = qlsf_Mode_Select( lsf, wghts, pred2, st->streaklimit, OP_LOOP_THR_HVO_FLT ); - - if ( force_sf == 1 ) - { - safety_net = 1; - } - - if ( safety_net ) - { - /* Safety-net - BC-TCQ quantization : SN */ - Err[0] = qlsf_ARSN_tcvq_Enc_16k( Tmp, lsfq, TCQIdx0, wghts, nBits - 1, safety_net ); - st->pstreaklen = 0; - } - else - { - /* predictive - BC-TCQ quantization : AR */ - /* For consistency Err[1] contains predictive error */ - Err[1] = qlsf_ARSN_tcvq_Enc_16k( Tmp2, lsfq, TCQIdx0, wghts, nBits - 1, safety_net ); - ( st->pstreaklen )++; - } - } - /* all other frames (not VOICED@16kHz) */ - else - { - /* safety-net */ - Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, resq, lsfq ); - /* Predictive quantizer is calculated only if it can be selected, this saves computation */ - if ( !force_sf || Err[0] > abs_threshold ) - { - Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp2, levels1, stages1, wghts, Idx1, lsf, pred2, &resq[M], &lsfq[M] ); - } - /* Select whether to use safety-net or predictive LSF quantizer. The decision is based on following: - if the non-predictive (safety-net) quantization error (Err[0]) is low enough it is selected - or if the predictively quantized error (Err[1]) is by at least adaptive margin smaller than non-predictive quantizer. - or if the in case of frame erasure the resulting concealed predictive LSF would be unstable safety-net is selected */ - if ( force_sf || Err[0] * ( st->streaklimit ) < PREFERSFNET * Err[1] || Err[0] < abs_threshold ) - { - safety_net = 1; - st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ - } - else - { - safety_net = 0; - ( st->pstreaklen )++; /* Increase the consecutive predictive frame counter by one */ - } - } - } - else /* of "if (predmode==2)" */ - { - mvr2r( ModeMeans[mode_lvq], pred0, M ); - - if ( predmode == 4 ) - { - mode_lvq_p = 9; /* force to Generic WB with AR*/ - } - - for ( i = 0; i < M; i++ ) - { - /* subtract mean and AR prediction */ - pred2[i] = pred0[i] + Predictors[mode_lvq_p][i] * ( st->mem_AR[i] - pred0[i] ); - Tmp[i] = lsf[i] - pred2[i]; - Tmp2[i] = lsf[i] - pred3[i]; - } - - /* Adaptive scaling factor (multiplier) is updated in order to reduce the amount of consecutive predictive frames in - case of possible frame erasure. AR-predictive usage for VOICED mode is allowed to be higher than other modes. */ - if ( st->pstreaklen > ( STREAKLEN ) ) - { - /* update the adaptive scaling factor to become smaller with increasing number of concecutive predictive frames. */ - st->streaklimit *= STREAKMULT; - } - - if ( st->pstreaklen == 0 ) - { - /* reset the adaptive scaling factor */ - st->streaklimit = 1.0f; - } - - /* intra pred */ - /* use G AR pred for the intra mode (as a safety mode, this is why the indexes 0/1 are interchanged)*/ - - lsf_allocate( nBits - 1, mode_lvq, 9, &stages1, &stages0, levels1, levels0, bits1, bits0 ); - - Err[0] = vq_lvq_lsf_enc( 2, 9, Tmp2, levels0, stages0, wghts, Idx0, lsf, pred3, &resq[M], &lsfq[M] ); - - if ( force_sf ) - { - safety_net = 1; /* intra-frame prediction */ - st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ - } - else - { /* try also the inter frame prediction */ - - /* AR inter-frame prediction */ - lsf_allocate( nBits - 1, mode_lvq, mode_lvq_p, &dummy, &stages1, dummy_v, levels1, dummy_v, bits1 ); - - Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp, levels1, stages1, wghts, Idx1, lsf, pred2, resq, lsfq ); - - if ( Err[0] * ( st->streaklimit ) < PREFERSFNET * Err[1] ) - { - safety_net = 1; - st->pstreaklen = 0; /* Reset the consecutive predictive frame counter */ - } - else - { - safety_net = 0; - ( st->pstreaklen )++; /* Increase the consecutive predictive frame counter by one */ - } - } - } - } - - /*--------------------------------------------------------------------------* - * Write indices to array - *--------------------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 && st->core == ACELP_CORE ) - { - /* write coder_type bit for VOICED@16kHz or GENERIC@16kHz */ - if ( coder_type_org == GENERIC && st->sr_core == INT_FS_16k && st->idchan == 0 ) - { - /* VOICED =2 and GENERIC=3, so "coder_type-2" means VOICED =0 and GENERIC=1*/ - push_indice( hBstr, IND_LSF_PREDICTOR_SELECT_BIT, coder_type - 2, 1 ); - } - - /* write predictor selection bit */ - if ( predmode >= 2 ) - { - push_indice( hBstr, IND_LSF_PREDICTOR_SELECT_BIT, safety_net, 1 ); - } - - if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) - { - /* BC-TCVQ (only for VOICED@16kHz) */ - TCQIdx = &TCQIdx0[1]; - Bit_alloc1 = &BC_TCVQ_BIT_ALLOC_40B[1]; - for ( i = 0; i < M / 2 + 3; i++ ) - { - push_indice( hBstr, IND_LSF, TCQIdx[i], Bit_alloc1[i] ); - } - } - else - { - cumleft = nBits; - if ( predmode >= 2 ) - { - /* subtract predictor selection bit */ - cumleft = nBits - 1; - } - - if ( safety_net ) - { - stages = stages0; - Idx = Idx0; - bits = bits0; - } - else - { - stages = stages1; - Idx = Idx1; - bits = bits1; - } - - for ( i = 0; i < stages - 1; i++ ) - { - indice[i] = Idx[i]; - num_bits = bits[i]; - cumleft -= num_bits; - - push_indice( hBstr, IND_LSF, indice[i], num_bits ); - } - - while ( cumleft > 0 ) - { - indice[i] = Idx[i]; - - if ( cumleft > LEN_INDICE ) - { - num_bits = LEN_INDICE; - } - else - { - num_bits = cumleft; - } - - cumleft -= num_bits; - - push_indice( hBstr, IND_LSF, indice[i], num_bits ); - - i++; - } - } - } - else - { - if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) - { - /* BC-TCVQ (only for VOICED@16kHz) */ - /* Number of quantization indices */ - *no_indices = 10; - for ( i = 0; i < *no_indices; i++ ) - { - lpc_param[i] = TCQIdx0[i]; - bits_param_lpc[i] = BC_TCVQ_BIT_ALLOC_40B[i]; - } - } - else - { - /* Number of quantization indices */ - - /* there are 31 bits */ - if ( safety_net == 1 ) - { - Idx = Idx0; - *no_indices = stages0 + 1; - for ( i = 0; i < stages0; i++ ) - { - lpc_param[i] = Idx[i]; - indice[i] = Idx[i]; - bits_param_lpc[i] = bits0[i]; - } - lpc_param[stages0] = Idx[stages0]; - indice[stages0] = Idx[stages0]; - - bits_param_lpc[stages0 - 1] = LEN_INDICE; - bits_param_lpc[stages0] = bits0[stages0 - 1] - LEN_INDICE; - } - else - { - *no_indices = stages1 + 1; - Idx = Idx1; - for ( i = 0; i < stages1; i++ ) - { - lpc_param[i] = Idx[i]; - indice[i] = Idx[i]; - bits_param_lpc[i] = bits1[i]; - } - lpc_param[stages1] = Idx[stages1]; - indice[stages1] = Idx[stages1]; - - bits_param_lpc[stages1 - 1] = LEN_INDICE; - bits_param_lpc[stages1] = bits1[stages1 - 1] - LEN_INDICE; - } - if ( predmode == 2 ) - { - for ( i = *no_indices; i > 0; i-- ) - { - lpc_param[i] = lpc_param[i - 1]; - bits_param_lpc[i] = bits_param_lpc[i - 1]; - } - lpc_param[0] = safety_net; /* put the safety net info on the last param */ - bits_param_lpc[0] = 1; - *no_indices = *no_indices + 1; - } - } - } - - - /*--------------------------------------------------------------------------* - * De-quantize encoded LSF vector - *--------------------------------------------------------------------------*/ - - if ( safety_net ) - { - /* Safety-net */ - if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) - { - /* BC-TCQ */ - mvr2r( lsfq, st->mem_MA, M ); - v_add( lsfq, pred0, qlsf, M ); - } - else - { - if ( st->tdm_LRTD_flag == 0 && st->idchan == 1 && tdm_lsfQ_PCh != NULL ) - { - /* intra mode*/ - vq_dec_lvq( 0, qlsf, &indice[0], stages0, M, 9, /*mode_lvq_p,*/ levels0[stages0 - 1] ); - v_add( qlsf, pred3, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - } - else - { - vq_dec_lvq( 1, qlsf, &indice[0], stages0, M, mode_lvq, levels0[stages0 - 1] ); - - v_add( qlsf, pred0, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - } - } - } - else - { - if ( coder_type == VOICED && st->sr_core == INT_FS_16k && flag_1bit_gran == 0 ) - { - /* BC-TCVQ */ - mvr2r( lsfq, st->mem_MA, M ); - v_add( lsfq, pred2, qlsf, M ); - } - else - { - /* LVQ */ - vq_dec_lvq( 0, qlsf, &indice[0], stages1, M, mode_lvq_p, levels1[stages1 - 1] ); - if ( predmode == 1 ) - { - mvr2r( qlsf, st->mem_MA, M ); - v_add( qlsf, pred1, qlsf, M ); - } - else - { - v_add( qlsf, pred2, qlsf, M ); - v_sub( qlsf, pred1, st->mem_MA, M ); - } - } - } - - /*--------------------------------------------------------------------------* - * Sort the quantized vector - * Verify stability - * Update AR-predictor memory - *--------------------------------------------------------------------------*/ - - /* Sort the quantized vector to ascending order */ - v_sort_float( qlsf, 0, M - 1 ); - - /* Verify stability by adding minimum separation */ - reorder_lsf( qlsf, MODE1_LSF_GAP, M, st->sr_core ); - - /* Update predictor memories */ - mvr2r( qlsf, st->mem_AR, M ); - - return; -} - - -/*-------------------------------------------------------------------* - * first_VQstages() - * - * - *-------------------------------------------------------------------*/ -void first_VQstages( - const float *const *cb, - const float u[], /* i : vector to be encoded (prediction and mean removed) */ - const int16_t *levels, /* i : number of levels in each stage */ - const int16_t stagesVQ, /* i : number of stages */ - const float w[], /* i : weights */ - const int16_t N, /* i : vector dimension */ - const int16_t max_inner, /* i : maximum number of swaps in inner loop */ - int16_t indices_VQstage[] ) -{ - float ftmp, resid_buf[2 * LSFMBEST * M], *resid[2], dist_buf[2 * LSFMBEST], *dist[2]; - float en, tmp, Tmp[M], *pTmp; - int16_t *pTmp_short, idx_buf[2 * LSFMBEST * MAX_VQ_STAGES], parents[LSFMBEST], counter = 0, j, m, s, c, c2, p_max, *indices[2]; - int16_t maxC = LSFMBEST; - - /*float dd[16];*/ - const float *cb_stage, *cbp; - - /* Set pointers to previous (parent) and current node (parent node is indexed [0], current node is indexed [1]) */ - indices[0] = idx_buf; - indices[1] = idx_buf + maxC * stagesVQ; - resid[0] = resid_buf; - resid[1] = resid_buf + maxC * N; - dist[0] = dist_buf; - dist[1] = dist_buf + maxC; - - set_s( idx_buf, 0, 2 * stagesVQ * maxC ); - set_s( parents, 0, maxC ); - - /* Set up inital distance vector */ - for ( tmp = 0, j = 0; j < N; j++ ) - { - tmp += u[j] * u[j] * w[j]; - } - set_f( dist[1], tmp, maxC ); - - /* Set up inital error (residual) vectors */ - pTmp = resid[1]; - for ( c = 0; c < maxC; c++ ) - { - mvr2r( u, pTmp, N ); - pTmp += N; - } - - /*----------------------------------------------------------------* - * LSF quantization - *----------------------------------------------------------------*/ - - /* Loop over all stages */ - for ( m = 1, s = 0; s < stagesVQ; s++ ) - { - /* set codebook pointer to point to first stage */ - cbp = cb[s]; - - /* save pointer to the beginning of the current stage */ - cb_stage = cbp; - - /* swap pointers to parent and current nodes */ - pTmp_short = indices[0]; - indices[0] = indices[1]; - indices[1] = pTmp_short; - - pTmp = resid[0]; - resid[0] = resid[1]; - resid[1] = pTmp; - - pTmp = dist[0]; - dist[0] = dist[1]; - dist[1] = pTmp; - - /* p_max points to maximum distortion node (worst of best) */ - p_max = 0; - - /* set distortions to a large value */ - set_f( dist[1], 99e10f, maxC ); - - for ( j = 0; j < levels[s]; j++ ) - { - /* compute weighted codebook element and its energy */ - for ( c2 = 0; c2 < N; c2++ ) - { - Tmp[c2] = w[c2] * cbp[c2]; - } - - en = cbp[0] * Tmp[0]; - for ( c2 = 1; c2 < N; c2++ ) - { - en += cbp[c2] * Tmp[c2]; - } - cbp += N; - - /* iterate over all parent nodes */ - for ( c = 0; c < m; c++ ) - { - pTmp = &resid[0][c * N]; - tmp = pTmp[0] * Tmp[0]; - for ( c2 = 1; c2 < N; c2++ ) - { - tmp += pTmp[c2] * Tmp[c2]; - } - tmp = en - 2.0f * tmp; - tmp += dist[0][c]; - - if ( tmp <= dist[1][p_max] ) - { - /* replace worst */ - dist[1][p_max] = tmp; - indices[1][p_max * stagesVQ + s] = j; - parents[p_max] = c; - - /* limit number of times inner loop is entered */ - if ( counter < max_inner ) - { - counter++; - if ( counter < max_inner ) - { - /* find new worst */ - p_max = maximum( dist[1], maxC, &ftmp ); - } - else - { - /* find minimum distortion */ - p_max = minimum( dist[1], maxC, &ftmp ); - } - } - } - } - } - - /*------------------------------------------------------------* - * Compute error vectors for each node - *------------------------------------------------------------*/ - - for ( c = 0; c < maxC; c++ ) - { - /* subtract codebook entry from the residual vector of the parent node */ - pTmp = resid[1] + c * N; - mvr2r( resid[0] + parents[c] * N, pTmp, N ); - v_sub( pTmp, cb_stage + ( indices[1][c * stagesVQ + s] ) * N, pTmp, N ); - - /* get indices that were used for parent node */ - mvs2s( indices[0] + parents[c] * stagesVQ, indices[1] + c * stagesVQ, s ); - } - - m = maxC; - } - - mvs2s( indices[1], indices_VQstage, maxC * stagesVQ ); - - return; -} - -/*--------------------------------------------------------------------------- - * vq_enc_lsf_lvq() - * - * Multi-stage VQ encoder for LSF quantization. Trained codebooks are used in initial stages - * and lattice-VQ quantization is applied on residual vector in other stages. - * - * Note: - * Compared to normal multistage VQ resulting LSF vector is reordered to ascending order before - * weighted error calculation (spectral distortion) at the final stage. - * - * Returns: - * Weighted error - *--------------------------------------------------------------------------*/ - -static float vq_lvq_lsf_enc( - const int16_t pred_flag, - const int16_t mode, - const float u[], - const int16_t levels[], - const int16_t stages, - const float w[], - int16_t Idx[], - const float *lsf, - const float *pred, - float *resq, - float *lsfq ) -{ - int16_t i; - const float *const *cb, *cb_stage; - float cand[LSFMBEST][M]; - int16_t maxC = LSFMBEST, stagesVQ; - int16_t mode_glb, j, indices_firstVQ[LSFMBEST * MAX_VQ_STAGES], c2; - float dd[M]; - float quant[LSFMBEST][M], diff[M]; - float lat_cv[LSFMBEST][M], e[LSFMBEST], ftmp, tmp; - int16_t idx_lead[LSFMBEST][2], idx_scale[LSFMBEST][2]; - - stagesVQ = stages - 1; - /* Codebook selection */ - if ( pred_flag == 0 ) /* safety net*/ - { - cb = &Quantizers[CB_lsf[mode]]; - if ( mode < 6 ) /* for NB */ - { - mode_glb = offset_lvq_modes_SN[mode] + offset_in_lvq_mode_SN[mode][levels[stagesVQ] - min_lat_bits_SN[mode]]; - } - else - { - mode_glb = offset_lvq_modes_SN[mode] + levels[stagesVQ] - min_lat_bits_SN[mode]; /* there is granularity of 1 bit */ - } - } - else /* pred */ - { - cb = &Quantizers_p[CB_p_lsf[mode]]; - if ( ( mode < 6 ) || ( mode == 12 ) ) /* for NB or I 16k */ - { - mode_glb = offset_lvq_modes_pred[mode] + offset_in_lvq_mode_pred[mode][levels[stagesVQ] - min_lat_bits_pred[mode]]; - } - else - { - mode_glb = offset_lvq_modes_pred[mode] + levels[stagesVQ] - min_lat_bits_pred[mode]; - } - } - - if ( stagesVQ > 0 ) - { - /* first VQ stages */ - first_VQstages( cb, u, levels, stagesVQ, w, M, MSVQ_MAXCNT, indices_firstVQ ); - } - - for ( i = 0; i < maxC; i++ ) - { - mvr2r( pred, cand[i], M ); - for ( j = 0; j < stagesVQ; j++ ) - { - Idx[j] = indices_firstVQ[i * stagesVQ + j]; - } - - for ( j = 0; j < stagesVQ; j++ ) - { - cb_stage = cb[j]; - v_add( cand[i], cb_stage + Idx[j] * M, cand[i], M ); - } - - - /* LVQ quantization */ - v_sub( lsf, cand[i], dd, M ); - mslvq( dd, quant[i], lat_cv[i], idx_lead[i], idx_scale[i], w, mode, mode_glb, pred_flag ); - v_add( cand[i], quant[i], cand[i], M ); - - /* arrange the LSF candidate vector prior to selection to an ascending order*/ - v_sort_float( cand[i], 0, M - 1 ); - - /* calculate the spectral distortion using weighted MSE of sorted LSF vector*/ - v_sub( cand[i], lsf, diff, M ); - v_mult( diff, diff, diff, M ); - e[i] = dotp( diff, w, M ); - } - - /* find the optimal candidate */ - c2 = minimum( e, maxC, &ftmp ); - set_f( resq, 0.0f, M ); - for ( j = 0; j < stagesVQ; j++ ) - { - Idx[j] = indices_firstVQ[c2 * stagesVQ + j]; - cb_stage = cb[j]; - v_add( resq, cb_stage + Idx[j] * M, resq, M ); - } - v_add( resq, quant[c2], resq, M ); /* quantized prediction residual */ - - mvr2r( cand[c2], lsfq, M ); - index_lvq( lat_cv[c2], idx_lead[c2], idx_scale[c2], mode_glb, &Idx[stagesVQ], pred_flag ); - - tmp = e[c2]; - - return tmp; -} - - -/*--------------------------------------------------------------------------- - * BcTcvq_1st() - * - * - *--------------------------------------------------------------------------*/ - -static void BcTcvq_1st( - /*const*/ float x[][2], - const float CB[][128][2], - int16_t s[][16], - int16_t c[][16], - float cDist[][16], - float Q[][16][2], - /*const*/ float W[][2] ) -{ - int16_t state, prev_state; - int16_t index, bestCode; - float dist, minDist; - - for ( state = 0; state < NUM_STATE; state += 2 ) - { - prev_state = NTRANS[0][state]; - index = NTRANS[2][state]; - - minDist = ( x[0][0] - CB[0][index][0] ) * ( x[0][0] - CB[0][index][0] ) * W[0][0]; - minDist += ( x[0][1] - CB[0][index][1] ) * ( x[0][1] - CB[0][index][1] ) * W[0][1]; - bestCode = index; - - for ( index = index + 8; index < 128; index += 8 ) - { - dist = ( x[0][0] - CB[0][index][0] ) * ( x[0][0] - CB[0][index][0] ) * W[0][0]; - dist += ( x[0][1] - CB[0][index][1] ) * ( x[0][1] - CB[0][index][1] ) * W[0][1]; - - if ( dist < minDist ) - { - minDist = dist; - bestCode = index; - } - } - - /* Update */ - s[0][state] = prev_state; - c[0][state] = bestCode; - cDist[0][state] = minDist; - Q[0][state][0] = CB[0][bestCode][0]; - Q[0][state][1] = CB[0][bestCode][1]; - } - - return; -} - -/*--------------------------------------------------------------------------- - * BcTcvq_2nd() - * - * - *--------------------------------------------------------------------------*/ - -static void BcTcvq_2nd( - /*const*/ float x[][2], - const float CB[][128][2], - int16_t s[][16], - int16_t c[][16], - float cDist[][16], - float Q[][16][2], - /*const*/ float W[][2], - const float itc[][2][2] ) -{ - int16_t state, prev_state; - int16_t index, bestCode; - float dist, minDist; - float pred[N_DIM], target[N_DIM]; - - for ( state = 0; state < NUM_STATE; state++ ) - { - prev_state = NTRANS[0][state]; - index = NTRANS[2][state]; - - /* Prediction */ - pred[0] = itc[0][0][0] * Q[0][prev_state][0] + itc[0][0][1] * Q[0][prev_state][1]; - pred[1] = itc[0][1][0] * Q[0][prev_state][0] + itc[0][1][1] * Q[0][prev_state][1]; - target[0] = x[1][0] - pred[0]; - target[1] = x[1][1] - pred[1]; - - minDist = ( target[0] - CB[1][index][0] ) * ( target[0] - CB[1][index][0] ) * W[1][0]; - minDist += ( target[1] - CB[1][index][1] ) * ( target[1] - CB[1][index][1] ) * W[1][1]; - bestCode = index; - - for ( index = index + 8; index < 128; index += 8 ) - { - dist = ( target[0] - CB[1][index][0] ) * ( target[0] - CB[1][index][0] ) * W[1][0]; - dist += ( target[1] - CB[1][index][1] ) * ( target[1] - CB[1][index][1] ) * W[1][1]; - - if ( dist < minDist ) - { - minDist = dist; - bestCode = index; - } - } - - /* Update */ - s[1][state] = prev_state; - c[1][state] = bestCode; - cDist[1][state] = cDist[0][prev_state] + minDist; - Q[1][state][0] = CB[1][bestCode][0] + pred[0]; - Q[1][state][1] = CB[1][bestCode][1] + pred[1]; - } - - return; -} - - -/*--------------------------------------------------------------------------- - * BcTcvq_SubBlock() - * - * - *--------------------------------------------------------------------------*/ - -static void BcTcvq_SubBlock( - /*const*/ float x[][2], - const float CB[][64][2], - int16_t s[][16], - int16_t c[][16], - float cDist[][16], - float Q[][16][2], - const int16_t stage, - /*const*/ float W[][2], - const float itc[][2][2] ) -{ - int16_t stage1, stage2, state, prev_state, branch; - int16_t index, bestCode, brCode[N_DIM]; - float dist, minDist, brDist[N_DIM]; - float pred[N_DIM], target[N_DIM], brQuant[N_DIM][N_DIM]; - - stage1 = stage - 1; - stage2 = stage - 2; - - for ( state = 0; state < NUM_STATE; state++ ) - { - - /* 1st brarnch search */ - prev_state = NTRANS[0][state]; - index = NTRANS[2][state]; - - /* Prediction */ - pred[0] = itc[stage1][0][0] * Q[stage1][prev_state][0] + itc[stage1][0][1] * Q[stage1][prev_state][1]; - pred[1] = itc[stage1][1][0] * Q[stage1][prev_state][0] + itc[stage1][1][1] * Q[stage1][prev_state][1]; - target[0] = x[stage][0] - pred[0]; - target[1] = x[stage][1] - pred[1]; - - minDist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; - minDist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; - bestCode = index; - - for ( index = index + 8; index < 64; index += 8 ) - { - dist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; - dist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; - - if ( dist < minDist ) - { - minDist = dist; - bestCode = index; - } - } - - brCode[0] = bestCode; - brDist[0] = cDist[stage1][prev_state] + minDist; - brQuant[0][0] = CB[stage2][bestCode][0] + pred[0]; - brQuant[0][1] = CB[stage2][bestCode][1] + pred[1]; - - /* 2nd branch search */ - prev_state = NTRANS[1][state]; - index = NTRANS[3][state]; - - /* Prediction */ - pred[0] = itc[stage1][0][0] * Q[stage1][prev_state][0] + itc[stage1][0][1] * Q[stage1][prev_state][1]; - pred[1] = itc[stage1][1][0] * Q[stage1][prev_state][0] + itc[stage1][1][1] * Q[stage1][prev_state][1]; - target[0] = x[stage][0] - pred[0]; - target[1] = x[stage][1] - pred[1]; - - minDist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; - minDist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; - bestCode = index; - - for ( index = index + 8; index < 64; index += 8 ) - { - - dist = ( target[0] - CB[stage2][index][0] ) * ( target[0] - CB[stage2][index][0] ) * W[stage][0]; - dist += ( target[1] - CB[stage2][index][1] ) * ( target[1] - CB[stage2][index][1] ) * W[stage][1]; - - if ( dist < minDist ) - { - minDist = dist; - bestCode = index; - } - } - - brCode[1] = bestCode; - brDist[1] = cDist[stage1][prev_state] + minDist; - brQuant[1][0] = CB[stage2][bestCode][0] + pred[0]; - brQuant[1][1] = CB[stage2][bestCode][1] + pred[1]; - - /* Select Best branch */ - branch = 1; - - if ( brDist[0] <= brDist[1] ) - { - branch = 0; - } - - /* Update */ - s[stage][state] = NTRANS[branch][state]; - c[stage][state] = brCode[branch]; - cDist[stage][state] = brDist[branch]; - Q[stage][state][0] = brQuant[branch][0]; - Q[stage][state][1] = brQuant[branch][1]; - } - - return; -} - - -/*--------------------------------------------------------------------------- - * BcTcvq_FixSearch() - * - * - *--------------------------------------------------------------------------*/ - -static float BcTcvq_FixSearch( - /*const*/ float x[][2], - const float CB[][32][2], - int16_t c[][4], - float Q[][16][2], - const int16_t FixBranch[][4][4], - const int16_t stage, - const int16_t inis, - const int16_t fins, - int16_t *prev_state, - /*const*/ float W[][2], - const float itc[][2][2] ) -{ - int16_t stage1, stage4, branch; - int16_t index, bestCode; - float dist, minDist; - float pred[N_DIM], target[N_DIM]; - - stage1 = stage - 1; - stage4 = stage - 4; - - branch = FixBranch[inis >> 2][fins][stage4]; - index = NTRANS2[branch + 2][*prev_state]; - - /* Prediction */ - pred[0] = itc[stage1][0][0] * Q[stage1][*prev_state][0] + itc[stage1][0][1] * Q[stage1][*prev_state][1]; - pred[1] = itc[stage1][1][0] * Q[stage1][*prev_state][0] + itc[stage1][1][1] * Q[stage1][*prev_state][1]; - target[0] = x[stage][0] - pred[0]; - target[1] = x[stage][1] - pred[1]; - - minDist = ( target[0] - CB[stage4][index][0] ) * ( target[0] - CB[stage4][index][0] ) * W[stage][0]; - minDist += ( target[1] - CB[stage4][index][1] ) * ( target[1] - CB[stage4][index][1] ) * W[stage][1]; - bestCode = index; - - for ( index = index + 8; index < 32; index += 8 ) - { - dist = ( target[0] - CB[stage4][index][0] ) * ( target[0] - CB[stage4][index][0] ) * W[stage][0]; - dist += ( target[1] - CB[stage4][index][1] ) * ( target[1] - CB[stage4][index][1] ) * W[stage][1]; - - if ( dist < minDist ) - { - minDist = dist; - bestCode = index; - } - } - - /* Update */ - *prev_state = NTRANS2[branch][*prev_state]; - c[fins][stage4] = bestCode; - Q[stage][*prev_state][0] = CB[stage4][bestCode][0] + pred[0]; - Q[stage][*prev_state][1] = CB[stage4][bestCode][1] + pred[1]; - - return minDist; -} - -/*--------------------------------------------------------------------------- - * optimalPath() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t optimalPath( - /*const*/ float cDist[][16], - /*const*/ float blockDist[], - /*const*/ int16_t blockCodeword[][4], - int16_t bestCodeword[], - /*const*/ int16_t codeWord[][16], - int16_t bestState[], - int16_t preState[][16] ) -{ - int16_t stage, state; - float opDist[NUM_STATE]; - float minDist; - int16_t fBlock; - int16_t prev_state; - - for ( state = 0; state < NUM_STATE; state++ ) - { - opDist[state] = cDist[3][state] + blockDist[state]; - } - - minDist = opDist[0]; - fBlock = 0; - - for ( state = 1; state < NUM_STATE; state++ ) - { - if ( opDist[state] < minDist ) - { - minDist = opDist[state]; - fBlock = state; - } - } - - prev_state = bestState[4] = fBlock; - - for ( stage = N_STAGE_VQ - 5; stage >= 0; stage-- ) - { - bestCodeword[stage] = codeWord[stage][prev_state]; - bestState[stage] = preState[stage][prev_state]; - prev_state = bestState[stage]; - } - - for ( stage = 0; stage < 4; stage++ ) - { - bestCodeword[stage + 4] = blockCodeword[fBlock][stage]; - } - - return fBlock; -} - -/*--------------------------------------------------------------------------- - * quantEnc() - * - * - *--------------------------------------------------------------------------*/ - -static void quantEnc( - float *y, - const int16_t c[], - const float CB_SUB1[][128][2], - const float CB_SUB2[][64][2], - const float CB_SUB3[][32][2], - const float itc[][2][2] ) -{ - int16_t i, j; - int16_t stage; - float pred[N_DIM], Y[8][2]; - - /* stage #1 */ - Y[0][0] = CB_SUB1[0][c[0]][0]; - Y[0][1] = CB_SUB1[0][c[0]][1]; - - /* stage #2 */ - pred[0] = itc[0][0][0] * Y[0][0] + itc[0][0][1] * Y[0][1]; - pred[1] = itc[0][1][0] * Y[0][0] + itc[0][1][1] * Y[0][1]; - Y[1][0] = CB_SUB1[1][c[1]][0] + pred[0]; - Y[1][1] = CB_SUB1[1][c[1]][1] + pred[1]; - - /* stage #3 - #4 */ - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - pred[0] = itc[stage - 1][0][0] * Y[stage - 1][0] + itc[stage - 1][0][1] * Y[stage - 1][1]; - pred[1] = itc[stage - 1][1][0] * Y[stage - 1][0] + itc[stage - 1][1][1] * Y[stage - 1][1]; - - Y[stage][0] = CB_SUB2[stage - 2][c[stage]][0] + pred[0]; - Y[stage][1] = CB_SUB2[stage - 2][c[stage]][1] + pred[1]; - } - - /* stage #5 - #8 */ - for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) - { - pred[0] = itc[stage - 1][0][0] * Y[stage - 1][0] + itc[stage - 1][0][1] * Y[stage - 1][1]; - pred[1] = itc[stage - 1][1][0] * Y[stage - 1][0] + itc[stage - 1][1][1] * Y[stage - 1][1]; - - Y[stage][0] = CB_SUB3[stage - 4][c[stage]][0] + pred[0]; - Y[stage][1] = CB_SUB3[stage - 4][c[stage]][1] + pred[1]; - } - - /* Transform Vector to Scalar */ - for ( i = 0; i < N_STAGE_VQ; i++ ) - { - for ( j = 0; j < N_DIM; j++ ) - { - y[i * N_DIM + j] = Y[i][j]; - } - } - - return; -} - -/*--------------------------------------------------------------------------- - * buildCode() - * - * - *--------------------------------------------------------------------------*/ - -static void buildCode( int16_t *ind, const int16_t fins, const int16_t c[], const int16_t s[] ) -{ - int16_t stage; - int16_t BrIndex[4]; - - set_s( BrIndex, 0, ( N_STAGE_VQ - 4 ) ); - - - for ( stage = N_STAGE_VQ - 4; stage >= 1; stage-- ) - { - if ( s[stage] > 7 ) - { - BrIndex[stage - 1] = 1; - } - } - ind[0] = fins; - - /* stage #1 - #2 */ - for ( stage = 0; stage < 2; stage++ ) - { - ind[stage + 1] = BrIndex[stage] << 4; - ind[stage + 1] += c[stage] >> 3; - } - - /* stage #3 - #4 */ - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - ind[stage + 1] = BrIndex[stage] << 3; - ind[stage + 1] += c[stage] >> 3; - } - - /* Stage #5 - #8 */ - for ( stage = N_STAGE_VQ - 4; stage < N_STAGE_VQ; stage++ ) - { - ind[stage + 1] = c[stage] >> 3; - } - - return; -} - -/*--------------------------------------------------------------------------- - * BcTcvq() - * - * - *--------------------------------------------------------------------------*/ - -static void BcTcvq( int16_t snFlag, const float *x, float *y, const float *weight, int16_t *ind ) -{ - float X[N_STAGE_VQ][N_DIM], W[N_STAGE_VQ][N_DIM]; - - /* Count Variable */ - int16_t i, j; - - /* TCVQ Structure */ - int16_t stage, state, prev_state; - int16_t preState[N_STAGE_VQ][NUM_STATE]; - int16_t codeWord[N_STAGE_VQ][NUM_STATE]; - float acumDist[N_STAGE_VQ - 4][NUM_STATE]; - int16_t inis, fins, ptr_fins; - int16_t fBlock; - int16_t fState[NUM_STATE]; - int16_t fCodeword[4][4]; - int16_t iniBlock[NUM_STATE]; - int16_t blockCodeword[NUM_STATE][4]; - - /* Prediction variable */ - float quant[N_STAGE_VQ][NUM_STATE][N_DIM]; - - /* Distortion variable */ - float minDist; - float fDist; - float blockDist[NUM_STATE]; - - /* Decoding variable */ - int16_t bestCodeword[N_STAGE_VQ]; - int16_t bestState[N_STAGE_VQ]; - - /* Code Share variable */ - const float( *TCVQ_CB_SUB1 )[128][2], ( *TCVQ_CB_SUB2 )[64][2], ( *TCVQ_CB_SUB3 )[32][2]; - const float( *IntraCoeff )[2][2]; - - /* Memoryless Module */ - if ( snFlag ) - { - TCVQ_CB_SUB1 = SN_TCVQ_CB_SUB1; - TCVQ_CB_SUB2 = SN_TCVQ_CB_SUB2; - TCVQ_CB_SUB3 = SN_TCVQ_CB_SUB3; - IntraCoeff = SN_IntraCoeff; - } - else /* Memory Module */ - { - TCVQ_CB_SUB1 = AR_TCVQ_CB_SUB1; - TCVQ_CB_SUB2 = AR_TCVQ_CB_SUB2; - TCVQ_CB_SUB3 = AR_TCVQ_CB_SUB3; - IntraCoeff = AR_IntraCoeff; - } - - /* Transform Scalar to Vector */ - for ( i = 0; i < N_STAGE_VQ; i++ ) - { - for ( j = 0; j < N_DIM; j++ ) - { - X[i][j] = x[( N_DIM * i ) + j]; - W[i][j] = weight[( N_DIM * i ) + j]; - } - } - - /* Initialzie */ - for ( i = 0; i < N_STAGE_VQ - 4; i++ ) - { - for ( j = 0; j < NUM_STATE; j++ ) - { - acumDist[i][j] = 0.f; - } - } - - /* BcTcvq Search */ - /* stage #1 */ - BcTcvq_1st( X, TCVQ_CB_SUB1, preState, codeWord, acumDist, quant, W ); - - /* stage #2 */ - BcTcvq_2nd( X, TCVQ_CB_SUB1, preState, codeWord, acumDist, quant, W, IntraCoeff ); - - /* stage #3 - #4 */ - for ( stage = 2; stage < N_STAGE_VQ - 4; stage++ ) - { - BcTcvq_SubBlock( X, TCVQ_CB_SUB2, preState, codeWord, acumDist, quant, stage, W, IntraCoeff ); - } - - /* Search initial state at each block */ - for ( state = 0; state < NUM_STATE; state++ ) - { - prev_state = state; - - for ( stage = N_STAGE_VQ - 5; stage >= 0; stage-- ) - { - prev_state = preState[stage][prev_state]; - } - iniBlock[state] = prev_state; - } - - /* stage #5 - #8 */ - for ( state = 0; state < NUM_STATE; state++ ) - { - inis = iniBlock[state]; - ptr_fins = inis >> 2; - - minDist = FLT_MAX; - - for ( i = 0; i < 4; i++ ) - { - fins = ptr_fins * 4 + i; - - prev_state = state; - fDist = BcTcvq_FixSearch( X, TCVQ_CB_SUB3, fCodeword, quant, FixBranch_tbl, N_STAGE_VQ - 4, inis, i, &prev_state, W, IntraCoeff ); - - for ( stage = N_STAGE_VQ - 3; stage < N_STAGE_VQ; stage++ ) - { - fDist += BcTcvq_FixSearch( X, TCVQ_CB_SUB3, fCodeword, quant, FixBranch_tbl, stage, inis, i, &prev_state, W, IntraCoeff ); - } - - if ( fDist < minDist ) - { - minDist = fDist; - blockDist[state] = minDist; - fState[state] = fins; - - for ( j = 0; j < 4; j++ ) - { - blockCodeword[state][j] = fCodeword[i][j]; - } - } - } - } - - /* Select optimal path */ - fBlock = optimalPath( acumDist, blockDist, blockCodeword, bestCodeword, codeWord, bestState, preState ); - - /* Select Quantized Value */ - quantEnc( y, bestCodeword, TCVQ_CB_SUB1, TCVQ_CB_SUB2, TCVQ_CB_SUB3, IntraCoeff ); - - /* Buid Code for Decoder */ - buildCode( ind, fState[fBlock], bestCodeword, bestState ); - - return; -} - - -/*--------------------------------------------------------------------------- - * SVQ_2d() - * - * - *--------------------------------------------------------------------------*/ - -static int16_t SVQ_2d( - const float *x, - float *y, - const float *W, - const float CB[][8], - const int16_t Size ) -{ - int16_t i, j; - int16_t index = 0; - float distortion; - float temp; - - temp = FLT_MAX; - - for ( i = 0; i < Size; i++ ) - { - distortion = 0.0; - for ( j = 0; j < 8; j++ ) - { - distortion += ( x[j] - CB[i][j] ) * ( x[j] - CB[i][j] ) * W[j]; - } - - if ( distortion < temp ) - { - temp = distortion; - index = i; - } - } - - for ( i = 0; i < M / 2; i++ ) - { - y[i] = CB[index][i]; - } - - return index; -} - - -/*--------------------------------------------------------------------------- - * qlsf_ARSN_tcvq_Enc_16k() - * - * Predictive BC-TCQ encoder for LSF quantization - *--------------------------------------------------------------------------*/ - -static float qlsf_ARSN_tcvq_Enc_16k( - const float *x, /* i : Vector to be encoded */ - float *y, /* o : Quantized LSF vector */ - int16_t *indice, /* o : Indices */ - const float *w, /* i : LSF Weights */ - const int16_t nBits, /* i : number of bits */ - const int16_t safety_net /* i : safety_net flag */ -) -{ - int16_t i; - float temp_f; - float yy[M]; - float error_svq[M], error_svq_q[M]; - float x_q[M]; - if ( safety_net == 1 ) - { - indice[0] = 1; - BcTcvq( 1, x, x_q, w, &indice[1] ); - - if ( nBits > 30 ) - { - /* SVQ */ - for ( i = 0; i < M; i++ ) - { - error_svq[i] = ( x[i] - x_q[i] ) * scale_inv_ARSN[i]; - } - - /* 5bits 1st Split VQ for Residual*/ - indice[10] = SVQ_2d( error_svq, error_svq_q, w, AR_SVQ_CB1, 32 ); - /* 4bits 2nd Split VQ for Residual*/ - indice[11] = SVQ_2d( &error_svq[8], &error_svq_q[8], &w[8], AR_SVQ_CB2, 16 ); - - for ( i = 0; i < M; i++ ) - { - x_q[i] = x_q[i] + ( error_svq_q[i] * scale_ARSN[i] ); - } - } - } - else - { - indice[0] = 0; - BcTcvq( 0, x, x_q, w, &indice[1] ); - - if ( nBits > 30 ) - { - /* SVQ */ - for ( i = 0; i < M; i++ ) - { - error_svq[i] = x[i] - x_q[i]; - } - - /* 5bits 1st Split VQ for Residual*/ - indice[10] = SVQ_2d( error_svq, error_svq_q, w, AR_SVQ_CB1, 32 ); - /* 4bits 2nd Split VQ for Residual*/ - indice[11] = SVQ_2d( &error_svq[8], &error_svq_q[8], &w[8], AR_SVQ_CB2, 16 ); - - for ( i = 0; i < M; i++ ) - { - x_q[i] = x_q[i] + error_svq_q[i]; - } - } - } - - v_sub( x_q, x, yy, M ); - v_mult( yy, yy, yy, M ); - temp_f = dotp( yy, w, M ); - - /* Recover the quantized LSF */ - mvr2r( x_q, y, M ); - - return temp_f; -} - -/*-------------------------------------------------------------------* - * lsf_mid_enc() - * - * Mid-frame LSF quantization - --------------------------------------------------------------------*/ - -static void lsf_mid_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int16_t nb_bits, /* i : number of bits */ - const int32_t int_fs, /* i : internal (ACELP) sampling frequency */ - const float qlsp0[], /* i : quantized LSPs from frame beginning */ - const float qlsp1[], /* i : quantized LSPs from frame end */ - float lsp[], /* i/o: mid-frame LSP */ - const int16_t coder_type, /* i : coding type */ - const int16_t bwidth, /* i : input signal bandwidth */ - const float Bin_Ener[], /* i : per bin log energy spectrum */ - const int16_t ppp_mode, - const int16_t nelp_mode ) -{ - float ftemp, lsf[M], qlsf[M], qlsf1[M], qlsf0[M], wghts[M], err, err_min; - int16_t j, k, idx, size = 0; - const float *ratio_float = 0; - - /* convert LSPs to LSFs */ - lsp2lsf( lsp, lsf, M, int_fs ); - lsp2lsf( qlsp0, qlsf0, M, int_fs ); - lsp2lsf( qlsp1, qlsf1, M, int_fs ); - - Unified_weighting( Bin_Ener, lsf, wghts, bwidth == NB, coder_type == UNVOICED, (int32_t) ( int_fs ), M ); - - /* codebook selection, number of bits, size of the codebook */ - if ( ppp_mode == 0 && nelp_mode == 0 ) - { - /* codebook selection */ - if ( coder_type == VOICED ) - { - switch ( nb_bits ) - { - case 5: - { - ratio_float = tbl_mid_voi_wb_5b; - break; - } - case 4: - { - ratio_float = tbl_mid_voi_wb_4b; - break; - } - case 1: - { - ratio_float = tbl_mid_voi_wb_1b; - break; - } - } - } - else if ( coder_type == UNVOICED ) - { - ratio_float = tbl_mid_unv_wb_5b; - } - else - { - /* GENERIC, TRANSITION, AUDIO and INACTIVE */ - switch ( nb_bits ) - { - case 5: - { - ratio_float = tbl_mid_gen_wb_5b; - break; - } - case 4: - { - ratio_float = tbl_mid_gen_wb_4b; - break; - } - case 2: - { - ratio_float = tbl_mid_gen_wb_2b; - break; - } - } - } - - size = 1 << nb_bits; - } - else if ( ppp_mode == 1 ) - { - ratio_float = tbl_mid_voi_wb_1b; - nb_bits = 1; - size = 2; - } - else if ( nelp_mode == 1 ) - { - ratio_float = tbl_mid_unv_wb_4b; - nb_bits = 4; - size = 16; - } - - /* loop over codevectors */ - err_min = 1e30f; - idx = 0; - for ( k = 0; k < size; k++ ) - { - err = 0; - - for ( j = 0; j < M; j++ ) - { - qlsf[j] = ( 1.0f - ratio_float[k * M + j] ) * qlsf0[j] + ratio_float[k * M + j] * qlsf1[j]; - - if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - - ftemp = lsf[j] - qlsf[j]; - err += wghts[j] * ftemp * ftemp; - } - - if ( err < err_min ) - { - err_min = err; - idx = k; - } - } - - /* calculate the quantized LSF vector */ - for ( j = 0; j < M; j++ ) - { - qlsf[j] = ( 1.0f - ratio_float[idx * M + j] ) * qlsf0[j] + ratio_float[idx * M + j] * qlsf1[j]; - - if ( j > 0 && j < M && qlsf[j] < qlsf[j - 1] + LSF_GAP_MID ) - { - qlsf[j] = qlsf[j - 1] + LSF_GAP_MID; - } - } - - reorder_lsf( qlsf, LSF_GAP_MID, M, int_fs ); - - /* convert LSFs back to LSPs */ - lsf2lsp( qlsf, lsp, M, int_fs ); - - push_indice( hBstr, IND_MID_FRAME_LSF_INDEX, idx, nb_bits ); - - return; -} -#endif diff --git a/lib_enc/lsf_msvq_ma_enc.c b/lib_enc/lsf_msvq_ma_enc.c index 89e7f8bcd..2af64bf14 100644 --- a/lib_enc/lsf_msvq_ma_enc.c +++ b/lib_enc/lsf_msvq_ma_enc.c @@ -68,7 +68,6 @@ *--------------------------------------------------------------------------*/ /*! r: (p_max , best candidate sofar ) */ -#ifdef IVAS_FLOAT_FIXED Word16 msvq_stage1_dct_search_fx( const Word32 *u_fx, /* i : target exp : u_e */ const Word16 u_e, /* i : exp for target Q0 */ @@ -352,217 +351,6 @@ Word16 msvq_stage1_dct_search_fx( return p_max; /*ptr to worst performing candidate */ } -#endif - -#ifndef IVAS_FLOAT_FIXED -int16_t msvq_stage1_dct_search( - const float *u, /* i : target */ - const int16_t N, /* i : target length and IDCT synthesis length */ - const int16_t maxC_st1, /* i : number of final stage 1 candidates to provide */ - const DCTTYPE dcttype, /* e.g. DCT_T2_16_XX, DCT_T2_24_XX; */ - const int16_t max_dct_trunc, /* i : maximum of truncation lenghts */ - float *invTrfMatrix, /* i : IDCT synthesis matrix for dim N */ - const float *midQ_truncQ, /* i : midQ vector */ - const float *dct_invScaleF, /* i : global inv scale factors */ - const float *dct_scaleF, /* i : global scale factors */ - const Word16 n_segm, /* i : number of segments */ - const Word16 *cols_per_segment, /* i : remaining length per segment */ - const Word16 *trunc_dct_cols_per_segment, /* i : trunc length per segment */ - const Word16 *entries_per_segment, /* i : number of rows per segment */ - const Word16 *cum_entries_per_segment, /* i : number of cumulative entries */ - const Word8 *const W8Qx_dct_sections[], /* i : Word8(byte) segment table ptrs */ - const Word16 *col_syn_shift[], /* i : columnwise syn shift tables */ - const Word8 *segm_neighbour_fwd, /* i : circular neighbour list fwd */ - const Word8 *segm_neighbour_rev, /* i : circular neighbour list reverse */ - const Word16 npost_check, /* i : number of neigbours to check , should be even */ - float *st1_mse_ptr, /* i : dynRAM buffer for MSEs */ - int16_t *indices_st1_local, /* o : selected cand indices */ - float *st1_syn_vec_ptr, /* i/o: buffer for IDCT24 synthesis */ - float *dist1_ptr /* o : resulting stage 1 MSEs in DCT-N domain */ -) -{ - float dct_target[FDCNG_VQ_DCT_MAXTRUNC]; - float u_mr[FDCNG_VQ_MAX_LEN]; - float u_mr_scaled[FDCNG_VQ_MAX_LEN]; - float mse_trunc_segm[FDCNG_VQ_DCT_NSEGM]; - float tmp, check_mse; - float mse; /* Word32 in BASOP */ - - int16_t p_max, c, c2, segm, j_full, j, i; - int16_t n_ana, p_mins[2], idx_min[2]; - - const Word8 *cbpW8; - const Word16 *dct_col_shift_tab; - - float *st1_mse_pair; - int16_t *st1_idx_pair; - - float tmp2; - int16_t check_ind[FDCNG_VQ_DCT_NPOST]; - assert( ( npost_check % 2 == 0 ) && ( npost_check <= FDCNG_VQ_DCT_NPOST ) ); - - assert( n_segm <= FDCNG_VQ_DCT_NSEGM ); - - n_ana = N; /* VQ stage#1 core is currently always using stored DCT N coeffs */ - assert( n_ana >= max_dct_trunc ); /* check for FDCNGVQ WB , SWB, FB operation */ - - /* remove mid stage#1 vector, in original input domain */ - v_sub( u, midQ_truncQ, u_mr, n_ana ); - - v_multc( u_mr, dct_invScaleF[1], u_mr_scaled, n_ana ); /* scale up target to upscaled W8x storage domain */ - /* 16.0-->scale up from Q0 to search domain in Q4, not really needed in BASOP , impl. by shifts */ - - dctT2_N_apply_matrix( (const float *) u_mr_scaled, dct_target, min( max_dct_trunc, n_ana ), n_ana, invTrfMatrix, max_dct_trunc, dcttype ); - - /* init search state ptr's at the top */ - set_f( dist1_ptr, FLT_MAX, maxC_st1 ); - st1_mse_pair = &( dist1_ptr[0] ); /* req. ptr post upd +=2 */ - st1_idx_pair = &( indices_st1_local[0] ); /* req. ptr post upd +=2 */ - set_f( mse_trunc_segm, 0.0f, n_segm ); - - for ( segm = 0; segm < n_segm; segm++ ) - { /* point to a new paired location for each segment */ - p_max = 0; /* req. to point to one of 1 or 0, this init can potentially be omitted here,as p_max is always 1 or 0 */ - - /* compute segment common trunction error in dctN domain */ - mse_trunc_segm[segm] += sum2_f( (const float *) ( &( dct_target[cols_per_segment[segm]] ) ), trunc_dct_cols_per_segment[segm] ); - - cbpW8 = W8Qx_dct_sections[segm]; /* Word8 column variable Qx storage , table ptr init */ - - for ( j = 0; j < entries_per_segment[segm]; j++ ) - { - /* unweighted segmented search DCT domain loop */ - j_full = j + cum_entries_per_segment[segm]; /* or simply use j_full++ */ - - mse = mse_trunc_segm[segm]; /* init mse with with common mse truncation part, in BASOP a move32() */ - - dct_col_shift_tab = col_syn_shift[segm]; /* ptr init */ - - for ( c2 = 0; c2 < cols_per_segment[segm]; c2++ ) - { -#define WMC_TOOL_SKIP - tmp = dct_target[c2] - (float) shl( (Word16) cbpW8[c2], dct_col_shift_tab[c2] ); /* note: BASOP shift left defined for signed integers */ - LOGIC( 1 ); - SHIFT( 1 ); - ADD( 1 ); /* in BASOP: s_and(for W8->W16), shl(), sub()*/ -#undef WMC_TOOL_SKIP - mse += tmp * tmp; /* L_mac or L_mac0() square Word16 -> Word32*/ - } - st1_mse_ptr[j_full] = mse; /* save MSE in shared dynamic RAM, move32() in BASOP */ - -#define WMC_TOOL_SKIP - cbpW8 += cols_per_segment[segm]; /* fixed pointer increment for each segment */ -#undef WMC_TOOL_SKIP - - /* overwrite with a new worst index at p_max */ - - /* Note: The three inner loop if's below are not 100% properly instrumented by WMC tool */ - if ( mse < st1_mse_pair[p_max] ) /* L_sub */ - { - st1_idx_pair[p_max] = j_full; /* move16, single BASOP */ - } /* BASOP 2 ops */ - - if ( st1_idx_pair[p_max] == j_full ) - { /* idx updated --> also update mse */ - st1_mse_pair[p_max] = mse; /* move32(), single BASOP */ - } /* BASOP 3 ops */ - - /* avoid WC costly candidate list management by always updating p_max, - as we have only a pair in each segment to maintain */ - p_max = 0; /* move16() */ - if ( ( st1_mse_pair[0] - st1_mse_pair[1] ) < 0 ) /* L_sub()*/ - { - p_max = 1; /* move16() */ - } /* BASOP 3 ops ,Note 2 ops possible in BASOP with L_sub and L_lshr */ - - /* Note: logical shift right not available in ANSI-C */ - /* p_max = (st1_mse_pair[0] - st1_mse_pair[1]) ">>>" 31; */ - /* in java logical shift right is available as >>> , in BASOP it is available as L_lshr */ - - /* Cost: weighted sum with cond moves ('if') => 8 in float , 7 in BASOP with L_lshr */ - } /* j in section */ - - st1_mse_pair += 2; /* req. ptr init */ - st1_idx_pair += 2; /* req. ptr init */ - - } /* next segment */ - - for ( j = 0; j < maxC_st1; j++ ) - { - /* compute_full mse using stored DCT24 domain MSE's */ - /* calculate MSE from stage1 inner using existing inner DCT domain variables */ - dist1_ptr[j] *= dct_scaleF[2]; /* multiplication to get the DCT inner MSE scale to the correct input domain */ - } - - assert( ( maxC_st1 >= 3 ) ); - assert( ( maxC_st1 <= 8 ) ); - - p_max = maximum( dist1_ptr, maxC_st1, NULL ); /* establish current worst candidate for MSVQ stage#2 among all maxC_st1 candidates so far */ - - p_mins[0] = minimum( dist1_ptr, maxC_st1, NULL ); /* find best entry among all maxC_pre */ - tmp = dist1_ptr[p_mins[0]]; - dist1_ptr[p_mins[0]] = FLT_MAX; /* exclude 1st */ - - p_mins[1] = minimum( dist1_ptr, maxC_st1, NULL ); /* find 2nd best entry */ - tmp2 = dist1_ptr[p_mins[1]]; - dist1_ptr[p_mins[1]] = FLT_MAX; /* exclude 2nd */ - - dist1_ptr[p_mins[0]] = tmp; /* restore 1st */ - dist1_ptr[p_mins[1]] = tmp2; /* restore 2nd */ - - idx_min[0] = indices_st1_local[p_mins[0]]; - idx_min[1] = indices_st1_local[p_mins[1]]; - - - /* use global exclusion list to never reselect the two (best) global MSE values sofar */ - st1_mse_ptr[idx_min[0]] = FLT_MAX; /* move32() */ - st1_mse_ptr[idx_min[1]] = FLT_MAX; /* move32() */ - - /* circular MSE-neigbour list in use to potentially replace some segment search candidates */ - /* using both 1st and 2nd best neighbours in fwd and rev directions */ - check_ind[0] = segm_neighbour_fwd[idx_min[0]]; - check_ind[1] = segm_neighbour_rev[idx_min[0]]; - - check_ind[2] = segm_neighbour_fwd[idx_min[1]]; - check_ind[3] = segm_neighbour_rev[idx_min[1]]; - - check_ind[4] = segm_neighbour_fwd[check_ind[0]]; - check_ind[5] = segm_neighbour_rev[check_ind[1]]; - - check_ind[6] = segm_neighbour_fwd[check_ind[2]]; - check_ind[FDCNG_VQ_DCT_NPOST - 1] = segm_neighbour_rev[check_ind[3]]; - - for ( i = 0; i < npost_check; i++ ) - { - /* move MSE from DCT-inner loop search to input synthesis domain */ - /* multiplication by fdcng_dct_scaleF[2] to get the float outer loop scale correct in IDCT synthesis domain */ - check_mse = st1_mse_ptr[check_ind[i]] * dct_scaleF[2]; - - if ( check_mse < dist1_ptr[p_max] ) - { /* new winner , replace worst */ - dist1_ptr[p_max] = check_mse; - indices_st1_local[p_max] = check_ind[i]; - st1_mse_ptr[check_ind[i]] = FLT_MAX; /* exclude, BASOP: move32() */ - p_max = maximum( dist1_ptr, maxC_st1, NULL ); /* establish a new current worst candidate among all maxC */ - } - } - - /* extract the selected stage one vectors in DCT_N domain , apply IDCT_N and scale up */ - /* always extract full length signal(e.g. 24) to be able to update WB(e.g. N_in==21) candidate MSE values */ - /* in the case that only a part of the IDCT N vector is in final use */ - - /* note: synthesis not yet fully parameterized/generalized for other IDCT lengths */ - assert( N == 24 ); - { - for ( c = 0; c < maxC_st1; c++ ) - { - dec_FDCNG_MSVQ_stage1( indices_st1_local[c], N, invTrfMatrix, dcttype + 1, &( st1_syn_vec_ptr[c * N] ), NULL ); - } - } - - return p_max; /*ptr to worst performing candidate */ -} -#endif /*--------------------------------------------------------------------------* @@ -574,36 +362,6 @@ int16_t msvq_stage1_dct_search( *--------------------------------------------------------------------------*/ /*! r: (updated p_max) */ -#ifndef IVAS_FLOAT_FIXED -int16_t msvq_stage1_dct_recalc_candidates_fdcng_wb( - const float *st1_syn_vec_ptr, /* i : IDCT24 synthesis vectors */ - const float *u, /* i : target signal */ - const int16_t maxC_st1, /* i : number of candidates in stage1 */ - float *dist_ptr /* i/o: updated MSE vector for stage1 */ -) -{ - int16_t p_max_local, c; - const float *p2; - float res24, high_diff[FDCNG_VQ_MAX_LEN - FDCNG_VQ_MAX_LEN_WB]; - - for ( c = 0; c < maxC_st1; c++ ) - { /* point to extended synthesis part */ - p2 = (const float *) &( st1_syn_vec_ptr[c * FDCNG_VQ_MAX_LEN + FDCNG_VQ_MAX_LEN_WB] ); /* ptr init to synthesis candidate c */ - /* for stage#1 use "u" instead of the shortened resid[0], to access the extended/extrapolated input target */ - v_sub( p2, &( u[FDCNG_VQ_MAX_LEN_WB] ), high_diff, FDCNG_VQ_MAX_LEN - FDCNG_VQ_MAX_LEN_WB ); - res24 = dotp( high_diff, high_diff, FDCNG_VQ_MAX_LEN - FDCNG_VQ_MAX_LEN_WB ); /* sum squared over top env. values above WB coeffs */ - - dist_ptr[c] -= res24; /* remove DCT24 high band error contribution */ - } - - /* finally update p_max, as it may potentially change, - due to the core DCT24 search originally optimizing over the longer basis vectors than DCT21 */ - p_max_local = maximum( dist_ptr, maxC_st1, NULL ); - - return p_max_local; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 msvq_stage1_dct_recalc_candidates_fdcng_wb_fx( const Word32 *st1_syn_vec_ptr_fx, /* i : IDCT24 synthesis vectors */ const Word16 st1_syn_vec_e, /* i : exp for IDCT24 synthesis vectors */ @@ -670,7 +428,6 @@ Word16 msvq_stage1_dct_recalc_candidates_fdcng_wb_fx( return p_max_local; } -#endif /*--------------------------------------------------------------------------* @@ -679,289 +436,7 @@ Word16 msvq_stage1_dct_recalc_candidates_fdcng_wb_fx( * MSVQ encoder *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void msvq_enc( - const float *const *cb, /* i : Codebook (indexed cb[*stages][levels][p]) */ - const int16_t dims[], /* i : Dimension of each codebook stage (NULL: full dim.) */ - const int16_t offs[], /* i : Starting dimension of each codebook stage (NULL: 0) */ - const float u[], /* i : Vector to be encoded (prediction and mean removed) */ - const int16_t *levels, /* i : Number of levels in each stage */ - const int16_t maxC, /* i : Tree search size (number of candidates kept from one stage to the next == M-best) */ - const int16_t stages, /* i : Number of stages */ - const float w[], /* i : Weights */ - const int16_t N, /* i : Vector dimension */ - const int16_t maxN, /* i : Codebook dimension */ - const int16_t applyDCT_flag, /* i : applyDCT flag */ - float *invTrfMatrix, /* i/o: synthesis matrix */ - int16_t Idx[] /* o : Indices */ -) -{ - float *resid[2], *dist[2]; - float en, tmp, *pTmp, *p1; - const float *cb_stage, *cbp, *p2; - int16_t *indices[2]; - int16_t j, m, s, c, c2, p_max, i; - float resid_buf[2 * LSFMBEST_MAX * M_MAX], dist_buf[2 * LSFMBEST_MAX], Tmp[M_MAX]; - int16_t idx_buf[2 * LSFMBEST_MAX * MAX_VQ_STAGES_USED], parents[LSFMBEST_MAX]; - int16_t n, maxn, start; - float *st1_syn_vec_ptr; /* ptr to buffer in dynRAM */ - float *st1_mse_ptr; /* ptr to buffer in existing dRAM used for stage 1 candidate analysis */ - int16_t indices_st1_local[FDCNG_VQ_DCT_NSEGM * 2]; /* after stage#1 DCT search this is copied to the global indices[1][s*stages] structure */ - assert( maxC <= LSFMBEST_MAX ); - assert( ( LSFMBEST_MAX * M_MAX ) > ( N * maxC ) ); - /* top of resid_buf is resid[1] and used for stage#1 residuals (input target u), - we here reuse resid[0] part of the buffer for stage#1 DCT dynamic RAM needs */ - st1_mse_ptr = &( resid_buf[1 * LSFMBEST_MAX * M_MAX] ) - ( levels[0] ); /* reuse top of residual resid[0] scratch RAM for stage1 MSEs */ - - st1_syn_vec_ptr = &( resid_buf[1 * LSFMBEST_MAX * M_MAX] ) - FDCNG_VQ_MAX_LEN * maxC; /* reuse top of resid[0] scratch RAM for residual */ - - - /*----------------------------------------------------------------* - * Allocate memory for previous (parent) and current nodes. - * Parent node is indexed [0], current node is indexed [1]. - *----------------------------------------------------------------*/ - - indices[0] = idx_buf; - indices[1] = idx_buf + maxC * stages; - set_s( idx_buf, 0, 2 * stages * maxC ); - - resid[0] = resid_buf; - pTmp = resid_buf + maxC * N; - resid[1] = pTmp; - - dist[0] = dist_buf; - dist[1] = dist_buf + maxC; - set_s( parents, 0, maxC ); - - /* Set up initial distance vector */ - for ( tmp = 0.0, j = 0; j < N; j++ ) - { - tmp += u[j] * u[j] * w[j]; - } - set_f( dist[1], tmp, maxC ); - - /* Set up initial error (residual) vectors */ - for ( c = 0; c < maxC; c++ ) - { - for ( i = 0; i < N; i++ ) - { - *pTmp++ = u[i]; - } - } - - /* Loop over all stages */ - for ( m = 1, s = 0; s < stages; s++ ) - { - /* codebook pointer is set to point to first stage */ - cbp = cb[s]; - /* Save pointer to beginning of current stage */ - cb_stage = cbp; - - /* Set up pointers to parent and current nodes */ -#define WMC_TOOL_SKIP - swap( indices[0], indices[1], int16_t * ); - MOVE( 3 ); - swap( resid[0], resid[1], float * ); - MOVE( 3 ); - swap( dist[0], dist[1], float * ); - MOVE( 3 ); -#undef WMC_TOOL_SKIP - - /* p_max points to maximum distortion node (worst of best) */ - p_max = 0; - - if ( dims ) - { - n = dims[s]; - maxn = dims[s]; - } - else - { - n = N; - maxn = maxN; - } - - if ( offs ) - { - start = offs[s]; - } - else - { - start = 0; - } - - set_zero( Tmp, start ); - set_zero( Tmp + start + n, N - ( start + n ) ); - /* Set distortions to a large value */ - for ( j = 0; j < maxC; j++ ) - { - dist[1][j] = FLT_MAX; - } - if ( !s && applyDCT_flag != 0 ) /* means: m==1 */ - { - /* stage 1 candidates search in truncated dct24 domain without any weights */ - assert( N == FDCNG_VQ_MAX_LEN || N == FDCNG_VQ_MAX_LEN_WB ); /* 21 and 24 allowed */ - assert( maxC == 2 * FDCNG_VQ_DCT_NSEGM ); - - p_max = msvq_stage1_dct_search( u, FDCNG_VQ_MAX_LEN, maxC, DCT_T2_24_XX, FDCNG_VQ_DCT_MAXTRUNC, invTrfMatrix, cdk1r_tr_midQ_truncQ, fdcng_dct_invScaleF, fdcng_dct_scaleF, FDCNG_VQ_DCT_NSEGM, - cdk1_ivas_cols_per_segment, cdk1_ivas_trunc_dct_cols_per_segment, cdk1_ivas_entries_per_segment, cdk1_ivas_cum_entries_per_segment, cdk_37bits_ivas_stage1_W8Qx_dct_sections, - stage1_dct_col_syn_shift, cdk1_ivas_segm_neighbour_fwd, cdk1_ivas_segm_neighbour_rev, FDCNG_VQ_DCT_NPOST, st1_mse_ptr, indices_st1_local, st1_syn_vec_ptr, dist[1] ); - - - /* move established stage#1 indices to the global MSVQ list structure */ - for ( c = 0; c < maxC; c++ ) - { - indices[1][c * stages] = indices_st1_local[c]; - } - } - else - /* non-DCT Stage #1 code below */ - if ( !s ) /* means: m==1 */ - { - /* This loop is identical to the one below, except, that the inner loop over c=0..m is hardcoded to c=0, since m=1. */ - /* dist[0][0] */ - for ( j = 0; j < levels[s]; j++ ) - { - en = 0.0f; - /* w,Tmp */ - /* Compute weighted codebook element and its energy */ - for ( c2 = 0; c2 < n; c2++ ) - { - Tmp[start + c2] = w[start + c2] * cbp[c2]; - en += cbp[c2] * Tmp[start + c2]; - } - cbp += maxn; /* pointer is incremented */ - - pTmp = &resid[0][0]; - /* Tmp */ - tmp = ( *pTmp++ ) * Tmp[0]; - for ( c2 = 1; c2 < N; c2++ ) - { - tmp += ( *pTmp++ ) * Tmp[c2]; - } - tmp = en - 2.0f * tmp; - tmp += dist[0][0]; - if ( tmp < dist[1][p_max] ) - { - /* Replace worst */ - dist[1][p_max] = tmp; - indices[1][p_max * stages] = j; - parents[p_max] = 0; - - p_max = 0; - for ( c2 = 1; c2 < maxC; c2++ ) - { - if ( dist[1][c2] > dist[1][p_max] ) - { - p_max = c2; - } - } - } /* if (tmp <= dist[1][p_max]) */ - } /* for (j=0; j dist[1][p_max] ) - { - p_max = c2; - } - } - } /* if (tmp <= dist[1][p_max]) */ - } /* for(c=0; c 0 && j < N && pred[j] < pred[j - 1] + LSF_GAP_MID ) - { - pred[j] = pred[j - 1] + LSF_GAP_MID; - } - - tmp = lsf[j] - pred[j]; - err += wghts[j] * tmp * tmp; - } - - if ( err < err_min ) - { - err_min = err; - *idx = k; - } - } - - return; -} - - -/*--------------------------------------------------------------------------* - * Q_lsf_tcxlpc() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: number of indices */ -int16_t Q_lsf_tcxlpc( - /* const */ float lsf[], /* i : original lsf */ - float lsf_q[], /* o : quantized lsf */ - Word16 lsp_q_ind[], /* o : quantized lsp (w/o MA prediction) */ - int16_t indices[], /* o : VQ indices */ - const int16_t narrowband, /* i : narrowband flag */ - const int16_t cdk, /* i : codebook selector */ - const float mem_MA[], /* i : MA memory */ - const int16_t coder_type, /* i : acelp extended mode */ - const float *Bin_Ener /* i : Spectrum energy */ -) -{ - float weights[M]; - float pred[M16k]; - int16_t i, NumIndices; - const float *means; - Word16 lsf_q_ind[M16k]; - float lsf_rem[M]; - float lsf_rem_q[M]; - Word16 lsf_rem_q_ind[M]; - - Unified_weighting( &Bin_Ener[L_FFT / 2], lsf, weights, narrowband, coder_type == UNVOICED, 12800, M ); - - NumIndices = 0; - - /* Put disabled flag */ - indices[NumIndices++] = 0; - - /* Inter-frame prediction */ - means = lsf_means_float[narrowband]; - for ( i = 0; i < M; ++i ) - { - pred[i] = means[i] + MU_MA * mem_MA[i]; - } - - /* Subtract prediction */ - for ( i = 0; i < M; ++i ) - { - lsf[i] -= pred[i]; - } - - - msvq_enc( lsf_codebook_flt[narrowband][cdk], lsf_dims_ivas, lsf_offs_ivas, lsf, lsf_numlevels, kMaxC, TCXLPC_NUMSTAGES, weights, M, M, 0, NULL, indices + NumIndices ); - msvq_dec_float( lsf_codebook_flt[narrowband][cdk], lsf_dims_ivas, lsf_offs_ivas, TCXLPC_NUMSTAGES, M, M, indices + NumIndices, 0, NULL, lsf_q, lsf_q_ind ); - - NumIndices += TCXLPC_NUMSTAGES; - - /* Update flag */ - indices[0] = lsf_ind_is_active_flt( lsf_q_ind, lsf_means_float[narrowband], narrowband, cdk ); - - /* Get residual vector */ - for ( i = 0; i < M; ++i ) - { - lsf_rem[i] = ( pred[i] + lsf[i] ) - ( lsf_means_float[narrowband][i] + lsf_q_ind[i] / (float) ( 2.0f * 1.28f ) ); - } - /* Quantize using extra stage(s) */ - msvq_enc( lsf_ind_codebook_flt[narrowband][cdk], lsf_ind_dims_ivas, lsf_ind_offs, lsf_rem, lsf_ind_numlevels, kMaxC, TCXLPC_IND_NUMSTAGES, weights, M, M, 0, NULL, indices + NumIndices ); - - /* Only add contribution if flag is enabled */ - if ( indices[0] ) - { - /* Decode */ - msvq_dec_float( lsf_ind_codebook_flt[narrowband][cdk], lsf_ind_dims_ivas, lsf_ind_offs, TCXLPC_IND_NUMSTAGES, M, M, indices + NumIndices, 0, NULL, lsf_rem_q, lsf_rem_q_ind ); - NumIndices += TCXLPC_IND_NUMSTAGES; - - /* Add to MA-removed vector */ - for ( i = 0; i < M; ++i ) - { - lsf_q_ind[i] = add( lsf_q_ind[i], lsf_rem_q_ind[i] ); - } - } - - /* Add inter-frame prediction */ - for ( i = 0; i < M; ++i ) - { - lsf_q[i] += pred[i]; - lsf[i] += pred[i]; - } - - reorder_lsf( lsf_q, TCXLPC_LSF_GAP_FLT, M, INT_FS_12k8 ); - for ( i = 0; i < M; ++i ) - { - lsf_q_ind[i] = add( lsf_q_ind[i], LSFM( lsf_means_float[narrowband][i] ) ); - move16(); - } - - basop_reorder_lsf( lsf_q_ind, LSF_GAP_VAL( TCXLPC_LSF_GAP_FLT ), M, INT_FS_FX ); - if ( lsp_q_ind ) - { - basop_lsf2lsp( lsf_q_ind, lsp_q_ind ); - } - - return NumIndices; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * enc_lsf_tcxlpc() - * - * - *--------------------------------------------------------------------------*/ - -/*! r: number of bits written */ -int16_t enc_lsf_tcxlpc( - const int16_t **indices, /* i : Ptr to VQ indices */ - BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ -) -{ - int16_t i, NumBits, flag; - - /* Read flag */ - flag = ( *indices )[0]; - ++*indices; - - NumBits = TCXLPC_NUMBITS; - for ( i = 0; i < TCXLPC_NUMSTAGES; ++i ) - { - push_next_indice( hBstr, **indices, lsf_numbits[i] ); - ++*indices; - } - if ( flag ) - { - NumBits += TCXLPC_IND_NUMBITS; - for ( i = 0; i < TCXLPC_IND_NUMSTAGES; ++i ) - { - push_next_indice( hBstr, **indices, lsf_ind_numbits[i] ); - ++*indices; - } - } - - return NumBits; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * lsf_bctcvq_encprm() - * - * - *--------------------------------------------------------------------------*/ - -int16_t lsf_bctcvq_encprm( - BSTR_ENC_HANDLE hBstr, - const int16_t *param_lpc, - const int16_t *bits_param_lpc, - const int16_t no_indices ) -{ - int16_t i, nbits_lpc; - - nbits_lpc = 0; - - for ( i = 0; i < no_indices; i++ ) - { - push_next_indice( hBstr, *param_lpc, bits_param_lpc[i] ); - param_lpc++; - nbits_lpc += bits_param_lpc[i]; - } - - return nbits_lpc; -} -#endif diff --git a/lib_enc/lsf_msvq_ma_enc_fx.c b/lib_enc/lsf_msvq_ma_enc_fx.c index 0d2ea4a2a..5e65218e5 100644 --- a/lib_enc/lsf_msvq_ma_enc_fx.c +++ b/lib_enc/lsf_msvq_ma_enc_fx.c @@ -723,7 +723,6 @@ Word16 enc_lsf_tcxlpc_fx( } return NumBits; } -#ifdef IVAS_FLOAT_FIXED Word16 enc_lsf_tcxlpc_ivas_fx( const Word16 **indices, /* i : Ptr to VQ indices */ BSTR_ENC_HANDLE hBstr /* i/o: encoder bitstream handle */ @@ -757,7 +756,6 @@ Word16 enc_lsf_tcxlpc_ivas_fx( } return NumBits; } -#endif /*--------------------------------------------------------------------------* * lsf_msvq_ma_encprm_fx() @@ -802,7 +800,6 @@ Word16 lsf_msvq_ma_encprm_fx( return nbits_lpc; } -#ifdef IVAS_FLOAT_FIXED Word16 lsf_msvq_ma_encprm_ivas_fx( BSTR_ENC_HANDLE hBstr, const Word16 *param_lpc, @@ -840,7 +837,6 @@ Word16 lsf_msvq_ma_encprm_ivas_fx( return nbits_lpc; } -#endif /*--------------------------------------------------------------------------* * lsf_bctcvq_encprm_fx() @@ -866,7 +862,6 @@ Word16 lsf_bctcvq_encprm_fx( return nbits_lpc; } -#ifdef IVAS_FLOAT_FIXED Word16 lsf_bctcvq_encprm_ivas_fx( BSTR_ENC_HANDLE hBstr, const Word16 *param_lpc, @@ -887,4 +882,3 @@ Word16 lsf_bctcvq_encprm_ivas_fx( return nbits_lpc; } -#endif diff --git a/lib_enc/ltd_stable.c b/lib_enc/ltd_stable.c index 111fb1cea..825401325 100644 --- a/lib_enc/ltd_stable.c +++ b/lib_enc/ltd_stable.c @@ -39,97 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * ltd_stable() - * - * - *-------------------------------------------------------------------*/ - -void ltd_stable( - float frames_power[], /* i/o: energy of several frames */ - float ltd_stable_rate[], /* o : time-domain stable rate */ - const float frame_energy, /* i : current frame energy */ - const int16_t frameloop /* i : number of frames */ -) -{ - int16_t i; - float tmp; - float mid_frame_amp[28]; - float seg_amp; - float dif, apow; - - frames_power[0] = (float) ( sqrt( frame_energy ) + 0.001 ); - - if ( frameloop < 3 ) - { - for ( i = 1; i < POWER_NUM; i++ ) - { - frames_power[i] = frames_power[0]; - } - } - - for ( i = 0; i < 20; i++ ) - { - mid_frame_amp[i] = frames_power[2 * i] + frames_power[2 * i + 1]; - } - seg_amp = 0; - for ( i = 0; i < 20; i++ ) - { - seg_amp += mid_frame_amp[i]; - } - seg_amp = seg_amp / 20; - dif = 0; - apow = 0; - for ( i = 0; i < 20; i++ ) - { - tmp = mid_frame_amp[i] - seg_amp; - dif += tmp * tmp; - apow += mid_frame_amp[i] * mid_frame_amp[i]; - } - tmp = dif / ( apow + 0.0001f ); - ltd_stable_rate[0] = dif / ( apow + FLT_MIN ); - - - seg_amp = 0; - for ( i = 0; i < 14; i++ ) - { - seg_amp += mid_frame_amp[i]; - } - seg_amp = seg_amp / 14; - dif = 0; - apow = 0; - for ( i = 0; i < 14; i++ ) - { - tmp = mid_frame_amp[i] - seg_amp; - dif += tmp * tmp; - apow += mid_frame_amp[i] * mid_frame_amp[i]; - } - ltd_stable_rate[1] = dif / ( apow + 0.0001f ); - - seg_amp = 0; - for ( i = 0; i < 8; i++ ) - { - seg_amp += mid_frame_amp[i]; - } - seg_amp = seg_amp / 8; - dif = 0; - apow = 0; - for ( i = 0; i < 8; i++ ) - { - tmp = mid_frame_amp[i] - seg_amp; - dif += tmp * tmp; - apow += mid_frame_amp[i] * mid_frame_amp[i]; - } - ltd_stable_rate[2] = (float) ( dif / ( apow + 0.0001f ) ); - ltd_stable_rate[3] = 0.90f * ltd_stable_rate[3] + 0.1f * ltd_stable_rate[2]; - - for ( i = POWER_NUM - 1; i > 0; i-- ) - { - frames_power[i] = frames_power[i - 1]; - } - - return; -} -#endif diff --git a/lib_enc/mdct_classifier.c b/lib_enc/mdct_classifier.c index d555ac555..b157e0ff9 100644 --- a/lib_enc/mdct_classifier.c +++ b/lib_enc/mdct_classifier.c @@ -41,328 +41,3 @@ #include "wmc_auto.h" #include #include "ivas_prot_fx.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * Local constants - *--------------------------------------------------------------------------*/ - -#define SMOOTH_FILT_COEFF 0.8f -#define THRESH_UP 1.6f -#define THRESH_DOWN 1.1f -#define HQ_LOCAL 3 -#define TCX_LOCAL 1 - -#define GAIN2_START_WB 6 -#define GAIN3_START_WB 12 -#define GAIN4_START_WB 9 -#define H1_START_WB 17 -#define H2_START_WB 14 -#define H_LENGTH_WB 3 -#define GAIN2_START_SWB 8 -#define GAIN3_START_SWB 16 -#define GAIN4_START_SWB 12 -#define H1_START_SWB 25 -#define H2_START_SWB 20 -#define H_LENGTH_SWB 5 - - -/*-------------------------------------------------------------------* - * mdct_classifier() - * - * MDCT signal classifier for HQ_CORE/TCX_20_CORE - *-------------------------------------------------------------------*/ - -/*! r: HQ_CORE/TCX_20_CORE decision */ -int16_t mdct_classifier( - Encoder_State *st, /* i/o: Encoder state variable */ - const float *fft_buff, /* i : FFT spectrum from fft_rel */ - const float enerBuffer[], /* i : energy buffer */ - const int32_t brate /* i : current brate, IVAS: nominal bitrate, EVS: st->total_brate */ -) -{ - int16_t c; - float X[129]; - int16_t k; - float y[2]; - float nf; - float pe; - int16_t np; - float max_cand; - int16_t max_i; - float p_energy; - float n_energy; - int16_t d_acc; - int16_t pos_last; - float clas_sec; - int16_t clas_final; - int16_t i; - float gain1, gain2, gain3, gain11, gain4; - float peak_l, peak_h, avrg_l, avrg_h, peak_H1, avrg_H1, peak_H2, avrg_H2; - int16_t condition1, condition2; - int16_t condition3, condition4; - int16_t gain2_start, gain3_start, gain4_start, H1_start, H2_start, H_length; - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) - { - gain2_start = GAIN2_START_SWB; - gain3_start = GAIN3_START_SWB; - gain4_start = GAIN4_START_SWB; - H1_start = H1_START_SWB; - H2_start = H2_START_SWB; - H_length = H_LENGTH_SWB; - } - else if ( st->input_Fs == 16000 ) - { - gain2_start = GAIN2_START_WB; - gain3_start = GAIN3_START_WB; - gain4_start = GAIN4_START_WB; - H1_start = H1_START_WB; - H2_start = H2_START_WB; - H_length = H_LENGTH_WB; - } - else - { - assert( !"Unknown sampling frequency in MDCT_classifier" ); - H1_start = -1; /* to avoid compilation warning */ - H2_start = -1; /* to avoid compilation warning */ - H_length = -1; /* to avoid compilation warning */ - gain2_start = -1; /* to avoid compilation warning */ - gain3_start = -1; /* to avoid compilation warning */ - gain4_start = -1; /* to avoid compilation warning */ - } - - if ( st->element_mode != IVAS_CPE_DFT ) - { - for ( k = 0; k < 127; k++ ) - { - X[1 + k] = fft_buff[1 + k] * fft_buff[1 + k] + fft_buff[255 - k] * fft_buff[255 - k]; - } - - for ( k = 0; k < 2; k++ ) - { - y[k] = fft_buff[k << 7] * fft_buff[k << 7]; - } - - for ( k = 0; k < 2; k++ ) - { - X[k << 7] = y[k]; - } - } - else - { - float norm_val; - - norm_val = ( L_FFT * L_FFT ) / 4.f; - for ( k = 0; k < 128; k++ ) - { - X[k + 1] = st->Bin_E_old[k] * norm_val; - } - X[0] = X[1]; - } - - nf = X[0]; - pe = X[0]; - np = 0; - max_cand = -1.0F; - max_i = 0; - p_energy = 0.0F; - n_energy = 0.0F; - d_acc = 0; - pos_last = -1; - - for ( k = 0; k < 128; k++ ) - { - if ( X[k + 1] > nf ) - { - nf = 0.9578F * nf + 0.0422F * X[k + 1]; - } - else - { - nf = 0.6472F * nf + 0.3528F * X[k + 1]; - } - - if ( X[k + 1] > pe ) - { - pe = 0.42237F * pe + 0.57763F * X[k + 1]; - } - else - { - pe = 0.80285F * pe + 0.19715F * X[k + 1]; - } - - if ( X[k + 1] > pe * 0.64F ) - { - if ( X[k + 1] > max_cand ) - { - max_cand = X[k + 1]; - max_i = (int16_t) ( 2 + k ); - } - } - else - { - if ( max_i > 0 ) - { - if ( np > 0 ) - { - d_acc = (int16_t) ( (int16_t) ( d_acc + max_i ) - pos_last ); - } - np++; - pos_last = max_i; - } - - max_cand = -1.0F; - max_i = 0; - } - - p_energy += pe * pe; - n_energy += nf * nf; - } - - if ( np > 1 ) - { - nf = (float) d_acc / ( (float) np - 1.0F ); - } - else - { - nf = 0.0F; - } - gain1 = 0.0f; - gain2 = 0.0f; - gain3 = 0.0f; - - for ( i = 0; i < gain2_start; i++ ) - { - gain1 += enerBuffer[i] / gain2_start; - gain2 += enerBuffer[gain2_start + i] / gain2_start; - gain3 += enerBuffer[gain3_start + i] / gain2_start; - } - - gain11 = gain2_start * ( gain1 - enerBuffer[0] / gain2_start ) / ( gain2_start - 1 ); - gain4 = 0.0f; - for ( i = 0; i < gain4_start; i++ ) - { - gain4 += enerBuffer[gain4_start + i] / gain4_start; - } - - peak_H1 = enerBuffer[H1_start]; - avrg_H1 = enerBuffer[H1_start]; - for ( i = 1; i < H_length; i++ ) - { - if ( enerBuffer[H1_start + i] > peak_H1 ) - { - peak_H1 = enerBuffer[H1_start + i]; - } - avrg_H1 += enerBuffer[H1_start + i]; - } - - peak_H2 = enerBuffer[H2_start]; - avrg_H2 = enerBuffer[H2_start]; - for ( i = 1; i < H_length; i++ ) - { - if ( enerBuffer[H2_start + i] > peak_H2 ) - { - peak_H2 = enerBuffer[H2_start + i]; - } - avrg_H2 += enerBuffer[H2_start + i]; - } - - peak_l = 0.0f; - avrg_l = EPSILON; - peak_h = 0.0f; - avrg_h = EPSILON; - for ( i = 0; i < 32; i++ ) - { - avrg_l += X[20 + i]; - avrg_h += X[96 + i]; - if ( X[20 + i] > peak_l ) - { - peak_l = X[20 + i]; - } - if ( X[96 + i] > peak_h ) - { - peak_h = X[96 + i]; - } - } - - condition1 = nf > 12.0F; - condition2 = p_energy - n_energy * 147.87276f > 0; - condition3 = gain3 > 1.2f * gain2 || - ( gain3 >= 0.8f * gain2 && 5 * peak_H1 > 2.0f * avrg_H1 ) || - ( 2.6f * peak_l * avrg_h < peak_h * avrg_l || peak_l * avrg_h > 2.6f * peak_h * avrg_l ); - condition4 = ( gain4 > 0.8f * gain11 && 2.56f * peak_l * avrg_h > peak_h * avrg_l && peak_l * avrg_h < 5.12f * peak_h * avrg_l ) || - ( gain4 > 0.3f * gain11 && 32 * peak_h < 1.5f * avrg_h && 5 * peak_H2 < 1.5f * avrg_H2 ) || - ( 2.56f * peak_l * avrg_h < peak_h * avrg_l && 32 * peak_h > 1.5f * avrg_h ) || ( peak_l * avrg_h > 2.56f * peak_h * avrg_l && 32 * peak_h < 1.5f * avrg_h ); - - if ( ( ( brate >= HQ_MDCTCLASS_CROSSOVER_BRATE ) && st->input_Fs > 16000 && ( ( !condition1 && condition2 ) || ( condition1 && !condition2 ) || condition3 ) ) || ( ( ( brate < HQ_MDCTCLASS_CROSSOVER_BRATE ) || st->input_Fs == 16000 ) && condition4 ) ) - { - c = HQ_LOCAL; - } - else - { - c = TCX_LOCAL; - } - - /* Smooth decision from instantaneous decision*/ - clas_sec = ( SMOOTH_FILT_COEFF * hTcxEnc->clas_sec_old_flt ) + ( ( 1 - SMOOTH_FILT_COEFF ) * c ); - - /* Do thresholding with hysteresis */ - if ( ( hTcxEnc->clas_final_old == HQ_CORE || hTcxEnc->clas_final_old == TCX_20_CORE ) && ( ( hTcxEnc->last_gain1_flt > 0.5f * gain1 && hTcxEnc->last_gain1_flt < 2.0f * gain1 ) && ( hTcxEnc->last_gain2_flt > 0.5f * gain2 && hTcxEnc->last_gain2_flt < 2.0f * gain2 ) ) ) - { - clas_final = hTcxEnc->clas_final_old; - } - else if ( clas_sec > hTcxEnc->clas_sec_old_flt && clas_sec > THRESH_UP ) /* Going up? */ - { - clas_final = HQ_CORE; - } - else if ( clas_sec < THRESH_DOWN ) /* Going down */ - { - clas_final = TCX_20_CORE; - } - else - { - clas_final = hTcxEnc->clas_final_old; - } - - /* Prevent the usage of HQ_CORE on noisy-speech or inactive */ - if ( ( st->mdct_sw_enable == MODE2 || st->element_mode > EVS_MONO ) && ( st->flag_noisy_speech_snr == 1 || st->vad_flag == 0 ) && clas_final == HQ_CORE ) - { - clas_final = TCX_20_CORE; - } - - /* Restrict usage of HQ_core to supported operating range */ - /* EVS: brate == st->total_brate */ - /* IVAS: brate is the nominal bitrate while st->total_brate may fluctuate. This sets a hard limit for HQ at HQ_16k40 */ - if ( st->total_brate <= HQ_16k40 || brate < HQ_16k40 || st->bwidth == NB || brate > IVAS_48k ) - { - clas_final = TCX_20_CORE; - } - - /* Memory update */ - hTcxEnc->clas_sec_old_flt = clas_sec; - hTcxEnc->clas_final_old = clas_final; - hTcxEnc->last_gain1_flt = gain1; - hTcxEnc->last_gain2_flt = gain2; - - return clas_final; -} - -/*--------------------------------------------------------------------------* - * MDCT_classifier_reset() - * - * reset MDCT classifier memories - *--------------------------------------------------------------------------*/ - -void MDCT_classifier_reset( - TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ -) -{ - hTcxEnc->clas_sec_old_flt = 1.0f; - hTcxEnc->clas_final_old = 1; - hTcxEnc->last_gain1_flt = 0.0f; - hTcxEnc->last_gain2_flt = 0.0f; - - return; -} -#endif diff --git a/lib_enc/mdct_classifier_fx.c b/lib_enc/mdct_classifier_fx.c index c427229b7..51fe086df 100644 --- a/lib_enc/mdct_classifier_fx.c +++ b/lib_enc/mdct_classifier_fx.c @@ -591,7 +591,6 @@ Word16 mdct_classifier_fx( /* o: MDCT A/B decision return clas_final; /* Q0 */ } -#ifdef IVAS_FLOAT_FIXED Word16 mdct_classifier_ivas_fx( Encoder_State *st, /* i/o: Encoder state variable */ const Word16 *fft_buff, /* i : FFT spectrum from fft_rel */ @@ -1142,4 +1141,3 @@ Word16 mdct_classifier_ivas_fx( return clas_final; } -#endif diff --git a/lib_enc/mdct_selector.c b/lib_enc/mdct_selector.c index 36d196570..9d6f499db 100644 --- a/lib_enc/mdct_selector.c +++ b/lib_enc/mdct_selector.c @@ -42,250 +42,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define MDCT_SW_SIG_LINE_THR 2.85f /* Significant spectral line threshold above Etot (dB) */ -#define MDCT_SW_SIG_PEAK_THR 36.0f /* Significant peak threshold below Etot (dB) */ -#define MDCT_SW_HI_SPARSE_THR 0.25f /* Max. ratio of significant spectral lines for the spectrum to be considered sparse */ -#define MDCT_SW_HI_ENER_LO_THR 7.5f /* Hi band low energy threshold (dB) */ -#define MDCT_SW_1_VOICING_THR 0.9f /* Voicing threshold */ -#define MDCT_SW_1_HI_ENER_LO_THR 12.5f /* Hi band low energy threshold (dB) */ -#define MDCT_SW_1_SIG_HI_LEVEL_THR 28.0f /* High signal level threshold above noise floor (dB) */ -#define MDCT_SW_1_SIG_LO_LEVEL_THR 22.5f /* Low signal level threshold above noise floor (dB) */ -#define MDCT_SW_1_COR_THR 80.0f /* Threshold on cor_map_sum to indicate strongly tonal signal */ -#define MDCT_SW_1_SPARSENESS_THR 0.65f /* Threshold on spectrum sparseness */ - -#define MDCT_SW_2_VOICING_THR 0.6f /* Voicing threshold */ -#define MDCT_SW_2_HI_ENER_LO_THR 9.5f /* Hi band low energy threshold (dB) */ -#define MDCT_SW_2_SIG_HI_LEVEL_THR 19.0f /* High signal level threshold above noise floor (dB) */ -#define MDCT_SW_2_SIG_LO_LEVEL_THR 23.5f /* Low signal level threshold above noise floor (dB) */ -#define MDCT_SW_2_COR_THR 62.5f /* Threshold on cor_map_sum to indicate strongly tonal signal */ -#define MDCT_SW_2_SPARSENESS_THR 0.4f /* Threshold on spectrum sparseness */ - -#define MDCT_SW_HYST_FAC 0.8f /* Hysteresis tolerance factor */ - - -/*--------------------------------------------------------------------------* - * get_sparseness() - * - * - *--------------------------------------------------------------------------*/ - -static float get_sparseness( - const float Bin_E[], - int16_t n, - float thr ) -{ - int16_t num_max, i; - - thr = (float) ( thr * log( 10 ) ); /* Convert to 10*log() domain from 10*log10() domain */ - - thr = max( thr, 3.0f ); /* Set an absolute minimum for close to silent signals */ - - num_max = 0; - for ( i = 1; i < n - 1; ++i ) - { - if ( Bin_E[i] > max( max( Bin_E[i - 1], Bin_E[i + 1] ), thr ) ) - { - ++num_max; - } - } - - return 1.0f - num_max / (float) ( ( n - 2 ) / 2 ); -} - -/*--------------------------------------------------------------------------* - * MDCT_selector() - * - * - *--------------------------------------------------------------------------*/ - -void MDCT_selector( - Encoder_State *st, /* i/o: Encoder State */ - const float sp_floor, /* i : Noise floor estimate */ - const float Etot, /* i : Total energy */ - const float cor_map_sum, /* i : sum of correlation map */ - const float enerBuffer[] /* i : energy buffer */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - if ( st->mdct_sw_enable == MODE1 || st->mdct_sw_enable == MODE2 ) - { - float hi_ener, frame_voicing, sparseness; - int16_t peak_count; - int16_t prefer_tcx, prefer_hq_core, switching_point, hi_sparse, sparse; - int16_t lob_cldfb, hib_cldfb, lob_fft, hib_fft; - int16_t i; - float sig_lo_level_thr, sig_hi_level_thr, cor_thr, voicing_thr, sparseness_thr, hi_ener_lo_thr; - int16_t last_core; - - if ( st->bwidth == NB ) - { - lob_cldfb = 3200 / 400; - hib_cldfb = 4000 / 400; - lob_fft = ( L_FFT / 2 ) / 2; /* 3.2 KHz */ - hib_fft = ( 40 * ( L_FFT / 2 ) ) / 64; /* 4.0 KHz */ - } - else if ( st->bwidth == WB ) - { - lob_cldfb = 4800 / 400; - hib_cldfb = 8000 / 400; - lob_fft = 3 * L_FFT / 2 / 4; /* 4.8 KHz */ - hib_fft = L_FFT / 2; /* 6.4 KHz (should be 8 KHz) */ - } - else - { - lob_cldfb = 6400 / 400; - hib_cldfb = 16000 / 400; - if ( st->bwidth == FB ) - { - hib_cldfb = 24000 / 400; - } - lob_fft = L_FFT / 2; /* 6.4 KHz */ - hib_fft = L_FFT / 2; /* 6.4 KHz (should be 8 KHz) */ - } - - /* st->last_core is reset to TCX_20_CORE in init_acelp() => fix it here */ - last_core = st->last_core; - if ( st->last_codec_mode == MODE1 && last_core == TCX_20_CORE ) - { - last_core = HQ_CORE; - } - - /* Voicing */ - frame_voicing = ( st->voicing[0] + st->voicing[1] ) * 0.5f; - - /* Spectral sparseness */ - sparseness = get_sparseness( st->Bin_E, lob_fft, Etot - MDCT_SW_SIG_PEAK_THR ); - - /* Hi band energy */ - hi_ener = (float) log10( mean( &enerBuffer[lob_cldfb], hib_cldfb - lob_cldfb ) + 0.0001f ); - - /* Hi band sparseness */ - if ( st->bwidth >= SWB ) - { - /* For SWB, assume hi band sparseness based on 4.8 KHz-6.4 KHz band */ - lob_fft = 3 * L_FFT / 2 / 4; /* 4.8 KHz */ - } - - peak_count = 0; - for ( i = lob_fft; i < hib_fft; ++i ) - { - if ( st->Bin_E[i] >= Etot + MDCT_SW_SIG_LINE_THR * LOG_10 ) - { - ++peak_count; - } - } - hi_sparse = peak_count <= anint( ( hib_fft - lob_fft ) * MDCT_SW_HI_SPARSE_THR ); - sparse = peak_count <= anint( ( hib_fft - lob_fft ) * MDCT_SW_HI_SPARSE_THR / MDCT_SW_HYST_FAC ); - - /* Hysteresis */ - if ( hTcxEnc->prev_hi_sparse > 0 && sparse > 0 && min( min( st->voicing[0], st->voicing[1] ), st->voicing[2] ) >= MDCT_SW_1_VOICING_THR ) - { - hi_sparse = 1; - } - - /* Allowed switching point? */ - switching_point = ( last_core != HQ_CORE && last_core != TCX_20_CORE ) || /* previous core was non-MDCT */ - ( hTcxEnc->prev_hi_ener_flt <= MDCT_SW_HI_ENER_LO_THR || hi_ener <= MDCT_SW_HI_ENER_LO_THR ) || /* hi band is close to silent */ - ( last_core == HQ_CORE && ( st->mdct_sw_enable == MODE1 || ( hi_sparse > 0 && hTcxEnc->prev_hi_sparse >= 0 && hTcxEnc->prev_hi_sparse <= 1 ) ) ) || /* HQ_CORE and hi band became sparse */ - ( last_core == TCX_20_CORE && ( hi_sparse == 0 && hTcxEnc->prev_hi_sparse > 0 ) ); /* TCX and hi band became dense */ - - if ( st->mdct_sw_enable == MODE1 ) - { - sig_lo_level_thr = MDCT_SW_1_SIG_LO_LEVEL_THR; - sig_hi_level_thr = MDCT_SW_1_SIG_HI_LEVEL_THR; - cor_thr = MDCT_SW_1_COR_THR; - voicing_thr = MDCT_SW_1_VOICING_THR; - sparseness_thr = MDCT_SW_1_SPARSENESS_THR; - hi_ener_lo_thr = MDCT_SW_1_HI_ENER_LO_THR; - } - else - { - /* st->mdct_sw_enable == MODE2 */ - sig_lo_level_thr = MDCT_SW_2_SIG_LO_LEVEL_THR; - sig_hi_level_thr = MDCT_SW_2_SIG_HI_LEVEL_THR; - cor_thr = MDCT_SW_2_COR_THR; - voicing_thr = MDCT_SW_2_VOICING_THR; - sparseness_thr = MDCT_SW_2_SPARSENESS_THR; - hi_ener_lo_thr = MDCT_SW_2_HI_ENER_LO_THR; - } - - prefer_tcx = ( Etot - sp_floor >= sig_hi_level_thr ) && /* noise floor is low */ - ( cor_map_sum >= cor_thr || frame_voicing >= voicing_thr || sparseness >= sparseness_thr ) && /* strong tonal components */ - ( hi_ener <= hi_ener_lo_thr || hi_sparse > 0 ); /* high freqs have low energy or are sparse */ - - prefer_hq_core = ( Etot - sp_floor < sig_lo_level_thr ) || /* noise floor is very high */ - ( cor_map_sum < cor_thr * MDCT_SW_HYST_FAC && frame_voicing < voicing_thr * MDCT_SW_HYST_FAC && sparseness < sparseness_thr * MDCT_SW_HYST_FAC ) || /* too weak tonal components */ - ( st->mdct_sw_enable == MODE1 && !prefer_tcx && st->hTranDet->transientDetector.bIsAttackPresent ); - - /* Prefer HQ_CORE on transients */ - if ( st->mdct_sw_enable == MODE2 && st->hTranDet->transientDetector.bIsAttackPresent ) - { - prefer_tcx = 0; - prefer_hq_core = 1; - } - - if ( switching_point && ( prefer_tcx || prefer_hq_core ) ) - { - if ( prefer_tcx ) - { - st->core = TCX_20_CORE; - } - else /* prefer_hq_core */ - { - st->core = HQ_CORE; - } - } - else if ( last_core == HQ_CORE || last_core == TCX_20_CORE ) - { - st->core = last_core; - } - - /* Prevent the usage of HQ_CORE on noisy-speech or inactive */ - if ( st->mdct_sw_enable == MODE2 && st->core == HQ_CORE && ( st->flag_noisy_speech_snr == 1 || st->vad_flag == 0 ) ) - { - st->core = TCX_20_CORE; - } - - - /* Update memories */ - if ( hi_sparse <= 0 ) - { - hTcxEnc->prev_hi_sparse = hi_sparse; - } - else - { - hTcxEnc->prev_hi_sparse += hi_sparse; - if ( hTcxEnc->prev_hi_sparse >= 2 ) - { - hTcxEnc->prev_hi_sparse = 2; - } - } - hTcxEnc->prev_hi_ener_flt = hi_ener; - } - - return; -} - -/*--------------------------------------------------------------------------* - * MDCT_selector_reset() - * - * reset MDCT selector memories - *--------------------------------------------------------------------------*/ - -void MDCT_selector_reset( - TCX_ENC_HANDLE hTcxEnc /* i/o: TCX Encoder Handle */ -) -{ - hTcxEnc->prev_hi_ener_flt = 0; - hTcxEnc->prev_hi_sparse = -1; - - return; -} -#endif diff --git a/lib_enc/mslvq_enc.c b/lib_enc/mslvq_enc.c index 736ffea39..9f95d696c 100644 --- a/lib_enc/mslvq_enc.c +++ b/lib_enc/mslvq_enc.c @@ -48,20 +48,7 @@ * Local function prototypes *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float quantize_data( float *data, const float *w_in, float *qin, float *cv_out, int16_t *idx_lead, int16_t *idx_scale, const float *sigma, const float *inv_sigma, const float *scales, Word8 *no_leaders ); -static float q_data( float *pTmp1, const float *w1, float *quant, float *cv_out, int16_t *idx_lead, int16_t *idx_scale, const float *p_inv_sigma, const float *p_sigma, const float *p_scales, Word8 *no_leaders ); -static void prepare_data( float *xsort, int16_t *sign, float *data, float *w, const float *w_in, const float *sigma, const float *inv_sigma, int16_t *p_sig ); -static float calculate_min_dist( float cv_pot[LATTICE_DIM], const float *scale, const float *w, int16_t *p_best_scale, int16_t *p_best_idx, Word8 *no_leaders, int16_t sig, int16_t *indx ); -static int16_t find_pos( float *c, const int16_t len, float arg, int16_t *p ); -static void take_out_val( float *v, float *v_out, const float val, const int16_t len ); -static UWord32 index_leaders( float *cv, int16_t idx_lead, const int16_t dim ); -static UWord32 encode_comb( float *cv, const int16_t idx_lead ); -static UWord32 encode_sign_pc1( const Word16 parity, float *cv ); -static UWord32 c2idx( const Word16 n, Word16 *p, const Word16 k ); -#else Word32 quantize_data_ivas_fx( Word16 *data, const Word16 *w_in, Word16 *qin, Word16 *cv_out, Word16 *idx_lead, Word16 *idx_scale, const Word16 *sigma, const Word16 *inv_sigma, const Word16 *scales, const Word16 *no_lead ); -#endif /*-----------------------------------------------------------------* * mslvq() @@ -69,116 +56,6 @@ Word32 quantize_data_ivas_fx( Word16 *data, const Word16 *w_in, Word16 *qin, Wor * Encodes the LSF residual *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float mslvq( - float *pTmp, /* i : M-dimensional input vector */ - float *quant, /* o : quantized vector */ - float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ - int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ - int16_t *idx_scale, /* o : scale index for each subvector */ - const float *w, /* i : weights for LSF quantization */ - const int16_t mode, /* i : number indicating the coding type (V/UV/G...)*/ - const int16_t mode_glb, /* i : LVQ coding mode */ - const int16_t pred_flag /* i : prediction flag (0: safety net, 1,2 - predictive )*/ -) -{ - float dist; - const float *p_scales, *p_sigma, *p_inv_sigma; - int16_t i, tmp, tmp1; - Word8 p_no_lead[MAX_NO_SCALES * 2]; - - dist = 0.0f; - - if ( pred_flag == 0 ) - { - p_sigma = sigma_MSLVQ[mode]; - /* inverse sigma is precomputed to save complexity */ - p_inv_sigma = inv_sigma_MSLVQ[mode]; - p_scales = scales[mode_glb]; - - tmp = no_lead_idx[mode_glb][0]; - tmp1 = no_lead_idx[mode_glb][1]; - if ( ( tmp <= LIMIT_LEADER ) && ( tmp < tmp1 - 2 ) ) - { - tmp += DELTA_LEADER; - } - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - p_no_lead[i] = (int16_t) leaders_short[tmp][i]; - p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[tmp1][i]; - } - } - else - { - if ( pred_flag >= 5 ) - { - /* assert( pred_flag >= 12 && pred_flag <= 15 ); */ - /* pred_flag is here the number of bits for MSLVQ */ - - p_sigma = &sigma_BWE[mode_glb * LATTICE_DIM]; - - /* inverse sigma is precomputed to save complexity */ - p_inv_sigma = &inv_sigma_BWE[mode_glb * LATTICE_DIM]; - - if ( mode_glb == 0 ) - { - p_scales = &scales_BWE[( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - p_no_lead[i] = no_lead_BWE[i + ( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; - } - } - else - { - p_scales = &scales_BWE_3b[( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - p_no_lead[i] = no_lead_BWE_3b[i + ( pred_flag - mslvq_SHB_min_bits[mode_glb] ) * 3]; - } - } - } - else - { - p_sigma = sigma_p[mode]; - - /* inverse sigma is precomputed to save complexity */ - p_inv_sigma = inv_sigma_p[mode]; - p_scales = scales_p[mode_glb]; - - tmp = no_lead_p_idx[mode_glb][0]; - tmp1 = no_lead_p_idx[mode_glb][1]; - - if ( ( tmp <= LIMIT_LEADER ) && ( tmp < tmp1 - 2 ) ) - { - tmp += DELTA_LEADER; - } - - if ( ( tmp == LIMIT_LEADER ) && ( tmp1 == 0 ) ) - { - tmp += DELTA_LEADER; - tmp1 += DELTA_LEADER; - } - - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - p_no_lead[i] = (int16_t) leaders_short[tmp][i]; - p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[tmp1][i]; - } - } - } - - /* first subvector */ - dist += quantize_data( pTmp, w, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); - - if ( pred_flag < 5 ) - { - /* second subvector */ - dist += quantize_data( pTmp + LATTICE_DIM, w + LATTICE_DIM, quant + LATTICE_DIM, cv_out + LATTICE_DIM, &idx_lead[1], &idx_scale[1], p_sigma + LATTICE_DIM, p_inv_sigma + LATTICE_DIM, p_scales + MAX_NO_SCALES, p_no_lead + MAX_NO_SCALES ); - } - - return dist; -} -#else Word32 mslvq_ivas_16( Word16 *pTmp, /* i : M-dimensional input vector */ Word16 *quant, /* o : quantized vector */ @@ -303,368 +180,30 @@ Word32 mslvq_ivas_16( return dist; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * q_data() - * - * (used for LSF quantization in CNG) - *-----------------------------------------------------------------*/ - -static float q_data( - float *pTmp1, - const float *w1, - float *quant, - float *cv_out, - int16_t *idx_lead, - int16_t *idx_scale, - const float *p_sigma, - const float *p_inv_sigma, - const float *p_scales, - Word8 *p_no_lead ) -{ - float dist = 0.0f; - /* first subvector */ - dist += quantize_data( pTmp1, w1, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); - /* second subvector */ - dist += quantize_data( pTmp1 + LATTICE_DIM, w1 + LATTICE_DIM, quant + LATTICE_DIM, cv_out + LATTICE_DIM, &idx_lead[1], &idx_scale[1], p_sigma + LATTICE_DIM, p_inv_sigma + LATTICE_DIM, p_scales + MAX_NO_SCALES, p_no_lead + MAX_NO_SCALES ); - - return dist; -} -#endif /*-----------------------------------------------------------------* * mslvq_cng() * * Encodes the LSF residual in SID frames *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float mslvq_cng( - int16_t idx_cv, /* i : index of cv from previous stage */ - float *pTmp, /* i : 16 dimensional input vector */ - float *quant, /* o : quantized vector */ - float *cv_out, /* o : corresponding 8-dim lattice codevectors (without the scaling) */ - int16_t *idx_lead, /* o : leader index for each 8-dim subvector */ - int16_t *idx_scale, /* o : scale index for each subvector */ - const float *w /* i : weights for LSF quantization */ -) -{ - float dist; - const float *p_scales, *p_sigma, *p_inv_sigma; - Word8 p_no_lead[MAX_NO_SCALES * 2]; - int16_t no_scales[2]; - int16_t mode_glb, mode, i; - float pTmp1[M], w1[M]; - - dist = 0.0f; - mode = LVQ_COD_MODES + idx_cv; - - /* for CNG there is only one bitrate but several quantizer structures, depending on the previous VQ stage */ - mode_glb = START_CNG_IVAS + idx_cv; - - p_sigma = sigma_MSLVQ[mode]; - p_inv_sigma = inv_sigma_MSLVQ[mode]; - p_scales = scales[mode_glb]; - - no_scales[0] = 0; - no_scales[1] = 0; - - for ( i = 0; i < MAX_NO_SCALES; i++ ) - { - p_no_lead[i] = (int16_t) leaders_short[no_lead_idx[mode_glb][0]][i]; - p_no_lead[i + MAX_NO_SCALES] = (int16_t) leaders_short[no_lead_idx[mode_glb][1]][i]; - - if ( p_scales[i] > 0.0f ) - { - no_scales[0] += 1; - } - if ( p_scales[i + MAX_NO_SCALES] > 0.0f ) - { - no_scales[1] += 1; - } - } - - /* check if LSF component permutation is needed or not */ - if ( cng_sort[idx_cv] ) - { - /* change order in subvecs */ - for ( i = 0; i < M; i++ ) - { - pTmp1[i] = pTmp[i]; - w1[i] = w[i]; - } - /* sorting the quantizer input and the corresponding weights according to the specified permutations */ - permute( pTmp1, perm_MSLVQ[idx_cv] ); - permute( w1, perm_MSLVQ[idx_cv] ); - - dist = q_data( pTmp1, w1, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); - /* permute back */ - permute( quant, perm_MSLVQ[idx_cv] ); - } - else - { - dist = q_data( pTmp, w, quant, cv_out, idx_lead, idx_scale, p_sigma, p_inv_sigma, p_scales, p_no_lead ); - } - - return dist; -} -#endif /*-----------------------------------------------------------------* * prepare_data() * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void prepare_data( - float *xsort, - int16_t *sign, - float *data, - float *w, - const float *w_in, - const float *sigma, - const float *inv_sigma, - int16_t *p_sig ) -{ - int16_t j, sig; - float s, inv_s; - - /* scale data */ - for ( j = 0; j < LATTICE_DIM; j++ ) - { - s = sigma[j]; - inv_s = inv_sigma[j]; - xsort[j] = data[j] * inv_s; - w[j] = w_in[j] * ( s * s ); - } - - sig = 1; - for ( j = 0; j < LATTICE_DIM; j++ ) - { - if ( xsort[j] < 0 ) - { - sign[j] = -1; - sig = -sig; - xsort[j] = -xsort[j]; - } - else - { - sign[j] = 1; - } - } - *p_sig = sig; - - return; -} -#endif /*-----------------------------------------------------------------* * calculate_min_dist() * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float calculate_min_dist( - float cv_pot[LATTICE_DIM], - const float *scale, - const float *w, - int16_t *p_best_scale, - int16_t *p_best_idx, - Word8 *no_leaders, - int16_t sig, - int16_t *indx ) -{ - int16_t k, l, j, best_scale = -1, best_idx = -1; - float s, s2, tmp_dist, min_dist, wx[LATTICE_DIM], wind[LATTICE_DIM]; - float sum1[NO_LEADERS], sum2[NO_LEADERS]; - const float *pl_crt; - float p; - - /* compare first with the origin */ - min_dist = 0.0f; - for ( j = 0; j < LATTICE_DIM; j++ ) - { - /* sorting the weight based on the ordering indx[] of the input vector */ - wind[j] = w[indx[j]]; - wx[j] = 2.0f * wind[j] * cv_pot[j]; - } - s = scale[0]; - s2 = s * s; - pl_crt = &pl_HQ[0]; - - for ( j = 0; j < no_leaders[0]; j++ ) - { - sum1[j] = 0; - sum2[j] = 0; - l = 0; - while ( l < LATTICE_DIM - 1 ) - { - p = *pl_crt; - if ( p ) - { - sum1[j] += wx[l] * p; - sum2[j] += wind[l] * p * p; - pl_crt++; - l++; - } - else - { - pl_crt += LATTICE_DIM - l; - l = LATTICE_DIM; - } - } - if ( ( l - LATTICE_DIM + 1 ) == 0 ) - { - p = *pl_crt; - /* if it went up to 7th position */ - if ( pl_par[j] ) - { - if ( sig != pl_par[j] ) - { - sum1[j] -= wx[l] * p; - sum2[j] += wind[l] * p * p; - pl_crt++; - } - else - { - sum1[j] += wx[l] * p; - sum2[j] += wind[l] * p * p; - pl_crt++; - } - } - else - { - sum1[j] += wx[l] * p; - sum2[j] += wind[l] * p * p; - pl_crt++; - } - } - /* distance between the potential codevector and the input calculated in ordered space */ - tmp_dist = s2 * sum2[j] - s * sum1[j]; - if ( tmp_dist < min_dist ) - { - min_dist = tmp_dist; - best_scale = 0; - best_idx = j; - } - } - - tmp_dist = min_dist + 1.0f; - - for ( k = 1; k < MAX_NO_SCALES; k++ ) - { - s = scale[k]; - - if ( s > 0.0f ) - { - s2 = s * s; - for ( j = 0; j < no_leaders[k]; j++ ) - { - /* distance between the potential codevector and the input calculated in ordered space */ - tmp_dist = s2 * sum2[j] - s * sum1[j]; - if ( tmp_dist < min_dist ) - { - min_dist = tmp_dist; - best_scale = k; - best_idx = j; - } - } - } - } - *p_best_scale = best_scale; - *p_best_idx = best_idx; - - return min_dist; -} -#endif - /*-----------------------------------------------------------------* * quantize_data() * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float quantize_data( - float *data, /* i : residual LSF data to quantize */ - const float *w_in, /* i : weights */ - float *qin, /* o : quantized output (scaled) */ - float *cv_out, /* o : codevectors */ - int16_t *idx_lead, /* o : leader indexes for each subvector */ - int16_t *idx_scale, /* o : scale indexes for each subvector */ - const float *sigma, /* i : standard deviation */ - const float *inv_sigma, /* i : inverse of standard deviation */ - const float *scale, /* i : scales for each truncation */ - Word8 *no_leaders /* i : number of leader vectors for each truncation of each subvector */ -) -{ - int16_t j; - float w[LATTICE_DIM], min_dist = 0; - int16_t best_idx = 0, best_scale = -1; - float s; - float cv_pot[LATTICE_DIM]; - int16_t indx[LATTICE_DIM]; - int16_t sig, sign[LATTICE_DIM]; - int16_t smallest; - int16_t id[LATTICE_DIM]; - - if ( scale[0] > 0.0f ) - { - prepare_data( cv_pot, sign, data, w, w_in, sigma, inv_sigma, &sig ); - /* sorting of the input vector based on its absolute values; indx: permutation corresponding to the sorting */ - sort_desc_ind( cv_pot, LATTICE_DIM, indx ); - smallest = indx[LATTICE_DIM - 1]; - min_dist = calculate_min_dist( cv_pot, scale, w, &best_scale, &best_idx, no_leaders, sig, indx ); - if ( best_scale > -1 ) - { - for ( j = 0; j < LATTICE_DIM; j++ ) - { - id[indx[j]] = j; - } - for ( j = 0; j < LATTICE_DIM; j++ ) - { - cv_out[j] = sign[j] * pl_HQ[best_idx * LATTICE_DIM + id[j]]; - } - if ( pl_par[best_idx] ) - { - if ( sig - pl_par[best_idx] != 0 ) - { - cv_out[smallest] = -cv_out[smallest]; - } - } - s = scale[best_scale]; - for ( j = 0; j < LATTICE_DIM; j++ ) - { - qin[j] = cv_out[j] * s * sigma[j]; - } - *idx_lead = best_idx; - *idx_scale = best_scale; - } - else - { - for ( j = 0; j < LATTICE_DIM; j++ ) - { - qin[j] = 0; - } - - *idx_lead = best_idx; - *idx_scale = best_scale; - } - } - else - { - *idx_lead = 0; - *idx_scale = -1; - for ( j = 0; j < LATTICE_DIM; j++ ) - { - cv_out[j] = 0; - qin[j] = 0; - } - } - - return min_dist; -} -#endif /*-----------------------------------------------------------------* * index_lvq() @@ -672,55 +211,6 @@ static float quantize_data( * sorts in descending order and computes indices in the sorted vector *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void index_lvq( - float *quant, /* i : codevector to be indexed (2 8-dim subvectors) */ - int16_t *idx_lead, /* i : leader class index for each subvector */ - int16_t *idx_scale, /* i : scale index for each subvector */ - const int16_t mode, /* i : integer signaling the quantizer structure for the current bitrate */ - int16_t *index, /* o : encoded index (represented on 3 short each with 15 bits ) */ - const int16_t prediction_flag ) -{ - UWord32 index1, index2, tmp, idx[2]; - UWord32 offset_scale1[MAX_NO_SCALES + 1], offset_scale2[MAX_NO_SCALES + 1]; - - - index1 = 0; - create_offset( offset_scale1, offset_scale2, mode, prediction_flag ); - - /* for first subvector */ - if ( idx_scale[0] > -1 ) - { - /* create offset */ - index1 = encode_comb( quant, idx_lead[0] ) + table_no_cv[idx_lead[0]] + offset_scale1[idx_scale[0]]; - } - - /* for second subvector */ - index2 = 0; - if ( idx_scale[1] > -1 ) - { - index2 = encode_comb( &quant[LATTICE_DIM], idx_lead[1] ) + table_no_cv[idx_lead[1]] + offset_scale2[idx_scale[1]]; - } - - multiply32_32_64( index1, offset_scale2[MAX_NO_SCALES], idx ); - - tmp = idx[0] + index2; - if ( tmp < idx[0] || tmp < index2 ) - { - idx[1] += 1; - } - - idx[0] = tmp; - - /* convert to 3 short */ - index[0] = (int16_t) ( ( idx[0] ) & ( 0xffff >> 1 ) ); - index[1] = (int16_t) ( ( idx[0] ) >> 15 ) & ( 0xffff >> 1 ); - index[2] = (int16_t) ( ( idx[0] ) >> 30 ) + ( ( ( idx[1] ) << 2 ) & ( 0xffff >> 1 ) ); - - return; -} -#endif - /*-----------------------------------------------------------------* * encode_comb() @@ -728,23 +218,6 @@ void index_lvq( * creates an index for the lattice codevector *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: index of the absolute valued codevector */ -static UWord32 encode_comb( - float *cv, /* i : codevector to be indexed */ - const int16_t idx_lead /* i : leader class index, to know the values */ -) -{ - UWord32 idx_sign; - UWord32 idx_ld_class; - - idx_sign = encode_sign_pc1( pl_par[idx_lead], cv ); - idx_ld_class = index_leaders( cv, idx_lead, LATTICE_DIM ); - - return idx_sign * (UWord32) pi0[idx_lead] + idx_ld_class; -} -#endif - /*-----------------------------------------------------------------* * index_leaders() @@ -752,63 +225,6 @@ static UWord32 encode_comb( * gives the index in a class of leaders without considering the sign yet *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: index */ -static UWord32 index_leaders( - float *cv, /* i : codevector to be indexed */ - int16_t idx_lead, /* i : leader class index */ - const int16_t dim /* i : vector dimension */ -) -{ - UWord32 index; - int16_t p[LATTICE_DIM]; - int16_t i, no_vals_loc, nr, dim_loc; - float cv_copy[LATTICE_DIM], val_crt; - - no_vals_loc = no_vals[idx_lead]; - - if ( no_vals_loc == 1 ) - { - return 0; - } - - for ( i = 0; i < LATTICE_DIM; i++ ) - { - cv_copy[i] = (float) fabs( cv[i] ); - } - - val_crt = vals[idx_lead][0]; - nr = find_pos( cv_copy, dim, val_crt, p ); - index = c2idx( LATTICE_DIM, p, nr ); - - if ( no_vals_loc == 2 ) - { - return index; - } - - take_out_val( cv_copy, cv_copy, val_crt, dim ); - dim_loc = dim - no_vals_ind[idx_lead][0]; - index *= C_VQ[dim_loc][no_vals_ind[idx_lead][1]]; - val_crt = vals[idx_lead][1]; - nr = find_pos( cv_copy, dim_loc, val_crt, p ); - index += c2idx( dim_loc, p, nr ); - - if ( no_vals_loc == 3 ) - { - return index; - } - - take_out_val( cv_copy, cv_copy, val_crt, dim_loc ); - dim_loc = dim_loc - no_vals_ind[idx_lead][1]; - index *= C_VQ[dim_loc][no_vals_ind[idx_lead][2]]; - val_crt = vals[idx_lead][2]; - nr = find_pos( cv_copy, dim_loc, val_crt, p ); - index += c2idx( dim_loc, p, nr ); - /* maximum 4 values */ - - return index; -} -#endif /*-----------------------------------------------------------------* * find_pos() @@ -817,29 +233,6 @@ static UWord32 index_leaders( * It returns the number of such positions and their values in the array 'p'. *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: number of positions */ -int16_t find_pos( - float *c, /* i : input vector */ - const int16_t len, /* i : input vector dim */ - float arg, /* i : argument to be compared with */ - int16_t *p /* o : vector of positions */ -) -{ - int16_t i = 0, j = 0; - - /* how many (j) and which (p) positions are in the relation pred(arg,c[i]) */ - for ( i = 0; i < len; i++ ) - { - if ( (int16_t) ( arg * 10 ) == (int16_t) ( c[i] * 10 ) ) - { - p[j++] = i; - } - } - - return j; -} -#endif /*-----------------------------------------------------------------* * encode_sign_pc1() @@ -849,41 +242,6 @@ int16_t find_pos( * and positive sign stands for 1. *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/*! r: index of signs */ -static UWord32 encode_sign_pc1( - const int16_t parity, /* i : parity of the leader class to which the codevector belongs */ - float *cv /* i : input codevector */ -) -{ - UWord32 idx_sign; - int16_t cnt, i, len = LATTICE_DIM; - - idx_sign = 0; - cnt = 0; - - if ( parity ) - { - len -= 1; - } - - for ( i = 0; i < len; i++ ) - { - if ( cv[i] < 0 ) - { - idx_sign += ( 1 << cnt ); - cnt++; - } - - if ( cv[i] > 0 ) - { - cnt++; - } - } - - return idx_sign; -} -#endif /*-----------------------------------------------------------------* * take_out_val() @@ -891,115 +249,18 @@ static UWord32 encode_sign_pc1( * removes the value val from the vector v *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void take_out_val( - float *v, /* i : input vector */ - float *v_out, /* o : output vector without the value val*/ - const float val, /* i : value to be removed */ - const int16_t len /* i : input vector length */ -) -{ - int16_t i, cnt; - - cnt = 0; - - for ( i = 0; i < len; i++ ) - { - if ( (int16_t) ( v[i] * 10 ) != (int16_t) ( val * 10 ) ) - { - v_out[cnt++] = v[i]; - } - } - - return; -} -#endif - /*-----------------------------------------------------------------* * c2idx() * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static UWord32 c2idx( - const int16_t n, - int16_t *p, - const int16_t k ) -{ - int16_t i, p0; - UWord32 skip; - - if ( k == 1 ) - { - return (UWord32) ( p[0] ); - } - else - { - skip = 0; - for ( i = 1; i <= p[0]; i++ ) - { - skip += C_VQ[n - i][k - 1]; - } - - p0 = p[0]; - for ( i = 1; i < k; i++ ) - { - p[i] -= p0 + 1; - } - - return skip + c2idx( n - p0 - 1, p + 1, k - 1 ); - } -} -#endif /*-----------------------------------------------------------------* * index_lvq_SHB() * *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -UWord32 index_lvq_SHB( - const int16_t idx_lead, - const int16_t idx_scale, - const int16_t nbits, - float *lat_cv, - const int16_t mode ) -{ - uint16_t i; - const Word8 *p_no_lead; - UWord32 index; - - if ( mode == 0 ) - { - p_no_lead = &no_lead_BWE[( nbits - mslvq_SHB_min_bits[0] ) * 3]; - } - else - { - p_no_lead = &no_lead_BWE_3b[( nbits - mslvq_SHB_min_bits[1] ) * 3]; - } - - index = 0; - if ( idx_lead > -1 ) - { - index = 1; - for ( i = 0; i < idx_scale; i++ ) - { - index += table_no_cv[p_no_lead[i]]; - } - - if ( idx_lead > 0 ) - { - index += table_no_cv[idx_lead]; - } - - index += encode_comb( lat_cv, idx_lead ); - } - - return index; -} -#endif - UWord32 index_lvq_SHB_fx( const Word16 idx_lead, diff --git a/lib_enc/multi_harm.c b/lib_enc/multi_harm.c index cfc8a6f3a..7d23dd6f7 100644 --- a/lib_enc/multi_harm.c +++ b/lib_enc/multi_harm.c @@ -40,289 +40,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define THR_CORR_MAX 60 /* upper threshold of multi-harm. correlation */ -#define THR_CORR_MIN 49 /* lower threshold of multi-harm. correlation */ -#define THR_CORR_STEP 0.2f /* step for the threshold of multi-harm. correlation */ - -/*---------------------------------------------------------------------* - * multi_harm() - * - * Perform multi-harmonic analysis, information used for UV and VAD decision - *---------------------------------------------------------------------*/ - -/*! r: frame multi-harmonicity (1-harmonic, 0-not) */ -int16_t multi_harm( - const float Bin_E[], /* i : log-energy spectrum of the current frame */ - float old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor */ - float cor_map_LT[], /* i/o: LT correlation map */ - float *multi_harm_limit, /* i/o: multi harminic threshold */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t bwidth, /* i : input signal bandwidth */ - int16_t *cor_strong_limit, /* i/o: HF correlation indicator */ - float *st_mean_avr_dyn, /* i/o: long term average dynamic */ - float *st_last_sw_dyn, /* i/o: last dynamic */ - float *cor_map_sum, /* i : sum of correlation map */ - float *sp_floor, /* o : noise floor estimate */ - float S_map[] /* o : short-term correlation map */ -) -{ - int16_t i, j, k, L, stemp, N_mins, ind_mins[L_FFT / 4], *pt_mins, harm; - float ftemp, ftemp2, flor, step, corx2, cory2, corxy, cor, cor_map_LT_sum, cor_strong, S[L_FFT / 2]; - float mean_dyn; - - /*------------------------------------------------------------------* - * initialization - *------------------------------------------------------------------*/ - - if ( bwidth == NB ) - { - /* length of the useful part of the spectrum (up to 4kHz) */ - L = 76; - } - else - { - /* length of the useful part of the spectrum (up to 6.4kHz) */ - L = L_FFT / 2; - } - - mvr2r( Bin_E, S, L ); - - /*------------------------------------------------------------------* - * searching of spectral maxima and minima - *------------------------------------------------------------------*/ - - pt_mins = ind_mins; - - /* index of the first minimum */ - if ( Bin_E[0] < Bin_E[1] ) - - { - *pt_mins++ = 0; - } - - for ( i = 1; i < L - 1; i++ ) - { - /* minimum found */ - if ( Bin_E[i] < Bin_E[i - 1] && Bin_E[i] < Bin_E[i + 1] ) - { - *pt_mins++ = i; - } - } - - /* index of the last minimum */ - if ( Bin_E[L - 1] < Bin_E[L - 2] ) - { - *pt_mins++ = L - 1; - } - - /* total number of minimas found */ - N_mins = (int16_t) ( pt_mins - ind_mins - 1 ); - - /*------------------------------------------------------------------* - * calculation of the spectral floor - * subtraction of the spectral floor - *------------------------------------------------------------------*/ - - set_f( S, 0, L ); - if ( N_mins > 0 ) - { - *sp_floor = 0; - for ( i = 0; i < N_mins; ++i ) - { - *sp_floor += Bin_E[ind_mins[i]]; - } - *sp_floor /= (float) N_mins; - set_f( S, 0, ind_mins[0] ); - set_f( &S[ind_mins[N_mins]], 0, L - ind_mins[N_mins] ); - - pt_mins = ind_mins; - flor = 0; - step = 0; - - for ( i = ind_mins[0]; i < ind_mins[N_mins]; i++ ) - { - /* we are at the end of the next minimum */ - if ( i == *pt_mins ) - { - pt_mins++; - flor = Bin_E[i]; - - /* calculate the new step */ - step = ( Bin_E[*pt_mins] - Bin_E[i] ) / ( *pt_mins - i ); - } - - /* subtract the floor */ - if ( Bin_E[i] > flor ) - { - S[i] = Bin_E[i] - flor; - } - else - { - S[i] = 0; - } - - /* update the floor */ - flor += step; - } - } - else - { - *sp_floor = Bin_E[0]; - } - *sp_floor *= 1.0f / logf( 10.0f ); - - /* calculate the maximum dynamic per band */ - mean_dyn = mean( &S[L - 40], 40 ); - mean_dyn = 0.6f * *st_mean_avr_dyn + 0.4f * mean_dyn; - - if ( mean_dyn < 9.6f && *cor_strong_limit != 0 ) - { - *cor_strong_limit = 0; - *st_last_sw_dyn = mean_dyn; - } - else if ( ( mean_dyn - *st_last_sw_dyn ) > 4.5f ) - { - *cor_strong_limit = 1; - } - - if ( total_brate < ACELP_9k60 || total_brate > ACELP_16k40 ) - { - *cor_strong_limit = 1; - } - - *st_mean_avr_dyn = mean_dyn; - - /*------------------------------------------------------------------* - * calculation of the correlation map - *------------------------------------------------------------------*/ - - if ( N_mins > 0 ) - { - corx2 = 0; - corxy = 0; - stemp = ind_mins[0]; - ftemp = old_S[stemp]; - cory2 = ftemp * ftemp; - k = 1; - for ( i = stemp + 1; i <= ind_mins[N_mins]; i++ ) - { - if ( i == ind_mins[k] ) - { - /* include the last peak point (new minimum) to the corr. sum */ - ftemp = old_S[i]; - cory2 += ftemp * ftemp; - - /* calculation of the norm. peak correlation */ - if ( ( corx2 == 0 ) || ( cory2 == 0 ) ) - { - cor = 0; - } - else - { - cor = corxy * corxy / ( corx2 * cory2 ); - } - - /* save the norm. peak correlation in the correlation map */ - for ( j = ind_mins[k - 1]; j < ind_mins[k]; j++ ) - { - old_S[j] = S[j]; - S[j] = cor; - } - - corx2 = 0; - cory2 = 0; - corxy = 0; - - k++; - } - - ftemp = S[i]; - ftemp2 = old_S[i]; - corx2 += ftemp * ftemp; - cory2 += ftemp2 * ftemp2; - corxy += ftemp * ftemp2; - } - - mvr2r( S, old_S, ind_mins[0] ); - mvr2r( &S[ind_mins[N_mins]], &old_S[ind_mins[N_mins]], L - ind_mins[N_mins] ); - } - - /*------------------------------------------------------------------* - * updating of the long-term correlation map - * summation of the long-term correlation map - *------------------------------------------------------------------*/ - - cor_strong = 0; - *cor_map_sum = 0; - - for ( i = 0; i < L; i++ ) - { - *cor_map_sum += S[i]; - cor_map_LT[i] = M_ALPHA * cor_map_LT[i] + ( 1 - M_ALPHA ) * S[i]; - if ( cor_map_LT[i] > 0.95f ) - { - cor_strong = 1; - } - } - - /* summation of the LT correlation map */ - cor_map_LT_sum = sum_f( cor_map_LT, L ); - - if ( bwidth == NB ) - { - cor_map_LT_sum *= 1.53f; - *cor_map_sum *= 1.53f; - } - - /* final decision about multi-harmonicity */ - if ( ( cor_map_LT_sum > *multi_harm_limit ) || ( cor_strong == 1 ) ) - { - harm = 1; - } - else - { - harm = 0; - } - - /*------------------------------------------------------------------* - * updating of the decision threshold - *------------------------------------------------------------------*/ - - if ( cor_map_LT_sum > THR_CORR ) - { - *multi_harm_limit -= THR_CORR_STEP; - } - else - { - *multi_harm_limit += THR_CORR_STEP; - } - - if ( *multi_harm_limit > THR_CORR_MAX ) - { - *multi_harm_limit = THR_CORR_MAX; - } - - if ( *multi_harm_limit < THR_CORR_MIN ) - { - *multi_harm_limit = THR_CORR_MIN; - } - - if ( N_mins <= 0 ) - { - set_f( old_S, 0, L ); - } - - if ( S_map != 0 ) - { - mvr2r( S, S_map, L ); - } - - return harm; -} -#endif diff --git a/lib_enc/multi_harm_fx.c b/lib_enc/multi_harm_fx.c index 43e5ff5bb..03b835752 100644 --- a/lib_enc/multi_harm_fx.c +++ b/lib_enc/multi_harm_fx.c @@ -34,362 +34,6 @@ Word16 multi_harm_fx( /* o : frame multi-harmonicity Word16 *sp_floor, /* o: noise floor estimate Q7 */ Word16 S_map[] /* o : short-term correlation map Q7 */ ) -{ - Word16 i, j, k, L, stemp, N_mins, ind_mins[L_FFT / 4], *pt_mins, harm; - Word16 S[L_FFT / 2], flor, step, sign_fx, tmp16, tmp2, ExpInd, tmpdB, ExpdB, Expx2, Expy2; - Word16 corx2, cory2, corxy, cor, cor_map[L_FFT / 2], *pt1, *pt2, cor_strong; - Word32 L_acc; - Word32 Lcorx2, Lcory2, Lcorxy, Lcor_map_LT_sum; - Word16 mean_dyn; -#ifdef BASOP_NOGLOB_DECLARE_LOCAL - Flag Overflow = 0; -#endif - - /*------------------------------------------------------------------* - * initialization - *------------------------------------------------------------------*/ - - /* length of the useful part of the spectrum (up to 6.4kHz) */ - L = L_FFT / 2; - move16(); - if ( EQ_16( bwidth, NB ) ) - { - /* length of the useful part of the spectrum (up to 3.6kHz) */ - L = 76; - move16(); - } - - Copy( Bin_E, S, L ); - - /*------------------------------------------------------------------* - * searching of spectral maxima and minima - *------------------------------------------------------------------*/ - - pt_mins = ind_mins; - move16(); - - /* index of the first minimum */ - if ( LT_16( Bin_E[0], Bin_E[1] ) ) - { - *pt_mins++ = 0; - move16(); - } - - FOR( i = 1; i < L - 1; i++ ) - { - /* minimum found */ - test(); - if ( LT_16( Bin_E[i], Bin_E[i - 1] ) && LT_16( Bin_E[i], Bin_E[i + 1] ) ) - { - *pt_mins++ = i; - move16(); - } - } - - /* index of the last minimum */ - if ( LT_16( Bin_E[L - 1], Bin_E[L - 2] ) ) - { - *pt_mins++ = L - 1; - move16(); - } - - /* total number of minimas found */ - N_mins = (Word16) ( pt_mins - ind_mins - 1 ); - move16(); - - /*------------------------------------------------------------------* - * calculation of the spectral floor - * subtraction of the spectral floor - *------------------------------------------------------------------*/ - - set16_fx( S, 0, L ); - - IF( N_mins > 0 ) - { - L_acc = L_deposit_l( 0 ); - FOR( i = 0; i < N_mins; ++i ) - { - L_acc = L_mac0( L_acc, Bin_E[ind_mins[i]], 1 ); - } - *sp_floor = extract_l( Mult_32_16( L_acc, div_s( 1, N_mins ) ) ); - - set16_fx( S, 0, ind_mins[0] ); - set16_fx( &S[ind_mins[N_mins]], 0, sub( shr( L_FFT, 1 ), ind_mins[N_mins] ) ); - - pt_mins = ind_mins; - move16(); - flor = 0; - move16(); - step = 0; - move16(); - - FOR( i = ind_mins[0]; i < ind_mins[N_mins]; i++ ) - { - /* we are at the end of the next minimum */ - IF( EQ_16( i, *pt_mins ) ) - { - pt_mins++; - flor = Bin_E[i]; - move16(); /*Q7*/ - /* calculate the new step */ - /*step = (Bin_E[*pt_mins] - Bin_E[i]) / (*pt_mins-i);*/ - tmp16 = sub( *pt_mins, i ); - tmpdB = sub( Bin_E[*pt_mins], Bin_E[i] ); - sign_fx = shr( tmpdB, 15 ); /* 0 if positive else -1 */ - ExpdB = sub( norm_s( tmpdB ), 1 ); - tmpdB = abs_s( shl( tmpdB, ExpdB ) ); - ExpInd = norm_s( tmp16 ); - tmp16 = shl( tmp16, ExpInd ); - tmp16 = div_s( tmpdB, tmp16 ); - tmp16 = sub( s_xor( tmp16, sign_fx ), sign_fx ); - step = shr( tmp16, add( sub( ExpdB, ExpInd ), 15 ) ); /* Q7 */ - } - - /* subtract the floor */ - S[i] = s_max( sub_sat( Bin_E[i], flor ), 0 ); - move16(); - - /* update the floor */ - flor = add( flor, step ); /*Q7*/ - } - } - - /* Calculate the maximum dynamic per band */ - /* since we are processing 40 bins we will use 1/40 in Q15 to find the mean */ - /* mean_dyn = mean(&S[L-40], 40);*/ - L_acc = L_deposit_l( 0 ); - FOR( i = L - 40; i < L; i++ ) - { - L_acc = L_mac( L_acc, S[i], 819 ); - } - mean_dyn = round_fx( L_acc ); /*Q7*/ - - /*mean_dyn = 0.6f * *st_mean_avr_dyn + 0.4f * mean_dyn;*/ - L_acc = L_mult( 13107 /*0.4f*/, mean_dyn ); /*Q23*/ - L_acc = L_mac( L_acc, 19661 /*0.6f*/, *st_mean_avr_dyn ); /*Q23*/ - mean_dyn = round_fx( L_acc ); /*Q7*/ - - test(); - IF( LT_16( mean_dyn, 1229 ) /*9.6f*/ && *cor_strong_limit != 0 ) - { - *cor_strong_limit = 0; - move16(); - *st_last_sw_dyn = mean_dyn; - move16(); - } - ELSE IF( GT_16( sub( mean_dyn, *st_last_sw_dyn ), 576 ) /*4.5f*/ ) - { - *cor_strong_limit = 1; - move16(); - } - test(); - if ( LT_32( total_brate, ACELP_9k60 ) || GT_32( total_brate, ACELP_16k40 ) ) - { - *cor_strong_limit = 1; - move16(); - } - - *st_mean_avr_dyn = mean_dyn; - move16(); - - /*------------------------------------------------------------------* - * calculation of the correlation map - *------------------------------------------------------------------*/ - - set16_fx( cor_map, 0, L ); - IF( N_mins > 0 ) - { - Lcorx2 = L_deposit_l( 0 ); - Lcorxy = L_deposit_l( 0 ); - stemp = ind_mins[0]; - move16(); - Lcory2 = L_mult( old_S[stemp], old_S[stemp] ); - k = 1; - move16(); - - FOR( i = add( stemp, 1 ); i <= ind_mins[N_mins]; i++ ) - { - IF( EQ_16( i, ind_mins[k] ) ) - { - /* include the last peak point (new minimum) to the corr. sum */ -#ifdef BASOP_NOGLOB - Lcory2 = L_mac_o( Lcory2, old_S[i], old_S[i], &Overflow ); -#else /* BASOP_NOGLOB */ - Lcory2 = L_mac( Lcory2, old_S[i], old_S[i] ); -#endif /* BASOP_NOGLOB */ - - /* calculation of the norm. peak correlation */ - test(); - IF( Lcorx2 != 0 && Lcory2 != 0 ) - { - /* corxy * corxy*/ - tmp16 = sub( norm_l( Lcorxy ), 1 ); - corxy = extract_h( L_shl( Lcorxy, tmp16 ) ); - corxy = mult_r( corxy, corxy ); - /* (corx2 * cory2) */ - Expx2 = norm_l( Lcorx2 ); - Expy2 = norm_l( Lcory2 ); - corx2 = extract_h( L_shl( Lcorx2, Expx2 ) ); - cory2 = extract_h( L_shl( Lcory2, Expy2 ) ); - corx2 = mult_r( corx2, cory2 ); - Expx2 = add( Expy2, Expx2 ); - /* Validate num < den */ - cor = sub( corx2, corxy ); - cor = shr( cor, 15 ); - /* Add 1 to tmp16 & shr by 2 if corxy > corx2 */ - tmp16 = sub( tmp16, cor ); - corxy = shl( corxy, cor ); - corxy = shl( corxy, cor ); - /* cor = corxy * corxy / (corx2 * cory2) */ - corxy = div_s( corxy, corx2 ); -#ifdef BASOP_NOGLOB - cor = shr_o( corxy, sub( shl( tmp16, 1 ), Expx2 ), &Overflow ); /* Q15 */ -#else /* BASOP_NOGLOB */ - cor = shr( corxy, sub( shl( tmp16, 1 ), Expx2 ) ); /* Q15 */ -#endif /* BASOP_NOGLOB */ - } - ELSE - { - cor = 0; - move16(); - } - - /* save the norm. peak correlation in the correlation map */ - FOR( j = ind_mins[k - 1]; j < ind_mins[k]; j++ ) - { - old_S[j] = S[j]; - move16(); - S[j] = shr( cor, 8 ); - move16(); - cor_map[j] = cor; - move16(); - } - - Lcorx2 = L_deposit_l( 0 ); - Lcory2 = L_deposit_l( 0 ); - Lcorxy = L_deposit_l( 0 ); - - k++; - } -#ifdef BASOP_NOGLOB - Lcorx2 = L_mac_o( Lcorx2, S[i], S[i], &Overflow ); - Lcory2 = L_mac_o( Lcory2, old_S[i], old_S[i], &Overflow ); - Lcorxy = L_mac_o( Lcorxy, S[i], old_S[i], &Overflow ); -#else /* BASOP_NOGLOB */ - Lcorx2 = L_mac( Lcorx2, S[i], S[i] ); - Lcory2 = L_mac( Lcory2, old_S[i], old_S[i] ); - Lcorxy = L_mac( Lcorxy, S[i], old_S[i] ); -#endif - } - - Copy( S, old_S, ind_mins[0] ); - Copy( &S[ind_mins[N_mins]], &old_S[ind_mins[N_mins]], sub( L, ind_mins[N_mins] ) ); - } - ELSE - { - *sp_floor = Bin_E[0]; - move16(); - } - *sp_floor = mult( *sp_floor, 14231 ); - move16(); /* Convert to log10() */ - - /*------------------------------------------------------------------* - * updating of the long-term correlation map - * summation of the long-term correlation map - *------------------------------------------------------------------*/ - - Lcor_map_LT_sum = L_deposit_l( 0 ); - tmp2 = 0; - move16(); - - cor_strong = 0; - move16(); - pt1 = cor_map_LT; - move16(); - pt2 = cor_map; - move16(); - FOR( i = 0; i < L; i++ ) - { - /* tmp2 += S[i]; */ - tmp2 = add( tmp2, shl( S[i], 1 ) ); /* tmp2 in Q8; max value is 128) */ - - /* *pt1 = M_ALPHA_FX * *pt1 + (1-M_ALPHA_FX) * *pt2++ */ - *pt1 = mac_r( L_mult( ONE_MINUS_M_ALPHA, *pt2 ), M_ALPHA_FX, *pt1 ); - move16(); - - /* cor_map_LT_sum += *pt1 */ - Lcor_map_LT_sum = L_add( Lcor_map_LT_sum, *pt1 ); /* cor_map_LT_sum in Q15; max value is 128) */ - - if ( GT_16( *pt1, 31130 ) /*0.95f*/ ) - { - cor_strong = 1; - move16(); - } - - pt1++; - pt2++; - } - - IF( EQ_16( bwidth, NB ) ) - { - /* cor_map_LT_sum *= 1.53f; */ - /* tmp2 *= 1.53f; */ - Lcor_map_LT_sum = L_shl( Mult_32_16( Lcor_map_LT_sum, 25068 ), 1 ); - tmp2 = round_fx( L_mac( L_mult( tmp2, 32767 ), tmp2, 17367 ) ); - } - *cor_map_sum = tmp2; - move16(); - - /* final decision about multi-harmonicity */ - harm = 0; - move16(); - test(); - if ( ( L_msu0( Lcor_map_LT_sum, *multi_harm_limit, 64 ) > 0 ) || ( cor_strong != 0 ) ) - { - harm = 1; - move16(); - } - - /*------------------------------------------------------------------* - * updating of the decision threshold - *------------------------------------------------------------------*/ - - stemp = add( *multi_harm_limit, THR_CORR_STEP_FX ); - if ( GT_32( Lcor_map_LT_sum, THR_CORR_FX ) ) /* Q15 */ - { - /* *multi_harm_limit -= THR_CORR_STEP_FX */ - stemp = sub( *multi_harm_limit, THR_CORR_STEP_FX ); - } - - stemp = s_min( stemp, THR_CORR_MAX_FX ); - *multi_harm_limit = s_max( stemp, THR_CORR_MIN_FX ); - move16(); - - IF( N_mins <= 0 ) - { - set16_fx( old_S, 0, L ); - } - IF( S_map != NULL ) - { - Copy( S, S_map, L ); - } - return harm; -} -#ifdef IVAS_FLOAT_FIXED -Word16 multi_harm_ivas_fx( /* o : frame multi-harmonicity (1-harmonic, 0-not) */ - const Word16 Bin_E[], /* i : log-energy spectrum of the current frame Q7 */ - Word16 old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor Q7 */ - Word16 cor_map_LT[], /* i/o: LT correlation map Q15 */ - Word16 *multi_harm_limit, /* i/o: multi harminic threshold Q9 */ - const Word32 total_brate, /* i : total bitrate Q0 */ - const Word16 bwidth, /* i : input signal bandwidth Q0 */ - Word16 *cor_strong_limit, /* i/o: HF correlation indicator Q0 */ - Word16 *st_mean_avr_dyn, /* i/o: long term average dynamic Q7 */ - Word16 *st_last_sw_dyn, /* i/o: last dynamic Q7 */ - Word16 *cor_map_sum, /* i : sum of correlation map Q8 */ - Word16 *sp_floor, /* o: noise floor estimate Q7 */ - Word16 S_map[] /* o : short-term correlation map Q7 */ -) { Word16 i, j, k, L, stemp, N_mins, ind_mins[L_FFT / 4], *pt_mins, harm; Word16 S[L_FFT / 2], flor, step, sign_fx, tmp16, tmp2, ExpInd, tmpdB, ExpdB, Expx2, Expy2; @@ -474,7 +118,6 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni set16_fx( &S[ind_mins[N_mins]], 0, sub( shr( L_FFT, 1 ), ind_mins[N_mins] ) ); pt_mins = ind_mins; - flor = 0; move16(); step = 0; @@ -517,7 +160,7 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni L_acc = L_deposit_l( 0 ); FOR( i = L - 40; i < L; i++ ) { - L_acc = L_mac( L_acc, S[i], 819 /*1 / 40 * (2 ^ 15)*/ ); + L_acc = L_mac( L_acc, S[i], 819 /* 1 / 40 in Q15 */ ); } mean_dyn = round_fx( L_acc ); /*Q7*/ @@ -626,7 +269,7 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni Lcory2 = L_deposit_l( 0 ); Lcorxy = L_deposit_l( 0 ); - k = add( k, 1 ); + k++; } #ifdef BASOP_NOGLOB Lcorx2 = L_mac_o( Lcorx2, S[i], S[i], &Overflow ); @@ -647,7 +290,7 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni *sp_floor = Bin_E[0]; move16(); } - *sp_floor = mult( *sp_floor, 14231 /*1.0f / logf( 10.0f ) Q15*/ ); + *sp_floor = mult( *sp_floor, 14231 /* 1.0f / logf( 10.0f ) in Q15 */ ); move16(); /* Convert to log10() */ /*------------------------------------------------------------------* @@ -691,8 +334,8 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni { /* cor_map_LT_sum *= 1.53f; */ /* tmp2 *= 1.53f; */ - Lcor_map_LT_sum = L_shl( Mult_32_16( Lcor_map_LT_sum, 25068 /*1.53f Q14*/ ), 1 ); - tmp2 = round_fx( L_mac( L_mult( tmp2, 32767 ), tmp2, 17367 /*0.53 Q15*/ ) ); + Lcor_map_LT_sum = L_shl( Mult_32_16( Lcor_map_LT_sum, 25068 /* 1.53f in Q14 */ ), 1 ); + tmp2 = round_fx( L_mac( L_mult( tmp2, 32767 ), tmp2, 17367 /* 0.53 in Q15 */ ) ); } *cor_map_sum = tmp2; move16(); @@ -732,5 +375,3 @@ Word16 multi_harm_ivas_fx( /* o : frame multi-harmoni } return harm; } - -#endif diff --git a/lib_enc/nelp_enc.c b/lib_enc/nelp_enc.c index 050202c12..d1de09bc7 100644 --- a/lib_enc/nelp_enc.c +++ b/lib_enc/nelp_enc.c @@ -41,406 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * quantize_uvg() - * - * Quantize unvoiced gains - *--------------------------------------------------------------------*/ - -static void quantize_uvg( - float *G, /* i : unvoiced gain */ - int16_t *iG1, /* i : gain 1 index */ - int16_t *iG2, /* i : gain 2 index */ - float *quantG, /* o : quantized gain */ - const int16_t bwidth ) -{ - float G1[2], G2[10]; - int16_t i, j, k; - float mse, mmse; - const float( *UVG1CB )[2] = NULL; - const float( *UVG2CB1 )[5] = NULL; - const float( *UVG2CB2 )[5] = NULL; - - if ( bwidth == NB ) - { - UVG1CB = UVG1CB_NB; - UVG2CB1 = UVG2CB1_NB; - UVG2CB2 = UVG2CB2_NB; - } - else if ( bwidth == WB || bwidth == SWB ) - { - UVG1CB = UVG1CB_WB; - UVG2CB1 = UVG2CB1_WB; - UVG2CB2 = UVG2CB2_WB; - } - - for ( i = 0; i < 2; i++ ) - { - G1[i] = 0; - for ( j = 0; j < 5; j++ ) - { - G1[i] += SQR( G[i * 5 + j] ); - } - G1[i] = (float) log10( sqrt( G1[i] / 5 ) ); - } - - mmse = (float) 1e30; - *iG1 = 0; - - for ( i = 0; i < UVG1_CBSIZE; i++ ) - { - mse = SQR( G1[0] - ( UVG1CB[i][0] ) ) + SQR( G1[1] - ( UVG1CB[i][1] ) ); - if ( mse < mmse ) - { - *iG1 = i; - mmse = mse; - } - } - - G1[0] = (float) pow( 10.0, ( UVG1CB[*iG1][0] ) ); - G1[1] = (float) pow( 10.0, ( UVG1CB[*iG1][1] ) ); - - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < 5; j++ ) - { - G2[i * 5 + j] = G[i * 5 + j] / G1[i]; - } - } - - for ( i = 0; i < 2; i++ ) - { - mmse = (float) 1e30; - iG2[i] = 0; - for ( j = 0; j < UVG2_CBSIZE; j++ ) - { - mse = 0; - for ( k = 0; k < 5; k++ ) - { - if ( i == 0 ) - { - mse += SQR( G2[i * 5 + k] - UVG2CB1[j][k] ); - } - else if ( i == 1 ) - { - mse += SQR( G2[i * 5 + k] - UVG2CB2[j][k] ); - } - } - - if ( mse < mmse ) - { - mmse = mse; - iG2[i] = j; - } - } - } - - mvr2r( G, G2, 10 ); - - dequantize_uvg( *iG1, iG2, quantG, bwidth ); - - return; -} - - -/*-------------------------------------------------------------------* - * nelp_encoder() - * - * NELP encoder - *--------------------------------------------------------------------*/ - -void nelp_encoder( - Encoder_State *st, /* i/o: encoder state */ - float *in, /* i : residual signal */ - float *exc, /* o : NELP quantized excitation signal */ - const int16_t reduce_gains ) -{ - int16_t i, j; - float *ptr = exc; - int16_t lag = 25; /* to cover 25*9 + 31 */ - float Gains[10], gain_fac; - int16_t iG1, iG2[2], fid; - float fdbck, var_dB, tmp; - float E1 = 0, E2, E3, R, EL1 = 0, EH1 = 0, EL2, EH2, RL, RH; - float filtRes[L_FRAME]; - float ptr_tmp[L_FRAME]; - int16_t rf_flag; - - SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - rf_flag = st->rf_mode; - - if ( ( hSC_VBR->last_nelp_mode == 1 ) && ( st->bwidth != st->last_bwidth ) ) - { - hSC_VBR->last_nelp_mode = 0; - } - - if ( st->bwidth == NB ) - { - if ( hSC_VBR->last_nelp_mode != 1 ) - { - set_f( hSC_VBR->bp1_filt_mem_nb, 0, 7 * 2 ); - } - } - else if ( st->bwidth == WB || st->bwidth == SWB ) - { - if ( hSC_VBR->last_nelp_mode != 1 ) - { - set_f( hSC_VBR->bp1_filt_mem_wb, 0, 4 * 2 ); - } - } - - if ( hSC_VBR->last_nelp_mode != 1 ) - { - if ( st->bwidth == WB || st->bwidth == SWB ) - { - set_f( hSC_VBR->shape1_filt_mem, 0, 20 ); - set_f( hSC_VBR->shape2_filt_mem, 0, 20 ); - set_f( hSC_VBR->shape3_filt_mem, 0, 20 ); - set_f( hSC_VBR->txlpf1_filt1_mem, 0, 20 ); - set_f( hSC_VBR->txlpf1_filt2_mem, 0, 20 ); - set_f( hSC_VBR->txhpf1_filt1_mem, 0, 20 ); - set_f( hSC_VBR->txhpf1_filt2_mem, 0, 20 ); - } - } - - /* Start Unvoiced/NELP Processing */ - if ( st->bwidth == WB || st->bwidth == SWB ) - { - for ( i = 0, E1 = 0.001f; i < L_FRAME; i++ ) - { - E1 += SQR( in[i] ); - } - - polezero_filter( in, filtRes, L_FRAME, txlpf1_num_coef, txlpf1_den_coef, 10, hSC_VBR->txlpf1_filt1_mem ); - - for ( i = 0, EL1 = 0.001f; i < L_FRAME; i++ ) - { - EL1 += SQR( filtRes[i] ); - } - - polezero_filter( in, filtRes, L_FRAME, txhpf1_num_coef, txhpf1_den_coef, 10, hSC_VBR->txhpf1_filt1_mem ); - - for ( i = 0, EH1 = 0.001f; i < L_FRAME; i++ ) - { - EH1 += SQR( filtRes[i] ); - } - } - - for ( i = 0; i < 9; i++ ) - { - for ( j = i * lag, Gains[i] = 0.001f; j < ( i + 1 ) * lag; j++ ) - { - Gains[i] += SQR( in[j] ); - } - - Gains[i] = (float) sqrt( Gains[i] / lag ); - } - - for ( j = i * lag, Gains[i] = 0.001f; j < L_FRAME; j++ ) - { - Gains[i] += SQR( in[j] ); - } - - Gains[i] = (float) sqrt( Gains[i] / ( L_FRAME - ( lag * i ) ) ); - - if ( reduce_gains == 1 ) - { - for ( i = 0; i < 10; i++ ) - { - Gains[i] = ( Gains[i] * 0.6f ); - } - } - - if ( hSC_VBR->last_nelp_mode != 1 ) /* if prev frame was not NELP then init mem*/ - { - hSC_VBR->nelp_gain_mem = Gains[0]; - } - - tmp = (float) ( 20.0 * ( log10( Gains[0] ) - log10( hSC_VBR->nelp_gain_mem ) ) ); - var_dB = tmp * tmp; - for ( i = 1; i < 10; i++ ) - { - tmp = (float) ( 20.0 * ( log10( Gains[i] ) - log10( Gains[i - 1] ) ) ); - var_dB += tmp * tmp; - } - - if ( hSC_VBR->last_nelp_mode != 1 ) - { - var_dB *= 0.111f; - } - else - { - var_dB *= 0.1f; - } - - fdbck = (float) ( 0.82f / ( 1.0f + exp( 0.25f * ( var_dB - 20.0f ) ) ) ); - - for ( i = 0; i < 10; i++ ) - { - Gains[i] = (float) ( ( 1.0f - fdbck ) * Gains[i] + fdbck * hSC_VBR->nelp_gain_mem ); - hSC_VBR->nelp_gain_mem = Gains[i]; - } - - quantize_uvg( Gains, &iG1, iG2, Gains, (int16_t) st->bwidth ); - - if ( rf_flag ) - { - st->hRF->rf_indx_nelp_iG1[0] = (int16_t) iG1; - st->hRF->rf_indx_nelp_iG2[0][0] = (int16_t) iG2[0]; - st->hRF->rf_indx_nelp_iG2[0][1] = (int16_t) iG2[1]; - } - else - { - push_indice( hBstr, IND_IG1, iG1, 5 ); - push_indice( hBstr, IND_IG2A, iG2[0], 6 ); - push_indice( hBstr, IND_IG2B, iG2[1], 6 ); - } - - if ( st->bwidth == WB || st->bwidth == SWB ) - { - gain_fac = 1.16f; - } - else - { - gain_fac = 1.37f; - } - - generate_nelp_excitation( &( hSC_VBR->nelp_enc_seed ), Gains, ptr, gain_fac ); - - if ( st->bwidth == WB || st->bwidth == SWB ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_wb, bp1_den_coef_wb, 4, hSC_VBR->bp1_filt_mem_wb ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - } - else if ( st->bwidth == NB ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, bp1_num_coef_nb_fx_order7_flt, bp1_den_coef_nb_fx_order7_flt, 7, hSC_VBR->bp1_filt_mem_nb ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - } - - for ( i = 0, E3 = 0.001f; i < L_FRAME; i++ ) - { - E3 += SQR( ptr[i] ); - } - - if ( st->bwidth == WB || st->bwidth == SWB ) - { - polezero_filter( ptr, ptr_tmp, L_FRAME, shape1_num_coef, shape1_den_coef, 10, hSC_VBR->shape1_filt_mem ); - mvr2r( ptr_tmp, ptr, L_FRAME ); - - for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) - { - E2 += SQR( ptr[i] ); - } - - R = (float) sqrt( E1 / E2 ); - - for ( i = 0; i < L_FRAME; i++ ) - { - filtRes[i] = R * ptr[i]; - } - - polezero_filter( filtRes, ptr_tmp, L_FRAME, txlpf1_num_coef, txlpf1_den_coef, 10, hSC_VBR->txlpf1_filt2_mem ); - mvr2r( ptr_tmp, filtRes, L_FRAME ); - - for ( i = 0, EL2 = 0.001f; i < L_FRAME; i++ ) - { - EL2 += SQR( filtRes[i] ); - } - - for ( i = 0; i < L_FRAME; i++ ) - { - filtRes[i] = R * ptr[i]; - } - - polezero_filter( filtRes, ptr_tmp, L_FRAME, txhpf1_num_coef, txhpf1_den_coef, 10, hSC_VBR->txhpf1_filt2_mem ); - mvr2r( ptr_tmp, filtRes, L_FRAME ); - - for ( i = 0, EH2 = 0.001f; i < L_FRAME; i++ ) - { - EH2 += SQR( filtRes[i] ); - } - - RL = (float) 10.0f * (float) log10( EL1 / EL2 ); - RH = (float) 10.0f * (float) log10( EH1 / EH2 ); - - fid = 0; - if ( RL < -3 ) - { - fid = 1; - } - else if ( RH < -3 ) - { - fid = 2; - } - - if ( rf_flag == 0 ) - { - - switch ( fid ) - { - case 1: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); - - /* filter the residual to desired shape */ - polezero_filter( ptr, ptr_tmp, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); - - mvr2r( ptr_tmp, ptr, L_FRAME ); - - break; - case 2: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); - - /* filter the residual to desired shape */ - polezero_filter( ptr, ptr_tmp, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); - - mvr2r( ptr_tmp, ptr, L_FRAME ); - - break; - default: - /* Update other filter memory */ - polezero_filter( ptr, filtRes, L_FRAME, shape2_num_coef, shape2_den_coef, 10, hSC_VBR->shape2_filt_mem ); - polezero_filter( ptr, filtRes, L_FRAME, shape3_num_coef, shape3_den_coef, 10, hSC_VBR->shape3_filt_mem ); - - break; - } - - for ( i = 0, E2 = 0.001f; i < L_FRAME; i++ ) - { - E2 += SQR( ptr[i] ); - } - - R = (float) sqrt( E3 / E2 ); - for ( i = 0; i < L_FRAME; i++ ) - { - ptr[i] *= R; - } - } - - if ( rf_flag ) - { - st->hRF->rf_indx_nelp_fid[0] = (int16_t) fid; - } - else - { - push_indice( hBstr, IND_NELP_FID, fid, 2 ); - } - } - - if ( rf_flag == 0 ) - { - for ( i = 0; i < L_FRAME; i++ ) - { - exc[i] = ptr[i]; - } - } - - return; -} -#endif diff --git a/lib_enc/nois_est.c b/lib_enc/nois_est.c index e0d629b49..370e0aeef 100644 --- a/lib_enc/nois_est.c +++ b/lib_enc/nois_est.c @@ -44,963 +44,3 @@ /*-----------------------------------------------------------------* * Local constants *-----------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -#define ALPHA 0.1f - -#define COR_MIN8 0.65f -#define COR_MAX8 0.7f -#define TH_PC8 14 -#define TH_EPS8 10.4f -#define TH_STA8 5.0e5f -#define K_8 0.0091f -#define C_8 0.3185f -#define ALPHA_MAX8 0.999f -#define THR_NCHAR8 1.0f - -#define COR_MIN16 0.52f -#define COR_MAX16 0.85f -#define TH_PC16 4 -#define TH_EPS16 1.6f -/* 10.0e5f causes problems with music - as the noise estimate starts to track the music */ -#define TH_STA16 3.5e5f -#define K_16 0.0245f -#define C_16 -0.235f -#define ALPHA_MAX16 0.99f -#define THR_NCHAR16 1.0f - -#define TH_PC 12 -#define TH_PRED 0.8f -#define THR_SPDIV 5 - -#define HC_CNT 20 /* limit for harm corr count */ -#define HC_CNT_SLOW 80 /* limit for harm corr count slow */ -#define BCKR_SLOW_UPDATE_SCALE 0.1f /* step size for slow bckr update */ - -#define HE_LT_THR1 10.0f -#define HE_LT_THR2 30.0f -#define HE_LT_CNT 30 - -/*-----------------------------------------------------------------* - * noise_est_init() - * - * Initialization of Noise estimator - *-----------------------------------------------------------------*/ -void noise_est_init( - NOISE_EST_HANDLE hNoiseEst /* i/o: Noise estimation handle */ -) -{ - int16_t i; - - for ( i = 0; i < NB_BANDS; i++ ) - { - hNoiseEst->fr_bands1[i] = 1e-5f; - hNoiseEst->fr_bands2[i] = 1e-5f; - hNoiseEst->ave_enr2[i] = E_MIN; - - hNoiseEst->enrO[i] = E_MIN; - hNoiseEst->bckr[i] = E_MIN; - hNoiseEst->ave_enr[i] = E_MIN; - } - hNoiseEst->totalNoise = 0.0f; - - hNoiseEst->first_noise_updt = 0; - hNoiseEst->first_noise_updt_cnt = 0; - - hNoiseEst->aEn = 6; - hNoiseEst->aEn_inac_cnt = 0; - hNoiseEst->harm_cor_cnt = 0; - hNoiseEst->bg_cnt = 0; - hNoiseEst->lt_tn_track = 0.20f; - hNoiseEst->lt_tn_dist = 0.0f; - hNoiseEst->lt_Ellp_dist = 0.0f; - hNoiseEst->lt_haco_ev = 0.4f; - hNoiseEst->low_tn_track_cnt = 0; - - hNoiseEst->Etot_st_est = 20.0f; - hNoiseEst->Etot_sq_st_est = 400.0f; - - hNoiseEst->epsP_0_2_lp = 1.0f; - hNoiseEst->epsP_0_2_ad_lp = 0.0f; - hNoiseEst->epsP_2_16_lp = 1.0f; - hNoiseEst->epsP_2_16_lp2 = 1.0f; - hNoiseEst->epsP_2_16_dlp_lp = 0.0f; - hNoiseEst->epsP_2_16_dlp_lp2 = 0.0f; - hNoiseEst->lt_aEn_zero = 0.0f; - - /* Tonal detector */ - for ( i = 0; i < L_FFT / 2; i++ ) - { - hNoiseEst->old_S[i] = 1; - } - set_f( hNoiseEst->cor_map, 0, L_FFT / 2 ); - hNoiseEst->act_pred = 1; - hNoiseEst->noise_char = 0; - hNoiseEst->multi_harm_limit = THR_CORR; - - hNoiseEst->Etot_lp = 0.0f; - hNoiseEst->Etot_h = 0.0f; - hNoiseEst->Etot_l = 0.0f; - hNoiseEst->Etot_l_lp = 0.0f; - hNoiseEst->Etot_last = 0.0f; - hNoiseEst->Etot_v_h2 = 0.0f; - hNoiseEst->sign_dyn_lp = 0.0f; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * noise_est_pre() - * - * Track energy and signal dynamics - *-----------------------------------------------------------------*/ - -void noise_est_pre( - const float Etot, /* i : Energy of current frame */ - const int16_t ini_frame, /* i : Frame number (init) */ - NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation data handle*/ - const int16_t idchan, /* i : channel ID */ - const int16_t element_mode, /* i : element mode */ - const int16_t last_element_mode /* i : last element mode */ -) -{ - if ( ini_frame <= 1 || ( idchan == 1 && element_mode == IVAS_CPE_TD && last_element_mode == IVAS_CPE_DFT ) ) - { - hNoiseEst->Etot_lp = Etot; - hNoiseEst->Etot_h = Etot; - hNoiseEst->Etot_l = Etot; - hNoiseEst->Etot_l_lp = Etot; - hNoiseEst->Etot_last = Etot; - hNoiseEst->Etot_v_h2 = 0.0f; - hNoiseEst->sign_dyn_lp = 0.0f; - } - else - { - hNoiseEst->Etot_lp = 0.20f * Etot + 0.80f * hNoiseEst->Etot_lp; - hNoiseEst->Etot_h -= 0.04f; - if ( Etot > hNoiseEst->Etot_h ) - { - hNoiseEst->Etot_h = Etot; - } - hNoiseEst->Etot_l += 0.08f; - - /* Could even be higher but it also delays first entry to DTX */ - if ( hNoiseEst->harm_cor_cnt > 50 ) - { - if ( ini_frame < min( 150, MAX_FRAME_COUNTER - 1 ) && ( hNoiseEst->Etot_h - hNoiseEst->Etot_lp ) < 3.0f ) - { - hNoiseEst->Etot_l += min( 2, ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) * 0.1f ); - } - - /* Avoids large steps in short active segments */ - if ( hNoiseEst->Etot_last - hNoiseEst->Etot_l > HE_LT_THR2 && hNoiseEst->harm_cor_cnt > 250 ) - { - hNoiseEst->Etot_l += ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) * 0.02f; - } - else if ( ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) > HE_LT_THR1 ) - { - hNoiseEst->Etot_l += 0.08f; - } - } - - if ( Etot < hNoiseEst->Etot_l ) - { - hNoiseEst->Etot_l = Etot; - } - - if ( ini_frame < 100 && hNoiseEst->Etot_l < hNoiseEst->Etot_l_lp ) - { - hNoiseEst->Etot_l_lp = 0.1f * hNoiseEst->Etot_l + ( 1.0f - 0.1f ) * hNoiseEst->Etot_l_lp; - } - else if ( ( hNoiseEst->harm_cor_cnt > HE_LT_CNT && ( hNoiseEst->Etot_last - hNoiseEst->Etot_l ) > HE_LT_THR2 ) || ( hNoiseEst->harm_cor_cnt > HE_LT_CNT && ( ini_frame < 150 ) ) || ( ( hNoiseEst->Etot_l_lp - hNoiseEst->Etot_l ) > HE_LT_THR2 ) ) - { - hNoiseEst->Etot_l_lp = 0.03f * hNoiseEst->Etot_l + ( 1.0f - 0.03f ) * hNoiseEst->Etot_l_lp; - } - else - { - hNoiseEst->Etot_l_lp = 0.02f * hNoiseEst->Etot_l + ( 1.0f - 0.02f ) * hNoiseEst->Etot_l_lp; - } - - hNoiseEst->sign_dyn_lp = 0.1f * ( hNoiseEst->Etot_h - hNoiseEst->Etot_l ) + ( 1.0f - 0.1f ) * hNoiseEst->sign_dyn_lp; - } - - return; -} - - -/*-----------------------------------------------------------------* - * noise_est_down() - * - * Down-ward noise updatation routine - * Total Noise computation, relative frame Energy computation - * Noise energy update - here, the energy is updated only if it is - * decreasing to improve noise suppression. Otherwise, the noise - * update is done on noise-only frames and this decision is made in - * nois_est() later in this file. - *-----------------------------------------------------------------*/ - -void noise_est_down( - const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ - float bckr[], /* i/o: per band background noise energy estimate */ - float tmpN[], /* o : temporary noise update */ - float enr[], /* o : averaged energy over both subframes */ - const int16_t min_band, /* i : minimum critical band */ - const int16_t max_band, /* i : maximum critical band */ - float *totalNoise, /* o : noise estimate over all critical bands */ - const float Etot, /* i : Energy of current frame */ - float *Etot_last, /* i/o: Energy of last frame */ - float *Etot_v_h2 /* i/o: Energy variaions of noise frames */ -) -{ - const float *pt1, *pt2; - int16_t i; - float Etot_v; - - /*-----------------------------------------------------------------* - * Estimate total noise energy - *-----------------------------------------------------------------*/ - - *totalNoise = 0.0f; - for ( i = min_band; i <= max_band; i++ ) - { - *totalNoise += bckr[i]; - } - *totalNoise = 10.0f * (float) log10( *totalNoise ); - - /*-----------------------------------------------------------------* - * Average energy per frame for each frequency band - *-----------------------------------------------------------------*/ - - pt1 = fr_bands; - pt2 = fr_bands + NB_BANDS; - - for ( i = 0; i < NB_BANDS; i++ ) - { - enr[i] = 0.5f * ( *pt1++ + *pt2++ ); - } - - /*-----------------------------------------------------------------* - * Background noise energy update - *-----------------------------------------------------------------*/ - - for ( i = 0; i < NB_BANDS; i++ ) - { - tmpN[i] = ( 1 - ALPHA ) * bckr[i] + ALPHA * enr[i]; - if ( tmpN[i] < bckr[i] ) - { - bckr[i] = tmpN[i]; /* Defend to increase noise estimate: keep as it is or decrease */ - } - } - - /*------------------------------------------------------------------* - * Energy variation update - *------------------------------------------------------------------*/ - - Etot_v = (float) fabs( *Etot_last - Etot ); - - *Etot_v_h2 = ( 1.0f - 0.02f ) * *Etot_v_h2 + 0.02f * min( 3.0f, Etot_v ); - if ( *Etot_v_h2 < 0.1f ) - { - *Etot_v_h2 = 0.1f; - } - - return; -} - - -/*-----------------------------------------------------------------* - * noise_est() - * - * Noise energy estimation (noise energy is updated in case of noise-only frame) - *-----------------------------------------------------------------*/ - -void noise_est( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ - const float tmpN[], /* i : temporary noise update */ - const float *epsP, /* i : LP prediction error energies */ - const float Etot, /* i : total channel E */ - const float relE, /* i : relative frame energy */ - const float corr_shift, /* i : normalized correlation correction */ - const float enr[], /* i : averaged energy over both subframes */ - float fr_bands[], /* i : spectrum per critical bands of the current frame*/ - float *cor_map_sum, /* o : sum of correlation map from mult-harm analysis */ - float *ncharX, /* o : noise character for sp/mus classifier */ - float *sp_div, /* o : spectral diversity feature */ - float *non_staX, /* o : non-stationarity for sp/mus classifier */ - int16_t *loc_harm, /* o : multi-harmonicity flag for UV classifier */ - const float *lf_E, /* i : per bin energy for low frequencies */ - int16_t *st_harm_cor_cnt, /* i/o: 1st harm correlation timer */ - const float Etot_l_lp, /* i : Smoothed low energy */ - float *sp_floor, /* o : noise floor estimate */ - float S_map[], /* o : short-term correlation map */ - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ - FRONT_VAD_ENC_HANDLE hFrontVad, /* i/o: front-VAD handle */ - const int16_t ini_frame /* i : Frame number (init) */ -) -{ - int16_t i, tmp_pc, pc, spec_div, noise_char; - float alpha, th_eps, th_sta, non_sta, cor_min, cor_max; - float non_sta2, alpha2, sum_num, sum_den, *pt1, *pt2, ftemp, ftemp2, nchar_thr; - float updt_step, log_enr; - int16_t aE_bgd, sd1_bgd, bg_bgd2; - int16_t tn_ini; - float epsP_0_2, epsP_0_2_ad, epsP_0_2_ad_lp_max; - float epsP_2_16, epsP_2_16_dlp, epsP_2_16_dlp_max; - int16_t PAU, BG_1, NEW_POS_BG; - float haco_ev_max; - float Etot_l_lp_thr; - float comb_ahc_epsP, comb_hcm_epsP; - int16_t enr_bgd, cns_bgd, lp_bgd, ns_mask; - int16_t lt_haco_mask, bg_haco_mask; - int16_t SD_1, bg_bgd3, PD_1, PD_2, PD_3, PD_4, PD_5; - float tmp_enr, tmp_ave, tmp_ave2; - float non_staB; - float lim_Etot; - NOISE_EST_HANDLE hNoiseEst; - - /* Check if LR-VAD */ - if ( hFrontVad != NULL ) - { - hNoiseEst = hFrontVad->hNoiseEst; - } - else - { - hNoiseEst = st->hNoiseEst; - } - - /*-----------------------------------------------------------------* - * Initialization - *-----------------------------------------------------------------*/ - - if ( hFrontVad == NULL ) - { - if ( st->hSpMusClas != NULL ) - { - float E; - - E = mean( lf_E, 8 ); - if ( E < 1.0f ) - { - st->hSpMusClas->ener_RAT = 0.f; - } - else - { - st->hSpMusClas->ener_RAT = 10.0f * (float) log10( E ); - st->hSpMusClas->ener_RAT /= ( Etot + 0.01f ); - } - - if ( st->hSpMusClas->ener_RAT > 1.0 ) - { - st->hSpMusClas->ener_RAT = 1.0f; - } - } - } - - /*-----------------------------------------------------------------* - * Set the threshold for eps & non_sta based on input sampling rate - * The reason is that in case of 8kHz sampling input, there is nothing - * between 4kHz-6.4kHz. In noisy conditions, this makes a fast - * transition even in noise-only parts, hence producing a "higher - * order" spectral envelope => the epsP ratio is much less effective. - *-----------------------------------------------------------------*/ - - if ( st->input_bwidth != NB ) - { - /* WB input */ - th_eps = TH_EPS16; - th_sta = TH_STA16; - cor_min = COR_MIN16; - cor_max = COR_MAX16; - } - else - { - /* NB input */ - th_eps = TH_EPS8; - th_sta = TH_STA8; - cor_min = COR_MIN8; - cor_max = COR_MAX8; - } - - /*-----------------------------------------------------------------* - * Estimation of pitch stationarity - *-----------------------------------------------------------------*/ - - pc = (int16_t) ( abs( st->pitch[0] - old_pitch1 ) + abs( st->pitch[1] - st->pitch[0] ) ); - - if ( ( ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f + corr_shift ) < cor_min ) - { - /* low correlation -> probably inactive signal */ - tmp_pc = TH_PC; - } - else - { - tmp_pc = pc; - } - - /*-----------------------------------------------------------------* - * Multi-harmonic analysis - *-----------------------------------------------------------------*/ - - if ( hFrontVad == NULL ) - { - if ( st->hSpMusClas != NULL ) - { - i = 0; - *loc_harm = multi_harm( st->Bin_E, hNoiseEst->old_S, hNoiseEst->cor_map, &hNoiseEst->multi_harm_limit, st->total_brate, st->bwidth, ( st->hGSCEnc != NULL ) ? &st->hGSCEnc->cor_strong_limit : &i, &st->hSpMusClas->mean_avr_dyn, &st->hSpMusClas->last_sw_dyn, cor_map_sum, sp_floor, S_map ); - } - } - - /*-----------------------------------------------------------------* - * Detection of frames with non-stationary spectral content - *-----------------------------------------------------------------*/ - - /* weighted sum of spectral changes per critical bands */ - sum_num = 0; - sum_den = 0; - - pt1 = fr_bands + 10; - pt2 = hNoiseEst->fr_bands2 + 10; - for ( i = 10; i <= st->max_band; i++ ) - { - if ( *pt1 > *pt2 ) - { - sum_num += *pt1 * *pt1 / *pt2; - sum_den += *pt1; - } - else - { - sum_num += *pt2 * *pt2 / *pt1; - sum_den += *pt2; - } - - pt1++; - pt2++; - } - - /* calculation of spectral diversity */ - if ( sum_num > THR_SPDIV * sum_den ) - { - spec_div = 1; - } - else - { - spec_div = 0; - } - - *sp_div = sum_num / ( sum_den + 1e-5f ); - - /*-----------------------------------------------------------------* - * Detection of frames with high energy content in high frequencies - *-----------------------------------------------------------------*/ - - /* calculation of energy in first 10 critical bands */ - ftemp = sum_f( &fr_bands[st->min_band], 10 - st->min_band ); - - /* calculation of energy in the rest of bands */ - ftemp2 = sum_f( &fr_bands[10], st->max_band - 10 + 1 ); - - if ( ncharX != NULL ) - { - *ncharX = ftemp2 / ( ftemp + 1e-5f ); - } - - if ( ftemp < 1e2 || ftemp2 < 1e2 ) - { - ftemp2 = 0; - } - else - { - ftemp2 /= ftemp; - } -#ifndef IVAS_FLOAT_FIXED - if ( hStereoClassif != NULL ) - { - if ( st->idchan == 0 ) - { - hStereoClassif->nchar_ch1 = ftemp2; - } - else - { - hStereoClassif->nchar_ch2 = ftemp2; - } - } -#endif - if ( ftemp2 > 10 ) - { - ftemp2 = 10; - } - - /* update LT value of the final parameter */ - hNoiseEst->noise_char = M_ALPHA * hNoiseEst->noise_char + ( 1 - M_ALPHA ) * ftemp2; - - if ( st->input_bwidth == NB ) - { - nchar_thr = THR_NCHAR8; - } - else - { - nchar_thr = THR_NCHAR16; - } - - if ( hNoiseEst->noise_char > nchar_thr ) - { - noise_char = 1; - } - else - { - noise_char = 0; - } - - /* save the 2 last spectra per crit. bands for the future */ - mvr2r( hNoiseEst->fr_bands1, hNoiseEst->fr_bands2, NB_BANDS ); - mvr2r( fr_bands + NB_BANDS, hNoiseEst->fr_bands1, NB_BANDS ); - - /*-----------------------------------------------------------------* - * Non-stationarity estimation for each band (handicap high E frames in average computing) - *-----------------------------------------------------------------*/ - - /* set averaging factor */ - ftemp = relE; - if ( ftemp < 0.0f ) - { - ftemp = 0.0f; - } - - alpha = 0.064f * ftemp + 0.75f; - - if ( alpha > 0.999f ) - { - alpha = 0.999f; - } - - /* during significant attacks, replace LT energy by the */ - /* current energy - this will cause non_sta2 failures to occur in */ - /* different frames than non_sta failures */ - alpha2 = alpha; - if ( spec_div > 0 ) - { - alpha2 = 0.0f; - } - - /* calculate non-stationarity */ - non_sta = 1.0f; - non_sta2 = 1.0f; - *non_staX = 0.0f; - non_staB = 0.0f; - for ( i = st->min_band; i <= st->max_band; i++ ) - { - /* + 1.0f added to reduce sencitivity to non stationarity in low energies */ - tmp_enr = enr[i] + 1.0f; - if ( non_sta <= th_sta ) /* Just to limit the saturation */ - { - tmp_ave = hNoiseEst->ave_enr[i] + 1.0f; - if ( tmp_enr > tmp_ave ) - { - non_sta = non_sta * ( tmp_enr / tmp_ave ); /* non_stationarity measure */ - } - else - { - non_sta = non_sta * ( tmp_ave / tmp_enr ); /* non_stationarity measure */ - } - } - hNoiseEst->ave_enr[i] = alpha * hNoiseEst->ave_enr[i] + ( 1 - alpha ) * enr[i]; /* update long-term average */ - - /* calculation of another non-stationarity measure (following attacks) */ - if ( non_sta2 <= th_sta ) - { - tmp_ave2 = hNoiseEst->ave_enr2[i] + 1.0f; - if ( tmp_enr > tmp_ave2 ) - { - non_sta2 = non_sta2 * ( tmp_enr / tmp_ave2 ); - } - else - { - non_sta2 = non_sta2 * ( tmp_ave2 / tmp_enr ); - } - } - - hNoiseEst->ave_enr2[i] = alpha2 * hNoiseEst->ave_enr2[i] + ( 1 - alpha2 ) * enr[i]; - - /* calculate non-stationarity feature for speech/music classifier */ - if ( hFrontVad == NULL ) - { - if ( i >= START_BAND_SPMUS && i < NB_BANDS_SPMUS + START_BAND_SPMUS && st->hSpMusClas != NULL ) - { - log_enr = (float) log( enr[i] + EPSILON ); - if ( log_enr > st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] ) - { - *non_staX += log_enr - st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS]; - } - else - { - *non_staX += st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] - log_enr; - } - - st->hSpMusClas->past_log_enr[i - START_BAND_SPMUS] = log_enr; - } - } - - /* calculate non-stationarity feature relative background */ - if ( ini_frame < 100 ) - { - /* During init don't include updates */ - if ( i >= 2 && i <= 16 ) - { - non_staB += (float) fabs( log( enr[i] + 1.0f ) - log( E_MIN + 1.0f ) ); - } - } - else - { - /* After init compare with background estimate */ - if ( i >= 2 && i <= 16 ) - { - non_staB += (float) fabs( log( enr[i] + 1.0f ) - log( hNoiseEst->bckr[i] + 1.0f ) ); - } - } - - if ( non_staB >= 128 ) - { - non_staB = MAX16B_FLT / 256.0f; - } - } - - if ( Etot < -5.0f ) - { - non_sta = 1.0f; - non_sta2 = 1.0f; - } - - lim_Etot = max( 20.0f, Etot ); - - if ( ini_frame < 150 ) - { - /* Allow use of quicker filter during init - if needed */ - hNoiseEst->Etot_st_est = 0.25f * lim_Etot + ( 1.0f - 0.25F ) * hNoiseEst->Etot_st_est; - hNoiseEst->Etot_sq_st_est = 0.25f * lim_Etot * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_sq_st_est; - } - else - { - hNoiseEst->Etot_st_est = 0.25f * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_st_est; - hNoiseEst->Etot_sq_st_est = 0.25f * lim_Etot * lim_Etot + ( 1.0f - 0.25f ) * hNoiseEst->Etot_sq_st_est; - } - - /*-----------------------------------------------------------------* - * Count frames since last correlation or harmonic event - *-----------------------------------------------------------------*/ - - if ( Etot > 0 && ( *loc_harm > 0 || 0.5f * ( st->voicing[0] + st->voicing[1] ) > 0.85f ) ) - { - hNoiseEst->harm_cor_cnt = 0; - } - else - { - hNoiseEst->harm_cor_cnt += 1; - } - - if ( hNoiseEst->harm_cor_cnt > 1 && ( ( Etot < 15.0f ) || ( ini_frame > 10 && ( Etot - hNoiseEst->Etot_lp ) > 7.0f ) ) ) - { - hNoiseEst->harm_cor_cnt = 1; - } - - if ( hNoiseEst->harm_cor_cnt > 1 && Etot > 30.0f && ( hNoiseEst->Etot_sq_st_est - hNoiseEst->Etot_st_est * hNoiseEst->Etot_st_est ) > 8.0f ) - { - hNoiseEst->harm_cor_cnt = max( 1, (int16_t) round_f( (float) hNoiseEst->harm_cor_cnt / 4.0f ) ); - } - - /*-----------------------------------------------------------------* - * Energy-based pause-length counter - *-----------------------------------------------------------------*/ - - if ( hNoiseEst->bg_cnt >= 0 && ( Etot - hNoiseEst->Etot_l_lp ) > 5 ) - { - /* probably speech burst */ - hNoiseEst->bg_cnt = -1; - } - else - { - if ( hNoiseEst->bg_cnt == -1 && ( Etot - hNoiseEst->Etot_l_lp ) < 5 ) - { - /* probably start of speech pause */ - hNoiseEst->bg_cnt = 0; - } - } - - if ( hNoiseEst->bg_cnt >= 0 ) - { - hNoiseEst->bg_cnt += 1; - } - - /*-----------------------------------------------------------------* - * Linear predition efficiency 0 to 2 order - *-----------------------------------------------------------------*/ - - epsP_0_2 = max( 0, min( 8, epsP[0] / epsP[2] ) ); - hNoiseEst->epsP_0_2_lp = 0.15f * epsP_0_2 + ( 1.0f - 0.15f ) * hNoiseEst->epsP_0_2_lp; - epsP_0_2_ad = (float) fabs( epsP_0_2 - hNoiseEst->epsP_0_2_lp ); - if ( epsP_0_2_ad < hNoiseEst->epsP_0_2_ad_lp ) - { - hNoiseEst->epsP_0_2_ad_lp = 0.1f * epsP_0_2_ad + ( 1.0f - 0.1f ) * hNoiseEst->epsP_0_2_ad_lp; - } - else - { - hNoiseEst->epsP_0_2_ad_lp = 0.2f * epsP_0_2_ad + ( 1.0f - 0.2f ) * hNoiseEst->epsP_0_2_ad_lp; - } - epsP_0_2_ad_lp_max = max( epsP_0_2_ad, hNoiseEst->epsP_0_2_ad_lp ); - - /*-----------------------------------------------------------------* - * Linear predition efficiency 2 to 16 order - *-----------------------------------------------------------------*/ - - epsP_2_16 = max( 0, min( 8, epsP[2] / epsP[16] ) ); - if ( epsP_2_16 > hNoiseEst->epsP_2_16_lp ) - { - hNoiseEst->epsP_2_16_lp = 0.2f * epsP_2_16 + ( 1.0f - 0.2f ) * hNoiseEst->epsP_2_16_lp; - } - else - { - hNoiseEst->epsP_2_16_lp = 0.03f * epsP_2_16 + ( 1.0f - 0.03f ) * hNoiseEst->epsP_2_16_lp; - } - hNoiseEst->epsP_2_16_lp2 = 0.02f * epsP_2_16 + ( 1.0f - 0.02f ) * hNoiseEst->epsP_2_16_lp2; - - epsP_2_16_dlp = hNoiseEst->epsP_2_16_lp - hNoiseEst->epsP_2_16_lp2; - - if ( epsP_2_16_dlp < hNoiseEst->epsP_2_16_dlp_lp2 ) - { - hNoiseEst->epsP_2_16_dlp_lp2 = 0.02f * epsP_2_16_dlp + ( 1.0f - 0.02f ) * hNoiseEst->epsP_2_16_dlp_lp2; - } - else - { - hNoiseEst->epsP_2_16_dlp_lp2 = 0.05f * epsP_2_16_dlp + ( 1.0f - 0.05f ) * hNoiseEst->epsP_2_16_dlp_lp2; - } - - epsP_2_16_dlp_max = max( epsP_2_16_dlp, hNoiseEst->epsP_2_16_dlp_lp2 ); - - /*-----------------------------------------------------------------* - * long term extensions of frame features - *-----------------------------------------------------------------*/ - - hNoiseEst->lt_tn_track = 0.03f * ( Etot - hNoiseEst->totalNoise < 10 ) + 0.97f * hNoiseEst->lt_tn_track; - hNoiseEst->lt_tn_dist = 0.03f * ( Etot - hNoiseEst->totalNoise ) + 0.97f * hNoiseEst->lt_tn_dist; - hNoiseEst->lt_Ellp_dist = 0.03f * ( Etot - hNoiseEst->Etot_l_lp ) + 0.97f * hNoiseEst->lt_Ellp_dist; - - if ( hNoiseEst->harm_cor_cnt == 0 ) - { - hNoiseEst->lt_haco_ev = 0.03f + 0.97f * hNoiseEst->lt_haco_ev; - } - else - { - hNoiseEst->lt_haco_ev = 0.99f * hNoiseEst->lt_haco_ev; - } - - if ( hNoiseEst->lt_tn_track < 0.05f ) - { - hNoiseEst->low_tn_track_cnt++; - } - else - { - hNoiseEst->low_tn_track_cnt = 0; - } - - - /* update of the long-term non-stationarity measure (between 0 and 1) */ - if ( ( non_sta > th_sta ) || ( *loc_harm > 0 ) ) - { - hNoiseEst->act_pred = M_GAMMA * hNoiseEst->act_pred + ( 1 - M_GAMMA ) * 1; - } - else - { - hNoiseEst->act_pred = M_GAMMA * hNoiseEst->act_pred + ( 1 - M_GAMMA ) * 0; - } - - /*-----------------------------------------------------------------* - * Increment/decrement counter for enabling background noise update - *-----------------------------------------------------------------*/ - - if ( ( ( *st_harm_cor_cnt < 3 * HC_CNT_SLOW ) && ( ( non_sta > th_sta ) || - ( tmp_pc < TH_PC ) || - ( noise_char > 0 ) ) ) || - ( ( ini_frame > 150 ) && ( Etot - Etot_l_lp ) > 10 ) || - ( 0.5f * ( st->voicing[0] + st->voicing[1] ) > cor_max ) || - ( epsP[2] / epsP[16] > th_eps ) || - ( *loc_harm > 0 ) || - ( ( hNoiseEst->act_pred > 0.8f ) && ( non_sta2 > th_sta ) ) ) - - { - /* active signal present - increment counter */ - hNoiseEst->aEn = hNoiseEst->aEn + 2; - } - else - { - /* background noise present - decrement counter */ - hNoiseEst->aEn = hNoiseEst->aEn - 1; - } - - if ( hNoiseEst->aEn > 6 ) - { - hNoiseEst->aEn = 6; - } - else if ( hNoiseEst->aEn < 0 ) - { - hNoiseEst->aEn = 0; - } - - if ( hNoiseEst->aEn <= 1 ) - { - hNoiseEst->aEn_inac_cnt++; - hNoiseEst->aEn_inac_cnt = min( hNoiseEst->aEn_inac_cnt, 128 ); - } - - /*-----------------------------------------------------------------* - * Stereo classifier - save raw aEn - *-----------------------------------------------------------------*/ - - if ( hStereoClassif != NULL ) - { - if ( ( non_sta > th_sta ) || - ( tmp_pc < TH_PC ) || - ( 0.5f * ( st->voicing[0] + st->voicing[1] ) > cor_max ) || - ( epsP[2] / epsP[16] > th_eps ) || - ( ( hNoiseEst->act_pred > 0.8f ) && ( non_sta2 > th_sta ) ) ) - { - /* active signal present - increment counter */ - hStereoClassif->aEn_raw[st->idchan] = hStereoClassif->aEn_raw[st->idchan] + 2; - } - else - { - /* background noise present - decrement counter */ - hStereoClassif->aEn_raw[st->idchan] = hStereoClassif->aEn_raw[st->idchan] - 1; - } - - if ( hStereoClassif->aEn_raw[st->idchan] > 6 ) - { - hStereoClassif->aEn_raw[st->idchan] = 6; - } - else if ( hStereoClassif->aEn_raw[st->idchan] < 0 ) - { - hStereoClassif->aEn_raw[st->idchan] = 0; - } - } - - /*--------------------------------------------------------------* - * Background noise update - * (bckr[] has been already updated downwards in nois_est_down()) - *--------------------------------------------------------------*/ - - /* Additional detectors */ - comb_ahc_epsP = max( max( hNoiseEst->act_pred, hNoiseEst->lt_haco_ev ), epsP_2_16_dlp ); - comb_hcm_epsP = max( max( hNoiseEst->lt_haco_ev, epsP_2_16_dlp_max ), epsP_0_2_ad_lp_max ); - - haco_ev_max = max( *st_harm_cor_cnt == 0, hNoiseEst->lt_haco_ev ); - Etot_l_lp_thr = hNoiseEst->Etot_l_lp + ( 1.5f + 1.5f * ( hNoiseEst->Etot_lp < 50.0f ) ) * hNoiseEst->Etot_v_h2; - - enr_bgd = Etot < Etot_l_lp_thr; - cns_bgd = ( epsP_0_2 > 7.95f ) && ( non_sta < 1e3f ); - lp_bgd = epsP_2_16_dlp_max < 0.10f; - ns_mask = non_sta < 1e5f; - lt_haco_mask = hNoiseEst->lt_haco_ev < 0.5f; - bg_haco_mask = haco_ev_max < 0.4f; - - SD_1 = ( ( epsP_0_2_ad > 0.5f ) && ( epsP_0_2 > 7.95f ) ); - - bg_bgd3 = enr_bgd || ( ( cns_bgd || lp_bgd ) && ns_mask && lt_haco_mask && SD_1 == 0 ); - - PD_1 = ( epsP_2_16_dlp_max < 0.10f ); - PD_2 = ( epsP_0_2_ad_lp_max < 0.10f ); - PD_3 = ( comb_ahc_epsP < 0.85f ); - PD_4 = comb_ahc_epsP < 0.15f; - PD_5 = comb_hcm_epsP < 0.30f; - - BG_1 = ( ( SD_1 == 0 ) || ( Etot < Etot_l_lp_thr ) ) && bg_haco_mask && ( hNoiseEst->act_pred < 0.85f ) && ( hNoiseEst->Etot_lp < 50.0f ); - - PAU = ( hNoiseEst->aEn == 0 ) || ( ( Etot < 55.0f ) && ( SD_1 == 0 ) && ( ( PD_3 && ( PD_1 || PD_2 ) ) || ( PD_4 || PD_5 ) ) ); - - NEW_POS_BG = ( PAU | BG_1 ) & bg_bgd3; - - /* Original silence detector works in most cases */ - aE_bgd = hNoiseEst->aEn == 0; - - /* When the signal dynamics is high and the energy is close to the background estimate */ - sd1_bgd = ( hNoiseEst->sign_dyn_lp > 15 ) && ( Etot - hNoiseEst->Etot_l_lp ) < 2 * hNoiseEst->Etot_v_h2 && hNoiseEst->harm_cor_cnt > 20; - - /* init conditions steadily dropping act_pred and/or lt_haco_ev */ - tn_ini = ini_frame < 150 && hNoiseEst->harm_cor_cnt > 5 && - ( Etot - hNoiseEst->Etot_lp ) < 7 && - ( ( hNoiseEst->act_pred < 0.59f && hNoiseEst->lt_haco_ev < 0.23f ) || - hNoiseEst->act_pred < 0.38f || - ( ( st->element_mode == EVS_MONO && hNoiseEst->lt_haco_ev < 0.15f ) || ( st->element_mode > EVS_MONO && hNoiseEst->lt_haco_ev < 0.08f ) ) || - non_staB < 50.0f || - aE_bgd || ( Etot < 42.0f && hNoiseEst->harm_cor_cnt > 10 && hNoiseEst->lt_haco_ev < 0.35f && hNoiseEst->act_pred < 0.8f ) ); - - /* Energy close to the background estimate serves as a mask for other background detectors */ - bg_bgd2 = Etot < Etot_l_lp_thr || tn_ini; - - updt_step = 0.0f; - if ( ( bg_bgd2 && ( aE_bgd || sd1_bgd || hNoiseEst->lt_tn_track > 0.90f || NEW_POS_BG ) ) || tn_ini ) - { - if ( ( ( hNoiseEst->act_pred < 0.85f ) && - aE_bgd && - ( hNoiseEst->lt_Ellp_dist < 10 || sd1_bgd ) && hNoiseEst->lt_tn_dist < 40 && - ( ( Etot - hNoiseEst->totalNoise ) < 10.0f ) ) || - ( hNoiseEst->first_noise_updt == 0 && hNoiseEst->harm_cor_cnt > 80 && aE_bgd && hNoiseEst->lt_aEn_zero > 0.5f ) || - ( tn_ini && ( aE_bgd || non_staB < 10.0 || hNoiseEst->harm_cor_cnt > 80 ) ) ) - { - updt_step = 1.0f; - hNoiseEst->first_noise_updt = 1; - for ( i = 0; i < NB_BANDS; i++ ) - { - hNoiseEst->bckr[i] = tmpN[i]; - } - } - else if ( ( ( hNoiseEst->act_pred < 0.80f ) && ( aE_bgd || PAU ) && hNoiseEst->lt_haco_ev < 0.10f ) || ( ( hNoiseEst->act_pred < 0.70f ) && ( aE_bgd || non_staB < 17.0f ) && PAU && hNoiseEst->lt_haco_ev < 0.15f ) || ( hNoiseEst->harm_cor_cnt > 80 && hNoiseEst->totalNoise > 5.0f && Etot < max( 1.0f, Etot_l_lp + 1.5f * hNoiseEst->Etot_v_h2 ) ) || ( hNoiseEst->harm_cor_cnt > 50 && hNoiseEst->first_noise_updt > 30 && aE_bgd && hNoiseEst->lt_aEn_zero > 0.5f ) || tn_ini ) - { - updt_step = 0.1f; - if ( !aE_bgd && - hNoiseEst->harm_cor_cnt < 50 && - ( hNoiseEst->act_pred > 0.6f || - ( !tn_ini && Etot_l_lp - hNoiseEst->totalNoise < 10.0f && non_staB > 8.0f ) ) ) - { - updt_step = 0.01f; - } - - hNoiseEst->first_noise_updt = 1; - for ( i = 0; i < NB_BANDS; i++ ) - { - hNoiseEst->bckr[i] = hNoiseEst->bckr[i] + updt_step * ( tmpN[i] - hNoiseEst->bckr[i] ); - } - } - else if ( aE_bgd || hNoiseEst->harm_cor_cnt > 100 ) - { - hNoiseEst->first_noise_updt += 1; - } - } - else - { - /* If in music decrease bckr[] to drop further */ - if ( hNoiseEst->low_tn_track_cnt > 300 && hNoiseEst->lt_haco_ev > 0.9f && hNoiseEst->totalNoise > 0.0f ) - { - updt_step = -0.02f; - for ( i = 0; i < NB_BANDS; i++ ) - { - if ( hNoiseEst->bckr[i] > 2 * E_MIN ) - { - hNoiseEst->bckr[i] = 0.98f * hNoiseEst->bckr[i]; - } - } - } - } - hNoiseEst->lt_aEn_zero = 0.2f * ( hNoiseEst->aEn == 0 ) + ( 1 - 0.2f ) * hNoiseEst->lt_aEn_zero; - - if ( st->element_mode > EVS_MONO ) - { - if ( hNoiseEst->first_noise_updt > 0 && hNoiseEst->first_noise_updt_cnt < 100 ) - { - hNoiseEst->first_noise_updt_cnt++; - } - } - - return; -} -#endif diff --git a/lib_enc/nois_est_fx.c b/lib_enc/nois_est_fx.c index 95f063597..a4958af74 100644 --- a/lib_enc/nois_est_fx.c +++ b/lib_enc/nois_est_fx.c @@ -2139,7 +2139,6 @@ void noise_est_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------* * noise_est_fx() @@ -3554,5 +3553,3 @@ void noise_est_ivas_fx( return; } - -#endif diff --git a/lib_enc/noise_adjust.c b/lib_enc/noise_adjust.c index 6bf9beae7..d441f6ead 100644 --- a/lib_enc/noise_adjust.c +++ b/lib_enc/noise_adjust.c @@ -41,78 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * noise_adjust() - * - * Calculate attenuation - *--------------------------------------------------------------------------*/ - -/*! r: index of noise attenuation */ -int16_t noise_adjust( - const float *coeffs_norm, /* i : normalized coefficients */ - const int16_t *bitalloc, /* i : bit allocation */ - const int16_t *sfm_start, - const int16_t *sfm_end, - const int16_t core_sfm /* i : index of the end band for core */ -) -{ - int16_t nf_idx, sfm, bin, num_coeffs; - int16_t E, diff, tmp; - - E = 0; - num_coeffs = 0; - - for ( sfm = 0; sfm <= core_sfm; sfm++ ) - { - if ( bitalloc[sfm] == 0 ) - { - for ( bin = sfm_start[sfm]; bin < sfm_end[sfm]; bin++ ) - { - if ( coeffs_norm[bin] == 0 ) - { - E = E - 1; - } - else - { - tmp = (int16_t) ( floor( log10( fabs( coeffs_norm[bin] * L_FRAME ) ) / 0.301030f ) + 1 ); - if ( tmp < 0 ) - { - tmp = 0; - } - E = E + tmp; - } - - num_coeffs = num_coeffs + 1; - } - } - } - - if ( num_coeffs != 0 ) - { - E = E / num_coeffs; - } - else - { - E = 0; - } - - diff = 7 - E; - - if ( diff >= 0 ) - { - nf_idx = (int16_t) diff; - if ( diff > 3 ) - { - nf_idx = 3; - } - } - else - { - nf_idx = 0; - } - - return nf_idx; -} -#endif diff --git a/lib_enc/normalizecoefs.c b/lib_enc/normalizecoefs.c index 58e706771..8f0950fba 100644 --- a/lib_enc/normalizecoefs.c +++ b/lib_enc/normalizecoefs.c @@ -45,28 +45,3 @@ * * Normalize MDCT coefficients with quantized norms *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void normalizecoefs( - float *coefs, /* i/o: MDCT coefficients */ - const int16_t *ynrm, /* i : quantization indices for norms */ - const int16_t num_bands, /* i : Number of bands */ - const int16_t *band_start, /* i : Start of bands */ - const int16_t *band_end /* i : End of bands */ -) -{ - int16_t i, band; - float normq; - - for ( band = 0; band < num_bands; band++ ) - { - normq = dicn_inv[ynrm[band]]; - - for ( i = band_start[band]; i < band_end[band]; i++ ) - { - coefs[i] *= normq; - } - } - - return; -} -#endif diff --git a/lib_enc/peak_vq_enc.c b/lib_enc/peak_vq_enc.c index 03230986b..867e40cdc 100644 --- a/lib_enc/peak_vq_enc.c +++ b/lib_enc/peak_vq_enc.c @@ -42,593 +42,3 @@ #include "rom_com.h" #include "wmc_auto.h" #include -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------- - * Local function prototypes - *--------------------------------------------------------------------------*/ - -static void quant_peaks( BSTR_ENC_HANDLE hBstr, const float *vect_in, float *vect_out, const float *peak_gain, int16_t *vq_idx, const int16_t overlap, const int32_t core_brate, const int16_t Npeaks ); - -static int16_t hvq_code_pos( BSTR_ENC_HANDLE hBstr, const int16_t *const inp, const int16_t length, const int16_t num_peaks ); - -static int16_t sparse_code_pos( const int16_t *inp, const int16_t length, int16_t *result ); - - -/*-------------------------------------------------------------------------- - * peak_vq_enc() - * - * Vector Quantization of MDCT peaks - *--------------------------------------------------------------------------*/ - -int16_t peak_vq_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t bwidth, /* i : audio bandwidth */ - const float *coefs, /* i : Input coefficient vector */ - float *coefs_out, /* o : Quantized output vector */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t num_bits, /* i : Number of bits for HVQ */ - const int16_t vq_peaks, /* i : Number of identified peaks */ - const int16_t *ynrm, /* i : Envelope coefficients */ - int16_t *R, /* i/o: Bit allocation/updated bit allocation */ - int16_t *vq_peak_idx, /* i : Peak index vector */ - float *nf_gains /* i : Estimated noise floor gains */ -) -{ - int16_t pos_bits; - float normq; - float pgain_q[HVQ_MAX_PEAKS]; - float peak_gains[HVQ_MAX_PEAKS]; - float coefs_pvq[HVQ_PVQ_BUF_LEN]; - float pvq_vector[HVQ_PVQ_BUF_LEN]; - float *pPvqVectorBandStart; - float fg_pred[NB_SFM_MAX]; - int16_t i, j, k, m, r, pvq_bands, num_overlap_bins; - int16_t hcode_l, FlagN, low_peak_bin, vq_cb_idx, max_peaks, bin_th; - int16_t bits = 0; - int16_t q_nf_gain_idx[HVQ_NF_GROUPS]; - int16_t nf_seed = RANDOM_INITSEED; - int16_t pgain_cb_idx[HVQ_MAX_PEAKS], pgain_difidx[HVQ_MAX_PEAKS]; - int16_t pvq_norm[MAX_PVQ_BANDS]; - int16_t pvq_bits, bit_budget; - int16_t pos_vec[HVQ_THRES_BIN_32k]; - int16_t npulses[MAX_PVQ_BANDS]; - int16_t pvq_inp_vector[HVQ_PVQ_BUF_LEN]; - int16_t k_sort[MAX_PVQ_BANDS]; - int16_t Rk[MAX_PVQ_BANDS]; - int16_t Rk_f[MAX_PVQ_BANDS]; /*Q3*/ - float gopt[NB_SFM]; - int16_t sel_bnds[HVQ_NUM_SFM_24k]; - int16_t n_sel_bnds; - int32_t manE_peak, manPkEnrg; - int16_t expE_peak, expPkEnrg; - int16_t hvq_band_end[MAX_PVQ_BANDS]; - int16_t hvq_band_start[MAX_PVQ_BANDS]; - int16_t hvq_band_width[MAX_PVQ_BANDS]; - int16_t n; - int16_t s; - set_f( coefs_pvq, 0.0f, HVQ_PVQ_BUF_LEN ); - set_f( pvq_vector, 0.0f, HVQ_PVQ_BUF_LEN ); - set_s( npulses, 0, MAX_PVQ_BANDS ); - - /* Set bitrate dependent variables */ - assert( ( core_brate > HQ_16k40 && core_brate <= HQ_48k ) && "HVQ rate not supported" ); - max_peaks = (int16_t) ( ( core_brate * HVQ_PEAKS_PER_DELTA + HVQ_PEAKS_PER_DELTA_OFFS ) / HVQ_PEAKS_BPS_DELTA ); - bin_th = HVQ_THRES_BIN_24k; - if ( core_brate >= HQ_BWE_CROSSOVER_BRATE ) - { - bin_th = HVQ_THRES_BIN_32k; - } - - for ( i = 0; i < bin_th; i++ ) - { - pos_vec[i] = 0; - } - - /* Quantize noise floor gains */ - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - logqnorm( &nf_gains[i], &q_nf_gain_idx[i], 32, 1, &thren_HQ[0] ); - nf_gains[i] = 0.5f * dicn[q_nf_gain_idx[i]]; - push_indice( hBstr, IND_HVQ_NF_GAIN, q_nf_gain_idx[i], 5 ); - bits += 5; - } - - /* Signal number of peaks */ - i = max_peaks - vq_peaks; - push_indice( hBstr, IND_NUM_PEAKS, i, 5 ); - bits += 5; - - /* Identify position of first peak and arrange peak gains by position */ - low_peak_bin = bin_th; - for ( i = 0; i < vq_peaks; i++ ) - { - if ( vq_peak_idx[i] < low_peak_bin ) - { - low_peak_bin = vq_peak_idx[i]; - } - pos_vec[vq_peak_idx[i]] = (int16_t) sign( (float) coefs[vq_peak_idx[i]] ); - } - - for ( i = 0, j = 0; i < bin_th; i++ ) - { - if ( pos_vec[i] != 0 ) - { - peak_gains[j] = (float) fabs( coefs[i] ); - vq_peak_idx[j] = i; - j++; - } - } - - /* Scale down peak gains */ - for ( i = 0; i < vq_peaks; i++ ) - { - peak_gains[i] *= 0.25f; - } - - /* Quantize peak gains */ - logqnorm( &peak_gains[0], &pgain_cb_idx[0], 32, 1, &thren_pg[0] ); - for ( i = 1; i < vq_peaks; i++ ) - { - logqnorm( &peak_gains[i], &pgain_cb_idx[i], 45, 1, &thren_pg[0] ); - } - - /* Code quantized peak gain indices */ - diffcod( vq_peaks, pgain_cb_idx, &pgain_difidx[1] ); - for ( i = 0; i < vq_peaks; i++ ) - { - pgain_q[i] = dicn_pg[pgain_cb_idx[i]]; - } - pgain_difidx[0] = pgain_cb_idx[0]; - - /* Scale up peak gains and accumulate peak energy */ - manE_peak = 0; - expE_peak = 32; - for ( i = 0; i < vq_peaks; i++ ) - { - pgain_q[i] *= 4.0f; - manPkEnrg = manPkEnrg_tbl[pgain_cb_idx[i]]; - expPkEnrg = expPkEnrg_tbl[pgain_cb_idx[i]]; - floating_point_add_float( &manE_peak, &expE_peak, manPkEnrg, expPkEnrg ); - } - - /* Huffman coding */ - hcode_l = 0; - for ( i = 1; i < vq_peaks; i++ ) - { - hcode_l += pgain_huffsizn[pgain_difidx[i]]; - } - - FlagN = HUFCODE; - - if ( hcode_l >= GAINI_BITS * ( vq_peaks - 1 ) ) - { - hcode_l = GAINI_BITS * ( vq_peaks - 1 ); - FlagN = NOHUFCODE; - } - - push_indice( hBstr, IND_FLAGN, FlagN, 1 ); - push_indice( hBstr, IND_PG_IDX, pgain_difidx[0], GAIN0_BITS ); - - if ( FlagN ) - { - for ( i = 1; i < vq_peaks; i++ ) - { - j = pgain_difidx[i]; - m = pgain_huffnorm[j]; - r = pgain_huffsizn[j]; - - push_indice( hBstr, IND_PG_IDX, m, r ); - } - } - else - { - for ( i = 1; i < vq_peaks; i++ ) - { - push_indice( hBstr, IND_PG_IDX, pgain_difidx[i], GAINI_BITS ); - } - } - - /* Number of bits used for peak gain quantization */ - bits += FLAGN_BITS + GAIN0_BITS + hcode_l; - - /* Add sign for peak shape normalization */ - for ( i = 0; i < vq_peaks; i++ ) - { - peak_gains[i] = pos_vec[vq_peak_idx[i]] * pgain_q[i]; - } - - /* Quantize peak shapes */ - for ( i = 0; i < vq_peaks - 1; i++ ) - { - num_overlap_bins = 5 - ( vq_peak_idx[i + 1] - vq_peak_idx[i] ); - quant_peaks( hBstr, &coefs[vq_peak_idx[i] - 2], &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i], &vq_cb_idx, num_overlap_bins, core_brate, vq_peaks ); - push_indice( hBstr, IND_HVQ_PEAKS, vq_cb_idx, 8 ); - bits += 9; - } - - quant_peaks( hBstr, &coefs[vq_peak_idx[i] - 2], &coefs_out[vq_peak_idx[i] - 2], &peak_gains[i], &vq_cb_idx, 0, core_brate, vq_peaks ); - push_indice( hBstr, IND_HVQ_PEAKS, vq_cb_idx, 8 ); - bits += 9; - - pos_bits = hvq_code_pos( hBstr, pos_vec, bin_th, vq_peaks ); - - bits += pos_bits; - bit_budget = num_bits - bits; - - /* Calculate number of PVQ bands to code and assign bits */ - pvq_bands = hvq_pvq_bitalloc( bit_budget, core_brate, bwidth, ynrm, manE_peak, expE_peak, Rk, R, sel_bnds, &n_sel_bnds ); - - /* Get band limits for concatenated PVQ target */ - hvq_concat_bands( pvq_bands, sel_bnds, n_sel_bnds, hvq_band_start, hvq_band_width, hvq_band_end ); - - /* Quantize PVQ bands */ - i = 0; - n = 0; - s = 0; - for ( k = 0; k < pvq_bands; k++ ) - { - if ( k >= pvq_bands - n_sel_bnds ) - { - i = band_start_harm[sel_bnds[s]]; - s++; - } - k_sort[k] = k; - j = 0; - pPvqVectorBandStart = &pvq_vector[n]; - while ( j < hvq_band_width[k] ) - { - if ( coefs_out[i] == 0 ) - { - pvq_vector[n] = coefs[i]; - j++; - n++; - } - i++; - } - logqnorm( pPvqVectorBandStart, &pvq_norm[k], 40, hvq_band_width[k], &thren_HQ[0] ); - } - - normalizecoefs( pvq_vector, pvq_norm, pvq_bands, hvq_band_start, hvq_band_end ); - - bit_budget -= HVQ_PVQ_GAIN_BITS * pvq_bands; - for ( k = 0; k < pvq_bands; k++ ) - { - Rk_f[k] = Rk[k] * 8; - } - - pvq_bits = bit_budget; - set_s( npulses, 0, MAX_PVQ_BANDS ); - - pvq_encode_frame( hBstr, pvq_vector, coefs_pvq, gopt, npulses, pvq_inp_vector, hvq_band_start, hvq_band_end, hvq_band_width, pvq_bands, Rk_f, pvq_bits, HQ_CORE ); - - for ( i = 0; i < pvq_bands; i++ ) - { - k_sort[i] = i; - } - - - fine_gain_pred( hvq_band_start, hvq_band_end, hvq_band_width, k_sort, npulses, NULL, NULL, pvq_bands, coefs_pvq, pvq_inp_vector, fg_pred, HQ_CORE ); - - i = 0; - n = 0; - s = 0; - for ( k = 0; k < pvq_bands; k++ ) - { - normq = dicn[pvq_norm[k]] * ( gopt[k] / fg_pred[k] ); - - logqnorm( &normq, &pvq_norm[k], 40, 1, &thren_HQ[0] ); - pvq_norm[k] -= 8; - if ( pvq_norm[k] < 0 ) - { - pvq_norm[k] = 0; - } - - push_indice( hBstr, IND_HVQ_PVQ_GAIN, pvq_norm[k], HVQ_PVQ_GAIN_BITS ); - pvq_bits += HVQ_PVQ_GAIN_BITS; - - pvq_norm[k] += 8; - j = 0; - if ( k >= pvq_bands - n_sel_bnds ) - { - i = band_start_harm[sel_bnds[s++]]; - } - while ( j < hvq_band_width[k] ) - { - normq = dicn[pvq_norm[k]]; - if ( coefs_out[i] == 0 ) - { - coefs_out[i] = coefs_pvq[n] * fg_pred[k]; - coefs_out[i] = coefs_out[i] * normq; - j++; - n++; - } - i++; - } - } - - bits += pvq_bits; - - /* Noise fill unquantized coeffs with one gain per group */ - for ( i = 0; i < HVQ_NF_GROUPS; i++ ) - { - for ( j = i * ( bin_th / HVQ_NF_GROUPS ); j < ( i + 1 ) * ( bin_th / HVQ_NF_GROUPS ); j++ ) - { - if ( coefs_out[j] == 0 ) - { - coefs_out[j] = ( (float) own_random( &nf_seed ) / MAX16B ) * nf_gains[i]; - } - } - } - - return bits; -} - -/*-------------------------------------------------------------------------- - * quant_peaks() - * - * Applies VQ on input vector - *--------------------------------------------------------------------------*/ - -static void quant_peaks( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *vect_in, /* i : Target vector */ - float *vect_out, /* i/o: Quantized vector */ - const float *peak_gain, /* i : Peak gain vector */ - int16_t *vq_idx, /* o : Codebook index */ - const int16_t overlap, /* i : Overlap indicator */ - const int32_t core_brate, /* i : Core bitrate */ - const int16_t Npeaks /* i : Number of peaks */ -) -{ - float x[4]; - float xq[4]; - int16_t weights[4]; - int16_t i, idx, cb_class, search_overlap; - - set_s( weights, 1, 4 ); - - x[0] = vect_in[0] / ( *peak_gain ); - x[1] = vect_in[1] / ( *peak_gain ); - x[2] = vect_in[3] / ( *peak_gain ); - x[3] = vect_in[4] / ( *peak_gain ); - - if ( vect_out[0] != 0 ) - { - if ( fabs( peak_gain[-1] ) > fabs( *peak_gain ) ) - { - weights[0] = 0; - - if ( vect_out[1] != 0 ) - { - weights[1] = 0; - } - } - } - - if ( overlap > 0 ) - { - if ( fabs( peak_gain[1] ) > fabs( *peak_gain ) ) - { - for ( i = 3; i > 3 - overlap; i-- ) - { - weights[i] = 0; - } - } - } - - - /* Classify */ - cb_class = (int16_t) w_vquant( x, 0, weights, 0, hvq_class_c, HVQ_VQ_DIM - 1, HVQ_NUM_CLASS, 0 ); - - if ( core_brate < HQ_BWE_CROSSOVER_BRATE ) - { - idx = max( 0, HVQ_MAX_PEAKS_24k - Npeaks ); - search_overlap = hvq_cb_search_overlap24k[idx]; - } - else - { - idx = max( 0, HVQ_MAX_PEAKS_32k - Npeaks ); - search_overlap = hvq_cb_search_overlap32k[idx]; - } - - /* Quantize */ - if ( cb_class == 0 ) - { - *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, hvq_peak_cb, 4, HVQ_CB_SIZE / 2 + search_overlap, 0 ); - push_indice( hBstr, IND_HVQ_PEAKS, 0, 1 ); - } - else if ( cb_class == 1 ) - { - *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, &hvq_peak_cb[HVQ_CB_SIZE * 2 - search_overlap * 4], 4, HVQ_CB_SIZE / 2 + search_overlap, 0 ); - *vq_idx += HVQ_CB_SIZE / 2 - search_overlap; - push_indice( hBstr, IND_HVQ_PEAKS, 0, 1 ); - } - else if ( cb_class == 2 ) - { - *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, &hvq_peak_cb[HVQ_CB_SIZE * 2 - search_overlap * 4], 4, HVQ_CB_SIZE / 2 + search_overlap, 1 ); - *vq_idx += HVQ_CB_SIZE / 2 - search_overlap; - push_indice( hBstr, IND_HVQ_PEAKS, 1, 1 ); - } - else - { - *vq_idx = (int16_t) w_vquant( x, 0, weights, xq, hvq_peak_cb, 4, HVQ_CB_SIZE / 2 + search_overlap, 1 ); - push_indice( hBstr, IND_HVQ_PEAKS, 1, 1 ); - } - - vect_out[0] = weights[0] * ( xq[0] * ( *peak_gain ) ) + ( weights[0] ^ 1 ) * vect_out[0]; - vect_out[1] = weights[1] * ( xq[1] * ( *peak_gain ) ) + ( weights[1] ^ 1 ) * vect_out[1]; - vect_out[2] = *peak_gain; - vect_out[3] = weights[2] * ( xq[2] * ( *peak_gain ) ) + ( weights[2] ^ 1 ) * vect_out[3]; - vect_out[4] = weights[3] * ( xq[3] * ( *peak_gain ) ) + ( weights[3] ^ 1 ) * vect_out[4]; - - return; -} - -/*-------------------------------------------------------------------------- - * code_pos() - * - * Code pulse positions - *--------------------------------------------------------------------------*/ - -/*! r: number of consumed bits */ -static int16_t sparse_code_pos( - const int16_t *inp, /* i : positions to encode */ - const int16_t length, /* i : number of positions */ - int16_t *result /* o : sparse encoding */ -) -{ - int16_t layer2[HVQ_CP_L2_MAX]; - int16_t layer_length; - int16_t i, j; - int16_t val, idx; - int16_t bits = 0; - int16_t mask; - - set_s( layer2, 0, HVQ_CP_L2_MAX ); - - layer_length = (int16_t) ( (float) length / HVQ_CP_L1_LEN + 0.5 ); - - for ( j = 0; j < layer_length; j++ ) - { - for ( i = j * HVQ_CP_L1_LEN; i < min( ( j + 1 ) * HVQ_CP_L1_LEN, length ); i++ ) - { - if ( inp[i] ) - { - layer2[j] = 1; - break; - } - } - } - - for ( i = 0; i < layer_length; i++ ) - { - result[i] = layer2[i]; - } - bits += layer_length; - - for ( j = 0; j < layer_length; j++ ) - { - if ( layer2[j] ) - { - val = 0; - for ( i = j * HVQ_CP_L1_LEN; i < min( ( j + 1 ) * HVQ_CP_L1_LEN, length ); i++ ) - { - val <<= 1; - val |= inp[i]; - } - - for ( idx = 0; idx < HVQ_CP_MAP_LEN; idx++ ) - { - if ( hvq_cp_layer1_map5[idx] == val ) - { - break; - } - } - - mask = 1 << ( HVQ_CP_MAP_IDX_LEN - 1 ); - for ( i = 0; i < HVQ_CP_MAP_IDX_LEN; i++ ) - { - result[bits++] = ( idx & mask ) >> ( HVQ_CP_MAP_IDX_LEN - 1 - i ); - mask >>= 1; - } - } - } - - return bits; -} - -/*-------------------------------------------------------------------------- - * hvq_code_pos() - * - * Code pulse positions - *--------------------------------------------------------------------------*/ - -static int16_t hvq_code_pos( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t *const inp, /* i : positions to encode */ - const int16_t length, /* i : number of positions */ - const int16_t num_peaks /* i : number of peaks */ -) -{ - int16_t sparse_result[4 * HVQ_THRES_BIN_32k / HVQ_CP_L1_LEN]; - int16_t delta[HVQ_MAX_PEAKS]; - int16_t peak_idx[HVQ_MAX_PEAKS]; - int16_t inp_abs[HVQ_THRES_BIN_32k]; - int16_t inp_sign[HVQ_MAX_PEAKS]; - int16_t i, j; - int16_t bits; - int16_t delta_max; - int16_t delta_bits, sparse_bits; - - bits = 0; - - /* Extract sorted peak index vector and sign vector */ - for ( i = 0, j = 0; i < length; i++ ) - { - inp_abs[i] = (int16_t) abs( inp[i] ); - if ( inp[i] ) - { - peak_idx[j] = i; - inp_sign[j++] = inp[i]; - } - } - - /* Calculate delta */ - delta[0] = peak_idx[0] + HVQ_CP_HUFF_OFFSET; - delta_max = delta[0]; - for ( i = 1; i < num_peaks; i++ ) - { - delta[i] = peak_idx[i] - peak_idx[i - 1] - HVQ_CP_HUFF_OFFSET; - if ( delta_max < delta[i] ) - { - delta_max = delta[i]; - } - } - - /* Calculate bits needed for huffman coding of deltas */ - delta_bits = -1; - if ( delta_max <= HVQ_CP_HUFF_MAX ) - { - delta_bits = 0; - for ( i = 0; i < num_peaks; i++ ) - { - delta_bits += hvq_cp_huff_len[delta[i]]; - } - } - - /* Calculate bits neeed for sparse coding */ - sparse_bits = sparse_code_pos( inp_abs, length, sparse_result ); - - /* Decide which coding mode to use */ - if ( delta_bits > sparse_bits || delta_bits < 0 ) - { - push_indice( hBstr, IND_POS_IDX, HVQ_CP_SPARSE, 1 ); - - for ( i = 0; i < sparse_bits; i++ ) - { - push_indice( hBstr, IND_POS_IDX, sparse_result[i], 1 ); - } - bits += sparse_bits + 1; - } - else - { - push_indice( hBstr, IND_POS_IDX, HVQ_CP_DELTA, 1 ); - - for ( i = 0; i < num_peaks; i++ ) - { - j = delta[i]; - push_indice( hBstr, IND_POS_IDX, hvq_cp_huff_val[j], hvq_cp_huff_len[j] ); - } - bits += delta_bits + 1; - } - - /* Send sign */ - for ( i = 0; i < num_peaks; i++ ) - { - push_indice( hBstr, IND_POS_IDX, ( inp_sign[i] < 0 ? 0 : 1 ), 1 ); - } - bits += num_peaks; - - return bits; -} -#endif diff --git a/lib_enc/peak_vq_enc_fx.c b/lib_enc/peak_vq_enc_fx.c index 525c2af46..81a83c7f3 100644 --- a/lib_enc/peak_vq_enc_fx.c +++ b/lib_enc/peak_vq_enc_fx.c @@ -21,7 +21,6 @@ static void quant_peaks_fx( BSTR_ENC_HANDLE hBstr, const Word32 *, Word32 *, const Word32 *, Word16 *, const Word16, const Word32, const Word16 ); static Word16 hvq_code_pos_fx( BSTR_ENC_HANDLE hBstr, const Word16 *inp, const Word16 length, const Word16 num_peaks ); static Word16 sparse_code_pos_fx( const Word16 *inp, const Word16 length, Word16 *result ); -#ifdef IVAS_FLOAT_FIXED static Word16 hvq_code_pos_ivas_fx( BSTR_ENC_HANDLE hBstr, const Word16 *inp, const Word16 length, const Word16 num_peaks ); static void quant_peaks_ivas_fx( @@ -34,13 +33,11 @@ static void quant_peaks_ivas_fx( const Word32 core_brate, /* i : Core bitrate */ const Word16 Npeaks /* i : Number of peaks */ ); -#endif /*-------------------------------------------------------------------------- * peak_vq_enc_fx() * * Vector Quantization of MDCT peaks *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 peak_vq_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 bwidth, /* i : audio bandwidth */ @@ -456,7 +453,6 @@ Word16 peak_vq_enc_ivas_fx( return bits; } -#endif Word16 peak_vq_enc_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 bwidth, /* i : audio bandwidth */ @@ -872,7 +868,6 @@ Word16 peak_vq_enc_fx( * * Applies VQ on input vector *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void quant_peaks_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word32 *vect_in, /* i : Target vector in Q12 */ @@ -1027,7 +1022,6 @@ static void quant_peaks_ivas_fx( return; } -#endif static void quant_peaks_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word32 *vect_in, /* i : Target vector in Q12 */ @@ -1258,7 +1252,6 @@ static Word16 sparse_code_pos_fx( * * Code pulse positions *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 hvq_code_pos_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *inp, @@ -1371,7 +1364,6 @@ static Word16 hvq_code_pos_ivas_fx( return bits; } -#endif static Word16 hvq_code_pos_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *inp, diff --git a/lib_enc/pit_enc.c b/lib_enc/pit_enc.c index 5d736af10..224203cb0 100644 --- a/lib_enc/pit_enc.c +++ b/lib_enc/pit_enc.c @@ -43,1344 +43,3 @@ #include "rom_enc.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * pit_encode() - * - * Close-loop pitch lag search and pitch lag quantization - * Adaptive excitation construction - *------------------------------------------------------------------*/ -/*! r: Fractional pitch for each subframe */ -float pit_encode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t pitch_bits[], /* i : pitch bits */ - const int32_t core_brate, /* i : core bitrate */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t coder_type, /* i : coding type */ - int16_t *limit_flag, /* i/o: restrained(0) or extended(1) Q limits */ - const int16_t i_subfr, /* i : subframe index */ - float *exc, /* i/o: pointer to excitation signal frame */ - const int16_t L_subfr, /* i : subframe length */ - const int16_t *pitch, /* i : open loop pitch estimates in current frame */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ - const float tdm_Pri_pitch_buf[] /* i : primary channel pitch buffer */ -) -{ - float pitch_cl; - int16_t pit_flag, delta, mult_Top, nBits; - int16_t T_op[2]; /* values for two half-frames */ - - /*----------------------------------------------------------------* - * convert pitch values to 16kHz domain - *----------------------------------------------------------------*/ - - if ( L_frame == L_FRAME || ( tdm_Pri_pitch_buf != NULL && tdm_Pri_pitch_buf[0] < 0 ) ) - { - mvs2s( pitch, T_op, 2 ); - } - else /* L_frame == L_FRAME16k */ - { - T_op[0] = (int16_t) ( pitch[0] * 1.25f + 0.5f ); - T_op[1] = (int16_t) ( pitch[1] * 1.25f + 0.5f ); - } - - /*----------------------------------------------------------------* - * Initializations - *----------------------------------------------------------------*/ - - /* Set pit_flag to 0 for every subframe with absolute pitch search */ - pit_flag = i_subfr; - if ( i_subfr == 2 * L_SUBFR ) - { - pit_flag = 0; - } - - /*-----------------------------------------------------------------* - * Limit range of pitch search - * Fractional pitch search - * Pitch quantization - *-----------------------------------------------------------------*/ - - mult_Top = 1; - - if ( !Opt_AMR_WB ) - { - /*----------------------------------------------------------------* - * Set limit_flag to 0 for restrained limits, and 1 for extended limits - *----------------------------------------------------------------*/ - - if ( i_subfr == 0 ) - { - *limit_flag = 1; - if ( coder_type == VOICED ) - { - *limit_flag = 2; /* double-extended limits */ - } - - if ( coder_type == GENERIC && core_brate == ACELP_7k20 ) - { - *limit_flag = 0; - } - } - else if ( i_subfr == 2 * L_SUBFR && coder_type == GENERIC && core_brate <= ACELP_13k20 ) - { - if ( *T0 > ( PIT_FR1_EXTEND_8b + PIT_MIN ) >> 1 ) - { - *limit_flag = 0; - } - } - - /* check the minimum pitch value */ - if ( *limit_flag == 0 ) - { - if ( ( i_subfr == 0 && T_op[0] < PIT_MIN ) || ( i_subfr == 2 * L_SUBFR && T_op[1] < PIT_MIN ) ) - { - mult_Top = 2; - } - } - - /*-------------------------------------------------------* - * Retrieve the number of Q bits - *-------------------------------------------------------*/ - - nBits = 0; - if ( coder_type != AUDIO ) - { - nBits = pitch_bits[i_subfr / L_subfr]; - } - - if ( coder_type == AUDIO ) - { - /*-------------------------------------------------------* - * Pitch encoding in AUDIO coder type - * (both ACELP@12k8 and ACELP@16k cores) - *-------------------------------------------------------*/ - - delta = 4; - - if ( L_subfr == L_frame / 2 && i_subfr != 0 ) - { - pit_flag = L_SUBFR; - } - - if ( pit_flag == 0 ) - { - nBits = 10; - } - else - { - nBits = 6; - } - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - } - else if ( i_subfr == 2 * L_SUBFR && pit_flag == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); - } - - /* search and encode the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_subfr ); - - pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - else if ( coder_type == VOICED ) - { - /*-------------------------------------------------------* - * Pitch encoding in VOICED coder type (ACELP@12k8 core only) - *-------------------------------------------------------*/ - - delta = 4; - - if ( i_subfr == 2 * L_SUBFR ) - { - pit_flag = i_subfr; - } - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - } - - /* search and encode the closed loop pitch period */ - if ( nBits == 9 || nBits == 5 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_DOUBLEEXTEND_9b, PIT_FR1_DOUBLEEXTEND_9b, L_FRAME, L_SUBFR ); - } - else if ( nBits == 10 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_SUBFR ); - } - - pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - else if ( tdm_Pitch_reuse_flag == 1 || nBits == 4 ) - { - /*-------------------------------------------------------* - * Pitch encoding with reusing primary channel information - *-------------------------------------------------------*/ - int16_t loc_T0, loc_frac; - - delta = 4; - - pit_flag = L_SUBFR; - - if ( L_subfr == 2 * L_SUBFR ) - { - loc_T0 = (int16_t) ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ); - loc_frac = (int16_t) ( ( ( 0.5f * tdm_Pri_pitch_buf[i_subfr / L_SUBFR] + 0.5f * tdm_Pri_pitch_buf[( i_subfr + L_SUBFR ) / L_SUBFR] ) - loc_T0 ) * 4.0f ); - } - else - { - loc_T0 = (int16_t) tdm_Pri_pitch_buf[i_subfr / L_SUBFR]; - loc_frac = (int16_t) ( ( tdm_Pri_pitch_buf[i_subfr / L_SUBFR] - loc_T0 ) * 4.0f ); - } - - /* pitch lag search limitation */ - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, loc_T0, loc_frac, T0_min, T0_max ); - if ( nBits > 0 ) - { - /* search and encode the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - if ( delta == 8 ) - { - *T0_frac = 0; - } - pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - else - { - *T0 = loc_T0; - *T0_frac = loc_frac; - } - } - else - { - /*-------------------------------------------------------* - * Pitch encoding in GENERIC coder type - * (both ACELP@12k8 and ACELP@16k cores) - *-------------------------------------------------------*/ - - delta = 8; - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_frame, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - } - else if ( i_subfr == 2 * L_SUBFR ) - { - limit_T0( L_frame, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); - } - - /* search and encode the closed loop pitch period */ - if ( L_frame == L_FRAME ) - { - if ( nBits == 8 || nBits == 5 ) - { - if ( *limit_flag == 0 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - } - else - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN_EXTEND, PIT_FR1_EXTEND_8b, L_FRAME, L_SUBFR ); - } - } - else if ( nBits == 9 || nBits == 6 ) - { - if ( *limit_flag == 0 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); - } - else - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_EXTEND_9b, PIT_FR1_EXTEND_9b, L_FRAME, L_SUBFR ); - } - } - else if ( nBits == 10 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MAX, PIT_MAX, L_FRAME, L_SUBFR ); - } - - pit_Q_enc( hBstr, 0, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - else /* L_frame == L_FRAME16k */ - { - if ( nBits == 9 || nBits == 6 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT16k_FR2_EXTEND_9b, PIT16k_FR1_EXTEND_9b, L_FRAME16k, L_SUBFR ); - } - else if ( nBits == 10 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, L_FRAME16k, L_SUBFR ); - } - - pit16k_Q_enc( hBstr, nBits, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - } - } - - /*-------------------------------------------------------* - * Pitch encoding in AMR-WB IO mode - *-------------------------------------------------------*/ - - else - { - delta = 8; - *limit_flag = 0; - - if ( core_brate == ACELP_6k60 ) - { - nBits = 5; - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - nBits = 8; - } - - if ( i_subfr == 2 * L_SUBFR ) - { - /* rewrite pit_flag - it must not be zero */ - pit_flag = i_subfr; - } - - /* search and encode the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - } - else if ( core_brate == ACELP_8k85 ) - { - nBits = 5; - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - nBits = 8; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); - nBits = 8; - } - - /* search and encode the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - } - else - { - nBits = 6; - - /* pitch lag search limitation */ - if ( i_subfr == 0 ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); - nBits = 9; - } - else if ( i_subfr == 2 * L_SUBFR ) - { - limit_T0( L_FRAME, delta, pit_flag, *limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); - nBits = 9; - } - else - { - limit_T0( L_FRAME, delta, pit_flag, 0, *T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ - } - - /* search and encode the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, *limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); - } - - pit_Q_enc( hBstr, 1, nBits, delta, pit_flag, *limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - - /*-------------------------------------------------------* - * Compute floating pitch output - *-------------------------------------------------------*/ - - pitch_cl = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - - return pitch_cl; -} - -/*-------------------------------------------------------------------* - * pitch_fr4() - * - * Find the closed loop pitch period with 1/4 subsample resolution. - *-------------------------------------------------------------------*/ - -/*! r: chosen integer pitch lag */ -int16_t pitch_fr4( - const float exc[], /* i : excitation buffer */ - const float xn[], /* i : target signal */ - const float h[], /* i : weighted synthesis filter impulse response */ - const int16_t t0_min, /* i : minimum value in the searched range. */ - const int16_t t0_max, /* i : maximum value in the searched range. */ - int16_t *pit_frac, /* o : chosen fraction (0, 1, 2 or 3) */ - const int16_t i_subfr, /* i : flag to first subframe */ - const int16_t limit_flag, /* i : flag for limits (0=restrained, 1=extended) */ - const int16_t t0_fr2, /* i : minimum value for resolution 1/2 */ - const int16_t t0_fr1, /* i : minimum value for resolution 1 */ - const int16_t L_frame, /* i : length of the frame */ - const int16_t L_subfr /* i : size of subframe */ -) -{ - int16_t i, fraction, step; - int16_t t0, t1, t_min, t_max, pit_min; - float cor_max, max_val, temp; - float *corr, corr_v[15 + 2 * L_INTERPOL1 + 1]; - - /* initialization */ - if ( limit_flag == 0 ) - { - if ( L_frame == L_FRAME ) - { - pit_min = PIT_MIN; - } - else /* L_frame == L_FRAME16k */ - { - pit_min = PIT16k_MIN; - } - } - else - { - if ( L_frame == L_FRAME ) - { - pit_min = PIT_MIN_EXTEND; - if ( limit_flag == 2 ) - { - pit_min = PIT_MIN_DOUBLEEXTEND; - } - } - else /* L_frame == L_FRAME16k */ - { - pit_min = PIT16k_MIN_EXTEND; - } - } - - - /*-----------------------------------------------------------------* - * - Find interval to compute normalized correlation - * - allocate memory to normalized correlation vector - * - Compute normalized correlation between target and filtered - * excitation - *-----------------------------------------------------------------*/ - - t_min = t0_min - L_INTERPOL1; - t_max = t0_max + L_INTERPOL1; - corr = &corr_v[0] - t_min; /* corr[t_min..t_max] */ - - norm_corr( exc, xn, h, t_min, t_max, corr, L_subfr ); - - /*-----------------------------------------------------------------* - * Find integer pitch - *-----------------------------------------------------------------*/ - - max_val = corr[t0_min]; - t0 = t0_min; - - for ( i = t0_min + 1; i <= t0_max; i++ ) - { - if ( corr[i] >= max_val ) - { - max_val = corr[i]; - t0 = i; - } - } - - if ( t0_fr1 == pit_min ) - { - /* don't search fraction (for 7b/4b quant) */ - if ( ( i_subfr == 0 ) && ( t0 >= t0_fr2 ) ) - { - i = ( t0 >> 1 ) * 2; /* 2 samples resolution */ - if ( ( i + 2 ) > PIT_MAX ) - { - i -= 2; - } - if ( corr[i] > corr[i + 2] ) - { - t0 = i; - } - else - { - t0 = i + 2; - } - } - - *pit_frac = 0; - - return ( t0 ); - } - if ( ( i_subfr == 0 ) && ( t0 >= t0_fr1 ) ) - { - *pit_frac = 0; - - return ( t0 ); - } - - /*------------------------------------------------------------------* - * Search fractionnal pitch with 1/4 subsample resolution. - * search the fractions around t0 and choose the one which maximizes - * the interpolated normalized correlation. - *-----------------------------------------------------------------*/ - - t1 = t0; - step = 1; /* 1/4 subsample resolution */ - fraction = 1; - if ( ( ( i_subfr == 0 ) && ( t0 >= t0_fr2 ) ) || ( t0_fr2 == pit_min ) ) - { - step = 2; /* 1/2 subsample resolution */ - fraction = 2; - } - - if ( t0 == t0_min ) /* Limit case */ - { - fraction = 0; - cor_max = interpolation( &corr[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); - } - else /* Process negative fractions */ - { - t0--; - cor_max = interpolation( &corr[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); - for ( i = ( fraction + step ); i <= 3; i = i + step ) - { - temp = interpolation( &corr[t0], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - } - } - } - - for ( i = 0; i <= 3; i = i + step ) /* Process positive fractions */ - { - temp = interpolation( &corr[t1], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - t0 = t1; - } - } - - *pit_frac = fraction; - - return ( t0 ); -} - -/*-------------------------------------------------------------------* - * norm_corr() - * - * Find the normalized correlation between the target vector and the - * filtered past excitation (correlation between target and filtered - * excitation divided by the square root of energy of filtered - * excitation) - *---------------------------------------------------------------------*/ - -void norm_corr( - const float exc[], /* i : excitation buffer */ - const float xn[], /* i : target signal */ - const float h[], /* i : weighted synthesis filter impulse response */ - const int16_t t_min, /* i : minimum value of searched range */ - const int16_t t_max, /* i : maximum value of searched range */ - float corr_norm[], /* o : normalized correlation */ - const int16_t L_subfr /* i : subframe size */ -) -{ - int16_t t, j, k; - float excf[L_FRAME16k]; /* filtered past excitation */ /* length up to L_FRAME in GSC */ - float alp, ps, norm; - - k = -t_min; - - /*-----------------------------------------------------------------* - * compute the filtered excitation for the first delay t_min - *-----------------------------------------------------------------*/ - - conv( &exc[k], h, excf, L_subfr ); - - /*-----------------------------------------------------------------* - * loop for every possible period - *-----------------------------------------------------------------*/ - - for ( t = t_min; t <= t_max; t++ ) - { - /* Compute correlation between xn[] and excf[] */ - ps = 0.0f; - for ( j = 0; j < L_subfr; ++j ) - { - ps += xn[j] * excf[j]; - } - - /* Compute 1/sqrt(energie of excf[]) */ - alp = 0.01f; - for ( j = 0; j < L_subfr; ++j ) - { - alp += excf[j] * excf[j]; - } - norm = inv_sqrt( alp ); - - /* Normalize correlation = correlation * (1/sqrt(energie)) */ - corr_norm[t] = ps * norm; - - /* update the filtered excitation excf[] for the next iteration */ - if ( t != t_max ) - { - k--; - for ( j = L_subfr - 1; j > 0; j-- ) - { - excf[j] = excf[j - 1] + exc[k] * h[j]; - } - excf[0] = exc[k]; - } - } - return; -} - -/*-------------------------------------------------------------------* - * abs_pit_enc() - * - * Encode pitch lag absolutely with resolution for shortest pitches - * depending on parameter 'fr_step': - * fr_step = 2: pitch range encoded with 8 bits - * fr_step = 4: pitch range encoded with 9 bits - *-------------------------------------------------------------------*/ - -/*! r: pitch index */ -int16_t abs_pit_enc( - const int16_t fr_steps, /* i : fractional resolution step */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac /* i : pitch fraction */ -) -{ - int16_t pitch_index; - - if ( limit_flag == 0 ) - { - if ( fr_steps == 2 ) - { - /*-----------------------------------------------------------------* - * The pitch range is encoded absolutely with 8 bits - * and is divided as follows: - * PIT_MIN to PIT_FR1_8b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_8b to PIT_MAX resolution 1 (frac = 0) - *-----------------------------------------------------------------*/ - if ( T0 < PIT_FR1_8b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN * 2 ); - } - else - { - pitch_index = T0 - PIT_FR1_8b + ( ( PIT_FR1_8b - PIT_MIN ) * 2 ); - } - } - else if ( fr_steps == 4 ) - { - /*-------------------------------------------------------------------* - * The pitch range is encoded absolutely with 9 bits - * and is divided as follows: - * PIT_MIN to PIT_FR2_9b-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT_FR2_9b to PIT_FR1_9b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_9b to PIT_MAX resolution 1 (frac = 0) - *-------------------------------------------------------------------*/ - if ( T0 < PIT_FR2_9b ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN * 4 ); - } - else if ( T0 < PIT_FR1_9b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_9b * 2 ) + ( ( PIT_FR2_9b - PIT_MIN ) * 4 ); - } - else - { - pitch_index = T0 - PIT_FR1_9b + ( ( PIT_FR2_9b - PIT_MIN ) * 4 ) + ( ( PIT_FR1_9b - PIT_FR2_9b ) * 2 ); - } - } - else /* fr_step == 0 */ - { - /* not used in the codec */ - pitch_index = 0; - } - } - else if ( limit_flag == 1 ) /* extended Q range */ - { - if ( fr_steps == 2 ) - { - /*-----------------------------------------------------------------* - * The pitch range is encoded absolutely with 8 bits - * and is divided as follows: - * PIT_MIN_EXTEND to PIT_FR1_EXTEND_8b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_EXTEND_8b to PIT_MAX resolution 1 (frac = 0) - *-----------------------------------------------------------------*/ - - if ( T0 < PIT_FR1_EXTEND_8b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN_EXTEND * 2 ); - } - else - { - pitch_index = T0 - PIT_FR1_EXTEND_8b + ( ( PIT_FR1_EXTEND_8b - PIT_MIN_EXTEND ) * 2 ); - } - } - else if ( fr_steps == 4 ) - { - /*-------------------------------------------------------------------* - * The pitch range is encoded absolutely with 9 bits - * and is divided as follows: - * PIT_MIN_EXTEND to PIT_FR2__EXTEND9b-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT_FR2_EXTEND_9b to PIT_FR1__EXTEND9b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_EXTEND_9b to PIT_MAX resolution 1 (frac = 0) - *-------------------------------------------------------------------*/ - - if ( T0 < PIT_FR2_EXTEND_9b ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_EXTEND * 4 ); - } - else if ( T0 < PIT_FR1_EXTEND_9b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_EXTEND_9b * 2 ) + ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ); - } - else - { - pitch_index = T0 - PIT_FR1_EXTEND_9b + ( ( PIT_FR2_EXTEND_9b - PIT_MIN_EXTEND ) * 4 ) + ( ( PIT_FR1_EXTEND_9b - PIT_FR2_EXTEND_9b ) * 2 ); - } - } - else /* fr_step == 0 */ - { - /* not used in the codec */ - pitch_index = 0; - } - } - else /* double-extended Q range */ - { - if ( fr_steps == 2 ) - { - /*-----------------------------------------------------------------* - * The pitch range is encoded absolutely with 8 bits - * and is divided as follows: - * PIT_MIN_DOUBLEEXTEND to PIT_FR1_DOUBLEEXTEND_8b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_DOUBLEEXTEND_8b to PIT_MAX resolution 1 (frac = 0) - *-----------------------------------------------------------------*/ - - if ( T0 < PIT_FR1_DOUBLEEXTEND_8b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_MIN_DOUBLEEXTEND * 2 ); - } - else - { - pitch_index = T0 - PIT_FR1_DOUBLEEXTEND_8b + ( ( PIT_FR1_DOUBLEEXTEND_8b - PIT_MIN_DOUBLEEXTEND ) * 2 ); - } - } - else if ( fr_steps == 4 ) - { - /*-------------------------------------------------------------------* - * The pitch range is encoded absolutely with 9 bits - * and is divided as follows: - * PIT_MIN_DOUBLEEXTEND to PIT_FR2_DOUBLEEXTEND9b-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT_FR2_DOUBLEEXTEND_9b to PIT_FR1_DOOBLEEXTEND9b-1 resolution 1/2 (frac = 0 or 2) - * PIT_FR1_DOUBLEEXTEND_9b to PIT_MAX resolution 1 (frac = 0) - *-------------------------------------------------------------------*/ - - if ( T0 < PIT_FR2_DOUBLEEXTEND_9b ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_DOUBLEEXTEND * 4 ); - } - else if ( T0 < PIT_FR1_DOUBLEEXTEND_9b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT_FR2_DOUBLEEXTEND_9b * 2 ) + ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ); - } - else - { - pitch_index = T0 - PIT_FR1_DOUBLEEXTEND_9b + ( ( PIT_FR2_DOUBLEEXTEND_9b - PIT_MIN_DOUBLEEXTEND ) * 4 ) + ( ( PIT_FR1_DOUBLEEXTEND_9b - PIT_FR2_DOUBLEEXTEND_9b ) * 2 ); - } - } - else /* fr_step == 0 */ - { - /* not used in the codec */ - pitch_index = 0; - } - } - - return pitch_index; -} - -/*-------------------------------------------------------------------* - * delta_pit_enc() - * - * Encode pitch lag differentially from T0_min to T0_max - * with resolution depending on parameter 'fr_step': - * fr_step = 0: resolution 1 (frac = 0), or - * fr_step = 2: resolution 1/2 (frac = 0 or 2), or - * fr_step = 4: resolution 1/4 (frac = 0, 1, 2, or 3) - *-------------------------------------------------------------------*/ - -/*! r: pitch index */ -int16_t delta_pit_enc( - const int16_t fr_steps, /* i : fractional resolution step */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - const int16_t T0_min /* i : delta search min */ -) -{ - int16_t pitch_index; - - if ( fr_steps == 0 ) - { - pitch_index = T0 - T0_min; - } - else if ( fr_steps == 2 ) - { - pitch_index = ( T0 - T0_min ) * 2 + ( T0_frac >> 1 ); - } - else /* fr_steps == 4 */ - { - pitch_index = ( T0 - T0_min ) * 4 + T0_frac; - } - - return pitch_index; -} - -/*-------------------------------------------------------------------* - * pit_Q_enc() - * - * Encode subframe pitch lag - *-------------------------------------------------------------------*/ - -void pit_Q_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t Opt_AMR_WB, /* i : flag indicating AMR-WB IO mode */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t delta, /* i : Half the CL searched interval */ - const int16_t pit_flag, /* i : absolute(0) or delta(1) pitch Q */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max /* o : delta search max */ -) -{ - int16_t pitch_index; - - if ( nBits == 10 ) /* absolute encoding with 10 bits */ - { - if ( limit_flag == 0 ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN * 4 ); - } - else if ( limit_flag == 1 ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_EXTEND * 4 ); - } - else /* limit_flag == 2 */ - { - pitch_index = T0 * 4 + T0_frac - ( PIT_MIN_DOUBLEEXTEND * 4 ); - } - } - else if ( nBits == 9 ) /* absolute encoding with 9 bits */ - { - pitch_index = abs_pit_enc( 4, limit_flag, T0, T0_frac ); - - /* find T0_min and T0_max for delta search */ - if ( Opt_AMR_WB ) - { - limit_T0( L_FRAME, delta, pit_flag, 0, T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ - } - } - else if ( nBits == 8 ) /* absolute encoding with 8 bits */ - { - pitch_index = abs_pit_enc( 2, limit_flag, T0, T0_frac ); - - /* find T0_min and T0_max for delta search */ - if ( Opt_AMR_WB ) - { - limit_T0( L_FRAME, delta, pit_flag, 0, T0, 0, T0_min, T0_max ); /* T0_frac==0 to keep IO with AMR-WB */ - } - } - else if ( nBits == 6 ) /* relative encoding with 6 bits */ - { - pitch_index = delta_pit_enc( 4, T0, T0_frac, *T0_min ); - } - else if ( nBits == 5 ) /* relative encoding with 5 bits */ - { - if ( delta == 8 ) - { - pitch_index = delta_pit_enc( 2, T0, T0_frac, *T0_min ); - } - else /* delta == 4 */ - { - pitch_index = delta_pit_enc( 4, T0, T0_frac, *T0_min ); - } - } - else /* nBits == 4 ) */ /* relative encoding with 4 bits */ - { - if ( delta == 8 ) - { - pitch_index = delta_pit_enc( 0, T0, T0_frac, *T0_min ); - } - else /* delta == 4 */ - { - pitch_index = delta_pit_enc( 2, T0, T0_frac, *T0_min ); - } - } - - if ( !Opt_AMR_WB ) - { - /* find T0_min and T0_max for delta search */ - limit_T0( L_FRAME, delta, L_SUBFR, limit_flag, T0, T0_frac, T0_min, T0_max ); - } - - push_indice( hBstr, IND_PITCH, pitch_index, nBits ); - - return; -} - -/*-------------------------------------------------------------------* - * pit16k_Q_enc() - * - * Encode subframe pitch lag @16kHz core - *-------------------------------------------------------------------*/ - -void pit16k_Q_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t nBits, /* i : # of Q bits */ - const int16_t limit_flag, /* i : restrained(0) or extended(1) Q limits */ - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t *T0_min, /* i/o: delta search min */ - int16_t *T0_max /* o : delta search max */ -) -{ - int16_t pitch_index; - - if ( nBits == 10 ) /* absolute encoding with 10 bits */ - { - if ( T0 < PIT16k_FR2_EXTEND_10b ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT16k_MIN_EXTEND * 4 ); - } - else - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT16k_FR2_EXTEND_10b * 2 ) + ( ( PIT16k_FR2_EXTEND_10b - PIT16k_MIN_EXTEND ) * 4 ); - } - - push_indice( hBstr, IND_PITCH, pitch_index, nBits ); - } - else if ( nBits == 9 ) /* absolute encoding with 9 bits */ - { - { - /*-------------------------------------------------------------------* - * The pitch range is encoded absolutely with 9 bits - * and is divided as follows: - * PIT16k_EXTEND_MIN to PIT16k_FR2_EXTEND_9b-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT16k_FR2_EXTEND_9b to PIT16k_FR1_EXTEND_9b-1 resolution 1/2 (frac = 0 or 2) - * PIT16k_FR1_EXTEND_9b to PIT16k_MAX resolution 1 (frac = 0) - *-------------------------------------------------------------------*/ - - if ( T0 < PIT16k_FR2_EXTEND_9b ) - { - pitch_index = T0 * 4 + T0_frac - ( PIT16k_MIN_EXTEND * 4 ); - } - else if ( T0 < PIT16k_FR1_EXTEND_9b ) - { - pitch_index = T0 * 2 + ( T0_frac >> 1 ) - ( PIT16k_FR2_EXTEND_9b * 2 ) + ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ); - } - else - { - pitch_index = T0 - PIT16k_FR1_EXTEND_9b + ( ( PIT16k_FR2_EXTEND_9b - PIT16k_MIN_EXTEND ) * 4 ) + ( ( PIT16k_FR1_EXTEND_9b - PIT16k_FR2_EXTEND_9b ) * 2 ); - } - } - - push_indice( hBstr, IND_PITCH, pitch_index, 9 ); - } - else /* nBits == 6 */ /* relative encoding with 6 bits */ - { - pitch_index = ( T0 - *T0_min ) * 4 + T0_frac; - - push_indice( hBstr, IND_PITCH, pitch_index, nBits ); - } - - limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, T0, T0_frac, T0_min, T0_max ); - - return; -} - - -/*------------------------------------------------------------------* - * limit_T0_voiced2: - * - * - *------------------------------------------------------------------*/ - -static void limit_T0_voiced2( - const int16_t res, - const int16_t *T_op, - int16_t *T0_min, - int16_t *T0_min_frac, - int16_t *T0_max, - int16_t *T0_max_frac, - const int16_t pit_min, - const int16_t pit_max, - const int16_t i_subfr ) -{ - int16_t t, temp1, temp2; - - /* Lower-bound */ - if ( i_subfr == 0 ) - { - temp1 = ( T_op[0] * res ) - 32; - } - else - { - temp1 = ( T_op[1] * res ) - 32; - } - - if ( T_op[0] < T_op[1] ) - { - t = ( T_op[0] * res ) - 16; - } - else - { - t = ( T_op[1] * res ) - 16; - } - - if ( temp1 < t ) - { - temp1 = t; - } - - temp2 = temp1 / res; - *T0_min = temp2; - *T0_min_frac = temp1 - temp2 * res; - - if ( *T0_min < pit_min ) - { - *T0_min = pit_min; - *T0_min_frac = 0; - } - - /* Higher-bound */ - temp1 = ( *T0_min * res ) + *T0_min_frac + 64 - 1; - - if ( T_op[0] < T_op[1] ) - { - t = ( T_op[1] * res ) + 16 + res - 1; - } - else - { - t = ( T_op[0] * res ) + 16 + res - 1; - } - - if ( temp1 > t ) - { - temp1 = t; - } - - temp2 = temp1 / res; - *T0_max = temp2; - *T0_max_frac = temp1 - temp2 * res; - - if ( *T0_max > pit_max ) - { - *T0_max = pit_max; - *T0_max_frac = res - 1; - temp1 = ( *T0_max * res ) - 64 + res; - temp2 = temp1 / res; - *T0_min = temp2; - *T0_min_frac = temp1 - temp2 * res; - } - - return; -} - - -/*------------------------------------------------------------------* - * Mode2_pit_encode: - * - * Close-loop pitch lag search and pitch lag quantization - * Adaptive excitation construction - *------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void Mode2_pit_encode( - const int16_t coder_type, /* i : coding model */ - const int16_t i_subfr, /* i : subframe index */ - int16_t **pt_indice, /* i/o: quantization indices pointer */ - float *exc, /* i/o: pointer to excitation signal frame */ - const int16_t *T_op, /* i : open loop pitch estimates in current frame */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_min_frac, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - int16_t *T0_max_frac, /* i/o: higher limit for close-loop search */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ - int16_t *T0_res, /* i/o: close loop pitch resolution */ - float *h1, /* i : weighted filter impulse response */ - float *xn, /* i : target vector */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr1b, - const int16_t pit_fr2, - const int16_t pit_max, - const int16_t pit_res_max ) -{ - int16_t pit_flag; - - /* Pitch flag */ - pit_flag = i_subfr; - - if ( i_subfr == ( 2 * L_SUBFR ) ) - { - pit_flag = 0; - } - - /*-----------------------------------------------------------------* - * - Limit range of pitch search - * - Fractional pitch search - * - Pitch quantization - *-----------------------------------------------------------------*/ - - if ( coder_type == 0 ) /*Unvoiced Coding do nothing*/ - { - *T0 = L_SUBFR; - *T0_frac = 0; - *T0_res = 1; - } - else if ( coder_type == 1 ) /* 8/4/4/4 (EVS) */ - { - if ( i_subfr == 0 ) - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - else - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); - - if ( i_subfr == 0 ) - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 2 ) /* 8/5/8/5 (EVS) */ - { - - if ( i_subfr == 0 ) - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - else if ( i_subfr == 2 * L_SUBFR ) - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, T_op[1], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - else - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, pit_flag, pit_min, pit_min, pit_fr1b, L_SUBFR ); - - if ( pit_flag == 0 ) - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 3 ) /* 9/6/6/6 (HRs- VC) */ - { - int16_t pit_res_max2 = pit_res_max; - - if ( pit_min == PIT_MIN_16k ) - { - - pit_res_max2 = pit_res_max >> 1; - } - - if ( i_subfr == 0 ) - { - - limit_T0_voiced2( pit_res_max2, T_op, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max, i_subfr ); - } - else - { - limit_T0_voiced_ivas( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max2, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_fr2, pit_fr1, L_SUBFR ); - - if ( i_subfr == 0 ) /* if 1st subframe */ - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); - } - else - { - Mode2_delta_pit_enc( *T0, *T0_frac, pit_res_max2, *T0_min, *T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 4 ) /* 9/6/9/6 (AMRWB) */ - { - int16_t pit_res_max2 = pit_res_max; - - if ( pit_min == PIT_MIN_16k ) - { - - pit_res_max2 = pit_res_max >> 1; - } - - - if ( ( i_subfr == 0 ) || ( i_subfr == 2 * L_SUBFR ) ) - { - - limit_T0_voiced2( pit_res_max2, T_op, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max, i_subfr ); - } - else - { - limit_T0_voiced_ivas( 6, pit_res_max2, *T0, 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max2, T0_frac, T0_res, pit_res_max, pit_flag, pit_min, pit_fr2, pit_fr1, L_SUBFR ); - - if ( pit_flag == 0 ) /* if 1st/3rd/5th subframe */ - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1, pit_fr2, pit_res_max ); - } - else /* if subframe 2 or 4 */ - { - Mode2_delta_pit_enc( *T0, *T0_frac, pit_res_max2, *T0_min, *T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 8 ) /* 8/5/5/5 (RF all pred mode) */ - { - if ( i_subfr == 0 ) - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - else - { - limit_T0_voiced_ivas( 5, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); - - if ( i_subfr == 0 ) - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); - } - } - else if ( coder_type == 9 ) /* 8/0/8/0 (RF mode Gen pred) */ - { - if ( i_subfr == 0 ) - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, T_op[0], 0, 1, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - else - { - limit_T0_voiced_ivas( 4, pit_res_max >> 1, *T0, *T0_frac, *T0_res, T0_min, T0_min_frac, T0_max, T0_max_frac, pit_min, pit_max ); - } - *T0 = E_GAIN_closed_loop_search( exc, xn, h1, *T0_min, *T0_min_frac, *T0_max, *T0_max_frac, pit_res_max >> 1, T0_frac, T0_res, pit_res_max, i_subfr, pit_min, pit_min, pit_fr1b, L_SUBFR ); - - if ( i_subfr == 0 ) - { - Mode2_abs_pit_enc( *T0, *T0_frac, pt_indice, pit_min, pit_fr1b, pit_min, pit_res_max ); - } - else - { - Mode2_delta_pit_enc( *T0, *T0_frac, ( pit_res_max >> 1 ), *T0_min, *T0_min_frac, pt_indice ); - } - } - else - { - assert( 0 ); - } - - return; -} -#endif - -/*-------------------------------------------------------------------* - * Mode2_abs_pit_enc: - * - * Encode pitch lag absolutely - *-------------------------------------------------------------------*/ - -void Mode2_abs_pit_enc( - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - int16_t **pt_indice, /* i/o: pointer to Vector of Q indexes */ - const int16_t pit_min, - const int16_t pit_fr1, - const int16_t pit_fr2, - const int16_t pit_res_max ) -{ - int16_t pit_res_max_half; - - pit_res_max_half = pit_res_max >> 1; - - if ( T0 < pit_fr2 ) - { - **pt_indice = T0 * pit_res_max + T0_frac - ( pit_min * pit_res_max ); - } - else if ( T0 < pit_fr1 ) - { - **pt_indice = T0 * pit_res_max_half + T0_frac - ( pit_fr2 * pit_res_max_half ) + ( ( pit_fr2 - pit_min ) * pit_res_max ); - } - else - { - **pt_indice = T0 - pit_fr1 + ( ( pit_fr2 - pit_min ) * pit_res_max ) + ( ( pit_fr1 - pit_fr2 ) * pit_res_max_half ); - } - - ( *pt_indice )++; - - return; -} - - -/*-------------------------------------------------------------------* - * Mode2_delta_pit_enc: - * - * Encode pitch lag differentially - *-------------------------------------------------------------------*/ - -void Mode2_delta_pit_enc( - const int16_t T0, /* i : integer pitch lag */ - const int16_t T0_frac, /* i : pitch fraction */ - const int16_t T0_res, /* i : pitch resolution */ - const int16_t T0_min, /* i : delta search min */ - const int16_t T0_min_frac, /* i : delta search min */ - int16_t **pt_indice /* o : pointer to Vector of Q indexes */ -) -{ - - **pt_indice = ( T0 - T0_min ) * T0_res + T0_frac - T0_min_frac; - - ( *pt_indice )++; - - return; -} -#endif diff --git a/lib_enc/pit_enc_fx.c b/lib_enc/pit_enc_fx.c index 6c5403343..ea09805be 100644 --- a/lib_enc/pit_enc_fx.c +++ b/lib_enc/pit_enc_fx.c @@ -473,7 +473,6 @@ Word16 pit_encode_fx( /* o : Fractional pitc return pitch_cl; } -#ifdef IVAS_FLOAT_FIXED Word16 pit_encode_ivas_fx( /* o : Fractional pitch for each subframe */ BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 pitch_bits[], /* i : pitch bits */ @@ -899,7 +898,6 @@ Word16 pit_encode_ivas_fx( /* o : Fractional return pitch_cl; } -#endif /*-------------------------------------------------------------------* * abs_pit_enc() diff --git a/lib_enc/pitch_ol.c b/lib_enc/pitch_ol.c index 8db4b02f5..65b32d74c 100644 --- a/lib_enc/pitch_ol.c +++ b/lib_enc/pitch_ol.c @@ -46,949 +46,3 @@ /*---------------------------------------------------------------------* * Local constants *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - -#define PIT_MIN2 20 /* pit_min for pitch tracking */ -#define PIT_MIN_1 44 /* pitch tracking */ -#define PIT_MIN2_1 24 -#define THR_relE -11.0f -#define THRES0 1.17f /* Threshold to favor smaller pitch lags */ -#define DELTA0 2.0f /* initial range of multiples search */ -#define STEP 1.0f /* increment in range of multiples search */ -#define THRES1 0.4f /* Threshold to favor pitch lags coherence for neighbours */ -#define DELTA_COH 14 /* Maximum pitch lags difference for neighbours to be considered as coherent */ -#define THRES3 0.7f /* Threshold to favor pitch lags coherence with previous frames */ -#define CORR_TH0 0.4f /* Noise threshold for reinforcement with past frame pitch */ -#define CORR_TH1 0.5f /* Noise threshold for reinforcement with neighbourhood pitch correlations */ -#define LEN_X ( ( PIT_MAX / OPL_DECIM ) - ( PIT_MIN2 / OPL_DECIM ) + 1 ) /* Correlation buffer length */ -#define COH_FAC 1.4f /* Factor for measuring the pitch coherence */ -#define NSECT 4 -#define NHFR 3 -#define L_FIR_PO 5 -#define L_MEM ( L_FIR_PO - 2 ) - -/*-----------------------------------------------------------------* - * Local function prototypes - *-----------------------------------------------------------------*/ - -static void pitch_neighbour( const int16_t sect0, const int16_t pitch_tmp[], int16_t pitch[NHFR][2 * NSECT], const float corr_tmp[], float corr[3][2 * NSECT], const float thres1[2 * NHFR], const int16_t ind_tmp[2 * NHFR] ); - -static void find_mult( float *fac, const int16_t pitch0, const int16_t pitch1, const int16_t pit_max0, float *corr, int16_t *old_pitch, float *old_corr, float delta, const float step ); - -static int16_t pitch_coherence( const int16_t pitch0, const int16_t pitch1, const float fac_max, const int16_t diff_max ); - -static void lp_decim2( const float x[], float y[], const int16_t l, float *mem ); - - -/*-----------------------------------------------------------------* - * pitch_ol_init - * - * Open loop pitch variable initialization - *-----------------------------------------------------------------*/ - -void pitch_ol_init( - float *old_thres, /* o : threshold for reinforcement of past pitch influence */ - int16_t *old_pitch, /* o : pitch of the 1st half-frame of previous frame */ - int16_t *delta_pit, /* o : pitch evolution extrapolation */ - float *old_corr /* o : correlation */ -) -{ - *old_thres = 0.0f; - *old_pitch = 0; - *delta_pit = 0; - *old_corr = 0.0f; - - return; -} - -/*-----------------------------------------------------------------* - * pitch_ol() - * - * Compute the open loop pitch lag. - * - * The pitch lag search is divided in three sections of two sets. - * Each section cannot have a pitch multiple. - * We find a maximum for each section. - * We compare the maxima of each section. - * - * As there is a margin between section overlaps, especially for - * longer delays, this section selection is more robust for not - * to find multiples in the same section when pitch evolves rapidly - * - * For each section, the length of the vectors to correlate is - * greater than or equal to the longest pitch delay - *------------------------------------------------------------------*/ - -void pitch_ol( - int16_t pitch[3], /* o : open loop pitch lag for each half-frame */ - float voicing[3], /* o : maximum normalized correlation for each half-frame */ - int16_t *old_pitch, /* i/o: OL pitch of the 2nd half-frame of the last frame */ - float *old_corr, /* i/o: correlation */ - float corr_shift, /* i : normalized correlation correction */ - float *old_thres, /* i/o: maximum correlation weighting with respect to past frame pitch */ - int16_t *delta_pit, /* i/o: old pitch extrapolation correction (added to old pitch) */ - float *st_old_wsp2, /* i/o: weighted speech memory */ - const float *wsp, /* i : weighted speech for current frame and look-ahead */ - float mem_decim2[3], /* i/o: wsp decimation filter memory */ - const float relE, /* i : relative frame energy */ - const int16_t L_look, /* i : look-ahead length */ - const int16_t last_class, /* i : frame classification of last frame */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t Opt_SC_VBR /* i : SC-VBR flag */ -) -{ - float old_wsp2[( L_WSP - L_INTERPOL ) / OPL_DECIM], *wsp2; - float tmp_mem[3], scale1[2 * DELTA_COH - 1]; - float scaled_buf[2 * LEN_X + 3 * ( DELTA_COH - 1 )]; - float cor_temp, cor_buf[2 * LEN_X], *pt1, *pt2, *pt3, *pt4, *pt5 = 0, *pt6 = 0, *pt_cor0, *pt_cor1, *pt_cor2, *pt_cor3, *pt_cor4; - float thres1[2 * NHFR]; - int16_t diff, cnt, ind, ind1, offset, offset1, offset_la = 0, offset_la1 = 0, coh_flag, coh_flag1; - - int16_t i, j, k, m, pit_min, pit_min1, sect0, subsect0, old_tmp, old_tmp1, len_x, len_x1, len_temp, len_temp1; - int16_t pitchX[NHFR][2 * NSECT], pitch_tmp[2 * NHFR], ind_tmp[2 * NHFR], tmp_buf[NHFR + 1]; - float enr, enr1 = 0.0f, enr_norm[NSECT], enr_norm1[NSECT], fac; - float scaledX[NHFR][2 * NSECT], corX[NHFR][2 * NSECT], cor_tmp[2 * NHFR], cor_mean; - - const int16_t *nb_sect, *nb_subsect, *len, *len1, *sublen, *sublen1, *pit_max, *sec_length, *sec_length1; - int16_t ind_corX, ind1_corX; - float pit_min_coding; - - /*--------------------------------------------------------------* - * Initialization - *--------------------------------------------------------------*/ - - nb_sect = nb_sect_12k8; - nb_subsect = nb_subsect_12k8; - - len = len_12k8; - len1 = len1_12k8; - sublen = sublen_12k8; - sublen1 = sublen1_12k8; - pit_max = pit_max_12k8; - sec_length = sec_length_12k8; - sec_length1 = sec_length1_12k8; - - if ( last_class < VOICED_TRANSITION && bwidth != NB ) - { - /* reset last pitch reinforcement in case of unvoiced or transitions: it avoids some pitch doublings */ - *old_thres = 0.0f; - } - - pit_min_coding = PIT_MIN_EXTEND; - if ( ( bwidth != NB && *old_pitch > PIT_MIN ) || - ( bwidth == NB && ( *old_pitch > PIT_MIN2_1 || *old_thres < 0.1 ) ) ) - { - pit_min = PIT_MIN / OPL_DECIM; - pit_min1 = PIT_MIN_1 / OPL_DECIM; - subsect0 = 2; - sect0 = 1; - } - else - { - pit_min = PIT_MIN2 / OPL_DECIM; - pit_min1 = PIT_MIN2_1 / OPL_DECIM; - subsect0 = 0; - sect0 = 0; - } - - len_x = PIT_MAX / OPL_DECIM - pit_min + 1; - len_x1 = PIT_MAX / OPL_DECIM - pit_min1 + 1; - - /*--------------------------------------------------------------* - * Find decimated weighted speech - * Update wsp buffer with the memory - * decimation of wsp[] to search pitch in LF and to reduce complexity - * Extend the decimation of wsp to the end of the speech buffer - * Update wsp memory - *--------------------------------------------------------------*/ - - mvr2r( st_old_wsp2, old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); - wsp2 = old_wsp2 + ( ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); - lp_decim2( wsp, wsp2, L_FRAME, mem_decim2 ); - - mvr2r( mem_decim2, tmp_mem, 3 ); - lp_decim2( &wsp[L_FRAME], &wsp2[L_FRAME / OPL_DECIM], L_look, tmp_mem ); - - mvr2r( &old_wsp2[L_FRAME / OPL_DECIM], st_old_wsp2, ( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM ); - - /*-----------------------------------------------------------------* - * attenuate the correlation correction factor due to noise - * reset correlation buffer outside the useful range - * Find the scaling functions for immediate neigbours and - * further ones - *-----------------------------------------------------------------*/ - - corr_shift *= 0.5f; - set_f( scaled_buf, 0, DELTA_COH - 1 ); - set_f( scaled_buf + ( DELTA_COH - 1 ) + len_x, 0, DELTA_COH - 1 ); - set_f( scaled_buf + 2 * ( DELTA_COH - 1 ) + len_x + len_x1, 0, DELTA_COH - 1 ); - - pt1 = scale1 + DELTA_COH - 1; - pt2 = pt1; - for ( i = 0; i < DELTA_COH; i++ ) - { - *pt1 = -( *old_thres ) / DELTA_COH * i + *old_thres + 1.0f; - *pt2-- = *pt1++; - } - - /*-----------------------------------------------------------------* - * Estimate the new pitch by extrapolating the old pitch value - * for 2 half-frames - *-----------------------------------------------------------------*/ - - old_tmp = *old_pitch + *delta_pit; - - if ( old_tmp > PIT_MAX / OPL_DECIM ) - { - old_tmp = PIT_MAX / OPL_DECIM; - } - - if ( old_tmp < pit_min ) - { - old_tmp = pit_min; - } - - old_tmp1 = old_tmp + *delta_pit; - if ( old_tmp1 > PIT_MAX / OPL_DECIM ) - { - old_tmp1 = PIT_MAX / OPL_DECIM; - } - - if ( old_tmp1 < pit_min ) - { - old_tmp1 = pit_min; - } - - - /*-----------------------------------------------------------------* - * Loop for all three half-frames (current frame + look-ahead) - *-----------------------------------------------------------------*/ - pt_cor0 = scaled_buf + DELTA_COH - 1; - - pt_cor2 = pt_cor0 - pit_min + old_tmp; - pt_cor4 = pt_cor0 - pit_min1 + old_tmp + ( DELTA_COH - 1 ) + len_x; - - for ( i = 0; i < NHFR; i++ ) - { - pt1 = wsp2 + i * 2 * ( L_SUBFR / OPL_DECIM ); - pt2 = pt1 - pit_min; - enr = 0.01f; - pt_cor1 = pt_cor0; - pt4 = pt1 - pit_min1; - pt_cor3 = pt_cor0 + ( DELTA_COH - 1 ) + len_x; - - /*-----------------------------------------------------------------* - * First two half-frames (corresponding to current frame) - *-----------------------------------------------------------------*/ - if ( i < NHFR - 1 ) - { - pt3 = pt1; - pt5 = pt1; - - for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ - { - /*-----------------------------------------------------------------* - * Find fixed vector energy - *-----------------------------------------------------------------*/ - - /* 1st set */ - k = (int16_t) ( pt1 - pt3 ); - for ( k = k + len[j]; k > 0; k-- ) - { - enr += *pt3 * *pt3; - pt3++; - } - enr_norm[j] = enr; - - /* Reduce complexity (length of 'enr1' section is equal or larger than 'enr') */ - pt5 = pt3; - enr1 = enr; - - /* 2nd set */ - k = (int16_t) ( pt1 - pt5 ); - for ( k = k + len1[j]; k > 0; k-- ) - { - enr1 += *pt5 * *pt5; - pt5++; - } - enr_norm1[j] = enr1; - } - - /*-----------------------------------------------------------------* - * Find correlation for the non-overlapping pitch lag values - *-----------------------------------------------------------------*/ - k = (int16_t) ( pt2 - pt1 ); - for ( k = k + pit_max[subsect0]; k >= 0; k-- ) - { - *pt_cor1++ = dotp( pt1, pt2--, sublen[0] ); - } - - /*-----------------------------------------------------------------* - * For each subsection, find the correlation - *-----------------------------------------------------------------*/ - for ( j = subsect0; j < nb_subsect[i]; j++ ) - { - len_temp = sublen[j]; - len_temp1 = sublen1[j]; - - k = (int16_t) ( pt2 - pt1 ); - if ( len_temp < len_temp1 ) - { - for ( k = k + pit_max[j + 1]; k >= 0; k-- ) - { - cor_temp = pt1[0] * pt2[0]; - for ( m = 1; m < len_temp; m++ ) - { - cor_temp += pt1[m] * pt2[m]; - } - *pt_cor1++ = cor_temp; - for ( ; m < len_temp1; m++ ) - { - cor_temp += pt1[m] * pt2[m]; - } - *pt_cor3++ = cor_temp; - pt2--; - } - } - else - { - for ( k = k + pit_max[j + 1]; k >= 0; k-- ) - { - cor_temp = pt1[0] * pt2[0]; - for ( m = 1; m < len_temp1; m++ ) - { - cor_temp += pt1[m] * pt2[m]; - } - *pt_cor3++ = cor_temp; - for ( ; m < len_temp; m++ ) - { - cor_temp += pt1[m] * pt2[m]; - } - *pt_cor1++ = cor_temp; - pt2--; - } - } - } - } - - /*-----------------------------------------------------------------* - * Third half-frame (look-ahead) - *-----------------------------------------------------------------*/ - - else - { - /*-----------------------------------------------------------------* - * For each section in both sets, find fixed vector energy - *-----------------------------------------------------------------*/ - - pt6 = pt1 + L_look / OPL_DECIM - 1; - pt3 = pt6; - pt5 = pt6; - - for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ - { - /* 1st set */ - k = (int16_t) ( pt3 - pt6 ); - for ( k = k + len[j]; k > 0; k-- ) - { - enr += *pt3 * *pt3; - pt3--; - } - - enr_norm[j] = enr; - - pt5 = pt3; - enr1 = enr; - - /* 2nd set */ - k = (int16_t) ( pt5 - pt6 ); - for ( k = k + len1[j]; k > 0; k-- ) - { - enr1 += *pt5 * *pt5; - pt5--; - } - - enr_norm1[j] = enr1; - } - - /* Set pointers */ - if ( sect0 == 0 ) - { - pt2 = pt6 - pit_min; - k = 2; - } - else - { - pt2 = pt6 - pit_max[1] - 1; - k = pit_max[2] - pit_max[1]; - } - - /*-----------------------------------------------------------------* - * Find correlation for the non-overlapping pitch lag values - *-----------------------------------------------------------------*/ - - for ( ; k > 0; k-- ) - { - *pt_cor1 = 0; - for ( m = 0; m < sublen[0]; m++ ) - { - *pt_cor1 += pt6[-m] * pt2[-m]; - } - pt_cor1++; - pt2--; - } - - /*-----------------------------------------------------------------* - * For each subsection, find the correlation (overlapping pitch lag values) - *-----------------------------------------------------------------*/ - - for ( j = subsect0; j < nb_subsect[i]; j++ ) - { - len_temp = sublen[j]; - len_temp1 = sublen1[j]; - - k = pit_max[j + 1] - pit_max[j]; - if ( len_temp < len_temp1 ) - { - for ( ; k > 0; k-- ) - { - cor_temp = pt6[0] * pt2[0]; - for ( m = 1; m < len_temp; m++ ) - { - cor_temp += pt6[-m] * pt2[-m]; - } - *pt_cor1++ = cor_temp; - for ( ; m < len_temp1; m++ ) - { - cor_temp += pt6[-m] * pt2[-m]; - } - *pt_cor3++ = cor_temp; - pt2--; - } - } - else - { - for ( ; k > 0; k-- ) - { - cor_temp = pt6[0] * pt2[0]; - for ( m = 1; m < len_temp1; m++ ) - { - cor_temp += pt6[-m] * pt2[-m]; - } - *pt_cor3++ = cor_temp; - for ( ; m < len_temp; m++ ) - { - cor_temp += pt6[-m] * pt2[-m]; - } - *pt_cor1++ = cor_temp; - pt2--; - } - } - } - } - - /* Save unscaled correlation vector */ - mvr2r( pt_cor0, cor_buf, len_x ); - mvr2r( pt_cor0 + ( DELTA_COH - 1 ) + len_x, cor_buf + len_x, len_x1 ); - - /*-----------------------------------------------------------------* - * scale correlation function in the neighbourhood of - * the extrapolated pitch - *-----------------------------------------------------------------*/ - pt_cor1 = pt_cor2 - ( DELTA_COH - 1 ); - pt_cor3 = pt_cor4 - ( DELTA_COH - 1 ); - pt2 = scale1; - - for ( k = 0; k < 2 * DELTA_COH - 1; k++ ) - { - *pt_cor1++ *= ( *pt2 ); - *pt_cor3++ *= ( *pt2++ ); - } - - /* update for next half-frame */ - pt_cor2 = pt_cor0 - pit_min + old_tmp1; - pt_cor4 = pt_cor0 - pit_min1 + old_tmp1 + ( DELTA_COH - 1 ) + len_x; - /*-----------------------------------------------------------------* - * For each section, find maximum correlation and compute - * normalized correlation - *-----------------------------------------------------------------*/ - - pt_cor1 = pt_cor0; - offset = 0; - pt_cor3 = pt_cor0 + ( DELTA_COH - 1 ) + len_x; - offset1 = 0; - for ( j = sect0; j < nb_sect[i]; j++ ) /* loop for each section */ - { - /* 1st set */ - if ( i == 2 ) - { - offset_la = L_look / OPL_DECIM - 1 - ( len[j] - 1 ); - } - else - { - offset_la = 0; - } - - /* 2nd set */ - if ( i == 2 ) - { - offset_la1 = L_look / OPL_DECIM - 1 - ( len1[j] - 1 ); - } - else - { - offset_la1 = 0; - } - - /* 1st set of candidates */ - ind = maximum( pt_cor1, sec_length[j], 0 ) + offset; - pitchX[i][j] = ind + pit_min; - pt2 = pt1 - pitchX[i][j] + offset_la; /* selected moving vector */ - enr1 = dotp( pt2, pt2, len[j] ) + 0.01f; - enr1 = inv_sqrt( enr_norm[j] * enr1 ); /* 1/sqrt(energy) */ - corX[i][j] = cor_buf[ind] * enr1; /* find best normalized correlation per section */ - scaledX[i][j] = pt_cor0[ind] * enr1; /* find best scaled normalized correlation per section */ - - pt_cor1 += sec_length[j]; - offset = offset + sec_length[j]; - - /* 2nd set of candidates */ - ind1 = maximum( pt_cor3, sec_length1[j], 0 ) + offset1; - pitchX[i][j + NSECT] = ind1 + pit_min1; - pt4 = pt1 - pitchX[i][j + NSECT] + offset_la1; /* selected moving vector */ - enr1 = dotp( pt4, pt4, len1[j] ) + 0.01f; - enr1 = inv_sqrt( enr_norm1[j] * enr1 ); /* 1/sqrt(energy) */ - corX[i][j + NSECT] = cor_buf[ind1 + len_x] * enr1; /* find best normalized correlation per section */ - scaledX[i][j + NSECT] = pt_cor0[ind1 + ( DELTA_COH - 1 ) + len_x] * enr1; /* find best scaled normalized correlation per section */ - - pt_cor3 += sec_length1[j]; - offset1 = offset1 + sec_length1[j]; - } - } - /*-----------------------------------------------------------------* - * Favor a smaller delay if it happens that it has its multiple - * in the longer-delay sections (harmonics check) - *-----------------------------------------------------------------*/ - - for ( i = 0; i < 2; i++ ) /* loop for the 2 half-frames */ - { - fac = THRES0; - find_mult( &fac, pitchX[i][2], pitchX[i][3], pit_max[7], &scaledX[i][2], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in longest-delay section */ - find_mult( &fac, pitchX[i][1], pitchX[i][2], pit_max[5], &scaledX[i][1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ - - if ( ( sect0 == 0 ) && ( ( pitchX[i][0] * 2 ) >= pit_min_coding ) ) - { - find_mult( &fac, pitchX[i][0], pitchX[i][1], pit_max[3], &scaledX[i][0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ - } - fac = THRES0; - find_mult( &fac, pitchX[i][NSECT + 2], pitchX[i][NSECT + 3], pit_max[7], &scaledX[i][NSECT + 2], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in longest-delay section */ - find_mult( &fac, pitchX[i][NSECT + 1], pitchX[i][NSECT + 2], pit_max[6], &scaledX[i][NSECT + 1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ - - if ( ( sect0 == 0 ) && ( pitchX[i][NSECT + 0] * 2 >= pit_min_coding ) ) - { - find_mult( &fac, pitchX[i][NSECT + 0], pitchX[i][NSECT + 1], pit_max[4], &scaledX[i][NSECT + 0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ - } - } - - fac = THRES0; /* the look-ahead */ - find_mult( &fac, pitchX[i][2], pitchX[i][3], pit_max[7], &scaledX[i][2], old_pitch, old_corr, 2.0f, 2.0f ); /* Multiples in longest-delay section */ - find_mult( &fac, pitchX[i][1], pitchX[i][2], pit_max[5], &scaledX[i][1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ - - if ( ( sect0 == 0 ) && ( pitchX[i][0] * 2 >= pit_min_coding ) ) - { - find_mult( &fac, pitchX[i][0], pitchX[i][1], pit_max[3], &scaledX[i][0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ - } - - fac = THRES0; /* the look-ahead */ - find_mult( &fac, pitchX[i][NSECT + 2], pitchX[i][NSECT + 3], pit_max[7], &scaledX[i][NSECT + 2], old_pitch, old_corr, 2.0f, 2.0f ); /* Multiples in longest-delay section */ - find_mult( &fac, pitchX[i][NSECT + 1], pitchX[i][NSECT + 2], pit_max[6], &scaledX[i][NSECT + 1], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 3rd section */ - - if ( ( sect0 == 0 ) && ( pitchX[i][NSECT + 0] * 2 >= pit_min_coding ) ) - { - find_mult( &fac, pitchX[i][NSECT + 0], pitchX[i][NSECT + 1], pit_max[4], &scaledX[i][NSECT + 0], old_pitch, old_corr, DELTA0, STEP ); /* Multiples in 2nd section */ - } - - /*-----------------------------------------------------------------* - * Do 1st estimate for pitch values - * Adjust the normalized correlation using estimated noise level - * Compute the maximum scaling for the neighbour correlation - * reinforcement - *-----------------------------------------------------------------*/ - - for ( i = 0; i < NHFR; i++ ) - { - ind = maximum( scaledX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); - ind = ind + sect0; - ind_tmp[i] = ind; - pitch_tmp[i] = pitchX[i][ind]; - cor_tmp[i] = corX[i][ind]; - cor_tmp[i] += corr_shift; - - if ( cor_tmp[i] > 1.0f ) - { - cor_tmp[i] = 1.0f; - } - thres1[i] = THRES1 * cor_tmp[i]; /* Higher is the neighbour's correlation, higher is the weighting */ - - /* 2nd set of pitch candidates */ - ind1 = maximum( scaledX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); - ind1 += ( sect0 + NSECT ); - ind_tmp[i + NHFR] = ind1; - pitch_tmp[i + NHFR] = pitchX[i][ind1]; - cor_tmp[i + NHFR] = corX[i][ind1]; - cor_tmp[i + NHFR] += corr_shift; - - if ( cor_tmp[i + NHFR] > 1.0f ) - { - cor_tmp[i + NHFR] = 1.0f; - } - thres1[i + NHFR] = THRES1 * cor_tmp[i + NHFR]; /* Higher is the neighbour's correlation, higher is the weighting */ - } - /*-----------------------------------------------------------------* - * Take into account previous and next pitch values of the present - * frame and look-ahead. Choose the pitch lags and normalize - * correlations for each half-frame & look-ahead - *-----------------------------------------------------------------*/ - - pitch_neighbour( sect0, pitch_tmp, pitchX, cor_tmp, scaledX, thres1, ind_tmp ); - for ( i = 0; i < NHFR; i++ ) - { - ind = maximum( scaledX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); - ind = ind + sect0; - ind_corX = maximum( corX[i] + sect0, (int16_t) ( NSECT - sect0 ), 0 ); - ind_corX = ind_corX + sect0; - - ind1 = maximum( scaledX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); - ind1 += ( sect0 + NSECT ); - ind1_corX = maximum( corX[i] + sect0 + NSECT, (int16_t) ( NSECT - sect0 ), 0 ); - ind1_corX += ( sect0 + NSECT ); - - if ( scaledX[i][ind1] > scaledX[i][ind] ) - { - ind = ind1; - } - - if ( Opt_SC_VBR && corX[i][ind1_corX] > corX[i][ind_corX] ) - { - ind_corX = ind1_corX; - } - - if ( Opt_SC_VBR && ( pitchX[i][ind] * 0.4 < pitchX[i][ind_corX] ) && ( pitchX[i][ind] * 0.6 > pitchX[i][ind_corX] ) && ( corX[i][ind_corX] >= 0.9 ) ) /* && (pitchX[i][ind]>50)) */ - { - pitch[i] = pitchX[i][ind_corX]; - voicing[i] = corX[i][ind_corX]; - } - else - { - pitch[i] = pitchX[i][ind]; - voicing[i] = corX[i][ind]; - } - } - - /*-----------------------------------------------------------------* - * Increase the threshold for correlation reinforcement with - * the past if correlation is high and pitch is stable - *-----------------------------------------------------------------*/ - - cor_mean = 0.5f * ( voicing[0] + voicing[1] ) + corr_shift; - if ( cor_mean > 1.0f ) - { - cor_mean = 1.0f; - } - - /* pitch unstable in present frame or from previous frame or normalized correlation too low */ - coh_flag = pitch_coherence( (int16_t) pitch[0], (int16_t) pitch[1], COH_FAC, DELTA_COH ); - coh_flag1 = pitch_coherence( (int16_t) pitch[0], (int16_t) *old_pitch, COH_FAC, DELTA_COH ); - if ( ( coh_flag == 0 ) || ( coh_flag1 == 0 ) || ( cor_mean < CORR_TH0 ) || ( relE < THR_relE ) ) - { - *old_thres = 0.0f; /* Reset the threshold */ - } - else - { - *old_thres += ( 0.16f * cor_mean ); /* The threshold increase is directly dependent on normalized correlation */ - } - - if ( *old_thres > THRES3 ) - { - *old_thres = THRES3; - } - - if ( voicing[1] > voicing[0] ) - { - *old_corr = voicing[1]; - } - else - { - *old_corr = cor_mean; - } - - /*-----------------------------------------------------------------* - * Extrapolate the pitch value for the next frame by estimating - * the pitch evolution. This value is added to the old_pitch - * in the next frame and is then used when the normalized - * correlation is reinforced by the past estimate - *-----------------------------------------------------------------*/ - - tmp_buf[0] = *old_pitch; - for ( i = 0; i < NHFR; i++ ) - { - tmp_buf[i + 1] = pitch[i]; - } - - *delta_pit = 0; - cnt = 0; - for ( i = 0; i < NHFR; i++ ) - { - diff = tmp_buf[i + 1] - tmp_buf[i]; - coh_flag = pitch_coherence( (int16_t) tmp_buf[i], (int16_t) tmp_buf[i + 1], COH_FAC, DELTA_COH ); - if ( coh_flag != 0 ) - { - *delta_pit = *delta_pit + diff; - cnt++; - } - } - - if ( cnt == 2 ) - { - *delta_pit /= 2; - } - - if ( cnt == 3 ) - { - *delta_pit /= 3; - } - - /*-----------------------------------------------------------------* - * update old pitch, upsample pitch - *-----------------------------------------------------------------*/ - - *old_pitch = pitch[1]; - - for ( i = 0; i < NHFR; i++ ) - { - pitch[i] *= OPL_DECIM; - } - - - return; -} - -/*-----------------------------------------------------------------* - * find_mult - * - * Verifies whether max pitch delays in higher sections have multiples - * in lower sections - *-----------------------------------------------------------------*/ - -static void find_mult( - float *fac, /* i/o: correlation scaling factor */ - const int16_t pitch0, /* i : pitch of max correlation in the c section */ - const int16_t pitch1, /* i : pitch of max correlation in the longer-delay section */ - const int16_t pit_max0, /* i : max pitch delay in the longer-delay section */ - float *corr, /* i/o: max correlation in the shorter-delay section */ - int16_t *old_pitch, /* i : pitch from previous frame */ - float *old_corr, /* i : max correlation from previous frame */ - float delta, /* i : initial multiples search range */ - const float step /* i : increment in range of multiples search */ -) -{ - int16_t pit_min; - - pit_min = 2 * pitch0; /* double the shorter-delay section pitch */ - while ( pit_min <= pit_max0 + (int16_t) delta ) /* check for section boundary */ - { - if ( abs( pit_min - pitch1 ) <= (int16_t) delta ) /* if multiple in the allowed range */ - { - if ( *old_corr < 0.6f || (float) pitch0 > (float) *old_pitch * 0.4f ) - { - /* reinforce the normalized correlation */ - *corr *= *fac; - } - *fac *= THRES0; - } - pit_min = pit_min + pitch0; /* next multiple */ - delta += step; /* add the incertitude to the allowed range */ - } - return; -} - -/*---------------------------------------------------------------------------* - * pitch_neighbour - * - * Verifies if the maximum correlation pitch lag is coherent with neighbour - * values - *---------------------------------------------------------------------------*/ -static void pitch_neighbour( - const int16_t sect0, /* i : indicates whether section 0 (below PIT_MIN) is used */ - const int16_t pitch_tmp[], /* i : estimated pitch values for each half-frame & look-ahead */ - int16_t pitch[NHFR][2 * NSECT], /* i : tested pitch values for each half-frame & look-ahead */ - const float corr_tmp[], /* i : raw normalized correlation (before different scalings) */ - float corr[NHFR][2 * NSECT], /* i/o: normalized correlation for each half-frame & look-ahead */ - const float thres1[2 * NHFR], /* i : maximum scaling for the immediate neighbours */ - const int16_t ind_tmp[2 * NHFR] /* i : maximum section indices */ -) -{ - int16_t delta, i, j, k, K, coh_flag; - - for ( k = sect0; k < NSECT; k++ ) /* loop for each section */ - { - if ( k == ( NSECT - 1 ) ) - { - K = 2; /* the number of tests depends on the section */ - } - else - { - K = 3; - } - for ( i = 0; i < K; i++ ) /* loop for the 2 half-frames and the look-ahead */ - { - /* Compare pitch values of the present frame */ - for ( j = 0; j < K; j++ ) /* Verify pitch coherence with neighbours (including past pitch) */ - { - if ( j != i ) /* Exclude itself */ - { - if ( corr_tmp[j] >= CORR_TH1 ) /* reinforcement can happen only if the correlation is high enough */ - { - delta = (int16_t) abs( pitch[i][k] - pitch_tmp[j] ); /* Find difference of pitch values */ - coh_flag = pitch_coherence( (int16_t) pitch[i][k], (int16_t) pitch_tmp[j], COH_FAC, DELTA_COH ); - if ( coh_flag != 0 ) - { - /* Favour section-wise stability */ - if ( ind_tmp[j] == k ) - { - corr[i][k] *= ( -thres1[j] / DELTA_COH * delta + thres1[j] + 1.0f ); /* Favour closer values */ - } - else - { - corr[i][k] *= ( -thres1[j] / DELTA_COH * 0.625f * delta + thres1[j] * 0.625f + 1.0f ); - } - } - } - } - } - } - } - /*---------------------* - * 2nd set of sections - *---------------------*/ - for ( k = sect0; k < NSECT; k++ ) /* loop for each section */ - { - if ( k == ( NSECT - 1 ) ) - { - K = 2; /* the number of tests depends on the section */ - } - else - { - K = 3; - } - for ( i = 0; i < K; i++ ) /* loop for the 2 half-frames and the look-ahead */ - { - /* Compare pitch values of the present frame */ - for ( j = 0; j < K; j++ ) /* Verify pitch coherence with neighbours (including past pitch) */ - { - if ( j != i ) /* Exclude itself */ - { - if ( corr_tmp[j + NHFR] >= CORR_TH1 ) /* reinforcement can happen only if the correlation is high enough */ - { - delta = (int16_t) abs( pitch[i][NSECT + k] - pitch_tmp[j + NHFR] ); /* Find difference of pitch values */ - coh_flag = pitch_coherence( (int16_t) pitch[i][NSECT + k], (int16_t) pitch_tmp[j + NHFR], COH_FAC, DELTA_COH ); - if ( coh_flag != 0 ) - { - /* Favour section-wise stability */ - if ( ind_tmp[j + NHFR] == ( NSECT + k ) ) - { - corr[i][NSECT + k] *= ( -thres1[j + NHFR] / DELTA_COH * delta + thres1[j + NHFR] + 1.0f ); /* Favour closer values */ - } - else - { - corr[i][NSECT + k] *= ( -thres1[j + NHFR] / DELTA_COH * 0.625f * delta + thres1[j + NHFR] * 0.625f + 1.0f ); - } - } - } - } - } - } - } - return; -} - -/*-----------------------------------------------------------------* - * pitch_coherence - * - * Verify if pitch evolution is smooth - *-----------------------------------------------------------------*/ - -static int16_t pitch_coherence( - const int16_t pitch0, /* i : first pitch to compare */ - const int16_t pitch1, /* i : 2nd pitch to compare */ - const float fac_max, /* i : max ratio of both values */ - const int16_t diff_max /* i : max difference of both values */ -) -{ - int16_t smaller, larger; - if ( pitch1 < pitch0 ) /* Finds smaller and larger of 2 short values */ - { - smaller = pitch1; - larger = pitch0; - } - else - { - smaller = pitch0; - larger = pitch1; - } - if ( ( (float) larger < fac_max * (float) smaller ) && ( ( larger - smaller ) < diff_max ) ) - { - return 1; - } - else - { - return 0; - } -} - - -/*-----------------------------------------------------------------* - * lp_decim2: - * - * Decimate a vector by 2 with 2nd order fir filter. - *-----------------------------------------------------------------*/ - -static void lp_decim2( - const float x[], /* i : signal to process */ - float y[], /* o : processed signals */ - const int16_t l, /* i : size of filtering */ - float *mem /* i/o: memory (size=3) */ -) -{ - const float *p_h; - float temp, *p_x, x_buf[L_FRAME_PLUS + L_MEM]; - int16_t i, j, k; - - /* copy initial filter states into buffer */ - p_x = x_buf; - for ( i = 0; i < L_MEM; i++ ) - { - *p_x++ = mem[i]; - } - for ( i = 0; i < l; i++ ) - { - *p_x++ = x[i]; - } - for ( i = 0; i < L_MEM; i++ ) - { - mem[i] = x[l - L_MEM + i]; - } - for ( i = 0, j = 0; i < l; i += 2, j++ ) - { - p_x = &x_buf[i]; - p_h = h_fir; - temp = 0.0f; - - for ( k = 0; k < L_FIR_PO; k++ ) - { - temp += *p_x++ * *p_h++; - } - y[j] = temp; - } - return; -} -#endif diff --git a/lib_enc/pitch_ol2.c b/lib_enc/pitch_ol2.c index 2ed687950..4e4277eef 100644 --- a/lib_enc/pitch_ol2.c +++ b/lib_enc/pitch_ol2.c @@ -41,10 +41,8 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local constants @@ -59,116 +57,12 @@ * The pitch is searched in the interval PIT_MAX ) - { - t0_max = PIT_MAX; - } - t_max = t0_max + L_INTERPOL1; - - pt_wsp = wsp + pos; - pt_cor = cor; - for ( t = t_min; t <= t_max; t++ ) - { - *pt_cor++ = dotp( pt_wsp, pt_wsp - t, L_SUBFR ); - } - - pt_cor = cor + L_INTERPOL1; - cor_max = *pt_cor++; - t1 = t0_min; - for ( t = t0_min + 1; t <= t0_max; t++ ) - { - if ( *pt_cor > cor_max ) - { - cor_max = *pt_cor; - t1 = t; - } - pt_cor++; - } - - /*------------------------------------------------------------------* - * Search fractional pitch with 1/4 subsample resolution. - * search the fractions around t0 and choose the one which maximizes - * the interpolated normalized correlation. - *-----------------------------------------------------------------*/ - - pt_cor = cor + L_INTERPOL1 - t0_min; - t0 = t1; - - step = 1; /* 1/4 subsample resolution */ - fraction = 1; - - if ( t0 == t0_min ) /* Limit case */ - { - fraction = 0; - cor_max = interpolation( &pt_cor[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); - } - else /* Process negative fractions */ - { - t0--; - cor_max = interpolation( &pt_cor[t0], E_ROM_inter4_1, fraction, PIT_UP_SAMP, 4 ); - for ( i = ( fraction + step ); i <= 3; i = i + step ) - { - temp = interpolation( &pt_cor[t0], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - } - } - } - - for ( i = 0; i <= 3; i = i + step ) /* Process positive fractions */ - { - temp = interpolation( &pt_cor[t1], E_ROM_inter4_1, i, PIT_UP_SAMP, 4 ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - t0 = t1; - } - } - - *pitch_fr = t0 + (float) fraction / 4.0f; - pred_lt4_flt( pt_wsp, wsp_fr, t0, fraction, L_SUBFR, E_ROM_inter4_1, 4, PIT_UP_SAMP ); - - enr_wsp = dotp( pt_wsp, pt_wsp, L_SUBFR ) + 0.01f; - enr_old = dotp( wsp_fr, wsp_fr, L_SUBFR ) + 0.01f; - *voicing_fr = cor_max * inv_sqrt( enr_wsp * enr_old ); - - return; -} -#endif /*-------------------------------------------------------------------* * StableHighPitchDetect() * * Very short stable pitch detection *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void StableHighPitchDetect_ivas_fx( Word16 *flag_spitch, /* o : flag to indicate very short stable pitch */ Word16 pitch[], /* i/o: OL pitch buffer */ @@ -405,174 +299,3 @@ void StableHighPitchDetect_ivas_fx( return; } - -#else -void StableHighPitchDetect( - int16_t *flag_spitch, /* o : flag to indicate very short stable pitch*/ - int16_t pitch[], /* i/o: OL pitch buffer */ - const float voicing[], /* i : OL pitch gains */ - const float Bin_E[], /* i : per bin log energy spectrum */ - const float wsp[], /* i : weighted speech */ - const int16_t localVAD, /* i : local VAD flag */ - float *voicing_sm, /* i/o: smoothed open-loop pitch gains */ - float *voicing0_sm, /* i/o: smoothed high pitch gains */ - float *LF_EnergyRatio_sm, /* i/o: smoothed [0, 300Hz] relative peak energy*/ - int16_t *predecision_flag, /* i/o: predecision flag */ - float *diff_sm, /* i/o: smoothed pitch frequency difference */ - float *energy_sm /* i/o: smoothed energy around pitch frequency */ -) -{ - int16_t i, pitch_freq_point, pit_min_up; - int16_t T, Tp, pit_min; - - float voicing_m; - float energy0, energy1, ratio_float, cor_max, diff, sum_energy; - const float *pt_wsp; - - voicing_m = mean( voicing, 3 ); - *voicing_sm = 0.75f * ( *voicing_sm ) + 0.25f * voicing_m; - - - /* initial short pitch possibility pre-decision */ - pitch_freq_point = (int16_t) ( L_FFT / pitch[1] + 0.5f ); - diff = 0.0f; - sum_energy = 0.0f; - - for ( i = 1; i < 2 * pitch_freq_point; i++ ) - { - diff += ( Bin_E[pitch_freq_point] - Bin_E[i] ); - sum_energy += Bin_E[i]; - } - sum_energy /= ( 2 * pitch_freq_point - 1 ); - - *diff_sm = 0.2f * diff + 0.8f * *diff_sm; - *energy_sm = 0.2f * sum_energy + 0.8f * *energy_sm; - diff /= sum_energy; - - if ( *diff_sm < -10 && *energy_sm < 38.5 && diff < -0.8 ) - { - *predecision_flag = 1; - } - - if ( *diff_sm > 10 && *energy_sm > 83 && diff > 0.5 ) - { - *predecision_flag = 0; - } - - /* short pitch possiblity pre-decision */ - maximum( Bin_E, 7, &energy0 ); - maximum( Bin_E + 8, 7, &energy1 ); - ratio_float = max( energy1 - energy0, 0 ); - ratio_float *= max( voicing_m, 0 ); - - *LF_EnergyRatio_sm = ( 15 * ( *LF_EnergyRatio_sm ) + ratio_float ) / 16; - - if ( *LF_EnergyRatio_sm > 35 || ratio_float > 50 ) - { - *predecision_flag = 1; - } - - if ( *LF_EnergyRatio_sm < 16 ) - { - *predecision_flag = 0; - } - - /* short pitch candidate detection */ - Tp = pitch[1]; - cor_max = 0; - - pt_wsp = wsp + 3 * L_SUBFR; - pit_min = PIT_MIN_DOUBLEEXTEND; - pit_min_up = PIT_MIN; - - for ( T = pit_min; T <= pit_min_up; T++ ) - { - energy1 = dotp( pt_wsp, pt_wsp - T, L_SUBFR ); - - if ( energy1 > cor_max || T == pit_min ) - { - cor_max = energy1; - Tp = T; - } - } - - energy0 = dotp( pt_wsp, pt_wsp, L_SUBFR ) + 0.01f; - energy1 = dotp( pt_wsp - Tp, pt_wsp - Tp, L_SUBFR ) + 0.01f; - cor_max *= inv_sqrt( energy0 * energy1 ); - *voicing0_sm = 0.75f * ( *voicing0_sm ) + 0.25f * cor_max; - - /* final short pitch correction */ - *flag_spitch = 0; - if ( localVAD && *predecision_flag && *voicing0_sm > 0.65f && *voicing0_sm > 0.7f * ( *voicing_sm ) ) - { - *flag_spitch = 1; - - pitch[0] = Tp; - pitch[1] = Tp; - pitch[2] = Tp; - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * pitchDoubling_det() - * Multiple pitch doubling detector - * - *-------------------------------------------------------------------*/ - -void pitchDoubling_det( - const float *wspeech, - int16_t *pitch_ol, - float *pitch_fr, - float *voicing_fr ) -{ - float new_op_fr[2]; - float new_voicing[2]; - int16_t new_Top[2]; - int16_t m, T; - - /*save initial values*/ - new_Top[0] = pitch_ol[0]; - new_Top[1] = pitch_ol[1]; - for ( m = 2; m < 5; m++ ) - { - T = pitch_ol[0] / m; - if ( T >= PIT_MIN_12k8 ) - { - pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[0], &new_voicing[0], 0, wspeech, 2 ); - pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[1], &new_voicing[1], L_SUBFR, wspeech, 2 ); - - if ( ( new_voicing[0] + new_voicing[1] ) > ( voicing_fr[0] + voicing_fr[1] ) ) - { - new_Top[0] = T; - pitch_fr[0] = new_op_fr[0]; - pitch_fr[1] = new_op_fr[1]; - voicing_fr[0] = new_voicing[0]; - voicing_fr[1] = new_voicing[1]; - } - } - - T = pitch_ol[1] / m; - if ( T >= PIT_MIN_12k8 ) - { - pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[0], &new_voicing[0], 2 * L_SUBFR, wspeech, 2 ); - pitch_ol2( PIT_MIN_SHORTER, T, &new_op_fr[1], &new_voicing[1], 3 * L_SUBFR, wspeech, 2 ); - - if ( ( new_voicing[0] + new_voicing[1] ) > ( voicing_fr[2] + voicing_fr[3] ) ) - { - new_Top[1] = T; - pitch_fr[2] = new_op_fr[0]; - pitch_fr[3] = new_op_fr[1]; - voicing_fr[2] = new_voicing[0]; - voicing_fr[3] = new_voicing[1]; - } - } - } - pitch_ol[0] = new_Top[0]; - pitch_ol[1] = new_Top[1]; - - return; -} -#endif diff --git a/lib_enc/plc_enc_ext.c b/lib_enc/plc_enc_ext.c index 3928a40a8..404ee401e 100644 --- a/lib_enc/plc_enc_ext.c +++ b/lib_enc/plc_enc_ext.c @@ -41,98 +41,3 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -#define NBITS_GACELP 5 - -/*-------------------------------------------------------------------* - * init_PLC_enc() - * - * - *-------------------------------------------------------------------*/ - -void init_PLC_enc( - PLC_ENC_EVS_HANDLE hPlcExt, - const int32_t sr_core ) -{ - int16_t itr; - - hPlcExt->enableGplc = 0; - hPlcExt->calcOnlylsf = 1; - hPlcExt->nBits = NBITS_GACELP; - hPlcExt->stab_fac = 0; - set_f( hPlcExt->lsfoldbfi0, 0.0f, M ); - set_f( hPlcExt->lsfoldbfi1, 0.0f, M ); - set_f( hPlcExt->lsf_adaptive_mean, 0.0f, M ); - set_f( hPlcExt->old_exc, 0.0f, 8 ); - set_f( hPlcExt->mem_MA, 0.0f, M ); - set_f( hPlcExt->lsfold, 0.0f, M ); - set_f( hPlcExt->lspold, 0.0f, M ); - - if ( sr_core == INT_FS_12k8 ) - { - hPlcExt->T0_4th = L_SUBFR; - hPlcExt->T0 = L_SUBFR; - for ( itr = 0; itr < M; itr++ ) - { - hPlcExt->lsf_con_flt[itr] = lsf_init[itr]; - hPlcExt->last_lsf_ref_flt[itr] = lsf_init[itr]; - hPlcExt->last_lsf_con_flt[itr] = lsf_init[itr]; - } - } - else - { - hPlcExt->T0_4th = L_SUBFR; - hPlcExt->T0 = L_SUBFR; - for ( itr = 0; itr < M; itr++ ) - { - hPlcExt->lsf_con_flt[itr] = lsf_init[itr] * 1.25f; - hPlcExt->last_lsf_ref_flt[itr] = lsf_init[itr] * 1.25f; - hPlcExt->last_lsf_con_flt[itr] = lsf_init[itr] * 1.25f; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * gPLC_encInfo() - * - * Function to extract and write guided information - *-------------------------------------------------------------------*/ - -void gPLC_encInfo( - PLC_ENC_EVS_HANDLE hPlcExt, - const int32_t total_brate, - const int16_t bwidth, - const int16_t last_clas, - const int16_t coder_type ) -{ - if ( hPlcExt ) - { - hPlcExt->calcOnlylsf = 1; - if ( bwidth >= WB && total_brate == ACELP_24k40 ) - { - hPlcExt->enableGplc = 1; - - if ( ( last_clas == VOICED_CLAS || last_clas == ONSET ) && ( coder_type == VOICED || coder_type == GENERIC ) ) - { - hPlcExt->nBits = NBITS_GACELP; - hPlcExt->calcOnlylsf = 0; - } - else - { - hPlcExt->nBits = 1; - } - } - else - { - hPlcExt->enableGplc = 0; - hPlcExt->nBits = 0; - } - } - - return; -} -#endif diff --git a/lib_enc/ppp_enc.c b/lib_enc/ppp_enc.c index 0f21f8629..d1de09bc7 100644 --- a/lib_enc/ppp_enc.c +++ b/lib_enc/ppp_enc.c @@ -41,433 +41,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * DTFS_getSpEngyFromResAmp() - * - * Get speech energy from the DTFS - *-------------------------------------------------------------------*/ - -static float DTFS_getSpEngyFromResAmp( - DTFS_STRUCTURE X, /* i : DTFS */ - float lband, /* i : Low band end to get energy from */ - float hband, /* i : High band end to get energy from */ - const float *curr_lsp /* i : LPCs */ -) -{ - int16_t i, k; - float w, tmp, Re, Im; - double en, freq, fdiff; - - fdiff = (float) INT_FS_12k8 / X.lag; - - if ( hband == X.upper_cut_off_freq ) - { - hband = 4001.0; - } - - en = 0.0f; - for ( freq = 0.0, k = 0; k <= min( X.lag >> 1, X.nH_4kHz ); k++, freq += fdiff ) - { - if ( X.a[k] < 0.0 ) - { - X.a[k] = 0.0; - } - - if ( freq < hband && freq >= lband ) - { - Re = 1.0f; - Im = 0.0f; - tmp = (float) ( PI2 * freq / (float) INT_FS_12k8 ); - for ( i = 0, w = tmp; i < M + 1; i++, w += tmp ) - { - Re += (float) ( curr_lsp[i] * cos( w ) ); - Im -= (float) ( curr_lsp[i] * sin( w ) ); - } - if ( k == 0 || ( X.lag % 2 == 0 && k == X.lag >> 1 ) ) - { - en += X.a[k] * X.a[k] / ( Re * Re + Im * Im ); - } - else - { - en += 2.0 * X.a[k] * X.a[k] / ( Re * Re + Im * Im ); - } - } - } - return ( (float) en ); -} - -/*-------------------------------------------------------------------* - * DTFS_quant_cw() - * - * DTFS quantization - *-------------------------------------------------------------------*/ - -#define P_CBSIZE 64 - -static int16_t DTFS_quant_cw( - DTFS_STRUCTURE *X, /* i/o: DTFS unquant inp, quant out */ - const int16_t pl, /* i : Previous lag */ - const float *curr_lpc, /* i : LPC */ - int16_t *POWER_IDX, /* o : Power index */ - int16_t *AMP_IDX, /* o : Amplitude index */ - float *lastLgainE, /* i/o: last frame lowband gain */ - float *lastHgainE, /* i/o: last frame highband gain */ - float *lasterbE /* i/o: last frame ERB vector */ -) -{ - int16_t num_erb = 0; - const float( *PowerCB )[2] = NULL; - float G_CURR_ERB[NUM_ERB_WB]; - float G_A_POWER[2]; - float tmp, w[2], target1, target2, error, minerror; - float mfreq[NUM_ERB_WB], diff_erb[NUM_ERB_WB], curr_erb[NUM_ERB_WB]; - int16_t j, slot[NUM_ERB_WB], bincount; - int16_t returnFlag = 1; - float amperror; - - if ( X->upper_cut_off_freq == 4000.0 ) - { - num_erb = NUM_ERB_NB; - PowerCB = PowerCB_NB; - } - else if ( X->upper_cut_off_freq == 6400.0 ) - { - num_erb = NUM_ERB_WB; - PowerCB = PowerCB_WB; - } - - /* Getting the Speech Domain Energy LOG Ratio */ - w[0] = (float) max( 1E-10, log10( DTFS_getSpEngyFromResAmp( *X, 0.0, 1104.5, curr_lpc ) ) ); - w[1] = (float) max( 1E-10, log10( DTFS_getSpEngyFromResAmp( *X, 1104.5, X->upper_cut_off_freq, curr_lpc ) ) ); - tmp = w[0] + w[1]; - w[0] /= tmp; - w[1] /= tmp; - - /* Power Quantization */ - G_A_POWER[0] = (float) log10( X->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ) ); - G_A_POWER[1] = (float) log10( X->lag * DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ) ); - target1 = G_A_POWER[0] - *lastLgainE; - target2 = G_A_POWER[1] - *lastHgainE; - minerror = (float) HUGE_VAL; - *POWER_IDX = -1; - for ( j = 0; j < P_CBSIZE; j++ ) - { - error = (float) ( w[0] * fabs( target1 - PowerCB[j][0] ) + w[1] * fabs( target2 - PowerCB[j][1] ) ); - if ( ( target1 >= PowerCB[j][0] ) && ( target2 >= PowerCB[j][1] ) ) - { - error *= 0.8f; - } - if ( error < minerror ) - { - minerror = error; - *POWER_IDX = j; - } - } - DTFS_to_erb( *X, curr_erb ); - - for ( j = 0; j < num_erb; j++ ) - { - G_CURR_ERB[j] = curr_erb[j]; - } - erb_slot( X->lag, slot, mfreq, num_erb ); - /* Amplitude Quantization */ - erb_diff( lasterbE, pl, curr_erb, X->lag, curr_lpc, diff_erb, AMP_IDX, num_erb ); - - /* Amplitude Dequantization */ - erb_add( curr_erb, X->lag, lasterbE, pl, AMP_IDX, num_erb ); - curr_erb[0] = curr_erb[1] * 0.3f; - curr_erb[num_erb - 2] = curr_erb[num_erb - 3] * 0.3f; - curr_erb[num_erb - 1] = 0; - /* Determine if the amplitude quantization is good enough */ - amperror = 0.0; - bincount = 0; - for ( j = 1; j < 10; j++ ) - { - if ( slot[j] != 0 ) - { - amperror += (float) ( fabs( G_CURR_ERB[j] - curr_erb[j] ) ); - bincount++; - } - } - amperror /= bincount; - - if ( ( amperror > 0.47 ) && ( target1 > -0.4 ) ) - { - returnFlag = 0; /* Bumping up */ - } - - DTFS_erb_inv( curr_erb, slot, mfreq, X, num_erb ); - - /* Back up the lasterbE memory after power normalization */ - DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, X ); - DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, 1.0, X ); - - DTFS_to_erb( *X, lasterbE ); - - /* Power Dequantization */ - *lastLgainE += (float) PowerCB[*POWER_IDX][0]; - *lastHgainE += (float) PowerCB[*POWER_IDX][1]; - target1 = (float) pow( 10.0, (double) ( *lastLgainE ) ) / X->lag; - - if ( !( target1 >= 0.0 ) ) - { - target1 = 0; - } - - DTFS_setEngyHarm( 92.0f, 1104.5f, 0.0f, 1104.5f, target1, X ); - target2 = (float) pow( 10.0, (double) ( *lastHgainE ) ) / X->lag; - - if ( !( target2 >= 0.0 ) ) - { - target2 = 0; - } - - DTFS_setEngyHarm( 1104.5, X->upper_cut_off_freq_of_interest, 1104.5, X->upper_cut_off_freq, target2, X ); - - return returnFlag; /* amp quant performance pass/fail */ -} - -/*-------------------------------------------------------------------* - * DTFS_alignment_fine_new() - * - * Shift value for DTFS finer alignment. - *-------------------------------------------------------------------*/ - -static float DTFS_alignment_fine_new( - DTFS_STRUCTURE X1_DTFS, /* i : X1 the reference DTFS to keep fixed */ - DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ - float Eshift /* i : Expected shift - coarse value */ -) -{ - int16_t k; - float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n; - - if ( X1_DTFS.lag < X2_DTFS.lag ) - { - DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); - } - maxcorr = (float) -HUGE_VAL; - fshift = Eshift; - Adiff = 20.0f; - diff = 1.0f; - for ( n = Eshift - Adiff + 1; n <= Eshift + Adiff; n += diff ) - { - corr = tmp = 0.0; - /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide outside loops */ - tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); - - for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH ); k++, tmp += tmp1 ) - { - corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); - corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); - } - if ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) > maxcorr ) - { - fshift = n; - maxcorr = corr; - } - } - - return fshift; /* o : shift value to shift X2 by */ -} - - -/*-------------------------------------------------------------------* - * ppp_quarter_encoder() - * - * PPP quarter encoder - *--------------------------------------------------------------------*/ - -ivas_error ppp_quarter_encoder( - int16_t *returnFlag, /* o : return value */ - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - DTFS_STRUCTURE *CURRCW_Q, /* o : Quantized (amp/phase) DTFS */ - DTFS_STRUCTURE *TARGETCW, /* o : DTFS with quant phase but unquant Amp */ - const int16_t prevCW_lag, /* i : previous lag */ - DTFS_STRUCTURE vCURRCW_NQ, /* i : Unquantized DTFS */ - const float *curr_lpc, /* i : LPCS */ - float *lastLgainE, /* i/o: last low band gain */ - float *lastHgainE, /* i/o: last high band gain */ - float *lasterbE, /* i/o: last ERB vector */ - DTFS_STRUCTURE PREV_CW_E /* i : past DTFS */ -) -{ - DTFS_STRUCTURE *PREVDTFS; - float tmp, temp_pl, temp_l; - int16_t l; - int16_t POWER_IDX; /* Codebook index for the power quantization for PPP */ - int16_t AMP_IDX[2]; /* Codebook index for the Amplitude quantization for PPP */ - float Erot = 0.0, z = 0.0; - ivas_error error; - - error = IVAS_ERR_OK; - *returnFlag = 1; - - if ( ( error = DTFS_new( &PREVDTFS ) ) != IVAS_ERR_OK ) - { - return error; - } - - - DTFS_copy( CURRCW_Q, vCURRCW_NQ ); - DTFS_copy( PREVDTFS, PREV_CW_E ); - - l = CURRCW_Q->lag; - temp_l = (float) CURRCW_Q->lag; - temp_pl = (float) prevCW_lag; - - DTFS_adjustLag( PREVDTFS, l ); - - z = ( ( L_FRAME - temp_l ) * ( temp_l + temp_pl ) ) / ( 2 * temp_l * temp_pl ); - - Erot = (float) ( temp_l - rint_new( temp_l * ( z - floor( z ) ) ) ); - - DTFS_phaseShift( PREVDTFS, (float) ( PI2 * Erot / CURRCW_Q->lag ) ); - DTFS_car2pol( PREVDTFS ); - - /* Amplitude Quantization */ - DTFS_car2pol( CURRCW_Q ); /* at this point currCW_q=curr_nq */ - - *returnFlag = DTFS_quant_cw( CURRCW_Q, prevCW_lag, curr_lpc, &POWER_IDX, AMP_IDX, lastLgainE, lastHgainE, lasterbE ); - - push_indice( hBstr, IND_AMP0, AMP_IDX[0], 6 ); - push_indice( hBstr, IND_AMP1, AMP_IDX[1], 6 ); - push_indice( hBstr, IND_POWER, POWER_IDX, 6 ); - - DTFS_copy( TARGETCW, *CURRCW_Q ); - - /* Copying phase spectrum over */ - mvr2r( PREVDTFS->b, CURRCW_Q->b, (int16_t) ( CURRCW_Q->lag >> 1 ) + 1 ); - - DTFS_pol2car( CURRCW_Q ); - DTFS_pol2car( TARGETCW ); - tmp = DTFS_alignment_fine_new( *TARGETCW, *CURRCW_Q, 0.0 ); - - if ( ( ( tmp + 3 ) > 7 ) || ( ( tmp + 3 ) < 0 ) ) - { - tmp = 0; - *returnFlag = 0; - } - - DTFS_phaseShift( CURRCW_Q, (float) ( PI2 * tmp / CURRCW_Q->lag ) ); - - push_indice( hBstr, IND_GLOBAL_ALIGNMENT, (int16_t) ( tmp + 3 ), 3 ); - - free( PREVDTFS ); - - return error; -} - - -/*-------------------------------------------------------------------* - * set_ppp_mode() - * - * Determine if the current frame should be coded by PPP or not - * Impose PPP - CELP - CELP pattern - *-------------------------------------------------------------------*/ - -void set_ppp_mode( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t noisy_speech_HO, /* i : SC-VBR noisy speech HO flag */ - const int16_t clean_speech_HO, /* i : SC-VBR clean speech HO flag */ - const int16_t NB_speech_HO, /* i : SC-VBR NB speech HO flag */ - const int16_t localVAD_he /* i : HE-SAD flag without hangover*/ -) -{ - SC_VBR_ENC_HANDLE hSC_VBR = st->hSC_VBR; - - if ( st->vad_flag == 1 && - ( noisy_speech_HO == 1 || clean_speech_HO == 1 || NB_speech_HO == 1 ) && - ( st->localVAD == 0 || localVAD_he == 0 ) ) - { - st->coder_type = UNVOICED; - } - - if ( st->coder_type == INACTIVE && st->vad_flag == 0 && hSC_VBR->last_nelp_mode == 1 ) /* avoid HO frame go to GSC */ - { - st->coder_type = UNVOICED; - } - - /* force the coder to NELP mode during the first five frames */ - /* this will indicate the decoder that the coder is operating in the VBR mode */ - if ( st->ini_frame < 5 ) - { - st->coder_type = UNVOICED; - st->vad_flag = 1; - } - - /* Pattern PPP-CELP-CELP (pppcountE holds number of consecutive PPP frames) */ - if ( st->coder_type != VOICED || st->last_coder_type == TRANSITION ) - { - /* ensure no transient to PPP transition */ - hSC_VBR->pppcountE = 0; - } - else - { - /* current mode is voiced */ - hSC_VBR->pppcountE++; - - if ( ( hSC_VBR->pppcountE == 1 && hSC_VBR->last_last_ppp_mode != 1 && !hSC_VBR->rate_control ) || - ( hSC_VBR->pppcountE == 1 && hSC_VBR->mode_QQF ) ) - { - hSC_VBR->ppp_mode = 1; - st->core_brate = PPP_NELP_2k80; - } - else if ( hSC_VBR->pppcountE == 2 ) - { - if ( hSC_VBR->last_ppp_mode == 1 && !hSC_VBR->mode_QQF ) - { - /* QFF mode */ - hSC_VBR->ppp_mode = 0; - } - else - { - /* QQF Mode */ - hSC_VBR->ppp_mode = 1; - st->core_brate = PPP_NELP_2k80; - } - } - else - { - hSC_VBR->ppp_mode = 0; - hSC_VBR->pppcountE = 0; - } - } - - if ( hSC_VBR->ppp_mode == 0 && hSC_VBR->set_ppp_generic == 1 ) - { - hSC_VBR->set_ppp_generic = 0; - st->coder_type = GENERIC; - } - - if ( st->last_core == HQ_CORE ) - { - hSC_VBR->ppp_mode = 0; - hSC_VBR->set_ppp_generic = 0; - st->coder_type = TRANSITION; - } - - if ( hSC_VBR->last_ppp_mode && !hSC_VBR->ppp_mode && st->sp_aud_decision1 && st->bwidth == NB && st->Opt_SC_VBR ) /*if it were about to go from ppp->HQ*/ - { - hSC_VBR->avoid_HQ_VBR_NB = 1; - st->coder_type = GENERIC; - } - - if ( hSC_VBR->last_nelp_mode && st->sp_aud_decision1 && st->bwidth == NB && st->Opt_SC_VBR ) /*if it were about to go from nelp->HQ*/ - { - hSC_VBR->avoid_HQ_VBR_NB = 1; - st->coder_type = GENERIC; - } - - if ( ( ( st->old_pitch_buf[( 2 * NB_SUBFR ) - 1] > PPP_LAG_THRLD ) || ( st->pitch[1] > PPP_LAG_THRLD ) || !st->last_Opt_SC_VBR ) && ( hSC_VBR->ppp_mode == 1 ) ) - { - hSC_VBR->ppp_mode = 0; - st->core_brate = ACELP_7k20; - } - - return; -} -#endif diff --git a/lib_enc/pre_proc.c b/lib_enc/pre_proc.c index f9210f675..dc0d09898 100644 --- a/lib_enc/pre_proc.c +++ b/lib_enc/pre_proc.c @@ -42,976 +42,5 @@ #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * pre_proc() - * - * Pre-processing (spectral analysis, LP analysis, VAD, OL pitch calculation, coder mode selection, ...) - *--------------------------------------------------------------------*/ - -void pre_proc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t input_frame, /* i : frame length */ - float old_inp_12k8[], /* i/o: buffer of old input signal */ - float old_inp_16k[], /* i/o: buffer of old input signal @ 16kHz */ - float **inp, /* o : ptr. to inp. signal in the current frame*/ - float fr_bands[2 * NB_BANDS], /* i : energy in frequency bands */ - float *ener, /* o : residual energy from Levinson-Durbin */ - int16_t pitch_orig[3], /* o : open-loop pitch values for quantization */ - float A[NB_SUBFR16k * ( M + 1 )], /* i/o: A(z) unquantized for the 4 subframes */ - float Aw[NB_SUBFR16k * ( M + 1 )], /* i/o: weighted A(z) unquantized for subframes */ - float epsP[M + 1], /* i/o: LP prediction errors */ - float lsp_new[M], /* i/o: LSPs at the end of the frame */ - float lsp_mid[M], /* i/o: LSPs in the middle of the frame */ - int16_t *vad_hover_flag, /* i : VAD hangover flag */ - int16_t *attack_flag, /* o : attack flag */ - float *new_inp_resamp16k, /* o : new input signal @16kHz, non pre-emphasised, used by the WB TBE/BWE */ - int16_t *Voicing_flag, /* o : voicing flag for HQ FEC */ - float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: real buffer */ - float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: imag buffer */ - int16_t *hq_core_type /* o : HQ core type */ -) -{ - int16_t delay; - const float *signal_in; - -#ifdef IVAS_FLOAT_FIXED - const Word16 *signal_in_fx; -#endif - float *inp_12k8, *new_inp_12k8, *inp_16k, *new_inp_16k; /* pointers to current frame and new data */ - float old_wsp[L_WSP], *wsp; /* weighted input signal buffer */ - float pitch_fr[NB_SUBFR]; /* fractional pitch values */ - float voicing_fr[NB_SUBFR]; /* fractional pitch gains */ - float Etot; /* total energy */ - float lf_E[2 * VOIC_BINS]; /* per bin spectrum energy in lf */ - float tmpN[NB_BANDS]; /* Temporary noise update */ - float tmpE[NB_BANDS]; /* Temporary averaged energy of 2 sf. */ - float ee[2]; /* Spectral tilt */ - float corr_shift; /* correlation shift */ - float relE; /* frame relative energy */ - int16_t loc_harm; /* harmonicity flag */ - float cor_map_sum, sp_div, PS[128]; /* speech/music clasif. parameters */ - int16_t L_look; /* length of look-ahead */ - float snr_sum_he; /* HE SAD parameters */ - int16_t localVAD_HE_SAD; /* HE SAD parameters */ - int16_t vad_flag_dtx; /* HE-SAD flag with additional DTX HO */ - int16_t vad_flag_cldfb; - float old_cor; - float hp_E[2]; /* Energy in HF */ - int16_t noisy_speech_HO, clean_speech_HO, NB_speech_HO; /* SC-VBR HO flags */ - float non_staX; /* unbound non-stationarity for sp/mus clas. */ - int32_t sr_core_tmp; - int16_t L_frame_tmp; - int16_t flag_spitch; - float lsf_new[M], stab_fac; - float band_energies[2 * NB_BANDS]; /* energy in critical bands without minimum noise floor E_MIN */ - float enerBuffer[CLDFB_NO_CHANNELS_MAX]; - float currFlatness; - int16_t high_lpn_flag; - int16_t cldfb_addition; - int16_t alw_pitch_lag_12k8[2]; - float alw_voicing[2]; - float fft_buff[2 * L_FFT]; - float sp_floor; - int16_t last_core_orig; - int16_t clas_mod; - int16_t old_pitch1; - - push_wmops( "pre_proc" ); - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - signal_in = st->input; - -#ifdef IVAS_FLOAT_FIXED - signal_in_fx = st->input_fx; -#endif - - localVAD_HE_SAD = 0; - NB_speech_HO = 0; - clean_speech_HO = 0; - noisy_speech_HO = 0; - snr_sum_he = 0; - currFlatness = 0; - - *vad_hover_flag = 0; - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - st->coder_type = GENERIC; - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - *attack_flag = 0; - - if ( st->hSC_VBR != NULL ) - { - st->hSC_VBR->bump_up = 0; - st->hSC_VBR->ppp_mode = 0; - st->hSC_VBR->nelp_mode = 0; - st->hSC_VBR->avoid_HQ_VBR_NB = 0; - } - - L_look = L_LOOK_12k8; /* lookahead at 12.8kHz */ - - new_inp_12k8 = old_inp_12k8 + L_INP_MEM; /* pointer to new samples of the input signal in 12.8kHz core */ - inp_12k8 = new_inp_12k8 - L_look; /* pointer to the current frame of input signal in 12.8kHz core */ - mvr2r( st->old_inp_12k8, old_inp_12k8, L_INP_MEM ); - - mvr2r( st->old_wsp, old_wsp, L_WSP_MEM ); - wsp = old_wsp + L_WSP_MEM; /* pointer to the current frame of weighted signal in 12.8kHz core */ - - old_cor = st->old_corr; /* save old_cor for speech/music classifier */ - - st->rf_mode = st->Opt_RF_ON; - - last_core_orig = st->last_core; - - /*--------------------------------------------------------------* - * Cldfb analysis - *---------------------------------------------------------------*/ - - st->prevEnergyHF = st->currEnergyHF; - - analysisCldfbEncoder_ivas( st, signal_in, input_frame, realBuffer, imagBuffer, enerBuffer ); - - /*----------------------------------------------------------------* - * Change the sampling frequency to 12.8 kHz - *----------------------------------------------------------------*/ - - modify_Fs( signal_in, input_frame, st->input_Fs, new_inp_12k8, INT_FS_12k8, st->mem_decim, ( st->max_bwidth == NB ) ); - - /* save input resampled at 12.8kHz, non-preemhasised */ - mvr2r( new_inp_12k8, st->buf_speech_enc_flt + L_FRAME32k, L_FRAME ); - - /*------------------------------------------------------------------* - * Perform fixed preemphasis (12.8 kHz signal) through 1 - g*z^-1 - *-----------------------------------------------------------------*/ - - preemph( new_inp_12k8, PREEMPH_FAC_FLT, L_FRAME, &st->mem_preemph ); - - /*-------------------------------------------------------------------------* - * Spectral analysis - *--------------------------------------------------------------------------*/ - - analy_sp( -1, NULL, st->input_Fs, inp_12k8, st->Bin_E, st->Bin_E_old, fr_bands, lf_E, &Etot, st->min_band, st->max_band, band_energies, PS, fft_buff ); - - /*----------------------------------------------------------------* - * SAD (1-signal, 0-noise) - *----------------------------------------------------------------*/ - - noise_est_pre( Etot, st->ini_frame, st->hNoiseEst, 0, EVS_MONO, EVS_MONO ); - - st->vad_flag = wb_vad( st, fr_bands, &noisy_speech_HO, &clean_speech_HO, &NB_speech_HO, &snr_sum_he, &localVAD_HE_SAD, &( st->flag_noisy_speech_snr ), NULL, NULL, -1000.0f, -1000.0f ); - - vad_flag_cldfb = vad_proc( realBuffer, imagBuffer, enerBuffer, st->cldfbAnaEnc->no_channels, st->hVAD_CLDFB, &cldfb_addition, st->vad_flag ); - - if ( st->Pos_relE_cnt < 20 ) /* Ensure the level is high enough and cldfb decision is reliable */ - { - /* Combine decisions from SADS */ - if ( st->vad_flag == 1 && vad_flag_cldfb == 0 ) - { - st->localVAD = 0; - } - - st->vad_flag = vad_flag_cldfb; - } - - vad_flag_dtx = dtx_hangover_addition( st, st->vad_flag, st->lp_speech - st->lp_noise, cldfb_addition, vad_hover_flag, NULL, NULL, NULL ); - - /*----------------------------------------------------------------* - * NB/WB/SWB/FB bandwidth detector - *----------------------------------------------------------------*/ - - bw_detect( st, st->input, NULL, enerBuffer, MONO_FORMAT, 0 ); - - /*----------------------------------------------------------------* - * Noise energy down-ward update and total noise energy estimation - * Long-term energies and relative frame energy updates - * Correlation correction as a function of total noise level - *----------------------------------------------------------------*/ - - noise_est_down( fr_bands, st->hNoiseEst->bckr, tmpN, tmpE, st->min_band, st->max_band, &st->hNoiseEst->totalNoise, Etot, &st->hNoiseEst->Etot_last, &st->hNoiseEst->Etot_v_h2 ); - - relE = Etot - st->lp_speech; - - if ( relE > 1.5f ) - { - st->Pos_relE_cnt = 0; - } - else if ( relE < 0.0f && st->vad_flag == 1 ) - { - st->Pos_relE_cnt++; - } - corr_shift = correlation_shift( st->hNoiseEst->totalNoise ); - - /*----------------------------------------------------------------* - * FD-CNG Noise Estimator - *----------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - st->last_totalNoise_fx = float_to_fix16( st->last_totalNoise, Q8 ); - st->hNoiseEst->totalNoise_fx = float_to_fix16( st->hNoiseEst->totalNoise, Q8 ); - - FOR( Word16 n = 0; n < TOTALNOISE_HIST_SIZE; n++ ) - { - st->totalNoise_increase_hist_fx[n] = float_to_fix16( st->totalNoise_increase_hist[n], Q8 ); - move16(); - } -#endif - resetFdCngEnc_fx( st ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - - Word16 totalNoiseIncrease_fx = st->hNoiseEst->totalNoise_fx - st->last_totalNoise_fx; - st->last_totalNoise = fix16_to_float( st->last_totalNoise_fx, Q8 ); - IF( - ( totalNoiseIncrease_fx > 5 * 256 && st->totalNoise_increase_len == TOTALNOISE_HIST_SIZE && st->ini_frame > 150 ) || - ( st->input_bwidth > st->last_input_bwidth ) || - ( st->last_core == AMR_WB_CORE ) ) - { - st->hFdCngEnc->hFdCngCom->init_old_flt = fix16_to_float( st->hFdCngEnc->hFdCngCom->init_old, Q15 ); - move16(); - } - - IF( totalNoiseIncrease_fx > 0 ) - { - IF( EQ_16( st->totalNoise_increase_len, TOTALNOISE_HIST_SIZE ) ) - { - FOR( Word16 n = 0; n < TOTALNOISE_HIST_SIZE; n++ ) - { - st->totalNoise_increase_hist[n] = fix16_to_float( st->totalNoise_increase_hist_fx[n + 1], Q8 ); - move16(); - } - } - ELSE - { - st->totalNoise_increase_hist[st->totalNoise_increase_len] = fix16_to_float( st->totalNoise_increase_hist_fx[st->totalNoise_increase_len], Q8 ); - move16(); - } - } -#endif -#else - resetFdCngEnc( st ); -#endif - - perform_noise_estimation_enc( band_energies, enerBuffer, st->hFdCngEnc, 1, NULL ); - - /*-----------------------------------------------------------------* - * Select SID or FRAME_NO_DATA frame if DTX enabled - *-----------------------------------------------------------------*/ - dtx( st, -1, vad_flag_dtx, inp_12k8 ); - /*----------------------------------------------------------------* - * Adjust FD-CNG Noise Estimator - *----------------------------------------------------------------*/ - - if ( ( st->last_total_brate != st->total_brate ) || ( st->last_bwidth != st->bwidth ) ) - { - configureFdCngEnc( st->hFdCngEnc, st->bwidth, st->rf_mode && st->total_brate == ACELP_13k20 ? ACELP_9k60 : st->total_brate ); - } - if ( st->hFdCngEnc != NULL && st->Opt_DTX_ON ) - { - AdjustFirstSID( st ); - } - - /*----------------------------------------------------------------* - * Reconfigure Mode 2 - *----------------------------------------------------------------*/ - - if ( st->codec_mode == MODE2 ) - { - SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); - } - - calcLoEnvCheckCorrHiLo( st->cldfbAnaEnc->no_col, freqTable, st->hTECEnc->loBuffer_flt, st->hTECEnc->loTempEnv_flt, st->hTECEnc->loTempEnv_ns_flt, st->hTECEnc->hiTempEnv_flt, &( st->hTECEnc->corrFlag ) ); - - /*---------------------------------------------------------------* - * Time Domain Transient Detector - *---------------------------------------------------------------*/ - - if ( st->tcx10Enabled || st->tcx20Enabled ) - { - RunTransientDetection( signal_in, input_frame, st->hTranDet ); - - currFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 0 ); - } - - /*----------------------------------------------------------------* - * LP analysis - *----------------------------------------------------------------*/ - - alw_pitch_lag_12k8[0] = st->old_pitch_la; - alw_pitch_lag_12k8[1] = st->old_pitch_la; - alw_voicing[0] = st->voicing[2]; - alw_voicing[1] = st->voicing[2]; - - analy_lp( inp_12k8, L_FRAME, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lsp_old1, alw_pitch_lag_12k8, alw_voicing, INT_FS_12k8, -1 ); - - lsp2lsf( lsp_new, lsf_new, M, INT_FS_12k8 ); - stab_fac = lsf_stab( lsf_new, st->lsf_old1, 0, L_FRAME ); - mvr2r( lsf_new, st->lsf_old1, M ); - - /*----------------------------------------------------------------* - * Compute weighted input (for OL pitch analysis) - * OL pitch analysis - * stable high pitch detection - * 1/4 pitch precision improvement - *----------------------------------------------------------------*/ - - find_wsp( L_FRAME, L_SUBFR, NB_SUBFR, A, Aw, inp_12k8, TILT_FAC, wsp, &st->mem_wsp, GAMMA1_FLT, L_look ); - - if ( st->vad_flag == 0 ) - { - /* reset the OL pitch tracker memories during inactive frames */ - pitch_ol_init( &st->old_thres, &st->old_pitch, &st->delta_pit, &st->old_corr ); - } - - old_pitch1 = st->pitch[1]; - - pitch_ol( st->pitch, st->voicing, &st->old_pitch, &st->old_corr, corr_shift, &st->old_thres, &st->delta_pit, st->old_wsp2, wsp, st->mem_decim2, relE, L_look, st->clas, st->input_bwidth, st->Opt_SC_VBR ); - - /* Updates for adaptive lag window memory */ - st->old_pitch_la = st->pitch[2]; - - /* Detection of very short stable pitch period (MODE1 bitrates) */ - StableHighPitchDetect( &flag_spitch, st->pitch, st->voicing, st->Bin_E, wsp, st->localVAD, &st->voicing_sm, &st->voicing0_sm, &st->LF_EnergyRatio_sm, &st->predecision_flag, &st->diff_sm, &st->energy_sm ); - - /* 1/4 pitch precision improvement */ - if ( st->total_brate <= ACELP_24k40 ) - { - pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[0], &voicing_fr[0], 0, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[0], &pitch_fr[1], &voicing_fr[1], L_SUBFR, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[2], &voicing_fr[2], 2 * L_SUBFR, wsp, 7 ); - pitch_ol2( PIT_MIN_EXTEND, st->pitch[1], &pitch_fr[3], &voicing_fr[3], 3 * L_SUBFR, wsp, 7 ); - } - else - { - pitch_fr[0] = st->pitch[0]; - pitch_fr[1] = st->pitch[0]; - pitch_fr[2] = st->pitch[1]; - pitch_fr[3] = st->pitch[1]; - - voicing_fr[0] = st->voicing[0]; - voicing_fr[1] = st->voicing[0]; - voicing_fr[2] = st->voicing[1]; - voicing_fr[3] = st->voicing[1]; - } - - /*------------------------------------------------------------------* - * Update estimated noise energy and voicing cut-off frequency - *-----------------------------------------------------------------*/ - - noise_est( st, old_pitch1, tmpN, epsP, Etot, relE, corr_shift, tmpE, fr_bands, &cor_map_sum, NULL, &sp_div, &non_staX, &loc_harm, lf_E, &st->hNoiseEst->harm_cor_cnt, st->hNoiseEst->Etot_l_lp, &sp_floor, 0, NULL, NULL, st->ini_frame ); - - /*------------------------------------------------------------------* - * Update parameters used in the VAD and DTX - *-----------------------------------------------------------------*/ - - vad_param_updt( st, corr_shift, corr_shift, A, old_pitch1, NULL, 1 ); - - /*-----------------------------------------------------------------* - * Find spectral tilt - * UC and VC frame selection - *-----------------------------------------------------------------*/ - - find_tilt( fr_bands, st->hNoiseEst->bckr, ee, st->pitch, st->voicing, lf_E, corr_shift, st->input_bwidth, st->max_band, hp_E, st->codec_mode, &( st->bckr_tilt_lt_flt ), st->Opt_SC_VBR ); - - st->coder_type = find_uv( st, pitch_fr, voicing_fr, inp_12k8, ee, NULL, corr_shift, relE, Etot, hp_E, &flag_spitch, last_core_orig, NULL ); - - /*-----------------------------------------------------------------* - * channel aware mode configuration * - *-----------------------------------------------------------------*/ - - if ( !st->Opt_RF_ON ) - { - st->rf_mode = 0; - st->rf_target_bits_write = 0; - } - else if ( st->rf_mode && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) - { - /* the RF config is for (n- fec_offset)th frame that will be packed along with the n-th frame bitstream */ - st->rf_mode = 1; - st->codec_mode = MODE2; - - st->rf_target_bits_write = st->hRF->rf_targetbits_buff[st->rf_fec_offset]; - } - else - { - st->rf_mode = 0; - st->codec_mode = MODE1; - if ( st->Opt_RF_ON ) - { - st->hRF->rf_indx_frametype[0] = RF_NO_DATA; - st->hRF->rf_targetbits_buff[0] = 6; /* rf_mode: 1, rf_frame_type: 3, and fec_offset: 2 */ - } - } - - /*-----------------------------------------------------------------* - * Signal classification for FEC - * TC frame selection - *-----------------------------------------------------------------*/ - - st->clas = signal_clas( st, inp_12k8, ee, relE, L_look, &clas_mod ); - - select_TC( st->codec_mode, st->tc_cnt, &st->coder_type, st->localVAD ); - - /* limit coder_type depending on the bitrate */ - coder_type_modif( st, relE ); - - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->Local_VAD = st->localVAD; - } - - /*----------------------------------------------------------------* - * Speech/music classification - * AC frame selection - *----------------------------------------------------------------*/ - - st->GSC_IVAS_mode = 0; - - speech_music_classif( st, new_inp_12k8, inp_12k8, localVAD_HE_SAD, lsp_new, cor_map_sum, epsP, PS, Etot, old_cor, attack_flag, non_staX, relE, &high_lpn_flag, flag_spitch ); - - long_enr( st, Etot, localVAD_HE_SAD, high_lpn_flag, NULL, 1, NULL, NULL ); - - /*----------------------------------------------------------------* - * Final VAD correction ( when HE-SAD is used instead of the normal VAD, - * rewrite the VAD flag by VAD flag with DTX hangover for further processing) - *----------------------------------------------------------------*/ - - if ( st->Opt_DTX_ON ) - { - st->vad_flag = vad_flag_dtx; - } - - /*----------------------------------------------------------------* - * Selection of internal ACELP Fs (12.8 kHz or 16 kHz) - *----------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 ) - { - if ( st->core_brate == FRAME_NO_DATA ) - { - /* prevent "L_frame" changes in CNG segments */ - st->L_frame = st->last_L_frame; - } - else if ( st->core_brate == SID_2k40 && st->bwidth >= WB && st->hDtxEnc->first_CNG && ( st->hTdCngEnc != NULL && st->hTdCngEnc->act_cnt2 < MIN_ACT_CNG_UPD ) ) - { - /* prevent "L_frame" changes in SID frame after short segment of active frames */ - st->L_frame = st->hDtxEnc->last_CNG_L_frame; - } - else if ( ( st->core_brate == SID_2k40 && st->total_brate >= ACELP_9k60 && ( ( st->bwidth == WB && !( st->total_brate == ACELP_13k20 && st->cng_type == FD_CNG ) ) || ( st->cng_type == LP_CNG && st->bwidth > WB && st->total_brate >= ACELP_16k40 ) ) ) || ( st->total_brate > ACELP_24k40 && st->total_brate < HQ_96k ) || ( st->total_brate == ACELP_24k40 && st->bwidth >= WB ) ) - { - st->L_frame = L_FRAME16k; - } - else - { - st->L_frame = L_FRAME; - } - - if ( st->ini_frame == 0 ) - { - /* avoid switching of internal ACELP Fs in the very first frame */ - st->last_L_frame = st->L_frame; - } - - if ( st->L_frame == L_FRAME ) - { - st->gamma_flt = GAMMA1_FLT; - st->preemph_fac_flt = PREEMPH_FAC_FLT; - } - else - { - st->gamma_flt = GAMMA16k_FLT; - st->preemph_fac_flt = PREEMPH_FAC_16k_FLT; - } - - st->sr_core = st->L_frame * FRAMES_PER_SEC; - st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); - st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; - } - - /*-----------------------------------------------------------------* - * coder_type rewriting in case of switching - * IC frames selection - * enforce TC frames in case of switching - *-----------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 ) - { - /* enforce TRANSITION frames */ - if ( st->last_L_frame != st->L_frame && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && ( st->coder_type_raw != VOICED ) ) - { - /* enforce TC frame in case of ACELP@12k8 <-> ACELP@16k core switching */ - st->coder_type = TRANSITION; - } - else if ( st->last_core == HQ_CORE || st->last_core == TCX_10_CORE || st->last_core == TCX_20_CORE ) - { - /* enforce TC frame in case of HQ -> ACELP core switching */ - st->coder_type = TRANSITION; - } - else if ( st->last_core_brate <= SID_2k40 && st->cng_type == FD_CNG ) - { - /* enforce TC frame in case of FD_CNG -> ACELP switching (past excitation not available) */ - st->coder_type = TRANSITION; - } - /* select INACTIVE frames */ - else if ( st->total_brate <= ACELP_24k40 && st->vad_flag == 0 ) - { - /* inactive frames will be coded by GSC technology */ - /* except for the VBR mode. VBR mode uses NELP for that */ - if ( !( st->Opt_SC_VBR && vad_flag_dtx ) ) - { - st->coder_type = INACTIVE; - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP3; - } - } - else if ( st->total_brate > ACELP_24k40 && ( ( st->vad_flag == 0 && st->bwidth >= SWB && st->max_bwidth >= SWB ) || ( st->localVAD == 0 && ( st->bwidth <= WB || st->max_bwidth <= WB ) ) ) ) - { - /* inactive frames will be coded by AVQ technology */ - st->coder_type = INACTIVE; - } - } - else /* st->codec_mode == MODE2 */ - { - if ( !st->vad_flag ) - { - st->coder_type = INACTIVE; - } - else if ( st->coder_type > GENERIC ) - { - st->coder_type = GENERIC; - } - } - - /*---------------------------------------------------------------* - * SC-VBR - decision about PPP/NELP mode - *---------------------------------------------------------------*/ - - if ( st->Opt_SC_VBR ) - { - set_ppp_mode( st, noisy_speech_HO, clean_speech_HO, NB_speech_HO, localVAD_HE_SAD ); - } - - if ( !st->Opt_AMR_WB && !st->rf_mode ) - { - if ( st->total_brate == ACELP_13k20 || st->total_brate == ACELP_32k ) - { - st->mdct_sw_enable = MODE1; - } - else if ( ACELP_16k40 <= st->total_brate && st->total_brate <= ACELP_24k40 ) - { - st->mdct_sw_enable = MODE2; - } - } - - /*---------------------------------------------------------------------* - * Decision matrix (selection of technologies) - *---------------------------------------------------------------------*/ - - if ( st->codec_mode == MODE1 ) /* mono case */ - { - decision_matrix_enc( st, hq_core_type ); - - - /* HQ_CORE/TCX_20_CORE decision */ - if ( st->core == HQ_CORE ) /* Decision matrix decided for MDCT coding */ - { - if ( ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate == ACELP_32k ) - { - /* Select MDCT Core */ - st->core = mdct_classifier( st, fft_buff, enerBuffer, st->total_brate ); - } - if ( st->total_brate == ACELP_13k20 && st->bwidth != FB ) - { - MDCT_selector( st, sp_floor, Etot, cor_map_sum, enerBuffer ); - } - } - else - { - MDCT_selector_reset( st->hTcxEnc ); - } - - /* Switch to MODE2 if TCX_20_CORE */ - if ( st->core == TCX_20_CORE ) - { - st->codec_mode = MODE2; - - if ( st->last_codec_mode == MODE1 ) - { - int32_t last_total_brate = st->last_total_brate; - st->last_total_brate = -1; - SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); - st->last_total_brate = last_total_brate; - } - else - { - SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); - st->sr_core = getCoreSamplerateMode2_flt( EVS_MONO, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode, 0 ); - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - st->encoderLookahead_enc = NS2SA( st->sr_core, ACELP_LOOK_NS ); - st->encoderPastSamples_enc = ( st->L_frame * 9 ) >> 4; - - if ( st->sr_core == INT_FS_12k8 ) - { - st->preemph_fac_flt = PREEMPH_FAC_FLT; - st->gamma_flt = GAMMA1_FLT; - } - else - { - st->preemph_fac_flt = PREEMPH_FAC_16k_FLT; - st->gamma_flt = GAMMA16k_FLT; - } - - st->igf = getIgfPresent( EVS_MONO, st->total_brate, st->bwidth, st->rf_mode ); - } - - st->coder_type = st->coder_type_raw; - - if ( st->vad_flag == 0 ) - { - st->coder_type = INACTIVE; - } - else if ( st->coder_type > GENERIC ) - { - st->coder_type = GENERIC; - } - - st->mdct_sw = MODE1; - } - } - - /*-----------------------------------------------------------------* - * Update of ACELP harmonicity counter (used in ACELP transform codebook @32kbps) - *-----------------------------------------------------------------*/ - - if ( st->total_brate == ACELP_32k && loc_harm == 1 && cor_map_sum > 50 && st->clas == VOICED_CLAS && st->coder_type == GENERIC ) - { - st->last_harm_flag_acelp++; - - if ( st->last_harm_flag_acelp > 10 ) - { - st->last_harm_flag_acelp = 10; - } - } - else - { - st->last_harm_flag_acelp = 0; - } - - /*-----------------------------------------------------------------* - * Update audio frames counter (used for UV decision) - *-----------------------------------------------------------------*/ - - if ( st->coder_type == AUDIO ) - { - st->audio_frame_cnt += AUDIO_COUNTER_STEP; - } - else if ( st->coder_type != INACTIVE ) - { - st->audio_frame_cnt--; - } - - if ( st->audio_frame_cnt > AUDIO_COUNTER_MAX ) - { - st->audio_frame_cnt = AUDIO_COUNTER_MAX; - } - - if ( st->audio_frame_cnt < 0 ) - { - st->audio_frame_cnt = 0; - } - - /*-----------------------------------------------------------------* - * Set formant sharpening flag - *-----------------------------------------------------------------*/ - - st->sharpFlag = 0; - - if ( st->coder_type == TRANSITION ) - { - if ( ( st->total_brate > ACELP_48k && st->bwidth < SWB ) || /* Deactivate for core bitrates higher than 48.0 kb/s */ - ( st->total_brate >= ACELP_13k20 && st->total_brate <= ACELP_16k40 ) || /* Deactivate for bitrates <13.2, 16.4> kb/s (this is basically due to lack of signaling configurations */ - ( st->total_brate > ACELP_16k40 && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD ) ) /* Deactivate for bitrates >= 24.4 kb/s if the long-term noise level exceeds 34 dB */ - { - st->sharpFlag = 0; - } - else - { - st->sharpFlag = 1; - } - } - - if ( st->coder_type == GENERIC || st->coder_type == VOICED ) - { - if ( *vad_hover_flag || - ( st->total_brate > ACELP_48k && st->bwidth < SWB ) || /* Deactivate for core bitrates higher than 48.0 kb/s */ - ( st->total_brate >= ACELP_13k20 && st->lp_noise > FORMANT_SHARPENING_NOISE_THRESHOLD && st->total_brate > CNA_MAX_BRATE ) ) /* Deactivate for bitrates >= 13.2 kb/s if the long-term noise level exceeds 34 dB */ - { - st->sharpFlag = 0; - } - else - { - st->sharpFlag = 1; - } - } - - /* channel-aware mode - due to lack of signaling bit, sharpFlag is 1 always in RF mode */ - if ( st->rf_mode && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) - { - st->sharpFlag = 1; - } - - /*-----------------------------------------------------------------* - * Set voicing flag for HQ FEC - *-----------------------------------------------------------------*/ - - if ( st->sp_aud_decision1 == 0 && ( st->coder_type == VOICED || st->coder_type == GENERIC ) ) - { - *Voicing_flag = 1; - } - else - { - *Voicing_flag = 0; - } - - /*---------------------------------------------------------------* - * Preprocessing at other sampling frequency rate (16/25.6/32kHz) - *----------------------------------------------------------------*/ - - sr_core_tmp = ( st->codec_mode == MODE1 ) ? INT_FS_16k : max( INT_FS_16k, st->sr_core ); /* indicates the ACELP sampling rate */ - L_frame_tmp = ( st->codec_mode == MODE1 ) ? L_FRAME16k : max( L_FRAME16k, st->L_frame ); - - L_look = NS2SA( sr_core_tmp, ACELP_LOOK_NS ); /* lookahead at other sampling rate (16kHz, 25.6kHz, 32kHz) */ - - new_inp_16k = old_inp_16k + L_INP_MEM; /* pointer to new samples of the input signal in 16kHz core */ - inp_16k = new_inp_16k - L_look; /* pointer to the current frame of input signal in 16kHz core */ - - mvr2r( st->old_inp_16k, old_inp_16k, L_INP_MEM ); - - /*---------------------------------------------------------------* - * Change the sampling frequency to 16/25.6/32 kHz - *----------------------------------------------------------------*/ - - if ( st->input_Fs == sr_core_tmp ) - { - /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ - delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - mvr2r( st->mem_decim16k + delay, new_inp_16k, delay ); - mvr2r( signal_in, new_inp_16k + delay, input_frame - delay ); - mvr2r( signal_in + input_frame - 2 * delay, st->mem_decim16k, 2 * delay ); - } - else if ( st->input_Fs == 32000 || st->input_Fs == 48000 ) - { - modify_Fs( signal_in, input_frame, st->input_Fs, new_inp_16k, sr_core_tmp, st->mem_decim16k, 0 ); - } - else /* keep memories up-to-date in case of bitrate switching */ - { - /* no resampling needed, only delay adjustment to account for the FIR resampling delay */ - delay = NS2SA( st->input_Fs, DELAY_FIR_RESAMPL_NS ); - mvr2r( st->mem_decim16k + delay, new_inp_16k, delay ); - mvr2r( signal_in, new_inp_16k + delay, input_frame - delay ); - mvr2r( signal_in + input_frame - 2 * delay, st->mem_decim16k, 2 * delay ); - } - - if ( sr_core_tmp == INT_FS_16k ) - { - /* save input resampled at 16kHz, non-preemhasised */ - mvr2r( new_inp_16k, new_inp_resamp16k, L_FRAME16k ); - } - else if ( sr_core_tmp > INT_FS_16k ) - { - /* reset the buffer, the signal is needed for WB BWEs */ - set_f( new_inp_resamp16k, 0.0f, L_FRAME16k ); - } - - /*------------------------------------------------------------------* - * Perform fixed preemphasis (16kHz signal) through 1 - g*z^-1 - *-----------------------------------------------------------------*/ - - if ( ( st->tcxonly == 0 || st->codec_mode == MODE1 ) && st->input_Fs > 8000 ) - { - st->mem_preemph_enc_flt = new_inp_16k[L_frame_tmp - 1]; - } - - if ( st->input_Fs > 8000 && sr_core_tmp == INT_FS_16k ) - { - preemph( new_inp_16k, PREEMPH_FAC_16k_FLT, L_FRAME16k, &( st->mem_preemph16k ) ); - } - else if ( st->input_Fs > 8000 ) /* keep memory up-to-date in case of bitrate switching */ - { - st->mem_preemph16k = new_inp_16k[L_frame_tmp - 1]; - } - - /*-----------------------------------------------------------------* - * Redo LP analysis at 16kHz if ACELP@16k core was selected - * update buffers - *-----------------------------------------------------------------*/ - - if ( ( ( ( st->tcxonly == 0 ) || !( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 ) ) && - st->L_frame == L_FRAME16k && st->codec_mode == MODE2 ) || - ( st->L_frame == L_FRAME16k && st->codec_mode == MODE1 ) ) - { - /* update signal buffers */ - mvr2r( new_inp_resamp16k, st->buf_speech_enc_flt + L_FRAME16k, L_FRAME16k ); - mvr2r( new_inp_16k, st->buf_speech_enc_pe_flt + L_FRAME16k, L_FRAME16k ); - - /*--------------------------------------------------------------* - * LPC analysis - *---------------------------------------------------------------*/ - - if ( st->last_L_frame == L_FRAME && st->codec_mode == MODE1 ) - { - /* this is just an approximation, but it is sufficient */ - mvr2r( st->lsp_old1, st->lspold_enc, M ); - } - - analy_lp( inp_16k, L_FRAME16k, L_look, ener, A, epsP, lsp_new, lsp_mid, st->lspold_enc, st->pitch, st->voicing, 16000, -1 ); - - /*--------------------------------------------------------------* - * Compute Weighted Input - *---------------------------------------------------------------*/ - - if ( st->codec_mode == MODE2 ) - { - find_wsp( L_FRAME16k, L_SUBFR, st->nb_subfr, A, Aw, st->speech_enc_pe_flt, PREEMPH_FAC_16k_FLT, st->wspeech_enc_flt, &st->mem_wsp_enc_flt, st->gamma_flt, L_LOOK_16k ); - } - else - { - weight_a_subfr( NB_SUBFR16k, A, Aw, GAMMA16k_FLT, M ); - } - } - else - { - /* update signal buffers */ - mvr2r( new_inp_12k8, st->buf_speech_enc_pe_flt + st->L_frame, L_FRAME ); - mvr2r( st->buf_speech_enc_flt + L_FRAME32k, st->buf_speech_enc_flt + st->L_frame, L_FRAME ); - - if ( st->tcxonly == 0 ) - { - mvr2r( wsp, st->wspeech_enc_flt, L_FRAME + L_LOOK_12k8 ); - } - } - - /*-----------------------------------------------------------------* - * ACELP/TCX20 Switching Decision - *-----------------------------------------------------------------*/ - - mvs2s( st->pitch, pitch_orig, 3 ); - - if ( st->codec_mode == MODE2 ) - { - if ( st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->tcxonly == 0 ) - { - core_acelp_tcx20_switching( st, non_staX, pitch_fr, voicing_fr, currFlatness, lsp_mid, stab_fac ); - } - - if ( st->mdct_sw_enable == MODE2 && !st->rf_mode ) - { - if ( st->core == TCX_20_CORE ) /* Switching only possible from TCX_20_CORE frames, not from TCX_10_CORE frames */ - { - /* Select MDCT Core */ - if ( ( st->bwidth == SWB || st->bwidth == FB ) && st->total_brate == ACELP_24k40 ) - { - st->core = mdct_classifier( st, fft_buff, enerBuffer, st->total_brate ); - } - - if ( st->total_brate == ACELP_16k40 && st->bwidth != FB ) - { - MDCT_selector( st, sp_floor, Etot, cor_map_sum, enerBuffer ); - } - } - else - { - MDCT_selector_reset( st->hTcxEnc ); - } - - /* Do the switching that was decided in the MDCT selector */ - if ( st->core == HQ_CORE ) - { - st->codec_mode = MODE1; - st->mdct_sw = MODE2; - } - else if ( st->last_codec_mode == MODE1 && st->last_core == HQ_CORE ) - { - int16_t L_frame_old = st->last_L_frame; - st->last_L_frame = st->L_frame; - SetModeIndex( st, st->last_total_brate, EVS_MONO, 0 ); - st->last_L_frame = L_frame_old; - } - } - - /*--------------------------------------------------------------* - * TCX mode decision - *---------------------------------------------------------------*/ - - SetTCXModeInfo( st, st->hTranDet, &st->hTcxCfg->tcx_curr_overlap_mode ); - } - - /*-----------------------------------------------------------------* - * Updates - *-----------------------------------------------------------------*/ - - /* update old weighted speech buffer - for OL pitch analysis */ - mvr2r( &old_wsp[L_FRAME], st->old_wsp, L_WSP_MEM ); - - /* update old input signal buffer */ - mvr2r( &old_inp_12k8[L_FRAME], st->old_inp_12k8, L_INP_MEM ); - - /* update old input signal @16kHz buffer */ - if ( st->input_Fs > 8000 && sr_core_tmp == INT_FS_16k ) - { - mvr2r( &old_inp_16k[L_frame_tmp], st->old_inp_16k, L_INP_MEM ); - } - else if ( st->input_Fs > 8000 ) - { - lerp_flt( st->old_inp_12k8 + L_INP_MEM - L_INP_MEM * 4 / 5, st->old_inp_16k, L_INP_MEM, L_INP_MEM * 4 / 5 ); - } - - if ( sr_core_tmp == INT_FS_16k && st->tcxonly && st->codec_mode == MODE2 ) - { - /* copy input resampled at 16kHz, non-preemhasised */ - mvr2r( new_inp_resamp16k, new_inp_16k, L_FRAME16k ); - } - - /* update of old per-band energy spectrum */ - mvr2r( fr_bands + NB_BANDS, st->hNoiseEst->enrO, NB_BANDS ); - - /* set the pointer of the current frame for the ACELP core */ - if ( st->L_frame == L_FRAME ) - { - *inp = inp_12k8; - } - else - { - *inp = inp_16k; - } - if ( ( st->core != HQ_CORE && st->tcxonly == 0 ) || st->core == ACELP_CORE ) - { - /* Update vAD hangover frame counter in active frames */ - if ( !( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) ) - { - if ( st->Opt_DTX_ON && *vad_hover_flag ) - { - st->hTdCngEnc->burst_ho_cnt++; - if ( st->hTdCngEnc->burst_ho_cnt > HO_HIST_SIZE ) - { - st->hTdCngEnc->burst_ho_cnt = HO_HIST_SIZE; - } - } - else if ( st->hTdCngEnc != NULL && vad_flag_dtx ) - { - st->hTdCngEnc->burst_ho_cnt = 0; - } - } - } - - pop_wmops(); - return; -} -#endif diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index 83b1ca81e..c8c8aea02 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -69,7 +69,6 @@ ivas_error acelp_core_enc_fx( const float tdm_lsfQ_PCh[M] /* i : Q LSFs for primary channel */ #endif ); -#ifdef IVAS_FLOAT_FIXED void analy_lp_ivas_fx( const Word16 speech[], /* i :(Q_new) pointer to the speech frame */ const Word16 L_frame, /* i :(q0) length of the frame */ @@ -87,7 +86,6 @@ void analy_lp_ivas_fx( const Word16 sec_chan_low_rate, /* i :(q0) flag to signal second channel */ Word16 Q_new, /*i: stores Q for speech*/ Word16 *Q_r /*stores q for ener*/ ); -#endif void analy_lp_fx( const Word16 speech[], /* i : pointer to the speech frame */ @@ -196,7 +194,6 @@ Word16 dtx_hangover_addition_fx( VAD_HANDLE hVAD, /* i/o: VAD data handle */ NOISE_EST_HANDLE hNoiseEst /* i : Noise estimation handle */ ); -#ifdef IVAS_FLOAT_FIXED Word16 ivas_dtx_hangover_addition_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 vad_flag, /* i Q0 */ @@ -206,7 +203,6 @@ Word16 ivas_dtx_hangover_addition_fx( VAD_HANDLE hVAD, /* i/o: VAD data handle */ NOISE_EST_HANDLE hNoiseEst, /* i : Noise estimation handle */ Word16 *rem_dtx_ho ); -#endif void fb_tbe_enc_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 new_input[], /* i : i speech at 48 kHz sample rate */ @@ -229,7 +225,6 @@ Word16 ffr_getSfWord32( const Word32 *vector, /*!< Pointer to i vector */ const Word16 len /*!< Length of i vector */ ); -#ifdef IVAS_FLOAT_FIXED void find_tilt_ivas_fx( const Word32 fr_bands[], /* i : energy in frequency bands Q_new*/ const Word32 bckr[], /* i : per band background noise energy estimate Q_new*/ @@ -245,7 +240,6 @@ void find_tilt_ivas_fx( const Word16 Q_new, /* i : scaling factor */ Word32 *bckr_tilt_lt, Word16 Opt_vbr_mode ); -#endif // IVAS_FLOAT_FIXED void find_tilt_fx( const Word32 fr_bands[], /* i : energy in frequency bands Q_new + Q_SCALE*/ @@ -263,7 +257,6 @@ void find_tilt_fx( Word32 *bckr_tilt_lt, Word16 Opt_vbr_mode ); -#ifdef IVAS_FLOAT_FIXED Word16 find_uv_ivas_fx( /* o : coding type */ Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 *T_op_fr, /* i : pointer to adjusted fractional pitch (4 val.) Q6 */ @@ -280,7 +273,6 @@ Word16 find_uv_ivas_fx( /* o : coding typ STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ const Word16 Q_new, const Word16 q_hp_E ); -#endif // IVAS_FLOAT_FIXED Word16 find_uv_fx( /* o : coding type */ Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 *T_op_fr, /* i : pointer to adjusted fractional pitch (4 val.) Q6*/ @@ -327,7 +319,6 @@ void long_enr_fx( const Word16 Etot, /* i : total channel E (see lib_enc\analy_sp.c) */ const Word16 localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ Word16 high_lpn_flag ); -#ifdef IVAS_FLOAT_FIXED void ivas_long_enr_fx( Encoder_State *st_fx, /* i/o: state structure */ const Word16 Etot, /* i : total channel E (see lib_enc\analy_sp.c) Q=8*/ @@ -339,7 +330,6 @@ void ivas_long_enr_fx( const Word16 Etot_LR[] /* i : total channel energy LR channels Q=8*/ ); -#endif Word16 mdct_classifier_fx( /* o: MDCT A/B decision */ const Word16 *Y, /* i: re[0], re[1], ..., re[n/2], im[n/2 - 1], im[n/2 - 2], ..., im[1] */ Encoder_State *st_fx, /* i/o: Encoder state variable */ @@ -396,7 +386,6 @@ void noise_est_fx( #endif const Word16 ini_frame /* i : Frame number (init) */ ); -#ifdef IVAS_FLOAT_FIXED void noise_est_ivas_fx( Encoder_State *st_fx, /* i/o: state structure */ const Word16 old_pitch1, /* i : previous frame OL pitch[1] */ @@ -428,7 +417,6 @@ void noise_est_ivas_fx( FRONT_VAD_ENC_HANDLE hFrontVad, /* i/o: front-VAD handle */ const Word16 ini_frame /* i : Frame number (init) */ ); -#endif void noise_est_pre_fx( const Word16 Etot, /* i : Energy of current frame */ const Word16 ini_frame_fx, /* i : Frame number (init) */ @@ -599,7 +587,6 @@ void StableHighPitchDetect_fx( Word16 Q_new, Word16 EspecdB[] ); -#ifdef IVAS_FLOAT_FIXED void StableHighPitchDetect_ivas_fx( Word16 *flag_spitch, /* o : flag to indicate very short stable pitch */ Word16 pitch[], /* i/o: OL pitch buffer Q0 */ @@ -615,7 +602,6 @@ void StableHighPitchDetect_ivas_fx( Word16 Q_new, Word16 EspecdB[] /* Q7 */ ); -#endif void swb_bwe_enc_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ @@ -955,7 +941,6 @@ Word16 peak_avrg_ratio_fx( Word16 *mode_count, /* i/o: HQ_HARMONIC mode count */ Word16 *mode_count1, /* i/o: HQ_NORMAL mode count */ Word16 Q_coeff ); -#ifdef IVAS_FLOAT_FIXED Word16 peak_avrg_ratio_ivas_fx( const Word32 total_brate, const Word32 *input_hi_fx, /* i : i signal */ @@ -976,7 +961,6 @@ void hvq_classifier_ivas_fx( Word16 *hvq_hangover, /* i/o: Mode-switch hangover Q0 */ Word32 *L_pe_gains /* o : peak gains Q12 */ ); -#endif void pit16k_Q_enc_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 nBits, /* i : # of Q bits */ @@ -1134,7 +1118,6 @@ Word16 GetTCXMaxenergyChange_ivas_fx( TRAN_DET_HANDLE hTranDet, const Word16 nCurrentSubblocks, const Word16 nPrevSubblocks ); -#ifdef IVAS_FLOAT_FIXED /** Set TCX window length and overlap configuration * @param prevEnergyHF previous HF energy. Exponent must be the same as for currEnergyHF. * @param currEnergyHF current HF energy. Exponent must be the same as for prevEnergyHF. @@ -1144,7 +1127,6 @@ void SetTCXModeInfo_ivas_fx( TRAN_DET_HANDLE hTranDet, /* i/o: transient detection handle */ Word16 *tcxModeOverlap /* o : window overlap of current frame */ ); -#endif /** Set TCX window length and overlap configuration * @param prevEnergyHF previous HF energy. Exponent must be the same as for currEnergyHF. @@ -1218,7 +1200,6 @@ void AVQ_cod_lpc_fx( Word16 Nsv /* i : number of subvectors (lg=Nsv*8) */ ); -#ifdef IVAS_FLOAT_FIXED void ProcessIGF_ivas_fx( Encoder_State *st, /* i : Encoder state */ Word32 *pMDCTSpectrum, /* i : MDCT spectrum */ @@ -1231,7 +1212,6 @@ void ProcessIGF_ivas_fx( const Word16 sp_aud_decision0, /* i : first stage switching decision */ const Word16 vad_hover_flag /* i : VAD hangover flag */ ); -#endif void ProcessIGF_fx( IGF_ENC_INSTANCE_HANDLE const hInstance, /**< in: instance handle of IGF Encoder */ @@ -1751,7 +1731,6 @@ void CNG_enc_fx( Word32 *q_env, Word16 *sid_bw ); -#ifdef IVAS_FLOAT_FIXED void CNG_enc_ivas_fx( Encoder_State *st_fx, /* i/o: State structure */ Word16 Aq[], /* o : LP coefficients Q12 */ @@ -1764,7 +1743,6 @@ void CNG_enc_ivas_fx( Word16 Q_new, /* i : Q value of speech */ Word32 *q_env, Word16 *sid_bw ); -#endif /* Generate a bitstream out of the partition levels */ void FdCng_encodeSID_fx( HANDLE_FD_CNG_ENC st, /* i/o: FD_CNG structure containing all buffers and variables */ @@ -2163,7 +2141,6 @@ void analy_sp_fx( Word32 *band_energies, /* o : energy in critical frequency bands without minimum noise floor MODE2_E_MIN */ Word16 *fft_buff /* o : FFT coefficients */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_analy_sp_fx( const Word16 element_mode, /* i : element mode */ CPE_ENC_HANDLE hCPE, /* i/o: CPE encoder structure */ @@ -2205,7 +2182,6 @@ void ivas_analy_sp_fx_front( Word32 *band_energies, /* o : energy in critical frequency bands without minimum noise floor MODE2_E_MIN (Q_new + QSCALE)*/ Word16 *fft_buff /* o : FFT coefficients (Q_new + Scale_fac[i_subfr]) */ ); -#endif void find_wsp_fx( const Word16 Az[], const Word16 speech[], @@ -2403,7 +2379,6 @@ void core_signal_analysis_high_bitrate_fx( Word16 *spectrum_e, Word16 *Q_new ); -#ifdef IVAS_FLOAT_FIXED void core_signal_analysis_high_bitrate_ivas_fx( const Word16 *new_samples, /*i: Q0 */ const Word16 T_op[3], /* i : open-loop pitch values for quantiz. */ @@ -2423,7 +2398,6 @@ void core_signal_analysis_high_bitrate_ivas_fx( Word16 *spectrum_e, Word16 *Q_new, Word16 *q_win ); -#endif void ShapeSpectrum_fx( TCX_CONFIG_HANDLE hTcxCfg, /* i : configuration of TCX */ @@ -2994,7 +2968,6 @@ void IGFEncApplyMono_fx( const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in: | Word16 last_core_acelp /**< in: Q0 | indictaor if last frame was acelp coded */ ); -#ifdef IVAS_FLOAT_FIXED void IGFEncApplyMono_ivas_fx( Encoder_State *st, /* i : Encoder state */ const int16_t igfGridIdx, /* i : IGF grid index */ Word32 *pMDCTSpectrum_fx, /* i/o: MDCT spectrum */ @@ -3006,14 +2979,11 @@ void IGFEncApplyMono_ivas_fx( Encoder_State *st, /* i : Encoder st const int16_t sp_aud_decision0, /* i : first stage switching decision */ const int16_t vad_hover_flag /* i : VAD hangover flag */ ); -#endif -#ifdef IVAS_FLOAT_FIXED void IGFEncConcatenateBitstream_ivas_fx( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : instance handle of IGF Encoder */ const Word16 bsBits, /* i : number of IGF bits written to list of indices */ BSTR_ENC_HANDLE hBstr /* i/o: bitstream handle */ ); -#endif void IGFEncConcatenateBitstream_fx( const IGF_ENC_INSTANCE_HANDLE hInstance, /**< in: | instance handle of IGF Encoder */ Word16 bsBits, /**< in: Q0 | number of IGF bits written to list of indices */ @@ -4031,7 +4001,6 @@ Word16 pvq_core_enc_fx( Word16 *maxpulse, /* i : maximum pulse per band */ const Word16 core /* i : number of bands */ ); -#ifdef IVAS_FLOAT_FIXED Word16 pvq_core_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 coefs_norm[], /* i/o: normalized coefficients to encode */ @@ -4048,7 +4017,6 @@ Word16 pvq_core_enc_ivas_fx( Word16 *maxpulse, /* i : maximum pulse per band */ const Word16 core /* i : number of bands */ ); -#endif void core_switching_hq_prepare_enc_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ Word16 *num_bits, /* i/o: bit budget update */ @@ -4116,7 +4084,6 @@ Word16 hq_classifier_enc_fx( /* o : Consumed bits Word32 *nf_gains, /* o : Noise-fill gains Q12 */ Word16 *hqswb_clas /* o : HQ class Q0 */ ); -#ifdef IVAS_FLOAT_FIXED Word16 hq_classifier_enc_ivas_fx( /* o : Consumed bits Q0 */ Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 length, /* i : Frame length Q0 */ @@ -4128,7 +4095,6 @@ Word16 hq_classifier_enc_ivas_fx( /* o : Consumed bi Word32 *nf_gains, /* o : Noise-fill gains Q12 */ Word16 *hqswb_clas /* o : HQ class Q0 */ ); -#endif void diff_envelope_coding_fx( const Word16 is_transient, /* i : transient indicator Q0 */ const Word16 num_env_bands, /* i : number of envelope bands to code Q0 */ @@ -4181,7 +4147,6 @@ Word16 hvq_enc_fx( /* o : Consumed bits */ const Word32 *coefs, /* i : spectrum coefficients in Q14 */ Word32 *coefs_out /* o : encoded spectrum coefficients in Q14 */ ); -#ifdef IVAS_FLOAT_FIXED Word16 hvq_enc_ivas_fx( /*o : Consumed bits */ Encoder_State *st_fx, /*i/o: encoder state structure */ const Word32 core_brate, /*i : Total bit rate */ @@ -4196,7 +4161,6 @@ Word16 hvq_enc_ivas_fx( /*o : Consumed bits const Word32 *coefs, /* i : spectrum coefficients in Q12 */ Word32 *coefs_out /* o : encoded spectrum coefficients in Q12 */ ); -#endif Word16 pvq_core_enc_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 coefs_norm[], /* i/o: normalized coefficients to encode */ @@ -4281,7 +4245,6 @@ void diffcod_lrmdct_fx( Word16 *difidx, /* o : differential code */ const Word16 is_transient /* i : transient flag */ ); -#ifdef IVAS_FLOAT_FIXED Word16 peak_vq_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 bwidth, /* i : audio bandwidth */ @@ -4295,7 +4258,6 @@ Word16 peak_vq_enc_ivas_fx( Word16 *vq_peak_idx, /* i : Peak index vector */ Word32 *nf_gains /* i : Estimated noise floor gains Q12 */ ); -#endif Word16 peak_vq_enc_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 bwidth, /* i : audio bandwidth */ @@ -4486,22 +4448,7 @@ Word16 multi_harm_fx( /* o : frame multi-harmonicity Word16 *sp_floor, /* o: noise floor estimate Q7 */ Word16 S_map[] /* o : short-term correlation map Q7 */ ); -#ifdef IVAS_FLOAT_FIXED -Word16 multi_harm_ivas_fx( /* o : frame multi-harmonicity (1-harmonic, 0-not) */ - const Word16 Bin_E[], /* i : log-energy spectrum of the current frame Q7 */ - Word16 old_S[], /* i/o: prev. log-energy spectrum w. subtracted floor Q7 */ - Word16 cor_map_LT[], /* i/o: LT correlation map Q15 */ - Word16 *multi_harm_limit, /* i/o: multi harminic threshold Q9 */ - const Word32 total_brate, /* i : total bitrate Q0 */ - const Word16 bwidth, /* i : input signal bandwidth Q0 */ - Word16 *cor_strong_limit, /* i/o: HF correlation indicator Q0 */ - Word16 *st_mean_avr_dyn, /* i/o: long term average dynamic Q7 */ - Word16 *st_last_sw_dyn, /* i/o: last dynamic Q7 */ - Word16 *cor_map_sum, /* i : sum of correlation map Q8 */ - Word16 *sp_floor, /* o: noise floor estimate Q7 */ - Word16 S_map[] /* o : short-term correlation map Q7 */ -); -#endif + void pvq_encode_frame_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *coefs_norm, /* i : normalized coefficients to encode */ @@ -4518,7 +4465,6 @@ void pvq_encode_frame_fx( const Word16 pvq_bits, /* i : number of bits avaiable */ const Word16 core /* i : core */ ); -#ifdef IVAS_FLOAT_FIXED void pvq_encode_frame_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *coefs_norm, /* i : normalized coefficients to encode */ @@ -4535,7 +4481,6 @@ void pvq_encode_frame_ivas_fx( const Word16 pvq_bits, /* i : number of bits avaiable */ const Word16 core /* i : core */ ); -#endif Word16 Interpol_4( /*Qx o : interpolated value */ Word16 *x, /*Qx i : i vector */ Word16 frac /* i : fraction (-4..+3) */ @@ -4565,7 +4510,6 @@ void pvq_encode_fx( const Word16 dim, /* i: Length of vector */ const Word16 neg_gain /* i: - Gain use - negative gain in Q15 0 ..1 */ ); -#ifdef IVAS_FLOAT_FIXED void pvq_encode_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -4577,7 +4521,6 @@ void pvq_encode_ivas_fx( const Word16 dim, /* i: Length of vector */ const Word16 neg_gain /* i: - Gain use - negative gain in Q15 0 ..1 */ ); -#endif void rc_enc_init_fx( PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ Word16 tot_bits /* i : Total bit budget */ @@ -4587,13 +4530,11 @@ void rc_enc_finish_fx( BSTR_ENC_HANDLE hBstr, /* i/o: Encoder state */ PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ ); -#ifdef IVAS_FLOAT_FIXED void rc_enc_finish_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ ); -#endif void rc_encode_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -4601,7 +4542,6 @@ void rc_encode_fx( UWord32 sym_freq, /* i : Symbol probability */ UWord32 tot /* i : Total cumulative frequency */ ); -#ifdef IVAS_FLOAT_FIXED void rc_encode_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -4615,7 +4555,6 @@ void rc_enc_uniform_ivas_fx( UWord32 value, /* i : Value to encode */ UWord32 tot /* i : Maximum value */ ); -#endif void rc_enc_uniform_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -4629,14 +4568,12 @@ void rc_enc_bits_fx( UWord32 value, /* i : Value to encode */ Word16 bits /* i : Number of bits used */ ); -#ifdef IVAS_FLOAT_FIXED void rc_enc_bits_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ UWord32 value, /* i : Value to encode */ Word16 bits /* i : Number of bits used */ ); -#endif void re8_compute_base_index_fx( const Word16 *x, /* i : Elemen of Q2, Q3 or Q4 */ const Word16 ka, /* i : Identifier of the absolute leader related to x */ @@ -4710,13 +4647,11 @@ ivas_error init_encoder_fx( Encoder_State *st_fx /* i/o: Encoder static variables structure */ ); -#ifdef IVAS_FLOAT_FIXED void copy_encoder_config_fx( Encoder_Struct *st_ivas, /* i : IVAS encoder structure */ Encoder_State *st, /* o : encoder state structure */ const Word16 flag_all /* i : flag 1==update all, 0=partial update*/ ); -#endif void destroy_encoder_fx( Encoder_State *st_fx /* i/o: Encoder static variables structure */ diff --git a/lib_enc/pvq_core_enc.c b/lib_enc/pvq_core_enc.c index 5b3e395a0..ce1234723 100644 --- a/lib_enc/pvq_core_enc.c +++ b/lib_enc/pvq_core_enc.c @@ -42,526 +42,3 @@ #include "prot.h" #include "stl.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *--------------------------------------------------------------------*/ - -static int16_t calc_pvq_splits( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const int16_t band_bits, const int16_t sfmsize, const float *y, int16_t *bits ); - -static void obtainEnergyParameter( const float Enear, const float Eopp, int16_t *param ); - -static void densityIndexSymbolEncode( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const int16_t density, const int16_t r_dim, const int16_t l_dim, const int16_t index_phi ); - -static void encode_energies( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const float *coefs, const int16_t Np, int16_t *dim_part, float *E_part, int16_t *bits_part, int16_t *g_part, const int16_t qband, int16_t *bits_left, const float enr, const int16_t n, const int16_t strict_bits ); - - -/*-------------------------------------------------------------------* - * pvq_encode_band() - * - * Encode band with PVQ - *--------------------------------------------------------------------*/ - -static void pvq_encode_band( - BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const float *coefs_norm, /* i : normalized vector to encode */ - int16_t *pulse_vector, /* o : quantized vector, integer */ - int16_t *npulses, /* o : number of pulses */ - float *coefs_quant, /* o : quantized vector */ - const int16_t sfmsize, /* i : length of vector */ - const int16_t band_bits, /* i : assigned bits */ - int16_t *bits_left, /* o : bits remaining */ - const int16_t strict_bits /* i : conservative rounding flag */ -) -{ - int16_t K_val; - int16_t j, Np; - float enr, E_part[MAX_SPLITS + 1]; - int16_t part_start[MAX_SPLITS + 1], dim_part[MAX_SPLITS + 1], bits_part[MAX_SPLITS + 1]; - int16_t pool_tot, pool_part, dim_parts; - float g_part[MAX_SPLITS]; - int16_t g_part_s[MAX_SPLITS]; - int16_t sg_part[MAX_SPLITS + 1]; - int16_t idx_sort[MAX_SPLITS + 1]; - int16_t js, band_bits_tot, split_bit; - - Np = calc_pvq_splits( hBstr, hPVQ, band_bits, sfmsize, coefs_norm, &split_bit ); - band_bits_tot = band_bits - split_bit; - - enr = 0.0f; - for ( j = 0; j < sfmsize; j++ ) - { - enr += coefs_norm[j] * coefs_norm[j]; - } - - dim_parts = (int16_t) intLimCDivPos( sfmsize, Np ); - set_s( dim_part, dim_parts, Np - 1 ); - dim_part[Np - 1] = sfmsize - dim_parts * ( Np - 1 ); - - part_start[0] = 0; - for ( j = 1; j < Np; j++ ) - { - part_start[j] = part_start[j - 1] + dim_part[j - 1]; - } - - set_s( g_part_s, -32768, Np ); - if ( Np > 1 ) - { - encode_energies( hBstr, hPVQ, coefs_norm, Np, dim_part, E_part, bits_part, g_part_s, band_bits_tot, bits_left, enr, sfmsize, strict_bits ); - } - else - { - bits_part[0] = band_bits_tot; - } - - pool_tot = 0; - pool_part = 0; - - for ( j = 0; j < Np; j++ ) - { - g_part[j] = -( (float) g_part_s[j] ) / 32768; - /* aligned to BASOP to avoid USAN undefined negation warning with -(-32768) */ - g_part_s[j] = negate( g_part_s[j] ); - } - - srt_vec_ind( g_part_s, sg_part, idx_sort, Np ); - - for ( j = 0; j < Np; j++ ) - { - js = idx_sort[Np - 1 - j]; - - - pool_part = shrtCDivSignedApprox_flt( pool_tot, Np - j ); - bits_part[js] = max( 0, min( bits_part[js] + pool_part, 256 ) ); - - conservativeL1Norm( dim_part[js], bits_part[js], strict_bits, *bits_left, pool_tot, *npulses, /* inputs */ - &K_val, bits_left, &pool_tot, npulses ); /* outputs */ - if ( K_val >= 1 ) - { - pvq_encode( hBstr, hPVQ, coefs_norm + part_start[js], pulse_vector + part_start[js], coefs_quant + part_start[js], K_val, dim_part[js], g_part[js] ); - } - else - { - set_f( coefs_quant + part_start[js], 0.0f, dim_part[js] ); - set_s( pulse_vector + part_start[js], 0, dim_part[js] ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * pvq_encode_frame() - * - * - *--------------------------------------------------------------------*/ - -void pvq_encode_frame( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const float *coefs_norm, /* i : normalized coefficients to encode */ - float *coefs_quant, /* o : quantized coefficients */ - float *gopt, /* o : optimal shape gains */ - int16_t *npulses, /* o : number of pulses per band */ - int16_t *pulse_vector, /* o : non-normalized pulse shapes */ - const int16_t *sfm_start, /* i : indices of first coefficients in the bands */ - const int16_t *sfm_end, /* i : indices of last coefficients in the bands */ - const int16_t *sfmsize, /* i : band sizes */ - const int16_t nb_sfm, /* i : total number of bands */ - const int16_t *R, /* i : bitallocation per band (Q3)*/ - const int16_t pvq_bits, /* i : number of bits avaiable */ - const int16_t core /* i : core */ -) -{ - int16_t i, j; - int16_t band_bits, bits_left; - int16_t bit_pool = 0; - int16_t coded_bands, bands_to_code; - int16_t curr_bits; - int16_t R_sort[NB_SFM]; /*Q3*/ - int16_t is, i_sort[NB_SFM]; - int16_t strict_bits; - PVQ_ENC_DATA pvq_enc; - - PVQ_ENC_HANDLE hPVQ = &pvq_enc; - - rc_enc_init( hPVQ, pvq_bits ); - curr_bits = ( pvq_bits - RC_BITS_RESERVED ) << 3; - - bands_to_code = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - if ( R[i] > 0 ) - { - bands_to_code++; - } - } - - if ( core == ACELP_CORE ) - { - strict_bits = 1; - srt_vec_ind( R, R_sort, i_sort, nb_sfm ); - } - else - { - strict_bits = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - i_sort[i] = i; - } - } - - coded_bands = 0; - for ( i = 0; i < nb_sfm; i++ ) - { - is = i_sort[i]; - gopt[is] = 0; - if ( R[is] > 0 ) - { - bandBitsAdjustment( hPVQ->rc_num_bits, hPVQ->rc_range, curr_bits, bands_to_code, bands_to_code - coded_bands, sfmsize[is], R[is], bit_pool, /* inputs */ - &band_bits, &bits_left, &bit_pool ); /* outputs */ - - pvq_encode_band( hBstr, hPVQ, &coefs_norm[sfm_start[is]], &pulse_vector[sfm_start[is]], &npulses[is], &coefs_quant[sfm_start[is]], sfmsize[is], band_bits, &bits_left, strict_bits ); - - gopt[is] = dotp( coefs_quant + sfm_start[is], coefs_norm + sfm_start[is], sfmsize[is] ) / - ( dotp( coefs_quant + sfm_start[is], coefs_quant + sfm_start[is], sfmsize[is] ) + 1e-15f ); - - if ( gopt[is] == 0.0f ) - { - gopt[is] = 1e-10f; - } - /* Updates */ - coded_bands++; - } - else - { - for ( j = sfm_start[is]; j < sfm_end[is]; j++ ) - { - coefs_quant[j] = 0.0f; - pulse_vector[j] = 0; - } - } - } - - rc_enc_finish( hBstr, hPVQ ); - - return; -} - -/*---------------------------------------------------------------------* - * pvq_core_enc() - * - * Main Generic Audio Encoder Routine - *---------------------------------------------------------------------*/ - -/*! r: number of bits encoded */ -int16_t pvq_core_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - float coefs_norm[], /* i/o: normalized coefficients to encode */ - float coefs_quant[], /* o : quantized coefficients */ - const int16_t bits_tot, /* i : total number of bits */ - const int16_t nb_sfm, /* i : number of bands */ - const int16_t *sfm_start, /* i : Subband start coefficient */ - const int16_t *sfm_end, /* i : Subband end coefficient */ - const int16_t *sfmsize, /* i : subband width */ - int16_t *R, /* i/o: Bit allocation/Adjusted bit alloc. (Q3) */ - int16_t *Rs, /* i/o: Integer bit allocation */ - int16_t *npulses, /* o : number of pulses */ - int16_t *maxpulse, /* i : maximum pulse per band */ - const int16_t core /* i : number of bands */ -) -{ - int16_t i; - int16_t R_upd; /*Q3*/ - int16_t ord[NB_SFM_MAX]; - float fg_pred[NB_SFM_MAX]; - int16_t pvq_bits; - int16_t pulse_vector[L_SPEC48k_EXT]; - float gopt[NB_SFM]; - int16_t gain_bits_array[NB_SFM]; - int16_t gain_bits_tot; - - R_upd = bits_tot * 8; - gain_bits_tot = assign_gain_bits( core, nb_sfm, sfmsize, R, gain_bits_array, &R_upd ); - pvq_bits = R_upd >> 3; - pvq_encode_frame( hBstr, coefs_norm, coefs_quant, gopt, npulses, pulse_vector, sfm_start, sfm_end, sfmsize, nb_sfm, R, pvq_bits, core ); - - if ( Rs != NULL ) - { - for ( i = 0; i < nb_sfm; i++ ) - { - Rs[i] = Rs[i] * ( npulses[i] > 0 ); /* Update Rs in case no pulses were assigned */ - } - } - - for ( i = 0; i < nb_sfm; i++ ) - { - ord[i] = i; - R[i] = R[i] * ( npulses[i] > 0 ); /* Update in case no pulses were assigned */ - } - - get_max_pulses( sfm_start, sfm_end, ord, npulses, nb_sfm, pulse_vector, maxpulse ); - - fine_gain_pred( sfm_start, sfm_end, sfmsize, ord, npulses, maxpulse, R, nb_sfm, coefs_quant, pulse_vector, fg_pred, core ); - - fine_gain_quant( hBstr, ord, nb_sfm, gain_bits_array, fg_pred, gopt ); - - apply_gain( ord, sfm_start, sfm_end, nb_sfm, fg_pred, coefs_quant ); - - return ( pvq_bits + gain_bits_tot ); -} - - -/*-------------------------------------------------------------------* - * encode_energies() - * - * - *--------------------------------------------------------------------*/ - -static void encode_energies( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const float *coefs, /* i : coefficients to encode */ - const int16_t Np, /* i : number of parts */ - int16_t *dim_part, /* o : sizes of parts */ - float *E_part, /* o : energies of parts */ - int16_t *bits_part, /* o : assigned bits per part */ - int16_t *g_part, /* o : gains */ - const int16_t qband, /* i : assigned quanta per band */ - int16_t *bits_left, /* o : remaining bits */ - const float enr, /* i : energy of vector */ - const int16_t dim, /* i : size of vector */ - const int16_t strict_bits /* i : conservative rounding flag */ -) -{ - int16_t i, j, l_Np, r_Np; - int16_t l_bits, r_bits, l_dim, r_dim; - float l_enr, r_enr; - int16_t il, ir; - int16_t oppRQ3, qzero; - int16_t density; - int16_t phi; - int16_t index_phi = -1; - - l_Np = Np >> 1; - r_Np = Np - l_Np; - - l_enr = 0.0f; - l_bits = 0; - l_dim = 0; - for ( i = 0; i < l_Np; i++ ) - { - l_dim += dim_part[i]; - } - for ( j = 0; j < l_dim; j++ ) - { - l_enr += coefs[j] * coefs[j]; - } - r_enr = enr - l_enr; - r_dim = dim - l_dim; - - obtainEnergyQuantizerDensity( dim, qband, &density ); - obtainEnergyParameter( l_enr, r_enr, &phi ); - rangeCoderFinalizationFBits( hPVQ->rc_num_bits, hPVQ->rc_range, &qzero ); - densityAngle2RmsProjEnc( density, phi, &index_phi, &ir, &il, &oppRQ3 ); - densityIndexSymbolEncode( hBstr, hPVQ, density, r_dim, l_dim, index_phi ); - - for ( i = 0; i < l_Np; i++ ) - { - g_part[i] = ( g_part[i] * il + 16384 ) >> 15; - } - - for ( i = l_Np; i < Np; i++ ) - { - g_part[i] = ( g_part[i] * ir + 16384 ) >> 15; - } - - NearOppSplitAdjustment( qband, qzero, hPVQ->rc_num_bits, hPVQ->rc_range, *bits_left, strict_bits, Np, dim_part[0], dim_part[Np - 1], l_dim, r_dim, oppRQ3, &l_bits, &r_bits, bits_left ); - - if ( l_Np > 1 ) - { - encode_energies( hBstr, hPVQ, coefs, l_Np, dim_part, E_part, bits_part, g_part, l_bits, bits_left, l_enr, l_dim, strict_bits ); - } - else - { - E_part[0] = l_enr; - bits_part[0] = l_bits; - } - - if ( r_Np > 1 ) - { - encode_energies( hBstr, hPVQ, &coefs[l_dim], r_Np, &dim_part[l_Np], &E_part[l_Np], &bits_part[l_Np], &g_part[l_Np], r_bits, bits_left, r_enr, r_dim, strict_bits ); - } - else - { - E_part[1] = r_enr; - bits_part[1] = r_bits; - } - - return; -} - - -static void densityIndexSymbolEncode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const int16_t density, /* i : Current density */ - const int16_t opp_sz, /* i : Opposite size */ - const int16_t near_sz, /* i : Near size */ - const int16_t index_phi /* i : Index */ -) -{ - int16_t angle, c; - uint32_t sym_freq = 1; - int32_t cum_freq, tot; - int16_t densityPlOne, densitySubC; - int16_t densitySubIndex, nearFlag; -#ifdef BASOP_NOGLOB - Flag Overflow; -#endif /* BASOP_NOGLOB */ - - if ( ( 0xFFFE & density ) != 0 ) /* even */ - { - angle = atan2_fx_flt( SQRT_DIM_fx[opp_sz], SQRT_DIM_fx[near_sz] ); -#ifndef BASOP_NOGLOB - angle = shl( angle, 1 ); -#else /* BASOP_NOGLOB */ - angle = shl_o( angle, 1, &Overflow ); -#endif /* BASOP_NOGLOB */ - angle = mult_r( angle, 20861 ); - c = mult_r( density, angle ); - - densityPlOne = 1 + density; - densitySubC = density - c; - - tot = 2 + density * densityPlOne; /* c==0, c==density*/ - sym_freq = 1 + 2 * index_phi; /* c==density */ - cum_freq = index_phi * index_phi; /* c==density*/ - - if ( c == 0 ) - { - sym_freq = 2 * densityPlOne - sym_freq; - cum_freq = 2 * index_phi * (densityPlOne) -cum_freq; - } - else if ( densitySubC != 0 ) /* c n.eq. density */ - { - densitySubIndex = density - index_phi; - nearFlag = ( index_phi <= c ); - - tot = densityPlOne + density * c * ( densitySubC ); - sym_freq = nearFlag ? ( 1 + 2 * index_phi * densitySubC ) : ( 1 + 2 * densitySubIndex * c ); - cum_freq = nearFlag ? ( index_phi * ( ( index_phi - 1 ) * densitySubC + 1 ) ) : ( tot - densityPlOne - densitySubIndex * ( densitySubIndex + 1 ) * c + index_phi ); - } - /* else keep values for c==density*/ - rc_encode( hBstr, hPVQ, cum_freq, sym_freq, tot ); - } - - return; -} - - -/*--------------------------------------------------------------------------* - * calc_pvq_splits() - * - * Calculate the number of segments needed - *--------------------------------------------------------------------------*/ - -/*! r: Number of segments */ -static int16_t calc_pvq_splits( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const int16_t band_bits, /* i : Band bit-budget */ - const int16_t sfmsize, /* i : Band width */ - const float *y, /* i : Target vector */ - int16_t *bits /* o : Consumed bits */ -) -{ - int16_t Np; - int16_t Npart; - int16_t i, j, k; - float E[MAX_SPLITS]; - float Emean; - float tmp; - float max_dev; - - Np = (int16_t) ( intLimCDivPos( band_bits, 67 ) >> 2 ); - if ( band_bits - 268 * Np != 0 || Np == 0 ) /* L_msu */ - { - Np++; /* ceil */ - } - *bits = 0; - - if ( Np < MAX_SPLITS && ( band_bits - ( 8 * sfmsize * THR_ADD_SPLIT ) > 0 ) ) - { - Npart = (int16_t) intLimCDivPos( sfmsize, Np ); - *bits = 8; - Emean = 0; - k = 0; - for ( i = 0; i < Np; i++ ) - { - E[i] = EPSILON; - for ( j = 0; j < Npart; j++, k++ ) - { - E[i] += y[k] * y[k]; - } - E[i] = (float) 30 - norm_l( (Word32) max( E[i], 1 ) ); /* a 0 input integer Ei yields a zeroed log2(Ei) out */ - Emean += E[i]; - } - Emean /= Np; - - max_dev = -1; - for ( i = 0; i < Np; i++ ) - { - tmp = (float) fabs( E[i] - Emean ); - if ( tmp > max_dev ) - { - max_dev = tmp; - } - } - - if ( max_dev > ( 32 - band_bits / ( 8 * Np ) ) ) - { - rc_enc_bits( hBstr, hPVQ, 1, 1 ); - Np += 1; - } - else - { - rc_enc_bits( hBstr, hPVQ, 0, 1 ); - } - } - - Np = max( Np, (int16_t) ( ceil( (float) sfmsize / PVQ_MAX_BAND_SIZE ) ) ); - Np = min( MAX_SPLITS, Np ); - Np = min( (int16_t) floor( (float) sfmsize / MIN_BAND_SIZE ), Np ); - - return Np; -} - - -#define EPSILON_obtainEnergyParameter 0.00373f /**/ -#define C_obtainEnergyParameter ( (float) ( 1 << 15 ) / EVS_PI + EPSILON_obtainEnergyParameter ) - -static void obtainEnergyParameter( - const float Enear, /* i : Near energy */ - const float Eopp, /* i : Opposite energy */ - int16_t *param /* o : Energy parameter */ -) -{ - if ( !Eopp ) - { - *param = 0; - return; - } - if ( !Enear ) - { - *param = 1 << 14; - return; - } - *param = (int16_t) ( C_obtainEnergyParameter * atan2( (float) sqrt( Eopp ), (float) sqrt( Enear ) ) + 0.5f ); - - return; -} -#undef C_obtainEnergyParameter -#undef EPSILON_obtainEnergyParameter -#endif diff --git a/lib_enc/pvq_core_enc_fx.c b/lib_enc/pvq_core_enc_fx.c index 7f4dec808..0ad1d3192 100644 --- a/lib_enc/pvq_core_enc_fx.c +++ b/lib_enc/pvq_core_enc_fx.c @@ -15,7 +15,6 @@ /*-------------------------------------------------------------------* * Local function prototypes *--------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 calc_pvq_splits_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const Word16 band_bits, const Word16 sfmsize, const Word16 *y, const Word16 Q_y, Word16 *bits ); static Word16 calc_pvq_splits_ivas_fx( /* o : Number of segments */ BSTR_ENC_HANDLE hBstr, /* i/o: Encoder state */ @@ -32,7 +31,6 @@ static void encode_energies_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, cons static void encode_energies_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, const Word16 *coefs, const Word16 Q_coefs, Word16 Np, Word16 *dim_part, Word32 *E_part, Word16 *bits_part, Word16 *g_part, Word16 qband, Word16 *bits_left, Word32 enr, Word16 dim, const Word16 strict_bits ); /* Encode band with PVQ */ -#ifdef IVAS_FLOAT_FIXED static void pvq_encode_band_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -136,7 +134,6 @@ static void pvq_encode_band_ivas_fx( return; } -#endif static void pvq_encode_band_fx( BSTR_ENC_HANDLE hBstr, /* i/o: Encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -236,7 +233,6 @@ static void pvq_encode_band_fx( return; } -#ifdef IVAS_FLOAT_FIXED void pvq_encode_frame_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *coefs_norm, /* i : normalized coefficients to encode */ @@ -365,7 +361,6 @@ void pvq_encode_frame_ivas_fx( return; } -#endif void pvq_encode_frame_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ const Word16 *coefs_norm, /* i : normalized coefficients to encode */ @@ -496,7 +491,6 @@ void pvq_encode_frame_fx( * * Main Generic Audio Encoder Routine *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED Word16 pvq_core_enc_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 coefs_norm[], /* i/o: normalized coefficients to encode */ @@ -569,7 +563,6 @@ Word16 pvq_core_enc_ivas_fx( move16(); return add( pvq_bits, gain_bits_tot ); } -#endif Word16 pvq_core_enc_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 coefs_norm[], /* i/o: normalized coefficients to encode */ @@ -783,7 +776,6 @@ static void encode_energies_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void encode_energies_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -1006,7 +998,6 @@ static void densityIndexSymbolEncode_ivas_fx( return; } -#endif static void densityIndexSymbolEncode_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ @@ -1093,7 +1084,6 @@ static void densityIndexSymbolEncode_fx( * * Calculate the number of segments needed *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 calc_pvq_splits_ivas_fx( /* o : Number of segments */ BSTR_ENC_HANDLE hBstr, /* i/o: Encoder state */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -1197,7 +1187,6 @@ static Word16 calc_pvq_splits_ivas_fx( /* o : Number of Np = s_min( sfmsize, Np ); /* The code line assumes that MIN_BAND_SIZE is 1 */ return Np; } -#endif static Word16 calc_pvq_splits_fx( /* o : Number of segments */ BSTR_ENC_HANDLE hBstr, /* i/o: Encoder state */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -1300,4 +1289,3 @@ static Word16 calc_pvq_splits_fx( /* o : Number of segm Np = s_min( sfmsize, Np ); /* The code line assumes that MIN_BAND_SIZE is 1 */ return Np; } -#endif diff --git a/lib_enc/pvq_encode.c b/lib_enc/pvq_encode.c index b684ce2c6..23468cbe8 100644 --- a/lib_enc/pvq_encode.c +++ b/lib_enc/pvq_encode.c @@ -41,169 +41,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -static void pyramidSearch( const float *const s, const int16_t L, const int16_t Ptot, const float A, int16_t *ztak, float *stak ); - -/*-------------------------------------------------------------------* - * pvq_encode() - * - * - *--------------------------------------------------------------------*/ - -void pvq_encode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const float *x, /* i : vector to quantize */ - int16_t *y, /* o : quantized vector (non-scaled short)*/ - float *xq, /* o : quantized vector (scaled float) */ - const int16_t pulses, /* i : number of allocated pulses */ - const int16_t dim, /* i : Length of vector */ - const float gain /* i : Gain */ -) -{ - PvqEntry entry; - - pyramidSearch( x, dim, pulses, gain, y, xq ); - - entry = mpvq_encode_vec( y, dim, pulses ); - if ( dim != 1 ) - { - rc_enc_bits( hBstr, hPVQ, (uint32_t) entry.lead_sign_ind, 1 ); - rc_enc_uniform( hBstr, hPVQ, entry.index, entry.size ); - } - else - { - rc_enc_bits( hBstr, hPVQ, (uint32_t) entry.lead_sign_ind, 1 ); - } - return; -} - -/*! r: L1 norm value */ -static float L1norm( - const float *const s, /* i : input vector */ - float *abso_s, /* o : absolute vector */ - int16_t *sign_s, /* o : signs */ - const int16_t L /* i : vector length */ -) -{ - int16_t i; - float ftmp, r = 0.0f; - - for ( i = 0; i < L; i++ ) - { - ftmp = s[i]; - sign_s[i] = (int16_t) sign( ftmp ); - abso_s[i] = (float) fabs( ftmp ); - r += abso_s[i]; - } - - return r; -} - - -void pyramidSearch( - const float *const s, /* i : input vector */ - const int16_t L, /* i : vector length */ - const int16_t Ptot, /* i : assigned diracs */ - const float A, /* i : gain */ - int16_t *ztak, /* i : integer output vector */ - float *stak /* i : normalize output vector */ -) -{ - int16_t i, high_pulse_dens; - int16_t z[PVQ_MAX_BAND_SIZE]; - float sL1; - float energy, xcorr; - int16_t P; - float energy1, energy2; - float xcorr1sq, xcorr2sq; - float zscale, sscale; - float abso_s[PVQ_MAX_BAND_SIZE]; - int16_t sign_s[PVQ_MAX_BAND_SIZE]; - int16_t n = 0; - - high_pulse_dens = Ptot > (int16_t) ( 0.501892089843750f * L ); - sL1 = L1norm( s, abso_s, sign_s, L ); - if ( high_pulse_dens && sL1 > 0 && A > 0 ) - { - P = Ptot - PYR_OFFSET; - zscale = P / sL1; - for ( i = 0; i < L; i++ ) - { - z[i] = (int16_t) floor( zscale * abso_s[i] ); - } - } - else - { - for ( i = 0; i < L; i++ ) - { - z[i] = 0; - } - } - - energy = 0.0f; - if ( sL1 > 0 && A > 0 ) - { - xcorr = 0.0f; - P = 0; - for ( i = 0; i < L; i++ ) - { - xcorr += abso_s[i] * z[i]; - energy += z[i] * z[i]; - P += z[i]; - } - energy = 0.5f * energy; - while ( P < Ptot ) - { - energy += 0.5f; - n = 0; - xcorr1sq = xcorr + abso_s[0]; - xcorr1sq *= xcorr1sq; - energy1 = energy + z[0]; - - for ( i = 1; i < L; i++ ) - { - xcorr2sq = xcorr + abso_s[i]; - xcorr2sq *= xcorr2sq; - energy2 = energy + z[i]; - - if ( ( xcorr1sq * energy2 ) < ( xcorr2sq * energy1 ) ) - { - n = i; - xcorr1sq = xcorr2sq; - energy1 = energy2; - } - } - - z[n]++; - xcorr += abso_s[n]; - energy = energy1; - P++; - } - } - else - { - if ( L > 1 ) - { - z[0] = (int16_t) ( Ptot * 0.5f ); - z[L - 1] = -( Ptot - z[0] ); - energy = 0.5f * ( z[0] * z[0] + z[L - 1] * z[L - 1] ); - } - else - { - z[0] = Ptot; - energy = 0.5f * ( z[0] * z[0] ); - } - } - - sscale = (float) A / (float) sqrt( 2.0f * energy ); - for ( i = 0; i < L; i++ ) - { - ztak[i] = z[i] * sign_s[i]; - stak[i] = sscale * ztak[i]; - } - - return; -} -#endif diff --git a/lib_enc/pvq_encode_fx.c b/lib_enc/pvq_encode_fx.c index 4ebc0c35f..b09d77802 100644 --- a/lib_enc/pvq_encode_fx.c +++ b/lib_enc/pvq_encode_fx.c @@ -174,7 +174,6 @@ static Word16 one_pulse_search( * Function pvq_encode_fx() * * * *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void pvq_encode_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -392,7 +391,6 @@ void pvq_encode_ivas_fx( return; } -#endif void pvq_encode_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ diff --git a/lib_enc/q_gain2p.c b/lib_enc/q_gain2p.c index 8c18d3ab1..bcdeaa041 100644 --- a/lib_enc/q_gain2p.c +++ b/lib_enc/q_gain2p.c @@ -41,349 +41,3 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------------*/ - -static int16_t gain_enc_uv( const float *code, const int16_t lcode, float *gain_pit, float *gain_code, ACELP_CbkCorr *coeff, float *past_gcode, float *gain_inov ); - - -/*-------------------------------------------------------------------------* - * procedure q_gain2_plus * - * ~~~~~~~~~~~~~~~~~~~~~~ * - * Quantization of pitch and codebook gains. * - * The following routines is Q_gains updated for AMR_WB_PLUS. * - * MA prediction is removed and MEAN_ENER is now quantized with 2 bits and * - * transmitted once every ACELP frame to the gains decoder. * - * The pitch gain and the code gain are vector quantized and the * - * mean-squared weighted error criterion is used in the quantizer search. * - *-------------------------------------------------------------------------*/ - -void encode_acelp_gains( - const float *code, - const int16_t gains_mode, - const float mean_ener_code, - const int16_t clip_gain, - ACELP_CbkCorr *g_corr, - float *gain_pit, - float *gain_code, - int16_t **pt_indice, - float *past_gcode, - float *gain_inov, - const int16_t L_subfr, - float *code2, - float *gain_code2, - const int16_t noisy_speech_flag ) -{ - int16_t index = 0; - - if ( ( ( gains_mode > 0 ) && ( gains_mode < 4 ) ) ) - { - /* Memory-less gain coding */ - index = Mode2_gain_enc_mless( code, L_subfr, gain_pit, gain_code, g_corr, mean_ener_code, clip_gain, past_gcode, gain_inov, gains_mode - 1 ); - } - else if ( gains_mode == 6 ) - { - /* UV gains quantizer (6bits/subfr) */ - index = gain_enc_uv( code, L_subfr, gain_pit, gain_code, g_corr, past_gcode, gain_inov ); - } - else if ( gains_mode == 7 ) - { - /* GACELP_UV gains quantizer (7=5-2bits/subfr) */ - index = gain_enc_gacelp_uv( code, code2, L_subfr, mean_ener_code, gain_pit, gain_code, gain_code2, g_corr, past_gcode, gain_inov, noisy_speech_flag ); - } - else - { - IVAS_ERROR( IVAS_ERR_INTERNAL, "invalid gains coding for acelp!" ); - } - - **pt_indice = index; - ( *pt_indice )++; - - return; -} - -/*---------------------------------------------------------------------* - * procedure Mode2_gain_enc_mless - * Quantization of pitch and codebook gains. - * - an initial predicted gain, gcode0, is first determined based on - * the predicted scaled innovation energy - * - the correction factor gamma = g_code / gcode0 is then vector quantized - * along with gain_pit - * - the mean-squared weighted error criterion is used for the quantizer search - *---------------------------------------------------------------------*/ - -int16_t Mode2_gain_enc_mless( - const float *code, /* i : algebraic excitation */ - const int16_t lcode, /* i : Subframe size */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - ACELP_CbkCorr *pcoeff, /* i/o: correlations , -2,, -2 and 2*/ - const float mean_ener, /* i : mean_ener defined in open-loop (3 bits) */ - const int16_t clip_gain, /* i : gain pitch clipping flag (1 = clipping) */ - float *past_gcode, /* i/o: past gain of code */ - float *gain_inov, /* o : unscaled innovation gain */ - const int16_t coder_type /* i : coder type */ -) -{ - int16_t index, i, size, size_clip; - const Word16 *p, *t_qua_gain; - float dist, dist_min, g_pitch, g_code, gcode0, ener_code; - ACELP_CbkCorr coeff; - - /*-----------------------------------------------------------------* - * - calculate the unscaled innovation energy - * - calculate the predicted gain code - *-----------------------------------------------------------------*/ - - if ( coder_type == 0 ) - { - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - ener_code = 10 * (float) log10( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - gcode0 = (float) pow( 10, 0.05 * ( mean_ener - ener_code ) ); - } - else - { - ener_code = 0.01F; - for ( i = 0; i < lcode; i++ ) - { - ener_code += code[i] * code[i]; - } - - *gain_inov = (float) sqrt( (float) lcode / ener_code ); - - ener_code = (float) ( -10.0 * log10( (float) lcode / ener_code ) ); - gcode0 = mean_ener - ener_code; - gcode0 = (float) pow( 10.0, gcode0 / 20.0 ); /* predicted gain */ - } - - /*-----------------------------------------------------------------* - * gain quantization initializations - * - find the initial quantization pitch index - * - set the gains searching range - *-----------------------------------------------------------------*/ - - if ( coder_type == 0 ) - { - t_qua_gain = E_ROM_qua_gain5b_const; - size_clip = 9; - size = NB_QUA_GAIN5B; - } - else if ( coder_type == 1 ) - { - t_qua_gain = E_ROM_qua_gain6b_const; - size_clip = 6; - size = NB_QUA_GAIN6B; /* searching range of the gain quantizer */ - } - else - { - t_qua_gain = E_ROM_qua_gain7b_const; - size_clip = 21; - size = NB_QUA_GAIN7B; - } - - if ( clip_gain == 1 ) - { - size -= size_clip; /* limit pitch gain to 1.0 */ - } - - coeff = *pcoeff; - coeff.xy1_flt *= -2.0f; - coeff.xy2_flt *= -2.0f; - coeff.y1y2_flt *= 2.0f; - - /*-----------------------------------------------------------------* - * search for the best quantizer - *-----------------------------------------------------------------*/ - - p = t_qua_gain; - dist_min = FLT_MAX; - index = 0; - - for ( i = 0; i < size; i++ ) - { - g_pitch = (float) ( *p++ ) / ( 1 << 14 ); /* pitch gain */ - g_code = gcode0 * (float) ( *p++ ) / ( 1 << 11 ); /* codebook gain */ - - dist = g_pitch * g_pitch * coeff.y1y1_flt + g_pitch * coeff.xy1_flt + g_code * g_code * coeff.y2y2_flt + g_code * coeff.xy2_flt + g_pitch * g_code * coeff.y1y2_flt; - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - - *gain_pit = (float) ( t_qua_gain[index * 2] ) / ( 1 << 14 ); - *gain_code = (float) ( t_qua_gain[index * 2 + 1] ) / ( 1 << 11 ) * gcode0; - - *past_gcode = *gain_code / *gain_inov; - - return index; -} - -/*---------------------------------------------------------------------* - * procedure gain_enc_uv - * Quantization of pitch and codebook gains. - * - an initial predicted gain, gcode0, is first determined based on - * the predicted scaled innovation energy - * - the correction factor gamma = g_code / gcode0 is then vector quantized - * along with gain_pit - * - the mean-squared weighted error criterion is used for the quantizer search - *---------------------------------------------------------------------*/ - -static int16_t gain_enc_uv( - const float *code, /* i : algebraic excitation */ - const int16_t lcode, /* i ) : Subframe size */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - ACELP_CbkCorr *coeff, /* i/o : correlations , -2,, -2 and 2 */ - float *past_gcode, /* i/o : past gain of code */ - float *gain_inov /* o : unscaled innovation gain */ -) -{ - int16_t index; - float g_code, g_code_corr; - - /*-----------------------------------------------------------------* - * - calculate the unscaled innovation energy - *-----------------------------------------------------------------*/ - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - - g_code_corr = coeff->xy2_flt / ( coeff->y2y2_flt * ( *gain_inov ) ); /*Correlation based*/ - - g_code = g_code_corr; - - /*90dB max of gain for 2^15 amplitude code, */ - if ( g_code > 0.000001f ) - { - index = (int16_t) ( ( ( 20.f * log10( g_code ) + 30.f ) / 1.9f ) + 0.5f ); - - if ( index > 63 ) - { - index = 63; - } - else if ( index < 0 ) - { - index = 0; - } - } - else - { - index = 0; - } - - *gain_code = (float) pow( 10.f, ( ( ( index * 1.9f ) - 30.f ) / 20.f ) ); - *past_gcode = *gain_code; /*unscaled gain*/ - *gain_code *= *gain_inov; /*scaled gain*/ - *gain_pit = 0.f; - - return index; -} - -/*---------------------------------------------------------------------* - * procedure gain_enc_gacelp_uv - * Quantization of pitch and codebook gains. - * - an initial predicted gain, gcode0, is first determined based on - * the predicted scaled innovation energy - * - the correction factor gamma = g_code / gcode0 is then vector quantized - * along with gain_pit - * - the mean-squared weighted error criterion is used for the quantizer search - *---------------------------------------------------------------------*/ - -int16_t gain_enc_gacelp_uv( - const float *code, /* i : algebraic excitation */ - const float *code2, /* i : gaussian excitation */ - const int16_t lcode, /* i : Subframe size */ - const float mean_ener, /* i : quantized mean energy of the frame */ - float *gain_pit, /* o : quantized pitch gain */ - float *gain_code, /* o : quantized codebook gain */ - float *gain_code2, /* o : quantized codebook gain */ - ACELP_CbkCorr *coeff, /* i/o: correlations , -2,, -2 and 2 */ - float *past_gcode, /* i/o: past gain of code */ - float *gain_inov, /* o : unscaled innovation gain */ - const int16_t noisy_speech_flag /* i : noisy speech flag */ -) -{ - int16_t index; - float gcode, gcode2, pred_nrg_frame; - float norm_code2; - int16_t i; - float c, c_index2, c_first; - int16_t index2; - - /*-----------------------------------------------------------------* - * - calculate the unscaled innovation energy - *-----------------------------------------------------------------*/ - - *gain_inov = 1.0f / (float) sqrt( ( dotp( code, code, lcode ) + 0.01f ) / lcode ); - pred_nrg_frame = (float) pow( 10.0, mean_ener / 20.0 ); - gcode = pred_nrg_frame * ( *gain_inov ); - norm_code2 = 1.0f / (float) sqrt( ( dotp( code2, code2, lcode ) + 0.01f ) / lcode ); - gcode2 = pred_nrg_frame * ( norm_code2 ); - - /*-----------------------------------------------------------------* - * search for the best quantizer - *-----------------------------------------------------------------*/ - - *gain_code = coeff->xy2_flt / ( coeff->y2y2_flt * gcode ); - - if ( *gain_code > 0.000001f ) - { - index = (int16_t) ( ( ( 20.f * log10( *gain_code ) + 20.f ) / 1.25f ) + 0.5f ); - - if ( index > 31 ) - { - index = 31; - } - else if ( index < 0 ) - { - index = 0; - } - } - else - { - index = 0; - } - - *gain_code = (float) pow( 10.f, ( ( ( index * 1.25f ) - 20.f ) / 20.f ) ); - *gain_code *= gcode; - - if ( noisy_speech_flag ) - { - c_first = 0.8f * coeff->xx_flt - ( *gain_code ) * ( *gain_code ) * coeff->y2y2_flt; - } - else - { - c_first = coeff->xx_flt - ( *gain_code ) * ( *gain_code ) * coeff->y2y2_flt; - } - index2 = 0; - *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); - - c_index2 = c_first - ( *gain_code2 ) * ( *gain_code2 ) * coeff->y1y1_flt - 2 * ( *gain_code ) * ( *gain_code2 ) * coeff->y1y2_flt; - - for ( i = 1; i < 4; i++ ) - { - *gain_code2 = (float) ( i * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); - - c = c_first - ( *gain_code2 ) * ( *gain_code2 ) * coeff->y1y1_flt - 2 * ( *gain_code ) * ( *gain_code2 ) * coeff->y1y2_flt; - - if ( fabs( c ) < fabs( c_index2 ) ) - { - index2 = i; - c_index2 = c; - } - } - - *gain_code2 = (float) ( index2 * 0.25f + 0.25f ) * ( *gain_code * ( gcode2 / gcode ) ); - index += index2 * 32; - - *gain_pit = 0.f; - *past_gcode = *gain_code / *gain_inov; /*unscaled gain*/ - - return index; -} -#endif diff --git a/lib_enc/qlpc_avq.c b/lib_enc/qlpc_avq.c index 38f82309e..24f06eafe 100644 --- a/lib_enc/qlpc_avq.c +++ b/lib_enc/qlpc_avq.c @@ -39,349 +39,3 @@ #include "prot.h" #include "ivas_prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * qlpc_avq() - * - * - *--------------------------------------------------------------------*/ - -void qlpc_avq( - const float *lsf, /* i : Input LSF vectors */ - const float *lsfmid, /* i : Input mid-LSF vectors */ - float *lsf_q, /* o : Quantized LFS vectors */ - float *lsfmid_q, /* o : Quantized mid-LFS vectors */ - int16_t *index, /* o : Quantization indices */ - int16_t *nb_indices, /* o : Number of quantization indices */ - int16_t *nbbits, /* o : Number of quantization bits */ - const int16_t core, /* i : core */ - const int32_t sr_core /* i : internal sampling rate */ -) -{ - int16_t i; - float lsfmid_q0[M]; - int16_t *tmp_index, indxt[256], nbits, nbt, nit; - float dummy[M]; - - /* Init */ - tmp_index = &index[0]; - *nb_indices = 0; - - /* Quantize end_frame LPC */ - set_f( lsf_q, 0, M ); - - tmp_index[0] = vlpc_1st_cod( lsf, lsf_q, sr_core, dummy ); - - nbt = vlpc_2st_cod( lsf, lsf_q, &tmp_index[1], 0, sr_core ); - - nit = 1 + 2 + index[1] + index[2]; - tmp_index += nit; - *nb_indices += nit; - nbbits[0] = 8 + nbt; - - *tmp_index = 0; - - /* Quantize mid-frame LPC */ - if ( core == TCX_10_CORE ) - { - tmp_index++; - *nb_indices += 1; - - /* LPC2: Abs? */ - set_f( lsfmid_q, 0, M ); - - tmp_index[0] = vlpc_1st_cod( lsfmid, lsfmid_q, sr_core, dummy ); - - nbits = vlpc_2st_cod( lsfmid, lsfmid_q, &tmp_index[1], 0, sr_core ); - - nbt = 8 + nbits; - nit = 1 + 2 + tmp_index[1] + tmp_index[2]; - - /* LPC2: RelR? */ - for ( i = 0; i < M; i++ ) - { - lsfmid_q0[i] = lsf_q[i]; - } - - nbits = vlpc_2st_cod( lsfmid, lsfmid_q0, indxt, 3, sr_core ); - - if ( nbits < nbt ) - { - nbt = nbits; - nit = 2 + indxt[0] + indxt[1]; - tmp_index[-1] = 1; - - for ( i = 0; i < M; i++ ) - { - lsfmid_q[i] = lsfmid_q0[i]; - } - - for ( i = 0; i < nit; i++ ) - { - tmp_index[i] = indxt[i]; - } - } - - tmp_index += nit; - *nb_indices += nit; - nbbits[1] = 1 + nbt; - } - - return; -} - - -/*-------------------------------------------------------------------* - * unary_code() - * - * - *--------------------------------------------------------------------*/ - -static int16_t unary_code( int16_t ind, BSTR_ENC_HANDLE hBstr ) -{ - int16_t nb_bits; - - nb_bits = 1; - - /* Index bits */ - ind -= 1; - - while ( ind >= 16 ) - { - push_next_indice( hBstr, 0xffffU, 16 ); - nb_bits += 16; - ind -= 16; - } - if ( ind > 0 ) - { - push_next_indice( hBstr, ( 1U << ind ) - 1, ind ); - nb_bits += ind; - } - - /* Stop bit */ - push_next_indice( hBstr, 0, 1 ); - - return ( nb_bits ); -} - - -/*-------------------------------------------------------------------* - * unpack4bits() - * - * - *--------------------------------------------------------------------*/ - -static int16_t unpack4bits( int16_t nbits, const int16_t *prm, BSTR_ENC_HANDLE hBstr ) -{ - int16_t i; - - if ( nbits == 0 ) - { - push_next_indice( hBstr, 0, 0 ); - i = 1; - } - else - { - i = 0; - - while ( nbits > 4 ) - { - push_next_indice( hBstr, prm[i], 4 ); - nbits -= 4; - i++; - } - push_next_indice( hBstr, prm[i], nbits ); - i++; - } - - return ( i ); -} - - -/*-------------------------------------------------------------------* - * encode_lpc_avq() - * - * - *--------------------------------------------------------------------*/ - -int16_t encode_lpc_avq( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - const int16_t numlpc, /* i : Number of sets of lpc */ - const int16_t *param_lpc, /* i : lpc parameters */ - const int16_t core, /* i : core */ - const int16_t element_mode /* i : element mode - decides between SNS and LPC coding */ -) -{ - int16_t k, j; - int16_t q_type, nb_ind; - int16_t i, qn1, qn2, nb, avqBits, st1 = 0; - int16_t nb_bits; - int16_t stereo_mode, bits_for_abs_quant; - - stereo_mode = 0; - - if ( element_mode == IVAS_CPE_MDCT ) - { - bits_for_abs_quant = SNS_ABS_QUANT_BITS; - } - else - { - bits_for_abs_quant = LPC_ABS_QUANT_BITS; - } - - j = 0; - nb_bits = 0; - - for ( k = 0; k < numlpc; k++ ) - { - /* Retrieve quantizer type */ - if ( k == 0 ) - { - q_type = 0; - } - else - { - q_type = param_lpc[j++]; - } - - if ( element_mode == IVAS_CPE_MDCT && k == 0 ) - { - stereo_mode = param_lpc[j++]; - } - - /* Determine number of AVQ indices */ - nb_ind = 0; - - if ( q_type == 0 ) - { - st1 = param_lpc[j++]; - } - qn1 = param_lpc[j++]; - qn2 = param_lpc[j++]; - if ( qn1 != SNS_LOW_BR_MODE ) - { - nb_ind += qn1 + qn2; - } - - if ( k == 0 || ( k == 1 && core != TCX_20_CORE ) ) - { - /* Encode quantizer type */ - if ( k == 0 ) - { - nb = 0; - } - else - { - nb = 1; - push_next_indice( hBstr, q_type, nb ); - } - - nb_bits += nb; - - /* Encode quantizer data */ - if ( ( ( q_type == 0 ) && element_mode != IVAS_CPE_MDCT ) || ( ( q_type == 0 ) && ( st1 >= 0 ) && element_mode == IVAS_CPE_MDCT ) ) - { - /* Absolute quantizer with 1st stage stochastic codebook */ - push_next_indice( hBstr, st1, bits_for_abs_quant ); - nb_bits += bits_for_abs_quant; - } - - if ( element_mode == IVAS_CPE_MDCT && stereo_mode == 3 && st1 < 0 ) - { - push_next_indice( hBstr, st1 + 2, 1 ); - nb_bits++; - } - - if ( element_mode != IVAS_CPE_MDCT || ( st1 != -2 && qn1 != SNS_LOW_BR_MODE ) ) - { - /* 2 bits to specify Q2,Q3,Q4,ext */ - nb_bits += 4; - i = qn1 - 2; - - if ( ( i < 0 ) || ( i > 3 ) ) - { - i = 3; - } - push_next_indice( hBstr, i, 2 ); - - i = qn2 - 2; - - if ( ( i < 0 ) || ( i > 3 ) ) - { - i = 3; - } - push_next_indice( hBstr, i, 2 ); - - /* Unary code for abs and rel LPC0/LPC2 */ - /* Q5 = 0, Q6=10, Q0=110, Q7=1110, ... */ - nb = qn1; - - if ( nb > 6 ) - { - nb -= 3; - } - else if ( nb > 4 ) - { - nb -= 4; - } - else if ( nb == 0 ) - { - nb = 3; - } - else - { - nb = 0; - } - - if ( nb > 0 ) - { - unary_code( nb, hBstr ); - } - nb_bits += nb; - - nb = qn2; - - if ( nb > 6 ) - { - nb -= 3; - } - else if ( nb > 4 ) - { - nb -= 4; - } - else if ( nb == 0 ) - { - nb = 3; - } - else - { - nb = 0; - } - - if ( nb > 0 ) - { - unary_code( nb, hBstr ); - } - nb_bits += nb; - - avqBits = 4 * qn1; - unpack4bits( avqBits, ¶m_lpc[j], hBstr ); - j += qn1; - nb_bits += avqBits; - - avqBits = 4 * qn2; - unpack4bits( avqBits, ¶m_lpc[j], hBstr ); - j += qn2; - nb_bits += avqBits; - } - } - else - { - j += nb_ind; - } - } - - return ( nb_bits ); -} -#endif diff --git a/lib_enc/qlpc_avq_fx.c b/lib_enc/qlpc_avq_fx.c index 2ff68b43e..b3b126876 100644 --- a/lib_enc/qlpc_avq_fx.c +++ b/lib_enc/qlpc_avq_fx.c @@ -150,7 +150,6 @@ static Word16 unary_code( Word16 ind, BSTR_ENC_HANDLE hBstr ) return ( nb_bits ); } -#ifdef IVAS_FLOAT_FIXED static Word16 unary_code_ivas_fx( Word16 ind, BSTR_ENC_HANDLE hBstr ) { Word16 nb_bits; @@ -161,10 +160,16 @@ static Word16 unary_code_ivas_fx( Word16 ind, BSTR_ENC_HANDLE hBstr ) /* Index bits */ ind = sub( ind, 1 ); - FOR( ; ind > 0; ind-- ) + WHILE( ind >= 16 ) { - push_next_indice( hBstr, 1, 1 ); - nb_bits = add( nb_bits, 1 ); + push_next_indice( hBstr, 0xffffU, 16 ); + nb_bits = add( nb_bits, 16 ); + ind = sub( ind, 16 ); + } + IF( ind > 0 ) + { + push_next_indice( hBstr, ( 1U << ind ) - 1, ind ); + nb_bits = add( nb_bits, ind ); } /* Stop bit */ @@ -172,7 +177,6 @@ static Word16 unary_code_ivas_fx( Word16 ind, BSTR_ENC_HANDLE hBstr ) return ( nb_bits ); } -#endif /*-------------------------------------------------------------------* * unpack4bits() * @@ -204,7 +208,6 @@ static Word16 unpack4bits( Word16 nbits, const Word16 *prm, BSTR_ENC_HANDLE hBst return ( i ); } -#ifdef IVAS_FLOAT_FIXED static Word16 unpack4bits_ivas_fx( Word16 nbits, const Word16 *prm, BSTR_ENC_HANDLE hBstr ) { Word16 i; @@ -231,7 +234,6 @@ static Word16 unpack4bits_ivas_fx( Word16 nbits, const Word16 *prm, BSTR_ENC_HAN return ( i ); } -#endif /*-------------------------------------------------------------------* * encode_lpc_avq_fx() * @@ -447,7 +449,6 @@ Word16 encode_lpc_avq_fx( return ( nb_bits ); } -#ifdef IVAS_FLOAT_FIXED Word16 encode_lpc_avq_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ const Word16 numlpc, /* i : Number of sets of lpc */ @@ -657,4 +658,3 @@ Word16 encode_lpc_avq_ivas_fx( return ( nb_bits ); } -#endif diff --git a/lib_enc/qlpc_stoch.c b/lib_enc/qlpc_stoch.c index c9bb94359..bb488002d 100644 --- a/lib_enc/qlpc_stoch.c +++ b/lib_enc/qlpc_stoch.c @@ -44,285 +44,3 @@ #include "rom_enc.h" #include "basop_proto_func.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * lpc_quantization() - * - * - *--------------------------------------------------------------------*/ - -void lpc_quantization( - Encoder_State *st, - const float lsp[], - const float lspmid[], - float lsp_q[], - float lsf_q[], - float lspmid_q[], - const int16_t coder_type, - const int16_t acelp_midLpc, - int16_t param_lpc[], - int16_t nbits_lpc[], - int16_t *bits_param_lpc, - int16_t *no_param_lpc ) -{ - int16_t nb_indices; - float lsfmid_q[M]; - int16_t lsfmid_idx; - int16_t i; - float lsf[M], lsfmid[M]; - int16_t force_sf; - float fec_lsf[M], stab; - - nb_indices = 0; - - /****** High-rate LPC quantizer *******/ - if ( st->lpcQuantization == 0 ) - { - lsp2lsf( lsp, lsf, M, st->sr_core ); - - if ( st->core == TCX_10_CORE ) - { - lsp2lsf( lspmid, lsfmid, M, st->sr_core ); - } - - qlpc_avq( lsf, lsfmid, lsf_q, lsfmid_q, param_lpc, &nb_indices, nbits_lpc, st->core, st->sr_core ); - - lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); - - if ( st->core == TCX_10_CORE ) - { - lsf2lsp( lsfmid_q, lspmid_q, M, st->sr_core ); - } - - assert( nb_indices <= NPRM_LPC_NEW ); - } - - /****** Low-rate LPC quantizer *******/ - else if ( st->lpcQuantization == 1 ) - { - lsp2lsf( lsp, lsf, M, st->sr_core ); - - force_sf = 0; - /*Force safety net when possible in case of transitions*/ - if ( st->tc_cnt >= 1 || st->last_core_brate <= SID_2k40 || st->next_force_safety_net ) - { - force_sf = 1; - st->next_force_safety_net = 0; - } - - if ( st->next_force_safety_net == 1 && st->Opt_RF_ON ) - { - force_sf = 1; - st->next_force_safety_net = 0; - } - - if ( st->sr_core == INT_FS_16k && coder_type == UNVOICED ) - { - lsf_end_enc( st, lsf, lsf_q, ENDLSF_NBITS, GENERIC, force_sf, param_lpc, no_param_lpc, bits_param_lpc, GENERIC, NULL ); - - nb_indices = *no_param_lpc; - } - else - { - lsf_end_enc( st, lsf, lsf_q, ENDLSF_NBITS, coder_type, force_sf, param_lpc, no_param_lpc, bits_param_lpc, coder_type, NULL ); - - nb_indices = *no_param_lpc; - } - - FEC_lsf_estim_enc( st, fec_lsf ); - - /* FEC - calculate LSF stability */ - stab = lsf_stab( lsf_q, fec_lsf, 0, st->L_frame ); - - if ( stab < ( STAB_FAC_LIMIT + 0.2 ) && ( coder_type == VOICED || coder_type == GENERIC ) && st->Opt_RF_ON ) - { - st->next_force_safety_net = 1; - } - - lsf2lsp( lsf_q, lsp_q, M, st->sr_core ); - - *nbits_lpc = ENDLSF_NBITS; - } - else - { - assert( 0 ); - } - - st->seed_acelp = 0; - for ( i = nb_indices - 1; i >= 0; i-- ) - { - /* rightshift before seed_acelp+param_lpc[i] to avoid overflows*/ - st->seed_acelp = (int16_t) ( ( ( ( st->seed_acelp ) >> 1 ) + param_lpc[i] ) * 31821L + 13849L ); - } - - /* Mid-frame LPC quantization */ - if ( st->lpcQuantization && acelp_midLpc ) - { - if ( st->rate_switching_reset == 0 ) - { - lsp2lsf( lspmid, lsfmid, M, st->sr_core ); - midlsf_enc( st->lsf_old, lsf_q, lsfmid, &lsfmid_idx, M, st->Bin_E_old, st->narrowBand, st->sr_core, coder_type ); - param_lpc[nb_indices++] = lsfmid_idx; - - midlsf_dec_flt( st->lsf_old, lsf_q, lsfmid_idx, lsfmid_q, M, coder_type, NULL, 0, 1 ); - - reorder_lsf( lsfmid_q, LSF_GAP_MID, M, st->sr_core ); - lsf2lsp( lsfmid_q, lspmid_q, M, st->sr_core ); - } - else - { - param_lpc[nb_indices++] = 0; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Unified_weighting() - * - * LSF weighting - *-------------------------------------------------------------------*/ - -void Unified_weighting( - const float Bin_Ener_128[], /* i : FFT Bin energy 128 bins in two sets */ - const float lsf[], /* i : LSF vector */ - float w[], /* o : LP weighting filter (numerator) */ - const int16_t narrowBand, /* i : flag for Narrowband */ - const int16_t unvoiced, /* i : flag for Unvoiced frame */ - const int32_t sr_core, /* i : sampling rate of core-coder */ - const int16_t order /* i : LP order */ -) -{ - int16_t i; - float nf; - const int16_t( *ptr_lsf_fit_model )[M]; - int16_t norm_lsf[M]; - float tmp, min_val; - float w_fft[M]; - float Bin_Ener_160[160]; - const float *Bin_Ener; - const float *Freq_w_Table; - int16_t last_bin; - - /*Config. weighting*/ - if ( narrowBand ) - { - ptr_lsf_fit_model = lsf_unified_fit_model_nb; - nf = 6400.f; - - last_bin = 127; - Bin_Ener = Bin_Ener_128; - } - else if ( sr_core == INT_FS_12k8 ) - { - ptr_lsf_fit_model = lsf_unified_fit_model_wb; - nf = 6400.f; - - last_bin = 127; - Bin_Ener = Bin_Ener_128; - } - else - { - ptr_lsf_fit_model = lsf_unified_fit_model_wbhb; - nf = 8000.f; - - /* Fill the missing part (128~159) of the bin energy */ - last_bin = 159; - - mvr2r( Bin_Ener_128, Bin_Ener_160, L_FFT / 2 ); - - /* Find average bin energy (32 Energy) */ - tmp = 0.f; - for ( i = 95; i < 127; i++ ) - { - tmp += Bin_Ener_160[i]; - } - - tmp = tmp / 32.f; - for ( i = 127; i < 160; i++ ) - { - Bin_Ener_160[i] = tmp; - } - - Bin_Ener = Bin_Ener_160; - } - - /* 1) FFT weights*/ - if ( unvoiced ) - { - Freq_w_Table = Freq_Weight_UV; - } - else - { - Freq_w_Table = Freq_Weight_Com; - } - - /* Use Envelope */ - min_val = 1000.0f; - for ( i = 0; i < M; i++ ) - { - norm_lsf[i] = (int16_t) ( ( lsf[i] / 50.f ) + 0.5f ); - - if ( norm_lsf[i] == 0 ) - { - w_fft[i] = Bin_Ener[1]; - } - else if ( norm_lsf[i] == last_bin ) - { - w_fft[i] = Bin_Ener[last_bin - 1]; - } - else - { - tmp = max( Bin_Ener[norm_lsf[i]], Bin_Ener[norm_lsf[i] - 1] ); - w_fft[i] = max( Bin_Ener[norm_lsf[i] + 1], tmp ); - } - - if ( w_fft[i] < MIN_LOG_60dB ) - { - w_fft[i] = MIN_LOG_VAL_60dB; - } - else - { - w_fft[i] = (float) ( 10.0 * log10( w_fft[i] ) ); - } - - if ( w_fft[i] < min_val ) - { - min_val = w_fft[i]; - } - } - - for ( i = 0; i < M; i++ ) - { - w_fft[i] = (float) ( sqrt( w_fft[i] - min_val ) + 2.f ); - w_fft[i] *= Freq_w_Table[norm_lsf[i]]; - } - - /* 2) IHM weights*/ - w[0] = 1.f / ( lsf[0] - 0 ) + 1.f / ( lsf[1] - lsf[0] ); - for ( i = 1; i < order - 1; i++ ) - { - w[i] = 1.f / ( lsf[i] - lsf[i - 1] ) + 1.f / ( lsf[i + 1] - lsf[i] ); - } - w[order - 1] = 1.f / ( lsf[order - 1] - lsf[order - 2] ) + - 1.f / ( nf - lsf[order - 1] ); - - /* 3) Fitting model combining the two weights*/ - for ( i = 0; i < order; i++ ) - { - w[i] *= ( nf / EVS_PI ); - w[i] = ( (float) ( ptr_lsf_fit_model[0][i] ) / ( 1 << 10 ) ) + w[i] * ( (float) ( ptr_lsf_fit_model[1][i] ) / ( 1 << 15 ) ) + w[i] * w[i] * ( (float) ( ptr_lsf_fit_model[2][i] ) / ( 1 << 18 ) ) + w_fft[i] * ( (float) ( ptr_lsf_fit_model[3][i] ) / ( 1 << 12 ) ); - - if ( w[i] < 1.f / ( i + 1 ) ) - { - w[i] = 1.f / ( i + 1 ); - } - } - - return; -} -#endif diff --git a/lib_enc/qlpc_stoch_fx.c b/lib_enc/qlpc_stoch_fx.c index afc45cdb6..1750528b3 100644 --- a/lib_enc/qlpc_stoch_fx.c +++ b/lib_enc/qlpc_stoch_fx.c @@ -201,7 +201,6 @@ void lpc_quantization_fx( return; } -#ifdef IVAS_FLOAT_FIXED void lpc_quantization_ivas_fx( Encoder_State *st, const Word16 lsp[], /* Q15 */ @@ -363,7 +362,6 @@ void lpc_quantization_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* diff --git a/lib_enc/range_enc.c b/lib_enc/range_enc.c index 869aee1db..fd4f3cb7c 100644 --- a/lib_enc/range_enc.c +++ b/lib_enc/range_enc.c @@ -40,288 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *-------------------------------------------------------------------*/ - -static void rc_enc_shift( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ ); - -static void rc_enc_write( BSTR_ENC_HANDLE hBstr, const int16_t byte, const int16_t bits ); - - -/*-------------------------------------------------------------------* - * rc_enc_init() - * - * Initalize range coder - *-------------------------------------------------------------------*/ - -void rc_enc_init( - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - int16_t tot_bits /* i : Total bit budget */ -) -{ - hPVQ->rc_low = 0; - hPVQ->rc_range = 0xffffffff; - hPVQ->rc_cache = -1; - hPVQ->rc_carry = 0; - hPVQ->rc_carry_count = 0; - hPVQ->rc_num_bits = 0; - hPVQ->rc_tot_bits = tot_bits; - hPVQ->rc_offset = 0; - - return; -} - -/*-------------------------------------------------------------------* - * rc_encode() - * - * Encode symbol with range coder - *-------------------------------------------------------------------*/ - -void rc_encode( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const uint32_t cum_freq, /* i : Cumulative frequency up to symbol */ - const uint32_t sym_freq, /* i : Symbol probability */ - const uint32_t tot /* i : Total cumulative frequency */ -) -{ - uint32_t r, tmp; - uint32_t inv_tot; - int16_t exp; - - inv_tot = UL_inverse_float( tot, &exp ); - tmp = UMult_32_32( hPVQ->rc_range, inv_tot ); - r = tmp >> ( exp - 32 ); - tmp = r * cum_freq; - - hPVQ->rc_low = hPVQ->rc_low + tmp; - if ( hPVQ->rc_low < tmp ) - { - hPVQ->rc_carry = 1; - } - - hPVQ->rc_range = r * sym_freq; - - while ( hPVQ->rc_range < 1 << 24 ) - { - hPVQ->rc_range = hPVQ->rc_range << 8; - hPVQ->rc_num_bits += 8; - rc_enc_shift( hBstr, hPVQ ); - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_enc_finish() - * - * Finalize range coder - *-------------------------------------------------------------------*/ - -void rc_enc_finish( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ -) -{ - uint32_t val, mask, high; - int16_t bits, over1, over2; - - bits = norm_ul_float( hPVQ->rc_range ) + 1; /* aligned to BASOP */ - mask = 0xffffffff >> bits; - - val = hPVQ->rc_low + mask; - high = hPVQ->rc_low + hPVQ->rc_range; - - over1 = val < hPVQ->rc_low; - over2 = high < hPVQ->rc_low; - - val = val & ~mask; - - if ( !( over1 ^ over2 ) ) - { - if ( ( val + mask ) >= high ) - { - bits++; - mask >>= 1; - val = ( hPVQ->rc_low + mask ) & ~mask; - } - - if ( val < hPVQ->rc_low ) - { - hPVQ->rc_carry = 1; - } - } - - hPVQ->rc_low = val; - - if ( bits > hPVQ->rc_tot_bits - hPVQ->rc_num_bits ) - { - bits = hPVQ->rc_tot_bits - hPVQ->rc_num_bits; - } - - hPVQ->rc_num_bits += bits; - while ( bits > 0 ) - { - rc_enc_shift( hBstr, hPVQ ); - bits -= 8; - } - - bits += 8; - - if ( hPVQ->rc_carry_count > 0 ) - { - rc_enc_write( hBstr, hPVQ->rc_cache + hPVQ->rc_carry, 8 ); - - while ( hPVQ->rc_carry_count > 1 ) - { - rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ), 8 ); - hPVQ->rc_carry_count--; - } - rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ) & ( ( 1 << bits ) - 1 ), bits ); - } - else - { - rc_enc_write( hBstr, ( hPVQ->rc_cache + hPVQ->rc_carry ) >> ( 8 - bits ), bits ); - } - - bits = hPVQ->rc_num_bits; - while ( bits < hPVQ->rc_tot_bits - 16 ) - { - rc_enc_write( hBstr, 0, 16 ); - bits += 16; - } - - bits = hPVQ->rc_tot_bits - bits; - if ( bits > 0 ) - { - rc_enc_write( hBstr, 0, bits ); - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_enc_shift() - * - * Shift a byte out to bitstream - *-------------------------------------------------------------------*/ - -static void rc_enc_shift( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ -) -{ - - if ( hPVQ->rc_low < ( 0xffUL << 24 ) || hPVQ->rc_carry ) - { - if ( hPVQ->rc_cache >= 0 ) - { - rc_enc_write( hBstr, hPVQ->rc_cache + hPVQ->rc_carry, 8 ); - } - - while ( hPVQ->rc_carry_count > 0 ) - { - rc_enc_write( hBstr, ( hPVQ->rc_carry + 0xff ) & 255, 8 ); - hPVQ->rc_carry_count--; - } - - hPVQ->rc_cache = hPVQ->rc_low >> 24; - hPVQ->rc_carry = 0; - } - else - { - hPVQ->rc_carry_count++; - } - - hPVQ->rc_low = hPVQ->rc_low << 8; - - return; -} - -/*-------------------------------------------------------------------* - * rc_enc_bits() - * - * - *-------------------------------------------------------------------*/ - -void rc_enc_bits( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle*/ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - const uint32_t value, /* i : Value to encode */ - const int16_t bits /* i : Number of bits used */ -) -{ - - if ( rc_get_bits2( hPVQ->rc_num_bits, hPVQ->rc_range ) + bits <= hPVQ->rc_tot_bits ) - { - hPVQ->rc_num_bits += bits; - if ( bits > 16 ) - { - push_indice( hBstr, IND_RC_END - hPVQ->rc_offset, (int16_t) ( value >> 16 ), bits - 16 ); - hPVQ->rc_offset++; - - push_indice( hBstr, IND_RC_END - hPVQ->rc_offset, (int16_t) ( value & ( ( 1 << 16 ) - 1 ) ), 16 ); - hPVQ->rc_offset++; - } - else - { - push_indice( hBstr, IND_RC_END - hPVQ->rc_offset++, (int16_t) value, bits ); - } - } - else - { - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_enc_uniform() - * - * Encode with uniform distribution - *-------------------------------------------------------------------*/ - -void rc_enc_uniform( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ - uint32_t value, /* i : Value to encode */ - uint32_t tot /* i : Maximum value */ -) -{ - int16_t n; - - n = 32 - norm_ul_float( tot - 1 ); /* aligned to BASOP */ - - if ( n <= 8 ) - { - rc_encode( hBstr, hPVQ, value, 1, tot ); - } - else - { - n -= 8; - rc_encode( hBstr, hPVQ, value >> n, 1, ( tot >> n ) + 1 ); - rc_enc_bits( hBstr, hPVQ, value & ( ( 1 << n ) - 1 ), n ); - } - - return; -} - -/*-------------------------------------------------------------------* - * rc_enc_write() - * - * Write a byte to bitstream - *-------------------------------------------------------------------*/ - -static void rc_enc_write( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t byte, /* i : Byte to write */ - const int16_t bits /* i : Number of bits */ -) -{ - push_indice( hBstr, IND_RC_START, byte, bits ); - - return; -} -#endif diff --git a/lib_enc/range_enc_fx.c b/lib_enc/range_enc_fx.c index 5c691c3a2..da325b2bd 100644 --- a/lib_enc/range_enc_fx.c +++ b/lib_enc/range_enc_fx.c @@ -16,10 +16,8 @@ static void rc_enc_shift_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ ); static void rc_enc_write_fx( BSTR_ENC_HANDLE hBstr, Word16 byte, Word16 bits ); -#ifdef IVAS_FLOAT_FIXED static void rc_enc_shift_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ ); static void rc_enc_write_ivas_fx( BSTR_ENC_HANDLE hBstr, Word16 byte, Word16 bits ); -#endif /*-------------------------------------------------------------------* * rc_enc_init() * @@ -55,7 +53,6 @@ void rc_enc_init_fx( * * Encode symbol with range coder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void rc_encode_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -94,7 +91,6 @@ void rc_encode_ivas_fx( return; } -#endif void rc_encode_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -137,7 +133,6 @@ void rc_encode_fx( * * Finalize range coder *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void rc_enc_finish_ivas_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ @@ -222,7 +217,6 @@ void rc_enc_finish_ivas_fx( return; } -#endif void rc_enc_finish_fx( BSTR_ENC_HANDLE hBstr, PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ @@ -312,7 +306,6 @@ void rc_enc_finish_fx( * * Shift a byte out to bitstream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void rc_enc_shift_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ @@ -347,7 +340,6 @@ static void rc_enc_shift_ivas_fx( move32(); return; } -#endif static void rc_enc_shift_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ /* i/o: PVQ encoder handle */ @@ -386,7 +378,6 @@ static void rc_enc_shift_fx( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void rc_enc_bits_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -420,7 +411,6 @@ void rc_enc_bits_ivas_fx( return; } -#endif void rc_enc_bits_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -457,7 +447,6 @@ void rc_enc_bits_fx( * * Encode with uniform distribution *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void rc_enc_uniform_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -482,7 +471,6 @@ void rc_enc_uniform_ivas_fx( return; } -#endif void rc_enc_uniform_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ PVQ_ENC_HANDLE hPVQ, /* i/o: PVQ encoder handle */ @@ -513,7 +501,6 @@ void rc_enc_uniform_fx( * * Write a byte to bitstream *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void rc_enc_write_ivas_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 byte, /* i : Byte to write */ @@ -524,7 +511,6 @@ static void rc_enc_write_ivas_fx( return; } -#endif static void rc_enc_write_fx( BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ Word16 byte, /* i : Byte to write */ diff --git a/lib_enc/re8_cod.c b/lib_enc/re8_cod.c index a592dae49..e748899a9 100644 --- a/lib_enc/re8_cod.c +++ b/lib_enc/re8_cod.c @@ -38,50 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------ - * re8_cod() - * - * MULTI-RATE INDEXING OF A POINT y in THE LATTICE RE8 (INDEX COMPUTATION) - *--------------------------------------------------------------------------*/ - -void re8_cod( - int16_t x[], /* i : point in RE8 (8-dimensional integer vector) */ - int16_t *n, /* i : codebook number (*n is an integer defined in {0,2,3,4,..,n_max}) */ - uint16_t *I, /* o : index of c (pointer to unsigned 16-bit word) */ - int16_t k[] /* o : index of v (8-dimensional vector of binary indices) = Voronoi index */ -) -{ - int16_t ka, c[8]; - - /*---------------------------------------------------------------------- - * decompose x as x = 2^r c + v, where r is an integer >=0, c is an element - * of Q0, Q2, Q3 or Q4, and v is an element of a Voronoi code in RE8 - * (if r=0, x=c) - * this decomposition produces as a side-product the index k[] of v - * and the identifier ka of the absolute leader related to c - * - * the index of y is split into 2 parts : - * - the index I of c - * - the index k[] of v - ----------------------------------------------------------------------*/ - - re8_vor( x, n, k, c, &ka ); - - /* safeguard in case that the AVQ subquantizer is not found - might happen for extremely strong onsets at the end of the frame */ - if ( ka >= NB_LEADER ) - { - *n = 0; - set_s( x, 0, 8 ); - } - - /* compute the index I (only if c is in Q2, Q3 or Q4) */ - if ( *n > 0 ) - { - re8_compute_base_index( c, ka, I ); - } - - return; -} -#endif diff --git a/lib_enc/reordernorm.c b/lib_enc/reordernorm.c index 58dc76eb9..4922b9e4c 100644 --- a/lib_enc/reordernorm.c +++ b/lib_enc/reordernorm.c @@ -40,47 +40,3 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------*/ -/* Function reordernorm */ -/* ~~~~~~~~~~~~~~~~~~~~~ */ -/* */ -/* Reorder quantization indices and norms */ -/*--------------------------------------------------------------------------*/ - -void reordernorm( - const int16_t *ynrm, /* i : quantization indices for norms */ - const int16_t *normqlg2, /* i : quantized norms */ - int16_t *idxbuf, /* o : reordered quantization indices */ - int16_t *normbuf, /* o : reordered quantized norms */ - const int16_t nb_sfm /* i : number of bands */ -) -{ - int16_t i; - const int16_t *order = NULL; - - switch ( nb_sfm ) - { - case NB_SFM: - order = norm_order_48; - break; - case SFM_N_SWB: - order = norm_order_32; - break; - case SFM_N_WB: - order = norm_order_16; - break; - default: - order = norm_order_48; - break; - } - - for ( i = 0; i < nb_sfm; i++ ) - { - idxbuf[i] = ynrm[order[i]]; - normbuf[i] = normqlg2[order[i]]; - } - - return; -} -#endif diff --git a/lib_enc/rom_enc.c b/lib_enc/rom_enc.c index ee166e0d9..e83506b91 100644 --- a/lib_enc/rom_enc.c +++ b/lib_enc/rom_enc.c @@ -51,19 +51,6 @@ const int16_t bwd_start_bin[BWD_N_BINS_MAX] = {1, 3, 6, 11}; const int16_t bwd_end_bin[BWD_N_BINS_MAX] = {1, 4, 9, 12}; const int16_t BAND_NUM_TAB[5] = {10,10,20,40,60}; /* {OFFSET, NB, WB, SWB, FB} */ -#ifndef IVAS_FLOAT_FIXED -const float M_inr[16] = -{ - 1.00000000f, 0.98078525f, 0.92387950f, 0.83146960f, 0.70710677f, 0.55557019f, 0.38268343f, 0.19509035f, - 0.00000008f, -0.19509020f, -0.38268328f, -0.55557019f, -0.70710677f, -0.83146966f, -0.92387962f, -0.98078531f -}; - -const float M_ini[16] = -{ - 0.00000000f, 0.19509032f, 0.38268346f, 0.55557024f, 0.70710677f, 0.83146966f, 0.92387950f, 0.98078525f, - 1.00000000f, 0.98078531f, 0.92387956f, 0.83146966f, 0.70710677f, 0.55557019f, 0.38268328f, 0.19509009f -}; -#endif typedef struct { Word16 r; @@ -77,35 +64,11 @@ const complex_16 M_in_fix16[16] = {0, 32767}, {-6393, 32138}, {-12540, 30274}, {-18205, 27246}, {-23170, 23170},{ -27246, 18205}, {-30274, 12540}, {-32138, 6393}, }; -#ifndef IVAS_FLOAT_FIXED -const float M_r[8] = -{ - 1.00000000f, 0.92387950f, 0.70710677f, 0.38268343f, -0.00000004f, -0.38268352f, -0.70710677f, -0.92387950f -}; - -const float M_i[8] = -{ - 0.00000000f, 0.38268346f, 0.70710677f, 0.92387950f, 1.00000000f, 0.92387950f, 0.70710677f, 0.38268349f -}; - -const float M_Wr[16]= -{ - 9.9518473e-001f, 9.5694034e-001f, 8.8192126e-001f, 7.7301045e-001f, 6.3439328e-001f, 4.7139674e-001f, 2.9028468e-001f, 9.8017140e-002f, - -9.8017140e-002f, -2.9028468e-001f, -4.7139674e-001f, -6.3439328e-001f, -7.7301045e-001f, -8.8192126e-001f, -9.5694034e-001f, -9.9518473e-001f -}; -#endif const Word16 M_Wr_fix16[16] = { 32609/* 9.9518473e-001f Q15 */,31356/* 9.5694034e-001f Q15 */,28898/* 8.8192126e-001f Q15 */,25329/* 7.7301045e-001f Q15 */,20787/* 6.3439328e-001f Q15 */,15446/* 4.7139674e-001f Q15 */, 9512/* 2.9028468e-001f Q15 */, 3212/* 9.8017140e-002f Q15 */, -3212/* -9.8017140e-002f Q15 */,-9512/* -2.9028468e-001f Q15 */,-15446/* -4.7139674e-001f Q15 */,-20787/* -6.3439328e-001f Q15 */,-25329/* -7.7301045e-001f Q15 */,-28898/* -8.8192126e-001f Q15 */,-31356/* -9.5694034e-001f Q15 */,-32609/* -9.9518473e-001f Q15 */ }; -#ifndef IVAS_FLOAT_FIXED -const float M_Wi[16] = -{ - 9.8017140e-002f, 2.9028468e-001f, 4.7139674e-001f, 6.3439328e-001f, 7.7301045e-001f, 8.8192126e-001f, 9.5694034e-001f, 9.9518473e-001f, - 9.9518473e-001f, 9.5694034e-001f, 8.8192126e-001f, 7.7301045e-001f, 6.3439328e-001f, 4.7139674e-001f, 2.9028468e-001f, 9.8017140e-002f -}; -#endif const Word16 M_Wi_fix16[16] = { 3212/* 9.8017140e-002f Q15 */, 9512/* 2.9028468e-001f Q15 */,15446/* 4.7139674e-001f Q15 */,20787/* 6.3439328e-001f Q15 */,25329/* 7.7301045e-001f Q15 */,28898/* 8.8192126e-001f Q15 */,31356/* 9.5694034e-001f Q15 */,32609/* 9.9518473e-001f Q15 */, @@ -115,10 +78,6 @@ const Word16 M_Wi_fix16[16] = const int16_t SP_CENTER_BAND_NUM_TAB[5] = {10, 10, 20, 24, 24}; /* 107374184.f = 32768.f * 32768.f * 0.1 */ -#ifndef IVAS_FLOAT_FIXED -const float VAD_DELTA1[5] = {107374184.f, 0.0f, 107374184.f, 107374184.f, 0.0f}; -const float VAD_DELTA2[5] = {107374184.f, 1.f, 107374184.f, 107374184.f, 107374184.f}; -#endif const int16_t NREGION_INDEX_NB[9] = {0,1,2,3,4,5,6,7, 9}; const int16_t NREGION_INDEX_WB[13] = {0,1,2,3,4,5,6,8,10,12,16}; const int16_t NREGION_INDEX_SWB[16] = {0,1,2,3,4,5,6,8,10,12,16,24,36}; @@ -126,42 +85,9 @@ const int16_t NREGION_INDEX_FB[16] = {0,1,2,3,4,5,6,8,10,12,16,24,36}; const Word16 NREGION_PREOFF[12] = { 0,0,0,0,0,0,1,1,1,2,3,4 }; const int16_t ENERGY_BAND_NUM[4] = {8,10,12,MAX_SUBBAND_NUM}; const int16_t * const REGION_INDEX[4] = {NREGION_INDEX_NB, NREGION_INDEX_WB,NREGION_INDEX_SWB,NREGION_INDEX_FB}; -#ifndef IVAS_FLOAT_FIXED -const float MAX_LF_SNR_TAB[4] = {0.8f, 0.8f, 1.6f, 0.8f}; -#endif const Word32 MAX_LF_SNR_TAB_FX[5] = { 26843545/* 0.8 Q25 */,26843545/* 0.8 Q25 */,53687090/* 1.6 Q25 */,26843545/* 0.8 Q25 */,26843545/* 0.8 Q25 */ }; -#ifndef IVAS_FLOAT_FIXED -const float COMVAD_INIT_SNR_DELTA[5] = {1.0f, 0.6f, 0.86f, 1.16f, 1.0f}; -#endif const Word32 COMVAD_INIT_SNR_DELTA_FX[5] = { 33554431/* 1.0 Q25 */, 20132659/* 0.6 Q25 */, 28856811/* 0.86 Q25 */, 38923139/* 1.16 Q25 */, 33554431/* 1.0 Q25 */ }; -#ifndef IVAS_FLOAT_FIXED -const float LS_MIN_SELENCE_SNR[3] = {7.5f, 7.5f, 6.8f}; -const float LT_MIN_SILENCE_SNR[3] = {4.5f, 4.5f, 4.5f}; -#endif const Word32 LT_MIN_SILENCE_SNR_FX[4] = { 150994940/* 4.5 Q25 */, 150994940/* 4.5 Q25 */, 150994940/* 4.5 Q25 */,150994940/* 4.5 Q25 */ }; -#ifndef IVAS_FLOAT_FIXED -/* half of the square root hanning window for spectral analysis */ -const float sqrt_han_window[L_FFT/2+1]= -{ - 0.000000f, 0.012272f, 0.024541f, 0.036807f, 0.049068f, 0.061321f, 0.073565f, 0.085797f, - 0.098017f, 0.110222f, 0.122411f, 0.134581f, 0.146730f, 0.158858f, 0.170962f, 0.183040f, - 0.195090f, 0.207111f, 0.219101f, 0.231058f, 0.242980f, 0.254866f, 0.266713f, 0.278520f, - 0.290285f, 0.302006f, 0.313682f, 0.325310f, 0.336890f, 0.348419f, 0.359895f, 0.371317f, - 0.382683f, 0.393992f, 0.405241f, 0.416430f, 0.427555f, 0.438616f, 0.449611f, 0.460539f, - 0.471397f, 0.482184f, 0.492898f, 0.503538f, 0.514103f, 0.524590f, 0.534998f, 0.545325f, - 0.555570f, 0.565732f, 0.575808f, 0.585798f, 0.595699f, 0.605511f, 0.615232f, 0.624860f, - 0.634393f, 0.643832f, 0.653173f, 0.662416f, 0.671559f, 0.680601f, 0.689541f, 0.698376f, - 0.707107f, 0.715731f, 0.724247f, 0.732654f, 0.740951f, 0.749136f, 0.757209f, 0.765167f, - 0.773010f, 0.780737f, 0.788346f, 0.795837f, 0.803208f, 0.810457f, 0.817585f, 0.824589f, - 0.831470f, 0.838225f, 0.844854f, 0.851355f, 0.857729f, 0.863973f, 0.870087f, 0.876070f, - 0.881921f, 0.887640f, 0.893224f, 0.898674f, 0.903989f, 0.909168f, 0.914210f, 0.919114f, - 0.923880f, 0.928506f, 0.932993f, 0.937339f, 0.941544f, 0.945607f, 0.949528f, 0.953306f, - 0.956940f, 0.960431f, 0.963776f, 0.966976f, 0.970031f, 0.972940f, 0.975702f, 0.978317f, - 0.980785f, 0.983105f, 0.985278f, 0.987301f, 0.989177f, 0.990903f, 0.992480f, 0.993907f, - 0.995185f, 0.996313f, 0.997290f, 0.998118f, 0.998795f, 0.999322f, 0.999699f, 0.999925f, - 1.000000f -}; -#endif const Word16 sqrt_han_window_fx[L_FFT / 2 + 1] = { 0, 402, 804, 1206, 1608, 2009, 2410, 2811, 3212, @@ -197,34 +123,6 @@ const int16_t tipos[40] = 0, 1, 2, 3, 1, 2, 3, 0 /* end point for 28 pulses &ipos[39], 4th iter */ }; -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------------------------------* - * 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) - * for fractional pitch search - *----------------------------------------------------------------------------------*/ - -/* 1/4 resolution interpolation filter (-3 dB at 0.791*fs/2) */ -const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1] = -{ - 0.900000F, - 0.818959F, 0.604850F, 0.331379F, 0.083958F, - -0.075795F, -0.130717F, -0.105685F, -0.046774F, - 0.004467F, 0.027789F, 0.025642F, 0.012571F, - 0.001927F, -0.001571F, -0.000753F, 0.000000f -}; - -/* 1/6 resolution interpolation filter (-3 dB at 0.9*fs/2) */ -const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1] = -{ - 0.900848F, - 0.864136F, 0.760071F, 0.605408F, 0.424072F, - 0.242462F, 0.0840759F, -0.0343933F, -0.105560F, - -0.131348F, -0.121124F, -0.0884705F, -0.0476379F, - -0.0102539F, 0.0162964F, 0.0296021F, 0.0312195F, - 0.0251160F, 0.0157471F, 0.00671387F, 0.000000F, - -0.00399780F, -0.00592041F, -0.00656128F, 0.000000F -}; -#endif /*----------------------------------------------------------------------------------* * Open-loop pitch tables *----------------------------------------------------------------------------------*/ @@ -239,22 +137,10 @@ const int16_t sublen_12k8[7] = { 40, 40, 40, 62, 62, 115, 115 }; const int16_t sublen1_12k8[7] = { 40, 40, 50, 50, 80, 80, 115 }; const int16_t sec_length_12k8[4] = { 7, 15, 30, 54 }; const int16_t sec_length1_12k8[4] = { 10, 19, 37, 38 }; -#ifndef IVAS_FLOAT_FIXED -const float h_fir[5] = {0.13f, 0.23f, 0.28f, 0.23f, 0.13f}; -#endif const Word16 h_fir_fx[] = { 4260, 7536, 9175, 7536, 4260 }; -#ifndef IVAS_FLOAT_FIXED -const float W_HIST[DTX_HIST_SIZE] = -{ - 0.2f, 0.16f, 0.128f, 0.1024f, 0.08192f, 0.065536f, 0.0524288f, 0.01048576f -}; -#endif const Word16 W_HIST_FX[DTX_HIST_SIZE] = { 13107, 10486, 8389, 6711, 5369, 4295, 3436, 687 }; /* Q16 */ const Word16 W_HIST_S_FX[DTX_HIST_SIZE] = { 20480, 11378, 8393, 6938, 6092, 5551, 5183, 5115 }; /* Q12 */ -#ifndef IVAS_FLOAT_FIXED -const float preemphCompensation[NB_BANDS] = { 9.7461f, 9.5182f, 9.0262f, 8.3493f, 7.5764f, 6.7838f, 5.8377f, 4.8502f, 4.0346f, 3.2788f, 2.6283f, 2.0920f, 1.6304f, 1.2850f, 1.0108f, 0.7916f, 0.6268f, 0.5011f, 0.4119f, 0.3637f }; -#endif const Word16 preemphCompensation_fx[NB_BANDS] = { 19960/*9.7461f Q11*/, 19493/*9.5182f Q11*/, 18486/*9.0262f Q11*/, 17099/*8.3493f Q11*/, 15516/*7.5764f Q11*/, 13893/*6.7838f Q11*/, 11956/*5.8377f Q11*/, 9933/*4.8502f Q11*/, 8263/*4.0346f Q11*/, 6715/*3.2788f Q11*/, 5383/*2.6283f Q11*/, 4284/*2.0920f Q11*/, 3339/*1.6304f Q11*/, 2632/*1.2850f Q11*/, 2070/*1.0108f Q11*/, 1621/*0.7916f Q11*/, 1284/*0.6268f Q11*/, 1026/*0.5011f Q11*/, 844/*0.4119f Q11*/, 745/*0.3637f Q11*/ }; /*----------------------------------------------------------------------------------* @@ -287,40 +173,6 @@ const int16_t lsf_unified_fit_model_wbhb[4][16] = {-615 , -308 , -147 , -119 , -104 , -105 , -30 , -28 , -50 , -39 , -15 , -14 , -14 , -21 , -19 , -29}, {1534 , 3569 , 3138 , 4023 , 2105 , 2023 , 2046 , 1264 , 1340 , 1067 , 780 , 547 , 188 , -540 , -722 , -479} }; -#ifndef IVAS_FLOAT_FIXED -/* LPC weights used in SWB TBE */ -const float lpc_weights[LPC_SHB_ORDER+1] = -{ - 1.0f, 0.975000000f, 0.950625000f, 0.926859375f, 0.903687891f, - 0.881095693f, 0.859068301f, 0.837591593f, 0.816651804f, - 0.796235509f, 0.776329621f -}; - -/* LSF weighting */ -const float Freq_Weight_Com[160] = -{ - 0.50000000f, 0.62940955f, 0.75000000f, 0.85355341f, 0.93301272f, 0.98296291f, 1.00000000f, 1.00000000f, - 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, - 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 1.00000000f, 0.97272730f, 0.94690263f, 0.92241377f, - 0.89915967f, 0.87704921f, 0.85600001f, 0.83593750f, 0.81679392f, 0.79850745f, 0.78102189f, 0.76428574f, - 0.74825174f, 0.73287672f, 0.71812081f, 0.70394737f, 0.69032258f, 0.67721522f, 0.66459626f, 0.65243900f, - 0.64071858f, 0.62941176f, 0.61849713f, 0.60795456f, 0.59776539f, 0.58791208f, 0.57837838f, 0.56914896f, - 0.56020945f, 0.55154639f, 0.54314721f, 0.53500003f, 0.52709359f, 0.51941746f, 0.51196170f, 0.50471699f, - 0.49767441f, 0.49082568f, 0.48416290f, 0.47767857f, 0.47136563f, 0.46521738f, 0.45922747f, 0.45338982f, - 0.44769874f, 0.44214877f, 0.43673471f, 0.43145162f, 0.42629483f, 0.42125985f, 0.41634241f, 0.41153845f, - 0.40684411f, 0.40225562f, 0.39776951f, 0.39338234f, 0.38909090f, 0.38489208f, 0.38078293f, 0.37676057f, - 0.37282231f, 0.36896551f, 0.36518770f, 0.36148649f, 0.35785952f, 0.35430464f, 0.35081968f, 0.34740260f, - 0.34405145f, 0.34076434f, 0.33753943f, 0.33437499f, 0.33126935f, 0.32822084f, 0.32522798f, 0.32228917f, - 0.31940299f, 0.31656805f, 0.31378299f, 0.31104651f, 0.30835736f, 0.30571428f, 0.30311614f, 0.30056179f, - 0.29805014f, 0.29558012f, 0.29315069f, 0.29076087f, 0.28840971f, 0.28609625f, 0.28381962f, 0.28157896f, - 0.27937338f, 0.27720207f, 0.27506426f, 0.27295917f, 0.27088606f, 0.26884422f, 0.26683292f, 0.26485148f, - 0.26289925f, 0.26097560f, 0.25907990f, 0.25721154f, 0.25536993f, 0.25355449f, 0.25176471f, 0.25000000f, - 0.24825986f, 0.24654378f, 0.24485126f, 0.24318182f, 0.24153499f, 0.23991032f, 0.23830736f, 0.23672566f, - 0.23516484f, 0.23362446f, 0.23210412f, 0.23060344f, 0.22912206f, 0.22765957f, 0.22621565f, 0.22478992f, - 0.22338204f, 0.22199170f, 0.22061856f, 0.21926230f, 0.21792261f, 0.21659920f, 0.21529175f, 0.21400000f, - 0.21272366f, 0.21146245f, 0.21021610f, 0.20898438f, 0.20776699f, 0.20656371f, 0.20537429f, 0.20419848f -}; -#endif const Word32 Freq_Weight_Com_fx[160] = /*Q31 */ { 1073741824, 1351646720, 1610612736, 1832992000, 2003629568, 2110896768, 2147483647, 2147483647, @@ -344,31 +196,6 @@ const Word32 Freq_Weight_Com_fx[160] = /*Q31 */ 479709280, 476723552, 473774752, 470862208, 467985248, 465143232, 462335520, 459561504, 456820576, 454112160, 451435648, 448790528, 446176224, 443592192, 441037920, 438512896 }; -#ifndef IVAS_FLOAT_FIXED -const float Freq_Weight_UV[160] = -{ - 0.50000000f, 0.62940955f, 0.75000000f, 0.85355341f, 0.93301272f, 0.98296291f, 1.00000000f, 0.99180329f, - 0.98373985f, 0.97580647f, 0.96799999f, 0.96031743f, 0.95275593f, 0.94531250f, 0.93798447f, 0.93076921f, - 0.92366409f, 0.91666669f, 0.90977442f, 0.90298510f, 0.89629632f, 0.88970590f, 0.88321167f, 0.87681162f, - 0.87050360f, 0.86428571f, 0.85815603f, 0.85211265f, 0.84615386f, 0.84027779f, 0.83448273f, 0.82876712f, - 0.82312924f, 0.81756759f, 0.81208056f, 0.80666667f, 0.80132449f, 0.79605263f, 0.79084969f, 0.78571427f, - 0.78064513f, 0.77564102f, 0.77070063f, 0.76582277f, 0.76100630f, 0.75625002f, 0.75155282f, 0.74691355f, - 0.74233127f, 0.73780489f, 0.73333335f, 0.72891569f, 0.72455090f, 0.72023809f, 0.71597636f, 0.71176469f, - 0.70760232f, 0.70348835f, 0.69942194f, 0.69540232f, 0.69142854f, 0.68750000f, 0.68361580f, 0.67977530f, - 0.67597765f, 0.67222220f, 0.66850829f, 0.66483516f, 0.66120219f, 0.65760869f, 0.65405405f, 0.65053761f, - 0.64705884f, 0.64361703f, 0.64021164f, 0.63684213f, 0.63350785f, 0.63020831f, 0.62694299f, 0.62371135f, - 0.62051284f, 0.61734694f, 0.61421317f, 0.61111110f, 0.60804021f, 0.60500002f, 0.60199004f, 0.59900987f, - 0.59605908f, 0.59313726f, 0.59024388f, 0.58737862f, 0.58454108f, 0.58173078f, 0.57894737f, 0.57619047f, - 0.57345974f, 0.57075471f, 0.56807512f, 0.56542057f, 0.56279069f, 0.56018519f, 0.55760366f, 0.55504584f, - 0.55251139f, 0.55000001f, 0.54751134f, 0.54504502f, 0.54260087f, 0.54017860f, 0.53777778f, 0.53539824f, - 0.53303963f, 0.53070176f, 0.52838427f, 0.52608699f, 0.52380955f, 0.52155173f, 0.51931328f, 0.51709402f, - 0.51489359f, 0.51271188f, 0.51054853f, 0.50840336f, 0.50627613f, 0.50416666f, 0.50207472f, 0.50000000f, - 0.49794239f, 0.49590164f, 0.49387756f, 0.49186993f, 0.48987854f, 0.48790324f, 0.48594376f, 0.48400000f, - 0.48207173f, 0.48015872f, 0.47826087f, 0.47637796f, 0.47450981f, 0.47265625f, 0.47081712f, 0.46899223f, - 0.46718147f, 0.46538460f, 0.46360153f, 0.46183205f, 0.46007603f, 0.45833334f, 0.45660377f, 0.45488721f, - 0.45318353f, 0.45149255f, 0.44981414f, 0.44814816f, 0.44649446f, 0.44485295f, 0.44322345f, 0.44160584f -}; -#endif const Word32 Freq_Weight_UV_fx[160] = /*Q31 */ { 1073741824, 1351646720, 1610612736, 1832992000, 2003629568, 2110896768, 2147483647, 2129881344, @@ -396,19 +223,6 @@ const Word32 Freq_Weight_UV_fx[160] = /*Q31 */ /*----------------------------------------------------------------------------------* * Speech/music classification *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float w_spmus[HANG_LEN][HANG_LEN] = -{ - {1.0f, 0, 0, 0, 0, 0, 0, 0}, - {0.6f, 0.4f, 0, 0, 0, 0, 0, 0}, - {0.47f, 0.33f, 0.2f, 0, 0, 0, 0, 0}, - {0.4f, 0.3f, 0.2f, 0.1f, 0, 0, 0, 0}, - {0.30f, 0.25f, 0.2f, 0.15f, 0.1f, 0, 0, 0}, - {0.233f, 0.207f, 0.18f, 0.153f, 0.127f, 0.1f, 0, 0}, - {0.235f, 0.205f, 0.174f, 0.143f, 0.112f, 0.081f, 0.05f, 0}, - {0.200f, 0.179f, 0.157f, 0.136f, 0.114f, 0.093f, 0.071f, 0.05f} -}; -#endif const Word16 w_spmus_fx[HANG_LEN][HANG_LEN] = { /*Q15*/ @@ -421,43 +235,16 @@ const Word16 w_spmus_fx[HANG_LEN][HANG_LEN] = { 7700, 6717, 5702, 4686, 3670, 2654, 1638, 0,}, { 6554, 5865, 5145, 4456, 3736, 3047, 2327, 1638} }; -#ifndef IVAS_FLOAT_FIXED -const float sm_means[N_SMC_FEATURES] = -{ - 109.073304f, 0.727576f, 0.246557f, 0.291464f, 0.836498f, 1.021915f, 1.213649f, 64.230265f, 1.236224f, -2.347783f, 1.795570f, -0.039230f, -0.292081f, 0.611993f, 5.587905f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 sm_means_fx[N_SMC_FEATURES] = { 114371648, 762918, 258533, 305622, 877131, 1071555, 1272603, 67350312, 1296274, -2461829, 1882791, -41135, -306269, 641721, 5859343, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float sm_scale[N_SMC_FEATURES] = -{ - 44.621579f, 0.159182f, 0.063806f, 0.067614f, 0.112130f, 0.103447f, 0.091769f, 16.522003f, 0.115806f, 1.284023f, 3.337835f, 1.726416f, 1.422670f, 0.270914f, 0.422958f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 sm_scale_fx[N_SMC_FEATURES] = {//Q20 46789116, 166914, 66905, 70898, 117576, 108472, 96226, 17324576, 121431, 1346395, 3499973, 1810278, 1491777, 284073, 443503, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float hout_intervals[N_SMC_FEATURES * 2] = -{ - 18.000000f, 230.000000f, 0.000000f, 0.999769f, 0.119389f, 0.990880f, 0.255791f, 1.181627f, - 0.406328f, 1.384250f, 0.580520f, 1.543470f, 0.780707f, 1.881730f, 0.000000f, 121.586754f, - 0.000000f, 262.696747f, -8.535435f, -0.000056f, -14.433754f, 17.815642f, -10.632537f, 12.045707f, - -11.751500f, 10.883281f, 0.000793f, 1.994476f, - 3.021017f, 10.545962f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 hout_intervals_fx[N_SMC_FEATURES * 2] = {//Q20 18874368, 241172480, 0, 1048333, 125188, 1039013, 268216, 1239025, @@ -465,67 +252,21 @@ const Word32 hout_intervals_fx[N_SMC_FEATURES * 2] = 0, 275457504, -8950052, -58, -15134888, 18681054, -11149023, 12630839, -12322341, 11411947, 831, 2091359, 3167766, 11058243, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float bcox_add_cnst[N_SMC_FEATURES] = -{ - 0.000000f, 0.000000f, -0.878682f, -0.726044f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - -0.778993f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 bcox_add_cnst_fx[N_SMC_FEATURES] = { 0, 0, -1886955264, -1559167616, 0, 0, 0, 0, -1672874752, 0, 0, 0, 0, 0, 0, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float bcox_lmbd[N_SMC_FEATURES] = -{ - 0.000000f, 0.000000f, -0.664282f, -0.422504f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - -0.634475f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 bcox_lmbd_fx[N_SMC_FEATURES] = { 0, 0, -1426534784, -907320448, 0, 0, 0, 0, -1362524672, 0, 0, 0, 0, 0, 0, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float pca_mean_[N_SMC_FEATURES] = -{ - 0.000000f, 0.000000f, 0.000000f, 0.000000f, -0.000000f, -0.000000f, 0.000000f, -0.000000f, - -0.000000f, 0.000000f, 0.000000f, -0.000000f, 0.000000f, 0.000000f, 0.000000f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 pca_mean_fx[N_SMC_FEATURES] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float pca_components_[N_SMC_FEATURES * N_PCA_COEF] = -{ - 0.025076f, -0.242897f, 0.309604f, 0.391805f, 0.384930f, 0.378366f, 0.352165f, -0.191363f, 0.158511f, 0.329501f, 0.145794f, 0.086507f, 0.009591f, 0.276506f, -0.007154f, - 0.257163f, -0.155283f, 0.246218f, 0.085165f, 0.045108f, 0.015357f, -0.016262f, 0.401832f, -0.474550f, 0.265252f, -0.139009f, 0.045243f, 0.193588f, -0.320563f, 0.469797f, - 0.018485f, 0.411620f, -0.274918f, 0.116888f, 0.292559f, 0.264870f, 0.143960f, 0.125920f, -0.165879f, -0.160480f, 0.562003f, -0.092482f, -0.230844f, -0.334957f, 0.074177f, - -0.543239f, 0.130739f, 0.154372f, -0.038147f, 0.035080f, 0.100375f, 0.228511f, 0.201526f, -0.046292f, 0.160674f, -0.362982f, -0.578790f, -0.234618f, -0.078058f, -0.050249f, - -0.182307f, 0.037429f, 0.061261f, 0.093339f, 0.059335f, -0.193803f, -0.080321f, 0.090248f, -0.034781f, 0.112808f, -0.142238f, 0.569180f, -0.728376f, 0.006001f, 0.092312f, - -0.580333f, 0.267716f, 0.100290f, 0.247248f, 0.169273f, -0.103110f, -0.306500f, 0.185496f, 0.038247f, 0.039038f, 0.108890f, 0.290420f, 0.500892f, 0.013977f, -0.049396f, - -0.065514f, 0.046068f, -0.237602f, -0.273503f, 0.133385f, 0.314017f, 0.457390f, -0.016266f, -0.086721f, -0.150066f, -0.424647f, 0.446826f, 0.227552f, -0.208976f, -0.176039f, - -0.478224f, -0.674547f, -0.269482f, -0.137992f, 0.016470f, 0.044476f, -0.031077f, -0.179975f, -0.121603f, -0.122852f, 0.236972f, -0.009416f, -0.014771f, -0.118357f, 0.297773f, - -0.077792f, 0.418931f, -0.084287f, -0.022155f, -0.151479f, 0.022706f, 0.094876f, -0.494710f, 0.113785f, 0.131465f, -0.127655f, 0.012390f, 0.078456f, 0.074088f, 0.689439f, - -0.082841f, 0.013846f, 0.493010f, 0.317749f, -0.257594f, -0.112637f, 0.188073f, -0.375933f, -0.292828f, -0.462353f, 0.024861f, 0.031511f, -0.010596f, -0.276552f, -0.124346f, - -0.025136f, -0.058113f, 0.137926f, 0.044374f, -0.239076f, 0.007627f, 0.343252f, 0.516920f, 0.447960f, -0.427809f, 0.100915f, 0.071696f, 0.016780f, 0.162128f, 0.327376f, - -0.016076f, -0.042889f, -0.441975f, 0.409942f, -0.243623f, -0.482644f, 0.460423f, 0.052715f, -0.067754f, 0.305681f, 0.058106f, -0.008628f, 0.098064f, -0.032513f, -0.123637f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 pca_components_fx[N_SMC_FEATURES * N_PCA_COEF] = { //Q31 @@ -553,19 +294,6 @@ const Word32 pca_components_fx[N_SMC_FEATURES * N_PCA_COEF] = 880343744, -523176416, -1036470080, 988750848, 113204600, -145500608, 656444928, 124781688, -18528488, 210590832, -69821136, -265508432, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float means_speech[N_SMC_MIXTURES*N_PCA_COEF] = -{ - 4.144528f, -0.445994f, -0.070302f, 0.359876f, -0.040196f, -0.118265f, 0.644765f, -0.174143f, -0.114585f, 0.658716f, 0.278107f, -0.260928f, - -0.030065f, -1.206812f, 0.639289f, -0.610196f, -0.053418f, 0.478088f, -0.616374f, -0.216908f, 0.606710f, 0.113900f, -0.003494f, 0.216351f, - -1.910358f, -1.553362f, 0.643357f, 0.417784f, 0.274502f, 0.145654f, 0.013066f, -0.241637f, 0.220763f, 0.108261f, -0.062127f, 0.030421f, - 1.887472f, -0.864524f, -0.953246f, -0.252614f, 0.064793f, -0.105010f, -0.229351f, 0.277444f, 0.033348f, -0.089741f, -0.033241f, 0.019242f, - -0.413334f, -1.784803f, -0.187205f, -0.391714f, -0.243155f, -0.223117f, -0.018042f, 0.129642f, 0.137285f, -0.049526f, 0.029685f, -0.024247f, - -0.694581f, -1.756488f, 0.597206f, 1.030080f, 0.297682f, 0.383268f, 0.135800f, -0.177134f, 0.096645f, -0.268388f, -0.151836f, -0.101950f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 means_speech_fx[N_SMC_MIXTURES*N_PCA_COEF] = { //Q20 @@ -580,13 +308,6 @@ const Word32 means_speech_fx[N_SMC_MIXTURES*N_PCA_COEF] = -51932, 31127, -25425, -728321, -1841811, 626216, 1080117, 312142, 401886, 142397, -185738, 101340, -281425, -159212, -106902, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float log_det_chol_speech[N_SMC_MIXTURES] = -{ - 6.500575f, 5.852711f, 5.579274f, 6.652653f, 4.752021f, 5.338445f, -}; -#endif const Word32 log_det_chol_speech_fx[N_SMC_MIXTURES] = {//Q19 3408173, @@ -596,18 +317,6 @@ const Word32 log_det_chol_speech_fx[N_SMC_MIXTURES] = 2491427, 2798882, }; -#ifndef IVAS_FLOAT_FIXED -const float prec_chol_speech[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = -{ - 0.865878f, -0.223069f, 1.134475f, -0.467260f, 0.369334f, 1.214700f, -0.211695f, 0.172669f, 0.139801f, 1.227951f, 0.116632f, -0.073137f, 0.119470f, 0.215339f, 1.501916f, 0.013243f, 0.241111f, -0.233638f, 0.209664f, -0.018477f, 1.781218f, -0.379717f, -0.055418f, 0.148630f, -0.151909f, -0.176478f, 0.700080f, 1.271311f, 0.079390f, -0.578062f, 0.405159f, -0.535997f, -0.075627f, -0.020922f, 0.275374f, 2.125945f, 0.814927f, -0.606386f, -0.240098f, -0.027454f, -0.137439f, -0.139499f, -0.299115f, 0.030554f, 2.224794f, -0.568133f, -0.955587f, -0.171094f, -0.289375f, -0.522709f, -0.635692f, -0.351548f, 0.418509f, 0.752386f, 2.817156f, -0.775162f, 0.841142f, 0.217873f, 0.245892f, -0.180432f, 0.026225f, -0.382074f, 0.147919f, -1.265659f, -0.335493f, 2.967484f, 0.754874f, 0.141008f, 0.037836f, 0.308811f, 0.275340f, -0.452874f, -0.553189f, -0.418168f, 0.103281f, 0.201651f, 0.314494f, 3.377585f, - 0.779866f, 0.119905f, 1.141061f, -0.433102f, -0.137556f, 0.835925f, -0.090233f, 0.132780f, 0.173085f, 1.162743f, -0.145567f, -0.028395f, 0.225752f, 0.256599f, 0.910930f, -0.217284f, -0.136945f, 0.088241f, 0.645317f, 0.087336f, 1.763780f, -0.058051f, -0.130243f, 0.140597f, 0.115878f, -0.276806f, 0.046556f, 1.584224f, 0.124624f, 0.035427f, -0.450071f, 0.235519f, 0.026577f, 0.378839f, 0.229695f, 2.869275f, -0.064182f, -1.030753f, 0.478893f, -0.037797f, -0.056435f, 0.399677f, -0.031347f, -1.444284f, 2.420667f, 0.188893f, -0.274488f, -0.214157f, 0.033407f, -0.011455f, 0.074756f, 0.504102f, 1.017356f, -0.133849f, 3.051604f, -0.073218f, -0.087385f, 0.077721f, 0.043399f, -0.015758f, 0.444000f, 0.562457f, -0.191897f, -0.302418f, 1.360105f, 2.524057f, -0.004116f, 0.250276f, -0.555062f, -0.066119f, -0.117207f, 0.137765f, -0.906956f, -0.113493f, 0.148421f, -0.263721f, -0.027223f, 2.956242f, - 0.733245f, -0.119951f, 0.865278f, -0.284074f, 0.078205f, 0.774011f, 0.074174f, 0.050798f, 0.120807f, 1.043815f, -0.093873f, -0.004341f, 0.160160f, -0.049218f, 0.884860f, -0.233987f, -0.371980f, 0.176357f, 0.862305f, -0.213931f, 1.822231f, 0.073135f, 0.011031f, -0.032639f, 0.353599f, -0.046119f, 0.299068f, 1.350803f, 0.531362f, 0.119452f, -1.304316f, 0.474532f, 0.177936f, 0.231008f, -0.132024f, 4.311452f, -1.292563f, -1.363504f, 2.222133f, 0.634631f, 0.206881f, 1.656581f, 0.313303f, -3.861843f, 4.023381f, 0.551323f, -0.021584f, -0.028669f, 0.207615f, 0.060790f, 0.510691f, 0.402249f, 0.641479f, -0.595568f, 2.659337f, 0.391733f, -0.194752f, -0.176729f, 0.099828f, 0.043602f, 0.576035f, 0.237896f, 0.662829f, -0.011826f, 1.098881f, 2.184154f, -0.206869f, 0.373664f, -0.688495f, -0.451344f, -0.083556f, -0.698290f, -0.246953f, 1.487042f, -0.541136f, -1.623548f, -0.847720f, 2.354680f, - 0.877970f, -0.031860f, 0.897153f, -0.139154f, -0.036593f, 1.259062f, -0.180257f, -0.027482f, 0.133144f, 1.316491f, 0.081446f, -0.121134f, 0.106265f, 0.117032f, 1.545899f, -0.077895f, 0.200631f, -0.067932f, 0.170562f, -0.237579f, 1.822282f, -0.134144f, -0.050759f, 0.041119f, -0.232042f, 0.084914f, 0.153996f, 1.891612f, 0.136661f, -0.437424f, 0.084375f, -0.242023f, -0.080411f, -0.220920f, 0.230393f, 2.053484f, 0.105555f, -0.361013f, -0.040929f, -0.011767f, -0.004277f, -0.004061f, -0.080962f, -0.367068f, 2.043357f, -0.046665f, -0.463621f, -0.148325f, 0.104752f, -0.308704f, -0.181149f, 0.155644f, 0.056089f, 0.427374f, 2.803357f, -0.269472f, 0.516361f, 0.001706f, 0.217995f, -0.127911f, 0.029542f, 0.254344f, 0.267460f, -0.813244f, 0.111844f, 2.549009f, 0.109195f, 0.092682f, -0.018745f, -0.013426f, -0.401214f, 0.127705f, -0.601705f, -0.111657f, 0.169593f, -0.107168f, 0.262454f, 3.714371f, - 0.674920f, -0.038705f, 1.051066f, -0.068032f, -0.035061f, 0.725132f, -0.129053f, 0.054747f, 0.122093f, 0.993569f, -0.045902f, -0.029557f, 0.159814f, 0.066913f, 1.215179f, -0.227482f, 0.010274f, -0.035148f, 0.424745f, -0.168736f, 1.576698f, 0.167059f, 0.026802f, -0.077380f, 0.064844f, -0.047268f, 0.101866f, 1.483204f, -0.078188f, 0.028231f, -0.136149f, 0.119205f, 0.005789f, 0.045958f, 0.087542f, 1.955771f, 0.142281f, -0.822192f, -0.014402f, -0.193328f, -0.030001f, 0.017168f, 0.009956f, 0.394809f, 2.300930f, 0.517255f, -0.517422f, -0.062056f, 0.053836f, -0.049730f, 0.156868f, 0.336429f, 0.171164f, 0.338078f, 2.660829f, -0.135033f, 0.812377f, 0.224385f, 0.495786f, 0.135518f, 0.547065f, 0.080456f, -0.299118f, -0.904148f, -0.094750f, 2.689407f, -0.273906f, 0.047255f, -0.099798f, -0.175864f, -0.111706f, -0.187478f, 0.017459f, 0.179466f, 0.303312f, -0.914377f, -0.454025f, 2.476254f, - 0.621627f, 0.011114f, 0.981192f, -0.253924f, -0.028998f, 0.716900f, -0.000541f, -0.058620f, -0.133470f, 1.285166f, 0.023501f, -0.107565f, 0.003875f, 0.521398f, 0.938485f, -0.274409f, -0.864538f, 0.475578f, 1.350173f, 0.704398f, 1.977759f, -0.009563f, -0.180193f, -0.152311f, 0.308965f, 0.476963f, 0.235046f, 1.431437f, 0.203638f, -1.193943f, -0.776895f, 2.853604f, 1.384001f, 2.607643f, 0.210453f, 4.753994f, -0.318441f, -0.641232f, 0.681624f, 0.064183f, 0.062136f, 0.491965f, 0.078715f, -1.190437f, 2.299521f, 0.279093f, -0.531432f, 0.056751f, 0.908371f, 0.596757f, 1.108720f, 0.554711f, 1.171101f, -0.006235f, 2.159307f, 0.175362f, -0.505673f, 0.166484f, 0.362916f, 0.227361f, 0.587717f, 0.301477f, 0.363320f, 0.233596f, 0.708472f, 2.246567f, -0.273318f, 0.112575f, -0.014105f, -0.074279f, -0.077574f, -0.191145f, -0.280995f, 0.338633f, 0.068418f, -1.464972f, -0.873218f, 2.629376f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 prec_chol_speech_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = { //Q28 @@ -671,24 +380,6 @@ const Word32 prec_chol_speech_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_C -73368240, 30219122, -3786282, -19939118, -20823612, -51310096, -75429024, 90901104, 18365818, -393250432, -234402672, 705817728, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float weights_speech[N_SMC_MIXTURES] = -{ - 0.110243f, 0.158178f, 0.164349f, 0.167653f, 0.235143f, 0.164434f, -}; - -const float means_music[N_SMC_MIXTURES*N_PCA_COEF] = -{ - 0.656611f, 1.525081f, 0.094663f, 0.532436f, 0.093851f, 0.302220f, -0.010327f, -0.389405f, -0.291664f, -0.049673f, 0.073362f, 0.080331f, - -0.430694f, -0.007781f, 0.065952f, -1.004505f, -0.195157f, -0.457738f, 0.402081f, 0.277964f, -0.025551f, 0.144147f, 0.103940f, -0.083957f, - -0.360195f, 1.474304f, -0.268462f, -0.060606f, -0.008471f, -0.155261f, -0.242842f, 0.119412f, -0.196130f, -0.300577f, -0.029504f, 0.060241f, - -2.474926f, 1.226681f, -0.002546f, 0.253692f, -0.118133f, 0.066950f, 0.167503f, 0.047745f, -0.302155f, 0.018914f, 0.034468f, 0.011810f, - -0.944544f, 1.303678f, 0.326616f, 0.443005f, 0.339787f, 0.353776f, 0.811425f, -0.201050f, 0.056356f, 0.825931f, 0.425448f, -0.400853f, - 2.416758f, 0.991434f, -0.249973f, -0.264729f, -0.003941f, -0.242565f, -0.114334f, 0.179267f, 0.085679f, -0.001649f, -0.267403f, 0.028878f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 means_music_fx[N_SMC_MIXTURES*N_PCA_COEF] = { //Q20 @@ -703,13 +394,6 @@ const Word32 means_music_fx[N_SMC_MIXTURES*N_PCA_COEF] = 866051, 446115, -420325, 2534155, 1039594, -262116, -277588, -4132, -254348, -119888, 187975, 89841, -1729, -280392, 30281, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float log_det_chol_music[N_SMC_MIXTURES] = -{ - 3.236255f, 3.517110f, 5.675361f, 2.875446f, -2.234983f, 7.961542f, -}; -#endif const Word32 log_det_chol_music_fx[N_SMC_MIXTURES] = {//Q19 1696729, @@ -719,18 +403,6 @@ const Word32 log_det_chol_music_fx[N_SMC_MIXTURES] = -1171774, 4174141, }; -#ifndef IVAS_FLOAT_FIXED -const float prec_chol_music[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = -{ - 0.865468f, 0.096250f, 0.875676f, -0.081846f, -0.330935f, 1.076934f, 0.141790f, 0.047793f, 0.095596f, 0.805507f, 0.014703f, 0.133837f, -0.185849f, 0.065923f, 0.878885f, -0.023521f, -0.109075f, 0.293645f, -0.004503f, 0.103060f, 1.017106f, -0.140600f, -0.264764f, 0.386274f, -0.037347f, -0.140433f, -0.230523f, 1.476784f, -0.097932f, 0.056998f, -0.001711f, -0.088553f, 0.012943f, -0.094897f, 0.176247f, 1.239658f, 0.145315f, 0.034242f, -0.028931f, -0.132416f, 0.080181f, 0.025223f, -0.464244f, 0.005253f, 1.895192f, -0.096706f, -0.029121f, 0.072887f, 0.005231f, -0.191996f, -0.169344f, 0.616334f, -0.105826f, -0.302582f, 2.184961f, -0.173989f, -0.194028f, 0.036340f, -0.116044f, -0.145628f, -0.150018f, 0.249165f, 0.112598f, 0.374794f, 0.091387f, 2.450082f, 0.253605f, 0.179610f, -0.178889f, 0.182902f, -0.015903f, 0.219889f, -0.718143f, -0.189849f, -0.115940f, -0.439124f, -0.679777f, 2.330453f, - 0.538970f, -0.035968f, 0.813335f, 0.022517f, -0.181125f, 0.948319f, -0.159673f, -0.049540f, 0.123396f, 1.071468f, -0.045159f, -0.114757f, 0.123202f, 0.060699f, 1.446151f, -0.071575f, 0.090669f, 0.052802f, -0.124821f, -0.326671f, 1.345917f, 0.129963f, 0.194230f, -0.182184f, -0.063497f, 0.009279f, 0.273701f, 1.322214f, 0.151468f, 0.144482f, 0.090362f, -0.417473f, -0.022089f, -0.353023f, -0.136793f, 1.200676f, -0.210558f, -0.243242f, 0.041053f, -0.058388f, 0.047228f, -0.190541f, -0.223507f, 0.254937f, 1.699705f, 0.164428f, 0.014902f, -0.289802f, 0.230417f, -0.013618f, -0.154441f, 0.264950f, -0.320963f, -0.258504f, 2.316852f, 0.000212f, 0.187401f, -0.011045f, 0.382538f, -0.052954f, -0.256577f, 0.155038f, -0.129821f, -0.074534f, 0.208774f, 2.065668f, -0.134512f, -0.076705f, -0.095956f, -0.239026f, 0.198459f, 0.130585f, -0.290055f, -0.028346f, 0.367803f, 0.031032f, 0.304326f, 3.008867f, - 0.768930f, 0.108937f, 0.919200f, -0.112951f, -0.528392f, 1.553020f, -0.115801f, 0.007334f, -0.029592f, 1.098616f, 0.003621f, 0.099218f, -0.247408f, -0.078849f, 1.367811f, 0.042889f, -0.077877f, 0.209637f, -0.165400f, -0.017952f, 1.342725f, -0.184761f, 0.050278f, 0.029655f, 0.175364f, -0.016161f, -0.161006f, 1.722900f, 0.051465f, 0.010021f, 0.385607f, -0.264551f, -0.281174f, -0.362257f, -0.036395f, 1.382524f, -0.066193f, -0.084715f, -0.123814f, -0.032121f, 0.092897f, 0.068140f, -0.260849f, 0.010565f, 1.773789f, 0.236448f, 0.096324f, -0.080643f, 0.122260f, 0.129134f, 0.109539f, 0.427091f, -0.456268f, -0.254883f, 3.037065f, 0.130895f, -0.132792f, -0.126857f, 0.006429f, 0.009618f, -0.233609f, 0.804552f, -0.307940f, -0.127871f, 1.666924f, 2.807298f, -0.369826f, -0.012257f, 0.017262f, -0.057686f, -0.135910f, 0.150073f, -1.517210f, 0.219460f, 0.501691f, -2.240129f, -1.288359f, 3.654831f, - 0.768658f, 0.003820f, 0.830374f, -0.217304f, -0.148821f, 0.978966f, -0.069324f, 0.005255f, -0.006609f, 0.791961f, 0.067522f, 0.106222f, -0.221519f, 0.017580f, 0.917797f, -0.000305f, -0.087966f, 0.058007f, -0.062253f, 0.174119f, 1.000509f, 0.111418f, 0.138297f, 0.085620f, 0.205840f, 0.010353f, -0.212830f, 1.272419f, 0.019098f, 0.078237f, -0.022486f, -0.089409f, -0.174376f, -0.190770f, -0.036704f, 1.255936f, -0.031611f, -0.422268f, -0.059954f, -0.227044f, 0.032839f, -0.039616f, -0.299988f, 0.188407f, 1.783848f, 0.555498f, 0.100881f, 0.083480f, -0.091083f, 0.227518f, 0.151158f, 0.519622f, -0.289353f, -0.348091f, 2.626882f, 0.069054f, 0.080511f, -0.097590f, -0.066670f, 0.182192f, 0.038856f, 0.195598f, -0.205755f, -0.129408f, 0.675275f, 2.359014f, -0.290034f, -0.005755f, -0.061652f, -0.041416f, 0.115984f, 0.037760f, -0.462742f, 0.100872f, 0.299008f, -1.288345f, -0.758290f, 2.209114f, - 0.370886f, 0.068065f, 0.614958f, -0.068457f, -0.114038f, 0.796522f, -0.079392f, -0.027007f, 0.057585f, 0.635611f, -0.018133f, -0.062099f, -0.185303f, 0.084657f, 0.533251f, -0.148971f, -0.038737f, 0.268261f, 0.165710f, 0.022648f, 0.747975f, -0.004069f, 0.059367f, 0.050886f, 0.069492f, -0.103153f, -0.088546f, 0.703324f, 0.045359f, -0.122298f, -0.227646f, 0.062645f, 0.011837f, 0.069355f, -0.019762f, 1.067046f, 0.105756f, -0.440658f, 0.192851f, -0.058815f, 0.028047f, 0.138805f, -0.125973f, -0.667383f, 1.143016f, -0.065451f, 0.083705f, -0.153760f, -0.060730f, -0.000403f, -0.090839f, 0.063298f, -0.037514f, 0.351583f, 1.182379f, -0.106357f, -0.016221f, -0.010726f, 0.100052f, 0.057551f, 0.105911f, -0.001332f, -0.078458f, -0.268890f, -0.242942f, 1.545230f, 0.023359f, -0.080829f, 0.231242f, -0.036875f, 0.079070f, 0.062469f, 0.004314f, 0.075508f, 0.036818f, 0.069211f, -0.363344f, 1.482260f, - 1.209142f, 0.088647f, 1.211345f, -0.361558f, -0.636888f, 1.613629f, -0.073522f, 0.094440f, 0.348373f, 1.388855f, 0.080521f, -0.037507f, 0.070824f, 0.052632f, 1.876701f, -0.032255f, 0.124895f, -0.048464f, -0.228421f, -0.227230f, 1.726811f, -0.291388f, -0.077976f, 0.299319f, -0.171845f, 0.012052f, 0.228501f, 2.014814f, -0.039524f, -0.252147f, 0.412488f, -0.546076f, -0.276125f, -0.498767f, 0.283854f, 1.733851f, 0.044785f, -0.173411f, 0.095814f, -0.035061f, 0.007025f, 0.236956f, -0.269935f, -0.192304f, 1.968567f, -0.667309f, -0.209738f, -0.260295f, 0.087080f, -0.241920f, -0.281580f, 0.361767f, -0.183381f, 0.175271f, 3.096483f, -0.472230f, -0.015951f, -0.043282f, -0.052428f, -0.352133f, -0.334534f, 0.390436f, 0.113373f, -0.300916f, 1.454841f, 2.885831f, 0.478838f, 0.050578f, -0.039767f, 0.114396f, -0.067675f, 0.013117f, -1.117973f, -0.208723f, 0.445495f, -0.031657f, 0.011242f, 4.388051f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 prec_chol_music_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = { //Q28 @@ -794,25 +466,6 @@ const Word32 prec_chol_music_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_CO 128537096, 13576928, -10674873, 30707942, -18166370, 3521068, -300103584, -56028652, 119586656, -8497861, 3017751, 1177908480, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float weights_music[N_SMC_MIXTURES] = -{ - 0.156143f, 0.136090f, 0.300104f, 0.193919f, 0.051812f, 0.161931f, -}; -#endif -#ifndef IVAS_FLOAT_FIXED -const float means_noise[N_SMC_MIXTURES*N_PCA_COEF] = -{ - 1.038195f, 0.637194f, -1.048590f, -0.949921f, -0.088088f, -0.620960f, -0.230118f, 0.960491f, 0.410842f, 0.323754f, -0.634407f, 0.010970f, - -1.206174f, -0.844701f, -0.731341f, -1.143035f, -0.316326f, -0.425896f, 0.447156f, 1.554899f, -0.100991f, 0.950109f, -0.229985f, -0.201161f, - 1.333451f, 0.554427f, -1.252278f, -0.248920f, 0.051240f, -0.444626f, -0.158659f, 1.095395f, 0.246439f, 0.057993f, -0.786062f, 0.175020f, - 1.232670f, 0.329225f, -0.881330f, -0.052693f, 0.156031f, -0.303587f, -0.111282f, 0.790189f, 0.130987f, 0.064452f, -0.478277f, 0.103193f, - -1.990813f, -0.723883f, -1.196019f, -1.768941f, -0.344735f, -0.677093f, -0.256214f, 1.351858f, -0.353724f, 0.768104f, -0.384513f, -0.371595f, - -2.101499f, -1.294068f, -0.188406f, -1.843713f, -0.786294f, -0.539876f, 0.241184f, 1.600162f, -0.300266f, 1.225627f, 0.080940f, -0.231195f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 means_noise_fx[N_SMC_MIXTURES*N_PCA_COEF] = { //Q20 @@ -827,13 +480,6 @@ const Word32 means_noise_fx[N_SMC_MIXTURES*N_PCA_COEF] = 805415, -403191, -389646, -2203582, -1356929, -197558, -1933273, -824489, -566101, 252900, 1677892, -314852, 1285163, 84872, -242426, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float log_det_chol_noise[N_SMC_MIXTURES] = -{ - 11.878154f, 13.025598f, 12.831137f, 7.099546f, 13.242941f, 11.898383f, -}; -#endif const Word32 log_det_chol_noise_fx[N_SMC_MIXTURES] = {//Q19 6227573, @@ -843,18 +489,6 @@ const Word32 log_det_chol_noise_fx[N_SMC_MIXTURES] = 6943115, 6238179, }; -#ifndef IVAS_FLOAT_FIXED -const float prec_chol_noise[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = -{ - 1.632699f, -0.379077f, 1.966804f, -0.344223f, -0.149261f, 2.120968f, -0.643124f, 0.344982f, 0.335749f, 1.870530f, -0.261820f, 0.059065f, 0.158862f, -0.280203f, 2.457868f, 0.081479f, 0.745744f, -0.249165f, -0.769764f, -1.012361f, 2.160652f, -0.156229f, 0.672157f, -0.261424f, 0.116279f, -0.228307f, -0.056947f, 3.407241f, 0.356097f, -0.736238f, 0.705233f, -1.408321f, -0.717390f, -1.037433f, 0.333510f, 2.484870f, 0.323039f, -1.483297f, -0.500337f, -0.090107f, -0.439007f, -0.290405f, 0.327256f, -0.243020f, 2.511947f, 0.442037f, 0.525936f, -1.436016f, 0.336699f, 0.176533f, -0.643667f, 0.793828f, -0.342947f, 0.672485f, 4.147797f, 0.332162f, 0.594025f, -1.072022f, 0.522281f, 0.199482f, 0.046997f, 0.786233f, -0.726740f, -1.173474f, 0.744190f, 3.950012f, -0.607163f, -0.630364f, 1.025563f, -0.779746f, -0.553567f, 0.336951f, -1.148469f, 0.489795f, 0.770505f, -1.178058f, -0.433118f, 6.111872f, - 2.143755f, -0.413062f, 2.014192f, -0.075622f, -0.450719f, 2.205736f, 0.280257f, 0.584592f, 0.270209f, 2.063094f, -1.015927f, -0.580325f, 0.143926f, -0.584358f, 2.804261f, -0.678043f, 0.350781f, -0.335668f, -1.550830f, -0.871893f, 2.572887f, 0.675586f, 0.480079f, -0.359260f, 0.282963f, 0.038297f, -0.806271f, 3.881284f, -0.007880f, -0.600785f, 0.418550f, -1.442369f, 0.052922f, -0.189472f, -0.679946f, 2.474994f, -0.050026f, -1.336880f, -0.230418f, -0.014308f, -0.572717f, -1.251292f, 0.476137f, 0.270476f, 2.682144f, -0.043322f, -0.275643f, -1.378692f, -0.310016f, -0.355372f, -0.291887f, -0.105540f, -0.006300f, 0.295662f, 4.390412f, -0.318893f, 0.350906f, -0.770328f, 0.501645f, -0.080125f, -0.331810f, 0.474472f, -0.445056f, -1.149920f, 1.144612f, 4.264102f, 0.070893f, -0.033470f, -0.263519f, -0.577897f, 0.826515f, 0.188348f, 0.256791f, -0.351058f, 0.993722f, 0.972258f, 1.109502f, 6.637324f, - 1.568506f, -0.221341f, 1.966173f, -0.367708f, -0.350875f, 2.751533f, -0.123500f, 0.287689f, -0.365051f, 2.117681f, 0.163212f, 0.082424f, -0.165235f, -0.143181f, 2.593907f, 0.033464f, 0.285970f, 0.290856f, -0.552542f, -0.344460f, 2.494827f, 0.116380f, 0.004019f, -0.298612f, 0.063575f, 0.159355f, -0.363974f, 3.116427f, 0.379961f, -0.086746f, -0.164435f, -0.242829f, -0.121803f, -0.644812f, 0.433181f, 2.516195f, 0.092920f, -1.078008f, -0.106551f, -0.224285f, -0.252404f, -0.173980f, 0.329091f, -0.646624f, 2.951021f, 0.051908f, -0.385181f, -0.300332f, 0.016299f, 0.082525f, 0.077887f, 0.789534f, -0.866108f, 1.039234f, 4.648430f, -0.262984f, 0.276620f, -0.203404f, 0.098407f, -0.039619f, 0.124315f, 1.110207f, -0.567436f, -0.910194f, 2.916694f, 4.692430f, 0.077585f, 0.031716f, 0.378054f, -0.133353f, -0.557203f, -0.075146f, -1.984817f, 0.529554f, 0.608864f, -2.224605f, -1.402217f, 6.366141f, - 0.779595f, -0.089397f, 1.234740f, 0.024544f, -0.218958f, 1.424978f, -0.070141f, 0.146756f, -0.121060f, 1.420921f, 0.081782f, -0.063427f, -0.064760f, 0.108557f, 1.528785f, -0.082491f, 0.002662f, 0.169068f, 0.112307f, -0.279665f, 1.745017f, 0.025568f, -0.009241f, -0.013853f, -0.070061f, 0.170304f, -0.047415f, 1.938777f, 0.196318f, 0.002824f, -0.012629f, -0.213627f, -0.071292f, -0.352020f, 0.181309f, 2.060772f, 0.057579f, -0.207220f, 0.138657f, -0.078942f, 0.052427f, 0.140410f, -0.305897f, -0.468443f, 2.109666f, 0.091878f, -0.295279f, -0.302448f, 0.067905f, -0.086834f, -0.131233f, 0.170017f, -0.373685f, 0.413721f, 2.785042f, -0.144180f, -0.183951f, -0.006815f, -0.092817f, -0.164308f, 0.014492f, 0.354251f, 0.016589f, -0.393079f, 0.228511f, 2.902565f, 0.052404f, 0.092540f, 0.171645f, 0.052254f, -0.274919f, -0.103905f, -0.641625f, 0.082116f, 0.031077f, -0.507968f, -0.058403f, 3.419316f, - 1.206695f, -0.682889f, 2.049445f, -0.507047f, -0.343185f, 1.895558f, -0.136277f, 0.093440f, 0.696606f, 2.282985f, 0.012380f, -0.155599f, 0.040493f, -0.121679f, 3.355282f, -0.492283f, 0.647906f, -1.064008f, -0.988783f, -0.065537f, 2.779347f, 0.650801f, 0.326591f, -0.046862f, 0.187397f, -0.194321f, -0.032757f, 4.176259f, 0.551237f, -0.536042f, 0.150845f, -1.240364f, -0.370417f, -0.855459f, 0.336866f, 2.809574f, 0.340270f, -1.176219f, 0.013030f, 0.354705f, -0.488960f, -0.466479f, 0.783022f, -0.149058f, 2.884207f, 1.206646f, 0.307873f, -1.411090f, 0.070099f, 0.209224f, 0.291007f, -0.377239f, -0.640368f, 0.406003f, 5.155920f, 0.809698f, 0.669060f, -0.941776f, 1.072041f, -0.116894f, -0.149209f, 0.452617f, -0.740148f, -1.188619f, 2.296872f, 4.692944f, -0.040471f, -0.131586f, 0.797791f, -2.162108f, 1.341433f, 1.097095f, -1.576712f, 0.454951f, 0.343379f, -0.053275f, 0.073795f, 6.902156f, - 1.388928f, -0.529069f, 1.914570f, -0.246147f, -0.376892f, 1.708861f, -0.205445f, 0.314175f, 0.650069f, 1.841539f, -0.085711f, -0.013295f, -0.070955f, -0.466548f, 3.166998f, -0.260572f, 0.720834f, -0.792817f, -1.467658f, -0.372909f, 2.710914f, 0.606852f, 0.637359f, -0.541404f, -0.330263f, 0.170983f, 0.064970f, 2.980650f, 0.184834f, -0.340049f, 0.288191f, -1.044021f, -0.466651f, -0.374637f, -0.231777f, 2.131845f, 0.132432f, -0.963210f, -0.294608f, 0.042302f, -0.114246f, -0.932316f, -0.166230f, 0.203508f, 2.563777f, 0.548839f, -0.440379f, -0.934541f, -0.344106f, 0.030490f, -0.377361f, -0.085154f, -0.262774f, 0.477136f, 4.772394f, 0.084517f, 0.357867f, -0.429870f, 0.688023f, 0.353825f, -0.439173f, 0.076948f, -0.769601f, -1.177351f, 1.958859f, 4.300092f, -0.207814f, 0.243404f, -0.706169f, -0.588024f, 0.962382f, 0.338356f, -0.298229f, -0.351656f, 0.768647f, 0.689511f, 0.692148f, 6.121235f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 prec_chol_noise_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_COEF) / 2] = { //Q28 @@ -918,23 +552,6 @@ const Word32 prec_chol_noise_fx[N_SMC_MIXTURES*(N_PCA_COEF*N_PCA_COEF + N_PCA_CO -55784644, 65338264, -189560800, -157846496, 258337456, 90826744, -80055240, -94396936, 206332112, 185089200, 185797056, 1643156480, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float weights_noise[N_SMC_MIXTURES] = -{ - 0.186702f, 0.110792f, 0.358051f, 0.085247f, 0.132809f, 0.126399f, -}; - -const float m_speech[N_MIXTURES*N_FEATURES] = -{ - 0.287950f, 0.915145f, 0.146341f, 0.215938f, 0.337233f, 0.416424f, 0.464061f, 0.463680f, 0.059083f, 0.853025f, 0.768184f, 0.314352f, - 0.306930f, 0.936427f, 0.255783f, 0.304095f, 0.328435f, 0.264893f, 0.353664f, 0.481807f, 0.050087f, 0.816373f, 0.828952f, 0.335445f, - 0.241923f, 0.953049f, 0.219456f, 0.259538f, 0.436515f, 0.498549f, 0.456902f, 0.490619f, 0.062629f, 0.832243f, 0.845146f, 0.331393f, - 0.424629f, 0.528660f, 0.325986f, 0.502250f, 0.543419f, 0.561620f, 0.591057f, 0.386511f, 0.067280f, 0.903251f, 0.891515f, 0.344377f, - 0.380487f, 0.727792f, 0.209973f, 0.314364f, 0.421881f, 0.398734f, 0.446999f, 0.402498f, 0.105313f, 0.867979f, 0.877883f, 0.317694f, - 0.344962f, 0.658148f, 0.240913f, 0.348251f, 0.433178f, 0.480324f, 0.498983f, 0.419444f, 0.187060f, 0.868077f, 0.855516f, 0.347290f -}; -#endif const Word16 m_speech_fx[N_MIXTURES*N_FEATURES] = { /*Q15*/ @@ -945,83 +562,6 @@ const Word16 m_speech_fx[N_MIXTURES*N_FEATURES] = 12468, 23848, 6880, 10301, 13824, 13066, 14647, 13189, 3451, 28442, 28766, 10410, 11304, 21566, 7894, 11411, 14194, 15739, 16351, 13744, 6130, 28445, 28034, 11380 }; -#ifndef IVAS_FLOAT_FIXED -const float invV_speech[N_MIXTURES*N_FEATURES*N_FEATURES] = -{ - -39.495125f, -14.409725f, -38.632778f, -17.688078f, 8.772461f, -11.402443f, 0.439471f, -10.340120f, -48.738274f, 0.349716f, 16.818443f, 32.142887f, - -14.409725f, -195.908417f, -27.029999f, -27.433266f, -16.451397f, -6.243556f, 5.814015f, 12.751663f, -65.479347f, -46.738777f, -8.373536f, 18.300566f, - -38.632782f, -27.029999f, -753.940247f, 115.388985f, -47.167007f, 27.107189f, -36.896187f, 72.593445f, -298.310120f, -22.776127f, 177.255432f, 89.802238f, - -17.688076f, -27.433270f, 115.388954f, -222.724594f, 40.140877f, -45.163593f, 21.461746f, 7.970023f, -27.137230f, 76.520920f, 25.476706f, 38.804222f, - 8.772461f, -16.451405f, -47.167007f, 40.140877f, -94.404678f, 40.199402f, -17.781452f, 3.901072f, -14.428046f, 23.148809f, 13.478944f, 17.505091f, - -11.402439f, -6.243560f, 27.107193f, -45.163593f, 40.199394f, -93.411865f, 57.189003f, 3.581622f, 0.100851f, 5.812640f, 9.256781f, 10.823537f, - 0.439471f, 5.814015f, -36.896187f, 21.461748f, -17.781452f, 57.189003f, -89.808571f, -5.465971f, -46.055283f, -15.567553f, 14.521687f, 10.769546f, - -10.340121f, 12.751663f, 72.593445f, 7.970019f, 3.901072f, 3.581622f, -5.465971f, -100.358055f, 24.768887f, -20.986031f, -47.276218f, 13.192144f, - -48.738274f, -65.479347f, -298.310120f, -27.137238f, -14.428048f, 0.100851f, -46.055275f, 24.768887f, -1377.781250f, -56.637291f, 233.195129f, -114.883377f, - 0.349715f, -46.738777f, -22.776127f, 76.520912f, 23.148806f, 5.812638f, -15.567553f, -20.986031f, -56.637291f, -216.730820f, -0.914011f, 39.627998f, - 16.818443f, -8.373537f, 177.255432f, 25.476713f, 13.478942f, 9.256781f, 14.521687f, -47.276218f, 233.195129f, -0.914013f, -153.435181f, -48.048389f, - 32.142887f, 18.300564f, 89.802223f, 38.804218f, 17.505091f, 10.823533f, 10.769546f, 13.192144f, -114.883377f, 39.628006f, -48.048389f, -313.631622f, - -53.471222f, -47.464245f, -0.896915f, -25.132132f, 30.892912f, -27.316641f, 22.758862f, -18.016706f, -66.564011f, -3.584184f, -7.795120f, 35.122147f, - -47.464249f, -438.709412f, -11.227010f, -14.463504f, 12.490106f, -11.184597f, 2.622577f, -3.664124f, -84.887161f, -29.377838f, -53.413090f, 17.047739f, - -0.896916f, -11.227015f, -251.993881f, 153.947250f, 4.508913f, 26.900564f, -22.145449f, 7.110321f, -215.903503f, -47.320839f, 78.247871f, 16.021702f, - -25.132132f, -14.463490f, 153.947235f, -326.623169f, 62.711872f, 7.543400f, 23.738796f, 19.846117f, -97.089355f, 2.828130f, 75.120659f, 34.945835f, - 30.892912f, 12.490105f, 4.508915f, 62.711872f, -289.161591f, 178.348740f, -26.642651f, 11.309997f, -10.248929f, 16.504482f, 48.839104f, 20.334949f, - -27.316643f, -11.184605f, 26.900568f, 7.543384f, 178.348740f, -267.764130f, 15.141651f, 4.242836f, -7.640367f, 77.632545f, -2.166305f, 12.531335f, - 22.758862f, 2.622574f, -22.145449f, 23.738796f, -26.642651f, 15.141647f, -71.479584f, 2.006794f, -4.579958f, 30.676281f, 15.085149f, 8.568682f, - -18.016706f, -3.664128f, 7.110321f, 19.846119f, 11.309998f, 4.242836f, 2.006794f, -76.086823f, 56.165844f, -8.384334f, -103.682259f, 6.086752f, - -66.564011f, -84.887161f, -215.903488f, -97.089355f, -10.248927f, -7.640366f, -4.579959f, 56.165840f, -1920.100708f, -8.861668f, 500.888123f, -16.967447f, - -3.584186f, -29.377846f, -47.320839f, 2.828135f, 16.504475f, 77.632553f, 30.676281f, -8.384336f, -8.861669f, -181.010406f, -15.615012f, 8.247152f, - -7.795123f, -53.413109f, 78.247864f, 75.120659f, 48.839104f, -2.166309f, 15.085151f, -103.682251f, 500.888123f, -15.615015f, -433.988953f, -70.138153f, - 35.122147f, 17.047737f, 16.021706f, 34.945835f, 20.334948f, 12.531336f, 8.568681f, 6.086751f, -16.967451f, 8.247154f, -70.138176f, -217.081589f, - -94.138069f, -64.204018f, 0.309024f, -46.150829f, 42.051434f, -41.965660f, 10.197500f, -19.122877f, -42.942600f, -19.220772f, -21.222412f, 46.903416f, - -64.204025f, -818.921143f, 30.093992f, -42.236637f, 6.486305f, -4.382217f, 10.975861f, 0.330433f, -16.922922f, -58.340889f, -111.845398f, -1.666081f, - 0.309030f, 30.093992f, -342.960907f, 202.719925f, -66.503586f, 59.412266f, -81.710594f, 14.449543f, -155.271118f, 13.000940f, 119.772522f, 37.219341f, - -46.150829f, -42.236637f, 202.719910f, -315.177094f, 74.731415f, -97.374359f, 58.435394f, 19.693314f, -62.044556f, 6.968471f, 74.460442f, 22.385506f, - 42.051434f, 6.486304f, -66.503578f, 74.731415f, -93.988602f, 52.841560f, -21.181007f, 2.344793f, -35.600548f, -19.262661f, 37.872654f, 6.642675f, - -41.965660f, -4.382209f, 59.412254f, -97.374352f, 52.841560f, -278.285614f, 214.990295f, -0.626728f, -43.822613f, -21.303955f, 15.663709f, 3.870531f, - 10.197496f, 10.975868f, -81.710587f, 58.435387f, -21.181000f, 214.990295f, -234.196167f, 1.970801f, -16.810629f, -1.859668f, 16.002600f, 3.998644f, - -19.122877f, 0.330433f, 14.449545f, 19.693314f, 2.344791f, -0.626729f, 1.970801f, -57.165413f, 20.255400f, -9.028506f, -83.099960f, 8.659401f, - -42.942604f, -16.922922f, -155.271103f, -62.044556f, -35.600552f, -43.822613f, -16.810629f, 20.255400f, -986.222534f, 27.520060f, 397.979370f, -10.706357f, - -19.220772f, -58.340889f, 13.000940f, 6.968470f, -19.262661f, -21.303955f, -1.859668f, -9.028505f, 27.520063f, -181.756256f, -31.725298f, 5.532037f, - -21.222410f, -111.845398f, 119.772507f, 74.460449f, 37.872654f, 15.663704f, 16.002598f, -83.099960f, 397.979370f, -31.725298f, -499.032318f, -64.723236f, - 46.903416f, -1.666086f, 37.219345f, 22.385508f, 6.642675f, 3.870531f, 3.998645f, 8.659404f, -10.706349f, 5.532042f, -64.723228f, -245.227646f, - -20.650835f, 1.359996f, -2.309748f, 3.667799f, -4.431922f, -1.491803f, 2.244124f, -6.511281f, -7.420423f, -2.656161f, -5.103209f, 2.977657f, - 1.359996f, -45.519173f, -27.833733f, 11.524545f, -5.826983f, 8.198447f, -4.084381f, 13.450377f, 18.150373f, -9.569582f, -6.539153f, -3.438999f, - -2.309748f, -27.833733f, -75.630455f, 54.383217f, -10.366678f, 10.230091f, -6.134814f, 5.390231f, -18.911335f, 8.611535f, -4.468428f, 2.542004f, - 3.667800f, 11.524545f, 54.383224f, -148.724060f, 102.126076f, -8.536950f, 14.920280f, -2.707708f, 16.232759f, -12.092183f, -2.761442f, 5.324492f, - -4.431922f, -5.826983f, -10.366676f, 102.126083f, -239.405472f, 114.426819f, -4.901945f, 3.331610f, -2.787818f, -19.461893f, 9.501407f, 1.843912f, - -1.491803f, 8.198447f, 10.230090f, -8.536962f, 114.426842f, -252.874207f, 133.055328f, -2.890811f, -8.063058f, -19.651783f, -6.576759f, -6.167914f, - 2.244124f, -4.084381f, -6.134819f, 14.920280f, -4.901949f, 133.055328f, -188.368149f, 0.868558f, -5.905251f, -73.150818f, 15.489239f, 3.931309f, - -6.511280f, 13.450379f, 5.390231f, -2.707708f, 3.331610f, -2.890812f, 0.868557f, -291.328827f, 8.357405f, 5.690188f, -65.318748f, -3.008168f, - -7.420423f, 18.150373f, -18.911335f, 16.232759f, -2.787818f, -8.063062f, -5.905251f, 8.357409f, -817.866455f, -35.719170f, 465.940338f, -57.209427f, - -2.656161f, -9.569582f, 8.611535f, -12.092187f, -19.461897f, -19.651789f, -73.150826f, 5.690184f, -35.719170f, -273.267426f, 28.788002f, 35.708652f, - -5.103208f, -6.539154f, -4.468427f, -2.761442f, 9.501406f, -6.576763f, 15.489231f, -65.318748f, 465.940338f, 28.788004f, -993.901489f, -74.051056f, - 2.977657f, -3.439001f, 2.542004f, 5.324495f, 1.843912f, -6.167918f, 3.931307f, -3.008166f, -57.209423f, 35.708649f, -74.051048f, -188.919189f, - -29.690845f, -6.602296f, -5.942207f, -8.191399f, 12.539626f, -17.187153f, 8.095049f, -11.539900f, -3.959312f, -2.929833f, -13.009781f, 14.593680f, - -6.602297f, -27.784903f, -12.036678f, -8.735461f, 10.268900f, -8.173005f, -0.508073f, 2.189236f, -3.210277f, -19.652676f, 0.174784f, 12.064508f, - -5.942207f, -12.036678f, -176.179718f, 87.371017f, -19.441795f, 2.946336f, -40.577980f, 4.105769f, -30.427385f, -23.225182f, 84.964821f, 43.734604f, - -8.191399f, -8.735461f, 87.371017f, -143.001602f, 51.919571f, -27.973251f, 29.284573f, -2.447426f, -11.954906f, 27.745192f, 11.595254f, 0.393728f, - 12.539626f, 10.268898f, -19.441788f, 51.919567f, -178.068130f, 128.031281f, -3.544543f, 6.851246f, -10.772905f, -42.477104f, 34.736156f, 40.172005f, - -17.187153f, -8.173005f, 2.946335f, -27.973251f, 128.031281f, -165.563629f, 51.259937f, -4.838826f, 3.758103f, 40.516190f, -7.739178f, -19.154724f, - 8.095048f, -0.508073f, -40.577976f, 29.284571f, -3.544538f, 51.259933f, -108.403847f, -0.894440f, 3.337809f, 2.241667f, 3.315053f, 1.456518f, - -11.539901f, 2.189236f, 4.105764f, -2.447426f, 6.851246f, -4.838827f, -0.894440f, -214.332535f, -4.848935f, -3.779825f, -75.247871f, -1.171161f, - -3.959312f, -3.210277f, -30.427393f, -11.954905f, -10.772905f, 3.758103f, 3.337807f, -4.848933f, -266.199005f, 2.878902f, 180.030838f, -44.094963f, - -2.929832f, -19.652674f, -23.225182f, 27.745188f, -42.477104f, 40.516193f, 2.241667f, -3.779825f, 2.878902f, -156.775406f, -11.596662f, 4.385890f, - -13.009781f, 0.174784f, 84.964828f, 11.595254f, 34.736156f, -7.739182f, 3.315054f, -75.247871f, 180.030838f, -11.596662f, -489.502777f, -57.779266f, - 14.593680f, 12.064507f, 43.734604f, 0.393729f, 40.172005f, -19.154715f, 1.456519f, -1.171165f, -44.094959f, 4.385883f, -57.779274f, -250.653564f, - -23.921967f, -5.683947f, -2.099401f, 0.128250f, 5.166994f, -10.038282f, 6.450608f, -0.731379f, -2.247439f, -4.157187f, 6.583568f, 4.081524f, - -5.683947f, -30.142115f, -8.658390f, -12.576810f, -1.309613f, 1.993960f, -4.383123f, 6.826682f, -0.827366f, -21.146013f, 3.620328f, 11.092305f, - -2.099401f, -8.658390f, -121.018547f, 88.485786f, -27.739552f, 24.281445f, -27.560604f, 3.724861f, 6.288231f, -12.520897f, 2.671664f, 12.669825f, - 0.128251f, -12.576811f, 88.485771f, -144.032974f, 84.679276f, -37.420727f, 25.546324f, 1.023258f, -7.474452f, 16.698721f, 8.763003f, 1.241009f, - 5.166994f, -1.309613f, -27.739553f, 84.679291f, -144.411407f, 72.554382f, -14.219510f, 2.006990f, 17.638592f, 1.209377f, -4.082684f, 14.381269f, - -10.038282f, 1.993960f, 24.281441f, -37.420734f, 72.554382f, -164.510483f, 115.127594f, -0.853720f, -16.850563f, 0.659630f, 12.865159f, -12.793469f, - 6.450607f, -4.383123f, -27.560604f, 25.546320f, -14.219501f, 115.127594f, -144.301163f, -12.984586f, 2.706392f, -4.143620f, -4.696592f, 1.570192f, - -0.731379f, 6.826682f, 3.724859f, 1.023259f, 2.006988f, -0.853720f, -12.984586f, -75.763382f, -31.576742f, -4.753652f, 9.548754f, -6.625205f, - -2.247438f, -0.827366f, 6.288230f, -7.474454f, 17.638592f, -16.850563f, 2.706394f, -31.576742f, -68.203148f, 11.220890f, 20.883671f, -23.079214f, - -4.157187f, -21.146011f, -12.520897f, 16.698721f, 1.209376f, 0.659629f, -4.143620f, -4.753652f, 11.220889f, -148.282272f, -2.460779f, 12.595567f, - 6.583566f, 3.620328f, 2.671665f, 8.763003f, -4.082685f, 12.865157f, -4.696593f, 9.548755f, 20.883675f, -2.460779f, -59.110310f, -3.725027f, - 4.081524f, 11.092305f, 12.669825f, 1.241007f, 14.381269f, -12.793469f, 1.570194f, -6.625203f, -23.079216f, 12.595569f, -3.725027f, -62.429104f -}; -#endif const Word32 invV_speech_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = { /*Q10*/ @@ -1098,28 +638,11 @@ const Word32 invV_speech_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = 6742, 3707, 2736, 8973, -4181, 13174, -4809, 9778, 21385, -2520, -60529, -3814, 4179, 11359, 12974, 1271, 14726, -13101, 1608, -6784, -23633, 12898, -3814, -63927 }; -#ifndef IVAS_FLOAT_FIXED -const float lvm_speech[N_MIXTURES] = -{ - 31.996607f, 32.762783f, 32.964325f, 31.979258f, 30.885334f, 26.185850f -}; -#endif const Word32 lvm_speech_fx[N_MIXTURES] = { /*Q10*/ 32765, 33549, 33755, 32747, 31627, 26814 }; -#ifndef IVAS_FLOAT_FIXED -const float m_music[N_MIXTURES*N_FEATURES] = -{ - 0.451772f, 0.776554f, 0.271046f, 0.354725f, 0.395602f, 0.413925f, 0.451482f, 0.627645f, 0.031510f, 0.835348f, 0.725457f, 0.357440f, - 0.487510f, 0.629043f, 0.236111f, 0.388441f, 0.440188f, 0.465005f, 0.494082f, 0.465069f, 0.069486f, 0.918461f, 0.858141f, 0.351628f, - 0.538064f, 0.605061f, 0.283209f, 0.430647f, 0.474700f, 0.497116f, 0.519075f, 0.527071f, 0.034547f, 0.951717f, 0.846345f, 0.380536f, - 0.484100f, 0.744331f, 0.238170f, 0.341071f, 0.358081f, 0.365782f, 0.392370f, 0.702362f, 0.021764f, 0.879612f, 0.725783f, 0.420504f, - 0.305845f, 0.692470f, 0.378321f, 0.465361f, 0.486968f, 0.499951f, 0.520584f, 0.473288f, 0.125325f, 0.726521f, 0.692794f, 0.374433f, - 0.513981f, 0.696380f, 0.246046f, 0.343276f, 0.374858f, 0.396051f, 0.418772f, 0.646286f, 0.026468f, 0.930184f, 0.778228f, 0.369588f -}; -#endif const Word16 m_music_fx[N_MIXTURES*N_FEATURES] = { /*Q15*/ @@ -1130,83 +653,6 @@ const Word16 m_music_fx[N_MIXTURES*N_FEATURES] = 10022, 22691, 12397, 15249, 15957, 16382, 17058, 15509, 4107, 23807, 22701, 12269, 16842, 22819, 8062, 11248, 12283, 12978, 13722, 21178, 867, 30480, 25501, 12111 }; -#ifndef IVAS_FLOAT_FIXED -const float invV_music[N_MIXTURES*N_FEATURES*N_FEATURES] = -{ - -7.693553f, -0.657163f, -1.988950f, -0.864460f, -0.230076f, -0.650926f, 0.731884f, -1.685300f, -19.945335f, -0.839110f, 2.405366f, 3.916922f, - -0.657164f, -30.621262f, -1.553432f, -2.976453f, -1.828387f, 1.246830f, -3.716787f, 8.629019f, 5.424546f, -1.983033f, -10.816823f, -7.156825f, - -1.988950f, -1.553432f, -64.019180f, 41.928944f, -11.140388f, 11.880524f, 0.733497f, 8.586295f, 23.512827f, -15.433292f, -2.485986f, -2.458197f, - -0.864460f, -2.976454f, 41.928940f, -86.408936f, 41.949852f, -12.773962f, 4.663799f, 14.073083f, 23.178215f, -5.600554f, 14.946990f, 14.853354f, - -0.230076f, -1.828387f, -11.140390f, 41.949852f, -88.611122f, 37.060493f, -1.752939f, 3.927101f, -34.439037f, 12.153290f, 13.335299f, 16.994671f, - -0.650926f, 1.246830f, 11.880524f, -12.773962f, 37.060493f, -84.266197f, 37.053310f, 3.348819f, -5.522115f, 5.531706f, 8.455176f, -0.010933f, - 0.731884f, -3.716787f, 0.733498f, 4.663802f, -1.752939f, 37.053310f, -76.037888f, -8.315558f, -72.524521f, 21.789789f, 3.751793f, 0.630349f, - -1.685300f, 8.629018f, 8.586294f, 14.073083f, 3.927101f, 3.348819f, -8.315558f, -57.921276f, -118.393280f, 1.583935f, -8.300871f, 4.850578f, - -19.945335f, 5.424546f, 23.512829f, 23.178215f, -34.439041f, -5.522115f, -72.524521f, -118.393280f, -5404.569336f, 171.743378f, 241.973938f, -289.196930f, - -0.839109f, -1.983034f, -15.433292f, -5.600554f, 12.153290f, 5.531708f, 21.789789f, 1.583935f, 171.743362f, -101.897446f, -1.140457f, 31.464947f, - 2.405366f, -10.816823f, -2.485986f, 14.946990f, 13.335299f, 8.455174f, 3.751793f, -8.300871f, 241.973923f, -1.140458f, -77.658661f, -44.502563f, - 3.916922f, -7.156825f, -2.458197f, 14.853354f, 16.994675f, -0.010933f, 0.630349f, 4.850579f, -289.196899f, 31.464947f, -44.502563f, -243.168915f, - -9.878029f, 0.598697f, -4.302856f, -0.393763f, 0.713794f, 0.876955f, 0.341871f, -1.948222f, -8.764623f, -0.165505f, -1.265450f, 1.204445f, - 0.598697f, -29.943895f, -12.133356f, -1.089194f, -1.817891f, 2.837961f, -2.426654f, 12.585359f, -8.634910f, -11.784335f, 4.719538f, 2.997951f, - -4.302856f, -12.133356f, -84.521080f, 48.461727f, -11.249048f, 15.025650f, -19.584152f, 20.383547f, -13.363368f, 27.676975f, 22.609833f, -0.788566f, - -0.393763f, -1.089193f, 48.461727f, -128.134705f, 79.103844f, 1.020304f, 3.012457f, 7.957530f, -11.608212f, -3.021832f, 42.826736f, 14.192619f, - 0.713794f, -1.817891f, -11.249048f, 79.103836f, -220.859680f, 112.957855f, 8.839993f, -6.276199f, -19.145348f, -19.927418f, 7.305478f, 5.922347f, - 0.876955f, 2.837961f, 15.025646f, 1.020303f, 112.957878f, -275.141998f, 147.030670f, -5.400043f, 0.264864f, -5.583443f, 1.633528f, 7.493776f, - 0.341871f, -2.426655f, -19.584156f, 3.012456f, 8.839993f, 147.030670f, -196.030136f, -21.359327f, -9.146851f, 10.225628f, -2.139116f, 3.010611f, - -1.948222f, 12.585359f, 20.383547f, 7.957529f, -6.276197f, -5.400044f, -21.359325f, -108.690598f, -28.919056f, -26.963711f, -53.457581f, -9.210483f, - -8.764623f, -8.634909f, -13.363366f, -11.608211f, -19.145348f, 0.264862f, -9.146851f, -28.919056f, -602.275146f, 73.117203f, 185.012711f, -77.751747f, - -0.165505f, -11.784335f, 27.676975f, -3.021834f, -19.927414f, -5.583444f, 10.225626f, -26.963711f, 73.117210f, -350.919952f, -12.616115f, 28.914690f, - -1.265450f, 4.719537f, 22.609833f, 42.826729f, 7.305476f, 1.633531f, -2.139116f, -53.457581f, 185.012711f, -12.616107f, -398.114899f, -16.563597f, - 1.204445f, 2.997951f, -0.788567f, 14.192617f, 5.922347f, 7.493775f, 3.010611f, -9.210481f, -77.751747f, 28.914690f, -16.563597f, -176.464386f, - -12.120523f, 5.409175f, -1.857854f, 0.089656f, 2.747151f, 0.330849f, -0.110976f, -1.052840f, -23.532089f, -2.869304f, -1.769891f, 0.390127f, - 5.409175f, -35.374779f, -7.060057f, -0.748528f, -2.384489f, 2.017226f, -2.828100f, 8.307317f, 16.044216f, -11.155272f, -11.784020f, -0.186719f, - -1.857854f, -7.060059f, -112.721130f, 43.297070f, 11.361997f, 13.618838f, -3.489388f, 22.195547f, -71.385941f, 116.419769f, 68.520813f, 4.576182f, - 0.089655f, -0.748527f, 43.297066f, -183.503693f, 79.711113f, 24.255428f, 12.465648f, 1.436299f, -42.306995f, -23.502007f, 43.622116f, 3.459679f, - 2.747151f, -2.384489f, 11.361995f, 79.711113f, -288.300781f, 101.748329f, 51.744507f, -3.170304f, -142.892792f, -76.845322f, 33.559555f, -2.748073f, - 0.330848f, 2.017227f, 13.618836f, 24.255434f, 101.748344f, -339.510773f, 165.319336f, -4.353420f, -124.114395f, -92.283844f, 41.981186f, 5.566007f, - -0.110976f, -2.828100f, -3.489391f, 12.465652f, 51.744499f, 165.319336f, -302.816223f, -18.169355f, -26.544678f, -18.664721f, -2.650121f, 0.010451f, - -1.052840f, 8.307317f, 22.195547f, 1.436298f, -3.170304f, -4.353420f, -18.169355f, -67.658730f, 39.626808f, -46.781792f, -132.578033f, -6.489147f, - -23.532089f, 16.044214f, -71.385941f, -42.306988f, -142.892792f, -124.114395f, -26.544678f, 39.626808f, -8048.467285f, -69.854523f, 1809.758301f, -171.409134f, - -2.869304f, -11.155272f, 116.419769f, -23.502005f, -76.845306f, -92.283836f, -18.664721f, -46.781792f, -69.854530f, -1329.704834f, -35.750607f, 26.050083f, - -1.769890f, -11.784019f, 68.520813f, 43.622116f, 33.559555f, 41.981186f, -2.650122f, -132.578033f, 1809.758423f, -35.750607f, -1306.246704f, -81.942009f, - 0.390127f, -0.186719f, 4.576182f, 3.459679f, -2.748072f, 5.566006f, 0.010449f, -6.489147f, -171.409149f, 26.050083f, -81.942001f, -218.411270f, - -8.602416f, 3.247867f, -1.244849f, -1.473311f, 1.389639f, 1.193549f, -0.749351f, -3.831526f, -63.977875f, -5.851153f, 9.731353f, 3.762766f, - 3.247867f, -31.158295f, -1.860033f, 4.017265f, -4.594161f, 1.111136f, -0.570251f, 10.457798f, 101.742371f, 5.974397f, -29.646946f, -5.117320f, - -1.244849f, -1.860033f, -180.090790f, 66.379784f, -17.006353f, 31.490606f, -6.954518f, 15.675142f, -2.924051f, -51.747025f, 22.995018f, 27.119001f, - -1.473310f, 4.017266f, 66.379791f, -156.629517f, 84.327309f, -8.737753f, 13.449555f, 8.031604f, 3.398430f, 2.564645f, 23.766497f, 1.825905f, - 1.389639f, -4.594161f, -17.006353f, 84.327293f, -194.113434f, 66.407173f, 7.188343f, 13.696414f, 10.890992f, 22.594927f, 12.302410f, 9.738532f, - 1.193549f, 1.111136f, 31.490606f, -8.737754f, 66.407173f, -162.236801f, 56.553402f, 17.216257f, 115.981384f, 38.547184f, 1.763872f, 7.097052f, - -0.749351f, -0.570251f, -6.954517f, 13.449550f, 7.188342f, 56.553402f, -120.315659f, 2.011221f, 46.796513f, 58.099625f, 10.238644f, -4.947532f, - -3.831526f, 10.457799f, 15.675138f, 8.031604f, 13.696414f, 17.216261f, 2.011219f, -88.214516f, -358.424683f, -29.549349f, -19.958910f, -2.982261f, - -63.977875f, 101.742371f, -2.924051f, 3.398430f, 10.890991f, 115.981384f, 46.796513f, -358.424683f, -16459.796875f, -177.281921f, 882.743164f, -92.799385f, - -5.851152f, 5.974398f, -51.747017f, 2.564646f, 22.594927f, 38.547184f, 58.099625f, -29.549349f, -177.281921f, -313.395386f, -11.227232f, 55.211266f, - 9.731353f, -29.646946f, 22.995022f, 23.766500f, 12.302408f, 1.763873f, 10.238644f, -19.958918f, 882.743225f, -11.227232f, -192.809204f, -15.728045f, - 3.762767f, -5.117321f, 27.118999f, 1.825905f, 9.738532f, 7.097054f, -4.947530f, -2.982259f, -92.799385f, 55.211269f, -15.728045f, -105.412018f, - -14.256830f, -2.369603f, -4.383267f, 2.198855f, 0.019220f, -0.679427f, -2.574428f, 5.400897f, 1.071412f, 0.106907f, 1.327079f, 2.677950f, - -2.369603f, -22.438606f, 1.295039f, -4.309244f, -6.401002f, 0.194309f, -2.196638f, 15.858343f, 6.752327f, -6.119870f, 1.303229f, -0.311533f, - -4.383267f, 1.295039f, -37.935478f, 39.653362f, -15.988548f, -0.134974f, 6.192506f, 2.302801f, -5.721854f, 1.463135f, -1.312438f, -3.824724f, - 2.198855f, -4.309245f, 39.653366f, -92.374901f, 67.554337f, -3.709706f, -16.418154f, -5.289310f, -10.926604f, -3.034606f, 2.011261f, -3.425366f, - 0.019220f, -6.401002f, -15.988548f, 67.554329f, -118.435379f, 53.987152f, 0.083914f, 3.628703f, 11.506127f, -9.430386f, 3.335730f, 0.535830f, - -0.679426f, 0.194309f, -0.134974f, -3.709705f, 53.987152f, -103.065208f, 60.766655f, 5.174506f, 3.534084f, 1.888132f, -2.451842f, 0.595043f, - -2.574428f, -2.196638f, 6.192506f, -16.418154f, 0.083914f, 60.766647f, -77.825020f, -7.066206f, -9.501147f, -2.838846f, 2.729818f, 0.055436f, - 5.400897f, 15.858343f, 2.302801f, -5.289312f, 3.628702f, 5.174504f, -7.066205f, -51.364357f, -39.811016f, -5.072917f, 2.924570f, 10.896112f, - 1.071412f, 6.752328f, -5.721853f, -10.926604f, 11.506124f, 3.534082f, -9.501149f, -39.811012f, -93.637161f, 18.029125f, 2.729363f, -18.075464f, - 0.106908f, -6.119870f, 1.463135f, -3.034606f, -9.430385f, 1.888131f, -2.838846f, -5.072917f, 18.029125f, -28.455194f, 2.956357f, 16.863293f, - 1.327079f, 1.303229f, -1.312438f, 2.011261f, 3.335730f, -2.451841f, 2.729818f, 2.924570f, 2.729363f, 2.956357f, -10.622586f, -6.668186f, - 2.677950f, -0.311532f, -3.824724f, -3.425365f, 0.535831f, 0.595042f, 0.055436f, 10.896112f, -18.075462f, 16.863293f, -6.668186f, -47.191391f, - -9.240052f, 2.899430f, -1.061725f, -1.878852f, 1.384787f, -0.341924f, 0.387138f, -3.050452f, -34.497913f, 0.665648f, 3.172123f, 5.710633f, - 2.899430f, -28.464540f, -2.599636f, 2.343385f, -2.987666f, 2.706673f, 0.826991f, 8.178236f, 58.632381f, -6.619084f, -22.678297f, -7.513733f, - -1.061725f, -2.599636f, -168.556702f, 81.834229f, 2.535699f, 32.237877f, 3.761089f, 12.106804f, 80.076279f, -79.117699f, 15.459833f, 34.635460f, - -1.878852f, 2.343384f, 81.834229f, -199.355972f, 64.456390f, 2.859692f, 17.605833f, 14.360981f, 8.356211f, 15.654006f, 43.245403f, 35.328991f, - 1.384787f, -2.987666f, 2.535698f, 64.456375f, -197.841049f, 46.107910f, 19.035957f, 10.296391f, -4.554988f, 45.390419f, 10.640046f, 17.738880f, - -0.341924f, 2.706673f, 32.237885f, 2.859688f, 46.107910f, -193.370590f, 74.545746f, 13.889868f, 120.411064f, 69.282364f, 1.826012f, 8.071488f, - 0.387138f, 0.826990f, 3.761087f, 17.605829f, 19.035957f, 74.545746f, -173.431549f, -5.219500f, 77.031425f, 112.113403f, -0.166995f, 3.456159f, - -3.050452f, 8.178238f, 12.106802f, 14.360980f, 10.296390f, 13.889872f, -5.219500f, -66.011856f, -245.560532f, -53.745152f, -21.376526f, 7.093097f, - -34.497917f, 58.632385f, 80.076279f, 8.356211f, -4.554988f, 120.411072f, 77.031425f, -245.560532f, -12485.017578f, -211.927429f, 791.254944f, -708.115784f, - 0.665648f, -6.619084f, -79.117699f, 15.654002f, 45.390419f, 69.282356f, 112.113403f, -53.745152f, -211.927429f, -775.154602f, -7.915978f, 73.130432f, - 3.172123f, -22.678297f, 15.459837f, 43.245403f, 10.640046f, 1.826011f, -0.166995f, -21.376526f, 791.254944f, -7.915982f, -312.138367f, -76.008308f, - 5.710633f, -7.513731f, 34.635460f, 35.328983f, 17.738880f, 8.071489f, 3.456159f, 7.093094f, -708.115784f, 73.130432f, -76.008293f, -469.943726f -}; -#endif const Word32 invV_music_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = { /*Q10*/ @@ -1283,28 +729,11 @@ const Word32 invV_music_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = 3248, -23223, 15831, 44283, 10895, 1870, -171, -21890, 810245, -8106, -319630, -77833, 5848, -7694, 35467, 36177, 18165, 8265, 3539, 7263, -725111, 74886, -77832, -481222 }; -#ifndef IVAS_FLOAT_FIXED -const float lvm_music[N_MIXTURES] = -{ - 27.932661f, 30.347250f, 34.528702f, 31.239647f, 20.447638f, 33.589111f -}; -#endif const Word32 lvm_music_fx[N_MIXTURES] = { /*Q10*/ 28603, 31076, 35357, 31989, 20938, 34395 }; -#ifndef IVAS_FLOAT_FIXED -const float m_noise[N_MIXTURES*N_FEATURES] = -{ - 0.452427f, 0.570086f, 0.242006f, 0.342721f, 0.403700f, 0.415107f, 0.444218f, 0.438761f, 0.034564f, 0.893050f, 0.819168f, 0.404974f, - 0.436768f, 0.457530f, 0.286204f, 0.393398f, 0.429530f, 0.444983f, 0.474495f, 0.377982f, 0.032033f, 0.980933f, 0.864315f, 0.377762f, - 0.554771f, 0.507113f, 0.244596f, 0.401393f, 0.425160f, 0.441338f, 0.467793f, 0.361573f, 0.031537f, 0.971703f, 0.866892f, 0.372985f, - 0.482864f, 0.545745f, 0.098616f, 0.246756f, 0.304649f, 0.303124f, 0.352083f, 0.363268f, 0.031057f, 0.901759f, 0.838419f, 0.339094f, - 0.421798f, 0.491610f, 0.266544f, 0.367277f, 0.407442f, 0.415130f, 0.458496f, 0.395402f, 0.035484f, 0.951506f, 0.861898f, 0.362091f, - 0.422524f, 0.475384f, 0.321804f, 0.436169f, 0.468526f, 0.481682f, 0.505572f, 0.389095f, 0.048487f, 0.967269f, 0.878799f, 0.409561f -}; -#endif const Word16 m_noise_fx[N_MIXTURES*N_FEATURES] = { /*Q15*/ @@ -1315,83 +744,6 @@ const Word16 m_noise_fx[N_MIXTURES*N_FEATURES] = 13821, 16109, 8734, 12035, 13351, 13603, 15024, 12957, 1163, 31179, 28243, 11865, 13845, 15577, 10545, 14292, 15353, 15784, 16567, 12750, 1589, 31695, 28796, 13420 }; -#ifndef IVAS_FLOAT_FIXED -const float invV_noise[N_MIXTURES*N_FEATURES*N_FEATURES] = -{ - -10.867715f, -0.756548f, -0.787901f, 4.638586f, -4.208551f, -1.593690f, 1.654504f, 0.517274f, -24.544769f, -2.342500f, 1.593914f, 1.892730f, - -0.756548f, -42.676064f, -5.171525f, -22.601748f, -3.989791f, -1.960918f, 9.223408f, 12.652583f, 16.718012f, 10.374084f, -17.742804f, -14.035854f, - -0.787901f, -5.171525f, -115.159836f, 77.010605f, -22.974529f, 22.149885f, -7.457938f, 51.154774f, 20.176580f, -1.104116f, 17.582054f, -18.231829f, - 4.638585f, -22.601746f, 77.010605f, -162.083023f, 69.046974f, -0.931657f, 9.922201f, 6.555853f, 49.297676f, 18.854517f, -9.951534f, 16.527628f, - -4.208551f, -3.989791f, -22.974525f, 69.046974f, -181.796692f, 112.212860f, -28.314665f, 9.765093f, 17.263042f, -17.941118f, -20.316977f, -12.281874f, - -1.593690f, -1.960918f, 22.149881f, -0.931659f, 112.212860f, -230.312469f, 120.808189f, -3.664834f, 21.109715f, 8.984108f, 15.273976f, -10.366921f, - 1.654504f, 9.223406f, -7.457942f, 9.922205f, -28.314672f, 120.808205f, -152.423096f, -1.527340f, -7.447964f, 5.038412f, 13.851591f, -12.278207f, - 0.517274f, 12.652583f, 51.154770f, 6.555853f, 9.765094f, -3.664836f, -1.527341f, -113.809120f, -127.203827f, -2.824038f, -50.058937f, -1.399267f, - -24.544767f, 16.718014f, 20.176580f, 49.297676f, 17.263042f, 21.109715f, -7.447963f, -127.203827f, -6696.807617f, -22.621326f, 415.747192f, -168.268478f, - -2.342500f, 10.374086f, -1.104114f, 18.854517f, -17.941120f, 8.984108f, 5.038413f, -2.824039f, -22.621326f, -153.911545f, 9.088697f, 20.155067f, - 1.593914f, -17.742804f, 17.582056f, -9.951534f, -20.316977f, 15.273976f, 13.851592f, -50.058945f, 415.747162f, 9.088697f, -180.485260f, -2.179248f, - 1.892730f, -14.035856f, -18.231823f, 16.527628f, -12.281875f, -10.366921f, -12.278206f, -1.399268f, -168.268478f, 20.155067f, -2.179248f, -92.283646f, - -23.031761f, -1.252800f, 2.168407f, 5.677273f, -1.038399f, -5.394459f, 4.921468f, -0.398360f, -7.562253f, 64.160614f, -4.832063f, 1.192536f, - -1.252800f, -99.841995f, 18.003206f, -17.730101f, -6.070672f, 16.703362f, -1.826001f, 24.508341f, 95.143112f, 31.486519f, -75.776428f, -4.459583f, - 2.168407f, 18.003206f, -298.278900f, 136.582794f, 23.557480f, 32.080963f, -44.544701f, 44.470726f, 121.132362f, 294.113434f, -22.118645f, 3.540136f, - 5.677273f, -17.730099f, 136.582779f, -552.121826f, 236.890076f, 45.754177f, 49.528828f, -18.333956f, -155.456558f, 137.723495f, 87.803368f, 9.539282f, - -1.038398f, -6.070671f, 23.557480f, 236.890076f, -779.760498f, 250.522018f, 101.655136f, 9.155396f, -82.543655f, -398.953156f, 95.902740f, 4.389515f, - -5.394459f, 16.703358f, 32.080971f, 45.754185f, 250.522049f, -825.768005f, 305.349487f, -6.825818f, 49.064461f, -530.656738f, -41.630035f, 0.097057f, - 4.921468f, -1.825999f, -44.544685f, 49.528828f, 101.655106f, 305.349457f, -714.934082f, 14.071314f, 81.227341f, -137.562592f, -2.118532f, -2.266444f, - -0.398360f, 24.508341f, 44.470741f, -18.333960f, 9.155393f, -6.825818f, 14.071318f, -306.676453f, 267.131439f, -29.354313f, -247.414047f, -3.381219f, - -7.562254f, 95.143112f, 121.132362f, -155.456558f, -82.543648f, 49.064457f, 81.227341f, 267.131439f, -18849.244141f, -929.838013f, 3582.389648f, -91.670364f, - 64.160622f, 31.486523f, 294.113434f, 137.723495f, -398.953186f, -530.656738f, -137.562607f, -29.354321f, -929.838013f, -15657.494141f, -160.551666f, -23.622292f, - -4.832063f, -75.776428f, -22.118641f, 87.803375f, 95.902733f, -41.630043f, -2.118535f, -247.414047f, 3582.389648f, -160.551666f, -2443.248535f, -102.662750f, - 1.192536f, -4.459581f, 3.540133f, 9.539283f, 4.389517f, 0.097059f, -2.266439f, -3.381226f, -91.670372f, -23.622292f, -102.662750f, -246.260574f, - -11.285410f, 5.316821f, 1.028375f, 1.780153f, -1.713055f, -6.356722f, 3.452291f, -0.472106f, 5.616539f, 22.361168f, -4.266212f, 2.444066f, - 5.316821f, -59.978729f, -45.510380f, 0.510493f, -4.121831f, 5.250934f, -14.358817f, 2.281706f, 4.310630f, 4.492869f, 17.377964f, 5.232576f, - 1.028376f, -45.510380f, -192.404053f, 60.491817f, 29.311884f, 10.877782f, -13.830601f, 4.475446f, 14.358991f, 170.638504f, 103.112320f, 3.708024f, - 1.780153f, 0.510493f, 60.491817f, -566.125488f, 303.482666f, -24.292496f, -8.399674f, -1.485864f, -37.162815f, -301.527344f, 10.013409f, 11.255829f, - -1.713055f, -4.121831f, 29.311880f, 303.482666f, -852.739014f, 287.208618f, 7.622868f, 2.283498f, -27.422876f, -496.049957f, -5.396815f, -1.631967f, - -6.356722f, 5.250934f, 10.877782f, -24.292484f, 287.208618f, -723.304810f, 301.939606f, -18.888754f, -49.648453f, -140.429428f, 26.881662f, 4.222802f, - 3.452292f, -14.358817f, -13.830603f, -8.399690f, 7.622864f, 301.939575f, -496.315796f, 24.400175f, 203.557098f, -224.619278f, -47.202961f, -9.425015f, - -0.472106f, 2.281706f, 4.475447f, -1.485866f, 2.283498f, -18.888754f, 24.400175f, -354.005493f, 136.772644f, -115.911537f, -131.393005f, 0.959444f, - 5.616539f, 4.310630f, 14.358991f, -37.162819f, -27.422880f, -49.648449f, 203.557098f, 136.772644f, -20332.845703f, -321.084869f, 3009.444580f, -97.580765f, - 22.361168f, 4.492869f, 170.638519f, -301.527344f, -496.049957f, -140.429428f, -224.619293f, -115.911537f, -321.084839f, -7067.310059f, -220.679733f, -46.764927f, - -4.266212f, 17.377964f, 103.112320f, 10.013409f, -5.396815f, 26.881662f, -47.202957f, -131.393005f, 3009.444336f, -220.679733f, -2442.017334f, -122.001373f, - 2.444066f, 5.232576f, 3.708023f, 11.255831f, -1.631966f, 4.222802f, -9.425015f, 0.959446f, -97.580765f, -46.764931f, -122.001373f, -270.966095f, - -14.192688f, 3.186916f, -7.950537f, 12.989626f, 5.455102f, 1.765226f, -5.165048f, 0.461338f, 7.198293f, -20.877787f, -2.402384f, 0.581967f, - 3.186916f, -44.923344f, -55.269123f, 8.982286f, -0.746719f, 13.665676f, 5.123918f, 2.567272f, -14.412151f, -21.068356f, 5.512080f, 3.727387f, - -7.950538f, -55.269123f, -874.676270f, 396.753632f, -241.704224f, 70.721024f, -240.685715f, 31.769787f, -186.425156f, -72.526421f, 58.346741f, 10.030197f, - 12.989626f, 8.982285f, 396.753632f, -538.253601f, 134.091171f, 33.957142f, -5.240913f, 40.302223f, 65.792999f, 256.190460f, 41.462269f, 59.464478f, - 5.455101f, -0.746719f, -241.704254f, 134.091171f, -942.252197f, 384.468231f, 36.093376f, 5.026894f, 111.673508f, 64.876976f, -19.179228f, 18.067732f, - 1.765226f, 13.665678f, 70.721085f, 33.957142f, 384.468231f, -885.075134f, 358.333008f, 13.728846f, 74.583847f, 277.755707f, 15.872023f, 32.199970f, - -5.165048f, 5.123920f, -240.685776f, -5.240921f, 36.093372f, 358.333008f, -694.631653f, 22.914997f, 82.867088f, 154.286697f, 2.264358f, 21.074474f, - 0.461338f, 2.567272f, 31.769791f, 40.302223f, 5.026892f, 13.728846f, 22.915001f, -341.417511f, -72.276520f, -87.553932f, -17.271832f, 7.437448f, - 7.198294f, -14.412151f, -186.425171f, 65.792999f, 111.673508f, 74.583847f, 82.867088f, -72.276520f, -16628.691406f, -258.116119f, 387.521759f, -260.230133f, - -20.877787f, -21.068354f, -72.526451f, 256.190460f, 64.876984f, 277.755707f, 154.286697f, -87.553932f, -258.116089f, -851.111816f, 3.469927f, 2.253677f, - -2.402384f, 5.512080f, 58.346741f, 41.462273f, -19.179226f, 15.872023f, 2.264359f, -17.271832f, 387.521759f, 3.469929f, -327.105011f, -45.187340f, - 0.581967f, 3.727389f, 10.030209f, 59.464478f, 18.067736f, 32.199970f, 21.074471f, 7.437444f, -260.230133f, 2.253681f, -45.187363f, -348.881165f, - -20.546539f, -1.232953f, -6.539483f, 7.977976f, -1.242327f, -4.323449f, 4.044850f, -8.261212f, -61.714569f, -16.814053f, 0.693824f, 2.217177f, - -1.232953f, -81.245918f, -33.514919f, -26.628014f, 2.160939f, -0.234839f, -0.764257f, 21.764839f, 133.689529f, 9.364232f, -27.287352f, -6.621866f, - -6.539483f, -33.514919f, -321.563904f, 105.228661f, 0.660729f, -32.550903f, -45.134315f, 42.045963f, -200.154724f, -42.022831f, 200.115005f, 19.959410f, - 7.977976f, -26.628016f, 105.228653f, -362.669098f, 100.723396f, 10.423860f, 45.250904f, -3.221930f, -63.687748f, -41.052856f, -5.156573f, 12.700191f, - -1.242327f, 2.160941f, 0.660730f, 100.723396f, -410.276917f, 189.899841f, 1.538413f, 21.637842f, -26.361103f, 35.868237f, 46.390850f, 13.527671f, - -4.323449f, -0.234840f, -32.550911f, 10.423860f, 189.899841f, -359.953278f, 149.268143f, 13.839684f, 104.534042f, 43.236813f, -23.356220f, -8.712662f, - 4.044850f, -0.764257f, -45.134308f, 45.250904f, 1.538413f, 149.268143f, -274.089874f, -8.017480f, 39.217266f, 23.817112f, 13.071558f, 8.212641f, - -8.261212f, 21.764839f, 42.045967f, -3.221937f, 21.637842f, 13.839684f, -8.017480f, -250.062653f, 77.902710f, -1.225836f, -98.802437f, 0.740895f, - -61.714565f, 133.689514f, -200.154709f, -63.687748f, -26.361105f, 104.534027f, 39.217266f, 77.902695f, -12793.175781f, 257.379974f, 1953.936523f, -236.987503f, - -16.814053f, 9.364232f, -42.022831f, -41.052856f, 35.868237f, 43.236813f, 23.817108f, -1.225832f, 257.379974f, -1194.391846f, -211.503952f, -22.654963f, - 0.693823f, -27.287352f, 200.115005f, -5.156573f, 46.390850f, -23.356216f, 13.071561f, -98.802437f, 1953.936523f, -211.503983f, -1273.349854f, -88.061317f, - 2.217178f, -6.621865f, 19.959414f, 12.700191f, 13.527678f, -8.712662f, 8.212641f, 0.740895f, -236.987518f, -22.654963f, -88.061317f, -364.010010f, - -23.764925f, -0.313664f, -1.392676f, 1.488295f, 1.913436f, -4.066601f, 6.848008f, -3.074351f, -7.675101f, 9.171298f, 3.117799f, 2.142688f, - -0.313664f, -88.759735f, -8.855761f, -26.637909f, 5.178853f, 10.666278f, 2.244489f, 21.984133f, 16.797499f, 4.685480f, 13.074540f, -2.708393f, - -1.392676f, -8.855759f, -175.915054f, 83.474174f, 41.251793f, 14.369057f, -12.605553f, 33.395245f, 65.670242f, 39.710125f, 36.098553f, -9.562349f, - 1.488295f, -26.637909f, 83.474182f, -383.095245f, 216.683212f, 12.198986f, 32.383698f, -14.022625f, 7.763216f, -100.727264f, -28.525242f, -5.235438f, - 1.913436f, 5.178854f, 41.251801f, 216.683212f, -586.877808f, 253.507355f, 29.591257f, 7.710151f, -31.813087f, -112.656593f, 20.279724f, -7.102311f, - -4.066601f, 10.666278f, 14.369057f, 12.198978f, 253.507355f, -597.128113f, 296.967621f, 6.174671f, -41.961372f, -36.203259f, -20.597570f, -14.877533f, - 6.848009f, 2.244488f, -12.605548f, 32.383701f, 29.591269f, 296.967590f, -456.794678f, 26.321606f, -34.872383f, 28.424320f, 34.979023f, -8.548788f, - -3.074351f, 21.984133f, 33.395245f, -14.022625f, 7.710150f, 6.174670f, 26.321606f, -265.545593f, 2.918175f, 0.831582f, -125.449432f, -11.139709f, - -7.675101f, 16.797503f, 65.670242f, 7.763219f, -31.813070f, -41.961380f, -34.872383f, 2.918175f, -1731.894409f, -210.794144f, 739.213074f, -97.542229f, - 9.171299f, 4.685479f, 39.710129f, -100.727264f, -112.656593f, -36.203262f, 28.424320f, 0.831581f, -210.794113f, -2326.243652f, -106.282173f, 1.036536f, - 3.117799f, 13.074540f, 36.098553f, -28.525242f, 20.279724f, -20.597570f, 34.979023f, -125.449432f, 739.213074f, -106.282112f, -1878.532593f, -113.480858f, - 2.142687f, -2.708396f, -9.562349f, -5.235439f, -7.102309f, -14.877532f, -8.548790f, -11.139709f, -97.542229f, 1.036536f, -113.480865f, -101.406532f -}; -#endif const Word32 invV_noise_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = { /*Q10*/ @@ -1468,12 +820,6 @@ const Word32 invV_noise_fx[N_MIXTURES*N_FEATURES*N_FEATURES] = 3193, 13388, 36965, -29210, 20766, -21092, 35819, -128460, 756954, -108833, -1923617, -116204, 2194, -2773, -9792, -5361, -7273, -15235, -8754, -11407, -99883, 1061, -116204, -103840 }; -#ifndef IVAS_FLOAT_FIXED -const float lvm_noise[N_MIXTURES] = -{ - 28.723963f, 41.180500f, 39.296734f, 38.508724f, 37.029205f, 35.496319f -}; -#endif const Word32 lvm_noise_fx[N_MIXTURES] = { /*Q10*/ @@ -1490,62 +836,6 @@ const int16_t mel_fb_len[NB_MEL_BANDS] = { 1, 2, 2, 2, 1, 2, 3, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 7, 7, 7, 8, 8, 9, 9, 9, 11, 12, 12, 12, 13, 14, 15, 16 }; -#ifndef IVAS_FLOAT_FIXED -const float mel_fb[246] = -{ - 1.21713338f, 0.78286662f, 0.65362656f, 1.34637344f, 0.27740994f, - 1.72259006f, 0.06297006f, 1.93702994f, 1.98967602f, 0.04060794f, - 0.01032398f, 1.95939206f, 0.20171708f, 1.79828292f, 0.46121084f, - 1.53878916f, 0.80909416f, 1.19090584f, 1.23682173f, 0.76317827f, - 1.73703053f, 0.30333129f, 0.26296947f, 1.69666871f, 0.93014405f, - 1.06985595f, 1.61256694f, 0.34627063f, 0.38743306f, 1.65372937f, - 1.12741246f, 0.87258754f, 1.95256612f, 0.81866363f, 0.04743388f, - 1.18133637f, 1.72294702f, 0.66292792f, 0.27705298f, 1.33707208f, - 1.63635355f, 0.64117786f, 0.36364645f, 1.35882214f, 1.67553701f, - 0.73772833f, 0.32446299f, 1.26227167f, 1.82619229f, 0.93949686f, - 0.076324f, 0.17380771f, 1.06050314f, 1.923676f, 1.23545786f, - 0.4157745f, 0.76454214f, 1.5842255f, 1.61623283f, 0.83586669f, - 0.07377779f, 0.38376717f, 1.16413331f, 1.92622221f, 1.32912953f, - 0.60114148f, 0.67087047f, 1.39885852f, 1.88908443f, 1.19227603f, - 0.51007685f, 0.11091557f, 0.80772397f, 1.48992315f, 1.84188687f, - 1.18714227f, 0.54531261f, 0.15811313f, 0.81285773f, 1.45468739f, - 1.91589823f, 1.29842793f, 0.69245681f, 0.09756439f, 0.08410177f, - 0.70157207f, 1.30754319f, 1.90243561f, 1.51335285f, 0.9394454f, - 0.37548486f, 0.48664715f, 1.0605546f, 1.62451514f, 1.82113229f, - 1.2760658f, 0.7399794f, 0.21258197f, 0.17886771f, 0.7239342f, - 1.2600206f, 1.78741803f, 1.69359635f, 1.18275841f, 0.67981626f, - 0.18452955f, 0.30640365f, 0.81724159f, 1.32018374f, 1.81547045f, - 1.69666871f, 1.21601434f, 0.74235665f, 0.27549486f, 0.30333129f, - 0.78398566f, 1.25764335f, 1.72450514f, 1.81523671f, 1.36139799f, - 0.91380209f, 0.4722796f, 0.03666789f, 0.18476329f, 0.63860201f, - 1.08619791f, 1.5277204f, 1.96333211f, 1.60681079f, 1.18255825f, - 0.763766f, 0.35029527f, 0.39318921f, 0.81744175f, 1.236234f, - 1.64970473f, 1.94201251f, 1.53878916f, 1.14050133f, 0.74702969f, - 0.35825913f, 0.05798749f, 0.46121084f, 0.85949867f, 1.25297031f, - 1.64174087f, 1.97407865f, 1.59438112f, 1.21906313f, 0.8480248f, - 0.48116964f, 0.11840435f, 0.02592135f, 0.40561888f, 0.78093687f, - 1.1519752f, 1.51883036f, 1.88159565f, 1.75963877f, 1.40478565f, - 1.05376058f, 0.70648184f, 0.36287032f, 0.02284937f, 0.24036123f, - 0.59521435f, 0.94623942f, 1.29351816f, 1.63712968f, 1.97715063f, - 1.68634473f, 1.35328441f, 1.02359863f, 0.69721967f, 0.37408188f, - 0.05412149f, 0.31365527f, 0.64671559f, 0.97640137f, 1.30278033f, - 1.62591812f, 1.94587851f, 1.73727665f, 1.42348724f, 1.11269492f, - 0.80484297f, 0.49987627f, 0.19774124f, 0.26272335f, 0.57651276f, - 0.88730508f, 1.19515703f, 1.50012373f, 1.80225876f, 1.89838578f, - 1.60175922f, 1.30781224f, 1.01649688f, 0.72776643f, 0.44157541f, - 0.15787955f, 0.10161422f, 0.39824078f, 0.69218776f, 0.98350312f, - 1.27223357f, 1.55842459f, 1.84212045f, 1.87663572f, 1.59780189f, - 1.32133711f, 1.04720147f, 0.77535604f, 0.50576287f, 0.23838496f, - 0.12336428f, 0.40219811f, 0.67866289f, 0.95279853f, 1.22464396f, - 1.49423713f, 1.76161504f, 1.97318619f, 1.71013133f, 1.449186f, - 1.19031663f, 0.93349044f, 0.67867544f, 0.42584038f, 0.17495472f, - 0.02681381f, 0.28986867f, 0.550814f, 0.80968337f, 1.06650956f, - 1.32132456f, 1.57415962f, 1.82504528f, 1.92598864f, 1.67891297f, - 1.43369924f, 1.19031958f, 0.94874676f, 0.70895416f, 0.47091573f, - 0.23460598f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 mel_fb_fx[246] = { 1306887040, 840596608, 701826176, 1445657472, 297866656, 1849617024, 67613584, 2079870080, @@ -1580,77 +870,6 @@ const Word32 mel_fb_fx[246] = 591432000, 869390912, 1145155968, 1418761472, 1690241024, 1959627392, 2068014592, 1802719104, 1539422848, 1278095872, 1018709056, 761233728, 505641920, 251906256, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float dct_mtx[NB_MEL_BANDS * NB_MEL_COEF] = -{ - 2.23434405e-01f, 2.22056858e-01f, 2.19310256e-01f, 2.15211533e-01f, 2.09785960e-01f, 2.03066987e-01f, 1.95096038e-01f, 1.85922257e-01f, 1.75602204e-01f, 1.64199505e-01f, 1.51784461e-01f, 1.38433616e-01f, - 1.24229281e-01f, 1.09259031e-01f, 9.36151633e-02f, 7.73941268e-02f, 6.06959298e-02f, 4.36235222e-02f, 2.62821611e-02f, 8.77876168e-03f, -8.77876168e-03f, -2.62821611e-02f, -4.36235222e-02f, -6.06959298e-02f, - -7.73941268e-02f, -9.36151633e-02f, -1.09259031e-01f, -1.24229281e-01f, -1.38433616e-01f, -1.51784461e-01f, -1.64199505e-01f, -1.75602204e-01f, -1.85922257e-01f, -1.95096038e-01f, -2.03066987e-01f, -2.09785960e-01f, - -2.15211533e-01f, -2.19310256e-01f, -2.22056858e-01f, -2.23434405e-01f, - - 2.22917493e-01f, 2.17428524e-01f, 2.06585744e-01f, 1.90656137e-01f, 1.70031943e-01f, 1.45220998e-01f, 1.16834231e-01f, 8.55706169e-02f, 5.21999703e-02f, 1.75439872e-02f, -1.75439872e-02f, -5.21999703e-02f, - -8.55706169e-02f, -1.16834231e-01f, -1.45220998e-01f, -1.70031943e-01f, -1.90656137e-01f, -2.06585744e-01f, -2.17428524e-01f, -2.22917493e-01f, -2.22917493e-01f, -2.17428524e-01f, -2.06585744e-01f, -1.90656137e-01f, - -1.70031943e-01f, -1.45220998e-01f, -1.16834231e-01f, -8.55706169e-02f, -5.21999703e-02f, -1.75439872e-02f, 1.75439872e-02f, 5.21999703e-02f, 8.55706169e-02f, 1.16834231e-01f, 1.45220998e-01f, 1.70031943e-01f, - 1.90656137e-01f, 2.06585744e-01f, 2.17428524e-01f, 2.22917493e-01f, - - 2.22056858e-01f, 2.09785960e-01f, 1.85922257e-01f, 1.51784461e-01f, 1.09259031e-01f, 6.06959298e-02f, 8.77876168e-03f, -4.36235222e-02f, -9.36151633e-02f, -1.38433616e-01f, -1.75602204e-01f, -2.03066987e-01f, - -2.19310256e-01f, -2.23434405e-01f, -2.15211533e-01f, -1.95096038e-01f, -1.64199505e-01f, -1.24229281e-01f, -7.73941268e-02f, -2.62821611e-02f, 2.62821611e-02f, 7.73941268e-02f, 1.24229281e-01f, 1.64199505e-01f, - 1.95096038e-01f, 2.15211533e-01f, 2.23434405e-01f, 2.19310256e-01f, 2.03066987e-01f, 1.75602204e-01f, 1.38433616e-01f, 9.36151633e-02f, 4.36235222e-02f, -8.77876168e-03f, -6.06959298e-02f, -1.09259031e-01f, - -1.51784461e-01f, -1.85922257e-01f, -2.09785960e-01f, -2.22056858e-01f, - - 2.20853827e-01f, 1.99235116e-01f, 1.58113883e-01f, 1.01515362e-01f, 3.49798098e-02f, -3.49798098e-02f, -1.01515362e-01f, -1.58113883e-01f, -1.99235116e-01f, -2.20853827e-01f, -2.20853827e-01f, -1.99235116e-01f, - -1.58113883e-01f, -1.01515362e-01f, -3.49798098e-02f, 3.49798098e-02f, 1.01515362e-01f, 1.58113883e-01f, 1.99235116e-01f, 2.20853827e-01f, 2.20853827e-01f, 1.99235116e-01f, 1.58113883e-01f, 1.01515362e-01f, - 3.49798098e-02f, -3.49798098e-02f, -1.01515362e-01f, -1.58113883e-01f, -1.99235116e-01f, -2.20853827e-01f, -2.20853827e-01f, -1.99235116e-01f, -1.58113883e-01f, -1.01515362e-01f, -3.49798098e-02f, 3.49798098e-02f, - 1.01515362e-01f, 1.58113883e-01f, 1.99235116e-01f, 2.20853827e-01f, - - 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, -2.19310256e-01f, -1.85922257e-01f, -1.24229281e-01f, -4.36235222e-02f, - 4.36235222e-02f, 1.24229281e-01f, 1.85922257e-01f, 2.19310256e-01f, 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, - -2.19310256e-01f, -1.85922257e-01f, -1.24229281e-01f, -4.36235222e-02f, 4.36235222e-02f, 1.24229281e-01f, 1.85922257e-01f, 2.19310256e-01f, 2.19310256e-01f, 1.85922257e-01f, 1.24229281e-01f, 4.36235222e-02f, - -4.36235222e-02f, -1.24229281e-01f, -1.85922257e-01f, -2.19310256e-01f, - - 2.17428524e-01f, 1.70031943e-01f, 8.55706169e-02f, -1.75439872e-02f, -1.16834231e-01f, -1.90656137e-01f, -2.22917493e-01f, -2.06585744e-01f, -1.45220998e-01f, -5.21999703e-02f, 5.21999703e-02f, 1.45220998e-01f, - 2.06585744e-01f, 2.22917493e-01f, 1.90656137e-01f, 1.16834231e-01f, 1.75439872e-02f, -8.55706169e-02f, -1.70031943e-01f, -2.17428524e-01f, -2.17428524e-01f, -1.70031943e-01f, -8.55706169e-02f, 1.75439872e-02f, - 1.16834231e-01f, 1.90656137e-01f, 2.22917493e-01f, 2.06585744e-01f, 1.45220998e-01f, 5.21999703e-02f, -5.21999703e-02f, -1.45220998e-01f, -2.06585744e-01f, -2.22917493e-01f, -1.90656137e-01f, -1.16834231e-01f, - -1.75439872e-02f, 8.55706169e-02f, 1.70031943e-01f, 2.17428524e-01f, - - 2.15211533e-01f, 1.51784461e-01f, 4.36235222e-02f, -7.73941268e-02f, -1.75602204e-01f, -2.22056858e-01f, -2.03066987e-01f, -1.24229281e-01f, -8.77876168e-03f, 1.09259031e-01f, 1.95096038e-01f, 2.23434405e-01f, - 1.85922257e-01f, 9.36151633e-02f, -2.62821611e-02f, -1.38433616e-01f, -2.09785960e-01f, -2.19310256e-01f, -1.64199505e-01f, -6.06959298e-02f, 6.06959298e-02f, 1.64199505e-01f, 2.19310256e-01f, 2.09785960e-01f, - 1.38433616e-01f, 2.62821611e-02f, -9.36151633e-02f, -1.85922257e-01f, -2.23434405e-01f, -1.95096038e-01f, -1.09259031e-01f, 8.77876168e-03f, 1.24229281e-01f, 2.03066987e-01f, 2.22056858e-01f, 1.75602204e-01f, - 7.73941268e-02f, -4.36235222e-02f, -1.51784461e-01f, -2.15211533e-01f, - - 2.12662702e-01f, 1.31432778e-01f, 1.36919675e-17f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, -4.10759024e-17f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, - 6.84598373e-17f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, -9.58437722e-17f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, 1.23227707e-16f, -1.31432778e-01f, - -2.12662702e-01f, -2.12662702e-01f, -1.31432778e-01f, 2.46593822e-16f, 1.31432778e-01f, 2.12662702e-01f, 2.12662702e-01f, 1.31432778e-01f, 5.75201041e-16f, -1.31432778e-01f, -2.12662702e-01f, -2.12662702e-01f, - -1.31432778e-01f, -6.02584976e-16f, 1.31432778e-01f, 2.12662702e-01f, - - 2.09785960e-01f, 1.09259031e-01f, -4.36235222e-02f, -1.75602204e-01f, -2.23434405e-01f, -1.64199505e-01f, -2.62821611e-02f, 1.24229281e-01f, 2.15211533e-01f, 2.03066987e-01f, 9.36151633e-02f, -6.06959298e-02f, - -1.85922257e-01f, -2.22056858e-01f, -1.51784461e-01f, -8.77876168e-03f, 1.38433616e-01f, 2.19310256e-01f, 1.95096038e-01f, 7.73941268e-02f, -7.73941268e-02f, -1.95096038e-01f, -2.19310256e-01f, -1.38433616e-01f, - 8.77876168e-03f, 1.51784461e-01f, 2.22056858e-01f, 1.85922257e-01f, 6.06959298e-02f, -9.36151633e-02f, -2.03066987e-01f, -2.15211533e-01f, -1.24229281e-01f, 2.62821611e-02f, 1.64199505e-01f, 2.23434405e-01f, - 1.75602204e-01f, 4.36235222e-02f, -1.09259031e-01f, -2.09785960e-01f, - - 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, - -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, - 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, 2.06585744e-01f, 8.55706169e-02f, -8.55706169e-02f, -2.06585744e-01f, - -2.06585744e-01f, -8.55706169e-02f, 8.55706169e-02f, 2.06585744e-01f, - - 2.03066987e-01f, 6.06959298e-02f, -1.24229281e-01f, -2.22056858e-01f, -1.64199505e-01f, 8.77876168e-03f, 1.75602204e-01f, 2.19310256e-01f, 1.09259031e-01f, -7.73941268e-02f, -2.09785960e-01f, -1.95096038e-01f, - -4.36235222e-02f, 1.38433616e-01f, 2.23434405e-01f, 1.51784461e-01f, -2.62821611e-02f, -1.85922257e-01f, -2.15211533e-01f, -9.36151633e-02f, 9.36151633e-02f, 2.15211533e-01f, 1.85922257e-01f, 2.62821611e-02f, - -1.51784461e-01f, -2.23434405e-01f, -1.38433616e-01f, 4.36235222e-02f, 1.95096038e-01f, 2.09785960e-01f, 7.73941268e-02f, -1.09259031e-01f, -2.19310256e-01f, -1.75602204e-01f, -8.77876168e-03f, 1.64199505e-01f, - 2.22056858e-01f, 1.24229281e-01f, -6.06959298e-02f, -2.03066987e-01f, - - 1.99235116e-01f, 3.49798098e-02f, -1.58113883e-01f, -2.20853827e-01f, -1.01515362e-01f, 1.01515362e-01f, 2.20853827e-01f, 1.58113883e-01f, -3.49798098e-02f, -1.99235116e-01f, -1.99235116e-01f, -3.49798098e-02f, - 1.58113883e-01f, 2.20853827e-01f, 1.01515362e-01f, -1.01515362e-01f, -2.20853827e-01f, -1.58113883e-01f, 3.49798098e-02f, 1.99235116e-01f, 1.99235116e-01f, 3.49798098e-02f, -1.58113883e-01f, -2.20853827e-01f, - -1.01515362e-01f, 1.01515362e-01f, 2.20853827e-01f, 1.58113883e-01f, -3.49798098e-02f, -1.99235116e-01f, -1.99235116e-01f, -3.49798098e-02f, 1.58113883e-01f, 2.20853827e-01f, 1.01515362e-01f, -1.01515362e-01f, - -2.20853827e-01f, -1.58113883e-01f, 3.49798098e-02f, 1.99235116e-01f, - - 1.95096038e-01f, 8.77876168e-03f, -1.85922257e-01f, -2.03066987e-01f, -2.62821611e-02f, 1.75602204e-01f, 2.09785960e-01f, 4.36235222e-02f, -1.64199505e-01f, -2.15211533e-01f, -6.06959298e-02f, 1.51784461e-01f, - 2.19310256e-01f, 7.73941268e-02f, -1.38433616e-01f, -2.22056858e-01f, -9.36151633e-02f, 1.24229281e-01f, 2.23434405e-01f, 1.09259031e-01f, -1.09259031e-01f, -2.23434405e-01f, -1.24229281e-01f, 9.36151633e-02f, - 2.22056858e-01f, 1.38433616e-01f, -7.73941268e-02f, -2.19310256e-01f, -1.51784461e-01f, 6.06959298e-02f, 2.15211533e-01f, 1.64199505e-01f, -4.36235222e-02f, -2.09785960e-01f, -1.75602204e-01f, 2.62821611e-02f, - 2.03066987e-01f, 1.85922257e-01f, -8.77876168e-03f, -1.95096038e-01f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 dct_mtx_fx[NB_MEL_BANDS * NB_MEL_COEF] = { //Q31 479821728, 476863456, 470965184, 462163232, 450511904, 436083040, 418965536, 399264992, @@ -1719,41 +938,6 @@ const Word32 dct_mtx_fx[NB_MEL_BANDS * NB_MEL_COEF] = 476863456, 297283936, -166202624, -470965184, -325954656, 130343520, 462163232, 352615744, -93680800, -450511904, -377102848, 56440512, 436083040, 399264992, -18852248, -418965536, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float SF[N_FEATURES*2] = -{ - 0.0048f, -0.0952f, - 1.0002f, 0, - 0.6226f, -0.0695f, - 0.5497f, -0.1265f, - 0.4963f, -0.2230f, - 0.5049f, -0.4103f, - 0.5069f, -0.5717f, - 0.0041f, 0, - 0.0022f, -0.0029f, - 0.0630f, 1.0015f, - 0.0684f, 0.9103f, - 0.1159f, -0.2931f -}; - -const float SF_8k[N_FEATURES*2] = -{ - 0.0041f, 0, - 0.8572f, 0.1020f, - 0.6739f, -0.1000f, - 0.6257f, -0.1678f, - 0.5495f, -0.2380f, - 0.5793f, -0.4646f, - 0.2502f, 0, - 0.0041f, 0, - 0.0020f, 0, - 0.0630f, 1.0015f, - 0.0598f, 0.8967f, - 0.0631f, 0 -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 thren_pg_fx[44] = {//Q14 1969251200, @@ -1801,35 +985,6 @@ const Word32 thren_pg_fx[44] = 4870, 3444, }; -#endif -#ifndef IVAS_FLOAT_FIXED -/* searching thresholds for quantization of peak gains */ -const float thren_pg[44] = -{ - 120193.5539509f, 101070.3286539f, - 84989.6770536f, 71467.5147680f, - 60096.7769755f, 50535.1643270f, - 42494.8385268f, 35733.7573840f, - 30048.3884877f, 25267.5821635f, - 19483.9693722f, 13777.2468675f, - 9741.9846861f, 6888.6234338f, - 4870.9923431f, 3444.3117169f, - 2435.4961715f, 1722.1558584f, - 1217.7480858f, 861.0779292f, - 608.8740429f, 430.5389646f, - 304.4370214f, 215.2694823f, - 152.2185107f, 107.6347412f, - 76.1092554f, 53.8173706f, - 38.0546277f, 26.9086853f, - 19.0273138f, 13.4543426f, - 9.5136569f, 6.7271713f, - 4.7568285f, 3.3635857f, - 2.3784142f, 1.6817928f, - 1.1892071f, 0.840896f, - 0.594604f, 0.420448f, - 0.297302f, 0.210224f -}; -#endif /* Huffmann coding - searching thresholds for quantization of peak gains */ const int16_t huffnorm_e[32] = { @@ -1890,51 +1045,6 @@ const int16_t hescode[8]= /*----------------------------------------------------------------------------------* * BWD *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -const float hann_window_320[BWD_TOTAL_WIDTH/2] = -{ - 0.0f, 0.000096984948331f, 0.000387902169007f, 0.000872638803658f, - 0.001551006803657f, 0.002422743003060f, 0.003487509220708f, 0.004744892391413f, - 0.006194404726209f, 0.007835483901579f, 0.009667493277608f, 0.011689722144956f, - 0.013901386000576f, 0.016301626852047f, 0.018889513550430f, 0.021664042151495f, - 0.024624136305188f, 0.027768647673197f, 0.031096356374430f, 0.034605971458262f, - 0.038296131405342f, 0.042165404655783f, 0.046212290164521f, 0.050435217983627f, - 0.054832549871356f, 0.059402579927684f, 0.064143535256096f, 0.069053576651361f, - 0.074130799313035f, 0.079373233584409f, 0.084778845716614f, 0.090345538657597f, - 0.096071152865649f, 0.101953467147178f, 0.107990199518396f, 0.114179008090596f, - 0.120517491978659f, 0.127003192232455f, 0.133633592790768f, 0.140406121457376f, - 0.147318150898908f, 0.154366999664091f, 0.161549933223991f, 0.168864165032848f, - 0.176306857609086f, 0.183875123636085f, 0.191566027082286f, 0.199376584340196f, - 0.207303765383847f, 0.215344494944262f, 0.223495653702478f, 0.231754079499652f, - 0.240116568563785f, 0.248579876752599f, 0.257140720812064f, 0.265795779650105f, - 0.274541695624985f, 0.283375075847868f, 0.292292493499057f, 0.301290489157390f, - 0.310365572142292f, 0.319514221867944f, 0.328732889209064f, 0.338017997877748f, - 0.347365945810858f, 0.356773106567405f, 0.366235830735390f, 0.375750447347553f, - 0.385313265305494f, 0.394920574811589f, 0.404568648808175f, 0.414253744423419f, - 0.423972104423331f, 0.433719958669339f, 0.443493525580883f, 0.453289013602435f, - 0.463102622674396f, 0.472930545707291f, 0.482768970058690f, 0.492614079012283f, - 0.502462053258538f, 0.512309072376361f, 0.522151316315189f, 0.531984966876945f, - 0.541806209197260f, 0.551611233225420f, 0.561396235202429f, 0.571157419136643f, - 0.580890998276382f, 0.590593196578969f, 0.600260250175597f, 0.609888408831494f, - 0.619473937400779f, 0.629013117275481f, 0.638502247828131f, 0.647937647847382f, - 0.657315656966103f, 0.666632637081372f, 0.675884973765851f, 0.685069077669957f, - 0.694181385914321f, 0.703218363471965f, 0.712176504539683f, 0.721052333898081f, - 0.729842408259752f, 0.738543317605065f, 0.747151686505047f, 0.755664175430844f, - 0.764077482049264f, 0.772388342503876f, 0.780593532681191f, 0.788689869461429f, - 0.796674211953372f, 0.804543462712845f, 0.812294568944333f, 0.819924523685287f, - 0.827430366972643f, 0.834809186991105f, 0.842058121202763f, 0.849174357457574f, - 0.856155135084319f, 0.862997745961565f, 0.869699535568266f, 0.876257904013544f, - 0.882670307045301f, 0.888934257037231f, 0.895047323953867f, 0.901007136293294f, - 0.906811382007145f, 0.912457809397536f, 0.917944227990593f, 0.923268509386220f, - 0.928428588083795f, 0.933422462283452f, 0.938248194662667f, 0.942903913127819f, - 0.947387811540448f, 0.951698150417930f, 0.955833257608292f, 0.959791528938907f, - 0.963571428838810f, 0.967171490934417f, 0.970590318618383f, 0.973826585591401f, - 0.976879036376732f, 0.979746486807249f, 0.982427824484824f, 0.984922009211872f, - 0.987228073394887f, 0.989345122419805f, 0.991272334999066f, 0.993008963490220f, - 0.994554334185968f, 0.995907847575523f, 0.997068978577180f, 0.998037276742018f, - 0.998812366428647f, 0.999393946948934f, 0.999781792684653f, 0.999975753175008f -}; -#endif const Word16 hann_window_320_fx[BWD_TOTAL_WIDTH / 2] = { 0, 1, 3, 7, 13, 20, 29, 39, diff --git a/lib_enc/rom_enc.h b/lib_enc/rom_enc.h index 457b2a0aa..8479d5b4b 100644 --- a/lib_enc/rom_enc.h +++ b/lib_enc/rom_enc.h @@ -45,25 +45,14 @@ /*----------------------------------------------------------------------------------* * General tables *----------------------------------------------------------------------------------*/ -extern const Word16 sqrt_han_window_fx[]; /* Half of the square root hanning window */ -extern const int16_t tipos[]; /* Starting points for pulse position search in Algebraic innovation codebook */ -#ifndef IVAS_FLOAT_FIXED -extern const float sqrt_han_window[]; /* Half of the square root hanning window */ -extern const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1]; -extern const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1]; -extern const float E_ROM_inter4_1[PIT_UP_SAMP * L_INTERPOL1 + 1]; -extern const float E_ROM_inter6_1[PIT_UP_SAMP6 * L_INTERPOL1 + 1]; -extern const float W_HIST[DTX_HIST_SIZE]; /* CNG & DTX - table for calculation of average excitation energy */ -#endif +extern const Word16 sqrt_han_window_fx[]; /* Half of the square root hanning window */ +extern const int16_t tipos[]; /* Starting points for pulse position search in Algebraic innovation codebook */ extern const Word16 W_HIST_FX[DTX_HIST_SIZE]; /* CNG & DTX - table for calculation of average excitation energy */ extern const Word16 W_HIST_S_FX[DTX_HIST_SIZE]; /* CNG & DTX - table for calculation of average excitation energy */ extern const int16_t bwd_start_bin[]; extern const int16_t bwd_end_bin[]; -extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ -#ifndef IVAS_FLOAT_FIXED -extern const float preemphCompensation[]; -#endif +extern const float h_fir[]; /* 2nd order fir filter for wsp, decimation by 2 */ extern const Word16 h_fir_fx[]; /* 2nd order fir filter for wsp, decimation by 2 */ extern const Word16 preemphCompensation_fx[]; @@ -98,37 +87,13 @@ extern const int16_t lsf_ind_numlevels[TCXLPC_IND_NUMSTAGES]; extern const int16_t lsf_unified_fit_model_nb[4][16]; extern const int16_t lsf_unified_fit_model_wb[4][16]; extern const int16_t lsf_unified_fit_model_wbhb[4][16]; -#ifndef IVAS_FLOAT_FIXED -extern const float Freq_Weight_Com[160]; -extern const float Freq_Weight_UV[160]; -#endif extern const Word32 Freq_Weight_Com_fx[160]; extern const Word32 Freq_Weight_UV_fx[160]; /*----------------------------------------------------------------------------------* * Speech/music classification *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float w_spmus[HANG_LEN][HANG_LEN]; -#endif extern const Word16 w_spmus_fx[HANG_LEN][HANG_LEN]; -#ifndef IVAS_FLOAT_FIXED -extern const float sm_means[]; -extern const float sm_scale[]; -extern const float hout_intervals[]; -extern const float bcox_add_cnst[N_SMC_FEATURES]; -extern const float bcox_lmbd[N_SMC_FEATURES]; -extern const float pca_mean_[]; -extern const float pca_components_[]; -extern const float weights_speech[]; -extern const float means_speech[]; -extern const float weights_music[]; -extern const float means_music[]; -extern const float weights_noise[]; -extern const float means_noise[]; -extern const float prec_chol_speech[]; -#endif -#ifdef IVAS_FLOAT_FIXED extern const Word32 pca_components_fx[]; extern const Word32 pca_mean_fx[]; extern const Word32 sm_means_fx[]; @@ -147,65 +112,22 @@ extern const Word32 dct_mtx_fx[]; extern const Word32 log_det_chol_speech_fx[]; // Q19 extern const Word32 log_det_chol_music_fx[]; // Q19 extern const Word32 log_det_chol_noise_fx[]; // Q19 -#endif -#ifndef IVAS_FLOAT_FIXED -extern const float log_det_chol_speech[]; -extern const float prec_chol_music[]; -extern const float log_det_chol_music[]; -extern const float prec_chol_noise[]; -extern const float log_det_chol_noise[]; - -extern const float m_speech[]; -extern const float invV_speech[]; -extern const float lvm_speech[]; -#endif extern const Word16 m_speech_fx[]; extern const Word32 invV_speech_fx[]; extern const Word32 lvm_speech_fx[]; -#ifdef IVAS_FLOAT_FIXED extern const Word32 prec_chol_speech_fx[]; extern const Word32 prec_chol_music_fx[]; extern const Word32 prec_chol_noise_fx[]; -#endif -#ifndef IVAS_FLOAT_FIXED -extern const float m_music[]; -extern const float invV_music[]; -extern const float lvm_music[]; -#endif extern const Word16 m_music_fx[]; extern const Word32 invV_music_fx[]; extern const Word32 lvm_music_fx[]; -#ifndef IVAS_FLOAT_FIXED -extern const float m_noise[]; -extern const float invV_noise[]; -extern const float lvm_noise[]; -#endif extern const Word16 m_noise_fx[]; extern const Word32 invV_noise_fx[]; extern const Word32 lvm_noise_fx[]; extern const int16_t mel_fb_start[]; extern const int16_t mel_fb_len[]; -#ifndef IVAS_FLOAT_FIXED -extern const float mel_fb[]; -extern const float dct_mtx[]; - -extern const float SF[]; -extern const float SF_8k[]; - -/*----------------------------------------------------------------------------------* - * SWB TBE - *----------------------------------------------------------------------------------*/ - -extern const float lpc_weights[]; - -/*----------------------------------------------------------------------------------* - * WB, SWB and FB bandwidth detector - *----------------------------------------------------------------------------------*/ - -extern const float hann_window_320[]; -#endif extern const Word16 hann_window_320_fx[]; /*----------------------------------------------------------------------------------* @@ -229,16 +151,6 @@ extern const complex_16 M_in_fix16[16]; extern const Word16 M_Wr_fix16[16]; extern const Word16 M_Wi_fix16[16]; extern const int16_t SP_CENTER_BAND_NUM_TAB[5]; -#ifndef IVAS_FLOAT_FIXED -extern const float M_Wr[16]; -extern const float M_i[8]; -extern const float M_inr[16]; -extern const float M_ini[16]; -extern const float M_r[8]; -extern const float M_Wi[16]; -extern const float VAD_DELTA1[5]; -extern const float VAD_DELTA2[5]; -#endif extern const int16_t NREGION_INDEX_NB[9]; extern const int16_t NREGION_INDEX_WB[13]; extern const int16_t NREGION_INDEX_SWB[16]; @@ -247,12 +159,6 @@ extern const Word16 NREGION_PREOFF[16]; extern const int16_t ENERGY_BAND_NUM[4]; extern const int16_t *REGION_INDEX[4]; extern const Word32 MAX_LF_SNR_TAB_FX[4]; -#ifndef IVAS_FLOAT_FIXED -extern const float MAX_LF_SNR_TAB[4]; -extern const float COMVAD_INIT_SNR_DELTA[5]; -extern const float LS_MIN_SELENCE_SNR[3]; -extern const float LT_MIN_SILENCE_SNR[3]; -#endif extern const Word32 COMVAD_INIT_SNR_DELTA_FX[5]; extern const Word32 LT_MIN_SILENCE_SNR_FX[4]; diff --git a/lib_enc/rst_enc.c b/lib_enc/rst_enc.c index d0732f539..fd4f3cb7c 100644 --- a/lib_enc/rst_enc.c +++ b/lib_enc/rst_enc.c @@ -40,57 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * CNG_reset_enc() - * - * Reset encoder static variables after a CNG frame - *-------------------------------------------------------------------*/ - -void CNG_reset_enc( - Encoder_State *st, /* i/o: encoder state structure */ - float *pitch_buf, /* o : floating pitch for each subframe */ - float *voice_factors, /* o : voicing factors */ - int16_t VBR_cng_reset_flag ) -{ - init_gp_clip( st->clip_var ); - mvr2r( UVWB_Ave, st->mem_AR, M ); - set_f( st->mem_MA, 0, M ); - st->hLPDmem->mem_w0_flt = 0.0f; - st->hLPDmem->tilt_code_flt = 0.0f; - st->hLPDmem->gc_threshold_flt = 0.0f; - - if ( VBR_cng_reset_flag ) - { - set_f( st->hLPDmem->mem_syn_flt, 0, M ); - } - set_f( st->hLPDmem->dispMem_flt, 0, 8 ); - - /* last good received frame for FEC in ACELP */ - st->clas = UNVOICED_CLAS; - - /* reset the pitch buffer in case of FRAME_NO_DATA or SID frames */ - if ( st->L_frame == L_FRAME ) - { - set_f( pitch_buf, (float) L_SUBFR, NB_SUBFR ); - } - else /* st->L_frame == L_FRAME16k */ - { - set_f( pitch_buf, (float) L_SUBFR16k, NB_SUBFR16k ); - } - - set_f( voice_factors, 1.0, NB_SUBFR16k ); - - if ( st->hTdCngEnc != NULL ) - { - /* Reset active frame counter */ - st->hTdCngEnc->act_cnt2 = 0; - } - - /* deactivate bass post-filter */ - st->bpf_off = 1; - - return; -} -#endif diff --git a/lib_enc/set_impulse.c b/lib_enc/set_impulse.c index 23b14741c..fd4f3cb7c 100644 --- a/lib_enc/set_impulse.c +++ b/lib_enc/set_impulse.c @@ -40,307 +40,3 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*-----------------------------------------------------------------* - * Local constant - *-----------------------------------------------------------------*/ - -#define INPOL 4 /* +- range in samples for impulse position searching */ - -/*-----------------------------------------------------------------* - * Local function prototypes - *-----------------------------------------------------------------*/ - -static void convolve_tc( const float g[], const float h[], float y[], const int16_t L_1, const int16_t L_2 ); - -static void correlate_tc( const float *x, float *y, const float *h, const int16_t start, const int16_t L_1, const int16_t L_2 ); - -static void convolve_tc2( const float g[], const float h[], float y[], const int16_t pos_max ); - - -/*---------------------------------------------------------------------------------------* - * Function set_impulse() for TC * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - * Builds glottal codebook contribution based on glottal impulses positions finding. * - * * - * Returns a position of the glottal impulse center and * - * a number of the glottal impulse shape. * - * * - * |----| |----| xn * - * imp_pos-> || | imp_shape-> | g1 | | * - * | | | | g2 | exc |---| y1 ---- | * - * | | |--------------| |---------| h |-------|gain|-------(-)---> xn2 * - * | || | gn | |---| ---- * - * |----| |----| * - * codebook excitation h_orig gain * - * * - * * - * nominator dd * * - * Searching criterion: maximize ------------- = ---- = ----------------- * - * denominator rr * - * * - * Notice: gain = gain_trans * gain_pit (computed in trans_enc() function) * - * * - *---------------------------------------------------------------------------------------*/ - -void set_impulse( - const float xn[], /* i : target signal */ - const float h_orig[], /* i : impulse response of weighted synthesis filter */ - float exc[], /* o : adaptive codebook excitation */ - float y1[], /* o : filtered adaptive codebook excitation */ - int16_t *imp_shape, /* o : adaptive codebook index */ - int16_t *imp_pos, /* o : position of the glottal impulse center index */ - float *gain_trans /* o : transition gain */ -) -{ - float rr[L_SUBFR]; /* criterion: nominator coeficients */ - float dd[L_SUBFR]; /* criterion: denominator coeficients */ - float gh[L_SUBFR]; /* convolution of 'g' and 'h' filters */ - float krit, krit_max; - int16_t i, j, m; - int16_t start1, start2, end1; - - - krit_max = -1.0e+12f; - - /* main loop */ - /* impulse */ - for ( m = 0; m < NUM_IMPULSE; m++ ) - { - /* set searching ranges */ - if ( *imp_pos < L_SUBFR - INPOL ) - { - end1 = *imp_pos + INPOL; - } - else - { - end1 = L_SUBFR; - } - if ( *imp_pos > INPOL ) - { - start1 = *imp_pos - INPOL; - } - else - { - start1 = 0; - } - if ( start1 > L_IMPULSE2 ) - { - start2 = start1; - } - else - { - start2 = L_IMPULSE2; - } - - /*-----------------------------------------------------* - * nominator & DEnominator, gh=conv(g,h) - *-----------------------------------------------------*/ - if ( start1 < L_IMPULSE2 ) - { - rr[start1] = 0; - dd[start1] = 0; - convolve_tc( &glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - start1], &h_orig[0], gh, (int16_t) ( L_IMPULSE - L_IMPULSE2 + start1 ), L_SUBFR ); - - /* nominator & Denominator row <0> */ - for ( i = 0; i < L_SUBFR; i++ ) - { - rr[start1] += gh[i] * gh[i]; - dd[start1] += gh[i] * xn[i]; - } - for ( i = start1 + 1; i < L_IMPULSE2; i++ ) - { - rr[i] = 0; - dd[i] = 0; - /* Denominator rows <1,L_IMPULSE2-1> */ - for ( j = L_SUBFR - 1; j > 0; j-- ) - { - gh[j] = gh[j - 1] + glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - i] * h_orig[j]; - rr[i] += gh[j] * gh[j]; - dd[i] += gh[j] * xn[j]; - } - gh[0] = glottal_cdbk[m * L_IMPULSE + L_IMPULSE2 - i] * h_orig[0]; - rr[i] += gh[0] * gh[0]; - dd[i] += gh[0] * xn[0]; - /* move rr and dd into rr[i] and dd[i] */ - } - /* complete convolution(excitation,h_orig) */ - for ( j = L_SUBFR - 1; j > 0; j-- ) - { - gh[j] = gh[j - 1] + glottal_cdbk[m * L_IMPULSE] * h_orig[j]; - } - } - else - { - convolve_tc( &glottal_cdbk[m * L_IMPULSE], &h_orig[0], gh, L_IMPULSE, L_SUBFR ); - } - if ( end1 >= start2 ) - { - /* Denominator row */ - rr[L_SUBFR - 1] = 0; - for ( j = 0; j <= L_IMPULSE2; j++ ) - { - rr[L_SUBFR - 1] += gh[j] * gh[j]; - } - /* move rr into rr[L_SUBFFR-1 */ - /* Denominator rows */ - for ( i = L_SUBFR - 2; i >= start2; i-- ) - { - rr[i] = rr[i + 1] + gh[L_SUBFR + L_IMPULSE2 - 1 - i] * gh[L_SUBFR + L_IMPULSE2 - 1 - i]; - } - - /* nominator rows */ - correlate_tc( xn, &dd[L_IMPULSE2], gh, (int16_t) ( start2 - L_IMPULSE2 ), L_SUBFR, (int16_t) ( end1 - L_IMPULSE2 ) ); - } - - /*------------------------------------------------------* - * maxim. criterion - *------------------------------------------------------*/ - for ( i = start1; i < end1; i++ ) - { - krit = (float) ( dd[i] * dd[i] ) / rr[i]; - if ( krit > krit_max ) - { - krit_max = krit; - *imp_pos = i; - *imp_shape = m; - } - } - } - - /*--------------------------------------------------------* - * Build the excitation using found codeword - *--------------------------------------------------------*/ - - set_f( exc, 0, L_SUBFR ); - set_f( y1, 0, L_SUBFR ); - for ( i = ( *imp_pos - L_IMPULSE2 ); i <= ( *imp_pos + L_IMPULSE2 ); i++ ) - { - if ( ( i >= 0 ) && ( i < L_SUBFR ) ) - { - exc[i] = glottal_cdbk[( *imp_shape ) * L_IMPULSE + i - ( *imp_pos ) + L_IMPULSE2]; - } - } - - /*------------------------------------------------------* - * Form filtered excitation, find gain_trans - *------------------------------------------------------*/ - - convolve_tc2( exc, h_orig, y1, *imp_pos ); - - /* Find the ACELP correlations and the pitch gain (for current subframe) */ - *gain_trans = dotp( xn, y1, L_SUBFR ) / ( dotp( y1, y1, L_SUBFR ) + 0.01f ); - - return; -} - -/*-------------------------------------------------------------------* - * convolve_tc: - * - * convolution for different vectors' lengths - *-------------------------------------------------------------------*/ -static void convolve_tc( - const float g[], /* i : input vector */ - const float h[], /* i : impulse response (or second input vector) */ - float y[], /* o : output vetor (result of convolution) */ - const int16_t L_1, /* i : vector h size */ - const int16_t L_2 /* i : vector g size */ -) -{ - float temp; - int16_t i, n; - - - for ( n = 0; n < L_2; n++ ) - { - temp = g[0] * h[n]; - for ( i = 1; i < ( ( n < L_1 ) ? ( n + 1 ) : L_1 ); i++ ) - { - temp += g[i] * h[n - i]; - } - y[n] = temp; - } - - return; -} - -/*-------------------------------------------------------------------* - * convolve_tc2: - * - * convolution for one vector with only L_IMPULSE nonzero coefficients - *-------------------------------------------------------------------*/ -static void convolve_tc2( - const float g[], /* i : input vector */ - const float h[], /* i : impulse response (or second input vector) */ - float y[], /* o : output vetor (result of convolution) */ - const int16_t pos_max /* o : artificial impulse position */ -) - -{ - float temp; - int16_t i, n; - int16_t i_start, i_end; - int16_t i_end2; - - - i_start = pos_max - L_IMPULSE2; - - if ( i_start < 0 ) - { - i_start = 0; - } - - i_end = pos_max + L_IMPULSE; - if ( i_end > L_SUBFR ) - { - i_end = L_SUBFR; - } - for ( n = i_start; n < L_SUBFR; n++ ) - { - temp = g[0] * h[n]; - i_end2 = ( ( n <= i_end ) ? ( n + 1 ) : i_end ); - for ( i = 1; i < i_end2; i++ ) - { - temp += g[i] * h[n - i]; - } - y[n] = temp; - } - - return; -} - -/*-------------------------------------------------------------------* - * correlate_tc: - * - * correlation for different vectors' lengths - *-------------------------------------------------------------------*/ - -static void correlate_tc( - const float *x, /* i : target signal */ - float *y, /* o : correlation between x[] and h[] */ - const float *h, /* i : impulse response (of weighted synthesis filter) */ - const int16_t start, /* i : index of iterest */ - const int16_t L_1, /* i : vector size */ - const int16_t L_2 /* i : index of interest */ -) -{ - int16_t i, j; - float s; - - - for ( i = start; i < L_2; i++ ) - { - s = 0.0f; - for ( j = i; j < L_1; j++ ) - { - s += x[j] * h[j - i]; - } - y[i] = s; - } - - return; -} - -#endif diff --git a/lib_enc/setmodeindex.c b/lib_enc/setmodeindex.c index 7c9b89ab2..8c2130280 100644 --- a/lib_enc/setmodeindex.c +++ b/lib_enc/setmodeindex.c @@ -52,37 +52,6 @@ ---------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void SetModeIndex( - Encoder_State *st, /* i : Encoder state */ - const int32_t last_total_brate, /* i : last total bitrate */ - const int16_t last_element_mode, /* i : last IVAS element mode */ - const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ -) -{ - int16_t ini_frame_loc = st->ini_frame; - - if ( st->element_mode == IVAS_CPE_MDCT && last_element_mode != IVAS_CPE_MDCT && st->idchan == 1 ) - { - st->ini_frame = 0; - } - - /* Reconfigure the core coder */ - if ( ( last_total_brate != st->total_brate ) || - ( st->last_bwidth != st->bwidth ) || - ( st->last_codec_mode == MODE1 && st->element_mode == EVS_MONO ) || - ( ( st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) && st->element_mode > EVS_MONO ) || - ( st->rf_mode_last != st->rf_mode ) || - ( st->element_mode > EVS_MONO && st->ini_frame == 0 ) ) - { - core_coder_mode_switch( st, last_total_brate, MCT_flag ); - } - - st->ini_frame = ini_frame_loc; - - return; -} -#else void SetModeIndex_ivas_fx( Encoder_State *st, /* i : Encoder state */ const Word32 last_total_brate, /* i : last total bitrate */ @@ -126,4 +95,3 @@ void SetModeIndex_ivas_fx( return; } -#endif diff --git a/lib_enc/sig_clas.c b/lib_enc/sig_clas.c index ba8d4a9e1..0828accec 100644 --- a/lib_enc/sig_clas.c +++ b/lib_enc/sig_clas.c @@ -57,362 +57,3 @@ #define C_PC_ENC 1.857f #define K_SNR_ENC 0.1111f #define C_SNR_ENC -0.3333f - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * signal_clas() - * - * Classification state machine for FEC - * Coder type modification - *-------------------------------------------------------------------*/ - -/*! r: classification for current frames */ -int16_t signal_clas( - Encoder_State *st, /* i/o: encoder state structure */ - const float *speech, /* i : pointer to speech signal for E computation */ - const float *ee, /* i : lf/hf E ration for 2 half-frames */ - const float relE, /* i : frame relative E to the long term average */ - const int16_t L_look, /* i : look-ahead */ - int16_t *clas_mod /* o : class flag for NOOP detection */ -) -{ - float mean_voi2, mean_ee2, tmp; - float een, corn, zcn, relEn, pcn, fmerit1; - int16_t i, clas, pc, zc; - - /*----------------------------------------------------------------* - * Calculate average voicing - * Calculate average spectral tilt - * Calculate zero-crossing rate - * Calculate pitch stability - *----------------------------------------------------------------*/ - - /* average voicing on second half-frame and look-ahead */ - mean_voi2 = 0.5f * ( st->voicing[1] + st->voicing[2] ); - - /* average spectral tilt in dB */ - tmp = ee[0] * ee[1]; - if ( tmp < 1.0f ) - { - tmp = 1.0f; - } - - mean_ee2 = 0.5f * 20.0f * (float) log10( tmp ); - - /* compute zero crossing rate */ - zc = 0; - for ( i = L_look; i < L_FRAME + L_look; i++ ) - { - if ( speech[i] <= 0.0f && speech[i - 1] > 0.0f ) - { - zc++; - } - } - - /* compute pitch stability */ - pc = (int16_t) ( abs( st->pitch[1] - st->pitch[0] ) + abs( st->pitch[2] - st->pitch[1] ) ); - st->tdm_pc = pc; - - /*-----------------------------------------------------------------* - * Transform parameters to the range <0:1> - * Compute the merit function - *-----------------------------------------------------------------*/ - - een = K_EE_ENC * mean_ee2 + C_EE_ENC; - if ( een > 1.0f ) - { - een = 1.0f; - } - else if ( een < 0.0f ) - { - een = 0.0f; - } - - corn = K_COR_ENC * mean_voi2 + C_COR_ENC; - if ( corn > 1.0f ) - { - corn = 1.0f; - } - else if ( corn < 0.0f ) - { - corn = 0.0f; - } - - zcn = K_ZC_ENC * zc + C_ZC_ENC; - if ( zcn > 1.0f ) - { - zcn = 1.0f; - } - else if ( zcn < 0.0f ) - { - zcn = 0.0f; - } - - relEn = K_RELE_ENC * relE + C_RELE_ENC; - if ( relEn > 1.0f ) - { - relEn = 1.0f; - } - else if ( relEn < 0.5f ) - { - relEn = 0.5f; - } - - pcn = K_PC_ENC * pc + C_PC_ENC; - if ( pcn > 1.0f ) - { - pcn = 1.0f; - } - else if ( pcn < 0.0f ) - { - pcn = 0.0f; - } - - fmerit1 = ( 1.0f / 6.0f ) * ( een + 2.0f * corn + zcn + relEn + pcn ); - - /*-----------------------------------------------------------------* - * FEC classification - *-----------------------------------------------------------------*/ - - st->fmerit_dt_flt = st->prev_fmerit_flt - fmerit1; - st->prev_fmerit_flt = fmerit1; - - /* FEC classification */ - if ( st->localVAD == 0 || st->coder_type == UNVOICED || relE < -6.0f ) - { - clas = UNVOICED_CLAS; - *clas_mod = clas; - } - else - { - switch ( st->last_clas ) - { - case VOICED_CLAS: - case ONSET: - case VOICED_TRANSITION: - if ( fmerit1 < 0.49f ) - { - clas = UNVOICED_CLAS; - } - else if ( fmerit1 < 0.66f ) - { - clas = VOICED_TRANSITION; - } - else - { - clas = VOICED_CLAS; - } - - if ( fmerit1 < 0.45f ) - { - *clas_mod = UNVOICED_CLAS; - } - else if ( fmerit1 < 0.66f ) - { - *clas_mod = VOICED_TRANSITION; - } - else - { - *clas_mod = VOICED_CLAS; - } - break; - - case UNVOICED_CLAS: - case UNVOICED_TRANSITION: - if ( fmerit1 > 0.63f ) - { - clas = ONSET; - } - else if ( fmerit1 > 0.585f ) - { - clas = UNVOICED_TRANSITION; - } - else - { - clas = UNVOICED_CLAS; - } - *clas_mod = clas; - break; - - default: - clas = UNVOICED_CLAS; - *clas_mod = clas; - break; - } - } - - /*-----------------------------------------------------------------* - * Onset classification - *-----------------------------------------------------------------*/ - - /* tc_cnt == -1: frame after TC frame in continuous block of GC/VC frames */ - /* tc_cnt == 0: UC frame */ - /* tc_cnt == 1: onset/transition frame, coded by GC coder type */ - /* tc_cnt == 2: frame after onset/transition frame, coded by TC coder type */ - - if ( clas == UNVOICED_CLAS ) - { - st->tc_cnt = 0; - } - - if ( clas >= VOICED_TRANSITION && st->tc_cnt >= 0 ) - { - st->tc_cnt += 1; - } - - if ( st->tc_cnt > 2 ) - { - st->tc_cnt = -1; - } - - return clas; -} - - -/*-------------------------------------------------------------------* - * select_TC() - * - * Select TC coder type for appropriate frames which is in general VOICED_TRANSITION, - * VOICED_CLAS or ONSET frames following UNVOICED_CLAS frames - *-------------------------------------------------------------------*/ - -void select_TC( - const int16_t codec_mode, /* i : codec mode */ - const int16_t tc_cnt, /* i : TC frame counter */ - int16_t *coder_type, /* i/o: coder type */ - const int16_t localVAD /* i : VAD without hangover */ -) -{ - if ( codec_mode == MODE1 ) - { - /*---------------------------------------------------------------------* - * Select TC coder type for appropriate frames which is in general VOICED_TRANSITION, - * VOICED_CLAS or ONSET frames following UNVOICED_CLAS frames - *---------------------------------------------------------------------*/ - - if ( localVAD != 0 && tc_cnt >= 1 ) - { - if ( tc_cnt == 1 ) - { - /* onset/transition frame is always coded using GC coder type */ - *coder_type = GENERIC; - } - else - { - /* frame after onset/transition frame is coded by TC coder type */ - *coder_type = TRANSITION; - } - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * coder_type_modif() - * - * Coder type modification - *-------------------------------------------------------------------*/ - -void coder_type_modif( - Encoder_State *st, /* i/o: encoder state structure */ - const float relE /* i : frame relative E to the long term average */ -) -{ - int16_t unmod_coder_type, vbr_generic_ho; - - if ( st->Opt_SC_VBR ) - { - vbr_generic_ho = st->hSC_VBR->vbr_generic_ho; - } - else - { - vbr_generic_ho = -1; - } - - if ( st->codec_mode == MODE1 ) - { - /*---------------------------------------------------------------------* - * Coder type modification - * - * Prevent UC coder type in certain conditions - * Prevent VC coder type in certain conditions - * Select TC coder type in appropriate frames - *---------------------------------------------------------------------*/ - - /* At higher rates, use GC coding instead of UC coding to improve quality */ - if ( ( st->element_mode == EVS_MONO && st->total_brate > ACELP_9k60 && st->coder_type == UNVOICED ) || - ( st->element_mode > EVS_MONO && st->total_brate > MAX_UNVOICED_BRATE && st->coder_type == UNVOICED ) ) - { - st->coder_type = GENERIC; - } - - /* Prevent UC coding on mixed content at 9.6 kb/s */ - if ( st->total_brate >= ACELP_9k60 && st->coder_type == UNVOICED && st->audio_frame_cnt != 0 ) - { - st->coder_type = GENERIC; - } - - unmod_coder_type = st->coder_type; - - /* Enforce GC coder type on inactive signal (this can be later overwritten to INACTIVE) */ - if ( st->localVAD == 0 && ( ( st->coder_type == UNVOICED && ( !st->Opt_SC_VBR || - ( st->Opt_SC_VBR && vbr_generic_ho == 0 && st->last_coder_type > UNVOICED ) ) ) || - st->coder_type == TRANSITION || st->coder_type == VOICED ) ) - { - st->coder_type = GENERIC; - } - - - if ( st->Opt_SC_VBR ) - { - if ( st->coder_type == GENERIC && unmod_coder_type == UNVOICED && st->Opt_SC_VBR ) - { - st->hSC_VBR->vbr_generic_ho = 1; - } - - if ( st->coder_type > UNVOICED && st->Opt_SC_VBR ) - { - st->hSC_VBR->vbr_generic_ho = 0; - } - - if ( st->localVAD == 0 && st->coder_type == UNVOICED ) - { - st->hSC_VBR->last_7k2_coder_type = GENERIC; - } - else - { - st->hSC_VBR->last_7k2_coder_type = st->coder_type; - } - } - - if ( st->element_mode == EVS_MONO ) - { - /* At higher rates and with 16kHz core, allow only GC and TC coder type */ - if ( st->total_brate > ACELP_16k40 && st->coder_type != GENERIC && st->coder_type != TRANSITION ) - { - st->coder_type = GENERIC; - } - } - else - { - /* At higher bitrates, disable UC and VC coder type; note that IC coder type is classified later */ - if ( ( st->total_brate > MAX_VOICED_BRATE && st->coder_type == VOICED ) || - ( st->total_brate > MAX_UNVOICED_BRATE && st->coder_type == UNVOICED ) ) - { - st->coder_type = GENERIC; - } - } - - /* Patch for certain low-level signals for which the gain quantizer sometimes goes out of its dynamic range */ - if ( st->coder_type == VOICED && st->input_bwidth == NB && relE < -10.0f && st->total_brate <= ACELP_8k00 ) - { - st->coder_type = GENERIC; - } - } - - return; -} - -#endif diff --git a/lib_enc/sig_clas_fx.c b/lib_enc/sig_clas_fx.c index 5bed2d3c9..501f907b6 100644 --- a/lib_enc/sig_clas_fx.c +++ b/lib_enc/sig_clas_fx.c @@ -456,7 +456,6 @@ void coder_type_modif_fx( return; } -#ifdef IVAS_FLOAT_FIXED void coder_type_modif_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ const Word16 relE /* i : frame relative E to the long term average */ @@ -595,4 +594,3 @@ void coder_type_modif_ivas_fx( return; } -#endif diff --git a/lib_enc/spec_center.c b/lib_enc/spec_center.c index ab1a1d74b..5cd8e2875 100644 --- a/lib_enc/spec_center.c +++ b/lib_enc/spec_center.c @@ -40,59 +40,3 @@ #include "rom_enc.h" #include "cnst.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*-------------------------------------------------------------------* - * spec_center() - * - * - *-------------------------------------------------------------------*/ - -void spec_center( - float spec_power[], /* i : energy of sub-band divided uniformly */ - float sp_center[], /* o : spectral centroid */ - const int16_t bw_index /* i : bandwidth */ -) -{ - int16_t i; - float t_sp_center, frame_power; - int16_t sp_center_band_num = SP_CENTER_BAND_NUM_TAB[bw_index]; - float sp_center_mem; - - t_sp_center = 0; - frame_power = 0; - - for ( i = 1; i < sp_center_band_num; i++ ) - { - t_sp_center += spec_power[i] * ( i ); - frame_power += spec_power[i]; - } - sp_center[3] = (float) ( ( t_sp_center + VAD_DELTA1[bw_index] ) / ( frame_power + VAD_DELTA2[bw_index] ) ); - - sp_center_mem = 0; - frame_power = 0; - - for ( i = 0; i < 10; i++ ) - { - sp_center_mem += spec_power[i] * ( i + 1 ); - frame_power += spec_power[i]; - } - - /* 107374184.f = 32768.f * 32768.f * 0.1 */ - t_sp_center = (float) ( ( sp_center_mem + 107374184.f ) / ( frame_power + 107374184.f ) ); - - sp_center[0] = 0.7f * sp_center[0] + 0.3f * t_sp_center; - sp_center[2] = t_sp_center; - - if ( bw_index == CLDFBVAD_NB_ID ) - { - t_sp_center = (float) ( ( sp_center_mem ) / ( frame_power + FLT_MIN ) ); - sp_center[0] = 0.7f * sp_center[0] + 0.3f * t_sp_center; - sp_center[2] = t_sp_center; - } - - return; -} - -#endif diff --git a/lib_enc/spec_flatness.c b/lib_enc/spec_flatness.c index 382e223ab..68731d8f1 100644 --- a/lib_enc/spec_flatness.c +++ b/lib_enc/spec_flatness.c @@ -40,96 +40,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*-------------------------------------------------------------------* - * spec_flatness() - * - * - *-------------------------------------------------------------------*/ - -void spec_flatness( - float spec_amp[], /* i : spectral amplitude */ - float smooth_spec_amp[], /* i : smoothed spectral amplitude */ - float sSFM[] /* o : spectral flatness rate */ -) -{ - int16_t i; - double prods, sums; - float SFM; - - for ( i = MIN_AMP_ID; i <= MAX_AMP_ID; i++ ) - { - smooth_spec_amp[i - MIN_AMP_ID] = smooth_spec_amp[i - MIN_AMP_ID] * 0.7f + spec_amp[i] * 0.3f; - } - - /* sSFM1 */ - prods = 1; - sums = 0; - assert( MIN_AMP_ID <= 5 ); - for ( i = ( 5 - MIN_AMP_ID ); i < ( 20 - MIN_AMP_ID ); i++ ) - { - prods = smooth_spec_amp[i] * prods; - sums = sums + smooth_spec_amp[i]; - } - - if ( prods > 0 ) - { - prods = pow( prods, 1.0 / 15 ); - } - else - { - prods = 0; - } - sums = sums / 15; - - SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); - sSFM[0] = 0.85f * sSFM[0] + 0.15f * SFM; - - /* sSFM2 */ - prods = 1; - sums = 0; - for ( i = ( 20 - MIN_AMP_ID ); i < ( 40 - MIN_AMP_ID ); i++ ) - { - prods = smooth_spec_amp[i] * prods; - sums = sums + smooth_spec_amp[i]; - } - - if ( prods > 0 ) - { - prods = pow( prods, 1.0 / 20 ); - } - else - { - prods = 0; - } - sums = sums / 20; - SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); - sSFM[1] = 0.85f * sSFM[1] + 0.15f * SFM; - /* sSFM3 */ - prods = 1; - sums = 0; - for ( i = ( 40 - MIN_AMP_ID ); i <= ( MAX_AMP_ID - MIN_AMP_ID ); i++ ) - { - prods = smooth_spec_amp[i] * prods; - sums = sums + smooth_spec_amp[i]; - } - - if ( prods > 0 ) - { - prods = pow( prods, 0.04 ); - } - else - { - prods = 0; - } - sums = sums / 25; - SFM = (float) ( ( prods + 3276.8f ) / ( sums + 3276.8f ) ); - sSFM[2] = 0.85f * sSFM[2] + 0.15f * SFM; - - - return; -} - -#endif diff --git a/lib_enc/speech_music_classif.c b/lib_enc/speech_music_classif.c index 52d516068..514f654cb 100644 --- a/lib_enc/speech_music_classif.c +++ b/lib_enc/speech_music_classif.c @@ -44,3048 +44,3 @@ #include "rom_enc.h" #include "rom_com.h" /* Common static table prototypes */ #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local constants - *---------------------------------------------------------------------*/ - -#define ATT_SEG_LEN ( L_FRAME / ATT_NSEG ) -#define ATT_3LSUB_POS ( 3 * ATT_NSEG / NB_SUBFR ) -#define ATT_3LSUB_POS_16k ( int16_t )( ( 4.0f * ATT_NSEG / (float) NB_SUBFR16k ) + 0.5f ) - -#define THR_CORR_PEAK 0.95f -#define TON_FACT 0.95f -#define TON_ALPHA 0.95f - -#define DLP_BIAS 0.138121f - -#define THR_MASS_MAX 0.85f -#define THR_MASS_MIN 0.75f -#define THR_MASS_STEP_UP 0.01f -#define THR_MASS_STEP_DN 0.02f - - -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static void spec_analysis( float *Bin_E, float *p2v_map ); - -static void flux( float *Bin_E, float *p2v_map, float *old_Bin_E, float *buf_flux, int16_t attack_hangover, float dec_mov ); - -static void tonal_dist( float *p2v_map, float *buf_pkh, float *buf_Ntonal, float *buf_Ntonal2, float *buf_Ntonal_lf ); - -static int16_t mode_decision( Encoder_State *st, int16_t len, float *dec_mov, float *buf_flux, float *buf_epsP_tilt, float *buf_pkh, float *buf_cor_map_sum, float *buf_Ntonal, float *buf_Ntonal2, float *buf_Ntonal_lf, float *buf_dlp ); - -static void var_cor_calc( const float old_corr, float *mold_corr, float var_cor_t[], int16_t *high_stable_cor ); - -static int16_t attack_det( const float *inp, const int16_t last_clas, const int16_t localVAD, const int16_t coder_type, const int32_t total_brate, const int16_t element_mode, const int16_t clas, float finc_prev[], float *lt_finc, int16_t *last_strong_attack ); - -static float tonal_det( const float S[], int16_t vad_flag, float tod_S_map_lt[], float *tod_thr_lt, float *tod_weight, float *tod_S_mass_prev, float *tod_S_mass_lt ); - -static void tonal_context_improv( Encoder_State *st, const float PS[], const float voi_fv, const float cor_map_sum_fv, const float LPCErr ); - -static void order_spectrum( float *vec, const int16_t len ); - -static void detect_sparseness( Encoder_State *st, const int16_t localVAD_HE_SAD, const float voi_fv ); - -static int16_t sp_mus_classif_1st( Encoder_State *st, const int16_t localVAD_HE_SAD, const float lsp_new[M], const float cor_map_sum, const float epsP[M + 1], const float PS[], float non_sta, float relE, float *voi_fv, float *cor_map_sum_fv, float *LPCErr, int16_t *high_lpn_flag ); - -static void sp_mus_classif_2nd( Encoder_State *st, const float Etot, int16_t *attack_flag, const float *inp ); - -static void music_mixed_classif_improv( Encoder_State *st, const float *new_inp, const float *epsP, const float etot, const float old_cor, const float cor_map_sum ); - - -/*---------------------------------------------------------------------* - * speech_music_clas_init() - * - * Initialization of speech/music classifier - *---------------------------------------------------------------------*/ - -void speech_music_clas_init( - SP_MUS_CLAS_HANDLE hSpMusClas /* i/o: speech/music classifier handle */ -) -{ - int16_t i; - - set_f( hSpMusClas->FV_st, 0.0f, N_SMC_FEATURES ); - hSpMusClas->inact_cnt = 0; - set_s( hSpMusClas->past_dec, 0, HANG_LEN - 1 ); - set_f( hSpMusClas->past_dlp, 0, HANG_LEN - 1 ); - set_f( hSpMusClas->past_dlp_mean_ST, 0, HANG_LEN - 1 ); - hSpMusClas->dlp_mean_ST = 0.0f; - hSpMusClas->dlp_mean_LT = 0.0f; - hSpMusClas->dlp_var_LT = 0.0f; - - for ( i = 0; i < N_SMC_FEATURES; i++ ) - { - hSpMusClas->prev_FV[i] = 0.5f * hout_intervals[2 * i] + 0.5f * hout_intervals[2 * i + 1]; - } - - for ( i = 0; i < NB_BANDS_SPMUS; i++ ) - { - hSpMusClas->past_log_enr[i] = logf( E_MIN ); - } - - hSpMusClas->sp_mus_state = -8; - hSpMusClas->wdrop = 0.0f; - hSpMusClas->wrise = 0.0f; - hSpMusClas->wdlp_0_95_sp = 0.0f; - hSpMusClas->wdlp_xtalk = 0.0f; - set_f( hSpMusClas->last_lsp, 0.0f, M_LSP_SPMUS ); - hSpMusClas->last_cor_map_sum = 0.0f; - hSpMusClas->last_non_sta = 0.0f; - set_f( hSpMusClas->past_PS, 0.0f, HIGHEST_FBIN - LOWEST_FBIN ); - hSpMusClas->past_ps_diff = 0; - hSpMusClas->past_epsP2 = 01; - hSpMusClas->past_epsP = 0; - hSpMusClas->flag_spitch_cnt = 0; - - hSpMusClas->gsc_thres[0] = TH_0_MIN; - hSpMusClas->gsc_thres[1] = TH_1_MIN; - hSpMusClas->gsc_thres[2] = TH_2_MIN; - hSpMusClas->gsc_thres[3] = TH_3_MIN; - set_f( hSpMusClas->gsc_lt_diff_etot, 0.0f, MAX_LT ); - hSpMusClas->gsc_mem_etot = 0.0f; - hSpMusClas->gsc_last_music_flag = 0; - hSpMusClas->gsc_nb_thr_1 = 0; - hSpMusClas->gsc_nb_thr_3 = 0; - hSpMusClas->mold_corr = 0.9f; - hSpMusClas->mean_avr_dyn = 0.5f; - hSpMusClas->last_sw_dyn = 10.0f; - - hSpMusClas->relE_attack_cnt = 0; - hSpMusClas->prev_relE = 0.0f; - hSpMusClas->prev_Etot = 0.0f; - hSpMusClas->prev_vad = 0; - hSpMusClas->vad_0_1_cnt = 0; - hSpMusClas->relE_attack_sum = 0; - - /* speech/music classifier improvement */ - for ( i = 0; i < BUF_LEN; i++ ) - { - hSpMusClas->buf_flux[i] = -100; - hSpMusClas->buf_pkh[i] = 0; - hSpMusClas->buf_epsP_tilt[i] = 0; - hSpMusClas->buf_cor_map_sum[i] = 0; - hSpMusClas->buf_Ntonal[i] = 0; - hSpMusClas->buf_Ntonal2[i] = 0; - hSpMusClas->buf_Ntonal_lf[i] = 0; - } - - set_f( hSpMusClas->lpe_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->voicing_buf, 0, HANG_LEN_INIT ); - hSpMusClas->gsc_hangover = 0; - set_f( hSpMusClas->sparse_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->hf_spar_buf, 0, HANG_LEN_INIT ); - hSpMusClas->LT_sparse = 0.0f; - hSpMusClas->gsc_cnt = 0; - hSpMusClas->last_vad_spa = 0; - - set_f( hSpMusClas->old_Bin_E, 0.0f, 3 * N_OLD_BIN_E ); - set_f( hSpMusClas->buf_etot, 0, 4 ); - set_f( hSpMusClas->buf_dlp, 0, 10 ); - - hSpMusClas->UV_cnt1 = 300; - hSpMusClas->LT_UV_cnt1 = 250.0f; - hSpMusClas->onset_cnt = 0; - hSpMusClas->attack_hangover = 0; - hSpMusClas->dec_mov = 0.0f; - hSpMusClas->dec_mov1 = 0.0f; - hSpMusClas->mov_log_max_spl = 200.0f; - hSpMusClas->old_lt_diff[0] = 0.0f; - hSpMusClas->old_lt_diff[1] = 0.0f; - set_f( hSpMusClas->finc_prev, 0.0f, ATT_NSEG ); - hSpMusClas->lt_finc = 0.0f; - - hSpMusClas->last_strong_attack = 0; - hSpMusClas->tdm_lt_Etot = 0.01f; - set_f( hSpMusClas->tod_lt_Bin_E, 0.0f, TOD_NSPEC ); - set_f( hSpMusClas->tod_S_map_lt, 0.0f, TOD_NSPEC ); - hSpMusClas->tod_thr_lt = TOD_THR_MASS; - hSpMusClas->tod_weight = 0.0f; - hSpMusClas->tod_S_mass_prev = 0.0f; - hSpMusClas->tod_S_mass_lt = 0.0f; - - /* speech/music classification */ - set_s( hSpMusClas->lt_old_mode, 1, 3 ); - hSpMusClas->lt_voicing_flt = 0.5f; - hSpMusClas->lt_corr_flt = 0.5f; - hSpMusClas->lt_tonality_flt = 0; - set_s( hSpMusClas->lt_corr_pitch, 0, 3 ); - hSpMusClas->lt_hangover = 0; - hSpMusClas->lowrate_pitchGain_flt = 0; - - hSpMusClas->lt_music_hangover = 0; - set_f( hSpMusClas->tonality2_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->tonality3_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->LPCErr_buf, 0, HANG_LEN_INIT ); - hSpMusClas->lt_music_state = 0; - hSpMusClas->lt_speech_state = 0; - hSpMusClas->lt_speech_hangover = 0; - - hSpMusClas->lt_dec_thres = 10.0f; - hSpMusClas->ener_RAT = 0.0f; - - hSpMusClas->high_stable_cor = 0; - set_f( hSpMusClas->var_cor_t, 0.0f, VAR_COR_LEN ); - - hSpMusClas->lps = 0.0f; - hSpMusClas->lpm = 0.0f; - hSpMusClas->lpn = 0.0f; - - return; -} - - -/*---------------------------------------------------------------------* - * speech_music_classif() - * - * Speech/music classification - * - * The following technologies are used based on the outcome of the sp/mus classifier - * sp_aud_decision1 sp_aud_decision2 - * 0 0 use ACELP (+TD BWE) - * 1 0 use ACELP (+FD BWE) or HQ/LR-MDCT depending on bitrate - * 1 1 use GSC (+FD BWE) or HQ/LR-MDCT depending on bitrate - * - * 0 1 exceptionally use GSC (+FD BWE) instead of LR-MDCT at 13.2 kbps (WB/SWB) for sparse spectra - *---------------------------------------------------------------------*/ - -/*! r: 1st stage decision (1-music, 0-speech or noise) */ -void speech_music_classif( - Encoder_State *st, /* i/o: state structure */ - const float *new_inp, /* i : new input signal */ - const float *inp, /* i : input signal to locate attach position */ - const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ - const float lsp_new[M], /* i : LSPs in current frame */ - const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ - const float epsP[M + 1], /* i : LP prediciton error */ - const float PS[], /* i : energy spectrum */ - const float Etot, /* i : total frame energy */ - const float old_cor, /* i : max correlation from previous frame */ - int16_t *attack_flag, /* o : attack flag (GSC or TC) */ - const float non_sta, /* i : unbound non-stationarity for sp/mus classifier */ - const float relE, /* i : relative frame energy */ - int16_t *high_lpn_flag, /* o : sp/mus LPN flag */ - const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ -) -{ - float voi_fv, cor_map_sum_fv, LPCErr; - - /* 1st stage speech/music classification based on the GMM model */ - st->sp_aud_decision1 = sp_mus_classif_1st( st, localVAD_HE_SAD, lsp_new, cor_map_sum, epsP, PS, non_sta, relE, &voi_fv, &cor_map_sum_fv, &LPCErr, high_lpn_flag ); - - if ( st->codec_mode == MODE1 || st->sr_core == INT_FS_12k8 ) - { - - /* Improvement of the 1st stage decision for mixed/music content */ - if ( !st->Opt_SC_VBR && ( st->total_brate != ACELP_24k40 ) ) - { - music_mixed_classif_improv( st, new_inp, epsP, Etot, old_cor, cor_map_sum ); - } - - st->sp_aud_decision0 = st->sp_aud_decision1; - - /* 2nd stage speech/music classification (rewrite music to speech in onsets) */ - st->sp_aud_decision2 = st->sp_aud_decision1; - - if ( st->bwidth > NB ) - { - sp_mus_classif_2nd( st, Etot, attack_flag, inp ); - - if ( flag_spitch && st->bwidth == WB && st->total_brate < ACELP_13k20 ) - { - /* avoid switch to AUDIO/MUSIC class for very short stable high pitch - and/or stable pitch with high correlation at low bitrates*/ - st->sp_aud_decision2 = 0; - } - } - - /* Context-based improvement of 1st and 2nd stage decision on stable tonal signals */ - if ( !st->Opt_SC_VBR && st->total_brate != ACELP_24k40 ) - { - tonal_context_improv( st, PS, voi_fv, cor_map_sum_fv, LPCErr ); - } - - /* Avoid using LR-MDCT on sparse spectra, use GSC instead at 13.2 kbps (WB/SWB) */ - if ( !st->Opt_SC_VBR && st->total_brate == ACELP_13k20 && st->vad_flag == 1 && ( st->bwidth == WB || st->bwidth == SWB ) ) - { - detect_sparseness( st, localVAD_HE_SAD, voi_fv ); - } - - /* override speech/music classification to ACELP when background noise level reaches certain level */ - /* this is a patch against mis-classifications during active noisy speech segments */ - if ( st->lp_noise > 12.0f ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - } - - /* set GSC noisy speech flag on unvoiced SWB segments */ - st->GSC_noisy_speech = 0; - if ( st->vad_flag == 1 && st->total_brate >= ACELP_13k20 && st->total_brate < ACELP_24k40 && - st->lp_noise > 12.0f && st->sp_aud_decision1 == 0 && st->bwidth >= SWB && - st->coder_type_raw == UNVOICED ) - { - st->GSC_noisy_speech = 1; - } - - /* Select AUDIO frames */ -#ifdef DEBUGGING - if ( st->codec_mode == MODE1 && ( st->force == 1 || ( st->force == -1 && ( st->sp_aud_decision2 || st->GSC_noisy_speech ) ) ) ) -#else - if ( st->codec_mode == MODE1 && ( st->sp_aud_decision2 || st->GSC_noisy_speech ) ) -#endif - { - st->coder_type = AUDIO; - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - } - } - else - { - st->sp_aud_decision0 = st->sp_aud_decision1; - } - - - return; -} - - -/*---------------------------------------------------------------------* - * sp_mus_classif_1st() - * - * 1st stage speech/music classification (based on the GMM model) - *---------------------------------------------------------------------*/ - -/*! r: decision flag (1-music, 0-speech or noise) */ -static int16_t sp_mus_classif_1st( - Encoder_State *st, /* i/o: state structure */ - const int16_t localVAD_HE_SAD, /* i : local VAD HE flag */ - const float lsp_new[M], /* i : LSPs in current frame */ - const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ - const float epsP[M + 1], /* i : LP prediciton error */ - const float PS[], /* i : energy spectrum */ - float non_sta, /* i : unbound non-stationarity */ - float relE, /* i : relative frame energy */ - float *voi_fv, /* o : scaled voicing feature */ - float *cor_map_sum_fv, /* o : scaled correlation map feature */ - float *LPCErr, /* o : scaled LP prediction error feature */ - int16_t *high_lpn_flag /* o : sp/mus LPN flag */ -) -{ - int16_t i, k, p, dec, vad; - float dlp, ftmp, lepsP1, sum_PS, ps_diff, ps_sta, wrelE, wdrop, wght, mx; - float FV[N_FEATURES], *pFV = FV, PS_norm[128], dPS[128], lsp[M]; - float pys, pym, xm[N_FEATURES], py, lps = 0, lpm = 0; - const float *pSF; - float pyn, lpn = 0; - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - vad = localVAD_HE_SAD; - - /*------------------------------------------------------------------* - * Preparation of the feature vector - *------------------------------------------------------------------*/ - - /* [0] OL pitch */ - if ( st->tc_cnt == 1 || st->tc_cnt == 2 ) - { - *pFV++ = (float) st->pitch[2]; - } - else - { - *pFV++ = (float) ( st->pitch[0] + st->pitch[1] + st->pitch[2] ) / 3.0f; - } - - /* [1] voicing */ - if ( st->tc_cnt == 1 || st->tc_cnt == 2 ) - { - *pFV++ = st->voicing[2]; - } - else - { - *pFV++ = (float) ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f; - } - - /* [2,3,4,5,6] LSFs */ - mvr2r( lsp_new, lsp, M ); - - ftmp = (float) acos( lsp[1] ); - *pFV++ = ftmp + hSpMusClas->last_lsp[1]; - hSpMusClas->last_lsp[1] = ftmp; - - ftmp = (float) acos( lsp[2] ); - *pFV++ = ftmp + hSpMusClas->last_lsp[2]; - hSpMusClas->last_lsp[2] = ftmp; - - ftmp = (float) acos( lsp[3] ); - *pFV++ = ftmp + hSpMusClas->last_lsp[3]; - hSpMusClas->last_lsp[3] = ftmp; - - ftmp = (float) acos( lsp[4] ); - *pFV++ = ftmp + hSpMusClas->last_lsp[4]; - hSpMusClas->last_lsp[4] = ftmp; - - ftmp = (float) acos( lsp[5] ); - *pFV++ = ftmp + hSpMusClas->last_lsp[5]; - hSpMusClas->last_lsp[5] = ftmp; - - /* [7] cor_map_sum */ - *pFV++ = cor_map_sum + hSpMusClas->last_cor_map_sum; - hSpMusClas->last_cor_map_sum = cor_map_sum; - - /* [8] non_sta */ - *pFV++ = non_sta + hSpMusClas->last_non_sta; - hSpMusClas->last_non_sta = non_sta; - - /* [9] epsP */ - if ( st->bwidth == NB ) - { - /* do not take into account (statistics are too different) */ - *pFV++ = -1.647f; - } - else - { - lepsP1 = logf( epsP[1] + 1e-5f ); - ftmp = logf( epsP[13] ) - lepsP1; - *pFV++ = ftmp + hSpMusClas->past_epsP2; - hSpMusClas->past_epsP2 = ftmp; - } - - /* calculation of differential normalized power spectrum */ - sum_PS = 1e-5f; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - sum_PS += PS[i]; - } - - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - PS_norm[i] = PS[i] / sum_PS; - dPS[i] = fabsf( PS_norm[i] - hSpMusClas->past_PS[i - LOWEST_FBIN] ); - } - - /* [10] ps_diff (spectral difference) */ - ps_diff = 0; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - ps_diff += dPS[i]; - } - - ps_diff = logf( ps_diff + 1e-5f ); - *pFV++ = ps_diff + hSpMusClas->past_ps_diff; - hSpMusClas->past_ps_diff = ps_diff; - - /* [11] ps_sta (spectral stationarity) */ - ps_sta = 0; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - mx = PS_norm[i] > hSpMusClas->past_PS[i - LOWEST_FBIN] ? PS_norm[i] : hSpMusClas->past_PS[i - LOWEST_FBIN]; - ps_sta += mx / ( dPS[i] + 1e-5f ); - } - - *pFV++ = logf( ps_sta + 1e-5f ); - mvr2r( &PS_norm[LOWEST_FBIN], hSpMusClas->past_PS, HIGHEST_FBIN - LOWEST_FBIN ); - - /*------------------------------------------------------------------* - * Scaling of the feature vector - *------------------------------------------------------------------*/ - - pFV = FV; - if ( st->bwidth == NB ) - { - pSF = SF_8k; - } - else - { - pSF = SF; - } - - for ( i = 0; i < N_FEATURES; i++, pFV++, pSF += 2 ) - { - *pFV = pSF[0] * *pFV + pSF[1]; - } - - /* store some scaled parameters for later correction of the 1st stage speech/music classification */ - *voi_fv = FV[1]; - *cor_map_sum_fv = FV[7]; - *LPCErr = FV[9]; - - /*------------------------------------------------------------------* - * Calculation of posterior probability - * Log-probability - *------------------------------------------------------------------*/ - - pys = pym = pyn = 1e-5f; - - /* run loop for all mixtures (for each mixture, calculate the probability of speech or noise and the probability of music) */ - for ( k = 0; k < N_MIXTURES; k++ ) - { - /* active frames - calculate the probability of speech */ - for ( p = 0; p < N_FEATURES; p++ ) - { - xm[p] = FV[p] - m_speech[k * N_FEATURES + p]; - } - - py = lvm_speech[k] + dot_product_mat( xm, &invV_speech[k * N_FEATURES * N_FEATURES], N_FEATURES ); - pys += expf( py ); - /* inactive frames - calculate the probability of noise */ - for ( p = 0; p < N_FEATURES; p++ ) - { - xm[p] = FV[p] - m_noise[k * N_FEATURES + p]; - } - - py = lvm_noise[k] + dot_product_mat( xm, &invV_noise[k * N_FEATURES * N_FEATURES], N_FEATURES ); - pyn += expf( py ); - - /* either active or inactive frames - calculate the probability of music */ - for ( p = 0; p < N_FEATURES; p++ ) - { - xm[p] = FV[p] - m_music[k * N_FEATURES + p]; - } - - py = lvm_music[k] + dot_product_mat( xm, &invV_music[k * N_FEATURES * N_FEATURES], N_FEATURES ); - pym += expf( py ); - } - - /* calculate log-probability */ - lps = logf( pys ) - 0.5f * N_FEATURES * logf( PI2 ); - lpm = logf( pym ) - 0.5f * N_FEATURES * logf( PI2 ); - lpn = logf( pyn ) - 0.5f * N_FEATURES * logf( PI2 ); - - *high_lpn_flag = 0; - if ( lpn > lps && lpn > lpm ) - { - *high_lpn_flag = 1; - } - - if ( !vad ) - { - /* artificially increase log-probability of noise */ - lps = lpn * 1.2f; - } - - hSpMusClas->lpm = lpm; - hSpMusClas->lps = lps; - - /* determine HQ Generic speech class */ - if ( st->hHQ_core != NULL ) - { - if ( lps > lpm + 0.5f ) - { - st->hHQ_core->hq_generic_speech_class = 1; - } - else - { - st->hHQ_core->hq_generic_speech_class = 0; - } - } - - /*------------------------------------------------------------------* - * State machine (sp_mus_state < 0 .. inactive, > 0 .. entry, = 0 .. active ) - *------------------------------------------------------------------*/ - - if ( vad ) - { - if ( relE < -20 || ( lps <= -5 && lpm <= -5 ) ) - { - if ( hSpMusClas->sp_mus_state > 0 ) - { - if ( hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* energy is too low but we are in entry period -> reset the inactive counter to allow new entry later */ - hSpMusClas->inact_cnt = 0; - } - - /* energy is too low -> we are going to instable state */ - hSpMusClas->sp_mus_state = 0; - } - else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) - { - /* energy is still too low -> we are still in instable state */ - hSpMusClas->sp_mus_state--; - } - } - else if ( hSpMusClas->sp_mus_state <= 0 ) - { - if ( hSpMusClas->inact_cnt == 0 ) - { - - hSpMusClas->sp_mus_state = 1; - } - else - { - - hSpMusClas->sp_mus_state = HANG_LEN; - } - - hSpMusClas->inact_cnt = 12; - } - else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* we are inside an entry period -> increment the counter of entry frames */ - hSpMusClas->sp_mus_state++; - } - - if ( hSpMusClas->sp_mus_state < 0 && hSpMusClas->inact_cnt > 0 ) - { - hSpMusClas->inact_cnt--; - } - } - else - { - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - hSpMusClas->inact_cnt = 0; - } - else if ( hSpMusClas->inact_cnt > 0 ) - { - hSpMusClas->inact_cnt--; - } - - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - hSpMusClas->sp_mus_state = -HANG_LEN; - } - else if ( hSpMusClas->sp_mus_state > 0 ) - { - hSpMusClas->sp_mus_state = -1; - } - else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) - { - /* we are in inactive state */ - hSpMusClas->sp_mus_state--; - } - } - - /*------------------------------------------------------------------* - * Decision without hangover - * Weighted decision - *------------------------------------------------------------------*/ - - /* decision without hangover (0 - speech/noise, 1 - music) */ - dec = lpm > lps; - dlp = lpm - lps; - - if ( !vad ) - { - dec = 0; - dlp = 0; - } - - /* calculate weight based on relE (close to 0.01 in low-E regions, close to 1 in high-E regions) */ - wrelE = 1.0f + relE / 15; - - if ( wrelE > 1.0f ) - { - wrelE = 1.0f; - } - else if ( wrelE < 0.01f ) - { - wrelE = 0.01f; - } - - /* calculate weight based on drops of dlp (close to 1 during sudden drops of dlp, close to 0 otherwise) */ - if ( dlp < 0 && dlp < hSpMusClas->past_dlp[0] ) - { - if ( hSpMusClas->past_dlp[0] > 0 ) - { - hSpMusClas->wdrop = -dlp; - } - else - { - hSpMusClas->wdrop += hSpMusClas->past_dlp[0] - dlp; - } - } - else - { - hSpMusClas->wdrop = 0; - } - - wdrop = hSpMusClas->wdrop / 20; - - if ( wdrop > 1.0f ) - { - wdrop = 1.0f; - } - else if ( wdrop < 0.1f ) - { - wdrop = 0.1f; - } - - /* combine weights into one */ - wght = wrelE * wdrop; - if ( wght < 0.01f ) - { - wght = 0.01f; - } - - /* calculate weighted decision */ - hSpMusClas->wdlp_0_95_sp = wght * dlp + ( 1 - wght ) * hSpMusClas->wdlp_0_95_sp; - - if ( hSpMusClas->sp_mus_state == -HANG_LEN ) - { - hSpMusClas->wdlp_0_95_sp = 0; - } - - /*------------------------------------------------------------------* - * Final speech/music decision - *------------------------------------------------------------------*/ - - if ( !vad && hSpMusClas->sp_mus_state == -HANG_LEN ) - { - /* inactive state */ - dec = 0; - } - else if ( hSpMusClas->sp_mus_state <= 0 ) - { - /* transition from active to inactive state or instable state */ - dec = hSpMusClas->past_dec[0]; - } - else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* entry state -> final decision is calculated based on weighted average of past non-binary decisions */ - ftmp = w_spmus[hSpMusClas->sp_mus_state - 1][0] * dlp; - ftmp += dotp( &w_spmus[hSpMusClas->sp_mus_state - 1][1], hSpMusClas->past_dlp, HANG_LEN - 1 ); - dec = ftmp > 2.0f; - } - else - { - /* stable active state */ - if ( hSpMusClas->wdlp_0_95_sp > 0 && hSpMusClas->past_dec[0] == 0 && hSpMusClas->past_dec[1] == 0 && hSpMusClas->past_dec[2] == 0 ) - { - /* switching from speech to music */ - dec = 1; - } - else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp < 0 ) - { - /* switching from music to speech */ - dec = 0; - } - else - { - dec = hSpMusClas->past_dec[0]; - } - } - - /*------------------------------------------------------------------* - * Updates - *------------------------------------------------------------------*/ - - /* update buffer of past non-binary decisions */ - mvr2r( &hSpMusClas->past_dlp[0], &hSpMusClas->past_dlp[1], HANG_LEN - 2 ); - hSpMusClas->past_dlp[0] = dlp; - - /* update buffer of past binary decisions */ - mvs2s( &hSpMusClas->past_dec[0], &hSpMusClas->past_dec[1], HANG_LEN - 2 ); - hSpMusClas->past_dec[0] = dec; - - return dec; -} - - -/*---------------------------------------------------------------------* - * sp_mus_classif_2nd() - * - * 2nd stage speech/music classifier (convert music to speech for onsets) - *---------------------------------------------------------------------*/ - -static void sp_mus_classif_2nd( - Encoder_State *st, /* i/o: encoder state structure */ - const float Etot, /* i : total frame energy */ - int16_t *attack_flag, /* i/o: attack flag (GSC or TC) */ - const float *inp /* i : input signal */ -) -{ - int16_t attack; - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /* initialization */ - *attack_flag = 0; - - /* signal stability estimation */ - stab_est( Etot, hSpMusClas->gsc_lt_diff_etot, &hSpMusClas->gsc_mem_etot, &hSpMusClas->gsc_nb_thr_3, &hSpMusClas->gsc_nb_thr_1, hSpMusClas->gsc_thres, &hSpMusClas->gsc_last_music_flag, st->vad_flag ); - - /* calculate variance of correlation */ - var_cor_calc( st->old_corr, &hSpMusClas->mold_corr, hSpMusClas->var_cor_t, &hSpMusClas->high_stable_cor ); - - /* attack detection */ - attack = attack_det( inp, st->clas, st->localVAD, st->coder_type, st->total_brate, EVS_MONO, st->clas, hSpMusClas->finc_prev, &hSpMusClas->lt_finc, &hSpMusClas->last_strong_attack ); - - /* change decision from music to speech in certain special cases */ - if ( st->sp_aud_decision1 == 1 ) - { - if ( hSpMusClas->ener_RAT < 0.18f && hSpMusClas->lt_dec_thres > 15.0f ) - { - /* strong music decision but almost no content below 1kHz */ - st->sp_aud_decision2 = 0; - } - else if ( hSpMusClas->high_stable_cor && st->pitch[0] >= 130 ) - { - /* prevent GSC in highly correlated signal with low energy variation */ - /* this is basically a patch against bassoon-type of music */ - st->sp_aud_decision2 = 0; - - if ( st->codec_mode == MODE1 && st->coder_type == TRANSITION ) - { - st->coder_type = GENERIC; - } - } - else if ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] > 4.5f && ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] - hSpMusClas->gsc_lt_diff_etot[MAX_LT - 2] > 10.0f ) ) - { - if ( st->tc_cnt == 1 ) - { - /* do TC coding instead of GC/VC if onset has been already declared before */ - st->sp_aud_decision2 = 0; - - if ( st->codec_mode == MODE1 ) - { - st->coder_type = TRANSITION; - } - } - else - { - if ( attack >= ATT_3LSUB_POS ) - { - /* do TC coding if attack is located in the last subframe */ - st->sp_aud_decision2 = 0; - *attack_flag = attack + 1; - - if ( st->codec_mode == MODE1 ) - { - st->coder_type = TRANSITION; - } - } - else if ( attack >= ATT_SEG_LEN / 2 ) - { - /* do GSC coding if attack is located after the first quarter of the first subframe */ - /* (pre-echo will be treated at the decoder side) */ - st->sp_aud_decision2 = 1; - *attack_flag = 31; - } - } - } - } - else if ( st->localVAD == 1 && st->coder_type == GENERIC && ( ( attack >= ATT_3LSUB_POS && st->total_brate < ACELP_24k40 ) || ( attack >= ATT_3LSUB_POS_16k && st->total_brate >= ACELP_24k40 && st->total_brate < ACELP_48k ) ) ) - { - /* do TC coding if attack is located in the last subframe */ - *attack_flag = attack + 1; - - if ( st->codec_mode == MODE1 ) - { - st->coder_type = TRANSITION; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * tonal_det() - * - * Tonal detector based on spectral stability and harmonicity - *---------------------------------------------------------------------*/ - -static float tonal_det( - const float S[], - int16_t vad_flag, - float tod_S_map_lt[], - float *tod_thr_lt, - float *tod_weight, - float *tod_S_mass_prev, - float *tod_S_mass_lt ) -{ - int16_t i; - float S_mass, alpha; - - /* update the adaptive weight */ - *tod_weight = TON_ALPHA * *tod_weight + ( 1 - TON_ALPHA ) * vad_flag; - if ( *tod_weight > TON_ALPHA ) - { - *tod_weight = TON_ALPHA; - } - else if ( *tod_weight < ( 1 - TON_ALPHA ) ) - { - *tod_weight = 1 - TON_ALPHA; - } - - /* calculate LT spectral correlation in each band up to 4KHz */ - S_mass = 0.0f; - for ( i = 0; i < TOD_NSPEC; i++ ) - { - tod_S_map_lt[i] = *tod_weight * tod_S_map_lt[i] + ( 1 - *tod_weight ) * S[i]; - - S_mass += tod_S_map_lt[i]; - } - S_mass /= TOD_NSPEC; - - if ( S_mass > *tod_S_mass_prev ) - { - alpha = 0.7f; - } - else - { - alpha = 0.3f; - } - *tod_S_mass_prev = S_mass; - *tod_S_mass_lt = alpha * *tod_S_mass_lt + ( 1 - alpha ) * S_mass; - S_mass = *tod_S_mass_lt; - - /* updating adaptive decision threshold */ - if ( S_mass > *tod_thr_lt ) - { - *tod_thr_lt -= THR_MASS_STEP_DN; - } - else - { - *tod_thr_lt += THR_MASS_STEP_UP; - } - - if ( *tod_thr_lt > THR_MASS_MAX ) - { - *tod_thr_lt = THR_MASS_MAX; - } - - if ( *tod_thr_lt < THR_MASS_MIN ) - { - *tod_thr_lt = THR_MASS_MIN; - } - - return S_mass; -} - -/*---------------------------------------------------------------------* - * var_cor_calc() - * - * Calculate variance of correlation - *---------------------------------------------------------------------*/ - -static void var_cor_calc( - const float old_corr, - float *mold_corr, - float var_cor_t[], - int16_t *high_stable_cor ) -{ - int16_t i; - float var_cor; - - /* update buffer of old correlation values */ - for ( i = VAR_COR_LEN - 1; i > 0; i-- ) - { - var_cor_t[i] = var_cor_t[i - 1]; - } - var_cor_t[i] = old_corr; - - /* calculate variance of correlation */ - var_cor = var( var_cor_t, VAR_COR_LEN ); - - /* set flag in case of highly-correlated stable signal */ - if ( *mold_corr > 0.8f && var_cor < 5e-4f ) - { - *high_stable_cor = 1; - } - else - { - *high_stable_cor = 0; - } - - /* update average correlation */ - *mold_corr = 0.1f * old_corr + 0.9f * *mold_corr; - - return; -} - -/*---------------------------------------------------------------------* - * attack_det() - * - * Attack detection - *---------------------------------------------------------------------*/ - -static int16_t attack_det( - const float *inp, /* i : input signal */ - const int16_t last_clas, /* i : last signal clas */ - const int16_t localVAD, /* i : local VAD flag */ - const int16_t coder_type, /* i : coder type */ - const int32_t total_brate, /* i : total bitrate */ - const int16_t element_mode, /* i : IVAS element mode */ - const int16_t clas, /* i : signal class */ - float finc_prev[], /* i/o: previous finc */ - float *lt_finc, /* i/o: long-term mean finc */ - int16_t *last_strong_attack /* i/o: last strong attack flag */ -) -{ - int16_t i, attack; - float etmp, etmp2, finc[ATT_NSEG]; - int16_t att_3lsub_pos; - int16_t attack1; - - att_3lsub_pos = ATT_3LSUB_POS; - if ( total_brate >= ACELP_24k40 ) - { - att_3lsub_pos = ATT_3LSUB_POS_16k; - } - - /* compute energy per section */ - for ( i = 0; i < ATT_NSEG; i++ ) - { - finc[i] = sum2_f( inp + i * ATT_SEG_LEN, ATT_SEG_LEN ); - } - - attack = maximum( finc, ATT_NSEG, &etmp ); - attack1 = attack; - - if ( localVAD == 1 && coder_type == GENERIC ) - { - /* compute mean energy in the first three subframes */ - etmp = mean( finc, att_3lsub_pos ); - - /* compute mean energy after the attack */ - etmp2 = mean( finc + attack, ATT_NSEG - attack ); - - /* and compare them */ - if ( etmp * 8 > etmp2 ) - { - /* stop, if the attack is not sufficiently strong */ - attack = 0; - } - - if ( last_clas == VOICED_CLAS && etmp * 20 > etmp2 ) - { - /* stop, if the signal was voiced and the attack is not sufficiently strong */ - attack = 0; - } - - /* compare wrt. other sections (reduces miss-classification) */ - if ( attack > 0 ) - { - etmp2 = finc[attack]; - - for ( i = 2; i < att_3lsub_pos - 2; i++ ) - { - if ( finc[i] * 2.0f > etmp2 ) - { - /* stop, if the attack is not sufficiently strong */ - attack = 0; - break; - } - } - } - - if ( attack == 0 && element_mode > EVS_MONO && ( clas < VOICED_TRANSITION || clas == ONSET ) ) - { - mvr2r( finc, finc_prev, attack1 ); - - /* compute mean energy before the attack */ - etmp = mean( finc_prev, ATT_NSEG ); - - etmp2 = finc[attack1]; - - if ( ( etmp * 16 < etmp2 ) || ( etmp * 12 < etmp2 && last_clas == UNVOICED_CLAS ) ) - { - attack = attack1; - } - - if ( 20 * *lt_finc > etmp2 || *last_strong_attack ) - { - attack = 0; - } - } - - *last_strong_attack = attack; - } - - /* compare wrt. other sections (reduces miss-classification) */ - else if ( attack > 0 ) - { - for ( i = 2; i < att_3lsub_pos - 2; i++ ) - { - if ( i != attack && finc[i] * 1.3f > finc[attack] ) - { - /* stop, if the attack is not sufficiently strong */ - attack = 0; - break; - } - } - *last_strong_attack = 0; - } - - /* updates */ - mvr2r( finc, finc_prev, ATT_NSEG ); - *lt_finc = 0.95f * *lt_finc + 0.05f * mean( finc, ATT_NSEG ); - - return attack; -} - -/*---------------------------------------------------------------------* - * ivas_smc_gmm() - * - * 1st stage of the speech/music classification (based on the GMM model) - *---------------------------------------------------------------------*/ -/*! r: S/M decision (0=speech or noise,1=unclear,2=music) */ - -int16_t ivas_smc_gmm( - Encoder_State *st, /* i/o: state structure */ - STEREO_CLASSIF_HANDLE hStereoClassif, /* i/o: stereo classifier structure */ - const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ - const float Etot, /* i : total frame energy */ - const float lsp_new[M], /* i : LSPs in current frame */ - const float cor_map_sum, /* i : correlation map sum (from multi-harmonic anal.) */ - const float epsP[M + 1], /* i : LP prediciton error */ - const float PS[], /* i : energy spectrum */ - const float non_sta, /* i : unbound non-stationarity */ - const float relE, /* i : relative frame energy */ - int16_t *high_lpn_flag, /* i/o: sp/mus LPN flag */ - const int16_t flag_spitch /* i : flag to indicate very short stable pitch */ -) -{ - int16_t i, m, dec; - int16_t flag_odv; - float lps, lpm, lpn; - float ps[N_SMC_MIXTURES], pm[N_SMC_MIXTURES], pn[N_SMC_MIXTURES]; - float fvm[N_PCA_COEF], lprob; - float dlp, ftmp, sum_PS, ps_diff, ps_sta, wrelE, wdrop, wght; - float wrise; - float dlp_mean2var; - float FV[N_SMC_FEATURES], *pFV, PS_norm[128], dPS[128]; - const float *pODV; - float *pFV_st, smc_st_mean_fact; - int16_t relE_attack_flag; - int16_t j, len; - const float *pt_mel_fb; - float melS[NB_MEL_BANDS], mfcc[NB_MEL_BANDS]; - int16_t odv_cnt; - int16_t i_out[N_SMC_FEATURES], *p_out; - - /*------------------------------------------------------------------* - * Initialization - *------------------------------------------------------------------*/ - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /*------------------------------------------------------------------* - * State machine (sp_mus_state: -8 = INACTIVE, -7:-1 = UNSTABLE, 0:7 = ENTRY, 8 = STABLE ) - *------------------------------------------------------------------*/ - - if ( localVAD_HE_SAD ) - { - if ( relE < -20 ) - { - if ( hSpMusClas->sp_mus_state > 0 ) - { - if ( hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* energy is too low but we are in entry period -> reset the inactive counter to allow new entry later */ - hSpMusClas->inact_cnt = 0; - } - - /* energy is too low -> we are going to instable state */ - hSpMusClas->sp_mus_state = 0; - } - else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) - { - /* energy is still too low -> we are still in instable state */ - hSpMusClas->sp_mus_state--; - } - } - else if ( hSpMusClas->sp_mus_state <= 0 ) - { - if ( hSpMusClas->inact_cnt == 0 ) - { - - hSpMusClas->sp_mus_state = 1; - } - else - { - - hSpMusClas->sp_mus_state = HANG_LEN; - } - - hSpMusClas->inact_cnt = 12; - } - else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* we are inside an entry period -> increment the counter of entry frames */ - hSpMusClas->sp_mus_state++; - } - - if ( hSpMusClas->sp_mus_state < 0 && hSpMusClas->inact_cnt > 0 ) - { - hSpMusClas->inact_cnt--; - } - } - else - { - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - hSpMusClas->inact_cnt = 0; - } - else if ( hSpMusClas->inact_cnt > 0 ) - { - hSpMusClas->inact_cnt--; - } - - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - hSpMusClas->sp_mus_state = -HANG_LEN; - } - else if ( hSpMusClas->sp_mus_state > 0 ) - { - hSpMusClas->sp_mus_state = -1; - } - else if ( hSpMusClas->sp_mus_state > -HANG_LEN ) - { - /* we are in inactive state */ - hSpMusClas->sp_mus_state--; - } - } - - /* detect attacks based on relE */ - if ( relE > hSpMusClas->prev_relE ) - { - hSpMusClas->relE_attack_sum += relE - hSpMusClas->prev_relE; - } - else - { - hSpMusClas->relE_attack_sum = 0; - } - hSpMusClas->prev_relE = relE; - - /* update counter from last VAD 0->1 change */ - if ( hSpMusClas->prev_vad == 0 && localVAD_HE_SAD == 1 ) - { - hSpMusClas->vad_0_1_cnt = 1; - } - else if ( localVAD_HE_SAD == 1 && hSpMusClas->vad_0_1_cnt > 0 && hSpMusClas->vad_0_1_cnt < 50 ) - { - hSpMusClas->vad_0_1_cnt++; - } - else - { - hSpMusClas->vad_0_1_cnt = 0; - } - hSpMusClas->prev_vad = localVAD_HE_SAD; - - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && hSpMusClas->relE_attack_sum > 5.0f ) - { - hSpMusClas->relE_attack_cnt++; - - /* set flag only in the first X frames in a series */ - if ( hSpMusClas->relE_attack_cnt > 0 && hSpMusClas->relE_attack_cnt < 3 ) - { - relE_attack_flag = 1; - } - else - { - relE_attack_flag = 0; - } - } - else - { - hSpMusClas->relE_attack_cnt = 0; - relE_attack_flag = 0; - } - - hSpMusClas->prev_Etot = Etot; - - /*------------------------------------------------------------------* - * Preparation of the feature vector - *------------------------------------------------------------------*/ - - pFV = FV; - - /* [0] OL pitch */ - if ( relE_attack_flag || st->tc_cnt == 1 || st->tc_cnt == 2 ) - { - *pFV++ = (float) st->pitch[2]; - } - else - { - *pFV++ = (float) ( st->pitch[0] + st->pitch[1] + st->pitch[2] ) / 3.0f; - } - - /* [1] voicing */ - if ( relE_attack_flag || st->tc_cnt == 1 || st->tc_cnt == 2 ) - { - *pFV++ = st->voicing[2]; - } - else - { - *pFV++ = ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3.0f; - } - - /* [2,3,4,5,6] LSFs */ - *pFV++ = acosf( lsp_new[2] ); - *pFV++ = acosf( lsp_new[3] ); - *pFV++ = acosf( lsp_new[4] ); - *pFV++ = acosf( lsp_new[5] ); - *pFV++ = acosf( lsp_new[6] ); - - /* [7] cor_map_sum */ - *pFV++ = cor_map_sum; - - /* [8] non_sta */ - *pFV++ = non_sta; - - /* [9] epsP */ - *pFV++ = logf( epsP[14] + 1e-5f ) - logf( epsP[0] + 1e-5f ); - - /* [10,11,12] MFCCs */ - set_zero( melS, NB_MEL_BANDS ); - pt_mel_fb = mel_fb; - for ( i = 0; i < NB_MEL_BANDS; i++ ) - { - j = mel_fb_start[i]; - len = mel_fb_len[i]; - melS[i] = logf( dotp( &PS[j], pt_mel_fb, len ) + 1e-5f ); - pt_mel_fb += len; - } - - v_mult_mat( mfcc, melS, dct_mtx, NB_MEL_BANDS, NB_MEL_COEF ); - - *pFV++ = mfcc[2]; - *pFV++ = mfcc[6]; - *pFV++ = mfcc[12]; - - /* calculation of differential normalized power spectrum */ - sum_PS = 1e-5f; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - sum_PS += PS[i]; - } - - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - PS_norm[i] = PS[i] / sum_PS; - dPS[i] = fabsf( PS_norm[i] - hSpMusClas->past_PS[i - LOWEST_FBIN] ); - } - - /* [13] ps_diff (spectral difference) */ - ps_diff = 0; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - ps_diff += dPS[i]; - } - - *pFV++ = ps_diff; - - /* [14] ps_sta (spectral stationarity) */ - ps_sta = 0; - for ( i = LOWEST_FBIN; i < HIGHEST_FBIN; i++ ) - { - if ( PS_norm[i] > hSpMusClas->past_PS[i - LOWEST_FBIN] ) - { - ps_sta += PS_norm[i] / ( dPS[i] + 1e-5f ); - } - else - { - ps_sta += hSpMusClas->past_PS[i - LOWEST_FBIN] / ( dPS[i] + 1e-5f ); - } - } - - *pFV++ = logf( ps_sta + 1e-5f ); - mvr2r( &PS_norm[LOWEST_FBIN], hSpMusClas->past_PS, HIGHEST_FBIN - LOWEST_FBIN ); - - /* save ps_diff and ps_sta features for XTALK and UNCLR classifier */ - if ( hStereoClassif != NULL ) - { - if ( st->idchan == 0 ) - { - hStereoClassif->ps_diff_ch1 = ps_diff; - hStereoClassif->ps_sta_ch1 = logf( ps_sta + 1e-5f ); - } - else - { - hStereoClassif->ps_diff_ch2 = ps_diff; - hStereoClassif->ps_sta_ch2 = logf( ps_sta + 1e-5f ); - } - } - - /*------------------------------------------------------------------* - * Outlier detection based on feature histograms - *------------------------------------------------------------------*/ - - flag_odv = 0; - if ( localVAD_HE_SAD ) - { - pFV = FV; - pODV = hout_intervals; - p_out = i_out; - odv_cnt = 0; - for ( i = 0; i < N_SMC_FEATURES; i++ ) - { - if ( *pFV < pODV[0] || *pFV > pODV[1] ) - { - *p_out++ = i; - odv_cnt++; - } - - pFV++; - pODV += 2; - } - - /* set outlier flag */ - if ( odv_cnt >= 2 ) - { - flag_odv = 1; - - /* replace outlying features with values from the previous frame */ - for ( i = 0; i < odv_cnt; i++ ) - { - FV[i_out[i]] = hSpMusClas->prev_FV[i_out[i]]; - } - } - } - - /*------------------------------------------------------------------* - * Adaptive short-term mean filter on feature vector - *------------------------------------------------------------------*/ - - pFV = FV; - pFV_st = hSpMusClas->FV_st; - smc_st_mean_fact = SMC_ST_MEAN_FACT; - for ( i = 0; i < N_SMC_FEATURES; i++ ) - { - *pFV_st = smc_st_mean_fact * ( *pFV_st ) + ( 1 - smc_st_mean_fact ) * ( *pFV ); - - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && ( relE_attack_flag || flag_odv ) ) - { - /* strong attack or outlier frame during entry state -> features cannot be trusted but there is also no useful past info -> */ - /* -> do whatever you want because dlp will be reset to 0 anyway */ - pFV++; - pFV_st++; - } - else if ( hSpMusClas->sp_mus_state == HANG_LEN && ( st->tc_cnt == 1 || st->tc_cnt == 2 ) ) - { - /* energy attack in stable state -> use current features intead of the long-term average */ - pFV++; - pFV_st++; - } - else - { - *pFV++ = *pFV_st++; - } - } - - /* update */ - mvr2r( FV, hSpMusClas->prev_FV, N_SMC_FEATURES ); - - /*------------------------------------------------------------------* - * Non-linear power transformation (boxcox) on certain features - *------------------------------------------------------------------*/ - - pFV = FV; - for ( i = 0; i < N_SMC_FEATURES; i++ ) - { - if ( bcox_lmbd[i] != 0 ) - { - *pFV -= bcox_add_cnst[i]; - if ( *pFV < 1 ) - { - *pFV = 1; - } - *pFV = ( powf( *pFV, bcox_lmbd[i] ) - 1 ) / bcox_lmbd[i]; - } - - pFV++; - } - - /*------------------------------------------------------------------* - * Scaling of the feature vector - * PCA - *------------------------------------------------------------------*/ - - pFV = FV; - for ( i = 0; i < N_SMC_FEATURES; i++ ) - { - /* Standard scaler - mean and variance normalization */ - *pFV = ( *pFV - sm_means[i] ) / sm_scale[i]; - pFV++; - - /* MinMax sclaer - mean and variance normalization */ - /**pFV = *pFV * sm_scale[i] + sm_min[i];*/ - /*pFV++;*/ - } - - /* PCA */ - v_sub( FV, pca_mean_, FV, N_SMC_FEATURES ); - v_mult_mat( FV, FV, pca_components_, N_SMC_FEATURES, N_PCA_COEF ); - - /*------------------------------------------------------------------* - * Calculation of posterior probability - * Log-probability - *------------------------------------------------------------------*/ - - /* run loop for all mixtures (for each mixture, calculate the probability of speech, music and noise) */ - lps = lpm = lpn = 0; - for ( m = 0; m < N_SMC_MIXTURES; m++ ) - { - v_sub( FV, &means_speech[m * N_PCA_COEF], fvm, N_PCA_COEF ); - lprob = dot_product_cholesky( fvm, &prec_chol_speech[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); - ps[m] = logf( weights_speech[m] ) + log_det_chol_speech[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; - - v_sub( FV, &means_music[m * N_PCA_COEF], fvm, N_PCA_COEF ); - lprob = dot_product_cholesky( fvm, &prec_chol_music[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); - pm[m] = logf( weights_music[m] ) + log_det_chol_music[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; - - v_sub( FV, &means_noise[m * N_PCA_COEF], fvm, N_PCA_COEF ); - lprob = dot_product_cholesky( fvm, &prec_chol_noise[m * ( N_PCA_COEF * N_PCA_COEF + N_PCA_COEF ) / 2], N_PCA_COEF ); - pn[m] = logf( weights_noise[m] ) + log_det_chol_noise[m] - 0.5f * N_PCA_COEF * logf( PI2 ) - 0.5f * lprob; - } - - lps = logsumexp( ps, N_SMC_MIXTURES ); - lpm = logsumexp( pm, N_SMC_MIXTURES ); - lpn = logsumexp( pn, N_SMC_MIXTURES ); - - *high_lpn_flag = 0; - if ( lpn > lps && lpn > lpm ) - { - *high_lpn_flag = 1; - } - - hSpMusClas->lpm = lpm; - hSpMusClas->lps = lps; - hSpMusClas->lpn = lpn; - - /* determine HQ Generic speech class */ - if ( st->hHQ_core != NULL ) - { - if ( lps > lpm + 0.5f ) - { - st->hHQ_core->hq_generic_speech_class = 1; - } - else - { - st->hHQ_core->hq_generic_speech_class = 0; - } - } - - /*------------------------------------------------------------------* - * Decision without hangover - * Weighted decision - *------------------------------------------------------------------*/ - - /* decision without hangover (0 - speech/noise, 1 - music) */ - if ( !localVAD_HE_SAD || Etot < 10 || ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN && ( relE_attack_flag || flag_odv ) ) ) - { - dlp = 0; - } - else - { - dlp = lpm - lps + DLP_BIAS; - - if ( dlp > 30.0f ) - { - dlp = 30.0f; - } - else if ( dlp < -30.0f ) - { - dlp = -30.0f; - } - } - - dec = dlp > 0; - - /* calculate weight based on relE (higher relE -> lower weight, lower relE -> higher weight) */ - wrelE = lin_interp( relE, 15.0f, 0.9f, -15.0f, 0.99f, 1 ); - - /* calculate weight based on drops of dlp (close to 1 during sudden drops of dlp, close to 0 otherwise) */ - hSpMusClas->dlp_mean_ST = 0.8f * hSpMusClas->dlp_mean_ST + 0.2f * dlp; - hSpMusClas->lt_dec_thres = hSpMusClas->dlp_mean_ST; - - if ( dlp < 0 && dlp < hSpMusClas->dlp_mean_ST ) - { - if ( hSpMusClas->dlp_mean_ST > 0 ) - { - hSpMusClas->wdrop = -dlp; - } - else if ( hSpMusClas->wdrop > 0 ) - { - hSpMusClas->wdrop += hSpMusClas->dlp_mean_ST - dlp; - } - } - else - { - hSpMusClas->wdrop = 0; - } - - wdrop = lin_interp( hSpMusClas->wdrop, 15.0f, 0.7f, 0.0f, 1.0f, 1 ); - - /* calculate weight based on rises of dlp (close to 1 during sudden rise of dlp, close to 0 otherwise) */ - if ( hSpMusClas->sp_mus_state == HANG_LEN && hSpMusClas->dlp_mean_ST > 0 && hSpMusClas->dlp_mean_ST > hSpMusClas->past_dlp_mean_ST[0] ) - { - if ( hSpMusClas->past_dlp_mean_ST[0] < 0 ) - { - hSpMusClas->wrise = hSpMusClas->dlp_mean_ST; - } - else if ( hSpMusClas->wrise > 0 ) - { - hSpMusClas->wrise += hSpMusClas->dlp_mean_ST - hSpMusClas->past_dlp_mean_ST[0]; - } - } - else - { - hSpMusClas->wrise = 0; - } - - wrise = lin_interp( hSpMusClas->wrise, 5.0f, 0.95f, 0.0f, 1.0f, 1 ); - - /* combine weights into one */ - wght = wrelE * wdrop * wrise; - - /* ratio of delta means vs. delta variances */ - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - hSpMusClas->dlp_mean_LT = dlp; - hSpMusClas->dlp_var_LT = 0; - } - - hSpMusClas->dlp_mean_LT = 0.9f * hSpMusClas->dlp_mean_LT + 0.1f * dlp; - ftmp = dlp - hSpMusClas->dlp_mean_LT; - hSpMusClas->dlp_var_LT = 0.9f * hSpMusClas->dlp_var_LT + 0.1f * ( ftmp * ftmp ); - - if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - dlp_mean2var = 0; - } - else - { - dlp_mean2var = fabsf( hSpMusClas->dlp_mean_LT ) / ( sqrtf( fabsf( hSpMusClas->dlp_var_LT ) ) + 1.0f ); - } - - if ( dlp_mean2var > 15.0f ) - { - /* decrease the weight little bit when the classifier indicates "strong speech" or "strong music" */ - wght *= 0.9f; - } - - if ( wght > 1.0f ) - { - wght = 1.0f; - } - else if ( wght < 0.01f ) - { - wght = 0.01f; - } - - if ( Etot < 10 ) - { - /* silence */ - wght = 0.92f; - } - - /* calculate weighted decision */ - hSpMusClas->wdlp_0_95_sp = wght * hSpMusClas->wdlp_0_95_sp + ( 1 - wght ) * dlp; - - /* xtalk classifier: apply long hysteresis to prevent LRTD on music */ - hSpMusClas->wdlp_xtalk = 0.995f * hSpMusClas->wdlp_xtalk + 0.005f * dlp; - - /*------------------------------------------------------------------* - * Final speech/music decision - *------------------------------------------------------------------*/ - - if ( flag_spitch ) - { - hSpMusClas->flag_spitch_cnt = 5; - } - else if ( hSpMusClas->flag_spitch_cnt > 0 ) - { - hSpMusClas->flag_spitch_cnt--; - } - - if ( Etot < 10 ) - { - /* silence */ - dec = 0; - } - else if ( hSpMusClas->sp_mus_state > 0 && hSpMusClas->sp_mus_state < HANG_LEN ) - { - /* entry state -> final decision is calculated based on weighted average of past non-binary decisions */ - ftmp = w_spmus[hSpMusClas->sp_mus_state - 1][0] * dlp; - ftmp += dotp( &w_spmus[hSpMusClas->sp_mus_state - 1][1], hSpMusClas->past_dlp, HANG_LEN - 1 ); - if ( ftmp > 2.0f ) - { - if ( dlp > 2.0f ) - { - dec = 2; - } - else - { - dec = 1; - } - } - else - { - dec = 0; - } - } - else - { - /* stable active state */ - if ( hSpMusClas->past_dec[0] == 0 && hSpMusClas->past_dec[1] == 0 && hSpMusClas->past_dec[2] == 0 && - ( ( hSpMusClas->flag_spitch_cnt > 0 && hSpMusClas->wdlp_0_95_sp > 3.4f ) || ( hSpMusClas->flag_spitch_cnt == 0 && hSpMusClas->wdlp_0_95_sp > 2.1f ) ) ) - { - /* switching from speech to unclear */ - dec = 1; - } - else if ( hSpMusClas->past_dec[0] == 0 && hSpMusClas->vad_0_1_cnt < 50 && hSpMusClas->relE_attack_sum == 0.0f && hSpMusClas->wdlp_0_95_sp > 1.0f ) - { - /* switch from speech to unclear also during slowly rising weak music onsets */ - dec = 1; - } - else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp > 2.5f ) - { - /* switching from unclear to music */ - dec = 2; - } - else if ( hSpMusClas->past_dec[0] == 2 && hSpMusClas->past_dec[1] == 2 && hSpMusClas->past_dec[2] == 2 && hSpMusClas->wdlp_0_95_sp < -1.0f ) - { - /* switching from music to unclear */ - dec = 1; - } - else if ( hSpMusClas->past_dec[0] == 1 && hSpMusClas->wdlp_0_95_sp < -2.5f ) - { - /* switching from unclear to speech */ - dec = 0; - } - else - { - dec = hSpMusClas->past_dec[0]; - } - } - - /*------------------------------------------------------------------* - * raw S/M decision based on smoothed GMM score - *------------------------------------------------------------------*/ - - if ( dec == 0 || st->hSpMusClas->wdlp_0_95_sp <= 0 ) - { - st->sp_aud_decision0 = 0; - st->sp_aud_decision1 = 0; - } - else - { - st->sp_aud_decision0 = 1; - st->sp_aud_decision1 = 1; - } - - /*------------------------------------------------------------------* - * Updates - *------------------------------------------------------------------*/ - - /* update buffer of past non-binary decisions */ - mvr2r( &hSpMusClas->past_dlp[0], &hSpMusClas->past_dlp[1], HANG_LEN - 2 ); - hSpMusClas->past_dlp[0] = dlp; - - mvr2r( &hSpMusClas->past_dlp_mean_ST[0], &hSpMusClas->past_dlp_mean_ST[1], HANG_LEN - 2 ); - hSpMusClas->past_dlp_mean_ST[0] = hSpMusClas->dlp_mean_ST; - - /* update buffer of past binary decisions */ - mvs2s( &hSpMusClas->past_dec[0], &hSpMusClas->past_dec[1], HANG_LEN - 2 ); - hSpMusClas->past_dec[0] = dec; - - - return dec; -} - -/*---------------------------------------------------------------------* - * ivas_smc_mode_selection() - * - * 2nd stage speech/music classifier (select coding mode (ACELP, GSC and TCX) based on S/M classification) - * output (sp_aud_decision1 - sp_aud_decision2 -> coding mode): - * 0 - 0 -> ACELP - * 1 - 0 -> GSC - * 1 - 1 -> TCX - *---------------------------------------------------------------------*/ - -void ivas_smc_mode_selection( - Encoder_State *st, /* i/o: encoder state structure */ - const int32_t element_brate, /* i : element bitrate */ - int16_t smc_dec, /* i : raw decision of the 1st stage classifier*/ - const float relE, /* i : relative frame energy */ - const float Etot, /* i : total frame energy */ - int16_t *attack_flag, /* i/o: attack flag (GSC or TC) */ - const float *inp, /* i : input signal */ - const float S_map[], /* i : short-term correlation map */ - const int16_t flag_spitch /* i : flag to indicate very short stable pitch*/ -) -{ - int16_t attack; - float ton; - int16_t i; - float S_p2a, S_max, S_ave; - float thr_sp2a; - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /* initialization */ - *attack_flag = 0; - st->sp_aud_decision2 = 0; - - /* signal stability estimation */ - stab_est( Etot, hSpMusClas->gsc_lt_diff_etot, &hSpMusClas->gsc_mem_etot, &hSpMusClas->gsc_nb_thr_3, &hSpMusClas->gsc_nb_thr_1, hSpMusClas->gsc_thres, &hSpMusClas->gsc_last_music_flag, st->vad_flag ); - - /* calculate variance of correlation */ - var_cor_calc( st->old_corr, &hSpMusClas->mold_corr, hSpMusClas->var_cor_t, &hSpMusClas->high_stable_cor ); - - /* attack detection */ - attack = attack_det( inp, st->clas, st->localVAD, st->coder_type, 0, st->element_mode, st->clas, hSpMusClas->finc_prev, &hSpMusClas->lt_finc, &hSpMusClas->last_strong_attack ); - - /* tonal detector */ - ton = tonal_det( S_map, st->vad_flag, hSpMusClas->tod_S_map_lt, &hSpMusClas->tod_thr_lt, &hSpMusClas->tod_weight, &hSpMusClas->tod_S_mass_prev, &hSpMusClas->tod_S_mass_lt ); - - - /* calculate spectral peak-to-average ratio */ - for ( i = 0; i < TOD_NSPEC; i++ ) - { - st->hSpMusClas->tod_lt_Bin_E[i] = P2A_FACT * st->hSpMusClas->tod_lt_Bin_E[i] + ( 1 - P2A_FACT ) * st->Bin_E[i]; - } - - maximum( st->hSpMusClas->tod_lt_Bin_E, TOD_NSPEC, &S_max ); - S_ave = sum_f( st->hSpMusClas->tod_lt_Bin_E, TOD_NSPEC ) / TOD_NSPEC; - S_p2a = S_max - S_ave; - - if ( element_brate <= IVAS_16k4 ) - { - thr_sp2a = THR_P2A_HIGH; - } - else - { - thr_sp2a = THR_P2A; - } - - /* initial 3-way selection of coding modes (ACELP/GSC/TCX) */ - if ( relE > -10.0f && ( S_p2a > thr_sp2a || ton > hSpMusClas->tod_thr_lt ) ) - { - /* select TCX to encode extremely peaky signals or strongly tonal signals */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 1; - } - else if ( smc_dec == SPEECH ) - { - /* select ACELP to encode speech */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - } - else if ( smc_dec == SPEECH_OR_MUSIC ) - { - /* select GSC to encode "unclear" segments (classifier's score on the borderline) */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 0; - } - else - { - /* select TCX to encode music */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 1; - } - - /* change decision from GSC to ACELP/TCX in some special cases */ - if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) - { - if ( hSpMusClas->ener_RAT < 0.18f && hSpMusClas->lt_dec_thres > 15.0f ) - { - /* prevent GSC on strong music with almost no content below 1kHz */ - st->sp_aud_decision2 = 1; - } - else if ( flag_spitch ) - { - /* prevent GSC on signals with very short and stable high pitch period */ - if ( hSpMusClas->wdlp_0_95_sp < 2.5f ) - { - /* select ACELP instead */ - st->sp_aud_decision1 = 0; - } - else - { - /* select TCX instead */ - st->sp_aud_decision2 = 1; - } - } - else if ( hSpMusClas->high_stable_cor && st->pitch[0] >= 130 ) - { - /* prevent GSC in highly correlated signal with low energy variation */ - /* this is basically a patch against bassoon-type of music */ - st->sp_aud_decision2 = 1; - } - } - - /* change decision from GSC to ACELP TC during attacks/onsets */ - if ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) - { - if ( ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] > 4.5f ) && - ( hSpMusClas->gsc_lt_diff_etot[MAX_LT - 1] - hSpMusClas->gsc_lt_diff_etot[MAX_LT - 2] > 10.0f ) ) - { - if ( st->tc_cnt == 1 ) - { - /* do ACELP TC coding instead of GC/VC if onset has been already declared before */ - st->sp_aud_decision1 = 0; - st->coder_type = TRANSITION; - } - else - { - if ( attack >= ATT_3LSUB_POS ) - { - /* do ACELP TC coding also if attack is located in the last subframe */ - st->sp_aud_decision1 = 0; - *attack_flag = attack + 1; - st->coder_type = TRANSITION; - } - else if ( attack >= ATT_SEG_LEN / 2 ) - { - /* do GSC coding if attack is located after the first quarter of the first subframe */ - /* (pre-echo will be treated at the decoder side) */ - *attack_flag = 31; - *attack_flag = attack + 1; - } - } - } - } - - if ( st->localVAD == 1 && st->coder_type == GENERIC && attack > 0 /*&& *attack_flag < 32*/ /*&& st->tc_cnt != 2*/ && !( st->sp_aud_decision2 == 1 && ton > 0.65f ) ) - { - /* change ACELP coder_type to TC if attack has been detected */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - - st->coder_type = TRANSITION; - *attack_flag = attack + 1; - } - -#ifdef DEBUGGING - if ( st->idchan == 0 && st->coder_type != INACTIVE ) - { - if ( st->force == FORCE_GSC && element_brate < IVAS_24k4 ) - { - /* enforce GSC */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 0; - } - else if ( st->force == FORCE_SPEECH && ( st->sp_aud_decision1 == 1 || st->sp_aud_decision2 == 1 ) ) - { - if ( element_brate < IVAS_24k4 ) - { - /* convert TCX to GSC */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 0; - } - else - { - /* convert TCX to ACELP */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - } - } - else if ( st->force == FORCE_MUSIC ) - { - /* enforce TCX */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 1; - } - } -#endif - - /* set GSC noisy speech flag on unvoiced SWB segments */ - st->GSC_noisy_speech = 0; - if ( st->vad_flag == 1 && element_brate <= IVAS_16k4 && st->lp_noise > 30.0f && st->sp_aud_decision1 == 0 && st->bwidth >= SWB && st->coder_type_raw == UNVOICED ) - { - st->GSC_noisy_speech = 1; - } - - /* set GSC submode */ - if ( st->element_mode > EVS_MONO && ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) && st->total_brate > STEREO_GSC_BIT_RATE_ALLOC ) /* below STEREO_GSC_BIT_RATE_ALLOC, fall back on normal GSC */ - { - st->GSC_IVAS_mode = 1; - if ( st->hSpMusClas->wdlp_0_95_sp > 0.0f ) - { - /* music-like content */ - st->GSC_IVAS_mode = 3; - } - else if ( st->tc_cnt > 0 ) - { - /* likely presence of an onset, GSC bit allocation will be more focused on LF */ - st->GSC_IVAS_mode = 2; - } - - if ( st->coder_type_raw == UNVOICED && st->sp_aud_decision0 == 0 /*&& st->GSC_IVAS_mode < 3*/ ) - { - st->GSC_noisy_speech = 1; - } - else - { - st->GSC_noisy_speech = 0; - } - } - - /* set coder_type to AUDIO when GSC is selected (st->core will be set later in the decision matrix) */ - if ( ( st->sp_aud_decision1 == 1 && st->sp_aud_decision2 == 0 ) || st->GSC_noisy_speech ) - { - st->coder_type = AUDIO; - if ( st->hGSCEnc != NULL && st->GSC_noisy_speech == 0 ) /* In case of GSC_noisy_speech, NOISE_LEVEL should remain at NOISE_LEVEL_SP3 */ - { - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0; - } - } - - return; -} - -/*------------------------------------------------------------------------* - * music_mixed_classif_improv() - * - * Improve 1st stage speech/music decision for mixed&music signals - *------------------------------------------------------------------------*/ - -static void music_mixed_classif_improv( - Encoder_State *st, /* i/o: Encoder state structure */ - const float *new_inp, /* i : new input signal */ - const float *epsP, /* i : LP prediction error */ - const float etot, /* i : total frame energy */ - const float old_cor, /* i : normalized correlation */ - const float cor_map_sum /* i : correlation map sum */ -) -{ - int16_t i, dec, len, percus_flag; - float p2v_map[128], ftmp, ftmp1, lt_diff, log_max_spl, epsP_tilt, max_spl; - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /* find sample with maximum absolute amplitude */ - max_spl = 0; - for ( i = 0; i < L_FRAME; i++ ) - { - if ( fabs( new_inp[i] ) > max_spl ) - { - max_spl = fabsf( new_inp[i] ); - } - } - - /* music is considered only appearing in high SNR condition and active signal */ - if ( st->vad_flag == 0 || st->lp_speech - st->lp_noise < 25 ) - { - hSpMusClas->dec_mov = 0.5f; - hSpMusClas->dec_mov1 = 0.5f; - - if ( st->vad_flag == 0 ) - { - hSpMusClas->onset_cnt = 0; - } - - return; - } - - hSpMusClas->onset_cnt++; - - if ( hSpMusClas->onset_cnt > 9 ) - { - hSpMusClas->onset_cnt = 9; - } - - if ( hSpMusClas->onset_cnt == 1 ) - { - set_f( hSpMusClas->buf_flux, -100, BUF_LEN ); - } - - /* spectral analysis */ - spec_analysis( st->Bin_E, p2v_map ); - - /* percussive music detection */ - log_max_spl = 20 * logf( max_spl + 0.0001f ); - lt_diff = log_max_spl - hSpMusClas->mov_log_max_spl; - - for ( i = 0; i < 3; i++ ) - { - hSpMusClas->buf_etot[i] = hSpMusClas->buf_etot[i + 1]; - } - hSpMusClas->buf_etot[i] = etot; - - percus_flag = 0; - if ( hSpMusClas->buf_etot[1] - hSpMusClas->buf_etot[0] > 6 && hSpMusClas->buf_etot[2] < hSpMusClas->buf_etot[1] && hSpMusClas->buf_etot[1] - st->lp_speech > 3 ) - { - if ( hSpMusClas->buf_etot[1] - hSpMusClas->buf_etot[3] > 3 && hSpMusClas->buf_etot[3] < hSpMusClas->buf_etot[2] && 0.5f * ( 0.5f * ( st->voicing[0] + st->voicing[1] ) + old_cor ) < 0.75f ) - { - if ( hSpMusClas->dec_mov > 0.8f ) - { - percus_flag = 1; - } - else if ( old_cor < 0.75f && st->voicing[0] < 0.75f && st->voicing[1] < 0.75f && hSpMusClas->old_lt_diff[0] > 10 ) - { - percus_flag = 1; - } - } - } - - /* sound attack detection */ - if ( hSpMusClas->buf_etot[3] - hSpMusClas->buf_etot[2] > 6 && hSpMusClas->dec_mov > 0.9f && etot - st->lp_speech > 5 && hSpMusClas->old_lt_diff[0] > 5 ) - { - hSpMusClas->attack_hangover = 3; - } - - if ( st->voicing[0] > 0.9f && st->voicing[1] > 0.9f ) - { - if ( log_max_spl > hSpMusClas->mov_log_max_spl ) - { - hSpMusClas->mov_log_max_spl = 0.75f * hSpMusClas->mov_log_max_spl + ( 1 - 0.75f ) * log_max_spl; - } - else - { - hSpMusClas->mov_log_max_spl = 0.995f * hSpMusClas->mov_log_max_spl + ( 1 - 0.995f ) * log_max_spl; - } - } - - hSpMusClas->old_lt_diff[0] = hSpMusClas->old_lt_diff[1]; - hSpMusClas->old_lt_diff[1] = lt_diff; - - /* calculate and buffer spectral energy fluctuation */ - flux( st->Bin_E, p2v_map, hSpMusClas->old_Bin_E, hSpMusClas->buf_flux, hSpMusClas->attack_hangover, hSpMusClas->dec_mov ); - - hSpMusClas->attack_hangover--; - if ( hSpMusClas->attack_hangover < 0 ) - { - hSpMusClas->attack_hangover = 0; - } - - /* identify flux buffer status */ - len = 0; - for ( i = BUF_LEN - 1; i >= 0 && hSpMusClas->buf_flux[i] >= 0; i-- ) - { - len++; - } - - /* reset flux buffer if percussive music is detected */ - if ( percus_flag == 1 ) - { - set_f( &hSpMusClas->buf_flux[BUF_LEN - len], 5, len ); - } - - /* calculate and buffer the tilt of residual LP analysis energies */ - ftmp = 0.00001f; - ftmp1 = 0; - for ( i = 1; i < 16; i++ ) - { - ftmp += epsP[i] * epsP[i]; - ftmp1 += epsP[i] * epsP[i + 1]; - } - - epsP_tilt = ftmp1 / ftmp; - - for ( i = 0; i < BUF_LEN - 1; i++ ) - { - hSpMusClas->buf_epsP_tilt[i] = hSpMusClas->buf_epsP_tilt[i + 1]; - } - hSpMusClas->buf_epsP_tilt[i] = epsP_tilt; - - /* calculate and buffer highband spectral peakness */ - tonal_dist( p2v_map, hSpMusClas->buf_pkh, hSpMusClas->buf_Ntonal, hSpMusClas->buf_Ntonal2, hSpMusClas->buf_Ntonal_lf ); - - /* buffer sum of correlation map */ - for ( i = 0; i < BUF_LEN - 1; i++ ) - { - hSpMusClas->buf_cor_map_sum[i] = hSpMusClas->buf_cor_map_sum[i + 1]; - } - hSpMusClas->buf_cor_map_sum[i] = cor_map_sum; - - /* buffer voicing metric */ - for ( i = 0; i < 9; i++ ) - { - hSpMusClas->buf_dlp[i] = hSpMusClas->buf_dlp[i + 1]; - } - hSpMusClas->buf_dlp[i] = hSpMusClas->lps - hSpMusClas->lpm; - - /* classification */ - dec = mode_decision( st, len, &hSpMusClas->dec_mov, hSpMusClas->buf_flux, hSpMusClas->buf_epsP_tilt, hSpMusClas->buf_pkh, hSpMusClas->buf_cor_map_sum, hSpMusClas->buf_Ntonal, hSpMusClas->buf_Ntonal2, hSpMusClas->buf_Ntonal_lf, hSpMusClas->buf_dlp ); - - /* update long term moving average of the classification decisions */ - if ( len > 30 ) - { - hSpMusClas->dec_mov = 0.97f * hSpMusClas->dec_mov + ( 1 - 0.97f ) * dec; - hSpMusClas->dec_mov1 = 0.97f * hSpMusClas->dec_mov1 + ( 1 - 0.97f ) * dec; - } - - /* update long-term unvoiced counter */ - if ( ( st->coder_type_raw == UNVOICED || st->coder_type_raw == INACTIVE ) && etot > 1.5f && hSpMusClas->buf_Ntonal2[59] < 2 ) - { - hSpMusClas->UV_cnt1 -= 8; - } - else - { - hSpMusClas->UV_cnt1++; - } - - if ( hSpMusClas->UV_cnt1 > 300 ) - { - hSpMusClas->UV_cnt1 = 300; - } - else if ( hSpMusClas->UV_cnt1 < 0 ) - { - hSpMusClas->UV_cnt1 = 0; - } - - hSpMusClas->LT_UV_cnt1 = 0.9f * hSpMusClas->LT_UV_cnt1 + 0.1f * hSpMusClas->UV_cnt1; - - /* revert classification decision due to long-term unvoiced counter */ - if ( dec == 1 && hSpMusClas->dec_mov1 < 0.2f && hSpMusClas->LT_UV_cnt1 < 200 ) - { - dec = 0; - } - - /* overwrite 1st stage speech/music decision to music */ - if ( dec == 1 ) - { - st->sp_aud_decision1 = 1; - } - - return; -} - - -/*---------------------------------------------------------------------* - * spec_analysis() - * - * Spectral analysis for mixed/music classification improvement - *---------------------------------------------------------------------*/ - -static void spec_analysis( - float *Bin_E, /* i : log energy spectrum of the current frame */ - float *p2v_map /* o : spectral peakiness map */ -) -{ - int16_t i, k, m; - float peak[L_FFT / 4 + 1]; - float valley[L_FFT / 4 + 1]; - int16_t peak_idx[L_FFT / 4 + 1]; - int16_t valey_idx[L_FFT / 4 + 1]; - float p2v[L_FFT / 4 + 1]; - - /* find spectral peaks */ - k = 0; - for ( i = 1; i < L_FFT / 2 - 2; i++ ) - { - if ( Bin_E[i] > Bin_E[i - 1] && Bin_E[i] > Bin_E[i + 1] ) - { - peak[k] = Bin_E[i]; - peak_idx[k] = i; - k++; - } - } - assert( k + 1 < L_FFT / 4 + 1 ); - peak_idx[k] = -1; - peak_idx[k + 1] = -1; - - if ( k == 0 ) - { - for ( i = 0; i < L_FFT / 2 - 1; i++ ) - { - p2v_map[i] = 0; - } - - return; - } - - /* find spectral valleys */ - m = 0; - if ( Bin_E[0] < Bin_E[1] ) - { - valley[0] = Bin_E[0]; - valey_idx[0] = 0; - m++; - } - - k = L_FFT / 2 - 2; - for ( i = L_FFT / 2 - 3; i >= 0 && Bin_E[i + 1] > Bin_E[i]; i-- ) - { - k = i; - } - - for ( i = 1; i < k; i++ ) - { - if ( Bin_E[i] < Bin_E[i - 1] && Bin_E[i] < Bin_E[i + 1] ) - { - valley[m] = Bin_E[i]; - valey_idx[m] = i; - m++; - } - } - - valley[m] = Bin_E[k]; - valey_idx[m] = k; - - /* find spectral peak to valley distances */ - k = 0; - for ( i = 0; i < m; i++ ) - { - if ( peak_idx[k] > valey_idx[i] && peak_idx[k] < valey_idx[i + 1] ) - { - p2v[k] = 2 * peak[k] - valley[i] - valley[i + 1]; - k++; - } - } - - for ( i = 0; i < L_FFT / 2 - 1; i++ ) - { - p2v_map[i] = 0; - } - - for ( i = 0; i < k; i++ ) - { - p2v_map[peak_idx[i]] = p2v[i]; - } - - return; -} - -/*---------------------------------------------------------------------* - * flux() - * - * Calculation of spectral flux - *---------------------------------------------------------------------*/ - -static void flux( - float *Bin_E, /* i : log energy spectrum of the current frame */ - float *p2v_map, /* i : spectral peakiness map */ - float *old_Bin_E, /* i/o: log energy spectrum of the frame 60ms ago */ - float *buf_flux, /* i/o: buffer storing spectral energy fluctuation */ - int16_t attack_hangover, /* i/o: hangover preventing flux buffering */ - float dec_mov /* i/o: moving average of classifier decision */ -) -{ - int16_t i; - float *pt1, *pt2, *pt3, *pt4, *pt5, *pt6; - float flux; - int16_t cnt; - - /* calculate flux */ - flux = 0; - cnt = 0; - for ( i = 0; i < N_OLD_BIN_E; i++ ) - { - if ( p2v_map[i] != 0 ) - { - flux += fabsf( Bin_E[i] - old_Bin_E[i] ); - cnt++; - } - } - - if ( cnt == 0 ) - { - flux = 5; - } - else - { - flux = flux / (float) cnt; - } - - if ( flux > 20 && dec_mov > 0.8f ) - { - flux = 20; - } - - /* update old Bin_E buffer */ - pt1 = old_Bin_E; - pt2 = old_Bin_E + N_OLD_BIN_E; - pt3 = Bin_E; - pt4 = old_Bin_E + N_OLD_BIN_E; - pt5 = old_Bin_E + 2 * N_OLD_BIN_E; - pt6 = old_Bin_E + 2 * N_OLD_BIN_E; - - for ( i = 0; i < N_OLD_BIN_E; i++ ) - { - *pt1++ = *pt2++; - *pt4++ = *pt5++; - *pt6++ = *pt3++; - } - - /* update flux buffer */ - if ( attack_hangover <= 0 ) - { - for ( i = 0; i < BUF_LEN - 1; i++ ) - { - buf_flux[i] = buf_flux[i + 1]; - } - - buf_flux[i] = flux; - } - - return; -} - - -/*---------------------------------------------------------------------* - * tonal_dist() - * - * Calculation of spectral distance - *---------------------------------------------------------------------*/ - -static void tonal_dist( - float *p2v_map, /* i : spectral peakiness map */ - float *buf_pkh, /* i/o: buffer storing highband spectral peakiness */ - float *buf_Ntonal, /* i/o: buffer storing No.of 1st spectral tone */ - float *buf_Ntonal2, /* i/o: buffer storing No.of 2nd spectral tone */ - float *buf_Ntonal_lf /* i/o: buffer storing low band spectral tone ratio */ -) -{ - int16_t i; - float pk; - int16_t Ntonal; - int16_t Ntonal2; - int16_t Ntonal_lf; - - /* find number of tonals, number of tonals at low-band, - spectral peakiness at high-band */ - pk = 0; - Ntonal = 0; - Ntonal2 = 0; - Ntonal_lf = 0; - for ( i = 0; i < 64; i++ ) - { - if ( p2v_map[i] > 55 ) - { - Ntonal++; - } - - if ( p2v_map[i] > 80 ) - { - Ntonal2++; - Ntonal_lf++; - } - } - - for ( i = 64; i < 127; i++ ) - { - if ( p2v_map[i] != 0 ) - { - pk += p2v_map[i]; - } - - if ( p2v_map[i] > 55 ) - { - Ntonal++; - } - - if ( p2v_map[i] > 80 ) - { - Ntonal2++; - } - } - - /* update buffers */ - for ( i = 0; i < BUF_LEN - 1; i++ ) - { - buf_pkh[i] = buf_pkh[i + 1]; - buf_Ntonal[i] = buf_Ntonal[i + 1]; - buf_Ntonal2[i] = buf_Ntonal2[i + 1]; - buf_Ntonal_lf[i] = buf_Ntonal_lf[i + 1]; - } - - buf_pkh[i] = pk; - buf_Ntonal[i] = (float) Ntonal; - buf_Ntonal2[i] = (float) Ntonal2; - buf_Ntonal_lf[i] = (float) Ntonal_lf; - - return; -} - - -/*---------------------------------------------------------------------* - * mode_decision() - * - * Decision about internal mode of the mixed/music classifier improvement - *---------------------------------------------------------------------*/ - -static int16_t mode_decision( - Encoder_State *st, - int16_t len, /* i : buffering status */ - float *dec_mov, /* i/o: moving average of classifier decision */ - float *buf_flux, /* i : buffer storing spectral energy fluctuation */ - float *buf_epsP_tilt, /* i : buffer storing LP prediciton error tilt */ - float *buf_pkh, /* i : buffer storing highband spectral peakiness */ - float *buf_cor_map_sum, /* i : buffer storing correlation map sum */ - float *buf_Ntonal, /* i : buffer storing No.of 1st spectral tone */ - float *buf_Ntonal2, /* i : buffer storing No.of 2nd spectral tone */ - float *buf_Ntonal_lf, /* i : buffer storing low band spectral tone ratio */ - float *buf_dlp /* i : buffer storing voicing estimate */ -) -{ - int16_t mode; - int16_t i; - int16_t voiced_cnt; - float M_pkh; - float M_cor_map_sum; - float M_Ntonal; - float M_flux; - float V_epsP_tilt; - float lf_Ntonal_ratio; - - mode = *dec_mov > 0.5f; - - if ( len <= 5 ) - { - return ( mode ); - } - else if ( len < 10 ) - { - M_pkh = mean( buf_pkh + BUF_LEN - len, len ); - M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - len, len ); - M_Ntonal = mean( buf_Ntonal + BUF_LEN - len, len ); - V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - len, len ); - - voiced_cnt = 0; - for ( i = 9; i > 3; i-- ) - { - if ( buf_dlp[i] > 0.0f ) - { - voiced_cnt++; - } - } - - if ( ( M_pkh > 1100 || V_epsP_tilt < 0.00008f || M_cor_map_sum > 100 ) && voiced_cnt < 4 ) - { - mode = 1; - } - else if ( M_Ntonal > 27 && voiced_cnt < 4 ) - { - mode = 1; - } - } - else - { - voiced_cnt = 0; - for ( i = 0; i < 10; i++ ) - { - if ( buf_dlp[i] > 0.0f ) - { - voiced_cnt++; - } - } - - M_flux = mean( &buf_flux[BUF_LEN - 10], 10 ); - M_pkh = mean( buf_pkh + BUF_LEN - 10, 10 ); - M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - 10, 10 ); - V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - 10, 10 ); - - if ( ( M_flux < 8.5f || ( V_epsP_tilt < 0.001f && M_flux < 12.0f ) || M_pkh > 1050 || M_cor_map_sum > 100 ) && voiced_cnt < 3 && mean( &buf_flux[55], 5 ) < 15 ) - { - mode = 1; - *dec_mov = 1; - return ( mode ); - } - - if ( M_flux > 16.0f || ( M_flux > 15 && voiced_cnt > 2 ) || mean( &buf_flux[55], 5 ) > 19.0f || ( buf_flux[59] >= 20 && st->hSpMusClas->lps - st->hSpMusClas->lpm > 0 ) ) - { - *dec_mov = 0; - mode = 0; - return ( mode ); - } - - for ( i = 10; i < len; i++ ) - { - M_flux = mean( &buf_flux[BUF_LEN - i], i ); - M_pkh = mean( buf_pkh + BUF_LEN - i, i ); - M_cor_map_sum = mean( buf_cor_map_sum + BUF_LEN - i, i ); - V_epsP_tilt = var( buf_epsP_tilt + BUF_LEN - i, i ); - - if ( ( ( M_flux < 12 + 0.05f * ( len - 10 ) && mean( &buf_flux[BUF_LEN - 10], 10 ) < 15 ) || V_epsP_tilt < 0.0001f + 0.000018f * ( len - 10 ) || M_pkh > 1050 - 5.0f * ( len - 10 ) || M_cor_map_sum > 95 - 0.3f * ( len - 10 ) ) && voiced_cnt < 3 ) - { - mode = 1; - return ( mode ); - } - } - - if ( len == BUF_LEN ) - { - M_Ntonal = mean( buf_Ntonal, BUF_LEN ); - lf_Ntonal_ratio = sum_f( buf_Ntonal_lf, BUF_LEN ) / ( sum_f( buf_Ntonal2, BUF_LEN ) + 0.0001f ); - - if ( M_Ntonal > 18 || lf_Ntonal_ratio < 0.2f ) - { - mode = 1; - } - else if ( M_Ntonal < 1 ) - { - mode = 0; - } - } - } - - return ( mode ); -} - - -/*----------------------------------------------------------------------------------* - * tonal_context_improv() - * - * Context-based improvement of 1st/2nd stage speech/music decision on stable tonal signals - *----------------------------------------------------------------------------------*/ - -static void tonal_context_improv( - Encoder_State *st, /* i/o: encoder state structure */ - const float PS[], /* i : energy spectrum */ - const float voi_fv, /* i : scaled voicing feature */ - const float cor_map_sum_fv, /* i : scaled correlation map feature */ - const float LPCErr /* i : scaled LP prediction error feature */ -) -{ - int16_t lt_pitch_diff; - float sort_max, sort_avg, sort_val[80]; - float tonality, tonality1, tonality2, tonality3, t2, t3, tL, err, cor, dft; - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - /* reset in case of codec mode switching */ - if ( st->last_codec_mode == MODE2 ) - { - set_f( hSpMusClas->tonality2_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->tonality3_buf, 0, HANG_LEN_INIT ); - set_f( hSpMusClas->LPCErr_buf, 0, HANG_LEN_INIT ); - hSpMusClas->lt_music_hangover = 0; - hSpMusClas->lt_music_state = 0; - hSpMusClas->lt_speech_state = 0; - hSpMusClas->lt_speech_hangover = 0; - } - - /* estimate maximum tonality in bands [0-1 kHz], [1-2kHz] and [2-4kHz] */ - mvr2r( PS, sort_val, 80 ); - - /* tonality in band 0-1 kHz */ - v_sort_float( sort_val, 0, 19 ); - sort_max = sort_val[19]; - sort_avg = sum_f( &sort_val[0], 10 ); - tonality1 = sort_max / sort_avg; - - /* tonality in band 1-2 kHz */ - v_sort_float( sort_val, 20, 39 ); - sort_max = sort_val[39]; - sort_avg = sum_f( &sort_val[20], 10 ); - tonality2 = sort_max / sort_avg; - - /* tonality in band 2-4 kHz */ - v_sort_float( sort_val, 40, 79 ); - sort_max = sort_val[79]; - sort_avg = sum_f( &sort_val[40], 20 ); - tonality3 = sort_max / sort_avg; - - tonality = max( max( tonality1, tonality2 ), tonality3 ); - - if ( st->hVAD->hangover_cnt == 10 && st->vad_flag == 1 ) - { - /* long-term voicing parameter */ - hSpMusClas->lt_voicing_flt = 0.1f * hSpMusClas->lt_voicing_flt + 0.9f * *st->voicing; - - /* long-term correlation value */ - hSpMusClas->lt_corr_flt = 0.1f * hSpMusClas->lt_corr_flt + 0.9f * st->old_corr; - - /* long-term tonality measure */ - hSpMusClas->lt_tonality_flt = 0.1f * hSpMusClas->lt_tonality_flt + 0.9f * tonality; - } - else - { - /* long-term voicing parameter */ - hSpMusClas->lt_voicing_flt = 0.7f * hSpMusClas->lt_voicing_flt + 0.3f * *st->voicing; - - /* long-term correlation value */ - hSpMusClas->lt_corr_flt = 0.7f * hSpMusClas->lt_corr_flt + 0.3f * st->old_corr; - - /* long-term tonality measure */ - hSpMusClas->lt_tonality_flt = 0.5f * hSpMusClas->lt_tonality_flt + 0.5f * tonality; - } - - /* pitch difference w.r.t to past 3 frames */ - lt_pitch_diff = (int16_t) abs( hSpMusClas->lt_corr_pitch[0] - st->pitch[0] ); - lt_pitch_diff += (int16_t) abs( hSpMusClas->lt_corr_pitch[1] - st->pitch[0] ); - lt_pitch_diff += (int16_t) abs( hSpMusClas->lt_corr_pitch[2] - st->pitch[0] ); - - hSpMusClas->lt_corr_pitch[0] = hSpMusClas->lt_corr_pitch[1]; - hSpMusClas->lt_corr_pitch[1] = hSpMusClas->lt_corr_pitch[2]; - hSpMusClas->lt_corr_pitch[2] = st->pitch[0]; - - hSpMusClas->lt_old_mode[0] = hSpMusClas->lt_old_mode[1]; - hSpMusClas->lt_old_mode[1] = hSpMusClas->lt_old_mode[2]; - - if ( st->sp_aud_decision1 == 1 && - ( min( min( tonality1, tonality2 ), tonality3 ) > 50.0f ) && - ( tonality1 + tonality2 > 200.0f && tonality2 + tonality3 > 200.0f && tonality1 + tonality3 > 200.0f ) && - ( hSpMusClas->lt_tonality_flt < 20000.0f ) && - ( ( hSpMusClas->lt_tonality_flt > 1000 && max( hSpMusClas->lt_voicing_flt, *st->voicing ) > 0.99f ) || - ( hSpMusClas->lt_tonality_flt > 1500 && hSpMusClas->lt_corr_flt > 0.99f ) || - ( hSpMusClas->lt_tonality_flt > 3000 && hSpMusClas->lowrate_pitchGain_flt > 0.96f ) || - ( lt_pitch_diff == 0 && hSpMusClas->lowrate_pitchGain_flt > 0.89f ) ) ) - { - if ( sum_s( hSpMusClas->lt_old_mode, 2 ) < 2 ) - { - /* probably speech - change the decision to speech */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - - if ( hSpMusClas->lt_hangover == 0 ) - { - hSpMusClas->lt_hangover = 6; - } - } - } - else - { - /* not speech, but still in the hangover period - change the decision to speech */ - if ( hSpMusClas->lt_hangover > 0 ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - hSpMusClas->lt_hangover--; - } - } - - /* calculate standard deviation of log-tonality */ - mvr2r( hSpMusClas->tonality2_buf + 1, hSpMusClas->tonality2_buf, HANG_LEN_INIT - 1 ); - hSpMusClas->tonality2_buf[HANG_LEN_INIT - 1] = 0.2f * log10f( tonality2 ); - t2 = std_dev( hSpMusClas->tonality2_buf, HANG_LEN_INIT ); - - mvr2r( hSpMusClas->tonality3_buf + 1, hSpMusClas->tonality3_buf, HANG_LEN_INIT - 1 ); - hSpMusClas->tonality3_buf[HANG_LEN_INIT - 1] = 0.2f * log10f( tonality3 ); - t3 = std_dev( hSpMusClas->tonality3_buf, HANG_LEN_INIT ); - - tL = 0.2f * log10f( hSpMusClas->lt_tonality_flt ); - - /* calculate standard deviation of residual LP energy */ - mvr2r( hSpMusClas->LPCErr_buf + 1, hSpMusClas->LPCErr_buf, HANG_LEN_INIT - 1 ); - hSpMusClas->LPCErr_buf[HANG_LEN_INIT - 1] = LPCErr; - err = std_dev( hSpMusClas->LPCErr_buf, HANG_LEN_INIT ); - - cor = max( voi_fv - cor_map_sum_fv, 0.0f ); - dft = 0.2f * fabsf( log10f( tonality2 ) - log10f( tonality3 ) ); - - /* state machine for strong music */ - if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_music_state == 0 && hSpMusClas->lt_music_hangover == 0 && - t2 < 0.54f && t2 > 0.26f && t3 > 0.22f && tL < 0.54f && tL > 0.26f && err > 0.5f ) - { - hSpMusClas->lt_music_state = 1; - hSpMusClas->lt_music_hangover = 6; - } - else if ( hSpMusClas->lt_music_state == 1 && hSpMusClas->lt_music_hangover == 0 && t2 < 0.34 && t3 < 0.26f && tL < 0.45f ) - { - hSpMusClas->lt_music_state = 0; - hSpMusClas->lt_music_hangover = 6; - } - - if ( hSpMusClas->lt_music_hangover > 0 ) - { - hSpMusClas->lt_music_hangover--; - } - - /* state machine for strong speech */ - if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_speech_state == 0 && hSpMusClas->lt_speech_hangover == 0 && - cor > 0.40f && dft < 0.1f && voi_fv > 2 * cor_map_sum_fv + 0.12f && - t2 < cor && t3 < cor && tL < cor && cor_map_sum_fv < cor && voi_fv > cor && voi_fv > 0.76f ) - { - hSpMusClas->lt_speech_state = 1; - hSpMusClas->lt_speech_hangover = 6; - } - else if ( hSpMusClas->lt_speech_state == 1 && hSpMusClas->lt_speech_hangover == 0 && cor < 0.40f ) - { - hSpMusClas->lt_speech_state = 0; - hSpMusClas->lt_speech_hangover = 6; - } - - if ( hSpMusClas->lt_speech_hangover > 0 ) - { - hSpMusClas->lt_speech_hangover--; - } - - /* final decision */ - if ( st->sp_aud_decision1 == 1 && hSpMusClas->lt_speech_state == 1 ) - { - /* strong speech - probably error in speech/music classification */ - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 0; - } - else if ( st->sp_aud_decision1 == 0 && hSpMusClas->lt_music_state == 1 ) - { - /* strong music - probably error in speech/music classification */ - st->sp_aud_decision1 = 1; - st->sp_aud_decision2 = 1; - } - - /* update the buffer of past decisions */ - hSpMusClas->lt_old_mode[2] = st->sp_aud_decision1; - - return; -} - -/*---------------------------------------------------------------------* - * detect_sparseness() - * - * - *---------------------------------------------------------------------*/ - -static void detect_sparseness( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t localVAD_HE_SAD, /* i : HE-SAD flag without hangover */ - const float voi_fv /* i : scaled voicing feature */ -) -{ - float sum; - float ftmp; - float ftmp1; - float S1[128]; - int16_t i, j; - int16_t hb_sp_high_flag = 0; - int16_t lb_sp_high_flag = 0; - float sumh; - float sparse; - float tmp_buf[4]; - float Mlpe = 0.0f; - float Mv = 0.0f; - float Msp; - - SP_MUS_CLAS_HANDLE hSpMusClas = st->hSpMusClas; - - mvr2r( st->Bin_E, S1, 128 ); - - sum = 0; - for ( i = 0; i < 80; i++ ) - { - if ( S1[i] < 0 ) - { - S1[i] = 0; - } - sum += S1[i]; - } - - sumh = 0; - for ( i = 80; i < 128; i++ ) - { - if ( S1[i] < 0 ) - { - S1[i] = 0; - } - sumh += S1[i]; - } - - sum += sumh; - - /* order spectral from max to min */ - order_spectrum( S1, 128 ); - - /* calculate spectral sparseness in the range 0 - 6.4 kHz */ - j = 0; - ftmp = 0.0f; - ftmp1 = 0.75f * sum; - for ( i = 0; i < 128; i++ ) - { - ftmp += S1[i]; - if ( ftmp > ftmp1 ) - { - j = i; - break; - } - } - - for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) - { - hSpMusClas->sparse_buf[i] = hSpMusClas->sparse_buf[i + 1]; - } - - sparse = (float) j; - hSpMusClas->sparse_buf[i] = sparse; - - if ( st->bwidth == WB ) - { - Msp = mean( hSpMusClas->sparse_buf, 8 ); - - /* find long-term smoothed sparseness */ - if ( hSpMusClas->last_vad_spa == 0 ) - { - set_f( &hSpMusClas->sparse_buf[0], sparse, HANG_LEN_INIT - 1 ); - hSpMusClas->LT_sparse = sparse; - } - else - { - set_f( tmp_buf, 0.0f, 4 ); - - for ( i = 0; i < HANG_LEN_INIT; i++ ) - { - for ( j = 0; j < 4; j++ ) - { - if ( hSpMusClas->sparse_buf[i] > tmp_buf[j] ) - { - mvr2r( &tmp_buf[j], &tmp_buf[j + 1], 3 - j ); - tmp_buf[j] = hSpMusClas->sparse_buf[i]; - break; - } - } - } - - ftmp = 0.25f * ( HANG_LEN_INIT * Msp - sum_f( tmp_buf, 4 ) ) - hSpMusClas->LT_sparse; - - hSpMusClas->LT_sparse = hSpMusClas->LT_sparse + 0.25f * ftmp; - } - - /* find high-band sparseness */ - mvr2r( st->Bin_E + 80, S1, 48 ); - order_spectrum( S1, 48 ); - - for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) - { - hSpMusClas->hf_spar_buf[i] = hSpMusClas->hf_spar_buf[i + 1]; - } - hSpMusClas->hf_spar_buf[i] = sum_f( S1, 5 ) / ( sumh + 0.1f ); - if ( mean( hSpMusClas->hf_spar_buf, 8 ) > 0.2f ) - { - hb_sp_high_flag = 1; - } - - /* find low-band sparseness */ - mvr2r( st->Bin_E, S1, 60 ); - order_spectrum( S1, 60 ); - - if ( sum_f( S1, 5 ) / sum_f( S1, 60 ) > 0.18f ) - { - lb_sp_high_flag = 1; - } - - /* find smoothed linear prediction efficiency */ - for ( i = 0; i < 7; i++ ) - { - hSpMusClas->lpe_buf[i] = hSpMusClas->lpe_buf[i + 1]; - } - - hSpMusClas->lpe_buf[i] = hSpMusClas->past_epsP2; - Mlpe = mean( hSpMusClas->lpe_buf, 8 ); - - /* find smoothed voicing */ - for ( i = 0; i < HANG_LEN_INIT - 1; i++ ) - { - hSpMusClas->voicing_buf[i] = hSpMusClas->voicing_buf[i + 1]; - } - - hSpMusClas->voicing_buf[i] = voi_fv; - Mv = mean( hSpMusClas->voicing_buf, 8 ); - } - - /* avoid using LR-MDCT on sparse spectra */ - if ( st->sp_aud_decision1 == 1 ) - { - if ( st->bwidth == WB ) - { - ftmp = 90; - } - else - { - ftmp = 91; - } - if ( sparse > ftmp ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 1; - hSpMusClas->gsc_hangover = 1; - } - else if ( hSpMusClas->gsc_hangover == 1 ) - { - if ( sparse > 85 ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 1; - } - else if ( fabs( sparse - mean( &hSpMusClas->sparse_buf[HANG_LEN_INIT - 1 - hSpMusClas->gsc_cnt], hSpMusClas->gsc_cnt ) ) < 7.0f ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 1; - } - } - - if ( st->bwidth == WB ) - { - if ( hSpMusClas->LT_sparse > 60 && sparse > 50 && Mlpe < -1.3f && Mv > 0.85f && - lb_sp_high_flag == 0 && ( ( hb_sp_high_flag == 0 && sumh > 0.15f * sum ) || sumh <= 0.15f * sum ) ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 1; - hSpMusClas->gsc_hangover = 1; - } - else if ( hSpMusClas->gsc_hangover == 1 && !( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) ) - { - if ( fabs( sparse - mean( &hSpMusClas->sparse_buf[HANG_LEN_INIT - 1 - hSpMusClas->gsc_cnt], hSpMusClas->gsc_cnt ) ) < 7.0f ) - { - st->sp_aud_decision1 = 0; - st->sp_aud_decision2 = 1; - } - } - } - } - - /* update the counter of consecutive GSC frames with sparse spectrum */ - if ( st->sp_aud_decision1 == 0 && st->sp_aud_decision2 == 1 ) - { - ( hSpMusClas->gsc_cnt )++; - if ( hSpMusClas->gsc_cnt > 7 ) - { - hSpMusClas->gsc_cnt = 7; - } - } - else - { - hSpMusClas->gsc_cnt = 0; - hSpMusClas->gsc_hangover = 0; - } - - hSpMusClas->last_vad_spa = localVAD_HE_SAD; - - return; -} - - -/*---------------------------------------------------------------------* - * order_spectrum() - * - * - *---------------------------------------------------------------------*/ - -static void order_spectrum( - float *vec, - const int16_t len ) -{ - int16_t i, j, imax, imin; - float temp; - - for ( i = 0; i < len / 2; i++ ) - { - imax = i; - imin = i; - for ( j = i; j < len - i; j++ ) - { - if ( vec[j] > vec[imax] ) - { - imax = j; - } - else - { - if ( vec[j] < vec[imin] ) - { - imin = j; - } - } - } - - temp = vec[i]; - vec[i] = vec[imax]; - vec[imax] = temp; - - if ( imin == i ) - { - imin = imax; - } - - temp = vec[len - i - 1]; - vec[len - i - 1] = vec[imin]; - vec[imin] = temp; - } - - return; -} -#endif diff --git a/lib_enc/speech_music_classif_fx.c b/lib_enc/speech_music_classif_fx.c index b70a90625..6f8fba9f1 100644 --- a/lib_enc/speech_music_classif_fx.c +++ b/lib_enc/speech_music_classif_fx.c @@ -16,12 +16,10 @@ #ifdef DEBUGGING #include "debug.h" #endif -#ifdef IVAS_FLOAT_FIXED #include #include "ivas_prot.h" #include "ivas_prot_fx.h" #include "prot.h" -#endif /*---------------------------------------------------------------------* @@ -1701,7 +1699,6 @@ static Word16 attack_det_fx( /* o : attack flag return attack; } -#ifdef IVAS_FLOAT_FIXED /* -------------------------------------------------------------------- - * *ivas_smc_gmm() * @@ -2634,8 +2631,6 @@ Word16 ivas_smc_gmm_fx( return dec; } -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * var_cor_calc_ivas_fx() * @@ -3290,7 +3285,6 @@ void ivas_smc_mode_selection_fx( return; } -#endif /*---------------------------------------------------------------------* * mode_decision_fx() diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 7a792ae0f..73cb96e15 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -103,21 +103,6 @@ typedef struct bitstream_enc_data_structure typedef struct signal_buffers_enc_data_structure { -#ifndef IVAS_FLOAT_FIXED - float input_buff_flt[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; - float Bin_E_old_flt[L_FFT / 2]; /* per bin energy of old 2nd frames */ - float mem_decim_flt[2 * L_FILT_MAX]; /* decimation filter memory */ - float mem_decim16k_flt[2 * L_FILT_MAX]; /* ACELP@16kHz - decimation filter memory @16kHz */ -#endif -#ifndef IVAS_FLOAT_FIXED - float old_inp_12k8_flt[L_INP_MEM]; /* memory of input signal at 12.8kHz */ - float old_inp_16k_flt[L_INP_MEM]; /* ACELP@16kHz - memory of input signal @16 kHz */ - float buf_synth_flt[OLD_SYNTH_SIZE_ENC + L_FRAME32k]; /* can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching */ - float buf_wspeech_enc_flt[L_FRAME16k + L_SUBFR + L_FRAME16k + L_NEXT_MAX_16k + 320]; /* increased by 320 to avoid memory overlap in find_wsp() and also to accomodate for the wspeech_enc */ - float buf_speech_enc_pe_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; - float buf_synth_flt[OLD_SYNTH_SIZE_ENC + L_FRAME32k]; /* can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching */ - float buf_speech_enc_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; -#endif // Fixed Word16 input_buff[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; Word32 input_buff32[L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS )]; @@ -144,9 +129,6 @@ typedef struct signal_buffers_enc_data_structure typedef struct { int16_t nSubblockSize; /* Subblock size of a transient detector that uses this delay buffer. */ -#ifndef IVAS_FLOAT_FIXED - float buffer_flt[L_FRAME_MAX / NSUBBLOCKS]; /* Delay buffer */ -#endif Word16 buffer[L_FRAME48k / NSUBBLOCKS]; int16_t nDelay; /* Size of the delay buffer in use. Maximum delay from all users of this buffer. */ @@ -155,35 +137,17 @@ typedef struct /* Subblock energies: Holds subblock energies and recursively accumulated energies. Also buffers the energies. */ typedef struct { - DelayBuffer *pDelayBuffer; /* Delay buffer. */ -#ifndef IVAS_FLOAT_FIXED - float subblockNrg_flt[NSUBBLOCKS + MAX_TD_DELAY]; /* Subblock energies with a delay buffering. */ -#endif - Word32 subblockNrg[NSUBBLOCKS + MAX_TD_DELAY]; // IVAS Q0 -#ifndef IVAS_FLOAT_FIXED - float accSubblockNrg_flt[NSUBBLOCKS + MAX_TD_DELAY + 1]; /* Recursively accumulated subblock energies with a delay buffering. - At index i the value corresponds to the accumulated subblock energy up to i-1, - including block i-1 and without block i. */ -#endif - Word32 accSubblockNrg[NSUBBLOCKS + MAX_TD_DELAY + 1]; // IVAS Q0 -#ifndef IVAS_FLOAT_FIXED - float subblockNrgChange_flt[NSUBBLOCKS + MAX_TD_DELAY]; /* subblockNrgChange[i] = max(subblockNrg[i]/subblockNrg[i-1], subblockNrg[i-1]/subblockNrg[i]) */ -#endif + DelayBuffer *pDelayBuffer; /* Delay buffer. */ + Word32 subblockNrg[NSUBBLOCKS + MAX_TD_DELAY]; // IVAS Q0 + Word32 accSubblockNrg[NSUBBLOCKS + MAX_TD_DELAY + 1]; // IVAS Q0 Word16 subblockNrgChange[NSUBBLOCKS + MAX_TD_DELAY]; /* EVS: Q7(15 - SUBBLOCK_NRG_CHANGE_E) */ /* IVAS: Q3 */ int16_t nDelay; /* Size of the delay buffer in use, as number of subblocks. Maximum delay from all users of this buffer. */ int16_t nPartialDelay; /* Delay of the input (modulo pDelayBuffer->nSubblockSize), nPartialDelay <= pDelayBuffer->nDelay. */ /* Decay factor for the recursive accumulation */ -#ifndef IVAS_FLOAT_FIXED - float facAccSubblockNrg_flt; -#endif Word16 facAccSubblockNrg; /* High-pass filter states (delay line) */ -#ifndef IVAS_FLOAT_FIXED - float firState1_flt; - float firState2_flt; -#endif Word16 firState1; Word16 firState2; Word16 q_firState; @@ -205,13 +169,10 @@ typedef struct TransientDetector int16_t nSubblocksToCheck; /* Number of subblocks to check for transients. */ TCheckSubblocksForAttack CheckSubblocksForAttack; /* Function for checking a presence of an attack. */ TCheckSubblocksForAttack_fx CheckSubblocksForAttack_fx; /* Function for checking a presence of an attack. */ -#ifndef IVAS_FLOAT_FIXED - float attackRatioThreshold_flt; /* Attack ratio threshold */ -#endif - Word16 attackRatioThreshold; /* Attack ratio threshold Q11 */ - int16_t bIsAttackPresent; /* True when an attack was detected. */ - int16_t prev_bIsAttackPresent; /* True if an attack was detected in the previous frame. */ - int16_t attackIndex; /* The index of an attack. */ + Word16 attackRatioThreshold; /* Attack ratio threshold Q11 */ + int16_t bIsAttackPresent; /* True when an attack was detected. */ + int16_t prev_bIsAttackPresent; /* True if an attack was detected in the previous frame. */ + int16_t attackIndex; /* The index of an attack. */ } TransientDetector; /* Transient detection: Holds all transient detectors and buffers used by them. */ @@ -243,23 +204,12 @@ typedef struct vad_structure int16_t hangover_cnt_dtx; int16_t hangover_cnt_music; -#ifndef IVAS_FLOAT_FIXED - float bcg_flux; -#endif Word16 bcg_flux_fx; // Q4 int16_t soft_hangover; int16_t voiced_burst; int16_t bcg_flux_init; int16_t nb_active_frames_he1; int16_t hangover_cnt_he1; -#ifndef IVAS_FLOAT_FIXED - float prim_act_quick; /* Noise estimator - primary activity quick */ - float prim_act_slow; /* Noise estimator - primary activity slow */ - float prim_act; /* Noise estimator - primary activity slow rise quick fall */ - float prim_act_quick_he; /* Noise estimator - primary activity quick */ - float prim_act_slow_he; /* Noise estimator - primary activity slow */ - float prim_act_he; /* Noise estimator - primary activity slow rise quick fall */ -#endif Word16 prim_act_quick_fx; /*Q15 */ /* Noise estimator - primary activity quick */ Word16 prim_act_slow_fx; /*Q15 */ /* Noise estimator - primary activity slow */ Word16 prim_act_fx; /*Q15 */ /* Noise estimator - primary activity slow rise quick fall */ @@ -269,15 +219,8 @@ typedef struct vad_structure int16_t spectral_tilt_reset; int16_t consec_inactive; -#ifndef IVAS_FLOAT_FIXED - float ra_deltasum; -#endif Word16 ra_deltasum_fx; int16_t trigger_SID; -#ifndef IVAS_FLOAT_FIXED - float running_avg; - float snr_sum_vad; -#endif Word16 snr_sum_vad_fx; /*Q15 */ Word16 running_avg_fx; /*Q15 */ Word32 L_snr_sum_vad_fx; /*Q4*/ @@ -292,99 +235,55 @@ typedef struct cldfb_vad_structure int16_t bw_index; /* index of band width */ /* feature */ -#ifndef IVAS_FLOAT_FIXED - float sp_center[SP_CENTER_NUM]; /* spectral center*/ - float ltd_stable_rate[STABLE_NUM]; /* time-domain stable rate*/ - float sfm[SFM_NUM]; /* spectral flatness*/ - float f_tonality_rate[TONA_NUM]; /* tonality rate*/ - float frame_sb_energy[BG_ENG_NUM]; /* energy of sub-band divided non-uniformly*/ - float frames_power[POWER_NUM]; /* energy of several frames*/ - float pre_spec_low_dif[PRE_SPEC_DIF_NUM]; /* low frequency spectral different*/ - float t_bg_energy; /* time background energy of several frames*/ - float t_bg_energy_sum; /* number of time background energy*/ -#else - Word16 sp_center[SP_CENTER_NUM]; /* spectral center*/ - Word16 ltd_stable_rate[STABLE_NUM]; /* time-domain stable rate*/ - Word16 sfm[SFM_NUM]; /* spectral flatness*/ - Word16 f_tonality_rate[TONA_NUM]; /* tonality rate*/ - Word16 pre_spec_low_dif[PRE_SPEC_DIF_NUM]; /* low frequency spectral different*/ - Word16 scale_spec_low_dif; /* the Scaling of spec_low_dif*/ - Word32 frames_power_32[POWER_NUM]; /* energy of several frames*/ - Word16 Q_frames_power_32; /* the Scaling of frames_power_32*/ - Word32 frame_sb_energy[BG_ENG_NUM]; /* energy of sub-band divided non-uniformly*/ - Word16 frame_sb_energy_scale; /* the Scaling of frame_sb_energy*/ - Word32 t_bg_energy; /* time background energy of several frames*/ - Word16 scale_t_bg_energy; /* the Scaling of t_bg_energy*/ - T_VAD_EXP t_bg_energy_sum; /* number of time background energy*/ -#endif - int16_t tbg_energy_count; /* sum of time background energy of several frames*/ - int16_t bg_update_count; /* time of background update*/ -#ifndef IVAS_FLOAT_FIXED - float frame_energy_smooth; /* smoothed energy of several frames*/ -#else - Word32 frame_energy_smooth; /* smoothed energy of several frames*/ - Word16 frame_energy_smooth_scale; /* the Scaling of frame_energy_smooth*/ -#endif + Word16 sp_center[SP_CENTER_NUM]; /* spectral center*/ + Word16 ltd_stable_rate[STABLE_NUM]; /* time-domain stable rate*/ + Word16 sfm[SFM_NUM]; /* spectral flatness*/ + Word16 f_tonality_rate[TONA_NUM]; /* tonality rate*/ + Word16 pre_spec_low_dif[PRE_SPEC_DIF_NUM]; /* low frequency spectral different*/ + Word16 scale_spec_low_dif; /* the Scaling of spec_low_dif*/ + Word32 frames_power_32[POWER_NUM]; /* energy of several frames*/ + Word16 Q_frames_power_32; /* the Scaling of frames_power_32*/ + Word32 frame_sb_energy[BG_ENG_NUM]; /* energy of sub-band divided non-uniformly*/ + Word16 frame_sb_energy_scale; /* the Scaling of frame_sb_energy*/ + Word32 t_bg_energy; /* time background energy of several frames*/ + Word16 scale_t_bg_energy; /* the Scaling of t_bg_energy*/ + T_VAD_EXP t_bg_energy_sum; /* number of time background energy*/ + int16_t tbg_energy_count; /* sum of time background energy of several frames*/ + int16_t bg_update_count; /* time of background update*/ + Word32 frame_energy_smooth; /* smoothed energy of several frames*/ + Word16 frame_energy_smooth_scale; /* the Scaling of frame_energy_smooth*/ /* history parameters */ -#ifndef IVAS_FLOAT_FIXED - float smooth_spec_amp[SPEC_AMP_NUM]; /* smoothed spectral amplitude*/ - float sb_bg_energy[BG_ENG_NUM]; /* sub-band background energy*/ - float pre_snr[PRE_SNR_NUM]; /* previous time SNR*/ - float lt_snr_org; /* original long time SNR*/ - float lf_snr_smooth; /* smoothed lf_snr*/ - float l_silence_snr; /* sum of snr's of non active frames*/ - float l_speech_snr; /* sum of snr's of active frames*/ - int16_t l_silence_snr_count; /* number of non active frames*/ - int16_t l_speech_snr_count; /* number of active frames*/ - float fg_energy; /* foreground energy sum */ - float bg_energy; /* background energy sum */ -#else - Word32 smooth_spec_amp[SPEC_AMP_NUM]; /* smoothed spectral amplitude*/ - Word32 sb_bg_energy[BG_ENG_NUM]; /* sub-band background energy*/ - Word16 sb_bg_energy_scale; /* the Scaling of sb_bg_energy*/ - Word32 pre_snr[PRE_SNR_NUM]; /* previous time SNR*/ - Word32 lt_snr_org; /* original long time SNR*/ - Word32 lf_snr_smooth; /* smoothed lf_snr*/ - Word32 l_silence_snr; /* sum of snr's of non active frames*/ - Word32 l_speech_snr; /* sum of snr's of active frames*/ - Word32 l_silence_snr_count; /* number of non active frames*/ - Word32 l_speech_snr_count; /* number of active frames*/ - Word32 fg_energy; /* foreground energy sum */ - Word16 fg_energy_scale; /* the Scaling of fg_energy*/ - Word32 bg_energy; /* background energy sum */ - Word16 bg_energy_scale; /* the Scaling of bg_energy*/ -#endif - int16_t fg_energy_count; /* number of the foreground energy frame */ - int16_t bg_energy_count; /* number of the background energy frame */ -#ifndef IVAS_FLOAT_FIXED - int16_t fg_energy_est_start; /* flag by that indicate whether if estimate energy*/ -#else - Word32 fg_energy_est_start; /* flag by that indicate whether if estimate energy*/ -#endif - int16_t speech_flag; /* residual number of hangover 1 */ - int16_t continuous_noise_num; /* time of continuous noise frames*/ - int16_t continuous_speech_num; /* time of continuous speech frames*/ - int16_t continuous_speech_num2; /* time 2 of continuous speech frames*/ - int16_t frameloop; /* number of frame*/ -#ifndef IVAS_FLOAT_FIXED - float tonality_rate3; /* tonality rate*/ - float music_background_rate; /* music background rate*/ - float lt_noise_sp_center_diff_sum; /* different sum of long time noise sp_center*/ - float lt_noise_sp_center_diff_counter; /* number of the member lt_noise_sp_center_diff_sum*/ - float lt_noise_sp_center0; /* long time noise sp_center0*/ - float lt_noise_sp_center3; /* long time noise sp_center3*/ - float lt_bg_highf_eng; /* average of long time high frequency energy*/ -#else - Word16 tonality_rate3; /* tonality rate*/ - Word16 music_background_rate; /* music background rate*/ - Word32 lt_noise_sp_center_diff_sum; /* different sum of long time noise sp_center*/ - Word32 lt_noise_sp_center_diff_counter; /* number of the member lt_noise_sp_center_diff_sum*/ - Word16 lt_noise_sp_center0; /* long time noise sp_center0*/ - Word16 lt_noise_sp_center3; /* long time noise sp_center3*/ - Word32 lt_bg_highf_eng; /* average of long time high frequency energy*/ -#endif - int16_t update_num_with_snr; /* the number of the background update with SNR*/ + Word32 smooth_spec_amp[SPEC_AMP_NUM]; /* smoothed spectral amplitude*/ + Word32 sb_bg_energy[BG_ENG_NUM]; /* sub-band background energy*/ + Word16 sb_bg_energy_scale; /* the Scaling of sb_bg_energy*/ + Word32 pre_snr[PRE_SNR_NUM]; /* previous time SNR*/ + Word32 lt_snr_org; /* original long time SNR*/ + Word32 lf_snr_smooth; /* smoothed lf_snr*/ + Word32 l_silence_snr; /* sum of snr's of non active frames*/ + Word32 l_speech_snr; /* sum of snr's of active frames*/ + Word32 l_silence_snr_count; /* number of non active frames*/ + Word32 l_speech_snr_count; /* number of active frames*/ + Word32 fg_energy; /* foreground energy sum */ + Word16 fg_energy_scale; /* the Scaling of fg_energy*/ + Word32 bg_energy; /* background energy sum */ + Word16 bg_energy_scale; /* the Scaling of bg_energy*/ + int16_t fg_energy_count; /* number of the foreground energy frame */ + int16_t bg_energy_count; /* number of the background energy frame */ + Word32 fg_energy_est_start; /* flag by that indicate whether if estimate energy*/ + int16_t speech_flag; /* residual number of hangover 1 */ + int16_t continuous_noise_num; /* time of continuous noise frames*/ + int16_t continuous_speech_num; /* time of continuous speech frames*/ + int16_t continuous_speech_num2; /* time 2 of continuous speech frames*/ + int16_t frameloop; /* number of frame*/ + Word16 tonality_rate3; /* tonality rate*/ + Word16 music_background_rate; /* music background rate*/ + Word32 lt_noise_sp_center_diff_sum; /* different sum of long time noise sp_center*/ + Word32 lt_noise_sp_center_diff_counter; /* number of the member lt_noise_sp_center_diff_sum*/ + Word16 lt_noise_sp_center0; /* long time noise sp_center0*/ + Word16 lt_noise_sp_center3; /* long time noise sp_center3*/ + Word32 lt_bg_highf_eng; /* average of long time high frequency energy*/ + int16_t update_num_with_snr; /* the number of the background update with SNR*/ int16_t update_count; int16_t warm_hang_num; /* the number of hangover for warm up*/ int16_t vad_flag_for_bk_update; @@ -399,109 +298,53 @@ typedef struct td_cng_enc_structure { Word16 lp_cng_mode2; -#ifndef IVAS_FLOAT_FIXED - float lp_ener; /* CNG and DTX - low-pass filtered energy for CNG */ -#else - Word32 lp_ener_fx; /* CNG and DTX - low-pass filtered energy for CNG Q6 */ -#endif - Word16 cng_seed; /* CNG and DTX - seed for white noise random generator */ - Word16 old_enr_index; /* CNG and DTX - index of last encoded CNG energy */ -#ifndef IVAS_FLOAT_FIXED - float Enew; /* CNG and DTX - CNG target residual energy */ -#else - Word32 Enew_fx; /* CNG and DTX - CNG target residual energy Q6 */ -#endif - Word16 cng_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ -#ifndef IVAS_FLOAT_FIXED - float cng_lsp_hist[DTX_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ - float cng_ener_hist[DTX_HIST_SIZE]; /* CNG and DTX - log energy buffer for averaging */ -#else - Word16 cng_lsp_hist_fx[DTX_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging Q15 */ - Word16 cng_ener_hist_fx[DTX_HIST_SIZE]; /* CNG and DTX - log energy buffer for averaging Q8 */ -#endif - Word16 cng_ener_seed; /* CNG and DTX - seed for random generator for variation of excitation energy */ + Word32 lp_ener_fx; /* CNG and DTX - low-pass filtered energy for CNG Q6 */ + Word16 cng_seed; /* CNG and DTX - seed for white noise random generator */ + Word16 old_enr_index; /* CNG and DTX - index of last encoded CNG energy */ + Word32 Enew_fx; /* CNG and DTX - CNG target residual energy Q6 */ + Word16 cng_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ + Word16 cng_lsp_hist_fx[DTX_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging Q15 */ + Word16 cng_ener_hist_fx[DTX_HIST_SIZE]; /* CNG and DTX - log energy buffer for averaging Q8 */ + Word16 cng_ener_seed; /* CNG and DTX - seed for random generator for variation of excitation energy */ Word16 cng_ener_seed1; -#ifndef IVAS_FLOAT_FIXED - float lp_sp_enr; -#else - Word16 lp_sp_enr_fx; /* Q8 */ -#endif + Word16 lp_sp_enr_fx; /* Q8 */ Word16 last_allow_cn_step; - Word16 ho_hist_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ - Word16 ho_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ - Word32 ho_sid_bw; /* CNG and DTX - SID bandwidth flags */ -#ifndef IVAS_FLOAT_FIXED - float ho_lsp_hist[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ - float ho_ener_hist[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ - float ho_env_hist[HO_HIST_SIZE * NUM_ENV_CNG]; -#else + Word16 ho_hist_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + Word16 ho_hist_ptr; /* CNG and DTX - pointer for averaging buffers */ + Word32 ho_sid_bw; /* CNG and DTX - SID bandwidth flags */ Word16 ho_lsp_hist_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging Q15 */ Word32 ho_ener_hist_fx[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging Q6 */ Word32 ho_env_hist_fx[HO_HIST_SIZE * NUM_ENV_CNG]; /* Q6 */ -#endif - Word16 act_cnt; /* CNG and DTX - counter of active frames */ - Word16 ho_circ_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ - Word16 ho_circ_ptr; /* CNG and DTX - pointer for averaging buffers */ -#ifndef IVAS_FLOAT_FIXED - float ho_lsp_circ[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging */ - float ho_ener_circ[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging */ - float ho_env_circ[HO_HIST_SIZE * NUM_ENV_CNG]; -#else + Word16 act_cnt; /* CNG and DTX - counter of active frames */ + Word16 ho_circ_size; /* CNG and DTX - size of DTX hangover history buffer for averaging, <0,HO_HIST_SIZE> */ + Word16 ho_circ_ptr; /* CNG and DTX - pointer for averaging buffers */ Word16 ho_lsp_circ_fx[HO_HIST_SIZE * M]; /* CNG and DTX - old LSP buffer for averaging Q15 */ Word32 ho_ener_circ_fx[HO_HIST_SIZE]; /* CNG and DTX - energy buffer for averaging Q6 */ Word32 ho_env_circ_fx[HO_HIST_SIZE * NUM_ENV_CNG]; /* Q6 */ -#endif - Word16 burst_ho_cnt; /* CNG and DTX - counter of hangover frames at end of active burst */ - Word16 cng_buf_cnt; /* CNG and DTX - Counter of buffered CNG parameters */ -#ifndef IVAS_FLOAT_FIXED - float cng_exc2_buf_flt[HO_HIST_SIZE * L_FFT]; /* CNG and DTX - exc2 buffer for storing */ -#endif - Word16 cng_exc2_buf[HO_HIST_SIZE * L_FFT]; /* CNG and DTX - exc2 buffer for storing */ - Word16 cng_Qexc_buf[HO_HIST_SIZE]; /* CNG and DTX - Q_exc buffer for storing */ - int32_t cng_brate_buf[HO_HIST_SIZE]; /* CNG and DTX - buffer for storing last_active_brate */ -#ifndef IVAS_FLOAT_FIXED - float CNG_att; /* CNG and DTX - attenuation factor for CNG, in dB */ -#else + Word16 burst_ho_cnt; /* CNG and DTX - counter of hangover frames at end of active burst */ + Word16 cng_buf_cnt; /* CNG and DTX - Counter of buffered CNG parameters */ + Word16 cng_exc2_buf[HO_HIST_SIZE * L_FFT]; /* CNG and DTX - exc2 buffer for storing */ + Word16 cng_Qexc_buf[HO_HIST_SIZE]; /* CNG and DTX - Q_exc buffer for storing */ + int32_t cng_brate_buf[HO_HIST_SIZE]; /* CNG and DTX - buffer for storing last_active_brate */ Word16 CNG_att_fx; /* CNG and DTX - attenuation factor for CNG, in dB Q7 */ -#endif - Word16 ho_16k_lsp[HO_HIST_SIZE]; /* CNG and DTX - 16k LSPs flags */ - Word16 act_cnt2; /* CNG and DTX - counter of active frames for CNG_mode switching */ -#ifndef IVAS_FLOAT_FIXED - float ho_lsp_circ2[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs */ -#else + Word16 ho_16k_lsp[HO_HIST_SIZE]; /* CNG and DTX - 16k LSPs flags */ + Word16 act_cnt2; /* CNG and DTX - counter of active frames for CNG_mode switching */ Word16 ho_lsp_circ2_fx[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs Q15 */ -#endif - Word16 num_ho; /* CNG and DTX - number of selected hangover frames */ -#ifndef IVAS_FLOAT_FIXED - float old_env[NUM_ENV_CNG]; - float lp_env[NUM_ENV_CNG]; - float cng_res_env[NUM_ENV_CNG * HO_HIST_SIZE]; - float exc_mem[24]; - float exc_mem1[30]; - float exc_mem2[30]; -#else + Word16 num_ho; /* CNG and DTX - number of selected hangover frames */ Word32 old_env_fx[NUM_ENV_CNG]; /* Q6 */ Word32 lp_env_fx[NUM_ENV_CNG]; /* Q6 */ Word32 cng_res_env_fx[NUM_ENV_CNG * HO_HIST_SIZE]; /* Q6 */ -#endif Word16 exc_mem_fx[24]; Word16 exc_mem1_fx[30]; Word16 exc_mem2_fx[30]; /* SWB DTX/CNG parameters */ Word16 last_vad; -#ifndef IVAS_FLOAT_FIXED - float last_wb_cng_ener; - float last_shb_cng_ener; - float mov_wb_cng_ener; - float mov_shb_cng_ener; -#else - Word16 last_wb_cng_ener_fx; /* Q8 */ - Word16 last_shb_cng_ener_fx; /* Q8 */ - Word16 mov_wb_cng_ener_fx; /* Q8 */ - Word16 mov_shb_cng_ener_fx; /* Q8 */ -#endif + Word16 last_wb_cng_ener_fx; /* Q8 */ + Word16 last_shb_cng_ener_fx; /* Q8 */ + Word16 mov_wb_cng_ener_fx; /* Q8 */ + Word16 mov_shb_cng_ener_fx; /* Q8 */ Word16 last_idx_ener; Word16 shb_cng_ini_cnt; Word16 last_SID_bwidth; @@ -516,27 +359,6 @@ typedef struct td_cng_enc_structure typedef struct fd_cng_enc_structure { HANDLE_FD_CNG_COM hFdCngCom; -#ifndef IVAS_FLOAT_FIXED - float msPeriodog[NPART]; /* Periodogram */ - float msBminWin[NPART]; - float msBminSubWin[NPART]; - float msPsd[NPART]; /* Power Spectral Density estimate (i.e., smoothed periodogram) */ - float msAlpha[NPART]; /* Optimal smoothing parameter */ - float msMinBuf[MSNUMSUBFR * NPART]; /* Buffer of minima */ - float msCurrentMinOut[NPART]; - float msCurrentMin[NPART]; - float msCurrentMinSubWindow[NPART]; - float msPsdFirstMoment[NPART]; - float msPsdSecondMoment[NPART]; - float msNoiseFloor[NPART]; /* Estimated noise floor */ - float msNoiseEst[NPART]; /* Estimated noise level */ - float msNoiseEst_old[NPART]; - float energy_ho[NPART]; - float msLogPeriodog[NPART]; /* Periodogram */ - float msLogNoiseEst[NPART]; /* Estimated noise level */ - float msPeriodogBuf[MSBUFLEN * NPART]; - float mem_coherence[4]; -#endif Word32 msPeriodog_fx[NPART]; /* Periodogram */ Word16 msPeriodog_fx_exp; /* Common exponent for fft and cldfb energies */ Word16 msPeriodog_fx_exp_fft; @@ -584,37 +406,23 @@ typedef struct fd_cng_enc_structure typedef struct dtx_enc_structure { - Word16 cnt_SID; /* CNG and DTX - counter of SID update for the interop. mode or DTX, if enabled */ - Word16 first_CNG; /* CNG and DTX - first CNG frame flag */ - Word16 cng_cnt; /* CNG and DTX - counter of CNG frames for averaging */ - Word16 max_SID; /* CNG and DTX - max allowed number of CNG FRAME_NO_DATA frames */ - Word16 CNG_mode; /* CNG and DTX - mode for DTX configuration */ -#ifndef IVAS_FLOAT_FIXED - float lspCNG[M]; /* CNG and DTX - LP filtered ISPs */ -#else - Word16 lspCNG_fx[M]; /* CNG and DTX - LP filtered lsps Q15 */ -#endif - Word16 VarDTX_cnt_voiced; /* CNG and DTX - counter for variable DTX activation (speech) */ - Word16 VarDTX_cnt_noise; /* CNG and DTX - counter for variable DTX activation (noise) */ -#ifndef IVAS_FLOAT_FIXED - float lt_ener_voiced; /* CNG and DTX - long-term energy of signal (measured on voiced parts) */ - float lt_ener_noise; /* CNG and DTX - long-term energy of background noise */ - float frame_ener; -#else - Word32 lt_ener_voiced_fx; /* CNG and DTX - long-term energy of signal (measured on voiced parts) Q(-7) */ - Word32 lt_ener_noise_fx; /* CNG and DTX - long-term energy of background noise Q(-7) */ - Word32 frame_ener_fx; /* Q(-7) */ -#endif - Word16 cng_hist_size; /* CNG and DTX - size of CNG history buffer for averaging, <0,DTX_HIST_SIZE> */ -#ifndef IVAS_FLOAT_FIXED - float lt_ener_last_SID; /* CNG and DTX - long-term energy of last SID frame */ -#else - Word32 lt_ener_last_SID_fx; /* CNG and DTX - long-term energy of last SID frame Q(-7) */ -#endif - Word16 last_CNG_L_frame; /* CNG and DTX - last CNG frame length */ - Word16 var_SID_rate_flag; /* CNG and DTX - flag for variable SID rate */ - Word16 interval_SID; /* CNG and DTX - interval of SID update, default 8 */ - Word32 last_active_brate; /* CNG and DTX - last active frame bitrate used for CNG_mode control */ + Word16 cnt_SID; /* CNG and DTX - counter of SID update for the interop. mode or DTX, if enabled */ + Word16 first_CNG; /* CNG and DTX - first CNG frame flag */ + Word16 cng_cnt; /* CNG and DTX - counter of CNG frames for averaging */ + Word16 max_SID; /* CNG and DTX - max allowed number of CNG FRAME_NO_DATA frames */ + Word16 CNG_mode; /* CNG and DTX - mode for DTX configuration */ + Word16 lspCNG_fx[M]; /* CNG and DTX - LP filtered lsps Q15 */ + Word16 VarDTX_cnt_voiced; /* CNG and DTX - counter for variable DTX activation (speech) */ + Word16 VarDTX_cnt_noise; /* CNG and DTX - counter for variable DTX activation (noise) */ + Word32 lt_ener_voiced_fx; /* CNG and DTX - long-term energy of signal (measured on voiced parts) Q(-7) */ + Word32 lt_ener_noise_fx; /* CNG and DTX - long-term energy of background noise Q(-7) */ + Word32 frame_ener_fx; /* Q(-7) */ + Word16 cng_hist_size; /* CNG and DTX - size of CNG history buffer for averaging, <0,DTX_HIST_SIZE> */ + Word32 lt_ener_last_SID_fx; /* CNG and DTX - long-term energy of last SID frame Q(-7) */ + Word16 last_CNG_L_frame; /* CNG and DTX - last CNG frame length */ + Word16 var_SID_rate_flag; /* CNG and DTX - flag for variable SID rate */ + Word16 interval_SID; /* CNG and DTX - interval of SID update, default 8 */ + Word32 last_active_brate; /* CNG and DTX - last active frame bitrate used for CNG_mode control */ } DTX_ENC_DATA, *DTX_ENC_HANDLE; @@ -711,19 +519,6 @@ typedef struct igf_enc_instance_struct typedef struct noise_estimation_structure { -#ifndef IVAS_FLOAT_FIXED - float fr_bands1[NB_BANDS]; /* spectrum per critical bands of the previous frame */ - float fr_bands2[NB_BANDS]; /* spectrum per critical bands 2 frames ago */ - float old_S[L_FFT / 2]; /* Tonal detector - prev. log-energy spectrum with subtracted floor */ - float cor_map[L_FFT / 2]; /* Tonal detector - LT correlation map */ - float noise_char; /* Tonal detector - LT noise character */ - float act_pred; /* Tonal detector - prediction of speech activity from 0 to 1 (0-inactive, 1-active) */ - float multi_harm_limit; /* Tonal detector - adaptive threshold */ - float ave_enr2[NB_BANDS]; /* Tonal detector - LT average E per crit. band (for non_sta2) */ - float enrO[NB_BANDS]; /* Noise estimator - previous energy per critical band */ - float bckr[NB_BANDS]; /* Noise estimator - background noise estimation per critical band */ - float ave_enr[NB_BANDS]; /* Noise estimator - long-term average energy per critical band */ -#endif Word32 fr_bands1_fx[NB_BANDS]; /* Q_new + Q_SCALE spectrum per critical bands of the previous frame fr_bands_fx_q */ Word32 fr_bands2_fx[NB_BANDS]; /* Q_new + Q_SCALE spectrum per critical bands 2 frames ago fr_bands_fx_q */ Word16 fr_bands_fx_q; @@ -740,49 +535,24 @@ typedef struct noise_estimation_structure Word32 ave_enr_fx[NB_BANDS]; /* Q_new + Q_SCALE Noise estimator - long-term average energy per critical band ave_enr_q */ Word16 ave_enr_q; - Word16 aEn; /* Noise estimator - noise estimator adaptation flag */ -#ifndef IVAS_FLOAT_FIXED - float totalNoise; /* Noise estimator - total noise energy */ -#endif + Word16 aEn; /* Noise estimator - noise estimator adaptation flag */ Word16 totalNoise_fx; /* Q8 Noise estimator - total noise energy */ Word16 first_noise_updt; /* Noise estimator - flag used to determine if the first noise update frame */ Word16 first_noise_updt_cnt; /* Noise estimator - counter of frame after first noise update */ Word16 harm_cor_cnt; /* Noise estimator - 1st memory counter of harm or correlation frame */ Word16 bg_cnt; /* Noise estimator - pause length counter */ -#ifndef IVAS_FLOAT_FIXED - float Etot_l; /* Noise estimator - Track energy from below */ - float Etot_h; /* Noise estimator - Track energy from above */ - - float Etot_l_lp; /* Noise estimator - Smoothed low energy */ - float Etot_last; /* Noise estimator - Energy of last frame */ - float Etot_lp; /* Noise estimator - Filtered input energy */ - - float lt_tn_track; - float lt_tn_dist; - float lt_Ellp_dist; - float lt_haco_ev; -#endif - Word16 Etot_l_fx; /* Q8 Noise estimator - Track energy from below */ - Word16 Etot_h_fx; /* Q8 Noise estimator - Track energy from above */ - Word16 Etot_l_lp_fx; /* Q8 Noise estimator - Smoothed low energy */ - Word16 Etot_last_fx; /*Q8*/ - Word16 Etot_lp_fx; /* Q8 Noise estimator - Filtered input energy */ + Word16 Etot_l_fx; /* Q8 Noise estimator - Track energy from below */ + Word16 Etot_h_fx; /* Q8 Noise estimator - Track energy from above */ + Word16 Etot_l_lp_fx; /* Q8 Noise estimator - Smoothed low energy */ + Word16 Etot_last_fx; /*Q8*/ + Word16 Etot_lp_fx; /* Q8 Noise estimator - Filtered input energy */ Word16 lt_tn_track_fx; /* Q15 */ Word16 lt_tn_dist_fx; /* Q8*/ Word16 lt_Ellp_dist_fx; /* Etot low lp same domain as *Etot_l_lp, Q8 */ Word16 lt_haco_ev_fx; /* Q15 */ Word16 low_tn_track_cnt; -#ifndef IVAS_FLOAT_FIXED - float epsP_0_2_lp; - float epsP_0_2_ad_lp; - float epsP_2_16_lp; - float epsP_2_16_lp2; - float epsP_2_16_dlp_lp; - float epsP_2_16_dlp_lp2; - float lt_aEn_zero; -#endif Word16 epsP_0_2_lp_fx; /* Q12, all epsP quotas , range ]8.0 ..0]*/ Word16 epsP_0_2_ad_lp_fx; Word16 epsP_2_16_lp_fx; @@ -790,12 +560,6 @@ typedef struct noise_estimation_structure Word16 epsP_2_16_dlp_lp2_fx; /* Q12 */ Word16 lt_aEn_zero_fx; /* Q15 */ -#ifndef IVAS_FLOAT_FIXED - float Etot_v_h2; - float sign_dyn_lp; - float Etot_st_est; /* Noise estimation - short term estimate of E{ Etot } */ - float Etot_sq_st_est; /* Noise estimation - short term estimate of E{ Etot^2 } */ -#endif Word16 Etot_v_h2_fx; Word16 sign_dyn_lp_fx; /*Q8*/ @@ -812,243 +576,113 @@ typedef struct noise_estimation_structure typedef struct sp_mus_clas_structure { -#ifndef IVAS_FLOAT_FIXED - float FV_st[N_SMC_FEATURES]; /* Speech/music classifier - short-term mean of the feature vector */ - float past_PS[HIGHEST_FBIN - LOWEST_FBIN]; - float past_ps_diff; - float prev_FV[N_SMC_FEATURES]; - float past_epsP; - float past_epsP2; -#else - Word32 FV_st_fx[N_SMC_FEATURES]; /* Speech/music classifier - short-term mean of the feature vector Q20 */ - Word32 past_PS_fx[HIGHEST_FBIN - LOWEST_FBIN]; /* Q(past_PS_Q) */ + Word32 FV_st_fx[N_SMC_FEATURES]; /* Speech/music classifier - short-term mean of the feature vector Q20 */ + Word32 past_PS_fx[HIGHEST_FBIN - LOWEST_FBIN]; /* Q(past_PS_Q) */ Word16 past_PS_Q; Word16 past_ps_diff_fx; /* Q10 */ Word32 prev_FV_fx[N_SMC_FEATURES]; /* Q20 */ Word16 past_epsP_fx; - Word16 past_epsP2_fx; /* Q10 */ -#endif + Word16 past_epsP2_fx; /* Q10 */ Word16 inact_cnt; -#ifndef IVAS_FLOAT_FIXED - float wdrop; - float wrise; - float wdlp_0_95_sp; - float wdlp_xtalk; -#else - Word16 wdrop_fx; /* Q9 */ - Word16 wrise_fx; /* Q9 */ - Word16 wdlp_0_95_sp_fx; /* EVS - Q8 */ - Word32 wdlp_0_95_sp_32fx; /* IVAS - Q24 */ - Word32 wdlp_xtalk_fx; /* Q19 */ -#endif + Word16 wdrop_fx; /* Q9 */ + Word16 wrise_fx; /* Q9 */ + Word16 wdlp_0_95_sp_fx; /* EVS - Q8 */ + Word32 wdlp_0_95_sp_32fx; /* IVAS - Q24 */ + Word32 wdlp_xtalk_fx; /* Q19 */ Word16 sp_mus_state; - Word16 past_dec[HANG_LEN - 1]; /* Speech/music classifier - buffer of past binary decisions */ -#ifndef IVAS_FLOAT_FIXED - float past_dlp[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions */ - float past_dlp_mean_ST[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions (with ST smoothing) */ - float dlp_mean_ST; -#else + Word16 past_dec[HANG_LEN - 1]; /* Speech/music classifier - buffer of past binary decisions */ Word16 past_dlp_fx[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions Q9 */ Word32 past_dlp_mean_ST_fx[HANG_LEN - 1]; /* Speech/music classifier - buffer of past non-binary decisions (with ST smoothing) Q19 */ Word32 dlp_mean_ST_fx; /* Q19 */ -#endif Word16 flag_spitch_cnt; -#ifndef IVAS_FLOAT_FIXED - float dlp_mean_LT; - float dlp_var_LT; - float last_lsp[M_LSP_SPMUS]; - float last_cor_map_sum; - float last_non_sta; - float past_log_enr[NB_BANDS_SPMUS]; /* Speech/music classifier - last average per-band log energy used for non_staX */ - float gsc_thres[4]; /* Speech/music classifier - classification threshold */ - float gsc_lt_diff_etot[MAX_LT]; /* Speech/music classifier - long-term total energy variation */ - float gsc_mem_etot; /* Speech/music classifier - total energy memory */ -#else - Word32 dlp_mean_LT_fx; /* Q19 */ - Word32 dlp_var_LT_fx; /* Q19 */ - Word16 last_lsp_fx[M_LSP_SPMUS]; /* Q13 */ - Word16 last_cor_map_sum_fx; /* Q8 */ - Word16 last_non_sta_fx; /* Q8 */ - Word16 past_log_enr_fx[NB_BANDS_SPMUS]; /* Speech/music classifier - last average per-band log energy used for non_staX Q8 */ - Word16 gsc_thres_fx[4]; /* Speech/music classifier - classification threshold Q11 */ - Word16 gsc_lt_diff_etot_fx[MAX_LT]; /* Speech/music classifier - long-term total energy variation Q8 */ - Word16 gsc_mem_etot_fx; /* Speech/music classifier - total energy memory Q8 */ -#endif - Word16 gsc_last_music_flag; /* Speech/music classifier - last music flag */ - Word16 gsc_nb_thr_1; /* Speech/music classifier - number of consecutives frames of level 1 */ - Word16 gsc_nb_thr_3; /* Speech/music classifier - number of consecutives frames of level 3 */ -#ifndef IVAS_FLOAT_FIXED - float mold_corr; - float mean_avr_dyn; /* Speech/music classifier - long term average dynamic */ - float last_sw_dyn; /* Speech/music classifier - last dynamic */ - float lt_dec_thres; /* Speech/music classifier - Long term speech/music thresold values */ - float ener_RAT; /* Speech/music classifier - LF/to total energy ratio */ -#else - Word16 mold_corr_fx; /* Q15 */ - Word16 mean_avr_dyn_fx; /* Speech/music classifier - long term average dynamic Q7 */ - Word16 last_sw_dyn_fx; /* Speech/music classifier - last dynamic Q7 */ - Word16 lt_dec_thres_fx; /* Speech/music classifier - Long term speech/music thresold values Q9 */ - Word16 ener_RAT_fx; /* Speech/music classifier - LF/to total energy ratio Q15 */ -#endif + Word32 dlp_mean_LT_fx; /* Q19 */ + Word32 dlp_var_LT_fx; /* Q19 */ + Word16 last_lsp_fx[M_LSP_SPMUS]; /* Q13 */ + Word16 last_cor_map_sum_fx; /* Q8 */ + Word16 last_non_sta_fx; /* Q8 */ + Word16 past_log_enr_fx[NB_BANDS_SPMUS]; /* Speech/music classifier - last average per-band log energy used for non_staX Q8 */ + Word16 gsc_thres_fx[4]; /* Speech/music classifier - classification threshold Q11 */ + Word16 gsc_lt_diff_etot_fx[MAX_LT]; /* Speech/music classifier - long-term total energy variation Q8 */ + Word16 gsc_mem_etot_fx; /* Speech/music classifier - total energy memory Q8 */ + Word16 gsc_last_music_flag; /* Speech/music classifier - last music flag */ + Word16 gsc_nb_thr_1; /* Speech/music classifier - number of consecutives frames of level 1 */ + Word16 gsc_nb_thr_3; /* Speech/music classifier - number of consecutives frames of level 3 */ + Word16 mold_corr_fx; /* Q15 */ + Word16 mean_avr_dyn_fx; /* Speech/music classifier - long term average dynamic Q7 */ + Word16 last_sw_dyn_fx; /* Speech/music classifier - last dynamic Q7 */ + Word16 lt_dec_thres_fx; /* Speech/music classifier - Long term speech/music thresold values Q9 */ + Word16 ener_RAT_fx; /* Speech/music classifier - LF/to total energy ratio Q15 */ Word16 relE_attack_cnt; -#ifndef IVAS_FLOAT_FIXED - float prev_relE; - float prev_Etot; -#else - Word16 prev_relE_fx; /* Q8 */ - Word16 prev_Etot_fx; /* Q8 */ -#endif + Word16 prev_relE_fx; /* Q8 */ + Word16 prev_Etot_fx; /* Q8 */ Word16 prev_vad; Word16 vad_0_1_cnt; -#ifndef IVAS_FLOAT_FIXED - float relE_attack_sum; -#else - Word16 relE_attack_sum_fx; /* Q8 */ -#endif + Word16 relE_attack_sum_fx; /* Q8 */ /* speech/music classifier improvement parameters */ -#ifndef IVAS_FLOAT_FIXED - float old_Bin_E[3 * N_OLD_BIN_E]; - float buf_flux[BUF_LEN]; - float buf_pkh[BUF_LEN]; - float buf_epsP_tilt[BUF_LEN]; - float buf_cor_map_sum[BUF_LEN]; - float buf_Ntonal[BUF_LEN]; - float buf_Ntonal2[BUF_LEN]; - float buf_Ntonal_lf[BUF_LEN]; - float buf_dlp[10]; -#else - Word16 old_Bin_E_fx[3 * N_OLD_BIN_E]; /* Q7 */ - Word16 buf_flux_fx[BUF_LEN]; /* Q7 */ - Word16 buf_pkh_fx[BUF_LEN]; /* Q1 */ - Word16 buf_epsP_tilt_fx[BUF_LEN]; /* Q15 */ - Word16 buf_cor_map_sum_fx[BUF_LEN]; /* Q8 */ - Word16 buf_Ntonal_fx[BUF_LEN]; /* Q0 */ - Word16 buf_Ntonal2_fx[BUF_LEN]; /* Q0 */ - Word16 buf_Ntonal_lf_fx[BUF_LEN]; /* Q0 */ - Word16 buf_dlp_fx[10]; /* Q9 */ -#endif + Word16 old_Bin_E_fx[3 * N_OLD_BIN_E]; /* Q7 */ + Word16 buf_flux_fx[BUF_LEN]; /* Q7 */ + Word16 buf_pkh_fx[BUF_LEN]; /* Q1 */ + Word16 buf_epsP_tilt_fx[BUF_LEN]; /* Q15 */ + Word16 buf_cor_map_sum_fx[BUF_LEN]; /* Q8 */ + Word16 buf_Ntonal_fx[BUF_LEN]; /* Q0 */ + Word16 buf_Ntonal2_fx[BUF_LEN]; /* Q0 */ + Word16 buf_Ntonal_lf_fx[BUF_LEN]; /* Q0 */ + Word16 buf_dlp_fx[10]; /* Q9 */ Word16 onset_cnt; -#ifndef IVAS_FLOAT_FIXED - float buf_etot[4]; -#else - Word16 buf_etot_fx[4]; /* Q8 */ -#endif + Word16 buf_etot_fx[4]; /* Q8 */ Word16 attack_hangover; -#ifndef IVAS_FLOAT_FIXED - float dec_mov; - float dec_mov1; - float mov_log_max_spl; - float old_lt_diff[2]; -#else - Word16 dec_mov_fx; /* Q15 */ - Word16 dec_mov1_fx; /* Q15 */ - Word16 mov_log_max_spl_fx; /* Q7 */ - Word16 old_lt_diff_fx[2]; /* Q7 */ -#endif + Word16 dec_mov_fx; /* Q15 */ + Word16 dec_mov1_fx; /* Q15 */ + Word16 mov_log_max_spl_fx; /* Q7 */ + Word16 old_lt_diff_fx[2]; /* Q7 */ Word16 UV_cnt1; -#ifndef IVAS_FLOAT_FIXED - float LT_UV_cnt1; -#else - Word16 LT_UV_cnt1_fx; /* Q6 */ -#endif + Word16 LT_UV_cnt1_fx; /* Q6 */ -#ifndef IVAS_FLOAT_FIXED - float finc_prev[ATT_NSEG]; /* strong attack detection - previous finc */ - float lt_finc; /* strong attack detection - long-term finc energy */ -#else - Word32 finc_prev_fx[ATT_NSEG]; /* strong attack detection - previous finc, (Q_new * 2) */ - Word32 lt_finc_fx; /* strong attack detection - long-term finc energy, (Q_new * 2) */ -#endif - Word16 last_strong_attack; /* strong attack detection - last strong attack flag */ -#ifndef IVAS_FLOAT_FIXED - float tod_lt_Bin_E[TOD_NSPEC]; /* tonal detector - long-term energy spectrum */ - float tod_S_map_lt[TOD_NSPEC]; /* tonal detector - long-term correlation map */ - float tod_thr_lt; /* tonal detector - adaptive threshold */ - float tod_weight; /* tonal detector - adaptive weight */ - float tod_S_mass_prev; - float tod_S_mass_lt; -#else - Word32 tod_lt_Bin_E_fx[TOD_NSPEC]; /* tonal detector - long-term energy spectrum, Q_tod_lt_Bin_E */ + Word32 finc_prev_fx[ATT_NSEG]; /* strong attack detection - previous finc, (Q_new * 2) */ + Word32 lt_finc_fx; /* strong attack detection - long-term finc energy, (Q_new * 2) */ + Word16 last_strong_attack; /* strong attack detection - last strong attack flag */ + Word32 tod_lt_Bin_E_fx[TOD_NSPEC]; /* tonal detector - long-term energy spectrum, Q_tod_lt_Bin_E */ Word16 Q_tod_lt_Bin_E; - Word32 tod_S_map_lt_fx[TOD_NSPEC]; /* tonal detector - long-term correlation map, Q22 */ - Word32 tod_thr_lt_fx; /* tonal detector - adaptive threshold, Q22 */ - Word16 tod_weight_fx; /* tonal detector - adaptive weight, Q15 */ - Word32 tod_S_mass_prev_fx; /* Q22 */ - Word32 tod_S_mass_lt_fx; /* Q22 */ -#endif + Word32 tod_S_map_lt_fx[TOD_NSPEC]; /* tonal detector - long-term correlation map, Q22 */ + Word32 tod_thr_lt_fx; /* tonal detector - adaptive threshold, Q22 */ + Word16 tod_weight_fx; /* tonal detector - adaptive weight, Q15 */ + Word32 tod_S_mass_prev_fx; /* Q22 */ + Word32 tod_S_mass_lt_fx; /* Q22 */ Word16 lt_music_hangover; -#ifndef IVAS_FLOAT_FIXED - float tonality2_buf[HANG_LEN_INIT]; - float tonality3_buf[HANG_LEN_INIT]; - float LPCErr_buf[HANG_LEN_INIT]; -#else Word16 tonality2_buf_fx[HANG_LEN_INIT]; /* Q14 */ Word16 tonality3_buf_fx[HANG_LEN_INIT]; /* Q14 */ Word16 LPCErr_buf_fx[HANG_LEN_INIT]; /* Q10 */ -#endif Word16 lt_music_state; Word16 lt_speech_state; Word16 lt_speech_hangover; -#ifndef IVAS_FLOAT_FIXED - float lpe_buf[HANG_LEN_INIT]; - float voicing_buf[HANG_LEN_INIT]; -#else - Word16 lpe_buf_fx[HANG_LEN_INIT]; /* Q10 */ - Word16 voicing_buf_fx[HANG_LEN_INIT]; /* Q13 */ -#endif + Word16 lpe_buf_fx[HANG_LEN_INIT]; /* Q10 */ + Word16 voicing_buf_fx[HANG_LEN_INIT]; /* Q13 */ Word16 gsc_hangover; -#ifndef IVAS_FLOAT_FIXED - float sparse_buf[HANG_LEN_INIT]; - float hf_spar_buf[HANG_LEN_INIT]; - float LT_sparse; -#else Word16 sparse_buf_fx[HANG_LEN_INIT]; Word16 hf_spar_buf_fx[HANG_LEN_INIT]; /* Q15 */ Word16 LT_sparse_fx; /* Q8 */ -#endif Word16 gsc_cnt; /* speech/music classification */ Word16 last_vad_spa; Word16 lt_old_mode[3]; -#ifndef IVAS_FLOAT_FIXED - float lt_voicing_flt; - float lt_corr_flt; - float lt_tonality_flt; -#else - Word16 lt_voicing; /* Q15 */ - Word16 lt_corr; /* Q15 */ - Word32 lt_tonality; /* Q15 */ -#endif + Word16 lt_voicing; /* Q15 */ + Word16 lt_corr; /* Q15 */ + Word32 lt_tonality; /* Q15 */ Word16 lt_corr_pitch[3]; Word16 lt_hangover; -#ifndef IVAS_FLOAT_FIXED - float lowrate_pitchGain_flt; -#else - Word16 lowrate_pitchGain; /* Q14 */ -#endif + Word16 lowrate_pitchGain; /* Q14 */ -#ifndef IVAS_FLOAT_FIXED - float tdm_lt_Etot; - float var_cor_t[VAR_COR_LEN]; -#else - Word16 tdm_lt_Etot_fx; /* Q8 */ - Word16 var_cor_t_fx[VAR_COR_LEN]; /* Q11 */ -#endif + Word16 tdm_lt_Etot_fx; /* Q8 */ + Word16 var_cor_t_fx[VAR_COR_LEN]; /* Q11 */ Word16 high_stable_cor; -#ifndef IVAS_FLOAT_FIXED - float lps; - float lpm; - float lpn; -#else - Word16 lps_fx; /* Q7 */ - Word16 lpm_fx; /* Q7 */ - Word16 lpn_fx; /* Q7 */ -#endif + Word16 lps_fx; /* Q7 */ + Word16 lpm_fx; /* Q7 */ + Word16 lpn_fx; /* Q7 */ } SP_MUS_CLAS_DATA, *SP_MUS_CLAS_HANDLE; @@ -1066,40 +700,20 @@ typedef struct lpd_state_structure #endif /* signal memory */ -#ifndef IVAS_FLOAT_FIXED - float syn_flt[1 + M]; /* Synthesis memory (non-pe) */ - - /* ACELP memories*/ - float old_exc_flt[L_EXC_MEM]; /* ACELP exc memory (Aq) */ -#endif Word16 syn[1 + M]; /* Synthesis memory (non-pe) */ Word16 q_lpd_syn; Word16 old_exc[L_EXC_MEM]; /* ACELP exc memory (Aq) */ Word16 q_lpd_old_exc; -#ifndef IVAS_FLOAT_FIXED - float mem_w0_flt; - float mem_syn_flt[M]; /* ACELP synthesis memory (pe) before post-proc */ - float mem_syn1_flt[M]; - float mem_syn2_flt[M]; /* ACELP synthesis memory (pe) after post-proc */ - float mem_syn_r_flt[L_SYN_MEM]; /* ACELP synthesis memory for 1.25ms */ - float mem_syn3_flt[M]; -#endif Word16 mem_w0; /* weighting filter memory */ Word16 mem_syn[M]; /* ACELP synthesis memory (pe) before post-proc */ Word16 mem_syn1_fx[M]; /* synthesis filter memory (for core switching and FD BWE) */ Word16 mem_syn2[M]; /* ACELP synthesis memory (pe) after post-proc */ Word16 mem_syn_r[L_SYN_MEM]; /* ACELP synthesis memory for 1.25ms */ Word16 mem_syn3[M]; - Word16 q_mem_syn; /* common for all above buffers*/ -#ifndef IVAS_FLOAT_FIXED - float tilt_code_flt; - float gc_threshold_flt; /* Noise enhancer - threshold for gain_code */ - float dispMem_flt[8]; /* Noise enhancer - phase dispersion algorithm memory */ -#else - Word16 tilt_code; /* Q15 */ - Word32 gc_threshold; /* Noise enhancer - threshold for gain_code. exponent = 15, 15Q16 */ - struct dispMem_fx dm_fx; /* Noise enhancer - phase dispersion algorithm memory */ -#endif + Word16 q_mem_syn; /* common for all above buffers*/ + Word16 tilt_code; /* Q15 */ + Word32 gc_threshold; /* Noise enhancer - threshold for gain_code. exponent = 15, 15Q16 */ + struct dispMem_fx dm_fx; /* Noise enhancer - phase dispersion algorithm memory */ } LPD_state, *LPD_state_HANDLE; @@ -1107,20 +721,12 @@ typedef struct lpd_state_structure /* Structure for storing correlations between ACELP codebook components and target */ typedef struct acelp_cbkcorr_structure { -#ifndef IVAS_FLOAT_FIXED - float xx_flt; /* energy of target x */ - float y1y1_flt; /* energy of adaptive cbk contribution y1 */ - float y2y2_flt; /* energy of fixed cbk contribution y2 */ - float xy1_flt; /* correlation of x and y1 */ - float xy2_flt; /* correlation of x and y2 */ - float y1y2_flt; /* correlation of y1 and y2 */ -#else - Word16 xx; /* energy of target x */ - Word16 y1y1; /* energy of adaptive cbk contribution y1 */ - Word16 y2y2; /* energy of fixed cbk contribution y2 */ - Word16 xy1; /* correlation of x and y1 */ - Word16 xy2; /* correlation of x and y2 */ - Word16 y1y2; /* correlation of y1 and y2 */ + Word16 xx; /* energy of target x */ + Word16 y1y1; /* energy of adaptive cbk contribution y1 */ + Word16 y2y2; /* energy of fixed cbk contribution y2 */ + Word16 xy1; /* correlation of x and y1 */ + Word16 xy2; /* correlation of x and y2 */ + Word16 y1y2; /* correlation of y1 and y2 */ Word16 xx_e; /* energy of target x */ Word16 y1y1_e; /* energy of adaptive cbk contribution y1 */ @@ -1128,7 +734,6 @@ typedef struct acelp_cbkcorr_structure Word16 xy1_e; /* correlation of x and y1 */ Word16 xy2_e; /* correlation of x and y2 */ Word16 y1y2_e; /* correlation of y1 and y2 */ -#endif } ACELP_CbkCorr; @@ -1141,36 +746,18 @@ typedef struct gsc_enc_structure int16_t seed_tcx; /* AC mode (GSC) - seed for noise fill */ int16_t cor_strong_limit; /* AC mode (GSC) - Indicator about high spectral correlation per band */ int16_t mem_last_pit_band; /* AC mode (GSC) - memory of the last band where pitch contribution was significant */ -#ifndef IVAS_FLOAT_FIXED - float mem_w0_tmp; - float mem_syn_tmp[M]; - float mid_dyn; /* AC mode (GSC) - signal dynamic */ - float Last_frame_ener; /* AC mode (GSC) - Last frame energy */ -#else Word16 mem_w0_tmp_fx; Word16 mem_syn_tmp_fx[M]; - Word16 mid_dyn_fx; /* AC mode (GSC) - signal dynamic Q7 */ -#endif - int16_t noise_lev; /* AC mode (GSC) - noise level */ - int16_t past_dyn_dec; /* AC mode (GSC) - Past noise level decision */ - Word32 Last_frame_ener_fx; /* AC mode (GSC) - Last frame energy */ - int16_t pit_exc_hangover; /* AC mode (GSC) - Hangover for the time contribution switching */ -#ifndef IVAS_FLOAT_FIXED - float last_exc_dct_in[L_FRAME16k]; /* AC mode (GSC) - previous excitation */ -#endif + Word16 mid_dyn_fx; /* AC mode (GSC) - signal dynamic Q7 */ + int16_t noise_lev; /* AC mode (GSC) - noise level */ + int16_t past_dyn_dec; /* AC mode (GSC) - Past noise level decision */ + Word32 Last_frame_ener_fx; /* AC mode (GSC) - Last frame energy */ + int16_t pit_exc_hangover; /* AC mode (GSC) - Hangover for the time contribution switching */ Word16 last_exc_dct_in_fx[L_FRAME16k]; /* AC mode (GSC) - previous exciation */ Word16 Q_last_exc_dct_in; -#ifndef IVAS_FLOAT_FIXED - float last_ener; /* AC mode (GSC) - previous energy */ -#else - Word16 last_ener_fx; /* AC mode (GSC) - previous energy Q0 */ -#endif + Word16 last_ener_fx; /* AC mode (GSC) - previous energy Q0 */ int16_t last_bitallocation_band[6]; /* AC mode (GSC) - previous bit allocation of each band */ -#ifndef IVAS_FLOAT_FIXED - float lt_gpitch; -#else - Word16 lt_gpitch_fx; /* Q15 */ -#endif + Word16 lt_gpitch_fx; /* Q15 */ } GSC_ENC_DATA, *GSC_ENC_HANDLE; @@ -1189,10 +776,6 @@ typedef struct hq_enc_structure Word16 prev_SWB_peak_pos[SPT_SHORTEN_SBNUM]; Word16 hq_generic_speech_class; -#ifndef IVAS_FLOAT_FIXED - float crest_lp; /* Low-pass filtered crest of high band */ - float crest_mod_lp; /* Low-pass filtered noise band detection */ -#endif Word32 crest_lp_fx; Word16 crest_lp_q; Word32 crest_mod_lp_fx; @@ -1201,22 +784,12 @@ typedef struct hq_enc_structure Word16 prev_frm_index[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; Word16 prev_frm_hfe2; Word16 prev_stab_hfe2; -#ifndef IVAS_FLOAT_FIXED - float prev_ni_ratio; - float prev_En_sb[NB_SWB_SUBBANDS]; -#else - Word16 prev_ni_ratio_fx; /* Q15 */ - Word16 prev_En_sb_fx[NB_SWB_SUBBANDS]; /* QsEn(4) */ -#endif + Word16 prev_ni_ratio_fx; /* Q15 */ + Word16 prev_En_sb_fx[NB_SWB_SUBBANDS]; /* QsEn(4) */ Word16 last_bitalloc_max_band[2]; -#ifndef IVAS_FLOAT_FIXED - float last_ni_gain[BANDS_MAX]; - float last_env[BANDS_MAX]; -#else - Word32 last_ni_gain_fx[BANDS_MAX]; /* Q17 */ - Word16 last_env_fx[BANDS_MAX]; /* Q1 */ -#endif + Word32 last_ni_gain_fx[BANDS_MAX]; /* Q17 */ + Word16 last_env_fx[BANDS_MAX]; /* Q1 */ Word16 last_max_pos_pulse; @@ -1243,49 +816,24 @@ typedef struct pvq_enc_structure typedef struct sc_vbr_enc_structure { -#ifndef IVAS_FLOAT_FIXED - float vadsnr; - float vadnoise; -#else - Word16 vadsnr_fx; /* Q7 */ - Word16 vadnoise_fx; /* Q8 */ -#endif + Word16 vadsnr_fx; /* Q7 */ + Word16 vadnoise_fx; /* Q8 */ /* NELP variables */ -#ifndef IVAS_FLOAT_FIXED - float shape1_filt_mem[20]; - float shape2_filt_mem[20]; - float shape3_filt_mem[20]; - float txlpf1_filt1_mem[20]; - float txlpf1_filt2_mem[20]; - float txhpf1_filt1_mem[20]; - float txhpf1_filt2_mem[20]; -#else - Word16 shape1_filt_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 shape2_filt_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 shape3_filt_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 txlpf1_filt1_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 txlpf1_filt2_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 txhpf1_filt1_mem_fx[10]; /* Q(qprevGain_fx) */ - Word16 txhpf1_filt2_mem_fx[10]; /* Q(qprevGain_fx) */ -#endif - -#ifndef IVAS_FLOAT_FIXED - float bp1_filt_mem_wb[8]; - float nelp_lp_fit_mem_flt[NELP_LP_ORDER * 2]; - float bp1_filt_mem_nb[14]; -#else - Word16 bp1_filt_mem_wb_fx[8]; /* Q(qprevGain_fx) */ - Word16 nelp_lp_fit_mem[NELP_LP_ORDER * 2]; /* Q(prev_Q_new) */ - Word32 bp1_filt_mem_nb_fx[14]; /* Q(qprevGain_fx) */ -#endif + Word16 shape1_filt_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 shape2_filt_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 shape3_filt_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 txlpf1_filt1_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 txlpf1_filt2_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 txhpf1_filt1_mem_fx[10]; /* Q(qprevGain_fx) */ + Word16 txhpf1_filt2_mem_fx[10]; /* Q(qprevGain_fx) */ + + Word16 bp1_filt_mem_wb_fx[8]; /* Q(qprevGain_fx) */ + Word16 nelp_lp_fit_mem[NELP_LP_ORDER * 2]; /* Q(prev_Q_new) */ + Word32 bp1_filt_mem_nb_fx[14]; /* Q(qprevGain_fx) */ int16_t nelp_enc_seed; -#ifndef IVAS_FLOAT_FIXED - float nelp_gain_mem; -#else - Word16 nelp_gain_mem_fx; /* Q0 */ -#endif + Word16 nelp_gain_mem_fx; /* Q0 */ int16_t last_nelp_mode; int16_t nelp_mode; @@ -1298,73 +846,41 @@ typedef struct sc_vbr_enc_structure int16_t last_ppp_mode; int16_t last_last_ppp_mode; int16_t ppp_mode; -#ifndef IVAS_FLOAT_FIXED - float prev_ppp_gain_pit; - float prev_tilt_code; -#else - Word16 prev_ppp_gain_pit_fx; /* Q14 */ - Word16 prev_tilt_code_fx; /* Q15 */ -#endif + Word16 prev_ppp_gain_pit_fx; /* Q14 */ + Word16 prev_tilt_code_fx; /* Q15 */ /* voiced encoder variables */ int16_t firstTime_voicedenc; /* DTFS variables */ -#ifndef IVAS_FLOAT_FIXED - float dtfs_enc_a[MAXLAG_WI]; - float dtfs_enc_b[MAXLAG_WI]; -#else - Word16 dtfs_enc_a_fx[MAXLAG_WI]; /* Q(dtfs_enc_Q) */ - Word16 dtfs_enc_b_fx[MAXLAG_WI]; /* Q(dtfs_enc_Q) */ -#endif + Word16 dtfs_enc_a_fx[MAXLAG_WI]; /* Q(dtfs_enc_Q) */ + Word16 dtfs_enc_b_fx[MAXLAG_WI]; /* Q(dtfs_enc_Q) */ int16_t dtfs_enc_lag; int16_t dtfs_enc_nH; int16_t dtfs_enc_nH_4kHz; -#ifndef IVAS_FLOAT_FIXED - float dtfs_enc_upper_cut_off_freq_of_interest; - float dtfs_enc_upper_cut_off_freq; -#else Word16 dtfs_enc_upper_cut_off_freq_of_interest_fx; /* Q0 */ Word16 dtfs_enc_upper_cut_off_freq_fx; /* Q0 */ -#endif Word16 dtfs_enc_Q; -#ifndef IVAS_FLOAT_FIXED - float prev_cw_en; - float ph_offset_E; - float lastLgainE; /* Previous gain value for the low band */ - float lastHgainE; /* Previous gain value for the high band */ - float lasterbE[NUM_ERB_WB]; /* Previous Amplitude spectrum (ERB) */ -#else - Word32 prev_cw_en_fx; /* Q(Q_prev_cw_en_fx) */ - Word16 ph_offset_E_fx; /* normalized y 2*Pi Q15 */ - Word16 lastLgainE_fx; /* Previous gain value for the low band Q11 */ - Word16 lastHgainE_fx; /* Previous gain value for the high band Q11 */ - Word16 lasterbE_fx[NUM_ERB_WB]; /* Previous Amplitude spectrum (ERB) Q13 */ -#endif + Word32 prev_cw_en_fx; /* Q(Q_prev_cw_en_fx) */ + Word16 ph_offset_E_fx; /* normalized y 2*Pi Q15 */ + Word16 lastLgainE_fx; /* Previous gain value for the low band Q11 */ + Word16 lastHgainE_fx; /* Previous gain value for the high band Q11 */ + Word16 lasterbE_fx[NUM_ERB_WB]; /* Previous Amplitude spectrum (ERB) Q13 */ Word16 Q_prev_cw_en_fx; int16_t mode_QQF; int16_t rate_control; -#ifndef IVAS_FLOAT_FIXED - float SNR_THLD; -#else - Word16 SNR_THLD_fx; /* Q8 */ -#endif + Word16 SNR_THLD_fx; /* Q8 */ int16_t Q_to_F; int16_t pattern_m; int16_t patterncount; int16_t Last_Resort; - int16_t numactive; /* keep the count of the frames inside current 600 frame block */ -#ifndef IVAS_FLOAT_FIXED - float sum_of_rates; /* sum of the rates of past 600 active frames */ - float global_avr_rate; /* global rate up to current time. recorded a (rate in kbps) * 6000 */ -#else - Word32 sum_of_rates_fx; /*Q=13 sum of the rates of past 600 active frames*/ - Word32 global_avr_rate_fx; /*Q=13 global rate upto current time. recorded a (rate in kbps) *6000*/ -#endif - int16_t global_frame_cnt; /* 600 active frame block count. Used to update the global rate */ + int16_t numactive; /* keep the count of the frames inside current 600 frame block */ + Word32 sum_of_rates_fx; /*Q=13 sum of the rates of past 600 active frames*/ + Word32 global_avr_rate_fx; /*Q=13 global rate upto current time. recorded a (rate in kbps) *6000*/ + int16_t global_frame_cnt; /* 600 active frame block count. Used to update the global rate */ int16_t set_ppp_generic; int16_t avoid_HQ_VBR_NB; @@ -1380,26 +896,14 @@ typedef struct sc_vbr_enc_structure typedef struct amrwb_io_enc_structure { -#ifndef IVAS_FLOAT_FIXED - float past_qua_en[4]; /* gain quantization memory (used also in AMR-WB IO mode) */ -#else - Word16 past_qua_en_fx[4]; /* gain quantization memory (used also in AMR-WB IO mode) Q10 */ -#endif + Word16 past_qua_en_fx[4]; /* gain quantization memory (used also in AMR-WB IO mode) Q10 */ /* HF WB BWE for AMR-WB IO mode at 23.85 kbps */ -#ifndef IVAS_FLOAT_FIXED - float gain_alpha; - float mem_hf2_enc[L_FIR - 1]; - float mem_hp400_enc[4]; - float mem_hf_enc[L_FIR - 1]; - float mem_syn_hf_enc[M]; -#else - Word16 gain_alpha_fx; /* Q14 */ + Word16 gain_alpha_fx; /* Q14 */ Word16 mem_hf2_enc_fx[L_FIR - 1]; Word16 mem_hp400_enc_fx[6]; Word16 mem_hf_enc_fx[L_FIR - 1]; Word16 mem_syn_hf_enc_fx[M]; -#endif int16_t seed2_enc; } AMRWB_IO_ENC_DATA, *AMRWB_IO_ENC_HANDLE; @@ -1410,14 +914,6 @@ typedef struct amrwb_io_enc_structure typedef struct td_bwe_enc_structure { -#ifndef IVAS_FLOAT_FIXED - float old_speech_shb[L_LOOK_16k + L_SUBFR16k]; /* Buffer memories */ - float old_speech_wb[( L_LOOK_12k8 + L_SUBFR ) * 5 / 16]; /* Buffer memories */ - float old_input_fhb[NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2]; - float prev_lsp_shb[LPC_SHB_ORDER]; - float state_ana_filt_shb[2 * ALLPASSSECTIONS_STEEP + 1]; /* states for the analysis filters */ - float cldfbHBLT_flt; -#else Word16 old_speech_shb_fx[L_LOOK_16k + L_SUBFR16k]; /* Buffer memories Q(Q_shb_spch) */ Word16 old_speech_wb_fx[( L_LOOK_12k8 + L_SUBFR ) * 5 / 16]; /* Buffer memories Q(-1) */ Word16 old_input_fhb_fx[NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2]; /* Q(old_input_fhb_fx_Q) */ @@ -1425,53 +921,24 @@ typedef struct td_bwe_enc_structure Word16 prev_lsp_shb_fx[LPC_SHB_ORDER]; /* Q15 */ Word16 state_ana_filt_shb_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; /* states for the analysis filters */ Word16 cldfbHBLT; /* Q13 */ -#endif /* states for the filters used in generating SHB excitation from WB excitation*/ -#ifndef IVAS_FLOAT_FIXED - float mem_csfilt[2]; - float mem_shb_res[MAX_LEN_MA_FILTER]; /* old SHB residual signal */ - float old_EnvSHBres[L_FRAME4k]; /* old TD envelope of the SHB residual signal */ - float old_mean_EnvSHBres; /* energy of the last subframe of the SHB residual signal from previous frame */ - float prev_enr_EnvSHBres; /* energy of the residual SHB envelope from the previous frame */ - float prev_shb_env_tilt; /* tilt of the residual SHB envelope from the previous frame */ - float prev_pow_exc16kWhtnd; /* power of the LB excitation signal in the previous frame */ - float prev_mix_factor; /* mixing factor in the previous frame */ - float prev_Env_error; /* error in SHB envelope modelling */ -#else - Word32 mem_csfilt_fx[2]; /* Q(prev_Q_bwe_exc) */ - Word16 mem_shb_res_fx[MAX_LEN_MA_FILTER]; /* old SHB residual signal Q(prev_Q_shb) */ - Word16 old_EnvSHBres_fx[L_FRAME4k]; /* old TD envelope of the SHB residual signal Q(prev_Q_shb) */ - Word16 old_mean_EnvSHBres_fx; /* energy of the last subframe of the SHB residual signal from previous frame Q15 */ - Word32 prev_enr_EnvSHBres_fx; /* energy of the residual SHB envelope from the previous frame Q(31 - prev_enr_EnvSHBres_e) */ + Word32 mem_csfilt_fx[2]; /* Q(prev_Q_bwe_exc) */ + Word16 mem_shb_res_fx[MAX_LEN_MA_FILTER]; /* old SHB residual signal Q(prev_Q_shb) */ + Word16 old_EnvSHBres_fx[L_FRAME4k]; /* old TD envelope of the SHB residual signal Q(prev_Q_shb) */ + Word16 old_mean_EnvSHBres_fx; /* energy of the last subframe of the SHB residual signal from previous frame Q15 */ + Word32 prev_enr_EnvSHBres_fx; /* energy of the residual SHB envelope from the previous frame Q(31 - prev_enr_EnvSHBres_e) */ Word16 prev_enr_EnvSHBres_e; Word16 prev_shb_env_tilt_fx; /* tilt of the residual SHB envelope from the previous frame Q(prev_Q_shb) */ Word16 prev_Q_shb; - Word32 prev_pow_exc16kWhtnd_fx32; /* Use this power of the LB excitation signal in the previous frame Q0 */ - Word16 prev_mix_factor_fx; /* mixing factor in the previous frame Q15 */ - Word16 prev_Env_error_fx; /* error in SHB envelope modelling Q0 */ -#endif + Word32 prev_pow_exc16kWhtnd_fx32; /* Use this power of the LB excitation signal in the previous frame Q0 */ + Word16 prev_mix_factor_fx; /* mixing factor in the previous frame Q15 */ + Word16 prev_Env_error_fx; /* error in SHB envelope modelling Q0 */ /* states for the filters used in generating SHB signal from SHB excitation*/ -#ifndef IVAS_FLOAT_FIXED - float state_syn_shbexc[L_SHB_LAHEAD]; - float state_lpc_syn[LPC_SHB_ORDER]; - float old_bwe_exc[PIT16k_MAX * 2]; /* old excitation */ -#else - Word16 state_syn_shbexc_fx[L_SHB_LAHEAD]; /* Q(prev_Q_bwe_exc - 16) */ - Word16 state_lpc_syn_fx[LPC_SHB_ORDER]; /* Q(prev_Q_bwe_exc - 16) */ -#endif - Word16 old_bwe_exc_fx[PIT16k_MAX * 2]; /*Q_exc*/ + Word16 state_syn_shbexc_fx[L_SHB_LAHEAD]; /* Q(prev_Q_bwe_exc - 16) */ + Word16 state_lpc_syn_fx[LPC_SHB_ORDER]; /* Q(prev_Q_bwe_exc - 16) */ + Word16 old_bwe_exc_fx[PIT16k_MAX * 2]; /*Q_exc*/ int16_t bwe_seed[2]; -#ifndef IVAS_FLOAT_FIXED - float bwe_non_lin_prev_scale; - float old_bwe_exc_extended[NL_BUFF_OFFSET]; - float syn_overlap[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain */ - float decim_state1[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; - float decim_state2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; - float mem_genSHBexc_filt_down_wb2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; - float mem_genSHBexc_filt_down_wb3[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; - float mem_genSHBexc_filt_down_shb[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; -#else Word32 bwe_non_lin_prev_scale_fx; /* Q30 */ Word16 old_bwe_exc_extended_fx[NL_BUFF_OFFSET]; /* Q(prev_Q_bwe_exc - 16) */ Word16 syn_overlap_fx[L_SHB_LAHEAD]; /* overlap buffer used to Adjust SHB Frame Gain */ @@ -1480,19 +947,8 @@ typedef struct td_bwe_enc_structure Word16 mem_genSHBexc_filt_down_wb2_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; /* Q(prev_Q_bwe_exc - 16) */ Word16 mem_genSHBexc_filt_down_wb3_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; /* Q(prev_Q_bwe_exc - 16) */ Word16 mem_genSHBexc_filt_down_shb_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; /* Q(prev_Q_bwe_exc - 16) */ -#endif -#ifndef IVAS_FLOAT_FIXED - float elliptic_bpf_2_48k_mem[4][4]; - float prev_fb_energy; - float prev_gainFr_SHB; - float lsp_shb_slow_interpl[LPC_SHB_ORDER]; - float lsp_shb_fast_interpl[LPC_SHB_ORDER]; - float shb_inv_filt_mem[LPC_SHB_ORDER]; - float lsp_shb_spacing[3]; - float prev_swb_GainShape; -#else - Word32 elliptic_bpf_2_48k_mem_fx[4][4]; /* Q(elliptic_bpf_2_48k_mem_fx_Q[4]) */ + Word32 elliptic_bpf_2_48k_mem_fx[4][4]; /* Q(elliptic_bpf_2_48k_mem_fx_Q[4]) */ Word16 elliptic_bpf_2_48k_mem_fx_Q[4]; Word32 prev_fb_energy_fx; /* Q(prev_fb_energy_fx_Q) */ Word16 prev_fb_energy_fx_Q; @@ -1502,34 +958,19 @@ typedef struct td_bwe_enc_structure Word16 shb_inv_filt_mem_fx[LPC_SHB_ORDER]; /* Q(Q_shb_spch) */ Word16 lsp_shb_spacing_fx[3]; /* Q15 */ Word16 prev_swb_GainShape_fx; /* Q15 */ -#endif int16_t prev_frGainAtten; -#ifndef IVAS_FLOAT_FIXED - float prev_wb_GainShape_flt; - float swb_lsp_prev_interp[LPC_SHB_ORDER]; - float fb_state_lpc_syn[LPC_SHB_ORDER]; - float fb_tbe_demph; - float tilt_mem; -#else - Word16 prev_wb_GainShape; /* Q15 */ - Word16 swb_lsp_prev_interp_fx[LPC_SHB_ORDER]; /* Q15 */ + Word16 prev_wb_GainShape; /* Q15 */ + Word16 swb_lsp_prev_interp_fx[LPC_SHB_ORDER]; /* Q15 */ Word16 fb_state_lpc_syn_fx[LPC_SHB_ORDER]; Word16 prev_Q_bwe_exc_fb; Word16 fb_tbe_demph_fx; - Word16 tilt_mem_fx; /* Q12 */ -#endif + Word16 tilt_mem_fx; /* Q12 */ int16_t prev_coder_type; -#ifndef IVAS_FLOAT_FIXED - float prev_lsf_diff[LPC_SHB_ORDER - 2]; - float prev_tilt_para; - float cur_sub_Aq[M + 1]; -#else Word16 prev_lsf_diff_fx[LPC_SHB_ORDER - 2]; /* Q15 */ Word16 prev_tilt_para_fx; /* Q10 */ -#endif - Word16 cur_sub_Aq_fx[M + 1]; /* Q12 */ + Word16 cur_sub_Aq_fx[M + 1]; /* Q12 */ /* quantized data */ int16_t lsf_idx[NUM_Q_LSF]; @@ -1545,29 +986,15 @@ typedef struct td_bwe_enc_structure int16_t gFrame_WB; int16_t idxGain; -#ifndef IVAS_FLOAT_FIXED - float dec_2_over_3_mem[L_FILT_2OVER3]; - float dec_2_over_3_mem_lp[L_FILT_2OVER3_LP]; -#else Word16 dec_2_over_3_mem_fx[L_FILT_2OVER3]; Word16 dec_2_over_3_mem_lp_fx[6]; -#endif -#ifndef IVAS_FLOAT_FIXED - float tbe_demph; - float tbe_premph; - float mem_stp_swb[LPC_SHB_ORDER]; - float *ptr_mem_stp_swb; - float gain_prec_swb; - float mem_zero_swb[LPC_SHB_ORDER]; -#else Word16 tbe_demph_fx; /* Q(prev_Q_bwe_exc - 16 - NOISE_QADJ) */ Word16 tbe_premph_fx; /* Q(prev_Q_bwe_exc - 16) */ Word16 mem_stp_swb_fx[LPC_SHB_ORDER]; /* Q(st->prev_Q_bwe_syn) */ Word16 *ptr_mem_stp_swb_fx; Word16 gain_prec_swb_fx; /* Q14 */ Word16 mem_zero_swb_fx[LPC_SHB_ORDER]; -#endif } TD_BWE_ENC_DATA, *TD_BWE_ENC_HANDLE; @@ -1578,48 +1005,22 @@ typedef struct td_bwe_enc_structure typedef struct fd_bwe_enc_structure { -#ifndef IVAS_FLOAT_FIXED - float new_input_hp[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS )]; - float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS )]; -#endif Word16 new_input_hp_fx[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS )]; // q0 Word16 old_input_fx[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS )]; // q0 -#ifndef IVAS_FLOAT_FIXED - float old_input_wb[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; -#else - Word16 old_input_wb_fx[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; /* Q(-1) */ -#endif -#ifndef IVAS_FLOAT_FIXED - float old_input_lp[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS )]; - float old_syn_12k8_16k[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; - float old_fdbwe_speech[L_FRAME48k]; - float mem_deemph_old_syn; -#endif - Word16 old_input_lp_fx[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS )]; // st->hBWE_FD->prev_Q_input_lp - Word16 old_syn_12k8_16k_fx[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; // st->Q_syn + Word16 old_input_wb_fx[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; /* Q(-1) */ + Word16 old_input_lp_fx[NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS )]; // st->hBWE_FD->prev_Q_input_lp + Word16 old_syn_12k8_16k_fx[NS2SA( 16000, DELAY_FD_BWE_ENC_NS )]; // st->Q_syn Word16 old_fdbwe_speech_fx[L_FRAME48k]; Word16 mem_deemph_old_syn_fx; Word16 q_mem_deemph_old_syn; Word16 prev_mode; -#ifndef IVAS_FLOAT_FIXED - float old_wtda_swb[L_FRAME48k]; -#endif Word16 L_old_wtda_swb_fx[L_FRAME48k]; /* Q(Q_old_wtda) */ Word16 prev_Q_input_lp; Word16 prev_L_swb_norm1; -#ifndef IVAS_FLOAT_FIXED - float prev_global_gain; -#else - Word32 prev_global_gain_fx; /* Q(2 * prev_Q_shb) */ -#endif + Word32 prev_global_gain_fx; /* Q(2 * prev_Q_shb) */ Word16 modeCount; -#ifndef IVAS_FLOAT_FIXED - float EnergyLF; - float mem_old_wtda_swb; -#else Word32 EnergyLF_fx; Word16 mem_old_wtda_swb_fx; /* Q(-1) */ -#endif } FD_BWE_ENC_DATA, *FD_BWE_ENC_HANDLE; @@ -1636,28 +1037,15 @@ typedef struct rf_enc_structure ACELP_config acelp_cfg_rf; /* configuration for RF frame */ -#ifndef IVAS_FLOAT_FIXED - float rf_mem_w0_flt; - float rf_clip_var_flt[6]; - float rf_tilt_code_flt; - float rf_mem_syn2_flt[M]; - float rf_dispMem[8]; - float rf_gc_threshold_flt; -#else Word16 rf_mem_w0; Word16 rf_clip_var[6]; Word16 rf_tilt_code; Word16 rf_mem_syn2[M]; struct dispMem_fx rf_dm_fx; Word32 rf_gc_threshold; -#endif int16_t rf_target_bits; -#ifndef IVAS_FLOAT_FIXED - float rf_tilt_buf_flt[NB_SUBFR16k]; -#else Word16 rf_tilt_buf[NB_SUBFR16k]; -#endif int16_t rf_indx_lsf[MAX_RF_FEC_OFFSET][3]; int16_t rf_indx_pitch[MAX_RF_FEC_OFFSET][NB_SUBFR16k]; @@ -1702,50 +1090,23 @@ typedef struct plc_enc_evs_structure int16_t pit_min; int16_t pit_max; -#ifndef IVAS_FLOAT_FIXED - float mem_MA[M]; - float mem_AR_flt[M]; -#else Word16 mem_MA_14Q1[M]; Word16 mem_AR[M]; -#endif -#ifndef IVAS_FLOAT_FIXED - float lsfold[M]; /* old lsf (frequency domain) */ - float lspold[M]; /* old lsp (immittance spectral pairs) */ -#else - Word16 lsfold_14Q1[M]; /* old lsf (frequency domain) */ - Word16 lspold_Q15[M]; /* old lsp (immittance spectral pairs) */ -#endif + Word16 lsfold_14Q1[M]; /* old lsf (frequency domain) */ + Word16 lspold_Q15[M]; /* old lsp (immittance spectral pairs) */ -#ifndef IVAS_FLOAT_FIXED - float lsfoldbfi0[M]; /* Previous frame lsf */ - float lsfoldbfi1[M]; /* Past previous frame lsf */ - float lsf_adaptive_mean[M]; /* Mean lsf for bfi cases */ - float stab_fac; -#else Word16 lsfoldbfi0_14Q1[M]; /* Previous frame LSF */ Word16 lsfoldbfi1_14Q1[M]; /* Past previous frame LSF */ Word16 lsf_adaptive_mean_14Q1[M]; /* Mean isf for bfi cases */ Word16 stab_fac_Q15; -#endif LPD_state *LPDmem; -#ifndef IVAS_FLOAT_FIXED - float old_exc[8]; /* ACELP exc memory (Aq) */ -#else Word16 old_exc_Qold[8]; /* ACELP exc memory (Aq)*/ -#endif -#ifndef IVAS_FLOAT_FIXED - float lsf_con_flt[M]; - float last_lsf_ref_flt[M]; - float last_lsf_con_flt[M]; -#else Word16 lsf_con[M]; Word16 last_lsf_ref[M]; Word16 last_lsf_con[M]; -#endif } PLC_ENC_EVS, *PLC_ENC_EVS_HANDLE; @@ -1756,17 +1117,10 @@ typedef struct plc_enc_evs_structure typedef struct tec_enc_structure { -#ifndef IVAS_FLOAT_FIXED - float loBuffer_flt[CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC]; - float loTempEnv_flt[CLDFB_NO_COL_MAX]; - float loTempEnv_ns_flt[CLDFB_NO_COL_MAX]; - float hiTempEnv_flt[CLDFB_NO_COL_MAX + DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV]; -#else Word16 loBuffer[CLDFB_NO_COL_MAX + MAX_TEC_SMOOTHING_DEG + DELAY_TEMP_ENV_BUFF_TEC]; /* Q8 */ Word16 loTempEnv[CLDFB_NO_COL_MAX]; /* Q7 */ Word16 loTempEnv_ns[CLDFB_NO_COL_MAX]; /* Q7 */ Word16 hiTempEnv[CLDFB_NO_COL_MAX + DELAY_TEMP_ENV_BUFF_TEC + EXT_DELAY_HI_TEMP_ENV]; /* Q7 */ -#endif int16_t tranFlag; int16_t corrFlag; @@ -1785,22 +1139,10 @@ typedef struct tcx_enc_structure int16_t transform_type[2]; /* TCX20/10/5 mode in each subframe */ /* Core Signal Analysis Outputs */ -#ifndef IVAS_FLOAT_FIXED - float *spectrum[2]; /* MDCT output for a short block */ - float spectrum_long[N_MAX]; /* MDCT output for a long block. Points to spectrum */ -#endif -#ifndef IVAS_FLOAT_FIXED - float noiseTiltFactor_flt; /* compensation for LPC tilt in noise filling */ -#else - Word16 noiseTiltFactor; /* compensation for LPC tilt in noise filling Q15 */ -#endif - int16_t noiseLevelMemory_cnt; /* counter of consecutive low TCX noise levels */ -#ifndef IVAS_FLOAT_FIXED - float ltpGainMemory[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth */ -#else - Word16 ltpGainMemory_fx[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth Q15 */ -#endif + Word16 noiseTiltFactor; /* compensation for LPC tilt in noise filling Q15 */ + int16_t noiseLevelMemory_cnt; /* counter of consecutive low TCX noise levels */ + Word16 ltpGainMemory_fx[N_LTP_GAIN_MEMS]; /* for smoothing noiseTransWidth Q15 */ STnsData tnsData[2]; // int16_t fUseTns[2]; Word8 fUseTns[2]; @@ -1808,10 +1150,6 @@ typedef struct tcx_enc_structure // int16_t memQuantZeros[L_FRAME_PLUS]; /* Quantization deadzone flags */ Word8 memQuantZeros[L_FRAME_PLUS]; /* Quantization deadzone flags */ -#ifndef IVAS_FLOAT_FIXED - float *speech_TCX_flt; - float *new_speech_TCX_flt; -#endif Word16 *speech_TCX; Word16 *new_speech_TCX; // Word16 q_speech_TCX; @@ -1819,39 +1157,19 @@ typedef struct tcx_enc_structure int16_t tcxltp; int16_t tcxltp_pitch_int; int16_t tcxltp_pitch_fr; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_gain_flt; -#else - Word16 tcxltp_gain; /* Q15 */ -#endif + Word16 tcxltp_gain; /* Q15 */ int16_t tcxltp_pitch_int_past; int16_t tcxltp_pitch_fr_past; -#ifndef IVAS_FLOAT_FIXED - float tcxltp_gain_past_flt; - float tcxltp_norm_corr_past_flt; - float tcxltp_norm_corr_mem_flt; - float kernel_switch_corr_past_flt; -#else - Word16 tcxltp_gain_past; /* Q15 */ - Word16 tcxltp_norm_corr_past; /* Q15 */ - Word16 tcxltp_norm_corr_mem; /* Q15 */ - Word16 kernel_switch_corr_past; /* Q15 */ -#endif - uint16_t kernel_type[2]; /* transform kernel type in each subframe (MDCT or MDST) */ - uint16_t kernel_symmetry_past; /* last TDA symmetry (0 for MDCT, 1 for MDST type) */ + Word16 tcxltp_gain_past; /* Q15 */ + Word16 tcxltp_norm_corr_past; /* Q15 */ + Word16 tcxltp_norm_corr_mem; /* Q15 */ + Word16 kernel_switch_corr_past; /* Q15 */ + uint16_t kernel_type[2]; /* transform kernel type in each subframe (MDCT or MDST) */ + uint16_t kernel_symmetry_past; /* last TDA symmetry (0 for MDCT, 1 for MDST type) */ uint16_t enc_ste_pre_corr_past; -#ifndef IVAS_FLOAT_FIXED - float tfm_mem; /* state of IIR filtered temporal flatness measure */ - float buf_speech_ltp_flt[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; - float *speech_ltp_flt; - float *new_speech_ltp_flt; -#else - Word32 tfm_mem_fx; /* state of IIR filtered temporal flatness measure Q31 */ + Word32 tfm_mem_fx; /* state of IIR filtered temporal flatness measure Q31 */ Word16 buf_speech_ltp[L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k]; -#endif -#ifdef IVAS_FLOAT_FIXED Word16 exp_buf_speech_ltp; -#endif Word16 *speech_ltp; Word16 *new_speech_ltp; int16_t tcxltp_filt_idx; @@ -1859,53 +1177,27 @@ typedef struct tcx_enc_structure int16_t tcxltp_param[LTPSIZE]; int16_t tcxltp_on_mem; -#ifndef IVAS_FLOAT_FIXED - float measuredBwRatio_flt; /* measured bw; used for TCX noise-filling */ -#else - Word16 measuredBwRatio; /* measured bw; used for TCX noise-filling. 1Q14 */ -#endif - int16_t nmStartLine; /* Starting line for the noise measurement */ + Word16 measuredBwRatio; /* measured bw; used for TCX noise-filling. 1Q14 */ + int16_t nmStartLine; /* Starting line for the noise measurement */ int16_t tcx_lpc_shaped_ari; -#ifndef IVAS_FLOAT_FIXED - float old_out[L_FRAME32k]; -#endif Word16 old_out_fx[L_FRAME32k]; /* buffer for OLA; at the encoder, the maximum length is L_FRAME32k (corresponds to maximum internal L_frame length) */ Word16 Q_old_out; /* MDCT switching */ -#ifndef IVAS_FLOAT_FIXED - float prev_hi_ener_flt; -#else - Word16 prev_hi_ener; /* Q8 */ -#endif + Word16 prev_hi_ener; /* Q8 */ int16_t prev_hi_sparse; -#ifndef IVAS_FLOAT_FIXED - float clas_sec_old_flt; -#else - Word16 clas_sec_old_fx; /* Q13 */ -#endif + Word16 clas_sec_old_fx; /* Q13 */ int16_t clas_final_old; -#ifndef IVAS_FLOAT_FIXED - float last_gain1_flt; - float last_gain2_flt; -#else - Word32 last_gain1; /* Q(31 - st->last_enerBuffer_exp) */ - Word32 last_gain2; /* Q(31 - st->last_enerBuffer_exp) */ -#endif + Word32 last_gain1; /* Q(31 - st->last_enerBuffer_exp) */ + Word32 last_gain2; /* Q(31 - st->last_enerBuffer_exp) */ /* TCX memory */ Word16 Txnq[L_FRAME32k / 2 + 64]; /* Q target (overlap or ACELP+ZIR, use Aq) */ Word16 *acelp_zir; Word16 q_Txnq; -#ifndef IVAS_FLOAT_FIXED - float Txnq_flt[L_FRAME32k / 2 + 64]; /* Q target (overlap or ACELP+ZIR, use Aq) */ - float *acelp_zir_flt; - float tcx_target_bits_fac_flt; -#else - Word16 tcx_target_bits_fac; /* Q14 */ -#endif + Word16 tcx_target_bits_fac; /* Q14 */ int16_t tns_ms_flag[2]; Word32 *spectrum_fx[2]; /* MDCT output for a short block */ @@ -2023,67 +1315,32 @@ typedef struct enc_core_structure * ACELP core parameters *----------------------------------------------------------------------------------*/ - int16_t clas; /* current frame clas */ - int16_t last_clas; /* previous frame signal classification */ -#ifndef IVAS_FLOAT_FIXED - float prev_fmerit_flt; /* previous signal classification score*/ - float fmerit_dt_flt; /* signal classification score difference */ -#else - Word16 prev_fmerit; /* previous signal classification score Q15 */ - Word16 fmerit_dt; /* signal classification score difference Q15 */ -#endif + int16_t clas; /* current frame clas */ + int16_t last_clas; /* previous frame signal classification */ + Word16 prev_fmerit; /* previous signal classification score Q15 */ + Word16 fmerit_dt; /* signal classification score difference Q15 */ int16_t Nb_ACELP_frames; int16_t pitch[3]; /* open-loop pitch values @12.8 kHz for three half-frames */ // Word16 pitch_fx[3]; -#ifndef IVAS_FLOAT_FIXED - float voicing[3]; /* open-loop normalized correlation values for three half-frames */ -#else - Word16 voicing_fx[3]; /* open-loop normalized correlation values for three half-frames Q15 */ -#endif + Word16 voicing_fx[3]; /* open-loop normalized correlation values for three half-frames Q15 */ LPD_state_HANDLE hLPDmem; /* ACELP LPDmem memories */ - Word32 Bin_E_fx[L_FFT]; /* Q_new + Q_SCALE -2 per bin energy of two frames */ - Word16 q_Bin_E; /* Q_new + Q_SCALE -2 per bin energy of two frames */ -#ifndef IVAS_FLOAT_FIXED - float Bin_E[L_FFT]; /* per bin energy of two frames */ - float lsp_old1[M]; /* old unquantized LSP vector at the end of the frame at 12k8 */ - float lsf_old1[M]; /* old unquantized LSF vector at the end of the frame at 12k8 */ - float lsp_old[M]; /* old LSP vector at the end of the frame */ - float lsf_old[M]; /* old LSF vector at the end of the frame */ - float lsp_old16k[M]; /* old LSP vector at the end of the frame @16kHz */ - float lspold_enc[M]; /* old lsp (immittance spectral pairs) */ -#else - Word16 lsp_old1_fx[M]; /* old unquantized LSP vector at the end of the frame Q15 */ - Word16 lsf_old1_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ - Word16 lsp_old_fx[M]; /* old LSP vector at the end of the frame Q15 */ - Word16 lsf_old_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ - Word16 lsp_old16k_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ - Word16 lspold_enc_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ -#endif - int16_t pstreaklen; /* LSF quantizer */ -#ifndef IVAS_FLOAT_FIXED - float streaklimit; /* LSF quantizer */ - float stab_fac; /* LSF stability factor */ -#else - Word16 streaklimit_fx; /* LSF quantizer Q15 */ - Word16 stab_fac_fx; /* LSF stability factor Q15 */ -#endif -#ifndef IVAS_FLOAT_FIXED - float mem_preemph; /* preemphasis filter memory */ - float old_wsp[L_WSP_MEM]; /* old weighted signal vector */ - float old_wsp2[( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM]; /* old decimated weighted signal vector */ - float mem_wsp; /* weighted signal vector memory */ - float mem_decim2[3]; /* weighted signal decimation filter memory */ - float clip_var[6]; /* pitch gain clipping memory */ - float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ - float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ -#else - Word16 clip_var_fx[6]; /* pitch gain clipping memory [2.56x,Q14,Q8,Q0,Q14,Q14] */ - Word16 mem_AR_fx[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) Qlog2(2.56) */ - Word16 mem_MA_fx[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) Qlog2(2.56) */ -#endif + Word32 Bin_E_fx[L_FFT]; /* Q_new + Q_SCALE -2 per bin energy of two frames */ + Word16 q_Bin_E; /* Q_new + Q_SCALE -2 per bin energy of two frames */ + Word16 lsp_old1_fx[M]; /* old unquantized LSP vector at the end of the frame Q15 */ + Word16 lsf_old1_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ + Word16 lsp_old_fx[M]; /* old LSP vector at the end of the frame Q15 */ + Word16 lsf_old_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ + Word16 lsp_old16k_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ + Word16 lspold_enc_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ + int16_t pstreaklen; /* LSF quantizer */ + Word16 streaklimit_fx; /* LSF quantizer Q15 */ + Word16 stab_fac_fx; /* LSF stability factor Q15 */ + Word16 clip_var_fx[6]; /* pitch gain clipping memory [2.56x,Q14,Q8,Q0,Q14,Q14] */ + Word16 mem_AR_fx[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) Qlog2(2.56) */ + Word16 mem_MA_fx[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) Qlog2(2.56) */ // Word16 pstreaklen_fx; /* LSF quantizer */ Word32 offset_scale1_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 1st 8-dim subvector*/ Word32 offset_scale2_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 2nd 8-dim subvector*/ @@ -2095,10 +1352,8 @@ typedef struct enc_core_structure Word16 mem_preemph_fx; /* preemphasis filter memory Q(-1) */ Word16 old_wsp_fx[L_WSP_MEM]; /* old weighted signal vector */ -#ifdef IVAS_FLOAT_FIXED Word16 exp_old_wsp; Word16 Q_old_wsp2; -#endif /*Word16 old_exc_fx[L_EXC_MEM];*/ /* old excitation vector */ Word16 old_wsp2_fx[( L_WSP_MEM - L_INTERPOL ) / OPL_DECIM]; /* old decimated weighted signal vector qwsp */ Word16 mem_wsp_fx; /* weighted signal vector memory */ @@ -2111,87 +1366,44 @@ typedef struct enc_core_structure int16_t GSC_IVAS_mode; GSC_ENC_HANDLE hGSCEnc; - int16_t Last_pulse_pos; /* FEC - last position of the first glottal pulse in the frame */ -#ifndef IVAS_FLOAT_FIXED - float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ - float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ - float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ -#else - Word16 lsfoldbfi0_fx[M]; /* FEC - LSF vector of the previous frame Qlog2(2.56) */ - Word16 lsfoldbfi1_fx[M]; /* FEC - LSF vector of the past previous frame Qlog2(2.56) */ - Word16 lsf_adaptive_mean_fx[M]; /* FEC - adaptive mean LSF vector for FEC Qlog2(2.56) */ -#endif - int16_t next_force_safety_net; /* FEC - flag to force safety net in next frame */ + int16_t Last_pulse_pos; /* FEC - last position of the first glottal pulse in the frame */ + Word16 lsfoldbfi0_fx[M]; /* FEC - LSF vector of the previous frame Qlog2(2.56) */ + Word16 lsfoldbfi1_fx[M]; /* FEC - LSF vector of the past previous frame Qlog2(2.56) */ + Word16 lsf_adaptive_mean_fx[M]; /* FEC - adaptive mean LSF vector for FEC Qlog2(2.56) */ + int16_t next_force_safety_net; /* FEC - flag to force safety net in next frame */ // Word16 next_force_safety_net_fx; /* FEC - flag to force safety net in next frame */ - int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ - int16_t act_count; /* Stationary noise UV modification - activation counter */ -#ifndef IVAS_FLOAT_FIXED - float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ - float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ -#else - Word32 ge_sm_fx; /* Stationary noise UV modification - smoothed excitation gain Q(GE_SHIFT) */ - Word16 lspold_s_fx[M]; /* Stationary noise UV modification - old LSP vector Q15 */ -#endif - int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ -#ifndef IVAS_FLOAT_FIXED - float min_alpha; /* Stationary noise UV modification - minimum alpha */ - float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ -#else - Word16 min_alpha_fx; /* Stationary noise UV modification - minimum alpha Q15 */ -#endif - Word16 exc_pe_fx; /* Stationary noise UV modification - memory of the preemphasis filter */ - - int16_t coder_type_raw; /* raw coder_type (before UNVOICED is lost) */ - int16_t last_coder_type_raw; /* raw last_coder_type (coming from the sigal classification) */ - int16_t last_coder_type; /* previous coding type */ -#ifndef IVAS_FLOAT_FIXED - float old_thres; /* normalized correlation weighting in open-loop pitch */ - float old_corr; /* normalized correlation in previous frame (mean value) */ -#else - Word16 old_thres_fx; /* normalized correlation weighting in open-loop pitch Q15 */ - Word16 old_corr_fx; /* normalized correlation in previous frame (mean value) Q15 */ -#endif - int16_t old_pitch; /* previous pitch for open-loop pitch search */ - int16_t delta_pit; /* open-loop pitch extrapolation correction */ -#ifndef IVAS_FLOAT_FIXED - float ee_old; /* previous frame low/high frequency energy ratio */ -#else - Word32 ee_old_fx; /* previous frame low/high frequency energy ratio Q6 */ -#endif - int16_t min_band; /* minimum critical band of useful bandwidth */ - int16_t max_band; /* maximum critical band of useful bandwidth */ - int16_t tc_cnt; /* TC frame counter */ - int16_t audio_frame_cnt; /* Counter of relative presence of audio frames */ -#ifndef IVAS_FLOAT_FIXED - float old_dE1; /* Maximum energy increase in previous frame */ -#else - Word32 old_dE1_fx; /* Maximum energy increase in previous frame Q13 */ -#endif - int16_t old_ind_deltaMax; /* Index of the sub-subframe of maximum energy in previous frame */ -#ifndef IVAS_FLOAT_FIXED - float old_enr_ssf[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ -#else - Word32 old_enr_ssf_fx[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ -#endif - int16_t spike_hyst; /* Hysteresis to prevent UC after sharp energy spike */ - int16_t last_harm_flag_acelp; /* harmonicity flag for ACELP @32kbps rate */ - Word16 old_Aq_12_8_fx[M + 1]; /* Q12 old Aq[] for core switching */ -#ifndef IVAS_FLOAT_FIXED - float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ - float old_Es_pred; /* old Es_pred for core switching */ -#else - Word16 old_Es_pred_fx; /* old Es_pred for core switching Q8 */ -#endif - Word16 music_hysteresis_fx; /* Counter of frames after AUDIO coding mode to prevent UC */ + int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ + int16_t act_count; /* Stationary noise UV modification - activation counter */ + Word32 ge_sm_fx; /* Stationary noise UV modification - smoothed excitation gain Q(GE_SHIFT) */ + Word16 lspold_s_fx[M]; /* Stationary noise UV modification - old LSP vector Q15 */ + int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ + Word16 min_alpha_fx; /* Stationary noise UV modification - minimum alpha Q15 */ + Word16 exc_pe_fx; /* Stationary noise UV modification - memory of the preemphasis filter */ + + int16_t coder_type_raw; /* raw coder_type (before UNVOICED is lost) */ + int16_t last_coder_type_raw; /* raw last_coder_type (coming from the sigal classification) */ + int16_t last_coder_type; /* previous coding type */ + Word16 old_thres_fx; /* normalized correlation weighting in open-loop pitch Q15 */ + Word16 old_corr_fx; /* normalized correlation in previous frame (mean value) Q15 */ + int16_t old_pitch; /* previous pitch for open-loop pitch search */ + int16_t delta_pit; /* open-loop pitch extrapolation correction */ + Word32 ee_old_fx; /* previous frame low/high frequency energy ratio Q6 */ + int16_t min_band; /* minimum critical band of useful bandwidth */ + int16_t max_band; /* maximum critical band of useful bandwidth */ + int16_t tc_cnt; /* TC frame counter */ + int16_t audio_frame_cnt; /* Counter of relative presence of audio frames */ + Word32 old_dE1_fx; /* Maximum energy increase in previous frame Q13 */ + int16_t old_ind_deltaMax; /* Index of the sub-subframe of maximum energy in previous frame */ + Word32 old_enr_ssf_fx[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ + int16_t spike_hyst; /* Hysteresis to prevent UC after sharp energy spike */ + int16_t last_harm_flag_acelp; /* harmonicity flag for ACELP @32kbps rate */ + Word16 old_Aq_12_8_fx[M + 1]; /* Q12 old Aq[] for core switching */ + Word16 old_Es_pred_fx; /* old Es_pred for core switching Q8 */ + Word16 music_hysteresis_fx; /* Counter of frames after AUDIO coding mode to prevent UC */ Word16 last_vad_spa_fx; - Word16 last_L_frame; /* ACELP@16kHz - last L_frame value */ -#ifndef IVAS_FLOAT_FIXED - float mem_preemph16k; /* ACELP@16kHz - preemphasis filter memory @16kHz */ - float mem_deemp_preQ; /* ACELP@16kHz - prequantizer deemhasis memory */ - float mem_preemp_preQ; /* ACELP@16kHz - prequantizer preemhasis memory */ -#endif + Word16 last_L_frame; /* ACELP@16kHz - last L_frame value */ Word16 mem_preemph16k_fx; /* ACELP@16kHz - preemphasis filter memory @16kHz Q-1 */ Word16 mem_deemp_preQ_fx; /* ACELP@16kHz - prequantizer deemhasis memory */ Word16 mem_preemp_preQ_fx; /* ACELP@16kHz - prequantizer preemhasis memory */ @@ -2199,35 +1411,18 @@ typedef struct enc_core_structure Word16 last_code_preq; /* ACELP@16kHz - last coefficient of the pre-quantizer contribution */ Word16 use_acelp_preq; /* ACELP@16kHz - flag of prequantizer usage */ - Word16 bpf_off; /* Bass post-filter - do not use BPF when this flag is set to 1 */ -#ifndef IVAS_FLOAT_FIXED - float old_pitch_buf[2 * NB_SUBFR16k]; /* Bass post-filter - buffer of old subframe pitch values */ - float pst_mem_deemp_err; /* Bass post-filter - filter memory of noise LP filter */ - float pst_lp_ener; /* Bass post-filter - long-term energy */ -#else + Word16 bpf_off; /* Bass post-filter - do not use BPF when this flag is set to 1 */ Word16 old_pitch_buf_fx[2 * NB_SUBFR16k]; /* Bass post-filter - buffer of old subframe pitch values Q6 */ Word16 pst_mem_deemp_err_fx; /* Bass post-filter - filter memory of noise LP filter */ Word16 pst_lp_ener_fx; /* Bass post-filter - long-term energy */ -#endif /* stable short pitch detection */ -#ifndef IVAS_FLOAT_FIXED - float voicing0_sm; - float voicing_sm; - float LF_EnergyRatio_sm; -#else Word16 voicing0_sm_fx; Word16 voicing_sm_fx; Word16 LF_EnergyRatio_sm_fx; -#endif int16_t predecision_flag; -#ifndef IVAS_FLOAT_FIXED - float diff_sm; - float energy_sm; -#else - Word32 diff_sm_fx; /* Q7 */ - Word32 energy_sm_fx; /* Q7 */ -#endif + Word32 diff_sm_fx; /* Q7 */ + Word32 energy_sm_fx; /* Q7 */ Word16 finalVAD; @@ -2240,11 +1435,6 @@ typedef struct enc_core_structure * General signal buffers *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - float *input_buff; - float *input; - float *old_input_signal; -#endif Word16 *input_buff_fx; Word32 *input_buff32_fx; Word16 *input_fx; @@ -2256,17 +1446,6 @@ typedef struct enc_core_structure Word16 Q_old_wtda; SIGNAL_BUFFERS_ENC_HANDLE hSignalBuf; -#ifndef IVAS_FLOAT_FIXED - float *Bin_E_old; /* per bin energy of old 2nd frames */ - float *mem_decim; /* decimation filter memory */ - float *mem_decim16k; /* ACELP@16kHz - decimation filter memory @16kHz */ - float *old_inp_12k8; /* memory of input signal at 12.8kHz */ - float *old_inp_16k; /* ACELP@16kHz - memory of input signal @16 kHz */ - float *buf_speech_enc_pe_flt; - float *buf_synth_flt; /*can be reduced to PIT_MAX_MAX+L_FRAME_MAX if no rate switching*/ - float *buf_wspeech_enc_flt; - float *buf_speech_enc_flt; -#endif Word32 *Bin_E_old_fx; /* per bin energy of old 2nd frames */ Word16 q_Bin_E_old; Word16 *mem_decim_fx; /* decimation filter memory Q(-1) */ @@ -2279,14 +1458,12 @@ typedef struct enc_core_structure Word16 *buf_speech_enc; Word16 *buf_wspeech_enc; -#ifdef IVAS_FLOAT_FIXED Word16 exp_buf_speech_enc_pe; Word16 exp_buf_speech_enc; Word16 exp_old_inp_12k8; Word16 exp_old_inp_16k; Word16 exp_buf_wspeech_enc; Word16 exp_buf_synth; -#endif /*----------------------------------------------------------------------------------* * Noise estimation @@ -2319,15 +1496,9 @@ typedef struct enc_core_structure int16_t sharpFlag; int16_t localVAD; /* i : local VAD flag */ -#ifndef IVAS_FLOAT_FIXED - float bckr_tilt_lt_flt; - float lp_speech; - float lp_noise; /* CNG and DTX - LP filtered total noise estimation */ -#else - Word32 bckr_tilt_lt; /* Q16 */ - Word16 lp_speech_fx; /* Q8 */ - Word16 lp_noise_fx; /* CNG and DTX - LP filtered total noise estimation Q8 */ -#endif + Word32 bckr_tilt_lt; /* Q16 */ + Word16 lp_speech_fx; /* Q8 */ + Word16 lp_noise_fx; /* CNG and DTX - LP filtered total noise estimation Q8 */ Word16 Opt_HE_SAD_ON_fx; Word16 nb_active_frames_HE_SAD_fx; Word16 voicing_old_fx; @@ -2361,13 +1532,8 @@ typedef struct enc_core_structure HANDLE_FD_CNG_ENC hFdCngEnc; int16_t fd_cng_reset_flag; -#ifndef IVAS_FLOAT_FIXED - float last_totalNoise; - float totalNoise_increase_hist[TOTALNOISE_HIST_SIZE]; -#else Word16 last_totalNoise_fx; /* Q8 */ Word16 totalNoise_increase_hist_fx[TOTALNOISE_HIST_SIZE]; /* Q8 */ -#endif int16_t totalNoise_increase_len; /*----------------------------------------------------------------------------------* @@ -2381,17 +1547,10 @@ typedef struct enc_core_structure *----------------------------------------------------------------------------------*/ /* Memory for detect_transient() */ -#ifndef IVAS_FLOAT_FIXED - float old_hpfilt_in; - float old_hpfilt_out; - float EnergyLT; - float Energy_Old; -#else Word16 old_hpfilt_in_fx; Word16 old_hpfilt_out_fx; Word32 EnergyLT_fx; /* Q(EnergyLT_fx_exp) */ Word32 Energy_Old_fx; -#endif int16_t TransientHangOver; HQ_ENC_HANDLE hHQ_core; /* HQ core encoder handle */ @@ -2413,15 +1572,9 @@ typedef struct enc_core_structure * WB, SWB and FB bandwidth detector *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - float lt_mean_NB; - float lt_mean_WB; - float lt_mean_SWB; -#else - Word16 lt_mean_NB_fx; /* Q11 */ - Word16 lt_mean_WB_fx; /* Q11 */ - Word16 lt_mean_SWB_fx; /* Q11 */ -#endif + Word16 lt_mean_NB_fx; /* Q11 */ + Word16 lt_mean_WB_fx; /* Q11 */ + Word16 lt_mean_SWB_fx; /* Q11 */ int16_t count_WB; int16_t count_SWB; int16_t count_FB; @@ -2473,21 +1626,10 @@ typedef struct enc_core_structure TCX_CONFIG_HANDLE hTcxCfg; /* cod_main.c */ -#ifndef IVAS_FLOAT_FIXED - float mem_preemph_enc_flt; /* speech preemph filter memory (at encoder-sampling-rate) */ -#endif Word16 mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ Word16 exp_mem_preemph_enc; /* speech preemph filter memory (at encoder-sampling-rate) */ /* Signal Buffers and Pointers at encoder-sampling-rate */ -#ifndef IVAS_FLOAT_FIXED - float *speech_enc_flt; - float *new_speech_enc_flt; - float *speech_enc_pe_flt; - float *new_speech_enc_pe_flt; - float *synth_flt; - float *wspeech_enc_flt; -#endif Word16 *speech_enc; Word16 *speech_enc_pe; Word16 *new_speech_enc; @@ -2508,24 +1650,14 @@ typedef struct enc_core_structure int16_t nb_bits_header_tcx; /* number of bits for the header */ Word16 preemph_fac; /*Preemphasis factor Q15*/ -#ifndef IVAS_FLOAT_FIXED - float mem_wsp_enc_flt; /* wsp vector memory */ - float preemph_fac_flt; /* Preemphasis factor */ - float gamma_flt; -#else - Word16 gamma; /* Q15 */ - Word16 inv_gamma; /* Q14 */ -#endif + Word16 gamma; /* Q15 */ + Word16 inv_gamma; /* Q14 */ TRAN_DET_HANDLE hTranDet; TransientDetection transientDetection; Word16 transient_info[3]; int16_t acelpFramesCount; -#ifndef IVAS_FLOAT_FIXED - float prevTempFlatness; -#else Word16 prevTempFlatness_fx; /* exponent is AVG_FLAT_E Q7 in EVS */ /* Q4 in IVAS */ -#endif // float currEnergyLookAhead; Word32 currEnergyLookAhead_fx; // Q31 @@ -2567,13 +1699,8 @@ typedef struct enc_core_structure /*Adaptive BPF*/ int16_t bpf_gain_param; -#ifndef IVAS_FLOAT_FIXED - float mem_bpf[2 * L_FILT16k]; - float mem_error_bpf[2 * L_FILT16k]; -#else Word32 mem_bpf_fx1[2 * L_FILT16k]; Word32 mem_error_bpf_fx[2 * L_FILT16k]; -#endif Word16 bpf_T[NB_SUBFR16k]; Word16 bpf_gainT[NB_SUBFR16k]; @@ -2588,20 +1715,11 @@ typedef struct enc_core_structure int16_t glr; int16_t glr_idx[2]; -#ifndef IVAS_FLOAT_FIXED - float mean_gc_flt[2]; - float prev_lsf4_mean_flt; -#else Word32 mean_gc[2]; /* Q15 */ Word16 prev_lsf4_mean; /* Qlog2(2.56) */ -#endif int16_t glr_reset; int32_t last_sr_core; -#ifndef IVAS_FLOAT_FIXED - float last_stab_fac_flt; -#else - Word16 last_stab_fac; /* Q15 */ -#endif + Word16 last_stab_fac; /* Q15 */ Word32 gain_code[NB_SUBFR16k]; @@ -2631,11 +1749,7 @@ typedef struct enc_core_structure TEC_ENC_HANDLE hTECEnc; /* TEC encoder handle */ int16_t tec_flag; int16_t tfa_flag; -#ifndef IVAS_FLOAT_FIXED - float tfa_enr_flt[N_TEC_TFA_SUBFR]; -#else Word32 tfa_enr[N_TEC_TFA_SUBFR]; -#endif /*---------------------------------------------------------------* * IVAS parameters @@ -2645,17 +1759,10 @@ typedef struct enc_core_structure Word16 cna_dirac_flag; /* CNA in DirAC flag */ /* stereo switching memories */ -#ifndef IVAS_FLOAT_FIXED - float mem_preemph_DFT; - float inp_12k8_mem_stereo_sw[STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT]; - float mem_preemph16k_DFT; - float inp_16k_mem_stereo_sw[STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k]; -#else Word16 mem_preemph_DFT_fx; /* Q(-1) */ Word16 inp_12k8_mem_stereo_sw_fx[STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT]; /* Q(-1) */ Word16 mem_preemph16k_DFT_fx; /* Q(-1) */ Word16 inp_16k_mem_stereo_sw_fx[STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k]; /* Q(-1) */ -#endif /* MCT Channel mode indication: LFE, ignore channel? */ MCT_CHAN_MODE mct_chan_mode; @@ -3227,9 +2334,6 @@ typedef struct enc_core_structure typedef struct GainItemStr { -#ifndef IVAS_FLOAT_FIXED - float nmrValue; -#endif int16_t gainIndex; } GainItem; @@ -3237,12 +2341,8 @@ typedef struct context_rc_mem_struct { int16_t nbits_old; int16_t ctx; -#ifndef IVAS_FLOAT_FIXED - float bit_estimate; -#else Word32 bit_estimate_fx; Word16 bit_estimate_e; -#endif int16_t rateFlag; int16_t lastnz; int16_t nt_half; diff --git a/lib_enc/stat_noise_uv_enc.c b/lib_enc/stat_noise_uv_enc.c index 94af0a568..fc894ba6c 100644 --- a/lib_enc/stat_noise_uv_enc.c +++ b/lib_enc/stat_noise_uv_enc.c @@ -39,68 +39,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * stat_noise_uv_enc() - * - * Modifies excitation signal when the noise is stationary - *-----------------------------------------------------------------*/ - -void stat_noise_uv_enc( - Encoder_State *st, /* i/o: state structure */ - const float *epsP, /* i : LP prediction errors */ - const float *isp_new, /* i : immittance spectral pairs at 4th sfr */ - const float *isp_mid, /* i : immittance spectral pairs at 2nd sfr */ - float *Aq, /* i/o: A(z) quantized for the 4 subframes */ - float *exc2, /* i/o: excitation buffer */ - const int16_t uc_two_stage_flag /* o : flag undicating two-stage UC */ -) -{ - int16_t noisiness = 0; - int16_t levels = ( 1 << NBITS_NOISENESS ); - - /*-----------------------------------------------------------------* - * Calculate and write the noisiness parameter - *-----------------------------------------------------------------*/ - - if ( ( st->coder_type == UNVOICED && !uc_two_stage_flag ) || ( st->coder_type == INACTIVE && st->core_brate <= ACELP_9k60 ) ) - { - if ( st->bwidth != NB ) - { - /* WB case */ - noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 2.0f * levels ); - } - else if ( st->coder_type == INACTIVE && st->bwidth == NB ) - { - /* NB GSC case */ - noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 0.25f * levels ); - } - else - { - /* NB case */ - noisiness = (int16_t) ( ( ( epsP[2] / epsP[16] ) - 1 ) * 0.5f * levels ); - } - - if ( noisiness < 0 ) - { - noisiness = 0; - } - - if ( noisiness > levels - 1 ) - { - noisiness = levels - 1; - } - - push_indice( st->hBstr, IND_NOISINESS, noisiness, NBITS_NOISENESS ); - } - - /*-----------------------------------------------------------------* - * Modify the stationary noise excitation signal - *-----------------------------------------------------------------*/ - - stat_noise_uv_mod( st->coder_type, noisiness, st->lsp_old, isp_new, isp_mid, Aq, exc2, 0, &st->ge_sm, &st->uv_count, &st->act_count, st->lspold_s, &st->noimix_seed, &st->min_alpha, &st->exc_pe, st->core_brate, st->bwidth ); - - return; -} -#endif diff --git a/lib_enc/stat_noise_uv_enc_fx.c b/lib_enc/stat_noise_uv_enc_fx.c index e741149c2..1045d8efd 100644 --- a/lib_enc/stat_noise_uv_enc_fx.c +++ b/lib_enc/stat_noise_uv_enc_fx.c @@ -11,9 +11,7 @@ #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ -#ifdef IVAS_FLOAT_FIXED #include "prot.h" -#endif /*======================================================================*/ /* FUNCTION : stat_noise_uv_enc_fx */ diff --git a/lib_enc/subband_fft.c b/lib_enc/subband_fft.c index b971e94e1..8d4adb219 100644 --- a/lib_enc/subband_fft.c +++ b/lib_enc/subband_fft.c @@ -40,178 +40,3 @@ #include "prot.h" #include "rom_enc.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED - -/*-------------------------------------------------------------------* - * fft16_flt() - * - * - *-------------------------------------------------------------------*/ - -static void fft16_flt( float *r_samp, float *i_samp ) -{ - int16_t i, j, N, Nv2, nm1, k; - float tmpr[16], tmpi[16]; - float r1, s1, r2, s2; - - for ( i = 0; i < 16; i++ ) - { - tmpr[i] = r_samp[i] * M_inr[i] - i_samp[i] * M_ini[i]; - tmpi[i] = r_samp[i] * M_ini[i] + i_samp[i] * M_inr[i]; - } - - for ( i = 0; i < 8; i++ ) - { - s1 = tmpr[i] - tmpr[8 + i]; - r1 = tmpi[i] - tmpi[8 + i]; - - tmpr[i] = tmpr[i] + tmpr[8 + i]; - tmpi[i] = tmpi[i] + tmpi[8 + i]; - - tmpr[i + 8] = s1 * M_r[i] - r1 * M_i[i]; - tmpi[i + 8] = s1 * M_i[i] + r1 * M_r[i]; - } - - for ( i = 0; i < 4; i++ ) - { - s1 = tmpr[i] - tmpr[4 + i]; - r1 = tmpi[i] - tmpi[4 + i]; - - tmpr[i] = tmpr[i] + tmpr[4 + i]; - tmpi[i] = tmpi[i] + tmpi[4 + i]; - - tmpr[i + 4] = s1 * M_r[2 * i] - r1 * M_i[2 * i]; - tmpi[i + 4] = s1 * M_i[2 * i] + r1 * M_r[2 * i]; - } - for ( i = 0; i < 4; i++ ) - { - s1 = tmpr[i + 8] - tmpr[12 + i]; - r1 = tmpi[i + 8] - tmpi[12 + i]; - - tmpr[i + 8] = tmpr[i + 8] + tmpr[12 + i]; - tmpi[i + 8] = tmpi[i + 8] + tmpi[12 + i]; - - tmpr[i + 12] = s1 * M_r[2 * i] - r1 * M_i[2 * i]; - tmpi[i + 12] = s1 * M_i[2 * i] + r1 * M_r[2 * i]; - } - - - for ( i = 0; i < 16; i = i + 4 ) - { - s1 = tmpr[i] - tmpr[2 + i]; - r1 = tmpi[i] - tmpi[2 + i]; - s2 = tmpr[i + 1] - tmpr[3 + i]; - r2 = tmpi[i + 1] - tmpi[3 + i]; - - tmpr[i] = tmpr[i] + tmpr[2 + i]; - tmpi[i] = tmpi[i] + tmpi[2 + i]; - tmpr[i + 1] = tmpr[i + 1] + tmpr[3 + i]; - tmpi[i + 1] = tmpi[i + 1] + tmpi[3 + i]; - - tmpr[i + 2] = s1 * M_r[0] - r1 * M_i[0]; - tmpi[i + 2] = s1 * M_i[0] + r1 * M_r[0]; - tmpr[i + 3] = s2 * M_r[4] - r2 * M_i[4]; - tmpi[i + 3] = s2 * M_i[4] + r2 * M_r[4]; - } - - for ( i = 0; i < 16; i = i + 2 ) - { - s1 = tmpr[i] - tmpr[1 + i]; - r1 = tmpi[i] - tmpi[1 + i]; - - tmpr[i] = tmpr[i] + tmpr[1 + i]; - tmpi[i] = tmpi[i] + tmpi[1 + i]; - - tmpr[i + 1] = s1 * M_r[0] - r1 * M_i[0]; - tmpi[i + 1] = s1 * M_i[0] + r1 * M_r[0]; - } - - N = 16; - Nv2 = N >> 1; - nm1 = N - 1; - j = 0; - for ( i = 0; i < nm1; i++ ) - { - if ( i < j ) - { - r_samp[j] = tmpr[i] * M_Wr[j] - tmpi[i] * M_Wi[j]; - i_samp[j] = tmpr[i] * M_Wi[j] + tmpi[i] * M_Wr[j]; - r_samp[i] = tmpr[j] * M_Wr[i] - tmpi[j] * M_Wi[i]; - i_samp[i] = tmpr[j] * M_Wi[i] + tmpi[j] * M_Wr[i]; - } - else if ( i == j ) - { - r_samp[i] = tmpr[i] * M_Wr[i] - tmpi[i] * M_Wi[i]; - i_samp[i] = tmpr[i] * M_Wi[i] + tmpi[i] * M_Wr[i]; - } - - k = Nv2; - while ( k <= j ) - { - j -= k; - k >>= 1; - } - j += k; - } - - r_samp[15] = tmpr[15] * M_Wr[15] - tmpi[15] * M_Wi[15]; - i_samp[15] = tmpr[15] * M_Wi[15] + tmpi[15] * M_Wr[15]; - - return; -} - - -/*-------------------------------------------------------------------* - * subband_FFT() - * - * - *-------------------------------------------------------------------*/ - -void subband_FFT( - float Sr[16][60], /* i : real part of the cldfb */ - float Si[16][60], /* i : imag part of the cldfb */ - float *spec_amp /* o : spectral amplitude */ -) -{ - int16_t i, j; - float tmpr[16], tmpi[16]; - float ptmp[16], tmp1; - - for ( i = 0; i < 10; i++ ) - { - for ( j = 0; j < 16; j++ ) - { - tmpr[j] = Sr[j][i]; - tmpi[j] = Si[j][i]; - } - - fft16_flt( tmpr, tmpi ); - - for ( j = 0; j < 16; j++ ) - { - ptmp[j] = tmpr[j] * tmpr[j] + tmpi[j] * tmpi[j]; - } - if ( i % 2 == 0 ) - { - for ( j = 0; j < 8; j++ ) - { - tmp1 = ptmp[j] + ptmp[15 - j]; - spec_amp[i * 8 + j] = (float) sqrt( tmp1 ); - } - } - else - { - for ( j = 0; j < 8; j++ ) - { - tmp1 = ptmp[j] + ptmp[15 - j]; - spec_amp[i * 8 + 7 - j] = (float) sqrt( tmp1 ); - } - } - } - - return; -} - -#endif diff --git a/lib_enc/swb_bwe_enc.c b/lib_enc/swb_bwe_enc.c index e3abfa4a1..f63322811 100644 --- a/lib_enc/swb_bwe_enc.c +++ b/lib_enc/swb_bwe_enc.c @@ -44,1860 +44,11 @@ #include "basop_util.h" #include "basop_proto_func.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * Local function prototypes - *---------------------------------------------------------------------*/ - -static int16_t SWB_BWE_encoding( Encoder_State *st, const float *insig, const float *insig_lp, const float *insig_hp, const float *synth, const float *yos, float *SWB_fenv, const float tilt_nb, const int16_t st_offset ); -static void MSVQ_Interpol_Tran( float *SWB_env_energy, int16_t *indice ); -static void calculate_tonality( const float *org, const float *gen, float *SFM_org, float *SFM_gen, const int16_t length ); -static int16_t WB_BWE_encoding( Encoder_State *st, const float *yos, float *WB_fenv ); -static void energy_control( Encoder_State *st, const int16_t core, const int16_t mode, const int16_t coder_type, const float *org, const int16_t offset, float *energy_factor ); -static int16_t decision_hq_generic_class( const float *coefs, const int16_t hq_generic_offset ); - - -/*-------------------------------------------------------------------* - * wb_bwe_enc() - * - * WB BWE encoder - *-------------------------------------------------------------------*/ - -void wb_bwe_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *new_wb_speech /* i : original input signal at 16kHz */ -) -{ - FD_BWE_ENC_HANDLE hBWE_FD; - float old_input[NS2SA( 16000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k]; - float *new_input; /* pointer to original input signal */ - float yorig[L_FRAME16k]; /* MDCT spectrum of weighted original */ - int16_t mode = 0; - float wtda_old_input[2 * L_FRAME16k]; - float WB_fenv[SWB_FENV]; - int16_t Sample_Delay_WB_BWE; - - hBWE_FD = st->hBWE_FD; - - if ( st->extl_brate > 0 ) - { - /*---------------------------------------------------------------------* - * Delay the original input signal to be synchronized with ACELP core synthesis - *---------------------------------------------------------------------*/ - - set_f( old_input, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME16k ); - - Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); - - new_input = old_input + Sample_Delay_WB_BWE; - mvr2r( hBWE_FD->old_input_wb, old_input, Sample_Delay_WB_BWE ); - mvr2r( new_wb_speech, new_input, L_FRAME16k ); - mvr2r( old_input + L_FRAME16k, hBWE_FD->old_input_wb, Sample_Delay_WB_BWE ); - - /*---------------------------------------------------------------------* - * WB BWE encoding - *---------------------------------------------------------------------*/ - - /* MDCT of the original signal */ - wtda( old_input, wtda_old_input, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, L_FRAME16k ); - - direct_transform( wtda_old_input, yorig, 0, L_FRAME16k, st->element_mode ); - - mode = WB_BWE_encoding( st, yorig, WB_fenv ); - - push_indice( st->hBstr, IND_WB_CLASS, mode - 2, 1 ); - } - - hBWE_FD->prev_mode = mode; - - return; -} - -/*-------------------------------------------------------------------* - * get_normalize_spec() - * - *-------------------------------------------------------------------*/ - -static void get_normalize_spec( - const int16_t core, /* i : core selected */ - const int16_t extl, /* i : extension layer selected */ - const int16_t mode, /* i : SHB BWE class */ - const int16_t core_type, /* i : coding type */ - const float *org, /* i : input spectrum */ - float *SWB_signal, /* o : output spectrum */ - int16_t *prev_L_swb_norm, /* i : previous norm. len */ - const int16_t offset /* i : frequency offset */ -) -{ - int16_t n_freq, L_swb_norm; - float envelope[L_FRAME32k]; - int16_t frq_end; - - set_f( SWB_signal, 0, HQ_GENERIC_HIGH0 + offset ); - calc_normal_length( core, org, mode, extl, &L_swb_norm, prev_L_swb_norm ); - - if ( extl == SWB_BWE || extl == FB_BWE ) - { - if ( mode == HARMONIC ) - { - mvr2r( org, &SWB_signal[240 + offset], 240 ); - mvr2r( &org[128], &SWB_signal[480 + offset], 80 ); - } - else - { - mvr2r( &org[112], &SWB_signal[240 + offset], 128 ); - mvr2r( &org[112], &SWB_signal[368 + offset], 128 ); - mvr2r( &org[176], &SWB_signal[496 + offset], 64 ); - } - frq_end = 560 + offset; - } - else if ( extl == WB_BWE ) - { - if ( core_type == 0 ) - { - mvr2r( &org[160], &SWB_signal[240], 80 ); - } - else - { - mvr2r( &org[80], &SWB_signal[240], 80 ); - } - frq_end = L_FRAME16k; - } - else - { - mvr2r( org + HQ_GENERIC_OFFSET, SWB_signal + HQ_GENERIC_HIGH0 + offset, HQ_GENERIC_LEN0 ); - mvr2r( org + HQ_GENERIC_OFFSET, SWB_signal + HQ_GENERIC_HIGH1 + offset, HQ_GENERIC_LEN0 ); - if ( offset == HQ_GENERIC_FOFFSET_24K4 ) - { - mvr2r( org + HQ_GENERIC_LOW0, SWB_signal + HQ_GENERIC_HIGH2 + offset, HQ_GENERIC_END_FREQ - HQ_GENERIC_HIGH2 ); - } - frq_end = L_FRAME32k; - } - - /* calculate envelope */ - calc_norm_envelop( SWB_signal, envelope, L_swb_norm, frq_end - offset, offset ); - - /* Normalize with envelope */ - for ( n_freq = swb_bwe_subband[0] + offset; n_freq < frq_end; n_freq++ ) - { - SWB_signal[n_freq] /= envelope[n_freq]; - } - - return; -} - -/*-------------------------------------------------------------------* - * WB_BWE_fenv_q() - * - * Scalar quantizer routine - *-------------------------------------------------------------------*/ - -/*! r: quantized gain index */ -static int16_t WB_BWE_fenv_q( - float *x, /* i/o: energy of WB envelop */ - const float *cb, /* i : quantizer codebook */ - const int16_t cb_length, /* i : length of codebook */ - const int16_t cb_dim /* i : dimension of codebook */ -) -{ - int16_t i, j, indx = 0; - float dist, min_dist; - const float *pit = cb; - - min_dist = FLT_MAX; - for ( i = 0; i < cb_length; i++ ) - { - dist = 0.0f; - for ( j = 0; j < cb_dim; j++ ) - { - dist += ( x[j] - ( *pit ) ) * ( x[j] - ( *pit ) ); - pit++; - } - - if ( dist < min_dist ) - { - min_dist = dist; - indx = i; - } - } - - for ( j = 0; j < cb_dim; j++ ) - { - x[j] = cb[cb_dim * indx + j]; - } - - return ( indx ); -} - -/*-------------------------------------------------------------------* - * FD_BWE_class() - * - * classify signal of above 6.4kHz, can be used for WB/SWB switch - *-------------------------------------------------------------------*/ - -/*! r: FD BWE class */ -static int16_t FD_BWE_class( - const float *fSpectrum, /* i : input spectrum */ - const float fGain, /* i : global gain */ - const float tilt_nb, /* i : BWE tilt */ - Encoder_State *st /* i/o: Encoder structure */ -) -{ - int16_t i, j, k, noise, sharpMod = 0; - float peak, mean[20], mag; - float sharpPeak; - const float *input_hi = 0; - float sharp; - float gain_tmp = 0; - int16_t mode; - float meanH, mean_d = 0; - int16_t sharplimit; - int16_t numsharp; - int16_t numharmonic; - - mode = NORMAL; - k = 0; - noise = 0; - sharpPeak = 0; - numsharp = 0; - numharmonic = 4; - sharplimit = 10; - - if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - input_hi = &fSpectrum[256]; - numsharp = NUM_SHARP; - if ( ( st->last_extl == SWB_BWE && st->extl == SWB_BWE ) || ( st->last_extl == FB_BWE && st->extl == FB_BWE ) ) - { - gain_tmp = fGain / ( st->hBWE_FD->prev_global_gain + EPSILON ); - if ( st->hBWE_FD->prev_mode == TRANSIENT ) - { - numharmonic = numharmonic * 2; - } - else if ( st->hBWE_FD->prev_mode == NORMAL || st->hBWE_FD->prev_mode == NOISE ) - { - numharmonic = 3 * numharmonic / 2; - } - } - else - { - gain_tmp = 1; - if ( st->hBWE_FD->prev_mode == HARMONIC ) - { - numharmonic = numharmonic / 2; - sharplimit = sharplimit / 2; - } - else - { - numharmonic = numharmonic * 2; - sharplimit = sharplimit * 2; - } - } - } - else if ( st->extl == WB_BWE ) - { - input_hi = &fSpectrum[224]; - numsharp = NUM_SHARP / 3; - if ( st->hBWE_FD->prev_mode == HARMONIC ) - { - numharmonic = numharmonic / 4; - } - else - { - numharmonic = numharmonic / 2; - } - if ( st->last_extl != WB_BWE ) - { - if ( st->hBWE_FD->prev_mode == HARMONIC ) - { - sharplimit = sharplimit / 2; - } - else - { - sharplimit = sharplimit * 2; - } - } - } - - meanH = EPSILON; - for ( i = 0; i < numsharp; i++ ) - { - peak = 0.0f; - mean[i] = 0; - - for ( j = 0; j < SHARP_WIDTH; j++ ) - { - mag = (float) fabs( *input_hi ); - if ( mag > peak ) - { - peak = mag; - } - mean[i] += mag; - input_hi++; - } - meanH += mean[i]; - - if ( mean[i] != peak ) - { - sharp = (float) ( peak * ( SHARP_WIDTH - 1 ) / ( mean[i] - peak ) ); - } - else - { - sharp = 0.0f; - } - - if ( sharp > 4.5 && peak > 8 ) - { - k += 1; - } - else if ( sharp < 3.0 ) - { - noise += 1; - } - - if ( sharp > sharpPeak ) - { - sharpPeak = sharp; - } - } - - if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - if ( k >= numharmonic && gain_tmp > 0.5f && gain_tmp < 1.8f && sharpPeak > sharplimit ) - { - sharpMod = 1; - } - else - { - sharpMod = 0; - } - meanH /= 288; - mean_d = 0.0f; - for ( i = 0; i < NUM_SHARP; i++ ) - { - mean_d += (float) fabs( mean[i] / 32 - meanH ); - } - } - else if ( st->extl == WB_BWE ) - { - if ( k >= numharmonic && sharpPeak > sharplimit ) - { - sharpMod = 1; - } - else - { - sharpMod = 0; - } - } - - if ( sharpMod && st->hBWE_FD->modeCount < 12 ) - { - st->hBWE_FD->modeCount++; - } - else if ( sharpMod == 0 && st->hBWE_FD->modeCount > 0 ) - { - st->hBWE_FD->modeCount--; - } - - if ( st->hBWE_FD->modeCount >= 2 ) - { - sharpMod = 1; - } - - if ( sharpMod ) - { - mode = HARMONIC; - } - else if ( st->extl == SWB_BWE || st->extl == FB_BWE ) - { - if ( noise > 4 && mean_d < 4.8f * meanH && tilt_nb < 5 ) - { - mode = NOISE; - } - } - - return mode; -} - -/*-------------------------------------------------------------------* - * WB_BWE_encoding() - * - * WB BWE main encoder - *-------------------------------------------------------------------*/ - -/*! r: classification of wb signal */ -static int16_t WB_BWE_encoding( - Encoder_State *st, /* i/o: Encoder structure */ - const float *yos, /* i : MDCT coefficients of weighted original */ - float *WB_fenv /* i/o: energy of WB envelope */ -) -{ - int16_t mode; - float global_gain; - float energy; - int16_t i, n_coeff, n_band; - int16_t index; - float energy_factor[4]; - - /* Energy for the different bands and global energies */ - global_gain = EPSILON; - - for ( i = 0, n_band = 0; i < 2; i++ ) - { - energy = EPSILON; - for ( n_coeff = swb_bwe_subband[n_band]; n_coeff < swb_bwe_subband[n_band + 2]; n_coeff++ ) - { - energy += yos[n_coeff] * yos[n_coeff]; - } - - WB_fenv[i] = energy; - n_band += 2; - global_gain += energy; - } - - mode = FD_BWE_class( yos, global_gain, 0, st ); - - energy_control( st, ACELP_CORE, mode, st->coder_type, yos, 0, energy_factor ); - - for ( i = 0; i < 2; i++ ) - { - WB_fenv[i] = (float) ( log10( WB_fenv[i] * energy_factor[i << 1] / 40 ) * FAC_LOG2 ); - } - - index = WB_BWE_fenv_q( WB_fenv, F_2_5, 32, 2 ); - - push_indice( st->hBstr, IND_WB_FENV, index, 5 ); - - - return ( mode ); -} - - -/*-------------------------------------------------------------------* - * swb_bwe_enc() - * - * SWB BWE encoder (only for 32kHz signals) - *-------------------------------------------------------------------*/ - -void swb_bwe_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t last_element_mode, /* i : last element mode */ - const float *old_input_12k8, /* i : input signal @12.8kHz for SWB BWE */ - const float *old_input_16k, /* i : input signal @16kHz for SWB BWE */ - const float *old_syn_12k8_16k, /* i : ACELP core synthesis at 12.8kHz or 16kHz*/ - const float *new_swb_speech, /* i : original input signal at 32kHz */ - const float *shb_speech /* i : SHB target signal (6-14kHz) at 16kHz */ -) -{ - int16_t i, inner_frame, idxGain; - TD_BWE_ENC_HANDLE hBWE_TD; - FD_BWE_ENC_HANDLE hBWE_FD; - float *new_input; - int32_t inner_Fs; - float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k]; - float old_input_lp[L_FRAME16k], new_input_hp[L_FRAME16k]; - float yorig[L_FRAME48k]; - float wtda_old_input[2 * L_FRAME48k]; - float SWB_fenv[SWB_FENV]; - float tilt_nb; - int16_t Sample_Delay_SWB_BWE, Sample_Delay_HP, Sample_Delay_LP; - float ener_low, energy_fbe_fb, fb_ener_adjust, ener_adjust_quan; - int16_t fb_band_begin; - - hBWE_TD = st->hBWE_TD; - hBWE_FD = st->hBWE_FD; - - ener_adjust_quan = 0.0f; - idxGain = 0; - - /*---------------------------------------------------------------------* - * Delay the original input signal to be synchronized with ACELP core synthesis - *---------------------------------------------------------------------*/ - - if ( st->extl == FB_BWE ) - { - inner_frame = L_FRAME48k; - inner_Fs = 48000; - } - else - { - inner_frame = L_FRAME32k; - inner_Fs = 32000; - } - - set_f( old_input, 0.0f, NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + inner_frame ); - - if ( st->L_frame == L_FRAME ) - { - Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); - if ( st->element_mode == IVAS_CPE_TD ) - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); - } - Sample_Delay_LP = NS2SA( 12800, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ); - - if ( st->element_mode > EVS_MONO ) - { - Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); - Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); - - if ( st->element_mode == IVAS_CPE_DFT ) - { - mvr2r( old_input_12k8 + L_INP_MEM - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); - mvr2r( hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, new_input_hp, Sample_Delay_HP ); - } - } - - mvr2r( hBWE_FD->old_input_lp, old_input_lp, Sample_Delay_LP ); - mvr2r( old_input_12k8 + L_INP_MEM, &old_input_lp[Sample_Delay_LP], L_FRAME - Sample_Delay_LP ); - mvr2r( old_input_12k8 + L_INP_MEM + L_FRAME - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); - } - else - { - Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ); - if ( st->element_mode == IVAS_CPE_TD ) - { - Sample_Delay_HP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS - L_MEM_RECALC_TBE_NS ); - } - Sample_Delay_LP = NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ); - - if ( st->element_mode > EVS_MONO ) - { - Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); - Sample_Delay_HP -= NS2SA( 16000, DELAY_FIR_RESAMPL_NS ); - - if ( st->element_mode == IVAS_CPE_DFT ) - { - mvr2r( old_input_16k + L_INP_MEM - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); - mvr2r( hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - Sample_Delay_HP, new_input_hp, Sample_Delay_HP ); - } - } - - mvr2r( hBWE_FD->old_input_lp, old_input_lp, Sample_Delay_LP ); - mvr2r( old_input_16k + L_INP_MEM, &old_input_lp[Sample_Delay_LP], L_FRAME16k - Sample_Delay_LP ); - mvr2r( old_input_16k + L_INP_MEM + L_FRAME16k - Sample_Delay_LP, hBWE_FD->old_input_lp, Sample_Delay_LP ); - } - - mvr2r( hBWE_FD->new_input_hp, new_input_hp, Sample_Delay_HP ); - mvr2r( shb_speech, new_input_hp + Sample_Delay_HP, L_FRAME16k - Sample_Delay_HP ); - mvr2r( shb_speech + L_FRAME16k - Sample_Delay_HP, hBWE_FD->new_input_hp, Sample_Delay_HP ); - - new_input = old_input + Sample_Delay_SWB_BWE; - mvr2r( hBWE_FD->old_input, old_input, Sample_Delay_SWB_BWE ); - mvr2r( new_swb_speech, new_input, inner_frame ); - mvr2r( old_input + inner_frame, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - - /*----------------------------------------------------------------------* - * Calculate tilt of the input signal and the ACELP core synthesis - *----------------------------------------------------------------------*/ - - calc_tilt_bwe( old_input_lp, &tilt_nb, L_FRAME ); - - /*---------------------------------------------------------------------* - * SWB BWE encoding - * FB BWE encoding - *---------------------------------------------------------------------*/ - - if ( st->idchan == 1 && last_element_mode == IVAS_CPE_DFT ) - { - for ( i = 0; i < inner_frame; i++ ) - { - hBWE_FD->old_wtda_swb[i] *= (float) i / (float) inner_frame; - } - } - - /* windowing of the original input signal */ - wtda( old_input, wtda_old_input, hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, inner_frame ); - - /* DCT of the original input signal */ - direct_transform( wtda_old_input, yorig, 0, inner_frame, st->element_mode ); - - /* high-band gain control in case of BWS */ - if ( st->bwidth_sw_cnt > 0 ) - { - v_multc( yorig + L_FRAME16k, (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD, yorig + L_FRAME16k, inner_frame - L_FRAME16k ); - } - - /* FB BWE encoding */ - if ( st->extl == FB_BWE ) - { - fb_band_begin = FB_BAND_BEGIN; - if ( st->L_frame == L_FRAME ) - { - fb_band_begin = FB_BAND_BEGIN_12k8; - } - - energy_fbe_fb = sum2_f( yorig + fb_band_begin, FB_BAND_WIDTH ) + EPSILON; - ener_low = EPSILON; - for ( i = fb_band_begin - FB_BAND_WIDTH; i < fb_band_begin; i++ ) - { - ener_low += yorig[i] * yorig[i]; - } - - fb_ener_adjust = (float) sqrt( energy_fbe_fb / ener_low ); - fb_ener_adjust = min( fb_ener_adjust, FB_MAX_GAIN_VAR ); - idxGain = (int16_t) usquant( fb_ener_adjust, &ener_adjust_quan, FB_GAIN_QLOW, FB_GAIN_QDELTA, 1 << NUM_BITS_FB_FRAMEGAIN ); - } - - /* SWB BWE encoding */ - if ( st->L_frame == L_FRAME16k ) - { - SWB_BWE_encoding( st, old_input, old_input_lp, new_input_hp, old_syn_12k8_16k, yorig, SWB_fenv, tilt_nb, 80 ); - } - else - { - SWB_BWE_encoding( st, old_input, old_input_lp, new_input_hp, old_syn_12k8_16k, yorig, SWB_fenv, tilt_nb, 6 ); - } - - /* write FB BWE frame gain to the bitstream */ - if ( st->extl == FB_BWE ) - { - push_indice( st->hBstr, IND_FB_SLOPE, idxGain, NUM_BITS_FB_FRAMEGAIN ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * Freq_weights() - * - *-------------------------------------------------------------------*/ - -static void freq_weights( - const float Band_Ener[], /* i : Band energy */ - const float f_weighting[], /* i : weigting coefs. */ - float w_env[], /* o : Freq. weighting */ - const int16_t Nbands /* i : Number of bands */ -) -{ - int16_t i; - float tmp, w1[SWB_FENV], w2[SWB_FENV]; - float min_b, max_b; - - /* Find Max band energy */ - min_b = Band_Ener[0]; - max_b = Band_Ener[0]; - for ( i = 1; i < Nbands; i++ ) - { - if ( Band_Ener[i] < min_b ) - { - min_b = Band_Ener[i]; - } - if ( Band_Ener[i] > max_b ) - { - max_b = Band_Ener[i]; - } - } - - /* Find weighting function */ - tmp = 1.f / ( max_b - min_b ); - for ( i = 0; i < Nbands; i++ ) - { - w1[i] = ( Band_Ener[i] - min_b ) * tmp + 1.f; /*1<= var <=2 */ - w2[i] = f_weighting[i]; /*1~0.75*/ - w_env[i] = w1[i] * w2[i]; - } - - return; -} - - -/*-------------------------------------------------------------------* - * VQwithCand_w() - * - *-------------------------------------------------------------------*/ - -static void vqWithCand_w( - const float *x, /* i : input vector */ - const float *E_ROM_dico, /* i : codebook */ - const int16_t dim, /* i : codebook dimension */ - const int16_t E_ROM_dico_size, /* i : codebook size */ - int16_t *index, /* o : survivors indices */ - const int16_t surv, /* i : survivor number */ - float dist_min[], /* o : minimum distortion */ - const float *w, /* i : weighting */ - const int16_t flag /* i : flag indicationg weighted distortion metric */ -) -{ - int16_t i, j, k, l; - const float *p_E_ROM_dico; - float dist, temp1; - - if ( flag ) - { - set_f( dist_min, 3.402823466e+38F, surv ); /* FLT_MAX */ - - for ( i = 0; i < surv; i++ ) - { - index[i] = i; - } - - p_E_ROM_dico = E_ROM_dico; - - for ( i = 0; i < E_ROM_dico_size; i++ ) - { - dist = x[0] - *p_E_ROM_dico++; - dist *= ( dist * w[0] ); - - for ( j = 1; j < dim; j++ ) - { - temp1 = x[j] - *p_E_ROM_dico++; - dist += temp1 * temp1 * w[j]; - } - - for ( k = 0; k < surv; k++ ) - { - if ( dist < dist_min[k] ) - { - for ( l = surv - 1; l > k; l-- ) - { - dist_min[l] = dist_min[l - 1]; - index[l] = index[l - 1]; - } - dist_min[k] = dist; - index[k] = i; - break; - } - } - } - } - else - { - set_f( dist_min, 3.402823466e+38F, surv ); /* FLT_MAX */ - - for ( i = 0; i < surv; i++ ) - { - index[i] = i; - } - - p_E_ROM_dico = E_ROM_dico; - - for ( i = 0; i < E_ROM_dico_size; i++ ) - { - dist = x[0] - *p_E_ROM_dico++; - dist *= dist; - - for ( j = 1; j < dim; j++ ) - { - temp1 = x[j] - *p_E_ROM_dico++; - dist += temp1 * temp1; - } - - for ( k = 0; k < surv; k++ ) - { - if ( dist < dist_min[k] ) - { - for ( l = surv - 1; l > k; l-- ) - { - dist_min[l] = dist_min[l - 1]; - index[l] = index[l - 1]; - } - dist_min[k] = dist; - index[k] = i; - break; - } - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * vqSimple_w() - * - *-------------------------------------------------------------------*/ - -static int16_t vqSimple_w( - const float *x, /* i : input for quantizer */ - float *y, /* i : quantized value */ - const float *cb, /* i : codebooks */ - const float *w, /* i : weight */ - const int16_t dim, /* i : dimension */ - const int16_t l, /* i : number of candidates */ - const int16_t flag /* i : flag indicationg weighted distortion metric */ -) -{ - int16_t i, j, index; - const float *cbP; - float dist_min, dist, temp; - - index = 0; - dist_min = FLT_MAX; - cbP = cb; - - if ( flag ) - { - for ( i = 0; i < l; i++ ) - { - dist = x[0] - *cbP++; - dist *= ( dist * w[0] ); - for ( j = 1; j < dim; j++ ) - { - temp = x[j] - *cbP++; - dist += temp * temp * w[j]; - } - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - } - else - { - for ( i = 0; i < l; i++ ) - { - dist = x[0] - *cbP++; - dist *= dist; - for ( j = 1; j < dim; j++ ) - { - temp = x[j] - *cbP++; - dist += temp * temp; - } - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - } - - /* Reading the selected vector */ - mvr2r( &cb[index * dim], y, dim ); - - return ( index ); -} - -/*-------------------------------------------------------------------* - * MSVQ_Interpol_Tran() - * - *-------------------------------------------------------------------*/ - -static void MSVQ_Interpol_Tran( - float *SWB_env_energy, /* i/o: (original/quantized) energy */ - int16_t *indice /* o : quantized index */ -) -{ - int16_t k, n_band, candInd[N_CAND_TR], ind_tmp[2]; - float env_temp11[SWB_FENV_TRANS / 2], env_temp12[SWB_FENV_TRANS / 2]; - float dist, minDist, tmp_q; - float quant_tmp[SWB_FENV_TRANS], quant_tmp2[SWB_FENV_TRANS]; - float distCand[N_CAND_TR], quant_select[SWB_FENV_TRANS]; - - /* Extract target vector */ - for ( n_band = 0; n_band < DIM_TR1; n_band++ ) - { - env_temp11[n_band] = SWB_env_energy[2 * n_band]; - env_temp12[n_band] = SWB_env_energy[2 * n_band + 1]; - } - - vqWithCand_w( env_temp11, Env_TR_Cdbk1, DIM_TR1, N_CB_TR1, candInd, N_CAND_TR, distCand, NULL, 0 ); - - minDist = FLT_MAX; - for ( k = 0; k < N_CAND_TR; k++ ) - { - for ( n_band = 0; n_band < DIM_TR1; n_band++ ) - { - quant_tmp[n_band] = Env_TR_Cdbk1[candInd[k] * DIM_TR1 + n_band]; - } - - for ( n_band = 0; n_band < DIM_TR2 - 1; n_band++ ) - { - quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ); - } - quant_tmp2[n_band] = env_temp12[n_band] - quant_tmp[n_band]; - ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, Env_TR_Cdbk2, NULL, DIM_TR2, N_CB_TR2, 0 ); - - for ( n_band = 0; n_band < DIM_TR1; n_band++ ) - { - quant_select[n_band * 2] = quant_tmp[n_band]; - } - - for ( n_band = 0; n_band < DIM_TR2 - 1; n_band++ ) - { - quant_select[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; - } - quant_select[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; - - dist = 0.f; - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - tmp_q = SWB_env_energy[n_band] - quant_select[n_band]; - dist += tmp_q * tmp_q; - } - - /* Check optimal candidate */ - if ( dist < minDist ) - { - minDist = dist; - indice[0] = candInd[k]; - indice[1] = ind_tmp[0]; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * MSVQ_Interpol() - * - *-------------------------------------------------------------------*/ -static void msvq_interpol( - float *SWB_env_energy, /* i/o: (original/quantized) energy */ - float *w_env, /* i/o: weighting coffecients */ - int16_t *indice /* o : quantized index */ -) -{ - int16_t k, n_band, candInd[N_CAND], ind_tmp[4]; - float dist, minDist, tmp_q; - float env_temp11[SWB_FENV / 2], env_temp12[SWB_FENV / 2]; - float quant_tmp[SWB_FENV], quant_tmp1[SWB_FENV], quant_tmp2[SWB_FENV], distCand[N_CAND]; - float quant_select[SWB_FENV], w_env11[SWB_FENV / 2], w_env12[SWB_FENV / 2]; - float synth_energy[SWB_FENV]; - - /* Extract target vector */ - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - env_temp11[n_band] = SWB_env_energy[2 * n_band]; - env_temp12[n_band] = SWB_env_energy[2 * n_band + 1]; - - w_env11[n_band] = w_env[2 * n_band]; - w_env12[n_band] = w_env[2 * n_band + 1]; - } - - vqWithCand_w( env_temp11, EnvCdbk11, DIM11, N_CB11, candInd, N_CAND, distCand, w_env11, 1 ); - - minDist = FLT_MAX; - for ( k = 0; k < N_CAND; k++ ) - { - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - quant_tmp1[n_band] = EnvCdbk11[candInd[k] * DIM11 + n_band]; - quant_tmp2[n_band] = env_temp11[n_band] - quant_tmp1[n_band]; - } - - ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk1st, w_env11, DIM1ST, N_CB1ST, 1 ); - ind_tmp[1] = vqSimple_w( quant_tmp2 + DIM1ST, quant_tmp2 + DIM1ST, EnvCdbk2nd, w_env11 + DIM1ST, DIM2ND, N_CB2ND, 1 ); - - /* Extract vector for odd position */ - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - quant_tmp[n_band] = quant_tmp1[n_band] + quant_tmp2[n_band]; - } - - for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) - { - quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ); - } - - quant_tmp2[n_band] = env_temp12[n_band] - quant_tmp[n_band]; - - ind_tmp[2] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk3rd, w_env12, DIM3RD, N_CB3RD, 1 ); - ind_tmp[3] = vqSimple_w( quant_tmp2 + DIM3RD, quant_tmp2 + DIM3RD, EnvCdbk4th, w_env12 + DIM3RD, DIM4TH, N_CB4TH, 1 ); - - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - quant_select[n_band * 2] = quant_tmp[n_band]; - } - - for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) - { - quant_select[n_band * 2 + 1] = ( ( quant_tmp[n_band] + quant_tmp[n_band + 1] ) / 2.f ) + quant_tmp2[n_band]; - } - quant_select[n_band * 2 + 1] = quant_tmp[n_band] + quant_tmp2[n_band]; - - dist = 0.f; - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - tmp_q = SWB_env_energy[n_band] - quant_select[n_band]; - tmp_q = tmp_q * tmp_q; - dist += tmp_q * w_env[n_band]; - } - - /* Check optimal candidate */ - if ( dist < minDist ) - { - minDist = dist; - mvr2r( quant_select, synth_energy, SWB_FENV ); - - indice[0] = candInd[k]; - indice[1] = ind_tmp[0]; - indice[2] = ind_tmp[1]; - indice[3] = ind_tmp[2]; - indice[4] = ind_tmp[3]; - } - } - - mvr2r( synth_energy, SWB_env_energy, SWB_FENV ); - - return; -} - -/*-------------------------------------------------------------------* - * msvq_interpol_2() - * - * - *-------------------------------------------------------------------*/ - -static void msvq_interpol_2( - float *hq_generic_fenv, /* i/o: (original/quantized) energy */ - const float *w_env, /* i : weighting coffecients */ - int16_t *indice, /* o : quantized index */ - const int16_t nenv /* i : the number of envelopes */ -) -{ - int16_t k, n_band, candInd[N_CAND], ind_tmp[4]; - float dist, minDist, tmp_q; - float env_temp11[SWB_FENV / 2], env_temp12[SWB_FENV / 2]; - float quant_tmp[SWB_FENV], quant_tmp1[SWB_FENV], quant_tmp2[SWB_FENV], distCand[N_CAND]; - float quant_select[SWB_FENV], w_env11[SWB_FENV / 2], w_env12[SWB_FENV / 2]; - float synth_energy[SWB_FENV]; - - /* Extract target vector */ - for ( n_band = 0; n_band < DIM11 - 1; n_band++ ) - { - env_temp11[n_band] = hq_generic_fenv[2 * n_band]; - w_env11[n_band] = w_env[2 * n_band]; - } - env_temp11[DIM11 - 1] = hq_generic_fenv[2 * ( DIM11 - 2 ) + 1]; - w_env11[DIM11 - 1] = w_env[2 * ( DIM11 - 2 ) + 1]; - - env_temp12[0] = hq_generic_fenv[0]; - w_env12[0] = w_env[0]; - for ( n_band = 1; n_band < DIM11 - 1; n_band++ ) - { - env_temp12[n_band] = hq_generic_fenv[2 * n_band - 1]; - w_env12[n_band] = w_env[2 * n_band - 1]; - } - - vqWithCand_w( env_temp11, EnvCdbk11, DIM11, N_CB11, candInd, N_CAND, distCand, w_env11, 1 ); - - minDist = FLT_MAX; - for ( k = 0; k < N_CAND; k++ ) - { - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - quant_tmp1[n_band] = EnvCdbk11[candInd[k] * DIM11 + n_band]; - quant_tmp2[n_band] = env_temp11[n_band] - quant_tmp1[n_band]; - } - - ind_tmp[0] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk1st, w_env11, DIM1ST, N_CB1ST, 1 ); - ind_tmp[1] = vqSimple_w( quant_tmp2 + DIM1ST, quant_tmp2 + DIM1ST, EnvCdbk2nd, w_env11 + DIM1ST, DIM2ND, N_CB2ND, 1 ); - - /* Extract vector for odd position */ - for ( n_band = 0; n_band < DIM11; n_band++ ) - { - quant_tmp[n_band] = quant_tmp1[n_band] + quant_tmp2[n_band]; - } - - quant_tmp2[0] = env_temp12[0] - quant_tmp[0]; - for ( n_band = 1; n_band < DIM12 - 1; n_band++ ) - { - quant_tmp2[n_band] = env_temp12[n_band] - ( ( quant_tmp[n_band - 1] + quant_tmp[n_band] ) / 2.f ); - } - - ind_tmp[2] = vqSimple_w( quant_tmp2, quant_tmp2, EnvCdbk3rd, w_env12, DIM3RD, N_CB3RD, 1 ); - ind_tmp[3] = vqSimple_w( quant_tmp2 + DIM3RD, quant_tmp2 + DIM3RD, EnvCdbk3rd, w_env12 + DIM3RD, DIM3RD, N_CB3RD, 1 ); - - for ( n_band = 0; n_band < DIM12 - 1; n_band++ ) - { - quant_select[n_band * 2] = quant_tmp[n_band]; - } - quant_select[11] = quant_tmp[DIM12 - 1]; - - quant_select[0] += quant_tmp2[0]; - for ( n_band = 1; n_band < DIM12 - 1; n_band++ ) - { - quant_select[n_band * 2 - 1] = ( ( quant_tmp[n_band - 1] + quant_tmp[n_band] ) / 2.f ) + quant_tmp2[n_band]; - } - - dist = 0.f; - for ( n_band = 0; n_band < SWB_FENV - 2; n_band++ ) - { - tmp_q = hq_generic_fenv[n_band] - quant_select[n_band]; - tmp_q = tmp_q * tmp_q; - dist += tmp_q * w_env[n_band]; - } - - /* Check optimal candidate */ - if ( dist < minDist ) - { - minDist = dist; - mvr2r( quant_select, synth_energy, SWB_FENV - 2 ); - synth_energy[SWB_FENV - 2] = 0; - synth_energy[SWB_FENV - 1] = 0; - - indice[0] = candInd[k]; - indice[1] = ind_tmp[0]; - indice[2] = ind_tmp[1]; - indice[3] = ind_tmp[2]; - indice[4] = ind_tmp[3]; - } - } - - mvr2r( synth_energy, hq_generic_fenv, nenv ); - - return; -} - -/*-------------------------------------------------------------------* - * calculate_tonality() - * - * Calculate tonality - *-------------------------------------------------------------------*/ - -static void calculate_tonality( - const float *org, /* i : MDCT coefficients of original */ - const float *gen, /* i : MDCT coefficients of generated signal */ - float *SFM_org, /* o : Spectral Flatness results */ - float *SFM_gen, /* o : Spectral Flatness results */ - const int16_t length /* i : length for calculating tonality */ -) -{ - int16_t n_coeff; - float am_org, am_gen, gm_org, gm_gen; - float inv_len, max_val, mult; - float org_spec[80], gen_spec[80]; - - /* to reduce dynamic range of original spectrum */ - max_val = EPSILON; - for ( n_coeff = 0; n_coeff < length; n_coeff++ ) - { - org_spec[n_coeff] = (float) fabs( org[n_coeff] ); - - if ( max_val < org_spec[n_coeff] ) - { - max_val = org_spec[n_coeff]; - } - } - mult = 25.f / max_val; - - for ( n_coeff = 0; n_coeff < length; n_coeff++ ) - { - org_spec[n_coeff] *= mult; - } - - max_val = EPSILON; - for ( n_coeff = 0; n_coeff < length; n_coeff++ ) - { - gen_spec[n_coeff] = (float) fabs( gen[n_coeff] ); - - if ( max_val < gen_spec[n_coeff] ) - { - max_val = gen_spec[n_coeff]; - } - } - mult = 25.f / max_val; - - for ( n_coeff = 0; n_coeff < length; n_coeff++ ) - { - gen_spec[n_coeff] *= mult; - } - - inv_len = 1.f / (float) length; - - am_org = EPSILON; - am_gen = EPSILON; - gm_org = 1.f; - gm_gen = 1.f; - - for ( n_coeff = 0; n_coeff < length; n_coeff++ ) - { - am_org += org_spec[n_coeff]; - am_gen += gen_spec[n_coeff]; - gm_org *= org_spec[n_coeff]; - gm_gen *= gen_spec[n_coeff]; - } - - *SFM_org = 10.f * ( (float) log10( am_org * inv_len ) - inv_len * (float) log10( gm_org ) ); - *SFM_org = max( 0.0001f, min( *SFM_org, 5.993f ) ); - *SFM_gen = 10.f * ( (float) log10( am_gen * inv_len ) - inv_len * (float) log10( gm_gen ) ); - *SFM_gen = max( 0.0001f, min( *SFM_gen, 5.993f ) ); - - return; -} - -/*-------------------------------------------------------------------* - * energy_control() - * - *-------------------------------------------------------------------*/ - -static void energy_control( - Encoder_State *st, /* i/o: encoder structure */ - const int16_t core, /* i : core */ - const int16_t mode, /* i : SHB BWE class */ - const int16_t coder_type, /* i : SHB BWE class */ - const float *org, /* i : input spectrum */ - const int16_t offset, /* i : frequency offset */ - float *energy_factor /* o : energy factor */ -) -{ - int16_t n_band; - float gamma; - int16_t core_type; - float SWB_signal[L_FRAME32k], SFM_org[SWB_FENV], SFM_gen[SWB_FENV]; - int16_t max_band = SWB_FENV, band_step = 1; - - if ( core == ACELP_CORE ) - { - gamma = 0.35f; - if ( coder_type != AUDIO && st->total_brate <= ACELP_8k00 ) - { - core_type = 0; - } - else - { - core_type = 1; - } - - get_normalize_spec( core, st->extl, mode, core_type, org, SWB_signal, &( st->hBWE_FD->prev_L_swb_norm1 ), offset ); - - if ( st->extl == WB_BWE ) - { - max_band = 4; - band_step = 2; - } - } - else /* HQ core */ - { - gamma = 0.55f; - get_normalize_spec( core, -1, mode, -1, org, SWB_signal, &( st->hBWE_FD->prev_L_swb_norm1 ), offset ); - - if ( offset == HQ_GENERIC_FOFFSET_32K ) - { - max_band = 12; - } - } - - for ( n_band = 0; n_band < max_band; n_band += band_step ) - { - calculate_tonality( org + swb_bwe_subband[n_band] + offset, SWB_signal + swb_bwe_subband[n_band] + offset, &SFM_org[n_band], &SFM_gen[n_band], swb_bwe_subband[n_band + band_step] - swb_bwe_subband[n_band] ); - - if ( SFM_gen[n_band] < 0.75 * SFM_org[n_band] ) - { - energy_factor[n_band] = ( SFM_gen[n_band] / SFM_org[n_band] ); - - if ( energy_factor[n_band] < gamma ) - { - energy_factor[n_band] = gamma; - } - } - else - { - energy_factor[n_band] = 1.0f; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * SWB_BWE_encoding() - * - * SWB BWE encoder - *-------------------------------------------------------------------*/ - -static int16_t SWB_BWE_encoding( - Encoder_State *st, /* i/o: Encoder state structure */ - const float *insig, /* i : delayed original input signal at 32kHz */ - const float *insig_lp, /* i : delayed original lowband input signal at 16kHz */ - const float *insig_hp, /* i : delayed original highband input signal at 16kHz */ - const float *synth, /* i : delayed ACELP core synthesis at 12.8kHz */ - const float *yos, /* i : MDCT coefficients of the windowed original input signal at 32kHz */ - float *SWB_fenv, /* o : frequency-domain quantized BWE envelope */ - const float tilt_nb, /* i : SWB tilt */ - const int16_t st_offset /* i : start frequency offset for BWE envelope */ -) -{ - int16_t IsTransient, mode; - int16_t index; - float SWB_tenv_tmp[SWB_TENV]; - float SWB_tenv[SWB_TENV]; - float global_gain; - float energy; - float max_val; - int16_t i, n_coeff, n_band, pos, indice[6]; - float tilt, WB_tenv_orig, WB_tenv_syn, Rat_tenv; - float energy_factor[SWB_FENV], w_env[SWB_FENV]; - int16_t L; - int16_t IsTransient_LF; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( st->L_frame == L_FRAME ) - { - L = L_SUBFR; - } - else - { - L = L_SUBFR16k; - } - - /* HF transient detect */ - IsTransient = detect_transient( st, insig_hp, L_FRAME16k ); - - /* LF transient detect */ - IsTransient_LF = 0; - for ( n_band = 0; n_band < 4; n_band++ ) - { - energy = EPSILON; - for ( i = 0; i < L; i++ ) - { - energy += insig_lp[i + n_band * L] * insig_lp[i + n_band * L]; - } - - if ( energy > 5.5f * st->hBWE_FD->EnergyLF ) - { - IsTransient_LF = 1; - } - - st->hBWE_FD->EnergyLF = energy; - } - - calc_tilt_bwe( insig, &tilt, L_FRAME32k ); - - if ( IsTransient == 1 && ( tilt > 8.0 || st->clas > 1 ) ) - { - IsTransient = 0; - st->TransientHangOver = 0; - } - - if ( IsTransient == 1 ) - { - mode = IsTransient; - push_indice( hBstr, IND_SWB_CLASS, mode, 2 ); - - /* Energy for the different bands and global energies */ - global_gain = 0; - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - energy = EPSILON; - for ( n_coeff = swb_bwe_trans_subband[n_band] + st_offset; n_coeff < swb_bwe_trans_subband[n_band + 1] + st_offset; n_coeff++ ) - { - energy += yos[n_coeff] * yos[n_coeff]; - } - global_gain += energy; - SWB_fenv[n_band] = energy; - } - global_gain *= 0.5f; - - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - SWB_fenv[n_band] = 10.0f * (float) log10( SWB_fenv[n_band] / swb_bwe_trans_subband_width[n_band] ) - Mean_env_tr[n_band]; - } - - WB_tenv_orig = EPSILON; - WB_tenv_syn = EPSILON; - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] = EPSILON; - - for ( i = 0; i < L_SUBFR16k; i++ ) - { - SWB_tenv[n_band] += insig_hp[i + n_band * L_SUBFR16k] * insig_hp[i + n_band * L_SUBFR16k]; - } - - for ( i = 0; i < L; i++ ) - { - WB_tenv_syn += synth[i + n_band * L] * synth[i + n_band * L]; - WB_tenv_orig += insig_lp[i + n_band * L] * insig_lp[i + n_band * L]; - } - - SWB_tenv[n_band] = (float) ( sqrt( SWB_tenv[n_band] * INV_L_SUBFR16k ) ); - } - - Rat_tenv = (float) sqrt( WB_tenv_syn / WB_tenv_orig ); - - if ( Rat_tenv < 0.5 ) - { - Rat_tenv *= 1.2f; - } - else if ( Rat_tenv > 1 ) - { - Rat_tenv = 1.0f; - } - - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] *= Rat_tenv; - } - - max_val = SWB_tenv[0]; - pos = 0; - for ( n_band = 1; n_band < SWB_TENV; n_band++ ) - { - if ( SWB_tenv[n_band] > max_val ) - { - max_val = SWB_tenv[n_band]; - pos = n_band; - } - } - - for ( n_band = 1; n_band < SWB_TENV; n_band++ ) - { - if ( SWB_tenv[n_band] > 5.0f * SWB_tenv[n_band - 1] ) - { - break; - } - } - - if ( n_band < SWB_TENV ) - { - energy = 0.0f; - for ( n_band = ( pos + 1 ); n_band < SWB_TENV; n_band++ ) - { - energy += SWB_tenv[n_band]; - } - if ( pos == SWB_TENV - 1 ) - { - energy = 0.0f; - } - else - { - energy /= ( SWB_TENV - pos - 1 ); - } - - for ( n_band = 0; n_band < pos; n_band++ ) - { - SWB_tenv[n_band] *= 0.5f; - } - - SWB_tenv[pos] *= 1.005f; - if ( energy < SWB_tenv[pos] ) - { - for ( n_band = pos + 1; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] *= 0.9f; - } - } - } - else - { - for ( n_band = 1; n_band < SWB_TENV; n_band++ ) - { - if ( SWB_tenv[n_band - 1] > SWB_tenv[n_band] ) - { - SWB_tenv[n_band - 1] = 0.5f * ( SWB_tenv[n_band - 1] + SWB_tenv[n_band] ); - } - else - { - SWB_tenv[n_band] = 0.5f * ( SWB_tenv[n_band - 1] + SWB_tenv[n_band] ); - } - } - - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] *= 0.9f; - } - } - - if ( IsTransient_LF == 0 && st->coder_type == INACTIVE && st->TransientHangOver == 1 ) - { - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv[n_band] *= 0.5f; - } - for ( n_band = 0; n_band < SWB_FENV_TRANS; n_band++ ) - { - SWB_fenv[n_band] *= 0.05f; - } - } - else - { - SWB_fenv[2] *= 0.1f; - SWB_fenv[3] *= 0.05f; - } - - for ( n_band = 0; n_band < SWB_TENV; n_band++ ) - { - SWB_tenv_tmp[n_band] = (float) log10( SWB_tenv[n_band] + EPSILON ) * FAC_LOG2; - if ( SWB_tenv_tmp[n_band] > 15 ) - { - index = 15; - } - else if ( SWB_tenv_tmp[n_band] < 0 ) - { - index = 0; - } - else - { - index = (int16_t) ( SWB_tenv_tmp[n_band] + 0.5f ); - } - - push_indice( hBstr, IND_SWB_TENV, index, 4 ); - } - - MSVQ_Interpol_Tran( SWB_fenv, indice ); - - push_indice( hBstr, IND_SWB_FENV, indice[0], 7 ); - push_indice( hBstr, IND_SWB_FENV, indice[1], 6 ); - } - else - { - /* Energy for the different bands and global energies */ - global_gain = 0; - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - energy = EPSILON; - for ( n_coeff = swb_bwe_subband[n_band] + st_offset; n_coeff < swb_bwe_subband[n_band + 1] + st_offset; n_coeff++ ) - { - energy += yos[n_coeff] * yos[n_coeff]; - } - - if ( n_band < SWB_FENV - 2 ) - { - global_gain += energy; - } - SWB_fenv[n_band] = energy; - } - - global_gain *= 0.5f; - - mode = FD_BWE_class( yos, global_gain, tilt_nb, st ); - - push_indice( hBstr, IND_SWB_CLASS, mode, 2 ); - - energy_control( st, ACELP_CORE, mode, -1, yos, st_offset, energy_factor ); - - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - SWB_fenv[n_band] *= energy_factor[n_band]; - SWB_fenv[n_band] = 10.0f * (float) log10( SWB_fenv[n_band] * swb_inv_bwe_subband_width[n_band] ); - } - - freq_weights( SWB_fenv, w_NOR, w_env, SWB_FENV ); - - for ( n_band = 0; n_band < SWB_FENV; n_band++ ) - { - SWB_fenv[n_band] -= Mean_env[n_band]; - } - - /* Energy VQ */ - msvq_interpol( SWB_fenv, w_env, indice ); - - push_indice( hBstr, IND_SWB_FENV, indice[0], 5 ); - push_indice( hBstr, IND_SWB_FENV, indice[1], 7 ); - push_indice( hBstr, IND_SWB_FENV, indice[2], 6 ); - push_indice( hBstr, IND_SWB_FENV, indice[3], 5 ); - push_indice( hBstr, IND_SWB_FENV, indice[4], 6 ); - } - - st->hBWE_FD->prev_mode = mode; - st->hBWE_FD->prev_global_gain = global_gain; - - return mode; -} - -/*-------------------------------------------------------------------* - * decision_hq_generic_class() - * - *-------------------------------------------------------------------*/ - -static int16_t decision_hq_generic_class( - const float *coefs, /* i : original MDCT spectrum */ - const int16_t hq_generic_offset /* i : frequency offset of high frequency spectrum */ -) -{ - int16_t i, k; - float p, a, e; - float p2a; - float avgp2a; - int16_t nband; - - if ( hq_generic_offset == HQ_GENERIC_FOFFSET_24K4 ) - { - nband = 10; - } - else - { - nband = 8; - } - - avgp2a = 0.f; - for ( k = 0; k < nband; k++ ) - { - a = 0.0f; - p = 0.0f; - for ( i = swb_bwe_subband[k] + hq_generic_offset; i < swb_bwe_subband[k + 1] + hq_generic_offset; i++ ) - { - e = coefs[i] * coefs[i]; - - if ( e > p ) - { - p = e; - } - - a += e; - } - - if ( a > 0.0f ) - { - a *= swb_inv_bwe_subband_width[k]; - p2a = 10.0f * (float) log10( p / a ); - avgp2a += p2a; - } - } - - avgp2a /= (float) ( nband ); - - if ( avgp2a > 8.6f ) - { - return HQ_GENERIC_EXC1; - } - else - { - return HQ_GENERIC_EXC0; - } -} - -/*-------------------------------------------------------------------* - * hq_generic_hf_encoding() - * - *-------------------------------------------------------------------*/ - -void hq_generic_hf_encoding( - const float *coefs, /* i : MDCT coefficients of weighted original */ - float *hq_generic_fenv, /* i/o: energy of SWB envelope */ - const int16_t hq_generic_offset, /* i : frequency offset for extracting energy */ - Encoder_State *st, /* i/o: encoder state structure */ - int16_t *hq_generic_exc_clas, /* o : HF excitation class */ - const int16_t length /* i : Length of spectrum */ -) -{ - int16_t n_coeff, n_band; - float energy; - float energy_factor[SWB_FENV], w_env[SWB_FENV]; - int16_t indice[HQ_GENERIC_NVQIDX]; - int16_t nenv; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - nenv = SWB_FENV; - } - else - { - nenv = SWB_FENV - 2; - } - - for ( n_band = 0; n_band < nenv; n_band++ ) - { - energy = EPSILON; - for ( n_coeff = swb_bwe_subband[n_band] + hq_generic_offset; n_coeff < swb_bwe_subband[n_band + 1] + hq_generic_offset; n_coeff++ ) - { - energy += coefs[n_coeff] * coefs[n_coeff]; - } - - hq_generic_fenv[n_band] = energy; - } - - if ( length == L_SPEC48k ) - { - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - energy = EPSILON; - for ( n_coeff = fb_bwe_subband_float[n_band]; n_coeff < fb_bwe_subband_float[n_band + 1]; n_coeff++ ) - { - energy += coefs[n_coeff] * coefs[n_coeff]; - } - - hq_generic_fenv[n_band + nenv] = energy; - } - } - - energy_control( st, HQ_CORE, -1, -1, coefs, hq_generic_offset, energy_factor ); - - if ( st->hHQ_core->hq_generic_speech_class == 1 ) - { - push_indice( hBstr, IND_HQ_SWB_EXC_SP_CLAS, 1, 1 ); - *hq_generic_exc_clas = HQ_GENERIC_SP_EXC; - } - else - { - *hq_generic_exc_clas = decision_hq_generic_class( coefs, hq_generic_offset ); - push_indice( hBstr, IND_HQ_SWB_EXC_SP_CLAS, 0, 1 ); - push_indice( hBstr, IND_HQ_SWB_EXC_CLAS, *hq_generic_exc_clas, 1 ); - } - - for ( n_band = 0; n_band < nenv; n_band++ ) - { - hq_generic_fenv[n_band] *= energy_factor[n_band]; - hq_generic_fenv[n_band] = 10.0f * (float) log10( hq_generic_fenv[n_band] * swb_inv_bwe_subband_width[n_band] ); - } - - if ( length == L_SPEC48k ) - { - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - hq_generic_fenv[n_band + nenv] = 10.0f * (float) log10( hq_generic_fenv[n_band + nenv] * fb_inv_bwe_subband_width[n_band] ); - } - } - - freq_weights( hq_generic_fenv, w_NOR, w_env, nenv ); - - for ( n_band = 0; n_band < nenv; n_band++ ) - { - hq_generic_fenv[n_band] -= Mean_env[n_band]; - } - - if ( length == L_SPEC48k ) - { - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - hq_generic_fenv[n_band + nenv] -= Mean_env_fb[n_band]; - } - } - - /* Energy VQ */ - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - msvq_interpol( hq_generic_fenv, w_env, indice ); - } - else - { - msvq_interpol_2( hq_generic_fenv, w_env, indice, nenv ); - } - - if ( length == L_SPEC48k ) - { - indice[5] = vqSimple_w( hq_generic_fenv + nenv, hq_generic_fenv + nenv, EnvCdbkFB, NULL, DIM_FB, N_CB_FB, 0 ); - } - - push_indice( hBstr, IND_SWB_FENV_HQ, indice[0], 5 ); - push_indice( hBstr, IND_SWB_FENV_HQ, indice[1], 7 ); - push_indice( hBstr, IND_SWB_FENV_HQ, indice[2], 6 ); - push_indice( hBstr, IND_SWB_FENV_HQ, indice[3], 5 ); - - if ( hq_generic_offset <= HQ_GENERIC_FOFFSET_24K4 ) - { - push_indice( hBstr, IND_SWB_FENV_HQ, indice[4], 6 ); - } - else - { - push_indice( hBstr, IND_SWB_FENV_HQ, indice[4], 5 ); - } - - if ( length == L_SPEC48k ) - { - push_indice( hBstr, IND_FB_FENV_HQ, indice[5], 5 ); - } - - for ( n_band = 0; n_band < nenv; n_band++ ) - { - Word16 tmp, frac, exp; - Word32 L_tmp; -#ifdef BASOP_NOGLOB - Flag Overflow; - - Overflow = 0; -#endif - tmp = add( (int16_t) ( hq_generic_fenv[n_band] * 256 ), (int16_t) ( Mean_env[n_band] * 256 ) ); /*Q8 */ - - L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q26 */ - L_tmp = L_shr( L_tmp, 10 ); /* From Q26 to Q16 */ - frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - - tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ - /* output of Pow2() will be: */ - /* 16384 < Pow2() <= 32767 */ - exp = sub( exp, 13 ); -#ifdef BASOP_NOGLOB - tmp = shl_o( tmp, add( exp, 1 ), &Overflow ); /*Q1 */ -#else - tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ -#endif - hq_generic_fenv[n_band] = (float) tmp * 0.5f; /*Q1 */ - } - - if ( length == L_SPEC48k ) - { - for ( n_band = 0; n_band < DIM_FB; n_band++ ) - { - Word16 tmp, frac, exp; - Word32 L_tmp; - - tmp = add( (int16_t) ( hq_generic_fenv[n_band + nenv] * 128 ), (int16_t) ( Mean_env_fb[n_band] * 128 ) ); /*Q7 */ - L_tmp = L_mult( tmp, 21771 ); /* 0.166096 in Q17 -> Q25 */ - L_tmp = L_shr( L_tmp, 9 ); /* From Q25 to Q16 */ - frac = L_Extract_lc( L_tmp, &exp ); /* Extract exponent of L_tmp */ - - tmp = extract_l( Pow2( 13, frac ) ); /* Put 13 as exponent so that */ - /* output of Pow2() will be: */ - /* 16384 < Pow2() <= 32767 */ - exp = sub( exp, 13 ); - tmp = shl( tmp, add( exp, 1 ) ); /*Q1 */ - hq_generic_fenv[add( n_band, nenv )] = (float) tmp * 0.5f; - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * fd_bwe_enc_init() * * Initialize FD BWE state structure at the encoder *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void fd_bwe_enc_init( - FD_BWE_ENC_HANDLE hBWE_FD /* i/o: FD BWE data handle */ -) -{ - set_f( hBWE_FD->new_input_hp, 0, NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS - DELAY_CLDFB_NS ) ); - set_f( hBWE_FD->old_input, 0, NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) ); -#ifndef IVAS_FLOAT_FIXED - set_f( hBWE_FD->old_input_wb, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ) ); - set_f( hBWE_FD->old_syn_12k8_16k, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); -#else - set16_fx( hBWE_FD->old_syn_12k8_16k_fx, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - set16_fx( hBWE_FD->old_input_wb_fx, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ) ); -#endif - set_f( hBWE_FD->old_input_lp, 0, NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ) ); - -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS // required for float to fix conversions - set_f( hBWE_FD->old_input_lp, 0, NS2SA( 16000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_NS ) ); -#endif - - - hBWE_FD->prev_mode = NORMAL; - set_f( hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); - hBWE_FD->prev_L_swb_norm1 = 8; -#ifndef IVAS_FLOAT_FIXED - hBWE_FD->prev_global_gain = 0.0f; -#else - hBWE_FD->prev_global_gain_fx = 0; -#endif - hBWE_FD->modeCount = 0; -#ifndef IVAS_FLOAT_FIXED - hBWE_FD->EnergyLF = 0.0f; - hBWE_FD->mem_old_wtda_swb = 0.0f; -#else - hBWE_FD->EnergyLF_fx = 0; - hBWE_FD->mem_old_wtda_swb_fx = 0; -#endif - -#ifndef IVAS_FLOAT_FIXED - set_f( hBWE_FD->old_fdbwe_speech, 0.0f, L_FRAME48k ); - hBWE_FD->mem_deemph_old_syn = 0.0f; -#else - set16_fx( hBWE_FD->old_fdbwe_speech_fx, 0, L_FRAME48k ); - hBWE_FD->mem_deemph_old_syn_fx = 0; - move16(); - hBWE_FD->q_mem_deemph_old_syn = 0; - move16(); -#endif - - return; -} -#endif diff --git a/lib_enc/swb_bwe_enc_fx.c b/lib_enc/swb_bwe_enc_fx.c index 2b6ff9c34..ef16b333c 100644 --- a/lib_enc/swb_bwe_enc_fx.c +++ b/lib_enc/swb_bwe_enc_fx.c @@ -4,9 +4,7 @@ #include #include "options.h" -#ifdef IVAS_FLOAT_FIXED #include "prot.h" -#endif #include "cnst.h" #include "rom_com_fx.h" #include "rom_com.h" @@ -2157,7 +2155,6 @@ static void calculate_Tonality_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * calculate_Tonality_ivas_fx() * @@ -2294,7 +2291,7 @@ static void calculate_Tonality_ivas_fx( #ifdef BASOP_NOGLOB *SFM_org = round_fx_o( L_shl_o( L_tmp, 14, &Overflow ), &Overflow ); /*Q12 */ #else - *SFM_org = round_fx( L_shl( L_tmp, 14 ) ); /*Q12 */ + *SFM_org = round_fx( L_shl( L_tmp, 14 ) ); /*Q12 */ #endif move16(); *SFM_org = s_max( 0, s_min( *SFM_org, 24547 ) ); @@ -2319,7 +2316,7 @@ static void calculate_Tonality_ivas_fx( #ifdef BASOP_NOGLOB *SFM_gen = round_fx_o( L_shl_o( L_tmp, 14, &Overflow ), &Overflow ); /*Q12 */ #else - *SFM_gen = round_fx( L_shl( L_tmp, 14 ) ); /*Q12 */ + *SFM_gen = round_fx( L_shl( L_tmp, 14 ) ); /*Q12 */ #endif move16(); *SFM_gen = s_max( 0, s_min( *SFM_gen, 24547 ) ); @@ -2327,7 +2324,6 @@ static void calculate_Tonality_ivas_fx( return; } -#endif /*-------------------------------------------------------------------* * energy_control_fx() @@ -4327,7 +4323,6 @@ void fd_bwe_enc_init_fx( return; } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * hq_generic_encoding_fx() * @@ -4560,4 +4555,3 @@ void hq_generic_hf_encoding_fx( return; } -#endif diff --git a/lib_enc/swb_bwe_enc_hr.c b/lib_enc/swb_bwe_enc_hr.c index 6b7748eef..8e752f0ac 100644 --- a/lib_enc/swb_bwe_enc_hr.c +++ b/lib_enc/swb_bwe_enc_hr.c @@ -40,468 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * en_band_quant() - * - * Quantize the band envelop - *-------------------------------------------------------------------*/ - -/*! r: quantization index */ -static int16_t en_band_quant( - float *en_band, /* i/o: (un)quantized envelope value */ - const float *env_code, /* i : envelope codebook */ - const int16_t N /* i : codebook dimension */ -) -{ - float maxerr, err; - int16_t i, j, ind; - - maxerr = FLT_MAX; - ind = 0; - - for ( i = 0; i < N; i++ ) - { - err = FLT_MIN; - for ( j = 0; j < 2; j++ ) - { - err += ( en_band[j] - env_code[i * 2 + j] ) * ( en_band[j] - env_code[i * 2 + j] ); - } - if ( err < maxerr ) - { - maxerr = err; - ind = i; - } - } - - en_band[0] = env_code[2 * ind]; - en_band[1] = env_code[2 * ind + 1]; - - return ( ind ); -} - -/*-------------------------------------------------------------------* - * swb_bwe_enc_hr() - * - * HR SWB BWE encoder - *-------------------------------------------------------------------*/ - -void swb_bwe_enc_hr( - Encoder_State *st, /* i/o: encoder state structure */ - const float *new_input, /* i : input signal */ - const int16_t input_frame, /* i : frame length */ - const int16_t unbits /* i : number of core unused bits */ -) -{ - int16_t i, j, k, nBits, nBits_total, nBits_block, Nsv, Nsv2, width_noncoded; - int16_t is_transient, pos; - int16_t x_norm[NSV_MAX * ( WIDTH_BAND + 1 )], x_norm1[NSV_MAX * ( WIDTH_BAND + 1 )]; - float t_audio[L_FRAME48k], t_audio_tmp[L_FRAME48k]; - float gain, gain2, en_band[N_BANDS_BWE_HR]; - int16_t ind1, ind2; - int16_t nq[NSV_MAX], nq2[NSV_MAX]; - float tmpF, min_env; - float en_noncoded; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - /*---------------------------------------------------------------------* - * initializations - *---------------------------------------------------------------------*/ - - ind2 = 0; /* only to suppress warnings */ - Nsv2 = 0; /* only to suppress warnings */ - gain2 = 0; /* only to suppress warnings */ - en_noncoded = 0; /* only to suppress warnings */ - - /* reset memories in case that last frame was a different technology */ - if ( st->last_core == HQ_CORE || st->last_extl != st->extl ) - { - set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME48k ); - } - - /* calculate SWB BWE bit-budget (extension layer bitrate + AVQ unused bits from the core layer) */ - nBits = (int16_t) ( st->extl_brate ) / FRAMES_PER_SEC + unbits; - nBits_total = nBits; - - - /*---------------------------------------------------------------------* - * detect transient frames - *---------------------------------------------------------------------*/ - - is_transient = detect_transient( st, new_input, input_frame ); - push_indice( hBstr, IND_HR_IS_TRANSIENT, is_transient, 1 ); - - /*---------------------------------------------------------------------* - * OLA and MDCT - *---------------------------------------------------------------------*/ - - wtda( new_input, t_audio_tmp, st->hBWE_FD->old_wtda_swb, ALDO_WINDOW, ALDO_WINDOW, input_frame ); - - direct_transform( t_audio_tmp, t_audio, is_transient, input_frame, st->element_mode ); - - if ( is_transient ) - { - nBits = -1; /* is_transient flag */ - nBits_block = nBits_total / NUM_TIME_SWITCHING_BLOCKS; - nBits += nBits_total % NUM_TIME_SWITCHING_BLOCKS; - - /* set width of noncoded (blind estimated) spectrum */ - if ( st->extl == SWB_BWE_HIGHRATE ) - { - width_noncoded = L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - width_noncoded = ( 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC ) / NUM_TIME_SWITCHING_BLOCKS - NUM_TRANS_END_FREQ_COEF; - } - - /*---------------------------------------------------------------------* - * transient frames: processing in blocks (subframes) - *---------------------------------------------------------------------*/ - - for ( k = 0; k < NUM_TIME_SWITCHING_BLOCKS; k++ ) - { - nBits += nBits_block; - - /* compute energy of noncoded (14.4-20kHz) spectrum */ - if ( st->extl == FB_BWE_HIGHRATE ) - { - en_noncoded = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_END_FREQ_COEF, width_noncoded ) + 0.001f; - en_noncoded = (float) sqrt( en_noncoded / width_noncoded ); - } - - /* keep only frequencies in interest */ - set_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS, 0, NUM_TRANS_START_FREQ_COEF ); - set_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + L_FRAME32k / NUM_TIME_SWITCHING_BLOCKS, 0, ( input_frame - L_FRAME32k ) / NUM_TIME_SWITCHING_BLOCKS ); - - /*---------------------------------------------------------------------* - * global gain coding - *---------------------------------------------------------------------*/ - - /* compute and quantize global energy */ - gain = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF, WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR ) + 0.001f; - gain = (float) sqrt( gain ) / ( WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR ); - ind1 = gain_quant( &gain, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - - push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); - nBits -= NBITS_GLOB_GAIN_BWE_HR; - - /* normalization with global gain */ - tmpF = 1 / gain; - for ( i = 0; i < WIDTH_TRANS_FREQ_COEF * N_BANDS_TRANS_BWE_HR; i++ ) - { - t_audio[NUM_TRANS_START_FREQ_COEF + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + i] *= tmpF; - } - - /*---------------------------------------------------------------------* - * envelope coding - *---------------------------------------------------------------------*/ - - /* compute energy per band */ - for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) - { - en_band[i] = sum2_f( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF, WIDTH_TRANS_FREQ_COEF ) + 0.001f; - en_band[i] = (float) sqrt( en_band[i] / ( WIDTH_TRANS_FREQ_COEF ) ); - } - - /* Q energy per band */ - if ( k == 0 ) - { - ind1 = en_band_quant( en_band, swb_hr_env_code3, NUM_ENVLOPE_CODE_HR_TR ); - push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR_TR ); - nBits -= NBITS_ENVELOPE_BWE_HR_TR; - ind2 = ind1; - } - else - { - if ( ind2 < NUM_ENVLOPE_CODE_HR_TR2 ) - { - ind1 = en_band_quant( en_band, swb_hr_env_code3, NUM_ENVLOPE_CODE_HR_TR2 ); - } - else - { - ind1 = en_band_quant( en_band, swb_hr_env_code3 + ( NUM_ENVLOPE_CODE_HR_TR2 * 2 ), NUM_ENVLOPE_CODE_HR_TR2 ); - } - - push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR_TR - 1 ); - nBits -= ( NBITS_ENVELOPE_BWE_HR_TR - 1 ); - } - - /* normalize spectrum per bands */ - for ( i = 0; i < N_BANDS_TRANS_BWE_HR; i++ ) - { - tmpF = 1 / en_band[i]; - for ( j = 0; j < WIDTH_TRANS_FREQ_COEF; j++ ) - { - t_audio[k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF + i * WIDTH_TRANS_FREQ_COEF + j] *= tmpF; - } - } - - /*---------------------------------------------------------------------* - * estimate energy of noncoded spectrum (14.4-20kHz) - *---------------------------------------------------------------------*/ - - if ( st->extl == SWB_BWE_HIGHRATE ) - { - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - en_noncoded /= ( gain * en_band[N_BANDS_TRANS_BWE_HR - 1] ); - - ind1 = 0; - if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT1 ) - { - ind1 = 1; - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT1; - } - else if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT2 ) - { - ind1 = 2; - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT2; - } - else if ( en_noncoded < BWE_HR_TRANS_EN_LIMIT3 ) - { - ind1 = 3; - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1] * BWE_HR_TRANS_EN_LIMIT3; - } - else - { - en_noncoded = en_band[N_BANDS_TRANS_BWE_HR - 1]; - } - push_indice( hBstr, IND_HR_HF_GAIN, ind1, NBITS_HF_GAIN_BWE_HR ); - nBits -= NBITS_HF_GAIN_BWE_HR; - } - - /*---------------------------------------------------------------------* - * AVQ coding (quantize normalized spectrum) - *---------------------------------------------------------------------*/ - - Nsv = ( NUM_TRANS_END_FREQ_COEF - NUM_TRANS_START_FREQ_COEF ) / WIDTH_BAND; - AVQ_cod( t_audio + k * input_frame / NUM_TIME_SWITCHING_BLOCKS + NUM_TRANS_START_FREQ_COEF, x_norm, nBits, Nsv ); - AVQ_encmux( hBstr, st->extl, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); - } - } - else /* !is_transient */ - { - nBits--; /* is_transient flag */ - - /*---------------------------------------------------------------------* - * processing of normal (non-transient) frames - *---------------------------------------------------------------------*/ - - /* set width of noncoded (blind estimated) spectrum */ - if ( st->extl == SWB_BWE_HIGHRATE ) - { - width_noncoded = L_FRAME32k - NUM_NONTRANS_END_FREQ_COEF; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - width_noncoded = 2 * END_FREQ_BWE_FULL_FB / FRAMES_PER_SEC - NUM_NONTRANS_END_FREQ_COEF; - } - - /* compute energy of noncoded (14.4-20kHz) spectrum */ - if ( st->extl == FB_BWE_HIGHRATE ) - { - en_noncoded = sum2_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, width_noncoded ) + 0.001f; - en_noncoded = (float) sqrt( en_noncoded / width_noncoded ); - } - - /* keep only frequencies in interest */ - set_f( t_audio, 0, NUM_NONTRANS_START_FREQ_COEF ); - set_f( t_audio + NUM_NONTRANS_END_FREQ_COEF, 0, input_frame - NUM_NONTRANS_END_FREQ_COEF ); - - /*---------------------------------------------------------------------* - * global gain coding - *---------------------------------------------------------------------*/ - - /* compute and quantize global gain */ - gain = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF, WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR ) + 0.001f; - gain = (float) sqrt( gain ) / ( WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR ); - ind1 = gain_quant( &gain, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - - push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); - nBits -= NBITS_GLOB_GAIN_BWE_HR; - - /* normalization with global gain */ - tmpF = 1 / gain; - for ( i = 0; i < WIDTH_NONTRANS_FREQ_COEF * N_BANDS_BWE_HR; i++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i] *= tmpF; - } - - /*---------------------------------------------------------------------* - * envelope coding - *---------------------------------------------------------------------*/ - - /* compute energy per band */ - for ( i = 0; i < N_BANDS_BWE_HR; i++ ) - { - en_band[i] = sum2_f( t_audio + NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF, WIDTH_NONTRANS_FREQ_COEF ) + 0.001f; - en_band[i] = (float) sqrt( en_band[i] / WIDTH_NONTRANS_FREQ_COEF ); - } - - /* Q energy per band */ - ind1 = en_band_quant( en_band, swb_hr_env_code1, NUM_ENVLOPE_CODE_HR1 ); - ind2 = en_band_quant( en_band + 2, swb_hr_env_code2, NUM_ENVLOPE_CODE_HR2 ); - - push_indice( hBstr, IND_HR_ENVELOPE, ind1, NBITS_ENVELOPE_BWE_HR1 ); - push_indice( hBstr, IND_HR_ENVELOPE, ind2, NBITS_ENVELOPE_BWE_HR2 ); - - nBits -= NBITS_ENVELOPE_BWE_HR1 + NBITS_ENVELOPE_BWE_HR2; - - /* normalize spectrum per bands */ - for ( i = 0; i < N_BANDS_BWE_HR; i++ ) - { - tmpF = 1 / en_band[i]; - for ( j = 0; j < WIDTH_NONTRANS_FREQ_COEF; j++ ) - { - t_audio[NUM_NONTRANS_START_FREQ_COEF + i * WIDTH_NONTRANS_FREQ_COEF + j] *= tmpF; - } - } - - /*---------------------------------------------------------------------* - * choose sub-bands to be quantized - *---------------------------------------------------------------------*/ - - /* find the subband with the min envelope */ - pos = minimum( en_band, N_BANDS_BWE_HR, &min_env ); - - /* decide the spectrum to be quantized */ - if ( nBits_total > NBITS_THRESH_BWE_HR ) - { - i = NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF; - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, t_audio_tmp, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF ); - } - else - { - /* reorder the spectrum */ - ind1 = ( pos * 64 + pos / 2 * WIDTH_BAND ); - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF, t_audio_tmp, ind1 ); - - ind2 = ( ( pos + 1 ) * 64 + ( pos + 1 ) / 2 * WIDTH_BAND ); - mvr2r( t_audio + NUM_NONTRANS_START_FREQ_COEF + ind2, t_audio_tmp + ind1, NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2 ); - - i = ind1 + NUM_NONTRANS_END_FREQ_COEF - NUM_NONTRANS_START_FREQ_COEF - ind2; - } - - /*---------------------------------------------------------------------* - * estimate energy of noncoded spectrum (14.4-20kHz) - *---------------------------------------------------------------------*/ - - if ( st->extl == SWB_BWE_HIGHRATE ) - { - en_noncoded = 0.5f * min_env; - } - else /* st->extl == FB_BWE_HIGHRATE */ - { - en_noncoded /= ( gain * min_env ); - - ind1 = 0; - if ( en_noncoded < BWE_HR_NONTRANS_EN_LIMIT1 ) - { - ind1 = 1; - en_noncoded = 0.5f * min_env * BWE_HR_NONTRANS_EN_LIMIT1; - } - else if ( en_noncoded > BWE_HR_NONTRANS_EN_LIMIT2 ) - { - ind1 = 2; - en_noncoded = min_env * BWE_HR_NONTRANS_EN_LIMIT2; - } - else if ( en_noncoded > BWE_HR_NONTRANS_EN_LIMIT3 ) - { - ind1 = 3; - en_noncoded = min_env * BWE_HR_NONTRANS_EN_LIMIT3; - } - else - { - en_noncoded = 0.5f * min_env; - } - - push_indice( hBstr, IND_HR_HF_GAIN, ind1, NBITS_HF_GAIN_BWE_HR ); - nBits -= NBITS_HF_GAIN_BWE_HR; - } - - /*---------------------------------------------------------------------* - * AVQ coding (quantize normalized spectrum) - *---------------------------------------------------------------------*/ - - Nsv = i / WIDTH_BAND; - AVQ_cod( t_audio_tmp, x_norm, nBits, Nsv ); - AVQ_encmux( hBstr, st->extl, x_norm, &nBits, Nsv, nq, 0, Nsv - 1 ); - /*---------------------------------------------------------------------* - * second stage coding - *---------------------------------------------------------------------*/ - - if ( nBits >= 9 + NBITS_GLOB_GAIN_BWE_HR && sum_s( nq, Nsv ) > 0 ) - { - /* select spectrum of the second stage coding */ - k = 0; - for ( i = 0; i < Nsv; i++ ) - { - if ( nq[i] == 0 ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio[k++] = t_audio_tmp[i * WIDTH_BAND + j]; - } - } - } - - for ( i = 0; i < Nsv; i++ ) - { - if ( nq[i] != 0 ) - { - for ( j = 0; j < WIDTH_BAND; j++ ) - { - t_audio[k++] = t_audio_tmp[i * WIDTH_BAND + j] - x_norm[i * WIDTH_BAND + j]; - } - } - } - - /* calculate the number of subbands according to the rest bits */ - if ( nBits > 396 ) - { - Nsv2 = 33; - } - else - { - Nsv2 = nBits / 12; - } - - /* second stage global gain estimation and coding */ - gain2 = sum2_f( t_audio, Nsv2 * WIDTH_BAND ) + 0.001f; - gain2 = (float) ( 16 * sqrt( gain2 / ( Nsv2 * WIDTH_BAND ) ) ); - ind1 = gain_quant( &gain2, MIN_GLOB_GAIN_BWE_HR, MAX_GLOB_GAIN_BWE_HR, NBITS_GLOB_GAIN_BWE_HR ); - - push_indice( hBstr, IND_HR_GAIN, ind1, NBITS_GLOB_GAIN_BWE_HR ); - nBits -= NBITS_GLOB_GAIN_BWE_HR; - - /* normalize with global gain */ - gain2 *= 0.0625f; /* 1/16 */ - tmpF = 1 / gain2; - for ( i = 0; i < Nsv2 * WIDTH_BAND; i++ ) - { - t_audio[i] *= tmpF; - } - - set_s( nq2, 0, Nsv ); - - AVQ_cod( t_audio, x_norm1, nBits, Nsv2 ); - AVQ_encmux( hBstr, st->extl, x_norm1, &nBits, Nsv2, nq2, 0, Nsv2 - 1 ); - } - } - - /* write unused bits */ - while ( nBits > 0 ) - { - i = min( nBits, 16 ); - push_indice( hBstr, IND_UNUSED, 0, i ); - nBits -= i; - } - - - return; -} -#endif diff --git a/lib_enc/swb_bwe_enc_lr.c b/lib_enc/swb_bwe_enc_lr.c index 6ee7ea75a..5bd24db09 100644 --- a/lib_enc/swb_bwe_enc_lr.c +++ b/lib_enc/swb_bwe_enc_lr.c @@ -42,659 +42,3 @@ #include "rom_com.h" #include "stat_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*--------------------------------------------------------------------------* - * GetSubbandCorrIndex2_har() - * - * Finds the index of best correlation between highband (*inBuf) and lowband (*predBuf) for current subband of length (fLen) - *--------------------------------------------------------------------------*/ - -/*! r: best correlation index */ -static int16_t GetSubbandCorrIndex2_har( - const float *inBuf, /* i : target buffer (i.e., highband signal) */ - const float *predBuf, /* i : prediction buffer (i.e., lowband) */ - const int16_t fLen, /* i : window length */ - const int16_t maxLag, /* i : search length */ - const GainItem *G_item, /* i : nZero nonzero components (value+index) */ - const int16_t nZero, /* i : number of nonzero components used in */ - int16_t *prev_frame_bstindx /* i : previous frame best Indices */ -) -{ - int16_t bestIdx, i, j; - float corr, energy, corr_sq; - float lagCorr_sq, lagEnergy, eOld; - int16_t N1, N2; - - - bestIdx = 0; - lagCorr_sq = 0.0f; - lagEnergy = 1e30f; - - for ( i = 0, energy = 0.0f; i < fLen - 1; i++, predBuf++ ) - { - energy += *predBuf * *predBuf; - } - - predBuf -= fLen - 1; - eOld = 0.0f; - N1 = max( 0, *prev_frame_bstindx - maxLag / 2 ); - if ( *prev_frame_bstindx < 0 ) - { - N2 = maxLag - 1; - } - else - { - N2 = min( maxLag - 1, *prev_frame_bstindx + maxLag / 2 ); - } - - predBuf += N1; - - /* find the best lag */ - for ( i = N1; i <= N2; i++ ) - { - corr = 0.0f; - - /* get the energy, remove the old and update with the new energy index */ - for ( j = 0, energy = 0.0f; j < fLen; j++, predBuf++ ) - { - energy += *predBuf * *predBuf; - } - - predBuf -= fLen; - - /* energy to be removed in the next lag */ - eOld = *predBuf; - eOld *= eOld; - - /* get cross-correlation */ - if ( energy ) - { - for ( j = 0, corr = 0.0f; j < nZero; j++ ) - { - corr += inBuf[G_item[j].gainIndex] * predBuf[G_item[j].gainIndex]; - } - - corr_sq = corr * corr; - - if ( (double) lagCorr_sq * (double) energy < (double) corr_sq * (double) lagEnergy ) - { - bestIdx = i; - lagCorr_sq = corr_sq; - lagEnergy = energy; - } - } - - predBuf++; - } - - if ( lagCorr_sq == 0.0f && *prev_frame_bstindx < 0 ) - { - bestIdx = 0; - } - else - { - if ( lagCorr_sq == 0.0f ) - { - bestIdx = *prev_frame_bstindx; - } - } - - *prev_frame_bstindx = bestIdx; - - return bestIdx; -} - - -/*--------------------------------------------------------------------------* - * getswbindices_har() - * - * Finds the pulse index of best correlation between highband (*yos) and lowband (*y2) for two groups of length sbLen - *--------------------------------------------------------------------------*/ - -static void getswbindices_har( - float *yos, /* i : original input spectrum */ - float *y2, /* i : decoded spectrum */ - const int16_t nBands_search, /* i : number of bands */ - int16_t *lagIndices, /* o : pulse index */ - int16_t *prev_frame_bstindx, /* i/o: prev frame index */ - const int16_t swb_lowband, /* i : length of the LF spectrum */ - const int16_t *subband_offsets, - const int16_t *sbWidth, - const int16_t *subband_search_offset - -) -{ - GainItem Nbiggest[(NB_SWB_SUBBANDS_HAR_SEARCH_SB) *N_NBIGGEST_PULSEARCH]; - const float *refBuf, *predBuf; - int16_t search_offset[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; - int16_t nlags[NB_SWB_SUBBANDS_HAR_SEARCH_SB]; - int16_t j, k, sb; - int16_t n_nbiggestsearch[NB_SWB_SUBBANDS_HAR]; - float low_freqsgnl[L_FRAME32k]; - - /* Initializations */ - predBuf = y2; - - /* Get the number of HF groups for performing Similarity search */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - nlags[sb] = (int16_t) pow( 2, bits_lagIndices_mode0_Har[sb] ); - } - - for ( sb = 0; sb < nBands_search; sb++ ) - { - j = sb * N_NBIGGEST_PULSEARCH; - refBuf = yos + swb_lowband + subband_offsets[sb]; - - /* Find NBiggest samples in HF Groups */ - FindNBiggest2_simple( refBuf, Nbiggest + j, sbWidth[sb], &n_nbiggestsearch[sb], N_NBIGGEST_PULSEARCH ); - search_offset[sb] = subband_search_offset[sb]; - } - - /* Similarity Search for the HF spectrum */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - k = 0; - if ( sb == 0 ) - { - /* copy SSmoothed LF Spectrum */ - mvr2r( predBuf + search_offset[sb] - nlags[sb] / 2, low_freqsgnl, sbWidth[sb] + nlags[sb] ); - } - else - { - /* copy SSmoothed LF Spectrum */ - for ( j = search_offset[sb] + nlags[sb] / 2; j > search_offset[sb] - sbWidth[sb] - nlags[sb] / 2; j-- ) - { - low_freqsgnl[k] = predBuf[j]; - k++; - } - } - /* correlation b/w HF spectrum Group1 of length sbLen and decoded LF spectrum */ - lagIndices[sb] = GetSubbandCorrIndex2_har( yos + swb_lowband + subband_offsets[sb], low_freqsgnl, sbWidth[sb], nlags[sb], Nbiggest + ( sb * N_NBIGGEST_PULSEARCH ), n_nbiggestsearch[sb], &prev_frame_bstindx[sb] ); - } - - return; -} - -static int16_t GetSubbandCorrIndex2_pulsestep( - const float *inBuf, - const float *predBuf, - const float *predBufMa, - const int16_t fLen, - const int16_t maxLag, - const GainItem *G_item, - const int16_t nZero, - int16_t ssearch_buflim, - const float *predBuf_ni ) -{ - int16_t bestIdx, i, j; - float corr, energy, corr_sq; - float lagCorr_sq, lagEnergy; - int16_t absPos; - int16_t ib_flag = 0; - - - absPos = 0; - bestIdx = -1; - lagCorr_sq = 0.0f; - lagEnergy = 1e30f; - - /* Get the initial energy for zero lag */ - while ( *predBuf == 0.0f && absPos < ssearch_buflim ) - { - predBuf++; - absPos++; - predBuf_ni++; - } - - if ( absPos == ssearch_buflim ) - { - predBuf--; - absPos--; - predBuf_ni--; - } - for ( i = 0, energy = 0.0f; i < fLen; i++, predBuf_ni++ ) - { - energy += *predBuf_ni * *predBuf_ni; - } - - predBuf_ni -= fLen; - lagEnergy = energy; - - /* Find the best lag */ - for ( i = 0; i < maxLag; i++ ) - { - corr = 0.0f; - - /* Get the energy, remove the old and update with the new energy index */ - for ( j = 0, energy = 0.0f; j < fLen; j++, predBuf_ni++ ) - { - energy += *predBuf_ni * *predBuf_ni; - } - predBuf_ni -= fLen; - - /* Get cross-correlation */ - if ( energy ) - { - for ( j = 0, corr = 0.0f; j < nZero; j++ ) - { - corr += inBuf[G_item[j].gainIndex] * predBufMa[G_item[j].gainIndex]; - } - - corr_sq = corr * corr; - - if ( ( lagCorr_sq == 0.0f && corr_sq == 0.0f ) || (double) lagCorr_sq * (double) energy < (double) corr_sq * (double) lagEnergy ) - { - bestIdx = i; - lagCorr_sq = corr_sq; - lagEnergy = energy; - } - } - - predBuf++; - absPos++; - predBuf_ni++; - while ( *predBuf == 0.0f && absPos < ssearch_buflim ) - { - predBuf++; - absPos++; - predBuf_ni++; - } - - if ( absPos >= ssearch_buflim ) - { - if ( bestIdx == -1 ) - { - ib_flag = 1; - } - - break; - } - } - if ( ib_flag ) - { - bestIdx = 0; - } - return bestIdx; -} - - -/*--------------------------------------------------------------------------* - * GetSWBIndices() - * - * Finds the subband lags for subband coding. Each lag corresponds to - * the section that is copied and scaled from the low-frequency band - * to form the high-frequency subband. - * - * The subbands are searched in two steps to reduce the complexity of - * the search relative to full search. In first step, a most representative - * subband is selected based on the similarity of the subbands.Full search - * is performed for the selected subband.Based on the lagIndice value for - * this subband, the region of highest interest is selected. A partial - * search is performed for rest of the subbands around this region of the - * low-frequency range. - *--------------------------------------------------------------------------*/ - -static void GetSWBIndices( - const float *predBuf, /* i : low-frequency band */ - const float *targetBuf, /* i : high-frequency band */ - const int16_t nBands_search, /* i : number of search subbands */ - const int16_t *sbWidth, /* i : subband lengths */ - int16_t *lagIndices, /* o : selected lags for subband coding */ - const int16_t predBufLen, /* i : low-frequency band length */ - GainItem *Nbiggest, /* o : most representative region */ - const int16_t *subband_offsets, /* o : N biggest components */ - float *predBuf_ni /* i : low-frequency band filled noise */ -) -{ - const float *refBuf; - int16_t search_offset[NB_SWB_SUBBANDS]; - int16_t nlags[NB_SWB_SUBBANDS]; - int16_t sbLen; - int16_t j, sb; - int16_t n_nbiggestsearch[NB_SWB_SUBBANDS]; - int16_t ssearch_buflim; - float sspectra_ma[L_FRAME32k]; - - /* Initializations */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - j = sb * N_NBIGGEST_PULSEARCH; - sbLen = sbWidth[sb]; - refBuf = targetBuf + subband_offsets[sb]; - FindNBiggest2_simple( refBuf, Nbiggest + j, sbLen, &n_nbiggestsearch[sb], N_NBIGGEST_PULSEARCH ); - } - - /* Selection of most representative subband (full search) */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - nlags[sb] = (int16_t) pow( 2, bits_lagIndices_modeNormal[sb] ); - } - - for ( sb = 0; sb < nBands_search; sb++ ) - { - search_offset[sb] = subband_search_offsets[sb]; - } - sspectra_ma[0] = ( predBuf_ni[0] + predBuf_ni[1] ) / 2.0f; - - for ( sb = 1; sb < predBufLen - 1; sb++ ) - { - sspectra_ma[sb] = ( predBuf_ni[sb - 1] + predBuf_ni[sb] + predBuf_ni[sb + 1] ) / 3.0f; - } - - sspectra_ma[sb] = ( predBuf_ni[sb - 1] + predBuf_ni[sb] ) / 2.0f; - /* Partial search for rest of subbands except the last which is fixed */ - for ( sb = 0; sb < nBands_search; sb++ ) - { - sbLen = sbWidth[sb]; - ssearch_buflim = predBufLen - ( sbLen + search_offset[sb] ); - lagIndices[sb] = GetSubbandCorrIndex2_pulsestep( targetBuf + subband_offsets[sb], predBuf + search_offset[sb], sspectra_ma + search_offset[sb], sbLen, nlags[sb], Nbiggest + ( sb * N_NBIGGEST_PULSEARCH ), n_nbiggestsearch[sb], ssearch_buflim, predBuf_ni + search_offset[sb] ); - } - - return; -} - - -static void gethar_noisegn( - BSTR_ENC_HANDLE hBstr, /* i/o: bitstream handle */ - float spectra[], - float noise_flr[], - float xSynth_har[], - const int16_t sbWidth[], - const int16_t lagIndices[], - const int16_t bands, - const int16_t har_bands, - const int16_t fLenLow, - const int16_t fLenHigh, - const int16_t subband_offsets[], - const int16_t subband_search_offset[], - int16_t band_start[], - int16_t band_end[], - int16_t band_width[], - float band_energy[], - float be_tonal[], - float *sspectra, - const int16_t har_freq_est2, - const int16_t pos_max_hfe2, - int16_t *pul_res, - GainItem pk_sf[] ) -{ - GainItem get_pk[N_NBIGGEST_SEARCH_LRG_B]; - int16_t n_nbiggestsearch, imin, gqlevs; - int16_t i; - float hfspec[L_FRAME32k]; - float g, g1, g2, dmin, d; - - /*Generate HF noise*/ - genhf_noise( noise_flr, xSynth_har, sspectra, bands, har_bands, har_freq_est2, pos_max_hfe2, pul_res, pk_sf, fLenLow, fLenHigh, sbWidth, lagIndices, subband_offsets, subband_search_offset ); - - mvr2r( spectra + fLenLow, hfspec, fLenHigh ); - FindNBiggest2_simple( hfspec, get_pk, fLenHigh, &n_nbiggestsearch, N_NBIGGEST_SEARCH_LRG_B ); - for ( i = 0; i < n_nbiggestsearch; i++ ) - { - hfspec[get_pk[i].gainIndex] = 0.0f; - } - - g1 = sum2_f( hfspec, fLenHigh ); - g2 = sum2_f( xSynth_har, fLenHigh ); - imin = 0; - if ( g1 != 0.0 && g2 != 0.0 ) - { - g = (float) log10( sqrt( g1 / g2 ) ); - gqlevs = 4; - dmin = FLT_MAX; - imin = 0; - - for ( i = 0; i < gqlevs; i++ ) - { - d = (float) fabs( g - gain_table_SWB_BWE[i] ); - if ( d < dmin ) - { - dmin = d; - imin = i; - } - } - } - push_indice( hBstr, IND_NOISEG, imin, 2 ); - g = (float) pow( 10.0f, gain_table_SWB_BWE[imin] ); - - /*Tonal energy estimation*/ - ton_ene_est( xSynth_har, be_tonal, band_energy, band_start, band_end, band_width, fLenLow, fLenHigh, bands, har_bands, g, pk_sf, pul_res ); - - return; -} - - -/*--------------------------------------------------------------------------* - * EncodeSWBSubbands() - * - * Main routine for generic SWB coding. High-frequency subband - * replicated based on the lowband signal. A search is perform - * find lowband indices denoting the selected lowband subband. - *--------------------------------------------------------------------------*/ - -static void EncodeSWBSubbands( - Encoder_State *st, /* i/o: encoder state structure */ - float *spectra, /* i/o: MDCT domain spectrum */ - const int16_t fLenLow, /* i : lowband length */ - const int16_t fLenHigh, /* i : highband length */ - const int16_t nBands, /* i : number of subbands */ - const int16_t nBands_search, /* i : number of subbands to be searched for BWE */ - const int16_t *sbWidth, /* i : subband lengths */ - const int16_t *subband_offsets, /* i : Subband offset for BWE */ - int16_t *lagIndices, /* o : lowband index for each subband */ - float *lagGains, /* o : first gain for each subband */ - int16_t BANDS, /* i : noise estimate from WB part */ - int16_t *band_start, /* i : Number subbands/Frame */ - int16_t *band_end, /* i : Band Start of each SB */ - float *band_energy, /* i : Band end of each SB */ - const int16_t *p2a_flags, /* i : BAnd energy of each SB */ - const int16_t hqswb_clas, /* i : lowband synthesis */ - int16_t *prev_frm_index, /* i : clas information */ - const int16_t har_bands, /* i/o: Index of the previous Frame */ - const int16_t *subband_search_offset, /* i : Number of harmonic LF bands */ - int16_t *prev_frm_hfe2, - int16_t *prev_stab_hfe2, - int16_t band_width[], - const float spectra_ni[], /* i : coded MDCT domain spectrum + noise */ - int16_t *ni_seed /* i/o: random seed for search buffer NI */ -) -{ - GainItem Nbiggest[NB_SWB_SUBBANDS * N_NBIGGEST_PULSEARCH]; - int16_t i, k; - float sspectra[L_FRAME32k]; - float sspectra_ni[L_FRAME32k], sspectra_diff[L_FRAME32k], be_tonal[SWB_HAR_RAN1], xSynth_har[L_FRAME32k]; - float ss_min = 1.0f, th_g[NB_SWB_SUBBANDS]; - GainItem pk_sf[(NB_SWB_SUBBANDS) *8]; - int16_t pul_res[NB_SWB_SUBBANDS]; - int16_t har_freq_est1 = 0, har_freq_est2 = 0; - int16_t flag_dis = 1; - int16_t pos_max_hfe2 = 0; - - HQ_ENC_HANDLE hHQ_core = st->hHQ_core; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - set_f( sspectra, 0.0f, fLenLow ); - set_f( sspectra_ni, 0.0f, fLenLow ); - set_f( xSynth_har, 0.0f, L_FRAME32k ); - set_s( pul_res, 0, NB_SWB_SUBBANDS ); - - - if ( hqswb_clas == HQ_HARMONIC ) - { - /* Harmonic Structure analysis */ - pos_max_hfe2 = har_est( spectra, fLenLow, &har_freq_est1, &har_freq_est2, &flag_dis, prev_frm_hfe2, subband_search_offset, sbWidth, prev_stab_hfe2 ); - /* Spectrum normalization for the corecoder */ - noise_extr_corcod( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, hHQ_core->prev_hqswb_clas, &hHQ_core->prev_ni_ratio ); - - /* Find best indices for each group */ - getswbindices_har( spectra, sspectra_ni, nBands_search, lagIndices, prev_frm_index, fLenLow, subband_offsets, sbWidth, subband_search_offset ); - /* Write the indices into the bitstream */ - for ( k = 0; k < nBands_search; k++ ) - { - push_indice( hBstr, IND_LAGINDICES, lagIndices[k], bits_lagIndices_mode0_Har[k] ); - } - - if ( flag_dis == 0 ) - { - if ( har_freq_est2 != SWB_HAR_RAN1 || har_freq_est2 != *prev_frm_hfe2 ) - { - har_freq_est2 += lagIndices[0]; - } - } - - /*noise generation*/ - gethar_noisegn( hBstr, spectra, sspectra_diff, xSynth_har, sbWidth, lagIndices, BANDS, har_bands, fLenLow, fLenHigh, subband_offsets, subband_search_offset, band_start, band_end, band_width, band_energy, be_tonal, sspectra, har_freq_est2, pos_max_hfe2, pul_res, pk_sf ); - - /*HF Spectrum Generation*/ - Gettonl_scalfact( xSynth_har, spectra_ni, fLenLow, fLenHigh, har_bands, BANDS, band_energy, band_start, band_end, p2a_flags, be_tonal, pk_sf, pul_res ); - - if ( flag_dis == 0 ) - { - *prev_frm_hfe2 = 0; - } - else - { - *prev_frm_hfe2 = har_freq_est2; - } - - for ( k = har_bands; k < BANDS; k++ ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = xSynth_har[i - fLenLow]; - } - } - } - else - { - /* Spectrum normalization for the corecoder*/ - ss_min = spectrumsmooth_noiseton( spectra, spectra_ni, sspectra, sspectra_diff, sspectra_ni, fLenLow, ni_seed ); - - /* Get lag indices */ - GetSWBIndices( sspectra, spectra + fLenLow, nBands, sbWidth, lagIndices, fLenLow, Nbiggest, subband_offsets, sspectra ); - /* Bitstream operations */ - for ( k = 0; k < nBands; k++ ) - { - if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) - { - push_indice( hBstr, IND_LAGINDICES, lagIndices[k], bits_lagIndices_modeNormal[k] ); - } - else - { - lagIndices[k] = 0; - } - } - convert_lagIndices_pls2smp( lagIndices, nBands, lagIndices, sspectra, sbWidth, fLenLow ); - /*get levels for missing bands*/ - GetlagGains( sspectra_ni, &band_energy[BANDS - NB_SWB_SUBBANDS], nBands, sbWidth, lagIndices, fLenLow, lagGains ); - for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) - { - lagGains[k] *= 0.9f; - } - - for ( k = 0; k < NB_SWB_SUBBANDS; k++ ) - { - th_g[k] = 0.0f; - if ( p2a_flags[BANDS - NB_SWB_SUBBANDS + k] == 0 ) - { - th_g[k] = lagGains[k] * ss_min; - } - } - - /* Construct spectrum */ - GetSynthesizedSpecThinOut( sspectra_ni, xSynth_har, nBands, sbWidth, lagIndices, lagGains, fLenLow ); - /*Level adjustment for the missing bands*/ - noiseinj_hf( xSynth_har, th_g, band_energy, hHQ_core->prev_En_sb, p2a_flags, BANDS, band_start, band_end, fLenLow ); - - for ( k = BANDS - NB_SWB_SUBBANDS; k < BANDS; k++ ) - { - if ( p2a_flags[k] == 0 ) - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = xSynth_har[i - fLenLow]; - } - } - else - { - for ( i = band_start[k]; i <= band_end[k]; i++ ) - { - spectra[i] = spectra_ni[i]; - } - } - } - } - - return; -} - -/*--------------------------------------------------------------------------* - * swb_bwe_enc_lr() - * - * Main encoding routine of SWB BWE for the LR MDCT core - *--------------------------------------------------------------------------*/ - -void swb_bwe_enc_lr( - Encoder_State *st, /* i/o: encoder state structure */ - const float m_core[], /* i : lowband synthesis */ - const float m_orig[], /* i/o: scaled orig signal (MDCT) */ - float m[], /* o : highband synthesis with lowband zeroed */ - const int32_t total_brate, /* i : total bitrate for selecting subband pattern */ - int16_t BANDS, /* i : Total number of Subbands in a frame */ - int16_t *band_start, /* i : band start of each SB */ - int16_t *band_end, /* i : band end of each SB */ - float *band_energy, /* i : band_energy of each SB */ - int16_t *p2a_flags, /* i : HF tonal indicator */ - const int16_t hqswb_clas, /* i : HQ_NORMAL or HQ_HARMONIC class */ - int16_t lowlength, /* i : lowband length */ - int16_t highlength, /* i : highband length */ - int16_t *prev_frm_index, /* i/o: previous frame lag index for harmonic mode */ - const int16_t har_bands, /* i : Number of LF harmonic bands */ - int16_t *prev_frm_hfe2, - int16_t *prev_stab_hfe2, - int16_t band_width[], /* i : subband bandwidths */ - const float y2_ni[], /* i/o: Sparse filled core coder */ - int16_t *ni_seed /* i/o: random seed for search buffer NI */ -) -{ - int16_t k; - int16_t nBands; - int16_t nBands_search; - int16_t wBands[NB_SWB_SUBBANDS]; - int16_t lagIndices[NB_SWB_SUBBANDS]; - float lagGains[NB_SWB_SUBBANDS]; - const int16_t *subband_offsets; - int16_t swb_lowband, swb_highband; - const int16_t *subband_search_offset; - - subband_search_offset = subband_search_offsets_13p2kbps_Har; - subband_offsets = subband_offsets_sub5_13p2kbps_Har; - - hf_parinitiz( total_brate, hqswb_clas, lowlength, highlength, wBands, &subband_search_offset, &subband_offsets, &nBands, &nBands_search, &swb_lowband, &swb_highband ); - - /* Prepare m[], low part from WB core, high part from 32k input */ - mvr2r( m_core, m, swb_lowband ); - mvr2r( m_orig + swb_lowband, m + swb_lowband, swb_highband ); - - /* SWB BWE encoding */ - EncodeSWBSubbands( st, m, swb_lowband, swb_highband, nBands, nBands_search, wBands, subband_offsets, lagIndices, lagGains, BANDS, band_start, band_end, band_energy, p2a_flags, hqswb_clas, prev_frm_index, har_bands, subband_search_offset, prev_frm_hfe2, prev_stab_hfe2, band_width, y2_ni, ni_seed ); - - m[swb_lowband + swb_highband - 1] *= 0.0625f; - m[swb_lowband + swb_highband - 2] *= 0.125f; - m[swb_lowband + swb_highband - 3] *= 0.25f; - m[swb_lowband + swb_highband - 4] *= 0.5f; - - /* set frequencies below 6.4 kHz to zero */ - if ( hqswb_clas == HQ_NORMAL ) - { - for ( k = 0; k < swb_lowband; k++ ) - { - m[k] = 0.0f; - } - } - - return; -} -#endif diff --git a/lib_enc/swb_bwe_enc_lr_fx.c b/lib_enc/swb_bwe_enc_lr_fx.c index d43861d8b..455c858e1 100644 --- a/lib_enc/swb_bwe_enc_lr_fx.c +++ b/lib_enc/swb_bwe_enc_lr_fx.c @@ -1036,7 +1036,6 @@ static void EncodeSWBSubbands_fx( return; } -#ifdef IVAS_FLOAT_FIXED static void EncodeSWBSubbands_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ Word32 *L_spectra, /* i/o: MDCT domain spectrum */ @@ -1231,7 +1230,6 @@ static void EncodeSWBSubbands_ivas_fx( return; } -#endif /*--------------------------------------------------------------------------* * swb_bwe_enc_lr() * @@ -1320,7 +1318,6 @@ void swb_bwe_enc_lr_fx( return; } -#ifdef IVAS_FLOAT_FIXED void swb_bwe_enc_lr_ivas_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word32 L_m_core[], /* i : lowband synthesis */ @@ -1403,4 +1400,3 @@ void swb_bwe_enc_lr_ivas_fx( return; } -#endif diff --git a/lib_enc/swb_pre_proc.c b/lib_enc/swb_pre_proc.c index ce5a27452..db5861968 100644 --- a/lib_enc/swb_pre_proc.c +++ b/lib_enc/swb_pre_proc.c @@ -44,229 +44,9 @@ #include "wmc_auto.h" #include "ivas_prot.h" #include "ivas_rom_enc.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "prot_fx_enc.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local constants - * - *-------------------------------------------------------------------*/ - -#define CLDFB_NO_CHANNELS_HB 20 - - -/*-------------------------------------------------------------------* - * wb_pre_proc() - * - * - Resampling of input signal when input signal sampling rate - * is above 16kHz - * - Common WB TBE and WB BWE pre-processing - *-------------------------------------------------------------------*/ - -void wb_pre_proc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t last_element_mode, /* i : last element mode */ - const float *new_inp_resamp16k, /* i : original input signal */ - float *hb_speech /* o : HB target signal (6-8kHz) at 16kHz */ -) -{ - int16_t Sample_Delay_WB_BWE, ramp_flag; - TD_BWE_ENC_HANDLE hBWE_TD; - FD_BWE_ENC_HANDLE hBWE_FD; - float decim_state1[( 2 * ALLPASSSECTIONS_STEEP + 1 )], decim_state2[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; - float old_input[NS2SA( 16000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + STEREO_DFT_OVL_16k + L_FRAME16k]; - float *highband_new_speech, highband_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 16]; - int16_t fSwitchFromIO = 0; - int16_t ppp_mode; - - hBWE_TD = st->hBWE_TD; - hBWE_FD = st->hBWE_FD; - - if ( st->Opt_SC_VBR ) - { - ppp_mode = st->hSC_VBR->ppp_mode; - } - else - { - ppp_mode = 0; - } - - if ( ( st->last_total_brate == ACELP_6k60 ) || - ( st->last_total_brate == ACELP_8k85 ) || - ( st->last_total_brate == ACELP_12k65 ) || - ( st->last_total_brate == ACELP_14k25 ) || - ( st->last_total_brate == ACELP_15k85 ) || - ( st->last_total_brate == ACELP_18k25 ) || - ( st->last_total_brate == ACELP_19k85 ) || - ( st->last_total_brate == ACELP_23k05 ) || - ( st->last_total_brate == ACELP_23k85 ) ) - { - fSwitchFromIO = 1; - } - - set_f( old_input, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + STEREO_DFT_OVL_16k + L_FRAME16k ); - - if ( st->extl == WB_BWE || st->extl == WB_TBE || st->igf ) - { - ramp_flag = 0; - if ( ( st->last_extl != WB_TBE && st->last_extl != WB_BWE && !st->igf ) || ( st->igf && fSwitchFromIO ) ) - { - ramp_flag = 1; - } - - if ( !ppp_mode ) - { - if ( st->element_mode == IVAS_CPE_DFT ) - { - Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); - - if ( last_element_mode == IVAS_CPE_TD ) - { - set_f( hBWE_TD->decim_state1, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->decim_state2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - ramp_flag = 1; - } - - /*Get past signal*/ - mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - STEREO_DFT_OVL_16k, old_input, STEREO_DFT_OVL_16k ); - mvr2r( hBWE_FD->old_input_wb, old_input + STEREO_DFT_OVL_16k, Sample_Delay_WB_BWE ); - - /*Get new signal*/ - mvr2r( new_inp_resamp16k, &old_input[Sample_Delay_WB_BWE + STEREO_DFT_OVL_16k], L_FRAME16k ); - - /*compute hb_speech on delayed input*/ - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); - - /*Update memory*/ - mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( L_SUBFR * 5 / 16 ), STEREO_DFT_OVL_16k / 4 ); - mvr2r( hb_speech + STEREO_DFT_OVL_16k / 4, hb_speech, ( L_FRAME16k - STEREO_DFT_OVL_16k ) / 4 ); - - /*rest without memory update*/ - mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k - STEREO_DFT_OVL_16k ) / 4, STEREO_DFT_OVL_16k, decim_state1, decim_state2, 0 ); - } - else if ( st->element_mode == IVAS_CPE_TD ) - { - int16_t l_recalc_16k = L_MEM_RECALC_16K + L_FILT16k + 1; /* Note: "+1" is used because L_FILT16k is not divisible by 4 */ - int16_t l_recalc_4k = ( L_MEM_RECALC_16K + L_FILT16k + 1 ) / 4; - Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); - - if ( last_element_mode == IVAS_CPE_DFT ) - { - set_f( hBWE_TD->decim_state1, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->decim_state2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - ramp_flag = 1; - } - - /*Get past signal*/ - mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - l_recalc_16k, old_input, l_recalc_16k ); - mvr2r( hBWE_FD->old_input_wb, old_input + l_recalc_16k, Sample_Delay_WB_BWE ); - - old_input[Sample_Delay_WB_BWE] = hBWE_FD->mem_old_wtda_swb; - - /*Get new signal*/ - mvr2r( new_inp_resamp16k, old_input + Sample_Delay_WB_BWE + l_recalc_16k, L_FRAME16k ); - - /*compute hb_speech on delayed input*/ - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); - - /*Update memory*/ - mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ) - l_recalc_4k, l_recalc_4k ); - mvr2r( hb_speech + l_recalc_4k, hb_speech, ( L_FRAME16k / 4 ) - l_recalc_4k ); - - /*rest without memory update*/ - mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k / 4 ) - l_recalc_4k, l_recalc_16k, decim_state1, decim_state2, 0 ); - } - else if ( st->element_mode == IVAS_SCE ) - { - if ( st->input_Fs == 16000 ) - { - flip_spectrum_and_decimby4( new_inp_resamp16k, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); - } - else - { - int16_t l_recalc_16k = L_FILT16k + 1; /* Note: "+1" is used because L_FILT16k is not divisible by 4 */ - int16_t l_recalc_4k = ( L_FILT16k + 1 ) / 4; - - Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); - - /*Get past signal*/ - mvr2r( hBWE_FD->old_wtda_swb + L_FRAME16k - l_recalc_16k, old_input, l_recalc_16k ); - mvr2r( hBWE_FD->old_input_wb, old_input + l_recalc_16k, Sample_Delay_WB_BWE ); - - /*Get new signal*/ - mvr2r( new_inp_resamp16k, old_input + Sample_Delay_WB_BWE + l_recalc_16k, L_FRAME16k ); - - /*compute hb_speech on delayed input*/ - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); - - /* update hBWE_TD->old_speech_wb memory */ - mvr2r( hb_speech, hBWE_TD->old_speech_wb + ( ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ) - l_recalc_4k, l_recalc_4k ); - mvr2r( hb_speech + l_recalc_4k, hb_speech, ( L_FRAME16k / 4 ) - l_recalc_4k ); - - /*rest without memory update*/ - mvr2r( hBWE_TD->decim_state1, decim_state1, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - mvr2r( hBWE_TD->decim_state2, decim_state2, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - flip_spectrum_and_decimby4( old_input + Sample_Delay_WB_BWE + L_FRAME16k, hb_speech + ( L_FRAME16k / 4 ) - l_recalc_4k, l_recalc_16k, decim_state1, decim_state2, 0 ); - } - } - else - { - flip_spectrum_and_decimby4( new_inp_resamp16k, hb_speech, L_FRAME16k, hBWE_TD->decim_state1, hBWE_TD->decim_state2, ramp_flag ); - } - - if ( st->extl != WB_TBE ) - { - /* Update the previous wideband speech buffer in case of a WB_BWE frame - this code is in wb_tbe_enc */ - Sample_Delay_WB_BWE = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16; - - highband_new_speech = highband_old_speech + Sample_Delay_WB_BWE; - - mvr2r( hBWE_TD->old_speech_wb, highband_old_speech, Sample_Delay_WB_BWE ); - mvr2r( hb_speech, highband_new_speech, L_FRAME16k / 4 ); - mvr2r( highband_old_speech + L_FRAME16k / 4, hBWE_TD->old_speech_wb, Sample_Delay_WB_BWE ); - } - } - } - else - { - set_f( hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); - } - - if ( hBWE_FD != NULL ) - { - hBWE_FD->mem_old_wtda_swb = new_inp_resamp16k[L_FRAME16k - L_MEM_RECALC_16K - L_FILT16k - 1]; - } - - /* st->old_input_wb and st->old_wtda_wb must be updated each frame, or there are often some clicks during WB TBE <-> WB BWE switching */ - if ( ( st->extl != WB_BWE || ( st->extl == WB_BWE && st->extl_brate == 0 ) ) && !ppp_mode ) - { - Sample_Delay_WB_BWE = NS2SA( 16000, DELAY_FD_BWE_ENC_12k8_NS ); - - mvr2r( new_inp_resamp16k, &old_input[Sample_Delay_WB_BWE], L_FRAME16k ); - mvr2r( hBWE_FD->old_input_wb, old_input, Sample_Delay_WB_BWE ); - mvr2r( new_inp_resamp16k + L_FRAME16k - Sample_Delay_WB_BWE, hBWE_FD->old_input_wb, Sample_Delay_WB_BWE ); - if ( ( st->extl != SWB_BWE ) && ( st->extl != FB_BWE ) ) - { - mvr2r( old_input, hBWE_FD->old_wtda_swb, L_FRAME16k ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -277,7 +57,6 @@ void wb_pre_proc( * - Common SWB TBE and SWB BWE pre-processing *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*full implementation pending*/ void swb_pre_proc_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ @@ -967,488 +746,3 @@ void swb_pre_proc_ivas_fx( return; } -#else -void swb_pre_proc( - Encoder_State *st, /* i/o: encoder state structure */ - float *new_swb_speech, /* o : original input signal at 32kHz */ - float *shb_speech, /* o : SHB target signal (6-14kHz) at 16kHz */ - float realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : real buffer */ - float imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i : imag buffer */ - CPE_ENC_HANDLE hCPE /* i/o: CPE encoder structure */ -) -{ - int16_t Sample_Delay_SWB_BWE, inner_frame, delay; - TD_BWE_ENC_HANDLE hBWE_TD; - FD_BWE_ENC_HANDLE hBWE_FD; - int32_t inner_Fs, input_Fs; - float old_input[NS2SA( 48000, DELAY_FD_BWE_ENC_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k]; - float spchTmp[L_FRAME32k], spchTmp2[L_FRAME32k]; - int16_t i, j, L_resamp; - int16_t startB, endB; - float *realBufferFlipped[CLDFB_NO_COL_MAX]; - float *imagBufferFlipped[CLDFB_NO_COL_MAX]; - float realBufferTmp[CLDFB_NO_COL_MAX][20]; - float imagBufferTmp[CLDFB_NO_COL_MAX][20]; - int16_t ts, nB, uB; - float sign, lbEner, v, t, regression; - const float *thr, *regV; - int16_t Sample_Delay_SWB_BWE32k, lMemRecalc32k, dft_ovl32k; - - lMemRecalc32k = NS2SA( 32000, L_MEM_RECALC_NS ); - - /* initialization */ - hBWE_TD = st->hBWE_TD; - hBWE_FD = st->hBWE_FD; - input_Fs = st->input_Fs; - - for ( j = 0; j < CLDFB_NO_COL_MAX; j++ ) - { - set_f( realBufferTmp[j], 0, 20 ); - set_f( imagBufferTmp[j], 0, 20 ); - realBufferFlipped[j] = realBufferTmp[j]; - imagBufferFlipped[j] = imagBufferTmp[j]; - } - - set_f( old_input, 0.0f, NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) + L_FRAME48k ); - - if ( input_Fs == 32000 ) - { - if ( st->element_mode > EVS_MONO ) - { - Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS ); - if ( st->L_frame == L_FRAME16k ) - { - Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS ); - } - - mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - mvr2r( st->input - L_FRAME32k, hBWE_FD->old_fdbwe_speech, L_FRAME32k ); - - if ( st->element_mode == IVAS_CPE_TD && st->bwidth >= SWB ) - { - mvr2r( st->input - hCPE->hStereoTCA->lMemRecalc, hBWE_FD->old_wtda_swb + L_FRAME32k - ( hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ), hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ); - } - else if ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB ) - { - mvr2r( st->input - hCPE->hStereoDft->dft_ovl, hBWE_FD->old_wtda_swb + L_FRAME32k - ( hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ), hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); - } - } - - mvr2r( st->input, new_swb_speech, L_FRAME32k ); - - if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE && st->extl != SWB_BWE_HIGHRATE ) - { - Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); - if ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k ) - { - Sample_Delay_SWB_BWE = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); - } - if ( st->element_mode > EVS_MONO ) - { - Sample_Delay_SWB_BWE -= NS2SA( 32000, DELAY_FIR_RESAMPL_NS ); - } - - mvr2r( hBWE_FD->old_fdbwe_speech, &old_input[Sample_Delay_SWB_BWE], L_FRAME32k ); - - set_f( old_input, 0, Sample_Delay_SWB_BWE ); - mvr2r( hBWE_FD->old_fdbwe_speech + L_FRAME32k - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - if ( st->extl != WB_BWE ) - { - mvr2r( old_input, hBWE_FD->old_wtda_swb, L_FRAME32k ); - } - } - - if ( st->extl != SWB_BWE && st->extl != FB_BWE ) - { - mvr2r( st->input, hBWE_FD->old_fdbwe_speech, L_FRAME32k ); - } - } - else /* 48 kHz */ - { - - Sample_Delay_SWB_BWE32k = NS2SA( 32000, DELAY_FD_BWE_ENC_12k8_NS ); - Sample_Delay_SWB_BWE = NS2SA( 48000, DELAY_FD_BWE_ENC_12k8_NS ); - if ( st->L_frame == L_FRAME16k ) - { - Sample_Delay_SWB_BWE32k = NS2SA( 32000, DELAY_FD_BWE_ENC_16k_NS ); - Sample_Delay_SWB_BWE = NS2SA( 48000, DELAY_FD_BWE_ENC_16k_NS ); - } - - dft_ovl32k = 0; - if ( st->element_mode == IVAS_CPE_DFT ) - { - dft_ovl32k = (int16_t) ( STEREO_DFT_OVL_MAX * 32000 / 48000 ); - } - - if ( st->codec_mode == MODE1 ) - { - if ( st->element_mode > EVS_MONO ) - { - - if ( st->element_mode == IVAS_CPE_TD ) - { - } - else if ( st->bwidth == FB ) - { - mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - } - - mvr2r( st->input - L_FRAME48k, hBWE_FD->old_fdbwe_speech, L_FRAME48k ); - - if ( st->element_mode == IVAS_CPE_TD && st->bwidth >= SWB ) - { - if ( st->bwidth == SWB ) - { - /* buffers hBWE_FD->old_input[] and hBWE_FD->old_wtda_swb[] need to be at 32 kHz (inner) sampling rate */ - - decimate_2_over_3_allpass( st->input - hCPE->hStereoTCA->lMemRecalc, hCPE->hStereoTCA->lMemRecalc, spchTmp, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); - - mvr2r( spchTmp, hBWE_FD->old_wtda_swb + L_FRAME32k - ( lMemRecalc32k - Sample_Delay_SWB_BWE32k ), lMemRecalc32k - Sample_Delay_SWB_BWE32k ); - mvr2r( spchTmp + lMemRecalc32k - Sample_Delay_SWB_BWE32k, hBWE_FD->old_input, Sample_Delay_SWB_BWE32k ); - } - else /* FB_BWE */ - { - mvr2r( st->input - hCPE->hStereoTCA->lMemRecalc, hBWE_FD->old_wtda_swb + L_FRAME48k - ( hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ), hCPE->hStereoTCA->lMemRecalc - Sample_Delay_SWB_BWE ); - mvr2r( st->input - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - } - } - else if ( st->element_mode == IVAS_CPE_DFT && st->bwidth >= SWB ) - { - if ( st->bwidth == SWB ) - { - lerp_flt( st->input - hCPE->hStereoDft->dft_ovl, spchTmp, dft_ovl32k - Sample_Delay_SWB_BWE32k, hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); - - mvr2r( spchTmp, hBWE_FD->old_wtda_swb + L_FRAME32k - ( dft_ovl32k - Sample_Delay_SWB_BWE32k ), dft_ovl32k - Sample_Delay_SWB_BWE32k ); - } - else - { - mvr2r( st->input - hCPE->hStereoDft->dft_ovl, hBWE_FD->old_wtda_swb + L_FRAME48k - ( hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ), hCPE->hStereoDft->dft_ovl - Sample_Delay_SWB_BWE ); - } - } - } - - if ( ( st->extl != SWB_BWE && st->extl != FB_BWE && st->core == ACELP_CORE ) || ( st->element_mode == IVAS_CPE_DFT && st->core != ACELP_CORE ) /*resampling not needed for MDCT cores*/ ) - { - /* move the resampling out of the TDBWE path as new_swb_speech is not needed for TDBWE. */ - mvr2r( st->input, hBWE_FD->old_fdbwe_speech, L_FRAME48k ); - } - else - { - if ( st->last_extl != SWB_BWE && st->last_extl != FB_BWE ) - { - /* resample 48 kHz to 32kHz */ - if ( st->last_bwidth == FB ) - { - inner_frame = L_FRAME48k; - inner_Fs = 48000; - mvr2r( hBWE_FD->old_fdbwe_speech, new_swb_speech, L_FRAME48k ); - } - else - { - inner_frame = L_FRAME32k; - inner_Fs = 32000; - - if ( st->element_mode != IVAS_CPE_DFT ) - { - decimate_2_over_3_allpass( hBWE_FD->old_fdbwe_speech, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); - } - else - { - lerp_flt( hBWE_FD->old_fdbwe_speech, new_swb_speech, inner_frame, L_FRAME48k ); - } - - if ( st->element_mode == IVAS_CPE_DFT && st->idchan == 0 ) - { - for ( i = 0; i < STEREO_DFT_OVL_32k; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_32k[i] = new_swb_speech[inner_frame - STEREO_DFT_OVL_32k + i] * hCPE->hStereoDft->win_32k[STEREO_DFT_OVL_32k - 1 - i]; - } - } - } - - Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ); - if ( st->element_mode > EVS_MONO && st->L_frame == L_FRAME16k ) - { - Sample_Delay_SWB_BWE = NS2SA( inner_Fs, DELAY_FD_BWE_ENC_16k_NS + DELAY_FIR_RESAMPL_NS ); - } - if ( st->element_mode > EVS_MONO ) - { - Sample_Delay_SWB_BWE -= NS2SA( inner_Fs, DELAY_FIR_RESAMPL_NS ); - } - - mvr2r( new_swb_speech, &old_input[Sample_Delay_SWB_BWE], inner_frame ); - set_f( old_input, 0, Sample_Delay_SWB_BWE ); - mvr2r( new_swb_speech + inner_frame - Sample_Delay_SWB_BWE, hBWE_FD->old_input, Sample_Delay_SWB_BWE ); - mvr2r( old_input, hBWE_FD->old_wtda_swb, inner_frame ); - } - - /* resample 48 kHz to 32kHz */ - if ( st->bwidth == FB ) - { - mvr2r( st->input, new_swb_speech, L_FRAME48k ); - } - else - { - if ( st->element_mode == IVAS_CPE_TD ) - { - float dec_2_over_3_mem_tmp[L_FILT_2OVER3], dec_2_over_3_mem_lp_tmp[L_FILT_2OVER3_LP]; - - decimate_2_over_3_allpass( st->input, L_FRAME48k - hCPE->hStereoTCA->lMemRecalc, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); - - mvr2r( hBWE_TD->dec_2_over_3_mem, dec_2_over_3_mem_tmp, L_FILT_2OVER3 ); - mvr2r( hBWE_TD->dec_2_over_3_mem_lp, dec_2_over_3_mem_lp_tmp, L_FILT_2OVER3_LP ); - - decimate_2_over_3_allpass( st->input + L_FRAME48k - hCPE->hStereoTCA->lMemRecalc, hCPE->hStereoTCA->lMemRecalc, new_swb_speech + L_FRAME32k - lMemRecalc32k, dec_2_over_3_mem_tmp, dec_2_over_3_mem_lp_tmp ); - } - else if ( st->element_mode != IVAS_CPE_DFT ) - { - decimate_2_over_3_allpass( st->input, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); - } - else /* IVAS_CPE_DFT */ - { - stereo_dft_enc_synthesize( hCPE->hStereoDft, new_swb_speech, st->idchan, input_Fs, 32000, 0 ); - - mvr2r( new_swb_speech - Sample_Delay_SWB_BWE32k, hBWE_FD->old_input, Sample_Delay_SWB_BWE32k ); - } - } - } - } - else - { - /* resample 48 kHz to 32kHz */ - if ( st->bwidth == FB ) - { - mvr2r( st->input, new_swb_speech, L_FRAME48k ); - } - else - { - decimate_2_over_3_allpass( st->input, L_FRAME48k, new_swb_speech, hBWE_TD->dec_2_over_3_mem, hBWE_TD->dec_2_over_3_mem_lp ); - } - } - } - - if ( ( st->core == ACELP_CORE && st->extl != SWB_BWE_HIGHRATE && st->extl != FB_BWE_HIGHRATE ) || - ( ( st->total_brate == ACELP_9k60 || st->rf_mode ) && st->bwidth == SWB && st->element_mode == EVS_MONO ) ) - { - float CldfbHB = 0; - - if ( st->element_mode == IVAS_CPE_DFT ) - { - CldfbHB = stereo_dft_enc_synthesize( hCPE->hStereoDft, old_input + STEREO_DFT_OVL_16k, st->idchan, input_Fs, 16000, st->L_frame ); - - /* delay corresponding to CLDFB delay */ - mvr2r( old_input + STEREO_DFT_OVL_16k - 20, shb_speech, L_FRAME16k ); - mvr2r( old_input, hBWE_TD->old_speech_shb + L_LOOK_16k + L_SUBFR16k - ( STEREO_DFT_OVL_16k - 20 ), STEREO_DFT_OVL_16k - 20 ); - mvr2r( old_input, hCPE->hStereoICBWE->mem_shb_speech_ref, STEREO_DFT_OVL_16k - 20 ); - - if ( CldfbHB <= 0 ) - { - CldfbHB = 1.0f; - } - hBWE_TD->cldfbHBLT_flt = 0.9f * hBWE_TD->cldfbHBLT_flt + 0.1f * ( 0.221462f /*=1/log10(32768)*/ * ( log10f( CldfbHB ) - 1.0f ) ); - - lbEner = 0.05f * (float) sqrt( hCPE->hStereoDft->lbEner ); - hCPE->hStereoICBWE->icbweRefEner = 0.05f * (float) sqrt( hCPE->hStereoDft->icbweRefEner ); - lbEner = 0.05f * (float) sqrt( hCPE->hStereoDft->lbEner ); - thr = icbwe_thr_DFT; - regV = icbwe_regressionValuesDFT; - } - else - { - if ( st->L_frame == L_FRAME ) - { - startB = 34; - endB = 14; - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - for ( nB = startB, uB = 0; nB > endB; nB--, uB++ ) - { - sign = ( ts % 2 ) ? 1.0f : -1.0f; - realBufferFlipped[ts][uB] = -sign * realBuffer[ts][nB]; - imagBufferFlipped[ts][uB] = sign * imagBuffer[ts][nB]; - } - } - } - else - { - startB = 39; - endB = 19; - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - for ( nB = startB, uB = 0; nB > endB; nB--, uB++ ) - { - realBufferFlipped[ts][uB] = -realBuffer[ts][nB]; - imagBufferFlipped[ts][uB] = imagBuffer[ts][nB]; - } - } - } - - for ( nB = 0; nB < 10; nB++ ) - { - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - CldfbHB += ( realBufferFlipped[ts][nB] * realBufferFlipped[ts][nB] + imagBufferFlipped[ts][nB] * imagBufferFlipped[ts][nB] ); - } - } - if ( CldfbHB <= 0 ) - { - CldfbHB = 1.0f; - } - hBWE_TD->cldfbHBLT_flt = 0.9f * hBWE_TD->cldfbHBLT_flt + 0.1f * ( 0.221462f /*=1/log10(32768)*/ * ( log10f( CldfbHB ) - 1.0f ) ); - - if ( st->element_mode >= IVAS_CPE_DFT && hCPE->hStereoICBWE != NULL ) - { - hCPE->hStereoICBWE->icbweRefEner = EPSILON; - for ( nB = 20; nB < 40; nB++ ) - { - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - hCPE->hStereoICBWE->icbweRefEner += ( realBuffer[ts][nB] * realBuffer[ts][nB] + imagBuffer[ts][nB] * imagBuffer[ts][nB] ); - } - } - hCPE->hStereoICBWE->icbweRefEner = 0.05f * sqrtf( hCPE->hStereoICBWE->icbweRefEner ); - } - - lbEner = EPSILON; - for ( nB = 0; nB < 20; nB++ ) - { - for ( ts = 0; ts < CLDFB_NO_COL_MAX; ts++ ) - { - lbEner += ( realBuffer[ts][nB] * realBuffer[ts][nB] + imagBuffer[ts][nB] * imagBuffer[ts][nB] ); - } - } - lbEner = 0.05f * sqrtf( lbEner ); - thr = icbwe_thr_TDM; - regV = icbwe_regressionValuesTDM; - - cldfbSynthesis_ivas( realBufferFlipped, imagBufferFlipped, shb_speech, -1, st->cldfbSynTd ); - } - - if ( st->element_mode >= IVAS_CPE_DFT && hCPE->hStereoICBWE != NULL ) - { - hCPE->hStereoICBWE->MSFlag = 0; /* Init the multi-source flag */ - v = 0.3333f * sum_f( st->voicing, 3 ); - t = log10f( ( hCPE->hStereoICBWE->icbweRefEner + 1e-6f ) / ( lbEner + 1e-6f ) ); - - /* Three Level Decision Tree to calculate a regression value first */ - if ( t < thr[0] ) /* level 1 */ - { - if ( t < thr[1] ) /* level 2 */ - { - regression = ( v < thr[3] ) ? regV[0] : regV[1]; /* level 3 */ - } - else - { - regression = ( v < thr[4] ) ? regV[2] : regV[3]; /* level 3 */ - } - } - else - { - if ( t < thr[2] ) /* level 2 */ - { - regression = ( v < thr[5] ) ? regV[4] : regV[5]; /* level 3 */ - } - else - { - regression = ( v < thr[6] ) ? regV[6] : regV[7]; /* level 3 */ - } - } - - /* Convert the regression to a hard decision (classification) */ - if ( regression > 0.79f && !( st->bwidth < SWB || hCPE->hCoreCoder[0]->vad_flag == 0 ) ) - { - hCPE->hStereoICBWE->MSFlag = 1; - } - } - - if ( st->extl != WB_TBE && st->extl != SWB_TBE && st->extl != FB_TBE ) - { - /* Update the previous superwideband speech buffer in case of a SWB_BWE frame - this code is in swb_tbe_enc */ - delay = L_LOOK_16k + L_SUBFR16k; - mvr2r( shb_speech + L_FRAME16k - delay, hBWE_TD->old_speech_shb, delay ); - } - } - else - { - if ( ( st->bwidth == FB || st->core == ACELP_CORE ) && ( st->element_mode == EVS_MONO ) ) - { - InitSWBencBufferStates( st->hBWE_TD, shb_speech ); - } - else - { - if ( st->element_mode == IVAS_CPE_DFT ) - { - if ( st->L_frame == L_FRAME ) - { - L_resamp = 560; /* 6.4 kHz core -> 6 - 14 kHz SHB target. 20 ms is 560 samples in 28 kHz sample rate */ - } - else - { - L_resamp = 620; /* 8 kHz core -> 7.5 - 15.5 kHz SHB target. 20 ms is 620 samples in 31 kHz sample rate */ - } - - /* Dirty downsampling to match Nyquist to upper frequency limit of target */ - lerp_flt( st->input, new_swb_speech, L_resamp, (int16_t) ( input_Fs / 50 ) ); - - /* flip the spectrum */ - mvr2r( new_swb_speech, spchTmp, L_resamp ); - for ( i = 0; i < L_resamp; i = i + 2 ) - { - spchTmp[i] = -spchTmp[i]; - } - - /* Dirty upsampling to match Nyquist/2 to lower frequency limit of target (reversed spectrum)*/ - lerp_flt( spchTmp, spchTmp2, L_FRAME32k, L_resamp ); - mvr2r( spchTmp2, spchTmp, L_FRAME32k ); - } - else - { - /* flip the spectrum */ - mvr2r( new_swb_speech, spchTmp, L_FRAME32k ); - - for ( i = 0; i < L_FRAME32k; i = i + 2 ) - { - spchTmp[i] = -spchTmp[i]; - } - } - - Decimate_allpass_steep( spchTmp, hBWE_TD->state_ana_filt_shb, L_FRAME32k, shb_speech ); - - mvr2r( shb_speech + L_FRAME16k - ( L_LOOK_16k + L_SUBFR16k ), hBWE_TD->old_speech_shb, L_LOOK_16k + L_SUBFR16k ); - - /*Compute the past overlap for potential next iDFTs SHB*/ - if ( st->element_mode == IVAS_CPE_DFT ) - { - for ( i = 0; i < STEREO_DFT_OVL_16k; i++ ) - { - hCPE->hStereoDft->output_mem_dmx_16k_shb[i] = shb_speech[20 + i] * hCPE->hStereoDft->win_ana_16k[STEREO_DFT_OVL_16k - 1 - i] * hCPE->hStereoDft->win_ana_16k[STEREO_DFT_OVL_16k - 1 - i]; - } - } - } - - if ( st->element_mode != IVAS_CPE_DFT ) - { - /* Reset CLDFB synthesis buffer */ - set_f( st->cldfbSynTd->cldfb_state, 0.0f, st->cldfbSynTd->p_filter_length ); - } - else - { - hCPE->hStereoDft->flip_sign = -hCPE->hStereoDft->flip_sign; /* Make sure sign is updated even if DFT SHB target is not generated */ - } - } - - /* Memory reset to compensate for 0.9375 ms offset when transitioning from IO to SWB */ - /* When switching from n >1 to n = 1, we keep the enc/dec delay as 8.75/3.25 and below code not needed; - only when n = 1 start, it will be 9.6875/2.3125 in that case this reset is needed for IO->BWE.*/ - if ( st->last_extl == -1 && st->element_mode == EVS_MONO ) - { - delay = NS2SA( input_Fs, DELAY_FIR_RESAMPL_NS ); - for ( i = 0; i < delay; i++ ) - { - shb_speech[i] = (float) i * ( 0.03f * shb_speech[2 * delay - 1 - i] ); - } - } - - return; -} -#endif diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c index 6c09ba923..018ac1f0e 100644 --- a/lib_enc/swb_tbe_enc.c +++ b/lib_enc/swb_tbe_enc.c @@ -44,2850 +44,3 @@ #include "rom_enc.h" #include "wmc_auto.h" #include "ivas_prot.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local constants - *-----------------------------------------------------------------*/ - -#define ENVSHBRES_ACORR_MIN 40 /* minimum lag for calculating autocorrelation function on SHB residual TD envelope */ -#define ENVSHBRES_ACORR_MAX 80 /* maximum lag for calculating autocorrelation function on SHB residual TD envelope */ - - -/*-----------------------------------------------------------------* - * Local function prototypes - *-----------------------------------------------------------------*/ - -static void return_M_Least( const float *inp, const int16_t n_cols, const float *codebook, const int16_t num_grp, const float *weight, const int16_t interNum, int16_t *least ); -static void singlevectortest_gain( const float *inp, const int16_t dimen, const int16_t cb_size, int16_t *index, const float *weight, float *recon, const float *codebook ); -static void determine_gain_weights( const float *gain, float *weights, const int16_t dims ); -static void QuantizeSHBsubgains( Encoder_State *st, float *subgains, const int16_t extl ); -static void QuantizeSHBframegain( Encoder_State *st, float *GainFrame, const int16_t extl, const int32_t extl_brate, int16_t *rf_gainFrame_ind, const int16_t flag_conservative ); -static int16_t closest_centroid( const float *data, const float *weights, const float *quantizer, const int16_t centroids, const int16_t length ); -static void EstimateSHBFrameGain( const int16_t length, const float *oriSHB, const float *synSHB, float *subgain, float *GainFrame, const float *win_shb, const float *subwin ); -static void EstimateSHBGainShape( const int16_t length, const float *oriSHB, const float *synSHB, float *subgain, const float *subwin ); -static float pow_off_pk( float a[], const int16_t len, const int16_t step ); -static float pow_off_pk_corrected( float a[], const int16_t len, const int16_t step ); -static void Quant_lower_LSF( const float lsf[], float lsf_q[], int16_t lsf_idx[] ); -static int16_t Quant_mirror_point( const float lsf[], const float lsf_q[], float *m ); -static int16_t Find_LSF_grid( const float lsf[], float lsf_q[], const float m ); -static void gainFrSmooth_En( TD_BWE_ENC_HANDLE hBWE_TD, const int16_t last_extl, float *shb_frame, const float *lpc_shb, const float *lsp_shb, float *MA_lsp_shb_spacing, int16_t *frGainAttenuate, int16_t *frGainSmoothEn ); -static void Quant_BWE_LSF( BSTR_ENC_HANDLE hBstr, TD_BWE_ENC_HANDLE hBWE_TD, const int16_t codec_mode, const float lsp_shb[], float Q_lsfs[], const int32_t extl_brate ); -static void Quant_shb_ener_sf( Encoder_State *st, float *shb_ener_sf ); -static void Quant_shb_res_gshape( Encoder_State *st, float *shb_res_gshape ); -static void LVQQuant_BWE_LSF( BSTR_ENC_HANDLE hBstr, const float lsf_shb[], float Q_lsfs[], int16_t nbits ); - -/*-------------------------------------------------------------------* - * InitSWBencBuffer() - * - * Initialize SWB buffers and parameters - *-------------------------------------------------------------------*/ - -void InitSWBencBuffer( - TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ -) -{ - int16_t i; - - hBWE_TD->bwe_seed[0] = 23; - hBWE_TD->bwe_seed[1] = 59; - set_f( hBWE_TD->old_bwe_exc, 0.0f, ( PIT16k_MAX * 2 ) ); - set_f( hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - hBWE_TD->bwe_non_lin_prev_scale = 0; - - set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - set_f( hBWE_TD->elliptic_bpf_2_48k_mem[0], 0.0f, 4 ); - set_f( hBWE_TD->elliptic_bpf_2_48k_mem[1], 0.0f, 4 ); - set_f( hBWE_TD->elliptic_bpf_2_48k_mem[2], 0.0f, 4 ); - set_f( hBWE_TD->elliptic_bpf_2_48k_mem[3], 0.0f, 4 ); - hBWE_TD->prev_fb_energy = 0.0f; - - set_f( hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); - set_f( hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); - set_f( hBWE_TD->old_input_fhb, 0.0f, NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2 ); - - InitSWBencBufferStates( hBWE_TD, NULL ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->prev_lsp_shb[i] = i / 20.0f; - } - - hBWE_TD->cldfbHBLT_flt = 1.0f; - hBWE_TD->prev_gainFr_SHB = 0; - set_f( hBWE_TD->lsp_shb_slow_interpl, 0, LPC_SHB_ORDER ); - set_f( hBWE_TD->lsp_shb_fast_interpl, 0, LPC_SHB_ORDER ); - set_f( hBWE_TD->shb_inv_filt_mem, 0, LPC_SHB_ORDER ); - set_f( hBWE_TD->lsp_shb_spacing, 0.1f, 3 ); - hBWE_TD->prev_swb_GainShape = 0; - hBWE_TD->prev_frGainAtten = 0; - hBWE_TD->prev_wb_GainShape_flt = 0; - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0.0f; - hBWE_TD->tilt_mem = 0.0f; - - hBWE_TD->prev_coder_type = GENERIC; - set_f( hBWE_TD->prev_lsf_diff, 0.5f, LPC_SHB_ORDER - 2 ); - hBWE_TD->prev_tilt_para = 0.0f; - set_f( hBWE_TD->cur_sub_Aq, 0.0f, M + 1 ); - - /* TD BWE post-processing */ - hBWE_TD->ptr_mem_stp_swb = hBWE_TD->mem_stp_swb + LPC_SHB_ORDER - 1; - set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->swb_lsp_prev_interp[i] = (float) cos( (float) i * EVS_PI / (float) 10.0f ); - } - - set_f( hBWE_TD->dec_2_over_3_mem, 0.0f, L_FILT_2OVER3 ); - set_f( hBWE_TD->dec_2_over_3_mem_lp, 0.0f, L_FILT_2OVER3_LP ); - - return; -} - - -/*-------------------------------------------------------------------* - * InitSWBencBufferStates() - * - * Initialize SWB buffer states - *-------------------------------------------------------------------*/ - -void InitSWBencBufferStates( - TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - float *shb_speech /* o : SHB target signal (6-14kHz) at 16kHz */ -) -{ - if ( shb_speech != NULL ) - { - set_f( shb_speech, 0.0f, L_FRAME16k ); - } - - set_f( hBWE_TD->old_speech_shb, 0.0f, L_LOOK_16k + L_SUBFR16k ); - set_f( hBWE_TD->mem_shb_res, 0.0f, MAX_LEN_MA_FILTER ); - set_f( hBWE_TD->old_EnvSHBres, 0.0f, L_FRAME4k ); - hBWE_TD->old_mean_EnvSHBres = 0.0f; - hBWE_TD->prev_enr_EnvSHBres = 1.0f; - hBWE_TD->prev_shb_env_tilt = 0.0f; - hBWE_TD->prev_pow_exc16kWhtnd = 1.0f; - hBWE_TD->prev_mix_factor = 1.0f; - hBWE_TD->prev_Env_error = 0.0f; - - return; -} - - -/*-------------------------------------------------------------------* - * ResetSHBbuffer_Enc() - * - *-------------------------------------------------------------------*/ - -void ResetSHBbuffer_Enc( - TD_BWE_ENC_HANDLE hBWE_TD /* i/o: TD BWE data handle */ -) -{ - /* states for the filters used in generating SHB excitation from WB excitation*/ - set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->mem_csfilt, 0, 2 ); - - /* states for the filters used in generating SHB signal from SHB excitation*/ - set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD ); - set_f( hBWE_TD->state_lpc_syn, 0, LPC_SHB_ORDER ); - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0; - - /* states for the filters used in generating WB signal from WB excitation*/ - set_f( hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->mem_genSHBexc_filt_down_wb2, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( hBWE_TD->mem_genSHBexc_filt_down_wb3, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - /* overlap buffer used to Adjust SHB Frame Gain */ - set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); - hBWE_TD->gain_prec_swb = 1.0f; - set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - hBWE_TD->tbe_demph = 0.0f; - hBWE_TD->tbe_premph = 0.0f; - - return; -} - - -/*-------------------------------------------------------------------* - * wb_tbe_enc() - * - * WB TBE encoder, 6 - 8 kHz band encoding module - *-------------------------------------------------------------------*/ - -void wb_tbe_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float *hb_speech, /* i : HB target signal (6-8kHz) at 16kHz */ - const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ - const float voice_factors[], /* i : voicing factors */ - const float pitch_buf[] /* i : pitch for each subframe */ -) -{ - int16_t i, j, k, delay; - TD_BWE_ENC_HANDLE hBWE_TD; - BSTR_ENC_HANDLE hBstr; - float hb_old_speech[( L_LOOK_12k8 + L_SUBFR + L_FRAME ) * 5 / 16]; - float shaped_wb_excitation[( L_FRAME16k + L_SHB_LAHEAD ) / 4]; - float exc4kWhtnd[L_FRAME16k / 4]; - int16_t ana_align_delay = -L_SHB_LAHEAD / 4 - 5; - float GainFrame, GainShape[NUM_SHB_SUBFR]; - float lpc_wb[LPC_SHB_ORDER_WB + 1]; - float lsp_wb[LPC_SHB_ORDER_WB], weights_lsp[LPC_SHB_ORDER_WB] = { 1.0, 1.0 }; - float *hb_new_speech, *hb_frame; - float R[LPC_SHB_ORDER_WB + 2], ervec[LPC_SHB_ORDER_WB + 1]; - float prev_pow, curr_pow, scale; - float p2m_in, p2m_out; - int16_t uv_flag; - float pitBufAvg, voicingBufAvg; - float vf_modified[NB_SUBFR16k]; - float temp_wb_fac, feedback; - float lsp_spacing; - float ervec_temp[LPC_SHB_ORDER_WB + 1]; - float lsp_wb_temp[LPC_SHB_ORDER_WB], lpc_wb_temp[LPC_SHB_ORDER_WB + 1]; - - hBWE_TD = st->hBWE_TD; - hBstr = st->hBstr; - - /* delay alignment */ - delay = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16; - - hb_new_speech = hb_old_speech + delay; - hb_frame = hb_old_speech + L_SUBFR * 5 / 16 + ana_align_delay; - - mvr2r( hBWE_TD->old_speech_wb, hb_old_speech, delay ); - mvr2r( hb_speech, hb_new_speech, L_FRAME16k / 4 ); - mvr2r( hb_old_speech + L_FRAME16k / 4, hBWE_TD->old_speech_wb, delay ); - - if ( ( st->last_extl != WB_TBE && st->last_extl != WB_BWE ) && - ( st->clas == UNVOICED_CLAS || ( st->voicing[0] < 0.5f && st->voicing[1] < 0.5f && st->voicing[2] < 0.5f ) ) && - ( !st->igf ) ) - { - /* In case of unvoiced signals after switching cores, back-propagate the target signal */ - mvr2r( hb_speech, hb_old_speech, delay ); - - for ( i = ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16, j = k = 0; j < L_SUBFR16k; i--, j += 4, k++ ) - { - hb_old_speech[i] *= ola_win_shb_switch_fold[j]; - hb_old_speech[i] += hb_speech[k] * ola_win_shb_switch_fold[L_SUBFR16k - 4 - j]; - } - } - - autocorr( hb_old_speech, R, LPC_SHB_ORDER_WB + 1, ( NS2SA( INT_FS_12k8, 5000000L ) + L_SUBFR + L_FRAME ) * 5 / 16, win_lpc_hb_wb, 0, 1, 1 ); - lev_dur( lpc_wb_temp, R, LPC_SHB_ORDER_WB, ervec_temp ); - a2lsp( lsp_wb_temp, lpc_wb_temp, LPC_SHB_ORDER_WB ); - lsp_spacing = 0.5f; - - for ( i = 0; i < LPC_SHB_ORDER_WB; i++ ) - { - lsp_spacing = min( lsp_spacing, (float) ( i == 0 ? lsp_wb_temp[0] : ( lsp_wb_temp[i] - lsp_wb_temp[i - 1] ) ) ); - } - - /* Spectral smoothing of autocorrelation coefficients */ - for ( i = 0; i <= LPC_SHB_ORDER_WB; i++ ) - { - R[i] = R[i] * wac[i]; - } - R[0] = max( R[0], 1.0e-8f ); - - if ( st->rf_mode == 1 || st->extl_brate == WB_TBE_0k35 ) - { - lev_dur( lpc_wb, R, LPC_SHB_ORDER_LBR_WB, ervec ); - - /* Expand bandwidth of the LP coeffs */ - for ( i = 0; i <= LPC_SHB_ORDER_LBR_WB; i++ ) - { - lpc_wb[i] *= lpc_weights[i]; - } - - /* convert into lsps and calculate weights */ - a2lsp( lsp_wb, lpc_wb, LPC_SHB_ORDER_LBR_WB ); - lsp_weights( lsp_wb, weights_lsp, LPC_SHB_ORDER_LBR_WB ); - - /* Quantization of LSFs */ - i = closest_centroid( lsp_wb, weights_lsp, lbr_wb_bwe_lsfvq_cbook_2bit, 4, LPC_SHB_ORDER_LBR_WB ); - if ( st->codec_mode == MODE2 ) - { - hBWE_TD->lsf_WB = i; - } - else - { - push_indice( hBstr, IND_SHB_LSF, i, NUM_BITS_LBR_WB_LSF ); - } - - mvr2r( lbr_wb_bwe_lsfvq_cbook_2bit + i * LPC_SHB_ORDER_LBR_WB, lsp_wb, LPC_SHB_ORDER_LBR_WB ); - - lsp2a( lpc_wb, lsp_wb, LPC_SHB_ORDER_LBR_WB ); - set_f( lpc_wb + LPC_SHB_ORDER_LBR_WB + 1, 0.0f, ( LPC_SHB_ORDER_WB - LPC_SHB_ORDER_LBR_WB ) ); - } - else - { - lev_dur( lpc_wb, R, LPC_SHB_ORDER_WB, ervec ); - - /* Expand bandwidth of the LP coeffs */ - for ( i = 0; i <= LPC_SHB_ORDER_WB; i++ ) - { - lpc_wb[i] *= lpc_weights[i]; - } - - /* convert into lsps and calculate weights */ - a2lsp( lsp_wb, lpc_wb, LPC_SHB_ORDER_WB ); - lsp_weights( lsp_wb, weights_lsp, LPC_SHB_ORDER_WB ); - - /* Quantization of LSFs */ - i = closest_centroid( lsp_wb, weights_lsp, wb_bwe_lsfvq_cbook_8bit, 256, LPC_SHB_ORDER_WB ); - push_indice( hBstr, IND_SHB_LSF, i, NUM_BITS_WB_LSF ); - - mvr2r( wb_bwe_lsfvq_cbook_8bit + i * LPC_SHB_ORDER_WB, lsp_wb, LPC_SHB_ORDER_WB ); - - lsp2a( lpc_wb, lsp_wb, LPC_SHB_ORDER_WB ); - } - - uv_flag = 0; - if ( st->extl_brate == WB_TBE_1k05 && st->coder_type_raw == UNVOICED ) - { - uv_flag = 1; - } - - mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); - if ( st->coder_type == VOICED ) - { - for ( i = 1; i < NB_SUBFR; i++ ) - { - vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; - } - - if ( st->L_frame != L_FRAME ) - { - vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; - } - } - - /* From low band excitation, generate highband excitation */ - mvr2r( hBWE_TD->state_syn_shbexc, shaped_wb_excitation, L_SHB_LAHEAD / 4 ); - GenShapedWBExcitation( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, uv_flag, st->igf ); - - prev_pow = sum2_f( shaped_wb_excitation, L_SHB_LAHEAD / 4 ); - curr_pow = sum2_f( shaped_wb_excitation + L_SHB_LAHEAD / 4, L_SHB_LAHEAD / 4 ); - - if ( st->element_mode > EVS_MONO ) - { - /* prevent too low values of energy */ - prev_pow = max( 0.00001f, prev_pow ); - curr_pow = max( 0.00001f, curr_pow ); - } - - if ( voice_factors[0] > 0.75f ) - { - curr_pow = (float) ( curr_pow * 0.25 ); - } - - if ( prev_pow == 0 ) - { - scale = 0; - } - else - { - scale = (float) sqrt( curr_pow / prev_pow ); - } - - for ( i = 0; i < ( L_SHB_LAHEAD / 4 - 1 ); i++ ) - { - shaped_wb_excitation[i] *= scale; - } - - scale = (float) sqrt( scale ); - - shaped_wb_excitation[L_SHB_LAHEAD / 4 - 1] *= scale; - - /* Update WB excitation */ - mvr2r( shaped_wb_excitation + L_FRAME16k / 4, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD / 4 ); - - /* estimate the gain shape parameter */ - EstimateSHBGainShape( SHB_OVERLAP_LEN / 2, hb_frame, shaped_wb_excitation, GainShape, subwin_wb ); - - /* Gain frame adjustment factor */ - temp_wb_fac = (float) log( ( GainShape[0] + 0.00001f ) / ( hBWE_TD->prev_wb_GainShape_flt + 0.0001f ) ); - feedback = temp_wb_fac * temp_wb_fac; - for ( i = 1; i < NUM_SHB_SUBFR / 4; i++ ) - { - temp_wb_fac = (float) log( ( GainShape[i] + 0.00001f ) / ( GainShape[i - 1] + 0.0001f ) ); - feedback += ( temp_wb_fac * temp_wb_fac ); - } - feedback = 0.4f / ( 1 + 0.5f * feedback ); - - temp_wb_fac = hBWE_TD->prev_wb_GainShape_flt; - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * temp_wb_fac; - temp_wb_fac = GainShape[i]; - } - hBWE_TD->prev_wb_GainShape_flt = GainShape[NUM_SHB_SUBFR / 4 - 1]; - - /* Compute the power of gains away from the peak gain prior to quantization */ - if ( st->element_mode > EVS_MONO ) - { - p2m_in = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR / 4, 1 ); - } - else - { - p2m_in = pow_off_pk( GainShape, NUM_SHB_SUBFR / 4, 1 ); - } - - if ( st->extl_brate == WB_TBE_0k35 ) - { - for ( i = 0; i < 8; i++ ) - { - GainShape[i] = RECIP_ROOT_EIGHT; - } - } - else - { - push_indice( hBstr, IND_UV_FLAG, uv_flag, 1 ); - - /* Quantization of the subframe gain parameter */ - QuantizeSHBsubgains( st, GainShape, st->extl ); - } - - /* Compute the power of gains away from the peak gain after quantization */ - if ( st->element_mode > EVS_MONO ) - { - p2m_out = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR / 2, 2 ); - } - else - { - p2m_out = pow_off_pk( GainShape, NUM_SHB_SUBFR / 2, 2 ); - } - - /* Estimate the gain parameter */ - EstimateSHBFrameGain( SHB_OVERLAP_LEN / 2, hb_frame, shaped_wb_excitation, GainShape, &GainFrame, window_wb, subwin_wb ); - - /* If there's a big difference in the power of gains away from the peak gain */ - /* due to poor quantization then suppress energy of the high band. */ - if ( p2m_out > 2.0f * p2m_in ) - { - float temp = 0; - if ( p2m_in >= 0 && p2m_out > 0 ) - { - temp = (float) sqrt( ( 2.0f * p2m_in ) / p2m_out ); - } - GainFrame *= temp; - } - - pitBufAvg = 0.0025f * sum_f( pitch_buf, NB_SUBFR ); - voicingBufAvg = 0.333f * sum_f( st->voicing, 3 ); - if ( voicingBufAvg <= 0.0f && ( pitBufAvg != 0 ) ) - { - voicingBufAvg = pitBufAvg / 1.001f; - } - else if ( voicingBufAvg <= 0.0f ) - { - voicingBufAvg = 1.0f; - } - - GainFrame *= max( min( (float) ( pitBufAvg / voicingBufAvg ), 1.0f ), 0.7f ); - - if ( lsp_spacing < 0.01f ) - { - GainFrame *= 0.65f; - } - - /* Quantization of the frame gain parameter */ - if ( st->igf && st->coder_type == VOICED ) - { - GainFrame *= 0.5f; - } - else if ( st->igf && ( 0.25f * sum_f( voice_factors, NB_SUBFR ) > 0.35f ) ) - { - GainFrame *= 0.75f; - } - - if ( st->rf_mode ) - { - QuantizeSHBframegain( st, &GainFrame, st->extl, st->extl_brate, &st->hRF->RF_bwe_gainFr_ind, 0 ); - } - else - { - QuantizeSHBframegain( st, &GainFrame, st->extl, st->extl_brate, NULL, 0 ); - } - - /* Adjust the subframe and frame gain of the synthesized SHB signal */ - /* Scale the shaped excitation*/ - ScaleShapedSHB( SHB_OVERLAP_LEN / 2, shaped_wb_excitation, hBWE_TD->syn_overlap, GainShape, GainFrame, window_wb, subwin_wb ); - - return; -} - - -/*-------------------------------------------------------------------* - * swb_tbe_enc() - * - * SWB TBE encoder, 6 - 14 kHz (or 7.5 - 15.5 kHz) band encoding module - *-------------------------------------------------------------------*/ - -void swb_tbe_enc( - Encoder_State *st, /* i/o: encoder state structure */ - STEREO_ICBWE_ENC_HANDLE hStereoICBWE, /* i/o: IC-BWE state structure */ - const float *shb_speech, /* i : SHB target signal (6-14kHz) at 16kHz */ - const float *bwe_exc_extended, /* i : bandwidth extended exciatation */ - const float voice_factors[], /* i : voicing factors */ - float *White_exc16k, /* o : shaped white excitation for the FB TBE */ - const float pitch_buf[] /* i : pitch for each subframe */ -) -{ - int16_t i, j, delay; - TD_BWE_ENC_HANDLE hBWE_TD; - BSTR_ENC_HANDLE hBstr; - float shb_old_speech[L_LOOK_16k + L_SUBFR16k + L_FRAME16k]; - float shaped_shb_excitation[L_FRAME16k + L_SHB_LAHEAD]; - float GainFrame, GainShape[NUM_SHB_SUBFR]; - float lpc_shb[LPC_SHB_ORDER + 1]; - float lsf_q[LPC_SHB_ORDER]; - float weights_lsp[LPC_SHB_ORDER]; - float *shb_frame, *shb_new_speech; - float lsf_shb_orig[LPC_SHB_ORDER]; - float lsp_shb_1[LPC_SHB_ORDER], lsp_shb_2[LPC_SHB_ORDER], lsp_temp[LPC_SHB_ORDER]; - float lpc_shb_sf[4 * ( LPC_SHB_ORDER + 1 )]; - const float *ptr_lsp_interp_coef; - int16_t tmp; - float shb_ener_sf; - float lsf_shb[LPC_SHB_ORDER]; - float shb_res[L_FRAME16k]; - float shb_res_gshape[NB_SUBFR16k], normFac; - int16_t vf_ind; - float sd_uq_q, vf_modified[NB_SUBFR16k]; - float pitBufAvg, voicingBufAvg; - float R[LPC_SHB_ORDER + 2], ervec[LPC_SHB_ORDER + 1]; - int16_t ana_align_delay; - float prev_pow, curr_pow, scale; - float p2m_in, p2m_out; - int16_t frGainAttenuate, frGainSmoothEn; - float MA_lsp_shb_spacing; - float temp_swb_fac, feedback; - float shaped_shb_excitationTemp[L_FRAME16k]; - float lsf_diff[LPC_SHB_ORDER], w[LPC_SHB_ORDER]; - float refl[M]; - float tilt_para; - float formant_fac; - float temp; - int16_t stab_check = 1; - int16_t MSFlag; - float *nlExc16k, *mixExc16k; - int16_t k; - float pow0, fact_atten, alpha; - float acorr_EnvSHBres[ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN], *p_acorr, acorr_v2a, shb_env_tilt, Env_error; - float buf_EnvSHBres[2 * L_FRAME4k], *p_buf, EnvSHBres[L_FRAME16k], EnvSHBres_4k[L_FRAME4k], EnvSHBres_4k_norm[L_FRAME4k], env_mean_normf[L_FRAME4k]; - float GainShape_Interp[NUM_SHB_SUBGAINS], GainShape_tilt; - float seg_mean[4], den_seg_mean[4], *p_env, step; - int16_t seg_len, seg_len_2; - float den_seg_len, den_seg_len_2; - float sum_gain, normFact; - float Env_error_part[NUM_SHB_SUBGAINS]; - - Env_error = 0.0f; - pitBufAvg = 0.0f; - voicingBufAvg = 0.0f; - set_zero( Env_error_part, NUM_SHB_SUBGAINS ); - shb_env_tilt = 0.0f; - - hBWE_TD = st->hBWE_TD; - hBstr = st->hBstr; - - if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) - { - nlExc16k = hStereoICBWE->nlExc16k; - mixExc16k = hStereoICBWE->mixExc16k; - MSFlag = hStereoICBWE->MSFlag; - } - else - { - nlExc16k = NULL; - mixExc16k = NULL; - MSFlag = 0; - } - - /* initializations */ - set_f( shaped_shb_excitationTemp, 0.0f, L_FRAME16k ); - - if ( st->element_mode == IVAS_CPE_TD && ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) ) - { - ana_align_delay = -L_SHB_LAHEAD - ( NL_BUFF_OFFSET / 2 ) + 20; /* 20 corresponds to the 1.25 ms CLDFB delay */ - } - else - { - ana_align_delay = -L_SHB_LAHEAD - ( NL_BUFF_OFFSET / 2 ); - } - - /* compensate for the delay in target generation and subframe LA */ - shb_frame = shb_old_speech + L_SUBFR16k + ana_align_delay; - - set_f( shb_old_speech, 0, L_LOOK_16k + L_SUBFR16k + L_FRAME16k ); - - /* set up the speech buffers for TBE processing */ - delay = L_LOOK_16k + L_SUBFR16k; - if ( st->element_mode == IVAS_CPE_TD ) - { - shb_new_speech = shb_old_speech + delay - L_MEM_RECALC_TBE_16K; - } - else - { - shb_new_speech = shb_old_speech + delay; - } - - mvr2r( hBWE_TD->old_speech_shb, shb_old_speech, delay ); - mvr2r( shb_speech, shb_new_speech, L_FRAME16k ); - mvr2r( shb_old_speech + L_FRAME16k, hBWE_TD->old_speech_shb, delay ); - - autocorr( shb_old_speech, R, LPC_SHB_ORDER + 1, NS2SA( INT_FS_16k, ACELP_LOOK_NS ) + L_SUBFR16k + L_FRAME16k, win_lpc_shb, 0, 1, 1 ); - - /* Spectral smoothing of autocorrelation coefficients */ - if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) - { - for ( i = 0; i <= LPC_SHB_ORDER; i++ ) - { - R[i] = R[i] * wac_swb[i]; - } - } - - /* Set the autocorr[0] element to a non-negative value */ - R[0] = max( R[0], 1.0e-8f ); - - lev_dur( lpc_shb, R, LPC_SHB_ORDER, ervec ); - { - float enerG, lpc_shb1[M + 1]; - - /* extend the lpc_shb to a 16th order gain calc */ - set_f( lpc_shb1, 0, M + 1 ); - mvr2r( lpc_shb, lpc_shb1, LPC_SHB_ORDER + 1 ); - - /* estimate the LP gain */ - enerG = enr_1_Az( lpc_shb1, 2 * L_SUBFR ); - - /* if the LP gain is greater than a threshold, avoid saturation. - The function 'is_numeric_float' used to check for infinity enerG */ - if ( enerG > 32 || !( is_numeric_float( enerG ) ) ) - { - set_f( lpc_shb, 0, LPC_SHB_ORDER + 1 ); - lev_dur( lpc_shb, R, 2, ervec ); - } - } - - /* Expand bandwidth of the LP coeffs */ - if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) - { - for ( i = 0; i <= LPC_SHB_ORDER; i++ ) - { - lpc_shb[i] *= lpc_weights[i]; - } - } - - /* convert to LSFs */ - stab_check = a2lsp( lsf_shb, lpc_shb, LPC_SHB_ORDER ); - - if ( ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE ) || st->ini_frame == 0 ) - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - hBWE_TD->prev_lsp_shb[i] = i / 20.0f; - } - } - - if ( stab_check == 0 ) - { - mvr2r( hBWE_TD->prev_lsp_shb, lsf_shb, LPC_SHB_ORDER ); - } - - mvr2r( lsf_shb, hBWE_TD->prev_lsp_shb, LPC_SHB_ORDER ); - - mvr2r( lsf_shb, lsf_shb_orig, LPC_SHB_ORDER ); - - gainFrSmooth_En( hBWE_TD, st->last_extl, shb_frame, lpc_shb, lsf_shb, &MA_lsp_shb_spacing, &frGainAttenuate, &frGainSmoothEn ); - - if ( st->rf_mode || st->extl_brate == SWB_TBE_0k95 || st->extl_brate == SWB_TBE_1k10 ) - { - lsp_weights( lsf_shb, weights_lsp, LPC_SHB_ORDER ); - - /* to compensate for the 1.1* weighting done inside the function lsp_weights */ - weights_lsp[3] *= 0.909091f; - weights_lsp[4] *= 0.909091f; - - /* 8-bit VQ, 10 dimension */ - i = closest_centroid( lsf_shb, weights_lsp, swb_tbe_lsfvq_cbook_8b_flt, 256, LPC_SHB_ORDER ); - mvr2r( swb_tbe_lsfvq_cbook_8b_flt + i * LPC_SHB_ORDER, lsf_shb, LPC_SHB_ORDER ); - - set_s( hBWE_TD->lsf_idx, 0, NUM_Q_LSF ); - - if ( st->codec_mode == MODE1 ) - { - push_indice( hBstr, IND_SHB_LSF, i, 8 ); - } - else - { - hBWE_TD->lsf_idx[0] = i; - } - - mvr2r( swb_tbe_lsfvq_cbook_8b_flt + i * LPC_SHB_ORDER, lsf_shb, LPC_SHB_ORDER ); - } - else - { - /* Quantization of LSFs */ - Quant_BWE_LSF( hBstr, st->hBWE_TD, st->codec_mode, lsf_shb, lsf_q, st->extl_brate ); - - mvr2r( lsf_q, lsf_shb, LPC_SHB_ORDER ); - } - - space_lsfs( lsf_shb, LPC_SHB_ORDER ); - - /* voice factor adjustment and gainframe attenuation factor */ - sd_uq_q = 0; - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - /* Estimate the QD in lsps between UQ and Q*/ - sd_uq_q += ( lsf_shb[i] - lsf_shb_orig[i] ) * ( lsf_shb[i] - lsf_shb_orig[i] ); - } - - mvr2r( voice_factors, vf_modified, NB_SUBFR16k ); - - if ( st->coder_type == VOICED || mean( voice_factors, 4 ) > 0.4f ) - { - for ( i = 1; i < NB_SUBFR; i++ ) - { - vf_modified[i] = 0.8f * voice_factors[i] + 0.2f * voice_factors[i - 1]; - } - - if ( st->L_frame != L_FRAME ) - { - vf_modified[4] = 0.8f * voice_factors[4] + 0.2f * voice_factors[3]; - } - } - - /* SHB LSF from current frame; and convert to LSP for interpolation */ - lsf2lsp( lsf_shb, lsp_shb_2, LPC_SHB_ORDER, 1 ); - - if ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) - { - /* SHB LSP values from prev. frame for interpolation */ - mvr2r( hBWE_TD->swb_lsp_prev_interp, lsp_shb_1, LPC_SHB_ORDER ); - } - else - { - /* Use current frame's LSPs; in effect no interpolation */ - mvr2r( lsp_shb_2, lsp_shb_1, LPC_SHB_ORDER ); - } - - lsf_diff[0] = lsf_diff[LPC_SHB_ORDER - 1] = 0.5f; - for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) - { - lsf_diff[i] = lsf_shb[i] - lsf_shb[i - 1]; - } - a2rc( hBWE_TD->cur_sub_Aq + 1, refl, M ); - - /* LSP interpolation for 13.2 kbps and 16.4 kbps */ - tilt_para = 6.6956f * ( 1.0f + refl[0] ) * ( 1.0f + refl[0] ) - 3.8714f * ( 1.0f + refl[0] ) + 1.3041f; - if ( st->last_extl != SWB_TBE ) - { - for ( i = 1; i < LPC_SHB_ORDER - 1; i++ ) - { - hBWE_TD->prev_lsf_diff[i - 1] = 0.5f * lsf_diff[i]; - } - } - - if ( st->extl_brate <= FB_TBE_1k8 ) - { - if ( !( hBWE_TD->prev_tilt_para > 5.0f && ( st->coder_type == TRANSITION || tilt_para < 1.0f ) ) && !( ( hBWE_TD->prev_tilt_para < 3.0f && hBWE_TD->prev_coder_type >= VOICED ) && tilt_para > 5.0f ) ) - { - for ( i = 1; i < ( LPC_SHB_ORDER - 1 ); i++ ) - { - w[i] = ( lsf_diff[i] < hBWE_TD->prev_lsf_diff[i - 1] ) ? min( max( 0.8f * lsf_diff[i] / hBWE_TD->prev_lsf_diff[i - 1], 0.5f ), 1.0f ) : min( max( 0.8f * hBWE_TD->prev_lsf_diff[i - 1] / lsf_diff[i], 0.5f ), 1.0f ); - } - w[0] = w[1]; - w[LPC_SHB_ORDER - 1] = w[LPC_SHB_ORDER - 2]; - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsp_temp[i] = lsp_shb_1[i] * ( 1.0f - w[i] ) + lsp_shb_2[i] * w[i]; - } - } - else - { - mvr2r( lsp_shb_2, lsp_temp, LPC_SHB_ORDER ); - } - } - - mvr2r( lsf_diff + 1, hBWE_TD->prev_lsf_diff, LPC_SHB_ORDER - 2 ); - hBWE_TD->prev_tilt_para = tilt_para; - - if ( st->extl_brate >= SWB_TBE_2k8 ) - { - /* SHB LSP interpolation */ - ptr_lsp_interp_coef = interpol_frac_shb_flt; - for ( j = 0; j < 4; j++ ) - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsp_temp[i] = lsp_shb_1[i] * ( *ptr_lsp_interp_coef ) + lsp_shb_2[i] * ( *( ptr_lsp_interp_coef + 1 ) ); - } - ptr_lsp_interp_coef += 2; - - tmp = j * ( LPC_SHB_ORDER + 1 ); - /* convert from lsp to lsf */ - lsp2lsf( lsp_temp, lpc_shb_sf + tmp, LPC_SHB_ORDER, 1 ); - /* convert lsf to lpc for SHB synthesis */ - lsp2a( lpc_shb_sf + tmp, lpc_shb_sf + tmp, LPC_SHB_ORDER ); - lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; - } - - /* -------- Calculate the SHB Energy -------- */ - shb_ener_sf = 0.003125f * sum2_f( shb_frame + L_SHB_LAHEAD, L_FRAME16k ); - Quant_shb_ener_sf( st, &shb_ener_sf ); - - /* -------- calculate the residuals using the FOUR subframe LPCs -------- */ - set_f( shb_res, 0, L_FRAME16k ); - residu( lpc_shb_sf, LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD, shb_res, 80 ); - residu( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 80, shb_res + 80, 80 ); - residu( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 160, shb_res + 160, 80 ); - residu( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 240, shb_res + 240, 80 ); - - set_f( shb_res_gshape, 0, NB_SUBFR16k ); - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - shb_res_gshape[i] = sum2_f( shb_res + i * 64, 64 ); - } - - maximum( shb_res_gshape, NB_SUBFR16k, &normFac ); - normFac = (float) 1.0f / ( 0.0001f + normFac ); - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - shb_res_gshape[i] = (float) sqrt( shb_res_gshape[i] * normFac ); - } - - Quant_shb_res_gshape( st, shb_res_gshape ); - } - else if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - for ( j = 0; j < 4; j++ ) - { - tmp = j * ( LPC_SHB_ORDER + 1 ); - - /* convert from lsp to lsf */ - lsp2lsf( lsp_temp, lpc_shb_sf + tmp, LPC_SHB_ORDER, 1 ); - - /* convert lsf to lpc for SHB synthesis */ - lsp2a( lpc_shb_sf + tmp, lpc_shb_sf + tmp, LPC_SHB_ORDER ); - lpc_shb_sf[j * ( LPC_SHB_ORDER + 1 )] = 1.0f; - } - - /* -------- calculate the residuals using the FOUR subframe LPCs -------- */ - set_f( shb_res, 0, L_FRAME16k ); - residu( lpc_shb_sf, LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD, shb_res, 80 ); - residu( lpc_shb_sf + ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 80, shb_res + 80, 80 ); - residu( lpc_shb_sf + 2 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 160, shb_res + 160, 80 ); - residu( lpc_shb_sf + 3 * ( LPC_SHB_ORDER + 1 ), LPC_SHB_ORDER, shb_frame + L_SHB_LAHEAD + 240, shb_res + 240, 80 ); - } - - /* Save the SWB LSP values from current frame for interpolation */ - mvr2r( lsp_shb_2, hBWE_TD->swb_lsp_prev_interp, LPC_SHB_ORDER ); - - /* convert from lsp to lsf */ - lsp2lsf( lsp_temp, lpc_shb, LPC_SHB_ORDER, 1 ); - - /* convert lsf to lpc for SHB synthesis */ - lsp2a( lpc_shb, lpc_shb, LPC_SHB_ORDER ); - lpc_shb[0] = 1.0f; - - mvr2r( hBWE_TD->state_syn_shbexc, shaped_shb_excitation, L_SHB_LAHEAD ); - - /* Determine formant PF strength */ - formant_fac = swb_formant_fac( lpc_shb[1], &hBWE_TD->tilt_mem ); - - /* calculate SHB auto-correlation function and convert to SHB voicing factor */ - acorr_v2a = 0.0f; - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - /* calculate the TD envelope of the SHB residual signal */ - find_td_envelope( shb_res, L_FRAME16k, 20, hBWE_TD->mem_shb_res, EnvSHBres ); - - /* downsample the TD envelope by 4 */ - for ( k = 0; k < L_FRAME4k; k++ ) - { - EnvSHBres_4k[k] = EnvSHBres[4 * k]; - } - - /* calculate long-term mean envelope over four consecutive segments using linear interpolation */ - seg_len = L_FRAME4k / 4; - den_seg_len = 1.0f / seg_len; - seg_len_2 = L_FRAME4k / 8; - den_seg_len_2 = 1.0f / ( seg_len_2 - 1 ); - for ( k = 0; k < 4; k++ ) - { - seg_mean[k] = max( 1.0f, mean( &EnvSHBres_4k[k * seg_len], seg_len ) ); - den_seg_mean[k] = 1.0f / seg_mean[k]; - } - - /* first half of the first segment */ - if ( hBWE_TD->old_mean_EnvSHBres == 0 ) - { - set_f( env_mean_normf, den_seg_mean[0], seg_len_2 ); - } - else - { - env_mean_normf[0] = hBWE_TD->old_mean_EnvSHBres; - step = ( den_seg_mean[0] - hBWE_TD->old_mean_EnvSHBres ) * den_seg_len_2; - for ( i = 1; i < seg_len_2; i++ ) - { - env_mean_normf[i] = env_mean_normf[i - 1] + step; - } - } - - /* segments 1-4 */ - p_env = &env_mean_normf[seg_len_2]; - for ( k = 1; k < 4; k++ ) - { - step = ( den_seg_mean[k] - den_seg_mean[k - 1] ) * den_seg_len; - for ( i = 0; i < seg_len; i++ ) - { - *p_env = *( p_env - 1 ) + step; - p_env++; - } - } - - /* last half of the last segment */ - set_f( p_env, den_seg_mean[3], seg_len_2 ); - hBWE_TD->old_mean_EnvSHBres = den_seg_mean[3]; - - /* normalize residual SHB envelope with its long-term mean envelope */ - for ( k = 0; k < L_FRAME4k; k++ ) - { - EnvSHBres_4k_norm[k] = EnvSHBres_4k[k] * env_mean_normf[k]; - } - - /* calculate tilt of the long-term mean envelope */ - lls_interp_n( seg_mean, 4, &shb_env_tilt, &temp, 0 ); - - /* copy previous residual envelope to the buffer */ - mvr2r( hBWE_TD->old_EnvSHBres, buf_EnvSHBres, L_FRAME4k ); - - /* subtract mean value from the normalized SHB residual envelope */ - p_buf = &buf_EnvSHBres[L_FRAME4k]; - temp = mean( EnvSHBres_4k_norm, L_FRAME4k ); - for ( k = 0; k < L_FRAME4k; k++ ) - { - *p_buf++ = EnvSHBres_4k_norm[k] - temp; - } - - /* update memory */ - mvr2r( &buf_EnvSHBres[L_FRAME4k], hBWE_TD->old_EnvSHBres, L_FRAME4k ); - - /* calculate energy normalization factor for the auto-correlation function */ - pow0 = sum2_f( &buf_EnvSHBres[L_FRAME4k], L_FRAME4k ) + 1.0f; - if ( hBWE_TD->prev_enr_EnvSHBres == 1.0f ) - { - scale = 1.0f / pow0; - } - else - { - scale = 1.0f / max( pow0, hBWE_TD->prev_enr_EnvSHBres ); - } - hBWE_TD->prev_enr_EnvSHBres = pow0; - - /* calculate normalized auto-correlation function on the residual normalized SHB envelope */ - p_acorr = acorr_EnvSHBres; - p_buf = &buf_EnvSHBres[L_FRAME4k - ENVSHBRES_ACORR_MIN]; - for ( k = 0; k < ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN; k++ ) - { - *p_acorr++ = scale * dotp( &buf_EnvSHBres[L_FRAME4k], p_buf--, L_FRAME4k ); - } - - /* calculate variance of the SHB autocorrelation function */ - acorr_v2a = sum2_f( acorr_EnvSHBres, ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN ) / ( ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN ); - - /* multiply with the maximum of the SHB autocorrelation function */ - maximum( acorr_EnvSHBres, ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN, &temp ); - acorr_v2a *= temp; - - alpha = 25.0f; - acorr_v2a = 2.0f / ( 1.0f + (float) expf( -alpha * acorr_v2a ) ) - 1.0f; - - /* limit in the range 0.0 - 1.0 */ - acorr_v2a = min( 1.0f, max( 0.0f, acorr_v2a ) ); - - hBWE_TD->prev_shb_env_tilt = shb_env_tilt; - } - - vf_ind = 20; - GenShapedSHBExcitation( shaped_shb_excitation + L_SHB_LAHEAD, lpc_shb, White_exc16k, hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, st->coder_type, bwe_exc_extended, hBWE_TD->bwe_seed, vf_modified, st->extl, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), lpc_shb_sf, &shb_ener_sf, shb_res_gshape, shb_res, &vf_ind, formant_fac, hBWE_TD->fb_state_lpc_syn, &( hBWE_TD->fb_tbe_demph ), st->total_brate, 0, st->element_mode, st->flag_ACELP16k, nlExc16k, mixExc16k, st->extl_brate, MSFlag, - EnvSHBres_4k_norm, &( hBWE_TD->prev_pow_exc16kWhtnd ), &( hBWE_TD->prev_mix_factor ), &Env_error, Env_error_part ); - - /* fill-in missing SHB excitation */ - if ( ( st->element_mode == IVAS_CPE_TD || st->element_mode == IVAS_CPE_DFT ) && st->last_core_brate <= SID_2k40 ) - { - mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, shaped_shb_excitation, L_SHB_LAHEAD ); - } - - if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) - { - mvr2r( shaped_shb_excitation + L_SHB_LAHEAD, hStereoICBWE->shbSynthRef, L_FRAME16k ); - } - - if ( st->extl_brate >= SWB_TBE_2k8 || st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - if ( st->codec_mode == MODE2 ) - { - hBWE_TD->idx_mixFac = vf_ind; - } - else - { - push_indice( hBstr, IND_SHB_VF, vf_ind, NUM_BITS_SHB_VF ); - } - } - - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - for ( i = 0; i < L_FRAME16k; i += L_SUBFR16k ) - { - /* TD BWE post-processing */ - PostShortTerm( &shaped_shb_excitation[L_SHB_LAHEAD + i], lpc_shb, &shaped_shb_excitationTemp[i], hBWE_TD->mem_stp_swb, hBWE_TD->ptr_mem_stp_swb, &( hBWE_TD->gain_prec_swb ), hBWE_TD->mem_zero_swb, formant_fac ); - } - - mvr2r( shaped_shb_excitationTemp, &shaped_shb_excitation[L_SHB_LAHEAD], L_FRAME16k ); - - prev_pow = sum2_f( shaped_shb_excitation, L_SHB_LAHEAD + 10 ); - curr_pow = sum2_f( shaped_shb_excitation + L_SHB_LAHEAD + 10, L_SHB_LAHEAD + 10 ); - - if ( st->element_mode > EVS_MONO ) - { - /* prevent too low values of energy */ - prev_pow = max( 0.00001f, prev_pow ); - curr_pow = max( 0.00001f, curr_pow ); - } - - if ( voice_factors[0] > 0.75f ) - { - curr_pow = (float) ( curr_pow * 0.25 ); - } - - if ( prev_pow == 0 ) - { - scale = 0; - } - else - { - scale = (float) sqrt( curr_pow / prev_pow ); - } - - for ( i = 0; i < L_SHB_LAHEAD; i++ ) - { - shaped_shb_excitation[i] *= scale; - } - - for ( ; i < L_SHB_LAHEAD + 10; i++ ) - { - temp = ( i - 19 ) / 10.0f; - shaped_shb_excitation[i] *= ( temp * 1.0f + ( 1.0f - temp ) * scale ); - } - } - else - { - /* reset the PF memories if the PF is not running */ - set_f( hBWE_TD->mem_stp_swb, 0, LPC_SHB_ORDER ); - hBWE_TD->gain_prec_swb = 1.0f; - set_f( hBWE_TD->mem_zero_swb, 0, LPC_SHB_ORDER ); - } - - /* Update SHB excitation */ - mvr2r( shaped_shb_excitation + L_FRAME16k, hBWE_TD->state_syn_shbexc, L_SHB_LAHEAD ); - - /* Estimate the gain-shape parameter */ - EstimateSHBGainShape( SHB_OVERLAP_LEN, shb_frame, shaped_shb_excitation, GainShape, subwin_shb ); - - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - /* Gain shape attenuation in case of big error in envelope modelling */ - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - if ( Env_error_part[i] > 100.0f ) - { - /* set gain shape to the average of the remaining gains */ - GainShape[i] = ( sum_f( GainShape, NUM_SHB_SUBGAINS ) - GainShape[i] ) / ( NUM_SHB_SUBGAINS - 1 ); - } - } - } - - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - /* Gain shape BWS/high band low energy fix */ - if ( hBWE_TD->cldfbHBLT_flt < 1.0f ) - { - /* There is not much HB past 10kHz; the temporal resolution is quite coarse, so reduce the dynamic range */ - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - /* 0.35f +/- delta variation; delta = 0.1*(GS-0.35)*/ - GainShape[i] = 0.315f + 0.1f * GainShape[i]; - } - } - } - - /* high-band gain control in case of BWS */ - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - if ( st->bwidth_sw_cnt > 0 ) - { - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape[i] *= ( (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD ); - } - } - } - - /* Gain shape adjustment factor */ - temp_swb_fac = (float) log( ( GainShape[0] + 0.00001f ) / ( hBWE_TD->prev_swb_GainShape + 0.0001f ) ); - feedback = temp_swb_fac * temp_swb_fac; - for ( i = 1; i < NUM_SHB_SUBGAINS; i++ ) - { - temp_swb_fac = (float) log( ( GainShape[i] + 0.00001f ) / ( GainShape[i - 1] + 0.0001f ) ); - feedback += ( temp_swb_fac * temp_swb_fac ); - } - - feedback = 0.4f / ( 1 + 0.5f * feedback ); - - /* calculate tilt in all sub-frame gains */ - mvr2r( GainShape, GainShape_Interp, NUM_SHB_SUBGAINS ); - lls_interp_n( GainShape_Interp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); - - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - if ( acorr_v2a < 0.4f && vf_ind >= 5 && fabs( GainShape_tilt ) < 0.2f && shb_env_tilt < 500.0f && hBWE_TD->prev_shb_env_tilt < 500.0f ) - { - /* stronger smoothing in case of unvoiced SHB residual signal with gaussian excitation */ - feedback = lin_interp( acorr_v2a, 0.4f, 0.0f, 0.0f, 0.95f, 0 ); - feedback = min( max( feedback, 0.0f ), 1.0f ); - - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * GainShape_Interp[i]; - } - } - } - else - { - if ( frGainAttenuate == 1 || ( sum_f( st->voicing, 3 ) > 2.4f && sum_f( voice_factors, 4 ) > 0.8f ) ) - { - temp_swb_fac = hBWE_TD->prev_swb_GainShape; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape[i] = ( 1 - feedback ) * GainShape[i] + feedback * temp_swb_fac; - temp_swb_fac = GainShape[i]; - } - } - } - - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - /* Re-normalize gain shape before quantization */ - sum_gain = sum2_f( GainShape, NUM_SHB_SUBGAINS ); - if ( sum_gain == 0 ) - { - normFact = 0; - } - else - { - normFact = (float) sqrt( 1.0f / sum_gain ); - } - - v_multc( GainShape, normFact, GainShape, NUM_SHB_SUBGAINS ); - } - - hBWE_TD->prev_swb_GainShape = GainShape[3]; - - /* Compute the power of gains away from the peak gain prior to quantization */ - if ( st->element_mode > EVS_MONO ) - { - p2m_in = pow_off_pk_corrected( GainShape, NUM_SHB_SUBGAINS, 1 ); - } - else - { - p2m_in = pow_off_pk( GainShape, NUM_SHB_SUBGAINS, 1 ); - } - - /* Quantization of the gain shape parameter */ - QuantizeSHBsubgains( st, GainShape, st->extl ); - - /* Compute the power of gains away from the peak gain after quantization */ - if ( st->element_mode > EVS_MONO ) - { - p2m_out = pow_off_pk_corrected( GainShape, NUM_SHB_SUBFR, 4 ); - } - else - { - p2m_out = pow_off_pk( GainShape, NUM_SHB_SUBFR, 4 ); - } - - /* Gain shape smoothing after quantization */ - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape_Interp[i] = GainShape[i * NUM_SHB_SUBGAINS]; - } - - lls_interp_n( GainShape_Interp, NUM_SHB_SUBGAINS, &GainShape_tilt, &temp, 1 ); - - if ( vf_ind >= 6 && fabs( GainShape_tilt ) < 0.12f ) - { - feedback = 0.3f; - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - GainShape[i] = ( 1 - feedback ) * GainShape[i * NUM_SHB_SUBGAINS] + feedback * GainShape_Interp[i]; - } - - for ( i = NUM_SHB_SUBFR - 1; i > 0; i-- ) - { - GainShape[i] = GainShape[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; - } - } - } - - /* Estimate the gain parameter */ - EstimateSHBFrameGain( SHB_OVERLAP_LEN, shb_frame, shaped_shb_excitation, GainShape, &GainFrame, window_shb, subwin_shb ); - - if ( st->tec_tfa == 1 ) - { - tfaCalcEnv( shb_frame, st->tfa_enr_flt ); - } - - /* If there's a big difference in the power of gains away from the peak gain */ - /* due to poor quantization then suppress energy of the high band. */ - if ( p2m_out > 2.0f * p2m_in ) - { - temp = 0.f; - if ( p2m_in >= 0 && p2m_out > 0 ) - { - temp = (float) sqrt( ( 2.0f * p2m_in ) / p2m_out ); - } - GainFrame *= temp; - } - - if ( st->element_mode > EVS_MONO && st->L_frame != st->last_L_frame && hBWE_TD->prev_gainFr_SHB != 0 && ( st->last_extl == SWB_TBE || st->last_extl == FB_TBE ) && st->coder_type == TRANSITION && st->coder_type_raw != VOICED && st->clas == VOICED_CLAS && st->last_clas == VOICED_CLAS && ( 3.0f * voice_factors[0] < voice_factors[( st->L_frame >> 6 ) - 1] ) ) - { - float fac = GainFrame / hBWE_TD->prev_gainFr_SHB; - - if ( fac > 4.0f ) - { - GainFrame = 4.0f * GainFrame / fac; - } - } - - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - if ( acorr_v2a > 0.1f && Env_error > 5.0f ) - { - /* attenuate frame gain in case of voiced SHB residual signal with gaussian excitation */ - fact_atten = lin_interp( Env_error, 5.0f, 1.0f, 25.0f, 0.2f, 1 ); - GainFrame *= fact_atten; - } - /* Frame gain attenuation in case of big error in envelope modelling */ - else if ( Env_error > 100.0f || hBWE_TD->prev_Env_error > 100.0f ) - { - if ( Env_error > 100.0f ) - { - fact_atten = lin_interp( Env_error, 100.0f, 1.0f, 300.0f, 0.1f, 1 ); - } - else - { - fact_atten = lin_interp( hBWE_TD->prev_Env_error, 100.0f, 1.0f, 300.0f, 0.5f, 1 ); - } - GainFrame *= fact_atten; - } - } - else - { - if ( frGainSmoothEn == 1 && hBWE_TD->prev_gainFr_SHB < GainFrame ) - { - GainFrame = 0.5f * ( hBWE_TD->prev_gainFr_SHB + GainFrame ); - } - } - - if ( frGainAttenuate == 1 && MA_lsp_shb_spacing <= 0.0024f ) - { - GainFrame = (float) pow( GainFrame, 0.8f ); - } - else if ( hBWE_TD->prev_frGainAtten == 1 && GainFrame > 3.0f * hBWE_TD->prev_gainFr_SHB ) - { - GainFrame *= ( 0.8f + 0.5f * feedback ); - } - hBWE_TD->prev_frGainAtten = frGainAttenuate; - - hBWE_TD->prev_gainFr_SHB = GainFrame; - - if ( GainFrame > 153.0f && st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) - { - hStereoICBWE->MSFlag = 1; - } - - /* Gain attenuation when the SWB LSF quantization error is larger than a threshold */ - sd_uq_q = ( sd_uq_q / 0.0025f ); - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - sd_uq_q = 1 - 0.7f * ( sd_uq_q * sd_uq_q ); - } - else - { - if ( st->L_frame == L_FRAME ) - { - sd_uq_q = 1 - 0.2f * ( sd_uq_q * sd_uq_q ); - } - else - { - sd_uq_q = 1 - 0.1f * ( sd_uq_q * sd_uq_q ); - } - } - - sd_uq_q = max( min( sd_uq_q, 1.0f ), 0.5f ); - - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - pitBufAvg = 0.0025f * sum_f( pitch_buf, 4 ); - voicingBufAvg = ( sum_f( voice_factors, 4 ) > 0.6f ) ? 0.333f : 0.1667f; - voicingBufAvg = voicingBufAvg * sum_f( st->voicing, 3 ); - - if ( voicingBufAvg <= 0.0f && sd_uq_q * pitBufAvg != 0 ) - { - voicingBufAvg = sd_uq_q * pitBufAvg / 1.001f; - } - else if ( voicingBufAvg <= 0.0f ) - { - voicingBufAvg = 1.0f; - } - } - - /* high-band gain control in case of BWS */ - if ( st->extl_brate != SWB_TBE_1k10 && st->extl_brate != SWB_TBE_1k75 ) - { - if ( st->bwidth_sw_cnt > 0 ) - { - GainFrame *= ( (float) ( st->bwidth_sw_cnt ) / (float) BWS_TRAN_PERIOD ); - } - } - - /* Controlled gain evolution in SWB for stronger voiced segments */ - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - GainFrame *= sd_uq_q; - } - else - { - GainFrame *= max( min( (float) ( sd_uq_q * pitBufAvg / voicingBufAvg ), 1.0f ), 0.6f ); - } - - if ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) - { - if ( st->rf_mode == 1 ) - { - /* Compensate for energy increase mismatch due to memory-less synthesis */ - GainFrame *= 0.85f; - } - } - else - { - if ( st->L_frame == L_FRAME16k || st->rf_mode == 1 ) - { - /* Compensate for energy increase mismatch due to memory-less synthesis*/ - GainFrame *= 0.85f; - } - } - - /* Quantization of the frame gain parameter */ - if ( st->rf_mode ) - { - QuantizeSHBframegain( st, &GainFrame, st->extl, 0, &st->hRF->RF_bwe_gainFr_ind, 0 ); - } - else - { - QuantizeSHBframegain( st, &GainFrame, st->extl, 0, NULL, ( st->extl_brate == SWB_TBE_1k10 || st->extl_brate == SWB_TBE_1k75 ) ? 1 : 0 ); - } - - if ( hStereoICBWE != NULL ) - { - push_indice( hBstr, IND_STEREO_ICBWE_MSFLAG, hStereoICBWE->MSFlag, STEREO_ICBWE_MSFLAG_BITS ); - } - - /* Backup for the IC BWE parameters */ - if ( st->element_mode >= IVAS_CPE_DFT && hStereoICBWE != NULL ) - { - mvr2r( lpc_shb, hStereoICBWE->lpSHBRef, LPC_SHB_ORDER + 1 ); - } - - if ( st->extl == FB_TBE ) - { - for ( i = 0; i < L_FRAME16k; i++ ) - { - White_exc16k[i] *= GainFrame * GainShape[NUM_SHB_SUBFR * i / L_FRAME16k]; - } - } - - hBWE_TD->prev_Env_error = Env_error; - - return; -} - -/*-------------------------------------------------------------------* - * EstimateSHBFrameGain() - * - * Estimate the overall gain factor needed to scale synthesized highband - * to original highband signal level. - *-------------------------------------------------------------------*/ - -static void EstimateSHBFrameGain( - const int16_t length, /* i : SHB overlap length */ - const float *oriSHB, /* i : target original SHB frame */ - const float *synSHB, /* i : shaped SHB excitation */ - float *subgain, /* o : estimate of gain shape */ - float *GainFrame, /* o : estimat of gain frame */ - const float *win_shb, /* i : SHB window */ - const float *subwin /* i : subframe window */ -) -{ - const int16_t *skip; - int16_t i, j, k, l_shb_lahead, l_frame; - int16_t join_length, num_join; - float sig, mod_syn[L_FRAME16k + L_SHB_LAHEAD]; - float oriNrg = 0.0f, synNrg = 0.0f, sum_gain; - float frame_gain; - - /* initilaization */ - l_frame = L_FRAME16k; - l_shb_lahead = L_SHB_LAHEAD; - skip = skip_bands_SWB_TBE; - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - skip = skip_bands_WB_TBE; - l_frame = L_FRAME16k / 4; - l_shb_lahead = L_SHB_LAHEAD / 4; - } - - /* apply gain for each subframe, and store noise output signal using overlap-add*/ - set_f( mod_syn, 0, l_frame + l_shb_lahead ); - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - sum_gain = 0; - for ( k = 0; k < length / 2; k++ ) - { - sum_gain = subwin[2 * k + 2] * subgain[0]; - mod_syn[skip[0] + k] = synSHB[skip[0] + k] * sum_gain; - mod_syn[skip[0] + k + length / 2] = synSHB[skip[0] + k + length / 2] * subgain[0]; - } - - for ( i = 1; i < NUM_SHB_SUBFR / 2; i++ ) - { - for ( k = 0; k < length; k++ ) - { - sum_gain = subwin[k + 1] * subgain[i] + subwin[length - k - 1] * subgain[i - 1]; - mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; - } - } - - for ( k = 0; k < length / 2; k++ ) - { - sum_gain = subwin[length - 2 * k - 2] * subgain[i - 1]; - mod_syn[skip[i] + k] = synSHB[skip[i] + k] * sum_gain; - } - } - else - { - num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; - join_length = num_join * length; - for ( k = 0, j = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * subwin[k + 1] * subgain[0]; - j++; - } - for ( i = 0; i < NUM_SHB_SUBGAINS - 1; i++ ) - { - for ( k = 0; k < join_length - length; k++ ) - { - mod_syn[j] = synSHB[j] * subgain[i * num_join]; - j++; - } - - for ( k = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * ( subwin[length - k - 1] * subgain[i * num_join] + subwin[k + 1] * subgain[( i + 1 ) * num_join] ); - j++; - } - } - for ( k = 0; k < join_length - length; k++ ) - { - mod_syn[j] = synSHB[j] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; - j++; - } - for ( k = 0; k < length; k++ ) - { - mod_syn[j] = synSHB[j] * subwin[length - k - 1] * subgain[( NUM_SHB_SUBGAINS - 1 ) * num_join]; - j++; - } - } - - /* adjust frame energy */ - oriNrg = (float) 1e-10; - synNrg = (float) 1e-10; - - for ( i = 0; i < l_shb_lahead; i++ ) - { - sig = oriSHB[i] * win_shb[i]; - oriNrg += sig * sig; - - sig = mod_syn[i] * win_shb[i]; - synNrg += sig * sig; - } - - for ( ; i < l_frame; i++ ) - { - oriNrg += oriSHB[i] * oriSHB[i]; - synNrg += mod_syn[i] * mod_syn[i]; - } - - for ( ; i < l_frame + l_shb_lahead; i++ ) - { - sig = oriSHB[i] * win_shb[l_frame + l_shb_lahead - 1 - i]; - oriNrg += sig * sig; - - sig = mod_syn[i] * win_shb[l_frame + l_shb_lahead - 1 - i]; - synNrg += sig * sig; - } - - frame_gain = (float) sqrt( oriNrg / synNrg ); - if ( ( synNrg ) == 0 ) - { - frame_gain = 0; - } - - *GainFrame = (float) frame_gain; - - return; -} - - -/*-------------------------------------------------------------------* - * pow_off_pk() - * - * Sums squares of SWB shape gain parameters away from peak values - *-------------------------------------------------------------------*/ - -static float pow_off_pk( - float a[], - const int16_t len, - const int16_t step ) -{ - int16_t i, j = 0; - float sum; - - sum = a[0] * a[0]; - for ( j = 0, i = 1; i < len; i += step ) - { - sum += a[i] * a[i]; - if ( a[i] > a[j] ) - { - j = i; - } - } - - sum -= a[j] * a[j]; - - return ( sum ); -} - -/*-------------------------------------------------------------------* - * pow_off_pk_corrected() - * - * Sums squares of SWB shape gain parameters away from peak values - *-------------------------------------------------------------------*/ - -static float pow_off_pk_corrected( - float a[], - const int16_t len, - const int16_t step ) -{ - int16_t i, j = 0; - float sum; - - sum = a[0] * a[0]; - for ( j = 0, i = step; i < len; i += step ) - { - sum += a[i] * a[i]; - if ( a[i] > a[j] ) - { - j = i; - } - } - - sum -= a[j] * a[j]; - - return ( sum ); -} - - -/*-------------------------------------------------------------------* - * EstimateSHBGainShape() - * - * Estimate temporal gain parameters - *-------------------------------------------------------------------*/ - -static void EstimateSHBGainShape( - const int16_t length, /* i : SHB overlap length */ - const float *oriSHB, /* i : target original SHB frame */ - const float *synSHB, /* i : shaped SHB excitation */ - float *subgain, /* o : estimate of gain shape */ - const float *subwin /* i : SHB subframe window */ -) -{ - const int16_t *skip; - int16_t i, k; - float sum_gain, oriNrg, synNrg, sig; - int16_t num_join, num_gains, join_length; - float normFact; - - num_join = NUM_SHB_SUBFR / NUM_SHB_SUBGAINS; - num_gains = NUM_SHB_SUBGAINS; - skip = skip_bands_SWB_TBE; - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - num_gains = NUM_SHB_SUBFR / 4; - skip = skip_bands_WB_TBE; - } - - /* calculate and normalize the subgain */ - sum_gain = (float) 1e-10; - oriNrg = 0.0f; - synNrg = 0.0f; - - if ( length == SHB_OVERLAP_LEN / 2 ) - { - for ( i = 0; i < NUM_SHB_SUBFR / 2; i++ ) - { - if ( ( i & 0x1 ) == 0 ) - { - oriNrg = 1e-10f; - synNrg = 1e-10f; - } - - if ( i == 0 ) - { - for ( k = 0; k < length / 2; k++ ) - { - sig = oriSHB[skip[i] + k] * subwin[2 * k + 2]; - oriNrg += sig * sig; - - sig = synSHB[skip[i] + k] * subwin[2 * k + 2]; - synNrg += sig * sig; - } - - for ( k = length / 2; k < length; k++ ) - { - sig = oriSHB[skip[i] + k]; - oriNrg += sig * sig; - - sig = synSHB[skip[i] + k]; - synNrg += sig * sig; - } - } - else - { - for ( k = 0; k < length; k++ ) - { - sig = oriSHB[skip[i] + k] * subwin[k + 1]; - oriNrg += sig * sig; - - sig = synSHB[skip[i] + k] * subwin[k + 1]; - synNrg += sig * sig; - } - } - - if ( i == NUM_SHB_SUBFR / 2 - 1 ) - { - for ( ; k < 2 * length - length / 2; k++ ) - { - sig = oriSHB[skip[i] + k] * subwin[3 * length - 2 * k - 2]; - oriNrg += sig * sig; - - sig = synSHB[skip[i] + k] * subwin[3 * length - 2 * k - 2]; - synNrg += sig * sig; - } - } - else - { - for ( ; k < 2 * length; k++ ) - { - sig = oriSHB[skip[i] + k] * subwin[2 * length - k - 1]; - oriNrg += sig * sig; - - sig = synSHB[skip[i] + k] * subwin[2 * length - k - 1]; - synNrg += sig * sig; - } - } - - if ( ( i & 0x1 ) == 1 ) - { - subgain[i / 2] = (float) sqrt( oriNrg / synNrg ); - if ( synNrg == 0 ) - { - subgain[i / 2] = 0; - } - - sum_gain += subgain[i / 2] * subgain[i / 2]; - } - } - } - else - { - join_length = num_join * length; - - for ( i = 0; i < num_gains; i++ ) - { - oriNrg = 1e-10f; - synNrg = 1e-10f; - - for ( k = 0; k < length; k++ ) - { - sig = oriSHB[join_length * i + k] * subwin[k + 1]; - oriNrg += sig * sig; - - sig = synSHB[join_length * i + k] * subwin[k + 1]; - synNrg += sig * sig; - } - - for ( k = 0; k < ( join_length - length ); k++ ) - { - sig = oriSHB[length + join_length * i + k]; - oriNrg += sig * sig; - - sig = synSHB[length + join_length * i + k]; - synNrg += sig * sig; - } - - for ( k = 0; k < length; k++ ) - { - sig = oriSHB[join_length * ( i + 1 ) + k] * subwin[length - k - 1]; - oriNrg += sig * sig; - - sig = synSHB[join_length * ( i + 1 ) + k] * subwin[length - k - 1]; - synNrg += sig * sig; - } - - subgain[i] = (float) sqrt( oriNrg / synNrg ); - if ( synNrg == 0 ) - { - subgain[i] = 0; - } - - sum_gain += subgain[i] * subgain[i]; - } - } - - /* normalize the subgain */ - normFact = (float) sqrt( 1.0f / sum_gain ); - if ( sum_gain == 0 ) - { - normFact = 0; - } - - for ( i = 0; i < num_gains; i++ ) - { - subgain[i] *= normFact; - } - - return; -} - - -/*-------------------------------------------------------------------* - * Quant_lower_LSF() - * - * Quantize the lower half of the LSF vector - *-------------------------------------------------------------------*/ - -static void Quant_lower_LSF( - const float lsf[], /* i : Input LSFs */ - float lsf_q[], /* o : Quantized LSFs */ - int16_t lsf_idx[] /* o : Quantized LSFs indices */ -) -{ - int16_t i; - - lsf_idx[0] = (int16_t) squant( lsf[0], &lsf_q[0], lsf_q_cb[0], lsf_q_cb_size[0] ); - for ( i = 1; i < NUM_Q_LSF; i++ ) - { - lsf_idx[i] = (int16_t) squant( lsf[i] - lsf_q[i - 1], &lsf_q[i], lsf_q_cb[i], lsf_q_cb_size[i] ); - lsf_q[i] += lsf_q[i - 1]; - } - - return; -} - -/*-------------------------------------------------------------------* - * Quant_mirror_point() - * - * Quantize the mirror point - *-------------------------------------------------------------------*/ - -static int16_t Quant_mirror_point( - const float lsf[], /* i : Input LSFs */ - const float lsf_q[], - float *m /* o : Mirror point */ -) -{ - float m_diff; - int16_t m_idx; - - m_diff = 0.5f * ( lsf[NUM_Q_LSF] - lsf_q[NUM_Q_LSF - 1] ); - m_idx = (int16_t) squant( m_diff, m, mirror_point_q_cb, MIRROR_POINT_Q_CB_SIZE ); - - *m += lsf_q[NUM_Q_LSF - 1]; - - return m_idx; -} - -/*-------------------------------------------------------------------* - * Find_LSF_grid() - * - * Find the best grid for the LSFs - *-------------------------------------------------------------------*/ - -static int16_t Find_LSF_grid( - const float lsf[], /* i : Input LSFs */ - float lsf_q[], /* o : Quantized LSFs */ - const float m /* i : Mirror point */ -) -{ - float lsf_map[NUM_MAP_LSF]; - float grid[NUM_LSF_GRIDS][NUM_MAP_LSF]; - float offset; - float last_q_lsf; - float lsf_t[NUM_MAP_LSF]; - float lsf_smooth[NUM_MAP_LSF]; - float D, D_best; - int16_t I_best = 0; - int16_t i, j; - float scale; - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_map[i] = 2 * m - lsf_q[NUM_MAP_LSF - 1 - i]; - } - - if ( m > MAX_LSF / 2 ) - { - offset = lsf_map[0]; - scale = ( MAX_LSF - m ) / m; - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_map[i] = ( lsf_map[i] - offset ) * scale + offset; - } - } - - last_q_lsf = lsf_q[NUM_Q_LSF - 1]; - scale = MAX_LSF - last_q_lsf; - - for ( i = 0; i < NUM_LSF_GRIDS; i++ ) - { - for ( j = 0; j < NUM_MAP_LSF; j++ ) - { - grid[i][j] = lsf_grid[i][j] * scale + last_q_lsf; - } - } - - D_best = QUANT_DIST_INIT; - for ( i = 0; i < NUM_LSF_GRIDS; i++ ) - { - D = EPSILON; - for ( j = 0; j < NUM_MAP_LSF; j++ ) - { - lsf_t[j] = ( 1 - grid_smoothing[j] ) * lsf_map[j] + grid_smoothing[j] * grid[i][j]; - D += ( lsf_t[j] - lsf[NUM_Q_LSF + j] ) * ( lsf_t[j] - lsf[NUM_Q_LSF + j] ); - } - - if ( D < D_best ) - { - mvr2r( lsf_t, lsf_smooth, NUM_MAP_LSF ); - D_best = D; - I_best = i; - } - } - - for ( i = 0; i < NUM_MAP_LSF; i++ ) - { - lsf_q[NUM_Q_LSF + i] = lsf_smooth[i]; - } - - return I_best; -} - -/*-------------------------------------------------------------------* - * gainFrSmooth_En() - * - * Gain frame smoothing and attenuation control - *-------------------------------------------------------------------*/ - -static void gainFrSmooth_En( - TD_BWE_ENC_HANDLE hSWB_TD, - const int16_t last_extl, - float *shb_frame, - const float *lpc_shb, - const float *lsp_shb, - float *MA_lsp_shb_spacing, - int16_t *frGainAttenuate, - int16_t *frGainSmoothEn ) -{ - float lsp_slow_evol_rate = 0, lsp_fast_evol_rate = 0, lsp_spacing = 0.5f; - float temp_shb_frame[L_FRAME16k + L_SHB_LAHEAD]; - int16_t i; - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsp_spacing = min( lsp_spacing, (float) ( i == 0 ? lsp_shb[0] : ( lsp_shb[i] - lsp_shb[i - 1] ) ) ); - - /* estimate the mean square error in lsps from current frame to past frames */ - lsp_slow_evol_rate += ( lsp_shb[i] - hSWB_TD->lsp_shb_slow_interpl[i] ) * ( lsp_shb[i] - hSWB_TD->lsp_shb_slow_interpl[i] ); - lsp_fast_evol_rate += ( lsp_shb[i] - hSWB_TD->lsp_shb_fast_interpl[i] ) * ( lsp_shb[i] - hSWB_TD->lsp_shb_fast_interpl[i] ); - - /* update the slow and fast interpolation lsps for next frame */ - hSWB_TD->lsp_shb_slow_interpl[i] = 0.7f * hSWB_TD->lsp_shb_slow_interpl[i] + 0.3f * lsp_shb[i]; - hSWB_TD->lsp_shb_fast_interpl[i] = 0.3f * hSWB_TD->lsp_shb_fast_interpl[i] + 0.7f * lsp_shb[i]; - } - - if ( last_extl != SWB_TBE && last_extl != FB_TBE && lsp_spacing < 0.008f ) - { - hSWB_TD->lsp_shb_spacing[0] = lsp_spacing; - hSWB_TD->lsp_shb_spacing[1] = lsp_spacing; - hSWB_TD->lsp_shb_spacing[2] = lsp_spacing; - hSWB_TD->prev_frGainAtten = 1; - } - - *MA_lsp_shb_spacing = 0.1f * hSWB_TD->lsp_shb_spacing[0] + 0.2f * hSWB_TD->lsp_shb_spacing[1] + 0.3f * hSWB_TD->lsp_shb_spacing[2] + 0.4f * lsp_spacing; - - hSWB_TD->lsp_shb_spacing[0] = hSWB_TD->lsp_shb_spacing[1]; - hSWB_TD->lsp_shb_spacing[1] = hSWB_TD->lsp_shb_spacing[2]; - hSWB_TD->lsp_shb_spacing[2] = lsp_spacing; - - *frGainAttenuate = 0; - *frGainSmoothEn = 0; - - if ( ( lsp_spacing < 0.008f && ( *MA_lsp_shb_spacing < 0.005f || hSWB_TD->prev_frGainAtten == 1 ) ) || lsp_spacing <= 0.0032f ) - { - *frGainAttenuate = 1; - mvr2r( shb_frame, temp_shb_frame, L_FRAME16k + L_SHB_LAHEAD ); - - fir( temp_shb_frame, lpc_shb, shb_frame, hSWB_TD->shb_inv_filt_mem, L_FRAME16k + L_SHB_LAHEAD, LPC_SHB_ORDER, 1 ); - - if ( lsp_slow_evol_rate < 0.001f && lsp_fast_evol_rate < 0.001f ) - { - *frGainSmoothEn = 1; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * Quant_BWE_LSF() - * - * Quantize super highband spectral envolope - *-------------------------------------------------------------------*/ - -static void LVQQuant_BWE_LSF( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle*/ - const float lsf_shb[], /* i : unquanitzed LSFs */ - float Q_lsfs[], /* o : quanitzed LSFs */ - int16_t nbits ) -{ - float lsf[LPC_SHB_ORDER]; - float lsf_q[LPC_SHB_ORDER]; - int16_t i, c2, dim1 = 6; - int16_t levels[1], numbits_VQ; - - float w[8] = { 5.0f, 5.0f, 2.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f }; - float cand[LPC_SHB_ORDER], quant[LPC_SHB_ORDER], e[2], ftmp; - const float *cb_stage; - int16_t indices_firstVQ[LSFMBEST]; - - int16_t Idx, idx_lead, idx_scale; - UWord32 LVQ_index; - float dd[LATTICE_DIM], cv_out[LATTICE_DIM]; - int16_t bits_lvq, predictor_bits, empty_bits; - - empty_bits = 0; /* This is the difference to 21 bits, if we want lower number of bits */ - nbits -= empty_bits; /* THIS IS TO SIMULATE DIFFERENT NUMBER OF input BITS - should be removed */ - - c2 = NUM_BITS_SHB_MSLVQ - nbits; - - numbits_VQ = config_LSF_BWE[c2 * 3]; - levels[0] = config_LSF_BWE[c2 * 3 + 1]; - predictor_bits = config_LSF_BWE[c2 * 3 + 2]; - - if ( nbits < 19 ) - { - cb_stage = cb_LSF_BWE[1]; - } - else - { - cb_stage = cb_LSF_BWE[0]; - } - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsf[i] = 0.5f - lsf_shb[LPC_SHB_ORDER - 1 - i]; - } - - /* remove mean */ - v_sub( lsf, SHB_LSF_mean, Q_lsfs, LPC_SHB_ORDER ); - - /* 6D multi-stage 6bit coding */ - first_VQstages( &cb_stage, Q_lsfs, levels, 1, w, dim1, 3000, indices_firstVQ ); - - - /* 8D MSLVQ coding */ - bits_lvq = nbits - numbits_VQ - predictor_bits; - mvr2r( SHB_LSF_mean, cand, LPC_SHB_ORDER ); - Idx = indices_firstVQ[0]; - v_add( cand, cb_stage + Idx * dim1, cand, dim1 ); - - /* LVQ quantization */ - mvr2r( cand, quant, LPC_SHB_ORDER ); - v_sub( lsf, cand, dd, LATTICE_DIM ); - mslvq( dd, quant, cv_out, &idx_lead, &idx_scale, w, 0, ( nbits < 19 ), bits_lvq ); - - if ( idx_scale == -1 ) - { - set_zero( cv_out, LATTICE_DIM ); - } - v_add( cand, quant, cand, LATTICE_DIM ); - - /* arrange the LSF candidate vector prior to selection to an ascending order*/ - v_sort_float( cand, 0, LPC_SHB_ORDER - 1 ); - - set_zero( Q_lsfs, LPC_SHB_ORDER ); - /* mvr2r( mean_lsf, Q_lsfs, LPC_SHB_ORDER ); */ - - v_add( Q_lsfs, cb_stage + Idx * dim1, Q_lsfs, dim1 ); - - /* write VQ indexes */ - push_indice( hBstr, IND_SHB_LSF, Idx, numbits_VQ ); - - /* write MSLVQ index */ - LVQ_index = index_lvq_SHB( idx_lead, idx_scale, bits_lvq, cv_out, ( nbits < 19 ) ); - - if ( bits_lvq > 15 ) - { - push_indice( hBstr, IND_SHB_LSF, (int16_t) ( ( LVQ_index ) & ( 0xffff >> 1 ) ), 15 ); - push_indice( hBstr, IND_SHB_LSF, (int16_t) ( ( LVQ_index ) >> 15 ) & ( 0xffff >> 1 ), bits_lvq - 15 ); - } - else - { - push_indice( hBstr, IND_SHB_LSF, (int16_t) LVQ_index, bits_lvq ); - } - - v_add( Q_lsfs, quant, lsf_q, LATTICE_DIM ); /* quantized mean removed data for first 8 dim*/ - - /* predict last 2 components */ - if ( predictor_bits == 0 ) - { - lsf_q[LATTICE_DIM] = dotp( lsf_q, LastCoefPred_0bit, LATTICE_DIM ); - lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_0bit[LATTICE_DIM + 1], LATTICE_DIM ); - } - else - { - v_sub( &lsf[LATTICE_DIM], &SHB_LSF_mean[LATTICE_DIM], &lsf_q[LATTICE_DIM], 2 ); - - for ( i = 0; i < 2; i++ ) - { - ftmp = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * i], LATTICE_DIM ) - lsf_q[LATTICE_DIM]; - e[i] = ( ftmp * ftmp ); - ftmp = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * i + LATTICE_DIM + 1], LATTICE_DIM ) - lsf_q[LATTICE_DIM + 1]; - e[i] += ( ftmp * ftmp ); - } - - c2 = minimum( e, 2, &ftmp ); - - lsf_q[LATTICE_DIM] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * c2], LATTICE_DIM ); - lsf_q[LATTICE_DIM + 1] = dotp( lsf_q, &LastCoefPred_1bit[2 * ( LATTICE_DIM + 1 ) * c2 + LATTICE_DIM + 1], LATTICE_DIM ); - - push_indice( hBstr, IND_SHB_LSF, c2, 1 ); - } - - if ( empty_bits > 0 ) - { - push_indice( hBstr, IND_SHB_LSF, 0, empty_bits ); - } - - v_add( SHB_LSF_mean, lsf_q, lsf_q, LPC_SHB_ORDER ); - v_sort_float( lsf_q, 0, LPC_SHB_ORDER - 1 ); - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - Q_lsfs[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; - } - - return; -} - -/*-------------------------------------------------------------------* - * Quant_BWE_LSF() - * - * Quantize super highband spectral envolope - *-------------------------------------------------------------------*/ - -static void Quant_BWE_LSF( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - const int16_t codec_mode, /* i : codec mode */ - const float lsf_shb[], /* i : unquanitzed LSFs */ - float Q_lsfs[], /* o : quanitzed LSFs */ - const int32_t extl_brate /* i : extension layer bit rate */ -) -{ - float lsf[LPC_SHB_ORDER]; - float lsf_q[LPC_SHB_ORDER]; - int16_t lsf_idx[NUM_Q_LSF]; - int16_t i; - int16_t m_idx; - float m; - int16_t grid_idx; - - if ( extl_brate == SWB_TBE_1k75 ) - { - LVQQuant_BWE_LSF( hBstr, lsf_shb, Q_lsfs, NUM_BITS_SHB_MSLVQ ); - } - else - { - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - lsf[i] = 0.5f - lsf_shb[LPC_SHB_ORDER - 1 - i]; - } - - Quant_lower_LSF( lsf, lsf_q, lsf_idx ); - - for ( i = 0; i < NUM_Q_LSF; i++ ) - { - if ( codec_mode == MODE2 ) - { - hBWE_TD->lsf_idx[i] = lsf_idx[i]; - } - else - { - push_indice( hBstr, IND_SHB_LSF, lsf_idx[i], lsf_q_num_bits[i] ); - } - } - - m_idx = Quant_mirror_point( lsf, lsf_q, &m ); - - if ( codec_mode == MODE2 ) - { - hBWE_TD->m_idx = m_idx; - } - else - { - push_indice( hBstr, IND_SHB_MIRROR, m_idx, MIRROR_POINT_BITS ); - } - - grid_idx = Find_LSF_grid( lsf, lsf_q, m ); - - if ( codec_mode == MODE2 ) - { - hBWE_TD->grid_idx = grid_idx; - } - else - { - push_indice( hBstr, IND_SHB_GRID, grid_idx, NUM_LSF_GRID_BITS ); - } - - for ( i = 0; i < LPC_SHB_ORDER; i++ ) - { - Q_lsfs[i] = 0.5f - lsf_q[LPC_SHB_ORDER - 1 - i]; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * closest_centroid() - * - * Determine a set of closest VQ centroids for a given input - *-------------------------------------------------------------------*/ - -static int16_t closest_centroid( - const float *data, /* i : input data */ - const float *weights, /* i : weights */ - const float *quantizer, /* i : quantizer table */ - const int16_t centroids, /* i : number of centroids */ - const int16_t length ) /* i : dimension of quantiser */ -{ - int16_t i, j, index; - float tmp, werr, best_werr; - - index = 0; - best_werr = 1.0E20f; - - for ( i = 0; i < centroids; i++ ) - { - werr = 0.0f; - for ( j = 0; j < length; j++ ) - { - tmp = (float) *( data + j ) - quantizer[i * length + j]; - werr += (float) ( *( weights + j ) * tmp * tmp ); - if ( werr > best_werr ) - { - break; - } - } - - if ( werr < best_werr ) - { - best_werr = werr; - index = i; - } - } - - return index; -} - -/*-------------------------------------------------------------------* - * QuantizeSHBsubgains() - * - * Quantize super highband temporal gains - *-------------------------------------------------------------------*/ - -static void QuantizeSHBsubgains( - Encoder_State *st, /* i/o: encoder state structure */ - float subgains[], /* i/o: super highband temporal gains */ - const int16_t extl /* i : extension layer */ -) -{ - int16_t i, idxSubGain; - float Unit_weights10[NUM_SHB_SUBFR]; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( extl == WB_TBE ) - { - set_f( Unit_weights10, 1.0f, (int16_t) NUM_SHB_SUBFR / 4 ); - - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - subgains[i + NUM_SHB_SUBFR / 4] = 20.0f * (float) log10( subgains[i] ); - } - - idxSubGain = closest_centroid( subgains + NUM_SHB_SUBFR / 4, Unit_weights10, HBCB_SubGain5bit, 1 << NUM_BITS_SHB_SUBGAINS, NUM_SHB_SUBFR / 4 ); - - mvr2r( HBCB_SubGain5bit + idxSubGain * NUM_SHB_SUBFR / 4, subgains, NUM_SHB_SUBFR / 4 ); - - push_indice( hBstr, IND_SHB_SUBGAIN, idxSubGain, NUM_BITS_SHB_SUBGAINS ); - for ( i = 0; i < NUM_SHB_SUBFR / 4; i++ ) - { - subgains[i] = (float) pow( 10.0f, subgains[i] / 20.0f ); - } - - for ( i = NUM_SHB_SUBFR / 2 - 1; i >= 0; i-- ) - { - subgains[i] = subgains[i / 2]; - } - } - else - { - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - subgains[i] = (float) log10( subgains[i] + 0.001f ); - } - - idxSubGain = (int16_t) vquant( subgains, 0, subgains, SHBCB_SubGain5bit, NUM_SHB_SUBGAINS, 1 << NUM_BITS_SHB_SUBGAINS ); - - for ( i = 0; i < NUM_SHB_SUBGAINS; i++ ) - { - subgains[i] = (float) pow( 10.0, subgains[i] ); - } - - for ( i = NUM_SHB_SUBFR - 1; i >= 0; i-- ) - { - subgains[i] = subgains[i * NUM_SHB_SUBGAINS / NUM_SHB_SUBFR]; - } - - if ( st->codec_mode == MODE2 ) - { - st->hBWE_TD->idxSubGains = idxSubGain; - } - else - { - push_indice( hBstr, IND_SHB_SUBGAIN, idxSubGain, NUM_BITS_SHB_SUBGAINS ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * Quant_shb_ener_sf() - * - * Quantize SHB subframe energies - *-------------------------------------------------------------------*/ - -static void Quant_shb_ener_sf( - Encoder_State *st, /* i/o: encoder state structure */ - float *shb_ener_sf /* i/o: super highband subframe energies */ -) -{ - int16_t idxSubEner; - float temp_shb_ener_sf, sum; - - sum = *shb_ener_sf; - *shb_ener_sf = (float) log10( sum ); - - temp_shb_ener_sf = 0; - idxSubEner = usquant( *shb_ener_sf, &temp_shb_ener_sf, 0, 0.042f, 1 << NUM_BITS_SHB_ENER_SF ); - *shb_ener_sf = (float) pow( 10.0, temp_shb_ener_sf ); - - if ( st->codec_mode == MODE2 ) - { - st->hBWE_TD->idx_shb_fr_gain = idxSubEner; - } - else - { - push_indice( st->hBstr, IND_SHB_ENER_SF, idxSubEner, NUM_BITS_SHB_ENER_SF ); - } - - return; -} - - -/*-------------------------------------------------------------------* - * Quant_shb_res_gshape() - * - * Quantize SHB gain shapes in residual domain - *-------------------------------------------------------------------*/ - -static void Quant_shb_res_gshape( - Encoder_State *st, /* i/o: encoder state structure */ - float shb_res_gshape[] /* i/o: super highband gain shapes */ -) -{ - int16_t i, idxSubGain[NB_SUBFR16k]; - - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - idxSubGain[i] = usquant( shb_res_gshape[i], &shb_res_gshape[i], 0.125, 0.125f, 1 << NUM_BITS_SHB_RES_GS ); - - if ( st->codec_mode == MODE2 ) - { - st->hBWE_TD->idx_res_gs[i] = idxSubGain[i]; - } - else - { - push_indice( st->hBstr, IND_SHB_RES_GS + i, idxSubGain[i], NUM_BITS_SHB_RES_GS ); - } - } - - return; -} - -/*-------------------------------------------------------------------* - * QuantizeSHBframegains() - * - * Quantize super highband frame gain - *-------------------------------------------------------------------*/ - -static void QuantizeSHBframegain( - Encoder_State *st, /* i/o: encoder state structure */ - float *GainFrame, /* i/o: Gain */ - const int16_t extl, /* i : extension layer */ - const int32_t extl_brate, /* i : extension layer bitrate */ - int16_t *rf_gainFrame_ind, - const int16_t flag_conservative /* i : flag to indicate more conservative gain quantization */ -) -{ - int16_t idxFrameGain; - float Q_GainFrame; - float Unit_weights1 = 1.0f; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - float GainFrameLog; - - if ( extl == WB_TBE ) - { - determine_gain_weights( GainFrame, &( Unit_weights1 ), 1 ); - - if ( extl_brate == WB_TBE_0k35 ) - { - singlevectortest_gain( GainFrame, 1, 1 << NUM_BITS_SHB_FrameGain_LBR_WB, &idxFrameGain, &( Unit_weights1 ), &Q_GainFrame, SHBCB_FrameGain16 ); - - if ( Q_GainFrame > *GainFrame * 1.06f && idxFrameGain > 0 ) /* 1.06 = +0.5 dB */ - { - idxFrameGain--; - Q_GainFrame = SHBCB_FrameGain16[idxFrameGain]; - } - - if ( st->codec_mode == MODE2 ) - { - st->hBWE_TD->gFrame_WB = idxFrameGain; - } - else - { - push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FrameGain_LBR_WB ); - } - - if ( st->rf_mode ) - { - *rf_gainFrame_ind = idxFrameGain; - } - } - else - { - singlevectortest_gain( GainFrame, 1, 1 << NUM_BITS_SHB_FrameGain, &idxFrameGain, &( Unit_weights1 ), &Q_GainFrame, SHBCB_FrameGain64 ); - - push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FrameGain ); - - if ( st->rf_mode ) - { - *rf_gainFrame_ind = idxFrameGain; - } - } - } - else - { - GainFrameLog = (float) log10( *GainFrame + 0.001f ); - - if ( st->extl_brate == SWB_TBE_1k75 ) - { - idxFrameGain = (int16_t) usquant( GainFrameLog, &Q_GainFrame, SHB_GAIN_QLOW_1k75, SHB_GAIN_QDELTA_1k75, 1 << NUM_BITS_SHB_FRAMEGAIN_1k75 ); - } - else - { - idxFrameGain = (int16_t) usquant( GainFrameLog, &Q_GainFrame, SHB_GAIN_QLOW, SHB_GAIN_QDELTA, 1 << NUM_BITS_SHB_FRAMEGAIN ); - } - - while ( Q_GainFrame > GainFrameLog + 0.495 * SHB_GAIN_QDELTA && idxFrameGain != 0 ) - { - idxFrameGain = idxFrameGain - 1; - Q_GainFrame = idxFrameGain * SHB_GAIN_QDELTA + SHB_GAIN_QLOW; - } - - if ( flag_conservative && ( Q_GainFrame > GainFrameLog + 0.41 * SHB_GAIN_QDELTA ) && idxFrameGain != 0 ) - { - /* be more conservative in the quantization process -> prevent energy overshoot */ - idxFrameGain = idxFrameGain - 1; - Q_GainFrame = idxFrameGain * SHB_GAIN_QDELTA + SHB_GAIN_QLOW; - } - - Q_GainFrame = (float) pow( 10.0, Q_GainFrame ); - if ( st->codec_mode == MODE2 ) - { - st->hBWE_TD->idxFrameGain = idxFrameGain; - } - else - { - if ( st->extl_brate == SWB_TBE_1k75 ) - { - push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FRAMEGAIN_1k75 ); - } - else - { - push_indice( hBstr, IND_SHB_FRAMEGAIN, idxFrameGain, NUM_BITS_SHB_FRAMEGAIN ); - } - } - - if ( st->rf_mode ) - { - *rf_gainFrame_ind = idxFrameGain; - } - } - - if ( st->rf_mode ) - { - /*Currently intended for SWB only. Modify for WB is needed later!*/ - if ( st->hRF->rf_frame_type == RF_NELP ) - { - *rf_gainFrame_ind = idxFrameGain; /* NELP Frame uses full 5 bits */ - } - else /*RF_ALLPRED, RF_GENPRED, RF_NOPRED modes*/ - { - if ( *GainFrame <= 1.25 ) /* [0 to 1.25] range --> 0.5*/ - { - *rf_gainFrame_ind = 0; - } - else if ( *GainFrame <= 3 ) /* (1.25 to 3] --> 2 */ - { - *rf_gainFrame_ind = 1; - } - else if ( *GainFrame <= 6 ) /* (3 to 6] --> 4 */ - { - *rf_gainFrame_ind = 2; - } - else /* (6 to Inf) --> 8 */ - { - *rf_gainFrame_ind = 3; - } - } - } - - *GainFrame = Q_GainFrame; - - return; -} - - -/*-------------------------------------------------------------------* - * determine_gain_weights() - * - * Determine weights for gain quantization - *-------------------------------------------------------------------*/ - -static void determine_gain_weights( - const float *gain, /* i : Gain parameter */ - float *weights, /* o : gain weights */ - const int16_t dims /* i : number of gains */ -) -{ - int16_t j; - - for ( j = 0; j < dims; j++ ) - { - if ( gain[j] > 1e-6 ) - { - weights[j] = (float) ( pow( fabs( gain[j] ), -0.9f ) ); - } - else - { - weights[j] = 501.187233628f; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * singlevectortest_gain() - * - * VQ for coding superhigh band gain - *-------------------------------------------------------------------*/ - -static void singlevectortest_gain( - const float *inp, /* i : input gain vector */ - const int16_t dimen, /* i : dimension of the input vector */ - const int16_t cb_size, /* i : codebook size */ - int16_t *index, /* o : quanitzation index */ - const float *weight, /* i : Weights for the quanitzation */ - float *recon, /* o : Reconstruction */ - const float *codebook /* i : Codebook */ -) -{ - int16_t k, interNum, flag; - float meanU, meanQ; - int16_t least[4]; - - interNum = 4; - - return_M_Least( inp, dimen, codebook, cb_size, weight, interNum, least ); - - meanU = sum_f( inp, dimen ); - mvr2r( codebook + dimen * least[0], recon, dimen ); - - index[0] = least[0]; - flag = 0; - for ( k = 0; k < interNum; k++ ) - { - if ( flag == 0 ) - { - meanQ = sum_f( codebook + dimen * least[k], dimen ); - - if ( meanQ <= 1.1 * meanU ) - { - flag = 1; - mvr2r( codebook + dimen * least[k], recon, dimen ); - index[0] = least[k]; - } - } - } - - return; -} - -/*-------------------------------------------------------------------* - * return_M_Least() - * - * - *-------------------------------------------------------------------*/ - -static void return_M_Least( - const float *inp, /* i : input */ - const int16_t n_cols, /* i : vector size */ - const float *codebook, /* i : codebook */ - const int16_t num_grp, /* i : number of centroids */ - const float *weight, /* i : gain weights */ - const int16_t interNum, /* i : number on short list prior to 2nd stage search*/ - int16_t *least /* o : return value */ -) -{ - int16_t i, k; - float distance[1024], mindist, tmp; - - mindist = QUANT_DIST_INIT; - for ( i = 0; i < num_grp; i++ ) - { - distance[i] = 0; - for ( k = 0; k < n_cols; k++ ) - { - tmp = inp[k] - codebook[n_cols * i + k]; - distance[i] += weight[k] * tmp * tmp; - } - - if ( distance[i] < mindist ) - { - mindist = distance[i]; - least[0] = i; - } - } - - distance[least[0]] = QUANT_DIST_INIT; - - for ( k = 1; k < interNum; k++ ) - { - mindist = QUANT_DIST_INIT; - for ( i = 0; i < num_grp; i++ ) - { - if ( distance[i] < mindist ) - { - mindist = distance[i]; - least[k] = i; - } - } - - distance[least[k]] = QUANT_DIST_INIT; - } - - return; -} - -/*-------------------------------------------------------------------* - * fb_tbe_reset_enc() - * - * Reset the extra parameters needed for FB TBE encoding - *-------------------------------------------------------------------*/ - -void fb_tbe_reset_enc( - float elliptic_bpf_2_48k_mem[][4], - float *prev_fb_energy ) -{ - set_f( elliptic_bpf_2_48k_mem[0], 0.0f, 4 ); - set_f( elliptic_bpf_2_48k_mem[1], 0.0f, 4 ); - set_f( elliptic_bpf_2_48k_mem[2], 0.0f, 4 ); - set_f( elliptic_bpf_2_48k_mem[3], 0.0f, 4 ); - *prev_fb_energy = 0.0f; - - return; -} - -/*-------------------------------------------------------------------* - * fb_tbe_enc() - * - * FB TBE encoder, 14(resp. 15.5) - 20 kHz band encoding module - *-------------------------------------------------------------------*/ - -void fb_tbe_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const float new_input[], /* i : input speech at 48 kHz sample rate */ - const float fb_exc[] /* i : FB excitation from the SWB part */ -) -{ - float fb_exc_energy, ratio_float, temp2; - float tmp_vec[L_FRAME48k]; - int16_t idxGain; - float input_fhb[L_FRAME48k]; - int16_t Sample_Delay_HP; - - TD_BWE_ENC_HANDLE hBWE_TD = st->hBWE_TD; - - if ( st->element_mode == IVAS_CPE_DFT ) - { - /*don't process first samples of redressed lookahead (energy is not relevant for these samples)*/ - elliptic_bpf_48k_generic( new_input - NS2SA( 48000, DELAY_FIR_RESAMPL_NS ), tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem, full_band_bpf_2 ); - } - else - { - elliptic_bpf_48k_generic( new_input, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem, full_band_bpf_2 ); - } - - if ( st->element_mode > IVAS_CPE_DFT || st->element_mode == IVAS_SCE ) - { - if ( st->L_frame == L_FRAME ) - { - Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS ) - L_FRAME48k / 2; - } - else - { - Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_16k_NS ) - L_FRAME48k / 2; - } - } - else - { - Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2; - } - - if ( st->last_extl != FB_TBE ) - { - set_f( hBWE_TD->old_input_fhb, 0.0f, Sample_Delay_HP ); - set_f( tmp_vec, 0.0f, 320 ); - } - - mvr2r( hBWE_TD->old_input_fhb, input_fhb, Sample_Delay_HP ); - mvr2r( tmp_vec, input_fhb + Sample_Delay_HP, L_FRAME48k - Sample_Delay_HP ); - mvr2r( tmp_vec + L_FRAME48k - Sample_Delay_HP, hBWE_TD->old_input_fhb, Sample_Delay_HP ); - - /* Compute the energy of the Fullband component over 4kHz (16kHz to 20kHz) */ - temp2 = sum2_f( input_fhb, L_FRAME48k / 2 ) + hBWE_TD->prev_fb_energy; - hBWE_TD->prev_fb_energy = sum2_f( input_fhb + L_FRAME48k / 2, L_FRAME48k / 2 ); - fb_exc_energy = sum2_f( fb_exc, L_FRAME16k ) + EPSILON; - ratio_float = (float) sqrt( temp2 / fb_exc_energy ); - idxGain = (int16_t) ( log2_f( (float) ratio_float ) + 0.5f ); - idxGain = max( 0, min( 15, idxGain ) ); - ratio_float = (float) ( 1 << idxGain ); - - if ( st->codec_mode == MODE2 ) - { - hBWE_TD->idxGain = idxGain; - } - else - { - push_indice( st->hBstr, IND_FB_SLOPE, idxGain, NUM_BITS_FB_FRAMEGAIN_TBE ); - } - - return; -} - -/*---------------------------------------------------------------------* - * tbe_write_bitstream() - * - * Write TBE bitstream. - *---------------------------------------------------------------------*/ - -void tbe_write_bitstream( - Encoder_State *st ) -{ - int16_t i; - TD_BWE_ENC_HANDLE hBWE_TD = st->hBWE_TD; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - if ( ( st->rf_mode || st->total_brate == ACELP_9k60 ) && st->bwidth == WB ) - { - /* WB LSF */ - push_next_indice( hBstr, hBWE_TD->lsf_WB, NUM_BITS_LBR_WB_LSF ); - - /* WB frame */ - push_next_indice( hBstr, hBWE_TD->gFrame_WB, NUM_BITS_SHB_FrameGain_LBR_WB ); - } - else if ( st->total_brate >= ACELP_9k60 && st->total_brate <= ACELP_32k && ( st->bwidth == SWB || st->bwidth == FB ) ) - { - /* LSF coefficients */ - - if ( st->rf_mode || st->total_brate == ACELP_9k60 ) - { - push_next_indice( hBstr, hBWE_TD->lsf_idx[0], 8 ); - } - else - { - for ( i = 0; i < NUM_Q_LSF; i++ ) - { - push_next_indice( hBstr, hBWE_TD->lsf_idx[i], lsf_q_num_bits[i] ); - } - - /* LSF mirror points */ - push_next_indice( hBstr, hBWE_TD->m_idx, MIRROR_POINT_BITS ); - - /* LSF grid points */ - push_next_indice( hBstr, hBWE_TD->grid_idx, NUM_LSF_GRID_BITS ); - } - - /* Gain shape */ - push_next_indice( hBstr, hBWE_TD->idxSubGains, NUM_BITS_SHB_SUBGAINS ); - - /* frame gain */ - push_next_indice( hBstr, hBWE_TD->idxFrameGain, NUM_BITS_SHB_FRAMEGAIN ); - - if ( st->total_brate >= ACELP_24k40 ) - { - /* sub frame energy*/ - push_next_indice( hBstr, hBWE_TD->idx_shb_fr_gain, NUM_BITS_SHB_ENER_SF ); - - /* gain shapes residual */ - for ( i = 0; i < NB_SUBFR16k; i++ ) - { - push_next_indice( hBstr, hBWE_TD->idx_res_gs[i], NUM_BITS_SHB_RES_GS ); - } - - /* voicing factor */ - push_next_indice( hBstr, hBWE_TD->idx_mixFac, NUM_BITS_SHB_VF ); - } - - if ( st->tec_tfa == 1 ) - { - push_next_indice( hBstr, st->tec_flag, BITS_TEC ); - push_next_indice( hBstr, st->tfa_flag, BITS_TFA ); - } - } - - if ( st->bwidth == FB ) - { - push_next_indice( hBstr, hBWE_TD->idxGain, 4 ); - } - - return; -} - -/*---------------------------------------------------------------------* - * TBEreset_enc() - * - * - *---------------------------------------------------------------------*/ - -void TBEreset_enc( - TD_BWE_ENC_HANDLE hBWE_TD, /* i/o: TD BWE data handle */ - const int16_t last_core, /* i : last core */ - const int16_t bwidth /* i : audio bandwidth */ -) -{ - if ( last_core != ACELP_CORE ) - { - set_f( hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); - hBWE_TD->bwe_non_lin_prev_scale = 0.f; - } - - if ( bwidth == WB ) - { - wb_tbe_extras_reset( hBWE_TD->mem_genSHBexc_filt_down_wb2, hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - - set_f( hBWE_TD->mem_genSHBexc_filt_down_shb, 0, 7 ); - set_f( hBWE_TD->state_lpc_syn, 0, 10 ); - set_f( hBWE_TD->state_syn_shbexc, 0, L_SHB_LAHEAD / 4 ); - set_f( hBWE_TD->syn_overlap, 0, L_SHB_LAHEAD ); - set_f( hBWE_TD->mem_csfilt, 0, 2 ); - } - else if ( bwidth == SWB || bwidth == FB ) - { - set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - - swb_tbe_reset( hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, hBWE_TD->syn_overlap, hBWE_TD->state_syn_shbexc, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), hBWE_TD->mem_stp_swb, &( hBWE_TD->gain_prec_swb ) ); - - if ( bwidth == FB ) - { - set_f( hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_enc( hBWE_TD->elliptic_bpf_2_48k_mem, &hBWE_TD->prev_fb_energy ); - } - } - - return; -} -#endif diff --git a/lib_enc/swb_tbe_enc_fx.c b/lib_enc/swb_tbe_enc_fx.c index 96d9fa399..d9a3d5ab8 100644 --- a/lib_enc/swb_tbe_enc_fx.c +++ b/lib_enc/swb_tbe_enc_fx.c @@ -110,7 +110,6 @@ static void gainFrSmooth_En_fx( Encoder_State *st_fx, Word16 *frGainAttenuate, Word16 *frGainSmoothEn ); -#ifdef IVAS_FLOAT_FIXED static void gainFrSmooth_En_ivas_fx( Encoder_State *st_fx, Word16 *shb_frame_fx /* Q_in */, const Word16 *lpc_shb_fx /* Q12 */, @@ -118,7 +117,6 @@ static void gainFrSmooth_En_ivas_fx( Encoder_State *st_fx, Word16 *MA_lsp_shb_spacing /* Q15 */, Word16 *frGainAttenuate /* Q0 */, Word16 *frGainSmoothEn /* Q0 */ ); -#endif /*-------------------------------------------------------------------* @@ -6507,7 +6505,6 @@ static void gainFrSmooth_En_fx( Encoder_State *st_fx, } } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * gainFrSmooth_En_ivas_fx() * @@ -6633,7 +6630,6 @@ static void gainFrSmooth_En_ivas_fx( Encoder_State *st_fx, } } } -#endif #define MAXINT32 MAX_32 static void first_VQstages_fx( @@ -7581,7 +7577,6 @@ void TBEreset_enc_fx( } } -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * InitSWBencBufferStates() * @@ -7620,4 +7615,3 @@ void InitSWBencBufferStates_fx( return; } -#endif diff --git a/lib_enc/tcq_core_enc.c b/lib_enc/tcq_core_enc.c index 9ce8750d8..d54084f0b 100644 --- a/lib_enc/tcq_core_enc.c +++ b/lib_enc/tcq_core_enc.c @@ -48,425 +48,3 @@ * * Main Generic Audio Encoder Routine for LR-MDCT *---------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -ivas_error tcq_core_LR_enc( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - int32_t inp_vector[], - const float coefs_norm[], - float coefs_quant[], - const int16_t bit_budget, /* number of bits */ - const int16_t BANDS, - const int16_t *sfm_start, - const int16_t *sfm_end, - const int16_t *sfmsize, - Word32 *Rk_fx, - int16_t *npulses, - int16_t *k_sort, - const int16_t *p2a_flags, - const int16_t p2a_bands, - const int16_t *last_bitalloc, - const int16_t input_frame, - const int16_t adjustFlag, - const int16_t is_transient ) -{ - int16_t i, j, k, size, nb_bytes; - int32_t nzp; - - float gain; - float step_scale[NB_SFM]; - - int16_t pos_index[NB_SFM]; - float Rk_sort[NB_SFM]; - int16_t USQ_TCQ[NB_SFM]; /* TCQ is selected by default*/ - float coefs_norm_dec[L_FRAME32k]; /* New output buffer (TCQ+USQ)*/ - - float pulses, crosscorr, selfcorr; - int32_t savedstates[TCQ_MAX_BAND_SIZE]; - ARCODEC arenc, *parenc; - TCQ_BITSTREAM bs, *pbs; - int16_t k_num[2]; - - int8_t flag_wbnb = 0; - int16_t lsbtcq_bits = TCQ_AMP; - int16_t tcq_arbits = 2; - int16_t nzbands = 0; - int16_t bcount = 0; - float abuffer[560]; - float mbuffer[560]; - float sbuffer[560]; - int16_t dpath[280]; - /*Word32 Rk_fx[NB_SFM];*/ /* Q16 */ - Word32 Rk_sort_fx[NB_SFM]; /* Q16 */ - Word32 bsub_fx = 0; - Word32 est_frame_bits_fx; - - Word16 nzb = 0; - Word32 delta_fx; - Word32 surplus_fx; - Word32 bit_surplus_fx[2]; - - Word32 leftbits = 0; - Word32 sepbits = 0; - Word32 divider = 0; - - ivas_error error; - - error = IVAS_ERR_OK; - - set_s( dpath, 0, 280 ); - set_f( abuffer, 0.f, 560 ); - set_f( mbuffer, 0.f, 560 ); - - set_f( sbuffer, FLT_MAX, 560 ); - - /* initialization */ - set_f( Rk_sort, 0.f, NB_SFM ); - set_s( USQ_TCQ, 0, NB_SFM ); - set_f( coefs_norm_dec, 0.f, L_FRAME32k ); - InitLSBTCQ( &bcount ); - - if ( input_frame <= L_FRAME16k && adjustFlag == 0 && is_transient == 0 ) - { - flag_wbnb = 1; - lsbtcq_bits = 0; - tcq_arbits = 0; - } - - parenc = &arenc; - pbs = &bs; - - pbs->curPos = 7; - pbs->numbits = 0; - pbs->numByte = 0; - for ( i = 0; i < MAX_SIZEBUF_PBITSTREAM; i++ ) - { - pbs->buf[i] = 0; - } - - ar_encoder_start( parenc, pbs, bit_budget ); - - /* TCQ Index initialize */ - set_s( pos_index, 0, NB_SFM ); - - /* Bits distribution analysis */ - for ( i = 0; i < BANDS; i++ ) - { - if ( L_sub( ar_div_ivas( Rk_fx[i], sfmsize[i] ), 49152 ) >= 0 ) - { - /* USQ used for high importance bands*/ - USQ_TCQ[i] = 1; - } - else - { - /* TCQ used for usual bands */ - USQ_TCQ[i] = 0; - } - if ( Rk_fx[i] > 0 ) - { - nzbands++; - } - } - - for ( j = 0; j < BANDS; j++ ) - { - if ( Rk_fx[j] > 0 ) - { - nzb++; - } - } - -#define WMC_TOOL_SKIP - bsub_fx = L_shl( L_add( tcq_arbits, lsbtcq_bits ), 16 ); - IF( bsub_fx > 0 ) - { - bsub_fx = L_add( bsub_fx, 2048 ); - } - for ( j = BANDS - 1; j >= 0; j-- ) - { - if ( Rk_fx[j] > 0 ) - { - Rk_fx[j] = L_sub( Rk_fx[j], ar_div_ivas( bsub_fx, nzb ) ); - if ( Rk_fx[j] < 0 ) - { - bsub_fx = L_sub( bsub_fx, L_add( ar_div_ivas( bsub_fx, nzb ), Rk_fx[j] ) ); - Rk_fx[j] = 0; - } - else - { - bsub_fx = L_sub( bsub_fx, ar_div_ivas( bsub_fx, nzb ) ); - } - nzb = sub( nzb, 1 ); - } - } - - srt_vec_ind_fx_ivas( Rk_fx, Rk_sort_fx, k_sort, BANDS ); -#undef WMC_TOOL_SKIP - - /* Quantize spectral band shapes using TCQ */ - /* Select ISC */ - set_f( coefs_quant, 0.0, sfm_end[BANDS - 1] + 1 ); - - mvr2r( coefs_norm, coefs_quant, sfm_end[BANDS - 1] + 1 ); - - delta_fx = 0; - est_frame_bits_fx = 0; - if ( input_frame <= L_FRAME16k && adjustFlag == 0 && is_transient == 0 ) - { - surplus_fx = -131072; - bit_allocation_second_fx2( Rk_fx, Rk_sort_fx, BANDS, sfmsize, k_sort, k_num, p2a_flags, p2a_bands, last_bitalloc, input_frame ); - - nzbands = 0; - for ( j = 0; j < BANDS; j++ ) - { - if ( sub( j, k_num[0] ) != 0 && sub( j, k_num[1] ) != 0 ) - { - leftbits = L_add( leftbits, Rk_fx[k_sort[j]] ); - if ( Rk_fx[k_sort[j]] > 0 ) - { - nzbands = add( (int16_t) nzbands, 1 ); - } - } - else - { - sepbits = L_add( sepbits, Rk_fx[k_sort[j]] ); - } - } - - /* Separate the position information from the input signal(coefs_norm) */ - /* Gather the NZ coefficients*/ - for ( k = 0; k < BANDS; k++ ) /* Loop through non-zero blocks */ - { - if ( k != k_num[0] && k != k_num[1] ) - { - if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) /* Then have non-zero block AND WILL BE ENCODED BY TCQ */ - { - /* Encode Position Info, NZ Info, Signs */ - size = sfmsize[k_sort[k]]; - /* Determine scale step, ISC and TCQ quantizer */ - GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 0, &nzp, 0, 0, 0, 0 ); - leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); - - npulses[k_sort[k]] = (int16_t) pulses; - - encode_position_ari_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); - encode_magnitude_tcq_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, savedstates, &est_frame_bits_fx ); - encode_signs_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); - nzbands--; - } - /* Have USQ coded band */ - else if ( Rk_fx[k_sort[k]] > 0 && sub( USQ_TCQ[k_sort[k]], 1 ) == 0 ) - { - size = sfmsize[k_sort[k]]; - GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, 0, 0, 0, 0 ); - leftbits = L_sub( leftbits, L_add( Rk_fx[k_sort[k]], delta_fx ) ); - - npulses[k_sort[k]] = (int16_t) pulses; - - encode_position_ari_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); - encode_magnitude_usq_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); - encode_signs_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); - - nzbands--; - } - else /* Then have zero block */ - { - npulses[k_sort[k]] = 0; - size = sfmsize[k_sort[k]]; - } - - if ( Rk_fx[k_sort[k]] > 0 && surplus_fx < 0 ) - { -#define WMC_TOOL_SKIP - IF( nzbands <= 1 ) - { - divider = 0; - } - ELSE - { - divider = 2; - } - - IF( L_add( L_add( surplus_fx, sepbits ), ar_div_ivas( leftbits, divider ) ) < 0 ) - { - /* Overflow possible => start to distribute negative surplus */ - delta_fx = ar_div_ivas( surplus_fx + sepbits, nzbands ); - } - else - { - delta_fx = 0; - } - surplus_fx = L_sub( surplus_fx, delta_fx ); -#undef WMC_TOOL_SKIP - } - else - { - delta_fx = 0; - } - } - } - -#define WMC_TOOL_SKIP - if ( ( L_sub( surplus_fx, 524288 ) > 0 && sub( input_frame, L_FRAME8k ) == 0 ) || ( L_sub( surplus_fx, 786432 ) > 0 && sub( input_frame, L_FRAME16k ) == 0 ) ) - { - bit_surplus_fx[0] = Mult_32_16( surplus_fx, 24576 ); /* Q16 */ - bit_surplus_fx[1] = Mult_32_16( surplus_fx, 8192 ); /* Q16 */ - } -#undef WMC_TOOL_SKIP - else - { - bit_surplus_fx[0] = surplus_fx; - bit_surplus_fx[1] = 0; - } - for ( k = 0; k < BANDS; k++ ) - { - for ( j = 0; j < 2; j++ ) - { - if ( k == k_num[j] ) - { -#define WMC_TOOL_SKIP - Rk_fx[k_sort[k]] = L_add( Rk_fx[k_sort[k]], bit_surplus_fx[j] ); -#undef WMC_TOOL_SKIP - - if ( Rk_fx[k_sort[k]] > 0 && USQ_TCQ[k_sort[k]] == 0 ) /* Then have non-zero block AND WILL BE ENCODED BY TCQ */ - { - /* Encode Position Info, NZ Info, Signs */ - size = sfmsize[k_sort[k]]; - - /* Determine scale step, ISC and TCQ quantizer */ - GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, Rk_fx[k_sort[k]], &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 0, &nzp, 0, 0, 0, 0 ); - - npulses[k_sort[k]] = (int16_t) pulses; - - encode_position_ari_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); - encode_magnitude_tcq_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, savedstates, &est_frame_bits_fx ); - encode_signs_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); - } - /* Have USQ coded band */ - else if ( Rk_fx[k_sort[k]] > 0 && sub( USQ_TCQ[k_sort[k]], 1 ) == 0 ) - { - size = sfmsize[k_sort[k]]; - - GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, Rk_fx[k_sort[k]], &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, 0, 0, 0, 0 ); - - npulses[k_sort[k]] = (int16_t) pulses; - - encode_position_ari_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); - encode_magnitude_usq_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); - encode_signs_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); - } - else /* Then have zero block */ - { - npulses[k_sort[k]] = 0; - size = sfmsize[k_sort[k]]; - } - } - } - } - } - else - { - surplus_fx = 0; - - /* Separate the position information from the input signal(coefs_norm) */ - /* Gather the NZ coefficients*/ - for ( k = 0; k < BANDS; k++ ) /* Loop through non-zero blocks */ - { - if ( Rk_fx[k_sort[k]] > 0 ) - { - size = sfmsize[k_sort[k]]; - GetISCScale( &coefs_quant[sfm_start[k_sort[k]]], size, L_add( Rk_fx[k_sort[k]], delta_fx ), &coefs_norm_dec[sfm_start[k_sort[k]]], &step_scale[k_sort[k]], &surplus_fx, &pulses, savedstates, 1, &nzp, &bcount, abuffer, mbuffer, sbuffer ); - - npulses[k_sort[k]] = (int16_t) pulses; - encode_position_ari_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, &est_frame_bits_fx ); - encode_magnitude_usq_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, npulses[k_sort[k]], (int16_t) nzp, &est_frame_bits_fx ); - encode_signs_fx_ivas( parenc, &coefs_norm_dec[sfm_start[k_sort[k]]], size, (int16_t) nzp, &est_frame_bits_fx ); - /* nzbands--; */ - nzbands = sub( (int16_t) nzbands, 1 ); - } - else /* Then have zero block */ - { - npulses[k_sort[k]] = 0; - size = sfmsize[k_sort[k]]; - } - - /* Surplus distribution */ - if ( surplus_fx > 0 && nzbands > 0 ) - { - delta_fx = ar_div_ivas( surplus_fx, nzbands ); - surplus_fx = L_sub( surplus_fx, delta_fx ); - } - } - } - - TCQLSB( bcount, abuffer, mbuffer, sbuffer, dpath ); - - /* Save TCQ path to bitstream */ - SaveTCQdata( parenc, dpath, (int16_t) lsbtcq_bits ); - - /* Add tcq sequence to decoding buffer */ - InitLSBTCQ( &bcount ); - - ar_encoder_done( parenc ); - - /* Loop through non-zero blocks */ - if ( !flag_wbnb ) - { - for ( k = 0; k < BANDS; k++ ) - { - if ( Rk_fx[k_sort[k]] > 0 ) - { - size = sfmsize[k_sort[k]]; - RestoreTCQ( &coefs_norm_dec[sfm_start[k_sort[k]]], size, &bcount, mbuffer ); - } - } - } - - nb_bytes = bit_budget >> 3; - j = bit_budget - ( nb_bytes << 3 ); - for ( i = 0; i < nb_bytes; i++ ) - { - push_indice( hBstr, IND_HQ2_SUBBAND_TCQ, pbs->buf[i], 8 ); - } - if ( j > 0 ) - { - push_indice( hBstr, IND_HQ2_SUBBAND_TCQ, ( pbs->buf[nb_bytes] >> ( 8 - j ) ), j ); - } - - /* Clear decoding buffer */ - set_f( coefs_quant, 0.0, sfm_end[BANDS - 1] + 1 ); - /* New analysis of decoded frame */ - for ( i = 0; i < BANDS; i++ ) - { - if ( Rk_fx[k_sort[i]] > 0 ) - { - gain = 0.0f; - - crosscorr = 0.0f; - selfcorr = EPSILON; - for ( j = 0; j < sfmsize[k_sort[i]]; j++ ) - { - crosscorr += ( coefs_norm[sfm_start[k_sort[i]] + j] * coefs_norm_dec[sfm_start[k_sort[i]] + j] ); - selfcorr += ( coefs_norm_dec[sfm_start[k_sort[i]] + j] * coefs_norm_dec[sfm_start[k_sort[i]] + j] ); - } - - gain = crosscorr / selfcorr; - - if ( gain == 0 ) - { - gain = 1e-10f; - } - - /* Use optimal gain */ - for ( j = 0; j < sfmsize[k_sort[i]]; j++ ) - { - inp_vector[sfm_start[k_sort[i]] + j] = round_f( ( ( 1.0f / QTCQ ) * coefs_norm_dec[sfm_start[k_sort[i]] + j] ) ); - coefs_quant[sfm_start[k_sort[i]] + j] = gain * coefs_norm_dec[sfm_start[k_sort[i]] + j]; - } - } - } - - - return error; -} -#endif diff --git a/lib_enc/tcx_ltp_enc.c b/lib_enc/tcx_ltp_enc.c index 90c90fae8..8c3c60e18 100644 --- a/lib_enc/tcx_ltp_enc.c +++ b/lib_enc/tcx_ltp_enc.c @@ -41,552 +41,3 @@ #include "rom_enc.h" #include "rom_com.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * interpolate_corr() - * - * - *---------------------------------------------------------------------*/ - -/*! r: interpolated value */ -static float interpolate_corr( - const float *x, /* i : input vector */ - const int16_t frac, /* i : fraction of lag */ - const int16_t frac_max /* i : max fraction */ -) -{ - int16_t i; - float s; - const float *c1, *c2, *x1, *x2, *win; - - - if ( frac_max == 6 ) - { - win = E_ROM_inter6_1; - } - else - { - win = E_ROM_inter4_1; - } - - x1 = &x[0]; - x2 = &x[1]; - c1 = &win[frac]; - c2 = &win[frac_max - frac]; - s = 0.0f; - for ( i = 0; i < 4; i++, c1 += frac_max, c2 += frac_max ) - { - s += ( *x1-- ) * ( *c1 ) + ( *x2++ ) * ( *c2 ); - } - - return s; -} - - -/*---------------------------------------------------------------------* - * tcx_ltp_pitch_search() - * - * - *---------------------------------------------------------------------*/ - -static void tcx_ltp_pitch_search( - const int16_t pitch_ol, - int16_t *pitch_int, - int16_t *pitch_fr, - int16_t *index, - float *norm_corr, - const int16_t len, - const float *wsp, - const int16_t pitmin, - const int16_t pitfr1, - const int16_t pitfr2, - const int16_t pitmax, - const int16_t pitres, - const int16_t check_border_case, - int16_t *border_case ) -{ - int16_t i, t, t0, t1, step, fraction, t0_min, t0_max, t_min, t_max, delta; - float temp, cor_max, cor[256], *pt_cor; - - if ( pitres == 6 ) - { - delta = 8; - } - else - { - delta = 16; - } - - t0_min = (int16_t) pitch_ol - ( delta >> 1 ); - t0_max = (int16_t) pitch_ol + ( delta >> 1 ) - 1; - - if ( t0_min < pitmin ) - { - t0_min = pitmin; - t0_max = t0_min + delta - 1; - } - if ( t0_max > pitmax ) - { - t0_max = pitmax; - t0_min = t0_max - delta + 1; - } - - - t_min = t0_min - L_INTERPOL1; - t_max = t0_max + L_INTERPOL1; - - pt_cor = cor; - for ( t = t_min; t <= t_max; t++ ) - { - *pt_cor++ = dotp( wsp, wsp - t, len ); - } - - pt_cor = cor + L_INTERPOL1; - cor_max = *pt_cor++; - t1 = t0_min; - for ( t = t0_min + 1; t <= t0_max; t++ ) - { - if ( *pt_cor > cor_max ) - { - cor_max = *pt_cor; - t1 = t; - } - pt_cor++; - } - temp = dotp( wsp, wsp, len ) * dotp( wsp - t1, wsp - t1, len ); - *norm_corr = cor_max / (float) sqrt( temp + 0.1f ); - - /* check for border cases at the low lag border */ - /*pt_cor=cor;*/ - if ( check_border_case && t1 == t0_min ) - { - float tmpCor; - for ( t = t1 - L_INTERPOL1; t < t1; t++ ) - { - tmpCor = dotp( wsp, wsp - t, len ); - if ( tmpCor > cor_max ) - { - /* no real maximum but still on a rising slope */ - /* keep t1 but set norm_corr to zero to avoid activating the LTP here */ - *border_case = 1; - break; - } - } - } - - if ( t1 >= pitfr1 ) - { - *pitch_int = t1; - *pitch_fr = 0; - *index = t1 - pitfr1 + ( ( pitfr2 - pitmin ) * pitres ) + ( ( pitfr1 - pitfr2 ) * ( pitres >> 1 ) ); - return; - } - - /*------------------------------------------------------------------* - * Search fractional pitch with 1/4 subsample resolution. - * search the fractions around t0 and choose the one which maximizes - * the interpolated normalized correlation. - *-----------------------------------------------------------------*/ - - pt_cor = cor + L_INTERPOL1 - t0_min; - t0 = t1; - if ( t0 >= pitfr2 ) - { - step = 2; - fraction = 2; - } - else - { - step = 1; - fraction = 1; - } - - if ( t0 == t0_min ) /* Limit case */ - { - fraction = 0; - cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres ); - } - else /* Process negative fractions */ - { - t0--; - cor_max = interpolate_corr( &pt_cor[t0], fraction, pitres ); - for ( i = ( fraction + step ); i <= pitres - 1; i = i + step ) - { - temp = interpolate_corr( &pt_cor[t0], i, pitres ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - } - } - } - - for ( i = 0; i <= pitres - 1; i = i + step ) /* Process positive fractions */ - { - temp = interpolate_corr( &pt_cor[t1], i, pitres ); - if ( temp > cor_max ) - { - cor_max = temp; - fraction = i; - t0 = t1; - } - } - *pitch_int = t0; - *pitch_fr = fraction; - if ( t0 >= pitfr2 ) - { - *index = t0 * ( pitres >> 1 ) + ( fraction >> 1 ) - ( pitfr2 * ( pitres >> 1 ) ) + ( ( pitfr2 - pitmin ) * pitres ); - } - else - { - *index = t0 * pitres + fraction - ( pitmin * pitres ); - } - - return; -} - - -/*---------------------------------------------------------------------* - * tcx_ltp_find_gain() - * - * - *---------------------------------------------------------------------*/ - -static void tcx_ltp_find_gain( - const float *speech, - float *pred_speech, - const int16_t L_frame, - float *gain, - int16_t *gain_index ) -{ - int16_t gainbits = 2; - - /* Find gain */ - *gain = get_gain_flt( speech, pred_speech, L_frame, NULL ); - - /* Quantize gain */ - if ( *gain >= 0.875f ) - { - *gain_index = 3; /* 1.00/2 */ - } - else if ( *gain >= 0.625f ) - { - *gain_index = 2; /* 0.75/2 */ - } - else if ( *gain >= 0.375f ) - { - *gain_index = 1; /* 0.50/2 */ - } - else if ( *gain >= 0.125f ) - { - *gain_index = 0; /* 0.25/2 */ - } - else - { - *gain_index = -1; /* escape */ - } - /* Dequantize gain */ - *gain = (float) ( *gain_index + 1 ) * 0.625f / (float) ( 1 << gainbits ); - - return; -} - -/*---------------------------------------------------------------------* - * tcx_ltp_encode() - * - * - *---------------------------------------------------------------------*/ - -void tcx_ltp_encode( - Encoder_State *st, - const int16_t tcxMode, - const int16_t L_frame, - const float *speech, - float *speech_ltp, - const float *wsp, - const int16_t Top[], - int16_t *ltp_param, - int16_t *ltp_bits, - float *A, - const int16_t disable_ltp, - const int16_t element_mode ) -{ - int16_t i, j, n; - int16_t ltp_on, tcxOnly, L_subfr, SideInfoOnly, delta; - float s; - float norm_corr; - float pred_speech[L_FRAME_PLUS]; - float tempFlatness; - float maxEnergyChange; - float buf_zir[M + L_FRAME_PLUS / 4], *zir; - float r[M + 1], Aest[M + 1]; - float alpha, step; - float si_gain; - int16_t border_case; - - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - tcxOnly = st->tcxonly; - L_subfr = L_SUBFR; - SideInfoOnly = st->sr_core > 25600; - - /* Reset memory if past frame is acelp */ - if ( st->last_core == ACELP_CORE ) - { - hTcxEnc->tcxltp_pitch_int_past = L_frame; - hTcxEnc->tcxltp_pitch_fr_past = 0; - hTcxEnc->tcxltp_gain_past_flt = 0.f; - } - - /* By default, LTP is off */ - ltp_param[0] = 0; - norm_corr = 0.0f; - border_case = 0; - - if ( hTcxEnc->tcxltp || SideInfoOnly ) - { - /* Find pitch lag */ - if ( st->pit_res_max == 6 ) - { - delta = 8; - } - else - { - delta = 16; - } - - if ( st->element_mode == IVAS_CPE_MDCT ) - { - if ( abs( Top[0] - Top[1] ) < ( delta / 2 ) ) - { - /* estimates are close enough and stable, take the artihmetic mean as estimate */ - tcx_ltp_pitch_search( ( Top[0] + Top[1] ) / 2, &hTcxEnc->tcxltp_pitch_int, &hTcxEnc->tcxltp_pitch_fr, <p_param[1], &norm_corr, L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, 1, &border_case ); - } - else - { - /* pitch jumps between half frames, calc ltp for both estimates, choose the better one */ - int16_t pitch_int_2[2]; - int16_t pitch_fr_2[2]; - float norm_corr_2[2]; - int16_t pit_param_2[2]; - - for ( i = 0; i < 2; i++ ) - { - tcx_ltp_pitch_search( Top[i], &pitch_int_2[i], &pitch_fr_2[i], &pit_param_2[i], &norm_corr_2[i], L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, 1, &border_case ); - } - - i = ( norm_corr_2[1] > norm_corr_2[0] ) ? 1 : 0; - hTcxEnc->tcxltp_pitch_int = pitch_int_2[i]; - hTcxEnc->tcxltp_pitch_fr = pitch_fr_2[i]; - ltp_param[1] = pit_param_2[i]; - norm_corr = norm_corr_2[i]; - } - } - else - { - tcx_ltp_pitch_search( Top[1], &hTcxEnc->tcxltp_pitch_int, &hTcxEnc->tcxltp_pitch_fr, <p_param[1], &norm_corr, L_frame, wsp, st->pit_min, st->pit_fr1, st->pit_fr2, st->pit_max, st->pit_res_max, ( element_mode > EVS_MONO ) ? 1 : 0, &border_case ); - } - - if ( border_case ) - { - norm_corr = 0.0f; - } - if ( st->element_mode == IVAS_CPE_DFT ) - { - tempFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS - NSUBBLOCKS_SHIFT, ( NSUBBLOCKS_SHIFT + 1 ) + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * ( 1.0f * ( hTcxEnc->tcxltp_pitch_int ) / L_frame ) ) ) ); - - maxEnergyChange = GetTCXMaxenergyChange( st->hTranDet, tcxMode == TCX_10, NSUBBLOCKS - NSUBBLOCKS_SHIFT, ( NSUBBLOCKS_SHIFT + 1 ) + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * (float) ( hTcxEnc->tcxltp_pitch_int ) / (float) L_frame ) ) ); - } - else - { - tempFlatness = GetTCXAvgTemporalFlatnessMeasure( st->hTranDet, NSUBBLOCKS, 1 + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * ( 1.0f * ( hTcxEnc->tcxltp_pitch_int ) / L_frame ) ) ) ); - - maxEnergyChange = GetTCXMaxenergyChange( st->hTranDet, tcxMode == TCX_10, NSUBBLOCKS, 1 + min( NSUBBLOCKS, (int16_t) ceil( 0.5f + NSUBBLOCKS * (float) ( hTcxEnc->tcxltp_pitch_int ) / (float) L_frame ) ) ); - } - - /* Switch LTP on */ - if ( ( tcxOnly == 0 && tcxMode == TCX_20 && norm_corr * hTcxEnc->tcxltp_norm_corr_past_flt > 0.25f && tempFlatness < 3.5f ) || - ( tcxOnly == 1 && tcxMode == TCX_10 && max( norm_corr, hTcxEnc->tcxltp_norm_corr_past_flt ) > 0.5f && maxEnergyChange < 3.5f ) || - /* Use LTP for lower correlation when pitch lag is big, L_frame*(1.2f-norm_corr) < hTcxEnc->tcxltp_pitch_int <=> norm_corr > 1.2f-hTcxEnc->/L_frame */ - ( tcxOnly == 1 && norm_corr > 0.44f && L_frame * ( 1.2f - norm_corr ) < hTcxEnc->tcxltp_pitch_int ) || - ( tcxOnly == 1 && tcxMode == TCX_20 && norm_corr > 0.44f && ( tempFlatness < 6.0f || ( tempFlatness < 7.0f && maxEnergyChange < 22.0f ) ) ) ) - { - if ( disable_ltp == 0 ) - { - ltp_param[0] = 1; - } - } - - /* hysteresis for stable ltp prediction */ - ltp_on = 0; - if ( tcxOnly == 1 && st->element_mode == IVAS_CPE_MDCT && ( ( sqrt( (float) ( hTcxEnc->tcxltp_on_mem ) ) * (norm_corr) *0.9f ) > 0.44f && ( tempFlatness < 6.0f || ( tempFlatness < 7.0f && maxEnergyChange < 22.0f ) ) ) ) - { - ltp_on = 1; - } - - if ( tcxOnly == 1 && ltp_param[0] == 1 ) - { - /* increase ltp counter */ - hTcxEnc->tcxltp_on_mem = min( 5, hTcxEnc->tcxltp_on_mem + 1 ); - } - else if ( ltp_on == 1 ) - { - /* hysteresis takes effect, decrease counter */ - hTcxEnc->tcxltp_on_mem = max( 0, hTcxEnc->tcxltp_on_mem - 1 ); - ltp_param[0] = ltp_on; - } - else - { - /* no ltp in this frame, reset counter */ - hTcxEnc->tcxltp_on_mem = 0; - } - } - - /* Find predicted signal */ - predict_signal_flt( speech, pred_speech, hTcxEnc->tcxltp_pitch_int, hTcxEnc->tcxltp_pitch_fr, st->pit_res_max, L_frame ); - - /* Find gain */ - tcx_ltp_find_gain( speech, pred_speech, L_frame, &hTcxEnc->tcxltp_gain_flt, <p_param[2] ); - - if ( ltp_param[0] ) - { - /* Total number of bits for LTP */ - if ( ltp_param[2] + 1 ) /* hTcxEnc->tcxltp_gain_flt > 0 */ - { - *ltp_bits = 12; - } - else /* hTcxEnc->tcxltp_gain_flt <= 0 -> turn off LTP */ - { - ltp_param[0] = 0; - } - } - - if ( !ltp_param[0] ) - { - /* No LTP -> set everything to zero */ - hTcxEnc->tcxltp_pitch_int = L_frame; - hTcxEnc->tcxltp_pitch_fr = 0; - ltp_param[1] = 0; - set_zero( pred_speech, L_frame ); - hTcxEnc->tcxltp_gain_flt = 0.f; - ltp_param[2] = 0; - if ( hTcxEnc->tcxltp || SideInfoOnly ) - { - *ltp_bits = 1; - } - else - { - *ltp_bits = 0; - } - } - - si_gain = 0; - if ( SideInfoOnly ) - { - si_gain = hTcxEnc->tcxltp_gain_flt; - hTcxEnc->tcxltp_gain_flt = 0.f; - } - - if ( speech_ltp != NULL ) - { - if ( hTcxEnc->tcxltp_gain_past_flt == 0.f && hTcxEnc->tcxltp_gain_flt == 0.f ) - { - mvr2r( speech, speech_ltp, L_subfr ); - } - else if ( hTcxEnc->tcxltp_gain_past_flt == 0.f ) - { - alpha = 0.f; - step = 1.f / (float) ( L_subfr ); - for ( n = 0; n < L_subfr; n++ ) - { - speech_ltp[n] = speech[n] - alpha * hTcxEnc->tcxltp_gain_flt * pred_speech[n]; - alpha += step; - } - } - else - { - if ( A == NULL ) - { - for ( i = 0; i <= M; i++ ) - { - s = 0.0; - for ( j = 0; j < L_frame - i; j++ ) - { - s += speech[j - L_frame] * speech[j + i - L_frame]; - } - r[i] = s; - } - if ( r[0] < 100.0f ) - { - r[0] = 100.0f; - } - r[0] *= 1.0001f; - lev_dur( Aest, r, M, NULL ); - A = Aest; - } - - if ( hTcxEnc->tcxltp_gain_flt > 0.f ) - { - predict_signal_flt( speech - M, buf_zir, hTcxEnc->tcxltp_pitch_int, hTcxEnc->tcxltp_pitch_fr, st->pit_res_max, M ); - } - else - { - set_f( buf_zir, 0.0f, M ); - } - - for ( n = 0; n < M; n++ ) - { - buf_zir[n] = speech_ltp[n - M] - speech[n - M] + hTcxEnc->tcxltp_gain_flt * buf_zir[n]; - } - - zir = buf_zir + M; - set_f( zir, 0.0f, L_subfr ); - syn_filt( A, M, zir, zir, L_subfr, buf_zir, 0 ); - alpha = 1.f; - step = 1.f / (float) ( L_subfr / 2 ); - - for ( n = L_subfr / 2; n < L_subfr; n++ ) - { - zir[n] *= alpha; - alpha -= step; - } - - for ( n = 0; n < L_subfr; n++ ) - { - speech_ltp[n] = ( speech[n] - hTcxEnc->tcxltp_gain_flt * pred_speech[n] ) + zir[n]; - } - } - - if ( SideInfoOnly || hTcxEnc->tcxltp_gain_flt == 0.0f ) - { - for ( n = L_subfr; n < L_frame; n++ ) - { - speech_ltp[n] = speech[n]; - } - } - else - { - for ( n = L_subfr; n < L_frame; n++ ) - { - speech_ltp[n] = speech[n] - hTcxEnc->tcxltp_gain_flt * pred_speech[n]; - } - } - } - - /* Update */ - hTcxEnc->tcxltp_pitch_int_past = hTcxEnc->tcxltp_pitch_int; - hTcxEnc->tcxltp_pitch_fr_past = hTcxEnc->tcxltp_pitch_fr; - hTcxEnc->tcxltp_gain_past_flt = hTcxEnc->tcxltp_gain_flt; - - if ( SideInfoOnly ) - { - hTcxEnc->tcxltp_gain_flt = si_gain; - } - - hTcxEnc->tcxltp_norm_corr_past_flt = norm_corr; - - return; -} -#endif diff --git a/lib_enc/tcx_utils_enc.c b/lib_enc/tcx_utils_enc.c index 721ef3fb9..2db3ce73a 100644 --- a/lib_enc/tcx_utils_enc.c +++ b/lib_enc/tcx_utils_enc.c @@ -48,1389 +48,15 @@ #define ONE_POINT_ONE_FIVE_Q7 147 #define ONE_POINT_ONE_FIVE_Q23 9646899 -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * ComputeSpectrumNoiseMeasure() - * - * compute noise-measure flags for spectrum filling and quantization (0: tonal, 1: noise-like) - *---------------------------------------------------------------------*/ - -void ComputeSpectrumNoiseMeasure( - const float *powerSpec, - const int16_t L_frame, - const int16_t startLine, - const int16_t resetMemory, - int8_t *noiseFlags, - const int16_t lowpassLine ) -{ - int16_t i, lastTone; - float s, c; - - if ( resetMemory ) - { - for ( i = 0; i < lowpassLine; i++ ) - { - noiseFlags[i] = 0; - } - } - for ( i = lowpassLine; i < L_frame; i++ ) - { - noiseFlags[i] = 1; - } - - if ( powerSpec && startLine + 6 < L_frame ) - { - lastTone = 0; - /* noise-measure flags for spectrum filling and quantization (0: tonal, 1: noise-like) */ - i = startLine - 1; - s = powerSpec[i - 7] + powerSpec[i - 6] + powerSpec[i - 5] + - powerSpec[i - 4] + powerSpec[i - 3] + powerSpec[i - 2] + - powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1] + - powerSpec[i + 2] + powerSpec[i + 3] + powerSpec[i + 4] + - powerSpec[i + 5] + powerSpec[i + 6] + powerSpec[i + 7]; - - for ( i++; i < lowpassLine - 7; i++ ) - { - c = powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1]; - s += powerSpec[i + 7] - powerSpec[i - 8]; - if ( s >= ( 1.75f - 0.5f * noiseFlags[i] ) * c ) - { - noiseFlags[i] = 1; - } - else - { - noiseFlags[i] = 0; - lastTone = i; - } - } - /* lower L_frame*startRatio lines are tonal (0), upper 7 lines are processed separately */ - for ( ; i < lowpassLine - 1; i++ ) - { - c = powerSpec[i - 1] + powerSpec[i] + powerSpec[i + 1]; - /* running sum can't be updated any more, just use the latest one */ - if ( s >= ( 1.75f - 0.5f * noiseFlags[i] ) * c ) - { - noiseFlags[i] = 1; - } - else - { - noiseFlags[i] = 0; - /* lastTone = i; */ - } - } - noiseFlags[i] = 1; /* uppermost line is defined as noise-like (1) */ - - if ( lastTone > 0 ) /* spread uppermost tonal line one line upward */ - { - noiseFlags[lastTone + 1] = 0; - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * detectLowpassFac() - * - * - *---------------------------------------------------------------------*/ - -static void detectLowpassFac( - const float *powerSpec, - const int16_t L_frame, - const int16_t rectWin, - float *pLpFac, - const int16_t lowpassLine ) -{ - int16_t i; - float threshold; - - threshold = 0.1f * 2 * NORM_MDCT_FACTOR; - if ( rectWin ) - { - /* compensate for bad side-lobe attenuation with asymmetric windows */ - threshold *= 2.f; - } - - for ( i = lowpassLine - 1; i >= lowpassLine / 2; i-- ) - { - if ( powerSpec[i] > threshold ) - { - break; - } - } - - *pLpFac = ( 0.3f * ( *pLpFac ) ) + ( 0.7f * ( (float) ( i + 1 ) / (float) L_frame ) ); - - return; -} - -/*-----------------------------------------------------------* - * Compute noise-measure flags for spectrum filling * - * and quantization (0: tonal, 1: noise-like). * - * Detect low pass if present. * - *-----------------------------------------------------------*/ - -void AnalyzePowerSpectrum( - Encoder_State *st, /* i/o: encoder states */ - const int16_t L_frame, /* i : frame length */ - const int16_t L_frameTCX, /* i : full band frame length */ - const int16_t left_overlap, /* i : left overlap length */ - const int16_t right_overlap, /* i : right overlap length */ - const float mdctSpectrum[], /* i : MDCT spectrum */ - const float signal[], /* i : windowed signal corresponding to mdctSpectrum */ - float powerSpec[] /* o : Power spectrum. Can point to signal */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - int16_t i, iStart, iEnd, lowpassLine; - - lowpassLine = L_frameTCX; - iStart = 0; - iEnd = L_frameTCX; - - TCX_MDST_flt( signal, powerSpec, left_overlap, L_frameTCX - ( left_overlap + right_overlap ) / 2, right_overlap, st->element_mode ); - - if ( st->narrowBand ) - { - attenuateNbSpectrum( L_frameTCX, powerSpec ); - } - - /* power spectrum: MDCT^2 + MDST^2 */ - for ( i = iStart; i < iEnd; i++ ) - { - powerSpec[i] *= powerSpec[i]; - powerSpec[i] += mdctSpectrum[i] * mdctSpectrum[i]; - } - - ComputeSpectrumNoiseMeasure( powerSpec, L_frameTCX, hTcxEnc->nmStartLine * L_frame / st->L_frame, ( st->L_frame * st->last_sr_core != st->L_frame_past * st->sr_core ) || ( st->last_core != TCX_20_CORE ), hTcxEnc->memQuantZeros, lowpassLine ); - - if ( st->total_brate <= ACELP_24k40 ) - { - lowpassLine = (int16_t) ( 2.0f * st->hTcxCfg->bandwidth_flt * L_frame ); - detectLowpassFac( powerSpec, L_frame, ( st->last_core == ACELP_CORE ), &hTcxEnc->measuredBwRatio_flt, lowpassLine ); - } - else - { - hTcxEnc->measuredBwRatio_flt = 1.0f; - } - - return; -} - - -/*---------------------------------------------------------------------* - * mdct_preShaping() - * - * - *---------------------------------------------------------------------*/ - -void mdct_preShaping( - float x[], - const int16_t lg, - const float gains[] ) -{ - int16_t i, j, k, l; - float g; - int16_t m, n, k1, k2; - - j = 0; /* not counted, is included in ptr init */ - /* FDNS_NPTS = 64 !!! */ - k = lg / FDNS_NPTS; - m = lg % FDNS_NPTS; - if ( m ) - { - if ( m <= ( FDNS_NPTS / 2 ) ) - { - n = FDNS_NPTS / m; - k1 = k; - k2 = k + 1; - } - else - { - n = FDNS_NPTS / ( FDNS_NPTS - m ); - k1 = k + 1; - k2 = k; - } - for ( i = 0; i < lg; ) - { - if ( j % n ) - { - k = k1; - } - else - { - k = k2; - } - g = 1.f / gains[j++]; - - /* Limit number of loops, if end is reached */ - k = min( k, lg - i ); - for ( l = 0; l < k; l++ ) - { - x[i++] *= g; - } - } - } - else - { - for ( i = 0; i < lg; ) - { - g = 1.f / gains[j++]; - for ( l = 0; l < k; l++ ) - { - x[i++] *= g; - } - } - } - - return; -} -#endif - - -/*---------------------------------------------------------------------* - * AdaptLowFreqEmph() - * - * - *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void AdaptLowFreqEmph( - float x[], - int16_t xq[], - float invGain, - const int16_t tcx_lpc_shaped_ari, - const float lpcGains[], - const int16_t lg ) -{ - int16_t i, i_max, i_max_old; - - if ( !tcx_lpc_shaped_ari ) - { - /* 1. find first magnitude maximum in lower quarter of spectrum */ - invGain *= 2.0f; - i_max = -1; - for ( i = 0; i < lg / 4; i++ ) - { - if ( ( ( xq[i] <= -2 ) || ( xq[i] >= 2 ) ) && - ( ( invGain * x[i] <= -3.625f ) || ( invGain * x[i] >= 3.625f ) ) ) - { - xq[i] += ( xq[i] < 0 ) ? -2 : 2; - i_max = i; - break; - } - } - /* 2. compress value range of all xq up to i_max: add two steps */ - for ( i = 0; i < i_max; i++ ) - { - if ( x[i] < 0.0f ) - { - xq[i] = (int16_t) ( invGain * x[i] - 0.375f ); - } - else - { - xq[i] = (int16_t) ( invGain * x[i] + 0.375f ); - } - } - /* 3. find first mag. maximum below i_max which is half as high */ - i_max_old = i_max; - if ( i_max_old > -1 ) - { - invGain *= 2.0f; - i_max = -1; /* reset first maximum, update inverse gain */ - for ( i = 0; i < lg / 4; i++ ) - { - if ( ( ( xq[i] <= -2 ) || ( xq[i] >= 2 ) ) && - ( ( invGain * x[i] <= -3.625f ) || ( invGain * x[i] >= 3.625f ) ) ) - { - xq[i] += ( xq[i] < 0 ) ? -2 : 2; - i_max = i; - break; - } - } - } - /* 4. re-compress and quantize all xq up to half-height i_max+1 */ - for ( i = 0; i < i_max; i++ ) - { - if ( x[i] < 0.0f ) - { - xq[i] = (int16_t) ( invGain * x[i] - 0.375f ); - } - else - { - xq[i] = (int16_t) ( invGain * x[i] + 0.375f ); - } - } - /* 5. always compress 2 lines; lines could be at index 0 and 1! */ - if ( i_max_old > -1 ) - { - invGain *= 0.5f; /* reset inverse gain */ - if ( i_max < i_max_old ) - { - i_max = i_max_old; - } - } - i = i_max + 1; - - if ( x[i] < 0.0f ) - { - xq[i] = ( invGain * x[i] <= -3.625f ) ? xq[i] - 2 : (int16_t) ( invGain * x[i] - 0.375f ); - } - else - { - xq[i] = ( invGain * x[i] >= 3.625f ) ? xq[i] + 2 : (int16_t) ( invGain * x[i] + 0.375f ); - } - i++; - if ( x[i] < 0.0f ) - { - xq[i] = ( invGain * x[i] <= -3.625f ) ? xq[i] - 2 : (int16_t) ( invGain * x[i] - 0.375f ); - } - else - { - xq[i] = ( invGain * x[i] >= 3.625f ) ? xq[i] + 2 : (int16_t) ( invGain * x[i] + 0.375f ); - } - } - else - { - PsychAdaptLowFreqEmph( x, lpcGains ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * PsychAdaptLowFreqEmph() - * - * - *---------------------------------------------------------------------*/ - -void PsychAdaptLowFreqEmph( - float x[], - const float lpcGains[] ) -{ - int16_t i; - float max_val, fac, tmp; - max_val = tmp = lpcGains[0]; - - /* find minimum (tmp) and maximum (max) of LPC gains in low frequencies */ - for ( i = 1; i < 9; i++ ) - { - if ( tmp > lpcGains[i] ) - { - tmp = lpcGains[i]; - } - if ( max_val < lpcGains[i] ) - { - max_val = lpcGains[i]; - } - } - tmp *= 32.0f; - if ( ( max_val < tmp ) && ( max_val > FLT_MIN ) ) - { - fac = tmp = (float) pow( tmp / max_val, 0.0078125f ); - - /* gradual boosting of lowest 32 bins; DC is boosted by (tmp/max)^1/4 */ - for ( i = 31; i >= 0; i-- ) - { - x[i] *= fac; - fac *= tmp; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * SQ_gain() - * - * - *---------------------------------------------------------------------*/ - -/*! r: SQ gain */ -float SQ_gain( - const float x[], /* i : vector to quantize */ - const int16_t nbitsSQ, /* i : number of bits targeted */ - const int16_t lg /* i : vector size (2048 max) */ -) -{ - int16_t i, iter; - float ener, tmp, target, fac, offset; - float en[N_MAX / 2]; - - /* energy of quadruples with 9dB offset */ - for ( i = 0; i < lg; i += 4 ) - { - ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; - en[i >> 2] = (float) log10( ener ); - } - - /* SQ scale: 4 bits / 6 dB per quadruple */ - target = 0.15f * (float) ( nbitsSQ - ( lg >> 4 ) ); - fac = 12.8f; - offset = fac; - - /* find offset (0 to 128 dB with step of 0.125dB) */ - for ( iter = 0; iter < 10; iter++ ) - { - fac *= 0.5f; - offset -= fac; - ener = 0.0f; - - for ( i = 0; i < lg / 4; i++ ) - { - tmp = en[i] - offset; - - /* avoid SV with 1 bin of amp < 0.5f */ - if ( tmp > 0.3f ) - { - ener += tmp; - - /* if ener is above target -> break and increase offset */ - if ( ener > target ) - { - offset += fac; - break; - } - } - } - } - - /* return gain */ - return (float) pow( 10.0f, 0.45f + 0.5f * offset ); -} - - -/*---------------------------------------------------------------------* - * SQ_gain_estimate() - * - * - *---------------------------------------------------------------------*/ - -/*! r: SQ gain */ -float SQ_gain_estimate( - const float x[], /* i : vector to quantize */ - const int16_t nbitsSQ, /* i : number of bits targeted */ - const int16_t lg /* i : vector size (2048 max) */ -) -{ - int16_t i, iter, max_iter; - float ener, tmp, target, fac, offset; - float en[N_MAX / 2]; - float minGainInv = 0.5f * (float) log10( (float) lg / (float) NORM_MDCT_FACTOR ); /* lowest possible quantized gain */ - - tmp = minGainInv + 0.94f; /* lowest gain + expected value of the quantization noise energy per quadruple (log10(4/12)) */ - /* SNR of quadruples for unit step quantizer and lowest possible gain */ - for ( i = 0; i < lg; i += 4 ) - { - ener = 0.01f + x[i] * x[i] + x[i + 1] * x[i + 1] + x[i + 2] * x[i + 2] + x[i + 3] * x[i + 3]; - en[i >> 2] = (float) log10( ener ) + tmp; - } - - /* SQ scale: 4 bits / 6 dB per quadruple */ - target = 0.15f * (float) ( nbitsSQ - ( lg >> 4 ) ); - fac = 18.4f; - max_iter = 8; /* for 0.36dB steps */ - offset = fac - fac / (float) ( 2 << max_iter ); - - /* find offset, resolution similar to SQ gain quantizer resolution (92dB range, 0.719db resolution) */ - for ( iter = 0; iter < max_iter; iter++ ) - { - fac *= 0.5f; - offset -= fac; - ener = 0.0f; - - for ( i = 0; i < lg / 4; i++ ) - { - tmp = en[i] - offset; - - /* avoid SV with 1 bin of amp < 0.5f */ - if ( tmp > 0.3f ) - { - ener += tmp; - - /* if SNR is above target -> break and increase offset */ - if ( ener > target ) - { - offset += fac; - break; - } - } - } - } - - /* return gain */ - return (float) pow( 10.0f, 0.5f * offset - minGainInv ); -} - -/*---------------------------------------------------------------------* - * tcx_scalar_quantization() - * - * - *---------------------------------------------------------------------*/ - -void tcx_scalar_quantization( - float *x, /* i : input coefficients */ - int16_t *xq, /* o : quantized coefficients */ - const int16_t L_frame, /* i : frame length */ - const float gain, /* i : quantization gain */ - const float offset, /* i : rounding offset (deadzone) */ - int8_t *memQuantZeros, /* o : coefficients set to 0 */ - const int16_t tcxonly ) -{ - int16_t i; - float gainInv, rounding, rounding2; - - /* Init scalar quantizer */ - gainInv = 1.0f / gain; - rounding = offset; - rounding2 = -offset; - - if ( memQuantZeros == NULL ) - { - i = L_frame - 1; - } - else - { - for ( i = L_frame - 1; ( memQuantZeros[i] ) && ( (float) fabs( x[i] ) * gainInv < 1.0f ); i-- ) - { - xq[i] = 0; - } - } - - for ( ; i >= 0; i-- ) - { - if ( x[i] > 0.f ) - { - xq[i] = ( (int16_t) min( MAX16B, ( rounding + x[i] * gainInv ) ) ); - } - else - { - /* limit to -32767 (although 16 bit would allow -32768) - avoids potential issues in arithmetic coding routines, where a sign flip is happening */ - xq[i] = ( (int16_t) max( -32767, ( rounding2 + x[i] * gainInv ) ) ); - } - } - - if ( !tcxonly ) - { - AdaptLowFreqEmph( x, xq, gainInv, 0, NULL, L_frame ); - } - - return; -} - -/*---------------------------------------------------------------------* - * tcx_scalar_quantization_rateloop() - * - * - *---------------------------------------------------------------------*/ - -int16_t tcx_scalar_quantization_rateloop( - float *x, /* i : input coefficients */ - int16_t *xq, /* o : quantized coefficients */ - const int16_t L_frame, /* i : frame length */ - float *gain, /* i/o: quantization gain */ - float offset, /* i : rounding offset (deadzone) */ - int8_t *memQuantZeros, /* o : coefficients set to 0 */ - int16_t *lastnz_out, /* i/o: last nonzero coeff index */ - const int16_t target, /* i : target number of bits */ - int16_t *nEncoded, /* o : number of encoded coeff */ - int16_t *stop, /* i/o: stop param */ - const int16_t sqBits_in_noStop, /* i : number of sqBits as determined in prev. quant. stage, w/o using stop mechanism (ie might exceed target bits) */ - const int16_t sqBits_in, /* i : number of sqBits as determined in prev. quant. stage, using stop mechanism (ie always <= target bits) */ - const int16_t tcxRateLoopOpt, /* i : turns on/off rateloop optimization */ - const int16_t tcxonly, - CONTEXT_HM_CONFIG *hm_cfg, - const int16_t iter_max, - const int16_t element_mode ) -{ - int16_t sqBits, stopFlag; - int16_t ubfound, lbfound; - float ub = 0.f, lb = 0.f; - float shift; - int16_t iter; - float sqGain; - float w_lb, w_ub; - const int16_t kDampen = 10; - int16_t old_stopFlag, old_nEncoded, old_sqBits; - float mod_adjust0, mod_adjust1; - float inv_target; - const float kMargin = 0.96f; - int16_t lastnz; - int16_t saturated; - float minSqGain; - - /* Init */ - saturated = 0; - minSqGain = (float) sqrt( (float) NORM_MDCT_FACTOR / (float) L_frame ); - - sqGain = *gain; - stopFlag = *stop; - ubfound = 0; - lbfound = 0; - shift = 0.25f; - w_lb = 0.0f; - w_ub = 0.0f; - lastnz = *lastnz_out; - - old_stopFlag = stopFlag; - old_nEncoded = *nEncoded; - old_sqBits = sqBits_in_noStop; - - sqBits = sqBits_in; - - mod_adjust0 = max( 1.0f, 2.3f - 0.0025f * target ); - mod_adjust1 = 1.0f / mod_adjust0; - - inv_target = 1.0f / (float) target; - - /* Loop */ - for ( iter = 0; iter < iter_max; iter++ ) - { - if ( tcxRateLoopOpt >= 2 ) - { - /* Ajust sqGain */ - if ( stopFlag ) - { - lbfound = 1; - lb = sqGain; - w_lb = (float) ( stopFlag - target + kDampen ); - saturated = 0; - - if ( ubfound ) - { - sqGain = ( lb * w_ub + ub * w_lb ) / ( w_ub + w_lb ); - } - else - { - sqGain *= ( 1.0f + ( (float) ( stopFlag / kMargin ) * inv_target - 1.0f ) * mod_adjust0 ); - } - } - else if ( saturated == 0 ) - { - ubfound = 1; - ub = sqGain; - w_ub = (float) ( target - sqBits + kDampen ); - if ( lbfound ) - { - sqGain = ( lb * w_ub + ub * w_lb ) / ( w_ub + w_lb ); - } - else - { - sqGain *= ( 1.0f - ( 1.0f - (float) ( sqBits * kMargin ) * inv_target ) * mod_adjust1 ); - } - - if ( tcxRateLoopOpt == 3 && sqGain < minSqGain ) - { - sqGain = minSqGain; - saturated = 1; - } - } - else - { - break; /* we cannot go any lower anyway*/ - } - } - else /* tcxRateLoopOpt != 2 */ - { - /* Ajust sqGain */ - if ( stopFlag ) - { - lbfound = 1; - lb = sqGain; - if ( ubfound ) - { - sqGain = (float) sqrt( lb * ub ); - } - else - { - sqGain = sqGain * (float) pow( 10.0f, shift / 10.0f ); - shift *= 2.0f; - } - } - else - { - ubfound = 1; - ub = sqGain; - if ( lbfound ) - { - sqGain = (float) sqrt( lb * ub ); - } - else - { - sqGain = sqGain * (float) pow( 10.0f, -shift / 10.0f ); - shift *= 2.0f; - } - } - } - - /* Quantize spectrum */ - tcx_scalar_quantization( x, xq, L_frame, sqGain, offset, memQuantZeros, tcxonly ); - - /* Estimate bitrate */ - if ( tcxRateLoopOpt >= 1 ) - { - stopFlag = 0; - } - else - { - stopFlag = 1; - } - - if ( element_mode > EVS_MONO ) - { - sqBits = RCcontextMapping_encode2_estimate_no_mem_s17_LCS( xq, L_frame, &lastnz, nEncoded, target, &stopFlag, 0, hm_cfg ); - } - else - { - sqBits = ACcontextMapping_encode2_estimate_no_mem_s17_LC( xq, L_frame, &lastnz, nEncoded, target, &stopFlag, hm_cfg ); - } - - if ( tcxRateLoopOpt >= 1 ) - { - if ( ( *nEncoded >= old_nEncoded && ( stopFlag >= old_stopFlag ) ) || ( *nEncoded > old_nEncoded && ( stopFlag == 0 && old_stopFlag > 0 ) ) || ( stopFlag == 0 && old_stopFlag == 0 ) ) - { - *gain = sqGain; - old_nEncoded = *nEncoded; - old_stopFlag = stopFlag; - old_sqBits = sqBits; - *lastnz_out = lastnz; - } - } - } /* for ( iter=0; iter= 1 ) - { - /* Quantize spectrum */ - tcx_scalar_quantization( x, xq, L_frame, *gain, offset, memQuantZeros, tcxonly ); - - /* Output */ - *nEncoded = old_nEncoded; - sqBits = old_sqBits; - *stop = old_stopFlag; - } - else - { - /* Output */ - *gain = sqGain; - *stop = stopFlag; - *lastnz_out = lastnz; - } - - return sqBits; -} - -/*---------------------------------------------------------------------* - * tcx_QuantizeGain() - * - * - *---------------------------------------------------------------------*/ - -void tcx_QuantizeGain( - const int16_t n, - float *pGain, - int16_t *pQuantizedGain ) -{ - float ener, gain; - int16_t quantizedGain; - - ener = (float) sqrt( (float) n / (float) NORM_MDCT_FACTOR ); - - gain = *pGain * ener; - - assert( gain > 0 ); - - /* quantize gain with step of 0.714 dB */ - quantizedGain = (int16_t) floor( 0.5f + 28.0f * (float) log10( gain ) ); - - if ( quantizedGain < 0 ) - { - quantizedGain = 0; - } - if ( quantizedGain > 127 ) - { - quantizedGain = 127; - } - - *pQuantizedGain = quantizedGain; - *pGain = (float) pow( 10.0f, ( (float) quantizedGain ) / 28.0f ) / ener; - - return; -} - -/*---------------------------------------------------------------------* - * tcx_noise_factor() - * - * - *---------------------------------------------------------------------*/ - -void tcx_noise_factor( - const float *x_orig, /* i : unquantized mdct coefficients */ - float *sqQ, /* i/o: quantized mdct coefficients */ - const int16_t iFirstLine, /* i : first coefficient to be considered */ - const int16_t lowpassLine, /* i : last nonzero coefficients after low-pass */ - const int16_t nTransWidth, /* i : minimum size of hole to be checked */ - const int16_t L_frame, /* i : frame length */ - const float gain_tcx, /* i : tcx gain */ - const float tiltCompFactor, /* i : LPC tilt compensation factor */ - float *fac_ns, /* o : noise factor */ - int16_t *quantized_fac_ns, /* o : quantized noise factor */ - const int16_t element_mode /* i : IVAS element mode */ -) -{ - int16_t i, k, win, segmentOffset; - float inv_gain2 = 0.f, sqErrorNrg, n, tilt_factor, tmp; - float att; /* noise level attenuation factor for transient windows */ - - /*Adjust noise filling level*/ - sqErrorNrg = 0.0f; - n = 0.0f; - /* max() */ - tilt_factor = 1.0f / (float) pow( max( 0.375f, tiltCompFactor ), 1.0f / (float) L_frame ); /* 1/(a^b) = a^-b */ - inv_gain2 = 1.0f / ( (float) ( nTransWidth * nTransWidth ) * gain_tcx ); - - /* find last nonzero line below iFirstLine, use it as start offset */ - i = iFirstLine; - - if ( element_mode == IVAS_CPE_MDCT ) /* ... but only in mono or parametric stereo since it may cause binaural unmasking in discrete stereo */ - { - segmentOffset = i; - } - else - { - for ( ; i > ( iFirstLine >> 1 ); i-- ) - { - if ( sqQ[i] != 0.0f ) - { - break; - } - } - inv_gain2 *= (float) pow( tilt_factor, (float) i ); - segmentOffset = ++i; - } - - if ( nTransWidth <= 3 ) - { - att = tmp = FLT_MIN; - for ( k = i & 0xFFFE; k < lowpassLine; k++ ) - { - att += x_orig[k] * x_orig[k]; /* even-index bins, left sub-win */ - k++; - tmp += x_orig[k] * x_orig[k]; /* odd-index bins, right sub-win */ - } - att = (float) sqrt( ( min( att, tmp ) * 2.0f ) / ( att + tmp ) ); - } - else - { - att = 1.0f; - } - win = 0; - for ( ; i < lowpassLine; i++ ) - { - inv_gain2 *= tilt_factor; - if ( sqQ[i] != 0 ) /* current line is not zero, so reset pointers */ - { - if ( win > 0 ) /* add segment sum to sum of segment magnitudes */ - { - k = i - segmentOffset; - if ( nTransWidth <= 3 ) - { - n += ( k > 2 * nTransWidth - 4 ) ? (float) ( k - nTransWidth + 1 ) - : (float) ( k * k ) * 0.28125f / nTransWidth; /* table lookup instead of */ - } - else - { - n += ( k > 12 ) ? (float) k - 7.0f : (float) ( k * k ) * 0.03515625f; - } - for ( k = segmentOffset; k < i - win; k++ ) - { - sqErrorNrg += sqQ[k] * (float) nTransWidth; - sqQ[k] = 0; - } - for ( ; win > 0; win-- ) - { - sqErrorNrg += sqQ[k] * (float) win; - sqQ[k++] = 0; - } - } - segmentOffset = i + 1; /* new segment might start at next line */ - } - else /* current line is zero, so update pointers & segment sum */ - { - if ( win < nTransWidth ) - { - win++; - } - /* update segment sum: magnitudes scaled by smoothing function */ - sqQ[i] = (float) fabs( x_orig[i] ) * (float) win * inv_gain2; - } - } - if ( win > 0 ) /* add last segment sum to sum of segment magnitudes */ - { - k = i - segmentOffset; - if ( nTransWidth <= 3 ) - { - n += ( k > 2 * nTransWidth - 4 ) ? (float) ( k - nTransWidth + 1 ) - : (float) ( k * k ) * 0.28125f / nTransWidth; /* table lookup instead of */ - } - else - { - n += ( k > 12 ) ? (float) k - 7.0f : (float) ( k * k ) * 0.03515625f; - } - for ( k = segmentOffset; k < i - win; k++ ) - { - sqErrorNrg += sqQ[k] * (float) nTransWidth; - sqQ[k] = 0; - } - for ( ; win > 0; win-- ) - { - sqErrorNrg += sqQ[k] * (float) win; - sqQ[k++] = 0; - } - } - - /* noise level factor: average of segment magnitudes of noise bins */ - if ( n > 0.0f ) - { - *fac_ns = ( sqErrorNrg * att ) / n; - } - else - { - *fac_ns = 0.0f; - } - - /* quantize, dequantize noise level factor (range 0.09375 - 0.65625) */ - *quantized_fac_ns = (int16_t) ( 0.5f + *fac_ns * 1.34375f * ( 1 << NBITS_NOISE_FILL_LEVEL ) ); - if ( *quantized_fac_ns > ( 1 << NBITS_NOISE_FILL_LEVEL ) - 1 ) - { - *quantized_fac_ns = ( 1 << NBITS_NOISE_FILL_LEVEL ) - 1; - } - *fac_ns = (float) ( *quantized_fac_ns ) * 0.75f / ( 1 << NBITS_NOISE_FILL_LEVEL ); - - return; -} - - -/*---------------------------------------------------------------------* - * tcx_encoder_memory_update() - * - * - *---------------------------------------------------------------------*/ - -void tcx_encoder_memory_update( - Encoder_State *st, /* i/o: encoder memory state */ - float *xn_buf, /* i/o: mdct output buffer/time domain weigthed synthesis */ - const float *Ai, /* i : Unquantized (interpolated) LPC coefficients */ - const float *A /* i : Quantized LPC coefficients */ -) -{ - int16_t L_frame_glob; - float tmp; - float buf[1 + M + L_FRAME_PLUS]; - float *synth; - LPD_state *LPDmem = st->hLPDmem; - - L_frame_glob = st->L_frame; - - /* Output synth */ - mvr2r( xn_buf, st->synth_flt, L_frame_glob ); - - /* Update synth */ - synth = buf + 1 + M; - mvr2r( LPDmem->syn_flt, buf, 1 + M ); - - mvr2r( xn_buf, synth, L_frame_glob ); - mvr2r( synth + L_frame_glob - M - 1, LPDmem->syn_flt, 1 + M ); - - if ( !st->tcxonly ) - { - /* Update weighted synthesis */ - residu( Ai + ( st->nb_subfr - 1 ) * ( M + 1 ), M, synth + L_frame_glob - 1, &tmp, 1 ); - LPDmem->mem_w0_flt = st->wspeech_enc_flt[L_frame_glob - 1] - tmp; - } - - /* Emphasis of synth -> synth_pe */ - tmp = synth[-M - 1]; - preemph( synth - M, st->hTcxCfg->preemph_fac_flt, M + L_frame_glob, &tmp ); - mvr2r( synth + L_frame_glob - M, LPDmem->mem_syn_flt, M ); - mvr2r( synth + L_frame_glob - M, LPDmem->mem_syn2_flt, M ); - mvr2r( synth + L_frame_glob - L_SYN_MEM, LPDmem->mem_syn_r_flt, L_SYN_MEM ); - - if ( !st->tcxonly || ( L_frame_glob == L_FRAME16k ) ) - { - /* Update excitation */ - if ( L_frame_glob < L_EXC_MEM ) - { - mvr2r( LPDmem->old_exc_flt + ( L_frame_glob ), LPDmem->old_exc_flt, L_EXC_MEM - L_frame_glob ); - residu( A, M, synth, LPDmem->old_exc_flt + L_EXC_MEM - ( L_frame_glob ), L_frame_glob ); - } - else - { - residu( A, M, synth + (L_frame_glob) -L_EXC_MEM, LPDmem->old_exc_flt, L_EXC_MEM ); - } - } - - return; -} - - -/*---------------------------------------------------------------------* - * tcx_ari_res_Q_spec() - * - * Residual Quantization - *---------------------------------------------------------------------*/ - -/*! r: number of bits used (including "bits") */ -int16_t tcx_ari_res_Q_spec( - const float x_orig[], /* i : original spectrum */ - const int16_t signs[], /* i : signs (x_orig[.]<0) */ - float x_Q[], /* i/o: quantized spectrum */ - const int16_t L_frame, /* i : number of lines */ - const float gain, /* i : TCX gain */ - int16_t prm[], /* o : bitstream */ - int16_t target_bits, /* i : number of bits available */ - int16_t bits, /* i : number of bits used so far */ - const float deadzone, /* i : quantizer deadzone */ - const float x_fac[] /* i : spectrum post-quantization factors */ -) -{ - int16_t i, j, num_zeros; - int16_t zeros[L_FRAME_PLUS]; - float fac_m, fac_p, thres, x_Q_m, x_Q_p; - - /* Limit the number of residual bits */ - target_bits = min( target_bits, NPRM_RESQ ); - - - /* Requantize the spectrum line-by-line */ - fac_m = deadzone * 0.5f; - fac_p = 0.5f - fac_m; - num_zeros = 0; - - if ( x_fac == NULL ) - { - for ( i = 0; i < L_frame; ++i ) - { - if ( bits >= target_bits ) - { - /* no bits left */ - break; - } - if ( x_Q[i] != 0 ) - { - int16_t sign = ( 1 - 2 * signs[i] ); - - x_Q_m = x_Q[i] - sign * fac_m; - x_Q_p = x_Q[i] + sign * fac_p; - if ( fabs( x_orig[i] - gain * x_Q_m ) < fabs( x_orig[i] - gain * x_Q_p ) ) /* Decrease magnitude */ - { - x_Q[i] = x_Q_m; - prm[bits++] = 0; - } - else /* Increase magnitude */ - { - x_Q[i] = x_Q_p; - prm[bits++] = 1; - } - } - else - { - zeros[num_zeros++] = i; - } - } - - /* Requantize zeroed-lines of the spectrum */ - fac_p = ( 1.0f - deadzone ) * 0.33f; - --target_bits; /* reserve 1 bit for the check below */ - for ( j = 0; j < num_zeros; ++j ) - { - if ( bits >= target_bits ) - { - /* 1 or 0 bits left */ - break; - } - - i = zeros[j]; - - thres = fac_p; - if ( fabs( x_orig[i] ) > thres * gain ) - { - prm[bits++] = 1; - prm[bits++] = 1 - signs[i]; - x_Q[i] = ( 2 - 4 * signs[i] ) * thres; - } - else - { - prm[bits++] = 0; - } - } - - return bits; - } - - for ( i = 0; i < L_frame; ++i ) - { - if ( bits >= target_bits ) - { - /* no bits left */ - break; - } - if ( x_Q[i] != 0 ) - { - float sign = ( 1 - 2 * signs[i] ) * x_fac[i]; - - x_Q_m = x_Q[i] - sign * fac_m; - x_Q_p = x_Q[i] + sign * fac_p; - if ( fabs( x_orig[i] - gain * x_Q_m ) < fabs( x_orig[i] - gain * x_Q_p ) ) /* Decrease magnitude */ - { - x_Q[i] = x_Q_m; - prm[bits++] = 0; - } - else /* Increase magnitude */ - { - x_Q[i] = x_Q_p; - prm[bits++] = 1; - } - } - else - { - zeros[num_zeros++] = i; - } - } - - /* Requantize zeroed-lines of the spectrum */ - fac_p = ( 1.0f - deadzone ) * 0.33f; - --target_bits; /* reserve 1 bit for the check below */ - for ( j = 0; j < num_zeros; ++j ) - { - if ( bits >= target_bits ) - { - /* 1 or 0 bits left */ - break; - } - - i = zeros[j]; - - thres = fac_p * x_fac[i]; - if ( fabs( x_orig[i] ) > thres * gain ) - { - prm[bits++] = 1; - prm[bits++] = 1 - signs[i]; - x_Q[i] = ( 2 - 4 * signs[i] ) * thres; - } - else - { - prm[bits++] = 0; - } - } - - return bits; -} - - -/*---------------------------------------------------------------------* - * tcx_res_Q_gain() - * - * - *---------------------------------------------------------------------*/ - -#define kMaxEstimatorOvershoot 5 -#define kMaxEstimatorUndershoot 0 - -int16_t tcx_res_Q_gain( - float sqGain, - float *gain_tcx, - int16_t *prm, - int16_t sqTargetBits ) -{ - int16_t bits; - float gain_reQ; - - /*Refine the gain quantization : Normal greedy gain coding */ - gain_reQ = *gain_tcx; - for ( bits = 0; bits < TCX_RES_Q_BITS_GAIN; bits++ ) - { - if ( sqGain < gain_reQ ) - { - prm[bits] = 0; - gain_reQ *= gain_corr_inv_fac_flt[bits]; - } - else - { - prm[bits] = 1; - gain_reQ *= gain_corr_fac_flt[bits]; - } - if ( bits < sqTargetBits ) - { - *gain_tcx = gain_reQ; - } - } - - return ( bits ); -} - -/*---------------------------------------------------------------------* - * refine_0() - * - * - *---------------------------------------------------------------------*/ - -static void refine_0( - const float x_orig, - float *x_Q, - const float sqGain, - int16_t *prm, - int16_t *bits, - const float sq_round, - const float lf_deemph_factor ) -{ - float /*b,*/ thres; - /* was */ - /*b = x_orig/sqGain;*/ - thres = ( 1.0f - sq_round ) * 0.33f * lf_deemph_factor; - if ( x_orig > thres * sqGain ) - { - /* was (b > thres) */ - prm[( *bits )++] = 1; - prm[( *bits )++] = 1; - *x_Q = 2.f * thres; - } - else if ( x_orig < -thres * sqGain ) - { - /* was (b < -thres) */ - prm[( *bits )++] = 1; - prm[( *bits )++] = 0; - *x_Q = -2.f * thres; - } - else - { - prm[( *bits )++] = 0; - } - return; -} /*---------------------------------------------------------------------* - * tcx_res_Q_spec() + * AdaptLowFreqEmph() * * *---------------------------------------------------------------------*/ -int16_t tcx_res_Q_spec( - const float *x_orig, - float *x_Q, - const int16_t L_frame, - const float sqGain, - int16_t *prm, - int16_t sqTargetBits, - int16_t bits, - const float sq_round, - const float lf_deemph_factors[] ) -{ - int16_t i; - float fac_m, fac_p; - - /* Limit the number of residual bits */ - sqTargetBits = min( sqTargetBits, NPRM_RESQ ); - - /* Requantize the spectrum line-by-line */ - fac_p = 0.5f - sq_round * 0.5f; - fac_m = sq_round * 0.5f; - if ( !lf_deemph_factors ) - { - for ( i = 0; i < L_frame; i++ ) - { - if ( bits >= sqTargetBits - kMaxEstimatorUndershoot ) - { - fac_m = fac_p = 0; - if ( bits >= min( NPRM_RESQ, sqTargetBits + kMaxEstimatorOvershoot ) ) - { - break; - } - } - - if ( x_Q[i] != 0.0f ) - { - if ( x_orig[i] < (sqGain) *x_Q[i] ) - { - prm[bits++] = 0; - x_Q[i] -= ( x_Q[i] > 0 ) ? fac_m : fac_p; - } - else - { - prm[bits++] = 1; - x_Q[i] += ( x_Q[i] > 0 ) ? fac_p : fac_m; - } - } - } - sqTargetBits -= 2; /* Quantize zeroed lines of the spectrum */ - for ( i = 0; ( i < L_frame ) && ( bits < sqTargetBits ); i++ ) - { - /* bits < sqTargetBits */ - if ( x_Q[i] == 0.0f ) - { - refine_0( x_orig[i], &x_Q[i], sqGain, prm, &bits, sq_round, 1.0f ); /* inlined */ - } - } - /* Make sure that all possible bits are initialized */ - for ( i = bits; i < NPRM_RESQ; i++ ) - { - prm[i] = 0; - } - return bits; - } - for ( i = 0; i < L_frame; i++ ) - { - if ( bits >= sqTargetBits - kMaxEstimatorUndershoot ) - { - fac_m = fac_p = 0; - if ( bits >= min( NPRM_RESQ, sqTargetBits + kMaxEstimatorOvershoot ) ) - { - break; - } - } - - if ( x_Q[i] != 0 && lf_deemph_factors[i] > 0.5f ) - { - if ( x_orig[i] < (sqGain) *x_Q[i] ) - { - prm[bits++] = 0; - x_Q[i] -= ( x_Q[i] > 0 ) ? fac_m * lf_deemph_factors[i] : fac_p * lf_deemph_factors[i]; - } - else - { - prm[bits++] = 1; - x_Q[i] += ( x_Q[i] > 0 ) ? fac_p * lf_deemph_factors[i] : fac_m * lf_deemph_factors[i]; - } - } - } - - /*Quantize zeroed-line of the spectrum*/ - for ( i = 0; ( i < L_frame ) && ( bits < ( sqTargetBits - 2 ) ); i++ ) - { - /* For (bits >= (sqTargetBits-2)) */ - if ( x_Q[i] == 0 && lf_deemph_factors[i] > 0.5f ) - { - refine_0( x_orig[i], &x_Q[i], sqGain, prm, &bits, sq_round, lf_deemph_factors[i] ); - } - } - - /*Be sure that every possible bits are initialized*/ - for ( i = bits; i < NPRM_RESQ; i++ ) - { - prm[i] = 0; - } - - return bits; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * ProcessIGF_ivas_fx() * @@ -1527,79 +153,6 @@ void ProcessIGF_ivas_fx( return; } -#else -/*---------------------------------------------------------------------* - * ProcessIGF() - * - * - *---------------------------------------------------------------------*/ -void ProcessIGF( - Encoder_State *st, /* i : Encoder state */ - float *pMDCTSpectrum, /* i : MDCT spectrum */ - const float *pITFMDCTSpectrum, /* i : MDCT spectrum fir ITF */ - float *pPowerSpectrum, /* i : MDCT^2 + MDST^2 spectrum, or estimate */ - const int16_t isTCX20, /* i : flag indicating if the input is TCX20 or TCX10/2xTCX5 */ - const int16_t frameno, /* i : flag indicating index of current subframe */ - const int16_t sp_aud_decision0, /* i : first stage switching decision */ - const int16_t vad_hover_flag /* i : VAD hangover flag */ -) -{ - int16_t igfGridIdx, isIndepFlag, bsBits, pBsStart, curr_order; - float predictionGain; - float A[ITF_MAX_FILTER_ORDER + 1]; - - IGF_ENC_INSTANCE_HANDLE hIGFEnc = st->hIGFEnc; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - isIndepFlag = 1; - if ( st->last_core == ACELP_CORE && isTCX20 ) - { - igfGridIdx = IGF_GRID_LB_TRAN; - } - else if ( isTCX20 ) - { - igfGridIdx = IGF_GRID_LB_NORM; - } - else - { - /* It is short block */ - igfGridIdx = IGF_GRID_LB_SHORT; - if ( frameno == 1 ) - { - isIndepFlag = 0; - } - } - - IGFSaveSpectrumForITF( hIGFEnc, igfGridIdx, pITFMDCTSpectrum ); - - IGFEncApplyMono( st, igfGridIdx, pMDCTSpectrum, pPowerSpectrum, isTCX20, st->hTcxEnc->fUseTns[frameno], sp_aud_decision0, vad_hover_flag ); - - curr_order = 0; - predictionGain = 0; - - ITF_Detect( hIGFEnc->spec_be_igf_flt, hIGFEnc->infoStartLine, hIGFEnc->infoStopLine, 8 /*maxOrder*/, A, &predictionGain, &curr_order ); - - hIGFEnc->flatteningTrigger = hIGFEnc->tns_predictionGain_flt < 1.15 && predictionGain < 1.15; - - hIGFEnc->infoTotalBitsPerFrameWritten = 0; - - if ( isTCX20 ) - { - IGFEncWriteBitstream( hIGFEnc, NULL, &hIGFEnc->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); - } - else - { - pBsStart = hBstr->nb_ind_tot; - - IGFEncWriteBitstream( hIGFEnc, hBstr, &hIGFEnc->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); - - bsBits = hBstr->nb_ind_tot - pBsStart; - IGFEncConcatenateBitstream( hIGFEnc, bsBits, hBstr ); - } - - return; -} -#endif /*---------------------------------------------------------------------* @@ -1608,7 +161,6 @@ void ProcessIGF( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ProcessStereoIGF_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ @@ -1704,112 +256,3 @@ void ProcessStereoIGF_fx( } return; } -#else -void ProcessStereoIGF( - STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, - Encoder_State *sts[CPE_CHANNELS], /* i : Encoder state */ - int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ - float *pITFMDCTSpectrum[CPE_CHANNELS][NB_DIV], /* i : MDCT spectrum fir ITF */ - float *pPowerSpectrum[CPE_CHANNELS], /* i/o: MDCT^2 + MDST^2 spectrum, or estimate */ - float *pPowerSpectrumMsInv[CPE_CHANNELS][NB_DIV], /* i : inverse power spectrum */ - float *inv_spectrum[CPE_CHANNELS][NB_DIV], /* i : inverse spectrum */ - const int16_t frameno, /* i : flag indicating index of current subfr. */ - const int16_t sp_aud_decision0, /* i : sp_aud_decision0 */ - const int32_t element_brate, /* i : element bitrate */ - const int16_t mct_on /* i : flag mct block (1) or stereo (0) */ -) -{ - int16_t ch, igfGridIdx, isIndepFlag, bsBits, pBsStart, curr_order; - float predictionGain; - float A[ITF_MAX_FILTER_ORDER + 1]; - IGF_ENC_INSTANCE_HANDLE hIGFEnc[CPE_CHANNELS]; - BSTR_ENC_HANDLE hBstr; - - hIGFEnc[0] = sts[0]->hIGFEnc; - hIGFEnc[1] = sts[1]->hIGFEnc; - - isIndepFlag = 1; - - if ( sts[0]->last_core == ACELP_CORE && sts[0]->core == TCX_20_CORE ) - { - igfGridIdx = IGF_GRID_LB_TRAN; - } - else if ( sts[0]->core == TCX_20_CORE ) - { - igfGridIdx = IGF_GRID_LB_NORM; - } - else - { - /* It is short block */ - igfGridIdx = IGF_GRID_LB_SHORT; - if ( frameno == 1 ) - { - isIndepFlag = 0; - } - } - - IGFSaveSpectrumForITF( hIGFEnc[0], igfGridIdx, pITFMDCTSpectrum[0][frameno] ); - - IGFSaveSpectrumForITF( hIGFEnc[1], igfGridIdx, pITFMDCTSpectrum[1][frameno] ); - - IGFEncApplyStereo( hStereoMdct, ms_mask, hIGFEnc, igfGridIdx, sts, pPowerSpectrum, pPowerSpectrumMsInv, inv_spectrum, frameno, sp_aud_decision0, element_brate, mct_on ); - - for ( ch = 0; ch < CPE_CHANNELS; ch++ ) - { - curr_order = 0; - - ITF_Detect( hIGFEnc[ch]->spec_be_igf_flt, hIGFEnc[ch]->infoStartLine, hIGFEnc[ch]->infoStopLine, 8 /*maxOrder*/, A, &predictionGain, &curr_order ); - - hIGFEnc[ch]->flatteningTrigger = hIGFEnc[ch]->tns_predictionGain_flt < 1.15 && predictionGain < 1.15; - - hIGFEnc[ch]->infoTotalBitsPerFrameWritten = 0; - - if ( sts[ch]->core == TCX_20_CORE ) - { - IGFEncWriteBitstream( hIGFEnc[ch], NULL, &hIGFEnc[ch]->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); - } - else - { - hBstr = sts[ch]->hBstr; - pBsStart = hBstr->nb_ind_tot; - if ( ch > 0 ) - { - hBstr->ind_list = sts[0]->hBstr->ind_list + sts[0]->hBstr->nb_ind_tot; - } - IGFEncWriteBitstream( hIGFEnc[ch], hBstr, &hIGFEnc[ch]->infoTotalBitsPerFrameWritten, igfGridIdx, isIndepFlag ); - - bsBits = hBstr->nb_ind_tot - pBsStart; - IGFEncConcatenateBitstream( hIGFEnc[ch], bsBits, hBstr ); - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * attenuateNbSpectrum() - * - * - *---------------------------------------------------------------------*/ - -void attenuateNbSpectrum( - const int16_t L_frame, - float *spectrum ) -{ - int16_t i, length; - float att; - - length = L_frame / 20; - att = ( length == 8 ) ? 0.6f : 0.66f; - - for ( i = 0; i < length; i++ ) - { - spectrum[L_frame - length + i] *= att; - att *= att; - } - - return; -} -#endif diff --git a/lib_enc/tcx_utils_enc_fx.c b/lib_enc/tcx_utils_enc_fx.c index 5f29f02fd..9d1418d20 100644 --- a/lib_enc/tcx_utils_enc_fx.c +++ b/lib_enc/tcx_utils_enc_fx.c @@ -2247,7 +2247,6 @@ void tcx_noise_factor_fx( *fac_ns = extract_l( L_mult0( *quantized_fac_ns, shr( 24576 /*0.75f Q15*/, NBITS_NOISE_FILL_LEVEL ) ) ); } -#ifdef IVAS_FLOAT_FIXED void tcx_noise_factor_ivas_fx( Word32 *x_orig, /* i: unquantized mdct coefficients */ Word16 x_orig_e, /* i: exponent */ @@ -2580,7 +2579,6 @@ void tcx_noise_factor_ivas_fx( *fac_ns = extract_l( L_mult0( *quantized_fac_ns, shr( 24576 /*0.75f Q15*/, NBITS_NOISE_FILL_LEVEL ) ) ); } -#endif void tcx_encoder_memory_update_fx( Word16 *wsig, /* i : target weighted signal */ @@ -2650,7 +2648,6 @@ void tcx_encoder_memory_update_fx( } } -#ifdef IVAS_FLOAT_FIXED void tcx_encoder_memory_update_ivas_fx( Word16 *wsig, /* i : target weighted signal, Q_new */ Word16 *xn_buf, /* i/o: mdct output buffer/time domain weigthed synthesis, Q_new */ @@ -2712,7 +2709,6 @@ void tcx_encoder_memory_update_ivas_fx( } } } -#endif /*--------------------------------------------------------------- diff --git a/lib_enc/tfa_enc.c b/lib_enc/tfa_enc.c index 3522fa0c4..825401325 100644 --- a/lib_enc/tfa_enc.c +++ b/lib_enc/tfa_enc.c @@ -39,84 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * tfaCalcEnv() - * - * - *-------------------------------------------------------------------*/ - -void tfaCalcEnv( - const float *shb_speech, - float *enr ) -{ - int16_t i, j, k; - for ( i = 0, k = 0; i < N_TEC_TFA_SUBFR; i++ ) - { - enr[i] = 1e-12f; - for ( j = 0; j < L_TEC_TFA_SUBFR16k; j++ ) /* XX/2 since Fs = 16kHz */ - { - enr[i] += shb_speech[k] * shb_speech[k]; - k++; - } - } - - return; -} - -/*-------------------------------------------------------------------* - * tfaEnc_TBE() - * - * - *-------------------------------------------------------------------*/ - -int16_t tfaEnc_TBE( - const float *enr, - const int16_t last_core, - const float *voicing, - const float *pitch_buf ) -{ - int16_t i; - float m_g, m_a; /* m_g: geometrical mean, m_a: arithmetical mean */ - float flatness = 0; - float voicing_sum; - int16_t tfa_flag; - - float pitch_buf_sum; - const float m_a_bottom = 10000.0 / N_TEC_TFA_SUBFR; - - tfa_flag = 0; - - m_a = 1e-12f; - m_g = 0.0; - for ( i = 0; i < N_TEC_TFA_SUBFR; i++ ) - { - m_a += enr[i]; - m_g = (float) ( m_g + log10( enr[i] ) ); - } - m_a /= N_TEC_TFA_SUBFR; - m_g /= N_TEC_TFA_SUBFR; - m_g = (float) pow( 10.0, m_g ); - - flatness = m_g / m_a; - - voicing_sum = voicing[0] + voicing[1]; - - pitch_buf_sum = pitch_buf[0] + pitch_buf[1] + pitch_buf[2] + pitch_buf[3]; - - if ( ( flatness > 0.70 && pitch_buf_sum > 4.0 * 110 && voicing_sum > 2.0 * 0.70 ) || - ( last_core == TCX_20_CORE && flatness > 0.50 && voicing_sum < 2.0 * 0.70 ) ) - { - tfa_flag = 1; - } - - /* energy lower limit */ - if ( m_a < m_a_bottom ) - { - tfa_flag = 0; - } - - return tfa_flag; -} -#endif diff --git a/lib_enc/tns_base_enc.c b/lib_enc/tns_base_enc.c index 76cbd6eeb..b3f3a90b7 100644 --- a/lib_enc/tns_base_enc.c +++ b/lib_enc/tns_base_enc.c @@ -52,50 +52,6 @@ #define MAX_SUBDIVISIONS 3 -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------------- - * Local prototypes - *---------------------------------------------------------------------------*/ - -static void GetFilterParameters( const float rxx[], const int16_t maxOrder, STnsFilter *pTnsFilter ); - -static void Parcor2Index( const float parCoeff[], int16_t index[], const int16_t order ); - -static void TnsDecision( STnsConfig const *pTnsConfig, TRAN_DET_HANDLE hTranDet, const int16_t isTCX10, const float ltp_gain, STnsData *pTnsData ); - - -/*---------------------------------------------------------------------* - * DetectTnsFilt() - * - * - *---------------------------------------------------------------------*/ - -int16_t DetectTnsFilt( - const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ - const float pSpectrum[], /* i : MDCT spectrum */ - TRAN_DET_HANDLE hTranDet, /* i : transient detection handle */ - const int16_t isTCX10, /* i : TCX10 or TCX20? */ - const float ltp_gain, /* i : LTP gain */ - STnsData *pTnsData, /* o : TNS data struct */ - float *predictionGain /* o : TNS prediction gain */ -) -{ - ResetTnsData_flt( pTnsData ); - - if ( pTnsConfig->maxOrder <= 0 ) - { - return 0; - } - - CalculateTnsFilt( pTnsConfig, pSpectrum, pTnsData, predictionGain ); - - TnsDecision( pTnsConfig, hTranDet, isTCX10, ltp_gain, pTnsData ); - - return ( pTnsData->nFilters > 0 ) ? 1 : 0; -} -#endif - - /*---------------------------------------------------------------------* * EncodeTnsData() * @@ -145,345 +101,3 @@ void EncodeTnsData( return; } - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------------* - * WriteTnsData() - * - * - *---------------------------------------------------------------------*/ - -void WriteTnsData( - const STnsConfig *pTnsConfig, /* i : TNS Configuration struct */ - const int16_t *stream, /* i : internal data stream */ - int16_t *pnSize, /* o : number of written parameters */ - BSTR_ENC_HANDLE hBstr, /* o : bitstream */ - int16_t *pnBits /* o : number of written bits */ -) -{ - if ( pTnsConfig->nMaxFilters > 1 ) - { - if ( pTnsConfig->allowTnsOnWhite ) - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - WriteToBitstream( &tnsEnabledOnWhiteSWBTCX10BitMap, 1, &stream, pnSize, hBstr, pnBits ); - } - else - { - WriteToBitstream( &tnsEnabledOnWhiteSWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); - } - } - else - { - if ( pTnsConfig->iFilterBorders[0] < 512 ) - { - WriteToBitstream( &tnsEnabledSWBTCX10BitMap, 1, &stream, pnSize, hBstr, pnBits ); - } - else - { - WriteToBitstream( &tnsEnabledSWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); - } - } - } - else - { - WriteToBitstream( &tnsEnabledWBTCX20BitMap, 1, &stream, pnSize, hBstr, pnBits ); - } - - return; -} - - -/*********************************************************************************************/ -/* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ -/*********************************************************************************************/ - -/*---------------------------------------------------------------------* - * AutoToParcor() - * - * Autocorrelation to parcor coefficients - *---------------------------------------------------------------------*/ - -static float AutoToParcor( - const float input[], /* i : autocorrelation */ - float parCoeff[], /* o : parcor coeffs */ - const int16_t order /* i : prediction order */ -) -{ - int16_t i, j; - float tmp, tmp2; - float workBuffer[2 * TNS_MAX_FILTER_ORDER]; - float *const pWorkBuffer = &workBuffer[order]; /* temp pointer */ - - for ( i = 0; i < order; i++ ) - { - workBuffer[i] = input[i]; - pWorkBuffer[i] = input[i + 1]; - } - - for ( i = 0; i < order; i++ ) - { - if ( workBuffer[0] < 1.0f / 65536.0f ) - { - tmp = 0; - } - else - { - tmp = -pWorkBuffer[i] / workBuffer[0]; - } - - /* compensate for calculation inaccuracies limit reflection coefs to ]-1,1[ */ - tmp = min( 0.999f, max( -0.999f, tmp ) ); - - parCoeff[i] = tmp; - for ( j = i; j < order; j++ ) - { - tmp2 = pWorkBuffer[j] + tmp * workBuffer[j - i]; - workBuffer[j - i] += tmp * pWorkBuffer[j]; - pWorkBuffer[j] = tmp2; - } - } - - return ( ( input[0] + 1e-30f ) / ( workBuffer[0] + 1e-30f ) ); -} - - -/*---------------------------------------------------------------------* - * GetFilterParameters() - * - * Get TNS filter parameters from autocorrelation - *---------------------------------------------------------------------*/ - -static void GetFilterParameters( - const float rxx[], /* i : auto correlation */ - const int16_t maxOrder, /* i : max. prediction order */ - STnsFilter *pTnsFilter /* i : TNS filter coeffs */ -) -{ - int16_t i; - float parCoeff[TNS_MAX_FILTER_ORDER]; - const float *values = tnsCoeff4_flt; - int16_t *indexes = pTnsFilter->coefIndex; - - /* Variable initialization */ - /* compute TNS filter in lattice (ParCor) form with LeRoux-Gueguen algorithm */ - pTnsFilter->predictionGain_flt = AutoToParcor( rxx, parCoeff, maxOrder ); - - /* non-linear quantization of TNS lattice coefficients with given resolution */ - Parcor2Index( parCoeff, indexes, maxOrder ); - - /* reduce filter order by truncating trailing zeros */ - i = maxOrder - 1; - while ( ( i >= 0 ) && ( indexes[i] == 0 ) ) - { - --i; - /* Loop condition */ - } - pTnsFilter->order = i + 1; - - /* compute avg(coef*coef) */ - pTnsFilter->avgSqrCoef_flt = 0; - for ( i = pTnsFilter->order - 1; i >= 0; i-- ) - { - const float value = values[indexes[i] + INDEX_SHIFT]; - - /* Variable initialization */ - pTnsFilter->avgSqrCoef_flt += value * value; - } - pTnsFilter->avgSqrCoef_flt /= maxOrder; - - return; -} - - -/*---------------------------------------------------------------------* - * Parcor2Index() - * - * Quantization for reflection coefficients - *---------------------------------------------------------------------*/ - -static void Parcor2Index( - const float parCoeff[], /* i : parcor coefficients */ - int16_t index[], /* o : quantized parcor coeffs */ - const int16_t order /* i : order */ -) -{ - const int16_t nValues = 1 << TNS_COEF_RES; - const float *values = tnsCoeff4_flt; - int16_t i; - int16_t iIndex; - float x; - - for ( i = 0; i < order; i++ ) - { - iIndex = 1; - x = parCoeff[i]; - /* Variable initialization */ - assert( ( x >= -1.0f ) && ( x <= 1.0f ) ); - while ( ( iIndex < nValues ) && ( x > 0.5f * ( values[iIndex - 1] + values[iIndex] ) ) ) - { - ++iIndex; - /* Loop condition */ - } - index[i] = ( iIndex - 1 ) - INDEX_SHIFT; - } - - return; -} - - -/*---------------------------------------------------------------------* - * CalculateTnsFilt() - * - * - *---------------------------------------------------------------------*/ - -void CalculateTnsFilt( - STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ - const float pSpectrum[], /* i : MDCT spectrum */ - STnsData *pTnsData, /* o : TNS data struct */ - float *predictionGain /* o : TNS prediction gain */ -) -{ - float norms[TNS_MAX_NUM_OF_FILTERS][MAX_SUBDIVISIONS]; - int16_t i, iFilter, idx0, idx1, nSubdivisions, iSubdivisions, spectrumLength; - int16_t iStartLine, iEndLine, lag; - float fac; - float rxx[TNS_MAX_FILTER_ORDER + 1]; - const float *pWindow; - STnsFilter *pFilter; - - for ( i = 0; i < TNS_MAX_NUM_OF_FILTERS; i++ ) - { - set_f( norms[i], 0, MAX_SUBDIVISIONS ); - } - - /* Calculate norms for each spectrum part */ - for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) - { - idx0 = pTnsConfig->iFilterBorders[iFilter + 1]; - idx1 = pTnsConfig->iFilterBorders[iFilter]; - nSubdivisions = pTnsConfig->pTnsParameters[iFilter].nSubdivisions; - - /* Variable initialization */ - assert( pTnsConfig->pTnsParameters[iFilter].nSubdivisions <= MAX_SUBDIVISIONS ); - for ( iSubdivisions = 0; iSubdivisions < nSubdivisions; iSubdivisions++ ) - { - iStartLine = idx0 + ( idx1 - idx0 ) * iSubdivisions / nSubdivisions; - iEndLine = idx0 + ( idx1 - idx0 ) * ( iSubdivisions + 1 ) / nSubdivisions; - - /* Variable initialization */ - norms[iFilter][iSubdivisions] = sum2_f( pSpectrum + iStartLine, iEndLine - iStartLine ); - } - } - - /* Calculate normalized autocorrelation for spectrum subdivision and get TNS filter parameters based on it */ - for ( iFilter = 0; iFilter < pTnsConfig->nMaxFilters; iFilter++ ) - { - idx0 = pTnsConfig->iFilterBorders[iFilter + 1]; - idx1 = pTnsConfig->iFilterBorders[iFilter]; - spectrumLength = idx1 - idx0; - pFilter = pTnsData->filter + iFilter; - nSubdivisions = pTnsConfig->pTnsParameters[iFilter].nSubdivisions; - - set_f( rxx, 0, TNS_MAX_FILTER_ORDER + 1 ); /* WMOPS: This initialization is required */ - - /* Variable initialization */ - for ( iSubdivisions = 0; ( iSubdivisions < nSubdivisions ) && ( norms[iFilter][iSubdivisions] > HLM_MIN_NRG ); iSubdivisions++ ) - { - fac = 1.0f / norms[iFilter][iSubdivisions]; - iStartLine = idx0 + spectrumLength * iSubdivisions / nSubdivisions; - iEndLine = idx0 + spectrumLength * ( iSubdivisions + 1 ) / nSubdivisions; - pWindow = tnsAcfWindow; - - /* For additional loop condition */ - /* Variable initialization */ - for ( lag = 1; lag <= pTnsConfig->maxOrder; lag++ ) - { - rxx[lag] += fac * ( *pWindow ) * dotp( pSpectrum + iStartLine, pSpectrum + iStartLine + lag, iEndLine - iStartLine - lag ); - pWindow++; - } - } - - if ( iSubdivisions == nSubdivisions ) /* meaning there is no subdivision with low energy */ - { - rxx[0] = (float) pTnsConfig->pTnsParameters[iFilter].nSubdivisions; - pFilter->spectrumLength = spectrumLength; - /* Limit the maximum order to spectrum length/4 */ - GetFilterParameters( rxx, min( pTnsConfig->maxOrder, pFilter->spectrumLength / 4 ), pFilter ); - } - } - - if ( predictionGain ) - { - assert( pTnsConfig->nMaxFilters == 1 ); - *predictionGain = pTnsData->filter->predictionGain_flt; - } - - return; -} - - -/*---------------------------------------------------------------------* - * TnsDecision() - * - * - *---------------------------------------------------------------------*/ - -static void TnsDecision( - STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ - TRAN_DET_HANDLE hTranDet, /* i : transient detection handle */ - const int16_t isTCX10, /* i : TCX10 or TCX20? */ - const float ltp_gain, /* i : LTP gain */ - STnsData *pTnsData /* i/o: TNDS data structure */ -) -{ - int16_t iFilter; - float maxEnergyChange; - STnsFilter *pFilter; - const struct TnsParameters *pTnsParameters; - - /* We check the filter's decisions in the opposite direction */ - for ( iFilter = pTnsConfig->nMaxFilters - 1; iFilter >= 0; iFilter-- ) - { - pFilter = pTnsData->filter + iFilter; - pTnsParameters = pTnsConfig->pTnsParameters + iFilter; - - /* TNS decision function */ - if ( ( pFilter->predictionGain_flt > pTnsParameters->minPredictionGain_flt ) || ( pFilter->avgSqrCoef_flt > pTnsParameters->minAvgSqrCoef_flt ) ) - { - if ( pTnsData->nFilters > 0 || isTCX10 || ltp_gain < 0.6f || hTranDet == NULL ) - { - ++pTnsData->nFilters; - } - else - { - maxEnergyChange = GetTCXMaxenergyChange( hTranDet, isTCX10, NSUBBLOCKS, 3 ); - if ( maxEnergyChange >= pTnsParameters->minEnergyChange_flt ) - { - ++pTnsData->nFilters; - } - else - { - ClearTnsFilterCoefficients_flt( pFilter ); - } - } - } - else if ( pTnsData->nFilters > 0 ) /* If a previous filter is turned on */ - { - /* Since TNS filter of order 0 is not allowed we haved to signal in the stream filter of order 1 with the 0th coefficient equal to 0 */ - ClearTnsFilterCoefficients_flt( pFilter ); - pFilter->order = 1; - ++pTnsData->nFilters; - } - else - { - ClearTnsFilterCoefficients_flt( pFilter ); - } - } - - return; -} -#endif diff --git a/lib_enc/tns_base_enc_fx.c b/lib_enc/tns_base_enc_fx.c index 16499fcfd..4d715dc3c 100644 --- a/lib_enc/tns_base_enc_fx.c +++ b/lib_enc/tns_base_enc_fx.c @@ -311,7 +311,6 @@ Word16 DetectTnsFilt_fx( STnsConfig const *pTnsConfig, return ( pTnsData->nFilters > 0 ); } -#ifdef IVAS_FLOAT_FIXED void CalculateTnsFilt_fx( STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ const Word32 pSpectrum[], /* i : MDCT spectrum Qx*/ @@ -509,7 +508,6 @@ void CalculateTnsFilt_fx( return; } -#endif Word16 DetectTnsFilt_ivas_fx( STnsConfig const *pTnsConfig, /* i : TNS Configuration struct */ Word32 const pSpectrum[], /* i : MDCT spectrum Q=Qx */ @@ -895,7 +893,6 @@ Word16 WriteTnsData_fx( STnsConfig const *pTnsConfig, Word16 const *stream, Word return TNS_NO_ERROR; } -#ifdef IVAS_FLOAT_FIXED Word16 WriteTnsData_ivas_fx( STnsConfig const *pTnsConfig, Word16 const *stream, Word16 *pnSize, BSTR_ENC_HANDLE hBstr, Word16 *pnBits ) { IF( GT_16( pTnsConfig->nMaxFilters, 1 ) ) @@ -930,7 +927,6 @@ Word16 WriteTnsData_ivas_fx( STnsConfig const *pTnsConfig, Word16 const *stream, return TNS_NO_ERROR; } -#endif /*********************************************************************************************/ /* Definitions of functions used in the mapping between TNS parameters and a bitstream. */ /*********************************************************************************************/ diff --git a/lib_enc/transient_detection.c b/lib_enc/transient_detection.c index b88d296fb..8e87e5685 100644 --- a/lib_enc/transient_detection.c +++ b/lib_enc/transient_detection.c @@ -43,10 +43,8 @@ #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------* * Local constants *---------------------------------------------------------------*/ @@ -63,17 +61,6 @@ * Local function prototypes *---------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void UpdateDelayBuffer( const float *inputconst, const int16_t nSamplesAvailable, DelayBuffer *pDelayBuffer ); -static void HighPassFilter( const float *input, const int16_t length, float *pFirState1, float *pFirState2, float *output ); -static void UpdateSubblockEnergies( const float *input, const int16_t nSamplesAvailable, SubblockEnergies *pSubblockEnergies ); -static void CalculateSubblockEnergies( const float *input, const int16_t nSamplesAvailable, SubblockEnergies *pSubblockEnergies ); -static void RunTransientDetector( TransientDetector *pTransientDetector ); -static void InitTransientDetector( SubblockEnergies *pSubblockEnergies, const int16_t nDelay, const int16_t nSubblocksToCheck, TCheckSubblocksForAttack pCheckSubblocksForAttack, const float attackRatioThreshold, TransientDetector *pTransientDetector ); -static void InitSubblockEnergies( const int16_t nFrameLength, const int16_t nDelay, DelayBuffer *pDelayBuffer, SubblockEnergies *pSubblockEnergies ); -static void InitDelayBuffer( const int16_t nFrameLength, const int16_t nDelay, DelayBuffer *pDelayBuffer ); -static void GetAttackForTCXDecision( const float *pSubblockNrg, const float *pAccSubblockNrg, const int16_t nSubblocks, const int16_t nPastSubblocks, const float attackRatioThreshold, int16_t *pbIsAttackPresent, int16_t *pAttackIndex ); -#endif /*-------------------------------------------------------------------* * InitTransientDetection() @@ -81,36 +68,6 @@ static void GetAttackForTCXDecision( const float *pSubblockNrg, const float *pAc * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void InitTransientDetection( - const int16_t nFrameLength, - const int16_t nTCXDelay, - TRAN_DET_HANDLE hTranDet, - const int16_t ext_mem_flag ) -{ - /* Init the delay buffer. */ - InitDelayBuffer( nFrameLength, nTCXDelay, &hTranDet->delayBuffer ); - - /* Init a subblock energies buffer used for the TCX Short/Long decision. */ - InitSubblockEnergies( nFrameLength, nTCXDelay, &hTranDet->delayBuffer, &hTranDet->subblockEnergies ); - - /* Init the TCX Short/Long transient detector. */ - InitTransientDetector( &hTranDet->subblockEnergies, nTCXDelay, NSUBBLOCKS, GetAttackForTCXDecision, 8.5f, &hTranDet->transientDetector ); - hTranDet->transientDetector.CheckSubblocksForAttack_fx = GetAttackForTCXDecision_fx; - - /* We need two past subblocks for the TCX TD and NSUBBLOCKS+1 for the temporal flatness measure for the TCX LTP. */ - if ( ext_mem_flag ) - { - hTranDet->transientDetector.pSubblockEnergies->nDelay += ( NSUBBLOCKS_SHIFT + 1 ) + NSUBBLOCKS + 1; - } - else - { - hTranDet->transientDetector.pSubblockEnergies->nDelay += NSUBBLOCKS + 1; - } - - return; -} -#endif /*-------------------------------------------------------------------* * GetTCXAvgTemporalFlatnessMeasure() @@ -118,297 +75,12 @@ void InitTransientDetection( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float GetTCXAvgTemporalFlatnessMeasure( - TRAN_DET_HANDLE hTranDet, - const int16_t nCurrentSubblocks, - const int16_t nPrevSubblocks ) -{ - int16_t i; - TransientDetector *pTransientDetector = &hTranDet->transientDetector; - const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; - const int16_t nDelay = pTransientDetector->nDelay; - const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; - const float *pSubblockNrgChange = NULL; - float sumTempFlatness; - const int16_t nTotBlocks = nCurrentSubblocks + nPrevSubblocks; - - /* Initialization */ - assert( nTotBlocks > 0 ); - sumTempFlatness = 0.0f; - - assert( ( nPrevSubblocks <= nRelativeDelay ) && ( nCurrentSubblocks <= NSUBBLOCKS + nDelay ) ); - - pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange_flt[nRelativeDelay - nPrevSubblocks]; - - for ( i = 0; i < nTotBlocks; i++ ) - { - sumTempFlatness += pSubblockNrgChange[i]; - } - - return sumTempFlatness / (float) nTotBlocks; -} -#endif /*-------------------------------------------------------------------* * GetTCXMaxenergyChange() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float GetTCXMaxenergyChange( - TRAN_DET_HANDLE hTranDet, - const int16_t isTCX10, - const int16_t nCurrentSubblocks, - const int16_t nPrevSubblocks ) -{ - int16_t i; - const TransientDetector *pTransientDetector = &hTranDet->transientDetector; - const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; - const int16_t nDelay = pTransientDetector->nDelay; - const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; - const float *pSubblockNrgChange = NULL; - float maxEnergyChange; - int16_t nTotBlocks = nCurrentSubblocks + nPrevSubblocks; - /* Initialization */ - assert( nTotBlocks > 0 ); - maxEnergyChange = 0.0f; - - assert( ( nPrevSubblocks <= nRelativeDelay ) && ( nCurrentSubblocks <= NSUBBLOCKS + nDelay ) ); - pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange_flt[nRelativeDelay - nPrevSubblocks]; - if ( pTransientDetector->bIsAttackPresent || isTCX10 ) /* frame is TCX-10 */ - { - const float *pSubblockNrg = &pSubblockEnergies->subblockNrg_flt[nRelativeDelay - nPrevSubblocks]; - float nrgMin, nrgMax = pSubblockNrg[0]; - int16_t idxMax = 0; - /* find subblock with maximum energy */ - for ( i = 1; i < nTotBlocks; i++ ) - { - if ( nrgMax < pSubblockNrg[i] ) - { - nrgMax = pSubblockNrg[i]; - idxMax = i; - } - } - nrgMin = nrgMax; - /* find minimum energy after maximum */ - for ( i = idxMax + 1; i < nTotBlocks; i++ ) - { - if ( nrgMin > pSubblockNrg[i] ) - { - nrgMin = pSubblockNrg[i]; - } - } - /* lower maxEnergyChange if energy doesn't decrease much after energy peak */ - if ( nrgMin > 0.375f * nrgMax ) - { - nTotBlocks = idxMax - 3; - } - } - for ( i = 0; i < nTotBlocks; i++ ) - { - maxEnergyChange = max( maxEnergyChange, pSubblockNrgChange[i] ); - } - - return maxEnergyChange; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*---------------------------------------------------------------* - * RunTransientDetection() - * - * Time Domain Transient Detector for TCX - *---------------------------------------------------------------*/ - -void RunTransientDetection( - const float *input, /* i : input signal */ - const int16_t length, /* i : frame length */ - TRAN_DET_HANDLE hTranDet /* i/o: transient detection handle */ -) -{ - float filteredInput[L_FRAME_MAX]; - SubblockEnergies *pSubblockEnergies = &hTranDet->subblockEnergies; - TransientDetector *pTransientDetector = &hTranDet->transientDetector; - float e0, e1; - - assert( ( input != NULL ) && ( hTranDet != NULL ) && ( pSubblockEnergies != NULL ) && ( pTransientDetector != NULL ) ); - - /* Variable initializations */ - HighPassFilter( input, length, &pSubblockEnergies->firState1_flt, &pSubblockEnergies->firState2_flt, filteredInput ); - - /* Update subblock energies. */ - UpdateSubblockEnergies( filteredInput, length, pSubblockEnergies ); - - /* Run transient detectors. */ - RunTransientDetector( pTransientDetector ); - - /* Update the delay buffer. */ - UpdateDelayBuffer( filteredInput, length, &hTranDet->delayBuffer ); - - /* compute ramp up flag */ - pSubblockEnergies->ramp_up_flag = ( ( pSubblockEnergies->ramp_up_flag << 1 ) & 0x0003 ); - e0 = dotp( filteredInput + length / 2, filteredInput + length / 2, pSubblockEnergies->pDelayBuffer->nSubblockSize / 2 ) + 0.5f * MIN_BLOCK_ENERGY; - e1 = pSubblockEnergies->subblockNrg_flt[pSubblockEnergies->nDelay + 4] - e0; - if ( e1 > e0 ) - { - pSubblockEnergies->ramp_up_flag |= 0x0001; - } - - return; -} - -static uint16_t isLongTermTransient( - const float frameTFM, - float *lastTFM ) -{ - float currTFM; - - if ( frameTFM > *lastTFM ) - { - const float f = ( frameTFM - *lastTFM ) * ( frameTFM - *lastTFM ); - - currTFM = *lastTFM * ( 0.96875f - f ) + frameTFM * ( 0.03125f + f ); - } - else - { - currTFM = *lastTFM * 0.96875f + frameTFM * 0.03125f; - } - - *lastTFM = max( 0.015625f, currTFM ); - - return ( currTFM < 0.5625f ? 1 : 0 ); -} - - -/*-------------------------------------------------------------------* - * SetTCXModeInfo() - * - * - *-------------------------------------------------------------------*/ - -void SetTCXModeInfo( - Encoder_State *st, /* i/o: encoder state structure */ - TRAN_DET_HANDLE hTranDet, /* i/o: transient detection handle */ - int16_t *tcxModeOverlap /* o : window overlap of current frame */ -) -{ - TCX_ENC_HANDLE hTcxEnc = st->hTcxEnc; - - if ( st->codec_mode == MODE2 || ( st->element_mode > EVS_MONO && st->core != HQ_CORE ) ) - { - assert( hTranDet != NULL ); - - /* determine window sequence (1 long or 2 short windows) */ - if ( st->tcx10Enabled && st->tcx20Enabled ) - { - /* window switching based on transient detector output */ - if ( ( ( hTranDet->transientDetector.bIsAttackPresent ) || ( st->currEnergyHF > st->prevEnergyHF * 39.0f && st->element_mode != IVAS_CPE_MDCT ) ) && - ( ( st->last_core != ACELP_CORE ) && ( st->last_core != AMR_WB_CORE ) ) ) - { - hTcxEnc->tcxMode = TCX_10; - } - else - { - hTcxEnc->tcxMode = TCX_20; - } - } - else - { - /* window selection (non-adaptive) based on flags only */ - if ( st->tcx10Enabled ) - { - hTcxEnc->tcxMode = TCX_10; - } - else if ( st->tcx20Enabled ) - { - hTcxEnc->tcxMode = TCX_20; - } - else - { - hTcxEnc->tcxMode = NO_TCX; - } - } - /* set the left window overlap */ - if ( st->last_core == ACELP_CORE || st->last_core == AMR_WB_CORE ) - { - st->hTcxCfg->tcx_last_overlap_mode = TRANSITION_OVERLAP; - } - else if ( ( hTcxEnc->tcxMode == TCX_10 ) && ( st->hTcxCfg->tcx_curr_overlap_mode == ALDO_WINDOW ) ) - { - st->hTcxCfg->tcx_last_overlap_mode = FULL_OVERLAP; - } - else - { - st->hTcxCfg->tcx_last_overlap_mode = st->hTcxCfg->tcx_curr_overlap_mode; - } - - /* determine the right window overlap */ - if ( hTcxEnc->tcxMode == TCX_10 ) - { - if ( hTranDet->transientDetector.attackIndex < 0 ) - { - *tcxModeOverlap = HALF_OVERLAP; - } - else - { - *tcxModeOverlap = hTranDet->transientDetector.attackIndex % 4; - if ( *tcxModeOverlap == 1 ) - { - *tcxModeOverlap = FULL_OVERLAP; - } - } - if ( isLongTermTransient( 1.0f / GetTCXAvgTemporalFlatnessMeasure( hTranDet, NSUBBLOCKS, 0 ), &hTcxEnc->tfm_mem ) && st->element_mode == IVAS_CPE_MDCT ) - { - if ( ( *tcxModeOverlap != MIN_OVERLAP ) && ( hTcxEnc->tcxltp_norm_corr_past_flt < 0.5625f ) ) - { - *tcxModeOverlap = HALF_OVERLAP; - } - } - } - else if ( hTcxEnc->tcxMode == TCX_20 ) - { - if ( hTranDet->transientDetector.attackIndex == 7 ) - { - *tcxModeOverlap = HALF_OVERLAP; - } - else if ( hTranDet->transientDetector.attackIndex == 6 ) - { - *tcxModeOverlap = MIN_OVERLAP; - } - else - { - *tcxModeOverlap = ALDO_WINDOW; - } - if ( isLongTermTransient( 1.0f / GetTCXAvgTemporalFlatnessMeasure( hTranDet, NSUBBLOCKS, 0 ), &hTcxEnc->tfm_mem ) && st->element_mode == IVAS_CPE_MDCT ) - { - if ( ( *tcxModeOverlap != MIN_OVERLAP ) && ( hTcxEnc->tcxltp_norm_corr_past_flt < 0.5625f ) ) - { - *tcxModeOverlap = HALF_OVERLAP; - } - } - } - else - { - /* NO_TCX */ - *tcxModeOverlap = TRANSITION_OVERLAP; - if ( st->element_mode == IVAS_CPE_MDCT ) - { - hTcxEnc->tfm_mem = 0.75f; - } - } - - /* for the ACELP -> TCX transition frames use full right window overlap */ - if ( ( st->hTcxCfg->tcx_last_overlap_mode == TRANSITION_OVERLAP ) && ( *tcxModeOverlap == ALDO_WINDOW ) ) - { - *tcxModeOverlap = FULL_OVERLAP; - } - } - - return; -} -#endif /*---------------------------------------------------------------* @@ -420,128 +92,6 @@ void SetTCXModeInfo( * See TCheckSubblocksForAttack for definition of parameters. * It is assumed that the delay of MDCT overlap was not taken into account, so that the last subblock corresponds to the newest input subblock. */ -#ifndef IVAS_FLOAT_FIXED -static void GetAttackForTCXDecision( - const float *pSubblockNrg, - const float *pAccSubblockNrg, - const int16_t nSubblocks, - const int16_t nPastSubblocks, - const float attackRatioThreshold, - int16_t *pbIsAttackPresent, - int16_t *pAttackIndex ) -{ - int16_t i; - int16_t bIsAttackPresent, attackIndex; - - assert( nSubblocks >= NSUBBLOCKS ); - assert( nPastSubblocks >= 2 ); - - bIsAttackPresent = FALSE; - attackIndex = -1; - /* Search for the last attack in the subblocks */ - if ( ( pSubblockNrg[-1] > pAccSubblockNrg[-1] * attackRatioThreshold ) || ( pSubblockNrg[-2] > pAccSubblockNrg[-2] * attackRatioThreshold ) ) - { - bIsAttackPresent = TRUE; - attackIndex = 0; - } - for ( i = 0; i < NSUBBLOCKS; i++ ) - { - if ( pSubblockNrg[i] > pAccSubblockNrg[i] * attackRatioThreshold ) - { - if ( i < 6 ) - { - bIsAttackPresent = TRUE; - } - if ( ( attackIndex != 2 ) && ( attackIndex != 6 ) ) - { - attackIndex = i; - if ( ( pSubblockNrg[i] < pAccSubblockNrg[i] * 1.125f * attackRatioThreshold ) && ( i == 2 || i == 6 ) ) - { - attackIndex++; /* avoid minimum overlap to prevent clicks */ - } - } - } - else /* no attack, but set index anyway in case of strong energy increase */ - { - if ( ( pSubblockNrg[i] > pSubblockNrg[i - 1] * 1.5f * attackRatioThreshold ) && - ( pSubblockNrg[i] > pSubblockNrg[i - 2] * 1.5f * attackRatioThreshold ) ) - { - if ( ( attackIndex != 2 ) && ( attackIndex != 6 ) ) - { - attackIndex = i; - - if ( ( ( pSubblockNrg[i] < pSubblockNrg[i - 1] * 2.0f * attackRatioThreshold ) || - ( pSubblockNrg[i] < pSubblockNrg[i - 2] * 2.0f * attackRatioThreshold ) ) && - ( i == 2 || i == 6 ) ) - { - attackIndex++; /* avoid minimum overlap to prevent clicks */ - } - } - } - } - } - - /* avoid post-echos on click sounds (very short transients) due to TNS aliasing */ - if ( attackIndex == 4 ) - { - attackIndex = 7; - } - else if ( attackIndex == 5 ) - { - attackIndex = 6; - } - *pAttackIndex = attackIndex; - *pbIsAttackPresent = bIsAttackPresent; - - return; -} - -static void InitDelayBuffer( - const int16_t nFrameLength, - const int16_t nDelay, - DelayBuffer *pDelayBuffer ) -{ - const int16_t nMaxBuffSize = L_FRAME_MAX / NSUBBLOCKS; - - assert( ( nFrameLength > NSUBBLOCKS ) && ( nFrameLength % NSUBBLOCKS == 0 ) && ( nDelay >= 0 ) && ( pDelayBuffer != NULL ) ); - pDelayBuffer->nSubblockSize = nFrameLength / NSUBBLOCKS; - assert( pDelayBuffer->nSubblockSize <= nMaxBuffSize ); - set_f( pDelayBuffer->buffer_flt, 0.0f, nMaxBuffSize ); - pDelayBuffer->nDelay = nDelay % pDelayBuffer->nSubblockSize; - assert( pDelayBuffer->nDelay <= nMaxBuffSize ); - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void InitSubblockEnergies( - const int16_t nFrameLength, - const int16_t nDelay, - DelayBuffer *pDelayBuffer, - SubblockEnergies *pSubblockEnergies ) -{ - const int16_t nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY; - - assert( ( pDelayBuffer != NULL ) && ( pSubblockEnergies != NULL ) && ( pDelayBuffer->nSubblockSize * NSUBBLOCKS == nFrameLength ) && ( pDelayBuffer->nSubblockSize > 0 ) ); - - pSubblockEnergies->nDelay = nDelay / pDelayBuffer->nSubblockSize; - assert( pSubblockEnergies->nDelay < nMaxBuffSize ); - pSubblockEnergies->nPartialDelay = nDelay % pDelayBuffer->nSubblockSize; - set_f( pSubblockEnergies->accSubblockNrg_flt, MIN_BLOCK_ENERGY, nMaxBuffSize + 1 ); - set_f( pSubblockEnergies->subblockNrg_flt, MIN_BLOCK_ENERGY, nMaxBuffSize ); - set_f( pSubblockEnergies->subblockNrgChange_flt, 1.0f, nMaxBuffSize ); - pSubblockEnergies->firState1_flt = 0.0f; - pSubblockEnergies->firState2_flt = 0.0f; - pSubblockEnergies->facAccSubblockNrg_flt = 0.8125f; /* Energy accumulation factor */ - - pSubblockEnergies->pDelayBuffer = pDelayBuffer; - pDelayBuffer->nDelay = max( pDelayBuffer->nDelay, pSubblockEnergies->nPartialDelay ); - - return; -} -#endif /** Init transient detector. @@ -554,230 +104,6 @@ static void InitSubblockEnergies( * @param attackRatioThreshold Attack ratio threshold. * @param pTransientDetector Structure to be initialized. */ -#ifndef IVAS_FLOAT_FIXED -static void InitTransientDetector( - SubblockEnergies *pSubblockEnergies, - const int16_t nDelay, - const int16_t nSubblocksToCheck, - TCheckSubblocksForAttack pCheckSubblocksForAttack, - const float attackRatioThreshold, - TransientDetector *pTransientDetector ) -{ - const int16_t nMaxBuffSize = NSUBBLOCKS + MAX_TD_DELAY; - - assert( ( pSubblockEnergies != NULL ) && ( pSubblockEnergies->pDelayBuffer != NULL ) && ( pTransientDetector != NULL ) && ( pSubblockEnergies->pDelayBuffer->nSubblockSize != 0 ) ); - pTransientDetector->pSubblockEnergies = pSubblockEnergies; - pTransientDetector->nDelay = ( nDelay - pSubblockEnergies->nPartialDelay ) / pSubblockEnergies->pDelayBuffer->nSubblockSize; - assert( nDelay == pTransientDetector->nDelay * pSubblockEnergies->pDelayBuffer->nSubblockSize + pSubblockEnergies->nPartialDelay ); - assert( pTransientDetector->nDelay < nMaxBuffSize ); - pSubblockEnergies->nDelay = max( pSubblockEnergies->nDelay, pTransientDetector->nDelay ); - assert( nSubblocksToCheck <= NSUBBLOCKS + pTransientDetector->nDelay ); - pTransientDetector->nSubblocksToCheck = nSubblocksToCheck; - pTransientDetector->CheckSubblocksForAttack = pCheckSubblocksForAttack; - pTransientDetector->attackRatioThreshold_flt = attackRatioThreshold; - pTransientDetector->bIsAttackPresent = FALSE; - pTransientDetector->prev_bIsAttackPresent = FALSE; - pTransientDetector->attackIndex = -1; - pTransientDetector->pSubblockEnergies->ramp_up_flag = 0x0; - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/* This function should be inlined and WMOPS instrumentation takes that into account, meaning that all references are considered as local variables */ -static float InlineFilter( - float inValue, - float firState1, - float firState2 ) -{ - return 0.375f * inValue - 0.5f * firState1 + 0.125f * firState2; -} - -static void HighPassFilter( - const float *input, - const int16_t length, - float *pFirState1, - float *pFirState2, - float *output ) -{ - int16_t i; - - output[0] = InlineFilter( input[0], *pFirState1, *pFirState2 ); - output[1] = InlineFilter( input[1], input[0], *pFirState1 ); - for ( i = 2; i < length; i++ ) - { - output[i] = InlineFilter( input[i], input[i - 1], input[i - 2] ); - } - - /* update filter states: shift time samples through delay line */ - *pFirState2 = input[length - 2]; - *pFirState1 = input[length - 1]; - - return; -} - -static void RunTransientDetector( - TransientDetector *pTransientDetector ) -{ - const float attackRatioThreshold = pTransientDetector->attackRatioThreshold_flt; - const SubblockEnergies *pSubblockEnergies = pTransientDetector->pSubblockEnergies; - const int16_t nDelay = pTransientDetector->nDelay; - const int16_t nRelativeDelay = pSubblockEnergies->nDelay - nDelay; - const float *pSubblockNrg = &pSubblockEnergies->subblockNrg_flt[nRelativeDelay]; - const float *pAccSubblockNrg = &pSubblockEnergies->accSubblockNrg_flt[nRelativeDelay]; - - assert( ( pTransientDetector->CheckSubblocksForAttack != NULL ) ); - - /* Variable initialization */ -#define WMC_TOOL_SKIP - pTransientDetector->CheckSubblocksForAttack( pSubblockNrg, pAccSubblockNrg, NSUBBLOCKS + nDelay, nRelativeDelay, attackRatioThreshold, &pTransientDetector->bIsAttackPresent, &pTransientDetector->attackIndex ); -#undef WMC_TOOL_SKIP - - return; -} - -static void UpdateDelayBuffer( - const float *input, - const int16_t nSamplesAvailable, - DelayBuffer *pDelayBuffer ) -{ - int16_t i; - int16_t nDelay = pDelayBuffer->nDelay; - - assert( ( nDelay >= 0 ) && ( nDelay <= (int16_t) sizeof( pDelayBuffer->buffer_flt ) / (int16_t) sizeof( pDelayBuffer->buffer_flt[0] ) ) ); - assert( nSamplesAvailable <= NSUBBLOCKS * pDelayBuffer->nSubblockSize ); - - /* If this is not the last frame */ - if ( nSamplesAvailable == NSUBBLOCKS * pDelayBuffer->nSubblockSize ) - { - /* Store the newest samples into the delay buffer */ - for ( i = 0; i < nDelay; i++ ) - { - pDelayBuffer->buffer_flt[i] = input[i + nSamplesAvailable - nDelay]; - } - } - - return; -} - -static void UpdateSubblockEnergies( - const float *input, - const int16_t nSamplesAvailable, - SubblockEnergies *pSubblockEnergies ) -{ - int16_t i; - - assert( ( pSubblockEnergies->nDelay >= 0 ) && ( pSubblockEnergies->nDelay + NSUBBLOCKS <= (int16_t) sizeof( pSubblockEnergies->subblockNrg_flt ) / (int16_t) sizeof( pSubblockEnergies->subblockNrg_flt[0] ) ) ); - assert( pSubblockEnergies->nPartialDelay <= pSubblockEnergies->pDelayBuffer->nDelay ); - /* At least one block delay is required when subblock energy change is required */ - assert( pSubblockEnergies->nDelay >= 1 ); - - /* Shift old subblock energies */ - for ( i = 0; i < pSubblockEnergies->nDelay; i++ ) - { - pSubblockEnergies->subblockNrg_flt[i] = pSubblockEnergies->subblockNrg_flt[i + NSUBBLOCKS]; - pSubblockEnergies->accSubblockNrg_flt[i] = pSubblockEnergies->accSubblockNrg_flt[i + NSUBBLOCKS]; - pSubblockEnergies->subblockNrgChange_flt[i] = pSubblockEnergies->subblockNrgChange_flt[i + NSUBBLOCKS]; - } - - /* Compute filtered subblock energies for the new samples */ - CalculateSubblockEnergies( input, nSamplesAvailable, pSubblockEnergies ); - - return; -} - -/* This function should be inlined and WMOPS instrumentation takes that into account, meaning that all references are considered as local variables */ -static void UpdatedAndStoreAccWindowNrg( - float newWindowNrgF, - float *pAccSubblockNrg, - float facAccSubblockNrg, - float *pOutAccWindowNrgF ) -{ - /* Store the accumulated energy */ - *pOutAccWindowNrgF = *pAccSubblockNrg; - - /* Update the accumulated energy: maximum of the current and the accumulated energy */ - *pAccSubblockNrg *= facAccSubblockNrg; - if ( newWindowNrgF > *pAccSubblockNrg ) - { - *pAccSubblockNrg = newWindowNrgF; - } - - return; -} - - -static void CalculateSubblockEnergies( - const float *input, - const int16_t nSamplesAvailable, - SubblockEnergies *pSubblockEnergies ) -{ - DelayBuffer *pDelayBuffer = pSubblockEnergies->pDelayBuffer; /* */ - const int16_t nSubblockSize = pDelayBuffer->nSubblockSize; /* */ - const int16_t nDelay = pSubblockEnergies->nDelay; /* */ - const int16_t nPartialDelay = pSubblockEnergies->nPartialDelay; /* */ - const float *delayBuffer = &pDelayBuffer->buffer_flt[pDelayBuffer->nDelay - nPartialDelay]; /* */ - const float facAccSubblockNrg = pSubblockEnergies->facAccSubblockNrg_flt; /* */ - float *pSubblockNrg = &pSubblockEnergies->subblockNrg_flt[nDelay]; /* */ - float *pAccSubblockNrg = &pSubblockEnergies->accSubblockNrg_flt[nDelay]; /* */ - float *pSubblockNrgChange = &pSubblockEnergies->subblockNrgChange_flt[nDelay]; /* */ - float *pAccSubblockTmp; - int16_t nWindows; - int16_t i, w, k; - /* Variable initializations */ - nWindows = ( nSamplesAvailable + nPartialDelay ) / nSubblockSize; - pAccSubblockTmp = &pAccSubblockNrg[nWindows]; - - set_f( pSubblockNrg, MIN_BLOCK_ENERGY, NSUBBLOCKS ); - - if ( nWindows > 0 ) - { - /* Process left over samples from the previous frame. */ - for ( k = 0; k < nPartialDelay; k++ ) - { - pSubblockNrg[0] += delayBuffer[k] * delayBuffer[k]; - } - k = 0; - - /* Process new samples in the 0. subblock. */ - for ( i = nPartialDelay; i < nSubblockSize; i++, k++ ) - { - pSubblockNrg[0] += input[k] * input[k]; - } - - /* Set accumulated subblock energy at this point. */ - UpdatedAndStoreAccWindowNrg( pSubblockNrg[0], pAccSubblockTmp, facAccSubblockNrg, &pAccSubblockNrg[0] ); - - for ( w = 1; w < nWindows; w++ ) - { - /* Process new samples in the w. subblock. */ - for ( i = 0; i < nSubblockSize; i++, k++ ) - { - pSubblockNrg[w] += input[k] * input[k]; - } - /* Set accumulated subblock energy at this point. */ - UpdatedAndStoreAccWindowNrg( pSubblockNrg[w], pAccSubblockTmp, facAccSubblockNrg, &pAccSubblockNrg[w] ); - } - - /* Calculate energy change for each block. */ - for ( w = 0; w < nWindows; w++ ) - { - if ( pSubblockNrg[w] > pSubblockNrg[w - 1] ) - { - pSubblockNrgChange[w] = pSubblockNrg[w] / pSubblockNrg[w - 1]; - } - else - { - pSubblockNrgChange[w] = pSubblockNrg[w - 1] / pSubblockNrg[w]; - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -785,7 +111,6 @@ static void CalculateSubblockEnergies( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void set_transient_stereo_fx( CPE_ENC_HANDLE hCPE, /* i : CPE structure */ Word16 currFlatness[] /* i/o: current flatness */ @@ -851,160 +176,8 @@ void set_transient_stereo_fx( return; } -#else -void set_transient_stereo( - CPE_ENC_HANDLE hCPE, /* i : CPE structure */ - float currFlatness[] /* i/o: current flatness */ -) -{ - int16_t n, attackIsPresent; - float currFlatnessMax; - Encoder_State **sts; - - sts = hCPE->hCoreCoder; - - /* for DFT/TD based stereo ,map avg. flatness to individual stereo channels (M/S or X/Y) */ - maximum( currFlatness, CPE_CHANNELS, &currFlatnessMax ); - attackIsPresent = 0; - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - attackIsPresent = max( attackIsPresent, sts[n]->hTranDet->transientDetector.bIsAttackPresent ); - } - - set_f( currFlatness, currFlatnessMax, CPE_CHANNELS ); - - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - sts[n]->hTranDet->transientDetector.bIsAttackPresent = attackIsPresent; - } - - if ( hCPE->hStereoDft != NULL ) - { - if ( hCPE->hStereoDft->attackPresent ) - { - hCPE->hStereoDft->wasTransient = 1; - } - else if ( hCPE->hStereoDft->wasTransient ) - { - hCPE->hStereoDft->wasTransient = 0; - } - - hCPE->hStereoDft->attackPresent = attackIsPresent; - - hCPE->hStereoDft->hItd->currFlatness = 0; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hCPE->hStereoDft->hItd->currFlatness = max( hCPE->hStereoDft->hItd->currFlatness, currFlatness[n] ); - } - } - - if ( hCPE->hStereoMdct != NULL ) - { - hCPE->hStereoMdct->hItd->currFlatness = 0; - for ( n = 0; n < CPE_CHANNELS; n++ ) - { - hCPE->hStereoMdct->hItd->currFlatness = max( hCPE->hStereoMdct->hItd->currFlatness, currFlatness[n] ); - } - } - - return; -} -#endif /*-------------------------------------------------------------------* * transient_analysis() * * *-------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -/*! r: preliminary flag to force ACELP */ -int16_t transient_analysis( - TRAN_DET_HANDLE hTranDet, /* i : handle transient detection */ - const float cor_map_LT[], /* i : LT correlation map */ - const float multi_harm_limit /* i : multi harminic threshold */ -) -{ - const float *pSubblockNrg; - float accSubblockNrgRev[NSUBBLOCKS]; /* store acc Nrg in reversed signal */ - float *pTmp; /* point to acc Nrg */ - int16_t offset; - int16_t i; - float thr_fwd; - float thr_rev; - const int16_t nRelativeDelay = hTranDet->subblockEnergies.nDelay - hTranDet->transientDetector.nDelay; - int16_t prel_force_td; - float cor_map_LT_sum; - - pTmp = &accSubblockNrgRev[NSUBBLOCKS - 1]; - offset = nRelativeDelay - 4; - prel_force_td = FALSE; - - /* summation of the LT correlation map */ - cor_map_LT_sum = sum_f( cor_map_LT, L_FFT / 2 ); /* Note maybe BE optimized by computing inside noise_est */ - - thr_fwd = THR_NORM_HIGH; - if ( cor_map_LT_sum > multi_harm_limit * 0.8f ) - { - thr_fwd = THR_HIGH; - } - thr_rev = THR_LOW; - if ( cor_map_LT_sum > multi_harm_limit * 0.6f ) - { - thr_rev = THR_NORM_LOW; - } - - /* forward attack analysis */ - for ( i = -2; i < 7; i++ ) - { - if ( hTranDet->subblockEnergies.subblockNrg_flt[nRelativeDelay + i] > hTranDet->subblockEnergies.accSubblockNrg_flt[nRelativeDelay + i] * thr_fwd ) - { - prel_force_td |= 0x0001; - } - } - if ( prel_force_td == 0 && hTranDet->transientDetector.prev_bIsAttackPresent == 1 ) - { - /* release analysis */ - pSubblockNrg = hTranDet->transientDetector.pSubblockEnergies->subblockNrg_flt; - set_zero( accSubblockNrgRev, NSUBBLOCKS ); - - for ( i = NSUBBLOCKS - 1; i > -1; i-- ) - { - if ( i == NSUBBLOCKS - 1 ) - { - accSubblockNrgRev[i] = pSubblockNrg[i + offset]; - } - else - { - accSubblockNrgRev[i] = *pTmp; - *pTmp *= hTranDet->transientDetector.pSubblockEnergies->facAccSubblockNrg_flt; - if ( pSubblockNrg[i + offset] > *pTmp ) - { - *pTmp = pSubblockNrg[i + offset]; - } - } - } - - /* -3 check */ - if ( pSubblockNrg[1 + offset] > accSubblockNrgRev[1] * thr_rev ) - { - prel_force_td |= 0x0002; - } - - /* -4 check */ - if ( prel_force_td == 0 && pSubblockNrg[offset] > accSubblockNrgRev[0] * thr_rev ) - { - if ( pSubblockNrg[offset] > accSubblockNrgRev[0] * ( thr_rev + THR_LOW_STEP ) ) - { - prel_force_td |= 0x0004; - } - else if ( ( hTranDet->subblockEnergies.ramp_up_flag & 0x0002 ) != 0 ) - { - prel_force_td |= 0x0008; - } - } - } - - return prel_force_td != 0; -} -#endif diff --git a/lib_enc/transient_detection_fx.c b/lib_enc/transient_detection_fx.c index cf4dfc2e8..a68053993 100644 --- a/lib_enc/transient_detection_fx.c +++ b/lib_enc/transient_detection_fx.c @@ -27,7 +27,6 @@ #define MIN_BLOCK_ENERGY ( (Word32) 1 ) -#ifdef IVAS_FLOAT_FIXED #define MIN_BLOCK_ENERGY_FX 107 #define THR_HIGH_FX 17408 /* 8.5f in Q11 */ #define THR_NORM_HIGH_FX 16384 /* 8 in Q11 */ @@ -35,7 +34,6 @@ #define THR_LOW_FX 8704 /* 4.25f in Q11 */ #define THR_LOW_STEP_FX ONE_IN_Q11 /* 1 in Q11 */ #define MIN_BLOCK_ENERGY_IVAS_FX_Q7 13743 /* 107.37f in Q7 */ -#endif /************************************************/ /* */ @@ -144,7 +142,6 @@ static void GetAttackForTCXDecision( Word32 const *pSubblockNrg, Word32 const *p } -#ifdef IVAS_FLOAT_FIXED void GetAttackForTCXDecision_fx( Word32 const *pSubblockNrg, Word32 const *pAccSubblockNrg, Word16 nSubblocks, Word16 nPastSubblocks, Word16 attackRatioThreshold, Word16 *pbIsAttackPresent, Word16 *pAttackIndex ) { Word16 i; @@ -219,7 +216,6 @@ void GetAttackForTCXDecision_fx( Word32 const *pSubblockNrg, Word32 const *pAccS *pbIsAttackPresent = bIsAttackPresent; } -#endif /** Initialize TCX transient detector. * See InitTransientDetector_fx for definition of parameters. */ @@ -542,7 +538,6 @@ void RunTransientDetection_fx( Word16 const *input, Word16 nSamplesAvailable, Tr } -#ifdef IVAS_FLOAT_FIXED void RunTransientDetection_ivas_fx( Word16 *input_fx, /* i : input signal Q: q_input */ const Word16 length, /* i : frame length */ @@ -626,8 +621,6 @@ void RunTransientDetection_ivas_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * isLongTermTransient_fx() * @@ -658,10 +651,8 @@ static Word16 isLongTermTransient_fx( } return 0; } -#endif -#ifdef IVAS_FLOAT_FIXED void SetTCXModeInfo_ivas_fx( Encoder_State *st, /* i/o: encoder state structure */ TRAN_DET_HANDLE hTranDet, /* i/o: transient detection handle */ @@ -821,7 +812,6 @@ void SetTCXModeInfo_ivas_fx( return; } -#endif void SetTCXModeInfo_fx( Encoder_State *st, diff --git a/lib_enc/transition_enc.c b/lib_enc/transition_enc.c index 190ce580f..5f6981ef6 100644 --- a/lib_enc/transition_enc.c +++ b/lib_enc/transition_enc.c @@ -42,1021 +42,3 @@ #include "prot.h" #include "wmc_auto.h" #include "prot_fx.h" - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------* - * Local function prototypes - *-----------------------------------------------------------------*/ - -static void gain_trans_enc( float *gain_trans, float exc[], int16_t *quant_index, int16_t *quant_sign ); - -static void tc_enc( Encoder_State *st, const int16_t i_subfr, int16_t *tc_subfr, int16_t *position, const float *h1, const float *xn, float *exc, float *y1, int16_t *T0_min, int16_t *T0_max, int16_t *T0, int16_t *T0_frac, float *gain_pit, float g_corr[], float *bwe_exc ); - - -/*-----------------------------------------------------------------* - * transition_enc() - * - * Principal function for adaptive excitation construction in TC - *-----------------------------------------------------------------*/ - -void transition_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t i_subfr, /* i : subframe index */ - int16_t *tc_subfr, /* i/o: TC subframe index */ - int16_t *Jopt_flag, /* i : joint optimization flag */ - int16_t *position, /* i/o: maximum of residual signal index */ - int16_t *T0, /* i/o: close loop integer pitch */ - int16_t *T0_frac, /* i/o: close loop fractional part of the pitch */ - int16_t *T0_min, /* i/o: lower limit for close-loop search */ - int16_t *T0_max, /* i/o: higher limit for close-loop search */ - float *exc, /* i/o: pointer to excitation signal frame */ - float *y1, /* o : zero-memory filtered adaptive excitation */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target vector */ - float *xn2, /* o : target vector for innovation search */ - float *gp_cl, /* i/o: memory of gain of pitch clipping algorithm */ - float *gain_pit, /* o : adaptive excitation gain */ - float *g_corr, /* o : ACELP correlation values */ - int16_t *clip_gain, /* i/o: adaptive gain clipping flag */ - float **pt_pitch, /* o : floating pitch values */ - float *bwe_exc, /* o : excitation for SWB TBE */ - int16_t *unbits_ACELP /* i/o: unused bits */ -) -{ - int16_t i, pit_flag, pit_start, pit_limit, index, nBits; - int16_t limit_flag, mult_Top; - int16_t lp_select, lp_flag; - BSTR_ENC_HANDLE hBstr = st->hBstr; - int16_t offset; - int16_t T_op[2]; - - /* set limit_flag to 0 for restrained limits, and 1 for extended limits */ - limit_flag = 0; - - pit_start = PIT_MIN; - - if ( st->L_frame == L_FRAME16k ) - { - T_op[0] = (int16_t) ( st->pitch[0] * 1.25f + 0.5f ); - T_op[1] = (int16_t) ( st->pitch[1] * 1.25f + 0.5f ); - } - else - { - T_op[0] = st->pitch[0]; - T_op[1] = st->pitch[1]; - } - - lp_flag = st->acelp_cfg.ltf_mode; - - if ( i_subfr == 0 ) - { - mult_Top = 1; - if ( limit_flag == 0 ) - { - if ( st->L_frame == L_FRAME && T_op[1] < PIT_MIN ) - { - mult_Top = 2; - } - - if ( st->L_frame == L_FRAME16k && T_op[1] < PIT16k_MIN ) - { - mult_Top = 2; - } - } - - limit_T0( st->L_frame, 8, 0, limit_flag, mult_Top * T_op[1], 0, T0_min, T0_max ); - } - - /*-----------------------------------------------------------------* - * zero adaptive excitation signal construction - *-----------------------------------------------------------------*/ - - if ( *tc_subfr > i_subfr ) - { - *gain_pit = 0.0f; - *clip_gain = 0; - g_corr[0] = 1.0f; - g_corr[1] = 1.0f; - - set_f( &exc[i_subfr], 0, L_SUBFR ); /* set excitation for current subrame to 0 */ - - if ( st->L_frame == L_FRAME ) - { - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); /* set past excitation buffer to 0 */ - } - else - { - set_f( &bwe_exc[i_subfr * 2], 0, (int16_t) ( L_SUBFR * 2 ) ); /* set past excitation buffer to 0 */ - } - - set_f( y1, 0, L_SUBFR ); /* set filtered adaptive excitation to 0 */ - mvr2r( xn, xn2, L_SUBFR ); /* target vector for codebook search */ - *T0 = L_SUBFR; - *T0_frac = 0; - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - } - - /*-----------------------------------------------------------------* - * glottal codebook contribution construction - *-----------------------------------------------------------------*/ - - else if ( *tc_subfr == i_subfr ) - { - if ( st->L_frame == L_FRAME ) - { - set_f( bwe_exc - PIT_MAX * HIBND_ACB_L_FAC, 0, PIT_MAX * HIBND_ACB_L_FAC ); /* set past excitation buffer to 0 */ - } - else - { - set_f( bwe_exc - PIT16k_MAX * 2, 0, PIT16k_MAX * 2 ); /* set past excitation buffer to 0 */ - } - - tc_enc( st, i_subfr, tc_subfr, position, h1, xn, exc, y1, T0_min, T0_max, T0, T0_frac, gain_pit, g_corr, bwe_exc ); - - if ( *tc_subfr == TC_0_0 ) - { - /* this is called only to compute unused bits */ - config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, L_FRAME, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, TRANSITION, TC_0_0, 3, NULL, unbits_ACELP, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, st->active_cnt, 0 /*tdm_Pitch_reuse_flag*/, st->tdm_LRTD_flag, 0 /*GSC_IVAS_mode*/ ); - } - - *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); - - updt_tar( xn, xn2, y1, *gain_pit, L_SUBFR ); - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - *Jopt_flag = 1; - } - - /*--------------------------------------------------------------* - * other subframes -> GENERIC encoding type, - * standard adaptive excitation contribution - * - exemption only in case when first glottal impulse is - * in the 1st subframe and the second one in 2nd subframe - * and later - *--------------------------------------------------------------*/ - - else if ( *tc_subfr < i_subfr ) - { - if ( st->L_frame == L_FRAME ) - { - *Jopt_flag = 1; - - /* pit_flag for T0 bits number coding determination */ - if ( ( ( i_subfr - *tc_subfr ) == L_SUBFR ) || ( ( i_subfr - *tc_subfr ) == L_SUBFR - TC_0_0 ) ) - { - pit_flag = 0; - } - else - { - pit_flag = L_SUBFR; - } - if ( *tc_subfr == TC_0_0 ) - { - if ( i_subfr == L_SUBFR ) - { - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); - } - pit_flag = 1; - } - - /*----------------------------------------------------------* - * if tc_subfr==0, change tc_subfr corresponding to the - * second glot. impulse position - *----------------------------------------------------------*/ - - if ( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) - { - if ( PIT_MIN > ( *position ) ) - { - pit_start = L_SUBFR - ( *position ); - } - else - { - pit_start = PIT_MIN; - } - if ( pit_start < PIT_MIN ) - { - pit_start = PIT_MIN; - } - - pit_limit = 2 * pit_start + ( *position ); - - /* Find the closed loop pitch period */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, pit_start, pit_limit, L_FRAME, L_SUBFR ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - - if ( ( *T0 ) > ( 2 * L_SUBFR - ( *position ) ) ) - { - if ( ( *T0 ) + ( *position ) >= 3 * L_SUBFR ) - { - /* second glottal impulse is in the 4th subframe */ - *tc_subfr = TC_0_192; - } - else - { - /* second glottal impulse is in the 3rd subframe */ - *tc_subfr = TC_0_128; - } - } - else if ( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) - { - /* second glottal impulse is in the 2nd subframe */ - *tc_subfr = TC_0_64; - } - } - - if ( i_subfr - *tc_subfr <= L_SUBFR ) - { - config_acelp1( ENC, st->total_brate, st->core_brate, st->core, st->extl, st->extl_brate, st->L_frame, -1, &( st->acelp_cfg ), hBstr->nb_bits_tot, TRANSITION, *tc_subfr, 2, NULL, unbits_ACELP, st->element_mode, &i /*dummy*/, 0 /*tdm_lp_reuse_flag*/, 0 /*tdm_low_rate_mode*/, st->idchan, st->active_cnt, 0 /*tdm_Pitch_reuse_flag*/, st->tdm_LRTD_flag, 0 /*GSC_IVAS_mode*/ ); - } - - /*-----------------------------------------------------------------* - * get number of bits for pitch encoding - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - /*-----------------------------------------------------------------* - * Find adaptive part of excitation, encode pitch period - *-----------------------------------------------------------------*/ - - /* first glottal impulse is in the 1st subrame */ - if ( ( i_subfr == L_SUBFR ) && ( *tc_subfr >= TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 3rd or 4th subframe - * - build exc[] in 2nd subframe - *--------------------------------------------------------*/ - - *T0 = 2 * L_SUBFR; - *T0_frac = 0; - *Jopt_flag = 0; - - set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); - } - else if ( ( i_subfr == L_SUBFR ) && ( *tc_subfr == TC_0_64 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 2nd subframe, - * - build exc[] in 2nd subframe - *--------------------------------------------------------*/ - - if ( ( *T0 ) + ( *position ) < L_SUBFR ) - { - /* impulse must be in the 2nd subframe (not in 1st) */ - *T0 = L_SUBFR - ( *position ); - *T0_frac = 0; - } - - if ( ( *T0 ) + ( *position ) >= 2 * L_SUBFR ) - { - /* impulse must be in the 2nd subframe (not in 3rd) */ - *T0 = 2 * L_SUBFR - 1 - ( *position ); - *T0_frac = 2; - } - - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max for delta search */ - - /* 7bit ENCODER */ - index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; - push_indice( hBstr, IND_PITCH, index, nBits ); - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 2 * L_SUBFR ) && ( *tc_subfr == TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 3rd subframe - * - build exc[] in 3rd subframe - *--------------------------------------------------------*/ - - pit_start = 2 * L_SUBFR - ( *position ); - - pit_flag = 0; - - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, pit_start, 3 * L_SUBFR, L_FRAME, L_SUBFR ); - - if ( ( *T0 ) + ( *position ) < 2 * L_SUBFR ) - { - /* impulse must be in the 3rd subframe (not in 2nd) */ - *T0 = 2 * L_SUBFR - ( *position ); - *T0_frac = 0; - } - if ( ( *T0 ) + ( *position ) >= 3 * L_SUBFR ) - { - /* impulse must be in the 3rd subframe (not in 4th) */ - *T0 = 3 * L_SUBFR - 1 - ( *position ); - *T0_frac = 2; - } - - limit_T0( L_FRAME, 8, pit_flag, limit_flag, *T0, 0, T0_min, T0_max ); /* find T0_min and T0_max for delta search */ - - index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; - push_indice( hBstr, IND_PITCH, index, nBits ); - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 2 * L_SUBFR ) && ( *tc_subfr == TC_0_192 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 4th subframe - * - build exc[] in 3rd subframe - *--------------------------------------------------------*/ - - *T0 = 4 * L_SUBFR; - *T0_frac = 0; - *Jopt_flag = 0; - - set_f( &exc[i_subfr], 0, (int16_t) ( L_SUBFR + 1 ) ); - set_f( &bwe_exc[i_subfr * HIBND_ACB_L_FAC], 0, (int16_t) ( L_SUBFR * HIBND_ACB_L_FAC ) ); - } - else if ( ( i_subfr == 3 * L_SUBFR ) && ( *tc_subfr == TC_0_192 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse is in the 4th subframe - * - build exc[] in 4th subframe - *--------------------------------------------------------*/ - /* always T0_frac = 0 */ - pit_flag = 0; - - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - - if ( ( *T0 ) + ( *position ) < 3 * L_SUBFR ) - { - /* impulse must be in the 4th subframe (not in 3rd) */ - *T0 = 3 * L_SUBFR - ( *position ); - *T0_frac = 0; - } - - pit_start = 3 * L_SUBFR - ( *position ); - pit_limit = 2 * L_FRAME - PIT_MAX - 2 - 2 * ( *position ); - - if ( *T0 < pit_limit ) - { - index = ( *T0 - pit_start ) * 2 + *T0_frac / 2; - } - else - { - index = *T0 - pit_limit + ( pit_limit - pit_start ) * 2; - *T0_frac = 0; - } - - push_indice( hBstr, IND_PITCH, index, nBits ); - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - else if ( ( i_subfr == 3 * L_SUBFR ) && ( *tc_subfr == TC_0_128 ) ) - { - /*--------------------------------------------------------* - * second glottal impulse in the 3rd subframe - * build exc[] in 4th subframe - *--------------------------------------------------------*/ - - pit_flag = L_SUBFR; - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - index = delta_pit_enc( 2, *T0, *T0_frac, *T0_min ); - push_indice( hBstr, IND_PITCH, index, nBits ); - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - - /*------------------------------------------------------------* - * first glottal impulse is NOT in the 1st subframe, - * or two impulses are in the 1st subframe - *------------------------------------------------------------*/ - else - { - if ( nBits == 8 || nBits == 5 ) - { - if ( !( ( *tc_subfr == 0 ) && ( i_subfr == L_SUBFR ) ) ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_MIN, PIT_FR1_8b, L_FRAME, L_SUBFR ); - } - } - else - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, pit_flag, limit_flag, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); - } - - pit_Q_enc( hBstr, 0, nBits, 8, pit_flag, limit_flag, *T0, *T0_frac, T0_min, T0_max ); - - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - offset = tbe_celp_exc_offset_flt( *T0, *T0_frac ); - for ( i = 0; i < L_SUBFR * HIBND_ACB_L_FAC; i++ ) - { - bwe_exc[i + i_subfr * HIBND_ACB_L_FAC] = bwe_exc[i + i_subfr * HIBND_ACB_L_FAC - offset]; - } - } - - if ( *Jopt_flag == 0 ) - { - /* adaptive/TC excitation is zero */ - mvr2r( xn, xn2, L_SUBFR ); - g_corr[0] = 0.0f; - g_corr[1] = 0.0f; - *clip_gain = 0; - } - else - { - *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); - - lp_select = lp_filt_exc_enc( MODE1, TRANSITION, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr, *clip_gain, gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - } - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch values */ - - /*---------------------------------------------------------------------* - * fill the pitch buffer - needed for post-processing - *---------------------------------------------------------------------*/ - - if ( ( *tc_subfr >= 2 * L_SUBFR ) && ( i_subfr == 3 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 3; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( *tc_subfr == L_SUBFR ) && ( i_subfr == 2 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 2; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( *tc_subfr == TC_0_64 ) && ( i_subfr == L_SUBFR ) ) - { - ( *pt_pitch ) -= 1; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( *tc_subfr == TC_0_128 ) && ( i_subfr == 2 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 2; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - else if ( ( *tc_subfr == TC_0_192 ) && ( i_subfr == 3 * L_SUBFR ) ) - { - ( *pt_pitch ) -= 3; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - } - else /* L_frame == L_FRAME16k */ - { - if ( i_subfr >= 2 * L_SUBFR ) - { - limit_flag = 1; - } - - if ( i_subfr <= 2 * L_SUBFR ) - { - if ( i_subfr < 2 * L_SUBFR ) - { - mult_Top = 1; - if ( T_op[0] < PIT16k_MIN ) - { - mult_Top = 2; - } - limit_T0( L_FRAME16k, 8, 0, limit_flag, mult_Top * T_op[0], 0, T0_min, T0_max ); /* TC0 second subfr. */ - } - else - { - limit_T0( L_FRAME16k, 8, 0, limit_flag, T_op[1], 0, T0_min, T0_max ); /* TC0 third subfr., or TC64 third subfr. */ - } - } - - /*-----------------------------------------------------------------* - * get number of bits for pitch encoding - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - /*-----------------------------------------------------------------* - * Find adaptive part of excitation, encode pitch period - *-----------------------------------------------------------------*/ - - if ( nBits == 10 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, limit_flag, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, st->L_frame, L_SUBFR ); - pit16k_Q_enc( hBstr, nBits, limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - else if ( nBits == 8 ) /* tc_subfr==0 && i_subfr==L_SUBFR */ - { - /*-----------------------------------------------------------------------------* - * The pitch range is encoded absolutely with 8 bits and is divided as follows: - * PIT16k_MIN to PIT16k_FR2_TC0_2SUBFR-1 resolution 1/4 (frac = 0,1,2 or 3) - * PIT16k_FR2_TC0_2SUBFR to 2*L_SUBFR resolution 1/2 (frac = 0 or 2) - *-----------------------------------------------------------------------------*/ - - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, limit_flag, PIT16k_FR2_TC0_2SUBFR, 2 * L_SUBFR, st->L_frame, L_SUBFR ); - - if ( *T0_max > 2 * L_SUBFR ) - { - *T0 = 2 * L_SUBFR; - *T0_frac = 0; - } - - if ( *T0 < PIT16k_FR2_TC0_2SUBFR ) - { - index = ( *T0 ) * 4 + ( *T0_frac ) - ( PIT16k_MIN * 4 ); - } - else - { - index = ( *T0 ) * 2 + ( ( *T0_frac ) >> 1 ) - ( PIT16k_FR2_TC0_2SUBFR * 2 ) + ( ( PIT16k_FR2_TC0_2SUBFR - PIT16k_MIN ) * 4 ); - } - - push_indice( hBstr, IND_PITCH, index, nBits ); - } - else if ( nBits == 6 ) - { - /* delta search */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, L_SUBFR, limit_flag, PIT16k_FR2_EXTEND_9b, PIT16k_FR1_EXTEND_9b, st->L_frame, L_SUBFR ); - - index = delta_pit_enc( 4, *T0, *T0_frac, *T0_min ); - - push_indice( hBstr, IND_PITCH, index, nBits ); - } - if ( nBits == 6 ) - { - limit_T0( L_FRAME16k, 8, L_SUBFR, limit_flag, *T0, *T0_frac, T0_min, T0_max ); - } - - /*-----------------------------------------------------------------* - * - gain clipping test to avoid unstable synthesis - * - LP filtering of the adaptive excitation - * - codebook target computation - *-----------------------------------------------------------------*/ - - if ( ( i_subfr == L_SUBFR ) && ( *T0 == 2 * L_SUBFR ) ) - { - *gain_pit = 0.0f; - *clip_gain = 0; - g_corr[0] = 0.01f; - g_corr[1] = 0.01f; - *Jopt_flag = 0; - - set_f( &exc[i_subfr], 0, L_SUBFR + 1 ); /* set excitation for current subrame to 0 */ - - push_indice( hBstr, IND_LP_FILT_SELECT, 0, 1 ); /* this bit is actually not needed */ - - mvr2r( xn, xn2, L_SUBFR ); /* target vector for codebook search */ - set_f( y1, 0, L_SUBFR ); /* set filtered adaptive excitation to 0 */ - set_f( &bwe_exc[i_subfr * 2], 0, L_SUBFR * 2 ); - } - else - { - /* Find the adaptive codebook vector - ACELP long-term prediction */ - pred_lt4_flt( &exc[i_subfr], &exc[i_subfr], *T0, *T0_frac, L_SUBFR + 1, inter4_2, L_INTERPOL2, PIT_UP_SAMP ); - - for ( i = 0; i < L_SUBFR * 2; i++ ) - { - bwe_exc[i + i_subfr * 2] = bwe_exc[i + i_subfr * 2 - *T0 * 2 - (int16_t) ( (float) *T0_frac * 0.5f + 4 + 0.5f ) + 4]; - } - - *clip_gain = gp_clip( st->element_mode, st->core_brate, st->voicing, i_subfr, TRANSITION, xn, gp_cl ); - - lp_select = lp_filt_exc_enc( MODE1, TRANSITION, i_subfr, exc, h1, xn, y1, xn2, L_SUBFR, st->L_frame, g_corr, *clip_gain, gain_pit, &lp_flag ); - - if ( lp_flag == NORMAL_OPERATION ) - { - push_indice( hBstr, IND_LP_FILT_SELECT, lp_select, 1 ); - } - - *Jopt_flag = 1; - } - - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; /* save subframe pitch value */ - - /*---------------------------------------------------------------------* - * fill the pitch buffer - needed for post-processing - *---------------------------------------------------------------------*/ - - if ( ( i_subfr - *tc_subfr == L_SUBFR ) || ( *tc_subfr == 0 && i_subfr == 2 * L_SUBFR ) ) - { - index = i_subfr / L_SUBFR; - ( *pt_pitch ) -= index; - - for ( i = 0; i < index; i++ ) - { - **pt_pitch = (float) ( *T0 ) + (float) ( *T0_frac ) / 4.0f; - ( *pt_pitch )++; - } - } - } - } - - return; -} - - -/*-------------------------------------------------------------------------------------------* - * tc_enc() - * - * Principal function for transition coding (TC) in encoder. - * Glottal codebook contribution part: - * - * |----| |----| xn - * imp_pos->|| | imp_shape->| g1 | | - * | | | | g2 | ---- exc |---| y1 ---- | - * | | |-------------| |----|gain|-------| h |------|gain|----(-)---> xn2 - * | || | gn | ---- |---| ---- - * |----| |----| - * codebook excitation gain_trans h_orig gain_pit - * - *-------------------------------------------------------------------------------------------*/ - -static void tc_enc( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t i_subfr, /* i : subrame index */ - int16_t *tc_subfr, /* i/o: TC subframe index */ - int16_t *position, /* i/o: index of the residual signal maximum */ - const float *h1, /* i : weighted filter input response */ - const float *xn, /* i : target signal */ - float *exc, /* o : glottal codebook contribution */ - float *y1, /* o : filtered glottal codebook contribution */ - int16_t *T0_min, /* o : lower pitch limit */ - int16_t *T0_max, /* o : higher pitch limit */ - int16_t *T0, /* o : close loop integer pitch */ - int16_t *T0_frac, /* o : close loop fractional part of the pitch */ - float *gain_pit, /* o : pitch gain (0..GAIN_PIT_MAX) */ - float g_corr[], /* o : correlations and -2 */ - float *bwe_exc /* i/o: excitation for SWB TBE */ -) -{ - int16_t imp_shape, imp_pos, imp_sign, imp_gain, index, nBits; - float gain_trans; - BSTR_ENC_HANDLE hBstr = st->hBstr; - - imp_pos = *position - i_subfr; - - /*-----------------------------------------------------------------* - * get number of bits for pitch encoding - *-----------------------------------------------------------------*/ - - nBits = st->acelp_cfg.pitch_bits[i_subfr / L_SUBFR]; - - /*--------------------------------------------------------------* - * Closed loop pitch search - *--------------------------------------------------------------*/ - - *T0_frac = 0; - if ( st->L_frame == L_FRAME ) - { - if ( ( *T0_min <= L_SUBFR ) || ( *tc_subfr == 3 * L_SUBFR ) ) - { - if ( nBits == 9 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_FR2_9b, PIT_FR1_9b, L_FRAME, L_SUBFR ); - } - else if ( nBits == 6 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_MIN, L_SUBFR, L_FRAME, L_SUBFR ); - } - else - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT_MAX, PIT_MIN, L_FRAME, L_SUBFR ); - } - } - else - { - *T0 = L_SUBFR; - } - - if ( ( *tc_subfr == L_SUBFR ) && ( *T0 < L_SUBFR ) ) - { - *T0 = L_SUBFR; - } - } - else /* L_frame == L_FRAME16k */ - { - if ( nBits == 10 ) - { - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 1, PIT16k_FR2_EXTEND_10b, PIT16k_MAX, L_FRAME16k, L_SUBFR ); - } - else if ( nBits == 6 ) - { - /* T0_frac with 1/2 sample resolution */ - *T0 = pitch_fr4( &exc[i_subfr], xn, h1, *T0_min, *T0_max, T0_frac, 0, 0, PIT16k_MIN, L_SUBFR, L_FRAME16k, L_SUBFR ); - - if ( *T0 > L_SUBFR ) - { - *T0 = L_SUBFR; - *T0_frac = 0; - } - } - } - - /* set tc_subfr to TC_0_0 */ - if ( i_subfr == 0 && st->L_frame == L_FRAME && ( *T0 < L_SUBFR || *tc_subfr == 3 * L_SUBFR ) ) - { - *tc_subfr = TC_0_0; - } - - /*--------------------------------------------------------------* - * Builds glottal codebook contribution - *--------------------------------------------------------------*/ - - set_impulse( xn, h1, &exc[i_subfr], y1, &imp_shape, &imp_pos, &gain_trans ); - - /*--------------------------------------------------------------* - * quantize gain_trans and scale glottal codebook contribution - *--------------------------------------------------------------*/ - - gain_trans_enc( &gain_trans, &exc[i_subfr], &imp_gain, &imp_sign ); - - /* set past excitation buffer to zeros */ - set_f( exc - L_EXC_MEM, 0, L_EXC_MEM ); - - /*--------------------------------------------------------------* - * adapt. search of the second impulse in the same subframe - * (when appears) - *--------------------------------------------------------------*/ - - pred_lt4_tc_flt( exc, *T0, *T0_frac, inter4_2, imp_pos, i_subfr ); - - if ( st->hBWE_TD != NULL ) - { - if ( st->L_frame == L_FRAME ) - { - interp_code_5over2( &exc[i_subfr], &bwe_exc[i_subfr * HIBND_ACB_L_FAC], L_SUBFR ); - } - else - { - interp_code_4over2( &exc[i_subfr], &bwe_exc[i_subfr * 2], L_SUBFR ); - } - } - - /*--------------------------------------------------------------* - * compute glottal-shape codebook excitation - *--------------------------------------------------------------*/ - - /* create filtered glottal codebook contribution */ - conv( &exc[i_subfr], h1, y1, L_SUBFR ); - - /* gain_pit computation */ - *gain_pit = corr_xy1( xn, y1, g_corr, L_SUBFR, 0 ); - - /*--------------------------------------------------------------* - * Encode parameters and write indices - *--------------------------------------------------------------*/ - - if ( st->L_frame == L_FRAME ) - { - if ( ( ( i_subfr != 0 ) || ( *tc_subfr == TC_0_0 ) ) && ( *tc_subfr != L_SUBFR ) ) - { - /* write pitch index */ - if ( ( *T0 >= L_SUBFR ) && ( *tc_subfr != 3 * L_SUBFR ) ) - { - push_indice( hBstr, IND_PITCH, 0, nBits ); - } - else if ( *tc_subfr == 3 * L_SUBFR ) - { - if ( nBits == 9 ) - { - index = abs_pit_enc( 4, 0, *T0, *T0_frac ); - } - else - { - index = abs_pit_enc( 2, 0, *T0, *T0_frac ); - } - - push_indice( hBstr, IND_PITCH, index, nBits ); - - limit_T0( L_FRAME, 8, 0, 0, *T0, 0, T0_min, T0_max ); - } - else - { - if ( nBits == 6 ) - { - index = delta_pit_enc( 2, *T0, *T0_frac, PIT_MIN - 1 ); - push_indice( hBstr, IND_PITCH, index, nBits ); - } - else - { - index = delta_pit_enc( 0, *T0, *T0_frac, PIT_MIN - 1 ); - push_indice( hBstr, IND_PITCH, index, nBits ); - } - } - } - } - else /* L_frame == L_FRAME16k */ - { - if ( nBits == 10 ) - { - pit16k_Q_enc( hBstr, nBits, 1, *T0, *T0_frac, T0_min, T0_max ); - } - else if ( nBits == 6 ) - { - index = 2 * ( *T0 - PIT16k_MIN ) + *T0_frac / 2; - push_indice( hBstr, IND_PITCH, index, nBits ); - } - } - - push_indice( hBstr, IND_TC_IMP_SHAPE, imp_shape, 3 ); - push_indice( hBstr, IND_TC_IMP_POS, imp_pos, 6 ); - push_indice( hBstr, IND_TC_IMP_SIGN, imp_sign, 1 ); - push_indice( hBstr, IND_TC_IMP_GAIN, imp_gain, 3 ); - - *position = imp_pos + i_subfr; - - return; -} - -/*-----------------------------------------------------------------* - * gain_trans_enc() - * - * Quantize gain_trans of TC (gains of glottal impulses). - * - Uses scalar quantization prototypes tbl_gain_trans_tc[N_GAIN_TC]. - * - Gains the glottal codebook contibution signal. - *-----------------------------------------------------------------*/ - -static void gain_trans_enc( - float *gain_trans, /* i/o: gain for TC */ - float exc[], /* i/o: glottal codebook contribution */ - int16_t *quant_index, /* o : index of quantized gain_trans */ - int16_t *quant_sign /* o : sign of quantized gain_trans */ -) -{ - int16_t i; - - - if ( *gain_trans < 0 ) - { - *gain_trans *= -1; - *quant_sign = 0; - } - else - { - *quant_sign = 1; - } - - *quant_index = N_GAIN_TC - 1; - - for ( i = 0; i < N_GAIN_TC - 1; i++ ) - { - if ( *gain_trans < tbl_gain_trans_tc[i] ) - { - *quant_index = i; - break; - } - } - - /* restore gain_trans */ - *gain_trans = tbl_gain_trans_tc[i]; - - if ( *quant_sign == 0 ) - { - *gain_trans *= -1; - } - - for ( i = 0; i < L_SUBFR; i++ ) - { - exc[i] *= ( *gain_trans ); - } - - return; -} - - -/*-----------------------------------------------------------------* - * tc_classif_enc() - * - * TC subframe determination - *-----------------------------------------------------------------*/ - -void tc_classif_enc( - const int16_t L_frame, /* i : length of the frame */ - int16_t *tc_subfr, /* o : TC subframe index */ - int16_t *position, /* o : maximum of residual signal index */ - const int16_t attack_flag, /* i : attack flag */ - const int16_t pitch, /* i : open loop pitch estimates for first halfframe */ - const float *res /* i : pointer to the LP residual signal frame */ -) -{ - float temp; - int16_t T_op; - - T_op = pitch; - if ( L_frame == L_FRAME16k ) - { - T_op = (int16_t) ( pitch * 1.25f + 0.5f ); - } - - *tc_subfr = -1; - if ( attack_flag ) - { - *tc_subfr = 3 * L_SUBFR; - - if ( attack_flag > 0 ) - { - if ( L_frame == L_FRAME ) - { - *tc_subfr = NB_SUBFR * ( attack_flag - 1 ) / 32 /*ATT_NSEG*/; - } - else - { - *tc_subfr = NB_SUBFR16k * ( attack_flag - 1 ) / 32 /*ATT_NSEG*/; - } - *tc_subfr *= L_SUBFR; - } - } - - if ( attack_flag ) - { - /*-----------------------------------------------------------------* - * TC: subrame determination for glottal shape search - * ------------------------------------------------------- - * tc_subfr == 0 - TC in 1st subframe - * tc_subfr == TC_0_0 - TC in 1st subframe + information about T0 - * tc_subfr == L_SUBFR - TC in 2nd subframe - * tc_subfr == 2*L_SUBFR - TC in 3rd subframe - * tc_subfr == 3*L_SUBFR - TC in 4th subframe - *-----------------------------------------------------------------*/ - - *position = emaximum( res + *tc_subfr, min( T_op + 2, L_SUBFR ), &temp ) + *tc_subfr; - } - else - { - *position = emaximum( res, (int16_t) ( T_op + 2 ), &temp ); - - /* correction in case of possibly wrong T_op (double-pitch values) */ - if ( ( L_frame == L_FRAME && T_op > 2 * PIT_MIN ) || - ( L_frame == L_FRAME16k && T_op > 2 * PIT16k_MIN ) ) - { - int16_t position_tmp, len; - float aver, temp2; - - len = (int16_t) ( T_op / 2 + 2 ); - - position_tmp = emaximum( res, len, &temp2 ); - aver = dotp( res, res, len ) + 0.01f; - aver = sqrtf( aver / len ); - - temp = sqrtf( temp ); - temp2 = sqrtf( temp2 ); - - if ( temp2 > 0.8f * temp && aver < 0.25f * temp ) - { - *position = position_tmp; - } - } - - *tc_subfr = (int16_t) floor( ( *position ) / L_SUBFR ) * L_SUBFR; - } - - return; -} -#endif diff --git a/lib_enc/update_decision.c b/lib_enc/update_decision.c index 5a31bc314..825401325 100644 --- a/lib_enc/update_decision.c +++ b/lib_enc/update_decision.c @@ -39,251 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * bg_music_decision() - * - * - *-------------------------------------------------------------------*/ - -void bg_music_decision( - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - int16_t *music_backgound_f, /* i : background music flag */ - const float frame_energy /* i : current frame energy 1 */ -) -{ - int16_t music_background_frame = 0; - float *sp_center = hVAD_CLDFB->sp_center; - float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; - float *sSFM = hVAD_CLDFB->sfm; - float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; - - if ( ( f_tonality_rate[1] > 0.60 ) || ( f_tonality_rate[0] > 0.86 ) ) - { - if ( ltd_stable_rate[0] < 0.072 && sp_center[0] > 1.2 && ( sSFM[0] < 0.76 || sSFM[1] < 0.88 || sSFM[2] < 0.96 ) ) - { - music_background_frame = 1; - } - } - - if ( music_background_frame && ( 4.6 * hVAD_CLDFB->fg_energy_count * frame_energy > hVAD_CLDFB->fg_energy ) && ( hVAD_CLDFB->fg_energy_est_start == 1 ) ) - { - hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.975f + 0.025f; - } - else if ( music_background_frame ) - { - hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.998f + 0.002f; - } - else - { - hVAD_CLDFB->music_background_rate = hVAD_CLDFB->music_background_rate * 0.997f; - } - - if ( hVAD_CLDFB->music_background_rate > 0.5 ) - { - *music_backgound_f = 1; - } - else - { - *music_backgound_f = 0; - } - - return; -} - - -/*-------------------------------------------------------------------* - * update_decision() - * - * - *-------------------------------------------------------------------*/ - -int16_t update_decision( - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - const float snr, /* i : frequency domain SNR */ - const float tsnr, /* i : time domain SNR */ - const float frame_energy, /* i : current frame energy */ - const float high_eng, /* i : current frame high frequency energy */ - const int16_t vad_flag, /* i : VAD flag */ - const int16_t music_backgound_f /* i : background music flag */ -) -{ - float g_high_eng_sacle = 0.0f; - float sp_center3_diff; - int16_t update_flag = 1; - int16_t tonality_flag = 0; - int16_t frameloop = hVAD_CLDFB->frameloop; - int16_t bw = hVAD_CLDFB->bw_index; - float *sp_center = hVAD_CLDFB->sp_center; - float *ltd_stable_rate = hVAD_CLDFB->ltd_stable_rate; - float *sSFM = hVAD_CLDFB->sfm; - float *f_tonality_rate = hVAD_CLDFB->f_tonality_rate; - float tmpout = frame_energy - 4 * hVAD_CLDFB->frame_energy_smooth; - - g_high_eng_sacle = high_eng / ( hVAD_CLDFB->lt_bg_highf_eng + FLT_MIN ); - sp_center3_diff = sp_center[3] - hVAD_CLDFB->lt_noise_sp_center3; - - if ( frameloop > 50 ) - { - if ( ltd_stable_rate[0] > 0.12 ) - { - update_flag = 0; - } - - if ( ( bw == CLDFBVAD_WB_ID || bw == CLDFBVAD_SWB_ID ) && hVAD_CLDFB->frame_energy_smooth < 4 * frame_energy ) - { - if ( g_high_eng_sacle > 3.0f && ( sp_center3_diff > 0.4 ) ) - { - update_flag = 0; - } - if ( ( sp_center[3] > 2.8f ) && ( ltd_stable_rate[0] > 0.02f ) ) - { - update_flag = 0; - } - } - } - - if ( ( f_tonality_rate[1] > 0.50 ) && ( ltd_stable_rate[0] > 0.1 ) ) - { - update_flag = 0; - } - if ( sSFM[1] < 0.92 && sSFM[0] < 0.92 && sSFM[2] < 0.92 ) - { - update_flag = 0; - } - if ( sSFM[0] < 0.80 || sSFM[1] < 0.78 || sSFM[2] < 0.80 ) - { - update_flag = 0; - } - - if ( frame_energy > 32 * hVAD_CLDFB->frame_energy_smooth ) - { - update_flag = 0; - } - if ( ( 4.6 * hVAD_CLDFB->fg_energy_count * frame_energy > hVAD_CLDFB->fg_energy ) && ( hVAD_CLDFB->fg_energy_est_start == 1 ) && ( frame_energy > 3 ) ) - { - update_flag = 0; - } - if ( ( f_tonality_rate[1] > 0.60 ) || ( f_tonality_rate[0] > 0.86 ) ) - { - update_flag = 0; - tonality_flag = 1; - } - - if ( tonality_flag ) - { - hVAD_CLDFB->tonality_rate3 = hVAD_CLDFB->tonality_rate3 * 0.983f + 0.017f; - } - else - { - hVAD_CLDFB->tonality_rate3 = hVAD_CLDFB->tonality_rate3 * 0.983f; - } - - if ( hVAD_CLDFB->tonality_rate3 > 0.5 ) - { - update_flag = 0; - } - - if ( ( sp_center[0] > 4.0f ) && ltd_stable_rate[0] > 0.04 ) - { - update_flag = 0; - } - if ( ( f_tonality_rate[1] > 0.46 ) && ( ( sSFM[1] > 0.93 ) || ( ltd_stable_rate[0] > 0.09 ) ) ) - { - update_flag = 0; - } - if ( ( sSFM[1] < 0.93 && sSFM[0] < 0.92 && sSFM[2] < 0.97 ) && ( f_tonality_rate[1] > 0.5 ) ) - { - update_flag = 0; - } - if ( ( f_tonality_rate[1] > 0.43 ) && ( sSFM[0] < 0.95 ) && ( sp_center[1] > 1.94f ) ) - { - update_flag = 0; - } - - if ( update_flag ) - { - if ( hVAD_CLDFB->update_count < 1000 ) - { - hVAD_CLDFB->update_count = hVAD_CLDFB->update_count + 1; - } - } - - if ( update_flag ) - { - hVAD_CLDFB->lt_noise_sp_center3 = 0.9f * hVAD_CLDFB->lt_noise_sp_center3 + 0.1f * sp_center[3]; - } - if ( ( tmpout > 0 ) && ( frameloop < 100 ) && ( f_tonality_rate[1] < 0.56 ) && ( ( sp_center[0] < 1.36 ) || ltd_stable_rate[0] < 0.03 ) ) - { - update_flag = 1; - } - if ( snr < 0.3 && tmpout < 0 && tsnr < 1.2 && vad_flag == 0 && f_tonality_rate[1] < 0.5 && ( music_backgound_f == 0 ) && ltd_stable_rate[3] < 0.1 ) - - { - update_flag = 1; - } - if ( vad_flag && ( snr > 1.0 ) && bw == CLDFBVAD_SWB_ID && tmpout > 0 ) - { - update_flag = 0; - } - - if ( vad_flag && ( snr > 1.5 ) && bw != CLDFBVAD_SWB_ID && tmpout > 0 ) - { - update_flag = 0; - } - - if ( update_flag == 0 ) - { - hVAD_CLDFB->update_num_with_snr = 0; - } - else - { - if ( vad_flag && ( snr > 3.0 ) && hVAD_CLDFB->update_num_with_snr < 10 ) - { - update_flag = 0; - hVAD_CLDFB->update_num_with_snr++; - } - } - - if ( vad_flag == 0 || update_flag == 1 ) - { - float tmpp = (float) fabs( hVAD_CLDFB->sp_center[2] - hVAD_CLDFB->lt_noise_sp_center0 ); - - if ( tmpp > 2.5 ) - { - tmpp = 2.5f; - } - - hVAD_CLDFB->lt_noise_sp_center_diff_sum += tmpp; - hVAD_CLDFB->lt_noise_sp_center_diff_counter++; - - if ( hVAD_CLDFB->lt_noise_sp_center_diff_counter == 128 ) - { - hVAD_CLDFB->lt_noise_sp_center_diff_sum = hVAD_CLDFB->lt_noise_sp_center_diff_sum * 0.75f; - hVAD_CLDFB->lt_noise_sp_center_diff_counter = 96; - } - - if ( fabs( sp_center[0] - hVAD_CLDFB->lt_noise_sp_center0 ) > 2.4 ) - { - hVAD_CLDFB->lt_noise_sp_center0 = 0.996f * hVAD_CLDFB->lt_noise_sp_center0 + 0.004f * sp_center[0]; - } - else if ( fabs( sp_center[0] - hVAD_CLDFB->lt_noise_sp_center0 ) > 1.0 ) - { - hVAD_CLDFB->lt_noise_sp_center0 = 0.99f * hVAD_CLDFB->lt_noise_sp_center0 + 0.01f * sp_center[0]; - } - else - { - hVAD_CLDFB->lt_noise_sp_center0 = 0.96f * hVAD_CLDFB->lt_noise_sp_center0 + 0.04f * sp_center[0]; - } - } - - if ( ( fabs( sp_center[2] - hVAD_CLDFB->lt_noise_sp_center0 ) > ( 6 * ( hVAD_CLDFB->lt_noise_sp_center_diff_sum / hVAD_CLDFB->lt_noise_sp_center_diff_counter ) + 0.3 ) ) && hVAD_CLDFB->frameloop > 200 ) - { - update_flag = 0; - } - - return update_flag; -} -#endif diff --git a/lib_enc/updt_enc.c b/lib_enc/updt_enc.c index 9c48b93a5..6433b6bc5 100644 --- a/lib_enc/updt_enc.c +++ b/lib_enc/updt_enc.c @@ -39,11 +39,9 @@ #include "cnst.h" #include "rom_com.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "prot_fx_enc.h" #include "ivas_prot_fx.h" -#endif #include "wmc_auto.h" /*-------------------------------------------------------------------* @@ -52,417 +50,7 @@ * Common updates (all frame types) *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void updt_enc( - Encoder_State *st, /* i/o: state structure */ - const float *old_exc, /* i : buffer of excitation */ - const float *pitch_buf, /* i : floating pitch for each subframe */ - const float Es_pred, /* i : predicited scaled innovation energy */ - const float *Aq, /* i : A(z) quantized for all subframes */ - const float *lsf_new, /* i : current frame LSF vector */ - const float *lsp_new, /* i : current frame LSP vector */ - const float *old_bwe_exc /* i : buffer of excitation */ -) -{ - int16_t i; - - /* update old excitation buffer */ - mvr2r( &old_exc[st->L_frame], st->hLPDmem->old_exc_flt, L_EXC_MEM ); - if ( !st->Opt_AMR_WB && st->hBWE_TD != NULL ) - { - mvr2r( &old_bwe_exc[L_FRAME32k], st->hBWE_TD->old_bwe_exc, PIT16k_MAX * 2 ); - } - - /* update old LSP and LSF vector */ - mvr2r( lsp_new, st->lsp_old, M ); - mvr2r( lsf_new, st->lsf_old, M ); - - /* update last coder type */ - st->last_coder_type = st->coder_type; - if ( st->coder_type == INACTIVE || ( st->bpf_off == 1 && st->coder_type != AUDIO && st->coder_type != TRANSITION ) ) - { - st->last_coder_type = UNVOICED; - } - - /* this ensures that st->last_coder_type is never set to INACTIVE in case of AVQ inactive because the FEC does not distinguish between GSC inactive and AVQ inactive */ - if ( st->coder_type == INACTIVE && st->total_brate > ACELP_24k40 ) - { - st->last_coder_type = GENERIC; - } - - if ( st->Opt_AMR_WB && st->coder_type == INACTIVE && st->core_brate != SID_1k75 && st->core_brate != FRAME_NO_DATA ) - { - /* overwrite previous coding type to help FEC */ - st->last_coder_type = UNVOICED; - } - - /* AC mode (GSC) - in speech we can consider that the last pitch band reached the max */ - if ( st->hGSCEnc != NULL && st->coder_type != AUDIO && st->coder_type != INACTIVE ) - { - st->hGSCEnc->mem_last_pit_band = 10 + BAND1k2; - st->hGSCEnc->past_dyn_dec = NOISE_LEVEL_SP0 - 1; /* tends to speech */ - st->hGSCEnc->noise_lev = NOISE_LEVEL_SP0 - 1; /* tends to speech */ - st->hGSCEnc->mid_dyn = 40.0f * 0.5f + st->hGSCEnc->mid_dyn * 0.5f; - } - - /* convert old LSP vector from 12kHz domain to 16kHz domain (needed in case of ACELP@12k8 <-> ACELP@16kHz switching) */ - if ( st->L_frame == L_FRAME ) - { - mvr2r( st->lsp_old, st->lsp_old16k, M ); - - st->rate_switching_reset_16kHz = lsp_convert_poly( st->lsp_old16k, L_FRAME16k, st->Opt_AMR_WB ); - } - - /* update buffer of old subframe pitch values */ - if ( st->last_L_frame != st->L_frame ) - { - if ( st->L_frame == L_FRAME ) - { - for ( i = 0; i < NB_SUBFR; i++ ) - { - st->old_pitch_buf[NB_SUBFR + i] = 0.8f * st->old_pitch_buf[NB_SUBFR + i + 1]; - } - } - else - { - for ( i = NB_SUBFR; i > 0; i-- ) - { - st->old_pitch_buf[NB_SUBFR + i] = 1.25f * st->old_pitch_buf[NB_SUBFR + i - 1]; - } - st->old_pitch_buf[2 * NB_SUBFR16k - 1] = st->old_pitch_buf[2 * NB_SUBFR16k - 2]; - } - } - - mvr2r( &st->old_pitch_buf[st->L_frame / L_SUBFR], st->old_pitch_buf, st->L_frame / L_SUBFR ); - mvr2r( pitch_buf, &st->old_pitch_buf[st->L_frame / L_SUBFR], st->L_frame / L_SUBFR ); - - /* SC-VBR */ - st->last_Opt_SC_VBR = st->Opt_SC_VBR; - if ( st->hSC_VBR != NULL ) - { - st->hSC_VBR->last_last_ppp_mode = st->hSC_VBR->last_ppp_mode; - st->hSC_VBR->last_ppp_mode = st->hSC_VBR->ppp_mode; - st->hSC_VBR->last_nelp_mode = st->hSC_VBR->nelp_mode; - } - - /* core switching updates */ - mvr2r( &Aq[( st->L_frame / L_SUBFR - 1 ) * ( M + 1 )], st->old_Aq_12_8, M + 1 ); - st->old_Es_pred = Es_pred; - - return; -} - -/*-------------------------------------------------------------------* - * updt_IO_switch() - * - * Common updates for AMR-WB IO mode and EVS primary mode switching - *-------------------------------------------------------------------*/ - -void updt_IO_switch_enc( - Encoder_State *st, /* i/o: state structure */ - const int16_t input_frame /* i : input frame length */ -) -{ - float xsp_tmp[M]; - - if ( st->last_core == AMR_WB_CORE ) /* switching to EVS primary mode */ - { - /* reset onset detection counter */ - st->tc_cnt = -1; - - /* force safety-net LSFQ in the first frames after the switching */ - st->Nb_ACELP_frames = 0; - - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ - mvr2r( stable_LSP, xsp_tmp, M ); - isf2lsf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); - mvr2r( stable_LSP, xsp_tmp, M ); - isp2lsp( st->lsp_old, st->lsp_old, xsp_tmp, M ); - isp2lsp( st->lsp_old1, st->lsp_old1, xsp_tmp, M ); - - mvr2r( stable_LSP, xsp_tmp, M ); - isp2lsp( st->hDtxEnc->lspCNG, st->hDtxEnc->lspCNG, xsp_tmp, M ); - if ( st->hTdCngEnc->old_enr_index >= 0 ) - { - st->hTdCngEnc->old_enr_index = min( (int16_t) ( (float) st->hTdCngEnc->old_enr_index / STEP_AMR_WB_SID * STEP_SID ), 127 ); - } - /* Perform preemphasis of the old input signal @16kHz */ - st->mem_preemph16k = 0; - preemph( st->old_inp_16k, PREEMPH_FAC_16k_FLT, L_INP_MEM, &( st->mem_preemph16k ) ); - - /* reset TD BWE buffers */ - set_f( st->hBWE_TD->old_speech_wb, 0.0f, ( L_LOOK_12k8 + L_SUBFR ) * 5 / 16 ); - set_f( st->hBWE_TD->old_bwe_exc, 0.0f, PIT16k_MAX * 2 ); - set_f( st->hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); - InitSWBencBufferStates( st->hBWE_TD, NULL ); - - st->hBWE_TD->bwe_non_lin_prev_scale = 0.0; - set_f( st->hBWE_TD->decim_state1, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( st->hBWE_TD->decim_state2, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); - set_f( st->hBWE_FD->old_wtda_swb, 0, L_FRAME16k ); - set_f( st->hBWE_FD->old_input_wb, 0, NS2SA( 16000, DELAY_FD_BWE_ENC_NS ) ); - - wb_tbe_extras_reset( st->hBWE_TD->mem_genSHBexc_filt_down_wb2, st->hBWE_TD->mem_genSHBexc_filt_down_wb3 ); - if ( input_frame >= L_FRAME32k ) - { - swb_tbe_reset( st->hBWE_TD->mem_csfilt, st->hBWE_TD->mem_genSHBexc_filt_down_shb, st->hBWE_TD->state_lpc_syn, st->hBWE_TD->syn_overlap, st->hBWE_TD->state_syn_shbexc, &( st->hBWE_TD->tbe_demph ), &( st->hBWE_TD->tbe_premph ), st->hBWE_TD->mem_stp_swb, &( st->hBWE_TD->gain_prec_swb ) ); - } - - if ( input_frame == L_FRAME48k ) - { - set_f( st->hBWE_TD->fb_state_lpc_syn, 0, LPC_SHB_ORDER ); - st->hBWE_TD->fb_tbe_demph = 0; - fb_tbe_reset_enc( st->hBWE_TD->elliptic_bpf_2_48k_mem, &st->hBWE_TD->prev_fb_energy ); - } - - /* reset FD BWE buffers */ - st->hBWE_FD->prev_mode = NORMAL; - - /* reset the unvoiced/audio signal improvement memories */ - st->hGSCEnc->seed_tcx = 15687; - - st->use_acelp_preq = 0; - - set_f( st->hSpMusClas->finc_prev, 0.0f, ATT_NSEG ); - st->hSpMusClas->lt_finc = 0.0f; - st->hSpMusClas->last_strong_attack = 0; - set_f( st->hSpMusClas->tod_lt_Bin_E, 0.0f, TOD_NSPEC ); - set_f( st->hSpMusClas->tod_S_map_lt, 0.0f, TOD_NSPEC ); - st->hSpMusClas->tod_thr_lt = TOD_THR_MASS; - st->hSpMusClas->tod_weight = 0.0f; - st->hSpMusClas->tod_S_mass_prev = TOD_THR_MASS; - st->hSpMusClas->tod_S_mass_lt = TOD_THR_MASS; - } - else /* switching to AMR-WB IO mode */ - { - set_f( st->mem_MA, 0, M ); - - /* AMR-WB IO mode uses ISF(ISP), but EVS primary mode LSF(LSP) */ - mvr2r( stable_ISP, xsp_tmp, M ); - lsf2isf( st->lsf_old, st->lsf_old, xsp_tmp, M, INT_FS_12k8 ); - mvr2r( stable_ISP, xsp_tmp, M ); - lsp2isp( st->lsp_old, st->lsp_old, xsp_tmp, M ); - mvr2r( st->lsp_old, st->lsp_old1, M ); - lsp2isp( st->lsp_old1, st->lsp_old1, xsp_tmp, M ); - mvr2r( stable_ISP, xsp_tmp, M ); - lsp2isp( st->hDtxEnc->lspCNG, st->hDtxEnc->lspCNG, xsp_tmp, M ); - if ( st->hTdCngEnc->old_enr_index >= 0 ) - { - st->hTdCngEnc->old_enr_index = min( (int16_t) ( (float) st->hTdCngEnc->old_enr_index / STEP_SID * STEP_AMR_WB_SID ), 63 ); - } - - /* gain quantization memory */ - set_f( st->hAmrwb_IO->past_qua_en, -14.0f, GAIN_PRED_ORDER ); - - /* reset VBR signaling */ - if ( st->Opt_SC_VBR ) - { - st->hSC_VBR->ppp_mode = 0; - st->hSC_VBR->nelp_mode = 0; - } - - /* reset the unvoiced/audio signal improvement memories */ - st->hGSCEnc->seed_tcx = 15687; - } - - if ( st->hTdCngEnc != NULL ) - { - /* Force SID in case of AMR-WB IO mode/EVS primary mode switching */ - st->hDtxEnc->cnt_SID = 0; - st->hDtxEnc->cng_cnt = 0; - st->hTdCngEnc->ho_hist_size = 0; - st->hTdCngEnc->burst_ho_cnt = 0; - } - - /* LP memories */ - mvr2r( UVWB_Ave, st->mem_AR, M ); - - /* FEC - update adaptive LSF mean vector */ - mvr2r( st->lsf_old, st->lsfoldbfi0, M ); - mvr2r( st->lsf_old, st->lsfoldbfi1, M ); - mvr2r( st->lsf_old, st->lsf_adaptive_mean, M ); - - return; -} - -/*-------------------------------------------------------------------* - * updt_enc_common() - * - * Common updates for MODE1 and MODE2 - *-------------------------------------------------------------------*/ - -void updt_enc_common( - Encoder_State *st /* i/o: encoder state structure */ -) -{ - /*---------------------------------------------------------------------* - * Updates - main main codec parameters - *---------------------------------------------------------------------*/ - st->last_sr_core = st->sr_core; - st->last_codec_mode = st->codec_mode; - st->last_L_frame = st->L_frame; - st->last_core = st->core; - - st->last_total_brate = st->total_brate; - st->last_bits_frame_nominal = st->bits_frame_nominal; - st->last_core_brate = st->core_brate; - st->last_extl = st->extl; - st->last_input_bwidth = st->input_bwidth; - st->last_bwidth = st->bwidth; - st->last_coder_type_raw = st->coder_type_raw; - - if ( st->core_brate > SID_2k40 && st->hDtxEnc != NULL ) - { - st->hDtxEnc->last_active_brate = st->total_brate; - } - - if ( st->hBWE_TD != NULL ) - { - if ( st->core == HQ_CORE ) - { - /* in the HQ core, coder_type is not used so it could have been set to anything */ - st->hBWE_TD->prev_coder_type = GENERIC; - } - else - { - st->hBWE_TD->prev_coder_type = st->coder_type; - } - } - - if ( st->Opt_DTX_ON && st->hTdCngEnc != NULL ) - { - if ( st->core_brate > SID_2k40 ) - { - if ( st->hDtxEnc->first_CNG == 1 ) - { - if ( st->hTdCngEnc->act_cnt >= BUF_DEC_RATE ) - { - st->hTdCngEnc->act_cnt = 0; - } - st->hTdCngEnc->act_cnt++; - - if ( st->hTdCngEnc->act_cnt == BUF_DEC_RATE && st->hTdCngEnc->ho_hist_size > 0 ) - { - st->hTdCngEnc->ho_hist_size--; - } - } - - if ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD || st->hDtxEnc->first_CNG == 1 ) - { - if ( ++( st->hTdCngEnc->act_cnt2 ) >= MIN_ACT_CNG_UPD ) - { - st->hTdCngEnc->act_cnt2 = MIN_ACT_CNG_UPD; - } - - if ( ( st->element_mode == IVAS_SCE || st->element_mode == IVAS_CPE_DFT || st->element_mode == IVAS_CPE_TD ) && st->hTdCngEnc->act_cnt2 >= MIN_ACT_CNG_UPD ) - { - st->hTdCngEnc->CNG_att = 0.0f; - - apply_scale_flt( &st->hTdCngEnc->CNG_att, st->hFdCngEnc->hFdCngCom->CngBandwidth, st->hFdCngEnc->hFdCngCom->CngBitrate, scaleTableStereo, SIZE_SCALE_TABLE_STEREO ); - } - } - } - - if ( ( st->core_brate == SID_2k40 || st->core_brate == FRAME_NO_DATA ) && st->hDtxEnc->first_CNG == 0 && st->cng_type == LP_CNG ) - { - st->hDtxEnc->first_CNG = 1; - } - } - - /*-----------------------------------------------------------------* - * Increase the counter of initialization frames - * Limit the max number of init. frames - *-----------------------------------------------------------------*/ - - if ( st->ini_frame < MAX_FRAME_COUNTER ) - { - ( st->ini_frame )++; - } - - /* synchronisation of CNG seeds */ - if ( st->hTdCngEnc != NULL && st->core_brate != FRAME_NO_DATA && st->core_brate != SID_2k40 && st->core != AMR_WB_CORE ) - { - own_random( &( st->hTdCngEnc->cng_seed ) ); - own_random( &( st->hTdCngEnc->cng_ener_seed ) ); - } - - /*---------------------------------------------------------------------* - * Updates - MODE2 - *---------------------------------------------------------------------*/ - - if ( st->element_mode == EVS_MONO && st->mdct_sw == MODE2 ) - { - st->codec_mode = MODE2; - - st->sr_core = getCoreSamplerateMode2_flt( EVS_MONO, st->total_brate, st->bwidth, st->flag_ACELP16k, st->rf_mode, 0 ); - - st->L_frame = (int16_t) ( st->sr_core / FRAMES_PER_SEC ); - - if ( st->sr_core == INT_FS_12k8 ) - { - st->preemph_fac_flt = PREEMPH_FAC_FLT; - st->gamma_flt = GAMMA1_FLT; - } - else - { - st->preemph_fac_flt = PREEMPH_FAC_16k_FLT; - st->gamma_flt = GAMMA16k_FLT; - } - - st->igf = getIgfPresent( EVS_MONO, st->total_brate, st->bwidth, st->rf_mode ); - } - - /* update FER clas */ - if ( st->core != AMR_WB_CORE ) - { - st->last_clas = st->clas; - } - - /* Update Core */ - core_encode_update( st ); - - /*---------------------------------------------------------------------* - * RF mode updates - *---------------------------------------------------------------------*/ - - if ( st->rf_mode ) - { - if ( st->hSC_VBR != NULL ) - { - if ( st->hRF->rf_frame_type == RF_NELP ) - { - st->hSC_VBR->last_nelp_mode = 1; - } - else - { - st->hSC_VBR->last_nelp_mode = 0; - } - } - } - - st->rf_mode_last = st->rf_mode; - - if ( st->Opt_RF_ON ) - { - st->L_frame = L_FRAME; - st->rf_mode = 1; - } - - /*---------------------------------------------------------------------* - * Other updates - *---------------------------------------------------------------------*/ - - if ( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) - { - st->hTcxEnc->tcxltp_norm_corr_mem_flt = st->hTcxEnc->tcxltp_norm_corr_past_flt; - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void updt_enc_common_ivas_fx( Encoder_State *st /* i/o: encoder state structure */ ) @@ -681,4 +269,3 @@ void updt_enc_common_ivas_fx( return; } -#endif diff --git a/lib_enc/updt_tar.c b/lib_enc/updt_tar.c index 284113b7d..e748899a9 100644 --- a/lib_enc/updt_tar.c +++ b/lib_enc/updt_tar.c @@ -38,30 +38,3 @@ #include "options.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*----------------------------------------------------------------------------------* - * procedure updt_tar() - * - * Update the target vector for codebook search. - *----------------------------------------------------------------------------------*/ - -void updt_tar( - const float *x, /* i : old target (for pitch search) */ - float *x2, /* o : new target (for codebook search) */ - const float *y, /* i : filtered adaptive codebook vector */ - const float gain, /* i : adaptive codebook gain */ - const int16_t L /* i : subframe size */ -) -{ - int16_t i; - - - for ( i = 0; i < L; i++ ) - { - x2[i] = x[i] - gain * y[i]; - } - - return; -} -#endif diff --git a/lib_enc/vad.c b/lib_enc/vad.c index 0ba928ad3..7ea816a4f 100644 --- a/lib_enc/vad.c +++ b/lib_enc/vad.c @@ -74,1027 +74,19 @@ * * VAD initializations *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void wb_vad_init( - VAD_HANDLE hVAD /* i/o: VAD data handle */ -) -{ - hVAD->hangover_cnt = 0; /* Hangover counter initialized to 0 */ - hVAD->nb_active_frames = ACTIVE_FRAMES; /* The counter of SPEECH frames necessary to trigger HO */ - /* is set to max (-> start with hangover) */ - - hVAD->vad_flag_reg_H = 0L; - hVAD->vad_flag_reg_L = 0L; - hVAD->vad_prim_reg = 0L; - hVAD->vad_flag_cnt_50 = 0; - hVAD->vad_prim_cnt_16 = 0; - - /* By default one should not start with a hangover */ - hVAD->hangover_cnt_dtx = HANGOVER_LONG; /* hangover for DTX */ - hVAD->hangover_cnt_music = HANGOVER_LONG_MUSIC; /* hangover for DTX */ - - hVAD->hangover_cnt_he = 0; /* Hangover counter initialized to 0 */ - hVAD->nb_active_frames_he = ACTIVE_FRAMES; /* The counter of SPEECH frames necessary to trigger HO */ - hVAD->bcg_flux = 70; - hVAD->soft_hangover = 0; - hVAD->voiced_burst = 0; - hVAD->bcg_flux_init = 50; - hVAD->nb_active_frames_he1 = ACTIVE_FRAMES; - hVAD->hangover_cnt_he1 = 0; - - hVAD->prim_act_quick = 0.0f; - hVAD->prim_act_slow = 0.0f; - hVAD->prim_act = 0.0f; - hVAD->prim_act_quick_he = 0.0f; - hVAD->prim_act_slow_he = 0.0f; - hVAD->prim_act_he = 0.0f; - - hVAD->consec_inactive = 0; - hVAD->spectral_tilt_reset = 1; - hVAD->running_avg = 0; - hVAD->ra_deltasum = 0; - hVAD->trigger_SID = 0; - hVAD->snr_sum_vad = 0; - - hVAD->hangover_terminate_flag = 0; - - return; -} -#endif /*-----------------------------------------------------------------* * sing_thr_snr_acc() * * accumulate snr_sum with significance thresholds *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void sign_thr_snr_acc( - float *snr_sum, - float snr, - float sign_thr, - float min_snr ) -{ - if ( snr >= sign_thr ) - { - *snr_sum = *snr_sum + snr; - } - else - { - *snr_sum = *snr_sum + min_snr; - } - - return; -} -#endif /*-----------------------------------------------------------------* * dtx_hangover_addition() * * accumulate snr_sum with significance thresholds *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t dtx_hangover_addition( - Encoder_State *st, /* i/o: encoder state structure */ - const int16_t vad_flag, /* i : VAD flag */ - const float lp_snr, /* i : input single SNR estimate */ - const int16_t cldfb_subtraction, /* i : */ - int16_t *vad_hover_flag, /* o : VAD hangover flag */ - VAD_HANDLE hVAD, /* i/o: VAD handle for L or R channel */ - NOISE_EST_HANDLE hNoiseEst, /* i : Noise estimation handle */ - int16_t *rem_dtx_ho /* o : Expected remaining hangover frames */ -) -{ - int16_t hangover_short_dtx, flag_dtx; - int16_t ho_limit_clean; - - if ( hVAD == NULL ) - { - hVAD = st->hVAD; - } - if ( hNoiseEst == NULL ) - { - hNoiseEst = st->hNoiseEst; - } - - flag_dtx = 0; - - /* Determine initial hangover length */ - hangover_short_dtx = 2; /* was 1 */ - if ( ( lp_snr < 16.0f && st->input_bwidth != NB ) || - hVAD->prim_act_he > 0.95f ) - { - hangover_short_dtx = 3; /* was 2 */ - } - - /* Adjust hangover according to activity history */ - if ( hVAD->vad_prim_cnt_16 > 12 ) /* 12 requires roughly > 80% primary activity */ - { - hangover_short_dtx = hangover_short_dtx + 2; - } - - if ( hVAD->vad_flag_cnt_50 > 40 ) /* 40 requires roughtly > 80% flag activity */ - { - hangover_short_dtx = hangover_short_dtx + 5; - } - - /* Keep hangover_short lower than maximum hangover count */ - if ( hangover_short_dtx > HANGOVER_LONG - 1 ) - { - hangover_short_dtx = HANGOVER_LONG - 1; - } - - /* Only allow short HO if not sufficient active frames */ - ho_limit_clean = 3; - if ( st->core == AMR_WB_CORE ) - { - ho_limit_clean = 2; - } - - if ( st->input_bwidth != NB && st->core != AMR_WB_CORE && lp_snr > 25.0f ) - { - ho_limit_clean = 2; - } - - if ( ho_limit_clean != 0 ) - { - if ( ( hangover_short_dtx > ho_limit_clean ) && ( ( hVAD->vad_prim_cnt_16 < 7 ) || ( lp_snr > 16 && hVAD->prim_act_he < 0.85 ) ) ) - { - hangover_short_dtx = ho_limit_clean; - } - } - - /* hangover adjustment from combined FFT + CLDFBVAD */ - if ( st->core != AMR_WB_CORE ) - { - hangover_short_dtx = hangover_short_dtx - cldfb_subtraction; - if ( hangover_short_dtx < 0 ) - { - hangover_short_dtx = 0; - } - } - - if ( vad_flag == 1 ) /* Speech present */ - { - flag_dtx = 1; - - /* Add hangover after sufficient # of active frames or sufficient activity during last second */ - if ( hVAD->nb_active_frames >= ACTIVE_FRAMES || hVAD->vad_flag_cnt_50 > 45 ) /* 45 requires roughtly > 90% flag activity */ - { - hVAD->hangover_cnt_dtx = 0; - } - - /* inside HO period */ - if ( hVAD->hangover_cnt_dtx < HANGOVER_LONG && hVAD->hangover_cnt_dtx != 0 ) - { - hVAD->hangover_cnt_dtx++; - } - - hVAD->hangover_terminate_flag = 0; - - /* Music hangover when music detected */ - if ( hVAD->prim_act_he > 0.98f && hNoiseEst->Etot_lp > 40 && hVAD->vad_prim_cnt_16 > 14 && hVAD->vad_flag_cnt_50 > 48 ) - { - hVAD->hangover_cnt_music = 0; - } - - /* inside music HO period */ - if ( hVAD->hangover_cnt_music < HANGOVER_LONG_MUSIC && hVAD->hangover_cnt_music != 0 ) - { - hVAD->hangover_cnt_music++; - } - } - else - { - /* Reset the counter of speech frames necessary to start hangover algorithm */ - if ( hVAD->hangover_cnt_dtx < HANGOVER_LONG ) /* inside HO period */ - { - hVAD->hangover_cnt_dtx++; - } - - if ( hVAD->hangover_cnt_music < HANGOVER_LONG_MUSIC ) /* inside music HO period */ - { - hVAD->hangover_cnt_music++; - } - - /* fast terminate DTX hangover if st->hangover_terminate_flag is set */ - if ( hVAD->hangover_terminate_flag == 1 ) - { - hVAD->hangover_cnt = HANGOVER_LONG; - hVAD->hangover_cnt_dtx = HANGOVER_LONG; - hVAD->hangover_terminate_flag = 0; - /* only shorten music hangover when low energy frames */ - if ( hNoiseEst->Etot_lp < 20.0f ) - { - hVAD->hangover_cnt_music = HANGOVER_LONG_MUSIC; - } - } - - if ( hVAD->hangover_cnt_dtx <= hangover_short_dtx ) /* "hard" hangover */ - { - flag_dtx = 1; - } - - if ( hVAD->hangover_cnt_music <= 15 ) /* "hard" hangover */ - { - flag_dtx = 1; - } - } - - if ( flag_dtx != 0 && st->localVAD == 0 ) - { - *vad_hover_flag = 1; - if ( rem_dtx_ho != NULL ) - { - *rem_dtx_ho = max( hangover_short_dtx - hVAD->hangover_cnt_dtx, 0 ); - } - } - - return flag_dtx; -} -#endif /*-----------------------------------------------------------------* * wb_vad() * * Voice Activity Detector *-----------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t wb_vad( - Encoder_State *st, /* i/o: encoder state structure */ - const float fr_bands[], /* i : per band input energy (contains 2 vectors) */ - int16_t *noisy_speech_HO, /* o : SC-VBR noisy speech HO flag */ - int16_t *clean_speech_HO, /* o : SC-VBR clean speech HO flag */ - int16_t *NB_speech_HO, /* o : SC-VBR NB speech HO flag */ - float *snr_sum_he, /* o : Output snr_sum as weighted spectral measure */ - int16_t *localVAD_HE_SAD, /* o : HE_SAD decision without hangovers */ - int16_t *flag_noisy_speech_snr, /* o : */ - VAD_HANDLE hVAD, /* i/o: VAD handle */ - NOISE_EST_HANDLE hNoiseEst, /* i/o: Noise estimation handle */ - float lp_speech, /* i : long term active speech energy average */ - float lp_noise /* i : long term noise energy */ -) -{ - int16_t i, j, flag, hangover_short; - float snr[NB_BANDS], snr_sum, thr1, thr2, lp_snr, nk, nc, th_clean; - const float *pt1, *pt2, *pt3; - float min_snr, sign_thr; - float fr_enr; - float ftmp, ftmp1; - float mssnr = 0; - float snr_sumt; - float vad_thr; - int16_t hangover_hd; - int16_t snr_idx; - float delta1, delta2, delta3; - int16_t flag_he1; - float mssnr_hov; - int16_t stmp; - float msnr; - float snr_outlier; - int16_t snr_outlier_index; - float accum_ener_L, accum_ener_H; - float delta4; - float snr18 = 1.0f, snr19 = 1.0f; - int16_t nb_sig_snr; - float nv; - float snr_sum_HE_SAD; - float sign_thr_HE_SAD, min_snr_HE_SAD; - float nv_ofs; - float thr1_ol; - float snr_sum_ol; - int16_t last_7k2_coder_type; - - if ( hNoiseEst == NULL ) - { - hNoiseEst = st->hNoiseEst; - } - - if ( hVAD == NULL ) - { - hVAD = st->hVAD; - } - - if ( lp_speech < -100.0f ) - { - lp_speech = st->lp_speech; - } - - if ( lp_noise < -100.0f ) - { - lp_noise = st->lp_noise; - } - - /*---------------------------------------------------------------------* - * Initialization - *---------------------------------------------------------------------*/ - - snr_outlier = 0; - snr_outlier_index = 0; - accum_ener_L = 0; - accum_ener_H = 0; - - if ( st->input_bwidth == NB ) - { - st->min_band = 1; - st->max_band = 16; - } - else - { - st->min_band = 0; - st->max_band = 19; - } - - if ( st->Opt_SC_VBR ) - { - last_7k2_coder_type = st->hSC_VBR->last_7k2_coder_type; - } - else - { - last_7k2_coder_type = -1; - } - - /*---------------------------------------------------------------------* - * set SNR thresholds depending on the input rate - *---------------------------------------------------------------------*/ - - if ( st->max_band == 19 ) /* WB input */ - { - nk = 0.1f; - nc = 16.1f; - nv = 2.05f; - nv_ofs = 1.65f; - th_clean = TH16_2; - if ( st->input_bwidth == WB ) - { - sign_thr = 1.3f; - min_snr = 0.8f; - } - else - { - sign_thr = 1.75f; - min_snr = 0.25f; - } - sign_thr_HE_SAD = 2.5f; - min_snr_HE_SAD = 0.2f; - } - else /* NB input */ - { - nk = 0.10f; - nc = 16.0f; - nv = 4.00f; /* Was 4.5f but trunkated to 4.00 used when converted to short */ - nv_ofs = 1.15f; - th_clean = TH8_1; - sign_thr = 1.75f; - min_snr = 0.25f; - - sign_thr_HE_SAD = 2.65f; - min_snr_HE_SAD = 0.05f; - } - - hangover_short = 0; - - - if ( st->Opt_SC_VBR ) - { - *noisy_speech_HO = 0; - *clean_speech_HO = 0; - *NB_speech_HO = 0; - } - - /*---------------------------------------------------------------------* - * compute SNR for each band & total - *---------------------------------------------------------------------*/ - - pt1 = fr_bands; - pt2 = fr_bands + NB_BANDS; - snr_sum = 0.0f; - *snr_sum_he = 0.0f; - snr_sumt = 0; - mssnr_hov = 0; - snr_sum_HE_SAD = 0.0f; - lp_snr = lp_speech - lp_noise; - - if ( lp_snr > 24.0f ) - { - snr_idx = 0; - } - else if ( lp_snr > 18 ) - { - snr_idx = 1; - } - else - { - snr_idx = 2; - } - - if ( snr_idx == 0 ) - { - stmp = 6; - delta1 = 0.0f; - delta2 = 0.0f; - delta3 = 0.0f; - delta4 = 0.0f; - vad_thr = 2.4f * lp_snr - 42.2f; - vad_thr = min( vad_thr, 80 ); - } - else if ( snr_idx == 1 ) - { - stmp = 6; - delta1 = 0.1f; - delta2 = 0.2f; - delta3 = 0.2f; - delta4 = 0.2f; - vad_thr = 2.4f * lp_snr - 40.2f; - vad_thr = min( vad_thr, 80 ); - } - else - { - stmp = 9; - delta1 = 0.2f; - delta2 = 0.4f; - delta3 = 0.3f; - delta4 = 0.4f; - vad_thr = 2.5f * lp_snr - 10.0f; - vad_thr = max( vad_thr, 1 ); - } - pt3 = hNoiseEst->bckr; - nb_sig_snr = 20; - - for ( i = st->min_band; i <= st->max_band; i++ ) - { - ftmp = *pt1++; - ftmp1 = *pt2++; - fr_enr = ( 0.2f * hNoiseEst->enrO[i] + 0.4f * ftmp + 0.4f * ftmp1 ); - - if ( ftmp > ftmp1 ) - { - snr[i] = ( 0.2f * hNoiseEst->enrO[i] + 0.4f * ftmp + 0.4f * ftmp1 ) / *pt3++; - } - else - { - snr[i] = ( 0.2f * hNoiseEst->enrO[i] + 0.3f * ftmp + 0.5f * ftmp1 ) / *pt3++; - } - - if ( snr[i] < 2.0f ) - { - nb_sig_snr--; - } - - if ( snr[i] < 1 ) - { - snr[i] = 1; - } - - snr[i] = (float) log10( snr[i] ); - snr_sumt += snr[i]; - if ( i < 2 ) - { - ftmp = snr[i] + delta1; - } - else if ( i < 7 ) - { - ftmp = snr[i] + delta2; - } - else if ( i < 18 ) - { - ftmp = snr[i] + delta3; - } - else - { - ftmp = snr[i] + delta4; - } - ftmp1 = ftmp; - if ( i < 7 ) - { - ftmp1 = ftmp + 0.4f; - } - ftmp = min( ftmp, 2.0f ); - ftmp1 = min( ftmp1, 2.0f ); - msnr = 1; - for ( j = 0; j < stmp; j++ ) - { - msnr *= ftmp; - } - mssnr += msnr; - if ( i == 18 ) - { - snr18 = msnr; - } - else if ( i == 19 ) - { - snr19 = msnr; - } - msnr = 1; - for ( j = 0; j < stmp; j++ ) - { - msnr *= ftmp1; - } - mssnr_hov += msnr; - snr[i] = fr_enr / hNoiseEst->bckr[i]; - - sign_thr_snr_acc( &snr_sum_HE_SAD, snr[i], sign_thr_HE_SAD, min_snr_HE_SAD ); - sign_thr_snr_acc( &snr_sum, snr[i], sign_thr, min_snr ); - - /* To make snr[] compatible with older versions where snr[i] >= 1 - also this could be removed if this no longer is a requriement */ - if ( snr[i] < 1.0f ) - { - snr[i] = 1.0f; - } - /* accumulate background noise energy in bands [0-2] and in bands [3-19]*/ - if ( i < 3 ) - { - accum_ener_L = accum_ener_L + hNoiseEst->bckr[i]; - } - else - { - accum_ener_H = accum_ener_H + hNoiseEst->bckr[i]; - } - - /* identify the outlier band */ - if ( snr[i] > snr_outlier ) - { - snr_outlier = snr[i]; - snr_outlier_index = i; - } - } - - if ( ( st->max_band == 19 ) && ( snr[18] > 5.0f ) && ( snr[19] > 5.0f ) ) - { - ftmp = ( mssnr + 3 * ( snr18 + snr19 ) ) * 0.77f; - if ( ftmp > mssnr ) - { - mssnr = ftmp; - } - } - else if ( snr_idx != 0 && nb_sig_snr > 13 ) - { - if ( 2.5f * lp_snr - 15.5f > 0 ) - { - mssnr += 2.5f * lp_snr - 15.5f; - } - } - - - /* Separate SNR_SUM modification to */ - snr_sum_ol = snr_sum; - if ( st->max_band == 19 && snr_outlier < MAX_SNR_OUTLIER_3 && snr_outlier_index > 3 && snr_outlier_index < MAX_SNR_OUTLIER_IND ) /* Update the total SNR only for WB signals */ - { - if ( ( accum_ener_L > OUTLIER_THR_1 * accum_ener_H ) || ( snr_outlier < MAX_SNR_OUTLIER_1 ) ) - { - snr_sum_ol = SNR_OUTLIER_WGHT_1 * ( snr_sum_ol - snr_outlier ); - } - else if ( ( accum_ener_L > OUTLIER_THR_2 * accum_ener_H ) || ( snr_outlier < MAX_SNR_OUTLIER_2 ) ) - { - snr_sum_ol = SNR_OUTLIER_WGHT_2 * ( snr_sum_ol - snr_outlier ); - } - else - { - snr_sum_ol = SNR_OUTLIER_WGHT_3 * ( snr_sum_ol - snr_outlier ); - } - } - - hVAD->snr_sum_vad = 0.5f * hVAD->snr_sum_vad + 0.5f * snr_sum_ol; - - snr_sum_ol = 10.0f * (float) log10( snr_sum_ol ); - snr_sum = snr_sum_ol; /* for NB no outlier modification */ - - snr_sum_HE_SAD = 10.0f * (float) log10( snr_sum_HE_SAD ); - *snr_sum_he = snr_sum_HE_SAD; - - /*---------------------------------------------------------------------* - * compute threshold for VAD decision - *---------------------------------------------------------------------*/ - - lp_snr = lp_speech - lp_noise; /* long-term SNR */ - - if ( lp_snr < hNoiseEst->sign_dyn_lp ) - { - lp_snr += 1; - - if ( lp_snr > hNoiseEst->sign_dyn_lp ) - { - lp_snr = hNoiseEst->sign_dyn_lp; - } - } - - thr1 = nk * lp_snr + nc + nv * ( hNoiseEst->Etot_v_h2 - nv_ofs ); /* threshold as a linear function of long-term SNR */ - - if ( st->element_mode > EVS_MONO && hNoiseEst->first_noise_updt_cnt < 100 ) - { - /* lower threshold during warmup time */ - thr1 -= 10.0f; - vad_thr = 0.f; - } - - if ( lp_snr > 20.0f ) - { - if ( st->element_mode == EVS_MONO || hNoiseEst->first_noise_updt_cnt >= 100 ) - { - /* increase the threshold when SNR is high */ - thr1 = thr1 + 0.3f * ( lp_snr - 20.0f ); - if ( st->max_band == 16 && lp_snr > 40 && thr1 > 24.1f && lp_speech < 45.0f ) - { - thr1 = 24.1f; - } - } - } - - /*---------------------------------------------------------------------* - * WB input - * SNR threshold computing - * Hangover control & final VAD decision - *---------------------------------------------------------------------*/ - - if ( st->input_bwidth != NB ) - { - /* Outlier Detection first calculates thr1_ol and snr_sum_ol instead of - thr1 and snr_sum */ - - thr1_ol = thr1; - if ( lp_snr < th_clean ) - { - hangover_short = 4; - if ( ( snr_outlier_index <= 4 && ( st->last_coder_type > UNVOICED ) && !st->Opt_SC_VBR ) || - ( snr_outlier_index <= 4 && ( last_7k2_coder_type > UNVOICED ) && st->Opt_SC_VBR ) ) - { - thr1_ol = thr1 - 1.0f; - snr_sum_ol = 10.0f * (float) log10( hVAD->snr_sum_vad ); - } - else if ( ( ( st->last_coder_type <= UNVOICED ) && ( snr_outlier < MAX_SNR_OUTLIER_2 ) && !st->Opt_SC_VBR ) || ( ( last_7k2_coder_type <= UNVOICED ) && ( snr_outlier < MAX_SNR_OUTLIER_2 ) && st->Opt_SC_VBR ) ) - { - thr1_ol = thr1 + (float) ( 1.0f - 0.04f * snr_outlier ); - } - else - { - thr1_ol = thr1 + max( 0, (float) ( 0.6f - 0.01f * snr_outlier ) ); - } - } - else - { - if ( st->Opt_SC_VBR ) - { - hangover_short = 3; - } - else - { - hangover_short = 3; - } - } - - /* The use of outlier detection had been removed by accident at some point */ - snr_sum = snr_sum_ol; - thr1 = thr1_ol; - - /* DTX HANGOVER ADDITION MOVED TO pre_proc() */ - - flag_he1 = 0; - st->localVAD = 0; - if ( mssnr > vad_thr ) - { - st->localVAD = 1; /* he1 primary decision */ - flag_he1 = 1; - hVAD->nb_active_frames_he1++; /* Counter of consecutive active speech frames */ - if ( hVAD->nb_active_frames_he1 >= ACTIVE_FRAMES ) - { - hVAD->nb_active_frames_he1 = ACTIVE_FRAMES; - hVAD->hangover_cnt_he1 = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ - } - /* inside HO period */ - if ( hVAD->hangover_cnt_he1 < HANGOVER_LONG_HE && hVAD->hangover_cnt_he1 != 0 ) - { - hVAD->hangover_cnt_he1++; - } - - if ( hVAD->soft_hangover > 0 ) - { - hVAD->soft_hangover--; - } - } - else - { - /* Reset the counter of speech frames necessary to start hangover algorithm */ - hVAD->nb_active_frames_he1 = 0; - } - - if ( hVAD->voiced_burst > 3 ) - { - if ( hVAD->bcg_flux < 40 ) - { - hVAD->soft_hangover = hangover_sf_tbl[snr_idx + 3]; - } - else - { - hVAD->soft_hangover = hangover_sf_tbl[snr_idx]; - } - } - - - hangover_hd = hangover_hd_tbl[snr_idx]; - - if ( hVAD->bcg_flux < 40 ) - { - hangover_hd = ( hangover_hd >> 1 ) + 1; - } - - if ( flag_he1 == 0 && hVAD->soft_hangover > 0 ) - { - if ( mssnr_hov > vad_thr ) - { - flag_he1 = 1; - hVAD->soft_hangover--; - } - else - { - hVAD->soft_hangover = 0; - } - - if ( hVAD->soft_hangover < 0 ) - { - hVAD->soft_hangover = 0; - } - } - - if ( flag_he1 == 0 && hVAD->hangover_cnt_he1 < hangover_hd && hVAD->soft_hangover == 0 ) - { - flag_he1 = 1; - hVAD->hangover_cnt_he1++; - } - - /* Calculate background stationarity */ - if ( flag_he1 == 0 && hNoiseEst->first_noise_updt > 0 ) - { - if ( snr_sumt > hVAD->bcg_flux ) - { - if ( hVAD->bcg_flux_init-- > 0 ) - { - if ( snr_sumt > hVAD->bcg_flux + 50 ) - { - hVAD->bcg_flux = 0.9f * hVAD->bcg_flux + ( 1 - 0.9f ) * ( hVAD->bcg_flux + 50 ); - } - else - { - hVAD->bcg_flux = 0.9f * hVAD->bcg_flux + ( 1 - 0.9f ) * snr_sumt; - } - } - else - { - if ( snr_sumt > hVAD->bcg_flux + 10 ) - { - hVAD->bcg_flux = 0.99f * hVAD->bcg_flux + ( 1 - 0.99f ) * ( hVAD->bcg_flux + 10 ); - } - else - { - hVAD->bcg_flux = 0.99f * hVAD->bcg_flux + ( 1 - 0.99f ) * snr_sumt; - } - } - } - else - { - if ( hVAD->bcg_flux_init-- > 0 ) - { - if ( snr_sumt < hVAD->bcg_flux - 30 ) - { - hVAD->bcg_flux = 0.95f * hVAD->bcg_flux + ( 1 - 0.95f ) * ( hVAD->bcg_flux - 30 ); - } - else - { - hVAD->bcg_flux = 0.95f * hVAD->bcg_flux + ( 1 - 0.95f ) * snr_sumt; - } - } - else - { - if ( snr_sumt < hVAD->bcg_flux - 10 ) - { - hVAD->bcg_flux = 0.9992f * hVAD->bcg_flux + ( 1 - 0.9992f ) * ( hVAD->bcg_flux - 10 ); - } - else - { - hVAD->bcg_flux = 0.9992f * hVAD->bcg_flux + ( 1 - 0.9992f ) * snr_sumt; - } - } - } - - if ( hVAD->bcg_flux_init < 0 ) - { - hVAD->bcg_flux_init = 0; - } - } - - flag = 0; - st->localVAD = 0; - - if ( ( snr_sum > thr1 && flag_he1 == 1 ) ) /* Speech present */ - { - flag = 1; - st->localVAD = 1; - hVAD->nb_active_frames++; /* Counter of consecutive active speech frames */ - if ( hVAD->nb_active_frames >= ACTIVE_FRAMES ) - { - hVAD->nb_active_frames = ACTIVE_FRAMES; - hVAD->hangover_cnt = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ - } - - /* inside HO period */ - if ( hVAD->hangover_cnt < HANGOVER_LONG && hVAD->hangover_cnt != 0 ) - { - hVAD->hangover_cnt++; - } - } - else - { - /* Reset the counter of speech frames necessary to start hangover algorithm */ - hVAD->nb_active_frames = 0; - if ( hVAD->hangover_cnt < HANGOVER_LONG ) /* inside HO period */ - { - hVAD->hangover_cnt++; - } - - if ( hVAD->hangover_cnt <= hangover_short ) /* "hard" hangover */ - { - /* send the extra 3 HO frames to NELP */ - if ( st->element_mode == EVS_MONO && ( lp_snr < th_clean ) && ( st->Opt_SC_VBR ) && ( hVAD->hangover_cnt >= 2 ) ) - { - *noisy_speech_HO = 1; - } - - if ( st->element_mode == EVS_MONO && ( lp_snr >= th_clean ) && ( st->Opt_SC_VBR ) && ( hVAD->hangover_cnt >= 2 ) ) - { - *clean_speech_HO = 1; - } - - flag = 1; - } - } - - /* localVAD and vad_flag for HE-SAD - in parallel with normal localVAD and vad_flag */ - *localVAD_HE_SAD = 0; - if ( snr_sum_HE_SAD > thr1 && ( flag_he1 == 1 ) ) /* Speech present */ - { - *localVAD_HE_SAD = 1; - } - } - - /*---------------------------------------------------------------------* - * NB input - * SNR threshold computing - * Hangover control & final VAD decision - *---------------------------------------------------------------------*/ - - else /* NB input */ - { - /* Add localVAD_HE_SAD also for NB operation for use with speech music classifier */ - *localVAD_HE_SAD = 0; - if ( snr_sum_HE_SAD > thr1 ) - { - *localVAD_HE_SAD = 1; - } - - st->localVAD = 0; /* init needed in NB, otherwise it can be undefined */ - if ( snr_sum > thr1 ) /* Speech present */ - { - hVAD->nb_active_frames++; /* Counter of consecutive active speech frames */ - if ( hVAD->nb_active_frames >= ACTIVE_FRAMES ) - { - hVAD->nb_active_frames = ACTIVE_FRAMES; - hVAD->hangover_cnt = 0; /* Reset the counter of hangover frames after at least "active_frames" speech frames */ - } - - st->localVAD = 1; - } - else - { - hVAD->nb_active_frames = 0; /* Reset the counter of speech frames necessary to start hangover algorithm */ - } - - if ( hVAD->hangover_cnt < HANGOVER_LONG_NB ) - { - hVAD->hangover_cnt++; - if ( lp_snr < 19.0f ) /* very low SNR */ - { - thr1 -= 5.2f; - } - else if ( lp_snr < 35.0f ) /* low SNR */ - { - thr1 -= 2.0f; - } - } - - if ( st->Opt_DTX_ON ) - { - if ( lp_snr < th_clean ) - { - thr2 = thr1 - 1.10f; - } - else - { - thr2 = thr1 - 1.5f; - } - } - else - { - if ( lp_snr < th_clean ) - { - thr2 = thr1 - 1.3f; - } - else - { - thr2 = thr1 - 1.5f; - } - } - - flag = 0; - if ( snr_sum > thr1 ) /* Speech present */ - { - flag = 1; - } - - if ( ( snr_sum < thr1 ) && ( snr_sum > thr2 ) ) /* Speech present */ - { - flag = 1; - st->localVAD = 0; - - if ( st->element_mode == EVS_MONO ) - { - *NB_speech_HO = 1; - } - } - - /* Need to handle the case when switching from WB -> NB */ - } - - if ( st->input_bwidth != NB ) - { - *flag_noisy_speech_snr = ( lp_snr < TH16_2_NFLAG ); /*original threshold: 35dB*/ - } - else - { - *flag_noisy_speech_snr = ( lp_snr < TH8_1_NFLAG ); /*original threshold: 20dB, not yet tested!*/ - } - - /* SC-VBR */ - if ( st->hSC_VBR != NULL ) - { - st->hSC_VBR->vadsnr = snr_sum; - st->hSC_VBR->vadnoise = thr1; - } - - /* Updates */ - hVAD->prim_act_quick = 0.2f * ( st->localVAD ) + ( 1.0f - 0.2f ) * hVAD->prim_act_quick; - hVAD->prim_act_slow = 0.01f * ( st->localVAD ) + ( 1.0f - 0.01f ) * hVAD->prim_act_slow; - if ( hVAD->prim_act_quick <= hVAD->prim_act_slow ) - { - hVAD->prim_act = 0.1f * hVAD->prim_act_quick + ( 1.0f - 0.1f ) * hVAD->prim_act; - } - else - { - hVAD->prim_act = 0.1f * hVAD->prim_act_slow + ( 1.0f - 0.1f ) * hVAD->prim_act; - } - - hVAD->prim_act_quick_he = 0.2f * *localVAD_HE_SAD + ( 1.0f - 0.2f ) * hVAD->prim_act_quick_he; - hVAD->prim_act_slow_he = 0.01f * *localVAD_HE_SAD + ( 1.0f - 0.01f ) * hVAD->prim_act_slow_he; - - if ( hVAD->prim_act_quick_he <= hVAD->prim_act_slow_he ) - { - hVAD->prim_act_he = 0.1f * hVAD->prim_act_quick_he + ( 1.0f - 0.1f ) * hVAD->prim_act_he; - } - else - { - hVAD->prim_act_he = 0.1f * hVAD->prim_act_slow_he + ( 1.0f - 0.1f ) * hVAD->prim_act_he; - } - - - if ( ( hVAD->vad_flag_reg_H & (int32_t) 0x40000L ) != 0 ) /* 0x4000L = 0x01L << 18 */ - { - hVAD->vad_flag_cnt_50 = hVAD->vad_flag_cnt_50 - 1; - } - - hVAD->vad_flag_reg_H = ( hVAD->vad_flag_reg_H & (int32_t) 0x3fffffffL ) << 1; - - if ( ( hVAD->vad_flag_reg_L & (int32_t) 0x40000000L ) != 0 ) - { - hVAD->vad_flag_reg_H = hVAD->vad_flag_reg_H | 0x01L; - } - - hVAD->vad_flag_reg_L = ( hVAD->vad_flag_reg_L & (int32_t) 0x3fffffffL ) << 1; - - if ( flag ) /* should not include the extra DTX hangover */ - { - hVAD->vad_flag_reg_L = hVAD->vad_flag_reg_L | 0x01L; - hVAD->vad_flag_cnt_50 = hVAD->vad_flag_cnt_50 + 1; - } - - if ( ( hVAD->vad_prim_reg & (int32_t) 0x8000L ) != 0 ) /* 0x8000L = 1L << 15 */ - { - hVAD->vad_prim_cnt_16 = hVAD->vad_prim_cnt_16 - 1; - } - - hVAD->vad_prim_reg = ( hVAD->vad_prim_reg & (int32_t) 0x3fffffffL ) << 1; - - if ( st->localVAD ) - { - hVAD->vad_prim_reg = hVAD->vad_prim_reg | 0x01L; - hVAD->vad_prim_cnt_16 = hVAD->vad_prim_cnt_16 + 1; - } - - return flag; -} -#endif diff --git a/lib_enc/vad_fx.c b/lib_enc/vad_fx.c index ff846dc0c..21bf16087 100644 --- a/lib_enc/vad_fx.c +++ b/lib_enc/vad_fx.c @@ -434,7 +434,6 @@ Word16 dtx_hangover_addition_fx( return flag_dtx; } -#ifdef IVAS_FLOAT_FIXED Word16 ivas_dtx_hangover_addition_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ const Word16 vad_flag, /* i Q0 */ @@ -635,7 +634,6 @@ Word16 ivas_dtx_hangover_addition_fx( return flag_dtx; } -#endif /*-----------------------------------------------------------------* * wb_vad() * diff --git a/lib_enc/vad_param_updt.c b/lib_enc/vad_param_updt.c index 9a472c1be..e82b4595f 100644 --- a/lib_enc/vad_param_updt.c +++ b/lib_enc/vad_param_updt.c @@ -46,129 +46,3 @@ * * Update parameters used by the VAD or DTX *--------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void vad_param_updt( - Encoder_State *st, /* i/o: encoder state structure */ - const float corr_shift, /* i : correlation shift */ - const float corr_shiftR, /* i : correlation shift */ - const float A[], /* i : A(z) unquantized for the 4 subframes */ - const int16_t old_pitch1, /* i : previous frame OL pitch[1] */ - FRONT_VAD_ENC_HANDLE hFrontVad[], /* i/o: front-VAD handles */ - const int16_t n_channels /* i : number of channels */ -) -{ - float refl[M + 1]; - int16_t tmp_active_flag; - VAD_HANDLE hVAD; - int16_t i; - int16_t ini_frame; - float corr_shift_temp[2]; - - corr_shift_temp[0] = corr_shift; - corr_shift_temp[1] = corr_shiftR; - - if ( hFrontVad != NULL ) - { - hVAD = hFrontVad[0]->hVAD; - ini_frame = hFrontVad[0]->ini_frame; - } - else - { - hVAD = st->hVAD; - ini_frame = st->ini_frame; - } - - for ( i = 0; i < n_channels; i++ ) - { - if ( i == 1 ) - { - hVAD = hFrontVad[1]->hVAD; - } - - if ( !st->Opt_AMR_WB ) - { - /* fix explanation: after function dtx_fx, the "vad_flag" - parameter can not be used for SID scheduling purposes any - longer as dtx_fx can schedules active frames even if the - initial analyzed vad_flag is 0 ) in the worst case without - the fix an active frame could be classified as SID frame, - quite/very unlikley though - */ - tmp_active_flag = 0; - - if ( ( st->core_brate != SID_2k40 ) && ( st->core_brate != 0 ) ) /* Note, core_brate_fx can be -1 */ - { - tmp_active_flag = 1; /* requires active coding according to dtx_fx logic */ - } - - if ( st->Opt_DTX_ON != 0 && tmp_active_flag == 0 && ini_frame > 3 ) - - { - /* update the counter of consecutive inactive frames in DTX */ - hVAD->consec_inactive++; - if ( hVAD->consec_inactive > 5 ) - { - hVAD->consec_inactive = 5; - } - - if ( hVAD->consec_inactive == 5 ) - { - /* compute spectral tilt parameter */ - a2rc( &A[1], refl, M ); - - if ( hVAD->spectral_tilt_reset == 1 ) - { - hVAD->spectral_tilt_reset = 0; - hVAD->running_avg = refl[0]; - hVAD->ra_deltasum = 0; - } - - hVAD->ra_deltasum += ( 0.80f * hVAD->running_avg + 0.20f * refl[0] ) - hVAD->running_avg; - hVAD->running_avg = 0.80f * hVAD->running_avg + 0.20f * refl[0]; - - if ( fabs( hVAD->ra_deltasum ) > 0.2f ) - { - hVAD->spectral_tilt_reset = 1; - hVAD->running_avg = 0; - hVAD->ra_deltasum = 0; - hVAD->trigger_SID = 1; - } - } - } - else - { - hVAD->trigger_SID = 0; - hVAD->consec_inactive = 0; - } - - if ( hVAD->trigger_SID == 1 ) - { - if ( st->hDtxEnc->cng_cnt >= 8 ) - { - /* Declare SID frame due to spectral tilt changes */ - st->hDtxEnc->cnt_SID = 1; - st->core_brate = SID_2k40; - hVAD->trigger_SID = 0; - } - else if ( st->core_brate == SID_2k40 ) - { - /* SID fame has already been declared before */ - hVAD->trigger_SID = 0; - } - } - } - - if ( ( st->voicing[0] + st->voicing[1] + st->voicing[2] ) / 3 + corr_shift_temp[i] > 0.65 && - (int16_t) ( abs( st->pitch[0] - old_pitch1 ) + abs( st->pitch[1] - st->pitch[0] ) + abs( st->pitch[2] - st->pitch[1] ) ) / 3 < 14 ) - { - ( hVAD->voiced_burst )++; - } - else - { - hVAD->voiced_burst = 0; - } - } - - return; -} -#endif diff --git a/lib_enc/vad_proc.c b/lib_enc/vad_proc.c index 630b6b58c..661cc4b7b 100644 --- a/lib_enc/vad_proc.c +++ b/lib_enc/vad_proc.c @@ -40,254 +40,3 @@ #include "prot.h" #include "rom_enc.h" #include "wmc_auto.h" - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * vad_init() - * - * - *-------------------------------------------------------------------*/ - -int16_t vad_init( - VAD_CLDFB_HANDLE hVAD_CLDFB /* i/o: CLDFB VAD state */ -) -{ - float sSFM[SFM_NUM] = { 0.88f, 0.92f, 0.92f }; - int16_t i; - - if ( hVAD_CLDFB == NULL ) - { - return -1; - } - - hVAD_CLDFB->frameloop = 0; - hVAD_CLDFB->lt_snr_org = 1.0f; - hVAD_CLDFB->lf_snr_smooth = 5.0f; - hVAD_CLDFB->l_silence_snr = 0.5f; - hVAD_CLDFB->l_speech_snr = 5.0f; - hVAD_CLDFB->l_silence_snr_count = 1; - hVAD_CLDFB->l_speech_snr_count = 1; - hVAD_CLDFB->fg_energy = 16 * ( 3.0518e-5f ); - hVAD_CLDFB->bg_energy = 16 * ( 4.6566e-10f ); - hVAD_CLDFB->fg_energy_count = 16; - hVAD_CLDFB->bg_energy_count = 16; - hVAD_CLDFB->tonality_rate3 = 0.46f; - hVAD_CLDFB->music_background_rate = 0.46f; - hVAD_CLDFB->lt_noise_sp_center_diff_sum = 0.4f; - hVAD_CLDFB->lt_noise_sp_center_diff_counter = 4; - hVAD_CLDFB->lt_noise_sp_center0 = 1.8f; - hVAD_CLDFB->lt_noise_sp_center3 = 2.0f; - hVAD_CLDFB->lt_bg_highf_eng = 2.0f; - hVAD_CLDFB->t_bg_energy = 0.01f; - hVAD_CLDFB->t_bg_energy_sum = 0.01f; - hVAD_CLDFB->tbg_energy_count = 1; - hVAD_CLDFB->bg_update_count = 0; - hVAD_CLDFB->frame_energy_smooth = 1.0f; - hVAD_CLDFB->fg_energy_est_start = 0; - hVAD_CLDFB->speech_flag = 0; - hVAD_CLDFB->continuous_noise_num = 0; - hVAD_CLDFB->continuous_speech_num = 0; - hVAD_CLDFB->continuous_speech_num2 = 0; - hVAD_CLDFB->update_num_with_snr = 0; /* the number of the background update with SNR*/ - hVAD_CLDFB->update_count = 0; - hVAD_CLDFB->warm_hang_num = 0; - - for ( i = 0; i < PRE_SNR_NUM; i++ ) - { - hVAD_CLDFB->pre_snr[i] = 0.0f; - } - - for ( i = 0; i < POWER_NUM; i++ ) - { - hVAD_CLDFB->frames_power[i] = 0; - } - - for ( i = 0; i < SPEC_AMP_NUM; i++ ) - { - hVAD_CLDFB->smooth_spec_amp[i] = 0; - } - - for ( i = 0; i < SFM_NUM; i++ ) - { - hVAD_CLDFB->sfm[i] = sSFM[i]; - } - - for ( i = 0; i < SP_CENTER_NUM; i++ ) - { - hVAD_CLDFB->sp_center[i] = 1.2f; - } - - for ( i = 0; i < STABLE_NUM; i++ ) - { - hVAD_CLDFB->ltd_stable_rate[i] = 0.07f; - } - - for ( i = 0; i < BG_ENG_NUM; i++ ) - { - hVAD_CLDFB->sb_bg_energy[i] = 0.01f; - hVAD_CLDFB->frame_sb_energy[i] = 0.001f; - } - - for ( i = 0; i < TONA_NUM; i++ ) - { - hVAD_CLDFB->f_tonality_rate[i] = 0.48f; - } - - for ( i = 0; i < PRE_SPEC_DIF_NUM; i++ ) - { - hVAD_CLDFB->pre_spec_low_dif[i] = 1.0f; - } - - return 0; -} - - -/*-------------------------------------------------------------------* - * UpdateState() - * - * - *-------------------------------------------------------------------*/ - -static void UpdateState( - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - const float frame_energy, /* i : current frame energy */ - const float high_eng, /* i : current frame high frequency energy */ - const int16_t update_flag, /* i : current frame update flag */ - const int16_t music_backgound_f, /* i : background music flag */ - const int16_t vad_flag, /* i : VAD flag */ - const float snr ) -{ - hVAD_CLDFB->frame_energy_smooth = hVAD_CLDFB->frame_energy_smooth * 0.95f + frame_energy * 0.05f; - - if ( vad_flag == 0 ) - { - hVAD_CLDFB->lt_bg_highf_eng = hVAD_CLDFB->lt_bg_highf_eng * 0.95f + high_eng * 0.05f; - } - - if ( hVAD_CLDFB->frameloop < 1000 ) - { - hVAD_CLDFB->frameloop++; - } - - background_update( hVAD_CLDFB, frame_energy, update_flag, music_backgound_f, snr ); - - if ( vad_flag == 0 ) - { - hVAD_CLDFB->continuous_speech_num2 = 0; - - if ( hVAD_CLDFB->continuous_noise_num > 10 ) - { - hVAD_CLDFB->continuous_speech_num = 0; - } - else if ( hVAD_CLDFB->continuous_speech_num > 9 ) - { - hVAD_CLDFB->continuous_speech_num = 9; - } - - hVAD_CLDFB->continuous_noise_num++; - - if ( hVAD_CLDFB->continuous_noise_num > 2048 ) - { - hVAD_CLDFB->continuous_noise_num = 2048; - } - } - else - { - hVAD_CLDFB->continuous_noise_num = 0; - hVAD_CLDFB->continuous_speech_num2++; - hVAD_CLDFB->continuous_speech_num++; - - if ( hVAD_CLDFB->continuous_speech_num > 2048 ) - { - hVAD_CLDFB->continuous_speech_num = 2048; - } - - if ( hVAD_CLDFB->continuous_speech_num2 > 2048 ) - { - hVAD_CLDFB->continuous_speech_num2 = 2048; - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * vad_proc() - * - * - *-------------------------------------------------------------------*/ - -int16_t vad_proc( - float realValues[16][60], /* CLDFB real values */ - float imagValues[16][60], /* CLDFB imag values */ - float *sb_power, /* Energy of CLDFB data */ - const int16_t numBands, /* number of input bands */ - VAD_CLDFB_HANDLE hVAD_CLDFB, /* i/o: CLDFB VAD state */ - int16_t *cldfb_addition, - const int16_t vada_flag /* i : VAD flag */ -) -{ - float frame_energy, frame_energy2; - float spec_amp[8 * 10]; /* 120 */ - float snr, tsnr; - int16_t update_flag; - int16_t vad_flag; - int16_t music_backgound_f = 0; - float HB_Power = 0; - float snr_flux; - float lt_snr; - float lt_snr_org; - float lf_snr; - int16_t bw_index; - - if ( numBands < 20 ) - { - bw_index = 1; - } - else if ( numBands < 40 ) - { - bw_index = 2; - } - else - { - bw_index = 3; - } - - hVAD_CLDFB->bw_index = bw_index; - - assert( numBands >= 10 ); - - /* new optimized structure */ - est_energy( sb_power, hVAD_CLDFB->frame_sb_energy, &frame_energy, &frame_energy2, &HB_Power, bw_index ); - - subband_FFT( realValues, imagValues, spec_amp ); - - spec_center( sb_power, hVAD_CLDFB->sp_center, bw_index ); - - ltd_stable( hVAD_CLDFB->frames_power, hVAD_CLDFB->ltd_stable_rate, frame_energy, hVAD_CLDFB->frameloop ); - - spec_flatness( spec_amp, hVAD_CLDFB->smooth_spec_amp, hVAD_CLDFB->sfm ); - - frame_spec_dif_cor_rate( spec_amp, hVAD_CLDFB->pre_spec_low_dif, hVAD_CLDFB->f_tonality_rate ); - - bg_music_decision( hVAD_CLDFB, &music_backgound_f, frame_energy ); - - SNR_calc( hVAD_CLDFB->frame_sb_energy, hVAD_CLDFB->sb_bg_energy, hVAD_CLDFB->t_bg_energy, &snr, &tsnr, frame_energy2, bw_index ); - - calc_snr_flux( tsnr, hVAD_CLDFB->pre_snr, &snr_flux ); - - calc_lt_snr( <_snr_org, <_snr, hVAD_CLDFB->fg_energy, hVAD_CLDFB->fg_energy_count, hVAD_CLDFB->bg_energy, hVAD_CLDFB->bg_energy_count, bw_index, hVAD_CLDFB->lt_noise_sp_center0 ); - - calc_lf_snr( &hVAD_CLDFB->lf_snr_smooth, &lf_snr, hVAD_CLDFB->l_speech_snr, hVAD_CLDFB->l_speech_snr_count, hVAD_CLDFB->l_silence_snr, hVAD_CLDFB->l_silence_snr_count, hVAD_CLDFB->fg_energy_count, hVAD_CLDFB->bg_energy_count, bw_index ); - - vad_flag = comvad_decision( hVAD_CLDFB, snr, tsnr, snr_flux, lt_snr, lt_snr_org, lf_snr, frame_energy2, music_backgound_f, cldfb_addition, vada_flag ); - - update_flag = update_decision( hVAD_CLDFB, snr, tsnr, frame_energy, HB_Power, hVAD_CLDFB->vad_flag_for_bk_update, music_backgound_f ); - - UpdateState( hVAD_CLDFB, frame_energy2, HB_Power, update_flag, music_backgound_f, hVAD_CLDFB->vad_flag_for_bk_update, snr ); - - return vad_flag; -} -#endif diff --git a/lib_enc/vbr_average_rate.c b/lib_enc/vbr_average_rate.c index 0f758041a..ee4d0477a 100644 --- a/lib_enc/vbr_average_rate.c +++ b/lib_enc/vbr_average_rate.c @@ -52,149 +52,3 @@ * * SC-VBR update average data rate *------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void update_average_rate( - SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ - const int32_t core_brate /* i : core bitrate */ -) -{ - float avratetarg; /* target rate for next RATEWIN active frames */ - float target; /* target set by VBR_ADR_MAX_TARGET*RATEWIN*10 */ - - if ( hSC_VBR->numactive == RATEWIN ) /* goes into rate control only the numactive ==RATEWIN. So rate control is triggered after each RATEWIN avtive frames */ - { - /* after 1000 blocks of RATEWIN frames, we change the way we control the average rate by using - st->global_avr_rate=0.99*st->global_avr_rate+0.01*st->sum_of_rates. This will avoid - veriables growing indefinitely while providing a good long term average rate */ - - if ( hSC_VBR->global_frame_cnt < 1000 ) - { - hSC_VBR->global_frame_cnt++; - hSC_VBR->global_avr_rate = ( hSC_VBR->global_avr_rate * ( hSC_VBR->global_frame_cnt - 1 ) + hSC_VBR->sum_of_rates ) / hSC_VBR->global_frame_cnt; - } - else - { - hSC_VBR->global_avr_rate = 0.01f * hSC_VBR->sum_of_rates + 0.99f * hSC_VBR->global_avr_rate; - } - - if ( hSC_VBR->sum_of_rates == 0 ) - { - hSC_VBR->sum_of_rates = (float) ( RATEWIN * VBR_ADR_MAX_TARGET * 10 ); - } - - target = VBR_ADR_MAX_TARGET * 10 * RATEWIN; - - if ( target < hSC_VBR->global_avr_rate ) /* Action is taken to reduce the averge rate. Only initiated if the global rate > target rate */ - { - /* Check the VAD SNR values to table the noisey/not noisey decision */ - - if ( hSC_VBR->SNR_THLD < 67 ) /* Currently in QFF mode. The bumpup thresholds are slightly relaxed for noisy speech. */ - { - /* Increase the threshold so the the bumpup procedure is done using the noisy thresholds. - Use 3.5 steps to quickly ramp up the rate control to reduce the settling time */ - hSC_VBR->SNR_THLD += 3.5f; - } - else if ( hSC_VBR->mode_QQF == 0 && hSC_VBR->sum_of_rates > target ) /* Now SNR_THLD is in the max allowed. Sill the global average is higher and - last RATEWIN frames have a higher agerage than the target rate. Now slightly - more aggresive rate control is used by changing the mode to QQF. Still the - same strict bumpups (more bumpups,higher rate) are used. */ - { - /* Kick in QQF mode */ - hSC_VBR->mode_QQF = 1; - } - else if ( hSC_VBR->sum_of_rates > target ) /* Actions (1) and (2) are not sufficient to control the rate. Still the last RATEWIN active - frames have a higher average rate than the target rate. More aggresive rate control is - needed. At this point the rate_control flag is set. This will enable the more relaxed - bump up thresholds (less bump ups->reduced rate)*/ - { - /* Relaxed bump ups are used */ - hSC_VBR->rate_control = 1; - - /* This will be triggered only if the gloabl average rate is considerablly higher than the target rate. - Keep a higher threshold to avoid short term rate increases over the target rate. */ - if ( hSC_VBR->global_avr_rate > ( target + 420.0f ) ) /* Last resort rate control. This is a safer rate control mechanism by increasing NELPS */ - { - hSC_VBR->Last_Resort = 1; /* compute based on a larger window as the last resort */ - } - else - { - hSC_VBR->Last_Resort = 0; - } - } - else if ( hSC_VBR->sum_of_rates < target ) /* If the average rate of last RATEWIN frames is controlled by above actions, disable the most - aggresive rate control mechanisms. Still keep QQF mode as the global rate is not under - the target rate*/ - { - hSC_VBR->Last_Resort = 0; - hSC_VBR->mode_QQF = 1; - hSC_VBR->rate_control = 0; - } - } - else - { - /* floding back to lesser and leser aggresive rate control mechanisms gradually if global rate is under control */ - hSC_VBR->Last_Resort = 0; - - if ( hSC_VBR->rate_control == 1 ) - { - hSC_VBR->rate_control = 0; - } - else if ( hSC_VBR->mode_QQF == 1 ) /* now rate control is not active and still the global rate is below the target. so go to QFF mode */ - { - hSC_VBR->mode_QQF = 0; - } - else - { - if ( hSC_VBR->SNR_THLD >= 60 ) - { - hSC_VBR->SNR_THLD -= 1.5f; - } - else - { - hSC_VBR->SNR_THLD = 60.0f; - } - } - } - - if ( hSC_VBR->global_avr_rate < target - 120 ) /* In QFF mode and global rate is less than target rate-0.2kbps. We can send some Q frames - to F frames to improve the quality */ - { - /* kick in bouncing back from Q to F */ - hSC_VBR->Q_to_F = 1; - - /* average rate for next 600ms = global_rate * 2 - rate of the past RATEWIN active frames */ - avratetarg = (float) ( ( RATEWIN * 10 ) * 2 * VBR_ADR_MAX_TARGET - hSC_VBR->global_avr_rate ); - - /* compute the percentage of frames that needed to be sent to F. st->pattern_m is computed as % val * 1000. eg. if % is 10%, then - st->pattern_m=100 . Later this value is used in voiced.enc to bump up 10% of PPP frames to F frames. */ - hSC_VBR->pattern_m = (int16_t) ( 1000 * ( avratetarg - 6.15f * RATEWIN * 10 ) / ( 10 * RATEWIN * 0.1f ) ); - - if ( hSC_VBR->pattern_m < 0 ) - { - hSC_VBR->pattern_m = 0; /* no bump up will ever happen */ - } - - if ( hSC_VBR->pattern_m > 1000 ) - { - hSC_VBR->pattern_m = 1000; /* 10% of bump ups */ - } - - hSC_VBR->patterncount = 0; - } - else - { - hSC_VBR->Q_to_F = 0; - } - - hSC_VBR->sum_of_rates = 0; - hSC_VBR->numactive = 0; - } - - hSC_VBR->numactive++; - - /* sum the total number of bits (in kbytes) * 10 here */ - hSC_VBR->sum_of_rates += ( core_brate / 1000.0f ) * 10; - - return; -} -#endif diff --git a/lib_enc/vlpc_1st_cod.c b/lib_enc/vlpc_1st_cod.c index 7023ee519..0fe8682da 100644 --- a/lib_enc/vlpc_1st_cod.c +++ b/lib_enc/vlpc_1st_cod.c @@ -40,107 +40,3 @@ #include "prot.h" #include "rom_com.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------* - * lsf_weight() - * - * outputs only the weightings, doesn't do anything with the lsfq - *------------------------------------------------------------------*/ - -static void lsf_weight( - const float *lsfq, - float *w, - const int32_t sr_core ) -{ - int16_t i; - float inv_di0, inv_di1; - float scale = ( (float) sr_core ) / INT_FS_12k8; - float freq_max = sr_core / 2.f; - - - /* weighting function */ - inv_di0 = scale / lsfq[0]; - for ( i = 1; i < ( M - 2 ); i += 2 ) - { - inv_di1 = scale / ( lsfq[i] - lsfq[i - 1] ); - w[i - 1] = inv_di0 + inv_di1; - - inv_di0 = scale / ( lsfq[i + 1] - lsfq[i] ); - w[i] = inv_di1 + inv_di0; - } - inv_di1 = scale / ( lsfq[i] - lsfq[i - 1] ); - w[i - 1] = inv_di0 + inv_di1; - - inv_di0 = scale / ( freq_max - lsfq[i] ); - w[i] = inv_di1 + inv_di0; - - return; -} - - -/*------------------------------------------------------------------* - * vlpc_1st_cod() - * - * - *------------------------------------------------------------------*/ -/*! r: codebook index */ -int16_t vlpc_1st_cod( - const float *lsf, /* i : vector to quantize */ - float *lsfq, /* i/o: i:prediction o:quantized lsf */ - const int32_t sr_core, /* i : internal sampling rate */ - float *wout /* o : lsf weights */ -) -{ - int16_t i, j, index; - float w[M], x[M]; - float dist_min, dist, temp; - const float *p_dico; - float scale = ( (float) sr_core ) / INT_FS_12k8; - float scaleinv = 1.f / scale; - - /* weighting */ - lsf_weight( lsf, w, sr_core ); - - mvr2r( w, wout, M ); - - /* remove lsf prediction/means */ - - for ( i = 0; i < M; i++ ) - { - x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; - } - - dist_min = 1.0e30f; - p_dico = dico_lsf_abs_8b_flt; - index = 0; - - for ( i = 0; i < 256; i++ ) - { - dist = 0.0; - - for ( j = 0; j < M; j++ ) - { - temp = x[j] - *p_dico++; - dist += w[j] * temp * temp; - } - - if ( dist < dist_min ) - { - dist_min = dist; - index = i; - } - } - - /* quantized vector */ - p_dico = &dico_lsf_abs_8b_flt[index * M]; - - for ( j = 0; j < M; j++ ) - { - lsfq[j] += scale * *p_dico++; /* += cause it's differential */ - } - - - return index; -} -#endif diff --git a/lib_enc/vlpc_2st_cod.c b/lib_enc/vlpc_2st_cod.c index f27fb6831..e7a8ca967 100644 --- a/lib_enc/vlpc_2st_cod.c +++ b/lib_enc/vlpc_2st_cod.c @@ -39,113 +39,3 @@ #include "cnst.h" #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*------------------------------------------------------------------* - * vlpc_2st_cod() - * - * - *------------------------------------------------------------------*/ - -/*! r: number of allocated bits */ -int16_t vlpc_2st_cod( - const float *lsf, /* i : normalized vector to quantize */ - float *lsfq, /* i/o: i:1st stage o:1st+2nd stage */ - int16_t *indx, /* o : index[] (4 bits per words) */ - const int16_t mode, /* i : 0=abs, >0=rel */ - const int32_t sr_core /* i : internal sampling rate */ -) -{ - int16_t i, nbits; - float w[M], x[M], tmp; - int16_t nq, xq[M]; - float scale = ( (float) sr_core ) / INT_FS_12k8; - float scaleinv = 1.f / scale; - - /* 0 bit with true weighting: save 0.5 bit */ - - lsf_weight_2st_flt( lsf, w, 1, sr_core ); - - for ( i = 0; i < M; i++ ) - { - x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; - } - - for ( i = 0; i < M; i++ ) - { - x[i] /= w[i]; - } - - tmp = 0.0f; - - for ( i = 0; i < M; i++ ) - { - tmp += x[i] * x[i]; - } - - if ( tmp < 8.0f ) - { - indx[0] = 0; - indx[1] = 0; - - return ( 10 ); /* 2*(2+3) */ - } - - /* weighting from the 1st stage */ - lsf_weight_2st_flt( lsfq, w, mode, sr_core ); - - /* find lsf residual */ - - for ( i = 0; i < M; i++ ) - { - x[i] = ( lsf[i] - lsfq[i] ) * scaleinv; - } - - /* scale the residual */ - - for ( i = 0; i < M; i++ ) - { - x[i] /= w[i]; - } - - /* quantize */ - AVQ_cod_lpc( x, xq, indx, 2 ); - - /* quantized lsf */ - - for ( i = 0; i < M; i++ ) - { - lsfq[i] += scale * ( w[i] * (float) xq[i] ); - } - - /* total number of bits using entropic code to index the quantizer number */ - nbits = 0; - - for ( i = 0; i < 2; i++ ) - { - nq = indx[i]; - nbits += ( 2 + ( nq * 4 ) ); /* 2 bits to specify Q2,Q3,Q4,ext */ - - if ( nq > 6 ) - { - nbits += nq - 3; /* unary code (Q7=1110, ...) */ - } - else if ( nq > 4 ) - { - nbits += nq - 4; /* Q5=0, Q6=10 */ - } - else if ( nq == 0 ) - { - nbits += 3; /* Q0=110 */ - } - } - - /* reorder */ - v_sort_float( lsfq, 0, M - 1 ); - reorder_lsf( lsfq, LSF_GAP, M, sr_core ); - - return ( nbits ); -} - -#endif diff --git a/lib_enc/voiced_enc.c b/lib_enc/voiced_enc.c index ab1a9f8b8..5bfe6bfc0 100644 --- a/lib_enc/voiced_enc.c +++ b/lib_enc/voiced_enc.c @@ -41,1145 +41,4 @@ #include "cnst.h" #include "rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * Local function prototypes - *--------------------------------------------------------------------*/ - -static void SynthesisFilter( float *output, float *input, float *coef, float *memory, int16_t order, int16_t length ); - - -/*-------------------------------------------------------------------* - * DTFS_alignment_extract() - * - * Alignment for the best match between the reference DTFS and the test DTFS. - *-------------------------------------------------------------------*/ - -static float DTFS_alignment_extract( - DTFS_STRUCTURE refX1_DTFS, /* i : X1 the reference DTFS to keep fixed */ - DTFS_STRUCTURE X2_DTFS, /* i : X2 the test DTFS to shift to find best match */ - float Eshift, /* i : Expected shift - coarse value */ - const float *LPC2 /* i : LPC to filter to find correlation in spch */ -) -{ - /* Eshift is w.r.t X2 */ - int16_t k; - float maxcorr, corr, Adiff, diff, tmp, tmp1, fshift, n; - float pwf = 0.7f, tmplpc[M + 1]; - DTFS_STRUCTURE X1_DTFS; - - X1_DTFS = refX1_DTFS; /* copy into local copy */ - - DTFS_adjustLag( &X1_DTFS, X2_DTFS.lag ); - - DTFS_poleFilter( &X1_DTFS, LPC2, M + 1 ); - DTFS_poleFilter( &X2_DTFS, LPC2, M + 1 ); - - for ( k = 0, tmp = 1.0; k < M + 1; k++ ) - { - tmplpc[k] = LPC2[k] * ( tmp *= pwf ); - } - DTFS_zeroFilter( &X1_DTFS, tmplpc, M + 1 ); - DTFS_zeroFilter( &X2_DTFS, tmplpc, M + 1 ); - - maxcorr = (float) -HUGE_VAL; - fshift = Eshift; - Adiff = max( 4.0f, refX1_DTFS.lag / 8 ); - diff = 1.0f; /* Non-Fractional alignment */ - - for ( n = Eshift - Adiff; n <= Eshift + Adiff; n += diff ) - { - corr = tmp = 0.0f; - /* bit-exact optimization - PI2/X2_DTFS.lag should be counted as a single divide outside WI functions and passed in as input */ - tmp1 = (float) ( PI2 * n / X2_DTFS.lag ); - - for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, tmp += tmp1 ) - - { - corr += (float) ( ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ) * cos( tmp ) ); - corr += (float) ( ( X1_DTFS.b[k] * X2_DTFS.a[k] - X1_DTFS.a[k] * X2_DTFS.b[k] ) * sin( tmp ) ); - } - - if ( corr * ( 1.0f - 0.01f * fabs( n - Eshift ) ) > maxcorr ) - { - fshift = n; - maxcorr = corr; - } - } - - return fshift; /* o : shift value to shift X2 by */ -} - - -/*-------------------------------------------------------------------* - * DTFS_getEngy_band() - * - * Get DTFS energy in the specified range from lband to hband. - *-------------------------------------------------------------------*/ - -static float DTFS_getEngy_band( - DTFS_STRUCTURE X, /* i : DTFS to compute energy of */ - float lband, /* i : low end of band of interest */ - float hband /* i : high end of band of interest */ -) -{ - int16_t k; - float en, freq, fdiff; - - fdiff = (float) INT_FS_12k8 / X.lag; - - en = 0.0f; - for ( freq = fdiff, k = 1; k <= min( ( X.lag - 1 ) >> 1, X.nH_4kHz ); k++, freq += fdiff ) - { - if ( freq < hband && freq >= lband ) - { - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } - } - en /= 2.0; - if ( lband == 0.0 ) - { - en += X.a[0] * X.a[0]; - } - if ( ( X.lag % 2 == 0 ) && ( hband == X.upper_cut_off_freq ) ) - { - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } - return en; -} - - -/*-------------------------------------------------------------------* - * DTFS_freq_corr() - * - * Calculate correlation between two DTFS. - *-------------------------------------------------------------------*/ - -/*! r: correlation */ -static double DTFS_freq_corr( - DTFS_STRUCTURE X1_DTFS, /* i : X1 DTFS */ - DTFS_STRUCTURE X2_DTFS, /* i : X2 DTFS */ - float lband, /* i : low cutoff */ - float hband /* i : high cutoff */ -) -{ - int16_t k; - double corr, fdiff, freq; - double tmp; - - if ( X1_DTFS.lag < X2_DTFS.lag ) - { - DTFS_zeroPadd( X2_DTFS.lag, &X1_DTFS ); - } - - corr = freq = 0.0; - fdiff = (float) INT_FS_12k8 / X2_DTFS.lag; - for ( k = 0; k <= min( X2_DTFS.lag >> 1, X2_DTFS.nH_4kHz ); k++, freq += fdiff ) - { - if ( freq < hband && freq >= lband ) - { - corr += ( X1_DTFS.a[k] * X2_DTFS.a[k] + X1_DTFS.b[k] * X2_DTFS.b[k] ); - } - } - - tmp = DTFS_getEngy_band( X1_DTFS, lband, hband ) * DTFS_getEngy_band( X2_DTFS, lband, hband ); - - if ( tmp == 0.0 ) - { - tmp = 0.001; - } - - return corr / sqrt( tmp ); -} - -/*-------------------------------------------------------------------* - * DTFS_peaktoaverage() - * - * Estimate peak to average ratio in the DTFS - *-------------------------------------------------------------------*/ - -static void DTFS_peaktoaverage( - DTFS_STRUCTURE X, /* i : DTFS */ - float *pos, /* o : positive peak to ave */ - float *neg /* o : negative peak to ave */ -) -{ - float tmp, time[PIT_MAX], sum = 0.0, maxPosEn = 0.0, maxNegEn = 0.0; - int16_t i; - - DTFS_fs_inv( &X, time, X.lag, 0.0 ); - - for ( i = 0; i < X.lag; i++ ) - { - tmp = SQR( time[i] ); - if ( time[i] >= 0 ) - { - if ( tmp > maxPosEn ) - { - maxPosEn = tmp; - } - } - else - { - if ( tmp > maxNegEn ) - { - maxNegEn = tmp; - } - } - sum += tmp; - } - - if ( sum == 0.0 ) - { - *pos = 0.0f; - *neg = 0.0f; - } - else - { - if ( maxPosEn == 0.0 ) - { - *pos = 0.0; - } - else - { - *pos = (float) sqrt( maxPosEn * X.lag / sum ); - } - if ( maxPosEn == 0.0 ) - { - *neg = 0.0; - } - else - { - *neg = (float) sqrt( maxNegEn * X.lag / sum ); - } - } - - return; -} - - -/*-------------------------------------------------------------------* - * ppp_extract_pitch_period() - * - * Pitch period extraction - *-------------------------------------------------------------------*/ - -static int16_t ppp_extract_pitch_period( - const float *in, /* i : input residual */ - float *out, /* o : output residual */ - const int16_t l, /* i : lag */ - int16_t *out_of_bound /* o : out of bound flag */ -) -{ - int16_t i, j, k; - int16_t spike = 0, range; - float max1 = 0.0; - const float *ptr = in + L_FRAME - l; - float en1 = 0.0, en2 = 0.0, tmp; - int16_t spike_near_edge = 0; - float pos_max, neg_max; - int16_t spike_pos = 0, spike_neg = 0; - float x; - - pos_max = (float) -HUGE_VAL; - neg_max = 0.0; - *out_of_bound = 0; - - for ( i = 0; i < l; i++ ) - { - if ( ( x = (float) fabs( ptr[i] ) ) > max1 ) - { - max1 = x; - spike = i; - } - en1 += ptr[i] * ptr[i]; - } - - if ( ptr[spike] > 0 ) - { - spike_pos = spike; - - /* search for neg spike around the pos spike */ - for ( j = spike - 10; j < spike + 10; j++ ) - { - k = ( j + l ) % l; - if ( ptr[k] < neg_max ) - { - neg_max = ptr[k]; - spike_neg = k; - } - } - } - else if ( ptr[spike] < 0 ) - { - spike_neg = spike; - - /* search for pos spike around the neg spike */ - for ( j = spike - 10; j < spike + 10; j++ ) - { - k = ( j + l ) % l; - if ( ptr[k] > pos_max ) - { - pos_max = ptr[k]; - spike_pos = k; - } - } - } - if ( ( ( l - 1 - max( spike_pos, spike_neg ) ) <= 2 ) || ( min( spike_pos, spike_neg ) <= 2 ) ) - { - *out_of_bound = 1; - return spike_near_edge; - } - range = (int16_t) anint( max( CUTFREE_REL_RANGE * l, CUTFREE_ABS_RANGE ) ); - if ( ( spike - range < 0 ) || ( spike + range >= l ) ) - { - /* need to grab from one lag before - ensure that there is no array bound read */ - if ( L_FRAME - l - l < 0 ) - { - *out_of_bound = 1; - return spike_near_edge; - } - spike_near_edge = 1; - } - if ( spike - range < 0 ) - { - for ( i = 0; i < l + ( spike - range ); i++ ) - { - out[i] = ptr[i]; - } - - /* Grab Remaining From One Lag Before */ - ptr -= l; - for ( ; i < l; i++ ) - { - out[i] = ptr[i]; - } - } - else if ( spike + range >= l ) - { - for ( i = 0; i < spike - range; i++ ) - { - out[i] = ptr[i]; - } - /* Grab Remaining From One Lag Before */ - if ( ptr - l + i >= in ) - { - for ( ptr -= l; i < l; i++ ) - { - out[i] = ptr[i]; - } - } - else - { - for ( ; i < l; i++ ) - { - out[i] = ptr[i]; - } - } - } - else - { - for ( i = 0; i < l; i++ ) - { - out[i] = ptr[i]; - } - } - - /* Energy adjustment added to eliminate artifacts at the end of voicing */ - for ( i = 0; i < l; i++ ) - { - en2 += out[i] * out[i]; - } - - if ( en1 < en2 ) - { - tmp = (float) sqrt( en1 / en2 ); - for ( i = 0; i < l; i++ ) - { - out[i] *= tmp; - } - } - - return spike_near_edge; -} - - -/*-------------------------------------------------------------------* - * DTFS_getEngy_band_wb() - * - * Get DTFS energy in the specified range from lband to hband. - * This function is different to "DTFS_getEngy_band" as this can calculate - * lband, hband \in [1,6400] where "DTFS_getEngy_band" only upperlimited to - * 4Khz. Possibility: modify ""DTFS_getEngy_band"" and get rid of this - * function. - *-------------------------------------------------------------------*/ - -static float DTFS_getEngy_band_wb( - DTFS_STRUCTURE X, /* i : DTFS to compute energy of */ - float lband, /* i : low end of band of interest */ - float hband /* i : high end of band of interest */ -) -{ - int16_t k; - float en, freq, fdiff; - - fdiff = (float) INT_FS_12k8 / X.lag; - - en = 0.0f; - for ( freq = fdiff, k = 1; k <= ( ( X.lag - 1 ) >> 1 ); k++, freq += fdiff ) - { - if ( freq < hband && freq >= lband ) - { - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } - } - en /= 2.0; - if ( lband == 0.0 ) - { - en += X.a[0] * X.a[0]; - } - if ( ( X.lag % 2 == 0 ) && ( hband == X.upper_cut_off_freq ) ) - { - en += X.a[k] * X.a[k] + X.b[k] * X.b[k]; - } - return en; -} - - -/*-------------------------------------------------------------------* - * ppp_voiced_encoder() - * - * - *--------------------------------------------------------------------*/ - -ivas_error ppp_voiced_encoder( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - SC_VBR_ENC_HANDLE hSC_VBR, /* i/o: SC-VBR state structure */ - const int16_t bwidth, /* i : audio bandwidth */ - const int16_t last_coder_type_raw, /* i : raw last_coder_type */ - const float old_pitch_buf[], /* i : buffer of old subframe pitch values */ - float *in, /* i : residual signal */ - float *out, /* o : Quantized residual signal */ - const int16_t delay, /* i : open loop pitch */ - float *lpc1, /* i : prev frame de-emphasized LPC */ - float *lpc2, /* i : current frame de-emphasized LPC */ - float *exc, /* i : previous frame quantized excitation */ - float *pitch /* o : floating pitch values for each subframe */ -) -{ - int16_t i; - int16_t spike_near_edge = 0; - int16_t flag; - int16_t delta_lag_E = 0, PPP_MODE_E, Q_delta_lag = 0; - int16_t out_of_bound = 0; - float tmp, tmptmp, tmptmp1, res_enratio = 0, sp_enratio = 0; - double tmp2; - int16_t pl, l; - float interp_delay[3], temp_pl, temp_l; - int16_t upper_cut_off_freq_of_interest = 0, upper_cut_off_freq = 0; - float pos_nq, neg_nq, pos_q, neg_q; - float impzi[160]; - float impzo[160]; - float mem[10]; - float energy_impz = 0.0f; - float pos_nq0, neg_nq0, tmpres; - float sp_hb_enratio; - float low_band_en; - - DTFS_STRUCTURE *CURRP_NQ; - DTFS_STRUCTURE *TMPDTFS; - DTFS_STRUCTURE *TMPDTFS2; - DTFS_STRUCTURE *TMPDTFS3; - DTFS_STRUCTURE *CURRP_Q_E; - DTFS_STRUCTURE *dtfs_temp; - - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( error = DTFS_new( &CURRP_NQ ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &TMPDTFS ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &TMPDTFS2 ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &TMPDTFS3 ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &CURRP_Q_E ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - if ( ( error = DTFS_new( &dtfs_temp ) ) != IVAS_ERR_OK ) - { - IVAS_ERROR( error, "Error creating DTFS structure" ); - } - - if ( bwidth == WB ) - { - upper_cut_off_freq_of_interest = 4000; - upper_cut_off_freq = 6400; - } - else if ( bwidth == NB ) - { - upper_cut_off_freq_of_interest = 3300; - upper_cut_off_freq = 4000; - } - - /* Initialization */ - if ( hSC_VBR->firstTime_voicedenc ) - { - hSC_VBR->firstTime_voicedenc = 0; - hSC_VBR->dtfs_enc_lag = 0; - hSC_VBR->dtfs_enc_nH = 0; - hSC_VBR->dtfs_enc_nH_4kHz = 0; - hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest = 3300.0; - hSC_VBR->dtfs_enc_upper_cut_off_freq = 4000.0; - - set_f( hSC_VBR->dtfs_enc_a, 0, MAXLAG_WI ); - set_f( hSC_VBR->dtfs_enc_b, 0, MAXLAG_WI ); - } - - /* Figure out the PPP_MODE */ - if ( hSC_VBR->last_ppp_mode == 1 && !hSC_VBR->mode_QQF ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - - /* Use the aggresive bumpups if there are two consecutive Q frames */ - /* Aggresive bump upsare only used in the second Q frame */ - if ( hSC_VBR->last_ppp_mode == 1 ) - { - hSC_VBR->rate_control = 0; - } - - PPP_MODE_E = 'Q'; - pl = min( MAX_LAG_PIT, (int16_t) rint_new( old_pitch_buf[( 2 * NB_SUBFR ) - 1] ) ); - l = min( MAX_LAG_PIT, (int16_t) rint_new( delay ) ); - - /* Bump up if the lag is out_fx of range */ - if ( ( l - pl ) > 13 || ( l - pl ) < -11 || ( l < 19 ) || ( pl < 19 ) ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - - if ( hSC_VBR->last_ppp_mode != 1 ) - { - /* Obtain DTFS of last pl values of past excitation */ - DTFS_to_fs( exc - pl, pl, dtfs_temp, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); - } - - if ( last_coder_type_raw == UNVOICED ) - { - pl = l; /* if prev frame was sil/uv */ - } - - /* Use the out array as a temp storage for currp */ - spike_near_edge = ppp_extract_pitch_period( in, out, l, &out_of_bound ); - - if ( out_of_bound == 1 ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - - /* Get DTFS of current prototype */ - DTFS_to_fs( out, l, CURRP_NQ, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); - - /* Ensure the extracted prototype is time-synchronous to the - * last l samples of the frame. This proves to eliminate - * some of the PPP-CELP transition problems. - * Convert last samples into DTFS */ - if ( spike_near_edge != 0 ) - { - DTFS_to_fs( in + L_FRAME - l, l, TMPDTFS, bwidth == WB ? (int16_t) 16000 : (int16_t) 8000, 0 ); - - tmp = DTFS_alignment_extract( *TMPDTFS, *CURRP_NQ, 0.0, lpc2 ); /* figure out how much to shift currp_nq to align with TMP */ - - DTFS_phaseShift( CURRP_NQ, (float) ( PI2 * tmp / l ) ); - } - - temp_pl = (float) pl; - temp_l = (float) l; - - for ( i = 0; i < NB_SUBFR; i++ ) - { - /* do the linear pitch interp to drive the nb_post_filt_fx */ - Interpol_delay( interp_delay, &( temp_pl ), &( temp_l ), i, frac_4sf ); - pitch[i] = interp_delay[0]; - } - - - /* Restoring PPP memories when the last frame is non-PPP */ - if ( hSC_VBR->last_ppp_mode != 1 ) - { - hSC_VBR->ph_offset_E = 0.0; - hSC_VBR->prev_cw_en = DTFS_getEngy( *dtfs_temp ); - - /* Copy over dtfs_temp into TMPDTFS */ - DTFS_copy( TMPDTFS, *dtfs_temp ); - - DTFS_car2pol( TMPDTFS ); - - hSC_VBR->lastLgainE = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 92.0, 1104.5, 0.0, 1104.5, 1.0, TMPDTFS ) ); - hSC_VBR->lastHgainE = (float) log10( TMPDTFS->lag * DTFS_setEngyHarm( 1104.5, upper_cut_off_freq_of_interest, 1104.5, upper_cut_off_freq, 1.0, TMPDTFS ) ); - - DTFS_to_erb( *TMPDTFS, hSC_VBR->lasterbE ); - } - else - { - /* Copy DTFS related parameters from 'hSC_VBR' to 'dtfs_temp' structure */ - dtfs_temp->lag = hSC_VBR->dtfs_enc_lag; - dtfs_temp->nH = hSC_VBR->dtfs_enc_nH; - dtfs_temp->nH_4kHz = hSC_VBR->dtfs_enc_nH_4kHz; - dtfs_temp->upper_cut_off_freq_of_interest = hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest; - dtfs_temp->upper_cut_off_freq = hSC_VBR->dtfs_enc_upper_cut_off_freq; - - mvr2r( hSC_VBR->dtfs_enc_a, dtfs_temp->a, MAXLAG_WI ); - mvr2r( hSC_VBR->dtfs_enc_b, dtfs_temp->b, MAXLAG_WI ); - } - - /*-----Open-loop Bump-Up-------- */ - - /* Energy ratio calculation in residual and speech domain */ - /* Also, compute correlation between the previous and the */ - /* current prototype */ - res_enratio = DTFS_getEngy( *CURRP_NQ ) / DTFS_getEngy( *dtfs_temp ); - - /* Copy over CURRP_NQ into TMPDTFS */ - DTFS_copy( TMPDTFS, *CURRP_NQ ); - - /* Copy over dtfs_temp into TMPDTFS2 */ - DTFS_copy( TMPDTFS2, *dtfs_temp ); - - tmptmp = DTFS_alignment_full( *TMPDTFS2, *TMPDTFS, TMPDTFS->lag * 2 ); /* align of prev_cw wrt curr_cw, new method */ - - tmptmp1 = TMPDTFS->lag - tmptmp; - tmp = tmptmp1; - - DTFS_phaseShift( TMPDTFS, (float) ( -PI2 * tmp / TMPDTFS->lag ) ); /* fixed bug, phase shift by tmp computed in TMP.lag domain (above) */ - tmpres = (float) ( DTFS_freq_corr( *TMPDTFS, *TMPDTFS2, 100.0f, 3700.0f ) ); - - DTFS_poleFilter( TMPDTFS, lpc2, M + 1 ); - - DTFS_adjustLag( TMPDTFS2, TMPDTFS->lag ); /* operate in CL domain */ - - DTFS_poleFilter( TMPDTFS2, lpc1, M + 1 ); - - tmp = (float) ( DTFS_freq_corr( *TMPDTFS, *TMPDTFS2, 100.0f, 3700.0f ) ); - - if ( DTFS_getEngy( *TMPDTFS2 ) > 0 ) - { - sp_enratio = DTFS_getEngy( *TMPDTFS ) / DTFS_getEngy( *TMPDTFS2 ); - } - else - { - sp_enratio = 0.0f; - } - - if ( PPP_MODE_E == 'Q' ) - { - /* Bump up if the lag is out of range */ - if ( ( ( l - pl ) > 13 ) || ( ( l - pl ) < -11 ) ) - { - PPP_MODE_E = 'B'; - } - else - { - delta_lag_E = (int16_t) ( l - pl ); - } - - /* Bump up if big change between the previous and the current CWs */ - if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) - { - if ( res_enratio > 5.0 && tmp < 0.65 ) - { - PPP_MODE_E = 'B'; - } - } - else - { - if ( res_enratio > 3.0 && tmp < 1.2 ) - { - PPP_MODE_E = 'B'; - } - } - } - - /* Rapid rampdown frame where time resolution is important */ - /* Not a suitable PPP frame -> Bump to CELP */ - if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) - { - if ( res_enratio < 0.025 ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - } - else - { - if ( res_enratio < 0.092f ) - { - hSC_VBR->bump_up = 1; - } - } - - if ( min( res_enratio, sp_enratio ) < 0.075f && tmp < -0.5f ) - { - hSC_VBR->bump_up = 1; - } - - /* Rapid rampup frame where time resolution is important */ - /* Not a suitable PPP frame -> Bump to CELP */ - if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) - { - if ( res_enratio > 14.5 ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - } - else - { - if ( res_enratio > 7.0 ) - { - hSC_VBR->bump_up = 1; - } - } - - if ( hSC_VBR->bump_up == 1 ) - { - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - - /* Bump up when the previous frame is an unvoiced or a silent frame */ - if ( last_coder_type_raw == UNVOICED ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - /* -----End Open-loop Bump-Up */ - - /* PPP-WI Quantization */ - if ( PPP_MODE_E == 'Q' ) - { - flag = 1; - if ( PPP_MODE_E == 'Q' ) - { - if ( ( error = ppp_quarter_encoder( &flag, hBstr, CURRP_Q_E, TMPDTFS, dtfs_temp->lag, *CURRP_NQ, lpc2, &( hSC_VBR->lastLgainE ), &( hSC_VBR->lastHgainE ), &( hSC_VBR->lasterbE[0] ), *dtfs_temp ) ) != IVAS_ERR_OK ) - { - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - } - - if ( flag ) - { - /* TMPDTFS : Target prototype: Amp Quantized + Phase Unquantized */ - /* TMPDTFS2: Quantized prototype: Amp Quantized + Phase Quantized */ - /* TMPDTFS3: Delta prototype: Diff betw. target and quant. in speech dom */ - - /* ----- Closed-loop Bump-Up ---------- */ - DTFS_peaktoaverage( *TMPDTFS, &pos_nq, &neg_nq ); - DTFS_peaktoaverage( *CURRP_Q_E, &pos_q, &neg_q ); - - /* Before we perform the peak-to-average ratio comparison, we have to */ - /* ensure that the energy is not decaying and also the pitch pulse */ - /* is clearly defined */ - - /* Usually triggers in the slow ramp down frames. Does not fall under the test condition (res_enratio < 0.025) as - both frames have little energy and the ratio is not very small. Not suitable for PPP */ - - if ( CURRP_Q_E->upper_cut_off_freq > 4000 ) - { - /* Use this bumup only for WB signals */ - if ( DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ) > 0 ) - { - sp_hb_enratio = DTFS_getEngy_band_wb( *CURRP_Q_E, 2000.0, 6400.0 ) / DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ); - } - else - { - sp_hb_enratio = 0; - } - - low_band_en = (float) DTFS_getEngy_band_wb( *CURRP_Q_E, 0.0, 2000.0 ); - - if ( low_band_en < 25.0f && sp_hb_enratio < 1.6f ) - { - PPP_MODE_E = 'B'; - } - } - - if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) - { - if ( DTFS_getEngy( *CURRP_NQ ) > 0.8f * hSC_VBR->prev_cw_en && max( pos_nq, neg_nq ) > 3.0f && hSC_VBR->rate_control ) - { - if ( pos_nq > neg_nq && pos_nq > 2.0f * pos_q ) - { - PPP_MODE_E = 'B'; - } - - if ( pos_nq < neg_nq && neg_nq > 2.0f * neg_q ) - { - PPP_MODE_E = 'B'; - } - } - } - else - { - if ( ( ( ( DTFS_getEngy( *CURRP_NQ ) > ( hSC_VBR->prev_cw_en ) ) && ( max( pos_nq, neg_nq ) > 3.5 ) ) && ( hSC_VBR->rate_control ) ) || - ( ( ( DTFS_getEngy( *CURRP_NQ ) > 0.8 * ( hSC_VBR->prev_cw_en ) ) && ( max( pos_nq, neg_nq ) > 3.0 ) ) && ( !hSC_VBR->rate_control ) ) ) - { - if ( ( ( pos_nq > neg_nq ) && ( pos_nq > 2.5 * pos_q ) && ( hSC_VBR->rate_control ) ) || - ( ( pos_nq > neg_nq ) && ( pos_nq > 2.0 * pos_q ) && ( !hSC_VBR->rate_control ) ) ) - { - PPP_MODE_E = 'B'; - } - - if ( ( ( ( pos_nq < neg_nq ) && ( neg_nq > 2.5 * neg_q ) ) && ( hSC_VBR->rate_control ) ) || - ( ( pos_nq < neg_nq ) && ( neg_nq > 2.0 * neg_q ) && ( !hSC_VBR->rate_control ) ) ) - { - PPP_MODE_E = 'B'; - } - } - - if ( hSC_VBR->rate_control ) - { - DTFS_peaktoaverage( *CURRP_NQ, &pos_nq0, &neg_nq0 ); - - for ( impzi[0] = 1.0, i = 1; i < 160; i++ ) - { - impzi[i] = 0.0; - } - - for ( i = 0; i < 160; i++ ) - { - impzo[i] = 0.0; - } - - for ( i = 0; i < 10; i++ ) - { - mem[i] = 0.0; - } - - SynthesisFilter( &impzo[0], &impzi[0], lpc2, &mem[0], 10, 160 ); - - for ( i = 0; i < 160; i++ ) - { - energy_impz += ( impzo[i] * impzo[i] ); - } - - energy_impz = (float) ( 10 * log10( (float) energy_impz ) ); - - if ( ( DTFS_getEngy( *CURRP_Q_E ) > hSC_VBR->prev_cw_en ) && ( max( pos_q, neg_q ) > 3.5 ) && energy_impz > 15.0 && tmpres > 0.7 ) - { - if ( ( pos_q > neg_q ) && ( ( pos_q > 3.0 * pos_nq0 ) || ( ( pos_q > 1.5 * pos_nq0 ) && ( neg_q < 1.5 * neg_q ) ) ) ) - { - PPP_MODE_E = 'B'; - } - - if ( ( pos_q <= neg_q ) && ( ( neg_q > 3.0 * neg_nq0 ) || ( ( neg_q > 1.5 * neg_nq0 ) && ( pos_q < 1.5 * pos_q ) ) ) ) - { - PPP_MODE_E = 'B'; - } - } - } - } - - DTFS_copy( TMPDTFS2, *CURRP_Q_E ); - - DTFS_poleFilter( TMPDTFS, lpc2, M + 1 ); - DTFS_poleFilter( TMPDTFS2, lpc2, M + 1 ); - - DTFS_sub( TMPDTFS3, *TMPDTFS, *TMPDTFS2 ); - - /* operate in ADR mode only the rate control is active. This adds some bumpups to improve the speech quality */ - tmp2 = DTFS_getEngy_band( *TMPDTFS, 1500.0, upper_cut_off_freq_of_interest ) / DTFS_getEngy( *TMPDTFS ); - if ( tmp2 == 0.0 ) - { - tmp2 = 0.001; - } - if ( ( tmp2 > 0.05 ) && ( !hSC_VBR->rate_control ) ) - { - tmp2 = DTFS_getEngy_band( *TMPDTFS, 1500.0, upper_cut_off_freq_of_interest ) / DTFS_getEngy_band( *TMPDTFS3, 1500.0, upper_cut_off_freq_of_interest ); - if ( tmp2 == 0.0 ) - { - tmp2 = 0.001; - } - if ( 10.0 * log10( tmp2 ) < 0.1 ) - { - if ( res_enratio > 0.8 ) - { - PPP_MODE_E = 'B'; - } - } - } - - /* To increase bump up, raise first threshold, lower second */ - tmp = (float) ( 10.0 * log10( DTFS_getEngy( *TMPDTFS ) / DTFS_getEngy( *TMPDTFS3 ) ) ); - - if ( ( tmp <= 0 ) && ( !hSC_VBR->rate_control ) ) - { - PPP_MODE_E = 'B'; - } - - if ( hSC_VBR->vadsnr < hSC_VBR->SNR_THLD ) - { - if ( ( ( tmp < 3.05 && max( res_enratio, sp_enratio ) > 0.8 ) && ( hSC_VBR->rate_control ) ) || - ( ( tmp < 2.8 && max( res_enratio, sp_enratio ) > 0.65 ) && ( !hSC_VBR->rate_control ) ) ) - { - PPP_MODE_E = 'B'; - } - } - else - { - if ( ( ( tmp < 2.4 && max( res_enratio, sp_enratio ) > 0.94 ) && ( hSC_VBR->rate_control ) ) || - ( ( tmp < 4.5 && max( res_enratio, sp_enratio ) > 0.5 ) && ( !hSC_VBR->rate_control ) ) ) - { - PPP_MODE_E = 'B'; - } - } - /* -----End closed-loop Bump-Up */ - } - else - { - PPP_MODE_E = 'B'; /* Amplitude quantization is failing */ - } - } - else - { - } - - if ( PPP_MODE_E == 'B' ) - { - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - - if ( hSC_VBR->Q_to_F ) - { - hSC_VBR->patterncount += hSC_VBR->pattern_m; - - if ( hSC_VBR->patterncount >= 1000 ) - { - hSC_VBR->patterncount -= 1000; - PPP_MODE_E = 'B'; - hSC_VBR->bump_up = 1; - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; - } - } - - /* packetization of the delta lag in PPP */ - if ( PPP_MODE_E == 'Q' ) - { - Q_delta_lag = delta_lag_E + 11; /* to make it positive always */ - push_indice( hBstr, IND_DELTALAG, Q_delta_lag, 5 ); - } - - if ( ( error = WIsyn( *dtfs_temp, CURRP_Q_E, lpc2, &( hSC_VBR->ph_offset_E ), out, L_FRAME, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - - DTFS_copy( dtfs_temp, *CURRP_Q_E ); - hSC_VBR->prev_cw_en = DTFS_getEngy( *CURRP_NQ ); - - /* Copy DTFS related parameters from 'dtfs_temp' to 'hSC_VBR' structure */ - hSC_VBR->dtfs_enc_lag = dtfs_temp->lag; - hSC_VBR->dtfs_enc_nH = dtfs_temp->nH; - hSC_VBR->dtfs_enc_nH_4kHz = dtfs_temp->nH_4kHz; - hSC_VBR->dtfs_enc_upper_cut_off_freq_of_interest = dtfs_temp->upper_cut_off_freq_of_interest; - hSC_VBR->dtfs_enc_upper_cut_off_freq = dtfs_temp->upper_cut_off_freq; - - mvr2r( dtfs_temp->a, hSC_VBR->dtfs_enc_a, MAXLAG_WI ); - mvr2r( dtfs_temp->b, hSC_VBR->dtfs_enc_b, MAXLAG_WI ); - - free( CURRP_NQ ); - free( TMPDTFS ); - free( TMPDTFS2 ); - free( TMPDTFS3 ); - free( CURRP_Q_E ); - free( dtfs_temp ); - - return error; -} - - -/*-------------------------------------------------------------------* - * SynthesisFilter() - * - * - *--------------------------------------------------------------------*/ - -static void SynthesisFilter( - float *output, - float *input, - float *coef, - float *memory, - int16_t order, - int16_t length ) -{ - int16_t i, j; - float acc; - - /* IIR filter for each subframe */ - for ( i = 0; i < length; i++ ) - { - for ( j = order - 1, acc = *input++; j > 0; j-- ) - { - acc -= coef[j] * memory[j]; - memory[j] = memory[j - 1]; - } - - acc -= coef[0] * memory[0]; - *output++ = acc; - memory[0] = acc; - } - - return; -} - - -/*---------------------------------------------------------------------* - * sc_vbr_enc_init() - * - * Initialize SC-VBR encoder - *---------------------------------------------------------------------*/ - -void sc_vbr_enc_init( - SC_VBR_ENC_HANDLE hSC_VBR /* i/o: SC-VBR encoder handle */ -) -{ - hSC_VBR->nelp_enc_seed = 0; - hSC_VBR->last_nelp_mode = 0; - hSC_VBR->pppcountE = 0; - hSC_VBR->last_ppp_mode = 0; - hSC_VBR->last_last_ppp_mode = 0; - hSC_VBR->firstTime_voicedenc = 1; - hSC_VBR->prev_ppp_gain_pit = 0.0; - hSC_VBR->prev_tilt_code = 0.0; - - hSC_VBR->ppp_mode = 0; - hSC_VBR->nelp_mode = 0; - - hSC_VBR->pattern_m = 0; - hSC_VBR->Last_Resort = 0; - hSC_VBR->set_ppp_generic = 0; - hSC_VBR->Q_to_F = 0; - - hSC_VBR->numactive = 0; /* keep the count of the frames inside current 600 frame bloack.*/ - hSC_VBR->sum_of_rates = 0.0f; /* sum of the rates of past 600 active frames*/ - hSC_VBR->global_avr_rate = 0.0f; /* global rate upto current time. recorded a (rate in kbps) *6000*/ - hSC_VBR->global_frame_cnt = 0; /* 600 active frame block count. Used to update the global rate*/ - - hSC_VBR->rate_control = 0; - hSC_VBR->SNR_THLD = 67.0f; - hSC_VBR->mode_QQF = 1; - - set_f( hSC_VBR->shape1_filt_mem, 0, 20 ); - set_f( hSC_VBR->shape2_filt_mem, 0, 20 ); - set_f( hSC_VBR->shape3_filt_mem, 0, 20 ); - set_f( hSC_VBR->txlpf1_filt1_mem, 0, 20 ); - set_f( hSC_VBR->txlpf1_filt2_mem, 0, 20 ); - set_f( hSC_VBR->txhpf1_filt1_mem, 0, 20 ); - set_f( hSC_VBR->txhpf1_filt2_mem, 0, 20 ); - - hSC_VBR->last_7k2_coder_type = GENERIC; - hSC_VBR->vbr_generic_ho = 0; - hSC_VBR->Local_VAD = 0; - - return; -} -#endif diff --git a/lib_enc/waveadjust_fec_cod.c b/lib_enc/waveadjust_fec_cod.c index e6a1e42d7..825401325 100644 --- a/lib_enc/waveadjust_fec_cod.c +++ b/lib_enc/waveadjust_fec_cod.c @@ -39,39 +39,3 @@ #include #include "prot.h" #include "wmc_auto.h" - -#ifndef IVAS_FLOAT_FIXED - -/*-------------------------------------------------------------------* - * SFM_Cal() - * - * - *--------------------------------------------------------------------*/ - -float SFM_Cal( - const float fcoef[], - const int16_t n ) -{ - int16_t i, k; - double geoMean = 0, arithMean = 0, SFM; - double tmp[4] = { 1, 1, 1, 1 }; - - for ( k = 0; k < 4; k++ ) - { - - for ( i = k * ( n >> 2 ); i < ( k + 1 ) * ( n >> 2 ); i++ ) - { - tmp[k] *= ( fabs( fcoef[i] ) + EPSILON ); - arithMean += fabs( fcoef[i] ); - } - } - geoMean = log( tmp[0] ) + log( tmp[1] ) + log( tmp[2] ) + log( tmp[3] ); - geoMean = geoMean / n; - geoMean = exp( geoMean ); - arithMean /= n; - SFM = ( geoMean + EPSILON ) / ( arithMean + EPSILON ); - - return (float) SFM; -} - -#endif diff --git a/lib_rend/ivas_allrad_dec.c b/lib_rend/ivas_allrad_dec.c index 09e2a0934..193648a4e 100644 --- a/lib_rend/ivas_allrad_dec.c +++ b/lib_rend/ivas_allrad_dec.c @@ -40,9 +40,7 @@ #include "ivas_prot_rend.h" #include "ivas_rom_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*-----------------------------------------------------------------------* @@ -54,117 +52,6 @@ * * Computes the ALLRAD decoder matrix for HOA to loudspeakers *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_sba_get_hoa_dec_matrix( - const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ - float **hoa_dec_mtx, /* o : ALLRAD decoder matrix */ - const Word16 ambisonics_order /* i : Ambisonics order */ -) -{ - int16_t i, j, k; - int16_t num_harm, num_td, num_spk; - const float *t_design_azi, *t_design_ele; - float tmp_val; - float G_td[MAX_OUTPUT_CHANNELS]; - float Y_td[SBA_NHARM_HOA3]; - float *p_dec_mtx; - EFAP_HANDLE hEFAP; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Allocate memory */ - assert( *hoa_dec_mtx == NULL && "hoa_dec_mtx != NULL" ); - if ( ( *hoa_dec_mtx = (float *) malloc( SBA_NHARM_HOA3 * ( hOutSetup.nchan_out_woLFE ) * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "ALLRAD: Cannot allocate memory!" ) ); - } - - /* Initialization by zeroing all SH coeff up to 3rd order (IVAS convention) */ - num_spk = hOutSetup.nchan_out_woLFE; - p_dec_mtx = *hoa_dec_mtx; - - for ( i = 0; i < num_spk; i++ ) - { - for ( j = 0; j < SBA_NHARM_HOA3; j++ ) - { - *( p_dec_mtx++ ) = 0.f; - } - } - - if ( hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO ) - { - ( *hoa_dec_mtx )[0] = 1.f; - } - else if ( hOutSetup.output_config == IVAS_AUDIO_CONFIG_STEREO ) - { - ( *hoa_dec_mtx )[0] = 0.5f; - ( *hoa_dec_mtx )[1] = 0.5f; - ( *hoa_dec_mtx )[SBA_NHARM_HOA3] = 0.5f; - ( *hoa_dec_mtx )[SBA_NHARM_HOA3 + 1] = -0.5f; - } - else if ( hOutSetup.is_loudspeaker_setup ) - { - /* init EFIP */ - if ( ( error = efap_init_data( &( hEFAP ), hOutSetup.ls_azimuth, hOutSetup.ls_elevation, num_spk, EFAP_MODE_EFIP ) ) != IVAS_ERR_OK ) - { - return error; - } - - num_harm = ivas_sba_get_nchan( ambisonics_order, 0 ); - - /* Get t-design values */ - num_td = SBA_T_DESIGN_11_SIZE; - t_design_azi = t_design_11_azimuth; - t_design_ele = t_design_11_elevation; - - /* dec_mtx = ( 1 / num_td ) * (G_td * Y_td') * diag(norm_sn3d) */ - for ( i = 0; i < num_td; i++ ) - { - /* spherical harmonics response for t-design, corresponding to ambisonic order */ - ivas_dirac_dec_get_response( (int16_t) t_design_azi[i], (int16_t) t_design_ele[i], Y_td, ambisonics_order ); - for ( j = 0; j < num_harm; j++ ) - { - Y_td[j] *= norm_sn3d_hoa3[j]; - } - - /* t-design to real LS panning gains */ - efap_determine_gains( hEFAP, G_td, t_design_azi[i], t_design_ele[i], EFAP_MODE_EFIP ); - - p_dec_mtx = *hoa_dec_mtx; - for ( j = 0; j < num_spk; j++ ) - { - for ( k = 0; k < num_harm; k++ ) - { - *( p_dec_mtx++ ) += G_td[j] * Y_td[k]; - } - p_dec_mtx += ( SBA_NHARM_HOA3 - num_harm ); - } - } - - tmp_val = 1.f / num_td; - p_dec_mtx = *hoa_dec_mtx; - for ( i = 0; i < num_spk; i++ ) - { - for ( j = 0; j < num_harm; j++ ) - { - *( p_dec_mtx++ ) *= tmp_val * norm_sn3d_hoa3[j]; - } - p_dec_mtx += ( SBA_NHARM_HOA3 - num_harm ); - } - - /* free EFAP handle */ - efap_free_data( &hEFAP ); - } - else - { - assert( 0 && "ALLRAD: output not supported!!!" ); - } - - - return error; -} -#else #define TEMP_VAL 1963413621 // Q37 (1.f / num_td) ivas_error ivas_sba_get_hoa_dec_matrix_fx( const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ @@ -324,4 +211,3 @@ ivas_error ivas_sba_get_hoa_dec_matrix_fx( return error; } -#endif diff --git a/lib_rend/ivas_crend.c b/lib_rend/ivas_crend.c index 95ab75f93..f0ac32e8b 100644 --- a/lib_rend/ivas_crend.c +++ b/lib_rend/ivas_crend.c @@ -46,15 +46,12 @@ #include "debug.h" #endif -#ifdef IVAS_FLOAT_FIXED #include "control.h" #include "prot_fx.h" #include "ivas_prot_fx.h" #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_hrtf_init() * @@ -109,60 +106,12 @@ ivas_error ivas_hrtf_init( return IVAS_ERR_OK; } -#else -/*------------------------------------------------------------------------- - * ivas_hrtf_init() - * - * Initialize hHrtf handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_hrtf_init( - HRTFS_DATA *hHrtf /* i/o: HRTF handle */ -) -{ - int16_t i, j; - - if ( hHrtf == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hHrtf->latency_s = 0; - hHrtf->max_num_ir = 0; - hHrtf->max_num_iterations = 0; - hHrtf->gain_lfe = 0; - hHrtf->index_frequency_max_diffuse = 0; - - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - hHrtf->inv_diffuse_weight[i] = 0; - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = 0; - hHrtf->pIndex_frequency_max[i][j] = NULL; - hHrtf->pOut_to_bin_re[i][j] = NULL; - hHrtf->pOut_to_bin_im[i][j] = NULL; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = 0; - hHrtf->pIndex_frequency_max_diffuse[j] = NULL; - hHrtf->pOut_to_bin_diffuse_re[j] = NULL; - hHrtf->pOut_to_bin_diffuse_im[j] = NULL; - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_hrtf_open() * * Open hHrtf handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_hrtf_open( HRTFS_HANDLE *hHrtf_out /* o : HRTF handle */ ) @@ -191,36 +140,6 @@ static ivas_error ivas_hrtf_open( return IVAS_ERR_OK; } -#else -static ivas_error ivas_hrtf_open( - HRTFS_HANDLE *hHrtf_out /* o : HRTF handle */ -) -{ - HRTFS_HANDLE hHrtf; - ivas_error error; - - if ( *hHrtf_out == NULL ) - { - if ( ( hHrtf = (HRTFS_HANDLE) malloc( sizeof( HRTFS_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR decoder\n" ); - } - - if ( ( error = ivas_hrtf_init( hHrtf ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hHrtf_out = hHrtf; - } - else - { - return IVAS_ERR_INTERNAL; - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- @@ -244,7 +163,6 @@ static void ivas_hrtf_close( return; } -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * initCrend_from_rom() * @@ -1228,953 +1146,116 @@ static ivas_error ivas_rend_initCrend_fx( return IVAS_ERR_OK; } -#else /*------------------------------------------------------------------------- - * initCrend_from_rom() + * ivas_shoebox_data_init() * - * Allocate and initialize crend renderer handle + * Initialize shoebox_data_t handle *------------------------------------------------------------------------*/ -static ivas_error ivas_rend_initCrend( - CREND_WRAPPER *pCrend, - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig, - HRTFS_CREND_HANDLE hSetOfHRTF, - const int32_t output_Fs ) +static ivas_error ivas_shoebox_data_init( + shoebox_data_t *hShoeboxData /* i/o: shoebox_data_t handle */ +) { - int16_t i, j, tmp; - int16_t nchan_in; - IVAS_REND_AudioConfigType inConfigType; - HRTFS_HANDLE hHrtf; - ivas_error error; + Word16 i; - inConfigType = getAudioConfigType( inConfig ); - hHrtf = pCrend->hHrtfCrend; + IF( hShoeboxData == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } - /* Do all error checks up front so that the nested if later is easier */ - if ( inConfigType != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED && inConfigType != IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) + FOR( i = 0; i < 150; i++ ) { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Encountered unsupported input config in Crend" ); + hShoeboxData->data_fx[i] = 0; + move32(); + } + FOR( i = 0; i < 1; i++ ) + { + hShoeboxData->size[i] = 0; + move16(); } + return IVAS_ERR_OK; +} + +/*------------------------------------------------------------------------- + * ivas_shoebox_output_init() + * + * Initialize shoebox_output_t handle + *------------------------------------------------------------------------*/ +static ivas_error ivas_shoebox_output_init( + shoebox_output_t *hShoeboxOutput /* i/o: shoebox_output_t handle */ +) +{ + ivas_error error; - if ( outConfig != IVAS_AUDIO_CONFIG_BINAURAL && outConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR && outConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + IF( hShoeboxOutput == NULL ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Encountered unsupported output type in Crend" ); + return IVAS_ERR_WRONG_PARAMS; } - if ( hHrtf == NULL ) + hShoeboxOutput->n_sources = 0; + hShoeboxOutput->n_ref = 0; + move16(); + move16(); + + IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->times ) ), IVAS_ERR_OK ) ) { - if ( ivas_hrtf_open( &hHrtf ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for HRTF handle" ); - } + return error; } - if ( ( error = getAudioConfigNumChannels( inConfig, &nchan_in ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->gains ) ), IVAS_ERR_OK ) ) { return error; } - hHrtf->max_num_ir = nchan_in; - if ( hHrtf->max_num_ir <= 0 ) + IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->az_angle ) ), IVAS_ERR_OK ) ) { - return IVAS_ERR_INTERNAL_FATAL; + return error; } - if ( hSetOfHRTF == NULL ) + IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->el_angle ) ), IVAS_ERR_OK ) ) { - if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - hHrtf->max_num_ir -= 1; /* subtract LFE */ - hHrtf->gain_lfe = GAIN_LFE; + return error; + } - if ( output_Fs == 48000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_48kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; - } - else - { - hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_48kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz; - } + return IVAS_ERR_OK; +} - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[j]; - } - else - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[j]; - } - } - } - else if ( output_Fs == 32000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_32kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; - } - else - { - hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_32kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz; - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[j]; - } - else - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[j]; - } - } - } - else if ( output_Fs == 16000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->latency_s = CRendBin_Combined_BRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_BRIR_max_num_iterations_16kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; - } - else - { - hHrtf->latency_s = CRendBin_Combined_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_Combined_HRIR_max_num_iterations_16kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz; - } +/*------------------------------------------------------------------------- + * ivas_shoebox_config_init() + * + * Initialize shoebox_config_t handle + *------------------------------------------------------------------------*/ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[j]; - } - else - { - hHrtf->num_iterations_diffuse[j] = CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[j]; - } - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); - } +static ivas_error ivas_shoebox_config_init_params( + shoebox_config_t *hShoeboxConfig /* i/o: shoebox_config_t handle */ +) +{ + Word16 i; - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - if ( inConfig == IVAS_AUDIO_CONFIG_5_1 ) - { - tmp = channelIndex_CICP6[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_7_1 ) - { - tmp = channelIndex_CICP12[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_2 ) - { - tmp = channelIndex_CICP14[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_4 ) - { - tmp = channelIndex_CICP16[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_7_1_4 ) - { - tmp = channelIndex_CICP19[i]; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Channel configuration not specified!\n\n" ); - } + IF( hShoeboxConfig == NULL ) + { + return IVAS_ERR_WRONG_PARAMS; + } - if ( output_Fs == 48000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[tmp]; - } - else - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[tmp]; - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_48kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_48kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_48kHz[tmp][j]; - } - else - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_48kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_48kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_48kHz[tmp][j]; - } - } - } - else if ( output_Fs == 32000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[tmp]; - } - else - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[tmp]; - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_32kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_32kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_32kHz[tmp][j]; - } - else - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_32kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_32kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_32kHz[tmp][j]; - } - } - } - else if ( output_Fs == 16000 ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[tmp]; - } - else - { - hHrtf->inv_diffuse_weight[i] = CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[tmp]; - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_BRIR_num_iterations_16kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_BRIR_coeff_re_16kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_BRIR_coeff_im_16kHz[tmp][j]; - } - else - { - hHrtf->num_iterations[i][j] = CRendBin_Combined_HRIR_num_iterations_16kHz[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_Combined_HRIR_coeff_re_16kHz[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_Combined_HRIR_coeff_im_16kHz[tmp][j]; - } - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); - } - } - } - else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - if ( inConfig == IVAS_AUDIO_CONFIG_HOA3 ) - { - if ( output_Fs == 48000 ) - { - hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_48kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_48kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_48kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_48kHz[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[j]; - } - } - else if ( output_Fs == 32000 ) - { - hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_32kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_32kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_32kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_32kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[j]; - } - } - else if ( output_Fs == 16000 ) - { - hHrtf->latency_s = CRendBin_HOA3_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA3_HRIR_max_num_iterations_16kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA3_HRIR_num_iterations_16kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA3_HRIR_coeff_re_16kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA3_HRIR_coeff_im_16kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[j]; - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); - } - } - else if ( inConfig == IVAS_AUDIO_CONFIG_HOA2 ) - { - if ( output_Fs == 48000 ) - { - hHrtf->latency_s = CRendBin_HOA2_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_48kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA2_HRIR_index_frequency_max_diffuse_48kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA2_HRIR_num_iterations_48kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA2_HRIR_coeff_re_48kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA2_HRIR_coeff_im_48kHz[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA2_HRIR_num_iterations_diffuse_48kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz[j]; - } - } - else if ( output_Fs == 32000 ) - { - hHrtf->latency_s = CRendBin_HOA2_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_32kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA2_HRIR_index_frequency_max_diffuse_32kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA2_HRIR_num_iterations_32kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA2_HRIR_coeff_re_32kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA2_HRIR_coeff_im_32kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA2_HRIR_num_iterations_diffuse_32kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz[j]; - } - } - else if ( output_Fs == 16000 ) - { - hHrtf->latency_s = CRendBin_HOA2_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_HOA2_HRIR_max_num_iterations_16kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_HOA2_HRIR_index_frequency_max_diffuse_16kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_HOA2_HRIR_num_iterations_16kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_HOA2_HRIR_coeff_re_16kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_HOA2_HRIR_coeff_im_16kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_HOA2_HRIR_num_iterations_diffuse_16kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz[j]; - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); - } - } - else if ( inConfig == IVAS_AUDIO_CONFIG_FOA ) - { - if ( output_Fs == 48000 ) - { - hHrtf->latency_s = CRendBin_FOA_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_48kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_FOA_HRIR_index_frequency_max_diffuse_48kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_FOA_HRIR_num_iterations_48kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_FOA_HRIR_coeff_re_48kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_FOA_HRIR_coeff_im_48kHz[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_FOA_HRIR_num_iterations_diffuse_48kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz[j]; - } - } - else if ( output_Fs == 32000 ) - { - hHrtf->latency_s = CRendBin_FOA_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_32kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_FOA_HRIR_index_frequency_max_diffuse_32kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_FOA_HRIR_num_iterations_32kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_FOA_HRIR_coeff_re_32kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_FOA_HRIR_coeff_im_32kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_FOA_HRIR_num_iterations_diffuse_32kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz[j]; - } - } - else if ( output_Fs == 16000 ) - { - hHrtf->latency_s = CRendBin_FOA_HRIR_latency_s; - hHrtf->max_num_iterations = CRendBin_FOA_HRIR_max_num_iterations_16kHz; - hHrtf->index_frequency_max_diffuse = CRendBin_FOA_HRIR_index_frequency_max_diffuse_16kHz; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = CRendBin_FOA_HRIR_num_iterations_16kHz[i][j]; - hHrtf->pIndex_frequency_max[i][j] = CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz[i][j]; - hHrtf->pOut_to_bin_re[i][j] = CRendBin_FOA_HRIR_coeff_re_16kHz[i][j]; - hHrtf->pOut_to_bin_im[i][j] = CRendBin_FOA_HRIR_coeff_im_16kHz[i][j]; - } - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = CRendBin_FOA_HRIR_num_iterations_diffuse_16kHz[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz[j]; - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "Encountered Unsupported sampling rate in Crend" ); - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_INPUT_FORMAT, "Encountered unsupported input config in Crend" ); - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL, "Unsupported renderer type in Crend" ); - } - } - else - { - if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - hHrtf->max_num_ir -= 1; /* subtract LFE */ - hHrtf->gain_lfe = GAIN_LFE; - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->latency_s = hSetOfHRTF->hHRTF_brir_combined->latency_s; - hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_brir_combined->max_num_iterations; - hHrtf->index_frequency_max_diffuse = hSetOfHRTF->hHRTF_brir_combined->index_frequency_max_diffuse; - } - else - { - hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_combined->latency_s; - hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_combined->max_num_iterations; - hHrtf->index_frequency_max_diffuse = hSetOfHRTF->hHRTF_hrir_combined->index_frequency_max_diffuse; - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations_diffuse[j] = hSetOfHRTF->hHRTF_brir_combined->num_iterations_diffuse[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = hSetOfHRTF->hHRTF_brir_combined->pIndex_frequency_max_diffuse[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = hSetOfHRTF->hHRTF_brir_combined->pOut_to_bin_diffuse_re[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = hSetOfHRTF->hHRTF_brir_combined->pOut_to_bin_diffuse_im[j]; - } - else - { - hHrtf->num_iterations_diffuse[j] = hSetOfHRTF->hHRTF_hrir_combined->num_iterations_diffuse[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = hSetOfHRTF->hHRTF_hrir_combined->pIndex_frequency_max_diffuse[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = hSetOfHRTF->hHRTF_hrir_combined->pOut_to_bin_diffuse_re[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = hSetOfHRTF->hHRTF_hrir_combined->pOut_to_bin_diffuse_im[j]; - } - } - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - if ( inConfig == IVAS_AUDIO_CONFIG_5_1 ) - { - tmp = channelIndex_CICP6[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_7_1 ) - { - tmp = channelIndex_CICP12[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_2 ) - { - tmp = channelIndex_CICP14[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_4 ) - { - tmp = channelIndex_CICP16[i]; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_7_1_4 ) - { - tmp = channelIndex_CICP19[i]; - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Error: Channel configuration not specified!\n\n" ); - } - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->inv_diffuse_weight[i] = hSetOfHRTF->hHRTF_brir_combined->inv_diffuse_weight[tmp]; - } - else - { - hHrtf->inv_diffuse_weight[i] = hSetOfHRTF->hHRTF_hrir_combined->inv_diffuse_weight[tmp]; - } - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - hHrtf->num_iterations[i][j] = hSetOfHRTF->hHRTF_brir_combined->num_iterations[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = hSetOfHRTF->hHRTF_brir_combined->pIndex_frequency_max[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = hSetOfHRTF->hHRTF_brir_combined->pOut_to_bin_re[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = hSetOfHRTF->hHRTF_brir_combined->pOut_to_bin_im[tmp][j]; - } - else - { - hHrtf->num_iterations[i][j] = hSetOfHRTF->hHRTF_hrir_combined->num_iterations[tmp][j]; - hHrtf->pIndex_frequency_max[i][j] = hSetOfHRTF->hHRTF_hrir_combined->pIndex_frequency_max[tmp][j]; - hHrtf->pOut_to_bin_re[i][j] = hSetOfHRTF->hHRTF_hrir_combined->pOut_to_bin_re[tmp][j]; - hHrtf->pOut_to_bin_im[i][j] = hSetOfHRTF->hHRTF_hrir_combined->pOut_to_bin_im[tmp][j]; - } - } - } - } - else if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - if ( inConfig == IVAS_AUDIO_CONFIG_HOA3 ) - { - hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_hoa3->latency_s; - hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_hoa3->max_num_iterations; - hHrtf->index_frequency_max_diffuse = hSetOfHRTF->hHRTF_hrir_hoa3->index_frequency_max_diffuse; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = hSetOfHRTF->hHRTF_hrir_hoa3->inv_diffuse_weight[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = hSetOfHRTF->hHRTF_hrir_hoa3->num_iterations[i][j]; - hHrtf->pIndex_frequency_max[i][j] = hSetOfHRTF->hHRTF_hrir_hoa3->pIndex_frequency_max[i][j]; - hHrtf->pOut_to_bin_re[i][j] = hSetOfHRTF->hHRTF_hrir_hoa3->pOut_to_bin_re[i][j]; - hHrtf->pOut_to_bin_im[i][j] = hSetOfHRTF->hHRTF_hrir_hoa3->pOut_to_bin_im[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = hSetOfHRTF->hHRTF_hrir_hoa3->num_iterations_diffuse[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = hSetOfHRTF->hHRTF_hrir_hoa3->pIndex_frequency_max_diffuse[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = hSetOfHRTF->hHRTF_hrir_hoa3->pOut_to_bin_diffuse_re[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = hSetOfHRTF->hHRTF_hrir_hoa3->pOut_to_bin_diffuse_im[j]; - } - } - else if ( inConfig == IVAS_AUDIO_CONFIG_HOA2 ) - { - hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_hoa2->latency_s; - hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_hoa2->max_num_iterations; - hHrtf->index_frequency_max_diffuse = hSetOfHRTF->hHRTF_hrir_hoa2->index_frequency_max_diffuse; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = hSetOfHRTF->hHRTF_hrir_hoa2->inv_diffuse_weight[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = hSetOfHRTF->hHRTF_hrir_hoa2->num_iterations[i][j]; - hHrtf->pIndex_frequency_max[i][j] = hSetOfHRTF->hHRTF_hrir_hoa2->pIndex_frequency_max[i][j]; - hHrtf->pOut_to_bin_re[i][j] = hSetOfHRTF->hHRTF_hrir_hoa2->pOut_to_bin_re[i][j]; - hHrtf->pOut_to_bin_im[i][j] = hSetOfHRTF->hHRTF_hrir_hoa2->pOut_to_bin_im[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = hSetOfHRTF->hHRTF_hrir_hoa2->num_iterations_diffuse[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = hSetOfHRTF->hHRTF_hrir_hoa2->pIndex_frequency_max_diffuse[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = hSetOfHRTF->hHRTF_hrir_hoa2->pOut_to_bin_diffuse_re[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = hSetOfHRTF->hHRTF_hrir_hoa2->pOut_to_bin_diffuse_im[j]; - } - } - else if ( inConfig == IVAS_AUDIO_CONFIG_FOA ) - { - hHrtf->latency_s = hSetOfHRTF->hHRTF_hrir_foa->latency_s; - hHrtf->max_num_iterations = hSetOfHRTF->hHRTF_hrir_foa->max_num_iterations; - hHrtf->index_frequency_max_diffuse = hSetOfHRTF->hHRTF_hrir_foa->index_frequency_max_diffuse; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - hHrtf->inv_diffuse_weight[i] = hSetOfHRTF->hHRTF_hrir_foa->inv_diffuse_weight[i]; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations[i][j] = hSetOfHRTF->hHRTF_hrir_foa->num_iterations[i][j]; - hHrtf->pIndex_frequency_max[i][j] = hSetOfHRTF->hHRTF_hrir_foa->pIndex_frequency_max[i][j]; - hHrtf->pOut_to_bin_re[i][j] = hSetOfHRTF->hHRTF_hrir_foa->pOut_to_bin_re[i][j]; - hHrtf->pOut_to_bin_im[i][j] = hSetOfHRTF->hHRTF_hrir_foa->pOut_to_bin_im[i][j]; - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - hHrtf->num_iterations_diffuse[j] = hSetOfHRTF->hHRTF_hrir_foa->num_iterations_diffuse[j]; - hHrtf->pIndex_frequency_max_diffuse[j] = hSetOfHRTF->hHRTF_hrir_foa->pIndex_frequency_max_diffuse[j]; - hHrtf->pOut_to_bin_diffuse_re[j] = hSetOfHRTF->hHRTF_hrir_foa->pOut_to_bin_diffuse_re[j]; - hHrtf->pOut_to_bin_diffuse_im[j] = hSetOfHRTF->hHRTF_hrir_foa->pOut_to_bin_diffuse_im[j]; - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INTERNAL, "Unsupported renderer type in Crend" ); - } - } - } - - pCrend->hHrtfCrend = hHrtf; - - return IVAS_ERR_OK; -} -#endif -/*------------------------------------------------------------------------- - * ivas_shoebox_data_init() - * - * Initialize shoebox_data_t handle - *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_shoebox_data_init( - shoebox_data_t *hShoeboxData /* i/o: shoebox_data_t handle */ -) -{ - Word16 i; - - IF( hShoeboxData == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - FOR( i = 0; i < 150; i++ ) - { - hShoeboxData->data_fx[i] = 0; - move32(); - } - FOR( i = 0; i < 1; i++ ) - { - hShoeboxData->size[i] = 0; - move16(); - } - return IVAS_ERR_OK; -} -#else -static ivas_error ivas_shoebox_data_init( - shoebox_data_t *hShoeboxData /* i/o: shoebox_data_t handle */ -) -{ - int16_t i; - - if ( hShoeboxData == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - for ( i = 0; i < 150; i++ ) - { - hShoeboxData->data[i] = 0.0f; - } - for ( i = 0; i < 1; i++ ) - { - hShoeboxData->size[i] = 0; - } - - return IVAS_ERR_OK; -} - -#endif - -/*------------------------------------------------------------------------- - * ivas_shoebox_output_init() - * - * Initialize shoebox_output_t handle - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_shoebox_output_init( - shoebox_output_t *hShoeboxOutput /* i/o: shoebox_output_t handle */ -) -{ - ivas_error error; - - IF( hShoeboxOutput == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hShoeboxOutput->n_sources = 0; - hShoeboxOutput->n_ref = 0; - move16(); - move16(); - - IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->times ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->gains ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->az_angle ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = ivas_shoebox_data_init( &hShoeboxOutput->el_angle ) ), IVAS_ERR_OK ) ) - { - return error; - } - - return IVAS_ERR_OK; -} -#else - -static ivas_error ivas_shoebox_output_init( - shoebox_output_t *hShoeboxOutput /* i/o: shoebox_output_t handle */ -) -{ - ivas_error error; - - if ( hShoeboxOutput == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hShoeboxOutput->n_sources = 0; - hShoeboxOutput->n_ref = 0; - - if ( ( error = ivas_shoebox_data_init( &hShoeboxOutput->times ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_shoebox_data_init( &hShoeboxOutput->gains ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_shoebox_data_init( &hShoeboxOutput->az_angle ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_shoebox_data_init( &hShoeboxOutput->el_angle ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_shoebox_config_init() - * - * Initialize shoebox_config_t handle - *------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_shoebox_config_init_params( - shoebox_config_t *hShoeboxConfig /* i/o: shoebox_config_t handle */ -) -{ - Word16 i; - - IF( hShoeboxConfig == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hShoeboxConfig->room_L_fx = 0; - hShoeboxConfig->room_W_fx = 0; - hShoeboxConfig->room_H_fx = 0; - move32(); - move32(); - move32(); - FOR( i = 0; i < IVAS_ROOM_ABS_COEFF; i++ ) - { - hShoeboxConfig->abs_coeff_fx[i] = 0; - move32(); - } - FOR( i = 0; i < 3; i++ ) - { - hShoeboxConfig->list_orig_fx[i] = 0; - move32(); - } - return IVAS_ERR_OK; -} -#else -static ivas_error ivas_shoebox_config_init_params( - shoebox_config_t *hShoeboxConfig /* i/o: shoebox_config_t handle */ -) -{ - int16_t i; - - if ( hShoeboxConfig == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hShoeboxConfig->room_L = 0.0f; - hShoeboxConfig->room_W = 0.0f; - hShoeboxConfig->room_H = 0.0f; - - for ( i = 0; i < IVAS_ROOM_ABS_COEFF; i++ ) - { - hShoeboxConfig->abs_coeff[i] = 0.0f; - } - for ( i = 0; i < 3; i++ ) - { - hShoeboxConfig->list_orig[i] = 0.0f; - } - - return IVAS_ERR_OK; -} -#endif + hShoeboxConfig->room_L_fx = 0; + hShoeboxConfig->room_W_fx = 0; + hShoeboxConfig->room_H_fx = 0; + move32(); + move32(); + move32(); + FOR( i = 0; i < IVAS_ROOM_ABS_COEFF; i++ ) + { + hShoeboxConfig->abs_coeff_fx[i] = 0; + move32(); + } + FOR( i = 0; i < 3; i++ ) + { + hShoeboxConfig->list_orig_fx[i] = 0; + move32(); + } + return IVAS_ERR_OK; +} /*------------------------------------------------------------------------- @@ -2183,7 +1264,6 @@ static ivas_error ivas_shoebox_config_init_params( * Initialize shoebox_obj_t handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_shoebox_obj_init( shoebox_obj_t *hShoeboxObj /* i/o: shoebox_obj_t handle */ ) @@ -2244,54 +1324,6 @@ static ivas_error ivas_shoebox_obj_init( return IVAS_ERR_OK; } -#else -static ivas_error ivas_shoebox_obj_init( - shoebox_obj_t *hShoeboxObj /* i/o: shoebox_obj_t handle */ -) -{ - int16_t i; - ivas_error error; - - if ( hShoeboxObj == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - hShoeboxObj->isCartesian = 0; - hShoeboxObj->isRelative = 0; - hShoeboxObj->isZHeight = 0; - hShoeboxObj->isRadians = 0; - hShoeboxObj->MAX_SOURCES = 0; - hShoeboxObj->max_bands = 0; - hShoeboxObj->REF_ORDER = 0; - - for ( i = 0; i < 75; i++ ) - { - hShoeboxObj->src_pos[i] = 0.0f; - } - for ( i = 0; i < 25; i++ ) - { - hShoeboxObj->src_dist[i] = 0.0f; - } - for ( i = 0; i < 3; i++ ) - { - hShoeboxObj->list_pos[i] = 0.0f; - } - - hShoeboxObj->nSrc = 0; - hShoeboxObj->radius = 0.0f; - hShoeboxObj->min_wall_dist = 0.0f; - hShoeboxObj->soundspeed = 0.0f; - hShoeboxObj->air_coeff = 0.0f; - - if ( ( error = ivas_shoebox_config_init_params( &hShoeboxObj->cal ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -2300,7 +1332,6 @@ static ivas_error ivas_shoebox_obj_init( * Initialize early reflections handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_er_init_handle( er_struct_t *reflections /* i/o: early reflections handle */ ) @@ -2359,61 +1390,7 @@ static ivas_error ivas_er_init_handle( } return IVAS_ERR_OK; } -#else -static ivas_error ivas_er_init_handle( - er_struct_t *reflections /* i/o: early reflections handle */ -) -{ - int16_t i; - ivas_error error; - - if ( reflections == NULL ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - reflections->audio_config = IVAS_AUDIO_CONFIG_INVALID; - reflections->use_er = 0; - reflections->is_ready = 0; - reflections->circ_len = 0; - reflections->circ_insert = 0; - reflections->n_total_reflections = 0; - reflections->is_cartesian = 0; - reflections->is_relative = 0; - reflections->max_frame_size = 0; - reflections->output_Fs = 0.0f; - - for ( i = 0; i < 75; i++ ) - { - reflections->source_positions[i] = 0.0f; - } - for ( i = 0; i < 3; i++ ) - { - reflections->user_origin[i] = 0.0f; - if ( i == 2 ) - { - reflections->user_origin[i] = ER_LIST_HEIGHT; - } - } - - reflections->circ_buffers = NULL; - reflections->closest_ch_idx = NULL; - - if ( ( error = ivas_shoebox_output_init( &reflections->shoebox_data ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_shoebox_obj_init( &reflections->shoebox_lib ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_rend_initCrendWrapper() * @@ -2467,85 +1444,22 @@ ivas_error ivas_rend_initCrendWrapper( hCrend->reflections = NULL; hCrend->delay_line_rw_index = 0; hCrend->diffuse_delay_line_rw_index = 0; - move16(); - move16(); - hCrend->m_fYaw_fx = 0; - hCrend->m_fPitch_fx = 0; - hCrend->m_fRoll_fx = 0; - move32(); - move32(); - move32(); - - ( *pCrend )->hCrend = hCrend; - } - - return IVAS_ERR_OK; -} - -#else -/*------------------------------------------------------------------------- - * ivas_rend_initCrendWrapper() - * - * Allocate and initialize crend renderer handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_rend_initCrendWrapper( - CREND_WRAPPER_HANDLE *pCrend ) -{ - int16_t i; - CREND_HANDLE hCrend; - - if ( pCrend == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); - } - - if ( ( *pCrend = (CREND_WRAPPER_HANDLE) malloc( sizeof( CREND_WRAPPER ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Wrapper\n" ); - } - ( *pCrend )->binaural_latency_ns = 0; - ( *pCrend )->hHrtfCrend = NULL; - - { - hCrend = NULL; - if ( ( hCrend = (CREND_HANDLE) malloc( sizeof( CREND_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer handle" ); - } - - hCrend->lfe_delay_line = NULL; - - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - hCrend->freq_buffer_re[i] = NULL; - hCrend->freq_buffer_im[i] = NULL; - } - - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - hCrend->prev_out_buffer[i] = NULL; - } - - hCrend->freq_buffer_re_diffuse = NULL; - hCrend->freq_buffer_im_diffuse = NULL; - hCrend->hReverb = NULL; - hCrend->reflections = NULL; - hCrend->delay_line_rw_index = 0; - hCrend->diffuse_delay_line_rw_index = 0; - hCrend->hTrack = NULL; - hCrend->m_fYaw = 0; - hCrend->m_fPitch = 0; - hCrend->m_fRoll = 0; + move16(); + move16(); + hCrend->m_fYaw_fx = 0; + hCrend->m_fPitch_fx = 0; + hCrend->m_fRoll_fx = 0; + move32(); + move32(); + move32(); ( *pCrend )->hCrend = hCrend; } return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED + /*------------------------------------------------------------------------- * ivas_rend_openCrend() * @@ -2613,365 +1527,103 @@ ivas_error ivas_rend_openCrend( set_zero_fx( hCrend->prev_out_buffer_fx[i], subframe_length ); } - max_total_ir_len = imult1616( (Word16) hHrtf->num_iterations_diffuse[0], subframe_length ); - - IF( max_total_ir_len > 0 ) - { - IF( ( hCrend->freq_buffer_re_diffuse_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero_fx( hCrend->freq_buffer_re_diffuse_fx, max_total_ir_len ); - IF( ( hCrend->freq_buffer_im_diffuse_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero_fx( hCrend->freq_buffer_im_diffuse_fx, max_total_ir_len ); - } - ELSE - { - hCrend->freq_buffer_re_diffuse_fx = NULL; - hCrend->freq_buffer_im_diffuse_fx = NULL; - } - - max_total_ir_len = add( extract_l( L_shr( L_add( L_shl( Mult_32_32( hHrtf->latency_s_fx, output_Fs ), 1 ), 1 ), 1 ) ), subframe_length ); /*(int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length;*/ - IF( max_total_ir_len > 0 ) - { - IF( ( hCrend->lfe_delay_line_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero_fx( hCrend->lfe_delay_line_fx, max_total_ir_len ); - } - ELSE - { - hCrend->lfe_delay_line_fx = NULL; - } - - IF( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - IF( NE_32( ( error = ivas_reverb_open_fx( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( EQ_16( hRendCfg->roomAcoustics.use_er, 1 ) ) - { - - /* Allocate memory for reflections */ - hCrend->reflections = (er_struct_t *) malloc( sizeof( er_struct_t ) ); - IF( !hCrend->reflections ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Early Reflections" ); - } - IF( NE_32( ( error = ivas_er_init_handle( hCrend->reflections ) ), IVAS_ERR_OK ) ) - { - return error; - } - - hCrend->reflections->use_er = hRendCfg->roomAcoustics.use_er; - hCrend->reflections->lowComplexity = hRendCfg->roomAcoustics.lowComplexity; - move16(); - move32(); - - /* Set sample rate and frame size */ - - hCrend->reflections->output_Fs_fx = output_Fs; // Q0 - move32(); - - hCrend->reflections->max_frame_size = extract_l( Mult_32_16( output_Fs, INV_FRAME_PER_SEC_Q15 ) ); - move32(); - - /* Init Shoebox */ - ivas_shoebox_config_init( &hCrend->reflections->shoebox_lib.cal, hRendCfg ); - - /* Init and compute Reflections */ - IF( NE_32( ( error = ivas_er_init( hCrend->reflections, inConfig ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - ELSE - { - hCrend->reflections = NULL; - } - } - ELSE - { - hCrend->hReverb = NULL; - } - - ( *pCrend )->binaural_latency_ns = Mult_32_32( ( *pCrend )->hHrtfCrend->latency_s_fx, (Word32) 1000000000 ); - move32(); - } - - ( *pCrend )->hCrend = hCrend; -} -return IVAS_ERR_OK; -} - -/*------------------------------------------------------------------------- - * ivas_rend_closeCrend() - * - * Deallocate Crend renderer handle - *------------------------------------------------------------------------*/ - -void ivas_rend_closeCrend( - CREND_WRAPPER_HANDLE *pCrend ) -{ - Word16 i; - CREND_HANDLE hCrend; - - test(); - IF( pCrend == NULL || *pCrend == NULL ) - { - return; - } - - IF( ( *pCrend )->hHrtfCrend != NULL ) - { - ivas_hrtf_close( &( *pCrend )->hHrtfCrend ); - } - - { - hCrend = ( *pCrend )->hCrend; - IF( hCrend != NULL ) - { - FOR( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - IF( hCrend->freq_buffer_re_fx[i] != NULL ) - { - free( hCrend->freq_buffer_re_fx[i] ); - hCrend->freq_buffer_re_fx[i] = NULL; - } - IF( hCrend->freq_buffer_im_fx[i] != NULL ) - { - free( hCrend->freq_buffer_im_fx[i] ); - hCrend->freq_buffer_im_fx[i] = NULL; - } - } - - FOR( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - IF( hCrend->prev_out_buffer_fx[i] != NULL ) - { - free( hCrend->prev_out_buffer_fx[i] ); - hCrend->prev_out_buffer_fx[i] = NULL; - } - } - - IF( hCrend->lfe_delay_line_fx != NULL ) - { - free( hCrend->lfe_delay_line_fx ); - hCrend->lfe_delay_line_fx = NULL; - } - - IF( hCrend->freq_buffer_re_diffuse_fx != NULL ) - { - free( hCrend->freq_buffer_re_diffuse_fx ); - hCrend->freq_buffer_re_diffuse_fx = NULL; - } - IF( hCrend->freq_buffer_im_diffuse_fx != NULL ) - { - free( hCrend->freq_buffer_im_diffuse_fx ); - hCrend->freq_buffer_im_diffuse_fx = NULL; - } - IF( hCrend->hTrack != NULL ) - { - free( hCrend->hTrack ); - hCrend->hTrack = NULL; - } - - ivas_reverb_close( &hCrend->hReverb ); - - IF( hCrend->reflections != NULL ) - { - IF( hCrend->reflections->closest_ch_idx != NULL ) - { - free( hCrend->reflections->closest_ch_idx ); - hCrend->reflections->closest_ch_idx = NULL; - } - IF( hCrend->reflections->circ_buffers != NULL ) - { - free( hCrend->reflections->circ_buffers ); - hCrend->reflections->circ_buffers = NULL; - } - free( hCrend->reflections ); - hCrend->reflections = NULL; - } - free( hCrend ); - hCrend = NULL; - ( *pCrend )->hCrend = hCrend; - } - } - - free( *pCrend ); - *pCrend = NULL; - - return; -} - -#else -/*------------------------------------------------------------------------- - * ivas_rend_openCrend() - * - * Allocate and initialize crend renderer handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_rend_openCrend( - CREND_WRAPPER_HANDLE *pCrend, - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig, - RENDER_CONFIG_DATA *hRendCfg, - HRTFS_CREND_HANDLE hSetOfHRTF, - const int32_t output_Fs ) -{ - int16_t i, subframe_length; - int16_t max_total_ir_len; - HRTFS_HANDLE hHrtf; - CREND_HANDLE hCrend; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( error = ivas_rend_initCrendWrapper( pCrend ) ) != IVAS_ERR_OK ) - { - return error; - } - - subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; - - if ( ( *pCrend )->hHrtfCrend == NULL ) - { - if ( ( error = ivas_rend_initCrend( *pCrend, inConfig, outConfig, hSetOfHRTF, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - { - hCrend = ( *pCrend )->hCrend; - hHrtf = ( *pCrend )->hHrtfCrend; - - if ( hHrtf != NULL ) - { - max_total_ir_len = hHrtf->max_num_iterations * subframe_length; - - for ( i = 0; i < hHrtf->max_num_ir; i++ ) - { - if ( ( hCrend->freq_buffer_re[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->freq_buffer_re[i], max_total_ir_len ); - - if ( ( hCrend->freq_buffer_im[i] = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->freq_buffer_im[i], max_total_ir_len ); - } - - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - if ( ( hCrend->prev_out_buffer[i] = (float *) malloc( sizeof( float ) * subframe_length ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->prev_out_buffer[i], subframe_length ); - } - - max_total_ir_len = hHrtf->num_iterations_diffuse[0] * subframe_length; + max_total_ir_len = imult1616( (Word16) hHrtf->num_iterations_diffuse[0], subframe_length ); - if ( max_total_ir_len > 0 ) + IF( max_total_ir_len > 0 ) + { + IF( ( hCrend->freq_buffer_re_diffuse_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) { - if ( ( hCrend->freq_buffer_re_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->freq_buffer_re_diffuse, max_total_ir_len ); - - if ( ( hCrend->freq_buffer_im_diffuse = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->freq_buffer_im_diffuse, max_total_ir_len ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } - else + set_zero_fx( hCrend->freq_buffer_re_diffuse_fx, max_total_ir_len ); + IF( ( hCrend->freq_buffer_im_diffuse_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) { - hCrend->freq_buffer_re_diffuse = NULL; - hCrend->freq_buffer_im_diffuse = NULL; + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } + set_zero_fx( hCrend->freq_buffer_im_diffuse_fx, max_total_ir_len ); + } + ELSE + { + hCrend->freq_buffer_re_diffuse_fx = NULL; + hCrend->freq_buffer_im_diffuse_fx = NULL; + } - max_total_ir_len = (int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length; - if ( max_total_ir_len > 0 ) + max_total_ir_len = add( extract_l( L_shr( L_add( L_shl( Mult_32_32( hHrtf->latency_s_fx, output_Fs ), 1 ), 1 ), 1 ) ), subframe_length ); /*(int16_t) ( hHrtf->latency_s * output_Fs + 0.5f ) + subframe_length;*/ + IF( max_total_ir_len > 0 ) + { + IF( ( hCrend->lfe_delay_line_fx = (Word32 *) malloc( sizeof( Word32 ) * max_total_ir_len ) ) == NULL ) { - if ( ( hCrend->lfe_delay_line = (float *) malloc( sizeof( float ) * max_total_ir_len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); - } - set_zero( hCrend->lfe_delay_line, max_total_ir_len ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend" ); } - else + set_zero_fx( hCrend->lfe_delay_line_fx, max_total_ir_len ); + } + ELSE + { + hCrend->lfe_delay_line_fx = NULL; + } + + IF( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + { + IF( NE_32( ( error = ivas_reverb_open_fx( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ), IVAS_ERR_OK ) ) { - hCrend->lfe_delay_line = NULL; + return error; } - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) + IF( EQ_16( hRendCfg->roomAcoustics.use_er, 1 ) ) { - if ( ( error = ivas_reverb_open( &( hCrend->hReverb ), inConfig, ( *pCrend )->hHrtfCrend, NULL, hRendCfg, output_Fs ) ) != IVAS_ERR_OK ) + + /* Allocate memory for reflections */ + hCrend->reflections = (er_struct_t *) malloc( sizeof( er_struct_t ) ); + IF( !hCrend->reflections ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Early Reflections" ); + } + IF( NE_32( ( error = ivas_er_init_handle( hCrend->reflections ) ), IVAS_ERR_OK ) ) { return error; } - if ( hRendCfg->roomAcoustics.use_er == 1 ) - { + hCrend->reflections->use_er = hRendCfg->roomAcoustics.use_er; + hCrend->reflections->lowComplexity = hRendCfg->roomAcoustics.lowComplexity; + move16(); + move32(); - /* Allocate memory for reflections */ - hCrend->reflections = (er_struct_t *) malloc( sizeof( er_struct_t ) ); - if ( !hCrend->reflections ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Early Reflections" ); - } - if ( ( error = ivas_er_init_handle( hCrend->reflections ) ) != IVAS_ERR_OK ) - { - return error; - } + /* Set sample rate and frame size */ - hCrend->reflections->use_er = hRendCfg->roomAcoustics.use_er; - hCrend->reflections->lowComplexity = hRendCfg->roomAcoustics.lowComplexity; + hCrend->reflections->output_Fs_fx = output_Fs; // Q0 + move32(); - /* Set sample rate and frame size */ - hCrend->reflections->output_Fs = (float) output_Fs; - hCrend->reflections->max_frame_size = (int16_t) ( output_Fs / FRAMES_PER_SEC ); + hCrend->reflections->max_frame_size = extract_l( Mult_32_16( output_Fs, INV_FRAME_PER_SEC_Q15 ) ); + move32(); - /* Init Shoebox */ - ivas_shoebox_config_init( &hCrend->reflections->shoebox_lib.cal, hRendCfg ); + /* Init Shoebox */ + ivas_shoebox_config_init( &hCrend->reflections->shoebox_lib.cal, hRendCfg ); - /* Init and compute Reflections */ - if ( ( error = ivas_er_init( hCrend->reflections, inConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else + /* Init and compute Reflections */ + IF( NE_32( ( error = ivas_er_init( hCrend->reflections, inConfig ) ), IVAS_ERR_OK ) ) { - hCrend->reflections = NULL; + return error; } } - else + ELSE { - hCrend->hReverb = NULL; + hCrend->reflections = NULL; } - - ( *pCrend )->binaural_latency_ns = (int32_t) ( ( *pCrend )->hHrtfCrend->latency_s * 1000000000.f ); + } + ELSE + { + hCrend->hReverb = NULL; } - ( *pCrend )->hCrend = hCrend; + ( *pCrend )->binaural_latency_ns = Mult_32_32( ( *pCrend )->hHrtfCrend->latency_s_fx, (Word32) 1000000000 ); + move32(); } - return IVAS_ERR_OK; + ( *pCrend )->hCrend = hCrend; +} +return IVAS_ERR_OK; } + /*------------------------------------------------------------------------- * ivas_rend_closeCrend() * @@ -2981,65 +1633,64 @@ ivas_error ivas_rend_openCrend( void ivas_rend_closeCrend( CREND_WRAPPER_HANDLE *pCrend ) { - int16_t i; + Word16 i; CREND_HANDLE hCrend; - if ( pCrend == NULL || *pCrend == NULL ) + test(); + IF( pCrend == NULL || *pCrend == NULL ) { return; } - if ( ( *pCrend )->hHrtfCrend != NULL ) + IF( ( *pCrend )->hHrtfCrend != NULL ) { ivas_hrtf_close( &( *pCrend )->hHrtfCrend ); } { hCrend = ( *pCrend )->hCrend; - if ( hCrend != NULL ) + IF( hCrend != NULL ) { - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) + FOR( i = 0; i < MAX_INTERN_CHANNELS; i++ ) { - if ( hCrend->freq_buffer_re[i] != NULL ) + IF( hCrend->freq_buffer_re_fx[i] != NULL ) { - free( hCrend->freq_buffer_re[i] ); - hCrend->freq_buffer_re[i] = NULL; + free( hCrend->freq_buffer_re_fx[i] ); + hCrend->freq_buffer_re_fx[i] = NULL; } - if ( hCrend->freq_buffer_im[i] != NULL ) + IF( hCrend->freq_buffer_im_fx[i] != NULL ) { - free( hCrend->freq_buffer_im[i] ); - hCrend->freq_buffer_im[i] = NULL; + free( hCrend->freq_buffer_im_fx[i] ); + hCrend->freq_buffer_im_fx[i] = NULL; } } - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) + FOR( i = 0; i < BINAURAL_CHANNELS; i++ ) { - if ( hCrend->prev_out_buffer[i] != NULL ) + IF( hCrend->prev_out_buffer_fx[i] != NULL ) { - free( hCrend->prev_out_buffer[i] ); - hCrend->prev_out_buffer[i] = NULL; + free( hCrend->prev_out_buffer_fx[i] ); + hCrend->prev_out_buffer_fx[i] = NULL; } } - if ( hCrend->lfe_delay_line != NULL ) + IF( hCrend->lfe_delay_line_fx != NULL ) { - free( hCrend->lfe_delay_line ); - hCrend->lfe_delay_line = NULL; + free( hCrend->lfe_delay_line_fx ); + hCrend->lfe_delay_line_fx = NULL; } - if ( hCrend->freq_buffer_re_diffuse != NULL ) + IF( hCrend->freq_buffer_re_diffuse_fx != NULL ) { - free( hCrend->freq_buffer_re_diffuse ); - hCrend->freq_buffer_re_diffuse = NULL; + free( hCrend->freq_buffer_re_diffuse_fx ); + hCrend->freq_buffer_re_diffuse_fx = NULL; } - - if ( hCrend->freq_buffer_im_diffuse != NULL ) + IF( hCrend->freq_buffer_im_diffuse_fx != NULL ) { - free( hCrend->freq_buffer_im_diffuse ); - hCrend->freq_buffer_im_diffuse = NULL; + free( hCrend->freq_buffer_im_diffuse_fx ); + hCrend->freq_buffer_im_diffuse_fx = NULL; } - - if ( hCrend->hTrack != NULL ) + IF( hCrend->hTrack != NULL ) { free( hCrend->hTrack ); hCrend->hTrack = NULL; @@ -3047,14 +1698,14 @@ void ivas_rend_closeCrend( ivas_reverb_close( &hCrend->hReverb ); - if ( hCrend->reflections != NULL ) + IF( hCrend->reflections != NULL ) { - if ( hCrend->reflections->closest_ch_idx != NULL ) + IF( hCrend->reflections->closest_ch_idx != NULL ) { free( hCrend->reflections->closest_ch_idx ); hCrend->reflections->closest_ch_idx = NULL; } - if ( hCrend->reflections->circ_buffers != NULL ) + IF( hCrend->reflections->circ_buffers != NULL ) { free( hCrend->reflections->circ_buffers ); hCrend->reflections->circ_buffers = NULL; @@ -3062,7 +1713,6 @@ void ivas_rend_closeCrend( free( hCrend->reflections ); hCrend->reflections = NULL; } - free( hCrend ); hCrend = NULL; ( *pCrend )->hCrend = hCrend; @@ -3075,9 +1725,7 @@ void ivas_rend_closeCrend( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_rend_crendConvolver() * @@ -3190,258 +1838,86 @@ static ivas_error ivas_rend_crendConvolver( move16(); FOR( idx_in = 0; idx_in < nchan_in; idx_in++ ) { - IF( NE_16( idx_in, lfe_idx_in ) ) - { - offset = 0; - move16(); - FOR( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][j]; m++ ) - { - offset_in = add( add( hCrend->delay_line_rw_index, sub( pCrend->hHrtfCrend->max_num_iterations, pCrend->hHrtfCrend->num_iterations[i][j] ) ), add( m, 1 ) ); - offset_in = offset_in % ( pCrend->hHrtfCrend->max_num_iterations ); - move16(); - offset_in = imult1616( offset_in, subframe_length ); - pFreq_buf_re = &hCrend->freq_buffer_re_fx[i][offset_in]; // Qx - pFreq_buf_im = &hCrend->freq_buffer_im_fx[i][offset_in]; // Qx - pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re_fx[i][j][offset]; // Q29 - pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im_fx[i][j][offset]; // Q29 - - FOR( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[i][j][m]; k++ ) - { - tmp_out_re[k] = L_add( L_shl( Msub_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_re[k] ), pFreq_buf_im[k], pFreq_filt_im[k] ), 2 ), tmp_out_re[k] ); // Qx - tmp_out_im[k] = L_add( L_shl( Madd_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_im[k] ), pFreq_buf_im[k], pFreq_filt_re[k] ), 2 ), tmp_out_im[k] ); // Qx - move32(); - move32(); - } - offset = add( offset, k ); - } - i = add( i, 1 ); - } - } - - offset = 0; - move16(); - FOR( m = 0; m < pCrend->hHrtfCrend->num_iterations_diffuse[j]; m++ ) - { - offset_diffuse = add( hCrend->diffuse_delay_line_rw_index, add( m, 1 ) ); - offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0]; - move16(); - offset_diffuse = imult1616( offset_diffuse, subframe_length ); - pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[offset_diffuse]; // Qx - pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[offset_diffuse]; // Qx - pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re_fx[j][offset]; // Q31 - pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im_fx[j][offset]; // Q31 - FOR( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max_diffuse[j][m]; k++ ) - { - tmp_out_re[k] = L_add( Msub_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_re[k] ), pFreq_buf_im[k], pFreq_filt_im[k] ), tmp_out_re[k] ); // Qx - tmp_out_im[k] = L_add( Madd_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_im[k] ), pFreq_buf_im[k], pFreq_filt_re[k] ), tmp_out_im[k] ); // Qx - move32(); - move32(); - } - offset = add( offset, k ); - } - - ivas_imdft_fx( tmp_out_re, tmp_out_im, pOut, subframe_length ); - -#ifdef DEBUGGING - dbgwrite_txt( (const float *) pOut, subframe_length << 1, "Fixed_imdft_out.txt", NULL ); -#endif - pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; - FOR( k = 0; k < subframe_length; k++ ) - { - pFreq_buf_re[k] = L_add( pOut[k], hCrend->prev_out_buffer_fx[j][k] ); // Qx - hCrend->prev_out_buffer_fx[j][k] = pOut[k + subframe_length]; // Qx - move32(); - move32(); - } - } - - hCrend->delay_line_rw_index = add( hCrend->delay_line_rw_index, 1 ); - hCrend->delay_line_rw_index = hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations ); - move16(); - move16(); - IF( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) - { - hCrend->diffuse_delay_line_rw_index = add( hCrend->diffuse_delay_line_rw_index, 1 ); - hCrend->diffuse_delay_line_rw_index = hCrend->diffuse_delay_line_rw_index % ( pCrend->hHrtfCrend->num_iterations_diffuse[0] ); - move16(); - move16(); - } - - return IVAS_ERR_OK; -} - -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_rend_crendConvolver() - * - * Convolver block - *-----------------------------------------------------------------------------------------*/ - -static ivas_error ivas_rend_crendConvolver( - const CREND_WRAPPER *pCrend, - AUDIO_CONFIG inConfig, - AUDIO_CONFIG outConfig, - float *pcm_in[], - float *pcm_out[], - const int32_t output_Fs, - const int16_t i_ts ) -{ - int16_t i, j, k, m; - int16_t subframe_length, idx_in; - int16_t lfe_idx_in; - int16_t offset, offset_in, offset_diffuse; - int16_t nchan_in, nchan_out; - const float *pIn; - float *pFreq_buf_re, *pFreq_buf_im; - const float *pFreq_filt_re, *pFreq_filt_im; - float pOut[L_FRAME48k * 2]; - float tmp_out_re[L_FRAME48k], tmp_out_im[L_FRAME48k]; - CREND_HANDLE hCrend; - ivas_error error; - - hCrend = pCrend->hCrend; - - if ( ( error = getAudioConfigNumChannels( inConfig, &nchan_in ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getAudioConfigNumChannels( outConfig, &nchan_out ) ) != IVAS_ERR_OK ) - { - return error; - } - - subframe_length = (int16_t) ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES; - - lfe_idx_in = -1; - if ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - if ( inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - lfe_idx_in = LFE_CHANNEL; - } - else - { - assert( 0 && "Custom LS not supported in CRend" ); - } - } - - offset = hCrend->delay_line_rw_index * subframe_length; /* subframe_length * ( pCrend->hHrtfCrend->max_num_iterations - 1 ); */ - offset_diffuse = hCrend->diffuse_delay_line_rw_index * subframe_length; /* subframe_length *( pCrend->hHrtfCrend->num_iterations_diffuse[0] - 1 ); */ - - if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) - { - set_zero( &hCrend->freq_buffer_re_diffuse[offset_diffuse], subframe_length ); - set_zero( &hCrend->freq_buffer_im_diffuse[offset_diffuse], subframe_length ); - } - - i = 0; - for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) - { - pIn = &pcm_in[idx_in][i_ts * subframe_length]; - if ( idx_in != lfe_idx_in ) - { - if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) - { - pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; - pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; - pFreq_filt_re = &hCrend->freq_buffer_re[i][offset]; - pFreq_filt_im = &hCrend->freq_buffer_im[i][offset]; - - for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ ) - { - pFreq_buf_re[k] += pFreq_filt_re[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; - pFreq_buf_im[k] += pFreq_filt_im[k] * pCrend->hHrtfCrend->inv_diffuse_weight[i]; - } - } - - pFreq_buf_re = &hCrend->freq_buffer_re[i][offset]; - pFreq_buf_im = &hCrend->freq_buffer_im[i][offset]; - - ivas_mdft( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length ); -#ifdef DEBUGGING - dbgwrite_txt( pFreq_buf_re, subframe_length, "Float_pFreq_buf_re_mdft.txt", NULL ); - dbgwrite_txt( pFreq_buf_im, subframe_length, "Float_pFreq_buf_im_mdft.txt", NULL ); -#endif - i++; - } - } - - for ( j = 0; j < nchan_out; j++ ) - { - set_zero( tmp_out_re, subframe_length ); - set_zero( tmp_out_im, subframe_length ); - - i = 0; - for ( idx_in = 0; idx_in < nchan_in; idx_in++ ) - { - if ( idx_in != lfe_idx_in ) + IF( NE_16( idx_in, lfe_idx_in ) ) { offset = 0; - for ( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][j]; m++ ) + move16(); + FOR( m = 0; m < pCrend->hHrtfCrend->num_iterations[i][j]; m++ ) { - offset_in = ( hCrend->delay_line_rw_index + pCrend->hHrtfCrend->max_num_iterations - pCrend->hHrtfCrend->num_iterations[i][j] + m + 1 ); + offset_in = add( add( hCrend->delay_line_rw_index, sub( pCrend->hHrtfCrend->max_num_iterations, pCrend->hHrtfCrend->num_iterations[i][j] ) ), add( m, 1 ) ); offset_in = offset_in % ( pCrend->hHrtfCrend->max_num_iterations ); - offset_in = offset_in * subframe_length; - pFreq_buf_re = &hCrend->freq_buffer_re[i][offset_in]; - pFreq_buf_im = &hCrend->freq_buffer_im[i][offset_in]; - pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re[i][j][offset]; - pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im[i][j][offset]; + move16(); + offset_in = imult1616( offset_in, subframe_length ); + pFreq_buf_re = &hCrend->freq_buffer_re_fx[i][offset_in]; // Qx + pFreq_buf_im = &hCrend->freq_buffer_im_fx[i][offset_in]; // Qx + pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_re_fx[i][j][offset]; // Q29 + pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_im_fx[i][j][offset]; // Q29 - for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[i][j][m]; k++ ) + FOR( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max[i][j][m]; k++ ) { - tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; - tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; + tmp_out_re[k] = L_add( L_shl( Msub_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_re[k] ), pFreq_buf_im[k], pFreq_filt_im[k] ), 2 ), tmp_out_re[k] ); // Qx + tmp_out_im[k] = L_add( L_shl( Madd_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_im[k] ), pFreq_buf_im[k], pFreq_filt_re[k] ), 2 ), tmp_out_im[k] ); // Qx + move32(); + move32(); } - offset = offset + k; + offset = add( offset, k ); } - i++; + i = add( i, 1 ); } } offset = 0; - for ( m = 0; m < pCrend->hHrtfCrend->num_iterations_diffuse[j]; m++ ) + move16(); + FOR( m = 0; m < pCrend->hHrtfCrend->num_iterations_diffuse[j]; m++ ) { - offset_diffuse = ( hCrend->diffuse_delay_line_rw_index + m + 1 ); + offset_diffuse = add( hCrend->diffuse_delay_line_rw_index, add( m, 1 ) ); offset_diffuse = offset_diffuse % pCrend->hHrtfCrend->num_iterations_diffuse[0]; - offset_diffuse = offset_diffuse * subframe_length; - pFreq_buf_re = &hCrend->freq_buffer_re_diffuse[offset_diffuse]; - pFreq_buf_im = &hCrend->freq_buffer_im_diffuse[offset_diffuse]; - pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re[j][offset]; - pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im[j][offset]; - - for ( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max_diffuse[j][m]; k++ ) + move16(); + offset_diffuse = imult1616( offset_diffuse, subframe_length ); + pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[offset_diffuse]; // Qx + pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[offset_diffuse]; // Qx + pFreq_filt_re = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_re_fx[j][offset]; // Q31 + pFreq_filt_im = &pCrend->hHrtfCrend->pOut_to_bin_diffuse_im_fx[j][offset]; // Q31 + FOR( k = 0; k < pCrend->hHrtfCrend->pIndex_frequency_max_diffuse[j][m]; k++ ) { - tmp_out_re[k] += pFreq_buf_re[k] * pFreq_filt_re[k] - pFreq_buf_im[k] * pFreq_filt_im[k]; - tmp_out_im[k] += pFreq_buf_re[k] * pFreq_filt_im[k] + pFreq_buf_im[k] * pFreq_filt_re[k]; + tmp_out_re[k] = L_add( Msub_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_re[k] ), pFreq_buf_im[k], pFreq_filt_im[k] ), tmp_out_re[k] ); // Qx + tmp_out_im[k] = L_add( Madd_32_32( Mpy_32_32( pFreq_buf_re[k], pFreq_filt_im[k] ), pFreq_buf_im[k], pFreq_filt_re[k] ), tmp_out_im[k] ); // Qx + move32(); + move32(); } - offset = offset + k; + offset = add( offset, k ); } - ivas_imdft( tmp_out_re, tmp_out_im, pOut, subframe_length ); + ivas_imdft_fx( tmp_out_re, tmp_out_im, pOut, subframe_length ); + #ifdef DEBUGGING - dbgwrite_txt( pOut, subframe_length << 1, "Float_imdft_out.txt", NULL ); + dbgwrite_txt( (const float *) pOut, subframe_length << 1, "Fixed_imdft_out.txt", NULL ); #endif pFreq_buf_re = &pcm_out[j][i_ts * subframe_length]; - for ( k = 0; k < subframe_length; k++ ) + FOR( k = 0; k < subframe_length; k++ ) { - pFreq_buf_re[k] = pOut[k] + hCrend->prev_out_buffer[j][k]; - hCrend->prev_out_buffer[j][k] = pOut[k + subframe_length]; + pFreq_buf_re[k] = L_add( pOut[k], hCrend->prev_out_buffer_fx[j][k] ); // Qx + hCrend->prev_out_buffer_fx[j][k] = pOut[k + subframe_length]; // Qx + move32(); + move32(); } } - hCrend->delay_line_rw_index++; + hCrend->delay_line_rw_index = add( hCrend->delay_line_rw_index, 1 ); hCrend->delay_line_rw_index = hCrend->delay_line_rw_index % ( pCrend->hHrtfCrend->max_num_iterations ); - if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) + move16(); + move16(); + IF( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 ) { - hCrend->diffuse_delay_line_rw_index++; + hCrend->diffuse_delay_line_rw_index = add( hCrend->diffuse_delay_line_rw_index, 1 ); hCrend->diffuse_delay_line_rw_index = hCrend->diffuse_delay_line_rw_index % ( pCrend->hHrtfCrend->num_iterations_diffuse[0] ); + move16(); + move16(); } return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED + /*-----------------------------------------------------------------------------------------* * Function ivas_rend_crend_Process() * @@ -3596,132 +2072,6 @@ ivas_error ivas_rend_crendProcess( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_rend_crendProcess() - * - * Process call for IVAS Crend renderer - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_rend_crendProcess( - const CREND_WRAPPER *pCrend, - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig, - DECODER_CONFIG_HANDLE hDecoderConfig, - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - IVAS_OUTPUT_SETUP_HANDLE hIntSetup, - EFAP_HANDLE hEFAPdata, - float *output[], /* i/o: input/output audio channels */ - const int32_t output_Fs, - const int16_t num_subframes /* i : number of subframes to render */ -) -{ - int16_t i, subframe_idx, subframe_len; - int16_t nchan_out; - float pcm_tmp[BINAURAL_CHANNELS][L_FRAME48k]; - float *p_pcm_tmp[BINAURAL_CHANNELS]; - IVAS_REND_AudioConfigType inConfigType; - int8_t combinedOrientationEnabled; - ivas_error error; - CREND_HANDLE hCrend; - - hCrend = pCrend->hCrend; - - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - if ( hCombinedOrientationData->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - push_wmops( "ivas_rend_crendProcess" ); - inConfigType = getAudioConfigType( inConfig ); - - if ( ( error = getAudioConfigNumChannels( outConfig, &nchan_out ) ) != IVAS_ERR_OK ) - { - return error; - } - - subframe_len = (int16_t) ( output_Fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); - - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - p_pcm_tmp[i] = pcm_tmp[i]; - } - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - /* Early Reflections */ - if ( hCrend->reflections != NULL ) - { - if ( hCrend->reflections->use_er == 1 && hCrend->reflections->is_ready == 1 ) - { - if ( ( error = ivas_er_process( hCrend->reflections, subframe_len, subframe_idx, output, inConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( hDecoderConfig && combinedOrientationEnabled ) - { - /* Orientation tracking */ - - /* Rotation in SHD for: - MC with elevation (5_1_2 / 5_1_4 / 7_1_4) -> BINAURAL - SBA SPAR -> BINAURAL or BINAURAL_ROOM - */ - if ( inConfig == IVAS_AUDIO_CONFIG_FOA || inConfig == IVAS_AUDIO_CONFIG_HOA2 || inConfig == IVAS_AUDIO_CONFIG_HOA3 ) - { - rotateFrame_shd( hCombinedOrientationData, output, subframe_len, *hIntSetup, subframe_idx ); - } - /* Rotation in SD for MC -> BINAURAL_ROOM */ - else if ( ( hIntSetup != NULL ) && hIntSetup->is_loudspeaker_setup ) - { - rotateFrame_sd( hCombinedOrientationData, output, subframe_len, *hIntSetup, hEFAPdata, subframe_idx ); - } - } - - if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED || inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - if ( ( error = ivas_rend_crendConvolver( pCrend, inConfig, outConfig, output, p_pcm_tmp, output_Fs, subframe_idx ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hCrend->hReverb != NULL ) - { - if ( ( error = ivas_reverb_process( pCrend->hCrend->hReverb, inConfig, 1, output, p_pcm_tmp, subframe_idx ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( hCombinedOrientationData, subframe_len ); - } - else - { - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - } - - /* move to output */ - for ( i = 0; i < nchan_out; i++ ) - { - mvr2r( pcm_tmp[i], output[i], num_subframes * subframe_len ); - } - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_rend_crendProcessSubframe() * @@ -3898,162 +2248,3 @@ ivas_error ivas_rend_crendProcessSubframe( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_rend_crendProcessSubframe() - * - * - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_rend_crendProcessSubframe( - const CREND_WRAPPER *pCrend, /* i/o: Crend wrapper handle */ - const AUDIO_CONFIG inConfig, /* i : input audio configuration */ - const AUDIO_CONFIG outConfig, /* i : output audio configuration */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : decoder config. structure */ - const COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ - const IVAS_OUTPUT_SETUP_HANDLE hIntSetup, /* i : internal setup handle */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP handle */ - DECODER_TC_BUFFER_HANDLE hTcBuffer, /* i/o: JBM handle */ - float *input_f[], /* i : transport channels */ - float *output[], /* i/o: input/output audio channels */ - const int16_t n_samples_to_render, /* i : output frame length per channel */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - int16_t subframe_idx, subframe_len; - int16_t nchan_out, nchan_in, ch, first_sf, last_sf, slot_size, slots_to_render; - float *tc_local[MAX_OUTPUT_CHANNELS]; - float pcm_tmp[BINAURAL_CHANNELS][L_FRAME48k]; - float *p_pcm_tmp[BINAURAL_CHANNELS]; - IVAS_REND_AudioConfigType inConfigType; - ivas_error error; - int8_t combinedOrientationEnabled; - CREND_HANDLE hCrend; - - hCrend = pCrend->hCrend; - - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - if ( hCombinedOrientationData->enableCombinedOrientation[0] != 0 ) - { - combinedOrientationEnabled = 1; - } - } - - push_wmops( "ivas_rend_crendProcessSubframe" ); - inConfigType = getAudioConfigType( inConfig ); - - if ( ( error = getAudioConfigNumChannels( outConfig, &nchan_out ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getAudioConfigNumChannels( inConfig, &nchan_in ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( ch = 0; ch < nchan_in; ch++ ) - { - tc_local[ch] = input_f[ch]; - } - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_pcm_tmp[ch] = pcm_tmp[ch]; - } - - slot_size = hTcBuffer->n_samples_granularity; - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hTcBuffer->num_slots - hTcBuffer->slots_rendered, n_samples_to_render / slot_size ); - first_sf = hTcBuffer->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hTcBuffer->subframe_nbslots[last_sf]; - last_sf++; - } - - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - subframe_len = hTcBuffer->subframe_nbslots[subframe_idx] * hTcBuffer->n_samples_granularity; - - /* Early Reflections */ - if ( hCrend->reflections != NULL ) - { - if ( hCrend->reflections->use_er == 1 && hCrend->reflections->is_ready == 1 ) - { - if ( ( error = ivas_er_process( hCrend->reflections, subframe_len, 0, tc_local, inConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( hDecoderConfig && combinedOrientationEnabled ) - { - /* Rotation in SHD for: - MC with elevation (5_1_2 / 5_1_4 / 7_1_4) -> BINAURAL - SBA SPAR -> BINAURAL or BINAURAL_ROOM - */ - if ( inConfig == IVAS_AUDIO_CONFIG_FOA || inConfig == IVAS_AUDIO_CONFIG_HOA2 || inConfig == IVAS_AUDIO_CONFIG_HOA3 ) - { - rotateFrame_shd( hCombinedOrientationData, tc_local, subframe_len, *hIntSetup, 0 ); - } - /* Rotation in SD for MC -> BINAURAL_ROOM */ - else if ( ( hIntSetup != NULL ) && hIntSetup->is_loudspeaker_setup ) - { - rotateFrame_sd( hCombinedOrientationData, tc_local, subframe_len, *hIntSetup, hEFAPdata, 0 ); - } - } - - if ( ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) || ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) ) - { - if ( ( error = ivas_rend_crendConvolver( pCrend, inConfig, outConfig, tc_local, p_pcm_tmp, output_Fs, 0 ) ) != IVAS_ERR_OK ) - - { - return error; - } - - if ( pCrend->hCrend->hReverb != NULL ) - { - if ( ( error = ivas_reverb_process( pCrend->hCrend->hReverb, inConfig, 1, tc_local, p_pcm_tmp, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( ch = 0; ch < nchan_in; ch++ ) - { - tc_local[ch] += subframe_len; - } - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_pcm_tmp[ch] += subframe_len; - } - hTcBuffer->slots_rendered += hTcBuffer->subframe_nbslots[subframe_idx]; - } - else - { - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( hCombinedOrientationData, subframe_len ); - } - - /* move to output */ - for ( ch = 0; ch < nchan_out; ch++ ) - { - mvr2r( pcm_tmp[ch], output[ch], n_samples_to_render ); - } - - hTcBuffer->subframes_rendered = last_sf; - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_rend/ivas_dirac_ana.c b/lib_rend/ivas_dirac_ana.c index 2b2f9cc1c..f2bc10e6a 100644 --- a/lib_rend/ivas_dirac_ana.c +++ b/lib_rend/ivas_dirac_ana.c @@ -40,20 +40,13 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_param_est_ana_fx( DIRAC_ANA_HANDLE hDirAC, Word32 data_f[][L_FRAME48k], Word32 elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word32 surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const Word16 input_frame ); static void ivas_dirac_dmx_fx( Word32 data_in_fx[][L_FRAME48k], const Word16 input_frame, const Word16 nchan_transport ); -#else -static void ivas_dirac_param_est_ana( DIRAC_ANA_HANDLE hDirAC, float data_f[][L_FRAME48k], float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const int16_t input_frame ); -static void ivas_dirac_dmx( float data_in_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_transport ); -#endif /*--------------------------------------------------------------------------* @@ -62,7 +55,6 @@ static void ivas_dirac_dmx( float data_in_f[][L_FRAME48k], const int16_t input_f * Allocate and initialize DIRAC handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_ana_open_fx( DIRAC_ANA_HANDLE *hDirACPtr, /* i/o: DIRAC data handle pointer */ Word32 input_Fs /* i : Sampling frequency */ @@ -169,107 +161,6 @@ ivas_error ivas_dirac_ana_open_fx( return error; } -#else -ivas_error ivas_dirac_ana_open( - DIRAC_ANA_HANDLE *hDirACPtr, /* i/o: DIRAC data handle pointer */ - int32_t input_Fs /* i : Sampling frequency */ -) -{ - int16_t i, j; - DIRAC_ANA_HANDLE hDirAC; - int16_t numAnalysisChannels; - int16_t maxBin; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( hDirAC = (DIRAC_ANA_HANDLE) malloc( sizeof( DIRAC_ANA_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DIRAC\n" ) ); - } - - numAnalysisChannels = FOA_CHANNELS; - - /* Determine the number of bands */ - hDirAC->nbands = MASA_FREQUENCY_BANDS; - - /* Determine band grouping */ - mvs2s( MASA_band_grouping_24, hDirAC->band_grouping, 24 + 1 ); - - maxBin = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - for ( i = 1; i < hDirAC->nbands + 1; i++ ) - { - if ( hDirAC->band_grouping[i] >= maxBin ) - { - hDirAC->band_grouping[i] = maxBin; - hDirAC->nbands = i; - break; - } - } - - /* Determine block grouping */ - mvs2s( DirAC_block_grouping, hDirAC->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - - /* open/initialize CLDFB */ - hDirAC->num_Cldfb_instances = numAnalysisChannels; - for ( i = 0; i < hDirAC->num_Cldfb_instances; i++ ) - { - if ( ( error = openCldfb_ivas( &( hDirAC->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hDirAC->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hDirAC->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hDirAC->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); - } - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( ( hDirAC->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - set_zero( hDirAC->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); - } - } - - set_zero( hDirAC->buffer_energy, DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS ); - - hDirAC->index_buffer_intensity = 0; - - if ( ( hDirAC->hMasaOut = (MASA_DECODER_EXT_OUT_META_HANDLE) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - if ( ( hDirAC->sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - generate_gridEq( hDirAC->sph_grid16 ); - - ( *hDirACPtr ) = hDirAC; - - return error; -} -#endif /*--------------------------------------------------------------------------* @@ -278,7 +169,6 @@ ivas_error ivas_dirac_ana_open( * Close DIRAC handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_ana_close_fx( DIRAC_ANA_HANDLE( *hDirAC ) /* i/o: analysis DIRAC handle */ ) @@ -323,52 +213,6 @@ void ivas_dirac_ana_close_fx( return; } -#else -void ivas_dirac_ana_close( - DIRAC_ANA_HANDLE( *hDirAC ) /* i/o: analysis DIRAC handle */ -) -{ - int16_t i, j; - - if ( hDirAC == NULL || *hDirAC == NULL ) - { - return; - } - - for ( i = 0; i < ( *hDirAC )->num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hDirAC )->cldfbAnaEnc[i] ) ); - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - free( ( *hDirAC )->direction_vector_m[i][j] ); - ( *hDirAC )->direction_vector_m[i][j] = NULL; - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - free( ( *hDirAC )->buffer_intensity_real[i][j] ); - ( *hDirAC )->buffer_intensity_real[i][j] = NULL; - } - - free( ( *hDirAC )->direction_vector_m[i] ); - ( *hDirAC )->direction_vector_m[i] = NULL; - } - - free( ( *hDirAC )->hMasaOut ); - ( *hDirAC )->hMasaOut = NULL; - free( ( *hDirAC )->sph_grid16 ); - ( *hDirAC )->sph_grid16 = NULL; - - free( ( *hDirAC ) ); - ( *hDirAC ) = NULL; - - return; -} -#endif /*--------------------------------------------------------------------------* @@ -377,7 +221,6 @@ void ivas_dirac_ana_close( * DIRAC analysis function *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_ana_fx( DIRAC_ANA_HANDLE hDirAC, /* i/o: DIRAC analysis handle */ Word32 data_fx[][L_FRAME48k], /* i/o: Input / transport audio signals, Q7 */ @@ -405,40 +248,12 @@ void ivas_dirac_ana_fx( return; } -#else -void ivas_dirac_ana( - DIRAC_ANA_HANDLE hDirAC, /* i/o: DIRAC analysis handle */ - float data_in_f[][L_FRAME48k], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport /* i : Number of transport channels */ -) -{ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - - - /* Estimate MASA parameters from the SBA signals */ - ivas_dirac_param_est_ana( hDirAC, data_in_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame ); - - /* Create MASA metadata buffer from the estimated values */ - ivas_create_masa_out_meta( hDirAC->hMasaOut, hDirAC->sph_grid16, nchan_transport, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence ); - - /* Downmix */ - ivas_dirac_dmx( data_in_f, input_frame, nchan_transport ); - - return; -} -#endif /*--------------------------------------------------------------------------* * Local functions *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /* Estimate MASA parameters from the SBA signals */ static void ivas_dirac_param_est_ana_fx( DIRAC_ANA_HANDLE hDirAC, @@ -749,147 +564,8 @@ static void ivas_dirac_param_est_ana_fx( return; } -#else -/* Estimate MASA parameters from the SBA signals */ -static void ivas_dirac_param_est_ana( - DIRAC_ANA_HANDLE hDirAC, - float data_f[][L_FRAME48k], - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - const int16_t input_frame ) -{ - float reference_power[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t ts, i, d, j; - int16_t num_freq_bands, index; - float dir_v[DIRAC_NUM_DIMS]; - int16_t l_ts; - float Foa_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Foa_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float diffuseness_vector[MASA_FREQUENCY_BANDS]; - float diffuseness_m[MASA_FREQUENCY_BANDS]; - - int16_t band_m_idx, block_m_idx; - float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; - float norm_tmp; - int16_t mrange[2]; - int16_t brange[2]; - int16_t numAnalysisChannels; - - num_freq_bands = hDirAC->nbands; - l_ts = input_frame / CLDFB_NO_COL_MAX; - numAnalysisChannels = FOA_CHANNELS; - - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hDirAC->block_grouping[block_m_idx]; - mrange[1] = hDirAC->block_grouping[block_m_idx + 1]; - - for ( band_m_idx = 0; band_m_idx < hDirAC->nbands; band_m_idx++ ) - { - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] = 0.0f; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] = 0.0f; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] = 0.0f; - } - - /* Need to initialize renormalization_factors, and variables to be normalized */ - set_zero( renormalization_factor_diff, hDirAC->nbands ); - set_zero( diffuseness_m, hDirAC->nbands ); - set_zero( hDirAC->energy[block_m_idx], MASA_FREQUENCY_BANDS ); - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < numAnalysisChannels; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Foa_RealBuffer[i], Foa_ImagBuffer[i], l_ts, hDirAC->cldfbAnaEnc[i] ); - } - - /* Compute omni energy for metadata processing */ - for ( band_m_idx = 0; band_m_idx < num_freq_bands; band_m_idx++ ) - { - brange[0] = hDirAC->band_grouping[band_m_idx]; - brange[1] = hDirAC->band_grouping[band_m_idx + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - hDirAC->energy[block_m_idx][band_m_idx] += Foa_RealBuffer[0][j] * Foa_RealBuffer[0][j] + Foa_ImagBuffer[0][j] * Foa_ImagBuffer[0][j]; - } - } - - /* Direction estimation */ - computeIntensityVector_ana( hDirAC->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, num_freq_bands, intensity_real ); - computeDirectionVectors( intensity_real[0], intensity_real[1], intensity_real[2], 0, num_freq_bands, direction_vector[0], direction_vector[1], direction_vector[2] ); - - /* Power estimation for diffuseness */ - computeReferencePower_ana( hDirAC->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, reference_power[ts], num_freq_bands ); - - /* Fill buffers of length "averaging_length" time slots for intensity and energy */ - hDirAC->index_buffer_intensity = ( hDirAC->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ - index = hDirAC->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_real[i], &( hDirAC->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power[ts], &( hDirAC->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness( hDirAC->buffer_intensity_real, hDirAC->buffer_energy, num_freq_bands, diffuseness_vector ); - - for ( band_m_idx = 0; band_m_idx < hDirAC->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hDirAC->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hDirAC->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hDirAC->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - - diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - } - - for ( band_m_idx = 0; band_m_idx < hDirAC->nbands; band_m_idx++ ) - { - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hDirAC->direction_vector_m[d][block_m_idx][band_m_idx]; - } - ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); - } - - /* Determine energy ratios */ - for ( band_m_idx = 0; band_m_idx < hDirAC->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - diffuseness_m[band_m_idx] = 0.0f; - } - - energyRatio[block_m_idx][band_m_idx] = 1.0f - diffuseness_m[band_m_idx]; - } - - for ( band_m_idx = 0; band_m_idx < hDirAC->nbands; band_m_idx++ ) - { - spreadCoherence[block_m_idx][band_m_idx] = 0.0f; - surroundingCoherence[block_m_idx][band_m_idx] = 0.0f; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /* Compute downmix */ static void ivas_dirac_dmx_fx( Word32 data_in_fx[][L_FRAME48k], /* Qx (same as the input Q) */ @@ -915,30 +591,3 @@ static void ivas_dirac_dmx_fx( /* output Q is same as input Q*/ return; } -#else -/* Compute downmix */ -static void ivas_dirac_dmx( - float data_in_f[][L_FRAME48k], - const int16_t input_frame, - const int16_t nchan_transport ) -{ - int16_t i; - float data_out_f[MASA_MAX_TRANSPORT_CHANNELS][L_FRAME48k]; - - if ( nchan_transport == 2 ) - { - v_add( data_in_f[0], data_in_f[1], data_out_f[0], input_frame ); - v_multc( data_out_f[0], 0.5f, data_out_f[0], input_frame ); - - v_sub( data_in_f[0], data_in_f[1], data_out_f[1], input_frame ); - v_multc( data_out_f[1], 0.5f, data_out_f[1], input_frame ); - - for ( i = 0; i < nchan_transport; i++ ) - { - mvr2r( data_out_f[i], data_in_f[i], input_frame ); - } - } - - return; -} -#endif diff --git a/lib_rend/ivas_dirac_dec_binaural_functions.c b/lib_rend/ivas_dirac_dec_binaural_functions.c index 12d3c5038..6ead07ee0 100644 --- a/lib_rend/ivas_dirac_dec_binaural_functions.c +++ b/lib_rend/ivas_dirac_dec_binaural_functions.c @@ -43,15 +43,11 @@ #include "ivas_rom_binaural_crend_head.h" #include "ivas_rom_rend.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED Word16 slot_fx[4] = { 32767, 16384, 10922, 8192 }; -#endif /*------------------------------------------------------------------------- * Local constants @@ -62,17 +58,14 @@ Word16 slot_fx[4] = { 32767, 16384, 10922, 8192 }; #define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR ( 3.0f ) #define SBA_CARDI_TARGET_ENERGY_GAIN 0.5f -#define STEREO_PREPROCESS_IIR_FACTOR ( 0.9f ) -#ifdef IVAS_FLOAT_FIXED +#define STEREO_PREPROCESS_IIR_FACTOR ( 0.9f ) #define STEREO_PREPROCESS_IIR_FACTOR_Q15 ( 29491 ) -#endif /* powf(0.95f, 4.0f) for sub-frame smoothing instead of CLDFB slot */ #define ADAPT_HTPROTO_IIR_FAC 0.81450625f -#define ADAPT_HTPROTO_ILD_LIM_DB0 1.0f -#define ADAPT_HTPROTO_ILD_LIM_DB1 4.0f -#define ADAPT_HTPROTO_ROT_LIM_0 0.4f -#ifdef IVAS_FLOAT_FIXED +#define ADAPT_HTPROTO_ILD_LIM_DB0 1.0f +#define ADAPT_HTPROTO_ILD_LIM_DB1 4.0f +#define ADAPT_HTPROTO_ROT_LIM_0 0.4f #define ADAPT_HTPROTO_ROT_LIM_0_FX 429496736 // Q30 #define TWO_POINT_FIVE_IN_Q13 20480 // Q13 #define ADAPT_HTPROTO_IIR_FAC_FX 26689 // Q15 @@ -81,8 +74,7 @@ Word16 slot_fx[4] = { 32767, 16384, 10922, 8192 }; #define INV_TAN30_FX 28377 // Q14 #define EPSILON_MANT 1180591621 /* 1e-12 in Q70 */ #define EPSILON_EXP ( -39 ) -#endif -#define ADAPT_HTPROTO_ROT_LIM_1 0.8f +#define ADAPT_HTPROTO_ROT_LIM_1 0.8f #define MAX_GAIN_CACHE_SIZE ( ( MASA_MAXIMUM_DIRECTIONS * 3 ) + MAX_NUM_OBJECTS ) /* == different calls to get gains */ @@ -91,11 +83,7 @@ typedef struct hrtfGainCache int16_t azi; int16_t ele; -#ifndef IVAS_FLOAT_FIXED - float shVec[HRTF_SH_CHANNELS]; -#else Word32 shVec_fx[HRTF_SH_CHANNELS]; -#endif } PARAMBIN_HRTF_GAIN_CACHE; @@ -106,11 +94,7 @@ typedef struct parambin_rend_config_data MC_MODE mc_mode; int32_t ivas_total_brate; int16_t nchan_transport; -#ifndef IVAS_FLOAT_FIXED - float qualityBasedSmFactor; -#else Word32 qualityBasedSmFactor_fx; /* Q31 */ -#endif int16_t processReverb; ISM_MODE ism_mode; } PARAMBIN_REND_CONFIG, *PARAMBIN_REND_CONFIG_HANDLE; @@ -120,27 +104,12 @@ typedef struct parambin_rend_config_data * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_binaural_internal_fx( Decoder_Struct *st_ivas, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, Word32 *output_f[] /*Q11*/, const Word16 nchan_transport, const Word16 subframe ); -#else -static void ivas_dirac_dec_binaural_internal( Decoder_Struct *st_ivas, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, float *output_f[], const int16_t nchan_transport, const int16_t subframe ); - -static void ivas_dirac_dec_decorrelate_slot( DIRAC_DEC_BIN_HANDLE hDiracDecBin, const int16_t num_freq_bands, const int16_t slot, float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float decRe[][CLDFB_NO_CHANNELS_MAX], float decIm[][CLDFB_NO_CHANNELS_MAX] ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_decorrelate_slot_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, const Word16 num_freq_bands, const Word16 slot, Word32 inRe[][CLDFB_SLOTS_PER_SUBFRAME] /*q_inp*/[CLDFB_NO_CHANNELS_MAX], Word32 inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, Word16 q_inp, Word32 decRe[][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, Word32 decIm[] /*q_inp*/[CLDFB_NO_CHANNELS_MAX] ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, PARAMBIN_REND_CONFIG_HANDLE hConfig, Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q*/, Word32 inIm_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q*/, Word32 Rmat_fx[3][3] /*Q30*/, const Word16 subframe, const Word16 isHeadtracked, const MASA_ISM_DATA_HANDLE hMasaIsmData, Word16 q ); -#else -static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, PARAMBIN_REND_CONFIG_HANDLE hConfig, float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float Rmat[3][3], const int16_t subframe, const int16_t isHeadtracked, const MASA_ISM_DATA_HANDLE hMasaIsmData ); - -static void ivas_dirac_dec_binaural_determine_processing_matrices( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, PARAMBIN_REND_CONFIG_HANDLE hConfig, const int16_t max_band_decorr, float Rmat[3][3], const int16_t subframe, const int16_t isHeadtracked, const int16_t nchanSeparateChannels, const MASA_ISM_DATA_HANDLE hMasaIsmData ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_binaural_determine_processing_matrices_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, PARAMBIN_REND_CONFIG_HANDLE hConfig, const int16_t max_band_decorr, Word32 Rmat[3][3] /*Q30*/, const Word16 subframe, const Word16 isHeadtracked, const Word16 nchanSeparateChannels, const MASA_ISM_DATA_HANDLE hMasaIsmData ); static void ivas_dirac_dec_binaural_process_output_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, HANDLE_CLDFB_FILTER_BANK cldfbSynDec[MAX_OUTPUT_CHANNELS], Word32 *output_fx[] /*q_out*/, Word16 *q_out, Word32 inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, Word32 inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, const Word16 q_inp, const Word16 max_band_decorr, const Word16 numInChannels, const Word16 processReverb, const Word16 subframe, const Word16 q_mat ); @@ -148,225 +117,22 @@ static void ivas_dirac_dec_binaural_process_output_fx( DIRAC_DEC_BIN_HANDLE hDir static void adaptTransportSignalsHeadtracked_fx( COMBINED_ORIENTATION_HANDLE hHeadTrackData, Word32 inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, Word32 inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /*q_inp*/, Word16 q_inp, const Word16 nBins, const Word16 nSlots, Word32 Rmat[3][3] /*Q30*/ ); static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked_fx( COMBINED_ORIENTATION_HANDLE hHeadTrackData, Word32 inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const Word16 nBins, const Word16 nSlots, Word32 Rmat[3][3] /*Q30*/ ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_process_output( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, HANDLE_CLDFB_FILTER_BANK cldfbSynDec[MAX_OUTPUT_CHANNELS], float *output_f[], float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t max_band_decorr, const int16_t numInChannels, const int16_t processReverb, const int16_t subframe ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void adaptTransportSignalsHeadtracked( COMBINED_ORIENTATION_HANDLE hHeadTrackData, float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t nBins, const int16_t nSlots, float Rmat[3][3] ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( COMBINED_ORIENTATION_HANDLE hHeadTrackData, float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], const int16_t nBins, const int16_t nSlots, float Rmat[3][3] ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void formulate2x2MixingMatrix( float Ein1, float Ein2, float CinRe, float CinIm, float Eout1, float Eout2, float CoutRe, float CoutIm, float Q[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], const float regularizationFactor ); -#endif -#ifdef IVAS_FLOAT_FIXED static void hrtfShGetHrtf_fx( const Word16 bin, const Word16 aziDeg, const Word16 eleDeg, Word32 *lRealp, Word32 *lImagp, Word32 *rRealp, Word32 *rImagp, PARAMBIN_HRTF_GAIN_CACHE *gainCache, const Word16 useCachedValue ); -#else - -static void hrtfShGetHrtf( const int16_t bin, const int16_t aziDeg, const int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t useCachedValue ); -#endif -#ifdef IVAS_FLOAT_FIXED static void getDirectPartGains_fx( const Word16 bin, Word16 aziDeg, Word16 eleDeg, Word32 *lRealp, Word32 *lImagp, Word32 *rRealp, Word32 *rImagp, const UWord8 renderStereoOutputInsteadOfBinaural, Word32 Rmat[3][3] /*Q30*/, PARAMBIN_HRTF_GAIN_CACHE *gainCache, const Word16 isHeadtracked ); -#else - -static void getDirectPartGains( const int16_t bin, int16_t aziDeg, int16_t eleDeg, float *lRealp, float *lImagp, float *rRealp, float *rImagp, const uint8_t stereoMode, float Rmat[3][3], PARAMBIN_HRTF_GAIN_CACHE *gainCache, const int16_t isHeadtracked ); -static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); - -static void matrixTransp2Mul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_masa_ext_rend_parambin_internal_fx( MASA_EXT_REND_HANDLE hMasaExtRend, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, Word32 *output_fx[] /*Q11*/, const Word16 subframe ); -#else -static void ivas_masa_ext_rend_parambin_internal( MASA_EXT_REND_HANDLE hMasaExtRend, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, float *output_f[], const int16_t subframe ); -#endif -#ifdef IVAS_FLOAT_FIXED static void formulate2x2MixingMatrix_fx( Word32 Ein1_fx /*q_Ein*/, Word32 Ein2_fx /*q_Ein*/, Word16 q_Ein, Word32 CinRe_fx /*q_Cin*/, Word32 CinIm_fx /*q_Cin*/, Word16 q_Cin, Word32 Eout1_fx /*q_Eout*/, Word32 Eout2_fx /*q_Eout*/, Word16 q_Eout, Word32 CoutRe_fx /*q_Cout*/, Word32 CoutIm_fx /*q_Cout*/, Word16 q_Cout, Word32 Q_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*Q31*/, Word32 Mre_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_M*/, Word32 Mim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_M*/, Word16 *q_M, const Word16 regularizationFactor_fx /*Q14*/ ); static void matrixMul_fx( Word32 Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_A*/, Word32 Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_A*/, Word16 *q_A, Word32 Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_B*/, Word32 Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_B*/, Word16 *q_B, Word32 outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_out*/, Word32 outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_out*/, Word16 *q_out ); static void matrixTransp2Mul_fx( Word32 Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_A*/, Word32 Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_A*/, Word16 *q_A, Word32 Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_B*/, Word32 Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_B*/, Word16 *q_B, Word32 outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_out*/, Word32 outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] /*q_out*/, Word16 *q_out ); -#endif // 1 /*------------------------------------------------------------------------- * ivas_dirac_dec_init_binaural_data() * * Initialize parametric binaural renderer *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_init_binaural_data( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : HRTF structure for rendering */ -) -{ - DIRAC_DEC_BIN_HANDLE hDiracDecBin; - int16_t nBins; - int32_t output_Fs; - RENDERER_TYPE renderer_type; - int16_t j, k, bin; - float binCenterFreq, tmpFloat; - ivas_error error; - float frequency_axis[CLDFB_NO_CHANNELS_MAX]; - hDiracDecBin = st_ivas->hDiracDecBin; - - if ( hDiracDecBin == NULL ) - { - if ( ( hDiracDecBin = (DIRAC_DEC_BIN_HANDLE) malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); - } - - hDiracDecBin->hTdDecorr = NULL; - hDiracDecBin->hReverb = NULL; - hDiracDecBin->h_freq_domain_decorr_ap_params = NULL; - hDiracDecBin->h_freq_domain_decorr_ap_state = NULL; - } - - output_Fs = st_ivas->hDecoderConfig->output_Fs; - nBins = st_ivas->hSpatParamRendCom->num_freq_bands; - renderer_type = st_ivas->renderer_type; - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - for ( k = 0; k < BINAURAL_CHANNELS + MAX_NUM_OBJECTS; k++ ) - { - set_zero( hDiracDecBin->processMtxRe[j][k], nBins ); - set_zero( hDiracDecBin->processMtxIm[j][k], nBins ); - } - - for ( k = 0; k < BINAURAL_CHANNELS; k++ ) - { - set_zero( hDiracDecBin->processMtxDecRe[j][k], nBins ); - set_zero( hDiracDecBin->processMtxDecIm[j][k], nBins ); - } - set_zero( hDiracDecBin->ChEnePrev[j], nBins ); - set_zero( hDiracDecBin->ChEneOutPrev[j], nBins ); - } - set_zero( hDiracDecBin->ChCrossRePrev, nBins ); - set_zero( hDiracDecBin->ChCrossImPrev, nBins ); - set_zero( hDiracDecBin->ChCrossReOutPrev, nBins ); - set_zero( hDiracDecBin->ChCrossImOutPrev, nBins ); - hDiracDecBin->renderStereoOutputInsteadOfBinaural = 0; - - - for ( bin = 0; bin < nBins; bin++ ) - { - binCenterFreq = ( (float) bin + CLDFB_HALF_BIN_FREQUENCY_OFFSET ) / (float) nBins * ( (float) output_Fs / 2.0f ); - /* These formulas and values are from Christian Borss's publication for binaural diffuse field coherence */ - tmpFloat = max( 0.0f, 1.0f - binCenterFreq / 2700.0f ); - hDiracDecBin->diffuseFieldCoherence[bin] = tmpFloat * sinf( binCenterFreq * EVS_PI / 550.0f ) / ( binCenterFreq * EVS_PI / 550.0f ); - } - - for ( bin = 0; bin < BINAURAL_COHERENCE_DIFFERENCE_BINS; bin++ ) - { - hDiracDecBin->diffuseFieldCoherenceX[bin] = hDiracDecBin->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceX[bin]; - hDiracDecBin->diffuseFieldCoherenceY[bin] = hDiracDecBin->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceY[bin]; - hDiracDecBin->diffuseFieldCoherenceZ[bin] = hDiracDecBin->diffuseFieldCoherence[bin] + diffuseFieldCoherenceDifferenceZ[bin]; - } - - if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC ) /* Indication of binaural rendering without room effect */ - { - set_f( hDiracDecBin->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); - hDiracDecBin->hReverb = NULL; - } - else if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Indication of binaural rendering with room effect */ - { - mvr2r( hHrtfParambin->parametricEarlyPartEneCorrection, hDiracDecBin->earlyPartEneCorrection, nBins ); - - /* reconfiguration needed when Reverb. parameters are changed -> close and open the handle again */ - if ( hDiracDecBin->hReverb != NULL && ( ( hDiracDecBin->hReverb->numBins != nBins ) || - ( hDiracDecBin->hReverb->blockSize != CLDFB_SLOTS_PER_SUBFRAME ) ) ) - { - ivas_binaural_reverb_close( &( hDiracDecBin->hReverb ) ); - } - - if ( hDiracDecBin->hReverb == NULL ) - { - /* Todo Philips: Room acoustics should be passed here once the underlying part works. Probably enough to pick it from st_ivas but you know best. */ - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - set_f( hDiracDecBin->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); - hDiracDecBin->hReverb = NULL; - hDiracDecBin->renderStereoOutputInsteadOfBinaural = 1; - } - else /* Not valid renderer type for this renderer */ - { - assert( false ); - } - - hDiracDecBin->hDiffuseDist = NULL; /* Memory is allocated from stack during runtime when needed */ - - if ( hDiracDecBin->hTdDecorr == NULL ) - { - hDiracDecBin->useTdDecorr = 0; - } - - if ( hDiracDecBin->h_freq_domain_decorr_ap_params != NULL ) - { - ivas_dirac_dec_decorr_close( &hDiracDecBin->h_freq_domain_decorr_ap_params, &hDiracDecBin->h_freq_domain_decorr_ap_state ); - } - - if ( ( error = ivas_td_decorr_reconfig_dec( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->hDecoderConfig->output_Fs, &( hDiracDecBin->hTdDecorr ), &( hDiracDecBin->useTdDecorr ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( !hDiracDecBin->useTdDecorr && !( st_ivas->ivas_format == ISM_FORMAT && st_ivas->ism_mode == ISM_MODE_PARAM ) ) - { - ivas_dirac_dec_get_frequency_axis( frequency_axis, output_Fs, nBins ); - if ( ( error = ivas_dirac_dec_decorr_open( &( hDiracDecBin->h_freq_domain_decorr_ap_params ), - &( hDiracDecBin->h_freq_domain_decorr_ap_state ), - nBins, - BINAURAL_CHANNELS, - BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, - frequency_axis, - BINAURAL_CHANNELS, - output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - hDiracDecBin->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); - - st_ivas->hDiracDecBin = hDiracDecBin; - - /* allocate transport channels */ - if ( st_ivas->hTcBuffer == NULL ) - { - int16_t nchan_to_allocate; - int16_t n_samples_granularity; - - nchan_to_allocate = 2 * BINAURAL_CHANNELS; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - nchan_to_allocate = 2 * BINAURAL_CHANNELS + 2; - } - - n_samples_granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) - { - n_samples_granularity = NS2SA( st_ivas->hDecoderConfig->output_Fs, FRAME_SIZE_NS / MAX_PARAM_SPATIAL_SUBFRAMES ); /* Use the same granularity as tdrend */ - } - - if ( ( error = ivas_jbm_dec_tc_buffer_open( st_ivas, TC_BUFFER_MODE_RENDERER, ivas_jbm_dec_get_num_tc_channels( st_ivas ), nchan_to_allocate, nchan_to_allocate, n_samples_granularity ) ) != IVAS_ERR_OK ) - { - return error; - } - } - return IVAS_ERR_OK; -} -#else ivas_error ivas_dirac_dec_init_binaural_data_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : HRTF structure for rendering */ @@ -596,14 +362,12 @@ ivas_error ivas_dirac_dec_init_binaural_data_fx( } return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_close_binaural_data() * * Close parametric binaural renderer *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_close_binaural_data( DIRAC_DEC_BIN_HANDLE *hBinaural /* i/o: decoder DirAC binaural data handle */ ) @@ -631,41 +395,12 @@ void ivas_dirac_dec_close_binaural_data( return; } -#else -void ivas_dirac_dec_close_binaural_data( - DIRAC_DEC_BIN_HANDLE *hBinaural /* i/o: decoder DirAC binaural data handle */ -) -{ - - IF( hBinaural == NULL || *hBinaural == NULL ) - { - return; - } - - IF( ( *hBinaural )->hReverb != NULL ) - { - ivas_binaural_reverb_close( &( ( *hBinaural )->hReverb ) ); - } - - ivas_td_decorr_dec_close( &( ( *hBinaural )->hTdDecorr ) ); - IF( ( *hBinaural )->h_freq_domain_decorr_ap_params != NULL ) - { - ivas_dirac_dec_decorr_close( &( *hBinaural )->h_freq_domain_decorr_ap_params, &( *hBinaural )->h_freq_domain_decorr_ap_state ); - } - - free( *hBinaural ); - *hBinaural = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_binaural_copy_hrtfs() * * Temporary function for copying HRTF data from rom tables if no binary * file was given. *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_binaural_copy_hrtfs_fx( HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */ ) @@ -701,124 +436,8 @@ ivas_error ivas_dirac_dec_binaural_copy_hrtfs_fx( return IVAS_ERR_OK; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_binaural_copy_hrtfs( - HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */ -) -{ - int16_t i, j; - if ( hHrtfParambin != NULL && *hHrtfParambin != NULL ) - { - /* Tables already loaded from file */ - return IVAS_ERR_OK; - } - else - { - /* Initialise tables from ROM */ - HRTFS_PARAMBIN *hrtfParambin; - - if ( ( hrtfParambin = (HRTFS_PARAMBIN *) malloc( sizeof( HRTFS_PARAMBIN ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for parametric binauralizer HRTF tables" ); - } - - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) - { - mvr2r( hrtfShCoeffsRe[i][j], hrtfParambin->hrtfShCoeffsRe[i][j], HRTF_NUM_BINS ); - mvr2r( hrtfShCoeffsIm[i][j], hrtfParambin->hrtfShCoeffsIm[i][j], HRTF_NUM_BINS ); - } - } - - mvr2r( parametricReverberationTimes, hrtfParambin->parametricReverberationTimes, CLDFB_NO_CHANNELS_MAX ); - mvr2r( parametricReverberationEneCorrections, hrtfParambin->parametricReverberationEneCorrections, CLDFB_NO_CHANNELS_MAX ); - mvr2r( parametricEarlyPartEneCorrection, hrtfParambin->parametricEarlyPartEneCorrection, CLDFB_NO_CHANNELS_MAX ); - - *hHrtfParambin = hrtfParambin; - } - - return IVAS_ERR_OK; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * void ivas_dirac_dec_binaural_render() - * - * - *------------------------------------------------------------------------*/ -void ivas_dirac_dec_binaural_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailable, /* o : number of CLDFB slots still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -) -{ - int16_t slots_to_render, first_sf, last_sf, subframe_idx; - uint16_t slot_size, ch; - uint16_t nchan_out; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - float output_f_local_buff[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - int16_t output_length; - - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - nchan_out = BINAURAL_CHANNELS; - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] = output_f_local_buff[ch]; - } - slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS ); - - /* loop for synthesis, assume we always have to render in multiples of 5ms subframes with spills */ - slots_to_render = min( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered, nSamplesAsked / slot_size ); - *nSamplesRendered = slots_to_render * slot_size; - first_sf = hSpatParamRendCom->subframes_rendered; - last_sf = first_sf; - - while ( slots_to_render > 0 ) - { - slots_to_render -= hSpatParamRendCom->subframe_nbslots[last_sf]; - last_sf++; - } - - output_length = 0; - for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ ) - { - int16_t n_samples_sf = slot_size * hSpatParamRendCom->subframe_nbslots[subframe_idx]; - ivas_dirac_dec_binaural_internal( st_ivas, st_ivas->hCombinedOrientationData, output_f_local, nchan_transport, subframe_idx ); - - for ( ch = 0; ch < nchan_out; ch++ ) - { - output_f_local[ch] += n_samples_sf; - } - - output_length += n_samples_sf; - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf ); - } - - for ( ch = 0; ch < nchan_out; ch++ ) - { - mvr2r( output_f_local_buff[ch], output_f[ch], output_length ); - } - if ( hSpatParamRendCom->slots_rendered == hSpatParamRendCom->num_slots ) - { - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + DEFAULT_JBM_SUBFRAMES_5MS ) % hSpatParamRendCom->dirac_md_buffer_length; - } - *nSamplesAvailable = ( hSpatParamRendCom->num_slots - hSpatParamRendCom->slots_rendered ) * slot_size; - - return; -} -#else /*------------------------------------------------------------------------- * void ivas_dirac_dec_binaural_render_fx() * @@ -899,14 +518,12 @@ void ivas_dirac_dec_binaural_render_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_binaural_sba_gain() * * loudness correction for parametric binaural renderer *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_binaural_sba_gain_fx( Word32 *output[], /* i/o: synthesized core-coder transport channels/DirAC output, inp Qx, out Qx-1 */ const Word16 nchan_remapped, /* i : num channels after remapping of TCs */ @@ -934,293 +551,21 @@ void ivas_dirac_dec_binaural_sba_gain_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_binaural_sba_gain( - float *output[], /* i/o: synthesized core-coder transport channels/DirAC output */ - const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t n; - float gain; - - if ( nchan_remapped == 1 ) - { - gain = 1.4454f; - } - else - { - gain = 1.3657f; - } - - for ( n = 0; n < nchan_remapped; n++ ) - { - v_multc( output[n], gain, output[n], output_frame ); - } - return; -} -#endif /*------------------------------------------------------------------------- * Local functions *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_internal( +static void ivas_dirac_dec_binaural_internal_fx( Decoder_Struct *st_ivas, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - float *output_f[], - const int16_t nchan_transport, - const int16_t subframe ) + Word32 *output_fx[], /*Q11*/ + const Word16 nchan_transport, + const Word16 subframe ) { - DIRAC_DEC_BIN_HANDLE hDiracDecBin; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - PARAMBIN_REND_CONFIG config_data; - int16_t slot, ch, numInChannels; - float Cldfb_RealBuffer_in[6][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_in[6][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - for ( int i = 0; i < 6; i++ ) - { - for ( int j = 0; j < 4; j++ ) - { - set_zero( Cldfb_RealBuffer_in[i][j], 60 ); - set_zero( Cldfb_ImagBuffer_in[i][j], 60 ); - } - } - int16_t nchanSeparateChannels; - float Rmat[3][3]; - int16_t max_band_decorr; - DIFFUSE_DISTRIBUTION_DATA diffuseDistData; - int16_t nBins, offsetSamples; - int16_t i, j; - hDiracDecBin = st_ivas->hDiracDecBin; - assert( hDiracDecBin ); - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - nBins = hSpatParamRendCom->num_freq_bands; - offsetSamples = hSpatParamRendCom->slots_rendered * nBins; - - /* Setup internal config */ - config_data.separateCenterChannelRendering = st_ivas->hOutSetup.separateChannelEnabled; - config_data.ivas_format = st_ivas->ivas_format; - config_data.mc_mode = st_ivas->mc_mode; - config_data.ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; - config_data.nchan_transport = st_ivas->nchan_transport; - config_data.qualityBasedSmFactor = st_ivas->hMasa != NULL ? st_ivas->hMasa->data.dir_decode_quality : 1.0f; - config_data.processReverb = st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ? 1 : 0; - if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - config_data.ism_mode = st_ivas->ism_mode; - } - else - { - config_data.ism_mode = ISM_MODE_NONE; - } - - /* The input channel number at this processing function (not nchan_transport) */ - numInChannels = BINAURAL_CHANNELS; - if ( config_data.separateCenterChannelRendering || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) ) - { - numInChannels++; - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC && ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - numInChannels += (uint8_t) st_ivas->nchan_ism; - } - - Rmat[0][0] = 1.0f; - Rmat[0][1] = 0.0f; - Rmat[0][2] = 0.0f; - - Rmat[1][0] = 0.0f; - Rmat[1][1] = 1.0f; - Rmat[1][2] = 0.0f; - - Rmat[2][0] = 0.0f; - Rmat[2][1] = 0.0f; - Rmat[2][2] = 1.0f; - - /* CLDFB Analysis of input */ - for ( slot = 0; slot < hSpatParamRendCom->subframe_nbslots[subframe]; slot++ ) - { - for ( ch = 0; ch < numInChannels; ch++ ) - { - if ( ch == 0 || nchan_transport == 2 ) - { - cldfbAnalysis_ts_ivas( - &( st_ivas->hTcBuffer->tc[ch][nBins * slot + offsetSamples] ), - Cldfb_RealBuffer_in[ch][slot], - Cldfb_ImagBuffer_in[ch][slot], - nBins, st_ivas->cldfbAnaDec[ch] ); - } - else if ( config_data.nchan_transport == 2 ) /* Stereo signal transmitted as mono with DFT stereo */ - { - /* At mono input duplicate the channel to dual-mono */ - mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); - mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); - } - else /* when nchan_transport == 1 and ch == 1 */ - { - /* CNA and HB FD-CNG*/ - if ( st_ivas->hSCE[0]->hCoreCoder[0] != NULL && st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag ) - { - int16_t numCoreBands, b; - int16_t slotInFrame; - - numCoreBands = st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->numCoreBands; - slotInFrame = hSpatParamRendCom->slots_rendered + slot; - - generate_masking_noise_dirac( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom, - st_ivas->cldfbAnaDec[1], - st_ivas->hTcBuffer->tc[nchan_transport], - Cldfb_RealBuffer_in[2][slot], Cldfb_ImagBuffer_in[2][slot], - slotInFrame, - st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->hSCE[0]->hCoreCoder[0]->flag_cna, - ( st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA || st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 ) && ( st_ivas->hSCE[0]->hCoreCoder[0]->cng_type == FD_CNG ) && st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag ); - - generate_masking_noise_dirac( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom, - st_ivas->cldfbAnaDec[1], /*nothing will be analyzed, just get cnst*/ - NULL, - Cldfb_RealBuffer_in[1][slot], Cldfb_ImagBuffer_in[1][slot], - slotInFrame, - st_ivas->hSCE[0]->hCoreCoder[0]->cna_dirac_flag && st_ivas->hSCE[0]->hCoreCoder[0]->flag_cna, - ( st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == FRAME_NO_DATA || st_ivas->hSCE[0]->hCoreCoder[0]->core_brate == SID_2k40 ) && ( st_ivas->hSCE[0]->hCoreCoder[0]->cng_type == FD_CNG ) && st_ivas->hSCE[0]->hCoreCoder[0]->cng_sba_flag ); - - /* LB: Copy first channel + LB-CNG to first and second channels with same scaling (dual-mono)*/ - for ( b = 0; b < numCoreBands; b++ ) - { - Cldfb_RealBuffer_in[0][slot][b] = INV_SQRT2 * ( Cldfb_RealBuffer_in[0][slot][b] + Cldfb_RealBuffer_in[2][slot][b] ); - Cldfb_RealBuffer_in[1][slot][b] = Cldfb_RealBuffer_in[0][slot][b]; - Cldfb_ImagBuffer_in[0][slot][b] = INV_SQRT2 * ( Cldfb_ImagBuffer_in[0][slot][b] + Cldfb_ImagBuffer_in[2][slot][b] ); - Cldfb_ImagBuffer_in[1][slot][b] = Cldfb_ImagBuffer_in[0][slot][b]; - } - - /* HB: Copy first channel to second channel and add HB-CNGs with different scalings*/ - for ( ; b < nBins; b++ ) - { - Cldfb_RealBuffer_in[0][slot][b] *= INV_SQRT2; - Cldfb_RealBuffer_in[1][slot][b] = Cldfb_RealBuffer_in[0][slot][b] + 0.5f * Cldfb_RealBuffer_in[1][slot][b] + Cldfb_RealBuffer_in[0][slot][b]; - Cldfb_RealBuffer_in[0][slot][b] += 0.5f * Cldfb_RealBuffer_in[2][slot][b]; - - Cldfb_ImagBuffer_in[0][slot][b] *= INV_SQRT2; - Cldfb_ImagBuffer_in[1][slot][b] = Cldfb_ImagBuffer_in[0][slot][b] + 0.5f * Cldfb_ImagBuffer_in[1][slot][b]; - Cldfb_ImagBuffer_in[0][slot][b] += 0.5f * Cldfb_ImagBuffer_in[2][slot][b]; - } - } - else - { - /* At mono input duplicate the channel to dual-mono, and apply gain - correction to ensure same overall level as in stereo mode */ - v_multc( Cldfb_RealBuffer_in[0][slot], INV_SQRT_2, Cldfb_RealBuffer_in[0][slot], nBins ); - v_multc( Cldfb_ImagBuffer_in[0][slot], INV_SQRT_2, Cldfb_ImagBuffer_in[0][slot], nBins ); - - mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); - mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); - } - } - } - - if ( hDiracDecBin->useTdDecorr ) - { - for ( ch = BINAURAL_CHANNELS; ch < ( 2 * BINAURAL_CHANNELS ); ch++ ) - { - cldfbAnalysis_ts_ivas( - &( st_ivas->hTcBuffer->tc[ch][nBins * slot + offsetSamples] ), - Cldfb_RealBuffer_in[ch][slot], - Cldfb_ImagBuffer_in[ch][slot], - nBins, st_ivas->cldfbAnaDec[ch] ); - if ( config_data.nchan_transport == 1 && - ( config_data.ivas_format == SBA_FORMAT || config_data.ivas_format == SBA_ISM_FORMAT ) ) - { - v_multc( Cldfb_RealBuffer_in[ch][slot], INV_SQRT_2, Cldfb_RealBuffer_in[ch][slot], nBins ); - v_multc( Cldfb_ImagBuffer_in[ch][slot], INV_SQRT_2, Cldfb_ImagBuffer_in[ch][slot], nBins ); - } - } - } - } - - if ( config_data.ivas_format == SBA_FORMAT || config_data.ivas_format == SBA_ISM_FORMAT ) - { - hDiracDecBin->hDiffuseDist = &diffuseDistData; - - ivas_spar_param_to_masa_param_mapping( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, subframe ); - ivas_sba_prototype_renderer( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, subframe ); - } - - if ( st_ivas->ivas_format == MASA_ISM_FORMAT && nchan_transport == 2 && st_ivas->ism_mode != ISM_MASA_MODE_DISC && st_ivas->ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ ) - { - ivas_omasa_preProcessStereoTransportsForMovedObjects( st_ivas, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, subframe ); - } - - if ( hCombinedOrientationData ) - { - for ( i = 0; i < 3; i++ ) - { - for ( j = 0; j < 3; j++ ) - { - Rmat[i][j] = hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx][i][j]; - } - } - - if ( nchan_transport == 2 ) - { - adaptTransportSignalsHeadtracked( hCombinedOrientationData, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, hSpatParamRendCom->subframe_nbslots[subframe], Rmat ); - - ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( hCombinedOrientationData, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, hSpatParamRendCom->subframe_nbslots[subframe], Rmat ); - } - } - - ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( hDiracDecBin, hSpatParamRendCom, &config_data, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, Rmat, subframe, - hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, st_ivas->hMasaIsmData ); - - if ( config_data.ivas_format == ISM_FORMAT ) - { - max_band_decorr = 0; - } - else if ( hDiracDecBin->useTdDecorr ) - { - max_band_decorr = CLDFB_NO_CHANNELS_MAX; - } - else - { - max_band_decorr = hDiracDecBin->h_freq_domain_decorr_ap_params->max_band_decorr; - } - - - nchanSeparateChannels = 0; - if ( config_data.separateCenterChannelRendering || ( st_ivas->ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) ) ) - { - nchanSeparateChannels = 1; - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC && ( st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) ) - { - nchanSeparateChannels = (uint8_t) st_ivas->nchan_ism; - } - - ivas_dirac_dec_binaural_determine_processing_matrices( hDiracDecBin, hSpatParamRendCom, &config_data, max_band_decorr, Rmat, subframe, - hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, nchanSeparateChannels, st_ivas->hMasaIsmData ); - - ivas_dirac_dec_binaural_process_output( hDiracDecBin, hSpatParamRendCom, st_ivas->cldfbSynDec, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, config_data.processReverb, subframe ); - - hDiracDecBin->hDiffuseDist = NULL; - - hSpatParamRendCom->slots_rendered += hSpatParamRendCom->subframe_nbslots[subframe]; - hSpatParamRendCom->subframes_rendered++; - - return; -} -#else -static void ivas_dirac_dec_binaural_internal_fx( - Decoder_Struct *st_ivas, - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - Word32 *output_fx[], /*Q11*/ - const Word16 nchan_transport, - const Word16 subframe ) -{ - Word16 q_input = 11; - move16(); - IF( st_ivas->hSCE[0] ) + Word16 q_input = 11; + move16(); + IF( st_ivas->hSCE[0] ) { Word16 shift = getScaleFactor32( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevel, FFTCLDFBLEN ); IF( LT_16( sub( st_ivas->hSCE[0]->hCoreCoder[0]->hFdCngDec->hFdCngCom->cngNoiseLevelExp, shift ), 4 ) ) @@ -1638,66 +983,8 @@ static void ivas_dirac_dec_binaural_internal_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_decorrelate_slot( - DIRAC_DEC_BIN_HANDLE hDiracDecBin, - const int16_t num_freq_bands, - const int16_t slot, - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float decRe[][CLDFB_NO_CHANNELS_MAX], - float decIm[][CLDFB_NO_CHANNELS_MAX] ) -{ - int16_t offset, ch, bin; - float onset_filter[BINAURAL_CHANNELS * CLDFB_NO_CHANNELS_MAX]; /* 2 ch, 60 bins */ - float decorrelatedFrameInterleaved[2 * BINAURAL_CHANNELS * CLDFB_NO_CHANNELS_MAX]; /* 2 ch, real + imag, 60 bins */ - float protoFrameF[2 * BINAURAL_CHANNELS * CLDFB_NO_CHANNELS_MAX]; /* 2 ch, real + imag, 60 bins */ - const int16_t protoIndexDir[BINAURAL_CHANNELS] = { 0, 1 }; - - /* Decorrelation needs interleaved data. Copy left and right signals to proto_frame_f */ - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - offset = num_freq_bands * BINAURAL_CHANNELS * ch; - for ( bin = 0; bin < num_freq_bands; bin++ ) - { - protoFrameF[( bin * BINAURAL_CHANNELS ) + offset] = inRe[ch][slot][bin]; - protoFrameF[( bin * BINAURAL_CHANNELS ) + offset + 1] = inIm[ch][slot][bin]; - } - } - - /* Decorrelate proto signal to decorrelatedFrameInterleaved */ - ivas_dirac_dec_decorr_process( num_freq_bands, - BINAURAL_CHANNELS, - BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, - BINAURAL_CHANNELS, - protoFrameF, - BINAURAL_CHANNELS, - protoIndexDir, - decorrelatedFrameInterleaved, - onset_filter, - hDiracDecBin->h_freq_domain_decorr_ap_params, - hDiracDecBin->h_freq_domain_decorr_ap_state ); - - /* De-interleave decorrelated signals*/ - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - offset = num_freq_bands * BINAURAL_CHANNELS * ch; - for ( bin = 0; bin < num_freq_bands; bin++ ) - { - decRe[ch][bin] = decorrelatedFrameInterleaved[( bin * BINAURAL_CHANNELS ) + offset]; - decIm[ch][bin] = decorrelatedFrameInterleaved[( bin * BINAURAL_CHANNELS ) + offset + 1]; - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_decorrelate_slot_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, const Word16 num_freq_bands, @@ -1734,504 +1021,34 @@ static void ivas_dirac_dec_decorrelate_slot_fx( ivas_dirac_dec_decorr_process_fx( num_freq_bands, BINAURAL_CHANNELS, BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, - BINAURAL_CHANNELS, - protoFrame_fx, - q_protoFrame, - BINAURAL_CHANNELS, - protoIndexDir, - decorrelatedFrameInterleaved_fx, - &q_decorrelatedFrameInterleaved, - onset_filter_fx, - hDiracDecBin->h_freq_domain_decorr_ap_params, - hDiracDecBin->h_freq_domain_decorr_ap_state ); - - /* De-interleave decorrelated signals*/ - FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - offset = imult1616( imult1616( num_freq_bands, BINAURAL_CHANNELS ), ch ); - FOR( bin = 0; bin < num_freq_bands; bin++ ) - { - decRe[ch][bin] = decorrelatedFrameInterleaved_fx[add( imult1616( bin, BINAURAL_CHANNELS ), offset )]; // q_inp - decIm[ch][bin] = decorrelatedFrameInterleaved_fx[add( imult1616( bin, BINAURAL_CHANNELS ), add( offset, 1 ) )]; // q_inp - move32(); - move32(); - } - } - // q_decorrelatedFrameInterleaved will be same as q_inp/q_protoFrame // - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( - DIRAC_DEC_BIN_HANDLE hDiracDecBin, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - PARAMBIN_REND_CONFIG_HANDLE hConfig, - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float Rmat[3][3], - const int16_t subframe, - const int16_t isHeadtracked, - const MASA_ISM_DATA_HANDLE hMasaIsmData ) -{ - int16_t ch, slot, bin; - int16_t separateCenterChannelRendering; - int16_t nBins, idx; - float frameMeanDiffusenessEneWeight[CLDFB_NO_CHANNELS_MAX]; - float IIReneLimiterFactor; - float qualityBasedSmFactor; - float lowBitRateEQ[CLDFB_NO_CHANNELS_MAX]; - uint8_t applyLowBitRateEQ; - int16_t dirac_read_idx; - float subFrameTotalEne[CLDFB_NO_CHANNELS_MAX]; - PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_GAIN_CACHE_SIZE]; - IVAS_FORMAT ivas_format; - MC_MODE mc_mode; - int32_t ivas_total_brate; - int16_t nchan_transport; - int16_t gainCacheBaseIndex; - - separateCenterChannelRendering = hConfig->separateCenterChannelRendering; - ivas_format = hConfig->ivas_format; - mc_mode = hConfig->mc_mode; - ivas_total_brate = hConfig->ivas_total_brate; - nchan_transport = hConfig->nchan_transport; - qualityBasedSmFactor = hConfig->qualityBasedSmFactor; - qualityBasedSmFactor *= qualityBasedSmFactor; - nBins = hSpatParamRendCom->num_freq_bands; /* Actually bins */ - - set_zero( hDiracDecBin->ChCrossRe, nBins ); - set_zero( hDiracDecBin->ChCrossIm, nBins ); - set_zero( hDiracDecBin->ChCrossReOut, nBins ); - set_zero( hDiracDecBin->ChCrossImOut, nBins ); - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - set_zero( hDiracDecBin->ChEne[ch], nBins ); - set_zero( hDiracDecBin->ChEneOut[ch], nBins ); - } - set_zero( hDiracDecBin->frameMeanDiffuseness, nBins ); - - set_zero( frameMeanDiffusenessEneWeight, CLDFB_NO_CHANNELS_MAX ); - - for ( idx = 0; idx < MAX_GAIN_CACHE_SIZE; idx++ ) - { - gainCache[idx].azi = -1000; /* Use -1000 as value for uninitialized cache. */ - } - - /* Determine EQ for low bit rates (13.2 and 16.4 kbps) */ - applyLowBitRateEQ = 0; - if ( ( ivas_format == MASA_FORMAT || ivas_format == MC_FORMAT ) && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) - { - applyLowBitRateEQ = 1; - if ( ivas_total_brate == IVAS_16k4 ) - { - for ( bin = 0; bin < LOW_BIT_RATE_BINAURAL_EQ_BINS; bin++ ) - { - lowBitRateEQ[bin + LOW_BIT_RATE_BINAURAL_EQ_OFFSET] = lowBitRateBinauralEQ[bin] * 0.5f + 0.5f; - } - } - else - { - for ( bin = 0; bin < LOW_BIT_RATE_BINAURAL_EQ_BINS; bin++ ) - { - lowBitRateEQ[bin + LOW_BIT_RATE_BINAURAL_EQ_OFFSET] = lowBitRateBinauralEQ[bin]; - } - } - } - - /* Formulate input and target covariance matrices for this subframe */ - set_zero( subFrameTotalEne, CLDFB_NO_CHANNELS_MAX ); - dirac_read_idx = hSpatParamRendCom->render_to_md_map[subframe]; - - /* Calculate input covariance matrix */ - for ( slot = 0; slot < hSpatParamRendCom->subframe_nbslots[subframe]; slot++ ) - { - for ( bin = 0; bin < nBins; bin++ ) - { - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - float instEne; - - instEne = ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ); - instEne += ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); - hDiracDecBin->ChEne[ch][bin] += instEne; - subFrameTotalEne[bin] += instEne; - } - hDiracDecBin->ChCrossRe[bin] += inRe[0][slot][bin] * inRe[1][slot][bin]; - hDiracDecBin->ChCrossRe[bin] += inIm[0][slot][bin] * inIm[1][slot][bin]; - hDiracDecBin->ChCrossIm[bin] += inRe[0][slot][bin] * inIm[1][slot][bin]; - hDiracDecBin->ChCrossIm[bin] -= inIm[0][slot][bin] * inRe[1][slot][bin]; - } - } - - /* Apply EQ at low bit rates */ - if ( applyLowBitRateEQ ) - { - int16_t lastEqBin = LOW_BIT_RATE_BINAURAL_EQ_OFFSET + LOW_BIT_RATE_BINAURAL_EQ_BINS - 1; - - for ( bin = LOW_BIT_RATE_BINAURAL_EQ_OFFSET; bin < lastEqBin; bin++ ) - { - subFrameTotalEne[bin] *= lowBitRateEQ[bin]; - } - for ( ; bin < nBins; bin++ ) - { - subFrameTotalEne[bin] *= lowBitRateEQ[lastEqBin]; - } - } - - if ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && nchan_transport == 2 ) - { - float tempRe, tempIm; - float subFrameSumEne[CLDFB_NO_CHANNELS_MAX]; - - v_multc( subFrameTotalEne, SBA_CARDI_TARGET_ENERGY_GAIN, subFrameTotalEne, nBins ); - - set_zero( subFrameSumEne, CLDFB_NO_CHANNELS_MAX ); - for ( slot = 0; slot < hSpatParamRendCom->subframe_nbslots[subframe]; slot++ ) - { - for ( bin = 0; bin < nBins; bin++ ) - { - tempRe = inRe[0][slot][bin] + inRe[1][slot][bin]; - tempIm = inIm[0][slot][bin] + inIm[1][slot][bin]; - subFrameSumEne[bin] += tempRe * tempRe + tempIm * tempIm; - } - } - for ( bin = 0; bin < nBins; bin++ ) - { - subFrameTotalEne[bin] = max( subFrameTotalEne[bin], subFrameSumEne[bin] ); - } - } - - /* Determine target covariance matrix containing target binaural properties */ - for ( bin = 0; bin < nBins; bin++ ) - { - float diffuseness = 1.0f; /* ratio1 and ratio2 are subtracted from diffuseness further below */ - float diffusenessValForDecorrelationReduction = 1.0f; - float diffEneValForDecorrelationReduction; - float surCoh = 0.0f, spreadCoh = 0.0f; /* Default values if spreadSurroundCoherenceApplied == false */ - float diffEne, dirEne, meanEnePerCh; - int16_t dirIndex; - - /* When BINAURAL_ROOM is not indicated, hBinaural->earlyPartEneCorrection[bin] values are all 1.0f. - * When BINAURAL_ROOM is indicated, the binaural audio output is based on combined use of the - * HRTF data set and a BRIR-based data set. The HRTF data set is spectrally corrected to match - * the early spectrum of the BRIR data, using the spectral correction data in - * hBinaural->earlyPartEneCorrection[bin], based on the BRIR set. */ - meanEnePerCh = hDiracDecBin->earlyPartEneCorrection[bin] * subFrameTotalEne[bin] / 2.0f; - - /* Determine direct part target covariance matrix (for 1 or 2 directions) */ - for ( dirIndex = 0; dirIndex < hSpatParamRendCom->numSimultaneousDirections; dirIndex++ ) - { - int16_t aziDeg, eleDeg; - float lRealp, lImagp, rRealp, rImagp; - float lRealpTmp, lImagpTmp, rRealpTmp, rImagpTmp; - float hrtfEne[BINAURAL_CHANNELS], hrtfCrossRe, hrtfCrossIm, ratio_float; - uint8_t isIsmDirection = 0; - - if ( dirIndex == 0 ) /* For first of the two simultaneous directions */ - { - aziDeg = hSpatParamRendCom->azimuth[dirac_read_idx][bin]; - eleDeg = hSpatParamRendCom->elevation[dirac_read_idx][bin]; - ratio_float = hSpatParamRendCom->energy_ratio1[dirac_read_idx][bin]; - spreadCoh = hSpatParamRendCom->spreadCoherence[dirac_read_idx][bin]; - gainCacheBaseIndex = 0; - } - else if ( ivas_format != MASA_ISM_FORMAT || ( ivas_format == MASA_ISM_FORMAT && dirIndex < hSpatParamRendCom->numParametricDirections ) ) /* For second of the two simultaneous directions */ - { - if ( ( ratio_float = hSpatParamRendCom->energy_ratio2[dirac_read_idx][bin] ) < 0.001 ) - { - /* This touches only MASA path where second direction always has smaller ratio and - * for non-2dir it is zero. As the whole direction contribution is multiplied with - * the ratio, a very small ratio does not contribute any energy to output. Thus, - * it is better to save complexity. */ - continue; - } - aziDeg = hSpatParamRendCom->azimuth2[dirac_read_idx][bin]; - eleDeg = hSpatParamRendCom->elevation2[dirac_read_idx][bin]; - spreadCoh = hSpatParamRendCom->spreadCoherence2[dirac_read_idx][bin]; - gainCacheBaseIndex = 3; - } - else /* For object directions of MASA_ISM_FORMAT */ - { - isIsmDirection = 1; - uint16_t ismDirIndex; - ismDirIndex = dirIndex - hSpatParamRendCom->numParametricDirections; - assert( hMasaIsmData != NULL && "hMasaIsmData should not be NULL if we use it" ); - if ( hMasaIsmData->ism_is_edited[ismDirIndex] ) - { - aziDeg = hMasaIsmData->azimuth_ism_edited[ismDirIndex]; - eleDeg = hMasaIsmData->elevation_ism_edited[ismDirIndex]; - } - else - { - aziDeg = hMasaIsmData->azimuth_ism[ismDirIndex][dirac_read_idx]; - eleDeg = hMasaIsmData->elevation_ism[ismDirIndex][dirac_read_idx]; - } - ratio_float = hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; - spreadCoh = 0.0f; - gainCacheBaseIndex = 6 + ismDirIndex; - } - - diffuseness -= ratio_float; /* diffuseness = 1 - ratio1 - ratio2 */ - - if ( diffuseness < 0.0f ) - { - diffuseness = 0.0f; - } - if ( isIsmDirection ) - { - /* Objects cause lesser decorrelation reduction, to avoid removing all decorrelation when only objects are present */ - diffusenessValForDecorrelationReduction -= ratio_float * 0.5f; - } - else - { - diffusenessValForDecorrelationReduction -= ratio_float; - } - - if ( separateCenterChannelRendering ) - { - /* In masa + mono rendering mode, the center directions originate from phantom sources, so the - * spread coherence is increased */ - float aziRad, eleRad, doaVectorX, spatialAngleDeg, altSpreadCoh; - - aziRad = (float) aziDeg * PI_OVER_180; - eleRad = (float) eleDeg * PI_OVER_180; - doaVectorX = cosf( aziRad ) * cosf( eleRad ); - spatialAngleDeg = acosf( doaVectorX ) * _180_OVER_PI; - altSpreadCoh = 1.0f - ( spatialAngleDeg / 30.0f ); - spreadCoh = max( spreadCoh, altSpreadCoh ); - } - - getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex], isHeadtracked ); - - if ( hDiracDecBin->renderStereoOutputInsteadOfBinaural ) - { - /* Synthesizing spread coherence is not needed for stereo loudspeaker output, - * as directional sound is reproduced with two loudspeakers in any case */ - spreadCoh = 0.0f; - } - - if ( spreadCoh > 0.0f ) - { - float centerMul, sidesMul; - float hrtfEneCenter, hrtfEneSides, hrtfEneRealized, eneCorrectionFactor; - float w1, w2, w3, eq; - - hrtfEneCenter = ( lRealp * lRealp ) + ( lImagp * lImagp ) + ( rRealp * rRealp ) + ( rImagp * rImagp ); - - /* Spread coherence is synthesized as coherent sources at 30 degree horizontal spacing. - * The following formulas determine the gains for these sources. - * spreadCoh = 0: Only panning - * spreadCoh = 0.5: Three sources coherent panning (e.g. 30 0 -30 deg azi) - * spreadCoh = 1.0: Two sources coherent panning with gap (as above, but center is silent) */ - if ( spreadCoh < 0.5f ) - { - /* 0.0f < spreadCoh < 0.5f */ - sidesMul = 0.5774f * spreadCoh * 2.0f; /* sqrt(1/3) = 0.5774f */ - centerMul = 1.0f - ( spreadCoh * 2.0f ) + sidesMul; - } - else - { - /* 0.5f <= spreadCoh < 1.0f */ - centerMul = 2.0f - ( 2.0f * spreadCoh ); - sidesMul = inv_sqrt( centerMul + 2.0f ); - centerMul *= sidesMul; - } - - /* Apply the gain for the center source of the three coherent sources */ - lRealp *= centerMul; - lImagp *= centerMul; - rRealp *= centerMul; - rImagp *= centerMul; - - /* Apply the gain for the left source of the three coherent sources */ - getDirectPartGains( bin, aziDeg + 30, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 1], isHeadtracked ); - - hrtfEneSides = ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); - lRealp += sidesMul * lRealpTmp; - lImagp += sidesMul * lImagpTmp; - rRealp += sidesMul * rRealpTmp; - rImagp += sidesMul * rImagpTmp; - - /* Apply the gain for the right source of the three coherent sources. - * -30 degrees to 330 wrapping due to internal functions. */ - getDirectPartGains( bin, aziDeg + 330, eleDeg, &lRealpTmp, &lImagpTmp, &rRealpTmp, &rImagpTmp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[gainCacheBaseIndex + 2], isHeadtracked ); - hrtfEneSides += ( lRealpTmp * lRealpTmp ) + ( lImagpTmp * lImagpTmp ) + ( rRealpTmp * rRealpTmp ) + ( rImagpTmp * rImagpTmp ); - lRealp += sidesMul * lRealpTmp; - lImagp += sidesMul * lImagpTmp; - rRealp += sidesMul * rRealpTmp; - rImagp += sidesMul * rImagpTmp; - - /* Formulate an eneCorrectionFactor that compensates for the coherent summation of the HRTFs */ - hrtfEneRealized = ( lRealp * lRealp ) + ( lImagp * lImagp ) + ( rRealp * rRealp ) + ( rImagp * rImagp ); - eneCorrectionFactor = ( ( hrtfEneSides * sidesMul * sidesMul ) + - ( hrtfEneCenter * centerMul * centerMul ) ) / - max( 1e-12f, hrtfEneRealized ); - - /* Weighting factors to determine appropriate target spectrum for spread coherent sound */ - if ( spreadCoh < 0.5 ) - { - w1 = 1.0f - 2.0f * spreadCoh; - w2 = 2.0f * spreadCoh; - w3 = 0.0f; - } - else - { - w1 = 0.0f; - w2 = 2.0f - 2.0f * spreadCoh; - w3 = 2.0f * spreadCoh - 1.0f; - } - - if ( ( ivas_format == MC_FORMAT && mc_mode == MC_MODE_MCMASA ) ) - { - idx = min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 ); - - /* Apply the target spectrum to the eneCorrectionFactor */ - if ( separateCenterChannelRendering ) /* spreadCoh mostly originates from phantom sources in separate channel rendering mode */ - { - eneCorrectionFactor *= w1 * 1.0f + ( w2 + w3 ) * spreadCohEne1[idx]; - } - else - { - eneCorrectionFactor *= w1 * 1.0f + w2 * spreadCohEne05[idx] + w3 * spreadCohEne1[idx]; - } - } - - /* Equalize the spread coherent combined HRTFs */ - eq = min( 4.0f, sqrtf( eneCorrectionFactor ) ); - lRealp *= eq; - lImagp *= eq; - rRealp *= eq; - rImagp *= eq; - } - - hrtfEne[0] = ( lRealp * lRealp ) + ( lImagp * lImagp ); - hrtfEne[1] = ( rRealp * rRealp ) + ( rImagp * rImagp ); - hrtfCrossRe = ( lRealp * rRealp ) + ( lImagp * rImagp ); - hrtfCrossIm = ( -lImagp * rRealp ) + ( lRealp * rImagp ); - - /* Add direct part (1 or 2) covariance matrix */ - dirEne = ratio_float * meanEnePerCh; - hDiracDecBin->ChEneOut[0][bin] += dirEne * hrtfEne[0]; /* Dir ene part*/ - hDiracDecBin->ChEneOut[1][bin] += dirEne * hrtfEne[1]; - hDiracDecBin->ChCrossReOut[bin] += dirEne * hrtfCrossRe; /* Dir cross re */ - hDiracDecBin->ChCrossImOut[bin] += dirEne * hrtfCrossIm; /* Dir cross im */ - } - - /* Add diffuse / ambient part covariance matrix */ - diffuseness = max( 0.0f, diffuseness ); - diffEne = diffuseness * meanEnePerCh; - surCoh = hSpatParamRendCom->surroundingCoherence[dirac_read_idx][bin]; - - diffusenessValForDecorrelationReduction = max( 0.0f, diffusenessValForDecorrelationReduction ); - diffEneValForDecorrelationReduction = diffusenessValForDecorrelationReduction * meanEnePerCh; - - if ( ( ivas_format == MC_FORMAT && mc_mode == MC_MODE_MCMASA ) ) - { - if ( !hDiracDecBin->renderStereoOutputInsteadOfBinaural ) - { - float spectrumModVal; - - idx = min( bin, MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS - 1 ); - /* Apply target spectrum that emphasizes low frequencies when the sound is surround coherent */ - spectrumModVal = ( 1.0f - surCoh ) + surCoh * surCohEne[idx]; - diffEne *= spectrumModVal; - - /* Modify also the value for decorrelation reduction */ - diffEneValForDecorrelationReduction *= spectrumModVal; - } - } - hDiracDecBin->ChEneOut[0][bin] += diffEne; /* Diff ene part*/ - hDiracDecBin->ChEneOut[1][bin] += diffEne; - - if ( hDiracDecBin->renderStereoOutputInsteadOfBinaural ) - { - /* When rendering stereo, ambience (except for surround coherent sound) has zero ICC. */ - hDiracDecBin->ChCrossReOut[bin] += surCoh * diffEne; - } - else /* When rendering binaural, ambience has frequency dependent ICC. */ - { - if ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && bin < BINAURAL_COHERENCE_DIFFERENCE_BINS ) - { - float diffuseFieldCoherence; - diffuseFieldCoherence = hDiracDecBin->hDiffuseDist->diffuseRatioX[bin] * hDiracDecBin->diffuseFieldCoherenceX[bin] + hDiracDecBin->hDiffuseDist->diffuseRatioY[bin] * hDiracDecBin->diffuseFieldCoherenceY[bin] + hDiracDecBin->hDiffuseDist->diffuseRatioZ[bin] * hDiracDecBin->diffuseFieldCoherenceZ[bin]; - hDiracDecBin->ChCrossReOut[bin] += ( ( 1.0f - surCoh ) * diffuseFieldCoherence + surCoh ) * diffEne; - } - else - { - hDiracDecBin->ChCrossReOut[bin] += ( ( 1.0f - surCoh ) * hDiracDecBin->diffuseFieldCoherence[bin] + surCoh ) * diffEne; - } - } - - /* Store parameters for formulating average diffuseness over frame */ - hDiracDecBin->frameMeanDiffuseness[bin] += diffEneValForDecorrelationReduction; - frameMeanDiffusenessEneWeight[bin] += meanEnePerCh; - } - - /* Formulate average diffuseness over frame */ - for ( bin = 0; bin < nBins; bin++ ) - { - hDiracDecBin->frameMeanDiffuseness[bin] /= fmaxf( 1e-12f, frameMeanDiffusenessEneWeight[bin] ); - } - - /* Temporal IIR-type smoothing of covariance matrices. Also apply encoding quality based smoothing factor. */ - if ( ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) - { - IIReneLimiterFactor = 16.0f + ( 1.0f - qualityBasedSmFactor ); - } - else - { - IIReneLimiterFactor = 8.0f + ( 1.0f - qualityBasedSmFactor ); - } - for ( bin = 0; bin < nBins; bin++ ) - { - float eneRatio, IIReneLimiter; - - /* Temporally smooth cov mtx estimates for resulting mixing matrix stability. The design principle is that - * the energy history (IIR) must not be more than double of the current frame energy. This provides more - * robust performance at energy offsets when compared to typical IIR averaging. */ - eneRatio = ( hDiracDecBin->ChEne[0][bin] + hDiracDecBin->ChEne[1][bin] ) / fmaxf( 1e-12f, ( hDiracDecBin->ChEnePrev[0][bin] + hDiracDecBin->ChEnePrev[1][bin] ) ); - IIReneLimiter = fminf( 1.0f, eneRatio * IIReneLimiterFactor ); - - hDiracDecBin->ChCrossRe[bin] *= qualityBasedSmFactor; - hDiracDecBin->ChCrossIm[bin] *= qualityBasedSmFactor; - hDiracDecBin->ChCrossReOut[bin] *= qualityBasedSmFactor; - hDiracDecBin->ChCrossImOut[bin] *= qualityBasedSmFactor; - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - hDiracDecBin->ChEne[ch][bin] *= qualityBasedSmFactor; - hDiracDecBin->ChEneOut[ch][bin] *= qualityBasedSmFactor; - } - - hDiracDecBin->ChCrossRe[bin] += IIReneLimiter * hDiracDecBin->ChCrossRePrev[bin]; - hDiracDecBin->ChCrossIm[bin] += IIReneLimiter * hDiracDecBin->ChCrossImPrev[bin]; - hDiracDecBin->ChCrossReOut[bin] += IIReneLimiter * hDiracDecBin->ChCrossReOutPrev[bin]; - hDiracDecBin->ChCrossImOut[bin] += IIReneLimiter * hDiracDecBin->ChCrossImOutPrev[bin]; - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - hDiracDecBin->ChEne[ch][bin] += IIReneLimiter * hDiracDecBin->ChEnePrev[ch][bin]; - hDiracDecBin->ChEneOut[ch][bin] += IIReneLimiter * hDiracDecBin->ChEneOutPrev[ch][bin]; - } - - /* Store energy values and coefficients for next round */ - hDiracDecBin->ChCrossRePrev[bin] = hDiracDecBin->ChCrossRe[bin]; - hDiracDecBin->ChCrossImPrev[bin] = hDiracDecBin->ChCrossIm[bin]; - hDiracDecBin->ChCrossReOutPrev[bin] = hDiracDecBin->ChCrossReOut[bin]; - hDiracDecBin->ChCrossImOutPrev[bin] = hDiracDecBin->ChCrossImOut[bin]; + DIRAC_SYNTHESIS_PSD_LS, + BINAURAL_CHANNELS, + protoFrame_fx, + q_protoFrame, + BINAURAL_CHANNELS, + protoIndexDir, + decorrelatedFrameInterleaved_fx, + &q_decorrelatedFrameInterleaved, + onset_filter_fx, + hDiracDecBin->h_freq_domain_decorr_ap_params, + hDiracDecBin->h_freq_domain_decorr_ap_state ); - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + /* De-interleave decorrelated signals*/ + FOR( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + offset = imult1616( imult1616( num_freq_bands, BINAURAL_CHANNELS ), ch ); + FOR( bin = 0; bin < num_freq_bands; bin++ ) { - hDiracDecBin->ChEnePrev[ch][bin] = hDiracDecBin->ChEne[ch][bin]; - hDiracDecBin->ChEneOutPrev[ch][bin] = hDiracDecBin->ChEneOut[ch][bin]; + decRe[ch][bin] = decorrelatedFrameInterleaved_fx[add( imult1616( bin, BINAURAL_CHANNELS ), offset )]; // q_inp + decIm[ch][bin] = decorrelatedFrameInterleaved_fx[add( imult1616( bin, BINAURAL_CHANNELS ), add( offset, 1 ) )]; // q_inp + move32(); + move32(); } } - + // q_decorrelatedFrameInterleaved will be same as q_inp/q_protoFrame // return; } -#else + static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, @@ -2926,239 +1743,7 @@ static void ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matric return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_determine_processing_matrices( - DIRAC_DEC_BIN_HANDLE hDiracDecBin, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - PARAMBIN_REND_CONFIG_HANDLE hConfig, - const int16_t max_band_decorr, - float Rmat[3][3], - const int16_t subframe, - const int16_t isHeadtracked, - const int16_t nchanSeparateChannels, - const MASA_ISM_DATA_HANDLE hMasaIsmData ) -{ - int16_t chA, chB, bin; - int16_t separateCenterChannelRendering; - int16_t nBins; - int16_t dirac_read_idx; - PARAMBIN_HRTF_GAIN_CACHE gainCache[MAX_NUM_OBJECTS]; - int16_t idx; - ISM_MODE ism_mode; - IVAS_FORMAT ivas_format; - MC_MODE mc_mode; - int32_t ivas_total_brate; - int16_t nchan_transport; - - ivas_format = hConfig->ivas_format; - separateCenterChannelRendering = nchanSeparateChannels > 0; - mc_mode = hConfig->mc_mode; - ivas_total_brate = hConfig->ivas_total_brate; - nchan_transport = hConfig->nchan_transport; - nBins = hSpatParamRendCom->num_freq_bands; /* Actually bins */ - - ism_mode = hConfig->ism_mode; - - dirac_read_idx = hSpatParamRendCom->render_to_md_map[subframe]; - - for ( idx = 0; idx < MAX_NUM_OBJECTS; idx++ ) - { - gainCache[idx].azi = -1000; /* Use -1000 as value for uninitialized cache. */ - } - - for ( bin = 0; bin < nBins; bin++ ) - { - float tmpMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], tmpMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS], resultMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], resultMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS], gain; - float CxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], CxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; /* Input covariance matrix */ - float realizedOutputEne, targetOutputEne, missingOutputEne; - float CrEneL, CrEneR; /* Cr = residual decorrelated sound covariance matrix */ - float CrCrossRe, CrCrossIm; - float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], MdecRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], MdecIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; /* M = mixing matrix; Mdec = residual decorrelated signal mixing matrix */ - float prototypeMtx[BINAURAL_CHANNELS][BINAURAL_CHANNELS] = { { 1.0f, 0.05f }, { 0.05f, 1.0f } }; /* Prototype matrix determines a reference signal in mixing matrix determination */ - - CrEneL = 0.0f; - CrEneR = 0.0f; - - /* Formulate main processing matrix M */ - formulate2x2MixingMatrix( hDiracDecBin->ChEne[0][bin], hDiracDecBin->ChEne[1][bin], - hDiracDecBin->ChCrossRe[bin], hDiracDecBin->ChCrossIm[bin], - hDiracDecBin->ChEneOut[0][bin], hDiracDecBin->ChEneOut[1][bin], - hDiracDecBin->ChCrossReOut[bin], hDiracDecBin->ChCrossImOut[bin], - prototypeMtx, Mre, Mim, - hDiracDecBin->reqularizationFactor ); - - /* Load estimated covariance matrix to the [2][2] matrix form */ - CxRe[0][0] = hDiracDecBin->ChEne[0][bin]; - CxRe[1][1] = hDiracDecBin->ChEne[1][bin]; - CxRe[1][0] = hDiracDecBin->ChCrossRe[bin]; - CxRe[0][1] = hDiracDecBin->ChCrossRe[bin]; - CxIm[0][0] = 0.0f; - CxIm[1][1] = 0.0f; - CxIm[1][0] = hDiracDecBin->ChCrossIm[bin]; - CxIm[0][1] = -hDiracDecBin->ChCrossIm[bin]; - - /* Make matrix multiplication M*Cx*M' to determine resulting covariance matrix of processing input with M */ - matrixMul( Mre, Mim, CxRe, CxIm, tmpMtxRe, tmpMtxIm ); - matrixTransp2Mul( tmpMtxRe, tmpMtxIm, Mre, Mim, resultMtxRe, resultMtxIm ); - - /* When below the frequency limit where decorrelation is applied, we inject the decorrelated - * residual (or missing) signal component. The procedure is active when there are not enough independent - * signal energy to synthesize a signal with the target covariance matrix from the non-decorrelated signals */ - if ( bin < max_band_decorr ) - { - float decorrelationReductionFactor; - - /* Subtract the resulting covariance matrix from the target covariance matrix to determine - * what signal component is missing. The result is the target covariance matrix for the residual signal, i.e., - * a residual covariance matrix. */ - CrEneL = max( 0.0f, hDiracDecBin->ChEneOut[0][bin] - resultMtxRe[0][0] ); - CrEneR = max( 0.0f, hDiracDecBin->ChEneOut[1][bin] - resultMtxRe[1][1] ); - CrCrossRe = hDiracDecBin->ChCrossReOut[bin] - resultMtxRe[1][0]; - CrCrossIm = hDiracDecBin->ChCrossImOut[bin] - resultMtxIm[1][0]; - - /* The amount of the decorrelated sound is further controlled based on the spatial metadata, - * by determining an energy-suppressed residual covariance matrix that is a control parameter - * that guides the processing of the decorrelated sound to a residual signal. - * The procedure improves quality in e.g. double-talk 2-direction rendering situations.*/ - if ( ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE ) - { - decorrelationReductionFactor = 1.0f; - } - else if ( ( ivas_format == MC_FORMAT && mc_mode == MC_MODE_MCMASA ) || ( ivas_format == MASA_FORMAT && nchan_transport == 1 ) ) - { - decorrelationReductionFactor = sqrtf( fmaxf( 0.0f, hDiracDecBin->frameMeanDiffuseness[bin] ) ); - } - else if ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && nchan_transport == 1 ) - { - decorrelationReductionFactor = 1.0f; - } - else - { - decorrelationReductionFactor = fmaxf( 0.0f, hDiracDecBin->frameMeanDiffuseness[bin] ); - } - CrEneL *= decorrelationReductionFactor; - CrEneR *= decorrelationReductionFactor; - CrCrossRe *= decorrelationReductionFactor; - CrCrossIm *= decorrelationReductionFactor; - - /* Determine a residual mixing matrix Mdec for processing the decorrelated signal to obtain - * the residual signal (that has the residual covariance matrix) */ - formulate2x2MixingMatrix( hDiracDecBin->ChEne[0][bin], hDiracDecBin->ChEne[1][bin], - 0.0f, 0.0f, /* Decorrelated signal has ideally no cross-terms */ - CrEneL, CrEneR, - CrCrossRe, CrCrossIm, - prototypeMtx, MdecRe, MdecIm, 0.2f ); - } - else - { - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - set_zero( MdecRe[chA], BINAURAL_CHANNELS ); - set_zero( MdecIm[chA], BINAURAL_CHANNELS ); - } - } - - /* The regularizations at determining mixing matrices cause signal energy to be lost to some degree, which is compensated for here */ - realizedOutputEne = CrEneL + CrEneR + resultMtxRe[0][0] + resultMtxRe[1][1]; - targetOutputEne = hDiracDecBin->ChEneOut[0][bin] + hDiracDecBin->ChEneOut[1][bin]; - missingOutputEne = fmaxf( 0.0f, targetOutputEne - realizedOutputEne ); - - gain = sqrtf( ( resultMtxRe[0][0] + resultMtxRe[1][1] + missingOutputEne ) / - fmaxf( 1e-12f, resultMtxRe[0][0] + resultMtxRe[1][1] ) ); - gain = fminf( 4.0f, gain ); - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - Mre[chA][chB] *= gain; - Mim[chA][chB] *= gain; - } - } - - /* Store processing matrices */ - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - hDiracDecBin->processMtxRePrev[chA][chB][bin] = hDiracDecBin->processMtxRe[chA][chB][bin]; - hDiracDecBin->processMtxImPrev[chA][chB][bin] = hDiracDecBin->processMtxIm[chA][chB][bin]; - hDiracDecBin->processMtxDecRePrev[chA][chB][bin] = hDiracDecBin->processMtxDecRe[chA][chB][bin]; - hDiracDecBin->processMtxDecImPrev[chA][chB][bin] = hDiracDecBin->processMtxDecIm[chA][chB][bin]; - - hDiracDecBin->processMtxRe[chA][chB][bin] = Mre[chA][chB]; - hDiracDecBin->processMtxIm[chA][chB][bin] = Mim[chA][chB]; - hDiracDecBin->processMtxDecRe[chA][chB][bin] = MdecRe[chA][chB]; - hDiracDecBin->processMtxDecIm[chA][chB][bin] = MdecIm[chA][chB]; - } - } - - if ( separateCenterChannelRendering ) - { - /* The rendering of the separate center channel in masa + mono mode. - * The center channel is processed with a gain factor 0.8414f to match the loudness of different processing paths */ - float lRealp, lImagp, rRealp, rImagp; - float gainFactor; - int16_t aziDeg = 0; - int16_t eleDeg = 0; - uint8_t instantChange = 0; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - gainFactor = 0.7943f * sqrtf( hDiracDecBin->earlyPartEneCorrection[bin] ); - } - else - { - gainFactor = 0.8414f * sqrtf( hDiracDecBin->earlyPartEneCorrection[bin] ); - } - - for ( chB = 0; chB < nchanSeparateChannels; chB++ ) - { - if ( ivas_format == MASA_ISM_FORMAT ) - { - if ( ism_mode == ISM_MASA_MODE_DISC ) - { - aziDeg = hMasaIsmData->azimuth_ism[chB][dirac_read_idx]; - eleDeg = hMasaIsmData->elevation_ism[chB][dirac_read_idx]; - } - else - { - aziDeg = hMasaIsmData->azimuth_separated_ism[dirac_read_idx]; - eleDeg = hMasaIsmData->elevation_separated_ism[dirac_read_idx]; - instantChange = 1; - } - } - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - hDiracDecBin->processMtxRePrev[chA][chB + 2][bin] = hDiracDecBin->processMtxRe[chA][chB + 2][bin]; - hDiracDecBin->processMtxImPrev[chA][chB + 2][bin] = hDiracDecBin->processMtxIm[chA][chB + 2][bin]; - } - - getDirectPartGains( bin, aziDeg, eleDeg, &lRealp, &lImagp, &rRealp, &rImagp, hDiracDecBin->renderStereoOutputInsteadOfBinaural, Rmat, &gainCache[chB], isHeadtracked ); - - hDiracDecBin->processMtxRe[0][chB + 2][bin] = lRealp * gainFactor; - hDiracDecBin->processMtxIm[0][chB + 2][bin] = lImagp * gainFactor; - hDiracDecBin->processMtxRe[1][chB + 2][bin] = rRealp * gainFactor; - hDiracDecBin->processMtxIm[1][chB + 2][bin] = rImagp * gainFactor; - - if ( instantChange ) - { - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - hDiracDecBin->processMtxRePrev[chA][chB + 2][bin] = hDiracDecBin->processMtxRe[chA][chB + 2][bin]; - hDiracDecBin->processMtxImPrev[chA][chB + 2][bin] = hDiracDecBin->processMtxIm[chA][chB + 2][bin]; - } - } - } - } - } - return; -} -#else static void ivas_dirac_dec_binaural_determine_processing_matrices_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, @@ -3752,9 +2337,7 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_binaural_process_output_fx( DIRAC_DEC_BIN_HANDLE hDiracDecBin, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, @@ -3980,135 +2563,7 @@ static void ivas_dirac_dec_binaural_process_output_fx( return; } -#else -static void ivas_dirac_dec_binaural_process_output( - DIRAC_DEC_BIN_HANDLE hDiracDecBin, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - HANDLE_CLDFB_FILTER_BANK cldfbSynDec[MAX_OUTPUT_CHANNELS], - float *output_f[], - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - const int16_t max_band_decorr, - const int16_t numInChannels, - const int16_t processReverb, - const int16_t subframe ) -{ - int16_t slot, bin, chA, chB; - int16_t nBins; - float outSlotRe[CLDFB_NO_CHANNELS_MAX], outSlotIm[CLDFB_NO_CHANNELS_MAX]; - float decSlotRe[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], decSlotIm[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float reverbRe[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float reverbIm[BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float interpVal; - float *decSlotRePointer; - float *decSlotImPointer; - int16_t offsetSamples; - int16_t nSlots; - - nBins = hSpatParamRendCom->num_freq_bands; - offsetSamples = 0; - nSlots = hSpatParamRendCom->subframe_nbslots[subframe]; - - if ( processReverb ) - { - /* Process second / room effect part of binaural output when needed */ - ivas_binaural_reverb_processSubframe( hDiracDecBin->hReverb, numInChannels, nSlots, inRe, inIm, reverbRe, reverbIm ); - } - - interpVal = 0.0f; - for ( slot = 0; slot < nSlots; slot++ ) - { - interpVal += 1.0f / (float) nSlots; - if ( !hDiracDecBin->useTdDecorr && max_band_decorr > 0 ) - { - ivas_dirac_dec_decorrelate_slot( hDiracDecBin, nBins, slot, inRe, inIm, decSlotRe, decSlotIm ); - } - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - float *outSlotRePr, *outSlotImPr; /* Pointers needed for function call compatibility */ - - set_zero( outSlotRe, CLDFB_NO_CHANNELS_MAX ); - set_zero( outSlotIm, CLDFB_NO_CHANNELS_MAX ); - - /* Processing of the first / HRTF part of the binaural output. */ - for ( chB = 0; chB < numInChannels; chB++ ) - { - if ( chB < BINAURAL_CHANNELS ) - { - /* Decorrelator signal for TD decorrelation is stored in two input channels above the two normal inputs. - * It should be noted that TD decorrelation is used only in cases where numInChannels is 2. If this - * changes, additional adjustments are required. When using CLDFB decorrelator, we simply assign the - * pointers to buffers. */ - if ( hDiracDecBin->useTdDecorr ) - { - decSlotRePointer = inRe[chB + 2][slot]; - decSlotImPointer = inIm[chB + 2][slot]; - } - else - { - decSlotRePointer = decSlotRe[chB]; - decSlotImPointer = decSlotIm[chB]; - } - } - else - { - decSlotRePointer = NULL; /* below these pointers are used only for chB < 2 */ - decSlotImPointer = NULL; - } - - - for ( bin = 0; bin < nBins; bin++ ) - { - float gain; - - /* Mixing using the formulated processing matrix M */ - gain = ( 1.0f - interpVal ) * hDiracDecBin->processMtxRePrev[chA][chB][bin] + - interpVal * hDiracDecBin->processMtxRe[chA][chB][bin]; - outSlotRe[bin] += gain * inRe[chB][slot][bin]; - outSlotIm[bin] += gain * inIm[chB][slot][bin]; - - gain = ( 1.0f - interpVal ) * hDiracDecBin->processMtxImPrev[chA][chB][bin] + - interpVal * hDiracDecBin->processMtxIm[chA][chB][bin]; - outSlotRe[bin] -= gain * inIm[chB][slot][bin]; - outSlotIm[bin] += gain * inRe[chB][slot][bin]; - - /* Mixing decorrelated signals using the formulated residual processing matrix Mdec */ - if ( bin < max_band_decorr && chB < 2 ) - { - gain = ( 1.0f - interpVal ) * hDiracDecBin->processMtxDecRePrev[chA][chB][bin] + - interpVal * hDiracDecBin->processMtxDecRe[chA][chB][bin]; - outSlotRe[bin] += gain * decSlotRePointer[bin]; - outSlotIm[bin] += gain * decSlotImPointer[bin]; - - gain = ( 1.0f - interpVal ) * hDiracDecBin->processMtxDecImPrev[chA][chB][bin] + - interpVal * hDiracDecBin->processMtxDecIm[chA][chB][bin]; - outSlotRe[bin] -= gain * decSlotImPointer[bin]; - outSlotIm[bin] += gain * decSlotRePointer[bin]; - } - } - } - - if ( processReverb ) - { - /* Combine second (reverb) part with the first (HRTF) part to obtain binaural output signal with room effect */ - v_add( outSlotRe, reverbRe[chA][slot], outSlotRe, CLDFB_NO_CHANNELS_MAX ); - v_add( outSlotIm, reverbIm[chA][slot], outSlotIm, CLDFB_NO_CHANNELS_MAX ); - } - - outSlotRePr = &( outSlotRe[0] ); - outSlotImPr = &( outSlotIm[0] ); - - /* Inverse filter bank */ - cldfbSynthesis_ivas( &outSlotRePr, &outSlotImPr, &( output_f[chA][nBins * slot + offsetSamples] ), nBins, cldfbSynDec[chA] ); - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void adaptTransportSignalsHeadtracked_fx( COMBINED_ORIENTATION_HANDLE hHeadTrackData, Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /*q_inp*/ @@ -4411,124 +2866,7 @@ static void adaptTransportSignalsHeadtracked_fx( return; } -#else -static void adaptTransportSignalsHeadtracked( - COMBINED_ORIENTATION_HANDLE hHeadTrackData, - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - const int16_t nBins, - const int16_t nSlots, - float Rmat[3][3] ) -{ - int16_t slot, ch, bin, louderCh; - float ILD, mono_factor_ILD, mono_factor_rotation, mono_factor, y_val, ene_proc, ene_target; - int16_t max_band; - float eqVal; - int16_t band_idx, bin_lo, bin_hi; - - /* Determine head-orientation-based mono factor. - Rmat[1][1] entry informs how close the ears are aligned according to transport signals. */ - y_val = 1.0f - fabsf( Rmat[1][1] ); - mono_factor_rotation = ( y_val - ADAPT_HTPROTO_ROT_LIM_0 ) / ( ADAPT_HTPROTO_ROT_LIM_1 - ADAPT_HTPROTO_ROT_LIM_0 ); - mono_factor_rotation = fmaxf( 0.0f, fminf( 1.0f, mono_factor_rotation ) ); - - /* Adapt transport signals in frequency bands */ - /* optimization grouping CLDFB bins into MASA bands (they are readily available in ROM and suitable for the task) AND group CLDFB slots into sub-frames */ - - max_band = 0; - while ( max_band < MASA_FREQUENCY_BANDS && MASA_band_grouping_24[max_band] < nBins ) - { - max_band++; - } - - for ( band_idx = 0; band_idx < max_band; band_idx++ ) - { - float ch_nrg[2]; /* storage for input signal channel energies */ - bin_lo = MASA_band_grouping_24[band_idx]; - bin_hi = min( MASA_band_grouping_24[band_idx + 1], (int16_t) nBins ); - for ( ch = 0; ch < 2; ch++ ) - { - ch_nrg[ch] = 0.0f; - for ( slot = 0; slot < nSlots; slot++ ) - { - for ( bin = bin_lo; bin < bin_hi; bin++ ) - { - ch_nrg[ch] += ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ) + ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); - } - } - hHeadTrackData->chEneIIR[ch][band_idx] *= ADAPT_HTPROTO_IIR_FAC; - hHeadTrackData->chEneIIR[ch][band_idx] += ( 1.0f - ADAPT_HTPROTO_IIR_FAC ) * ch_nrg[ch]; - } - - /* Determine ILD */ - ILD = fabsf( 10.0f * log10f( fmaxf( 1e-12f, hHeadTrackData->chEneIIR[0][band_idx] ) / fmaxf( 1e-12f, hHeadTrackData->chEneIIR[1][band_idx] ) ) ); - if ( hHeadTrackData->chEneIIR[1][band_idx] > hHeadTrackData->chEneIIR[0][band_idx] ) - { - louderCh = 1; - } - else - { - louderCh = 0; - } - - /* Determine ILD-based mono factor */ - mono_factor_ILD = ( ILD - ADAPT_HTPROTO_ILD_LIM_DB0 ) / ( ADAPT_HTPROTO_ILD_LIM_DB1 - ADAPT_HTPROTO_ILD_LIM_DB0 ); - mono_factor_ILD = fmaxf( 0.0f, fminf( 1.0f, mono_factor_ILD ) ); - - /* Combine mono factors */ - mono_factor = mono_factor_ILD * mono_factor_rotation; - - /* Mix original audio and sum signal according to determined mono factor */ - for ( ch = 0; ch < 2; ch++ ) - { - if ( ch != louderCh ) - { - float band_nrg = 0.0f; - - for ( slot = 0; slot < nSlots; slot++ ) - { - for ( bin = bin_lo; bin < bin_hi; bin++ ) - { - /* mono sum signal with the computed weight + rest from the original channel */ - inRe[ch][slot][bin] = mono_factor * ( inRe[0][slot][bin] + inRe[1][slot][bin] ) + ( 1.0f - mono_factor ) * inRe[ch][slot][bin]; - inIm[ch][slot][bin] = mono_factor * ( inIm[0][slot][bin] + inIm[1][slot][bin] ) + ( 1.0f - mono_factor ) * inIm[ch][slot][bin]; - band_nrg += ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ) + ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); - } - } - hHeadTrackData->procChEneIIR[ch][band_idx] *= ADAPT_HTPROTO_IIR_FAC; - hHeadTrackData->procChEneIIR[ch][band_idx] += ( 1.0f - ADAPT_HTPROTO_IIR_FAC ) * band_nrg; - } - else - { - /* processed signal is input. use the original channel, so no need to compute new signals or signal energy */ - hHeadTrackData->procChEneIIR[ch][band_idx] *= ADAPT_HTPROTO_IIR_FAC; - hHeadTrackData->procChEneIIR[ch][band_idx] += ( 1.0f - ADAPT_HTPROTO_IIR_FAC ) * ch_nrg[ch]; - } - } - - /* Equalize */ - ene_target = hHeadTrackData->chEneIIR[0][band_idx] + hHeadTrackData->chEneIIR[1][band_idx]; - ene_proc = hHeadTrackData->procChEneIIR[0][band_idx] + hHeadTrackData->procChEneIIR[1][band_idx]; - eqVal = fminf( 4.0f, sqrtf( ene_target / fmaxf( 1e-12f, ene_proc ) ) ); - - for ( slot = 0; slot < nSlots; slot++ ) - { - for ( ch = 0; ch < 2; ch++ ) - { - for ( bin = bin_lo; bin < bin_hi; bin++ ) - { - inRe[ch][slot][bin] *= eqVal; - inIm[ch][slot][bin] *= eqVal; - } - } - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED + static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked_fx( COMBINED_ORIENTATION_HANDLE hHeadTrackData, Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], @@ -4703,186 +3041,7 @@ static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( - COMBINED_ORIENTATION_HANDLE hHeadTrackData, - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - const int16_t nBins, - const int16_t nSlots, - float Rmat[3][3] ) -{ - int16_t slot, bin, ch; - float tmpVal; - - /* When not currently in prototype signal left-right switching procedure, check if such switching is needed */ - if ( hHeadTrackData->lrSwitchedNext == hHeadTrackData->lrSwitchedCurrent ) - { - float thresholdDotProduct = 0.17f; /* Corresponds to 10-degree switching threshold */ - if ( ( hHeadTrackData->lrSwitchedCurrent == 0 ) && ( Rmat[1][1] < -thresholdDotProduct ) ) - { - hHeadTrackData->lrSwitchedNext = 1; - } - if ( ( hHeadTrackData->lrSwitchedCurrent == 1 ) && ( Rmat[1][1] > thresholdDotProduct ) ) - { - hHeadTrackData->lrSwitchedNext = 0; - } - } - - /* When currently in interpolation */ - if ( hHeadTrackData->lrSwitchedNext != hHeadTrackData->lrSwitchedCurrent ) - { - for ( slot = 0; slot < nSlots; slot++ ) - { - float switchOrderFactor, origOrderFactor; - - hHeadTrackData->lrSwitchInterpVal += 0.0025f; /* Corresponds to 0.5 seconds interpolation time */ - - if ( hHeadTrackData->lrSwitchInterpVal > 0.999f ) - { - /* Stop interpolation, reset values */ - hHeadTrackData->lrSwitchInterpVal = 0.0f; - hHeadTrackData->lrSwitchedCurrent = hHeadTrackData->lrSwitchedNext; - } - - /* Gains for determining portion of switched channel order and original channel order */ - tmpVal = (float) hHeadTrackData->lrSwitchedNext * hHeadTrackData->lrSwitchInterpVal; - tmpVal += (float) hHeadTrackData->lrSwitchedCurrent * ( 1.0f - hHeadTrackData->lrSwitchInterpVal ); - switchOrderFactor = sqrtf( tmpVal ); - origOrderFactor = sqrtf( 1.0f - tmpVal ); - - for ( bin = 0; bin < nBins; bin++ ) - { - /* determine original order (1) signals and switched order (2) signals */ - float re1[BINAURAL_CHANNELS], re2[BINAURAL_CHANNELS], im1[BINAURAL_CHANNELS], im2[BINAURAL_CHANNELS]; - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - re1[ch] = inRe[ch][slot][bin] * origOrderFactor; - re2[ch] = inRe[1 - ch][slot][bin] * switchOrderFactor; - im1[ch] = inIm[ch][slot][bin] * origOrderFactor; - im2[ch] = inIm[1 - ch][slot][bin] * switchOrderFactor; - } - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - float eneRef, ene, eq; - - /* Interpolate / mix original and switched order signals */ - inRe[ch][slot][bin] = re1[ch] + re2[ch]; - inIm[ch][slot][bin] = im1[ch] + im2[ch]; - - /* Equalize interpolated signals to preserve energy per bin */ - eneRef = ( re1[ch] * re1[ch] ) + ( re2[ch] * re2[ch] ) + ( im1[ch] * im1[ch] ) + ( im2[ch] * im2[ch] ); - ene = ( inRe[ch][slot][bin] * inRe[ch][slot][bin] ) + ( inIm[ch][slot][bin] * inIm[ch][slot][bin] ); - eq = sqrtf( eneRef / fmaxf( 1e-12f, ene ) ); - eq = fminf( 4.0f, eq ); - inRe[ch][slot][bin] *= eq; - inIm[ch][slot][bin] *= eq; - } - } - } - } - else - { - /* If not in interpolation, but in switched prototype situation, then switch left and right channels */ - if ( hHeadTrackData->lrSwitchedCurrent == 1 ) - { - for ( slot = 0; slot < nSlots; slot++ ) - { - for ( bin = 0; bin < nBins; bin++ ) - { - tmpVal = inRe[0][slot][bin]; - inRe[0][slot][bin] = inRe[1][slot][bin]; - inRe[1][slot][bin] = tmpVal; - tmpVal = inIm[0][slot][bin]; - inIm[0][slot][bin] = inIm[1][slot][bin]; - inIm[1][slot][bin] = tmpVal; - } - } - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void eig2x2( - const float E1, - const float E2, - const float Cre, - const float Cim, - float Ure[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Uim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float D[BINAURAL_CHANNELS] ) -{ - int16_t chA, chB, ch; - float s, normVal, crossSquare, a, pm, add; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - Ure[chA][chB] = 0.0f; - Uim[chA][chB] = 0.0f; - } - } - - crossSquare = ( Cre * Cre ) + ( Cim * Cim ); - a = ( E1 + E2 ) * ( E1 + E2 ) - 4.0f * ( ( E1 * E2 ) - crossSquare ); - pm = 0.5f * sqrtf( max( 0.0f, a ) ); - add = 0.5f * ( E1 + E2 ); - - D[0] = add + pm; - D[1] = max( 0.0f, add - pm ); - /* Numeric case, when input is practically zeros */ - if ( D[0] < 1e-12f ) - { - Ure[0][0] = 1.0f; - Ure[1][1] = 1.0f; - - return; - } - - /* Numeric case, when input is near an identity matrix with a gain */ - if ( pm < ( 1e-3f * add ) ) - { - Ure[0][0] = 1.0f; - Ure[1][1] = 1.0f; - - return; - } - - /* Eigenvectors */ - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - if ( fabsf( E2 - D[ch] ) > fabsf( E1 - D[ch] ) ) - { - s = D[ch] - E2; - normVal = sqrtf( 1.0f / ( 1e-12f + crossSquare + s * s ) ); - - Ure[0][ch] = s * normVal; - Ure[1][ch] = Cre * normVal; - Uim[1][ch] = Cim * normVal; - } - else - { - s = D[ch] - E1; - normVal = sqrtf( 1.0f / ( 1e-12f + crossSquare + s * s ) ); - - Ure[1][ch] = s * normVal; - Ure[0][ch] = Cre * normVal; - Uim[0][ch] = -Cim * normVal; - } - } - - return; -} -#else static void eig2x2_fx( const Word32 E1_fx, /*q_E*/ const Word32 E2_fx, /*q_E*/ @@ -5253,30 +3412,7 @@ static void eig2x2_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void matrixDiagMul( - float reIn[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float imIn[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - const float D[BINAURAL_CHANNELS], - float reOut[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float imOut[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) -{ - int16_t chA, chB; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - reOut[chA][chB] = reIn[chA][chB] * D[chB]; - imOut[chA][chB] = imIn[chA][chB] * D[chB]; - } - } - return; -} -#else static void matrixDiagMul_fx( Word32 reIn_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_In*/ Word32 imIn_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_In*/ @@ -5312,33 +3448,7 @@ static void matrixDiagMul_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void matrixMul( - float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) -{ - int16_t chA, chB; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - outRe[chA][chB] = Are[chA][0] * Bre[0][chB] + Are[chA][1] * Bre[1][chB]; - outRe[chA][chB] -= Aim[chA][0] * Bim[0][chB] + Aim[chA][1] * Bim[1][chB]; - outIm[chA][chB] = Aim[chA][0] * Bre[0][chB] + Aim[chA][1] * Bre[1][chB]; - outIm[chA][chB] += Are[chA][0] * Bim[0][chB] + Are[chA][1] * Bim[1][chB]; - } - } - return; -} -#else static void matrixMul_fx( Word32 Are_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word32 Aim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ @@ -5496,33 +3606,7 @@ static void matrixMul_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void matrixTransp1Mul( - float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) -{ - int16_t chA, chB; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - outRe[chA][chB] = Are[0][chA] * Bre[0][chB] + Are[1][chA] * Bre[1][chB]; - outRe[chA][chB] -= -Aim[0][chA] * Bim[0][chB] - Aim[1][chA] * Bim[1][chB]; - outIm[chA][chB] = -Aim[0][chA] * Bre[0][chB] - Aim[1][chA] * Bre[1][chB]; - outIm[chA][chB] += Are[0][chA] * Bim[0][chB] + Are[1][chA] * Bim[1][chB]; - } - } - return; -} -#else static void matrixTransp1Mul_fx( Word32 Are_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word32 Aim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ @@ -5621,33 +3705,7 @@ static void matrixTransp1Mul_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void matrixTransp2Mul( - float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) -{ - int16_t chA, chB; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - outRe[chA][chB] = Are[chA][0] * Bre[chB][0] + Are[chA][1] * Bre[chB][1]; - outRe[chA][chB] -= Aim[chA][0] * ( -Bim[chB][0] ) + Aim[chA][1] * ( -Bim[chB][1] ); - outIm[chA][chB] = Aim[chA][0] * Bre[chB][0] + Aim[chA][1] * Bre[chB][1]; - outIm[chA][chB] += Are[chA][0] * ( -Bim[chB][0] ) + Are[chA][1] * ( -Bim[chB][1] ); - } - } - return; -} -#else static void matrixTransp2Mul_fx( Word32 Are_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ Word32 Aim_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS], /*q_A*/ @@ -5771,10 +3829,8 @@ static void matrixTransp2Mul_fx( } return; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void chol2x2_fx( const Word32 E1, /*q_E*/ const Word32 E2, /*q_E*/ @@ -5988,176 +4044,6 @@ static void chol2x2_fx( return; } -#else -static void chol2x2( - const float E1, - const float E2, - const float Cre, - const float Cim, - float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ) -{ - int16_t chA, chB; - float sqrtVal; - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - outRe[chA][chB] = 0.0f; - outIm[chA][chB] = 0.0f; - } - } - - if ( E1 > E2 ) /* Perform Cholesky decomposition according to louder channel first */ - { - outRe[0][0] = sqrtf( E1 ); - outRe[1][0] = Cre / ( 1e-12f + outRe[0][0] ); - outIm[1][0] = Cim / ( 1e-12f + outRe[0][0] ); - sqrtVal = E2 - ( Cre * Cre + Cim * Cim ) / ( 1e-12f + E1 ); - outRe[1][1] = sqrtf( max( 0.0f, sqrtVal ) ); - } - else - { - outRe[1][1] = sqrtf( E2 ); - outRe[0][1] = Cre / ( 1e-12f + outRe[1][1] ); - outIm[0][1] = -Cim / ( 1e-12f + outRe[1][1] ); - sqrtVal = E1 - ( Cre * Cre + Cim * Cim ) / ( 1e-12f + E2 ); - outRe[0][0] = sqrtf( max( 0.0f, sqrtVal ) ); - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static void formulate2x2MixingMatrix( - float Ein1, - float Ein2, - float CinRe, - float CinIm, - float Eout1, - float Eout2, - float CoutRe, - float CoutIm, - float Q[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Mre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - float Mim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], - const float regularizationFactor ) -{ - /* - This function implements a 2x2 solution for an optimized spatial audio rendering algorithm - Vilkamo, J., Bäckström, T. and Kuntz, A., 2013. - "Optimized covariance domain framework for time–frequency processing of spatial audio." - Journal of the Audio Engineering Society, 61(6), pp.403-411. - - The result of the formulas below are the same as those in the publication, however, some - derivation details differ for as simple as possible 2x2 formulattion - */ - int16_t chA, chB; - float maxEne, maxEneDiv; - float KyRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], KyIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float Uxre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Uxim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float Sx[BINAURAL_CHANNELS], Kxre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Kxim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float tmpRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], tmpIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float Ure[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Uim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float D[BINAURAL_CHANNELS]; - float div[BINAURAL_CHANNELS]; - float Ghat[BINAURAL_CHANNELS]; - float GhatQ[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - float Pre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], Pim[BINAURAL_CHANNELS][BINAURAL_CHANNELS]; - /* Normalize energy values */ - maxEne = Ein1; - maxEne = max( maxEne, Ein2 ); - maxEne = max( maxEne, Eout1 ); - maxEne = max( maxEne, Eout2 ); - maxEneDiv = 1.0f / ( maxEne + 1e-12f ); - Ein1 *= maxEneDiv; - Ein2 *= maxEneDiv; - CinRe *= maxEneDiv; - CinIm *= maxEneDiv; - Eout1 *= maxEneDiv; - Eout2 *= maxEneDiv; - CoutRe *= maxEneDiv; - CoutIm *= maxEneDiv; - - /* Cholesky decomposition of target / output covariance matrix */ - chol2x2( Eout1, Eout2, CoutRe, CoutIm, KyRe, KyIm ); - /* Eigendecomposition of input covariance matrix */ - eig2x2( Ein1, Ein2, CinRe, CinIm, Uxre, Uxim, Sx ); - - /* Eigendecomposition to Kx -- Ux Sx Ux' -> Kx Kx'*/ - Sx[0] = sqrtf( Sx[0] ); - Sx[1] = sqrtf( Sx[1] ); - matrixDiagMul( Uxre, Uxim, Sx, Kxre, Kxim ); - - /* Regularize the diagonal Sx for matrix inversion */ - Sx[0] = max( Sx[0], regularizationFactor * Sx[1] ); - Sx[1] = max( Sx[1], regularizationFactor * Sx[0] ); - - /* This is equivalent to the prototype signal energy normalization in the publication */ - Ghat[0] = sqrtf( Eout1 / ( 1e-12f + max( Ein1, 0.001f * Ein2 ) ) ); - Ghat[1] = sqrtf( Eout2 / ( 1e-12f + max( Ein2, 0.001f * Ein1 ) ) ); - - /* Matrix multiplication, tmp = Ky' * G_hat * Q */ - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - GhatQ[chA][0] = Q[chA][0] * Ghat[chA]; - GhatQ[chA][1] = Q[chA][1] * Ghat[chA]; - } - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - tmpRe[chA][chB] = KyRe[0][chA] * GhatQ[0][chB] + KyRe[1][chA] * GhatQ[1][chB]; - tmpIm[chA][chB] = -KyIm[0][chA] * GhatQ[0][chB] - KyIm[1][chA] * GhatQ[1][chB]; - } - } - - /* A = Ky' * G_hat * Q * Kx (see publication) */ - matrixMul( tmpRe, tmpIm, Kxre, Kxim, Are, Aim ); - - /* Find nearest orthonormal matrix P to A = Ky' * G_hat * Q * Kx - For matrix A that is P = A(A'A)^0.5 - */ - matrixTransp1Mul( Are, Aim, Are, Aim, tmpRe, tmpIm ); - - eig2x2( tmpRe[0][0], tmpRe[1][1], tmpRe[1][0], tmpIm[1][0], Ure, Uim, D ); - - div[0] = min( 10000.0f, sqrtf( 1.0f / ( 1e-12f + D[0] ) ) ); - div[1] = min( 10000.0f, sqrtf( 1.0f / ( 1e-12f + D[1] ) ) ); - - matrixMul( Are, Aim, Ure, Uim, tmpRe, tmpIm ); - - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - tmpRe[chA][chB] *= div[chB]; - tmpIm[chA][chB] *= div[chB]; - } - } - - matrixTransp2Mul( tmpRe, tmpIm, Ure, Uim, Pre, Pim ); /* Nearest orthonormal matrix P to matrix A formulated */ - - /* These are the final formulas of the JAES publication M = Ky P Kx^(-1) */ - for ( chA = 0; chA < BINAURAL_CHANNELS; chA++ ) - { - for ( chB = 0; chB < BINAURAL_CHANNELS; chB++ ) - { - Pre[chA][chB] /= Sx[chB] + 1e-12f; - Pim[chA][chB] /= Sx[chB] + 1e-12f; - } - } - - matrixMul( KyRe, KyIm, Pre, Pim, tmpRe, tmpIm ); - - matrixTransp2Mul( tmpRe, tmpIm, Uxre, Uxim, Mre, Mim ); - - return; -} - -#else static void formulate2x2MixingMatrix_fx( Word32 Ein1_fx, /*q_Ein*/ Word32 Ein2_fx, /*q_Ein*/ @@ -6562,10 +4448,8 @@ static void formulate2x2MixingMatrix_fx( return; } -#endif // 1 -#ifdef IVAS_FLOAT_FIXED static void getDirectPartGains_fx( const Word16 bin, Word16 aziDeg, @@ -6727,83 +4611,7 @@ static void getDirectPartGains_fx( return; } -#else - -static void getDirectPartGains( - const int16_t bin, - int16_t aziDeg, - int16_t eleDeg, - float *lRealp, - float *lImagp, - float *rRealp, - float *rImagp, - const uint8_t renderStereoOutputInsteadOfBinaural, - float Rmat[3][3], - PARAMBIN_HRTF_GAIN_CACHE *gainCache, - const int16_t isHeadtracked ) -{ - float aziRad, eleRad; - float y, mappedX, aziRadMapped, A, A2, A3; - const float LsAngleRad = 30.0f * PI_OVER_180; - - if ( renderStereoOutputInsteadOfBinaural ) /* In stereo (i.e. non-binaural) rendering mode */ - { - /* Convert azi and ele to an azi value of the cone of confusion */ - aziRad = (float) aziDeg * PI_OVER_180; - eleRad = (float) eleDeg * PI_OVER_180; - y = ( sinf( aziRad ) * cosf( eleRad ) ); - mappedX = sqrtf( max( 0.0f, 1.0f - ( y * y ) ) ); - aziRadMapped = atan2f( y, mappedX ); - - /* Determine the real valued amplitude panning gains */ - *lImagp = 0.0f; - *rImagp = 0.0f; - if ( aziRadMapped >= LsAngleRad ) - { /* Left side */ - *lRealp = 1.0f; - *rRealp = 0.0f; - } - else if ( aziRadMapped <= -LsAngleRad ) - { /* Right side */ - *lRealp = 0.0f; - *rRealp = 1.0f; - } - else /* Tangent panning law */ - { - A = tanf( aziRadMapped ) / tanf( LsAngleRad ); - A2 = ( A - 1.0f ) / max( 0.001f, A + 1.0f ); - A3 = 1.0f / ( A2 * A2 + 1.0f ); - *lRealp = sqrtf( A3 ); - *rRealp = sqrtf( 1.0f - A3 ); - } - - /* Scaling to have the same expected gain as for the HRTF rendering */ - *lRealp *= SQRT2; - *rRealp *= SQRT2; - } - else /* In regular binaural rendering mode */ - { - if ( aziDeg == gainCache->azi && eleDeg == gainCache->ele ) - { - hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, TRUE ); - } - else - { - gainCache->azi = aziDeg; - gainCache->ele = eleDeg; - if ( isHeadtracked ) - { - rotateAziEle( (float) aziDeg, (float) eleDeg, &aziDeg, &eleDeg, Rmat, 0 ); - } - hrtfShGetHrtf( bin, aziDeg, eleDeg, lRealp, lImagp, rRealp, rImagp, gainCache, FALSE ); - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void hrtfShGetHrtf_fx( const Word16 bin, const Word16 aziDeg, @@ -6843,89 +4651,33 @@ static void hrtfShGetHrtf_fx( move32(); } } - ELSE - { - Word32 shVec[HRTF_SH_CHANNELS]; - - ivas_dirac_dec_get_response_fx( aziDeg, - eleDeg, - shVec, - HRTF_SH_ORDER, - Q29 ); - - FOR( k = 0; k < HRTF_SH_CHANNELS; k++ ) - { - *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsRe_fx[0][k][bin] ); // Q28 - *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsIm_fx[0][k][bin] ); // Q28 - *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsRe_fx[1][k][bin] ); // Q28 - *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsIm_fx[1][k][bin] ); // Q28 - gainCache->shVec_fx[k] = shVec[k]; // Q29 - move32(); - move32(); - move32(); - move32(); - move32(); - } - } - - return; -} -#else - -static void hrtfShGetHrtf( - const int16_t bin, - const int16_t aziDeg, - const int16_t eleDeg, - float *lRealp, - float *lImagp, - float *rRealp, - float *rImagp, - PARAMBIN_HRTF_GAIN_CACHE *gainCache, - const int16_t useCachedValue ) -{ - int16_t k; - - *lRealp = 0.0f; - *lImagp = 0.0f; - *rRealp = 0.0f; - *rImagp = 0.0f; - - if ( useCachedValue ) - { - float *shVec; - shVec = gainCache->shVec; - - for ( k = 0; k < HRTF_SH_CHANNELS; k++ ) - { - *lRealp += hrtfShCoeffsRe[0][k][bin] * shVec[k]; - *lImagp += hrtfShCoeffsIm[0][k][bin] * shVec[k]; - *rRealp += hrtfShCoeffsRe[1][k][bin] * shVec[k]; - *rImagp += hrtfShCoeffsIm[1][k][bin] * shVec[k]; - } - } - else + ELSE { - float shVec[HRTF_SH_CHANNELS]; + Word32 shVec[HRTF_SH_CHANNELS]; - ivas_dirac_dec_get_response( aziDeg, - eleDeg, - shVec, - HRTF_SH_ORDER ); + ivas_dirac_dec_get_response_fx( aziDeg, + eleDeg, + shVec, + HRTF_SH_ORDER, + Q29 ); - for ( k = 0; k < HRTF_SH_CHANNELS; k++ ) + FOR( k = 0; k < HRTF_SH_CHANNELS; k++ ) { - *lRealp += hrtfShCoeffsRe[0][k][bin] * shVec[k]; - *lImagp += hrtfShCoeffsIm[0][k][bin] * shVec[k]; - *rRealp += hrtfShCoeffsRe[1][k][bin] * shVec[k]; - *rImagp += hrtfShCoeffsIm[1][k][bin] * shVec[k]; - - gainCache->shVec[k] = shVec[k]; + *lRealp = Madd_32_16( *lRealp, shVec[k], hrtfShCoeffsRe_fx[0][k][bin] ); // Q28 + *lImagp = Madd_32_16( *lImagp, shVec[k], hrtfShCoeffsIm_fx[0][k][bin] ); // Q28 + *rRealp = Madd_32_16( *rRealp, shVec[k], hrtfShCoeffsRe_fx[1][k][bin] ); // Q28 + *rImagp = Madd_32_16( *rImagp, shVec[k], hrtfShCoeffsIm_fx[1][k][bin] ); // Q28 + gainCache->shVec_fx[k] = shVec[k]; // Q29 + move32(); + move32(); + move32(); + move32(); + move32(); } } return; } -#endif /*------------------------------------------------------------------------- * configure_reqularization_factor() @@ -6935,70 +4687,7 @@ static void hrtfShGetHrtf( *------------------------------------------------------------------------*/ /*! r: Configured reqularization factor value */ -#ifndef IVAS_FLOAT_FIXED -float configure_reqularization_factor( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int32_t ivas_total_brate /* i : IVAS total bitrate */ -) -{ - float reqularizationFactor; - reqularizationFactor = 1.0f; /* Default value */ - - if ( ivas_format == MASA_FORMAT ) - { - if ( ivas_total_brate >= IVAS_160k ) - { - reqularizationFactor = 0.4f; - } - else if ( ivas_total_brate == IVAS_128k ) - { - reqularizationFactor = 0.5f; - } - else if ( ivas_total_brate == IVAS_96k ) - { - reqularizationFactor = 0.6f; - } - else if ( ivas_total_brate >= IVAS_64k ) - { - reqularizationFactor = 0.8f; - } - else - { - reqularizationFactor = 1.0f; - } - } - - if ( ivas_format == MC_FORMAT ) /* This is always McMASA for parametric binauralizer. */ - { - if ( ivas_total_brate >= IVAS_96k ) - { - reqularizationFactor = 0.4f; - } - else if ( ivas_total_brate >= IVAS_80k ) - { - reqularizationFactor = 0.5f; - } - else if ( ivas_total_brate >= IVAS_64k ) - { - reqularizationFactor = 0.7f; - } - else if ( ivas_total_brate >= IVAS_48k ) - { - reqularizationFactor = 0.8f; - } - else - { - reqularizationFactor = 1.0f; - } - } - - /* For SBA and parametric ISM, currently in default value of 1.0f. */ - - return reqularizationFactor; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 configure_reqularization_factor_fx( const IVAS_FORMAT ivas_format, /* i : IVAS format */ const Word32 ivas_total_brate /* i : IVAS total bitrate */ @@ -7070,9 +4759,7 @@ Word16 configure_reqularization_factor_fx( return reqularizationFactor; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * ivas_omasa_preProcessStereoTransportsForMovedObjects_fx() * @@ -7412,352 +5099,8 @@ void ivas_omasa_preProcessStereoTransportsForMovedObjects_fx( return; } -#else -/*-------------------------------------------------------------------* - * ivas_omasa_preProcessStereoTransportsForMovedObjects() - * - * - *-------------------------------------------------------------------*/ - -void ivas_omasa_preProcessStereoTransportsForMovedObjects( - Decoder_Struct *st_ivas, - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], - const int16_t nBins, - const int16_t subframe ) -{ - int16_t bin, ch, inCh, outCh, ismDirIndex, slot; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - MASA_ISM_DATA_HANDLE hMasaIsmData; - uint8_t enableCentering; - int16_t dirac_read_idx; - int16_t nSlots; - - hSpatParamRendCom = st_ivas->hSpatParamRendCom; - hMasaIsmData = st_ivas->hMasaIsmData; - - if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_FOA || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA2 || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - enableCentering = 0; - } - else - { - enableCentering = 1; - } - - /* Bypass processing until first object is moved */ - if ( hMasaIsmData->objectsMoved == 0 ) - { - for ( ismDirIndex = 0; ismDirIndex < hSpatParamRendCom->numIsmDirections; ismDirIndex++ ) - { - if ( hMasaIsmData->ism_is_edited[ismDirIndex] ) - { - hMasaIsmData->objectsMoved = 1; - } - } - if ( hMasaIsmData->objectsMoved == 0 ) - { - /* No objects have moved so far */ - return; - } - } - - /* Perform object-movement based processing */ - nSlots = hSpatParamRendCom->subframe_nbslots[subframe]; - dirac_read_idx = hSpatParamRendCom->render_to_md_map[subframe]; - - for ( bin = 0; bin < nBins; bin++ ) - { - float ismPreprocMtxNew[2][2]; - float ismPreprocMtxIncrement[2][2]; - float eneMove[2]; - float enePreserve[2]; - float ismRatioAcc; - float subframeEne; - float normEnes[2]; - float remainderNormEne; - - set_zero( ismPreprocMtxNew[0], 2 ); - set_zero( ismPreprocMtxNew[1], 2 ); - set_zero( ismPreprocMtxIncrement[0], 2 ); - set_zero( ismPreprocMtxIncrement[1], 2 ); - set_zero( eneMove, 2 ); - set_zero( enePreserve, 2 ); - ismRatioAcc = 0.0f; - subframeEne = 0.0f; - set_zero( normEnes, 2 ); - - /* Determine transport normalized energies and subframe energy */ - for ( slot = 0; slot < nSlots; slot++ ) - { - for ( ch = 0; ch < 2; ch++ ) - { - normEnes[ch] += inRe[ch][slot][bin] * inRe[ch][slot][bin]; - normEnes[ch] += inIm[ch][slot][bin] * inIm[ch][slot][bin]; - } - } - subframeEne = normEnes[0] + normEnes[1]; - normEnes[0] /= fmaxf( 1e-12f, subframeEne ); - normEnes[1] /= fmaxf( 1e-12f, subframeEne ); - - /* For each ismDir, formulate a mix-matrix that moves object audio signals between - * left and right channels when needed. Make a combined matrix by a ratio-weighted sum */ - for ( ismDirIndex = 0; ismDirIndex < hSpatParamRendCom->numIsmDirections; ismDirIndex++ ) - { - float panGainsOut[2]; - float panGainsIn[2]; - float ratio; - float panEnesOut[2]; - float panEnesIn[2]; - float centeringFactor; - - ratio = hMasaIsmData->energy_ratio_ism[ismDirIndex][dirac_read_idx][bin]; - - ismRatioAcc += ratio; - - /* Get input and output panning gains */ - ivas_get_stereo_panning_gains( hMasaIsmData->azimuth_ism[ismDirIndex][dirac_read_idx], - hMasaIsmData->elevation_ism[ismDirIndex][dirac_read_idx], - panGainsIn ); - - if ( hMasaIsmData->ism_is_edited[ismDirIndex] ) - { - ivas_get_stereo_panning_gains( hMasaIsmData->azimuth_ism_edited[ismDirIndex], - hMasaIsmData->elevation_ism_edited[ismDirIndex], - panGainsOut ); - } - else - { - /* When not edited, input and output pan gains are the same */ - for ( ch = 0; ch < 2; ch++ ) - { - panGainsOut[ch] = panGainsIn[ch]; - } - } - - /* Determine pan enes */ - for ( ch = 0; ch < 2; ch++ ) - { - panEnesOut[ch] = panGainsOut[ch] * panGainsOut[ch]; - panEnesIn[ch] = panGainsIn[ch] * panGainsIn[ch]; - } - - if ( enableCentering ) - { - centeringFactor = fmaxf( 0.0f, 2.0f * fabsf( panEnesIn[0] - panEnesOut[0] ) - 1.0f ); - for ( ch = 0; ch < 2; ch++ ) - { - panEnesOut[ch] *= ( 1.0f - centeringFactor ); - panEnesOut[ch] += 0.5f * centeringFactor; - } - } - - for ( ch = 0; ch < 2; ch++ ) - { - float eneMoveThis; - float enePreserveThis; - eneMoveThis = fmaxf( 0.0f, panEnesIn[ch] - panEnesOut[ch] ); - enePreserveThis = panEnesIn[ch] - eneMoveThis; - - eneMove[ch] += ratio * eneMoveThis; - enePreserve[ch] += ratio * enePreserveThis; - - /* Subtract object parts from normEnes */ - normEnes[ch] -= panEnesIn[ch] * ratio; - } - } - - /* Any remaining (non-object) energy is set to be preserved at both channels */ - remainderNormEne = fmaxf( 0.0f, ( 1.0f - ismRatioAcc ) - normEnes[0] - normEnes[1] ); - for ( ch = 0; ch < 2; ch++ ) - { - enePreserve[ch] += fmaxf( 0.0f, normEnes[ch] + remainderNormEne / 2.0f ); - } - - /* Temporally average energy moving and preserving, and generate the transport signal preprocessing matrix */ - for ( ch = 0; ch < 2; ch++ ) - { - float normVal; - hMasaIsmData->eneMoveIIR[ch][bin] *= STEREO_PREPROCESS_IIR_FACTOR; - hMasaIsmData->eneMoveIIR[ch][bin] += eneMove[ch] * subframeEne; - hMasaIsmData->enePreserveIIR[ch][bin] *= STEREO_PREPROCESS_IIR_FACTOR; - hMasaIsmData->enePreserveIIR[ch][bin] += enePreserve[ch] * subframeEne; - normVal = fmaxf( EPSILON, hMasaIsmData->eneMoveIIR[ch][bin] + hMasaIsmData->enePreserveIIR[ch][bin] ); - ismPreprocMtxNew[ch][ch] = sqrtf( hMasaIsmData->enePreserveIIR[ch][bin] / normVal ); - ismPreprocMtxNew[1 - ch][ch] = sqrtf( hMasaIsmData->eneMoveIIR[ch][bin] / normVal ); - } - - /* Get increment value for temporal interpolation */ - for ( inCh = 0; inCh < 2; inCh++ ) - { - for ( outCh = 0; outCh < 2; outCh++ ) - { - ismPreprocMtxIncrement[outCh][inCh] = ( ismPreprocMtxNew[outCh][inCh] - hMasaIsmData->ismPreprocMatrix[outCh][inCh][bin] ) / (float) nSlots; - } - } - - /* Mix signals */ - for ( slot = 0; slot < nSlots; slot++ ) - { - float eqVal; - float outSlotRe[2]; - float outSlotIm[2]; - - set_zero( outSlotRe, 2 ); - set_zero( outSlotIm, 2 ); - - for ( outCh = 0; outCh < 2; outCh++ ) - { - for ( inCh = 0; inCh < 2; inCh++ ) - { - hMasaIsmData->ismPreprocMatrix[outCh][inCh][bin] += ismPreprocMtxIncrement[outCh][inCh]; - outSlotRe[outCh] += inRe[inCh][slot][bin] * hMasaIsmData->ismPreprocMatrix[outCh][inCh][bin]; - outSlotIm[outCh] += inIm[inCh][slot][bin] * hMasaIsmData->ismPreprocMatrix[outCh][inCh][bin]; - } - } - - /* IIR average the energy measures and determine and apply energy-preserving equalizer */ - hMasaIsmData->preprocEneTarget[bin] *= STEREO_PREPROCESS_IIR_FACTOR; - hMasaIsmData->preprocEneRealized[bin] *= STEREO_PREPROCESS_IIR_FACTOR; - for ( ch = 0; ch < 2; ch++ ) - { - hMasaIsmData->preprocEneTarget[bin] += inRe[ch][slot][bin] * inRe[ch][slot][bin]; - hMasaIsmData->preprocEneTarget[bin] += inIm[ch][slot][bin] * inIm[ch][slot][bin]; - hMasaIsmData->preprocEneRealized[bin] += outSlotRe[ch] * outSlotRe[ch]; - hMasaIsmData->preprocEneRealized[bin] += outSlotIm[ch] * outSlotIm[ch]; - } - eqVal = fminf( 4.0f, sqrtf( hMasaIsmData->preprocEneTarget[bin] / fmaxf( 1e-12f, hMasaIsmData->preprocEneRealized[bin] ) ) ); - for ( ch = 0; ch < 2; ch++ ) - { - inRe[ch][slot][bin] = outSlotRe[ch] * eqVal; - inIm[ch][slot][bin] = outSlotIm[ch] * eqVal; - } - } - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static void ivas_masa_ext_rend_parambin_internal( - MASA_EXT_REND_HANDLE hMasaExtRend, - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - float *output_f[], - const int16_t subframe ) -{ - DIRAC_DEC_BIN_HANDLE hDiracDecBin; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - PARAMBIN_REND_CONFIG config_data; - int16_t slot, ch, numInChannels; - float Cldfb_RealBuffer_in[6][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer_in[6][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; - float Rmat[3][3]; - int16_t max_band_decorr; - int16_t nBins; - int16_t i, j; - int16_t nchan_transport; - - hDiracDecBin = hMasaExtRend->hDiracDecBin; - assert( hDiracDecBin ); - hSpatParamRendCom = hMasaExtRend->hSpatParamRendCom; - nBins = hSpatParamRendCom->num_freq_bands; - - /* Setup internal config. MASA EXT renderer is quite strict. */ - config_data.separateCenterChannelRendering = 0; - config_data.ivas_format = MASA_FORMAT; - config_data.mc_mode = MC_MODE_NONE; - config_data.ivas_total_brate = IVAS_512k; /* Maximum bitrate set for external renderer */ - config_data.nchan_transport = hMasaExtRend->nchan_input; - config_data.qualityBasedSmFactor = 1.0f; - config_data.processReverb = hMasaExtRend->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ? 1 : 0; - config_data.ism_mode = ISM_MODE_NONE; - - /* Set nchan_transport to number of transport channels in MASA input */ - nchan_transport = hMasaExtRend->nchan_input; - - /* The input channel number at this processing function (not nchan_transport) */ - numInChannels = BINAURAL_CHANNELS; - - Rmat[0][0] = 1.0f; - Rmat[0][1] = 0.0f; - Rmat[0][2] = 0.0f; - - Rmat[1][0] = 0.0f; - Rmat[1][1] = 1.0f; - Rmat[1][2] = 0.0f; - - Rmat[2][0] = 0.0f; - Rmat[2][1] = 0.0f; - Rmat[2][2] = 1.0f; - - /* CLDFB Analysis of input */ - for ( slot = 0; slot < hSpatParamRendCom->subframe_nbslots[subframe]; slot++ ) - { - for ( ch = 0; ch < numInChannels; ch++ ) - { - if ( ch == 0 || nchan_transport == 2 ) - { - cldfbAnalysis_ts_ivas( - &( output_f[ch][nBins * slot] ), - Cldfb_RealBuffer_in[ch][slot], - Cldfb_ImagBuffer_in[ch][slot], - nBins, hMasaExtRend->cldfbAnaRend[ch] ); - } - else /* when nchan_transport == 1 and ch == 1 */ - { - /* At mono input duplicate the channel to dual-mono, and apply gain - correction to ensure same overall level as in stereo mode */ - v_multc( Cldfb_RealBuffer_in[0][slot], INV_SQRT_2, Cldfb_RealBuffer_in[0][slot], nBins ); - v_multc( Cldfb_ImagBuffer_in[0][slot], INV_SQRT_2, Cldfb_ImagBuffer_in[0][slot], nBins ); - - mvr2r( Cldfb_RealBuffer_in[0][slot], Cldfb_RealBuffer_in[1][slot], nBins ); - mvr2r( Cldfb_ImagBuffer_in[0][slot], Cldfb_ImagBuffer_in[1][slot], nBins ); - } - } - } - - if ( hCombinedOrientationData ) - { - for ( i = 0; i < 3; i++ ) - { - for ( j = 0; j < 3; j++ ) - { - Rmat[i][j] = hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx][i][j]; - } - } - - if ( nchan_transport == 2 ) - { - adaptTransportSignalsHeadtracked( hCombinedOrientationData, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, hSpatParamRendCom->subframe_nbslots[subframe], Rmat ); - - ivas_dirac_dec_binaural_check_and_switch_transports_headtracked( hCombinedOrientationData, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, nBins, hSpatParamRendCom->subframe_nbslots[subframe], Rmat ); - } - } - - - ivas_dirac_dec_binaural_formulate_input_and_target_covariance_matrices( hDiracDecBin, hSpatParamRendCom, &config_data, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, Rmat, subframe, - hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, NULL ); - - /* Always using CLDFB decorrelation in MASA EXT renderer */ - max_band_decorr = hDiracDecBin->h_freq_domain_decorr_ap_params->max_band_decorr; - - - ivas_dirac_dec_binaural_determine_processing_matrices( hDiracDecBin, hSpatParamRendCom, &config_data, max_band_decorr, Rmat, subframe, - hCombinedOrientationData && hCombinedOrientationData->enableCombinedOrientation[hCombinedOrientationData->subframe_idx] > 0, - 0, NULL ); - - ivas_dirac_dec_binaural_process_output( hDiracDecBin, hSpatParamRendCom, hMasaExtRend->cldfbSynRend, output_f, Cldfb_RealBuffer_in, Cldfb_ImagBuffer_in, max_band_decorr, numInChannels, config_data.processReverb, subframe ); - - hDiracDecBin->hDiffuseDist = NULL; - hSpatParamRendCom->slots_rendered += hSpatParamRendCom->subframe_nbslots[subframe]; - hSpatParamRendCom->subframes_rendered++; - return; -} -#else static void ivas_masa_ext_rend_parambin_internal_fx( MASA_EXT_REND_HANDLE hMasaExtRend, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, @@ -7974,49 +5317,7 @@ static void ivas_masa_ext_rend_parambin_internal_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_ext_rend_parambin_render( - MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA ext rend structure */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ - float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ - const int16_t num_subframes ) /* i : number of subframes to render */ -{ - int16_t subframe; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - float *p_output[BINAURAL_CHANNELS]; - int16_t ch; - - hSpatParamRendCom = hMasaExtRend->hSpatParamRendCom; - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_output[ch] = output_f[ch]; - } - - hSpatParamRendCom->subframes_rendered = hSpatParamRendCom->dirac_read_idx; - for ( subframe = 0; subframe < num_subframes; subframe++ ) - { - int16_t n_samples_sf = hSpatParamRendCom->slot_size * CLDFB_SLOTS_PER_SUBFRAME; - hSpatParamRendCom->slots_rendered = 0; - - ivas_masa_ext_rend_parambin_internal( hMasaExtRend, hCombinedOrientationData, p_output, hSpatParamRendCom->dirac_read_idx ); - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_output[ch] += n_samples_sf; - } - - ivas_combined_orientation_update_index( hCombinedOrientationData, n_samples_sf ); - - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - - return; -} -#else void ivas_masa_ext_rend_parambin_render_fx( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA ext rend structure */ COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ @@ -8058,4 +5359,3 @@ void ivas_masa_ext_rend_parambin_render_fx( return; } -#endif diff --git a/lib_rend/ivas_dirac_decorr_dec.c b/lib_rend/ivas_dirac_decorr_dec.c index dd71510d7..a043e97f9 100644 --- a/lib_rend/ivas_dirac_decorr_dec.c +++ b/lib_rend/ivas_dirac_decorr_dec.c @@ -51,25 +51,18 @@ #define DIRAC_MAX_DECORR_CLDFB_BANDS_AMBI 22 #define DIRAC_MAX_DECORR_CLDFB_BANDS 15 -#define DIRAC_DUCK_ALPHA 0.8f -#define DIRAC_DUCK_GAMMA 1.5f -#ifdef IVAS_FLOAT_FIXED +#define DIRAC_DUCK_ALPHA 0.8f +#define DIRAC_DUCK_GAMMA 1.5f #define DIRAC_DUCK_GAMMA_FX 1610612736 /* Q30 */ #define DIRAC_DUCK_ALPHA_FX 1717986944 /* Q31 */ #define ONE_M_DIRAC_DUCK_ALPHA 429496736 /* Q31 */ -#endif /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void get_lattice_coeffs( const int16_t band_index, const int16_t channel_index, float *lattice_coeffs ); -static void lattice2allpass( const int16_t filter_length, const float *lattice_coeffs, float *filter_coeffs_num_real, float *filter_coeffs_den_real ); -#else static void get_lattice_coeffs_fx( const Word16 band_index, const Word16 channel_index, Word16 *lattice_coeffs ); static void lattice2allpass_fx( const int16_t filter_length, const Word16 *lattice_coeffs_fx, Word16 *filter_coeffs_num_real_fx, Word16 *filter_coeffs_den_real_fx ); -#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_decorr_open() @@ -77,255 +70,6 @@ static void lattice2allpass_fx( const int16_t filter_length, const Word16 *latti * Allocate and initialize TD decorrelator decoder handle *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_decorr_open( - DIRAC_DECORR_PARAMS **ph_freq_domain_decorr_ap_params, - DIRAC_DECORR_STATE **ph_freq_domain_decorr_ap_state, - const int16_t num_freq_bands, - int16_t num_outputs_diff, - const int16_t num_protos_diff, - const DIRAC_SYNTHESIS_CONFIG synthesisConf, - float *frequency_axis, - const int16_t nchan_transport, /* i : number of transport channels*/ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - int16_t k, l, m, n; - int16_t split_band_index_start; - int16_t k_in, k_out, num_bands, band_table_idx, buffer_size_decorr; - int16_t split_frequencies_bands[DIRAC_DECORR_NUM_SPLIT_BANDS + 1] = { 0, 0, 0, 23768 }; - int16_t *split_freq_ptr; - float cur_lattice_delta_phi, lattice_coeffs[2 * DIRAC_MAX_DECORR_FILTER_LEN]; - ivas_error error; - - /* pointers to structs for allocation */ - DIRAC_DECORR_PARAMS *freq_domain_decorr_ap_params = NULL; - DIRAC_DECORR_STATE *freq_domain_decorr_ap_state = NULL; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - /* allocate structs */ - if ( ( freq_domain_decorr_ap_params = (DIRAC_DECORR_PARAMS *) malloc( sizeof( DIRAC_DECORR_PARAMS ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_state = (DIRAC_DECORR_STATE *) malloc( sizeof( DIRAC_DECORR_STATE ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - /*-----------------------------------------------------------------* - * check input parameters - *-----------------------------------------------------------------*/ - - assert( ( num_freq_bands > 0 ) && "Error: Number of frequency bands <= 0!" ); - - - if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - num_outputs_diff -= nchan_transport; - } - - assert( ( num_outputs_diff >= 0 ) && ( num_outputs_diff <= DIRAC_MAX_NUM_DECORR_FILTERS ) && "Error: Number of channels <= 0 or > DIRAC_MAX_NUM_DECORR_FILTERS" ); - - /*-----------------------------------------------------------------* - * set default parameters - *-----------------------------------------------------------------*/ - - if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - /*Decorrelation in SHD*/ - freq_domain_decorr_ap_params->add_back_onsets_on = 0; - if ( nchan_transport > 2 ) - { - freq_domain_decorr_ap_params->max_frequency = 2000; - } - else - { - freq_domain_decorr_ap_params->max_frequency = ( min( num_freq_bands, DIRAC_MAX_DECORR_CLDFB_BANDS_AMBI ) * 24000 ) / CLDFB_NO_CHANNELS_MAX; - } - } - else if ( synthesisConf == DIRAC_SYNTHESIS_COV_MC_LS ) - { - /*Decorrelation in LS channels for MC*/ - freq_domain_decorr_ap_params->add_back_onsets_on = 1; - freq_domain_decorr_ap_params->max_frequency = ( PARAM_MC_MAX_DECORR_CLDFB_BANDS * 24000 ) / CLDFB_NO_CHANNELS_MAX; - } - else - { - /*Decorrelation in LS channels*/ - freq_domain_decorr_ap_params->add_back_onsets_on = 1; - freq_domain_decorr_ap_params->max_frequency = ( DIRAC_MAX_DECORR_CLDFB_BANDS * 24000 ) / CLDFB_NO_CHANNELS_MAX; - } - - freq_domain_decorr_ap_params->use_ducker = 1; - - assert( ( freq_domain_decorr_ap_params->max_frequency >= 0 ) && ( freq_domain_decorr_ap_params->max_frequency <= output_Fs / 2 ) && "Error: max_frequency invalid!" ); - - /* compute maximum band for decorrelation */ - assert( frequency_axis != NULL ); - for ( k = num_freq_bands - 1; k > 0; --k ) - { - freq_domain_decorr_ap_params->max_band_decorr = k + 1; /* outside "if" to avoid uninitialized variable */ - - if ( frequency_axis[k] < freq_domain_decorr_ap_params->max_frequency ) - { - break; - } - } - - /*-----------------------------------------------------------------* - * open sub-modules - *-----------------------------------------------------------------*/ - - /* open onset detection module */ - if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - /*Onset detector up to Nyquist and not only up to max_band_decorr*/ - if ( ( error = ivas_dirac_dec_onset_detection_open( num_protos_diff, num_freq_bands, num_freq_bands, &freq_domain_decorr_ap_params->h_onset_detection_power_params, &freq_domain_decorr_ap_state->h_onset_detection_power_state ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_dirac_dec_onset_detection_open( num_protos_diff, num_freq_bands, freq_domain_decorr_ap_params->max_band_decorr, &freq_domain_decorr_ap_params->h_onset_detection_power_params, &freq_domain_decorr_ap_state->h_onset_detection_power_state ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /*-----------------------------------------------------------------* - * prepare processing parameters - *-----------------------------------------------------------------*/ - - /* calculate decorrelation split bands */ - split_freq_ptr = &split_frequencies_bands[0]; - split_freq_ptr[0] = 0; - for ( k = 1; k < DIRAC_DECORR_NUM_SPLIT_BANDS; k++ ) - { - split_freq_ptr[k] = (int16_t) ( (float) CLDFB_NO_CHANNELS_MAX * ap_split_frequencies[k] + 0.5f ) - 1; - } - split_band_index_start = 0; - - split_frequencies_bands[k] = 0; - freq_domain_decorr_ap_params->num_split_frequency_bands = 0; - for ( k = 1; k < DIRAC_DECORR_NUM_SPLIT_BANDS + 1; k++ ) - { - freq_domain_decorr_ap_params->num_split_frequency_bands++; - if ( split_frequencies_bands[k] >= freq_domain_decorr_ap_params->max_band_decorr ) - { - split_frequencies_bands[k] = freq_domain_decorr_ap_params->max_band_decorr; - break; - } - } - - if ( ( freq_domain_decorr_ap_params->split_frequency_bands = (int16_t *) malloc( sizeof( int16_t ) * ( freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - mvs2s( &split_frequencies_bands[0], freq_domain_decorr_ap_params->split_frequency_bands, freq_domain_decorr_ap_params->num_split_frequency_bands + 1 ); - - /* calc buffer size and allocate arrays */ - freq_domain_decorr_ap_state->decorr_buffer = NULL; - freq_domain_decorr_ap_params->filter_coeff_num_real = NULL; - freq_domain_decorr_ap_params->filter_coeff_den_real = NULL; - freq_domain_decorr_ap_params->phase_coeff_real = NULL; - freq_domain_decorr_ap_params->phase_coeff_imag = NULL; - freq_domain_decorr_ap_state->direct_energy_smooth = NULL; - freq_domain_decorr_ap_state->reverb_energy_smooth = NULL; - freq_domain_decorr_ap_params->pre_delay = NULL; - freq_domain_decorr_ap_params->filter_length = NULL; - - if ( num_outputs_diff > 0 ) - { - buffer_size_decorr = ( ap_pre_delay[split_band_index_start] + ap_filter_length[split_band_index_start] ); - if ( ( freq_domain_decorr_ap_state->decorr_buffer = (float *) malloc( sizeof( float ) * 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - set_f( freq_domain_decorr_ap_state->decorr_buffer, 0.0f, 2 * buffer_size_decorr * num_outputs_diff * freq_domain_decorr_ap_params->max_band_decorr ); - - if ( ( freq_domain_decorr_ap_params->filter_coeff_num_real = (float *) malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_params->filter_coeff_den_real = (float *) malloc( sizeof( float ) * ( ap_filter_length[split_band_index_start] + 1 ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_params->phase_coeff_real = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_params->phase_coeff_imag = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_state->direct_energy_smooth = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_state->reverb_energy_smooth = (float *) malloc( sizeof( float ) * freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - if ( ( freq_domain_decorr_ap_params->pre_delay = (int16_t *) malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - if ( ( freq_domain_decorr_ap_params->filter_length = (int16_t *) malloc( sizeof( int16_t ) * freq_domain_decorr_ap_params->num_split_frequency_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD decorrelator\n" ) ); - } - - set_f( freq_domain_decorr_ap_state->direct_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - set_f( freq_domain_decorr_ap_state->reverb_energy_smooth, 0.0f, freq_domain_decorr_ap_params->max_band_decorr * num_outputs_diff ); - - /* compute filter coefficients */ - for ( k = 0; k < freq_domain_decorr_ap_params->num_split_frequency_bands; k++ ) - { - k_in = freq_domain_decorr_ap_params->split_frequency_bands[k]; - k_out = freq_domain_decorr_ap_params->split_frequency_bands[k + 1]; - num_bands = k_out - k_in; - band_table_idx = k + split_band_index_start; - freq_domain_decorr_ap_params->filter_length[k] = ap_filter_length[band_table_idx] + 1; - freq_domain_decorr_ap_params->pre_delay[k] = ap_pre_delay[band_table_idx]; - - for ( l = 0; l < num_outputs_diff; l++ ) - { - for ( m = 0; m < num_bands; m++ ) - { - n = k_in + m; - cur_lattice_delta_phi = ap_lattice_delta_phi[l * DIRAC_MAX_DECORR_FILTER_LEN + ap_filter_length[k] - 1] * n; - freq_domain_decorr_ap_params->phase_coeff_real[l * freq_domain_decorr_ap_params->max_band_decorr + n] = cosf( cur_lattice_delta_phi ); - freq_domain_decorr_ap_params->phase_coeff_imag[l * freq_domain_decorr_ap_params->max_band_decorr + n] = -sinf( cur_lattice_delta_phi ); - - /* calculate phase offset */ - get_lattice_coeffs( band_table_idx, l, lattice_coeffs ); - - /* calcualte transfer function coefficients from the lattice coefficients */ - lattice2allpass( freq_domain_decorr_ap_params->filter_length[k], lattice_coeffs, &freq_domain_decorr_ap_params->filter_coeff_num_real[( k_in + m ) * ( freq_domain_decorr_ap_params->filter_length[0] * num_outputs_diff ) + l * freq_domain_decorr_ap_params->filter_length[0]], &freq_domain_decorr_ap_params->filter_coeff_den_real[( k_in + m ) * ( freq_domain_decorr_ap_params->filter_length[0] * num_outputs_diff ) + l * freq_domain_decorr_ap_params->filter_length[0]] ); - } - } - } - } - - *ph_freq_domain_decorr_ap_params = freq_domain_decorr_ap_params; - *ph_freq_domain_decorr_ap_state = freq_domain_decorr_ap_state; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_dirac_dec_decorr_open_fx( DIRAC_DECORR_PARAMS **ph_freq_domain_decorr_ap_params, DIRAC_DECORR_STATE **ph_freq_domain_decorr_ap_state, @@ -633,7 +377,6 @@ ivas_error ivas_dirac_dec_decorr_open_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -642,284 +385,6 @@ ivas_error ivas_dirac_dec_decorr_open_fx( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_decorr_process( - const int16_t num_freq_bands, - int16_t num_channels, - const int16_t num_protos_diff, - const DIRAC_SYNTHESIS_CONFIG synthesisConf, - const int16_t nchan_transport, /* i : number of transport channels*/ - const float *input_frame_f, - const int16_t num_protos_dir, - const int16_t *proto_index_dir, - float *frame_dec_f, - float *onset_filter, - HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params, - HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state ) -{ - int16_t ch_idx, k, l, idx_in_out, max_band_decorr; - int16_t split_bands_idx, band_idx, decorr_buffer_len, time_idx; - int16_t offset, idx_filter, incr_aux; - int16_t k_1, k_2, num_bands, filter_length, pre_delay, decorr_buffer_step; - float frame_ma[2 * ( DIRAC_MAX_DECORR_FILTER_LEN + 1 )]; - float aux_buffer[2 * MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX]; - float direct_energy[MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX]; - float *p_frame_dec_f, *decorr_buffer, *phase_coeff_real, *phase_coeff_imag; - float *filter_coeff_num_real, *filter_coeff_den_real, *decorr_buffer_start_ptr, *decorr_buffer_ptr; - float input_real, input_imag, filter_frame_imag, filter_frame_real; - - push_wmops( "dirac_decorr_process" ); - - /* check handles */ - if ( h_freq_domain_decorr_ap_params == NULL || h_freq_domain_decorr_ap_state == NULL ) - { - return; - } - - /* check input data */ - if ( input_frame_f == NULL ) - { - return; - } - - /* check result arrays */ - if ( frame_dec_f == NULL ) - { - return; - } - - - /*-----------------------------------------------------------------* - * ********** processing ********** - *-----------------------------------------------------------------*/ - - /*-----------------------------------------------------------------* - * collect some often used parameters - *-----------------------------------------------------------------*/ - - if ( synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - num_channels -= nchan_transport; - } - - - /*-----------------------------------------------------------------* - * detect and remove onsets - *-----------------------------------------------------------------*/ - - /* compute power */ - max_band_decorr = h_freq_domain_decorr_ap_params->h_onset_detection_power_params.max_band_decorr; - - for ( ch_idx = 0; ch_idx < num_protos_dir; ch_idx++ ) - { - v_mult( &input_frame_f[2 * ch_idx * num_freq_bands], &input_frame_f[2 * ch_idx * num_freq_bands], &aux_buffer[2 * ch_idx * max_band_decorr], 2 * max_band_decorr ); - - v_add_inc( &aux_buffer[2 * ch_idx * max_band_decorr], 2, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, &aux_buffer[ch_idx * max_band_decorr], 1, max_band_decorr ); - } - - /* compute onset filter */ - max_band_decorr = h_freq_domain_decorr_ap_params->max_band_decorr; - - set_f( onset_filter, 1.0f, num_protos_diff * num_freq_bands ); - - ivas_dirac_dec_onset_detection_process( aux_buffer, onset_filter, num_protos_diff, h_freq_domain_decorr_ap_params->h_onset_detection_power_params, h_freq_domain_decorr_ap_state->h_onset_detection_power_state ); - - /* Apply decorrelator if num_channels is greater than 0 */ - if ( num_channels > 0 ) - { - /* remove onsets from prototype frame */ - for ( ch_idx = 0; ch_idx < num_protos_dir; ch_idx++ ) - { - v_mult_inc( &input_frame_f[2 * ch_idx * num_freq_bands], 2, &onset_filter[ch_idx * num_freq_bands], 1, &aux_buffer[2 * ch_idx * max_band_decorr], 2, max_band_decorr ); - - v_mult_inc( &input_frame_f[2 * ch_idx * num_freq_bands + 1], 2, &onset_filter[ch_idx * num_freq_bands], 1, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, max_band_decorr ); - } - - /*-----------------------------------------------------------------* - * all pass based decorrelation - *-----------------------------------------------------------------*/ - - /* compute decorrelated output frame */ - /* output is the first frame of the state */ - p_frame_dec_f = frame_dec_f; - decorr_buffer = h_freq_domain_decorr_ap_state->decorr_buffer; - phase_coeff_real = h_freq_domain_decorr_ap_params->phase_coeff_real; - phase_coeff_imag = h_freq_domain_decorr_ap_params->phase_coeff_imag; - incr_aux = 2 * ( num_freq_bands - max_band_decorr ); - - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - /* final phase rotation */ - for ( k = 0; k < max_band_decorr; k++ ) - { - *( p_frame_dec_f++ ) = ( ( *decorr_buffer ) * ( *phase_coeff_real ) ) - ( ( *( decorr_buffer + 1 ) ) * ( *phase_coeff_imag ) ); - *( p_frame_dec_f++ ) = ( ( *decorr_buffer ) * ( *phase_coeff_imag++ ) ) + ( ( *( decorr_buffer + 1 ) ) * ( *phase_coeff_real++ ) ); - decorr_buffer += 2; - } - p_frame_dec_f += incr_aux; - } - - /* update state */ - decorr_buffer_len = h_freq_domain_decorr_ap_params->filter_length[0] + h_freq_domain_decorr_ap_params->pre_delay[0] - 1; - for ( time_idx = 0; time_idx < ( decorr_buffer_len - 1 ); time_idx++ ) - { - mvr2r( &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( time_idx + 1 ) * max_band_decorr * num_channels], &h_freq_domain_decorr_ap_state->decorr_buffer[2 * (time_idx) *max_band_decorr * num_channels], 2 * max_band_decorr * num_channels ); - } - set_zero( &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( decorr_buffer_len - 1 ) * max_band_decorr * num_channels], 2 * max_band_decorr * num_channels ); - - /* calculate all pass */ - for ( split_bands_idx = 0; split_bands_idx < h_freq_domain_decorr_ap_params->num_split_frequency_bands; split_bands_idx++ ) - { - k_1 = h_freq_domain_decorr_ap_params->split_frequency_bands[split_bands_idx]; - k_2 = h_freq_domain_decorr_ap_params->split_frequency_bands[split_bands_idx + 1]; - num_bands = k_2 - k_1; - filter_length = h_freq_domain_decorr_ap_params->filter_length[split_bands_idx]; - pre_delay = h_freq_domain_decorr_ap_params->pre_delay[split_bands_idx]; - decorr_buffer_step = num_channels * max_band_decorr; - - for ( k = 0; k < num_bands; ++k ) - { - band_idx = k_1 + k; - - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - idx_filter = band_idx * ( h_freq_domain_decorr_ap_params->filter_length[0] * num_channels ) + ch_idx * h_freq_domain_decorr_ap_params->filter_length[0]; - filter_coeff_num_real = &h_freq_domain_decorr_ap_params->filter_coeff_num_real[idx_filter]; - filter_coeff_den_real = &h_freq_domain_decorr_ap_params->filter_coeff_den_real[idx_filter]; - decorr_buffer_start_ptr = &h_freq_domain_decorr_ap_state->decorr_buffer[2 * ( ch_idx * max_band_decorr + band_idx )]; - input_real = aux_buffer[2 * ( proto_index_dir[ch_idx] * max_band_decorr + band_idx )]; - input_imag = aux_buffer[2 * ( proto_index_dir[ch_idx] * max_band_decorr + band_idx ) + 1]; - - /* MA part of filter impulse response */ - for ( l = 0; l < filter_length; l++ ) - { - frame_ma[2 * l] = input_real * filter_coeff_num_real[l]; - frame_ma[2 * l + 1] = input_imag * filter_coeff_num_real[l]; - } - decorr_buffer_ptr = decorr_buffer_start_ptr + 2 * ( pre_delay - 1 ) * decorr_buffer_step; - - /*add MA part to state */ - decorr_buffer_ptr[0] += frame_ma[0]; - decorr_buffer_ptr[1] += frame_ma[1]; - - /*get values for AR part */ - filter_frame_real = decorr_buffer_ptr[0]; - filter_frame_imag = decorr_buffer_ptr[1]; - - decorr_buffer_ptr += 2 * decorr_buffer_step; - - for ( l = 1; l < filter_length; l++ ) - { - decorr_buffer_ptr[0] += frame_ma[2 * l] - filter_frame_real * filter_coeff_den_real[l]; - decorr_buffer_ptr[1] += frame_ma[2 * l + 1] - filter_frame_imag * filter_coeff_den_real[l]; - decorr_buffer_ptr += 2 * decorr_buffer_step; - } - } - } - } - - /*-----------------------------------------------------------------* - * onset/diffuse energy ratio conservation - *-----------------------------------------------------------------*/ - - if ( h_freq_domain_decorr_ap_params->use_ducker ) - { - /* compute direct power w/o onsets for the energy ratio, signal is still in the aux buffer */ - v_mult( aux_buffer, aux_buffer, aux_buffer, 2 * max_band_decorr * num_protos_dir ); - v_add_inc( &aux_buffer[0], 2, &aux_buffer[1], 2, direct_energy, 1, max_band_decorr * num_protos_dir ); - - /* calculate the power of the decorrelated signal */ - - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - v_mult( &frame_dec_f[2 * ch_idx * num_freq_bands], &frame_dec_f[2 * ch_idx * num_freq_bands], &aux_buffer[2 * ch_idx * max_band_decorr], 2 * max_band_decorr ); - v_add_inc( &aux_buffer[2 * ch_idx * max_band_decorr], 2, &aux_buffer[2 * ch_idx * max_band_decorr + 1], 2, &aux_buffer[ch_idx * max_band_decorr], 1, max_band_decorr ); - } - - /* smooth energies */ - v_multc( aux_buffer, 1.0f - DIRAC_DUCK_ALPHA, aux_buffer, num_channels * max_band_decorr ); - - v_multc( h_freq_domain_decorr_ap_state->reverb_energy_smooth, DIRAC_DUCK_ALPHA, h_freq_domain_decorr_ap_state->reverb_energy_smooth, num_channels * max_band_decorr ); - - v_add( aux_buffer, h_freq_domain_decorr_ap_state->reverb_energy_smooth, h_freq_domain_decorr_ap_state->reverb_energy_smooth, num_channels * max_band_decorr ); - - v_multc( direct_energy, 1.0f - DIRAC_DUCK_ALPHA, direct_energy, num_protos_dir * max_band_decorr ); - - v_multc( h_freq_domain_decorr_ap_state->direct_energy_smooth, DIRAC_DUCK_ALPHA, h_freq_domain_decorr_ap_state->direct_energy_smooth, num_protos_dir * max_band_decorr ); - - v_add( direct_energy, h_freq_domain_decorr_ap_state->direct_energy_smooth, h_freq_domain_decorr_ap_state->direct_energy_smooth, num_protos_dir * max_band_decorr ); - - for ( ch_idx = 0; ch_idx < num_channels; ch_idx++ ) - { - float *frame_dec_f_ptr = &frame_dec_f[ch_idx * 2 * num_freq_bands]; - int16_t cur_proto_index = proto_index_dir[ch_idx] * max_band_decorr; - int16_t cur_reverb_index = ch_idx * max_band_decorr; - float *reverb_energy_smooth_ptr = &h_freq_domain_decorr_ap_state->reverb_energy_smooth[cur_reverb_index]; - float *direct_energy_smooth_ptr = &h_freq_domain_decorr_ap_state->direct_energy_smooth[cur_proto_index]; - - for ( band_idx = 0; band_idx < max_band_decorr; band_idx++ ) - { - float duck_gain = 1.0f; - float direct_energy_loc = direct_energy_smooth_ptr[band_idx]; - float reverb_energy_loc = reverb_energy_smooth_ptr[band_idx]; - - if ( reverb_energy_loc > ( direct_energy_loc * DIRAC_DUCK_GAMMA ) ) - { - duck_gain = sqrtf( direct_energy_loc * DIRAC_DUCK_GAMMA / ( reverb_energy_loc + EPSILON ) ); - frame_dec_f_ptr[2 * band_idx] *= duck_gain; - frame_dec_f_ptr[2 * band_idx + 1] *= duck_gain; - } - else if ( direct_energy_loc > ( reverb_energy_loc * DIRAC_DUCK_GAMMA ) ) - { - duck_gain = sqrtf( direct_energy_loc / ( DIRAC_DUCK_GAMMA * reverb_energy_loc + EPSILON ) ); - if ( duck_gain > 2.0f ) - { - duck_gain = 2.0f; - } - frame_dec_f_ptr[2 * band_idx] *= duck_gain; - frame_dec_f_ptr[2 * band_idx + 1] *= duck_gain; - } - } - } - } - - /*-----------------------------------------------------------------* - * add back onsets - *-----------------------------------------------------------------*/ - - if ( h_freq_domain_decorr_ap_params->add_back_onsets_on == 1 ) - { - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - offset = proto_index_dir[ch_idx] * num_freq_bands; - - for ( k = 0; k < max_band_decorr; ++k ) - { - aux_buffer[2 * k] = ( 1.0f - onset_filter[offset + k] ) * input_frame_f[2 * offset + 2 * k]; - aux_buffer[2 * k + 1] = ( 1.0f - onset_filter[offset + k] ) * input_frame_f[2 * offset + 2 * k + 1]; - } - - v_add( &frame_dec_f[ch_idx * 2 * num_freq_bands], aux_buffer, &frame_dec_f[ch_idx * 2 * num_freq_bands], 2 * max_band_decorr ); - } - } - - /* avoid decorrelation above maximum frequency -> set to zero the remaining frequencies*/ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - /* calc output indices */ - idx_in_out = 2 * ( ch_idx * num_freq_bands + h_freq_domain_decorr_ap_params->max_band_decorr ); - - /* copy to output signal */ - set_zero( &frame_dec_f[idx_in_out], 2 * ( num_freq_bands - h_freq_domain_decorr_ap_params->max_band_decorr ) ); - } - - } /*end of decorrelator*/ - - pop_wmops(); - - return; -} -#else void ivas_dirac_dec_decorr_process_fx( const Word16 num_freq_bands, // Q0 Word16 num_channels, // Q0 @@ -1503,7 +968,6 @@ void ivas_dirac_dec_decorr_process_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -1512,7 +976,6 @@ void ivas_dirac_dec_decorr_process_fx( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_decorr_close_fx( HANDLE_DIRAC_DECORR_PARAMS *ph_freq_domain_decorr_ap_params, HANDLE_DIRAC_DECORR_STATE *ph_freq_domain_decorr_ap_state ) @@ -1634,129 +1097,6 @@ void ivas_dirac_dec_decorr_close_fx( return; } -#else -void ivas_dirac_dec_decorr_close( - HANDLE_DIRAC_DECORR_PARAMS *ph_freq_domain_decorr_ap_params, - HANDLE_DIRAC_DECORR_STATE *ph_freq_domain_decorr_ap_state ) -{ - DIRAC_ONSET_DETECTION_STATE *dirac_onset_detection_state; - - /*-----------------------------------------------------------------* - * check input handles - *-----------------------------------------------------------------*/ - - if ( ph_freq_domain_decorr_ap_params == NULL || ph_freq_domain_decorr_ap_state == NULL ) - { - return; - } - - if ( *ph_freq_domain_decorr_ap_params == NULL || *ph_freq_domain_decorr_ap_state == NULL ) - { - return; - } - - /*-----------------------------------------------------------------* - * free onset filter arrays - *-----------------------------------------------------------------*/ - - dirac_onset_detection_state = &( *ph_freq_domain_decorr_ap_state )->h_onset_detection_power_state; - - if ( dirac_onset_detection_state->onset_detector_1 != NULL ) - { - free( dirac_onset_detection_state->onset_detector_1 ); - dirac_onset_detection_state->onset_detector_1 = NULL; - } - - if ( dirac_onset_detection_state->onset_detector_2 != NULL ) - { - free( dirac_onset_detection_state->onset_detector_2 ); - dirac_onset_detection_state->onset_detector_2 = NULL; - } - - /*-----------------------------------------------------------------* - * memory deallocation - *-----------------------------------------------------------------*/ - - /* free decorrelation buffer */ - if ( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_state )->decorr_buffer ); - ( *ph_freq_domain_decorr_ap_state )->decorr_buffer = NULL; - } - - /* free ducker smoothed direct energy buffer */ - if ( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth ); - ( *ph_freq_domain_decorr_ap_state )->direct_energy_smooth = NULL; - } - - /* free ducker smoothed reverb energy buffer */ - if ( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth ); - ( *ph_freq_domain_decorr_ap_state )->reverb_energy_smooth = NULL; - } - - /* free pre-delay param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->pre_delay != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->pre_delay ); - ( *ph_freq_domain_decorr_ap_params )->pre_delay = NULL; - } - - /* free filter length param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->filter_length != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->filter_length ); - ( *ph_freq_domain_decorr_ap_params )->filter_length = NULL; - } - - /* free filter coeff param buffers */ - if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real ); - ( *ph_freq_domain_decorr_ap_params )->filter_coeff_num_real = NULL; - } - - /* free pre-delay param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real ); - ( *ph_freq_domain_decorr_ap_params )->filter_coeff_den_real = NULL; - } - - /* free pre-delay param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag ); - ( *ph_freq_domain_decorr_ap_params )->phase_coeff_imag = NULL; - } - - /* free pre-delay param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real ); - ( *ph_freq_domain_decorr_ap_params )->phase_coeff_real = NULL; - } - - /* free pre-delay param buffer */ - if ( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands != NULL ) - { - free( ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands ); - ( *ph_freq_domain_decorr_ap_params )->split_frequency_bands = NULL; - } - - /* free pointers to state and parameter structs */ - free( *ph_freq_domain_decorr_ap_params ); - *ph_freq_domain_decorr_ap_params = NULL; - - free( *ph_freq_domain_decorr_ap_state ); - *ph_freq_domain_decorr_ap_state = NULL; - - return; -} -#endif // IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- @@ -1764,23 +1104,6 @@ void ivas_dirac_dec_decorr_close( *------------------------------------------------------------------------*/ /* get lattice coeffs with phase offset */ -#ifndef IVAS_FLOAT_FIXED -static void get_lattice_coeffs( - const int16_t band_index, - const int16_t channel_index, - float *lattice_coeffs ) -{ - int16_t k; - - for ( k = 0; k < ap_filter_length[band_index]; k++ ) - { - float cur_lattice_coeff = ap_lattice_coeffs[band_index][channel_index * ap_filter_length[band_index] + k]; - lattice_coeffs[k] = cur_lattice_coeff; - } - - return; -} -#else static void get_lattice_coeffs_fx( const Word16 band_index, // Q0 const Word16 channel_index, // Q0 @@ -1798,55 +1121,9 @@ static void get_lattice_coeffs_fx( return; } -#endif /* convert lattice filter coeffs to all pass transfer function coeffs */ -#ifndef IVAS_FLOAT_FIXED -static void lattice2allpass( - const int16_t filter_length, - const float *lattice_coeffs, - float *filter_coeffs_num_real, - float *filter_coeffs_den_real ) -{ - int16_t i, p; - float alpha_real[2][DIRAC_MAX_DECORR_FILTER_LEN + 1]; - float *alpha_real_p_old = &alpha_real[0][0]; - float *alpha_real_p = &alpha_real[1][0]; - float *tmp; - - for ( i = 0; i < 2; i++ ) - { - set_f( alpha_real[i], 0.0f, DIRAC_MAX_DECORR_FILTER_LEN + 1 ); - } - - alpha_real_p[0] = 1.0f; - alpha_real_p_old[0] = 1.0f; - - /* recursion */ - for ( p = 1; p < filter_length; p++ ) - { - alpha_real_p[p] = lattice_coeffs[( p - 1 )]; - - for ( i = 1; i < p; i++ ) - { - alpha_real_p[i] = alpha_real_p_old[i] + lattice_coeffs[( p - 1 )] * alpha_real_p_old[p - i]; - } - /* switch pointers */ - tmp = alpha_real_p_old; - alpha_real_p_old = alpha_real_p; - alpha_real_p = tmp; - } - - for ( i = 0; i < filter_length; i++ ) - { - filter_coeffs_den_real[i] = alpha_real_p_old[i]; - filter_coeffs_num_real[i] = alpha_real_p_old[filter_length - i - 1]; - } - - return; -} -#else static void lattice2allpass_fx( const int16_t filter_length, // Q0 const Word16 *lattice_coeffs_fx, // Q15 @@ -1900,4 +1177,3 @@ static void lattice2allpass_fx( return; } -#endif diff --git a/lib_rend/ivas_dirac_onsets_dec.c b/lib_rend/ivas_dirac_onsets_dec.c index 160678f7e..9e82fa022 100644 --- a/lib_rend/ivas_dirac_onsets_dec.c +++ b/lib_rend/ivas_dirac_onsets_dec.c @@ -43,7 +43,6 @@ #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED static Word16 BASOP_Util_Cmp_Mant32Exp_sat( Word32 a_m, Word16 a_e, Word32 b_m, Word16 b_e ); Word16 BASOP_Util_Cmp_Mant32Exp_sat /*!< o: flag: result of comparison */ /* 0, if a == b */ @@ -146,7 +145,6 @@ Word16 BASOP_Util_Cmp_Mant32Exp_sat /*!< o: flag: result of comparison */ } return result; } -#endif /*------------------------------------------------------------------------- @@ -155,41 +153,6 @@ Word16 BASOP_Util_Cmp_Mant32Exp_sat /*!< o: flag: result of comparison */ * onset detection *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_onset_detection_open( - const int16_t num_protos_diff, - const int16_t num_freq_bands, - const int16_t max_band_decorr, - DIRAC_ONSET_DETECTION_PARAMS *ph_dirac_onset_detection_params, - DIRAC_ONSET_DETECTION_STATE *ph_dirac_onset_detection_state ) -{ - /* pointers to structs for allocation */ - DIRAC_ONSET_DETECTION_PARAMS *dirac_onset_detection_params = ph_dirac_onset_detection_params; - DIRAC_ONSET_DETECTION_STATE *dirac_onset_detection_state = ph_dirac_onset_detection_state; - - /* check / set input parameters */ - dirac_onset_detection_params->num_freq_bands = num_freq_bands; - assert( dirac_onset_detection_params->num_freq_bands > 0 && "Error: Number of frequency bands <= 0!" ); - - dirac_onset_detection_params->max_band_decorr = max_band_decorr; - - /* memory allocation */ - if ( ( dirac_onset_detection_state->onset_detector_1 = (float *) malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for onset detection\n" ) ); - } - if ( ( dirac_onset_detection_state->onset_detector_2 = (float *) malloc( sizeof( float ) * num_protos_diff * dirac_onset_detection_params->max_band_decorr ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for onset detection\n" ) ); - } - - /* init to zero */ - set_zero( dirac_onset_detection_state->onset_detector_1, num_protos_diff * dirac_onset_detection_params->max_band_decorr ); - set_zero( dirac_onset_detection_state->onset_detector_2, num_protos_diff * dirac_onset_detection_params->max_band_decorr ); - - return IVAS_ERR_OK; -} -#else ivas_error ivas_dirac_dec_onset_detection_open_fx( const Word16 num_protos_diff, // Q0 const Word16 num_freq_bands, // Q0 @@ -227,7 +190,6 @@ ivas_error ivas_dirac_dec_onset_detection_open_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -236,50 +198,6 @@ ivas_error ivas_dirac_dec_onset_detection_open_fx( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_onset_detection_process( - const float *input_power_f, - float *onset_filter, - const int16_t num_protos_diff, - DIRAC_ONSET_DETECTION_PARAMS h_dirac_onset_detection_params, - DIRAC_ONSET_DETECTION_STATE h_dirac_onset_detection_state ) -{ - int16_t b, ch_idx; - float tmp_f; - float *p_onset_detector_1, *p_onset_detector_2; - - p_onset_detector_1 = h_dirac_onset_detection_state.onset_detector_1; - p_onset_detector_2 = h_dirac_onset_detection_state.onset_detector_2; - - for ( ch_idx = 0; ch_idx < num_protos_diff; ch_idx++ ) - { - for ( b = 0; b < h_dirac_onset_detection_params.max_band_decorr; b++ ) - { - /*detector 1: envelope max*/ - *p_onset_detector_1 *= DIRAC_ONSET_ALPHA; - *p_onset_detector_1 = ( *p_onset_detector_1 > *input_power_f ) ? *p_onset_detector_1 : *input_power_f; - - /*detector 2: envelope min*/ - *p_onset_detector_2 = DIRAC_ONSET_BETA * *p_onset_detector_2 + ( 1.f - DIRAC_ONSET_BETA ) * *p_onset_detector_1; - *p_onset_detector_2 = ( *p_onset_detector_2 < *p_onset_detector_1 ) ? *p_onset_detector_2 : *p_onset_detector_1; - - /*onset filter limited between 0 and 1*/ - tmp_f = ( DIRAC_ONSET_GAIN * *p_onset_detector_2 ) / ( *p_onset_detector_1 + EPSILON ); - tmp_f = ( tmp_f < 0.f ) ? 0.f : tmp_f; - tmp_f = ( tmp_f > 1.f ) ? 1.f : tmp_f; - onset_filter[b] = tmp_f; - - input_power_f++; - p_onset_detector_1++; - p_onset_detector_2++; - } - - onset_filter += h_dirac_onset_detection_params.num_freq_bands; - } - - return; -} -#else void ivas_dirac_dec_onset_detection_process_fx( const Word32 *input_power_f, // Qx Word32 *onset_filter, // Qx @@ -367,4 +285,3 @@ void ivas_dirac_dec_onset_detection_process_fx( return; } -#endif diff --git a/lib_rend/ivas_dirac_output_synthesis_dec.c b/lib_rend/ivas_dirac_output_synthesis_dec.c index 72c32b57a..54ff29439 100644 --- a/lib_rend/ivas_dirac_output_synthesis_dec.c +++ b/lib_rend/ivas_dirac_output_synthesis_dec.c @@ -43,43 +43,27 @@ #include "ivas_rom_com.h" #include "ivas_rom_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" /* Function prototypes */ #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------- * Local constants *------------------------------------------------------------------------*/ -#define DIRAC_AVG_LENGTH_SYNTH_MS 20 /*averaging length in ms for DirAC synthesis*/ -#ifndef IVAS_FLOAT_FIXED -#define DIRAC_ALPHA_MAX 0.1f -#endif +#define DIRAC_AVG_LENGTH_SYNTH_MS 20 /*averaging length in ms for DirAC synthesis*/ #define DIRAC_ALPHA_MAX_Q15 3276 /*0.1f q15*/ #define DIRAC_AVG_LENGTH_SYNTH_MS_FAST 10 -#ifndef IVAS_FLOAT_FIXED -#define DIRAC_ALPHA_MAX_FAST 0.12f -#endif -#define DIRAC_ALPHA_MAX_FAST_Q15 3932 /*0.12f q15*/ -#ifndef IVAS_FLOAT_FIXED -#define DIRECTION_SMOOTHNESS_ALPHA 0.01f -#endif +#define DIRAC_ALPHA_MAX_FAST_Q15 3932 /*0.12f q15*/ #define DIRECTION_SMOOTHNESS_ALPHA_Q31 ( 21474836 ) /*0.01f q31*/ -#ifdef IVAS_FLOAT_FIXED #define POINT_3679_Q31 790059234 /*.3679 q31*/ #define POINT_1175_Q31 252329329 /*.1175 q31*/ -#endif /*------------------------------------------------------------------------- * Local function prototypes *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_direct_fx( const Word16 num_channels, const Word16 num_freq_bands, const Word32 *direct_power_factor, const Word32 *reference_power, const Word16 *q_reference_power, const Word32 *direct_responses, const Word32 *direct_responses_square, Word32 *cy_auto_dir_smooth, Word16 *q_cy_auto_dir_smooth, Word32 *cy_cross_dir_smooth, Word16 *q_cy_cross_dir_smooth ); static void computeTargetPSDs_direct_subframe_fx( const Word16 num_channels, const Word16 num_freq_bands, const Word32 *direct_power_factor, const Word32 *reference_power, const Word16 *q_reference_power, const Word32 *direct_responses, const Word32 *direct_responses_square, Word32 *cy_auto_dir_smooth, Word16 *q_cy_auto_dir_smooth, Word32 *cy_cross_dir_smooth, Word16 *q_cy_cross_dir_smooth ); @@ -97,25 +81,6 @@ static void spreadCoherencePanningHoa_fx( const Word16 azimuth, const Word16 ele static void spreadCoherencePanningVbap_fx( const Word16 azimuth, const Word16 elevation, const Word16 spreadCoh_fx, Word32 *direct_response_fx, Word16 *Q_direct_response, const Word16 num_channels_dir, const VBAP_HANDLE hVBAPdata ); static void normalizePanningGains_fx( Word32 *direct_response_fx, Word16 *q_direct_res, const Word16 num_channels_dir ); -#else -static void computeTargetPSDs_direct( const int16_t num_channels, const int16_t num_freq_bands, const float *direct_power_factor, const float *reference_power, const float *direct_responses, const float *direct_responses_square, float *cy_auto_dir_smooth, float *cy_cross_dir_smooth ); - -static void computeTargetPSDs_direct_subframe( const int16_t num_channels, const int16_t num_freq_bands, const float *direct_power_factor, const float *reference_power, const float *direct_responses, const float *direct_responses_square, float *cy_auto_dir_smooth, float *cy_cross_dir_smooth ); - -static void computeTargetPSDs_diffuse( const int16_t num_channels, const int16_t num_freq_bands, const int16_t start_band, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, float *cy_auto_diff_smooth ); - -static void computeTargetPSDs_diffuse_subframe( const int16_t num_channels, const int16_t num_freq_bands, const int16_t start_band, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, float *cy_auto_diff_smooth ); - -static void computeTargetPSDs_diffuse_with_onsets( const int16_t num_channels, const int16_t num_freq_bands, const int16_t num_decorr_freq_bands, const int16_t *proto_frame_diff_index, const float *diffuse_power_factor, const float *reference_power, const float *diffuse_responses_square, const float *onset_filter, float *cy_auto_diff_smooth ); - -static void computeAlphaSynthesis( float *alpha_synthesis, const int16_t averaging_length_ms, const float maxAlpha, int16_t *numAlphas, const int16_t slot_size, const int16_t num_freq_bands, const float *frequency_axis, const int32_t output_Fs ); - -static void spreadCoherencePanningHoa( const int16_t azimuth, const int16_t elevation, const float spreadCoh, float *direct_response, const int16_t num_channels_dir, const int16_t ambisonics_order ); - -static void spreadCoherencePanningVbap( const int16_t azimuth, const int16_t elevation, const float spreadCoh, float *direct_response, const int16_t num_channels_dir, const VBAP_HANDLE hVBAPdata ); - -static void normalizePanningGains( float *direct_response, const int16_t num_channels_dir ); -#endif /*------------------------------------------------------------------------- @@ -124,7 +89,6 @@ static void normalizePanningGains( float *direct_response, const int16_t num_cha * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_output_synthesis_open_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ @@ -460,268 +424,6 @@ ivas_error ivas_dirac_dec_output_synthesis_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_dirac_dec_output_synthesis_open( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - RENDERER_TYPE renderer_type, /* i : renderer type */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) -{ - int16_t idx, ch_idx; - int16_t size; - float tmp; - uint16_t num_diffuse_responses; - float temp_alpha_synthesis[CLDFB_NO_CHANNELS_MAX]; - - /* pointers to structs for allocation */ - DIRAC_OUTPUT_SYNTHESIS_PARAMS *dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - DIRAC_OUTPUT_SYNTHESIS_STATE *dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - /* check / set input parameters */ - assert( hSpatParamRendCom->num_freq_bands > 0 && "Error: Number of frequency bands <= 0!" ); - assert( hDirACRend->hOutSetup.nchan_out_woLFE > 0 && "Error: Number of output channels > 0!" ); - assert( hDirACRend->num_outputs_diff > 0 ); - assert( hSpatParamRendCom->slot_size > 0 ); - assert( hDirACRend->hOutSetup.is_loudspeaker_setup == 0 || hDirACRend->hOutSetup.is_loudspeaker_setup == 1 ); - assert( hDirACRend->diffuse_response_function != NULL ); - - if ( hDirACRend->proto_signal_decorr_on ) - { - dirac_output_synthesis_params->max_band_decorr = hDirACRend->h_freq_domain_decorr_ap_params->max_band_decorr; - } - else - { - dirac_output_synthesis_params->max_band_decorr = 0; - } - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - dirac_output_synthesis_state->diffuse_responses_square = NULL; - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - if ( ( dirac_output_synthesis_state->diffuse_responses_square = (float *) malloc( 2 * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( ( dirac_output_synthesis_state->diffuse_responses_square = (float *) malloc( hDirACRend->hOutSetup.nchan_out_woLFE * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - - /* prototype power buffers */ - dirac_output_synthesis_state->proto_power_smooth_prev = NULL; - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( ( dirac_output_synthesis_state->proto_power_smooth_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_protos_dir * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - if ( dirac_output_synthesis_params->max_band_decorr > 0 && ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) ) - { - if ( ( dirac_output_synthesis_state->proto_power_diff_smooth_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirACRend->hOutSetup.nchan_out_woLFE * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else - { - dirac_output_synthesis_state->proto_power_diff_smooth_prev = NULL; - } - - /* buffer length and interpolator */ - if ( ( dirac_output_synthesis_params->interpolator = (float *) malloc( JBM_CLDFB_SLOTS_IN_SUBFRAME * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - - /* target PSD buffers */ - if ( hodirac_flag ) - { - size = hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir * DIRAC_HO_NUMSECTORS; - } - else - { - size = hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir; - } - if ( ( dirac_output_synthesis_state->cy_cross_dir_smooth_prev = (float *) malloc( size * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - dirac_output_synthesis_state->cy_auto_dir_smooth_prev = NULL; - if ( ( dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else - { - if ( ( dirac_output_synthesis_state->cy_auto_dir_smooth_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) - { - if ( ( dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else - { - if ( ( dirac_output_synthesis_state->cy_auto_diff_smooth_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - } - - /* direct and diffuse gain buffers */ - if ( ( dirac_output_synthesis_state->gains_dir_prev = (float *) malloc( size * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( ( dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( dirac_output_synthesis_params->max_band_decorr * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD && hDirACRend->synthesisConf != DIRAC_SYNTHESIS_MONO ) - { - if ( ( dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - else - { - if ( ( dirac_output_synthesis_state->gains_diff_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - } - - /*-----------------------------------------------------------------* - * prepare processing parameters - *-----------------------------------------------------------------*/ - - /* compute alpha */ - if ( !( renderer_type == RENDERER_BINAURAL_PARAMETRIC || renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS, DIRAC_ALPHA_MAX, &dirac_output_synthesis_params->numAlphas, hSpatParamRendCom->slot_size, hSpatParamRendCom->num_freq_bands, hDirACRend->frequency_axis, output_Fs ); - if ( ( dirac_output_synthesis_params->alpha_synthesis = (float *) malloc( dirac_output_synthesis_params->numAlphas * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis, dirac_output_synthesis_params->numAlphas ); - - computeAlphaSynthesis( temp_alpha_synthesis, DIRAC_AVG_LENGTH_SYNTH_MS_FAST, DIRAC_ALPHA_MAX_FAST, &dirac_output_synthesis_params->numAlphasFast, hSpatParamRendCom->slot_size, hSpatParamRendCom->num_freq_bands, hDirACRend->frequency_axis, output_Fs ); - if ( ( dirac_output_synthesis_params->alpha_synthesis_fast = (float *) malloc( dirac_output_synthesis_params->numAlphasFast * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - mvr2r( temp_alpha_synthesis, dirac_output_synthesis_params->alpha_synthesis_fast, dirac_output_synthesis_params->numAlphasFast ); - - if ( ( dirac_output_synthesis_state->reference_power_smooth_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - if ( ( dirac_output_synthesis_state->direction_smoothness_prev = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC synthesis\n" ) ); - } - set_zero( dirac_output_synthesis_state->reference_power_smooth_prev, hSpatParamRendCom->num_freq_bands ); - set_zero( dirac_output_synthesis_state->direction_smoothness_prev, hSpatParamRendCom->num_freq_bands ); - } - else - { - dirac_output_synthesis_params->alpha_synthesis = NULL; - dirac_output_synthesis_params->alpha_synthesis_fast = NULL; - dirac_output_synthesis_state->reference_power_smooth_prev = NULL; - dirac_output_synthesis_state->direction_smoothness_prev = NULL; - } - - /* compute interpolator */ - for ( idx = 1; idx <= JBM_CLDFB_SLOTS_IN_SUBFRAME; ++idx ) - { - dirac_output_synthesis_params->interpolator[idx - 1] = (float) idx / (float) JBM_CLDFB_SLOTS_IN_SUBFRAME; - } - - /* prepare diffuse response function */ - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - num_diffuse_responses = 2; - } - else - { - num_diffuse_responses = hDirACRend->hOutSetup.nchan_out_woLFE; - } - - if ( dirac_output_synthesis_state->diffuse_responses_square != NULL ) - { - for ( ch_idx = 0; ch_idx < num_diffuse_responses; ++ch_idx ) - { - /*dirac_output_synthesis_state->diffuse_responses_square[ch_idx] = pow(dirac_output_synthesis_params->diffuse_response_function[ch_idx]/max_response, 2.0f);*/ - tmp = hDirACRend->diffuse_response_function[ch_idx]; - - dirac_output_synthesis_state->diffuse_responses_square[ch_idx] = tmp * tmp; - } - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - int16_t diff_compensation_order; - float diff_nrg_total, diff_nrg, diff_nrg_trans, diff_nrg_decorr; - - diff_compensation_order = nchan_transport >= 3 ? 3 : 2; /* compensate missing diffuseness modelling up order 2, except for HR*/ - diff_compensation_order = min( diff_compensation_order, hDirACRend->hOutSetup.ambisonics_order ); - - diff_nrg_total = 0; - diff_nrg_trans = 0; - diff_nrg_decorr = 0; - for ( ch_idx = 0; ch_idx < ( diff_compensation_order + 1 ) * ( diff_compensation_order + 1 ); ch_idx++ ) - { - diff_nrg = hDirACRend->diffuse_response_function[ch_idx] * hDirACRend->diffuse_response_function[ch_idx]; - diff_nrg_total += diff_nrg; - /* is it a transport channel?*/ - if ( ch_idx == 0 || hDirACRend->proto_index_dir[ch_idx] != 0 ) - { - diff_nrg_trans += diff_nrg; - } - /* is it a decorrelated or transport channel?*/ - if ( ch_idx < hDirACRend->num_outputs_diff ) - { - diff_nrg_decorr += diff_nrg; - } - } - dirac_output_synthesis_params->diffuse_compensation_factor = diff_nrg_total / diff_nrg_trans; - dirac_output_synthesis_params->diffuse_compensation_factor_decorr = diff_nrg_total / diff_nrg_decorr; - } - else - { - dirac_output_synthesis_params->diffuse_compensation_factor = 0.f; - dirac_output_synthesis_params->diffuse_compensation_factor_decorr = 0.f; - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -730,78 +432,6 @@ ivas_error ivas_dirac_dec_output_synthesis_open( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_init( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const int16_t nchan_out_woLFE, /* i : number of output audio channels without LFE */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) -{ - int16_t size; - - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - /*-----------------------------------------------------------------* - * init outputSynthesisPSD_Init - *-----------------------------------------------------------------*/ - - /* initialize buffers */ - if ( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev != NULL ) - { - set_zero( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev, hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir ); - } - - if ( hodirac_flag ) - { - size = hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir * DIRAC_HO_NUMSECTORS; - } - else - { - size = hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir; - } - set_zero( h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev, size ); - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, h_dirac_output_synthesis_params->max_band_decorr * hDirACRend->num_outputs_diff ); - } - else if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD ) - { - set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff ); - } - else - { - set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev, hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir ); - } - - if ( h_dirac_output_synthesis_state->proto_power_smooth_prev != NULL ) - { - set_zero( h_dirac_output_synthesis_state->proto_power_smooth_prev, hSpatParamRendCom->num_freq_bands * hDirACRend->num_protos_dir ); - } - set_zero( h_dirac_output_synthesis_state->gains_dir_prev, size ); - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - set_zero( h_dirac_output_synthesis_state->gains_diff_prev, h_dirac_output_synthesis_params->max_band_decorr * hDirACRend->num_outputs_diff ); - } - else - { - set_zero( h_dirac_output_synthesis_state->gains_diff_prev, hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_dir ); - } - - if ( h_dirac_output_synthesis_state->proto_power_diff_smooth_prev != NULL ) - { - set_zero( h_dirac_output_synthesis_state->proto_power_diff_smooth_prev, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); - } - - return; -} -#else void ivas_dirac_dec_output_synthesis_init_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ @@ -886,7 +516,6 @@ void ivas_dirac_dec_output_synthesis_init_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -895,8 +524,7 @@ void ivas_dirac_dec_output_synthesis_init_fx( * Memory deallocation of Output synthesis sub-module *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_close( +void ivas_dirac_dec_output_synthesis_close_fx( DIRAC_REND_HANDLE hDirACRend /* i/o: DirAC handle */ ) { @@ -909,161 +537,67 @@ void ivas_dirac_dec_output_synthesis_close( *-----------------------------------------------------------------*/ /* free interpolator */ - if ( ( dirac_output_synthesis_params )->interpolator != NULL ) + IF( ( dirac_output_synthesis_params )->interpolator_fx != NULL ) { - free( ( dirac_output_synthesis_params )->interpolator ); - ( dirac_output_synthesis_params )->interpolator = NULL; + free( ( dirac_output_synthesis_params )->interpolator_fx ); + ( dirac_output_synthesis_params )->interpolator_fx = NULL; } /* free alpha */ - if ( ( dirac_output_synthesis_params )->alpha_synthesis != NULL ) + IF( ( dirac_output_synthesis_params )->alpha_synthesis_fx != NULL ) { - free( ( dirac_output_synthesis_params )->alpha_synthesis ); - ( dirac_output_synthesis_params )->alpha_synthesis = NULL; + free( ( dirac_output_synthesis_params )->alpha_synthesis_fx ); + ( dirac_output_synthesis_params )->alpha_synthesis_fx = NULL; } - if ( ( dirac_output_synthesis_params )->alpha_synthesis_fast != NULL ) + IF( ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx != NULL ) { - free( ( dirac_output_synthesis_params )->alpha_synthesis_fast ); - ( dirac_output_synthesis_params )->alpha_synthesis_fast = NULL; + free( ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx ); + ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx = NULL; } - if ( ( dirac_output_synthesis_state )->reference_power_smooth_prev != NULL ) + IF( ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->reference_power_smooth_prev ); - ( dirac_output_synthesis_state )->reference_power_smooth_prev = NULL; + free( ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx ); + ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx = NULL; } - if ( ( dirac_output_synthesis_state )->direction_smoothness_prev != NULL ) + IF( ( dirac_output_synthesis_state )->direction_smoothness_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->direction_smoothness_prev ); - ( dirac_output_synthesis_state )->direction_smoothness_prev = NULL; + free( ( dirac_output_synthesis_state )->direction_smoothness_prev_fx ); + ( dirac_output_synthesis_state )->direction_smoothness_prev_fx = NULL; } - if ( ( dirac_output_synthesis_state )->diffuse_responses_square != NULL ) + IF( ( dirac_output_synthesis_state )->diffuse_responses_square_fx != NULL ) { - free( ( dirac_output_synthesis_state )->diffuse_responses_square ); - ( dirac_output_synthesis_state )->diffuse_responses_square = NULL; + free( ( dirac_output_synthesis_state )->diffuse_responses_square_fx ); + ( dirac_output_synthesis_state )->diffuse_responses_square_fx = NULL; } /* free power buffers */ - if ( ( dirac_output_synthesis_state )->proto_power_smooth_prev != NULL ) + IF( ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->proto_power_smooth_prev ); - ( dirac_output_synthesis_state )->proto_power_smooth_prev = NULL; + free( ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx ); + ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx = NULL; } - if ( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev != NULL ) + IF( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev ); - ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev = NULL; + free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx ); + ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx = NULL; } /* free target power buffers */ - if ( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev != NULL ) + IF( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev ); - ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev = NULL; + free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx ); + ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx = NULL; } - if ( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev != NULL ) + IF( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx != NULL ) { - free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev ); - ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev = NULL; + free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx ); + ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx = NULL; } - if ( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev != NULL ) - { - free( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev ); - ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev = NULL; - } - - /* free gain buffers */ - if ( ( dirac_output_synthesis_state )->gains_dir_prev != NULL ) - { - free( ( dirac_output_synthesis_state )->gains_dir_prev ); - ( dirac_output_synthesis_state )->gains_dir_prev = NULL; - } - if ( ( dirac_output_synthesis_state )->gains_diff_prev != NULL ) - { - free( ( dirac_output_synthesis_state )->gains_diff_prev ); - ( dirac_output_synthesis_state )->gains_diff_prev = NULL; - } - - return; -} -#else -void ivas_dirac_dec_output_synthesis_close_fx( - DIRAC_REND_HANDLE hDirACRend /* i/o: DirAC handle */ -) -{ - /* pointers to structs for allocation */ - DIRAC_OUTPUT_SYNTHESIS_PARAMS *dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - DIRAC_OUTPUT_SYNTHESIS_STATE *dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - /*-----------------------------------------------------------------* - * memory deallocation - *-----------------------------------------------------------------*/ - - /* free interpolator */ - IF( ( dirac_output_synthesis_params )->interpolator_fx != NULL ) - { - free( ( dirac_output_synthesis_params )->interpolator_fx ); - ( dirac_output_synthesis_params )->interpolator_fx = NULL; - } - - /* free alpha */ - IF( ( dirac_output_synthesis_params )->alpha_synthesis_fx != NULL ) - { - free( ( dirac_output_synthesis_params )->alpha_synthesis_fx ); - ( dirac_output_synthesis_params )->alpha_synthesis_fx = NULL; - } - IF( ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx != NULL ) - { - free( ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx ); - ( dirac_output_synthesis_params )->alpha_synthesis_fast_fx = NULL; - } - - IF( ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx ); - ( dirac_output_synthesis_state )->reference_power_smooth_prev_fx = NULL; - } - - IF( ( dirac_output_synthesis_state )->direction_smoothness_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->direction_smoothness_prev_fx ); - ( dirac_output_synthesis_state )->direction_smoothness_prev_fx = NULL; - } - - IF( ( dirac_output_synthesis_state )->diffuse_responses_square_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->diffuse_responses_square_fx ); - ( dirac_output_synthesis_state )->diffuse_responses_square_fx = NULL; - } - - /* free power buffers */ - IF( ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx ); - ( dirac_output_synthesis_state )->proto_power_smooth_prev_fx = NULL; - } - - IF( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx ); - ( dirac_output_synthesis_state )->proto_power_diff_smooth_prev_fx = NULL; - } - - /* free target power buffers */ - IF( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx ); - ( dirac_output_synthesis_state )->cy_auto_dir_smooth_prev_fx = NULL; - } - IF( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx != NULL ) - { - free( ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx ); - ( dirac_output_synthesis_state )->cy_cross_dir_smooth_prev_fx = NULL; - } - IF( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev_fx != NULL ) + IF( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev_fx != NULL ) { free( ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev_fx ); ( dirac_output_synthesis_state )->cy_auto_diff_smooth_prev_fx = NULL; @@ -1082,7 +616,6 @@ void ivas_dirac_dec_output_synthesis_close_fx( } return; } -#endif /*------------------------------------------------------------------------- @@ -1091,240 +624,6 @@ void ivas_dirac_dec_output_synthesis_close_fx( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_process_slot( - const float *reference_power, /* i : Estimated power */ - const float *onset, /* i : onset filter */ - const int16_t *azimuth, - const int16_t *elevation, - const float *diffuseness, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const int16_t sh_rot_max_order, - const float *p_Rmat, /* i : rotation matrix */ - const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ - const IVAS_OUTPUT_SETUP hOutSetup, /* i : output setup structure */ - const int16_t nchan_transport, /* i : number of transport channels*/ - const int16_t md_idx, - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - const int16_t dec_param_estim ) -{ - int16_t num_freq_bands, num_channels_dir; - int16_t num_freq_bands_diff, num_channels_diff; - int16_t ch_idx; - float aux_buf[CLDFB_NO_CHANNELS_MAX]; - int16_t diff_start_band; - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - h_dirac_output_synthesis_state->onset_filter = onset; - - /*-----------------------------------------------------------------* - * processing - *-----------------------------------------------------------------*/ - - /* collect some often used parameters */ - num_freq_bands = hSpatParamRendCom->num_freq_bands; - num_channels_dir = hDirACRend->num_outputs_dir; - num_channels_diff = hDirACRend->num_outputs_diff; - num_freq_bands_diff = h_dirac_output_synthesis_params->max_band_decorr; - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) - { - num_channels_dir = hOutSetup.nchan_out_woLFE; - } - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD && hodirac_flag ) - { - ivas_dirac_dec_compute_directional_responses( hSpatParamRendCom, - hDirACRend, - hVBAPdata, - NULL, - NULL, - azimuth, - elevation, - md_idx, - NULL, - 2, - p_Rmat, - hodirac_flag ); - } - - if ( dec_param_estim == FALSE && hodirac_flag ) - { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - v_multc( hSpatParamRendCom->energy_ratio1[md_idx], -1.f, aux_buf, num_freq_bands ); - v_addc( aux_buf, 1.f, aux_buf, num_freq_bands ); - mvr2r( hSpatParamRendCom->energy_ratio1[md_idx], - h_dirac_output_synthesis_state->direct_power_factor, - num_freq_bands ); - mvr2r( aux_buf, - h_dirac_output_synthesis_state->diffuse_power_factor, - num_freq_bands ); - - v_multc( hSpatParamRendCom->energy_ratio2[md_idx], -1.f, aux_buf, num_freq_bands ); - v_addc( aux_buf, 1.f, aux_buf, num_freq_bands ); - mvr2r( hSpatParamRendCom->energy_ratio2[md_idx], - &h_dirac_output_synthesis_state->direct_power_factor[hSpatParamRendCom->num_freq_bands], - num_freq_bands ); - mvr2r( aux_buf, - &h_dirac_output_synthesis_state->diffuse_power_factor[hSpatParamRendCom->num_freq_bands], - num_freq_bands ); - } - else - { - ivas_dirac_dec_compute_gain_factors( num_freq_bands, - hSpatParamRendCom->diffuseness_vector[md_idx], - h_dirac_output_synthesis_params->max_band_decorr, - h_dirac_output_synthesis_state->direct_power_factor, - h_dirac_output_synthesis_state->diffuse_power_factor ); - } - } - else // ( dec_param_estim == TRUE ) - if ( dec_param_estim == TRUE ) - { - - /* compute direct responses */ - ivas_dirac_dec_compute_directional_responses( hSpatParamRendCom, - hDirACRend, - hVBAPdata, - NULL, - NULL, - azimuth, - elevation, - md_idx, - NULL, - sh_rot_max_order, - p_Rmat, - hodirac_flag ); - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - ivas_dirac_dec_compute_gain_factors( num_freq_bands, - diffuseness, - h_dirac_output_synthesis_params->max_band_decorr, - h_dirac_output_synthesis_state->direct_power_factor, - h_dirac_output_synthesis_state->diffuse_power_factor ); - - - v_multc( h_dirac_output_synthesis_state->direct_power_factor, - 0.25f, - h_dirac_output_synthesis_state->direct_power_factor, - num_freq_bands ); - v_multc( h_dirac_output_synthesis_state->diffuse_power_factor, - 0.25f, - h_dirac_output_synthesis_state->diffuse_power_factor, - num_freq_bands ); - - /*Direct gain*/ - for ( ch_idx = 0; ch_idx < min( 4, nchan_transport ); ch_idx++ ) - { - int16_t k; - if ( ch_idx != 0 ) - { - float a, b, c; - - /*Directonal sound gain nrg compensation*/ - for ( k = 0; k < num_freq_bands_diff; k++ ) - { - a = h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands + k]; - b = reference_power[k + num_freq_bands] / ( reference_power[k + ( ch_idx + 1 ) * num_freq_bands] + EPSILON ); - c = 1.f + ( 1.f / 6.f ) * ( h_dirac_output_synthesis_params->diffuse_compensation_factor_decorr - 1.f ); /*Diffuseness modellling nrg compensation*/ - h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( diffuseness[k] * c + ( ( 1.f - diffuseness[k] ) * a * a * b ) ); - } - for ( ; k < num_freq_bands; k++ ) - { - a = h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands + k]; - b = reference_power[k + num_freq_bands] / ( reference_power[k + ( ch_idx + 1 ) * num_freq_bands] + EPSILON ); - c = 1.f + ( 1.f / 6.f ) * ( h_dirac_output_synthesis_params->diffuse_compensation_factor - 1.f ); /*Diffuseness modellling nrg compensation*/ - h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( diffuseness[k] * c + ( ( 1.f - diffuseness[k] ) * a * a * b ) ); - } - } - else - { - /*Diffuseness modellling nrg compensation*/ - for ( k = 0; k < num_freq_bands_diff; k++ ) - { - h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( 1.0f + diffuseness[k] * 0.5f * ( h_dirac_output_synthesis_params->diffuse_compensation_factor_decorr - 1.f ) ); - } - for ( ; k < num_freq_bands; k++ ) - { - h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands + k] += 0.25f * sqrtf( 1.0f + diffuseness[k] * 0.5f * ( h_dirac_output_synthesis_params->diffuse_compensation_factor - 1.f ) ); - } - } - } - - /*Directional gain (panning)*/ - for ( ch_idx = min( 4, nchan_transport ); ch_idx < num_channels_dir; ch_idx++ ) - { - v_mult( h_dirac_output_synthesis_state->direct_power_factor, - &h_dirac_output_synthesis_state->direct_responses[ch_idx * num_freq_bands], - aux_buf, - num_freq_bands ); - - v_add( aux_buf, - &h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands], - &h_dirac_output_synthesis_state->cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands ); - } - - /*Diffuse gain*/ - for ( ch_idx = min( 4, nchan_transport ); ch_idx < num_channels_diff; ch_idx++ ) - { - v_multc( h_dirac_output_synthesis_state->diffuse_power_factor, - hDirACRend->diffuse_response_function[ch_idx], - aux_buf, - num_freq_bands_diff ); - - v_add( aux_buf, - &h_dirac_output_synthesis_state->cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], - &h_dirac_output_synthesis_state->cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], - num_freq_bands_diff ); - } - - return; - } - else - { - /* compute reference and diffuse power factor for this frame */ - ivas_dirac_dec_compute_power_factors( num_freq_bands, - diffuseness, - h_dirac_output_synthesis_params->max_band_decorr, - h_dirac_output_synthesis_state->direct_power_factor, - h_dirac_output_synthesis_state->diffuse_power_factor ); - } - } - - diff_start_band = 0; - if ( h_dirac_output_synthesis_params->use_onset_filters ) - { - computeTargetPSDs_diffuse_with_onsets( num_channels_dir, - num_freq_bands, h_dirac_output_synthesis_params->max_band_decorr, - hDirACRend->proto_index_diff, - h_dirac_output_synthesis_state->diffuse_power_factor, - reference_power, - h_dirac_output_synthesis_state->diffuse_responses_square, - onset, - h_dirac_output_synthesis_state->cy_auto_diff_smooth ); - - diff_start_band = h_dirac_output_synthesis_params->max_band_decorr; - } - - /* process other PSDs only slot wise for 4 transport channels */ - if ( dec_param_estim == TRUE ) - { - computeTargetPSDs_direct( num_channels_dir, num_freq_bands, h_dirac_output_synthesis_state->direct_power_factor, reference_power, h_dirac_output_synthesis_state->direct_responses, h_dirac_output_synthesis_state->direct_responses_square, h_dirac_output_synthesis_state->cy_auto_dir_smooth, h_dirac_output_synthesis_state->cy_cross_dir_smooth ); - - computeTargetPSDs_diffuse( num_channels_dir, num_freq_bands, diff_start_band, h_dirac_output_synthesis_state->diffuse_power_factor, reference_power, h_dirac_output_synthesis_state->diffuse_responses_square, h_dirac_output_synthesis_state->cy_auto_diff_smooth ); - } - - return; -} -#else void ivas_dirac_dec_output_synthesis_process_slot_fx( const Word32 *reference_power, /* i : Estimated power Q(q_reference_power)*/ const Word16 q_reference_power, /* i : Estimated power Q */ @@ -1871,7 +1170,6 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -1880,7 +1178,6 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ Word32 ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ @@ -2495,1348 +1792,297 @@ void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( return; } -#else -void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int16_t nbslots, /* i : number of slots to process */ - const float *onset_filter, - float *diffuseness, - const int16_t hodirac_flag, /* i : flag to indicate HO-DirAC mode */ - const int16_t dec_param_estim ) + + +/*------------------------------------------------------------------------- + * ivas_dirac_dec_output_synthesis_process_subframe_psd_ls() + * + * + *------------------------------------------------------------------------*/ +void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( + Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals Q(q_Cldfb)*/ + Word32 ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals Q(q_Cldfb)*/ + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ + DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ + const Word16 nbslots, /* i : number of slots to process */ + Word32 *diffuseness_vector, /* i : diffuseness (needed for direction smoothing) Q(31)*/ + Word32 *reference_power_smooth, /*Q(q_reference_power_smooth)*/ + Word16 *q_reference_power_smooth, + Word32 qualityBasedSmFactor, /*Q(31)*/ + const Word16 enc_param_start_band, + Word16 *q_Cldfb ) { - int16_t buf_idx, ch_idx, i, l; - int16_t num_freq_bands, num_freq_bands_diff; - int16_t num_channels_dir, num_channels_diff; - float g, g1, g2; - float *p_gains_dir, *p_gains_diff; - float *p_gains_dir_prev, *p_gains_diff_prev; - float *p_cy_cross_dir_smooth; - float *p_cy_auto_diff_smooth; - float *p_proto, *p_out_real, *p_out_imag; - float *p_proto_diff; - int16_t *proto_direct_index, num_protos_dir; - float output_real[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - float output_imag[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - DIRAC_OUTPUT_SYNTHESIS_PARAMS h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE h_dirac_output_synthesis_state; - int16_t nchan_transport_foa; - int16_t ch_idx_diff; - float aux_buf[CLDFB_NO_CHANNELS_MAX]; - float ratio_float[DIRAC_HO_NUMSECTORS * CLDFB_NO_CHANNELS_MAX]; + Word16 buf_idx, num_freq_bands; + Word16 diff_start_band; + Word16 k, l; + Word16 nchan_out_woLFE; + Word32 *p_power_smooth_prev, *p_power_diff_smooth_prev; + Word32 *p_gain_1, *p_gain_2; + Word32 *p_power_smooth_diff, *p_power_smooth; + Word32 *p_gains_dir, *p_gains_diff; + Word32 g, g1, g2; + Word32 *p_cy_auto_dir_smooth, *p_cy_auto_dir_smooth_prev; + Word16 q_cy_auto_dir_smooth_local[MAX_OUTPUT_CHANNELS], q_cy_auto_dir_smooth_prev_local[MAX_OUTPUT_CHANNELS]; + Word32 *p_cy_cross_dir_smooth, *p_cy_cross_dir_smooth_prev; + Word32 *p_cy_auto_diff_smooth, *p_cy_auto_diff_smooth_prev; + Word32 gains_dir[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + Word32 gains_diff[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; + DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; + Word16 *proto_direct_index, num_protos_dir; + Word32 target_power_y, target_power_y1; + Word16 q_target_power_y, q_target_power_y1; + Word32 subtract_power_y; + Word32 subtract_target_ratio; + Word32 subtract_target_ratio_db; + Word32 a, b; + UWord16 nchan_target_psds; + Word32 alpha[CLDFB_NO_CHANNELS_MAX]; + Word16 *alpha_synthesis; + Word16 *alpha_synthesis_fast; + Word16 alphaMaxBin; + Word16 alphaMaxBinFast; + Word32 L_tmp; + Word16 exp_arr[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; + Word16 exp = 0, exp1, tmp, q_com, q_tmp, min_exp; + Word32 tmp32; + move16(); + + Word64 Cldfb_RealBuffer64_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word64 Cldfb_ImagBuffer64_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; + Word64 W_temp = 0; + move64(); + push_wmops( "dirac_out_synth_sfr" ); + + h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); + h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); /* collect some often used parameters */ - h_dirac_output_synthesis_params = hDirACRend->h_output_synthesis_psd_params; - h_dirac_output_synthesis_state = hDirACRend->h_output_synthesis_psd_state; proto_direct_index = hDirACRend->proto_index_dir; - + move16(); num_protos_dir = hDirACRend->num_protos_dir; + move16(); + nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; + move16(); num_freq_bands = hSpatParamRendCom->num_freq_bands; - num_freq_bands_diff = h_dirac_output_synthesis_params.max_band_decorr; - num_channels_dir = hDirACRend->num_outputs_dir; - num_channels_diff = hDirACRend->num_outputs_diff; - nchan_transport_foa = min( 4, nchan_transport ); - + move16(); + set16_fx( q_cy_auto_dir_smooth_local, h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, nchan_out_woLFE ); /*-----------------------------------------------------------------* - * comput target Gains + * compute target PSDs *-----------------------------------------------------------------*/ - - if ( hodirac_flag ) + IF( enc_param_start_band == 0 ) { - /*Direct gain*/ - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + IF( EQ_16( h_dirac_output_synthesis_params->use_onset_filters, 1 ) ) { - v_multc( diffuseness, - 1.f, - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands ); - v_multc( &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - h_dirac_output_synthesis_params.diffuse_compensation_factor - 1.f, - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands ); - - for ( l = 0; l < num_freq_bands; l++ ) - { - h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] = sqrtf( 1.f + h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] ); - } - } - - /*Directional gain*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - aux_buf[l] = 1.f - diffuseness[l]; - ratio_float[l] = 1.f - h_dirac_output_synthesis_state.direct_power_factor[hSpatParamRendCom->num_freq_bands + l]; - ratio_float[l + num_freq_bands] = 1.f - ratio_float[l]; - } - - v_mult( aux_buf, ratio_float, ratio_float, num_freq_bands ); - v_mult( aux_buf, &ratio_float[num_freq_bands], &ratio_float[num_freq_bands], num_freq_bands ); - - v_mult( ratio_float, - &h_dirac_output_synthesis_state.direct_responses[ch_idx * num_freq_bands], - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands ); - v_mult( &ratio_float[num_freq_bands], - &h_dirac_output_synthesis_state.direct_responses[ch_idx * num_freq_bands + num_freq_bands * num_channels_dir], - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + num_freq_bands * num_channels_dir], - num_freq_bands ); - } - - /*Diffuse gain*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) - { - v_multc( h_dirac_output_synthesis_state.diffuse_power_factor, - hDirACRend->diffuse_response_function[ch_idx], - &h_dirac_output_synthesis_state.cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], - num_freq_bands_diff ); - } - } - else if ( dec_param_estim == FALSE ) - { - /*Direct gain*/ - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) - { - v_mult( h_dirac_output_synthesis_state.diffuse_power_factor, - h_dirac_output_synthesis_state.diffuse_power_factor, - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands ); - v_multc( &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - h_dirac_output_synthesis_params.diffuse_compensation_factor_decorr - 1.f, - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], - num_freq_bands_diff ); - v_multc( &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + num_freq_bands_diff], - h_dirac_output_synthesis_params.diffuse_compensation_factor - 1.f, - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + num_freq_bands_diff], - num_freq_bands - num_freq_bands_diff ); - - for ( l = 0; l < num_freq_bands; l++ ) - { - h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] = sqrtf( 1.f + h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands + l] ); - } - } - - /*Directional gain*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) - { - v_mult( h_dirac_output_synthesis_state.direct_power_factor, - &h_dirac_output_synthesis_state.direct_responses[ch_idx * num_freq_bands], - &h_dirac_output_synthesis_state.cy_cross_dir_smooth[ch_idx * num_freq_bands], num_freq_bands ); + diff_start_band = h_dirac_output_synthesis_params->max_band_decorr; + move16(); } - - /*Diffuse gain*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) + ELSE { - v_multc( h_dirac_output_synthesis_state.diffuse_power_factor, hDirACRend->diffuse_response_function[ch_idx], &h_dirac_output_synthesis_state.cy_auto_diff_smooth[ch_idx * num_freq_bands_diff], num_freq_bands_diff ); + diff_start_band = 0; + move16(); } - } - - /*-----------------------------------------------------------------* - * compute gains - *-----------------------------------------------------------------*/ - - p_cy_cross_dir_smooth = h_dirac_output_synthesis_state.cy_cross_dir_smooth; - p_gains_dir = h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev; - /* Direct gains */ - if ( hodirac_flag ) - { - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); - g2 = ( 1.f - g1 ) * *( p_gains_dir ); - g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); - g2 = max( g2, 0.99f ); - g2 = min( g2, 2.0f ); - *( p_gains_dir++ ) = g2; - } - } - } - else - { - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + IF( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) { - for ( l = 0; l < num_freq_bands; l++ ) - { - g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); - g2 = ( 1.f - g1 ) * *( p_gains_dir ); - g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); - g2 = max( g2, 0.85f ); - g2 = min( g2, 1.15f ); - *( p_gains_dir++ ) = g2; - } + nchan_target_psds = 2; + move16(); } - } - - /*Directional gains*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) + ELSE { - g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); - g2 = ( 1.f - g1 ) * *( p_gains_dir ); - g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); - g2 = max( g2, -DIRAC_GAIN_LIMIT ); - g2 = min( g2, DIRAC_GAIN_LIMIT ); - *( p_gains_dir++ ) = g2; + nchan_target_psds = nchan_out_woLFE; + move16(); } - } - if ( hodirac_flag ) - { - p_cy_cross_dir_smooth = h_dirac_output_synthesis_state.cy_cross_dir_smooth + num_freq_bands * num_channels_dir; - p_gains_dir = h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev + num_freq_bands * num_channels_dir; + computeTargetPSDs_direct_subframe_fx( nchan_target_psds, num_freq_bands, + h_dirac_output_synthesis_state->direct_power_factor_fx, + reference_power_smooth, + q_reference_power_smooth, + h_dirac_output_synthesis_state->direct_responses_fx, + h_dirac_output_synthesis_state->direct_responses_square_fx, + h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, + q_cy_auto_dir_smooth_local, + h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, + &h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ); - /*Direct gains*/ - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) + // Scale cy_auto_diff_smooth_fx if required + IF( diff_start_band != 0 ) { - for ( l = 0; l < num_freq_bands; l++ ) - { - p_cy_cross_dir_smooth++; - p_gains_dir++; - } - } + q_com = s_min( *q_reference_power_smooth, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); + scale_sig32( reference_power_smooth, num_freq_bands, sub( q_com, *q_reference_power_smooth ) ); /**q_reference_power_smooth->q_com*/ + scale_sig32( h_dirac_output_synthesis_state->reference_power_smooth_prev_fx, num_freq_bands, sub( q_com, *q_reference_power_smooth ) ); /**q_reference_power_smooth->q_com*/ + scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, + i_mult( num_freq_bands, nchan_target_psds ), + sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth -> q_com*/ + *q_reference_power_smooth = q_com; + move16(); + h_dirac_output_synthesis_state->reference_power_smooth_prev_q = q_com; + move16(); - /*Directional gains*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - g1 = 0.3679f + onset_filter[l] * ( 0.1175f - 0.3679f ); - g2 = ( 1.f - g1 ) * *( p_gains_dir ); - g2 += g1 * ( *( p_cy_cross_dir_smooth++ ) ); - g2 = max( g2, -DIRAC_GAIN_LIMIT ); - g2 = min( g2, DIRAC_GAIN_LIMIT ); - *( p_gains_dir++ ) = g2; - } + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = q_com; + move16(); } - } - /*Diffuse gains*/ - p_cy_auto_diff_smooth = h_dirac_output_synthesis_state.cy_auto_diff_smooth + nchan_transport_foa * num_freq_bands_diff; - p_gains_diff = h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev + nchan_transport_foa * num_freq_bands_diff; - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - g1 = 0.1175f; - g2 = ( 1.f - g1 ) * *( p_gains_diff ); - g2 += g1 * ( *( p_cy_auto_diff_smooth++ ) ); - g2 = max( g2, 0.f ); - g2 = min( g2, DIRAC_GAIN_LIMIT ); - *( p_gains_diff++ ) = g2; - } + computeTargetPSDs_diffuse_subframe_fx( nchan_target_psds, num_freq_bands, diff_start_band, + h_dirac_output_synthesis_state->diffuse_power_factor_fx, + reference_power_smooth, + q_reference_power_smooth, + h_dirac_output_synthesis_state->diffuse_responses_square_fx, + h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, + &h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); } /*-----------------------------------------------------------------* - * gain interpolation and output streams + * compute variables for stereo transport signal type detection *-----------------------------------------------------------------*/ - for ( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) + IF( hDirACRend->masa_stereo_type_detect != NULL ) { - g1 = h_dirac_output_synthesis_params.interpolator[buf_idx]; - g2 = 1.f - g1; + MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect = hDirACRend->masa_stereo_type_detect; - /*Direct input->output*/ - p_gains_dir = h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev; - p_gains_dir_prev = h_dirac_output_synthesis_state.gains_dir_prev; - for ( ch_idx = 0; ch_idx < nchan_transport_foa; ch_idx++ ) - { - p_proto_diff = h_dirac_output_synthesis_state.proto_diffuse_buffer_f + buf_idx * 2 * num_freq_bands * num_channels_diff + ch_idx * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands; l++ ) - { - g = g1 * ( *( p_gains_dir++ ) ) + g2 * ( *( p_gains_dir_prev++ ) ); - output_real[l * num_channels_dir + ch_idx] = g * ( *( p_proto_diff++ ) ); - output_imag[l * num_channels_dir + ch_idx] = g * ( *( p_proto_diff++ ) ); - } - } + p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx; // q_cy_auto_dir_smooth + p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx; // q_cy_auto_diff_smooth + q_com = s_min( q_cy_auto_dir_smooth_local[1], h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); - /*Directional stream*/ - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_dir; ch_idx++ ) + IF( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) { - if ( hodirac_flag ) - { - if ( proto_direct_index[ch_idx] == 0 ) - { - float *p_proto2; - float gs1, gs2; - p_proto = h_dirac_output_synthesis_state.proto_direct_buffer_f + - buf_idx * 2 * num_freq_bands * num_protos_dir + - proto_direct_index[0] * 2 * num_freq_bands; - p_proto2 = h_dirac_output_synthesis_state.proto_direct_buffer_f + - buf_idx * 2 * num_freq_bands * num_protos_dir + - proto_direct_index[1] * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands; l++ ) - { - gs1 = g1 * ( *( p_gains_dir ) ) + g2 * ( *( p_gains_dir_prev ) ); - gs2 = g1 * ( *( p_gains_dir + num_freq_bands * num_channels_dir ) ) + g2 * ( *( p_gains_dir_prev + num_freq_bands * num_channels_dir ) ); - p_gains_dir++; - p_gains_dir_prev++; - - output_real[l * num_channels_dir + ch_idx] = 0.5f * gs1 * ( 1.772454e+00f * ( *p_proto ) + 1.023327e+00f * ( *p_proto2 ) ) + /* s1 */ - 0.5f * gs2 * ( 1.772454e+00f * ( *p_proto ) - 1.023327e+00f * ( *p_proto2 ) ); /* s2 */ - p_proto++; - p_proto2++; - output_imag[l * num_channels_dir + ch_idx] = 0.5f * gs1 * ( 1.772454e+00f * ( *p_proto ) + 1.023327e+00f * ( *p_proto2 ) ) + - 0.5f * gs2 * ( 1.772454e+00f * ( *p_proto ) - 1.023327e+00f * ( *p_proto2 ) ); - p_proto++; - p_proto2++; - } - } - else - { - p_proto = h_dirac_output_synthesis_state.proto_direct_buffer_f + - buf_idx * 2 * num_freq_bands * num_protos_dir + - proto_direct_index[ch_idx] * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands; l++ ) - { - p_gains_dir++; - p_gains_dir_prev++; + exp = Q31 - Q31; + move16(); + exp1 = 0; + move16(); + tmp32 = BASOP_Util_Divide3232_Scale_cadence( L_shl( p_cy_auto_dir_smooth[num_freq_bands], sub( q_com, q_cy_auto_dir_smooth_local[1] ) ), + ( L_add( Sqrt32( h_dirac_output_synthesis_state->direct_power_factor_fx[0], &exp ), EPSILON_FX ) ), // (Q31 - exp) + &exp1 ); + target_power_y = L_shr( tmp32, 1 ); // Q31 + (q_com - (31 - exp)) + q_target_power_y = add( sub( Q31, exp1 ), sub( q_com, sub( Q31, exp ) ) ); + q_target_power_y = sub( q_target_power_y, 1 ); + exp = Q31 - Q31; + move16(); + exp1 = 0; + move16(); + tmp32 = BASOP_Util_Divide3232_Scale_cadence( L_shl( p_cy_auto_diff_smooth[num_freq_bands], sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ), + ( L_add( Sqrt32( h_dirac_output_synthesis_state->diffuse_power_factor_fx[0], &exp ), EPSILON_FX ) ), // (Q31 - exp) + &exp1 ); + target_power_y1 = L_shr( tmp32, 1 ); // Q31 + (q_com - (31 - exp)) + q_target_power_y1 = add( sub( Q31, exp1 ), sub( q_com, sub( Q31, exp ) ) ); + q_target_power_y1 = sub( q_target_power_y1, 1 ); - output_real[l * num_channels_dir + ch_idx] = *( p_proto++ ); - output_imag[l * num_channels_dir + ch_idx] = *( p_proto++ ); - } - } - } - else - { - p_proto = h_dirac_output_synthesis_state.proto_direct_buffer_f + - buf_idx * 2 * num_freq_bands * num_protos_dir + - proto_direct_index[ch_idx] * 2 * num_freq_bands; - if ( proto_direct_index[ch_idx] == 0 ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - g = g1 * ( *( p_gains_dir++ ) ) + g2 * ( *( p_gains_dir_prev++ ) ); - output_real[l * num_channels_dir + ch_idx] = g * ( *( p_proto++ ) ); - output_imag[l * num_channels_dir + ch_idx] = g * ( *( p_proto++ ) ); - } - } - else - { - for ( l = 0; l < num_freq_bands; l++ ) - { - p_gains_dir++; - p_gains_dir_prev++; - output_real[l * num_channels_dir + ch_idx] = *( p_proto++ ); - output_imag[l * num_channels_dir + ch_idx] = *( p_proto++ ); - } - } - } + target_power_y = L_add( L_shl( target_power_y, sub( s_min( q_target_power_y1, q_target_power_y ), q_target_power_y ) ), L_shl( target_power_y1, sub( s_min( q_target_power_y1, q_target_power_y ), q_target_power_y1 ) ) ); /*min(q_target_power_y1, q_target_power_y )*/ + exp = s_min( q_target_power_y1, q_target_power_y ); } - - /*Diffuse stream*/ - p_gains_diff = h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev + nchan_transport_foa * num_freq_bands_diff; - p_gains_diff_prev = h_dirac_output_synthesis_state.gains_diff_prev + nchan_transport_foa * num_freq_bands_diff; - ch_idx_diff = nchan_transport_foa; - for ( ch_idx = nchan_transport_foa; ch_idx < num_channels_diff; ch_idx++ ) + ELSE { - if ( proto_direct_index[ch_idx] == 0 ) - { - p_proto = h_dirac_output_synthesis_state.proto_diffuse_buffer_f + buf_idx * 2 * num_freq_bands * num_channels_diff + ch_idx_diff * 2 * num_freq_bands; - ch_idx_diff++; - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - g = g1 * ( *( p_gains_diff++ ) ) + g2 * ( *( p_gains_diff_prev++ ) ); - output_real[l * num_channels_dir + hDirACRend->sba_map_tc[ch_idx]] += g * ( *( p_proto++ ) ); /* maps ch_idx 5 to 8 */ - output_imag[l * num_channels_dir + hDirACRend->sba_map_tc[ch_idx]] += g * ( *( p_proto++ ) ); - } - } - else - { - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - p_gains_diff++; - p_gains_diff_prev++; - } - } + target_power_y = L_add( + L_shl( p_cy_auto_dir_smooth[num_freq_bands], sub( q_com, q_cy_auto_dir_smooth_local[1] ) ), + L_shl( p_cy_auto_diff_smooth[num_freq_bands], sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ) ); // q_com + exp = q_com; + move16(); } - /*-----------------------------------------------------------------* - * Copy output or HOA decoder - *-----------------------------------------------------------------*/ - - if ( hDirACRend->hOutSetup.is_loudspeaker_setup && hDirACRend->hoa_decoder != NULL ) - { - float *p_real, *p_imag; - const float *hoa_decoder; + subtract_power_y = masa_stereo_type_detect->subtract_power_y_fx; // q_subtract_power_y + move32(); - hoa_decoder = hDirACRend->hoa_decoder; + a = 858993; /* ( 0.0004f in Q31 ); Temporal smoothing coefficient */ + move32(); + b = L_sub( ONE_IN_Q31, a ); /* Temporal smoothing coefficient */ - for ( ch_idx = 0; ch_idx < hDirACRend->hOutSetup.nchan_out_woLFE; ch_idx++ ) - { - p_real = RealBuffer[ch_idx][buf_idx]; - p_imag = ImagBuffer[ch_idx][buf_idx]; + q_com = s_min( exp, masa_stereo_type_detect->q_target_power_y_smooth ); + target_power_y = L_shl( target_power_y, sub( q_com, exp ) ); + masa_stereo_type_detect->target_power_y_smooth_fx = L_shl( masa_stereo_type_detect->target_power_y_smooth_fx, + sub( q_com, masa_stereo_type_detect->q_target_power_y_smooth ) ); + move32(); + masa_stereo_type_detect->target_power_y_smooth_fx = + L_add( Mpy_32_32( a, target_power_y ), + Mpy_32_32( b, masa_stereo_type_detect->target_power_y_smooth_fx ) ); //(Q31, q_com) -> q_com + move32(); + masa_stereo_type_detect->q_target_power_y_smooth = q_com; + move16(); + masa_stereo_type_detect->subtract_power_y_smooth_fx = + L_add( Mpy_32_32( a, subtract_power_y ), + Mpy_32_32( b, masa_stereo_type_detect->subtract_power_y_smooth_fx ) ); //(Q31, q_subtract_power_y) -> q_subtract_power_y + move32(); - for ( l = 0; l < num_freq_bands; l++ ) - { - p_out_real = output_real + l * num_channels_dir; - p_out_imag = output_imag + l * num_channels_dir; - p_real[l] = *( p_out_real++ ) * hoa_decoder[0]; - p_imag[l] = *( p_out_imag++ ) * hoa_decoder[0]; - for ( i = 1; i < num_channels_dir; i++ ) - { - p_real[l] += *( p_out_real++ ) * hoa_decoder[i]; - p_imag[l] += *( p_out_imag++ ) * hoa_decoder[i]; - } - } - hoa_decoder += 16; - } - } - else - { - for ( ch_idx = 0; ch_idx < num_channels_dir; ch_idx++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - RealBuffer[ch_idx][buf_idx][l] = output_real[l * num_channels_dir + ch_idx]; - ImagBuffer[ch_idx][buf_idx][l] = output_imag[l * num_channels_dir + ch_idx]; - } - } - } - } - - /*-----------------------------------------------------------------* - * update buffers - *-----------------------------------------------------------------*/ - - /* store estimates for next synthesis block */ - if ( hodirac_flag ) - { - mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); - } - else - { - mvr2r( h_dirac_output_synthesis_state.cy_cross_dir_smooth_prev, h_dirac_output_synthesis_state.gains_dir_prev, num_freq_bands * num_channels_dir ); - } - - mvr2r( h_dirac_output_synthesis_state.cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state.gains_diff_prev, num_freq_bands_diff * num_channels_diff ); - - /* reset values */ - if ( hodirac_flag ) - { - set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir * DIRAC_HO_NUMSECTORS ); - } - else - { - set_zero( h_dirac_output_synthesis_state.cy_cross_dir_smooth, num_freq_bands * num_channels_dir ); - } - - set_zero( h_dirac_output_synthesis_state.cy_auto_diff_smooth, num_freq_bands_diff * num_channels_diff ); - - return; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_dirac_dec_output_synthesis_process_subframe_psd_ls() - * - * - *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( - Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals Q(q_Cldfb)*/ - Word32 ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals Q(q_Cldfb)*/ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const Word16 nbslots, /* i : number of slots to process */ - Word32 *diffuseness_vector, /* i : diffuseness (needed for direction smoothing) Q(31)*/ - Word32 *reference_power_smooth, /*Q(q_reference_power_smooth)*/ - Word16 *q_reference_power_smooth, - Word32 qualityBasedSmFactor, /*Q(31)*/ - const Word16 enc_param_start_band, - Word16 *q_Cldfb ) -{ - Word16 buf_idx, num_freq_bands; - Word16 diff_start_band; - Word16 k, l; - Word16 nchan_out_woLFE; - Word32 *p_power_smooth_prev, *p_power_diff_smooth_prev; - Word32 *p_gain_1, *p_gain_2; - Word32 *p_power_smooth_diff, *p_power_smooth; - Word32 *p_gains_dir, *p_gains_diff; - Word32 g, g1, g2; - Word32 *p_cy_auto_dir_smooth, *p_cy_auto_dir_smooth_prev; - Word16 q_cy_auto_dir_smooth_local[MAX_OUTPUT_CHANNELS], q_cy_auto_dir_smooth_prev_local[MAX_OUTPUT_CHANNELS]; - Word32 *p_cy_cross_dir_smooth, *p_cy_cross_dir_smooth_prev; - Word32 *p_cy_auto_diff_smooth, *p_cy_auto_diff_smooth_prev; - Word32 gains_dir[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - Word32 gains_diff[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - Word16 *proto_direct_index, num_protos_dir; - Word32 target_power_y, target_power_y1; - Word16 q_target_power_y, q_target_power_y1; - Word32 subtract_power_y; - Word32 subtract_target_ratio; - Word32 subtract_target_ratio_db; - Word32 a, b; - UWord16 nchan_target_psds; - Word32 alpha[CLDFB_NO_CHANNELS_MAX]; - Word16 *alpha_synthesis; - Word16 *alpha_synthesis_fast; - Word16 alphaMaxBin; - Word16 alphaMaxBinFast; - Word32 L_tmp; - Word16 exp_arr[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - Word16 exp = 0, exp1, tmp, q_com, q_tmp, min_exp; - Word32 tmp32; - move16(); - - Word64 Cldfb_RealBuffer64_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word64 Cldfb_ImagBuffer64_fx[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - Word64 W_temp = 0; - move64(); - push_wmops( "dirac_out_synth_sfr" ); - - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - /* collect some often used parameters */ - proto_direct_index = hDirACRend->proto_index_dir; - move16(); - num_protos_dir = hDirACRend->num_protos_dir; - move16(); - nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; - move16(); - num_freq_bands = hSpatParamRendCom->num_freq_bands; - move16(); - set16_fx( q_cy_auto_dir_smooth_local, h_dirac_output_synthesis_state->q_cy_auto_dir_smooth, nchan_out_woLFE ); - - /*-----------------------------------------------------------------* - * compute target PSDs - *-----------------------------------------------------------------*/ - IF( enc_param_start_band == 0 ) - { - IF( EQ_16( h_dirac_output_synthesis_params->use_onset_filters, 1 ) ) - { - diff_start_band = h_dirac_output_synthesis_params->max_band_decorr; - move16(); - } - ELSE - { - diff_start_band = 0; - move16(); - } - - IF( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - nchan_target_psds = 2; - move16(); - } - ELSE - { - nchan_target_psds = nchan_out_woLFE; - move16(); - } - - computeTargetPSDs_direct_subframe_fx( nchan_target_psds, num_freq_bands, - h_dirac_output_synthesis_state->direct_power_factor_fx, - reference_power_smooth, - q_reference_power_smooth, - h_dirac_output_synthesis_state->direct_responses_fx, - h_dirac_output_synthesis_state->direct_responses_square_fx, - h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, - q_cy_auto_dir_smooth_local, - h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, - &h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ); - - // Scale cy_auto_diff_smooth_fx if required - IF( diff_start_band != 0 ) - { - q_com = s_min( *q_reference_power_smooth, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); - scale_sig32( reference_power_smooth, num_freq_bands, sub( q_com, *q_reference_power_smooth ) ); /**q_reference_power_smooth->q_com*/ - scale_sig32( h_dirac_output_synthesis_state->reference_power_smooth_prev_fx, num_freq_bands, sub( q_com, *q_reference_power_smooth ) ); /**q_reference_power_smooth->q_com*/ - scale_sig32( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, - i_mult( num_freq_bands, nchan_target_psds ), - sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth -> q_com*/ - *q_reference_power_smooth = q_com; - move16(); - h_dirac_output_synthesis_state->reference_power_smooth_prev_q = q_com; - move16(); - - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = q_com; - move16(); - } - - computeTargetPSDs_diffuse_subframe_fx( nchan_target_psds, num_freq_bands, diff_start_band, - h_dirac_output_synthesis_state->diffuse_power_factor_fx, - reference_power_smooth, - q_reference_power_smooth, - h_dirac_output_synthesis_state->diffuse_responses_square_fx, - h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, - &h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); - } - - /*-----------------------------------------------------------------* - * compute variables for stereo transport signal type detection - *-----------------------------------------------------------------*/ - - IF( hDirACRend->masa_stereo_type_detect != NULL ) - { - MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect = hDirACRend->masa_stereo_type_detect; - - p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx; // q_cy_auto_dir_smooth - p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx; // q_cy_auto_diff_smooth - q_com = s_min( q_cy_auto_dir_smooth_local[1], h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ); - - IF( EQ_32( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - exp = Q31 - Q31; - move16(); - exp1 = 0; - move16(); - tmp32 = BASOP_Util_Divide3232_Scale_cadence( L_shl( p_cy_auto_dir_smooth[num_freq_bands], sub( q_com, q_cy_auto_dir_smooth_local[1] ) ), - ( L_add( Sqrt32( h_dirac_output_synthesis_state->direct_power_factor_fx[0], &exp ), EPSILON_FX ) ), // (Q31 - exp) - &exp1 ); - target_power_y = L_shr( tmp32, 1 ); // Q31 + (q_com - (31 - exp)) - q_target_power_y = add( sub( Q31, exp1 ), sub( q_com, sub( Q31, exp ) ) ); - q_target_power_y = sub( q_target_power_y, 1 ); - - exp = Q31 - Q31; - move16(); - exp1 = 0; - move16(); - tmp32 = BASOP_Util_Divide3232_Scale_cadence( L_shl( p_cy_auto_diff_smooth[num_freq_bands], sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ), - ( L_add( Sqrt32( h_dirac_output_synthesis_state->diffuse_power_factor_fx[0], &exp ), EPSILON_FX ) ), // (Q31 - exp) - &exp1 ); - target_power_y1 = L_shr( tmp32, 1 ); // Q31 + (q_com - (31 - exp)) - q_target_power_y1 = add( sub( Q31, exp1 ), sub( q_com, sub( Q31, exp ) ) ); - q_target_power_y1 = sub( q_target_power_y1, 1 ); - - target_power_y = L_add( L_shl( target_power_y, sub( s_min( q_target_power_y1, q_target_power_y ), q_target_power_y ) ), L_shl( target_power_y1, sub( s_min( q_target_power_y1, q_target_power_y ), q_target_power_y1 ) ) ); /*min(q_target_power_y1, q_target_power_y )*/ - exp = s_min( q_target_power_y1, q_target_power_y ); - } - ELSE - { - target_power_y = L_add( - L_shl( p_cy_auto_dir_smooth[num_freq_bands], sub( q_com, q_cy_auto_dir_smooth_local[1] ) ), - L_shl( p_cy_auto_diff_smooth[num_freq_bands], sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ) ); // q_com - exp = q_com; - move16(); - } - - subtract_power_y = masa_stereo_type_detect->subtract_power_y_fx; // q_subtract_power_y - move32(); - - a = 858993; /* ( 0.0004f in Q31 ); Temporal smoothing coefficient */ - move32(); - b = L_sub( ONE_IN_Q31, a ); /* Temporal smoothing coefficient */ - - q_com = s_min( exp, masa_stereo_type_detect->q_target_power_y_smooth ); - target_power_y = L_shl( target_power_y, sub( q_com, exp ) ); - masa_stereo_type_detect->target_power_y_smooth_fx = L_shl( masa_stereo_type_detect->target_power_y_smooth_fx, - sub( q_com, masa_stereo_type_detect->q_target_power_y_smooth ) ); - move32(); - masa_stereo_type_detect->target_power_y_smooth_fx = - L_add( Mpy_32_32( a, target_power_y ), - Mpy_32_32( b, masa_stereo_type_detect->target_power_y_smooth_fx ) ); //(Q31, q_com) -> q_com - move32(); - masa_stereo_type_detect->q_target_power_y_smooth = q_com; - move16(); - masa_stereo_type_detect->subtract_power_y_smooth_fx = - L_add( Mpy_32_32( a, subtract_power_y ), - Mpy_32_32( b, masa_stereo_type_detect->subtract_power_y_smooth_fx ) ); //(Q31, q_subtract_power_y) -> q_subtract_power_y - move32(); - - exp = 0; - move16(); - IF( masa_stereo_type_detect->target_power_y_smooth_fx != 0 ) + exp = 0; + move16(); + IF( masa_stereo_type_detect->target_power_y_smooth_fx != 0 ) { subtract_target_ratio = L_sub( BASOP_Util_Log2( masa_stereo_type_detect->subtract_power_y_smooth_fx ), BASOP_Util_Log2( masa_stereo_type_detect->target_power_y_smooth_fx ) ); // Q25 exp = sub( masa_stereo_type_detect->q_subtract_power_y, q_com ); L_tmp = Mpy_32_32( L_sub( subtract_target_ratio, L_shl( exp, 25 ) ), LOG10_2_Q31 ); // Q25 } - ELSE - { - subtract_target_ratio = BASOP_Util_Log2( masa_stereo_type_detect->subtract_power_y_smooth_fx ); // Q25 - exp = sub( 31, masa_stereo_type_detect->q_subtract_power_y ); - L_tmp = L_sub( Mpy_32_32( L_add( subtract_target_ratio, L_shl( exp, 25 ) ), LOG10_2_Q31 ), -503316480 /* L_shl( -15, 25 ) */ /*log(EPSILON)*/ ); // Q25 - } - subtract_target_ratio_db = Mpy_32_32( 1342177280 /* 10.0f * in Q27*/, L_tmp ); // (Q27, (Q25, Q31)) -> (Q27, Q25) -> Q21 - - masa_stereo_type_detect->subtract_target_ratio_db_fx = subtract_target_ratio_db; // Q21 - move32(); - masa_stereo_type_detect->subtract_power_y_fx = 0; - move32(); - } - - /*-----------------------------------------------------------------* - * compute smoothing coefficients - *-----------------------------------------------------------------*/ - - alpha_synthesis = h_dirac_output_synthesis_params->alpha_synthesis_fx; // Q15 - alpha_synthesis_fast = h_dirac_output_synthesis_params->alpha_synthesis_fast_fx; // Q15 - alphaMaxBin = sub( h_dirac_output_synthesis_params->numAlphas, 1 ); - alphaMaxBinFast = sub( h_dirac_output_synthesis_params->numAlphasFast, 1 ); - - FOR( l = 0; l < num_freq_bands; l++ ) - { - Word32 instDirectionSmoothness, weightedDirectionSmoothness, smoothedDirectionSmoothness; - Word32 currWeight, prevWeight, sumWeight; - Word16 indexFast, indexSlow; - Word32 alpha_quality_based = 42949672; /* 0.02f in Q31 */ - move32(); - - indexSlow = s_min( l, alphaMaxBin ); - indexFast = s_min( l, alphaMaxBinFast ); - - /* Estimate the smoothness of the directions based on the diffuseness parameter */ - instDirectionSmoothness = L_sub( ONE_IN_Q31, diffuseness_vector[l] ); // Q31 - instDirectionSmoothness = L_min( L_max( instDirectionSmoothness, 0 ), ONE_IN_Q31 ); // Q31 - - /* Average the direction smoothness parameter over time */ - currWeight = Mpy_32_32( DIRECTION_SMOOTHNESS_ALPHA_Q31, - reference_power_smooth[l] ); //(Q31, q_reference_power_smooth) -> q_reference_power_smooth - prevWeight = Mpy_32_32( L_sub( ONE_IN_Q31, DIRECTION_SMOOTHNESS_ALPHA_Q31 ), - h_dirac_output_synthesis_state->reference_power_smooth_prev_fx[l] ); //(Q31, q_reference_power_smooth) -> q_reference_power_smooth - - weightedDirectionSmoothness = - L_add( Mpy_32_32( currWeight, instDirectionSmoothness ), - Mpy_32_32( prevWeight, h_dirac_output_synthesis_state->direction_smoothness_prev_fx[l] ) ); //(q_reference_power_smooth, Q31) -> q_reference_power_smooth - sumWeight = L_add( currWeight, prevWeight ); // q_reference_power_smooth - - exp = 0; - move16(); - tmp = BASOP_Util_Divide3232_Scale( weightedDirectionSmoothness, L_add( sumWeight, EPSILON_FX ), &exp ); /*Q(15-exp)*/ - smoothedDirectionSmoothness = L_shl_sat( L_deposit_l( tmp ), add( sub( Q31, Q15 ), exp ) ); // Q31 - - h_dirac_output_synthesis_state->direction_smoothness_prev_fx[l] = smoothedDirectionSmoothness; // Q31 - move32(); - h_dirac_output_synthesis_state->reference_power_smooth_prev_fx[l] = sumWeight; // q_reference_power_smooth - move32(); - - /* Determine smoothing parameter for rendering. The smoother the directions, the less smoothing is required (i.e., faster smoothing can be used). */ - alpha[l] = - L_add( Mpy_32_16_1( smoothedDirectionSmoothness, alpha_synthesis_fast[indexFast] ), - Mpy_32_16_1( L_sub( ONE_IN_Q31, smoothedDirectionSmoothness ), alpha_synthesis[indexSlow] ) ); //(Q31, Q15) -> Q31 - move32(); - - /* Adjust smoothing parameter based on encoding quality */ - alpha[l] = - L_add( Mpy_32_32( qualityBasedSmFactor, alpha[l] ), - Mpy_32_32( L_sub( ONE_IN_Q31, qualityBasedSmFactor ), alpha_quality_based ) ); //(Q31, Q31) -> Q31 - move32(); - } - - /*-----------------------------------------------------------------* - * compute gains - *-----------------------------------------------------------------*/ - - /*Direct normalization gains on reduced number of protos*/ - p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev_fx; - p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx; - set16_fx( exp_arr, 0, i_mult( num_protos_dir, num_freq_bands ) ); - - FOR( k = 0; k < num_protos_dir; k++ ) - { - FOR( l = 0; l < num_freq_bands; l++ ) - { - g1 = alpha[l]; // Q31 - move32(); - g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 - *p_power_smooth_prev = L_add( EPSILON_FX, Mpy_32_32( g2, ( *p_power_smooth_prev ) ) ); //(Q31, q_proto_power_smooth) -> q_proto_power_smooth - move32(); - *( p_power_smooth_prev ) = L_add( *( p_power_smooth_prev ), Mpy_32_32( g1, ( *p_power_smooth ) ) ); //(Q31, q_proto_power_smooth) -> q_proto_power_smooth - move32(); - - IF( EQ_32( *( p_power_smooth_prev ), EPSILON_FX ) ) - { - p_power_smooth_prev++; - L_tmp = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q31, EPSILON_FX, &exp ); /*Q=31-(exp-(31-q_proto_power_smooth))*/ - exp_arr[k * num_freq_bands + l] = exp; - move16(); - - *( p_power_smooth++ ) = L_tmp; /*Q=31-(exp-(31-q_proto_power_smooth))*/ - move32(); - } - ELSE - { - L_tmp = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q31, *( p_power_smooth_prev++ ), &exp ); /*Q=31-(exp-(31-q_proto_power_smooth))*/ - exp_arr[k * num_freq_bands + l] = exp; - move16(); - - *( p_power_smooth++ ) = L_tmp; /*Q=31-(exp-(31-q_proto_power_smooth))*/ - move32(); - } - } - } - - // Move proto_power_smooth_fx to common Q-factor - min_exp = MIN_16; - move16(); - q_tmp = Q31; - move16(); - - FOR( k = 0; k < num_protos_dir; k++ ) - { - FOR( l = 0; l < num_freq_bands; l++ ) - { - IF( GT_16( exp_arr[k * num_freq_bands + l], min_exp ) ) - { - min_exp = exp_arr[k * num_freq_bands + l]; - move16(); - } - } - } - - p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev_fx; - p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx; - - FOR( k = 0; k < num_protos_dir; k++ ) - { - FOR( l = 0; l < num_freq_bands; l++ ) - { - *p_power_smooth = L_shr( *p_power_smooth, sub( min_exp, exp_arr[k * num_freq_bands + l] ) ); /*(31-(exp-(31-q_proto_power_smooth)))->(31-(min_exp-(31-q_proto_power_smooth)))*/ - move32(); - p_power_smooth++; - q_tmp = add( sub( Q31, min_exp ), sub( Q31, h_dirac_output_synthesis_state->proto_power_smooth_q ) ); - } - } - - // Update the Q-factor - h_dirac_output_synthesis_state->proto_power_smooth_prev_q = h_dirac_output_synthesis_state->proto_power_smooth_q; - move16(); - h_dirac_output_synthesis_state->proto_power_smooth_q = q_tmp; - move16(); - - /*Direct gains and diffuse gains on number of output channels*/ - p_power_diff_smooth_prev = h_dirac_output_synthesis_state->proto_power_diff_smooth_prev_fx; - p_power_smooth_diff = h_dirac_output_synthesis_state->proto_power_diff_smooth_fx; - - p_gains_diff = gains_diff; - p_gains_dir = gains_dir; - - p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx; - p_cy_auto_dir_smooth_prev = h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev_fx; - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - q_cy_auto_dir_smooth_prev_local[k] = getScaleFactor32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands ); - move16(); - scale_sig32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands, q_cy_auto_dir_smooth_prev_local[k] ); /*q_cy_auto_dir_smooth_prev_local[k]+h_dirac_output_synthesis_state -> q_cy_auto_dir_smooth_prev*/ - q_cy_auto_dir_smooth_prev_local[k] = add( q_cy_auto_dir_smooth_prev_local[k], h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev ); - move16(); - q_com = s_min( q_cy_auto_dir_smooth_local[k], q_cy_auto_dir_smooth_prev_local[k] ); - scale_sig32( p_cy_auto_dir_smooth + imult1616( k, num_freq_bands ), num_freq_bands, sub( q_com, q_cy_auto_dir_smooth_local[k] ) ); /*q_cy_auto_dir_smooth_local -> q_com*/ - scale_sig32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands, sub( q_com, q_cy_auto_dir_smooth_prev_local[k] ) ); /*q_cy_auto_dir_smooth_prev_local -> q_com*/ - q_cy_auto_dir_smooth_local[k] = q_cy_auto_dir_smooth_prev_local[k] = q_com; - move16(); - move16(); - } - - - p_cy_cross_dir_smooth = h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx; - p_cy_cross_dir_smooth_prev = h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev_fx; - q_com = s_min( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev ); - scale_sig32( p_cy_cross_dir_smooth, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth -> q_com*/ - scale_sig32( p_cy_cross_dir_smooth_prev, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev -> q_com*/ - h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev = q_com; - move16(); - move16(); - - p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx; - p_cy_auto_diff_smooth_prev = h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev_fx; - q_com = s_min( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ); - scale_sig32( p_cy_auto_diff_smooth, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth -> q_com*/ - scale_sig32( p_cy_auto_diff_smooth_prev, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev -> q_com*/ - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev = q_com; - move16(); - move16(); - - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - Word32 power_smooth_temp; - p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx + i_mult( proto_direct_index[k], num_freq_bands ); // q_proto_power_smooth - FOR( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) - { - /*Direct*/ - g1 = alpha[l]; // Q31 - move32(); - g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 - *( p_cy_auto_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ), - Mpy_32_32( g2, ( *( p_cy_auto_dir_smooth_prev ) ) ) ); // (Q31, q_cy_auto_dir_smooth_prev_local) -> q_cy_auto_dir_smooth_prev_local - move32(); - *( p_cy_cross_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth++ ) ) ), - Mpy_32_32( g2, ( *( p_cy_cross_dir_smooth_prev ) ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev - move32(); - - power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) - L_tmp = Mpy_32_32( power_smooth_temp, ( *( p_cy_auto_dir_smooth_prev++ ) ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_dir_smooth_prev_local - 31 - exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), - q_cy_auto_dir_smooth_prev_local[k] ), - Q31 ) ); - p_power_smooth++; - - *( p_gains_dir ) = Sqrt32( L_tmp, &exp ); // (Q31 - exp) - move32(); - *( p_gains_dir ) = L_shl_sat( *( p_gains_dir ), sub( h_dirac_output_synthesis_state->gains_dir_prev_q, sub( Q31, exp ) ) ); // gains_dir_prev_q - move32(); - - IF( *( p_gains_dir ) < 0 ) - { - *( p_gains_dir ) = 0; - move32(); - } - ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) ) - { - *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*26 + h_dirac_output_synthesis_state->gains_dir_prev_q + 1 + 5 - 32 -> h_dirac_output_synthesis_state->gains_dir_prev_q*/ - move32(); - } - - IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) - { - *( p_gains_dir ) = L_negate( *( p_gains_dir ) ); /*h_dirac_output_synthesis_state->gains_dir_prev_q*/ - move32(); - } - p_gains_dir++; - - /*diffuse*/ - *p_power_diff_smooth_prev = L_add( L_add( Mpy_32_32( g1, ( *( p_power_smooth_diff++ ) ) ), - Mpy_32_32( g2, ( *( p_power_diff_smooth_prev ) ) ) ), - EPSILLON_FX ); // (Q31, q_power_diff_smooth_prev) -> q_power_diff_smooth_prev - move32(); - *( p_cy_auto_diff_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_diff_smooth++ ) ) ), - Mpy_32_32( g2, ( *( p_cy_auto_diff_smooth_prev ) ) ) ); // (Q31, q_cy_auto_diff_smooth_prev) -> q_cy_auto_diff_smooth_prev - move32(); - - exp = 0; - move16(); - L_tmp = BASOP_Util_Divide3232_Scale_cadence( *( p_cy_auto_diff_smooth_prev++ ), ( *( p_power_diff_smooth_prev++ ) ), &exp ); // (Q31 - exp) + (q_a - q_b) - exp = sub( Q31, add( sub( Q31, exp ), sub( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state->proto_power_diff_smooth_q ) ) ); - - *( p_gains_diff ) = Sqrt32( L_tmp, &exp ); // (31 - exp) - move32(); - *( p_gains_diff ) = L_shl_sat( *( p_gains_diff ), sub( h_dirac_output_synthesis_state->gains_diff_prev_q, sub( Q31, exp ) ) ); // gains_diff_prev_q - move32(); - - IF( *( p_gains_diff ) < 0 ) - { - *( p_gains_diff ) = 0; - move32(); - } - ELSE IF( GT_32( *( p_gains_diff ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ) ) ) /*h_dirac_output_synthesis_state->gains_diff_prev_q*/ - { - *( p_gains_diff ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ); /*h_dirac_output_synthesis_state->gains_diff_prev_q*/ - move32(); - } - p_gains_diff++; - } - - /*Only direct prototype*/ - FOR( ; l < num_freq_bands; l++ ) - { - /*Direct*/ - g1 = alpha[l]; // Q31 - move32(); - g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 - W_temp = W_add( W_mult_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ), - W_mult_32_32( g2, ( *( p_cy_auto_dir_smooth_prev ) ) ) ); /*32+q_cy_auto_dir_smooth_prev_local*/ - q_tmp = W_norm( W_temp ); - L_tmp = W_extract_h( W_shl( W_temp, q_tmp ) ); // q_cy_auto_dir_smooth_prev_local + q_tmp - *( p_cy_auto_dir_smooth_prev++ ) = L_shr_r( L_tmp, q_tmp ); // q_cy_auto_dir_smooth_prev_local - - move32(); - *( p_cy_cross_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth ) ) ), - Mpy_32_32( g2, ( *( p_cy_cross_dir_smooth_prev ) ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev - move32(); - test(); - if ( *( p_cy_cross_dir_smooth_prev ) == 0 && ( *( p_cy_cross_dir_smooth ) != 0 ) ) - { - *( p_cy_cross_dir_smooth_prev ) = 1; - move32(); - } - ( p_cy_cross_dir_smooth++ ); - power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); - L_tmp = Mpy_32_32( power_smooth_temp, L_tmp ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_dir_smooth_prev_local - 31 - exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), - add( q_cy_auto_dir_smooth_prev_local[k], q_tmp ) ), - Q31 ) ); - - *( p_gains_dir ) = Sqrt32( L_tmp, &exp ); // (Q31 - exp) - move32(); - *( p_gains_dir ) = L_shl_sat( *( p_gains_dir ), sub( h_dirac_output_synthesis_state->gains_dir_prev_q, sub( Q31, exp ) ) ); // gains_dir_prev_q - move32(); - - IF( *( p_gains_dir ) < 0 ) - { - *( p_gains_dir ) = 0; - move32(); - } - ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) ) /*gains_dir_prev_q*/ - { - *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*gains_dir_prev_q*/ - move32(); - } - - IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) - { - *( p_gains_dir ) = L_negate( *( p_gains_dir ) ); /*gains_dir_prev_q*/ - move32(); - } - p_gains_dir++; - - /*diffuse*/ - *( p_cy_auto_diff_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_diff_smooth ) ) ), - Mpy_32_32( g2, ( *( p_cy_auto_diff_smooth_prev ) ) ) ); // (Q31, q_cy_auto_diff_smooth_prev) -> q_cy_auto_diff_smooth_prev - - test(); - if ( *( p_cy_auto_diff_smooth_prev ) == 0 && ( *( p_cy_auto_diff_smooth ) != 0 ) ) - { - *( p_cy_auto_diff_smooth_prev ) = 1; - move32(); - } - ( p_cy_auto_diff_smooth++ ); - move32(); - - power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) - L_tmp = Mpy_32_32( power_smooth_temp, ( *( p_cy_auto_diff_smooth_prev ) ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_diff_smooth_prev - 31 - - test(); - test(); - if ( L_tmp == 0 && ( power_smooth_temp != 0 && *( p_cy_auto_diff_smooth_prev ) != 0 ) ) - { - L_tmp = 1; - move32(); - } - ( p_cy_auto_diff_smooth_prev++ ); - exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ), - Q31 ) ); - p_power_smooth++; - - *( p_gains_diff ) = Sqrt32( L_tmp, &exp ); /*31-exp*/ - move32(); - *( p_gains_diff ) = L_shl_sat( *( p_gains_diff ), sub( h_dirac_output_synthesis_state->gains_diff_prev_q, sub( Q31, exp ) ) ); // gains_diff_prev_q - move32(); - - IF( *( p_gains_diff ) < 0 ) - { - *( p_gains_diff ) = 0; - move32(); - } - ELSE IF( GT_32( *( p_gains_diff ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ) ) ) // gains_diff_prev_q - { - *( p_gains_diff ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ); // gains_diff_prev_q - move32(); - } - p_gains_diff++; - } - } - - /*-----------------------------------------------------------------* - * gain interpolation and output streams - *-----------------------------------------------------------------*/ - Word16 q_align = sub( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->proto_power_diff_smooth_q ); - if ( h_dirac_output_synthesis_params->max_band_decorr != 0 ) - { - q_align = sub( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->proto_diffuse_buffer_f_q ); - } - - FOR( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) - { - g1 = L_deposit_h( h_dirac_output_synthesis_params->interpolator_fx[buf_idx] ); // Q15 -> Q31 - g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 - - /*Direct stream*/ - p_gain_1 = gains_dir; - p_gain_2 = h_dirac_output_synthesis_state->gains_dir_prev_fx; // gains_dir_prev_q - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f_fx + - shl( i_mult( buf_idx, i_mult( num_freq_bands, num_protos_dir ) ), Q1 ) + - shl( i_mult( proto_direct_index[k], num_freq_bands ), Q1 ); - FOR( l = 0; l < num_freq_bands; l++ ) - { - g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_dir_prev_q) -> gains_dir_prev_q - - Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ); // (gains_dir_prev_q, q_proto_direct_buffer) -> gains_dir_prev_q + q_proto_direct_buffer - move64(); - - Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ); // (gains_dir_prev_q, q_proto_direct_buffer) -> gains_dir_prev_q + q_proto_direct_buffer - move64(); - } - } - - /*Diffuse stream*/ - IF( h_dirac_output_synthesis_params->max_band_decorr != 0 ) - { - p_power_smooth_diff = h_dirac_output_synthesis_state->proto_diffuse_buffer_f_fx + - shl( i_mult( buf_idx, i_mult( h_dirac_output_synthesis_params->max_band_decorr, nchan_out_woLFE ) ), Q1 ); - } - p_gain_1 = gains_diff; - p_gain_2 = h_dirac_output_synthesis_state->gains_diff_prev_fx; // gains_diff_prev_q - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - FOR( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) - { - g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_diff_prev_q) -> gains_diff_prev_q - Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_RealBuffer64_fx[k][buf_idx][l], - W_shr( W_mult0_32_32( g, ( *( p_power_smooth_diff++ ) ) ), negate( q_align ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer - move64(); - - if ( LT_64( W_temp, W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ) ) ) - { - W_temp = W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ); - } - - Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_ImagBuffer64_fx[k][buf_idx][l], - W_shr( W_mult0_32_32( g, ( *( p_power_smooth_diff++ ) ) ), negate( q_align ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer - move64(); - - if ( LT_64( W_temp, W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ) ) ) - { - W_temp = W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ); - } - } - - /*Direct proto*/ - p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f_fx + - shl( i_mult( buf_idx, i_mult( num_freq_bands, num_protos_dir ) ), Q1 ) + - shl( i_mult( proto_direct_index[k], num_freq_bands ), Q1 ) + - shl( h_dirac_output_synthesis_params->max_band_decorr, Q1 ); - FOR( ; l < num_freq_bands; l++ ) - { - g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_diff_prev_q) -> gains_diff_prev_q - Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_RealBuffer64_fx[k][buf_idx][l], - W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer - move64(); - - if ( LT_64( W_temp, W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ) ) ) - { - W_temp = W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ); - } - - Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_ImagBuffer64_fx[k][buf_idx][l], - W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer - move64(); - - if ( LT_64( W_temp, W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ) ) ) - { - W_temp = W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ); // gains_diff_prev_q + q_proto_direct_buffer - } - } - } - } - q_align = W_norm( W_temp ); - FOR( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) - { - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - FOR( l = 0; l < num_freq_bands; l++ ) - { - RealBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_RealBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/ - move32(); - ImagBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_ImagBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/ - move32(); - } - } - } - - *q_Cldfb = sub( add( add( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->gains_dir_prev_q ), q_align ), 32 ); - move16(); - - /*-----------------------------------------------------------------* - * update buffers - *-----------------------------------------------------------------*/ - - /* store estimates for next synthesis block */ - Copy32( gains_dir, h_dirac_output_synthesis_state->gains_dir_prev_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); /*gains_dir_prev_q*/ - Copy32( gains_diff, h_dirac_output_synthesis_state->gains_diff_prev_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); /*gains_diff_prev_q*/ - - /* reset values */ - set_zero_fx( h_dirac_output_synthesis_state->proto_power_smooth_fx, imult1616( num_freq_bands, num_protos_dir ) ); - IF( h_dirac_output_synthesis_state->proto_power_diff_smooth_fx != NULL ) - { - set_zero_fx( h_dirac_output_synthesis_state->proto_power_diff_smooth_fx, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); - } - - minimum_fx( q_cy_auto_dir_smooth_prev_local, nchan_out_woLFE, &h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev ); - FOR( k = 0; k < nchan_out_woLFE; k++ ) - { - scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev_fx + ( k * num_freq_bands ), num_freq_bands, sub( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev, q_cy_auto_dir_smooth_prev_local[k] ) ); /*q_cy_auto_dir_smooth_prev_local[k] -> h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev*/ - } - - set_zero_fx( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); - h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = 0; - move16(); - set_zero_fx( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); - h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = 0; - move16(); - set_zero_fx( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); - h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = 0; - move16(); - - pop_wmops(); - - return; -} -#else -void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const int16_t nbslots, /* i : number of slots to process */ - float *diffuseness_vector, - float *reference_power_smooth, - float qualityBasedSmFactor, - const int16_t enc_param_start_band ) -{ - int16_t buf_idx, num_freq_bands; - int16_t diff_start_band; - int16_t k, l; - int16_t nchan_out_woLFE; - float *p_power_smooth_prev, *p_power_diff_smooth_prev; - float *p_gain_1, *p_gain_2; - float *p_power_smooth_diff, *p_power_smooth; - float *p_gains_dir, *p_gains_diff; - float g, g1, g2; - float *p_cy_auto_dir_smooth, *p_cy_auto_dir_smooth_prev; - float *p_cy_cross_dir_smooth, *p_cy_cross_dir_smooth_prev; - float *p_cy_auto_diff_smooth, *p_cy_auto_diff_smooth_prev; - float gains_dir[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - float gains_diff[CLDFB_NO_CHANNELS_MAX * MAX_OUTPUT_CHANNELS]; - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - int16_t *proto_direct_index, num_protos_dir; - float target_power_y; - float subtract_power_y; - float subtract_target_ratio; - float subtract_target_ratio_db; - float a, b; - uint16_t nchan_target_psds; - float alpha[CLDFB_NO_CHANNELS_MAX]; - float *alpha_synthesis; - float *alpha_synthesis_fast; - int16_t alphaMaxBin; - int16_t alphaMaxBinFast; - - push_wmops( "dirac_out_synth_sfr" ); - - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - proto_direct_index = hDirACRend->proto_index_dir; - num_protos_dir = hDirACRend->num_protos_dir; - nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; - - /* collect some often used parameters */ - num_freq_bands = hSpatParamRendCom->num_freq_bands; - - /*-----------------------------------------------------------------* - * compute target PSDs - *-----------------------------------------------------------------*/ - - if ( enc_param_start_band == 0 ) - { - diff_start_band = h_dirac_output_synthesis_params->use_onset_filters == 1 ? h_dirac_output_synthesis_params->max_band_decorr : 0; - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - nchan_target_psds = 2; - } - else - { - nchan_target_psds = nchan_out_woLFE; - } - - computeTargetPSDs_direct_subframe( nchan_target_psds, num_freq_bands, - h_dirac_output_synthesis_state->direct_power_factor, - reference_power_smooth, - h_dirac_output_synthesis_state->direct_responses, - h_dirac_output_synthesis_state->direct_responses_square, - h_dirac_output_synthesis_state->cy_auto_dir_smooth, - h_dirac_output_synthesis_state->cy_cross_dir_smooth ); - - computeTargetPSDs_diffuse_subframe( nchan_target_psds, num_freq_bands, diff_start_band, - h_dirac_output_synthesis_state->diffuse_power_factor, - reference_power_smooth, - h_dirac_output_synthesis_state->diffuse_responses_square, - h_dirac_output_synthesis_state->cy_auto_diff_smooth ); - } - - /*-----------------------------------------------------------------* - * compute variables for stereo transport signal type detection - *-----------------------------------------------------------------*/ - - if ( hDirACRend->masa_stereo_type_detect != NULL ) - { - MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect = hDirACRend->masa_stereo_type_detect; - - p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth; - p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth; - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - target_power_y = p_cy_auto_dir_smooth[num_freq_bands] / ( sqrtf( h_dirac_output_synthesis_state->direct_power_factor[0] ) + EPSILON ); - target_power_y += p_cy_auto_diff_smooth[num_freq_bands] / ( sqrtf( h_dirac_output_synthesis_state->diffuse_power_factor[0] ) + EPSILON ); - } - else + ELSE { - target_power_y = p_cy_auto_dir_smooth[num_freq_bands] + p_cy_auto_diff_smooth[num_freq_bands]; + subtract_target_ratio = BASOP_Util_Log2( masa_stereo_type_detect->subtract_power_y_smooth_fx ); // Q25 + exp = sub( 31, masa_stereo_type_detect->q_subtract_power_y ); + L_tmp = L_sub( Mpy_32_32( L_add( subtract_target_ratio, L_shl( exp, 25 ) ), LOG10_2_Q31 ), -503316480 /* L_shl( -15, 25 ) */ /*log(EPSILON)*/ ); // Q25 } - subtract_power_y = masa_stereo_type_detect->subtract_power_y; - - a = 0.0004f; /* Temporal smoothing coefficient */ - b = 1.0f - a; /* Temporal smoothing coefficient */ - - masa_stereo_type_detect->target_power_y_smooth = a * target_power_y + b * masa_stereo_type_detect->target_power_y_smooth; - masa_stereo_type_detect->subtract_power_y_smooth = a * subtract_power_y + b * masa_stereo_type_detect->subtract_power_y_smooth; - - subtract_target_ratio = masa_stereo_type_detect->subtract_power_y_smooth / ( masa_stereo_type_detect->target_power_y_smooth + EPSILON ); - subtract_target_ratio_db = 10.0f * log10f( subtract_target_ratio ); - masa_stereo_type_detect->subtract_target_ratio_db = subtract_target_ratio_db; + subtract_target_ratio_db = Mpy_32_32( 1342177280 /* 10.0f * in Q27*/, L_tmp ); // (Q27, (Q25, Q31)) -> (Q27, Q25) -> Q21 - masa_stereo_type_detect->subtract_power_y = 0.0f; + masa_stereo_type_detect->subtract_target_ratio_db_fx = subtract_target_ratio_db; // Q21 + move32(); + masa_stereo_type_detect->subtract_power_y_fx = 0; + move32(); } /*-----------------------------------------------------------------* * compute smoothing coefficients *-----------------------------------------------------------------*/ - alpha_synthesis = h_dirac_output_synthesis_params->alpha_synthesis; - alpha_synthesis_fast = h_dirac_output_synthesis_params->alpha_synthesis_fast; - alphaMaxBin = h_dirac_output_synthesis_params->numAlphas - 1; - alphaMaxBinFast = h_dirac_output_synthesis_params->numAlphasFast - 1; + alpha_synthesis = h_dirac_output_synthesis_params->alpha_synthesis_fx; // Q15 + alpha_synthesis_fast = h_dirac_output_synthesis_params->alpha_synthesis_fast_fx; // Q15 + alphaMaxBin = sub( h_dirac_output_synthesis_params->numAlphas, 1 ); + alphaMaxBinFast = sub( h_dirac_output_synthesis_params->numAlphasFast, 1 ); - for ( l = 0; l < num_freq_bands; l++ ) + FOR( l = 0; l < num_freq_bands; l++ ) { - float instDirectionSmoothness, weightedDirectionSmoothness, smoothedDirectionSmoothness; - float currWeight, prevWeight, sumWeight; - int16_t indexFast, indexSlow; - float alpha_quality_based = 0.02f; + Word32 instDirectionSmoothness, weightedDirectionSmoothness, smoothedDirectionSmoothness; + Word32 currWeight, prevWeight, sumWeight; + Word16 indexFast, indexSlow; + Word32 alpha_quality_based = 42949672; /* 0.02f in Q31 */ + move32(); - indexSlow = min( l, alphaMaxBin ); - indexFast = min( l, alphaMaxBinFast ); + indexSlow = s_min( l, alphaMaxBin ); + indexFast = s_min( l, alphaMaxBinFast ); /* Estimate the smoothness of the directions based on the diffuseness parameter */ - instDirectionSmoothness = 1.0f - diffuseness_vector[l]; - instDirectionSmoothness = min( max( instDirectionSmoothness, 0.0f ), 1.0f ); + instDirectionSmoothness = L_sub( ONE_IN_Q31, diffuseness_vector[l] ); // Q31 + instDirectionSmoothness = L_min( L_max( instDirectionSmoothness, 0 ), ONE_IN_Q31 ); // Q31 /* Average the direction smoothness parameter over time */ - currWeight = DIRECTION_SMOOTHNESS_ALPHA * reference_power_smooth[l]; - prevWeight = ( 1.0f - DIRECTION_SMOOTHNESS_ALPHA ) * h_dirac_output_synthesis_state->reference_power_smooth_prev[l]; + currWeight = Mpy_32_32( DIRECTION_SMOOTHNESS_ALPHA_Q31, + reference_power_smooth[l] ); //(Q31, q_reference_power_smooth) -> q_reference_power_smooth + prevWeight = Mpy_32_32( L_sub( ONE_IN_Q31, DIRECTION_SMOOTHNESS_ALPHA_Q31 ), + h_dirac_output_synthesis_state->reference_power_smooth_prev_fx[l] ); //(Q31, q_reference_power_smooth) -> q_reference_power_smooth + + weightedDirectionSmoothness = + L_add( Mpy_32_32( currWeight, instDirectionSmoothness ), + Mpy_32_32( prevWeight, h_dirac_output_synthesis_state->direction_smoothness_prev_fx[l] ) ); //(q_reference_power_smooth, Q31) -> q_reference_power_smooth + sumWeight = L_add( currWeight, prevWeight ); // q_reference_power_smooth - weightedDirectionSmoothness = currWeight * instDirectionSmoothness + prevWeight * h_dirac_output_synthesis_state->direction_smoothness_prev[l]; - sumWeight = currWeight + prevWeight; - smoothedDirectionSmoothness = weightedDirectionSmoothness / ( sumWeight + EPSILON ); + exp = 0; + move16(); + tmp = BASOP_Util_Divide3232_Scale( weightedDirectionSmoothness, L_add( sumWeight, EPSILON_FX ), &exp ); /*Q(15-exp)*/ + smoothedDirectionSmoothness = L_shl_sat( L_deposit_l( tmp ), add( sub( Q31, Q15 ), exp ) ); // Q31 - h_dirac_output_synthesis_state->direction_smoothness_prev[l] = smoothedDirectionSmoothness; - h_dirac_output_synthesis_state->reference_power_smooth_prev[l] = sumWeight; + h_dirac_output_synthesis_state->direction_smoothness_prev_fx[l] = smoothedDirectionSmoothness; // Q31 + move32(); + h_dirac_output_synthesis_state->reference_power_smooth_prev_fx[l] = sumWeight; // q_reference_power_smooth + move32(); /* Determine smoothing parameter for rendering. The smoother the directions, the less smoothing is required (i.e., faster smoothing can be used). */ - alpha[l] = smoothedDirectionSmoothness * alpha_synthesis_fast[indexFast] + ( 1.0f - smoothedDirectionSmoothness ) * alpha_synthesis[indexSlow]; + alpha[l] = + L_add( Mpy_32_16_1( smoothedDirectionSmoothness, alpha_synthesis_fast[indexFast] ), + Mpy_32_16_1( L_sub( ONE_IN_Q31, smoothedDirectionSmoothness ), alpha_synthesis[indexSlow] ) ); //(Q31, Q15) -> Q31 + move32(); /* Adjust smoothing parameter based on encoding quality */ - alpha[l] = qualityBasedSmFactor * alpha[l] + ( 1.0f - qualityBasedSmFactor ) * alpha_quality_based; + alpha[l] = + L_add( Mpy_32_32( qualityBasedSmFactor, alpha[l] ), + Mpy_32_32( L_sub( ONE_IN_Q31, qualityBasedSmFactor ), alpha_quality_based ) ); //(Q31, Q31) -> Q31 + move32(); } /*-----------------------------------------------------------------* @@ -3844,116 +2090,300 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( *-----------------------------------------------------------------*/ /*Direct normalization gains on reduced number of protos*/ - p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev; - p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth; + p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev_fx; + p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx; + set16_fx( exp_arr, 0, i_mult( num_protos_dir, num_freq_bands ) ); + + FOR( k = 0; k < num_protos_dir; k++ ) + { + FOR( l = 0; l < num_freq_bands; l++ ) + { + g1 = alpha[l]; // Q31 + move32(); + g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 + *p_power_smooth_prev = L_add( EPSILON_FX, Mpy_32_32( g2, ( *p_power_smooth_prev ) ) ); //(Q31, q_proto_power_smooth) -> q_proto_power_smooth + move32(); + *( p_power_smooth_prev ) = L_add( *( p_power_smooth_prev ), Mpy_32_32( g1, ( *p_power_smooth ) ) ); //(Q31, q_proto_power_smooth) -> q_proto_power_smooth + move32(); + + IF( EQ_32( *( p_power_smooth_prev ), EPSILON_FX ) ) + { + p_power_smooth_prev++; + L_tmp = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q31, EPSILON_FX, &exp ); /*Q=31-(exp-(31-q_proto_power_smooth))*/ + exp_arr[k * num_freq_bands + l] = exp; + move16(); + + *( p_power_smooth++ ) = L_tmp; /*Q=31-(exp-(31-q_proto_power_smooth))*/ + move32(); + } + ELSE + { + L_tmp = BASOP_Util_Divide3232_Scale_cadence( ONE_IN_Q31, *( p_power_smooth_prev++ ), &exp ); /*Q=31-(exp-(31-q_proto_power_smooth))*/ + exp_arr[k * num_freq_bands + l] = exp; + move16(); + + *( p_power_smooth++ ) = L_tmp; /*Q=31-(exp-(31-q_proto_power_smooth))*/ + move32(); + } + } + } + + // Move proto_power_smooth_fx to common Q-factor + min_exp = MIN_16; + move16(); + q_tmp = Q31; + move16(); + + FOR( k = 0; k < num_protos_dir; k++ ) + { + FOR( l = 0; l < num_freq_bands; l++ ) + { + IF( GT_16( exp_arr[k * num_freq_bands + l], min_exp ) ) + { + min_exp = exp_arr[k * num_freq_bands + l]; + move16(); + } + } + } + + p_power_smooth_prev = h_dirac_output_synthesis_state->proto_power_smooth_prev_fx; + p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx; - for ( k = 0; k < num_protos_dir; k++ ) + FOR( k = 0; k < num_protos_dir; k++ ) { - for ( l = 0; l < num_freq_bands; l++ ) + FOR( l = 0; l < num_freq_bands; l++ ) { - g1 = alpha[l]; - g2 = ( 1.f - g1 ); - *p_power_smooth_prev = EPSILON + g2 * ( *p_power_smooth_prev ); - *( p_power_smooth_prev ) += g1 * ( *p_power_smooth ); - *( p_power_smooth++ ) = 1.f / ( *( p_power_smooth_prev++ ) ); + *p_power_smooth = L_shr( *p_power_smooth, sub( min_exp, exp_arr[k * num_freq_bands + l] ) ); /*(31-(exp-(31-q_proto_power_smooth)))->(31-(min_exp-(31-q_proto_power_smooth)))*/ + move32(); + p_power_smooth++; + q_tmp = add( sub( Q31, min_exp ), sub( Q31, h_dirac_output_synthesis_state->proto_power_smooth_q ) ); } } + // Update the Q-factor + h_dirac_output_synthesis_state->proto_power_smooth_prev_q = h_dirac_output_synthesis_state->proto_power_smooth_q; + move16(); + h_dirac_output_synthesis_state->proto_power_smooth_q = q_tmp; + move16(); + /*Direct gains and diffuse gains on number of output channels*/ - p_power_diff_smooth_prev = h_dirac_output_synthesis_state->proto_power_diff_smooth_prev; - p_power_smooth_diff = h_dirac_output_synthesis_state->proto_power_diff_smooth; + p_power_diff_smooth_prev = h_dirac_output_synthesis_state->proto_power_diff_smooth_prev_fx; + p_power_smooth_diff = h_dirac_output_synthesis_state->proto_power_diff_smooth_fx; p_gains_diff = gains_diff; p_gains_dir = gains_dir; - p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth; - p_cy_auto_dir_smooth_prev = h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev; - p_cy_cross_dir_smooth = h_dirac_output_synthesis_state->cy_cross_dir_smooth; - p_cy_cross_dir_smooth_prev = h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev; + p_cy_auto_dir_smooth = h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx; + p_cy_auto_dir_smooth_prev = h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev_fx; + FOR( k = 0; k < nchan_out_woLFE; k++ ) + { + q_cy_auto_dir_smooth_prev_local[k] = getScaleFactor32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands ); + move16(); + scale_sig32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands, q_cy_auto_dir_smooth_prev_local[k] ); /*q_cy_auto_dir_smooth_prev_local[k]+h_dirac_output_synthesis_state -> q_cy_auto_dir_smooth_prev*/ + q_cy_auto_dir_smooth_prev_local[k] = add( q_cy_auto_dir_smooth_prev_local[k], h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev ); + move16(); + q_com = s_min( q_cy_auto_dir_smooth_local[k], q_cy_auto_dir_smooth_prev_local[k] ); + scale_sig32( p_cy_auto_dir_smooth + imult1616( k, num_freq_bands ), num_freq_bands, sub( q_com, q_cy_auto_dir_smooth_local[k] ) ); /*q_cy_auto_dir_smooth_local -> q_com*/ + scale_sig32( p_cy_auto_dir_smooth_prev + imult1616( k, num_freq_bands ), num_freq_bands, sub( q_com, q_cy_auto_dir_smooth_prev_local[k] ) ); /*q_cy_auto_dir_smooth_prev_local -> q_com*/ + q_cy_auto_dir_smooth_local[k] = q_cy_auto_dir_smooth_prev_local[k] = q_com; + move16(); + move16(); + } + + + p_cy_cross_dir_smooth = h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx; + p_cy_cross_dir_smooth_prev = h_dirac_output_synthesis_state->cy_cross_dir_smooth_prev_fx; + q_com = s_min( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev ); + scale_sig32( p_cy_cross_dir_smooth, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth -> q_com*/ + scale_sig32( p_cy_cross_dir_smooth_prev, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev -> q_com*/ + h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth_prev = q_com; + move16(); + move16(); + + p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx; + p_cy_auto_diff_smooth_prev = h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev_fx; + q_com = s_min( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ); + scale_sig32( p_cy_auto_diff_smooth, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth -> q_com*/ + scale_sig32( p_cy_auto_diff_smooth_prev, imult1616( nchan_out_woLFE, num_freq_bands ), sub( q_com, h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ) ); /*h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev -> q_com*/ + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev = q_com; + move16(); + move16(); - p_cy_auto_diff_smooth = h_dirac_output_synthesis_state->cy_auto_diff_smooth; - p_cy_auto_diff_smooth_prev = h_dirac_output_synthesis_state->cy_auto_diff_smooth_prev; - for ( k = 0; k < nchan_out_woLFE; k++ ) + FOR( k = 0; k < nchan_out_woLFE; k++ ) { - p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth + proto_direct_index[k] * num_freq_bands; - for ( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) + Word32 power_smooth_temp; + p_power_smooth = h_dirac_output_synthesis_state->proto_power_smooth_fx + i_mult( proto_direct_index[k], num_freq_bands ); // q_proto_power_smooth + FOR( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) + { + /*Direct*/ + g1 = alpha[l]; // Q31 + move32(); + g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 + *( p_cy_auto_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ), + Mpy_32_32( g2, ( *( p_cy_auto_dir_smooth_prev ) ) ) ); // (Q31, q_cy_auto_dir_smooth_prev_local) -> q_cy_auto_dir_smooth_prev_local + move32(); + *( p_cy_cross_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth++ ) ) ), + Mpy_32_32( g2, ( *( p_cy_cross_dir_smooth_prev ) ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev + move32(); + + power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) + L_tmp = Mpy_32_32( power_smooth_temp, ( *( p_cy_auto_dir_smooth_prev++ ) ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_dir_smooth_prev_local - 31 + exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), + q_cy_auto_dir_smooth_prev_local[k] ), + Q31 ) ); + p_power_smooth++; + + *( p_gains_dir ) = Sqrt32( L_tmp, &exp ); // (Q31 - exp) + move32(); + *( p_gains_dir ) = L_shl_sat( *( p_gains_dir ), sub( h_dirac_output_synthesis_state->gains_dir_prev_q, sub( Q31, exp ) ) ); // gains_dir_prev_q + move32(); + + IF( *( p_gains_dir ) < 0 ) + { + *( p_gains_dir ) = 0; + move32(); + } + ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) ) + { + *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*26 + h_dirac_output_synthesis_state->gains_dir_prev_q + 1 + 5 - 32 -> h_dirac_output_synthesis_state->gains_dir_prev_q*/ + move32(); + } + + IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) + { + *( p_gains_dir ) = L_negate( *( p_gains_dir ) ); /*h_dirac_output_synthesis_state->gains_dir_prev_q*/ + move32(); + } + p_gains_dir++; + + /*diffuse*/ + *p_power_diff_smooth_prev = L_add( L_add( Mpy_32_32( g1, ( *( p_power_smooth_diff++ ) ) ), + Mpy_32_32( g2, ( *( p_power_diff_smooth_prev ) ) ) ), + EPSILLON_FX ); // (Q31, q_power_diff_smooth_prev) -> q_power_diff_smooth_prev + move32(); + *( p_cy_auto_diff_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_diff_smooth++ ) ) ), + Mpy_32_32( g2, ( *( p_cy_auto_diff_smooth_prev ) ) ) ); // (Q31, q_cy_auto_diff_smooth_prev) -> q_cy_auto_diff_smooth_prev + move32(); + + exp = 0; + move16(); + L_tmp = BASOP_Util_Divide3232_Scale_cadence( *( p_cy_auto_diff_smooth_prev++ ), ( *( p_power_diff_smooth_prev++ ) ), &exp ); // (Q31 - exp) + (q_a - q_b) + exp = sub( Q31, add( sub( Q31, exp ), sub( h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev, h_dirac_output_synthesis_state->proto_power_diff_smooth_q ) ) ); + + *( p_gains_diff ) = Sqrt32( L_tmp, &exp ); // (31 - exp) + move32(); + *( p_gains_diff ) = L_shl_sat( *( p_gains_diff ), sub( h_dirac_output_synthesis_state->gains_diff_prev_q, sub( Q31, exp ) ) ); // gains_diff_prev_q + move32(); + + IF( *( p_gains_diff ) < 0 ) + { + *( p_gains_diff ) = 0; + move32(); + } + ELSE IF( GT_32( *( p_gains_diff ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ) ) ) /*h_dirac_output_synthesis_state->gains_diff_prev_q*/ + { + *( p_gains_diff ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ); /*h_dirac_output_synthesis_state->gains_diff_prev_q*/ + move32(); + } + p_gains_diff++; + } + + /*Only direct prototype*/ + FOR( ; l < num_freq_bands; l++ ) { /*Direct*/ - g1 = alpha[l]; - g2 = 1.f - g1; - *( p_cy_auto_dir_smooth_prev ) = g1 * ( *( p_cy_auto_dir_smooth++ ) ) + g2 * ( *( p_cy_auto_dir_smooth_prev ) ); - *( p_cy_cross_dir_smooth_prev ) = g1 * ( *( p_cy_cross_dir_smooth++ ) ) + g2 * ( *( p_cy_cross_dir_smooth_prev ) ); + g1 = alpha[l]; // Q31 + move32(); + g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 + W_temp = W_add( W_mult_32_32( g1, ( *( p_cy_auto_dir_smooth++ ) ) ), + W_mult_32_32( g2, ( *( p_cy_auto_dir_smooth_prev ) ) ) ); /*32+q_cy_auto_dir_smooth_prev_local*/ + q_tmp = W_norm( W_temp ); + L_tmp = W_extract_h( W_shl( W_temp, q_tmp ) ); // q_cy_auto_dir_smooth_prev_local + q_tmp + *( p_cy_auto_dir_smooth_prev++ ) = L_shr_r( L_tmp, q_tmp ); // q_cy_auto_dir_smooth_prev_local + + move32(); + *( p_cy_cross_dir_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_cross_dir_smooth ) ) ), + Mpy_32_32( g2, ( *( p_cy_cross_dir_smooth_prev ) ) ) ); // (Q31, q_cy_cross_dir_smooth_prev) -> q_cy_cross_dir_smooth_prev + move32(); + test(); + if ( *( p_cy_cross_dir_smooth_prev ) == 0 && ( *( p_cy_cross_dir_smooth ) != 0 ) ) + { + *( p_cy_cross_dir_smooth_prev ) = 1; + move32(); + } + ( p_cy_cross_dir_smooth++ ); + power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); + L_tmp = Mpy_32_32( power_smooth_temp, L_tmp ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_dir_smooth_prev_local - 31 + exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), + add( q_cy_auto_dir_smooth_prev_local[k], q_tmp ) ), + Q31 ) ); - *( p_gains_dir ) = sqrtf( *( p_power_smooth++ ) * ( *( p_cy_auto_dir_smooth_prev++ ) ) ); + *( p_gains_dir ) = Sqrt32( L_tmp, &exp ); // (Q31 - exp) + move32(); + *( p_gains_dir ) = L_shl_sat( *( p_gains_dir ), sub( h_dirac_output_synthesis_state->gains_dir_prev_q, sub( Q31, exp ) ) ); // gains_dir_prev_q + move32(); - if ( *( p_gains_dir ) < 0.f ) + IF( *( p_gains_dir ) < 0 ) { - *( p_gains_dir ) = 0.f; + *( p_gains_dir ) = 0; + move32(); } - else if ( *( p_gains_dir ) > DIRAC_GAIN_LIMIT ) + ELSE IF( GT_32( *( p_gains_dir ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ) ) ) /*gains_dir_prev_q*/ { - *( p_gains_dir ) = DIRAC_GAIN_LIMIT; + *( p_gains_dir ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_dir_prev_q ) ), Q5 ) ); /*gains_dir_prev_q*/ + move32(); } - if ( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) + IF( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) { - *( p_gains_dir ) *= -1.f; + *( p_gains_dir ) = L_negate( *( p_gains_dir ) ); /*gains_dir_prev_q*/ + move32(); } p_gains_dir++; /*diffuse*/ - *p_power_diff_smooth_prev = g1 * ( *p_power_smooth_diff++ ) + g2 * ( *p_power_diff_smooth_prev ) + EPSILON; - *( p_cy_auto_diff_smooth_prev ) = g1 * ( *( p_cy_auto_diff_smooth++ ) ) + g2 * ( *( p_cy_auto_diff_smooth_prev ) ); - - *( p_gains_diff ) = sqrtf( *( p_cy_auto_diff_smooth_prev++ ) / ( *( p_power_diff_smooth_prev++ ) ) ); + *( p_cy_auto_diff_smooth_prev ) = L_add( Mpy_32_32( g1, ( *( p_cy_auto_diff_smooth ) ) ), + Mpy_32_32( g2, ( *( p_cy_auto_diff_smooth_prev ) ) ) ); // (Q31, q_cy_auto_diff_smooth_prev) -> q_cy_auto_diff_smooth_prev - if ( *( p_gains_diff ) < 0.f ) - { - *( p_gains_diff ) = 0.f; - } - else if ( *( p_gains_diff ) > DIRAC_GAIN_LIMIT ) + test(); + if ( *( p_cy_auto_diff_smooth_prev ) == 0 && ( *( p_cy_auto_diff_smooth ) != 0 ) ) { - *( p_gains_diff ) = DIRAC_GAIN_LIMIT; + *( p_cy_auto_diff_smooth_prev ) = 1; + move32(); } - p_gains_diff++; - } - - /*Only direct prototype*/ - for ( ; l < num_freq_bands; l++ ) - { - /*Direct*/ - g1 = alpha[l]; - g2 = 1.f - g1; - *( p_cy_auto_dir_smooth_prev ) = g1 * ( *( p_cy_auto_dir_smooth++ ) ) + g2 * ( *( p_cy_auto_dir_smooth_prev ) ); - *( p_cy_cross_dir_smooth_prev ) = g1 * ( *( p_cy_cross_dir_smooth++ ) ) + g2 * ( *( p_cy_cross_dir_smooth_prev ) ); + ( p_cy_auto_diff_smooth++ ); + move32(); - *( p_gains_dir ) = sqrtf( *( p_power_smooth ) * ( *( p_cy_auto_dir_smooth_prev++ ) ) ); + power_smooth_temp = L_shl( *p_power_smooth, norm_l( *p_power_smooth ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) + L_tmp = Mpy_32_32( power_smooth_temp, ( *( p_cy_auto_diff_smooth_prev ) ) ); // proto_power_smooth_q + norm_l( *p_power_smooth ) ) + q_cy_auto_diff_smooth_prev - 31 - if ( *( p_gains_dir ) < 0.f ) - { - *( p_gains_dir ) = 0.f; - } - else if ( *( p_gains_dir ) > DIRAC_GAIN_LIMIT ) + test(); + test(); + if ( L_tmp == 0 && ( power_smooth_temp != 0 && *( p_cy_auto_diff_smooth_prev ) != 0 ) ) { - *( p_gains_dir ) = DIRAC_GAIN_LIMIT; + L_tmp = 1; + move32(); } + ( p_cy_auto_diff_smooth_prev++ ); + exp = sub( Q31, sub( add( add( h_dirac_output_synthesis_state->proto_power_smooth_q, norm_l( *p_power_smooth ) ), + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth_prev ), + Q31 ) ); + p_power_smooth++; - if ( *( p_cy_cross_dir_smooth_prev++ ) < 0 ) - { - *( p_gains_dir ) *= -1.f; - } - p_gains_dir++; + *( p_gains_diff ) = Sqrt32( L_tmp, &exp ); /*31-exp*/ + move32(); + *( p_gains_diff ) = L_shl_sat( *( p_gains_diff ), sub( h_dirac_output_synthesis_state->gains_diff_prev_q, sub( Q31, exp ) ) ); // gains_diff_prev_q + move32(); - /*diffuse*/ - *( p_cy_auto_diff_smooth_prev ) = g1 * ( *( p_cy_auto_diff_smooth++ ) ) + g2 * ( *( p_cy_auto_diff_smooth_prev ) ); - *( p_gains_diff ) = sqrtf( *( p_power_smooth++ ) * ( *( p_cy_auto_diff_smooth_prev++ ) ) ); - if ( *( p_gains_diff ) < 0.f ) + IF( *( p_gains_diff ) < 0 ) { - *( p_gains_diff ) = 0.f; + *( p_gains_diff ) = 0; + move32(); } - else if ( *( p_gains_diff ) > DIRAC_GAIN_LIMIT ) + ELSE IF( GT_32( *( p_gains_diff ), W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ) ) ) // gains_diff_prev_q { - *( p_gains_diff ) = DIRAC_GAIN_LIMIT; + *( p_gains_diff ) = W_extract_h( W_shl( W_mult_32_32( DIRAC_GAIN_LIMIT_Q26, L_shl( 1, h_dirac_output_synthesis_state->gains_diff_prev_q ) ), Q5 ) ); // gains_diff_prev_q + move32(); } p_gains_diff++; } @@ -3962,78 +2392,150 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( /*-----------------------------------------------------------------* * gain interpolation and output streams *-----------------------------------------------------------------*/ + Word16 q_align = sub( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->proto_power_diff_smooth_q ); + if ( h_dirac_output_synthesis_params->max_band_decorr != 0 ) + { + q_align = sub( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->proto_diffuse_buffer_f_q ); + } - for ( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) + FOR( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) { - g1 = h_dirac_output_synthesis_params->interpolator[buf_idx]; - g2 = 1.f - g1; + g1 = L_deposit_h( h_dirac_output_synthesis_params->interpolator_fx[buf_idx] ); // Q15 -> Q31 + g2 = L_sub( ONE_IN_Q31, g1 ); // Q31 /*Direct stream*/ p_gain_1 = gains_dir; - p_gain_2 = h_dirac_output_synthesis_state->gains_dir_prev; - for ( k = 0; k < nchan_out_woLFE; k++ ) + p_gain_2 = h_dirac_output_synthesis_state->gains_dir_prev_fx; // gains_dir_prev_q + FOR( k = 0; k < nchan_out_woLFE; k++ ) { - p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f + buf_idx * 2 * num_freq_bands * num_protos_dir + proto_direct_index[k] * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands; l++ ) + p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f_fx + + shl( i_mult( buf_idx, i_mult( num_freq_bands, num_protos_dir ) ), Q1 ) + + shl( i_mult( proto_direct_index[k], num_freq_bands ), Q1 ); + FOR( l = 0; l < num_freq_bands; l++ ) { - g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); - RealBuffer[k][buf_idx][l] = g * ( *( p_power_smooth++ ) ); - ImagBuffer[k][buf_idx][l] = g * ( *( p_power_smooth++ ) ); + g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_dir_prev_q) -> gains_dir_prev_q + + Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ); // (gains_dir_prev_q, q_proto_direct_buffer) -> gains_dir_prev_q + q_proto_direct_buffer + move64(); + + Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ); // (gains_dir_prev_q, q_proto_direct_buffer) -> gains_dir_prev_q + q_proto_direct_buffer + move64(); } } /*Diffuse stream*/ - if ( h_dirac_output_synthesis_params->max_band_decorr != 0 ) + IF( h_dirac_output_synthesis_params->max_band_decorr != 0 ) { - p_power_smooth_diff = h_dirac_output_synthesis_state->proto_diffuse_buffer_f + buf_idx * 2 * h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE; + p_power_smooth_diff = h_dirac_output_synthesis_state->proto_diffuse_buffer_f_fx + + shl( i_mult( buf_idx, i_mult( h_dirac_output_synthesis_params->max_band_decorr, nchan_out_woLFE ) ), Q1 ); } p_gain_1 = gains_diff; - p_gain_2 = h_dirac_output_synthesis_state->gains_diff_prev; - for ( k = 0; k < nchan_out_woLFE; k++ ) + p_gain_2 = h_dirac_output_synthesis_state->gains_diff_prev_fx; // gains_diff_prev_q + FOR( k = 0; k < nchan_out_woLFE; k++ ) { - for ( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) + FOR( l = 0; l < h_dirac_output_synthesis_params->max_band_decorr; l++ ) { - g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); - RealBuffer[k][buf_idx][l] += g * ( *( p_power_smooth_diff++ ) ); - ImagBuffer[k][buf_idx][l] += g * ( *( p_power_smooth_diff++ ) ); + g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_diff_prev_q) -> gains_diff_prev_q + Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_RealBuffer64_fx[k][buf_idx][l], + W_shr( W_mult0_32_32( g, ( *( p_power_smooth_diff++ ) ) ), negate( q_align ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer + move64(); + + if ( LT_64( W_temp, W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ) ) ) + { + W_temp = W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ); + } + + Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_ImagBuffer64_fx[k][buf_idx][l], + W_shr( W_mult0_32_32( g, ( *( p_power_smooth_diff++ ) ) ), negate( q_align ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer + move64(); + + if ( LT_64( W_temp, W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ) ) ) + { + W_temp = W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ); + } } /*Direct proto*/ - p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f + buf_idx * 2 * num_freq_bands * num_protos_dir + proto_direct_index[k] * 2 * num_freq_bands + 2 * h_dirac_output_synthesis_params->max_band_decorr; - for ( ; l < num_freq_bands; l++ ) + p_power_smooth = h_dirac_output_synthesis_state->proto_direct_buffer_f_fx + + shl( i_mult( buf_idx, i_mult( num_freq_bands, num_protos_dir ) ), Q1 ) + + shl( i_mult( proto_direct_index[k], num_freq_bands ), Q1 ) + + shl( h_dirac_output_synthesis_params->max_band_decorr, Q1 ); + FOR( ; l < num_freq_bands; l++ ) + { + g = L_add( Mpy_32_32( g1, *( p_gain_1++ ) ), Mpy_32_32( g2, *( p_gain_2++ ) ) ); // (Q31, gains_diff_prev_q) -> gains_diff_prev_q + Cldfb_RealBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_RealBuffer64_fx[k][buf_idx][l], + W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer + move64(); + + if ( LT_64( W_temp, W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ) ) ) + { + W_temp = W_abs( Cldfb_RealBuffer64_fx[k][buf_idx][l] ); + } + + Cldfb_ImagBuffer64_fx[k][buf_idx][l] = W_add( Cldfb_ImagBuffer64_fx[k][buf_idx][l], + W_mult0_32_32( g, ( *( p_power_smooth++ ) ) ) ); // (gains_diff_prev_q, q_proto_direct_buffer) -> gains_diff_prev_q + q_proto_direct_buffer + move64(); + + if ( LT_64( W_temp, W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ) ) ) + { + W_temp = W_abs( Cldfb_ImagBuffer64_fx[k][buf_idx][l] ); // gains_diff_prev_q + q_proto_direct_buffer + } + } + } + } + q_align = W_norm( W_temp ); + FOR( buf_idx = 0; buf_idx < nbslots; ++buf_idx ) + { + FOR( k = 0; k < nchan_out_woLFE; k++ ) + { + FOR( l = 0; l < num_freq_bands; l++ ) { - g = g1 * ( *( p_gain_1++ ) ) + g2 * ( *( p_gain_2++ ) ); - RealBuffer[k][buf_idx][l] += g * ( *( p_power_smooth++ ) ); - ImagBuffer[k][buf_idx][l] += g * ( *( p_power_smooth++ ) ); + RealBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_RealBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/ + move32(); + ImagBuffer[k][buf_idx][l] = W_extract_h( W_shl( Cldfb_ImagBuffer64_fx[k][buf_idx][l], q_align ) ); /*( ( ( h_dirac_output_synthesis_state->proto_direct_buffer_f_q+h_dirac_output_synthesis_state->gains_dir_prev_q )+ q_align )- 32 )*/ + move32(); } } } + *q_Cldfb = sub( add( add( h_dirac_output_synthesis_state->proto_direct_buffer_f_q, h_dirac_output_synthesis_state->gains_dir_prev_q ), q_align ), 32 ); + move16(); + /*-----------------------------------------------------------------* * update buffers *-----------------------------------------------------------------*/ /* store estimates for next synthesis block */ - mvr2r( gains_dir, h_dirac_output_synthesis_state->gains_dir_prev, num_freq_bands * nchan_out_woLFE ); - mvr2r( gains_diff, h_dirac_output_synthesis_state->gains_diff_prev, num_freq_bands * nchan_out_woLFE ); + Copy32( gains_dir, h_dirac_output_synthesis_state->gains_dir_prev_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); /*gains_dir_prev_q*/ + Copy32( gains_diff, h_dirac_output_synthesis_state->gains_diff_prev_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); /*gains_diff_prev_q*/ /* reset values */ - set_zero( h_dirac_output_synthesis_state->proto_power_smooth, num_freq_bands * num_protos_dir ); + set_zero_fx( h_dirac_output_synthesis_state->proto_power_smooth_fx, imult1616( num_freq_bands, num_protos_dir ) ); + IF( h_dirac_output_synthesis_state->proto_power_diff_smooth_fx != NULL ) + { + set_zero_fx( h_dirac_output_synthesis_state->proto_power_diff_smooth_fx, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); + } - if ( h_dirac_output_synthesis_state->proto_power_diff_smooth != NULL ) + minimum_fx( q_cy_auto_dir_smooth_prev_local, nchan_out_woLFE, &h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev ); + FOR( k = 0; k < nchan_out_woLFE; k++ ) { - set_zero( h_dirac_output_synthesis_state->proto_power_diff_smooth, h_dirac_output_synthesis_params->max_band_decorr * nchan_out_woLFE ); + scale_sig32( h_dirac_output_synthesis_state->cy_auto_dir_smooth_prev_fx + ( k * num_freq_bands ), num_freq_bands, sub( h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev, q_cy_auto_dir_smooth_prev_local[k] ) ); /*q_cy_auto_dir_smooth_prev_local[k] -> h_dirac_output_synthesis_state->q_cy_auto_dir_smooth_prev*/ } - set_zero( h_dirac_output_synthesis_state->cy_auto_dir_smooth, num_freq_bands * nchan_out_woLFE ); - set_zero( h_dirac_output_synthesis_state->cy_cross_dir_smooth, num_freq_bands * nchan_out_woLFE ); - set_zero( h_dirac_output_synthesis_state->cy_auto_diff_smooth, num_freq_bands * nchan_out_woLFE ); + set_zero_fx( h_dirac_output_synthesis_state->cy_auto_dir_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); + h_dirac_output_synthesis_state->q_cy_auto_dir_smooth = 0; + move16(); + set_zero_fx( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); + h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = 0; + move16(); + set_zero_fx( h_dirac_output_synthesis_state->cy_auto_diff_smooth_fx, imult1616( num_freq_bands, nchan_out_woLFE ) ); + h_dirac_output_synthesis_state->q_cy_auto_diff_smooth = 0; + move16(); pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- @@ -4042,7 +2544,6 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( * calculate reponse, 1 degree resolution *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_dirac_dec_get_response_split_order_fx( const Word16 azimuth, /*q0*/ const Word16 elevation, /*q0*/ @@ -4273,209 +2774,52 @@ static void ivas_dirac_dec_get_response_split_order_fx( c = Mpy_32_32( Mpy_32_32( SQRT2_FIXED, dirac_gains_norm_term_int[a] ), dirac_gains_Pnm_int[el][a] ); // Q25 response[b] = L_shl( Mpy_32_32( c, sin_az[l - m - 1] ), 6 ); // Q29 - move32(); - - b1 = sub( b1_2, m ); - response[b1] = L_shl( Mpy_32_32( c, cos_az[l - m - 1] ), 6 ); // Q29 - move32(); - } - - FOR( m = 1; m < l; m += 2 ) - { - b = add( b_2, m ); - a = dirac_gains_P_idx[b]; - move16(); - - c = Mpy_32_32( Mpy_32_32( SQRT2_FIXED, dirac_gains_norm_term_int[a] ), dirac_gains_Pnm_int[el][a] ); // Q25 - c = Mpy_32_16_1( c, e ); // Q24 - - response[b] = L_shl( Mpy_32_32( c, sin_az[l - m - 1] ), 7 ); // Q29 - move32(); - - b1 = sub( b1_2, m ); - response[b1] = L_shl( Mpy_32_32( c, cos_az[l - m - 1] ), 7 ); // Q29 - move32(); - } - - b = add( b_2, l ); - a = dirac_gains_P_idx[b]; - move16(); - - c = L_shl( Mpy_32_32( dirac_gains_norm_term_int[a], dirac_gains_Pnm_int[el][a] ), 3 ); // Q29 - - IF( EQ_16( l % 2, 1 ) ) - { - c = L_shl( Mpy_32_16_1( c, e ), 1 ); // Q29 - } - - response[b] = c; // Q29 - move32(); - } - - *q_response = Q29; - move16(); - - pop_wmops(); - - return; -} -#else -static void ivas_dirac_dec_get_response_split_order( - const int16_t azimuth, - const int16_t elevation, - float *response, - const int16_t shd_rot_max_order, - const float *p_Rmat ) -{ - int16_t index_azimuth, index_elevation; - int16_t el, e, az; - float cos_1, cos_2, sin_1, cos_az[3]; - float sin_az[3]; - float f, c; - int16_t l, m; - int16_t b, b1, b_2, b1_2, a; - float dv_0, dv_1, dv_2, dv_r_0, dv_r_1, dv_r_2; - float w; - - push_wmops( "ivas_dirac_dec_get_response_split_order" ); - - index_azimuth = ( azimuth + 180 ) % 360; - index_elevation = elevation + 90; - e = index_elevation > 90 ? -1 : 1; - el = index_elevation > 90 ? 180 - index_elevation : index_elevation; - - az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; - f = index_azimuth > 180 ? -1.0f : 1.0f; - - cos_1 = dirac_gains_trg_term[az][0]; - sin_1 = f * dirac_gains_trg_term[az][1]; - - cos_2 = cos_1 * cos_1; - - cos_az[0] = cos_1; - cos_az[1] = 2.0f * cos_2 - 1.0f; - cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; - sin_az[0] = sin_1; - sin_az[1] = sin_1 * 2.0f * cos_1; - sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); - - response[0] = 1.0f; - for ( l = 1; l <= shd_rot_max_order; l++ ) - { - b_2 = l * l; - b1_2 = l * l + 2 * l; - for ( m = 0; m < l; m += 2 ) - { - b = b_2 + m; - a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - - response[b] = c * sin_az[l - m - 1]; - - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; - } - - for ( m = 1; m < l; m += 2 ) - { - b = b_2 + m; - a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - c = c * e; - - response[b] = c * sin_az[l - m - 1]; - - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; - } - - b = b_2 + l; - a = dirac_gains_P_idx[b]; - c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - if ( l % 2 == 1 ) - { - c = c * e; - } - - response[b] = c; - } - - /*Conversion spherical to cartesian coordinates*/ - w = -dirac_gains_trg_term[el][1]; - dv_0 = w * cos_1; - dv_1 = w * sin_1; - dv_2 = e * dirac_gains_trg_term[el][0]; - - /*Rotation mtx multiplication*/ - dv_r_0 = p_Rmat[0] * dv_0 + p_Rmat[1] * dv_1 + p_Rmat[2] * dv_2; - dv_r_1 = p_Rmat[3] * dv_0 + p_Rmat[4] * dv_1 + p_Rmat[5] * dv_2; - dv_r_2 = p_Rmat[6] * dv_0 + p_Rmat[7] * dv_1 + p_Rmat[8] * dv_2; - - index_azimuth = ( (int16_t) ( atan2f( dv_r_1, dv_r_0 ) * _180_OVER_PI ) + 180 ) % 360; - index_elevation = (int16_t) ( atan2f( dv_r_2, sqrtf( dv_r_0 * dv_r_0 + dv_r_1 * dv_r_1 ) ) * _180_OVER_PI ) + 90; - e = index_elevation > 90 ? -1 : 1; - el = index_elevation > 90 ? 180 - index_elevation : index_elevation; - - az = index_azimuth > 180 ? 360 - index_azimuth : index_azimuth; - f = index_azimuth > 180 ? -1.0f : 1.0f; - - cos_1 = dirac_gains_trg_term[az][0]; - sin_1 = f * dirac_gains_trg_term[az][1]; - - cos_2 = cos_1 * cos_1; - - cos_az[0] = cos_1; - cos_az[1] = 2.0f * cos_2 - 1.0f; - cos_az[2] = 2.0f * cos_1 * cos_az[1] - cos_az[0]; - sin_az[0] = sin_1; - sin_az[1] = sin_1 * 2.0f * cos_1; - sin_az[2] = sin_1 * ( 4.0f * cos_2 - 1.0f ); - - for ( l = shd_rot_max_order + 1; l <= 3; l++ ) - { - b_2 = l * l; - b1_2 = l * l + 2 * l; - for ( m = 0; m < l; m += 2 ) - { - b = b_2 + m; - a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - - response[b] = c * sin_az[l - m - 1]; + move32(); - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; + b1 = sub( b1_2, m ); + response[b1] = L_shl( Mpy_32_32( c, cos_az[l - m - 1] ), 6 ); // Q29 + move32(); } - for ( m = 1; m < l; m += 2 ) + FOR( m = 1; m < l; m += 2 ) { - b = b_2 + m; + b = add( b_2, m ); a = dirac_gains_P_idx[b]; - c = SQRT2 * dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - c = c * e; + move16(); + + c = Mpy_32_32( Mpy_32_32( SQRT2_FIXED, dirac_gains_norm_term_int[a] ), dirac_gains_Pnm_int[el][a] ); // Q25 + c = Mpy_32_16_1( c, e ); // Q24 - response[b] = c * sin_az[l - m - 1]; + response[b] = L_shl( Mpy_32_32( c, sin_az[l - m - 1] ), 7 ); // Q29 + move32(); - b1 = b1_2 - m; - response[b1] = c * cos_az[l - m - 1]; + b1 = sub( b1_2, m ); + response[b1] = L_shl( Mpy_32_32( c, cos_az[l - m - 1] ), 7 ); // Q29 + move32(); } - b = b_2 + l; + b = add( b_2, l ); a = dirac_gains_P_idx[b]; - c = dirac_gains_norm_term[a] * dirac_gains_Pnm[el][a]; - if ( l % 2 == 1 ) + move16(); + + c = L_shl( Mpy_32_32( dirac_gains_norm_term_int[a], dirac_gains_Pnm_int[el][a] ), 3 ); // Q29 + + IF( EQ_16( l % 2, 1 ) ) { - c = c * e; + c = L_shl( Mpy_32_16_1( c, e ), 1 ); // Q29 } - response[b] = c; + response[b] = c; // Q29 + move32(); } + *q_response = Q29; + move16(); + pop_wmops(); return; } -#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_compute_directional_responses() @@ -4483,7 +2827,6 @@ static void ivas_dirac_dec_get_response_split_order( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_compute_directional_responses_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ @@ -5075,425 +3418,96 @@ void ivas_dirac_dec_compute_directional_responses_fx( exp_direct_response_ls = max_exp; move16(); - normalizePanningGains_fx( direct_response_ls_fx, &Q_direct_response_ls, num_channels_dir ); - exp_direct_response_ls = sub( 31, Q_direct_response_ls ); - } - - /* Synthesize surrounding coherence */ - test(); - IF( surCohRatio_fx != NULL && surCohRatio_fx[k] > 0 ) - { - Word16 num_channels_surrCoh; - - num_channels_surrCoh = num_channels_dir; - move16(); - num_channels_surrCoh = sub( num_channels_surrCoh, hDirACRend->num_ele_spk_no_diffuse_rendering ); - - Word32 temp, final; - Word16 exp_temp, exp_temp_a, temp_a, final_exp; - Word16 exp_arr[MAX_OUTPUT_CHANNELS], max_exp = MIN16B; - move16(); - set16_fx( exp_arr, exp_direct_response_ls, MAX_OUTPUT_CHANNELS ); - FOR( l = 0; l < num_channels_dir; l++ ) - { - exp_temp = 0; - move16(); - temp = BASOP_Util_Add_Mant32Exp( ONE_IN_Q30 /*1 Q30*/, 1, L_negate( surCohRatio_fx[k] ), exp_surCohRatio, &exp_temp ); // q(31-exp_temp) - temp = Sqrt32( temp, &exp_temp ); // q(31-exp_temp) - direct_response_ls_fx[l] = Mpy_32_32( direct_response_ls_fx[l], temp ); // Q31-(exp_direct_response_ls + exp_temp) - move32(); - - exp_arr[l] = add( exp_direct_response_ls, exp_temp ); - move16(); - IF( hDirACRend->diffuse_response_function_fx[l] > 0 ) - { - exp_temp_a = 0; - move16(); - temp_a = BASOP_Util_Divide3216_Scale( surCohRatio_fx[k], num_channels_surrCoh, &exp_temp_a ); /*15-(exp_temp_a+exp_surCohRatio-15)*/ - exp_temp_a = add( exp_temp_a, sub( exp_surCohRatio, 15 ) ); - temp_a = Sqrt16( temp_a, &exp_temp_a ); /*15-temp_a*/ - final_exp = 0; - move16(); - final = BASOP_Util_Add_Mant32Exp( direct_response_ls_fx[l], exp_arr[l], L_deposit_h( temp_a ), exp_temp_a, &final_exp ); /*31-final_exp*/ - direct_response_ls_fx[l] = final; /*31-final_exp*/ - move32(); - exp_arr[l] = final_exp; - move16(); - } - } - - max_exp = MIN16B; /*Q0*/ - move16(); - maximum_fx( exp_arr, MAX_OUTPUT_CHANNELS, &max_exp ); - FOR( l = 0; l < MAX_OUTPUT_CHANNELS; l++ ) - { - direct_response_ls_fx[l] = L_shr( direct_response_ls_fx[l], sub( max_exp, exp_arr[l] ) ); /*Q(31-exp_arr[l])->Q(31-max_exp)*/ - move32(); - } - - Q_direct_response_ls = sub( 31, max_exp ); - exp_direct_response_ls = max_exp; - move16(); - } - - normalizePanningGains_fx( direct_response_ls_fx, &Q_direct_response_ls, num_channels_dir ); - exp_direct_response_ls = sub( 31, Q_direct_response_ls ); - - Scale_sig32( direct_response_ls_fx, MAX_OUTPUT_CHANNELS, sub( Q29, Q_direct_response_ls ) ); /*Q_direct_response_ls->Q29*/ - direct_response_q = Q29; - move16(); - - /* Set computed gains */ - direct_response_fx = direct_response_ls_fx; - v_mult_fixed( direct_response_fx, direct_response_fx, direct_response_square_fx, num_channels_dir ); /*2*direct_response_q-31*/ - direct_response_square_q = sub( add( direct_response_q, direct_response_q ), 31 ); - - mvr2r_inc_fixed( direct_response_square_fx, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_square_fx[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); /*direct_response_square_q*/ - mvr2r_inc_fixed( direct_response_fx, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_fx[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); /*direct_response_q*/ - } - ELSE - { - assert( 0 && "Not supported panning method!" ); - } - } - } - - hDirACRend->h_output_synthesis_psd_state.direct_responses_q = direct_response_q; - move16(); - hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q = direct_response_square_q; - move16(); - - return; -} -#else -void ivas_dirac_dec_compute_directional_responses( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ - DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ - const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ - const int16_t *masa_band_mapping, /* i : Band mapping for MASA, NULL assumes not using MASA in any form */ - MASA_ISM_DATA_HANDLE hMasaIsm, /* i : MASA_ISM data structure */ - const int16_t *azimuth, - const int16_t *elevation, - const int16_t md_idx, - const float *surCohRatio, - const int16_t shd_rot_max_order, /* i : split-order rotation method */ - const float *p_Rmat, /* i : rotation matrix */ - const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ -) -{ - int16_t k, l; - int16_t num_channels_dir; - float direct_response_hoa[MAX_OUTPUT_CHANNELS]; /* number of output channels (HOA 3rd order) -> 16 */ - float direct_response_ls[MAX_OUTPUT_CHANNELS]; - float direct_response_square[MAX_OUTPUT_CHANNELS]; - float *direct_response; - const int16_t *azimuth2, *elevation2; - float direct_response_dir2[MAX_OUTPUT_CHANNELS]; - float directRatio[MASA_MAXIMUM_DIRECTIONS]; - float totalDirect; - int16_t codingBand; - int16_t dipole_freq_range[2]; - MASA_TRANSPORT_SIGNAL_TYPE transport_signal_type; - - azimuth2 = NULL; - elevation2 = NULL; - transport_signal_type = MASA_STEREO_NOT_DEFINED; - - if ( hDirACRend->masa_stereo_type_detect != NULL ) - { - dipole_freq_range[0] = hDirACRend->masa_stereo_type_detect->dipole_freq_range[0]; - dipole_freq_range[1] = hDirACRend->masa_stereo_type_detect->dipole_freq_range[1]; - transport_signal_type = hDirACRend->masa_stereo_type_detect->masa_stereo_type; - } - - num_channels_dir = hDirACRend->num_outputs_dir; - if ( hSpatParamRendCom->numParametricDirections == 2 ) - { - azimuth2 = hSpatParamRendCom->azimuth2[md_idx]; - elevation2 = hSpatParamRendCom->elevation2[md_idx]; - } - - codingBand = -1; - - assert( num_channels_dir <= MAX_OUTPUT_CHANNELS && "Number of channels is too high" ); - - for ( k = 0; k < hSpatParamRendCom->num_freq_bands; ++k ) - { - if ( masa_band_mapping != NULL && k == MASA_band_grouping_24[masa_band_mapping[codingBand + 1]] ) - { - codingBand++; - } - - if ( masa_band_mapping != NULL && k > MASA_band_grouping_24[masa_band_mapping[codingBand]] && - k < MASA_band_grouping_24[masa_band_mapping[codingBand + 1]] && - k != hDirACRend->h_output_synthesis_psd_params.max_band_decorr ) - { - /* Panning gains have to be computed only for the first bin of the coding band in MASA, for other bins the previous values can be used */ - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - mvr2r_inc( &hDirACRend->h_output_synthesis_psd_state.direct_responses_square[k - 1], - hSpatParamRendCom->num_freq_bands, &hDirACRend->h_output_synthesis_psd_state.direct_responses_square[k], - hSpatParamRendCom->num_freq_bands, num_channels_dir ); - } - mvr2r_inc( &hDirACRend->h_output_synthesis_psd_state.direct_responses[k - 1], - hSpatParamRendCom->num_freq_bands, - &hDirACRend->h_output_synthesis_psd_state.direct_responses[k], - hSpatParamRendCom->num_freq_bands, num_channels_dir ); - } - else - { - /* HOA3 PANNING */ - if ( hDirACRend->panningConf == DIRAC_PANNING_HOA3 ) - { - set_f( direct_response_hoa, 1.0f, MAX_OUTPUT_CHANNELS ); - set_f( direct_response_dir2, 1.0f, MAX_OUTPUT_CHANNELS ); - - if ( p_Rmat != 0 ) - { - ivas_dirac_dec_get_response_split_order( azimuth[k], elevation[k], direct_response_hoa, shd_rot_max_order, p_Rmat ); - - if ( hodirac_flag ) - { - ivas_dirac_dec_get_response_split_order( azimuth2[k], elevation2[k], direct_response_dir2, shd_rot_max_order, p_Rmat ); - } - } - else - { - ivas_dirac_dec_get_response( azimuth[k], elevation[k], direct_response_hoa, hDirACRend->hOutSetup.ambisonics_order ); - - if ( hodirac_flag ) - { - ivas_dirac_dec_get_response( azimuth2[k], elevation2[k], direct_response_dir2, hDirACRend->hOutSetup.ambisonics_order ); - } - } - - if ( masa_band_mapping == NULL && hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - mvr2r_inc( direct_response_hoa, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); - - if ( hodirac_flag ) - { - mvr2r_inc( direct_response_dir2, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses[k + hSpatParamRendCom->num_freq_bands * num_channels_dir], hSpatParamRendCom->num_freq_bands, num_channels_dir ); - } - } - else if ( ( ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) && ( masa_band_mapping != NULL ) ) || - hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - /* Synthesize the first direction */ - spreadCoherencePanningHoa( azimuth[k], elevation[k], hSpatParamRendCom->spreadCoherence[md_idx][k], direct_response_hoa, num_channels_dir, hDirACRend->hOutSetup.ambisonics_order ); - - /* Synthesize the second direction and combine the gains */ - if ( hSpatParamRendCom->numParametricDirections == 2 ) - { - spreadCoherencePanningHoa( azimuth2[k], elevation2[k], hSpatParamRendCom->spreadCoherence2[md_idx][k], direct_response_dir2, num_channels_dir, hDirACRend->hOutSetup.ambisonics_order ); - /* Combine gains from the two directions */ - totalDirect = hSpatParamRendCom->energy_ratio1[md_idx][k] + hSpatParamRendCom->energy_ratio2[md_idx][k] + EPSILON; - directRatio[0] = hSpatParamRendCom->energy_ratio1[md_idx][k] / totalDirect; - directRatio[1] = hSpatParamRendCom->energy_ratio2[md_idx][k] / totalDirect; - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_hoa[l] *= directRatio[0]; - direct_response_hoa[l] += directRatio[1] * direct_response_dir2[l]; - } - } - - if ( hSpatParamRendCom->numIsmDirections > 0 ) - { - int16_t dir; - float direct_response_temp[MAX_OUTPUT_CHANNELS]; - float direct_response_ism[MAX_OUTPUT_CHANNELS]; - float masaDirect; - float ismDirect; - - set_zero( direct_response_ism, num_channels_dir ); - - for ( dir = 0; dir < hSpatParamRendCom->numIsmDirections; dir++ ) - { - if ( hMasaIsm->ism_is_edited[dir] ) - { - ivas_dirac_dec_get_response( hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir], direct_response_temp, hDirACRend->hOutSetup.ambisonics_order ); - } - else - { - ivas_dirac_dec_get_response( hMasaIsm->azimuth_ism[dir][md_idx], hMasaIsm->elevation_ism[dir][md_idx], direct_response_temp, hDirACRend->hOutSetup.ambisonics_order ); - } - - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][md_idx][k]; - } - } - - masaDirect = hSpatParamRendCom->energy_ratio1[md_idx][k] + EPSILON; - if ( hSpatParamRendCom->numParametricDirections == 2 ) - { - masaDirect += hSpatParamRendCom->energy_ratio2[md_idx][k]; - } - - ismDirect = hMasaIsm->energy_ratio_ism[0][md_idx][k]; - for ( dir = 1; dir < hSpatParamRendCom->numIsmDirections; dir++ ) - { - ismDirect += hMasaIsm->energy_ratio_ism[dir][md_idx][k]; - } - - totalDirect = masaDirect + ismDirect; - directRatio[0] = masaDirect / totalDirect; - directRatio[1] = ismDirect / totalDirect; - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_hoa[l] *= directRatio[0]; - direct_response_hoa[l] += directRatio[1] * direct_response_ism[l]; - } - } - - /* Synthesize surrounding coherence */ - if ( surCohRatio != NULL && surCohRatio[k] > 0.f ) - { - for ( l = 1; l < num_channels_dir; l++ ) - { - direct_response_hoa[l] *= sqrtf( 1.0f - surCohRatio[k] ); - } - } - - /* Set computed gains */ - direct_response = direct_response_hoa; - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - v_mult( direct_response, direct_response, direct_response_square, num_channels_dir ); - mvr2r_inc( direct_response_square, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_square[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); - - if ( transport_signal_type == MASA_STEREO_SPACED_MICS ) - { - direct_response[0] = 1.0f; - if ( k >= dipole_freq_range[0] && k < dipole_freq_range[1] ) - { - direct_response[1] = 1.0f; - } - } - else - { - set_f( direct_response, 1.0f, hDirACRend->num_protos_ambi ); - } - } - - mvr2r_inc( direct_response, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); - } - else - { - assert( 0 && "Not supported synthesis method!" ); - } - } - else if ( hDirACRend->panningConf == DIRAC_PANNING_VBAP ) /*VBAP*/ - { - /* Synthesize the first direction */ - spreadCoherencePanningVbap( azimuth[k], elevation[k], hSpatParamRendCom->spreadCoherence[md_idx][k], direct_response_ls, num_channels_dir, hVBAPdata ); - normalizePanningGains( direct_response_ls, num_channels_dir ); - - /* Synthesize the second direction and combine the gains */ - if ( hSpatParamRendCom->numParametricDirections == 2 ) - { - spreadCoherencePanningVbap( azimuth2[k], elevation2[k], hSpatParamRendCom->spreadCoherence2[md_idx][k], direct_response_dir2, num_channels_dir, hVBAPdata ); - normalizePanningGains( direct_response_dir2, num_channels_dir ); - - /* Combine gains from the two directions */ - totalDirect = hSpatParamRendCom->energy_ratio1[md_idx][k] + hSpatParamRendCom->energy_ratio2[md_idx][k] + EPSILON; - directRatio[0] = hSpatParamRendCom->energy_ratio1[md_idx][k] / totalDirect; - directRatio[1] = hSpatParamRendCom->energy_ratio2[md_idx][k] / totalDirect; - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_ls[l] *= directRatio[0]; - direct_response_ls[l] += directRatio[1] * direct_response_dir2[l]; - } - normalizePanningGains( direct_response_ls, num_channels_dir ); - } - - if ( hSpatParamRendCom->numIsmDirections > 0 ) - { - int16_t dir; - float direct_response_temp[MAX_OUTPUT_CHANNELS]; - float direct_response_ism[MAX_OUTPUT_CHANNELS]; - float masaDirect; - float ismDirect; - - set_zero( direct_response_ism, num_channels_dir ); - - for ( dir = 0; dir < hSpatParamRendCom->numIsmDirections; dir++ ) - { - if ( hMasaIsm->ism_is_edited[dir] ) - { - vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism_edited[dir], hMasaIsm->elevation_ism_edited[dir], 1 ); - } - else - { - vbap_determine_gains( hVBAPdata, direct_response_temp, hMasaIsm->azimuth_ism[dir][md_idx], hMasaIsm->elevation_ism[dir][md_idx], 1 ); - } - - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_ism[l] += direct_response_temp[l] * hMasaIsm->energy_ratio_ism[dir][md_idx][k]; - } - } - normalizePanningGains( direct_response_ism, num_channels_dir ); - - masaDirect = hSpatParamRendCom->energy_ratio1[md_idx][k] + EPSILON; - if ( hSpatParamRendCom->numParametricDirections == 2 ) - { - masaDirect += hSpatParamRendCom->energy_ratio2[md_idx][k]; - } - - ismDirect = hMasaIsm->energy_ratio_ism[0][md_idx][k]; - for ( dir = 1; dir < hSpatParamRendCom->numIsmDirections; dir++ ) - { - ismDirect += hMasaIsm->energy_ratio_ism[dir][md_idx][k]; - } - - totalDirect = masaDirect + ismDirect; - directRatio[0] = masaDirect / totalDirect; - directRatio[1] = ismDirect / totalDirect; - for ( l = 0; l < num_channels_dir; l++ ) - { - direct_response_ls[l] *= directRatio[0]; - direct_response_ls[l] += directRatio[1] * direct_response_ism[l]; - } - normalizePanningGains( direct_response_ls, num_channels_dir ); + normalizePanningGains_fx( direct_response_ls_fx, &Q_direct_response_ls, num_channels_dir ); + exp_direct_response_ls = sub( 31, Q_direct_response_ls ); } /* Synthesize surrounding coherence */ - if ( surCohRatio != NULL && surCohRatio[k] > 0.f ) + test(); + IF( surCohRatio_fx != NULL && surCohRatio_fx[k] > 0 ) { - int16_t num_channels_surrCoh; + Word16 num_channels_surrCoh; num_channels_surrCoh = num_channels_dir; - num_channels_surrCoh -= hDirACRend->num_ele_spk_no_diffuse_rendering; + move16(); + num_channels_surrCoh = sub( num_channels_surrCoh, hDirACRend->num_ele_spk_no_diffuse_rendering ); - for ( l = 0; l < num_channels_dir; l++ ) + Word32 temp, final; + Word16 exp_temp, exp_temp_a, temp_a, final_exp; + Word16 exp_arr[MAX_OUTPUT_CHANNELS], max_exp = MIN16B; + move16(); + set16_fx( exp_arr, exp_direct_response_ls, MAX_OUTPUT_CHANNELS ); + FOR( l = 0; l < num_channels_dir; l++ ) { - direct_response_ls[l] *= sqrtf( 1.0f - surCohRatio[k] ); - if ( hDirACRend->diffuse_response_function[l] > 0.f ) + exp_temp = 0; + move16(); + temp = BASOP_Util_Add_Mant32Exp( ONE_IN_Q30 /*1 Q30*/, 1, L_negate( surCohRatio_fx[k] ), exp_surCohRatio, &exp_temp ); // q(31-exp_temp) + temp = Sqrt32( temp, &exp_temp ); // q(31-exp_temp) + direct_response_ls_fx[l] = Mpy_32_32( direct_response_ls_fx[l], temp ); // Q31-(exp_direct_response_ls + exp_temp) + move32(); + + exp_arr[l] = add( exp_direct_response_ls, exp_temp ); + move16(); + IF( hDirACRend->diffuse_response_function_fx[l] > 0 ) { - direct_response_ls[l] += sqrtf( surCohRatio[k] / (float) num_channels_surrCoh ); + exp_temp_a = 0; + move16(); + temp_a = BASOP_Util_Divide3216_Scale( surCohRatio_fx[k], num_channels_surrCoh, &exp_temp_a ); /*15-(exp_temp_a+exp_surCohRatio-15)*/ + exp_temp_a = add( exp_temp_a, sub( exp_surCohRatio, 15 ) ); + temp_a = Sqrt16( temp_a, &exp_temp_a ); /*15-temp_a*/ + final_exp = 0; + move16(); + final = BASOP_Util_Add_Mant32Exp( direct_response_ls_fx[l], exp_arr[l], L_deposit_h( temp_a ), exp_temp_a, &final_exp ); /*31-final_exp*/ + direct_response_ls_fx[l] = final; /*31-final_exp*/ + move32(); + exp_arr[l] = final_exp; + move16(); } } + + max_exp = MIN16B; /*Q0*/ + move16(); + maximum_fx( exp_arr, MAX_OUTPUT_CHANNELS, &max_exp ); + FOR( l = 0; l < MAX_OUTPUT_CHANNELS; l++ ) + { + direct_response_ls_fx[l] = L_shr( direct_response_ls_fx[l], sub( max_exp, exp_arr[l] ) ); /*Q(31-exp_arr[l])->Q(31-max_exp)*/ + move32(); + } + + Q_direct_response_ls = sub( 31, max_exp ); + exp_direct_response_ls = max_exp; + move16(); } - normalizePanningGains( direct_response_ls, num_channels_dir ); + normalizePanningGains_fx( direct_response_ls_fx, &Q_direct_response_ls, num_channels_dir ); + exp_direct_response_ls = sub( 31, Q_direct_response_ls ); + + Scale_sig32( direct_response_ls_fx, MAX_OUTPUT_CHANNELS, sub( Q29, Q_direct_response_ls ) ); /*Q_direct_response_ls->Q29*/ + direct_response_q = Q29; + move16(); /* Set computed gains */ - direct_response = direct_response_ls; - v_mult( direct_response, direct_response, direct_response_square, num_channels_dir ); - mvr2r_inc( direct_response_square, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_square[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); - mvr2r_inc( direct_response, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); + direct_response_fx = direct_response_ls_fx; + v_mult_fixed( direct_response_fx, direct_response_fx, direct_response_square_fx, num_channels_dir ); /*2*direct_response_q-31*/ + direct_response_square_q = sub( add( direct_response_q, direct_response_q ), 31 ); + + mvr2r_inc_fixed( direct_response_square_fx, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_square_fx[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); /*direct_response_square_q*/ + mvr2r_inc_fixed( direct_response_fx, 1, &hDirACRend->h_output_synthesis_psd_state.direct_responses_fx[k], hSpatParamRendCom->num_freq_bands, num_channels_dir ); /*direct_response_q*/ } - else + ELSE { assert( 0 && "Not supported panning method!" ); } } } + hDirACRend->h_output_synthesis_psd_state.direct_responses_q = direct_response_q; + move16(); + hDirACRend->h_output_synthesis_psd_state.direct_responses_square_q = direct_response_square_q; + move16(); + return; } -#endif /*------------------------------------------------------------------------- @@ -5502,7 +3516,6 @@ void ivas_dirac_dec_compute_directional_responses( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_compute_gain_factors_fx( const Word16 num_freq_bands, const Word32 *diffuseness_fx, /*i:q30*/ @@ -5558,30 +3571,6 @@ void ivas_dirac_dec_compute_gain_factors_fx( return; } -#else -void ivas_dirac_dec_compute_gain_factors( - const int16_t num_freq_bands, - const float *diffuseness, - const int16_t max_band_decorr, - float *direct_gain_factor, - float *diffuse_gain_factor ) -{ - int16_t i; - - for ( i = 0; i < max_band_decorr; i++ ) - { - direct_gain_factor[i] = sqrtf( 1.f - diffuseness[i] ); - diffuse_gain_factor[i] = sqrtf( diffuseness[i] ); - } - for ( ; i < num_freq_bands; i++ ) - { - direct_gain_factor[i] = sqrtf( 1.f - diffuseness[i] ); - diffuse_gain_factor[i] = sqrtf( diffuseness[i] ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -5590,27 +3579,6 @@ void ivas_dirac_dec_compute_gain_factors( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_compute_power_factors( - const int16_t num_freq_bands, - const float *diffuseness, - const int16_t max_band_decorr, - float *direct_power_factor, - float *diffuse_power_factor ) -{ - v_multc( diffuseness, -1.0f, direct_power_factor, num_freq_bands ); - - v_addc( direct_power_factor, 1.0f, direct_power_factor, num_freq_bands ); - - mvr2r( diffuseness, diffuse_power_factor, num_freq_bands ); - - v_mult( &direct_power_factor[max_band_decorr], &direct_power_factor[max_band_decorr], &direct_power_factor[max_band_decorr], num_freq_bands - max_band_decorr ); - - v_mult( &diffuse_power_factor[max_band_decorr], &diffuse_power_factor[max_band_decorr], &diffuse_power_factor[max_band_decorr], num_freq_bands - max_band_decorr ); - - return; -} -#else void ivas_dirac_dec_compute_power_factors_fx( const Word16 num_freq_bands, const Word32 *diffuseness_fx, // Q3O @@ -5640,7 +3608,6 @@ void ivas_dirac_dec_compute_power_factors_fx( } return; } -#endif /*------------------------------------------------------------------------- @@ -5648,7 +3615,6 @@ void ivas_dirac_dec_compute_power_factors_fx( * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_synth_with_filters_fx( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: LFE synthesis structure for McMASA */ Word32 *data_fx[], /* o : output signals (Q11) */ @@ -5839,122 +3805,11 @@ void ivas_lfe_synth_with_filters_fx( return; } -#else -void ivas_lfe_synth_with_filters( - MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, /* i/o: LFE synthesis structure for McMASA */ - float *data_f[], /* o : output signals */ - const int16_t output_frame, /* i : output frame length per channel */ - const int16_t separateChannelIndex, /* i : separate channel index */ - const int16_t lfeChannelIndex /* i : LFE channel index */ -) -{ - float lowpassCoef; - int16_t i, j; - float lowPassSignal[L_FRAME48k]; - float highPassSignal[L_FRAME48k]; - int16_t slot_index; - int16_t subframe_index; - int16_t slotSize; - float transportEne, targetEneLfe, targetEneTrans; - int16_t mrange[2]; - float lfeGain; - float transportGain; - int16_t delay; - - /* Delay the separated channel to sync the LFE synthesis with the DirAC rendering */ - delay = hMasaLfeSynth->delayBuffer_syncDirAC_size; - delay_signal_float( data_f[separateChannelIndex], output_frame, hMasaLfeSynth->delayBuffer_syncDirAC, delay ); - - /* Filterbank for dividing the separated channel to LFE frequencies and higher frequencies */ - lowpassCoef = 1.0f / ( (float) hMasaLfeSynth->ringBufferSize ); - for ( i = 0; i < output_frame; i++ ) - { - hMasaLfeSynth->lowpassSum += lowpassCoef * data_f[separateChannelIndex][i] - lowpassCoef * hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferLoPointer]; - lowPassSignal[i] = hMasaLfeSynth->lowpassSum; - highPassSignal[i] = hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferHiPointer] - lowPassSignal[i]; - hMasaLfeSynth->lfeSynthRingBuffer[hMasaLfeSynth->ringBufferLoPointer] = data_f[separateChannelIndex][i]; - - hMasaLfeSynth->ringBufferLoPointer--; - if ( hMasaLfeSynth->ringBufferLoPointer < 0 ) - { - hMasaLfeSynth->ringBufferLoPointer = hMasaLfeSynth->ringBufferSize - 1; - } - - hMasaLfeSynth->ringBufferHiPointer--; - if ( hMasaLfeSynth->ringBufferHiPointer < 0 ) - { - hMasaLfeSynth->ringBufferHiPointer = hMasaLfeSynth->ringBufferSize - 1; - } - } - - /* Synthesize the LFE signal */ - slotSize = output_frame / CLDFB_NO_COL_MAX; - for ( slot_index = 0; slot_index < CLDFB_NO_COL_MAX; slot_index++ ) - { - subframe_index = slot_index / 4; - - mrange[0] = slot_index * slotSize; - mrange[1] = ( slot_index + 1 ) * slotSize; - - transportEne = 0.0f; - for ( i = mrange[0]; i < mrange[1]; i++ ) - { - transportEne += lowPassSignal[i] * lowPassSignal[i]; - } - - targetEneLfe = transportEne * hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index]; - targetEneTrans = transportEne * max( ( 1.0f - hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index] ), 0.01f ); - - hMasaLfeSynth->transportEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; - hMasaLfeSynth->targetEneLfeSmooth *= MCMASA_LFE_SYNTH_ALPHA; - hMasaLfeSynth->targetEneTransSmooth *= MCMASA_LFE_SYNTH_ALPHA; - - hMasaLfeSynth->transportEneSmooth += transportEne; - hMasaLfeSynth->targetEneLfeSmooth += targetEneLfe; - hMasaLfeSynth->targetEneTransSmooth += targetEneTrans; - - lfeGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneLfeSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); - transportGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneTransSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); - - for ( i = mrange[0], j = 0; i < mrange[1]; i++, j++ ) - { - data_f[separateChannelIndex][i] = ( transportGain * hMasaLfeSynth->interpolator[j] + hMasaLfeSynth->transportGainPrev * ( 1.0f - hMasaLfeSynth->interpolator[j] ) ) * lowPassSignal[i] + highPassSignal[i]; - data_f[lfeChannelIndex][i] = ( lfeGain * hMasaLfeSynth->interpolator[j] + hMasaLfeSynth->lfeGainPrev * ( 1.0f - hMasaLfeSynth->interpolator[j] ) ) * lowPassSignal[i]; - } - - hMasaLfeSynth->lfeGainPrev = lfeGain; - hMasaLfeSynth->transportGainPrev = transportGain; - } - - /* Lowpass filter for removing remaining mid and high frequencies from the LFE signal */ - lowpassCoef = 1.0f / ( (float) hMasaLfeSynth->ringBufferSize2 ); - for ( i = 0; i < output_frame; i++ ) - { - hMasaLfeSynth->lowpassSum2 += lowpassCoef * data_f[lfeChannelIndex][i] - lowpassCoef * hMasaLfeSynth->lfeSynthRingBuffer2[hMasaLfeSynth->ringBufferLoPointer2]; - hMasaLfeSynth->lfeSynthRingBuffer2[hMasaLfeSynth->ringBufferLoPointer2] = data_f[lfeChannelIndex][i]; - - hMasaLfeSynth->ringBufferLoPointer2--; - if ( hMasaLfeSynth->ringBufferLoPointer2 < 0 ) - { - hMasaLfeSynth->ringBufferLoPointer2 = hMasaLfeSynth->ringBufferSize2 - 1; - } - - data_f[lfeChannelIndex][i] = hMasaLfeSynth->lowpassSum2; - } - - /* Delay the separated channel to match the delay of the lowpass filter */ - delay = hMasaLfeSynth->delayBuffer_syncLp_size; - delay_signal_float( data_f[separateChannelIndex], output_frame, hMasaLfeSynth->delayBuffer_syncLp, delay ); - - return; -} -#endif /*------------------------------------------------------------------------- * Local functions *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_direct_fx( const Word16 num_channels, const Word16 num_freq_bands, @@ -6004,44 +3859,8 @@ static void computeTargetPSDs_direct_fx( return; } -#else -static void computeTargetPSDs_direct( - const int16_t num_channels, - const int16_t num_freq_bands, - const float *direct_power_factor, - const float *reference_power, - const float *direct_responses, - const float *direct_responses_square, - float *cy_auto_dir_smooth, - float *cy_cross_dir_smooth ) -{ - int16_t ch_idx, cur_idx; - - /* segment auxiliary buffer */ - float direct_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - - /* estimate direct and diffuse power */ - v_mult( direct_power_factor, reference_power, direct_power, num_freq_bands ); - - /* compute target auto and cross PSDs of current frame (smoothed) */ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - cur_idx = ch_idx * num_freq_bands; - - v_mult( direct_power, &direct_responses_square[cur_idx], aux_buffer_res, num_freq_bands ); - v_add( &cy_auto_dir_smooth[cur_idx], aux_buffer_res, &cy_auto_dir_smooth[cur_idx], num_freq_bands ); - - v_mult( direct_power, &direct_responses[cur_idx], aux_buffer_res, num_freq_bands ); - v_add( &cy_cross_dir_smooth[cur_idx], aux_buffer_res, &cy_cross_dir_smooth[cur_idx], num_freq_bands ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_direct_subframe_fx( const Word16 num_channels, const Word16 num_freq_bands, @@ -6106,40 +3925,8 @@ static void computeTargetPSDs_direct_subframe_fx( return; } -#else -static void computeTargetPSDs_direct_subframe( - const int16_t num_channels, - const int16_t num_freq_bands, - const float *direct_power_factor, - const float *reference_power, - const float *direct_responses, - const float *direct_responses_square, - float *cy_auto_dir_smooth, - float *cy_cross_dir_smooth ) -{ - int16_t ch_idx, cur_idx; - - /* segment auxiliary buffer */ - float direct_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - - /* estimate direct and diffuse power */ - v_mult( direct_power_factor, reference_power, direct_power, num_freq_bands ); - - /* compute target auto and cross PSDs of current frame (smoothed) */ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - cur_idx = ch_idx * num_freq_bands; - - v_mult( direct_power, &direct_responses_square[cur_idx], &cy_auto_dir_smooth[cur_idx], num_freq_bands ); - v_mult( direct_power, &direct_responses[cur_idx], &cy_cross_dir_smooth[cur_idx], num_freq_bands ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_diffuse_fx( const Word16 num_channels, const Word16 num_freq_bands, @@ -6179,39 +3966,8 @@ static void computeTargetPSDs_diffuse_fx( return; } -#else -static void computeTargetPSDs_diffuse( - const int16_t num_channels, - const int16_t num_freq_bands, - const int16_t start_band, - const float *diffuse_power_factor, - const float *reference_power, - const float *diffuse_responses_square, - float *cy_auto_diff_smooth ) -{ - int16_t ch_idx, cur_idx; - - /* segment auxiliary buffer */ - float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - - /* estimate direct and diffuse power */ - v_mult( diffuse_power_factor, reference_power, diffuse_power, num_freq_bands ); - - /* compute target auto and cross PSDs of current frame (smoothed) */ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - cur_idx = ch_idx * num_freq_bands; - v_multc( &diffuse_power[start_band], diffuse_responses_square[ch_idx], aux_buffer_res, num_freq_bands - start_band ); - v_add( &cy_auto_diff_smooth[cur_idx + start_band], aux_buffer_res, &cy_auto_diff_smooth[cur_idx + start_band], num_freq_bands - start_band ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_diffuse_subframe_fx( const Word16 num_channels, const Word16 num_freq_bands, @@ -6242,36 +3998,8 @@ static void computeTargetPSDs_diffuse_subframe_fx( return; } -#else -static void computeTargetPSDs_diffuse_subframe( - const int16_t num_channels, - const int16_t num_freq_bands, - const int16_t start_band, - const float *diffuse_power_factor, - const float *reference_power, - const float *diffuse_responses_square, - float *cy_auto_diff_smooth ) -{ - int16_t ch_idx, cur_idx; - float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* segment auxiliary buffer; size: num_freq_bands. */ - - /* estimate direct and diffuse power */ - v_mult( diffuse_power_factor, reference_power, diffuse_power, num_freq_bands ); - - /* compute target auto and cross PSDs of current frame (smoothed) */ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - cur_idx = ch_idx * num_freq_bands; - - v_multc( &diffuse_power[start_band], diffuse_responses_square[ch_idx], &cy_auto_diff_smooth[cur_idx + start_band], num_freq_bands - start_band ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeTargetPSDs_diffuse_with_onsets_fx( const Word16 num_channels, const Word16 num_freq_bands, @@ -6342,50 +4070,8 @@ static void computeTargetPSDs_diffuse_with_onsets_fx( return; } -#else -static void computeTargetPSDs_diffuse_with_onsets( - const int16_t num_channels, - const int16_t num_freq_bands, - const int16_t num_decorr_freq_bands, - const int16_t *proto_frame_diff_index, - const float *diffuse_power_factor, - const float *reference_power, - const float *diffuse_responses_square, - const float *onset_filter, - float *cy_auto_diff_smooth ) -{ - int16_t ch_idx, cur_idx, diff_idx; - float diffuse_response_p4, aux_buffer_res1[CLDFB_NO_CHANNELS_MAX]; - /* segment auxiliary buffer */ - float diffuse_power[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - float aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */ - - /* estimate direct and diffuse power */ - v_mult( diffuse_power_factor, reference_power, diffuse_power, num_decorr_freq_bands ); - - /* compute target auto and cross PSDs of current frame (smoothed) */ - for ( ch_idx = 0; ch_idx < num_channels; ++ch_idx ) - { - diffuse_response_p4 = diffuse_responses_square[ch_idx] * diffuse_responses_square[ch_idx]; - - cur_idx = ch_idx * num_freq_bands; - diff_idx = proto_frame_diff_index[ch_idx] * num_freq_bands; - - v_multc( &onset_filter[diff_idx], diffuse_responses_square[ch_idx], aux_buffer_res1, num_decorr_freq_bands ); - v_multc( &onset_filter[diff_idx], -1.0f, aux_buffer_res, num_decorr_freq_bands ); - v_addc( aux_buffer_res, 1.0f, aux_buffer_res, num_decorr_freq_bands ); - v_multc( aux_buffer_res, diffuse_response_p4, aux_buffer_res, num_decorr_freq_bands ); - v_add( aux_buffer_res1, aux_buffer_res, aux_buffer_res, num_decorr_freq_bands ); - v_mult( aux_buffer_res, diffuse_power, aux_buffer_res, num_decorr_freq_bands ); - v_add( &cy_auto_diff_smooth[cur_idx], aux_buffer_res, &cy_auto_diff_smooth[cur_idx], num_decorr_freq_bands ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void computeAlphaSynthesis_fx( Word16 *alpha_synthesis_fx /*q15*/, const Word16 averaging_length_ms, const Word16 maxAlpha_fx /*q15*/, Word16 *numAlphas, const Word16 slot_size, const Word16 num_freq_bands, Word16 *frequency_axis_fx /*q0*/, const Word32 output_Fs ) { Word16 k; @@ -6451,52 +4137,8 @@ static void computeAlphaSynthesis_fx( Word16 *alpha_synthesis_fx /*q15*/, const return; } -#else -static void computeAlphaSynthesis( - float *alpha_synthesis, - const int16_t averaging_length_ms, - const float maxAlpha, - int16_t *numAlphas, - const int16_t slot_size, - const int16_t num_freq_bands, - const float *frequency_axis, - const int32_t output_Fs ) -{ - int16_t k; - float avg_length_f_ms; - - /* check input pointer */ - if ( alpha_synthesis == NULL ) - { - return; - } - - if ( averaging_length_ms == 0 ) - { - set_f( alpha_synthesis, 1.0f, num_freq_bands ); - } - else - { - for ( k = 0; k < num_freq_bands; k++ ) - { - int16_t faxis_idx = max( k, 1 ); - avg_length_f_ms = 1000.f * (float) averaging_length_ms / fabsf( frequency_axis[faxis_idx] ); - alpha_synthesis[k] = min( (float) slot_size / ( avg_length_f_ms * (float) output_Fs / 1000.f ), 1.0f ); - if ( alpha_synthesis[k] >= maxAlpha ) - { - alpha_synthesis[k] = maxAlpha; - *numAlphas = k + 1; - break; - } - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void spreadCoherencePanningHoa_fx( const Word16 azimuth, const Word16 elevation, @@ -6584,52 +4226,8 @@ static void spreadCoherencePanningHoa_fx( return; } -#else -static void spreadCoherencePanningHoa( - const int16_t azimuth, - const int16_t elevation, - const float spreadCoh, - float *direct_response, - const int16_t num_channels_dir, - const int16_t ambisonics_order ) -{ - int16_t i; - float direct_response_left[MAX_OUTPUT_CHANNELS]; - float direct_response_right[MAX_OUTPUT_CHANNELS]; - float gainCenter; - float gainSide; - - ivas_dirac_dec_get_response( azimuth, elevation, direct_response, ambisonics_order ); - - if ( spreadCoh > 0.f ) - { - ivas_dirac_dec_get_response( azimuth + 30, elevation, direct_response_left, ambisonics_order ); - - ivas_dirac_dec_get_response( azimuth + 330, elevation, direct_response_right, ambisonics_order ); - - if ( spreadCoh < 0.5f ) - { - gainCenter = ( 1.0f - 2.0f * spreadCoh ) + 2.0f * spreadCoh / 3.0f; - gainSide = 2.0f * spreadCoh / 3.0f; - } - else - { - gainSide = 1.0f / ( 4.0f - 2.0f * spreadCoh ); - gainCenter = ( 2.0f - 2.0f * spreadCoh ) * gainSide; - } - - for ( i = 0; i < num_channels_dir; i++ ) - { - direct_response[i] = direct_response[i] * gainCenter + ( direct_response_left[i] + direct_response_right[i] ) * gainSide; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void spreadCoherencePanningVbap_fx( const Word16 azimuth, /*i:q0*/ const Word16 elevation, /*i:q0*/ @@ -6709,58 +4307,8 @@ static void spreadCoherencePanningVbap_fx( return; } -#else -static void spreadCoherencePanningVbap( - const int16_t azimuth, - const int16_t elevation, - const float spreadCoh, - float *direct_response, - const int16_t num_channels_dir, - const VBAP_HANDLE hVBAPdata ) -{ - int16_t i; - float direct_response_left[MAX_OUTPUT_CHANNELS]; - float direct_response_right[MAX_OUTPUT_CHANNELS]; - float gainCenter; - float gainSide; - - if ( hVBAPdata == NULL ) - { - /* Distribute signal to all channels if VBAP is not properly initialized. */ - set_f( direct_response, inv_sqrt( num_channels_dir ), num_channels_dir ); - - return; - } - vbap_determine_gains( hVBAPdata, direct_response, azimuth, elevation, 0 ); - - if ( spreadCoh > 0.f ) - { - vbap_determine_gains( hVBAPdata, direct_response_left, azimuth + 30, elevation, 0 ); - vbap_determine_gains( hVBAPdata, direct_response_right, azimuth - 30, elevation, 0 ); - - if ( spreadCoh < 0.5f ) - { - gainCenter = ( 1.0f - 2.0f * spreadCoh ) + 2.0f * spreadCoh * INV_SQRT3; - gainSide = 2.0f * spreadCoh * INV_SQRT3; - } - else - { - gainCenter = 2.0f - 2.0f * spreadCoh; - gainSide = 1.0f; - } - - for ( i = 0; i < num_channels_dir; i++ ) - { - direct_response[i] = direct_response[i] * gainCenter + ( direct_response_left[i] + direct_response_right[i] ) * gainSide; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void normalizePanningGains_fx( Word32 *direct_response_fx, /*i/o:resultant q is q_direct_res*/ Word16 *q_direct_res, /*i/o: stores q for direct_response_fx*/ @@ -6800,22 +4348,3 @@ static void normalizePanningGains_fx( return; } -#else -static void normalizePanningGains( - float *direct_response, - const int16_t num_channels_dir ) -{ - float energySum; - float normVal; - int16_t i; - - energySum = sum2_f( direct_response, num_channels_dir ) + 1e-12f; - normVal = sqrtf( 1.0f / energySum ); - for ( i = 0; i < num_channels_dir; i++ ) - { - direct_response[i] *= normVal; - } - - return; -} -#endif diff --git a/lib_rend/ivas_dirac_rend.c b/lib_rend/ivas_dirac_rend.c index 5bb0dfe1f..1982862bf 100644 --- a/lib_rend/ivas_dirac_rend.c +++ b/lib_rend/ivas_dirac_rend.c @@ -52,138 +52,6 @@ * Allocate and initialize DirAC parameters *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_allocate_parameters( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ - const int16_t params_flag /* i : set of parameters flag */ -) -{ - int16_t i; - - if ( params_flag == 1 ) - { - if ( ( hSpatParamRendCom->azimuth = (int16_t **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( int16_t * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->elevation = (int16_t **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( int16_t * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->diffuseness_vector = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->energy_ratio1 = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->spreadCoherence = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->surroundingCoherence = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - for ( i = 0; i < hSpatParamRendCom->dirac_md_buffer_length; i++ ) - { - if ( ( hSpatParamRendCom->azimuth[i] = (int16_t *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_s( hSpatParamRendCom->azimuth[i], 0, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->elevation[i] = (int16_t *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_s( hSpatParamRendCom->elevation[i], 0, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->diffuseness_vector[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->diffuseness_vector[i], 1.0f, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->energy_ratio1[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->energy_ratio1[i], 0.0f, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->spreadCoherence[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->spreadCoherence[i], 0.0f, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->surroundingCoherence[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->surroundingCoherence[i], 0.0f, hSpatParamRendCom->num_freq_bands ); - } - } - else if ( params_flag == 2 ) - { - if ( ( hSpatParamRendCom->azimuth2 = (int16_t **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( int16_t * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->elevation2 = (int16_t **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( int16_t * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->energy_ratio2 = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - if ( ( hSpatParamRendCom->spreadCoherence2 = (float **) malloc( hSpatParamRendCom->dirac_md_buffer_length * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - for ( i = 0; i < hSpatParamRendCom->dirac_md_buffer_length; i++ ) - { - if ( ( hSpatParamRendCom->azimuth2[i] = (int16_t *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_s( hSpatParamRendCom->azimuth2[i], 0, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->elevation2[i] = (int16_t *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_s( hSpatParamRendCom->elevation2[i], 0, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->energy_ratio2[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->energy_ratio2[i], 0.0f, hSpatParamRendCom->num_freq_bands ); - - if ( ( hSpatParamRendCom->spreadCoherence2[i] = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set_f( hSpatParamRendCom->spreadCoherence2[i], 0.0f, hSpatParamRendCom->num_freq_bands ); - } - } - - return IVAS_ERR_OK; -} -#else ivas_error ivas_dirac_allocate_parameters_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ const Word16 params_flag /* i : set of parameters flag */ @@ -314,7 +182,6 @@ ivas_error ivas_dirac_allocate_parameters_fx( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- @@ -323,7 +190,6 @@ ivas_error ivas_dirac_allocate_parameters_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_spat_hSpatParamRendCom_config_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: IVAS decoder structure */ const DIRAC_CONFIG_FLAG flag_config_inp, /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ @@ -511,144 +377,6 @@ ivas_error ivas_spat_hSpatParamRendCom_config_fx( return error; } -#else -ivas_error ivas_spat_hSpatParamRendCom_config( - SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: IVAS decoder structure */ - const DIRAC_CONFIG_FLAG flag_config_inp, /* i/ : Flag determining if we open or reconfigure the DirAC decoder */ - const int16_t dec_param_estim_flag, - const IVAS_FORMAT ivas_format, - const MC_MODE mc_mode, - const int32_t output_Fs, - const int16_t hodirac_flag, - const int16_t masa_ext_rend_flag ) -{ - ivas_error error; - int16_t map_idx; - DIRAC_CONFIG_FLAG flag_config; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - flag_config = ( flag_config_inp == DIRAC_RECONFIGURE_MODE ) ? DIRAC_RECONFIGURE : flag_config_inp; - error = IVAS_ERR_OK; - - hSpatParamRendCom = NULL; - - if ( flag_config == DIRAC_RECONFIGURE ) - { - hSpatParamRendCom = *hSpatParamRendCom_out; - } - else if ( flag_config == DIRAC_OPEN ) - { - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - if ( ( hSpatParamRendCom = (SPAT_PARAM_REND_COMMON_DATA_HANDLE) malloc( sizeof( SPAT_PARAM_REND_COMMON_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC meta\n" ) ); - } - - *hSpatParamRendCom_out = hSpatParamRendCom; - } - - if ( flag_config == DIRAC_OPEN ) - { - hSpatParamRendCom->slot_size = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / CLDFB_NO_COL_MAX ); - set_s( hSpatParamRendCom->subframe_nbslots, 0, MAX_JBM_SUBFRAMES_5MS ); - set_s( hSpatParamRendCom->subframe_nbslots, JBM_CLDFB_SLOTS_IN_SUBFRAME, DEFAULT_JBM_SUBFRAMES_5MS ); - hSpatParamRendCom->nb_subframes = DEFAULT_JBM_SUBFRAMES_5MS; - hSpatParamRendCom->subframes_rendered = 0; - hSpatParamRendCom->slots_rendered = 0; - hSpatParamRendCom->num_slots = DEFAULT_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME; - hSpatParamRendCom->num_freq_bands = (int16_t) ( output_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - hSpatParamRendCom->numSimultaneousDirections = 0; - hSpatParamRendCom->numParametricDirections = 0; - hSpatParamRendCom->numIsmDirections = 0; - } - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - if ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && flag_config == DIRAC_RECONFIGURE ) - { - if ( hodirac_flag && hSpatParamRendCom->azimuth2 == NULL ) - { - if ( ( error = ivas_dirac_allocate_parameters( hSpatParamRendCom, 2 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( !hodirac_flag && hSpatParamRendCom->azimuth2 != NULL ) - { - ivas_dirac_deallocate_parameters( hSpatParamRendCom, 2 ); - } - } - - if ( flag_config == DIRAC_OPEN ) - { - hSpatParamRendCom->dirac_md_buffer_length = 0; - hSpatParamRendCom->dirac_bs_md_write_idx = 0; - hSpatParamRendCom->dirac_read_idx = 0; - if ( mc_mode == MC_MODE_MCMASA || masa_ext_rend_flag == 1 ) - { - hSpatParamRendCom->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES; - - set_s( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - for ( map_idx = 0; map_idx < DEFAULT_JBM_SUBFRAMES_5MS; map_idx++ ) - { - hSpatParamRendCom->render_to_md_map[map_idx] = map_idx; - } - } - else if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) - { - hSpatParamRendCom->dirac_md_buffer_length = MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_MASA_PARAM_DEC_SFR; - hSpatParamRendCom->dirac_bs_md_write_idx = DELAY_MASA_PARAM_DEC_SFR; - - set_s( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - for ( map_idx = 0; map_idx < DEFAULT_JBM_SUBFRAMES_5MS; map_idx++ ) - { - hSpatParamRendCom->render_to_md_map[map_idx] = map_idx; - } - } - else - { - int16_t num_slots_in_subfr; - num_slots_in_subfr = dec_param_estim_flag ? CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES : 1; - hSpatParamRendCom->dirac_md_buffer_length = ( MAX_PARAM_SPATIAL_SUBFRAMES + DELAY_DIRAC_PARAM_DEC_SFR ); - hSpatParamRendCom->dirac_bs_md_write_idx = DELAY_DIRAC_PARAM_DEC_SFR; - hSpatParamRendCom->dirac_read_idx = 0; - - set_s( hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - for ( map_idx = 0; map_idx < DEFAULT_JBM_SUBFRAMES_5MS * num_slots_in_subfr; map_idx++ ) - { - hSpatParamRendCom->render_to_md_map[map_idx] = hSpatParamRendCom->dirac_read_idx + map_idx / num_slots_in_subfr; - } - } - - if ( ( error = ivas_dirac_allocate_parameters( hSpatParamRendCom, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT || ( ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) && hodirac_flag ) ) - { - if ( ( error = ivas_dirac_allocate_parameters( hSpatParamRendCom, 2 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hSpatParamRendCom->azimuth2 = NULL; - hSpatParamRendCom->elevation2 = NULL; - hSpatParamRendCom->energy_ratio2 = NULL; - hSpatParamRendCom->spreadCoherence2 = NULL; - } - } - - return error; -} -#endif /*------------------------------------------------------------------------- @@ -657,23 +385,6 @@ ivas_error ivas_spat_hSpatParamRendCom_config( * *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_spat_hSpatParamRendCom_close( - SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out ) -{ - if ( hSpatParamRendCom_out == NULL || *hSpatParamRendCom_out == NULL ) - { - return; - } - ivas_dirac_deallocate_parameters( *hSpatParamRendCom_out, 1 ); - ivas_dirac_deallocate_parameters( *hSpatParamRendCom_out, 2 ); - - free( *hSpatParamRendCom_out ); - *hSpatParamRendCom_out = NULL; - - return; -} -#else void ivas_spat_hSpatParamRendCom_close_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out ) { @@ -690,7 +401,6 @@ void ivas_spat_hSpatParamRendCom_close_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -699,7 +409,6 @@ void ivas_spat_hSpatParamRendCom_close_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_rend_close_fx( DIRAC_REND_HANDLE *hDirACRend_out ) { @@ -803,144 +512,46 @@ void ivas_dirac_rend_close_fx( return; } -#else -void ivas_dirac_rend_close( - DIRAC_REND_HANDLE *hDirACRend_out ) -{ - int16_t i, j; - DIRAC_REND_HANDLE hDirACRend; - if ( hDirACRend_out == NULL || *hDirACRend_out == NULL ) - { - return; - } - hDirACRend = *hDirACRend_out; +/*------------------------------------------------------------------------- + * ivas_dirac_deallocate_parameters() + * + * Deallocate DirAC parameters + *-------------------------------------------------------------------------*/ - /* close Output synthesis sub-module */ - ivas_dirac_dec_output_synthesis_close( hDirACRend ); +void ivas_dirac_deallocate_parameters_fx( + SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ + const Word16 params_flag /* i : set of parameters flag */ +) +{ + Word16 i; + Word16 md_buffer_length; - /* close Decorrelator sub-module */ - if ( hDirACRend->proto_signal_decorr_on ) + IF( hSpatParamRendCom == NULL ) { - ivas_dirac_dec_decorr_close( &hDirACRend->h_freq_domain_decorr_ap_params, &hDirACRend->h_freq_domain_decorr_ap_state ); + return; } - /* Params */ - - /* free frequency axis buffer */ - if ( hDirACRend->frequency_axis != NULL ) - { - free( hDirACRend->frequency_axis ); - hDirACRend->frequency_axis = NULL; - } + md_buffer_length = hSpatParamRendCom->dirac_md_buffer_length; + move16(); - if ( hDirACRend->diffuse_response_function != NULL ) + IF( EQ_16( params_flag, 1 ) ) { - free( hDirACRend->diffuse_response_function ); - hDirACRend->diffuse_response_function = NULL; - } + IF( hSpatParamRendCom->azimuth != NULL ) + { + FOR( i = 0; i < md_buffer_length; i++ ) + { + IF( hSpatParamRendCom->azimuth[i] != NULL ) + { + free( hSpatParamRendCom->azimuth[i] ); + hSpatParamRendCom->azimuth[i] = NULL; + } + } - if ( hDirACRend->hoa_encoder != NULL ) - { - free( hDirACRend->hoa_encoder ); - hDirACRend->hoa_encoder = NULL; - } - - /* prototype indexing */ - if ( hDirACRend->proto_index_dir != NULL ) - { - free( hDirACRend->proto_index_dir ); - hDirACRend->proto_index_dir = NULL; - } - - if ( hDirACRend->proto_index_diff != NULL ) - { - free( hDirACRend->proto_index_diff ); - hDirACRend->proto_index_dir = NULL; - } - - /* States */ - - /* free prototype signal buffers */ - if ( hDirACRend->proto_frame_f != NULL ) - { - free( hDirACRend->proto_frame_f ); - hDirACRend->proto_frame_f = NULL; - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( hDirACRend->buffer_intensity_real[i][j] != NULL ) - { - free( hDirACRend->buffer_intensity_real[i][j] ); - hDirACRend->buffer_intensity_real[i][j] = NULL; - } - } - } - if ( hDirACRend->buffer_energy != NULL ) - { - free( hDirACRend->buffer_energy ); - hDirACRend->buffer_energy = NULL; - } - - if ( hDirACRend->masa_stereo_type_detect != NULL ) - { - free( hDirACRend->masa_stereo_type_detect ); - hDirACRend->masa_stereo_type_detect = NULL; - } - - ivas_dirac_free_mem( &( hDirACRend->stack_mem ) ); - - free( *hDirACRend_out ); - *hDirACRend_out = NULL; - - return; -} -#endif - - -/*------------------------------------------------------------------------- - * ivas_dirac_deallocate_parameters() - * - * Deallocate DirAC parameters - *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -void ivas_dirac_deallocate_parameters_fx( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ - const Word16 params_flag /* i : set of parameters flag */ -) -{ - Word16 i; - Word16 md_buffer_length; - - IF( hSpatParamRendCom == NULL ) - { - return; - } - - md_buffer_length = hSpatParamRendCom->dirac_md_buffer_length; - move16(); - - IF( EQ_16( params_flag, 1 ) ) - { - IF( hSpatParamRendCom->azimuth != NULL ) - { - FOR( i = 0; i < md_buffer_length; i++ ) - { - IF( hSpatParamRendCom->azimuth[i] != NULL ) - { - free( hSpatParamRendCom->azimuth[i] ); - hSpatParamRendCom->azimuth[i] = NULL; - } - } - - free( hSpatParamRendCom->azimuth ); - hSpatParamRendCom->azimuth = NULL; - } + free( hSpatParamRendCom->azimuth ); + hSpatParamRendCom->azimuth = NULL; + } IF( hSpatParamRendCom->elevation != NULL ) { @@ -1075,173 +686,6 @@ void ivas_dirac_deallocate_parameters_fx( return; } -#else -void ivas_dirac_deallocate_parameters( - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ - const int16_t params_flag /* i : set of parameters flag */ -) -{ - int16_t i; - int16_t md_buffer_length; - - if ( hSpatParamRendCom == NULL ) - { - return; - } - - md_buffer_length = hSpatParamRendCom->dirac_md_buffer_length; - - if ( params_flag == 1 ) - { - if ( hSpatParamRendCom->azimuth != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->azimuth[i] != NULL ) - { - free( hSpatParamRendCom->azimuth[i] ); - hSpatParamRendCom->azimuth[i] = NULL; - } - } - - free( hSpatParamRendCom->azimuth ); - hSpatParamRendCom->azimuth = NULL; - } - - if ( hSpatParamRendCom->elevation != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->elevation[i] != NULL ) - { - free( hSpatParamRendCom->elevation[i] ); - hSpatParamRendCom->elevation[i] = NULL; - } - } - - free( hSpatParamRendCom->elevation ); - hSpatParamRendCom->elevation = NULL; - } - - if ( hSpatParamRendCom->energy_ratio1 != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->energy_ratio1[i] != NULL ) - { - free( hSpatParamRendCom->energy_ratio1[i] ); - hSpatParamRendCom->energy_ratio1[i] = NULL; - } - } - free( hSpatParamRendCom->energy_ratio1 ); - hSpatParamRendCom->energy_ratio1 = NULL; - } - - if ( hSpatParamRendCom->diffuseness_vector != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->diffuseness_vector[i] != NULL ) - { - free( hSpatParamRendCom->diffuseness_vector[i] ); - hSpatParamRendCom->diffuseness_vector[i] = NULL; - } - } - - free( hSpatParamRendCom->diffuseness_vector ); - hSpatParamRendCom->diffuseness_vector = NULL; - } - - if ( hSpatParamRendCom->spreadCoherence != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->spreadCoherence[i] != NULL ) - { - free( hSpatParamRendCom->spreadCoherence[i] ); - hSpatParamRendCom->spreadCoherence[i] = NULL; - } - } - free( hSpatParamRendCom->spreadCoherence ); - hSpatParamRendCom->spreadCoherence = NULL; - } - - if ( hSpatParamRendCom->surroundingCoherence != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->surroundingCoherence[i] != NULL ) - { - free( hSpatParamRendCom->surroundingCoherence[i] ); - hSpatParamRendCom->surroundingCoherence[i] = NULL; - } - } - free( hSpatParamRendCom->surroundingCoherence ); - hSpatParamRendCom->surroundingCoherence = NULL; - } - } - else if ( params_flag == 2 ) - { - if ( hSpatParamRendCom->azimuth2 != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->azimuth2[i] != NULL ) - { - free( hSpatParamRendCom->azimuth2[i] ); - hSpatParamRendCom->azimuth2[i] = NULL; - } - } - free( hSpatParamRendCom->azimuth2 ); - hSpatParamRendCom->azimuth2 = NULL; - } - - if ( hSpatParamRendCom->elevation2 != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->elevation2[i] != NULL ) - { - free( hSpatParamRendCom->elevation2[i] ); - hSpatParamRendCom->elevation2[i] = NULL; - } - } - free( hSpatParamRendCom->elevation2 ); - hSpatParamRendCom->elevation2 = NULL; - } - - if ( hSpatParamRendCom->energy_ratio2 != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->energy_ratio2[i] != NULL ) - { - free( hSpatParamRendCom->energy_ratio2[i] ); - hSpatParamRendCom->energy_ratio2[i] = NULL; - } - } - free( hSpatParamRendCom->energy_ratio2 ); - hSpatParamRendCom->energy_ratio2 = NULL; - } - - if ( hSpatParamRendCom->spreadCoherence2 != NULL ) - { - for ( i = 0; i < md_buffer_length; i++ ) - { - if ( hSpatParamRendCom->spreadCoherence2[i] != NULL ) - { - free( hSpatParamRendCom->spreadCoherence2[i] ); - hSpatParamRendCom->spreadCoherence2[i] = NULL; - } - } - free( hSpatParamRendCom->spreadCoherence2 ); - hSpatParamRendCom->spreadCoherence2 = NULL; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1250,7 +694,6 @@ void ivas_dirac_deallocate_parameters( * Allocate stack memory for DirAC renderer *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_alloc_mem_fx( DIRAC_REND_HANDLE hDirACRend, const RENDERER_TYPE renderer_type, @@ -1547,210 +990,6 @@ ivas_error ivas_dirac_alloc_mem_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_dirac_alloc_mem( - DIRAC_REND_HANDLE hDirACRend, - const RENDERER_TYPE renderer_type, - const int16_t num_freq_bands, - DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem, - const int16_t hodirac_flag ) -{ - int16_t num_freq_bands_diff, size; - int16_t size_ho; - int16_t size_pf; - int16_t num_outputs_dir, num_outputs_diff; - int16_t num_protos_dir; - - num_protos_dir = hDirACRend->num_protos_dir; - - num_freq_bands_diff = hDirACRend->h_output_synthesis_psd_params.max_band_decorr; - - num_outputs_dir = hDirACRend->num_outputs_dir; - num_outputs_diff = hDirACRend->num_outputs_diff; - - size = num_freq_bands * num_outputs_dir; - if ( hodirac_flag ) - { - size_ho = size * DIRAC_HO_NUMSECTORS; - size_pf = num_freq_bands * DIRAC_HO_NUMSECTORS; - } - else - { - size_ho = size; - size_pf = num_freq_bands; - } - - /* PSD related buffers */ - hDirAC_mem->cy_auto_dir_smooth = NULL; - hDirAC_mem->proto_power_smooth = NULL; - hDirAC_mem->proto_power_diff_smooth = NULL; - hDirAC_mem->direct_responses_square = NULL; - hDirAC_mem->frame_dec_f = NULL; - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( ( hDirAC_mem->cy_auto_dir_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->cy_auto_dir_smooth, size ); - - if ( ( hDirAC_mem->proto_power_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->proto_power_smooth, size ); - - if ( ( hDirAC_mem->proto_power_diff_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->proto_power_diff_smooth, size ); - - if ( ( hDirAC_mem->direct_responses_square = (float *) malloc( sizeof( float ) * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->direct_responses_square, size ); - if ( hDirACRend->proto_signal_decorr_on && ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) ) - { - if ( ( hDirAC_mem->frame_dec_f = (float *) malloc( sizeof( float ) * 2 * num_outputs_diff * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - } - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth = hDirAC_mem->proto_power_smooth; - hDirACRend->h_output_synthesis_psd_state.proto_power_diff_smooth = hDirAC_mem->proto_power_diff_smooth; - hDirACRend->h_output_synthesis_psd_state.cy_auto_dir_smooth = hDirAC_mem->cy_auto_dir_smooth; - hDirACRend->h_output_synthesis_psd_state.direct_responses_square = hDirAC_mem->direct_responses_square; - - /* Target and smoothed nrg factors/gains */ - if ( ( hDirAC_mem->cy_cross_dir_smooth = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->cy_cross_dir_smooth, size ); - - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( ( hDirAC_mem->cy_auto_diff_smooth = (float *) malloc( sizeof( float ) * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->cy_auto_diff_smooth, size ); - } - else - { - if ( ( hDirAC_mem->cy_auto_diff_smooth = (float *) malloc( sizeof( float ) * num_outputs_diff * num_freq_bands_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->cy_auto_diff_smooth, num_outputs_diff * num_freq_bands_diff ); - } - hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth = hDirAC_mem->cy_cross_dir_smooth; - hDirACRend->h_output_synthesis_psd_state.cy_auto_diff_smooth = hDirAC_mem->cy_auto_diff_smooth; - - /*Responses (gains/factors)*/ - if ( ( hDirAC_mem->direct_responses = (float *) malloc( sizeof( float ) * size_ho ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - set_zero( hDirAC_mem->direct_responses, size ); - - - hDirACRend->h_output_synthesis_psd_state.direct_responses = hDirAC_mem->direct_responses; - - /* Prototypes */ - hDirAC_mem->proto_direct_buffer_f = NULL; - hDirAC_mem->proto_diffuse_buffer_f = NULL; - if ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - if ( ( hDirAC_mem->proto_direct_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * num_protos_dir * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - - if ( hDirACRend->proto_signal_decorr_on ) - { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) - { - if ( ( hDirAC_mem->proto_diffuse_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * size ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - else - { - if ( ( hDirAC_mem->proto_diffuse_buffer_f = (float *) malloc( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * num_outputs_diff * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - } - } - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f = hDirAC_mem->proto_direct_buffer_f; - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f = hDirAC_mem->proto_diffuse_buffer_f; - - /* Gains/power factors*/ - hDirAC_mem->direct_power_factor = NULL; - hDirAC_mem->diffuse_power_factor = NULL; - - if ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - if ( ( hDirAC_mem->direct_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - if ( ( hDirAC_mem->diffuse_power_factor = (float *) malloc( sizeof( float ) * size_pf ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - - hDirACRend->h_output_synthesis_psd_state.direct_power_factor = hDirAC_mem->direct_power_factor; - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor = hDirAC_mem->diffuse_power_factor; - - hDirAC_mem->reference_power = NULL; - hDirAC_mem->onset_filter = NULL; - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - if ( renderer_type != RENDERER_BINAURAL_PARAMETRIC && renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - if ( ( hDirAC_mem->reference_power = (float *) malloc( sizeof( float ) * 2 * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - if ( hDirACRend->proto_signal_decorr_on ) - { - if ( ( hDirAC_mem->onset_filter = (float *) malloc( sizeof( float ) * num_outputs_diff * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - } - } - else - { - if ( num_protos_dir > 2 ) - { - if ( ( hDirAC_mem->reference_power = (float *) malloc( sizeof( float ) * 5 * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - - if ( hDirACRend->proto_signal_decorr_on ) - { - if ( ( hDirAC_mem->onset_filter = (float *) malloc( sizeof( float ) * 2 * num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate stack memory for DirAC\n" ) ); - } - } - } - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- @@ -1759,7 +998,6 @@ ivas_error ivas_dirac_alloc_mem( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_free_mem_fx( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) { @@ -1822,70 +1060,6 @@ void ivas_dirac_free_mem_fx( return; } -#else -void ivas_dirac_free_mem( - DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ) -{ - if ( hDirAC_mem->cy_auto_dir_smooth != NULL ) - { - free( hDirAC_mem->cy_auto_dir_smooth ); - } - if ( hDirAC_mem->proto_power_smooth != NULL ) - { - free( hDirAC_mem->proto_power_smooth ); - } - if ( hDirAC_mem->proto_power_diff_smooth != NULL ) - { - free( hDirAC_mem->proto_power_diff_smooth ); - } - if ( hDirAC_mem->direct_responses_square != NULL ) - { - free( hDirAC_mem->direct_responses_square ); - } - if ( hDirAC_mem->frame_dec_f != NULL ) - { - free( hDirAC_mem->frame_dec_f ); - } - if ( hDirAC_mem->cy_cross_dir_smooth != NULL ) - { - free( hDirAC_mem->cy_cross_dir_smooth ); - } - if ( hDirAC_mem->cy_auto_diff_smooth != NULL ) - { - free( hDirAC_mem->cy_auto_diff_smooth ); - } - if ( hDirAC_mem->direct_responses != NULL ) - { - free( hDirAC_mem->direct_responses ); - } - if ( hDirAC_mem->proto_direct_buffer_f != NULL ) - { - free( hDirAC_mem->proto_direct_buffer_f ); - } - if ( hDirAC_mem->proto_diffuse_buffer_f != NULL ) - { - free( hDirAC_mem->proto_diffuse_buffer_f ); - } - if ( hDirAC_mem->direct_power_factor != NULL ) - { - free( hDirAC_mem->direct_power_factor ); - } - if ( hDirAC_mem->diffuse_power_factor != NULL ) - { - free( hDirAC_mem->diffuse_power_factor ); - } - if ( hDirAC_mem->reference_power != NULL ) - { - free( hDirAC_mem->reference_power ); - } - if ( hDirAC_mem->onset_filter != NULL ) - { - free( hDirAC_mem->onset_filter ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1894,7 +1068,6 @@ void ivas_dirac_free_mem( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void compute_hoa_encoder_mtx_fx( const Word32 *azimuth, /*q22*/ const Word32 *elevation, /*q22*/ @@ -1912,26 +1085,6 @@ void compute_hoa_encoder_mtx_fx( return; } -#else -void compute_hoa_encoder_mtx( - const float *azimuth, - const float *elevation, - float *response, - const int16_t num_responses, - const int16_t ambisonics_order ) -{ - int16_t k, num_sh; - - num_sh = ivas_sba_get_nchan( ambisonics_order, 0 ); - - for ( k = 0; k < num_responses; k++ ) - { - ivas_dirac_dec_get_response( (const int16_t) azimuth[k], (const int16_t) elevation[k], &response[k * num_sh], ambisonics_order ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -1940,160 +1093,33 @@ void compute_hoa_encoder_mtx( * DirAC decoding initialization *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_get_frequency_axis( - float *frequency_axis, - const int32_t output_Fs, - const int16_t num_freq_bands ) -{ - int16_t k; - float const_part; - - /* calc cldfb frequency axis */ - const_part = (float) output_Fs / ( 2.0f * (float) num_freq_bands ); - for ( k = 0; k < num_freq_bands; ++k ) - { - frequency_axis[k] = ( (float) k + 0.5f ) * const_part; - } - - return; -} -#else void ivas_dirac_dec_get_frequency_axis_fx( Word16 *frequency_axis, /* Q0 */ const Word32 output_Fs, const Word16 num_freq_bands ) { - Word16 k, const_part, scale; - /* calc cldfb frequency axis */ - - const_part = BASOP_Util_Divide3216_Scale( output_Fs, shl( num_freq_bands, 1 ), &scale ); // 15-(scale+31-15)=>-1-scale - const_part = shr( const_part, sub( -1, scale ) ); // q(-1-scale)->q0 - FOR( k = 0; k < num_freq_bands; k++ ) - { - /* frequency_axis[k] = ((float)k + 0.5f) * const_part; */ - frequency_axis[k] = add( i_mult( k, const_part ), shr( const_part, 1 ) ); /*q0*/ - move16(); - } - - return; -} -#endif - - -/*------------------------------------------------------------------------- - * initDiffuseResponses() - * - * - *-------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void initDiffuseResponses( - float *diffuse_response_function, - const int16_t num_channels, - const AUDIO_CONFIG output_config, - const IVAS_OUTPUT_SETUP hOutSetup, - const int16_t ambisonics_order, - const IVAS_FORMAT ivas_format, - int16_t *num_ele_spk_no_diffuse_rendering, - const AUDIO_CONFIG transport_config ) -{ - int16_t i, l, k, idx, num_horizontal_speakers; - *num_ele_spk_no_diffuse_rendering = 0; - - if ( output_config == IVAS_AUDIO_CONFIG_MONO ) - { - diffuse_response_function[0] = 1.0f; - diffuse_response_function[1] = inv_sqrt( 3.0f ); - } - else if ( !( output_config == IVAS_AUDIO_CONFIG_FOA || output_config == IVAS_AUDIO_CONFIG_HOA2 || output_config == IVAS_AUDIO_CONFIG_HOA3 ) ) - { - /* set diffuse response function */ - if ( ivas_format == MC_FORMAT && ( transport_config == IVAS_AUDIO_CONFIG_5_1 || transport_config == IVAS_AUDIO_CONFIG_7_1 ) && output_config == IVAS_AUDIO_CONFIG_5_1_4 ) - { - num_horizontal_speakers = num_channels - NUM_ELEVATED_SPEAKERS; - - mvr2r( diffuse_response_CICP6, diffuse_response_function, num_horizontal_speakers ); - set_zero( &diffuse_response_function[num_horizontal_speakers], NUM_ELEVATED_SPEAKERS ); - *num_ele_spk_no_diffuse_rendering = NUM_ELEVATED_SPEAKERS; - } - else if ( ivas_format == MC_FORMAT && ( transport_config == IVAS_AUDIO_CONFIG_5_1 || transport_config == IVAS_AUDIO_CONFIG_7_1 ) && output_config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - num_horizontal_speakers = num_channels - NUM_ELEVATED_SPEAKERS; - - set_f( diffuse_response_function, sqrtf( 1.f / ( (float) num_horizontal_speakers ) ), num_horizontal_speakers ); - set_zero( &diffuse_response_function[num_horizontal_speakers], NUM_ELEVATED_SPEAKERS ); - *num_ele_spk_no_diffuse_rendering = NUM_ELEVATED_SPEAKERS; - } - else if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == MC_FORMAT ) && output_config == IVAS_AUDIO_CONFIG_5_1 && num_channels == 5 ) - { - mvr2r( diffuse_response_CICP6, diffuse_response_function, num_channels ); - } - else if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == MC_FORMAT ) && output_config == IVAS_AUDIO_CONFIG_5_1_2 && num_channels == 7 ) - { - mvr2r( diffuse_response_CICP14, diffuse_response_function, num_channels ); - } - else if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == MC_FORMAT ) && ( output_config == IVAS_AUDIO_CONFIG_5_1_4 ) && ( num_channels == 9 ) ) - { - mvr2r( diffuse_response_CICP16, diffuse_response_function, num_channels ); - } - else if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == MC_FORMAT ) && ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - if ( transport_config == IVAS_AUDIO_CONFIG_5_1 || transport_config == IVAS_AUDIO_CONFIG_7_1 ) - { - /* Detect loudspeakers with elevation */ - for ( i = 0, num_horizontal_speakers = 0; i < num_channels; i++ ) - { - if ( fabsf( hOutSetup.ls_elevation[i] ) <= 5.f ) - { - num_horizontal_speakers++; - diffuse_response_function[i] = 1.f; - } - else - { - *num_ele_spk_no_diffuse_rendering += 1; - diffuse_response_function[i] = 0.f; - } - } - /* Diffuse only to horizontal plane if enough loudspeakers */ - if ( num_horizontal_speakers > 2 ) - { - for ( i = 0; i < num_channels; i++ ) - { - diffuse_response_function[i] *= sqrtf( 1.f / (float) num_horizontal_speakers ); - } - } - else - { - *num_ele_spk_no_diffuse_rendering = 0; - set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); - } - } - else - { - set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); - } - } - else - { - set_f( diffuse_response_function, sqrtf( 1.f / (float) num_channels ), num_channels ); - } - } - else + Word16 k, const_part, scale; + /* calc cldfb frequency axis */ + + const_part = BASOP_Util_Divide3216_Scale( output_Fs, shl( num_freq_bands, 1 ), &scale ); // 15-(scale+31-15)=>-1-scale + const_part = shr( const_part, sub( -1, scale ) ); // q(-1-scale)->q0 + FOR( k = 0; k < num_freq_bands; k++ ) { - idx = 0; - for ( l = 0; l <= ambisonics_order; l++ ) - { - for ( k = 0; k < ( 2 * l + 1 ); k++ ) - { - diffuse_response_function[idx++] = inv_sqrt( 2.0f * l + 1.0f ); - } - } + /* frequency_axis[k] = ((float)k + 0.5f) * const_part; */ + frequency_axis[k] = add( i_mult( k, const_part ), shr( const_part, 1 ) ); /*q0*/ + move16(); } return; } -#else + + +/*------------------------------------------------------------------------- + * initDiffuseResponses() + * + * + *-------------------------------------------------------------------------*/ + void initDiffuseResponses_fx( Word16 *diffuse_response_function_fx, /*q15*/ const Word16 num_channels, @@ -2266,7 +1292,6 @@ void initDiffuseResponses_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -2275,7 +1300,6 @@ void initDiffuseResponses_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation_shd_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*Q(q_cldfb)*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*Q(q_cldfb)*/ @@ -2524,162 +1548,6 @@ void protoSignalComputation_shd_fx( return; } -#else -void protoSignalComputation_shd( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float *proto_direct_buffer_f, - float *proto_diffuse_buffer_f, - float *reference_power, - const int16_t slot_index, - const int16_t num_inputs, - const int16_t num_outputs_diff, - const int16_t num_freq_bands, - float *p_Rmat ) -{ - int16_t l, k; - float *p_proto_direct_buffer; - float *p_proto_diffuse_buffer; - int16_t Rmat_k[4]; - float W_real, W_imag; - float Y_real, Y_imag; - float *p_k[4]; - - k = 0; /* to avoid compilation warning */ - - p_proto_direct_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * num_inputs; - p_proto_diffuse_buffer = proto_diffuse_buffer_f + slot_index * 2 * num_freq_bands * num_outputs_diff; - - if ( num_inputs == 1 ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - p_proto_direct_buffer[2 * l] = RealBuffer[0][0][l]; - p_proto_direct_buffer[2 * l + 1] = ImagBuffer[0][0][l]; - } - } - else if ( num_inputs == 2 ) - { - if ( p_Rmat != 0 ) - { - assert( num_inputs == 4 && "This code block should never be run with num_inputs != 4!" ); - - for ( l = 0; l < num_freq_bands; l++ ) - { - W_real = RealBuffer[0][0][l] + RealBuffer[1][0][l]; - W_imag = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; - - Y_real = RealBuffer[0][0][l] - RealBuffer[1][0][l]; - Y_imag = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; - - p_proto_direct_buffer[2 * l] = W_real; - p_proto_direct_buffer[2 * l + 1] = W_imag; - p_proto_direct_buffer[2 * num_freq_bands + 2 * l] = p_Rmat[0] * Y_real; - p_proto_direct_buffer[2 * num_freq_bands + 2 * l + 1] = p_Rmat[0] * Y_imag; - } - } - else - { - for ( l = 0; l < num_freq_bands; l++ ) - { - W_real = RealBuffer[0][0][l] + RealBuffer[1][0][l]; - W_imag = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; - - p_proto_direct_buffer[2 * l] = W_real; - p_proto_direct_buffer[2 * l + 1] = W_imag; - { - p_proto_direct_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; - p_proto_direct_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; - } - } - } - } - else if ( num_inputs >= 4 ) - { - p_k[0] = p_proto_direct_buffer; - p_k[1] = p_proto_direct_buffer + 2 * num_freq_bands; - p_k[2] = p_proto_direct_buffer + 4 * num_freq_bands; - p_k[3] = p_proto_direct_buffer + 6 * num_freq_bands; - Rmat_k[0] = 0; - Rmat_k[1] = 1; - Rmat_k[2] = 2; - Rmat_k[3] = 0; - - if ( p_Rmat != 0 ) - { - assert( num_inputs == 4 && "This code block should never be run with num_inputs != 4!" ); - - for ( l = 0; l < num_freq_bands; l++ ) - { - *( p_k[0] ) = RealBuffer[0][0][l]; - reference_power[l + num_freq_bands] = *( p_k[0] ) * *( p_k[0] ); - p_k[0]++; - *( p_k[0] ) = ImagBuffer[0][0][l]; - reference_power[l + num_freq_bands] += *( p_k[0] ) * *( p_k[0] ); - p_k[0]++; - reference_power[l] = 0.5f * reference_power[l + num_freq_bands]; - - for ( k = 1; k < 4; k++ ) - { - *( p_k[k] ) = p_Rmat[3 * Rmat_k[k] + 1] * RealBuffer[1][0][l] + p_Rmat[3 * Rmat_k[k] + 2] * RealBuffer[2][0][l] + p_Rmat[3 * Rmat_k[k] + 0] * RealBuffer[3][0][l]; - reference_power[l + ( k + 1 ) * num_freq_bands] = *( p_k[k] ) * *( p_k[k] ); - p_k[k]++; - *( p_k[k] ) = p_Rmat[3 * Rmat_k[k] + 1] * ImagBuffer[1][0][l] + p_Rmat[3 * Rmat_k[k] + 2] * ImagBuffer[2][0][l] + p_Rmat[3 * Rmat_k[k] + 0] * ImagBuffer[3][0][l]; - reference_power[l + ( k + 1 ) * num_freq_bands] += *( p_k[k] ) * *( p_k[k] ); - p_k[k]++; - reference_power[l] += 0.5f * ( reference_power[l + ( k + 1 ) * num_freq_bands] ); - } - - for ( k = 1; k < 4; k++ ) - { - RealBuffer[k][0][l] = p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l]; - ImagBuffer[k][0][l] = p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1]; - } - } - } - else - { - set_zero( reference_power, num_freq_bands ); - for ( k = 0; k < 4; k++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l] = RealBuffer[k][0][l]; - p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1] = ImagBuffer[k][0][l]; - reference_power[l + ( k + 1 ) * num_freq_bands] = RealBuffer[k][0][l] * RealBuffer[k][0][l] + ImagBuffer[k][0][l] * ImagBuffer[k][0][l]; - reference_power[l] += 0.5f * ( reference_power[l + ( k + 1 ) * num_freq_bands] ); - } - } - } - - /* Additional transport channels = planar SBA components of degree higher than 1*/ - for ( ; k < num_inputs; k++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l] = RealBuffer[k][0][l]; - p_proto_direct_buffer[k * 2 * num_freq_bands + 2 * l + 1] = ImagBuffer[k][0][l]; - } - } - } - - - /*Copy direct to diffuse proto*/ - mvr2r( p_proto_direct_buffer, p_proto_diffuse_buffer, 2 * num_freq_bands * min( num_outputs_diff, num_inputs ) ); - - if ( num_inputs == 1 ) - { - /* Add comfort noise addition (CNA) to diffuse proto only*/ - for ( l = 0; l < num_freq_bands; l++ ) - { - p_proto_diffuse_buffer[2 * l] += RealBuffer[1][0][l]; - p_proto_diffuse_buffer[2 * l + 1] += ImagBuffer[1][0][l]; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2688,7 +1556,6 @@ void protoSignalComputation_shd( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation1_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -2784,40 +1651,6 @@ void protoSignalComputation1_fx( return; } -#else -void protoSignalComputation1( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float *proto_frame_f, - float *proto_direct_buffer_f, - float *reference_power, - float *proto_power_smooth, - const int16_t slot_index, - const int16_t num_outputs_diff, - const int16_t num_freq_bands ) -{ - int16_t l, k; - float *p_proto_buffer; - - p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands; - - for ( l = 0; l < num_freq_bands; l++ ) - { - reference_power[l] = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - proto_power_smooth[l] += reference_power[l]; - p_proto_buffer[2 * l] = RealBuffer[0][0][l]; - p_proto_buffer[2 * l + 1] = ImagBuffer[0][0][l]; - - for ( k = 0; k < num_outputs_diff; k++ ) - { - proto_frame_f[2 * k * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; - proto_frame_f[2 * k * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2826,7 +1659,6 @@ void protoSignalComputation1( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation2_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -3543,406 +2375,85 @@ void protoSignalComputation2_fx( Real_aux_fx = L_add( re1, re2 ); // q_cldfb+ min_q_shift Imag_aux_fx = L_add( im1, im2 ); // q_cldfb+ min_q_shift - // reference_power_fx[l] = Madd_32_32( Mpy_32_32( Real_aux_fx, Real_aux_fx ), Imag_aux_fx, Imag_aux_fx ); - reference_power_64fx[l] = W_add( W_mult0_32_32( Real_aux_fx, Real_aux_fx ), W_mult0_32_32( Imag_aux_fx, Imag_aux_fx ) ); // q_temp - move64(); - - IF( LT_16( q_temp, *q_proto_power_smooth ) ) - { - proto_power_smooth_fx[l] = L_add( L_shr( proto_power_smooth_fx[l], sub( *q_proto_power_smooth, q_temp ) ), W_extract_l( W_shr( reference_power_64fx[l], 31 ) ) ); // q_temp - move32(); - } - ELSE - { - proto_power_smooth_fx[l] = L_add( proto_power_smooth_fx[l], L_shr( W_extract_l( W_shr( reference_power_64fx[l], 31 ) ), sub( q_temp, *q_proto_power_smooth ) ) ); // q_proto_power_smooth - move32(); - } - - p_proto_buffer_fx[2 * l] = Real_aux_fx; // q_cldfb+ min_q_shift - move32(); - p_proto_buffer_fx[2 * l + 1] = Imag_aux_fx; // q_cldfb+ min_q_shift - move32(); - - p_proto_buffer_fx[2 * ( num_freq_bands + l )] = L_sub( re1, re2 ); // q_cldfb+ min_q_shift - move32(); - p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1] = L_sub( im1, im2 ); // q_cldfb+ min_q_shift - move32(); - - temp = Madd_32_32( Mpy_32_32( p_proto_buffer_fx[2 * ( num_freq_bands + l )], p_proto_buffer_fx[2 * ( num_freq_bands + l )] ), p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1], p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1] ); // q_temp - IF( LT_16( q_temp, *q_proto_power_smooth ) ) - { - proto_power_smooth_fx[l + num_freq_bands] = L_add( L_shr( proto_power_smooth_fx[l + num_freq_bands], sub( *q_proto_power_smooth, q_temp ) ), temp ); // q_temp - move32(); - } - ELSE - { - proto_power_smooth_fx[l + num_freq_bands] = L_add( proto_power_smooth_fx[l + num_freq_bands], L_shr( temp, sub( q_temp, *q_proto_power_smooth ) ) ); // q_proto_power_smooth - move32(); - } - - proto_frame_f_fx[2 * l] = Real_aux_fx; // q_cldfb+ min_q_shift - move32(); - proto_frame_f_fx[2 * l + 1] = Imag_aux_fx; // q_cldfb+ min_q_shift - move32(); - - proto_frame_f_fx[2 * num_freq_bands + 2 * l] = re1; // q_cldfb+ min_q_shift - move32(); - proto_frame_f_fx[2 * num_freq_bands + 2 * l + 1] = im1; // q_cldfb+ min_q_shift - move32(); - proto_frame_f_fx[4 * num_freq_bands + 2 * l] = re2; // q_cldfb+ min_q_shift - move32(); - proto_frame_f_fx[4 * num_freq_bands + 2 * l + 1] = im2; // q_cldfb+ min_q_shift - move32(); - } - } - q_reference_power_64fx = shl( add( q_cldfb, min_q_shift ), 1 ); - Word16 norm_shift = 63; - move16(); - FOR( l = 0; l < num_freq_bands; l++ ) - { - IF( reference_power_64fx[l] ) - { - norm_shift = s_min( norm_shift, W_norm( reference_power_64fx[l] ) ); - } - } - FOR( l = 0; l < num_freq_bands; l++ ) - { - reference_power_fx[l] = W_extract_h( W_shl( reference_power_64fx[l], norm_shift ) ); // q_reference_power_64fx+norm_shift-32 - move32(); - } - *q_reference_power = sub( add( q_reference_power_64fx, norm_shift ), 32 ); - move16(); - - *q_proto_frame_f = add( q_cldfb, min_q_shift ); - move16(); - *q_proto_direct_buffer_f = add( q_cldfb, min_q_shift ); - move16(); - *q_proto_power_smooth = s_min( *q_proto_power_smooth, q_temp ); - move16(); - - return; -} -#else -void protoSignalComputation2( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float *proto_frame_f, - float *proto_direct_buffer_f, - float *reference_power, - float *proto_power_smooth, - const int16_t isloudspeaker, - const int16_t slot_index, - const int16_t num_freq_bands, - MASA_STEREO_TYPE_DETECT *stereo_type_detect ) -{ - int16_t l; - float *p_proto_buffer; - float Real_aux, Imag_aux; - - float left_bb_power, right_bb_power, total_bb_power, lr_bb_power; - float lr_total_bb_ratio; - float a, b; - - float left_hi_power, right_hi_power, total_hi_power, lr_hi_power; - float lr_total_hi_ratio; - float a2, b2; - - float sum_power; - float sum_total_ratio[MASA_SUM_FREQ_RANGE_BINS]; - float min_sum_total_ratio; - float min_sum_total_ratio_db; - - float RealSubtract, ImagSubtract; - - float interpolatorSpaced = 0.0f; - float interpolatorDmx = 1.0f; - - int16_t dipole_freq_range[2]; - float tempSpaced, tempDmx; - - if ( isloudspeaker ) - { - p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 3; - - for ( l = 0; l < num_freq_bands; l++ ) - { - float Left_power; - float Right_power; - Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; - Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; - - Left_power = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - Right_power = RealBuffer[1][0][l] * RealBuffer[1][0][l] + ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; - - reference_power[l] = Left_power + Right_power; - proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; - - p_proto_buffer[2 * l] = Real_aux; - p_proto_buffer[2 * l + 1] = Imag_aux; - proto_power_smooth[l + num_freq_bands] += RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; - - proto_power_smooth[l + 2 * num_freq_bands] += RealBuffer[1][0][l] * RealBuffer[1][0][l]; - proto_power_smooth[l + 2 * num_freq_bands] += ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; - p_proto_buffer[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; - p_proto_buffer[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; - - proto_frame_f[2 * l] = Real_aux; - proto_frame_f[2 * l + 1] = Imag_aux; - - proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; - proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; - } - } - else if ( stereo_type_detect != NULL ) - { - p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 2; - - left_bb_power = 0.0f; - right_bb_power = 0.0f; - total_bb_power = 0.0f; - - left_hi_power = 0.0f; - right_hi_power = 0.0f; - total_hi_power = 0.0f; - - dipole_freq_range[0] = stereo_type_detect->dipole_freq_range[0]; - dipole_freq_range[1] = stereo_type_detect->dipole_freq_range[1]; - - a = 0.01f; /* Temporal smoothing coefficient */ - b = 1.0f - a; /* Temporal smoothing coefficient */ - a2 = 0.1f; /* Temporal smoothing coefficient */ - b2 = 1.0f - a2; /* Temporal smoothing coefficient */ - - if ( stereo_type_detect->interpolator > 0 ) - { - if ( stereo_type_detect->type_change_direction == MASA_STEREO_SPACED_MICS ) - { - interpolatorSpaced = ( (float) ( stereo_type_detect->interpolator ) ) / ( (float) MASA_STEREO_INTERPOLATION_SLOTS ); - interpolatorDmx = 1.0f - interpolatorSpaced; - } - else - { - interpolatorDmx = ( (float) ( stereo_type_detect->interpolator ) ) / ( (float) MASA_STEREO_INTERPOLATION_SLOTS ); - interpolatorSpaced = 1.0f - interpolatorDmx; - } - } - - for ( l = 0; l < num_freq_bands; l++ ) - { - float Left_power; - float Right_power; - - /* Compute sum signal */ - Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; - Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; - - /* Compute reference power */ - Left_power = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - Right_power = RealBuffer[1][0][l] * RealBuffer[1][0][l] + ImagBuffer[1][0][l] * ImagBuffer[1][0][l]; - - reference_power[l] = Left_power + Right_power; - - left_bb_power += Left_power; - right_bb_power += Right_power; - total_bb_power += reference_power[l]; - - if ( l > MASA_HI_FREQ_START_BIN ) - { - left_hi_power += Left_power; - right_hi_power += Right_power; - total_hi_power += reference_power[l]; - } - - if ( l < min( num_freq_bands, MASA_SUM_FREQ_RANGE_BINS ) ) - { - sum_power = Real_aux * Real_aux + Imag_aux * Imag_aux; - - stereo_type_detect->sum_power[l] = a * sum_power + b * stereo_type_detect->sum_power[l]; - stereo_type_detect->total_power[l] = a * reference_power[l] + b * stereo_type_detect->total_power[l]; - - sum_total_ratio[l] = stereo_type_detect->sum_power[l] / ( stereo_type_detect->total_power[l] + EPSILON ); - } - - if ( l == 0 ) - { - RealSubtract = RealBuffer[0][0][l] - RealBuffer[1][0][l]; - ImagSubtract = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; - stereo_type_detect->subtract_power_y += RealSubtract * RealSubtract + ImagSubtract * ImagSubtract; - } - - /* Compute protos (and their power) for direct sound rendering */ - - /* W prototype */ - if ( stereo_type_detect->interpolator > 0 ) - { - if ( l < ( dipole_freq_range[1] - 1 ) || l >= MASA_SUM_PROTO_START_BIN ) - { - Real_aux = interpolatorSpaced * 0.5f * Real_aux + interpolatorDmx * Real_aux; - Imag_aux = interpolatorSpaced * 0.5f * Imag_aux + interpolatorDmx * Imag_aux; - proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; - p_proto_buffer[2 * l] = Real_aux; - p_proto_buffer[2 * l + 1] = Imag_aux; - } - else - { - tempSpaced = RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - tempDmx = Real_aux * Real_aux + Imag_aux * Imag_aux; - proto_power_smooth[l] += interpolatorSpaced * tempSpaced + interpolatorDmx * tempDmx; - p_proto_buffer[2 * l] = interpolatorSpaced * RealBuffer[0][0][l] + interpolatorDmx * Real_aux; - p_proto_buffer[2 * l + 1] = interpolatorSpaced * ImagBuffer[0][0][l] + interpolatorDmx * Imag_aux; - } - } - else if ( stereo_type_detect->masa_stereo_type == MASA_STEREO_SPACED_MICS ) - { - if ( l < ( dipole_freq_range[1] - 1 ) || l >= MASA_SUM_PROTO_START_BIN ) - { - Real_aux *= 0.5f; - Imag_aux *= 0.5f; - proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; - p_proto_buffer[2 * l] = Real_aux; - p_proto_buffer[2 * l + 1] = Imag_aux; - } - else - { - proto_power_smooth[l] += RealBuffer[0][0][l] * RealBuffer[0][0][l] + ImagBuffer[0][0][l] * ImagBuffer[0][0][l]; - p_proto_buffer[2 * l] = RealBuffer[0][0][l]; - p_proto_buffer[2 * l + 1] = ImagBuffer[0][0][l]; - } - } - else - { - proto_power_smooth[l] += Real_aux * Real_aux + Imag_aux * Imag_aux; - p_proto_buffer[2 * l] = Real_aux; - p_proto_buffer[2 * l + 1] = Imag_aux; - } + // reference_power_fx[l] = Madd_32_32( Mpy_32_32( Real_aux_fx, Real_aux_fx ), Imag_aux_fx, Imag_aux_fx ); + reference_power_64fx[l] = W_add( W_mult0_32_32( Real_aux_fx, Real_aux_fx ), W_mult0_32_32( Imag_aux_fx, Imag_aux_fx ) ); // q_temp + move64(); - /* Y prototype */ - if ( stereo_type_detect->interpolator > 0 ) - { - if ( l < ( dipole_freq_range[0] ) ) - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * p_proto_buffer[2 * l] + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * p_proto_buffer[2 * l + 1] + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); - } - else if ( l < ( dipole_freq_range[1] ) ) - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ) + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * ( -( RealBuffer[0][0][l] - RealBuffer[1][0][l] ) ) + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); - } - else - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = interpolatorSpaced * p_proto_buffer[2 * l] + interpolatorDmx * ( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = interpolatorSpaced * p_proto_buffer[2 * l + 1] + interpolatorDmx * ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); - } - proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; - } - else if ( stereo_type_detect->masa_stereo_type == MASA_STEREO_SPACED_MICS ) + IF( LT_16( q_temp, *q_proto_power_smooth ) ) { - if ( l < ( dipole_freq_range[0] ) ) /* proto = W */ - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = p_proto_buffer[2 * l]; - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = p_proto_buffer[2 * l + 1]; - proto_power_smooth[l + num_freq_bands] = proto_power_smooth[l]; - } - else if ( l < ( dipole_freq_range[1] ) ) /* proto = -i * (x1-x2) * eq */ - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = ( ImagBuffer[0][0][l] - ImagBuffer[1][0][l] ); - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = -( RealBuffer[0][0][l] - RealBuffer[1][0][l] ); - proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; - } - else /* proto = W */ - { - p_proto_buffer[2 * num_freq_bands + 2 * l] = p_proto_buffer[2 * l]; - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = p_proto_buffer[2 * l + 1]; - proto_power_smooth[l + num_freq_bands] = proto_power_smooth[l]; - } + proto_power_smooth_fx[l] = L_add( L_shr( proto_power_smooth_fx[l], sub( *q_proto_power_smooth, q_temp ) ), W_extract_l( W_shr( reference_power_64fx[l], 31 ) ) ); // q_temp + move32(); } - else + ELSE { - p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; - proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; + proto_power_smooth_fx[l] = L_add( proto_power_smooth_fx[l], L_shr( W_extract_l( W_shr( reference_power_64fx[l], 31 ) ), sub( q_temp, *q_proto_power_smooth ) ) ); // q_proto_power_smooth + move32(); } - /* Compute protos for decorrelation */ - proto_frame_f[2 * l] = Real_aux; - proto_frame_f[2 * l + 1] = Imag_aux; - proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; - proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; - } + p_proto_buffer_fx[2 * l] = Real_aux_fx; // q_cldfb+ min_q_shift + move32(); + p_proto_buffer_fx[2 * l + 1] = Imag_aux_fx; // q_cldfb+ min_q_shift + move32(); - if ( stereo_type_detect->interpolator > 0 ) - { - stereo_type_detect->interpolator++; - if ( stereo_type_detect->interpolator == MASA_STEREO_INTERPOLATION_SLOTS ) + p_proto_buffer_fx[2 * ( num_freq_bands + l )] = L_sub( re1, re2 ); // q_cldfb+ min_q_shift + move32(); + p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1] = L_sub( im1, im2 ); // q_cldfb+ min_q_shift + move32(); + + temp = Madd_32_32( Mpy_32_32( p_proto_buffer_fx[2 * ( num_freq_bands + l )], p_proto_buffer_fx[2 * ( num_freq_bands + l )] ), p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1], p_proto_buffer_fx[2 * ( num_freq_bands + l ) + 1] ); // q_temp + IF( LT_16( q_temp, *q_proto_power_smooth ) ) { - stereo_type_detect->interpolator = 0; - stereo_type_detect->current_stereo_type = stereo_type_detect->type_change_direction; + proto_power_smooth_fx[l + num_freq_bands] = L_add( L_shr( proto_power_smooth_fx[l + num_freq_bands], sub( *q_proto_power_smooth, q_temp ) ), temp ); // q_temp + move32(); + } + ELSE + { + proto_power_smooth_fx[l + num_freq_bands] = L_add( proto_power_smooth_fx[l + num_freq_bands], L_shr( temp, sub( q_temp, *q_proto_power_smooth ) ) ); // q_proto_power_smooth + move32(); } - } - - stereo_type_detect->left_bb_power = a * left_bb_power + b * stereo_type_detect->left_bb_power; - stereo_type_detect->right_bb_power = a * right_bb_power + b * stereo_type_detect->right_bb_power; - stereo_type_detect->total_bb_power = a * total_bb_power + b * stereo_type_detect->total_bb_power; - - lr_bb_power = ( stereo_type_detect->left_bb_power < stereo_type_detect->right_bb_power ) ? stereo_type_detect->left_bb_power : stereo_type_detect->right_bb_power; - lr_bb_power *= 2.0f; - lr_total_bb_ratio = 10.0f * log10f( lr_bb_power / ( stereo_type_detect->total_bb_power + EPSILON ) ); - - stereo_type_detect->left_hi_power = a2 * left_hi_power + b2 * stereo_type_detect->left_hi_power; - stereo_type_detect->right_hi_power = a2 * right_hi_power + b2 * stereo_type_detect->right_hi_power; - stereo_type_detect->total_hi_power = a2 * total_hi_power + b2 * stereo_type_detect->total_hi_power; - - lr_hi_power = ( stereo_type_detect->left_hi_power < stereo_type_detect->right_hi_power ) ? stereo_type_detect->left_hi_power : stereo_type_detect->right_hi_power; - lr_hi_power *= 2.0f; - lr_total_hi_ratio = 10.0f * log10f( lr_hi_power / ( stereo_type_detect->total_hi_power + EPSILON ) ); - - minimum( sum_total_ratio, min( num_freq_bands, MASA_SUM_FREQ_RANGE_BINS ), &min_sum_total_ratio ); - min_sum_total_ratio_db = 10.0f * log10f( min_sum_total_ratio ); - stereo_type_detect->lr_total_bb_ratio_db = lr_total_bb_ratio; - stereo_type_detect->lr_total_hi_ratio_db = lr_total_hi_ratio; - stereo_type_detect->min_sum_total_ratio_db = min_sum_total_ratio_db; + proto_frame_f_fx[2 * l] = Real_aux_fx; // q_cldfb+ min_q_shift + move32(); + proto_frame_f_fx[2 * l + 1] = Imag_aux_fx; // q_cldfb+ min_q_shift + move32(); - ivas_masa_stereotype_detection( stereo_type_detect ); + proto_frame_f_fx[2 * num_freq_bands + 2 * l] = re1; // q_cldfb+ min_q_shift + move32(); + proto_frame_f_fx[2 * num_freq_bands + 2 * l + 1] = im1; // q_cldfb+ min_q_shift + move32(); + proto_frame_f_fx[4 * num_freq_bands + 2 * l] = re2; // q_cldfb+ min_q_shift + move32(); + proto_frame_f_fx[4 * num_freq_bands + 2 * l + 1] = im2; // q_cldfb+ min_q_shift + move32(); + } } - else + q_reference_power_64fx = shl( add( q_cldfb, min_q_shift ), 1 ); + Word16 norm_shift = 63; + move16(); + FOR( l = 0; l < num_freq_bands; l++ ) { - p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * 2; - - for ( l = 0; l < num_freq_bands; l++ ) + IF( reference_power_64fx[l] ) { - Real_aux = RealBuffer[0][0][l] + RealBuffer[1][0][l]; - Imag_aux = ImagBuffer[0][0][l] + ImagBuffer[1][0][l]; - - reference_power[l] = Real_aux * Real_aux + Imag_aux * Imag_aux; - proto_power_smooth[l] += reference_power[l]; - p_proto_buffer[2 * l] = Real_aux; - p_proto_buffer[2 * l + 1] = Imag_aux; - - p_proto_buffer[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l] - RealBuffer[1][0][l]; - p_proto_buffer[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l] - ImagBuffer[1][0][l]; - proto_power_smooth[l + num_freq_bands] += p_proto_buffer[2 * num_freq_bands + 2 * l] * p_proto_buffer[2 * num_freq_bands + 2 * l] + p_proto_buffer[2 * num_freq_bands + 2 * l + 1] * p_proto_buffer[2 * num_freq_bands + 2 * l + 1]; - - proto_frame_f[2 * l] = Real_aux; - proto_frame_f[2 * l + 1] = Imag_aux; - - proto_frame_f[2 * num_freq_bands + 2 * l] = RealBuffer[0][0][l]; - proto_frame_f[2 * num_freq_bands + 2 * l + 1] = ImagBuffer[0][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l] = RealBuffer[1][0][l]; - proto_frame_f[4 * num_freq_bands + 2 * l + 1] = ImagBuffer[1][0][l]; + norm_shift = s_min( norm_shift, W_norm( reference_power_64fx[l] ) ); } } + FOR( l = 0; l < num_freq_bands; l++ ) + { + reference_power_fx[l] = W_extract_h( W_shl( reference_power_64fx[l], norm_shift ) ); // q_reference_power_64fx+norm_shift-32 + move32(); + } + *q_reference_power = sub( add( q_reference_power_64fx, norm_shift ), 32 ); + move16(); + + *q_proto_frame_f = add( q_cldfb, min_q_shift ); + move16(); + *q_proto_direct_buffer_f = add( q_cldfb, min_q_shift ); + move16(); + *q_proto_power_smooth = s_min( *q_proto_power_smooth, q_temp ); + move16(); return; } -#endif /*------------------------------------------------------------------------- @@ -3951,7 +2462,6 @@ void protoSignalComputation2( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation4_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -4104,66 +2614,6 @@ void protoSignalComputation4_fx( return; } -#else -void protoSignalComputation4( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float *proto_frame_f, - float *proto_direct_buffer_f, - float *reference_power, - float *proto_power_smooth, - const int16_t slot_index, - const int16_t num_outputs_diff, - const int16_t num_freq_bands, - const float *mtx_hoa_decoder, - const int16_t nchan_transport, - const int16_t *sba_map_tc_ind ) -{ - int16_t k, l; - int16_t n; - float sq_tmp; - float *p_proto_buffer; - - set_zero( reference_power, num_freq_bands ); - for ( k = 0; k < 4; k++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - sq_tmp = RealBuffer[k][0][l] * RealBuffer[k][0][l] + ImagBuffer[k][0][l] * ImagBuffer[k][0][l]; - reference_power[l] += 0.5f * sq_tmp; - } - } - - /*For decorrelated diffuseness*/ - for ( l = 0; l < num_outputs_diff; l++ ) - { - for ( k = 0; k < num_freq_bands; k++ ) - { - proto_frame_f[2 * l * num_freq_bands + 2 * k] = 0.f; - proto_frame_f[2 * l * num_freq_bands + 2 * k + 1] = 0.f; - for ( n = 0; n < nchan_transport; n++ ) - { - proto_frame_f[2 * l * num_freq_bands + 2 * k] += RealBuffer[n][0][k] * mtx_hoa_decoder[l * 16 + sba_map_tc_ind[n]]; - proto_frame_f[2 * l * num_freq_bands + 2 * k + 1] += ImagBuffer[n][0][k] * mtx_hoa_decoder[l * 16 + sba_map_tc_ind[n]]; - } - } - } - - p_proto_buffer = proto_direct_buffer_f + slot_index * 2 * num_freq_bands * num_outputs_diff; - for ( k = 0; k < num_outputs_diff; k++ ) - { - for ( l = 0; l < num_freq_bands; l++ ) - { - sq_tmp = proto_frame_f[k * 2 * num_freq_bands + 2 * l] * proto_frame_f[k * 2 * num_freq_bands + 2 * l] + proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1] * proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1]; - proto_power_smooth[l + k * num_freq_bands] += sq_tmp; - p_proto_buffer[k * 2 * num_freq_bands + 2 * l] = proto_frame_f[k * 2 * num_freq_bands + 2 * l]; - p_proto_buffer[k * 2 * num_freq_bands + 2 * l + 1] = proto_frame_f[k * 2 * num_freq_bands + 2 * l + 1]; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4172,7 +2622,6 @@ void protoSignalComputation4( * Compute diffuse prototype buffer and smooth power, only for decorrelated bands *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_compute_diffuse_proto_fx( DIRAC_REND_HANDLE hDirACRend, const Word16 num_freq_bands, @@ -4309,83 +2758,6 @@ void ivas_dirac_dec_compute_diffuse_proto_fx( return; } -#else -void ivas_dirac_dec_compute_diffuse_proto( - DIRAC_REND_HANDLE hDirACRend, - const int16_t num_freq_bands, - const int16_t slot_idx /* i : slot index */ -) -{ - int16_t k, l; - int16_t num_freq_bands_diff; - float *p_diff_buffer, *p_diff_buffer_1; - float *p_proto_diff, *p_power_smooth, *proto_frame_dec_f; - DIRAC_OUTPUT_SYNTHESIS_PARAMS *h_dirac_output_synthesis_params; - DIRAC_OUTPUT_SYNTHESIS_STATE *h_dirac_output_synthesis_state; - int16_t m; - float *p_hoa_enc; - - proto_frame_dec_f = hDirACRend->proto_frame_dec_f; - h_dirac_output_synthesis_params = &( hDirACRend->h_output_synthesis_psd_params ); - h_dirac_output_synthesis_state = &( hDirACRend->h_output_synthesis_psd_state ); - - num_freq_bands_diff = h_dirac_output_synthesis_params->max_band_decorr; - if ( num_freq_bands_diff == 0 ) - { - return; - } - - p_diff_buffer = h_dirac_output_synthesis_state->proto_diffuse_buffer_f + slot_idx * 2 * num_freq_bands_diff * hDirACRend->hOutSetup.nchan_out_woLFE; - p_diff_buffer_1 = p_diff_buffer + 1; - p_power_smooth = h_dirac_output_synthesis_state->proto_power_diff_smooth; - - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_PSD_SHD ) - { - for ( k = 0; k < hDirACRend->hOutSetup.nchan_out_woLFE; k++ ) - { - p_proto_diff = proto_frame_dec_f + k * 2 * num_freq_bands; - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - *p_diff_buffer = *( p_proto_diff++ ); - *p_diff_buffer_1 = *( p_proto_diff++ ); - *( p_power_smooth++ ) += ( *p_diff_buffer ) * ( *p_diff_buffer ) + ( *p_diff_buffer_1 ) * ( *p_diff_buffer_1 ); - p_diff_buffer += 2; - p_diff_buffer_1 += 2; - } - } - } - else - { - /*DIRAC_SYNTHESIS_PSD_SHD: Virtual LS->HOA encoding*/ - for ( k = 0; k < hDirACRend->hOutSetup.nchan_out_woLFE; k++ ) - { - for ( l = 0; l < num_freq_bands_diff; l++ ) - { - p_hoa_enc = hDirACRend->hoa_encoder + k; - p_proto_diff = proto_frame_dec_f + 2 * l; - - *p_diff_buffer = 0.f; - *p_diff_buffer_1 = 0.f; - - /*LS to HOA*/ - for ( m = 0; m < hDirACRend->num_outputs_diff; m++ ) - { - *p_diff_buffer += ( *p_hoa_enc ) * ( *p_proto_diff ); - *p_diff_buffer_1 += ( *p_hoa_enc ) * ( *( p_proto_diff + 1 ) ); - p_hoa_enc += hDirACRend->hOutSetup.nchan_out_woLFE; - p_proto_diff += 2 * num_freq_bands; - } - - *( p_power_smooth++ ) += ( *p_diff_buffer ) * ( *p_diff_buffer ) + ( *p_diff_buffer_1 ) * ( *p_diff_buffer_1 ); - p_diff_buffer += 2; - p_diff_buffer_1 += 2; - } - } - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4393,7 +2765,6 @@ void ivas_dirac_dec_compute_diffuse_proto( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void computeDirectionAngles_fx( Word32 *intensity_real_x_fx, /*q_intensity_real*/ Word32 *intensity_real_y_fx, /*q_intensity_real*/ @@ -4500,50 +2871,6 @@ void computeDirectionAngles_fx( return; } -#else -void computeDirectionAngles( - float *intensity_real_x, - float *intensity_real_y, - float *intensity_real_z, - const int16_t num_frequency_bands, - int16_t *azimuth, - int16_t *elevation ) -{ - int16_t k; - float intensityNorm; - float x, y, z, radius; - - for ( k = 0; k < num_frequency_bands; ++k ) - { - intensityNorm = *( intensity_real_x ) * *( intensity_real_x ) + - *( intensity_real_y ) * *( intensity_real_y ) + - *( intensity_real_z ) * *( intensity_real_z ); - - if ( intensityNorm <= EPSILON ) - { - intensityNorm = 1.0f; - x = 1.0f; - y = 0.0f; - z = 0.0f; - intensity_real_x++; - intensity_real_y++; - intensity_real_z++; - } - else - { - intensityNorm = sqrtf( 1.f / intensityNorm ); - x = *( intensity_real_x++ ) * intensityNorm; - y = *( intensity_real_y++ ) * intensityNorm; - z = *( intensity_real_z++ ) * intensityNorm; - } - radius = sqrtf( x * x + y * y ); - azimuth[k] = (int16_t) ( max( -180.0f, min( 180.0f, atan2f( y, x ) / EVS_PI * 180.0f ) ) + 0.5f ); - elevation[k] = (int16_t) ( max( -90.0f, min( 180.0f, atan2f( z, radius ) / EVS_PI * 180.0f ) ) + 0.5f ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4552,7 +2879,6 @@ void computeDirectionAngles( * Initialize stereo transport signal type detection *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_masa_init_stereotype_detection_fx( MASA_STEREO_TYPE_DETECT *stereo_type_detect ) { @@ -4633,43 +2959,6 @@ void ivas_masa_init_stereotype_detection_fx( return; } -#else -void ivas_masa_init_stereotype_detection( - MASA_STEREO_TYPE_DETECT *stereo_type_detect ) -{ - stereo_type_detect->masa_stereo_type = MASA_STEREO_DOWNMIX; - stereo_type_detect->current_stereo_type = MASA_STEREO_DOWNMIX; - stereo_type_detect->type_change_direction = MASA_STEREO_DOWNMIX; - - stereo_type_detect->counter = 0; - stereo_type_detect->interpolator = 0; - - stereo_type_detect->dipole_freq_range[0] = 1; - stereo_type_detect->dipole_freq_range[1] = 3; - - stereo_type_detect->left_bb_power = 0.0f; /* Broadband estimates */ - stereo_type_detect->right_bb_power = 0.0f; - stereo_type_detect->total_bb_power = 0.0f; - - stereo_type_detect->left_hi_power = 0.0f; /* High-frequency estimates */ - stereo_type_detect->right_hi_power = 0.0f; - stereo_type_detect->total_hi_power = 0.0f; - - set_zero( stereo_type_detect->sum_power, MASA_SUM_FREQ_RANGE_BINS ); - set_zero( stereo_type_detect->total_power, MASA_SUM_FREQ_RANGE_BINS ); - - stereo_type_detect->subtract_power_y = 0.0f; - stereo_type_detect->subtract_power_y_smooth = 0.0f; - stereo_type_detect->target_power_y_smooth = 0.0f; - - stereo_type_detect->lr_total_bb_ratio_db = 0.0f; - stereo_type_detect->lr_total_hi_ratio_db = 0.0f; - stereo_type_detect->min_sum_total_ratio_db = 0.0f; - stereo_type_detect->subtract_target_ratio_db = 0.0f; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -4678,7 +2967,6 @@ void ivas_masa_init_stereotype_detection( * Detect the type of the transport audio signals *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_masa_stereotype_detection_fx( MASA_STEREO_TYPE_DETECT *stereo_type_detect ) { @@ -4764,142 +3052,49 @@ void ivas_masa_stereotype_detection_fx( /* min_sum_temp = min_sum_total_ratio_db / 6.0f; */ min_sum_temp_fx = Mpy_32_32_r( min_sum_total_ratio_db_fx, 357913941 /* 1 / 6.0f in Q31 */ ); - /* lr_total_hi_temp = ( -lr_total_hi_ratio_db - 12.0f ) / 3.0f; */ - lr_total_hi_temp_fx = Mpy_32_32( L_sub( -lr_total_hi_ratio_db_fx, 25165824 /* 12.0 in Q21 */ ), 715827883 /* 1 / 3.0f in Q31 */ ); - - change_to_downmix2_fx = L_add( L_add( subtract_temp_fx, min_sum_temp_fx ), lr_total_hi_temp_fx ); // Q21 - - IF( GE_32( change_to_downmix2_fx, ONE_IN_Q21 /*1 q21*/ ) ) - { - change_to_downmix_selection = 1; - move16(); - } - } - - IF( LT_16( stereo_type_detect->counter, 400 ) ) - { - stereo_type_detect->counter++; - } - ELSE - { - IF( EQ_16( change_to_spaced_selection, 1 ) ) - { - stereo_type_detect->masa_stereo_type = MASA_STEREO_SPACED_MICS; - move32(); - } - ELSE IF( EQ_16( change_to_downmix_selection, 1 ) ) - { - stereo_type_detect->masa_stereo_type = MASA_STEREO_DOWNMIX; - move32(); - } - } - - IF( stereo_type_detect->interpolator == 0 ) - { - IF( NE_16( stereo_type_detect->current_stereo_type, stereo_type_detect->masa_stereo_type ) ) - { - stereo_type_detect->interpolator = 1; - move16(); - stereo_type_detect->type_change_direction = stereo_type_detect->masa_stereo_type; - move32(); - } - } - - return; -} -#else -void ivas_masa_stereotype_detection( - MASA_STEREO_TYPE_DETECT *stereo_type_detect ) -{ - float lr_total_bb_ratio_db = stereo_type_detect->lr_total_bb_ratio_db; - float lr_total_hi_ratio_db = stereo_type_detect->lr_total_hi_ratio_db; - float min_sum_total_ratio_db = stereo_type_detect->min_sum_total_ratio_db; - float subtract_target_ratio_db = stereo_type_detect->subtract_target_ratio_db; - float change_to_spaced; - int16_t change_to_spaced_selection; - float change_to_downmix; - float change_to_downmix2; - int16_t change_to_downmix_selection; - float subtract_temp; - float min_sum_temp; - float lr_total_bb_temp; - float lr_total_hi_temp; - - /* Determine if the determined features match the spaced mic type */ - change_to_spaced_selection = 0; - if ( subtract_target_ratio_db < -3.0f ) - { - subtract_temp = ( -subtract_target_ratio_db - 3.0f ) / 3.0f; - min_sum_temp = max( -min_sum_total_ratio_db / 6.0f, 0.0f ); - lr_total_bb_temp = lr_total_bb_ratio_db / 6.0f; - - change_to_spaced = subtract_temp + min_sum_temp + lr_total_bb_temp; - - if ( change_to_spaced >= 1.0f ) - { - change_to_spaced_selection = 1; - } - } - - /* Determine if the determined features match the downmix type, according to a metric */ - change_to_downmix_selection = 0; - if ( subtract_target_ratio_db > 0.0f ) - { - subtract_temp = subtract_target_ratio_db / 3.0f; - min_sum_temp = ( min_sum_total_ratio_db + 1.0f ) / 6.0f; - lr_total_bb_temp = -lr_total_bb_ratio_db / 6.0f; - - change_to_downmix = subtract_temp + min_sum_temp + lr_total_bb_temp; - - if ( change_to_downmix >= 1.0f ) - { - change_to_downmix_selection = 1; - } - } - - /* Determine if the determined features match the downmix type, according to another metric */ - if ( lr_total_hi_ratio_db < -12.0f ) - { - subtract_temp = ( subtract_target_ratio_db + 4.0f ) / 3.0f; - min_sum_temp = min_sum_total_ratio_db / 6.0f; - lr_total_hi_temp = ( -lr_total_hi_ratio_db - 12.0f ) / 3.0f; - - change_to_downmix2 = subtract_temp + min_sum_temp + lr_total_hi_temp; + /* lr_total_hi_temp = ( -lr_total_hi_ratio_db - 12.0f ) / 3.0f; */ + lr_total_hi_temp_fx = Mpy_32_32( L_sub( -lr_total_hi_ratio_db_fx, 25165824 /* 12.0 in Q21 */ ), 715827883 /* 1 / 3.0f in Q31 */ ); + + change_to_downmix2_fx = L_add( L_add( subtract_temp_fx, min_sum_temp_fx ), lr_total_hi_temp_fx ); // Q21 - if ( change_to_downmix2 >= 1.0f ) + IF( GE_32( change_to_downmix2_fx, ONE_IN_Q21 /*1 q21*/ ) ) { change_to_downmix_selection = 1; + move16(); } } - if ( stereo_type_detect->counter < 400 ) + IF( LT_16( stereo_type_detect->counter, 400 ) ) { stereo_type_detect->counter++; } - else + ELSE { - if ( change_to_spaced_selection == 1 ) + IF( EQ_16( change_to_spaced_selection, 1 ) ) { stereo_type_detect->masa_stereo_type = MASA_STEREO_SPACED_MICS; + move32(); } - else if ( change_to_downmix_selection == 1 ) + ELSE IF( EQ_16( change_to_downmix_selection, 1 ) ) { stereo_type_detect->masa_stereo_type = MASA_STEREO_DOWNMIX; + move32(); } } - if ( stereo_type_detect->interpolator == 0 ) + IF( stereo_type_detect->interpolator == 0 ) { - if ( stereo_type_detect->current_stereo_type != stereo_type_detect->masa_stereo_type ) + IF( NE_16( stereo_type_detect->current_stereo_type, stereo_type_detect->masa_stereo_type ) ) { stereo_type_detect->interpolator = 1; + move16(); stereo_type_detect->type_change_direction = stereo_type_detect->masa_stereo_type; + move32(); } } return; } -#endif /*------------------------------------------------------------------------- @@ -4908,7 +3103,6 @@ void ivas_masa_stereotype_detection( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void computeIntensityVector_dec_fx( Word32 Cldfb_RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 Cldfb_ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -4965,34 +3159,6 @@ void computeIntensityVector_dec_fx( return; } -#else -void computeIntensityVector_dec( - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - const int16_t num_frequency_bands, - float *intensity_real_x, - float *intensity_real_y, - float *intensity_real_z ) -{ - /* - * W = a + ib; Y = c + id - * real(W*Y') = ac + bd - */ - int16_t i; - float real, img; - - for ( i = 0; i < num_frequency_bands; ++i ) - { - real = Cldfb_RealBuffer[0][0][i]; - img = Cldfb_ImagBuffer[0][0][i]; - intensity_real_x[i] = Cldfb_RealBuffer[3][0][i] * real + Cldfb_ImagBuffer[3][0][i] * img; - intensity_real_y[i] = Cldfb_RealBuffer[1][0][i] * real + Cldfb_ImagBuffer[1][0][i] * img; - intensity_real_z[i] = Cldfb_RealBuffer[2][0][i] * real + Cldfb_ImagBuffer[2][0][i] * img; - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -5001,7 +3167,6 @@ void computeIntensityVector_dec( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_synth_with_cldfb_fx( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -5155,67 +3320,6 @@ void ivas_lfe_synth_with_cldfb_fx( return; } -#else -void ivas_lfe_synth_with_cldfb( - MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float RealBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - const int16_t slot_index, - const int16_t subframe_index, - const int16_t nchan_transport ) -{ - float lfeGain; - float transportGain; - float protoLfeReal, protoLfeImag; - int16_t i; - float transportEne, protoLfeEne, targetEneLfe, targetEneTrans; - - set_zero( RealBufferLfe[slot_index], CLDFB_NO_CHANNELS_MAX ); - set_zero( ImagBufferLfe[slot_index], CLDFB_NO_CHANNELS_MAX ); - - protoLfeReal = RealBuffer[0][0][0]; - protoLfeImag = ImagBuffer[0][0][0]; - transportEne = RealBuffer[0][0][0] * RealBuffer[0][0][0] + ImagBuffer[0][0][0] * ImagBuffer[0][0][0]; - for ( i = 1; i < nchan_transport; i++ ) - { - protoLfeReal += RealBuffer[i][0][0]; - protoLfeImag += ImagBuffer[i][0][0]; - transportEne += RealBuffer[i][0][0] * RealBuffer[i][0][0] + ImagBuffer[i][0][0] * ImagBuffer[i][0][0]; - } - protoLfeEne = protoLfeReal * protoLfeReal + protoLfeImag * protoLfeImag; - - targetEneLfe = transportEne * hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index]; - targetEneTrans = transportEne * max( ( 1.0f - hMasaLfeSynth->lfeToTotalEnergyRatio[subframe_index] ), 0.01f ); - - hMasaLfeSynth->transportEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; - hMasaLfeSynth->protoLfeEneSmooth *= MCMASA_LFE_SYNTH_ALPHA; - hMasaLfeSynth->targetEneLfeSmooth *= MCMASA_LFE_SYNTH_ALPHA; - hMasaLfeSynth->targetEneTransSmooth *= MCMASA_LFE_SYNTH_ALPHA; - - hMasaLfeSynth->transportEneSmooth += transportEne; - hMasaLfeSynth->protoLfeEneSmooth += protoLfeEne; - hMasaLfeSynth->targetEneLfeSmooth += targetEneLfe; - hMasaLfeSynth->targetEneTransSmooth += targetEneTrans; - - lfeGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneLfeSmooth / ( EPSILON + hMasaLfeSynth->protoLfeEneSmooth ) ) ); - transportGain = min( 1.0f, sqrtf( hMasaLfeSynth->targetEneTransSmooth / ( EPSILON + hMasaLfeSynth->transportEneSmooth ) ) ); - - RealBufferLfe[slot_index][0] = protoLfeReal * lfeGain; - ImagBufferLfe[slot_index][0] = protoLfeImag * lfeGain; - - RealBuffer[0][0][0] *= transportGain; - ImagBuffer[0][0][0] *= transportGain; - for ( i = 1; i < nchan_transport; i++ ) - { - RealBuffer[i][0][0] *= transportGain; - ImagBuffer[i][0][0] *= transportGain; - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -5224,7 +3328,6 @@ void ivas_lfe_synth_with_cldfb( * Apply rotation to DirAC DOAs *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void rotateAziEle_DirAC_fx( Word16 *azi, /* i/o: array of azimuth values */ Word16 *ele, /* i/o: array of elevation values */ @@ -5330,428 +3433,9 @@ void rotateAziEle_DirAC_fx( return; } -#else -void rotateAziEle_DirAC( - int16_t *azi, /* i/o: array of azimuth values */ - int16_t *ele, /* i/o: array of elevation values */ - const int16_t band1, /* i : bands to work on (lower limit) */ - const int16_t band2, /* i : bands to work on (upper bound) */ - const float *p_Rmat /* i : pointer to real-space rotation matrix */ -) -{ - int16_t b; - float dv_0, dv_1, dv_2; - float dv_r_0, dv_r_1, dv_r_2; - float w; - - push_wmops( "rotateAziEle_DirAC" ); - - for ( b = band1; b < band2; b++ ) - { - - /*Conversion spherical to cartesian coordinates*/ - w = cosf( ele[b] * PI_OVER_180 ); - dv_0 = w * cosf( azi[b] * PI_OVER_180 ); - dv_1 = w * sinf( azi[b] * PI_OVER_180 ); - dv_2 = sinf( ele[b] * PI_OVER_180 ); - - dv_r_0 = p_Rmat[0] * dv_0 + p_Rmat[1] * dv_1 + p_Rmat[2] * dv_2; - dv_r_1 = p_Rmat[3] * dv_0 + p_Rmat[4] * dv_1 + p_Rmat[5] * dv_2; - dv_r_2 = p_Rmat[6] * dv_0 + p_Rmat[7] * dv_1 + p_Rmat[8] * dv_2; - - /*Conversion spherical to cartesian coordinates*/ - azi[b] = (int16_t) ( atan2f( dv_r_1, dv_r_0 ) * _180_OVER_PI ); - ele[b] = (int16_t) ( atan2f( dv_r_2, sqrtf( dv_r_0 * dv_r_0 + dv_r_1 * dv_r_1 ) ) * _180_OVER_PI ); - } - - pop_wmops(); - - return; -} -#endif /* A reduced rewrite of the corresponding decoder side function */ -#ifndef IVAS_FLOAT_FIXED -static void ivas_masa_ext_dirac_render_sf( - MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: IVAS decoder structure */ - float *output_f[] /* i/o: synthesized core-coder transport channels/DirAC output */ -) -{ - int16_t i, ch, idx_in, idx_lfe; - DIRAC_REND_HANDLE hDirACRend; - float dirEne; - float surCohEner; - float surCohRatio[CLDFB_NO_CHANNELS_MAX]; - int16_t subframe_idx; - int16_t slot_idx, index_slot; - int16_t slot_idx_start, slot_idx_start_cldfb_synth, md_idx; - int16_t nchan_transport; - int16_t masa_band_mapping[MASA_FREQUENCY_BANDS + 1]; - - /* CLDFB: last output channels reserved to LFT for CICPx */ - float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; - - /* local copies of azi, ele, diffuseness */ - int16_t azimuth[CLDFB_NO_CHANNELS_MAX]; - int16_t elevation[CLDFB_NO_CHANNELS_MAX]; - float diffuseness_vector[CLDFB_NO_CHANNELS_MAX]; - - DIRAC_DEC_STACK_MEM DirAC_mem; - float *reference_power, *reference_power_smooth; - float *onset_filter, *onset_filter_subframe, *p_onset_filter = NULL; - uint16_t coherence_flag; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - push_wmops( "ivas_masa_ext_dirac_render_sf" ); - - /* Initialize aux buffers */ - hDirACRend = hMasaExtRend->hDirACRend; - hSpatParamRendCom = hMasaExtRend->hSpatParamRendCom; - nchan_transport = hMasaExtRend->nchan_input; - - DirAC_mem = hDirACRend->stack_mem; - - reference_power = DirAC_mem.reference_power; - reference_power_smooth = ( DirAC_mem.reference_power == NULL ) ? NULL : DirAC_mem.reference_power + hSpatParamRendCom->num_freq_bands; - onset_filter = DirAC_mem.onset_filter; - onset_filter_subframe = ( DirAC_mem.onset_filter == NULL ) ? NULL : DirAC_mem.onset_filter + hSpatParamRendCom->num_freq_bands; - coherence_flag = 1; /* There is always coherence assumed for ext rend of MASA */ - - /* Construct default MASA band mapping */ - for ( i = 0; i < MASA_FREQUENCY_BANDS + 1; i++ ) - { - masa_band_mapping[i] = i; - } - - /* Subframe loop */ - slot_idx_start = hSpatParamRendCom->slots_rendered; - slot_idx_start_cldfb_synth = 0; - - subframe_idx = hSpatParamRendCom->subframes_rendered; - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - - /* copy parameters into local buffers*/ - mvs2s( hSpatParamRendCom->azimuth[hSpatParamRendCom->render_to_md_map[subframe_idx]], azimuth, hSpatParamRendCom->num_freq_bands ); - mvs2s( hSpatParamRendCom->elevation[hSpatParamRendCom->render_to_md_map[subframe_idx]], elevation, hSpatParamRendCom->num_freq_bands ); - mvr2r( hSpatParamRendCom->diffuseness_vector[hSpatParamRendCom->render_to_md_map[subframe_idx]], diffuseness_vector, hSpatParamRendCom->num_freq_bands ); - - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - set_zero( reference_power_smooth, hSpatParamRendCom->num_freq_bands ); - } - else - { - set_zero( onset_filter_subframe, hSpatParamRendCom->num_freq_bands ); - } - - /* compute response */ - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - ivas_dirac_dec_compute_power_factors( hSpatParamRendCom->num_freq_bands, - diffuseness_vector, - hDirACRend->h_output_synthesis_psd_params.max_band_decorr, - hDirACRend->h_output_synthesis_psd_state.direct_power_factor, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor ); - - if ( coherence_flag ) - { - for ( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - dirEne = hDirACRend->h_output_synthesis_psd_state.direct_power_factor[i]; - surCohEner = hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor[i] * hSpatParamRendCom->surroundingCoherence[md_idx][i]; - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor[i] -= surCohEner; - hDirACRend->h_output_synthesis_psd_state.direct_power_factor[i] += surCohEner; - - surCohRatio[i] = surCohEner / ( 1e-12f + dirEne + surCohEner ); - } - } - else - { - set_zero( surCohRatio, hSpatParamRendCom->num_freq_bands ); - } - } - else - { - ivas_dirac_dec_compute_gain_factors( hSpatParamRendCom->num_freq_bands, - hSpatParamRendCom->diffuseness_vector[md_idx], - hDirACRend->h_output_synthesis_psd_params.max_band_decorr, - hDirACRend->h_output_synthesis_psd_state.direct_power_factor, - hDirACRend->h_output_synthesis_psd_state.diffuse_power_factor ); - - if ( coherence_flag ) - { - for ( i = 0; i < hSpatParamRendCom->num_freq_bands; i++ ) - { - surCohRatio[i] = hSpatParamRendCom->surroundingCoherence[md_idx][i]; - } - } - else - { - set_zero( surCohRatio, hSpatParamRendCom->num_freq_bands ); - } - } - - ivas_dirac_dec_compute_directional_responses( hSpatParamRendCom, - hDirACRend, - hMasaExtRend->hVBAPdata, - masa_band_mapping, - NULL, - azimuth, - elevation, - md_idx, - surCohRatio, - 0, - NULL, - 0 ); - - - for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ ) - { - index_slot = slot_idx_start + slot_idx; - md_idx = hSpatParamRendCom->render_to_md_map[subframe_idx]; - - /* CLDFB Analysis*/ - for ( ch = 0; ch < nchan_transport; ch++ ) - { - cldfbAnalysis_ts_ivas( &( output_f[ch][hSpatParamRendCom->num_freq_bands * index_slot] ), - Cldfb_RealBuffer[ch][0], - Cldfb_ImagBuffer[ch][0], - hSpatParamRendCom->num_freq_bands, - hMasaExtRend->cldfbAnaRend[ch] ); - } - - - if ( nchan_transport == 1 ) - { - /* Need to set second CLDFB channel to zero as further processing assumes CNA content in it */ - set_zero( Cldfb_RealBuffer[1][0], hSpatParamRendCom->num_freq_bands ); - set_zero( Cldfb_ImagBuffer[1][0], hSpatParamRendCom->num_freq_bands ); - } - - /*-----------------------------------------------------------------* - * prototype signal computation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - protoSignalComputation_shd( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f, - reference_power, slot_idx, nchan_transport, - hDirACRend->num_outputs_diff, - hSpatParamRendCom->num_freq_bands, - 0 ); - } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - 0, slot_idx, hSpatParamRendCom->num_freq_bands, hDirACRend->masa_stereo_type_detect ); - } - else - { - switch ( nchan_transport ) - { - case 2: - protoSignalComputation2( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - hDirACRend->hOutSetup.is_loudspeaker_setup, - slot_idx, - hSpatParamRendCom->num_freq_bands, - hDirACRend->masa_stereo_type_detect ); - break; - case 1: - protoSignalComputation1( Cldfb_RealBuffer, Cldfb_ImagBuffer, - hDirACRend->proto_frame_f, - hDirACRend->h_output_synthesis_psd_state.proto_direct_buffer_f, - reference_power, - hDirACRend->h_output_synthesis_psd_state.proto_power_smooth, - slot_idx, - hDirACRend->num_protos_diff, - hSpatParamRendCom->num_freq_bands ); - break; - default: - return; - } - } - - /*-----------------------------------------------------------------* - * frequency domain decorrelation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->proto_signal_decorr_on == 1 ) - { - /* decorrelate prototype frame */ - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - ivas_dirac_dec_decorr_process( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - hDirACRend->h_output_synthesis_psd_state.proto_diffuse_buffer_f + slot_idx * 2 * hSpatParamRendCom->num_freq_bands * hDirACRend->num_outputs_diff + 2 * hSpatParamRendCom->num_freq_bands * min( 4, nchan_transport ), - onset_filter, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); - - v_multc( onset_filter, 0.25f, onset_filter, hSpatParamRendCom->num_freq_bands ); - v_add( onset_filter, onset_filter_subframe, onset_filter_subframe, hSpatParamRendCom->num_freq_bands ); - p_onset_filter = onset_filter_subframe; - } - else - { - ivas_dirac_dec_decorr_process( hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - nchan_transport, - hDirACRend->proto_frame_f, - hDirACRend->num_protos_diff, - hDirACRend->proto_index_diff, - DirAC_mem.frame_dec_f, - onset_filter, - hDirACRend->h_freq_domain_decorr_ap_params, - hDirACRend->h_freq_domain_decorr_ap_state ); - - hDirACRend->proto_frame_dec_f = DirAC_mem.frame_dec_f; - p_onset_filter = onset_filter; - } - } - else - { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - set_f( onset_filter_subframe, 1.f, hSpatParamRendCom->num_freq_bands ); - p_onset_filter = onset_filter_subframe; - } - else - { - /* no frequency domain decorrelation: use prototype frame */ - hDirACRend->proto_frame_dec_f = hDirACRend->proto_frame_f; - p_onset_filter = NULL; - } - } - - /*-----------------------------------------------------------------* - * output synthesis - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) - { - /* Compute diffuse prototypes */ - ivas_dirac_dec_compute_diffuse_proto( hDirACRend, hSpatParamRendCom->num_freq_bands, slot_idx ); - } - - ivas_dirac_dec_output_synthesis_process_slot( reference_power, - p_onset_filter, - azimuth, - elevation, - hSpatParamRendCom->diffuseness_vector[md_idx], - hSpatParamRendCom, - hDirACRend, - 0, - 0, - hMasaExtRend->hVBAPdata, - hDirACRend->hOutSetup, - nchan_transport, - md_idx, - 0, - 0 ); - - if ( hDirACRend->synthesisConf != DIRAC_SYNTHESIS_GAIN_SHD ) - { - v_add( reference_power, reference_power_smooth, reference_power_smooth, hSpatParamRendCom->num_freq_bands ); - } - } - - ivas_dirac_dec_output_synthesis_get_interpolator( &hDirACRend->h_output_synthesis_psd_params, hSpatParamRendCom->subframe_nbslots[subframe_idx] ); - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( Cldfb_RealBuffer, - Cldfb_ImagBuffer, - hSpatParamRendCom, - hDirACRend, - nchan_transport, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - p_onset_filter, - diffuseness_vector, - 0, - 0 ); - } - else - { - ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( Cldfb_RealBuffer, - Cldfb_ImagBuffer, - hSpatParamRendCom, - hDirACRend, - hSpatParamRendCom->subframe_nbslots[subframe_idx], - diffuseness_vector, - reference_power_smooth, - 1.0f, - 0 ); - } - - /*-----------------------------------------------------------------* - * CLDFB synthesis (and binaural rendering) - *-----------------------------------------------------------------*/ - - index_slot = slot_idx_start_cldfb_synth; - - { - float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; - int16_t outchannels; - - idx_in = 0; - idx_lfe = 0; - - outchannels = hDirACRend->hOutSetup.nchan_out_woLFE + hDirACRend->hOutSetup.num_lfe; - - /* Note here that compared to decoder path, there is no separate channel ever for MASA ext rend path */ - - for ( ch = 0; ch < outchannels; ch++ ) - { - if ( ( hDirACRend->hOutSetup.num_lfe > 0 ) && ( hDirACRend->hOutSetup.index_lfe[idx_lfe] == ch ) ) - { - /* No LFE for MASA rendering */ - set_zero( &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->num_freq_bands ); - - if ( idx_lfe < ( hDirACRend->hOutSetup.num_lfe - 1 ) ) - { - idx_lfe++; - } - } - else - { - /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ - for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) - { - RealBuffer[i] = Cldfb_RealBuffer[idx_in][i]; - ImagBuffer[i] = Cldfb_ImagBuffer[idx_in][i]; - } - cldfbSynthesis_ivas( RealBuffer, ImagBuffer, &( output_f[ch][index_slot * hSpatParamRendCom->num_freq_bands] ), hSpatParamRendCom->num_freq_bands * hSpatParamRendCom->subframe_nbslots[subframe_idx], hMasaExtRend->cldfbSynRend[idx_in] ); - idx_in++; - } - } - } - hSpatParamRendCom->slots_rendered += hSpatParamRendCom->subframe_nbslots[subframe_idx]; - hSpatParamRendCom->subframes_rendered++; - - pop_wmops(); - - return; -} -#else static void ivas_masa_ext_dirac_render_sf_fx( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: IVAS decoder structure */ Word32 *output_f_fx[] /* i/o: synthesized core-coder transport channels/DirAC output q11*/ @@ -6530,47 +4214,8 @@ static void ivas_masa_ext_dirac_render_sf_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_ext_dirac_render( - MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ - float *output_f[], /* i/o: input/output signals in time domain */ - const int16_t num_subframes /* i : number of subframes to render */ -) -{ - int16_t subframe_idx; - float *output_f_local[MAX_OUTPUT_CHANNELS]; - int16_t n, n_samples_sf; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - hSpatParamRendCom = hMasaExtRend->hSpatParamRendCom; - - n_samples_sf = JBM_CLDFB_SLOTS_IN_SUBFRAME * hSpatParamRendCom->slot_size; - for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) - { - output_f_local[n] = output_f[n]; - } - - hSpatParamRendCom->subframes_rendered = hSpatParamRendCom->dirac_read_idx; - - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - hSpatParamRendCom->slots_rendered = 0; - ivas_masa_ext_dirac_render_sf( hMasaExtRend, output_f_local ); - for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) - { - output_f_local[n] += n_samples_sf; - } - - hSpatParamRendCom->dirac_read_idx = ( hSpatParamRendCom->dirac_read_idx + 1 ) % hSpatParamRendCom->dirac_md_buffer_length; - } - return; -} -#else void ivas_masa_ext_dirac_render_fx( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ Word32 *output_f[], /* i/o: input/output signals in time domain q11*/ @@ -6610,4 +4255,3 @@ void ivas_masa_ext_dirac_render_fx( return; } -#endif diff --git a/lib_rend/ivas_efap.c b/lib_rend/ivas_efap.c index 2871969ca..7d47f3174 100644 --- a/lib_rend/ivas_efap.c +++ b/lib_rend/ivas_efap.c @@ -41,47 +41,29 @@ #include "ivas_prot_rend.h" #include "ivas_stat_dec.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif - /*-----------------------------------------------------------------------* * Local constants *-----------------------------------------------------------------------*/ #define EFAP_MAX_SIZE_TMP_BUFF 30 -#define EFAP_MAX_GHOST_LS 5 /* Maximum number of ghost Loudspeakers, for memory allocation purpose */ -#ifndef IVAS_FLOAT_FIXED -#define POLY_THRESH 1e-4f -#else -#define POLY_THRESH_Q29 53687LL // Q29 -#define POLY_THRESH_Q28 26843 // Q28 -#endif -#ifdef IVAS_FLOAT_FIXED -#define Q22_1 4194304 -#define Q22_45_DEG 188743680 -#define Q22_90_DEG 377487360 -#define Q22_180_DEG 754974720 -#define Q22_360_DEG 1509949440 -#define Q22_120_DEG 503316480 -#define Q22_240_DEG 1006632960 -#endif +#define EFAP_MAX_GHOST_LS 5 /* Maximum number of ghost Loudspeakers, for memory allocation purpose */ +#define POLY_THRESH_Q29 53687LL // Q29 +#define POLY_THRESH_Q28 26843 // Q28 +#define Q22_1 4194304 +#define Q22_45_DEG 188743680 +#define Q22_90_DEG 377487360 +#define Q22_180_DEG 754974720 +#define Q22_360_DEG 1509949440 +#define Q22_120_DEG 503316480 +#define Q22_240_DEG 1006632960 /*-----------------------------------------------------------------------* * Local function prototypes *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error poly_init( EFAP *efap, const int16_t efip_flag ); -static ivas_error sphere_triangulation( const int16_t numSpk, EFAP_VERTEX_DATA *vtxData, EFAP_POLYSET_DATA *polyData, float ***dmTranspose, int16_t *numTot, const int16_t efip_flag ); -static void initial_polyeder( EFAP_VERTEX_DATA *vtxData, EFAP_LS_TRIANGLE *triArray, int16_t *numTri, int16_t *vtxInHull ); -static void add_ghost_speakers( EFAP_VERTEX *vertexArray, int16_t *numVtx, const int16_t efip_flag ); -static void add_vertex_to_convex_hull( const EFAP_VERTEX_DATA *vtxData, const int16_t vtxIdx, int16_t *vtxInHull, EFAP_LS_TRIANGLE *triArray, int16_t *szTri ); -static void sort_vertices( const EFAP_VERTEX *vertexArray, const int16_t *numVtx, int16_t *order ); -static void visible_edges( const EFAP_LS_TRIANGLE *triArray, const int16_t *visible, const int16_t numSurface, int16_t *numEdges, int16_t *edges ); -#else static ivas_error poly_init_fx( EFAP *efap, const Word16 efip_flag ); static ivas_error sphere_triangulation_fx( const Word16 numSpk, EFAP_VERTEX_DATA *vtxData, EFAP_POLYSET_DATA *polyData, Word32 ***dmTranspose /*q31*/, Word16 *numTot, const Word16 efip_flag ); static void initial_polyeder_fx( EFAP_VERTEX_DATA *vtxData, EFAP_LS_TRIANGLE *triArray, Word16 *numTri, Word16 *vtxInHull ); @@ -89,47 +71,23 @@ static void add_ghost_speakers_fx( EFAP_VERTEX *vertexArray, Word16 *numVtx, con static void add_vertex_to_convex_hull_fx( const EFAP_VERTEX_DATA *vtxData, const Word16 vtxIdx, Word16 *vtxInHull, EFAP_LS_TRIANGLE *triArray, Word16 *szTri ); static void sort_vertices_fx( const EFAP_VERTEX *vertexArray, const Word16 *numVtx, Word16 *order ); static void visible_edges_fx( const EFAP_LS_TRIANGLE *triArray, const Word16 *visible, const Word16 numSurface, Word16 *numEdges, Word16 *edges ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void flip_plane( const EFAP_VERTEX *vtxArray, int16_t *surface, const float centroid[3] ); -static void remap_ghosts( EFAP_VERTEX *vtxArray, EFAP_LS_TRIANGLE *triArray, int16_t numSpk, int16_t *numVertex, int16_t numTri, float **downmixMatrix ); -static void vertex_init( const float *aziSpk, const float *eleSpk, EFAP_VERTEX_DATA *efapVtxData ); -static void efap_panning( const float azi, const float ele, const EFAP_POLYSET_DATA *polyData, float *bufferL ); -static void get_poly_gains( const float azi, const float ele, const float aziPoly[EFAP_MAX_CHAN_NUM], const float elePoly[EFAP_MAX_CHAN_NUM], const int16_t numChan, float *buffer ); -static float get_tri_gain( const float A[2], const float B[2], const float C[2], const float P_minus_A[2] ); -#else static void flip_plane_fx( const EFAP_VERTEX *vtxArray, Word16 *surface, const Word32 centroid[3] /*q31*/ ); static void remap_ghosts_fx( EFAP_VERTEX *vtxArray, EFAP_LS_TRIANGLE *triArray, Word16 numSpk, Word16 *numVertex, Word16 numTri, Word32 **downmixMatrix /*q31*/ ); static void vertex_init_fx( const Word32 *aziSpk /*q22*/, const Word32 *eleSpk /*q22*/, EFAP_VERTEX_DATA *efapVtxData ); static void efap_panning_fx( const Word32 azi /*q22*/, const Word32 ele /*q22*/, const EFAP_POLYSET_DATA *polyData, Word32 *bufferL /*q31*/ ); static void get_poly_gains_fx( const Word32 azi /*q22*/, const Word32 ele /*q22*/, const Word32 aziPoly[EFAP_MAX_CHAN_NUM] /*q22*/, const Word32 elePoly[EFAP_MAX_CHAN_NUM] /*q22*/, const Word16 numChan, Word32 *buffer /*q31*/ ); static Word32 get_tri_gain_fx( const Word32 A[2] /*q22*/, const Word32 B[2] /*q22*/, const Word32 C[2] /*q22*/, const Word32 P_minus_A[2] /*q22*/ ); -#endif /*-----------------------------------------------------------------------* * EFAP Utils *-----------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void add_vertex( EFAP_VERTEX *vtxArray, const float azi, const float ele, const int16_t pos, const EFAP_VTX_DMX_TYPE ); -static void efap_sort_s( int16_t *x, int16_t *idx, const int16_t len ); -#else static void add_vertex_fx( EFAP_VERTEX *vtxArray, const Word32 azi /*q22*/, const Word32 ele /*q22*/, const Word16 pos, const EFAP_VTX_DMX_TYPE ); static void efap_sort_s_fx( Word16 *x, Word16 *idx, const Word16 len ); -#endif - - -#ifndef IVAS_FLOAT_FIXED -static float vertex_distance( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE tri, const int16_t vtxIdx ); -static float point_plane_distance( const float P1[3], const float P2[3], const float P3[3], const float X[3] ); -static float point_poly_distance( const EFAP_POLYSET poly, const float X[3] ); -static void efap_crossp( const float *v1, const float *v2, float *v ); -static int16_t find_int_in_tri( const EFAP_LS_TRIANGLE *tri, const int16_t n, const int16_t r, int16_t *pos ); -static void remove_vertex( EFAP_VERTEX *vtxArray, const int16_t idx, const int16_t L ); -static int16_t get_neighbours( const EFAP_LS_TRIANGLE *triArray, const int16_t vtxIdx, const int16_t numTri, int16_t *neighbours ); -#else + + static Word32 vertex_distance_fx( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE tri, const Word16 vtxIdx ); static Word32 point_plane_distance_fx( const Word32 P1[3] /*q31*/, const Word32 P2[3] /*q31*/, const Word32 P3[3] /*q31*/, const Word32 X[3] /*q31*/ ); static Word32 point_poly_distance_fx( const EFAP_POLYSET poly, const Word32 X[3] /*q31*/ ); @@ -137,41 +95,22 @@ static void efap_crossp_fx( const Word32 *v1 /*q30*/, const Word32 *v2 /*q30*/, static Word16 find_int_in_tri_fx( const EFAP_LS_TRIANGLE *tri, const Word16 n, const Word16 r, Word16 *pos ); static void remove_vertex_fx( EFAP_VERTEX *vtxArray, const Word16 idx, const Word16 L ); static Word16 get_neighbours_fx( const EFAP_LS_TRIANGLE *triArray, const Word16 vtxIdx, const Word16 numTri, Word16 *neighbours ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void matrix_times_row( float mat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF], const float *vec, const int16_t L, float *out ); -static void tri_to_poly( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, const int16_t numVtx, const int16_t numTri, int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM], int16_t *outLengthPS, int16_t outLengthSorted[EFAP_MAX_POLY_SET] ); -static int16_t compare_poly( int16_t *old, int16_t lenOld, int16_t *new, int16_t lenNew ); -#else static void matrix_times_row_fx( Word32 mat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF] /*q31*/, const Word32 *vec /*q31*/, const Word16 L, Word32 *out /*q31*/ ); static void tri_to_poly_fx( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, const Word16 numVtx, const Word16 numTri, Word16 sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM], Word16 *outLengthPS, Word16 outLengthSorted[EFAP_MAX_POLY_SET] ); static Word16 compare_poly_fx( Word16 *old, Word16 lenOld, Word16 *new, Word16 lenNew ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void sort_channels_vertex( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, int16_t channels[EFAP_MAX_CHAN_NUM], const int16_t lengthChannels, int16_t idxTri ); -static float efap_fmodf( const float x, const float y ); -static int16_t get_poly_num( const float P[2], const EFAP_POLYSET_DATA *polyData ); -static int16_t in_poly( const float P[2], const EFAP_POLYSET poly ); -static int16_t in_tri( float A[2], float B[2], float C[2], float P_minus_A[2] ); -static void sph2cart( const float azi, const float ele, float *pos ); -#else static void sort_channels_vertex_fx( const EFAP_VERTEX *vtxArray, const EFAP_LS_TRIANGLE *triArray, Word16 channels[EFAP_MAX_CHAN_NUM], const Word16 lengthChannels, Word16 idxTri ); static Word32 efap_32mod32( const Word32 x /*q22*/, const Word32 y /*q22*/ ); static Word16 get_poly_num_fx( const Word32 P[2] /*q22*/, const EFAP_POLYSET_DATA *polyData ); static Word16 in_poly_fx( const Word32 P[2] /*q22*/, const EFAP_POLYSET poly ); static Word16 in_tri_fx( Word32 A[2] /*q22*/, Word32 B[2] /*q22*/, Word32 C[2] /*q22*/, Word32 P_minus_A[2] /*q22*/ ); static void sph2cart_fx( const Word32 azi /*q22*/, const Word32 ele /*q22*/, Word32 *pos /*q31*/ ); -#endif /*-----------------------------------------------------------------------* * Global function definitions *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* * efap_init_data_fx() * @@ -266,100 +205,7 @@ ivas_error efap_init_data_fx( *hEFAPdata = efap; return error; } -#else -/*-------------------------------------------------------------------------* - * efap_init_data() - * - * Wrap the internal functions to initialize the EFAP data structure - *-------------------------------------------------------------------------*/ -ivas_error efap_init_data( - EFAP_HANDLE *hEFAPdata, /* i/o: handle for EFAP data structure that will be initialized */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ - const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ -) -{ - /* Handle instance declaration */ - EFAP *efap; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Basic init checks */ - if ( !speaker_node_azi_deg || !speaker_node_ele_deg ) - { - hEFAPdata = NULL; - return IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "EFAP requires arrays of speaker azimuths and elevations" ); - } - - /*-----------------------------------------------------------------* - * Allocate memory - *-----------------------------------------------------------------*/ - - /* Memory Allocations for efap */ - if ( ( efap = (EFAP *) malloc( sizeof( EFAP ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP handle\n" ) ); - } - - /* Memory Allocation and update for aziSpk & eleSpk arrays*/ - if ( ( efap->aziSpk = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker azimuths\n" ) ); - } - if ( ( efap->eleSpk = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP speaker elevations\n" ) ); - } - - /* Memory Allocation for vertexArray */ - if ( ( efap->vtxData.vertexArray = (EFAP_VERTEX *) malloc( ( num_speaker_nodes + EFAP_MAX_GHOST_LS ) * sizeof( EFAP_VERTEX ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Array\n" ) ); - } - - /* Memory allocation for the tmp buffer short */ - if ( ( efap->bufferShort = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferS\n" ) ); - } - - /*-----------------------------------------------------------------* - * Initialize values - *-----------------------------------------------------------------*/ - - efap->numSpk = num_speaker_nodes; - - /* The number of vertex is first set to the number of LS but will evolve further */ - efap->vtxData.numVtx = num_speaker_nodes; - - /* Loudspeaker configuration */ - mvr2r( speaker_node_azi_deg, efap->aziSpk, num_speaker_nodes ); - mvr2r( speaker_node_ele_deg, efap->eleSpk, num_speaker_nodes ); - - /* Initialization of the vertex */ - vertex_init( efap->aziSpk, efap->eleSpk, &efap->vtxData ); - - /* Initialization of polygons and ghost LS */ - if ( ( error = poly_init( efap, efap_mode ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Memory allocation for the tmp buffer long */ - if ( ( efap->bufferLong = (float *) malloc( efap->vtxData.numVtx * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP bufferL\n" ) ); - } - - *hEFAPdata = efap; - return error; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------------* * efap_determine_gains_fx() * @@ -452,82 +298,6 @@ void efap_determine_gains_fx( return; } -#else -/*-------------------------------------------------------------------------* - * efap_determine_gains() - * - * Obtain amplitude panning gains for all speaker nodes based on the - * given direction - *-------------------------------------------------------------------------*/ -void efap_determine_gains( - EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - float *gains, /* o : gain vector for speaker nodes for given direction */ - const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ - const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ - const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ -) -{ - int16_t i, j; - float azi_wrap, ele_wrap; - float normBuffer; - - /* Resetting bufferShort and bufferLong */ - set_zero( hEFAPdata->bufferShort, hEFAPdata->numSpk ); - set_zero( hEFAPdata->bufferLong, hEFAPdata->vtxData.numVtx ); - - /* Wrap angles to correct range */ - panning_wrap_angles( azi_deg, ele_deg, &azi_wrap, &ele_wrap ); - - /* Panning */ - efap_panning( azi_wrap, ele_wrap, &hEFAPdata->polyData, hEFAPdata->bufferLong ); - - if ( efap_mode == EFAP_MODE_EFAP ) - { - normBuffer = 0.f; - for ( j = 0; j < hEFAPdata->numSpk; ++j ) - { - hEFAPdata->bufferShort[j] = 0.f; - /* Multiplying by the downmixMatrix */ - for ( i = 0; i < hEFAPdata->vtxData.numVtx; ++i ) - { - hEFAPdata->bufferShort[j] += hEFAPdata->bufferLong[i] * hEFAPdata->dmTranspose[i][j]; - } - normBuffer = normBuffer + hEFAPdata->bufferShort[j] * hEFAPdata->bufferShort[j]; - } - normBuffer = inv_sqrt( normBuffer ); - - for ( j = 0; j < hEFAPdata->numSpk; ++j ) - { - hEFAPdata->bufferShort[j] *= normBuffer; - } - } - else - { - normBuffer = 0.f; - for ( j = 0; j < hEFAPdata->numSpk; ++j ) - { - hEFAPdata->bufferShort[j] = 0.f; - /* Multiplying by the downmixMatrix */ - for ( i = 0; i < hEFAPdata->vtxData.numVtx; ++i ) - { - hEFAPdata->bufferShort[j] += hEFAPdata->bufferLong[i] * hEFAPdata->dmTranspose[i][j]; - } - normBuffer = normBuffer + hEFAPdata->bufferShort[j]; - } - normBuffer = 1.f / normBuffer; - - for ( j = 0; j < hEFAPdata->numSpk; ++j ) - { - hEFAPdata->bufferShort[j] = sqrtf( hEFAPdata->bufferShort[j] * normBuffer ); - } - } - - /* Copy gains to output */ - mvr2r( hEFAPdata->bufferShort, gains, hEFAPdata->numSpk ); - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -536,7 +306,6 @@ void efap_determine_gains( * Wrapper to free EFAP data structure *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void efap_free_data_fx( EFAP_HANDLE *hEFAPdata /* i/o: EFAP handle to be freed */ ) @@ -586,55 +355,6 @@ void efap_free_data_fx( return; } -#else -void efap_free_data( - EFAP_HANDLE *hEFAPdata /* i/o: EFAP handle to be freed */ -) -{ - Word16 i, dim1; - void **p_dmTranspose; - - IF( hEFAPdata == NULL || *hEFAPdata == NULL ) - { - return; - } - - dim1 = ( *hEFAPdata )->numTot; - - /* instance buffer members */ - free( ( *hEFAPdata )->aziSpk ); - ( *hEFAPdata )->aziSpk = NULL; - - free( ( *hEFAPdata )->eleSpk ); - ( *hEFAPdata )->eleSpk = NULL; - - free( ( *hEFAPdata )->vtxData.vertexArray ); - ( *hEFAPdata )->vtxData.vertexArray = NULL; - - free( ( *hEFAPdata )->vtxData.vtxOrder ); - ( *hEFAPdata )->vtxData.vtxOrder = NULL; - - free( ( *hEFAPdata )->bufferLong ); - ( *hEFAPdata )->bufferLong = NULL; - - free( ( *hEFAPdata )->bufferShort ); - ( *hEFAPdata )->bufferShort = NULL; - - p_dmTranspose = (void **) ( *hEFAPdata )->dmTranspose; - - FOR( i = 0; i < dim1; i++ ) - { - free( p_dmTranspose[i] ); - } - free( p_dmTranspose ); - - /* instance */ - free( *hEFAPdata ); - *hEFAPdata = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -649,7 +369,6 @@ void efap_free_data( * the different polygons and to add the ghost speakers *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error poly_init_fx( EFAP *efap, /* i/o: A pointer to a handle to efap instance */ const Word16 efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ @@ -766,104 +485,6 @@ static ivas_error poly_init_fx( return error; } -#else -static ivas_error poly_init( - EFAP *efap, /* i/o: A pointer to a handle to efap instance */ - const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ -) -{ - int16_t n, m, j; - int16_t finalLength, lengthTri2PolyPS; - int16_t lengthTri2PolySorted[EFAP_MAX_POLY_SET]; - int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM]; - float tmpMax, tmpMin; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Safety Check */ - assert( efap != NULL && "EFAP: efap == NULL" ); - - for ( n = 0; n < EFAP_MAX_POLY_SET; n++ ) - { - set_s( sortedChan[n], 0, EFAP_MAX_CHAN_NUM ); - } - - /* Computing the different ghost vertex, the downmix matrix and the triangle array */ - if ( ( error = sphere_triangulation( efap->numSpk, &efap->vtxData, &efap->polyData, &efap->dmTranspose, &efap->numTot, efip_flag ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* set isNaN for ghost loudspeakers */ - for ( n = 0; n < efap->vtxData.numVtx; ++n ) - { - if ( efap->vtxData.vertexArray[n].ele > 90.0 - 1e-6 || - efap->vtxData.vertexArray[n].ele < 1e-6 - 90.0 ) - { - efap->vtxData.vertexArray[n].isNaN = 1; - } - } - - /* Converting the triangle to polygon structure */ - tri_to_poly( efap->vtxData.vertexArray, efap->polyData.triArray, efap->vtxData.numVtx, efap->polyData.numTri, sortedChan, &lengthTri2PolyPS, lengthTri2PolySorted ); - - /* Completing the polyData Structure */ - finalLength = -1; - - for ( n = 0; n < lengthTri2PolyPS; ++n ) - { - m = finalLength + 1; - - /* Complete the fields of the polygon */ - for ( j = 0; j < lengthTri2PolySorted[n]; ++j ) - { - efap->polyData.polysetArray[m].chan[j] = sortedChan[n][j]; - efap->polyData.polysetArray[m].polyAzi[j] = efap->vtxData.vertexArray[sortedChan[n][j]].azi; - efap->polyData.polysetArray[m].polyEle[j] = efap->vtxData.vertexArray[sortedChan[n][j]].ele; - efap->polyData.polysetArray[m].isNaN[j] = efap->vtxData.vertexArray[sortedChan[n][j]].isNaN; - } - - efap->polyData.polysetArray[m].numChan = lengthTri2PolySorted[n]; - - /* In case tmpMax - tmpMin > 180, wrap polygon azimuth */ - maximum( efap->polyData.polysetArray[m].polyAzi, lengthTri2PolySorted[n], &tmpMax ); - minimum( efap->polyData.polysetArray[m].polyAzi, lengthTri2PolySorted[n], &tmpMin ); - - if ( ( tmpMax - tmpMin ) > 180 ) - { - for ( j = 0; j < lengthTri2PolySorted[n]; ++j ) - { - assert( ( m + 2 < EFAP_MAX_POLY_SET ) && "EFAP: maximum polygons exceeded!" ); - - /* add two new polygons with azimuths wrapped to differing bounds */ - efap->polyData.polysetArray[m + 1].polyAzi[j] = efap_fmodf( efap->polyData.polysetArray[m].polyAzi[j], 360 ); - efap->polyData.polysetArray[m + 2].polyAzi[j] = efap->polyData.polysetArray[m + 1].polyAzi[j] - 360; - - /* Copy the rest of the fields */ - efap->polyData.polysetArray[m + 1].chan[j] = efap->polyData.polysetArray[m].chan[j]; - efap->polyData.polysetArray[m + 1].polyEle[j] = efap->polyData.polysetArray[m].polyEle[j]; - efap->polyData.polysetArray[m + 1].isNaN[j] = efap->polyData.polysetArray[m].isNaN[j]; - efap->polyData.polysetArray[m + 1].numChan = lengthTri2PolySorted[n]; - - efap->polyData.polysetArray[m + 2].chan[j] = efap->polyData.polysetArray[m].chan[j]; - efap->polyData.polysetArray[m + 2].polyEle[j] = efap->polyData.polysetArray[m].polyEle[j]; - efap->polyData.polysetArray[m + 2].isNaN[j] = efap->polyData.polysetArray[m].isNaN[j]; - efap->polyData.polysetArray[m + 2].numChan = lengthTri2PolySorted[n]; - } - finalLength += 2; - } - ++finalLength; - } - ++finalLength; - - /* Updating the number of polygons */ - efap->polyData.numPoly = finalLength; - - - return error; -} -#endif /*-------------------------------------------------------------------------* @@ -872,7 +493,6 @@ static ivas_error poly_init( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error sphere_triangulation_fx( const Word16 numSpk, /* i : Number of speakers */ EFAP_VERTEX_DATA *vtxData, /* i/o: Vertex data structure */ @@ -932,215 +552,33 @@ remap_ghosts_fx( vtxData->vertexArray, polyData->triArray, numSpk, &vtxData->num return IVAS_ERR_OK; } -#else -static ivas_error sphere_triangulation( - const int16_t numSpk, /* i : Number of speakers */ - EFAP_VERTEX_DATA *vtxData, /* i/o: Vertex data structure */ - EFAP_POLYSET_DATA *polyData, /* o : Polygon data structure */ - float ***dmTranspose, /* o : Transpose of the downmix matrix */ - int16_t *numTot, /* o : Number of speakers (real + ghost) */ - const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ -) -{ - int16_t i; - void **p_dmTranspose; - int16_t vtxInHull[EFAP_MAX_SIZE_TMP_BUFF]; - set_s( vtxInHull, 0, EFAP_MAX_SIZE_TMP_BUFF ); - /* Add Imaginary Speakers */ - add_ghost_speakers( vtxData->vertexArray, &vtxData->numVtx, efip_flag ); +/*-------------------------------------------------------------------------* + * initial_polyeder() + * + * + *-------------------------------------------------------------------------*/ - /* Sort the vertices according to their index */ - if ( ( vtxData->vtxOrder = (int16_t *) malloc( vtxData->numVtx * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for EFAP Vertex Order\n" ) ); - } - sort_vertices( vtxData->vertexArray, &vtxData->numVtx, vtxData->vtxOrder ); +static void initial_polyeder_fx( + EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ + EFAP_LS_TRIANGLE *triArray, /* o : Triangle array structure */ + Word16 *numTri, /* o : Size of triangle array */ + Word16 *vtxInHull /* o : Flag if the vertex was added to the inital simplex */ +) +{ + Word16 i; + Word16 numVtx; + Word16 tmpSurface[3]; + Word16 tetrahedron[4]; + Word32 tmp; + Word32 centroid[3]; + Word32 tmpCross[3]; + Word32 tmp1[3], tmp2[3], tmp3[3]; - /* Computing the initial Polyeder */ - initial_polyeder( vtxData, polyData->triArray, &polyData->numTri, &vtxInHull[0] ); - - /* Add the vertex to the convex hull */ - for ( i = 0; i < vtxData->numVtx; ++i ) - { - add_vertex_to_convex_hull( vtxData, vtxData->vtxOrder[i], &vtxInHull[0], polyData->triArray, &polyData->numTri ); - } - - assert( polyData->numTri != 0 && "EFAP: failed to construct convex hull!" ); - - /* Allocate the DM matrix transpose */ - if ( ( p_dmTranspose = malloc( vtxData->numVtx * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); - } - - /* Store the value of numVtx to be used for freeing later (numVtx will change after remap_ghosts() ) */ - *numTot = vtxData->numVtx; - - for ( i = 0; i < vtxData->numVtx; i++ ) - { - if ( ( p_dmTranspose[i] = malloc( numSpk * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "EFAP: can not allocate memory for dmTranspose\n" ) ); - } - } - *dmTranspose = (float **) p_dmTranspose; - - /* Remap Ghosts */ - remap_ghosts( vtxData->vertexArray, polyData->triArray, numSpk, &vtxData->numVtx, polyData->numTri, *dmTranspose ); - - return IVAS_ERR_OK; -} -#endif - - -/*-------------------------------------------------------------------------* - * initial_polyeder() - * - * - *-------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void initial_polyeder( - EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ - EFAP_LS_TRIANGLE *triArray, /* o : Triangle array structure */ - int16_t *numTri, /* o : Size of triangle array */ - int16_t *vtxInHull /* o : Flag if the vertex was added to the inital simplex */ -) -{ - int16_t i; - int16_t numVtx; - int16_t tmpSurface[3]; - int16_t tetrahedron[4]; - float tmp; - float centroid[3]; - float tmpCross[3]; - float tmp1[3], tmp2[3], tmp3[3]; - - /* Safety check */ - assert( triArray != NULL && "EFAP: triArray==NULL" ); - - /* initialize variables */ - set_s( tmpSurface, -1, 3 ); - set_zero( centroid, 3 ); - set_zero( tmp1, 3 ); - set_zero( tmp2, 3 ); - set_zero( tmp3, 3 ); - set_zero( tmpCross, 3 ); - - numVtx = vtxData->numVtx; - - /* seed vertices */ - for ( i = 0; i < 4; i++ ) - { - tetrahedron[i] = i; - } - - /* 1. attempt to create an edge with nonzero length */ - while ( ( vtxData->vertexArray[tetrahedron[0]].azi == vtxData->vertexArray[tetrahedron[1]].azi ) && - ( vtxData->vertexArray[tetrahedron[0]].ele == vtxData->vertexArray[tetrahedron[1]].ele ) ) - { - tetrahedron[1]++; - assert( tetrahedron[1] < numVtx && "EFAP: convex hull construction failed, vertices are coincident!" ); - } - - /* 2. attempt to create a triangle with nonzero area */ - tmp = 0.0f; - v_sub( vtxData->vertexArray[tetrahedron[1]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp1, 3 ); - while ( tetrahedron[2] < numVtx ) - { - v_sub( vtxData->vertexArray[tetrahedron[2]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp2, 3 ); - efap_crossp( tmp1, tmp2, tmpCross ); - for ( i = 0; i < 3; i++ ) - { - tmp += tmpCross[i] * tmpCross[i]; - } - if ( fabsf( tmp ) > ( POLY_THRESH * POLY_THRESH ) ) /* compare tmp against POLY_THRESH^2 instead of sqrtf(tmp) */ - { - break; - } - tetrahedron[2]++; - } - assert( tetrahedron[2] < numVtx && "EFAP: convex hull construction failed, vertices are colinear!" ); - - /* 3. attempt to create a tetrahedron with nonzero volume */ - tmp = 0.0f; - while ( tetrahedron[3] < numVtx ) - { - v_sub( vtxData->vertexArray[tetrahedron[3]].pos, vtxData->vertexArray[tetrahedron[0]].pos, tmp3, 3 ); - tmp = dotp( tmp3, tmpCross, 3 ); - if ( fabsf( tmp ) > POLY_THRESH ) - { - break; - } - tetrahedron[3]++; - } - assert( tetrahedron[3] < numVtx && "EFAP: convex hull construction failed, vertices are coplanar!" ); - - /* 4. compute the centroid of the initial tetrahedron */ - for ( i = 0; i < 4; i++ ) - { - vtxInHull[tetrahedron[i]] = 1; /* set vertex as added to hull*/ - centroid[0] += vtxData->vertexArray[tetrahedron[i]].pos[0]; - centroid[1] += vtxData->vertexArray[tetrahedron[i]].pos[1]; - centroid[2] += vtxData->vertexArray[tetrahedron[i]].pos[2]; - } - - centroid[0] /= 4; - centroid[1] /= 4; - centroid[2] /= 4; - - /* 5. create and orient planes */ - tmpSurface[0] = tetrahedron[0]; - tmpSurface[1] = tetrahedron[1]; - tmpSurface[2] = tetrahedron[2]; - flip_plane( vtxData->vertexArray, tmpSurface, centroid ); - mvs2s( tmpSurface, triArray[0].LS, 3 ); - - tmpSurface[0] = tetrahedron[0]; - tmpSurface[1] = tetrahedron[1]; - tmpSurface[2] = tetrahedron[3]; - flip_plane( vtxData->vertexArray, tmpSurface, centroid ); - mvs2s( tmpSurface, triArray[1].LS, 3 ); - - tmpSurface[0] = tetrahedron[0]; - tmpSurface[1] = tetrahedron[2]; - tmpSurface[2] = tetrahedron[3]; - flip_plane( vtxData->vertexArray, tmpSurface, centroid ); - mvs2s( tmpSurface, triArray[2].LS, 3 ); - - tmpSurface[0] = tetrahedron[1]; - tmpSurface[1] = tetrahedron[2]; - tmpSurface[2] = tetrahedron[3]; - flip_plane( vtxData->vertexArray, tmpSurface, centroid ); - mvs2s( tmpSurface, triArray[3].LS, 3 ); - - /* set numTri */ - *numTri = 4; - - return; -} -#else -static void initial_polyeder_fx( - EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ - EFAP_LS_TRIANGLE *triArray, /* o : Triangle array structure */ - Word16 *numTri, /* o : Size of triangle array */ - Word16 *vtxInHull /* o : Flag if the vertex was added to the inital simplex */ -) -{ - Word16 i; - Word16 numVtx; - Word16 tmpSurface[3]; - Word16 tetrahedron[4]; - Word32 tmp; - Word32 centroid[3]; - Word32 tmpCross[3]; - Word32 tmp1[3], tmp2[3], tmp3[3]; - - /* Safety check */ - assert( triArray != NULL && "EFAP: triArray==NULL" ); + /* Safety check */ + assert( triArray != NULL && "EFAP: triArray==NULL" ); /* initialize variables */ set16_fx( tmpSurface, -1, 3 ); @@ -1269,173 +707,8 @@ static void initial_polyeder_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * add_ghost_speakers() - * - * - *-------------------------------------------------------------------------*/ - -static void add_ghost_speakers( - EFAP_VERTEX *vertexArray, /* i/o: Vertex array */ - int16_t *numVtx, /* i/o: Size of vertex array */ - const int16_t efip_flag /* i : flag to indicate whether initialization is for EFIP (used for ALLRAD) */ -) -{ - int16_t numVertex; - int16_t lengthVertGhst; /* Nb of vertical ghost added */ - int16_t lengthHorGhst; /* Nb of Horizontal Ghost */ - int16_t i, j, k, a; /* Integer for loops */ - int16_t num_new; /* Number of new vertices to add */ - float maxAngle; /* Max azimuth tolerance for extend the LS setup horizontaly */ - float newDiff; /* Angle differences that will help us set the extended LS setup */ - float newAzi; /* New azimuth for the new horizontal LS */ - float ele[EFAP_MAX_SIZE_TMP_BUFF]; - float tmpEle; - float tmpAzi[EFAP_MAX_SIZE_TMP_BUFF]; - float tmpAngleDiff[EFAP_MAX_SIZE_TMP_BUFF]; /* tmp array of angles differences */ - float sectors[EFAP_MAX_SIZE_TMP_BUFF]; /* Help us determine the zone where we should extend LS */ - EFAP_VTX_DMX_TYPE vtxDmxType; - - vtxDmxType = EFAP_DMX_INTENSITY; - numVertex = *numVtx; - maxAngle = 1.f / 160.0f; - - /* Extracting Azi and Ele for computation purposes */ - for ( i = 0; i < numVertex; ++i ) - { - ele[i] = vertexArray[i].ele; - } - - /* ADD VOG IF NECESSERAY (i.e. if the elevation of the highest LS is < 90 deg) */ - a = 0; - maximum( ele, numVertex, &tmpEle ); - - lengthVertGhst = 0; - if ( tmpEle < 90.0f ) - { - if ( efip_flag ) - { - if ( tmpEle > 45.0f ) - { - vtxDmxType = EFAP_DMX_NONE; - } - else - { - vtxDmxType = EFAP_DMX_AMPLITUDE; - } - } - add_vertex( vertexArray, 0, 90, numVertex + a, vtxDmxType ); - ++lengthVertGhst; - ++a; - } - - /* ADD VOH IF NECESSERAY (i.e. if the elevation of the lowest LS is > -90 deg) */ - minimum( ele, numVertex, &tmpEle ); - if ( tmpEle > -90.0f ) - { - if ( efip_flag ) - { - if ( tmpEle < -45.0f ) - { - vtxDmxType = EFAP_DMX_NONE; - } - else - { - vtxDmxType = EFAP_DMX_AMPLITUDE; - } - } - - add_vertex( vertexArray, 0, -90, numVertex + a, vtxDmxType ); - - ++lengthVertGhst; - ++a; - } - - /* LIST ALL SURROUNDING loudspeakers */ - k = 0; - - for ( i = 0; i < numVertex; ++i ) - { - if ( fabsf( vertexArray[i].ele ) < 45.0f ) - { - tmpAzi[k] = vertexArray[i].azi; - ++k; - } - } - - lengthHorGhst = 0; - if ( k == 0 ) /* no speakers found: add a triangle of ghost speakers */ - { - add_vertex( vertexArray, 0, 0, numVertex + a, EFAP_DMX_INTENSITY ); - add_vertex( vertexArray, 120, 0, numVertex + a + 1, EFAP_DMX_INTENSITY ); - add_vertex( vertexArray, 240, 0, numVertex + a + 2, EFAP_DMX_INTENSITY ); - a += 3; - lengthHorGhst += 3; - } - else if ( k == 1 ) /* only one speaker found: add two ghost speakers to complete a triangle */ - { - add_vertex( vertexArray, tmpAzi[0] + 120, 0, numVertex + a, EFAP_DMX_INTENSITY ); - add_vertex( vertexArray, tmpAzi[0] + 240, 0, numVertex + a + 1, EFAP_DMX_INTENSITY ); - a += 2; - lengthHorGhst += 2; - } - else /* fill gaps greater than maxAngle */ - { - /* Here, k correspond to the number of LS whose ele is < 45 deg, should be = numVertex */ - v_sort_float( tmpAzi, 0, k - 1 ); - - /* The next lines correspond to angle_diff = [azi(2:end), azi(1) + 360] - azi; in Matlab */ - for ( i = 0; i < k - 1; ++i ) - { - tmpAngleDiff[i] = tmpAzi[i + 1] - tmpAzi[i]; - sectors[i] = ceilf( tmpAngleDiff[i] * maxAngle ); - - if ( sectors[i] > 1 ) - { - ++lengthHorGhst; - } - } - tmpAngleDiff[k - 1] = tmpAzi[0] + 360 - tmpAzi[k - 1]; - - sectors[k - 1] = ceilf( tmpAngleDiff[k - 1] * maxAngle ); - - if ( sectors[k - 1] > 1 ) - { - ++lengthHorGhst; - } - - /* Adding new virtual speakers */ - for ( i = 0; i < k; ++i ) - { - if ( sectors[i] > 1 ) - { - newDiff = tmpAngleDiff[i] / sectors[i]; - num_new = (int16_t) ( sectors[i] - 1.0f ); - - for ( j = 0; j < num_new; ++j ) - { - newAzi = tmpAzi[i] + ( j + 1 ) * newDiff; - - add_vertex( vertexArray, newAzi, 0, numVertex + a, EFAP_DMX_INTENSITY ); - ++a; - - if ( j > 0 ) - { - ++lengthHorGhst; - } - } - } - } - } - *numVtx = numVertex + lengthHorGhst + lengthVertGhst; - - return; -} -#else /*-------------------------------------------------------------------------* * add_ghost_speakers_fx() * @@ -1616,8 +889,6 @@ static void add_ghost_speakers_fx( return; } -#endif - /*-------------------------------------------------------------------------* * sort_vertices() @@ -1625,7 +896,6 @@ static void add_ghost_speakers_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void sort_vertices_fx( const EFAP_VERTEX *vertexArray, /* i : Vertex array */ const Word16 *numVtx, /* i : Size of vertex array */ @@ -1647,126 +917,7 @@ static void sort_vertices_fx( return; } -#else -static void sort_vertices( - const EFAP_VERTEX *vertexArray, /* i : Vertex array */ - const int16_t *numVtx, /* i : Size of vertex array */ - int16_t *order /* o : Original index positions */ -) -{ - int16_t tmpIdx[EFAP_MAX_SIZE_TMP_BUFF]; - int16_t i; - /* Initializing tmpIdx */ - for ( i = 0; i < *numVtx; ++i ) - { - tmpIdx[i] = vertexArray[i].idx; - } - - /* Sorting indexes */ - efap_sort_s( tmpIdx, order, *numVtx ); - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * add_vertex_to_convex_hull() - * - * - *-------------------------------------------------------------------------*/ - -static void add_vertex_to_convex_hull( - const EFAP_VERTEX_DATA *vtxData, /* i : Vertex data structure */ - const int16_t vtxIdx, /* i : Vertex to be added to the hull */ - int16_t *vtxInHull, /* i/o: Array indicating whether the vertex is part of the hull */ - EFAP_LS_TRIANGLE *triArray, /* i/o: Triangle array */ - int16_t *szTri /* i/o: Size of Triangle array */ -) -{ - int16_t i, k, l; - int16_t visible[EFAP_MAX_SIZE_TMP_BUFF]; - int16_t edges[EFAP_MAX_SIZE_TMP_BUFF]; - int16_t numEdges[1]; - int16_t surface[3]; - float numHullVtx; - float centroid[3]; - const float threshold = -1e-6f; - float tmpDist; - EFAP_LS_TRIANGLE triArrayNew[EFAP_MAX_POLY_SET]; - - /* If the vertex is already part of the hull, nothing must be done */ - if ( vtxInHull[vtxIdx] ) - { - return; - } - - /* Compute the centroid of the current convex hull */ - numHullVtx = 0; - set_zero( centroid, 3 ); - for ( i = 0; i < vtxData->numVtx; i++ ) - { - if ( vtxInHull[i] ) - { - numHullVtx++; - centroid[0] += vtxData->vertexArray[i].pos[0]; - centroid[1] += vtxData->vertexArray[i].pos[1]; - centroid[2] += vtxData->vertexArray[i].pos[2]; - } - } - numHullVtx = 1.0f / numHullVtx; - - centroid[0] *= numHullVtx; - centroid[1] *= numHullVtx; - centroid[2] *= numHullVtx; - - /* Processing */ - k = 0; - l = 0; - - for ( i = 0; i < *szTri; ++i ) - { - tmpDist = vertex_distance( vtxData->vertexArray, triArray[i], vtxIdx ); - - if ( tmpDist > threshold ) - { - visible[k] = i; - ++k; - } - else - { - mvs2s( triArray[i].LS, triArrayNew[l].LS, 3 ); - ++l; - } - } - - visible_edges( triArray, visible, k, numEdges, edges ); - - for ( i = 0; i < numEdges[0]; i += 2 ) - { - surface[0] = edges[i]; - surface[1] = edges[i + 1]; - surface[2] = vtxIdx; - flip_plane( vtxData->vertexArray, surface, centroid ); - - mvs2s( surface, triArrayNew[l].LS, 3 ); - ++l; - } - - /* Outputs */ - for ( i = 0; i < l; i++ ) - { - mvs2s( triArrayNew[i].LS, triArray[i].LS, 3 ); - } - *szTri = l; - - /* Flag the vertex as added to the hull */ - vtxInHull[vtxIdx] = 1; - return; -} -#else /*-------------------------------------------------------------------------* * add_vertex_to_convex_hull_fx() * @@ -1888,8 +1039,6 @@ static void add_vertex_to_convex_hull_fx( move16(); return; } -#endif - /*-------------------------------------------------------------------------* * visible_edges() @@ -1897,7 +1046,6 @@ static void add_vertex_to_convex_hull_fx( * *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void visible_edges_fx( const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ const Word16 *visible, /* i : Visible surface flag */ @@ -1994,130 +1142,13 @@ static void visible_edges_fx( return; } -#else -static void visible_edges( - const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ - const int16_t *visible, /* i : Visible surface flag */ - const int16_t numSurface, /* i : Number of surfaces */ - int16_t *numEdges, /* i/o: Number of edges */ - int16_t *edges /* i/o: Array of edges */ -) -{ - int16_t maxVertex; - int16_t i, j, k; - int16_t a, b; - int16_t tmpSurface[4]; - int16_t counter[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; - int16_t counterTranspose[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; - float tmpMax[EFAP_MAX_SIZE_TMP_BUFF]; - - /* Set counter and counterTranspose to 0 */ - for ( i = 0; i < EFAP_MAX_SIZE_TMP_BUFF; i++ ) - { - set_s( counter[i], 0, EFAP_MAX_SIZE_TMP_BUFF ); - set_s( counterTranspose[i], 0, EFAP_MAX_SIZE_TMP_BUFF ); - } - - /* Finding the max vertex */ - for ( i = 0; i < numSurface; ++i ) - { - tmpMax[i] = (float) triArray[visible[i]].LS[0]; - for ( j = 1; j < 3; ++j ) - { - if ( tmpMax[i] < triArray[visible[i]].LS[j] ) - { - tmpMax[i] = (float) triArray[visible[i]].LS[j]; - } - } - } - maxVertex = (int16_t) tmpMax[maximum( tmpMax, numSurface, NULL )]; - - for ( i = 0; i < numSurface; ++i ) - { - tmpSurface[0] = triArray[visible[i]].LS[0]; - tmpSurface[1] = triArray[visible[i]].LS[1]; - tmpSurface[2] = triArray[visible[i]].LS[2]; - tmpSurface[3] = triArray[visible[i]].LS[0]; - - for ( j = 0; j < 3; ++j ) - { - a = tmpSurface[j]; - b = tmpSurface[j + 1]; - counter[a][b] = counter[a][b] + 1; - counterTranspose[b][a] = counter[a][b]; - } - } - - for ( i = 0; i < maxVertex + 1; ++i ) - { - for ( j = 0; j < maxVertex + 1; ++j ) - { - counter[i][j] = counterTranspose[i][j] + counterTranspose[j][i]; - } - } - - /* Finding the edges */ - k = 0; - - for ( a = 0; a < maxVertex; ++a ) - { - for ( b = a + 1; b < maxVertex + 1; ++b ) - { - if ( counter[a][b] == 1 ) - { - edges[k] = a; - edges[k + 1] = b; - k += 2; - } - } - } - - /* Outputs */ - *numEdges = k; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * flip_plane() - * - * +/*-------------------------------------------------------------------------* \ + * flip_plane() \ + * \ + * \ *-------------------------------------------------------------------------*/ -static void flip_plane( - const EFAP_VERTEX *vtxArray, /* i : Vertex array */ - int16_t *surface, /* i/o: Surface/vertices to be flipped */ - const float centroid[3] /* i : Centroid of convex hull from which to orient the planes outward */ -) -{ - int16_t tmp; - float dist; - - dist = point_plane_distance( - vtxArray[surface[0]].pos, - vtxArray[surface[1]].pos, - vtxArray[surface[2]].pos, - centroid ); - - if ( dist > 0 ) - { - /*efap_flipLeftRight( surface, 3 );*/ - tmp = surface[0]; - surface[0] = surface[2]; - surface[2] = tmp; - } - - return; -} -#else /*-------------------------------------------------------------------------* \ - * flip_plane() \ - * \ - * \ - *-------------------------------------------------------------------------*/ - static void flip_plane_fx( const EFAP_VERTEX *vtxArray, /* i : Vertex array */ Word16 *surface, /* i/o: Surface/vertices to be flipped */ @@ -2146,7 +1177,6 @@ static void flip_plane_fx( return; } -#endif /*-------------------------------------------------------------------------* @@ -2154,152 +1184,6 @@ static void flip_plane_fx( * * *-------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -static void remap_ghosts( - EFAP_VERTEX *vtxArray, /* i/o: Vertex array */ - EFAP_LS_TRIANGLE *triArray, /* i/o: Triangle array */ - int16_t numSpk, /* i : Number of speakers */ - int16_t *numVertex, /* i/o: Size of vertex array */ - int16_t numTri, /* i : Size of triangle array */ - float **downmixMatrixTranspose /* o : Transpose of downmix matrix */ -) -{ - int16_t numGhst = 0; - int16_t numVtx = *numVertex; - int16_t numTot; - int16_t g; - int16_t i, j; - int16_t tmpL; - float inv_tmpL; - int16_t posFound[2]; - int16_t neighbours[EFAP_MAX_SIZE_TMP_BUFF]; - float tmpVec[EFAP_MAX_SIZE_TMP_BUFF]; - float tmpVec2[EFAP_MAX_SIZE_TMP_BUFF]; - float tmpMat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; - float tmpNewMat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF]; - float tmpDist; - const float thresh = 1e-4f; - - set_f( tmpVec, 0.0f, EFAP_MAX_SIZE_TMP_BUFF ); - set_f( tmpVec2, 0.0f, EFAP_MAX_SIZE_TMP_BUFF ); - - /* Finding unused ghosts (i.e. ghost speakers that aren't used for triangulation */ - for ( g = numVtx - 1; g > numSpk - 1; --g ) - { - /* find(triangle_mat == ghost, 1, 'first') */ - if ( find_int_in_tri( triArray, g, numTri, posFound ) == 0 ) - { - remove_vertex( vtxArray, g, numVtx ); - --numVtx; - for ( i = 0; i < numTri; ++i ) - { - for ( j = 0; j < 3; ++j ) - { - if ( triArray[i].LS[j] > g ) - { - triArray[i].LS[j] = g - 1; - } - } - } - } - else - { - ++numGhst; - } - } - - /* Final number of LS (real + ghosts) */ - numTot = numSpk + numGhst; - - /* Initializing tmpMat as the identity matrix */ - for ( i = 0; i < numTot; ++i ) - { - set_f( tmpMat[i], 0.0f, numTot ); - set_f( tmpNewMat[i], 0.0f, numTot ); - - tmpMat[i][i] = 1; - tmpNewMat[i][i] = 1; - } - - /* Generate initial sound energy distribution matrix */ - for ( i = numSpk; i < numTot; ++i ) - { - tmpL = get_neighbours( triArray, i, numTri, neighbours ); - - /* Initializing the column to 0 */ - for ( j = 0; j < numTot; ++j ) - { - tmpMat[j][i] = 0; - tmpNewMat[j][i] = 0; - } - - /* The neighbours are set to 1.0/tmpL */ - inv_tmpL = 1.f / tmpL; - for ( j = 0; j < tmpL; ++j ) - { - tmpMat[neighbours[j]][i] = inv_tmpL; - tmpNewMat[neighbours[j]][i] = inv_tmpL; - } - } - - /* Redistributing sound energy */ - for ( i = 0; i < numTot; ++i ) - { - for ( j = 0; j < numTot; ++j ) - { - tmpNewMat[i][j] = tmpMat[j][i]; - } - } - - for ( i = numSpk; i < numTot; ++i ) - { - mvr2r( tmpNewMat[i], tmpVec, numTot ); - - tmpDist = sum_f( &tmpVec[numSpk], numTot - numSpk ); - - while ( tmpDist > thresh ) - { - matrix_times_row( tmpMat, tmpVec, numTot, tmpVec2 ); - mvr2r( tmpVec2, tmpVec, numTot ); - set_zero( tmpVec2, numTot ); - tmpDist = sum_f( &tmpVec[numSpk], numTot - numSpk ); - } - mvr2r( tmpVec, tmpNewMat[i], numTot ); - } - - for ( i = 0; i < numSpk; ++i ) - { - /* Applying a sqrt(2) coeff and obtaining the dmMatrix*/ - for ( j = 0; j < numSpk; ++j ) - { - downmixMatrixTranspose[j][i] = sqrtf( tmpNewMat[j][i] ); - } - /* Downmix ghost loudspeakers according to dmxType */ - for ( ; j < numTot; ++j ) - { - switch ( vtxArray[j].dmxType ) - { - case EFAP_DMX_NONE: - downmixMatrixTranspose[j][i] = 0.f; - break; - case EFAP_DMX_AMPLITUDE: - downmixMatrixTranspose[j][i] = tmpNewMat[j][i]; - break; - case EFAP_DMX_INTENSITY: - default: - downmixMatrixTranspose[j][i] = sqrtf( tmpNewMat[j][i] ); - break; - } - } - } - - /* Output */ - *numVertex = numTot; - - return; -} -#else static void remap_ghosts_fx( EFAP_VERTEX *vtxArray, /* i/o: Vertex array */ EFAP_LS_TRIANGLE *triArray, /* i/o: Triangle array */ @@ -2490,33 +1374,7 @@ static void remap_ghosts_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * vertex_init() - * - * Initialize the vertex structures - *-------------------------------------------------------------------------*/ - -static void vertex_init( - const float *aziSpk, /* i : Azimuths of the LS setup */ - const float *eleSpk, /* i : Elevations of the LS setup */ - EFAP_VERTEX_DATA *efapVtxData /* i/o: Vertex data structure that will be updated */ -) -{ - int16_t i; - - /* Main Processing */ - for ( i = 0; i < efapVtxData->numVtx; i++ ) - { - add_vertex( efapVtxData->vertexArray, aziSpk[i], eleSpk[i], i, EFAP_DMX_INTENSITY ); - } - return; -} -#else /*-------------------------------------------------------------------------* * vertex_init_fx() * @@ -2532,82 +1390,14 @@ static void vertex_init_fx( Word16 i; /* Main Processing */ - FOR( i = 0; i < efapVtxData->numVtx; i++ ) - { - add_vertex_fx( efapVtxData->vertexArray, aziSpk[i], eleSpk[i], i, EFAP_DMX_INTENSITY ); - } - - return; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * efap_panning() - * - * Compute the gain without applying the downmix Matrix and the norm of the array - *-------------------------------------------------------------------------*/ - -static void efap_panning( - const float azi, /* i : Value of the azimuth */ - const float ele, /* i : Value of the elevation */ - const EFAP_POLYSET_DATA *polyData, /* i : Polygon data */ - float *bufferL /* o : 1D array of length numSpk that will contain the tmp values */ -) -{ - int16_t i; - int16_t polyIdx; - int16_t numChan; - int16_t chan[EFAP_MAX_CHAN_NUM]; - float aziPoly[EFAP_MAX_CHAN_NUM]; - float elePoly[EFAP_MAX_CHAN_NUM]; - float tmpBuff[EFAP_MAX_CHAN_NUM]; - float normTmpBuff; - float P[2]; - - P[0] = azi; - P[1] = ele; - - /* Finding in which polygon the point is */ - - polyIdx = get_poly_num( P, polyData ); - - assert( polyIdx != -1 && "EFAP: polygon not found!" ); - - /* Extracting the chan, the azimuth and the ele of the considered poly */ - numChan = polyData->polysetArray[polyIdx].numChan; - - for ( i = 0; i < numChan; ++i ) - { - chan[i] = polyData->polysetArray[polyIdx].chan[i]; - aziPoly[i] = polyData->polysetArray[polyIdx].polyAzi[i]; - - if ( polyData->polysetArray[polyIdx].isNaN[i] == 1 ) - { - aziPoly[i] = P[0]; - } - - elePoly[i] = polyData->polysetArray[polyIdx].polyEle[i]; - } - - /* Computing the gain for the polygon */ - get_poly_gains( P[0], P[1], aziPoly, elePoly, numChan, tmpBuff ); - - /* Computing the norm of the tmp buffer */ - normTmpBuff = dotp( tmpBuff, tmpBuff, numChan ); - normTmpBuff = sqrtf( normTmpBuff ); - - /* Updating the buffer structure */ - normTmpBuff = 1.f / normTmpBuff; - for ( i = 0; i < numChan; ++i ) + FOR( i = 0; i < efapVtxData->numVtx; i++ ) { - bufferL[chan[i]] = tmpBuff[i] * normTmpBuff; + add_vertex_fx( efapVtxData->vertexArray, aziSpk[i], eleSpk[i], i, EFAP_DMX_INTENSITY ); } return; } -#else + /*-------------------------------------------------------------------------* * efap_panning_fx() * @@ -2701,64 +1491,8 @@ static void efap_panning_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * get_poly_gains() - * - * Compute the gain for a precise polygon - *-------------------------------------------------------------------------*/ - -static void get_poly_gains( - const float azi, /* i : Value of the azimuth */ - const float ele, /* i : Value of the elevation */ - const float aziPoly[EFAP_MAX_CHAN_NUM], /* i : Azimuths of the considered polygons */ - const float elePoly[EFAP_MAX_CHAN_NUM], /* i : Elevations of the considered polygons */ - const int16_t numChan, /* i : Length of aziPoly & elePoly */ - float *buffer /* o : 1D array of length numSpk that will contain the tmp values */ -) -{ - int16_t i, j; - int16_t idx1, idx2; - float P[2]; - float A[2], B[2], C[2]; - float P_minus_A[2]; - - P[0] = azi; - P[1] = ele; - - /* Processing, we search for the triangle in which belong P, then we compute the gain */ - for ( i = 1; i < numChan + 1; ++i ) - { - A[0] = aziPoly[i - 1]; - A[1] = elePoly[i - 1]; - v_sub( P, A, P_minus_A, 2 ); /* Precalculate value of (P-A) */ - for ( j = i; j < numChan - 2 + i; ++j ) - { - idx1 = 1 + ( j % numChan ); - idx2 = 1 + ( idx1 % numChan ); - - B[0] = aziPoly[idx1 - 1]; - B[1] = elePoly[idx1 - 1]; - - C[0] = aziPoly[idx2 - 1]; - C[1] = elePoly[idx2 - 1]; - - if ( in_tri( A, B, C, P_minus_A ) ) - { - buffer[i - 1] = get_tri_gain( A, B, C, P_minus_A ); - break; - } - } - } - - return; -} -#else /*-------------------------------------------------------------------------* * get_poly_gains_fx() * @@ -2821,49 +1555,7 @@ static void get_poly_gains_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * get_tri_gain() - * - * Compute the value of the gain for a given triangle - *-------------------------------------------------------------------------*/ - -static float get_tri_gain( - const float A[2], /* i : Coordinate of one apex of the triangle */ - const float B[2], /* i : Coordinate of one apex of the triangle */ - const float C[2], /* i : Coordinate of one apex of the triangle */ - const float P_minus_A[2] /* i : Value of (P - A) */ -) -{ - float N[2], tmpN[2]; - float tmpSub1[2]; - float tmpDot1, tmpDot2; - float gain; - - /* Processing */ - tmpN[0] = B[1] - C[1]; - tmpN[1] = C[0] - B[0]; - - v_sub( B, A, tmpSub1, 2 ); - - tmpDot1 = dotp( tmpN, tmpSub1, 2 ); - v_multc( tmpN, 1 / tmpDot1, N, 2 ); - - tmpDot2 = dotp( P_minus_A, N, 2 ); - - gain = 1 - tmpDot2; - /* Set gains <= -60dB to 0 to avoid problems in SVD */ - if ( fabsf( gain ) < 1e-6 ) - { - gain = 0.0f; - } - return gain; -} -#else /*-------------------------------------------------------------------------* * get_tri_gain_fx() * @@ -2916,63 +1608,8 @@ static Word32 get_tri_gain_fx( } return gain; // Q13 } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * add_vertex() - * - * Add a vertex to the vertex array - *-------------------------------------------------------------------------*/ - -static void add_vertex( - EFAP_VERTEX *vtxArray, /* i/o: Handle to the vertex array that will be updated */ - const float azi, /* i : Azimuth of the vertex */ - const float ele, /* i : Elevation of the vertex */ - const int16_t pos, /* i : Index in the vtxArray where we want to add the vertex */ - const EFAP_VTX_DMX_TYPE dmxType /* i : downmix type for the vertex */ -) -{ - float idxAziTmp, idxEleTmp; - float tmp; - - assert( vtxArray != NULL && "EFAP: vtxArray == NULL" ); - - /* Updating the vertex array */ - - tmp = efap_fmodf( 180.0f - azi, 360.0f ); - vtxArray[pos].azi = 180.0f - tmp; - - tmp = ( ( 180.0f < ele ) ? 180.0f : ele ); - vtxArray[pos].ele = ( ( -180.0f > tmp ) ? -180.0f : tmp ); - - /* Converting spherical coordinates to cartesians, assuming radius = 1 */ - sph2cart( vtxArray[pos].azi, vtxArray[pos].ele, &vtxArray[pos].pos[0] ); - - /* Computing the index defined by idx = idxAziTmp + 181 * idxEleTmp */ - - /* IdxAziTmp */ - tmp = fabsf( 90.0f - fabsf( vtxArray[pos].azi ) ); - idxAziTmp = (float) anint( tmp ); - - /* IdxEleTmp */ - tmp = fabsf( vtxArray[pos].ele ); - idxEleTmp = (float) anint( tmp ); - idxEleTmp = 90.0f - idxEleTmp; - - /* Final Idx */ - vtxArray[pos].idx = (int16_t) idxAziTmp + 181 * (int16_t) idxEleTmp; - - /* Setting the nan flag to 0 */ - vtxArray[pos].isNaN = 0; - /* Set the default downmix type */ - vtxArray[pos].dmxType = dmxType; - return; -} -#else /*-------------------------------------------------------------------------* * add_vertex_fx() * @@ -3038,7 +1675,6 @@ static void add_vertex_fx( return; } -#endif /*-------------------------------------------------------------------------* @@ -3048,7 +1684,6 @@ static void add_vertex_fx( * (modified version of sort() to return an index array) *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void efap_sort_s_fx( Word16 *x, /* i/o: Vector to be sorted */ Word16 *idx, /* o : Original index positions */ @@ -3087,37 +1722,6 @@ static void efap_sort_s_fx( return; } -#else -static void efap_sort_s( - int16_t *x, /* i/o: Vector to be sorted */ - int16_t *idx, /* o : Original index positions */ - const int16_t len /* i : vector length */ -) -{ - int16_t i, j; - int16_t tempr, tempi; - - for ( i = 0; i < len; i++ ) - { - idx[i] = i; - } - - for ( i = len - 2; i >= 0; i-- ) - { - tempr = x[i]; - tempi = idx[i]; - for ( j = i + 1; ( j < len ) && ( tempr > x[j] ); j++ ) - { - x[j - 1] = x[j]; - idx[j - 1] = idx[j]; - } - x[j - 1] = tempr; - idx[j - 1] = tempi; - } - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -3126,29 +1730,6 @@ static void efap_sort_s( * Compute the signed distance between a vertex and a hull surface *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float vertex_distance( - const EFAP_VERTEX *vtxArray, /* i : The considered vertex */ - const EFAP_LS_TRIANGLE tri, /* i : The considered triangle */ - const int16_t vtxIdx /* i : Index of the considered vertex */ -) -{ - float A[3], B[3], C[3], P[3]; - int16_t i; - - /* Assigning the coordinates to the vector */ - for ( i = 0; i < 3; ++i ) - { - A[i] = vtxArray[tri.LS[0]].pos[i]; - B[i] = vtxArray[tri.LS[1]].pos[i]; - C[i] = vtxArray[tri.LS[2]].pos[i]; - - P[i] = vtxArray[vtxIdx].pos[i]; - } - - return point_plane_distance( A, B, C, P ); -} -#else static Word32 vertex_distance_fx( const EFAP_VERTEX *vtxArray, /* i : The considered vertex */ const EFAP_LS_TRIANGLE tri, /* i : The considered triangle */ @@ -3174,29 +1755,8 @@ static Word32 vertex_distance_fx( return point_plane_distance_fx( A, B, C, P ); // q28 } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * point_poly_distance() - * - * Compute the signed distance between a point and polygon - *-------------------------------------------------------------------------*/ - -static float point_poly_distance( - const EFAP_POLYSET poly, /* i : The polygon which forms a plane */ - const float X[3] /* i : Cartesian coordinates of the point of interest */ -) -{ - float P1[3], P2[3], P3[3]; - sph2cart( poly.polyAzi[0], poly.polyEle[0], &P1[0] ); - sph2cart( poly.polyAzi[1], poly.polyEle[1], &P2[0] ); - sph2cart( poly.polyAzi[2], poly.polyEle[2], &P3[0] ); - return point_plane_distance( P1, P2, P3, X ); -} -#else /*-------------------------------------------------------------------------* * point_poly_distance_fx() * @@ -3216,54 +1776,7 @@ static Word32 point_poly_distance_fx( return point_plane_distance_fx( P1, P2, P3, X ); // q28 } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * point_plane_distance() - * - * Compute the signed distance between a point and a given plane - *-------------------------------------------------------------------------*/ - -static float point_plane_distance( - const float P1[3], /* i : First point of the triangle that defines the planes */ - const float P2[3], /* i : Second point of the triangle */ - const float P3[3], /* i : Third point of the triangle */ - const float X[3] /* i : The point of interest */ -) -{ - float tmpCross1[3], tmpCross2[3]; - float resultCross[3]; - float tmpDot1[3], tmpDot2[3]; - float tmpNorm; - float dist; - - /* Check if the point already matches a triangle vertex */ - if ( ( X[0] == P1[0] && X[1] == P1[1] && X[2] == P1[2] ) || - ( X[0] == P2[0] && X[1] == P2[1] && X[2] == P2[2] ) || - ( X[0] == P3[0] && X[1] == P3[1] && X[2] == P3[2] ) ) - { - return 0.0f; - } - - /* Cross Product */ - v_sub( P1, P2, tmpCross1, 3 ); - v_sub( P1, P3, tmpCross2, 3 ); - /* resultCross = cross(P1-P2,P1-P3) */ - efap_crossp( tmpCross1, tmpCross2, resultCross ); - - /* Dot Product */ - tmpNorm = dotp( resultCross, resultCross, 3 ); - tmpNorm = inv_sqrt( tmpNorm ); - v_sub( X, P1, tmpDot1, 3 ); - v_multc( resultCross, tmpNorm, tmpDot2, 3 ); - dist = dotp( tmpDot1, tmpDot2, 3 ); - - return dist; -} -#else /*-------------------------------------------------------------------------* * point_plane_distance_fx() * @@ -3316,29 +1829,8 @@ static Word32 point_plane_distance_fx( // returns output in Q28 dist = L_shl( dotp_fixed( tmpDot1, tmpDot2, 3 ), exp ); // Q28 return dist; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * efap_crossp() - * - * Compute the cross product between column vectors of float of size 3x1 - *-------------------------------------------------------------------------*/ -static void efap_crossp( - const float *v1, /* i : First float vector */ - const float *v2, /* i : Second float vector */ - float *v /* o : Output vector */ -) -{ - v[0] = v1[1] * v2[2] - v1[2] * v2[1]; - v[1] = v1[2] * v2[0] - v1[0] * v2[2]; - v[2] = v1[0] * v2[1] - v1[1] * v2[0]; - return; -} -#else /*-------------------------------------------------------------------------* * efap_crossp_fx() * @@ -3360,8 +1852,6 @@ static void efap_crossp_fx( return; } -#endif - /*-------------------------------------------------------------------------* * find_int_in_tri() @@ -3369,7 +1859,6 @@ static void efap_crossp_fx( * Find an integer in triangle array of integers *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 find_int_in_tri_fx( const EFAP_LS_TRIANGLE *tri, /* i : Triangle array */ const Word16 n, /* i : The integer to find */ @@ -3397,42 +1886,12 @@ static Word16 find_int_in_tri_fx( return 0; } -#else -static int16_t find_int_in_tri( - const EFAP_LS_TRIANGLE *tri, /* i : Triangle array */ - const int16_t n, /* i : The integer to find */ - const int16_t r, /* i : Number of rows */ - int16_t *pos /* o : Position of the integer */ -) -{ - int16_t i, j; - - /* Find the first element equal to n */ - for ( i = 0; i < r; ++i ) - { - for ( j = 0; j < 3; ++j ) - { - if ( tri[i].LS[j] == n ) - { - pos[0] = i; - pos[1] = j; - return 1; - } - } - } - - return 0; -} -#endif - /*-------------------------------------------------------------------------* * remove_vertex() * * Remove a vertex from a vertex structure *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED static void remove_vertex_fx( EFAP_VERTEX *vtxArray, /* i : Vertex array */ const Word16 idx, /* i : Index of the vertex to remove */ @@ -3454,29 +1913,6 @@ static void remove_vertex_fx( return; } -#else -static void remove_vertex( - EFAP_VERTEX *vtxArray, /* i : Vertex array */ - const int16_t idx, /* i : Index of the vertex to remove */ - const int16_t L /* i : Length of the Vertex array */ -) -{ - int16_t i; - - assert( idx < L && "EFAP: index out of bounds" ); - - /* Shift all vertex of one position, so vtxArray[i] will be vtxArray[i+1] and so on */ - for ( i = idx; i < L - 1; ++i ) - { - add_vertex( vtxArray, vtxArray[i + 1].azi, vtxArray[i + 1].ele, i, EFAP_DMX_INTENSITY ); - } - - /* The last vertex is set to 0 */ - add_vertex( vtxArray, 0, 0, L - 1, EFAP_DMX_INTENSITY ); - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -3484,8 +1920,6 @@ static void remove_vertex( * * Returns the neighbouring triangles of a vertex *-------------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED static Word16 get_neighbours_fx( const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ const Word16 vtxIdx, /* i : Index of the vertex */ @@ -3535,119 +1969,28 @@ static Word16 get_neighbours_fx( /* Sorting the neighbours vector */ efap_sort_s_fx( tmpNeighbours, dummy, k ); - /* Creating the output vector, by eliminating redundancies and also deleting the indice == vtxIdx*/ - neighbours[0] = tmpNeighbours[0]; - move16(); - j = 1; - move16(); - - FOR( i = 1; i < k; ++i ) - { - test(); - IF( NE_16( tmpNeighbours[i], tmpNeighbours[i - 1] ) && - NE_16( tmpNeighbours[i], vtxIdx ) ) - { - neighbours[j] = tmpNeighbours[i]; - move16(); - j = add( j, 1 ); - } - } - - /* Output, length of neighbours */ - return j; -} -#else -static int16_t get_neighbours( - const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ - const int16_t vtxIdx, /* i : Index of the vertex */ - const int16_t numTri, /* i : Number of Triangles */ - int16_t *neighbours /* o : Output vector */ -) -{ - int16_t i, j, k; - int16_t tmpPos[2]; - int16_t tmpNeighbours[EFAP_MAX_SIZE_TMP_BUFF]; - int16_t dummy[EFAP_MAX_SIZE_TMP_BUFF]; - EFAP_LS_TRIANGLE tmpTriArray[EFAP_MAX_POLY_SET]; - - /* Processing */ - for ( i = 0; i < numTri; ++i ) - { - mvs2s( triArray[i].LS, tmpTriArray[i].LS, 3 ); - } - - k = 0; - while ( 1 ) - { - if ( find_int_in_tri( tmpTriArray, vtxIdx, numTri, tmpPos ) == 0 ) - { - break; - } - else - { - tmpNeighbours[k] = tmpTriArray[tmpPos[0]].LS[0]; - tmpNeighbours[k + 1] = tmpTriArray[tmpPos[0]].LS[1]; - tmpNeighbours[k + 2] = tmpTriArray[tmpPos[0]].LS[2]; - k += 3; - tmpTriArray[tmpPos[0]].LS[tmpPos[1]] = -1; - } - - if ( k > 3 * numTri ) - { - break; - } - } - - /* Sorting the neighbours vector */ - efap_sort_s( tmpNeighbours, dummy, k ); - - /* Creating the output vector, by eliminating redundancies and also deleting the indice == vtxIdx*/ - neighbours[0] = tmpNeighbours[0]; - j = 1; - - for ( i = 1; i < k; ++i ) - { - if ( ( tmpNeighbours[i] != tmpNeighbours[i - 1] ) && - ( tmpNeighbours[i] != vtxIdx ) ) - { - neighbours[j] = tmpNeighbours[i]; - ++j; - } - } - - /* Output, length of neighbours */ - return j; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * matrix_times_row() - * - * Computes the product of a matrix and a row vector - *-------------------------------------------------------------------------*/ - -static void matrix_times_row( - float mat[EFAP_MAX_SIZE_TMP_BUFF][EFAP_MAX_SIZE_TMP_BUFF], /* i : The input matrix */ - const float *vec, /* i : The input row vector */ - const int16_t L, /* i : Row length */ - float *out /* o : Output vector */ -) -{ - int16_t i, j; + /* Creating the output vector, by eliminating redundancies and also deleting the indice == vtxIdx*/ + neighbours[0] = tmpNeighbours[0]; + move16(); + j = 1; + move16(); - for ( i = 0; i < L; ++i ) + FOR( i = 1; i < k; ++i ) { - for ( j = 0; j < L; ++j ) + test(); + IF( NE_16( tmpNeighbours[i], tmpNeighbours[i - 1] ) && + NE_16( tmpNeighbours[i], vtxIdx ) ) { - out[i] += mat[i][j] * vec[j]; + neighbours[j] = tmpNeighbours[i]; + move16(); + j = add( j, 1 ); } } - return; + /* Output, length of neighbours */ + return j; } -#else + /*-------------------------------------------------------------------------* * matrix_times_row_fx() * @@ -3674,8 +2017,6 @@ static void matrix_times_row_fx( return; } -#endif - /*-------------------------------------------------------------------------* * tri_to_poly() @@ -3683,7 +2024,6 @@ static void matrix_times_row_fx( * Combines triangles of a surface in order to create polygons *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void tri_to_poly_fx( const EFAP_VERTEX *vtxArray, /* i : Vertex array */ const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ @@ -3785,99 +2125,6 @@ static void tri_to_poly_fx( Copy( sortedLengths, outLengthSorted, EFAP_MAX_POLY_SET ); return; } -#else -static void tri_to_poly( - const EFAP_VERTEX *vtxArray, /* i : Vertex array */ - const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ - const int16_t numVtx, /* i : Number of vertices */ - const int16_t numTri, /* i : Number of triangles */ - int16_t sortedChan[EFAP_MAX_POLY_SET][EFAP_MAX_CHAN_NUM], /* o : The matrix that will contain the sorted channels */ - int16_t *outLengthPS, /* o : The length of the sorted channels */ - int16_t outLengthSorted[EFAP_MAX_POLY_SET] /* o : The number of channels for each poly (i.e. outLengthSorted[i] = length(sortedChan[i]) */ -) -{ - int16_t i, j; - int16_t lenPoly; - int16_t lenPolySet; - int16_t found; - int16_t replaceIdx; - - int16_t poly[EFAP_MAX_CHAN_NUM]; - - int16_t sortedLengths[EFAP_MAX_POLY_SET]; - int16_t sortedTri[EFAP_MAX_POLY_SET]; - - float dist; - - lenPolySet = 0; - /* Sorting the polygons */ - for ( i = 0; i < numTri; ++i ) - { - /* search for coplanar vertices and add them to the polygon */ - lenPoly = 0; - for ( j = 0; j < numVtx; ++j ) - { - dist = fabsf( point_plane_distance( - vtxArray[triArray[i].LS[0]].pos, - vtxArray[triArray[i].LS[1]].pos, - vtxArray[triArray[i].LS[2]].pos, - vtxArray[j].pos ) ); - - if ( dist < 1e-3f ) - { - assert( lenPoly < EFAP_MAX_CHAN_NUM && "EFAP: exceeded max polygon vertices!" ); - poly[lenPoly] = j; - ++lenPoly; - } - } - - /* search existing polygons to determine whether the new one already exists/is a subset or is a superset */ - found = 0; - replaceIdx = -1; - for ( j = 0; j < lenPolySet; ++j ) - { - found = compare_poly( sortedChan[j], sortedLengths[j], poly, lenPoly ); - - if ( found > 0 ) - { - break; - } - else if ( found < 0 ) - { - replaceIdx = j; - } - } - - if ( found == 0 ) - { - /* append new poly */ - mvs2s( poly, sortedChan[lenPolySet], lenPoly ); - sortedTri[lenPolySet] = i; - sortedLengths[lenPolySet] = lenPoly; - ++lenPolySet; - } - else if ( found == -1 ) - { - /* replace with superset */ - mvs2s( poly, sortedChan[replaceIdx], lenPoly ); - sortedTri[replaceIdx] = i; - sortedLengths[replaceIdx] = lenPoly; - } - } - - /* Sorting the vertex */ - for ( i = 0; i < lenPolySet; ++i ) - { - sort_channels_vertex( vtxArray, triArray, sortedChan[i], sortedLengths[i], sortedTri[i] ); - } - - /* Output */ - *outLengthPS = lenPolySet; - mvs2s( sortedLengths, outLengthSorted, EFAP_MAX_POLY_SET ); - - return; -} -#endif /*-------------------------------------------------------------------------* @@ -3886,7 +2133,6 @@ static void tri_to_poly( * Compares a newly created polygon with an existing one *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 compare_poly_fx( Word16 *old, /* i : Existing polygon */ Word16 lenOld, /* i : Length of existing polygon */ @@ -3930,48 +2176,6 @@ static Word16 compare_poly_fx( return 0; } } -#else -static int16_t compare_poly( - int16_t *old, /* i : Existing polygon */ - int16_t lenOld, /* i : Length of existing polygon */ - int16_t *new, /* i : New polygon */ - int16_t lenNew /* i : Length of new polygon */ -) -{ - int16_t i, j; - int16_t count; - - count = 0; - - for ( i = 0; i < lenOld; ++i ) - { - for ( j = count; j < lenNew; ++j ) - { - if ( old[i] == new[j] ) - { - ++count; - break; - } - } - } - - if ( count == lenOld && lenOld < lenNew ) - { - /* new polygon is a superset */ - return -1; - } - else if ( count == lenNew && lenOld >= lenNew ) - { - /* found as subset or identical */ - return 1; - } - else - { - /* not found */ - return 0; - } -} -#endif /*-------------------------------------------------------------------------* @@ -3980,92 +2184,6 @@ static int16_t compare_poly( * Sort the channels of a polygon set according to the vertex azimuth *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void sort_channels_vertex( - const EFAP_VERTEX *vtxArray, /* i : Vertex array */ - const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ - int16_t channels[EFAP_MAX_CHAN_NUM], /* o : Channels array to be modified */ - const int16_t lengthChannels, /* i : Length of the channels array */ - int16_t idxTri /* i : Index of the considered triangle */ -) -{ - int16_t i, j; - - float P1[3], P2[3], P3[3]; - float tmpU[3]; - float U[3], V[3]; - float tmpV1[3], tmpV2[3], tmpV3[3]; - float normU, normV; - float MC[3]; - float tmpP[3], P[3]; - - float x, y; - - float azi[EFAP_MAX_CHAN_NUM]; - int16_t order[EFAP_MAX_CHAN_NUM]; - - int16_t newChannels[EFAP_MAX_CHAN_NUM]; - - - /* Initializing coordinates with the vertices of the considered triangle */ - for ( i = 0; i < 3; ++i ) - { - P1[i] = vtxArray[triArray[idxTri].LS[0]].pos[i]; - P2[i] = vtxArray[triArray[idxTri].LS[1]].pos[i]; - P3[i] = vtxArray[triArray[idxTri].LS[2]].pos[i]; - } - - /* First Base Vector */ - v_sub( P2, P1, tmpU, 3 ); - normU = sqrtf( dotp( tmpU, tmpU, 3 ) ); - v_multc( tmpU, 1 / normU, U, 3 ); - - /* Second Base Vector */ - v_sub( P3, P2, tmpV1, 3 ); - v_multc( U, dotp( U, tmpV1, 3 ), tmpV2, 3 ); - - v_sub( tmpV1, tmpV2, tmpV3, 3 ); - normV = sqrtf( dotp( tmpV3, tmpV3, 3 ) ); - - v_multc( tmpV3, 1 / normV, V, 3 ); - - /* Center of the first Triangle */ - for ( i = 0; i < 3; ++i ) - { - MC[i] = ( P1[i] + P2[i] + P3[i] ) / 3; - } - - /* Sort Vertices */ - for ( i = 0; i < lengthChannels; ++i ) - { - for ( j = 0; j < 3; ++j ) - { - tmpP[j] = vtxArray[channels[i]].pos[j]; - } - - v_sub( tmpP, MC, P, 3 ); - - x = dotp( P, U, 3 ); - y = dotp( P, V, 3 ); - - azi[i] = atan2f( y, x ); - } - - /* Sorting the azi vec */ - v_sort_ind( azi, order, lengthChannels ); - - /* Updating the channel array */ - for ( i = 0; i < lengthChannels; ++i ) - { - newChannels[i] = channels[order[i]]; - } - - /* return Success */ - mvs2s( newChannels, channels, lengthChannels ); - - return; -} -#else static void sort_channels_vertex_fx( const EFAP_VERTEX *vtxArray, /* i : Vertex array */ const EFAP_LS_TRIANGLE *triArray, /* i : Triangle array */ @@ -4169,25 +2287,7 @@ static void sort_channels_vertex_fx( return; } -#endif - - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * efap_fmodf() - * - * Modulus operation that will handle negative values the same way as matlab - *-------------------------------------------------------------------------*/ -static float efap_fmodf( - const float x, /* i : Dividend */ - const float y /* i : Divisor */ -) -{ - float result = fmodf( x, y ); - return result >= 0 ? result : result + y; -} -#else /*-------------------------------------------------------------------------* * efap_32mod32() * @@ -4210,8 +2310,6 @@ static Word32 efap_32mod32( return L_add( result, y ); // q22 } } -#endif - /*-------------------------------------------------------------------------* * get_poly_num() @@ -4219,63 +2317,6 @@ static Word32 efap_32mod32( * Returns the index of the polygon in which the coordinate is *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t get_poly_num( - const float P[2], /* i : Azimuth and elevation of the point */ - const EFAP_POLYSET_DATA *polyData /* i : Polyset struct */ -) -{ - int16_t i; - int16_t num_poly, found_poly; - int16_t poly_tmp[EFAP_MAX_CHAN_NUM]; - float poly_dist[EFAP_MAX_CHAN_NUM]; - - float dist_tmp; - float pos[3]; - - num_poly = 0; - - sph2cart( P[0], P[1], &pos[0] ); - - /* Filter the polygon list with a fast 2d check */ - for ( i = 0; i < polyData->numPoly; ++i ) - { - if ( in_poly( P, polyData->polysetArray[i] ) ) - { - /* select only polygons which are visible from the point */ - dist_tmp = point_poly_distance( polyData->polysetArray[i], pos ); - if ( dist_tmp == 0 ) - { - return i; - } - else if ( dist_tmp > 0 ) - { - poly_tmp[num_poly] = i; - poly_dist[num_poly] = dist_tmp; - num_poly++; - } - } - } - if ( num_poly == 0 ) - { - return -1; - } - - /* select the polygon with the smallest distance */ - found_poly = poly_tmp[0]; - dist_tmp = poly_dist[0]; - for ( i = 1; i < num_poly; i++ ) - { - if ( poly_dist[i] < dist_tmp ) - { - found_poly = poly_tmp[i]; - dist_tmp = poly_dist[i]; - } - } - - return found_poly; -} -#else static Word16 get_poly_num_fx( const Word32 P[2], /* i : Azimuth and elevation of the point q22*/ const EFAP_POLYSET_DATA *polyData /* i : Polyset struct */ @@ -4338,8 +2379,6 @@ static Word16 get_poly_num_fx( return found_poly; } -#endif - /*-------------------------------------------------------------------------* * in_poly() @@ -4347,71 +2386,6 @@ static Word16 get_poly_num_fx( * Determines if a given point is within a polygon or not *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t in_poly( - const float P[2], /* i : Azimuth and elevation of the point */ - const EFAP_POLYSET poly /* i : Polyset struct */ -) -{ - int16_t n; - int16_t numVertices = poly.numChan; - float A[2]; - float B[2]; - float C[2]; - float P_minus_A[2]; - - /* Safety check */ - - if ( numVertices < 3 ) - { - return 0; - } - - /* See if the point is in one of the triangles available in the polygon */ - - if ( poly.isNaN[0] ) - { - A[0] = P[0]; - } - else - { - A[0] = poly.polyAzi[0]; - } - A[1] = poly.polyEle[0]; - - v_sub( P, A, P_minus_A, 2 ); /* Precalculate value of (P-A) */ - - for ( n = 1; n < numVertices - 1; ++n ) - { - if ( poly.isNaN[n] ) - { - B[0] = P[0]; - } - else - { - B[0] = poly.polyAzi[n]; - } - B[1] = poly.polyEle[n]; - - if ( poly.isNaN[n + 1] ) - { - C[0] = P[0]; - } - else - { - C[0] = poly.polyAzi[n + 1]; - } - C[1] = poly.polyEle[n + 1]; - - if ( in_tri( A, B, C, P_minus_A ) ) - { - return 1; - } - } - - return 0; -} -#else static Word16 in_poly_fx( /* Angles are in Q22 */ const Word32 P[2], /* i : Azimuth and elevation of the point q22*/ const EFAP_POLYSET poly /* i : Polyset struct */ @@ -4485,8 +2459,6 @@ static Word16 in_poly_fx( /* Angles are in Q22 */ return 0; } -#endif - /*-------------------------------------------------------------------------* * in_tri() @@ -4494,59 +2466,6 @@ static Word16 in_poly_fx( /* Angles are in Q22 */ * Determines if a given point is within a triangle or not *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static int16_t in_tri( - float A[2], /* i : Coordinate of one apex of the triangle */ - float B[2], /* i : Coordinate of one apex of the triangle */ - float C[2], /* i : Coordinate of one apex of the triangle */ - float P_minus_A[2] /* i : Value of (P - A) */ -) -{ - float tmpDot1[2], tmpDot2[2]; - float matInv[2][2]; - float invFactor; - float S[2]; - float thresh = 1e-6f; - - /* - Not a Valid Triangle : Colinear edges - In the matlab implementation, the rcond() function is used - Since it's very complex to implement this in C - I'll just compute the determinant and if it's equal to 0, that means the two vectors are colinear - */ - - v_sub( B, A, tmpDot1, 2 ); - v_sub( C, A, tmpDot2, 2 ); - - /* Verification of the non-colinearity */ - invFactor = tmpDot1[0] * tmpDot2[1] - tmpDot1[1] * tmpDot2[0]; - - if ( fabsf( invFactor ) < thresh ) - { - return 0; - } - - invFactor = 1.f / invFactor; - matInv[0][0] = tmpDot2[1] * invFactor; - matInv[0][1] = -tmpDot2[0] * invFactor; - matInv[1][0] = -tmpDot1[1] * invFactor; - matInv[1][1] = tmpDot1[0] * invFactor; - - /* Computing S = matInv*(P-A) */ - S[0] = ( matInv[0][0] * P_minus_A[0] ) + ( matInv[0][1] * P_minus_A[1] ); - S[1] = ( matInv[1][0] * P_minus_A[0] ) + ( matInv[1][1] * P_minus_A[1] ); - - /* Checking if we are in the triangle; For the theory, check Christian Borss article, section 3.2 */ - if ( S[0] < -thresh || S[1] < -thresh || S[0] + S[1] > 1 + thresh ) - { - return 0; - } - else - { - return 1; - } -} -#else static Word16 in_tri_fx( Word32 A[2], /* i : Coordinate of one apex of the triangle q22*/ Word32 B[2], /* i : Coordinate of one apex of the triangle q22*/ @@ -4667,28 +2586,7 @@ static Word16 in_tri_fx( return 1; } } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------------* - * sph2cart() - * - * Converts a vertex position to cartesian coordinates - *-------------------------------------------------------------------------*/ - -static void sph2cart( - const float azi, /* i : Azimuth in degrees */ - const float ele, /* i : Elevation in degrees */ - float *pos /* o : Cartesian coordinates vector (x, y, z) */ -) -{ - pos[0] = cosf( azi * PI_OVER_180 ) * cosf( ele * PI_OVER_180 ); - pos[1] = sinf( azi * PI_OVER_180 ) * cosf( ele * PI_OVER_180 ); - pos[2] = sinf( ele * PI_OVER_180 ); - return; -} -#else /*-------------------------------------------------------------------------* * sph2cart_fx() * @@ -4715,4 +2613,3 @@ static void sph2cart_fx( return; } -#endif diff --git a/lib_rend/ivas_hrtf.c b/lib_rend/ivas_hrtf.c index f12d122b7..ab69784c7 100644 --- a/lib_rend/ivas_hrtf.c +++ b/lib_rend/ivas_hrtf.c @@ -45,7 +45,6 @@ * Allocate HRTF binary handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_binary_open_fx( TDREND_HRFILT_FiltSet_t **hHrtfTD ) { @@ -58,20 +57,6 @@ ivas_error ivas_HRTF_binary_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_HRTF_binary_open( - TDREND_HRFILT_FiltSet_t **hHrtfTD ) -{ - /* Allocate HR filter set for headphones configuration */ - *hHrtfTD = (TDREND_HRFILT_FiltSet_t *) malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ); - if ( *hHrtfTD == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HRTF binary!" ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -80,7 +65,6 @@ ivas_error ivas_HRTF_binary_open( * Close HRTF binary handle *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_HRTF_binary_close_fx( TDREND_HRFILT_FiltSet_t **hHrtfTD ) { @@ -95,21 +79,6 @@ void ivas_HRTF_binary_close_fx( return; } -#else -void ivas_HRTF_binary_close( - TDREND_HRFILT_FiltSet_t **hHrtfTD ) -{ - if ( hHrtfTD == NULL || *hHrtfTD == NULL ) - { - return; - } - - free( *hHrtfTD ); - *hHrtfTD = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -118,7 +87,6 @@ void ivas_HRTF_binary_close( * Allocate HRTF binary handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_CRend_binary_open_fx( HRTFS_CREND **hSetOfHRTF ) { @@ -137,26 +105,6 @@ ivas_error ivas_HRTF_CRend_binary_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_HRTF_CRend_binary_open( - HRTFS_CREND **hSetOfHRTF ) -{ - /* Allocate HR filter set for headphones configuration */ - *hSetOfHRTF = (HRTFS_CREND *) malloc( sizeof( HRTFS_CREND ) ); - if ( *hSetOfHRTF == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for set of HRTF binary!" ); - } - - ( *hSetOfHRTF )->hHRTF_hrir_combined = NULL; - ( *hSetOfHRTF )->hHRTF_hrir_hoa3 = NULL; - ( *hSetOfHRTF )->hHRTF_hrir_hoa2 = NULL; - ( *hSetOfHRTF )->hHRTF_hrir_foa = NULL; - ( *hSetOfHRTF )->hHRTF_brir_combined = NULL; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -165,7 +113,6 @@ ivas_error ivas_HRTF_CRend_binary_open( * Close HRTF CRend binary handle *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_HRTF_CRend_binary_close_fx( HRTFS_CREND **hSetOfHRTF ) { @@ -180,21 +127,6 @@ void ivas_HRTF_CRend_binary_close_fx( return; } -#else -void ivas_HRTF_CRend_binary_close( - HRTFS_CREND **hSetOfHRTF ) -{ - if ( hSetOfHRTF == NULL || *hSetOfHRTF == NULL ) - { - return; - } - - free( *hSetOfHRTF ); - *hSetOfHRTF = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -203,7 +135,6 @@ void ivas_HRTF_CRend_binary_close( * Allocate HRTF binary handle for FASTCONV renderer *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_fastconv_binary_open_fx( HRTFS_FASTCONV **hHrtfFastConv ) { @@ -215,19 +146,6 @@ ivas_error ivas_HRTF_fastconv_binary_open_fx( ivas_init_binaural_hrtf_fx( *hHrtfFastConv ); return IVAS_ERR_OK; } -#else -ivas_error ivas_HRTF_fastconv_binary_open( - HRTFS_FASTCONV **hHrtfFastConv ) -{ - *hHrtfFastConv = (HRTFS_FASTCONV *) malloc( sizeof( HRTFS_FASTCONV ) ); - if ( *hHrtfFastConv == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for FASTCONV HRTF tables!" ); - } - ivas_init_binaural_hrtf( *hHrtfFastConv ); - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------* @@ -236,7 +154,6 @@ ivas_error ivas_HRTF_fastconv_binary_open( * Close HRTF binary handle for FASTCONV renderer *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_HRTF_fastconv_binary_close_fx( HRTFS_FASTCONV **hHrtfFastConv ) { @@ -251,21 +168,6 @@ void ivas_HRTF_fastconv_binary_close_fx( return; } -#else -void ivas_HRTF_fastconv_binary_close( - HRTFS_FASTCONV **hHrtfFastConv ) -{ - if ( hHrtfFastConv == NULL || *hHrtfFastConv == NULL ) - { - return; - } - - free( *hHrtfFastConv ); - *hHrtfFastConv = NULL; - - return; -} -#endif /*-----------------------------------------------------------------------* @@ -274,7 +176,6 @@ void ivas_HRTF_fastconv_binary_close( * Allocate HRTF binary handle for parametric binauralizer *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_parambin_binary_open_fx( HRTFS_PARAMBIN **hHrtfParambin ) { @@ -286,19 +187,6 @@ ivas_error ivas_HRTF_parambin_binary_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_HRTF_parambin_binary_open( - HRTFS_PARAMBIN **hHrtfParambin ) -{ - *hHrtfParambin = (HRTFS_PARAMBIN *) malloc( sizeof( HRTFS_PARAMBIN ) ); - if ( *hHrtfParambin == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for parametric binauralizer HRTF tables!" ); - } - - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------* @@ -307,7 +195,6 @@ ivas_error ivas_HRTF_parambin_binary_open( * Close HRTF binary handle for parametric binauralizer *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_HRTF_parambin_binary_close_fx( HRTFS_PARAMBIN **hHrtfParambin ) { @@ -322,18 +209,3 @@ void ivas_HRTF_parambin_binary_close_fx( return; } -#else -void ivas_HRTF_parambin_binary_close( - HRTFS_PARAMBIN **hHrtfParambin ) -{ - if ( hHrtfParambin == NULL || *hHrtfParambin == NULL ) - { - return; - } - - free( *hHrtfParambin ); - *hHrtfParambin = NULL; - - return; -} -#endif diff --git a/lib_rend/ivas_limiter.c b/lib_rend/ivas_limiter.c index 199c14564..17211d1c6 100644 --- a/lib_rend/ivas_limiter.c +++ b/lib_rend/ivas_limiter.c @@ -38,17 +38,13 @@ #include "ivas_rom_rend.h" #include "wmc_auto.h" #include -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif -#ifdef IVAS_FLOAT_FIXED #define ATTACK_CNST_48k ( 2106670080 ) // Q31 #define ATTACK_CNST_32k ( 2086555136 ) // Q31 #define ATTACK_CNST_16k ( 2027355264 ) // Q31 #define ATTACK_CNST_8k ( 1913946752 ) // Q31 -#endif /*-------------------------------------------------------------------* @@ -59,55 +55,6 @@ *-------------------------------------------------------------------*/ /*! r: apply_strong_limiting flag */ -#ifndef IVAS_FLOAT_FIXED -/*! r: apply_strong_limiting flag */ -static int16_t detect_strong_saturations( - const int16_t BER_detect, /* i : BER detect flag */ - int16_t *strong_saturation_cnt, /* i/o: counter of strong saturations */ - const float max_val, /* i : maximum absolute value */ - float *frame_gain /* i/o: frame gain value */ -) -{ - int16_t apply_strong_limiting; - - apply_strong_limiting = 0; - - if ( BER_detect ) - { - *strong_saturation_cnt = 50; - apply_strong_limiting = 1; - } - else if ( max_val > 3 * IVAS_LIMITER_THRESHOLD && *strong_saturation_cnt > 0 ) - { - apply_strong_limiting = 1; - } - else if ( max_val > 10 * IVAS_LIMITER_THRESHOLD ) - { - *strong_saturation_cnt += 20; - *strong_saturation_cnt = min( *strong_saturation_cnt, 50 ); - apply_strong_limiting = 1; - } - else - { - ( *strong_saturation_cnt )--; - *strong_saturation_cnt = max( *strong_saturation_cnt, 0 ); - } - - if ( apply_strong_limiting ) - { - if ( *frame_gain < 0.3f ) - { - *frame_gain /= 3.0f; - } - else - { - apply_strong_limiting = 0; - } - } - - return apply_strong_limiting; -} -#else static Word16 detect_strong_saturations_fx( const Word16 BER_detect, /* i : BER detect flag */ Word16 *strong_saturation_cnt, /* i/o: counter of strong saturations */ @@ -169,7 +116,6 @@ static Word16 detect_strong_saturations_fx( return apply_strong_limiting; } -#endif /*-------------------------------------------------------------------* @@ -179,7 +125,6 @@ static Word16 detect_strong_saturations_fx( *-------------------------------------------------------------------*/ /*! r : limiter struct handle */ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_limiter_open_fx( IVAS_LIMITER_HANDLE *hLimiter_out, /* o : limiter struct handle */ const Word16 max_num_channels, /* i : maximum number of I/O channels to be processed */ @@ -252,49 +197,6 @@ ivas_error ivas_limiter_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_limiter_open( - IVAS_LIMITER_HANDLE *hLimiter_out, /* o : limiter struct handle */ - const int16_t max_num_channels, /* i : maximum number of I/O channels to be processed */ - const int32_t sampling_rate /* i : sampling rate for processing */ -) -{ - int16_t i; - IVAS_LIMITER_HANDLE hLimiter; - - if ( max_num_channels <= 0 || sampling_rate <= 0 ) - { - return ( IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Wrong parameters for Limiter\n" ) ); - } - - if ( ( hLimiter = malloc( sizeof( IVAS_LIMITER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Limiter handle\n" ) ); - } - - hLimiter->max_num_channels = max_num_channels; - hLimiter->num_channels = max_num_channels; - - if ( ( hLimiter->channel_ptrs = malloc( max_num_channels * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Limiter handle\n" ) ); - } - hLimiter->sampling_rate = sampling_rate; - hLimiter->gain = 1.f; - hLimiter->release_heuristic = 0.f; - hLimiter->attack_constant = powf( 0.01f, 1.0f / ( IVAS_LIMITER_ATTACK_SECONDS * sampling_rate ) ); - hLimiter->strong_saturation_count = 0; - - for ( i = 0; i < max_num_channels; ++i ) - { - hLimiter->channel_ptrs[i] = NULL; - } - - *hLimiter_out = hLimiter; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -303,7 +205,6 @@ ivas_error ivas_limiter_open( * Deallocate limiter struct *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_limiter_close_fx( IVAS_LIMITER_HANDLE *phLimiter /* i/o: pointer to limiter handle, can be NULL */ ) @@ -320,23 +221,6 @@ void ivas_limiter_close_fx( return; } -#else -void ivas_limiter_close( - IVAS_LIMITER_HANDLE *phLimiter /* i/o: pointer to limiter handle, can be NULL */ -) -{ - if ( phLimiter == NULL || *phLimiter == NULL ) - { - return; - } - - free( ( *phLimiter )->channel_ptrs ); - free( *phLimiter ); - *phLimiter = NULL; - - return; -} -#endif /*-------------------------------------------------------------------* @@ -346,7 +230,6 @@ void ivas_limiter_close( * release time and special handling of bit errors *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_limiter_dec_fx( IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ Word32 *output[MAX_OUTPUT_CHANNELS], /* i/o: input/output buffer Q : q_factor */ @@ -382,39 +265,6 @@ void ivas_limiter_dec_fx( return; } -#else -void ivas_limiter_dec( - IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ - float *output[MAX_OUTPUT_CHANNELS], /* i/o: input/output buffer */ - const int16_t num_channels, /* i : number of channels to be processed */ - const int16_t output_frame, /* i : number of samples per channel in the buffer */ - const int16_t BER_detect /* i : BER detect flag */ -) -{ - int16_t c; - float **channels; - - /* return early if given bad parameters */ - if ( hLimiter == NULL || output == NULL || output_frame <= 0 ) - { - return; - } - - /* Update number of channels and prepare pointers to the beginning of each of them */ - assert( num_channels <= hLimiter->max_num_channels && "Number of channels must be lower than the maximum set during limiter initialization!" ); - hLimiter->num_channels = min( num_channels, hLimiter->max_num_channels ); - channels = hLimiter->channel_ptrs; - - for ( c = 0; c < num_channels; ++c ) - { - channels[c] = output[c]; - } - - limiter_process( hLimiter, output_frame, IVAS_LIMITER_THRESHOLD, BER_detect, &hLimiter->strong_saturation_count ); - - return; -} -#endif /*-------------------------------------------------------------------* @@ -425,7 +275,6 @@ void ivas_limiter_dec( * of calling this directly. *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void limiter_process_fx( IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ const Word16 output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ @@ -622,163 +471,3 @@ void limiter_process_fx( return; } -#else -void limiter_process( - IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ - const int16_t output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ - const float threshold, /* i : signal amplitude above which limiting starts to be applied */ - const int16_t BER_detect, /* i : BER detect flag */ - int16_t *strong_saturation_cnt /* i/o: counter of strong saturations (can be NULL) */ -) -{ - int16_t i, c; - float tmp, max_val; - float *sample; - float gain, frame_gain, attack_constant, release_constant; - float releaseHeuristic; - int16_t apply_limiting, apply_strong_limiting; - float **output; - int16_t num_channels; - int32_t sampling_rate; - - /* return early if given nonsensical values */ - if ( hLimiter == NULL || output_frame <= 0 ) - { - return; - } - - apply_limiting = 1; - apply_strong_limiting = 0; - - gain = hLimiter->gain; - output = hLimiter->channel_ptrs; - num_channels = hLimiter->num_channels; - sampling_rate = hLimiter->sampling_rate; - attack_constant = hLimiter->attack_constant; - - /*-----------------------------------------------------------------* - * Find highest absolute peak sample value - *-----------------------------------------------------------------*/ - - max_val = 0.f; - - for ( i = 0; i < output_frame; i++ ) - { - for ( c = 0; c < num_channels; c++ ) - { - tmp = fabsf( output[c][i] ); - if ( tmp > max_val ) - { - max_val = tmp; - } - } - } - - /* Release heuristic - * - * Value ranging from 0.f to 1.f. Increases on each frame that contains - * a sample with a value above threshold and decreases on each frame - * with all sample values below threshold. - * - * Values of 0 and 1 map to the shortest and longest release time, respectively. - * - * The goal of this heuristic is to avoid the "pumping" effect when only - * sharp transients exceed the threshold (use short release time), but also - * keep the gain curve smoother if the threshold is exceeded in many frames - * in a short span of time. - */ - releaseHeuristic = hLimiter->release_heuristic; - - if ( max_val > threshold ) - { - frame_gain = threshold / max_val; - - releaseHeuristic = min( 1.f, releaseHeuristic + ( 4.f * output_frame / sampling_rate ) ); - /* Unoptimized code for reference */ - /* releaseHeuristic = min( 1.f, releaseHeuristic + ( (float) 2.f * output_frame / sampling_rate / adaptiveReleaseWindowLengthInSeconds ) ); - * ^ - * React faster when release time should be increased - */ - } - else - { - releaseHeuristic = max( 0.f, releaseHeuristic - ( (float) output_frame / sampling_rate ) ); - /* Unoptimized code for reference */ - /* releaseHeuristic = max( 0.f, releaseHeuristic - ( (float) 0.5f * output_frame / sampling_rate / adaptiveReleaseWindowLengthInSeconds ) ); - * ^ - * React slower when release time should be decreased - */ - - /* No samples above threshold and gain from previous frame is already 1.f, - * therefore gain == 1.f for the entire frame. Skip processing. */ - if ( gain >= 1.f - EPSILON ) - { - apply_limiting = 0; - } - - /* No samples above threshold but gain from previous frame is not 1.f, - * transition to gain == 1.f */ - frame_gain = 1.f; - } - - /* Detection of very strong saturations */ - if ( strong_saturation_cnt != NULL ) - { - apply_strong_limiting = detect_strong_saturations( BER_detect, strong_saturation_cnt, max_val, &frame_gain ); - } - - /* Limit gain reduction to 20dB. Any peaks that require gain reduction - * higher than this are most likely due to bit errors during decoding */ - if ( frame_gain < 0.1f && !apply_strong_limiting ) - { - frame_gain = 0.1f; - } - - if ( apply_limiting ) - { - - /* 99% time constants of the gain curve - * - * The denominator of the second argument determines after how many - * samples the gain curve will reach 99% of its target value - */ - release_constant = powf( 0.01f, 1.0f / ( 0.005f * powf( 200.f, releaseHeuristic ) * sampling_rate ) ); - - /* Unoptimized code for reference */ - /* releaseTimeInSeconds = 0.005f * powf(200.f, releaseHeuristic); <-- Map heuristic value (0; 1) exponentially to range (0.005; 1) - * release_constant = powf( 0.01f, 1.0f / ( releaseTimeInSeconds * sampling_rate ) ); - */ - - /*-----------------------------------------------------------------* - * Apply limiting - *-----------------------------------------------------------------*/ - - for ( i = 0; i < output_frame; i++ ) - { - /* Update gain */ - if ( frame_gain < gain ) - { - gain = attack_constant * ( gain - frame_gain ) + frame_gain; - } - else - { - gain = release_constant * ( gain - frame_gain ) + frame_gain; - } - - for ( c = 0; c < num_channels; c++ ) - { - sample = &output[c][i]; - - /* Apply gain */ - *sample = gain * ( *sample ); - } - } - } - - /* Save last gain and release heuristic values for next frame */ - hLimiter->gain = gain; - hLimiter->release_heuristic = releaseHeuristic; - - return; -} -#endif diff --git a/lib_rend/ivas_masa_merge.c b/lib_rend/ivas_masa_merge.c index 64f387438..9e6807b00 100644 --- a/lib_rend/ivas_masa_merge.c +++ b/lib_rend/ivas_masa_merge.c @@ -38,29 +38,19 @@ #include "ivas_cnst.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void copy_masa_meta_tile_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta, const UWord8 sf, const UWord8 band ); static void full_stream_merge_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, Word32 inEne1[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word16 *inEne1_e, MASA_DECODER_EXT_OUT_META_HANDLE inMeta2, Word32 inEne2[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word16 *inEne2_e ); static void diffuse_meta_merge_1x1_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta, Word32 inEne_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word16 *inEne_e, MASA_DECODER_EXT_OUT_META_HANDLE inMetaISM, Word32 inEneISM_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], Word16 *inEneISM_e ); -#else -static void copy_masa_meta_tile( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta, const uint8_t sf, const uint8_t band ); - -static void full_stream_merge( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, float inEne1[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], MASA_DECODER_EXT_OUT_META_HANDLE inMeta2, float inEne2[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ); - -static void diffuse_meta_merge_1x1( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MASA_DECODER_EXT_OUT_META_HANDLE inMeta, float inEne[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], MASA_DECODER_EXT_OUT_META_HANDLE inMetaISM, float inEneISM[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] ); -#endif /*---------------------------------------------------------------------* @@ -69,7 +59,6 @@ static void diffuse_meta_merge_1x1( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, MA * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void copy_masa_meta_tile_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : metadata to be written */ MASA_DECODER_EXT_OUT_META_HANDLE inMeta, /* i : input metadata */ @@ -111,38 +100,6 @@ void copy_masa_meta_tile_fx( return; } -#else -void copy_masa_meta_tile( - MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : metadata to be written */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta, /* i : input metadata */ - const uint8_t sf, /* i : sub-frame index */ - const uint8_t band /* i : band index */ -) -{ - outMeta->directionIndex[0][sf][band] = inMeta->directionIndex[0][sf][band]; - outMeta->directToTotalRatio[0][sf][band] = inMeta->directToTotalRatio[0][sf][band]; - outMeta->spreadCoherence[0][sf][band] = inMeta->spreadCoherence[0][sf][band]; - - outMeta->surroundCoherence[sf][band] = inMeta->surroundCoherence[sf][band]; - outMeta->diffuseToTotalRatio[sf][band] = inMeta->diffuseToTotalRatio[sf][band]; - - if ( inMeta->descriptiveMeta.numberOfDirections == 1 ) - { - outMeta->directionIndex[1][sf][band] = inMeta->directionIndex[1][sf][band]; - outMeta->directToTotalRatio[1][sf][band] = inMeta->directToTotalRatio[1][sf][band]; - outMeta->spreadCoherence[1][sf][band] = inMeta->spreadCoherence[1][sf][band]; - } - else - { - /* make sure the output has zeroed data in the second direction */ - outMeta->directionIndex[1][sf][band] = SPH_IDX_FRONT; - outMeta->directToTotalRatio[1][sf][band] = 0u; - outMeta->spreadCoherence[1][sf][band] = 0u; - } - - return; -} -#endif /*---------------------------------------------------------------------* * copy_masa_descriptive_meta() @@ -150,7 +107,6 @@ void copy_masa_meta_tile( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void copy_masa_descriptive_meta_fx( MASA_DECRIPTIVE_META *outMeta, /* o : metadata to be written */ MASA_DECRIPTIVE_META *inMeta /* i : input metadata */ @@ -179,28 +135,6 @@ void copy_masa_descriptive_meta_fx( return; } -#else -void copy_masa_descriptive_meta( - MASA_DECRIPTIVE_META *outMeta, /* o : metadata to be written */ - MASA_DECRIPTIVE_META *inMeta /* i : input metadata */ -) -{ - uint8_t char_idx; - for ( char_idx = 0; char_idx < 8; char_idx++ ) - { - outMeta->formatDescriptor[char_idx] = inMeta->formatDescriptor[char_idx]; - } - outMeta->numberOfDirections = inMeta->numberOfDirections; - outMeta->numberOfChannels = inMeta->numberOfChannels; - outMeta->sourceFormat = inMeta->sourceFormat; - outMeta->transportDefinition = inMeta->transportDefinition; - outMeta->channelAngle = inMeta->channelAngle; - outMeta->channelDistance = inMeta->channelDistance; - outMeta->channelLayout = inMeta->channelLayout; - - return; -} -#endif /*---------------------------------------------------------------------* * diffuse_meta_merge_1x1() @@ -208,80 +142,6 @@ void copy_masa_descriptive_meta( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void diffuse_meta_merge_1x1( - MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta, /* i : Input metadata 1 */ - float inEne[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : TF-energy of input 1 */ - MASA_DECODER_EXT_OUT_META_HANDLE inMetaISM, /* i : Input metadata 2 */ - float inEneISM[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : TF-energy of input 2 */ -) -{ - int8_t sf, band; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - float energyTimesRatio, energyTimesRatioISM, total_diff_nrg, dir_nrg_ratio, total_nrg; - float dir_ratio_ism; - - energyTimesRatio = (float) ( inMeta->directToTotalRatio[0][sf][band] ) / UINT8_MAX * inEne[sf][band]; - - total_nrg = inEne[sf][band] + inEneISM[sf][band]; - - /* target is original MASA diffuseness */ - total_diff_nrg = (float) ( inMeta->diffuseToTotalRatio[sf][band] ) / UINT8_MAX * inEne[sf][band]; - /* criterion is mean of ISM ratio and new ratio */ - dir_ratio_ism = (float) ( inMetaISM->directToTotalRatio[0][sf][band] ) / UINT8_MAX; - - energyTimesRatioISM = ( dir_ratio_ism + ( 1.0f - total_diff_nrg / ( EPSILON + total_nrg ) ) ) / 2.0f * inEneISM[sf][band]; - - if ( energyTimesRatioISM > energyTimesRatio ) - { - float new_dir_ratio, new_diff_ratio; - outMeta->directionIndex[0][sf][band] = inMetaISM->directionIndex[0][sf][band]; - outMeta->directToTotalRatio[0][sf][band] = inMetaISM->directToTotalRatio[0][sf][band]; - outMeta->spreadCoherence[0][sf][band] = inMetaISM->spreadCoherence[0][sf][band]; - - outMeta->surroundCoherence[sf][band] = inMetaISM->surroundCoherence[sf][band]; - - dir_nrg_ratio = 1.0f - total_diff_nrg / ( EPSILON + total_nrg ); /* new dir ratio */ - new_dir_ratio = min( dir_nrg_ratio, dir_ratio_ism ); /* clip with original ISM dir */ - outMeta->directToTotalRatio[0][sf][band] = (uint8_t) floorf( new_dir_ratio * UINT8_MAX ); - new_diff_ratio = 1.0f - new_dir_ratio; - outMeta->diffuseToTotalRatio[sf][band] = (uint8_t) floorf( new_diff_ratio * UINT8_MAX ); - } - else - { - /* use the plain original meta for this tile */ - outMeta->directionIndex[0][sf][band] = inMeta->directionIndex[0][sf][band]; - outMeta->directToTotalRatio[0][sf][band] = inMeta->directToTotalRatio[0][sf][band]; - outMeta->spreadCoherence[0][sf][band] = inMeta->spreadCoherence[0][sf][band]; - - outMeta->surroundCoherence[sf][band] = inMeta->surroundCoherence[sf][band]; - outMeta->diffuseToTotalRatio[sf][band] = inMeta->diffuseToTotalRatio[sf][band]; - } - outMeta->directionIndex[1][sf][band] = SPH_IDX_FRONT; - outMeta->directToTotalRatio[1][sf][band] = 0u; - outMeta->spreadCoherence[1][sf][band] = 0u; - - inEne[sf][band] += inEneISM[sf][band]; /* Update energy for subsequent mergings */ - } - } - - /* Set descriptive meta for mixed format */ - outMeta->descriptiveMeta.sourceFormat = 0u; - outMeta->descriptiveMeta.transportDefinition = 0u; - outMeta->descriptiveMeta.channelAngle = 0u; - outMeta->descriptiveMeta.channelDistance = 0u; - outMeta->descriptiveMeta.channelLayout = 0u; - outMeta->descriptiveMeta.numberOfDirections = 0u; - /* Number of transports should be set outside. */ - - return; -} -#else void diffuse_meta_merge_1x1_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ MASA_DECODER_EXT_OUT_META_HANDLE inMeta, /* i : Input metadata 1 */ @@ -449,7 +309,6 @@ void diffuse_meta_merge_1x1_fx( return; } -#endif /*---------------------------------------------------------------------* * full_stream_merge() @@ -457,72 +316,6 @@ void diffuse_meta_merge_1x1_fx( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void full_stream_merge( - MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ - float inEne1[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i/o: TF-energy of input 1. after merge, contains the energy of the merged signal */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta2, /* i : Input metadata 2 */ - float inEne2[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : TF-energy of input 2 */ -) -{ - float dir_nrg_1, dir_nrg_2; - uint8_t n_dirs_1, n_dirs_2; - uint8_t sf, band; - - /* full stream select based on total direct energy */ - n_dirs_1 = inMeta1->descriptiveMeta.numberOfDirections + 1u; /* to 1-based */ - n_dirs_2 = inMeta2->descriptiveMeta.numberOfDirections + 1u; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - dir_nrg_1 = (float) ( inMeta1->directToTotalRatio[0][sf][band] ) / UINT8_MAX * inEne1[sf][band]; - dir_nrg_2 = (float) ( inMeta2->directToTotalRatio[0][sf][band] ) / UINT8_MAX * inEne2[sf][band]; - - if ( n_dirs_1 == 2 ) - { - dir_nrg_1 += (float) ( inMeta1->directToTotalRatio[1][sf][band] ) / UINT8_MAX * inEne1[sf][band]; - } - - if ( n_dirs_2 == 2 ) - { - dir_nrg_2 += (float) ( inMeta2->directToTotalRatio[1][sf][band] ) / UINT8_MAX * inEne2[sf][band]; - } - - if ( dir_nrg_1 > dir_nrg_2 ) - { - copy_masa_meta_tile( outMeta, inMeta1, sf, band ); - } - else - { - copy_masa_meta_tile( outMeta, inMeta2, sf, band ); - } - - inEne1[sf][band] += inEne2[sf][band]; /* Update energy for subsequent mergings */ - } - } - - /* Set descriptive meta for mixed format */ - outMeta->descriptiveMeta.sourceFormat = 0u; - outMeta->descriptiveMeta.transportDefinition = 0u; - outMeta->descriptiveMeta.channelAngle = 0u; - outMeta->descriptiveMeta.channelDistance = 0u; - outMeta->descriptiveMeta.channelLayout = 0u; - if ( n_dirs_1 == 2 || n_dirs_2 == 2 ) - { - outMeta->descriptiveMeta.numberOfDirections = 1u; - } - else - { - outMeta->descriptiveMeta.numberOfDirections = 0u; - } - /* Number of transports should be set outside. */ - - return; -} -#else void full_stream_merge_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ @@ -633,7 +426,6 @@ void full_stream_merge_fx( return; } -#endif /*---------------------------------------------------------------------* * ivas_prerend_merge_masa_metadata() @@ -641,36 +433,6 @@ void full_stream_merge_fx( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_prerend_merge_masa_metadata( - MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ - IVAS_REND_AudioConfigType inType1, /* i : Type of input 1 */ - float inEne1[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i/o: TF-energy of input 1. after merge, contains the energy of the merged signal */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta2, /* i : Input metadata 2 */ - IVAS_REND_AudioConfigType inType2, /* i : Type of input 2 */ - float inEne2[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : TF-energy of input 2 */ -) -{ - /* mixing ISMs with non-ISM use different merge */ - if ( inType1 == IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED && inType2 != IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED && ( inMeta1->descriptiveMeta.numberOfDirections == 0u && inMeta2->descriptiveMeta.numberOfDirections == 0u ) ) - { - /* meta_1 is ISM and both are 1dir */ - diffuse_meta_merge_1x1( outMeta, inMeta2, inEne2, inMeta1, inEne1 ); - } - else if ( inType2 == IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED && inType1 != IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED && ( inMeta1->descriptiveMeta.numberOfDirections == 0u && inMeta2->descriptiveMeta.numberOfDirections == 0u ) ) - { - /* meta_2 is ISM and both are 1dir */ - diffuse_meta_merge_1x1( outMeta, inMeta1, inEne1, inMeta2, inEne2 ); - } - else - { - full_stream_merge( outMeta, inMeta1, inEne1, inMeta2, inEne2 ); - } - - return; -} -#else void ivas_prerend_merge_masa_metadata_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ @@ -709,7 +471,6 @@ void ivas_prerend_merge_masa_metadata_fx( return; } -#endif /*---------------------------------------------------------------------* * masaPrerendOpen() @@ -717,58 +478,6 @@ void ivas_prerend_merge_masa_metadata_fx( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error masaPrerendOpen( - MASA_PREREND_HANDLE *hMasaPrerendPtr, /* o : handle to the opened prerenderer */ - int16_t numTransports, /* i : number of transport channels */ - int32_t input_Fs /* i : signal sampling rate */ -) -{ - MASA_PREREND_HANDLE hMasaPrerend; - int16_t i; - ivas_error error; - - error = IVAS_ERR_OK; - - hMasaPrerend = (MASA_PREREND_HANDLE) malloc( sizeof( MASA_PREREND_DATA ) ); - if ( hMasaPrerend == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA prerenderer\n" ) ); - } - - hMasaPrerend->num_Cldfb_instances = numTransports; - for ( i = 0; i < hMasaPrerend->num_Cldfb_instances; i++ ) - { - if ( ( error = openCldfb_ivas( &( hMasaPrerend->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - for ( ; i < MASA_MAX_TRANSPORT_CHANNELS; i++ ) - { - hMasaPrerend->cldfbAnaEnc[i] = NULL; - } - - if ( ( hMasaPrerend->hMasaOut = (MASA_DECODER_EXT_OUT_META_HANDLE) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA prerenderer\n" ) ); - } - - if ( ( hMasaPrerend->sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA prerenderer\n" ) ); - } - generate_gridEq( hMasaPrerend->sph_grid16 ); - - if ( error == IVAS_ERR_OK ) - { - *hMasaPrerendPtr = hMasaPrerend; - } - - return error; -} - -#else ivas_error masaPrerendOpen_fx( MASA_PREREND_HANDLE *hMasaPrerendPtr, /* o : handle to the opened prerenderer */ Word16 numTransports, /* i : number of transport channels */ @@ -820,7 +529,6 @@ ivas_error masaPrerendOpen_fx( return error; } -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * masaPrerendClose() @@ -828,7 +536,6 @@ ivas_error masaPrerendOpen_fx( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void masaPrerendClose_fx( MASA_PREREND_HANDLE *hMasaPrerendPtr /* i/o: prerenderer handle to be closed */ ) @@ -856,31 +563,3 @@ void masaPrerendClose_fx( return; } -#else -void masaPrerendClose( - MASA_PREREND_HANDLE *hMasaPrerendPtr /* i/o: prerenderer handle to be closed */ -) -{ - int16_t i; - - if ( hMasaPrerendPtr == NULL || *hMasaPrerendPtr == NULL ) - { - return; - } - - for ( i = 0; i < ( *hMasaPrerendPtr )->num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hMasaPrerendPtr )->cldfbAnaEnc[i] ) ); - } - - free( ( *hMasaPrerendPtr )->hMasaOut ); - ( *hMasaPrerendPtr )->hMasaOut = NULL; - free( ( *hMasaPrerendPtr )->sph_grid16 ); - ( *hMasaPrerendPtr )->sph_grid16 = NULL; - - free( ( *hMasaPrerendPtr ) ); - ( *hMasaPrerendPtr ) = NULL; - - return; -} -#endif diff --git a/lib_rend/ivas_mcmasa_ana.c b/lib_rend/ivas_mcmasa_ana.c index 7928c75d5..5327cd3c5 100644 --- a/lib_rend/ivas_mcmasa_ana.c +++ b/lib_rend/ivas_mcmasa_ana.c @@ -42,10 +42,8 @@ #include "ivas_rom_com.h" #include "wmc_auto.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------- * Local constants @@ -66,14 +64,11 @@ typedef struct { float xr[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; float xi[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; -#ifdef IVAS_FLOAT_FIXED Word32 xr_fx[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; Word32 xi_fx[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; Word16 xr_e[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; /*Stores exponent for xr_fx*/ Word16 xi_e[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; /*Stores exponent for xi_fx*/ -#endif // IVAS_FLOAT_FIXED } CovarianceMatrix; -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_param_est_ana_fx( MCMASA_ANA_HANDLE hMcMasa, /* i : McMASA analyzer structure */ Word32 data_fx[][L_FRAME48k], /* i : Audio frame in MC-format */ @@ -86,23 +81,8 @@ void ivas_mcmasa_param_est_ana_fx( const Word16 input_frame, /* i : Input frame size */ const Word16 nchan_inp /* i : Number of input channels */ ); -#else -void ivas_mcmasa_param_est_ana( MCMASA_ANA_HANDLE hMcMasa, float data_f[][L_FRAME48k], float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const int16_t input_frame, const int16_t nchan_inp ); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -static void ivas_mcmasa_dmx( MCMASA_ANA_HANDLE hMcMasa, float data_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_transport, const int16_t nchan_inp ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void compute_cov_mtx( float sr[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX], float si[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX], const int16_t freq, const int16_t N, CovarianceMatrix *COVls ); -#endif - -#ifndef IVAS_FLOAT_FIXED -static void computeVerticalDiffuseness( float **buffer_intensity, const float *buffer_energy, const int16_t num_freq_bands, float *diffuseness ); -#endif - -#ifdef IVAS_FLOAT_FIXED static void computeVerticalDiffuseness_fx( Word32 **buffer_intensity, /* i : Intensity vectors */ const Word32 *buffer_energy, /* i : Energy */ @@ -131,12 +111,6 @@ static void ivas_mcmasa_dmx_fx( const Word16 nchan_transport, const Word16 nchan_inp ); -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void computeEvenLayout( const float *ls_azimuth, float *ls_azimuth_even, const int16_t numChannels ); -#endif - /*--------------------------------------------------------------------------* * ivas_mcmasa_ana_open() @@ -144,7 +118,6 @@ static void computeEvenLayout( const float *ls_azimuth, float *ls_azimuth_even, * *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_mcmasa_ana_open( MCMASA_ANA_HANDLE *hMcMasaPtr, /* i/o: McMASA data handle pointer */ const AUDIO_CONFIG inConfig, /* i : Input config */ @@ -422,226 +395,6 @@ ivas_error ivas_mcmasa_ana_open( return error; } -#else -ivas_error ivas_mcmasa_ana_open( - MCMASA_ANA_HANDLE *hMcMasaPtr, /* i/o: McMASA data handle pointer */ - const AUDIO_CONFIG inConfig, /* i : Input config */ - int32_t input_Fs /* i : Sampling frequency */ -) -{ - int16_t i, j; - MCMASA_ANA_HANDLE hMcMasa; - float ls_azimuth[MCMASA_MAX_ANA_CHANS]; - float ls_elevation[MCMASA_MAX_ANA_CHANS]; - float ls_azimuth_even[MCMASA_MAX_ANA_CHANS]; - int16_t nchan_inp; - int16_t numAnalysisChannels; - float left_min, right_min, azi_diff; - int16_t maxBin, input_frame; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( hMcMasa = (MCMASA_ANA_HANDLE) malloc( sizeof( MCMASA_ANA_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - if ( inConfig == IVAS_AUDIO_CONFIG_5_1 ) - { - nchan_inp = 6; - mvr2r( ls_azimuth_CICP6, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP6, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 1; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_7_1 ) - { - nchan_inp = 8; - mvr2r( ls_azimuth_CICP12, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP12, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 7; - hMcMasa->isHorizontalSetup = 1; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_2 ) - { - nchan_inp = 8; - mvr2r( ls_azimuth_CICP14, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP14, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 0; - } - else if ( inConfig == IVAS_AUDIO_CONFIG_5_1_4 ) - { - nchan_inp = 10; - mvr2r( ls_azimuth_CICP16, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP16, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 5; - hMcMasa->isHorizontalSetup = 0; - } - else - { - nchan_inp = 12; - mvr2r( ls_azimuth_CICP19, ls_azimuth, nchan_inp - 1 ); - mvr2r( ls_elevation_CICP19, ls_elevation, nchan_inp - 1 ); - hMcMasa->numHorizontalChannels = 7; - hMcMasa->isHorizontalSetup = 0; - } - - numAnalysisChannels = nchan_inp - 1; - - /* Determine the number of bands */ - hMcMasa->nbands = MASA_FREQUENCY_BANDS; - - /* Determine band grouping */ - mvs2s( MASA_band_grouping_24, hMcMasa->band_grouping, 24 + 1 ); - - maxBin = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - for ( i = 1; i < hMcMasa->nbands + 1; i++ ) - { - if ( hMcMasa->band_grouping[i] >= maxBin ) - { - hMcMasa->band_grouping[i] = maxBin; - hMcMasa->nbands = i; - break; - } - } - - /* Determine block grouping */ - mvs2s( DirAC_block_grouping, hMcMasa->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - - /* open/initialize CLDFB */ - hMcMasa->num_Cldfb_instances = numAnalysisChannels; - for ( i = 0; i < hMcMasa->num_Cldfb_instances; i++ ) - { - if ( ( error = openCldfb_ivas( &( hMcMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hMcMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hMcMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); - } - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( ( hMcMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); - } - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( ( hMcMasa->buffer_intensity_real_vert[j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) ); - } - set_zero( hMcMasa->buffer_intensity_real_vert[j], MASA_FREQUENCY_BANDS ); - } - - set_zero( hMcMasa->buffer_energy, DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS ); - - computeEvenLayout( ls_azimuth, ls_azimuth_even, hMcMasa->numHorizontalChannels ); - - if ( !hMcMasa->isHorizontalSetup ) - { - computeEvenLayout( &ls_azimuth[hMcMasa->numHorizontalChannels], &ls_azimuth_even[hMcMasa->numHorizontalChannels], numAnalysisChannels - hMcMasa->numHorizontalChannels ); - } - - for ( i = 0; i < numAnalysisChannels; i++ ) - { - hMcMasa->chnlToFoaMtx[0][i] = 1.0f; - hMcMasa->chnlToFoaMtx[1][i] = sinf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaMtx[2][i] = sinf( ls_elevation[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaMtx[3][i] = cosf( ls_azimuth[i] * PI_OVER_180 ) * cosf( ls_elevation[i] * PI_OVER_180 ); - - hMcMasa->chnlToFoaEvenMtx[0][i] = 1.0f; - hMcMasa->chnlToFoaEvenMtx[1][i] = sinf( ls_azimuth_even[i] * PI_OVER_180 ); - hMcMasa->chnlToFoaEvenMtx[2][i] = 0.0f; - hMcMasa->chnlToFoaEvenMtx[3][i] = cosf( ls_azimuth_even[i] * PI_OVER_180 ); - } - - mvr2r( ls_azimuth, hMcMasa->ls_azimuth, numAnalysisChannels ); - - for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) - { - left_min = 360.0f; - right_min = -360.0f; - - for ( j = 0; j < hMcMasa->numHorizontalChannels; j++ ) - { - azi_diff = ls_azimuth[j] - ls_azimuth[i]; - - if ( azi_diff > 180.0f ) - { - azi_diff -= 360.0f; - } - else if ( azi_diff < -180.0f ) - { - azi_diff += 360.0f; - } - - if ( azi_diff < left_min && azi_diff > 0.0f ) - { - hMcMasa->leftNearest[i] = j; - left_min = azi_diff; - } - - if ( azi_diff > right_min && azi_diff < 0.0f ) - { - hMcMasa->rightNearest[i] = j; - right_min = azi_diff; - } - } - } - - hMcMasa->prevMultiChEne = 0.0f; - hMcMasa->prevDownmixEne = 0.0f; - hMcMasa->prevEQ = 1.0f; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - for ( i = 0; i < input_frame; i++ ) - { - hMcMasa->interpolator[i] = ( (float) i ) / ( (float) input_frame ); - } - - hMcMasa->index_buffer_intensity = 0; - - if ( ( hMcMasa->hMasaOut = (MASA_DECODER_EXT_OUT_META_HANDLE) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - if ( ( hMcMasa->sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - generate_gridEq( hMcMasa->sph_grid16 ); - - ( *hMcMasaPtr ) = hMcMasa; - - return error; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * ivas_mcmasa_ana_close() @@ -649,7 +402,6 @@ ivas_error ivas_mcmasa_ana_open( * *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_ana_close( MCMASA_ANA_HANDLE *hMcMasa /* i/o: analysis McMASA handle */ ) @@ -702,59 +454,6 @@ void ivas_mcmasa_ana_close( return; } -#else -void ivas_mcmasa_ana_close( - MCMASA_ANA_HANDLE *hMcMasa /* i/o: analysis McMASA handle */ -) -{ - int16_t i, j; - - if ( hMcMasa == NULL || *hMcMasa == NULL ) - { - return; - } - - for ( i = 0; i < ( *hMcMasa )->num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hMcMasa )->cldfbAnaEnc[i] ) ); - } - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - free( ( *hMcMasa )->direction_vector_m[i][j] ); - ( *hMcMasa )->direction_vector_m[i][j] = NULL; - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - free( ( *hMcMasa )->buffer_intensity_real[i][j] ); - ( *hMcMasa )->buffer_intensity_real[i][j] = NULL; - } - - free( ( *hMcMasa )->direction_vector_m[i] ); - ( *hMcMasa )->direction_vector_m[i] = NULL; - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - free( ( *hMcMasa )->buffer_intensity_real_vert[j] ); - ( *hMcMasa )->buffer_intensity_real_vert[j] = NULL; - } - - free( ( *hMcMasa )->hMasaOut ); - ( *hMcMasa )->hMasaOut = NULL; - free( ( *hMcMasa )->sph_grid16 ); - ( *hMcMasa )->sph_grid16 = NULL; - - free( ( *hMcMasa ) ); - ( *hMcMasa ) = NULL; - - return; -} -#endif // IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* @@ -763,7 +462,6 @@ void ivas_mcmasa_ana_close( * Multichannel MASA analysis *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_ana_fx( MCMASA_ANA_HANDLE hMcMasa, /* i/o: McMASA encoder handle */ Word32 data[][L_FRAME48k], /* i/o: Input / transport audio signals */ @@ -800,42 +498,6 @@ void ivas_mcmasa_ana_fx( return; } -#else -void ivas_mcmasa_ana( - MCMASA_ANA_HANDLE hMcMasa, /* i/o: McMASA encoder handle */ - float data_f[][L_FRAME48k], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_inp /* i : Number of input channels */ -) -{ - int16_t i; - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - - - /* Sum center and LFE, move surround channels */ - v_add( data_f[2], data_f[3], data_f[2], input_frame ); - for ( i = 4; i < nchan_inp; i++ ) - { - mvr2r( data_f[i], data_f[i - 1], input_frame ); - } - - /* Analysis */ - ivas_mcmasa_param_est_ana( hMcMasa, data_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, nchan_inp ); - - /* Create MASA metadata buffer from the estimated values */ - ivas_create_masa_out_meta( hMcMasa->hMasaOut, hMcMasa->sph_grid16, nchan_transport, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence ); - - /* Downmix */ - ivas_mcmasa_dmx( hMcMasa, data_f, input_frame, nchan_transport, nchan_inp ); - - return; -} -#endif /*--------------------------------------------------------------------------* @@ -843,7 +505,6 @@ void ivas_mcmasa_ana( *--------------------------------------------------------------------------*/ /* Estimate metadata parameters for McMASA */ -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_param_est_ana_fx( MCMASA_ANA_HANDLE hMcMasa, /* i : McMASA analyzer structure */ Word32 data_fx[][L_FRAME48k], /* i : Audio frame in MC-format */ @@ -1559,562 +1220,65 @@ void ivas_mcmasa_param_est_ana_fx( } return; } -#else // IVAS_FLOAT_FIXED -void ivas_mcmasa_param_est_ana( - MCMASA_ANA_HANDLE hMcMasa, /* i : McMASA analyzer structure */ - float data_f[][L_FRAME48k], /* i : Audio frame in MC-format */ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated elevation */ - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated azimuth */ - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated direct-to-total ratio */ - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated spread coherence */ - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* o : Estimated surround coherence */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_inp /* i : Number of input channels */ -) + +static void ivas_mcmasa_dmx_fx( + MCMASA_ANA_HANDLE hMcMasa, + Word32 data_f_fx[][L_FRAME48k], + Word16 data_e, + const Word16 input_frame, + const Word16 nchan_transport, + const Word16 nchan_inp ) { - float reference_power[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - int16_t ts, i, j, d; - int16_t num_freq_bins, num_freq_bands, index; - float dir_v[DIRAC_NUM_DIMS]; - int16_t l_ts; - float Chnl_RealBuffer[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX]; - float Chnl_ImagBuffer[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX]; - float Foa_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Foa_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float FoaEven_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float FoaEven_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float intensity_even_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float diffuseness_vector[MASA_FREQUENCY_BANDS]; - float vertical_diffuseness_vector[MASA_FREQUENCY_BANDS]; - float diffuseness_m[MASA_FREQUENCY_BANDS]; - float coherentEnergyRatio[MASA_FREQUENCY_BANDS]; - int16_t band_m_idx, block_m_idx; - float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; - float norm_tmp; - int16_t mrange[2], brange[2]; - CovarianceMatrix COVls[MASA_FREQUENCY_BANDS]; - float absCOVls[MCMASA_MAX_ANA_CHANS][MCMASA_MAX_ANA_CHANS]; - float lsEnergy[MCMASA_MAX_ANA_CHANS]; - float lsEnergySum, maxEne; - int16_t loudestCh; - float surrCoh, tempCoh, tempCoh2; - int16_t i1, i2, i3; - float angleDist, minAngleDist; - float currentAzi; - float lsEnergyRelation; - float tempLsEnergyRelation; - float stereoness, cohwideness, spreadCoh; - float stereoRatio, cohPanRatio; - float stereoCoh, cohPanCoh, cohRatio; - int16_t numAnalysisChannels; + Word16 i, j; + Word16 numAnalysisChannels; - num_freq_bins = hMcMasa->cldfbAnaEnc[0]->no_channels; - num_freq_bands = hMcMasa->nbands; - l_ts = input_frame / CLDFB_NO_COL_MAX; - numAnalysisChannels = nchan_inp - 1; + Word32 dmx_c_fx; + Word32 multiChEne_fx, downmixEne_fx; + Word32 prevEQ_fx, currEQ_fx, instEQ_fx; + Word32 alpha_fx, L_tmp, L_tmp1; + Word16 multiChEne_e, scale, downmixEne_e = 0, prevEQ_e, tmp, currEQ_e, instEQ_e; + move16(); - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hMcMasa->block_grouping[block_m_idx]; - mrange[1] = hMcMasa->block_grouping[block_m_idx + 1]; + numAnalysisChannels = sub( nchan_inp, 1 ); - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) + multiChEne_fx = 0; + move32(); + multiChEne_e = 0; + move16(); + + FOR( j = 0; j < numAnalysisChannels; j++ ) + { + FOR( i = 0; i < input_frame; i++ ) { - hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] = 0; - hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] = 0; - hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] = 0; + L_tmp1 = BASOP_Util_Add_Mant32Exp( data_f_fx[j][i], data_e, 0, 0, &scale ); + L_tmp = Mpy_32_32( L_tmp1, L_tmp1 ); // data_e + data_e + multiChEne_fx = BASOP_Util_Add_Mant32Exp( L_tmp, scale + scale, multiChEne_fx, multiChEne_e, &scale ); + multiChEne_e = scale; + move16(); } + } - /* Need to initialize renormalization_factors, and variables to be normalized */ - set_zero( renormalization_factor_diff, hMcMasa->nbands ); - set_zero( diffuseness_m, hMcMasa->nbands ); - set_zero( hMcMasa->energy[block_m_idx], MASA_FREQUENCY_BANDS ); + IF( EQ_16( nchan_transport, 2 ) ) + { + Word16 numSideChannels; /* Channels other than left, right, center */ + Word16 leftIndex, rightIndex; - /* Reset variable */ - for ( i = 0; i < hMcMasa->nbands; i++ ) + numSideChannels = sub( shr( numAnalysisChannels, 1 ), 1 ); + FOR( j = 0; j < numSideChannels; j++ ) { - for ( j = 0; j < numAnalysisChannels; j++ ) + leftIndex = add( shl( j, 1 ), 3 ); + rightIndex = add( shl( j, 1 ), 4 ); + + FOR( i = 0; i < input_frame; i++ ) { - set_zero( COVls[i].xr[j], numAnalysisChannels ); - set_zero( COVls[i].xi[j], numAnalysisChannels ); + data_f_fx[0][i] = L_add( data_f_fx[0][i], data_f_fx[leftIndex][i] ); + move32(); + data_f_fx[1][i] = L_add( data_f_fx[1][i], data_f_fx[rightIndex][i] ); + move32(); } } - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < numAnalysisChannels; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hMcMasa->cldfbAnaEnc[i] ); - } - - /* Compute channel-based energy for metadata processing */ - for ( band_m_idx = 0; band_m_idx < num_freq_bands; band_m_idx++ ) - { - brange[0] = hMcMasa->band_grouping[band_m_idx]; - brange[1] = hMcMasa->band_grouping[band_m_idx + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - for ( i = 0; i < numAnalysisChannels; i++ ) - { - hMcMasa->energy[block_m_idx][band_m_idx] += Chnl_RealBuffer[i][j] * Chnl_RealBuffer[i][j] + Chnl_ImagBuffer[i][j] * Chnl_ImagBuffer[i][j]; - } - } - } - - /* Compute covariance matrix */ - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = hMcMasa->band_grouping[i]; - brange[1] = hMcMasa->band_grouping[i + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - compute_cov_mtx( Chnl_RealBuffer, Chnl_ImagBuffer, j, numAnalysisChannels, &( COVls[i] ) ); - } - } - - /* Compute standard FOA */ - /* W */ - v_add( Chnl_RealBuffer[0], Chnl_RealBuffer[1], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[0], Chnl_ImagBuffer[1], Foa_ImagBuffer[0], num_freq_bins ); - for ( i = 2; i < numAnalysisChannels; i++ ) - { - v_add( Chnl_RealBuffer[i], Foa_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[i], Foa_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - } - - /* Y */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[1][0], Foa_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[1][i], Foa_ImagBuffer[1], num_freq_bins ); - } - - /* Z */ - if ( hMcMasa->isHorizontalSetup ) - { - /* Set zero for horizontal setups */ - set_zero( Foa_RealBuffer[2], num_freq_bins ); - set_zero( Foa_ImagBuffer[2], num_freq_bins ); - } - else - { - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_RealBuffer[2], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[2][0], Foa_ImagBuffer[2], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_RealBuffer[2], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[2][i], Foa_ImagBuffer[2], num_freq_bins ); - } - } - - /* X */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaMtx[3][0], Foa_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaMtx[3][i], Foa_ImagBuffer[3], num_freq_bins ); - } - - /* Compute even FOA */ - /* W */ - mvr2r( Foa_RealBuffer[0], FoaEven_RealBuffer[0], num_freq_bins ); - mvr2r( Foa_ImagBuffer[0], FoaEven_ImagBuffer[0], num_freq_bins ); - - /* Y */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[1][0], FoaEven_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[1][i], FoaEven_ImagBuffer[1], num_freq_bins ); - } - - /* Z (even setups are handled as horizontal) */ - set_zero( FoaEven_RealBuffer[2], num_freq_bins ); - set_zero( FoaEven_ImagBuffer[2], num_freq_bins ); - - /* X */ - v_multc( Chnl_RealBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hMcMasa->chnlToFoaEvenMtx[3][0], FoaEven_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < numAnalysisChannels; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hMcMasa->chnlToFoaEvenMtx[3][i], FoaEven_ImagBuffer[3], num_freq_bins ); - } - - /* Direction estimation */ - computeIntensityVector_ana( hMcMasa->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, num_freq_bands, intensity_real ); - computeDirectionVectors( intensity_real[0], intensity_real[1], intensity_real[2], 0, num_freq_bands, direction_vector[0], direction_vector[1], direction_vector[2] ); - - /* Power and intensity estimation for diffuseness */ - computeIntensityVector_ana( hMcMasa->band_grouping, FoaEven_RealBuffer, FoaEven_ImagBuffer, num_freq_bands, intensity_even_real ); - computeReferencePower_ana( hMcMasa->band_grouping, FoaEven_RealBuffer, FoaEven_ImagBuffer, reference_power[ts], num_freq_bands ); - - /* Fill buffers of length "averaging_length" time slots for intensity and energy */ - hMcMasa->index_buffer_intensity = ( hMcMasa->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ - index = hMcMasa->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_even_real[i], &( hMcMasa->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power[ts], &( hMcMasa->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness( hMcMasa->buffer_intensity_real, hMcMasa->buffer_energy, num_freq_bands, diffuseness_vector ); - - /* Compute vertical diffuseness, and tune original diffuseness if needed */ - if ( !hMcMasa->isHorizontalSetup ) - { - mvr2r( intensity_real[2], &( hMcMasa->buffer_intensity_real_vert[index - 1][0] ), num_freq_bands ); - computeVerticalDiffuseness( hMcMasa->buffer_intensity_real_vert, hMcMasa->buffer_energy, num_freq_bands, vertical_diffuseness_vector ); - v_min( diffuseness_vector, vertical_diffuseness_vector, diffuseness_vector, num_freq_bands ); - } - - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[ts][band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hMcMasa->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hMcMasa->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hMcMasa->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - - diffuseness_m[band_m_idx] += reference_power[ts][band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[ts][band_m_idx]; - } - } - - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hMcMasa->direction_vector_m[d][block_m_idx][band_m_idx]; - } - ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); - } - - /* Coherence processing */ - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - /* Compute absolute values */ - for ( i = 0; i < numAnalysisChannels; i++ ) - { - for ( j = i; j < numAnalysisChannels; j++ ) - { - absCOVls[i][j] = sqrtf( ( COVls[band_m_idx].xr[i][j] * COVls[band_m_idx].xr[i][j] + COVls[band_m_idx].xi[i][j] * COVls[band_m_idx].xi[i][j] ) ); - } - lsEnergy[i] = absCOVls[i][i]; - } - - /* Find loudest channel */ - maxEne = lsEnergy[0]; - loudestCh = 0; - for ( i = 1; i < numAnalysisChannels; i++ ) - { - if ( lsEnergy[i] > maxEne ) - { - maxEne = lsEnergy[i]; - loudestCh = i; - } - } - - /* Compute surrounding coherence */ - surrCoh = 1.0f; - for ( i = 0; i < numAnalysisChannels; i++ ) - { - if ( i != loudestCh ) - { - if ( i < loudestCh ) - { - i1 = i; - i2 = loudestCh; - } - else - { - i1 = loudestCh; - i2 = i; - } - tempCoh = absCOVls[i1][i2] / ( sqrtf( ( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ) ); - surrCoh = ( surrCoh < tempCoh ) ? surrCoh : tempCoh; - } - } - surrCoh = surrCoh * surrCoh; - surrCoh = ( surrCoh < 1.0f ) ? surrCoh : 1.0f; - surrCoh = ( surrCoh > 0.0f ) ? surrCoh : 0.0f; - - /* Compute spread coherence */ - if ( elevation_m_values[block_m_idx][band_m_idx] < NEAR_HORIZONTAL_PLANE_ELEVATION ) /* Computed only near horizontal plane */ - { - minAngleDist = 180.0f; - i1 = 0; - currentAzi = azimuth_m_values[block_m_idx][band_m_idx]; - for ( i = 0; i < hMcMasa->numHorizontalChannels; i++ ) - { - angleDist = fabsf( currentAzi - hMcMasa->ls_azimuth[i] ); - if ( angleDist > 180.0f ) - { - angleDist = fabsf( angleDist - 360.0f ); - } - if ( angleDist < minAngleDist ) - { - minAngleDist = angleDist; - i1 = i; - } - } - i2 = hMcMasa->leftNearest[i1]; - i3 = hMcMasa->rightNearest[i1]; - - if ( i2 < i3 ) - { - stereoCoh = absCOVls[i2][i3] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); - } - else - { - stereoCoh = absCOVls[i3][i2] / ( sqrtf( lsEnergy[i2] * lsEnergy[i3] + EPSILON ) ); - } - lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] + EPSILON ); - stereoness = stereoCoh * lsEnergyRelation; - - if ( i1 < i2 ) - { - tempCoh = absCOVls[i1][i2] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); - } - else - { - tempCoh = absCOVls[i2][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i2] + EPSILON ) ); - } - if ( i1 < i3 ) - { - tempCoh2 = absCOVls[i1][i3] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); - } - else - { - tempCoh2 = absCOVls[i3][i1] / ( sqrtf( lsEnergy[i1] * lsEnergy[i3] + EPSILON ) ); - } - cohPanCoh = ( tempCoh < tempCoh2 ) ? tempCoh : tempCoh2; - lsEnergyRelation = lsEnergy[i2] / ( lsEnergy[i1] + EPSILON ); - tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i2] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - tempLsEnergyRelation = lsEnergy[i3] / ( lsEnergy[i1] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - tempLsEnergyRelation = lsEnergy[i1] / ( lsEnergy[i3] + EPSILON ); - lsEnergyRelation = ( lsEnergyRelation < tempLsEnergyRelation ) ? lsEnergyRelation : tempLsEnergyRelation; - cohwideness = cohPanCoh * lsEnergyRelation; - - spreadCoh = ( cohwideness > stereoness ) ? cohwideness : stereoness; - if ( spreadCoh > 0.5f ) - { - if ( cohwideness > stereoness ) - { - tempCoh = stereoness - ( cohwideness - 0.5f ); - spreadCoh = ( tempCoh > 0.5f ) ? tempCoh : 0.5f; - } - } - spreadCoh = ( spreadCoh < 1.0f ) ? spreadCoh : 1.0f; - spreadCoh = ( spreadCoh > 0.0f ) ? spreadCoh : 0.0f; - - /* Compute energy ratio tuning parameter */ - lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ) + EPSILON; - lsEnergyRelation = ( lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; - stereoRatio = stereoCoh * lsEnergyRelation - surrCoh; - - lsEnergyRelation = ( lsEnergy[i1] + lsEnergy[i2] + lsEnergy[i3] ) / lsEnergySum; - cohPanRatio = cohPanCoh * lsEnergyRelation - surrCoh; - - cohRatio = ( stereoRatio > cohPanRatio ) ? stereoRatio : cohPanRatio; - cohRatio = ( cohRatio < 1.0f ) ? cohRatio : 1.0f; - cohRatio = ( cohRatio > 0.0f ) ? cohRatio : 0.0f; - } - else /* Otherwise, set spread coherence to zero */ - { - spreadCoh = 0.0f; - cohRatio = 0.0f; - lsEnergySum = sum_f( lsEnergy, numAnalysisChannels ); - } - - /* Store values */ - spreadCoherence[block_m_idx][band_m_idx] = spreadCoh; - surroundingCoherence[block_m_idx][band_m_idx] = surrCoh; - coherentEnergyRatio[band_m_idx] = cohRatio; - } - - /* Determine energy ratios */ - for ( band_m_idx = 0; band_m_idx < hMcMasa->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - diffuseness_m[band_m_idx] = 0.0f; - } - - energyRatio[block_m_idx][band_m_idx] = 1.0f - diffuseness_m[band_m_idx]; - energyRatio[block_m_idx][band_m_idx] = ( energyRatio[block_m_idx][band_m_idx] > coherentEnergyRatio[band_m_idx] ) ? energyRatio[block_m_idx][band_m_idx] : coherentEnergyRatio[band_m_idx]; - } - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/* Compute downmix */ -static void ivas_mcmasa_dmx( - MCMASA_ANA_HANDLE hMcMasa, - float data_f[][L_FRAME48k], - const int16_t input_frame, - const int16_t nchan_transport, - const int16_t nchan_inp ) -{ - int16_t i, j; - int16_t numAnalysisChannels; - float dmx_c; - float multiChEne, downmixEne; - float prevEQ, currEQ, instEQ; - float alpha; - - numAnalysisChannels = nchan_inp - 1; - - multiChEne = 0.0f; - for ( j = 0; j < numAnalysisChannels; j++ ) - { - for ( i = 0; i < input_frame; i++ ) - { - multiChEne += data_f[j][i] * data_f[j][i]; - } - } - - if ( nchan_transport == 2 ) - { - int16_t numSideChannels; /* Channels other than left, right, center */ - int16_t leftIndex, rightIndex; - - numSideChannels = numAnalysisChannels / 2 - 1; - for ( j = 0; j < numSideChannels; j++ ) - { - leftIndex = j * 2 + 3; - rightIndex = j * 2 + 4; - - for ( i = 0; i < input_frame; i++ ) - { - data_f[0][i] += data_f[leftIndex][i]; - data_f[1][i] += data_f[rightIndex][i]; - } - } - - for ( i = 0; i < input_frame; i++ ) - { - dmx_c = INV_SQRT2 * data_f[2][i]; - data_f[0][i] += dmx_c; - data_f[1][i] += dmx_c; - } - } - else if ( nchan_transport == 1 ) - { - for ( i = 0; i < input_frame; i++ ) - { - for ( j = 1; j < numAnalysisChannels; j++ ) - { - data_f[0][i] += data_f[j][i]; - } - } - } - - downmixEne = 0.0f; - for ( j = 0; j < nchan_transport; j++ ) - { - for ( i = 0; i < input_frame; i++ ) - { - downmixEne += data_f[j][i] * data_f[j][i]; - } - } - - alpha = 0.1f; - hMcMasa->prevMultiChEne = alpha * multiChEne + ( 1.0f - alpha ) * hMcMasa->prevMultiChEne; - hMcMasa->prevDownmixEne = alpha * downmixEne + ( 1.0f - alpha ) * hMcMasa->prevDownmixEne; - - prevEQ = hMcMasa->prevEQ; - currEQ = sqrtf( hMcMasa->prevMultiChEne / ( hMcMasa->prevDownmixEne + EPSILON ) ); - hMcMasa->prevEQ = currEQ; - - for ( i = 0; i < input_frame; i++ ) - { - instEQ = hMcMasa->interpolator[i] * currEQ + ( 1.0f - hMcMasa->interpolator[i] ) * prevEQ; - for ( j = 0; j < nchan_transport; j++ ) - { - data_f[j][i] *= instEQ; - } - } - - return; -} - -#else -static void ivas_mcmasa_dmx_fx( - MCMASA_ANA_HANDLE hMcMasa, - Word32 data_f_fx[][L_FRAME48k], - Word16 data_e, - const Word16 input_frame, - const Word16 nchan_transport, - const Word16 nchan_inp ) -{ - Word16 i, j; - Word16 numAnalysisChannels; - - Word32 dmx_c_fx; - Word32 multiChEne_fx, downmixEne_fx; - Word32 prevEQ_fx, currEQ_fx, instEQ_fx; - Word32 alpha_fx, L_tmp, L_tmp1; - Word16 multiChEne_e, scale, downmixEne_e = 0, prevEQ_e, tmp, currEQ_e, instEQ_e; - move16(); - - numAnalysisChannels = sub( nchan_inp, 1 ); - - multiChEne_fx = 0; - move32(); - multiChEne_e = 0; - move16(); - - FOR( j = 0; j < numAnalysisChannels; j++ ) - { - FOR( i = 0; i < input_frame; i++ ) - { - L_tmp1 = BASOP_Util_Add_Mant32Exp( data_f_fx[j][i], data_e, 0, 0, &scale ); - L_tmp = Mpy_32_32( L_tmp1, L_tmp1 ); // data_e + data_e - multiChEne_fx = BASOP_Util_Add_Mant32Exp( L_tmp, scale + scale, multiChEne_fx, multiChEne_e, &scale ); - multiChEne_e = scale; - move16(); - } - } - - IF( EQ_16( nchan_transport, 2 ) ) - { - Word16 numSideChannels; /* Channels other than left, right, center */ - Word16 leftIndex, rightIndex; - - numSideChannels = sub( shr( numAnalysisChannels, 1 ), 1 ); - FOR( j = 0; j < numSideChannels; j++ ) - { - leftIndex = add( shl( j, 1 ), 3 ); - rightIndex = add( shl( j, 1 ), 4 ); - - FOR( i = 0; i < input_frame; i++ ) - { - data_f_fx[0][i] = L_add( data_f_fx[0][i], data_f_fx[leftIndex][i] ); - move32(); - data_f_fx[1][i] = L_add( data_f_fx[1][i], data_f_fx[rightIndex][i] ); - move32(); - } - } - - FOR( i = 0; i < input_frame; i++ ) + FOR( i = 0; i < input_frame; i++ ) { dmx_c_fx = W_extract_h( W_mult_32_32( INV_SQRT2_FX, data_f_fx[2][i] ) ); // data_e move32(); @@ -2194,9 +1358,7 @@ static void ivas_mcmasa_dmx_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /* Compute covariance matrix, i.e., xT * conj(x), and accumulate to the output */ static void compute_cov_mtx_fx( Word32 sr[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX], /* i : Input matrix, real, s[ch][freq] */ @@ -2239,43 +1401,13 @@ static void compute_cov_mtx_fx( return; } -#endif /* Compute covariance matrix, i.e., xT * conj(x), and accumulate to the output */ -#ifndef IVAS_FLOAT_FIXED -static void compute_cov_mtx( - float sr[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX], /* i : Input matrix, real, s[ch][freq] */ - float si[MCMASA_MAX_ANA_CHANS][CLDFB_NO_CHANNELS_MAX], /* i : Input matrix, imag, s[ch][freq] */ - const int16_t freq, /* i : Freq to process */ - const int16_t N, /* i : Number of channels */ - CovarianceMatrix *COVls /* o : Output matrix, contains upper part of cov mtx */ -) -{ - int16_t i, j; - float a, b, c, d; - - for ( i = 0; i < N; i++ ) - { - a = sr[i][freq]; - b = si[i][freq]; - for ( j = i; j < N; j++ ) - { - c = sr[j][freq]; - d = si[j][freq]; - COVls->xr[i][j] += a * c + b * d; - COVls->xi[i][j] += b * c - a * d; - } - } - - return; -} -#endif /*------------------------------------------------------------------------- * computeVerticalDiffuseness() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void computeVerticalDiffuseness_fx( Word32 **buffer_intensity, /* i : Intensity vectors */ const Word32 *buffer_energy, /* i : Energy */ @@ -2354,63 +1486,8 @@ static void computeVerticalDiffuseness_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void computeVerticalDiffuseness( - float **buffer_intensity, /* i : Intensity vectors */ - const float *buffer_energy, /* i : Energy */ - const int16_t num_freq_bands, /* i : Number of frequency bands */ - float *diffuseness /* o : Estimated diffuseness */ -) -{ - float intensity_slow[MASA_FREQUENCY_BANDS]; - float intensity_slow_abs[MASA_FREQUENCY_BANDS]; - float energy_slow[MASA_FREQUENCY_BANDS]; - int16_t i, k; - float tmp = 0; - const float *p_tmp_c; - - /* Set variables to zero */ - set_f( intensity_slow, 0.0f, MASA_FREQUENCY_BANDS ); - set_f( energy_slow, 0.0f, MASA_FREQUENCY_BANDS ); - - for ( i = 0; i < DIRAC_NO_COL_AVG_DIFF; ++i ) - { - /* Energy slow */ - p_tmp_c = buffer_energy + i * num_freq_bands; - for ( k = 0; k < num_freq_bands; k++ ) - { - energy_slow[k] += *( p_tmp_c++ ); - } - /* Intensity slow */ - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow[k] += buffer_intensity[i][k]; - } - } - /* Compute absolute value */ - for ( k = 0; k < num_freq_bands; k++ ) - { - intensity_slow_abs[k] = fabsf( intensity_slow[k] ); - } - - /* Compute Diffuseness */ - for ( i = 0; i < num_freq_bands; ++i ) - { - tmp = intensity_slow_abs[i] / ( energy_slow[i] + EPSILON ); - tmp = ( tmp - VERTICAL_ENERGY_RATIO_OFFSET ) / ( 1.0f - VERTICAL_ENERGY_RATIO_OFFSET ); /* Tuned to avoid effect due to ambience of vertically un-even setups */ - tmp = 1.0f - tmp; - diffuseness[i] = ( ( tmp < 1.0f ) ? ( ( tmp < 0.0f ) ? 0.f : tmp ) : 1.0f ); - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void computeEvenLayout_fx( const Word32 *ls_azimuth, /* i: Q22 */ Word32 *ls_azimuth_even, /* o: Q22 */ @@ -2480,69 +1557,6 @@ static void computeEvenLayout_fx( return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static void computeEvenLayout( - const float *ls_azimuth, - float *ls_azimuth_even, - const int16_t numChannels ) -{ - int16_t i; - int16_t j; - float ls_azimuth_temp[MCMASA_MAX_ANA_CHANS]; - float ls_azimuth_even_ordered[MCMASA_MAX_ANA_CHANS]; - int16_t ls_azimuth_order[MCMASA_MAX_ANA_CHANS]; - float smallestAzimuth; - int16_t smallestAzimuthIndex; - float lsSpacing; - uint8_t oddLayout; - float startAzimuth; - int16_t numChannelsHalf; - - lsSpacing = 360.0f / (float) numChannels; - oddLayout = numChannels % 2; - numChannelsHalf = numChannels / 2; - - mvr2r( ls_azimuth, ls_azimuth_temp, numChannels ); - for ( i = 0; i < numChannels; i++ ) - { - smallestAzimuth = 1000.0f; - smallestAzimuthIndex = 0; - for ( j = 0; j < numChannels; j++ ) - { - if ( ls_azimuth_temp[j] < smallestAzimuth ) - { - smallestAzimuth = ls_azimuth_temp[j]; - smallestAzimuthIndex = j; - } - } - ls_azimuth_order[i] = smallestAzimuthIndex; - ls_azimuth_temp[smallestAzimuthIndex] = 1000.0f; - } - - if ( oddLayout ) - { - startAzimuth = -lsSpacing * ( (float) numChannelsHalf ); - } - else - { - startAzimuth = -lsSpacing * ( (float) numChannelsHalf - 0.5f ); - } - - for ( i = 0; i < numChannels; i++ ) - { - ls_azimuth_even_ordered[i] = (float) i * lsSpacing + startAzimuth; - } - - for ( i = 0; i < numChannels; i++ ) - { - ls_azimuth_even[ls_azimuth_order[i]] = roundf( ls_azimuth_even_ordered[i] ); - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2551,85 +1565,6 @@ static void computeEvenLayout( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_create_masa_out_meta( - MASA_DECODER_EXT_OUT_META_HANDLE extOutMeta, /* i/o: MASA metadata handle */ - SPHERICAL_GRID_DATA *Sph_Grid16, /* i : Spherical grid */ - const int16_t nchan_transport, /* i : Number of transport channels */ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Estimated elevation */ - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Estimated azimuth */ - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Estimated direct-to-total ratio */ - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : Estimated spread coherence */ - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : Estimated surround coherence */ -) -{ - const UWord8 ivasmasaFormatDescriptor[8] = { 0x49, 0x56, 0x41, 0x53, 0x4D, 0x41, 0x53, 0x41 }; /* "IVASMASA" */ - Word16 i, sf, band; - UWord8 numFrequencyBands; - UWord8 numDirections; - UWord16 spherical_index; - - numDirections = 1; - numFrequencyBands = MASA_FREQUENCY_BANDS; - - /* Construct descriptive meta */ - FOR( i = 0; i < 8; i++ ) - { - extOutMeta->descriptiveMeta.formatDescriptor[i] = ivasmasaFormatDescriptor[i]; - } - extOutMeta->descriptiveMeta.numberOfDirections = numDirections - 1; - extOutMeta->descriptiveMeta.numberOfChannels = (uint8_t) ( nchan_transport - 1 ); - /* Following correspond to "unknown" values */ - extOutMeta->descriptiveMeta.sourceFormat = 0x0u; - extOutMeta->descriptiveMeta.transportDefinition = 0x0u; - extOutMeta->descriptiveMeta.channelAngle = 0x0u; - extOutMeta->descriptiveMeta.channelDistance = 0x0u; - extOutMeta->descriptiveMeta.channelLayout = 0x0u; - - /* Construct spatial metadata from estimated values */ - FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - /* Spherical index */ - FOR( band = 0; band < numFrequencyBands; band++ ) - { - spherical_index = index_theta_phi_16( &elevation_m_values[sf][band], &azimuth_m_values[sf][band], Sph_Grid16 ); - move16(); - extOutMeta->directionIndex[0][sf][band] = spherical_index; - move16(); - extOutMeta->directionIndex[1][sf][band] = SPH_IDX_FRONT; - move16(); - } - - /* Direct-to-total ratio */ - FOR( band = 0; band < numFrequencyBands; band++ ) - { - extOutMeta->directToTotalRatio[0][sf][band] = (UWord8) floorf( energyRatio[sf][band] * UINT8_MAX ); - extOutMeta->directToTotalRatio[1][sf][band] = 0; - } - - /* Spread coherence */ - FOR( band = 0; band < numFrequencyBands; band++ ) - { - extOutMeta->spreadCoherence[0][sf][band] = (UWord8) floorf( spreadCoherence[sf][band] * UINT8_MAX ); - extOutMeta->spreadCoherence[1][sf][band] = 0; - } - - /* Diffuse-to-total ratio = 1 - sum(direct-to-total ratios) */ - FOR( band = 0; band < numFrequencyBands; band++ ) - { - extOutMeta->diffuseToTotalRatio[sf][band] = UINT8_MAX - (UWord8) floorf( energyRatio[sf][band] * UINT8_MAX ); - } - - /* Surround coherence */ - FOR( band = 0; band < numFrequencyBands; band++ ) - { - extOutMeta->surroundCoherence[sf][band] = (UWord8) floorf( surroundingCoherence[sf][band] * UINT8_MAX ); - } - } - - return; -} -#else void ivas_create_masa_out_meta_fx( MASA_DECODER_EXT_OUT_META_HANDLE extOutMeta, /* i/o: MASA metadata handle */ SPHERICAL_GRID_DATA *Sph_Grid16, /* i : Spherical grid */ @@ -2727,4 +1662,3 @@ void ivas_create_masa_out_meta_fx( return; } -#endif diff --git a/lib_rend/ivas_objectRenderer.c b/lib_rend/ivas_objectRenderer.c index de706bd47..f323b615d 100644 --- a/lib_rend/ivas_objectRenderer.c +++ b/lib_rend/ivas_objectRenderer.c @@ -39,40 +39,29 @@ #include #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" #include "debug.h" #include "ivas_rom_com_fx.h" #define float_to_fixed( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fixed_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#endif /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void TDREND_Clear_Update_flags( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd ); -#endif -#ifdef IVAS_FLOAT_FIXED static void TDREND_Clear_Update_flags_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ ); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void angles_to_vec_fx( const Word16 radius, /* i : radius */ const Word32 azimuth, /* i : Azimuth angle */ const Word32 elevation, /* i : Elevation angle */ Word32 *vec /* o : Pos/Dir vector */ ); -#else -static void angles_to_vec( const float radius, const float azimuth, const float elevation, float *vec ); -#endif /*---------------------------------------------------------------------* * ivas_td_binaural_open_unwrap() @@ -80,7 +69,6 @@ static void angles_to_vec( const float radius, const float azimuth, const float * Call TD open/init function without st_ivas *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_open_unwrap_fx( TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HR filter model (from file or NULL) */ const Word32 output_Fs, /* i : Output sampling rate */ @@ -276,188 +264,6 @@ ivas_error ivas_td_binaural_open_unwrap_fx( return error; } -#else -ivas_error ivas_td_binaural_open_unwrap( - TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HR filter model (from file or NULL) */ - const int32_t output_Fs, /* i : Output sampling rate */ - const int16_t nchan_transport, /* i : Number of channels */ - const IVAS_FORMAT ivas_format, /* i : IVAS format (ISM/MC) */ - const AUDIO_CONFIG transport_config, /* i : Transport configuration */ - const float *directivity, /* i : Directivity pattern (used for ISM) */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : Loudspeaker layout */ - BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd, /* o : TD renderer handle */ - int32_t *binaural_latency_ns /* i : Binauralization delay */ -) -{ - BINAURAL_TD_OBJECT_RENDERER_HANDLE pBinRendTd; - TDREND_PosType_t PosType; - int16_t nS; - int16_t SrcInd[MAX_NUM_TDREND_CHANNELS]; - const float *ls_azimuth, *ls_elevation; - float Pos[3]; - float Dir[3]; - TDREND_DirAtten_t *DirAtten_p; - int16_t nchan_rend; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( pBinRendTd = malloc( sizeof( BINAURAL_TD_OBJECT_RENDERER ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); - } - if ( ( pBinRendTd->TdRend_MixSpatSpec_p = malloc( sizeof( TDREND_MixSpatSpec_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); - } - if ( ( pBinRendTd->DirAtten_p = malloc( sizeof( TDREND_DirAtten_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); - } - if ( ( pBinRendTd->Listener_p = malloc( sizeof( TDREND_MIX_Listener_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for TD renderer\n" ) ); - } - - pBinRendTd->NumOfSrcs = 0; - pBinRendTd->MaxSrcInd = -1; - - /* Mixer spatial setup */ - pBinRendTd->TdRend_MixSpatSpec_p->UseCommonDistAttenModel = TRUE; - pBinRendTd->TdRend_MixSpatSpec_p->DistAttenModel = 0; /* 0=Turned off, else use TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED */ - - if ( ( error = TDREND_MIX_Init( pBinRendTd, hHrtfTD, pBinRendTd->TdRend_MixSpatSpec_p, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Set the attenuation (or can set MixSpatSpec.DistAttenModel above) */ - if ( ( error = TDREND_MIX_SetDistAttenModel( pBinRendTd, TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Add sources to module and mixer, headphones */ - PosType = TDREND_POSTYPE_ABSOLUTE; /* or TDREND_POSTYPE_RELATIVE_TO_LISTENER */ - - nchan_rend = nchan_transport; - if ( ( ivas_format == MC_FORMAT ) && ( transport_config != IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - nchan_rend--; /* Skip LFE channel -- added to the others */ - } - - for ( nS = 0; nS < nchan_rend; nS++ ) - { - if ( ( error = TDREND_MIX_AddSrc( pBinRendTd, &SrcInd[nS], PosType ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ivas_format == MC_FORMAT ) - { - switch ( transport_config ) - { - case IVAS_AUDIO_CONFIG_5_1: - ls_azimuth = ls_azimuth_CICP6; - ls_elevation = ls_elevation_CICP6; - break; - case IVAS_AUDIO_CONFIG_7_1: - ls_azimuth = ls_azimuth_CICP12; - ls_elevation = ls_elevation_CICP12; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - ls_azimuth = ls_azimuth_CICP14; - ls_elevation = ls_elevation_CICP14; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - ls_azimuth = ls_azimuth_CICP16; - ls_elevation = ls_elevation_CICP16; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - ls_azimuth = ls_azimuth_CICP19; - ls_elevation = ls_elevation_CICP19; - break; - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - ls_azimuth = hTransSetup.ls_azimuth; - ls_elevation = hTransSetup.ls_elevation; - break; - default: - ls_azimuth = NULL; - ls_elevation = NULL; - } - - DirAtten_p = pBinRendTd->DirAtten_p; - - for ( nS = 0; nS < nchan_rend; nS++ ) - { - /* Set source positions according to loudspeaker layout */ - angles_to_vec( 1.0f, ls_azimuth[nS], ls_elevation[nS], Pos ); - Dir[0] = 1.0f; - Dir[1] = 0.0f; - Dir[2] = 0.0f; - - /* Source directivity info */ - DirAtten_p->ConeInnerAngle = 360.0f; - DirAtten_p->ConeOuterAngle = 360.0f; - DirAtten_p->ConeOuterGain = 1.0f; - - if ( ( error = TDREND_MIX_SRC_SetPos( pBinRendTd, nS, Pos ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = TDREND_MIX_SRC_SetDir( pBinRendTd, nS, Dir ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = TDREND_MIX_SRC_SetPlayState( pBinRendTd, nS, TDREND_PLAYSTATUS_PLAYING ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = TDREND_MIX_SRC_SetDirAtten( pBinRendTd, nS, DirAtten_p ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - if ( ivas_format == ISM_FORMAT || ivas_format == MASA_ISM_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - DirAtten_p = pBinRendTd->DirAtten_p; - - for ( nS = 0; nS < nchan_rend; nS++ ) - { - if ( NULL == directivity ) - { - DirAtten_p->ConeInnerAngle = 360.0f; /* Front cone */ - DirAtten_p->ConeOuterAngle = 360.0f; /* Back cone */ - DirAtten_p->ConeOuterGain = 1.0f; /* Back attenuation */ - } - else - { - DirAtten_p->ConeInnerAngle = directivity[nS * 3]; - DirAtten_p->ConeOuterAngle = directivity[nS * 3 + 1]; - DirAtten_p->ConeOuterGain = directivity[nS * 3 + 2]; - } - if ( ( error = TDREND_MIX_SRC_SetDirAtten( pBinRendTd, nS, DirAtten_p ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - *hBinRendererTd = pBinRendTd; - - if ( ivas_format != MASA_ISM_FORMAT && ivas_format != SBA_ISM_FORMAT ) - { - *binaural_latency_ns = (int32_t) ( ( *hBinRendererTd )->HrFiltSet_p->latency_s * 1000000000.f ); - } - - return error; -} -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* @@ -466,7 +272,6 @@ ivas_error ivas_td_binaural_open_unwrap( * Close TD Object binaural renderer *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_td_binaural_close_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ ) @@ -487,27 +292,6 @@ void ivas_td_binaural_close_fx( return; } -#else -void ivas_td_binaural_close( - BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ -) -{ - if ( hBinRendererTd == NULL || *hBinRendererTd == NULL ) - { - return; - } - - free( ( *hBinRendererTd )->TdRend_MixSpatSpec_p ); - free( ( *hBinRendererTd )->DirAtten_p ); - - TDREND_MIX_Dealloc( *hBinRendererTd ); - - free( *hBinRendererTd ); - *hBinRendererTd = NULL; - - return; -} -#endif /*---------------------------------------------------------------------* @@ -516,7 +300,6 @@ void ivas_td_binaural_close( * Call ivas_td_binaural_renderer() without st_ivas. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer_unwrap_fx( const REVERB_HANDLE hReverb, /* i : Reverberator handle */ const AUDIO_CONFIG transport_config, /* i : Transport configuration */ @@ -660,117 +443,6 @@ ivas_error ivas_td_binaural_renderer_unwrap_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_td_binaural_renderer_unwrap( - const REVERB_HANDLE hReverb, /* i : Reverberator handle */ - const AUDIO_CONFIG transport_config, /* i : Transport configuration */ - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD binaural object renderer handle */ - const int16_t num_src, /* i : number of sources to render */ - const int16_t lfe_idx, /* i : LFE channel index */ - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - ISM_METADATA_HANDLE *hIsmMetaData, /* i : ISM metadata handle */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientaton data handle */ - const int16_t ism_md_subframe_update, /* i : Number of subframes to delay ism metadata to sync with audio */ - float *output[], /* i/o: SCE channels / Binaural synthesis */ - const int16_t output_frame, /* i : output frame length */ - const int16_t num_subframes /* i : number of subframes to render */ -) -{ - int16_t subframe_length; - int16_t subframe_idx; - float reverb_signal[BINAURAL_CHANNELS][L_FRAME48k]; - ivas_error error; - int16_t c_indx, nS; - float *p_reverb_signal[BINAURAL_CHANNELS]; - int16_t ch; - int16_t *enableCombinedOrientation; /* i : Combined orientation flag */ - IVAS_QUATERNION *Quaternions; /* i : Head tracking data per subframe */ - IVAS_VECTOR3 *Pos; /* i : Listener position data per subframe */ - - enableCombinedOrientation = NULL; - Quaternions = NULL; - Pos = NULL; - if ( hCombinedOrientationData != NULL ) - { - enableCombinedOrientation = hCombinedOrientationData->enableCombinedOrientation; - Quaternions = hCombinedOrientationData->Quaternions; - Pos = hCombinedOrientationData->listenerPos; - } - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - p_reverb_signal[ch] = reverb_signal[ch]; - } - - subframe_length = output_frame / num_subframes; - - c_indx = 0; - for ( nS = 0; nS < num_src; nS++ ) - { - if ( !( ivas_format == MC_FORMAT && nS == lfe_idx ) ) /* Skip LFE for MC */ - { - hBinRendererTd->Sources[c_indx]->InputFrame_p = output[nS]; - hBinRendererTd->Sources[c_indx]->SrcRend_p->InputAvailable = TRUE; - c_indx++; - } - } - - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - if ( subframe_idx == ism_md_subframe_update ) - { - /* Update object position(s) */ - if ( ( error = TDREND_Update_object_positions( hBinRendererTd, num_src, ivas_format, hIsmMetaData ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Update the listener's location/orientation */ - if ( ( error = TDREND_Update_listener_orientation( hBinRendererTd, ( enableCombinedOrientation != NULL ) ? enableCombinedOrientation[hCombinedOrientationData->subframe_idx] : 0, ( Quaternions != NULL ) ? &Quaternions[hCombinedOrientationData->subframe_idx] : NULL, ( Pos != NULL ) ? &Pos[hCombinedOrientationData->subframe_idx] : NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hReverb != NULL ) - { - if ( ( error = ivas_reverb_process( hReverb, transport_config, 0, output, p_reverb_signal, subframe_idx ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Render subframe */ - if ( ( error = TDREND_GetMix( hBinRendererTd, output, subframe_length, subframe_idx, ism_md_subframe_update ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Advance subframe pointer */ - c_indx = 0; - for ( nS = 0; nS < num_src; nS++ ) - { - if ( !( ivas_format == MC_FORMAT && nS == lfe_idx ) ) /* Skip LFE for MC */ - { - hBinRendererTd->Sources[c_indx]->InputFrame_p += subframe_length; - c_indx++; - } - } - - /* update combined orientation access index */ - ivas_combined_orientation_update_index( hCombinedOrientationData, subframe_length ); - } - - if ( hReverb != NULL ) - { - /* add reverb to rendered signals */ - v_add( reverb_signal[0], output[0], output[0], output_frame ); - v_add( reverb_signal[1], output[1], output[1], output_frame ); - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* @@ -779,7 +451,6 @@ ivas_error ivas_td_binaural_renderer_unwrap( * Render one 5 ms subframe from the mixer *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_GetMix_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ Word32 *output[], /* i/o: ISM object synth / rendered output in 0,1 Q11 */ @@ -857,71 +528,6 @@ ivas_error TDREND_GetMix_fx( return error; } -#else -ivas_error TDREND_GetMix( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - float *output[], /* i/o: ISM object synth / rendered output in 0,1 */ - const int16_t subframe_length, /* i/o: subframe length */ - const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ - const int16_t ism_md_subframe_update /* i : Number of subframes to delay ism metadata to sync with audio */ -) -{ - int16_t i; - TDREND_SRC_t *Src_p; - TDREND_SRC_SPATIAL_t *SrcSpatial_p; - TDREND_SRC_REND_t *SrcRend_p; - ivas_error error; - float output_buf[2][L_SPATIAL_SUBFR_48k]; /* Temp buffer for left/right rendered signal */ - float hrf_left_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - int16_t intp_count; - int16_t subframe_update_flag; - - subframe_update_flag = subframe_idx == ism_md_subframe_update; - - error = IVAS_ERR_OK; - - /* Clear the output buffer to accumulate rendered sources */ - set_f( output_buf[0], 0.0f, subframe_length ); - set_f( output_buf[1], 0.0f, subframe_length ); - - /* Clear interpolation buffers and counter */ - set_f( hrf_left_delta, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); - set_f( hrf_right_delta, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); - intp_count = 0; - - /* Create the mix */ - /* Loop through the source list and render each source */ - for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) - { - Src_p = hBinRendererTd->Sources[i]; - SrcSpatial_p = Src_p->SrcSpatial_p; - SrcRend_p = Src_p->SrcRend_p; - - /* Update rendering params if needed */ - if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) ) - { - TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, Src_p->hrf_left_prev, - Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p, subframe_update_flag ); - } - - /* Render source if needed */ - if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) ) - { - error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); - } - } - - /* Populate output variable */ - mvr2r( output_buf[0], output[0] + subframe_idx * subframe_length, subframe_length ); /* Left */ - mvr2r( output_buf[1], output[1] + subframe_idx * subframe_length, subframe_length ); /* Right */ - - /* Clear the PoseUpdated and Source position update flags */ - TDREND_Clear_Update_flags( hBinRendererTd ); - - return error; -} -#endif /*---------------------------------------------------------------------* @@ -930,7 +536,6 @@ ivas_error TDREND_GetMix( * Initializes the audio mixer module *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void TDREND_Clear_Update_flags_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ ) @@ -949,25 +554,6 @@ static void TDREND_Clear_Update_flags_fx( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void TDREND_Clear_Update_flags( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ -) -{ - int16_t i; - - hBinRendererTd->Listener_p->PoseUpdated = FALSE; - - for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) - { - hBinRendererTd->Sources[i]->SrcSpatial_p->Updated = FALSE; - } - - return; -} -#endif /*---------------------------------------------------------------------* * TDREND_Update_object_positions_fx() @@ -975,7 +561,6 @@ static void TDREND_Clear_Update_flags( * Update object position(s) *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_Update_object_positions_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ const Word16 num_src, /* i : number of sources to render */ @@ -1051,81 +636,6 @@ ivas_error TDREND_Update_object_positions_fx( return IVAS_ERR_OK; } -#else -/*---------------------------------------------------------------------* - * TDREND_Update_object_positions() - * - * Update object position(s) - *---------------------------------------------------------------------*/ - -ivas_error TDREND_Update_object_positions( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ - const int16_t num_src, /* i : number of sources to render */ - const IVAS_FORMAT in_format, /* i : Format of input sources */ - const ISM_METADATA_HANDLE *hIsmMetaData /* i : Input metadata for ISM objects */ -) -{ - TDREND_DirAtten_t *DirAtten_p; - int16_t nS; - float Pos[3]; - float Dir[3]; - ivas_error error; - - DirAtten_p = hBinRendererTd->DirAtten_p; - - /* For each source, write the frame data to the source object*/ - for ( nS = 0; nS < num_src; nS++ ) - { - if ( in_format == ISM_FORMAT || in_format == MASA_ISM_FORMAT || in_format == SBA_ISM_FORMAT ) - { - /* Update the source positions */ - /* Source position and direction */ - angles_to_vec( hIsmMetaData[nS]->radius, hIsmMetaData[nS]->azimuth, hIsmMetaData[nS]->elevation, Pos ); - angles_to_vec( 1.0f, hIsmMetaData[nS]->yaw, hIsmMetaData[nS]->pitch, Dir ); - - if ( ( error = TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ) ) != IVAS_ERR_OK ) - { - return error; - } - -#ifdef IVAS_FLOAT_FIXED - if ( ( error = TDREND_MIX_SRC_SetDirAtten_fx( hBinRendererTd, nS, DirAtten_p ) ) != IVAS_ERR_OK ) - { - return error; - } -#else - if ( ( error = TDREND_MIX_SRC_SetDirAtten( hBinRendererTd, nS, DirAtten_p ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - - if ( hIsmMetaData[nS]->non_diegetic_flag ) - { - Pos[0] = 0; - Pos[1] = hIsmMetaData[nS]->azimuth / 90.f; - Pos[2] = 0; - if ( ( error = TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos ) ) != IVAS_ERR_OK ) - { - return error; - } - hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_NON_DIEGETIC; - } - else - { - hBinRendererTd->Sources[nS]->SrcSpatial_p->PosType = TDREND_POSTYPE_ABSOLUTE; - } - - if ( ( error = TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * TDREND_Update_listener_orientation() @@ -1133,70 +643,6 @@ ivas_error TDREND_Update_object_positions( * Update listener orientation (s) *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error TDREND_Update_listener_orientation( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ - const int16_t headRotEnabled, /* i : Headrotation flag */ - const IVAS_QUATERNION *headPosition, /* i : Listener orientation */ - const IVAS_VECTOR3 *Pos /* i : Listener Position */ -) -{ - float FrontVec[3]; - float UpVec[3]; - float Rmat[3][3]; - float Pos_p[3]; - ivas_error error; - - if ( headRotEnabled ) - { - /* Obtain head rotation matrix */ - QuatToRotMat( *headPosition, Rmat ); - /* Apply rotation matrix to looking vector [1;0;0] */ - FrontVec[0] = Rmat[0][0]; - FrontVec[1] = Rmat[0][1]; - FrontVec[2] = Rmat[0][2]; - /* Apply rotation matrix to up vector [0;0;1] */ - UpVec[0] = Rmat[2][0]; - UpVec[1] = Rmat[2][1]; - UpVec[2] = Rmat[2][2]; - if ( Pos != NULL ) - { - /* Input position */ - Pos_p[0] = ( *Pos ).x; - Pos_p[1] = ( *Pos ).y; - Pos_p[2] = ( *Pos ).z; - } - else - { - /* Listener at the origin */ - Pos_p[0] = 0.0f; - Pos_p[1] = 0.0f; - Pos_p[2] = 0.0f; - } - } - else - { - /* Oriented with looking vector along the x axis */ - FrontVec[0] = 1.0f; - FrontVec[1] = 0.0f; - FrontVec[2] = 0.0f; - /* Oriented with up vector along the z axis */ - UpVec[0] = 0.0f; - UpVec[1] = 0.0f; - UpVec[2] = 1.0f; - /* Listener at the origin */ - Pos_p[0] = 0.0f; - Pos_p[1] = 0.0f; - Pos_p[2] = 0.0f; - } - - /* Set the listener position and orientation:*/ - TDREND_MIX_LIST_SetPos( hBinRendererTd, Pos_p ); - error = TDREND_MIX_LIST_SetOrient( hBinRendererTd, FrontVec, UpVec ); - - return error; -} -#else ivas_error TDREND_Update_listener_orientation_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ const Word16 headRotEnabled, /* i : Headrotation flag */ @@ -1294,7 +740,6 @@ ivas_error TDREND_Update_listener_orientation_fx( return error; } -#endif /*---------------------------------------------------------------------* @@ -1302,7 +747,6 @@ ivas_error TDREND_Update_listener_orientation_fx( * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_open_ext_fx( TDREND_WRAPPER *pTDRend, AUDIO_CONFIG inConfig, @@ -1363,56 +807,6 @@ ivas_error ivas_td_binaural_open_ext_fx( return ivas_td_binaural_open_unwrap_fx( &pTDRend->hHrtfTD, outFs, *num_src, ivas_format, transport_config, directivity_fx, hTransSetup, &pTDRend->hBinRendererTd, &pTDRend->binaural_latency_ns, SrcInd ); } -#else -ivas_error ivas_td_binaural_open_ext( - TDREND_WRAPPER *pTDRend, - AUDIO_CONFIG inConfig, - RENDER_CONFIG_DATA *hRendCfg, /* i : Renderer configuration */ - LSSETUP_CUSTOM_STRUCT *customLsInput, - const int32_t outFs ) -{ - int16_t nchan_transport; - AUDIO_CONFIG transport_config; - IVAS_FORMAT ivas_format; - IVAS_OUTPUT_SETUP hTransSetup; - ivas_error error; - - float *directivity = NULL; - - if ( inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = getAudioConfigNumChannels( inConfig, &nchan_transport ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - nchan_transport = customLsInput->num_spk; - } - - transport_config = inConfig; - ivas_format = ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) ? MC_FORMAT : ISM_FORMAT; - - hTransSetup.ls_azimuth = NULL; - hTransSetup.ls_elevation = NULL; - - if ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - hTransSetup.ls_azimuth = customLsInput->ls_azimuth; - hTransSetup.ls_elevation = customLsInput->ls_elevation; - } - - if ( NULL != hRendCfg ) - { - directivity = hRendCfg->directivity; - } - - return ivas_td_binaural_open_unwrap( &pTDRend->hHrtfTD, outFs, nchan_transport, ivas_format, transport_config, directivity, hTransSetup, &pTDRend->hBinRendererTd, &pTDRend->binaural_latency_ns ); -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * ivas_td_binaural_renderer_ext() * @@ -1558,99 +952,12 @@ ivas_error ivas_td_binaural_renderer_ext_fx( return IVAS_ERR_OK; } -#else -/*---------------------------------------------------------------------* - * ivas_td_binaural_renderer_ext() - * - * Receives the current frames for the object streams, updates metadata - * and renders the current frame. - *---------------------------------------------------------------------*/ - -ivas_error ivas_td_binaural_renderer_ext( - const TDREND_WRAPPER *pTDRend, /* i : TD Renderer wrapper structure */ - const AUDIO_CONFIG inConfig, /* i : Input audio configuration */ - const LSSETUP_CUSTOM_STRUCT *customLsInput, /* i : Input custom loudspeaker layout */ - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* i : Combined head and external orientations */ - const IVAS_ISM_METADATA *currentPos, /* i : Object position */ - const REVERB_HANDLE hReverb, /* i : Reverberator handle */ - const int16_t ism_md_subframe_update_ext, /* i : Metadata Delay in subframes to sync with audio delay */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t output_frame, /* i : output frame length */ - float output[][L_FRAME48k] /* i/o: SCE channels / Binaural synthesis */ -) -{ - ISM_METADATA_FRAME hIsmMetaDataFrame; - ISM_METADATA_HANDLE hIsmMetaData[1]; - int16_t lfe_idx; - int16_t num_src; - IVAS_FORMAT ivas_format; - IVAS_REND_AudioConfigType inConfigType; - AUDIO_CONFIG transport_config; - ivas_error error; - - float *p_output[MAX_OUTPUT_CHANNELS]; - int16_t ch; - for ( ch = 0; ch < MAX_OUTPUT_CHANNELS; ch++ ) - { - p_output[ch] = output[ch]; - } - - push_wmops( "ivas_td_binaural_renderer_ext" ); - - inConfigType = getAudioConfigType( inConfig ); - lfe_idx = LFE_CHANNEL; - hIsmMetaData[0] = NULL; - - - if ( inConfigType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - ivas_format = MC_FORMAT; - transport_config = inConfig; - if ( inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = getAudioConfigNumChannels( inConfig, &num_src ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - lfe_idx = ( customLsInput->num_lfe > 0 ) ? customLsInput->lfe_idx[0] : -1; - num_src = customLsInput->num_spk + customLsInput->num_lfe; - } - } - else - { - ivas_format = ISM_FORMAT; - num_src = 1; - transport_config = IVAS_AUDIO_CONFIG_ISM1; - hIsmMetaData[0] = &hIsmMetaDataFrame; - hIsmMetaData[0]->azimuth = currentPos->azimuth; - hIsmMetaData[0]->elevation = currentPos->elevation; - hIsmMetaData[0]->yaw = currentPos->yaw; - hIsmMetaData[0]->pitch = currentPos->pitch; - hIsmMetaData[0]->radius = currentPos->radius; - hIsmMetaData[0]->non_diegetic_flag = currentPos->non_diegetic_flag; - } - - if ( ( error = ivas_td_binaural_renderer_unwrap( hReverb, transport_config, pTDRend->hBinRendererTd, num_src, lfe_idx, ivas_format, hIsmMetaData, *hCombinedOrientationData, - ism_md_subframe_update_ext, p_output, output_frame, (int16_t) ( ( output_frame * FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) / output_Fs ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * angles_to_vec() * * Convert azimuth and elevation angles to position/orientation vector *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void angles_to_vec_fx( const Word16 radius, /* i : radius Qx */ const Word32 azimuth, /* i : Azimuth angle Q22 */ @@ -1671,19 +978,3 @@ static void angles_to_vec_fx( move32(); return; } -#else - -static void angles_to_vec( - const float radius, /* i : radius */ - const float azimuth, /* i : Azimuth angle */ - const float elevation, /* i : Elevation angle */ - float *vec /* o : Pos/Dir vector */ -) -{ - vec[0] = radius * cosf( elevation * PI_OVER_180 ) * cosf( azimuth * PI_OVER_180 ); - vec[1] = radius * cosf( elevation * PI_OVER_180 ) * sinf( azimuth * PI_OVER_180 ); - vec[2] = radius * sinf( elevation * PI_OVER_180 ); - - return; -} -#endif // IVAS_FLOAT_FIXED diff --git a/lib_rend/ivas_objectRenderer_hrFilt.c b/lib_rend/ivas_objectRenderer_hrFilt.c index 2b0343c80..4d5ad355a 100644 --- a/lib_rend/ivas_objectRenderer_hrFilt.c +++ b/lib_rend/ivas_objectRenderer_hrFilt.c @@ -45,20 +45,12 @@ * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getPeriodicBSplineSampVec( float *BfVec, int16_t *AzIdx, const int16_t NumBFs, const float t, int16_t *num_az_idx, const float knot_interval, const float azimKSeq_0, const int16_t azimSegSamples, const float *azimBsShape, const int16_t subSampFactor ); -static void getStandardBSplineSampVec( float *BfVec, int16_t *NzIdx, int16_t *num_idx, const int16_t NumBFs, const float t, const float *KSeq, const int16_t SegSamples, const int16_t *BsLen, const int16_t *BsStart, const float *BsShape ); -static void GenerateFilter( const float elev, float azim, ModelParams_t *model, ModelEval_t *modelEval ); -static void GenerateITD( const float elev, float azim, ModelParamsITD_t *model, ModelEval_t *modelEval ); -static void SkipSmallest_ValueIndex( int16_t *use_inds, const ValueIndex_t *VI, const int16_t N, const int16_t n_smallest ); -#else static Word32 round_fixed( Word32 n, Word16 q ); static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word32 azimKSeq_0_fx, const Word16 azimSegSamples, const Word32 *azimBsShape_fx, const Word16 subSampFactor ); static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word32 *KSeq_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word32 *BsShape_fx ); static void GenerateFilter_fx( const Word32 elev, Word32 azim, ModelParams_t *model, ModelEval_t *modelEval ); static void GenerateITD_fx( const Word32 elev, Word32 azim, ModelParamsITD_t *model, ModelEval_t *modelEval ); static void SkipSmallest_ValueIndex_fx( Word16 *use_inds, const ValueIndex_t *VI, const Word16 N, const Word16 n_smallest ); -#endif /*-------------------------------------------------------------------* * TDREND_REND_RenderSourceHRFilt() @@ -66,32 +58,6 @@ static void SkipSmallest_ValueIndex_fx( Word16 *use_inds, const ValueIndex_t *VI * Renders each object using the HR filters --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error TDREND_REND_RenderSourceHRFilt( - TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ - const float *hrf_left_delta, /* i : Left filter interpolation delta */ - const float *hrf_right_delta, /* i : Right filter interpolation delta */ - const int16_t intp_count, /* i : Interpolation count */ - float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ - const int16_t subframe_length /* i : Subframe length in use */ -) -{ - float LeftOutputFrame[L_SPATIAL_SUBFR_48k]; - float RightOutputFrame[L_SPATIAL_SUBFR_48k]; - - TDREND_Apply_ITD( Src_p->InputFrame_p, LeftOutputFrame, RightOutputFrame, &Src_p->previtd, Src_p->itd, Src_p->mem_itd, subframe_length ); - TDREND_firfilt( LeftOutputFrame, Src_p->hrf_left_prev, hrf_left_delta, intp_count, Src_p->mem_hrf_left, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); - TDREND_firfilt( RightOutputFrame, Src_p->hrf_right_prev, hrf_right_delta, intp_count, Src_p->mem_hrf_right, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); - Src_p->prevGain = Src_p->Gain; - - /* Copy to accumulative output frame */ - v_add( LeftOutputFrame, output_buf[0], output_buf[0], subframe_length ); - v_add( RightOutputFrame, output_buf[1], output_buf[1], subframe_length ); - - - return IVAS_ERR_OK; -} -#else ivas_error TDREND_REND_RenderSourceHRFilt_fx( TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ Word32 *hrf_left_delta_fx, /* i/o: Left filter interpolation delta */ @@ -140,7 +106,6 @@ ivas_error TDREND_REND_RenderSourceHRFilt_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -150,37 +115,6 @@ ivas_error TDREND_REND_RenderSourceHRFilt_fx( * This version uses the HR filter model. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void GetFilterFromAngle( - TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ - const float Elev, /* i : Elevation, degrees */ - float Azim, /* i : Azimuth, degrees */ - const int16_t filterlength, /* i : Filter length */ - float *hrf_left, /* o : Left HR filter */ - float *hrf_right, /* o : Right HR filter */ - int16_t *itd /* o : ITD value */ -) -{ - - GenerateFilter( Elev, Azim, &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ); - - mvr2r( HrFiltSet_p->ModelEval.hrfModL, hrf_left, filterlength ); - mvr2r( HrFiltSet_p->ModelEval.hrfModR, hrf_right, filterlength ); - - /* 4. Evaluate the ITD */ - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { - GenerateITD( Elev, Azim, &HrFiltSet_p->ModelParamsITD, &HrFiltSet_p->ModelEval ); - *itd = (int16_t) HrFiltSet_p->ModelEval.itdMod; - } - else - { - *itd = 0; - } - - return; -} -#else void GetFilterFromAngle_fx( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ const Word32 Elev_fx, /* i : Elevation, degrees Q22 */ @@ -245,7 +179,6 @@ static Word32 round_fixed( /* o : Output value Q0 */ } return num; } -#endif /*-------------------------------------------------------------------* * GenerateFilter() @@ -253,121 +186,6 @@ static Word32 round_fixed( /* o : Output value Q0 */ * Generate an HR filter using the B Spline model. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void GenerateFilter( - const float elev, /* i : Elevation angle, degrees */ - float azim, /* i : Azimuth angle, degrees */ - ModelParams_t *model, /* i : Model parameters structure */ - ModelEval_t *modelEval /* i/o: Model evaluation structure */ -) -{ - int16_t qp, p, k, i; - int32_t index; - int16_t AzIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS][HRTF_MODEL_BSPLINE_NUM_COEFFS], EvIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; /* non-zero basis functions */ - int16_t num_az_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; - int16_t num_ev_idx; - int16_t BM_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; - float knot_interval; - float ETotL, ETotR, ESynL, ESynR; - float ScaleL, ScaleR; - int16_t iSec; - - getStandardBSplineSampVec( modelEval->elevBfVec, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq, - model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape ); - - for ( p = 0; p < num_ev_idx; p++ ) - { - /* Wrap the requested azimuth to the range of the BSplines */ - azim = fmodf( azim + model->azimKSeq[p][0], 360 ); - if ( azim < 0 ) - { - azim += 360.0f; - } - azim = azim - model->azimKSeq[p][0]; - - if ( model->azimDim3[EvIdx[p]] == 1 ) /* Constant basis function */ - { - num_az_idx[p] = 1; - AzIdx[p][0] = 0; - modelEval->azimBfVec[p][0] = 1.0f; - } - else - { - k = EvIdx[p]; - knot_interval = ( model->azimKSeq[k][model->azimDim3[k]] - model->azimKSeq[k][0] ) / model->azimDim3[k]; - - getPeriodicBSplineSampVec( modelEval->azimBfVec[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p], - knot_interval, model->azimKSeq[k][0], model->azimSegSamples[model->azimShapeIdx[k]], - model->azimBsShape[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] ); - } - } - - /* Compute BM */ - qp = 0; - for ( p = 0; p < num_ev_idx; p++ ) - { - for ( i = 0; i < num_az_idx[p]; i++ ) - { - modelEval->BM[qp + i] = modelEval->elevBfVec[p] * modelEval->azimBfVec[p][i]; - BM_idx[qp + i] = model->azim_start_idx[EvIdx[p]] + AzIdx[p][i]; - } - qp = qp + num_az_idx[p]; - } - - /* Compute HR filters, approximate optimized model evaluation */ - for ( iSec = 0; iSec < HRTF_MODEL_N_SECTIONS; iSec++ ) - { - ETotL = 0.0f; - ETotR = 0.0f; - ESynL = 0.0f; - ESynR = 0.0f; - - /* Energy is precalculated part updated with square of BM value. Store index for sorting */ - for ( i = 0; i < qp; i++ ) - { - modelEval->BMEnergiesL[i].val = modelEval->BM[i] * modelEval->BM[i] * model->EL[iSec * model->AlphaN + BM_idx[i]]; - modelEval->BMEnergiesR[i].val = modelEval->BM[i] * modelEval->BM[i] * model->ER[iSec * model->AlphaN + BM_idx[i]]; - modelEval->BMEnergiesL[i].i = i; - modelEval->BMEnergiesR[i].i = i; - ETotL += modelEval->BMEnergiesL[i].val; - ETotR += modelEval->BMEnergiesR[i].val; - } - - /* Number of basis components actually used. */ - p = min( HRTF_MODEL_N_CPTS_VAR[iSec], qp ); - SkipSmallest_ValueIndex( modelEval->UseIndsL, modelEval->BMEnergiesL, qp, qp - p ); - SkipSmallest_ValueIndex( modelEval->UseIndsR, modelEval->BMEnergiesR, qp, qp - p ); - - /* Account for lost energy */ - for ( i = 0; i < p; i++ ) - { - ESynL += modelEval->BMEnergiesL[modelEval->UseIndsL[i]].val; - ESynR += modelEval->BMEnergiesR[modelEval->UseIndsR[i]].val; - } - ScaleL = sqrtf( ETotL / ESynL ); - ScaleR = sqrtf( ETotR / ESynR ); - - /* Build using only the most energetic components. */ - for ( k = model->iSecFirst[iSec]; k <= model->iSecLast[iSec]; k++ ) - { - modelEval->hrfModL[k] = 0.0; - modelEval->hrfModR[k] = 0.0; - for ( i = 0; i < p; i++ ) - { - index = BM_idx[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] + k * model->AlphaN; - modelEval->hrfModL[k] += modelEval->BM[modelEval->BMEnergiesL[modelEval->UseIndsL[i]].i] * model->AlphaL[index]; - index = BM_idx[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] + k * model->AlphaN; - modelEval->hrfModR[k] += modelEval->BM[modelEval->BMEnergiesR[modelEval->UseIndsR[i]].i] * model->AlphaR[index]; - } - /* Account for lost energy */ - modelEval->hrfModL[k] *= ScaleL; - modelEval->hrfModR[k] *= ScaleR; - } - } - - return; -} -#else static void GenerateFilter_fx( const Word32 elev, /* i : Elevation angle, degrees Q22 */ Word32 azim, /* i : Azimuth angle, degrees Q22 */ @@ -552,7 +370,6 @@ static void GenerateFilter_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -561,120 +378,6 @@ static void GenerateFilter_fx( * Generates an ITD value from the B Spline model. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void GenerateITD( - const float elev, /* i : Elevation angle, degrees */ - float azim, /* i : Azimuth angle, degrees */ - ModelParamsITD_t *model, /* i : ITD Model parameters structure */ - ModelEval_t *modelEval /* i/o: Model evaluation structure */ -) -{ - int16_t qp, p, i; - int32_t index; - int16_t AlphaN; - int16_t elev_offset; - float azim_itd; - int16_t AzIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS], EvIdx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; /* non-zero basis functions */ - int16_t num_az_idx, num_ev_idx; - int16_t BM_idx[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; - - /* Wrap the requested azimuth to the range of the BSplines */ - azim = fmodf( azim + model->azimKSeq[0], 360 ); - if ( azim < 0 ) - { - azim += 360.0f; - } - azim = azim - model->azimKSeq[0]; - - if ( (int16_t) abs( (int16_t) elev ) != 90 ) - { - getStandardBSplineSampVec( modelEval->elevBfVecITD, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq, - model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape ); - azim_itd = azim; - if ( azim > 180 ) - { - /* Flip spline functions around 180 deg */ - azim_itd = 360 - azim; - } - getStandardBSplineSampVec( modelEval->azimBfVecITD, AzIdx, &num_az_idx, ( model->azimDim3 + 1 ) / 2, azim_itd, model->azimKSeq, - model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape ); - if ( azim > 180 ) - { - /* Flip spline functions around 180 deg */ - for ( i = 0; i < HRTF_MODEL_BSPLINE_NUM_COEFFS; i++ ) - { - AzIdx[i] = model->azimDim3 - 1 - AzIdx[i]; - } - } - } - else - { - num_az_idx = 1; - num_ev_idx = 1; - modelEval->elevBfVecITD[0] = 1.0f; - if ( elev < 0 ) - { - EvIdx[0] = 0; - } - else - { - EvIdx[0] = model->elevDim3 - 1; - } - } - - /* Compute BM_ITD */ - elev_offset = 0; - if ( model->elevKSeq[0] == -90 ) - { - elev_offset = -( model->azimDim3 - 1 ); - } - qp = 0; - for ( p = 0; p < num_ev_idx; p++ ) - { - if ( EvIdx[p] == 0 && (int16_t) ( model->elevKSeq[EvIdx[p]] ) == -90 ) - { - modelEval->BM_ITD[qp] = modelEval->elevBfVecITD[p]; - BM_idx[qp] = EvIdx[p] * model->azimDim3; - qp = qp + 1; - } - else if ( EvIdx[p] == ( model->elevDim3 - 1 ) && (int16_t) ( model->elevKSeq[EvIdx[p] - 2] ) == 90 ) - { - /* NB: -2 in if() condition above as number of knot points is numBF-2 */ - modelEval->BM_ITD[qp] = modelEval->elevBfVecITD[p]; - BM_idx[qp] = EvIdx[p] * model->azimDim3 + elev_offset; - qp = qp + 1; - } - else - { - for ( i = 0; i < num_az_idx; i++ ) - { - modelEval->BM_ITD[qp + i] = modelEval->elevBfVecITD[p] * modelEval->azimBfVecITD[i]; - BM_idx[qp + i] = EvIdx[p] * model->azimDim3 + elev_offset + AzIdx[i]; - } - qp = qp + num_az_idx; - } - } - - /* Compute ITD */ - AlphaN = model->elevDim3 * model->azimDim3 + elev_offset; - if ( model->elevKSeq[model->elevDim3 - 3] == 90 ) /* Constant azimuth basis function */ - { - AlphaN = AlphaN - ( model->azimDim3 - 1 ); - } - - /* Matrix multiplcation (row x column) */ - modelEval->itdMod = 0.0f; - for ( i = 0; i < qp; i++ ) - { - index = BM_idx[i]; - modelEval->itdMod += modelEval->BM_ITD[i] * model->W[index]; - } - - modelEval->itdMod = -(float) round_f( modelEval->itdMod * model->resamp_factor ); /* Resample and reverse sign of ITD as convention in model and renderer are opposite */ - - return; -} -#else static void GenerateITD_fx( const Word32 elev_fx, /* i : Elevation angle, degrees Q22 */ Word32 azim_fx, /* i : Azimuth angle, degrees Q22 */ @@ -838,7 +541,6 @@ static void GenerateITD_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -847,47 +549,6 @@ static void GenerateITD_fx( * Obtain a periodic sampled B Spline basis vector. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getPeriodicBSplineSampVec( - float *BfVec, /* i/o: values for non-zero basis functions */ - int16_t *AzIdx, /* i/o: indices of non-zero basis functions */ - const int16_t NumBFs, /* i : the number of basis functions = third index of Bf. */ - const float t, /* i : azimuth */ - int16_t *num_az_idx, /* i : Number of azimuth indices */ - const float knot_interval, /* i : The knot interval */ - const float azimKSeq_0, /* i : Knot sequence */ - const int16_t azimSegSamples, /* i : Samples per segment */ - const float *azimBsShape, /* i : Basis shape */ - const int16_t subSampFactor /* i : Subsampling factor */ -) -{ - int16_t i, nI, d0, d; - - int16_t SegSamples = azimSegSamples / subSampFactor; - - /* index of closest sample point */ - d0 = (int16_t) round_f( ( t - azimKSeq_0 ) / ( knot_interval / SegSamples ) ); - - /* find segment */ - nI = d0 / SegSamples; - - *num_az_idx = HRTF_MODEL_BSPLINE_NUM_COEFFS; - - if ( d0 % SegSamples == 0 ) - { - ( *num_az_idx )--; /* on the knot points, the last basis function is zero */ - } - - for ( i = 0; i < *num_az_idx; i++ ) - { - d = d0 - ( i + nI - 1 ) * SegSamples; /* offset of knot_interval */ - BfVec[i] = azimBsShape[(int16_t) abs( d ) * subSampFactor]; - AzIdx[i] = ( nI + i ) % NumBFs; - } - - return; -} -#else static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, /* o : values for non-zero basis functions Q30 */ Word16 *AzIdx, /* o : indices of non-zero basis functions */ @@ -958,7 +619,6 @@ static void getPeriodicBSplineSampVec_fx( return; } -#endif /*-------------------------------------------------------------------* * getStandardBSplineSampVec() @@ -966,59 +626,6 @@ static void getPeriodicBSplineSampVec_fx( * Obtain a sampled B Spline basis vector. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void getStandardBSplineSampVec( - float *BfVec, /* i/o: values for non-zero basis functions */ - int16_t *NzIdx, /* i/o: indices of non-zero basis functions */ - int16_t *num_idx, /* i/o: number of non-zero indices */ - const int16_t NumBFs, /* i : the number of basis functions = third index of Bf */ - const float t, /* i : estimation point */ - const float *KSeq, /* i : knot sequence including multiplicities */ - const int16_t SegSamples, /* i : samples per segment */ - const int16_t *BsLen, /* i : lengths of basis shapes */ - const int16_t *BsStart, /* i : start of basis shapes */ - const float *BsShape /* i : basis shapes */ -) -{ - int16_t i, nI; - float knot_interval; - int16_t d0, d, shape_idx, start_idx; - - knot_interval = ( KSeq[NumBFs - 3] - KSeq[0] ) / ( NumBFs - 3 ); /* assuming triple knot at the first knot */ - /* index of closest sample point */ - d0 = (int16_t) round_f( ( t - KSeq[0] ) / ( knot_interval / SegSamples ) ); - /* find segment */ - nI = d0 / SegSamples; - - *num_idx = HRTF_MODEL_BSPLINE_NUM_COEFFS; - - if ( d0 % SegSamples == 0 ) - { - ( *num_idx )--; /* on the knot points, the last basis function is zero */ - } - - - for ( i = 0; i < *num_idx; i++ ) - { - start_idx = max( 0, i + nI - 3 ); - shape_idx = min( i + nI, min( 3, NumBFs - 1 - ( i + nI ) ) ); - d = d0 - start_idx * SegSamples; - - if ( i + nI > NumBFs - 4 ) /* reverse full shape */ - { - d = BsLen[shape_idx] - 1 - d; - } - else if ( d > BsLen[shape_idx] - 1 ) /* reverse half shape */ - { - d = 2 * ( BsLen[shape_idx] - 1 ) - d; - } - BfVec[i] = BsShape[BsStart[shape_idx] + (int16_t) abs( d )]; /*TT, verify if abs is needed */ - NzIdx[i] = nI + i; - } - - return; -} -#else static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, /* o : values for non-zero basis functions Q30 */ Word16 *NzIdx, /* o : indices of non-zero basis functions */ @@ -1088,7 +695,6 @@ static void getStandardBSplineSampVec_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -1097,7 +703,6 @@ static void getStandardBSplineSampVec_fx( * Set precalculated parameters for HRTF model --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void HRTF_model_precalc( ModelParams_t *model /* i/o: HRTF model parameters */ ) @@ -1120,31 +725,6 @@ void HRTF_model_precalc( maximum_fx( model->azimDim3, model->elevDim3, &model->azimDim3Max ); return; } -#else -void HRTF_model_precalc( - ModelParams_t *model /* i/o: HRTF model parameters */ -) -{ - int16_t sec_length; - int16_t i; - - sec_length = model->K / HRTF_MODEL_N_SECTIONS; - - for ( i = 0; i < HRTF_MODEL_N_SECTIONS; i++ ) - { - model->iSecFirst[i] = i * sec_length; - } - for ( i = 0; i < HRTF_MODEL_N_SECTIONS - 1; i++ ) - { - model->iSecLast[i] = ( i + 1 ) * sec_length - 1; - } - model->iSecLast[HRTF_MODEL_N_SECTIONS - 1] = model->K - 1; /* Final section is longer if (K % nSec) > 0 */ - - maximum_s( model->azimDim3, model->elevDim3, &model->azimDim3Max ); - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -1152,7 +732,6 @@ void HRTF_model_precalc( * * Deallocate BSpline HR Filter model --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void BSplineModelEvalDealloc_fx( ModelParams_t *model, /* i : Model parameters */ ModelEval_t *modelEval /* i : Model evaluation structure */ @@ -1177,33 +756,6 @@ void BSplineModelEvalDealloc_fx( } return; } -#else -void BSplineModelEvalDealloc( - ModelParams_t *model, /* i : Model parameters */ - ModelEval_t *modelEval /* i : Model evaluation structure */ -) -{ - /* Allocated in LoadBSplineBinary() */ - int16_t i; - - if ( model->modelROM ) - { - free( (void *) model->azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ - for ( i = 0; i < model->elevDim3; i++ ) - { - free( model->azimKSeq[i] ); - } - free( model->azimKSeq ); - if ( modelEval != NULL ) - { - free( modelEval->hrfModL ); - free( modelEval->hrfModR ); - } - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -1213,79 +765,6 @@ void BSplineModelEvalDealloc( * unordered (i.e. skip the n_smallest values, return the remainder). --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void SkipSmallest_ValueIndex( - int16_t *use_inds, /* i/o: List of indices to use */ - const ValueIndex_t *VI, /* i : List of value-index items */ - const int16_t N, /* i : Length of list */ - const int16_t n_smallest /* i : Number of items to skip */ -) -{ - int16_t i, j, k, flag; - int16_t skip_inds[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; - float candidate_max; /* Stores the max value in the shortlist (next to be kicked off) and its index */ - int16_t candidate_max_i; - - /* Initialise with first entries of VI */ - candidate_max = 0.0; - candidate_max_i = 0; - for ( j = 0; j < n_smallest; j++ ) - { - skip_inds[j] = j; - if ( candidate_max < VI[j].val ) - { - candidate_max = VI[j].val; - candidate_max_i = j; - } - } - - /* Look in the remainder of the list for smaller values */ - for ( i = n_smallest; i < N; i++ ) - { - for ( j = 0; j < n_smallest; j++ ) - { - if ( VI[i].val < VI[skip_inds[j]].val ) - { - /* Found a smaller value, so it goes into the list, replacing candidate_max. */ - skip_inds[candidate_max_i] = i; - candidate_max = VI[i].val; - /* Update candidate_max */ - for ( k = 0; k < n_smallest; k++ ) - { - if ( VI[skip_inds[k]].val > candidate_max ) - { - candidate_max = VI[skip_inds[k]].val; - candidate_max_i = k; - } - } - break; - } - } - } - - /* Build the list of indices that will not be skipped */ - k = 0; - for ( j = 0; j < N; j++ ) - { - flag = 1; - for ( i = 0; i < n_smallest; i++ ) - { - if ( skip_inds[i] == j ) - { - flag = 0; - break; - } - } - if ( flag ) - { - use_inds[k] = j; - k++; - } - } - - return; -} -#else static void SkipSmallest_ValueIndex_fx( Word16 *use_inds, /* i/o: List of indices to use */ const ValueIndex_t *VI, /* i : List of value-index items */ @@ -1370,4 +849,3 @@ static void SkipSmallest_ValueIndex_fx( return; } -#endif diff --git a/lib_rend/ivas_objectRenderer_mix.c b/lib_rend/ivas_objectRenderer_mix.c index ff5642344..5616da037 100644 --- a/lib_rend/ivas_objectRenderer_mix.c +++ b/lib_rend/ivas_objectRenderer_mix.c @@ -39,9 +39,7 @@ #include "wmc_auto.h" #include "ivas_rom_rend.h" #include "ivas_prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*-------------------------------------------------------------------* * Local constants @@ -50,20 +48,14 @@ #define RESAMPLE_FACTOR_16_48 ( 16.0f / 48.0f ) #define RESAMPLE_FACTOR_32_48 ( 32.0f / 48.0f ) -#ifdef IVAS_FLOAT_FIXED #define RESAMPLE_FACTOR_16_48_FX ( 5461 ) // Q14 #define RESAMPLE_FACTOR_32_48_FX ( 10922 ) // Q14 -#endif /*------------------------------------------------------------------------- * Local functions *-------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error DefaultBSplineModel( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, const Word32 output_Fs ); -#else static ivas_error DefaultBSplineModel_fx( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, const Word32 output_Fs ); -#endif /*-------------------------------------------------------------------* * TDREND_MIX_LIST_SetPos() @@ -71,7 +63,6 @@ static ivas_error DefaultBSplineModel_fx( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, * Sets the listener's position in the specified mixer unit. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_MIX_LIST_SetPos_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word32 *Pos_p /* i : Listener's position */ // Q Pos_fx->q_fact @@ -94,28 +85,6 @@ void TDREND_MIX_LIST_SetPos_fx( return; } -#else -void TDREND_MIX_LIST_SetPos( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const float *Pos_p /* i : Listener's position */ -) -{ - TDREND_MIX_Listener_t *Listener_p; - - Listener_p = hBinRendererTd->Listener_p; - - if ( ( Pos_p[0] != Listener_p->Pos[0] ) || ( Pos_p[1] != Listener_p->Pos[1] ) || ( Pos_p[2] != Listener_p->Pos[2] ) ) - { - /* Set position */ - mvr2r( Pos_p, Listener_p->Pos, 3 ); - - /* Set pose update flag */ - Listener_p->PoseUpdated = TRUE; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -124,34 +93,6 @@ void TDREND_MIX_LIST_SetPos( * Sets the listener's orientation vectors in the specified mixer unit. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error TDREND_MIX_LIST_SetOrient( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const float *FrontVec_p, /* i : Listener's orientation front vector */ - const float *UpVec_p /* i : Listener's orientation up vector */ -) -{ - TDREND_MIX_Listener_t *List_p; - /* Value verification */ - if ( ( FrontVec_p[0] == 0.0f ) && ( FrontVec_p[1] == 0.0f ) && ( FrontVec_p[2] == 0.0f ) ) - { - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Zero front vector. Command is ignored!\n" ) ); - } - - if ( ( UpVec_p[0] == 0.0f ) && ( UpVec_p[1] == 0.0f ) && ( UpVec_p[2] == 0.0f ) ) - { - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Zero up vector. Command is ignored!\n" ) ); - } - - /* Get listener */ - List_p = hBinRendererTd->Listener_p; - - /* Evaluate the normalized orientation vectors and set pose update flag */ - List_p->PoseUpdated = TDREND_SPATIAL_EvalOrthonormOrient( List_p->Front, List_p->Up, List_p->Right, FrontVec_p, UpVec_p ); - - return IVAS_ERR_OK; -} -#else ivas_error TDREND_MIX_LIST_SetOrient_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word32 *FrontVec_p_fx, @@ -187,7 +128,6 @@ ivas_error TDREND_MIX_LIST_SetOrient_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -196,7 +136,6 @@ ivas_error TDREND_MIX_LIST_SetOrient_fx( * Deallocates the TDREND_MIX_t variable --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_MIX_Dealloc_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ ) @@ -250,62 +189,6 @@ void TDREND_MIX_Dealloc_fx( return; } -#else -void TDREND_MIX_Dealloc( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ -) -{ - int16_t i; - - /* Deallocate source list */ - for ( i = 0; i < hBinRendererTd->NumOfSrcs; i++ ) - { - TDREND_SRC_Dealloc( hBinRendererTd->Sources[i] ); - } - /* Deallocate Listener and RendListener */ - if ( hBinRendererTd->Listener_p != NULL ) - { - free( hBinRendererTd->Listener_p ); - hBinRendererTd->Listener_p = NULL; - } - /* Dealloc HR filter set */ - if ( hBinRendererTd->HrFiltSet_p != NULL ) - { - if ( hBinRendererTd->HrFiltSet_p->FilterMethod == TDREND_HRFILT_Method_BSplineModel ) - { - BSplineModelEvalDealloc( &hBinRendererTd->HrFiltSet_p->ModelParams, &hBinRendererTd->HrFiltSet_p->ModelEval ); - } - else - { - if ( hBinRendererTd->HrFiltSet_p->Elev_p != NULL ) - { - free( hBinRendererTd->HrFiltSet_p->Elev_p ); - hBinRendererTd->HrFiltSet_p->Elev_p = NULL; - } - if ( hBinRendererTd->HrFiltSet_p->Azim_p != NULL ) - { - free( hBinRendererTd->HrFiltSet_p->Azim_p ); - hBinRendererTd->HrFiltSet_p->Azim_p = NULL; - } - if ( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p != NULL ) - { - free( hBinRendererTd->HrFiltSet_p->LeftFiltSet_p ); - hBinRendererTd->HrFiltSet_p->LeftFiltSet_p = NULL; - } - if ( hBinRendererTd->HrFiltSet_p->RightFiltSet_p != NULL ) - { - free( hBinRendererTd->HrFiltSet_p->RightFiltSet_p ); - hBinRendererTd->HrFiltSet_p->RightFiltSet_p = NULL; - } - } - - free( hBinRendererTd->HrFiltSet_p ); - hBinRendererTd->HrFiltSet_p = NULL; - } - - return; -} -#endif /*-------------------------------------------------------------------* @@ -313,7 +196,6 @@ void TDREND_MIX_Dealloc( * * Initializes the mixer and sets HRTF --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_Init_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ @@ -372,66 +254,6 @@ ivas_error TDREND_MIX_Init_fx( } return IVAS_ERR_OK; } -#else // IVAS_FLOAT_FIXED - -ivas_error TDREND_MIX_Init( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ - const TDREND_MixSpatSpec_t *MixSpatSpec_p, /* i : Mixer spatial specification */ - const int32_t output_Fs /* i : Output sampling rate */ -) -{ - ivas_error error; - - hBinRendererTd->Gain = 1.0f; - /* Init source list */ - - /* Spatial settings */ - if ( MixSpatSpec_p != NULL ) - { - hBinRendererTd->UseCommonDistAttenModel = MixSpatSpec_p->UseCommonDistAttenModel; - hBinRendererTd->DistAttenModel = MixSpatSpec_p->DistAttenModel; - } - else - { - hBinRendererTd->UseCommonDistAttenModel = TRUE; - hBinRendererTd->DistAttenModel = 0x0000; /* Distance attenuation not activated; */ - } - - /* Init virtual and rendering listeners for spatial mixers */ - TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Pos, 0.0f, 0.0f, 0.0f ); - TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Vel, 0.0f, 0.0f, 0.0f ); - TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Front, 0.0f, 0.0f, -1.0f ); - TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Up, 0.0f, 1.0f, 0.0f ); - TDREND_SPATIAL_VecInit( hBinRendererTd->Listener_p->Right, 1.0f, 0.0f, 0.0f ); - - /* Init HR filter set */ - if ( *hHrtfTD == NULL ) - { - if ( ( hBinRendererTd->HrFiltSet_p = (TDREND_HRFILT_FiltSet_t *) malloc( sizeof( TDREND_HRFILT_FiltSet_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - - if ( ( error = DefaultBSplineModel( hBinRendererTd->HrFiltSet_p, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - *hHrtfTD = hBinRendererTd->HrFiltSet_p; - } - else - { - hBinRendererTd->HrFiltSet_p = *hHrtfTD; - } - - if ( hBinRendererTd->HrFiltSet_p->SampleRate != output_Fs ) - { - return ( IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "The sampling rate for the HR filter set does not match the output sampling rate.\n" ) ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * TDREND_MIX_SetDistAttenModel() @@ -439,7 +261,6 @@ ivas_error TDREND_MIX_Init( * Set the distance attenuation model of the mixer --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SetDistAttenModel( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const TDREND_DistAttenModel_t DistAttenModel /* i : Distance attenuation model */ @@ -468,34 +289,6 @@ ivas_error TDREND_MIX_SetDistAttenModel( } return IVAS_ERR_OK; } -#else -ivas_error TDREND_MIX_SetDistAttenModel( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const TDREND_DistAttenModel_t DistAttenModel /* i : Distance attenuation model */ -) -{ - - /* Value validation */ - if ( ( DistAttenModel < TDREND_DIST_ATTEN_MODEL_INV_DIST ) || ( DistAttenModel > TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED ) ) - { - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid distance attenuation model!\n" ) ); - } - else - { - /* Set the common distance attenuation model */ - hBinRendererTd->DistAttenModel = DistAttenModel; - - /* If using common distance attenuation model, set it. */ - if ( hBinRendererTd->UseCommonDistAttenModel ) - { - hBinRendererTd->DistAttenEnabled = TRUE; - hBinRendererTd->DistAttenModel = DistAttenModel; - } - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -503,7 +296,6 @@ ivas_error TDREND_MIX_SetDistAttenModel( * * Adds the specified input source unit to the specified mixer unit. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_AddSrc_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ Word16 *SrcInd, @@ -560,57 +352,6 @@ ivas_error TDREND_MIX_AddSrc_fx( return error; } -#else // IVAS_FLOAT_FIXED - -ivas_error TDREND_MIX_AddSrc( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - int16_t *SrcInd, /* o : Source index */ - const TDREND_PosType_t PosType /* i : Position type (absolute/relative) */ -) -{ - TDREND_SRC_t *Src_p; - ivas_error error; - - error = IVAS_ERR_OK; - - /* Get unique source index */ - *SrcInd = hBinRendererTd->MaxSrcInd + 1; - hBinRendererTd->MaxSrcInd++; - hBinRendererTd->NumOfSrcs++; - - if ( hBinRendererTd->NumOfSrcs > MAX_NUM_TDREND_CHANNELS ) - { - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Maximum number of sources exceeded!\n" ) ); - } - else - { - if ( ( PosType < TDREND_POSTYPE_ABSOLUTE ) || ( PosType > TDREND_POSTYPE_NON_DIEGETIC ) ) - { - return ( IVAS_ERROR( IVAS_ERR_INTERNAL, "Invalid position type!\n" ) ); - } - else - { - /* Alloc and init a complete source: signal+spatial+rend components */ - if ( ( error = TDREND_SRC_Alloc( &Src_p ) ) != IVAS_ERR_OK ) - { - return error; - } - TDREND_SRC_Init( Src_p, PosType ); - - /* Special OpenAL initialization due to a common distance attenuation model */ - if ( hBinRendererTd->DistAttenModel != 0 ) - { - Src_p->SrcSpatial_p->DistAttenEnabled = TRUE; - Src_p->SrcSpatial_p->DistAtten.DistAttenModel = hBinRendererTd->DistAttenModel; - } - /* Add source to mixer */ - hBinRendererTd->Sources[*SrcInd] = Src_p; - } - } - - return error; -} -#endif /*-------------------------------------------------------------------* * BSplineModelEvalAlloc() @@ -618,7 +359,6 @@ ivas_error TDREND_MIX_AddSrc( * Allocate the B Spline HR Filter model. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error BSplineModelEvalAlloc_fx( ModelParams_t *model, /* i : Model parameters */ ModelEval_t *modelEval /* i/o: Model evaluation structure */ @@ -636,25 +376,6 @@ static ivas_error BSplineModelEvalAlloc_fx( return IVAS_ERR_OK; } -#else -static ivas_error BSplineModelEvalAlloc( - ModelParams_t *model, /* i : Model parameters */ - ModelEval_t *modelEval /* i/o: Model evaluation structure */ -) -{ - if ( ( modelEval->hrfModL = (float *) malloc( model->K * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - - if ( ( modelEval->hrfModR = (float *) malloc( model->K * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -663,7 +384,6 @@ static ivas_error BSplineModelEvalAlloc( * Init default HRTF model --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error DefaultBSplineModel_fx( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* o : Loaded HR filter set */ const Word32 output_Fs /* i : Output sampling rate */ // Q0 @@ -923,189 +643,3 @@ static ivas_error DefaultBSplineModel_fx( return IVAS_ERR_OK; } -#else -static ivas_error DefaultBSplineModel( - TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* o : Loaded HR filter set */ - const int32_t output_Fs /* i : Output sampling rate */ -) -{ - ModelParams_t *model; - ModelParamsITD_t *modelITD; - int16_t i, j; - ivas_error error; - - HrFiltSet_p->FilterMethod = TDREND_HRFILT_Method_BSplineModel; - model = &( HrFiltSet_p->ModelParams ); - modelITD = &( HrFiltSet_p->ModelParamsITD ); - - switch ( output_Fs ) - { - case 48000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_48kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_48kHz; - break; - case 32000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_32kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_32kHz; - break; - case 16000: - HrFiltSet_p->lr_energy_and_iac[0] = defaultHRIR_left_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[1] = defaultHRIR_right_avg_power_16kHz; - HrFiltSet_p->lr_energy_and_iac[2] = defaultHRIR_coherence_16kHz; - break; - } - - /* Set ROM flag for correct deallocation */ - model->modelROM = TRUE; - - /* int16_t parameters */ - model->UseItdModel = 1; - model->SplineDegree = 4; - model->elevDim2 = 17; - model->elevDim3 = 15; - model->AlphaN = 470; - model->num_unique_azim_splines = 1; - model->elevSegSamples = 4; - model->elevBsLen[0] = 5; - model->elevBsLen[1] = 9; - model->elevBsLen[2] = 13; - model->elevBsLen[3] = 9; - model->elevBsStart[0] = 0; - model->elevBsStart[1] = 5; - model->elevBsStart[2] = 14; - model->elevBsStart[3] = 27; - - model->azimDim2 = defaultHRIR_rom_azimDim2; - model->azimDim3 = defaultHRIR_rom_azimDim3; - model->azim_start_idx = defaultHRIR_rom_azim_start_idx; - model->azimSegSamples = defaultHRIR_rom_azimSegSamples; - model->azimShapeIdx = defaultHRIR_rom_azimShapeIdx; - model->azimShapeSampFactor = defaultHRIR_rom_azimShapeSampFactor; - - /* float parameters */ - model->elevKSeq = (const float *) defaultHRIR_rom_elevKSeq; - model->elevBsShape = (const float *) defaultHRIR_rom_elevBsShape; - - if ( ( model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - - model->azimBsShape[0] = (const float *) defaultHRIR_rom_azimBsShape; - if ( ( model->azimKSeq = (float **) malloc( 18 * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - if ( ( model->azimKSeq[0] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - if ( ( model->azimKSeq[model->elevDim3 - 1] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - model->azimKSeq[0][0] = 0.0f; - model->azimKSeq[model->elevDim3 - 1][0] = 0.0f; - model->azimKSeq[0][1] = 360.0f; - model->azimKSeq[model->elevDim3 - 1][1] = 360.0f; - - for ( i = 1; i < model->elevDim3 - 1; i++ ) - { - if ( ( model->azimKSeq[i] = (float *) malloc( model->azimDim2[i] * sizeof( float * ) ) ) == NULL ) /* azimDim2[i] = 91, i=2..15 */ - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) ); - } - for ( j = 0; j < model->azimDim2[i]; j++ ) - { - model->azimKSeq[i][j] = (float) defaultHRIR_rom_azimSegSamples[0] * j; - } - } - - switch ( output_Fs ) - { - case 48000: - model->AlphaL = (const float *) defaultHRIR_rom_AlphaL48; - model->AlphaR = (const float *) defaultHRIR_rom_AlphaR48; - model->EL = (const float *) defaultHRIR_rom_EL48; - model->ER = (const float *) defaultHRIR_rom_ER48; - model->K = 128; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { - modelITD->resamp_factor = 1.0f; - } - break; - case 32000: - model->AlphaL = (const float *) defaultHRIR_rom_AlphaL32; - model->AlphaR = (const float *) defaultHRIR_rom_AlphaR32; - model->EL = (const float *) defaultHRIR_rom_EL32; - model->ER = (const float *) defaultHRIR_rom_ER32; - model->K = 86; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { - modelITD->resamp_factor = RESAMPLE_FACTOR_32_48; - } - break; - case 16000: - model->AlphaL = (const float *) defaultHRIR_rom_AlphaL16; - model->AlphaR = (const float *) defaultHRIR_rom_AlphaR16; - model->EL = (const float *) defaultHRIR_rom_EL16; - model->ER = (const float *) defaultHRIR_rom_ER16; - model->K = 43; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { - modelITD->resamp_factor = RESAMPLE_FACTOR_16_48; - } - break; - default: - break; - } - - modelITD->N = 4; - modelITD->elevDim2 = 20; - modelITD->elevDim3 = 18; - modelITD->azimDim2 = 41; - modelITD->azimDim3 = 41; - modelITD->elevSegSamples = 3; - modelITD->elevBsLen[0] = 4; - modelITD->elevBsLen[1] = 7; - modelITD->elevBsLen[2] = 10; - modelITD->elevBsLen[3] = 7; - modelITD->elevBsStart[0] = 0; - modelITD->elevBsStart[1] = 4; - modelITD->elevBsStart[2] = 11; - modelITD->elevBsStart[3] = 21; - - modelITD->elevKSeq = defaultHRIR_rom_ITD_elevKSeq; - - modelITD->azimBsLen[0] = 11; - modelITD->azimBsLen[1] = 21; - modelITD->azimBsLen[2] = 31; - modelITD->azimBsLen[3] = 21; - modelITD->azimBsStart[0] = 0; - modelITD->azimBsStart[1] = 11; - modelITD->azimBsStart[2] = 32; - modelITD->azimBsStart[3] = 63; - - modelITD->azimSegSamples = 10; - - modelITD->azimKSeq = defaultHRIR_rom_ITD_azimKSeq; - modelITD->W = (const float *) defaultHRIR_rom_ITD_W; - modelITD->azimBsShape = (const float *) defaultHRIR_rom_ITD_azimBsShape; - modelITD->elevBsShape = (const float *) defaultHRIR_rom_ITD_elevBsShape; - - HRTF_model_precalc( model ); - - HrFiltSet_p->latency_s = defaultHRIR_rom_latency_s; - HrFiltSet_p->SampleRate = output_Fs; - HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; - - if ( ( error = BSplineModelEvalAlloc( &HrFiltSet_p->ModelParams, &HrFiltSet_p->ModelEval ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_rend/ivas_objectRenderer_sfx.c b/lib_rend/ivas_objectRenderer_sfx.c index cc81d0d6d..8c6fd8663 100644 --- a/lib_rend/ivas_objectRenderer_sfx.c +++ b/lib_rend/ivas_objectRenderer_sfx.c @@ -37,9 +37,7 @@ #include "ivas_rom_rend.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*---------------------------------------------------------------------* @@ -51,119 +49,13 @@ * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void sincResample( const float *input, float *output, const int16_t length_in, const int16_t length_out ); -#else static void sincResample_fx( const Word32 *input_fx, Word32 *output_fx, const Word16 length_in, const Word16 length_out ); -#endif /*---------------------------------------------------------------------* * TDREND_Apply_ITD() * * Apply ITD by delaying late channel *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void TDREND_Apply_ITD( - float *input, /* i : Input subframe to be time adjusted */ - float *out_left, /* o : Output left channel with ITD applied */ - float *out_right, /* o : Output right channel with ITD applied */ - int16_t *previtd, /* i/o: Previous ITD value */ - const int16_t itd, /* i : Current subframe ITD value */ - float *mem_itd, /* i/o: ITD buffer memory */ - const int16_t length /* i : Subframe length */ -) -{ - int16_t transition_len; - int16_t tlen1, tlen2, tlen3; - int16_t length_in1; - int16_t length_in2; - int16_t currShift; - int16_t prevShift; - float *pstart1; - float *pstart2; - float *pstart3; - float buffer[ITD_MEM_LEN + L_SUBFRAME5MS_48k]; - float *p_input; - float *out_buf_A, *out_buf_B; - - push_wmops( "TDREND_Apply_ITD" ); - - /* Prepare resampling buffer */ - mvr2r( mem_itd, buffer, ITD_MEM_LEN ); /* Retrieve memory */ - p_input = buffer + ITD_MEM_LEN; /* pointer to the current subframe */ - mvr2r( input, p_input, length ); /* input current subframe */ - mvr2r( buffer + length, mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ - - currShift = (int16_t) abs( itd ); - prevShift = (int16_t) abs( *previtd ); - tlen3 = max( 0, SFX_SPAT_BIN_SINC_M - currShift ); /* Make sure there is enough look-ahead for the sinc resampling */ - transition_len = length - tlen3; - - if ( ( ( *previtd ) * itd ) < 0 ) - { - /* ITD sign change - apply shift on both channels */ - tlen1 = (int16_t) ( ( (float) ( transition_len * prevShift ) / ( (float) ( prevShift + currShift ) ) ) + 0.5f ); - tlen2 = transition_len - tlen1; - pstart1 = p_input - prevShift; - length_in1 = tlen1 + prevShift; - pstart2 = pstart1 + length_in1; - length_in2 = tlen2 - currShift; - pstart3 = pstart2 + length_in2; - } - else - { - /* ITD sign stays the same, or one of them is zero */ - tlen1 = transition_len; - tlen2 = 0; - pstart1 = p_input - prevShift; - length_in1 = transition_len + prevShift - currShift; - pstart2 = pstart1 + length_in1; - length_in2 = 0; - pstart3 = pstart2 + length_in2 + currShift; - } - - if ( *previtd == 0 ) - { - if ( itd > 0 ) - { - out_buf_A = out_right; - out_buf_B = out_left; - } - else - { - out_buf_A = out_left; - out_buf_B = out_right; - } - } - else - { - if ( *previtd > 0 ) - { - out_buf_A = out_right; - out_buf_B = out_left; - } - else - { - out_buf_A = out_left; - out_buf_B = out_right; - } - } - - /* Output buffer A */ - sincResample( pstart1, out_buf_A, length_in1, tlen1 ); - mvr2r( pstart2, out_buf_A + tlen1, length - tlen1 ); - - /* Output buffer B */ - mvr2r( p_input, out_buf_B, tlen1 ); - sincResample( pstart2, out_buf_B + tlen1, length_in2, tlen2 ); - mvr2r( pstart3, out_buf_B + transition_len, tlen3 ); - - *previtd = itd; - pop_wmops(); - return; -} - -#else void TDREND_Apply_ITD_fx( Word32 *input_fx, /* i : Input subframe to be time adjusted Qx */ Word32 *out_left_fx, /* o : Output left channel with ITD applied Qx */ @@ -277,7 +169,6 @@ void TDREND_Apply_ITD_fx( pop_wmops(); return; } -#endif /*---------------------------------------------------------------------* * sincResample() @@ -287,71 +178,6 @@ void TDREND_Apply_ITD_fx( * the target frame. *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void sincResample( - const float *input, /*i : Input signal */ - float *output, /*o : Output signal */ - const int16_t length_in, /*i : Input length */ - const int16_t length_out /*i : Output length */ -) -{ - int16_t snc0; - int16_t i, j; - int16_t t; - float t_frac; - float t_step; - float tmp; - const float *p_mid; - const float *p_forward; - const float *p_backward; - const float *p_sinc_forward; - const float *p_sinc_backward; - - /* avoid division by 0 */ - if ( 0 == length_out ) - { - return; - } - - - /* Compute fractional time step */ - t_step = (float) ( length_in ) / (float) ( length_out ); - t_frac = 0; - - for ( i = 0; i < length_out; i++ ) - { - t = (int16_t) ( t_frac + EPSILON ); - - /* Calculate the sinc-index for the center value of the sinc */ - snc0 = (int16_t) ( ( t_frac - t + EPSILON ) * SFX_SPAT_BIN_NUM_SUBSAMPLES + 0.5f ); - - /* Run convolution forward and backward from mid point */ - p_mid = input + t; - p_forward = p_mid + 1; - p_backward = p_mid - 1; - p_sinc_forward = SincTable + SFX_SPAT_BIN_NUM_SUBSAMPLES - snc0; - p_sinc_backward = SincTable + SFX_SPAT_BIN_NUM_SUBSAMPLES + snc0; - - tmp = *p_mid * SincTable[snc0]; /* Middle point */ - for ( j = 0; j < SFX_SPAT_BIN_SINC_M - 1; j++ ) - { - tmp += ( *p_forward ) * ( *p_sinc_forward ) + ( *p_backward ) * ( *p_sinc_backward ); - p_sinc_forward += SFX_SPAT_BIN_NUM_SUBSAMPLES; - p_sinc_backward += SFX_SPAT_BIN_NUM_SUBSAMPLES; - p_forward++; - p_backward--; - } - tmp += ( *p_forward ) * ( *p_sinc_forward ); /* Integer index always rounded down --> 4 steps backward, 5 steps forward */ - - output[i] = tmp; - - /* Advance fractional time */ - t_frac += t_step; - } - - return; -} -#else static void sincResample_fx( const Word32 *input_fx, /*i : Input signal Qx */ Word32 *output_fx, /*o : Output signal Qx */ @@ -436,7 +262,6 @@ static void sincResample_fx( return; } -#endif /*-------------------------------------------------------------------* * TDREND_firfilt() @@ -445,60 +270,6 @@ static void sincResample_fx( * --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void TDREND_firfilt( - float *signal, /* i/o: Input signal / Filtered signal */ - float *filter, /* i/o: FIR filter */ - const float *filter_delta, /* i : FIR filter delta */ - const int16_t intp_count, /* i : interpolation count */ - float *mem, /* i/o: filter memory */ - const int16_t subframe_length, /* i : Length of signal */ - const int16_t filterlength, /* i : Filter length */ - const float Gain, /* i : Gain */ - const float prevGain /* i : Previous gain */ -) -{ - float buffer[SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 + L_SUBFRAME5MS_48k]; - float *p_signal; - float *p_tmp; - float *p_filter; - float tmp; - int16_t i, j; - float step, gain_tmp, gain_delta; - - gain_delta = ( Gain - prevGain ); - step = gain_delta / ( subframe_length ); - gain_tmp = prevGain; - - /* Handle memory */ - p_signal = buffer + filterlength - 1; - mvr2r( mem, buffer, filterlength - 1 ); /* Insert memory */ - mvr2r( signal, buffer + filterlength - 1, subframe_length ); /* Insert current frame */ - mvr2r( signal + subframe_length - filterlength + 1, mem, filterlength - 1 ); /* Update memory for next frame */ - - /* Convolution */ - for ( i = 0; i < subframe_length; i++ ) - { - tmp = 0.0f; - p_tmp = p_signal + i; - p_filter = filter; - for ( j = 0; j < filterlength; j++ ) - { - tmp += ( *p_filter++ ) * ( *p_tmp-- ); - } - /* Apply linear gain interpolation in case of abrupt gain changes */ - gain_tmp = gain_tmp + step; - signal[i] = tmp * gain_tmp; - - if ( i < intp_count ) - { - v_add( filter, filter_delta, filter, filterlength ); - } - } - - return; -} -#else void TDREND_firfilt_fx( Word32 *signal_fx, /* i/o: Input signal / Filtered signal Qx */ Word32 *filter_fx, /* i/o: FIR filter filter_e */ @@ -569,4 +340,3 @@ void TDREND_firfilt_fx( return; } -#endif diff --git a/lib_rend/ivas_objectRenderer_sources.c b/lib_rend/ivas_objectRenderer_sources.c index c9d841915..f01f66797 100644 --- a/lib_rend/ivas_objectRenderer_sources.c +++ b/lib_rend/ivas_objectRenderer_sources.c @@ -36,29 +36,19 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" #include "prot_fx.h" -#endif /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void TDREND_SRC_SPATIAL_Init( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_PosType_t PosType ); -static void TDREND_SRC_SPATIAL_SetDirAtten( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_DirAtten_t *DirAtten_p ); -static float TDREND_SRC_SPATIAL_GetDirGain( const TDREND_DirAtten_t *DirAtten_p, const float *Front_p, const float *RelPos_p ); -static float TDREND_SRC_SPATIAL_GetDistGain( const TDREND_DistAtten_t *DistAtten_p, const float Dist ); -static void TDREND_SRC_REND_Init( TDREND_SRC_REND_t *SrcRend_p ); -#else static void TDREND_SRC_REND_Init_fx( TDREND_SRC_REND_t *SrcRend_p ); static void TDREND_SRC_SPATIAL_Init_fx( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_PosType_t PosType ); static Word16 TDREND_SRC_SPATIAL_GetDirGain_fx( const TDREND_DirAtten_t *DirAtten_p, const Word32 *Front_p_fx, const Word32 *RelPos_p, const Word16 RelPos_p_e ); static Word16 TDREND_SRC_SPATIAL_GetDistGain_fx( const TDREND_DistAtten_t *DistAtten_p, const Word32 Dist_fx, const Word16 Dist_e ); static void TDREND_SRC_SPATIAL_SetDirAtten_fx( TDREND_SRC_SPATIAL_t *SrcSpatial_p, const TDREND_DirAtten_t *DirAtten_p ); -#endif static ivas_error TDREND_SRC_REND_Alloc( TDREND_SRC_REND_t **SrcRend_pp ); static void TDREND_SRC_SPATIAL_Dealloc( TDREND_SRC_SPATIAL_t *SrcSpatial_p ); @@ -68,7 +58,6 @@ static void TDREND_SRC_SPATIAL_Dealloc( TDREND_SRC_SPATIAL_t *SrcSpatial_p ); * Set source position --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetPos_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index */ @@ -104,33 +93,6 @@ ivas_error TDREND_MIX_SRC_SetPos_fx( return IVAS_ERR_OK; } -#else -ivas_error TDREND_MIX_SRC_SetPos( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const float *Vec_p /* i : Position vector */ -) -{ - TDREND_SRC_SPATIAL_t *SrcSpatial_p; - - if ( SrcInd > hBinRendererTd->MaxSrcInd ) - { - return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index!\n" ) ); - } - else - { - SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; - - if ( SrcSpatial_p->Pos_p[0] != Vec_p[0] || SrcSpatial_p->Pos_p[1] != Vec_p[1] || SrcSpatial_p->Pos_p[2] != Vec_p[2] ) - { - mvr2r( Vec_p, SrcSpatial_p->Pos_p, 3 ); - SrcSpatial_p->Updated = TRUE; - } - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -138,7 +100,6 @@ ivas_error TDREND_MIX_SRC_SetPos( * * Set source direction --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetDir_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index */ @@ -167,34 +128,6 @@ ivas_error TDREND_MIX_SRC_SetDir_fx( } return IVAS_ERR_OK; } -#else -ivas_error TDREND_MIX_SRC_SetDir( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const float *Vec_p /* i : Direction vector */ -) -{ - TDREND_SRC_SPATIAL_t *SrcSpatial_p; - - /* Value verification */ - if ( ( Vec_p[0] == 0.0f ) && ( Vec_p[1] == 0.0f ) && ( Vec_p[2] == 0.0f ) ) - { - return ( IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Zero direction vector. Command is ignored!\n" ) ); - } - if ( SrcInd > hBinRendererTd->MaxSrcInd ) - { - return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index!\n" ) ); - } - else - { - SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; - TDREND_SPATIAL_VecNormalize( Vec_p, SrcSpatial_p->Front_p ); - SrcSpatial_p->Updated = TRUE; - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -202,7 +135,6 @@ ivas_error TDREND_MIX_SRC_SetDir( * * Set directional attenuation for the mixer. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetDirAtten_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index Q0 */ @@ -222,27 +154,6 @@ ivas_error TDREND_MIX_SRC_SetDirAtten_fx( return IVAS_ERR_OK; } -#else -ivas_error TDREND_MIX_SRC_SetDirAtten( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const TDREND_DirAtten_t *DirAtten_p /* i : Directional attenuation specifier */ -) -{ - TDREND_SRC_SPATIAL_t *SrcSpatial_p; - if ( SrcInd > hBinRendererTd->MaxSrcInd ) - { - return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); - } - else - { - SrcSpatial_p = hBinRendererTd->Sources[SrcInd]->SrcSpatial_p; - TDREND_SRC_SPATIAL_SetDirAtten( SrcSpatial_p, DirAtten_p ); - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* @@ -251,7 +162,6 @@ ivas_error TDREND_MIX_SRC_SetDirAtten( * Set play state for the source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetPlayState( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index Q0 */ @@ -269,25 +179,6 @@ ivas_error TDREND_MIX_SRC_SetPlayState( } return IVAS_ERR_OK; } -#else // IVAS_FLOAT_FIXED -ivas_error TDREND_MIX_SRC_SetPlayState( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const TDREND_PlayStatus_t PlayStatus /* i : Play state */ -) -{ - if ( SrcInd > hBinRendererTd->MaxSrcInd ) - { - return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) ); - } - else - { - hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus; - } - return IVAS_ERR_OK; -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * TDREND_SRC_REND_Alloc() @@ -320,7 +211,6 @@ static ivas_error TDREND_SRC_REND_Alloc( * * Initialize rendering aspects of source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void TDREND_SRC_REND_Init_fx( TDREND_SRC_REND_t *SrcRend_p /* i/o: Source object */ ) @@ -353,37 +243,6 @@ static void TDREND_SRC_REND_Init_fx( } return; } -#else -static void TDREND_SRC_REND_Init( - TDREND_SRC_REND_t *SrcRend_p /* i/o: Source object */ -) -{ - int16_t nC; - - /* Internal state */ - SrcRend_p->InputAvailable = FALSE; - SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING; - /* SrcGain */ - for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) - { - SrcRend_p->SrcGainMin_p[nC] = 0.0f; - SrcRend_p->SrcGain_p[nC] = 1.0f; - SrcRend_p->SrcGainMax_p[nC] = 1.0f; - } - SrcRend_p->SrcGainUpdated = FALSE; - - /* Init directional and distance gains */ - for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) - { - SrcRend_p->DirGain_p[nC] = 1.0f; - SrcRend_p->DistGain_p[nC] = 1.0f; - } - - - return; -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * TDREND_SRC_REND_UpdateFiltersFromSpatialParams() @@ -391,131 +250,6 @@ static void TDREND_SRC_REND_Init( * Update the HR filter due to spatial change. --------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ - TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i : Spatial aspects of source */ - float *hrf_left_prev, /* o : Left filter */ - float *hrf_right_prev, /* o : Right filter */ - float *hrf_left_delta, /* o : Left filter interpolation delta */ - float *hrf_right_delta, /* o : Right filter interpolation delta */ - int16_t *intp_count, /* o : Interpolation count */ - int16_t *filterlength, /* o : Length of filters */ - int16_t *itd, /* o : ITD value */ - float *Gain, /* o : Gain value */ - TDREND_SRC_t *Src_p, /* i/o: Source pointer */ - const int16_t subframe_update_flag ) -{ - TDREND_MIX_Listener_t *Listener_p; - TDREND_HRFILT_FiltSet_t *HrFiltSet_p; - float ListRelPos[3], ListRelDist; - float ListRelPosAbs[3]; /* Relative position, ignoring orientation of listener */ - float Azim, Elev; - float hrf_left[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - float hrf_right[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - float azim_delta; - float elev_delta; - - /* Evaluate the HR filters from the source and listener positions and orientations */ - Listener_p = hBinRendererTd->Listener_p; - HrFiltSet_p = hBinRendererTd->HrFiltSet_p; - - *filterlength = min( HrFiltSet_p->FiltLength, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); - - if ( SrcSpatial_p->PosType == TDREND_POSTYPE_ABSOLUTE ) - { - - /* Absolute position */ - TDREND_SPATIAL_VecMapToNewCoordSystem( SrcSpatial_p->Pos_p, Listener_p->Pos, Listener_p->Front, Listener_p->Up, Listener_p->Right, ListRelPos, ListRelPosAbs ); - ListRelDist = TDREND_SPATIAL_VecNorm( ListRelPos ); - - /* 2. Evaluate the Elevation and Azimuth angles */ - if ( ( ListRelPos[0] == 0 ) && ( ListRelPos[1] == 0 ) && ( ListRelPos[2] == 0 ) ) - { - Elev = 0.0; - Azim = 0.0; - } - else - { - Elev = _180_OVER_PI * atan2f( ListRelPos[2], sqrtf( ListRelPos[0] * ListRelPos[0] + ListRelPos[1] * ListRelPos[1] ) ); - /* Basis set is [front, right, up], which is a left-handed coordinate system. Minus sign here is to change to a positive-left system for azimuth */ - Azim = -1.0f * _180_OVER_PI * (float) atan2f( ListRelPos[1], ListRelPos[0] ); - } - - GetFilterFromAngle( HrFiltSet_p, Elev, Azim, *filterlength, hrf_left, hrf_right, itd ); - - /* 6. Evaluate the directional and distance gains */ - /* Directional gain */ - *SrcRend_p->DirGain_p = 1.0f; - if ( SrcSpatial_p->DirAttenEnabled ) - { - *SrcRend_p->DirGain_p = TDREND_SRC_SPATIAL_GetDirGain( &SrcSpatial_p->DirAtten, SrcSpatial_p->Front_p, ListRelPosAbs ); - } - - /* Distance gain */ - *SrcRend_p->DistGain_p = 1.0f; - if ( hBinRendererTd->UseCommonDistAttenModel ) - { - if ( hBinRendererTd->DistAttenEnabled ) - { - SrcSpatial_p->DistAtten.DistAttenModel = hBinRendererTd->DistAttenModel; - *SrcRend_p->DistGain_p = TDREND_SRC_SPATIAL_GetDistGain( &SrcSpatial_p->DistAtten, ListRelDist ); - } - } - else - { - if ( SrcSpatial_p->DistAttenEnabled ) - { - *SrcRend_p->DistGain_p = TDREND_SRC_SPATIAL_GetDistGain( &SrcSpatial_p->DistAtten, ListRelDist ); - } - } - - /* Update total gains */ - *Gain = ( *SrcRend_p->SrcGain_p ) * ( *SrcRend_p->DirGain_p ) * ( *SrcRend_p->DistGain_p ) * hBinRendererTd->Gain; - - /* Delta for interpolation, in case the angular step exceeds MAX_ANGULAR_STEP */ - elev_delta = Elev - Src_p->elev_prev; - azim_delta = Azim - Src_p->azim_prev; - Src_p->elev_prev = Elev; - Src_p->azim_prev = Azim; - - azim_delta = ( azim_delta > 180.0f ) ? ( azim_delta - 360 ) : ( ( azim_delta < -180.0f ) ? ( azim_delta + 360 ) : ( azim_delta ) ); /* map to -180:180 range */ - *intp_count = min( MAX_INTERPOLATION_STEPS, max( (int16_t) ( fabsf( azim_delta ) * MAX_ANGULAR_STEP_INV ), (int16_t) ( fabsf( elev_delta ) * MAX_ANGULAR_STEP_INV ) ) ); - } - else /* TDREND_POSTYPE_NON_DIEGETIC */ - { - *itd = 0; - *Gain = 1.0f; - set_f( hrf_left, 0.0f, *filterlength ); - set_f( hrf_right, 0.0f, *filterlength ); - hrf_left[0] = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; - hrf_right[0] = 1.f - hrf_left[0]; - *intp_count = MAX_INTERPOLATION_STEPS; - Src_p->elev_prev = 0; - Src_p->azim_prev = 360.0f; /* Dummy angle -- sets max interpolation if switching to TDREND_POSTYPE_ABSOLUTE */ - } - - if ( ( *intp_count > 0 ) && subframe_update_flag ) - { - /* Set deltas for interpolation */ - v_sub( hrf_left, hrf_left_prev, hrf_left_delta, *filterlength ); - v_multc( hrf_left_delta, 1.0f / *intp_count, hrf_left_delta, *filterlength ); - v_sub( hrf_right, hrf_right_prev, hrf_right_delta, *filterlength ); - v_multc( hrf_right_delta, 1.0f / *intp_count, hrf_right_delta, *filterlength ); - } - else - { - /* No interpolation, just set the new filters and reset deltas */ - mvr2r( hrf_left, hrf_left_prev, *filterlength ); - mvr2r( hrf_right, hrf_right_prev, *filterlength ); - set_f( hrf_left_delta, 0.0f, *filterlength ); - set_f( hrf_right_delta, 0.0f, *filterlength ); - } - - return; -} -#else void TDREND_SRC_REND_UpdateFiltersFromSpatialParams_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ @@ -765,7 +499,6 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams_fx( return; } -#endif /*-------------------------------------------------------------------* * TDREND_SRC_SPATIAL_Alloc() @@ -799,7 +532,6 @@ static ivas_error TDREND_SRC_SPATIAL_Alloc( * Deallocate spatial properties of a source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void TDREND_SRC_SPATIAL_Dealloc( TDREND_SRC_SPATIAL_t *SrcSpatial_p /* i/o: Source spatial parameters */ ) @@ -813,30 +545,12 @@ static void TDREND_SRC_SPATIAL_Dealloc( SrcSpatial_p = NULL; return; } -#else -static void TDREND_SRC_SPATIAL_Dealloc( - TDREND_SRC_SPATIAL_t *SrcSpatial_p /* i/o: Source spatial parameters */ -) -{ - if ( SrcSpatial_p == NULL ) - { - return; - } - /* Free the SrcSpatial_p variable */ - free( SrcSpatial_p ); - SrcSpatial_p = NULL; - - return; -} - -#endif // IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * TDREND_SRC_SPATIAL_Init() * * Initialize spatial properties of a source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void TDREND_SRC_SPATIAL_Init_fx( TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ const TDREND_PosType_t PosType /* i : Relative/absolute position type */ @@ -889,43 +603,6 @@ static void TDREND_SRC_SPATIAL_Init_fx( return; } -#else -static void TDREND_SRC_SPATIAL_Init( - TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ - const TDREND_PosType_t PosType /* i : Relative/absolute position type */ -) -{ - int16_t nC; - - /* Initialize variables */ - SrcSpatial_p->Updated = FALSE; - - /* Source position, velocity and direction vectors */ - SrcSpatial_p->PosType = PosType; - for ( nC = 0; nC < SPAT_BIN_MAX_INPUT_CHANNELS; nC++ ) - { - /* Source position */ - TDREND_SPATIAL_VecInit( SrcSpatial_p->Pos_p + nC * 3, 0.0f, 0.0f, 0.0f ); - /* Source direction */ - TDREND_SPATIAL_VecInit( SrcSpatial_p->Front_p + nC * 3, 0.0f, 0.0f, 1.0f ); - } - - /* Source directional attenuation */ - SrcSpatial_p->DirAttenEnabled = FALSE; - SrcSpatial_p->DirAtten.ConeInnerAngle = 360.0f; - SrcSpatial_p->DirAtten.ConeOuterAngle = 360.0f; - SrcSpatial_p->DirAtten.ConeOuterGain = 1.0f; - - /* Source distance attenuation */ - SrcSpatial_p->DistAttenEnabled = FALSE; - SrcSpatial_p->DistAtten.DistAttenModel = TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED; - SrcSpatial_p->DistAtten.RefDist = 1.0f; - SrcSpatial_p->DistAtten.MaxDist = 15.75f; /* Maximum radius (2^ISM_RADIUS_NBITS-1)*0.25 */ - SrcSpatial_p->DistAtten.RollOffFactor = 1.0f; - - return; -} -#endif /*-------------------------------------------------------------------* * TDREND_SRC_SPATIAL_SetDirAtten() @@ -933,7 +610,6 @@ static void TDREND_SRC_SPATIAL_Init( * Sets the directional attenuation mode. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void TDREND_SRC_SPATIAL_SetDirAtten_fx( TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ const TDREND_DirAtten_t *DirAtten_p /* i : Directionality specification */ @@ -950,21 +626,6 @@ static void TDREND_SRC_SPATIAL_SetDirAtten_fx( move16(); return; } -#else -static void TDREND_SRC_SPATIAL_SetDirAtten( - TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i/o: Source spatial parameters */ - const TDREND_DirAtten_t *DirAtten_p /* i : Directionality specification */ -) -{ - /* Set directional attenuation */ - SrcSpatial_p->DirAttenEnabled = TRUE; - SrcSpatial_p->DirAtten.ConeInnerAngle = DirAtten_p->ConeInnerAngle; - SrcSpatial_p->DirAtten.ConeOuterAngle = DirAtten_p->ConeOuterAngle; - SrcSpatial_p->DirAtten.ConeOuterGain = DirAtten_p->ConeOuterGain; - - return; -} -#endif /*-------------------------------------------------------------------* * TDREND_SRC_SPATIAL_GetDirGain() @@ -973,51 +634,6 @@ static void TDREND_SRC_SPATIAL_SetDirAtten( --------------------------------------------------------------------*/ /*! r: Gain value */ -#ifndef IVAS_FLOAT_FIXED -static float TDREND_SRC_SPATIAL_GetDirGain( - const TDREND_DirAtten_t *DirAtten_p, /* i : Directional attenuation specification */ - const float *Front_p, /* i : Front-pointing vector */ - const float *RelPos_p /* i : Relative position */ -) -{ - float DirGain; - float Vec[3]; - float ProjCoef, NormRelPos; - float AngleDeg; - - DirGain = 1.0f; - - /* Note that the front vector is unit norm, thus */ - /* Angle = acos ( Proj coeff from projecting -RelPos onto Front / norm(RelPos) ); */ - v_multc( RelPos_p, -1, Vec, 3 ); - ProjCoef = dotp( Vec, Front_p, 3 ); - NormRelPos = TDREND_SPATIAL_VecNorm( RelPos_p ); - - if ( NormRelPos != 0.0f ) - { - AngleDeg = _180_OVER_PI * acosf( ProjCoef / NormRelPos ); - } - else - { - AngleDeg = 0.0f; - } - - if ( 2.0f * AngleDeg <= DirAtten_p->ConeInnerAngle ) - { - DirGain = 1.0f; - } - else if ( 2.0f * AngleDeg <= DirAtten_p->ConeOuterAngle ) - { - DirGain = 1.0f - ( 2.0f * AngleDeg - DirAtten_p->ConeInnerAngle ) / ( DirAtten_p->ConeOuterAngle - DirAtten_p->ConeInnerAngle ) * ( 1.0f - DirAtten_p->ConeOuterGain ); - } - else - { - DirGain = DirAtten_p->ConeOuterGain; - } - - return DirGain; -} -#else static Word16 TDREND_SRC_SPATIAL_GetDirGain_fx( /* o : Directional Gain Output Q14 */ const TDREND_DirAtten_t *DirAtten_p, /* i : Directional attenuation specification */ const Word32 *Front_p_fx, /* i : Front-pointing vector Q30 */ @@ -1095,8 +711,6 @@ static Word16 TDREND_SRC_SPATIAL_GetDirGain_fx( return DirGain_fx; } -#endif - /*-------------------------------------------------------------------* * TDREND_SRC_SPATIAL_GetDistGain() @@ -1105,42 +719,6 @@ static Word16 TDREND_SRC_SPATIAL_GetDirGain_fx( --------------------------------------------------------------------*/ /*! r: Gain value */ -#ifndef IVAS_FLOAT_FIXED -static float TDREND_SRC_SPATIAL_GetDistGain( - const TDREND_DistAtten_t *DistAtten_p, /* i : Distance attenuation parameters */ - const float Dist /* i : Distance value */ -) -{ - float DistGain; - float Dist2; - - DistGain = 1.0f; - Dist2 = Dist; - - switch ( DistAtten_p->DistAttenModel ) - { - case TDREND_DIST_ATTEN_MODEL_INV_DIST: - DistGain = DistAtten_p->RefDist / ( DistAtten_p->RefDist + DistAtten_p->RollOffFactor * ( Dist2 - DistAtten_p->RefDist ) ); - break; - - case TDREND_DIST_ATTEN_MODEL_INV_DIST_CLAMPED: - if ( Dist2 < DistAtten_p->RefDist ) - { - Dist2 = DistAtten_p->RefDist; - } - - if ( Dist2 > DistAtten_p->MaxDist ) - { - Dist2 = DistAtten_p->MaxDist; - } - - DistGain = DistAtten_p->RefDist / ( DistAtten_p->RefDist + DistAtten_p->RollOffFactor * ( Dist2 - DistAtten_p->RefDist ) ); - break; - } - - return DistGain; -} -#else static Word16 TDREND_SRC_SPATIAL_GetDistGain_fx( /* o : Distance gain Q14 */ const TDREND_DistAtten_t *DistAtten_p, /* i : Distance attenuation parameters */ const Word32 Dist_fx, /* i : Distance value Dist_e */ @@ -1204,14 +782,12 @@ static Word16 TDREND_SRC_SPATIAL_GetDistGain_fx( return DistGain_fx; } -#endif /*-------------------------------------------------------------------* * TDREND_SRC_Alloc() * * Allocate a source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_SRC_Alloc( TDREND_SRC_t **Src_pp /* i/o: Source */ ) @@ -1245,41 +821,6 @@ ivas_error TDREND_SRC_Alloc( return error; } -#else -ivas_error TDREND_SRC_Alloc( - TDREND_SRC_t **Src_pp /* i/o: Source */ -) -{ - ivas_error error; - TDREND_SRC_t *Src_p; - - error = IVAS_ERR_OK; - - *Src_pp = NULL; - - /* Allocate the TDREND_SRC_t variable */ - if ( ( Src_p = (TDREND_SRC_t *) malloc( sizeof( TDREND_SRC_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, " TDREND_SRC_Alloc: Allocation error\n" ) ); - } - - Src_p->SrcSpatial_p = NULL; - /* If source type is dynamic alloc the TDREND_SRC_SPATIAL_t variable */ - if ( ( error = TDREND_SRC_SPATIAL_Alloc( &Src_p->SrcSpatial_p ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = TDREND_SRC_REND_Alloc( &Src_p->SrcRend_p ) ) != IVAS_ERR_OK ) - { - return error; - } - - *Src_pp = Src_p; - - return error; -} -#endif /*-------------------------------------------------------------------* * TDREND_SRC_Dealloc() @@ -1287,7 +828,6 @@ ivas_error TDREND_SRC_Alloc( * Deallocate a source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_SRC_Dealloc( TDREND_SRC_t *Src_p ) { @@ -1305,37 +845,11 @@ void TDREND_SRC_Dealloc( Src_p = NULL; return; } -#else // IVAS_FLOAT_FIXED -void TDREND_SRC_Dealloc( - TDREND_SRC_t *Src_p ) -{ - if ( Src_p == NULL ) - { - return; - } - - /* Delloc the TDREND_SRC_Spatial_t variable */ - TDREND_SRC_SPATIAL_Dealloc( Src_p->SrcSpatial_p ); - - /* Delloc the TDREND_SRC_REND__t variable */ - free( Src_p->SrcRend_p ); - Src_p->SrcRend_p = NULL; - - /* Free the Src_p variable */ - free( Src_p ); - Src_p = NULL; - - return; -} - - -#endif /*-------------------------------------------------------------------* * TDREND_SRC_Init() * * Initializes a source. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_SRC_Init_fx( TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ const TDREND_PosType_t PosType /* i : Position type specifier */ @@ -1381,37 +895,3 @@ void TDREND_SRC_Init_fx( move16(); return; } -#else -void TDREND_SRC_Init( - TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ - const TDREND_PosType_t PosType /* i : Position type specifier */ -) -{ - /* Init the TDREND_SRC_Spatial_t variable */ - if ( Src_p->SrcSpatial_p != NULL ) - { - TDREND_SRC_SPATIAL_Init( Src_p->SrcSpatial_p, PosType ); - } - - /* Init the TDREND_SRC_REND_t variable */ - TDREND_SRC_REND_Init( Src_p->SrcRend_p ); - - /* Reset memory buffers */ - Src_p->itd = 0; - Src_p->previtd = 0; - Src_p->filterlength = 1; /* Init to unit impulse of length 1 */ - set_f( Src_p->mem_itd, 0.0f, ITD_MEM_LEN ); - set_f( Src_p->mem_hrf_left, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); - set_f( Src_p->mem_hrf_right, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1 ); - set_f( Src_p->hrf_left_prev, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); - set_f( Src_p->hrf_right_prev, 0.0f, SFX_SPAT_BIN_MAX_FILTER_LENGTH ); - Src_p->hrf_left_prev[0] = 1; - Src_p->hrf_right_prev[0] = 1; - Src_p->azim_prev = 0.0f; - Src_p->elev_prev = 0.0f; - Src_p->Gain = 1; - Src_p->prevGain = 1.0f; - - return; -} -#endif diff --git a/lib_rend/ivas_objectRenderer_vec.c b/lib_rend/ivas_objectRenderer_vec.c index a83637fc2..5e4d9d6ac 100644 --- a/lib_rend/ivas_objectRenderer_vec.c +++ b/lib_rend/ivas_objectRenderer_vec.c @@ -46,7 +46,6 @@ * Initialize 3-dim vector *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecInit_fx( Word32 *Pos_p, /* o : Output vector */ const Word32 PosX, /* i : X value */ @@ -62,23 +61,6 @@ void TDREND_SPATIAL_VecInit_fx( move32(); return; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -void TDREND_SPATIAL_VecInit( - float *Pos_p, /* o : Output vector */ - const float PosX, /* i : X value */ - const float PosY, /* i : Y value */ - const float PosZ /* i : Z value */ -) -{ - Pos_p[0] = PosX; - Pos_p[1] = PosY; - Pos_p[2] = PosZ; - - return; -} -#endif /*-------------------------------------------------------------------* @@ -89,7 +71,6 @@ void TDREND_SPATIAL_VecInit( /*! r: Euclidian norm value */ -#ifdef IVAS_FLOAT_FIXED Word32 TDREND_SPATIAL_VecNorm_fx( const Word32 *Vec_p, /* i : Vector for norm calculation */ const Word16 in_exp, /* i : Input exp */ @@ -107,17 +88,6 @@ Word32 TDREND_SPATIAL_VecNorm_fx( return tmp; } -#endif - -#ifndef IVAS_FLOAT_FIXED -float TDREND_SPATIAL_VecNorm( - const float *Vec_p /* i : Vector for norm calculation */ -) -{ - return sqrtf( Vec_p[0] * Vec_p[0] + Vec_p[1] * Vec_p[1] + Vec_p[2] * Vec_p[2] ); -} -#endif - /*-------------------------------------------------------------------* * TDREND_SPATIAL_VecNormalize() @@ -140,7 +110,6 @@ void TDREND_SPATIAL_VecNormalize( return; } -#ifdef IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecNormalize_fx( const Word32 *Vec_p_fx, /* i : Input vector q */ Word16 q, /* i : Input vector Q-factor */ @@ -174,7 +143,6 @@ void TDREND_SPATIAL_VecNormalize_fx( return; } -#endif /*-------------------------------------------------------------------* @@ -183,7 +151,6 @@ void TDREND_SPATIAL_VecNormalize_fx( * Transform vector to new coordinate system *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecMapToNewCoordSystem_fx( const Word32 *Vec_p, /* i : Input vector Qx */ const Word32 *TranslVec_p, /* i : Translation vector Qx */ @@ -205,7 +172,6 @@ void TDREND_SPATIAL_VecMapToNewCoordSystem_fx( move32(); return; } -#endif void TDREND_SPATIAL_VecMapToNewCoordSystem( const float *Vec_p, /* i : Input vector */ @@ -233,57 +199,7 @@ void TDREND_SPATIAL_VecMapToNewCoordSystem( *-------------------------------------------------------------------*/ /*! r: Flag if the orientation has been updated */ -#ifndef IVAS_FLOAT_FIXED -int16_t TDREND_SPATIAL_EvalOrthonormOrient( - float *FrontVecON_p, /* o : Normalized front vector */ - float *UpVecON_p, /* o : Normalized up vector */ - float *RightVecON_p, /* o : Normalized right vector */ - const float *FrontVec_p, /* i : Input front vector */ - const float *UpVec_p /* i : Input up vector */ -) -{ - float tmp[9]; - int16_t orientation_updated; - - orientation_updated = FALSE; - - /* Store current state to detect change */ - mvr2r( FrontVecON_p, tmp, 3 ); - mvr2r( RightVecON_p, tmp + 3, 3 ); - mvr2r( UpVecON_p, tmp + 6, 3 ); - - /* Evaluate the normalized front vector */ - TDREND_SPATIAL_VecNormalize( FrontVec_p, FrontVecON_p ); - - /* Evaluate the orthonormal right vector */ - /* through the cross product of the front and the up vectors */ - RightVecON_p[0] = FrontVecON_p[1] * UpVec_p[2] - FrontVecON_p[2] * UpVec_p[1]; - RightVecON_p[1] = FrontVecON_p[2] * UpVec_p[0] - FrontVecON_p[0] * UpVec_p[2]; - RightVecON_p[2] = FrontVecON_p[0] * UpVec_p[1] - FrontVecON_p[1] * UpVec_p[0]; - - TDREND_SPATIAL_VecNormalize( RightVecON_p, RightVecON_p ); - - /* Evaluate the orthonormal up vector */ - /* through the cross product of the front and the right vectors */ - UpVecON_p[0] = RightVecON_p[1] * FrontVecON_p[2] - RightVecON_p[2] * FrontVecON_p[1]; - UpVecON_p[1] = RightVecON_p[2] * FrontVecON_p[0] - RightVecON_p[0] * FrontVecON_p[2]; - UpVecON_p[2] = RightVecON_p[0] * FrontVecON_p[1] - RightVecON_p[1] * FrontVecON_p[0]; - - TDREND_SPATIAL_VecNormalize( UpVecON_p, UpVecON_p ); - - /* Check if vectors have been changed */ - if ( FrontVecON_p[0] != tmp[0] || FrontVecON_p[1] != tmp[1] || FrontVecON_p[2] != tmp[2] || - RightVecON_p[0] != tmp[3] || RightVecON_p[1] != tmp[4] || RightVecON_p[2] != tmp[5] || - UpVecON_p[0] != tmp[6] || UpVecON_p[1] != tmp[7] || UpVecON_p[2] != tmp[8] ) - { - orientation_updated = TRUE; - } - - return orientation_updated; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 TDREND_SPATIAL_EvalOrthonormOrient_fx( Word32 *FrontVecON_p_fx, /* i/o: Normalized front vector Q30 */ Word32 *UpVecON_p_fx, /* i/o: Normalized up vector Q30 */ @@ -349,4 +265,3 @@ Word16 TDREND_SPATIAL_EvalOrthonormOrient_fx( return orientation_updated; } -#endif diff --git a/lib_rend/ivas_omasa_ana.c b/lib_rend/ivas_omasa_ana.c index 65a570c53..26f0cefcf 100644 --- a/lib_rend/ivas_omasa_ana.c +++ b/lib_rend/ivas_omasa_ana.c @@ -48,15 +48,7 @@ * Local function prototypes *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_omasa_param_est_ana( OMASA_ANA_HANDLE hOMasa, float data_f[][L_FRAME48k], float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], const int16_t input_frame, const int16_t nchan_ism ); -#endif -#ifndef IVAS_FLOAT_FIXED -static void ivas_omasa_dmx( float data_in_f[][L_FRAME48k], const int16_t input_frame, const int16_t nchan_transport, const int16_t nchan_ism, const float ism_azimuth[MAX_NUM_OBJECTS], const float ism_elevation[MAX_NUM_OBJECTS], float prev_gains[][MASA_MAX_TRANSPORT_CHANNELS], const float interpolator[L_FRAME48k] ); -#endif - -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_dmx_fx( Word32 data_in_f_fx[][L_FRAME48k], Word16 *data_in_q, @@ -83,7 +75,6 @@ static void ivas_omasa_param_est_ana_fx( Word16 *surroundingCoherence_q, const Word16 input_frame, const Word16 nchan_ism ); -#endif /*--------------------------------------------------------------------------* * ivas_omasa_ana_open() @@ -91,7 +82,6 @@ static void ivas_omasa_param_est_ana_fx( * Allocate and initialize OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_omasa_ana_open( OMASA_ANA_HANDLE *hOMasaPtr, /* i/o: OMASA data handle pointer */ Word32 input_Fs, /* i : Sampling frequency */ @@ -229,133 +219,6 @@ ivas_error ivas_omasa_ana_open( return error; } -#else -ivas_error ivas_omasa_ana_open( - OMASA_ANA_HANDLE *hOMasaPtr, /* i/o: OMASA data handle pointer */ - int32_t input_Fs, /* i : Sampling frequency */ - uint16_t total_num_objects /* i : Number of objects */ -) -{ - int16_t i, j; - OMASA_ANA_HANDLE hOMasa; - int16_t numAnalysisChannels; - int16_t maxBin, input_frame; - ivas_error error; - - error = IVAS_ERR_OK; - - if ( ( hOMasa = (OMASA_ANA_HANDLE) malloc( sizeof( OMASA_ANA_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA\n" ) ); - } - - numAnalysisChannels = (int16_t) total_num_objects; - - /* Determine the number of bands */ - hOMasa->nbands = MASA_FREQUENCY_BANDS; - - /* Determine band grouping */ - mvs2s( MASA_band_grouping_24, hOMasa->band_grouping, 24 + 1 ); - - maxBin = (int16_t) ( input_Fs * INV_CLDFB_BANDWIDTH + 0.5f ); - for ( i = 1; i < hOMasa->nbands + 1; i++ ) - { - if ( hOMasa->band_grouping[i] >= maxBin ) - { - hOMasa->band_grouping[i] = maxBin; - hOMasa->nbands = i; - break; - } - } - - /* Determine block grouping */ - mvs2s( DirAC_block_grouping, hOMasa->block_grouping, MAX_PARAM_SPATIAL_SUBFRAMES + 1 ); - - /* open/initialize CLDFB */ - hOMasa->num_Cldfb_instances = numAnalysisChannels; - for ( i = 0; i < hOMasa->num_Cldfb_instances; i++ ) - { - if ( ( error = openCldfb_ivas( &( hOMasa->cldfbAnaEnc[i] ), CLDFB_ANALYSIS, input_Fs, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( ; i < MAX_NUM_OBJECTS; i++ ) - { - hOMasa->cldfbAnaEnc[i] = NULL; - } - - /* intensity 3-dim */ - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - if ( ( hOMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - if ( ( hOMasa->direction_vector_m[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero( hOMasa->direction_vector_m[i][j], MASA_FREQUENCY_BANDS ); - } - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - if ( ( hOMasa->buffer_intensity_real[i][j] = (float *) malloc( MASA_FREQUENCY_BANDS * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for OMASA data\n" ) ); - } - set_zero( hOMasa->buffer_intensity_real[i][j], MASA_FREQUENCY_BANDS ); - } - } - - set_zero( hOMasa->buffer_energy, DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS ); - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - set_f( hOMasa->prev_object_dm_gains[i], INV_SQRT_2, MASA_MAX_TRANSPORT_CHANNELS ); - } - - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); - for ( i = 0; i < input_frame; i++ ) - { - hOMasa->interpolator[i] = ( (float) i ) / ( (float) input_frame ); - } - - hOMasa->index_buffer_intensity = 0; - - if ( ( hOMasa->hMasaOut = (MASA_DECODER_EXT_OUT_META_HANDLE) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - - if ( ( hOMasa->sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) ); - } - generate_gridEq( hOMasa->sph_grid16 ); - - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - set_zero( hOMasa->energy[i], MASA_FREQUENCY_BANDS ); - } - - set_zero( hOMasa->ism_azimuth, MAX_NUM_OBJECTS ); - set_zero( hOMasa->ism_elevation, MAX_NUM_OBJECTS ); - - ( *hOMasaPtr ) = hOMasa; - - return error; -} - -#endif /*--------------------------------------------------------------------------* * ivas_omasa_ana_close() @@ -363,7 +226,6 @@ ivas_error ivas_omasa_ana_open( * Close OMASA handle *--------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_ana_close( OMASA_ANA_HANDLE *hOMasa /* i/o: analysis OMASA handle */ ) @@ -409,52 +271,6 @@ void ivas_omasa_ana_close( return; } -#else -void ivas_omasa_ana_close( - OMASA_ANA_HANDLE *hOMasa /* i/o: analysis OMASA handle */ -) -{ - int16_t i, j; - - if ( hOMasa == NULL || *hOMasa == NULL ) - { - return; - } - - for ( i = 0; i < ( *hOMasa )->num_Cldfb_instances; i++ ) - { - deleteCldfb_ivas( &( ( *hOMasa )->cldfbAnaEnc[i] ) ); - } - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ ) - { - free( ( *hOMasa )->direction_vector_m[i][j] ); - ( *hOMasa )->direction_vector_m[i][j] = NULL; - } - - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - free( ( *hOMasa )->buffer_intensity_real[i][j] ); - ( *hOMasa )->buffer_intensity_real[i][j] = NULL; - } - - free( ( *hOMasa )->direction_vector_m[i] ); - ( *hOMasa )->direction_vector_m[i] = NULL; - } - - free( ( *hOMasa )->hMasaOut ); - ( *hOMasa )->hMasaOut = NULL; - free( ( *hOMasa )->sph_grid16 ); - ( *hOMasa )->sph_grid16 = NULL; - - free( ( *hOMasa ) ); - ( *hOMasa ) = NULL; - - return; -} -#endif /*--------------------------------------------------------------------------* * ivas_omasa_ana() @@ -462,35 +278,7 @@ void ivas_omasa_ana_close( * OMASA analysis function *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_omasa_ana( - OMASA_ANA_HANDLE hOMasa, /* i/o: OMASA analysis handle */ - float data_in_f[][L_FRAME48k], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_ism /* i : Number of objects for parameter analysis */ -) -{ - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - - /* Estimate MASA parameters from the objects */ - ivas_omasa_param_est_ana( hOMasa, data_in_f, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence, input_frame, nchan_ism ); - /* Create MASA metadata buffer from the estimated values */ - ivas_create_masa_out_meta( hOMasa->hMasaOut, hOMasa->sph_grid16, nchan_transport, elevation_m_values, azimuth_m_values, energyRatio, spreadCoherence, surroundingCoherence ); - - /* Downmix */ - ivas_omasa_dmx( data_in_f, input_frame, nchan_transport, nchan_ism, hOMasa->ism_azimuth, hOMasa->ism_elevation, hOMasa->prev_object_dm_gains, hOMasa->interpolator ); - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_ana_fx( OMASA_ANA_HANDLE hOMasa, /* i/o: OMASA analysis handle */ Word32 data_in_f_fx[][L_FRAME48k], /* i/o: Input / transport audio signals */ @@ -519,7 +307,6 @@ void ivas_omasa_ana_fx( return; } -#endif /*--------------------------------------------------------------------------* * Local functions @@ -527,197 +314,7 @@ void ivas_omasa_ana_fx( /* Estimate MASA parameters from the objects */ -#ifndef IVAS_FLOAT_FIXED -static void ivas_omasa_param_est_ana( - OMASA_ANA_HANDLE hOMasa, - float data_f[][L_FRAME48k], - float elevation_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float azimuth_m_values[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float energyRatio[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float spreadCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], - const int16_t input_frame, - const int16_t nchan_ism ) -{ - float reference_power[MASA_FREQUENCY_BANDS]; - int16_t ts, i, d, j; - int16_t num_freq_bins, num_freq_bands, index; - float dir_v[DIRAC_NUM_DIMS]; - int16_t l_ts; - float Chnl_RealBuffer[MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float Chnl_ImagBuffer[MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float Foa_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Foa_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float direction_vector[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS]; - float diffuseness_vector[MASA_FREQUENCY_BANDS]; - float diffuseness_m[MASA_FREQUENCY_BANDS]; - - int16_t band_m_idx, block_m_idx; - float renormalization_factor_diff[MASA_FREQUENCY_BANDS]; - float norm_tmp; - int16_t mrange[2]; - int16_t brange[2]; - - num_freq_bins = hOMasa->cldfbAnaEnc[0]->no_channels; - num_freq_bands = hOMasa->nbands; - l_ts = input_frame / CLDFB_NO_COL_MAX; - - - /* Compute ISM to FOA matrices */ - for ( i = 0; i < nchan_ism; i++ ) - { - hOMasa->chnlToFoaMtx[0][i] = 1.0f; - hOMasa->chnlToFoaMtx[1][i] = sinf( ( hOMasa->ism_azimuth[i] / 180.0f * EVS_PI ) ) * cosf( ( hOMasa->ism_elevation[i] / 180.0f * EVS_PI ) ); - hOMasa->chnlToFoaMtx[2][i] = sinf( ( hOMasa->ism_elevation[i] / 180.0f * EVS_PI ) ); - hOMasa->chnlToFoaMtx[3][i] = cosf( ( hOMasa->ism_azimuth[i] / 180.0f * EVS_PI ) ) * cosf( ( hOMasa->ism_elevation[i] / 180.0f * EVS_PI ) ); - } - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = hOMasa->block_grouping[block_m_idx]; - mrange[1] = hOMasa->block_grouping[block_m_idx + 1]; - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - hOMasa->direction_vector_m[0][block_m_idx][band_m_idx] = 0.0f; - hOMasa->direction_vector_m[1][block_m_idx][band_m_idx] = 0.0f; - hOMasa->direction_vector_m[2][block_m_idx][band_m_idx] = 0.0f; - } - - /* Need to initialize renormalization_factors, and variables to be normalized */ - set_zero( renormalization_factor_diff, hOMasa->nbands ); - set_zero( diffuseness_m, hOMasa->nbands ); - set_zero( hOMasa->energy[block_m_idx], MASA_FREQUENCY_BANDS ); - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - cldfbAnalysis_ts_ivas( &( data_f[i][l_ts * ts] ), Chnl_RealBuffer[i], Chnl_ImagBuffer[i], l_ts, hOMasa->cldfbAnaEnc[i] ); - } - - /* Compute channel-based energy for metadata processing */ - for ( band_m_idx = 0; band_m_idx < num_freq_bands; band_m_idx++ ) - { - brange[0] = hOMasa->band_grouping[band_m_idx]; - brange[1] = hOMasa->band_grouping[band_m_idx + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - for ( i = 0; i < nchan_ism; i++ ) - { - hOMasa->energy[block_m_idx][band_m_idx] += Chnl_RealBuffer[i][j] * Chnl_RealBuffer[i][j] + Chnl_ImagBuffer[i][j] * Chnl_ImagBuffer[i][j]; - } - } - } - - /* Compute FOA */ - /* W */ - mvr2r( Chnl_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - mvr2r( Chnl_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_add( Chnl_RealBuffer[i], Foa_RealBuffer[0], Foa_RealBuffer[0], num_freq_bins ); - v_add( Chnl_ImagBuffer[i], Foa_ImagBuffer[0], Foa_ImagBuffer[0], num_freq_bins ); - } - - /* Y */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[1][0], Foa_RealBuffer[1], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[1][0], Foa_ImagBuffer[1], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[1][i], Foa_RealBuffer[1], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[1][i], Foa_ImagBuffer[1], num_freq_bins ); - } - - /* Z */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[2][0], Foa_RealBuffer[2], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[2][0], Foa_ImagBuffer[2], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[2][i], Foa_RealBuffer[2], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[2][i], Foa_ImagBuffer[2], num_freq_bins ); - } - - /* X */ - v_multc( Chnl_RealBuffer[0], hOMasa->chnlToFoaMtx[3][0], Foa_RealBuffer[3], num_freq_bins ); - v_multc( Chnl_ImagBuffer[0], hOMasa->chnlToFoaMtx[3][0], Foa_ImagBuffer[3], num_freq_bins ); - for ( i = 1; i < nchan_ism; i++ ) - { - v_multc_acc( Chnl_RealBuffer[i], hOMasa->chnlToFoaMtx[3][i], Foa_RealBuffer[3], num_freq_bins ); - v_multc_acc( Chnl_ImagBuffer[i], hOMasa->chnlToFoaMtx[3][i], Foa_ImagBuffer[3], num_freq_bins ); - } - - /* Direction estimation */ - computeIntensityVector_ana( hOMasa->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, num_freq_bands, intensity_real ); - computeDirectionVectors( intensity_real[0], intensity_real[1], intensity_real[2], 0, num_freq_bands, direction_vector[0], direction_vector[1], direction_vector[2] ); - - /* Power estimation for diffuseness */ - computeReferencePower_ana( hOMasa->band_grouping, Foa_RealBuffer, Foa_ImagBuffer, reference_power, num_freq_bands ); - - /* Fill buffers of length "averaging_length" time slots for intensity and energy */ - hOMasa->index_buffer_intensity = ( hOMasa->index_buffer_intensity % DIRAC_NO_COL_AVG_DIFF ) + 1; /* averaging_length = 32 */ - index = hOMasa->index_buffer_intensity; - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - /* only real part needed */ - mvr2r( intensity_real[i], &( hOMasa->buffer_intensity_real[i][index - 1][0] ), num_freq_bands ); - } - mvr2r( reference_power, &( hOMasa->buffer_energy[( index - 1 ) * num_freq_bands] ), num_freq_bands ); - - computeDiffuseness( hOMasa->buffer_intensity_real, hOMasa->buffer_energy, num_freq_bands, diffuseness_vector ); - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - norm_tmp = reference_power[band_m_idx] * ( 1 - diffuseness_vector[band_m_idx] ); - - hOMasa->direction_vector_m[0][block_m_idx][band_m_idx] += norm_tmp * direction_vector[0][band_m_idx]; - hOMasa->direction_vector_m[1][block_m_idx][band_m_idx] += norm_tmp * direction_vector[1][band_m_idx]; - hOMasa->direction_vector_m[2][block_m_idx][band_m_idx] += norm_tmp * direction_vector[2][band_m_idx]; - - diffuseness_m[band_m_idx] += reference_power[band_m_idx] * diffuseness_vector[band_m_idx]; - renormalization_factor_diff[band_m_idx] += reference_power[band_m_idx]; - } - } - - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - for ( d = 0; d < DIRAC_NUM_DIMS; d++ ) - { - dir_v[d] = hOMasa->direction_vector_m[d][block_m_idx][band_m_idx]; - } - ivas_qmetadata_direction_vector_to_azimuth_elevation( dir_v, &azimuth_m_values[block_m_idx][band_m_idx], &elevation_m_values[block_m_idx][band_m_idx] ); - } - - /* Determine energy ratios */ - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - if ( renormalization_factor_diff[band_m_idx] > EPSILON ) - { - diffuseness_m[band_m_idx] /= renormalization_factor_diff[band_m_idx]; - } - else - { - diffuseness_m[band_m_idx] = 0.0f; - } - - energyRatio[block_m_idx][band_m_idx] = 1.0f - diffuseness_m[band_m_idx]; - } - /* Set coherences to zero, as this mode is used at lowest bit rates where the coherences are not transmitted */ - for ( band_m_idx = 0; band_m_idx < hOMasa->nbands; band_m_idx++ ) - { - spreadCoherence[block_m_idx][band_m_idx] = 0.0f; - surroundingCoherence[block_m_idx][band_m_idx] = 0.0f; - } - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void ivas_omasa_param_est_ana_fx( OMASA_ANA_HANDLE hOMasa, Word32 data_f_fx[][L_FRAME48k], @@ -1135,9 +732,7 @@ static void ivas_omasa_param_est_ana_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /* Compute downmix */ static void ivas_omasa_dmx_fx( Word32 data_in_f_fx[][L_FRAME48k], @@ -1257,65 +852,10 @@ static void ivas_omasa_dmx_fx( return; } -#endif /* Compute downmix */ -#ifndef IVAS_FLOAT_FIXED -static void ivas_omasa_dmx( - float data_in_f[][L_FRAME48k], - const int16_t input_frame, - const int16_t nchan_transport, - const int16_t nchan_ism, - const float ism_azimuth[MAX_NUM_OBJECTS], - const float ism_elevation[MAX_NUM_OBJECTS], - float prev_gains[][MASA_MAX_TRANSPORT_CHANNELS], - const float interpolator[L_FRAME48k] ) -{ - int16_t i, j, k; - float azimuth, elevation; - float gains[MASA_MAX_TRANSPORT_CHANNELS]; - float g1, g2; - float data_out_f[MASA_MAX_TRANSPORT_CHANNELS][L_FRAME48k]; - for ( i = 0; i < nchan_transport; i++ ) - { - set_zero( data_out_f[i], input_frame ); - } - - for ( i = 0; i < nchan_ism; i++ ) - { - azimuth = ism_azimuth[i]; - elevation = ism_elevation[i]; - ivas_ism_get_stereo_gains( azimuth, elevation, &gains[0], &gains[1] ); - - /* Downmix using the panning gains */ - for ( j = 0; j < nchan_transport; j++ ) - { - if ( fabsf( gains[j] ) > 0.0 || fabsf( prev_gains[i][j] ) > 0.0f ) - { - for ( k = 0; k < input_frame; k++ ) - { - g1 = interpolator[k]; - g2 = 1.0f - g1; - data_out_f[j][k] += ( g1 * gains[j] + g2 * prev_gains[i][j] ) * data_in_f[i][k]; - } - } - prev_gains[i][j] = gains[j]; - } - } - - for ( i = 0; i < nchan_transport; i++ ) - { - mvr2r( data_out_f[i], data_in_f[i], input_frame ); - } - - return; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * computeIntensityVector_ana() * @@ -1368,54 +908,13 @@ void computeIntensityVector_ana_fx( return; } -#endif /*--------------------------------------------------------------------------* * computeIntensityVector_ana() * * *--------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void computeIntensityVector_ana( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Imag part of input signal */ - const int16_t num_frequency_bands, /* i : Number of frequency bands */ - float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] /* o : Intensity vector */ -) -{ - /* Reminder - * X = a + ib; Y = c + id - * X*Y = ac - bd + i(ad +bc) - */ - int16_t i, j; - float real, img; - int16_t brange[2]; - - for ( i = 0; i < num_frequency_bands; i++ ) - { - brange[0] = band_grouping[i]; - brange[1] = band_grouping[i + 1]; - - intensity_real[0][i] = 0; - intensity_real[1][i] = 0; - intensity_real[2][i] = 0; - - for ( j = brange[0]; j < brange[1]; j++ ) - { - real = Cldfb_RealBuffer[0][j]; - img = Cldfb_ImagBuffer[0][j]; - intensity_real[0][i] += Cldfb_RealBuffer[3][j] * real + Cldfb_ImagBuffer[3][j] * img; /* Intensity is XYZ order, audio is WYZX order. */ - intensity_real[1][i] += Cldfb_RealBuffer[1][j] * real + Cldfb_ImagBuffer[1][j] * img; - intensity_real[2][i] += Cldfb_RealBuffer[2][j] * real + Cldfb_ImagBuffer[2][j] * img; - } - } - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*--------------------------------------------------------------------------* * computeReferencePower_ana() * @@ -1459,44 +958,9 @@ void computeReferencePower_ana_fx( /* Bypassing the v_multc ,so output q = 2*inputq - 30*/ return; } -#endif /*--------------------------------------------------------------------------* * computeReferencePower_ana() * * *--------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void computeReferencePower_ana( - const int16_t *band_grouping, /* i : Band grouping for estimation */ - float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ - float Cldfb_ImagBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Imag part of input signal */ - float *reference_power, /* o : Estimated power */ - const int16_t num_freq_bands /* i : Number of frequency bands */ -) -{ - int16_t brange[2]; - int16_t ch_idx, i, j; - - for ( i = 0; i < num_freq_bands; i++ ) - { - brange[0] = band_grouping[i]; - brange[1] = band_grouping[i + 1]; - reference_power[i] = 0; - - for ( ch_idx = 0; ch_idx < FOA_CHANNELS; ch_idx++ ) - { - /* abs()^2 */ - for ( j = brange[0]; j < brange[1]; j++ ) - { - reference_power[i] += ( Cldfb_RealBuffer[ch_idx][j] * Cldfb_RealBuffer[ch_idx][j] ) + ( Cldfb_ImagBuffer[ch_idx][j] * Cldfb_ImagBuffer[ch_idx][j] ); - } - } - } - - v_multc( reference_power, 0.5f, reference_power, num_freq_bands ); - - return; -} -#endif diff --git a/lib_rend/ivas_orient_trk.c b/lib_rend/ivas_orient_trk.c index 3bfdf47f7..a3e833455 100644 --- a/lib_rend/ivas_orient_trk.c +++ b/lib_rend/ivas_orient_trk.c @@ -39,9 +39,7 @@ #include #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif /*------------------------------------------------------------------------------------------* * Local constants @@ -60,18 +58,6 @@ * *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static IVAS_QUATERNION IdentityQuaternion( - void ) -{ - IVAS_QUATERNION q; - - q.w = 1.0f; - q.x = q.y = q.z = 0.0f; - - return q; -} -#else static IVAS_QUATERNION IdentityQuaternion_fx( void ) { @@ -88,7 +74,6 @@ static IVAS_QUATERNION IdentityQuaternion_fx( return q; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionProduct() @@ -96,23 +81,6 @@ static IVAS_QUATERNION IdentityQuaternion_fx( * Quaternion product *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void QuaternionProduct( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2, - IVAS_QUATERNION *const r ) -{ - IVAS_QUATERNION tmp; - tmp.w = q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z; - tmp.x = q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y; - tmp.y = q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x; - tmp.z = q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w; - - *r = tmp; - - return; -} -#else void QuaternionProduct_fx( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2, @@ -135,7 +103,6 @@ void QuaternionProduct_fx( *r = tmp; return; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionDotProduct() @@ -143,14 +110,6 @@ void QuaternionProduct_fx( * Quaternion dot product *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float QuaternionDotProduct( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2 ) -{ - return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; -} -#else static Word32 QuaternionDotProduct_fx( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2, @@ -167,7 +126,6 @@ static Word32 QuaternionDotProduct_fx( return result; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionDivision() @@ -175,20 +133,6 @@ static Word32 QuaternionDotProduct_fx( * Divides a quaternion by a scalar *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void QuaternionDivision( - const IVAS_QUATERNION q, - const float d, - IVAS_QUATERNION *const r ) -{ - r->w = q.w / d; - r->x = q.x / d; - r->y = q.y / d; - r->z = q.z / d; - - return; -} -#else static void QuaternionDivision_fx( const IVAS_QUATERNION q, const Word32 d, @@ -230,7 +174,6 @@ static void QuaternionDivision_fx( r->q_fact = result_q; move16(); } -#endif /*------------------------------------------------------------------------------------------* @@ -239,17 +182,6 @@ static void QuaternionDivision_fx( * Normalizes a quaternion *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void QuaternionNormalize( - const IVAS_QUATERNION q, - IVAS_QUATERNION *const r ) -{ - - QuaternionDivision( q, sqrtf( QuaternionDotProduct( q, q ) ), r ); - - return; -} -#else static void QuaternionNormalize_fx( const IVAS_QUATERNION q_fx, IVAS_QUATERNION *const r_fx ) @@ -263,7 +195,6 @@ static void QuaternionNormalize_fx( QuaternionDivision_fx( q_fx, sqrt_fx, r_fx, sqrt_e ); return; } -#endif /*------------------------------------------------------------------------------------------* @@ -272,58 +203,6 @@ static void QuaternionNormalize_fx( * Computes a spherical linear interpolation between two quaternions *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void QuaternionSlerp( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2, - const float t, - IVAS_QUATERNION *const r ) -{ - IVAS_QUATERNION r1, r2; - float phi, sinPhi, cosPhi, s1, s2; - - QuaternionNormalize( q1, &r1 ); - QuaternionNormalize( q2, &r2 ); - - cosPhi = QuaternionDotProduct( r1, r2 ); - - if ( cosPhi < 0 ) - { - cosPhi = -cosPhi; - r2.w = -r2.w; - r2.x = -r2.x; - r2.y = -r2.y; - r2.z = -r2.z; - } - - /* Angle less than one degree, use linear interpolation */ - if ( cosPhi >= COS_ONE_TENTH_DEGREE ) - { - r->w = r1.w + t * ( r2.w - r1.w ); - r->x = r1.x + t * ( r2.x - r1.x ); - r->y = r1.y + t * ( r2.y - r1.y ); - r->z = r1.z + t * ( r2.z - r1.z ); - } - else - { - phi = acosf( cosPhi ); - sinPhi = sinf( phi ); - - s1 = sinf( ( 1 - t ) * phi ); - s2 = sinf( t * phi ); - - r->w = ( s1 * r1.w + s2 * r2.w ) / sinPhi; - r->x = ( s1 * r1.x + s2 * r2.x ) / sinPhi; - r->y = ( s1 * r1.y + s2 * r2.y ) / sinPhi; - r->z = ( s1 * r1.z + s2 * r2.z ) / sinPhi; - } - - QuaternionNormalize( *r, r ); - - return; -} - -#else void QuaternionSlerp_fx( const IVAS_QUATERNION q1_fx, const IVAS_QUATERNION q2_fx, @@ -427,7 +306,6 @@ void QuaternionSlerp_fx( QuaternionNormalize_fx( *r_fx, r_fx ); return; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionConjugate() @@ -435,19 +313,6 @@ void QuaternionSlerp_fx( * Computes a quaternion conjugate *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void QuaternionConjugate( - const IVAS_QUATERNION q, - IVAS_QUATERNION *const r ) -{ - r->w = q.w; - r->x = -q.x; - r->y = -q.y; - r->z = -q.z; - - return; -} -#else static void QuaternionConjugate_fx( const IVAS_QUATERNION q, IVAS_QUATERNION *const r ) @@ -465,7 +330,6 @@ static void QuaternionConjugate_fx( return; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionAngle() @@ -473,21 +337,6 @@ static void QuaternionConjugate_fx( * Computes an angle between two quaternions *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float QuaternionAngle( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2 ) -{ - IVAS_QUATERNION q12; - float angle; - - QuaternionConjugate( q1, &q12 ); - QuaternionProduct( q12, q2, &q12 ); - angle = 2.0f * atan2f( sqrtf( q12.x * q12.x + q12.y * q12.y + q12.z * q12.z ), q12.w ); - - return angle; -} -#else static Word32 QuaternionAngle_fx( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2 ) @@ -517,7 +366,6 @@ static Word32 QuaternionAngle_fx( result = L_deposit_h( tan_result ); // Q29 return result; } -#endif /*------------------------------------------------------------------------------------------* * QuaternionInverse() @@ -525,20 +373,6 @@ static Word32 QuaternionAngle_fx( * Computes an inverse quaternion *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void QuaternionInverse( - const IVAS_QUATERNION q, - IVAS_QUATERNION *const r ) -{ - float dot_product; - - dot_product = QuaternionDotProduct( q, q ); - QuaternionConjugate( q, r ); - QuaternionDivision( *r, dot_product, r ); - - return; -} -#else void QuaternionInverse_fx( const IVAS_QUATERNION q, IVAS_QUATERNION *const r ) @@ -552,7 +386,6 @@ void QuaternionInverse_fx( return; } -#endif /*------------------------------------------------------------------------------------------* @@ -561,20 +394,6 @@ void QuaternionInverse_fx( * Computes the difference of two vectors *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static IVAS_VECTOR3 VectorSubtract( - const IVAS_VECTOR3 p1, - const IVAS_VECTOR3 p2 ) -{ - IVAS_VECTOR3 result; - - result.x = p1.x - p2.x; - result.y = p1.y - p2.y; - result.z = p1.z - p2.z; - - return result; -} -#else static IVAS_VECTOR3 VectorSubtract_fx( const IVAS_VECTOR3 p1, const IVAS_VECTOR3 p2 ) @@ -606,7 +425,6 @@ static IVAS_VECTOR3 VectorSubtract_fx( return result; } -#endif /*------------------------------------------------------------------------------------------* @@ -615,19 +433,6 @@ static IVAS_VECTOR3 VectorSubtract_fx( * Computes the cross product of two vectors *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static IVAS_VECTOR3 VectorCrossProduct( - const IVAS_VECTOR3 p1, - const IVAS_VECTOR3 p2 ) -{ - IVAS_VECTOR3 result; - result.x = p1.y * p2.z - p1.z * p2.y; - result.y = p1.z * p2.x - p1.x * p2.z; - result.z = p1.x * p2.y - p1.y * p2.x; - - return result; -} -#else static IVAS_VECTOR3 VectorCrossProduct_fx( const IVAS_VECTOR3 p1, const IVAS_VECTOR3 p2 ) @@ -645,7 +450,6 @@ static IVAS_VECTOR3 VectorCrossProduct_fx( return result_fx; } -#endif /*------------------------------------------------------------------------------------------* * VectorDotProduct( @@ -653,14 +457,6 @@ static IVAS_VECTOR3 VectorCrossProduct_fx( * Computes the dot product of two vectors *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float VectorDotProduct( - const IVAS_VECTOR3 p1, - const IVAS_VECTOR3 p2 ) -{ - return p1.x * p2.x + p1.y * p2.y + p1.z * p2.z; -} -#else static Word32 VectorDotProduct_fx( const IVAS_VECTOR3 p1, const IVAS_VECTOR3 p2, @@ -675,7 +471,6 @@ static Word32 VectorDotProduct_fx( return result_fx; } -#endif /*------------------------------------------------------------------------------------------* * VectorLength() @@ -683,13 +478,6 @@ static Word32 VectorDotProduct_fx( * Computes the length of a vector *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float VectorLength( - const IVAS_VECTOR3 p ) -{ - return sqrtf( p.x * p.x + p.y * p.y + p.z * p.z ); -} -#else static Word32 VectorLength_fx( IVAS_VECTOR3 p, Word16 *q_fact ) @@ -702,7 +490,6 @@ static Word32 VectorLength_fx( move16(); return result_fx; } -#endif /*------------------------------------------------------------------------------------------* * VectorNormalize() @@ -710,21 +497,6 @@ static Word32 VectorLength_fx( * Normalizes a vector *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static IVAS_VECTOR3 VectorNormalize( - const IVAS_VECTOR3 p ) -{ - IVAS_VECTOR3 result; - - const float length = VectorLength( p ); - - result.x = p.x / length; - result.y = p.y / length; - result.z = p.z / length; - - return result; -} -#else static IVAS_VECTOR3 VectorNormalize_fx( const IVAS_VECTOR3 p ) { @@ -758,7 +530,6 @@ static IVAS_VECTOR3 VectorNormalize_fx( return result_fx; } -#endif /*------------------------------------------------------------------------------------------* * VectorRotationToQuaternion() @@ -766,41 +537,6 @@ static IVAS_VECTOR3 VectorNormalize_fx( * Computes a quaternion representing the rotation from vector p1 to vector p2 *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void VectorRotationToQuaternion( - const IVAS_VECTOR3 p1, - const IVAS_VECTOR3 p2, - IVAS_QUATERNION *const r ) -{ - float dot_product; - IVAS_VECTOR3 cross_product, p1_normalized, p2_normalized; - - p1_normalized = VectorNormalize( p1 ); - p2_normalized = VectorNormalize( p2 ); - cross_product = VectorCrossProduct( p1_normalized, p2_normalized ); - dot_product = VectorDotProduct( p1_normalized, p2_normalized ); - if ( dot_product < -0.999999 ) - { - /* happens when the p1 vector is parallel to p2, but direction is flipped */ - r->w = 0.0f; - r->x = 0.0f; - r->y = 0.0f; - r->z = 1.0f; - } - else - { - /* all regular cases */ - r->x = cross_product.x; - r->y = cross_product.y; - r->z = cross_product.z; - r->w = 1.0f + dot_product; - } - - QuaternionNormalize( *r, r ); - - return; -} -#else static void VectorRotationToQuaternion_fx( const IVAS_VECTOR3 p1, const IVAS_VECTOR3 p2, @@ -870,7 +606,6 @@ static void VectorRotationToQuaternion_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_Init() @@ -878,39 +613,6 @@ static void VectorRotationToQuaternion_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_Init( - ivas_orient_trk_state_t *pOTR ) /* i/o : orientation tracker handle */ -{ - IVAS_QUATERNION identity; - - if ( pOTR == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - identity.w = 1.0f; - identity.x = identity.y = identity.z = 0.0f; - - /* configuration parameters */ - pOTR->centerAdaptationRate = 1.0f / 30.0f; - pOTR->offCenterAdaptationRate = 1.0f / 8.0f; - pOTR->adaptationAngle = PI_OVER_2; /* Excursion angle relative to center at which maximum adaptation rate shall be applied */ - - /* initial adaptivity filter coefficient, will be auto-adapted */ - pOTR->alpha = sinf( PI2 * pOTR->offCenterAdaptationRate / OTR_UPDATE_RATE ); /* start adaptation at off-center rate = fastest rate */ - - pOTR->trkRot = identity; - pOTR->absAvgRot = identity; - /* Use frontal and horiontal orientation as reference orientation, unless/until overridden */ - pOTR->refRot = identity; - - /* set safe default tracking mode */ - pOTR->orientation_tracking = IVAS_HEAD_ORIENT_TRK_NONE; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_orient_trk_Init_fx( ivas_orient_trk_state_t *pOTR ) /* i/o : orientation tracker handle */ { @@ -955,7 +657,6 @@ ivas_error ivas_orient_trk_Init_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_SetTrackingType() @@ -963,22 +664,6 @@ ivas_error ivas_orient_trk_Init_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_SetTrackingType( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - const IVAS_HEAD_ORIENT_TRK_T orientation_tracking /* i : orientation tracking type */ -) -{ - if ( pOTR == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - pOTR->orientation_tracking = orientation_tracking; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_orient_trk_SetTrackingType_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ const IVAS_HEAD_ORIENT_TRK_T orientation_tracking /* i : orientation tracking type */ @@ -994,7 +679,6 @@ ivas_error ivas_orient_trk_SetTrackingType_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_SetReferenceRotation() @@ -1002,7 +686,6 @@ ivas_error ivas_orient_trk_SetTrackingType_fx( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_orient_trk_SetReferenceRotation_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ const IVAS_QUATERNION refRot /* i : reference rotation */ @@ -1022,31 +705,6 @@ ivas_error ivas_orient_trk_SetReferenceRotation_fx( return IVAS_ERR_OK; } -#else - -ivas_error ivas_orient_trk_SetReferenceRotation( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - const IVAS_QUATERNION refRot /* i : reference rotation */ -) -{ - if ( pOTR == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* check for Euler angle signaling */ - if ( refRot.w == -3.0f ) - { - Euler2Quat( deg2rad( refRot.x ), deg2rad( refRot.y ), deg2rad( refRot.z ), &pOTR->refRot ); - } - else - { - pOTR->refRot = refRot; - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_GetMainOrientation() @@ -1054,35 +712,6 @@ ivas_error ivas_orient_trk_SetReferenceRotation( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_GetMainOrientation( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - IVAS_QUATERNION *pOrientation /* i/o: average/reference orientation */ -) -{ - if ( pOTR == NULL || pOrientation == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - switch ( pOTR->orientation_tracking ) - { - case IVAS_HEAD_ORIENT_TRK_NONE: - *pOrientation = IdentityQuaternion(); - break; - case IVAS_HEAD_ORIENT_TRK_REF_VEC: - case IVAS_HEAD_ORIENT_TRK_REF_VEC_LEV: - case IVAS_HEAD_ORIENT_TRK_REF: - *pOrientation = pOTR->refRot; - break; - case IVAS_HEAD_ORIENT_TRK_AVG: - *pOrientation = pOTR->absAvgRot; - break; - } - - return IVAS_ERR_OK; -} -#else ivas_error ivas_orient_trk_GetMainOrientation_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ IVAS_QUATERNION *pOrientation /* i/o: average/reference orientation */ @@ -1111,7 +740,6 @@ ivas_error ivas_orient_trk_GetMainOrientation_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_GetTrackedRotation() @@ -1119,22 +747,6 @@ ivas_error ivas_orient_trk_GetMainOrientation_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_GetTrackedRotation( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - IVAS_QUATERNION *pRotation /* i/o: processed rotation */ -) -{ - if ( pOTR == NULL || pRotation == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *pRotation = pOTR->trkRot; - - return IVAS_ERR_OK; -} -#else ivas_error ivas_orient_trk_GetTrackedRotation_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ IVAS_QUATERNION *pRotation /* i/o: processed rotation */ @@ -1150,7 +762,6 @@ ivas_error ivas_orient_trk_GetTrackedRotation_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * ivas_orient_trk_SetReferenceVector() @@ -1158,59 +769,6 @@ ivas_error ivas_orient_trk_GetTrackedRotation_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_SetReferenceVector( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - const IVAS_VECTOR3 listenerPos, /* i : Listener position */ - const IVAS_VECTOR3 refPos /* i : Reference position */ -) -{ - IVAS_VECTOR3 acousticFrontVector, ivasForwardVector; - IVAS_VECTOR3 listenerPosLevel, refPosLevel; - float acousticFrontVectorLength; - - if ( pOTR == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - switch ( pOTR->orientation_tracking ) - { - case IVAS_HEAD_ORIENT_TRK_NONE: - case IVAS_HEAD_ORIENT_TRK_REF: - case IVAS_HEAD_ORIENT_TRK_AVG: - case IVAS_HEAD_ORIENT_TRK_REF_VEC: - acousticFrontVector = VectorSubtract( listenerPos, refPos ); - break; - case IVAS_HEAD_ORIENT_TRK_REF_VEC_LEV: - /* ignore the height difference between listener position and reference position */ - listenerPosLevel.z = refPosLevel.z = listenerPos.z; - listenerPosLevel.x = listenerPos.x; - listenerPosLevel.y = listenerPos.y; - refPosLevel.x = refPos.x; - refPosLevel.y = refPos.y; - acousticFrontVector = VectorSubtract( listenerPosLevel, refPosLevel ); - break; - default: - return IVAS_ERR_WRONG_PARAMS; - } - - acousticFrontVectorLength = VectorLength( acousticFrontVector ); - - /* if the length is zero, the user has entered insensible listener and reference positions */ - if ( acousticFrontVectorLength < 0.0001f ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - ivasForwardVector.x = -1.0f; - ivasForwardVector.y = 0.0f; - ivasForwardVector.z = 0.0f; - VectorRotationToQuaternion( ivasForwardVector, acousticFrontVector, &pOTR->refRot ); - - return IVAS_ERR_OK; -} -#else ivas_error ivas_orient_trk_SetReferenceVector_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ const IVAS_VECTOR3 listenerPos, /* i : Listener position */ @@ -1288,7 +846,6 @@ ivas_error ivas_orient_trk_SetReferenceVector_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -1297,97 +854,6 @@ ivas_error ivas_orient_trk_SetReferenceVector_fx( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_Process( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - IVAS_QUATERNION absRot, /* i : absolute head rotation */ - float updateRate, /* i : rotation update rate [Hz] */ - IVAS_QUATERNION *pTrkRot /* o : tracked rotation */ -) -{ - float normalizedOrientation; - float relativeOrientationRate; - float rateRange; - float cutoffFrequency; - float alpha = pOTR->alpha; - float ang; - ivas_error result; - - if ( pOTR == NULL || pTrkRot == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - result = IVAS_ERR_OK; - - switch ( pOTR->orientation_tracking ) - { - case IVAS_HEAD_ORIENT_TRK_NONE: - pOTR->trkRot = absRot; - break; - case IVAS_HEAD_ORIENT_TRK_REF: - case IVAS_HEAD_ORIENT_TRK_REF_VEC: - case IVAS_HEAD_ORIENT_TRK_REF_VEC_LEV: - /* Reset average orientation */ - pOTR->absAvgRot = absRot; - - /* Reset adaptation filter - start adaptation at center rate */ - pOTR->alpha = sinf( 2.0f * EVS_PI * pOTR->centerAdaptationRate / updateRate ); - - /* Compute relative orientation = (absolute orientation) - (reference orientation) */ - QuaternionInverse( pOTR->refRot, &pOTR->trkRot ); - QuaternionProduct( pOTR->trkRot, absRot, &pOTR->trkRot ); - break; - - case IVAS_HEAD_ORIENT_TRK_AVG: - /* Compute average (low-pass filtered) absolute orientation */ - QuaternionSlerp( pOTR->absAvgRot, absRot, alpha, &pOTR->absAvgRot ); - - /* Compute relative orientation = (absolute orientation) - (average absolute orientation) */ - QuaternionInverse( pOTR->absAvgRot, &pOTR->trkRot ); - QuaternionProduct( pOTR->trkRot, absRot, &pOTR->trkRot ); - - /* Adapt LPF constant based on orientation excursion relative to current mean: - - low cutoff (slow adaptation) for small excursions (around center) - - high cutoff (fast adaptation) for large excursions (off-center) - */ - ang = QuaternionAngle( absRot, pOTR->trkRot ); - normalizedOrientation = ang * ang; - - relativeOrientationRate = sqrtf( normalizedOrientation ) / pOTR->adaptationAngle; - /* 'if' assumed to perform comparison to 0 */ - if ( relativeOrientationRate > 1.0f ) - { - relativeOrientationRate = 1.0f; - } - - /* Compute range of the adaptation rate between center = lower rate and off-center = higher rate */ - rateRange = pOTR->offCenterAdaptationRate - pOTR->centerAdaptationRate; - /* 'if' assumed to perform comparison to 0 */ - if ( rateRange < 0.0f ) - { - rateRange = 0.0f; - } - - /* Compute adaptivity cutoff frequency: interpolate between minimum (center) and maximum (off-center) values */ - cutoffFrequency = pOTR->centerAdaptationRate + ( relativeOrientationRate * rateRange ); - - /* Compute filter coefficient corresponding to desired cutoff frequency */ - pOTR->alpha = sinf( 2.0f * EVS_PI * cutoffFrequency / updateRate ); - break; - default: - result = IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Non-supported orientation tracking adaptation type" ); - break; - } - - if ( result == IVAS_ERR_OK ) - { - *pTrkRot = pOTR->trkRot; - } - - return result; -} -#else ivas_error ivas_orient_trk_Process_fx( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ IVAS_QUATERNION absRot, /* i : absolute head rotation */ @@ -1503,4 +969,3 @@ ivas_error ivas_orient_trk_Process_fx( } return result; } -#endif diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index ca2440753..359bea7e6 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -39,7 +39,6 @@ #include "ivas_rom_com_fx.h" #include "ivas_prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" /*-------------------------------------------------------------------------* * audioCfg2channels() @@ -131,88 +130,12 @@ Word16 audioCfg2channels( return ( nchan_out ); } -#else -/*-------------------------------------------------------------------------* - * audioCfg2channels() - * - * Map Audio configuration to number of channels - *-------------------------------------------------------------------------*/ - -/*! r: number of audio channels */ -int16_t audioCfg2channels( - AUDIO_CONFIG output_config /* i : output audio configuration */ -) -{ - int16_t nchan_out; - - switch ( output_config ) - { - case IVAS_AUDIO_CONFIG_MONO: - nchan_out = 1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - nchan_out = 2; - break; - case IVAS_AUDIO_CONFIG_5_1: - nchan_out = 6; - break; - case IVAS_AUDIO_CONFIG_7_1: - nchan_out = 8; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - nchan_out = 8; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - nchan_out = 10; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - nchan_out = 12; - break; - case IVAS_AUDIO_CONFIG_FOA: - nchan_out = 4; - break; - case IVAS_AUDIO_CONFIG_HOA2: - nchan_out = 9; - break; - case IVAS_AUDIO_CONFIG_HOA3: - nchan_out = 16; - break; - case IVAS_AUDIO_CONFIG_OBA: - nchan_out = 8; - break; - case IVAS_AUDIO_CONFIG_BINAURAL: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - nchan_out = 2; - break; - case IVAS_AUDIO_CONFIG_ISM1: - nchan_out = 1; - break; - case IVAS_AUDIO_CONFIG_ISM2: - nchan_out = 2; - break; - case IVAS_AUDIO_CONFIG_ISM3: - nchan_out = 3; - break; - case IVAS_AUDIO_CONFIG_ISM4: - nchan_out = 4; - break; - default: - IVAS_ERROR( IVAS_ERR_INTERNAL, "Error: illegal output configuration\n" ); - nchan_out = -1; - break; - } - - return ( nchan_out ); -} -#endif /*-------------------------------------------------------------------------* * ivas_output_init() * * Initialize and configure IVAS output parameters *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_output_init( IVAS_OUTPUT_SETUP *hOutSetup, /* o : IVAS output setup structure */ const AUDIO_CONFIG output_config /* i : output audio configuration */ @@ -369,127 +292,6 @@ void ivas_output_init( return; } -#else - -void ivas_output_init( - IVAS_OUTPUT_SETUP *hOutSetup, /* o : IVAS output setup structure */ - const AUDIO_CONFIG output_config /* i : output audio configuration */ -) -{ - int16_t nchan_out; - - /* set general default values */ - hOutSetup->output_config = output_config; - hOutSetup->is_loudspeaker_setup = 0; - hOutSetup->is_binaural_setup = 0; - hOutSetup->ambisonics_order = -1; - hOutSetup->separateChannelEnabled = 0; - hOutSetup->separateChannelIndex = 0; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - hOutSetup->is_loudspeaker_setup = 1; - /* set in ivas_init_decoder: */ - /* hOutSetup->ls_azimuth */ - /* hOutSetup->ls_elevation */ - /* hOutSetup->num_lfe */ - /* hOutSetup->index_lfe[0] */ - /* hOutSetup->is_planar_setup */ - } - else - { - /* Set default values for all other than custom LS setup */ - hOutSetup->ls_azimuth = NULL; - hOutSetup->ls_elevation = NULL; - hOutSetup->num_lfe = 0; - hOutSetup->index_lfe[0] = -1; - hOutSetup->is_planar_setup = 0; - - /* set output setup specific values */ - switch ( output_config ) - { - case IVAS_AUDIO_CONFIG_MONO: - hOutSetup->is_loudspeaker_setup = 1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP2; - hOutSetup->ls_elevation = ls_elevation_CICP2; - break; - case IVAS_AUDIO_CONFIG_FOA: - hOutSetup->ambisonics_order = SBA_FOA_ORDER; - break; - case IVAS_AUDIO_CONFIG_HOA2: - hOutSetup->ambisonics_order = SBA_HOA2_ORDER; - break; - case IVAS_AUDIO_CONFIG_HOA3: - hOutSetup->ambisonics_order = SBA_HOA3_ORDER; - break; - case IVAS_AUDIO_CONFIG_5_1: - hOutSetup->num_lfe = 1; - hOutSetup->index_lfe[0] = 3; - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP6; - hOutSetup->ls_elevation = ls_elevation_CICP6; - hOutSetup->is_planar_setup = 1; - break; - case IVAS_AUDIO_CONFIG_7_1: - hOutSetup->num_lfe = 1; - hOutSetup->index_lfe[0] = 3; - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP12; - hOutSetup->ls_elevation = ls_elevation_CICP12; - hOutSetup->is_planar_setup = 1; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - hOutSetup->num_lfe = 1; - hOutSetup->index_lfe[0] = 3; - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP14; - hOutSetup->ls_elevation = ls_elevation_CICP14; - hOutSetup->is_planar_setup = 0; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - hOutSetup->num_lfe = 1; - hOutSetup->index_lfe[0] = 3; - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP16; - hOutSetup->ls_elevation = ls_elevation_CICP16; - hOutSetup->is_planar_setup = 0; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - hOutSetup->num_lfe = 1; - hOutSetup->index_lfe[0] = 3; - hOutSetup->is_loudspeaker_setup = 1; - hOutSetup->ls_azimuth = ls_azimuth_CICP19; - hOutSetup->ls_elevation = ls_elevation_CICP19; - hOutSetup->is_planar_setup = 0; - break; - case IVAS_AUDIO_CONFIG_BINAURAL: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - case IVAS_AUDIO_CONFIG_ISM1: - case IVAS_AUDIO_CONFIG_ISM2: - case IVAS_AUDIO_CONFIG_ISM3: - case IVAS_AUDIO_CONFIG_ISM4: - hOutSetup->is_binaural_setup = 1; - case IVAS_AUDIO_CONFIG_EXTERNAL: - /* Default values are used */ - break; - default: - return; - } - } - - if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL && output_config != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out = audioCfg2channels( output_config ); - hOutSetup->nchan_out_woLFE = nchan_out - hOutSetup->num_lfe; - } - - return; -} -#endif // IVAS_FLOAT_FIXED /*-----------------------------------------------------------------* @@ -499,150 +301,6 @@ void ivas_output_init( *-----------------------------------------------------------------*/ /*! r: number of decoder buffers */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_get_nchan_buffers_dec( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - const int16_t sba_analysis_order, /* i : SBA order evaluated in SBA decoder */ - const int32_t ivas_total_brate /* i : total IVAS bitrate */ -) -{ - int16_t nchan_out_buff; - AUDIO_CONFIG output_config; - - output_config = st_ivas->hDecoderConfig->output_config; - - nchan_out_buff = MAX_OUTPUT_CHANNELS; - - if ( st_ivas->ivas_format == MONO_FORMAT ) - { - nchan_out_buff = st_ivas->hDecoderConfig->nchan_out; - } - else if ( st_ivas->ivas_format == STEREO_FORMAT ) - { - nchan_out_buff = max( st_ivas->hDecoderConfig->nchan_out, CPE_CHANNELS ); - } - else if ( st_ivas->ivas_format == ISM_FORMAT ) - { - nchan_out_buff = st_ivas->nchan_ism; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out_buff = max( audioCfg2channels( st_ivas->transport_config ), audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - } - } - else if ( st_ivas->ivas_format == SBA_FORMAT ) - { - int16_t nchan_internal; - nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate ); - nchan_out_buff = st_ivas->hDecoderConfig->nchan_out; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else - { - nchan_out_buff = max( audioCfg2channels( st_ivas->transport_config ), audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - } - nchan_out_buff = max( nchan_out_buff, nchan_internal ); - } - else if ( st_ivas->ivas_format == MASA_FORMAT ) - { - nchan_out_buff = CPE_CHANNELS; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else if ( output_config == IVAS_AUDIO_CONFIG_STEREO || output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - nchan_out_buff = 2 * CPE_CHANNELS; - } - else if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - } - } - else if ( st_ivas->ivas_format == MASA_ISM_FORMAT ) - { - nchan_out_buff = st_ivas->nchan_ism + CPE_CHANNELS; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - } - } - else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) - { - int16_t nchan_internal; - nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate ); - nchan_out_buff = st_ivas->nchan_ism + st_ivas->nchan_transport; - - if ( st_ivas->hMCT != NULL ) - { - nchan_out_buff = ( ( nchan_out_buff + 1 ) >> 1 ) << 1; /* ensure odd number of channels in MCT */ - } - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else if ( output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - - if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS ) - { - nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for ivas_sba_upmixer_renderer() */ - } - else - { - nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for ivas_spar_dec_upmixer_sf() which is based on 'nchan_out' */ - } - } - else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) - { - nchan_out_buff = st_ivas->hDecoderConfig->nchan_out + st_ivas->nchan_ism; /*take into account sba_ch_idx' in ivas_dec() */ - } - - if ( !( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) ) - { - nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); - } - nchan_out_buff = min( nchan_out_buff, MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS ); - } - else if ( st_ivas->ivas_format == MC_FORMAT ) - { - nchan_out_buff = st_ivas->hDecoderConfig->nchan_out; - - if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } - else - { - nchan_out_buff = max( audioCfg2channels( st_ivas->transport_config ), audioCfg2channels( st_ivas->intern_config ) ); - nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - } - } - - - return nchan_out_buff; -} -#else Word16 ivas_get_nchan_buffers_dec( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 sba_analysis_order, /* i : SBA order evaluated in SBA decoder */ @@ -796,14 +454,12 @@ Word16 ivas_get_nchan_buffers_dec( return nchan_out_buff; } -#endif /*-------------------------------------------------------------------* * ivas_output_buff_dec() * * Allocate/reallocate output audio buffers *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_output_buff_dec_fx( Word32 *p_output_f[], /* i/o: output audio buffers */ const Word16 nchan_out_buff_old, /* i : previous frame number of output channels */ @@ -832,36 +488,3 @@ ivas_error ivas_output_buff_dec_fx( } return IVAS_ERR_OK; } -#else - -ivas_error ivas_output_buff_dec( - float *p_output_f[], /* i/o: output audio buffers */ - const int16_t nchan_out_buff_old, /* i : previous frame number of output channels */ - const int16_t nchan_out_buff /* i : number of output channels */ -) -{ - int16_t ch; - - if ( nchan_out_buff > nchan_out_buff_old ) - { - for ( ch = nchan_out_buff_old; ch < nchan_out_buff; ch++ ) - { - /* note: these are intra-frame heap memories */ - if ( ( p_output_f[ch] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) /* note: 32000 == max internal sampling rate */ - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for floating-point output audio buffer!\n" ) ); - } - } - } - else - { - for ( ch = nchan_out_buff; ch < nchan_out_buff_old; ch++ ) - { - free( p_output_f[ch] ); - p_output_f[ch] = NULL; - } - } - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_rend/ivas_output_init_fx.c b/lib_rend/ivas_output_init_fx.c index e3a297cdf..77cfa9c55 100644 --- a/lib_rend/ivas_output_init_fx.c +++ b/lib_rend/ivas_output_init_fx.c @@ -2,7 +2,6 @@ #include "ivas_prot_fx.h" #include "ivas_prot.h" #include "ivas_prot_rend.h" -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_nchan_buffers_dec_ivas_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 sba_analysis_order, /* i : SBA order evaluated in SBA decoder */ @@ -158,4 +157,3 @@ Word16 ivas_get_nchan_buffers_dec_ivas_fx( return nchan_out_buff; } -#endif // IVAS_FLOAT_FIXED diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 8752094ce..396b1163a 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -49,32 +49,19 @@ IVAS_REND_AudioConfigType getAudioConfigType( const AUDIO_CONFIG config ); -#ifdef IVAS_FLOAT_FIXED ivas_error getAudioConfigNumChannels( const AUDIO_CONFIG config, Word16 *numChannels ); -#else -ivas_error getAudioConfigNumChannels( - const AUDIO_CONFIG config, - int16_t *numChannels -); -#endif /*----------------------------------------------------------------------------------* * output setup prototypes *----------------------------------------------------------------------------------*/ /*! r: number of output channels */ -#ifdef IVAS_FLOAT_FIXED Word16 audioCfg2channels( const AUDIO_CONFIG output_config /* i : output audio configuration */ ); -#else -int16_t audioCfg2channels( - const AUDIO_CONFIG output_config /* i : output audio configuration */ -); -#endif // IVAS_FLOAT_FIXED void ivas_output_init( IVAS_OUTPUT_SETUP *hOutSetup, /* o : output setup structure */ @@ -88,13 +75,11 @@ Word16 ivas_get_nchan_buffers_dec( const Word32 ivas_total_brate /* i : total IVAS bitrate */ ); -#ifdef IVAS_FLOAT_FIXED Word16 ivas_get_nchan_buffers_dec_ivas_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const Word16 sba_analysis_order, /* i : SBA order evaluated in SBA decoder */ const Word32 ivas_total_brate /* i : total IVAS bitrate */ ); -#endif // IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* * Limiter prototypes @@ -119,7 +104,6 @@ void ivas_limiter_dec const int16_t output_frame, /* i : number of samples per channel in the buffer */ const int16_t BER_detect /* i : BER detect flag */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_limiter_dec_fx( IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ Word32 *output[MAX_OUTPUT_CHANNELS], /* i/o: input/output buffer */ @@ -128,7 +112,6 @@ void ivas_limiter_dec_fx( const Word16 BER_detect, /* i : BER detect flag */ Word16 q_factor /* i : Q factor of the output samples */ ); -#endif void limiter_process( IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ const int16_t output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ @@ -136,7 +119,6 @@ void limiter_process( const int16_t BER_detect, /* i : BER detect flag */ int16_t *strong_saturation_cnt /* i/o: counter of strong saturations (can be NULL) */ ); -#ifdef IVAS_FLOAT_FIXED void limiter_process_fx( IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ const Word16 output_frame, /* i : number of samples to be processed per channel in the I/O buffer */ @@ -145,43 +127,24 @@ void limiter_process_fx( Word16 *strong_saturation_cnt, /* i/o: counter of strong saturations (can be NULL) */ Word16 q_factor /* i : Q factor of output samples */ ); -#endif /*----------------------------------------------------------------------------------* * TD decorr. function prototypes *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_decorr_dec_open_fx( ivas_td_decorr_state_t **hTdDecorr, /* i/o: TD decorrelator handle */ const int32_t output_Fs, /* i : output sampling rate */ const int16_t nchan_internal, /* i : number of internal channels */ const int16_t ducking_flag /* i : ducking flag */ ); -#else -ivas_error ivas_td_decorr_dec_open( - ivas_td_decorr_state_t **hTdDecorr, /* i/o: TD decorrelator handle */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t nchan_internal, /* i : number of internal channels */ - const int16_t ducking_flag /* i : ducking flag */ -); -#endif void ivas_td_decorr_dec_close( ivas_td_decorr_state_t **hTdDecorr /* i/o: TD decorrelator handle */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_td_decorr_process_fx( ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decoderrelator handle */ Word32 *pcm_in[], /* i : input audio channels */ Word32 **ppOut_pcm, /* o : output audio channels */ const Word16 output_frame /* i : output frame length */ ); -#else -void ivas_td_decorr_process( - ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decoderrelator handle */ - float *pcm_in[], /* i : input audio channels */ - float **ppOut_pcm, /* o : output audio channels */ - const int16_t output_frame /* i : output frame length */ -); -#endif ivas_error ivas_td_decorr_reconfig_dec( const IVAS_FORMAT ivas_format, /* i : IVAS format */ const Word32 ivas_total_brate, /* i : total IVAS bitrate */ @@ -191,26 +154,16 @@ ivas_error ivas_td_decorr_reconfig_dec( UWord16 *useTdDecorr /* i/o: TD decorrelator flag */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_td_decorr_APD_iir_filter( - ivas_td_decorr_APD_filt_state_t *filter_state, /* i/o: TD decorrelator filter handle */ - float *pIn_out, /* i/o: audio channels */ - const int16_t num_APD_sections, /* i : numbef of APD sections */ - const int16_t output_frame /* i : output frame length */ -); -#else void ivas_td_decorr_APD_iir_filter_fx( ivas_td_decorr_APD_filt_state_t *filter_state, /* i/o: TD decorrelator filter handle */ Word32 *pIn_out, /* i/o: audio channels */ const Word16 num_APD_sections, /* i : numbef of APD sections */ const Word16 output_frame /* i : output frame length */ ); -#endif /*----------------------------------------------------------------------------------* * Amplitude Panning EFAP prototypes *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error efap_init_data_fx( EFAP_HANDLE *hEFAPdata, /* i/o: handle for EFAP data structure that will be initialized */ const Word32 *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) Q22 */ @@ -218,20 +171,10 @@ ivas_error efap_init_data_fx( const Word16 num_speaker_nodes, /* i : number of speaker nodes in the set */ const Word16 efap_mode /* i : indicates whether EFAP or EFIP is used */ ); -#else -ivas_error efap_init_data( - EFAP_HANDLE *hEFAPdata, /* i/o: handle for EFAP data structure that will be initialized */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ - const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ -); -#endif void efap_free_data( EFAP_HANDLE *hEFAPdata /* i/o: EFAP handle to be freed */ ); -#ifdef IVAS_FLOAT_FIXED void efap_determine_gains_fx( EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ Word32 *gains, /* o : gain vector for speaker nodes for given direction Q30 */ @@ -239,20 +182,10 @@ void efap_determine_gains_fx( const Word32 ele_deg, /* i : elevation in degrees for panning direction (positive up) Q22 */ const Word16 efap_mode /* i : indicates whether EFAP or EFIP is used */ ); -#else -void efap_determine_gains( - EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - float *gains, /* o : gain vector for speaker nodes for given direction */ - const float azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ - const float ele_deg, /* i : elevation in degrees for panning direction (positive up) */ - const int16_t efap_mode /* i : indicates whether EFAP or EFIP is used */ -); -#endif /*----------------------------------------------------------------------------------* * Amplitude Panning VBAP prototypes *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error vbap_init_data_fx( VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ const Word32 *speaker_node_azi_deg_fx, /* i : vector of speaker node azimuths (positive left) Q22 */ @@ -272,27 +205,6 @@ void vbap_determine_gains_fx( void vbap_free_data_fx( VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ ); -#else -ivas_error vbap_init_data( - VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -); - -void vbap_determine_gains( - const VBAP_HANDLE hVBAPdata, /* i : VBAP structure */ - float *gains, /* o : gain vector for speaker nodes for given direction */ - const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ - const int16_t ele_deg, /* i : elevation in degrees for panning direction (positive up) */ - const int16_t use_object_mode /* i : select between object mode panning and spatial mode panning */ -); - -void vbap_free_data( - VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ -); -#endif /*----------------------------------------------------------------------------------* @@ -314,41 +226,21 @@ void ivas_sba_prototype_renderer( const int16_t subframe /* i : Subframe to render */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_sba_get_hoa_dec_matrix( - const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ - float **hoa_dec_mtx, /* o : ALLRAD decoder matrix */ - const Word16 ambisonics_order /* i : Ambisonics order */ -); -#else ivas_error ivas_sba_get_hoa_dec_matrix_fx( const IVAS_OUTPUT_SETUP hOutSetup, /* i : target output setup */ Word32 **hoa_dec_mtx, /* o : ALLRAD decoder matrix, Q29 */ const Word16 ambisonics_order /* i : Ambisonics order */ ); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_binaural_sba_gain_fx( Word32 *output[], /* i/o: synthesized core-coder transport channels/DirAC output, inp Qx, out Qx-1 */ const Word16 nchan_remapped, /* i : num channels after remapping of TCs */ const Word16 output_frame /* i : output frame length */ ); -#endif void ivas_dirac_dec_binaural_sba_gain( float *output[], /* i/o: synthesized core-coder transport channels/DirAC output */ const int16_t nchan_remapped, /* i : num channels after remapping of TCs */ const int16_t output_frame /* i : output frame length */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_binaural_render( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ - const uint16_t nSamplesAsked, /* i : number of CLDFB slots requested */ - uint16_t *nSamplesRendered, /* o : number of CLDFB slots rendered */ - uint16_t *nSamplesAvailable, /* o : number of CLDFB slots still to render */ - const int16_t nchan_transport, /* i : number of transport channels */ - float *output_f[] /* o : rendered time signal */ -); -#else void ivas_dirac_dec_binaural_render_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const UWord16 nSamplesAsked, /* i : number of CLDFB slots requested */ @@ -357,70 +249,34 @@ void ivas_dirac_dec_binaural_render_fx( const Word16 nchan_transport, /* i : number of transport channels */ Word32 *output_f[] /* o : rendered time signal, Q11 */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_ext_rend_parambin_render( - MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA ext rend structure */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ - float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ - const int16_t num_subframes /* i : number of subframes to render */ -); -#else void ivas_masa_ext_rend_parambin_render_fx( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA ext rend structure */ COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ Word32 *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output Q11*/ const Word16 num_subframes ); /* i : number of subframes to render */ -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_dec_init_binaural_data( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ - HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : HRTF structure for rendering */ -); -#else ivas_error ivas_dirac_dec_init_binaural_data_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : HRTF structure for rendering */ ); -#endif void ivas_dirac_dec_close_binaural_data( DIRAC_DEC_BIN_HANDLE *hBinaural /* i/o: decoder DirAC binaural data handle */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_binaural_copy_hrtfs_fx( HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */ ); -#endif // IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_binaural_copy_hrtfs( HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */ ); -#ifndef IVAS_FLOAT_FIXED -/*! r: Configured reqularization factor value */ -float configure_reqularization_factor( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int32_t ivas_total_brate /* i : total IVAS bitrate */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_dirac_alloc_mem( - DIRAC_REND_HANDLE hDirACRend, - const RENDERER_TYPE renderer_type, - const int16_t num_freq_bands, - DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem, - const int16_t hodirac_flag -); -#else ivas_error ivas_dirac_alloc_mem_fx( DIRAC_REND_HANDLE hDirACRend, const RENDERER_TYPE renderer_type, const Word16 num_freq_bands, DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem, const Word16 hodirac_flag); -#endif void ivas_dirac_free_mem( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem @@ -436,7 +292,6 @@ void initDiffuseResponses( int16_t *num_ele_spk_no_diffuse_rendering, const AUDIO_CONFIG transport_config ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_free_mem_fx( DIRAC_DEC_STACK_MEM_HANDLE hDirAC_mem ); @@ -451,9 +306,7 @@ void initDiffuseResponses_fx( Word16 *num_ele_spk_no_diffuse_rendering, const AUDIO_CONFIG transport_config ); -#endif -#ifdef IVAS_FLOAT_FIXED void computeIntensityVector_dec_fx( Word32 Cldfb_RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 Cldfb_ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -464,17 +317,6 @@ void computeIntensityVector_dec_fx( Word32 *intensity_real_z_fx, /*q_intensity_real*/ Word16 *q_intensity_real ); -#else -void computeIntensityVector_dec( - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - const int16_t num_frequency_bands, - float *intensity_real_x, - float *intensity_real_y, - float *intensity_real_z -); -#endif -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation_shd_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*Q(q_cldfb)*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*Q(q_cldfb)*/ @@ -491,7 +333,6 @@ void protoSignalComputation_shd_fx( Word32 *p_Rmat_fx, /* Q30 */ Word16 q_cldfb ); -#endif void protoSignalComputation_shd( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], @@ -505,7 +346,6 @@ void protoSignalComputation_shd( float *p_Rmat ); -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation1_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -522,7 +362,6 @@ void protoSignalComputation1_fx( const Word16 num_freq_bands, Word16 q_cldfb ); -#endif void protoSignalComputation1( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], @@ -535,7 +374,6 @@ void protoSignalComputation1( const int16_t num_freq_bands ); -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation2_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -553,7 +391,6 @@ void protoSignalComputation2_fx( MASA_STEREO_TYPE_DETECT *stereo_type_detect, Word16 q_cldfb ); -#endif void protoSignalComputation2( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], @@ -567,7 +404,6 @@ void protoSignalComputation2( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); -#ifdef IVAS_FLOAT_FIXED void protoSignalComputation4_fx( Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ Word32 ImagBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -587,41 +423,18 @@ void protoSignalComputation4_fx( const Word16 *sba_map_tc_ind, Word16 q_cldfb ); -#else -void protoSignalComputation4( - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float *proto_frame_f, - float *proto_direct_buffer_f, - float *reference_power, - float *proto_power_smooth, - const int16_t slot_index, - const int16_t num_outputs_diff, - const int16_t num_freq_bands, -#ifndef IVAS_FLOAT_FIXED - const float *mtx_hoa_decoder, -#else - const Word32 *mtx_hoa_decoder, -#endif - const int16_t nchan_transport, - const int16_t *sba_map_tc_ind -); -#endif void ivas_dirac_dec_compute_diffuse_proto( DIRAC_REND_HANDLE hDirACRend, const int16_t num_freq_bands, const int16_t slot_idx ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_compute_diffuse_proto_fx( DIRAC_REND_HANDLE hDirACRend, const Word16 num_freq_bands, const Word16 slot_idx /* i : slot index */ ); -#endif -#ifdef IVAS_FLOAT_FIXED void computeDirectionAngles_fx( Word32 *intensity_real_x_fx, /*q_intensity_real*/ Word32 *intensity_real_y_fx, /*q_intensity_real*/ @@ -631,37 +444,22 @@ void computeDirectionAngles_fx( Word16 *azimuth, Word16 *elevation ); -#else -void computeDirectionAngles( - float *intensity_real_x, - float *intensity_real_y, - float *intensity_real_z, - const int16_t num_frequency_bands, - int16_t *azimuth, - int16_t *elevation -); -#endif void ivas_masa_init_stereotype_detection( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); -#ifdef IVAS_FLOAT_FIXED void ivas_masa_init_stereotype_detection_fx( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_masa_stereotype_detection_fx( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); -#endif void ivas_masa_stereotype_detection( MASA_STEREO_TYPE_DETECT *stereo_type_detect ); -#ifdef IVAS_FLOAT_FIXED void ivas_lfe_synth_with_cldfb_fx( MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, Word32 RealBuffer_fx[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /*q_cldfb*/ @@ -673,20 +471,7 @@ void ivas_lfe_synth_with_cldfb_fx( const Word16 nchan_transport, Word16 q_cldfb ); -#else -void ivas_lfe_synth_with_cldfb( - MCMASA_LFE_SYNTH_DATA_HANDLE hMasaLfeSynth, - float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float RealBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - float ImagBufferLfe[MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], - const int16_t slot_index, - const int16_t subframe_index, - const int16_t nchan_transport -); -#endif -#ifdef IVAS_FLOAT_FIXED void rotateAziEle_DirAC_fx( Word16 *azi, /* i/o: array of azimuth values */ Word16 *ele, /* i/o: array of elevation values */ @@ -694,7 +479,6 @@ void rotateAziEle_DirAC_fx( const Word16 band2, /* i : bands to work on (upper bound) */ const Word32 *p_Rmat_fx /* i : pointer to real-space rotation matrix q30*/ ); -#endif void rotateAziEle_DirAC( int16_t *azi, int16_t *ele, @@ -711,7 +495,6 @@ ivas_error ivas_dirac_dec_onset_detection_open( DIRAC_ONSET_DETECTION_STATE *ph_dirac_onset_detection_state ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_onset_detection_open_fx( const Word16 num_protos_diff, //Q0 const Word16 num_freq_bands, //Q0 @@ -730,7 +513,6 @@ ivas_error ivas_dirac_dec_decorr_open_fx( const Word16 nchan_transport, /* i : number of transport channels */ const Word32 output_Fs /* i : output sampling rate */ ); -#endif void ivas_dirac_dec_onset_detection_process( const float *input_power_f, @@ -740,7 +522,6 @@ void ivas_dirac_dec_onset_detection_process( DIRAC_ONSET_DETECTION_STATE h_dirac_onset_detection_state ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_onset_detection_process_fx( const Word32 *input_power_f, /* Q(0) */ Word32 *onset_filter, /* Q(0) */ @@ -748,7 +529,6 @@ void ivas_dirac_dec_onset_detection_process_fx( DIRAC_ONSET_DETECTION_PARAMS h_dirac_onset_detection_params, DIRAC_ONSET_DETECTION_STATE h_dirac_onset_detection_state ); -#endif ivas_error ivas_dirac_dec_decorr_open( DIRAC_DECORR_PARAMS **ph_freq_domain_decorr_ap_params, @@ -777,7 +557,6 @@ void ivas_dirac_dec_decorr_process( HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_decorr_process_fx( const Word16 num_freq_bands, Word16 num_channels, @@ -794,18 +573,15 @@ void ivas_dirac_dec_decorr_process_fx( HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params, HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state ); -#endif void ivas_dirac_dec_decorr_close( HANDLE_DIRAC_DECORR_PARAMS *ph_dirac_decorr_params, HANDLE_DIRAC_DECORR_STATE *ph_dirac_decorr_state ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_decorr_close_fx( HANDLE_DIRAC_DECORR_PARAMS *ph_dirac_decorr_params, HANDLE_DIRAC_DECORR_STATE *ph_dirac_decorr_state ); -#endif // IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_output_synthesis_open( @@ -824,7 +600,6 @@ void ivas_dirac_dec_output_synthesis_init( const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_dec_output_synthesis_open_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ @@ -844,11 +619,9 @@ void ivas_dirac_dec_output_synthesis_init_fx( void ivas_dirac_dec_output_synthesis_close_fx( DIRAC_REND_HANDLE hDirACRend /* i/o: DirAC handle */ ); -#endif void ivas_dirac_dec_output_synthesis_close( DIRAC_REND_HANDLE hDirACRend /* i/o: DirAC handle */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_process_slot_fx( const Word32 *reference_power, /* i : Estimated power */ const Word16 q_reference_power, /* i : Estimated power */ @@ -867,7 +640,6 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx( const Word16 md_idx, const Word16 hodirac_flag, /* i : flag to indicate HO-DirAC mode */ const Word16 dec_param_estim); -#endif void ivas_dirac_dec_output_synthesis_process_slot( const float *reference_power, /* i : Estimated power */ const float *onset, /* i : onset filter */ @@ -886,7 +658,6 @@ void ivas_dirac_dec_output_synthesis_process_slot( const int16_t dec_param_estim /* i : flag to indicate parameter estimation mode */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ Word32 ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ @@ -901,7 +672,6 @@ void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd_fx( Word16 *q_cy_cross_dir_smooth_prev, Word16 *q_cy_auto_diff_smooth_prev ); -#endif void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ @@ -916,7 +686,6 @@ void ivas_dirac_dec_output_synthesis_process_subframe_gain_shd( const int16_t dec_param_estim /* i : flag to indicate parameter estimation mode */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( Word32 RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ Word32 ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ @@ -930,7 +699,6 @@ void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls_fx( const Word16 enc_param_start_band, Word16 *q_Cldfb ); -#endif void ivas_dirac_dec_output_synthesis_process_subframe_psd_ls( float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],/* i : LS signals */ @@ -951,24 +719,13 @@ void compute_hoa_encoder_mtx( const int16_t num_responses, const int16_t ambisonics_order ); -#ifdef IVAS_FLOAT_FIXED void compute_hoa_encoder_mtx_fx( const Word32 *azimuth, /*q22*/ const Word32 *elevation, /*q22*/ Word32 *response_fx, /*q31*/ const Word16 num_responses, const Word16 ambisonics_order ); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_compute_gain_factors( - const int16_t num_freq_bands, - const float *diffuseness, - const int16_t max_band_decorr, - float *direct_gain_factor, - float *diffuse_gain_factor -); -#else void ivas_dirac_dec_compute_gain_factors_fx( const Word16 num_freq_bands, const Word32 *diffuseness_fx, @@ -977,17 +734,7 @@ void ivas_dirac_dec_compute_gain_factors_fx( Word16 *max_exp_direct_fx, Word16 *max_exp_diffusion ); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_dirac_dec_compute_power_factors( - const int16_t num_freq_bands, - const float *diffuseness, - const int16_t max_band_decorr, - float *direct_power_factor, - float *diffuse_power_factor -); -#else void ivas_dirac_dec_compute_power_factors_fx( const Word16 num_freq_bands, const Word32 *diffuseness_fx, @@ -995,7 +742,6 @@ void ivas_dirac_dec_compute_power_factors_fx( Word32 *direct_power_factor, Word32 *diffuse_power_factor ); -#endif void ivas_dirac_dec_compute_directional_responses( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ @@ -1012,7 +758,6 @@ void ivas_dirac_dec_compute_directional_responses( const int16_t hodirac_flag /* i : flag to indicate HO-DirAC mode */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_dec_compute_directional_responses_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common spatial renderer data handle */ DIRAC_REND_HANDLE hDirACRend, /* i/o: DirAC renderer handle */ @@ -1028,7 +773,6 @@ void ivas_dirac_dec_compute_directional_responses_fx( const Word32 *p_Rmat, /* i : rotation matrix */ const Word16 hodirac_flag /* i : flag to indicate HO-DirAC mode */ ); -#endif void ivas_dirac_dec_get_frequency_axis( float *frequency_axis, /* o : array of center frequencies of a real filter bank */ @@ -1060,7 +804,6 @@ ivas_error ivas_dirac_allocate_parameters( const int16_t params_flag /* i : set of parameters flag */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_rend_close_fx( DIRAC_REND_HANDLE *hDirACRend_out ); @@ -1089,30 +832,20 @@ void ivas_dirac_deallocate_parameters_fx( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ const int16_t params_flag /* i : set of parameters flag */ ); -#endif void ivas_dirac_deallocate_parameters( SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, /* i/o: common data for spatial parametric rendering */ const int16_t params_flag /* i : set of parameters flag */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_masa_ext_dirac_render( - MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ - float *output_f[], /* i/o: input/output signals in time domain */ - const int16_t num_subframes /* i : number of subframes to render */ -); -#else void ivas_masa_ext_dirac_render_fx( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ Word32 *output_f[], /* i/o: input/output signals in time domain q11*/ const Word16 num_subframes /* i : number of subframes to render */ ); -#endif /*----------------------------------------------------------------------------------* * HRTF *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_binary_open_fx( TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ ); @@ -1120,21 +853,11 @@ ivas_error ivas_HRTF_binary_open_fx( void ivas_HRTF_binary_close_fx( TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ ); -#else -ivas_error ivas_HRTF_binary_open( - TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ -); - -void ivas_HRTF_binary_close( - TDREND_HRFILT_FiltSet_t **hHrtfTD /* i/o: TD renderer HRTF handle */ -); -#endif ivas_error ivas_HRTF_fastconv_binary_open( HRTFS_FASTCONV **hHrtfFastConv /* i/o: FASTCONV HRTF structure */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_HRTF_fastconv_binary_open_fx( HRTFS_FASTCONV **hHrtfFastConv /* i/o: FASTCONV HRTF structure */ @@ -1159,33 +882,11 @@ ivas_error ivas_HRTF_CRend_binary_open_fx( void ivas_HRTF_CRend_binary_close_fx( HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ ); -#else -void ivas_HRTF_fastconv_binary_close( - HRTFS_FASTCONV **hHrtfFastConv /* i/o: FASTCONV HRTF structure */ -); - -ivas_error ivas_HRTF_parambin_binary_open( - HRTFS_PARAMBIN **hHrtfParambin /* i/o: Parametric binauralizer HRTF structure */ -); - -void ivas_HRTF_parambin_binary_close( - HRTFS_PARAMBIN **hHrtfParambin /* i/o: Parametric binauralizer HRTF structure */ -); - -ivas_error ivas_HRTF_CRend_binary_open( - HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ -); - -void ivas_HRTF_CRend_binary_close( - HRTFS_CREND **hSetOfHRTF /* i/o: Set of HRTF handle */ -); -#endif /*----------------------------------------------------------------------------------* * TD object renderer *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer_unwrap_fx( const REVERB_HANDLE hReverb, /* i : Reverberator handle */ const AUDIO_CONFIG transport_config, /* i : Transport configuration */ @@ -1200,7 +901,6 @@ ivas_error ivas_td_binaural_renderer_unwrap_fx( const Word16 output_frame, /* i : output frame length */ const Word16 num_subframes /* i : number of subframes to render */ ); -#endif ivas_error ivas_td_binaural_renderer_unwrap( const REVERB_HANDLE hReverb, /* i : Reverberator handle */ @@ -1229,7 +929,6 @@ ivas_error ivas_td_binaural_renderer_ext( const int16_t output_frame, /* i : output frame length */ float output[][L_FRAME48k] /* i/o: SCE channels / Binaural synthesis */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_renderer_ext_fx( const TDREND_WRAPPER *pTDRend, /* i : TD Renderer wrapper structure */ const AUDIO_CONFIG inConfig, /* i : Input audio configuration */ @@ -1256,7 +955,6 @@ ivas_error ivas_td_binaural_open_unwrap_fx( Word32 *binaural_latency_ns, /* i : Binauralization delay */ Word16 *SrcInd ); -#endif // IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_open_unwrap( TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HR filter model (from file or NULL) */ @@ -1270,7 +968,6 @@ ivas_error ivas_td_binaural_open_unwrap( int32_t *binaural_latency_ns /* i : Binauralization delay */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_binaural_open_ext_fx( TDREND_WRAPPER *pTDRend, const AUDIO_CONFIG inConfig, @@ -1280,21 +977,10 @@ ivas_error ivas_td_binaural_open_ext_fx( Word16 *SrcInd, Word16 *num_src ); -#else -ivas_error ivas_td_binaural_open_ext( - TDREND_WRAPPER *pTDRend, - const AUDIO_CONFIG inConfig, - RENDER_CONFIG_DATA *hRendCfg, /* i : Renderer configuration */ - LSSETUP_CUSTOM_STRUCT *customLsInput, - const int32_t output_Fs -); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_td_binaural_close_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ ); -#endif // IVAS_FLOAT_FIXED void ivas_td_binaural_close( BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */ @@ -1307,7 +993,6 @@ ivas_error TDREND_GetMix( const int16_t subframe_idx, /* i : Subframe index to 5 ms subframe */ const int16_t ism_md_subframe_update /* i : Number of subframes to delay metadata to sync with audio */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_GetMix_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ Word32 *output[], /* i/o: ISM object synth / rendered output in 0,1 */ @@ -1315,16 +1000,7 @@ ivas_error TDREND_GetMix_fx( const Word16 subframe_idx, /* i : Subframe index to 5 ms subframe */ const Word16 ism_md_subframe_update /* i : Number of subframes to delay ism metadata to sync with audio */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error TDREND_Update_listener_orientation( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ - const int16_t headRotEnabled, /* i : Headrotation flag */ - const IVAS_QUATERNION *headPosition, /* i : Listener orientation */ - const IVAS_VECTOR3 *Pos /* i : Listener Position */ -); -#endif ivas_error TDREND_Update_object_positions( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD Renderer handle */ @@ -1332,31 +1008,13 @@ ivas_error TDREND_Update_object_positions( const IVAS_FORMAT in_format, /* i : Format of input sources */ const ISM_METADATA_HANDLE *hIsmMetaData /* i : Input metadata for ISM objects */ ); -#ifdef IVAS_FLOAT_FIXED void BSplineModelEvalDealloc_fx( ModelParams_t *model, /* i : Model parameters */ ModelEval_t *modelEval /* i : Model evaluation structure */ ); -#else -void BSplineModelEvalDealloc( - ModelParams_t *model, /* i : Model parameters */ - ModelEval_t *modelEval /* i : Model evaluation structure */ -); -#endif // IVAS_FLOAT_FIXED /* ----- Object renderer - hrfilt ----- */ -#ifndef IVAS_FLOAT_FIXED -void GetFilterFromAngle( - TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ - const float Elev, /* i : Elevation, degrees */ - float Azim, /* i : Azimuth, degrees */ - const int16_t filterlength, /* i : Filter length */ - float *LeftFilter, /* o : Left HR filter */ - float *RightFilter, /* o : Right HR filter */ - int16_t *itd /* o : ITD value */ -); -#else void GetFilterFromAngle_fx( TDREND_HRFILT_FiltSet_t *HrFiltSet_p, /* i/o: HR filter set structure */ const Word32 Elev_fx, /* i : Elevation, degrees Q22 */ @@ -1368,13 +1026,11 @@ void GetFilterFromAngle_fx( Word16 *hrf_right_e, /* o : Right HR filter exponent */ Word16 *itd /* o : ITD value Q0 */ ); -#endif void HRTF_model_precalc( ModelParams_t *model /* i/o: HRTF Model parameters */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_REND_RenderSourceHRFilt_fx( TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ Word32 *hrf_left_delta_fx, /* i/o: Left filter interpolation delta */ @@ -1385,26 +1041,14 @@ ivas_error TDREND_REND_RenderSourceHRFilt_fx( Word32 output_buf_fx[][L_SPATIAL_SUBFR_48k], /* o : Output buffer same Q as Src_p->InputFrame_p_fx Q11 */ const Word16 subframe_length /* i : Subframe length in use */ ); -#else -ivas_error TDREND_REND_RenderSourceHRFilt( - TDREND_SRC_t *Src_p, /* i/o: The source to be rendered */ - const float *hrf_left_delta, /* i : Left filter interpolation delta */ - const float *hrf_right_delta, /* i : Right filter interpolation delta */ - const int16_t intp_count, /* i : Interpolation count */ - float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ - const int16_t subframe_length /* i : Subframe length in use */ -); -#endif /* ----- Object renderer - sources ----- */ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetPos_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index */ const Word32 *Vec_p /* i : Position vector */ ); -#endif // IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetPos( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const int16_t SrcInd, /* i : Source index */ @@ -1415,7 +1059,6 @@ ivas_error TDREND_MIX_SRC_SetDir( const int16_t SrcInd, /* i : Source index */ const float *Vec_p /* i : Direction vector */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetDir_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index */ @@ -1427,45 +1070,13 @@ ivas_error TDREND_MIX_SRC_SetDirAtten_fx( const Word16 SrcInd, /* i : Source index */ const TDREND_DirAtten_t *DirAtten_p /* i : Directional attenuation specifier */ ); -#else -ivas_error TDREND_MIX_SRC_SetDirAtten( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const TDREND_DirAtten_t *DirAtten_p /* i : Directional attenuation specifier */ -); -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_SRC_SetPlayState( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ const Word16 SrcInd, /* i : Source index */ const TDREND_PlayStatus_t PlayStatus /* i : Play state */ ); -#else -ivas_error TDREND_MIX_SRC_SetPlayState( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const int16_t SrcInd, /* i : Source index */ - const TDREND_PlayStatus_t PlayStatus /* i : Play state */ -); -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void TDREND_SRC_REND_UpdateFiltersFromSpatialParams( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ - TDREND_SRC_SPATIAL_t *SrcSpatial_p, /* i : Spatial aspects of source */ - float *hrf_left_prev, /* o : Left filter */ - float *hrf_right_prev, /* o : Right filter */ - float *hrf_left_delta, /* o : Left filter interpolation delta */ - float *hrf_right_delta, /* o : Right filter interpolation delta */ - int16_t *intp_count, /* o : Interpolation count */ - int16_t *filterlength, /* o : Length of filters */ - int16_t *itd, /* o : ITD value */ - float *Gain, /* o : Gain value */ - TDREND_SRC_t *Src_p, - const int16_t subframe_update_flag /* i : Flag to determine update subframe idx */ -); -#else void TDREND_SRC_REND_UpdateFiltersFromSpatialParams_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ TDREND_SRC_REND_t *SrcRend_p, /* i/o: Source object */ @@ -1484,7 +1095,6 @@ void TDREND_SRC_REND_UpdateFiltersFromSpatialParams_fx( Word16 *Gain, /* o : Gain value */ TDREND_SRC_t *Src_p, /* i/o: Source pointer */ const Word16 subframe_update_flag); -#endif ivas_error TDREND_SRC_Alloc( TDREND_SRC_t **Src_pp /* i/o: Source */ @@ -1494,12 +1104,10 @@ void TDREND_SRC_Dealloc( TDREND_SRC_t *Src_p /* i/o: Source to deallocate */ ); -#ifdef IVAS_FLOAT_FIXED void TDREND_SRC_Init_fx( TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ const TDREND_PosType_t PosType /* i : Position type specifier */ ); -#endif // IVAS_FLOAT_FIXED void TDREND_SRC_Init( TDREND_SRC_t *Src_p, /* i/o: Source to initialize */ const TDREND_PosType_t PosType /* i : Position type specifier */ @@ -1513,29 +1121,20 @@ void TDREND_SPATIAL_VecInit( const float PosY, /* i : Y value */ const float PosZ /* i : Z value */ ); -#ifdef IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecInit_fx( Word32 *Pos_p, /* o : Output vector */ const Word32 PosX, /* i : X value */ const Word32 PosY, /* i : Y value */ const Word32 PosZ /* i : Z value */ ); -#endif // IVAS_FLOAT_FIXED /*! r: Euclidian norm value */ -#ifndef IVAS_FLOAT_FIXED -float TDREND_SPATIAL_VecNorm( - const float *Vec_p /* i : Vector for norm calculation */ -); -#endif -#ifdef IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecNormalize_fx( const Word32 *Vec_p_fx, /* i : Input vector Qx */ Word16 q, /* i : Input vector Q-factor */ Word32 *VecNorm_p_fx /* o : Normalised output vector Q30 */ ); -#endif // IVAS_FLOAT_FIXED void TDREND_SPATIAL_VecNormalize( const float *Vec_p, /* i : Input vector */ @@ -1552,7 +1151,6 @@ void TDREND_SPATIAL_VecMapToNewCoordSystem( float *LisRelPosAbs /* o : Transformed vector ignoring orientation */ ); -#ifdef IVAS_FLOAT_FIXED Word16 TDREND_SPATIAL_EvalOrthonormOrient_fx( Word32 *FrontVecON_p_fx, /* i/o: Normalized front vector Q30 */ Word32 *UpVecON_p_fx, /* i/o: Normalized up vector Q30 */ @@ -1561,7 +1159,6 @@ Word16 TDREND_SPATIAL_EvalOrthonormOrient_fx( const Word32 *UpVec_p_fx, /* i : Input up vector orient_q */ const Word16 orient_q /* i : Input up Q-factor */ ); -#endif /*! r: Flag if the orientation has been updated */ int16_t TDREND_SPATIAL_EvalOrthonormOrient( float *FrontVecON_p, /* o : Normalized front vector */ @@ -1573,13 +1170,11 @@ int16_t TDREND_SPATIAL_EvalOrthonormOrient( /* ----- Object renderer - mix ----- */ -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_AddSrc_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ Word16 *SrcInd, /* o : Source index */ const TDREND_PosType_t PosType /* i : Position type (absolute/relative) */ ); -#endif ivas_error TDREND_MIX_AddSrc( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ int16_t *SrcInd, /* o : Source index */ @@ -1591,36 +1186,20 @@ ivas_error TDREND_MIX_SetDistAttenModel( const TDREND_DistAttenModel_t DistAttenModel /* i : Distance attenuation model */ ); -#ifndef IVAS_FLOAT_FIXED -void TDREND_MIX_LIST_SetPos( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const float *Pos_p /* i : Listener's position */ -); - -ivas_error TDREND_MIX_LIST_SetOrient( - BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ - const float *FrontVec_p, /* i : Listener's orientation front vector */ - const float *UpVec_p /* i : Listener's orientation up vector */ -); -#endif -#ifdef IVAS_FLOAT_FIXED void TDREND_MIX_Dealloc_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ ); -#endif // IVAS_FLOAT_FIXED void TDREND_MIX_Dealloc( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd /* i/o: TD renderer handle */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error TDREND_MIX_Init_fx( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ const TDREND_MixSpatSpec_t *MixSpatSpec_p, /* i : Mixer spatial specification */ const Word32 output_Fs /* i : Output sampling rate */ ); -#endif // IVAS_FLOAT_FIXED ivas_error TDREND_MIX_Init( BINAURAL_TD_OBJECT_RENDERER_HANDLE hBinRendererTd, /* i/o: TD renderer handle */ TDREND_HRFILT_FiltSet_t **hHrtfTD, /* i/o: HRTF data (initialized in case of NULL) */ @@ -1640,7 +1219,6 @@ void TDREND_Apply_ITD( const int16_t length /* i : Subframe length */ ); -#ifdef IVAS_FLOAT_FIXED void TDREND_Apply_ITD_fx( Word32 *input_fx, /* i : Input subframe to be time adjusted Qx */ Word32 *out_left_fx, /* o : Output left channel with ITD applied Qx */ @@ -1650,21 +1228,7 @@ void TDREND_Apply_ITD_fx( Word32 *mem_itd_fx, /* i/o: ITD buffer memory Qx */ const Word16 length /* i : Subframe length */ ); -#endif - -#ifndef IVAS_FLOAT_FIXED -void TDREND_firfilt( - float *signal, /* i/o: Input signal / Filtered signal */ - float *filter, /* i/o: FIR filter */ - const float *filter_delta, /* i : FIR filter delta */ - const int16_t intp_count, /* i : interpolation count */ - float *mem, /* i/o: filter memory */ - const int16_t subframe_length, /* i : Length of signal */ - const int16_t filterlength, /* i : Filter length */ - const float Gain, /* i : Gain */ - const float prevGain /* i : Previous gain */ -); -#else + void TDREND_firfilt_fx( Word32 *signal_fx, /* i/o: Input signal / Filtered signal Qx */ Word32 *filter_fx, /* i/o: FIR filter Qy */ @@ -1677,7 +1241,6 @@ void TDREND_firfilt_fx( const Word16 Gain_fx, /* i : Gain Q14 */ const Word16 prevGain_fx /* i : Previous gain Q14 */ ); -#endif /*----------------------------------------------------------------------------------* @@ -1704,7 +1267,6 @@ ivas_error ivas_hrtf_init( ivas_error ivas_rend_initCrendWrapper( CREND_WRAPPER_HANDLE *pCrend ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_rend_crendProcess( const CREND_WRAPPER *pCrend, const AUDIO_CONFIG inConfig, @@ -1717,21 +1279,6 @@ ivas_error ivas_rend_crendProcess( const Word32 output_Fs, const Word16 num_subframes /* i : number of subframes to render */ ); -#else -ivas_error ivas_rend_crendProcess( - const CREND_WRAPPER *pCrend, - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig, - DECODER_CONFIG_HANDLE hDecoderConfig, - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - IVAS_OUTPUT_SETUP_HANDLE hIntSetup, - EFAP_HANDLE hEFAPdata, - float *output[], /* i/o: input/output audio channels */ - const int32_t output_Fs, - const int16_t num_subframes /* i : number of subframes to render */ -); -#endif -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_rend_crendProcessSubframe( const CREND_WRAPPER *pCrend, /* i/o: Crend wrapper handle */ const AUDIO_CONFIG inConfig, /* i : input audio configuration */ @@ -1747,29 +1294,11 @@ ivas_error ivas_rend_crendProcessSubframe( const Word32 output_Fs /* i : output sampling rate */ ); -#else -ivas_error ivas_rend_crendProcessSubframe( - const CREND_WRAPPER *pCrend, /* i/o: Crend wrapper handle */ - const AUDIO_CONFIG inConfig, /* i : input audio configuration */ - const AUDIO_CONFIG outConfig, /* i : output audio configuration */ - const DECODER_CONFIG_HANDLE hDecoderConfig, /* i : decoder config. structure */ - const COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined orientation handle */ - const IVAS_OUTPUT_SETUP_HANDLE hIntSetup, /* i : internal setup handle */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP handle */ - DECODER_TC_BUFFER_HANDLE hTcBuffer, /* i/o: JBM handle */ - float *input_f[], /* i : transport channels */ - float *output[], /* i/o: input/output audio channels */ - const int16_t n_samples_to_render, /* i : output frame length per channel */ - const int32_t output_Fs /* i : output sampling rate */ -); - -#endif /*----------------------------------------------------------------------------------* * Reverberator *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_binaural_reverb_open_fastconv_fx( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ const Word16 numBins, /* i : number of CLDFB bins */ @@ -1779,17 +1308,6 @@ ivas_error ivas_binaural_reverb_open_fastconv_fx( const Word32 sampling_rate, /* i : sampling rate */ const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ ); -#else -ivas_error ivas_binaural_reverb_open_fastconv( - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ - const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ - const int32_t sampling_rate, /* i : sampling rate */ - const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ -); -#endif ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ @@ -1800,11 +1318,9 @@ ivas_error ivas_binaural_reverb_open_parambin( const HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : Parametric binauralizer HRTF handle */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_binaural_reverb_close_fx( REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ ); -#endif void ivas_binaural_reverb_close( REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ ); @@ -1819,7 +1335,6 @@ void ivas_binaural_reverb_processSubframe( float outImag[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /* o : output CLDFB data imag */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_binaural_reverb_processSubframe_fx( REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ const Word16 numInChannels, /* i : num inputs to be processed */ @@ -1829,9 +1344,7 @@ void ivas_binaural_reverb_processSubframe_fx( Word32 outReal[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data real */ Word32 outImag[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /* o : output CLDFB data imag */ ); -#endif -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_reverb_open_fx( REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ @@ -1840,21 +1353,10 @@ ivas_error ivas_reverb_open_fx( RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ const Word32 output_Fs /* i : output sampling rate */ ); -#else -ivas_error ivas_reverb_open( - REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ - const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ - const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ - const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ - RENDER_CONFIG_DATA *pConfig, /* i : Reverb configuration */ - const int32_t output_Fs /* i : output sampling rate */ -); -#endif // IVAS_FLOAT_FIXED void ivas_reverb_close( REVERB_HANDLE *hReverb /* i/o: Reverberator handle */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_reverb_process_fx( const REVERB_HANDLE hReverb, /* i : Reverberator handle */ const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ @@ -1863,7 +1365,6 @@ ivas_error ivas_reverb_process_fx( Word32 *pcm_out[], /* o : the PCM audio with reverb applied */ const Word16 i_ts /* i : (Q0) subframe index */ ); -#endif ivas_error ivas_reverb_process( const REVERB_HANDLE hReverb, /* i : Reverberator handle */ const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ @@ -1872,22 +1373,12 @@ ivas_error ivas_reverb_process( float *pcm_out[], /* o : the PCM audio with reverb applied */ const int16_t i_ts /* i : subframe index */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_rev_delay_line_init( ivas_rev_delay_line_t *pDelay, /* o : the delay line to initialize */ Word32 *memory_buffer, /* i : the memory buffer to use for the delay line Q11 */ const UWord16 delay, /* i : the delay */ const UWord16 maxdelay /* i : maximum delay to be supported */ ); -#else -void ivas_rev_delay_line_init( - ivas_rev_delay_line_t *pDelay, /* o : the delay line to initialize */ - float *memory_buffer, /* i : the memory buffer to use for the delay line */ - const uint16_t delay, /* i : the delay */ - const uint16_t maxdelay /* i : maximum delay to be supported */ -); -#endif -#ifdef IVAS_FLOAT_FIXED /*! r: sample gotten out of delay line, and amplified by set gain */ Word32 ivas_rev_delay_line_get_sample_fx( /* Q11 */ ivas_rev_delay_line_t *pDelay /* i/o: the delay line */ @@ -1909,43 +1400,12 @@ void ivas_rev_delay_line_feed_sample_blk_fx( const UWord16 blk_size, /* i : number of samples in the input data block */ Word32 *input /* i : the samples to feed Q11 */ ); -#else -/*! r: sample gotten out of delay line, and amplified by set gain */ -float ivas_rev_delay_line_get_sample( - ivas_rev_delay_line_t *pDelay /* i/o: the delay line */ -); - -void ivas_rev_delay_line_feed_sample( - ivas_rev_delay_line_t *pDelay, /* i : the delay line */ - float input /* i : the sample to feed */ -); - -void ivas_rev_delay_line_get_sample_blk( - ivas_rev_delay_line_t *pDelay, /* i : the delay line */ - const uint16_t blk_size, /* i : number of samples in the data block */ - float *output /* i/o: amples gotten out of delay line, and amplified by set gainin */ -); - -void ivas_rev_delay_line_feed_sample_blk( - ivas_rev_delay_line_t *pDelay, /* i/o: the delay line */ - const uint16_t blk_size, /* i : number of samples in the input data block */ - float *input /* i : the samples to feed */ -); - -void ivas_reverb_iir_filt_2taps_feed_blk( - ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ - const uint16_t blk_size, /* i : size */ - const float *input, /* i : input buffer */ - float *output /* i : output buffer */ -); -#endif void ivas_reverb_iir_filt_init( ivas_rev_iir_filter_t *iirFilter, /* o : IIR filter */ const uint16_t maxTaps /* i : maximum number of filter taps */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_iir_filt_set( ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ UWord16 nr_taps, /* i : number of IIR filter taps */ @@ -1967,28 +1427,10 @@ Word16 ivas_reverb_t2f_f2t_init( const Word16 fft_size, const Word16 block_size ); -#else -void ivas_reverb_iir_filt_set( - ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ - uint16_t nr_taps, /* i : number of IIR filter taps */ - const float *coefA, /* i : A filter coefficients to set */ - const float *coefB /* i : the B filter coefficients to set */ -); - -uint16_t int_log2( - uint32_t powerOf2 -); -int16_t ivas_reverb_t2f_f2t_init( - ivas_reverb_t2f_f2t_t *t2f_f2t, - const int16_t fft_size, - const int16_t block_size -); -#endif void ivas_reverb_t2f_f2t_ClearHistory( ivas_reverb_t2f_f2t_t *t2f_f2t ); -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_t2f_f2t_in_fx( ivas_reverb_t2f_f2t_t *t2f_f2t, Word32 *input_L, // i: Qx @@ -2004,23 +1446,6 @@ void ivas_reverb_t2f_f2t_out_fx( Word32 *output_L, // i/o: Qx Word32 *output_R // i/o: Qx ); -#else -void ivas_reverb_t2f_f2t_in( - ivas_reverb_t2f_f2t_t *t2f_f2t, - float *input_L, - float *input_R, float *buffer_L, - float *buffer_R -); - -void ivas_reverb_t2f_f2t_out( - ivas_reverb_t2f_f2t_t *t2f_f2t, - float *buffer_L, - float *buffer_R, - float *output_L, - float *output_R -); -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_reverb_fft_filter_init( ivas_reverb_fft_filter_t *fft_filter, const Word16 fft_size @@ -2035,16 +1460,6 @@ void ivas_reverb_fft_filter_CrossMix_fx( Word32 *buffer1, // i/o: Qx const Word16 fft_size ); -#else -int16_t ivas_reverb_fft_filter_init( - ivas_reverb_fft_filter_t *fft_filter, - const int16_t fft_size -); -void ivas_reverb_fft_filter_ComplexMul( - ivas_reverb_fft_filter_t *fft_filter, - float *buffer -); -#endif void ivas_reverb_fft_filter_CrossMix( float *buffer0, @@ -2057,7 +1472,6 @@ void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( float *fft_real, const int16_t fft_size ); -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR_fx( rv_fftwf_type_complex_fx *spectrum, // i: Qx Word32 *fft_real, // o: Qx @@ -2068,15 +1482,6 @@ void ivas_reverb_define_window_fft_fx( const Word16 transitionLength, const Word16 spectrumLength ); -#else -void ivas_reverb_define_window_fft( - float *pWindow, - const int16_t transitionStart, - const int16_t transitionLength, - const int16_t spectrumLength -); -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_reverb_calc_color_filters_fx( const Word32 *pTargetL, const Word32 *pTargetR, @@ -2087,18 +1492,6 @@ Word16 ivas_reverb_calc_color_filters_fx( Word16 *q_pBeqL, Word16 *q_pBeqR ); -#else -int16_t ivas_reverb_calc_color_filters( - const float *pTargetL, - const float *pTargetR, - const float *pWindow, - const int16_t fft_size, - const float delay, - rv_fftwf_type_complex *pBeqL, - rv_fftwf_type_complex *pBeqR -); -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_reverb_calc_correl_filters_fx( Word32 *pTargetICC, //input in Q30 const Word32 *pWindow, //input in Q30 @@ -2108,17 +1501,6 @@ Word16 ivas_reverb_calc_correl_filters_fx( Word16 *q_pU, //Output q Word16 *q_pV //output q ); -#else -int16_t ivas_reverb_calc_correl_filters( - const float *pTargetICC, - const float *pWindow, - const int16_t fft_size, - const float delay, - rv_fftwf_type_complex *pU, - rv_fftwf_type_complex *pV -); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_calc_color_levels_fx( const Word32 output_Fs, const Word16 freq_count, @@ -2131,21 +1513,6 @@ void ivas_reverb_calc_color_levels_fx( const Word32 *pT60_filter_coeff, //input in Q31 Word32 *pTarget_color_L, //output in Q30 Word32 *pTarget_color_R); //output in Q30 -#else -void ivas_reverb_calc_color_levels( - const int32_t output_Fs, - const int16_t freq_count, - const int16_t loop_count, - const float *pFc, - const float *pAcoustic_dsr, - const float *pHrtf_avg_pwr_L, - const float *pHrtf_avg_pwr_R, - const int16_t *pLoop_delays, - const float *pT60_filter_coeff, - float *pTarget_color_L, - float *pTarget_color_R -); -#endif ivas_error ivas_reverb_prepare_cldfb_params( IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pInput_params, const HRTFS_FASTCONV_HANDLE hHrtfFastConv, @@ -2154,7 +1521,6 @@ ivas_error ivas_reverb_prepare_cldfb_params( const int32_t output_Fs, float *pOutput_t60, float *pOutput_ene ); -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_interpolate_acoustic_data_fx( const Word16 input_table_size, const Word32 *pInput_fc, //input in Q16 @@ -2167,19 +1533,6 @@ void ivas_reverb_interpolate_acoustic_data_fx( Word16 *pOutput_t60_e, //output e Word16 *pOutput_dsr_e //output e ); -#else -void ivas_reverb_interpolate_acoustic_data( - const int16_t input_table_size, - const float *pInput_fc, - const float *pInput_t60, - const float *pInput_dsrR, - const int16_t output_table_size, - const float *pOutput_fc, - float *pOutput_t60, - float *pOutput_dsr -); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_get_hrtf_set_properties_fx( Word32 **ppHrtf_set_L_re, Word32 **ppHrtf_set_L_im, @@ -2193,21 +1546,6 @@ void ivas_reverb_get_hrtf_set_properties_fx( Word32 *pOut_avg_pwr_R, //output in Q23 Word32 *out_i_a_coherence //output in Q27 ); -#else -void ivas_reverb_get_hrtf_set_properties( - float **ppHrtf_set_L_re, - float **ppHrtf_set_L_im, - float **ppHrtf_set_R_re, - float **ppHrtf_set_R_im, - const AUDIO_CONFIG input_audio_config, - const int16_t hrtf_count, - const int16_t in_freq_count, - const int16_t out_freq_count, - float *pOut_avg_pwr_L, - float *pOut_avg_pwr_R, - float *pOut_i_a_coherence -); -#endif /*---------------------------------------------------------------------------------* * Shoebox Prototypes @@ -2223,16 +1561,6 @@ void ivas_shoebox_init( shoebox_config_t *cal ); -#ifndef IVAS_FLOAT_FIXED -void ivas_shoebox_set_scene ( - shoebox_obj_t *obj, - shoebox_output_t *ER_PARAMS, - const float list_pos[3], - const float src_pos_data[], - const uint16_t isCartesian, - const uint16_t isRelative -); -#else void ivas_shoebox_set_scene ( shoebox_obj_t *obj, @@ -2242,7 +1570,6 @@ void ivas_shoebox_set_scene ( const UWord16 isCartesian, const UWord16 isRelative ); -#endif /*---------------------------------------------------------------------------------* * Early reflections prototypes @@ -2265,7 +1592,6 @@ ivas_error ivas_er_compute_reflections( ivas_error ivas_er_encoder_init( er_struct_t *reflections ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_er_process( er_struct_t *reflections, const Word16 frame_size, @@ -2273,39 +1599,18 @@ ivas_error ivas_er_process( Word32 **io, const AUDIO_CONFIG inConfig ); -#else -ivas_error ivas_er_process( - er_struct_t *reflections, - const int16_t frame_size, - const int16_t subframe_idx, - float **io, - const AUDIO_CONFIG inConfig -); -#endif /*---------------------------------------------------------------------------------* * Rotation Prototypes *-----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_headTrack_open_fx( HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ ); -#else -ivas_error ivas_headTrack_open( - HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_headTrack_close( - HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* i/o: head track handle */ -); -#else void ivas_headTrack_close_fx( HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* i/o: head track handle */ ); -#endif void Euler2Quat( const float yaw, /* i : yaw (x) */ @@ -2313,14 +1618,12 @@ void Euler2Quat( const float roll, /* i : roll (z) */ IVAS_QUATERNION *quat /* o : quaternion describing the rotation */ ); -#ifdef IVAS_FLOAT_FIXED void Euler2Quat_fx( const Word32 yaw, /* i : yaw (x) Q22 */ const Word32 pitch, /* i : pitch (y) Q22 */ const Word32 roll, /* i : roll (z) Q22 */ IVAS_QUATERNION *quat /* o : quaternion describing the rotation */ ); -#endif float deg2rad( float degrees ); @@ -2350,7 +1653,6 @@ void rotateAziEle( float Rmat[3][3], /* i : real-space rotation matrix */ const int16_t isPlanar /* i : is roation planar and elevation meaningless? */ ); -#ifdef IVAS_FLOAT_FIXED void rotateAziEle_fx( Word16 azi_in, /* i : output elevation */ Word16 ele_in, /* i : input elevation */ @@ -2382,14 +1684,6 @@ void SHrotmatgen_fx( Word32 Rmat[3][3], /* i : real-space rotation matrix */ const Word16 order /* i : ambisonics order */ ); -#else -void SHrotmatgen( - float SHrotmat[SBA_NHARM_HOA3][SBA_NHARM_HOA3], /* o : SHD rotation matrix */ - float Rmat[3][3], /* i : real-space rotation matrix */ - const int16_t order /* i : ambisonics order */ -); -#endif -#ifdef IVAS_FLOAT_FIXED void rotateFrame_shd( COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : head and external orientation combined handle */ Word32 *output[], /* i/o: unrotated HOA3 signal buffer in TD */ @@ -2406,65 +1700,18 @@ void rotateFrame_sd( const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ const Word16 subframe_idx /* i : subframe index */ ); -#else - -void rotateFrame_shd( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : head and external orientation combined handle */ - float *output[], /* i/o: unrotated HOA3 signal buffer in TD */ - const int16_t subframe_len, /* i : subframe length per channel */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ - const int16_t subframe_idx /* i : subframe index */ -); -void rotateFrame_sd( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : head and external orientation combined handle */ - float *output[], /* i/o: unrotated SD signal buffer in TD */ - const int16_t subframe_len, /* i : subframe length per channel */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - const int16_t subframe_idx /* i : subframe index */ -); -#endif -#ifdef IVAS_FLOAT_FIXED -void ivas_combined_orientation_update_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const Word16 samples_rendered /* i : samples rendered since the last call */ -); -#else void ivas_combined_orientation_update_index( COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ const Word16 samples_rendered /* i : samples rendered since the last call */ ); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_combined_orientation_update_start_index( COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ const Word16 samples_rendered /* i : samples rendered since the last call */ ); -#else -void ivas_combined_orientation_update_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const int16_t samples_rendered /* i : samples rendered since the last call */ -); - -void ivas_combined_orientation_update_start_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const int16_t samples_rendered /* i : samples rendered since the last call */ -); -#endif void ivas_combined_orientation_set_to_start_index( COMBINED_ORIENTATION_HANDLE hCombinedOrientationData /* i/o: combined orientation handle */ ); -#ifndef IVAS_FLOAT_FIXED -void rotateFrame_shd_cldfb( - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ - float Rmat[3][3], /* i : real-space rotation matrix */ - const int16_t nInChannels, /* i : number of channels */ - const int16_t numTimeSlots, /* i : number of time slots to process */ - const int16_t shd_rot_max_order /* i : split-order rotation method */ -); -#else void rotateFrame_shd_cldfb( Word32 Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ Word32 Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ @@ -2473,18 +1720,6 @@ void rotateFrame_shd_cldfb( const Word16 numTimeSlots, /* i : number of time slots to process */ const Word16 shd_rot_max_order /* i : split-order rotation method */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -void rotateFrame_sd_cldfb( - float Rmat[3][3], /* i : real-space rotation matrix */ - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ - const IVAS_OUTPUT_SETUP_HANDLE hOutputSetup, /* i : output format setup number of channels */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - const int16_t numTimeSlots, /* i : number of time slots to process */ - const int16_t nb_band /* i : number of CLDFB bands to process */ -); -#else void rotateFrame_sd_cldfb_fixed( Word32 Rmat[3][3], /* i : real-space rotation matrix */ Word32 Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ @@ -2494,35 +1729,22 @@ void rotateFrame_sd_cldfb_fixed( const int16_t numTimeSlots, /* i : number of time slots to process */ const int16_t nb_band /* i : number of CLDFB bands to process */ ); -#endif ivas_error ivas_external_orientation_open( EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData, /* o : external orientation handle */ const int16_t num_subframes /* i : number of subframes */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_external_orientation_close( - EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData /* i/o: external orientation handle */ -); -#else void ivas_external_orientation_close_fx( EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData /* i/o: external orientation handle */ ); -#endif ivas_error ivas_combined_orientation_open( COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* o : combined orientation handle */ const int32_t fs, /* i : sampling rate */ const int16_t num_subframes /* i : number of subframes */ ); -#ifndef IVAS_FLOAT_FIXED -void ivas_combined_orientation_close( - COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData /* i/o: combined orientation handle */ -); -#else void ivas_combined_orientation_close_fx( COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData /* i/o: combined orientation handle */ ); -#endif ivas_error combine_external_and_head_orientations_dec( HEAD_TRACK_DATA_HANDLE hHeadTrackData, /* i : head track handle */ EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, /* i : external orientation handle */ @@ -2547,40 +1769,15 @@ void ivas_render_config_close( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_render_config_init_from_rom_fx( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ); -#else -ivas_error ivas_render_config_init_from_rom( - RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ -); -#endif /*----------------------------------------------------------------------------------* * Quaternion operations *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void QuaternionProduct( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2, - IVAS_QUATERNION *const r -); - -void QuaternionInverse( - const IVAS_QUATERNION q, - IVAS_QUATERNION *const r -); - -void QuaternionSlerp( - const IVAS_QUATERNION q1, - const IVAS_QUATERNION q2, - const float t, - IVAS_QUATERNION *const r -); -#else void QuaternionProduct_fx( const IVAS_QUATERNION q1, const IVAS_QUATERNION q2, @@ -2598,7 +1795,6 @@ void QuaternionSlerp_fx( const Word32 t, IVAS_QUATERNION *const r ); -#endif /*----------------------------------------------------------------------------------* * Orientation tracking @@ -2618,18 +1814,6 @@ ivas_error ivas_orient_trk_SetReferenceRotation( const IVAS_QUATERNION refRot /* i : reference rotation */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_orient_trk_SetReferenceVector( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - const IVAS_VECTOR3 listenerPos, /* i : Listener position */ - const IVAS_VECTOR3 refPos /* i : Reference position */ -); - -ivas_error ivas_orient_trk_GetMainOrientation( - ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ - IVAS_QUATERNION *pOrientation /* i/o: average/reference orientation */ -); -#endif ivas_error ivas_orient_trk_GetTrackedRotation( ivas_orient_trk_state_t *pOTR, /* i/o: orientation tracker handle */ @@ -2643,7 +1827,6 @@ ivas_error ivas_orient_trk_Process( IVAS_QUATERNION *pTrkRot /* o : tracked rotation */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_orient_trk_Init_fx( ivas_orient_trk_state_t *pOTR /* i/o: orientation tracker handle */ @@ -2681,7 +1864,6 @@ ivas_error ivas_orient_trk_Process_fx( Word32 updateRate_fx, /* i : rotation update rate [Hz] */ IVAS_QUATERNION *pTrkRot /* o : tracked rotation */ ); -#endif /*----------------------------------------------------------------------------------* * Rendering & merging to MASA format @@ -2692,7 +1874,6 @@ ivas_error ivas_mcmasa_ana_open( const AUDIO_CONFIG inConfig, /* i : Input config */ int32_t input_Fs /* i : Sampling frequency */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_mcmasa_ana_fx( MCMASA_ANA_HANDLE hMcMasa, /* i/o: McMASA encoder handle */ Word32 data[][L_FRAME48k], /* i/o: Input / transport audio signals */ @@ -2701,33 +1882,16 @@ void ivas_mcmasa_ana_fx( const Word16 nchan_transport, /* i : Number of transport channels */ const Word16 nchan_inp /* i : Number of input channels */ ); -#else -void ivas_mcmasa_ana( - MCMASA_ANA_HANDLE hMcMasa, /* i/o: McMASA encoder handle */ - float data_f[][L_FRAME48k], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport, /* i : Number of transport channels */ - const int16_t nchan_inp /* i : Number of input channels */ -); -#endif // IVAS_FLOAT_FIXED void ivas_mcmasa_ana_close( MCMASA_ANA_HANDLE *hMcMasa /* i/o: analysis McMASA handle */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_omasa_ana_open( OMASA_ANA_HANDLE *hOMasaPtr, /* i/o: OMASA data handle pointer */ Word32 input_Fs, /* i : Sampling frequency */ UWord16 total_num_objects /* i : Number of objects */ ); -#else -ivas_error ivas_omasa_ana_open( - OMASA_ANA_HANDLE *hOMasaPtr, /* i/o: OMASA data handle pointer */ - int32_t input_Fs, /* i : Sampling frequency */ - uint16_t total_num_objects /* i : Number of objects */ -); -#endif void ivas_omasa_ana( OMASA_ANA_HANDLE hOMasa, /* i/o: OMASA analysis handle */ @@ -2737,7 +1901,6 @@ void ivas_omasa_ana( const int16_t nchan_ism /* i : Number of objects for parameter analysis*/ ); -#ifdef IVAS_FLOAT_FIXED void ivas_omasa_ana_fx( OMASA_ANA_HANDLE hOMasa, /* i/o: OMASA analysis handle */ Word32 data_in_f_fx[][L_FRAME48k], /* i/o: Input / transport audio signals */ @@ -2746,12 +1909,10 @@ void ivas_omasa_ana_fx( const Word16 nchan_transport, /* i : Number of transport channels */ const Word16 nchan_ism /* i : Number of objects for parameter analysis*/ ); -#endif void ivas_omasa_ana_close( OMASA_ANA_HANDLE *hOMasa /* i/o: analysis OMASA handle */ ); -#ifdef IVAS_FLOAT_FIXED void computeIntensityVector_ana_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal Qx */ @@ -2759,7 +1920,6 @@ void computeIntensityVector_ana_fx( const Word16 num_frequency_bands, /* i : Number of frequency bands */ Word32 intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] /* o : Intensity vector 2 * Qx -31 */ ); -#endif void computeIntensityVector_ana( const int16_t *band_grouping, /* i : Band grouping for estimation */ float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ @@ -2767,7 +1927,6 @@ void computeIntensityVector_ana( const int16_t num_frequency_bands, /* i : Number of frequency bands */ float intensity_real[DIRAC_NUM_DIMS][MASA_FREQUENCY_BANDS] /* o : Intensity vector */ ); -#ifdef IVAS_FLOAT_FIXED void computeReferencePower_ana_fx( const Word16 *band_grouping, /* i : Band grouping for estimation */ Word32 Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal input_q */ @@ -2775,7 +1934,6 @@ void computeReferencePower_ana_fx( Word32 *reference_power, /* o : Estimated power */ const Word16 num_freq_bands /* i : Number of frequency bands 2 * input_q - 31 */ ); -#endif void computeReferencePower_ana( const int16_t *band_grouping, /* i : Band grouping for estimation */ float Cldfb_RealBuffer[FOA_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* i : Real part of input signal */ @@ -2784,7 +1942,6 @@ void computeReferencePower_ana( const int16_t num_freq_bands /* i : Number of frequency bands */ ); -#ifdef IVAS_FLOAT_FIXED void ivas_create_masa_out_meta_fx( MASA_DECODER_EXT_OUT_META_HANDLE extOutMeta, /* i/o: MASA metadata handle */ SPHERICAL_GRID_DATA *Sph_Grid16, /* i : Spherical grid */ @@ -2798,7 +1955,6 @@ void ivas_create_masa_out_meta_fx( Word16 spreadCoherence_q, Word16 surroundingCoherence_q ); -#endif void ivas_create_masa_out_meta( MASA_DECODER_EXT_OUT_META_HANDLE extOutMeta, /* i/o: MASA metadata handle */ @@ -2811,55 +1967,22 @@ void ivas_create_masa_out_meta( float surroundingCoherence[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : Estimated surround coherence */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_dirac_ana_open_fx( DIRAC_ANA_HANDLE *hDirACPtr, /* i/o: DIRAC data handle pointer */ Word32 input_Fs ); -#else -ivas_error ivas_dirac_ana_open( - DIRAC_ANA_HANDLE *hDirACPtr, /* i/o: DIRAC data handle pointer */ - int32_t input_Fs -); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_ana_fx( DIRAC_ANA_HANDLE hDirAC, /* i/o: DIRAC analysis handle */ Word32 data_in_fx[][L_FRAME48k], /* i/o: Input / transport audio signals, Q7 */ const Word16 input_frame, /* i : Input frame size */ const Word16 nchan_transport /* i : Number of transport channels */ ); -#else -void ivas_dirac_ana( - DIRAC_ANA_HANDLE hDirAC, /* i/o: DIRAC analysis handle */ - float data_in_f[][L_FRAME48k], /* i/o: Input / transport audio signals */ - const int16_t input_frame, /* i : Input frame size */ - const int16_t nchan_transport /* i : Number of transport channels */ -); -#endif -#ifdef IVAS_FLOAT_FIXED void ivas_dirac_ana_close_fx( DIRAC_ANA_HANDLE ( *hDirAC ) /* i/o: analysis DIRAC handle */ ); -#else -void ivas_dirac_ana_close( - DIRAC_ANA_HANDLE ( *hDirAC ) /* i/o: analysis DIRAC handle */ -); -#endif -#ifndef IVAS_FLOAT_FIXED -void ivas_prerend_merge_masa_metadata( - MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ - IVAS_REND_AudioConfigType inType1, /* i : Type of input 1 */ - float inEne1[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i/o: TF-energy of input 1. after merge, contains the energy of the merged signal */ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta2, /* i : Input metadata 2 */ - IVAS_REND_AudioConfigType inType2, /* i : Type of input 2 */ - float inEne2[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS] /* i : TF-energy of input 2 */ -); -#else void ivas_prerend_merge_masa_metadata_fx( MASA_DECODER_EXT_OUT_META_HANDLE outMeta, /* o : Merged metadata output */ MASA_DECODER_EXT_OUT_META_HANDLE inMeta1, /* i : Input metadata 1 */ @@ -2871,36 +1994,20 @@ void ivas_prerend_merge_masa_metadata_fx( Word32 inEne2_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], /* i : TF-energy of input 2 */ Word16 *inEne2_e /* i : TF-energy of input 2 Exponent */ ); -#endif void copy_masa_descriptive_meta( MASA_DECRIPTIVE_META *outMeta, /* o : metadata to be written */ MASA_DECRIPTIVE_META *inMeta /* i : input metadata */ ); -#ifndef IVAS_FLOAT_FIXED -ivas_error masaPrerendOpen( - MASA_PREREND_HANDLE *hMasaPrerendPtr, /* o : handle to the opened prerenderer */ - int16_t numTransports, /* i : number of transport channels */ - int32_t input_Fs /* i : signal sampling rate */ -); - -#else ivas_error masaPrerendOpen_fx( MASA_PREREND_HANDLE *hMasaPrerendPtr, /* o : handle to the opened prerenderer */ Word16 numTransports, /* i : number of transport channels */ Word32 input_Fs /* i : signal sampling rate */ ); -#endif -#ifndef IVAS_FLOAT_FIXED -void masaPrerendClose( - MASA_PREREND_HANDLE *hMasaPrerendPtr /* i/o: prerenderer handle to be closed */ -); -#else void masaPrerendClose_fx( MASA_PREREND_HANDLE *hMasaPrerendPtr /* i/o: prerenderer handle to be closed */ ); -#endif /* clang-format on */ diff --git a/lib_rend/ivas_reflections.c b/lib_rend/ivas_reflections.c index 5ea7dad8e..c5d118858 100644 --- a/lib_rend/ivas_reflections.c +++ b/lib_rend/ivas_reflections.c @@ -42,13 +42,9 @@ #include "ivas_prot.h" #include "ivas_rom_com.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "debug.h" -#endif -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*-----------------------------------------------------------------------------------------* * Local constants/tabels @@ -56,7 +52,6 @@ #define ER_NUM_REF 6 -#ifdef IVAS_FLOAT_FIXED static UWord16 LC_mixing_5_1[5] = { 0, 1, 2, 0, 1 }; static UWord16 LC_mixing_7_1[7] = { 0, 1, 2, 3, 4, 3, 4 }; @@ -66,17 +61,6 @@ static UWord16 LC_mixing_5_1_2[7] = { 0, 1, 2, 3, 4, 0, 1 }; static UWord16 LC_mixing_5_1_4[9] = { 0, 1, 2, 3, 4, 0, 1, 2, 3 }; static UWord16 LC_mixing_7_1_4[11] = { 0, 1, 2, 3, 4, 3, 4, 0, 1, 2, 3 }; -#else -static uint16_t LC_mixing_5_1[5] = { 0, 1, 2, 0, 1 }; - -static uint16_t LC_mixing_7_1[7] = { 0, 1, 2, 3, 4, 3, 4 }; - -static uint16_t LC_mixing_5_1_2[7] = { 0, 1, 2, 3, 4, 0, 1 }; - -static uint16_t LC_mixing_5_1_4[9] = { 0, 1, 2, 3, 4, 0, 1, 2, 3 }; - -static uint16_t LC_mixing_7_1_4[11] = { 0, 1, 2, 3, 4, 3, 4, 0, 1, 2, 3 }; -#endif /*-----------------------------------------------------------------------------------------* @@ -84,68 +68,6 @@ static uint16_t LC_mixing_7_1_4[11] = { 0, 1, 2, 3, 4, 3, 4, 0, 1, 2, 3 }; * * Initializes the reflections data structure according to the requested input config. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_er_init( - er_struct_t *reflections, - const AUDIO_CONFIG inConfig ) -{ - ivas_error error; - uint8_t i; - - /* Set to defaults for shoebox */ - reflections->is_ready = 0; - reflections->audio_config = IVAS_AUDIO_CONFIG_INVALID; - reflections->is_cartesian = 0; - reflections->is_relative = 1; - reflections->shoebox_data.n_ref = ER_NUM_REF; - reflections->user_origin[0] = 0.0f; - reflections->user_origin[1] = 0.0f; - reflections->user_origin[2] = ER_LIST_HEIGHT; - - /* Store scene origin if present */ - for ( i = 0; i < 3; i++ ) - { - reflections->user_origin[i] = reflections->shoebox_lib.cal.list_orig[i]; - } - - /* Init Shoebox */ - ivas_shoebox_init( &reflections->shoebox_lib, &reflections->shoebox_lib.cal ); - - /* Set mode */ - if ( ( error = ivas_er_set_reflections_mode( reflections, inConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Compute the static reflections (first frame) */ - if ( ( error = ivas_er_compute_reflections( reflections ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( reflections->closest_ch_idx = (uint16_t *) malloc( reflections->n_total_reflections * sizeof( uint16_t ) ) ) == NULL ) - { - return IVAS_ERR_FAILED_ALLOC; - } - set_s( (int16_t *) reflections->closest_ch_idx, 0, reflections->n_total_reflections ); - - if ( ( error = getAudioConfigNumChannels( reflections->audio_config, &( reflections->nchan_out ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Initialize Encoder */ - if ( ( error = ivas_er_encoder_init( reflections ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Update flag to indicate that reflection module is ready to process */ - reflections->is_ready = 1; - - return error; -} -#else ivas_error ivas_er_init( er_struct_t *reflections, const AUDIO_CONFIG inConfig ) @@ -211,7 +133,6 @@ ivas_error ivas_er_init( return error; } -#endif /*-----------------------------------------------------------------------------------------* @@ -220,7 +141,6 @@ ivas_error ivas_er_init( Function sets the ER source positions based on the audio config *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_er_set_reflections_mode( er_struct_t *reflections, const AUDIO_CONFIG inConfig ) @@ -379,119 +299,6 @@ ivas_error ivas_er_set_reflections_mode( return error; } -#else -ivas_error ivas_er_set_reflections_mode( - er_struct_t *reflections, - const AUDIO_CONFIG inConfig ) -{ - ivas_error error; - uint16_t ch; - error = IVAS_ERR_OK; - - if ( reflections->audio_config == inConfig ) - { - return error; - } - - reflections->is_ready = 0; - reflections->audio_config = inConfig; - - switch ( reflections->audio_config ) - { - case IVAS_AUDIO_CONFIG_MONO: - reflections->shoebox_data.n_sources = 1; - reflections->n_LC_sources = 1; - reflections->LC_mixing = LC_mixing_5_1; - - reflections->source_positions[0] = 0; - reflections->source_positions[1] = 0; - reflections->source_positions[2] = ER_RADIUS; - - break; - case IVAS_AUDIO_CONFIG_STEREO: - reflections->shoebox_data.n_sources = 2; - reflections->n_LC_sources = 2; - reflections->LC_mixing = LC_mixing_5_1; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP2[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP2[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_5_1: - reflections->shoebox_data.n_sources = 5; - reflections->n_LC_sources = 3; - reflections->LC_mixing = LC_mixing_5_1; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP6[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP6[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_7_1: - reflections->shoebox_data.n_sources = 7; - reflections->n_LC_sources = 5; - reflections->LC_mixing = LC_mixing_7_1; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP12[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP12[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_5_1_2: - reflections->shoebox_data.n_sources = 7; - reflections->n_LC_sources = 5; - reflections->LC_mixing = LC_mixing_5_1_2; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP14[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP14[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_5_1_4: - reflections->shoebox_data.n_sources = 9; - reflections->n_LC_sources = 5; - reflections->LC_mixing = LC_mixing_5_1_4; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP16[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP16[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_7_1_4: - reflections->shoebox_data.n_sources = 11; - reflections->n_LC_sources = 5; - reflections->LC_mixing = LC_mixing_7_1_4; - for ( ch = 0; ch < reflections->shoebox_data.n_sources; ch++ ) - { - reflections->source_positions[3 * ch] = deg2rad( ls_azimuth_CICP19[ch] ); - reflections->source_positions[1 + ( 3 * ch )] = deg2rad( ls_elevation_CICP19[ch] ); - reflections->source_positions[2 + ( 3 * ch )] = ER_RADIUS; - } - break; - case IVAS_AUDIO_CONFIG_HOA3: - reflections->use_er = 0; - break; - case IVAS_AUDIO_CONFIG_HOA2: - reflections->use_er = 0; - break; - case IVAS_AUDIO_CONFIG_FOA: - reflections->use_er = 0; - break; - default: - reflections->audio_config = IVAS_AUDIO_CONFIG_INVALID; - return IVAS_ERROR( IVAS_ERR_INVALID_ER_PARAM, "Unsupported reflections mode" ); - } - - return error; -} - -#endif /*-----------------------------------------------------------------------------------------* @@ -499,74 +306,6 @@ ivas_error ivas_er_set_reflections_mode( Function that initializes the er encoder *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_er_encoder_init( - er_struct_t *reflections ) -{ - ivas_error error = IVAS_ERR_OK; - uint16_t i, j, src_idx; - uint16_t min_index = 0; - float p_x, p_y, p_z; - float p_x_src, p_y_src, p_z_src; - float tmp; - float dist, min_dist = 0; - - if ( !reflections ) - { - return IVAS_ERR_FAILED_ALLOC; - } - - if ( getAudioConfigType( reflections->audio_config ) == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - /* Compute MC-snap location (closest channel position to reflection direction) */ - for ( i = 0; i < reflections->n_total_reflections; i++ ) - { - /* Compute cartesian points for reflection (from degrees) */ - p_x = ER_RADIUS * ( cosf( deg2rad( reflections->shoebox_data.el_angle.data[i] ) ) * cosf( deg2rad( reflections->shoebox_data.az_angle.data[i] ) ) ); - p_y = ER_RADIUS * ( cosf( deg2rad( reflections->shoebox_data.el_angle.data[i] ) ) * sinf( deg2rad( reflections->shoebox_data.az_angle.data[i] ) ) ); - p_z = ER_RADIUS * ( sinf( deg2rad( reflections->shoebox_data.el_angle.data[i] ) ) ); - - /* Calculate the euclidean distance to each point in the config ls setup */ - for ( j = 0; j < reflections->nchan_out; j++ ) - { - /* Ignore LFE */ - if ( j != LFE_CHANNEL ) - { - src_idx = ( j > LFE_CHANNEL ) ? j - 1 : j; - - p_x_src = reflections->source_positions[src_idx * 3 + 2] * ( cosf( reflections->source_positions[src_idx * 3 + 1] ) * cosf( reflections->source_positions[src_idx * 3] ) ); - p_y_src = reflections->source_positions[src_idx * 3 + 2] * ( cosf( reflections->source_positions[src_idx * 3 + 1] ) * sinf( reflections->source_positions[src_idx * 3] ) ); - p_z_src = reflections->source_positions[src_idx * 3 + 2] * sinf( reflections->source_positions[src_idx * 3 + 1] ); - - tmp = ( p_x_src - p_x ) * ( p_x_src - p_x ); - tmp += ( p_y_src - p_y ) * ( p_y_src - p_y ); - tmp += ( p_z_src - p_z ) * ( p_z_src - p_z ); - dist = sqrtf( tmp ); - - /* Save index of closest channel */ - if ( src_idx == 0 ) - { - min_dist = dist; - min_index = j; - } - else - { - if ( dist < min_dist ) - { - min_dist = dist; - min_index = j; - } - } - } - } - - reflections->closest_ch_idx[i] = (uint16_t) min_index; - } - } - - return error; -} -#else ivas_error ivas_er_encoder_init( er_struct_t *reflections ) @@ -718,7 +457,6 @@ ivas_error ivas_er_encoder_init( return error; } -#endif /*-----------------------------------------------------------------------------------------* Function ivas_er_compute_reflections() @@ -726,7 +464,6 @@ ivas_error ivas_er_encoder_init( Function computes reflections using the shoebox library and sets up the circular buffers structure for the early reflections process *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_er_compute_reflections( er_struct_t *reflections ) { @@ -835,95 +572,6 @@ ivas_error ivas_er_compute_reflections( return error; } -#else -ivas_error ivas_er_compute_reflections( - er_struct_t *reflections ) -{ - ivas_error error = IVAS_ERR_OK; - uint16_t circ_len, i, j; - float tmp; - - reflections->is_ready = 0; - - /* Disabled case */ - if ( reflections->audio_config == IVAS_AUDIO_CONFIG_INVALID ) - { - return error; - } - - /* Run shoebox with current reflection parameters */ - ivas_shoebox_set_scene( &( reflections->shoebox_lib ), &( reflections->shoebox_data ), reflections->shoebox_lib.cal.list_orig, - reflections->source_positions, reflections->is_cartesian, reflections->is_relative ); - - /* Convert reflection times in seconds to samples and keep track of max */ - circ_len = 0; - for ( i = 0; i < reflections->shoebox_data.n_sources; i++ ) - { - for ( j = 0; j < reflections->shoebox_data.n_ref; j++ ) - { - tmp = reflections->shoebox_data.times.data[j + ( i * reflections->shoebox_data.n_ref )]; - tmp = roundf( tmp * reflections->output_Fs ); - reflections->shoebox_data.times.data[j + ( i * reflections->shoebox_data.n_ref )] = tmp; - circ_len = ( (uint16_t) tmp > circ_len ) ? (uint16_t) tmp : circ_len; - } - } - - /* If max delay is less than max frame size, use max frame size to compute circ buffer length */ - circ_len = ( circ_len > (uint16_t) reflections->max_frame_size ) ? circ_len : (uint16_t) reflections->max_frame_size; - circ_len += (uint16_t) reflections->max_frame_size; - - /* If circ buffers exist and size is the same, reset memory to all zeros */ - /* If size is different, reallocate circ buffers */ - /* Otherwise allocate new circ buffers */ - if ( reflections->circ_buffers ) - { - if ( reflections->circ_len == circ_len ) - { - /* circ buffers exist and size is the same */ - set_f( reflections->circ_buffers, 0.0f, reflections->shoebox_data.n_sources * reflections->circ_len ); - } - else - { - /* circ buffers exist but size is different */ - reflections->circ_len = circ_len; - free( reflections->circ_buffers ); - if ( ( reflections->circ_buffers = (float *) malloc( reflections->shoebox_data.n_sources * reflections->circ_len * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Early Reflections buffers" ); - } - set_f( reflections->circ_buffers, 0.0f, reflections->shoebox_data.n_sources * reflections->circ_len ); - } - } - else - { - /* circ buffers do not exist */ - reflections->circ_len = circ_len; - if ( ( reflections->circ_buffers = (float *) malloc( reflections->shoebox_data.n_sources * reflections->circ_len * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Early Reflections buffers" ); - } - set_f( reflections->circ_buffers, 0.0f, reflections->shoebox_data.n_sources * reflections->circ_len ); - } - - - /* Initialize circular buffer insertion point */ - reflections->circ_insert = reflections->circ_len - (uint16_t) reflections->max_frame_size; - - /* Get total reflections number */ - reflections->n_total_reflections = reflections->shoebox_data.n_sources * reflections->shoebox_data.n_ref; - - /* Check that reflection buffers were allocated */ - if ( error != IVAS_ERR_OK ) - { - return error; - } - - return error; -} - -#endif - -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* Function ivas_er_process() @@ -1088,135 +736,3 @@ ivas_error ivas_er_process( move16(); return error; } -#else - -/*-----------------------------------------------------------------------------------------* -Function ivas_er_process() - -Takes a buffer of N channels, returns a buffer of N*6 channels containing the early -reflections (one per wall). The process is a delay line architecture -*-----------------------------------------------------------------------------------------*/ - - -ivas_error ivas_er_process( - er_struct_t *reflections, - const int16_t subframe_size, - const int16_t subframe_idx, - float **io, - const AUDIO_CONFIG inConfig ) -{ - ivas_error error = IVAS_ERR_OK; - uint16_t i, j, k, subframe_offset; - uint16_t ref_no, ref_delay; - uint16_t n_ref_sources, n_ref; - int16_t samp_idx, in_ch_idx, buf_ch_idx, ref_out_idx; - float ref_gain; - float *buffer_ch; - - if ( !reflections ) - { - return IVAS_ERR_INIT_ERROR; - } - - /* should not arrive here if reflections are disabled but in case it does just do nothing */ - if ( reflections->use_er != 1 ) - { - return error; - } - - /* Ensure all reflection memory is allocated */ - if ( !reflections->circ_buffers || !reflections->is_ready ) - { - return IVAS_ERR_INIT_ERROR; - } - - subframe_offset = subframe_idx * subframe_size; - n_ref = reflections->shoebox_data.n_ref; - - /* If low complexity ER are requested only compute ER for n_LC_sources */ - if ( reflections->lowComplexity ) - { - n_ref_sources = reflections->n_LC_sources; - } - else - { - n_ref_sources = reflections->shoebox_data.n_sources; - } - - /* Channel case, copy input into buffers panning for LC mode and skipping LFE */ - if ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - /* Loop through all input sources filling circular buffers */ - for ( i = 0; i < reflections->shoebox_data.n_sources; i++ ) - { - /* Pull correct circular buffer depending on complexity mode */ - buf_ch_idx = ( reflections->lowComplexity == 1 ) ? reflections->LC_mixing[i] : i; - buffer_ch = &( reflections->circ_buffers[buf_ch_idx * reflections->circ_len] ); - - /* Skip LFE from input buffer */ - in_ch_idx = ( i >= LFE_CHANNEL ) ? i + 1 : i; - samp_idx = reflections->circ_insert; - - /* If less than number of reflection sources, overwrite buffer */ - if ( i == buf_ch_idx ) - { - for ( j = 0; j < subframe_size; j++ ) - { - buffer_ch[samp_idx++] = io[in_ch_idx][j + subframe_offset]; - samp_idx = samp_idx % reflections->circ_len; - } - } - /* Accumulate with buffer for low complexity mixed sources */ - else - { - for ( j = 0; j < subframe_size; j++ ) - { - buffer_ch[samp_idx++] += io[in_ch_idx][j + subframe_offset]; - samp_idx = samp_idx % reflections->circ_len; - } - } - } - } - else - { - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - - /* Loop through sources retrieve reflections from circ buffers */ - for ( i = 0; i < n_ref_sources; i++ ) - { - /* Access correct row of input circ buffer */ - buffer_ch = &( reflections->circ_buffers[i * reflections->circ_len] ); - - /* Loop through reflections */ - for ( j = 0; j < n_ref; j++ ) - { - ref_no = j + ( i * n_ref ); - ref_gain = reflections->shoebox_data.gains.data[ref_no]; - ref_delay = (uint16_t) reflections->shoebox_data.times.data[ref_no]; - ref_out_idx = reflections->closest_ch_idx[ref_no]; - - /* Determine start idx of reflection in circ buffer based on - current insert idx and reflection delay */ - samp_idx = (int16_t) reflections->circ_insert - ref_delay; - if ( samp_idx < 0 ) - { - samp_idx = (int16_t) reflections->circ_len + samp_idx; - } - - /* Pull reflection from circ buffer and apply gain */ - for ( k = 0; k < subframe_size; k++ ) - { - io[ref_out_idx][k + subframe_offset] += buffer_ch[samp_idx++] * ref_gain; - samp_idx = samp_idx % reflections->circ_len; - } - } - } - - /* Increment circular buffer start index */ - reflections->circ_insert = ( reflections->circ_insert + subframe_size ) % reflections->circ_len; - - return error; -} - -#endif diff --git a/lib_rend/ivas_render_config.c b/lib_rend/ivas_render_config.c index 0f7db9339..d35a6c005 100644 --- a/lib_rend/ivas_render_config.c +++ b/lib_rend/ivas_render_config.c @@ -57,7 +57,6 @@ * Allocates the renderer configuration structure *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_render_config_open( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ) @@ -70,20 +69,6 @@ ivas_error ivas_render_config_open( return IVAS_ERR_OK; } -#else -ivas_error ivas_render_config_open( - RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ -) -{ - /* Allocate HR filter set for headphones configuration */ - if ( ( *hRenderConfig = (RENDER_CONFIG_HANDLE) malloc( sizeof( RENDER_CONFIG_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for renderer configuration!" ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -92,7 +77,6 @@ ivas_error ivas_render_config_open( * Deallocates the renderer configuration structure *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_render_config_close( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ) @@ -108,22 +92,6 @@ void ivas_render_config_close( return; } -#else -void ivas_render_config_close( - RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ -) -{ - if ( hRenderConfig == NULL || *hRenderConfig == NULL ) - { - return; - } - - free( *hRenderConfig ); - *hRenderConfig = NULL; - - return; -} -#endif /*-------------------------------------------------------------------* @@ -132,7 +100,6 @@ void ivas_render_config_close( * Initializes the renderer configuration structure from ROM *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_render_config_init_from_rom_fx( RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ ) @@ -173,37 +140,3 @@ ivas_error ivas_render_config_init_from_rom_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_render_config_init_from_rom( - RENDER_CONFIG_HANDLE *hRenderConfig /* i/o: Renderer config handle */ -) -{ - int16_t i; - - if ( hRenderConfig == NULL || *hRenderConfig == NULL ) - { - return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Unexpected null pointer while attempting to fill renderer configuration from ROM" ); - } - ( *hRenderConfig )->roomAcoustics.override = FALSE; - ( *hRenderConfig )->roomAcoustics.nBands = IVAS_REVERB_DEFAULT_N_BANDS; - ( *hRenderConfig )->roomAcoustics.acousticPreDelay = IVAS_REVERB_DEFAULT_PRE_DELAY; - ( *hRenderConfig )->roomAcoustics.inputPreDelay = IVAS_REVERB_DEFAULT_INPUT_DELAY; - ( *hRenderConfig )->roomAcoustics.use_er = IVAS_REVERB_DEFAULT_USE_ER; - set_zero( &( *hRenderConfig )->roomAcoustics.pFc_input[0], CLDFB_NO_CHANNELS_MAX ); - set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_rt60[0], CLDFB_NO_CHANNELS_MAX ); - set_zero( &( *hRenderConfig )->roomAcoustics.pAcoustic_dsr[0], CLDFB_NO_CHANNELS_MAX ); - - mvr2r( ivas_reverb_default_fc, ( *hRenderConfig )->roomAcoustics.pFc_input, IVAS_REVERB_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_default_RT60, ( *hRenderConfig )->roomAcoustics.pAcoustic_rt60, IVAS_REVERB_DEFAULT_N_BANDS ); - mvr2r( ivas_reverb_default_DSR, ( *hRenderConfig )->roomAcoustics.pAcoustic_dsr, IVAS_REVERB_DEFAULT_N_BANDS ); - - for ( i = 0; i < MAX_NUM_OBJECTS; i++ ) - { - ( *hRenderConfig )->directivity[i_mult( i, 3 )] = 360.0f; /* Front cone */ - ( *hRenderConfig )->directivity[add( i_mult( i, 3 ), 1 )] = 360.0f; /* Back cone */ - ( *hRenderConfig )->directivity[add( i_mult( i, 3 ), 2 )] = 1.0f; /* Back attenuation */ - } - - return IVAS_ERR_OK; -} -#endif diff --git a/lib_rend/ivas_reverb.c b/lib_rend/ivas_reverb.c index ae388897f..c70e325e3 100644 --- a/lib_rend/ivas_reverb.c +++ b/lib_rend/ivas_reverb.c @@ -39,7 +39,6 @@ #include "ivas_rom_rend.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "debug.h" #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) @@ -64,7 +63,6 @@ static Word16 wrap_rad_fixed( return extract_l( L_tmp ); } -#endif /* The reverberator structure implemented here is described in detail in: * Vilkamo, J., Neugebauer, B., & Plogsties, J. (2012). Sparse frequency-domain reverberator. @@ -80,16 +78,14 @@ static Word16 wrap_rad_fixed( #define INNER_BLK_SIZE 80 /* size of data blocks used for more efficient delay line and IIR filter processing */ /* should be a divisor of the frame length at any sampling rate and an even number*/ -#define FFT_FILTER_WND_FLAT_REGION ( 0.40f ) /* flat section (==1) length of FFT filter window, in proportion to overlap */ -#define FFT_FILTER_WND_TRANS_REGION ( 0.15f ) /* transition (1->0) length of FFT filter window, in proportion to overlap */ -#ifdef IVAS_FLOAT_FIXED +#define FFT_FILTER_WND_FLAT_REGION ( 0.40f ) /* flat section (==1) length of FFT filter window, in proportion to overlap */ +#define FFT_FILTER_WND_TRANS_REGION ( 0.15f ) /* transition (1->0) length of FFT filter window, in proportion to overlap */ #define FFT_FILTER_WND_FLAT_REGION_FX ( 26214 ) /*Q16 flat section (==1) length of FFT filter window, in proportion to overlap */ #define FFT_FILTER_WND_TRANS_REGION_FX ( 9830 ) /*Q16 transition (1->0) length of FFT filter window, in proportion to overlap */ -#endif // IVAS_FLOAT_FIXED -#define REF_LF_MIN ( 100.0f ) -#define REF_LF_MAX ( 250.0f ) -#define REF_HF_MIN ( 5000.0f ) -#define REF_HF_MAX ( 7950.0f ) +#define REF_LF_MIN ( 100.0f ) +#define REF_LF_MAX ( 250.0f ) +#define REF_HF_MIN ( 5000.0f ) +#define REF_HF_MAX ( 7950.0f ) #define REF_LF_MIN_FX ( 100 ) #define REF_LF_MAX_FX ( 250 ) @@ -97,10 +93,8 @@ static Word16 wrap_rad_fixed( #define REF_HF_MAX_FX ( 7950 ) #define LF_BIAS ( 0.5f ) -#define DEFAULT_SRC_DIST ( 1.5f ) /* default source distance [m] for reverb dmx factor computing */ -#ifdef IVAS_FLOAT_FIXED -#define DMX_GAIN ( 1410542208 ) -#endif +#define DEFAULT_SRC_DIST ( 1.5f ) /* default source distance [m] for reverb dmx factor computing */ +#define DMX_GAIN ( 1410542208 ) #define IVAS_REVERB_FFT_SIZE_48K ( 512 ) #define IVAS_REVERB_FFT_SIZE_32K ( 512 ) #define IVAS_REVERB_FFT_SIZE_16K ( 256 ) @@ -110,22 +104,14 @@ static Word16 wrap_rad_fixed( #define MAX_NR_OUTPUTS ( 2 ) -#ifdef IVAS_FLOAT_FIXED const Word16 init_loop_delay[IVAS_REV_MAX_NR_BRANCHES] = { 37, 31, 29, 23, 19, 17, 13, 11 }; const Word16 default_loop_delay_48k[IVAS_REV_MAX_NR_BRANCHES] = { 2309, 1861, 1523, 1259, 1069, 919, 809, 719 }; const Word16 default_loop_delay_32k[IVAS_REV_MAX_NR_BRANCHES] = { 1531, 1237, 1013, 839, 709, 613, 541, 479 }; const Word16 default_loop_delay_16k[IVAS_REV_MAX_NR_BRANCHES] = { 769, 619, 509, 421, 353, 307, 269, 239 }; -#else -const int16_t init_loop_delay[IVAS_REV_MAX_NR_BRANCHES] = { 37, 31, 29, 23, 19, 17, 13, 11 }; -const int16_t default_loop_delay_48k[IVAS_REV_MAX_NR_BRANCHES] = { 2309, 1861, 1523, 1259, 1069, 919, 809, 719 }; -const int16_t default_loop_delay_32k[IVAS_REV_MAX_NR_BRANCHES] = { 1531, 1237, 1013, 839, 709, 613, 541, 479 }; -const int16_t default_loop_delay_16k[IVAS_REV_MAX_NR_BRANCHES] = { 769, 619, 509, 421, 353, 307, 269, 239 }; -#endif /*------------------------------------------------------------------------------------------* * Local Struct definition *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_reverb_params_t { Word16 pre_delay; /* Delay of the FDC reverb, first peak after pre_delay samples. Note that */ @@ -139,21 +125,17 @@ typedef struct ivas_reverb_params_t Word16 pLoop_extract_matrix_fx[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES]; /* Mix [S][L] matrix from feedback loops to outputs. */ /* In Matlab: [S x L] - Currently S=2, later may be more than 2 for speaker playback. */ Word16 t60_filter_order; /* Filter order (length of vector) */ // float pT60_filter_coeff[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES * IVAS_REV_MAX_IIR_FILTER_LENGTH]; /* Filters [][] in feedback loops, controlling T60. */ -#ifdef IVAS_FLOAT_FIXED Word16 pT60_filter_coeff_fx[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES * IVAS_REV_MAX_IIR_FILTER_LENGTH]; -#endif /* In Matlab: IIR: [(2 * L) x ( + 1)] (odd: b-vector, even: a-vector) */ /* In Matlab: FIR: [L x ] */ // float *pFc; /* Center frequencies for FFT filter design */ // float *pRt60; /* RT60 values at these frequencies */ // float *pDsr; /* DSR values at these frequencies */ -#ifdef IVAS_FLOAT_FIXED Word32 *pFc_fx; /* Center frequencies for FFT filter design */ Word32 *pRt60_fx; /* RT60 values at these frequencies */ Word16 *pRt60_e; /* exponents for RT60 values at these frequencies */ Word32 *pDsr_fx; /* DSR values at these frequencies */ Word16 *pDsr_e; /* DSR values at these frequencies */ -#endif // float *pHrtf_avg_pwr_response_l; /* The HRTF set's average left ear power response */ // float *pHrtf_avg_pwr_response_r; /* The HRTF set's average right ear power response */ // float *pHrtf_inter_aural_coherence; /* The HRTF set's inter-aural coherence for diffuse sound */ @@ -161,60 +143,22 @@ typedef struct ivas_reverb_params_t // const float *pHrtf_avg_pwr_response_r_const; /* The HRTF set's average right ear power response */ // const float *pHrtf_inter_aural_coherence_const; /* The HRTF set's inter-aural coherence for diffuse sound */ -#ifdef IVAS_FLOAT_FIXED Word32 *pHrtf_avg_pwr_response_l_fx; /* The HRTF set's average left ear power response */ Word32 *pHrtf_avg_pwr_response_r_fx; /* The HRTF set's average right ear power response */ Word32 *pHrtf_inter_aural_coherence_fx; /* The HRTF set's inter-aural coherence for diffuse sound */ const Word32 *pHrtf_avg_pwr_response_l_const_fx; /* The HRTF set's average left ear power response */ const Word32 *pHrtf_avg_pwr_response_r_const_fx; /* The HRTF set's average right ear power response */ const Word32 *pHrtf_inter_aural_coherence_const_fx; /* The HRTF set's inter-aural coherence for diffuse sound */ -#endif - Word16 do_corr_filter; /* Flag indicating whether correlation filters should be used. */ - /* Correlation only supported and needed for binaural playback (i.e. */ - /* when nr_outputs != 2 correlation filtering is never supported). */ -} ivas_reverb_params_t; -#else -typedef struct ivas_reverb_params_t -{ - int16_t pre_delay; /* Delay of the FDC reverb, first peak after pre_delay samples. Note that */ - /* there may be non-zero samples earlier due to the filters being */ - /* linear-phase. */ - int16_t nr_loops; /* Number of feedback loops (= L) */ - int16_t pLoop_delays[IVAS_REV_MAX_NR_BRANCHES]; /* Delay for each feedback loop in samples. */ - float pLoop_feedback_matrix[IVAS_REV_MAX_NR_BRANCHES * IVAS_REV_MAX_NR_BRANCHES]; /* Feedback [L][L] matrix that mixes the signals of the loops. */ - int16_t nr_outputs; /* Nr of signals extracted from the loops (= S). */ - /* Currently this is fixed to 2. */ - float pLoop_extract_matrix[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES]; /* Mix [S][L] matrix from feedback loops to outputs. */ - /* In Matlab: [S x L] - Currently S=2, later may be more than 2 for speaker playback. */ - int16_t t60_filter_order; /* Filter order (length of vector) */ - float pT60_filter_coeff[MAX_NR_OUTPUTS * IVAS_REV_MAX_NR_BRANCHES * IVAS_REV_MAX_IIR_FILTER_LENGTH]; /* Filters [][] in feedback loops, controlling T60. */ - /* In Matlab: IIR: [(2 * L) x ( + 1)] (odd: b-vector, even: a-vector) */ - /* In Matlab: FIR: [L x ] */ - float *pFc; /* Center frequencies for FFT filter design */ - float *pRt60; /* RT60 values at these frequencies */ - float *pDsr; /* DSR values at these frequencies */ - float *pHrtf_avg_pwr_response_l; /* The HRTF set's average left ear power response */ - float *pHrtf_avg_pwr_response_r; /* The HRTF set's average right ear power response */ - float *pHrtf_inter_aural_coherence; /* The HRTF set's inter-aural coherence for diffuse sound */ - const float *pHrtf_avg_pwr_response_l_const; /* The HRTF set's average left ear power response */ - const float *pHrtf_avg_pwr_response_r_const; /* The HRTF set's average right ear power response */ - const float *pHrtf_inter_aural_coherence_const; /* The HRTF set's inter-aural coherence for diffuse sound */ - - int16_t do_corr_filter; /* Flag indicating whether correlation filters should be used. */ - /* Correlation only supported and needed for binaural playback (i.e. */ - /* when nr_outputs != 2 correlation filtering is never supported). */ + Word16 do_corr_filter; /* Flag indicating whether correlation filters should be used. */ + /* Correlation only supported and needed for binaural playback (i.e. */ + /* when nr_outputs != 2 correlation filtering is never supported). */ } ivas_reverb_params_t; -#endif /*------------------------------------------------------------------------------------------* * Static functions declarations *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error calc_jot_t60_coeffs( float *pH_dB, const uint16_t nrFrequencies, float *pFrequencies, float *pCoeffA, float *pCoeffB, const float fNyquist ); -#else static ivas_error calc_jot_t60_coeffs_fx( Word16 *pH_dB_fx, Word16 pH_dB_exp, const UWord16 nrFrequencies, Word16 *pFrequencies_fx, Word16 *pCoeffA_fx, Word16 *pCoeffB_fx, const Word16 fNyquist_fx ); -#endif /*------------------------------------------------------------------------- * binRend_rand() @@ -238,7 +182,6 @@ static uint16_t binRend_rand( * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void ivas_binaural_reverb_setPreDelay_fx( REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ const Word16 delaySamples /* i : reverb pre-delay in CLDFB slots */ @@ -265,31 +208,6 @@ static void ivas_binaural_reverb_setPreDelay_fx( return; } -#else -static void ivas_binaural_reverb_setPreDelay( - REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ - const int16_t delaySamples /* i : reverb pre-delay in CLDFB slots */ -) -{ - if ( delaySamples < 1 ) - { - hReverb->preDelayBufferLength = 1; - - return; - } - - if ( delaySamples > REVERB_PREDELAY_MAX ) - { - hReverb->preDelayBufferLength = REVERB_PREDELAY_MAX; - - return; - } - - hReverb->preDelayBufferLength = delaySamples; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -298,101 +216,7 @@ static void ivas_binaural_reverb_setPreDelay( * *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_binaural_reverb_setReverbTimes( - REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ - const int32_t output_Fs, /* i : sampling_rate */ - const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ - const float *revEnes /* i : spectrum for reverberated sound at each CLDFB bin */ -) -{ - int16_t bin, ch, tap, sample; - float binCenterFreq, diffuseFieldICC, tmpVal, attenuationFactorPerSample; - float intendedEnergy, actualizedEnergy, energyBuildup, currentEnergy, attenuationFactorPerSampleSq; - - hReverb->binRend_RandNext = (uint16_t) BIN_REND_RANDOM_SEED; - hReverb->highestBinauralCoherenceBin = 0; - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - /* Determine the diffuse field binaural coherence */ - binCenterFreq = ( (float) bin + 0.5f ) / ( (float) hReverb->numBins ) * ( (float) output_Fs ) / 2.0f; - if ( bin == 0 ) - { - diffuseFieldICC = 1.0f; - } - else if ( binCenterFreq < 2700.0f ) - { - diffuseFieldICC = sinf( EVS_PI * binCenterFreq / 550.0f + 1e-20f ) / ( EVS_PI * binCenterFreq / 550.0f + 1e-20f ) * ( 1.0f - binCenterFreq / 2700.0f ); - hReverb->highestBinauralCoherenceBin = bin; - } - else - { - diffuseFieldICC = 0.0f; - } - - /* Mixing gains to generate a diffuse-binaural sound based on incoherent sound */ - tmpVal = ( 1.0f - sqrtf( 1.0f - powf( diffuseFieldICC, 2.0 ) ) ) / 2.0f; - if ( diffuseFieldICC > 0 ) - { - hReverb->binauralCoherenceCrossmixGains[bin] = sqrtf( fabsf( tmpVal ) ); - } - else - { - hReverb->binauralCoherenceCrossmixGains[bin] = -sqrtf( fabsf( tmpVal ) ); - } - hReverb->binauralCoherenceDirectGains[bin] = sqrtf( 1.0f - fabsf( tmpVal ) ); - - /* Determine attenuation factor that generates the appropriate energy decay according to reverberation time */ - attenuationFactorPerSample = powf( 10.0f, -3.0f * ( 1.0f / ( (float) CLDFB_SLOTS_PER_SECOND * revTimes[bin] ) ) ); - hReverb->loopAttenuationFactor[bin] = powf( attenuationFactorPerSample, hReverb->loopBufLength[bin] ); - attenuationFactorPerSampleSq = attenuationFactorPerSample * attenuationFactorPerSample; - - /* Design sparse decorrelation filters. The decorrelation filters, due to random procedures involved, - * may affect the spectrum of the output. The spectral effect is therefore monitored and compensated for. */ - intendedEnergy = 0.0f; - actualizedEnergy = 0.0f; - - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - energyBuildup = 0.0f; - currentEnergy = 1.0f; - tap = 0; - - for ( sample = 0; sample < hReverb->loopBufLength[bin]; sample++ ) - { - intendedEnergy += currentEnergy; - - /* The randomization at the energy build up affects where the sparse taps are located */ - energyBuildup += currentEnergy + 0.1f * ( (float) binRend_rand( hReverb ) / PCM16_TO_FLT_FAC - 0.5f ); - - if ( energyBuildup >= 1.0f ) /* A new filter tap is added at this condition */ - { - /* Four efficient phase operations: n*pi/2, n=0,1,2,3 */ - hReverb->tapPhaseShiftType[bin][ch][tap] = (int16_t) ( binRend_rand( hReverb ) % 4 ); - /* Set the tapPointer to point to the determined sample at the loop buffer */ - hReverb->tapPointersReal[bin][ch][tap] = &( hReverb->loopBufReal[bin][sample] ); - hReverb->tapPointersImag[bin][ch][tap] = &( hReverb->loopBufImag[bin][sample] ); - - energyBuildup -= 1.0f; /* A tap is added, thus remove its energy from the buildup */ - tap++; - actualizedEnergy += 1.0f; - } - currentEnergy *= attenuationFactorPerSampleSq; - } - hReverb->taps[bin][ch] = tap; /* Number of taps determined at the above random procedure */ - } - - /* The decorrelator design and IIR attenuation rate affects the energy of reverb, which is compensated here */ - hReverb->reverbEqGains[bin] = sqrtf( revEnes[bin] ); /* Determined reverb spectrum */ - hReverb->reverbEqGains[bin] *= sqrtf( intendedEnergy / actualizedEnergy ); /* Correction of random effects at the decorrelator design */ - hReverb->reverbEqGains[bin] *= sqrtf( 0.5f * ( 1.0f - attenuationFactorPerSampleSq ) ); /* Correction of IIR decay rate */ - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_binaural_reverb_setReverbTimes_fx( REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ const Word32 output_Fs, /* i : sampling_rate */ @@ -615,9 +439,7 @@ static void ivas_binaural_reverb_setReverbTimes_fx( } return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function compute_feedback_matrix() * @@ -684,107 +506,6 @@ static void compute_2_out_extract_matrix_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function compute_feedback_matrix() - * - * Compute the N x N matrix for the mixing the N feedback loop outputs into the N inputs again - *-----------------------------------------------------------------------------------------*/ - -static ivas_error compute_feedback_matrix( - float *pFeedbackMatrix, - const int16_t n ) -{ - float u, v; - int16_t i, j, x; - - if ( n == 6 ) - { - /* special case (there is no 6 x 6 Hadamard matrix in set R) */ - u = -1.0f / 3; - v = 1.0f + u; - for ( i = 0; i < n; i++ ) - { - for ( j = 0; j < n; j++ ) - { - if ( i == j ) - { - pFeedbackMatrix[i * n + j] = v; - } - else - { - pFeedbackMatrix[i * n + j] = u; - } - } - } - } - else - { - if ( !( n == 4 || n == 8 || n == 16 ) ) - { - return IVAS_ERR_INTERNAL; /* n must be 4, 6, 8 or 16, else ERROR */ - } - - u = inv_sqrt( n ); - - if ( n == 4 ) - { - u = -u; - } - - pFeedbackMatrix[0] = u; - for ( x = 1; x < n; x += x ) - { - for ( i = 0; i < x; i++ ) - { - for ( j = 0; j < x; j++ ) - { - pFeedbackMatrix[( i + x ) * n + j] = pFeedbackMatrix[i * n + j]; - pFeedbackMatrix[i * n + j + x] = pFeedbackMatrix[i * n + j]; - pFeedbackMatrix[( i + x ) * n + j + x] = -pFeedbackMatrix[i * n + j]; - } - } - } - - if ( n == 4 ) - { - /* special case */ - for ( j = 12; j < 16; j++ ) - { - pFeedbackMatrix[j] = -pFeedbackMatrix[j]; - } - } - } - - return IVAS_ERR_OK; -} - - -/*-----------------------------------------------------------------------------------------* - * Function compute_2_out_extract_matrix() - * - * Compute the N x 2 matrix for mixing the N Jot feedback loops to 2 outputs - *-----------------------------------------------------------------------------------------*/ - -static void compute_2_out_extract_matrix( - float *pExtractMatrix, - const int16_t n ) -{ - float ff; - int16_t i; - - ff = 1.0; - for ( i = 0; i < n; i++ ) - { - pExtractMatrix[i] = 1.0; - pExtractMatrix[i + n] = ff; - ff = -ff; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function set_base_config() * @@ -855,74 +576,6 @@ static ivas_error set_base_config_fx( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function set_base_config() - * - * Set all jot reverb parameters that are independent of the input reverb configuration - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_base_config( - ivas_reverb_params_t *pParams, - const Word32 output_Fs ) -{ - ivas_error error; - Word16 loop_idx; - const Word16 *selected_loop_delay = NULL; - - IF( pParams == NULL ) - { - return IVAS_ERR_INTERNAL; - } - - pParams->pre_delay = 0; - pParams->nr_outputs = BINAURAL_CHANNELS; - pParams->nr_loops = IVAS_REV_MAX_NR_BRANCHES; - - /* set loop delays to default */ - IF( EQ_32( output_Fs, 48000 ) ) - { - selected_loop_delay = default_loop_delay_48k; - } - ELSE IF( EQ_32( output_Fs, 32000 ) ) - { - selected_loop_delay = default_loop_delay_32k; - } - ELSE IF( EQ_32( output_Fs, 16000 ) ) - { - selected_loop_delay = default_loop_delay_16k; - } - - FOR( loop_idx = 0; loop_idx < pParams->nr_loops; loop_idx++ ) - { - pParams->pLoop_delays[loop_idx] = selected_loop_delay[loop_idx]; - } - - /* set feedback and output matrices */ - IF( ( error = compute_feedback_matrix( pParams->pLoop_feedback_matrix, pParams->nr_loops ) ) != IVAS_ERR_OK ) - { - return error; - } - - compute_2_out_extract_matrix( pParams->pLoop_extract_matrix, pParams->nr_loops ); - - /* pre-set the various filters; they will be set later based on reverb configuration */ - pParams->t60_filter_order = 1; /* set to 1 in base config. */ - - IF( EQ_16( pParams->nr_outputs, 2 ) ) - { - pParams->do_corr_filter = 1; - } - ELSE - { - pParams->do_corr_filter = 0; - } - - return IVAS_ERR_OK; -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function calc_dmx_gain() @@ -935,25 +588,12 @@ static Word32 calc_dmx_gain_fx( void ) move32(); return gain; } -#else -/*-----------------------------------------------------------------------------------------* - * Function calc_dmx_gain() - * - * Computes the downmix gain - *-----------------------------------------------------------------------------------------*/ -static float calc_dmx_gain( void ) -{ - const float dist = DEFAULT_SRC_DIST; - return sqrtf( 4.0f * EVS_PI * dist * dist / 0.001f ); -} -#endif /*-----------------------------------------------------------------------------------------* * Function calc_predelay() * * Calculate the predelay, taking shortest jot loop delay into account *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void calc_predelay_fx( ivas_reverb_params_t *pParams, Word32 acoustic_predelay_sec, @@ -984,41 +624,12 @@ static void calc_predelay_fx( move16(); return; } -#else -static void calc_predelay( - ivas_reverb_params_t *pParams, - float acoustic_predelay_sec, - const int32_t output_Fs ) -{ - int16_t predelay, fbdelay, output_frame; - - predelay = (int16_t) roundf( acoustic_predelay_sec * (float) output_Fs ); - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - fbdelay = pParams->pLoop_delays[pParams->nr_loops - 1]; - predelay -= fbdelay; - - if ( predelay < 0 ) - { - predelay = 0; - } - - if ( output_frame < predelay ) - { - predelay = output_frame; - } - - pParams->pre_delay = predelay; - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function compute_t60_coeffs() * * Calculate Jot reverb's T60 filter coefficients *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error compute_t60_coeffs_fx( ivas_reverb_params_t *pParams, const Word16 nr_fc_fft_filter, /*Q0*/ @@ -1111,63 +722,7 @@ static ivas_error compute_t60_coeffs_fx( } return error; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error compute_t60_coeffs( - ivas_reverb_params_t *pParams, - const int16_t nr_fc_fft_filter, - const int32_t output_Fs ) -{ - int16_t bin_idx, loop_idx, tf_T60_len, len; - float loop_delay_sec, freq_Nyquist, inv_hfs; - float target_gains_db[RV_LENGTH_NR_FC]; - float norm_f[RV_LENGTH_NR_FC]; - float *pCoeffs_a, *pCoeffs_b; - float *targetT60, *freqT60; - ivas_error error; - - targetT60 = pParams->pRt60; - freqT60 = pParams->pFc; - - error = IVAS_ERR_OK; - tf_T60_len = nr_fc_fft_filter; - len = pParams->t60_filter_order + 1; - freq_Nyquist = 0.5f * (float) output_Fs; - - /* normalize pFrequencies: 0 .. 1/2 output_Fs --> 0.0 .. 1.0 */ - inv_hfs = 1.0f / freq_Nyquist; - for ( bin_idx = 0; bin_idx < tf_T60_len; bin_idx++ ) - { - norm_f[bin_idx] = freqT60[bin_idx] * inv_hfs; - } - - for ( loop_idx = 0; loop_idx < pParams->nr_loops; loop_idx++ ) - { - loop_delay_sec = (float) pParams->pLoop_delays[loop_idx] / (float) output_Fs; - for ( bin_idx = 0; bin_idx < tf_T60_len; bin_idx++ ) - { - target_gains_db[bin_idx] = -60.0f * loop_delay_sec / targetT60[bin_idx]; - target_gains_db[bin_idx] = max( target_gains_db[bin_idx], -120.0f ); - } - - pCoeffs_a = &pParams->pT60_filter_coeff[2 * len * loop_idx + len]; - pCoeffs_b = &pParams->pT60_filter_coeff[2 * len * loop_idx]; - if ( ( error = calc_jot_t60_coeffs( target_gains_db, tf_T60_len, norm_f, pCoeffs_a, pCoeffs_b, freq_Nyquist ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - len = ( pParams->t60_filter_order + 1 ) >> 1; /* == floor( (order+1) / 2) */ - for ( loop_idx = 0; loop_idx < pParams->nr_loops; loop_idx++ ) - { - pParams->pLoop_delays[loop_idx] -= len; - } - return error; -} -#endif /*-----------------------------------------------------------------------------------------* * Function calc_low_shelf_first_order_filter() @@ -1175,45 +730,7 @@ static ivas_error compute_t60_coeffs( * Calculate 1st order low shelf filter *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void calc_low_shelf_first_order_filter( - float *pNum, - float *pDen, - const float f0, - const float lin_gain_lf, - const float lin_gain_hf ) -{ - float w0, gain; - - w0 = tanf( EVS_PI * f0 / 2.0f ); - gain = lin_gain_lf / lin_gain_hf; - if ( gain < 1.0f ) - { - pNum[0] = 1 + w0 * gain; - pNum[1] = w0 * gain - 1; - pDen[0] = 1 + w0; - pDen[1] = w0 - 1; - } - else - { - pNum[0] = 1 + w0; - pNum[1] = w0 - 1; - pDen[0] = 1 + w0 / gain; - pDen[1] = w0 / gain - 1; - } - - /* Normalize and adjust gain to match target amplitudes */ - pNum[0] = ( pNum[0] / pDen[0] ) * lin_gain_hf; - pNum[1] = ( pNum[1] / pDen[0] ) * lin_gain_hf; - pDen[1] = pDen[1] / pDen[0]; - pDen[0] = 1.0f; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static void calc_low_shelf_first_order_filter_fx( Word16 *pNum, /* Q14 */ Word16 *pDen, /* Q14 */ @@ -1339,7 +856,6 @@ static void calc_low_shelf_first_order_filter_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function calc_jot_t60_coeffs() @@ -1348,76 +864,6 @@ static void calc_low_shelf_first_order_filter_fx( *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error calc_jot_t60_coeffs( - float *pH_dB, - const uint16_t nrFrequencies, - float *pFrequencies, - float *pCoeffA, - float *pCoeffB, - const float fNyquist ) -{ - const float ref_lf_min_norm = REF_LF_MIN / fNyquist; - const float ref_lf_max_norm = REF_LF_MAX / fNyquist; - const float ref_hf_min_norm = REF_HF_MIN / fNyquist; - const float ref_hf_max_norm = REF_HF_MAX / fNyquist; - int16_t f_idx, minidx; - float f0, tmp, minval, lf_target_gain_dB, hf_target_gain_dB, mid_crossing_gain_dB; - uint16_t n_points_lf, n_points_hf; - float lin_gain_lf, lin_gain_hf; - - minidx = nrFrequencies - 1; - minval = 1e+20f; - lf_target_gain_dB = 0.0f; - hf_target_gain_dB = 0.0f; - n_points_lf = 0; - n_points_hf = 0; - - for ( f_idx = 0; f_idx < nrFrequencies; f_idx++ ) - { - if ( ( pFrequencies[f_idx] >= ref_lf_min_norm ) && ( pFrequencies[f_idx] <= ref_lf_max_norm ) ) - { - lf_target_gain_dB += pH_dB[f_idx]; - n_points_lf++; - } - if ( ( pFrequencies[f_idx] >= ref_hf_min_norm ) && ( pFrequencies[f_idx] <= ref_hf_max_norm ) ) - { - hf_target_gain_dB += pH_dB[f_idx]; - n_points_hf++; - } - } - - if ( ( n_points_lf == 0 ) || ( n_points_hf == 0 ) ) - { - return IVAS_ERR_INTERNAL; - } - - lf_target_gain_dB = lf_target_gain_dB / (float) n_points_lf; - hf_target_gain_dB = hf_target_gain_dB / (float) n_points_hf; - mid_crossing_gain_dB = hf_target_gain_dB + LF_BIAS * ( lf_target_gain_dB - hf_target_gain_dB ); - - for ( f_idx = 1; f_idx < nrFrequencies - 1; f_idx++ ) - { - tmp = fabsf( pH_dB[f_idx] - mid_crossing_gain_dB ); - if ( tmp < minval ) - { - minval = tmp; - minidx = f_idx; - } - } - - f0 = pFrequencies[minidx]; - lin_gain_lf = powf( 10.0f, lf_target_gain_dB * 0.05f ); - lin_gain_hf = powf( 10.0f, hf_target_gain_dB * 0.05f ); - - /* call low-pass iir shelf */ - calc_low_shelf_first_order_filter( pCoeffB, pCoeffA, f0, lin_gain_lf, lin_gain_hf ); - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static ivas_error calc_jot_t60_coeffs_fx( Word16 *pH_dB_fx, Word16 pH_dB_exp, @@ -1540,14 +986,12 @@ static ivas_error calc_jot_t60_coeffs_fx( calc_low_shelf_first_order_filter_fx( pCoeffB_fx, pCoeffA_fx, f0_fx, lin_gain_lf_fx, lin_gain_hf_fx ); return IVAS_ERR_OK; } -#endif /*-----------------------------------------------------------------------------------------* * Function initialize_reverb_filters() * * Set the number of branches (feedback loops) and Initializes the memory structure (pointers to data) *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error initialize_reverb_filters_fx( REVERB_HANDLE hReverb ) { @@ -1583,43 +1027,6 @@ static ivas_error initialize_reverb_filters_fx( return error; } -#else -static ivas_error initialize_reverb_filters( - REVERB_HANDLE hReverb ) -{ - ivas_error error; - - error = IVAS_ERR_OK; - - /* init correlation and coloration filters */ - if ( ( error = ivas_reverb_t2f_f2t_init( &hReverb->fft_filter_ols, hReverb->fft_size, hReverb->fft_subblock_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_reverb_fft_filter_init( &hReverb->fft_filter_correl_0, hReverb->fft_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_reverb_fft_filter_init( &hReverb->fft_filter_correl_1, hReverb->fft_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_reverb_fft_filter_init( &hReverb->fft_filter_color_0, hReverb->fft_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_reverb_fft_filter_init( &hReverb->fft_filter_color_1, hReverb->fft_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - return error; -} -#endif /*-----------------------------------------------------------------------------------------* * Function set_t60_filter() @@ -1627,7 +1034,6 @@ static ivas_error initialize_reverb_filters( * Sets t60 number of taps and coefficients A and B *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error set_t60_filter( REVERB_HANDLE hReverb, const UWord16 branch, @@ -1649,31 +1055,7 @@ static ivas_error set_t60_filter( return IVAS_ERR_OK; } -#else -static ivas_error set_t60_filter( - REVERB_HANDLE hReverb, - const uint16_t branch, - const uint16_t nr_taps, - const float coefA[], - const float coefB[] ) -{ - if ( branch >= hReverb->nr_of_branches ) - { - return IVAS_ERR_INTERNAL; - } - - if ( nr_taps > IVAS_REV_MAX_IIR_FILTER_LENGTH ) - { - return IVAS_ERR_INTERNAL; - } - - ivas_reverb_iir_filt_set( &( hReverb->t60[branch] ), nr_taps, coefA, coefB ); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function set_feedback_delay() * @@ -1695,29 +1077,6 @@ static ivas_error set_feedback_delay_fx( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function set_feedback_delay() - * - * Sets Delay of feedback branch in number of samples - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_feedback_delay( - REVERB_HANDLE hReverb, - const uint16_t branch, - const int16_t fb_delay ) -{ - if ( branch >= hReverb->nr_of_branches ) - { - return IVAS_ERR_INTERNAL; - } - - hReverb->delay_line[branch].Delay = fb_delay; - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function set_feedback_gain() * @@ -1800,91 +1159,7 @@ static ivas_error set_color_fft_filter_fx( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function set_feedback_gain() - * - * Sets nr_of_branches feedback gain values in feedback matrix - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_feedback_gain( - REVERB_HANDLE hReverb, - const uint16_t branch, - const float *pGain ) -{ - uint16_t gain_idx; - if ( branch >= hReverb->nr_of_branches ) - { - return IVAS_ERR_INTERNAL; - } - - for ( gain_idx = 0; gain_idx < hReverb->nr_of_branches; gain_idx++ ) - { - hReverb->gain_matrix[branch][gain_idx] = pGain[gain_idx]; - } - - return IVAS_ERR_OK; -} -/*-----------------------------------------------------------------------------------------* - * Function set_correl_fft_filter() - * - * Sets correlation filter complex gains - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_correl_fft_filter( - REVERB_HANDLE hReverb, - const uint16_t channel, - rv_fftwf_type_complex *pSpectrum ) -{ - if ( channel > 1 ) - { - return IVAS_ERR_INTERNAL; - } - - if ( channel == 0 ) - { - ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, hReverb->fft_filter_correl_0.fft_spectrum, hReverb->fft_filter_correl_0.fft_size ); - } - else - { - ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, hReverb->fft_filter_correl_1.fft_spectrum, hReverb->fft_filter_correl_1.fft_size ); - } - - return IVAS_ERR_OK; -} - - -/*-----------------------------------------------------------------------------------------* - * Function set_color_fft_filter() - * - * Sets coloration filter complex gains - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_color_fft_filter( - REVERB_HANDLE hReverb, - const uint16_t channel, - rv_fftwf_type_complex *pSpectrum ) -{ - if ( channel > 1 ) - { - return IVAS_ERR_INTERNAL; - } - - if ( channel == 0 ) - { - ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, hReverb->fft_filter_color_0.fft_spectrum, hReverb->fft_filter_color_0.fft_size ); - } - else - { - ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( pSpectrum, hReverb->fft_filter_color_1.fft_spectrum, hReverb->fft_filter_color_1.fft_size ); - } - - return IVAS_ERR_OK; -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function set_mixer_level_fx() * @@ -1981,95 +1256,6 @@ static void set_fft_and_datablock_sizes_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function set_mixer_level() - * - * Sets Mixer level: to mix 2 output channels from 8 feedback branches - *-----------------------------------------------------------------------------------------*/ - -static ivas_error set_mixer_level( - REVERB_HANDLE hReverb, - const uint16_t channel, - const float level[] ) -{ - uint16_t branch_idx; - if ( channel >= BINAURAL_CHANNELS ) - { - return IVAS_ERR_INTERNAL; - } - - for ( branch_idx = 0; branch_idx < hReverb->nr_of_branches; branch_idx++ ) - { - hReverb->mixer[channel][branch_idx] = level[branch_idx]; - } - - return IVAS_ERR_OK; -} - -/*-----------------------------------------------------------------------------------------* - * Function clear_buffers() - * - * Clears buffers of delay lines and filters - *-----------------------------------------------------------------------------------------*/ - -static void clear_buffers( - REVERB_HANDLE hReverb ) -{ - int16_t branch_idx; - ivas_rev_iir_filter_t *iirFilter; - ivas_rev_delay_line_t *delay_line; - - for ( branch_idx = 0; branch_idx < IVAS_REV_MAX_NR_BRANCHES; branch_idx++ ) - { - delay_line = &( hReverb->delay_line[branch_idx] ); - set_f( delay_line->pBuffer, 0, delay_line->MaxDelay ); - delay_line->BufferPos = 0; - - iirFilter = &( hReverb->t60[branch_idx] ); - set_f( iirFilter->pBuffer, 0, iirFilter->MaxTaps ); - } - - ivas_reverb_t2f_f2t_ClearHistory( &hReverb->fft_filter_ols ); - - return; -} -/*-----------------------------------------------------------------------------------------* - * Function set_fft_and_datablock_sizes() - * - * Sets frame size and fft-filter related sizes - *-----------------------------------------------------------------------------------------*/ - -static void set_fft_and_datablock_sizes( - REVERB_HANDLE hReverb, - const int16_t subframe_len ) -{ - hReverb->full_block_size = subframe_len; - if ( subframe_len == L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES ) - { - hReverb->fft_size = IVAS_REVERB_FFT_SIZE_48K; - hReverb->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_48K; - } - else if ( subframe_len == L_FRAME32k / MAX_PARAM_SPATIAL_SUBFRAMES ) - { - hReverb->fft_size = IVAS_REVERB_FFT_SIZE_32K; - hReverb->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_32K; - } - else if ( subframe_len == L_FRAME16k / MAX_PARAM_SPATIAL_SUBFRAMES ) - { - hReverb->fft_size = IVAS_REVERB_FFT_SIZE_16K; - hReverb->num_fft_subblocks = IVAS_REVERB_FFT_N_SUBBLOCKS_16K; - } - else - { - assert( 0 ); /* unsupported block size */ - } - - hReverb->fft_subblock_size = subframe_len / hReverb->num_fft_subblocks; - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function set_reverb_acoustic_data() @@ -2077,7 +1263,6 @@ static void set_fft_and_datablock_sizes( * Sets reverb acoustic data (room acoustics and HRTF), interpolating it to the filter grid *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void set_reverb_acoustic_data_fx( ivas_reverb_params_t *pParams, const AUDIO_CONFIG input_audio_config, @@ -2203,91 +1388,13 @@ static void set_reverb_acoustic_data_fx( } return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static void set_reverb_acoustic_data( - ivas_reverb_params_t *pParams, - const AUDIO_CONFIG input_audio_config, - const HRTFS_HANDLE hHrtf, - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pRoomAcoustics, - const int16_t subframe_len, - const int16_t nr_fc_input, - const int16_t nr_fc_fft_filter ) -{ - int16_t nr_out_ch, hrtf_idx, offset, iter_idx, bin_idx; - float ln_1e6_inverted, delay_diff, exp_argument; - float *pHrtf_set_l_re[MAX_INTERN_CHANNELS]; - float *pHrtf_set_l_im[MAX_INTERN_CHANNELS]; - float *pHrtf_set_r_re[MAX_INTERN_CHANNELS]; - float *pHrtf_set_r_im[MAX_INTERN_CHANNELS]; - /* use crend hrtf filters */ - if ( hHrtf != NULL ) - { - /* Compute HRTF set properties: average left/right energies, IA coherence */ - /* First, find the offset of the frequency-domain data for the 1st frame and assign HRTF pointers */ - for ( nr_out_ch = 0; nr_out_ch < BINAURAL_CHANNELS; nr_out_ch++ ) - { - for ( hrtf_idx = 0; hrtf_idx < hHrtf->max_num_ir; hrtf_idx++ ) - { - offset = 0; - for ( iter_idx = 0; iter_idx < hHrtf->num_iterations[hrtf_idx][nr_out_ch] - 1; iter_idx++ ) - { - offset += hHrtf->pIndex_frequency_max[hrtf_idx][nr_out_ch][iter_idx]; - } - - if ( nr_out_ch == 0 ) - { - pHrtf_set_l_re[hrtf_idx] = &hHrtf->pOut_to_bin_re[hrtf_idx][0][offset]; - pHrtf_set_l_im[hrtf_idx] = &hHrtf->pOut_to_bin_im[hrtf_idx][0][offset]; - } - else - { - pHrtf_set_r_re[hrtf_idx] = &hHrtf->pOut_to_bin_re[hrtf_idx][1][offset]; - pHrtf_set_r_im[hrtf_idx] = &hHrtf->pOut_to_bin_im[hrtf_idx][1][offset]; - } - } - } - - /* Compute HRTF set properties using frequency-domain HRTF data */ - ivas_reverb_get_hrtf_set_properties( pHrtf_set_l_re, pHrtf_set_l_im, pHrtf_set_r_re, pHrtf_set_r_im, input_audio_config, hHrtf->max_num_ir, subframe_len, - nr_fc_fft_filter, pParams->pHrtf_avg_pwr_response_l, pParams->pHrtf_avg_pwr_response_r, pParams->pHrtf_inter_aural_coherence ); - - pParams->pHrtf_avg_pwr_response_l_const = (const float *) pParams->pHrtf_avg_pwr_response_l; - pParams->pHrtf_avg_pwr_response_r_const = (const float *) pParams->pHrtf_avg_pwr_response_r; - pParams->pHrtf_inter_aural_coherence_const = (const float *) pParams->pHrtf_inter_aural_coherence; - } - - /* interpolate input table data for T60 and DSR to the FFT filter grid */ - ivas_reverb_interpolate_acoustic_data( nr_fc_input, pRoomAcoustics->pFc_input, pRoomAcoustics->pAcoustic_rt60, pRoomAcoustics->pAcoustic_dsr, - nr_fc_fft_filter, pParams->pFc, pParams->pRt60, pParams->pDsr ); - /* adjust DSR for the delay difference */ - - delay_diff = pRoomAcoustics->inputPreDelay - pRoomAcoustics->acousticPreDelay; - - ln_1e6_inverted = 1.0f / logf( 1e06f ); - - for ( bin_idx = 0; bin_idx < nr_fc_fft_filter; bin_idx++ ) - { - exp_argument = delay_diff / ( pParams->pRt60[bin_idx] * ln_1e6_inverted ); - /* Limit exponent to approx +/-100 dB in case of incoherent value of delay_diff, to prevent overflow */ - - exp_argument = min( exp_argument, 23.0f ); - exp_argument = max( exp_argument, -23.0f ); - pParams->pDsr[bin_idx] *= expf( exp_argument ); - } - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function setup_FDN_branches_fx() - * - * Sets up feedback delay network system - *-----------------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------------* + * Function setup_FDN_branches_fx() + * + * Sets up feedback delay network system + *-----------------------------------------------------------------------------------------*/ static ivas_error setup_FDN_branches_fx( REVERB_HANDLE hReverb, @@ -2348,72 +1455,6 @@ static ivas_error setup_FDN_branches_fx( return error; } -#else -/*-----------------------------------------------------------------------------------------* - * Function setup_FDN_branches() - * - * Sets up feedback delay network system - *-----------------------------------------------------------------------------------------*/ - -static ivas_error setup_FDN_branches( - REVERB_HANDLE hReverb, - ivas_reverb_params_t *pParams ) -{ - int16_t nr_coefs, branch_idx, channel_idx; - ivas_error error; - float *pCoef_a, *pCoef_b; - error = IVAS_ERR_OK; - - /* initialize feedback branches */ - for ( branch_idx = 0; branch_idx < IVAS_REV_MAX_NR_BRANCHES; branch_idx++ ) - { - ivas_rev_delay_line_init( &( hReverb->delay_line[branch_idx] ), hReverb->loop_delay_buffer[branch_idx], init_loop_delay[branch_idx], pParams->pLoop_delays[branch_idx] ); - ivas_reverb_iir_filt_init( &( hReverb->t60[branch_idx] ), IVAS_REV_MAX_IIR_FILTER_LENGTH ); - hReverb->mixer[0][branch_idx] = 0.0f; - hReverb->mixer[1][branch_idx] = 0.0f; - } - clear_buffers( hReverb ); - nr_coefs = pParams->t60_filter_order + 1; - - if ( IVAS_REV_MAX_IIR_FILTER_LENGTH < nr_coefs ) - { - return IVAS_ERR_INTERNAL; - } - else - { - for ( branch_idx = 0; branch_idx < pParams->nr_loops; branch_idx++ ) - { - pCoef_a = &pParams->pT60_filter_coeff[2 * nr_coefs * branch_idx + nr_coefs]; - pCoef_b = &pParams->pT60_filter_coeff[2 * nr_coefs * branch_idx]; - - if ( ( error = set_t60_filter( hReverb, branch_idx, nr_coefs, pCoef_a, pCoef_b ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = set_feedback_delay( hReverb, branch_idx, pParams->pLoop_delays[branch_idx] ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = set_feedback_gain( hReverb, branch_idx, &( pParams->pLoop_feedback_matrix[branch_idx * pParams->nr_loops] ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - for ( channel_idx = 0; channel_idx < pParams->nr_outputs; channel_idx++ ) - { - if ( ( error = set_mixer_level( hReverb, channel_idx, &( pParams->pLoop_extract_matrix[channel_idx * pParams->nr_loops] ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_reverb_open_fx() * @@ -2702,194 +1743,6 @@ ivas_error ivas_reverb_open_fx( return error; } -#else -/*------------------------------------------------------------------------- - * ivas_reverb_open() - * - * Allocate and initialize Crend reverberation handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_reverb_open( - REVERB_HANDLE *hReverb, /* i/o: Reverberator handle */ - const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ - const HRTFS_HANDLE hHrtf, /* i : HRTF handle */ - const float *lr_energy_and_iac[], /* i : precomuputed lr energies and iac */ - RENDER_CONFIG_HANDLE hRenderConfig, /* i : Renderer configuration handle */ - const int32_t output_Fs /* i : output sampling rate */ -) -{ - ivas_error error; - REVERB_HANDLE pState = NULL; - int16_t bin_idx, subframe_len, output_frame, predelay_bf_len, loop_idx; - ivas_reverb_params_t params; - rv_fftwf_type_complex pFft_wf_filter_ch0[RV_LENGTH_NR_FC]; - rv_fftwf_type_complex pFft_wf_filter_ch1[RV_LENGTH_NR_FC]; - float pColor_target_l[RV_LENGTH_NR_FC]; - float pColor_target_r[RV_LENGTH_NR_FC]; - float pTime_window[RV_FILTER_MAX_FFT_SIZE]; - float freq_step; - int16_t fft_hist_size, transition_start, transition_length; - int16_t nr_fc_input, nr_fc_fft_filter; - - error = IVAS_ERR_OK; - output_frame = (int16_t) ( output_Fs / FRAMES_PER_SEC ); - subframe_len = output_frame / MAX_PARAM_SPATIAL_SUBFRAMES; - predelay_bf_len = output_frame; - nr_fc_input = hRenderConfig->roomAcoustics.nBands; - - /* Allocate main reverb. handle */ - if ( ( pState = (REVERB_HANDLE) malloc( sizeof( REVERB_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Crend Reverberator " ); - } - - if ( ( error = set_base_config( ¶ms, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Allocate memory for feedback delay lines */ - for ( loop_idx = 0; loop_idx < IVAS_REV_MAX_NR_BRANCHES; loop_idx++ ) - { - if ( ( pState->loop_delay_buffer[loop_idx] = (float *) malloc( params.pLoop_delays[loop_idx] * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); - } - } - - /* Allocate memory for the pre-delay delay line */ - if ( ( pState->pPredelay_buffer = (float *) malloc( output_frame * sizeof( float ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for CREND Reverberator" ); - } - - pState->nr_of_branches = IVAS_REV_MAX_NR_BRANCHES; - set_fft_and_datablock_sizes( pState, subframe_len ); - nr_fc_fft_filter = ( pState->fft_size >> 1 ) + 1; - - /* === 'Control logic': compute the reverb processing parameters from the === */ - /* === room, source and listener acoustic information provided in the reverb config === */ - /* Setting up shared temporary buffers for fc, RT60, DSR, etc. */ - params.pHrtf_avg_pwr_response_l = &pFft_wf_filter_ch0[0][0]; - params.pHrtf_avg_pwr_response_r = params.pHrtf_avg_pwr_response_l + nr_fc_fft_filter; - params.pRt60 = &pFft_wf_filter_ch1[0][0]; - params.pDsr = params.pRt60 + nr_fc_fft_filter; - params.pFc = &pState->fft_filter_color_0.fft_spectrum[0]; - params.pHrtf_inter_aural_coherence = &pState->fft_filter_color_1.fft_spectrum[0]; - - /* Note: these temp buffers can only be used before the final step of the FFT filter design : */ - /* before calls to ivas_reverb_calc_correl_filters(...) or to ivas_reverb_calc_color_filters(...) */ - - /* set the uniform frequency grid for FFT filtering */ - freq_step = 0.5f * output_Fs / ( nr_fc_fft_filter - 1 ); - for ( bin_idx = 0; bin_idx < nr_fc_fft_filter; bin_idx++ ) - { - params.pFc[bin_idx] = freq_step * bin_idx; - } - - if ( hHrtf == NULL && lr_energy_and_iac != NULL ) - { - params.pHrtf_avg_pwr_response_l_const = lr_energy_and_iac[0]; - params.pHrtf_avg_pwr_response_r_const = lr_energy_and_iac[1]; - params.pHrtf_inter_aural_coherence_const = lr_energy_and_iac[2]; - } - /* set up reverb acoustic data on the basis of HRTF data and renderer config */ - set_reverb_acoustic_data( ¶ms, input_audio_config, hHrtf, &hRenderConfig->roomAcoustics, subframe_len, nr_fc_input, nr_fc_fft_filter ); - - /* set reverb acoustic configuration based on renderer config */ - pState->pConfig.roomAcoustics.override = hRenderConfig->roomAcoustics.override; - pState->pConfig.roomAcoustics.nBands = hRenderConfig->roomAcoustics.nBands; - - if ( hRenderConfig->roomAcoustics.use_er == 1 ) - { - pState->pConfig.roomAcoustics.use_er = hRenderConfig->roomAcoustics.use_er; - pState->pConfig.roomAcoustics.lowComplexity = hRenderConfig->roomAcoustics.lowComplexity; - } - - /* set up input downmix */ - pState->dmx_gain = calc_dmx_gain(); - - /* set up predelay - must be after set_base_config() and before compute_t60_coeffs() */ - calc_predelay( ¶ms, hRenderConfig->roomAcoustics.acousticPreDelay, output_Fs ); - - /* set up jot reverb 60 filters - must be set up after set_reverb_acoustic_data() */ - if ( ( error = compute_t60_coeffs( ¶ms, nr_fc_fft_filter, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Compute target levels (gains) for the coloration filters */ - ivas_reverb_calc_color_levels( output_Fs, nr_fc_fft_filter, params.nr_loops, params.pFc, params.pDsr, params.pHrtf_avg_pwr_response_l_const, params.pHrtf_avg_pwr_response_r_const, - params.pLoop_delays, params.pT60_filter_coeff, pColor_target_l, pColor_target_r ); - - /* Defining appropriate windowing parameters for FFT filters to prevent aliasing */ - fft_hist_size = pState->fft_size - pState->fft_subblock_size; - - transition_start = (int16_t) roundf( FFT_FILTER_WND_FLAT_REGION * fft_hist_size ); - transition_length = (int16_t) roundf( FFT_FILTER_WND_TRANS_REGION * fft_hist_size ); - - /* Compute the window used for FFT filters */ - ivas_reverb_define_window_fft( pTime_window, transition_start, transition_length, nr_fc_fft_filter ); - - - /* === Now, copy parameters from ivas_reverb_params_t into DSP blocks === */ - /* === to be used for subsequent audio signal processing === */ - - pState->do_corr_filter = params.do_corr_filter; - - /* clear & init jot reverb fft filters */ - if ( ( error = initialize_reverb_filters( pState ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( pState->do_corr_filter ) - { - /* Computing correlation filters on the basis of target IA coherence */ - ivas_reverb_calc_correl_filters( params.pHrtf_inter_aural_coherence_const, pTime_window, pState->fft_size, 0.0f, pFft_wf_filter_ch0, pFft_wf_filter_ch1 ); - - /* Copying the computed FFT correlation filters to the fft_filter components */ - if ( ( error = set_correl_fft_filter( pState, 0, pFft_wf_filter_ch0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = set_correl_fft_filter( pState, 1, pFft_wf_filter_ch1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Computing coloration filters on the basis of target responses */ - ivas_reverb_calc_color_filters( pColor_target_l, pColor_target_r, pTime_window, pState->fft_size, 0.0f, pFft_wf_filter_ch0, pFft_wf_filter_ch1 ); - - /* Copying the computed FFT colorations filters to the fft_filter components */ - if ( ( error = set_color_fft_filter( pState, 0, pFft_wf_filter_ch0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = set_color_fft_filter( pState, 1, pFft_wf_filter_ch1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* init predelay */ - ivas_rev_delay_line_init( &( pState->predelay_line ), pState->pPredelay_buffer, params.pre_delay, predelay_bf_len ); - - /* set up feedback delay network */ - if ( ( error = setup_FDN_branches( pState, ¶ms ) ) != IVAS_ERR_OK ) - { - return error; - } - - *hReverb = pState; - - return error; -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_reverb_close() * @@ -2928,46 +1781,6 @@ void ivas_reverb_close( return; } -#else -/*------------------------------------------------------------------------- - * ivas_reverb_close() - * - * Deallocate Crend reverberation handle - *------------------------------------------------------------------------*/ - -void ivas_reverb_close( - REVERB_HANDLE *hReverb_in /* i/o: Reverberator handle */ -) -{ - REVERB_HANDLE hReverb; - Word16 loop_idx; - - hReverb = *hReverb_in; - - IF( hReverb_in == NULL || *hReverb_in == NULL ) - { - return; - } - - FOR( loop_idx = 0; loop_idx < IVAS_REV_MAX_NR_BRANCHES; loop_idx++ ) - { - IF( hReverb->loop_delay_buffer[loop_idx] != NULL ) - { - free( hReverb->loop_delay_buffer[loop_idx] ); - hReverb->loop_delay_buffer[loop_idx] = NULL; - } - } - - free( hReverb->pPredelay_buffer ); - hReverb->pPredelay_buffer = NULL; - - free( *hReverb_in ); - *hReverb_in = NULL; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function post_fft_filter() * @@ -2999,51 +1812,17 @@ static void post_fft_filter_fx( return; } -#else /*-----------------------------------------------------------------------------------------* - * Function post_fft_filter() - * + * Function reverb_block() * + * Input a block (mono) and calculate the 2 output blocks. *-----------------------------------------------------------------------------------------*/ -static void post_fft_filter( +static void reverb_block_fx( REVERB_HANDLE hReverb, - float *p0, - float *p1, - float *pBuffer_0, - float *pBuffer_1 ) -{ - if ( hReverb->do_corr_filter ) - { - ivas_reverb_t2f_f2t_in( &hReverb->fft_filter_ols, p0, p1, pBuffer_0, pBuffer_1 ); - ivas_reverb_fft_filter_ComplexMul( &hReverb->fft_filter_correl_0, pBuffer_0 ); - ivas_reverb_fft_filter_ComplexMul( &hReverb->fft_filter_correl_1, pBuffer_1 ); - ivas_reverb_fft_filter_CrossMix( pBuffer_0, pBuffer_1, hReverb->fft_filter_correl_0.fft_size ); - } - else - { - ivas_reverb_t2f_f2t_in( &hReverb->fft_filter_ols, p0, p1, pBuffer_0, pBuffer_1 ); - } - - ivas_reverb_fft_filter_ComplexMul( &hReverb->fft_filter_color_0, pBuffer_0 ); - ivas_reverb_fft_filter_ComplexMul( &hReverb->fft_filter_color_1, pBuffer_1 ); - ivas_reverb_t2f_f2t_out( &hReverb->fft_filter_ols, pBuffer_0, pBuffer_1, p0, p1 ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function reverb_block() - * - * Input a block (mono) and calculate the 2 output blocks. - *-----------------------------------------------------------------------------------------*/ - -static void reverb_block_fx( - REVERB_HANDLE hReverb, - Word32 *pInput_fx, /*Q11*/ - Word32 *pOut0_fx, - Word32 *pOut1_fx ) + Word32 *pInput_fx, /*Q11*/ + Word32 *pOut0_fx, + Word32 *pOut1_fx ) { UWord16 nr_branches = hReverb->nr_of_branches; @@ -3152,100 +1931,6 @@ static void reverb_block_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function reverb_block() - * - * Input a block (mono) and calculate the 2 output blocks. - *-----------------------------------------------------------------------------------------*/ - -static void reverb_block( - REVERB_HANDLE hReverb, - float *pInput, - float *pOut0, - float *pOut1 ) - -{ - uint16_t nr_branches = hReverb->nr_of_branches; - uint16_t bsize = hReverb->full_block_size; - uint16_t inner_bsize = INNER_BLK_SIZE; - uint16_t i, j, k, ns, branch_idx, blk_idx, start_sample_idx; - - float *pFFT_buf[2], FFT_buf_1[RV_FILTER_MAX_FFT_SIZE], FFT_buf_2[RV_FILTER_MAX_FFT_SIZE]; - float pFeedback_input[INNER_BLK_SIZE]; - float pTemp[INNER_BLK_SIZE]; - float *ppOutput[IVAS_REV_MAX_NR_BRANCHES]; - float Output[IVAS_REV_MAX_NR_BRANCHES][INNER_BLK_SIZE]; - - pFFT_buf[0] = &FFT_buf_1[0]; - pFFT_buf[1] = &FFT_buf_2[0]; - - for ( branch_idx = 0; branch_idx < nr_branches; branch_idx++ ) - { - ppOutput[branch_idx] = (float *) Output + branch_idx * inner_bsize; - } - - for ( k = 0; k < bsize; k += inner_bsize ) - { - float *pO0 = &pOut0[k]; - float *pO1 = &pOut1[k]; - for ( i = 0; i < inner_bsize; i++ ) - { - pO0[i] = 0.0f; - pO1[i] = 0.0f; - } - - /* feedback network: */ - for ( i = 0; i < nr_branches; i++ ) - { - float *pOutput_i = &ppOutput[i][0]; - float mixer_0_i = hReverb->mixer[0][i]; - float mixer_1_i = hReverb->mixer[1][i]; - - /* output and feedback are same, get sample from delay line ... */ - ivas_rev_delay_line_get_sample_blk( &( hReverb->delay_line[i] ), inner_bsize, pTemp ); - ivas_reverb_iir_filt_2taps_feed_blk( &( hReverb->t60[i] ), inner_bsize, pTemp, ppOutput[i] ); - for ( ns = 0; ns < inner_bsize; ns++ ) - { - pO0[ns] += pOutput_i[ns] * mixer_0_i; /* mixer ch 0 */ - pO1[ns] += pOutput_i[ns] * mixer_1_i; /* mixer ch 1 */ - } - } - - for ( i = 0; i < nr_branches; i++ ) - { - float *pIn = &pInput[k]; - - for ( ns = 0; ns < inner_bsize; ns++ ) - { - pFeedback_input[ns] = pIn[ns]; - } - - for ( j = 0; j < nr_branches; j++ ) - { - float gain_matrix_j_i = hReverb->gain_matrix[j][i]; - float *pOutput = &ppOutput[j][0]; - for ( ns = 0; ns < inner_bsize; ns++ ) - { - pFeedback_input[ns] += gain_matrix_j_i * pOutput[ns]; - } - } - - ivas_rev_delay_line_feed_sample_blk( &( hReverb->delay_line[i] ), inner_bsize, pFeedback_input ); - } - } - - /* Applying FFT filter to each sub-frame */ - for ( blk_idx = 0; blk_idx < hReverb->num_fft_subblocks; blk_idx++ ) - { - start_sample_idx = blk_idx * hReverb->fft_subblock_size; - post_fft_filter( hReverb, pOut0 + start_sample_idx, pOut1 + start_sample_idx, pFFT_buf[0], pFFT_buf[1] ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function downmix_input_block() * @@ -3307,68 +1992,6 @@ static ivas_error downmix_input_block_fx( return IVAS_ERR_OK; } -#else -/*-----------------------------------------------------------------------------------------* - * Function downmix_input_block() - * - * Downmix input to mono, taking also DSR gain into account - *-----------------------------------------------------------------------------------------*/ - -static ivas_error downmix_input_block( - const REVERB_HANDLE hReverb, - float *pcm_in[], - const AUDIO_CONFIG input_audio_config, - float *pPcm_out, - const int16_t input_offset ) -{ - int16_t i, s, nchan_transport; - float dmx_gain = hReverb->dmx_gain; - - switch ( input_audio_config ) - { - case IVAS_AUDIO_CONFIG_STEREO: - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - case IVAS_AUDIO_CONFIG_ISM1: - case IVAS_AUDIO_CONFIG_ISM2: - case IVAS_AUDIO_CONFIG_ISM3: - case IVAS_AUDIO_CONFIG_ISM4: - { - nchan_transport = audioCfg2channels( input_audio_config ); - for ( s = 0; s < hReverb->full_block_size; s++ ) - { - float temp = pcm_in[0][input_offset + s]; - for ( i = 1; i < nchan_transport; i++ ) - { - temp += pcm_in[i][input_offset + s]; - } - pPcm_out[s] = dmx_gain * temp; - } - break; - } - case IVAS_AUDIO_CONFIG_MONO: /* ~'ZOA_1' */ - case IVAS_AUDIO_CONFIG_FOA: - case IVAS_AUDIO_CONFIG_HOA2: - case IVAS_AUDIO_CONFIG_HOA3: - { - for ( s = 0; s < hReverb->full_block_size; s++ ) - { - pPcm_out[s] = dmx_gain * pcm_in[0][input_offset + s]; - } - break; - } - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported input format for reverb" ); - break; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function predelay_block() * @@ -3427,61 +2050,6 @@ static void predelay_block_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function predelay_block() - * - * Perform a predelay - *-----------------------------------------------------------------------------------------*/ - -static void predelay_block( - const REVERB_HANDLE hReverb, - float *pInput, - float *pOutput ) -{ - uint16_t i, idx, n_samples, blk_size; - uint16_t max_blk_size = (uint16_t) hReverb->predelay_line.Delay; - - if ( max_blk_size < 2 ) - { - if ( max_blk_size == 0 ) /* zero-length delay line: just copy the data from input to output */ - { - for ( i = 0; i < hReverb->full_block_size; i++ ) - { - pOutput[i] = pInput[i]; - } - } - else /* 1-sample length delay line: feed the data sample-by-sample */ - { - for ( i = 0; i < hReverb->full_block_size; i++ ) - { - pOutput[i] = ivas_rev_delay_line_get_sample( &( hReverb->predelay_line ) ); - ivas_rev_delay_line_feed_sample( &( hReverb->predelay_line ), pInput[i] ); - } - } - } - else /* multiple-sample length delay line: use block processing */ - { - idx = 0; - n_samples = hReverb->full_block_size; - while ( n_samples > 0 ) - { - blk_size = n_samples; - if ( blk_size > max_blk_size ) - { - blk_size = max_blk_size; - } - ivas_rev_delay_line_get_sample_blk( &( hReverb->predelay_line ), blk_size, &pOutput[idx] ); - ivas_rev_delay_line_feed_sample_blk( &( hReverb->predelay_line ), blk_size, &pInput[idx] ); - idx += blk_size; - n_samples -= blk_size; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function mix_output_block() * @@ -3503,285 +2071,57 @@ static void mix_output_block_fx( move32(); pOutR[i] = L_add( pInR[i], ( L_shr( pOutR[i], 2 ) ) ); move32(); - } - - return; -} -#else -/*-----------------------------------------------------------------------------------------* - * Function mix_output_block() - * - * mix one block of *pInL and *pInR samples into *pOutL and *pOutL respectively - *-----------------------------------------------------------------------------------------*/ - -static void mix_output_block( - const REVERB_HANDLE hReverb, - const float *pInL, - const float *pInR, - float *pOutL, - float *pOutR ) -{ - uint16_t i; - - for ( i = 0; i < hReverb->full_block_size; i++ ) - { - pOutL[i] += pInL[i]; - pOutR[i] += pInR[i]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * ivas_reverb_process() - * - * Process the input PCM audio into output PCM audio, applying reverb - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_reverb_process_fx( - const REVERB_HANDLE hReverb, /* i : Reverberator handle */ - const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ - const Word16 mix_signals, /* i : add reverb to output signal */ - Word32 *pcm_in_fx[], /* i Q11 : the PCM audio to apply reverb on */ - Word32 *pcm_out_fx[], /* o Q11 : the PCM audio with reverb applied */ - const Word16 i_ts /* i : subframe index */ -) -{ - Word32 tmp0_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp1_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp2_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - ivas_error error; - - IF( NE_32( ( error = downmix_input_block_fx( hReverb, pcm_in_fx, input_audio_config, tmp1_fx, i_ts * hReverb->full_block_size ) ), IVAS_ERR_OK ) ) - { - return error; - } - - predelay_block_fx( hReverb, tmp1_fx, tmp0_fx ); - - reverb_block_fx( hReverb, tmp0_fx, tmp1_fx, tmp2_fx ); - - IF( mix_signals ) - { - mix_output_block_fx( hReverb, tmp1_fx, tmp2_fx, &pcm_out_fx[0][i_ts * hReverb->full_block_size], &pcm_out_fx[1][i_ts * hReverb->full_block_size] ); - } - ELSE - { - MVR2R_WORD32( tmp1_fx, &pcm_out_fx[0][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); - MVR2R_WORD32( tmp2_fx, &pcm_out_fx[1][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); - } - - return IVAS_ERR_OK; -} -#else -/*-----------------------------------------------------------------------------------------* - * ivas_reverb_process() - * - * Process the input PCM audio into output PCM audio, applying reverb - *-----------------------------------------------------------------------------------------*/ - -ivas_error ivas_reverb_process( - const REVERB_HANDLE hReverb, /* i : Reverberator handle */ - const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ - const int16_t mix_signals, /* i : add reverb to output signal */ - float *pcm_in[], /* i : the PCM audio to apply reverb on */ - float *pcm_out[], /* o : the PCM audio with reverb applied */ - const int16_t i_ts /* i : subframe index */ -) -{ - float tmp0[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp1[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp2[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - ivas_error error; - - if ( ( error = downmix_input_block( hReverb, pcm_in, input_audio_config, tmp1, i_ts * hReverb->full_block_size ) ) != IVAS_ERR_OK ) - { - return error; - } - - predelay_block( hReverb, tmp1, tmp0 ); - - reverb_block( hReverb, tmp0, tmp1, tmp2 ); - - if ( mix_signals ) - { - mix_output_block( hReverb, tmp1, tmp2, &pcm_out[0][i_ts * hReverb->full_block_size], &pcm_out[1][i_ts * hReverb->full_block_size] ); - } - else - { - mvr2r( tmp1, &pcm_out[0][i_ts * hReverb->full_block_size], hReverb->full_block_size ); - mvr2r( tmp2, &pcm_out[1][i_ts * hReverb->full_block_size], hReverb->full_block_size ); - } - - return IVAS_ERR_OK; -} -#endif - -/*------------------------------------------------------------------------- - * ivas_binaural_reverb_processSubFrame() - * - * Compute the reverberation - room effect - *------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void ivas_binaural_reverb_processSubframe( - REVERB_STRUCT_HANDLE hReverb, /* i/o: binaural reverb handle */ - const int16_t numInChannels, /* i : num inputs to be processed */ - const int16_t numSlots, /* i : number of slots to be processed */ - float inReal[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data real, Comment: This change swaps two first dimensions as first dimension is not constant. */ - float inImag[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : input CLDFB data imag */ - float outReal[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* o : output CLDFB data real */ - float outImag[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX] /* o : output CLDFB data imag */ -) -{ - /* Declare the required variables */ - int16_t idx, bin, ch, sample, invertSampleIndex, tapIdx, *phaseShiftTypePr; - float **tapRealPr, **tapImagPr; - push_wmops( "binaural_reverb" ); - - /* 1) Rotate the data in the loop buffer of the reverberator. - * Notice that the audio at the loop buffers is at time-inverted order - * for convolution purposes later on. */ - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - /* Move the data forwards by blockSize (i.e. by the frame size of 16 CLDFB slots) */ - mvr2r( hReverb->loopBufReal[bin], hReverb->loopBufReal[bin] + numSlots, hReverb->loopBufLength[bin] ); - mvr2r( hReverb->loopBufImag[bin], hReverb->loopBufImag[bin] + numSlots, hReverb->loopBufLength[bin] ); - - /* Add the data from the end of the loop to the beginning, with an attenuation factor - * according to RT60. This procedure generates an IIR decaying response. The response - * is decorrelated later on. */ - - // loopAttenuationFactor ->Q31 - - v_multc( hReverb->loopBufReal[bin] + hReverb->loopBufLength[bin], hReverb->loopAttenuationFactor[bin], hReverb->loopBufReal[bin], numSlots ); - v_multc( hReverb->loopBufImag[bin] + hReverb->loopBufLength[bin], hReverb->loopAttenuationFactor[bin], hReverb->loopBufImag[bin], numSlots ); - } - - /* 2) Apply the determined pre-delay to the input audio, and add the delayed audio to the loop. */ - // hReverb->reverbEqGains[bin]; ->Q31// - - idx = hReverb->preDelayBufferIndex; - for ( sample = 0; sample < numSlots; sample++ ) - { - invertSampleIndex = numSlots - sample - 1; - - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - /* Add from pre-delay buffer a sample to the loop buffer, in a time-inverted order. - * Also apply the spectral gains determined for the reverberation */ - hReverb->loopBufReal[bin][invertSampleIndex] += hReverb->preDelayBufferReal[idx][bin] * hReverb->reverbEqGains[bin]; - hReverb->loopBufImag[bin][invertSampleIndex] += hReverb->preDelayBufferImag[idx][bin] * hReverb->reverbEqGains[bin]; - hReverb->preDelayBufferReal[idx][bin] = 0.0f; - hReverb->preDelayBufferImag[idx][bin] = 0.0f; - } - - /* Add every second input channel as is to the pre-delay buffer, and every second input channel with - * 90 degrees phase shift to reduce energy imbalances between coherent and incoherent sounds */ - for ( ch = 0; ch < numInChannels; ch++ ) - { - if ( ch % 2 ) - { - v_add( hReverb->preDelayBufferReal[idx], inReal[ch][sample], hReverb->preDelayBufferReal[idx], hReverb->numBins ); - v_add( hReverb->preDelayBufferImag[idx], inImag[ch][sample], hReverb->preDelayBufferImag[idx], hReverb->numBins ); - } - else - { - v_sub( hReverb->preDelayBufferReal[idx], inImag[ch][sample], hReverb->preDelayBufferReal[idx], hReverb->numBins ); - v_add( hReverb->preDelayBufferImag[idx], inReal[ch][sample], hReverb->preDelayBufferImag[idx], hReverb->numBins ); - } - } - idx = ( idx + 1 ) % hReverb->preDelayBufferLength; - } - hReverb->preDelayBufferIndex = idx; - - /* 3) Perform the filtering/decorrelating, using complex and sparse FIR filtering */ - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) - { - /* These tap pointers have been determined to point to the loop buffer at sparse locations */ - tapRealPr = hReverb->tapPointersReal[bin][ch]; - tapImagPr = hReverb->tapPointersImag[bin][ch]; + } - phaseShiftTypePr = hReverb->tapPhaseShiftType[bin][ch]; + return; +} +/*-----------------------------------------------------------------------------------------* + * ivas_reverb_process() + * + * Process the input PCM audio into output PCM audio, applying reverb + *-----------------------------------------------------------------------------------------*/ - /* Flush output */ - set_f( hReverb->outputBufferReal[bin][ch], 0.0f, numSlots ); - set_f( hReverb->outputBufferImag[bin][ch], 0.0f, numSlots ); +ivas_error ivas_reverb_process_fx( + const REVERB_HANDLE hReverb, /* i : Reverberator handle */ + const AUDIO_CONFIG input_audio_config, /* i : reverb. input audio configuration */ + const Word16 mix_signals, /* i : add reverb to output signal */ + Word32 *pcm_in_fx[], /* i Q11 : the PCM audio to apply reverb on */ + Word32 *pcm_out_fx[], /* o Q11 : the PCM audio with reverb applied */ + const Word16 i_ts /* i : subframe index */ +) +{ + Word32 tmp0_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp1_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES], tmp2_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + ivas_error error; - /* Add from temporally decaying sparse tap locations the audio to the output. */ - for ( tapIdx = 0; tapIdx < hReverb->taps[bin][ch]; tapIdx++ ) - { - switch ( phaseShiftTypePr[tapIdx] ) - { - case 0: /* 0 degrees phase */ - v_add( hReverb->outputBufferReal[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferReal[bin][ch], numSlots ); - v_add( hReverb->outputBufferImag[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferImag[bin][ch], numSlots ); - break; - case 1: /* 90 degrees phase */ - v_sub( hReverb->outputBufferReal[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferReal[bin][ch], numSlots ); - v_add( hReverb->outputBufferImag[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferImag[bin][ch], numSlots ); - break; - case 2: /* 180 degrees phase */ - v_sub( hReverb->outputBufferReal[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferReal[bin][ch], numSlots ); - v_sub( hReverb->outputBufferImag[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferImag[bin][ch], numSlots ); - break; - default: /* 270 degrees phase */ - v_add( hReverb->outputBufferReal[bin][ch], tapImagPr[tapIdx], hReverb->outputBufferReal[bin][ch], numSlots ); - v_sub( hReverb->outputBufferImag[bin][ch], tapRealPr[tapIdx], hReverb->outputBufferImag[bin][ch], numSlots ); - break; - } - } - } + IF( NE_32( ( error = downmix_input_block_fx( hReverb, pcm_in_fx, input_audio_config, tmp1_fx, i_ts * hReverb->full_block_size ) ), IVAS_ERR_OK ) ) + { + return error; + } - /* Generate diffuse field binaural coherence by mixing the incoherent reverberated channels with pre-defined gains */ - if ( bin <= hReverb->highestBinauralCoherenceBin ) - { - if ( hReverb->useBinauralCoherence ) - { - for ( sample = 0; sample < numSlots; sample++ ) - { - float leftRe, rightRe, leftIm, rightIm; + predelay_block_fx( hReverb, tmp1_fx, tmp0_fx ); - leftRe = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferReal[bin][0][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferReal[bin][1][sample]; - rightRe = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferReal[bin][1][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferReal[bin][0][sample]; - leftIm = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferImag[bin][0][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferImag[bin][1][sample]; - rightIm = hReverb->binauralCoherenceDirectGains[bin] * hReverb->outputBufferImag[bin][1][sample] + hReverb->binauralCoherenceCrossmixGains[bin] * hReverb->outputBufferImag[bin][0][sample]; + reverb_block_fx( hReverb, tmp0_fx, tmp1_fx, tmp2_fx ); - hReverb->outputBufferReal[bin][0][sample] = leftRe; - hReverb->outputBufferReal[bin][1][sample] = rightRe; - hReverb->outputBufferImag[bin][0][sample] = leftIm; - hReverb->outputBufferImag[bin][1][sample] = rightIm; - } - } - } + IF( mix_signals ) + { + mix_output_block_fx( hReverb, tmp1_fx, tmp2_fx, &pcm_out_fx[0][i_ts * hReverb->full_block_size], &pcm_out_fx[1][i_ts * hReverb->full_block_size] ); } - - /* 4) Write data to output */ - for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + ELSE { - for ( sample = 0; sample < numSlots; sample++ ) - { - /* Audio was in the temporally inverted order for convolution, re-invert audio to output */ - invertSampleIndex = numSlots - sample - 1; - - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - outReal[ch][sample][bin] = hReverb->outputBufferReal[bin][ch][invertSampleIndex]; - outImag[ch][sample][bin] = hReverb->outputBufferImag[bin][ch][invertSampleIndex]; - } - for ( ; bin < CLDFB_NO_CHANNELS_MAX; bin++ ) - { - outReal[ch][sample][bin] = 0.0f; - outImag[ch][sample][bin] = 0.0f; - } - } + MVR2R_WORD32( tmp1_fx, &pcm_out_fx[0][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); + MVR2R_WORD32( tmp2_fx, &pcm_out_fx[1][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size ); } - pop_wmops(); - return; + return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED +/*------------------------------------------------------------------------- + * ivas_binaural_reverb_processSubFrame() + * + * Compute the reverberation - room effect + *------------------------------------------------------------------------*/ + + /*------------------------------------------------------------------------- * ivas_binaural_reverb_processSubFrame_fx() * @@ -3962,13 +2302,11 @@ void ivas_binaural_reverb_processSubframe_fx( return; } -#endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_open() * * Allocate and initialize binaural room reverberator handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error ivas_binaural_reverb_open_fx( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ const Word16 numBins, /* i : Q0 number of CLDFB bins */ @@ -4087,179 +2425,12 @@ static ivas_error ivas_binaural_reverb_open_fx( return IVAS_ERR_OK; } -#else - -static ivas_error ivas_binaural_reverb_open( - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - const int32_t sampling_rate, /* i : sampling rate */ - const float *revTimes, /* i : reverberation times T60 for each CLDFB bin in seconds */ - const float *revEnes, /* i : spectrum for reverberated sound at each CLDFB bin */ - const int16_t preDelay /* i : reverb pre-delay in CLDFB slots */ -) -{ - int16_t bin, chIdx, k, len; - REVERB_STRUCT_HANDLE hReverb; - - if ( ( *hReverbPr = (REVERB_STRUCT_HANDLE) malloc( sizeof( REVERB_STRUCT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - hReverb = *hReverbPr; - - hReverb->useBinauralCoherence = 1; - hReverb->preDelayBufferLength = 1; - hReverb->preDelayBufferIndex = 0; - - hReverb->numBins = numBins; - hReverb->blockSize = numCldfbSlotsPerFrame; - - for ( k = 0; k < REVERB_PREDELAY_MAX + 1; k++ ) - { -#ifndef IVAS_FLOAT_FIXED - set_f( hReverb->preDelayBufferReal[k], 0.0f, hReverb->numBins ); - set_f( hReverb->preDelayBufferImag[k], 0.0f, hReverb->numBins ); -#else - set32_fx( hReverb->preDelayBufferReal_fx[k], 0, hReverb->numBins ); - set32_fx( hReverb->preDelayBufferImag_fx[k], 0, hReverb->numBins ); -#endif - } - - for ( bin = 0; bin < hReverb->numBins; bin++ ) - { - /* Loop Buffer */ - hReverb->loopBufLengthMax[bin] = (int16_t) ( 500 / ( 1 + bin ) + ( CLDFB_NO_CHANNELS_MAX - bin ) ); - - len = hReverb->loopBufLengthMax[bin] + hReverb->blockSize; -#ifndef IVAS_FLOAT_FIXED - if ( ( hReverb->loopBufReal[bin] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->loopBufImag[bin] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - set_f( hReverb->loopBufReal[bin], 0.0f, len ); - set_f( hReverb->loopBufImag[bin], 0.0f, len ); -#else - if ( ( hReverb->loopBufReal_fx[bin] = (Word32 *) malloc( len * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->loopBufImag_fx[bin] = (Word32 *) malloc( len * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - set32_fx( hReverb->loopBufReal_fx[bin], 0, len ); - set32_fx( hReverb->loopBufImag_fx[bin], 0, len ); -#endif - - /* Determine loop buffer length. The following formula is manually tuned to generate sufficiently long - * but not excessively long loops to generate reverberation. */ - /* Note: the resulted length is very sensitive to the precision of the constants below (e.g. 1.45 vs. 1.45f) */ - hReverb->loopBufLength[bin] = (int16_t) ( 1.45 * (int16_t) ( revTimes[bin] * 150.0 ) + 1 ); - hReverb->loopBufLength[bin] = min( hReverb->loopBufLength[bin], hReverb->loopBufLengthMax[bin] ); - - /* Sparse Filter Tap Locations */ - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - len = hReverb->loopBufLength[bin]; - - if ( ( hReverb->tapPhaseShiftType[bin][chIdx] = (int16_t *) malloc( len * sizeof( int16_t ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - set_s( hReverb->tapPhaseShiftType[bin][chIdx], 0, len ); -#ifndef IVAS_FLOAT_FIXED - if ( ( hReverb->tapPointersReal[bin][chIdx] = (float **) malloc( len * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->tapPointersImag[bin][chIdx] = (float **) malloc( len * sizeof( float * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } -#endif -#ifdef IVAS_FLOAT_FIXED - if ( ( hReverb->tapPointersReal_fx[bin][chIdx] = (Word32 **) malloc( len * sizeof( Word32 * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->tapPointersImag_fx[bin][chIdx] = (Word32 **) malloc( len * sizeof( Word32 * ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } -#endif - - len = hReverb->blockSize; -#ifdef IVAS_FLOAT_FIXED - if ( ( hReverb->outputBufferReal_fx[bin][chIdx] = (Word32 *) malloc( len * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->outputBufferImag_fx[bin][chIdx] = (Word32 *) malloc( len * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - set32_fx( hReverb->outputBufferReal_fx[bin][chIdx], 0, len ); - set32_fx( hReverb->outputBufferImag_fx[bin][chIdx], 0, len ); -#else - if ( ( hReverb->outputBufferReal[bin][chIdx] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - if ( ( hReverb->outputBufferImag[bin][chIdx] = (float *) malloc( len * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural Reverberator\n" ) ); - } - - set_f( hReverb->outputBufferReal[bin][chIdx], 0.0f, len ); - set_f( hReverb->outputBufferImag[bin][chIdx], 0.0f, len ); -#endif - } - } - -#ifdef IVAS_FLOAT_FIXED - Word32 *revTimes_fx = (Word32 *) malloc( sizeof( Word32 ) * hReverb->numBins ); - Word32 *revEnes_fx = (Word32 *) malloc( sizeof( Word32 ) * hReverb->numBins ); - FOR( int i = 0; i < hReverb->numBins; i++ ) - { - revTimes_fx[i] = (Word32) ( revTimes[i] * ONE_IN_Q31 ); - revEnes_fx[i] = (Word32) ( revEnes[i] * ONE_IN_Q31 ); - } - ivas_binaural_reverb_setReverbTimes_fx( hReverb, sampling_rate, revTimes_fx, revEnes_fx ); - - free( revTimes_fx ); - free( revEnes_fx ); -#else - ivas_binaural_reverb_setReverbTimes( hReverb, sampling_rate, revTimes, revEnes ); -#endif - -#ifdef IVAS_FLOAT_FIXED - ivas_binaural_reverb_setPreDelay_fx( hReverb, preDelay ); -#else - ivas_binaural_reverb_setPreDelay( hReverb, preDelay ); -#endif - - return IVAS_ERR_OK; -} -#endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_fastconv() * * Allocate and initialize binaural room reverberator handle for FastConv *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_binaural_reverb_open_fastconv_fx( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ const Word16 numBins, /* i : number of CLDFB bins */ @@ -4311,55 +2482,12 @@ ivas_error ivas_binaural_reverb_open_fastconv_fx( return error; } -#else -ivas_error ivas_binaural_reverb_open_fastconv( - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ - const AUDIO_CONFIG internal_config, /* i : internal audio config for FastConv */ - const int32_t sampling_rate, /* i : sampling rate */ - const HRTFS_FASTCONV_HANDLE hHrtfFastConv /* i : FastConv HRTF handle */ -) -{ - ivas_error error; - const float *revTimes; - const float *revEne; - float t60[CLDFB_NO_CHANNELS_MAX]; - float ene[CLDFB_NO_CHANNELS_MAX]; - int16_t preDelay; - - error = IVAS_ERR_OK; - - if ( ( roomAcoustics != NULL ) && roomAcoustics->override ) - { - revTimes = t60; - revEne = ene; - if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfFastConv, internal_config, false, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) - { - return error; - } - preDelay = (int16_t) roundf( 48000.0f * roomAcoustics->acousticPreDelay / CLDFB_NO_CHANNELS_MAX ); - } - else - { - revTimes = hHrtfFastConv->fastconvReverberationTimes; - revEne = hHrtfFastConv->fastconvReverberationEneCorrections; - preDelay = 10; - } - - error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); - - return error; -} -#endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_open_parambin() * * Allocate and initialize binaural room reverberator handle for ParamBin *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_binaural_reverb_open_parambin( REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ const Word16 numBins, /* i : number of CLDFB bins Q0 */ @@ -4397,48 +2525,6 @@ ivas_error ivas_binaural_reverb_open_parambin( return error; } -#else -ivas_error ivas_binaural_reverb_open_parambin( - REVERB_STRUCT_HANDLE *hReverbPr, /* i/o: binaural reverb handle */ - const int16_t numBins, /* i : number of CLDFB bins */ - const int16_t numCldfbSlotsPerFrame, /* i : number of CLDFB slots per frame */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *roomAcoustics, /* i/o: room acoustics parameters */ - const int32_t sampling_rate, /* i : sampling rate */ - const HRTFS_PARAMBIN_HANDLE hHrtfParambin /* i : Parametric binauralizer HRTF handle */ -) -{ - ivas_error error; - const float *revTimes; - const float *revEne; - float t60[CLDFB_NO_CHANNELS_MAX]; - float ene[CLDFB_NO_CHANNELS_MAX]; - int16_t preDelay; - - error = IVAS_ERR_OK; - - if ( ( roomAcoustics != NULL ) && roomAcoustics->override ) - { - revTimes = t60; - revEne = ene; - /* Todo Philips: This needs a suitable function for ParamBin here. */ - // if ( ( error = ivas_reverb_prepare_cldfb_params( roomAcoustics, hHrtfFastConv, internal_config, false, sampling_rate, t60, ene ) ) != IVAS_ERR_OK ) - // { - // return error; - // } - preDelay = (int16_t) roundf( 48000.0f * roomAcoustics->acousticPreDelay / CLDFB_NO_CHANNELS_MAX ); - } - else - { - revTimes = hHrtfParambin->parametricReverberationTimes; - revEne = hHrtfParambin->parametricReverberationEneCorrections; - preDelay = 10; - } - - error = ivas_binaural_reverb_open( hReverbPr, numBins, numCldfbSlotsPerFrame, sampling_rate, revTimes, revEne, preDelay ); - - return error; -} -#endif /*------------------------------------------------------------------------- * ivas_binaural_reverb_close() @@ -4446,7 +2532,6 @@ ivas_error ivas_binaural_reverb_open_parambin( * Close binaural room reverberator handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_binaural_reverb_close_fx( REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ ) @@ -4478,35 +2563,3 @@ void ivas_binaural_reverb_close_fx( return; } -#else -void ivas_binaural_reverb_close( - REVERB_STRUCT_HANDLE *hReverb /* i/o: binaural reverb handle */ -) -{ - int16_t bin, chIdx; - - if ( hReverb == NULL || *hReverb == NULL ) - { - return; - } - - for ( bin = 0; bin < ( *hReverb )->numBins; bin++ ) - { - for ( chIdx = 0; chIdx < BINAURAL_CHANNELS; chIdx++ ) - { - free( ( *hReverb )->tapPhaseShiftType[bin][chIdx] ); - free( ( *hReverb )->tapPointersReal[bin][chIdx] ); - free( ( *hReverb )->tapPointersImag[bin][chIdx] ); - free( ( *hReverb )->outputBufferReal[bin][chIdx] ); - free( ( *hReverb )->outputBufferImag[bin][chIdx] ); - } - free( ( *hReverb )->loopBufReal[bin] ); - free( ( *hReverb )->loopBufImag[bin] ); - } - - free( ( *hReverb ) ); - ( *hReverb ) = NULL; - - return; -} -#endif diff --git a/lib_rend/ivas_reverb_delay_line.c b/lib_rend/ivas_reverb_delay_line.c index 9025b1597..c8db27955 100644 --- a/lib_rend/ivas_reverb_delay_line.c +++ b/lib_rend/ivas_reverb_delay_line.c @@ -36,11 +36,8 @@ #include "ivas_prot_rend.h" #include "prot.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "debug.h" -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_rev_delay_line_init() * @@ -103,119 +100,6 @@ void ivas_rev_delay_line_feed_sample_fx( } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_rev_delay_line_init() - * - * Initialize the delay line - *-----------------------------------------------------------------------------------------*/ - -void ivas_rev_delay_line_init( - ivas_rev_delay_line_t *pDelay, /* o : the delay line to initialize */ - float *memory_buffer, /* i : the memory buffer to use for the delay line */ - const uint16_t delay, /* i : the delay */ - const uint16_t maxdelay /* i : maximum delay to be supported */ -) -{ - pDelay->MaxDelay = maxdelay; - - if ( delay <= pDelay->MaxDelay ) - { - pDelay->Delay = delay; - } - else - { - pDelay->Delay = pDelay->MaxDelay; - } - - pDelay->pBuffer = memory_buffer; - set_f( pDelay->pBuffer, 0, pDelay->MaxDelay ); - pDelay->BufferPos = 0; - pDelay->Gain = 1.0f; - - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_rev_delay_line_feed_sample() - * - * Feed sample into delay line; NOTE: get a sample out of the line before feeding the next - *-----------------------------------------------------------------------------------------*/ - -void ivas_rev_delay_line_feed_sample( - ivas_rev_delay_line_t *pDelay, /* i : the delay line */ - float input /* i : the sample to feed */ -) -{ - pDelay->pBuffer[pDelay->BufferPos++] = input; - - if ( pDelay->BufferPos >= pDelay->Delay ) - { - pDelay->BufferPos = 0; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_rev_delay_line_feed_sample_blk() - * - * Feed sample block into delay line; NOTE: get samples out of the line before feeding the next block - *-----------------------------------------------------------------------------------------*/ - -void ivas_rev_delay_line_feed_sample_blk( - ivas_rev_delay_line_t *pDelay, /* i/o: the delay line */ - const uint16_t blk_size, /* i : number of samples in the input data block */ - float *input /* i : the samples to feed */ -) -{ - float *pDst, *pSrc; - uint16_t i, pos; - - pos = (uint16_t) pDelay->BufferPos; - - if ( pos + blk_size > (uint16_t) pDelay->Delay ) /* splitting block in 2 if it exceeds buffer end limit */ - { - uint16_t blk_size_1; /* 1st block up to the end of the buffer */ - uint16_t blk_size_2; /* 2nd block at the beginning of the buffer */ - - blk_size_1 = (uint16_t) pDelay->Delay - pos; - blk_size_2 = blk_size - blk_size_1; - pDst = &pDelay->pBuffer[pos]; - for ( i = 0; i < blk_size_1; i++ ) - { - pDst[i] = input[i]; - } - pDst = &pDelay->pBuffer[0]; - pSrc = &input[blk_size_1]; - for ( i = 0; i < blk_size_2; i++ ) - { - pDst[i] = pSrc[i]; - } - pos = blk_size_2; - } - else /* copy only 1 data block directly if it fits in the buffer */ - { - pDst = &pDelay->pBuffer[pos]; - for ( i = 0; i < blk_size; i++ ) - { - pDst[i] = input[i]; - } - pos += blk_size; - } - pDelay->BufferPos = pos; - - if ( pDelay->BufferPos >= pDelay->Delay ) - { - pDelay->BufferPos = 0; - } - - return; -} - -#else /*-----------------------------------------------------------------------------------------* * Function ivas_rev_delay_line_feed_sample_blk() * @@ -390,105 +274,3 @@ void ivas_rev_delay_line_get_sample_blk_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_rev_delay_line_get_sample() - * - * Get sample out of delay line, amplified by set gain - * NOTE: get a sample out of the line before feeding the next - *-----------------------------------------------------------------------------------------*/ - -/*! r: sample gotten out of delay line, and amplified by set gain */ -float ivas_rev_delay_line_get_sample( - ivas_rev_delay_line_t *pDelay /* i/o: the delay line */ -) -{ - if ( pDelay->Gain == 1.0f ) - { - - return pDelay->pBuffer[pDelay->BufferPos]; - } - else - { - - return pDelay->Gain * pDelay->pBuffer[pDelay->BufferPos]; - } -} -/*-----------------------------------------------------------------------------------------* - * Function ivas_rev_delay_line_get_sample_blk() - * - * Get a block samples out of delay line, amplified by set gain - *-----------------------------------------------------------------------------------------*/ - -void ivas_rev_delay_line_get_sample_blk( - ivas_rev_delay_line_t *pDelay, /* i : the delay line */ - const uint16_t blk_size, /* i : number of samples in the data block */ - float *output /* i/o: amples gotten out of delay line, and amplified by set gainin */ -) -{ - float *pDst, *pSrc; - uint16_t i, pos; - float gain; - - pos = (uint16_t) pDelay->BufferPos; - gain = pDelay->Gain; - - if ( pos + blk_size > (uint16_t) pDelay->Delay ) /* splitting block in 2 if it exceeds buffer end limit */ - { - uint16_t blk_size_1; /* 1st block up to the end of the buffer */ - uint16_t blk_size_2; /* 2nd block at the beginning of the buffer */ - - blk_size_1 = (uint16_t) pDelay->Delay - pos; - blk_size_2 = blk_size - blk_size_1; - pSrc = &pDelay->pBuffer[pos]; - if ( gain == 1.0f ) - { - for ( i = 0; i < blk_size_1; i++ ) - { - output[i] = pSrc[i]; - } - pSrc = &pDelay->pBuffer[0]; - pDst = &output[blk_size_1]; - for ( i = 0; i < blk_size_2; i++ ) - { - pDst[i] = pSrc[i]; - } - } - else - { - for ( i = 0; i < blk_size_1; i++ ) - { - output[i] = gain * pSrc[i]; - } - pSrc = &pDelay->pBuffer[0]; - pDst = &output[blk_size_1]; - for ( i = 0; i < blk_size_2; i++ ) - { - pDst[i] = gain * pSrc[i]; - } - } - } - else /* copy only 1 data block directly if it fits in the buffer */ - { - pSrc = &pDelay->pBuffer[pos]; - - if ( gain == 1.0f ) - { - for ( i = 0; i < blk_size; i++ ) - { - output[i] = pSrc[i]; - } - } - else - { - for ( i = 0; i < blk_size; i++ ) - { - output[i] = gain * pSrc[i]; - } - } - } - - return; -} -#endif diff --git a/lib_rend/ivas_reverb_fft_filter.c b/lib_rend/ivas_reverb_fft_filter.c index bae4d3f36..79cb544b2 100644 --- a/lib_rend/ivas_reverb_fft_filter.c +++ b/lib_rend/ivas_reverb_fft_filter.c @@ -36,26 +36,17 @@ #include "ivas_prot_rend.h" #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "debug.h" #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#endif /*------------------------------------------------------------------------------------------* * Static functions declarations *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void fft_wrapper_2ch( float *buffer_L, float *buffer_R, const int16_t fft_size ); - -static void ifft_wrapper_2ch( float *buffer_L, float *buffer_R, const int16_t fft_size ); -#else static void fft_wrapper_2ch_fx( Word32 *buffer_L, Word32 *buffer_R, const Word16 fft_size ); static void ifft_wrapper_2ch_fx( Word32 *buffer_L, Word32 *buffer_R, const Word16 fft_size ); -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function int_log2() * @@ -93,45 +84,6 @@ UWord16 int_log2( return l2; } -#else -/*-----------------------------------------------------------------------------------------* - * Function int_log2() - * - * takes integer log2 of power_of_2 input value. e.g. int_log2(1024) = 10 - * powerOf2 must be a power of two between 2^0 and 2^15 - * NOT valid for integers thar are NOT a power of 2 - *-----------------------------------------------------------------------------------------*/ - -/*! r: integer log2 */ -uint16_t int_log2( - uint32_t powerOf2 ) -{ - int16_t l2 = 15; - - if ( powerOf2 & 0x00FF ) - { - l2 -= 8; - } - - if ( powerOf2 & 0x0F0F ) - { - l2 -= 4; - } - - if ( powerOf2 & 0x3333 ) - { - l2 -= 2; - } - - if ( powerOf2 & 0x5555 ) - { - l2 -= 1; - } - - return l2; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function fft_wrapper_2ch() * @@ -175,45 +127,6 @@ static void fft_wrapper_2ch_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function fft_wrapper_2ch() - * - * Wrapper uses complex FFT to perform real-input FFT on 2 channels simultaneously - *-----------------------------------------------------------------------------------------*/ - -static void fft_wrapper_2ch( - float *buffer_L, - float *buffer_R, - const int16_t fft_size ) -{ - const int16_t half_sz = fft_size >> 1; - int16_t k, mirror_k; - float left_re, left_im, right_re, right_im; - - DoRTFTn( buffer_L, buffer_R, fft_size ); - - /* separating left and right channel spectra */ - for ( k = 1; k < half_sz; k++ ) - { - mirror_k = fft_size - k; - - left_re = 0.5f * ( buffer_L[k] + buffer_L[mirror_k] ); - left_im = 0.5f * ( buffer_R[k] - buffer_R[mirror_k] ); - - right_re = 0.5f * ( buffer_R[k] + buffer_R[mirror_k] ); - right_im = -0.5f * ( buffer_L[k] - buffer_L[mirror_k] ); - - buffer_L[k] = left_re; - buffer_R[k] = right_re; - buffer_L[mirror_k] = left_im; - buffer_R[mirror_k] = right_im; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ifft_wrapper_2ch() * @@ -257,52 +170,6 @@ static void ifft_wrapper_2ch_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ifft_wrapper_2ch() - * - * Wrapper uses complex FFT to perform real-output IFFT on 2 channels simultaneously - *-----------------------------------------------------------------------------------------*/ - -static void ifft_wrapper_2ch( - float *buffer_L, - float *buffer_R, - const int16_t fft_size ) -{ - float buffer_L_re, buffer_L_im, buffer_R_re, buffer_R_im; - const int16_t half_sz = fft_size >> 1; - const float inv_sz = 1.0f / (float) fft_size; - int16_t k, mirror_k; - - /* Re-arranging and adding spectra in order to obtain L/R signals as re/im ifft outputs */ - for ( k = 1; k < half_sz; k++ ) - { - mirror_k = fft_size - k; - - buffer_L_re = buffer_L[k]; - buffer_L_im = buffer_L[mirror_k]; - buffer_R_re = buffer_R[k]; - buffer_R_im = buffer_R[mirror_k]; - - buffer_L[k] = buffer_L_re + buffer_R_im; - buffer_L[mirror_k] = buffer_L_re - buffer_R_im; - buffer_R[k] = buffer_R_re - buffer_L_im; - buffer_R[mirror_k] = buffer_R_re + buffer_L_im; - } - - DoRTFTn( buffer_L, buffer_R, fft_size ); - - /* Apply (1/length) scaling for inverse FFT */ - for ( k = 0; k < fft_size; k++ ) - { - buffer_L[k] *= inv_sz; - buffer_R[k] *= inv_sz; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_t2f_f2t_init() * @@ -368,71 +235,6 @@ void ivas_reverb_t2f_f2t_ClearHistory( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_t2f_f2t_init() - * - * Initializes t2t_f2t struct and clears history - *-----------------------------------------------------------------------------------------*/ - -int16_t ivas_reverb_t2f_f2t_init( - ivas_reverb_t2f_f2t_t *t2f_f2t, - const int16_t fft_size, - const int16_t block_size ) -{ - if ( fft_size > RV_FILTER_MAX_FFT_SIZE ) - { - return 1; - } - - if ( ( block_size > fft_size ) || ( fft_size - block_size > RV_FILTER_MAX_HISTORY ) ) - { - return 2; - } - - t2f_f2t->log2_fft_size = int_log2( fft_size ); - - if ( ( 1 << t2f_f2t->log2_fft_size ) != fft_size ) - { - return 3; /* fft_size not a power of 2 */ - } - t2f_f2t->fft_size = fft_size; - t2f_f2t->block_size = block_size; - t2f_f2t->hist_size = t2f_f2t->fft_size - t2f_f2t->block_size; - - if ( t2f_f2t->hist_size > RV_FILTER_MAX_HISTORY ) - { - t2f_f2t->hist_size = RV_FILTER_MAX_HISTORY; - } - - ivas_reverb_t2f_f2t_ClearHistory( t2f_f2t ); - - return 0; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_t2f_f2t_ClearHistory() - * - * Clears the history for the overlap length (fft_size - block_size) - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_t2f_f2t_ClearHistory( - ivas_reverb_t2f_f2t_t *t2f_f2t ) -{ - int16_t i; - float *hist_L = t2f_f2t->fft_history_L; - float *hist_R = t2f_f2t->fft_history_R; - - for ( i = 0; i < t2f_f2t->hist_size; i++ ) - { - hist_L[i] = 0.0f; - hist_R[i] = 0.0f; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_t2f_f2t_in() * @@ -491,59 +293,6 @@ void ivas_reverb_t2f_f2t_in_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_t2f_f2t_in() - * - * Input of block data, history is copied, fft is taken for both L/R channels - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_t2f_f2t_in( - ivas_reverb_t2f_f2t_t *t2f_f2t, - float *input_L, - float *input_R, - float *buffer_L, - float *buffer_R ) -{ - int16_t i; - int16_t hlen = t2f_f2t->hist_size; - int16_t bsiz = t2f_f2t->block_size; - float *hist_L = t2f_f2t->fft_history_L; - float *hist_R = t2f_f2t->fft_history_R; - float *pL, *pR; - - /* copy history to buffer */ - for ( i = 0; i < hlen; i++ ) - { - buffer_L[i] = hist_L[i]; - buffer_R[i] = hist_R[i]; - } - - /* copy input to buffer */ - pL = &buffer_L[hlen]; - pR = &buffer_R[hlen]; - for ( i = 0; i < bsiz; i++ ) - { - pL[i] = input_L[i]; - pR[i] = input_R[i]; - } - - /* copy buffer to history */ - pL = &buffer_L[bsiz]; - pR = &buffer_R[bsiz]; - for ( i = 0; i < hlen; i++ ) - { - hist_L[i] = pL[i]; - hist_R[i] = pR[i]; - } - - /* do FFT */ - fft_wrapper_2ch( buffer_L, buffer_R, t2f_f2t->fft_size ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_t2f_f2t_out() * @@ -573,36 +322,6 @@ void ivas_reverb_t2f_f2t_out_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_t2f_f2t_out() - * - * Input of frequency domain data, IFFT, copied to output (both L & R channels) - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_t2f_f2t_out( - ivas_reverb_t2f_f2t_t *t2f_f2t, - float *buffer_L, - float *buffer_R, - float *output_L, - float *output_R ) -{ - int16_t i; - float *pL = &buffer_L[t2f_f2t->hist_size]; - float *pR = &buffer_R[t2f_f2t->hist_size]; - - ifft_wrapper_2ch( buffer_L, buffer_R, t2f_f2t->fft_size ); - - for ( i = 0; i < t2f_f2t->block_size; i++ ) - { - output_L[i] = pL[i]; - output_R[i] = pR[i]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_fft_filter_init() * @@ -624,29 +343,6 @@ Word16 ivas_reverb_fft_filter_init( return 0; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_fft_filter_init() - * - * Initializes filter struct - *-----------------------------------------------------------------------------------------*/ - -int16_t ivas_reverb_fft_filter_init( - ivas_reverb_fft_filter_t *fft_filter, - const int16_t fft_size ) -{ - if ( fft_size > RV_FILTER_MAX_FFT_SIZE ) - { - return 1; - } - - fft_filter->fft_size = fft_size; - - return 0; -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_fft_filter_ComplexMul() * @@ -684,45 +380,11 @@ void ivas_reverb_fft_filter_ComplexMul_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_fft_filter_ComplexMul() - * - * Buffer is complex multiplied with fft_filter internal coefficients - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_fft_filter_ComplexMul( - ivas_reverb_fft_filter_t *fft_filter, - float *buffer ) -{ - int16_t f_spec, h, i, j; - float *spec; - float t; - - f_spec = fft_filter->fft_size; - h = f_spec >> 1; - spec = fft_filter->fft_spectrum; - - buffer[0] *= spec[0]; /* real multiply f0 DC */ - buffer[h] *= spec[h]; /* real multiply f_spec Nyquist */ - j = f_spec - 1; - for ( i = 1; i < h; i++ ) /*actual complex multiply in loop */ - { - t = buffer[i]; - buffer[i] = t * spec[i] - buffer[j] * spec[j]; - buffer[j] = t * spec[j] + buffer[j] * spec[i]; - j--; - } - - return; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR() * * Convert the FFTWF formatted spectrum to fft_real formatted spectrum *-----------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR_fx( rv_fftwf_type_complex_fx *spectrum, // i: Qx Word32 *fft_real, // o: Qx @@ -745,30 +407,8 @@ void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR_fx( return; } -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_fft_filter_ConvertFFTWF_2_FFTR( - rv_fftwf_type_complex *spectrum, - float *fft_real, - const int16_t fft_size ) -{ - int16_t i, h; - h = fft_size >> 1; - fft_real[0] = spectrum[0][0]; - fft_real[h] = spectrum[h][0]; - for ( i = 1; i < h; i++ ) - { - fft_real[i] = spectrum[i][0]; - fft_real[fft_size - i] = spectrum[i][1]; - } - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_fft_filter_CrossMix() * @@ -795,29 +435,8 @@ void ivas_reverb_fft_filter_CrossMix_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_fft_filter_CrossMix() * * buffer0 and 1 are cross mixed *-----------------------------------------------------------------------------------------*/ - -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_fft_filter_CrossMix( - float *buffer0, - float *buffer1, - const int16_t fft_size ) -{ - float t; - int16_t i; - - for ( i = 0; i < fft_size; i++ ) - { - t = buffer0[i]; - buffer0[i] = t + buffer1[i]; - buffer1[i] = t - buffer1[i]; - } - - return; -} -#endif diff --git a/lib_rend/ivas_reverb_filter_design.c b/lib_rend/ivas_reverb_filter_design.c index c0d147123..3e3c1515e 100644 --- a/lib_rend/ivas_reverb_filter_design.c +++ b/lib_rend/ivas_reverb_filter_design.c @@ -46,15 +46,8 @@ * Local constants *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -#define STEP_LIMIT_PIVOT_FREQ ( 1000.0f ) /* Pivot (initial reference) frequency for response gradient limit */ -#define RESPONSE_STEP_LIMIT_LF ( 4.0f ) /* Maximum step in dB per bin at low frequencies (< pivot frequency) */ -#define RESPONSE_STEP_LIMIT_HF ( 1.5f ) /* Maximum step in dB per bin at high frequencies (> pivot frequency) */ -#define EPS ( 1e-30f ) -#else #define RESPONSE_STEP_LIMIT_LF_FX ( 536870912 ) /* Q27 Maximum step in dB per bin at low frequencies (< pivot frequency) */ #define RESPONSE_STEP_LIMIT_HF_FX ( 1610612736 ) /* Q30 Maximum step in dB per bin at high frequencies (> pivot frequency) */ -#endif /*------------------------------------------------------------------------------------------* @@ -68,134 +61,6 @@ * from the amplitude spectrum of the input. *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void calc_min_phase( - rv_fftwf_type_complex *pSpectrum, - const int16_t fft_size, - float *pMinPhase ) -{ - int16_t idx; - const int16_t half_fft_size = fft_size >> 1; - const int16_t log2_fft_size = int_log2( fft_size ); - const int16_t spectrum_size = half_fft_size + 1; - const int16_t cepstrum_smoothing_extent = fft_size >> 3; - const float scale_factor = 1.0f / (float) fft_size; - - float pCepstrum[RV_FILTER_MAX_FFT_SIZE]; - float pFolded_cepstrum_re[RV_FILTER_MAX_FFT_SIZE]; - float pFolded_cepstrum_im[RV_FILTER_MAX_FFT_SIZE]; - float pFolded_cepstrum_smoothing_win[RV_FILTER_MAX_FFT_SIZE]; - float angle_increment; - float initial_angle; - - - /* Prepare the smoothing window. Portion of the pCepstrum that will be smoothed out by a window to prevent aliasing. */ - - /* The first portion of the pCepstrum is kept unchanged */ - for ( idx = 0; idx < half_fft_size - cepstrum_smoothing_extent; idx++ ) - { - pFolded_cepstrum_smoothing_win[idx] = 1.0f; - } - - /* Adding Hann half-window for smooth transition */ - angle_increment = EVS_PI / (float) ( 2 * cepstrum_smoothing_extent - 1 ); - - /* Initial angle set to match Hann window alignment in Matlab */ - initial_angle = 0.5f * ( EVS_PI + angle_increment ); - - for ( idx = 0; idx < cepstrum_smoothing_extent; idx++ ) - { - const float sine_value = sinf( initial_angle + angle_increment * idx ); - - pFolded_cepstrum_smoothing_win[idx + half_fft_size - cepstrum_smoothing_extent] = sine_value * sine_value; - } - - /* Padding the rest with zeros */ - for ( idx = half_fft_size; idx < fft_size; idx++ ) - { - pFolded_cepstrum_smoothing_win[idx] = 0.0f; - } - - /* Compute the log amplitude spectrum */ - for ( idx = 0; idx < spectrum_size; idx++ ) - { - pCepstrum[idx] = 0.5f * logf( ( pSpectrum[idx][0] * pSpectrum[idx][0] ) + ( pSpectrum[idx][1] * pSpectrum[idx][1] ) + EPS ); - } - - /* Extending one-sided spectrum to double-sided one */ - for ( idx = spectrum_size; idx < fft_size; idx++ ) - { - pCepstrum[idx] = pCepstrum[fft_size - idx]; - } - - /* Compute the real pCepstrum of the log amplitude spectrum */ - fft_rel( pCepstrum, fft_size, log2_fft_size ); - /* Note: using real-input fft rather than cmplx ifft to ensure support for 1024 size */ - /* Extra scaling is though required on the real/img parts, and img part is later inverted */ - - for ( idx = 0; idx < fft_size; idx++ ) - { - pCepstrum[idx] *= scale_factor; - } - - /* Fold the pCepstrum to ensure that zeros outside the unit circle move inside it, making it minimum phase. */ - pFolded_cepstrum_re[0] = pCepstrum[0]; - pFolded_cepstrum_im[0] = 0.0f; - - for ( idx = 1; idx < half_fft_size; idx++ ) - { - pFolded_cepstrum_re[idx] = 2.0f * pCepstrum[idx]; - pFolded_cepstrum_im[idx] = -2.0f * pCepstrum[fft_size - idx]; - /* Note: sign inverted because of fft rather than ifft used before */ - } - pFolded_cepstrum_re[half_fft_size] = pCepstrum[half_fft_size]; - pFolded_cepstrum_im[half_fft_size] = 0.0f; - - for ( idx = spectrum_size; idx < fft_size; idx++ ) - { - pFolded_cepstrum_re[idx] = 0.0f; - pFolded_cepstrum_im[idx] = 0.0f; - } - - /* Smoothing out the folded pCepstrum, to remove discontinuity at Ns, - hoping to significantly reduce the secondary response in the minimum-phase IR */ - for ( idx = 0; idx < fft_size; idx++ ) - { - pFolded_cepstrum_re[idx] *= pFolded_cepstrum_smoothing_win[idx]; - pFolded_cepstrum_im[idx] *= pFolded_cepstrum_smoothing_win[idx]; - } - - /* Convert back and isolate the phase. */ - if ( fft_size <= 512 ) /* for size <= 512 using complex-value FFT (more effecient, but available only up to 512 size) */ - { - DoRTFTn( pFolded_cepstrum_re, pFolded_cepstrum_im, fft_size ); - - /* Copying the img part into the output */ - for ( idx = 1; idx < half_fft_size; idx++ ) - { - pMinPhase[idx] = pFolded_cepstrum_im[idx]; - } - } - else /* for fft_size > 512 using real-values FFT twice (for real + imag parts) */ - { - /* Real part */ - fft_rel( pFolded_cepstrum_re, fft_size, log2_fft_size ); - /* Imag part */ - fft_rel( pFolded_cepstrum_im, fft_size, log2_fft_size ); - - /* Copying the img part into the output */ - for ( idx = 1; idx < half_fft_size; idx++ ) - { - pMinPhase[idx] = pFolded_cepstrum_re[fft_size - idx] + pFolded_cepstrum_im[idx]; - } - } - pMinPhase[0] = 0.0f; - pMinPhase[half_fft_size] = 0.0f; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void calc_min_phase_fx( rv_fftwf_type_complex_fx *pSpectrum /*Q31*/, const Word16 fft_size, @@ -374,7 +239,6 @@ static void calc_min_phase_fx( return; } -#endif /*-------------------------------------------------------------------* * calc_min_phase_filter() * @@ -382,40 +246,7 @@ static void calc_min_phase_fx( * This function expects only the positive frequency bins up to Nyquist/2 *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void calc_min_phase_filter( - rv_fftwf_type_complex *pH_flt, - const int16_t fft_size, - float delay ) -{ - const int16_t spectrum_size = ( fft_size >> 1 ) + 1; - int16_t idx; - float phase_increment; - float pMin_phase[RV_FILTER_MAX_FFT_SIZE]; - - phase_increment = -PI2 * delay / (float) fft_size; - - calc_min_phase( pH_flt, fft_size, pMin_phase ); - - for ( idx = 0; idx < spectrum_size; idx++ ) - { - /* Cancel out initial phase by computing amplitude */ - /* Note: slightly different (but mathematically equivalent) approach used for better efficiency */ - const float current_ampl = sqrtf( pH_flt[idx][0] * pH_flt[idx][0] + pH_flt[idx][1] * pH_flt[idx][1] ); - - /* Using the phase computed by calc_min_phase() + additional delay */ - const float current_phase = pMin_phase[idx] + phase_increment * idx; - - /* Apply the computed phase */ - pH_flt[idx][0] = current_ampl * cosf( current_phase ); - pH_flt[idx][1] = current_ampl * sinf( current_phase ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void calc_min_phase_filter_fx( rv_fftwf_type_complex_fx *pH_flt, // Q31 const Word16 fft_size ) @@ -456,63 +287,12 @@ static void calc_min_phase_filter_fx( return; } -#endif /*-------------------------------------------------------------------* * apply_window_fft() * * Apply the smoothing (anti-aliasing) window in the time domain *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void apply_window_fft( - rv_fftwf_type_complex *pH_flt, - const float *pWindow, - const int16_t fft_size ) -{ - int16_t idx; - float pFilter[RV_FILTER_MAX_FFT_SIZE]; - const int16_t half_fft_size = fft_size >> 1; - const int16_t log2_fft_size = int_log2( fft_size ); - - /* Converting pFilter to ifft function input format */ - /* Real parts */ - for ( idx = 0; idx <= half_fft_size; idx++ ) - { - pFilter[idx] = pH_flt[idx][0]; - } - /* Img parts */ - for ( idx = 1; idx < half_fft_size; idx++ ) - { - pFilter[fft_size - idx] = pH_flt[idx][1]; - } - - /* Do inverse fft to go to the time domain */ - ifft_rel( pFilter, fft_size, log2_fft_size ); - - /* Apply the window in the time domain */ - for ( idx = 0; idx < fft_size; idx++ ) - { - pFilter[idx] *= pWindow[idx]; - } - - /* Convert back to the frequency domain */ - fft_rel( pFilter, fft_size, log2_fft_size ); - - /* Copy data to the output with format conversion */ - pH_flt[0][0] = pFilter[0]; - pH_flt[half_fft_size][0] = pFilter[half_fft_size]; - pH_flt[0][1] = 0.0f; - pH_flt[half_fft_size][1] = 0.0f; - for ( idx = 1; idx < half_fft_size; idx++ ) - { - pH_flt[idx][0] = pFilter[idx]; - pH_flt[idx][1] = pFilter[fft_size - idx]; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void apply_window_fft_fx( rv_fftwf_type_complex_fx *pH_flt, // q_pFilter const Word32 *pWindow, // Q30 @@ -600,75 +380,12 @@ static void apply_window_fft_fx( return; } -#endif /*-------------------------------------------------------------------* * response_step_limit() * * Limit the gain vs frequency slope to T db per bin *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void response_step_limit( - float *X, - const int16_t dim_x, - const float step_limit_lf_dB, - const float step_limit_hf_dB, - const int16_t pivot_bin_idx ) -{ - int16_t i; - const float positive_step_limit_lf = powf( 10.0f, 0.05f * step_limit_lf_dB ); - const float negative_step_limit_lf = 1.0f / positive_step_limit_lf; - const float positive_step_limit_hf = powf( 10.0f, 0.05f * step_limit_hf_dB ); - const float negative_step_limit_hf = 1.0f / positive_step_limit_hf; - - /* Go up from pivot frequency and limit the slope to the maximum given by T. */ - for ( i = pivot_bin_idx + 1; i < dim_x; i++ ) - { - float desiredChange = X[i] / X[i - 1]; - float change = fabsf( desiredChange ); - if ( desiredChange >= 1 ) - { - if ( change > positive_step_limit_hf ) - { - change = positive_step_limit_hf; - } - } - else - { - if ( change < negative_step_limit_hf ) - { - change = negative_step_limit_hf; - } - } - X[i] = X[i - 1] * change; - } - - /* Go down from pivot frequency and limit the slope to the maximum given by T. */ - for ( i = pivot_bin_idx - 1; i >= 0; i-- ) - { - float desiredChange = X[i] / X[i + 1]; - float change = fabsf( desiredChange ); - - if ( desiredChange >= 1 ) - { - if ( change > positive_step_limit_lf ) - { - change = positive_step_limit_lf; - } - } - else - { - if ( change < negative_step_limit_lf ) - { - change = negative_step_limit_lf; - } - } - X[i] = X[i + 1] * change; - } - - return; -} -#else static void response_step_limit_fx( Word32 *X, // Q30 const Word16 dim_x, @@ -780,53 +497,12 @@ static void response_step_limit_fx( } return; } -#endif /*-------------------------------------------------------------------* * ivas_reverb_define_window_fft() * * Compute a smoothing window used later to avoid aliasing in FFT filters *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_define_window_fft( - float *pWindow, - const int16_t transitionStart, - const int16_t transitionLength, - const int16_t spectrumLength ) -{ - int16_t idx, fftLength; - float angle_increment; - float initial_angle; - - fftLength = ( spectrumLength - 1 ) * 2; - - /* The first portion of the sequence is kept unchanged, window == 1 */ - for ( idx = 0; idx < transitionStart; idx++ ) - { - pWindow[idx] = 1.0f; - } - - /* Adding Hann half-window for smooth transition */ - angle_increment = EVS_PI / ( 2.0f * transitionLength - 1 ); - - /* Initial angle set to match Hann window alignment in Matlab */ - initial_angle = 0.5f * ( EVS_PI + angle_increment ); - for ( idx = 0; idx < transitionLength; idx++ ) - { - const float sine_value = sinf( initial_angle + angle_increment * idx ); - - pWindow[idx + transitionStart] = sine_value * sine_value; - } - - /* Padding the rest with zeros */ - for ( idx = transitionStart + transitionLength; idx < fftLength; idx++ ) - { - pWindow[idx] = 0.0f; - } - - return; -} -#else void ivas_reverb_define_window_fft_fx( Word32 *pWindow, // output in Q31 const Word16 transitionStart, @@ -873,7 +549,6 @@ void ivas_reverb_define_window_fft_fx( return; } -#endif /*-------------------------------------------------------------------* * apply_window_fft() @@ -882,47 +557,6 @@ void ivas_reverb_define_window_fft_fx( *-------------------------------------------------------------------*/ /* Computes colorations filters for the target frequency responses */ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_reverb_calc_color_filters( - const float *pTargetL, - const float *pTargetR, - const float *pWindow, - const int16_t fft_size, - const float delay, - rv_fftwf_type_complex *pBeqL, - rv_fftwf_type_complex *pBeqR ) -{ - int16_t idx, half_fft_size; - - half_fft_size = ( fft_size >> 1 ); - - for ( idx = 0; idx <= half_fft_size; idx++ ) - { - pBeqL[idx][0] = pTargetL[idx]; - pBeqL[idx][1] = 0.0f; - pBeqR[idx][0] = pTargetR[idx]; - pBeqR[idx][1] = 0.0f; - } - - /* Make the response minimum phase. Does make the spectrum complex, but - will avoid aliasing when applied in the FFT domain. */ - calc_min_phase_filter( pBeqL, fft_size, delay ); - calc_min_phase_filter( pBeqR, fft_size, delay ); - apply_window_fft( pBeqL, pWindow, fft_size ); - apply_window_fft( pBeqR, pWindow, fft_size ); - - for ( idx = 0; idx <= half_fft_size; idx++ ) - { - if ( ( pTargetL[idx] < 0.0f ) || ( pTargetR[idx] < 0.0f ) ) /* Shouldn't have negative gains. */ - { - return 1; - } - } - - return 0; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_reverb_calc_color_filters_fx( const Word32 *pTargetL, // Q30 const Word32 *pTargetR, // Q30 @@ -966,53 +600,12 @@ Word16 ivas_reverb_calc_color_filters_fx( return 0; } -#endif /*-------------------------------------------------------------------* * ivas_reverb_calc_correl_filters() * * Compute correlation filters for the target frequency response *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -int16_t ivas_reverb_calc_correl_filters( - const float *pTargetICC, - const float *pWindow, - const int16_t fft_size, - const float delay, - rv_fftwf_type_complex *pU, - rv_fftwf_type_complex *pV ) -{ - int16_t idx, half_fft_size; - - half_fft_size = fft_size >> 1; - - for ( idx = 0; idx <= half_fft_size; idx++ ) - { - if ( ( 1.0f + pTargetICC[idx] < 0.0f ) || ( 1.0f - pTargetICC[idx] < 0.0f ) ) /* Shouldn't have negative gains. */ - { - return 1; - } - } - - for ( idx = 0; idx <= half_fft_size; idx++ ) - { - pU[idx][0] = sqrtf( ( 1.0f + pTargetICC[idx] ) * 0.5f ); - pU[idx][1] = 0.0f; - pV[idx][0] = sqrtf( ( 1.0f - pTargetICC[idx] ) * 0.5f ); - pV[idx][1] = 0.0f; - } - - /* Make the response minimum phase. Does make the spectrum complex, but - will avoid aliasing when applied in the FFT domain. */ - calc_min_phase_filter( pU, fft_size, delay ); - calc_min_phase_filter( pV, fft_size, delay ); - apply_window_fft( pU, pWindow, fft_size ); - apply_window_fft( pV, pWindow, fft_size ); - - return 0; -} -#endif -#ifdef IVAS_FLOAT_FIXED Word16 ivas_reverb_calc_correl_filters_fx( Word32 *pTargetICC, // input in Q30 const Word32 *pWindow, // input in Q30 @@ -1070,114 +663,12 @@ Word16 ivas_reverb_calc_correl_filters_fx( return 0; } -#endif /*-------------------------------------------------------------------* * ivas_reverb_calc_color_levels() * * Compute the target levels (gains) for the coloration filters *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_calc_color_levels( - const int32_t output_Fs, - const int16_t freq_count, - const int16_t loop_count, - const float *pFc, - const float *pAcoustic_dsr, - const float *pHrtf_avg_pwr_L, - const float *pHrtf_avg_pwr_R, - const int16_t *pLoop_delays, - const float *pT60_filter_coeff, - float *pTarget_color_L, - float *pTarget_color_R ) -{ - int16_t i, freq_idx, idx_pivot, nrcoefs, loop_idx; - float t60[RV_LENGTH_NR_FC]; - - /* Pre-computing inverse values for optimisation (to avoid divisions in inner loops) */ - const float fs_inverted = 1.0f / (float) output_Fs; - const float loop_count_inverted = 1.0f / (float) loop_count; - - const float log__0_001 = logf( 0.001f ); - /* Pre-computed for better efficiency */ - - const float revEnergyFactor = 1.0f; - /* revEnergyFactor == 1 for IVAS, as the pDsr values are already scaled previously for predelay delta */ - - /* Computing minimum delays in a simpler way, as they are already provided in descending order */ - const int16_t minDelay = pLoop_delays[loop_count - 1]; - const int16_t minDelayDiff = pLoop_delays[loop_count - 2] - pLoop_delays[loop_count - 1]; - const float freq_step = 0.5f * output_Fs / (float) ( freq_count - 1 ); - - for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) - { - t60[freq_idx] = 0.0f; - } - - for ( loop_idx = 0; loop_idx < loop_count; loop_idx++ ) - { - float coefA[2]; - float coefB[2]; - - nrcoefs = 2; - /* for pFilter order == 1 */ - - /* Obtaining T60 filters coefficients for the current loop */ - for ( i = 0; i < nrcoefs; i++ ) - { - coefA[i] = pT60_filter_coeff[2 * nrcoefs * loop_idx + i + nrcoefs]; - coefB[i] = pT60_filter_coeff[2 * nrcoefs * loop_idx + i]; - } - - /* Loop over frequencies */ - for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) - { - /* Compute T60 pFilter gain at the given frequency */ - float cos_w; - float H_filter; - float T60_est; - - cos_w = cosf( PI2 * pFc[freq_idx] * fs_inverted ); - H_filter = coefB[0] * coefB[0] + coefB[1] * coefB[1] + 2.0f * coefB[0] * coefB[1] * cos_w; - H_filter /= 1.0f + coefA[1] * coefA[1] + 2.0f * coefA[1] * cos_w; - H_filter = sqrtf( H_filter ); - - /* Compute the T60 value on the basis of the pFilter gain */ - T60_est = -3.0f * pLoop_delays[loop_idx] / ( log10f( H_filter ) * output_Fs ); - - t60[freq_idx] += T60_est; - } - } - - /* Dividing by the number of loops to compute the average T60 estimate */ - for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) - { - t60[freq_idx] *= loop_count_inverted; - } - - /* Compute target gains on the basis of the estimated T60 values */ - for ( freq_idx = 0; freq_idx < freq_count; freq_idx++ ) - { - const float A0_square_est = powf( 10.0f, -6.0f * minDelay / ( t60[freq_idx] * output_Fs ) ); - const float alpha = -log__0_001 / t60[freq_idx]; - const float revPredNormEnergy = ( A0_square_est / ( 2.0f * alpha ) ) * output_Fs / ( 0.8776f * minDelayDiff + 26.7741f ); - - pTarget_color_L[freq_idx] = sqrtf( pAcoustic_dsr[freq_idx] * revEnergyFactor * pHrtf_avg_pwr_L[freq_idx] ) / max( sqrtf( revPredNormEnergy ), EPS ); - - pTarget_color_R[freq_idx] = sqrtf( pAcoustic_dsr[freq_idx] * revEnergyFactor * pHrtf_avg_pwr_R[freq_idx] ) / max( sqrtf( revPredNormEnergy ), EPS ); - } - - /* Limiting the frequency response gradients - Find frequency band closest to chosen pivot frequency. */ - idx_pivot = (int16_t) roundf( STEP_LIMIT_PIVOT_FREQ / freq_step ); - - /* Perform step limiting */ - response_step_limit( pTarget_color_L, freq_count, RESPONSE_STEP_LIMIT_LF, RESPONSE_STEP_LIMIT_HF, idx_pivot ); - response_step_limit( pTarget_color_R, freq_count, RESPONSE_STEP_LIMIT_LF, RESPONSE_STEP_LIMIT_HF, idx_pivot ); - - return; -} -#else void ivas_reverb_calc_color_levels_fx( const Word32 output_Fs, const Word16 freq_count, @@ -1348,7 +839,6 @@ void ivas_reverb_calc_color_levels_fx( free( pTarget_color_R_e ); return; } -#endif /*-------------------------------------------------------------------* * ivas_reverb_interpolate_acoustic_data() @@ -1357,57 +847,6 @@ void ivas_reverb_calc_color_levels_fx( * Note: the fc frequencies both for the input and the output must be in the ascending order *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_interpolate_acoustic_data( - const int16_t input_table_size, - const float *pInput_fc, - const float *pInput_t60, - const float *pInput_dsr, - const int16_t output_table_size, - const float *pOutput_fc, - float *pOutput_t60, - float *pOutput_dsr ) -{ - int16_t input_idx, output_idx; - float rel_offset; - - input_idx = 0; - - for ( output_idx = 0; output_idx < output_table_size; output_idx++ ) - { - /* if the bin frequency is lower than the 1st frequency point in the input table, take this 1st point */ - if ( pOutput_fc[output_idx] < pInput_fc[0] ) - { - input_idx = 0; - rel_offset = 0.0f; - } - else - { - /* if the bin frequency is higher than the last frequency point in the input table, take this last point */ - if ( pOutput_fc[output_idx] > pInput_fc[input_table_size - 1] ) - { - input_idx = input_table_size - 2; - rel_offset = 1.0f; - } - /* otherwise use linear interpolation between 2 consecutive points in the input table */ - else - { - while ( pOutput_fc[output_idx] > pInput_fc[input_idx + 1] ) - { - input_idx++; - } - rel_offset = ( pOutput_fc[output_idx] - pInput_fc[input_idx] ) / ( pInput_fc[input_idx + 1] - pInput_fc[input_idx] ); - } - } - - pOutput_t60[output_idx] = pInput_t60[input_idx] + rel_offset * ( pInput_t60[input_idx + 1] - pInput_t60[input_idx] ); - - pOutput_dsr[output_idx] = pInput_dsr[input_idx] + rel_offset * ( pInput_dsr[input_idx + 1] - pInput_dsr[input_idx] ); - } - - return; -} -#else void ivas_reverb_interpolate_acoustic_data_fx( const Word16 input_table_size, @@ -1482,7 +921,6 @@ void ivas_reverb_interpolate_acoustic_data_fx( return; } -#endif /*-------------------------------------------------------------------* * ivas_reverb_get_hrtf_set_properties() * @@ -1490,176 +928,6 @@ void ivas_reverb_interpolate_acoustic_data_fx( * and frequency-dependent IA coherence. Expects frequency-domain HRTF input *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_reverb_get_hrtf_set_properties( - float **ppHrtf_set_L_re, - float **ppHrtf_set_L_im, - float **ppHrtf_set_R_re, - float **ppHrtf_set_R_im, - const AUDIO_CONFIG input_audio_config, - const int16_t hrtf_count, - const int16_t in_freq_count, - const int16_t out_freq_count, - float *pOut_avg_pwr_L, - float *pOut_avg_pwr_R, - float *out_i_a_coherence ) -{ - const float foa_sum_coeffs[4][3] = { - { 1.0, 1.0f, 0.0f }, - { 1.0, -1.0f, 0.0f }, - { 1.0, 0.0f, 1.0f }, - { 1.0, 0.0f, -1.0f } - }; - const float inp_freq_step = 0.5f / (float) in_freq_count; - const float inp_freq_offset = 0.5f * inp_freq_step; - const float out_freq_step = 0.5f / (float) ( out_freq_count - 1 ); - - int16_t used_hrtf_count, base_idx, freq_idx, hrtf_idx, out_bin_idx, ch_index, is_ambisonics; - float hrtf_count_inverted, relative_pos, weight_1st; - float avg_pwr_left[2]; - float avg_pwr_right[2]; - float IA_coherence[2]; - - if ( input_audio_config == IVAS_AUDIO_CONFIG_FOA || input_audio_config == IVAS_AUDIO_CONFIG_HOA2 || input_audio_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - is_ambisonics = 1; - used_hrtf_count = 4; /* Using only 1st order HRTFs */ - } - else - { - is_ambisonics = 0; - used_hrtf_count = hrtf_count; - } - - /* Interpolation (linear to a new grid) */ - base_idx = 0; - relative_pos = 0.0f; - hrtf_count_inverted = 1.0f / (float) used_hrtf_count; - - /* Loop over output frequency bins */ - for ( out_bin_idx = 0; out_bin_idx < out_freq_count; out_bin_idx++ ) - { - /* Computing normalized frequency for the current bin (1.0 corresponds to sampling rate) */ - const float norm_freq = out_freq_step * out_bin_idx; - - /* Computing the bin index in the source data */ - const float tbl_index = ( norm_freq - inp_freq_offset ) / inp_freq_step; - - if ( tbl_index <= 0.0f ) /* In case of extrapolation (below 1st bin), choose nearest */ - { - base_idx = 0; - relative_pos = 0.0f; - } - else - { - base_idx = (int16_t) floorf( tbl_index ); - relative_pos = tbl_index - base_idx; - if ( base_idx > ( in_freq_count - 2 ) ) /* In case of extrapolation (above last bin), choose nearest */ - { - base_idx = in_freq_count - 2; - relative_pos = 1.0f; - } - } - - /* Computing 2 bins data for later interpolation */ - - /* Zeroing before accumalation for average value computing */ - avg_pwr_left[0] = 0.0f; - avg_pwr_left[1] = 0.0f; - avg_pwr_right[0] = 0.0f; - avg_pwr_right[1] = 0.0f; - IA_coherence[0] = 0.0f; - IA_coherence[1] = 0.0f; - - /* Get power spectra and cross - correlation between left and right hrtfs */ - /* Loop over all the HRTFs available */ - for ( hrtf_idx = 0; hrtf_idx < used_hrtf_count; hrtf_idx++ ) - { - /* Pointers to current HRTF data */ - float *current_base_L_ptr_re, *current_base_L_ptr_im, *current_base_R_ptr_re, *current_base_R_ptr_im; - - /* combined HRTF data used for FOA */ - float combined_channels_L_re[2]; - float combined_channels_L_im[2]; - float combined_channels_R_re[2]; - float combined_channels_R_im[2]; - - /* Process the frequency bins containing both real and img parts */ - /* In case of 5.1 or 7.1 formats, use the available HRTF paires directly*/ - if ( !is_ambisonics ) - { - current_base_L_ptr_re = ppHrtf_set_L_re[hrtf_idx] + base_idx; - current_base_R_ptr_re = ppHrtf_set_R_re[hrtf_idx] + base_idx; - current_base_L_ptr_im = ppHrtf_set_L_im[hrtf_idx] + base_idx; - current_base_R_ptr_im = ppHrtf_set_R_im[hrtf_idx] + base_idx; - } - - /* In case of FOA format, combine the W channel with the X/Y channels */ - else - { - for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) - { - combined_channels_L_re[freq_idx] = 0.0f; - combined_channels_R_re[freq_idx] = 0.0f; - combined_channels_L_im[freq_idx] = 0.0f; - combined_channels_R_im[freq_idx] = 0.0f; - - for ( ch_index = 0; ch_index < 3; ch_index++ ) - { - combined_channels_L_re[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_L_re[ch_index][base_idx + freq_idx]; - combined_channels_R_re[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_R_re[ch_index][base_idx + freq_idx]; - combined_channels_L_im[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_L_im[ch_index][base_idx + freq_idx]; - combined_channels_R_im[freq_idx] += foa_sum_coeffs[hrtf_idx][ch_index] * ppHrtf_set_R_im[ch_index][base_idx + freq_idx]; - } - } - - current_base_L_ptr_re = &combined_channels_L_re[0]; - current_base_R_ptr_re = &combined_channels_R_re[0]; - current_base_L_ptr_im = &combined_channels_L_im[0]; - current_base_R_ptr_im = &combined_channels_R_im[0]; - } - - for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) - { - float L_re, L_im, R_re, R_im, C_re; - - L_re = current_base_L_ptr_re[freq_idx]; - R_re = current_base_R_ptr_re[freq_idx]; - L_im = current_base_L_ptr_im[freq_idx]; - R_im = current_base_R_ptr_im[freq_idx]; - - avg_pwr_left[freq_idx] += L_re * L_re + L_im * L_im; - avg_pwr_right[freq_idx] += R_re * R_re + R_im * R_im; - - /* Cross product (Re part) */ - C_re = L_re * R_re + L_im * R_im; - IA_coherence[freq_idx] += C_re; - } - } - - /* Compute the averages and the IA coherence */ - for ( freq_idx = 0; freq_idx < 2; freq_idx++ ) - { - avg_pwr_left[freq_idx] *= hrtf_count_inverted; - avg_pwr_right[freq_idx] *= hrtf_count_inverted; - IA_coherence[freq_idx] = hrtf_count_inverted * IA_coherence[freq_idx] / - sqrtf( avg_pwr_left[freq_idx] * avg_pwr_right[freq_idx] ); - - /* Limiting to (0...1) range in case of small numerical errors or negative values */ - IA_coherence[freq_idx] = min( IA_coherence[freq_idx], 1.0f ); - IA_coherence[freq_idx] = max( IA_coherence[freq_idx], 0.0f ); - } - - /* Computing weighted average of 2 nearest values (1 below + 1 above) for linear interpolation */ - weight_1st = 1.0f - relative_pos; - pOut_avg_pwr_L[out_bin_idx] = weight_1st * avg_pwr_left[0] + relative_pos * avg_pwr_left[1]; - pOut_avg_pwr_R[out_bin_idx] = weight_1st * avg_pwr_right[0] + relative_pos * avg_pwr_right[1]; - out_i_a_coherence[out_bin_idx] = weight_1st * IA_coherence[0] + relative_pos * IA_coherence[1]; - } - - return; -} -#else void ivas_reverb_get_hrtf_set_properties_fx( Word32 **ppHrtf_set_L_re, // Q29 @@ -1908,4 +1176,3 @@ void ivas_reverb_get_hrtf_set_properties_fx( return; } -#endif diff --git a/lib_rend/ivas_reverb_iir_filter.c b/lib_rend/ivas_reverb_iir_filter.c index 5ec718a3f..7049fa580 100644 --- a/lib_rend/ivas_reverb_iir_filter.c +++ b/lib_rend/ivas_reverb_iir_filter.c @@ -35,13 +35,10 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "debug.h" #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_iir_filt_init() * @@ -73,35 +70,6 @@ void ivas_reverb_iir_filt_init( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_iir_filt_init() - * - * Initialize the IIR filter - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_iir_filt_init( - ivas_rev_iir_filter_t *iirFilter, /* o : IIR filter */ - const uint16_t maxTaps /* i : maximum number of filter taps */ -) -{ - iirFilter->MaxTaps = maxTaps; - iirFilter->isFIR = 0; - iirFilter->nr_taps = 0; /* filter is set to PASS i.e. input copy to output */ - iirFilter->Output = 0.0f; - - for ( uint16_t i = 0; i < maxTaps; i++ ) - { - iirFilter->CoefA[i] = 0; - iirFilter->CoefB[i] = 0; - } - - set_f( iirFilter->pBuffer, 0, iirFilter->MaxTaps ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_iir_filt_set() * @@ -149,50 +117,6 @@ void ivas_reverb_iir_filt_set( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_iir_filt_set() - * - * Set the IIR filter - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_iir_filt_set( - ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ - uint16_t nr_taps, /* i : number of IIR filter taps */ - const float *coefA, /* i : A filter coefficients to set */ - const float *coefB /* i : the B filter coefficients to set */ -) -{ - uint16_t i; - - if ( nr_taps > iirFilter->MaxTaps ) - { - nr_taps = (uint16_t) iirFilter->MaxTaps; - } - - iirFilter->nr_taps = nr_taps; - iirFilter->isFIR = ( coefA == NULL ); - - if ( iirFilter->isFIR != 0 ) - { - for ( i = 0; i < iirFilter->nr_taps; i++ ) - { - iirFilter->CoefB[i] = coefB[i]; - } - } - else - { - for ( i = 0; i < iirFilter->nr_taps; i++ ) - { - iirFilter->CoefA[i] = coefA[i]; - iirFilter->CoefB[i] = coefB[i]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_iir_filt_2taps_feed_blk() * @@ -235,39 +159,3 @@ void ivas_reverb_iir_filt_2taps_feed_blk_fx( return; } -#else -/*-----------------------------------------------------------------------------------------* - * Function ivas_reverb_iir_filt_2taps_feed_blk() - * - * Feed samples into 2-taps IIR filter and return resulting output samples - *-----------------------------------------------------------------------------------------*/ - -void ivas_reverb_iir_filt_2taps_feed_blk( - ivas_rev_iir_filter_t *iirFilter, /* i/o: IIR filter */ - const uint16_t blk_size, /* i : size */ - const float *input, /* i : input buffer */ - float *output /* i : output buffer */ -) -{ - uint16_t i; - float flt_output = 0.0f; - float flt_CoefB_0 = iirFilter->CoefB[0]; - float flt_CoefB_1 = iirFilter->CoefB[1]; - float flt_CoefA_1 = iirFilter->CoefA[1]; - float flt_pBuffer_0 = iirFilter->pBuffer[0]; - float flt_pBuffer_1 = iirFilter->pBuffer[1]; - - for ( i = 0; i < blk_size; i++ ) - { - flt_output = input[i] * flt_CoefB_0 + flt_pBuffer_0; - flt_pBuffer_0 = flt_pBuffer_1 + input[i] * flt_CoefB_1 - flt_output * flt_CoefA_1; - output[i] = flt_output; - } - - iirFilter->pBuffer[0] = flt_pBuffer_0; - iirFilter->pBuffer[1] = flt_pBuffer_1; - iirFilter->Output = flt_output; - - return; -} -#endif diff --git a/lib_rend/ivas_reverb_utils.c b/lib_rend/ivas_reverb_utils.c index 6e6d5c023..ddb95aaf0 100644 --- a/lib_rend/ivas_reverb_utils.c +++ b/lib_rend/ivas_reverb_utils.c @@ -38,9 +38,7 @@ #include #include "wmc_auto.h" #include "prot_fx.h" -#ifdef IVAS_FLOAT_FIXED #include "options_warnings.h" -#endif /*-----------------------------------------------------------------------------------------* * Local constants @@ -98,7 +96,6 @@ ivas_error ivas_reverb_prepare_cldfb_params( { fc[idx] = ( (float) idx + 0.5f ) * ( (float) MAX_SAMPLING_RATE / (float) ( 2 * CLDFB_NO_CHANNELS_MAX ) ); } -#ifdef IVAS_FLOAT_FIXED Word32 *fc_fx = (Word32 *) malloc( pInput_params->nBands * sizeof( Word32 * ) ); Word32 *pOutput_t60_fx = (Word32 *) malloc( pInput_params->nBands * sizeof( Word32 * ) ); Word16 *pOutput_t60_e = (Word16 *) malloc( pInput_params->nBands * sizeof( Word16 * ) ); @@ -128,11 +125,6 @@ ivas_error ivas_reverb_prepare_cldfb_params( free( pOutput_t60_e ); free( pOutput_ene_fx ); free( pOutput_ene_e ); -#else - ivas_reverb_interpolate_acoustic_data( pInput_params->nBands, pInput_params->pFc_input, pInput_params->pAcoustic_rt60, pInput_params->pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX, fc, pOutput_t60, pOutput_ene ); - /* adjust DSR for the delay difference */ - delay_diff = pInput_params->inputPreDelay - pInput_params->acousticPreDelay; -#endif ln_1e6_inverted = 1.0f / logf( 1e06f ); for ( idx = 0; idx < CLDFB_NO_CHANNELS_MAX; idx++ ) { @@ -163,67 +155,6 @@ ivas_error ivas_reverb_prepare_cldfb_params( * Function for convolving CLDFB-domain data with filter taps *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_cldfb_convolver( - cldfb_convolver_state *convolver_state, /* i/o: pointer to convolver state structure */ - float out_CLDFB_real[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* o : real part of binaural signals */ - float out_CLDFB_imag[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX], /* o : imag part of binaural signals */ - float in_CLDFB_real[CLDFB_NO_CHANNELS_MAX], /* i : real part of input signals */ - float in_CLDFB_imag[CLDFB_NO_CHANNELS_MAX], /* i : imag part of input signals */ - const int16_t num_conv_bands, /* i : number of convolution bands */ - const int16_t num_taps /* i : number of filter taps */ -) -{ - int16_t band_idx, tap_idx; - float *filter_states_real_ptr, *filter_states_imag_ptr; - const float *filter_taps_left_re_ptr, *filter_taps_left_im_ptr, *filter_taps_right_re_ptr, *filter_taps_right_im_ptr; - - for ( band_idx = 0; band_idx < num_conv_bands; band_idx++ ) - { - float out_real_left, out_real_right, out_imag_left, out_imag_right; - out_real_left = 0.0f; - out_real_right = 0.0f; - out_imag_left = 0.0f; - out_imag_right = 0.0f; - - filter_states_real_ptr = (float *) &( convolver_state->filter_states_re[band_idx][0] ); - filter_states_imag_ptr = (float *) &( convolver_state->filter_states_im[band_idx][0] ); - - filter_taps_left_re_ptr = convolver_state->filter_taps_left_re[band_idx]; - filter_taps_left_im_ptr = convolver_state->filter_taps_left_im[band_idx]; - filter_taps_right_re_ptr = convolver_state->filter_taps_right_re[band_idx]; - filter_taps_right_im_ptr = convolver_state->filter_taps_right_im[band_idx]; - - for ( tap_idx = num_taps - 1; tap_idx > 0; tap_idx-- ) - { - filter_states_real_ptr[tap_idx] = filter_states_real_ptr[tap_idx - 1]; - filter_states_imag_ptr[tap_idx] = filter_states_imag_ptr[tap_idx - 1]; - - /* Left real and imag */ - out_real_left += ( filter_states_real_ptr[tap_idx] * filter_taps_left_re_ptr[tap_idx] ) - ( filter_states_imag_ptr[tap_idx] * filter_taps_left_im_ptr[tap_idx] ); - out_imag_left += ( filter_states_real_ptr[tap_idx] * filter_taps_left_im_ptr[tap_idx] ) + ( filter_states_imag_ptr[tap_idx] * filter_taps_left_re_ptr[tap_idx] ); - - /* Right real and imag*/ - out_real_right += ( filter_states_real_ptr[tap_idx] * filter_taps_right_re_ptr[tap_idx] ) - ( filter_states_imag_ptr[tap_idx] * filter_taps_right_im_ptr[tap_idx] ); - out_imag_right += ( filter_states_real_ptr[tap_idx] * filter_taps_right_im_ptr[tap_idx] ) + ( filter_states_imag_ptr[tap_idx] * filter_taps_right_re_ptr[tap_idx] ); - } - - filter_states_real_ptr[0] = in_CLDFB_real[band_idx]; - filter_states_imag_ptr[0] = in_CLDFB_imag[band_idx]; - - /* Left real and imag */ - out_CLDFB_real[0][band_idx] += out_real_left + ( filter_states_real_ptr[0] * filter_taps_left_re_ptr[0] ) - ( filter_states_imag_ptr[0] * filter_taps_left_im_ptr[0] ); - out_CLDFB_imag[0][band_idx] += out_imag_left + ( filter_states_real_ptr[0] * filter_taps_left_im_ptr[0] ) + ( filter_states_imag_ptr[0] * filter_taps_left_re_ptr[0] ); - - /* Right real and imag */ - out_CLDFB_real[1][band_idx] += out_real_right + ( filter_states_real_ptr[0] * filter_taps_right_re_ptr[0] ) - ( filter_states_imag_ptr[0] * filter_taps_right_im_ptr[0] ); - out_CLDFB_imag[1][band_idx] += out_imag_right + ( filter_states_real_ptr[0] * filter_taps_right_im_ptr[0] ) + ( filter_states_imag_ptr[0] * filter_taps_right_re_ptr[0] ); - } - - return; -} -#endif // DEBUG - /*-----------------------------------------------------------------------------------------* * Function get_IR_from_filter_taps() @@ -231,182 +162,6 @@ static void ivas_cldfb_convolver( * Function converts CLDFB filter taps into time-domain data *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static ivas_error get_IR_from_filter_taps( - const HRTFS_FASTCONV_HANDLE hHrtfFastConv, - const int16_t hrtf_idx, - const AUDIO_CONFIG input_audio_config, - const int16_t use_brir, - const int32_t sampling_rate, - const int16_t pulse_length, - float *pOut_l, - float *pOut_r ) -{ - int16_t i, j, band_idx, block_idx, block_len, block_count, input_sample_idx, output_sample_idx, array_idx; - HANDLE_CLDFB_FILTER_BANK handle_cldfb_analysis, handle_cldfb_synthesis_l, handle_cldfb_synthesis_r; - cldfb_convolver_state convolver_state; - float real_buffer_in[CLDFB_NO_CHANNELS_MAX]; - float imag_buffer_in[CLDFB_NO_CHANNELS_MAX]; - float out_CLDFB_real[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* o : real part of Binaural signals */ - float out_CLDFB_imag[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; /* o : imag part of Binaural signals */ - float dirac_pls[CLDFB_NO_CHANNELS_MAX + 1]; - ivas_error error; - - block_len = (int16_t) ( sampling_rate * INV_CLDFB_BANDWIDTH ); - block_count = N_INITIAL_IGNORED_FRAMES + ( pulse_length / block_len ); - - set_f( dirac_pls, 0, block_len + 1 ); - dirac_pls[0] = 1.0f; - input_sample_idx = 0; - output_sample_idx = 0; - - /* Assign CLDFB taps */ - if ( input_audio_config == IVAS_AUDIO_CONFIG_HOA3 ) - { - for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) - { - convolver_state.filter_taps_left_re[band_idx] = hHrtfFastConv->leftHRIRReal_HOA3[band_idx][hrtf_idx]; - convolver_state.filter_taps_left_im[band_idx] = hHrtfFastConv->leftHRIRImag_HOA3[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_re[band_idx] = hHrtfFastConv->rightHRIRReal_HOA3[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_im[band_idx] = hHrtfFastConv->rightHRIRImag_HOA3[band_idx][hrtf_idx]; - } - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_HOA2 ) - { - for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) - { - convolver_state.filter_taps_left_re[band_idx] = hHrtfFastConv->leftHRIRReal_HOA2[band_idx][hrtf_idx]; - convolver_state.filter_taps_left_im[band_idx] = hHrtfFastConv->leftHRIRImag_HOA2[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_re[band_idx] = hHrtfFastConv->rightHRIRReal_HOA2[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_im[band_idx] = hHrtfFastConv->rightHRIRImag_HOA2[band_idx][hrtf_idx]; - } - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_FOA ) - { - for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) - { - convolver_state.filter_taps_left_re[band_idx] = hHrtfFastConv->leftHRIRReal_FOA[band_idx][hrtf_idx]; - convolver_state.filter_taps_left_im[band_idx] = hHrtfFastConv->leftHRIRImag_FOA[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_re[band_idx] = hHrtfFastConv->rightHRIRReal_FOA[band_idx][hrtf_idx]; - convolver_state.filter_taps_right_im[band_idx] = hHrtfFastConv->rightHRIRImag_FOA[band_idx][hrtf_idx]; - } - } - else - { - array_idx = 0; - if ( input_audio_config == IVAS_AUDIO_CONFIG_5_1 ) - { - array_idx = channelIndex_CICP6[hrtf_idx]; - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_7_1 ) - { - array_idx = channelIndex_CICP12[hrtf_idx]; - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_5_1_2 ) - { - array_idx = channelIndex_CICP14[hrtf_idx]; - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_5_1_4 ) - { - array_idx = channelIndex_CICP16[hrtf_idx]; - } - else if ( input_audio_config == IVAS_AUDIO_CONFIG_7_1_4 ) - { - array_idx = channelIndex_CICP19[hrtf_idx]; - } - - if ( use_brir ) - { - for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) - { - convolver_state.filter_taps_left_re[band_idx] = hHrtfFastConv->leftBRIRReal[band_idx][array_idx]; - convolver_state.filter_taps_left_im[band_idx] = hHrtfFastConv->leftBRIRImag[band_idx][array_idx]; - convolver_state.filter_taps_right_re[band_idx] = hHrtfFastConv->rightBRIRReal[band_idx][array_idx]; - convolver_state.filter_taps_right_im[band_idx] = hHrtfFastConv->rightBRIRImag[band_idx][array_idx]; - } - } - else - { - for ( band_idx = 0; band_idx < BINAURAL_CONVBANDS; band_idx++ ) - { - convolver_state.filter_taps_left_re[band_idx] = hHrtfFastConv->leftHRIRReal[band_idx][array_idx]; - convolver_state.filter_taps_left_im[band_idx] = hHrtfFastConv->leftHRIRImag[band_idx][array_idx]; - convolver_state.filter_taps_right_re[band_idx] = hHrtfFastConv->rightHRIRReal[band_idx][array_idx]; - convolver_state.filter_taps_right_im[band_idx] = hHrtfFastConv->rightHRIRImag[band_idx][array_idx]; - } - } - } - - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < CLDFB_CONVOLVER_NTAPS_MAX; j++ ) - { - convolver_state.filter_states_re[i][j] = 0; - convolver_state.filter_states_im[i][j] = 0; - } - } - - if ( ( error = openCldfb_ivas( &handle_cldfb_analysis, CLDFB_ANALYSIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = openCldfb_ivas( &handle_cldfb_synthesis_l, CLDFB_SYNTHESIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = openCldfb_ivas( &handle_cldfb_synthesis_r, CLDFB_SYNTHESIS, sampling_rate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Main loop for convolving dirac pulse with CLDFB filter taps */ - for ( block_idx = 0; block_idx < block_count; block_idx++ ) - { - float *ppRealBuf[1]; - float *ppImagBuf[1]; - - cldfbAnalysis_ts_ivas( &dirac_pls[input_sample_idx], real_buffer_in, imag_buffer_in, block_len, handle_cldfb_analysis ); - - /* Perform convolution */ - - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - for ( j = 0; j < CLDFB_NO_CHANNELS_MAX; j++ ) - { - out_CLDFB_real[i][j] = 0; - out_CLDFB_imag[i][j] = 0; - } - } - - ivas_cldfb_convolver( &convolver_state, out_CLDFB_real, out_CLDFB_imag, real_buffer_in, imag_buffer_in, BINAURAL_CONVBANDS, BINAURAL_NTAPS ); - - ppRealBuf[0] = out_CLDFB_real[0]; - ppImagBuf[0] = out_CLDFB_imag[0]; - cldfbSynthesis_ivas( ppRealBuf, ppImagBuf, &pOut_l[output_sample_idx], block_len, handle_cldfb_synthesis_l ); - - ppRealBuf[0] = out_CLDFB_real[1]; - ppImagBuf[0] = out_CLDFB_imag[1]; - cldfbSynthesis_ivas( ppRealBuf, ppImagBuf, &pOut_r[output_sample_idx], block_len, handle_cldfb_synthesis_r ); - - if ( input_sample_idx == 0 ) - { - input_sample_idx = 1; - } - - if ( block_idx >= N_INITIAL_IGNORED_FRAMES ) - { - output_sample_idx += block_len; - } - } - - deleteCldfb_ivas( &handle_cldfb_analysis ); - deleteCldfb_ivas( &handle_cldfb_synthesis_l ); - deleteCldfb_ivas( &handle_cldfb_synthesis_r ); - - return IVAS_ERR_OK; -} - -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_reverb_get_cldfb_hrtf_set_properties() @@ -430,9 +185,7 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties( float hrtf_count_inverted; int16_t fft_size, log2_fft_size, half_fft_size, freq_count; ivas_error error; -#ifdef IVAS_FLOAT_FIXED /*Resolving the extra warnings added*/ UNUSED_PARAM( error ); -#endif // !IVAS_FLOAT_FIXED fft_size = RV_FILTER_MAX_FFT_SIZE; Word16 IR_length; IR_length = CLDFB_NO_CHANNELS_MAX * ( ( fft_size + CLDFB_NO_CHANNELS_MAX - 1 ) / CLDFB_NO_CHANNELS_MAX ); @@ -466,17 +219,10 @@ static ivas_error ivas_reverb_get_cldfb_hrtf_set_properties( Loop over all the HRTFs available */ for ( hrtf_idx = 0; hrtf_idx < hrtf_count; hrtf_idx++ ) { -#ifndef IVAS_FLOAT_FIXED - if ( ( error = get_IR_from_filter_taps( hHrtfFastConv, hrtf_idx, input_audio_config, use_brir, sampling_rate, IR_length, current_HRTF_data_L, current_HRTF_data_R ) ) != IVAS_ERR_OK ) - { - return error; - } -#else UNUSED_PARAM( hHrtfFastConv ); UNUSED_PARAM( use_brir ); UNUSED_PARAM( sampling_rate ); UNUSED_PARAM( IR_length ); -#endif /* Perform forward FFT on both L/R channels */ fft_rel( current_HRTF_data_L, (int16_t) fft_size, (int16_t) log2_fft_size ); @@ -533,15 +279,9 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( float *avg_pwr_right ) { int16_t freq_idx; -#ifndef IVAS_FLOAT_FIXED - const int16_t cldfb_freq_halfstep = MAX_SAMPLING_RATE / ( 4 * CLDFB_NO_CHANNELS_MAX ); -#endif float avg_pwr_left_fft[FFT_SPECTRUM_SIZE]; float avg_pwr_right_fft[FFT_SPECTRUM_SIZE]; float input_fc[FFT_SPECTRUM_SIZE]; -#ifndef IVAS_FLOAT_FIXED - float output_fc[CLDFB_NO_CHANNELS_MAX]; -#endif ivas_error error; for ( freq_idx = 0; freq_idx < FFT_SPECTRUM_SIZE; freq_idx++ ) @@ -549,18 +289,11 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( input_fc[freq_idx] = freq_idx * ( 0.5f * sampling_rate / (float) ( FFT_SPECTRUM_SIZE - 1 ) ); } -#ifndef IVAS_FLOAT_FIXED - for ( freq_idx = 0; freq_idx < CLDFB_NO_CHANNELS_MAX; freq_idx++ ) - { - output_fc[freq_idx] = (float) ( ( 2 * freq_idx + 1 ) * cldfb_freq_halfstep ); - } -#endif if ( ( error = ivas_reverb_get_cldfb_hrtf_set_properties( input_audio_config, hHrtfFastConv, use_brir, sampling_rate, avg_pwr_left_fft, avg_pwr_right_fft ) ) != IVAS_ERR_OK ) { return error; } -#ifdef IVAS_FLOAT_FIXED Word32 *input_fc_fx = (Word32 *) malloc( 60 * sizeof( Word32 * ) ); Word32 *avg_pwr_left_fft_fx = (Word32 *) malloc( 60 * sizeof( Word32 * ) ); Word32 *avg_pwr_right_fft_fx = (Word32 *) malloc( 60 * sizeof( Word32 * ) ); @@ -598,8 +331,5 @@ static ivas_error ivas_reverb_get_fastconv_hrtf_set_energies( free( avg_pwr_left_e ); free( avg_pwr_right_fx ); free( avg_pwr_right_e ); -#else - ivas_reverb_interpolate_acoustic_data( FFT_SPECTRUM_SIZE, input_fc, avg_pwr_left_fft, avg_pwr_right_fft, CLDFB_NO_CHANNELS_MAX, output_fc, avg_pwr_left, avg_pwr_right ); -#endif return IVAS_ERR_OK; } diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.c b/lib_rend/ivas_rom_TdBinauralRenderer.c index 5cfb13deb..f6921bc92 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.c +++ b/lib_rend/ivas_rom_TdBinauralRenderer.c @@ -44,9 +44,6 @@ * TD Binaural rendering related ROM tables *------------------------------------------------------------------------*/ /* TD renderer default HRIR model */ -#ifndef IVAS_FLOAT_FIXED -const float defaultHRIR_rom_latency_s = 0.000020834f; -#endif const Word32 defaultHRIR_rom_latency_s_fx = 44741; /* Q31 */ const Word16 defaultHRIR_rom_azimDim2[15] = { 1, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 1, @@ -67,17 +64,6 @@ const Word16 defaultHRIR_rom_azimShapeSampFactor[15] = { -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, }; -#ifndef IVAS_FLOAT_FIXED -const float defaultHRIR_rom_elevKSeq[13] = { --90.000000f, -75.000000f, -60.000000f, -45.000000f, -30.000000f, -15.000000f, 0.000000f, 15.000000f, 30.000000f, 45.000000f, 60.000000f, 75.000000f, 90.000000f, - }; -const uint32_t defaultHRIR_rom_elevBsShape[36] = { -0x3f800000,0x3ed80000,0x3e000000,0x3c800000,0x00000000,0xaa000000,0x3efe0000,0x3f180000,0x3eea0000,0x3e800000,0x3dd80000,0x3d000000,0x3b800000,0x00000000,0x29800000,0x3da2aaab,0x3e855555,0x3eea0000,0x3f155555,0x3f13aaab,0x3ef00000,0x3ea0aaab,0x3e2aaaab,0x3d900000,0x3caaaaab,0x3b2aaaab,0x27800000,0xa9000000,0x3b2aaaab,0x3caaaaab,0x3d900000,0x3e2aaaab,0x3ea15555,0x3ef55555,0x3f1caaab,0x3f2aaaab, -}; -const uint32_t defaultHRIR_rom_azimBsShape[21] = { -0x3f2aaaab,0x3f283c13,0x3f21735f,0x3f17152a,0x3f09e60f,0x3ef55555,0x3ed44f30,0x3eb242e7,0x3e90b9af,0x3e627984,0x3e2aaaab,0x3df8d4fe,0x3daec33e,0x3d6a2798,0x3d1374bc,0x3caaaaab,0x3c2ec33e,0x3b9374bc,0x3aaec33e,0x392ec33e,0x26800000, -}; -#else const Word32 defaultHRIR_rom_elevKSeq_fx[13]/*Q22*/ = { -377487360, -314572800, -251658240, -188743680, -125829120, -62914560, 0, 62914560, 125829120, 188743680, 251658240, 314572800, 377487360 }; @@ -87,9 +73,7 @@ const Word32 defaultHRIR_rom_elevBsShape_fx[36]/*Q30*/ = { const Word32 defaultHRIR_rom_azimBsShape_fx[21]/*Q30*/ = { 715827904,705627328,677173184,633686656,578388928,514501280,445244928,373841120,303511008,237475904,178956976,130459632,91625968,61382240,38654704,22369622,11453246,4831838,1431655,178956,0 }; -#endif -#ifdef IVAS_FLOAT_FIXED const UWord32 defaultHRIR_rom_AlphaL48_fx[470 * 128] /*Q30*/= { 0x08946b90,0x01b51044,0x0a3be7e0,0x08059140,0x08956970,0x08977810,0x0902edf0,0x092d8070,0x09514fc0,0x09037030,0x08d22420,0x089c8890,0x086fde70,0x084b4aa0,0x0835ecf0,0x08249b70,0x08116dd0,0x08085020,0x07e77410,0x0773bf10,0x095b7f10,0x01583d2c,0xfee45aca,0xfbd573d8,0x02d72514, 0xff01b3a9,0xfc39200c,0xfc096278,0xfc3dc844,0xfd17e024,0xfc2228c0,0xfbd986e0,0xfc0bded8,0xff02a7ec,0x03e2cc90,0xfc372258,0xfe92ec80,0xfe04a288,0x08e19d20,0x0a0943f0,0x09fe5830,0x0a947bb0,0x0bc07e70,0x0c4e2300,0x0c63c590,0x0ba72080,0x0af61460,0x0a475af0,0x09bd4da0,0x09633a90, @@ -9768,9693 +9752,7 @@ const UWord32 defaultHRIR_rom_AlphaR16_fx[470 * 43]/*Q30*/ = { 0xfff79681,0xfff6efd6,0xfff60bef,0xfffcef12,0xfffc9aee,0xfffcff38,0xfffcfd81,0xfffcff0e,0xfffcf933,0xfffd051f,0xfffd11c2,0xfffd35df,0xfffcb524,0xfffcaf46,0xfff68911,0xfff779ec,0xfff7be7c,0xfff82f76,0xfff758ca,0xfff72d7a,0xfff6c569,0xfff685bc,0xfff63a4c,0xfff5ad85,0xfff5fdc3, 0xfff62cd1,0xfff6a08b,0xfff6f7fb,0xfff78045,0xfff80434,0xfff8484b,0xfff884ee,0xfff8f780,0xfff924db,0xfff60a28, }; -#else -const uint32_t defaultHRIR_rom_AlphaL48[470 * 128] = { -0x3e0946b9,0x3cda8822,0x3e23be7e,0x3e005914,0x3e095697,0x3e097781,0x3e102edf,0x3e12d807,0x3e1514fc,0x3e103703,0x3e0d2242,0x3e09c889,0x3e06fde7,0x3e04b4aa,0x3e035ecf,0x3e0249b7,0x3e0116dd,0x3e008502,0x3dfcee82,0x3dee77e2,0x3e15b7f1,0x3cac1e96,0xbc8dd29b,0xbd855185,0x3d35c945, -0xbc7e4c57,0xbd71b7fd,0xbd7da762,0xbd708def,0xbd3a07f7,0xbd7775d0,0xbd84cf24,0xbd7d084a,0xbc7d5814,0x3d78b324,0xbd72376a,0xbcb689c0,0xbcfdaebc,0x3e0e19d2,0x3e20943f,0x3e1fe583,0x3e2947bb,0x3e3c07e7,0x3e44e230,0x3e463c59,0x3e3a7208,0x3e2f6146,0x3e2475af,0x3e1bd4da,0x3e1633a9, -0x3e133ee1,0x3e106f87,0x3e0c1905,0x3e0b9f00,0x3e012569,0x3e050f51,0x3dde26d5,0xbc98ab09,0x3d834bef,0x3d4939f5,0x3d482c36,0x3d024bd4,0x3d6a83d8,0x3d821e8e,0x3d5ffe00,0x3cfc008e,0x3d77236f,0x3db4ee33,0x3d725256,0x3d886c90,0x3d26351e,0x3d0dfd26,0x3dd12939,0x3d10ba99,0x3dfb2a54, -0x3e3c0ce1,0x3e2f51ad,0x3e44fe4f,0x3e69011e,0x3e79b6ef,0x3e7ead61,0x3e681c55,0x3e528b5b,0x3e40f8f0,0x3e30412a,0x3e249720,0x3e1dcd44,0x3e17ea8e,0x3e0fd84f,0x3e0f109b,0x3df28777,0x3e02c0b4,0x3d941cab,0x3c9744a7,0x3cca5b4f,0x3ce22b66,0x3cf48be2,0x3b4d71a5,0x3cf9cc26,0x3b0c5102, -0x3d4eaa69,0xbc0403b5,0x3d311412,0x3ac23951,0x3cb3c0cc,0x3ccb38e0,0x3cfb92af,0x3c93d8f7,0x3d7f8f7c,0x3c72d39b,0x3ded5248,0x3e4463f2,0x3e3ff357,0x3e62d998,0x3e8f6193,0x3e9d806c,0x3e9f53b2,0x3e8adbed,0x3e70a50a,0x3e519182,0x3e377037,0x3e2667dd,0x3e1fa360,0x3e16cc8d,0x3e0c2d51, -0x3e0a2b6d,0x3de66f30,0x3dde58c8,0x3d70162c,0xbb07b324,0x3d1414b5,0xbba99d41,0x3c4ee703,0x3c407aaa,0x3c276d4d,0x3b13ec74,0x3aa9efd9,0x3c842da9,0x3b67fb36,0x3c8e01d4,0x3caf384b,0x3cc65f88,0x3c80d055,0x3cd1b0dd,0x3d6e3909,0x3d1e88d8,0x3e3b7e9f,0x3e859bf1,0x3e845e0e,0x3e9054ff, -0x3e9c071e,0x3ea54fc5,0x3eab806d,0x3eafd995,0x3ea9a776,0x3e9043f5,0x3e8f8083,0x3e859164,0x3e6c06bd,0x3e61a722,0x3e4d2911,0x3e3d71ed,0x3e100329,0x3e0a0aa7,0x3d939c7c,0xbb3f7ec8,0x3d14f8f2,0x3c1803e4,0x3c2be363,0xba8c87fd,0x3b88daa6,0x3b896a84,0x3c2877b4,0x3c7eb38d,0x3c0cda38, -0x3c88cfe7,0x3c1ed653,0x3d0b27a0,0x3c77d604,0x3d22e336,0x3d232893,0x3c2f1521,0x3e05fe24,0x3e98e515,0x3e929a97,0x3ea92656,0x3eaf7533,0x3eb3d49c,0x3eaf7201,0x3eaa72cd,0x3e9fac44,0x3e8e29cb,0x3e8a9344,0x3e88ace1,0x3e8a023b,0x3e7fab71,0x3e66d64d,0x3e59166d,0x3e2346f1,0x3e1e064b, -0x3d9a28eb,0x3c578178,0x3cc91f53,0x3c6e1a29,0x3cff0a29,0x3cbb1fa3,0x3c0059e0,0x3c35024a,0x3beaa7aa,0x3badfe87,0x3be6234e,0x3be6fc25,0x3cd825e5,0x3c8d5d85,0x3d6ff9c1,0x3d299c60,0x3da384de,0x3c7211c4,0x3e377094,0x3ec6b742,0x3ec8168a,0x3ee46daa,0x3ecbb4e6,0x3ebf9ea3,0x3eb34e6f, -0x3ea103a7,0x3e9ef1f0,0x3eb12067,0x3ebd1031,0x3ebd5740,0x3eb33e38,0x3e9b32aa,0x3e810713,0x3e578f26,0x3e21b090,0x3e24cd99,0x3d915eb8,0x3d0d722b,0x3d3dbb02,0x3c3ba57d,0x3c981e6e,0x3c8fb4f6,0x3c12a8a4,0x3bf64dec,0x3c35e6bf,0x3c8b9e2d,0x3c71f25d,0x3c1d3070,0x3c1fb5cb,0xbc903225, -0x3d5ee57e,0xbc44f25b,0x3dac1d85,0x3cf5cfab,0x3e7331a2,0x3ed4fc1e,0x3ec4c1bf,0x3ec12eff,0x3eb23512,0x3eaf525b,0x3eacf6c1,0x3eaeb471,0x3eae336e,0x3ea7d160,0x3ea5c4bd,0x3e9e2c2b,0x3e8f8dbc,0x3e830124,0x3e626837,0x3e3f0491,0x3e16eae3,0x3e1833c8,0x3da9f3fa,0xbbaf6ed6,0x3d0b8932, -0x3ce328a5,0x3cbc8919,0x3c9dbba2,0x3c0d359a,0x3caac95e,0x3b54748e,0x3cf3671d,0x3c9e8b9c,0x3c2bcfc6,0x3d206de6,0x3c7aa108,0x3d8697a0,0x3c8ae026,0x3db121b4,0x3d69d389,0x3e83f418,0x3ebf156e,0x3eafe411,0x3eaea3a5,0x3e9bed38,0x3e9677de,0x3e9cef80,0x3e94c65e,0x3e9adc5d,0x3ea7fae1, -0x3e9beef9,0x3e8e7730,0x3e7fe772,0x3e4fa9ec,0x3e28b022,0x3e14d67c,0x3e069843,0x3e185a4a,0x3dd19059,0x3c2d00b2,0x3d7166d5,0x3c936306,0x3c8e2bd8,0x3cdb518e,0x3cb890e0,0x3c57b628,0x3cbec185,0xbb87e856,0x3c98c8dc,0x3ca1029b,0x3d01b554,0x3d0ac25d,0x3cec6ffe,0x3cee9662,0x3de0714b, -0xbce98d9b,0x3e386ba2,0x3e89976b,0x3e673a6c,0x3e6f214f,0x3e71a15a,0x3e787d1b,0x3e7d13bb,0x3e6d1806,0x3e5a3fe7,0x3e5034f0,0x3e51f7f9,0x3e52b48e,0x3e4b57cf,0x3e42203e,0x3e2fae72,0x3e1f084e,0x3e10a292,0x3e2546dc,0x3da7575c,0x3c294def,0x3d86f19a,0x3c782adc,0x3d01d717,0x3cf1d649, -0x3c938bb4,0x3c6bc881,0x3bcba418,0x3d52a9be,0x3cc05127,0x3cbcb7e2,0x3d1a8f39,0x3ce37cc0,0x3d3dbb68,0x3d3e6c4b,0x3db6f271,0x3d80d214,0x3e09ba98,0x3e4a6f1a,0x3e389dec,0x3e54bc22,0x3e580e4c,0x3e62ae15,0x3e69a887,0x3e64ca0d,0x3e61bb61,0x3e5bf1bb,0x3e478711,0x3e32c224,0x3e193fcc, -0x3e126f66,0x3e057835,0x3dff5c28,0x3de59ac4,0x3e1034bf,0x3dc5c23e,0x3ccb6aa7,0x3d095181,0x3d079c70,0x3d1797d8,0x3a05956d,0x3d0f6e2c,0xbb1d316c,0x3d8153be,0xbc996fc2,0x3d3c1a97,0xba7e8773,0x3cb1ff74,0x3cfafdaf,0x3cfd697b,0x3ca010df,0x3d9b0baf,0xbd4d18e7,0x3e0e0b77,0x3e21fbb1, -0x3e1d45cc,0x3e28e3d0,0x3e2c5a0d,0x3e344370,0x3e3c4bf2,0x3e328761,0x3e297970,0x3e21ab52,0x3e1728aa,0x3e0dcd07,0x3dfca553,0x3dfef351,0x3dfb69b7,0x3e000221,0x3df51e38,0x3e02457b,0x3de47ba7,0xbcc4c2d0,0x3d99f609,0x3d7b4357,0x3d7f3fa8,0x3d2d2500,0x3d9b73dc,0x3dae8405,0x3d902663, -0x3d283bdc,0x3da0f5b6,0x3ddbc642,0x3d8c91db,0x3da0113c,0x3d4b4723,0x3d33a63e,0x3de03105,0x3d07f470,0x3e411460,0x3e16fda3,0x3e20795b,0x3e222024,0x3e245bb9,0x3e263cc7,0x3e2a360f,0x3e248a4c,0x3e20f733,0x3e1cb846,0x3e19d303,0x3e1725c6,0x3e134281,0x3e150f22,0x3e14bc55,0x3e14f691, -0x3e148298,0x3e0edaa3,0x3e35c588,0x3cc6cd9e,0xbcbdbd12,0xbda839e2,0x3d5e05e9,0xbcac9200,0xbd9d2375,0xbda5f23d,0xbd9b9263,0xbd7150bf,0xbd9f86ce,0xbda60e9c,0xbd9ad7cb,0xbcae7828,0x3d905fb4,0xbd98cb6a,0xbcdf624f,0x3e2ff1bf,0x3ebd3ed6,0x3e85ff25,0x3ec77f67,0x3eb116d3,0x3ebbf09e, -0x3ebd2dd6,0x3ec53e20,0x3ec8461f,0x3ecb1ef5,0x3ec4b1aa,0x3ec0b91a,0x3ebc8f5b,0x3eb92678,0x3eb61bb0,0x3eb3c259,0x3eb1e212,0x3eb01796,0x3eae97cc,0x3eacab4e,0x3ea41213,0x3eb82be2,0x3e75924e,0x3e1b28ef,0xbcb0d470,0x3e8b9981,0x3e214663,0xbbdb5345,0xbbbfa6ca,0xbb03b651,0x3ca1cc97, -0x3bbdcea6,0x3ba9e7dd,0x3c4f1d3d,0x3e2847f3,0x3e9affa0,0x3aa701c8,0x3e20848a,0x3e06be5f,0x3ed2e518,0x3ed43395,0x3ee08ee1,0x3eeb0099,0x3f019a6e,0x3f066d86,0x3f073414,0x3efda472,0x3eef8f7d,0x3ee2b842,0x3ed82a6d,0x3ecfe965,0x3eca23ce,0x3ec4a6ef,0x3ebf161d,0x3ebbc1c0,0x3eb29787, -0x3eacbe4d,0x3ea68ea7,0x3de0cd86,0x3e73cb53,0x3e6ddf35,0x3e514c0d,0x3e3695e7,0x3e6d060c,0x3e740a6f,0x3e7967b6,0x3e4e9798,0x3e807dc3,0x3e8c1631,0x3e6c4d12,0x3e82eae6,0x3e59504e,0x3e619e63,0x3ea7a468,0x3e82344c,0x3ec3f0e7,0x3eec9c65,0x3ef8d4cc,0x3f091366,0x3f212e06,0x3f2a2b2c, -0x3f2d2dee,0x3f1dd82a,0x3f100df5,0x3f051872,0x3ef5d0ca,0x3ee63cc4,0x3eda3959,0x3ecf7ecb,0x3ec467c8,0x3ebe3603,0x3ea87efd,0x3ea332a5,0x3e732299,0x3e25710c,0x3e114bd5,0x3e197a72,0x3e140d1e,0x3db69c28,0x3e0fb222,0x3d9d2578,0x3e2d57c3,0x3da77e1d,0x3e1bd1f7,0x3dc8d666,0x3e10db41, -0x3e19f396,0x3e2e0a33,0x3e2e3926,0x3e864044,0x3e4da63d,0x3ec714be,0x3ef7e330,0x3f089ee4,0x3f1f46de,0x3f471ab4,0x3f56c34b,0x3f578e4d,0x3f3af3bf,0x3f22fdd2,0x3f10483a,0x3f010999,0x3ee975b3,0x3edadbae,0x3ecb824e,0x3ebc325b,0x3eb379c9,0x3e99b089,0x3e87696c,0x3e402558,0x3d8b8d93, -0x3ddfb8fa,0x3cf6f68f,0x3d6036d4,0x3d343a6c,0x3d121ae5,0x3ccc41aa,0x3c4c10e4,0x3d5921a9,0x3cfd1556,0x3d85245f,0x3da8136f,0x3dd8213c,0x3df2a1af,0x3e056df6,0x3e69127d,0x3ea19025,0x3f041af2,0x3f23f057,0x3f361f70,0x3f49ae8c,0x3f589a80,0x3f65d06d,0x3f723b41,0x3f780f45,0x3f6e7756, -0x3f494461,0x3f4670f9,0x3f3a9079,0x3f2b57ce,0x3f2002e2,0x3f122da7,0x3f058830,0x3ed90001,0x3ebb6a45,0x3e7fff7b,0x3dc6a0c3,0x3e02122b,0x3dac5c32,0x3d76a820,0x3d050cee,0x3ce809e8,0x3cf40558,0x3d243edb,0x3d7b1be9,0x3d5a323d,0x3da3941d,0x3daabcbd,0x3e0f0828,0x3e0f4162,0x3e44b507, -0x3e8375c3,0x3e83310d,0x3efb4175,0x3f45f009,0x3f54e6a7,0x3f6de6a0,0x3f7a2d01,0x3f812032,0x3f80d156,0x3f80564a,0x3f73dfd4,0x3f5bb2ca,0x3f567cc9,0x3f4e7093,0x3f475c4c,0x3f33bfa5,0x3f1fd5d0,0x3f113008,0x3ee9d4fb,0x3ed2f1e6,0x3e8c5947,0x3e1ffbad,0x3e0ee18c,0x3ddf89c7,0x3de1bd54, -0x3db01182,0x3d518021,0x3d4e849f,0x3d38b970,0x3d241008,0x3d69fea8,0x3d65c388,0x3deba8b1,0x3dea4a6f,0x3e652c85,0x3e61e9fc,0x3ea84c23,0x3e9851fa,0x3f249648,0x3f74e05c,0x3f8107f3,0x3f877478,0x3f7fcce3,0x3f75ad5b,0x3f72c2b1,0x3f68c6c1,0x3f6c4bda,0x3f7be416,0x3f7b3f6e,0x3f701124, -0x3f5d1af4,0x3f4033cb,0x3f24cb44,0x3f0fd824,0x3ee41a64,0x3ecf0590,0x3e855b03,0x3e4cb6a1,0x3e36976c,0x3dfe98b4,0x3de31de7,0x3dbb5649,0x3d8b2ee5,0x3d57647e,0x3d80b827,0x3dbbc9a3,0x3d880978,0x3d8af7ca,0x3da3de6a,0x3d83c6ce,0x3e619ee3,0x3e29208f,0x3eab2137,0x3ebef261,0x3f3dd1b8, -0x3f6d5cd4,0x3f6e4061,0x3f5952dc,0x3f614892,0x3f6d3ed1,0x3f7b0388,0x3f7b6940,0x3f77f19f,0x3f69843d,0x3f64c634,0x3f589ea0,0x3f43d957,0x3f3243ce,0x3f1abac3,0x3efdfee9,0x3ed123ea,0x3ebf2f36,0x3e9652b6,0x3e025b1f,0x3e3c35e0,0x3e268af5,0x3dfe9a9d,0x3ddde630,0x3d959faf,0x3da8f647, -0x3d7035fc,0x3e23c541,0x3dcd9e4b,0x3d9f6ee9,0x3e14d760,0x3dcfd283,0x3e75c01b,0x3e323130,0x3ea45b82,0x3ed36dd3,0x3f3a6d59,0x3f624d75,0x3f669800,0x3f616e88,0x3f5bd732,0x3f59fa97,0x3f6636f9,0x3f5add3a,0x3f5de807,0x3f64ff72,0x3f552c8d,0x3f4279f5,0x3f2f2b12,0x3f10c7f3,0x3ef4066c, -0x3ed588be,0x3ed3c7b0,0x3ed9699e,0x3ebc3f51,0x3e2a05bd,0x3e777ba3,0x3e0aaaab,0x3dface53,0x3e146853,0x3de73663,0x3da32009,0x3dde083d,0x3d6d9bec,0x3de8f612,0x3e016a33,0x3e308a43,0x3e403346,0x3e3efba1,0x3e534426,0x3ee76b83,0x3e7ea3e4,0x3f194052,0x3f385744,0x3f306a9b,0x3f3166b5, -0x3f3aae95,0x3f3f7c01,0x3f424a08,0x3f3d02c9,0x3f33b5d5,0x3f2bd395,0x3f25268d,0x3f1d894c,0x3f12cc9a,0x3f07d581,0x3ef6930f,0x3ee1319c,0x3edf2b38,0x3eefc916,0x3ea4eff3,0x3e46bad4,0x3e8dc1f7,0x3e3b8a50,0x3e420b02,0x3e176987,0x3dd7db6c,0x3dcf8fbd,0x3d9e2e37,0x3e455924,0x3e051fd3, -0x3e0b86bf,0x3e3895ab,0x3e2f689a,0x3e76d331,0x3e80591a,0x3ec77077,0x3eaf91fe,0x3ef883cd,0x3f15d7f1,0x3f15ac61,0x3f236cbe,0x3f28634d,0x3f2e4887,0x3f336da8,0x3f2e624f,0x3f2a414e,0x3f2507c4,0x3f187cc1,0x3f0be05c,0x3ef88e81,0x3eeee0f1,0x3edf8bf3,0x3ed2c33f,0x3ec5cb11,0x3ed8e7f3, -0x3eb58baa,0x3e652aa1,0x3e56d3e2,0x3e4b4280,0x3e48898c,0x3dd4562d,0x3e406268,0x3daa265d,0x3e789e3e,0x3da838d2,0x3e44e16f,0x3dd6644c,0x3e17fde1,0x3e414260,0x3e57ee3a,0x3e5bdffb,0x3eacf368,0x3dc2c6c6,0x3ef9c8bb,0x3efcc186,0x3f004aee,0x3f054759,0x3f0861fc,0x3f0cc7c1,0x3f126786, -0x3f0c8cf1,0x3f07cede,0x3f036331,0x3efaca81,0x3eefd44d,0x3edefc6b,0x3edcad26,0x3ed828cf,0x3ed6a31d,0x3ed1dee1,0x3ed1444a,0x3eccc8f3,0x3ddbbc41,0x3ea21b50,0x3ea2040d,0x3e955b03,0x3e82bb9d,0x3eaba057,0x3eb40899,0x3eb2861b,0x3e8de245,0x3eb6f61d,0x3ec37471,0x3e9b3dc2,0x3eabcdb3, -0x3e8c3964,0x3e915348,0x3ed34173,0x3eaaaef8,0x3f093a59,0x3eed411b,0x3ef98507,0x3efa4410,0x3efda0a1,0x3effc06c,0x3f022ae8,0x3efdbdb2,0x3ef98a14,0x3ef49ce0,0x3ef14891,0x3eee21ae,0x3eea0656,0x3eeb400a,0x3eeacebb,0x3eea1206,0x3ee9d7fc,0x3ee123a1,0x3f01cddb,0x3e9e31a3,0x3e3d0aa3, -0xbd68f5cd,0x3ebb6283,0x3e481509,0xbd0bcc24,0xbd1b115c,0xbd035494,0x3b53bb83,0xbcc99b99,0xbcbd8c33,0xbc2c35b3,0x3e4a99e7,0x3ecd598d,0xbcefc292,0x3e3aadf3,0x3f082c89,0x3e55be8d,0x3eae2fb6,0x3e13efa3,0x3e4bd768,0x3e49c352,0x3e53db90,0x3e532908,0x3e536bdb,0x3e536011,0x3e51f137, -0x3e5108c0,0x3e50ce85,0x3e4f11a3,0x3e4c6782,0x3e474ee5,0x3e4381d8,0x3e404ac5,0x3e3d15a6,0x3e3b8f90,0x3e3ec61e,0x3e13435a,0x3ea79e5d,0x3ec02edb,0x3ec21f59,0x3e93dfc3,0x3ebc7bf8,0x3ebdba2b,0x3ec1eb9b,0x3ec0202d,0x3eb8623e,0x3ec58aee,0x3eca56d0,0x3ec97303,0x3ebffffb,0x3e8cf710, -0x3ec87e6f,0x3ecd7a72,0x3edebed0,0x3e716207,0x3e5b3b5c,0x3e796a4e,0x3e836eb2,0x3e85572c,0x3e85a47b,0x3e844e92,0x3e812c88,0x3e7fc3b8,0x3e80883d,0x3e7d369a,0x3e732ca3,0x3e635f14,0x3e563887,0x3e4e0258,0x3e446ddf,0x3e459a03,0x3e30e64c,0x3e4db36e,0x3eaf94a0,0x3e69e24b,0x3e7ed26b, -0x3e6dbf3c,0x3e79b5e0,0x3e5c7e2d,0x3e4fd785,0x3e64f15a,0x3e839a34,0x3e5c946a,0x3e36ed83,0x3e6987fa,0x3e6f4cd2,0x3e8f4a9b,0x3e997888,0x3e6ab2ec,0x3ead1e1a,0x3e875fbc,0x3e4b6b86,0x3e8da3eb,0x3e9c0548,0x3ea11091,0x3ea05a1d,0x3e9e2f27,0x3e9be936,0x3e9a683d,0x3e98bc1b,0x3e945927, -0x3e8ccc59,0x3e7cc492,0x3e655715,0x3e532393,0x3e3f9c1e,0x3e3e9d75,0x3e15e2f2,0x3e4946e5,0x3e79a868,0x3e5077a1,0x3e49b60e,0x3e30ea83,0x3e3c972b,0x3e1c8e32,0x3e329cfe,0x3e010499,0x3e4d5b5e,0x3e09974c,0x3e4a3abf,0x3e43a9a5,0x3e593b03,0x3e67cd83,0x3e89afde,0x3e83b20a,0x3eaff798, -0x3e980c08,0x3e62e4df,0x3e9c385e,0x3eb4bde8,0x3ebe6053,0x3ebe0a77,0x3eb5b170,0x3ead837e,0x3ea96692,0x3ea9cecc,0x3ea52136,0x3e962f2b,0x3e7c54f6,0x3e58e900,0x3e3e8a96,0x3e23826f,0x3e18331b,0x3df33888,0x3e181f3d,0x3e2c8091,0x3dd26139,0x3dddfe92,0x3d95840d,0x3d595bc0,0x3d26bf1c, -0x3d3459a1,0x3d24e120,0x3d25b6f1,0x3d6849e6,0x3d801c35,0x3dbb6793,0x3e0401be,0x3e3935ab,0x3e3c23b2,0x3e57a5b4,0x3ed16a2f,0x3e5c721e,0x3e51f9ce,0x3eac6b89,0x3ed3937d,0x3ed16423,0x3edd7cb8,0x3eeddbca,0x3f00f7fd,0x3f0277d9,0x3efc087e,0x3ee88f78,0x3edf692c,0x3ee5b015,0x3ec3c666, -0x3eb0c575,0x3ea13417,0x3e9a1242,0x3e68e85b,0x3e640d17,0x3e6dcf1a,0x3e12cc97,0x3e084db3,0x3dc31f94,0x3da856a8,0x3d654c1f,0x3d645321,0x3d60ad33,0x3d90661b,0x3d957bd2,0x3db59ecd,0x3e029ab1,0x3e05e38f,0x3e508cbf,0x3e5de8a5,0x3ea3073e,0x3f075805,0x3edf8cf8,0x3e8519be,0x3ecae8ce, -0x3ee20cb7,0x3efa3fe1,0x3f087625,0x3f0fe399,0x3f21692a,0x3f2316dc,0x3f1d5177,0x3f156e3f,0x3f032d99,0x3ed2c568,0x3eaeb4b4,0x3e950643,0x3e7a9b9e,0x3e88e70c,0x3e6a84d3,0x3e88e167,0x3e94ce39,0x3e584edd,0x3e33547c,0x3dd014d1,0x3d9c68dd,0x3d94095c,0x3d7510c7,0x3d8dd7c5,0x3da5d09c, -0x3dbc698a,0x3de157ca,0x3e16793a,0x3e49c2a0,0x3e5fa00b,0x3e9fe52b,0x3eb3717c,0x3f1409f1,0x3ef799b4,0x3e476ed5,0x3e84f22a,0x3e3cdd8c,0x3ea673a0,0x3ec7cdea,0x3eebbd2e,0x3f127624,0x3f19eb1e,0x3f0140ee,0x3eb07b43,0x3e68e60c,0x3e23d266,0x3e1e5f39,0x3e324300,0x3e553817,0x3e5c9fcf, -0x3e1f8a64,0x3e7987d2,0x3e87203c,0x3e531542,0x3e721d19,0x3e291f8e,0x3e0c7351,0x3e06c74c,0x3de7e9dd,0x3de9ae6f,0x3e24d1d9,0x3ddb2473,0x3e00b7bc,0x3e20ee88,0x3e8369c7,0x3e82f7b2,0x3edca560,0x3eb1fa46,0x3f192623,0x3eb87f45,0x3d9007e5,0x3e62b967,0x3e7d428a,0x3ec52732,0x3ef71141, -0x3f17c5e5,0x3f0e23ce,0x3efc0f6c,0x3ecf60d1,0x3eb64728,0x3ea02631,0x3e8e45ad,0x3e85e81f,0x3e7824a2,0x3e470f2c,0x3e47e88e,0x3e1f1bd0,0x3e803303,0x3ea64085,0x3e84d8e7,0x3e787a16,0x3e454a59,0x3e27e3f3,0x3e0b6aff,0x3dc70a83,0x3e046723,0x3e862f15,0x3e1b28ea,0x3e08d693,0x3e0d66fe, -0x3e475638,0x3e5c5430,0x3ea923ea,0x3eb30c44,0x3f0a005b,0x3e99edd6,0x3e5e85f6,0x3ec4c0c5,0x3ed18569,0x3f0bac7b,0x3f18641d,0x3f1966a4,0x3f0f6954,0x3ef8a9d8,0x3ec1e3c8,0x3eab5e60,0x3e98ac77,0x3e8dc005,0x3e85115e,0x3e851de0,0x3e75e2f7,0x3e9706f2,0x3e8c1466,0x3eab5b4f,0x3eba5f6a, -0x3e951475,0x3e85f70d,0x3e711032,0x3e5e0540,0x3e336125,0x3e13323a,0x3e205bc6,0x3e4cd5c7,0x3e410249,0x3e524d4b,0x3e6a03ad,0x3e7e2ef6,0x3e8cdc25,0x3eaefe8f,0x3eaf6ff6,0x3f2c93a4,0x3eded8e6,0x3ec107e2,0x3f01eef4,0x3f083e04,0x3f18d992,0x3f1ba624,0x3f161cca,0x3f17d5c4,0x3f16b584, -0x3f0ec35d,0x3ef01b73,0x3ec666f5,0x3ea84b1f,0x3e8fbe9b,0x3e88b632,0x3e8a6029,0x3eaca6b4,0x3ea705a5,0x3ec10a2f,0x3ed39aec,0x3ea7ceaf,0x3eb0c8d1,0x3e8c7dca,0x3e5f5e0b,0x3e3f3ac7,0x3e3dc32d,0x3e404610,0x3e5d4c4d,0x3e608dc7,0x3e67eb53,0x3e6be66d,0x3e8e6f2d,0x3ea3428e,0x3eb8a5b3, -0x3ed3fdcd,0x3ef6f2d6,0x3ef9a3d6,0x3ee95a78,0x3f052e94,0x3f086451,0x3f07cd7f,0x3f052c2f,0x3f054454,0x3efab8b9,0x3eea2cd3,0x3edbe110,0x3ed99509,0x3ed73824,0x3ed2db1e,0x3ed135fa,0x3ed1224c,0x3ec855a3,0x3ec3a1b4,0x3eab9cb8,0x3ebb4a32,0x3ece96ef,0x3eb733ca,0x3ea9b41a,0x3e9cbe46, -0x3e957881,0x3e909a19,0x3e8aaf0a,0x3e85f9b9,0x3e99e1a9,0x3e80933f,0x3e92721a,0x3e87c778,0x3ea22da3,0x3eb6c48b,0x3ed59bcb,0x3edbc045,0x3f0df794,0x3eed564f,0x3edb988b,0x3ee69c23,0x3ee5fe78,0x3eeba8d9,0x3eef58b5,0x3ef562fc,0x3ef54470,0x3ef8433e,0x3ef900c9,0x3efa3a34,0x3efa7a1b, -0x3efdd6bc,0x3ef37e13,0x3eea2766,0x3ee08506,0x3edcaa78,0x3ecf2e81,0x3ed4cf85,0x3ee66b9a,0x3ec995c3,0x3ed63097,0x3ecb8902,0x3eca9bda,0x3ebf90be,0x3ebbac48,0x3ece8c1f,0x3ed6c98a,0x3ecb5caf,0x3eb7d719,0x3ec52a16,0x3ece17b3,0x3edf40f6,0x3eec25fd,0x3edebdb5,0x3f074ac6,0x3eb6fde1, -0x3ec9108c,0x3ec97bb1,0x3ec8e6cf,0x3ecad631,0x3ecb9155,0x3eccaa62,0x3ecce45b,0x3ecd37b5,0x3ecdc832,0x3ecdc40c,0x3ecda29d,0x3eceef90,0x3ecb6191,0x3ec9f087,0x3ec72064,0x3ec548a0,0x3ec22b59,0x3eb244cf,0x3f0484b9,0x3f0b5159,0x3ef1a06d,0x3ef7e839,0x3f09d38f,0x3ef5d334,0x3efa881d, -0x3ef62840,0x3ef0c3e0,0x3efb6fb0,0x3eff8d0f,0x3efd3791,0x3f0b8c5d,0x3ef87a0d,0x3efa945e,0x3f0fbd4b,0x3ed73653,0xbdb201ad,0xbc6b6a38,0xbe0655e8,0xbda28409,0xbdce0857,0xbdc6a3c8,0xbde15728,0xbdeb1b8a,0xbdfe149c,0xbdde943f,0xbdce1386,0xbdbc3f97,0xbdb4cf37,0xbdaf51be,0xbdaeca35, -0xbdb13388,0xbdb0e4fd,0xbdaf2df0,0xbda96bc5,0xbd83d454,0xbddcd621,0x3b7f1057,0x3de339bf,0x3eb366a2,0xbd322b83,0x3dc11e80,0x3ea4f518,0x3ea2ebe5,0x3e9ffd45,0x3e95506d,0x3e99b85f,0x3e9a738c,0x3e96e79d,0x3db7530f,0xbd994030,0x3ea8cc5a,0x3de20d2b,0x3e3f00d2,0xbdff1145,0xbde46434, -0xbe07e255,0xbe107136,0xbe39f159,0xbe498ea7,0xbe564dae,0xbe292c7b,0xbe0a08a5,0xbddd3cfb,0xbdc07159,0xbdb369dd,0xbdb92f00,0xbdc3b270,0xbdc35420,0xbdbf82d3,0xbda2bdbb,0xbd86287b,0xbd882e4a,0x3e2f7883,0x3c8ced72,0x3b105ac0,0x3d19ab5c,0x3d70afd7,0xbc7dac7b,0xbc9ec368,0xbd043276, -0x3c7e0a99,0xbd2709d1,0xbd675af0,0x3b9aeca6,0xbc6a4a42,0x3d467fdf,0x3d21742a,0xbd84b009,0x3c84ebab,0xbd8783d4,0xbe080f0a,0xbe0e5024,0xbe2a4aff,0xbe83fa5a,0xbe934c21,0xbea47363,0xbe6e7f60,0xbe2b5cbd,0xbdfbcd3f,0xbdc899a3,0xbdb76cba,0xbdc0ee14,0xbdd4f7e4,0xbdd617b9,0xbdd01359, -0xbd873041,0xbd6246a0,0x3c4be932,0x3d870cd6,0x3da505ca,0x3d61adef,0x3d37300c,0x3db5279b,0x3cd9b207,0x3dc3c691,0x3ac12c61,0x3daee4af,0x3c5ecd69,0x3d88f95e,0x3d147db7,0x3d591e3e,0x3d550a4e,0x3d65cf85,0xbc939b06,0x3dabb828,0xbd24ad70,0xbde49be4,0xbe19dedb,0xbe5d38a8,0xbebf45a4, -0xbedce835,0xbeed5324,0xbe991e0a,0xbe38c3a2,0xbdcdf056,0xbd83e457,0xbd406b4f,0xbd8a2cd9,0xbdb660e4,0xbdbd4f75,0xbdba260e,0xbd518c88,0xbc6877d7,0x3d17b64d,0x3de4f26f,0x3d816e99,0x3dcd4b48,0x3d68f7ea,0x3d3d5289,0x3d2a2745,0x3d29683c,0x3d567c00,0x3cdbb79e,0x3d1d6e0b,0x3cb9efe9, -0x3d0cfeb5,0x3d4b8cb7,0x3d6abc43,0x3d868a93,0x3b64a2bb,0xbd3b8a74,0xbe6e5786,0xbe884715,0xbe97c166,0xbea703f1,0xbebad87f,0xbecc42e9,0xbeeb20d7,0xbeeea2dc,0xbed3c55b,0xbe4124b7,0xbe800afd,0xbe8028b7,0xbe62fda8,0xbe713635,0xbe621bfe,0xbe448939,0xbdd31e79,0xbd7e716b,0x3ca0816b, -0x3e11f253,0x3daada6e,0x3d90c930,0x3d8478fc,0x3d859044,0x3d57bf58,0x3d615c18,0x3d39cde7,0x3cfda942,0x3ca86fd5,0x3c1a55f4,0x3cf4bbee,0x3a3f7f74,0x3ce315cf,0x3c430b1f,0xbb9f16fb,0x3e37ddb6,0xbdd6067d,0xbef3232c,0xbefe6b69,0xbef270e0,0xbeeae5fb,0xbeeddeae,0xbf0010ea,0xbef5845f, -0xbee15a59,0xbeb18983,0xbeca77ba,0xbedbfdde,0xbef09b88,0xbed2a260,0xbeabddb2,0xbe8bfd3f,0xbe042d5c,0xbda45369,0x3cfc5823,0x3df7ab2e,0x3db357ed,0x3d8185e9,0x3cb0d6de,0x3c29a5fd,0x3cc83eab,0x3cac1c4b,0x3d2623dc,0x3dac8db7,0x3d82bdba,0x3dbaae33,0x3db3aa09,0x3de559fc,0x3d11ded3, -0x3dde58a1,0x3cf34f2d,0x3dfdf6f2,0xbe93c025,0xbf179aaf,0xbf0cf00d,0xbee52f69,0xbea15972,0xbe74a4cf,0xbe9edda2,0xbe8ca11b,0xbebcae65,0xbf12e72d,0xbf2c4a1f,0xbf3083b1,0xbf232a57,0xbf072a87,0xbed83771,0xbeadaf70,0xbe4797a5,0xbe05130d,0x3cb602be,0x3d74e24f,0x3d9e7e2f,0x3df2c710, -0x3d932755,0x3d9846d7,0x3dd51195,0x3df4d22c,0x3de327ec,0x3e12b33a,0x3db12a3a,0x3db64562,0x3dd5a504,0x3e3315fa,0x3d2cdc04,0x3e1db7f5,0x3c882437,0x3ccb8aeb,0xbeb56cd5,0xbece1438,0xbe8eb240,0x3dc6cabc,0xbd5c5510,0xbe394a1d,0xbea6b271,0xbec22683,0xbeeb3386,0xbefa2111,0xbf0e1324, -0xbf10df60,0xbf02d044,0xbee76535,0xbeb5adaf,0xbe72cccb,0xbe10f70d,0xbdc4bc27,0xbc50222c,0x3e3560f2,0x3dd9e231,0x3ddd657a,0x3ddcbcad,0x3db0b3e2,0x3dc75ff9,0x3d3c6de7,0x3dcef1e5,0x3e463d69,0x3dcb5133,0x3db87489,0x3d61fd2b,0x3e0769c7,0x3cf4b1db,0x3e1c4d21,0x3d93a3da,0xbd15fb1b, -0xbeafe957,0xbea50a97,0xbe857b4a,0xbe1bedde,0xbdd2516e,0xbdc8d978,0xbe7cbfc0,0xbe8cb2a3,0xbec474b6,0xbef85efb,0xbef6863a,0xbee15511,0xbec38b28,0xbe87ac64,0xbe34d49c,0xbdfd8caf,0xbde774ff,0xbde0e4c5,0xbcb22ef9,0x3e58b32e,0x3dbd259b,0x3e2c7c24,0x3e23d9e2,0x3dd2bf9b,0x3decd779, -0x3df0a228,0x3ddcffe1,0x3e59d2dc,0x3df38f69,0x3dd4b6c5,0x3d5f7b06,0x3d8308c2,0x3dc541a0,0x3e001930,0xbe0fa4a8,0x3e660ff6,0xbe1c4805,0xbe5fb183,0xbde2e96b,0xbd0ad986,0xbd5232c1,0xbda51642,0xbe1b36db,0xbe409539,0xbe482cf3,0xbe4dcb70,0xbe6eeff9,0xbe71bec8,0xbe53663c,0xbe319b90, -0xbdfeaf54,0xbdac2981,0xbd56ee39,0xbdd1ee17,0x3d7ac9ad,0x3e5cfc82,0x3d89935b,0x3e198077,0x3dccce98,0x3df7d0d4,0x3e14cc89,0x3e157d80,0x3e381f29,0x3d9765ba,0x3e1d43f0,0x3e10b583,0x3d97c802,0x3dfca1d2,0x3d97e39a,0x3de71724,0xbbfc6c3e,0x3e2ca47e,0x3c929c7c,0xbd85b6fc,0xbc49955e, -0xbcccd0d2,0xbda5c928,0xbe00cea0,0xbe1f6c55,0xbe25465d,0xbe2daa91,0xbe3132fd,0xbe018e98,0xbdad3791,0xbd04cdd8,0xbc78e0a9,0x3c8d1086,0x3d278598,0x3d377daf,0xbcf23e84,0x3d09bf01,0x3e34b4ba,0x3e307cc7,0x3e279d3e,0x3e18a291,0x3e79aa4f,0x3e024dc4,0x3e7f648f,0x3d676922,0x3e73878e, -0x3dec695c,0x3e6dc126,0x3e38582d,0x3e3b35ab,0x3e40b359,0x3e6c72d1,0x3e00675b,0x3ef7cec3,0xbce27399,0xbcb34ad7,0xbca22ce8,0xbceb2081,0xbcccd3f6,0xbcd685a7,0xbd0e542e,0xbc491455,0x3c0b9cab,0x3ccd5d41,0x3d5296d5,0x3d99e200,0x3dec134a,0x3dd00941,0x3dbbafc0,0x3d9e49fb,0x3d8d67fb, -0x3d555f19,0x3d352321,0x3ed2c893,0x3dea5de7,0x3dc596d4,0x3df5b274,0x3e156d30,0x3c88f8d7,0x3bca204e,0x3c6b92e2,0x3de4eb45,0x3c829ce3,0xbc7c902c,0x3db81761,0x3d95cbc6,0x3e3877d2,0x3e3a8456,0x3ceaa69b,0x3e029994,0xbe187fcb,0xbd3806a0,0xbd93150e,0xbd90344d,0xbd92e86f,0xbd92fde9, -0xbd97ecdb,0xbd76a8cb,0xbd4a10bf,0xbd1648d7,0xbcf1a826,0xbcbcbf98,0xbc3c9939,0xbcce0896,0xbd00982c,0xbd1b21ce,0xbd3311f3,0xbcea752f,0xbe00cbca,0x3e0fac00,0x3e9d8a3b,0x3f235652,0x3d2b01a1,0x3e8cff24,0x3f170dec,0x3f18db13,0x3f169afc,0x3f0bc843,0x3f14871d,0x3f15187e,0x3f1082ee, -0x3e90a105,0x3bc6fd74,0x3f1ef3c7,0x3ea91212,0xbdc27cf0,0x3d898d54,0xbd24f180,0x3de8cfcc,0x3d7ff2d6,0x3d8aaa46,0x3d62b19d,0x3d838e2d,0x3d857bce,0x3d778215,0x3d72d977,0x3d694cc6,0x3d60b372,0x3d5c03b6,0x3d5dbc90,0x3d702527,0x3d70cfb0,0x3d7a36a1,0x3d831374,0x3d8bbc26,0x3d82f1cb, -0x3dcc68ff,0xbd14b0e2,0xbdcb4514,0xbe0d6d0d,0xbc0b2b9b,0xbdc46bef,0xbe0994a5,0xbe0ee024,0xbe0d93b3,0xbdfb770b,0xbe1735ff,0xbe1db7e5,0xbe199807,0xbdcbe99b,0x3c02a60d,0xbe19564f,0xbdf7a34f,0xbe0fbcd6,0x3da60fd6,0x3db0f135,0x3d8da830,0x3d51b373,0x3d853211,0x3d80accf,0x3d5395f9, -0x3d6c3782,0x3d651ff1,0x3d513d2b,0x3d3fd30d,0x3d5006df,0x3d8384ab,0x3d85a35d,0x3d8fa594,0x3da0f717,0x3dabdc43,0x3dc61a20,0x3d9e5313,0xbd8b41c9,0x3cfa3586,0x3c23a8a7,0x3c338a62,0xbace12dd,0x3cb1e71c,0x3d150a7a,0x3cd851af,0xbbac1dcc,0x3cf0a693,0x3d5bcb6a,0x3c6cdf88,0x3c94bc59, -0xbcb90f23,0xbcfb150c,0x3d5abbeb,0xbc74ca0f,0x3dbbf53f,0x3e1cc0cb,0x3db35eb7,0x3d31e90c,0x3d7a3900,0x3d82fcc9,0x3d147bee,0x3d26b04c,0x3d06e06d,0x3cfb55df,0x3cc1f295,0x3cb8f1b6,0x3d352948,0x3d319d91,0x3d63aa13,0x3d975443,0x3daff8b0,0x3df14128,0x3d910fa1,0x3c85dc0a,0x3d0ada37, -0x3ca7c9bf,0x3d10d3f3,0x3c496a1c,0x3d02c98a,0x3c429f99,0x3d88d81b,0x39b383f0,0x3d30f83d,0xbc83d5ef,0x3bbf325f,0x391bb097,0x3c0afecd,0xbcb987e4,0x3ce00b8b,0xbc3787d6,0x3dd8039d,0x3e3535dd,0x3de19f01,0x3d0bd09d,0x3d1098eb,0x3ccef337,0x3ac637c1,0x3d2bdb38,0x3d73f364,0x3d682faf, -0x3d402003,0x3d67ce6c,0x3db8a455,0x3dac8237,0x3dbf6655,0x3ded0390,0x3e09acb8,0x3e1a215e,0x3de954d3,0x3d524bf0,0x3d9b3d97,0x3d3e7c2c,0x3d7431b7,0x3d75b2d2,0x3d55595a,0x3d440033,0x3d2b0405,0x3d83b564,0x3d0e1dc2,0x3d37483b,0x3d27b67b,0x3d0a29b5,0x3c3078f9,0x3cc5c33c,0x3daba852, -0xbc83ae93,0x3e94b1e9,0x3ea8f31a,0x3e4a14aa,0x3e02faa6,0x3e4187bb,0x3e269c51,0x3db8d312,0xbdb7c00c,0xbe4438aa,0xbe4bb9eb,0xbe559184,0xbe652283,0xbe88088a,0xbe534419,0xbe1d9869,0xbdd8dd76,0xbd4e6944,0x3ccdd94d,0x3d229c65,0x3ccfa127,0x3d85e8c4,0x3d61f3d8,0x3d365546,0x3d004fa1, -0x3d19f267,0x3d440873,0x3d483da4,0x3d130991,0x3cb95359,0x3cfc14a3,0x3cd599bc,0x3db3092f,0x3d48e40e,0x3d9a482e,0x3d18b2ca,0xbe28d948,0x3cbcd5d1,0x3ea43e6d,0x3e5a3110,0x3e731bef,0x3e2ddd2d,0x3d86e905,0xbcd3a035,0xbe6db6f9,0xbea08203,0xbea87a9d,0xbeafae0d,0xbe905829,0xbe2239b3, -0xbd7756cd,0x3c58ad49,0x3d8c5fe9,0x3d92537e,0x3dcb2f9f,0x3d4c6f3b,0xbcd53e40,0x3b894976,0x3b1d602e,0x3d3a7af6,0x3d3323ea,0x3c62d560,0x3ce713a6,0x3d180090,0x3da2b191,0x3d87a989,0x3d889674,0x3da4a62d,0x3d16c9e4,0x3d99e7c1,0x3c53218c,0x3d04f87f,0xbe3d96af,0x3d6ef36b,0x3f1143a6, -0x3f0ab8e1,0x3f24578e,0x3ef6af48,0x3ecabb83,0x3e64822a,0xbc9363ba,0xbe2e2a48,0xbe245957,0xbabc3c04,0x3def877f,0x3e4487c4,0x3e47e34c,0x3e36f439,0x3e0ced89,0x3e218b1c,0x3e62f521,0x3dd0b1cf,0x3d2bf277,0x3d8d5c08,0x3ad11348,0x3d08ae0e,0x3d0fa5f2,0x3d29be4b,0x3d9b4952,0x3dad7247, -0x3dea04b4,0x3d8bcb0b,0x3d40df7c,0x3d32c99d,0xbd27d860,0x3c68f164,0xbe21cd52,0x3d3cd773,0xbdd40430,0x3eaad2bb,0x3f27a8db,0x3f09770b,0x3f198e7e,0x3ecc9f6d,0x3e61ef75,0xbca0fbe7,0x3b6572e8,0x3d13e603,0x3dc528dd,0x3de657c0,0x3df39b94,0x3e004e44,0x3dcc56b1,0x3de0f356,0x3e3d98b3, -0x3e3c8768,0x3e5ebe92,0x3dc66262,0xbc174864,0x3d5c4a9b,0x3d26fd41,0x3d59127f,0x3d4a349e,0x3d7e86a8,0x3d3fbc24,0x3d775441,0x3e00c4c3,0x3da41d0f,0x3d93e2e5,0x3de63ae9,0x3d624058,0x3dd9e9dc,0x3c0e8865,0x3d93c604,0xbd26e2f9,0x3e628927,0x3ea050b5,0x3e3417cf,0x3e40cfbf,0x3c7fc1b9, -0xbdb15749,0xbe31b28f,0xbe31b481,0xbdde3b3d,0x3d45e33f,0x3dd7a6e2,0x3e170585,0x3e1ea9fb,0x3e3a6af5,0x3e303301,0x3e33bdf6,0x3d7c729a,0x3d3fa80e,0xbc335105,0xbd154d3e,0x3b0d2abf,0x3c8e5195,0x3ca845b8,0x3c4850d4,0x3d4729b0,0x3da636d9,0x3da658c6,0x3dbb9526,0x3d543ddc,0x3d117990, -0x3c4921b8,0x3d54aa8c,0x3d8c511a,0x3cef6f1f,0x3e0c86ab,0xbe81fb04,0xbc5516f9,0xbb29d9ea,0xbdb332a1,0xbdb00e1e,0xbe1d0047,0xbe3edde4,0xbe4d04c3,0xbe551b55,0xbe5c2bab,0xbe3b9744,0xbdaca03b,0x3cba755e,0x3dcefca6,0x3e2a1379,0x3e32051f,0x3e0cbf19,0x3c8d606d,0xbcd58208,0xbda36947, -0xbd8c1526,0xbcf2ee57,0xbd43f366,0x3bbe6157,0x3d3f6ec1,0x3d93425b,0x3d9ef51d,0x3da0568f,0x3c0133ed,0x3d33c5fd,0x3d21199b,0x3d0ca816,0xbc4c932e,0xbd0cd84d,0xbd04c3eb,0xbd701f97,0xbd40ecd0,0xbe05acd8,0xbe034764,0xbe130775,0xbe1aaa52,0xbe102d57,0xbdf50c65,0xbdd4f4ea,0xbd54192e, -0x3b0a072c,0x3d5b4cd9,0x3d67cb20,0x3d6ba301,0x3d8a9a7b,0x3d3be8d2,0x3cef9600,0x3d05803a,0x3c8800de,0x3c4fc6a9,0xbd055c0b,0xbd65ffd2,0xbcf8f148,0xbcb15f4d,0xbc0e22f9,0x3caea5eb,0xbb8a8dfd,0x3d079ffb,0xbad1f1bd,0x3c6eb628,0x3cf783c9,0x3d210ce6,0x3d5a6df7,0x3d0fb4ba,0x3cd1fb66, -0x3bd1b534,0xbd1b5569,0xbdadc636,0xbe2b1c80,0xbe07605c,0xbe0f972e,0xbe0c436b,0xbe0ee10c,0xbe12f9db,0xbe1ac96e,0xbe1a3d9c,0xbe208fd2,0xbe216d57,0xbe1f6757,0xbe197808,0xbe161a5e,0xbe0a1d8b,0xbdf96e2b,0xbde73c2b,0xbde8af57,0xbdd7dabb,0xbde0bd99,0xbc2a2b90,0xbd726b8f,0xbdabeff7, -0xbd983394,0xbd82c3cc,0xbdb35c7c,0xbda4c8b8,0xbdd7a153,0xbdcc71a1,0xbdd621e2,0xbdc2c397,0xbdbb2a4d,0xbdd1a326,0xbdcee7ad,0xbdd70653,0xbe08cfda,0xbe24aeb6,0xbe11aa6c,0xbe095900,0xbe0ef7f6,0xbe0af575,0xbe0b83c3,0xbe09ac6a,0xbe07fc35,0xbe05a2b1,0xbe029c75,0xbe007f3b,0xbdf98a56, -0xbdf3c0f0,0xbdeea7f7,0xbdf27a3f,0xbdf9ee06,0xbdfc0a59,0xbdfa6733,0xbdeb08cb,0xbe008dac,0xbe19ea06,0xbe13cb55,0xbbce767b,0xbe21b502,0xbe1b3bbf,0xbd397218,0xbd4b0887,0xbd379567,0xbd367b2b,0xbd4e2cd8,0xbd541bd7,0xbd528379,0xbe1ea89b,0xbe30f7b3,0xbcad06ec,0xbe18a0e8,0xbe1c81eb, -0x3dce80b5,0x3e1947d6,0x3dcc4500,0x3dd56ac6,0x3ddb3241,0x3dd68873,0x3dd2beb0,0x3dcd521a,0x3dcecb35,0x3db5700b,0x3da83b9c,0x3d9f952a,0x3da27c10,0x3da6ba9e,0x3daeb70e,0x3db4d1ff,0x3dba3b9a,0x3dbdde16,0x3dbe4704,0x3db813a2,0x3da82d0c,0x3e053006,0x3df6841a,0x3d0458ae,0x3e04e5b2, -0x3dfe5d99,0x3d22603a,0x3d4664ea,0x3d4e5378,0x3d486b09,0x3d6c0186,0x3d725e4b,0x3d7740e3,0x3e01ac80,0x3e0c4a38,0x3d29b007,0x3e0be67f,0x3e03961c,0x3e170966,0x3e077256,0x3e155aa6,0x3e0ed805,0x3e09fba0,0x3df9dee7,0x3df7784c,0x3db1f331,0x3d94b7b5,0x3d8b05c0,0x3d91480d,0x3d9ca77d, -0x3db478d8,0x3dc5c232,0x3dd31669,0x3dd44859,0x3dd8b79f,0x3dbc68ce,0x3dd5aed1,0x3dcb0628,0x3db64484,0x3ddda171,0x3db77402,0x3db716c5,0x3dca28cc,0x3dc7e6da,0x3de75481,0x3df2ddde,0x3ddef1d9,0x3dc46195,0x3dc7f9c8,0x3dcd7e83,0x3dd20cb5,0x3df6d1fe,0x3e0490a4,0x3e4f3a02,0x3e336fcb, -0x3e22ac46,0x3e305717,0x3e2480b0,0x3e2b5f73,0x3e16083b,0x3e19a032,0x3d93d509,0x3cc3e924,0x3c101a2f,0x3c58ebe4,0x3d02b46b,0x3d691d73,0x3da0b920,0x3dc7a4da,0x3dd05ebc,0x3dd9ef51,0x3da9b5b1,0x3dbd1ab2,0x3dd58141,0x3d948861,0x3d9f24c1,0x3d9cc6c0,0x3d9a4d1d,0x3d8731fb,0x3d953f53, -0x3d9bd3f3,0x3dc2c756,0x3d93e195,0x3dabffa9,0x3dbf2f1a,0x3db4a75d,0x3dcd1cb9,0x3e0b1b34,0x3e2cceba,0x3e4bc3c5,0x3e392f74,0x3e1fdfcf,0x3e44040c,0x3e3f55f3,0x3e462b66,0x3e28089a,0x3e27522f,0x3d4225c8,0xbc26ac15,0xbc97c280,0x3b2572e8,0x3c9b52ad,0x3d7a1685,0x3dbfca79,0x3de5c7ff, -0x3de4d671,0x3de0433c,0x3da69c13,0x3db04dcf,0x3dc74556,0x3d599183,0x3d688907,0x3d5425db,0x3d58968e,0x3d16efbd,0x3d496a02,0x3d40f729,0x3d6fbb3c,0x3d5528ec,0x3d513a09,0x3d8801a7,0x3d6e3be6,0x3db426ab,0x3ddf6c13,0x3e2edbdf,0x3edd8852,0x3efe3ecc,0x3ed70505,0x3ed745ff,0x3ecc8b1a, -0x3ea94fe2,0x3e865f41,0x3e76b756,0x3de88740,0xbc410249,0xbe878389,0xbe454563,0xbe11b4e2,0xbda9faaa,0xbcde623d,0x3d265e24,0x3dccb032,0x3ddd8fb3,0x3db52724,0x3d8cfc8f,0x3d61750a,0x3d2684d8,0x3d8e9e3f,0x3d419172,0x3d254378,0x3cf9f872,0x3d2aa932,0x3d560024,0x3d84fd4b,0x3d93bad1, -0x3dd29387,0x3e0fc18d,0x3e468b91,0x3e78ec76,0x3e88d3f8,0x3ea70858,0x3e644829,0x3ed1ccb7,0x3f1e6ddd,0x3f25f77a,0x3ee23620,0x3e9923f7,0x3e75eb7d,0x3eaf599e,0x3e75a93b,0x3e46e880,0x3df09bc0,0x3e487537,0x3e827308,0x3ea32d95,0x3ea12ecc,0x3e8eaebe,0x3e6a1a79,0x3e29c057,0x3e049620, -0x3e05ae01,0x3dadb73a,0x3d7731ca,0x3d950f1b,0x3d8dd7fd,0x3d8e073e,0x3d4136f8,0x3d8282d8,0x3d83973f,0x3d9c425c,0x3d9f3ab2,0x3d998276,0x3d86e73d,0x3da44745,0x3dff7d6f,0x3e065ed2,0x3e62e881,0x3eb37367,0x3f0d2335,0x3ea5ecbc,0x3e1505bc,0xbe8830d5,0xbe21007a,0xbdb4579a,0x3df99b46, -0x3e1a29da,0x3e675c70,0x3ea33f31,0x3eb402c1,0x3eb2a46e,0x3ea9fe5e,0x3eaf335c,0x3eb7de4a,0x3ebf9254,0x3ea567e4,0x3e79fd12,0x3e4e2e83,0x3e403d99,0x3e0269d9,0x3d9e70a3,0x3da9c2d8,0x3d6c754c,0x3c9e120e,0x3cf6958c,0x3d56e538,0x3de9596b,0x3da3990e,0x3d9fd141,0x3dac8c64,0x3dcdabb9, -0x3e1edfb5,0x3e5d7a8c,0x3e4f6f18,0x3ec5d3d8,0x3e54435a,0xbea4ce1e,0xbeccacb3,0xbf480e9b,0xbee33ef2,0xbe807e4d,0xbd18bb57,0x3ba69a55,0x3dc8b30b,0x3e2d7094,0x3e8cc2e7,0x3eacd9c3,0x3eb482b6,0x3eb3b09b,0x3ea7841b,0x3e962351,0x3e907e84,0x3e7d7d1c,0x3e5f926f,0x3e0d44f8,0x3dd45101, -0x3db4962e,0x3da0d0a3,0x3da6a9fe,0x3d93e531,0x3da3cec3,0x3da974cd,0x3dabb5c9,0x3da8fdb1,0x3dc696d3,0x3da930d2,0x3dd72b7f,0x3dc611e9,0x3e15e72e,0x3e186725,0x3e775499,0xbb10fe8b,0xbebc8f7b,0xbeb29bd0,0xbedacd0e,0xbeaa9b25,0xbe8c6271,0xbdec1b97,0xbcf7d062,0x3d9bbac5,0x3e0ef99d, -0x3e5ae2af,0x3e844b4b,0x3e936622,0x3e96c7e1,0x3e9acf8d,0x3ea29ddb,0x3e89fa0e,0x3e44c1db,0x3ddad091,0x3cd9846b,0x3d235b10,0x3d2e0b04,0x3ca8bc07,0x3d072146,0x3cdd0a37,0x3d965c1e,0x3d882fb7,0x3d1f081f,0x3d4d253d,0x3d8101af,0x3d82c623,0x3dd60a4c,0x3dffba59,0x3e09dbbb,0x3e0ad167, -0x3e21e3f1,0xbd5cdf08,0xbe3e8ad5,0xbe3c7ad1,0xbe83005b,0xbe3fed4d,0xbe0ca48f,0xbd45c491,0x3db6e5a1,0x3e3a3c2b,0x3e74ea1c,0x3e89d920,0x3e8a7a53,0x3e8470ee,0x3e7f8ac5,0x3e69b650,0x3e552323,0x3e0850ee,0x3ddbbe3b,0x3d4145d1,0x3b803216,0x3d099e5d,0x3c316614,0x3d05d0f5,0x3d038f6d, -0x3d1055cd,0x3d2a068d,0x3cdb28a0,0xba884bf6,0xbb85b9f9,0x3c972581,0x3d935a53,0x3d0e27a4,0x3ce4beec,0x3cf87c24,0x3d2759d0,0xbdc8541b,0xbdc33a4e,0xbe098403,0xbe22e3b4,0xbe57c27e,0xbe01563b,0xbd85d7c1,0xbc78290d,0x3d0d768f,0x3da36909,0x3e05eb17,0x3e0e78a4,0x3e21615f,0x3e396b47, -0x3e15305f,0x3de4b374,0x3da2e21e,0x3d86fe1c,0x3d5c70ae,0x3d26af4b,0x3cf2a8e0,0x3c9ab9ca,0x3c80cda3,0x3c74d904,0x3adcb346,0x3c7ee226,0x3a0e4cd9,0x3c6857a6,0x3c918a87,0x3c51067e,0x3beab35f,0x3bed39e7,0xbba331a4,0xbb2c81ed,0xbc9d3002,0xbd7db921,0xbddf64b7,0xbdba5728,0xbddff2ca, -0xbde16803,0xbdf79cc3,0xbe0a02af,0xbe1e6d4f,0xbe2b81a6,0xbe2772f4,0xbe228d63,0xbe1ab5a3,0xbe15d7a4,0xbe111f44,0xbe0a117a,0xbe0429e5,0xbdefa58f,0xbddf2c60,0xbdc5af56,0xbdb82b51,0xbd9a92f8,0xbdc624e5,0xbd770d79,0xbd24d53f,0xbd366550,0xbd08bd33,0xbc276754,0xbc946ec8,0xbc4d0b94, -0xbcd4df9d,0xbcdf24dc,0xbcfe377f,0xbd3abbcd,0xbd610caf,0xbda78d85,0xbda22d81,0xbd9478c4,0xbdb1f371,0xbda2e47d,0xbdafb84c,0xbdb040f5,0xbdb29db6,0xbdbde513,0xbdc4ee27,0xbdd40bf6,0xbdd166d3,0xbdd4fb22,0xbdda1920,0xbdd701a3,0xbdd4c6b6,0xbdd52f8d,0xbdc58e0f,0xbdb9fb03,0xbdaed700, -0xbda60d00,0xbda1aca3,0xbd8c15b2,0xbd84c518,0xbdab0bb2,0xbe1c33cf,0xbd41a2ab,0xbd91c6d3,0xbe0c47c8,0xbe0cbabf,0xbe0eb541,0xbe0ec616,0xbe0dc284,0xbe10e612,0xbe0f3a6b,0xbda3555d,0xbd52a0cd,0xbe2897f1,0xbdd5664b,0xbda068cd,0x3d11bcaf,0x3cb8c170,0x3c94666d,0x3d0f926a,0x3ce4a653, -0x3d089cac,0x3c8d3b48,0x3c504aa2,0x3c65aa34,0x3cb9842d,0x3ce7a368,0x3d05c5d3,0x3d154f89,0x3d20abec,0x3d2230c4,0x3d257d7b,0x3d214b31,0x3d1b009d,0x3d08266d,0x3d0f892f,0x3ce08828,0x3ca8acdf,0x3d4cee07,0x3e032f67,0x3c5f7d0c,0x3d386ad6,0x3df561bf,0x3df39b0c,0x3df457c9,0x3df27a83, -0x3ded403a,0x3dee3a89,0x3deca528,0x3d3a491e,0x3bec771b,0x3e0cddf9,0x3d7f6184,0x3df12c0c,0x3c257fb1,0x3ce56c8b,0x3c819e81,0x3c969b24,0xbc9de683,0xbcc674fd,0xbc3b6033,0x3bc7982d,0x3cb1f1bd,0x3d06886d,0x3d3ba66e,0x3d544915,0x3d50f307,0x3d619df8,0x3d537848,0x3d3b46b9,0x3d0db844, -0x3d12883b,0x3cb94132,0x3d985f8e,0x3d45d887,0x3d16920f,0x3d52b346,0x3d56cc72,0x3d03c8ef,0x3d1a1e15,0x3ce8fc23,0x3d1e0362,0x3cca8800,0x3cc8bec7,0x3d2158dc,0x3d1ad10f,0x3d7903c7,0x3d863211,0x3d06a373,0x3d812188,0x3c7042bf,0xbc3678f3,0xbbad3dc7,0x3c0f3324,0xbd80cd7a,0xbdaaffad, -0xbd5b187b,0xbc9ef9cb,0x3c1c1a97,0x3c9d5ef8,0x3d29b63e,0x3d7a5571,0x3d894326,0x3da2b4d2,0x3d99b7b5,0x3d84b98b,0x3d4032d7,0x3d20e9f0,0x3d0c8da3,0x3d3c576c,0x3d4b8019,0x3d5ecb35,0x3d444e62,0x3d50668c,0x3d171813,0x3d6be307,0x3d417c4f,0x3d674f66,0x3d27775f,0x3d3dba07,0x3d3af21e, -0x3d6016a3,0x3d6d4a02,0x3dabe412,0x3d567cd2,0x3d9c84bc,0xbc0c8f31,0xbd4ae3fe,0xbd5eddd6,0xbcfad78d,0xbdde9fc5,0xbdf169f1,0xbd965822,0xbd29edad,0xbca4886a,0xbaeba4c0,0x3cd27238,0x3d435752,0x3d5b4554,0x3d9a2127,0x3d96dbad,0x3d6a09da,0x3d143afb,0x3d0f3b10,0x3cd3e6d8,0x3d734c1b, -0x3d8e6e9f,0x3d55bff3,0x3d6382ea,0x3d55b6bc,0x3d2f29fc,0x3d48d10e,0x3d571fc5,0x3d65c1a8,0x3d02ad1e,0x3cb03ca7,0x3cff85e4,0x3d3cbfc4,0x3d8ebbd4,0x3dbaae2b,0x3c8e592d,0x3e358ac8,0xbda119ec,0xbe2b7561,0xbe11f2f6,0xbe5d7709,0xbec1009b,0xbed636c5,0xbeba11b4,0xbe168d50,0x3c96e06c, -0x3db6689e,0x3dea9785,0x3e1f44cb,0x3e5ddb7e,0x3e66678c,0x3e56f730,0x3e46c49b,0x3e06fb76,0x3dd694f4,0x3d9bf51b,0x3d5bb5b3,0x3d8f9e30,0x3d50e80d,0x3d66acba,0x3d4adde8,0x3cf24a6d,0x3d435442,0x3d60b3a9,0x3d871aba,0x3d7d8c85,0x3d910e68,0x3dd1097a,0x3d65cd9c,0x3dc61c02,0x3dcaa673, -0x3e04df2b,0x3e947143,0xbcbf4be3,0xbf0a1629,0xbf0d7ca3,0xbf34a5bd,0xbf12823c,0xbedc22de,0xbe944580,0xbd8e86e5,0x3d70409b,0x3e16b15b,0x3e3930df,0x3e349075,0x3e081096,0x3dd9d9a1,0x3dae0d33,0x3d9ae333,0x3d5c9527,0x3d4e8630,0x3d90ef28,0x3dd11010,0x3daca24f,0x3d95bab5,0x3d5dfee6, -0x3d3d3815,0x3d446b74,0x3d854d0e,0x3d848fee,0x3d89fe65,0x3d5e053d,0x3d7b18fa,0x3cf1ad26,0x3da11838,0x3ca024b6,0x3dc254bc,0x3d2503f1,0x3df60715,0xbec4703d,0xbf88b681,0xbf82caea,0xbf7c346b,0xbf48954c,0xbf2e5647,0xbf10f039,0xbeaa9d8e,0xbe462d46,0xbe16391e,0xbe3387ba,0xbe244055, -0xbdf1c8eb,0xbd9280af,0xbd20436e,0xbc849ca7,0x3b15d1e4,0xb99e72be,0x3d9a2271,0x3de3ab51,0x3dcb744c,0x3dc07680,0x3d952aef,0x3d7859ad,0x3cd7e265,0x3c9166a0,0x3d197695,0x3dd3eada,0x3d92234c,0x3d925507,0x3d83dbe2,0x3e1e94a7,0x3c7cf4fa,0x3e3c3919,0xbdc4e671,0xbe6e335f,0xbf5c301a, -0xbf6cc8eb,0xbf51b909,0xbf28891f,0xbf2ad16c,0xbf2266cb,0xbf07fd37,0xbf040973,0xbf024c27,0xbef52c97,0xbeec08aa,0xbec54b0d,0xbe8c4266,0xbe0e63d5,0xbd58c1fa,0xbd39779a,0x3c655b7c,0x3cc377c7,0x3d7aa466,0x3dddb4e2,0x3d1b6fe5,0x3d47d556,0x3d667f46,0x3d7395ca,0x3d3a3ad5,0x3db36eb6, -0x3d91e92e,0xbc9c1219,0x3ce88c1b,0x3d3309d4,0xbd0e1b96,0x3d5052c7,0xbdab4dc3,0x3c17cb1f,0xbe1e267e,0xbec38fca,0xbf1784a0,0xbf116a8c,0xbf0c627c,0xbf02a07a,0xbebe5cce,0xbe761fbe,0xbe26373f,0xbdf30981,0xbe317375,0xbe9e8a94,0xbeaf4889,0xbea7e2bd,0xbe82e027,0xbe618209,0xbe14ce64, -0xbd82e046,0x3ceb3a22,0x3d52bec7,0x3d2b2e3b,0x3da3f77b,0x3d6c3012,0x3d8ef9c2,0x3d55e91e,0x3d334eee,0x3cfc4711,0x3d34cc65,0x3d091753,0x3c186328,0x3cb175dc,0x3bc9f89d,0xbd00f398,0xbdba2294,0xbde27fb4,0xbe0298b1,0xbed3f0aa,0xbddcaaf2,0xbea94536,0xbe9e1d58,0xbe981750,0xbe896e09, -0xbe48baed,0xbdffa9cf,0xbd909ae4,0xbd9c555b,0xbd3bdb10,0xbced154c,0xbd91187d,0xbdde186c,0xbdd8db82,0xbe02c179,0xbde54671,0xbd9542fb,0xbbc1982f,0x3c0b2f5c,0x3d49a872,0x3d1595fa,0xbacb1973,0x3c54d5c2,0xbc3e052c,0xbaf15991,0x3c4a2872,0x3c18bf9f,0x3c375be5,0x3c0ca086,0x3bc7c8b1, -0x3c0e8554,0xbc2ce854,0x3ae1bd93,0xbd323e33,0xbd8dd15c,0xbe13a4ed,0xbe2f4d2c,0xbe11bece,0xbe098a2b,0xbe1df4b4,0xbe23955b,0xbe327da8,0xbe47cd98,0xbe58bcfe,0xbe7041f1,0xbe85a842,0xbe945c41,0xbe8a7e86,0xbe7f192d,0xbe69e605,0xbe51122c,0xbe36cb1a,0xbe2afd00,0xbe16092a,0xbe1409d7, -0xbdac4301,0xbc2f7393,0xbcc019c1,0xbc8826a5,0xbc18c738,0x3c2cff40,0xbc0d36fe,0x3bc012bc,0xbcb063b7,0xbc590c3c,0xbccf1895,0xbcde4d03,0xbd0cdc45,0xbd96df8d,0xbdd016f7,0xbe0b587f,0xbe11833a,0xbd9d34d3,0xbd808dbc,0xbd858b2f,0xbd9b26f2,0xbda53e17,0xbdaf9a6f,0xbdb317d0,0xbdbdc58d, -0xbdb31eb3,0xbda355ac,0xbd990a39,0xbd908ca1,0xbd8f31bf,0xbd810b14,0xbd8989fa,0xbd96423d,0xbd9b84f7,0xbd9012be,0xbd85e9c3,0xbd9c3e4c,0xbd87f5bf,0xbd8a1c01,0xbd8ee2c7,0xbd81e2bb,0xbd6a7c6a,0xbd59d5fc,0xbd48d35f,0xbd637161,0xbd4097bf,0xbd348fc0,0xbcd5e552,0xbcce1177,0xbd069f21, -0xbd27f31b,0xbd642e67,0xbd3b5a72,0xbdd9e51f,0xbd152414,0xbd40ce22,0xbd4f5608,0xbd593bd8,0xbd6af667,0xbd7b4a72,0xbd86f484,0xbd8a20b7,0xbd908cf3,0xbd94c366,0xbd9dadda,0xbda584d6,0xbdafa408,0xbda3debe,0xbd95870d,0xbd89d22f,0xbd890d7d,0xbd7decd0,0xbd6a8ebe,0xbdd3e152,0xbdc22d0c, -0xbd831b12,0xbdb2b960,0xbdb70aea,0xbd5efa0d,0xbd6936f3,0xbd62524e,0xbd6ca3dd,0xbd7cd8f9,0xbd89ec1b,0xbd88d0bb,0xbdb0f66d,0xbda0fe18,0xbd9fd2a7,0xbdccb066,0xbd47c48d,0x3df7503a,0x3db60bbc,0x3dd39e49,0x3db8de32,0x3dc137d0,0x3dba9b82,0x3dd8c7c7,0x3deea8e1,0x3e043b75,0x3e0f3661, -0x3e14b6c6,0x3e14471f,0x3e0e2a68,0x3e0908bc,0x3e04ff88,0x3dff390f,0x3df60e27,0x3dee78ef,0x3de71ce7,0x3dd89034,0x3df20228,0x3dc90023,0x3d6852dc,0xbc703fe2,0x3ddfb65d,0x3d714241,0xbc355e76,0xbc16545d,0xbc09e82e,0xba97538d,0xbc125ca1,0xbc1603f9,0xbbe1aa18,0x3d78bb2d,0x3de1d5f9, -0xbbdda8fc,0x3d45d441,0x3d01172f,0x3dad234d,0x3d82a5e0,0x3d8c53e6,0x3d8f3925,0x3de23dd1,0x3e17c6b7,0x3e397b56,0x3e593af6,0x3e5ed358,0x3e4e4dde,0x3e39e56b,0x3e2b2da5,0x3e22ac8c,0x3e1684f2,0x3e0dade9,0x3e08209b,0x3df82201,0x3de6dea4,0x3dee7f2f,0x3d3c4578,0x3dc496ca,0x3dc81f4e, -0x3da4660d,0x3d9974b8,0x3dbfd4ae,0x3dcc9b24,0x3dd96052,0x3db82603,0x3dcd4f3c,0x3dc5fdc6,0x3d9c4b49,0x3dac9dad,0x3d891723,0x3d9e19f9,0x3db1f590,0x3cc8ad97,0x3cc9628f,0x3b6d6815,0x3c2fec0a,0x3c5d4d60,0x3daaf147,0x3e1de588,0x3e5dd003,0x3e94da15,0x3ea51178,0x3e9dc734,0x3e8ec8ea, -0x3e7a60a4,0x3e66bc75,0x3e454c27,0x3e2b9ba1,0x3e1acc1f,0x3df8626d,0x3dead9bb,0x3dc0e348,0x3dad0cf4,0x3db335ca,0x3da98d73,0x3da0a000,0x3d7c4903,0x3d96ccf5,0x3d7a54bc,0x3db85442,0x3d8d06f4,0x3d844a5e,0x3d2c4953,0x3d3f0f6d,0x3d58dba5,0x3d5e06af,0x3d480c38,0x3d1ad574,0xbc0c113c, -0xbb6d7fda,0xbd0e78a7,0xbcda9539,0xbc373894,0x3de38f66,0x3e63e3d2,0x3ea2a803,0x3ed1dcdf,0x3ed855db,0x3eb7a675,0x3e9482d0,0x3e801cc7,0x3e68cb14,0x3e43d7ba,0x3e29bab6,0x3e1f9b14,0x3dfcb4a1,0x3dd78615,0x3db4fffd,0x3d7fb55d,0x3da45868,0x3d872593,0x3d8a0cec,0x3d6d40eb,0x3d4a0432, -0x3d6bfb6f,0x3d4c1e89,0x3d7ec5cd,0x3cf5fc3a,0x3cd24a78,0x3c8e8354,0x3d0afd88,0x3d3a1117,0x3d1b9f3c,0x3a8fa5fa,0xbe085dcc,0xbe918602,0xbea88b81,0xbeac6986,0xbebb6e72,0xbe5ed13d,0xbd92cfc8,0x3da049a9,0x3e7ed19e,0x3ed1a45a,0x3f1d9db9,0x3f15b28c,0x3f09ec4b,0x3ee4b765,0x3ec7c8a1, -0x3e9c441e,0x3e5c7f96,0x3e162a5c,0x3dfa6cce,0x3e0f9492,0x3df61d39,0x3de77e79,0x3db87371,0x3d9edfa6,0x3d85603e,0x3d2e559b,0x3d8147be,0x3d838810,0x3d742a4e,0x3d4c203b,0x3d11d71a,0x3cf567a5,0xbc3d097d,0xbd1d9373,0xbd479950,0xbd519cc6,0xbe556920,0xbec8a3bb,0xbefd1453,0xbeff141b, -0xbe8faf91,0xbdcd0e53,0xbd4d9b3d,0xbe403e0e,0xbd7100e5,0x3d082594,0x3e2fce33,0x3e14670a,0x3e276b0e,0x3e47c6af,0x3e46477a,0x3e4bfeff,0x3e4ad255,0x3e2b714f,0x3e13a3d7,0x3ddac50a,0x3dbbf863,0x3dc88370,0x3d97bb26,0x3d90d070,0x3d783126,0x3d38ae4e,0x3d6ebd7d,0x3d7f344e,0x3d9a1877, -0x3d7784d3,0x3d5cd217,0x3d400d13,0x3d261539,0x39ea85af,0xbd2bbf0b,0xbe2ac5ef,0xbefee69a,0xbf00d151,0x3e09a5e9,0x3eadd6a6,0x3f394be8,0x3e9a5cd2,0x3cab6db5,0xbe957f5d,0xbeb22233,0xbea0dab9,0xbe1d0c7f,0xbc99c443,0x3dd3c621,0x3e3ba102,0x3e0cfee3,0x3ddbca7a,0x3dbd5f8d,0x3dda1894, -0x3e117e6c,0x3dca4a9b,0x3d9b248b,0x3daa1b78,0x3da6c548,0x3d9e23de,0x3d8f8ef5,0x3d65de6a,0x3d3d7ba2,0x3d64082c,0x3db31839,0x3d1d0079,0x3c6e9613,0x3c23c51e,0xbd7f0065,0xbdef7e07,0xbe864200,0xbe3269dc,0xbede1c69,0x3e28392b,0x3f4c6563,0x3f2e6c6c,0x3f3a4c5b,0x3ed7368c,0x3e8aec20, -0x3d8c975c,0x3db880a7,0x3da7c388,0x3d828a90,0x3d7743b2,0x3d81036b,0x3d8d489c,0x3d9f0f17,0x3db548ce,0x3dc2db8b,0x3d8c2fe4,0x3d836522,0x3d89e4bc,0x3d185c74,0x3d6b12f2,0x3d5a401f,0x3d4f524b,0x3d3f149d,0x3d1cc8fb,0x3da125d5,0x3d848c00,0xbbe24a1c,0x3d28c1c0,0x3ca49036,0x3c673808, -0xbd38c3bc,0x3c7a50d1,0xbe119f08,0xbe1efb41,0xbe143aea,0x3ea3f889,0x3f130fcf,0x3ee648d8,0x3eecb2e1,0x3e971c02,0x3e5ef7e7,0x3e2857d3,0x3deb9951,0x3dfc2139,0x3e515781,0x3e40b7a7,0x3e1ad02c,0x3dcf3358,0x3d30c108,0xbb84a4e3,0xbd441cba,0x3c7ee6ba,0x3d8c4310,0x3dcfbbe2,0x3d9baeaa, -0x3d999fce,0x3d286f4e,0x3d636d5e,0x3d7d934f,0x3d5dd1b7,0x3d2d0295,0x3d2f6fdf,0x3b98de65,0x3c738d38,0x3a8f2ae0,0x3cf29db3,0xbce85e41,0xbd8d6170,0xbdfa0893,0x3de6a632,0xbe99f210,0x3e4aa876,0x3e91aa80,0x3e389894,0x3e44509f,0x3ddd2268,0x3da636c9,0x3d733ffe,0xbc960b30,0xbd9e1752, -0xbdb9b7d3,0xbd7bf2e4,0xbc96086f,0x3c12f42b,0xbc117a02,0xbccf13bb,0xbd55718d,0xbb1aa634,0x3cf11058,0x3cbff514,0x3cb7c335,0x3d4630e5,0x3d642632,0x3d09c05e,0x3cb9c7cc,0x3d0668d8,0x3c8035c8,0x3bf5d08f,0x3d3d12cc,0x3d1cc57c,0x3cea5dba,0x3bda9102,0xbc20bc40,0x3c102cad,0xbd126fe1, -0x3c2a2e2e,0x3d35b5be,0x3d693f26,0x3dfc351c,0x3df95fb7,0x3e281a00,0x3dfba52f,0x3db5759c,0x3d4afd2e,0x3ce2f716,0x3c1cd737,0xbc69eb7e,0xbd66f778,0xbdd77a19,0xbe23f34d,0xbe09265b,0xbdeb66b5,0xbdc5a55f,0xbdaaedde,0xbd2f3651,0xbd5cf1f2,0xbda77032,0xbd90c7b9,0xbd6acc9e,0xbd009a3d, -0xbd22a87a,0x3aa23644,0xbcfcaa6b,0x3d22bb9f,0xbcdda238,0x3c8a3a1d,0xbce8824f,0xbb5b8219,0xbb82cb3b,0xbc028c89,0xbca3d915,0x3d30de4c,0xbddc9d82,0x3e0680d5,0x3e0ef2cf,0x3e0d098a,0x3e15c72a,0x3e1b5042,0x3e2a0abc,0x3e3740e3,0x3e250077,0x3e0edf25,0x3df4d07f,0x3dc67a48,0x3da0f14e, -0x3d36f881,0x3d55947a,0x3d4e4987,0x3d60382e,0x3d5ec68d,0x3d7cd7ed,0x3d777d4b,0xbda061b5,0x3d310b1e,0x3d4e8478,0x3d2318b2,0x3d03c1fd,0x3db87acc,0x3dc858cf,0x3dbcc23e,0x3d6e8bf1,0x3dcaaa54,0x3ddb773d,0x3d92990d,0x3da1f08f,0x3d28b211,0x3d209174,0x3dbe01b9,0x3da356cf,0x3e31e829, -0x3e01941f,0x3e0f7339,0x3e0ee329,0x3e1402d2,0x3e16141e,0x3e1cacf6,0x3e12349b,0x3e0d217d,0x3e079303,0x3e02ad51,0x3dfc70aa,0x3def1b26,0x3df4cd74,0x3df3adcd,0x3df336d9,0x3df3b467,0x3de3bf50,0x3e15351c,0x3d1e2af3,0xbd05e327,0xbe23f880,0x3db21c3f,0xbc4902d5,0xbe11a9cc,0xbe1321e2, -0xbe0a7788,0xbdef904d,0xbe022bc0,0xbdfc9848,0xbde90519,0xbbf70358,0x3ddf88cc,0xbe0d555f,0xbc7c7aeb,0x3e1e39a1,0xbd64e16a,0x3cfa3b57,0xbdd67ea2,0xbd8b76f4,0xbd9e5873,0xbd9505a3,0xbd859de7,0xbd73087b,0xbd5c1036,0xbd6050e4,0xbd5aaccb,0xbd500f74,0xbd57fe02,0xbd5d0a09,0xbd64cfd1, -0xbd6149bf,0xbd60a00a,0xbd5fa369,0xbd60ce68,0xbd396b16,0xbda77a24,0x3d3de42b,0x3ded8724,0x3e4c7afb,0x3c52e033,0x3dde76bc,0x3e4068b1,0x3e4589aa,0x3e436df9,0x3e314cb8,0x3e3fd80e,0x3e400659,0x3e39e57c,0x3dd7f503,0xbc1ba971,0x3e3bfd2b,0x3de67180,0x3dd2ac9a,0xbdcf3547,0xbddb2122, -0xbdcba97b,0xbdb91804,0xbd988a0e,0xbd8553e9,0xbd694c09,0xbd7323f8,0xbd6ad5c2,0xbd51f6a0,0xbd62c944,0xbd6e13ac,0xbd7d8bf2,0xbd7b601f,0xbd72378b,0xbd715da5,0xbd5c941f,0xbd6c7574,0xbd255c95,0x3dfc0b15,0x3c194afd,0x3cc2410f,0x3ce2d818,0x3d3855cb,0x3c12a72f,0x3b48d532,0x3c201bfd, -0x3d3c273c,0x3b5774c7,0xbc8bf1b2,0x3c89b6f7,0xbbf2687c,0x3cca23a2,0x3cdd73de,0xbd3b2452,0xbc8255f3,0xbdea6ffe,0xbe26fc9f,0xbe186e6e,0xbe139b4d,0xbdd4265d,0xbd9bbb76,0xbd71ccbc,0xbd7f196d,0xbd480bc0,0xbcd6b5ad,0xbd0168bc,0xbd27cd8c,0xbd65dab6,0xbd72d05f,0xbd75b8fe,0xbd8130d5, -0xbd4b7e8b,0xbd81a01e,0x3af9d002,0x3d526b93,0x3d3ac78c,0x3d138a89,0x3cbbbb56,0x3d6e9f63,0x3c8e312e,0x3d921c90,0x3bd10b93,0x3da8f734,0x3cc2f67d,0x3d892e2c,0x3d24ca18,0x3cb22c2e,0x3c378e3d,0x3c871fda,0xbcf7798c,0xbc86e014,0xbe0582a8,0xbe21b6e0,0xbe123afb,0xbe12f0ee,0xbddba3c4, -0xbda3cef9,0xbd763904,0xbd763bdd,0xbd19b38c,0xbc1f1f7d,0xbc331933,0xbcce3921,0xbd380c92,0xbd51de7a,0xbd55600a,0xbd611d8e,0xbd52133f,0xbd40cb10,0x3c3cf998,0x3d91eb55,0x3c9540b8,0x3d99c858,0x3d02fee5,0x3cf1bfd6,0x3cdf222e,0x3d3526e4,0x3d6e2d6a,0x3d20c641,0x3d43a364,0x3d033ce6, -0x3d08df11,0xbc5f7a6d,0xbcb780ab,0xbc7b89b0,0xbc9a451c,0xbe3621cb,0xbe31bfa7,0xbe283a9c,0xbe49141d,0xbdd0d211,0xbc8abf16,0x3c60f0f4,0xbc375b52,0xbda75ce0,0xbe0722cb,0xbdd07e6f,0xbd88b448,0xbd69e1f5,0xbd579b9f,0xbde9d202,0xbdf28b80,0xbdbcebc2,0xbd3d2f82,0xbd53d391,0xbbb5b8c0, -0x3dbcd203,0x3d005c26,0x3d5c4159,0x3d402d94,0x3d61497e,0x3d2c712f,0x3d5ab845,0x3d4e340e,0x3d2a6773,0x3d0b9643,0x3c9e59bc,0x3c40c1fa,0x3caa4057,0x3c0a2668,0xbd118ae6,0xbddf6583,0xbe900c94,0xbdc4192f,0x3eb18582,0x3ec81fbb,0x3ec56371,0x3db27296,0xbdcceff1,0xbe577b5a,0xbe8b174e, -0xbe8ec382,0xbe91d9c4,0xbe41efdd,0xbe01f8d7,0xbdbb8342,0xbd5eead6,0xbd0b505a,0xbd34259d,0xbadb209f,0xbc77ac73,0x3d07b85a,0x3dabed47,0x3d7d5cb1,0x3d7187a6,0x3d22638a,0x3d25fed6,0x3d0f636f,0x3d3a8cf0,0x3d5f1529,0x3d8c17b1,0x3d31d5a8,0x3ce4caf0,0x3be5d49f,0xbce54619,0xbd62abe6, -0xbde4fba9,0xbde6a729,0x39b44257,0x3eba5eed,0x3f056b75,0x3e883488,0xbe0f84e8,0xbe325511,0xbe2b7d7a,0xbd61953f,0xbda94a46,0xbd66213a,0xbdc284df,0xbe1d5fdd,0xbe68d45d,0xbe948ffd,0xbe7d1d66,0xbe25d11d,0xbd13d6b9,0xbc5d1350,0xbd4f5920,0x3cd9697a,0x3d3a74f1,0x3ca3a396,0x3d909501, -0x3d6595a9,0x3d7ae0ac,0x3d5acd2e,0x3d8c8493,0x3d781848,0x3d3b44b4,0x3c970854,0x3bcacce4,0x3c0e5652,0xbd31a0c9,0x3c6be1c2,0xbd538091,0x3d241738,0x3ebb8504,0x3ef0690b,0xbdc067ca,0xbe59cee5,0xbf196cd7,0xbe690d9e,0xbc22ad17,0x3e55fd71,0x3e245c9a,0x3e2f2403,0x3e1aae7f,0x3e5bb3ff, -0x3e428b05,0x3dc10d0e,0x3d096b2b,0xbc8a3826,0xbd05b37a,0xbd589b1e,0xbdb836b2,0xbcc1d07d,0x3db8c38d,0x3cf19944,0x3cad3107,0x3c3c40c6,0x3bf3d80d,0x3c38f5fa,0x3d2eac4e,0x3d928158,0x3d54d10f,0x3d976188,0x3d723544,0x3cda41c1,0x3c711382,0x3d0f9c99,0x3d0a1c32,0x3de292b3,0x3ec141e4, -0x3e29414c,0xbe1ee957,0xbdfc3680,0xbe5a2bf0,0xbe021f64,0xbde6578c,0xbcd1c8ff,0x3cb034f9,0x3dee4d1b,0x3e47b99b,0x3e7d42e7,0x3e811463,0x3e54fa0f,0x3e36df7b,0x3ded097c,0x3cb437df,0xbcd99035,0xbdb0fab0,0xbd3b2d93,0x3d465c1b,0xbcdcf10a,0x3c223987,0x3d014ae0,0x3d01af6f,0x3d02d91d, -0x3d393d0d,0x3d35071e,0x3d4c22b8,0x3ce10d3c,0x3d30a613,0x3da2212d,0x3ddabf09,0x3df08e3e,0x3e28d619,0x3e78f27c,0x3e988f47,0x3de701e9,0x3b2d9ad8,0x3d4ac5af,0x3c392c76,0xbc811c0a,0xbd4a29a0,0xbd4a077a,0x3d8b8132,0x3e00fc32,0x3e14c3f2,0x3e117d20,0x3de17908,0x3d65bbab,0x3c98ba1d, -0x3a6f0529,0xb8d5718a,0xbc243fbd,0xbc7b0251,0x3bda3dd3,0x3d4a6de9,0x3d143e32,0x3d3b85e6,0x3d2b4b98,0x3d364ef9,0x3d34ddd0,0x3cd88fd3,0x3ca49f10,0x3cc01255,0x3c903147,0x3ca020a5,0x3d1972d6,0x3d631a41,0x3d996a68,0x3daa4bd0,0x3ddb3d67,0x3db893c7,0x3daa8bca,0x3d2f3afa,0x3d54ec3f, -0x3cdf7552,0x3d4a5544,0x3d92a59d,0x3db0bc93,0x3dd11e09,0x3df52d3b,0x3e1ade2a,0x3e20bb9f,0x3e2b6cf2,0x3e36f645,0x3e2ca27d,0x3e1d8e7d,0x3e1367f6,0x3e052ecd,0x3e07f2d6,0x3dad88af,0x3d0bfda3,0x3d8de077,0x3d90aa69,0x3d74d71e,0x3d287504,0x3d804da1,0x3d571383,0x3d49bd9a,0x3d8eda5d, -0x3d2681ba,0x3d6a03c8,0x3d0fad4e,0x3d829237,0x3dadaaec,0x3df98c8b,0x3dba9ba8,0x3e2e371e,0x3d8509eb,0x3d3aaa81,0x3d594545,0x3d43b7eb,0x3d383729,0x3d114373,0x3d00156e,0x3d24456b,0x3d43696c,0x3d5f9eb2,0x3d7f59ea,0x3d8d5e3e,0x3d94e4c9,0x3da140a7,0x3db67bb4,0x3dc81556,0x3dcbecb8, -0x3dd6a778,0x3df6b304,0x3db61cff,0x3daa34ac,0x3dbb5d68,0x3dd366fb,0x3dc39999,0x3dabfccd,0x3d876395,0x3da8474d,0x3dc2aec5,0x3d8d0407,0x3d405589,0x3d8d86b7,0x3d84d4b1,0x3db7afcb,0x3dc49e97,0x3d861f5a,0x3e0273fb,0x3ca17fa9,0x3d3f7f33,0x3d33339f,0x3d31c3f6,0x3d31b449,0x3d35177a, -0x3d2b91fc,0x3d50d564,0x3d6bb267,0x3d823560,0x3d90e636,0x3da01030,0x3db33d8a,0x3dac15ed,0x3da4639e,0x3d9defba,0x3da03852,0x3d95d73e,0x3d8f9117,0x3e11285a,0x3e301764,0x3e1c860c,0x3de94de5,0x3e2a1c6b,0x3e33df5a,0x3e38aaa8,0x3e31e714,0x3e283aab,0x3e349942,0x3e373b00,0x3e30e372, -0x3e2787e0,0x3dc7832e,0x3e2f018a,0x3e310b86,0x3d5401c6,0xbce4abdf,0xbdc15ca0,0x3c24f90d,0xbc402bec,0xbbf295aa,0xbbe8d834,0xbcd0abd1,0xbd1fe5b8,0xbd6c347e,0xbd6ecdb2,0xbd6cbc81,0xbd56b5a1,0xbd358f7a,0xbd1bd59e,0xbd09c96b,0xbcf2ad62,0xbcdd4c3c,0xbcd441ea,0xbcbed83f,0xbcb427e5, -0xbbe759d0,0xbdba08f9,0xbdd4aded,0xbd44753a,0xbda5d4c5,0xbdd4fa2b,0xbd53ba5f,0xbd691e82,0xbd664918,0xbd4b51be,0xbd807a00,0xbd88e35f,0xbd868fad,0xbdde07f6,0xbd916413,0xbd88208c,0xbdf1ec4a,0xbe05c395,0xbc108356,0x3d0aa6ec,0x3c8e83be,0x3c837c25,0xbd068c81,0xbd95cb76,0xbdf45e57, -0xbe0564c3,0xbdff2a2c,0xbdc92686,0xbd90467d,0xbd5278ba,0xbd34cd00,0xbd0aa88c,0xbcf47af1,0xbce7e8cf,0xbcc73af7,0xbc28119b,0xbce78880,0xbd87577f,0xbd06283e,0xbd531c1b,0xbd16a045,0xbd1fc6bc,0xbd1d10df,0xbcd15776,0xbd19b7d1,0xbd49b288,0xbcf82ec7,0xbc6843f3,0xbce6c915,0xbd15f5b0, -0xbd619779,0xbd9558b2,0xbccb89c6,0xbd99c9a5,0x3a2689c7,0x3dfd5a73,0x3d9b70e0,0x3d9a7a65,0xbcde2e2c,0xbde2cabe,0xbe4dd645,0xbe63c08c,0xbe569d64,0xbe2e40cb,0xbe015c3c,0xbdb4d6d5,0xbd97b32a,0xbd49147b,0xbd21d48a,0xbd07083d,0xbca37c31,0x3b221544,0xbc99b229,0xbd26c077,0xbcb993f3, -0xbcea5551,0xbca099c0,0xbca9390b,0xbc4a64a3,0xbba2a677,0x3c92b967,0xbc3dcd37,0x3ca750cd,0xbbb0bf28,0x3b40eb7c,0xbccf6b7b,0xbcfb7d34,0xbd5bfc25,0xbc9c3bbc,0xbd7c531b,0x3d1722fe,0x3e4810dd,0x3e0a9dc7,0x3dee50b1,0xbd317ca7,0xbe2c7441,0xbe9c2507,0xbeac6ba0,0xbe988542,0xbe4a12a8, -0xbdeef363,0xbd862bef,0xbd647269,0xbd19a17f,0xbcd474a3,0xbccb27a2,0xbbd608dc,0x3c4c20c0,0x3c205ddb,0x3c0b6cd6,0x3cf265c6,0x3cc5a510,0x3cd3ab07,0x3cee79f6,0x3cf318a7,0x3d24588b,0x3d4cce5b,0x3d73459b,0x3d2752da,0x3d3305e8,0x3d2dd15e,0x3b8cb749,0xbd04e57c,0xbbd22245,0x3cd5d1df, -0xbd6ee57d,0x3e393da2,0x3e924d41,0x3e80e025,0x3e65b5f3,0x3d384f95,0xbdcb9c52,0xbe806ae5,0xbe928112,0xbeaf258b,0xbec65883,0xbeb04990,0xbe985b6e,0xbe5c750b,0xbe22131b,0xbdf49576,0xbdcae4ff,0xbd47aaba,0xbc0f0c31,0xbca7fe39,0xbd07407c,0xbc009088,0xbb0ea75e,0x3c7bc3d0,0x3cdf5449, -0x3cfbdc61,0x3d325e62,0x3d287080,0x3d102fae,0x3d0857af,0x3d1e4d52,0x3ceb2d09,0x3d6bd441,0x3d08b151,0x3c95d4be,0xbd751a65,0x3d19c9b6,0x3e068d98,0x3cee5774,0xbd4a41b8,0xbe6b9e94,0xbe7d47f6,0xbe4c0809,0xbd71972f,0xbe17ec8a,0xbe7e2e78,0xbed31f4a,0xbebe1927,0xbebf12fa,0xbec32c7e, -0xbe9b51ca,0xbe60f1b8,0xbe041dd0,0xbdb5a2d2,0xbd82f33c,0xbd6116a5,0xbc55339a,0x3b71d5d4,0x3c88a8a6,0x3cdd61d1,0x3d09f677,0x3d1056e5,0x3d4560bb,0x3d51ee2a,0x3d4b89f2,0x3c747a3e,0xbc0c8eff,0xbcf40a30,0xbd6267c9,0xbd2ea434,0xbd0ae98e,0x3ced0949,0x3e5baf1f,0xbc7fc473,0xbf2a6ec8, -0xbf322352,0xbf308a22,0xbe48cb97,0x3dd979c9,0x3eb3a347,0x3eae8fa9,0x3e8150a4,0x3dc1254f,0x3d56af55,0xbb81c293,0xbd74468f,0xbd2df0dc,0xbd9095bb,0xbe0088e4,0xbe205209,0xbe22f25c,0xbdeddd4b,0xbdb8a9e4,0xbd84f05e,0xbd093eaa,0xbc0a76b7,0x3cac1eb2,0x3c67767d,0x3d896321,0x3d843ed8, -0x3c2a0f14,0x3d311c33,0x3d46a5e4,0x3c26d5bf,0x3d84fc89,0x3d52142a,0x3e046534,0xbbe65b6d,0xbd5baaab,0xbf1a4a38,0xbf1ae31e,0xbeb689c9,0xbd995b15,0xbd618c10,0xbd2bb0a2,0x3d76455f,0x3df00d16,0x3e26b037,0x3e652b3c,0x3e0c494b,0x3da8bac3,0x3d68a123,0x3d3b7128,0x3c9820c6,0xbc79ff1c, -0xbc3e32c9,0xbce04cdc,0xbded54c7,0xbdaa5b3c,0xbd99f4c8,0xbd95dbc8,0xbd42ceed,0xbd082e0b,0xbcf8ed13,0x3d08ebd2,0x3d4513c4,0x3c2f47f1,0x3d2c8d23,0x3d2f8518,0xbca4db0e,0x3cc8756b,0xbd64d59a,0x3c1520eb,0xbd38d7a8,0xbe590aa0,0xbe94eede,0xbdfe9a70,0xbde20b79,0xbe1300d2,0xbd7ea54e, -0x3cc8fc23,0x3d928cf1,0x3e1dc42c,0x3e210602,0x3dd15056,0x3d8f8003,0x3d96a407,0x3db464f2,0x3da67adf,0x3d849cec,0x3d6d7077,0xbd56bc43,0xbdaeef7a,0xbe024c3d,0xbdc3497c,0xbd79d05a,0xbcf1b4ae,0xbca96777,0xbc1e0222,0x3cdfcf7b,0x3d10ca47,0x3d2efaab,0x3d5c4c9f,0x3d53d7f5,0x3d246e2b, -0xbba963ba,0xbc9d2f79,0xbcf7f044,0xbd1b7d6a,0xbe8a0ecc,0xbbde5d98,0xbe3a72b5,0xbddd80fb,0xbdb256e5,0xbda451fc,0xbcedcc20,0xbc2d9b6d,0xbb81ce0a,0xbd1cc2ca,0xbcc6d607,0xbbd86a07,0xbbf6c092,0xba7d2a26,0x3cf972ba,0x3d7ad6f0,0x3da56c02,0x3dca8efe,0x3d402e95,0x3cddb935,0x3aca74f7, -0xbcbf326d,0xbb36b484,0xbcb5eebf,0x3cf98710,0x3d5c9a17,0x3d26ec40,0x3d4769ae,0x3d40d0d5,0x3d214044,0x3c9b6894,0x3bf871fb,0xbb3a8806,0x3cbef3cf,0x3c15b3cf,0x3c9a5be4,0xbd059902,0xbd2e4358,0xbd04b2f7,0xbd0371b0,0xbd01a50d,0xbcba2b9d,0xbcf992f9,0xbcda7ff7,0xbc346907,0xbc673130, -0xbc88e1fe,0xbcb9a6cb,0x3c49a137,0x3d3cb399,0x3da5e957,0x3da22f2e,0x3da9cd0c,0x3dbed5c3,0x3dddc9d7,0x3df3abba,0x3e0637f1,0x3df25429,0x3df95a67,0x3df68bb2,0x3dc56303,0x3dab19f5,0x3d5e6083,0x3d74d994,0x3caa7f43,0x3cb6a3ea,0x3c992ed5,0x3cecaef0,0x3ca5d66c,0x39ea4e99,0xbc9b2c8e, -0xbd13eba7,0xbd40e794,0x3d44c309,0xbd1eda07,0xbcdefb52,0xbce814ee,0xbcd05dd6,0xbcab7230,0xbc9c3dfe,0xbcbc3b52,0xbc6357e6,0xbb27c6ad,0x3bd8bab9,0x3c9c451d,0x3ce7c604,0x3d454b7d,0x3d5083f6,0x3d63d6b0,0x3d62361c,0x3d54ce62,0x3d3e2545,0x3d455cf5,0x3dc86cd4,0x3d270340,0x3c839265, -0x3c70637f,0x3c102ca0,0xbcd13c80,0xbca9a440,0xbcf5937a,0xbcabd5ab,0xbcca2197,0xbc9a42d0,0xbc029424,0xbc13d6f2,0x3bac5960,0x3b7751c4,0xbc2b05bb,0xbd286d19,0xbcbf570c,0xbc09128b,0xbc5d130b,0xbc42ca76,0xbc4ef347,0xbc4068d3,0xbc30cb77,0xbbbb4e79,0xbb1bb6bd,0x3ae6575c,0x3b3c5123, -0x3b8517f0,0x3ba9e025,0x3b129a12,0x3ab64376,0x3af6e7f3,0x3b60eb13,0x3c09f855,0x39af55fd,0x39c43d18,0x3c6055b3,0x3dce58a8,0xbce07b51,0xbc25fb20,0x3d947076,0x3d92997d,0x3d90c657,0x3d8b5aa2,0x3d82649c,0x3d79bb7d,0x3d6ad298,0xbc873c1b,0xbd3e4d3e,0x3d9fdc7e,0xbc5f77fc,0xbc4e2673, -0x3d183e66,0x3da8baf3,0x3d63086f,0x3d63a056,0x3d76583d,0x3d5f1ca2,0x3d259c6a,0x3d04ab49,0x3ce1c868,0x3cd77a26,0x3cc85e34,0x3cba34fe,0x3ccc0eb4,0x3cd91c65,0x3ceb2743,0x3cdda005,0x3cdd46f4,0x3cd9ecc3,0x3ce9af78,0x3cd310d0,0x3ccfee8e,0x3d69f5b9,0x3cf2e7ed,0xbd88ed4a,0x3d850315, -0x3d18ca34,0xbd64cc21,0xbd47d1a2,0xbd3e62a6,0xbd3a9082,0xbd1bf356,0xbd13f18f,0xbd0fd127,0x3d2e4852,0x3da5b24a,0xbd7052a0,0x3d36973c,0x3d410677,0x3de9895a,0x3dc63221,0x3dd99a00,0x3db9b16a,0x3d61d60c,0x3d021c8a,0x3cb57a8a,0x3c479d1a,0x3c192ec0,0x3c06290f,0x3c4161e1,0x3c63c845, -0x3c95e484,0x3c788429,0x3c81748f,0x3c731bf4,0x3caebbc4,0x3c442f73,0x3cec5f5b,0x3bbfdce4,0x3c992f1d,0x3d1da207,0x3ca786a3,0x3cb7807c,0x3d2bf869,0x3d33a448,0x3d73287f,0x3d5dfcce,0x3d6b5b7c,0x3d3edc89,0x3d1b4f1f,0x3d5896e8,0x3d48ffbc,0x3d784454,0x3d9ea3e0,0x3e0c67ad,0x3e115564, -0x3e1a8f4b,0x3e2ac79a,0x3e149fa3,0x3d8ac860,0x3cc9d876,0x3b0bb82e,0xbc596aac,0xbcedc158,0xbd223ba1,0xbd0473bc,0xbcb57df9,0xbbf2b509,0xbc2cb4ae,0xbbd12223,0xbbd6a568,0x3a19c5b0,0xbc3b86d6,0x3b23be42,0x3cbf30e6,0x3be2d66a,0x3bb8d948,0x3c85bb53,0x3cb08884,0x3cca1ddb,0x3cdd9b66, -0x3d17c9b8,0x3d3707e3,0x3d0f590e,0x3d31b469,0x3d33b9bc,0x3d526ef7,0x3d6b1a5d,0x3dab85d1,0x3de864fb,0x3e3cb963,0x3e5689b2,0x3e4435e4,0x3e6f44ce,0x3e5dfd41,0x3dcf442f,0x3c7d6f75,0xbca3b1e5,0xbd6000c4,0xbd7ddc0e,0xbd804a53,0xbd61e133,0xbd40b3c7,0xbcea5029,0xbd07843a,0xbcedd3be, -0xbcd95083,0xbc7527b0,0xbd1d1216,0xbca5b40a,0x3cb452fb,0xbc6dbdbe,0x3c53cda1,0x3c493318,0x3c953916,0x3bf6233e,0x3d0a4539,0x3d27ec4e,0x3d2cec7b,0x3d1a882e,0x3d119e3e,0x3d2331c2,0x3d88088d,0x3dd71da9,0x3ddf8ebd,0x3e0a30a6,0x3e18532e,0xbacbd22e,0xbda5d9c6,0xbc2b202e,0xbd7fb968, -0xbbf28e58,0x3d74d5b5,0x3e1b1a8c,0x3d78a1b4,0xbc9cffec,0xbe1a7b26,0xbe2b550f,0xbe23fe5b,0xbe18a655,0xbda20f2a,0xbd4cd9ce,0xbd98e802,0xbd37279d,0xbd6af3fa,0xbce34d2b,0x3ba04889,0xbcf0f7a9,0x3c55975d,0x3bd42035,0x3ccb3324,0x3d02997f,0x3d1ef2ad,0x3d29c53a,0x3d2512e9,0x3d663831, -0x3d82b440,0x3d8c18af,0x3d132c3a,0x3d399feb,0x3d16b256,0x3dc46462,0x3d916da5,0xbdf378a5,0xbee2b533,0xbecea6a5,0xbe5c356b,0x3d83ddbd,0x3e6bdd2e,0x3eb77bc1,0x3eb0d0d1,0x3e9fe41f,0x3e978e9c,0x3e267583,0x3db56839,0x3d823509,0x3cc9cb98,0xbc0f04c6,0xbd233088,0xbd8bf916,0xbdac3bb8, -0xbd56bf52,0xbd2b58fd,0xbc5f9df3,0x3c1ae868,0x3c2ce122,0x3ce68407,0x3d225061,0x3d688307,0x3d6d31df,0x3d1835f4,0x3cc3357c,0x3be15796,0xbc248162,0x3ccecd28,0x3ca8f9f5,0x3cf930a5,0xbcfbcfc0,0xbe848e4f,0xbedce6e1,0xbc3ce913,0x3e9d612f,0x3f3273e5,0x3efe0c55,0x3ec2862a,0x3e876fb9, -0x3e9d67e7,0x3ea905fb,0x3eed02d5,0x3f0b167c,0x3f1b8eee,0x3f214c19,0x3f0ef9fd,0x3ee325bb,0x3e8d9a8b,0x3e269095,0x3dd1d1d2,0xbced7ae9,0xbd97a212,0xbd980a73,0xbdae3c8b,0xbd2f37df,0xbce2d601,0xbca2c57f,0x3d2e9b31,0x3d6acfc9,0x3b064e17,0x3d654bb7,0x3d4d8819,0x3adf6b20,0x3c2d6336, -0xbd43af27,0xbd936ccb,0xbdc395a0,0xbe9ed894,0x3d881c1f,0x3f26991f,0x3f1e31d6,0x3f38f9db,0x3ed322ab,0x3e971c27,0x3e2a0923,0x3e9aecb5,0x3ec5d2c9,0x3edd4f47,0x3ece0a51,0x3ecc9ce5,0x3ed90331,0x3eaed568,0x3e8f0269,0x3e77076b,0x3e32bd8e,0x3e16058e,0x3d71f3f7,0xbd92104f,0xbbed2c4c, -0xbc8a9c00,0xbae00058,0x3c81a3ee,0x3c3c390c,0x3d3d5b49,0x3d37c1d6,0xbc8671a1,0x3cd048ad,0x3c605c52,0xbbbb8d39,0xbcc097e7,0x3bc0b16b,0xbd730348,0xbdeef433,0xbc0a4b56,0x3e82a49e,0x3ecfc721,0x3ec2f5bc,0x3eca1dc0,0x3e37e74a,0x3da675e1,0x3cbedc3d,0xbb0232b2,0xbbffcb86,0x3ce7b07e, -0x3dc0f9b3,0x3df0fb2e,0x3deac0d1,0x3e161eb6,0x3e257771,0x3e31d000,0x3e12baf6,0x3e0a6fdf,0x3db9fe85,0xbcecf5d5,0x3d1c4cd0,0x3cb847ea,0x3ba17416,0x3cc22cdc,0x3cfb703c,0x3d18dbc7,0x3d144f42,0x3d40ce8b,0x3d6ea4fe,0x3d44adb3,0x3cfdde48,0x3c8128ad,0xbc0353dc,0xbd6c2b43,0x3db2062f, -0xbdd7b1f1,0x3e28440d,0x3e33312b,0x3df04dc7,0x3d904ce2,0x3d5e5f63,0x3d57cb5c,0x3d0edcff,0xbd1e534c,0xbdad5d38,0xbdb66b6d,0xbd82f086,0xbc8adeb7,0x3cc2d01e,0x3d7ab45f,0x3d865b26,0x3d658c4b,0x3d68256f,0x3d7b41ae,0x3d716816,0x3d4a9980,0x3d87cd8c,0x3d9b6ff4,0x3d95b26e,0x3d4041ef, -0x3d1e0055,0x3d67d0be,0x3d6ca70c,0x3d1b1667,0x3d1c7ab3,0x3cfb11ed,0x3c9e1813,0xbb60f829,0x3c2e09f5,0x3c91d199,0x3d35c83c,0x3d240bb9,0x3b93304c,0x3c3eca95,0x3ca00fed,0x3d0064ec,0x3d0b08e4,0x3cab8e68,0x3c01fd31,0x3c897b6e,0x3ca6dfec,0x3c8b7624,0x3b568daa,0xbc602264,0xbd0540f2, -0xbcd668bb,0xbc7494e7,0xbc305a1c,0x3bba1053,0xbc19e644,0x3d1c4cdc,0x3db35c46,0x3d2eee95,0x3d06a9a9,0x3cf1c1b5,0x3d262c0e,0x3c805915,0x3c9e32d6,0x3c966033,0x3c98736f,0x3c94f820,0x3c298c2e,0x3c7e2c80,0x3c8ee158,0x3cacd932,0x3c9d054d,0x3cfcce2c,0xbd333b4f,0x3cdac7e8,0x3ce63f25, -0x3ce20520,0x3cd435f0,0x3cc7316f,0x3cf70544,0x3d10702e,0x3cfb896f,0x3cca1926,0x3c9e12d1,0x3c4f2489,0x3c1f2040,0x3bdb60f6,0x3bb7d943,0x3af8881b,0xbb175221,0x3a6cd8d7,0xbbafc1a0,0xbb794df3,0x3d144e11,0x3cdd0992,0x3d26fedb,0x3cae6259,0x3d069eec,0x3d364b03,0x3d389353,0x3d381456, -0x3d0c9d19,0x3d0e2a87,0x3cccd534,0x3c566cb6,0x3c6e6e4e,0x3afb15af,0x3b946b7e,0x3c13a155,0x3d4317b2,0x3d0b1b40,0x3cb1d5f7,0x3cd363bd,0x3cd131a3,0x3cdb5c22,0x3cd0bc95,0x3ccf207c,0x3c994d7d,0x3c70683d,0x3c3d9855,0x3c1e3ee7,0x3be46e0f,0x3b506e04,0x3bc33fec,0x3c0d9d33,0x3c2f1b70, -0x3c31e137,0x3c705de9,0x3bde9f9a,0x3d0cb343,0x3caa961c,0xbcaf97cd,0x3d446390,0x3cf53bf6,0xbd111dad,0xbd12fa8e,0xbd0bd1b8,0xbd05200f,0xbcfb59af,0xbceaec8e,0xbcd981ee,0x3c9d056a,0x3d445e68,0xbd1edea8,0x3c92f998,0x3d03e117,0xbdc3ad75,0xbd6c3eff,0xbe03f679,0xbdc8e13d,0xbdeb3cea, -0xbde6d9c2,0xbde34b46,0xbdd6ab22,0xbdbeffd7,0xbdbb95eb,0xbdb74dff,0xbdb4fbb2,0xbdb831b5,0xbdba5df1,0xbdbb5171,0xbdbc7dcf,0xbdbc145f,0xbdb9365c,0xbdbf7c0d,0xbdb08393,0xbdd51697,0xbd76883b,0xba205f5e,0x3dd58f46,0xbd9bacaf,0xbb61faa6,0x3dc9709b,0x3dcaba4a,0x3dc95df4,0x3db43923, -0x3dc15ec3,0x3dc3ef9c,0x3db989b4,0x3a878478,0xbdb6b494,0x3df05dea,0x3c9ab4d1,0x3dbdd742,0xbe16101f,0xbe1a692e,0xbe24acdb,0xbe2751b2,0xbe26d489,0xbe1880de,0xbdea5b9e,0xbdd8d399,0xbdc7adf1,0xbdc449e3,0xbdc7eea1,0xbdc57012,0xbdbe815a,0xbdbf4793,0xbdc3e277,0xbdc51ee6,0xbdd3389f, -0xbdcb24ee,0xbdd02c0a,0x3bfe7afc,0xbd680ca3,0xbd711a22,0xbd13c336,0xbcc565c2,0xbd5088a4,0xbd5366e7,0xbd6747de,0xbd0ff116,0xbd6545b8,0xbd7ba70d,0xbd1be438,0xbd3e4497,0xbc47d2b4,0xbb8d28f2,0xbd95761a,0xbc3a53bf,0xbe09b24d,0xbe80f0c2,0xbe746389,0xbe796122,0xbe66db41,0xbe3bd3d4, -0xbde4832e,0xbde9e490,0xbdf0ae61,0xbdf4164d,0xbdfc52f9,0xbdfeac00,0xbdef014f,0xbdeade36,0xbde21c5d,0xbdd5a08b,0xbde31e25,0xbde23e30,0xbda6ce7d,0xbd6f0753,0xbd28f5e5,0xbd1703ef,0xbd11c510,0xbc0f45f6,0xbcb13ce3,0x3c4d8ac9,0xbcdadd52,0x3c05c7c4,0xbc1b6815,0x3c81088d,0xbc228e01, -0xba1df90d,0xbb3fa306,0x3ca732ab,0xbd51f986,0x3d2aef3b,0xbe376fee,0xbea35cac,0xbe9b6733,0xbea1487a,0xbe9b5673,0xbe838044,0xbe0e9ee5,0xbe0746eb,0xbe0d24f5,0xbe17d37a,0xbe1367d9,0xbe0461e6,0xbdcfe348,0xbdb6d44f,0xbdbab13f,0xbdbbcfad,0xbde0e150,0xbdc3b30f,0xbdb06679,0xbd405fc9, -0xbd268eea,0xbcb7b9c9,0xbc56d566,0xba074f0f,0x3b60b85b,0x3cae0a20,0x3d305712,0x3cde6eb0,0x3d0d66e0,0x3cd5219e,0x3cac11a6,0x3cc05210,0x3d2d0914,0x3d2fe838,0xbcc78359,0xbe463a90,0xbecff36a,0xbee27def,0xbeea89a7,0xbebf0a8b,0xbe6ad1d1,0xbe07e416,0xbd70078c,0xbdd0ebc8,0xbddb9b5f, -0xbddbe805,0xbe2ab399,0xbe49c2f9,0xbe66601d,0xbe7068d4,0xbe57a1f7,0xbe1fb2b9,0xbe18a6da,0xbe06dc6b,0xbe05e564,0xbd836e35,0xbd089575,0xbcaac122,0xbbc381ed,0x3c20cfc5,0x3cea9a6f,0x3d12470d,0x3d1726aa,0x3cfe3c00,0x3cbcf933,0xbb3b5fff,0xbce50986,0xbdaf631a,0xbdc1f57f,0xbe081ca6, -0xbe1365ff,0xbe49b0c1,0xbe5f7d8f,0x3d848a2c,0x3e17369d,0x3e7ae358,0x3cd8ca68,0xbdb61c63,0xbe119628,0x3d0e8d49,0x3e68f81f,0x3ee1b380,0x3eea045b,0x3eebf0af,0x3ed51e14,0x3e9d37be,0x3e3442d5,0x3d385e6e,0xbc7277a3,0xbcdf365a,0xbd34c34c,0xbda3f66a,0xbd73b9b2,0xbd3b031e,0xbc8c5812, -0x3bc7ab06,0x3c4ec50d,0x3d2e9562,0x3d3d6387,0x3cc07243,0x3ca064ef,0x3c5296d1,0xb9a29f09,0x3c05cf87,0xbd1687e1,0xbd887763,0xbded94a5,0xbe02ea62,0x3e1141f7,0x3ed07a97,0x3e55ff48,0xbd189bcb,0xbe64ca74,0xbe757abe,0xbe456ed3,0xbd81e944,0x3d73e93b,0x3da83b9f,0x3cb16d4d,0xbbb4fda3, -0x3bbf03d1,0x3d74846a,0x3dce14f9,0x3e060b8d,0x3db51d63,0x3d59f238,0x3d233060,0x3ae5e889,0xbca85fea,0xbd627842,0xbd52d4bd,0xbd3ec64e,0xbd28492f,0x3c7fca3c,0x3d06a72f,0xbc71195f,0x3d0a9ae4,0x3c7eb3c2,0xbcd045fa,0xbd70e795,0xbd1c1b58,0xbdc26ef0,0xbd241e11,0x3e6da696,0x3e8fcf97, -0xbe5461d3,0xbecab5da,0xbf23023d,0xbeed82d0,0xbec0688c,0xbe8bda7f,0xbec4fa9b,0xbee0e1f0,0xbf01113a,0xbeb34432,0xbe85c61a,0xbe658760,0xbe445776,0xbe127ced,0xbda0bd5b,0xbd8564b3,0xbd4e9ada,0x3d1bbab0,0x3d6174f9,0x3c581af3,0x3d11c475,0x3cdae855,0x3d119611,0x3d0a1b21,0x3d24f31d, -0x3d133dc1,0xbca98346,0x3cc875fe,0x3cdbdb08,0x3ca25611,0x3c6c8e32,0x3b9cf193,0x3cc10c85,0x3db49a84,0x3e13af83,0xbe1698dc,0xbedc28e4,0xbeb75497,0xbe9e72c7,0xbe8a303e,0xbe97fd5a,0xbeaa07dc,0xbebeda94,0xbec68671,0xbed37094,0xbecb86db,0xbebd3daa,0xbe9e2436,0xbe779d40,0xbe3143ed, -0xbdff3d5a,0xbd466daa,0xbd044dfc,0x3cebd045,0x3dace614,0x3d15a911,0x3d4c7ea8,0x3d09a88d,0x3c2c6960,0xbc56f278,0x3bd2ae91,0x3be7e608,0x3cb05bd9,0x3c53fc4d,0x3aed5b0a,0xbc6d6d23,0x3cab0196,0x3d264449,0x3d928b70,0x3d1146e2,0x3e237c25,0xbd919643,0xbe26409f,0xbdeb6c88,0xbdcd340c, -0xbdf9227e,0xbe02153c,0xbdf738e9,0xbd0c369e,0xbc40afc5,0xbd12a600,0xbd964ee0,0xbe082a42,0xbe4b031a,0xbe5a3050,0xbe497d15,0xbe1fdbc1,0xbdc15d14,0xbdb5c2b4,0xbcca0411,0x3d2ad216,0xbd025949,0xbc75a1de,0xbd1890aa,0xbca79d5b,0x3b2c4e5a,0x3bf804bf,0x3c82b945,0xbc13df17,0x3c675f31, -0x3c8df082,0x3c1cdf39,0x399bfef5,0xbca48b70,0xbc1b03ec,0xbcc2d578,0xbcf6eee2,0xbcb8c911,0xbd815c19,0xbdbea250,0xbe0ebb29,0xbe02b28d,0xbdfa0fb8,0xbdff8059,0xbdeac02d,0xbdd2b68a,0xbdaa5378,0xbd991469,0xbd7ad44b,0xbd3c35e8,0xbd1cec56,0xbd0a876b,0xbd107cc0,0xbd7a38d3,0xbdc85142, -0xbdd3f54d,0xbd5f3a36,0xbd2eb597,0xbd27fb60,0xbd0aeb5c,0xbb1e80f9,0xbcaabd04,0x3c59f9a3,0xbc76cab2,0x3cebe656,0x3af6db53,0x3c5f3e95,0xbb28e7e6,0x3c022257,0x3c7b1165,0x3d07d0d6,0xbb61f2c6,0x3d2ff3d6,0xbd7d6cfa,0xbd89eea0,0xbd8ae851,0xbd948084,0xbd9ef80a,0xbdb03ba4,0xbdbaedc2, -0xbdaaac70,0xbd9d3ba5,0xbd8d5537,0xbd7b4ed4,0xbd5eeeff,0xbd42d3c3,0xbd5c010e,0xbd6a22df,0xbd67df27,0xbd500c61,0xbd288e28,0xbd386c28,0x3c86af77,0xbd1509ee,0xbd176e71,0xbc952a0e,0xbc34301a,0xbd0accc3,0xbd31e74a,0xbd34bfd6,0xbcbdb937,0xbd4f2016,0xbd52b26c,0xbd10fc74,0xbd29c732, -0xbcb33a8d,0xbd01188b,0xbd5b269a,0xbd27c31d,0xbdbbfce0,0xbd931b54,0xbda02d3a,0xbda09792,0xbda80506,0xbdaca848,0xbdb6e87d,0xbdadf9ee,0xbda9b8c3,0xbda6f0e0,0xbda26f8d,0xbd9e0e4f,0xbd95676f,0xbd930031,0xbd8f3949,0xbd8f392a,0xbd932d35,0xbd8f7c04,0xbdb0e060,0xbd2cde29,0x3c03856f, -0x3db7312d,0xbd67f1ff,0x3c050cfb,0x3dcb44a1,0x3dc50123,0x3db7fc79,0x3d9cc65c,0x3da5b596,0x3d9e2923,0x3d90a415,0x3bce3654,0xbd7c2a5a,0x3daa61db,0x3c648ea8,0xbdb718e3,0x3d61514d,0xbd3f50ec,0x3d944d3f,0x3d108a98,0x3d328907,0x3d136c53,0x3d58d0ff,0x3d6f22ea,0x3d763361,0x3d7ca346, -0x3d82ad45,0x3d84283f,0x3d890984,0x3d8a39cb,0x3d8e3244,0x3d894db4,0x3d859fd3,0x3d8106ef,0x3d78284e,0x3d4d364e,0x3daf8c73,0xbd035c1b,0xbdc33f9f,0xbe2326c5,0xbbb6f122,0xbdb69c35,0xbe16ab0d,0xbe1a78a2,0xbe184178,0xbe0ab0aa,0xbe18ba49,0xbe1b3f97,0xbe18997c,0xbdb6a263,0x3b81bb01, -0xbe19a402,0xbde37fec,0xbe1bf0f8,0x3c2fc61c,0x3ca0ef45,0x3bf11310,0xba2b9cf0,0x3d42a885,0x3d8ed7c9,0x3d96f213,0x3da34e70,0x3da3feda,0x3da1342d,0x3db3f5f4,0x3dc45c24,0x3dd2b81f,0x3dcd3373,0x3dc1ed00,0x3db97ff1,0x3d9e78d1,0x3da0b54c,0x3d806e43,0xbdccb0f6,0x3c153eec,0xbbcddbb1, -0xbc480dcf,0xbcc05d68,0x3c76aed5,0x3cb2dc0d,0x3c981f85,0xbc672974,0x3cd67ce9,0x3d24fb09,0xbb240be8,0x399d0e73,0xbd2e2b8f,0xbd3f3c08,0x3c2d50f9,0xbde781f7,0xbd4fcfcb,0x3c6dd085,0xbca97c1d,0xbd14912f,0x3d7f54b4,0x3dc75eae,0x3ddd2f9f,0x3de766c6,0x3df913ce,0x3dfc90d1,0x3e0fdd26, -0x3e157f17,0x3e1f7a4b,0x3e14332a,0x3e05f72c,0x3df7d938,0x3dbabddf,0x3dd185d6,0x3d1d3dbc,0xbcd731fa,0xbc21e0cc,0xbba542b0,0xbb04636a,0xbcdfdd0a,0x3cbf3a6b,0xbc82caf3,0x3d1a57d8,0xbcc13d89,0x3cd31f0e,0xbca2437e,0xbc96f35a,0xbce681d6,0xbcdfa8ff,0xbd863fdd,0xbd5f7fa0,0xbe3dd3fe, -0xbdf672b9,0xbd1e55bb,0xbdecfd13,0xbe19e549,0x3c643d9b,0x3dd15e6e,0x3df93da7,0x3e03f9e4,0x3de3feb5,0x3dc3e2e3,0x3e03db6c,0x3e283af5,0x3e445383,0x3e3b9cac,0x3e2c7936,0x3e21a6e7,0x3e040cda,0x3dfc82bb,0x3d8756f0,0xbd2e4d5d,0x3cd285cd,0xbce57257,0x3be33401,0x3c413e13,0x3cdbcb5a, -0x3cee0bd2,0x3cfe5f1e,0x3d2d9a06,0x3d0dcb43,0x3d237471,0x3b87fbd1,0xbc4af5a4,0xbd5cb568,0xbd86dbed,0xbd8aa1a2,0xbe1d2a6c,0x3e0b77ad,0x3e8a9aa0,0x3e81712a,0x3e9fbe64,0x3e945b38,0x3e71d591,0x3e1eafe7,0x3e883862,0x3eb6927c,0x3eee992b,0x3ee3c8dd,0x3ecf947d,0x3eb609a8,0x3e9fea48, -0x3e7f1f05,0x3e3b8f77,0x3ddba97b,0x3de48d1d,0x3d7b978e,0xbd503dc8,0x3cf22ec8,0x3b356c43,0x3c98f148,0x3c9accb7,0x3d022d28,0x3d3c354f,0x3d2bd571,0x3cbe2c9e,0x3c7862b8,0xbc2c581a,0xbd586f03,0xbc8848c3,0xbd67f327,0xbd51570a,0xbdcbe10f,0xbd98f95e,0x3e13228c,0x3eb75fc0,0x3e8fce13, -0x3e1d80f9,0x3e0023d9,0x3dee3a92,0x3d3049a0,0x3d474342,0x3d94762d,0x3d9ba27d,0x3e4f4960,0x3e86e011,0x3e94cb37,0x3e8878d1,0x3e7f47b2,0x3e6c56ab,0x3e45f656,0x3e32aee4,0x3db67b5d,0x3c2d07b5,0xb9d48285,0x3ac8065d,0x3cdd883a,0x3d108377,0x3ca10e68,0x3d226e0a,0x3d2f60b0,0x3cec5317, -0x3c9ad083,0x3bfc21ed,0x3c99891e,0xbcc9e84e,0x3c499239,0xbc8430ed,0x3d44d603,0x3e510026,0x3e72dc1e,0xbe203756,0xbe775db9,0xbe530c01,0xbce1e6de,0x3d85daed,0x3dae6142,0xbdd95da4,0xbe6858f3,0xbeaa2ca0,0xbe9588c1,0xbe7f1b3c,0xbe372662,0xbe34249e,0xbe24f5b2,0xbe10615c,0xbda6fb8e, -0xbd085af3,0x3cfa312b,0x3d34b721,0x3d2f92c5,0x3cdad36f,0x3c871818,0x3c46da9d,0xbc24d462,0x3cc128a6,0x3d149571,0xbc59991f,0x3d2d08ce,0x3d12e2a7,0xbb8f3c19,0xbb5ea7b1,0x3d465786,0x3d32df2c,0x3da915bd,0x3b90a269,0xbe733e43,0xbe0d4d20,0x3d15c57d,0x3e3e6866,0x3e01419e,0x3caba03d, -0xbda51963,0xbdf73801,0xbe33a1c3,0xbe4ee8e2,0xbe8e8edc,0xbea33aef,0xbea29c6e,0xbe84bb21,0xbe4ebe23,0xbe311673,0xbe05aaff,0xbdd1ed64,0xbd6c071a,0xbc152485,0xbc5b07a3,0x3c5005dd,0x3be22435,0x3c39095a,0x3ca1314f,0x3ce0bf40,0x3cd5d952,0xbc51f9bb,0x3ceebaea,0x3d0fc68d,0x3d0afd8b, -0x3ce9e8cb,0x3c808c01,0x3b2945f0,0x3ce9d4c8,0xbe64b5c7,0xbdb5ff3e,0x3e0a804c,0x3dc064d9,0x3db964f9,0x3e1eb3ba,0x3e3af5f1,0x3e1da99f,0x3e25bdd9,0x3e1436b7,0x3e027dd6,0xbc6c37bc,0xbdafe283,0xbdd547ba,0xbe2f3674,0xbe426381,0xbe399aaa,0xbe127818,0xbdbb0e1c,0xbd7544ed,0x3ac954da, -0xbc1ea889,0xbcd5b34a,0xbc3de287,0xbc8716a3,0xbb055ad6,0xbbcd98fe,0x3c14a1f4,0x3b8e8d0b,0x3ca3e4c6,0x3c2eb965,0xbb7d59a5,0xbcd8d591,0xbd21b4c8,0xbd5baddf,0xbe0d02f8,0xbe138792,0xbd88f18f,0x3ce8c6a9,0x3bfdb372,0x3d420df5,0x3d169536,0x3cacb265,0x3c970cf8,0xbc6227e9,0xbcd8e77c, -0xbd0955d4,0xbcd85271,0xbbc3570f,0x3cd98d59,0x3d080144,0x3cccab47,0xbc80ec34,0xbd49f0a3,0xbd79604d,0xbdad06ec,0xbdcf0f44,0xbd9cd4ca,0xbd94179e,0xbd4641b5,0xbcae4269,0xbbdaa905,0xbb6f7fd9,0xbb6338ef,0x3c47ca4a,0x3c833344,0x3c8034a2,0x3bca2dfe,0xbb989c0b,0xbc82de87,0xbd126309, -0xbd166620,0xbc3ff7f3,0x3c800a1b,0x3d152f49,0x3cdc67a4,0x3d242cb4,0x3caf0450,0x3cb39f14,0x3ce59f43,0x3bea8fc6,0xbbd17e6c,0xbcc8ad1d,0xbcdd54bf,0xbd0a5bad,0xbd1b6068,0xbd33cdb7,0xbd43fbb1,0xbd2747fb,0xbd26852a,0xbcbabd47,0xbd36063d,0xbd97012e,0xbd6fc859,0xbd50d6b5,0xbd168e3a, -0xbd231f70,0xbcbf480c,0xbcc24f52,0x3bd77fbe,0xbbf8a93b,0x3c3b02e0,0xbb7217cf,0x3c3781b1,0xbbab0dc7,0xbca47648,0xbd42468b,0xbca787a9,0xbdac2ea2,0xbb85aac6,0x3bcbe69d,0x3c303f4b,0x3ca6bcd3,0x3cefc256,0x3d0c0028,0x3d1b1d8b,0x3cca0392,0x3c5f2d72,0x3b565005,0xbbadbb4d,0xbc65db5d, -0xbcc2da03,0xbcb830f2,0xbcc4a607,0xbce269df,0xbd0756d7,0xbd132338,0xbd11a4af,0xbd7c9e3c,0xbcd74429,0xbd09bfc4,0xbd24c287,0xbd23626a,0xbcc6a4d9,0xbc6abd78,0xbcbbd0b7,0xbd12c326,0xbc3a50b8,0x3b9aab12,0xbc4c7bab,0xbbd7db0f,0xbcdd467f,0xbcc91af0,0x3b267939,0xbd5236f3,0x3cdea596, -0x3c35fa8a,0x3c81fa19,0x3c8d0fa5,0x3c9fe35e,0x3cbb4079,0x3cf3584e,0x3cce2f71,0x3cba5056,0x3c9e0f53,0x3c6642d9,0x3c14a79e,0x3b298f92,0x3ad40c58,0xb9282261,0xba6101ce,0xba886619,0xbb7e5a8a,0x3bc288af,0xbd660f9c,0xbdc29b55,0xbde9a87f,0xbd19c094,0xbdbee2e4,0xbdf41b48,0xbdf752c5, -0xbdeef404,0xbdde43d1,0xbdefb393,0xbdf32e5e,0xbde97e64,0xbdaeb285,0xbcc5a4a7,0xbdeec78b,0xbdc4a152,0x3c4663da,0x3d4c4573,0x3db27150,0x3d1ea3cd,0x3d46f079,0x3d5e5720,0x3d5a14b6,0x3d6b9026,0x3d75cf84,0x3d8aaea2,0x3d76c320,0x3d6a6407,0x3d5cb63c,0x3d5963af,0x3d556534,0x3d4d17d4, -0x3d49415f,0x3d40d4fc,0x3d337cf8,0x3d357101,0x3d331fd7,0x3cf978b0,0x3db2ae6d,0x3dc08c0f,0x3d326751,0x3da07e1a,0x3dbf777a,0x3d4cccb4,0x3d5c9345,0x3d60f8bd,0x3d498db4,0x3d7a2a3f,0x3d79a09f,0x3d67b77c,0x3dbb5e90,0x3d9eedc6,0x3d208dac,0x3dbc2c04,0x3d490d2b,0x3d8a768f,0x3d6a5e60, -0x3d908d2c,0x3d8f28cf,0x3da42c1a,0x3db24f85,0x3dd102b9,0x3db28f1c,0x3d9fffed,0x3d852ce4,0x3d68eef7,0x3d3f2973,0x3d1f1c6e,0x3d1602b6,0x3d170dee,0x3d066b54,0x3d22f45a,0x3cfa33ec,0x3d3f2615,0x3d9fc012,0x3d37b460,0x3d80b78f,0x3d38500e,0x3d4668ae,0x3d752ede,0x3d4decb1,0x3d772ce6, -0x3d885957,0x3d7497eb,0x3d4cc97e,0x3d3d9d23,0x3d403335,0x3d4d5065,0x3d53a5cb,0x3d2663d0,0x3d4cc4a6,0x3d7c18a5,0x3dc15d50,0x3dee464b,0x3de4ad78,0x3e041a95,0x3e07dc07,0x3e25fa5b,0x3e122d6d,0x3e0be97a,0x3df3f423,0x3ddd23be,0x3dc746dd,0x3da3905f,0x3d8ad57e,0x3d6917d1,0x3d137058, -0x3d31fecc,0x3c9887e6,0x3d361e9d,0x3d886ed4,0x3d0b1adf,0x3d1801a1,0x3cbbc593,0x3d05cda1,0x3d201734,0x3d17baa6,0x3caa53d3,0x3d2a3a7c,0x3d029413,0x3d3ff715,0x3ccaecca,0x3cf0957d,0x3cd4b290,0x3d07c9cb,0x3d34f09a,0x3cbd33b4,0x3dad2311,0x3de65408,0x3dfef31a,0x3df6bd34,0x3e0fb627, -0x3e24670d,0x3e47af4e,0x3e2ea80e,0x3e259e1c,0x3e010f40,0x3db6cf89,0x3d41b316,0x3c86ecf2,0x3be8d48e,0x3b47edd2,0xbc4cc320,0x3a2d9c00,0xbc62367e,0x3cab57bf,0x3d517ba5,0xb878a2ea,0x3cb425d1,0xbbb87524,0xba417e36,0x3c6bfc2b,0x3c9d2657,0x3cd92c79,0x3c3df5e8,0x3d154ff4,0x3cd68a0e, -0x3bbb1eb1,0xba1fb212,0xb97a2e0e,0xb8a04508,0x3c8d1f72,0x3e41b018,0x3e70fef6,0x3e637279,0x3ea3f610,0x3ead9458,0x3e9c9449,0x3e957a7d,0x3e91c5f3,0x3e955750,0x3e90b8dc,0x3e8278c2,0x3eb39b05,0x3ec2936e,0x3ec118b4,0x3e94680c,0x3e6dcb96,0x3e3e2244,0x3e155c0c,0x3d8e085a,0x3d82c390, -0x3d8a422f,0x3bef23c0,0x3cd15ba9,0x3c7c5fd0,0x3cdbe300,0x3d02a85b,0x3d10f684,0x3d01fef9,0x3c6a229f,0x3cab364b,0x3cdf5047,0x3d24aa96,0x3d912d78,0x3dc1e98e,0x3deb7878,0x3e070831,0x3e36b3ac,0x3dfe234d,0xbe2715b2,0xbe4f3fbb,0xbe4dc8c0,0xbcc3bc7d,0x3db1b792,0x3e27926e,0x3cbc612d, -0xbde024ff,0xbe553bcc,0xbe833b8d,0xbe8ccba1,0xbe710ed4,0xbe5c35b3,0xbe403bdf,0xbe4a9aba,0xbdf2666c,0xbdc040ca,0x3c9f6554,0x3dd3eea1,0x3d803fc1,0x3d77b8b5,0x3ca60fbf,0x3caa2419,0x3d060363,0x3d0998df,0x3d2022e2,0x3cca4db3,0x3cb0d23f,0x3c9af542,0x3c04e734,0x3cc7ca75,0x3d0e207e, -0x3d869f65,0x3d8c1171,0x3d71d0f8,0xbe1911ce,0xbdf80a69,0x3d1bf5b5,0x3e008c4a,0xbd49d42c,0xbe4d61fb,0xbe8110cd,0xbe6b673b,0xbe68ea6f,0xbe20301e,0xbe2a6b25,0xbe299db3,0xbe20f920,0xbe5c0730,0xbe4d3af8,0xbe1fbca7,0xbdb9fc4c,0xbdc26d8c,0xbd5d8d3e,0xbbbeac7c,0x3b57f618,0x3d51cefb, -0x3d088012,0x3d03fb2b,0x3cece752,0x3d1474db,0x3d244c22,0xbbf6589c,0x3d529eed,0x3d608c13,0x3cc8a43d,0x3d8dfc1c,0x3d3398e9,0x3dbdc749,0x3d6eb8b3,0xbdcbe3d0,0x3d7344f4,0x3e6e8b08,0x3e4dfe9a,0x3e151e32,0x3d8ca3a7,0x3dc2377f,0x3daf33bb,0x3e3155fe,0x3e6f5957,0x3e8cefeb,0x3e42fb51, -0x3e021e35,0x3dac25c9,0x3d02ef1d,0xbc9737d4,0xbd85270e,0xbda41f30,0xbda8c39b,0xbd65ccdf,0xbc98620d,0xbc847fd1,0xbcf097fa,0xbcd599ff,0xbc8abf1a,0x3c1ca3a1,0x3b3e6d01,0x3c95b5f5,0xbb1485fb,0x3cdd9c24,0x3cc0b948,0x3b77f232,0x3c12d04d,0x3c573c38,0x3c0b1696,0xbd7333b3,0x3dd26388, -0x3e1095f4,0x3de9dc22,0x3dd818f0,0x3d605028,0xbcd7a380,0xbd51fcb2,0xbb417dcf,0x3c164191,0x3cf89869,0x3d4c6f67,0x3e100f11,0x3e1dd990,0x3dadf63a,0x3dad84b5,0x3d8563b7,0x3d00dbd0,0x3b9f8d4f,0xbca1821a,0xbd40508f,0xbd77676a,0xbd814518,0xbd2534ad,0xbcb7ba48,0xbaf82dd0,0x3c1ebbda, -0xb9ef374f,0xbbacb176,0x3c1042b1,0x3cb55cf9,0x3d32cf50,0x3d8df8d8,0x3d282fda,0x3cac5183,0x3c891dae,0x3dbf5996,0x3ca79aa6,0x3dd6c92a,0x3d9908e8,0x3d798216,0xbc02ca6d,0xbc4419f4,0xbc91f114,0xbcc4db1a,0xbd014d40,0xbca3ec14,0x3c7e0c14,0x3cf2bf5c,0x3d4bd4e3,0x3d802420,0x3d294e69, -0x3c461ae6,0xbcb912fd,0xbd227715,0xbcd1d191,0xbc840c70,0xbd19d0d3,0x3aad989a,0x3cea4521,0x3bfee085,0xbbf982bb,0xbb62142d,0x3aef11de,0x3bdb4b75,0x3ab4c635,0x3b632b4b,0x3ba8f4bf,0x3c4080e3,0xba88af5d,0x3b4496a8,0x3be19f76,0x3c651462,0x3d1fa14e,0x39eac664,0xbc09e139,0x3c8328d7, -0x3cc56918,0x3cfd0b91,0x3cc7c6a9,0x3c8211bd,0x3c57170c,0x3b9521e2,0x3a19929c,0xbbd59b88,0xbc33d774,0xbc3f8c9b,0xbcbfc0ee,0xbd07a286,0xbd40f22b,0xbd018748,0xbccd8b52,0xbc45a3fe,0xbc09ed37,0xbc80dff5,0xbc5f5b53,0xbc2d2937,0xbc4807ba,0x3b66498a,0xbb3a8ac3,0x3ab64bd2,0x3c8e901f, -0x3b677183,0x3c7a7837,0x3c34d81f,0x3c8ec6eb,0x3cccd7ce,0x3d0bb599,0x3ce63645,0x3ca7a301,0x3b194fe2,0xbbe291dd,0xbbf052d0,0xbc515de7,0xbc94ade1,0xbca160c8,0xbc9e5172,0xbc8abfe7,0xbc6b3c62,0xbc811a22,0xbc94d75f,0xbcb3e2af,0xbcd420b4,0xbcd08078,0xbcbbebbe,0xbcb65870,0xbcc195ad, -0xbcdcff53,0xbce9f953,0xbd083f66,0xbcb50613,0xbb9e08df,0xbae89dca,0x3b37a094,0x3c63f68f,0x3c1459e2,0x3c969876,0x3cadcf79,0x3c50df81,0x3ab2d4ec,0x3c39eb03,0x3bbf685a,0x3c33a30b,0x3c7d87f6,0xbb2df28a,0x3d345cf6,0xbc515c27,0xbbf128a6,0xbc02ee14,0xbc1ccf69,0xbc0eb5f9,0xbc1b977b, -0xbc3d6450,0xbc3f5007,0xbc40e35d,0xbc264fe0,0xbbf9cff8,0xbb983dfc,0xbb0430a6,0xbb135a2e,0xbb4fc526,0xbb604219,0xbb6b1166,0xbb6cf66d,0xbbb73118,0x3cfe29c1,0x3d242280,0xb9605a3e,0x3d060668,0x3d480ff0,0x3c3753f3,0x3c7f657d,0x3c88ea89,0x3c825126,0x3ccf489c,0x3ceb7f85,0x3cf549f6, -0x3d5a06e5,0x3d0de3c6,0x3c806f9f,0x3d5d2b28,0xbb6f25a8,0x3ccbc48f,0xbb0eaf04,0x3cf015b3,0x3cdcf5a7,0x3ce57f23,0x3d1f5ccd,0x3d03d724,0x3d0069ce,0x3d0a221b,0x3ccdff4f,0x3ca791e4,0x3c90bc06,0x3c5e3b2e,0x3c419324,0x3c22f823,0x3c5234cd,0x3c65ed6d,0x3c6d9119,0x3c861b11,0x3c9d6259, -0x3c9ab0e4,0xbb92d5b2,0x3bc694d3,0x3d73ca04,0xbb9d5c31,0x3b661b49,0x3d6603b8,0x3d4df42d,0x3d483592,0x3d4bf31c,0x3d3fb109,0x3d3ca4f2,0x3d2f3cb5,0x3ae36449,0xbb906adc,0x3d5dce2d,0x3b90f30f,0x3cb80553,0x3ce9d35a,0x3d4e5755,0x3d605f8f,0x3d9d8316,0x3d5e252d,0x3d4dafa2,0x3d6a96fb, -0x3d28ecd6,0x3cfeb0ad,0x3cc167c9,0x3c175188,0x3a96e6a8,0xbb97030d,0x38722242,0x3a27bdbf,0xba6d0d52,0x3b049e03,0x3c2d32fd,0xbaaf87e1,0x3ca74f36,0x3c7e595b,0x3bb0d39d,0x3c836114,0x3c8bde03,0x3c7f6422,0x3c893243,0x3c0c4544,0x3b7db54d,0x3c6fe419,0x3caa56b5,0x3c843684,0x3ca6799f, -0x3cbd57a6,0x3c6d3f82,0x3c99f702,0x3cafc9b1,0x3d40a269,0x3d882862,0x3d90f636,0x3df50c37,0x3d9b4b7c,0x3d91e790,0x3db27b4a,0x3d4ce3ae,0x3cdc9323,0x3c3739a7,0xbc9bb790,0xbd027744,0xbd2eb8a2,0xbd0153e7,0xbcda3f22,0xbcd10572,0xbc46d50e,0xb9f62f27,0xbc1bee4d,0xb9e282be,0x3bfd6bf0, -0x3bbf78de,0x3b7ee927,0x3bbaf6e5,0x3cb6ee48,0x3c7af9bb,0x3cb2d084,0x3b324a4d,0x3cf8c72b,0x3cae4e54,0x3c0a7141,0x3c44e759,0x3c0becbe,0x3c4dd1cf,0x3cb301e7,0x3d36351b,0x3d91f19e,0x3de974a6,0x3e146b23,0x3e570eb9,0x3e052919,0x3df08af5,0x3e1752c4,0x3dd99e9b,0x3da27851,0x3d81d1b4, -0x3c0d57df,0xbcc1dd0e,0xbd420c53,0xbd23c968,0xbd2d1b1a,0xbd54929a,0xbd1c588e,0xbca0bdd4,0xbcd6da3d,0x3a8471ef,0x3c4538ff,0x3ba34c64,0xbad81a6c,0x3b95a666,0x3cd7c86d,0x3c9d6a7e,0x3cc8ffad,0x3ca8c419,0x3cffd1aa,0x3cf224ad,0x3c49e794,0x3cd3743d,0x3ce18dbd,0x3d2381bd,0x3d0f286b, -0x3d936503,0xbbb09a70,0xbd1dfd8f,0xbda54a28,0xbdcc5f6d,0xbdff7a1b,0xbe076056,0xbe2352c7,0xbe2504cd,0xbe2a48e8,0xbe30a12b,0xbe2da99f,0xbe34c2c2,0xbe3fc459,0xbe2ecb08,0xbe0e234c,0xbdadd28d,0xbd701c18,0xbd02e9c4,0xbc5ee4ab,0x3c65755a,0x3c82e8a2,0x3bbd057a,0x3bfdde7e,0x3c53fcec, -0x3cc70bd0,0x3cd2ef3f,0x3cc40c94,0x3c7c240d,0x3c4973c6,0x3cb00f3d,0x3d01b801,0x3bf17770,0x3c3ef736,0x3cdefa7d,0x3d4e13d1,0xbb23393b,0xbe0531f4,0xbe4f26df,0xbe2d3724,0xbe11fc17,0xbe4e98a9,0xbe747023,0xbe786d3d,0xbe1d11ba,0xbe0d2127,0xbe0a2eb2,0xbe609a87,0xbe889c4e,0xbe9e2ac6, -0xbe99a64a,0xbe8caa0d,0xbe5c302b,0xbe31c6c4,0xbde82bc6,0xbd9fd68a,0xbccbc159,0x3c183820,0xb98523f9,0x3b82842d,0x3be50d36,0x3cad14dd,0x3cd679be,0x3d0e8039,0x3cb2017b,0x3d0e8007,0x3d0d91a9,0x3cfea274,0x3d03d4a3,0x3c41a7ad,0x3c7f0ebd,0xbc87da07,0xbdfa52bc,0xbd866b6f,0x3c84f95c, -0xbd36b8e1,0xbda3572c,0xbdd1a57b,0xbd9bbcf7,0xbda8cb1b,0x3da8814f,0x3e2e3853,0x3e31c507,0x3df4eb37,0x3d6391bd,0xbd1749f8,0xbd211f5c,0xbd7351e0,0xbd891301,0xbdc9666a,0xbda7adf9,0xbd93a632,0xbd7259ef,0xbcca8fb4,0xbc2da451,0xbb67e738,0x3c587006,0x3d18e9b5,0x3d2e603e,0x3d2f4c02, -0xbb8ffe7b,0x3d2b8bf8,0x3d03ab5d,0xbac55189,0x3c206710,0xbc4aa320,0xbcde6adf,0xbd72be3c,0x3d6d9a3e,0xbc86fff3,0xbea131fe,0xbebbaaa6,0xbe80a238,0xbe670ae3,0xbe4c42c2,0xbe2c79be,0xbe58fc12,0xbe6e72de,0xbe6a4ba4,0xbdffef42,0xbd98bcaa,0xbdbffe72,0xbd385bcc,0xbccc6c49,0xbbea94b9, -0xbb9055f9,0xbc0eb004,0xbd3e3c23,0xbd7dec6b,0xbd523fed,0xbd69216a,0xbd1a5084,0xbc87a8af,0xbb0288b3,0x3c0b2b2c,0x3b5a1561,0xbc4f1a45,0x3c83b371,0x3cd2a7e1,0x3cdc5a2d,0x3c97a9e0,0xbbd643d3,0x3c67f561,0x3cf786dc,0xbc07418e,0xbe3a6ad9,0xbe74f9d8,0xbe3c8306,0xbe0501c8,0xbe08dcee, -0xbe08a273,0xbe243eb7,0xbe2cc40f,0xbe3a5783,0xbe511abb,0xbe388deb,0xbe0efb6d,0xbdb32374,0xbd7d3664,0xbd470acf,0xbd0a8d7d,0xbd4dc9dd,0xbd320087,0xbd185b9a,0xbd476ec2,0xbcb1d9e7,0xbc6ddf7a,0xbabb71c6,0x3bbc6fdd,0x3beb44b5,0xbbce1f20,0xbc215d0b,0xbc6b8e14,0x3b247485,0x3ae2655e, -0xbbd37c5a,0xbb032e79,0x3bc71501,0x3c88f13e,0xbd1789a4,0x3cdc360b,0xbdc7c4ef,0xbd9dc918,0xbd48d32d,0xbd164774,0xbd2cbe0a,0xbce33a01,0xbc48ca45,0xbc3f6cf2,0xbc59f1ce,0xbcaf99d8,0xbd062dd5,0xbd998250,0xbdf9257a,0xbe19ce16,0xbe043762,0xbd7f90f1,0xbc4489b4,0x3c1f6d53,0xbb5ad772, -0x3af32ee9,0xbae402cd,0xbcd6b9fe,0xbc84d6c8,0xbbef1339,0xba99939f,0x3baf889e,0x3c14f1d2,0x3bb19526,0x3ad94b77,0x3abac8f1,0x3b490e86,0xb9de5482,0xbc806ad1,0xbc9761bd,0xbd2b9c47,0xbd107ca0,0xb9679899,0xbb02500b,0xbceee1b8,0xbd3141f6,0xbd4ca7a8,0xbd6f4c2a,0xbd8e2c09,0xbd822c12, -0xbd6c05b0,0xbd616c8b,0xbd47c743,0xbd1c7eb1,0xbcf5c788,0xbc7ba1ac,0xbc3c7609,0xbc70f94f,0xbc835ab9,0x3b16f888,0xb9581bf8,0xbc8e1e5f,0x3bc7d907,0x3c887d3d,0x3c8a76d2,0x3c66f3c2,0x3cbd4ea8,0x3c31a9a1,0x3b8f03e4,0xbc83a339,0x3a6099a3,0xbb54b6ce,0x3adcbd93,0xbae6d1ff,0xbbf1a49b, -0xbc07c48b,0xbc4f3dd8,0xbc90dd2b,0xbd45b094,0xbd37c56a,0xbd542de4,0xbd59f257,0xbd6a90d7,0xbd7485b5,0xbd85f0c4,0xbd6d41e8,0xbd583883,0xbd37d8f7,0xbd1f2982,0xbd0f9221,0xbd05d178,0xbce88c9f,0xbcb0a6ce,0xbc1f44fa,0xbb64056a,0x3bc44098,0x3bc565af,0xbc851d63,0xbc7aefdf,0xbcf55776, -0xbc80658b,0xbcd4f433,0xbd1b2091,0xbd132a0c,0xbd22aeca,0xbd20b332,0xbd1652f7,0xbce65d08,0xbce7a461,0xbcfd5a9d,0xbce3a700,0xbd237b40,0xbd1a2646,0xbd7e2a0d,0xbd1e4c1b,0xbd17d867,0xbd272139,0xbd2b59d0,0xbd385e30,0xbd41b0ae,0xbd4ffb48,0xbd40c5ef,0xbd395003,0xbd343858,0xbd2e3988, -0xbd248f67,0xbd196f29,0xbd0c6c04,0xbd042e61,0xbcfcbe0a,0xbcec2cbf,0xbcdc40f9,0xbc8a1a89,0xbd342dc6,0xbd0d7480,0x3c7e7a55,0xbd660a4c,0xbd354c1a,0x3c833ccb,0x3c594125,0x3c3fdb6b,0x3c57f17d,0x3be8f999,0x3bb10f95,0x3b962645,0xbd35aba1,0xbd7e2cc5,0x3ca4d315,0xbd30512f,0xbd37e265, -0x3ce67419,0x3d971dbe,0x3d0f637c,0x3d24b3f1,0x3d2e47c8,0x3d2d5598,0x3cec6c57,0x3caeabfe,0x3c6c139b,0x3c75e01c,0x3c7ad390,0x3c8a7b42,0x3c91028d,0x3c9679fe,0x3ca7b0cd,0x3c984f8c,0x3c9a979d,0x3c9e48a2,0x3cb456de,0x3cb12700,0x3c8140a7,0x3d7956bd,0x3d5547f3,0x3c3cc3e4,0x3d72aad2, -0x3d64335c,0x3c9472e7,0x3ca3a3b4,0x3c9cbd86,0x3c80d7ee,0x3ccbd430,0x3cdb6398,0x3cc5ef11,0x3d69dda0,0x3d83263e,0x3c601178,0x3d7222fd,0x3d5d6d61,0x3d930039,0x3d857967,0x3d949b1d,0x3d92447e,0x3d3ccc36,0x3cf8f707,0x3c61bbfc,0x3be8aae3,0x3babe81c,0x3c55b4a0,0x3c91fe7a,0x3cb81359, -0x3cd6b06e,0x3ca074b0,0x3ca01149,0x3ca88008,0x3ce35315,0x3ca9bd34,0x3ce0651e,0x3cfe46a4,0x3cddf91a,0x3d1c2765,0x3ceacdb0,0x3d090ff1,0x3d2f4f4c,0x3d1aeecb,0x3d445826,0x3d4603a8,0x3d38dc00,0x3d031159,0x3cf07ff6,0x3d2830fe,0x3d32c7e5,0x3d3ff123,0x3d557ede,0x3db718ca,0x3dc16102, -0x3dc1dba3,0x3dd14cf1,0x3dd9304b,0x3d4a16c6,0x3c7ea198,0xbcd5a790,0xbd18cc39,0xbd24d195,0xbcf0ca27,0xbca8f7ab,0xbc86e283,0xbb6934f8,0xbc31e084,0xbc03fe8e,0xbb32bc4b,0x3c0f7315,0x3c093ef2,0x3c0f7e5c,0x3cd8314d,0x3ccf223e,0x3c8c0380,0x3cb9a7ae,0x3cfcb579,0x3d1671b7,0x3d0a44fb, -0x3cd2a719,0x3d18ce9e,0x3cce33cc,0x3d18d8e6,0x3ca9bbb8,0x3d1bdf0d,0x3d457f2f,0x3d5ec313,0x3d981641,0x3daa9bce,0x3ddf820e,0x3ddeacf7,0x3e080cee,0x3e1899cb,0x3db8f477,0x3d25280d,0xbcc87c47,0xbd52045b,0xbd876e14,0xbd22f4f0,0xbc1b26e3,0x3c66b07f,0x3cce3fcb,0x3bb71f99,0x3bd22851, -0x3c7da276,0x3d094a3b,0x3c8b2792,0x3b8efa73,0x3c3507bd,0xbbf1b03a,0x3bfb0c13,0xbb50f12f,0x3942521b,0x3c61d8ee,0x3c9e1251,0x3ca80623,0x3bf8bf85,0x3cdbe4d4,0x3ca467af,0xbbb0b386,0x3d07c9a1,0x3d6354e4,0x3d262cec,0x3d758a1d,0x3dc65de8,0x3b2df04d,0xbd28a085,0xbd388c2f,0xbc222862, -0x3bbddc8d,0x3c2c62c9,0xbb8f08d5,0xbca6f91e,0xbd03319e,0xbd4652ae,0xbe217e3a,0xbe4e74f6,0xbe5187ca,0xbe0f684a,0xbe01c13d,0xbe2b40c1,0xbdf933c8,0xbdac1989,0xbc79d2da,0x3c832781,0xbbe12cd5,0x3c0e4f56,0x3b971fa8,0x3c80ad2a,0x3cfb2e59,0x3ca5626b,0x3cb7dcc6,0x3cbb4ca1,0x3d1ca454, -0x3d019ddc,0x3c921b47,0x3c41b06f,0x3cb078e7,0x3d020bc7,0x3dd83f9a,0xbdc1a550,0xbd530751,0x3da745ed,0x3e0aaf0f,0x3e4cd1d7,0x3e89474d,0x3e9067c2,0x3e3e5eca,0x3e575a82,0x3e3fe527,0x3dda498e,0x3ddfe1be,0x3d9967fc,0x3b740f5b,0xbd08f65f,0xbcd08eba,0x3d2f622a,0x3c4dd569,0xbc38b9ee, -0xbcc8c545,0xbd402968,0xbcb89735,0xbc38345a,0xbbf2e26f,0x3b73e17d,0x3cb02041,0x3cd72c6e,0x3d15a391,0x3ceaabc4,0x3d45e81f,0x3d50a5a2,0x3d629d54,0x3d0668c2,0x3c8dd466,0xbc51482f,0xbd0312f8,0xbb454841,0x3d8e3c43,0x3d4cf182,0x3daca746,0x3e3deb36,0x3ea742c1,0x3eac480d,0x3e3fa065, -0x3dbc79fb,0x3d35c6c6,0x3d0baf35,0x3e04ddf9,0x3e35284d,0x3e3bec2b,0x3e3c74bd,0x3e16c2e4,0x3dc352ac,0x3d5ac881,0x3d3e126b,0x3c340440,0xbac7f888,0xbc0244d8,0xbc12d102,0x3b99bacd,0x3c670dd3,0x3d31d102,0x3d10cc47,0x3d02b6da,0x3b5d44aa,0x3cfe3635,0x3c9b4739,0x3c0b5509,0xbc34a3f8, -0xbc3c9546,0xbceb2117,0x3a5828f1,0xbcf677c8,0xbba5b9c6,0x3e342b50,0x3e8dd1e6,0x3ec0343f,0x3eab204f,0x3e73d1fa,0x3d94baa6,0x3dbff79b,0x3d98908c,0x3da9de1a,0x3d3e065a,0x3d370b91,0x3d985e81,0x3d7622c6,0x3d7411c1,0x3d7ff65e,0x3d48112a,0x3d2844b9,0x3c5554b7,0xbcfdcede,0x3b92a8ef, -0x3c479bfc,0x3c7596d7,0x3cb62eb2,0x3cda117a,0x3c93e57a,0x3c3761ff,0xbc0375bc,0x3c6f8a4b,0x3cabb7f8,0x3d2d883d,0x3c7e441e,0x3cb1e63d,0xbc1673b3,0x3c37cc0c,0xbd5954e8,0x3e09f015,0x3e7a4a41,0x3e696035,0x3e94cb33,0x3e8c24c6,0x3e798402,0x3e2496fa,0x3e25d78d,0x3e2afa0d,0x3e5dbfec, -0x3dddcad8,0x3d620783,0x3d78d567,0x3c8ab03c,0xbb6228dc,0x3b501e9c,0x3cd641e4,0x3d5a4a28,0x3d747883,0x3ca3b19a,0x3d2def69,0xba1f7179,0x3bba5be2,0x3c8a31e6,0x3cf42798,0x3c9a27d0,0x3c8c7299,0xbba5c0e6,0x3c75939d,0x3c853752,0x3c8f0fa0,0x3c20d0e3,0x3bb08858,0xbc88c8a1,0x3cfc02df, -0xbd933bbb,0x3d5679b9,0x3dca1382,0x3dc4ea85,0x3e03f2af,0x3dd8d660,0x3d8d8033,0x3cb52cbd,0xbc9bccd5,0xbd575d83,0xbd8a23b7,0xbd5d3fc4,0xbcba38f2,0x3bd151f2,0x3d2dd831,0x3d7912bc,0x3d852977,0x3d796a1a,0x3d67e84a,0x3ccb46df,0x3c30e7b6,0x3d028b1c,0x3cc4757a,0x3d0d99b1,0x3caf78aa, -0x3c713aa5,0x3c3eca96,0x3c1d7a60,0x3cafe971,0x3ca20918,0x3cbc0e75,0x3cab2975,0x3c9c87be,0x3ce40e6c,0x3c189bb0,0x3cf3593a,0x3d77d7be,0x3d732a09,0x3d7be84b,0x3d868bd0,0x3d9ba158,0x3d621602,0x3d35589c,0x3d1395bf,0x3d1d164f,0x3d1d0a48,0x3ceb9669,0x3cc07461,0x3c300cc8,0xbc153f42, -0x3aa1dfa3,0x3c386ebf,0x3ccd62c5,0x3d0a0f60,0x3d4065b7,0x3d67ea31,0x3d1e1cc9,0x3cba7848,0x3c626aba,0x3ca0c7b9,0x3c920caf,0x3cb1a567,0x3c623745,0x3d08eeaa,0x3c7ad36f,0x3cde862e,0x3c6923b8,0x3cdf3306,0x3cac1089,0x3caf0987,0x3c1e6978,0x3d170827,0xbd361ee8,0x3d7a940d,0x3d64d1fe, -0x3d5ba804,0x3d52dafd,0x3d4f9e29,0x3d4bcd60,0x3d3e9c69,0x3d124942,0x3ccdba82,0x3c942a5b,0x3c39b83c,0x3c077d3f,0x3b50f88e,0x3c14fc47,0x3c2af78a,0x3c326270,0x3c655bf0,0x3c3dfd92,0x3cb42033,0xba2ef452,0x3cfcc440,0x3d14ec6b,0x3c89b0b2,0x3c90a84c,0x3d0dbd77,0x3d268726,0x3d36d388, -0x3d075011,0x3d4da04c,0x3d569da6,0x3d10614a,0x3d2b26f9,0x3ca1ebbe,0x3cc7608f,0x3d47aeec,0x3d01265c,0x3d93f66d,0x3d4fb068,0x3d60e56b,0x3d592a39,0x3d5ade7e,0x3d5a4361,0x3d613cfc,0x3d503d88,0x3d44345b,0x3d346649,0x3d20b62c,0x3d0aa438,0x3cdc2950,0x3ceccc5a,0x3cf9049e,0x3d031062, -0x3d0ba9ae,0x3d0a4e93,0x3d2911e6,0x3cb8d74b,0xbc54997a,0xbda31e04,0x3d2649db,0xbbd98df9,0xbdabe709,0xbda9a5cb,0xbda4af6b,0xbd991d3a,0xbd9dffc9,0xbd9c245f,0xbd91f512,0xbb9ba982,0x3d5f9e85,0xbdb34599,0xbc782f08,0x3d74353a,0xbdc9ee38,0xbd68a4a4,0xbdf21b92,0xbdb944e1,0xbdd5a643, -0xbdd81a70,0xbde297eb,0xbde12f40,0xbdd9787f,0xbdcb8e2c,0xbdc405a3,0xbdbf1f66,0xbdbe025c,0xbdbe12b4,0xbdc205bd,0xbdc13331,0xbdc07dd7,0xbdbb947c,0xbdbed71b,0xbdaea259,0xbdd581e0,0xbd76ab0a,0xbbc6f176,0x3dc455f5,0xbd9b9782,0xbc0f2c12,0x3db801c4,0x3db467e3,0x3db04982,0x3d9b1f73, -0x3da4fa69,0x3da3e69c,0x3d98012d,0xbbf778e6,0xbdb48d5f,0x3dc62699,0x3bf94bfd,0x3d80a31e,0xbe05b584,0xbe110c5b,0xbe1e5462,0xbe234d5a,0xbe2d39d6,0xbe2c2dd1,0xbe205c5d,0xbe0b70e4,0xbdf7e642,0xbde9a76e,0xbddda8dc,0xbdde3637,0xbde66e78,0xbde1cbf2,0xbddb2a8d,0xbdcdf747,0xbdce470a, -0xbdc3de5c,0xbdc59ee4,0x3c374891,0xbd6885eb,0xbd6c9b13,0xbd15f03e,0xbcced51d,0xbd52003b,0xbd61f09d,0xbd7e3974,0xbd2dfa05,0xbd82f2f1,0xbd89c52f,0xbd441c52,0xbd6c94dc,0xbcf562d7,0xbce64c9f,0xbda15321,0xbc3803c4,0xbdc08582,0xbe383c57,0xbe33056c,0xbe488bfd,0xbe5e6205,0xbe5e2e0d, -0xbe4dde90,0xbe253c2d,0xbe0e4033,0xbe03cfd2,0xbdf67e44,0xbdf435e0,0xbe01c9cc,0xbdf828fc,0xbdec8a1a,0xbdd232f8,0xbdcba3fa,0xbdcc16dc,0xbd88e247,0xbd3df1e9,0xbd1c8450,0xbd08624f,0xbcf411da,0xbb5ac3d5,0xbc94b502,0x3bf667b9,0xbd05f547,0xbb87b834,0xbc98e315,0xb82b35d7,0xbcbdcb06, -0xbc2dacb5,0xbc3f0f40,0xbb436c23,0xbd43b4ff,0x3c65eba4,0xbe173ea8,0xbe90fd40,0xbe95eac4,0xbea0ebbc,0xbeaead78,0xbeb14a89,0xbea2e98b,0xbe775a3c,0xbe3dbb46,0xbe294f30,0xbe15b5ee,0xbe19d4fe,0xbe216282,0xbe0ec0ea,0xbdf9e373,0xbdd4096d,0xbdd8b5ee,0xbdbde503,0xbd8e9188,0xbcc3dd2d, -0xbd28aba4,0xbc685f96,0xbca491d1,0xbbf250a9,0x3bc40b59,0x3c253e16,0x3caf8f01,0xba9c6239,0x3c933f35,0x3b9c1e5b,0xbc5dcad8,0xbc994b23,0xbc476c1b,0xbca413d1,0xbd32c768,0xbd908753,0xbda699b2,0xbced689f,0xbb4b0dd3,0x3d01d6af,0x3d5469c5,0x3d3657e7,0x3ce6df7d,0xbd8b3896,0xbe0c9e1c, -0xbe40c43f,0xbe3982e8,0xbe291c8a,0xbe1a5caf,0xbe389c03,0xbe311254,0xbe004910,0xbdc5cb94,0xbdbe24f0,0xbdef0507,0xbd69eb35,0xbd52b340,0xbcfa29aa,0xbca291c3,0xbb4ce9c3,0x3cd35f2a,0x3bec3424,0x3c39f008,0x3cb1dbf4,0x3c88f38f,0x3bc3a87e,0x3aeac75c,0x3c277265,0x3c80acde,0xb9d53a2c, -0xbd1ba0b0,0xbba6daed,0x3d80b649,0x3d7aa025,0x3d0ebaa5,0x3da31df5,0x3c86a5d8,0x3b914611,0x3d10cecd,0xbd064cd4,0xbd16d7e6,0x3c142090,0x3bb01bdb,0xbb617d31,0xbc1b838d,0xbc611c68,0xbcfc182d,0xbd7826d4,0xbdb6e626,0xbdd44a68,0xbda0d5a3,0xbd835c3e,0xbd82790b,0xbd2a44a3,0xbce3af3d, -0xbc1ee0a2,0x3cc43117,0x3c8bebbc,0x3ca048b6,0x3c6c771a,0x3d16ae91,0x3d2654a8,0x3c6f9289,0x3b8a1c58,0xbca0deb6,0xbcc5ea53,0xbc2b50e6,0x3d43c6f3,0xbb01a694,0x3c4a3566,0xbd051a7b,0xbe56e662,0xbe748fa2,0xbe8d7c24,0xbe7b2c86,0xbe36984f,0xbe112598,0xbdbab7d7,0xbdf8fe41,0xbdffd4d2, -0xbdbbdbb1,0xbda5f5b6,0xbd41133b,0xbc15a698,0x3cf7dbb1,0x3cd85da0,0x3bd93959,0x3c003361,0xbafe846f,0xbc04fc1d,0xbc5ad8b5,0xbb0115a1,0x3d1c65bc,0x3c395de6,0x3bb5e1e8,0xbb243eb6,0x3c9d7d74,0x3c7a50d2,0x3cb029f5,0x3beb6cc2,0x3c4f1d76,0x3ce4626e,0x3cf461b0,0x3ce1b4d2,0x3db6fa19, -0xbc412c8e,0xbe097e09,0xbead76b0,0xbe2f298b,0xbd6ba2fd,0x3d3dcf7b,0xbc2f1cbc,0xbca7bfdd,0xbbc970a2,0xbd2f4d1d,0xbd27c27b,0x3b5d9d72,0xbd01d32e,0xbd41c212,0xbd5182fe,0xbd579fba,0xbcfc22f7,0x3c3c5dd8,0x3cf81349,0x3cd3588d,0x3d390004,0x3cb576bc,0x3ca0e7bd,0x3d406cbe,0x3bb8aad6, -0xba9db5b4,0xbc2327a4,0x3b2d8e80,0x3c181011,0x3caaebb0,0x3bf6f806,0xbbe6638c,0x3c8fdfdf,0xbb5e75d8,0x3dd900d7,0xbc506ae8,0xbe6c558d,0xbe6c220a,0xbe59977d,0xbe1ee6f6,0xbe0e7009,0xbdd2d6a6,0xbe12f71e,0xbe1f2f93,0xbe2db1fe,0xbdca4192,0xbd986f1a,0xbdd1dcf8,0xbd1bc939,0x3a945987, -0x3cf53dcc,0x3d3ca335,0x3ccde16d,0x3cb5119f,0x3cdd7499,0x39a43b70,0x3cac5a18,0x3c63cd17,0x3c8843f3,0x3ca5d486,0x3ce6c235,0x3cc06770,0x3ba9a4b1,0x3b770248,0x3c058c81,0x3c94a6b1,0x3cdfde14,0x3ce1aa8a,0x3d1e2f65,0x3cbb3075,0x3d86a1b1,0xbd4ce3cd,0xbddc98be,0xbd85b3c4,0xbd69d2b6, -0xbd2945b5,0xbd2dc17d,0xbd6e358f,0xbd207cce,0xbd0874dd,0xbd168a70,0xbd4c6fbc,0xbd5f12e9,0xbd809a19,0xbd0132a7,0xbcb995d8,0xbc2a0fb5,0xbc3314b1,0xbc3f67a0,0x3cc09a01,0x3d2b1dd9,0x3cacba95,0x3d094370,0x3c6c7f80,0x3c1a24e2,0x3bb20b90,0xbb5f4d54,0xba7fe906,0x3bcffda0,0x3bf83304, -0x3be1c1f2,0x3a60eaaa,0x3c8cc3f0,0x3bff9acf,0x3bb85f07,0xbcc0ff4e,0xbbe5a4bd,0xbd23f4ed,0xbd60fcdc,0xbd2449fd,0xbd3fab70,0xbd279ff4,0xbd202499,0xbd169d96,0xbd179d8c,0xbd243d3a,0xbd0e3bf4,0xbcbea463,0xbc32f67d,0x3ade0351,0x3b99a534,0x3c477a98,0x3cb7d933,0x3c7806cc,0xbb93fffc, -0xbb74d8e4,0x3c982992,0x3c0f5726,0x3800732b,0x3a7bac06,0x3c4874c5,0x3bcbeeed,0x3cbd9b49,0x3c157cca,0x3d146408,0x3c048cdb,0x3c8c8430,0xbb84ba4e,0xbb70062d,0xbafd6342,0x3c171922,0xbc4f8ab6,0x3db555bf,0x3bfdc447,0x39f1d0b9,0xbb0f1967,0xbc0af3da,0xbc544cd1,0xbc923488,0xbcaf8d62, -0xbc3f5cb4,0xbacff2b4,0x3b694689,0x3c12b966,0x3c5cf55d,0x3caa0468,0x3c8aad0c,0x3c5d4127,0x3c1d1f26,0x3c13088a,0x3c424869,0x3bcde982,0x3ccf5f68,0x3b5b73d3,0x3bf6e716,0x3c915629,0x3c947a95,0x3c38af49,0x3bd40645,0x3bf9ac31,0x3cb0e440,0x3bdf10e9,0x3a187719,0x3cab713a,0x3c78230e, -0x3d109d2c,0x3d146fab,0x3c2bfb93,0x3cd40921,0xbcbdd6ca,0xbc073780,0xbc575957,0xbc62c29f,0xbc781ab2,0xbc868846,0xbca57561,0xbc7ee3d0,0xbc536bb5,0xbc0c0d10,0xbb8b754a,0xb9d7f5d1,0x3b8db813,0x3b116b49,0x3ae54385,0x3a6478a4,0xba779b7e,0xba9060e5,0xbc261967,0x3c9e1558,0x3d4ee22b, -0x3d9ec676,0x3c5a526d,0x3d5e5538,0x3dafc18c,0x3db31490,0x3db2e3c2,0x3da7d0b2,0x3db70e4f,0x3dba84c8,0x3db5b09d,0x3d6ac411,0x3c0d32de,0x3db76601,0x3d840c40,0xbc60e5ea,0x3cc3fc61,0xbd62345a,0x3d1def08,0x3bf8697f,0x3c6a8e75,0x3c78bd88,0x3cf9a3e1,0x3d0f6d85,0x3cfbf4ff,0x3d078cd1, -0x3d029a8b,0x3ce886d6,0x3ce04407,0x3cd71f2a,0x3cd24e95,0x3cdfaa2d,0x3ce7a5bf,0x3cf71b6e,0x3ce39b5d,0x3ca80d93,0x3d4ce35f,0xbd331624,0xbdc411d1,0xbe16042b,0xbc93570c,0xbdb27477,0xbe0bcf6d,0xbe0fa321,0xbe0ee485,0xbe036a4f,0xbe0fe86c,0xbe1149fd,0xbe0da750,0xbdb83345,0xbc6c507f, -0xbe11ac2c,0xbddd9cfb,0xbe0ecd89,0xbc8a5d61,0xbc05d0eb,0xbbb1acde,0x3bce3125,0x3d425560,0x3d775b4a,0x3d3e178f,0x3d6adaab,0x3d4de2e9,0x3d12f54d,0x3cf0f7a7,0x3ce96a6f,0x3d010cc4,0x3d1eecf8,0x3d249801,0x3d31acaf,0x3cfff133,0x3d0c5734,0x3cde89cc,0xbdc9ad6f,0xbc2d79ae,0xbca7eecf, -0xbca407ee,0xbce41173,0x3a17cf09,0x3ba11a4e,0x3ac60c62,0xbcbff6f3,0x3be2d33f,0x3c8653e6,0xbc80e1c2,0xbc84b48b,0xbd593341,0xbd71df80,0xbc64fb08,0xbdc91a29,0xbd54a835,0xbc68b838,0xbd03898f,0xbc862be6,0x3d76b098,0x3db1cf32,0x3d833a39,0x3db3f01f,0x3d9d1e02,0x3d673ea2,0x3d378a92, -0x3d21a2c5,0x3d26b959,0x3d49738b,0x3d578d74,0x3d7e624c,0x3d1700b5,0x3d47de1e,0x3c131696,0xbd1d46b6,0xbcc3850c,0xbc6fe77e,0x3a08fa14,0xbc966e10,0x3c9dab12,0xbca16aad,0x3cd42639,0xbcc5da65,0x3c6e23ba,0xbcd070b5,0xbc8fe705,0xbd0b9084,0xbd32a766,0xbd9be385,0xbd7654b7,0xbe273f30, -0xbdfa8f3c,0xbd3f6ed7,0xbd74c810,0xbd078bdb,0x3db7aea2,0x3e0bf25a,0x3de3c1fe,0x3e167e68,0x3df7d2eb,0x3d8c1321,0x3d1a2a62,0x3d0eeaa1,0x3d4b0a45,0x3d8e3b26,0x3d9760fc,0x3da41a51,0x3d4415ef,0x3d3f510c,0x3c80fd25,0xbd53a3a8,0x3ad3c9f0,0xbd050c18,0x3bb14b1e,0x3c59c319,0x3ce521a8, -0x3ca3a65d,0x3c5b5bc1,0x3ce19c48,0x3cb6cecb,0x3c9bcdd4,0xbc281d60,0xbd041277,0xbd905e0c,0xbdae76ab,0xbd9f4997,0x3cb32797,0x3e7c7c31,0x3ea4c191,0x3e65ecd9,0x3d04d0f1,0xbbbdbdfc,0xbd902689,0xbe11d383,0xbdb37010,0xbd58caa7,0x3b92b09a,0x3d428f91,0x3d70c069,0x3d038ba7,0x3d6ef337, -0x3d803668,0x3d941a05,0x3d370948,0x3d7e16a9,0x3c94ea22,0xbd679d22,0x3c0afafa,0xbbc753d9,0x3bd30c3b,0x3b82c537,0x3ca6e07c,0x3c3a7846,0x3c4cbbb7,0x3caa56af,0x3abc86dc,0x3c09bd48,0x3ce5369f,0x3d1f53b4,0x3c485d71,0x3d03e33b,0x3b2c314c,0x3d813bfc,0x3dc7f3aa,0x3d59965e,0x3c9314ea, -0xbd440ee9,0xbd7e7f17,0xbdbf3b6d,0xbdbaf1a7,0xbdd62180,0xbda0fcf2,0x3cebd91b,0x3cd0da28,0x3d58d0c5,0x3db2e096,0x3deffef1,0x3dfccf20,0x3df31b8f,0x3dc6b975,0x3dc81d6b,0x3c46cf16,0xbd16c78c,0xbcc1f530,0xbc9ed80b,0x3c5f0556,0x3cb0597b,0x3d131537,0x3ca4b6be,0x3c87ab91,0x3c7412bf, -0x3d210e25,0x3d0c34d3,0x3cc15b54,0x3c178f01,0x3d58b868,0x3d799083,0x3db4c0dc,0x3cb4b9eb,0x3d8b0f85,0x3beae11d,0xbceb9954,0x3ca74590,0x3d951ee0,0x3e1acfa2,0x3e61a42c,0x3e07fb3d,0x3dbbf4eb,0x3dadae69,0x3d654145,0x3d535e96,0x3d31ee6f,0x3cf0627f,0x38aeab21,0xbd0c52d6,0xbc555734, -0x3c9df6c3,0x3cd801e2,0x3ceb4d6d,0x3d0cb43e,0x3c83b843,0x3c36f92b,0x3c8aa8df,0x3d5c74c9,0x3b6baada,0xbb08fc08,0x3b9605c7,0x3cd3139a,0x3cff0a16,0x3d377119,0x3c74505f,0x3cea5bb7,0x3cbcac06,0x3d08f9b7,0x3cf1237e,0xbd2a8e9b,0xbd466bac,0xbc29201b,0x3dd3ac6c,0x3d851ada,0x3cb2599a, -0x3c885246,0xbd395c33,0xbdc10bd4,0xbe06d5a4,0xbdd77555,0xbdad0b70,0xbdb4a828,0xbcaded1f,0x3c7f87f9,0x3cd1c4c4,0x3d0b3b07,0x3d0780a5,0x3c966a1a,0x3bb9b870,0x3c4edace,0x3ca88d09,0x3c87357b,0x3ccc5e7c,0x3d53b45a,0x3c69eea4,0xba0fe549,0x3b7ae84b,0x3afd0589,0x3c811848,0x3d5ac1e1, -0x3c9d4c72,0x3cb4353f,0x3c62991e,0x3d2a60a4,0xbdad6254,0xbd1dc3a7,0x3d91da9e,0x3d2719fe,0x3c7c8d46,0x3d85f43b,0x3da9195e,0x3d595c0a,0x3bd61654,0xbd06c9ad,0xbd711b15,0xbd8d6779,0xbd5a8fcf,0xbccc8a04,0xbd00d9fb,0xbd06b25c,0xbcd9b33a,0xbce50409,0xbbe8cc0f,0x3ba74e09,0x3c49c8be, -0x3ccc85dd,0x3c935edb,0x3c997376,0x3c76318e,0x3ca0fb43,0x3cabda75,0x3cd669d7,0x3c81b4bf,0x3c8c280f,0x3b997cae,0xbabf6600,0xbaffb2f1,0xba67456e,0xbc6e0630,0xbcfe5f76,0xbdabd3e4,0xbd5940ed,0xbc012a42,0xbced5e4f,0x3b81af45,0x3b2278a0,0x3d0954b0,0x3dae0a0c,0x3d4e4c17,0x3cb5b681, -0xbc2e8876,0x3b294db3,0x3c1841e2,0x3cc25f5a,0x3cdbd8ea,0x3cd92fdc,0x3cac1e4a,0x3c31fafe,0x3b8c969a,0xbc14d370,0xb6c39caa,0x3b21b088,0xbc215539,0x3bfc10a0,0x3c87e05c,0x3c457607,0x3c867085,0x3c750090,0x3cbfcf04,0x3cbc8fde,0x3ca8dcac,0x3c9c4f7e,0x3c932b90,0x3c8ba50d,0x3b1fa2ba, -0x3b5fddc5,0xbd071ccd,0xbbbe5399,0x3ccea70a,0x3c714936,0x3cc5de7c,0x3cd65bb5,0x3d07d205,0x3d275b4c,0x3d1e42ad,0x3d3e60ae,0x3d49a963,0x3d0d21da,0x3c9ca6bf,0x3bc25654,0x3c22bec4,0x3c53f749,0x3ca88de8,0x3c954ad6,0x3cd1972f,0x3c558d55,0xbada0e29,0x3bcb290b,0x3c3c9bad,0x3c50f42b, -0x3ba70ef1,0x3c9e2ff9,0x3bd95c04,0x3cafdf6e,0x3b070281,0x3c3c851d,0xbbad8e25,0xbb6f39d0,0xbc306d69,0xbcb8ee88,0xbd12ef5f,0xbcbbf373,0xbcadb383,0x3b945647,0x3c6307ed,0x3c972f62,0x3cdd3711,0x3d0de680,0x3d273313,0x3d3b6147,0x3d29ce49,0x3d0e6cbf,0x3d049476,0x3cf85b62,0x3cf8f0e7, -0x3ce19067,0x3cedd847,0x3ce8e781,0x3ce82ecf,0x3cd6ef94,0x3ccef405,0x3ce1b036,0x3c2a02e2,0x3ccfb46f,0x3cac2d5b,0x3cb33d19,0x3c972ef6,0x3cbf49be,0x3cc9f9fc,0x3c8f8b4e,0x3b849ebb,0x3c7d1c88,0x3cb7e97a,0x3c1c098e,0x3c51e7c8,0x3b47ec45,0x3aa31960,0x3c589448,0xbc686bee,0x3cab189f, -0x3c896916,0x3ca016ba,0x3caea749,0x3cb66e11,0x3cc590f3,0x3ce54a22,0x3cdd3033,0x3ce233bd,0x3cda8aba,0x3cd7f07d,0x3cd2f0b0,0x3ccedd0a,0x3cc4fd29,0x3cbb129d,0x3cb3000a,0x3cb563c5,0x3ca7f53a,0x3cd886ed,0xbb19a81d,0xbca21068,0xbca73996,0x3905e7ef,0xbcc49da0,0xbcd34725,0xbcebc093, -0xbce55e66,0xbcbbad78,0xbcf43632,0xbcfeb1a5,0xbcf6def4,0xbcf92809,0xbbd802fa,0xbcb05bc4,0xbd05b92d,0x3c86f4f1,0xbc018aa5,0x3d388a8b,0xbc51f39b,0xbb851ee9,0xbb567227,0xbbab8a5f,0xbc3f656b,0xbc783bdc,0xbc9183f2,0xbc89ac7c,0xbc7e6f55,0xbc4961c8,0xbc3ba4e4,0xbc26619e,0xbc1b7800, -0xbc0554da,0xbbf66f69,0xbbe50f98,0xbc01350f,0xbbdfd457,0xbca19805,0x3d350594,0x3d771fe3,0x3d039383,0x3d11fb63,0x3d7ffaac,0x3d1db228,0x3d2a70f5,0x3d2bbcd7,0x3d130665,0x3d4168d0,0x3d4126c9,0x3d326816,0x3d676b41,0x3d03cc5e,0x3cbebecd,0x3d6fab5f,0x3c8be972,0x3ccbc5d0,0x3ca1d5ac, -0x3ceb8b19,0x3cb75092,0x3b341781,0xbc349dab,0xbcb08311,0xbcd7bacc,0xbcd80ac1,0xbc9de5a7,0xbcadc2f6,0xbcabf019,0xbca8e8ef,0xbc9a9e69,0xbc702cf6,0xbc2c391a,0xbbf7003c,0xbc72e21e,0x3b169aaf,0x3d2fb0fb,0x3bde8608,0x3cbddfda,0x3c8646ef,0x3cb888c2,0x3cc1dc5b,0x3c49ebb5,0x3ca51658, -0x3d113b2a,0x3c7bcd0d,0x3b4b912e,0x3c2d3dd5,0x3c2b5fe0,0x3caf48b4,0x3c8daacc,0xbaa02468,0x3caa9d18,0x3cd8001b,0x3d2d6f06,0x3d2f7ce7,0x3cf8edba,0xbc85fa89,0xbd21db6f,0xbd665d76,0xbd61fa94,0xbd3b751a,0xbcc867e2,0xbc8efd04,0xbc3c673c,0xbc2d66f0,0xbbd88d94,0xbb714e76,0xbb85bd49, -0xbb98f02c,0xbcaa14c7,0x3c1fffba,0x3ce553a0,0x3c287618,0x3c7d349d,0x3c6e934f,0x3cef98f7,0x3ccacf69,0x3cc91b5f,0xbacdd7da,0x3d0c350b,0x3bababea,0x3cd6e7ae,0x3c188445,0x3c3f8e9b,0x3b9e79bd,0x3c63ded2,0x3cbf92da,0xbb284242,0x3dad0b3d,0x3dfda721,0x3e09e523,0x3dee01a1,0x3d28407d, -0xbbd879d5,0xbd500f05,0xbd8cf3a5,0xbd92c087,0xbd3f17fd,0xbd342320,0xbd2cf374,0xbd362426,0xbd2c64b2,0xbd0187ab,0xbc92b30d,0xbc8be4f6,0xbcd8b42f,0xba653ef8,0x3c11f3d7,0xbca106b8,0x3bada722,0xbb508e03,0x3b1f5b64,0x3c923eab,0x3c4b77f2,0x3c545560,0x3ba14067,0x3c9f1896,0x3af9871e, -0xbc41485a,0xbb9d9d0c,0xbb04e87b,0xbbbb49d9,0xbc09eda9,0x3e7966d9,0x3db33ea5,0xbd60ad75,0xbd3cdc8a,0xbdf39cb0,0xbe0e2146,0xbe023497,0xbd9ea340,0xbb4fb583,0x3d8336c2,0x3df1bbbe,0x3e065e58,0x3e1791f8,0x3e2f9a80,0x3e1545e9,0x3ded0685,0x3d96737c,0x3d268eac,0xbb0ed175,0x3ca08fdd, -0x3d08db13,0xbb91203d,0x3b90046c,0x3c0ac37c,0x3c768f11,0x3cb98ce4,0x3bba760e,0x3c0821c8,0x3c9e74f2,0x3cd9b16d,0x3d33db31,0x3d82941d,0x3d397d4a,0x3d9095ff,0x3dc29b8c,0x3e3ba276,0x3d8cab6d,0x3c0b27c5,0xbcd2dfac,0x3ca05771,0xbab9f679,0x3e3781fc,0x3e6d32ee,0x3e573dbd,0x3e11caf4, -0x3d895878,0xbcdab340,0xbd12d51e,0xbd417a81,0xbd91bb9b,0xbd877556,0xbd9f20f2,0xbdde8e54,0xbd2332c5,0xbcb11a5d,0x3ce93a8d,0x3d814ef3,0x3d20efde,0x3d091190,0x3c4d9ac2,0x3c315fac,0x3d10680c,0x3cbf2c11,0x3cb178cb,0x3c2bd4b5,0x3d0186c2,0x3d0a8785,0x3ce7fd40,0x3d650bc6,0x3d5d2a65, -0x3d82aa76,0x3c95faec,0x3d7326bf,0x3ad2981a,0xbcbf4ae5,0x3d5657b7,0x3da62401,0x3daad79d,0x3d58460c,0x3d1dbe83,0xbd1a5f0e,0xbd8fbf20,0xbdb3dc5b,0xbdb5de59,0xbdc41684,0xbde2de9d,0xbdb838be,0xbd5fd605,0xbc39a839,0xbb13b189,0xbcb328eb,0xbb688dc3,0x3bd37b3e,0x3ac2cb32,0x3cd899c4, -0x3c6bd97e,0x3cb9e20d,0x3d949c93,0xba867418,0xbc77f119,0x3be0d031,0x3c9263ef,0x3d073315,0x3d96053f,0x3d39e353,0x3c22a558,0x3d807d32,0x3d332dbe,0x3be7565e,0x3d204d1e,0x3e08b8ab,0x3e212fb5,0x3d16397e,0x3d5220f0,0x3d346d1a,0x3adf3fb3,0x3d8516a9,0x3da6afe1,0x3d74145e,0x3d883481, -0x3d9050cf,0x3d972742,0x3d454141,0x3cb8621a,0xba8df03c,0xbc6ae0ca,0xbcad0e9d,0x3c07e5c7,0x3d15392c,0x3cacc968,0x3bc3c962,0x3c8ee3b8,0x3cb8687b,0x3d4ea161,0x3c816dff,0x3c6ef3c5,0x3cbc3681,0x3b1700d4,0x3bd25198,0x3cd8b64e,0x3ca3c102,0x3c845f1a,0x3c53a72e,0xbbfe9517,0x3d8b43cd, -0x3dd0ab9d,0x3dd187c9,0x3dbb3989,0x3cb88908,0x3cc9543c,0x3c00b77c,0xbbf6a269,0x3cb98738,0x3d1fb1ec,0x3d68d0ab,0x3d7356cd,0x3d6e711f,0x3d9a7220,0x3d6b5746,0x3d3350a7,0x3c35a5fd,0x3c6e86b4,0x3c5b4016,0x3c318d31,0x3ca089c9,0x3c0d2005,0x3c133a3c,0x3c442669,0x3c148eaf,0x3c2c7ad4, -0x3c48615c,0x3bd67e13,0x3cb9a159,0x3c81bc75,0x3cd03a6f,0x3d1f3f72,0x3cd559e7,0x3cca5f55,0x3cbf4edc,0x3d81aac7,0x3d525e51,0x3db2ddb4,0x3cd53952,0x3b2d3497,0xbc9a8aeb,0xbc90f2e0,0xbd0680c9,0xbd7ae10f,0xbca3551a,0x3ba153c5,0x3cea2b17,0x3cae9f16,0x3d0ee8a9,0x3d79ef28,0x3d7c1635, -0x3d45da71,0x3b9f18e5,0xbc4660ea,0xbc595fc0,0x3c215a72,0x3bf04a40,0x3c7d088c,0x3cffe621,0x3cacd0ad,0x3c67951f,0x3c8ff7b8,0x3c9ce4cf,0x3cb4d9d4,0x3bc92cd8,0x3ca7b355,0x3cd2fae4,0x3ceda175,0x3cba235a,0x3cefc82e,0x3d133cc9,0x3d563205,0x3cdfd0c5,0x3b63fd1b,0xbae8e61e,0x3c95aa97, -0x3cc38f1d,0x3c8ad5c7,0x3c25357f,0xbb2fe3cb,0x3c006cf0,0x3c3eceab,0x3ca02ab3,0x3cb2217c,0x3cbbdcd9,0x3cb5d6e1,0x3c2bd0da,0x3b7d92b4,0xbb606ea0,0x3b825a07,0xbbe29861,0x3b5444f1,0x3ccc5349,0x3c92ae2b,0x3ca01886,0x3c920f96,0x3cc2e6d0,0x3c91e490,0x3cb4eec4,0x3bf681c1,0x3cd1c514, -0x3c03cd69,0x3c84008f,0x3c27622c,0x3c85152b,0x3cc370ca,0x3cf0f565,0x3cbc2692,0x3cd07f12,0x3cb7b619,0x3c3f4726,0x3bb0e377,0xbb09df5b,0xbc0f5b94,0xbc6aa993,0xbc9dd602,0xbc9427e7,0xbc8b1611,0xbc8142b0,0xbc681694,0xbc46b5f5,0xbc08d4af,0xbc0ce955,0xbc060bef,0xbc2f0f24,0xbc418439, -0xbc7f4d0c,0xbc6de233,0x3cdd54d0,0x3c23b72b,0x3cbb6254,0x3ca06f4f,0x3cfb354f,0x3cef4622,0x3cd4fc83,0x3d0a5f4b,0x3d2cf40b,0x3d055cd3,0x3ceb8c0b,0x3d05118f,0x3cfdf301,0x3ce99189,0x3ceddee3,0x3caa59ec,0x3d1089b1,0x3bf8a898,0x3bf59b43,0x3bd0d45a,0x3b814568,0x3b5674d1,0x3af64f1f, -0xba7248d5,0xba0e4488,0xba68e957,0xba891118,0xba7afc50,0xba50f8bd,0xb90b4be6,0xba56549f,0xba86885b,0xba41bd10,0xba4aa7f6,0x3a91df6e,0xbc10536c,0x3ce2c824,0x3d19643c,0x3cdb3678,0x3ce07359,0x3d2c3ec6,0x3cf4a2a9,0x3d001c2a,0x3cea02c5,0x3cb81957,0x3cdfac91,0x3cd31558,0x3cc943b0, -0x3d2991b1,0x3d0871c7,0x3c6abb5e,0x3d21b4de,0x3c2859fe,0xbc8f7d7a,0xbd56e6ba,0xbc8a6ca8,0xbcb4c86e,0xbcd5e0dc,0xbcd7a555,0xbcc9e5a5,0xbcb6c583,0xbca2ead3,0xbc8ac6a4,0xbc813f1c,0xbc6a9590,0xbc87019b,0xbc8cde1e,0xbca28564,0xbc82e92a,0xbc72510f,0xbc55f362,0xbc63c807,0xbc53716a, -0xbbe4870d,0xbd501e25,0xbd3cd688,0x3ba6e352,0xbd41d06c,0xbd4080b5,0x3b6420e5,0xbb565d0a,0xbb89cfdf,0xb9af10b7,0xbc0f9990,0xbc380b7d,0xbc4377a2,0xbd42a5c9,0xbd42fae8,0x3b9abaad,0xbd3d1601,0xbc0cde94,0xbd0c306c,0xbd27af65,0xbd68c2ad,0xbd795d7c,0xbd8239de,0xbd691d0b,0xbd3a1d7d, -0xbcfdf09e,0xbca7733f,0xbc6f5b32,0xbc934244,0xbcb529dd,0xbcf209dd,0xbcaa3b07,0xbc8d089c,0xbc47d83c,0xbc858fa3,0xbc00739c,0xbca8590a,0xbcd05837,0xbc70ce67,0xbcf0d44b,0xbc680643,0xbc794a46,0xbc8f6032,0xbc8b5646,0xbced8115,0xbd0959b5,0xbcdf9840,0xbc7878f9,0xbc8d7143,0xbc801afd, -0xbc72e4ef,0xbc80753c,0xbc8633bc,0xbc464969,0xbce3670b,0xbd8f6776,0xbd9de122,0xbdae6534,0xbdb301a4,0xbd967878,0xbd5db65f,0xbcf3b9f8,0xbc860f78,0xbc363311,0xbc9854cb,0xbccefed0,0xbd28d860,0xbcacc817,0xbc70a112,0xbb994a9c,0xbbdb33ea,0x3b784a61,0xbc30973c,0xbcbbaf6b,0xbc3b76cb, -0xbc17caed,0xbba37427,0xbbde4b41,0x3bed6e54,0xbbac7bd4,0x3b0b8a9f,0xbc8ab99b,0x3ace9862,0xbc376496,0xbbed8ff6,0xbbbf8304,0xbbfe7932,0x39999406,0xbc59dd14,0x3d3885a9,0xbcc6e6ab,0xbdfc0eb4,0xbe14c340,0xbe2b63b5,0xbe3b6cce,0xbe27462a,0xbe0251e7,0xbd8e141a,0xbcaded8d,0x3a0a559b, -0xbc1ee2dc,0xbce95d1f,0xbd64fde9,0xbcd8cfcc,0xbc62a1e4,0xbacb6a1e,0xbc1c5f60,0x3bde8aa0,0xba832718,0xbc5ae2f4,0x3c91d151,0xba9ef33f,0x3c43c0c1,0x3c88c6e1,0x3d150b38,0x3c8731f8,0x3c3a8fc0,0x3c552e16,0x3c0918a1,0x3c084231,0x3c39b66e,0x3c958ea8,0x3ce9ce53,0x3d2d42bb,0x3cd9919f, -0xbd9401dc,0xbe062a16,0xbe063698,0xbdddf774,0x3c921fa8,0x3c70a2cd,0x3d350884,0x3dcd40aa,0x3d23edeb,0x3cad722d,0x3c9c37de,0x3bfc16e1,0xbbfa0484,0xbcefb638,0xbd865bcd,0xbd664686,0x3c3bf5db,0x3c538016,0x3d075cfe,0x3ba1a1a3,0xbc41b036,0x3c9bb0a4,0xbc3607cb,0x3bf1057a,0x3bec9ec5, -0x3c9f8b6c,0x3bc7d1b8,0x3c28c8ff,0x3ce6359f,0x3d03da68,0x3cf32110,0x3baf6c6d,0xbc952144,0xbc943f38,0xbcc2f688,0xbd0a39d0,0xbb841782,0xbc883293,0x3d020944,0x3ce6b0f5,0x3ce20bf4,0x3ba43ec1,0xbc8f3a7a,0xbcd5371f,0xbd4098f1,0xbd99d8ce,0xbe155f5f,0xbe28c249,0xbe2ad9b8,0xbe1f72ab, -0xbdec4f67,0xbdbcd922,0xbd8fefff,0xbd825b66,0xbcf23677,0xbcb181e2,0xba857608,0x3c6d010b,0x3b89f3a1,0x3c88bfae,0x3c7e8cd3,0x3d08214a,0x3ca5fd80,0x3c817ed5,0x3b3d3141,0x3cf21ef1,0x3cf8269b,0x3ccad736,0x3d1d3835,0x3c9f9f19,0xbab3beca,0x3b9d1a39,0xbd235f62,0xbd592b65,0xbcb5e15d, -0xbdbb22b0,0xbe6664e4,0xbe62f533,0xbe399a40,0xbdc2fa20,0x3c1818dd,0x3d41492f,0x3ce2fc98,0x3bf54363,0xbce620b2,0xbd823f5b,0xbd9d6e73,0xbda44205,0xbd870bdf,0xbd5adc4b,0xbcdfb359,0xbcc414be,0xbcd3b60c,0xbc2ab46e,0xbc5028a4,0xbb7fe29d,0x3c670950,0x3d84a02c,0x3bd585f4,0xbc1edcf1, -0x3a598fcc,0x3b9cf890,0x3c86a0df,0x3d576d45,0x3ae2a8d9,0xbca6c61a,0xbc91fade,0xbd114a8f,0xba816f66,0xbcde9c3e,0xbe1bccdb,0xbe6a7f32,0xbe996620,0xbe68e347,0xbe399b11,0xbdec5e34,0xbe2fc6a7,0xbe265e18,0xbdf4ab46,0xbd6cac06,0xbc919403,0x3bb17d59,0x3c50b45e,0x3bff0bb4,0xbbc009aa, -0x3c3a03df,0x3cad9286,0xba8df909,0xbbbe1c7d,0xbbdaa1bf,0xbbf09f04,0xbba7a5a1,0x3b1b4e24,0x3d1a73e5,0x3c6a8e02,0x3b5d6eb7,0x3caaff41,0x3b09eab7,0x3b8fa06f,0x3cac1e32,0x3c191aff,0xbc054f3d,0x3b5b2d43,0xbc134125,0xbbdacf0e,0xbdf931b8,0xbe44ce2f,0xbe3deb93,0xbe5a43ab,0xbe308201, -0xbe0efc94,0xbdb4dda2,0xbdbb38fe,0xbdcf08c5,0xbe0c05a1,0xbdd4311a,0xbd9b8fee,0xbd7d9388,0xbcd2e6eb,0x367b8f96,0x3c843fab,0xbad279a3,0xbc589194,0xbc7d6cf5,0xbc91ace5,0xbc20bb62,0x3c3238d7,0x3c0e72cc,0x3be52524,0x3bbcfb19,0x3b9d232c,0x3b95b1a1,0xbb2ef643,0xba7a7cda,0xbad75db5, -0xbaecbffc,0xbb9d7fb1,0xbb6f6b62,0x3c0d5bf2,0xbd221c36,0x3cc4650a,0xbd5e35b8,0xbd9b4f41,0xbd8ae5ca,0xbd84749e,0xbc90dd50,0xbbea2bf1,0xbcca2694,0xbc80a61e,0x3b188a8a,0x3cc5c3be,0x3be9f3bf,0xbcb1fe7d,0xbd68d890,0xbd5bf687,0xbd27355a,0xbcc48afe,0xbbcb10ee,0x3b3b7be0,0x3bd8fe48, -0x3aeec06a,0xbbc3d84e,0xbc62ed10,0xbc152682,0x3b718abc,0x3c1bab23,0x3bf771f8,0x3c0585d1,0x3c18dfdc,0x3c6b9afd,0x3c4bce1c,0x3b2ea41b,0x3bbbf7fb,0xbbd7147e,0x3a181300,0xbcf8ce11,0xbd25ce39,0xbd1aa1f0,0xbd02c490,0xbd048fc6,0xbd08a0b9,0xbd0ec0ee,0xbd0e5d14,0xbd046e48,0xbd2a9014, -0xbd64bad4,0xbd88c57e,0xbd3329dd,0xbc812bb3,0x3c39366f,0x3bfd0b9b,0x3a51d58a,0xbc0f5a7e,0xbc852911,0xbc8ecc95,0xbccf6324,0xbc99240d,0xbb0a8cd4,0x3c128dae,0x3c2b7075,0x3c39a998,0x3c0be389,0x3c0e647f,0x3aeb5b90,0xbbd66a24,0xbb02149b,0xbb460a1c,0xbb82aa62,0xbbf2e2ca,0xbc57c0e8, -0xbc4f9bb1,0xbcc5d8bb,0x3c9f36f8,0xbbda3355,0xbbbc28e9,0xbc5a6d59,0xbc84c318,0xbc9ca38e,0xbcae7b6d,0xbcc02131,0xbc93c451,0xbc13624e,0xbbabf6d8,0xbb72b3db,0xbc09beaf,0xbc138ff0,0xbc467cc5,0xbc2e63a8,0xbbe5c3df,0xbba5c9e8,0x3ac954ff,0xbb875d22,0xbc6f5e28,0xbc3255a4,0xbc9cb02b, -0xbc298374,0xbc42d70e,0xbc553bd6,0xbc20a7ca,0xbc6c93bb,0xbc29360e,0xbbedc510,0xbb56fb3c,0x3bb2a9b9,0xb99afd2f,0x3bc909e9,0x3aedf58c,0xba2b36ed,0xbcc24667,0xbb92d229,0xbb7fa3de,0xbbcb77b3,0xbbd21db8,0xbc01cc1c,0xbc179dd3,0xbc40e5d9,0xbc2ed2ba,0xbc3c0500,0xbc2f035d,0xbc2af6b6, -0xbc0f6d88,0xbbfdd216,0xbb9d3bc9,0xbb51daf4,0xbb183304,0xbb185a80,0xbadeef97,0x3b6fe540,0xbcc04644,0xbca589bd,0x3c4408d1,0xbcb72d66,0xbca76677,0x3c827788,0x3c7d8962,0x3c8caf49,0x3c987e2a,0x3c8875d4,0x3c8d333d,0x3c884040,0xbc81ac81,0xbcc24b1d,0x3cb012ad,0xbc6190d5,0xbad5b7bf, -0x3d2364cd,0x3d292da9,0x3d0b46b1,0x3d0673b0,0x3d23abc2,0x3d2f41ef,0x3d51596f,0x3d535b43,0x3d3cb0e2,0x3d39a685,0x3d2f4b85,0x3d1bb350,0x3d1a3c12,0x3d158004,0x3d17070b,0x3d137753,0x3d137916,0x3d10e776,0x3d19149f,0x3d0be29e,0x3d1a82dc,0x3d4214e9,0x3cac133d,0xbd4a8718,0x3d5cf2c8, -0x3cd3c205,0xbd264c55,0xbd2164d7,0xbd20bdcf,0xbd1a9c9f,0xbd10045d,0xbd0916ae,0xbcf7008a,0x3cd7ad34,0x3d5f497f,0xbd2f563b,0x3c8da59c,0xbbd6fd83,0x3cb3586b,0x3cac022c,0x3d11a666,0x3d3bd2c1,0x3da26cf9,0x3db6d098,0x3d99f97a,0x3d92bb19,0x3d76cf7b,0x3d441e05,0x3d44b009,0x3d4585df, -0x3d4915c7,0x3d3e6be2,0x3d392d24,0x3d2bfa95,0x3d3cf70b,0x3d1d3df8,0x3d3727fd,0x3bc7cc2c,0x3ce78ce5,0x3d10efa3,0x3ccbaa20,0x3cc84e82,0x3d274152,0x3d1519a2,0x3d31ec25,0x3d149e26,0x3d2723cd,0x3d103933,0x3cefee17,0x3cfd9693,0x3c8b7264,0x3cbe0504,0x3d0374d3,0x3a7f4764,0xbc2a122c, -0x3b6ebd75,0x3cdeb275,0x3d3c989c,0x3df2a271,0x3e05faa1,0x3dc88541,0x3dc4d2b0,0x3d94932b,0x3d37e43d,0x3d1ee621,0x3d06cd82,0x3d1b5494,0x3d0da49f,0x3d12412c,0x3d087285,0x3d226b20,0x3d171904,0x3cf877c1,0x3d0f5e81,0x3cdb10ab,0x3c8a41d2,0x3ceec63f,0x3ce4ef14,0x3d0d7b27,0x3ca0d491, -0x3cd39500,0x3cb1eaca,0x3c8d3169,0x3c875588,0x3cc3212e,0x3c9d705b,0x3c9cc8f0,0x3c205606,0x3bfe0933,0xbd1ae044,0xbdb32743,0xbd835f21,0xbcefdff9,0x3c8e3a5d,0x3e280d1d,0x3e518b35,0x3e2529e2,0x3e1937bb,0x3de0b397,0x3d7ba65e,0x3d787d61,0x3d8394cb,0x3d89fe71,0x3d732633,0x3d60e257, -0x3d472759,0x3d7c1100,0x3d1b4806,0x3d030176,0x3ccd0873,0x3c3bd535,0x3c31418b,0x3c830f60,0x3c9e465b,0x3ce571bd,0x3c990de6,0x3bf0e000,0x3bd9e2a8,0x3c57e136,0x3c57a6f7,0x3c327416,0x3c426917,0x3c35ca71,0xbc03695c,0xbc002ed7,0xbccddcca,0x3da7cd61,0x3e023c98,0x3dd98a3b,0x3db451e9, -0x3d30879b,0x3c9cf6c9,0x3d05fed8,0xbb3f6492,0xbd02038d,0xbd5ffde8,0xbd9c6bb3,0xbdb0ffd2,0xbdc97ffe,0xbcb41402,0xbc239b77,0xbd7ca8c6,0xbcdad296,0x3b283410,0x3d88088d,0x3d371c0b,0x3cace90b,0x3cbd6016,0x3cabc47e,0x3ca66f47,0x3ccb9f83,0x3c631600,0x3c827e56,0x3cdebb6f,0x3ceb3c3b, -0x3c8e2195,0x38f95c2b,0xba20ac6c,0xbc44c003,0xbc23ad44,0xbce62a4b,0x3d063243,0x3d676cd2,0x3dfa4b03,0x3dfd8a1f,0x3da3cba4,0x3d6af147,0x3d464d6d,0x3d0d2c90,0x3c8b5266,0x3ccbd95c,0x3d61d8dc,0x3d7b6901,0x3d8caa54,0x3dac1c2e,0x3d8952a1,0x3daec296,0x3e05e5bc,0x3dc7eeff,0x3d862140, -0x3d32e97f,0x3c7def07,0x3c9ee9d2,0x3c7bb65c,0x3c9966ac,0x3cb4b60a,0x3d195836,0x3c713caa,0x3c4341cd,0x3c746665,0x3d07a668,0x3d042822,0x3d0cd42e,0x3d134718,0x3d57f0ad,0x3d32b259,0x3d83d203,0xbbe9c7a4,0x3d8428a2,0x3dca2695,0x3d878fd4,0x3dd2261b,0x3e066527,0x3e1b031d,0x3e2333e5, -0x3da55cfa,0x3d89ba17,0x3da6de3f,0x3e03a5c2,0x3e22f4eb,0x3e2613fd,0x3e02ef22,0x3d93764f,0xbb7e9856,0x3b89ec47,0x3c4cc5d5,0x3b8d7b33,0x3c51aaf3,0x3bff5118,0x3caba1d0,0x3caeb543,0x3cbd4d7e,0x3d72470e,0x3c862865,0xb91dd403,0x3b585df2,0x3ba84770,0x3c833ff0,0x3d5149e5,0xbba26c83, -0xbb027909,0xbcfc51a9,0x39caec3a,0xbb083b72,0x3c472113,0x3de3f204,0x3e392b65,0x3e9de70a,0x3e273a9b,0x3d98a361,0x3cb6225b,0x3d001dfe,0x3d336c68,0x3d8c8a16,0x3d9325d1,0x3d9a22d5,0x3d88d093,0x3da697f5,0x3db2e4de,0x3d9a6c13,0x3dbda4c2,0x3d9b2b1b,0x3d0d336a,0x3bec7d33,0x3c57d780, -0x3c4c5762,0x3c8dc9ca,0x3cbe6961,0x3d1f0ffe,0x3c1aff7c,0x3b320293,0x3cbf132a,0x3c2ce9be,0x3c44b87e,0x3d10c028,0x3c20e77f,0x3ce2f4b5,0xb94df927,0x3cc70847,0xbd0d96d4,0x3db48e95,0x3e4627de,0x3e2db16f,0x3e23dc07,0x3dfda794,0x3dfc1481,0x3e0402f4,0x3e0409af,0x3dfec8fa,0x3e0ad162, -0x3da38ee9,0x3d5808cf,0x3d45d1a7,0x3ce87392,0x3c70db0e,0x3c1db0a8,0x3ca2c2df,0x3cc3624e,0x3cd2d433,0x3c597d4e,0x3ccc597b,0x3bee43dc,0x3c4e3086,0x3c8d4b87,0x3ca4246e,0x3ca031b7,0x3c882d03,0x3c0293a2,0x3c51350e,0x3c802cdd,0x3cb36ee8,0x3c533d99,0x3bf2d41e,0xbbb927ad,0x3ceaef48, -0xbd271228,0x3d542c13,0x3db4813f,0x3d715bdc,0x3d22e872,0x3d217ffb,0x3d3273b4,0x3d87df81,0x3c4e9d43,0xbc5ee626,0xbca02c7a,0x3c6fb0be,0x3d08cd72,0x3d14fd23,0x3ce26002,0x3cd7f0cc,0x3cec6ac6,0x3cf38199,0x3d037de8,0x3c7c9db6,0x3b841576,0x3c66d45f,0x3c8cafbc,0x3ce2db27,0x3ca22806, -0x3c14c70c,0x3c37aefc,0x3c3843f2,0x3c52508d,0x3c685e35,0x3c60f562,0x3c8ef78b,0x3c22b8a5,0x3caecafc,0x3cae4677,0x3d2000d0,0x3cadb959,0x3cabc7f0,0x3ccf5c5d,0x3caa4633,0x3cc5660f,0x3d15d504,0x3d4502e1,0x3d87f744,0x3d78fb25,0x3d70835a,0x3d389045,0x3cdeee6e,0x3c0f9d1a,0xbbb727e5, -0xbb64af8b,0xbb9831da,0xbc039e90,0xbb6d2aa0,0x3bc55bea,0x3c5615e6,0x3ba2df79,0x3b5d7443,0x3b3dd7ec,0x3bf14235,0x3bf0c3c7,0x3c89de5a,0x3c0c2222,0x3c8cc364,0x3c1969ba,0x3c8a5423,0x3c6e4929,0x3cc2a6c8,0x3cc6337d,0x3cb10331,0x3c89dc77,0x3cb3a0c2,0xbc7cf28c,0x3cec8f63,0x3cfffaa0, -0x3d22c321,0x3d3444d2,0x3d484607,0x3d5648ad,0x3d680665,0x3d350a1e,0x3d0af7c7,0x3ce345bc,0x3cbb5313,0x3ca1110e,0x3c5a4f88,0x3c7dcb0a,0x3c85ea25,0x3c8ecb06,0x3ca217cf,0x3c886829,0x3cb8b784,0x3b4b4427,0x3cc547b1,0x3cf2d234,0x3caa3cdc,0x3cb8f9a9,0x3d08d32e,0x3cf8cfa5,0x3d08237a, -0x3cc2f226,0x3cdc2b82,0x3caeda6e,0x3c5645cf,0x3c69061e,0x3be7af45,0x3c571031,0x3cb4ff1d,0x3d1c727e,0x3d26b6e5,0x3d12aebc,0x3d23cdac,0x3d2ac727,0x3d33b6c1,0x3d3b5058,0x3d4d572e,0x3d3bac78,0x3d32056a,0x3d21ff18,0x3d109694,0x3cfc9150,0x3cd1082f,0x3ce04185,0x3ce6ecb8,0x3cebeb22, -0x3cf35209,0x3cec8d92,0x3d087604,0x3d11e4b3,0x3c8c7167,0xbce9696f,0x3d33da64,0x3cab3c9f,0xbcd94e82,0xbcd25e00,0xbcccfea4,0xbcbaca82,0xbcb9377e,0xbcb03438,0xbcadc2d1,0x3c7a5869,0x3d2c5a0e,0xbce48e6a,0x3c5caac8,0x3d3ba765,0xbd5ad131,0xbcd8d1d5,0xbd8065ca,0xbd3dd23c,0xbd5bb311, -0xbd603149,0xbd846483,0xbd87850d,0xbd7b564e,0xbd7b7e4d,0xbd742a60,0xbd690fa2,0xbd625751,0xbd5d1182,0xbd5919de,0xbd58809c,0xbd57635d,0xbd57eb09,0xbd55d360,0xbd3c9152,0xbd8019bc,0xbcca3c34,0x3c918c2a,0x3db01566,0xbd163466,0x3c7838f8,0x3da878c5,0x3da60063,0x3da2b093,0x3d938c50, -0x3d9b7a20,0x3d9b72f4,0x3d96b4ce,0x3c4bdbac,0xbd3627f4,0x3da0249a,0x3c905ed3,0x3c9c1cc0,0xbd753cfd,0xbd4328d8,0xbd4f657a,0xbd5c4c70,0xbda684d8,0xbdbfd13f,0xbdac14d6,0xbdb530db,0xbda7dd5d,0xbd969c4c,0xbd886c73,0xbd80614a,0xbd7cf969,0xbd80719f,0xbd7f35e1,0xbd80e907,0xbd6ad190, -0xbd5d9480,0xbd67cbaf,0x3cf27deb,0xbcd5328b,0xbcd6aa1b,0xbc17f386,0xbabdc1f7,0xbcbfe433,0xbcda08d7,0xbd02f376,0xbc86da4b,0xbd0c3a37,0xbd13cc51,0xbc8754e7,0xbcd3f357,0xbbe907c0,0xbc802815,0xbd4e0292,0xbd344672,0xbd68dbfa,0xbd612cf6,0xbd880bbc,0xbd9da653,0xbe01012a,0xbe135d0e, -0xbdf63a25,0xbe04c351,0xbdf4ccc3,0xbdcff96f,0xbdb7c5b2,0xbda2234f,0xbd99b2d7,0xbd96091b,0xbd923eaa,0xbd92f557,0xbd73fa35,0xbd765e49,0xbd167ef9,0xbc7990cf,0xbc5caa90,0xbc707495,0xbbd70cd1,0x3c401bc9,0xbc05b789,0x3c63975f,0xbc83b0d3,0x3bb75419,0xbbfe1c82,0x3c03dd61,0xba690cf1, -0x38b106f6,0xbc140758,0xbc453cca,0xbd28103b,0xbd93bf3d,0xbd879ce6,0xbd2a9249,0xbd368156,0xbd3c0dde,0xbdfc0fb6,0xbe305cff,0xbe1d7f68,0xbe337cd5,0xbe20c141,0xbe029e9c,0xbdd5397f,0xbdc13b2e,0xbdbc6001,0xbdc03637,0xbdb435c5,0xbdaed9b1,0xbd8aae3f,0xbd6787a1,0xbd339034,0x3aba039d, -0xbc9a7e66,0xbb0be4a9,0x3a6f0532,0x3c52029d,0x3c8a78e3,0x3c42c319,0x3c50ccae,0x3b6b79c5,0x3c3dcc3c,0x3b88a2d4,0x3b192fb4,0xbb9d25be,0xbca2b385,0xbcdf7b0d,0xbd8f8763,0xbbd29886,0xbd50a3c3,0xbd74c031,0xbda36e63,0xbe1b9d78,0xbe4297e9,0xbe425bb5,0xbdf967f6,0xbe088548,0xbe133f90, -0xbe288ff2,0xbe095123,0xbdc10e16,0xbd3468d5,0xbd4acaec,0xbd6a34e7,0xbd995203,0xbd573ffb,0xbd822325,0xbd604d29,0xbb368a0c,0xbcc249dd,0xbb794814,0xbac38845,0x3bc10a69,0x3cb65f3d,0x3c476360,0x3c3813a6,0x3c69c193,0x3c1779c7,0x3c080798,0x3c06fb12,0xbb8fd0c7,0xbc25302b,0xbc7adee3, -0xbcec5b2f,0x3d841718,0x3d9a05e4,0x3dadad9c,0x3d5ee834,0x3c8d33e3,0xbd6edcdb,0xbd86539e,0x3c54c3ec,0xbc39a570,0x3bcd1f2a,0x3cce17a0,0x3c97c8aa,0xbaf8d8ed,0xbcd4861b,0xbd16d79d,0xbd63a9d4,0xbdc506a1,0xbdb1618d,0xbdbd671b,0xbd0d872a,0x3aac09c6,0xbc382883,0xbbfbd9af,0xbbbd85fa, -0x3a35fbb5,0x3cc670c9,0x3c0f3c03,0x3bb7d9f3,0x3c13a0b9,0x3c7d63eb,0x3c8ee852,0x3cbd7020,0x3ccdd38c,0x3c9fe227,0x3d2ab206,0x3d13c6c5,0x3d690d5f,0xbb12fb74,0xbc0f961a,0xb9ec1a30,0xbda9da33,0xbe019404,0xbe356a7c,0xbe113c8b,0xbdd7d2f0,0xbdb8db19,0xbdfd3060,0xbe1e463a,0xbe2a4719, -0xbe1d987c,0xbdd653ec,0xbd778ee6,0xbcf4ec56,0xbc3a5cb4,0xbc84f25b,0xbcb1f2c8,0xbc2ea79b,0xbb9594da,0x3c1f43a6,0xbacbf2ce,0x3bfb41ea,0x3d365d4d,0x3c6087d3,0xbae94c6e,0x3bb860dd,0x39244b29,0x3c53cfa2,0x3d48345c,0x3cef427e,0x3cc22fc1,0x3cc923ed,0x3cafd9f2,0x3cdb7779,0x3cbbdf1c, -0xbcbf73de,0xbd82e721,0xbe37556b,0xbe149e3b,0xbdb84389,0xbbb319a1,0x3c39d495,0x3cf1af1b,0x3c9faf87,0x3be4363d,0xbbc99deb,0xbc1e6c16,0xbd215b06,0xbd4c8d89,0xbd32f0db,0xbd300983,0xbd01c6d0,0x3b283653,0x3d07b732,0x3c92868d,0x3cbc3476,0x3ce3b03d,0x3caf5b72,0x3cda317a,0x3ae4c7ca, -0xbb6a5d0e,0x3c4d47b4,0x3b2937cb,0x3bd9e026,0x3c1c07bc,0x3c68c6f4,0x3be0b3bb,0x3c883def,0x3b3d94f7,0x3d7e64a4,0xbcad103b,0xbe0f05b2,0xbe039e6e,0xbdcff6c3,0xbdfa1195,0xbdfec9cf,0xbdbc11b6,0xbda99926,0xbd87f163,0xbd7a51a7,0xbd062dd3,0xbd04564c,0xbd382f33,0xbc5c6d7c,0xbb44ec2a, -0xbc73af77,0x3c863163,0x3b872f31,0xbc1b2891,0x3c078f6c,0xbc551045,0x39193fe1,0x3bdb11eb,0x3c080ea8,0x3c0a7f84,0x3c74ba97,0x3be06bed,0x3b90ad3c,0x3b4a78b3,0x3c58ac06,0x3cc26623,0x3ca75794,0x3c8e8eaa,0x3cca8849,0x3add1bb2,0x3da13451,0xbb279617,0xbd1128fb,0xbcd13fc5,0xbd78bc5e, -0xbd8b29c6,0xbd91ee4d,0xbd8425bd,0xbd04a5ca,0xbc23f0c7,0x3b0bec73,0xbba41210,0xbc18e14e,0xbc48f951,0xbd03a535,0xbd217deb,0xbce97927,0xbcacd6e4,0xbc8b568c,0x3c276568,0x3c909b21,0x3b3d143b,0x3c4e3603,0x3b8cf96a,0x3b9b99ff,0x3b267647,0xba28b6b4,0x3b5b4ace,0xbac2193b,0xbba626cb, -0xbb998a93,0x3bffbc09,0x3b9e0723,0x3aba104f,0x3c3ada9a,0x3bc4d068,0x3b434e2d,0xbbbce871,0xbce6c128,0xbd16cdda,0xbd5b784c,0xbd3695f7,0xbd2b0455,0xbd214d71,0xbd11a170,0xbd01d2db,0xbcba2798,0xbca384d1,0xbc905110,0xbc55e510,0xbc60d3df,0xbc3c2fc7,0xbc154405,0xbc1a52bc,0xbc84d874, -0xbc6f9f30,0xbb58151c,0x3a1140d5,0xba9a257e,0xbb121bcd,0x3c202d55,0x3b346895,0x3c85ae48,0xbbc69d73,0x3c769206,0x3be87df3,0x3cc86d46,0x3c9dfc4f,0x3caff8db,0x3cc7a9b2,0x3d01181f,0x3c301709,0x3d0b7d45,0xbcd22a67,0xbccc74cc,0xbcc07da7,0xbcc6d823,0xbcddd80f,0xbcf5a7ac,0xbd03e62d, -0xbce7456b,0xbccbb972,0xbcb9b629,0xbc953653,0xbc587146,0xbc0970b1,0xbbf3c25f,0xbbe6ae4e,0xbc00216e,0xbc09ee08,0xbbee37c8,0xbc2eba97,0x3cabf7a7,0xbc332794,0xbc5c0307,0xbbb0d636,0xbbacbf4f,0xbcab2cc6,0xbcc8561c,0xbcc01f16,0xbc2641d3,0xbcd22325,0xbcef84d7,0xbc924a38,0xbca5c516, -0xbbc76b9d,0xbc03618f,0xbcbe8538,0xb82d254c,0xbd05cfa7,0xbca44519,0xbcbe2ea3,0xbcbb7fac,0xbcbe69f2,0xbcbf3fda,0xbcca7a3e,0xbcb3f530,0xbca371b3,0xbc9105ed,0xbc832189,0xbc702373,0xbc490ee6,0xbc6ff366,0xbc820f6a,0xbc86a45d,0xbc8f6aa0,0xbc84edb0,0xbcd0ad6c,0xba3f25d0,0x3ce00023, -0x3d9068ad,0xbc4858d3,0x3ccdfb31,0x3d96679d,0x3d954088,0x3d8e8b60,0x3d7f8349,0x3d859567,0x3d82805b,0x3d756ad7,0x3ccecfa3,0xbc77aa48,0x3d87fab1,0x3d00624a,0xbcbb7d50,0x3ceb2565,0xbc939488,0x3d35a398,0x3ca5c333,0x3cc08430,0x3ca32ac2,0x3cd7cf1a,0x3ce9af79,0x3cdc5e78,0x3cf90422, -0x3cf7f220,0x3ce0705e,0x3ceb903a,0x3cee04ae,0x3cf35c8f,0x3cf36c5a,0x3cf7e4c1,0x3d0113ca,0x3cff282d,0x3cd4e31b,0x3d3962b1,0xbc850143,0xbd5b9cc8,0xbdb60ab5,0x3ab53f23,0xbd45f576,0xbdaa24ee,0xbdadd591,0xbdad3cae,0xbd9d19f5,0xbdae4704,0xbdaff245,0xbda8ab2d,0xbd4649f5,0x3bfb48c7, -0xbdb0d19f,0xbd76cc76,0xbd90d894,0x3cfc3da1,0x3ccd6ff1,0x3c98a4c2,0x3c2ef15a,0x3c8e662d,0x3c9f1625,0x3c914ab9,0x3d0c2f74,0x3d1b4795,0x3cf0229c,0x3cf7ac5f,0x3cff5479,0x3d140633,0x3d1ec7f4,0x3d23790e,0x3d2dd323,0x3d1812bb,0x3d20e8f7,0x3d01c1c8,0xbd654bdb,0x3bb925e0,0xbab27ec0, -0xb8ced234,0xbbc6b018,0x3c0f8684,0x3c670d4c,0x3c44ce35,0xbbbb402b,0x3c5bfd99,0x3cb059e8,0x3bb17be4,0x3c3addad,0xbc334130,0xbc607a78,0x3c8c3092,0xbcd37b7a,0x3c928623,0x3cee3fea,0x3c06b8fd,0xb9f1c618,0x3c41bebb,0x3cae9f68,0x3c69b0c9,0x3d2beb9f,0x3d40bdb4,0x3d05e009,0x3d210dab, -0x3d20897c,0x3d363058,0x3d327c6e,0x3d399c32,0x3d61be62,0x3d2eaebc,0x3d582c26,0x3c98ef37,0xbc5f09e3,0xba90e783,0x3b1a1494,0x3c7e4f58,0xba1c5074,0x3c7bc8d3,0xbb8831ac,0x3cdbe9be,0xbbdd242a,0x3c63fbd4,0xbc140792,0x3bd4c297,0xba2a9385,0xbb9fc29d,0xbc93bb0e,0xbbbc73e3,0xbd0eecde, -0x3cf931b7,0x3d3c6a39,0x3caea91f,0xbc3f39dc,0xbc7cd436,0xbc84bd93,0xbc845e6b,0x3d2cb8f2,0x3d81eaa7,0x3d249393,0x3d26a66a,0x3d32659f,0x3d766ec1,0x3d81c33d,0x3d867ac5,0x3d978a3e,0x3d681549,0x3d6b2795,0x3cea8a28,0xbc9d8dcd,0x3c9cfd64,0xbc168de9,0x3cdaac1b,0x3cf08d1e,0x3cea29e3, -0x3cab45d0,0x3c2c757c,0x3cc969a9,0x3c3d285d,0x3c7a0bf3,0x3c8e80fa,0x3c9cbddc,0x3b8d22ba,0x3baf765c,0x3bf90a8c,0xbcb87629,0x3d45c32d,0x3d9c2a18,0x3ce2bd03,0xbbeca2fa,0x3beef218,0x3cdf08c7,0x3d1a2b8f,0x3c1460bb,0xbae77c69,0xbc024303,0x3aa0a823,0xbba02ef8,0xbc9b1fa3,0xbc34003a, -0x3bdcc935,0x3d036d2b,0x3d2135da,0x3d7373f1,0x3c90ca5c,0xbcec08e9,0x3c804c21,0x3bbfd3e1,0x3c6c8330,0x3c3b70f5,0x3c900277,0x3cabf93b,0x3c98329f,0x3c5135a0,0x3c92ada6,0x3c9d90b8,0x3be06c41,0xbac2ca5f,0xbca2d702,0xbc9948be,0xbca34ade,0x3dafe22d,0x3da9b1cd,0x3d59e04e,0x3d5f6a05, -0x3dd09b52,0xbcd09129,0xbdcf8259,0xbda95d6a,0xbd844685,0xbd5bf84f,0xbda632ad,0xbd7d5337,0xbcf77a3a,0x3bfd2dc0,0x3d57a3bc,0x3d8fd2f1,0x3d8f01e2,0x3d451df5,0x3d252a0b,0xbc8e348f,0xbd28f6cd,0xbcaf9b36,0xbc803060,0x3c545f10,0x3c8e69e4,0x3cadeefd,0x3c637192,0x3be74a3f,0x3ba9fe13, -0x3c7b15ba,0x3c8b254d,0x3d2ce5d7,0x3c7ac10d,0x3d18c17a,0x3d7f7e7a,0x3db3c82a,0xbd21180f,0xbcf8677a,0xbc7192dd,0x3c2d856c,0x3d9507b1,0x3dc254b3,0x3e229680,0x3e3e57a5,0x3e2ace71,0x3dddc99a,0x3d3aa965,0x3ce0034c,0x3c32b53b,0x3bc32530,0xbc525b46,0xbcffe494,0xbd1db2c9,0xbd2d85a4, -0xbc42e02d,0x3c48bed4,0x3c5df874,0x3caaa592,0xbbab932a,0x3c9b8c26,0x3cccde4d,0x3cea1056,0x3c89ba3d,0x3bd5a6df,0x3c655344,0x3afa3951,0x3c68dead,0x3d3b54ea,0x3d1218a4,0x3cdadc88,0xbc25cedb,0xbce65269,0xbc857748,0xbd0f8fb3,0xbc306435,0x3b71214f,0x3d920097,0x3d649885,0x3d20e430, -0x3d0c5961,0x3cbfa823,0x3cf6adb9,0x3d30f63b,0x3d177b7d,0x3c955e17,0xbb0faae6,0x3c83e4f7,0x3ce6a699,0x3ce1701a,0x3cb543bd,0x3c884979,0x3add2dce,0xbc317456,0x3b7997e4,0x3c52ea02,0x3cad3208,0x3c94b2c2,0x3c86fe66,0x3c468a0f,0x3b806483,0x3c701f42,0x3c00ccca,0x3c49eac5,0x3ca33b3a, -0x3c6a0e21,0x3cb0b581,0x3c19da25,0x3c0256e8,0xbd667af3,0xbca72930,0x3d34301d,0x3d08fc86,0x3d39619f,0x3d3af84e,0x3d5583dd,0x3d69be8a,0x3ce61502,0x3cba6c6d,0x3d08b942,0x3cf52ed0,0x3d0dd0b4,0x3ce3e3c2,0x3c0c535e,0xbb47ce68,0xbbe78d6c,0xbc332f66,0xbb81f9c2,0xbc3fbc53,0xbc49ad06, -0xbb11fc86,0xbb80683e,0x3a21edab,0x3bc0dee1,0x3c831284,0x3c2a71c4,0x3c453b6b,0x3b3828a4,0x3c1dbb1b,0x3c0b6a67,0x3c26ab98,0x3accc51c,0xbb9a9716,0xbc82f93e,0xbca56f37,0xbd4aa44b,0xbccdef57,0x3c2d880f,0x3c0eaece,0x3ce947bb,0x3cff2479,0x3d42a9e6,0x3da48b22,0x3d767284,0x3d3b9efc, -0x3cb1e232,0x3cbe1996,0x3cba1e65,0x3cdd0134,0x3d041596,0x3d05cc0b,0x3d015027,0x3ced9388,0x3c94c6ce,0xbc2c5fbf,0xbbcfe79c,0x3a156e7b,0xbc1cc8c4,0x3b0b4637,0x3c49bf72,0x3c9262c9,0x3c4aa4c1,0x3bffc0f1,0x3c8ff68a,0x3c1857ce,0x3bedaf8d,0x3bf6c627,0x3b7fa6ee,0x3b2d7fac,0xbbf67a06, -0xbbdaf6c6,0x3bf1709e,0x3ce37bfb,0x3d1ae95e,0x3cd22081,0x3cc4254e,0x3cee41af,0x3d088514,0x3d1cae40,0x3cc256cd,0x3c8fdb5b,0x3c29ab48,0x3c34c0ba,0x3c1f9333,0x3bf2cfab,0x3bed1e82,0x3bd016b5,0x3c1edd9b,0x3c531cf8,0x3ceb86f7,0x3cafeaaf,0x3a91fee8,0x3bde5211,0x3c2675dd,0x3c090210, -0xbb60f84a,0x392df002,0xbbf8bcee,0x3c61e55a,0xbbf4d820,0x3c61045d,0x3b948baf,0x3c873fef,0x3c07ee33,0x3b5d5bce,0xbbe9db18,0x3be713dc,0xbd327a72,0x3b9d8e03,0x3c773493,0x3cb11218,0x3cfe78ad,0x3d21055d,0x3d3e9c21,0x3d639513,0x3d48c940,0x3d2c1e80,0x3d08348a,0x3cb42d5c,0x3c32ee13, -0xba0ef39f,0x3b52244c,0x3bb71fd6,0x3bf5988e,0x3be2624c,0x3bfa6756,0x3c30f3fa,0xbca913e8,0x3b8dd05f,0xb9c138f5,0xbb7a8180,0xbbf70026,0x3b74de32,0x3bf950d1,0x3887340f,0xbc6866f0,0xba9c77df,0x39da4950,0xbc3f35d5,0xbc030394,0xbc89afa6,0xbc7ae5bc,0x3b008d89,0xbc322f50,0x3cf8aa1f, -0x3cb8694e,0x3cd87b5a,0x3cea0d05,0x3cf5a35f,0x3d0282b1,0x3d12e651,0x3d00ec21,0x3cf232d3,0x3ce5ac93,0x3cdd4ef8,0x3cd6a37c,0x3cbd44c1,0x3cc67d0a,0x3cc27355,0x3cc48824,0x3ccc2087,0x3cc0b53d,0x3d061bbd,0xbba7c6f9,0xbcef56df,0xbd3e8364,0x3b44360b,0xbcf7d36b,0xbd553a82,0xbd5cae0e, -0xbd5075b4,0xbd3395ff,0xbd49f9fd,0xbd45dd31,0xbd3c7b20,0xbd04d89c,0x3a766249,0xbd37343a,0xbd134e5f,0x3ce947b2,0xbcb39f7d,0x3cff1b60,0xbd050546,0xbc736632,0xbc7f9cfb,0xbc7d0e0b,0xbca59cbe,0xbcc6a117,0xbcfb59f7,0xbccf1ade,0xbcc9c1b8,0xbce52d54,0xbcc9f877,0xbcc1b404,0xbcb41f91, -0xbcc1ecd3,0xbcc21590,0xbcc08a22,0xbcbd4953,0xbca33e5e,0xbd0f6a81,0x3cf34862,0x3d57a17c,0x3d4b3d3b,0x3c9c9f17,0x3d572685,0x3d4a3440,0x3d5a815b,0x3d5abebf,0x3d3d9843,0x3d63b45d,0x3d685b12,0x3d64c6fd,0x3d52999e,0x3c672f7f,0x3d41747e,0x3d672b95,0x3d4b453d,0xbbad0bc8,0xbbfa5ee7, -0xbb3b2977,0xbc22ece1,0xbca69204,0xbcd48b0d,0xbd2697a5,0xbcfc5937,0xbd06bdcc,0xbd2f1992,0xbd1286c7,0xbd093338,0xbced6a22,0xbd0bc290,0xbd09a29e,0xbd03777a,0xbcd6576d,0xbcf92865,0xbc6d3a13,0x3d35adf2,0xbaa0d1cd,0x3c5f0384,0x3c2c9fb7,0x3c912d43,0x3be81c2c,0x3aed8197,0x3be834b3, -0x3cb64e44,0x3a8ab087,0xbc0bb5d5,0x3c20a3b2,0x3bfdba12,0x3cc0566f,0x3cd3e856,0xbb510de6,0x3d07c6b1,0x3bef6b22,0x3c1c522d,0x3ccec3d5,0x3c86f9f2,0xbc847881,0xbd042b97,0xbd885194,0xbd183bfa,0xbd0e24a8,0xbd5f90de,0xbd1fa5cc,0xbd0dbd0d,0xbccdc41c,0xbd0eb34d,0xbd0acc65,0xbd0da06f, -0xbce54b24,0xbd211a7f,0xbb113da1,0x3cb1882d,0x3c12fac5,0x3c3e2fd1,0x3c37f7eb,0x3cd96ac6,0x3ba93345,0x3cc0d80a,0xbbc02d0f,0x3cee7670,0xbb6c29e7,0x3ca8b215,0x3c8ea3a2,0x3ca242d2,0x3ca4e4fa,0x3d008f5b,0x3ca5080b,0x3d54107d,0x3d242581,0x3d5fc6cb,0x3d8af95c,0x3d0fced9,0xbbc18d82, -0xbcc46f56,0xbd922b4f,0xbd1e87d1,0xbd3b18cd,0xbda02a0c,0xbd6b5143,0xbd43e619,0xbd0c44cd,0xbd581af9,0xbd5b4da0,0xbd402993,0xbd15f350,0xbd29f0f8,0xbbbc4375,0x3c9caba1,0xbc7fdd3c,0x3c7cc598,0x3bf65486,0x3c386657,0x3c24a8ab,0x3c480a49,0x3c3d14a6,0x3b855ab7,0x3bf5e8b7,0x3b2b15a0, -0x3c92135e,0x3cca6934,0x3d110d30,0x3d1a8f45,0x3d00618d,0x3d691f2d,0xbc979e95,0xbdc4c006,0xbd953b50,0xbd513421,0xbd86aeef,0xbd74d16d,0xbd9e9c91,0xbd4b1f55,0xbcfe6ebc,0xbd1af573,0xbccce173,0xbc64bc8e,0x3c8ab838,0x3cfe11ef,0x3cfc4c79,0xbb5b7ad4,0xbbab916d,0xbce19c8f,0x3b3bcffb, -0x3cc6c6bc,0xbc351bfd,0x3c4ee549,0x3c776a1d,0x3c9a930e,0x3c6ed605,0x3c99506d,0x3c98ce97,0x3c3cb787,0x3cef89f9,0x3cd42099,0x3bcbecff,0x3bf4c706,0x3cbc6318,0x3c9a712e,0x3d190ff5,0x3d514ed4,0x3c362144,0xba0853bc,0x3d045668,0x3d7b2dfe,0x3c66ed17,0xbbd52247,0xbd11097c,0xbc351d20, -0xbc882cbe,0xbd15ca6e,0xbc83be96,0xbbe4df18,0xbb868859,0xbd144f35,0xbd54353d,0xbd80e153,0xbc9f2508,0xbcaf19bb,0xbbc985c0,0x3c1c7950,0x3a925dc9,0x3b84f8ee,0x3b7458d6,0x3c0225cf,0x3c8101b8,0x3c3cd7c3,0x3bbbf2d3,0x3b626835,0x3c0a00e3,0x3c9f71d0,0x3d29f47e,0x3cea8f60,0x3c9e3a9a, -0x3d302572,0x3cc81a42,0xbc8f3a1d,0x3b8ff1c3,0x3c4515db,0x3cd5f6af,0x3d8e60a0,0x3d3d77b3,0x3d5abdfb,0x3cbcb3fd,0xbbe24d53,0xbc79a10c,0xbc275e11,0xbcc1fdb0,0xbd30c586,0xbd77b5ab,0xbd9625ba,0xbd6e4d3a,0xbcfc843f,0xbd0016f9,0xbd41ea9a,0xbca0beb0,0xbbabc8f5,0xbc198545,0x3b20cc60, -0x3ce8493e,0x3cda94e4,0x3c0aa973,0x3bc9ad2e,0xbb764d50,0x3be214c1,0xbbcb8ccf,0x3bf6f189,0x3d2c57a5,0x3d28bf3c,0x3cc5376b,0xba799e49,0xbc059528,0x3c78a62c,0x3d294f39,0x3d5a1280,0x3d802d0a,0x3d5c33c9,0x3ce055ba,0x3d0a1d0c,0x3d371533,0x3dfb149a,0x3e227a49,0x3e19e0cf,0x3df50e04, -0x3dc38760,0x3dab9704,0x3d3066a4,0x3c93a07d,0xb9dfc6d0,0xbc20515d,0xbcab944d,0xbc29377d,0x3b98065d,0xbb0d3c96,0xbbf96cea,0x3ca6f63e,0x3ca698e1,0x3bd23f3a,0x3c4f7c48,0x3c82936f,0x3ca6cc65,0x3c924de7,0x3c77076c,0x3ad2427b,0x3bc4af0d,0x3c43a236,0x3c588c81,0x3c456ecb,0x3d407e97, -0x3d8c08df,0x3d8065bc,0x3d7644fb,0x3cc72e53,0xbbda1be4,0xbbe098fc,0x3cb6add4,0x3d2f8bcd,0x3d745156,0x3d9a0c47,0x3da51426,0x3d9f84dc,0x3da0965d,0x3d4435c8,0x3d09bed9,0x3c9e8c55,0x3bea9a51,0xba427d8a,0xbbb4fb4d,0x3b35a8d8,0xbb89bb49,0xbb2893ce,0xbaa95e3f,0x3b0ada33,0x3c1eeff2, -0x3c01df55,0x3b2b7849,0x3c61af46,0x3bbb80a6,0x3c91ba7d,0x3d056ce4,0x3cfa7aca,0x3cd1abbd,0x3c9904c5,0x3d1f8343,0x3cf505c3,0x3d2a6c7f,0x3c2888af,0x3baecf1a,0xbb08144b,0xbc90f271,0xbcbaa32b,0xbc7d1e23,0x3c4fc0a5,0x3ca1442c,0x3be27b33,0x3c0726d0,0x3c7a5240,0x3ce231ac,0x3d2445d0, -0x3d08beef,0x3c2951c7,0xba0bdf0c,0xbb5e289b,0x3bb3b8ee,0x3c0380ac,0x3c62d252,0x3cc5243e,0x3c654210,0x3c166471,0x3c9ee6c0,0x3c54595a,0x3c255969,0xbb63c7cd,0x3b199d20,0x3b8f89af,0x3b685fe3,0x3b53e3da,0x3c012675,0x3c12428d,0x3cb9a84d,0x3cf25112,0x3bdf5690,0xbbe00791,0x3b6e18ee, -0x3aefee13,0x3c2939a1,0x3c790027,0x3c802433,0x3c9bb276,0x3cad4da1,0x3cca0e98,0x3c8fddbf,0x3c249e3e,0x3aeee041,0xbb020140,0xbb52cda2,0xbbb23852,0x3bb68d48,0x3bbddebb,0x3caf8b45,0x3ce81f6b,0x3c8f1549,0x3c2ffd1b,0x3bffc05e,0x3bf82aee,0x3b1cc5ba,0x3c274df3,0x3c2d57e8,0x3cdd8cf9, -0x3c5baf02,0x3c90f9f4,0x3c3e17b0,0x3c795ad1,0x3cb0a85a,0x3ce0bceb,0x3ca5c9b4,0x3cc6b343,0x3c327946,0x3bf62a62,0x3c37630a,0x3c0fc57b,0x3c111a8a,0x3c009245,0x3c1e70bf,0x3c40ccf5,0x3c603463,0x3c84e523,0x3c9030b8,0x3ca6b1d2,0x3cb8fd4c,0x3cb01e77,0x3ca5ff20,0x3c8cbf5a,0x3c817184, -0x3c4be6f2,0x3c3950fc,0x3c8e7f71,0x3c47ff40,0x3caa5cb7,0x3ca7e05b,0x3cc436c7,0x3cbc8eaf,0x3c7a1d2c,0x3c92feb5,0x3ca3b337,0x3c0ac874,0x3abd7a94,0x3af08833,0x3b659900,0x3bf2207c,0x3c37cfc1,0x3b5eef2f,0x3d109a5f,0xba61e811,0x3b8cb509,0x3b7b239e,0x3b877a15,0x3b935039,0x3b95ee0c, -0x3b7d716d,0x3b925d33,0x3b9f4cd0,0x3ba59694,0x3bce5dcc,0x3be80aca,0x3c0739c7,0x3bfa49e4,0x3bfd2df7,0x3c02f68a,0x3bf95d39,0x3bf77056,0x3b23e547,0x3d127946,0x3d3eff65,0x3d030894,0x3cfd3863,0x3d44bebf,0x3d1546de,0x3d1658ee,0x3d0cd5b0,0x3cf3db34,0x3d0aba1f,0x3d083eb2,0x3d00e722, -0x3d33ddff,0x3cea5126,0x3ce2219b,0x3d3a05d3,0x3b88865a,0xbcb9756a,0xbd6a4d97,0xbc8d900b,0xbcc30a0f,0xbce91414,0xbd06af4a,0xbd02caea,0xbcf5f067,0xbce89475,0xbcbef86a,0xbcaf7d00,0xbcaada5b,0xbcb08a6d,0xbcacad78,0xbca410e2,0xbc9acb02,0xbc97a7bc,0xbc963991,0xbc99f21e,0xbc975595, -0xbc3635d3,0xbd65282c,0xbd61a848,0xbc45b345,0xbd4d85d0,0xbd617f16,0xbc8075a9,0xbc9f4d9f,0xbca25f83,0xbc85336f,0xbccb1622,0xbcd48b16,0xbcc5947d,0xbd5e4780,0xbd4a7528,0xbc3c0df5,0xbd651fee,0xbcf29ad4,0xbd113c24,0xbd08f1b0,0xbd425ca5,0xbd65223d,0xbd6c04b1,0xbd647e26,0xbd545daf, -0xbd1f037e,0xbcf3edb8,0xbcd696fc,0xbcce41ae,0xbcc52500,0xbcb94085,0xbca521c5,0xbca43faa,0xbc9f8b51,0xbcbb9715,0xbc6cc472,0xbccf12a8,0xbd1e72d4,0xbcb58e85,0xbd095bd4,0xbca864aa,0xbcb2069b,0xbcd94711,0xbca89c21,0xbcfa3945,0xbd1c689c,0xbcf49d24,0xbca0c59a,0xbca0e9fe,0xbcaca3cf, -0xbcc1de43,0xbcd29089,0xbcc3fcfb,0xbd046e4f,0xbcf440e3,0xbd381604,0xbd85180a,0xbdbb9fe1,0xbdb7bf7a,0xbda336f6,0xbd85a9b9,0xbd396c8b,0xbd06a216,0xbce5bac4,0xbcf4ae45,0xbcd6a3d1,0xbcbf168e,0xbc6e7867,0xbc49a994,0xbc394425,0xbc52e657,0xbb3dafe3,0xbc932f09,0xbd1234a5,0xbcac8245, -0xbc715f11,0xbc20efbc,0xbc73a464,0xbc10d7bd,0xbc177b5a,0x3b0123f3,0xbca67ef1,0xbb864468,0xbc8caef8,0xbbf0daab,0xbc265247,0xbc25d7ca,0xbc32684e,0xbce4acaa,0x3bf3b601,0xbcd923a9,0xbd8c0585,0xbdce0ffe,0xbe06e5b4,0xbe0c16c8,0xbe01393e,0xbde1c740,0xbda55290,0xbd4eb36e,0xbd070069, -0xbd0525d8,0xbcf54463,0xbcee2a2b,0xbc82811f,0xbc5ec26f,0xbc6b6865,0xbc937cd3,0x3b205404,0xbb967186,0xbca994f6,0x3c47ecec,0xbb2c8cfd,0x3c787af4,0x3cac2537,0x3cc7daaa,0x3c96af62,0x3c51b201,0x3c7560fd,0x3b43d8f3,0x3c0601a7,0x3c902862,0x3ca5e519,0x3c9fe87f,0x3ce2dc89,0x3bd441e3, -0xbe06b4e6,0xbddccf44,0xbdc296ff,0xbd96b330,0xbcca374e,0xbd50786d,0xbd58ffee,0xbd2e1fea,0xbc4de84b,0xbb2ff69d,0x3be5f7ce,0x3c97400c,0x3cb36f18,0x3c9a4478,0xbc67a668,0xbbedfdbd,0x3d350507,0x3cc589bb,0x3cd02d7b,0xbc442a78,0xbce7ee6a,0x3bb13b37,0xbba4f978,0x3c3b94ed,0x3beb6108, -0x3b34ec28,0x3c932a09,0x3ca1b293,0x3c4d03cc,0x3ca36b00,0x3c03f578,0xbcbb07a3,0xbc81abe5,0xbcd382f2,0xbd3cf8d0,0xbdce1f90,0x3c1906e0,0x3d55a0e9,0x3d76a43b,0xbca6428a,0xbdb26e1e,0xbdf8498c,0xbdf41660,0xbe0be3c4,0xbd758ec9,0xbc76d550,0x3ac1ef51,0xbd00fbf6,0xbd72a750,0xbd83bc3a, -0xbd9143ff,0xbd96f040,0xbd9b5e2b,0xbd77e6d6,0xbcec4dc6,0xbd031515,0xbcbbf0e8,0xbc035eb3,0xbbd1a8dc,0x3ca1990f,0x3cb5fdbf,0x3c8a8e36,0x3c0762fb,0xba0e4535,0x3ab42e72,0x3b9e9135,0x3c4b80cf,0x3cfd945c,0x3c1a4f11,0x3a14a544,0x3aaf70ea,0x3ca2ab69,0xbc01b369,0xbc236943,0xbcce3e4c, -0xbc2d7924,0x3cfada6b,0xbc3e2c6c,0xbd072417,0xbcec2207,0x3cd0e312,0x3d24aeed,0x3c84d7f8,0xbb25355a,0xbccadd2d,0xbd2fade4,0xbd0ef429,0xbcd6780b,0xbc9b8e95,0xbce8d753,0xbcb1c671,0xbcea06dc,0xbd0db2c7,0xbc866e9b,0xbccf6855,0x3c2d4036,0x3c5e2512,0xbc7337db,0x3b313e0e,0xbb10032c, -0xba6575ef,0xbc23cdba,0x3b06435e,0x3cad266a,0x3ccf41eb,0x3d0bd542,0xbbbf0691,0xbbe01491,0x3c6026ba,0xbc822510,0xbda82d11,0xbdf58312,0xbdfa511c,0xbddcd635,0xbd82d50a,0x3c573727,0xbab01a90,0xbc3ad8cb,0xbd3e80ce,0xbcdcaf11,0xbca9211d,0xbc9eef6d,0xbd1d53b3,0xbd2976d3,0xbccdd63d, -0xbcb17efc,0xbc254823,0xbc8029c5,0xbcc2c5d9,0xbc68f92a,0xbc4ade23,0x3c6b008a,0x3c78a725,0xbb52dd79,0x3c675c51,0x3c17104a,0x3c6293b2,0x3ca50bd7,0x3cb03ce3,0x3ba5d510,0x3b85652a,0xbb445f63,0x3b5298aa,0x3c1ef78f,0xbc7fe95c,0xbd955f6e,0xbdba6201,0xbda8ef54,0xbd9a2bab,0xbd9fbb1b, -0xbd80c553,0xbd104c8c,0xbd172d73,0xbd32f075,0xbda42c10,0xbd4fb210,0xbd1ab761,0xbc91cf22,0xbc1b1166,0x3a102175,0x3bf225be,0xbc83a80b,0xbca0ba44,0xbc3d1986,0xbc5f2f21,0xbb1e9f43,0x3b98c4cd,0x3ad7cda9,0x3a7506ee,0x3af9cb21,0xbb0c0581,0xba2409a7,0x3a3c3422,0xb91b7bf3,0xb8ee7784, -0xb97831ea,0x3c489b88,0x3c4e3177,0x3bc6ef4c,0xbcfff253,0x3c0152b0,0xbce17b29,0xbcab2a02,0xbcb04eaa,0xbcad116c,0xbcf38a68,0xbcdfe51b,0xbcb6c661,0xbbb0b0c2,0x3b588822,0xb9c494b4,0xbc4dc547,0xbcd54350,0xbd1a3638,0xbd142abb,0xbd000e9e,0xbcc2c18f,0xbbeefd08,0xbacec59f,0xba720cd0, -0x3ab9a7c1,0xbbede5fc,0xbc77874c,0xbc2b627a,0xba81bf41,0x3c05386d,0x3bf8de78,0x3b83e57a,0xbabc6a53,0x3a031db9,0xb9d56390,0xbab94589,0xbb0e0fe8,0xbc1e7aff,0xbc307056,0xbc833b97,0xbcd9d41a,0xbc65051a,0xbc51b8db,0xbcc2695e,0xbccfa6fd,0xbcfb4417,0xbd0c3f04,0xbd22d3d7,0xbd0940e0, -0xbce49bd6,0xbc92da8e,0xbc8ff087,0xbc832cb3,0xbc8cceca,0xbbe02de2,0x3b261046,0x3c2a09cd,0x3bb9c905,0x3b64d185,0xba167e92,0xbb114f01,0x3b5f1352,0x3b965e30,0x3b651b9b,0x3b7d20bb,0x3a504e8a,0x3bdc77f5,0x3bb9ca97,0x3bda9c24,0x3bc3fac9,0x3a71542e,0xbb61037d,0xbb9e4ad3,0xbc0864ad, -0xbc15a08b,0xbc5ddb66,0x3ae893fd,0xbca7d27d,0xbc838af3,0xbc9a07f5,0xbc9dcab9,0xbca56f09,0xbca32f80,0xbcb3cb43,0xbc4ee9ba,0xbba5e6ae,0x3b367134,0x3c337055,0x3c9e5113,0x3cdf4663,0x3cbd8bcf,0x3c99f7a5,0x3c907036,0x3c829d93,0x3c913ebd,0x3c588fa5,0x3c66edc8,0x3aff9bc5,0xbc066031, -0xbb557f23,0xbc135401,0xbca410d8,0xbc8fc625,0xbcb773bc,0xbca0de1e,0xbc936d3b,0xbc2c9426,0xbc2de1be,0xbc109b84,0xbbee61a1,0xbc5acf2e,0xbc60974a,0xbcf70167,0xbcba3402,0xbca7c2a1,0xbcb64326,0xbcb455c9,0xbcbb7d7a,0xbcc038a1,0xbccd9566,0xbcb295af,0xbca36fc7,0xbc945bb2,0xbc83231b, -0xbc67dbb3,0xbc2a2103,0xbc3e4ec6,0xbc3a5162,0xbc467293,0xbc5230fc,0xbc575885,0xbc5a96f8,0xbcbcad62,0xbc813e6c,0x3cb4b5a4,0xbd00ee08,0xbcb6e30a,0x3c956a34,0x3c863b52,0x3c7f3fdc,0x3c7821c2,0x3c4494b2,0x3c2c7f3c,0x3c303130,0xbc9b2776,0xbd03335b,0x3ca98633,0xbc94fb8a,0xbce6d672, -0x3ce77788,0x3cf55ee3,0x3cce927e,0x3cac3f38,0x3cd02686,0x3ccd509f,0x3d06bf31,0x3d0bb911,0x3cf76142,0x3cfe0d7f,0x3cf8650d,0x3cf16b5e,0x3ce54e85,0x3ce38b27,0x3cf717f2,0x3ce6215f,0x3ce22c91,0x3cd8a438,0x3ce9e619,0x3ccf0d04,0x3cea4a7e,0x3d0dda71,0x3c4785b3,0xbd4c9528,0x3d258826, -0x3c8487b3,0xbd32e27a,0xbd24bae7,0xbd20ef31,0xbd1f6d2d,0xbd1411cf,0xbd0f6423,0xbd042bf3,0x3c878405,0x3d2952cc,0xbd3623f7,0x3c1a29fe,0xbc571b0f,0x3cbfaaa0,0x3c97c758,0x3ce83d4c,0x3cf83701,0x3d56a9b9,0x3d6647b2,0x3d3f0e8f,0x3d48caa1,0x3d39f1dd,0x3d2aba11,0x3d0e03b9,0x3d0c2160, -0x3d273bcc,0x3d182d5c,0x3d15d0e5,0x3d0799a6,0x3d19b7c5,0x3cfd0e1c,0x3d140be5,0xbb1c7e2a,0x3c97b3da,0x3ce34d45,0x3c89b435,0x3c7ac45b,0x3cdba78b,0x3cd653f2,0x3d05c1c9,0x3cd08c06,0x3ced25a2,0x3cc94201,0x3ca12fc0,0x3caf0821,0x3c283013,0x3c80f267,0x3ca0b4b5,0xbb0777d1,0xbbb519db, -0xbbecf6fd,0x3be16d54,0x3c4fd97a,0x3d91c1f1,0x3d9d497a,0x3d5bd55a,0x3d5d3396,0x3d4703a8,0x3d3db5d6,0x3d15a28e,0x3d075437,0x3d3e9034,0x3d158e05,0x3d1481fc,0x3cf5402c,0x3d1d63aa,0x3d0b5877,0x3cd39279,0x3cc2aef6,0x3c8722ba,0x3c707bf3,0x3ca7b8b3,0x3c8bfcc4,0x3c88b312,0x3c56b637, -0x3c9144c7,0x3c651af5,0x3beb36ab,0x3bf311c6,0x3c6c6dad,0x3c373429,0x3c2cb9a7,0x3bdba24a,0x3a806d07,0xbcfed98a,0xbd195476,0xbcf52506,0xbc236c11,0x3c46b6d8,0x3dd5ae17,0x3df63614,0x3db68c73,0x3db35aa0,0x3d98c1f5,0x3d7d4637,0x3d309966,0x3d3bef0d,0x3d83bb33,0x3d66a33b,0x3d4f966d, -0x3d21a436,0x3d5e8dba,0x3d1dea21,0x3d047964,0x3c9da553,0x3c19eace,0x3c63f3c2,0x3c967bb2,0x3c9f5aac,0x3c7ab1f3,0x3ca2b3ad,0x3c3f28f8,0x3c00c388,0x3c024bf9,0x3be0dc94,0x3c272674,0x3c33fe70,0x3c0b62a6,0xbb66eeb2,0xbc534c4c,0xbd02a210,0x3d298c87,0x3d3ba85f,0x3d1ef806,0x3d2fdfa9, -0x3d12f480,0x3cfc7cc8,0x3c8e4fe2,0x3cb7ccd4,0x3ca5c621,0x3d0ebfe3,0x3b7cb0cf,0xbc971394,0xbd2fb454,0xbc4814c0,0x3b9029e9,0xbbfdcbd9,0xbb12a0f3,0x3a9c542b,0x3d1924a7,0x3cde2cba,0x3c107e8c,0x3c296992,0x3c96e2c1,0x3c8e4d67,0x3a10ff00,0x3c935957,0x3ca933e2,0x3be595d9,0x3c9ffbd8, -0x3bea34f1,0xbbf50d86,0x3b226875,0xbbb90031,0xbc855b43,0xbd0c2036,0x3d8dba7f,0x3d5e2223,0x3bb57493,0xbaf3fc13,0xbc46b613,0x3cd28056,0x3cba3231,0xbcf174d3,0x3ca2de38,0x3d064f22,0x3c7ba3c1,0x3cddb551,0x3d188677,0x3d5d3963,0x3d488471,0x3d6b790b,0x3d8b11b3,0x3d5e7dfe,0x3d346fdc, -0x3cecf8c3,0x3bd27f32,0x3c840d6b,0x3ca14e2c,0x3cc62a2b,0x3cd522b2,0x3cc188ba,0x3bf1173c,0xbb22f242,0x3bdd22ca,0x3b71a58a,0x3c401c81,0x3ce2dca4,0x3c4bffe7,0x3c976872,0x3cc7bed9,0x3d59bc54,0xbc99e8d1,0x3c8d7273,0x3d838d31,0x3e02b2de,0x3e734b62,0x3e6c8c6a,0x3e4b7075,0x3e06eb91, -0x3d827952,0x3cbcad3f,0x3ca84b5a,0x3cf103d8,0x3d551248,0x3dae4e13,0x3d86db49,0x3d3c9ba1,0x3c98495d,0x3be02ffb,0xbb5a464c,0x3a09f6a4,0x3b4d21bd,0xba3ad020,0xbbcdc562,0x3d0af2c8,0x3cd09fbc,0xbca59b98,0x3b7656bc,0x3a0f105f,0x390f7748,0xbba5b0a6,0x3bbdff0d,0x3c8f57ef,0x3d204070, -0x3d3a95ae,0x3ca26f2b,0xbb014285,0xbbfe40f0,0x3c7652c2,0x3dc00a6e,0x3e01147b,0x3e2f89ae,0x3df37364,0x3db83007,0x3d50a3bf,0x3da75fcb,0x3d9847f9,0x3d5bb778,0x3d3205e8,0x3ca629b8,0xbbe92bbd,0xbc099c97,0xbb81b515,0x3bbbf463,0x3c1ba510,0x3ba34abc,0x3b9cba5f,0xbb8e90ac,0x3b8d4b52, -0x3b3f5e26,0x3cc052ea,0x3cd1599e,0x3b9cf7e7,0x3c5e4a36,0x3c558ffc,0x3c6de9b3,0x3cbb5e18,0x3ccc37de,0x3c539f0a,0x3c54d93b,0x3c9bc1e9,0xbb803f00,0x3b8d92f7,0x393768bb,0x3d921fef,0x3e0c0f1d,0x3e08925a,0x3e127145,0x3e02b3b1,0x3dd8ba98,0x3d74b0af,0x3d9bc3d1,0x3d9d34de,0x3d95bcc9, -0x3d66bdb3,0x3d47467f,0x3d5c8777,0x3d10ced8,0x3cb28d5b,0x3c4bad76,0x3b5ce7c2,0x3b949359,0x3c5eaf70,0x3c5f6b34,0x3cae4ddd,0x3be86d37,0x3c0ce1bc,0x3c29eae8,0x3c37ed5c,0x3b246136,0x3a919563,0x3bddd51d,0x3c06f76f,0x3c2e03bc,0x3c3578ca,0x3c8fed3d,0x3c98f5e8,0x3b4d8f84,0x3d1bce33, -0xbc8b80bb,0x3d493f8f,0x3d8f0b86,0x3d64ea93,0x3d3b4313,0x3cda0208,0x3c987823,0x3c813563,0x3a12dc6f,0xbc25a9d5,0xbc6d6fac,0xbb0b885d,0x3c5008a4,0x3ce9b8aa,0x3cb38e26,0x3c8d59f6,0x3bb5f07e,0x3c4ea220,0x3c669783,0x392cd3d0,0xbb65dcf4,0x3b307da0,0x3c1b73e1,0x3c62290b,0x3c1195de, -0x3bb45df9,0x3c17c366,0x3c0482e8,0x3bec94c3,0x3c3cda02,0x3c63a2d7,0x3c6b3b78,0x3c381a04,0x3c830f79,0x3c229caf,0x3cb79f9e,0x3cfb9a8d,0x3d05df5d,0x3d0669fa,0x3d05bd76,0x3d11e25b,0x3ce80d78,0x3ca34967,0x3c2642b1,0x3c7699ee,0x3ca75dbd,0x3cc106a3,0x3c565b4a,0x3a6f79dc,0xbc38c182, -0xbb7c2d84,0x3b59eab3,0x3c032637,0x3bbfc497,0x3a5d7b05,0x3bb5e0cc,0x3c545547,0x3bc0788c,0x3bec6e40,0x3bc6d9ee,0x3b7a2340,0x3ba0c47b,0x3b56fa98,0x3c33aef0,0x3c45d7c2,0x3c35c002,0x3c05ac17,0x3c361de7,0x3c5bb769,0x3c89f005,0x3c86634e,0x3cd4982a,0xbca2816c,0x3ca126be,0x3c88456a, -0x3c856e6b,0x3c80b39e,0x3c752251,0x3c7fd79b,0x3c77480f,0x3c437ab8,0x3bd736d7,0x3b7d1ba8,0x3adaf3b5,0x3b259527,0x3af15673,0x3b38d0a6,0x3adc8b20,0x3b1a84ec,0x3b80aa81,0x3b2e5ef5,0x3be7f029,0x3c0a21d6,0x3c4b39e9,0x3c82e15c,0x3bd18c9e,0x3c16de93,0x3c64822a,0x3c816096,0x3c9d09c0, -0x3c81a6ec,0x3ca714b4,0x3ca8a175,0x3c8976d1,0x3c900f4a,0x3c0cb6cc,0x3c1a4bf5,0x3c857e19,0x3c265602,0x3c870aef,0x3c1c3c07,0x3c3f86e9,0x3c3301ca,0x3c394f66,0x3c37d470,0x3c415e7f,0x3c1cd936,0x3c0bfc21,0x3be769da,0x3bc3e28c,0x3b8f6b23,0x3b385416,0x3b5f1bdb,0x3b82cc46,0x3b816bdf, -0x3b99bd21,0x3ba6dfe6,0x3bb3e7e2,0x3be0e3f3,0xbbab49b4,0xbd0c6e32,0x3c52d2dd,0xbb6d1ea9,0xbd1fc51b,0xbd17b809,0xbd1217d5,0xbd0a01e5,0xbd03fca6,0xbd0030e6,0xbced22c0,0xbb4a870e,0x3c8e25b8,0xbd1d79c0,0xbc0120b3,0x3c0cbfbf,0xbd0ca621,0xbcb95387,0xbd253421,0xbce9e2d5,0xbcfec4a3, -0xbcf3cc73,0xbd1d3253,0xbd29567a,0xbd1d4ca3,0xbd245527,0xbd1da627,0xbd0be85d,0xbd104b35,0xbd0e6586,0xbd0c249f,0xbd0d57f7,0xbd0ea74e,0xbd1430e5,0xbd0e860d,0xbcf70942,0xbd2b26ee,0xbcaa8036,0x3c176503,0x3d78c5b9,0xbce8fa29,0x3bd04cc9,0x3d637e71,0x3d620352,0x3d5e63de,0x3d49fc08, -0x3d4ff205,0x3d4e32a7,0x3d48f9f0,0x3b9645a8,0xbd0b6c2e,0x3d60eee5,0x3c022322,0x3c253634,0xbd0a6635,0xbca9a7e9,0xbccd7cd7,0xbcee2e5e,0xbd541747,0xbd6b9b92,0xbd4188fd,0xbd62e813,0xbd59516d,0xbd2dbfb2,0xbd349911,0xbd32315c,0xbd2f2abd,0xbd35e063,0xbd361fea,0xbd3fcdac,0xbd22341f, -0xbd14c6cb,0xbd278d59,0x3cab53b6,0xbc915310,0xbc865a42,0xbbc65b39,0xbb096336,0xbca16103,0xbc98f64a,0xbcc1879c,0xbc7cdbba,0xbcd2a373,0xbcc9813f,0xbc3a03ce,0xbc94bd4d,0xbba31b25,0xbc1e71d2,0xbd1021f7,0xbd15f0d8,0xbd1b057a,0xbca42db2,0xbca5a17f,0xbc961c69,0xbd83a7b2,0xbdac31da, -0xbd8205ec,0xbda396a4,0xbd90f1f8,0xbd4d8bed,0xbd616d9a,0xbd53b968,0xbd4aa052,0xbd513373,0xbd547db7,0xbd74a683,0xbd32c0a9,0xbd35b93f,0xbcf5f08f,0xbc3d73f8,0xbc4197ac,0xbbcb198b,0xbbd0d020,0x3b7f14ce,0xbc6a8313,0x3bdaf317,0xbc46bd48,0xbb026947,0xbc1088db,0x398fcb92,0xba95a19f, -0xbb846c3f,0xbc237220,0xbc07e0cd,0xbd00dc18,0xbd3fef1e,0xbc7fd7d3,0x3ca10505,0x3c09ea34,0xbbc97797,0xbda1e203,0xbdca47b5,0xbd870a98,0xbdc5ea86,0xbdc12994,0xbd7da296,0xbd8daa15,0xbd8e7044,0xbd89af4e,0xbd94439b,0xbd8f05a8,0xbd9af9ee,0xbd4e3997,0xbd233ccf,0xbd0d309b,0x3b6e450d, -0xbc33b551,0x3be053b8,0x3b91a9be,0x3c305654,0x3b814045,0x3c5c65c6,0x3c736701,0x3b5c348d,0x3b8eb433,0x3aa4ff06,0x3c248b82,0xba424aa1,0xbc526fc8,0xbc0211d8,0xbd3ee301,0xbcb9cb48,0xbd869beb,0xbddacff1,0xbdc094f1,0xbd64a9a3,0xbd842c22,0xbdacbfce,0xbdf59a41,0xbdb4f74a,0xbd8b8c93, -0xbd5e27b1,0xbd55bb6c,0xbd2fd5fb,0xbc31bedf,0xbce21040,0xbd290dd2,0xbd52cb5b,0xbd4cae96,0xbd80c818,0xbd6e49a4,0xbc57b738,0xbcc901cc,0xbc5b9e84,0xba58c88a,0x3bb547bd,0x3a49dcaa,0x3c330781,0x3c583316,0x3b10b04d,0x3c1836ca,0x3b8da852,0xbbc54e94,0xbb9b9a7a,0xbb98e582,0xbca1fd2c, -0xbcfd8d53,0x3c18a8e6,0xbc7cc309,0xbcba7c1b,0xbce214f0,0xbd5b83cd,0xbd79e43d,0xbd6cbd68,0xbd784bdf,0xbd3286a1,0xbd4f2fa2,0xbd43fe58,0xbcf78d8c,0xbce64846,0xbd2f85d0,0xbd78697e,0xbd84a05a,0xbd8189e8,0xbd7c3536,0xbd626bb1,0xbc4fcf51,0x3bdc940a,0x3b6caa72,0x3b398455,0x3b9a951a, -0x3c0a7fed,0x3c6b111c,0x3bd4924c,0xbb4eb972,0x3afac25f,0xbbe61111,0x3b96f7ce,0x3ca55f1a,0x3c43d01d,0xbc2e769a,0xbc988f34,0xbc6f975a,0x3c06a14e,0x3cc2da2d,0x3d1e8728,0x3cb41085,0xbd6ba0aa,0xbd9d9d42,0xbdf950b9,0xbe2e9323,0xbdee85b6,0xbdaf88e1,0xbda81dfe,0xbddb849d,0xbdee62e3, -0xbdcf59c5,0xbda251ab,0xbd4749c1,0xbc81eef6,0xbc236f1b,0xbc9b349b,0xbce1a029,0xbcb75a2b,0xbc4ce821,0xbbf42bd7,0x3c9c3174,0x3c82e62a,0xbca25c13,0x3a03ccfd,0xbb1a2be0,0x38dfa175,0xbbbb7541,0xba11e11c,0xbb43c24d,0x3d0fb3d3,0x3d3d0081,0x3d105431,0x3c4a9a81,0x3c861379,0x3c871ad5, -0xbd3a7666,0xbdbffed1,0xbe37b1be,0xbdfa89d3,0xbd8e5ed7,0xbcebb063,0x3b981786,0x3b862420,0xbcc9526f,0xbd41332a,0xbd898371,0xbd8e1247,0xbda4823b,0xbda676f8,0xbd8e9fea,0xbd8b2cf8,0xbd570c27,0xbcb119ba,0x3b8ee495,0x3b0bccc8,0x3a8c13ca,0x3ca4282a,0x3c9a9999,0xba56c66f,0x3c35e986, -0x3c07c56b,0x3b57a3fc,0x3c713ffb,0x3ca1c9a0,0x3b9f70ae,0x3c84a785,0x3b853921,0x3b952416,0x3b16a084,0x3d2d403b,0xbcea2262,0xbdde1907,0xbdbfbbdf,0xbda826a0,0xbdabfcbb,0xbdc53212,0xbdea3ed1,0xbd8d63f0,0xbd3c0bfe,0xbd3787c7,0xbc9e92e8,0xbc2a5e53,0xbc852d37,0xbaf04730,0x3b1beaee, -0x3befd532,0x3c344552,0x3ba2c187,0xbb1b201b,0x3b92c2ce,0xb99aafd9,0x3ba828ba,0x3c2a2913,0x3c28dfc9,0x3b8fd2da,0xb9e7f6a7,0xbba6e070,0xbb4a957c,0xbb980ca7,0xb6f57367,0x3a67f85b,0x3c541f51,0x3c8b2d23,0x3ca3a289,0x3b1ed2b8,0x3d314bc4,0xbc3d1949,0xbcfaf5b4,0xbc8b1008,0xbd03ab84, -0xbd036448,0xbd2a728f,0xbd9194c9,0xbcf15e05,0xbc1a7e1c,0x3bce054d,0xbc3a0dea,0xbcce8dd4,0xbd035aa7,0xbd17a630,0xbd0ff513,0xbcef9dfc,0xbce56143,0xbcab9b91,0x3a161b39,0x3ae4bb94,0xbba0f1fd,0x3a429081,0xbaa35316,0x39a29da8,0xbae8cdef,0xb9ee0549,0x3b11d40b,0x3b8c76ee,0x3b6f1ec4, -0x3ba94179,0x3c001b3a,0x3c2612e5,0x3b2ee44b,0x3b87d2c4,0xbc1683c1,0x3a9b23e3,0xbbcd29cc,0xbc86e6ab,0xbc7ad59e,0xbcb6fbeb,0xbcdeca05,0xbd053f77,0xbd234c48,0xbcfdc75a,0xbcdd9dbe,0xbc91ece4,0xbc2bf8dd,0xba2cc85e,0x3c1e8166,0x3acad92d,0xbbb27a80,0xbc468baa,0xbc62a346,0xbc9fd967, -0xbcbfccca,0xbc378669,0xbb3b4bf1,0x3b2152ca,0x3aed0c55,0x3bca6fed,0x3b8dd07e,0x3c102dbc,0xbae49c6e,0x3bd031d8,0xb9c03715,0x3bb3e894,0xba78bf41,0x3af0aae1,0x3b9ad289,0x3c30a708,0x3a02e768,0x3ced2c1b,0xbc288bc1,0xbc84ee7c,0xbcb336c1,0xbcdde9ff,0xbd074e46,0xbd1bad2c,0xbd341bbd, -0xbd145a02,0xbced71c5,0xbcbb466b,0xbc870a4d,0xbc446343,0xbbe03755,0xbbc72f86,0xbb541d1a,0xbac84d3e,0xbad9edae,0x3a713ce5,0xbb3d8ff9,0x3ba3c90c,0xbc0dae84,0xbc4b9185,0xbbec06a3,0xbc0c72fb,0xbc83c5df,0xbc84968a,0xbc770a43,0xbbc84264,0xbc34db3b,0xbc1e1684,0x3a972f9c,0xbb5244d7, -0x3ba9dcf2,0x3b833cd0,0xbbd647a7,0xbc348e84,0xbcc25ed4,0xbc959560,0xbcb01191,0xbcbc0627,0xbcc7e210,0xbcd3cba5,0xbcf103fb,0xbcce5e99,0xbcbcd03c,0xbca816ca,0xbc9399bc,0xbc795091,0xbc3ddbe7,0xbc512ca2,0xbc5ea254,0xbc646b46,0xbc6da2a2,0xbc61d5e5,0xbc827c5b,0xbc4194d5,0x3b255fc7, -0x3cd154f0,0xbc8d659c,0x3a3e48a7,0x3ce32c1a,0x3cecf7b2,0x3ce8dc0d,0x3cd4b7ea,0x3ce48029,0x3ce30e38,0x3cd9417a,0x3b9e8b27,0xbc87fcb5,0x3ce7e71c,0x3bfe7494,0xbcba278c,0x3cfa26cf,0xba37faf2,0x3d25fae1,0x3cd4dd20,0x3cf37006,0x3cd78085,0x3d039645,0x3d0b2e40,0x3d0d1a4e,0x3d064e6f, -0x3d03ce07,0x3d092d8d,0x3d02718f,0x3d01120d,0x3cf74b8a,0x3cff0ac3,0x3cfede40,0x3cfd784f,0x3cfdcdae,0x3cd8da6b,0x3d214c62,0xb9d4406b,0xbcf5522c,0xbd83483c,0x3c54dbef,0xbcd588b8,0xbd7baa64,0xbd7ac9ec,0xbd7923db,0xbd644170,0xbd77e774,0xbd782cd2,0xbd6a1e24,0xbcd3debb,0x3c865b9f, -0xbd7c15cf,0xbd0df95d,0xbd2466ba,0x3d0de325,0x3ce69dff,0x3ccfbfa0,0x3c9b96b9,0x3d036495,0x3d14fdde,0x3d197012,0x3d11f1ff,0x3d1a7b22,0x3d36a26b,0x3d297374,0x3d216b49,0x3d120cfd,0x3d1f651d,0x3d1fff38,0x3d1dfd94,0x3d121a8e,0x3d11639e,0x3ce98230,0xbd1170fb,0x3c481439,0x3c2500a2, -0x3bdd35c0,0x3a91f863,0x3c3fb60a,0x3c8b76d5,0x3c8eeb60,0x3b1964c9,0x3c9035bd,0x3cb5a91d,0x3c326e58,0x3c5ccd59,0xbb801cb3,0xbb0e1a2f,0x3cae963b,0xbbb4bbfa,0x3ce98143,0x3d2381e6,0x3cef9363,0x3c8367c1,0x3d3eebbc,0x3d6d9928,0x3d80339d,0x3d537810,0x3d4983ab,0x3d71e489,0x3d507331, -0x3d4d8bd0,0x3d31322c,0x3d3de27e,0x3d36f319,0x3d3a6abe,0x3d1a65d0,0x3d2d4f2f,0x3c339622,0xbbc8a426,0x3b5ed71b,0x3c1ec173,0x3c71d960,0x3a3d93a3,0x3c14faff,0xbaf019f9,0x3ca7d0bb,0xbbb1d314,0x3c24260c,0xbb9fdce8,0x3c267ac5,0xbaa371d6,0xbb30d1b6,0xbc0236d5,0x3b198708,0x3b6eb593, -0x3d3eefc5,0x3d1aec80,0x3c9b3493,0xbba38a9a,0x3cf0c5fb,0x3d5067c6,0x3d7b8a37,0x3d516a23,0x3d68a680,0x3da8d12d,0x3d8f1069,0x3d83e941,0x3d62e921,0x3d7e4943,0x3d7fc859,0x3d709310,0x3d4a3816,0x3d365e81,0x3c6d5fc8,0xbc3a4c27,0x3c973252,0x3b414418,0x3cc583bd,0x3ca75d73,0x3c10f926, -0x3c9504ca,0x3c4afe69,0x3c533ed3,0x3ba3cb02,0x3c212c3b,0x3c958bf0,0x3c37f77e,0x3ba63093,0x3c3dc052,0x3c9234a0,0xbd16959f,0x3bb2632c,0x3c9b9682,0x3cde3e72,0x3d3cb8ab,0x3da922f0,0x3d95802f,0x3d11f8ae,0x3d051412,0x3cbf4b81,0x3cf08a13,0x3cfd5503,0x3cf38132,0x3c70fa2e,0x3bb5eabb, -0x3b9ad8a4,0x3c93b974,0x3cbb577a,0x3d26e0ee,0x3c070862,0xbce4c7a4,0x3bbbc5cd,0xbb16d620,0x3beca121,0x3c11af82,0x3bd8ff36,0x3c6becd1,0x3c72a7d6,0x3beb1c6f,0x3c801f51,0x3c18813a,0xbb987fcd,0xbb8ad48f,0xbc3d395d,0xbc9cb347,0xbcb81d90,0x38b51e4b,0x3cc52ff8,0xb9a01efa,0xbd055932, -0xbd916862,0xbd604f43,0xbd50118c,0xbd8299a4,0xbd9068bf,0xbd810cb1,0xbc70bf8a,0xbceecfb3,0xbce3b1fe,0xbc5ce9c3,0x38d6d063,0x3cdf3c35,0x3d9be3fe,0x3d3b6cd7,0x3d20ded8,0x3beb538c,0xbc8a35af,0xbb7a0be8,0x3a8ea786,0x3ca6fbb1,0x3cae6c2d,0x3c1954ad,0x3c132fd8,0x3afb037f,0x3b5199f6, -0x39bba3b6,0x3c177c74,0x3cda500d,0x3c269bd0,0x3c276f44,0xbc36bba5,0x3c5e0eaa,0x3cadc638,0x3d5c5349,0x3d6858e2,0x3d99d2b2,0x3df1a99a,0x3e11a210,0x3e051116,0x3d845a92,0x3d89ffec,0x3d3c088b,0x3d0ddb43,0x3d6b56af,0x3d8cba49,0x3d8d0605,0x3d5e90e7,0x3ce5dc7c,0x3b45de5d,0xbc24f5b7, -0x3b7b3627,0x3bfcda4b,0x3a5abc07,0x3c26c6d6,0x3ac44481,0x3ce8afd1,0x3cc3291b,0xbc28d35a,0x3c0bc7ae,0x3bd94b9d,0x3beab834,0x3b527fce,0x3bc814bd,0xbc0c4308,0x3cdf4bb6,0x3d4ab60b,0x3d025dee,0x3cf86237,0xbb0f1987,0xbc7f0cb3,0x3ca29465,0x3d4fe445,0x3e01795b,0x3df23ec4,0x3db6d073, -0x3ceed6d4,0x3c8a9a6d,0xbba61f8f,0xbca8cd1e,0xbd37121c,0xbd6a2c64,0xbd7157e4,0xbce89ec5,0xbbe00131,0x3ba617df,0x3c0512bb,0x3c025936,0xbb813798,0xbc81a346,0x3bb7694d,0x3bea49e1,0x3c8d00fb,0x3c741387,0xbba7261b,0x3c591398,0x3c248c05,0xb932a3eb,0x3c42accd,0x3ca89b2b,0x3cc78b46, -0x3ca12b26,0x3c9b9cca,0x3aaffc0c,0x3c24537c,0xbd143d3e,0x3c7033ed,0x3d9f789b,0x3d961077,0x3da2a5b1,0x3da3f0fa,0x3d91103e,0x3d1ecbff,0x3d1619f7,0x3d334246,0x3d9bc9bf,0x3d75c048,0x3d5549af,0x3d14e955,0x3c7110a8,0x39314288,0x3c140449,0x3bcd6240,0x3c8c9022,0x3cab73f3,0x3bea0916, -0x3c915372,0x3c0240f6,0x3c827e96,0x3c93b975,0x3c6e6998,0x3bbb9c58,0x3bd34f09,0xba561496,0x3c08e9fb,0x3b85c79d,0xba7c596e,0x3bdbecac,0x3c1a8da4,0xba3a4ba5,0x39dbbff0,0xbd0ba07c,0x3b002d3c,0x3d174fe3,0x3d1912ca,0x3d509b94,0x3d574079,0x3d5cf704,0x3d598f23,0x3d01604b,0x3c8d67a1, -0x3c777fcf,0x3c2268ff,0x3b06508a,0xbc36f738,0xbb5b4b07,0x3c014bdf,0x3cad4bf5,0x3c6fff81,0x3c095ca0,0xbc1cd400,0xbc29e7b7,0xbb121386,0xbbf38b2e,0x3bec5949,0x3c439602,0x3c27abf4,0x3c37cc0e,0x3c1ce07d,0x3c9b5678,0x3c844056,0x3c8f2c2d,0x3c9dab96,0x3c7dbce4,0x3c6b7074,0x3b9ed05b, -0x3c31126a,0x3bdd0a6d,0x3cc65a5d,0x3d0a00ad,0x3cd03fb5,0x3ce3213d,0x3cd83562,0x3ce8766f,0x3d089ec9,0x3cfb2d3f,0x3d0359d2,0x3d041354,0x3cfd935e,0x3cf52ca4,0x3ce03175,0x3cc3cd82,0x3c8bbaf1,0x3c53b574,0x3c761912,0x3ceef51a,0x3cb556d3,0x3aefffbe,0x3c135ac6,0x3c3ddaf5,0x3c4984bc, -0x3ba06707,0x3c3e17d8,0x3aac373c,0x3c82eed7,0xbb3ad5d8,0x3c18abd1,0xbaedd2d0,0x3ba90e3b,0x3b0f405b,0xba8c5798,0xbc0c0ec7,0x3b930db5,0xbccc0aea,0x3bd0f933,0x3c1fd97c,0x3c53b60a,0x3c8d2d3a,0x3cada225,0x3ccb34fb,0x3ce38d35,0x3cbfab71,0x3c99db44,0x3c6ebf4d,0x3c349bfc,0x3c02414e, -0x3bc3e845,0x3bf1eb0b,0x3c1cf4eb,0x3c3507cf,0x3c30add3,0x3c0fbad6,0x3c57a8b4,0xbbe16f0a,0x3c348417,0x3c196811,0x3b96f309,0x3addc6a9,0x3c2ba193,0x3c68d507,0x3c3fc0e4,0x3adfcd29,0x3c60eb0a,0x3c8749fb,0x3bf9e9b9,0x3c0b22e9,0xba86a0d2,0x3866bbe2,0x3c24b104,0xbb3b4963,0x3caffae4, -0x3c80e430,0x3c93d552,0x3c991c6a,0x3c9ebc52,0x3ca46ab6,0x3cb532d8,0x3ca6a879,0x3ca22246,0x3c9bad7f,0x3c941fd4,0x3c8aebad,0x3c748c09,0x3c7bfec1,0x3c7862e2,0x3c792290,0x3c82efd7,0x3c746e43,0x3cac2732,0x3a9582e7,0xbc93c429,0xbd228a45,0x3be5308a,0xbc95e258,0xbd369eb7,0xbd36a2bb, -0xbd2bf99b,0xbd140c2f,0xbd21e518,0xbd1cbe24,0xbd119fc7,0xbc971da1,0x3be5644d,0xbd1230f7,0xbcb710b7,0x3ca84581,0xbc9fbd3f,0x3c9f50b3,0xbcef254f,0xbc6135a2,0xbc805790,0xbc5da838,0xbc8f2408,0xbca51879,0xbcc49c0a,0xbcc44e4b,0xbcc01213,0xbcb0d950,0xbca5aca1,0xbca485e1,0xbcb037f0, -0xbcb26287,0xbcb1ace9,0xbcabc91d,0xbcab7ba3,0xbc920290,0xbcfc8c49,0x3c9f3568,0x3d2e2402,0x3d57adf9,0x3c1cb4da,0x3d281321,0x3d4b9760,0x3d5896f9,0x3d57797b,0x3d3b7801,0x3d5a5e95,0x3d5e5805,0x3d5b8490,0x3d211803,0x3b4a334f,0x3d481f6f,0x3d37fcd0,0x3d2f46a3,0xbc85b3d1,0xbc6fa6c0, -0xbbcd6908,0xbae4c7cd,0xbc103e8b,0xbc89a55b,0xbcdfea92,0xbcf88d6b,0xbcf74354,0xbcce18d9,0xbcb12270,0xbcb2a04d,0xbcdedc6e,0xbcf2af6e,0xbcf69629,0xbcea8537,0xbcd0dbf8,0xbce4461a,0xbc91eaa1,0x3d1bd2e2,0xba35c8a7,0x3c225da9,0x3c048ec8,0x3c4c556f,0x3a1db8ef,0xbb4662c0,0x38d9eaa6, -0x3c49f021,0xbb783472,0xbc26353f,0x3bb45c8d,0xba3a897a,0x3c3ee6b0,0x3c46751e,0xbc3ecece,0x3ca68a04,0xbb89554f,0xbc64a3a7,0x3b5203c1,0x3c4f24b8,0xbb91f97e,0xbcafd457,0xbd39073b,0xbd4be410,0xbd3eae21,0xbd098244,0xbccd07d1,0xbcc5e326,0xbd056973,0xbd13fe50,0xbd14ffc3,0xbd0b25f4, -0xbcf82e49,0xbd196343,0xbc2742ba,0x3c5c0c2f,0x3bf5c3a7,0x3c362f48,0x3bc609b3,0x3c92123e,0xbabfdb7d,0x3c7e814a,0xbc297411,0x3c8011de,0xbbc37b2b,0x3c5676df,0x3c46db5c,0x3c069e29,0x3bc11a0c,0x3c62e250,0x3b9427c5,0x3cd2781a,0xbbb6c0c6,0xbbcdb604,0x3ceb8dd4,0x3d5100a8,0x3cd78910, -0xbb897a87,0xbd2ea506,0xbd5a9f52,0xbd56181d,0xbd0b0ba3,0xbca34bf9,0xbcaa7b68,0xbd19e983,0xbd4320ac,0xbd510725,0xbd40525e,0xbd312bd2,0xbd3b0058,0xbcaef128,0x3c2b4c62,0xbc5356bb,0x3c8d4b07,0x3ba9d94f,0x3b051796,0xbbec173c,0x3bdbb484,0x3c471e19,0xbb1afc17,0x3b5cefbd,0xba061284, -0x3c64cda0,0x3b8e64fb,0x3c01c8ce,0x3bc28ce9,0xba81a04c,0x3ca356d2,0xbd227bd6,0xbd940b98,0xbd8ab664,0xbdb13188,0xbd54b60c,0xbd202a4d,0xbd55a004,0xbd7a5e8e,0xbd827a3b,0xbd5c02ff,0xbd4e45ad,0xbd00bf65,0xbc8ae393,0xbc105e8d,0xbc261b80,0xbce43e1d,0xbcc71fd5,0xbd26aef7,0xbc7e59d4, -0x3c4627ce,0xbc7cf0e0,0x3b5db954,0x3adb47e6,0x3c3e0656,0x3c80b000,0x3c37d027,0x3c22b541,0x3bcb5644,0x3c631e80,0x3b9609eb,0x396d0f4c,0xbbbe0095,0x3b834636,0x3b721281,0x3c820410,0x3b3e55e1,0xbcedd029,0xbda46e59,0xbd710397,0xbce2636c,0x3b847615,0x3c57804f,0x3b4d1357,0xbcf7e434, -0xbcf4b368,0x3bfc17f8,0x39c79b2e,0xbb8791c7,0xbc2cbb5f,0xbceb9e43,0xbd22b919,0xbd4f0b3d,0xbcd2ef0b,0xbcd80a94,0x3a3f4279,0x3c40baf4,0x3b343769,0x3c1a875b,0x3be5a46f,0x3bc26fa7,0xbacc35b0,0x3b2de4de,0x3ac3ee44,0x3b379c8a,0xbb02df9c,0x3c0377b2,0x3bd30385,0x3c92b8eb,0x3b32f546, -0xbc2cd802,0xbcb0261c,0x3d51ce33,0x3d475da2,0x3d964144,0x3d9f0f89,0x3cf62680,0x3cf4773e,0xbc72258c,0xbdaa0afc,0xbdb68661,0xbdae6e10,0xbd4767a6,0xbd85d71b,0xbd855949,0xbd67453a,0xbd66daad,0xbd14e460,0xbc0951b5,0xbc2657de,0xbcd64406,0xbc61cfbf,0xbc0d28e7,0xbbfd8de4,0x3c42adc7, -0x3cc8dde3,0x3cab450a,0xbb0e51ee,0x3bb7e9b3,0x39d2b7e5,0x3b480483,0x3b74da14,0x3c0fbc44,0xbae0540f,0x3d09a480,0x3d26a301,0x3d777ec5,0x3d4ae5f7,0x3ba317e7,0x3c826439,0x3c9831d1,0x3ceed912,0x3b225651,0x3d1b39dc,0x3d3481de,0x3c40c989,0x3d35f4b3,0x3d334878,0x3d3ddf2d,0x3aa50abf, -0xbca02f93,0xbcbda47f,0xbd2b2eb7,0xbd4f5cdf,0xbd44d570,0xbd234664,0xbd0d8d00,0xbc52b237,0x3c27c24a,0x3b8683fc,0x3b01d85e,0x3c1a2c57,0x3bd82f84,0xbc0afb4b,0x3b863a8c,0x3c21416d,0x3aa51e06,0x3bfce891,0x3c5696df,0x3c6fb6d6,0x3ca843ab,0x3c463ce8,0x3bc5f389,0xbb1b6ead,0x3d472b60, -0x3d258cd3,0x3b88edb7,0x3c09c4cd,0x3c0037c4,0xbbf0f86f,0xbc98359b,0xbcb711ab,0x3b631e9f,0x3cc6ba53,0x3d6a1832,0x3d3a32a9,0x3d143b71,0x3cb73c59,0x3cbc54d0,0x3ca3359a,0x3c341100,0x3c88c5bc,0x3c2eb6ee,0x3c02a522,0x3c7ece95,0x3af893c1,0x3c000111,0x3c924f08,0x3c99ca05,0x3c299d87, -0x3c2c28c9,0x3bad8075,0x3c1143f1,0x3c078987,0x3c406f7b,0x3c80fdaa,0x3ca916dc,0x3cc843d0,0x3cd98eb9,0x3d0028ab,0x3d16c1c3,0x3cc9629b,0xbb20f4d8,0x3b8e5aee,0x3c17df18,0xbbd43624,0xbc9f5a2b,0xbcf83082,0xbce37464,0xbca02de2,0xbaaa7462,0xbb49d02b,0xbac3a05c,0xbb9f136b,0xbc39c0f0, -0xbc4a3a70,0x3aaa717f,0xbb4156c7,0xba9320cc,0x3bd7b4ca,0x3b620915,0x3c173f30,0x3c97b389,0x3c2e117e,0x3be47f18,0x3c33febb,0x3c2c04d0,0x3c4581fe,0x3b8cf95f,0x3c503dc1,0x3c8ac592,0x3c53595f,0x3c701d31,0x3c51872a,0x3c4c620e,0x3c6afa78,0x3cc1d832,0x3c28288f,0xba943fb9,0x3baaf943, -0x3b024c1a,0x3a5a87b5,0xbaf1d07f,0xbbeda68e,0xbb2c2369,0xba4e8e2e,0x3a9ab9b3,0x3bae532a,0x3c109b1a,0x3c408c4e,0x3c5d0b65,0x3c6eb9ec,0x3c5a5fa3,0x3c59390c,0x3c01bac8,0x3c8e02e7,0x3cd43f51,0x3c87ec21,0x3c3e8100,0x3c31135d,0x3c65c55a,0x3c1a0627,0x3c6c927e,0x3c029ea2,0x3ca58c50, -0x3c09cd5f,0x3c54e9fd,0x3c09e52a,0x3c2e4453,0x3c790a45,0x3ca2edb1,0x3c8845c8,0x3ca1b2f6,0x3b5782f7,0xbae07bf7,0xbb639464,0xbbfc4a61,0xbc2f7ece,0xbc66c568,0xbc8b746f,0xbc863bcc,0xbc854c75,0xbc85535f,0xbc7c8438,0xbc6278cb,0xbc2f5b0c,0xbc39029f,0xbc3b26d9,0xbc48b485,0xbc1f4a80, -0xbc274dbe,0xbc1c8ed0,0x3c531e0e,0x3b25598b,0x3c20f467,0x3c3f5d69,0x3c8e14c0,0x3c83199d,0x3c4f92cc,0x3c82a5d8,0x3cae8fb8,0x3c5ba979,0x3c307356,0x3c66e6f6,0x3c44dc0f,0x3c5e3369,0x3c49ecde,0x3b6c9218,0x3c999bf7,0xbb801fe3,0xba2c2b7c,0xbb0f3fbe,0xbb4a86e4,0xbb80374d,0xbb9cdfb7, -0xbbce0e0e,0xbbc8a27b,0xbbc3ee5c,0xbbb40bc6,0xbbb18068,0xbbb95255,0xbbbed166,0xbbb0653d,0xbb92bced,0xbb6e2cd4,0xbb78e654,0xbb1bc430,0xbc00e7e0,0x3c828257,0x3ce61664,0x3cea957c,0x3c715b5d,0x3d018c63,0x3d036a25,0x3d04e52b,0x3cfccdc8,0x3cdd1a9a,0x3cf6d060,0x3cf0580d,0x3ce71a50, -0x3cf3be1f,0x3c7976ab,0x3ccae34f,0x3cf48cfa,0xb940fb9b,0xbb45cf67,0xbd0ff83e,0x3b9953a6,0xbbb08666,0xbbce8a7f,0xbbce941f,0xbbec796a,0xbbdb9949,0xbba4567b,0xbb9e33bf,0xbb6bd72e,0xbaccf539,0xbac8ad98,0xbae9401d,0xbb5421e6,0xbb06093c,0xbad570fc,0xb9adb789,0xbad28f75,0xbb1b050c, -0x3befe561,0xbd0cc93a,0xbd2a286c,0xbca91c46,0xbce3628c,0xbd2a4798,0xbcc114e9,0xbcda17b1,0xbcdd33f5,0xbcbcad65,0xbcf67984,0xbcfbace6,0xbce7f24f,0xbd2a3c40,0xbcd92c53,0xbcba3c9e,0xbd36c0a0,0xbd10c09d,0xbc30ff57,0xbbf8da6f,0xbc6a3b34,0xbc5c338e,0xbc8e425f,0xbc85b758,0xbc4eff78, -0xbc67ff7a,0xbc3cc21d,0xbbd47181,0xbb4633d4,0xbada6021,0xbb921bc9,0xbabef100,0xbaa5761f,0x3b199722,0xbb94c03e,0x3adddd3e,0xbbc3e71a,0xbd033bd9,0xbbe5b438,0xbc850133,0xbc284f7c,0xbc640beb,0xbc5620de,0xbc16fd46,0xbc7e52eb,0xbcc34fcb,0xbc5901c0,0xbba262ea,0xbc0df145,0xbc31ee71, -0xbc9be117,0xbcc3ffbb,0xbc4d9a4b,0xbcda58b4,0xbc32e18d,0xbc2ec1d7,0xbcb79063,0xbcabb984,0xbd10e73b,0xbcfd302e,0xbc8f3278,0xbc9a39d6,0xbc4117dd,0xbb7e8077,0xba638914,0xba35c2da,0xbc1c9780,0xba83265f,0x390f2a31,0x3c0add48,0xba8c4bd1,0x3c139da7,0xbbd777e8,0xbcb70e6c,0xbbfddcfb, -0xbae7f59b,0xbb1af56b,0xbc3e9110,0xba77ff27,0xbc22812c,0x3b892260,0xbc8bf840,0x381ffb43,0xbc4d7066,0xb947d37c,0xbc1c1c11,0xbc557aba,0xbca567ea,0xbc9c19fc,0xbce7bd4b,0xbc779a24,0xbc5ca2f7,0xbcdc2fa7,0xbce8d8e2,0xbd5926b2,0xbd4d1c72,0xbd018559,0xbd19f0de,0xbce12124,0xbc5f97c9, -0xbb6217fc,0xbb58ebbc,0xbc488f50,0xb9955c37,0x3b5c7ee6,0x3c5d3f73,0xbb9f0065,0x3c2f61b2,0xba4ea16b,0xbcb405a8,0x3c6a4101,0x3aab1d2d,0x3c582098,0x3c30458f,0x3c0c8d47,0x3c292d42,0x3c29169b,0x3c1627e3,0x3af40df7,0x3bce5794,0x3c76c49b,0x3b8de89e,0xbbe12aa8,0xbc1ed2e4,0xbca889ec, -0xbd83071d,0xbd53646e,0xbd17faa5,0xbd3566d1,0xbd44ae2f,0xbcef4bec,0xbca0e6f7,0xbc80f6a0,0xbc1bf177,0xbb515b6a,0x3b90888b,0x3c823e28,0x3ca404d1,0x3c80b49f,0xbc441475,0xbc61d1fe,0x3d086297,0x3c9bfc29,0x3cc3c5a9,0xbc829e02,0xbcdd4afb,0x3c346055,0x3b96b021,0x3b9eb098,0x3b9d47ed, -0x3c81c9cc,0x3c46a335,0x3c0f7577,0x3be98825,0x3b9a54a9,0xbb828443,0xbbf7326e,0xbc8a82f4,0xbce7bc62,0xbce9cb83,0xbd3850c9,0xbd1ce585,0xbc970d7e,0xbc8e4613,0xbd106ee9,0xbcea6546,0xbd0ac114,0xbd12e49b,0xbce7843c,0xbd212cf9,0xbd22e1ac,0xbc994f31,0xbd0df9f8,0xbd245bf3,0xbd38d072, -0xbcab6be6,0xbc80a4ab,0xbcb6ddee,0xbcdc4667,0xbc40605e,0xbc975791,0xbc8d9388,0xbbfd8023,0xba83a1b9,0x3c9d8c68,0x3c842dee,0xbba3f8ad,0xb9d39f9d,0xbacb39b6,0x3ae15d26,0xbb448e28,0xb915a15c,0xbb52f113,0x3c17e66b,0x3bddf1d0,0xbcaf6072,0xbc93842a,0x3d1ccc4b,0x3d68cf67,0x3d4bb67a, -0x3c9a32c8,0xbcf054d3,0xbd2ea140,0xbd44e44f,0xbd2e36c0,0xbc8eaaab,0xba3bf100,0x3cbd6d26,0x3bdff9b1,0xbbd383ff,0xbcf2cb9d,0xbd0e845e,0xbd112e21,0xbcab4259,0xbc451dc8,0x3b47aa56,0xbc18686a,0xbc884432,0xba893891,0x3a447c62,0x3c1f4725,0x3c36bf7a,0xbac63c65,0x3bccddfc,0x3b6224c7, -0x3a6e5c88,0x3b8c7f9b,0x3bfaf281,0xbbcdc9b2,0x3c68c578,0x3d02e4cc,0x3d17d6c6,0x3d2949f6,0xbb783d9f,0xbcb6ce8d,0xbd66aa81,0xbd770262,0xbd323d23,0x3bc99495,0x3c977bf0,0x3c673b13,0xbd00ff18,0xbd6f57bd,0xbd601189,0xbd6f447c,0xbd53eeec,0xbd40c627,0xbd356592,0xbd2830c2,0xbcffc3db, -0xbcd27991,0xbc465df4,0xbc7c0ace,0xbc8d43b4,0xbba4e472,0x3b906c89,0x3b0c8dfd,0x3abfc58c,0xbbae8ea6,0x3b2817a9,0x3b06507c,0x3b1db282,0x3b85d91e,0x3c36e445,0x3cbce847,0x3caf71ee,0x3c7fd27d,0x3c00479d,0x3bb2f698,0xbc626e6a,0xbd321316,0xbd483448,0xbd5218cf,0xbd27201f,0xbd086439, -0xbccc5e38,0xbc17e45a,0xbc75cadb,0xbc44cda1,0xbbe37bf1,0xbc5a69ec,0xbc67eee8,0xbc8b1062,0xbb9b2ad1,0x3b8650cc,0x3c170c63,0x3aea34eb,0x3b2464aa,0x3b0b58b0,0xbc072efb,0x3abcd14a,0x3c2754e3,0x3c9222f1,0x3c95003f,0x3bd245e6,0x3c054bda,0x3c376005,0x3c0829a4,0x3bf85b27,0x3a14a61f, -0xbb0153a4,0x3b9b1a00,0x3bf4410b,0x3bf27811,0xbc3ac1cf,0xbc308eca,0xbcda93cc,0xbc8b49c3,0xbc4c099e,0x3b93e68b,0x3b938366,0x3ba43ec6,0x3be63c27,0xbc78c31b,0xbc722f0b,0x3b91669b,0x3bb62c0c,0x3b4e7d9c,0xbba62886,0xbc43f1bb,0xbc42574b,0x3b809da0,0x3c2e8989,0x3c49fcd4,0x3bf764a0, -0x3bdfa622,0x3bbf7757,0xbae15830,0xbb5f225e,0x3a1cf9e8,0x3bbafebc,0x3c266724,0x3c287ecc,0x3c4c2d0b,0x3c80bdd9,0x3c7be85f,0x3c080e42,0x3c42084c,0x3bb08dbc,0xb9b3af7c,0xbc48ed1d,0xbc52ecc5,0xbbaa21d6,0x3b539be9,0x3a8d064b,0x3b45961f,0xbb47cac6,0xbbde685d,0xbc12e97d,0xbc298c97, -0xbc67a865,0xbcabe29e,0xbc33bf50,0xb8c6367f,0x3c2e67ca,0x3c69a450,0x3c8a4dc5,0x3ca2919e,0x3c7bfab6,0x3c8b2c19,0x3c168170,0x3ac5f105,0x3b97b487,0x3bb9b6b0,0x3c193853,0x3c17e7e3,0x3c4ca44a,0x3bf85046,0x3c0c700d,0xb9a729c5,0x3b835b49,0xb9f95133,0x399a7800,0xbb6a04f1,0xbc11d409, -0xbc55efb4,0xbc1734c7,0xbabbf0d0,0x3a5cdbbf,0x3b136f8b,0xbae2036f,0xbb04d6ab,0xbb1fb810,0xbb2f317a,0xbba678cc,0xbb91202b,0xbb46b9d7,0xbb2815d6,0xbb483008,0xbbd4a2d5,0xbc261fb4,0xbc2294dd,0xbc16bb90,0xbbf8a18d,0xbbc3f644,0xbb14931d,0xbb175a0a,0xbc010a7a,0xba49dadd,0xbb9e9415, -0xb9c3109a,0xbad62a04,0x39c584aa,0x3b6926ee,0x3a2c35f2,0xb9d40212,0x3bb54094,0x3c30a1f1,0x3c273f84,0x3c136005,0x3bd90fb6,0x3b342ef3,0x3bb6fd96,0xbc543e94,0x3bd1a586,0x3b733c45,0x3b56d65d,0x3b432a98,0x3b08988c,0x3ad8f4e5,0x3ad17489,0x3b05b5cc,0x3af40ec4,0x3b061522,0x3ac6a3b4, -0x3af616db,0x3af49447,0x3b391f27,0x3b4d34bd,0x3b5b771b,0x3b57ef64,0x3b3d6c31,0x3bc77060,0xbc47bfb9,0xbc806635,0xbac05b30,0xbc1fb6ec,0xbc7f5d51,0xba3b2f87,0xbb026ff6,0xbab1b229,0x3a0411de,0xbb21f3bf,0xbb46e2b8,0xbb137113,0xbc58ca8b,0xbc0b9f67,0x3a5aa2dd,0xbc6c428a,0x3b8e6e0d, -0x3c843449,0x3cfd4238,0x3c269387,0x3c4c0b8d,0x3c7e7258,0x3c91fe9c,0x3cb1961a,0x3cb69354,0x3ca50ab0,0x3c91f60b,0x3c856394,0x3c81e66d,0x3c8123cc,0x3c81ac41,0x3c859d07,0x3c7538d3,0x3c73910f,0x3c805e68,0x3c810bad,0x3c6b9c0f,0x3c6caf75,0x3d0b5f35,0x3cce42b5,0xbc749193,0x3d0a9926, -0x3cda8c8b,0xbc425674,0xbc1aa167,0xbc137484,0xbc2a3dc0,0xbbbe2a68,0xbb949108,0xbb4026bd,0x3cd460fe,0x3d047431,0xbc6f5dc9,0x3cc1b76c,0x3be95729,0x3c504ac6,0x3bf385bb,0x3c88736b,0x3cb00e76,0x3d09dac5,0x3d107a48,0x3ce3979c,0x3cb14eff,0x3c941f81,0x3c99438a,0x3c91b085,0x3c93174f, -0x3ca5a3a7,0x3c956883,0x3c9cf918,0x3cb25983,0x3cb33de8,0x3c8bf39f,0x3cd8a884,0x3c657b46,0x3c93af10,0x3cd4b25d,0x3c81b178,0x3c7899db,0x3cb453fa,0x3c8af707,0x3cb966a0,0x3cbc8460,0x3ca85ec8,0x3c7e66ee,0x3c89427e,0x3c85c1ae,0x3c4190e4,0x3c506976,0x3c3fa8d6,0x3c469920,0x3ac3a414, -0xbba3a496,0x3c11158d,0x3cac893f,0x3d62f2b5,0x3d7f9db9,0x3d3ebeb7,0x3d06e07a,0x3cb0a122,0x3ca3fc8e,0x3c9afeda,0x3ca080cc,0x3cbfee75,0x3c894708,0x3c8f2347,0x3cb5e55b,0x3cada8cf,0x3c8eb872,0x3cc172f9,0x3ce160a0,0x3cb46990,0x3ca3761d,0x3c9312b7,0x3c8dfb6d,0x3c961a76,0x3c38d78b, -0x3bbf4111,0x3c63b378,0x3b5e27cf,0x3c37601d,0x3c7d8c9d,0x3c30dbe7,0x3c009018,0x3b841971,0x3bebb0c0,0xbc4116a4,0xbc722976,0xbc99b4c6,0xbb078b24,0x3c89e397,0x3d95f136,0x3dad7b3b,0x3d718999,0x3d14552c,0x3cb30c4f,0x3ca42a2a,0x3c9f5e78,0x3cb3f3ef,0x3cff62be,0x3cd7bc72,0x3cdcc163, -0x3d0ba75a,0x3d069ac9,0x3cb7e20c,0x3cf7bc81,0x3cb249e4,0x3c3c01ad,0x3ca258ea,0x3c4a8687,0x3be56103,0x3bd97e10,0x3c080a6f,0x3c01b6dd,0x3948d18f,0x3b8f70cc,0x3b3b7b64,0x3c292b0a,0x3b7fe092,0x3a55fa3d,0xbc82b07c,0xbc69443c,0x3ce8b87f,0x3cce9082,0x3c1b2f1f,0x3c658c48,0x3c3b1f73, -0x3cbd81c8,0x3cef2862,0x3d0ac554,0x3cc12fe4,0x3bf4cbbd,0xbc8e2795,0xbc3a48bb,0xbca33660,0xbd0f48a2,0xbc8c637f,0xbbacfae6,0xbbe67762,0xbaac4a32,0x3abab4bf,0x3cc080e9,0x3cc3b54d,0x3c55e291,0x3cac778b,0x3c4ef13b,0x3c64b374,0x3c917b0b,0x3c4313f4,0x3bfe77fc,0x3b8df37a,0x3beacdcb, -0x3b282f46,0x3c0dada2,0xbb43b349,0xbb4fa178,0x3ba8f855,0x3cbe6752,0xbc45cc56,0xbcad475e,0xbd2adf9c,0xbcb7b04f,0x394afdb0,0x3d4bb1cc,0x3d5887f2,0x3d1b7fd4,0xbc2c8ef7,0xbcdbaf4b,0xbc72b0be,0x3c040a94,0x3cd27dcd,0x3ccd5a85,0x3d06c0fa,0x3d0bf78e,0x3d255970,0x3d12fad8,0x3ccb5f0f, -0x3c843727,0x3c006dbe,0x3c24b9e7,0x3c8d476e,0x3ca25dee,0x3c8a1f2b,0xbb0860c0,0xbadddca2,0xbafeefaa,0x3b80dc3f,0xbb731908,0xba869ce7,0xbba8fe77,0x3c7587cf,0x3c9a8688,0x3bc25547,0xbc1b8deb,0x3d6bf8c6,0x3dadc4cd,0x3d8e9f51,0x3d971653,0x3dce386f,0x3d7b70ba,0x3d504c5f,0x3d7dad9c, -0xbc4a4589,0xbcdc2af8,0x3bec0228,0x3cd33f06,0x3d1d1587,0x3cd9d604,0x3c6a5213,0x3a29b955,0xbbac22d6,0x3b492d44,0xb8643965,0x3b660e96,0x3c040038,0x3bb18b14,0x3cb6259e,0x3c822bcd,0x3c1b4189,0xbab16572,0x3b43789b,0x3adc853d,0x39b6b457,0x3b640858,0x3bf7dfb2,0x3a9ea5fb,0x3c9d4f9c, -0x3cef48fc,0x3d52daa8,0x3d55f9d4,0xbb4dbbca,0x3c1b0e6c,0x3d4db2c6,0x3dc8795d,0x3e206500,0x3e120465,0x3ddc9321,0x3d493055,0x3c321c6a,0xbbf6a9ed,0x3c1246e1,0x3b8d2ce0,0x3c2aee4d,0x3868912b,0x3c4fe9dd,0x3c382e81,0x3ac0c9a1,0x3a8c5b32,0xba704e8e,0x3b0dd1b9,0x392a1a12,0x3c010b4b, -0x3c9dbfa4,0x3c2093bb,0x3c1a4fc4,0x3befc24d,0x3a8b821f,0x3b99381a,0x3be50ca6,0x3b184b95,0x3bd75832,0x3caa6d1d,0x3cc239e1,0x3ce24a8d,0x3c661626,0x3c204499,0x3c8e1704,0x3d8478fe,0x3dc24fd2,0x3da6ed0b,0x3d80bbc7,0x3d949c96,0x3d8fbbf8,0x3d916bec,0x3d5da9fb,0x3d64fd33,0x3dac6432, -0x3d7877dd,0x3d38e24d,0x3d019c64,0x3c3b678e,0x3b6caf06,0x3b93a50c,0x3be3e4ed,0x3c093c43,0x3c72a92d,0x3c71a595,0x3c74200a,0x3c370a9a,0x3c895fa1,0x3c8c26c2,0x3c328a46,0x3c502e57,0x3c61df65,0x3cc88908,0x3c84a389,0x3c6cbab8,0x3c6e5d8b,0x3c6eac91,0x3c8bc8e8,0x3c77cdc4,0x3d1b6ac3, -0xbb7ab9ce,0x3cc54878,0x3ceb5dc6,0x3cd47355,0x3cb68cd0,0x3cde98f3,0x3cd65888,0x3cd28302,0x3adb6650,0xbc062ba0,0xbbf6b643,0x3c63d973,0x3d0eca09,0x3d4484e1,0x3d57df62,0x3d360729,0x3cb2c696,0x3c95d1a1,0x3c749b1f,0x3c19f09e,0x3c4183b0,0x3c8d0cb1,0x3cbc5b5d,0x3c852b9b,0x3c053f10, -0x3bbef612,0x3c29e880,0x3c4ca34d,0x3c564630,0x3c83d9ed,0x3c8f9fa8,0x3c871c19,0x3c980080,0x3cbb000a,0x3c9e2273,0x3cb98b89,0x3ca3c877,0x3c5a1e90,0x3c8e9678,0x3cccf73b,0x3d003655,0x3cf2301a,0x3ce8946d,0x3cf51ad8,0x3cd94312,0x3cc0de75,0x3c86fc8c,0x3c59aacd,0x3c123c74,0x3bf51bfd, -0x3be8faa8,0x3c0f78f1,0x3c27411a,0x3c7090ce,0x3c731fb2,0x3cad032d,0x3ca0f590,0x3c2309a7,0x3b87b736,0x3c18c513,0x3c58947b,0x3c948a98,0x3c499da1,0x3c35be4e,0x3c234aaa,0x3c0cf621,0x3c1fef66,0x3c42dd68,0x3c4d5c9a,0x3c5c0c0a,0x3c5e33c3,0x3c8562ac,0x3bccfca0,0x3cd116e0,0x3cb95802, -0x3cbc7641,0x3cb9590c,0x3cb8f53d,0x3cb831b1,0x3cb76473,0x3c85f465,0x3c35cd45,0x3bdf29e5,0x3b69d99e,0x3a6c4409,0xbafaada3,0xba9709f2,0xba833f71,0xbaa27897,0xba9abb53,0xbb4364ba,0xb938c5e7,0x3adea76f,0x3c1fd951,0x3c8a5d26,0x3c67e461,0x3c939e60,0x3cc7dc21,0x3cc1549a,0x3ce58929, -0x3cdbaa59,0x3cdb0d5e,0x3cc2ebe7,0x3cbb60f7,0x3cb5cdc9,0x3c9aa209,0x3ca4a35c,0x3cb1fbd5,0x3cdcafb5,0x3cb40ac3,0x3c9ca4c5,0x3ca4ad08,0x3c9e7cc3,0x3ca1840a,0x3ca1bcb8,0x3ca88670,0x3c9a4fd8,0x3c92b06f,0x3c885e13,0x3c7301b7,0x3c538190,0x3c292643,0x3c3537ad,0x3c378eca,0x3c38270e, -0x3c3fbb8b,0x3c400ac3,0x3c2ec36c,0x3caa7bb9,0x3c8a8c6f,0xbb9a7522,0x3cd6f976,0x3cb14e99,0xbb1b2ff2,0xbaafa41c,0xba8e6841,0xba6d0061,0x3a82d297,0x3add47cd,0x3b143118,0x3ca89c3d,0x3cebad49,0xbb9619c4,0x3c9ae239,0x3ca8bd96,0xbcc99437,0xbccf61c3,0xbcde4ab2,0xbcb78ffa,0xbcce5666, -0xbcc34840,0xbce9cfbd,0xbcf2d86d,0xbcde2846,0xbcf4b924,0xbcef8761,0xbcd1ca14,0xbcd6e8da,0xbcd2784c,0xbcd001a8,0xbccb5839,0xbcc7f90d,0xbcc3d3f8,0xbcc6eb4a,0xbcabc7d0,0xbcce7ced,0xbcb8ef8e,0xbb562180,0x3d24ccbd,0xbce296eb,0xbbcea716,0x3d12ee83,0x3d06ecac,0x3d02a8ea,0x3cf58772, -0x3cee6715,0x3ceaf935,0x3ce72d62,0xbbf84658,0xbcfd23ec,0x3d093c80,0xbbb7a634,0xbaaa1b3d,0xbd0473f0,0xbcc7004c,0xbce3f3a9,0xbccf09bf,0xbd1b190e,0xbd2a3e24,0xbd0e2ba3,0xbd2d4e41,0xbd257de3,0xbd00ab28,0xbd0611c5,0xbd034c53,0xbd053811,0xbd04919a,0xbd0294c0,0xbcf5ad30,0xbceb2b9d, -0xbcc0a5cf,0xbcccbe10,0x3c397c8a,0xbc27cde9,0xbc678971,0xbbdb788b,0xbbae001b,0xbc6fccea,0xbc8d2eee,0xbcbdd837,0xbc938cbd,0xbcb5a67e,0xbc950fda,0xbc259641,0xbc69fd2a,0xbc01b634,0xbc87b812,0xbcdd526e,0xbce5baa2,0xbcf9be3e,0xbcebc843,0xbd05b0cf,0xbccd59e5,0xbd5dffea,0xbd835583, -0xbd46be72,0xbd84fdbe,0xbd78e72c,0xbd276008,0xbd3aca9d,0xbd291e7d,0xbd23757c,0xbd1873d3,0xbd10a64e,0xbd0b20c8,0xbcf6c7e5,0xbcd8ea4e,0xbc595299,0xbbab57d2,0xbb24419a,0xba3b16a3,0xbb89e3b9,0x38544c3b,0xbb15f2ee,0xba3f4e68,0xbc3b3251,0xbbf6447c,0xbbd57000,0xbafc6315,0xba03ac1f, -0xbb29494a,0xbc042865,0xbc779053,0xbcbd19b5,0xbd050a23,0xbceca22d,0xbca71844,0xbccb4045,0xbc7717ab,0xbd7c1e1e,0xbda0dc84,0xbd6f59e7,0xbdaa9cf0,0xbd9cbaba,0xbd36e345,0xbd540c90,0xbd556204,0xbd52187c,0xbd5993f2,0xbd4fa908,0xbd39dfd4,0xbd183c66,0xbcc34a1d,0xbc3696d5,0x3c28ff2c, -0x3bc8f7ac,0x3c410b87,0x3b8e9bcf,0x3bba165a,0x3c2cbe5c,0x3bbb062d,0x3bfa798b,0x39d49b02,0x3a5bacdf,0x3ae7e92f,0x3c4510db,0x3b20da7b,0xbc162f82,0xbc95623e,0xbd07993b,0xbc144711,0xbd52ff51,0xbd8dbf90,0xbd99da45,0xbd87925b,0xbd8011ef,0xbd6a4410,0xbd493f71,0xbd1566bf,0xbd1cb653, -0xbd84c2bd,0xbd3ebdd1,0xbd18947a,0xbcbc1676,0xbc795b29,0xbc9179e3,0xbca7c4ff,0xbce186a1,0xbd11e742,0xbd0f53a7,0xbc0f496f,0xbb83a1d3,0x3b97b580,0x3adf3b7d,0x3b81feef,0x3c7ef376,0x3be96162,0x3b21608a,0x3b0ecd3e,0x3a369988,0x38e81561,0x3a4e38c4,0xbc15b703,0xbc299420,0xbc30f68a, -0xbbde2894,0xbd42cb27,0xbd48903f,0xbd1d742a,0xbd073f7e,0xbcdfe72a,0xbcdcd291,0xbcd8cbed,0xbc74b643,0xbd41887a,0xbd3a34d8,0xbd34dd5d,0xbc1dc0a2,0xbb1ef1bf,0xbca3f7e5,0xbcf7087c,0xbd41e5d1,0xbd6d1b29,0xbd3dfc58,0xbd0f9443,0xbc6161b9,0x3bb23a28,0x3b7a94ce,0x3b81763f,0x3c2acf2e, -0x3c2c2722,0xbae23299,0xbb016f67,0xba998b3d,0x3a6b49f8,0xbbafe75e,0xbb584603,0xbc26fd47,0x3c2aff0c,0x3aa448e4,0xbc37c6ff,0xbd25a5a4,0x3d875452,0x3d5d6bca,0x3d008d1e,0xbc44b218,0xbdd066cd,0xbe1ce8db,0xbe2a1b7a,0xbdd6ce3d,0xbddf7adb,0xbdb2385f,0xbd9c8b6b,0xbd9700f5,0xbda0a682, -0xbdc11bdd,0xbd84f550,0xbd28f876,0xbca44052,0xbc1e9e9b,0xbbec9939,0xbca8c4bf,0xbc84d644,0xbb4ccb67,0x3c998695,0xbbc793bc,0xbc0ce0b7,0xbb68426f,0xbb83d0e1,0xbaebfda4,0xbb1cfc55,0xbb291ea7,0xb9ea3f49,0xbb915c22,0x3c0f6c0f,0x3cac53ae,0x3d6017b4,0x3d5657fa,0x3c18acd2,0x3bfda10c, -0xbd28bcd8,0xbd7e8f63,0xbdaf05d2,0xbd67903a,0xbd147ea1,0x3a95f64f,0xbd773d80,0xbd8e3b57,0xbd5d3a76,0xbd25d989,0xbcdbdc25,0xbce15d3d,0xbd161be9,0xbd3d60da,0xbd2f796c,0xbd33feef,0xbd003f8c,0xbc480a7c,0x3a0a4b66,0x3a53a38c,0x3c9b66d0,0x3bbfda60,0x3b5f8d46,0x3be4326f,0x3a5a5508, -0xb98cac8b,0x3adc4541,0xbb56dd91,0x39d38dc4,0x3c431f96,0x3cb11b53,0x3c86e941,0x3ca7f6ae,0x3c1aa998,0x3cd44c8c,0xbccf5054,0xbda90dc4,0xbda8ff88,0xbdb0f480,0xbd9f61ed,0xbd7af4ce,0xbcc972aa,0xbcf0634e,0xbcea9094,0xbd2d69c8,0xbcf55caa,0xbcfea9df,0xbd324b67,0xbd092f40,0xbccb438c, -0xbc53b6d3,0xbbe7a606,0xbc14d680,0xbc19b333,0xba003bba,0xbb4acc1c,0x3c1a5554,0x3c295f32,0x3c1e1071,0x3b887d61,0x3bf0cb4b,0x3c10f1bf,0x3c901c6a,0x3c22758f,0x3c0d6152,0x3ba0396d,0x3bf6e51f,0x3c2e5085,0x3ca10646,0xbab62a5d,0x3c974485,0xbccef102,0xbd2a70fa,0xbd0bee5a,0xbd12bde7, -0xbca5fb87,0xbc96cfad,0xbd0e623b,0xbc526c75,0xbac8030e,0xbb12b05a,0x3bbbb533,0x3c338257,0x3c7d04d3,0x3c71d526,0x3c1accc5,0xb9af6d16,0xbb7eca8a,0xbaabc025,0x3c445af7,0x3c6c14f6,0x3c22d3c5,0x3c16f5c9,0x3ba83baa,0x3b902d57,0x3acc7f4e,0x3b18968f,0x3bb3a95e,0x3c1dfca5,0x3ba7fbfc, -0x3bb4d940,0x3c089082,0x3c3d19d4,0x3bbbd2ae,0x3bd82b4e,0xbc20c8cb,0xbbf5c3b9,0xbc2bf9f1,0xbc2e478c,0xbc16563d,0xbc2959ad,0xbc4d5063,0xbc4784ed,0xbc45ccc2,0xbc4d149d,0xbc760755,0xbc75d62a,0xbc3c979c,0xbc071623,0xbb2d1cc7,0xbb7939e3,0xbb186242,0xba35e2e9,0xbb0f1520,0xbc0b5e22, -0xbc16882a,0xbad25586,0xbb316bd6,0xbb9cbdad,0x3a612db5,0x3c281a73,0x3c5b0bd6,0x3c686af6,0x3b3cd145,0x3b90d23a,0x3b4f355c,0x3c01ec26,0x3bbbcb84,0x3b877ebf,0x3b4ce8dc,0x3bb283cc,0xbb102303,0x3ce20099,0x39f3f9af,0xbaca842e,0xbbb53dbd,0xbc022312,0xbc36c885,0xbc6f1de6,0xbc927af8, -0xbc64652d,0xbc15e491,0xbbaaead5,0xba944096,0x3b11936e,0x3bad402d,0x3b8cb2d1,0x3b647d66,0x3b3b7952,0x3ad5d6fc,0x3b59e820,0xba8a3784,0x3b89034a,0xbb23e25b,0xbb8ee6b8,0x3af22a0d,0x38c3c018,0xbb9e07fd,0xbb99ec00,0xbb8cc74a,0x3ac87eb8,0xbad4d989,0xba2159e1,0x3bb8eced,0x3b881686, -0x3c2f9c33,0x3c0a2005,0x3b2670b5,0xbaf7845a,0xbbea617a,0xbb75c902,0xbbc6b06f,0xbbe7598f,0xbc037b13,0xbc0fc7b3,0xbc32d625,0xbc03abce,0xbbdd92f8,0xbbb17dec,0xbb8d1fd4,0xbb51e518,0xbabe20f3,0xbb148933,0xbb2996b0,0xbb3ee0e9,0xbb60337c,0xbb46a496,0xbb93ba63,0xbba3173d,0x3bc2393a, -0x3cf64448,0xbc06a385,0x3bb7b058,0x3d0af01f,0x3d08fcef,0x3d057545,0x3cfc0545,0x3cfc112b,0x3cf75726,0x3cec357d,0x3c00fdc3,0xbc02e647,0x3d09bf23,0x3c3df76a,0xbbf4929e,0x3cd879fe,0x3c1daf8e,0x3d02d934,0x3c9b3043,0x3cb04017,0x3ca19513,0x3cd8a483,0x3cee0b4e,0x3cf8ab62,0x3ce97902, -0x3ce4b141,0x3ce85d8c,0x3cdb02fd,0x3cd86516,0x3cd859e4,0x3ce098b3,0x3ce2e425,0x3ce40da2,0x3cdff449,0x3cc34c39,0x3d08e20e,0x3c3b7656,0xbc491d15,0xbd47051d,0x3ca04be3,0xbc214c52,0xbd37c36e,0xbd3badc3,0xbd3af17c,0xbd2c24ff,0xbd331901,0xbd30b4c6,0xbd2552c9,0xbc1872f9,0x3cb5d857, -0xbd442880,0xbc843c4c,0xbcd83322,0x3ce33a02,0x3c6bb16a,0x3c6fcf32,0x3c8341e3,0x3d0ee007,0x3d2d9afa,0x3d30bf55,0x3d1c890b,0x3d0ed7b0,0x3d136705,0x3d024993,0x3cfe8f11,0x3cffacca,0x3d0d8592,0x3d120d51,0x3d1318ff,0x3d07475d,0x3d015c1a,0x3d024a15,0xbc84ec7f,0x3c8c10f1,0x3c8139ac, -0x3c218ef5,0x3bba19f9,0x3c91eaff,0x3c82a1a6,0x3c8cfaaf,0x3bffea6c,0x3c97b14e,0x3ca8c56d,0x3c5001c4,0x3c80b36b,0x3b06ea4a,0xba031904,0x3c9d9064,0x3b174298,0x3ca93858,0x3c3eb6b8,0x3b7df579,0xbb16bbbb,0x3d075de0,0x3d4fccda,0x3d6eed92,0x3d5572c1,0x3d3e7455,0x3d462355,0x3d1b6aed, -0x3d15c1f2,0x3d1f8fc8,0x3d315c17,0x3d344d71,0x3d385a18,0x3d162745,0x3d1f9736,0x3cbbbfd8,0x3c458966,0x3c7add1c,0x3c63ffda,0x3c88281b,0x3bd34a42,0x3c941150,0xba21ae85,0x3c458656,0xbae0f312,0x3bf9adc7,0x3ae2f197,0x3c3bc2b2,0x3bcac675,0x3b90f323,0xbbfc3693,0x3c12de60,0xbb0da2b0, -0x3cb6a18b,0xbaa52b4d,0xbc3ee38f,0xbc31a762,0x3d2d6f24,0x3d9409d7,0x3da6d090,0x3d8a0a68,0x3d6764b5,0x3d784a8b,0x3d3f8251,0x3d386d2d,0x3d498d8b,0x3d681693,0x3d7218e0,0x3d6f7562,0x3d4a79b2,0x3d30e279,0x3cf4dfa8,0x3c2b675b,0x3cd7c99c,0x3c4254cb,0x3ca1c3df,0x3c8066ef,0x3c9649a2, -0x3c282592,0x3b87078f,0x3b76693a,0x3b180c1e,0x3bfa4039,0x3c6345d8,0x3c44ba54,0x3be7b3e1,0xbbf46549,0x3c2580e3,0x3ba90b25,0x3c5e0042,0x3cb3903c,0x3c64ac70,0x3bdda99b,0x3cf5213c,0x3d1ebc54,0x3d3204e4,0x3d71240e,0x3d59a4cc,0x3cca4f85,0x3c82b1d6,0x3c380255,0x3b99119c,0x3c9cf7d3, -0x3c9ecd7a,0x3c38bccb,0x3c794957,0x3cfa9a11,0x3cb80fb8,0xbb5078af,0x3c8a40d3,0x3c664100,0x3c23a912,0x3c074ace,0x3c6951df,0x3bfe2e08,0x3b5f8bf3,0x3b8cde2a,0x3bb666f6,0x3b1dd71c,0x3b2c6d69,0xbac59938,0xbbe87262,0xbc18d8a8,0x3c37c811,0xbcc2b702,0xbc4fab91,0xbb473509,0x3c15d62b, -0x3b633eb0,0x3c272ec3,0x3c75d7b8,0x3c9f0b53,0xbb31cdbf,0xbc8bbba0,0xbd1e149c,0xbc98bd02,0xbc0ef0b1,0x3c03acbf,0x3caeca5e,0x3d1be915,0x3d85e7e8,0x3d3da4c5,0x3d167301,0x3c2afd7d,0xba88db91,0x3be0434e,0x3c591a4f,0x3c9f35bb,0x3c9d6d28,0x3b9567bf,0x3a5559c4,0x3b066e3a,0x3b4e5d57, -0x3b32459a,0x3b2ea19e,0xbb432dfa,0x3c0b007b,0x3c850c54,0x3c0f982d,0xbb42537d,0x3d4495bc,0x3d3cd220,0x3cf08434,0x3c389b87,0x3ce33da4,0x3d00e646,0x3d41c352,0x3dadef24,0x3d0841d1,0x3c5f55fc,0x3b6d2cc7,0x3d37b4a5,0x3d783b0c,0x3d4dd004,0x3d4d0678,0x3cdeafcd,0xbb0be21b,0xbb9abd79, -0x3bfd680a,0x3c27fa42,0x3c2d07d8,0x3c9174d1,0x3cf3a72e,0x3b1e2116,0xbba8677b,0x3a97fbf6,0xbabe9788,0x3b853350,0x3b178dde,0x3a1815c2,0x3ade3e2d,0xbac596d5,0x3b28056c,0x3c717657,0x3d31bdb8,0x3d37fde6,0x3c1ad9d5,0x3c602e1d,0x3d7e92af,0x3dcb6878,0x3e28abf4,0x3df9e267,0x3d9c8821, -0x3d1dbfbf,0xbcc692cd,0xbd1547e3,0xbccfd5d3,0x3c113df3,0x3c8d63e5,0x39eb0dc8,0x3c388d76,0x3c89e7b8,0x3cbf0c2d,0x3c9324da,0x3c2516ae,0xb82b371b,0xbc4d6fcb,0x3ade3777,0x3cc7b7e9,0x3bbaa8d2,0x3b79b367,0x3c0acc99,0x3b49e898,0x3b0280b6,0x3af878a1,0xbae538e8,0x3b0a1e16,0x3c9d39a3, -0x3cb60f91,0x3cff0494,0x3cc7f70f,0x3ca7fba8,0xbc56de57,0x3d060b59,0x3dac971a,0x3d99a263,0x3d8a8145,0x3da55e85,0x3dc7e54b,0x3dda7f18,0x3d9e7cc0,0x3d6bbf05,0x3d181664,0x3cb5f238,0x3c5f7ad0,0x3be855f7,0xbc172957,0xbc9e5259,0xbc7b6d06,0xbc824eac,0xbbb31576,0x3b8bf1a8,0x3aedecc8, -0x3c4bb13c,0x3c50023e,0x3c1f104d,0x3c240c5c,0x3c1979c4,0x3c211b3d,0x3c6bbf7d,0x3c98059b,0x3ca2d650,0x3c82cc6e,0x3c2e7863,0x3c0e0899,0x3c168add,0x3be277d1,0x3c8f68f5,0xbcdd48d8,0x3c23d246,0x3cd99770,0x3cad6c02,0x3d048786,0x3d167c69,0x3d22b9db,0x3d54c502,0x3d0b4c03,0x3cb07b95, -0x3c2a6a86,0x3ce0c07f,0x3d1afc98,0x3d3fc403,0x3d3faffc,0x3d3c90a3,0x3d1a3143,0x3cf000d6,0x3ca2313e,0x3bd3f352,0x3bf3ffe8,0x3c29db9d,0x3bdddced,0x3c80482b,0x3c7754d0,0x3c1517e5,0x3c096e86,0x3c0c6b74,0x3c8168d6,0x3c2c976b,0x3c36f78d,0x3c7fa694,0x3c7e5bb8,0x3c961471,0x3c57fe39, -0x3c6447b1,0x3c2742b4,0x3c8ab7ae,0x3cc2e9eb,0x3cab51ac,0x3cbe3bbb,0x3cd23ffb,0x3cf802d5,0x3d12e3ef,0x3d00a1d0,0x3ced52b6,0x3cba0cea,0x3c7197bc,0x3bbf619f,0xbb099730,0xbaa0aa8d,0xb98cf9d2,0x3aeeb0fa,0x3b06f3d8,0x3bb76075,0x3b3bba14,0xba8dbd52,0xba79fb7e,0x3a4678f9,0x3b90a245, -0x3ba14c62,0x3c511d52,0x3bd6870d,0x3c50c462,0x3b30b35e,0x3c28b1e2,0x3bc7ee82,0x3c3f5587,0x3c06d5e2,0x3bb2f3e2,0x39e38715,0x3c10ad35,0xbbfb877e,0x3c8d2303,0x3c9a32a4,0x3cad66a8,0x3cc11411,0x3cd6670a,0x3ce2b516,0x3cf34811,0x3cce3999,0x3cb13ec5,0x3ca021e4,0x3c8305e8,0x3c5d29ec, -0x3c229489,0x3c30e585,0x3c2734ad,0x3c22cb85,0x3c1a82db,0x3c0535a5,0x3c31bfcc,0x3a87a844,0x3c58d82e,0x3c7d9787,0x3c39fb40,0x3c3179e9,0x3c901006,0x3c981d8d,0x3c961be2,0x3c415da1,0x3c91db38,0x3c8b3516,0x3c43a908,0x3c59cf41,0x3c06e917,0x3c2a4a24,0x3c8947cd,0x3c33f206,0x3cc3a658, -0x3c9f4db7,0x3cad61db,0x3cb101c1,0x3cb4f39d,0x3cba8143,0x3cc8f705,0x3cba6f47,0x3cb042a4,0x3ca24b12,0x3c9a166a,0x3c919c61,0x3c84dd2f,0x3c871b6d,0x3c8762e4,0x3c87942a,0x3c8c5316,0x3c8723c8,0x3c9f9315,0x3c2a616b,0xbb1bc5f0,0xbcaf0b14,0x3c7f711b,0xbaa42236,0xbcbcbf01,0xbcbbc848, -0xbcafa27d,0xbc95b3f5,0xbca084cd,0xbc98277e,0xbc8e1db7,0xbb1ac4df,0x3c7f63f7,0xbc99c60a,0xbb83d5b7,0x3cbebc97,0xbca3e002,0x3bac3b57,0xbce22e1a,0xbc8d61dc,0xbc9f653c,0xbc807527,0xbca1afbf,0xbcaaac85,0xbca7879f,0xbcb3308c,0xbcb55154,0xbcb0b669,0xbcb33d81,0xbcb34d68,0xbcb31888, -0xbcaff626,0xbcada750,0xbcad8795,0xbcaae0e6,0xbc8ebfbc,0xbce03e1b,0x3bf6f4e4,0x3ceed7bb,0x3d477ee9,0xbac321fa,0x3cda5d61,0x3d3e6a7d,0x3d3dbd46,0x3d3aa0fa,0x3d25e769,0x3d3bb0ef,0x3d3ef211,0x3d3a7222,0x3cce093f,0xbbdc9e8a,0x3d3284e7,0x3cf28bbd,0x3cee2c35,0xbcac6ffd,0xbcb28077, -0xbc977667,0xbc26d6c5,0xbc9dadd8,0xbcbe8b10,0xbcc17628,0xbce466da,0xbcee2a20,0xbcdd7722,0xbcdb3076,0xbcdc6b79,0xbce49aea,0xbce73c60,0xbce47dad,0xbce6f843,0xbcc71c15,0xbcc558e4,0xbc897966,0x3d084ffa,0xba9553bb,0x3b480b8f,0x3b9416a5,0x3bfed9ce,0xbb078fa7,0xbc01c7e8,0xbc0987a5, -0x3afe4819,0xbc1375c0,0xbc3ee1d4,0x39cd0661,0xbb63e564,0x3be1ad72,0x3a92793d,0xbc85f3a0,0x3b98dc42,0xbc54c1d0,0xbcfde1be,0xbcbb05dc,0xbb66294e,0xbc99949c,0xbcdf3e14,0xbce50e0e,0xbd138c56,0xbd1e138a,0xbd0d952a,0xbd12e2c8,0xbd1275db,0xbd109f41,0xbd0c39f9,0xbd06719f,0xbd097ecd, -0xbce05b96,0xbcf516a4,0xbb8f2b0c,0x3c71a7c1,0x3c196ed9,0x3bee84f1,0x3b88bc86,0x3c64a1d4,0x3aa0bad3,0x3c02616e,0xbc5ded8c,0x3bb93ee9,0xbbbdb39a,0x3c1d00a0,0x3bbe24a3,0x3be80519,0x3b633945,0x3aed2a61,0xbb1e217d,0x3b89dbe9,0xbc81c015,0xbd0d0898,0xbc8dd91f,0x3c8b65dc,0xbbc38601, -0xbcb28a90,0xbcebb515,0xbd306904,0xbd4fa1d2,0xbd2a39a6,0xbd1ac40b,0xbd2107e9,0xbd2e986c,0xbd3b519d,0xbd391c66,0xbd35f847,0xbd0bf131,0xbcfb9d76,0xbbc9bb85,0x3cbd23a1,0x3b3f6b96,0x3c9cdb89,0x3ba75a5d,0x3b7e9a15,0x3c024c6c,0x3b22de50,0x3b79aa60,0xbbb1419d,0x3a71de59,0x3ab0b829, -0x3c1737bf,0x3bc8345b,0x3bc178e2,0xbc28d63d,0xbc5be1d9,0x3ce2a5c9,0xbd4de30f,0xbd785bc0,0xbd82a421,0xbd9bb626,0xbd8aab31,0xbd687c3e,0xbd5ffc80,0xbcc97746,0xbca5fd44,0xbd43ffcb,0xbd6889fb,0xbd499ad1,0xbcb4ff7f,0xbbd9b720,0xbbd61b25,0xbd0d16e5,0xbce89db1,0xbd17c190,0xbc4102f1, -0x3c5d7126,0xbc0af460,0x3baef858,0x3b39de2a,0x3c09726d,0x3c6800f8,0x3b269d63,0xba67587e,0x3b5a7b78,0x38854a85,0xbb7f8c29,0x3b7a82e9,0xbb62bcce,0x3abad48e,0xba5a7441,0x3ccf0308,0xbcd6818b,0xbd4893ff,0xbd0919a6,0xba284141,0x3cdd8086,0x3c7f7dce,0x3c6b30d9,0x3cebe4cc,0xbabf61d4, -0xbcb5a1ed,0xbd0176a4,0xbc96c62b,0xbc4ad932,0xbc0df0ad,0xbce6332e,0xbd184a63,0xbd33e6e3,0xbcd3d7d5,0xbcd19d27,0xbb54cb23,0x3c8376a7,0x3c35caa0,0x3c923b0c,0x3b09e11e,0x3a797c4b,0x3b284642,0xba56e3cc,0x3a666b4d,0x3a9898be,0xbae9a788,0x3a3ebaf4,0xbbf5ee1b,0x3be2b9e4,0xbaf10fab, -0x3b1636c6,0xbd05bf9e,0x3d53a24d,0x3c4f004f,0xbc37f658,0xbd46c942,0xbdf06ffe,0xbde9b6ac,0xbde88da7,0xbdc57e99,0xbdb186ba,0xbd8fe6aa,0xbd8bd1af,0xbd93d9e3,0xbd8f4ea5,0xbd5d9289,0xbd1fa994,0xbcba43f2,0xbc046331,0xbc072fcb,0xbc975c51,0xbc38255c,0xbb400529,0x3b069b91,0x3cf40760, -0xba923794,0xbbecd7d7,0x3b81eda0,0xbba13e74,0x392c49aa,0x3a6b6416,0xbaa6585c,0xba5c0b7f,0xb9daf6e0,0x3b1ce04c,0x3ba8b97c,0x3d31abf3,0x3d2dce57,0x3cd1eaaa,0x3d21d29f,0x3d379a40,0x3d254d35,0xbbc2f11f,0xbc356c10,0xbc9b720c,0xbcb0135b,0xbcb7ce0a,0xbc606de4,0xbc22cf8e,0x3c255a6e, -0x3c219518,0xba132d94,0xbc98b5e6,0xbced9248,0xbcff3cfb,0xbcf9c27d,0xbcec6367,0xbc4a337e,0x3a67efc9,0xbb463c6e,0x3c7ffb5d,0x3aecfd41,0x3a2c5f6a,0x3bb5a05e,0xba9f4874,0x3a87e477,0xb76e655c,0xbab368bd,0x3a044c3f,0x3c00578d,0x3c99b675,0x3ca23c35,0x3d00a2b4,0x3c91859e,0x3d22141f, -0x3c45aea8,0xbcfae7a0,0xbce313b8,0xbd0aa53a,0xbc8e6af7,0xbafd2de0,0x3c7f8bb8,0x3c682ae9,0xb89f443e,0xbcee9147,0xbcceae00,0xbcc05662,0xbc7fcbba,0xbc42e9f0,0xbc49589f,0xbcb34e52,0xbc440128,0xbc460a3b,0xbc2bad6d,0x3b8c6540,0x3988f10f,0x3c3c52f0,0x3beb3225,0x3b915ea5,0x3b493a29, -0x3c399a23,0x3c38644b,0x3c81ac14,0x3c61dd00,0x3c90c48c,0x3cab46aa,0x3c87c696,0x3c8525b3,0x3cc74dc7,0x3c8ba401,0x3d0fabca,0x3c21405c,0xbc29564f,0xbbd5be2a,0xbc23c584,0xbc7d8157,0xbca58b90,0xbc88927d,0x3b3fac43,0x3c7c89eb,0x3cb609b9,0x3c85f4cb,0x3c6c9063,0x3cb5384f,0x3c909e42, -0x3c81c6cd,0x3c509320,0x3be34e0f,0x3baf94ab,0x3c4c46e3,0x3c2f1776,0x3c13acc2,0x3c4e361d,0x3c3fd9f7,0x3c3a6d6a,0x3c20f912,0x3ba2d32b,0x3bb70f5b,0x3a5a0329,0x3ac7039b,0x3b572c80,0x3bc8b168,0x3c339a5d,0x3c47573d,0x3c8f3c80,0x3c4d6121,0x3c0c8053,0xbb95a799,0xbc5e4a82,0xbc296e91, -0xbc51a332,0xbc24283a,0xbc132cab,0xbc393661,0xbc0ffb83,0xbc158782,0xbc01c284,0xbc1260e1,0xbc13d7a4,0xbc198eac,0xbc36e07e,0xbc465618,0xbc626658,0xbc4ee741,0xbc7f054d,0xbc34e8dc,0x39c0579f,0x3afc0c3e,0x3b903562,0x3b56a7b1,0x3bf62e6d,0x3ba487b5,0x3c414364,0x3b8770d3,0x3c7b4d05, -0x3c086d31,0x3c63763e,0x3c235c7a,0x3c2a4218,0x3c432e2c,0x3c829753,0x3c006358,0x3cd2546c,0x3bbb3647,0x3b33a5b1,0x3aa72b0c,0xbb3a6474,0xbbcf7fd7,0xbc25efd7,0xbc57bdad,0xbc2779e5,0xbbe62000,0xbb7efd54,0xba699c5b,0x3afeaf3b,0x3ba4c25f,0x3b95010b,0x3b85a658,0x3b423618,0x3b2a5792, -0x3b039878,0xba74854d,0x3c4be4ee,0x3b226f14,0x3bab7223,0x3c06ec40,0x3c3977ac,0x3bf1b6fb,0x3b8baf4e,0x3bbefafc,0x3c36d747,0x3b5e5e4e,0x3a758def,0x3bb1b52e,0x3b97bb8c,0x3c273107,0x3c2caad7,0x3b7841fa,0x3c551de3,0xbb10915a,0x3a6dba29,0xba9b44cd,0xbae57862,0xbb24c479,0xbb5100ee, -0xbb9fda4a,0xbb7a4b52,0xbb6e3ce6,0xbb5658dd,0xbb2ed781,0xbb021017,0xba330926,0xba9d7f53,0xba8f3806,0xba56daca,0xba95174a,0xb9643775,0xbb77e3f6,0x3c25bbcf,0x3cb0558c,0x3cfabcaf,0x3bf8b4dc,0x3cbc938f,0x3d0ee9f6,0x3d0ec223,0x3d082c23,0x3cf2d9a7,0x3d0201d1,0x3cfedd33,0x3cefb199, -0x3cb73919,0x3bfcb871,0x3cee85d4,0x3cc99fbf,0x3a91f346,0x3c0e40fb,0xbc97d76e,0x3c91ecc9,0x3bacdf28,0x3bb77ea3,0x3bab418f,0x3ba1a6c7,0x3bc8afcb,0x3c212b27,0x3c125ff6,0x3c15951c,0x3c1c0cc6,0x3c090174,0x3c033f65,0x3bfbc920,0x3c171686,0x3c1de039,0x3c1d07c3,0x3c19d613,0x3c02dcb6, -0x3c8ff2d0,0xbc91540f,0xbcfc1e07,0xbcf26100,0xbc2d3410,0xbcf7d631,0xbcf39c82,0xbd06a377,0xbd08203b,0xbceeaafa,0xbd0b6998,0xbd0c6464,0xbd050b5d,0xbcf30f22,0xbbfba6ee,0xbcff8d34,0xbd0d9231,0xbd06d6c8,0x3bfba8cb,0x3ba07da3,0xbaad8867,0xbab82070,0xbba3879a,0xbac0d035,0x3c0aa268, -0x3c10e716,0x3c28f07a,0x3c28f646,0x3c111c3f,0x3c0c9cfb,0x3c05b653,0x3c49c9fd,0x3c500f76,0x3c4a581d,0x3c1419d7,0x3c57a056,0x3c07c55c,0xbcc59ee3,0x3b4647ff,0xbb950b21,0xbb0fbc7a,0xbbcddfd4,0xbaf3b68c,0xb9d20283,0xbb920d3a,0xbc52a1a6,0xba95eb34,0x3bb61ddb,0xba945e07,0x3a885a25, -0xbc165730,0xbc8350b5,0x3a6426aa,0xbc913816,0x3ba141a5,0x3b85bec6,0xbbf86313,0xbb672ba8,0xbc970dd0,0xbc42955f,0x3c460464,0x3c25e205,0x3c5ae71a,0x3c630d13,0x3c0185e6,0x3bca6dc6,0x3b573414,0x3c5c52e6,0x3c764008,0x3c870dad,0x3c3affc6,0x3ca24240,0x3bd55da7,0xbbe1d74c,0x3b08d2bb, -0x3b5e1279,0x3ba6159b,0xbb903281,0x3b9dd6f9,0xbc13e13c,0x3bad41a2,0xbc58d43c,0x3b5e95ae,0xbbc7b07d,0x3af2ae96,0xba42e244,0xbb5719fe,0xbc820604,0xbbf4ef3f,0xbcc51aa0,0x3a8a3520,0xb9f8afab,0xbc75e9c8,0xbc717947,0xbd272e63,0xbd0345d1,0x3b792793,0x3bb628a2,0x3c4888c5,0x3c72d2b9, -0x3c2ebf4d,0x3bdf0ce8,0x3b4d359f,0x3c8e1fb4,0x3ca913ba,0x3caa6427,0x3c3c5da1,0x3cac18c0,0x3c66785a,0xbac22392,0x3ccff34f,0x3c03286b,0x3c7ef21a,0x3c579f9a,0x3c8cc903,0x3bf2204d,0x3af2397c,0x3b8ff410,0x3a818b83,0x3c0bc7b9,0x3c3bba83,0x3c27b4c9,0x3a9ab9b7,0xbc754086,0xbc56e314, -0xbcbcb74f,0xbd05e6b0,0x3af422f5,0xbc338fb3,0xbc9f485e,0xbaed5a1e,0x3c1862f2,0x3c1d0f95,0x3d241d11,0x3d2f1908,0x3ca9b976,0x3c609887,0x3b8f2da2,0x3ba3f7f6,0x3b3aa7d6,0x3bb0d6b8,0x3cd794f3,0x3cc3bd42,0x3d0a9d66,0x3bcc501c,0xbc73073e,0x3c45f4b2,0x3b936665,0x3c080c7f,0x3bde9e0a, -0x3c2b08e4,0x3b429c26,0xb95a7987,0x3bb0c98c,0xbbb4fb61,0xbbde835c,0x3b127a48,0xbb804b96,0xbc4d7b12,0xbc888b11,0xbbadf4a3,0xbd161f83,0xbc5ef1aa,0x3c9bf149,0x3c5898a6,0x3c142b67,0xbcb76847,0xbd1adfdb,0xbd034ed4,0xbc7f4c08,0xbc1f392a,0xbc8047a0,0xbcf6c389,0xbd000f30,0xbc8140e3, -0xbb5f115b,0x3bbccb18,0x3c4c86f7,0xb9e85c7f,0x3b913a7a,0xbc16486e,0xbbe76125,0x3b91443f,0x3c5ae1a8,0x3c1cf707,0x3bc7283d,0x3b3c1de1,0x395f3478,0x38f2800c,0xba207b26,0xbb051912,0xbb5645e3,0xbb5beaab,0xbba4f871,0x3a62881c,0x3add45ee,0xbc3c40dc,0x3cbaec31,0xbc1c11d6,0xbd3450e2, -0xbd8fd10b,0xbdc15b9a,0xbd719336,0xbcc3cc03,0xbbc83b35,0x3cfb4d3b,0x3cf9519e,0xbae5f6bf,0x3bb4e049,0x3c4b27b5,0x3cec49ed,0x3cc2aa58,0x3c615315,0x3a873e01,0x3a6361a5,0x3c5cb7c1,0x3b95f222,0x3a855715,0x3c466bd7,0x3c8ef985,0xbb3ce83f,0xbbe4b40f,0x3b82afe8,0xbab2f63f,0x3bac2b8b, -0x3b07896b,0x3a6fc978,0x38c3f1f3,0xbabe13b7,0xbbef49aa,0x38842fe0,0x3c4f153b,0x3cc888b6,0x3cd32a3c,0x3cf43678,0x3d627fbc,0x3d5fb53a,0x3d4d656c,0x3cefa2a4,0x3b09d9b9,0xbca97467,0xbd06829b,0xbd160aa5,0xbd35278a,0xbcdfea76,0xbc99991e,0xbb9cbd3c,0xbbf8f71f,0xbb5f0ec3,0xbaa30752, -0xbb1674e3,0xba802963,0xbc0f3ade,0xbc907358,0xbb8ed3f5,0x3c5d1946,0x3ac7e86f,0x3aba6ad1,0x3bc9db5e,0xb7f4c100,0xbaef1b45,0xba338f3a,0x3af64753,0x3bb6742e,0x3c7d348f,0x3c88989a,0x3cc9583e,0x3d009755,0x3cde7fda,0xbc9aed1c,0xbcb56aa5,0xbbe3cfd5,0xbb90a9f1,0x3c5cb9b8,0x3cfaead6, -0x3d3da82d,0x3d513e76,0x3d01428c,0x3ba557f2,0xbcfc453e,0xbd1962a5,0xbd19138e,0xbcc0f6ca,0xbc927574,0xbc4a10a8,0xbc74cb37,0xbc44b1d8,0xbb951b25,0xbb6744b4,0xbbec8aa9,0x3bde1217,0x3c542023,0x3bcef76f,0x3b8456cf,0x3b1f9d2b,0x3c3655cc,0x3c87dbc5,0x3c1181c6,0x3c662cef,0x3c4c08aa, -0x3c6b9857,0x3c183255,0x3bc47200,0x3bd0213f,0xbbc47a6d,0xbbd5c864,0x398a0c4a,0x3c89a3d9,0x3c3da297,0x3c50c87e,0x3c5b573b,0x3cbacf5b,0x3d20767e,0x3d05442a,0x3d0d3c09,0x3d1b5fb3,0x3cda5d0b,0x3c89727c,0x3c4cb760,0x3c3354e0,0x3c5c7cbe,0x3ca5d1be,0x3ca73a3c,0x3c90e003,0x3c14f713, -0x3be092e5,0x3ba07085,0xbae46a66,0x3bb8931f,0x3c41aba0,0x3c4e187b,0x3c20b530,0x3baceafb,0x3b887792,0x3b5193f2,0x3b594c33,0x3bdfa6ca,0x3c05e4a4,0x3c260f7c,0x3c3147d3,0x3c1972f2,0xbbf3a0aa,0xbab883f6,0x3b83e378,0xbad814fc,0x39355298,0x3b38b469,0x3baa3301,0x3c041ff0,0x3bb6f458, -0x3b564111,0x3a546682,0x3a8b3001,0x3b2a8413,0x3b131484,0x3b48c9b2,0x3b025cee,0x3b1890d3,0x3b0cc5b4,0x3c1afe34,0x3b50e5a1,0xbbb46405,0x3b8a5086,0x3c1af609,0x3bfc6fab,0x3b3ec445,0x3b699077,0x3b18c106,0x3c14b43d,0x3b61dbe6,0x3c258b7e,0x3bc6f390,0x3c0f6f61,0x3bb3118a,0x3a6197a0, -0xbb710dc6,0xbaea8d2a,0xbb4ad9e6,0x3bfc3698,0x3c31a779,0x3c3e93b5,0x3c569ddf,0x3c66c2fd,0x3c78b849,0x3c839c6d,0x3c80991e,0x3c82415c,0x3c80311f,0x3c7578c0,0x3c538cd2,0x3c29253e,0x3c26f2e0,0x3c286fbe,0x3c2df51c,0x3c21b0ee,0x3c236733,0x3c1f36f0,0xbb0e85f6,0x3bb9976f,0x3b0de0cf, -0x3b256e42,0x3a80d41a,0x3b7ccaab,0x3bc4e782,0x3b33129b,0xba885936,0x3b85b9e7,0x3be0deeb,0x3b5daba8,0x3ba29406,0x3b30dc15,0x3b46896b,0x3c082d48,0xba21c70c,0x3c785bef,0x3c4b628d,0x3c55616b,0x3c5eb6f5,0x3c625038,0x3c693758,0x3c774b2b,0x3c6cde58,0x3c630304,0x3c59661e,0x3c4f198e, -0x3c4db6e7,0x3c4c4574,0x3c4eca86,0x3c4b3a31,0x3c49563a,0x3c4a45bb,0x3c3d4185,0x3c7a25e1,0xb8e121cd,0xbc064337,0xbbfefee2,0x3b0fd07d,0xbc10c60b,0xbc02b007,0xbc102fb7,0xbc0043b2,0xbbb65760,0xbc027f22,0xbc027d2d,0xbbef40c8,0xbbf392d4,0x3b2897cd,0xbb9b41ea,0xbc021fd7,0x3c820329, -0x3b4898be,0x3cc9d203,0xbb3bd58b,0x3adde770,0x3b09f2ce,0x3b790720,0x3b8d2460,0x3b974354,0x3b872192,0x3b885485,0x3b712d7a,0x3b288eb1,0x3b365b90,0x3b29a0b6,0x3b1ecbb2,0x3afa6555,0x3ae602cb,0x3ad72653,0x3b17cda8,0x3b3654ed,0xbac18b9c,0x3cd30aa1,0x3ce7dfd4,0x3c167f6b,0x3cb7ac31, -0x3ce8de81,0x3c24439f,0x3c410fad,0x3c42c47b,0x3c142d97,0x3c6ed9d6,0x3c814265,0x3c81114a,0x3ce6b927,0x3ca79dec,0x3c045be7,0x3cebc088,0x3caa6d4c,0x3b9d79c0,0xbb0b90d3,0x3b777137,0x3bee646a,0x3c3ceeba,0x3c5000a5,0x3c1622bd,0x3c0cc35a,0x3bbdf6cb,0x3b097ae6,0x3aed901c,0x3a984665, -0x3ad00545,0x3ace0c07,0x3b1895dc,0x3afc2d8c,0x3b907e01,0x3a926985,0x3c28287c,0x3cb662dd,0x3c367a47,0x3c960255,0x3c4d34cd,0x3c56eee5,0x3c4a80fc,0x3bf98237,0x3c399cd8,0x3c822dab,0x3c2d0924,0x3bcf358e,0x3c336ac7,0x3c3db9e2,0x3c5b9ff6,0x3c379cb9,0x3bbf3a54,0x3c832c26,0x3b99d60c, -0xbc16c784,0xbabc554c,0x3a3cc3e7,0x3c54178b,0x3c96b90b,0x3c35285f,0x3c6504c5,0x3c1d064a,0x3acb760e,0x3b68e2de,0x3ab33064,0x3abc294b,0xbab61c3d,0xba91d6cf,0xba9629f9,0x3b19b900,0xbab7a1cd,0x3c60e0bb,0x3cc321e9,0x3c90f043,0x3c7b775f,0x3c65e2b8,0x3c8d25af,0x3c130ba3,0x3c032c5f, -0xbb68025b,0x3c2020c6,0x392c585a,0x3c4d4aab,0x3c2e98fb,0x3c5cb10f,0x3c43ae3c,0x3bf13de5,0x3c179f63,0x3b99ab9d,0x3aa54fed,0xbc269427,0xbafed51f,0x3b837115,0x3cf82133,0x3d1adac3,0x3cba24ee,0x3cb85d59,0x3c3d0790,0xbb8e1307,0xba326827,0xba80cce4,0xba2641f2,0x3a3fe348,0x3a8d2957, -0x3a098c1d,0x3b941d49,0xbb02c153,0x3c8451ce,0x3cd0a22b,0x3c36d201,0x3cb03d29,0x3c27af84,0x3bd08e11,0x3c0850c3,0x3b629fe1,0x3a637036,0xbb928f3c,0x3b0695a6,0x3b758bcc,0x3bfc986f,0x3c07ab57,0x3c05b888,0xbc508e61,0xbbb87b7e,0x3d21f0cb,0xbc388feb,0xbcabfd96,0xbc89f267,0xbcec8dad, -0xbcb004b1,0xbc44934e,0xbbb0c0e8,0x3c281933,0x3c26899e,0xbbc9a286,0xbc7c6b25,0xbcca08c7,0xbd0b15b2,0xbca11695,0xbc281f29,0xbc991b6e,0xbc0718ab,0xbbbbccd7,0x3cad4e65,0x3cda732e,0x3bc5cb4b,0x3c46ef93,0x3c56ec98,0x3c76fd01,0x3c20bb9e,0x3b05edeb,0xba46e594,0x3b23b58c,0xbb85b51d, -0xbb153def,0x3c6107a9,0x3bd0a3ff,0x3c2131f1,0x3c171576,0x3d29e45b,0xbba01326,0xbcc79e0a,0xbc86ec16,0x3c0409c8,0x3c7d7e01,0x3cbc5bdc,0x3c9e7c26,0x3bc5f954,0x3c60c018,0x3c064ded,0xbc71141a,0xbc58330a,0xbc006c36,0x3be9a79c,0x3c9040aa,0x3cb8524b,0x3c9d0cd9,0x3c9a150d,0x3c0c76b8, -0x3c07eb3a,0x3c145298,0x3c42b60e,0x3cc36e58,0x3b09bf64,0xbb137cbe,0x3a05b992,0xba860b74,0xb9b20a21,0xbb06a309,0xbb985481,0xbba2f6aa,0xbc16ec7a,0xbc01ba59,0xbab56cac,0x3c9c77b5,0xbc04c146,0x3c2cca70,0xbcd901e2,0xbd57c83c,0xbd46eef1,0xbcd7adbc,0x3b1f33f2,0x3cb15467,0x3c0f5e56, -0xbaf30de4,0xbc7fd34f,0xbce4c262,0xbc6c897f,0xb961f61c,0x3cba06d0,0x3c3926b3,0x3c0ad028,0x3b7b971b,0x3bffdb8a,0x3a3292e6,0x3c073a7c,0x3c8d3012,0x3c3eb2d8,0x3cc0cd72,0x3bbc8fa1,0xbaf5806c,0x3b42fc2d,0xbb3323b2,0x3ab9477f,0xba06f9c9,0x3ab38961,0x3b34a327,0x3bc7cc5b,0x3ad2aacc, -0xbbb2480d,0x3c2fb41e,0x3c2d56f5,0x3d261612,0x3d7ceb28,0x3dd96536,0x3df4e91b,0x3dc331a0,0x3d5b383a,0x3c96c751,0xbcba6243,0x3c750550,0x3c8f4142,0x39ccd721,0xbbdfce62,0xbba90f6c,0x3c6521d1,0x3c88015e,0x3c8800e2,0x398349ee,0x39032b37,0xbbc8f50a,0xbb4fb9c8,0x3b7fc07d,0x3bcd74b4, -0x3c5a9df3,0x3bb51d88,0x3bb234d8,0x3c0597ce,0xbae0af18,0x3a83ad5d,0x3a905a04,0x3b85e095,0x3bbf7ee7,0x3bfede69,0x3c8b66b3,0x3ce2532e,0x3d0ed1e3,0x3d057a97,0x3caf303e,0x3d1ded96,0x3d2b39e5,0x3d449914,0x3d6ec690,0x3d96e68c,0x3d98fee1,0x3d69539f,0x3d35f11b,0x3cd43a6d,0x3c93a372, -0xbc1bb9e1,0xbca7b5d9,0xbc1a5a33,0xbc59f337,0xbc093cce,0xbc215202,0x3a13b847,0x3b25bbb7,0x3b5f3b1f,0x3c2433eb,0x3c189f92,0x3c5ac42b,0x3bc21b42,0x3b520e95,0x3b5ccc32,0x3c58a7a9,0x3c7037bd,0x3c63dd17,0x3c7826db,0x3ca203e7,0x3cd26dae,0x3c9cee8a,0x3c8d339d,0x3ca2c89e,0x3ce36459, -0x3cdc6bbf,0x3d11c3dc,0x3cf636c9,0x3cd77fae,0x3c503b13,0x3bdc6a45,0x3c16a1de,0x3cb8b2ef,0x3cd41d67,0x3ce5de5c,0x3ce470af,0x3cd504c4,0x3cc6f54b,0x3c96682e,0x3cafc9ef,0x3c8a82a3,0x3bf66a32,0x3bf48882,0x3bde7fb8,0x3c02ffc8,0x3c0d8f45,0x3c0c2e35,0x3c82b8ef,0x3c64f6b1,0x3c567fe3, -0x3c502669,0x3c25aaf7,0x3bcd5909,0xbadc057d,0x3b0f83db,0x3b9b154a,0x3c2560f5,0x3c2cde12,0x3c8b7350,0x3cb904f7,0x3cf4c30f,0x3c894100,0x3c01df86,0x3b2f2346,0x3b9158b2,0x3b814804,0x3c0a3040,0x3c202b22,0x3c27489d,0x3c38b7ac,0x3c566177,0x3c726761,0x3c2bc90e,0x3bea9ac0,0x3b7ef58a, -0x3bc35f8a,0x3bf841f8,0x3c13f36a,0x3c3249d4,0x3c1af652,0x3c69216b,0x3c8f4e9d,0x3c78b22c,0x3c65255d,0x3c2453ed,0x3bf40343,0x3b829aaf,0x3be6513a,0x3c025150,0x3c777910,0x3c4bfa3c,0x3c80d2cb,0x3c7ee156,0x3c8a9a88,0x3c9b7981,0x3cab483e,0x3c8913c6,0x3c45b08a,0x3c5d9ead,0x3c4d0ecb, -0x3c6ad5cf,0x3c62eeaf,0x3c5cb835,0x3c5a252c,0x3c68fa85,0x3c3f8f78,0x3c0fd833,0x3bd7ae70,0x3b9ecc42,0x3b84cef8,0x3b62f554,0x3b507929,0x3b39deb6,0x3b1f3bb1,0x3b3a469d,0x3b16293e,0x3b7f3d2a,0x3c15e771,0x3bdb24cd,0x3c363c86,0x3c2a1604,0x3c641a2f,0x3c730416,0x3c4d6cd1,0x3c6d142a, -0x3c782da6,0x3c38cbe3,0x3c0bba73,0x3c1a6bc0,0x3c1ffbf7,0x3c29e2b8,0x3c4324c9,0x3c2341ee,0x3cb6075b,0x3c0a30ea,0x3c1db5d7,0x3c237acc,0x3c26715a,0x3c2f21e3,0x3c3372c7,0x3c3b82ca,0x3c2390d0,0x3c184818,0x3c0a455d,0x3c0054d3,0x3be5c4b7,0x3bc50e4c,0x3bd7a751,0x3be4623b,0x3bed96b1, -0x3bf94244,0x3c02ddde,0x3bc28338,0x3ca27c38,0x3cbcc289,0x3c5f55df,0x3ca2fae5,0x3cca6f44,0x3c750aa1,0x3c7f78cc,0x3c78f309,0x3c63bee5,0x3c82c497,0x3c835833,0x3c7e6b53,0x3cbf54b5,0x3ca329ee,0x3c480f3e,0x3cbea5e3,0x3c3c7944,0xbc653f6d,0xbcc7fc37,0xbc4420b9,0xbc581ef2,0xbc771aba, -0xbc62c452,0xbc8ebe93,0xbc92fa72,0xbc865824,0xbc841565,0xbc7c4e5b,0xbc6e45b3,0xbc69c90a,0xbc6b6334,0xbc78ef79,0xbc6a63d9,0xbc67f21e,0xbc6af46f,0xbc692253,0xbc4a4415,0xbc4384ff,0xbcc09039,0xbc751ed2,0x3c8388c7,0xbcc1271e,0xbc8738e7,0x3c463f5d,0x3c18f083,0x3c0caab3,0x3c113817, -0x3bd951ee,0x3bd0dbab,0x3bc9374c,0xbc87d98f,0xbcc47dba,0x3c3c46bf,0xbc8819c1,0xbc1743d3,0xbc912518,0xbc57bdcf,0xbc951707,0xbc815beb,0xbcde8b53,0xbcf75b04,0xbcd1c434,0xbcca2dc9,0xbcb674f2,0xbca58996,0xbc938774,0xbc8fd9e7,0xbca42098,0xbc98e15d,0xbc9bdbab,0xbc9ca43f,0xbc99d7d6, -0xbc6093ca,0xbc88a703,0xbb527cd0,0xbc03a461,0xbc506345,0xbbc6ebff,0xbbde916b,0xbc5d4daf,0xbc58802c,0xbc987aea,0xbc94a2b8,0xbc7f7470,0xbc2763eb,0xbc0a6e84,0xbc079244,0xbbe48661,0xbc7c0b01,0xbc6d8829,0xbc9a887f,0xbc650b03,0xbc82bc25,0xbcc1200d,0xbc7e09ce,0xbd191576,0xbd350097, -0xbd1415d6,0xbd0d9630,0xbcf436e3,0xbcd1cc1b,0xbcb7a1fd,0xbcba52b3,0xbce330c0,0xbcbda64f,0xbcb8ece2,0xbcbec547,0xbca6ee88,0xbc71d30f,0xbc209b82,0xbc18b5e8,0xbb718e0e,0xba75a2a9,0xba8217d9,0xbaf01350,0xbb99b685,0xbbe09b9c,0xbbfed88e,0xbc419b46,0xbb1a7c39,0xbb28faea,0xbb022a0d, -0x3a0696b3,0xbb12c62a,0xbc496f0d,0xbc5159f2,0xbc43199f,0xbba644f3,0xbc07e9f0,0xbc97542e,0xbc169945,0xbd400807,0xbd8240e5,0xbd5909ad,0xbd4ec30f,0xbd305127,0xbd115486,0xbcea133e,0xbce92aa1,0xbd132757,0xbd043012,0xbd04ccfb,0xbd01ad96,0xbce0cfb9,0xbc615f11,0xbbc27f8e,0x3b5eaafb, -0x3c35862c,0x3c1a897f,0x3bfe8a5a,0x3c0cafb2,0x3c32c325,0x3b3a89d3,0xb78d398f,0xb5173d0e,0x39362075,0x3bd3a9de,0x3c27f779,0x3c1bdd32,0x3b1d3be0,0xbc17856c,0xbc1be4c9,0xbcc6daeb,0xbd5d7f57,0xbd45d183,0xbd64c8f3,0xbd59fc63,0xbd6b2529,0xbd4a1871,0xbd079949,0xbc942605,0xbbcef5cd, -0xbbb3c153,0xbbb012d8,0xbbcb4ff3,0xbc5a0290,0xbc5947c9,0xbc420f6f,0x3812b87b,0xbc1bd715,0xbc557123,0xbc93fb8d,0xbba39263,0x3b5cc977,0x3ad653ee,0x3c2230c0,0x3c1ad347,0x3be36e7d,0x3a30c658,0xbb30749d,0x3926d7bb,0xbc0016a4,0xbba12790,0x3b829d09,0x3b09a91b,0xbace7321,0xbc05cc22, -0xbc0e6df8,0xbd085c16,0xbcf99c82,0x3be7ee93,0x3b074dba,0xb8d39d12,0xbcabfc2f,0xbcddbe64,0xbcd03ec2,0xbc13f2c3,0xbbd6ff2b,0xbc99da03,0xbca63d43,0xbcc5bca9,0xbd00b35a,0xbc913577,0xbc98f8c3,0xbd06a5d1,0xbcdaf013,0xbc7b510f,0xbc076fd0,0x3a6ef45d,0x3b9b252f,0x3c2ec3a0,0xba5fb38e, -0xbb9911ec,0xbab793f8,0xba551878,0xb908842d,0xbbadc755,0xbbc390ff,0xbc041e59,0xbc615677,0xbc68152a,0xbc17b887,0x3b199ce6,0xbc9f69a5,0xbc46fe29,0xbd52efa1,0xbd9f8558,0xbdc3c416,0xbde60a23,0xbdd8077d,0xbdb7a606,0xbd9d54cc,0xbd0233fb,0xbca0190b,0xbcfef6c1,0xbd1f9225,0xbd386121, -0xbd278fa8,0xbcde7cfa,0xbc4d4af9,0xbb4755fe,0x3a4fc1c5,0x3b449237,0xbbd81f4d,0xbabd5ed2,0x3bb68085,0x3c05496c,0xbb9a972b,0xbbd14de4,0xba26367a,0xbba335c1,0xbac4ab53,0xbb6eeeb0,0xba338151,0xba0b288b,0x3a05efc2,0xbbf8f0a7,0xbc2ca199,0xbc2802e3,0xbbab105b,0x3d4c413a,0x3d701cb8, -0x3d005648,0xbc0fa16a,0xbd7f5d17,0xbda5c102,0xbd99f950,0xbd24c439,0xbcce2649,0xbcdb3a15,0xbd436e07,0xbd6b035b,0xbd5114fa,0xbcc160c4,0xbc86d20a,0xbc4cbf00,0xbc9dcdef,0xbc734a7e,0xbc0408f4,0xbbffd99a,0x3acebdc9,0x3b9e42b0,0x3be987ae,0x3b31c20d,0x3ac5127e,0x3b378ddd,0xb714d885, -0xbaacf2c4,0xbaa42caf,0x3b43a3c2,0x3bb94e2a,0x3b9e2f23,0x3c844816,0x3cc34107,0x3d153654,0x3d27211c,0x3bcb2645,0xbcf990cb,0xbd71a2a6,0xbd3c1fa1,0xbc9ff721,0xbc66919c,0xbc2820f7,0xbc33bd78,0xbcc387e0,0xbd1f72b8,0xbd67ad00,0xbd85d67a,0xbd860247,0xbd5cdf22,0xbd252a7b,0xbcd1498c, -0xbc58c78f,0xbc0c630d,0xbc008f68,0xbc0e7b58,0xbb8c2279,0xba85a4c9,0x3c2c62cd,0x3b17c6b0,0x39b8c963,0x3a8ed642,0x3bfe7c9b,0x3c292c8b,0x3bad5d7f,0x3c08e5db,0x3c22f1ce,0x3c3e35e8,0x3c2f4cd0,0x3c27b8ee,0x3c855ffa,0xbb7361a6,0x3ca6269a,0xbbcdb7a3,0xbc22aa9b,0xbc20b5d7,0xbc59a81e, -0xbc0e2bda,0xbb5f91b3,0xba11726f,0x3ca7b7c9,0x3cf4a384,0x3cfa5f10,0x3caab9f6,0x3bf25246,0xbc28a4ad,0xbc1f1c39,0xbc5316be,0xbc74ce35,0xbc1ad86e,0xbb70fcaf,0x3b8ef1b3,0x3bc3a4ad,0x3b213550,0x3b6c95f9,0x3b719746,0x3bf807ed,0x3bea5d70,0x3b9f1987,0x3aecbc3f,0x3ac72a79,0x3a2955fa, -0x3ab02898,0x3ba3945f,0x3bb0f2f6,0x3b7d02a6,0x3c0a0e13,0x3b4f7dbb,0xbba596e3,0xbb4d6abe,0xbb7a719d,0xbc01143b,0xbc2f3466,0xbc3f6826,0xbc5964c6,0xbc87b322,0xbc55fe51,0xbc1c89c1,0xbb554b0d,0xba346474,0x3b798224,0x3bf4f260,0x3c25778d,0x3c47750c,0x3c74e691,0x3c3f5a93,0x3c05d4b5, -0x3b260aa9,0x3b877594,0x3c0fbaab,0x3c2f24a6,0x3c0a3ac9,0x3bd4a27e,0x3ba3be3e,0x3be9d9d8,0x3bf21974,0x3bdde27a,0x3c1dc17f,0x3c254516,0x3c1ec68d,0x3c08035e,0x3be02f44,0x3be3c3a1,0x3ab40c0a,0x3c33d127,0xbac3651a,0xb9db5782,0xbb0963a9,0xbb28895a,0xbb747512,0xbb8620c4,0xbb9db4ad, -0xbadb94c3,0x39b5a99b,0x3af33f85,0x3b427abf,0x3b616bf5,0x3b5c863c,0x3b69785e,0x3b861f27,0x3bb2949c,0x3bbd1fb9,0x3c1c629d,0x3c0bb1bc,0x3b7f4e0e,0x3a85a2af,0xbb7834af,0x391d625b,0xbb111cb0,0xbbc5dcfb,0xbba96968,0xbbeaeb10,0xbbb69190,0xbba32147,0xbb33d88b,0xb94e209e,0xb95319d8, -0x3b2ae9c9,0x3a66ec2f,0xb82d8688,0xbbd6c4a9,0xbb71d40e,0xbb111908,0xbb48181f,0xbb405cb5,0xbb540282,0xbb65a1db,0xbb8d9b17,0xbb6134fd,0xbb436c17,0xbb1ded57,0xbad45309,0xba4e98fd,0x38683e2b,0x3a2c9a9b,0x3a869791,0x3aaffca1,0x3aec1b2d,0x3b0a282b,0x3b8087e3,0xbb910203,0xba2ecc45, -0x3c85e7c4,0xbbfe1a1b,0xbb64abe4,0x3c868959,0x3c81cd7b,0x3c7fb1a9,0x3c8028b1,0x3c6c2fd7,0x3c65b939,0x3c602648,0xbaa4d13a,0xbc06c9fe,0x3c8ee797,0xb9144ee3,0xbb53bfc0,0x3c9bfc16,0x3c86214d,0x3caced77,0x3c713489,0x3c8a37ad,0x3c8207b7,0x3ca3dafa,0x3cae9849,0x3cac56be,0x3cac686f, -0x3caa1ca8,0x3ca467f6,0x3ca585da,0x3ca33b1e,0x3c9cb0a9,0x3c9f33fc,0x3c9dd872,0x3c9a62c5,0x3c9bfc6a,0x3c88e0d0,0x3cacf530,0x3c86ae54,0x3aae4a58,0xbcf9fbcd,0x3cb1410f,0x3b6f7132,0xbce85494,0xbce30aaf,0xbcdfa3c0,0xbcd2f42c,0xbcc8c76a,0xbcc1eade,0xbcb85210,0x3b936e79,0x3cbedeb0, -0xbcf3fbc3,0x3923b0dc,0xbbd8f519,0x3cc3137f,0x3c600f46,0x3c709dc8,0x3c6650e2,0x3cc6c841,0x3ce7443c,0x3cdfe640,0x3ce19d71,0x3cd8fcb0,0x3ccc2c8d,0x3ccd7008,0x3cc93ffa,0x3cb9f21d,0x3cc61a49,0x3cc729ef,0x3cc1a3ad,0x3cbdd006,0x3ca84dae,0x3cba1471,0xbbb7edc9,0x3c5c341a,0x3c86d40a, -0x3c35e449,0x3c08f192,0x3c69f79f,0x3c5144e9,0x3c7c4dcd,0x3c31535c,0x3c8c3200,0x3c8a63c7,0x3c3dc6db,0x3c82aa08,0x3c08e719,0x3bd55af8,0x3c99033c,0x3c528552,0x3c976f90,0x3c4e3141,0x3c539af5,0x3c201b26,0x3ce86a03,0x3d1abdd7,0x3d16dbb9,0x3d1dd629,0x3d178965,0x3d09d3a8,0x3d0b8708, -0x3d0420d5,0x3ce99724,0x3cf46067,0x3cef4237,0x3ce1288c,0x3ccc4ad5,0x3cc401bc,0x3c86e4c6,0x3c4934dc,0x3c509776,0x3c576f9a,0x3c87c9a2,0x3c2c5207,0x3c2b1ac5,0x37a6a93e,0x3ba8ba6e,0x3a9f54f3,0x3bcdc3c9,0x3be7c7a1,0x3c16960e,0x3c3b8eda,0x3c37023d,0x399a2979,0x3c652a03,0x3c850089, -0x3cc86a9c,0x3c28fba0,0x3bfd3cb0,0x3b7e023f,0x3cf81ba4,0x3d3a259d,0x3d3a3a59,0x3d3fa30d,0x3d362ab7,0x3d1cf6a3,0x3d220d24,0x3d2367ba,0x3d115d07,0x3d226921,0x3d207f61,0x3d14d978,0x3d090890,0x3cd97f34,0x3cb0b2ff,0x3c371512,0x3c8cf99f,0x3c53d242,0x3c921fd3,0x3c6c0939,0x3c2fd444, -0x3b8774d9,0xbb2afb66,0xbadd75e1,0x3b2bd1a3,0x3c17fd29,0x3c22e80e,0x3c6ef202,0x3c6d0524,0xbad3f70d,0x3c9a78c4,0xbad2782e,0x3bb5c621,0x3c51c315,0x3c486373,0x3c8df07f,0x3cd72bdd,0x3d05347f,0x3d2f5324,0x3d1485bf,0x3d117218,0x3d1f8cdd,0x3ce11942,0x3c8ba6f8,0xbab9868c,0x3c095784, -0x3c43fefc,0x3c41c854,0x3c68d754,0x3cb9edfd,0x3cbf5966,0x3c38043a,0x3c815c93,0x3c27c3d7,0x3c8c243f,0x3c77b085,0x3bcb001e,0x3b045b77,0xbac91ad6,0xba4c0159,0xbb74905e,0xbb0cf830,0x3bb3d37a,0x3c27b8a0,0x3c1a2f4e,0x3b410574,0x3c0396a1,0xbb18d6cc,0x3b0eb2a0,0x3c2bb2e6,0x3c48b1f1, -0x3bc80399,0x3c7184d8,0x3c7837ba,0x3b1b3eed,0x3c7275f9,0x3c4ec3d6,0x3beb1782,0xbbed0aea,0xbc2422f6,0xbbd244f2,0x3c41a91f,0x3cecd965,0x3d335978,0x3d0fdcde,0x3ce346a4,0x3c630712,0x3bbcef54,0x3c2b9661,0x3c93787e,0x3bad2b27,0x3a9ffbce,0x3ab2cefe,0x3a74362d,0x3ab67205,0xbb8b56ad, -0xbb3bc9c1,0xbba336b4,0xbc0c618b,0xbc0814b1,0x3b389950,0x3c36433c,0x3c06ace0,0xbce0c373,0xbd2aa6b1,0xbd6e4fee,0xbd2bfa38,0x3d176033,0x3d4f1b0b,0x3d867dfd,0x3d82a0a2,0x3d3d3074,0x3ce7a09c,0x3cbb9746,0x3cf8fdb0,0x3d1b3975,0x3d24146f,0x3d20b2ff,0x3ce15b93,0x3bc5bbf3,0x3b6fbb75, -0x3bcb2e6a,0x3c540d4f,0x3c9496d6,0x3c6649b0,0x3c155ed4,0x3b553fa5,0x3927e461,0xba532131,0xbb28794a,0x382afa51,0xbad4e40e,0x3af1967f,0x3aa44fa3,0x3afd6ccf,0xbba354f1,0xbc1ba403,0xbc5daa60,0xbc6774fa,0x3d66989c,0x3d86f83f,0x3db2c14a,0x3dbc2278,0x3de65028,0x3d3c5328,0x3c4fd588, -0x3ab78d3a,0x3ba5b98f,0x3b79a5d1,0xba171788,0xbc3695ce,0xbc5110fc,0xbbcdb0e2,0x3c3b2f7f,0x3cc32f28,0x3cc6a42e,0x3cdb88da,0x3c9dfc93,0x3b9a9459,0x3bb7696d,0x3c4635d7,0x3c1b12c0,0x3ba9e911,0x3b44632a,0x3b0cfe5f,0x3aba3914,0x3b1c579d,0x39af17c3,0x3b5b4e08,0x3bca50b6,0x3bdd2f0a, -0x3c8f66aa,0x3d071b25,0x3d1e620f,0x3d481ccd,0x3b279178,0x3d260241,0x3db0ab3c,0x3dbe78c2,0x3dd90864,0x3dccf09d,0x3db1587b,0x3d75032d,0x3cf53c10,0x3c440365,0x3c2cd514,0xba78a320,0xbb9904c9,0xbbd16f93,0xbc431b81,0xbc79484c,0xbc249b14,0xbc5df568,0xbc1651ca,0x3a8b629e,0x3bbe8794, -0x3c23318a,0x3c008e02,0x3adf56ff,0x3b1c98f3,0x3c098c94,0x3bffada7,0x3c200556,0x3c1d87e4,0x3c6823d5,0x3c7d28f7,0x3c8568be,0x3c77abeb,0x3c7c5b30,0x3c607ffc,0x3cdc618a,0xb961470f,0x3cdb8b86,0x3d0b507c,0x3cd8d5c9,0x3cdc71ff,0x3cf0263a,0x3d15ee74,0x3d521cfc,0x3d2df564,0x3d0a06e1, -0x3cc38581,0x3cd07eb1,0x3cbb2456,0x3c668506,0x3c5db5c3,0x3c257365,0x3a317fb4,0x3b35dd38,0x3b054785,0xbae6797a,0x3b0629c6,0x3be36d04,0x3c714a26,0x3c7ceb75,0x3c4f9147,0x3c026690,0x3bdf3580,0x3bb4c44b,0x3c099e0e,0x3c0af4dd,0x3c192f80,0x3c398f6b,0x3c25129e,0x3c74a682,0x3c6cace2, -0x3cc25969,0x3c95da22,0x3cab286d,0x3cb08b1b,0x3c9eb8d4,0x3c9a402a,0x3cade576,0x3cafab62,0x3cb2a942,0x3cbc0074,0x3cdb7a8b,0x3cf2a3a6,0x3ccfb3f0,0x3cace62c,0x3c878602,0x3c8ea66a,0x3c927900,0x3c96edfc,0x3c9c28ca,0x3ca0f9e2,0x3c920567,0x3c6f1fd6,0x3c58e36a,0x3c4fe77c,0x3c42a13c, -0x3c0db9a4,0x3c2c37b4,0x3c063120,0x3c781114,0x3c3abcbf,0x3c69b81a,0x3c464a9f,0x3c7555f3,0x3c780177,0x3c7ffa67,0x3c67be49,0x3c8da76e,0xbba139f8,0x3c3c0699,0x3c50b1d8,0x3c820b77,0x3c9509d4,0x3ca9528d,0x3cc0da7d,0x3cdb7cdb,0x3cc09a84,0x3c9daab9,0x3c823a7c,0x3c45ee13,0x3c1d66e5, -0x3bdae7db,0x3c0be7cc,0x3c1fa2f0,0x3c3b9e4f,0x3c4bf255,0x3c58643b,0x3c8feef3,0x3c074f21,0x3c767ccc,0x3c852209,0x3c416353,0x3c32e9e9,0x3c6a6bc1,0x3c67953b,0x3c6b5a80,0x3c2624a1,0x3c521667,0x3c33871c,0x3c030ca5,0x3c0c55c6,0x3ba8c77b,0x3be81cee,0x3c29ec0f,0x3c4b9563,0x3c679f54, -0x3c4b9247,0x3c6720f4,0x3c72751a,0x3c7f0ec8,0x3c837f58,0x3c8ebe1f,0x3c7c3b63,0x3c6eb45c,0x3c5d1947,0x3c5432fb,0x3c463bf7,0x3c2ab724,0x3c3fcc4a,0x3c4a1be7,0x3c52866c,0x3c6668b3,0x3c673a58,0x3c880a78,0x3c77eae3,0x3be980f8,0xbc343154,0x3c88971c,0x3bd70f55,0xbc63e661,0xbc5585ba, -0xbc43a9d2,0xbc244e73,0xbc2060fc,0xbc0fb507,0xbbfeaa26,0x3baa34ad,0x3c78766b,0xbc36e436,0x3b536fac,0x3c72a51d,0xbc8f7721,0xbbaaceec,0xbcb4e755,0xbc69ddf2,0xbc86f045,0xbc726d08,0xbc9cb2ee,0xbca674e0,0xbca39a04,0xbca6c268,0xbca22d63,0xbc97fa59,0xbc8fafa8,0xbc8f67ee,0xbc99a454, -0xbc999c99,0xbc9a6370,0xbc9bf968,0xbc96d9f6,0xbc7f245c,0xbcb91495,0xbb97c82f,0x3c55aacf,0x3d1c2702,0xbc1fd54c,0x3c391ff9,0x3d0d3604,0x3d0ad84b,0x3d085e6b,0x3cf771fa,0x3d075581,0x3d08e3ac,0x3d0259cf,0x3c2e3265,0xbc56bccd,0x3d0a5c74,0x3c62527b,0x3ca35e3b,0xbc98ca88,0xbc757460, -0xbc75e2e9,0xbc372fef,0xbcab424f,0xbccd8561,0xbcccccc4,0xbce3cf2e,0xbcdaf5a9,0xbcc28491,0xbca8c5e2,0xbca6591e,0xbcc580aa,0xbcca733e,0xbcd0f80b,0xbcd75551,0xbcbc48e5,0xbcaeb59d,0xbca08c55,0x3c96401d,0xbbb68b81,0xbb50f57c,0x3a9ba1aa,0x3b3b7367,0xbc081824,0xbc2bfdfb,0xbc4f4956, -0xbbc65a76,0xbc2f938e,0xbc28d172,0xbb7604c3,0xbb97fe0f,0x3b5ce38c,0xbb284647,0xbc53857d,0xba2873d6,0xbc5515f2,0xbc8c5c6a,0xbc651560,0xbc105a4d,0xbce5c6bb,0xbd137554,0xbd130849,0xbd267157,0xbd1834a7,0xbcfa0bd5,0xbcbe9671,0xbcb97073,0xbcfe76f5,0xbcfe9b66,0xbd01c4ff,0xbd09a399, -0xbcd5bc77,0xbcd960dd,0xbc378ff9,0x3af241b3,0x3a4d10d2,0x3b5c239c,0x3b381b20,0x3c0c8c94,0xbbb94366,0x3a7fd829,0xbc4b1373,0xbb257b1a,0xbb3bfe2c,0x3bd43d05,0x39b323a4,0x3bc82900,0x3b81e269,0xbb1e664c,0xbb972499,0x3c18a6b8,0xbc0b29b0,0xbc49623c,0xbbcc171f,0x3bc77110,0xbca2fb7f, -0xbd0c0b69,0xbd225152,0xbd4a24db,0xbd44bf17,0xbd214a54,0xbce0985a,0xbcd42837,0xbd241bb3,0xbd2c0046,0xbd34a954,0xbd3f5611,0xbd10f514,0xbcf3694a,0xbc72acec,0x3c2252a6,0xb9cb0427,0x3c52b5f8,0x3c09a350,0x3c06b45d,0x3b581b65,0xbaa7a475,0xbb217d19,0xbbc55db4,0x3b080ed7,0x3be02c0c, -0x3bf263c7,0x3c20740b,0x3bde7474,0xbbc7b30d,0xbb8980f2,0xbc8826b6,0xbd46015a,0xbd47b508,0xbd3a1bfd,0xbd3cc321,0xbd78507e,0xbd80823e,0xbd5d28eb,0xbd3f14b9,0xbd022a16,0xbc5d68e2,0xbc8cd9f7,0xbc89bc5f,0xbc38c066,0xbc31b8c7,0xbc395a0f,0xbcac35b4,0xbcb76f07,0xbce7b5a5,0xbc413e34, -0x3c190dff,0xbb2b9c8d,0x3ab8183d,0x3c1eca05,0x3c404265,0x3bc1c7ed,0xba09b403,0xbb89752c,0xbb384180,0xbc034883,0xbbc4ebd8,0x38ce307f,0x3b93359d,0x3c0eb3b2,0x3b65eed8,0xbc006642,0xbbb19d12,0xbc995da6,0xbc898571,0xbc6a0357,0x39a5d883,0x3a79e1af,0x3b5cb52b,0x3b2356fc,0x3ae22e35, -0xbadff461,0x392cdb9e,0xbc399b51,0xbc68a2f3,0xbc9fc7b8,0xbd0059c7,0xbd23cc55,0xbd4c52de,0xbd059b4f,0xbccca06d,0xbb778d25,0x3c4a7c09,0x3c193379,0x3c15e745,0xbba65eca,0xbbf0a9bf,0xba8358fc,0x3a689379,0x3a79b183,0xbbc6e451,0xbbd54955,0xbbd30940,0xbc0da2a8,0xbbce89fb,0xbc54aa74, -0xbbecc4fa,0xbc5577e2,0xbce9f337,0xbd621dc4,0xbd725589,0xbd6d11f2,0xbd811536,0xbda0b5c6,0xbdbbd137,0xbdb3c104,0xbd8620ca,0xbd341c29,0xbcf12eef,0xbd71a8d6,0xbd933359,0xbd8ca9a0,0xbd53149b,0xbce59f3d,0xbc01030c,0xbbf20faf,0xbc4d6586,0xbc16c58d,0x3900442f,0xba9f71aa,0xbae6c5ba, -0xbb9b7aa1,0xbb28a221,0xbaef5036,0xbb87b57f,0xbb43e83c,0xbb42a258,0x3900d559,0xbb017f16,0xbb3a0013,0xbb91a110,0xbc1da0a3,0xbc11a14e,0xbca5f926,0x3d714a14,0x3d5bbdeb,0x3c3ec36c,0xbceebc51,0xbda61122,0xbdc657f8,0xbda2879f,0xbcfa0988,0xbcd93f63,0xbcb65d1f,0xbc8996cd,0xbcaec0bc, -0xbcbce491,0xbcc51694,0xbcde2372,0xbcec23ea,0xbcc542e0,0xbc969989,0xbc458510,0xbbe58ea3,0x3c6dffcd,0x3c04e88c,0xb864cc36,0x39f01352,0xbaa41f38,0xbb16b9d2,0xb9a70944,0x3a6c29f1,0xbae67a89,0x3a1643e3,0x3b3c14f9,0xbad05591,0x3c64b599,0x3ca214ad,0x3d1e4167,0x3d32e235,0x3d156d9e, -0x3c2c223f,0xbc800f3f,0xbbc51566,0x3a8f32b8,0xbc235026,0xbcde650d,0xbd34fda0,0xbd48b808,0xbd5796ee,0xbd7993ff,0xbd20bb8b,0xbd044d2a,0xbd21c812,0xbcb5b79d,0xbc9285ad,0xbc9900e6,0xbc9225d9,0xbca686df,0xbc8a879e,0xb8a378fe,0xbb7053e7,0x3b155e16,0xb997f86a,0x3a009f04,0x3bd00aa9, -0x3b90813d,0x3b3083e7,0x3bacc673,0x3bf428db,0x3c499002,0x3c6cd5c6,0x3c807440,0x3c9012b5,0x3cc01a34,0x3c82bba5,0x3cff99ff,0x3b29d630,0xbc692464,0xbc2304ee,0xbc4222ad,0xbc05276d,0xbb7c010e,0xbb9e1986,0x3c60a98c,0x3ca340bb,0x3c810742,0x3bc6c919,0xbb8493e4,0xbc60653a,0xbcaa8875, -0xbcba6df5,0xbca9caa8,0xbc8dfcc0,0xbc36349e,0x3a068fc7,0x3b7fab38,0x3bcef25d,0x3c5e2f5a,0x3c1aa402,0x3bf4ddc7,0x3b9ab540,0x3b2e2fd7,0x3b922163,0x3ba5067c,0x3bcdddd9,0x3bc9a157,0x3b84a08d,0x3bd56de2,0x3ba5ce54,0x3c029e2f,0x3bbe3ecd,0x3c1e0969,0x3b9b7fdb,0xbb02d436,0xbb11d40e, -0xbbe2b180,0xbbe2a4f0,0xbc0e22ff,0xbc42f67c,0xbbe9cdce,0xbb2eed07,0x3ba5d965,0x3c099288,0x3c48d8bb,0x3c8412d9,0x3c682bab,0x3c521868,0x3c289577,0x3c0986e0,0x3b6fbe60,0x3b8272cc,0x3c1b37d0,0x3c16a492,0x3c0d9052,0x3c07bc68,0x3c3882b8,0x3c18bda1,0x3c66bca4,0x3c16970d,0x3c7b3910, -0x3c255e6b,0x3c57817c,0x3c189c85,0x3c3709e4,0x3c61684e,0x3c956671,0x3c383860,0x3c7fd200,0xbb2f69be,0xbb6ee00f,0xbbaa7c68,0xbbe34057,0xbc0ca52c,0xbc1f8cd7,0xbc338863,0xbbcd5b18,0xbb4099d3,0xb9737267,0x3b23f987,0x3bae4a28,0x3c0a64c9,0x3c140412,0x3c251c1d,0x3c36dc43,0x3c4efff8, -0x3c74a238,0x3c64b32b,0x3c917e2d,0x3c124ec1,0x3bddbd6d,0x3c0e8a99,0x3bde184c,0x3a1a397d,0xbabe90ef,0xbaeb82e1,0x3b028dcf,0xbb34f29d,0xbb5943b9,0x3800e63e,0xba26ec33,0x3b61ed52,0x3b0855e9,0xbb29b1c3,0x39973328,0xbc0e34a4,0xbbb2255a,0xbbdc6111,0xbbe21f19,0xbbf61306,0xbc057167, -0xbc20a653,0xbc0772a6,0xbbedb354,0xbbc298e5,0xbb90edec,0xbb4b2a63,0xbac65ca2,0xbabb532f,0xba8390a0,0xba1d3c16,0xba2b8e68,0x37bdbc90,0xba86e458,0x3b867e12,0x3c55f14d,0x3cd4ccf4,0xba8e240c,0x3c34dacb,0x3cd820ca,0x3cd6f103,0x3ccd897c,0x3cba7289,0x3cc01ae6,0x3cba33ff,0x3cafce63, -0x3c1dfe3b,0xbb72331c,0x3cbbe8e4,0x3c382172,0xbc03f4b7,0x3c811316,0xbb58587a,0x3cb576f2,0x3c520a4b,0x3c66915a,0x3c4b5bfb,0x3c64df91,0x3c735cff,0x3c86c23a,0x3c7d2b01,0x3c8040fd,0x3c8448f1,0x3c899194,0x3c88d7d8,0x3c7e804c,0x3c849139,0x3c836cd5,0x3c7f98c4,0x3c818038,0x3c60e88a, -0x3cada4a1,0xbb81a163,0xbc9b195e,0xbd00cb0d,0x3b696364,0xbc8e1800,0xbd0094d7,0xbd0529cd,0xbd04e7da,0xbcee637a,0xbd00eab7,0xbd00681b,0xbcf9720b,0xbc85319b,0x3bd3121e,0xbd029956,0xbcac9ee7,0xbca8151f,0x3c8f616f,0x3c70b5dd,0x3c442fa5,0x3c29f6e4,0x3c617015,0x3c85e484,0x3ca822ad, -0x3c95afa3,0x3c997c75,0x3c9f8c86,0x3caf124d,0x3cb18ba7,0x3c97c1e0,0x3ca8b7c9,0x3ca38e03,0x3c9b36f6,0x3c8ae5c6,0x3c9236b1,0x3c5b0c18,0xbca266c6,0x3bddc99b,0x3b95ac5c,0x3b8421b9,0x399e1a1d,0x3b897592,0x3bc5161e,0x3ba30566,0xbb38c0fd,0x3c0ef8a5,0x3c4f75e7,0x3b87455c,0x3c097ada, -0xbaa180de,0xbba95487,0x3c4a3194,0xbb1568b9,0x3c34baef,0x3c87421b,0x3c29e40b,0x3bd955cd,0x3c1efbf7,0x3c6df1db,0x3cc31d8a,0x3c9348ff,0x3ca6d576,0x3cb9d811,0x3cddfa75,0x3cdbc560,0x3c992977,0x3cc1fc27,0x3cb88770,0x3cadfbb2,0x3c95dc65,0x3cb7a1ee,0x3bc79201,0xbb5cb4f8,0x3b67753b, -0x3bfa49ca,0x3c2a311f,0x3a94cb38,0x3b6389ba,0xbbcd4806,0x3bd37775,0xbc0d254a,0x3bee6d9b,0x3a1da749,0x3b355ef9,0x3ba409f4,0x3b9d3ed0,0xbc1863d4,0x3b73ae82,0x3ab326e1,0x3c48caad,0x3c4dbf76,0x3bb63b64,0x3b4670e1,0x3c06d104,0x3c83ec78,0x3cf5d4a1,0x3cb641bd,0x3cc455b1,0x3cd1d552, -0x3d0614ba,0x3d0c0795,0x3cb4777c,0x3cfb4ab3,0x3cf66261,0x3cd7c008,0x3ca8907a,0x3cafc249,0x3be77184,0xbbc3ff6f,0x3c81c387,0x3bd0fc36,0x3c9a3855,0x3c85afba,0x3c067780,0x3b38974a,0xbb801d4e,0xba4c944c,0x3b78cd80,0x3c4e5efe,0x3c036796,0x3c672ec7,0x3beb3820,0xbbea991d,0x3c1271a5, -0xbd297f53,0xbbcd0587,0x3cd7e025,0x3cb5e46c,0x3c2c10b9,0x3bfac136,0x3bfb38c8,0x3c8c2a5b,0x3c6c32a0,0x3cd0a05e,0x3d403048,0x3d170243,0x3cdbf790,0x3c4f8da3,0x3bb084d5,0x3ba0e4bc,0x3cad1c58,0x3ca7181b,0x3cfe52c0,0x3c89fe38,0xbb882236,0x3c82dee7,0x3c0dee34,0x3c661534,0x3c2364b4, -0x3b851dc9,0x3ab94c27,0xbb0a3c3f,0xbb02f1d5,0xbbe76369,0xbba5d112,0xba8ee250,0x3ba2968d,0x3b1b16fe,0x3a5c1a9e,0xbcbe2148,0x3b182f2a,0x3c6c0848,0x3c033b15,0xbba62ce4,0xb9797946,0x3bb242e3,0x3bb823fa,0x388dcedc,0x3bcc1ae5,0x3bb9e92d,0x3be8f319,0xbc20160f,0xbc5685f4,0xbbcfb342, -0x3af82b5b,0x3c2b3a7e,0x3c9bdf15,0x3c16fd27,0x3c4d5e79,0x3b100d6b,0x39c1bd19,0x3bc7cbfe,0x3b36c266,0x3b7d9ff9,0x3b24df26,0x39e878c6,0x3b1cd768,0x3ab9365b,0xbbaa46c2,0xbb63373d,0xbba384f7,0xbaf2db18,0xbc26ee25,0xbbfce761,0xbc0449ca,0x3c38c0fb,0xbd2e92db,0xbd3d60c8,0xbcdb822a, -0xbc0ab1fc,0x3cacf577,0x3cac8b3d,0x3ca8832c,0x3cb0703d,0x3ce48e3e,0x3cecef03,0x3cf88aa9,0x3ce7e592,0x3cca7e11,0x3c91a7eb,0x3c5f903c,0x3ba1d48b,0xbb82867f,0xbb991d71,0x3bf0e669,0x3be06586,0x3c230e9f,0x3c20d6b2,0xbbfe1a14,0xbb1ac36a,0x3a5cb4ba,0xba6c01e1,0x3a6b78b9,0x3b18e634, -0xb9cad684,0x3b30ed7b,0xba03cfe4,0xbb8b5f58,0xbba97b34,0xbbc6030f,0xbca0dc64,0xbcd9a8af,0x3d3ed3aa,0x3cef4d87,0x3cca90da,0x3c1be4c3,0x3c83e78e,0xb85224a9,0xbb92133d,0xb9e5b9ec,0xbc9e46a3,0xbcda95e3,0xbcbfc0bc,0xbc68ac2b,0xbc36f9c1,0xbc8c4d7f,0xbb93e9ec,0x3b7a9dad,0x3c5bbd06, -0x3c4d0bfb,0x3c45eb7e,0xba96c1d7,0x3b18da6f,0x3c0bb4ef,0xbb130bbc,0xb89fc94a,0xba308b74,0xbb1a1224,0x3a424cf0,0x3a1a1621,0xbaab037e,0x3a6ce42c,0x3b8adf4e,0x3b99285e,0x3c2e97f2,0x3cb8305a,0x3d0b333b,0x3d3491f7,0x3bb9a2d3,0x3cf6408f,0x3d9236ad,0x3d9299dc,0x3d9645cf,0x3d60e690, -0x3d043bcf,0x3b404ed8,0xbc23eeab,0xbc5b2c16,0xbc780264,0xbb01a367,0xbb025f68,0xbc80d33f,0xbc54e523,0xbc8c0c77,0xbca39734,0xbcb151d5,0xbc5f76ca,0xbc0433a5,0xbbc6d125,0x3b824925,0x3ac807d9,0x3aef6752,0x3b895de3,0x3c23042a,0x3b571b12,0x3b694a33,0x3b10fba4,0x3c2417e3,0x3c3b676a, -0x3c47929f,0x3c5f73e3,0x3c7055e2,0x3c3f6b03,0x3ca18055,0xbc2aaeed,0x3c0dfbb8,0x3cbbbd3c,0x3ca9243b,0x3ce9e74c,0x3d1de335,0x3d433c84,0x3d56575c,0x3d1506c9,0x3cb7f354,0x3c144d18,0x3b9c0407,0xba8f8340,0xbbfdeb99,0xbc4d7a66,0xbc12c81e,0x3b02d9dc,0x3b3f95d5,0x3b03f9c4,0xbb4d9c5b, -0x3b173ee4,0x3be2bda5,0x3bb42604,0x3c13c2a2,0x3c116201,0x3beed281,0x3c09daf0,0x3c12d3ec,0x3c562f20,0x3c5d6507,0x3c48d7b4,0x3c2579b1,0x3c145d3f,0x3c1e4a39,0x3bbe847c,0x3c22b417,0x3c22790c,0x3c8acf07,0x3cb1792d,0x3c970e4c,0x3c95cd37,0x3c9bd941,0x3ca5eb24,0x3cc5c4b1,0x3cc54ed2, -0x3cdbd8c4,0x3ceef8f2,0x3ce5ea3d,0x3cda4efe,0x3cce3435,0x3cc48372,0x3cafbf9e,0x3ca0eede,0x3c92ffc7,0x3cb37440,0x3c8d0e50,0x3bfb5442,0x3c188cf1,0x3c203d7d,0x3c2a41f5,0x3c0e9e4a,0x3c2a66da,0x3c077c93,0x3c58ddb9,0x3bf78f2e,0x3c27c6cb,0x3bc79c40,0x3bf463c0,0x3c04432e,0x3c035a3d, -0x3bd618a9,0x3c30b3ae,0xbc073bd1,0x3c0a9dd5,0x3c27356e,0x3c34fd2b,0x3c5868b4,0x3c7c946c,0x3c904705,0x3c9c7d2f,0x3c995ca3,0x3c909b54,0x3c89e75b,0x3c814a4a,0x3c74f8f3,0x3c5e2bb4,0x3c73ea82,0x3c8425c1,0x3c8c7281,0x3c9579ab,0x3c95c843,0x3cab6dc9,0x3c46b02f,0x3c921f49,0x3c73ef4d, -0x3c33d7da,0x3c012c1c,0x3c1c2a23,0x3c2cb81d,0x3c09c312,0x3b87894e,0x3c0f5061,0x3c24f4ca,0x3bb6b870,0x3bdfef18,0x3b241719,0x3b4e61d7,0x3c0f5011,0x38c4f42e,0x3c60c691,0x3c2e4f85,0x3c456980,0x3c4d2e69,0x3c4fd5c7,0x3c5367d0,0x3c5f0efa,0x3c58f3eb,0x3c5947cb,0x3c5805b9,0x3c5a7ef6, -0x3c5d2ae2,0x3c5c7fc2,0x3c5bc7b9,0x3c5857a0,0x3c56c9f9,0x3c568288,0x3c497970,0x3c74362c,0x3b931b0d,0xbba4648f,0xbc511b14,0x3bbe8b92,0xbbdb8335,0xbc871573,0xbc886194,0xbc80d69f,0xbc619cec,0xbc7c67cb,0xbc7ab7ab,0xbc6a299e,0xbbfd9e84,0x3b9afe34,0xbc6ff360,0xbc1c7a01,0x3c4706f4, -0xbb88c893,0x3c7f19d9,0xbc37dc25,0xbb513f5c,0xbb67fa1f,0xbb04071f,0xbb4e1fb6,0xbb7c875b,0xbb92ee1d,0xbbb01204,0xbbb6a93e,0xbbc2bdf4,0xbb826023,0xbb6aa7c4,0xbb86ef54,0xbba3c038,0xbbb1852a,0xbbba63ad,0xbba61787,0xbb7a3575,0xbc277f5a,0x3c820c91,0x3cd038b8,0x3cc54ab7,0x3c3c5e1e, -0x3cca44a6,0x3cb72224,0x3cc4d0c5,0x3cc4aa6d,0x3ca9d086,0x3cd39d46,0x3cda72a9,0x3ccebefd,0x3cc86524,0x3c0f3306,0x3cb0b272,0x3cdba0f9,0x3cdb7d6f,0xbb7438b3,0xbb8caf77,0xb78d7cc9,0x3b11f482,0x3b00e633,0x3a24531d,0xbad98b0f,0xbbbf09ec,0xbbf54ace,0xbc0657c7,0xbb88015d,0xbb681a5a, -0xbbb080e0,0xbbf989ec,0xbc05b79f,0xbc0ae68c,0xbbb5ce01,0xbbf9ca5f,0xbb321969,0x3cafa08c,0x3b9177fa,0x3c3afd69,0x3c13635f,0x3c2812c0,0x3b8776f2,0x3a9c6d24,0x3b541935,0x3c13cf13,0x3b80f301,0x3a41860d,0x3bae992a,0x3bb145fc,0x3c2f8a90,0x3c0a0f65,0x3a8a228d,0x3c5d416d,0xbb9093ee, -0xbc0c59f9,0x386cdd1f,0x3b153b24,0x3b97e170,0x3b048e71,0xbb87de7c,0xbc28b042,0xbc407c65,0xbc633a8c,0xbb5612c0,0xbaba7155,0xbb963072,0xbc20dafd,0xbc40e930,0xbc5492cf,0xbc008651,0xbc3dce81,0x399a2970,0x3c56bdd7,0x3c20e83b,0x3c433522,0x3c1abe9b,0x3c5b2075,0x38a50cce,0x3bbb0ae7, -0xbbd63e6d,0x3bb111cf,0x3a54e0b6,0x3c3c9b39,0x3b8f1fd2,0x3c2e7a2c,0x3c2627a8,0x3b813559,0x3bd9ea36,0x3c92c678,0xbb2d953b,0xbbb28932,0x3b9bd20a,0x3c1e26de,0x3ca513b3,0x3c92d0ce,0x3beb5336,0xbbbdced4,0xbc6168c7,0xbc9e2cf3,0xbbac188a,0xbab55d95,0xbbf91f54,0xbc5dc327,0xbc848547, -0xbc8f87f4,0xbc293699,0xbc6ccf08,0xbb7e8048,0x3c47be96,0x3a631b60,0x3c860e8b,0x3c2afe0c,0x3c02de6d,0xb9912015,0xbade7eaf,0xbb5cf71b,0xbc03c7ff,0x3b926903,0x3bf5d326,0x3b9205ed,0x3c18e64b,0x3bebf892,0xbc015c29,0x3ba07958,0xbb85d217,0xbc71570e,0xbc9ae44f,0xbc26e3c7,0xbc943283, -0xbce10826,0xbd00a753,0xbce82abd,0xbd171ce4,0xbce7662f,0xbc0a7861,0xbc698711,0xbc50bc4d,0xbc3bbdc1,0xbc818de1,0xbc7fd9bd,0xbcb6abbe,0xbc685435,0xbc64c952,0x3c3646ce,0x3cac387f,0x3b7aca8a,0x3c5686b6,0x3c3537f5,0x3c2fbd39,0x3b73f88c,0x3a428057,0xbb117df2,0xbb83d4d4,0xbbd1e70f, -0xbb8a62d7,0x3b53c586,0x3bc07d53,0x3c64f037,0x3c98199c,0x3a47ee57,0x3c91a6b0,0xbc194a23,0xbceaef2b,0xbc646706,0x3baab5d5,0x3ca014b0,0x3cc1774a,0x3c82b4ea,0x3c0ac1e0,0x3b609d66,0x3bed5856,0x3b2309b8,0xba0c940a,0xbb929259,0xbc038253,0xbc29ef03,0xbc8bfdde,0xbbfe27b0,0xbc14d2dd, -0x3b813e35,0x3c59be6b,0x3c0fa2d4,0x3b4ffd08,0xbb8de36d,0xbb8dfa62,0xbaf7681c,0x39d8fb57,0x39b82397,0xbba8d4fb,0xbb9c8a97,0xbba9d550,0xbbf8dca0,0xbc4a466f,0xbc965542,0xbc153a1a,0x39ce928e,0xbd018ea7,0xbd0aa537,0xbb195b0d,0x3c0e4c49,0x388cd1e3,0xbc012507,0xbcc87c88,0xbd199066, -0xbd303da8,0xbd1dff2f,0xbcdf0aaf,0xbce705f1,0xbcd8989e,0xbce1f1b4,0xbce12fab,0xbcb4f3b2,0xbc5b5137,0xbc158079,0xbc52ede9,0xbb1e76a5,0x3c3d7f18,0x3b8956be,0xbb9fda34,0x3a03960b,0x3b6f72af,0xb96332a2,0x39744b3e,0xb9cbad40,0xbab4150e,0x3ae81f5d,0xba178ae4,0xba335b03,0x3b6e497e, -0xbbc47b2f,0xbc345c9a,0xbccdef49,0x3d29fb3b,0x3cafbe5e,0x3aec9975,0xbc3f936a,0xbd2ebb45,0xbcc0db5c,0xbc7a86b2,0xbcc976d8,0xbb3bb830,0x3a9bba4b,0x3a03e6df,0x3813f8ef,0xbb846dd6,0xbc5fe6c6,0xbc1e2330,0xbc263044,0xbc266bd8,0xbc449a45,0xbc38f64f,0xbb98fc9d,0x3c775acb,0x3c1d2038, -0xbbbe3222,0xbab0ba41,0xbb041f7c,0xbb75073e,0xbb1142af,0x3a26d83b,0xbaf0ae23,0xba03bcdb,0x3a68d31d,0xbb78dee5,0x3bbd2256,0x3c4ba5df,0x3cf5ca10,0x3d0c6d95,0x3d4cda0a,0x3d6f3841,0x3d5d2768,0x3d57989f,0x3d0bca75,0x3c965b6a,0xbc096363,0xbd199bc7,0xbce31a2e,0xbc99f8c4,0xbbab2179, -0x3b717bdc,0x3b5264b5,0xbbae9cc1,0xbc280bba,0xbc7110a7,0xbca26323,0xbc6b82a4,0xbc3e6216,0xbc267310,0x3ae7e071,0xbac75e7e,0xbabf0a8b,0x3b27c7c5,0x3b806443,0x3c07846c,0x3b64db81,0xba302814,0x3b6063f2,0x3bf38ca7,0x3c662ad2,0x3c9c77f1,0x3caf1f34,0x3cc36c4f,0x3cd4ab91,0x3d16dd4f, -0x3cd72431,0x3cad411e,0x3c688912,0x3ca94ada,0x3cb23782,0x3cd96be9,0x3cce2dad,0x3c8e4b60,0x3c54725c,0x3b26d857,0xbc0e0148,0xbc8afc4b,0xbc9eef76,0xbc94a695,0xbc91e4d0,0xbc7dae07,0xbc1bdc63,0xbc24e16f,0xbc065fbb,0xbafbd57e,0x3b8110ec,0x3be70814,0x3c3f8727,0x3bf330bd,0x3b9d08ac, -0x3bbb02cd,0x3c034d05,0x3c35567f,0x3c090c15,0x3c432484,0x3c4c524b,0x3c39a09e,0x3c3a8294,0x3c49de56,0x3c606c94,0x3c8cd81e,0x3c9cd6c6,0x3c4f6977,0x3c08d0ce,0x3c3919c8,0x3c170728,0x3c3c1204,0x3c4e2838,0x3c6ab72f,0x3c8ac3ee,0x3ca975a3,0x3cd15c9a,0x3cc2a789,0x3cb0855a,0x3ca46c43, -0x3c903b34,0x3c79fa12,0x3c4dfe4f,0x3c57c86a,0x3c30de6b,0x3c7c3292,0x3c965fa9,0x3c530c93,0x3c1cd540,0x3c0cb035,0x3c30ad56,0x3be437d7,0x3c33cc81,0x3bc8d9fb,0x3c561630,0x3be253e3,0x3c21d24a,0x3be23d61,0x3c372bde,0x3c81e750,0x3cabd07f,0x3c8ab47e,0x3c682652,0x3c0606b1,0x3bcfcba7, -0x3bd325f0,0x3bb5cf44,0x3b9df4dc,0x3b81120a,0x3b56301f,0x3b629437,0x3b4b6eea,0x3b51dc09,0x3b892905,0x3bcfc1fb,0x3c162ff6,0x3c13aeec,0x3c15fb55,0x3c07825a,0x3c0ca570,0x3be56369,0x3be08f23,0x3c962403,0x3c38c027,0x3c5c34e6,0x3c4a4c82,0x3c68e3fe,0x3c458737,0x3c205ced,0x3c34708c, -0x3c5f2463,0x3c1088f7,0x3be927ec,0x3c0734a1,0x3bf9ed2f,0x3c11ddbd,0x3c1d7687,0x3bd6f2bb,0x3c57568b,0x3b600290,0x3ba82e3a,0x3b9ccf85,0x3b955235,0x3b8f93b5,0x3b86580d,0x3b62fa12,0x3b834504,0x3b96ea1e,0x3ba8752f,0x3bbe8a54,0x3bc7e5f8,0x3bdb6244,0x3bbe37c0,0x3bb169e7,0x3ba9f308, -0x3b95046e,0x3b9e2745,0x3aa0b154,0x3c4dc2d5,0x3c92bfb5,0x3c8b92d2,0x3c3f4ccf,0x3c9ab06f,0x3c8d3c03,0x3c90ede5,0x3c8ac2c1,0x3c7212e5,0x3c86d006,0x3c839679,0x3c7ab787,0x3c8c907d,0x3c3923b5,0x3c576668,0x3c8ed66e,0x3babc376,0xba1a3272,0xbc87a392,0x3b210f14,0xba70b8c1,0xba908682, -0xba3f7b96,0xbb2626a0,0xbb3bfef1,0xbac5a084,0xbb258fd6,0xbb1eed58,0xbb24a133,0xba598c3f,0xb9dadfd3,0xba0cdf0b,0xba36519e,0xba41f3ec,0xba4b9cdd,0xba3a3770,0xba16d8f1,0x3b3fe398,0xbc83508a,0xbc8c9772,0xbb0b389f,0xbc56694c,0xbc929342,0xbbac7b56,0xbbe75775,0xbbf2a2b2,0xbbb7c975, -0xbc08b0b1,0xbc0df2cd,0xbc1233c9,0xbc8e96a3,0xbc44312d,0xbbb50968,0xbc9d9db3,0xbc52a8c6,0xbb71cf8a,0x3a739505,0xbb287ae6,0xbadcb876,0xbbe45a37,0xbc05355f,0xbb823586,0xbbdf34f2,0xbbd0604d,0xbbc7ce9b,0xbac40cd6,0x3a112ec7,0x393d83c1,0xba98fb0e,0xbb25fe21,0xbb1a2663,0xbb5b2611, -0x39b932be,0xbb907b96,0xbc34e102,0xbad99fa0,0xbba5d019,0xbb1ae4a5,0xbb933a80,0xbbde4b3c,0xbba54a08,0xbc0a6a83,0xbc39c7f5,0xbb9a9889,0xb94addf5,0xbb80e180,0xbb190bff,0xbbae6197,0xbc2b2ded,0xbb094d3a,0xbc54665c,0xbbc56c53,0x3aec4c4f,0xbb8baa0a,0x39994668,0xbc3ed016,0xbc7d4cc2, -0xbbf3ccd2,0xbc690cea,0xbc544ffe,0xbc4d1009,0xbb6aa878,0xb9ef054e,0xbb01460b,0xbb2f1781,0xbb84eec8,0xbb772bef,0xbb7054b9,0x3aeba9f1,0xbba947cb,0xbc131028,0xbaa447cc,0x3b81d241,0x3b1218a2,0xbb5ce22d,0xbb555192,0xbbe22341,0x379048aa,0xbc1dc195,0x3b6a9d61,0xbaf4d6ff,0xbb23f2d0, -0x3a18b003,0xb953aa5a,0xbc4263ec,0xbbcc0a6e,0xba54089a,0x3953f0a1,0x3bb9b18f,0xbb1925b8,0x3a97e98c,0xbc83bf56,0xbcc1b431,0xbc2c4b39,0xbca5ba7b,0xbca32267,0xbc97e700,0xbbd5fc2d,0x39106dca,0xb988b28b,0xbba729ed,0xbc0c16b9,0xbc0c3a47,0xbc0d5d4b,0x39be3568,0xbba73145,0xbbbdf52d, -0x3c25d9f4,0x3bf63589,0x3c3c9c30,0x3c31af49,0x3b96bfdc,0xb76b2fb0,0xbb784ec0,0xbab18bed,0x3b8ad9d2,0x3c304d81,0x3bcdabc5,0x3c2801fc,0x3abbf5f8,0xbbd89379,0x3b83a9b7,0xbd569419,0xbcc53817,0xbbab69bd,0xbbb504b2,0xbc422a7c,0xbc9f5c6a,0xbcbd7e03,0xbc93f2d2,0xbcc375e3,0xbc5f7380, -0x3c4b491e,0x3c6637f0,0x3c71373d,0x3c48a4a7,0xbada6271,0xbb8c866e,0x3c455121,0x3bcc5401,0x3bf7f2f5,0xbb63815c,0xbbe4042d,0x3c16b368,0x3c3e12df,0x3c12d6f4,0x3b8a5926,0x3aa73f7a,0x3ad776e0,0xbaa3c25b,0xbb76245b,0xbbfe0b6b,0xbbb57a44,0xbb0dd2bd,0x3ac3a311,0x3abcb656,0x3bd2bca8, -0xbd12203c,0xbb3fd23d,0xbb688f98,0x3ba58965,0xbbe0f579,0xbc132232,0xbc5678ca,0xbc71982a,0xbc8fa9c0,0xbbf40a1e,0xb734211a,0x3b76fead,0xbae9fbc7,0xbbbd922e,0xbc8fe414,0xbc45cde9,0xbc5902fc,0xbc9a115b,0xbc9306f7,0xbbe0cd45,0xbbb37eec,0x3b20e146,0x3b49e401,0xbc019e06,0xbacbe867, -0xba019bb4,0xbaf0dc20,0x39b98fe5,0xb98ea098,0xbbaaf361,0xbb6745f5,0xbbde6910,0xbc0e312f,0xbc92a11f,0xbc9f8391,0xbca8b77d,0x3ab6dfaf,0xbce6f017,0xbca4e855,0x3b964bb3,0x3a9bf4fc,0xbcf079f0,0xbd15503d,0xbd2f0973,0xbd396646,0xbc93ee7c,0xbc21b8ae,0xbc860ca4,0xbc154bb5,0xbc29b34a, -0xbcb2779d,0xbc95c002,0xbc87a767,0xbc4658ca,0xbc1858cd,0x3931245a,0xbbcadaf4,0x3a09f304,0x3ba63882,0xbc4b41d2,0xbb763bdd,0x3b15b7f8,0xb995f6f6,0x3a4a9822,0x3a35ae26,0xba2791ec,0x3a28fb21,0xbb3465e0,0xbb4f1225,0xbb217575,0xbbb792c3,0xbca90b24,0xbcb87a8e,0x3cb85f38,0xbbdea844, -0xbd4426d7,0xbd974332,0xbdb6d3c4,0xbd4f2e9c,0xbd029efd,0xbce297fe,0xbcbabbf5,0xbcb3d614,0xbcc4510a,0xbcb6d6e4,0xbcb34342,0xbcb7408a,0xbc8eb11f,0xbc798603,0xbc277832,0xbc533d65,0xbbab372c,0xbb80ef4d,0x3b2d8b2a,0x3bac169d,0xbbe1c927,0xbb8e0428,0xbb9e0407,0xbbc6e752,0xba918755, -0xbb13f2a6,0xbb820dc5,0xbae4caa8,0xb95bffde,0xbb5883b1,0x37bdc762,0x3bc3568f,0x3caacafb,0x3cdbc3d0,0x3cd920f1,0x3cca9577,0x3ca18304,0x3c37ffa5,0xba6d3ffe,0xbcbcdf0b,0xbd25d7d0,0xbd4e03d6,0xbd1e7769,0xbcfee11c,0xbcea1569,0xbcb05764,0xbc744e8b,0xbc2ee5e3,0xbc6d42ae,0xbc7fa293, -0xbc3d5f30,0xbc500174,0xbc14e7dc,0xbc2d6c48,0xbc3b3e58,0xbbbbb79d,0xbb47d147,0x3abfffc4,0x3b69b657,0x3bb0d990,0x3aa08fc3,0xb888a68c,0xbb156af9,0x3b96e169,0x3bfe7cb8,0x3c3cc6e1,0x3c9159e4,0x3ca1e3b4,0x3c9f3788,0x3c9a4d3a,0x3bab239e,0x3a4a3de0,0x3c4b0b6b,0x3c9b77a2,0x3cfbafa7, -0x3d1fd4bf,0x3d20571e,0x3cd910dd,0x3c57382b,0xba4f8aea,0xbc35ef5f,0xbccd5a14,0xbd03e9e4,0xbd01a2c0,0xbcdb0c70,0xbcaf520c,0xbc4a9062,0xbc11a1e9,0xbb8c703f,0xbb022636,0x3b22b851,0x3b6257bd,0xbb2eba08,0xbb0cab7f,0x393aeeca,0x3b4513d8,0x3c063b73,0x3c306882,0x3c57bdc3,0x3c4ce68f, -0x3c4554ca,0x3c345cf3,0x3c37433d,0x3c193ead,0x3bf4ab93,0x3bc756ec,0x3b8852b4,0x3c3536f4,0x3c84ba63,0x3c600fc7,0x3c620dff,0x3c59c4fc,0x3c711451,0x3c95cb74,0x3c9792b1,0x3ca25720,0x3cb3d4be,0x3caec734,0x3ca7a6b5,0x3c95cd9e,0x3c885c71,0x3c6e5af4,0x3c583635,0x3c4528ce,0x3c5178fd, -0x3c1fcd34,0x3bd89f9d,0x3be67dbf,0x3bee3b0c,0x3bf9aea6,0x3be245fd,0x3bd6ffab,0x3bb72590,0x3bd41d22,0x3b17ca41,0x3ba6d33a,0x3b2ac5e8,0x3b4ad2c3,0x3b7a6d60,0x3b8451d8,0x3b8c50d3,0x3bbcde7c,0x3b6e06e9,0x3bd78539,0x3c08da2f,0x3c074fd1,0x3c23b8f2,0x3c3869fe,0x3c489a7b,0x3c4c68d3, -0x3c51a1ce,0x3c57728c,0x3c5aca28,0x3c609ea7,0x3c65e122,0x3c6bb5ca,0x3c5c8c0a,0x3c500c08,0x3c40516a,0x3c2c000c,0x3c21c325,0x3c03d6d3,0x3baad5b9,0x3bf432a6,0x3b979198,0x3bae42c8,0x3b7b1122,0x3b84ef5b,0x3bb5dd0f,0x3b738556,0x3b36d7e8,0x3bbbe645,0x3c0d3414,0x3be15e42,0x3bf2c19f, -0x3bc297ae,0x3ba7dc0d,0x3c0393d0,0xb9f88b7f,0x3c30b254,0x3c20a05b,0x3c25e6c8,0x3c28aed6,0x3c273aea,0x3c28f165,0x3c2cc315,0x3c387395,0x3c41397d,0x3c48d72c,0x3c511cbc,0x3c586daf,0x3c637a5c,0x3c539742,0x3c47eaef,0x3c3e808a,0x3c322407,0x3c2671c4,0x3c32a39b,0x38929ce5,0xbb3751cf, -0x3b46c9cd,0x3a762cc3,0xbb6da1ed,0x3b2ac1f7,0x3afe60bc,0x3b0a5570,0x3b431ea0,0x3a9a990f,0x3a4487bd,0x3a8cca89,0xbb248beb,0x3ad40e7f,0x3b5ccfec,0xbb2df870,0x3c3445b2,0x3c335a32,0x3c97af94,0x3c0130e0,0x3c128495,0x3c2b908f,0x3c2e7e83,0x3c505b0e,0x3c5529a0,0x3c479714,0x3c3bbad2, -0x3c30dc9c,0x3c16bea4,0x3c32490d,0x3c3aaacf,0x3c49dcce,0x3c33a34e,0x3c2e83ed,0x3c2e5154,0x3c3246e2,0x3c21ca75,0x3c20448a,0x3c9e1ca0,0x3c637589,0xbbec109a,0x3ca176cc,0x3c6b54fe,0xbbe72c11,0xbbb2ecc3,0xbba37c73,0xbbaa58c3,0xbb21cd7b,0xbaf2ff3c,0xbb085e92,0x3c737b38,0x3ca10033, -0xbc01a3ac,0x3c5c063a,0x3c1594f1,0x3c432957,0x3bf32e02,0x3c3a2d42,0x3c45ef5d,0x3c9bbe74,0x3cabcc45,0x3c980b4b,0x3c821d4d,0x3c51a016,0x3c15d95f,0x3c42fdcd,0x3c5f6784,0x3c86cec0,0x3c5d5c6d,0x3c574aa8,0x3c5ebf26,0x3c6867aa,0x3c3bf6b1,0x3c731ebb,0x3be9fa6b,0x3c3e6823,0x3c8a4490, -0x3c2ba085,0x3c19a9e1,0x3c3b7288,0x3c1a3c31,0x3c502ed9,0x3c5b5970,0x3c5f8045,0x3c33c9a4,0x3c191d4f,0x3c390a4e,0x3c1d320b,0x3c2a48a0,0x3c5754bc,0x3c5f6a9c,0x3be2f4c4,0x3bc936cc,0x3c521b23,0x3c5640af,0x3cd0278a,0x3cf4fa9c,0x3cc10025,0x3ca3b03a,0x3c7a7eef,0x3c03f3ba,0x3c82b35a, -0x3c982aa0,0x3cc6545b,0x3c8aa7fd,0x3c7adb19,0x3c7fa01a,0x3c77870f,0x3c5350b8,0x3c3f3f9b,0x3c6b9d02,0x3c60a389,0x3c78349c,0x3c4ff75a,0x3c1df76f,0x3bc41cfa,0x3b533df0,0x3b1cfaf5,0x3bdd3b6f,0x3ba78971,0x3c0dc807,0x3bb8a00f,0x3c1c4596,0x3c2a596a,0x3b8cdfb0,0x3c317e6d,0x3c9e0651, -0x3bdeaecc,0x3b579bcb,0x3c44dd71,0x3c4eb64f,0x3d10fc91,0x3d33f265,0x3d18ac03,0x3cf62434,0x3c993cdf,0x3ba1f74e,0x3c60a936,0x3cb8cd6a,0x3d0609a9,0x3cbff166,0x3ca955f0,0x3cabb119,0x3ca7c46f,0x3c634394,0x3c4474e6,0x3c272e23,0x3c1a4136,0x3c7fcb1b,0x3c56d306,0x3c1a5030,0x3b0f3a8e, -0xba567059,0xbb8ee671,0xbb9668eb,0x3bba2201,0x3c0672a0,0x3b5aaeec,0x3c176810,0x3c0970a4,0xbad29c8b,0x3c7fa741,0xbc458cc3,0x3c4093a2,0x3c56794e,0x3c96f806,0x3c3427e4,0x3c8b4270,0x3c85da08,0x3c85ea99,0xbbf0501f,0xbc00d478,0x3c8c6391,0x3c39a8b6,0x3beb9e23,0x3aae39cd,0x3b0ded17, -0x3b4cfc74,0x3a5da08b,0x3c17a20a,0x3c5368c4,0x3c9bc2d2,0x3c72f290,0x3c42c1b3,0x3ca2a447,0x3c387383,0x3be3dcfb,0x3a408cc2,0x3b1d36b6,0x398aa8d7,0xbb8b8838,0xbb829ad7,0xbb12b136,0x3b560639,0x3bd10f73,0x3c45bfa7,0x3ca0101f,0xbbf5c673,0x3cac5b3f,0x3b9772e3,0xbbeb350e,0xbb8050e3, -0xbc521548,0x3c3df980,0x3c871676,0x3abeba38,0x3bf6689f,0x3bc330df,0xb9c713b0,0x3b837ccb,0x3bd961ea,0x3af5efdb,0x3bf16a0f,0x3c57e11a,0x3cacc885,0x3c90bb7a,0x3c5528fc,0x3c22da4a,0x3c1f7e64,0x3bf11156,0xba2ebbad,0xb8c9d544,0x3ab0104e,0xb914dea1,0x398031eb,0xba5e3625,0xbb70a2ce, -0xbb289ad2,0xbbb550b7,0xbc03da17,0xbc53e839,0xbc46b249,0xbc0a7312,0x3c5a7a90,0xbc808230,0x387d7672,0x3c91d719,0x3d035dba,0x3d4cc90e,0x3d55059d,0x3d3dbfd7,0x3cc96228,0x3bccb8dd,0xbbc17ebd,0xbb8e7b30,0x3c7fedaa,0x3cc3c30a,0x3c919f4b,0x3c334f13,0x3aa09928,0xbbe30b84,0xbbc832c9, -0xbb98fc23,0x3b802b02,0x3c51d13a,0x3c0334c8,0xbb5f3e13,0x3b31eec4,0x3bb52249,0x3a0ba6aa,0x3a3fc42e,0x39e20a80,0x3a80e8fc,0x3a5be60b,0xbafe7fc4,0x37cf222f,0x3b33d5cf,0xbb97bbf2,0xbc25daa1,0xbc7fe68c,0x3c219b6b,0xbc3fdef9,0xbcd1d924,0xbc4c5490,0x3c7ff314,0x3cf536f9,0x3cd0c6b1, -0xbc0d615c,0x3bc43725,0x3c1d22b0,0x3c2ddc1d,0x3c15cdac,0x3be3868d,0x3b032867,0x3bf4e148,0x3c173e04,0x3bf1568b,0x3b9c52ff,0x3b171bbc,0x3b98831d,0x3be112a3,0x3bd8b0d4,0xbb4f3977,0xbb1c26dd,0xbb2d888b,0xbb81cf19,0xba7695a8,0xb9973193,0xbb832ccc,0xbb379b01,0xbb43e1ff,0xbc06347a, -0xbb8ab008,0x3b1cb59b,0x3c55c986,0x3c70d8fc,0x3d3bc485,0x3da15b25,0x3dbbb523,0x3d9ebfb2,0x3d5f7668,0x3cdbe76d,0x3bf18da3,0xbb668dbc,0x3b4356aa,0x3c01fbde,0x3c9b9938,0x3c39e1c6,0x3c4e8dae,0x3c9979bb,0x3bb61a5e,0xbb279d72,0xbb6e9be6,0xbb9effaf,0xbb717e83,0xba84ec28,0x3a6bdba1, -0x3a71b342,0xbb478358,0x3ac56a5f,0x3b56f1dc,0x3ba013d3,0x3b15fdb3,0x3a4c5604,0x3b7991a7,0x3c028165,0x3c5cf488,0x3ca31c4d,0x3ce0aa75,0x3cfa2dbe,0x3cde0921,0x3d45668f,0x3c6d7da4,0x3d02a04e,0x3d1eae12,0x3d2c1584,0x3d431290,0x3d49b659,0x3d3351b6,0x3d0897e2,0x3bf07016,0xbc3d0f69, -0xbcafde9e,0xbcd4519f,0xbcbc3a75,0xbc75eb35,0xbc10ce3c,0xbbbca390,0xbbfcc829,0xbbc015b9,0xbb84814c,0xbb1a8805,0x3b59610f,0x3bbf827b,0x3bbdcb53,0x3b3d7b9a,0x3a866e13,0x3b6201ce,0x3c1ed5da,0x3c5ba3e5,0x3c5b720b,0x3c6e8ef3,0x3c77f5e4,0x3c6f79b8,0x3c84f69f,0x3ca4c823,0x3c9880e3, -0x3cd7509b,0x3cc0d53d,0x3cc8572a,0x3cdb3d64,0x3cf49fd6,0x3d017813,0x3d0aa334,0x3d165ac6,0x3d2e2d05,0x3d261448,0x3d225724,0x3d19095c,0x3cf88aac,0x3cb66f7e,0x3c5d1414,0x3c368de8,0x3c13d7a5,0x3bd19743,0x3c126a9e,0x3c0f7930,0x3c4dc29b,0x3c6e167d,0x3c2240af,0x3c12c8c8,0x3c181adc, -0x3c136bcd,0x3c121938,0x3be6e2ae,0x3c02e66a,0x3c04bb72,0x3bf2a730,0x3bed88eb,0x3c0383f5,0x3c2f2392,0x3c5cb80d,0x3c76af3c,0x3c9a1f52,0x3c052402,0x3c9ed047,0x3c9fe8ef,0x3cb2b416,0x3cc334c6,0x3cd58838,0x3ce29c9c,0x3cf244ac,0x3ccea39f,0x3cb1f291,0x3c9b9691,0x3c899a52,0x3c8247d6, -0x3c7b04cf,0x3c67b0a7,0x3c4da6ea,0x3c2ea902,0x3c15e915,0x3bc925de,0x3bc2818f,0x3c0e256f,0x3c3794d6,0x3c77401a,0x3c503249,0x3c73c9d6,0x3c93cad4,0x3c925f5f,0x3ca2094d,0x3c9a52b0,0x3c9b7c56,0x3c939da9,0x3c87e433,0x3c8a3cf6,0x3c705cba,0x3c8213a0,0x3c8f8167,0x3cb24191,0x3ca239c3, -0x3c9c2f15,0x3ca5d459,0x3ca7920f,0x3cac08c8,0x3cafbc5e,0x3cba20ea,0x3cb0690b,0x3cacabf7,0x3ca67a5c,0x3ca18ccb,0x3c9a3714,0x3c92d73c,0x3c8d9b3d,0x3c89aa4b,0x3c859dd6,0x3c813b1b,0x3c7a4dfe,0x3c5de90e,0x3c9b99f3,0x3c8812e5,0x3b80891d,0x3caf65f8,0x3c96b457,0x3b816651,0x3b936ff7, -0x3b9980dd,0x3ba05d28,0x3bbeb831,0x3bca2f15,0x3bd9c3d0,0x3c9385ed,0x3cbd5174,0x3b664187,0x3c8b147d,0x3cae9a37,0xbc41ff6d,0xbc4283d9,0xbc6dc7d4,0xbc24909d,0xbc39ad29,0xbc24d128,0xbc528624,0xbc603153,0xbc5db0cb,0xbc662dd8,0xbc659985,0xbc6640e3,0xbc5369eb,0xbc4a9e7b,0xbc3b1484, -0xbc4d36dc,0xbc4e3757,0xbc48c4eb,0xbc44e47a,0xbc25177d,0xbc51a4c6,0xbc26ce2e,0x3a54ff4c,0x3ccb1011,0xbc599618,0xbabe1151,0x3ca9443d,0x3ca0be45,0x3c9d7aa0,0x3c980d60,0x3c95245d,0x3c92f9ab,0x3c88e4da,0xbaf207b4,0xbc7463f3,0x3caa95f9,0xb90978d7,0x3bbf2208,0xbc8e8bbb,0xbc35b160, -0xbc44bba9,0xbc1b6d9e,0xbc84bbac,0xbc9aec0b,0xbc99ac4f,0xbcacf0e8,0xbcb0513d,0xbcad30b3,0xbc964161,0xbc84e5ea,0xbc5f46d1,0xbc885a42,0xbc8e118f,0xbc874d90,0xbc77fd08,0xbc45973d,0xbc56e5cd,0x3c03fc16,0xbb7a4208,0xbb96bf3c,0xbaef3cc7,0xbad58648,0xbc0e2cf3,0xbc144dd5,0xbc3e0b91, -0xbbfab75b,0xbc1c1d5f,0xbc036b7f,0xbbb018e3,0xbbdad43d,0xbb09bd63,0xbb9fef75,0xbc2897c5,0xbc1a1c70,0xbc88098c,0xbc4cee43,0xbc3bdfac,0xbbcf218a,0xbca00f8e,0xbccce6ae,0xbcd3da64,0xbcf4672d,0xbcf51a5a,0xbcf3cb8e,0xbcbe9ccf,0xbca39614,0xbc7cc3ab,0xbcac9163,0xbcb253bb,0xbca5ccf1, -0xbc85b962,0xbc5f005d,0xbbebeec8,0xbaa5ed68,0x3aae06ce,0x3b8ad98a,0xb8f40a62,0x39eb6b12,0xbba8d393,0xbb0215b8,0xbbb9ce2e,0xbb1ca3e1,0xb95b2350,0x3a5b76e6,0xbb4b32d4,0x38edcffd,0xb9c11d69,0xbb788d3c,0xbc05a3e8,0xba5b72ff,0xbc8d5966,0xbc44a169,0xbc0a01e9,0xba87ef91,0xbca4a78c, -0xbcf61a83,0xbd037a07,0xbd1e8064,0xbd2ec1f1,0xbd2f0428,0xbd0e4fae,0xbcda8dd5,0xbc9f654e,0xbceeb8eb,0xbd01968d,0xbceea428,0xbcba13f5,0xbc659783,0xbc05cb2f,0x3b94a0d6,0x3b83883b,0x3c48fe4d,0x3bdc430a,0x3bbc3c69,0x3ab14ded,0xbb3beb46,0xbb5fa5a2,0xbb130e30,0x3b8d04c1,0x3bcf2cd3, -0x3b285964,0x3b9bd59a,0xb8fdf4f2,0xbb34785a,0xbb4f9179,0xbd0d3f37,0xbcd2e8d8,0xbcd8c5bd,0xbcd66c79,0xbcc770d0,0xbcf3e169,0xbd100ec5,0xbd1dfb3e,0xbd397806,0xbd0b9cd2,0xbb4dd0a8,0xbb89c39f,0xbb116f2f,0x3b6730ea,0xbb5356e9,0xbba0c4f5,0xbbaeafa5,0xbc01f97d,0xbc5a8a47,0xbc556718, -0x3ae511a1,0x3b35bf5b,0x3c36e9d4,0x3bae430a,0x3b198e6d,0xb902324e,0x3a8e95b1,0xb9f35670,0xbb95f4bd,0xbbbc54be,0xbb6b7a15,0xbacfb7c8,0x3acb4605,0x3b9389be,0x3c1b500d,0xbce57699,0x3b4ad5b5,0xbc32bb48,0xbbaf7a1e,0xbc4edd29,0xbcb3104e,0xbc88c32b,0xbc70fadd,0xbc986ca7,0xbc6b71c9, -0xbc6876e9,0xbc66e9d2,0xbbff70cc,0xbbc37507,0xbc3be1c0,0xbc9b581a,0xbce8fa1f,0xbd1659e7,0xbcd9dbcd,0xbc8392c3,0xbb70c4c8,0x3bd0ef0e,0x3b3ba1e1,0xbbe11b6f,0xbb72ba59,0xbaa8d42e,0xb9220352,0x39c1016a,0xbaae259e,0xbb808bde,0xbb87fcfc,0xbbdd6120,0xbc036f20,0xbc4d4fc1,0xbc94d1ba, -0xbc83ffdc,0xbb18b1af,0xbc12a134,0xbb0921de,0x3bbb4cb1,0xbb462caa,0xbd2af173,0xbd5673fb,0xbd81f7de,0xbd932c0c,0xbd52f0b2,0xbd17417c,0xbceae435,0xbd0e6224,0xbd2b18f1,0xbd320fdd,0xbd14e437,0xbcc5eaaf,0xbc135001,0xbc1d1f63,0xbc12f3e1,0xbc278da3,0xbb9d8535,0xbad49d7a,0xbbfd74fa, -0xbb947d3f,0x3a571e27,0xb89116a8,0xbad0f3d3,0xbac2cbf1,0x39728612,0xbaa31824,0xbba27c2f,0xbbb0dc77,0xbb0f4f9c,0xbbd44556,0xbc1b24d3,0xbc57acf2,0xbbe8a4eb,0xbd047ccd,0xbdb8116d,0xbddc8450,0xbde0c938,0xbda21450,0xbd513175,0xbcc9cf0d,0xbcb35cb7,0xbc9ec6a7,0xbc919ab9,0xbc8d13af, -0xbc6dfd82,0xbc332aa2,0xbc936845,0xbcbd1c0e,0xbcb7a950,0xbca74055,0xbc365909,0x395d3252,0x3b521755,0xba948092,0xbbc1d993,0xbb991ed1,0xbb8c93b8,0xbb8b0db1,0xb9255b67,0xbb0051bd,0xbbbe8a31,0xbbab28d4,0xbbd1e225,0xbc6371e8,0xbc296dbe,0xbc3cd397,0x3b0d0358,0xba0f3f4e,0x3d4eac3b, -0x3cf5cbb9,0xbbfe0bf4,0xbcba164c,0xbd243d82,0xbd8741ec,0xbd94b273,0xbd6711dc,0xbd31c7b7,0xbd18a076,0xbd25e2ec,0xbd1401d4,0xbcf1aa6d,0xbca5956e,0xbc1bfc08,0xbb948833,0xbb5ddb13,0xbb8bbd1e,0xbbefc002,0xbc132cbd,0xbb8c5352,0xbba1d10e,0xbb9c8b3b,0xba0452d4,0x38077850,0xba90c9f5, -0xba5fddce,0xba6ea238,0x3a8c1a19,0x3b3c949e,0x3c061b82,0x3c62f7a9,0x3cd809a0,0x3cfc806c,0x3cff4ec0,0x3cecc6ad,0x3ce23e18,0x3beeb7f0,0x3ba93dd1,0x3c4a03a3,0x3c80e3b1,0x3c8b7b05,0x3be1b93d,0xbc8fe79c,0xbc9b36e3,0xbca6e665,0xbc9f5edc,0xbcef89db,0xbd065d8f,0xbcf8d237,0xbcf719b2, -0xbcdce625,0xbcba96f2,0xbc937834,0xbc31b1ac,0xba470d8f,0x3b31263b,0x3ab55f9f,0xbb090ba5,0xbb916a2a,0xbb14a795,0x3b0eb82a,0x3bdefd6c,0x3c2f5719,0x3c4d1475,0x3c427245,0x3c3d596f,0x3c1e49f1,0x3c5da5d5,0x3c4c06bb,0x3c5a03f3,0x3c31e708,0x3c288bdf,0x3c534da5,0x3c81bea7,0x3c95cc87, -0x3ca4ac48,0x3c92eaa4,0x3c96e244,0x3ca1bb72,0x3c8b588e,0x3c4b2774,0x3c1ee212,0x3c1576c2,0x3c0c8146,0x3bf23778,0x3b938c8f,0x3afd9ad9,0xbad6e311,0xbb14b35c,0xbb9fb741,0xbb97a72e,0x3ad266d0,0x3b4d5252,0x3bc125f2,0x3bea5e83,0x3c157758,0x3c152565,0x3c11f1c2,0x3bbd1754,0x3bbf65e6, -0x3bc27323,0x3bdb3205,0x3bb669ac,0x3be7af7d,0x3c02f9bc,0x3c2be362,0x3c25fa9e,0x3cab06cd,0x3c5f7535,0x3c5ad6b8,0x3c3e096a,0x3c37538e,0x3c28b99d,0x3c146347,0x3bfdb50a,0x3c0f419d,0x3c32ab09,0x3c4622bd,0x3c622902,0x3c71c503,0x3c813b93,0x3c645e05,0x3c4d35fd,0x3c38ffe4,0x3c23b0ff, -0x3c1e8f1b,0x3bbb7f5e,0x3c016582,0x3ba49c16,0x3b710740,0x3bda2715,0x3bce9507,0x3b8c1556,0x3bb259cb,0x3bbfa698,0x3c0c99be,0x3c0659a6,0x3c27a353,0x3c4a2867,0x3c4c232a,0x3c736a12,0x3c5aa4f2,0x3c55d0e6,0x3c124c2c,0x3c276114,0x3c33c8b7,0x3c271310,0x3c1fedc1,0x3c1b6e2a,0x3c18d333, -0x3c0ef6bf,0x3c1fc890,0x3c2588e7,0x3c2dad5f,0x3c30d864,0x3c36888e,0x3c458057,0x3c38a204,0x3c30feec,0x3c28efc2,0x3c1879b1,0x3c13c98e,0x3c038a42,0x3bc218b8,0x3c2f7884,0x3cb71162,0x3b9b0c49,0x3c2e0912,0x3cc61f47,0x3cc2b186,0x3cbe2e80,0x3cb9722e,0x3cb6e223,0x3cb3eda3,0x3cb1cfdb, -0x3c546e1d,0x3bed70cc,0x3cc5c9ca,0x3c6c5899,0x3c20106a,0x3c7ed772,0x3bd3b0be,0x3c926b55,0x3c47d8be,0x3c64097f,0x3c4e689f,0x3c846d26,0x3c8c7fd0,0x3c89f725,0x3c852ed0,0x3c808907,0x3c742772,0x3c76d082,0x3c7c648a,0x3c88ba36,0x3c831605,0x3c82a12a,0x3c83c446,0x3c83f9b5,0x3c69479c, -0x3c9df373,0x3bf132cc,0xbbb26b8b,0xbcc6a56d,0x3c3b690c,0xbb9beb36,0xbcc396c8,0xbcc27229,0xbcbf1cb6,0xbca957f2,0xbcb3bf0f,0xbcb3b399,0xbcadf066,0xbb894776,0x3c5b769b,0xbcc4435f,0xbbf4c501,0xbc3e828d,0x3c801452,0x3c3ee2b7,0x3c4020a9,0x3c22015c,0x3c97a4ea,0x3cafafd4,0x3ca7abe1, -0x3ca0f359,0x3c933eed,0x3c8760d8,0x3c824b9e,0x3c8cb425,0x3cac3fda,0x3ca54a88,0x3ca7330f,0x3cabf347,0x3ca14514,0x3c9caa12,0x3c93e530,0xbc0336e7,0x3c3038c9,0x3c2d21dd,0x3bcd23e4,0x3b62a025,0x3c0bbc4a,0x3c12dd1b,0x3c2b4533,0x3bdf4e1e,0x3c44c09d,0x3c495275,0x3bd526d4,0x3c0b1386, -0x3b0ab5f6,0x3b787e7a,0x3c5dcf91,0x3b1c9dda,0x3bd5a98e,0x3c27437a,0x3c1afdf0,0x3bca6d3a,0x3cbd089f,0x3cf34e79,0x3ce06d0a,0x3ccfd538,0x3cb245cb,0x3c94343a,0x3c93e704,0x3ca204df,0x3cdcc613,0x3cc6fbdd,0x3cc5664e,0x3cd002c9,0x3cb74e81,0x3cc4dab3,0x3c53fca9,0x3bf305e3,0x3c29cae7, -0x3c3914af,0x3c231205,0x3b25337c,0x3bc06fb2,0xbab82e85,0x3c03304c,0x3b25f195,0x3bdf5bab,0x3af4d1a8,0x3b6ae370,0x3b58283c,0x3b9f47d5,0x3a8b3224,0x3be6f0f7,0x3ad01753,0x3b4b35f5,0x3b2c8804,0x3adfa21c,0xbb2915ce,0x3cad7007,0x3d02aa83,0x3cfe2f69,0x3cf4ac59,0x3cc1ad31,0x3c8caa6a, -0x3c76e6b1,0x3cb079d6,0x3d08c5f4,0x3d039411,0x3d03cf6e,0x3d08875a,0x3cea02cd,0x3cda72c3,0x3c829eb8,0x3b816388,0x3c790438,0x3c3a1a78,0x3c62f873,0x3c21ee68,0x3b8932d4,0x3999539f,0xbb6bc1bb,0x3a86a38a,0x3ba7234f,0x3bf51524,0x3b229a48,0x3bc20ff5,0x3b6aac09,0x3ab2d406,0x3c353b63, -0xbcb78c94,0x3c855bc2,0x3ccf2f3c,0x3cd438b1,0x3cc77c8b,0x3d186592,0x3d1c0a02,0x3d0a8065,0x3c8e7876,0x3c8bcf8e,0x3d23dddb,0x3ce1b8bd,0x3ca16f66,0x3c4cad3b,0x3c25bc65,0x3c3542f9,0x3c984568,0x3cad80eb,0x3ce24ed8,0x3c86b6cc,0x3b8e8f0f,0x3c8b6312,0x3c852738,0x3c234148,0x3b8762e3, -0xba34f201,0x3b17ac21,0x3ae1b006,0xbb3f7db0,0xbaaf3e4a,0x38e948ce,0x3a8af33d,0x3be9bf50,0x3bee96c1,0x3c2a3ad5,0xbc8987ec,0x3c3db18b,0x3c74529d,0x3c41da52,0x3aaeadd1,0xbca311ad,0xbbd24238,0xbb7772bd,0xbc2714c9,0xbbbd7ebd,0xbbbae7f1,0xbb87325d,0xbbf6051b,0xbb82be3d,0x3bf72bc3, -0x3c3f12f6,0x3c930754,0x3ceec765,0x3ca9b431,0x3ca675db,0x3c2450f4,0x3ad76d46,0x3b44d862,0xbabedce5,0x3b8e27aa,0x3bd087a6,0x3b292150,0x3aafeb45,0xba3f4e1c,0xbaf1a4b4,0xba9a1b99,0xbb8308dd,0xbb3695e1,0xbc29561a,0xbbe75e76,0xbba5d0e4,0x3c73e5b3,0xbc09bc9d,0x3c1e712f,0x3c765842, -0x3cc040f8,0x3d487839,0x3d61bf5a,0x3d6904c9,0x3d351692,0x3ce4db18,0x3c87ff13,0x3c833b86,0x3cf01063,0x3d1137ad,0x3d18f599,0x3cd57f53,0x3c5a2817,0x3b5b3911,0xbaadda2f,0x3baeec02,0x3c17d2a0,0x3c00d0ed,0x3bf9c4bb,0xbaf69018,0x3a82a50e,0x3b374883,0x3aa46fdb,0x3a8afd08,0x3ac9971f, -0x3af30540,0x393fa0dc,0xbb75e29c,0xbbc99e9f,0xbb5d3654,0xbbc30440,0xbc500495,0xbc2940cb,0xbcb3641a,0xbd21efbe,0xbd2eacd0,0xbcc20d2a,0x3d0848b3,0x3cc1899a,0x3c8e25d4,0x3c28477a,0xbb1c5035,0xbb69a401,0x3b3720e7,0x3b4d4285,0x3ba29348,0x3bdac6e4,0x3c0b2524,0x3c3288db,0x3c63e9b1, -0x3c5e0c84,0x3c4caa23,0x3c325591,0xbb3f6ab6,0xba0e8080,0xbadd87c9,0xbabbbbfe,0xba10a2a6,0xba2c9827,0x3aa76e7f,0xb7466afb,0xbb698da0,0xbb97a11a,0xbbcd3147,0xbc261e47,0xbc47a3fd,0xbc1d5dc5,0xbc03e0fe,0xbc1b3f67,0x3d038c5c,0x3d5fb187,0x3d92b75d,0x3d531e83,0x3cef3744,0x3c0b9b33, -0x3b9f2d65,0x3c6fefda,0x3c1448e4,0x3beff98b,0x3c067df1,0x3af35f6d,0xb9b0c453,0xb90bc1d3,0x3ab9f279,0x3aeed43d,0x3a11e95d,0xbb6b4ad6,0xba0820a0,0x3b9328c0,0x3b0e041e,0x3be4a6aa,0xbb3a3a8c,0x3a203d26,0x3aaf3f44,0xb7a3502f,0xba0f0ecc,0x3aeb34dc,0x3b8ddd71,0x3bd58d3f,0x3c1efc68, -0x3c67fbd2,0x3ce2c914,0x3d06d697,0x3cde0a76,0x3d2c4916,0x3beae8fb,0x3ce6bc82,0x3d274d5c,0x3d1b629b,0x3d2281ca,0x3d18bacf,0x3cdb1b4e,0x3c41f522,0xbc01422e,0xbc874d07,0xbc911eae,0xbc6f579f,0xbc30e5f7,0xbbe808b3,0xbc1be3fe,0xbbfbd6bf,0xbbca6233,0xbb5d27d0,0xbb43a0d1,0xbb925e20, -0xb9ff7522,0x3a94a21f,0xb98f69cf,0x3b1c099f,0x3b6e6af9,0x3be1faab,0x3c2c20f4,0x3c4e6d5b,0x3c8701de,0x3c871468,0x3c8a0125,0x3c8726ca,0x3c887eb1,0x3c9f29d2,0x3c8ec305,0x3ccb260e,0x3cb3b685,0x3ce9b5e3,0x3d141fb4,0x3d1f1394,0x3d37d658,0x3d326f08,0x3d385f18,0x3d4651d7,0x3d21d6d8, -0x3cfa73ed,0x3ca75bf0,0x3c847c5f,0x3c378cf2,0x3bd637d8,0x3bb399bd,0x3b7571c0,0x3ab4d1ad,0x3afc8edf,0x3b8a3457,0x3b4ebfb3,0x3b0f6878,0x3b90a418,0x3bfbb3bf,0x3c19467f,0x3c0de567,0x3c3e207c,0x3bf1940c,0x3c3bdf8b,0x3bd097d0,0x3c2ad182,0x3c061b2b,0x3c3bc29c,0x3c53a53c,0x3c5788d9, -0x3c47662c,0x3c9d537d,0x3c2d9793,0x3cde6f14,0x3ce11c7b,0x3ce9839c,0x3cf5fcc8,0x3d0120f6,0x3d04d5b8,0x3d0a8ccf,0x3cf5625c,0x3ce496c6,0x3ccf90c0,0x3cbc265a,0x3ca4e230,0x3c88c7c7,0x3c83a5a1,0x3c78e661,0x3c6f3e89,0x3c63d01b,0x3c4a8ad7,0x3c525900,0x3bf0ba1b,0x3c6932d3,0x3c7c6943, -0x3c55f8bd,0x3c599695,0x3c90616e,0x3ca147b9,0x3ca9a0a9,0x3c943cbb,0x3cb5d2d4,0x3cbc2f69,0x3ca66740,0x3cb1587c,0x3c9a65e4,0x3ca5f105,0x3cceb371,0x3cabe981,0x3ce557f7,0x3ccec294,0x3cd84d19,0x3cd83cab,0x3cdd3778,0x3ce19247,0x3ceb9794,0x3ce1851f,0x3cda2ceb,0x3cd24e21,0x3cc78f93, -0x3cbf1a1b,0x3cb59be3,0x3cb4fe6c,0x3cb1b67d,0x3cadcd49,0x3caa9b0a,0x3ca2ce25,0x3caacee4,0x3c8bffea,0x3c24040f,0xbae4a049,0x3ca6af92,0x3c354fae,0xbb27d6ce,0xbb0f93af,0xba9c63bb,0x3a54c295,0x3a0b6635,0x3aae4019,0x3b28c1af,0x3c51a7f8,0x3cbfa25c,0x3af3713f,0x3c482262,0x3cdd6518, -0xbc136ef6,0x3b73af7b,0xbc7529ea,0xbc01f42d,0xbc108f2e,0xbbf5acc0,0xbc0b8ce6,0xbc176f5f,0xbc29e293,0xbc2c3e28,0xbc306943,0xbc349689,0xbc2c3eb5,0xbc234c7a,0xbc0d564c,0xbc1ec7ff,0xbc1f45ad,0xbc1a3ddf,0xbc149b8d,0xbbeeb8d8,0xbc50fe58,0x3bb3a80c,0x3c8b5776,0x3ce2a03b,0x3902bdf2, -0x3c75855a,0x3ccd9f82,0x3cd31e97,0x3cd2a303,0x3cc3379e,0x3cd38604,0x3cd3cfa7,0x3cca55d0,0x3c67a86b,0xbb220dd6,0x3cd2930c,0x3c8e2677,0x3c96c180,0xbc4016a8,0xbc1ef725,0xbc00033e,0xbbd1bae3,0xbbfdbf72,0xbc1d699e,0xbc538107,0xbc650934,0xbc7ac780,0xbc803826,0xbc7ec2df,0xbc6e4c86, -0xbc34a139,0xbc5efe0a,0xbc584f5c,0xbc48fddf,0xbc1f2da5,0xbc1b0940,0xbbdab61f,0x3c9fd8bb,0x3aade00e,0x3b759182,0x3b6803b8,0x3b97e027,0xbae4b506,0xbb5fc3dc,0xbb3fc0ea,0x3b801ca0,0xbb467e78,0xbba85449,0x39491754,0xbb1a9223,0x3b9257e2,0x3bbf68be,0xbbb21235,0x3ae0938b,0xbc502f61, -0xbc71d080,0xbc20c81f,0xbbe4f170,0xbbd918dd,0xbc29da86,0xbc95d89f,0xbc9e41d7,0xbcb07454,0xbcbc6bd8,0xbcaae7c7,0xbc95ce45,0xbc2a170c,0xbc867dfd,0xbc856fd3,0xbc74fd24,0xbc26bde3,0xbc3a699c,0xb8af6a3c,0x3c2f2d3c,0x3c03a839,0x3bf762b7,0x3b562278,0x3bdb70a9,0xbb03f046,0x3b809c6a, -0xbb974f2d,0x3becbccf,0xb9d7ca99,0x3ba05659,0x3a8d8bc7,0x3b1ac011,0x3b42e095,0x3bf30fbf,0x394886c4,0x3b4c478a,0xbc585496,0xbc559042,0xbbf57880,0xbba144dd,0xbb1733a9,0xbbf5cb04,0xbca303ee,0xbcad5220,0xbce46404,0xbd00d9b7,0xbcfd0801,0xbcd637cc,0xbc7e400c,0xbcbe7bc1,0xbcbdeb45, -0xbca61588,0xbc4ccd08,0xbc2dc581,0xba7a8629,0x3c674271,0x3b66c076,0x3c771e87,0x3bb50f6a,0x3b3d640f,0xba9c0e94,0xbb37fb20,0xbacce5b5,0xba89515c,0x3b84cdca,0x3b2c9d1c,0x3a8681a1,0x38892127,0x38726f61,0x3b44c2ed,0xba998a60,0xbb9eaff0,0xbc81ec4e,0xbce2fcde,0xbc9e3e22,0xbc86c591, -0xbc5a0ed4,0xbc867e3d,0xbccdec3c,0xbd14abd4,0xbd07529d,0xbc469fe8,0xbca6a5aa,0xbc8d5b90,0xbb5b2627,0xbbe82e3a,0xbc0011f1,0xbc82a7f6,0xbc46a02c,0xbc78535b,0xba870524,0x3c86e56b,0x3ba77e91,0x3c373875,0x3bbcfbe9,0x3b85ab72,0xb90e4694,0x3a82a928,0x3a830c3c,0xbb40de6f,0xbabe33fa, -0x38842a90,0x3b053812,0x3be72dd6,0x3c3eb5e3,0x3c50d445,0xbbba2391,0x3be541da,0xbb1aea41,0xbbfe6d69,0xbc192aff,0xbc9f52ad,0xbc8e87f9,0xbc433046,0xbb1476c2,0xbc1301fa,0xbc2b611d,0xbbdb4a36,0xbbfd4255,0xbbcb92f5,0xbb7b4539,0xbc43f8db,0xbc94bbed,0xbcc8227c,0xbc4fa010,0xbc1517ca, -0x3ba91187,0x3bfc1564,0x3b3e1b14,0x39c9e2a6,0xbaf2cfdf,0x398fee5c,0x3a71d5cb,0xb8fe6bb0,0xbac73605,0xbae829f6,0xbb2e03bf,0xbb889e35,0xbbd35247,0xbc0f3838,0xbc65c70e,0xbbfdea2e,0xbbaa4072,0x3b4c9c11,0x3be382dc,0x3b93a84c,0xbb0bb8c8,0xbc70f436,0xbc92a97a,0xbce16ba0,0xbd191774, -0xbd3429ce,0xbd1e2f2e,0xbce48e98,0xbd073546,0xbd05f115,0xbce0b4b4,0xbcc207fd,0xbc6797c4,0xbad1e73d,0xbb56bbf0,0xbc02212b,0x3a542bc9,0x3aac2a80,0xba2c2cd9,0x3a51d0e3,0xb9a15e22,0x3a92465a,0x3ab40f60,0xb9879cf2,0xba95043d,0xb6bbbf6e,0xbaf0c0ef,0xbbada599,0xbbe93cf8,0xbb0ef08f, -0xbbea476e,0xbc0f8963,0xbbb0ea5d,0xbce8b705,0xbd2c4b66,0xbd6eabab,0xbd67739e,0xbd61277e,0xbd40eee0,0xbd0e79a0,0xbc8332e4,0xbc212874,0xbb4f194e,0x3b075c7c,0xbb15a55a,0xbb92498f,0xbbc2fd09,0xbc2baae8,0xbc724bcd,0xbc8e849a,0xbc4fcded,0xbbffa3c4,0x3baef758,0x3b9a1270,0xbb4cfd43, -0xbb81997d,0xbad22abb,0xba1fc7b6,0xba6174bc,0xb801c2b5,0xb8f52ef8,0xbb3bf6b9,0xbbb3d591,0xbc05b190,0xbc67ac09,0xbc4eb59f,0xbc93e58e,0xbc7d820b,0xbcb4dafe,0x3d554aeb,0x3cf1a7f6,0xbbbc803a,0xbca30654,0xbd37d109,0xbd48f309,0xbd3b15fd,0xbd078852,0xbcdfb9a9,0xbcc84eb7,0xbcc6aa02, -0xbc8f3051,0xbc83da90,0xbc9e7aad,0xbc2c2be2,0xbb4c2df1,0xbb3417e1,0xbae6f49f,0xbb2ba90e,0xb9ea1157,0x3bab6930,0x3a26f919,0xbb4804f9,0x39f7c615,0xb99ade2f,0xbb59fbfe,0xba9ac0d8,0xba84d30a,0x3b821230,0x3b0072b3,0x3be249e8,0x3c3c5dc8,0x3cd4dc9a,0x3d08e51e,0x3d1189c9,0x3d0f636e, -0x3d2112b9,0x3cc407ab,0x3c6abdde,0x3c778d08,0x3be5af4b,0xbb8c18ee,0xbcacd55c,0xbd23b124,0xbcfe84f2,0xbcc67479,0xbca04abc,0xbc9a8c40,0xbc91e0d7,0xbc6f2870,0xbca72551,0xbcb3c028,0xbc9f9ad8,0xbc937dac,0xbc689c1e,0xbb98761f,0xbb2872a1,0xbb12f217,0x3ad15dbd,0x3ac6ffbc,0x3b79a7aa, -0x3c06e0c3,0x3c0a65ca,0x3c304805,0x3c3acc6e,0x3c5f0466,0x3c7b97ad,0x3c85c2d5,0x3c7c815a,0x3c70d6d4,0x3c9de1b0,0x3cae1356,0x3caf405f,0x3c950b78,0x3c8cc48d,0x3cb4e779,0x3ccf1439,0x3cbc7ead,0x3cb606a4,0x3ca3313b,0x3c41d207,0x3afccbd2,0xbbda48d0,0xbbbdea68,0xbbb161bf,0xbb82f184, -0xbb8c23f6,0xbb897ce0,0xbbbb4dca,0xbba8d962,0xbbec289b,0xbb93e24a,0x3b2e01b7,0x3b85c35c,0x3bba1e47,0x3bcf2edb,0x3c19b89e,0x3c094b47,0x3c34be74,0x3bee433a,0x3c42ff4e,0x3c298294,0x3c612cbb,0x3c5b8a9a,0x3c850018,0x3c981d96,0x3cb3abb8,0x3ca26f53,0x3cfe8fc1,0x3ca10c25,0x3c8f3ec4, -0x3c810fb5,0x3c5ac0b8,0x3c37a7b8,0x3c10286f,0x3bf62be0,0x3c08f302,0x3c2ee5d3,0x3c3cbdcf,0x3c505711,0x3c5751f3,0x3c6197de,0x3c4a4dad,0x3c3727c7,0x3c246044,0x3c18db70,0x3c0ba83e,0x3bc799d3,0x3c658091,0x3c08879f,0x3c1e744f,0x3c44a718,0x3c62ef72,0x3c43c8ce,0x3c43c5d7,0x3c6280da, -0x3c905066,0x3c710b50,0x3c718342,0x3c90d087,0x3c8fd617,0x3cab3c49,0x3cac1189,0x3c949e94,0x3ca3e773,0x3c41211c,0x3c5e71e7,0x3c4c024f,0x3c42931e,0x3c3fae91,0x3c3ae732,0x3c2ad2e8,0x3c346a0a,0x3c3450d6,0x3c3a5a34,0x3c379dc3,0x3c380fa2,0x3c3f13a9,0x3c350a26,0x3c2fa477,0x3c29dea0, -0x3c1d9d77,0x3c1e0106,0x3be44718,0x3c74d878,0x3cb3e2dd,0x3cea8cae,0x3c61e145,0x3cbd286c,0x3cfb02b7,0x3cfc329b,0x3cf748c9,0x3cebcfb0,0x3cf5a146,0x3cf575cc,0x3cf16b85,0x3ccc6844,0x3c868d1f,0x3cfcd6d7,0x3cdc59eb,0x3c519c0a,0x3c048aef,0xbbf70182,0x3c3e4e05,0x3bc22063,0x3bdc3670, -0x3bc29aaa,0x3beda531,0x3bfac52c,0x3c02f4b1,0x3bfbc2c4,0x3bf0f637,0x3bde0a55,0x3bda1f88,0x3be36d2b,0x3c05f27d,0x3c058ed4,0x3c09599f,0x3c0c3c28,0x3c0c938d,0x3bfd1a62,0x3c5143dc,0xbbd06676,0xbc683675,0xbc746750,0xbb3cf2ea,0xbc6d67b7,0xbc82dc91,0xbc8aebe1,0xbc8a0fbe,0xbc610356, -0xbc8e794a,0xbc92cf9f,0xbc8c457e,0xbc6aaa0d,0xba86144f,0xbc722b77,0xbc879f5f,0xbc851642,0x3bd2b33e,0x3be94ba9,0x3b90bfa4,0x3b328cae,0x3baa32a3,0x3bcfdf46,0x3bf17239,0x3bf5ef17,0x3bdddfba,0x3bb30eb5,0x3ba02e0f,0x3bc9af93,0x3c229ced,0x3c245655,0x3c2863e6,0x3c2f609c,0x3c1bbdaa, -0x3c3f16ae,0x3c038485,0xbc25c668,0x3ba16675,0x3a359743,0x3a3f1478,0xbafc772c,0x39153a19,0x3b0f32b6,0x3a97feaa,0xbae538ce,0x3b3bf727,0x3bb0b9c0,0x3a844593,0x3a992b33,0xbb546678,0xbaa4937f,0x3bb4b63b,0xbc042ef8,0x3aaa2625,0x3bd843c6,0x3aa62637,0x3a478573,0x3b9a4750,0x3bc9c336, -0x3c10a728,0x3c0890ba,0x3bcd0689,0x3b445fe2,0x3adbf07e,0x3b64f8fc,0x3c2d5112,0x3c333bf3,0x3c3fafff,0x3c541b36,0x3c3cf771,0x3c830b5b,0x3bd199af,0x3a0db95a,0x3ba97148,0x3bb6273d,0x3b8f05a0,0xbb199186,0x3ad8f38e,0xbb75b0ae,0x3be3fac8,0x3929551a,0x3bad5854,0xbb2b99a5,0x3acb2584, -0xbad1b175,0xb9ce0544,0x3ac24510,0x39c2af8e,0xbbb36681,0x3b8cebd4,0x3bd70547,0xbb24c3ec,0xbbef53b7,0xbb1b4f2a,0xb9a1f4e6,0x3b9f9283,0x3be7e77d,0x3b8d0363,0xba09e65a,0xbb6b7a56,0x3a5276aa,0x3c53e946,0x3c5b2884,0x3c667243,0x3c7a3fb0,0x3c59301e,0x3c97f459,0x3c204bcf,0x3b1634a5, -0x3c7f095a,0x3c002154,0x3c284929,0x3bf20ed3,0x3b74e252,0x39ea7167,0xba845aa9,0x3bcfe27d,0x3b89286d,0x3bb7f50b,0x3b7377e2,0x3af4456d,0xb936a666,0x3c18dceb,0x3bd2cf7a,0xbcedec40,0xbbb44d1d,0x3c0c9297,0x3c407271,0x3c65a827,0x3c9cf5e2,0x3c91711a,0x3c8b1d5c,0x3c02b919,0x3c10411f, -0x3cb9344a,0x3c8a6d9c,0x3c68fc64,0x3c80a1e1,0x3c05bdbf,0x3be590fd,0x3c967646,0x3c74250f,0x3c9944dd,0x3bb0af8a,0x3a8cc7aa,0x3c85c6a0,0x3c29fdc3,0x3bf92832,0x3b2ca93d,0xb9ca2251,0x3b1905a6,0x3b1256d1,0xbaab3d5c,0xba2f0e34,0x3a9ba903,0x3af5f4cb,0x3c02970d,0x3b82eab7,0x3a8b02bb, -0xbcaa0ef8,0xbb82e1eb,0x3cbdaf22,0x3cbfce7a,0x3a26d02a,0xbc99f9f8,0xbcf1607b,0xbcdc883b,0xbc154cb0,0xbbe6ba39,0xbb343d5a,0xba6d61fe,0xbc0e801a,0xbc1ccbde,0xbbb2859d,0x3a5018da,0x3b8d6714,0x3c05815c,0x3b997387,0x3c2a9635,0x3bcca477,0xbac5f564,0x39bddee7,0xba8339e0,0x3b94c5e7, -0x3bc31566,0x3ae8ac90,0x38ff6b6d,0xbabedf04,0xba56b88b,0xb9f46878,0xbb729946,0xbb8af1cb,0xbc1d3854,0xbbdafe5a,0xbbf6911f,0x3aa043ab,0x3b0f943d,0x3c0caec6,0x3aebc03e,0x39c8c8c4,0x3be641b4,0x3c77c3ea,0x3c99b6a2,0x3c77b29d,0x3c7aa3ae,0x3c5a78a7,0x3c1bbb6b,0x3c6a52e0,0x3c818ce8, -0x3c4463fc,0x3c7ce4a0,0x3c40c9f5,0x3bc65be4,0x3b4f2219,0x3c2d4900,0x3c3d1de2,0x3abf9bd3,0x3b938187,0xb9ff98e4,0x3a0b2d94,0x3abb41a2,0x3ad44f31,0x3afb682b,0x3aadb617,0x3a59af23,0xbade9526,0xbbaec934,0xbc0720b4,0xbbbdfc9e,0xbbb9c56d,0xbc8e76cd,0xbaf597e2,0xbd1ab4a1,0xbd38e501, -0xbcef0815,0xbcc749cd,0xbc3a9ec2,0xbc52e55b,0xbc452fa4,0xbb3fe626,0xbc3ef70f,0xbc2cffb5,0xbc0e5e65,0xbc1b745c,0xbc1faa30,0xbc30b233,0xbbb4d61c,0xba50ed19,0x3b214a86,0x3bb9d68c,0x3c178908,0x3c195617,0xbbaf1d6d,0xbb5e5853,0xbacdb8eb,0xba3b6f0b,0x39ed599c,0xb8720e6a,0x3ab93891, -0xba01c68a,0xba98be18,0xbb8c26db,0xbbc2b420,0xbbe82fbb,0xbc2463d1,0xbc5d4cd4,0xbcb2c682,0xbccca5f8,0x3c5475be,0x3b9b5a2a,0x390d2c1c,0xbc59bff7,0xbcc99b4d,0xbca2ce43,0xbc35f6c6,0xbba93a5a,0xbc13f66e,0xbc296899,0xbc4426b7,0xbc17da79,0xbbf5cc36,0xbc17c5a3,0xbc2d1625,0xbbf62f49, -0xbabb6dd0,0xbb813a20,0x3a94291b,0x3bbc05f5,0xbb16648a,0x3b19454b,0xb9c18302,0x3acdb04f,0x3abce0e8,0xbb1fe7f9,0xba94a3a2,0x3aaa48b6,0x3a030560,0x3ab94a2e,0x3ae21c99,0x3b365d3b,0x3c84837b,0x3cbc1347,0x3cb7531d,0x3c9f68a6,0x3c784376,0x3cbe9fc1,0x3cfce9ca,0x3cbd9020,0x3c98cdb6, -0x3b63e357,0xbc03016e,0xbc73e4f1,0xbc878cf4,0xbc7a1120,0xbc57d6ef,0xbc2c815c,0xbc2f03a8,0xbc172133,0xbc48a3bb,0xbc488964,0xbbd49c66,0xbbe660a0,0xbbcfb7cf,0xbbe07255,0xbbd0c758,0xbb8c3ee9,0xbbb97c82,0x3ac436a0,0x3bde39d2,0x3c346f1a,0x3c2f7519,0x3c2e43d2,0x3c7a676e,0x3c863f1e, -0x3c973ee2,0x3cb24d00,0x3c89c860,0x3c8263c0,0x3c98d2a2,0x3cb67878,0x3c7d1fbe,0x3cb137f3,0x3cdb568b,0x3cd6f3b6,0x3cfda77c,0x3cdfc95b,0x3cd4825c,0x3cc3edcf,0x3c6409f7,0x3b800f03,0xbbe319fe,0xbbbd6b54,0xbbb17709,0xbbb0dc56,0xbb63ba78,0xbb0f8551,0xba6e47f4,0xb927e9dc,0x3b75d4b7, -0x3abb5045,0xbafd8f38,0x3b10a192,0x3b90fb27,0x3bbd0a28,0x3badfec3,0x3bed2606,0x3bd9ab52,0x3c393ac3,0x3bfd5d14,0x3c5ae420,0x3c40b33f,0x3c7f6ca0,0x3c7c45a5,0x3c681f5f,0x3c408af8,0x3c81e356,0x3c765b3c,0x3cae54d4,0x3caff284,0x3ca9e5d6,0x3ca6b67e,0x3ca6295f,0x3ca4973e,0x3ca71082, -0x3ca2d47a,0x3ca80458,0x3ca36c35,0x3c99dce1,0x3c8840b8,0x3c6b7457,0x3c5f67c8,0x3c4fa474,0x3c42431f,0x3c2d2b9c,0x3c182acc,0x3c0f470a,0x3bc9e43c,0x3c2aa55c,0x3c200fc0,0x3c25a4d0,0x3c2a7861,0x3c52cbbe,0x3c7c5142,0x3c76849d,0x3c602d36,0x3c923851,0x3ca42bf5,0x3c990d7c,0x3ca08c4b, -0x3c941852,0x3c990f6a,0x3cb375a5,0x3c5ea49d,0x3cb7d9bc,0x3ca81657,0x3ca9f1fd,0x3ca9cef2,0x3cab11b4,0x3cac1d47,0x3cae1f16,0x3ca9f897,0x3ca4c1c5,0x3ca1e570,0x3c9ba363,0x3c9823cf,0x3c93975d,0x3c908b9a,0x3c8cb401,0x3c898313,0x3c877f6d,0x3c82aadb,0x3c8a27c4,0x3c2494f8,0x3bad1f66, -0x3ba0f1e9,0x3c49148e,0x3bbada90,0x3b96436f,0x3b91c817,0x3bab95ea,0x3be53e37,0x3bc404bb,0x3bd3c07f,0x3bf38135,0x3c120023,0x3c7f38d7,0x3c170575,0x3c0f6939,0x3cbbad44,0x3b3dc683,0x3c725054,0xbb020444,0x3b08773d,0x3b2670b1,0x3b371e9c,0x3b902faf,0x3b90df57,0x3b4160f9,0x3b45cb48, -0x3b19e364,0x3a7a3581,0x3aae90f4,0x3ae608f6,0x3b4b3feb,0x3b27e4e4,0x3b2adff7,0x3b2da158,0x3b412943,0x3b542f16,0x39aa3d70,0x3c848b63,0x3c96ecd7,0x3c17e4c1,0x3c583e05,0x3c90d31e,0x3c11c310,0x3c2c688e,0x3c339d57,0x3c276e9e,0x3c46cea6,0x3c4a3b1d,0x3c491baa,0x3c8d42b1,0x3c425106, -0x3c28a98c,0x3c9973bf,0x3c7cf197,0x3b2c47c5,0x3a20b7af,0x3b6c2f0b,0x3b43229e,0x3c0515cb,0x3c1140f6,0x3b9d77cf,0x3ba242ed,0x3b226f21,0xba7e49cc,0xbab26d30,0xba2817ba,0x3b518890,0x3b250cda,0x3b65e807,0x3b78b155,0x3bb5d740,0x3b6ed398,0x3bf028ab,0x3c834c85,0x3c0bea2c,0x3c3def35, -0x3c04a8c5,0x3c07aab2,0x3be25d2e,0x3baedc5f,0x3c057f56,0x3c561ec0,0x3beef6bc,0x3b7ed7b0,0x3be6a4a5,0x3ba5b7bb,0x3c0a9417,0x3c67a643,0x3bc9bf17,0x3c3a8779,0xb8b790fe,0xbb3d5526,0x3b7b5110,0x3b099c53,0x3c5d1b5f,0x3c7ef2d9,0x3bc56a9e,0x3bfe3766,0x3b30362e,0xbba2abac,0xbb80ad4c, -0xbafa6d5d,0x3bd75cc4,0x3b680965,0x3b8f1419,0x3b956f8f,0x3bd50618,0x3b86556c,0x3c250dab,0x3c8abad0,0x3c598a38,0x3c2e475c,0x3c06479d,0x3c147621,0x3b61289b,0x3bbcb9bf,0x3aaa1e69,0x3c5408cd,0x3b1fdc50,0x3bdeed49,0x3bd9924f,0x3b9f34ad,0x3bd20cc2,0x3c84d179,0x3c150708,0x3c46e0c7, -0x391b4b8a,0xbb10d07e,0x3b730565,0xba20a4f5,0x3c95bfba,0x3cb9b324,0x3c20ea00,0x3c4facac,0x3b81e0e5,0xbc1d1ced,0xbc258172,0xbbc00e4b,0x3be5c3fe,0x3bab312a,0x3be32afc,0x3c002d34,0x3c31f9eb,0x3be4ae98,0x3c370f04,0x3c8e1f07,0x3c0faed8,0x3c6a035b,0x3bfaaa59,0x3b739495,0xb94516fd, -0xbabc2a1d,0x39800a6f,0x3b7142b2,0x3b97d0d5,0x3af81657,0x3b2cbabb,0xba93bba2,0x3b8cab7d,0x3c75963f,0x3c1e86b4,0x3bd03f5d,0xba74b8cf,0xbbbf4b4d,0x3ba97c62,0x3c176682,0x3c6f1734,0x3c6ea18d,0x3c5aac06,0xbb9c52c0,0xbc3a8bb6,0xbbf8cf33,0xbc20007e,0xbc160343,0xbba9e434,0xbb391cb2, -0xbb11844f,0xbc1157f0,0xb9f6bea1,0x3ab75dd5,0x3c4a85d7,0x3cb814ca,0x3c4c5904,0x3c4736dd,0x3bfa3ce2,0x3bbd8d55,0x3a74e814,0x3b1b2ef8,0x3b107664,0xbae08fda,0x3a3bcb05,0x3b4e50b8,0x3c02abe2,0x3c345a91,0x3c432a5d,0x3bec2c39,0x3b931b4f,0x3c36c5f9,0x3cb71208,0xba207aab,0xbbb6b01f, -0xbc522a1f,0xbc810c27,0xbc1bcf2b,0x3c0dc966,0x3b1ce351,0x3ae65392,0x3a964292,0xba39e9a2,0xbab52cc9,0x3a182a02,0xba12c105,0x3b0a5aee,0x3c0846c6,0x3c2d080a,0x3bd987a9,0x3c4675a4,0x3bd20e38,0x3b5faed6,0x3bbd7af2,0x3b025d22,0x3b384053,0x3aa1e1e2,0xba6102d4,0xbb028228,0xba0dd524, -0xba8086c8,0xbb32b399,0xbbc0a001,0xbbb0f011,0xbba607af,0x36c43a7d,0xbb24cd7b,0x3c05ec6d,0x3bafa846,0xba2d36d3,0x3bb24d49,0x3c9ca12f,0x3cfad622,0x3cf487e0,0x3c7fe5c6,0xbb75eb3e,0xbc3b4710,0xbc1d3378,0xbc0a41fe,0xbb503477,0x3b13cb49,0x3b5f4885,0x3b7b2450,0x3b70d695,0x3b50835f, -0x3a777375,0x3c750433,0x3c03d9fb,0x3b39a72a,0x3bdfb43b,0x3b9949cf,0x3b442584,0x3ad8f7bd,0x3ab986cd,0xb9829140,0x39b47244,0xbb18ded8,0xbb98308e,0xbba73a05,0xba1d4d65,0xbbd59af6,0xbc15be09,0x3a8fa859,0xbd089944,0xbce408a7,0x397ea798,0x3c65ce7e,0x3bcfb7f8,0x3ba10d7b,0x39067f55, -0xbc2c70f0,0x3b8d5336,0x3c325029,0x3c3eac12,0x3ba8d744,0x3a12f481,0xbb3da68f,0xbb952f5a,0xbacfbc6c,0xb94d4bc5,0x3b68af76,0x3b49764f,0x3c238ea0,0x3b6f3b85,0xba9b58e6,0xb94cd96d,0x39eade2e,0x3ad2f81d,0x3a8bce83,0x391f87b1,0x3a3913cf,0xb781490c,0xbb7515c8,0xbbc75ca7,0xbc13a7a6, -0xbbdefef6,0xbc57903f,0xbcba9f4c,0xbcf1f777,0x3cc41cea,0x3c5b6e20,0xbb5158e7,0xbbf87e1c,0xbc87302c,0xbb09b80f,0x3b5722d9,0xba98d83f,0xbab35535,0xb92beb5e,0x3c079a8a,0x3b8acf30,0x3b68e754,0x3b9acca4,0xbb45c245,0xbbb8ef97,0xbbaaf66e,0xbb02453a,0x396bb29d,0x3bc7d64e,0x3b9f4c5a, -0x3aa220b0,0x3aee6432,0x3b1e150b,0x3aa0718e,0xbaf5e5d7,0x3a41c315,0x3a35b414,0x3b27b3e6,0x398f9791,0x3b11c482,0x3b7d2d74,0x3c584a09,0x3ca6f4c2,0x3cc51886,0x3ccc22db,0x3d228c9b,0x3d29c6f0,0x3d04e2fe,0x3cc16097,0x3c1405a4,0xbc544a12,0xbcce66bf,0xbccfd125,0xbcb616c9,0xbc9c32bf, -0xbc8be691,0xbc3b0a17,0xbbfcb4bd,0xbb98be6a,0xbb9db091,0xbbd24801,0xbbd61494,0xbc1bc769,0xbc18ad0e,0xbbab1946,0xbbc9949c,0xbb7b9f82,0x3ab3fbce,0x3b95de06,0x3beef9ba,0x3c362406,0x3c2632fe,0x3c3262bf,0x3c346140,0x3c833bfc,0x3ca3accb,0x3cc5e2be,0x3ca4d710,0x3cb0a27f,0x3ce85358, -0x3d0d0110,0x3ccc53a6,0x3cae16c9,0x3c8fbd23,0x3ca20b25,0x3caf7d50,0x3c9b33f7,0x3c7ce0b9,0x3c2350bf,0x3b7ca0bb,0xbb1f44f0,0xbc21e56d,0xbc244e8e,0xbc35f0f6,0xbc463b45,0xbc274121,0xbc0609d7,0xbbd5f784,0xbb4f0cc0,0xbb1306a4,0x3b45be58,0x3be4fbc7,0x3bb0ed70,0x3b910fc5,0x3b988899, -0x3bc69fe0,0x3ba8b85b,0x3c1450ca,0x3c2101e8,0x3c80d041,0x3c7577f7,0x3c94d0dd,0x3ca0fb50,0x3caca382,0x3cb9fd09,0x3cc111c8,0x3cbbf51a,0x3cc7c29d,0x3ca3f7f1,0x3c93a8f9,0x3c917788,0x3c80ba63,0x3c6b1f3c,0x3c599ee9,0x3c57705e,0x3c3fe193,0x3c2ea97f,0x3c1a02e9,0x3c021dc2,0x3bdf669e, -0x3bd38f79,0x3bbabc81,0x3b997a6c,0x3b552c7e,0x3b11815c,0x3840122b,0xba311da3,0x3c130a66,0x3bd1e74b,0x3c2fa644,0x3c3eabaa,0x3c809f51,0x3c895e4b,0x3c87cd9f,0x3c9993d1,0x3cab9e41,0x3c9be7fb,0x3c953f97,0x3ca64d4e,0x3ca20216,0x3caae326,0x3cb34d38,0x3c9e9823,0x3cc859f3,0x3c7ed278, -0x3c87b011,0x3c84224b,0x3c827622,0x3c83b146,0x3c82be40,0x3c81c17c,0x3c742f14,0x3c69578a,0x3c616a99,0x3c560cd5,0x3c49be3f,0x3c3a55c3,0x3c35a235,0x3c3254d8,0x3c303d42,0x3c2dbf71,0x3c337fb3,0x3c05ace3,0x3c98b76b,0x3cb4b00c,0x3ca05f1b,0x3ca19e6b,0x3cc7e618,0x3cadefba,0x3cb38324, -0x3cb37541,0x3cadc8c3,0x3cbbc666,0x3cbf89e6,0x3cbfde7a,0x3cd7ece9,0x3cbb9373,0x3cb446b3,0x3cd9d8b6,0x3c9b0c61,0xbb36069a,0xbc39e956,0xbb07d519,0xbb2e2ebd,0xbb4fc169,0xbb470d3a,0xbb7b7570,0xbb87bdd0,0xbb8ea077,0xbb83180e,0xbb87779f,0xbb9d920f,0xbb9aa461,0xbb92a7f0,0xbb75c148, -0xbb5aa9a9,0xbb4523d9,0xbb3c399f,0xbb32d142,0xbaf6f7de,0xba57ed16,0xbc212b3f,0xbbe43783,0x3c0198f0,0xbc273ecc,0xbc0b2412,0x3bb37261,0x3b90ba23,0x3b8dbdd1,0x3bbf096c,0x3b3c0777,0x3b165ba9,0x3b296e76,0xbc11857f,0xbc26e919,0x3c0026e3,0xbc08b1b9,0xbb9915fa,0xbbcd8b45,0xbaedfe61, -0xbb95cdf0,0xbb9da5c6,0xbbfdcb0d,0xbc0f58fb,0xbc10c42d,0xbbf3d3d5,0xbbfa90f9,0xbc1be950,0xbc196bba,0xbc0b795d,0xbbcc7f98,0xbba7ae53,0xbb947c66,0xbb8f6aa7,0xbb8730bf,0xba8b3043,0xbb656a55,0x39efa9d8,0x38a2e760,0xbb87f9ad,0xbaa852db,0xbb11a040,0xbbabaa12,0xbb78d7ff,0xbbbf5505, -0xbb8efb09,0xbb994df2,0xbb284e63,0xbafa7338,0xbb8abe99,0xbb3dd978,0xb8fa39ba,0xbb41b4fb,0xbc192915,0xbbf0453c,0xbb065592,0xbbb1a53e,0xbb8d13a9,0xbc23c17d,0xbc515f0a,0xbc619b51,0xbc34bf00,0xbc4396ab,0xbc85c083,0xbc84330d,0xbc6c90e0,0xbc2a1fd8,0xbc01b21a,0xbbcfc0fb,0xbbb5bda6, -0xbb7e4648,0x393c7d97,0x39f1ec8b,0x39caaae6,0x3b464706,0x3b16d672,0x3a2e18bc,0xbac1fc01,0xbaf02ac3,0xbafd7aee,0x3aee08e7,0x3b02e592,0x3b13428a,0xbadeae96,0x3ac01424,0xbb1ecc17,0xbae7d7b8,0x3bc8b027,0xbb5ba24b,0xbba6531d,0xbba5d1ac,0x3a4d783d,0xbbb75825,0xbbe44ebd,0xbc8c761c, -0xbcb61182,0xbcba179d,0xbc8bf775,0xbc905c10,0xbcc6f3cf,0xbccece48,0xbcbb51e4,0xbc8209f6,0xbc4f4a15,0xbc280956,0xbc137371,0xbbd31e9d,0x3ae9bd27,0x3b20c9aa,0x3bd96da8,0x3c37d9f4,0x3c00555d,0x3bd63cf9,0x3b9c8a33,0x3b33a1ae,0xba5c0d33,0x3aa70ff9,0x3c185f21,0x3b80e9e1,0x3b5c9a74, -0x3babab43,0xbabd1384,0xba066922,0x3c829bbd,0x3b016356,0xbcc16db1,0xbc970d96,0xbc1e95eb,0xbbc3d7a8,0x3b5cc683,0xbb47411b,0xbbe88a73,0xbbcfcd32,0xbc288fd1,0xbc155bc7,0xbbb2687e,0x3abca1e2,0x3b900d03,0x3c01250d,0x3b0837fa,0xb86a56ae,0x3b896539,0x3a8ebdf1,0x3ac7c191,0xbb851952, -0x3babe420,0x3c422d27,0x3bce8b31,0x3bb21d22,0x3b4ad38e,0x3aa76190,0x3b2f50b8,0x3af7e40b,0xbab3ea0d,0xbaa234be,0x3b0be210,0x3bb39c21,0x3c0086ee,0x3ae67bb5,0xbbe2c9c9,0xbc993675,0xbbc76bb4,0x3cb77ec4,0x3c3ee600,0xbc0bd5d5,0xbc53b5c7,0xbd0f4cc9,0xbd04dd99,0xbbc67268,0xbbbfbbb3, -0xba3d4da9,0x3a919a24,0xbb60c81a,0xbbf15d13,0xbc22c207,0xbc4ccded,0xbc77bbd0,0xbc83505a,0xbc44c9da,0xbb85aa1d,0x3adb097e,0xb9ae6c24,0xb96ac384,0x3a321d40,0x3b2371b1,0x3b49a65e,0x3ab6a599,0xb9fd5f58,0xbae49efc,0xba805006,0xb9a7ce2f,0xbb1e2bea,0xbb993bad,0xbbac8563,0xbba5ea24, -0xbbcd3486,0xbc1a9881,0x3b1aecb0,0xbb62d1d9,0xbbfab9f1,0xbc52ec3e,0xbd044cae,0xbcd2bbe8,0xbcc7b6b5,0xbcdc3049,0xbc453b2a,0xbbd5df68,0xbc23f722,0xbc97ee3c,0xbcadbc5d,0xbc8490b6,0xbc5ba783,0xbbe5aff2,0x3b08cf98,0x3b2c8448,0x3beda870,0x3c166d3a,0xbb15dfdc,0xb924a150,0x3b30fb4e, -0x3a42c96d,0x3a29b149,0x3a9207a0,0x3a8c18d7,0xb989fc82,0xb8a21a87,0xbb6252aa,0xbbbc3e07,0xbbe2f03f,0xbbe057bc,0xbc0fa8a7,0xbc74ca05,0xba205a20,0xbd083693,0xbcb5fd2d,0xbc94dbfc,0xbcfc7669,0xbd714d74,0xbd46058b,0xbd170ca0,0xbc9b3cec,0xbc6a8a0a,0xbc4419b7,0xbc565f0b,0xbc8052e1, -0xbc8274fb,0xbc47d5c6,0xbc910e19,0xbc83d651,0xbc36ca52,0xbbc36560,0x3a89dcae,0x3bc45770,0xbaa1957e,0xbb63416f,0xbab8a368,0xba9460f6,0x39e67e3d,0x3a3fbc99,0x3a27fd99,0xba85c8fd,0xba0e2cb8,0xbb3e1083,0xbb969f75,0xbbb9aa25,0xbbb4e9e1,0xbc640732,0xbcc2adad,0xbcef0eb1,0xbb8df846, -0xbd23de9e,0xbd8c22a8,0xbd884b11,0xbd60e8e8,0xbd229f7f,0xbcf2cec3,0xbcce24de,0xbcb4ba51,0xbcabf6d0,0xbcba88e6,0xbcbab004,0xbca7557e,0xbc713318,0xbc2d91be,0xbc04d669,0xbbbc840c,0xbb17b522,0xba3a5753,0x39a5f75c,0xbbb91e4d,0xbb6792ae,0x3b4e4410,0x3ad4710d,0x39af66ed,0xbb26add6, -0x3962388f,0x3ab66549,0xbb1b2630,0xbb865b74,0xbbb1ec96,0xbbd3511a,0x398ca61e,0x3bc0f92e,0x3c454601,0xbb844a0e,0x3d0705e1,0x3cb19522,0x3c83103c,0x3bb5ccf5,0xbc01e3c6,0xbcc1e7f0,0xbcf5c202,0xbd018031,0xbca454c1,0xbc52d2a2,0xbc2a8a22,0xbc150c98,0xbc3175a3,0xbc521411,0xbc5ebc6b, -0xbc5a4b0f,0xbc127a33,0xbc18cc89,0xbbd5a121,0xbb2333db,0xbbbd7075,0xbbc1acab,0xbbe2983b,0xba96c7b6,0x3b9a4029,0x3c099c16,0x3c0a6be6,0x3c11e7fa,0x3c3cf261,0x3c81b803,0x3c9cb43b,0x3cb23611,0x3c9e5ea3,0x3c9339d6,0x3cc41525,0x3cba604a,0x3c32730a,0x3c5b7afe,0x3c3feb73,0x3c111997, -0x3c0be5cb,0x3b1f2859,0xbb80dbe2,0xbc49c6da,0xbc811713,0xbca1b557,0xbcc18483,0xbca330cc,0xbc87fc29,0xbc64fd3c,0xbc46ccb3,0xbc2cca4e,0xbc0d8433,0xbbf487a1,0xbbbdba2b,0xbba77047,0xbb31d8da,0x3a087e2c,0x3b20b178,0x3b647f00,0x3b85c390,0x3ba22433,0x3c008090,0x3c2c01aa,0x3c4027c6, -0x3c708bf8,0x3c7e8f84,0x3c9033df,0x3c880f84,0x3c7dd520,0x3c6e6374,0x3c639fc4,0x3c9657fc,0x3c408a1c,0x3c3c03f3,0x3c1b6824,0x3c016791,0x3bcc3440,0x3bb16906,0x3b8f6f38,0x3bafc351,0x3bc69e72,0x3bc8d374,0x3bb8696a,0x3b91805c,0x3b5e9e3f,0x3b3d16f8,0x3b2001ea,0x3b008f6c,0x3aae288d, -0x3ac7ba95,0xba124388,0x3a3d6887,0x39f85626,0xb889ba92,0x3b63ac72,0x3b93cc10,0x3b8d6bcf,0x3bca78ce,0x3bc8a32d,0x3c02cae5,0x3c1fd876,0x3c4b0a2c,0x3c6cf7a3,0x3c6a1065,0x3c796314,0x3c654b94,0x3c5b6a63,0x3c096dd5,0x3c2a3ab4,0x3c2f4685,0x3c23229f,0x3c1fceb1,0x3c1cb23d,0x3c17f9e1, -0x3c0fa105,0x3c0f1258,0x3c0b32fd,0x3c0b4159,0x3c0734ff,0x3c063444,0x3c031419,0x3c028e88,0x3c0082aa,0x3c001de4,0x3bf92b0a,0x3bfbf7d2,0x3bfe9cef,0x3b953e5f,0x3bd5fdb7,0x3c87b780,0x3b9890d5,0x3be02a02,0x3c9602cc,0x3c9490ff,0x3c959de0,0x3c98d19d,0x3c94ec50,0x3c95859c,0x3c9886c9, -0x3c31c8fc,0x3c0228b3,0x3caaa435,0x3c38eb5d,0x3c44b3a9,0x3c52479d,0x3c5e6b5c,0x3c4e2c53,0x3c2a23f3,0x3c3fe1c9,0x3c310173,0x3c649008,0x3c6eaad5,0x3c5a0835,0x3c6306a3,0x3c581a86,0x3c3a0f4f,0x3c3b8261,0x3c3dcd67,0x3c483d63,0x3c507a2f,0x3c542b69,0x3c533640,0x3c55a5aa,0x3c43d39a, -0x3c636763,0x3c6acc4c,0x3bde4665,0xbc3aeb5c,0x3c7bc174,0x3be8ebc4,0xbc2b984d,0xbc19b48c,0xbc0fc7d0,0xbbf1b4bf,0xbbf71f93,0xbbf40929,0xbbd38733,0x3becea2d,0x3c844435,0xbc0d5889,0x3bcacdbe,0x3af3651d,0x3c763b7a,0x3c26dff5,0x3c36c905,0x3c19400f,0x3c8db6bc,0x3ca27fbd,0x3c88881e, -0x3c994809,0x3c87ffab,0x3c41df90,0x3c32e6cb,0x3c3415a3,0x3c58bbeb,0x3c7c09b0,0x3c89f8a7,0x3c8a0349,0x3c894a8c,0x3c7861d1,0x3c8acd7e,0x3b744491,0x3c405a08,0x3c4902b1,0x3c086265,0x3be6314e,0x3c286fa7,0x3c250504,0x3c504a3c,0x3c5559c3,0x3c4bda0d,0x3c2db131,0x3c1b4446,0x3c0fcca1, -0x3be21a66,0x3c5ea9f8,0x3c662531,0x3c26e96b,0x3c1f2e8b,0x3c0cdb51,0x3c35352a,0x3bf799fd,0x3cbaf47d,0x3ce4479f,0x3ca92ad0,0x3cd235b6,0x3cadd5fd,0x3c3711dd,0x3c26f124,0x3c2dd887,0x3c775697,0x3c947630,0x3ca42b7d,0x3ca43e25,0x3c9a4b5b,0x3c972675,0x3c7cf41a,0x3c69dd58,0x3c556100, -0x3c21c841,0x3c1fb9bf,0x3bd31f74,0x3bda2cd1,0x3b6cd06e,0x3beb7667,0x3c34c4ee,0x3bb329b0,0x3ba3180c,0x3c0c529e,0x3b939246,0x3bd59ece,0x3c7f565f,0x3c4270b2,0x3c1e922a,0x3c27c523,0x3bcde469,0x3bbd0e4c,0x39301054,0x3cbddb43,0x3d06a556,0x3cc900ea,0x3d044d80,0x3cd83faa,0x3c1f0cd5, -0x3bd65d6c,0x3c009a13,0x3c8133a8,0x3cbf3995,0x3ce3b70b,0x3ce5b2fb,0x3ccfd449,0x3caf52f7,0x3c958517,0x3c58a078,0x3c6b3949,0x3c2a7a7a,0x3c274e78,0x3bd5a95c,0x3b4689aa,0x399f7c42,0x3ab79b63,0x3c10f733,0x3b9faf90,0x3b586749,0x3bad215d,0xb88fffbf,0x3bb9d0b6,0x3ca1cb22,0x3c7a16de, -0x3963eb8f,0x3c638884,0x3c957b1a,0x3cd4d4fd,0x3d0ceecb,0x3d0a14d9,0x3d05a68e,0x3d0e5b68,0x3cc422e5,0x3c88d578,0x3c382bfc,0x3c4d4245,0x3c1839e0,0x3b35b20d,0x3ba28939,0x3bb4fe2e,0x3bd33ce1,0x3c52a227,0x3ca2cd7f,0x3ca8152c,0x3c8810d5,0x3c8f6a80,0x3c3cd6cf,0x3c168840,0x3bdce9b3, -0x3b12b52b,0x3b7364c0,0x3b3722bb,0xba935068,0x3aacc528,0x3ba3da00,0x3c2ff537,0x3c4e4532,0x3bffa507,0xbaddabe6,0xba4d7b0d,0x3c11c43c,0x3d11b41d,0x3ba5160e,0xbbb8f8e5,0xbc160289,0xbc4dbb05,0xbbc189eb,0x3c37ce2a,0x3c05dca1,0x3c021510,0x3bfb1ea0,0x3b896c11,0x3b218c50,0x3ba5c6dc, -0x3bf2a226,0x3c643b2f,0x3cc421c9,0x3ca1286a,0x3c7fc71a,0x3c41599f,0x3b1191ec,0x3b41df3c,0x3be78194,0x3bbd2213,0x3bafcfb7,0x3b42374b,0xb8689dd8,0xba94e063,0x39465c4c,0x3b0cc8f9,0x3a0c8255,0xbafe5080,0xbabbc0d5,0x3afc8a9e,0x3b564733,0x3a97d29b,0xba28af73,0x39dec7f9,0x3ab9aa0a, -0x3c5c0262,0x3d17d362,0x3d58e5e6,0x3d69de5e,0x3d3c05d0,0x3cef0a04,0x3c83274d,0x3c3fe6b1,0x3c8aabf0,0x3cbe9020,0x3cf15c66,0x3ca51e2b,0x3c36ccde,0x3b825809,0x3bc01335,0x3c183734,0x3ca21fe2,0x3c20d3a2,0x3ba6af1a,0x3c0ae211,0x3bd67404,0x3b6338ac,0x3acfbf0c,0x3b225f3c,0x3a82aca3, -0x3a14f86e,0xbb2fa05d,0xbb786fce,0xbb55fb02,0xbbb37385,0xbc19d7f9,0xbc353e60,0xbab1adb7,0xbcc7f650,0xbb03bea2,0x3ccf6253,0x3d14ded9,0x3d26d15c,0x3ce27ba8,0x3c859097,0x392a1483,0x3bb599e7,0x3be1be11,0x3c0f39a2,0x3b9e62ef,0x3b43419b,0x3b8a4ae5,0x3bd7b5ee,0x3c2f189c,0x3c30854f, -0x3c56737e,0x3c26c403,0x3c1675e2,0x3b005778,0x3ac90b54,0x3b04d21e,0x3ac85ca7,0x3b3ea28a,0x3b539481,0x3995df9e,0x39c9ceda,0x3a86d567,0xba55a313,0xbb3e171f,0xbb3094a9,0xbb61d3f8,0xbc0a2604,0xbcabb62f,0xbcd23fe5,0xbc6e9b17,0xbc8722ad,0xbc05ffee,0xbb04006c,0x3c462a7e,0x3cc10dc6, -0x3cdf35c4,0x3cabebe2,0x3c8bb07a,0x3c799bb0,0x3ca25cf1,0x3c27e4ec,0x3bb8fd38,0x3bf3edf9,0x3ab1a9dc,0xbb064389,0xbb43a20d,0x3af8361b,0x3b9fa4c1,0x3bfc7181,0x3ab510d9,0x3b36e55b,0x3ba7ccf7,0x3b14ab1d,0x3aa5c308,0x3a1ab12c,0x3b2a10a7,0x3b4c9191,0x39f3557d,0xbb200243,0xbb8063de, -0xbb8c488c,0xbb3d2f09,0x3a9e2589,0x3ba867d3,0x3b98e738,0x3ce4a438,0x3d22323a,0x3d0a36f2,0x3c9592ab,0x3ae19431,0xbc1fc026,0xbc4488ac,0xbbb66f71,0xbc04ed86,0xbc15f06e,0xbc343e3b,0xbb2bc4c5,0x3b13df6a,0x3b73968a,0x3b8686f7,0x3b7f667b,0x3a32e5a5,0xb93ce614,0xbae41bbf,0xbb311873, -0xbb7a8fbc,0xbb23893c,0x39e518a5,0x3b8fe906,0x3bce7259,0x3bf337dd,0x3c1383dc,0x3c26bd0e,0x3c3b6f08,0x3c9408a8,0x3cb35718,0x3cc63c90,0x3cb61528,0x3cce5091,0x3cf0face,0x3d0d50bc,0x3cbb4fbc,0x3cb8d042,0x3c97e816,0x3c8a1ef3,0x3c7b311e,0x3c2f9b7e,0x3b8c3811,0xbb1f11b6,0xbba9ecaa, -0xbbf16ac8,0xbc3bd0c3,0xbc44fb69,0xbc59d23b,0xbc6c4605,0xbc5716cf,0xbc459e94,0xbc32367c,0xbbf60142,0xbb9ee2f1,0xba91aeee,0x3ac4d57d,0x3b23386a,0x3b881d6d,0x3baff8bc,0x3bba90c6,0x3bfa4790,0x3c144da4,0x3c54b9f7,0x3c7a7ef6,0x3c85e513,0x3c918255,0x3ca94f14,0x3cae080f,0x3cb51ab0, -0x3cb34f81,0x3cbc8ecb,0x3c441cfe,0x3c851221,0x3c7ba1ff,0x3c7eae2a,0x3c784601,0x3c76fee1,0x3c817b5e,0x3c86d24f,0x3c5d510a,0x3c275cc4,0x3bf34b81,0x3b8ef2d0,0x3ad3a532,0xba8f4328,0xb9f56ca3,0xb95e4b7b,0xb95efabb,0xb6f754cb,0xba2ae631,0x39e62781,0x3acabd8e,0x3b6bc571,0x3bd60383, -0x3bcbf66c,0x3c0cbec5,0x3c362cf2,0x3c488e81,0x3c6bb0d9,0x3c748ed2,0x3c878093,0x3c8948ed,0x3c91d626,0x3c8f09f1,0x3c83932e,0x3c86be08,0x3c852f34,0x3c91e633,0x3c639eef,0x3c5e1d39,0x3c648c3d,0x3c640a86,0x3c685d03,0x3c67941d,0x3c706202,0x3c563b7f,0x3c4778b6,0x3c3760be,0x3c25e9fd, -0x3c154589,0x3bf7015c,0x3c05971a,0x3c08a65a,0x3c0ce2d2,0x3c1213c2,0x3c14a6b1,0x3c10172d,0x3c6009b4,0x3c48d4e8,0x3bb60a89,0x3c7b63ad,0x3c60695b,0x3bc1d234,0x3be08b5c,0x3bf76bbe,0x3c07d31c,0x3c1a1089,0x3c27cf67,0x3c38af5a,0x3c857fb9,0x3c963f59,0x3c1397ad,0x3c79ec9b,0x3c7c198e, -0xbbe7b9f9,0xbb36ad2f,0xbc22b44c,0xbbbf8895,0xbbe0f8fb,0xbbc8026d,0xbbf2bb35,0xbc0429bf,0xbc144b31,0xbc079486,0xbc0a2578,0xbc1a0874,0xbc145d23,0xbc11ba01,0xbc0f0c00,0xbc04a912,0xbbfdcc86,0xbbf8df96,0xbbef644e,0xbbb7d2e8,0xbc0c1700,0xbac805d8,0x3bff5ef1,0x3cbcab33,0xbbb0ca15, -0x3bc0f840,0x3caa68c6,0x3ca92d85,0x3ca89b5c,0x3ca378e0,0x3ca0cd17,0x3c9f08cf,0x3c9cc38b,0x3baaa506,0xbbe50cb6,0x3cbdf640,0x3c03058c,0x3c45f457,0xbc0f19a8,0xbbc2460b,0xbbde88a4,0xbbc8ee45,0xbc18f77c,0xbc33ec34,0xbc5b24b4,0xbc3a5dfa,0xbc43462b,0xbc70fee1,0xbc69a6bc,0xbc68e7a8, -0xbc5e3a60,0xbc43d28d,0xbc30ef4b,0xbc2aeaa0,0xbc0e4c2f,0xbbe2dab5,0xbbbbe742,0x3c5b9fea,0x39c868da,0xba839703,0x3a9e7080,0x3b01e994,0xbb5dcab2,0xbb62690c,0xbb8ec73b,0x39f7dfd1,0xbb8dd47d,0xbb975668,0xb91bdf09,0xbb66c2a5,0x3b12a990,0x3bc3bf76,0xbb718df8,0xba09c351,0xbbf2e461, -0xbbf44cfb,0xbbc39e9e,0xbb9fceea,0xbc243908,0xbc6a1838,0xbca283ad,0xbc802653,0xbc88ec8c,0xbcb3dc2d,0xbcad5943,0xbca7ef80,0xbc9bcecc,0xbc8387ed,0xbc618ab9,0xbc57355f,0xbc16ba7f,0xbc004083,0x3a92dc04,0x3bd7be74,0x3bacef1a,0x3b30c7c6,0x3a887442,0x3b5ff668,0xbadd8ae3,0x3b342b8f, -0xbacf5126,0x3bc994eb,0x3a1488c2,0x3b2d9a2e,0x3b49a2af,0x39dd1940,0x3a95ccec,0x3c42fbf9,0x39b12f6e,0x3b8f8c23,0xbb86f555,0xbb4245cd,0xbb9a0551,0xbb9d3662,0xbc48367e,0xbc8eddf9,0xbcd7a7d2,0xbca2495a,0xbcb1d2d5,0xbcf7f53a,0xbcf84125,0xbcff7e2b,0xbcec82e8,0xbcc5e617,0xbca44b30, -0xbc931baf,0xbc44bfeb,0xbbdbf27f,0x3b0b1b80,0x3c577c5a,0x3bead258,0x3c13cac8,0x3b8b1810,0x3b54d837,0x3ac1bd43,0xbaa1a81d,0x3b33f37b,0x3c115bbd,0x3b83547c,0x3b038854,0x3bb270d9,0xbb22e726,0x3ad87158,0x3c99c182,0x3b97748b,0xbc085cd6,0xbc86395d,0xbca1aa13,0xbc2d911f,0x3b93e2bb, -0xbc2d6037,0xbc942315,0xbcae79d9,0xbc9053ab,0xbc84d6e2,0xbcad29af,0xbc46ec47,0xbbf88925,0xbb300cb2,0xbb9b5c92,0xbbcf2c34,0xbc273f35,0xbc21e59e,0xbc2856e6,0x36b4bb65,0x3c5528db,0x3bdd6247,0x3bc29dcc,0x3bb845bf,0x3bb8ca1d,0x3b3a4bc0,0x3b40d623,0x3ad12bba,0xbae9b8e6,0xba42d12b, -0x3b816490,0x3c180607,0x3c210104,0x3b99a036,0xbbd927ab,0xbc2732ae,0xba0d19a1,0x3c9106d7,0xbb8f1525,0xbc75cf92,0xbc3dfd94,0xbcc0d368,0xbc8a3f0f,0x3bdfa655,0xba291282,0xba480e66,0x3ba7e1b9,0x3b903c6c,0x3a28dca0,0xbba38d46,0xbc57048b,0xbc9edc40,0xbcd337a7,0xbc7e91de,0xbc2a03ef, -0x3abd2844,0x3b7b6cc7,0x3b17b397,0x3b84496f,0x3ab2f943,0x3a395e5b,0x3b08f879,0xb9497437,0xba72b9eb,0x39549ccb,0x3ae8eccd,0x39cf2216,0xbb57b4e6,0xbb092f17,0xbbbe0d12,0xbb2cdbdc,0xbc4ef1ad,0xba48d5b2,0xbbd3469d,0xbbebef56,0xbc405bce,0xbd06b759,0xbcfac7ef,0xbd105679,0xbd133853, -0xbcdc5252,0xbca1fafd,0xbc85df24,0xbcfb308c,0xbd0d6e40,0xbce4ab7f,0xbcb9e921,0xbc4e5165,0xbaf8dae4,0x3b07fad6,0x3a4d80c6,0x3bb0850c,0xba04bcc1,0xbb07b8ae,0x3ba05789,0x3b36c67b,0x3abf6138,0x3a4c2cbd,0x3aaf711d,0xb9d955f2,0xba846a2a,0xbb882ce6,0xbb9eaa69,0xbb82195f,0xbc08d608, -0xbc30ebf0,0xbc122943,0xbb46201e,0xbc87901b,0x3b153872,0xbc32cd13,0xbce4cb3a,0xbd6ee27c,0xbd5456e4,0xbd2141b0,0xbca047be,0xbc4b5290,0xbc1ca3a6,0xbbe6da76,0xbc4aa741,0xbc53ff06,0xbbe013d0,0xbc2428e1,0xbc4769c5,0xbc6e26f9,0xbc223c56,0xbbadc8f3,0x3a33840c,0x3ba8bc24,0x3a750726, -0x3953027a,0x3a5260a5,0x3ad77d68,0x3b18c89a,0xb98484f2,0xba70e782,0x3a30cba3,0xb9933267,0xbb2fe64d,0xbb605efc,0xbb61c02d,0xbc4ce4e6,0xbc933364,0xbcbf8c30,0xbc654df9,0xbd5abbbb,0xbd9f0c77,0xbd87e6f8,0xbd460904,0xbd244bd5,0xbd0b2830,0xbce3570b,0xbcaa322e,0xbc99a734,0xbcb5f926, -0xbc91a503,0xbc8cc246,0xbc7dad38,0xbc2dcec2,0xbbce85cf,0xbb95efc4,0x3b2f0ae8,0x3b1d7724,0xb90f0dd3,0xbaa59ac4,0xbb5cc3ee,0x3b74effa,0x3a840530,0xb9614c5a,0xba2f5885,0x3b0c2653,0x3aa4ce1f,0xbb2840d9,0xbbf647f3,0xbc0d32f5,0xbc0baa33,0xbc2404a5,0xbbe1fd8c,0x3b14fc8d,0xbc7600c7, -0x3d18f617,0x3c6fefcd,0xbb7bd3dd,0xbc4e1e83,0xbce1ab17,0xbd03357e,0xbd06c949,0xbd0be9f9,0xbc992137,0xbc318952,0xbc1d1ebc,0xbc0ba697,0xbc133a43,0xbc1bb587,0xbc2affa5,0xbc25458c,0xbc2df0d2,0xbc187943,0xbbd8ddd1,0xba45e044,0xbb0d1268,0xbb2e82dd,0xba25d049,0x39de29d5,0x3b469ea7, -0x3b6fce10,0x3ba6d342,0x3bf89e18,0x3c0a0470,0x3c6b4be2,0x3c8e3938,0x3c94de45,0x3c93d6ae,0x3c891908,0x3cb432f3,0x3c92a30b,0x3c646eac,0x3c3286b5,0x3b481764,0x390220d3,0xbbb35e88,0xbc4922dd,0xbca85f49,0xbcf86521,0xbcf1de72,0xbcf56ae0,0xbcf1bef0,0xbcd3d4a6,0xbcb52909,0xbc943b53, -0xbc914123,0xbc8c29fa,0xbc88db68,0xbc7542fd,0xbc74bdcf,0xbc45cfb2,0xbba991a5,0xbab57ed6,0x3ae5e70d,0x3b67b224,0x3bdb051b,0x3bfe445e,0x3c3c1b75,0x3c1d76a4,0x3c67425f,0x3c5aced4,0x3c8a5c69,0x3c8c9cde,0x3c95604a,0x3ca2cf67,0x3cbb95a7,0x3c8faaec,0x3c979f90,0x3b8fc231,0x3b310f09, -0x3745f4a4,0xbb13afda,0xbb9931d9,0xbbc80bdb,0xbc0507c5,0xbbd8b0f3,0xbbc0538a,0xbbb1132a,0xbba27b29,0xbba2c1fa,0xbba0efc8,0xbb8a06cc,0xbb58d60f,0xbb295545,0xbaf2481f,0xb9b812ad,0xbacc42c1,0x3b151cba,0xbb368c78,0xbb62f6ba,0xb907cd94,0x39bddffb,0xbb22d337,0xbabb20df,0x3931535d, -0x3b982fb2,0x3b7a5601,0x3bae6b6b,0x3c2230cb,0x3c0cc77f,0x3c35101c,0x3c161cfe,0x3bb16f34,0x3b802618,0xbb1d2fb0,0xba002238,0xbaebef96,0xbb1cb3f2,0xbb474ac6,0xbb7a8952,0xbba671d9,0xbb9800a3,0xbb9452af,0xbb8b07ca,0xbb88fdb5,0xbb830011,0xbb80546c,0xbb603968,0xbb48e4c6,0xbb29dfca, -0xbb20ab6b,0xbae46ed1,0xbb1abbf7,0x3a9ab77e,0x3bfe5d99,0x3ca17c12,0xba745f9f,0x3bfd0598,0x3cae3303,0x3cb19339,0x3cafcded,0x3ca94b5a,0x3caff4e9,0x3cb116bd,0x3cb1f9ec,0x3c334fdb,0x3aa8e288,0x3cb9e89e,0x3c411f3c,0xbb2481a1,0x3c564f91,0x3b63de69,0x3c84b8fb,0x3c322f42,0x3c44600e, -0x3c2fda90,0x3c567188,0x3c5fb768,0x3c584c8d,0x3c5fe804,0x3c58b021,0x3c4264c1,0x3c3fc2d6,0x3c3e5c9a,0x3c3f8554,0x3c513700,0x3c57de21,0x3c584209,0x3c59d3ed,0x3c4699e0,0x3c896330,0x3b7911c7,0xbbbda911,0xbc8830ba,0x3bdda89e,0xbbb42186,0xbc82ec00,0xbc83ef25,0xbc8133f9,0xbc5a510b, -0xbc7ec90c,0xbc80a7e1,0xbc6de448,0xbba837e5,0x3c0c4626,0xbc672b72,0xbbe66cdd,0xbbfe6e44,0x3c79913b,0x3c488e2b,0x3c2aaffe,0x3c061ada,0x3c5b9f7a,0x3c7d682e,0x3c6d8673,0x3c89d536,0x3c81a3af,0x3c43d01c,0x3c37ecb7,0x3c368b38,0x3c44ee9a,0x3c7ac615,0x3c87bbc1,0x3c886e86,0x3c80faea, -0x3c857a47,0x3c7f6d27,0xbba5306e,0x3c144630,0x3bcb9d9b,0x3b946e07,0x3b2aa6dd,0x3bd5c121,0x3c0404cc,0x3c0f0655,0x3bba6adc,0x3c19ea8e,0x3c23e030,0x3bcc08c5,0x3bca9c8b,0x3b147cc2,0x3befe648,0x3c5480bf,0x3b819b05,0x3c39d750,0x3c5e9e52,0x3c2f9f24,0x3be7cc24,0x3c860095,0x3c9d5591, -0x3c934431,0x3cb0ff0c,0x3c9c9924,0x3c4b6afa,0x3c222fa8,0x3c193778,0x3c2bb1b2,0x3c86e670,0x3c9b8b18,0x3c9eaf2a,0x3c916e05,0x3ca7b36b,0x3c5e9131,0x3be08d38,0x3c0a7feb,0x3bbda978,0x3bdc26b1,0x3ad4a013,0x3bb00c9c,0x3a46056a,0x3c14c927,0x3b9f7331,0x3bd54b39,0x3adaaaed,0x3bd00681, -0x3aee9920,0x3b618798,0x3c259e40,0x3c0d4552,0x3be76c32,0x3c7aaa06,0x3c57f5b0,0x3b992a50,0xbb08f360,0x3c322f3b,0x3c931ede,0x3c8b6567,0x3cc470db,0x3cb5cbd1,0x3c38bb01,0x3be9292a,0x3bbe09d5,0x3c1eef70,0x3ca5ebf6,0x3ccaf3ac,0x3ccf62c3,0x3cb779be,0x3cc1a2ac,0x3c96ddd6,0x3c047cc4, -0x3c830b27,0x3bb10f3c,0x3c18fbd8,0x3bf8925d,0x3b9faf6f,0x3af6da28,0x3b2808fc,0x3c3c3455,0x3ba119c3,0x3b9db021,0x3bca5a70,0x3a07c4c7,0x3b9d85c0,0x3caa6328,0x3c8a7ed8,0xbc59fcbe,0x3c1f0731,0x3caad212,0x3cecbd66,0x3d2accb6,0x3d040d17,0x3cd803b9,0x3cd46e1a,0x3cef0fb5,0x3cd1be3d, -0x3c6622ef,0x3cb51983,0x3c9e1e6b,0x3c0e205b,0x3c025e4c,0x3c0563be,0x3c82b61f,0x3c6e5601,0x3ca9faad,0x3c875692,0x3bc65234,0x3c7423a7,0x3c16f9b9,0x3c166494,0x3bde8ff6,0x3b3ca75f,0x3b855ae9,0x3b231765,0xbab1542c,0x3a87a995,0x3bce8dcc,0x3c369c63,0x3c4ca024,0x3b4a6e3c,0xbc20098b, -0xbc54419c,0x3b4f5598,0x3d073339,0x3c31504f,0xbbc44976,0xbc3a6a0a,0xbc5860fe,0xbbe03131,0x3c10cab3,0x3bcd8e85,0x3be03b41,0x3c3b674f,0x3bbd4b93,0x3b4990b1,0x3bc68e21,0x3c14f79b,0x3c5791e5,0x3c9a4900,0x3c6cab54,0x3c716d0d,0x3c033d4c,0x3a9c3f0c,0x3b830c2e,0x3bb9ab70,0x3be81ef0, -0x3bb198dd,0x3b6bc93d,0x3a7610b0,0x396bbf91,0x3b085f66,0x3b8a96ae,0x3ad824f5,0xb9019051,0xbb6f488d,0x37572fc9,0x3b530ee3,0x3b16c48a,0xbba0a426,0xba606bd3,0xbac5d3ff,0x3bc8a278,0x3cb7cd09,0x3d044fc5,0x3d18e658,0x3d20346d,0x3d084257,0x3ccc7b33,0x3ca275c3,0x3ca4a076,0x3cbb4762, -0x3cd232fb,0x3cb22e4c,0x3c71b7c0,0x3bbbc785,0x3c046a64,0x3c56bebc,0x3c5985fa,0x3bc8ed1a,0x3ba33049,0x3ba2adfd,0x3bc10f07,0x3b5aac79,0x3a91633c,0x3b69aa15,0x3b192c98,0x38124791,0xbb38e7a3,0xbb5a4374,0xbb1ce4a8,0xbc1c6cfa,0xbc0f3fc7,0xbc2e7287,0xbb5f2cd2,0xbc44c3c7,0x3b7111f2, -0x3c83aaf1,0x3c947250,0x3cec95f8,0x3c8628c8,0x3c0559cd,0x3b54a120,0xbb4d45a2,0xbb87213b,0x3a718d6a,0xbb16475d,0xbad1cc32,0x3b8cb8c1,0x3c1bb4f1,0x3c53d46a,0x3c5ab0ac,0x3c6c3c0d,0x3c4ce40b,0x3bafe4b7,0x3a51a6a8,0x3ba0d57a,0x3b914905,0x3b6d5a0d,0x3b6cc010,0x3b6fed6b,0x3a739b1d, -0xb81205ca,0x3b1a5b5a,0x3ae43808,0xb8921b65,0x3b47bb36,0xbb164b6c,0xbbc09c48,0xbc6b6c7b,0xbc7d674f,0xbd172867,0xbd1cc834,0xbc60f8fe,0xbbf37140,0x3bd9faa5,0x3c0c823a,0x3c420046,0x3c607b16,0x3c41c671,0x3c27f549,0x3bd8e5fd,0x3be485c4,0x3b9faeff,0x3ae66c43,0xbab5017d,0xbb006177, -0x390c09ff,0x3b2913cb,0x3bda985c,0x3bf1562c,0xb9727126,0x3b5b8f52,0x3b926ea7,0x3add78df,0x3af41d32,0x3b2281d1,0x3b48f72f,0x3b3c86e6,0xbb3949be,0xbbbf131c,0xbc11b0e9,0xbc150e4c,0xbc6ab4b3,0xbc57ff27,0xbc14f79a,0xbc6f7ecf,0x3bea1693,0x3c540af7,0x3c13c73e,0xbb000df9,0xbbf715f8, -0xbbc729f2,0xbace8025,0x3b955d5f,0x39c76eb8,0xbb380004,0xbbe47ef1,0xbb1d76e1,0xb91da11c,0x3a5a1546,0x3adbd51a,0x3b59b9b5,0x3b68f178,0x3b816c44,0x3b151f17,0xbb065eb2,0xbae061d2,0x397163d1,0x3a8eef91,0x3b8be601,0x3baf1f1e,0x3b87663b,0x3bcc884e,0x3c035636,0x3c3085c8,0x3c742645, -0x3c8d6f46,0x3c988a12,0x3c89f743,0x3c8ab7ef,0x3c85ae5b,0x3c895793,0x3c8749b4,0x3c958ae5,0x3c6e0231,0x3c14d903,0x3b83af0c,0xbac52232,0xbbfddf1c,0xbc5cdcac,0xbc5a1c5c,0xbc520826,0xbc5e8229,0xbc5e838b,0xbc648f5e,0xbc6bde9e,0xbc5ae143,0xbc52192b,0xbc413cf3,0xbc1c879c,0xbba6b2cf, -0xbb9d2ec5,0xbbc2db55,0xbacea92a,0x3af6d7c6,0x3b989a82,0x3bc05ab7,0x3c2209a9,0x3c17ef01,0x3c53da70,0x3c349a46,0x3c6842e3,0x3c65df83,0x3c8d6c7d,0x3c91a3df,0x3c9949a1,0x3c9a4bd4,0x3c9a8a9b,0x3ae65e2a,0x3bf82bdb,0x3bea5403,0x3bdaf264,0x3bdf48c8,0x3be2e8c8,0x3bf5ca01,0x3bedc125, -0x3bb4e31b,0x3b4cad36,0x3a9e02b0,0xba7ec72e,0xbb481de8,0xbbb99614,0xbb73ba47,0xbb0fcc5b,0xba47a3ad,0x39b62ae5,0x3a945605,0x3b5e657e,0xba4c1375,0x3b2e4023,0x3b12e0f8,0x3a9a8a9f,0x3a0fe3fb,0x3b12884f,0x3b8f511e,0x3bb2bd48,0x3ba42c66,0x3c10192e,0x3c23b5e6,0x3c27a2f1,0x3c1eabcb, -0x3beff101,0x3be9508a,0x3c0a1f35,0x3b4d4374,0x3bd66834,0x3ba91ec0,0x3bb15a36,0x3baa309c,0x3ba1c978,0x3b97b694,0x3b9cf39d,0x3b80916d,0x3b5e3159,0x3b33780c,0x3b05b600,0x3abb1e33,0x39758c3f,0x3a99a916,0x3ace8b46,0x3b09c326,0x3b360cbc,0x3b403168,0x3b9995c1,0x3afa8a64,0xbb188796, -0xbbd03358,0x3b4a76be,0xbb154d79,0xbbf75b82,0xbbdf5011,0xbbbdb497,0xbb89babd,0xbb893c22,0xbb5a8841,0xbb02dfa8,0x3862d0c8,0x3ba1128a,0xbb43cf18,0xba824df1,0x3b98c5f2,0xbb14149b,0x3c14ccfb,0xbbd41cc5,0xbabf9726,0xbb0063f7,0xbabbd455,0xbadb6dc5,0xbb0c0af0,0xbb5c5090,0xbb363cea, -0xbb4a55ac,0xbb87d6b0,0xbb7b6b1e,0xbb761287,0xbb71935f,0xbb51f7ac,0xbb3fc224,0xbb38e162,0xbb2386d2,0xbaaefea9,0xbba2ae3e,0x3c202148,0x3c88bb7d,0x3c9dd30e,0x3bb705af,0x3c7c5754,0x3c978c34,0x3c9fbcff,0x3ca0d8ef,0x3c940d1d,0x3ca29793,0x3ca4259e,0x3ca0b73d,0x3c7486cb,0x3b76d18d, -0x3ca5bc06,0x3c9120c8,0x3c9f3f6f,0xbaece7ca,0xbb0d04cb,0xba73251b,0xba2b5eb0,0xb9e43898,0xba8aad87,0xbb8d18f0,0xbb44383b,0xbb8b31c0,0xbbf4a627,0xbbf01927,0xbbf89f88,0xbbeb18a6,0xbbb8fc5e,0xbb8c4be3,0xbb7ba6c4,0xbae24507,0xbb075ffa,0x3aea03b4,0x3c9231d7,0x3b966073,0x3bc76923, -0x3ba9742b,0x3bcf1562,0x3b42dd28,0x3b0fbcc6,0x3b62b82f,0x3c0152a1,0x3b2e5495,0x38ad482c,0x3b85317d,0x3ac6f501,0x3be74eee,0x3c4150e5,0x3b256e62,0x3c303ce3,0xb99c4f2b,0xbb6211dc,0x3abf2f6c,0x3a69cb1e,0x3afa6492,0xb9ada6ec,0xbbea940e,0xbb846e63,0xbbd05696,0xbc3e68b2,0xbc359625, -0xbc3541f6,0xbc20e16a,0xbbff7de3,0xbbb291de,0xbba94de6,0xbae21b3e,0xbb3ec483,0x3bf36a7a,0x3c53d4bb,0x3c12f5bc,0x3bb6f060,0x3b84fda1,0x3bee951d,0x3aa98b93,0x3bd9be06,0xb75bbf87,0x3c1af8ae,0x3b008183,0x3bde2ce9,0x3baf0ebb,0x3b6dc3d0,0x3b93b282,0x3c73d655,0x3be6c67c,0x3c7b26cc, -0x3b103492,0xba3fa2a7,0x3acef017,0x39db8a56,0x3b7441cd,0x3b6d8404,0xbbece0aa,0xbb59f0f5,0xbbef46d1,0xbc8d16bb,0xbc8f4519,0xbc9b5292,0xbc88704c,0xbc4049ef,0xbbfab266,0xbbbf53eb,0xba1c09bf,0xb9c572cb,0x3c2596ad,0x3c8e5c1f,0x3bcfc418,0x3c1792a5,0x3b841696,0x3b52c6b5,0x3a51023c, -0xb80617f7,0x3b6eae09,0x3bf71ee0,0x3ba30e81,0x3b053d7e,0x3b827cfe,0xbb1e2ccc,0x3b959bfd,0x3c98f727,0x3c3a7c0c,0x3ba37faa,0xbb9e3ccb,0xbc258d19,0x3b473400,0x3c8cb397,0x3ad29f0f,0xbbe572b7,0xbc3fd253,0xbc0435a3,0xbc2a8b15,0xbcb78278,0xbc12369a,0xbbb395f0,0xbc07f7f3,0xbbbdde15, -0xbbb441b8,0xbc38b5e9,0xbc053a5f,0xbc0f198c,0x3bf9bd12,0x3c8251ab,0x3b8ab437,0x3bf89ed5,0x3be3dc00,0x3c021db6,0x3b6cc2f7,0x3b4a686b,0x3ac1115e,0xbb1b2e97,0x3a95ff08,0x3bea59f3,0x3c585087,0x3c4133f9,0x3bda70a4,0xbbcdcf6a,0xbb0de217,0x3c1a68c8,0x3c415cfa,0xbc737a6d,0xbc85d7b2, -0xbc523344,0xbc1064e3,0xb9793c78,0x3c536dc8,0x3b93f9f7,0x3adddbd9,0x3b94e6c6,0x3bee7be2,0x3bc3987e,0x3b4c08cd,0xbb389f9b,0xbbcd3c4f,0xbc1ca423,0xbaa6837a,0xbb0fb817,0x3bc3c85b,0x3c11f6d3,0x3bd722db,0x3bfbad96,0x3b1db394,0x39e05974,0x3b23127d,0x3a22f437,0x3a09c905,0x3b2b7093, -0x3b37aa6b,0x3a8646e8,0xbb43287d,0xbb7c04d7,0xbb9e4255,0x3b95958f,0xbb80a48b,0xb8fc8eb2,0xbb6545e4,0xbbc93d84,0xbb9c49c9,0xbc03d188,0xbba872cc,0xbc002586,0xbbc64989,0xbc4f47df,0xbc5c2ba6,0xbc2b744b,0xbca8c1f5,0xbca960bd,0xbc6628e8,0xbc378053,0xbb993923,0x3a362b1d,0x3bb4cbde, -0x3a2e3859,0x3b81385b,0x3b8cb29d,0x39c335db,0x3bc58eca,0x3bba0e40,0x3b420f89,0x3a6a6535,0x3b1dfbcc,0x3a2c6535,0xba5b89eb,0xbb56b28c,0xbb4a934b,0xb99763a5,0xbbcb239b,0xbc062284,0xbb331584,0xbb41b98a,0xbb963f04,0x3b544f46,0xb51328ad,0xbae5fbbd,0xbc7c0e5f,0xbc6be83e,0xbc6364d7, -0xbc6598a3,0xbba3720b,0xb9bedb87,0x3ba6fe15,0x3aa565f7,0xb64f1d6a,0x3b0bfea8,0x3b05258f,0x380ed78e,0xbb6279ab,0xb99716be,0xb9b5093f,0x3ae952a5,0x3c1282e4,0x3bc4b778,0x3b8e121c,0x3b8fe61b,0x3b68ceae,0x3b4fb6f0,0x3916b4f2,0x3a082b57,0x3b2483a3,0x3af664db,0xb99e6d07,0x3a67f126, -0xbb2be584,0xbc131435,0xbc22cc13,0xbc510c5e,0xbc7f7325,0xbcf9648c,0xbd02b389,0xbcd268a4,0xbcc5cbd9,0xbca8c644,0xbc9aaba1,0xbc7f8208,0xbbdf9733,0xbb752adf,0xbbd76e77,0xbab44e6b,0xbad01ccb,0xbb9ddb32,0xbb3d7a10,0xba8b721a,0xba0d2ba4,0x3b88b86c,0x3b7bb07d,0x3b31647b,0x3ba7afb3, -0x3a661f9b,0x3b65740e,0x3adef103,0x3ab52c08,0x3b0a262d,0x3b4445cd,0x386f6249,0xbb2b45e3,0xbc011de6,0xbc099215,0xbbe3d29f,0xbc600cb6,0xbc5329c9,0xbbbc42d6,0xbc6bd57d,0x3ca2f9ad,0x3b23f194,0xbc831b3c,0xbc91df4c,0xbcb0e682,0xbca231e8,0xbc8d5e35,0xbc646236,0xbc1ed67e,0xbc093db5, -0xbc25c861,0xbc0705f0,0xbbdf8960,0xbbcadcc0,0xbba0c4c9,0xbb8e6370,0xbb5c9503,0xbb5c7236,0xbb435410,0xba1d9330,0xba26680a,0x3a3e9fa3,0x3bce6d1d,0x3b8f6da3,0x3b82fb93,0x3b6512c4,0x3b876dc7,0x3bd6457d,0x3bad2487,0x3c161a70,0x3c3c3bc1,0x3c4eebf9,0x3c520a27,0x3c364c15,0x3c3756d9, -0x3c0f1526,0x3c854bce,0x3c19fcfe,0xba1ee1ea,0xbb766b7a,0xbc40a7a2,0xbc82bac4,0xbcb1a6a3,0xbce54f56,0xbcc6d7f1,0xbcafaeb5,0xbc98ac96,0xbc9550d6,0xbc9143f8,0xbc8b09c6,0xbc855c64,0xbc7d125b,0xbc7373cd,0xbc489113,0xbc3905aa,0xbbe1a0bc,0xbb08555d,0xba1d6646,0x3a5828c1,0x3b3b44d6, -0x3be4cb3c,0x3c04aa0e,0x3c3d331e,0x3c1290b3,0x3c6a16e0,0x3c43efb7,0x3c7f8139,0x3c7a7a09,0x3c8c2d14,0x3ca6eb06,0x3cc6a747,0x3c916ec3,0x3c3ae352,0x3a2cbda5,0xbada8d2f,0xbb5153e9,0xbba98928,0xbbe528bb,0xbc0c93d8,0xbc302702,0xbc2cd8b0,0xbc38ac0b,0xbc3a6773,0xbc37575e,0xbc2c052a, -0xbc1fd95f,0xbc0848d9,0xbbe447ad,0xbbc3297e,0xbb9a25a6,0xbb7bc69a,0xbb517a18,0x3b622792,0xbae06dbd,0xba379603,0x39fc285d,0x3ab51ca2,0xba44cc04,0xba691b58,0x3a87acc7,0x3b956503,0x3b1db928,0x3b025f2f,0x3bb5a7a7,0x3b7e96e3,0x3bb1eaed,0x3b9cbbea,0x3a3aef2e,0x3b147ae3,0xbbd55924, -0xbb9ff743,0xbbc607fa,0xbbdb6371,0xbbf68a47,0xbc08822b,0xbc19d78e,0xbc162e55,0xbc143ca3,0xbc131b1a,0xbc124838,0xbc13c8c2,0xbc182a56,0xbc0eb400,0xbc06c27a,0xbbfa0b31,0xbbecef79,0xbbd00432,0xbbfc63ab,0x39d874a8,0x3bc3914b,0x3c2ba52a,0xba797b08,0x3bdd285d,0x3c389004,0x3c4361af, -0x3c407435,0x3c2e9c49,0x3c463a9c,0x3c4a5198,0x3c496e28,0x3bfcfdbf,0x37379127,0x3c3c148e,0x3c0730fa,0xbc00cb68,0x3ba55701,0xbbbca01f,0x3c01a19d,0x3b968f71,0x3b998cb0,0x3b84b741,0x3b85fb2f,0x3b85a443,0x3b88ff66,0x3b919f30,0x3b8dcd86,0x3b739db3,0x3b6f053e,0x3b699335,0x3b6237d8, -0x3b919141,0x3b9f492e,0x3ba295c6,0x3ba68307,0x3ba2baf1,0x3c07d07c,0xbbb0accc,0xbc106c20,0xbb955a10,0xbb78e031,0xbc1a6418,0xbbad9f37,0xbbc6eb74,0xbbc807b2,0xbb92249b,0xbbe47c41,0xbbef8efd,0xbbe19061,0xbc1803a3,0xbb360bbe,0xbb6ddca8,0xbc22d834,0xbbda7c7b,0x3b99aa5f,0x3bcf8317, -0x3b662e74,0x3b23130a,0x3ad80e95,0x3ae9f34b,0x3b2523e2,0x3b7b2756,0x3b757e05,0x3ad534e0,0x3ad78194,0x3ae4362c,0x3af992e9,0x3b926b8d,0x3bab6c33,0x3bb2885e,0x3ba83f74,0x3bf65e0c,0x3bc06471,0xbb75a0cd,0x3b5eda0c,0xb9f538a4,0x39cbe5dc,0xba687f78,0xb8e2fbb9,0x3b131b00,0x3a9506c1, -0xbac6a6aa,0x3b0d1925,0x3b7d51cb,0x3a742de5,0x39fc71db,0xbaa34ee6,0x3aa1ef0f,0x3b9d1485,0xbb118f1f,0x3b89c7de,0x3c121841,0x3b9a2150,0x3b5c063a,0x3a1f03b9,0xba39c101,0x3abe0169,0x3b402e99,0x3b1db3e0,0xba07f651,0xbac76d63,0xbb010e90,0xbb299ea2,0x3b387a66,0x3ba7af08,0x3bbb9258, -0x3bc5a67c,0x3c2340bf,0x3be93e60,0x3aa5113e,0x3b5ee61c,0x3b1b57f6,0x3afd6d16,0xbab0c3f8,0x3aa4ab8f,0x38df8172,0x3bd5d10f,0x3a2a6eaf,0x3bb488fd,0x39b45ac1,0x3b2a5d9d,0xba5380e5,0xb9719e54,0x3b958d52,0x3b0132ce,0x3b305fbe,0x3bf08ac0,0x3c2647d4,0x3adfd862,0xba9dc476,0xbbd8615b, -0xbbd6de41,0xbb410723,0x394e077e,0x3a5fd49c,0xbb8e0096,0xbbd03b0b,0xbc027d2e,0xbbe49ea0,0x3a857427,0x3b8d0884,0x3bb43c71,0x3bc99194,0x3c4f36c2,0x3c4dd74b,0x3bd7ab41,0x3c4aff3d,0x3b6e227d,0x3bc73683,0x3bc6d328,0x3b813b99,0x3b179f2a,0x3b7ae0c1,0x3c356d2e,0x3baf3a2a,0x3ba4dc27, -0x3b9d9694,0xb9a748bd,0x3b15c5a3,0x3c837131,0x3c2d62bc,0xbc916aa2,0xbad563d4,0x3c3800f0,0x3c88aeaf,0x3cec9b65,0x3c4539e5,0x3b3f167f,0x3aa94622,0x3c148d22,0x3c2a4f13,0x3b15ee0e,0x3c9b8af3,0x3ca50e35,0x3c25343e,0x3bd9b8ee,0x3bb25bcc,0x3c57eda3,0x3be792aa,0x3c01b5db,0x3b475d9d, -0xbaa1bcb3,0x3bf67cab,0x3bb81c01,0x3be871c2,0x3bcdacec,0x3b6599d2,0x3b60a5a2,0x3ad0b926,0xbaf686e6,0x3abc3821,0x3c015767,0x3c332441,0x3c1b0274,0xbac9adb1,0xbc7f21e5,0xbc98c902,0x39c2f544,0x3c3924a0,0x3aed5063,0xbc37ff42,0xbc680801,0xbc83307c,0xbc3b2223,0xbaca3b74,0x3a882a21, -0x3b47467c,0x3b104838,0x3b9f6317,0x3b614f74,0xb992eec8,0x3aa24fe9,0x3a8415ac,0xb9defde7,0x3abdb884,0x3bc64f25,0x3b3260aa,0x3b55b0cd,0x3bac41fd,0x3b8ec22a,0x3bbe4ea3,0x3b6a03c5,0x3b4dfcee,0x3ad11a2e,0x3acedf08,0x3b6c7d80,0x3b7f5a62,0x3a36ae62,0xbafd770d,0xbba7f82e,0xba2d36fd, -0x3b0aeccc,0x3b7a21c8,0xbb808f59,0xbb42ba38,0xbbb833b1,0xbbd3ddba,0xbc33cbc2,0xbbe9584b,0xbb22d8dd,0x3bed3887,0x3c7efa2e,0x3c7e2ab5,0x3c183d46,0x3b9e863e,0x3b25ad9f,0x3b0914e1,0x3bb217ba,0x3bd53ec1,0x3b929fbf,0x3c0ad58e,0x3c409c69,0x3b518715,0x39046547,0x3b1fd7ff,0x3ae19f2d, -0x3b845d31,0x3b10183d,0x3a86cf8a,0x3b465ba7,0x3b0d5f4d,0x36f47941,0xbb25bbc0,0xbb279838,0xb9f869c2,0xbc1cb1f2,0xbbd8efc4,0xbbe1b902,0xbb5ebe90,0xbbbd7a2c,0xbbc35386,0xbb946b08,0xbc16c962,0xbc44e905,0xbc22779a,0xbc248ff9,0xbbf1a290,0xbc4e6a34,0xbc54c713,0xbc1d68d4,0xbbbb89f1, -0xbb6b02c7,0xbb05b4f6,0x3b57e315,0x3b958363,0x3b99f54f,0x3bd9fffd,0x3c092ee7,0x3b5521e8,0x3b28dd00,0x3bbc49d9,0x3bb0aa76,0x3b9ad5a1,0x3b67fa8f,0x3b4a5ed9,0x3ac7d54f,0x39b06c16,0x3b344a65,0x3b339bb9,0x3ac3a41b,0x3bb2ed94,0xbb46d46d,0xbbcd9a28,0xbc00377a,0xbbcc85ee,0xbd06d440, -0xbd14eb7c,0xbcc14752,0xbcc0ab4d,0xbcaf22aa,0xbcb24e50,0xbc947c7e,0xbc3ebcfa,0xbb859dd4,0xbb0ee4e0,0xbc2f5f20,0xbbd8a73a,0xbbbf0228,0xbbe5d06b,0xbb856396,0xbac56831,0x3b42d1f5,0x3b782243,0x3bae89d4,0x3b427776,0xb9e91277,0x3b2156b7,0x3b81f13b,0x3b0be3ae,0x3b218a96,0x3b4139d5, -0x3ae559b5,0x38d8b749,0xbbb8680b,0xbc0177dc,0xbc2e9859,0xbc3320ce,0xbc88ac70,0xbc91548f,0xbc7c4d13,0xbccb455d,0xbc090237,0xbc7b7214,0xbc937e31,0xbc952600,0xbc37d266,0xbba3bd3b,0x3a8cb689,0x3bb1fb43,0xb9c0e639,0xbb6ac4c4,0xbb9df6ce,0xbb85e327,0xbba48196,0xbbdec3ea,0xbb9fa485, -0xbb2e7da1,0x3b4a85ef,0x3b6f82ae,0x3b617ff7,0xb9a5bf2a,0xbaa44d4c,0x38f5d6ea,0x3a7d4902,0x3b1f6ae8,0x3b85e038,0x3b918543,0x3bac8c6e,0x3bb9705d,0x3bc39c81,0x3bd02157,0x3bf069cd,0x3c059017,0x3c0e3039,0x3bb5b909,0x3a028ca7,0xbb74d228,0x3bb01509,0x3bb373ef,0x3b025155,0xbb91bdab, -0xbc30abc6,0xbc745a34,0xbc996964,0xbcb29dec,0xbc985838,0xbc801416,0xbc5c677e,0xbc57c6d1,0xbc4c5d79,0xbc4cf228,0xbc345b78,0xbc27d072,0xbc129fc3,0xbbf77c88,0xbb692751,0xbb8237f1,0xbbc78fea,0xbb12af41,0x3992dd18,0x3b29bb95,0x3b8e31f7,0x3bee37fd,0x3bff4aa3,0x3c25951d,0x3c110778, -0x3c35ef00,0x3c28ac87,0x3c3f6432,0x3c3233e9,0x3c3679f2,0x3c357d20,0x3c0c75bf,0xbac8987a,0xba4703ce,0xbaaab426,0xbb2bf861,0xbb4b7599,0xbb721662,0xbb8fdd1b,0xbbcff768,0xbbccb3bd,0xbbe51f3b,0xbbeba0cb,0xbbf5c286,0xbc01b938,0xbc10fb1d,0xbbf10706,0xbbc4a003,0xbb984302,0xbb7340d5, -0xbb2c90af,0xbac25ceb,0xbb66e6ee,0xbad98d5d,0xbb4dc501,0xbb242f66,0xbb659dcd,0xbb4d8221,0xbaca4d92,0xbb01841c,0xbb0e0b68,0x3a107047,0x3b0fe489,0x3b1646f2,0x3aed68e4,0x39be6e40,0xb9aa6c8c,0x39e4b123,0xbbf85a66,0xbafb9bf4,0xbb49de82,0xbb682092,0xbb82738f,0xbb9d47ca,0xbbaf645a, -0xbbbdee67,0xbbb9b01c,0xbbba7969,0xbbbe5f53,0xbbc22ef5,0xbbc42d31,0xbbceee8d,0xbbbac60d,0xbbb0b506,0xbba303e2,0xbb93e96f,0xbb8b5825,0xbb33ce80,0xbc01b6ab,0xbc246061,0xbbe0ecb5,0xbbece71e,0xbc24b687,0xbbea7061,0xbbec5406,0xbbdba8a0,0xbbbd4d4d,0xbbd40349,0xbbcc764a,0xbbb4bebc, -0xbc0953f8,0xbbc74dff,0xbb9cbd93,0xbc10ac12,0xbbad09b5,0x3bd2e321,0x3c66c12f,0x3b8a9ab9,0x3bc24521,0x3bd0c222,0x3bc451f7,0x3bf0ad0e,0x3bf2ecd0,0x3bd2cd91,0x3bdaa26e,0x3bcd2da6,0x3baaca3d,0x3bb1cbf7,0x3bb351a9,0x3bb8462f,0x3bc43d78,0x3bca2858,0x3bc8c836,0x3bd0a0ab,0x3bcc51df, -0x3baa3d30,0x3c698b10,0x3c597111,0x3b33a721,0x3c510b0d,0x3c553df6,0x3b557963,0x3b9a707e,0x3ba61f72,0x3b8d6562,0x3bc76f0c,0x3bd03335,0x3bcad7dc,0x3c557d42,0x3c484d00,0x3b8aaaf0,0x3c624109,0x3c4b7d79,0x3c0aa507,0x3bb98361,0x3bf179a6,0x3bd11f8b,0x3c27e9f0,0x3c3786ca,0x3c0ff969, -0x3c198836,0x3c01ef44,0x3ba1ce74,0x3b99d9bb,0x3b943b10,0x3ba904e1,0x3bd6ef3c,0x3bfa356b,0x3bfe1883,0x3c1272ef,0x3bf45a05,0x3c322b44,0x3c377f56,0x3c0a59ac,0x3c2faac5,0x3be7ca1b,0x3becc87c,0x3c033ec5,0x3c02f141,0x3c2c151b,0x3c3b8c29,0x3c1e01d2,0x3bdda720,0x3be2b7b8,0x3bd09f96, -0x3bfc5eaa,0x3c45e97b,0x3c18dbc3,0x3c62ea05,0x3bfee520,0x3bb20659,0x3c207ea3,0x3bdc526b,0x3c6ca9d4,0x3c82ae21,0x3c2c0792,0x3c48b923,0x3c1a6d1e,0x3b91ef23,0x3b960335,0x3b8a39cd,0x3bb46259,0x3bf203b0,0x3c1689d3,0x3c105755,0x3c248bc3,0x3c0901ca,0x3c4c8aeb,0x3c60446c,0x3c27ba8f, -0x3c042557,0x3bd2a6ce,0x3be56503,0x3b8a4567,0x3be98a67,0x3b9f1290,0x3c195622,0x3ba3ac3e,0x3bf9dc0b,0x3bc5c3f7,0x3b9c9456,0x3bbccb66,0x3c4bdba2,0x3c293982,0x3c7eb585,0x3c05fd36,0x3b970639,0x3bf519eb,0x3b7fdb41,0x3c86e6a8,0x3cb2f258,0x3c749fdb,0x3c883a9c,0x3c51f98e,0x3b4858cb, -0x3adfd971,0x3a685289,0x3b7388d6,0x3c12d4e4,0x3c4566bc,0x3c4b77ca,0x3c6a560f,0x3c3d1de1,0x3c8869d7,0x3c7eea37,0x3c093de7,0x3c0ce6e2,0x3bb26173,0x3b88d7bb,0x3a5d4202,0x3afe8fe5,0x3b8bb7eb,0x3be56d3a,0x3bca73a6,0x3b5a3d75,0x3b1ee68e,0xba45b28b,0x3bb80d53,0x3c6d7778,0x3c66649b, -0x3c246df7,0x3c3eb298,0x3c40c3b4,0x3cab89d3,0x3cf4c965,0x3c9ecd60,0x3c65b531,0x3c512598,0x3c04b003,0x3b6a77e6,0xbb9e9dcc,0x3c0b419d,0x3c144d46,0xbb03d43c,0x3abc3ffe,0x3b0b5dcd,0xb9f1f256,0x3b4db2f7,0x3b766ef1,0x3c425ec3,0x3c3e5511,0x3bb21d8d,0x3c052221,0x3bffed0e,0x3c0f3c83, -0x3b92a67d,0x3b49103d,0x3abb57a0,0xbb0b81bb,0x3b816f17,0x3c299086,0x3c61ec15,0x3c2a4843,0x3b94c3cd,0xbbf2a35b,0x3ade2d3b,0x3c780584,0x3ae22480,0xbc81c0f3,0xbc4453f7,0xbc4440f3,0xba7201e0,0x3b94885b,0x3b494cc0,0x3bcf8c0d,0x3ba1540e,0xba9aef31,0x3c06d024,0x3c1e6e66,0x3be2af3c, -0x3bcf3736,0x3c0aecef,0x3c41de31,0x3c74e499,0x3c2d3f2c,0x3c0853a2,0x3c105d46,0x3c034174,0x3c13ed80,0x3baddc62,0x3b34fcd0,0x3b525e37,0x3ab4cd5f,0x3b00b507,0x3b9aff45,0x3b790190,0x3a89ffd8,0xbb519194,0xbae6f031,0x3b194eb4,0x3bdaa296,0x3c287058,0xba4e5920,0xba4f28a6,0xbae0607c, -0x3b97854e,0x3c98df71,0x3cd070c0,0x3cee33b6,0x3cf85265,0x3c8d6753,0x3c078bdb,0x3b9e9ac5,0x3bea737b,0x3c11af9d,0x3c1a70c7,0x3c270fcf,0x3c0c556c,0x3b5a2d36,0x3c09d888,0x3bbcf115,0x3bbe8bc9,0x3bdacf10,0x3b49f9e1,0x3bb15779,0x3be1f1dc,0x3b60de49,0x3ad6b55f,0x3b31c77f,0x3ad6f2f2, -0x39d7cc41,0xbadc3aef,0xba549706,0x3b255b5d,0xbbae8f66,0xbba20e3e,0x3ab2bf0d,0xbb0d865d,0xba134d07,0xbae2ee23,0x3c4eb43b,0x3cc88bff,0x3ceeaf7a,0x3cd2111b,0x3c7a30f8,0xbba6c4b9,0x3a113b3b,0x3b2b92d6,0x3ba7d083,0x3c14c787,0x3c1520a5,0x3ba3f05c,0x3c3758ce,0x3c4e0828,0x3c28556c, -0x3c30522e,0x3be27ed4,0x3ba2c916,0x3c09db11,0x3c009165,0x3bdbe9db,0x3bca9ac7,0x3b965f42,0x3b809398,0x3a7b6b8a,0x3ae5f3a5,0x3b57b2ec,0x3b3c7d63,0x3a97b4a6,0x3b6e6248,0xbb224379,0xbb8fc7a6,0xbb91396b,0xbb50cb88,0xbc652a80,0xb76df92d,0x3c5e3a2b,0x3c4d460d,0x3b98d990,0x3bb4a2db, -0x3b94812d,0x3b39665a,0x3c2842a9,0x3c500400,0x3c4a8f22,0x3c28c8e9,0x3c06b67c,0x3be514e4,0x3b4d4715,0x3afe7f34,0x3b54d2fa,0x3bca9033,0x3bc5f395,0x3b97a086,0x3bf6556e,0x3bae3d55,0x3b918a2c,0x3b472697,0x3b3c62ea,0x3b86be74,0x3b01dab1,0xbaaee3d9,0xbb47830b,0xbbc3f7c2,0xbbd2f018, -0xbbbeddd8,0xbc339102,0xbc4d8ab5,0xbc54bc7b,0xbc24d9c5,0xbbbe4c28,0xbbdc347f,0xbc5700eb,0xbc283f7a,0xbb9b87bd,0xb6a881a8,0x3b67d80a,0x3c11b01a,0xbb453636,0xbc07679f,0xbbecb6b2,0xbb8cc812,0xba8a0321,0x3a682b21,0x3b5a41b8,0x3b8f6426,0x3b9e1914,0x3b9b7728,0x3b45353d,0x37e55cd3, -0xb95a0dff,0x3ab4778f,0x3be31a3b,0x3bb063d4,0x3b96aa71,0x3baf2932,0x3bc3741f,0x3bc29c32,0x3aed3149,0x3b3321e5,0x3b7a40d2,0x3b91d074,0x3be36840,0x3bccb628,0x3a6815e7,0xba046ee3,0x3c2bd73a,0x3b85e75b,0xbb08afed,0xbb935993,0xbc2686d8,0xbc314342,0xbc4a6720,0xbc529db1,0xbc1cda6b, -0xbbd64d3f,0xbba3a01c,0xbbf1c798,0xbc19b49b,0xbc3cfb8a,0xbc278467,0xbc16702a,0xbc064b4b,0xbbb1775c,0xbb656b91,0x3a0fd032,0x3b0ab182,0x3ac24b8d,0x3ad45bbf,0x3b2eae0f,0x3ba14ad6,0x3bbabe6e,0x3c037016,0x3c05bd06,0x3c4ed4ab,0x3c240e8f,0x3c389058,0x3c2ed0ce,0x3c329c5b,0x3c52208c, -0x3c6a4553,0x3c2b6dfc,0x3b02200a,0x3a94ccc1,0xba616b0f,0xba97b881,0xbb11bbfc,0xbb482146,0xbb8c1300,0xbbc6ae03,0xbbfe54b9,0xbc233da7,0xbc36d1fc,0xbc443c6f,0xbc482a48,0xbc4d3ed6,0xbc3774bf,0xbc26c55c,0xbc196437,0xbc09c70d,0xbc0aa4a9,0xbbdee82f,0xbacead84,0xbb1803a6,0x39cd2494, -0x3988f915,0x3b0d1203,0x3b4704ae,0x3b2aa024,0x3b7d08a4,0x3b9d49fc,0x3b70317c,0x3b3512ce,0x3b753aac,0x3b3a47b2,0x3b11d5c1,0x3b2fd4d2,0x3a497dbd,0x3ad2c1ea,0xbb6c2374,0xbb6a9418,0xbb851312,0xbb961d7b,0xbbab2927,0xbbbb719a,0xbbc4f3db,0xbbd35e7f,0xbbdbe121,0xbbea002d,0xbbf695d7, -0xbc031b70,0xbc0f3241,0xbc058ea5,0xbbfe6d9b,0xbbf01f0c,0xbbdfdb76,0xbbca93f7,0xbbe82dce,0xb9dd100a,0x3a4d74ca,0xbb44b5ca,0x3a13e3f8,0x3b216532,0xbb1a44e6,0xbaf2b4c4,0xbadee3f7,0xbb0da0f7,0xba75b3be,0xba230ec9,0xb9bcfcd1,0x3b2d8bb9,0x3ac6f5eb,0xbb25ee63,0x3b09fcce,0xbbbe038b, -0xbb598b6c,0xbbd3933f,0xbb5f8c3a,0xbb0ce64a,0xbb4112cd,0xbb3aba1c,0xbb8cb540,0xbb9d4faf,0xbb9cf5cc,0xbb97e0b0,0xbb95aeb7,0xbb9708e5,0xbb94030f,0xbb9343ce,0xbb95b8dc,0xbb84d794,0xbb788133,0xbb75556c,0xbb691067,0xbb27634f,0xbb44acc8,0xbbc20a6f,0xbaa57967,0x3c49d05c,0xbbefb341, -0xbb2ce513,0x3c2b593c,0x3c253939,0x3c2225c3,0x3c1efe97,0x3c0f8db4,0x3c0a7a3d,0x3c00c5e3,0xbb3abd13,0xbc002eba,0x3c3f90ed,0xbad1840f,0x3b54b91e,0xbba71876,0xba9a17e0,0xbb43865b,0xbb4b2b26,0xbbee4617,0xbc0e8f82,0xbc0501b3,0xbbfbd12c,0xbbedbacc,0xbbfd7d48,0xbbf1d47a,0xbbec47c0, -0xbbf14f12,0xbbcbf45e,0xbbc305e0,0xbbc3c821,0xbba5df99,0xbb35b8cd,0xbb5e457f,0x3b9a3f61,0xb9c631a9,0xbb1856f8,0xba4dcc09,0xba3fbe46,0xbb6ac241,0xbad4edeb,0xbb3ff605,0xbb3b1d5e,0xbb2d28dc,0xbafa5cb1,0xbb004747,0xbb4681fa,0xba5675af,0xb88347b0,0xbb1dbb27,0xbb31f833,0xbb551827, -0x3a081e50,0xba9c5775,0xbac46936,0xbc1b7394,0xbc5bfc0d,0xbc4e6814,0xbc47ad50,0xbc3d886b,0xbc3be796,0xbc384455,0xbc38d2db,0xbc471bd9,0xbc1bc5e0,0xbc03d57a,0xbc043486,0xbbae2a22,0xbb47b451,0x3a72319a,0x3a89e2e4,0x3abd0ec6,0x3ae04202,0xba5b5481,0xb9b36017,0xbaf13d18,0x3b21e504, -0x3b2ee090,0x3a78454c,0x3b63b44b,0x3ae57a96,0x3902b6f6,0xba613a38,0xba8250a5,0x3b4694ec,0xbadce9e4,0x3b14e47c,0xbab9d60b,0x3b466c55,0xba293b35,0xbaf4789b,0xbc6dbc98,0xbca06e26,0xbc926e80,0xbc8aefd4,0xbc73288d,0xbc7f67b3,0xbc871dcf,0xbc914887,0xbc98181c,0xbc75db82,0xbc600cff, -0xbc585c3e,0xbc0844ae,0xbac3846a,0x3b922704,0x3c061fcd,0x3bd71a36,0x3bac2c88,0x3b2d58a0,0x3b4eb472,0x3a6db9f8,0x3b0cd8b7,0x3ba92621,0x3c073412,0x3bb9359d,0x3b7c0235,0x3b17ad4f,0xba95e428,0x3a1c88bc,0x3c27442b,0x3b853b7d,0xbc20c551,0xbc0a09a5,0xbb1210f6,0x3ac87c41,0x3c2ffe7e, -0xbbb3aa33,0xbc58dec9,0xbc80eb3a,0xbc6459fa,0xbc352331,0xbc3eeed0,0x3bbc569e,0x3c26a8eb,0x3b964749,0x3b0e9f25,0x3a78f601,0x3b0ca2bd,0xbb44e51c,0xbbdc849b,0xbbda2e80,0xba05ed96,0x3a86e527,0x3b54e112,0x3ba52bb6,0x3bcf4bb2,0x3ba3485f,0x3b1d62e3,0x3a0a19b4,0xbaf69f8f,0x3b638a1e, -0x3c218c1a,0x3c1af9a3,0x3bb5c6e4,0xbb17f0ba,0xbc5a554c,0xbc5f0fab,0x3b7c7432,0xbc5eded9,0xbc1c8613,0xbc4e551a,0xbc4f831d,0xbc821e5f,0xbc81a35b,0xbc810352,0xbb4f4d68,0x3a350f07,0xbba19879,0x3b8c9858,0x3b91bb89,0xbaa08403,0xbbc0bc8f,0xbc382210,0xbc8a59f3,0xbc014c29,0xbb1b198e, -0xba8e2169,0x3ba40197,0x3ba94397,0x3b833411,0x3b942ef0,0x3b11b002,0x3b35ee38,0x3abacffc,0x3b16c317,0x3ba72631,0x3b52021c,0xb93b8fad,0xbb856b42,0xbac08238,0x39ac4c9b,0xbae22b8d,0x3bddd714,0xbb1a2910,0xbbabffc4,0xbbe81471,0xbc5b0e43,0xbcf3c37c,0xbd036505,0xbcf40cf7,0xbca8da4e, -0xbbe4b952,0xbacf0c79,0xbba66af5,0xbc3b7f4a,0xbc9334a7,0xbca5b337,0xbc428e83,0xbb6f84cc,0x3aa5b6eb,0x3bc300e3,0x3bb8e4c2,0xbb3bf248,0xbb549828,0xbaa77599,0x38a54559,0x3b0e6805,0x3a766d2b,0x3ada26a4,0x3aed73a9,0x3a84bf9c,0x39672c76,0xbafe3184,0xba900636,0x3a64a038,0xbbfd9927, -0xbb55b344,0x39c14df3,0xbb1e549c,0xbab3b7b4,0xbbec9788,0xbc79e66f,0xbcc8a32b,0xbd1de1a5,0xbce91f42,0xbcb382e8,0xbc6f4da3,0xbc719776,0xbc71aab0,0xbc7e8cd9,0xbc11c532,0xbbb82b3b,0xbbaf1103,0xbb8e41fc,0xbba26e86,0xbb8b4713,0xbb2520e3,0x3a1215df,0x3a784096,0x3baecd09,0x3b96e7e4, -0x3b8c3830,0x3b98bef7,0x3b49a051,0x3b2b03f2,0x3aac4f74,0x39fe02ca,0x3b144c5d,0x3b118ad6,0x3a6095a3,0x3b3d44da,0xbb296448,0xbbb21fe1,0xbb6d7522,0xba3b889a,0xbc71dc6c,0xbcb83dca,0xbd044bc7,0xbd09c0e8,0xbd145820,0xbd14e510,0xbd095ba2,0xbcd67502,0xbc82df17,0xbc53a58b,0xbc9969ee, -0xbc5cc2f0,0xbc2fd22d,0xbc164b6b,0xbb8f2ad3,0xb9de1c7e,0x3b353a8d,0x3ba19502,0x3b614bbd,0xbacfe4de,0x3ab8e3ad,0x3ab29261,0x3b5fe906,0x3b1f079e,0x3b089870,0x3b3ee9de,0xb787d249,0xbb371dce,0xbbc96c20,0xbbfbb806,0xbc0f5df3,0xbc1fb60d,0xbc48a53d,0xbc721d5b,0xbc842264,0xbcc0089f, -0xbc4b4d4b,0xbcdcfe1c,0xbcf59733,0xbcbf8728,0xbc731e04,0xbbea492b,0xbb8ec7f5,0xbbfa132a,0xbc120f7b,0xbbff3b3b,0xbb304d30,0xbbc1cd26,0xbbf59a4d,0xbbfa3d56,0xbbdb4597,0xbb93ca18,0xba801f46,0x3ab5e777,0x3b393db9,0x3ae58bb6,0x3984fa45,0xb91b64c9,0x39b913c8,0x39ad39c4,0x3b1099e4, -0x3b87fd35,0x3b981827,0x3b6f71b6,0xb849ac79,0xbacc8837,0xbafc6411,0xbb282740,0x3ac906cb,0xbaf94144,0xbbf31d33,0xbc81e63f,0xbb87e208,0xbbeae488,0xbc21830e,0xbc566a61,0xbc8d0c2c,0xbc9aa887,0xbca27475,0xbca6f1c8,0xbc8f1e5b,0xbc81d0b8,0xbc627026,0xbc5098cf,0xbc30c6ce,0xbc1b07d4, -0xbc07a203,0xbbf0ebcf,0xbbcfe18e,0xbbc7d3bd,0xbbad39fc,0xbb9d2724,0xbb5ed8b8,0xbaad0c9d,0x38a87015,0x3a957100,0x3b47d6d8,0x3b72a1df,0x3bc3fad2,0x3bb8317e,0x3c045dd4,0x3bdd2704,0x3bd306fd,0x3b9aecd8,0x3b50cc26,0x3b3d4357,0x3b5d8f3a,0xba989557,0x3ace8e53,0xbba2e164,0xbbca9ef4, -0xbc080eb9,0xbc21689d,0xbc3efaa4,0xbc6163f9,0xbc88714c,0xbc7e74ef,0xbc702abe,0xbc63005e,0xbc5293eb,0xbc4b9349,0xbc4acbdf,0xbc3bc09a,0xbc2d0f4d,0xbc1b8833,0xbc0e2c4a,0xbbec79bd,0xbbf73f36,0xbbcd0ff7,0xbbde554c,0xbbf4ee5c,0xbb9f5cad,0xbb9ad0fa,0xbbb20596,0xbb9f2e26,0xbbb0042c, -0xbb81b214,0xbb7b0de5,0xbb187ac7,0xba72afd3,0xbac7226e,0xba90097e,0xbb15c149,0xbb70e6b6,0xbc260bcc,0xbc0ddb85,0xbc0e1301,0xbc20119d,0xbc2aa343,0xbc39efff,0xbc448a4c,0xbc550b97,0xbc48bc4f,0xbc456c9a,0xbc410822,0xbc3e9c53,0xbc397987,0xbc33f7e7,0xbc2d4ece,0xbc2857b4,0xbc22ab00, -0xbc1eb8a9,0xbc169d08,0xbc0dcdd0,0xbc361751,0xbc117f06,0xba49d527,0xbc37efad,0xbc0b6f35,0x3a3bcde9,0x39c24ead,0x39929095,0xb7b2afb4,0xb988b4d2,0xb9fea9f6,0xb9da402b,0xbbe59b7f,0xbc27c5f0,0x3a2a1b89,0xbbe052db,0xbc44e0eb,0x3c3a2c97,0x3c175382,0x3c4b069c,0x3c23b6ce,0x3c327565, -0x3c1e150d,0x3c3fc9ea,0x3c475977,0x3c42f38a,0x3c40feae,0x3c3c337d,0x3c356595,0x3c328620,0x3c320a47,0x3c342882,0x3c39ec62,0x3c3b79dd,0x3c38f883,0x3c39e718,0x3c28bbff,0x3c4c6f8f,0x3c159e40,0x3b09fdd7,0xbc35808a,0x3c3099d0,0x3b251e4c,0xbc291d8a,0xbc18da03,0xbc1317d9,0xbc087637, -0xbc06b585,0xbc0657f9,0xbc0421b9,0x3b3ead0a,0x3c400ced,0xbc21e293,0x3ad01d92,0xb9821c66,0x3c5bc19c,0x3c2cf798,0x3c3019f1,0x3c0b28fb,0x3c5b62bc,0x3c773fdf,0x3c72ef15,0x3c763f39,0x3c6cedc7,0x3c5828ff,0x3c48b5e0,0x3c48091a,0x3c50cef1,0x3c68302d,0x3c6f93aa,0x3c68baa4,0x3c62af56, -0x3c527a97,0x3c5ddc26,0x397831df,0x3c0b57f8,0x3c1704a8,0x3bb2b36e,0x3b90827b,0x3c01de1d,0x3c1cc84c,0x3c3c2d12,0x3c0b3aa6,0x3c32f0b2,0x3c1dd8d4,0x3bc22733,0x3be77226,0x3b8c6b34,0x3be64377,0x3c396d6a,0x3c0970e3,0x3c33e4b6,0x3c4b02d6,0x3c4aa48f,0x3bf091e4,0x3c87b4ab,0x3ca1fa39, -0x3c9b7184,0x3c9bf30a,0x3c8dbf24,0x3c80d72e,0x3c64f40b,0x3c5dcb5b,0x3c67f3f3,0x3c86073e,0x3c8d4b10,0x3c860e46,0x3c7af32d,0x3c759b4d,0x3c393c47,0x3c04d27e,0x3bfa83ce,0x3bf530af,0x3bc26222,0x3b5ca0fd,0x3b9da5c4,0x3ba758f3,0x3c14edc0,0x3bb89b3c,0x3be183d2,0x3b9fe6f3,0x3b90f6f6, -0x3b582bd7,0x3b8309b4,0x3bc9833a,0x3c06fcff,0x3c19cefb,0x3c399474,0x3c1fb8c5,0x3c02a169,0x3aa859eb,0x3c71acf1,0x3caf518d,0x3cb82378,0x3cbdbfc1,0x3cbc19b7,0x3c99c0f1,0x3c721b1f,0x3c6a0059,0x3c83e560,0x3cb0224c,0x3cb9af48,0x3cad30c3,0x3c9fb08e,0x3c8eafe1,0x3c7ad8f2,0x3c102cf0, -0x3c259928,0x3bd2c706,0x3bc5ed72,0x3b9a5bb4,0x3a815dce,0x3b813237,0x3ba93c24,0x3be8fb07,0x3bcdcbd9,0x3b8b15f0,0x3a9e6cc9,0x3a430914,0x3b885bb4,0x3c1eb772,0x3c50a417,0x3ac2ccad,0x3c87685e,0x3cd27f63,0x3cf25cb9,0x3d0692c5,0x3ce2d8c0,0x3cd05300,0x3cdcd364,0x3c8ca09c,0x3c494342, -0x3c1ca87b,0x3ca4e963,0x3c9f5cb4,0x3bd5f507,0x3c077c8a,0x3c181be7,0x3c4d69cd,0x3c4fa263,0x3c631e94,0x3c1fa120,0x3b422f57,0x3bddc839,0x3bee37cd,0x3bfa7f34,0x3c01525c,0x3bbe4862,0x3b35a716,0x3a8199a3,0xba8b8e1b,0x3bdafc38,0x3c482d26,0x3c2caff6,0x3be71245,0x39f3599b,0xbc0ce0e4, -0xbb7b3c25,0x3c74b4f7,0xbbe1b52a,0xbbc0577d,0xbba23620,0xbc1cd924,0xbb07af83,0xbb4e0a3e,0xbc5751f2,0x3baeb271,0x3c114029,0xbab73fff,0x3ba65e23,0x3bee201e,0x3c274709,0x3c4a79b0,0x3c81c415,0x3cab9253,0x3ca1d0a2,0x3c8ae7d3,0x3bd885d5,0x3b98b2f2,0x3bcd6781,0x3be65567,0x3c0b755c, -0x3bbe2854,0x3b74cdd7,0x3ae9e1a9,0x3b3f46b0,0x3bd7f5f9,0x3b8d3285,0x3a4de0c9,0xbb2419a5,0x3a8ad7ad,0x3bdc6bee,0x3b4ce675,0x3ca95aac,0xbb67d264,0xba098abe,0x3867e5af,0x3c01b0a3,0x3cef4ed8,0x3d065cd7,0x3d23fbbf,0x3d2f16cc,0x3d08877b,0x3cbd7fb2,0x3c830694,0x3cc87023,0x3cd21541, -0x3cba504d,0x3ca11d83,0x3c63baa5,0x3b99f261,0x3c0176bf,0x3c170c66,0x3bc02a96,0x3ba0a0b7,0x3b4f283b,0x3b110aee,0x3ba290cf,0x3b1c1d97,0x3b23830e,0x3b3e112e,0x3b0b551f,0x3abfe6e4,0xb9ef1f3c,0x3a8554e5,0x3b4ba347,0xbb770fb3,0x39a1bd16,0x3b24d3a7,0xbaf4ff70,0x3a781236,0xba8eb5c0, -0x3c7c1a21,0x3cde3b38,0x3d382b2d,0x3d16290d,0x3cc69304,0x3b87eecc,0x3a3afdb3,0xba56b2d7,0xbb0b5fe2,0x3ba6d238,0x3c054d75,0x3be5b681,0x3c3d54c5,0x3c6ee955,0x3c832cc9,0x3c71dbba,0x3c2d9573,0x3baec321,0x3b84359f,0x3bc5ebe9,0x3bbcda30,0x3bc5e136,0x3b90327d,0x3b616863,0x3ac23a50, -0x3abfb108,0x3b3b8f0e,0x3b17c5ef,0x3a8a6c3b,0x3b503887,0xba9b16b6,0x39a7dd61,0xbaef089d,0x3b343c09,0xbc7ecbf0,0x3be2ca11,0x3cd34c68,0x3cbd9de0,0x3c99a741,0x3c8620a7,0x3c7fd8f5,0x3c6c3450,0x3c5fb1ee,0x3c5222a7,0x3c5c1a9e,0x3c4909a0,0x3c3e34aa,0x3c262e3e,0x3be30bca,0x3bb476ad, -0x3bbd9ada,0x3bad3c2c,0x3bbad694,0x3b925d17,0x3bb1d7ff,0x3bdd58f8,0x3b7712d3,0x3b4b4cdb,0x3b4d62e3,0x3b9fee5c,0x39af5689,0xbb074ee0,0xbb6d7bd6,0xbb7ce37b,0xbb9ea259,0xbbce3322,0xbc101267,0xbc450186,0xbc9848e8,0xbc2558b3,0xbcc39c0c,0xbc4dbda5,0xbbe98bb6,0xbb94bcb5,0x3b2fc7f3, -0x3c15fd9d,0x3c385879,0x3c35f4f7,0x396ceb27,0xbb7e7121,0xbb0d4694,0xba0d5a92,0x3b13b2f6,0x3ba12814,0x3bd2b723,0x3c08265f,0x3bfecee3,0x3c180b05,0x3bee3efc,0x3a99fac5,0x3ac162f0,0x3b09c0e4,0x3b4558c3,0x3b73e35b,0x3b6f3728,0x3b9da02d,0x3bb378d8,0x3b79bb91,0xb99724ac,0xbaf5ca68, -0xbb20510f,0xbb2b136f,0x3a270140,0x3a54dff2,0xbbb4b936,0xbc0824a5,0x39e2ec3c,0xbaf1ea0c,0xbaff61f8,0xbb3d2c44,0xbb775b15,0xbb2c5975,0xba78309d,0x3b057da2,0x3b111119,0x3b100c18,0x3aa36d19,0xba51362b,0xbb31b7f3,0xbba1fcb7,0xbb675316,0xbb255a32,0xbac30b3f,0xba4d4877,0x3a3d6220, -0x3aaf1eba,0x39dd0138,0x39effcfa,0x3a8714b9,0x3b02ee5a,0x3b1ecf00,0x3b7b9603,0x3b81f389,0x3bcff11f,0x3bfbd883,0x3bcb6cdf,0x3b941773,0x3b6e7166,0x3b1a9bba,0x3b022fd0,0x3a74cbde,0x39f15a70,0xbba5866b,0x3a60c1e5,0xb8c6747a,0xb913ad70,0xb9e1c58d,0xba21cf43,0xbaaed058,0xbb0b123a, -0xbb87ee03,0xbbbf330e,0xbbed6a2e,0xbc0c6e22,0xbc20e234,0xbc3d2763,0xbc2894d7,0xbc1c0892,0xbc0ba74a,0xbbfa831d,0xbbee195c,0xbbadcbe5,0xbbd483e0,0xbb1c7f76,0xb9e7bced,0xba988a67,0x372fa665,0x3b3f1ff0,0x3b543807,0x3b6d4bd7,0x3b2462f8,0x3b77efc1,0x3b7b5a7d,0x3b4f96e2,0x3b3c6e2c, -0x3a26b46a,0x3a91aec7,0x3acbc756,0xbaef4ab6,0xba296b28,0xbb042575,0xbaf49121,0xbb0c0f13,0xbb1c5e47,0xbb255479,0xbb1c5062,0xbb422d4b,0xbb61860d,0xbb83b6e6,0xbb969498,0xbba668a1,0xbbbfe778,0xbbab44a4,0xbba0e83e,0xbb9768f0,0xbb864fb0,0xbb808bc8,0xbb4a31ae,0xbb45549a,0xbbcb6b07, -0xbc5a44c2,0xba517b5f,0xbba23a5b,0xbc55da8b,0xbc5089b3,0xbc466515,0xbc3c06de,0xbc34e32d,0xbc2ea583,0xbc22cfa0,0xbb90caf2,0x3853b21d,0xbc447fb4,0xbbba42e6,0xbb5b7145,0xbbaa6654,0x3a565656,0xbc0587c6,0xbb70f362,0xbb9769ba,0xbb8df033,0xbbb6b60d,0xbbc7cf5f,0xbbd09a99,0xbbd08a75, -0xbbcdb523,0xbbc1c803,0xbbc0ea8e,0xbbbde848,0xbbbc3818,0xbbbbe366,0xbbbb0a97,0xbbbbe1d9,0xbbb8aed3,0xbb90ef09,0xbbfb63c6,0x3aa78692,0x3c14b8d8,0x3c9f1397,0xbafe8c88,0x3bff90c1,0x3c919ce4,0x3c9750e3,0x3c96a578,0x3c88cadd,0x3c91bc54,0x3c90ca3a,0x3c87ed28,0x3bf24dd5,0xbb64cac6, -0x3c962c75,0x3c1cd33b,0x3c4fd9af,0xbbe2b17e,0xbb8aacd6,0xbb81edeb,0xbb8122d0,0xbbe014d0,0xbc06dd4f,0xbc0b5ac6,0xbc0f4f49,0xbc089c06,0xbbfa6ce7,0xbc009097,0xbc00e0a9,0xbc02f6de,0xbc02c204,0xbc00ec4d,0xbc03728a,0xbbde7ed0,0xbbcee9dc,0xbba3aef5,0x3c447309,0x392ccc82,0x3aabec85, -0x3aacd941,0x3b1856bb,0xbab88903,0xb9bdcfde,0xb9b82e62,0x3ad79e04,0xbabb289d,0xbb3032e1,0xba31a5bb,0xbaea8b6b,0x3b28649d,0x3b4ec980,0xbb524fa6,0x3b234306,0xbb8e4558,0xbb6f439f,0xbaf59aad,0xbb4718f0,0xbc01c796,0xbc32e22e,0xbc4a8f3b,0xbc5265d0,0xbc4a64f5,0xbc25e6e0,0xbc27c4a1, -0xbc21bbb7,0xbc2354d3,0xbc25b5df,0xbc1f757a,0xbc28bd77,0xbbf9429c,0xbc09d120,0xba466f9e,0x3b972d2c,0x3b3e12ac,0x3b6d0de7,0x383bb0ec,0x3b4d8fc0,0xbab180dd,0x3bcdfd7b,0x3ab24f9a,0x3b8b9053,0x3b16044f,0x3b907866,0x3a09db66,0x3a9a81cd,0x3a3ce464,0x3b8cd814,0xb9b6fc40,0x3bb64c10, -0xbb93ee38,0xbb3a8698,0xba69ff8a,0xbb16b1d3,0xbc14e752,0xbc559b98,0xbc6e40a0,0xbc7772a7,0xbc580e58,0xbc37b3ee,0xbc53c446,0xbc61f7eb,0xbc724c43,0xbc6ce0d3,0xbc6ac169,0xbc6f8fab,0xbc27d0ff,0xbc05b5a8,0x38328cf5,0x3c209b71,0x3b1ca395,0x3bffce5a,0x3a964ba8,0x3a758586,0xbae34923, -0x3b2d093b,0x3bce96dd,0x3b9f96a6,0x3bacca7c,0x3b08a8c5,0xb843e065,0xbab7bd0c,0x3a5d8815,0x3bc36555,0x3aefdde5,0x3a2f25bd,0xbbc9e42f,0xbbb88172,0xbb023186,0x3b041eef,0xbc066e5d,0xbc4d527c,0xbc6cbe99,0xbcacaff0,0xbcb14190,0xbca9b121,0xbc00b5cf,0xbab1545c,0xbabac987,0xbae217aa, -0xbb09ecbc,0xbbc731c3,0xbbdb2efe,0xbc3a2252,0xbbc2e1da,0x3b7f93c5,0xbafff375,0x3b617027,0x3b89f65f,0x3bd94fe0,0x3bdc7ef7,0x3adb53d7,0xb951b5fd,0xba510be2,0x3bd68747,0x3c3a26c4,0x3bfd1a2b,0x3b65f9b2,0xba562d69,0xbc11f1f7,0xbbd2db8a,0x3c406385,0xbcd3cf67,0xbc8f48b9,0xbc3dfcf1, -0xbc10d2d1,0xbc17bbff,0xbc3f50f5,0xbc92815e,0xba892204,0x3b4bd4b2,0xbbcbfffb,0x3b586041,0x3ba35af9,0x3b2db28c,0xbb6814b1,0xbc1367af,0xbc75bdeb,0xbbb583aa,0xbb5dad64,0x37de86ec,0x3bccdb0a,0x3ba139f8,0x3b96e339,0x3b9f92f8,0x3b2556df,0x3b3016d2,0x3ad01684,0x3b4a55dc,0x3bd3da5a, -0x3b37aec7,0xb7a14908,0xbb8c0720,0x3adabcb4,0x3ae400cd,0xbac975cd,0x3c475f80,0xbb276f7c,0xbbd24c7e,0xbb9a061c,0xbbfd6e08,0xbc92e33a,0xbccf8505,0xbcd4023c,0xbca90636,0xbc76d5dd,0xbc2e2425,0xbc39d3ac,0xbc80ebbc,0xbcabf537,0xbcb3c24e,0xbc91582b,0xbc10f1fe,0xba27b6f0,0x3b1dd3c5, -0xbab7fc48,0xbb8b76f4,0xbb1af8a8,0xbb5b42b4,0xb9e4d213,0x3a9b8e02,0x39c51137,0x3b12e1b5,0x3aca6b2e,0x39c336ec,0x3a54125f,0xba5cbdea,0x3a6cc0bd,0x3b3261d5,0xba65c231,0x3ad294d6,0x3b951f75,0xbb43fb9c,0x3b5a8ec2,0x3a095668,0xbc296d22,0xbc87328e,0xbcdab675,0xbcad7e0a,0xbc89a670, -0xbc526d8b,0xbc1bec4f,0xbc09d267,0xbc41ca10,0xbba5647c,0xbaeee3e3,0xbad4e23c,0xbb858e19,0xbbc3b5a6,0xbbd0d99e,0xbba2dadd,0xbb59f5e6,0xb8153888,0x3bc7c215,0x3b3c510d,0x3b1549d6,0x3b8d1f74,0x3b40c7db,0x3b006dc4,0x3a539c6f,0x3a1773e5,0x3ae13e8f,0x3a6d60bf,0xba0a69f9,0xbabf046d, -0xbab25053,0xbb38d3a8,0xba2ad76a,0x3b0a6a53,0xbaef837f,0xbc1634d8,0xbcc003cb,0xbcb8718b,0xbcd379ae,0xbcd640ad,0xbcca5bb9,0xbca4cfa3,0xbc809f3d,0xbc69754a,0xbc7e1e1b,0xbc1876c3,0xbbc5de60,0xbbb15863,0x391bb4c6,0x3b74a8e4,0x3b9135b9,0x3b96486b,0x3ac9eedc,0xbaded10d,0x3b8e0e73, -0x3acd9e1d,0x3adcb493,0x3b0ea7c5,0x3ad809e9,0x3b4006f5,0xba471714,0xbb8057a7,0xbb848963,0xbbab00d3,0xbba52ec6,0xbbde63af,0xbc0d27d8,0xbc40904b,0xbc76d910,0xbc81a29e,0xbc11820e,0xbcaec090,0xbcd01a9b,0xbc9d3e99,0xbc8200f5,0xbc4177af,0xbc5c3d54,0xbca7a700,0xbc410e0f,0xbbc3c8d9, -0xbb02bd9e,0xbbac7017,0xbbc7e6f9,0xbb9c8135,0xbb8aa743,0xbb4929a7,0xbb017341,0xb9510835,0x3abbbedf,0x3b3cab17,0x3b298643,0x3ac53839,0x3ad7fd6c,0x39bcc0d6,0x3a8069a2,0x3b410f66,0x3b023b68,0x3a52497b,0xbb7c54fd,0xbbc0f309,0xbbe23f50,0xbbfa4a45,0xbb6ce491,0xbbab95ae,0xbbecad16, -0xbc7c8fbc,0xbbe96652,0xbc4d4b43,0xbc710dd8,0xbc5fdced,0xbc6e3ba0,0xbc5ac694,0xbc3c2a13,0xbc27c9e1,0xbc1e11dc,0xbc2aee91,0xbc1ee654,0xbc07de33,0xbbd66ae2,0xbba313b5,0xbb83aac1,0xbb3ea241,0xbb116ee2,0xbb5aff9a,0xbbba74ff,0xbbb1294d,0xbadd09e3,0xbaa9dd15,0xba3af24c,0x38f8d21f, -0x3b159cc7,0x3b0dd86a,0x3b953bef,0x3b0f5190,0x3bdb0791,0x3b2b8629,0x3b3eb630,0xba3182f2,0xbae3be61,0xbb06430b,0xba986b65,0xbbc38120,0x3b78e8e2,0xbbb95886,0xbbef4258,0xbc182b5a,0xbc3b07f6,0xbc5eb290,0xbc841a48,0xbc9604ef,0xbc8a679d,0xbc775d72,0xbc639db5,0xbc4d2b35,0xbc3ca597, -0xbc2e547a,0xbc267b6d,0xbc1e6d86,0xbc1116f0,0xbc04011e,0xbbd7eef5,0xbbe56c9c,0xbb834def,0xbbc6a706,0xbbb6f5c6,0xbb5a0ebd,0xbb1e05d6,0xbb5948c0,0xbb780777,0xbb6ba3b7,0xbac032d0,0xbb582f07,0xbb3ba45b,0xba017f42,0xbacd5700,0xb968db0b,0xba9c7472,0xbb8c1009,0xbbdc61b7,0xbc2918ba, -0xbc1ab75f,0xbc2c9160,0xbc352db3,0xbc3f6098,0xbc47804f,0xbc5aa355,0xbc4c2dee,0xbc4848ba,0xbc41c889,0xbc3ccdec,0xbc3657a0,0xbc2d5cf0,0xbc29d22f,0xbc257bba,0xbc220cb5,0xbc1fb000,0xbc17b757,0xbc1db921,0xbbf83598,0xbb591f58,0x3b2e7d96,0xbc03cf60,0xbb2b8b2f,0x3b94d3ec,0x3b93c12b, -0x3b8b1496,0x3b56a6b3,0x3b7fd9c0,0x3b6fb66b,0x3b5bd94e,0xbb02865d,0xbbff62f4,0x3b55c4d9,0xbae413e8,0xbc482940,0x3c0c1692,0xb9b472de,0x3c37825f,0x3bf746e5,0x3c03b7c2,0x3bdd704c,0x3c0104eb,0x3c07aa7b,0x3c0fba9f,0x3c0b2a63,0x3c0aa47e,0x3c0ed580,0x3c08042f,0x3c0726d7,0x3c0861b4, -0x3c0dbc6b,0x3c0ea08e,0x3c0d053c,0x3c0a3512,0x3bf6ef10,0x3c306055,0xb9dd9a33,0xbbde6d5e,0xbc36db09,0x3b10adde,0xbbd3e964,0xbc3704e4,0xbc33cee5,0xbc31c905,0xbc1ec240,0xbc36fe03,0xbc3beb24,0xbc398234,0xbbc8bd0b,0x3b69d3dd,0xbc345734,0xbc01ad01,0xbc061638,0x3c09b96c,0x3c08f4a3, -0x3be1ab13,0x3b9a1ce8,0x3bdb1c53,0x3c004ade,0x3c1f1e37,0x3c1f51ab,0x3c272856,0x3c2fbcd9,0x3c1d4a57,0x3c1df178,0x3c22157b,0x3c33660e,0x3c325eb9,0x3c2ba363,0x3c147f78,0x3c1baa34,0x3bff03a8,0xbbc204d4,0x3b989010,0x3b5dbd17,0x3ae9d9d3,0x39f11437,0x3b5d479c,0x3bca8ba5,0x3bd09492, -0x3afe0e62,0x3bc49d41,0x3bda8689,0x3b0cf8a1,0x3b68ef2c,0xb82f4112,0x3a046b08,0x3bd4ed6f,0xb9d65390,0x3be1a09b,0x3c3aaa3a,0x3bf5e8b9,0x3b57af23,0x3bd4e90f,0x3c0b3839,0x3c4a1a65,0x3c38b422,0x3c3a3708,0x3c581187,0x3c29d660,0x3c28438e,0x3c260f54,0x3c4aa411,0x3c4cc2c7,0x3c43ec60, -0x3c20859d,0x3c36c77f,0x3ba08bb8,0x3a21478f,0x3b4005da,0x3b949977,0x3b3d1008,0xb9c5738f,0x3b4574ef,0x3b4bd4a2,0x3c1cc32f,0x3ab9547c,0x3bd0b3ed,0x3abbff79,0x3aee0aa0,0x3a42a028,0x3a300b24,0xb7fb0085,0x3b0f799f,0xb95e61d8,0x3bd053eb,0x3c0850e3,0x3b4f7554,0xbb3d531f,0x3a0cb6ff, -0x3b851eab,0x3c431352,0x3c453303,0x3c77f76d,0x3c8df8b3,0x3c46e2c7,0x3c392774,0x3c3d4c10,0x3c7cbfe0,0x3c7d2b8c,0x3c6560fb,0x3c2cadb1,0x3c3c422d,0x3be5a536,0x3af296fb,0x3c12053c,0x3ba2e37b,0x3ba70ca8,0x3b816d6a,0x3a87b393,0x3bab6c29,0x3bcb7710,0x3bd83bbc,0x3ba9df3d,0x3b85feea, -0x3a387a6c,0x3abb8922,0x3adedeb0,0x3bb0af85,0x3bcf7e08,0xbc1b13cf,0x3c2e39e5,0x3cc3c3ce,0x3cb84091,0x3cbb650a,0x3ca193de,0x3c9426f1,0x3c9f3f0a,0x3c39dfba,0x3c06092b,0x3c008021,0x3c893ec5,0x3c9d2390,0x3c5a73f9,0x3c2d9ee1,0x3c257b71,0x3c882a3b,0x3c5144b8,0x3c598730,0x3b2f8f86, -0xbb92af15,0x3ba38605,0x3b9ced06,0x3bbbb646,0x3bc0411b,0x3be52f97,0x3b15ef5a,0x39c02c35,0x3a56efce,0x3c09500c,0x3c446e0e,0x3bba4c9b,0x3b672198,0xbb83a5d1,0xbc4bb876,0xbc5132a4,0x3c21551e,0xbc7d241e,0xb9108281,0xbb0c81e5,0xbbcf0651,0xbbe31382,0xbc28fe47,0xbc8cdb0e,0x3b70f583, -0x3c1eb2b2,0xbab9303f,0x3b3666ec,0x3b885106,0x3be1b0b9,0x3c21db2e,0x3c45d1e2,0x3c71338f,0x3c440177,0x3c52e78d,0x3b59496a,0x3acf46f5,0x3b7c220c,0x3b5bd38c,0x3c18888f,0x3be6fc7a,0x3b756706,0x3b337e0f,0x3b8626ab,0x3bec7800,0x3b81fe80,0x3a3803cb,0xba92b023,0x3b054e18,0x3bef2349, -0xb94f289d,0x3cb54c7a,0xbbebb01e,0xbb837459,0x3ac6495a,0x3bbef489,0x3c8928ef,0x3c5d6234,0x3c9aba2e,0x3cc1eb45,0x3cda3b5c,0x3cc17bf1,0x3c74f19e,0x3cb48151,0x3ca316d9,0x3c64c0c4,0x3c40324d,0x3c07a2c6,0x3b8e4f46,0x3b950a8d,0x3bf46c0b,0x3ad0d6c2,0xb97bb481,0x39f7fed6,0xbb124b4a, -0x3a965bd3,0x3a3a5463,0x3b2ad136,0x3b366675,0x3b0a98ea,0x3b02ff09,0x3a3d685a,0x3b09ccb5,0x3b1e48a3,0xb9a0a2d9,0x3b67db46,0xb9ed229f,0xbb8ca32c,0x3b3cb88e,0x3b1f5ac7,0x3be247af,0x3c152708,0x3cc5891f,0x3c887142,0x3c20e06b,0x3b7a1f28,0xbb954083,0xbbf954ed,0xbc40c681,0xbb4df44b, -0x3ad1b9f8,0x3b34c99c,0x3bb1cd2d,0x3c074532,0x3c3143bb,0x3c1f7f1a,0x3c0baba5,0x3b562df3,0xb9aa0868,0x3b299403,0x3b361978,0x3b926d41,0x3b6133c0,0x3b0f7042,0x3add1ca5,0x3a4c06bd,0x3af56bd1,0x3a7cd8a4,0x39238ef5,0x3a0f915d,0xba3bd707,0x3aead7c8,0xb98c693e,0x3ba508d9,0xbc8e9ea1, -0xbbc24392,0x3c0f0f43,0x3c0001dc,0x3c032a87,0x3ba0a1d2,0x3bc89cf3,0x3c0ced6d,0x3b580dd8,0x3aaaed10,0x3a5d1a11,0x3adcf845,0x3b361b37,0x3b5c7460,0x3b8b8584,0x3b9e8694,0x3be495cd,0x3b39804e,0x3b51c2f2,0x3b536827,0x3ae588a7,0x3b954e8f,0x3aaf3f48,0x3b1208f5,0x3b2209e7,0x3b6dcfe4, -0xba65989c,0xbb12921a,0xbb61b6f9,0xbb21de7f,0xbb8d53ce,0xbbf63580,0xbc254b9c,0xbc676874,0xbcab91a2,0xbc6d59e6,0xbcd1cb8e,0xbc838163,0xbbe97c31,0xbbd666f2,0xba965b7f,0x3aa3247b,0x3ab31b8e,0xb9815f5d,0xb84a9e1b,0x39f87a1b,0x391eee0e,0x39a7edaf,0x3a3bd08d,0x3ade94e4,0x3b615b2d, -0x3ba7e573,0x3bf4ef3a,0x3bf7cefb,0x3bdb4d4f,0x3b1bfc82,0x3b39d2c9,0x3b3960e4,0xb9c8a610,0x3ab7da19,0x3afd1870,0x3b52fa78,0x3ae92056,0xb9c360b9,0xbafcbd57,0xbba5cd1c,0xbbd45836,0xbbdbb1b0,0xbb966baf,0xbb8cb4b9,0xbbe92e90,0xbc47f82c,0xbc205b9e,0xbc198126,0xbbc05f2b,0xbbb841ba, -0xbb588828,0xba99a919,0x3b1a3721,0x3bc53692,0x3b87ea19,0x3b1d6036,0x3a68904f,0x3a895073,0x3a8a3622,0x3a190d8a,0x3b0324d7,0x3b42038d,0x3b8d213d,0x3b23ba48,0x3b3a6874,0xba2f427f,0xbb5ecd9b,0xbaf060f7,0xba235ece,0x3a6da88b,0x3a5a9d52,0x3b50d913,0x3ade0bde,0x3b83ccab,0x3b17bdf2, -0x3b08d385,0xba805c15,0xbb0819fa,0xbb91b192,0xbbe24d0b,0xbc1db68d,0xbc147e87,0xbbf1b62c,0xbb00e09f,0xbb041652,0xbb253b7a,0xbb3558c8,0xbb438e12,0xbb70da2e,0xbb8144ea,0xbb878dae,0xbb789180,0xbb7eed35,0xbb8c9b92,0xbba43ae4,0xbbcc6f80,0xbbb601f3,0xbba6f85c,0xbb89b78c,0xbb6f0f37, -0xbb35e30d,0xbab5df45,0xbbc6562d,0xba8a302e,0xba953a9b,0xbad7d286,0xbaec3f80,0x3a636d85,0x3ac27eef,0x3a43e3ec,0xba951a3f,0x3aa3b5f1,0x3b0a24f3,0x3a8f1e48,0x3a56cf38,0xbaa8df53,0xbaa803ad,0x3617dce8,0xbbc9982f,0xb95c3abd,0xbaf2972d,0xbad30556,0xbad7c620,0xbae10159,0xbadb01d4, -0xbadd794e,0xbadedd22,0xbafbeba0,0xbb0a1087,0xbb15f794,0xbb17efe4,0xbb215f5b,0xbb0d99cb,0xbb0861a7,0xbb07b62c,0xbae5ab46,0xbb0108e4,0xb980fa58,0xbbbb8876,0xbc25cacc,0xbc690ee8,0xbb6f07d2,0xbc1eafce,0xbc688633,0xbc682853,0xbc5cd287,0xbc4adf6c,0xbc524992,0xbc4f6634,0xbc459116, -0xbc178434,0xbb6cb6c8,0xbc537b99,0xbc2aee39,0xbaef1dff,0xb9cd984d,0x3c0be48d,0xbb6bd79a,0x3905d046,0xb97403ac,0xb9cdc5ac,0xb949a84f,0xb997d84b,0xba1f860a,0xba42daae,0xba4eb575,0xba05eeac,0xba340dbe,0xba197821,0xb9b777da,0xba0be633,0xba221c36,0xba2edf56,0xba441c19,0xb9a2662c, -0xbb53d704,0x3c0e38ba,0x3c510b54,0x3c432bfa,0x3bcb11cc,0x3c4ac706,0x3c3ca6ef,0x3c54dd3e,0x3c57604d,0x3c3a14d1,0x3c59ef08,0x3c5ae3f9,0x3c4dfc66,0x3c470ae6,0x3ba5d86f,0x3c3bd5ea,0x3c5cc9e3,0x3c503b90,0xba6d015e,0xba96fdaf,0x39e2699c,0xb9d3f274,0x3a0963ca,0x3a0a5baa,0x339c28ca, -0xb9f06ff2,0xba0e577e,0x390d6826,0xba819c3a,0xbaa52a03,0xba687022,0xba94bab6,0xba640819,0xba784fec,0xb9d06edc,0xbae2c2a7,0x3a1c2bf3,0x3c3b7f96,0x3b572a01,0x3bca7907,0x3b859073,0x3ba4936f,0x3b6ec37f,0x3b878813,0x3bb7fae1,0x3be56344,0x3b735276,0x3aaa9fa9,0x3b377ed7,0x3b21cd1e, -0x3bb1146e,0x3bd4d9da,0x3aa452e9,0x3bf8f7c1,0x39e346ca,0xbaab1baf,0x3addacd9,0xbaaa7321,0x3ac6e6a1,0x3aed9177,0xb937dd2c,0xba6d0cee,0xbabc0f5b,0x39f61e40,0xba97253b,0xba3f14a9,0x39efa8d6,0xba070090,0xba226265,0xba9e1a48,0xba3fcb7e,0xbb5e1932,0x3b067f2a,0x3bf3900a,0x3ba8b91f, -0x3bb7429b,0x3b362dac,0x3bb8d77b,0x3af75e08,0x3c0a07c9,0x3b664a21,0x3be7759c,0x3b43d07d,0x3bc759a3,0x3b2ae914,0x3b6f81e8,0x3b5bcd8b,0x3bbab5c1,0x3b67cd7f,0x3bd99949,0xbae31bf3,0xbb514480,0x3a792909,0xbb317167,0x3afcd2a2,0x3b5de2aa,0x3af2bf6b,0x3a89b6d0,0x3ab513a8,0x3b4e53ba, -0xba567d06,0xbb00a491,0xbaada368,0xbab2a123,0xba6696c4,0xbabd5e1a,0xba636481,0xbb82ba91,0x3a934ecf,0x3c09b9e2,0x3aec857d,0x3c14d823,0x3b134464,0x3a431306,0xbaee1bbb,0x3b833fdd,0x3be04736,0x3b29af0e,0x3b96c643,0x3acbf610,0xba279e0d,0xb7ad4384,0x3b29686c,0x3b86bda2,0x3b452726, -0x3c1ee111,0x3bcabd2d,0x3b3342d4,0x3b9c14ea,0x3bc07bc4,0x3ba22de8,0x3b8b8665,0x3b1ce074,0xbc1d038a,0xbc75345b,0xbc8646d7,0xbc217ccc,0xbb56c056,0x3aac3cd5,0x3a78126b,0x39fe62d6,0xbb8dad49,0xbac1d722,0xbb5f81c2,0x3b0b7980,0x3bd92846,0xba14669a,0x3b904e82,0x3b83cb47,0x3bcfa66f, -0x3bfb6e82,0x3ad83cf0,0xb84c63e9,0x3ac7a5d8,0x3c1a6676,0x3c4175ca,0x3bb79300,0x3b61d0fc,0x3a601d28,0xbbdf012c,0x3a061bb9,0x3c70b177,0xbcd336de,0xbc82adbc,0xbbb8711e,0xbb9a8e88,0xbaf6fb39,0xbb167837,0xbbe66dfb,0x3ba934b8,0x3bf1dba6,0xbb450dd6,0x3b86a805,0x3bc4fe73,0x3bd67d8c, -0x3b7404de,0x3b21c80f,0x3b184f86,0x3bb0ab1b,0x3b2c62b6,0x3b85f594,0x3bce776c,0x3b94731f,0x3b9e9c14,0x3bc88c85,0x3b8ec5ae,0x3b4bbc10,0x3b395347,0x3b909dca,0x3be68450,0x3b226d5a,0x3a43f42b,0xbab3d405,0x3b7e3317,0x3b976d31,0x3a441484,0x3c83b68d,0xbb89e620,0xbbbdb5e8,0x3b148b4c, -0x3bb0a842,0x3c1b0664,0x3b542ad7,0x3adca286,0x3a3e3817,0xbb0dc00e,0xbb1148a2,0xbb911826,0xbb2cbf4f,0xbba77e6a,0xbc024965,0xbc00aef5,0xbb8e3247,0x3a9247e8,0x3a810453,0xbb63cc0b,0xbae35147,0x3a0f6f9c,0xbb2b16bf,0xba49122b,0x3a289fc8,0x3a2319df,0x3b332fda,0x3b004846,0x3a60ecd5, -0x3ad54cd0,0x3a914fbc,0x3b2409af,0x3b2e4d34,0x3b807c9e,0x3b80725d,0x3b780b1c,0xbb8f5f31,0x3be16987,0x3bfb2991,0x3b949396,0x3be7f1fb,0x3bfe9788,0x3ba64f28,0x3ad4fec9,0xbba016a5,0xba11d5b4,0x3981aaf9,0xbb74c9cb,0x3a58f357,0x3b48abc9,0x3b3e9932,0x3aa0934e,0x3aaa9fce,0x3ae1aeaf, -0x3aa5d432,0xb93ef191,0x3ac75c17,0x3b958587,0x3b03bb7d,0x3abbaa8b,0x3b791ed2,0x3b4372a7,0x3ae7bafe,0x3a68ff36,0x3aa471e0,0x3abdfe16,0x396506ea,0xba7d3a83,0xbb59e1d4,0xba199480,0xb90bcea2,0x3a20cfad,0x3b659935,0xb990f976,0x3aa6114c,0xba1473a7,0x3ad3b651,0xbb1886f3,0xbaf22ea9, -0xbb15ddf0,0xbb099ec1,0xbba5b316,0xbb9f9f52,0xb9a8bc28,0x39e2cd17,0x3a83e3e3,0x3b02eb2e,0x3b73f626,0x3b8dba90,0x3b832210,0x3b12a45e,0x39a188f1,0x3ab28c66,0x3bb472cd,0x3b0e1382,0x3975bd73,0x3af3ded7,0x3ac1549a,0x3b126517,0xba288a73,0xbb4b97ce,0xba8f4f05,0xbb0a3678,0xbb18def0, -0xbb9afc5a,0xbc098cd9,0xbc427a3a,0xbc7a38c3,0xbc05880c,0xbbd0709f,0xbc109b39,0xbc3ea82b,0xbc1e5614,0xbc29a403,0xbc5a20c3,0xbc80c8d6,0xbc800199,0xbc0d2341,0xbb9c2881,0xbb987c97,0xbb67ed5a,0xbae737d4,0xb7dccd92,0x3afeab52,0x3b12f5c6,0x3b41638e,0x3ab6b78b,0x3aac2546,0x3b4e49b6, -0x3b740fd8,0x3b5b252c,0x3b69d143,0x3b09cc7d,0x3a82752d,0x3b0b123d,0xba83a313,0xbb205435,0xbbb7d1e1,0xbbeba7c5,0xbc039979,0xbc06dccb,0xbbb83903,0xbb8e7bbc,0xbb41db70,0xbbfe7aff,0xbc0384f0,0xbc5d03be,0xbc67a157,0xbc309594,0xbc130a00,0xbbb135ee,0xbb05977c,0x399aa092,0xb9dbe19a, -0xbaa32a8d,0xbab82ce4,0xba630577,0xba1ccb00,0xb8712923,0x3a728e61,0x3b069f0f,0x3b4e5a2e,0x3aeb32bb,0xba289523,0xba4b5fc6,0x3a8cd2b6,0x3861acb0,0xba03a02d,0x39cb3a7b,0x3b0a3978,0x3b259c59,0x3b61efc1,0x3a8c0947,0x3b921f19,0x391f4b87,0x39af837f,0xbb36a8b9,0xbb843aba,0xbba778f2, -0xbbb27b96,0xbc0c266a,0x3aab2773,0xbb87c4a5,0xbbad4c44,0xbbc235c2,0xbbf1aa1f,0xbc0cc04c,0xbc24ebde,0xbc2db0c7,0xbc2349f2,0xbc138fab,0xbc0839ff,0xbbf8b2ba,0xbbdb3a63,0xbbbad6e2,0xbbbaac03,0xbbb9b20c,0xbbb3ddac,0xbba70bed,0xbb9a1f30,0xbb91283b,0xba5db3fe,0xbb098492,0xb9aaa5b6, -0x398ac8e7,0x3ae43640,0x3b082dea,0x3a3f8e11,0x3a934307,0x3b0486ef,0xb92f5db9,0xba8adb5f,0x39c08cdc,0xba473112,0xb795f5cf,0xb8f3839e,0xbb3aa999,0xba3fa0c1,0xbbbdf63f,0xbba2aecb,0xbbb09ade,0xbbb46f72,0xbbb7b0ce,0xbbbb425f,0xbbcd52f5,0xbbc2260f,0xbbbec8d8,0xbbb8ede1,0xbbb27be8, -0xbbad8a77,0xbba3fea7,0xbba4aac3,0xbba254a3,0xbba31549,0xbba0a493,0xbb9920c1,0xbbb7ea74,0xba727b7d,0x3ade203f,0x3a8060e1,0xba0bad7b,0x3b3c97b8,0x3b191324,0x3b26c829,0x3b1e44f4,0x3acd0768,0x3b229db9,0x3b193052,0x3afb43ca,0x3b02d23e,0xbaab6129,0x39d36015,0x3ae54b84,0xbba42bbc, -0x3a817055,0xbbd44b64,0x3b33c2c0,0x3a91cbfa,0x3a44b5d6,0x38da88ed,0xb99b1dac,0xb99240fb,0x39e81828,0x39825f5d,0x39e96054,0x3a9942d6,0x3a0ea852,0x39ff6c18,0x3a0ed02d,0x3a5ce174,0x3a763f45,0x3a82ddf7,0x3a4c2a6a,0x3a5106ab,0x3b165ccb,0xbbd0dc95,0xbbe1b584,0x394883ce,0xbbb0c48a, -0xbbe82ce4,0xba3174d8,0xba71c1cb,0xba87b8b6,0xba1e6233,0xbb10a5d1,0xbb2c0e4a,0xbb394dc2,0xbbe5fd07,0xbb9a2197,0xba152237,0xbbfb2105,0xbbc634ec,0xba67e9cd,0x3ad95c54,0xb9b94c4f,0xbad6ebd7,0xbb68c1d8,0xbb716704,0xba97d1be,0xba9adb70,0xb952c86a,0x3ac355dd,0xb841f999,0xb975dec5, -0xb88f2283,0x3a10d131,0x3a0bde09,0x3a047601,0xba00c3cd,0x3a7a7404,0xba9657b5,0xbb6d1c08,0xb8f7d780,0xbb074e6a,0xba8e2464,0xbac75a36,0xbabac713,0x3a9b7975,0x37bd2c76,0xbb3306b4,0xb9f04c4c,0x3a6994e8,0xbab01aec,0xba547020,0xbaf6887d,0xbb3d747b,0xba452bab,0xbbaa780c,0xb867fa50, -0x3b8558b0,0xba0c76a2,0xbb3afaa7,0xbbd36412,0xbbeec134,0xbb12df3f,0xbb5ca650,0xbb029189,0x3b01a6b5,0xbae01f02,0xbadfb775,0xbaf79e6b,0xb876e9ef,0x38dda706,0x39a92cb2,0xba3eefcc,0x3a877574,0xbac62b23,0xbb549a2f,0xba385d0d,0x3a7ca9fa,0xb9e97a72,0xbaacf00b,0x3a47695f,0x3b428504, -0x3bdb1036,0xb8c541b0,0x3b8ed5bb,0x3992e9ee,0xb8574205,0xb98c7d46,0xba80735c,0xbb0e3ecc,0xbb2938d1,0xbbb104ad,0xba5ed535,0x3b47c752,0xbb0b35d0,0xbbcf3260,0xbc610434,0xbc750890,0xbbc0362a,0xbbbe9041,0xbaedaafb,0x3b93fb7d,0xbaf0293a,0xbb84c664,0xbb97ddd0,0xbb2d5dcb,0xbb043524, -0xbb0bd22c,0xbb6a4e20,0xb98b2f5d,0xbae5a3db,0xba8f0321,0x3b9b8add,0x3b8e9f30,0x3b4856d7,0x3b1e05a7,0x3a8d6437,0x3bb3c4cc,0x3be5e740,0x3ba55d4c,0x3b800a80,0x3b5a0618,0x3a5cd442,0x3abf9c89,0x3909a867,0x3b314f97,0xb982e535,0xbc176a94,0x3aefa4e8,0x3c014633,0x3b9035b4,0x3bd63cba, -0x3ba362c9,0x3b44777b,0xb8a6d459,0xbb76d5f5,0xbba8f3ce,0xbb8e0b07,0x3b0101ad,0x3c0b338d,0x3c7ab850,0x3c12c7a8,0x3bddab9a,0x3c2d6605,0x3bb45d2f,0x3b8db35d,0xbb59449f,0xbba4e8d0,0x3acdd8ab,0x3af64830,0x3b41248c,0x3b7dfce8,0x3bf0df75,0x3af3c5c6,0x397f8e20,0x3b55c5fe,0x3c198ded, -0x3c2d32ca,0x3afdbf47,0x3ad6e815,0xbb941ced,0xbc4ef099,0xbc4b8c6e,0x3a47711e,0xbcb98f5b,0x3aae005d,0xb857425b,0xbb95e958,0xbc3148ab,0xbc54d424,0xbc551990,0x3b07af42,0x3bf535d4,0xba3a4d14,0x3ace5276,0x3b0635e4,0x3b312f03,0x3b4fbd9b,0x3acf902b,0xb9818da7,0xba825739,0x3b168ad7, -0xb602b3c8,0x3a7874fc,0x3af9e98b,0x3a42daff,0x3bee7313,0x3bcb0ce8,0x3b5c0cd9,0x3b7e415b,0x3baa8ec0,0x3bdfbad7,0x3b11513a,0x3a0b3897,0x3aa56e91,0x3b47f5ce,0x3b9cb625,0xbb3c41d7,0x3c5287ac,0xbbd77159,0xbbca13c0,0x3b35c82b,0x3aae91ee,0xbbbc95f4,0xbc5c505c,0xbc5cc26d,0xbc1fb8a4, -0x3b9155ce,0x3c27e34d,0x3ba5a447,0x3b9b0c45,0xba1d28d2,0xbbbdf772,0xbbb1f4a7,0xbb1a5a04,0x3b86ff29,0x3a999e2d,0x3b023640,0xbb71a55d,0xbb99f4c2,0xbb2f6940,0xbb935739,0xbb1c1bd9,0xb9d3d10b,0x3b3eda50,0x3b135f29,0x3ad94830,0x3af90506,0x3ad2dfa0,0x3b0af74d,0x3940a39a,0x3ae098a5, -0x3b9c79db,0xba9e3f48,0xbb89b587,0x3b878584,0x3b7ffb13,0xbb72513b,0xbc327d87,0xbc4eb889,0xbc3ed660,0xbc124314,0xbaf0cfd7,0xbbf678e8,0xbc22c39c,0xbc65b0aa,0xbc178b01,0xbbb8196c,0xbb222336,0xbb7b08b2,0xbb2d84fc,0x3ababee9,0x3a937f61,0x3b572db0,0x3aab8178,0xba92d714,0xb8e9fa1b, -0x3a04a83a,0x3b1a73ae,0x3b0139f2,0x3a997c08,0x3af2d326,0x3a412d37,0x3a79719b,0x39c278bd,0xb8d303f9,0xbac13807,0xba75df20,0xb85db589,0xba49f474,0x3b8268cf,0xbc68e617,0xbc8baf82,0xbc8d2651,0xbc83588e,0xbc4a3509,0xbc5ea9ab,0xbc41eee2,0xbbfe8f63,0xbc4c8740,0xbc50e9ba,0xbc473454, -0xbc20bd30,0xbbf185cb,0xbbb11572,0xb98e63d2,0x3b08570c,0x3b6af1cf,0xb8139a46,0xb9bda680,0x3982fd22,0xbaa96f15,0x39d8225e,0xb85f404c,0x3aad3d2b,0x3a964075,0x3a62c6ef,0xbab439ea,0xbb039e26,0xbb2ea612,0xbb18b4ea,0xbb9c5992,0xbc0cd3bb,0xbc48244b,0xbc83d142,0xbc9cdcce,0xbc933534, -0xbc78bb7c,0xbc86fc45,0xbc45c6bb,0xbc48594b,0xbc2dccda,0xbc4c2651,0xbc46ecd7,0xbc30b77a,0xbbb6b4fe,0xbb1f557a,0xbae8e324,0xbb0e503c,0xbb3a9db9,0xbb598038,0xbac9d1cb,0xb7845f3a,0x3b86de76,0x3b2fc140,0x3b4d3e4e,0x3b5dc8db,0x3b4d71d5,0x3b25173d,0xbaad542f,0xb7b86934,0x39ee603d, -0x3a9a3ade,0xbb21abc6,0xbb9a3224,0xbb9964fa,0xbbf19d4d,0xbc0ec225,0xbc16d0fd,0xbbf5287a,0xbbe5cb58,0xbbbc981c,0xbc45ccec,0xbc868a4a,0xbc7fab9f,0xbc45389b,0xbc3b0f7c,0xbc0e9d35,0xbbd12717,0xbb615018,0xba92d270,0xbb0a0e72,0xbb3b61a9,0xbb4d1315,0xba6cf36d,0x3a8fb745,0x3b366295, -0x3b812a17,0x3b9ce3d0,0x3bca413e,0x3b79c7c2,0x3b60915e,0xb943db25,0xbb33856f,0xbab0f800,0xba76adf3,0x39aec885,0x3a4201ed,0x3b2af682,0x3ab9174d,0x3aaac97b,0xba28bbf0,0xba86fcb9,0xbb5198c0,0xbb97bcd7,0xbbfbf27b,0xbc383a45,0xbc687687,0xbc71e787,0xbbb02ec1,0xbbbc50a1,0xbbac005e, -0xbbc39f90,0xbbcdb5cd,0xbbdb27bf,0xbbeacad0,0xbbee33b8,0xbbbdf42d,0xbb87a78f,0xbb45ad91,0xbb119c98,0xbaf57646,0xbae5d317,0xbb01218e,0xbb064f34,0xbaecfccf,0xbae4fb81,0xba82fe62,0xba93616d,0xbb8657b1,0xbac68bd8,0xbb23fabb,0xbad4ef28,0xbb097bcf,0xba950912,0xba99c660,0xbb23200d, -0xbb6704a2,0xbb1c915b,0xbac364dc,0xbaf5f7aa,0xbb1521f7,0xbb3bf8dd,0xbb6d232a,0xbb544df6,0xbbee0ae7,0xbb1665a9,0xbb3b5387,0xbb3cd1cd,0xbb356ddf,0xbb3696f9,0xbb326a32,0xbb429a86,0xbb209214,0xbb1474ae,0xbb0127fa,0xbae049c3,0xbaaff1d1,0xba5c15ca,0xba703eea,0xba80f7fe,0xba93b695, -0xba965fb8,0xbab561c9,0xb98f3e19,0xbbc07c0a,0xbbf4b6ea,0xbbacdcdb,0xbba25a13,0xbbf21f65,0xbb93f87c,0xbba1700f,0xbb9bdc7f,0xbb8eee16,0xbbaa3025,0xbbb464fc,0xbbb6a430,0xbbfa5559,0xbbc00b30,0xbba91dad,0xbc066a4b,0xbade05f9,0x3bc1d5cf,0x3c242fae,0x3ba94bfa,0x3ba8d742,0x3bb2dd98, -0x3b983d90,0x3bc88dfb,0x3bd4e911,0x3bd40fed,0x3bcdb94a,0x3bc9841b,0x3bcfdde9,0x3bb9a059,0x3bb7fd77,0x3bbf61a8,0x3bc2b9bc,0x3bc3557b,0x3bc412d5,0x3bbeed91,0x3bac8375,0x3ba40667,0x3c201895,0x3becc799,0xbb271231,0x3c1eb4d5,0x3c0029dc,0xbacff889,0xb97e15c2,0x383f8fe1,0xba18f23f, -0x3a0eea2c,0x3a1f94e0,0x39e896dc,0x3c032e8a,0x3c233117,0xbb032711,0x3bf6bfd8,0x3b91004a,0x3bea316c,0x3b8e86eb,0x3bb0b7c4,0x3b6c9352,0x3bedfc4c,0x3c0ecc4e,0x3c13327a,0x3c105825,0x3c09e098,0x3c10e6ae,0x3bd0b502,0x3bbb3ef3,0x3bd2d504,0x3be480a3,0x3bfb1546,0x3c00ba49,0x3bf5e0f3, -0x3bbc81b7,0x3be8f288,0x3b814d9d,0x3bb062a6,0x3bf18f2d,0x3b98a0b9,0x3ba0a1b7,0x3be45f83,0x3bfbda78,0x3c1c10c3,0x3c09dd00,0x3bfeba1d,0x3bc0aa11,0x3ba014b5,0x3bbc052b,0x3bab48f0,0x3bcf04c4,0x3bcd65d1,0x3c080088,0x3be625cb,0x3b9ed62b,0x3bb682f1,0x3aaf43c5,0x3c13c404,0x3c464d89, -0x3c469d4d,0x3c3f5827,0x3c2c97dc,0x3c40381e,0x3bf16ed4,0x3be64ffd,0x3c0ca7e5,0x3c176908,0x3c1dffe3,0x3c1e60df,0x3c05085d,0x3bc4f8d0,0x3bb19b41,0x3bd5c1d3,0x3badcd2d,0x3ba2285b,0x3b8c3858,0x3ba51782,0x3ba6a61a,0x3bfc83cf,0x3bef467b,0x3be4bd78,0x3b9da76e,0x3bb460d9,0x3b82f20d, -0x3b978598,0x3b9306c4,0x3b98c333,0x3bc9673c,0x3ba566d6,0x3b9e9acb,0x3af1ef2f,0x3b462a09,0xbb427f9e,0x3bfa8b70,0x3c60b5c4,0x3c83dc8d,0x3c846f89,0x3c7ea72e,0x3c88ecaf,0x3c1401a9,0x3bd88b48,0x3c0aa6e1,0x3c312bba,0x3c54cbc3,0x3c561d91,0x3c2b30f7,0x3bb8cfcf,0x3b941d01,0x3b89a512, -0x3b57afc5,0x3bd582ac,0x3b808a40,0x3b119a3b,0x3a1952ea,0x3bbea17f,0x3be77157,0x3b2ffe46,0x3b86804b,0x3b240947,0x39974566,0x3b045493,0x3b805e2b,0x3b620571,0x3badf20b,0x3c3f01a1,0x3c8544d8,0x3c4f6939,0x3c4ed828,0x3c5da908,0x3ca6b02c,0x3cb2e6e0,0x3c933e92,0x3c03ed5b,0x39be995b, -0xbb4791d9,0xbb2df506,0x3b013c38,0x3c17bb62,0x3bf0b68c,0x3bd99a26,0x3bab66af,0x3c008704,0x3c1317f8,0x3c1b7be0,0x3bbfe9ca,0x3b65d31c,0x3b9c0010,0x3b7fd5e9,0x3ba6d040,0x3bef7e21,0x3b014ffe,0x3a7ef480,0x3b97df46,0x3c364556,0x3c33092e,0x3b831f39,0x3b7726a5,0x3a8ab0c9,0xbbb499e5, -0x3b92804d,0x3bca49ce,0xbc8eabf3,0xbb8a33a7,0x3b4ac22a,0xbb5a819e,0x3af3e57b,0x3b2918a0,0xbaf93de0,0x3c0a62ea,0x3c2886c2,0x3ae93024,0x3b4de7b6,0x3ba3d2e3,0x3c1e1774,0x3c3e7d9b,0x3c72b929,0x3c9a9e4f,0x3c6799bf,0x3c15e981,0x3bc7f6d9,0x3b6d0973,0x3b559286,0x3b8a6093,0x3be86d2a, -0x3bd09d0c,0x3b65f065,0x3b913dd7,0x3bbd14f8,0x3be2526c,0x3afb0016,0x3abfc366,0x3b4133d5,0x3b9aa4ae,0x3bcf5cd6,0x3b6535f5,0x3c45fe72,0xbb45ed60,0xbaaae105,0x3c004835,0x3c6fe1e6,0x3ce6f2be,0x3cd0ae68,0x3cc87644,0x3ca8f1c0,0x3c67a7f5,0x3c2e2e85,0x3c1769f1,0x3c69780d,0x3c753d28, -0x3c4c9f3e,0x3bd55e8e,0x3b5672d2,0x3b9a240d,0x3aaaf615,0xba8591c5,0x3aae24b3,0x3b031ab4,0xb9e20622,0xba1e906c,0xb77f523f,0x3a8f080b,0x3b65eea8,0x3b283719,0x3aed3ad2,0x3b11c22f,0x3b1a336b,0x3b3ca7d6,0x3aacd5b8,0x3bb1987e,0x3bb9f9c2,0x3b39d878,0xbaf9dfb7,0x3bbd7952,0x3c07fd74, -0x3c8351d6,0x3cca782d,0x3d0b285f,0x3ce1d65e,0x3ca2c93e,0x3bd60376,0x3bc433f4,0x3ba21dce,0x3b3f59e8,0x3b6ecf40,0x3b8ec4e8,0x3b921b36,0x3bb2f3a9,0x3bfc3137,0x3c26c00c,0x3c0f8459,0x3bbcd527,0x3b7948f8,0x3ad71216,0x3a9e1d4c,0x3acf70ff,0x3b2e5af0,0x3b1ee2ed,0x3af32d93,0x3aef6370, -0x3b0bf89d,0x3ab10bff,0x3a6df99d,0x3982755c,0xbb112af4,0xba522857,0x3a4fc1d4,0xba82933b,0x3b36dd15,0xbbe795ce,0x3bd1baf9,0x3c856f96,0x3c947b01,0x3c9964a6,0x3c93e491,0x3c7dd3ca,0x3c35dd62,0x3b79a6f1,0x3b5ad050,0x3c2853e1,0x3bf6e52c,0x3bf1ba6f,0x3bf0f833,0x3bc0057c,0x3b876242, -0x3b27bc11,0x3a0df59f,0x3a15c2ae,0x3b6bcead,0x3b628798,0x3b25ad68,0x3a0c1e61,0x3acf7b29,0x3a8b4419,0x3a21d89c,0xba054503,0xbaaf1657,0x3961ea59,0xba019500,0xbb114708,0xbba866cb,0xbc1f5f88,0xbc52e1de,0xbc775552,0xbbbba76d,0xbc10c44f,0xbaace636,0xb9a29993,0xbb1d5a9b,0xbb984cd9, -0xbbfdf5d9,0xbbf27ca0,0xbae92823,0xbb88caa7,0xbb9837cb,0xbb919a8d,0xba9aadd4,0x3af33c47,0x3b668cdf,0x3bc34893,0x3bdcc906,0x3bcb9da2,0x3b7ebd27,0x3b1d6b78,0x3b2a8539,0x3b54dfc1,0x3b66934f,0x3b72fd62,0x3b5b8d55,0x3abc63ef,0x3a4686dc,0xbb50801b,0xbba6a8a6,0xbbc96785,0xbbe7666f, -0xbbfaca6f,0xbbfe5a8b,0xbbdc7989,0xbb69eec3,0xba8d84f3,0xbb060956,0xbc069e91,0xbc29230a,0xbc16e00e,0xbbe44be1,0xbb9e520d,0xba8c1194,0x3affb98f,0x3ba3dc72,0x3b930407,0x3b97edea,0x3b84e422,0x3b89c5dd,0x3b799a5d,0x3b65c37f,0x3b872814,0x3b9b911a,0x3bb6fe98,0x3bac400e,0x3b9d2d68, -0x3ba0fa4c,0x3b750c2c,0x3afe7edb,0x3a242dbe,0x3a8d3291,0x3ad3bc66,0x3b251678,0x3ae778ee,0x3a0d8c3f,0x3a95993f,0xba9e92f5,0xbac34a07,0xbb312093,0xbb9596a0,0xbbdb5626,0xbc0fc9bc,0xbc13e559,0xbb919aa2,0xbb36f717,0xbb371251,0xbaf53032,0xbad68e34,0xbaa25084,0xba696566,0x38fe3446, -0xb9e701ff,0xba4f64d7,0xba857734,0xbaadbbf3,0xbaa988ea,0xba85b9e5,0xbaa8fb16,0xbacfdff7,0xbaf593b7,0xbaf68d68,0xbb1ac07e,0xbad5fcc1,0xba5656eb,0x3a3ff34f,0x3b3176e7,0x3b02a5b8,0x3b4ee8af,0x3b9d8e77,0x3b649c73,0x3b6e3414,0x3b385c79,0x3af6b326,0x3a289cc7,0x39ad62c5,0xb9afcf3e, -0xba8557f6,0xba3682ee,0xbac4b91f,0x3b2807ce,0x375a648a,0x392503b0,0x3a14de2f,0x3a57d9ba,0x3a98badb,0x3aba5ddb,0x3ae5223c,0x3abf93a9,0x3ab5ab09,0x3aa7fb13,0x3aa0dba8,0x3a8edeb1,0x3a76ba2a,0x3a6c25cf,0x3a6e69af,0x3a58af9f,0x3a64c19e,0x3a4c78c8,0x39bd92da,0x3b574143,0x3b208806, -0xbb59635a,0x3b93643a,0x3b65f0e3,0xbb2cdcd3,0xbb21f346,0xbb1b146d,0xbb2a4e8b,0xbb0b1afe,0xbb109909,0xbb1f4903,0x3af7b82e,0x3b4fba4c,0xbb93366f,0x3a841e0f,0x3b217207,0xbba19ef5,0xbb9d5a51,0xbbaf9317,0xbb7e41fd,0xbb9f9c03,0xbb9cc3b8,0xbbc51617,0xbbce1c16,0xbbbe3ddf,0xbbc19422, -0xbbbade37,0xbba0f665,0xbbba4aea,0xbbbd8aca,0xbbbe1495,0xbbb3c3b8,0xbbada040,0xbba53f39,0xbba81103,0xbb8c90b0,0xbbb9a914,0xbb99c893,0x39c41220,0x3c3ff555,0xbbcd1a96,0xb9531aeb,0x3c3239a4,0x3c32013e,0x3c2f1b91,0x3c2134b8,0x3c1bd224,0x3c174d74,0x3c0cc242,0xb9bd3180,0xbbd844c5, -0x3c30f658,0x3a1b22d3,0x3b3afaac,0xbbd9df56,0xbb8a17fe,0xbbb05a7d,0xbbb7b08d,0xbc16abdc,0xbc24760f,0xbc084519,0xbc090595,0xbbfb3c68,0xbbc05302,0xbc0268fc,0xbc0dbd41,0xbc0dc1f5,0xbc0745cf,0xbbfc6155,0xbbe60994,0xbbdc3537,0xbbb6a1d0,0xbbcffbc4,0x3b6892aa,0xbb200935,0xbb5faaac, -0xbabaec64,0xba048f51,0xbb27bb36,0xba9ef6c1,0xbb16352f,0xbb0cc783,0xbb5659fa,0xbb3fd0fb,0xbb09ec6b,0xbb1c0c2f,0xb918af86,0xbacb1ac5,0xbb98b747,0xbb2bc7b2,0xbb566d29,0xbb4e5078,0xbbb639ed,0xbbc57e2f,0xbc4adb38,0xbc6de12a,0xbc3ac7ab,0xbc47b243,0xbc359905,0xbbea7641,0xbc39e430, -0xbc406b4b,0xbc4180bd,0xbc2ad4ef,0xbc1c3461,0xbc08a7c5,0xbbf23121,0xbbdecabc,0xbb801818,0xbac7c663,0xba9ed2f5,0xba8c3fbc,0xbaf554a3,0x3a300758,0x397c600b,0x3ba1cd86,0x3b671811,0x3b00ff62,0x3b282ad2,0x3aff6f29,0xb89343b6,0x3a6e4588,0xb918b61d,0xb9b75ecd,0xbb33640b,0xbb5bd31f, -0xbb8dea43,0xbb2411ff,0xbb978806,0xbbd411ea,0xbc919266,0xbcaa61d6,0xbc765e0e,0xbc74f0a0,0xbc50c1fa,0xbbcfcd69,0xbc5b72a3,0xbc8d0d35,0xbc9581ab,0xbc8e5ca9,0xbc747d42,0xbc4fb0db,0xbc31ab0b,0xbc04e5b3,0xbbb3a7bb,0x3a2263b8,0x37674a83,0x3b5cbdfb,0x3a6d0539,0x3a958726,0x3ab6d53b, -0x3bb95011,0x3bfde5a8,0x3b7241b3,0x3b60c973,0x3b28f32d,0x3a85a5f2,0x3ad598bd,0x3a82849a,0x3ad314ed,0xbb3a7c94,0x3a9d7c85,0xbb0f4b46,0xbbf077c2,0xbc1ff564,0xbbcd2c97,0xbb7b525b,0xbbb497ad,0xbc68af0b,0xbc68de98,0xbc832d32,0xbc8b0d8f,0xbc658e16,0xbba89293,0x3c2f549d,0x3b9bf715, -0x3b186fae,0x3a49a50c,0xbb0566bf,0xbb9400a4,0xbb7f8641,0x3a8a02fe,0xb91c3714,0x3a938e5f,0x3aa4c910,0x3b35bd26,0x3bdbde0a,0x3ac13dc4,0x3a72bb84,0x3bc31f3a,0x3c1e1393,0x3c0c3bf3,0x3ac5aaf7,0x3a37982b,0xbb48d655,0xbc0c0c57,0xbb55eb70,0xbc13c364,0xbcc520a9,0xbaece651,0x3a99834e, -0xbb867890,0xbc070a82,0xbc10ccdb,0xbbfa335e,0x3a4e8889,0x3b8e14a9,0x3a240e5a,0x3a726938,0x3a90ae77,0x3ad5ea19,0xba253001,0xbb8127e8,0xbc0daa79,0xbbf60472,0xbbb16075,0xba7d077e,0x3acf8fc3,0x3a804a3d,0x3a35e0d9,0x3b898494,0x3b8c9a10,0x3b35f867,0x3ba4b431,0x3bce0cd7,0x3bc76916, -0x3a881cef,0x3a8a7ec0,0x3b5b3cfe,0x3b5f38c1,0x3b0267b0,0x3a3f072c,0xbadacd12,0xb9db1b95,0xbb25e4e5,0x3b93000d,0xb97835d6,0xbc862c54,0xbcd6c3e6,0xbd021aef,0xbcf37824,0xbc932680,0xbc072af4,0xbb8efd50,0xbc346add,0xbc80afe6,0xbc90c78c,0xbc835b0c,0xbc1da605,0x3afcc140,0xbacd7f9c, -0xbb816aa6,0xbbc24839,0xbbb68ef3,0xbb8408ab,0xbb482446,0xbb5fed08,0xb9c90e04,0x3b5de03d,0x3ae7d868,0x3a91c736,0x3ad15ce2,0x3aeb9bab,0x3adfd83f,0xba2299c4,0x3b7a55d2,0x3bac22c7,0x3b01db61,0xb8c43d0f,0x3b3e936d,0x3b64b7a0,0xbc053f7a,0xbc8b3d2c,0xbcf1c2d3,0xbcb49e9b,0xbc618407, -0xbb271872,0xbba0a8f5,0xbbcba326,0xbc01446c,0xbc111940,0xbbfdb0a3,0xbbbe4d5a,0xbbfc3421,0xbc03f408,0xbbadead6,0xbb8ef2d5,0xbaaa303f,0x39a8524c,0x3a20a45d,0xbab41c67,0xb9d82f98,0x3a0204e1,0x3a1905fe,0x3a4c4e95,0x3b10de13,0x3adb3673,0x3a28b13b,0x3a815f38,0x39de6bc2,0xbb45f6df, -0xbafd370e,0xbb39f383,0xbb20e836,0x39f126a2,0xbbe24c9f,0xbc7c2038,0xbce5096b,0xbcceab5c,0xbca64516,0xbca93ec4,0xbcac9f70,0xbca21f9b,0xbca612e8,0xbc9799e8,0xbc887ddb,0xbc57a083,0xbc1bde51,0xbbf2803c,0xbb04f0cf,0x39bc228e,0x394da60d,0xb9fdcea1,0xbad83662,0xbabd12e8,0xba9950b6, -0xbafeede6,0xb947a522,0x3a31e46d,0xb95e78b8,0xbaf2da68,0xbab8991a,0xbae63c6e,0xbaf0d382,0xbb374f1a,0xbba4a37e,0xbc06af17,0xbc404a40,0xbc68fd69,0xbc4f419d,0xbc82b13c,0xbb5bbfc5,0xbc5886a4,0xbc7cede5,0xbc792055,0xbc8ee2ec,0xbc8f5823,0xbc89803e,0xbc8bbdac,0xbc1edc37,0xbbaa7513, -0xbb2a08ed,0xbb88e544,0xbbaab761,0xbbad2347,0xbb7f14fc,0xbb37c4af,0xbad9a943,0xbb0915f9,0xba028939,0x3b50a8df,0x3b2e2bde,0x3aeeae0f,0x3933caed,0x38557b3c,0xb9ae9398,0xbaafb5f0,0xbbb4bb84,0xbbeb0e84,0xbbe8a825,0xbc0b8f02,0xbc1bbad8,0xbc2af7ee,0xbc1b3e44,0xbc11584e,0xbba6cfbd, -0xbc1efdcf,0xbc6dc15f,0xbc77d29b,0xbc6c6ed6,0xbc665c5f,0xbc5da6a6,0xbc457235,0xbc2ff5a9,0xbc22c626,0xbc11d795,0xbc04bb56,0xbbd658c2,0xbb4b69b8,0x39360b0e,0x3b506cf4,0x3b3e43d9,0x3b43a246,0x3b54e728,0x3b121389,0x3a8f265d,0x398d8580,0x3a011fff,0x3a13b7dd,0x3956cabc,0x3940e702, -0x3a800fb0,0x3a93b826,0x3a990f59,0xbb036bb6,0xbb065ea1,0xbb57d424,0xbb3c0575,0xbb8a27ab,0xbbd53a65,0xbc15b599,0xbc2dcdbf,0xbc51d124,0xbb132f48,0xbc0ba440,0xbc035b7b,0xbc08b99d,0xbc0974e2,0xbc0ec2b8,0xbc109dba,0xbc0f9ded,0xbbdcb216,0xbb9aaf5a,0xbb4efa52,0xbadf6cb3,0xba17679a, -0x3a6f6ce4,0x39a1539b,0x38165dea,0xb963f6fb,0xb9bbffe9,0x395899a9,0xba784f47,0xba9bfd54,0xbb09eb3c,0xbb40f362,0xbab01bca,0xbae1885e,0xbb38e2ee,0xbb705937,0xbb929bf9,0xbb7dcda7,0xbba23443,0xbb9d322c,0xbb836a45,0xbb9af076,0xbb7695ef,0xbba21ad7,0xbbd2472c,0xbba807f8,0xbbb61ff1, -0xbb95504b,0xbb9ece75,0xbb9b0eca,0xbb9a1067,0xbb98f594,0xbba4dc23,0xbb8ad107,0xbb75b10c,0xbb4ced02,0xbb279469,0xbb020075,0xba9cc344,0xbabc639b,0xbabe5c4f,0xbac57db7,0xbae065fd,0xbae5d749,0xbae39d13,0xbb57ad30,0xba93cfad,0x3b995709,0xbb850acc,0xbaaf9f46,0x3bc45abd,0x3bb5deda, -0x3ba9be7d,0x3b9493a3,0x3b8713bd,0x3b683fb7,0x3b3eb155,0xbb1322a2,0xbbb9589a,0x3b68cf7b,0xbb0d0e89,0xbb5855f5,0x3bfce0e0,0x3b90b9d7,0x3c219a1d,0x3bd6784a,0x3be46b8e,0x3bbf5843,0x3bf15b1f,0x3c01be99,0x3c099db5,0x3c052f48,0x3c033f71,0x3c074fd8,0x3becc588,0x3be56b11,0x3be6447d, -0x3bf717ac,0x3bfed208,0x3c035e67,0x3c017b87,0x3be3fc0b,0x3c14c9d0,0x3b7f0eb9,0xbb1462ae,0xbc3d59eb,0x3bbb1c09,0xbab170cf,0xbc247f7b,0xbc1c3d47,0xbc18b9f9,0xbc0f0779,0xbc16c73a,0xbc184564,0xbc14ed1f,0xba616264,0x3bebe9a6,0xbc2d6acb,0xbb221538,0xbba39f88,0x3c1bfc0a,0x3bd9f25d, -0x3bc3eabd,0x3b804d3c,0x3be7dad9,0x3c10c465,0x3c2a5f74,0x3c2c6213,0x3c297f1d,0x3c310718,0x3c001b15,0x3be1d36c,0x3bef361d,0x3c0c32ba,0x3c1c51f1,0x3c29462e,0x3c1c8296,0x3c120a34,0x3c04cbb8,0xbb873ee9,0x3b871ff2,0x3b6bc5ec,0x3b144364,0x3b016eda,0x3bc08fd6,0x3beaf811,0x3c043667, -0x3ba01be1,0x3be8169d,0x3bdd4877,0x3b6d2d14,0x3baf2e2b,0x3b1feac6,0x3b233fc9,0x3be0e5fe,0x3b8c751c,0x3c1d5bc3,0x3c0a1da2,0x3bafc999,0x3acd605f,0x3bf4c024,0x3c317c7d,0x3c67b9bf,0x3c5d1395,0x3c4f6840,0x3c630702,0x3c020538,0x3bdc48d2,0x3bee5078,0x3c237fac,0x3c3989de,0x3c5098a5, -0x3c3056a6,0x3c319596,0x3babb5e4,0x3b111ca1,0x3b30a476,0x3ae1a85a,0x3b3a2205,0x3af5889f,0x3bbf528d,0x3baba23b,0x3c198b61,0x3b8f5f56,0x3bbf0684,0x3b53f5bb,0x3b557e14,0x3b6b504f,0x3b5c5e50,0x3ac78a76,0x3ba602c8,0x3a1b9426,0x3c0a0e93,0x3bbe1bb5,0x3b0a4d74,0xbb79fbfb,0x3b36669e, -0x3c12c994,0x3c84115d,0x3c89803d,0x3c8a7352,0x3c9abd92,0x3c1e0f27,0x3bb8f524,0x3bd42cbc,0x3c2b750f,0x3c6714e6,0x3c8589bf,0x3c597813,0x3c3546fa,0x3bae3d65,0xb98ef047,0x3b860b8e,0x3ac75724,0x3b80809b,0x3b68344f,0x3b6dd2b6,0x3bf70d1d,0x3bf8ba3f,0x3b95ee0b,0x3b850fa9,0x3b7f0c96, -0x3abeb6c2,0x3b87d822,0x3b99c57c,0x3b460843,0x3ba82bd2,0x3bfb7d2f,0x3c967bda,0x3c86aa06,0x3c5e348b,0x3c67c186,0x3cc8f695,0x3cd34c94,0x3c9a2d4c,0x3c82c625,0x3c14baa2,0x3b6e5cfc,0x3b0817d5,0x3bc17f70,0x3c71bbbd,0x3c40afb5,0x3c31c13f,0x3c5e56df,0x3c50a3f9,0x3c740285,0x3c2312e1, -0x3b301bf9,0x3be00c8b,0x3b98aaa6,0x3b67b6c3,0x3b508797,0x3bc545ed,0x3b014f21,0x3b10b830,0x3bff1722,0x3c2f3ede,0x3c0befec,0x3b46a012,0x3b05204e,0xbb134507,0xbbbaf548,0x3b6973bc,0xbc22a6c9,0xbc2a6bda,0x3bcb4c94,0x3c06110f,0xbb3e26cb,0x3aced447,0x3aba4342,0xbb2bb4ab,0x3bbe9cff, -0x3c0dd3f6,0x3bbcb38f,0x3b02dfdd,0x3b1b4ae6,0x3c00c912,0x3c575572,0x3c929a31,0x3cb68774,0x3c61c75c,0x3c289778,0x3b9fc3d3,0x39154012,0x3abb42fe,0x3b26db7d,0x3bcec90b,0x3bd7d7b0,0x3b5f9d8a,0x3bc3537c,0x3be7ffc4,0x3bcc8373,0x3b0f1618,0x3b15853d,0x3bc075d4,0x3b6c411c,0x3bd6b551, -0x3c000c28,0x3a97235c,0x3ae57dd2,0x3ba7d54f,0x3c3bedd9,0x3c80dc54,0x3cd9a0db,0x3cc48a6d,0x3cb95ef9,0x3cb04470,0x3c842b85,0x3c602c45,0x3c80db05,0x3ca24df9,0x3cb3f341,0x3c99f775,0x3c630e1a,0x3bfeab8d,0x3ba0ab4b,0x3a58549e,0x3adc5791,0x3b0bb6db,0x3a2b9a08,0x3a612f5c,0xba03d629, -0xba4fee6e,0x3a9b4ee3,0x3b7d246b,0x3b39724f,0x3b1e55bc,0x3b14331e,0x3b396f49,0x3b212ad3,0x3601f178,0x3b8d275d,0x3bbfa03a,0x3b0e8480,0x3b43b12a,0x3a89d3fe,0x3b8432ba,0x3c6741f4,0x3cb0be47,0x3d0b743c,0x3cedabcd,0x3cbfe246,0x3c7f05d0,0x3bde167d,0x3b4cd72a,0x3b8242af,0x3a8819c8, -0x3a9703ac,0x3add11e3,0x3bb30d8b,0x3c11996c,0x3c4cbf67,0x3c3a9514,0x3c142e0c,0x3b91a8cd,0xbaa7bd69,0x3941ead3,0x3ac68c2a,0x3a7eb775,0x3a8fa118,0x3abfb8c8,0x3b39017e,0x3b40f617,0x3ac0c242,0x3b07b607,0x3ac7fa87,0xba866de6,0xbae33112,0x39589c6c,0xbb413d3b,0x397ecc76,0xbc5c4673, -0x3b11e78d,0x3c83830f,0x3c8bb2cd,0x3cac32cf,0x3c96ab6b,0x3c72d5db,0x3c14fdef,0x3b853df2,0x3b7b26fa,0x3c0b41f1,0x3bc4f225,0x3bccdc8e,0x3bdebd08,0x3b8f938a,0x3b117845,0x3aa10c61,0xba09c691,0x3a75137e,0x3b73cd33,0x39f076cd,0x3b069d7f,0x3a1d2aa1,0x3a827d11,0x3a023bc6,0xbaaa7e30, -0xba61e8b7,0xb9f64880,0xba487b25,0xba6ad77a,0xbb72752d,0xbbd92c2d,0xbc268e38,0xbc4940f6,0xbc4f88f3,0xbbf7b2b5,0xbc4e4505,0xbb0c22e6,0x3b286bee,0xba646357,0xbb10d1ce,0xba5409d4,0x3ad0bf5d,0x3ba2f4ad,0x3a600bd7,0xbacc1bc4,0xbb1ed187,0xb74d32c5,0x3b0889a6,0x3b7f521b,0x3bbdbf81, -0x3bd82aa8,0x3ba05946,0x3b8d5226,0x3b4e9b61,0x3ae6b432,0x3b1a1337,0x3b3989e2,0x3b023b10,0x3b39f685,0x3a8d8511,0xbabec06c,0xbb997ecd,0xbbd2e922,0xbbb934ba,0xbbdbd5db,0xbbf9e538,0xbc07d600,0xbc10ed1f,0xbbcd9c21,0xbb92f82f,0xbb3c568d,0xbbfc6445,0xbbd202f8,0xbb8e094a,0xbb942238, -0xbb6718fa,0xbad89389,0xb8b8efa9,0x3b142436,0x3b1af4dd,0x3b586f30,0x3b62453e,0x3b940f29,0x3ba68895,0x3bb4549c,0x3b9cd1de,0x3b8e39fb,0x3b8b25dc,0x3b98147a,0x3bbac169,0x3bac8379,0x3b3bed96,0x3b19e5dd,0x3b094e3f,0x3abff49f,0x3a05ff92,0x3a8f0d13,0xba5c0d38,0xbaa5858d,0xbb6c4248, -0xbb4536e3,0xbb54eeb0,0xbb13871b,0xbb86a950,0xbbce5043,0xbc116738,0xbbf7b65c,0xbc1e293f,0xbb8c37dc,0xbb463b85,0xbab1a990,0x39af06c4,0x3afc0c21,0x3b6aea0c,0x3bb12286,0x3b9def79,0x3b8df369,0x3b80ec5e,0x3b5c6baf,0x3b3dd01b,0x3b347654,0x3b3013e9,0x3b2d381a,0x3b2103c3,0x3b19164c, -0x3affb2d1,0x3b356262,0xba2ceb93,0x3b13981e,0x3b294bf4,0x3a980f5f,0x3a609fee,0x3b169952,0x3ae69026,0x3ab77b29,0xb9c44895,0x39a6fc29,0xb9faa6c5,0xbaf88030,0xbb126dcc,0xbb7c6410,0xbb74d0c9,0xbb3eefb8,0x38cef84a,0x3adb3b7d,0x3aab9190,0x3b0b7e10,0x3b284319,0x3b4a1bda,0x3b66f454, -0x3b8c4054,0x3b8171b4,0x3b8118bc,0x3b7e00fe,0x3b7ce0b6,0x3b797fca,0x3b6db301,0x3b6cae3a,0x3b6aecd2,0x3b6865c1,0x3b6c3e04,0x3b571725,0x3b81e681,0x3b1d9818,0xba732172,0xbbda5f7c,0x3b5608a6,0xba80a5fc,0xbbe53199,0xbbe48f38,0xbbdb421d,0xbbcd0f20,0xbbd617b6,0xbbd763f4,0xbbd553e1, -0xbb22058b,0x3ace9d49,0xbc0172c8,0xbb694ee2,0x3b88ead3,0xbba52e8f,0x3af2798d,0xbbde4c82,0xbb82687c,0xbba1849c,0xbb9a3d91,0xbbb453f8,0xbbbb70e1,0xbbb55f76,0xbbba1e7c,0xbbb8ea51,0xbba88bae,0xbbc0efda,0xbbc5c1fe,0xbbc883b7,0xbbbf3fde,0xbbb6b3d3,0xbba816e1,0xbba5639f,0xbb88b51f, -0xbbe79122,0x3ad9c2bb,0x3bf36694,0x3c58867c,0xba89666e,0x3be5ef1f,0x3c5b2ce0,0x3c642517,0x3c6395f7,0x3c4a05fb,0x3c5bdacb,0x3c5b52d6,0x3c4de677,0x3be3c0d8,0xbae0f265,0x3c5569cb,0x3c0b81e1,0x3c1a6009,0xbba1ea2a,0xbba18592,0xbb9e263b,0xbba075b1,0xbbe1ca32,0xbbf359c3,0xbbdfda57, -0xbbe74c66,0xbbe5ad71,0xbbc3f095,0xbc059a1f,0xbc17153d,0xbc1a48db,0xbc1640b0,0xbc041b37,0xbbdaeace,0xbbb170be,0xbbb2bc75,0xbb993f6c,0x3c05fa90,0xbabc99f2,0xba58bdb6,0x3932bd56,0x3af0f9db,0x398ba260,0x398e3063,0x39cabd95,0x3b0ce50f,0xba84b0f0,0xbb1294d4,0xb980c356,0xb9b55e0d, -0x3b49758f,0x3b10c1da,0xbb45fa0f,0x3b84f6b9,0xba19ea4e,0xbba0f8f1,0xbb9e3853,0xbbb3391e,0xbc0b9325,0xbc1eb4ba,0xbc1038f8,0xbc1d627d,0xbc1d8d20,0xbbf21034,0xbc3820b4,0xbc47d265,0xbc47d398,0xbc3aab15,0xbc1fbe00,0xbbf6a472,0xbbb533c0,0xbbd46077,0xbade0a97,0x3b2bfeb2,0x3a0a3534, -0xba84bec1,0xba87183a,0x3b545178,0x3aede895,0x3be43189,0x3b26d4b3,0x3baca766,0x3b0f936a,0x3b92c8c8,0x3a930529,0x3b560543,0x3b25b234,0x3b46688e,0x3a9c0b19,0x3b18e813,0xbab9f106,0xbb8c0ed0,0xbb6999e7,0xbb9f6981,0xbc2e05ab,0xbc3ffe76,0xbc1f48d5,0xbc259ef8,0xbc265490,0xbbda2991, -0xbc522129,0xbc8ee1b1,0xbc99a23f,0xbc97a242,0xbc6faf17,0xbc277611,0xbbdc4900,0xbbdcdff1,0xbb53cedd,0x3b653fa8,0xbb275492,0x3af07674,0xb9716924,0x3a592f6f,0x3b137676,0x3bd2a20b,0x3c09cadd,0x3b55070d,0x3b78f197,0x3b1e1509,0x3a6e3f32,0x3b3aa006,0x3b83a605,0x3afdc85b,0xba4882c5, -0x3c740a62,0x3b71ed19,0xbc1c6272,0xbc2edbcb,0xbc0db3b7,0xbae73a4c,0xbb177a52,0xbc5abb17,0xbc4c3674,0xbc8b3b06,0xbcb66ae5,0xbcb0e656,0xbc5b2ee1,0x3b635d68,0x3b065918,0x3a77ae2b,0xbb8a3b8a,0xbb7092b6,0xbbbec0cb,0x3a66ecf7,0x3c018786,0x3a9af5de,0x3b4528c9,0x3aba3a4c,0x3b20e0df, -0x3bb68966,0x3a90f9f9,0x3b09dae0,0x3c10d5d7,0x3c1967de,0x3bd7111e,0x3b3792f5,0xb953edd4,0xbaea3135,0xbb2cd6c0,0x3c084831,0xbc8432ce,0xbca35a32,0xbbb9bba4,0x3b113cfe,0xbb365836,0xb9c47fe6,0xba2575aa,0xbb565820,0xb9f8a10b,0x3ac56e54,0x3b5bd655,0x3aefeabe,0x3abf6d0b,0x3aec2bd1, -0x3a3c18c4,0xba664b31,0xbb8f3f13,0xbb8142fd,0xbbaf2a45,0x3a8913c2,0x3b291103,0x3a88bd7b,0x3b01d3d6,0x3ae85d25,0x3b2845ef,0x3b16d10a,0x3bc210b2,0x3bea707a,0x3badf71a,0x3a9ba77f,0x3b09e493,0x3b937248,0x3b667c4f,0x3b2591b6,0x3c0a400b,0xbc4c64b9,0x3bff9c15,0x3bc0d88a,0x3c18bf05, -0x3b9fdf8f,0xbbcb89c4,0xbc67a905,0xbcb3803e,0xbcb63b80,0xbcbc53a9,0xbc88fa06,0xbbd66301,0xbc5768e1,0xbc64f61f,0xbc65cee7,0xbc4cdf56,0xbc037f0b,0x38c4f3ed,0xbb25af51,0xbbd62f74,0xbb7bf8b8,0xbb2a87ef,0xbb3cad72,0xb85b9ba1,0xbb0667f0,0x3a0870e8,0x3b6ccb20,0x3ae89fe3,0x3a8a90af, -0x3aadff1b,0x3b1bba25,0x3afb974a,0xb9ba9c2d,0x3ba08e65,0x3ba6ccb4,0x3bbe5b92,0x3bbd9ca7,0x3962f18c,0x3acff3e6,0xbb83ab92,0xbbc6a3b9,0xbc7b6d77,0xbc04a7b7,0xbb039c33,0x3b89f928,0x3b0b531d,0x3a33ba3b,0x3b3cbbf3,0xbb6bc70e,0xbba08ef8,0xbb798258,0xbb86a26c,0xbb9495d4,0xbb5634d9, -0xbb0bea15,0xba9a0c2c,0x3a9d33d2,0x3b193e02,0xba66d826,0xb70654f7,0xb9b3b6a4,0xb964d8e9,0x39d72c4c,0x3b15d751,0x3b450c10,0x3a9a8c9f,0x3af5e149,0x3a5e6665,0xbb6090c7,0xbb0c7c33,0xbb4d4760,0xbb521498,0xbb3a94b5,0xba0524f4,0xbba75fca,0xbc8074ce,0xbc4fc8b6,0xbc36f3ba,0xbc3cd40c, -0xbc7130ec,0xbc96759f,0xbc758932,0xbc47233e,0xbc09dbbd,0xbbcb98ea,0xbb9071fe,0xbb361617,0xba86c6f1,0xb9b6d802,0xbac4e3ff,0xba01ccec,0xbac612ff,0xba65772c,0x3a90fac5,0xbabf8fa7,0xb984312c,0x39c22c8b,0xba20eea0,0xbb4e764e,0xbab528aa,0xbb0556b9,0xbac0ae7f,0xbb3b3e89,0xbb886e60, -0xbbc62d74,0xbc0caa42,0xbc1e3691,0xbbd3e3b2,0xbc0f1e99,0x3b14d8b3,0xbbc562ac,0xbc38cda0,0xbc2ff535,0xbc62f907,0xbc5a921d,0xbc559ae8,0xbc669c47,0xbbf1f1df,0xbb99b6e2,0xbb861163,0xbb888841,0xbb6c85ed,0xbb057142,0xbab49645,0xbae09d41,0xbb64f710,0xbb4bba1d,0xbae40f75,0x3b13914a, -0x3b12edf7,0x3aee4ded,0x3b304d5c,0x3a810099,0xba50d7b2,0xbb56d1de,0xbbd35287,0xbbedca4a,0xbc007baf,0xbc09fdaf,0xbc1b3c41,0xbc31e661,0xbc2c7c4e,0xbc1ed386,0xbbcc0ead,0xbbccf4e2,0xbbfb1252,0xbc2641bf,0xbc401fc0,0xbc36b6ec,0xbc45065f,0xbc37ea72,0xbc356ef5,0xbc37d468,0xbc1bf678, -0xbc017b05,0xbbbc398c,0xbb3fe614,0xb9773b64,0x3b37d1d2,0x3ab07182,0x3a3da0c5,0xb8dea924,0x39ada837,0xba67e653,0x3a1e84f0,0x3b4560c3,0x3b219fd0,0x3b163f46,0x3a0c9127,0x3a3ddaa8,0xba95b3ed,0xba0b4ff4,0xbba4c189,0xbb75f2ba,0xbba8d364,0xbb27e305,0xbb42b9b8,0xbb741eb9,0xbb8c1c42, -0xbb842cc7,0xbbdf695d,0xbb10b42f,0xbc12a4fb,0xbc09a985,0xbc01227a,0xbbf454ce,0xbbeaef3f,0xbbda8f9b,0xbbc5877a,0xbb977c78,0xbb5a74f1,0xbb0f78e2,0xba729e2d,0x39a1f3ad,0x3b1112f6,0x3aee3eda,0x3aeed8b0,0x3acc2823,0x3ac383b2,0x3ad5c781,0x3a562e4e,0x3b30167c,0xba38d3e8,0xba80cbe1, -0xb9da8651,0xba1097e8,0xbb292557,0xbb7e5600,0xbb7ff5dd,0xbb30ab72,0xbbaa67bb,0xbbcec754,0xbbac939a,0xbbccabf2,0xbba1f2a8,0xbbbbb491,0xbc043169,0xbb084d73,0xbbda1711,0xbba33a64,0xbba95548,0xbba3a64b,0xbb9ec6ef,0xbb9bf97f,0xbba0d8c6,0xbb8dec49,0xbb7ae35b,0xbb558241,0xbb3169d6, -0xbb126635,0xbad2b3ff,0xbaefd912,0xbaeea887,0xbaeb5456,0xbaff65ea,0xbaec0253,0xbb2a90b7,0x3987a7f3,0x3b6ee7b0,0x3bf17cba,0xbab27c8b,0x3b53d4f3,0x3c03ac9a,0x3c016d95,0x3bf1abfe,0x3bcd3de3,0x3bd557db,0x3bc6e9d8,0x3bae464b,0x3ad4f625,0xbb5d6b75,0x3ba52dac,0x3aeb8557,0xbb7a8fb1, -0x3b6f6296,0xbb4a2931,0x3be1df5f,0x3b4e3fc1,0x3b496f8f,0x3b1503b1,0x3b2d8e9a,0x3b441776,0x3b8097c0,0x3b693249,0x3b67c047,0x3b801ff3,0x3b4063b9,0x3b2c8033,0x3b1cf15b,0x3b489096,0x3b6231d2,0x3b810e8b,0x3b81ee53,0x3b64c599,0x3bbdcc21,0xbb70a29b,0xbc0103cb,0xbc12bf14,0xbaf863f0, -0xbbf16c99,0xbc0070b6,0xbc06048a,0xbc059a21,0xbbee76de,0xbc0ea9f3,0xbc12f052,0xbc12b67b,0xbbdf24f4,0xb982339e,0xbc074bdf,0xbc050e36,0xbc037504,0x3ba1acf1,0x3b77ca6f,0x3ae064f7,0x39c19d29,0x39b91d7a,0x3a9d15cf,0x3b7bf97e,0x3b77c784,0x3b856098,0x3b9c6e51,0x3b23bc4a,0x3ac9e5cd, -0x3a9f2219,0x3b1ede66,0x3b5e1498,0x3b9b7b26,0x3b90d611,0x3bae0e20,0x3b454fc1,0xbbde3987,0x398c5c56,0xbb074aa7,0xba9f69ba,0xbab02750,0x3adc39db,0x3b4f2bb9,0x3b30abe7,0xb9ca97b3,0x3b204b0e,0x3b5e6fae,0x391cc738,0x3affa337,0xba0db10b,0xbaf6bb41,0x3b31e16d,0xba0f1cc8,0x3be45288, -0x3bc71c92,0x3a370d81,0xba94fe63,0xbad71a76,0xb9d3a3cc,0x3bb7416f,0x3b85b0c1,0x3b892f73,0x3bbb1ed7,0x3a4367cb,0xba5d142b,0xbaf932d0,0x3aa5251f,0x3b52f97f,0x3bc2cf31,0x3bb5c1ea,0x3bf4b018,0x3ad5d44a,0xbb1e72a1,0xba90878b,0xbb04605e,0xba02396f,0xba9bfd31,0x3b8101c0,0x3b42d2d2, -0x3c023952,0x3ac9f731,0x3ba91c0f,0x3aa33e00,0x3a79ff45,0x3af6cf80,0x3abf72c5,0xbaa40fb5,0x3ad8dbf3,0xbb1d3c3f,0x3bf08c51,0x3ba8ddbd,0xbab06616,0xbb9add09,0xbc06807b,0xbbc5784c,0x3b889909,0x3b7a6b4c,0x3bad5e82,0x3c0bcd3b,0x3abf6f1b,0xbb523786,0xbb9f96a2,0xbaf834c6,0x3afdbdfa, -0x3bcd2e8c,0x3bc8684c,0x3c0384aa,0x3b0d5318,0xbb38f3b0,0x3b113eef,0xbb29c664,0x3aef6be2,0x3b5be904,0x3bae41f6,0x3c08332f,0x3c089c0f,0x3bc2f8b3,0x3b865a4a,0x3b943f55,0x3b01e5bc,0x3baa0f39,0x3b9577af,0x3b0efe5a,0x3b214e91,0x3b94a52c,0x3c48227a,0x3c253f1f,0x3ba8b31f,0x3b94a716, -0x3c668766,0x3c68e07d,0x3b9f7f16,0x3c18ffec,0x3ba22561,0xbaed2937,0xbac7ef55,0x3b3950ef,0x3c48928c,0x3c2cb98c,0x3c22df8d,0x3c5ea682,0x3c205257,0x3c2cf432,0x3b8d40bc,0x3990a3cc,0x3bdf8c58,0x3b7d7867,0x3b2f1993,0x3ab7c8ba,0x3b979c63,0x3aadb2ff,0x3b45e001,0x3c2fed0d,0x3c1224c9, -0x3bb34c7a,0x3af8a0e1,0xba99ea51,0xbbb66ab5,0xbb957796,0x3b212f23,0xbcc6d10e,0xbc127842,0x3c045245,0x3bf4044b,0xbaa086df,0xb95f4844,0xbb30c943,0xbc023d5e,0xbaf7315e,0x3b32a741,0x3bedf632,0x3a9b4aaf,0xb8bbb2ec,0x3b2c127e,0x3c000940,0x3c2f0a2d,0x3c38c6e7,0x3b94cbd9,0x3b910e75, -0x3ad7fb9c,0xbab71021,0x391d35a3,0x3a2a808c,0x3b748298,0x3b9878c7,0x3b344972,0x3bd9304f,0x3bf7373a,0x3ba46464,0x3b149dbc,0x3b29431d,0x3bc11fd8,0x3b3b3041,0x3bcb76b1,0x3c2c4812,0xbc382c7f,0x3c0d7c79,0x3c3bd141,0x3c5090e3,0x3c2ed8db,0x3c17ad26,0x3bb48626,0x3b372af9,0x3b70b330, -0x3b813950,0x3bbe2751,0x3c3bb658,0x3c2ef322,0x3c448ca9,0x3c2798a9,0x3c03f3e2,0x3b8cbb31,0x3b30b6ed,0xb94d352a,0x3aea8634,0xb8295d8c,0xbaf77e5c,0x39a970c4,0xba6177f1,0xbad3a72c,0x3a727020,0x3b6f7f84,0x3b282d9d,0x3b171752,0x3ae6e354,0x3b4b2442,0x3b1a311a,0xba209e5e,0x3b483edc, -0x3bb470f1,0x3b45cb18,0x3c07de33,0xbb7ccb17,0xbb28d26b,0x3b16c8ce,0x3b779dc6,0x3c1cc151,0x3c3b05fe,0x3c4fa866,0x3c833034,0x3b62dc2d,0xbac3d852,0x3ae153df,0xbb8d15ab,0xbb9eeffd,0xbb0b3e70,0x3ac8394b,0x3b81036b,0x3be66470,0x3be520d2,0x3be4559b,0x3b576aa4,0xbb08cbe2,0xba22fbbf, -0x3a38d96f,0xb9e70e67,0xb9927d53,0x3984ffb5,0x3b3c1029,0x3b4b8299,0x3ad7c0dd,0x3b1fce61,0x3ae4fe28,0xb9a5f353,0xbae55623,0xb9b89261,0xbb65e579,0xbb172340,0xbc55381f,0xbbe14bf2,0x3a2ccf54,0x3a8cb1a9,0x3b9fccf5,0x3b0bce58,0xba252310,0xbb93ffb1,0xbb805181,0xbb35f889,0xbaad1144, -0xba436b30,0x38c57010,0x3a6da82f,0x39a61693,0xb91c645a,0x3812b09f,0xba7ab8d6,0x3a085dca,0x3abfac4d,0xbaef11eb,0x3a0a9ad1,0x393487e3,0x39bff7ee,0xb7178878,0xbb388945,0xbaee9d7e,0xbab2c3d3,0xbb396175,0xbb14f25e,0xbb99e547,0xbbe1bcfc,0xbc0c371e,0xbc21fe42,0xbc1fced2,0xbc1f8d14, -0xbc37b9c0,0xbbcb7e60,0xbac2cb2a,0xbb563c79,0xbafbdebd,0xb99d8d6e,0x3b016ce2,0x3b3b3bd2,0x3ad51086,0xb84fdf3a,0xbaa64ce6,0xb9891418,0x39ca665c,0x3ae0e9c8,0x3af23238,0x3af2d7be,0x3ac8b730,0x3b138f2e,0x3b17fa23,0x3ab23a64,0x3ac4f790,0x3ae46218,0x39e91dd6,0x3a3245b6,0xba2c0e9a, -0xbb68226a,0xbbb35113,0xbbdd15ac,0xbbb6e5ab,0xbbe9253e,0xbc0eeea7,0xbc277736,0xbc307334,0xbc20c47d,0xbc1599f6,0xbbd36d94,0xbc04dbe3,0xbbb1fd98,0xbb52eb65,0xbb9b4112,0xbb934a13,0xbb98977e,0xbb95262c,0xbb7bd464,0xbb5127a9,0xbafa7d85,0xba82391d,0x3a5307f2,0x3b1f39e6,0x3b885468, -0x3b54186c,0x3b2823b3,0x3b053134,0x3b167fc7,0x3b7259b7,0x3b2d7d56,0x3a28acf0,0x3af545ea,0x3b3da938,0x3a7af712,0xba82a077,0xbb02d93d,0xbb75e1a8,0xbb8e1dfc,0xbbfcce91,0xbbb10262,0xbbab71de,0xbb5e045a,0xbb983598,0xbbc3610d,0xbbfa848f,0xbbddb880,0xbc3280a3,0xbbd7f687,0xbb9e549a, -0xbb6c344f,0xbaf019eb,0xb93c117c,0x3acceacb,0x3b46b5d9,0x3b568e78,0x3b5fe80d,0x3b685858,0x3b67effe,0x3b5af6a9,0x3b59e666,0x3b5ed02d,0x3b6fb0dc,0x3b79cd48,0x3b77ebf2,0x3b79c30a,0x3b8b4cbd,0x394cec61,0x3ad4d0a3,0x3909390a,0xba857155,0xbb174a00,0xbb11f430,0xbb0d7757,0xbb4a0752, -0xbb97b9a4,0xbb6bb212,0xbb7d1ca4,0xbbb1b4ad,0xbbb63aba,0xbbe046a1,0xbbea1fee,0xbbbbba75,0xbb940082,0xb9b842ee,0xba51e524,0xb927f98a,0x3980e972,0x3a1a79d0,0x3a74fb60,0x3acaca30,0x3ac81ea3,0x3adc3001,0x3aed06d5,0x3afe0c9c,0x3b09c5a9,0x3b0fa787,0x3b0fd474,0x3b0d45a1,0x3b0d2103, -0x3b10247f,0x3b00bed2,0x3b4844c6,0xbaa885cd,0xbb8c11d5,0xbbb7cb29,0xbab6413b,0xbbacf533,0xbbd63514,0xbbde680b,0xbbd9ca43,0xbbc9698b,0xbbe4201f,0xbbe89cb8,0xbbe713d2,0xbbd2d55b,0xbb48c67c,0xbbec708c,0xbbeb15cd,0x3aafad5f,0xba044c73,0x3be412eb,0xbacb6df9,0xb98e34ea,0xba318f02, -0xba5100e0,0xba06fcc6,0xb9cf4a92,0xb931097f,0xb9fcbd95,0xba25d3e1,0xba0ff6b2,0xba93a4ab,0xbaabf77e,0xbac4cfb2,0xbaa29499,0xba7cc38b,0xb9fa1ab7,0xb987772d,0xb827d1ff,0xbb03f7e4,0x3bd0c37b,0x3c02e1ec,0x3b8c4a4d,0x3b99b649,0x3c05c880,0x3bb880af,0x3bd3f8bc,0x3bd9b368,0x3bb39021, -0x3be45860,0x3be7a06f,0x3bd205ff,0x3c0ac60c,0x3b982093,0x3ba4c089,0x3c170bbe,0x3c083a0d,0x3ad56e4a,0xbaa47174,0xba2046d0,0xba9884ff,0xb99c9b93,0x39840fad,0x3a3e77e6,0x39411ae2,0xb987e7cd,0xb93c4377,0xbafaf497,0xbb47b6e3,0xbb658510,0xbb51d80c,0xbb0141ac,0xb9d995d0,0x3a82090c, -0x35ef932c,0x3a9678c2,0x3bc7ea0f,0x3a6d4dc2,0x3b18d339,0x3ad1db82,0x3b4474e6,0x3b83a4f2,0x3b60ffaf,0x3b98c193,0x3bbcebda,0x3b5df4f6,0x3ac4421f,0x3b063fe2,0x3b445a41,0x3b99c61c,0x3b8e4508,0x3adc1274,0x3c0e286d,0x3bab078a,0xbabc73b5,0xba4cb7ee,0xbb14e2d6,0xb96ad9a9,0x3a8588c8, -0x3affb25e,0x3a1f4a60,0xb9bf2ffb,0xb9b70183,0xbb53850f,0xbb94a185,0xbba1ed70,0xbb8dd298,0xbb20217b,0x38abb4b8,0x3afa4d59,0x39f071cb,0x3b1ad0ea,0x3b99bdd8,0x3af6a760,0xb8aeb25f,0x39fb9d43,0x3b7906d1,0x3b824976,0x3be27b56,0x3b7a1e61,0x3bdbf3c0,0x3b54659e,0x3bb7d3e3,0x3b0db978, -0x3b9ca6d5,0x3b92efe4,0x3b8bbabf,0x3ba88dc5,0x3bd865a8,0x3b977721,0xbb0a5a06,0xba75f078,0xbb41928c,0xba343aa5,0x3b0a872f,0x3b8dd928,0x3b355312,0x3ab84eb5,0x3ade1491,0xbb2b65fb,0xbbdf51ed,0xbc0a3d34,0xbc049b3e,0xbb89b005,0x3a148225,0x3b794ac4,0x3abddfa6,0x3add45a5,0x3b6977a7, -0xbb296ec6,0xb95d9f3e,0xb9a3444d,0x3aa68d60,0x3b6647f4,0x3bf2bd6a,0x3c0d45eb,0x3b68392d,0x3b8c945b,0x3b4495b4,0x3a811ab8,0x3b92a9bf,0x3bd5f234,0x3b04fdab,0x3b42c96c,0x3cb41337,0x3c4ce2e7,0xba267ce9,0xbb0cd8df,0xbb87ee13,0x3bef26f3,0x3c0e18fa,0xbad1c0a4,0xb9f157ff,0xbbed234d, -0xbc8723d4,0xbc8a8d4f,0xbc42d7d1,0xbabb93bb,0x3b167d51,0x3b4fb1ad,0xbac46541,0x3ab336e5,0x3a8d2832,0x3bdf259b,0x3c26e79e,0x3b89e7af,0x3ba25692,0x3b22fddb,0x3b11b99c,0x3b89d96f,0x3a24149d,0x3b4f9326,0x3c3eb14c,0x3c0ada20,0x3b94ef50,0x3b56e353,0xbad4ce52,0xbaf50194,0x3af1ac52, -0x3c805650,0xbc9e6b1d,0xbc41ce73,0xbbdf23b9,0x3b3e3c9f,0x39d75b8e,0x3be31a57,0x3bc24c83,0xbb1cc542,0xbb21caab,0xb9fb4150,0x3bd82800,0x3b2c8580,0x3af25bd8,0x3b7d34fc,0x3baeed26,0x3beef74c,0x3bf2f94a,0x3b96f8fc,0x398b624c,0x3b61c330,0x3b2ec059,0x3acddcfc,0x3b497e3e,0x3a9a2fca, -0x3b0d6384,0x3b146b10,0x3bd08a94,0x3bec9a5f,0x3b8ce8cf,0x3af2ff5f,0x3b35f23e,0x3b8a07f9,0x3b8905df,0x3bb94b38,0x3c60c431,0xbc8017fd,0x3c6910ec,0x3c6ca64c,0x3c5a3058,0x3c493245,0x3c5ff4b1,0x3c3f1e6d,0x3bc02cde,0x398b0d99,0xbc2774f4,0xbc306042,0xba1188cb,0xbb1e5162,0x3a8c4ba9, -0x3b594420,0x3aa0be1a,0xba24aabc,0xba80d191,0xbaddbfe5,0xbb96d981,0xb9af1a69,0x3a996b65,0xb9aeb3a2,0x3af7c644,0xb8528059,0x3ad33bdd,0x3b63bfd6,0x3b02dcad,0x3abc53f5,0x3ab49640,0x3b501207,0x3b44f48e,0x3aa07a12,0x3bba68dd,0x3ba6d987,0x3c0121d3,0x3c3189f2,0xbb5dad12,0xbad51195, -0x3b791e03,0x3c34c83c,0x3c54a117,0x3c83cd37,0x3c844328,0x3c44f6b8,0x3c1bd83c,0x3bf4928b,0x3c309020,0x3b2fffd7,0xb95c8803,0x398fcfd9,0x3b39ded4,0x3b70f474,0x3b668faf,0x3b670c2d,0x3ad2adcc,0x3b24252a,0x3b1f33f3,0x394df209,0x399a3dba,0xb9dbb989,0xb9a295d2,0xb65aeed0,0x3af8ce20, -0x3b63d365,0x3aee5ffb,0x3b09ccf2,0x3a7d09a8,0xbaf21704,0xbaa48d49,0xba50d0b1,0xbb17252b,0xbb899df2,0x3a35a32d,0x3bb19791,0x3bb7f10c,0x3be520a9,0x3bb492f8,0x3ba81b70,0x3a599b43,0xbbc33173,0xbb224c4f,0xb9698eca,0x3b863434,0x3b8c577f,0x3b891b55,0x3b852c7a,0x3af4933e,0x3a36d8cc, -0xba6d8935,0x39ebf69b,0x39cb078f,0x3a937a7b,0x3b284c38,0x3a0224dc,0x3984494e,0x397f212c,0xba11740c,0xbb44ffcc,0xbaf40530,0xbb2df186,0xbae5b74c,0xbb0fdf11,0xbb278f96,0xbb5098cc,0xbb960fce,0xbbae9f9b,0xbb99399a,0xbad2f561,0x3a64e3a4,0x3a5694a7,0xbb05ef4c,0xbaf11742,0xbb3c66e0, -0xbb82db3d,0xbb76caca,0xbb1ce416,0xbb2e4977,0xbb59a97d,0xbb6beb60,0xbad4c583,0x3a299939,0x3b4158bd,0x3b1d26fa,0x3a9e1740,0xbaa43f95,0xba50e60f,0xba21fa37,0x3a93f053,0x3ad04b51,0x3af8744b,0x3b8c4a70,0x3aabb33b,0xbac184a0,0xbb8ae6ad,0xbbbd88ed,0xbbce077f,0xbbf478bf,0xbc006a8c, -0xbc14d072,0xbc2d50db,0xbc2dd50e,0xbc143bab,0xbbeb751e,0xbb185475,0xbb087372,0xbb84c45c,0xbbb655e1,0xbba6189e,0xbbbd50db,0xbbb05ecc,0xbbbbf08b,0xbbc25d51,0xbb8ef581,0xbb25af25,0xba85284c,0xb9fe712d,0xb7b042fc,0x3a94160f,0x39d79c3d,0x39577fce,0xb9c88439,0x3a3de82e,0x39d4b95c, -0x3b2a0743,0x3b8c352e,0x3b5c081c,0x3b5761cc,0x39bc7bbd,0xba588915,0xbb849953,0xbb7267b1,0xbbdc83be,0xbbb9b4ad,0xbbcf9ea3,0xbb7c9ffa,0xbb5cb127,0xbb3408ab,0xbae1874a,0xba48ea74,0xbb143470,0xbb9a8d92,0xbbc2884f,0xbbb24a25,0xbb8c92df,0xbb68561d,0xbb2cae9e,0xbad52632,0xba2914c6, -0xba442636,0xba8a9f8a,0xba8beb11,0xba5c2158,0xb9a45d8e,0x3a2465f2,0x3a21ad8d,0x3a45ea77,0x3a2c75f6,0x3a4ac05c,0x39dd9ef2,0x3a2ed0a6,0x3b5349f5,0x39ac8392,0x3a53c570,0xb8c96473,0x397be77e,0xba6665c4,0xbb029da9,0xbae3749f,0xbab20b09,0xbb685609,0xbbab505e,0xbbac4782,0xbbbeab80, -0xbbb2ae7c,0xbbb0e553,0xbbd582c4,0x3a0b0010,0xbb79a513,0xbb3b7d53,0xbb2e117c,0xbb1ee8de,0xbb0fa453,0xbb052fd9,0xbae15310,0xbaec9033,0xbad58473,0xbac466d0,0xbab110b0,0xbaab557d,0xbaa47507,0xbaa7d075,0xbaa006f3,0xba964de6,0xba93a378,0xba708f53,0xbaef07bd,0x3b2473f7,0x3b85a649, -0x3b36702d,0x3ac2c9a1,0x3b7ba7c3,0x3b214527,0x3b2520f0,0x3b0f4786,0x3ab6f83a,0x3af4bacb,0x3adf3e88,0x3aa3696d,0x3b048b99,0xb8f9aada,0x38899a57,0x3af3513c,0xbad41311,0xbb2ed138,0xbbd37b07,0xba3a0b35,0xbb0b6c4d,0xbb3aeb5a,0xbb411c2b,0xbb7ea5c1,0xbb802162,0xbb3e81cc,0xbb565b5d, -0xbb51416f,0xbb364e00,0xbb5c3e61,0xbb6c9f52,0xbb845749,0xbb686f51,0xbb501b38,0xbb2d289c,0xbb1cd427,0xbb042c22,0xbad0f176,0xbbe2f046,0xbbc429d0,0x3a8cfb91,0xbbe15863,0xbbc908a8,0x3abf5d13,0x3a5cb234,0x3a40043b,0x3a6d72a9,0xb8f0877f,0xb9d0a41c,0xba73a273,0xbbbb6e39,0xbbc677a3, -0x3a90228b,0xbbbbfacb,0xbb5bebdf,0xbb1d2c0d,0xbaf375d3,0xbb8070aa,0xbb86d533,0xbbe8cd77,0xbbf225b5,0xbb9a050b,0xbba76026,0xbb9469d4,0xbb6f405d,0xbb9868ae,0xbbb539cc,0xbbd968f6,0xbbc876b4,0xbbb1b6ec,0xbb82bff1,0xbb4cf876,0xbac6dcd3,0xbb6c0367,0xbb4e2ab7,0xbb5a8fd6,0xbbb2b26a, -0xbb5c7bb4,0xbb33abb2,0xbafd7033,0xba939bc8,0xbb12ef2f,0xbb504efd,0xbb0f5a2e,0xba9c3847,0xbb2e5158,0xbab6d1d8,0xbabe5013,0xbb79f590,0xbb2a4537,0xbb17ea04,0x3acd32ed,0xb9a6aacb,0xbb9dade1,0xbb927a01,0xbc2e7296,0xbc40911f,0xbbbcc4fd,0xbbfcc11e,0xbbde2700,0xbba9e328,0xbbfb502c, -0xbc142771,0xbc3969dd,0xbc1a53e5,0xbbf8df75,0xbb9a15b8,0xbb26f109,0xb9d0566f,0xbb13fa50,0xbb849f2a,0xbb686cea,0xbb83b37d,0xbb5ea49d,0xbb0df766,0x3ab943dd,0x3b0c39f8,0x3b8594cb,0x3a270345,0x3b62af7a,0x3a8e548d,0xba839569,0x3a819abf,0x396b9c6a,0xbb10ce84,0xbaab2ba4,0xbb1e3a85, -0x3b0453f2,0x398c830a,0xbb97a551,0xbba4cd2a,0xbc83f7d0,0xbc937d8c,0xbc1000c2,0xbc2a54f5,0xbc090811,0xbb931696,0xbbfa3a22,0xbc44aa83,0xbc83e8bc,0xbc817119,0xbc553bdb,0xbc0639fe,0xbb849323,0x391431d5,0xbb0fc832,0xbb30803f,0xbada0ca8,0xbb806603,0xbaa363f4,0x3ad4c50d,0x3ba8bfc9, -0x3c00216c,0x3c0d6bb6,0x3bb92c0f,0x3b8580f4,0x3b8aae7f,0x3af80563,0x3babc92b,0x3b8af69f,0x3a0c41c9,0xba8ad9fe,0x3bd08723,0x3b8275df,0xbabfd3fa,0xbbea923f,0xbc1ca4c7,0xbaea8b47,0xbb161ec8,0xbc4f6c76,0xbb853db5,0xbbbd467e,0xbc51238c,0xbc2d2c61,0xbbb3a407,0x3b78fb37,0x3ba29731, -0x3ba8b771,0x3bb829e8,0x3b1c8545,0x3aaf18b5,0xbaa854f5,0x3a8a59b0,0x3b85dc28,0x3b23a97b,0x3acf8374,0x39cc1985,0x3b537143,0x398affb6,0x3b53d5c4,0x3c4e8a58,0x3bd87d4e,0x3b246683,0x3a1687c2,0xbb9d5951,0xbbef47a2,0xbb12db8d,0x3b9be275,0xbcec1008,0xbc42eb6a,0xb8b6cec1,0x3b0ed1c1, -0x3ae18d61,0xba51e2fa,0xbb84d665,0xbc14b0d0,0xbc04f6ec,0xbb672768,0x3be5cdb3,0x3a8cc145,0xba8d42a8,0xba6a6d42,0x3a4dcc5c,0x390aaee7,0xbb7aaf63,0xbbb3b8af,0xbb68f9c3,0xbaa7d27c,0xb9c7cd27,0x398d6edd,0x392345c4,0x3a858b12,0x3b0f56b0,0x3b184e23,0x3bd9299e,0x3be7cd7d,0x3b6463ea, -0x3b087d7f,0x3b18c579,0x3b7a3aba,0x3b665c4e,0x3bb3467c,0x3c1fad32,0xbc9acc18,0x3c6f5ba0,0x3c730920,0x3c3ee3e2,0x3b9c9924,0xbc00c55e,0xbc2d039a,0xbc7f8312,0xbc9e0c04,0xbc5cd86c,0xbc01250e,0xba05eef4,0xbb9a49ef,0xbb8df4ba,0xbb571989,0xbaf2bc1d,0xbab31524,0xba897c9a,0xbad6e903, -0xba8b6e59,0xbb7013f1,0xbb7cfe6e,0xba9a67d2,0xba72038e,0xbae122f9,0x3a5ddeb6,0x3b462256,0x3ae0961c,0x3ac6b865,0x3aa8241d,0x3b48866b,0x3b3e8187,0x3a89ef22,0x3b50c7f9,0x3b8fe860,0x3b9a779b,0x3c435e22,0xbbeff749,0xbbe09e85,0xbc1ec62f,0xbc53ae54,0xbc8763e3,0xbc0889ee,0xba526808, -0x3c0ff7ee,0x3b1fb461,0xba8e1c3b,0xb8170943,0xbbb241f2,0xbbe398de,0xbb9f16ec,0xbb285ee1,0xbafa9db6,0xbaa040e6,0xba4f1e1a,0x3a5f2ce4,0x3a5cf97e,0xba497c24,0xba906762,0xba881697,0xbac2e1cc,0xba990a60,0xba4e7c8f,0x3af1c6d2,0x3b1a3c29,0x3abb1ea7,0x3adfe047,0x3a7a1bb8,0xb960055e, -0xbaaa3771,0xba74e8e7,0xbb13b1ea,0xbb93c7fa,0xbbc908f1,0xbc268484,0xbc7ec33b,0xbc8174bc,0xbc54f8c3,0xbc6cf0e6,0xbc7c21a1,0xbc836283,0xbc388257,0xbc1a43a3,0xbc30c57c,0xbbe92095,0xbba55260,0xbb871ad4,0xbb13a623,0xba5c92f9,0xb8c3fcf2,0x39bafce9,0x3a0e0e45,0xba5c5068,0xbb0ac90a, -0xba8df41e,0x39a60957,0xb9d63bc9,0xba900380,0xbb5e39cd,0xbb443fd9,0xbb4542f8,0xbb82b1d6,0xbb497a30,0xbb86174b,0xbba6096f,0xbbaf72d4,0xbbd091cb,0xbbce71a1,0xbc14b769,0xbba23364,0xbc0ca2e1,0xbbe246bb,0xbbc496f2,0xbb822b24,0xbb71252e,0xbb2d027f,0xbb633ea3,0xbafa8dd5,0xba8c2e18, -0xb91263d9,0xba3042fb,0xbaa2fc76,0xba8379f9,0xbb327bf8,0xbb4c4681,0xbb17dcc2,0xba7b433d,0x3a015892,0x3ab045cb,0x3a94b5b1,0x3a68d77f,0x38a221ad,0xbada57ba,0xbb36f510,0xbba24f06,0xbbbe61a0,0xbbd881c4,0xbbd311eb,0xbc033880,0xbc2033a1,0xbc3d7f47,0xbc43ba15,0xbc474d86,0xbc360c8e, -0xbc0c497b,0xbbec9629,0xbbaccc1c,0xbb91f6ac,0xbbc51663,0xbbd41100,0xbbfaa4b5,0xbc0d0bff,0xbc1b5437,0xbc033872,0xbbd6590d,0xbb9f0635,0xbb572dca,0xbac6ae00,0x39e7bcd7,0x39bf2112,0x39da7795,0x39d63129,0x39b3f5c5,0x3a601e54,0x39a8b9ef,0xb92e6781,0x3a903fc8,0x3b0e522d,0xba1f4dbf, -0xbb355c82,0xbbb61ec1,0xbbc4415c,0xbbeb4415,0xbc13e0d6,0xbbec9b0b,0xbbd7bc6b,0xbbb726f2,0xbbb2e365,0xbbacf937,0xbba4ede3,0xbbb82aee,0xbbe41979,0xbbde92bb,0xbbbcb856,0xbbb77919,0xbba05544,0xbb8b96e2,0xbb63094e,0xbb4fbce7,0xbb0b7f94,0xbab9dffc,0xba4e366e,0xb9075a69,0x398824c1, -0x3a1cebef,0x3a167220,0x3a38c777,0x3a5fbb94,0x3a6a0c52,0x3aa3954a,0x3a7552d1,0xb9c31e62,0xbabc9293,0xbb55018f,0xbb51a315,0xbb896d5f,0xbbafe0a6,0xbbaaacd6,0xbbca91b4,0xbbd677fe,0xbbd38840,0xbbceeca2,0xbbe9a701,0xbbe68abc,0xbbe9c6e4,0xbbfe0f92,0xbbe27bb5,0xbbcf74dc,0xbb6a4816, -0xbb6c169a,0xbb65ecd2,0xbb5b707c,0xbb5a8d42,0xbb5695b8,0xbb503ae3,0xbb3b5cf0,0xbb28b464,0xbb13ca58,0xbb01b751,0xbad9ca33,0xbaa69ccc,0xbaab1a4e,0xbaaa9421,0xbaa6e2f2,0xbaabccbd,0xbaac552d,0xba572f37,0xbb82beb3,0xbb89efd4,0xba1af52b,0xbba48a98,0xbbadff22,0xba97405d,0xbad26f0a, -0xbaed7330,0xbaeebd1d,0xbb2926d9,0xbb3cc5b2,0xbb47f58d,0xbbc2362b,0xbbc53959,0xbb0fae92,0xbbc26e9b,0xbb4743a0,0x3b7ed0fa,0x3bc98fab,0x3b9d9c69,0x3b55aa2b,0x3b5e7bb2,0x3b3c1027,0x3b7a36f7,0x3b8a969f,0x3b9c2f29,0x3b8dede5,0x3b8784af,0x3b83dc29,0x3b6de3fc,0x3b6084c8,0x3b4b3f09, -0x3b5d3482,0x3b6c495d,0x3b820912,0x3b8c5b00,0x3b79a7cc,0x3b87c17c,0x3baf405a,0x3b00f1f3,0xbbe343e0,0x3bbb2150,0x3b2c7e04,0xbba451d4,0xbb9412a6,0xbb8b5786,0xbb8c726b,0xbb6cb157,0xbb692c63,0xbb8047bc,0x3b580d33,0x3bdb1b90,0xbbbe91f0,0x3b2fcbd5,0x3a74d2f2,0x3bdaad00,0x3b37b6f5, -0x3b3ca76c,0x3af7970b,0x3b8a72c5,0x3bb6ce42,0x3bdef90e,0x3bcb1476,0x3bbed4eb,0x3bb6410d,0x3b952652,0x3b6a9db1,0x3b31100a,0x3b4c36ba,0x3b824715,0x3ba88986,0x3bc86c9f,0x3bad3701,0x3bb247a3,0xba1eb2d6,0x3afdb400,0x3b2e4999,0x3a97572e,0x3adff114,0x3baf36a3,0x3ba04600,0x3bcc0aaf, -0x3bb5e733,0x3bbb0f1b,0x3b940a91,0x3b27ceaa,0x3b95e980,0x3b5c4cb5,0x3b2debbb,0x3b9b5f62,0x3bf4a1d1,0x3c0c1c8d,0x3b51dbe7,0x3b125761,0x3a0d9ee1,0x3b958f8e,0x3bf0e62b,0x3c277e7c,0x3c0b89d4,0x3bf96457,0x3bdd48a5,0x3b9d5006,0x3b5e353f,0x3b03ebb0,0x3b3d4c89,0x3b8fca9f,0x3bd427dc, -0x3bfaab2a,0x3beeac19,0x3b92679b,0x3b3c75f3,0x3a9efbce,0xb87e8f1d,0x3a3b7db8,0x3ad480f9,0x3ba58251,0x3b8f9d42,0x3bad8efa,0x3babfdfb,0x3b94532e,0x3b94b522,0x3afdac6b,0x3b8c5950,0x3b87f220,0x3b05bfcd,0x3bbdc0f2,0x3ba8c25c,0x3c01cf10,0x3aa86415,0x3a09c8e5,0xbaef401b,0x3b67029d, -0x3c093a62,0x3c5d11d5,0x3c3e13e4,0x3c311984,0x3c298a05,0x3c0251a9,0x3b9176f9,0x3ada262e,0x3b18e413,0x3ba2f7d0,0x3c0c0ff1,0x3c2ffd63,0x3c0f7d1c,0x3b9c4537,0x39ee0474,0xbaa2ac1c,0xbb1bd09e,0xb99a6d61,0x3ad31e1c,0x3b9d32d0,0x3c000683,0x3c043a08,0x3b8fe12f,0x3b96c042,0x3b859604, -0x3aadcadc,0x3bc60838,0x3beb0a30,0x3a58c612,0x3b8c8d70,0x3c9f6ce7,0x3c8f8f0e,0x3c18ce29,0x3bafa6ec,0x393e0bd8,0x3c566031,0x3c814397,0x3c08224b,0x3c314c98,0x3b96d440,0xbbb210e7,0xbbdf870a,0xbbac51f9,0xbadf2ad2,0x3b8e4862,0x3bd42534,0x3ba9a93d,0x3bfa8c15,0x3c1859ff,0x3c1ce61e, -0x3be845e5,0x3bce471a,0x3b9f54d0,0x3b4b1432,0x3ad19407,0x3b2b522e,0x393e9cc6,0x3b6f4ea6,0x3c52fc22,0x3bde4f5a,0x3b1fbb93,0x3aefbf18,0xbb8e9d4a,0xbb9118b5,0x3b3cf51d,0x3c806ef4,0xbca7cd31,0xbbd8e9ed,0xbbb9cac8,0x3b32f0bc,0x3b825139,0x3c12da21,0x3be60d1b,0xbb003f0c,0xbb625770, -0xba9f617a,0x3c0fb692,0x3b28df5f,0x3ab2a723,0x3b94845d,0x3c11ec91,0x3c52d081,0x3c7103e0,0x3c1d55ab,0x3bb09b8c,0x3b7329ce,0x3add8fb1,0x3b0f3106,0x3b547073,0x3ae99940,0x3b33c1d8,0x3b3d2afb,0x3bd7b0cc,0x3bdcafdd,0x3b52cebb,0x3b24e736,0x3b38a049,0x3b7b4259,0x3bac1ff8,0x3c0a47ef, -0x3c4b3483,0xbc674c68,0x3c89acc2,0x3c990bf3,0x3c76d315,0x3c8291c6,0x3cc47734,0x3cf65f57,0x3cdf8219,0x3c69eda2,0x3ba3ec03,0x39955aca,0x3ba6051f,0x3c290500,0x3c843cb5,0x3c92e37e,0x3c6dbf02,0x3c02480d,0xb9a07548,0xb9aabfda,0xba176584,0x3ab0a1f3,0x3afcaedf,0x3ab8088a,0x3ae900c1, -0x3aabaca8,0x3b17fb22,0x3b3cb457,0x3afa1d16,0x3adfdbdb,0x3ad69733,0x3b6fc310,0x3b87acc3,0x3b765c0a,0x3ba135f1,0x3b78737b,0x3bd0e07f,0x3c59f239,0xbbec7194,0xbb910e02,0x3bd80a0c,0x3c925692,0x3cf5e5f5,0x3ce81d70,0x3cc86655,0x3c6c02a1,0x3c5d5711,0x3c374eb0,0x3c396305,0x3bd23db6, -0x3b65f0d9,0x3b3e1707,0x3bedb201,0x3c1ce63f,0x3c154143,0x3bfbe599,0x3b8d375b,0x3b37c02b,0x3a3f871c,0x3a23a670,0xb98f20e5,0xba545447,0xb9f08d7d,0xb98bf0a1,0x3a863f5f,0x3b22d079,0x3adcc56e,0x3ab83128,0x3a16e901,0x397a3922,0xba401405,0x3a8900c6,0xba85e43a,0xbba0a84e,0xbae62ffc, -0x3c2be504,0x3c9428cb,0x3c8a460c,0x3c8580e9,0x3c73a8c5,0x3c498287,0x3be9111c,0x3bf51264,0x3bf1af87,0x3c1a81da,0x3c0f84bc,0x3c053693,0x3bef3783,0x3b741769,0x3aebe38d,0x3a8c0816,0x3ad5758b,0x3b1851fc,0x3b2d1518,0x3aeca2a9,0x3aea4911,0x3a9c7657,0xb994061f,0xba88730d,0xbb0ce6cd, -0xbb2dc53c,0xbb3ee3be,0xbb078bc3,0xba8fa985,0xba9b06fc,0xbaa205a4,0xbadfb1b1,0xbb20bdfa,0xbb7cdd8c,0x3b061835,0xbbb33232,0x3b23e814,0x3b9ed298,0x3b91853d,0x3ba531f3,0x3b8cdb50,0x3ba09e83,0x3bf5fd6d,0x3ad8f18f,0xba635729,0xba86c0f3,0x3acd45e1,0x3b8219fc,0x3bbcd7bb,0x3b8a0dc2, -0x3b636eae,0x3b018bde,0x3b1a0619,0x3ae63921,0x3a290d39,0x3ac6e3e4,0x3af5d294,0x3b46ac17,0x39b59c07,0xbb1075e4,0xbb924c79,0xbb9a671a,0xbbaf72df,0xbbd229a3,0xbbe9a111,0xbc09ba67,0xbc1bf525,0xbc2e66de,0xbc14fd1a,0xbc081a3d,0xbb04dd49,0x399f38c8,0x3a0c6c67,0x39bf3281,0x395298f2, -0x38d71416,0x399db0ad,0x3603e57b,0x398b5c6d,0x3a87b915,0x3b11a5f8,0x3b2f8c14,0x3ad69d02,0x3a05e27b,0xb93f90cb,0x38f6a3d6,0x3a012bfe,0x3a3a5f04,0x3adf2e80,0x3b20c091,0x3b74a83a,0x3b50df48,0x3b1d0ae3,0x3b20dc72,0xba0aff32,0xbb49dfef,0xbbc76fbf,0xbbda3dda,0xbbe2aec8,0xbbf252ef, -0xbbddf127,0xbbc2e1ee,0xbba06a3f,0xbb5eaa42,0xbae9ddce,0xba6417b8,0xb9c55875,0xbbda6092,0xbb0bccd4,0xbaeaab6d,0xba33ac72,0x38e7dbbd,0x3a944708,0x3b0fd72f,0x3b496ebc,0x3b0e538a,0x3a8b3206,0x39a6296e,0xb992a106,0xba0e7416,0xba5b2f93,0xba34007e,0xba36b9c2,0xba4b667d,0xba408686, -0xbaa81da9,0xb9fac676,0x3849ba79,0xb934db7a,0x39ea5b5a,0xba83b036,0xba16c91f,0xb90da2a9,0xb9e3ac79,0xb9aaf2b3,0xba9773a1,0xbacf2169,0xbb2cdf19,0xbb7e732b,0xbb744d40,0xbb9873e0,0xbb87cbec,0xbb5abfe4,0x3a1cc0d7,0xb9d065f9,0xba277d8b,0xb913dcc4,0x386d10b9,0x39903f69,0x39e73456, -0x3a7c2cca,0x3a0380aa,0x39d729e8,0x3981f33a,0x38f1cffe,0xb8a55cb5,0xb9b351a0,0xb999648b,0xb988dfdb,0xb97312db,0xb90beee6,0xb8f4cc4d,0xb9cd8bdd,0x3ad721fb,0x39d1712f,0xbb85ea89,0x3ad4adf2,0x39778184,0xbba56458,0xbba2ba84,0xbba1a615,0xbba07e0e,0xbb9a91d9,0xbb97f31f,0xbb954c8b, -0xba4a4690,0x3a896353,0xbbb9d812,0xbaa174e7,0x38ff95a7,0xbbc81f3f,0xbb754029,0xbbcf4922,0xbba580ee,0xbbc4e124,0xbbb6e261,0xbbe36385,0xbbeaa2a3,0xbbd3777c,0xbbddff91,0xbbdb490d,0xbbd0e84e,0xbbd553e3,0xbbda07a5,0xbbea49ee,0xbbe4e0b7,0xbbddda20,0xbbd065cf,0xbbc362ef,0xbba69dbc, -0xbbdc553f,0xbb86e419,0x39f03ed8,0x3c0f8c57,0xbbbf8f8d,0xb7666737,0x3c1282f5,0x3c0cafe7,0x3c0b4c43,0x3c003aa6,0x3c03b395,0x3c013e68,0x3be2be23,0x397f4eaf,0xbbc2c991,0x3c09d0ca,0x3ab1d84d,0x3b79d585,0xbbc9c664,0xbbb5acea,0xbbd3041e,0xbbc0236a,0xbc183b66,0xbc24be32,0xbc09298d, -0xbc140d8e,0xbc0bdc5b,0xbbfcf9f8,0xbbfa2b9d,0xbc0a3758,0xbc24dd52,0xbc293a93,0xbc22ab22,0xbc0f8360,0xbbe47ff6,0xbbbf4ae8,0xbbceb254,0x3b26bc99,0xbb89abd9,0xbb9ac2b3,0xbb474251,0xbae0bdbe,0xbb0f3636,0xbb2ee699,0xbb581cf4,0xbae0944a,0xbb554edf,0xbb571c92,0xbb39b8a6,0xbb0b1293, -0xb8927a18,0xbb28b9f8,0xbb9e8fb1,0x38310948,0xbae30687,0xbbb31dff,0xbbe7d675,0xbbb6e4a1,0xbc4a85ff,0xbc673a64,0xbc2adf87,0xbc49d56f,0xbc39f2c8,0xbc24e44b,0xbc277372,0xbc37df1f,0xbc64c58d,0xbc646fe5,0xbc51c6a6,0xbc2c7c6c,0xbbe2b96a,0xbbc135f5,0xbb57299c,0xbb05c1eb,0xbb56591a, -0xbb71f4eb,0xbb841474,0xba820432,0x3a19b821,0x3b20127e,0x3a0367d3,0x3b0950a7,0x3b0af6e7,0x3b279af3,0xbabd5ce1,0x3abd5000,0x3a21b61a,0xba9dc60a,0xbaa21ac4,0x38e72783,0xbaf07e9e,0xbb9606b4,0xbbb5aadb,0xbb828764,0xbc6dda55,0xbc8fe6bf,0xbc4f6ceb,0xbc72f813,0xbc5a74dd,0xbc229f36, -0xbc1b06a7,0xbc56d551,0xbc99bf1e,0xbcaa947b,0xbc9ef4e6,0xbc7ac7b7,0xbc1223f2,0xbbb4e3d8,0xbb7b5321,0xba394186,0xbb98520a,0xbb45de7c,0xbb606ad7,0xb9cea684,0x3b888279,0x3bd3a0ad,0x3c018177,0x3b903ff2,0x3b8c9d55,0x3b7564a6,0x3ab72cf8,0x3ba516ac,0x3b8dc7ac,0xbac0f1f5,0xbb3ac240, -0x3c567d0b,0x3a53aaf2,0xbc16bb02,0xbc6a1772,0xbc90dbc0,0xbc348952,0xbc2bbe38,0xbc9c78f7,0xbc39bfc5,0xbc4ce088,0xbc9f3874,0xbc92f305,0xbc58d7b4,0xbba7a171,0xba545199,0x39e29870,0xbb4c576a,0xbb5fffaf,0xbba76de3,0xbaed7564,0x3b8cf97c,0x3aa535af,0x3aba0eed,0x3a8b0070,0x39da230a, -0x3afb2dd7,0xb9e814e3,0x3b48c41e,0x3c49c55a,0x3b98ded7,0x39fee693,0xba34d2ac,0xbbfb76b4,0xbbe6af3f,0x3ad93a1b,0x3c2ec17c,0xbccf2625,0xbc818f36,0xbc2b1479,0xbb14bd00,0x3ba90107,0x3ab0765c,0xbaea3f85,0xbbb63fcb,0xbc164084,0xbbcb0c5c,0x3bd3e18a,0x3ab053de,0xba5d0010,0xbae7229c, -0xbb219b71,0xbba03999,0xbc335c51,0xbc0be18e,0xbbedd020,0xbb0099ee,0x3aea9231,0x3acdcf77,0x3a9e7ce9,0xba238f4d,0x3a1ad3a1,0x3b28ba0b,0x3bcb4417,0x3bc78f02,0x3b133d84,0x3ad93921,0x3b03fb36,0x3b36052d,0x3bb66c0d,0x3baa201b,0x3bc13dc5,0xbcaad853,0x3c91d8fb,0x3c7d5f2b,0x3c2deeb9, -0x3b1d5d7a,0xbc615331,0xbc25831e,0xbc7f7b2e,0xbce5cab8,0xbcb18a4b,0xbc889317,0xbc3666d8,0xbc555d8d,0xbc417e3e,0xbc1a64e1,0xbbdbb653,0xbb7d4e2f,0xbb2da38c,0xbb0f0ad0,0xbb782dcf,0xbba43100,0xbb7d3fac,0xbb0fc332,0xb98da92a,0xb9f9a2d1,0x3aac8856,0x3b073418,0x3a5de373,0x3a2fb68e, -0x3a827f51,0x3b4e2e76,0x3b7bc83f,0x3b853520,0x3b56ade2,0x3af1bfab,0x3bada663,0x3c58b977,0xbc0f85a7,0xbbf2f1c6,0xbc63a0c2,0xbc865220,0xbcbc28e9,0xbc749433,0xbbe57aa8,0x39eb861a,0x3ba0dd59,0x3b8b8329,0x3b0f7566,0xbab0086d,0xbb7290d1,0xbb45dee1,0xbb595ed5,0xbb7dbc79,0xbba21ee2, -0xbb986d05,0xbb64d50a,0xba679e51,0x3aa1e745,0xba75c3dd,0xbb197d14,0xbb0fff3b,0xbad638e0,0xba965e66,0x3921d8b7,0x3a7d1518,0x3a3da9ce,0x39ba3082,0xb9c71955,0xba3b29c1,0xba98fc60,0xbad35c41,0xba4e177d,0xbbd36aa0,0x3b53c957,0xbb733e62,0xbc8c6d06,0xbc935afa,0xbc8d179c,0xbc8f3743, -0xbc88fd88,0xbc76264a,0xbc360286,0xbc27eecd,0xbc466489,0xbbf91194,0xbbb4622c,0xbb9f8447,0xbb0b2f45,0xb98a70d6,0x399e6500,0x3adde6bc,0x3a12e7ca,0xbad79870,0xba1b8703,0xbad62fa8,0x3a38aa4b,0xba8c056b,0xbb107104,0xbb455034,0xbb651b89,0xbb795321,0xbb4648c3,0xbb1df59b,0xbb0829c6, -0xbafba7d6,0xbabce75e,0xbae350e3,0xba33aeef,0xbb652e4c,0xb6194a06,0xbbe0ee74,0xbc0dbb68,0xbbca9d42,0xbbc6944e,0xbbc3d222,0xbbd07a5b,0xbc062303,0xbb94fb8c,0xbaf28332,0x388bc8dc,0xba650830,0xbac7749c,0xbabea79b,0xbb78df60,0xbb8eb0e6,0xbb5cb338,0xbb1e41ce,0xba25143d,0x3ace36e2, -0x3ad9a541,0x3a465cf9,0x3912c7f7,0xbb38bfa3,0xbb7ff40d,0xbba882bc,0xbbb36628,0xbbc1f07c,0xbbea00a1,0xbc077f3b,0xbc1e3767,0xbc32b3a1,0xbc42edd0,0xbc4fb30e,0xbc30c1eb,0xbc13964f,0xbb7f48ee,0xbb85adaf,0xbba5cfe8,0xbbb24ae7,0xbbc9b0ff,0xbbe7e400,0xbc050615,0xbc1c5c03,0xbc051021, -0xbbeb9d2c,0xbbb6d98e,0xbb965236,0xbb5d9ce6,0xbafd4ceb,0xbad25efb,0xba9005fd,0xba62e915,0xba659329,0xbab493f1,0xba504671,0x397d93cf,0x39f2175e,0x3a5e8990,0xbafb3229,0xbb771b3e,0xbbeb8bf5,0xbbda7a05,0xbc0aa60d,0xbc05ef2f,0xbc019ae9,0xbbdeb8c6,0xbbe384a3,0xbbac0b9c,0xbb65f896, -0xbab7df6d,0xbb4e6a48,0xbad1a500,0xbbb12612,0xbbb1fd7c,0xbbc26224,0xbbcd7dc1,0xbbd8eb53,0xbbde0b36,0xbbed080e,0xbbc16ca9,0xbb9fe816,0xbb83a71b,0xbb44da10,0xbb09d4b2,0xbaa4d10a,0xbac468ae,0xbad6ef81,0xbae344df,0xbaeb212f,0xbac9420b,0xbb19f88a,0xba88ac1b,0xbb705d80,0xbb971c4b, -0xbb7578e5,0xbb7b0025,0xbbb06195,0xbbb26b2d,0xbbbd0c0b,0xbba1b4c6,0xbbc4c53d,0xbbc24234,0xbbba771c,0xbbbb3abd,0xbba23c6d,0xbbb5fcdc,0xbbc578ba,0xbb9fc961,0xbbbfcbde,0xbbac07c8,0xbbb6fa63,0xbbb93e42,0xbbbec63c,0xbbc3dee4,0xbbcf999d,0xbbbf73e3,0xbbb495d0,0xbba6b113,0xbb9a7677, -0xbb8e728d,0xbb77d5ac,0xbb8124a8,0xbb812b1d,0xbb81193a,0xbb851d1c,0xbb809ceb,0xbb8cae90,0xbb85c567,0xbae906dd,0x3b4f116d,0xbbb357be,0xbb209bfc,0x3b4eddd7,0x3b3b8ecc,0x3b2282f1,0x3b01db30,0x3aeeaf5e,0x3acba8bb,0x3aa79cf4,0xbb25c5bb,0xbbbbb0af,0x3b0f63d3,0xbb058bba,0xbbca9db4, -0x3b8ba4b3,0x3a2a477b,0x3bdb6c5e,0x3b6280ce,0x3b719ebc,0x3b4988ff,0x3b77ceab,0x3b8a5d57,0x3ba62205,0x3b978b63,0x3b94428b,0x3b933f62,0x3b8cddb8,0x3b86491f,0x3b6cdf80,0x3b7dd310,0x3b8428e8,0x3b8cd79d,0x3b963b5f,0x3b823150,0x3bc469c1,0xb8e2a31b,0xbba89c5c,0xbc3a3770,0x3ac63ff6, -0xbb9293dc,0xbc1ee131,0xbc23b98c,0xbc20c542,0xbc111d5c,0xbc1a3dbf,0xbc1c2367,0xbc1fa491,0xbb739457,0x3b4856af,0xbc2d545d,0xbba41d41,0xbbc0e577,0x3bc96faf,0x3b6ccff5,0x3b29e751,0x3adad22c,0x3b4a7d1f,0x3b8becc0,0x3bcdcaf2,0x3bbdeab9,0x3bc375c8,0x3bc56be3,0x3bc26b23,0x3baaa75b, -0x3b767560,0x3b85c201,0x3b8f316d,0x3ba988b2,0x3bb5802c,0x3bbd6ce2,0x3b9bb9ec,0xbbc97b9a,0x3a1c45a1,0xb98b26f8,0xba70ef48,0xba7f3d04,0x3b5b9a73,0x3b4fbbd1,0x3b6edf0c,0x3b0632a6,0x3b87885b,0x3b8d2667,0x3a74b031,0x3b4ebbbb,0x3999cb45,0xbab8577a,0x3b73141c,0x3b1d7b4a,0x3be80362, -0x3b946a19,0x3abbabf9,0x3a050c92,0x3b17a1eb,0x3b97a369,0x3c1a82a9,0x3bfb1091,0x3bfb0458,0x3bf103ba,0x3bd6d8fc,0x3bab5a9f,0x3b2771d9,0x3b67fb89,0x3b8e652d,0x3bc89a97,0x3bdc8c12,0x3c04d45e,0x3b4d7205,0xba93af5d,0xba8d193a,0xbac6c094,0xba454de9,0xbacbcffc,0x3b8f27b1,0x3a831afa, -0x3ba4f549,0x3b1fe4be,0x3b9f5835,0x3b1aa662,0x39fabec6,0x3b153770,0x3b0385ad,0xbaebd913,0x3b5272ff,0x3a3a8b4a,0x3be022ff,0x3b2d71f0,0xba2b3090,0xbb11b468,0xb97f079f,0x3b46977f,0x3c28d0dc,0x3c10b360,0x3c234ca3,0x3c341d39,0x3c3292b0,0x3c00bd36,0x3b48ec54,0x3b5bc796,0x3b8dbfb0, -0x3be48179,0x3c097715,0x3c166d93,0x3b85de59,0xbb458c9e,0xb99211e9,0xbb82a0b1,0xba744920,0x3a9af469,0x3bb78b00,0x3be46389,0x3bdd877b,0x3bad6c52,0x3b9fe1a5,0x3ba7e2d0,0x3af1bf82,0x3bd93f26,0x3bb5aa1b,0xbacea99d,0x3b16c8dd,0x3c458d74,0x3c6570a8,0x3c37728b,0x3ba2f6ea,0xb9d4c196, -0x3c1b3f5e,0x3c4f2255,0x3c126b93,0x3c5978bb,0x3c1ae77f,0x3a847716,0xba1269b8,0xb9e65b80,0xb9363e52,0x3ba9f024,0x3bf53334,0x3c19869c,0x3c158b03,0x3c3620d0,0x3bebb387,0x3afc90f8,0x3bbd8ef0,0x3b395b89,0x3b3daaeb,0x3a639eb5,0x3a93cfec,0x383e8404,0x3b666b4f,0x3c3fee95,0x3b9847ae, -0x3a0573c3,0xba986744,0xbbf40b16,0xbbea6864,0x3b2836a7,0x3c3dc019,0xbcb313bf,0xbbdc15f5,0xbb63a7e3,0x3b0ea7a3,0x3bf7a15c,0x3bc72adf,0x3b22a75a,0xbb4e5df1,0xbbaab61e,0xbb08cdbe,0x3c1ad46c,0x3ade85d8,0xb95a6850,0x3b448429,0x3bf4a40a,0x3c2fd64b,0x3c3cd797,0x3be93947,0x3bbba6f0, -0x3ad9c30f,0x3991510c,0x3b11adde,0x3b0cdbca,0x3afefb36,0x3b4481a8,0x3b679382,0x3bc95bb0,0x3bb9014a,0x3b0d3348,0x3b11d626,0x3b17ac99,0x3b914cd8,0x3bdd5f9e,0x3c124e6c,0x3ba36f3a,0xbc5e76cf,0x3c826078,0x3c93957f,0x3c57f662,0x3c3d38df,0x3c719890,0x3cd884a5,0x3cde37b3,0x3c47ae74, -0x3c355c0b,0x3bd687f8,0x3ba6b48d,0x3c6254ba,0x3c9dc530,0x3ca29a9d,0x3c88a6c7,0x3c238222,0x3a11c2ad,0x39d8612e,0x3b1f09c9,0x3a691124,0xb8d5509f,0x3aa4e8db,0x39d07b87,0x3adce9f1,0x3b1e1eb4,0x3ae3b793,0x3abb35ca,0x3acd9275,0x3ac18550,0x3b7f97aa,0x3b9d15f9,0x3bb51b3b,0x3b0aa8eb, -0x3a2d1980,0x3b3b71c7,0x3c541bb1,0xbc1cb637,0xbbe44d39,0x3ab7f18a,0x3c1a58f8,0x3cb6df35,0x3c9d23b3,0x3c8266ee,0x3c1b7f6b,0x3c3770d0,0x3c1eb1a6,0x3bebec3f,0x3bb40238,0x3b5fcd6e,0x3b6a7f85,0x3bc74efc,0x3c09e6a2,0x3c09e2ad,0x3be17c2a,0x3b8e815d,0x3ab1860f,0xba9c8909,0x38e66b8a, -0xbaafbff2,0xbae925d1,0xba92a0bc,0xba0c7f38,0xb92d7b89,0x3a0aadf8,0x3a492123,0x3960fe70,0xb9278454,0x3aa6624d,0xba2900d4,0x3a9c8dcb,0xb9ef59d4,0xbbb472b4,0xbb515bd2,0x3bf74c25,0x3c790254,0x3c4c71cb,0x3c56f5de,0x3c37511d,0x3c3d5670,0x3c372888,0x3c01babf,0x3bbecd13,0x3b9bc688, -0x3ba26254,0x3ba3974d,0x3b8df006,0x3b2b2d9d,0x3ae8dd93,0x3b1b60c7,0x3af8e923,0x3b324120,0x3b152f5a,0xb9287e0c,0x3ac26e98,0x3ab07e1e,0xba56ea3a,0xbad6ff37,0xbae2b217,0xbb507fbe,0xbb28faf6,0xbae2b57e,0xb9c1938f,0xba25479f,0xb9e380fa,0xb804c455,0xb995b427,0xbac9c7c6,0x3b07b183, -0xbc31405a,0xba8717d2,0x3b89d0ab,0x3b753b7a,0x3ba4f53d,0x3bca3157,0x3beaaf65,0x3c0dd211,0x3b62c699,0x3ac0656a,0x3a8e508e,0x3b42d40a,0x3b836460,0x3b96fe99,0x3b497be8,0x3b39de93,0x3b6b97a0,0x3b71c243,0x3b4c8785,0x3a6c4f87,0x3aec0e9a,0x3ac02eaf,0xb9bc9f96,0xbad5a3f1,0xbb3b997b, -0xbb850818,0xbb7a0f25,0xbb9b991b,0xbbaf69d1,0xbbd7a424,0xbbfe0169,0xbc0720a2,0xbc2d9aaa,0xbc281bf4,0xbc272cd6,0xbbbe0623,0xba35bd27,0x3ad1389e,0x3b3dd2e4,0x3b149fa3,0x3b3db07a,0x3b2b724a,0x3b2000fe,0x3b33ca9a,0x3b34a3b3,0x3b46fbe6,0x3b3be83c,0x3afa9b83,0x3a5f2a09,0xb9234532, -0x3a23628b,0x3a977295,0x3ad983bf,0x3b02855d,0x3b5a5170,0x3b434249,0x3a164bcd,0x3a0d9ec1,0x3a47f962,0xbaba0464,0xbb91522e,0xbbd1c743,0xbc00bef8,0xbbd49939,0xbc0e1f7b,0xbbe1c764,0xbbf8b431,0xbbd203d9,0xbb9ba61d,0xbb58caa8,0xbb310da8,0xba916899,0xbbe44dd9,0xba997e07,0xba3b9d76, -0xb8d734ea,0x3a1f55cb,0x3abaf27f,0x3b15fa1f,0x3b3f7e29,0x3b199941,0x3ada3163,0x3a92162f,0x3a0a14e1,0x38bbf661,0xba220eb2,0xba0cbcec,0xba2a67d8,0xba2c7be7,0xba407abb,0xba8d6e94,0xb9c80081,0xbb346555,0xba6cb8a4,0xba9231c6,0xbb1277c9,0xbb145155,0xba93def3,0xba197542,0xba4e6084, -0xbb0a1891,0xba75a590,0xba7583a3,0xbb23a2e0,0xbb0dbcf4,0xbb75b4a5,0xbb60725f,0xbade0e4a,0xbb04e783,0x3a3381ed,0xb955e64a,0x39929d9a,0x39d79ebc,0x3a128559,0x3a33cac9,0x3a8fad78,0x3a462c49,0x3a25c19b,0x39fa9f59,0x39b7b11b,0x395e8049,0x37f4ff19,0x3844de39,0x37aa817e,0xb78219e6, -0x387f1eb5,0xb9019743,0x39f1e396,0xbabd609a,0xbb8c9940,0xbc04acde,0xba795bdb,0xbb997848,0xbc163db8,0xbc15f5f2,0xbc1156a0,0xbc063663,0xbc0ac13b,0xbc07b82c,0xbc00a3da,0xbb9757bb,0xba55c7d7,0xbc0650c8,0xbba7d915,0xb8dcf7de,0xbb930ac4,0x3aec0d2b,0xbbc160fb,0xbb77f79c,0xbb90e0c1, -0xbb841875,0xbb9a772f,0xbb9de374,0xbb928c25,0xbb9b4646,0xbb9b0ea6,0xbb9759a1,0xbb91efe9,0xbb947503,0xbba4dc05,0xbba7fb5b,0xbba693e6,0xbb9d9a73,0xbb92062d,0xbb77adb3,0xbbc15a05,0x3ab3d3b1,0x3bad3cf2,0x3bfe6b1f,0xba36a82b,0x3ba57420,0x3c0b0002,0x3c0b3e32,0x3c0c41e2,0x3bfdde67, -0x3c115e99,0x3c116fed,0x3c019461,0x3bad2d98,0xba892f2f,0x3bf9ebc4,0x3bd511f7,0x3beebff7,0xbb85325f,0xbb9c2c6a,0xbb90895f,0xbb813ac3,0xbbaccfbb,0xbbb87a09,0xbba671dd,0xbbbcf8d1,0xbbb50778,0xbba52a8f,0xbb8e6cb3,0xbba68ad3,0xbbe28bd1,0xbbf99f32,0xbbf3b159,0xbbd5b8bf,0xbb9d61d7, -0xbb9b020f,0xbb684ec3,0x3ba61845,0xbb19d318,0xbabded8a,0xba9a26fd,0x398842b1,0x3a02132b,0xba893b12,0xba1bbbe6,0x3b0ac588,0xba0e7da4,0xbad6452d,0xba338539,0xb92fe806,0x3af7f177,0xb70aa2ec,0xbb328011,0x3b86d44c,0xba7475f2,0xbbbafbf6,0xbb9fcd80,0xbb840d41,0xbbd74d2c,0xbbe6425b, -0xbbbdd18d,0xbbea8998,0xbbdc3e12,0xbbce7f1c,0xbba4420b,0xbbbfbca8,0xbc0d0c2b,0xbc210188,0xbc1b27b4,0xbc004147,0xbba06f11,0xbba937a0,0xba893069,0x3a92a239,0xbaaba5d7,0xbb0c1030,0xbb27699b,0x3a2c160d,0x3aecf91e,0x3b3341fc,0xba121b8a,0x3b8f0951,0x3b0879d2,0x3b87bdb8,0xb9cb82cc, -0x3b1ee3ce,0x3aed163a,0x390f2b8b,0x3aae686e,0x3b5ec62a,0xbae93f54,0xbbb8e618,0xbb6fb6cd,0xbb22eee3,0xbbb9a111,0xbbdfdc9a,0xbbc3994b,0xbbfdcc15,0xbbe5d98e,0xbbaa1d6d,0xbb1abfca,0xbbaa6ec2,0xbc39cf08,0xbc6906a2,0xbc63e6db,0xbc316323,0xbbb95329,0xbb9ce667,0xbabd1600,0x3a966a33, -0xbba1ddf7,0xbaf59667,0xbb7730f9,0xbac1fd33,0x3b701b55,0x3ba076b6,0x3bcd8874,0x3b6ecc0b,0x3ba0b053,0x3b7cdc59,0x3aae4d12,0x3ba401a4,0x3b8f35d3,0xbb4e1823,0xbae69af6,0x3c9a25d9,0x3b50d65a,0xbbfbfc9b,0xbc3c884b,0xbc784fae,0xbc165b6c,0xbbd10d57,0xbc26852e,0xbbe64086,0xbc1bfe3a, -0xbc87334f,0xbc918d70,0xbc74a782,0xbc1c1063,0xbb4fd986,0xba75c4b0,0xbbc13980,0xbb7190b1,0xbb97b0e8,0x3af3636a,0x3bda596d,0x39cfef2b,0x3a95271a,0x3ad3726d,0x3a94f1a7,0x3a2cf7f9,0xb9a40b56,0x3b439eac,0x3c238f8e,0x3b60e974,0xb9c1c5b7,0xbb077791,0xbc0ff9b0,0xbbaad75c,0x3bb45310, -0x3c848ced,0xbc9b2c67,0xbc78ec9e,0xbc76ba42,0xbb40b468,0x3c162765,0x3bb00864,0x3b11fc3b,0xba11de1e,0xbbea099c,0xbbb7e34c,0x3bd83d40,0x3b0a8455,0x39927d9e,0x39d42cf2,0xbaaed337,0xbb3742c6,0xbbd5b61b,0xbb688da1,0xbb8f9577,0xb9248e48,0x3b404077,0x3b281ed3,0x3b1ee34a,0xba3ed009, -0x39f953dc,0x3b4dc2bc,0x3bacc07f,0x3b984ff3,0x3aacfad4,0x3a5c1d60,0x3ad96df2,0x3b67d0f4,0x3c065906,0x3bbf2e20,0x39de474f,0xbc993e94,0x3c898497,0x3c7ce58f,0x3c16c680,0x3b137e91,0xbbe900c8,0x3b096b4e,0x3933b5b0,0xbc5e02cb,0xbc5a45d9,0xbc5f2973,0xbc46dd84,0xbc1490cc,0xbbb844e2, -0xbb3568f0,0xbb1188d7,0xbab06ffb,0xbb1df712,0xbaf1b00a,0xbb8ae951,0xbb398a66,0xbac61665,0xbad3b1a7,0x3a4dce48,0x3ac8b9f4,0x3b0cafe5,0x3a85ecfd,0x39bd011a,0x39957444,0x3a39388c,0x3b670e08,0x3b9b5164,0x3bca26de,0x3af42cd8,0xbad9817e,0x3b8d7076,0x3c430dae,0xbc04b620,0xbbdfa46b, -0xbc14cc1c,0xbbca09ef,0xbc07e699,0xbbaf6b92,0xbb3b0701,0xbb3ac5ac,0x3c0a912c,0x3c2c669c,0x3be96b34,0x3ba9cf80,0x3b1e41c2,0x3ae125fb,0xb929de71,0xba54207f,0xbb33276c,0xbb458a30,0xbb7ebdf8,0xbae392e2,0x3ae85ace,0xba1e97c6,0xbb2d1ab0,0xbb2734fb,0xbaef5d03,0xba68aa97,0xbaad1c7a, -0xb9bd9f1c,0x38334b86,0xba2cf7a6,0xba9139e4,0xba4aae2d,0xba0abf39,0xba849b3d,0xb96cb208,0xbbdf141e,0x3c0e763d,0x3bd8d269,0xbb157f4c,0xbb4d0c36,0xbbaccca4,0xbba15dce,0xbb81b024,0xbb1be744,0xbb3f2557,0xbb7cee50,0xbb9e8ea7,0xbb27c793,0xbab9af82,0xbaa1bfba,0xb7c4681c,0x3a7f1fad, -0x3a7beb25,0x3b1847ac,0x3a8955f5,0xba07637f,0x3ace6411,0xba226480,0x3a243540,0xba93341b,0xbb20f27d,0xbb1fe0ba,0xbb500637,0xbb510677,0xba2c0f87,0xba6a3d9c,0x389fdbaa,0x3a90a13e,0x3ae29231,0x3b12884f,0x3b64a6b9,0x3b5c030f,0x396c7add,0xbb39d902,0xbbc4f741,0xbb75cfbc,0xbba1d6ca, -0xbb96292e,0xbbad417f,0xbbc41dac,0xbb67cd66,0xbab8214d,0xb9575138,0x3915163c,0x395fddfb,0x39bcb4d7,0xba8bcf3f,0xbaeaf16e,0xba8f94cc,0xba99004f,0xb9c5bd2b,0x3acc8a46,0x3b07baab,0x3a6b0475,0x387bcfe2,0xbb38e243,0xbb7da778,0xbb87dd1e,0xbb8e9308,0xbb9e124b,0xbbe075ce,0xbbf603e8, -0xbc0808ef,0xbc0e3b29,0xbc2e7dc4,0xbc391303,0xbc1da2e0,0xbbf8cc61,0xb91f8978,0xbab211e1,0xbb455576,0xbb0eddcc,0xbb226066,0xbb2deead,0xbb4ecbad,0xbb85843b,0xbb541a70,0xbb3a6455,0xbb01f203,0xbb0758a4,0xbb0643a4,0xbaeaa5f9,0xba9f24f1,0xba16cdc7,0xb9a1b692,0xb8ba8fc4,0xba51245b, -0x3a0a707b,0x3abcf92c,0x39c1dfc0,0xb98fd584,0xbb17b9a3,0xbb785d73,0xbbdb5959,0xbbce0559,0xbc01a478,0xbbdc3d94,0xbbf3236c,0xbbced71e,0xbbe1fab9,0xbb946028,0xbb0acfe7,0x39c06dbc,0xba6392d5,0x3994429b,0xbb5af350,0xbb79090d,0xbb8599be,0xbb96bcc6,0xbba4c0b1,0xbbaf0934,0xbbb914b9, -0xbba3f0a9,0xbb9355c5,0xbb838c94,0xbb5cae27,0xbb25fb85,0xbada3ac3,0xbafcb47e,0xbb0d610a,0xbb1a750d,0xbb1c1c81,0xbb20bd9a,0xbb3bd20b,0xba3b8952,0xbb4b07c5,0xbb42dab8,0xbb2735c1,0xbafd81ab,0xbb3bba37,0xbb4c5782,0xbb32e699,0xbada5974,0xbb4e50f9,0xbb672199,0xbb3b4e31,0xbb5243a5, -0xbb276a98,0xbb359364,0xbb804d25,0xbacc1822,0xbb9b4ece,0xbb843e48,0xbb8e8762,0xbb926f3e,0xbb9632ff,0xbb9b2cbc,0xbba5d666,0xbb9d7bb8,0xbb97715a,0xbb8fa027,0xbb87f771,0xbb82f6a5,0xbb7157ac,0xbb7a2f34,0xbb78b1cf,0xbb78856f,0xbb7dee75,0xbb73244f,0xbb927373,0xbae1d181,0x3a390fbb, -0x3b266a7f,0xbb2cd9b7,0x3a0eff42,0x3b2b509d,0x3b2ef1c0,0x3b1cccc7,0x3af0fd41,0x3b14bef4,0x3b114f92,0x3b04bcda,0x3a136faa,0xbb27ae23,0x3b045c29,0x3a7d9082,0xbba8b4a9,0x3a2e1bf9,0xbb98185d,0x3b3fa635,0x39dc3c91,0x39a23c7f,0x382bcf86,0xb92cc46f,0x37cb7266,0x3a6502c3,0x3a1983c4, -0x3a2de3fb,0x3a62f769,0x3a6405a2,0x3a364313,0x38b182ab,0x396f9127,0x39a22bfc,0x3a0dd0c8,0x3a462f4e,0x3a202bee,0x3b1f6069,0xbbaa187c,0xbbfaa344,0xbbd828f6,0xbb82482e,0xbbf2026d,0xbbb8b4b4,0xbbd74f9c,0xbbd6c423,0xbbb1214e,0xbbd7b3ac,0xbbdfe306,0xbbe9f64c,0xbbe02675,0xbb330abd, -0xbbd4e9df,0xbbf9e719,0xbbde1b1f,0x3a646ec9,0x3a47c8a5,0xba567b82,0xba8ecb0d,0xbb05a753,0xbaf15a0e,0x3954c1e9,0xb8abdc6c,0x3a35afbf,0x3aba2144,0x3b0bf9d4,0x3ad2a6f9,0xb9b51690,0xb9f8d130,0xba338ef4,0xb81f4db3,0x3923693a,0x3abd928f,0x390bdc35,0xbbd24958,0xbb03ac89,0xbb80f9dd, -0xbb43ce72,0xbb41a21d,0xb8e7b1f3,0xb9a741ae,0xba5631ff,0xbac9b9be,0x399ff0e5,0x3aaf2190,0xbaa56e65,0x3903f40a,0xbb04e72e,0xbb94dc43,0xb93e6309,0xbb0abd0f,0x3afd37a1,0x3ae2b08d,0xbb03204f,0xbada1b5f,0xbb8c2ed9,0xbb81bcaa,0x3a699583,0xb9c0ef8d,0x3a5d1f41,0x3ae35d7b,0x3b123c40, -0x3a91b37f,0xbb2d020e,0xbb0e479c,0xbb0770ee,0xb9e910ac,0x39b94f20,0x3b3056db,0xb98c5c09,0xbb86e727,0xbb5b3b12,0xbb6055a6,0xbb37d292,0xbb60fb4e,0x3b256856,0xba8cae0b,0x3b3bd4c6,0x3a424b4d,0x3b82efd1,0x3a69b526,0xba6eefbe,0x399c05ca,0xb98abc76,0xbb8dd0bd,0xb978b610,0xbb31a445, -0x3ae52300,0x3a91b688,0xbb364d9d,0xbb381f36,0xbbed7d72,0xbc025d35,0xbac406cf,0xbb0e1f5e,0x3a560ed8,0x3b835094,0x3bcba1a4,0x3b67de93,0xbb565bf6,0xbb8f93a7,0xbb9f7730,0xbb2bb832,0xba42c332,0x3b3e88c7,0x3a472590,0xbb865223,0xba779881,0xbb944f6f,0xbb1511ad,0xb84ab9d8,0x3bb52eca, -0x3ba980de,0x3bac5a8a,0x3bbfeec2,0x3bab4034,0x3bb61949,0x3b20da72,0x3bc66160,0x3b45569d,0xbb73ecaf,0xba883b99,0x3bc1e430,0x3b9ebf4c,0x3b8a7adc,0xbb19021c,0xbbc81384,0xbadcd64f,0x3aaec913,0x3a8d92ab,0x3bc06abb,0x3ba7fe12,0xb8b1889e,0xbb188f89,0xbafb6032,0xb9e56dfc,0x3b486fe1, -0x3ba0c75f,0x3bf03089,0x3b989f89,0x3ba86880,0x3aafe35b,0xbaca0ac6,0x3b3cf223,0x39796947,0x3b13e52c,0x3a0676b7,0xb98194d1,0x39a40def,0x3b53a3f9,0x3c0cc6d8,0x3b2f2974,0xba4e6716,0xbb87dc5c,0xbc1b3b52,0xbc019861,0x3b2a189c,0x3bfd8ac1,0xbcb5372d,0xbc17e931,0xbb74491c,0x3a362e6a, -0x3c394c79,0x3b22ef7d,0xbb1b29b8,0xbb3e1ba7,0xbbdf9f9d,0xbb6e0d56,0x3bfcca58,0x3aaf865a,0xba7d0ff3,0xb6309968,0x3accb1c0,0x3ae9902d,0x38ae02b7,0xba2a53f6,0x3aac4501,0xba2e3304,0xb9f2e156,0x3aca339b,0x3a3d0e80,0x3a9ff864,0x3b212583,0x3b75f042,0x3ba68e07,0x3b847a20,0x3a677b06, -0x3a561a63,0x3ab75051,0x3babfdd3,0x3c0d0243,0x3bf08268,0xbb8d81fd,0xbc7a8047,0x3c525295,0x3c820199,0x3c097762,0x3a6d79ea,0xbbbf11a4,0x3b6f4b97,0x3be445e5,0x39d81216,0x3bb2c7a8,0x3b7a0fde,0xb943c5d5,0x3bc99b9a,0x3c16ff37,0x3c1b2a8a,0x3c10d2c3,0x3bc09bb4,0x3a0b58a2,0xb97be28e, -0x3ae925e4,0xba8bc4d7,0xbb1fcfa2,0xb8c2f654,0xba67cb6e,0x3abbf1e1,0x3b09a083,0x3a1f1776,0x3a0f219c,0x3a66eb46,0x3a5b26db,0x3b7988e7,0x3b9d30d9,0x3bb547f5,0xbac0deed,0xbb51658d,0xb9380c4c,0x3c2339fa,0xbc18e102,0xbc16cd83,0xbbf88d0c,0xbbc7f107,0xbac003a8,0xbaf8b7b4,0xba91b39d, -0x3ad2248d,0x3bc02db7,0x3bd0d1fd,0x3b15819f,0x3b492d77,0x3b05eb23,0x3b09657f,0x3aa8c6e2,0x3b07f8d7,0x3b12442f,0x3aa81f5b,0x3a6ddfca,0xbabfab7c,0xbb1eeb5f,0xba9b1345,0xbb23bfef,0xbb3c592a,0xbb07dfe2,0xba4fd9b4,0xbaa1da0f,0xbaa03a24,0xb96c8285,0xba37bd48,0xb9fe921a,0x3aaf429a, -0xb80495a8,0x3a174ea0,0xba5594bf,0xbbac2795,0xba88c5f3,0x3ac03d1b,0x3b5ef67b,0x3ab426c4,0x3b145e56,0x39cd0cdd,0x3b2151f5,0x3bcd2177,0x3b07e027,0xba320586,0xbb939b88,0xbb5976e5,0xbb0c3ced,0xbab9271f,0xb90d06c2,0x3a5d4cd4,0x3b0eeb36,0x3ae229d1,0x3b07fd81,0x3a243138,0xbaa75565, -0x39625f74,0x39e2c1f0,0xba988a1c,0xbb097c8a,0xbb0d10bd,0xbb4f0911,0xbaf66db1,0xba54a96e,0xb9718401,0xba11d034,0xb948f439,0x3a2f886c,0x3a84f7e3,0x3a416be0,0x399a930c,0xbc33ac76,0xbbd6a85c,0xbb379acc,0xbb14d64b,0xba0be497,0x3ad67602,0x3b33da2f,0x3b3cc43c,0x3b05097c,0x3b169687, -0x3b2d1d8b,0x3b3e766c,0x3b007e45,0x3a80063c,0x35b60ce2,0x3946f42e,0x3b2b889a,0x3b273249,0x3b2d2984,0x3abc83ef,0x3adb90ea,0x3a0bb871,0xbb4fd895,0xbb705fc2,0xbb6b3cb7,0xbb60752e,0xbb5c02e6,0xbb9136ef,0xbb9b5284,0xbbce0079,0xbbed6375,0xbbf0365d,0xbc25d867,0xbc376170,0xbc3a0c5d, -0xbc2350d4,0xbb3a1ccb,0x39127ac8,0x3ad656a6,0x3a81139c,0x3add0ae3,0x3a8f6a62,0x3a89c572,0x3a919fef,0x3a7c662b,0x3a4eebe5,0x3a4412c6,0x3a25bef2,0x3a240c88,0x39d65787,0x3aa2c264,0x3ae001c8,0x3b153dd4,0x3afb570b,0x3b3dcc72,0x3ae58996,0xba914e4d,0xba799d36,0xba94541c,0xbb109075, -0xbb939cf1,0xbbb6573d,0xbbea5865,0xbbc5a1d4,0xbc0d3f91,0xbbdd7190,0xbc010e9a,0xbbede722,0xbbc517e1,0xbba6c9a2,0xbb9975a8,0xbb48c837,0xbba53b34,0xbb01d897,0xbacced07,0xbad72199,0xbaadcdbe,0xba8912a0,0xba455054,0xba2d6214,0xb9b1f00a,0xb8840a3d,0x38c16f0a,0x39107f02,0x3890502c, -0xb9963e35,0xb9b00017,0xb9e325a6,0xb9c547f5,0xb9d9eb59,0xb9b1cebe,0xb905a227,0xbb516ff7,0xbacd5057,0xbb31a10b,0xbb46624f,0xbb691087,0xbb450ff8,0xbb0ed986,0xbb2af411,0xbb612eac,0xbb06b986,0xbab8b2ae,0xbb1515b1,0xbb0aafe8,0xbb4bb806,0xbb54853c,0xbaf4f294,0xbb86c90e,0xb8a5820e, -0xba692e79,0xba43ae4a,0xba450e0f,0xba4cb8e6,0xba4bb52c,0xba40e9e2,0xba30d834,0xba2d4cdf,0xba244379,0xba1b2355,0xba0b07ef,0xb9e45899,0xb9ed5b15,0xb9fb0854,0xba06d02b,0xba0421c9,0xba343153,0x393a8e03,0xbb748084,0xbbbe8564,0xbbc82e55,0xbb665036,0xbbd33af9,0xbbdfdfbc,0xbbe2d815, -0xbbdbd978,0xbbc5ceaa,0xbbd6937f,0xbbd34610,0xbbc80d32,0xbbbf80ab,0xbb511d5d,0xbbb75052,0xbbc30c4d,0xba9f7f10,0x3895955e,0x3ba744f7,0xba4aa31a,0xb8818163,0xb8e6d940,0xb8d5edf2,0x3954e471,0x39ba6519,0x39fd2f2a,0x39b0ede3,0x399e2e5e,0x398fb220,0x39fe0027,0x39cf2a78,0xb8cf03ce, -0xb990251c,0xb9b0bf25,0xb94d3eff,0x38424e66,0x38ba4794,0xba40e465,0x3b943afa,0x3b9648e0,0xb9313ab8,0x3b723bb9,0x3ba031a0,0x3aaa0715,0x3ab84fd0,0x3ad37145,0x3ac6102a,0x3b23683c,0x3b271937,0x3b03245f,0x3babb051,0x3b7df2af,0x39804459,0x3bb779b3,0x3b949064,0x3a9c85b8,0xba6abef9, -0xb91ed706,0xb94e4aff,0x3a705178,0x3aaa6ad3,0x3aa7c8e4,0x3a752f19,0x3a8e74fe,0x3ab0b4e7,0x3b089e76,0x3abd9c7d,0xb9a4967d,0xba873acb,0xba8d6154,0xb9fb8f68,0x39f2c7b8,0xb909b9fb,0x3ac051ca,0x3b266687,0x38e8e01a,0x3a9714d9,0x39a3ac09,0x3aa12eab,0x3b59a62b,0x3ad53a48,0x3b3940b7, -0x3b9e86af,0x3b49fe5d,0x3ae8f37b,0x3ae1c178,0x3b1b3cd3,0x3b262590,0x3ab7d13d,0x3aa846f1,0x3bc345b8,0x3b0eeaaa,0xbae0a970,0xba21aefd,0xba5f99bf,0x3a95510d,0x3b222ae0,0x3b27b85a,0x3b0eb7aa,0x3b19de33,0x3b0a0801,0x3b6736ec,0x3b2c58b6,0xb9525010,0xbac17933,0xbae3230a,0xba3bb682, -0x3a05b647,0xb8afd0c1,0x3af7f0bb,0x3b17f5f6,0x38e89eb1,0xba84e206,0xba2f5aca,0x3a839ba3,0x3b6b2f70,0x3b09995e,0x3a51392c,0x3bb5863f,0x3b47e231,0x3b90d737,0x3a8ff4aa,0x3b37848d,0x3b26398f,0x39f6758b,0x3b7ad950,0x3b9287ea,0x3a86cb6e,0xbb35403e,0xba44b0b9,0xba4ac03e,0x3b48791f, -0x3b8dc140,0x3b71284f,0x3b5910bd,0x3b85c049,0x3b9d5970,0x3c0447fe,0x3bc5486f,0x3865ac92,0xbb14f378,0xbb387488,0xba91b101,0x3a8fe8f6,0x3946bde2,0x3b0c3322,0x3a8d8f60,0xbb4a66f0,0xbaf60289,0xbb357e65,0xbab2c2ca,0x3b83c774,0x3b7b86c4,0x3b94e0a7,0x3b8c31a7,0x3bb998e6,0x3b95f3c8, -0x3b007680,0x3ba98cec,0x3b867403,0xbb6a186e,0x3a535b48,0x3c93885a,0x3bf1836f,0x3922cd1a,0xbb3c3941,0xbbd56b69,0xbaac0928,0x3b68b0bf,0x3bafdbf4,0x3b84db24,0x3a209e85,0xbba8abb5,0xbc2ac2bd,0xbc2b7a71,0xbc05e47f,0xbb0a456e,0x3a16cf56,0xbafddc95,0x3a192ec4,0x3a729490,0x3bab7858, -0x3baf0842,0x3a91dea7,0x3a82bc4f,0x3b2d7939,0x3aef39ee,0xba2a8801,0x3a1d5d9c,0x3b57285b,0x3bd59c88,0x3b2f6127,0xb9fa8fd2,0xbb5ad37b,0xbc096ac8,0xbb64e566,0x3bf532b3,0x3c8aff4d,0xbc60dc8b,0xbc1b767b,0xbc4d24e7,0xba60ed93,0x3c577686,0x3c0e4618,0x3baab50a,0x3b81b4b1,0xbb7b085b, -0xbb5f5661,0x3bc354c2,0x3b2a47b4,0x3ab1584b,0x3b0742bc,0x3af4a324,0x3b2db5b9,0x3b4496fb,0x3b719ed7,0x3ac15180,0x3b0ddf8b,0x3b0f81e3,0x3b1d25dc,0x3b392e4b,0x39f5dd5b,0x3ad95271,0x3b73e46c,0x3b8cca69,0x3b4aebbc,0x399c085b,0xb8979114,0x3ab959c5,0x3bb1e737,0x3c2a6b77,0x3bd8dfee, -0xbbacbe06,0xbc6bd4b3,0x3c4ae568,0x3c862b50,0x3bf40eac,0x3aea3f95,0x3b214a6c,0x3c3d159d,0x3c7ec929,0x3c39bc7a,0x3b66af58,0xbb21279e,0xbb97266c,0x3b2071b4,0x3beeb25c,0x3c153953,0x3bf30e0f,0x3b92e346,0xb9943249,0xba653699,0xbb1a3fb0,0x3a167e56,0x3aa1a258,0x39107355,0x3aa66d1d, -0x3b489b8a,0x3b30e407,0x39c53545,0x389fa90f,0x3968842e,0x3a14c503,0x3b7d11e7,0x3ba4daee,0x3bc612ba,0xba5622b4,0xbb988e64,0x3adb7192,0x3c02ab5d,0xbbd6df20,0xbbdd0782,0xbab3ef47,0x3bdb8750,0x3c46637e,0x3c14ebd8,0x3bbbab66,0x39b5f690,0x3c29f401,0x3c5cae07,0x3c237718,0x3c284b71, -0x3c072080,0x3bc04eb2,0x3b81b9cb,0x3b7878a6,0x3b25e8ea,0x3aa0591b,0xbab1c00c,0xbae17738,0x38825536,0xba4610ac,0xbb1599b5,0xbb2c33d2,0xbafd2a1c,0xba0d7843,0xbb0303d5,0xba9af5b9,0xb9a5e23a,0xba7421e7,0xba382216,0x392c682a,0x3a37568f,0x3a3a0e15,0xb9ed9d26,0xbba5c355,0x3c02dc89, -0x3c61df16,0x3c851596,0x3c821f60,0x3c555db1,0x3c46f430,0x3c453b77,0x3c4a9be3,0x3c02622e,0x3bab6a14,0x3b8cc54a,0x3b469060,0x3b2ac472,0x3b439445,0x3b111802,0x3aeb3986,0x3ab13c11,0x3b11c3cb,0x3af962cd,0x3ab93ac8,0x3b2bb5c1,0x3a6431e8,0xb718b19b,0xba8c351e,0xbb0d75fb,0xbb03c258, -0xbb172237,0xbac890f3,0x3ab14943,0x3a22846c,0x3aaa0b3f,0x3b199df4,0x3b366203,0x3b6e75a1,0x3b83d933,0x3bedb1d4,0xbb935e0e,0xb9828e6e,0xbae695c7,0xba5971f3,0xbaa2e757,0xb9f53757,0xb982d153,0x3ab569d9,0x39c01fdb,0x3a149825,0x3a613ae8,0x3b19339d,0x3b46e704,0x3b4534de,0x3b2aa719, -0x3b1922a7,0x3b1d651d,0x3ae5f154,0x3aa1843b,0x3ab58f2d,0x3adb7ab9,0x3a20872e,0xba0f8956,0xbb1ef738,0xbb5a8669,0xbb3fd889,0xbb4b29bf,0xbb774cd9,0xbbb0c0eb,0xbbc40db3,0xbbd189c2,0xbbc69bb5,0xbc0c3aaa,0xbc107f58,0xbc0b6b0f,0xbbc942b3,0x3ad95393,0x3aa0ff02,0x39abc0a1,0x3ac6b706, -0x3aeae304,0x3b1bec04,0x3b33a204,0x3b4a1da5,0x3b4e2182,0x3b4fc413,0x3b4deccd,0x3b046aff,0x3a803694,0x38e21923,0x3a2a4b9d,0x3a90f64a,0x3abe65c3,0x3af37400,0x3adde0b8,0x3b4401ba,0x3b11fe33,0x395d5a5d,0xbaab7b81,0xbb110658,0xbb5c8d31,0xbb9c71b4,0xbbb20b72,0xbbc57ca2,0xbbbd45d0, -0xbbcfd2a9,0xbbc4a395,0xbbd0b539,0xbb8fb8b0,0xbb1d69fd,0xba618b1f,0xb940aa03,0xba7af6ad,0xba44bff3,0xba985810,0xba70c91d,0xba8b6c80,0xba8c2744,0xba941ffb,0xba8696a7,0xbab1bc54,0xbad95d19,0xbaec94f2,0xbaef5ecb,0xbacd908c,0xbaab15af,0xbab22976,0xbac2dbe6,0xbad74355,0xbacfbbba, -0xbafc19d6,0xbacb3113,0xba0647c2,0xba95d539,0xb9fd023f,0xba8b73f8,0xb9eb02ff,0xb990eee0,0xb9f31998,0x390d87af,0x39c2c7bb,0xb9d53641,0xba895888,0xba63b0ed,0xba92546e,0xba98d063,0xba5ad370,0xbab148fb,0x3abf4b0d,0xba629f28,0xba437928,0xba4aca87,0xba61565b,0xba63a841,0xba6fc166, -0xba7929f5,0xba8af064,0xba8ef011,0xba96fd8c,0xba9ad468,0xbaa8b4ba,0xbab1c11c,0xbab45a0b,0xbaaf225e,0xbaacb00a,0xbaa8b54c,0xba9ea420,0xbadeceaa,0x3a79e941,0x3abbab6f,0xba85425f,0x3a6c3430,0x3ac99432,0xbaaf5284,0xba8c7e5e,0xba8e3377,0xbaa07ecd,0xba372853,0xba0e709b,0xba0b7bbe, -0x3ab73ae1,0x3a876b2e,0xba9df37e,0x3acb4664,0xba8afb09,0xbb68879d,0xbbb7bb5c,0xbb3d18a7,0xbb48b00f,0xbb6977f7,0xbb5b11ff,0xbb8e10d2,0xbb921630,0xbb81bffa,0xbb825818,0xbb77093b,0xbb5f9617,0xbb563a5c,0xbb5ed85a,0xbb836f7f,0xbb854d8f,0xbb859b9b,0xbb7fee3b,0xbb72ec55,0xbb53f395, -0xbb484116,0xbbc3c5da,0xbb8c0792,0x3b0b1513,0xbbcba7e8,0xbb90ccac,0x3b25b293,0x3acb16f5,0x3ac22e71,0x3b095b83,0x3aa7a227,0x3a880b7f,0x3a126776,0xbb8900f9,0xbbbdb120,0x3aec865c,0xbb7c9de1,0xbafb9925,0xbb900ccc,0xbb4447d3,0xbb887065,0xbb71dac7,0xbbd171f2,0xbbeaa863,0xbbc48137, -0xbbc45468,0xbba20186,0xbb770ad3,0xbb320e29,0xbb4dbb7a,0xbba9b5fc,0xbbc2446d,0xbbd24c58,0xbbc2686c,0xbbb08c9f,0xbb804c93,0xbb904d2c,0xbb0e530c,0xbb79ad07,0xbbb1d189,0xbb649088,0xbb3c4593,0xbb134869,0xbb3b0301,0xbb6cf170,0xbb1842af,0xbb25de7d,0xbae4f4e5,0xbb0d7932,0xbb01747b, -0xbb040464,0xbb92628e,0xbb67391b,0xbb3cb81c,0xbb35f506,0xbb2cd7af,0xbba1704e,0xbb6a9083,0xbc15d1a9,0xbc2d2775,0xbc0098bf,0xbc033df1,0xbbc8616d,0xbb93e6a4,0xbb4a08a8,0xbb80a715,0xbc0092b5,0xbc0a619e,0xbc11d5e0,0xbbfcd05a,0xbbc9d7cd,0xbb8c9996,0xbb478d60,0xbb8a5ab7,0xbb874ac1, -0xbb8eaceb,0xbb7adcd7,0xbb40e297,0x3a797fa4,0xba8289eb,0x39316f89,0x3abd8073,0x3b285cb1,0x3a89b589,0xba96fd75,0xb98ed209,0xba71f81e,0xbb7bdfc2,0xbaee961f,0xbb222991,0xbb3d78db,0xbaf37df9,0xbb80e8f7,0xbb20c48b,0xbc2f91d2,0xbc700173,0xbc4306c0,0xbc3b55bf,0xbc00b459,0xbb6d21e8, -0xb8980172,0xbb0dbf9c,0xbc1d0c03,0xbc4cd65f,0xbc64bb19,0xbc49d602,0xbc198235,0xbba4cd49,0xbb346a70,0xbb348d01,0xbb396c73,0xbb7f4f7e,0xbb66546f,0xbabe5276,0x3b9a78bc,0x3b56e1b7,0x3b8472d0,0x3bc51b55,0x3bb88f79,0x3bab6a8d,0x3b3bdc65,0x3b9de727,0x3ab258f3,0xbb8fc55d,0xbb487e7d, -0x3b96b663,0xbb58f617,0xbbad2061,0xbc25c9ec,0xbc458b84,0xbc47a71f,0xbc1621a2,0xbbde9e28,0xbb6695fb,0xbb24c48d,0xbb969570,0xbc1110a5,0xbc017543,0xbb60db04,0xba9aff66,0x3993f1b8,0x3a6564a8,0xbae1c5b0,0xbb48bf14,0xbb5d4776,0xbae1689c,0xba2f8bae,0xbacf6d11,0x3adc0832,0x3a5427da, -0xbaab3e31,0x3a8a1c7f,0x3b54bd4f,0x3b9b6e85,0x3ab411bd,0xbab1d0d5,0xbbb479d8,0xbc1ba82a,0xbbc3b019,0x3b8a53ea,0x3bea0532,0xbc9883fc,0xbc2b929a,0xbbdf9336,0xba868eed,0x3c6b1676,0x3b03c36b,0xbb4e13f7,0xb801e1fd,0xbbe76a76,0xbba89d61,0x3b89013a,0x3acbde48,0xb9c4180b,0xbb26772b, -0xbb8493ee,0xbbd40783,0xbc20e1f0,0xbbe5e406,0xbb82c564,0xbafad812,0xb9781870,0x3a31343a,0x397f99c0,0x3981ae4b,0x3ad62ee9,0x3b6a0b38,0x3b7a1587,0x3b1758f5,0xba1a03e0,0xba3c9f6f,0x3a8033e4,0x3bc7936d,0x3c23756d,0x3b8dba13,0xbc375362,0xbc867875,0x3c10e9d2,0x3c6d2e74,0x3b72b590, -0xbc0c39c9,0xbcba9a70,0xbca33312,0xbc6e6cb9,0xbbe996b3,0xbb9240f0,0xbb850393,0xbbcd6557,0xbb9e46b4,0xbb86d758,0xbb5db359,0xbac041e1,0x3845cdf6,0x39b627b0,0xba9a9ea0,0xba8ccb6f,0xbb21d7a6,0xbb3b9fd6,0xba90c46b,0xba86921c,0x3aa94ff8,0x3ad77e7a,0x37cc6814,0xb9f2e52c,0xb8f7e727, -0x39813331,0x3b65a23c,0x3b88b741,0x3b82703e,0xbb7434b5,0xbbbc1ac8,0xbacca6fd,0x3ba41cef,0xbbe3f2d1,0xbc1e5fa6,0xbc5d61b8,0xbc855f8a,0xbca89010,0xbc927fb3,0xbc5c5abf,0xbb5ca839,0x3af4980a,0x3b8fa1aa,0x3a6213fd,0x3b375b2f,0x3b18dd81,0x3aaacd4b,0xbb2717ea,0xbb8a0b09,0xbb8e54a2, -0xbb9b1155,0xbb675342,0xbb6b1afe,0xbb1d0e79,0xbb1e8902,0xbb51f937,0xbb5ed6f1,0xbb2f48b9,0xba8c85b9,0xbaf85bce,0xbb072a68,0xba5bd795,0xba90898d,0xb9bf6954,0x3a1cd7e9,0x3a61a8ba,0xb708361f,0xba884b10,0xbb825e1b,0x3b817acb,0xba851495,0xbbb18e9a,0xbbb0ebf8,0xbba41867,0xbbdea0df, -0xbbab287d,0xba0e5d58,0xbb284d96,0xbb99d4c6,0xbc1dddbf,0xbc08700d,0xbbedb9a1,0xbbba2940,0xbb068ef5,0x37e4413d,0x3a8f0d7f,0x3abef041,0x3a862b5b,0xba4b7b7a,0xba64fa83,0xba8f852c,0xba658e72,0xbacd5a38,0xbb1fa5b2,0xbb2dfab7,0xbb180c76,0xba61fb17,0x39b139dc,0xb9650185,0xb9bf3296, -0xb83776d0,0x3a747ebd,0x3ae92ebe,0x3b41f93a,0xb8ad193a,0xbbedbfc9,0xbc149a17,0xbc198a70,0xbbfd0ed7,0xbbd024ae,0xbb8983ba,0xbb54bfd1,0xbb806e3f,0xb9fbf081,0x3af4accb,0x3b4c6b2d,0x3af6a327,0x390a5c0b,0xbabbf642,0xbb03b816,0xbacd70d0,0x39fdc4b1,0x3a0d209e,0x3aa99fac,0x3afc8d6d, -0x3a88fed3,0xba2b4407,0xbb83479b,0xbb929cf1,0xbb7fd1bd,0xbb46e632,0xbb57ff5f,0xbb86bc0c,0xbb90a835,0xbbbda7e8,0xbbd31cb4,0xbbccae75,0xbc0999a4,0xbc29ad3c,0xbc3131e6,0xbc429209,0xbb7922c9,0xbb00e89d,0xbac18c08,0xbac97a4b,0xbaa92d0f,0xbadb3ca7,0xbacab1fe,0xbad849f9,0xbabb8c9c, -0xbacc3915,0xba8ed7fc,0xba1921f9,0x397a312b,0x3a7008ae,0x3aa8aa18,0x3ac4e7af,0x3aef62ef,0x3aa5a9b0,0x3a992bb8,0x3a1e65d9,0xba868925,0xbacafaef,0xbb20d1a3,0xbb2de01c,0xbb67d220,0xbb830584,0xbba78ab2,0xbbb477c1,0xbbeacb35,0xbbd4064d,0xbbe98f28,0xbbf6a7c8,0xbbd74af9,0xbbbd1c4b, -0xbba34cd3,0xbb86b09b,0xbab0d596,0xbb2bfa15,0xbb2affb9,0xbb524560,0xbb61eeae,0xbb7a5e31,0xbb8a38fd,0xbb9ada6a,0xbb75796d,0xbb350a82,0xbb01d825,0xba9f3bfd,0xba3d16dd,0xb9cfde13,0xba0351d8,0xba070d5f,0xb9ea7699,0xb9d694cb,0xb8314b4b,0xb9c3348e,0xbaf27c38,0xbb01edd0,0xbb549e52, -0xbb36ed07,0xbb6163e4,0xbb81ee10,0xbb65db9e,0xbb7a8890,0xbb72120e,0xbb591094,0xbb329e7b,0xbb2a2f49,0xbb28a86b,0xbb19f8ff,0xbb331c75,0xbb26af2e,0xbb6bdc51,0xbacb852c,0xbae3fbed,0xbb04f629,0xbb104201,0xbb1ddd10,0xbb2725d7,0xbb3e1a97,0xbb211cc0,0xbb152395,0xbb06a641,0xbaf3d12d, -0xbad40838,0xbaa3bc79,0xbaab33bd,0xbaaac8e6,0xbaaac631,0xbab0b3f6,0xbab35b49,0xba74beb1,0xbb65ddc6,0xbb57da60,0xb9c710fa,0xbb81ad1b,0xbb7f08c8,0xba136496,0xba3ce8e4,0xba4df47a,0xba25d420,0xba82e8a0,0xba8b11d1,0xba8c81d5,0xbb6106a7,0xbb7a7fb8,0xb62bf2bf,0xbb3fd4ed,0xbb163d22, -0x3b6170df,0x3b6f188c,0x3b86abb3,0x3b324282,0x3b487724,0x3b2f5938,0x3b626dd1,0x3b76f29a,0x3b7fdbc3,0x3b80ab31,0x3b80fba8,0x3b802241,0x3b835bb4,0x3b7dfba1,0x3b615628,0x3b579c52,0x3b517bf2,0x3b53a9b0,0x3b5cdf49,0x3b3eb6db,0x3b80cfe8,0x3b427fac,0xb9f75fa9,0xbbff9db3,0x3b7a5ac5, -0x397e4410,0xbbc60fbe,0xbbcba720,0xbbc3b5b4,0xbba68e96,0xbba79c58,0xbba8815d,0xbba9fef2,0x3a3ae9a3,0x3b9bad12,0xbbe4c660,0x3851f6be,0xbabd201a,0x3b9c5a0c,0x3b2b3937,0x3b324df3,0x3b0db08d,0x3b85cd63,0x3b9da2a1,0x3ba304b9,0x3ba97c73,0x3bb545be,0x3bbe9eaf,0x3bd05a86,0x3bc1e6a3, -0x3b92974d,0x3b7c4663,0x3b65ee7e,0x3b752c60,0x3b78899d,0x3b5ea069,0x3b878e3e,0xbb2a84f5,0x3a72eb1f,0x3a70b1ae,0x3976bf3a,0x39f3b4ef,0x3b76bc61,0x3b33f679,0x3b78c818,0x3b8dfc3b,0x3b90e108,0x3b7d4c62,0x3b209060,0x3b54fc5f,0x3ab1570c,0x3a1517d3,0x3b6e44d3,0x3b83376c,0x3b87f339, -0x3b2ab96f,0x3b0a5de5,0x3a977c26,0x3b8f9636,0x3bd226b8,0x3be64893,0x3bfaab95,0x3c05523a,0x3c008c0a,0x3c0eb9a5,0x3bfee652,0x3ba6fc22,0x3b8b9dcd,0x3b6c0cea,0x3b860037,0x3b7c8842,0x3b83b86c,0x3b326450,0x39eb0454,0xb9cf35e5,0xbab5bb03,0x382b38b6,0xb95c3000,0x3b88aa3e,0x3a1a7118, -0x3b2a4a5e,0x3b9ec162,0x3b7c6649,0x3b4c2e71,0x3ae23429,0x3b0c7df8,0x3b0bc485,0xba1b7fcb,0x3b8322a0,0x3b3de92f,0x3b743523,0x3abd17bb,0x3a8e25e4,0x370bdbf6,0x3baaf582,0x3be80cfe,0x3bf5e2d7,0x3c1040f6,0x3c2bbc50,0x3c38a656,0x3c63590a,0x3c500cff,0x3bf8a296,0x3bba18de,0x3b8cbfad, -0x3b98d7b5,0x3b8d3cca,0x3b728587,0x3b5301d2,0xba9e9490,0xba9b5a0a,0xbb47a92d,0xbad626e0,0xba2dc79a,0x3b9a578d,0x3b53a284,0x3b54e48a,0x3bc14b37,0x3bcc519f,0x3bb087c9,0x3b4078ad,0x3bab9d5f,0x3b55b400,0xbb4c5171,0x3b1e1e01,0x3c2bd9b6,0x3bf8d9ab,0x3bd49b77,0x3b61a44f,0x39a7343c, -0x3b5d2f99,0x3c122cb7,0x3c73d427,0x3c4c588d,0x3c20a6dd,0x3bd2081e,0xbaf83f9b,0xbb8be4c8,0xbb838a5d,0x39c01ff9,0x3b3f9578,0x3b8da8c7,0x3ba7a6f0,0x3bc8e8f2,0x3bac23e6,0x3a87b86f,0x3ae491db,0x39d3a3f2,0x3b4d714a,0x3b01cdca,0xbad69c78,0x3b013caf,0x3b7e8d7f,0x3b52a841,0x3afba6ad, -0xba3692ba,0xbb8c66a2,0xbbed3fb7,0xbb2e2ef3,0x3be9d9f8,0x3c4a715a,0xbc306fa0,0xbb2b8b5b,0xbbc70cb6,0x3ae71411,0x3c8092c9,0x3c1d827e,0x3bac5f03,0x3bac0925,0xbb180b4c,0xbb061464,0x3b92c7db,0x3b40c24c,0x3b077e97,0x3af47fcc,0x3b5b2c4d,0x3bb305c4,0x3c0c8f11,0x3bd7ecbe,0x3b9b4934, -0x3b0c93bd,0xb846881e,0x3a8fe648,0x3b0fbf0a,0x3adda187,0x3b3eb7f0,0x3b7a0f8b,0x3b5787e7,0x3ace3b61,0xba789f04,0xba1e2e8f,0x3ad45bd8,0x3bed4fdc,0x3c2b2fa0,0x3bb6d5e5,0xbc1b40a2,0xbc27b955,0x3bd2b526,0x3c8b05b2,0x3bacba4b,0xba556c3c,0x3b53e23e,0x3c0b6760,0x3c925fa2,0x3ce9bb2a, -0x3c80bef3,0x3befcdcc,0x3b893cc9,0x3c37e1c4,0x3c7dcdb5,0x3c83cc78,0x3c5ac89c,0x3c0861e7,0x3b14feb7,0x39b5e2f0,0x3a37dd60,0x3b3ac02c,0x3b1ec454,0x3ae8c92a,0x3a871265,0x3b57b696,0x3b1d9e5e,0x39366d38,0xb97fbaa3,0x390aef5e,0x3a146b89,0x3b7997c6,0x3b8aa3a3,0x3b6fd9d9,0xbb4d0cd1, -0xbbb8ff83,0xbaaa8f34,0x3b2d7b5e,0xbb9f0a7c,0xbbf19f12,0x3aee6b1f,0x3c2a6d49,0x3ca2cb8c,0x3c70553f,0x3c1b15b0,0x3bb01b53,0x3c0b9260,0x3c3594fb,0x3c1a3f8d,0x3c36392c,0x3c263ff7,0x3bf25fd7,0x3bc06e1d,0x3bb0692b,0x3ba6e85c,0x3b583ce0,0x3a463801,0xbac5c33e,0xbb25f0a0,0xbac43e75, -0xbb046e27,0xbb23d9ee,0xbafa8273,0xba072263,0xbaf780d4,0xbacc5987,0xba0dc1c2,0xba61573b,0x38b05dc6,0x3a875757,0x3ac8aaf3,0x3b01f540,0xba312770,0xbb15f28b,0x3b6910a4,0x3c4cedbc,0x3cc22b8d,0x3cc4d752,0x3cb82f28,0x3ca4a927,0x3c9c3b0c,0x3c97d287,0x3c5baba1,0x3c28980e,0x3c0b308c, -0x3bacabc5,0x3b6ba84c,0x3b63ccc3,0x3b23d82b,0x3aeb6465,0x3af0d623,0x3adc4456,0x3b133550,0x3b26e4ae,0x3addc874,0x3aad07a7,0xba5be771,0xbab7f30e,0xbafbf68d,0xbae85d7c,0xba940ebd,0x39e9b0a6,0x3b057412,0x3aae8fe0,0x3a9ad5a4,0x3acde318,0x3b0e6451,0x3b4debcb,0x3b4297cd,0x3bdb21a6, -0xbc254308,0xba58f35d,0x3a5ab80c,0x3a1c3b5f,0x3ac50593,0x3b4c2e55,0x3b93657b,0x3bea108a,0x3b7ec5a0,0x3b293b3d,0x3b15d540,0x3b71814e,0x3b94c489,0x3b8ea9f8,0x3b95b3e8,0x3b9e192f,0x3b969934,0x3b83e5a7,0x3b37d3aa,0x3aa31580,0x3a3992b7,0xb9b29c33,0xbb089cd8,0xbb101d3d,0xbb2ba9b3, -0xbb16c10f,0xbb1a6faf,0xbb4b6442,0xbb64029f,0xbb89fe83,0xbb916598,0xbb74ad05,0xbbc0b34a,0xbbd04f43,0xbc043292,0xbbd08b89,0x3a0c6bf8,0x3af555b7,0x3b1c28c6,0x3b49117a,0x3b7547a7,0x3b950431,0x3bb32765,0x3bdf2c03,0x3bd48414,0x3bd08791,0x3bbe7600,0x3b948bc2,0x3b58e2e8,0x3b0dbf22, -0x3b1e8710,0x3b23a15c,0x3b2e5113,0x3b3beb46,0x3b543805,0x3b6c8707,0x3ab7dc67,0xb9d6f876,0xbb01645c,0xbaffcd77,0xbb3a05ae,0xbb315237,0xbb9126ea,0xbb831651,0xbbb609f0,0xbbb0bc4b,0xbbccc746,0xbbce2742,0xbba9a762,0xbb878f8c,0xbb7ab11a,0xbab01a4d,0xbb411a8a,0x3a513499,0x3a3b68c7, -0x3a9e5661,0x3ac9cdbc,0x3afb38a1,0x3b0abe81,0x3b1d7809,0x3ad2136c,0x3a7fc612,0x3a172c8b,0x3957de21,0xb7e81c90,0xb9bb08a1,0xb94bd3e2,0xb90f020a,0xb8ae3d37,0x37b4ea96,0xb986b863,0x3a0fc617,0xba2ef32b,0x3a104898,0x3a7057fb,0xb96d861d,0xb97523c6,0x3a2e08dd,0x3a45df68,0x3a8a35bb, -0x3993d18e,0x3a3ba102,0x39a0d957,0xb9afabb8,0xb93fcdbd,0xba6b04f9,0xb9adc097,0x3990eca8,0x3afe52f5,0x3b1a44e9,0x3ae87247,0x3b01b0fb,0x3afc13b2,0x3b00ac0b,0x3b040185,0x3b1177b3,0x3b017ecf,0x3af062ca,0x3ad1ccb0,0x3ab896d0,0x3a9e4069,0x3a7aade6,0x3a8842c2,0x3a8cae18,0x3a8ef011, -0x3a9e6754,0x3a974996,0x3ab1de36,0x3adac7d4,0x37bebaf3,0xbb8babab,0x3b0fe888,0x37d2070f,0xbba31df8,0xbb9c7a8c,0xbb962d02,0xbb8a11f4,0xbb859c49,0xbb7cb931,0xbb6ffd39,0xb95763cb,0x3b1034bc,0xbb87a2c4,0xb95d2647,0x3b0c6284,0xbb9ee79f,0xbb0991e1,0xbbbf983a,0xbb8655ac,0xbb9956c8, -0xbb8b8612,0xbbacc1f8,0xbbb48157,0xbbb291fd,0xbbab7277,0xbba43baa,0xbb9ac9e1,0xbb93e01c,0xbb9675ef,0xbba49ba4,0xbbae1aac,0xbbb17ff6,0xbbaeea9c,0xbba948b3,0xbb925802,0xbbbd8fe7,0xbb1fadf7,0x3ab88a37,0x3be82612,0xbb777307,0x3aa1edea,0x3bf5b1be,0x3be56018,0x3be5153e,0x3be437d9, -0x3be5b7b8,0x3be1a385,0x3bd0ffaf,0x3aa827d3,0xbb833cba,0x3be345df,0x3b18dd7d,0x3b82e136,0xbbb42e3d,0xbb8ee46d,0xbb951d3d,0xbb7fbe45,0xbbd0fa54,0xbbf23d97,0xbbf0a7fc,0xbbe6f367,0xbbca96d3,0xbba98f0a,0xbb891388,0xbb93657a,0xbbc71adc,0xbbf19a37,0xbc02333f,0xbbfb8b19,0xbbe0a97d, -0xbbc983e6,0xbbaf67f9,0x3b194383,0xbb67eb35,0xbb808063,0xbb0c79e9,0xba881c6d,0xbadf0546,0xbb31ecbb,0xbb3f8d00,0xb8dd28cd,0xbb1785b4,0xbb217281,0xba8babc0,0xbad5b6df,0xb8c32547,0xbada5dff,0xbb6cd9c0,0xb8acf8ce,0xbb7f8011,0xbb9dac79,0xbb9d3811,0xbb7017ec,0xbc09822d,0xbc234e15, -0xbc21f3b6,0xbc11e722,0xbbebcca5,0xbbc663e1,0xbb8b18c6,0xbb9c85d6,0xbbf84e8a,0xbc1afa58,0xbc28f41a,0xbc1fb2d2,0xbc042b28,0xbbf99acb,0xbb5ae5ee,0xbb056127,0xbb4f6c43,0xbb7f62f5,0xbb41bd07,0xba4e4691,0x3a1c81ef,0x39e79135,0xbaa0ee12,0x3b6cff97,0x3ac7ed12,0x3b135831,0xb9025723, -0x3a243471,0x394a42ac,0xbaab3571,0xba361e89,0x3a7bab69,0xbb7231aa,0xbb55758d,0xbb2f2251,0xba95f9f4,0xbbfb4565,0xbc42790c,0xbc55aa9a,0xbc3c7753,0xbc0ffce4,0xbbba9579,0xbaef12cc,0xbb355f16,0xbc0d2397,0xbc56f324,0xbc786252,0xbc6b83a7,0xbc3d3706,0xbc156f5f,0xbb8749dd,0xba721906, -0xbb92d7c6,0xbb469953,0xbb703c8e,0xbb04bbdc,0x3b7077f4,0x3b01603e,0x3b4fa313,0x3bc226b6,0x3bc6c665,0x3b9a5db3,0x3b4e75ed,0x3b7f3b4b,0x3aab963e,0xbb65d9ce,0xbb0e6b9d,0x3bcaec59,0xbbccb018,0xbc24d528,0xbc4bc7be,0xbc5ec13f,0xbc7c8052,0xbc40bf32,0xbbec4dd4,0xbbdc899d,0xbbbf58c5, -0xbbc9bfe7,0xbc56b26d,0xbc51973d,0xbbf016ab,0xbb8c958f,0xbb2b497f,0xbb8e9988,0xbb98e275,0xbbdcc31d,0xbb6a125a,0x39c5f1b9,0xbb2ca450,0xbadb8714,0x3ac2c663,0x3abf0da2,0xbaec3d23,0x3b15198b,0x3b76e48d,0x3ad9b66d,0x3a3a332c,0xbada8043,0xbbab9481,0xbbfd19be,0xbb262466,0x3bd21d34, -0x3c082495,0xbc3e694f,0xbc04dd32,0xbc1ed26f,0xbabd243f,0x3c810a76,0x3bb00d07,0x3a3709c1,0x3b736cd7,0xbbb668d0,0xbbb3fee6,0x3a903832,0x3b520518,0x3b07e436,0xbb417441,0xbbc488e3,0xbc138528,0xbc39666b,0xbbf75782,0xbbc9f870,0xbb0c3cb5,0xb89a6f12,0xb903ce96,0x3a644726,0xb99ba064, -0x3a9076ef,0x3b480b45,0x3b224576,0x3a2d656f,0xbafc8213,0xbabd57ea,0x3ab12b9b,0x3bd3bd03,0x3c196dc7,0x3aa78190,0xbc4feccc,0xbc6dd3b4,0x3b9e54ca,0x3c6427c6,0x3a1371f9,0xbc469593,0xbcd310a3,0xbce00cda,0xbca7b3d8,0xbb20e608,0xbc05c926,0xbc0ed83a,0xbbf737c8,0xbc1ece18,0xbc1f558e, -0xbc01a328,0xbbb79648,0xbb264b7b,0x3a28023f,0xba99f7da,0xbb428430,0xbad15378,0xba7bc2f4,0xba559942,0x38e8c79d,0x3ace095e,0x3aa1d517,0xb81518b0,0xba981673,0xba67df73,0x38c146cb,0x3b42fa9e,0x3b3d709b,0x3ad3ac18,0xbb6f3737,0xbbbf3c1a,0xba91216a,0xb89e157f,0xbb77f175,0xbc09c026, -0xbc47c36d,0xbc64b062,0xbcac6fb2,0xbc8b9b29,0xbc505745,0xbb4a8a1a,0x3aa5239f,0x3ba3f63c,0x3b88be27,0x3bae58dd,0x3b96057f,0x3b24ed11,0xbb140e59,0xbbbeb76a,0xbbe595e6,0xbbec0da4,0xbbc8bfaa,0xbb8670f6,0xbaec2769,0xbb4324bd,0xbb54872c,0xbb496490,0xbb230a03,0xba95cb3b,0xbaff4b86, -0xbb0193bd,0xba90879f,0xbaa471f3,0xb942e368,0xb99d8698,0x3a9cfa78,0xb9825ad5,0xba1b6c2d,0xbb05d1c1,0x3bfd0cf3,0x3a15de9a,0xbb879464,0xbb03b180,0xbb40a08d,0xbb7fdea2,0xbb826f5f,0xbad4ec9a,0xbae440ad,0xbb371ecd,0xbbc34ba1,0xbbc41e3c,0xbbc71f83,0xbbb3aaae,0xbb03de83,0x38c8afd5, -0x3a2b9677,0x3abd343d,0x39f6676e,0xba2fb3aa,0x3a08e3c7,0xbaca4973,0xbaed96f7,0xbb0682ae,0xbb299f48,0xbb2cb866,0xba5dcedc,0x39df1e8f,0x3abc460c,0x387a14dc,0x393b56d5,0x39fa85ef,0x3addc6bc,0x3b3e760d,0x3b9504e9,0x3adf1cd3,0xbb4230f1,0xbbe7fb87,0xbc2037d4,0xbbf9e573,0xbbf57bd5, -0xbbc72d65,0xbbb966e0,0xbbca81c3,0xbae9c63f,0x3a56a402,0x3b1105df,0x3a4d22fb,0xb939c7eb,0xba8ecda3,0xba962c2d,0xba893faa,0xba0a2167,0xb9ede4f4,0x38fb5166,0x3adebf49,0x39199909,0xbad92d9e,0xbb5aed91,0xbb71ad79,0xbb59d2f7,0xbb3bd99e,0xbb54facc,0xbb6adf8c,0xbb7dc4ff,0xbb940402, -0xbb999caf,0xbb8db853,0xbbb0af13,0xbbf1d0c8,0xbc0aecb2,0xbc22156b,0xbb44ddc3,0xbb342c2e,0xbb64ef18,0xbb39c08c,0xbb446d36,0xbb397677,0xbb21131d,0xbb1a63d1,0xbadebd97,0xbac7dc03,0xba529310,0xb9a55c7d,0x39e78539,0x3aa92cd6,0x3a9af137,0x3a96cd92,0x3a84903e,0x3a1304b6,0xba06b13a, -0xb924c31f,0xb8845fbc,0xbaa7c883,0xbb2cf859,0xbb2830d0,0xbb1a544d,0xbb30d2da,0xbb4ba89d,0xbb9c515d,0xbba3719e,0xbbbedc2c,0xbbc1e6ec,0xbbe9e7a4,0xbbcdd399,0xbbb040f6,0xbb8b0e69,0xbb7d6540,0x3acb3c98,0xbb0cee35,0xbb25e94c,0xbb49e36d,0xbb6a0f5c,0xbb89af8a,0xbba1073f,0xbbb8687d, -0xbb9cc402,0xbb7cca79,0xbb44ab8d,0xbb05d071,0xbaa1a33c,0xb9d16c14,0xb9fcc43c,0xb9d7ede0,0xb9a92b85,0xb9559461,0x3928fde2,0xb994366f,0x39a9b021,0xbab81e77,0xbb02ddba,0xbaba2d85,0xbaeab509,0xbb40e49a,0xbb4b851e,0xbb47a966,0xbb13911e,0xbb489caa,0xbb4757cd,0xbb188dfd,0xbb1a03e7, -0xbaaa77ec,0xbacd9204,0xbb1feeb4,0xba9ad1da,0xbb1c9c86,0xbb00e3ae,0xbb1fc5ef,0xbb2fbeb0,0xbb3f07d8,0xbb4a2f21,0xbb6682d0,0xbb460c65,0xbb37c673,0xbb28b699,0xbb1af74e,0xbb0c3fb7,0xbae81992,0xbaeda96a,0xbae78b32,0xbae2e64b,0xbae7493f,0xbad43167,0xbaef55a3,0xbaabedb4,0x3a2f9634, -0x3b801ffc,0xbb0e9ac5,0x39b02e43,0x3b84c2d9,0x3b8152f3,0x3b6faf4b,0x3b55f2a9,0x3b5773b2,0x3b4eb23a,0x3b3b1529,0x3977661e,0xbb1ce333,0x3b7707ba,0x3a8b89a5,0xbb2b5cdc,0x3b4c71d7,0xba49990e,0x3b9cbd4d,0x3b23a7d3,0x3b357edb,0x3b173513,0x3b31e408,0x3b423981,0x3b545f6b,0x3b5fd728, -0x3b67d734,0x3b6cca4e,0x3b6db785,0x3b645d59,0x3b4f736b,0x3b45441a,0x3b3ef56b,0x3b3deeb2,0x3b415027,0x3b23024f,0x3b8fb61f,0xbab857ff,0xbbaa33db,0xbc13e44d,0x397c3f55,0xbb9293e1,0xbbfaa056,0xbc061ae5,0xbc039f71,0xbbda6aff,0xbbfbd983,0xbc00980d,0xbbf9cda3,0xbb8493fc,0x3abc1edf, -0xbc069e94,0xbba4f515,0xbbaf03b8,0x3b80f2da,0x3b4ef5b4,0x3b1838b0,0x3ad904a8,0x3b12a119,0x3b2a5abf,0x3b59f403,0x3b812378,0x3b983366,0x3ba7e1bb,0x3bb8ee1a,0x3bb3879a,0x3b91747b,0x3b718974,0x3b46e0c6,0x3b43f7dc,0x3b242ccd,0x3b3ab05c,0x3b22600b,0xbbc2f0f8,0xb9b148b7,0xbad4cadb, -0xba7fdbbb,0xba8cc18a,0x3ad0b490,0x3ac1bade,0x3adef6e5,0x3ab301de,0x3b2926f9,0x3b49cdb1,0x3ab226e4,0x3afd21fa,0xba09815c,0xbab62cf9,0x3b359e3d,0x38a4367f,0x3b43be4c,0x3b802103,0x3adaaff6,0x3a528bc0,0x3aadb5c3,0x3b22cc7d,0x3b8e2ccb,0x3bb73016,0x3bde128e,0x3be09d49,0x3bf3c061, -0x3bdbfdb3,0x3b954a32,0x3b744780,0x3b36f52b,0x3b43e74f,0x3b0e478b,0x3b59134b,0x3a3da818,0xbb35cb30,0xbb106e34,0xbb3bbe59,0xba0ee4ae,0xbadbc958,0x3b3fb2dc,0xba46fbc2,0x3b446c9b,0x3b438761,0x3b662c01,0x3aa085cd,0x3ab27fce,0x3a6b09cb,0x3a780ff4,0xbaf9b9da,0x3afcb232,0x3a00e477, -0x3b7a2133,0x3b8331e0,0x3aaca6be,0x36a7a151,0x3a03e4a3,0x3a088b06,0x3b382f67,0x3babacfe,0x3c016f95,0x3c1a317f,0x3c3ed678,0x3c3c9ec9,0x3bf976ec,0x3ba1a54a,0x3b308602,0x3b15af69,0x3a6c9014,0x3b015bec,0x3a47a99d,0xbb806ba4,0xba68b8ac,0xbb94c135,0xba919948,0xb7d10e4e,0x3b9d29a1, -0x3b309e54,0x3b282b7a,0x3beef42a,0x3bd1cc2b,0x3bbdbf40,0x3b8226a2,0x3ba38daf,0x3b0ed8eb,0xbb078149,0x3b125e55,0x3a12952e,0x3b0cd5e4,0x3bb426bc,0x3b130293,0xb9a9ce26,0x39925a85,0x3ba8f2cc,0x3c4f3786,0x3c42bfbe,0x3c3cabad,0x3c36c6f1,0x3b07bf37,0xba99e6aa,0xbaa8dffe,0x3adbebe8, -0x3b758a63,0x3bee1816,0x3bc6d914,0x3bd69815,0x3af96a34,0xbb45d308,0x3aa2efd6,0xb97137bb,0x3b2d3768,0x3acc8935,0xbb05ca7b,0x3b5dd1ca,0x3b94cc40,0x3a72f86b,0x3a5ac201,0xbacdc8fa,0xbba5beb0,0xbbc3a828,0xbb1562cd,0x3bb14a02,0x3b9be650,0xbc12f2e0,0x3aa255db,0xb9fa56a1,0x3b53ea74, -0x3c8225ed,0x3c079f8a,0x3b5d486e,0x3b873548,0xbb215900,0xbb0654dc,0x3b185715,0x3b803a86,0x3b4cb325,0xba00814b,0x3a9f87cc,0x3b1ebcf5,0x3bab38c1,0x3b40517f,0x3b3db356,0xba032a7e,0xbb254e3a,0xba3ffe9c,0x3a8483d7,0x3af8b3b0,0x3b4d8597,0x3b576011,0x3b0d4fc4,0x38d094a0,0xbb10d4ec, -0xba3a1d09,0x3b025c5c,0x3bf330d5,0x3c05dd95,0x3b2ddd69,0xbc3bf3f8,0xbc01b1fb,0x3a96da6e,0x3c6be14b,0x3a30f6e4,0xbbd403f0,0xbbc318ac,0xbbc36bfe,0x3ba7ef28,0x3cd64358,0x3c80e032,0x3c218c92,0x3c015ae2,0x3c2d2c08,0x3c4ab5d5,0x3c4fe189,0x3c3b91d7,0x3bfe4b24,0x3b7698d9,0x3aa0cb01, -0x3b2e025e,0x3b392e1e,0x3acdabe4,0x3b05925e,0x39c9cdcf,0x3b149b02,0x3ab96852,0x3932789d,0xba33ba1f,0xb93420d5,0x3a3546bf,0x3b417d70,0x3b15f3fa,0x398c8195,0xbb82763d,0xbb9c31f1,0xbb2e22ef,0xbb1222b8,0xbb61c3da,0xbbf74e60,0xba2b2f8b,0x3b71609f,0x3c243d50,0x3c007f46,0x3baeb019, -0x3bdd3115,0x3b7e8da5,0x3bbeca71,0x3bd9fd99,0x3c056713,0x3c01c054,0x3bc32de0,0x3b881cd5,0x3b2722ba,0x3b23a80b,0x3a8de142,0x3915f447,0xbb023842,0xbb92120f,0xbb2b6c08,0xbb133aa4,0xbb187f4e,0xbae9637b,0xba4d84bf,0xbaa84033,0xbad1d999,0xba72de3d,0xba78e57b,0x3a034712,0x3aa81c7b, -0x3aa6189a,0x3ae46cd6,0xb93bb4f2,0x37604f65,0xba71c43d,0x3b613040,0x3c78a0b0,0x3c87ac67,0x3c8c08d6,0x3c7548de,0x3c682e57,0x3c69b5a8,0x3c3048cb,0x3c0a1f2a,0x3bccec4a,0x3b44992c,0x3aab5285,0x3a3dcee2,0x3a7a6e0d,0x3aa51b65,0x3b098335,0x3a9b50f8,0x3afc846b,0x3b13f0ea,0xb889e9ad, -0x39c88531,0xbae32e7e,0xbb097626,0xbb0372ba,0xbaea3bbe,0xb8574751,0x3af34c8a,0x3ad9b382,0x3a99b9ae,0x39ebbae5,0x3998c184,0x3ad154a1,0x3b22171d,0x3ad654c1,0x3b2e06ee,0xbc368287,0xbb80a044,0x39b1a865,0x3982833c,0x3af1a48c,0x3b722973,0x3bacd78c,0x3be4cda6,0x3b93e194,0x3b5747ea, -0x3b49cc02,0x3b520c76,0x3b5f10c1,0x3b499f38,0x3b67d86f,0x3b7dc44d,0x3b84b9ab,0x3b7fef16,0x3b364c16,0x3a3dcff7,0xba13cc18,0xbaddefe7,0xbb7763d7,0xbb1c621f,0xbb0a1d1f,0xbb193e04,0xbb185787,0xbb3bcbbf,0xbaf3426d,0xbb246ec2,0xbb285272,0xbb02cde8,0xbb58659a,0xbb90d83e,0xbbf0aec2, -0xbbda56c7,0xbb20ac7b,0x39af3cfe,0x3adba901,0x3ac673cb,0x3b0fb435,0x3b30abce,0x3b707e35,0x3ba852df,0x3ba56abc,0x3ba6a749,0x3b9c7f03,0x3b891f14,0x3b6dd0b3,0x3b459cbd,0x3b4769fb,0x3b3d2027,0x3b3c016f,0x3b22ea75,0x3b3b5eb7,0x3b032ee9,0xb9e2b0e8,0xba994629,0xbb0ce830,0xbaf342ce, -0xbb25a49a,0xbaebafdf,0xbb6b970a,0xbb397ff4,0xbbaedcb6,0xbb9b743f,0xbbd0e389,0xbbd36fbe,0xbbccfb9d,0xbbcc2a29,0xbbdf0f8e,0xbb761a94,0xbb617e53,0x3a275c27,0x3a6a070e,0x3aa69ebc,0x3aeba625,0x3b109c40,0x3b1e9914,0x3b278dd0,0x3b063bba,0x3ae37adc,0x3acc8150,0x3aadbc33,0x3a886da4, -0x3a1d5a85,0x3a585422,0x3a828825,0x3aa1b668,0x3ab0e9c2,0x3ab66b49,0x3b061c92,0xba0e0a4e,0x3a909bc8,0x3a2b0a1d,0xb990038e,0xba806026,0xb9b320f3,0xb7c27d2b,0xb95c9ece,0xbaa5ab66,0xb9120fbe,0xb8665721,0xba7ecdf9,0xba04db67,0xba9b94d6,0xba5576e3,0x39c704c2,0xb8db0cad,0x3b2550e5, -0x3ae33cd7,0x3afe077b,0x3af97254,0x3afdd1f4,0x3b0577df,0x3b158ece,0x3b0e7a02,0x3b07b23d,0x3af725af,0x3ae2e0c0,0x3ad3f4f9,0x3abdd24e,0x3acc69aa,0x3acf6b7e,0x3ad10310,0x3ae19eb9,0x3ad29252,0x3b181aae,0x39329393,0xbb089f0f,0xbb97b158,0x3a14881f,0xbb202abd,0xbbb1a39d,0xbbb209ff, -0xbbac1ab3,0xbb9aa4d9,0xbba59337,0xbba18e32,0xbb9b8001,0xbb2db968,0x39b533b9,0xbb91d953,0xbb280c91,0x3b079c15,0xbb20e73d,0x3b23bc90,0xbb80d2f1,0xbb06dde8,0xbb19faf3,0xbb0cc747,0xbb252b39,0xbb2c1d38,0xbb3774f6,0xbb21c51f,0xbb18043d,0xbb13c2a9,0xbb061065,0xbb087978,0xbb13acb1, -0xbb310cd4,0xbb3cb6be,0xbb3ed442,0xbb381be8,0xbb1ef573,0xbb7dca3d,0x3b05c893,0x3b956a35,0x3b9cd355,0x3a6b6a3c,0x3b9b5e3c,0x3bb831a3,0x3bbaec2b,0x3bbedc9e,0x3bb785b9,0x3bcb6e08,0x3bcba192,0x3bc3b3c7,0x3b9c9b8f,0x3a1e0ca4,0x3bac05fd,0x3bb975da,0x3bc7d7e3,0xbb07c539,0xbb132776, -0xbadecbd1,0xbacde780,0xbb1b22dc,0xbb3dfaad,0xbb60ddd1,0xbb3ef2cb,0xbb1eee9a,0xbb017e0c,0xba9fb693,0xbab32919,0xbb0f7818,0xbb732fb3,0xbb8d07cf,0xbb8da5fe,0xbb74ce83,0xbb84e403,0xbb24461b,0x3b5df3a4,0xbad24653,0xba7ed81a,0xb8a54bfe,0x3a817011,0x3a15510f,0xb9dd88be,0x3925aec9, -0x3b3a9d95,0x398ecf9d,0xba1d3a28,0x3a97a947,0x3a03d3ee,0x3af688f3,0x3ac6b45a,0xba29d214,0x3b6070b8,0xbabe7e0a,0xbb44e096,0xbaddcac4,0xbaeac847,0xbb4d506c,0xbb62638a,0xbb9a32ac,0xbb420a2e,0xbaf9cb4f,0xbaff6b7c,0xb98f4671,0xba0e26a6,0xbadb8971,0xbb8f2f2b,0xbbb3eba8,0xbbb7332f, -0xbb9d3692,0xbbb6464b,0xbacb6138,0x397fcbc5,0xbab76846,0xbb27b876,0xba4d20a9,0x3aa1f4f4,0x3aa95fba,0x3adfdb4a,0xba222aab,0x3ba82417,0x3aa237a4,0x3b48bb3e,0x3acb6c3e,0x3af07853,0x3af40d60,0x3aa9cbf4,0x3af9f013,0x3b97e49a,0xba4ca86f,0xbab5c8cf,0x3a0f2d9f,0x3a156fa1,0xba5d9872, -0xbb3eb004,0xbbba0204,0xbb5c951f,0xbb00dfcc,0xba9519a1,0x3b18771c,0x3b3963f4,0xb967f994,0xbbaff8eb,0xbbffc862,0xbc053f77,0xbbe805ca,0xbbf50169,0xbb455ed3,0xb9ad9b84,0xbb958c60,0xbb35216d,0xbb20affb,0xbab02195,0x3b3f961c,0x3ac84af8,0x3b299e2d,0x3bc202fc,0x3bcda691,0x3b93d59b, -0x3b73ea23,0x3b6ee416,0x3b13c935,0xbac6879b,0x3a80c7e2,0x3bd638cc,0xbb82b5d1,0xbbfcbb66,0xbc090862,0xbc26d4ba,0xbc2e97db,0xbbc97448,0x39aa9e71,0xbaf09603,0xbb0b5726,0xbac1891a,0xbc2d0936,0xbc496915,0xbc14e747,0xbb902098,0xbb100030,0xbb940853,0xbb1aa927,0xbb718937,0xb954eb98, -0x3b0d4038,0xbb024256,0xb90b1360,0x3ae01d8d,0x3afb0832,0xbaf6ac42,0x3b7391a5,0x3b973cf4,0xb888ee01,0x39894642,0xbb0c62a8,0xbb93045d,0xbba5c37d,0x3a38b0c7,0x3bf89efe,0x3c06acd6,0xbb874741,0xbb340210,0xbc05b0a7,0x3a087144,0x3c7566e0,0x3c22d7e8,0x3bcc7d10,0x3bd181c6,0xbb33776e, -0xbb83c66c,0xb9b54ace,0x3ba64fed,0x3ba1d112,0xbacb7a99,0xbb712d1c,0xbba93947,0xbb9a1401,0xbb318011,0xbb7f23af,0xbad22a07,0xba291335,0xba503297,0x3adf746e,0x3745f07c,0x3aa1be12,0x3b26d9cf,0x3aa87ee3,0xba48cd04,0xbb3acd12,0xba8c571f,0x3b109768,0x3bc337a5,0x3bed3bd7,0xba40b1ef, -0xbc383851,0xbc24a9aa,0x3a554fc1,0x3c2662e7,0xbb6b6746,0xbc3848be,0xbc74eb92,0xbc9abc76,0xbc373875,0x3c219096,0xbaecf0cc,0xbb9a233d,0xbb281edd,0xbba9b8fb,0xbb9cad4a,0xbb20d87f,0xba913608,0x39868bdb,0x3af952fe,0x3938589e,0xbb10148f,0x3a6b010d,0x3ae0a40f,0x39d7ad4c,0x3ab57e50, -0x3afc549e,0x3a75cfa1,0x38fcc864,0xbab06484,0xba8a968c,0x3a07ebb7,0x3b06ff27,0x3a94a0d6,0xba5483fe,0xbb18e05d,0xbb86e738,0x384d1847,0xbb7262e0,0xbaa40ffc,0xbba8368f,0xbb830947,0xbac32404,0xbb9129a1,0xbb120af0,0xbae91664,0x3a220df9,0x3b47590a,0x3be54466,0x3c137498,0x3c0df8fa, -0x3bf6740a,0x3ba04daf,0x3a8e78d9,0xbb28b45a,0xbb952db2,0xbba652a3,0xbbb0e92d,0xbb5934ac,0xbaee7ab1,0xbb41c9c1,0xbb3754c0,0xbb112a59,0xbadcf506,0xba849302,0xbab406c6,0xbaaaadd0,0xba9f3458,0xbaa2cf3e,0x37ff3996,0xb9f2b183,0x3a6f8794,0x392035a4,0x3a4347ef,0xb97c6146,0x3bd6d03f, -0x3b4d3a46,0x3b80e7b9,0x3be9254a,0x3bc26b49,0x3bd00e9b,0x3bb022d5,0x3ba19159,0x3b9b12cc,0x3b80b0bd,0x3b713d2d,0x3aa2d3fd,0xb9a842dd,0xba7bdabe,0x386c9da2,0x3a805829,0x3a7efaf0,0x3ac73401,0x3a45e2e5,0x3a48bc62,0x3ae1efd7,0xba8d6376,0xbb1b9e31,0xbb239e0c,0xbb21ee02,0xbb063fa4, -0x3a02e754,0x3acb069e,0x3b0bf867,0x3a4d2bb5,0x3a8cd7af,0x3ab8e7b5,0x3b38ec01,0x3b7ed30a,0x3b872406,0x3b678904,0xba70822a,0xbb30a33b,0xbb83dd75,0xbb0f4d84,0xbb35b619,0xbb2c95a3,0xbb35f33a,0xbb1da10f,0xba07742b,0x3a067788,0x3a9699a3,0x3a12d5fc,0x3a69defd,0x3a905842,0x3ac32323, -0x3a9b4430,0x399cf50b,0x3934a7b6,0xb96d1a5c,0x3a01ea4c,0xba83c836,0xbb1538de,0xbb0c6862,0xbb107180,0xbb1919e5,0xbb2f0e7a,0xbb409fda,0xbb38caea,0xbb2c6e81,0xbb1cf02f,0xbb088052,0xbadbadd5,0xbb0609ac,0xbb552f35,0xbb9ff742,0xbb9e0301,0xbad9160b,0xbb05ed69,0xbb53bbc8,0xbb16412f, -0xbb207e5d,0xbad36e8c,0xba669384,0xb98558eb,0x3a117271,0x3a88f3dd,0x3adaf5de,0x3ac0695f,0x3ab147c0,0x3abf89d5,0x3a9ea285,0x3a973bae,0x3a789a18,0x3a2c0cab,0xba26b56f,0x38e3c0df,0x3a63f064,0xba25e5dd,0xbb031942,0xbb0b8624,0xbae34056,0xbb0d3b71,0xbb0c9a70,0xbb74a2ae,0xbb4e7086, -0xbb9d7ee7,0xbb9d5a52,0xbbca1f8e,0xbbb5f360,0xbb9f72f3,0xbb86c114,0xbb5a2685,0x3af72753,0xba2883b2,0xba89e6df,0xba845b11,0xbaa5b6e6,0xbad36621,0xbb08dba1,0xbb203a8e,0xbb1ba068,0xbb0e75d1,0xbaf0ae94,0xbab39d6e,0xba50b677,0xb8f5e2c2,0xb8e8170a,0xb871c407,0xb7dfab27,0x38cc6092, -0x394c7891,0x38ec0951,0x3ae282f2,0xb948d002,0x37909420,0xb5c162b8,0xb793d272,0xba7fffba,0xbac58f7b,0xba9a8dc9,0xb9fc2016,0xbadb83a3,0xbb1043f3,0xbad0a682,0xbac5875d,0xb9ee09cd,0xb9953380,0xbaa89dfb,0x3a8cec9d,0xbaec2f86,0xbaa3d69d,0xbac8c49f,0xbadb34cd,0xbae34d00,0xbae708c1, -0xbaf93034,0xbae1f82b,0xbad7ae88,0xbad25d99,0xbac99a98,0xbac5640f,0xbab7a93b,0xbab797f1,0xbaaf3c33,0xbaa91f8d,0xbaa52634,0xba8d6036,0xbad47398,0x3a80d99c,0x3b371202,0x3b690826,0x397d020e,0x3b2fd62c,0x3b677926,0x3b69c0b2,0x3b571142,0x3b3403ef,0x3b48d4ce,0x3b441ec1,0x3b2d6766, -0x3b061871,0xb986e237,0x3b4005b7,0x3b3471cb,0xbae1677c,0xb78ba087,0xbb86cf25,0x3aa76f7a,0xb7a69040,0xb8fcb193,0xb9ad6948,0xba4595d6,0xba41ec67,0xb9d9fc92,0xb8d17528,0x3909e272,0x3995edab,0x39adcefe,0x397b3e5c,0x38c34f82,0xb9304d0a,0xb9958835,0xb9b4e741,0xb9a96aba,0xb9c0b687, -0x3a6113ed,0xbb96f2a1,0xbbba834e,0xbb6bccd5,0xbb647ffb,0xbbad8bc2,0xbb42b0c1,0xbb6c4154,0xbb6b8296,0xbb2a2960,0xbb7a0302,0xbb83c86e,0xbb782b14,0xbba75377,0xbb34eecc,0xbb4977bc,0xbbb46769,0xbb8844a2,0x3714ef41,0x3a892501,0xb9383db2,0xba12cbef,0xbb10ee27,0xbb2d2257,0xbadd1ed9, -0xba65d176,0x384cba7f,0x3a2f8661,0x3ab4e4c8,0x3ac2515b,0x3a67f281,0xb982e1f6,0xba948ce8,0xbab94f00,0xbaeee74c,0xba73d9d1,0xbadbf34c,0xbba46579,0xbb14e2a8,0xbb8221cf,0xbaff31c8,0xbaf21f26,0xbaa14981,0xba59c9ed,0xbab63205,0xbabd0a14,0xba28e879,0x39b6a01e,0xb935f35c,0xb99d9d2c, -0xbac6666a,0xbb1d98c5,0xb8053567,0xbb213e54,0xb9ad1a13,0x3af30568,0xba37644c,0xba7a0e11,0xbb90f241,0xbba1fd92,0xbb34ad6c,0xba8b4d99,0x3a3b87d0,0x3a8ea6fd,0x3b01e1c7,0x3ad99633,0x39e70a6f,0xba8f3e0c,0xbb139346,0xbb1e6c8e,0xbb342dc8,0xbab1d048,0xbb1dba0a,0xbb97fd74,0xbb69e072, -0xbb813906,0xbab2fba2,0xbaffc4dc,0x3a5c1a80,0xba78848b,0x3adc7959,0x3ab1cf6f,0x3b019c32,0xb7a83763,0x3a45dcda,0xb8dfd069,0xb83ad9f4,0xbb014b02,0xb9c1687b,0xb9f22b1a,0x3abb0743,0x3b800d90,0x3a73cd77,0x39014429,0xbbbb11a1,0xbc0bdaf6,0xbbc50f2e,0xbb4a7a70,0xb888f478,0x3afae3ae, -0x3b9371eb,0x3bb1233f,0x3b41d191,0xbab5a479,0xbb908b4e,0xbbb08d1c,0xbbc6240f,0xbb6fb27d,0xbb59e925,0xbba0bcaf,0xbb0ba1c9,0xbba4900e,0xba98d06e,0x395a5e67,0x3b82505a,0x3b087aa8,0x3b1a9867,0x3bf614bf,0x3bc6daae,0x3bb26ef5,0x3b9b14b8,0x3b878285,0x3aa4c909,0xba5c62fc,0x3a8cb6b6, -0xbbb34c36,0xbbab88ec,0xbaf35bd9,0xbb992bc5,0xbbd720d8,0xbc007dbd,0xbb8ba23c,0x3b41c145,0x3b886876,0x3bc1d46c,0x3c090dd4,0xb8d8bfd1,0xbb4f0998,0xbb1224d9,0x3997a67f,0x3b069f75,0x3ba069e4,0x3b4894bd,0x3b1967d2,0xbb0b3451,0xbb84a4b3,0xb84b4241,0xb9712c3d,0x3ad7bad6,0x3a886528, -0xbb05ceb2,0x3b92e432,0x3ba58996,0xb9a74573,0xb9ef6c22,0xbb3ebd65,0xbbb51aca,0xbb96f577,0xbaa2bfc7,0x3b81f177,0xba3a60c8,0xbbe4bc04,0x3abd7db6,0x3b138987,0x3b72bb86,0x3c62178d,0x3bdf3d72,0x3b18d881,0x3b227fd5,0xbb550d37,0xbb4255c0,0x38b4f44d,0x3b9bd4d6,0x3b905e98,0xbb1f6797, -0xbb2cdce0,0xbb75f12f,0xbb48d5ff,0xbb5ef77e,0xbaf72082,0xbb67dfac,0xbb64f51b,0xbb02ca81,0xb822e490,0x3a89ac36,0x3b123e1f,0x3b22f6e4,0x3a811aa6,0xbaa37734,0xbb4ca9fa,0xb996fbfb,0x3b2851b7,0x3bc4121b,0x3ba64af1,0xbab66d13,0xbc4a1158,0xbc012692,0xbb20bde6,0x3bc5e855,0xbbd8b1f4, -0xbc59d5ec,0xbc8a4d93,0xbcbaa476,0xbc69c77c,0x3c0f5dae,0x3bd7893d,0x3bc70c29,0x3bacbea5,0x3b29505c,0x3ab41f0d,0x3af74cd9,0x3b71fb6c,0x3b7e9254,0x3b7db30f,0x3ae16c5d,0x3b1e727a,0x3a819946,0xb822994e,0x3a84663e,0xb87141bc,0x3a57a28b,0x397f5788,0x38bf2b6e,0xba9762d6,0xba187e71, -0x3a6e8cb0,0x3abd75e8,0xb8710877,0xbb30bd88,0xbb598f83,0xbb423a8e,0xbb1a2a40,0xbb984a6f,0xbae8c176,0xbba817a1,0xbb8850d2,0xbbb379b0,0xbbcb7070,0xbb884d90,0xbb30ed04,0x3b64d3d1,0xb9fef4cf,0x3abc80b8,0x3b803b4e,0x3b8f4a64,0x3b910a6b,0x3b5fc7ca,0x3a195af3,0xbb0dc278,0xbb3ce27b, -0xbb63ba68,0xbb2bca18,0xbb43fc57,0xbb9912f1,0xbb67e333,0xbb37afdc,0xbb09c136,0xbac23cd6,0xba9225d9,0xba1a8d59,0xbaabe0a2,0xbab245eb,0xba8e56e4,0x39f60abd,0x3a4f4fc8,0x3a17793a,0x3a46bbf7,0x3a94f72f,0x3a8b8bcb,0xbb291b6e,0xbbc7102a,0xbad61b1c,0x3a143026,0x3b4573a6,0x3b43d109, -0x3b75b0f8,0x3bb41ad4,0x3b99e885,0x3b66a465,0x3ac325f8,0xb9e982cf,0xbad0c549,0xbb149684,0xba1ed2fe,0x3a230359,0x3ad6a94b,0x3a804e0f,0x3a952668,0x3a672924,0xbaa8e57a,0xbab19d1c,0xbb29e1e9,0xbb3931ba,0xbb154794,0xbae3409a,0x3a163ba9,0x3b111d88,0x3a8928bd,0x3a5eea63,0x397c2ea7, -0xb8d3447c,0x3ad295bc,0x3b0a1581,0x3a7b41f7,0xbac3da09,0xbbe1eed9,0xbbc36c30,0xbae095a8,0xba32ac2f,0x3a561e13,0x3ad4fafa,0x3b0eaabd,0x3b0062e3,0x3b1f9c55,0x3b27d0d1,0x3b32cc6c,0x3abbc164,0x3a4fb585,0x3a01d34c,0x3a54b443,0x3a89de6d,0x3aca345c,0x3ae219f4,0x3a9ba69f,0xb9079c64, -0xbae8623a,0xbb39a410,0xbb8b3e77,0xbb375229,0xbb0c52e7,0xbb2abedb,0xbb29c36a,0xbb2b8ed2,0xba585075,0xba88b957,0xba677205,0xba1f1f5f,0xba8438d7,0xbb23f4b6,0xbba300e2,0xbbb97cc8,0xbba6c5aa,0xbb2277b4,0xbab4ec8d,0xbaf358c7,0xbab8ab5f,0xba937f99,0xb9a71bec,0x3a1b7dbf,0x3a8259bd, -0x3aa2a584,0x3ac93024,0x3ae9c0f6,0x3b08ace5,0x3b14ff9c,0x3b0f5a85,0x3b09dda0,0x3b0f7162,0x3aa23a36,0x3a7d22ac,0xb9d1b31c,0xbade3912,0xbad4ec5b,0xbb05246e,0xbaff832b,0xbb1804ff,0xbafb551f,0xbb3d43b4,0xbb2dc651,0xbb96deef,0xbb8f6387,0xbbbfaf49,0xbbd05321,0xbbdd720e,0xbbf23dbc, -0xbc05b0ba,0xbbbfd915,0xbaf29295,0xba0ad128,0xb92dd7af,0xb8b249c5,0x39795370,0x39abdf33,0x399910ec,0x39295579,0x39bee037,0x3a36d659,0x3a83e8d2,0x3a9ed59c,0x3aa2c71b,0x3a92adc2,0x3a9cb207,0x3aa41cf8,0x3ab96a3e,0x3abcfdff,0x3ae436f4,0x3ae9c4c5,0xb95db590,0x399a877c,0xba44254e, -0xba7f0710,0xbafe1276,0xbb12d074,0xbb011eb1,0xbb207cc9,0xbb4133bd,0xbb0bc7fc,0xbae370ec,0xbb0fa09a,0xbad5fe04,0xbac8576d,0xbac06ed1,0xba2b68c8,0xbb2387c5,0x38ba5ee0,0xb9977ac0,0xb991807e,0xb9948814,0xb988d2b7,0xb91ff477,0xb843aaba,0x38b3a8cc,0x38c9c892,0x38ad62c8,0x38bf63bf, -0x3923ab4e,0x397aac0e,0x398cf46b,0x3990fc21,0x39910dd2,0x39ae6b76,0x398b4e39,0x3a6b576b,0xbaf02930,0xbb3e134b,0xbb04b8c9,0xbb09060b,0xbb68eb0a,0xbb28aead,0xbb351a27,0xbb3625a8,0xbb25b369,0xbb46e68a,0xbb4abd61,0xbb4cd012,0xbb769a85,0xbb26301a,0xbb09f698,0xbb5c1b56,0xb9e88a8a, -0x3aafd155,0x3b8fcf77,0x3a3dab3f,0x3a95665f,0x3aa466b4,0x3a8996a9,0x3ab1b8f9,0x3abfafa3,0x3ab0359d,0x3ade35c1,0x3ae9029f,0x3ad56ed6,0x3ae9d4a8,0x3ae863a7,0x3af2c025,0x3ab39b62,0x3a97dc47,0x3a82cd6f,0x3a8829e9,0x3a648015,0x3a15b1f7,0x3b79192b,0x3b4a0132,0xbaeea5f4,0x3b8049f6, -0x3b7275fd,0xba2cfc03,0xb9a574e5,0xb9059c35,0xb871baed,0x39c5e56c,0x39e7a33b,0x3a2929d4,0x3b786112,0x3b83983c,0xba527ec4,0x3b7f58fc,0x3b599009,0x3b2e5719,0x3ac7f181,0x3b05b8c9,0x3abca75e,0x3b0a78b1,0x3b125ae3,0x3af8651e,0x3b29a86f,0x3b391a59,0x3b32f82c,0x3b57bbd6,0x3b5de8e2, -0x3b5baa13,0x3afbd00f,0x3aa2ebfd,0x3a56f157,0x3a5a20d2,0x37955575,0x3aa2c5ab,0x3a1965b3,0x39a7343f,0x3a86c4d0,0x3aa0b5e1,0x3ae8ceef,0x3b1c14bd,0x3afdcf59,0x3b38a9d7,0x3b7f6895,0x3b301023,0x3af7ef42,0x3b3361fe,0x3b1d36ae,0x3b16f859,0x3b3705e5,0x3b32d08a,0x3b957b71,0x3afb06dd, -0x3a8cd4d1,0x3affa5fe,0x3a364565,0x3b0af016,0x3b4df690,0x3b18a572,0x3b917f54,0x3ba3da81,0x3b7f1dbd,0x3ba7278d,0x3ba4d37f,0x3bb1cf9c,0x3b2f1b1e,0x3ab5dca2,0x3a1abcdc,0x3968cdb8,0xba43b89a,0x39af1a3b,0x3a31b1ba,0xb982ca3f,0xbaad3052,0x3aa321ef,0x3aeef99c,0x3b084081,0x3af03856, -0x3a922b2f,0x3b92ce0a,0x3aaa347b,0x3b1fcfab,0x3b2b39b7,0x3b08f93e,0x3b2832df,0x3b132a25,0x3b6fca85,0x3bbb77a6,0x3b516b22,0x3b2c5ef1,0x3b788303,0x3b0aaf35,0x3b8d2ab8,0x3b940176,0x3b395112,0x3bb9190d,0x3bcf48c1,0x3baf21b9,0x3c05116d,0x3c21c11c,0x3c1f09fb,0x3b9db861,0x3afacebf, -0x395b2915,0xba6113f7,0xbb388e37,0xbaa391e5,0xbabf8138,0xbb4d7346,0xbb47e941,0xba08cfe7,0x395ffa80,0x3b34ae01,0x3ae7a896,0x3b117bbf,0x3bc32613,0x3bc34c65,0x3b947fe9,0x3b90209c,0x3b69ecb3,0x3b389c8e,0x39e40324,0x3b800d56,0x3b6e3d1e,0xb9d440fb,0xbb008eb8,0xbb17f209,0xbb986f12, -0xbb4e35bd,0x3adce0e2,0x3c1dbec9,0x3bd812c1,0x3bb4c6b0,0x3bdee1d5,0xbb5b4775,0xbbf5ad93,0xbbf7d4b7,0xbb1ec049,0x39bbe9c0,0x39224138,0x3b3bd7b5,0x3b3c6bf2,0x3b52838f,0x3afb8d82,0x39bb377b,0x3aed63a4,0x3b033352,0x3af2a65c,0xbaf1c045,0x3ba05b34,0x3bb034f7,0xba2aff80,0xb9a551b7, -0xbb41373a,0xbb895292,0xbb2a329a,0x3b1c79d8,0x3bdb85f2,0x3bbbd2b3,0x383c30e0,0x3b4e674c,0xbad1ec22,0x3b874b7c,0x3c48781e,0x3c4adfe9,0x3c205780,0x3bd53781,0xb9cf5986,0xbb08c009,0xb9d85ec7,0x3bc7898f,0x3be1ffd7,0x3a51cbae,0x387a391a,0x39c5697d,0x3b6c48db,0x3b37c31a,0x39a20e56, -0xba9cbae8,0xbad0eb6b,0xba9e425e,0x3ad4eff6,0x3a328dc2,0x3adc3584,0x3b114486,0x39b2fc40,0xbaf16f39,0xbb4f0df1,0x39567428,0x3b54d0c8,0x3ba54f64,0x3b884c89,0xbb17c8bd,0xbc1c1b53,0xbbbcbe3d,0xbb1f2906,0x3b1a4d98,0xbc067a44,0xbc18d4d7,0xbadb901d,0xbbc064b8,0x3a34bc52,0x3c8bde64, -0x3c14e769,0x3bb36a90,0x3b9e11ea,0x3b88fccf,0x3b9da2da,0x3bcc3de0,0x3bd293b8,0x3ba7d3ab,0x3b621acb,0x3b0d1b34,0x3a1fff0a,0x3b337285,0x3b4f7533,0x3ad426c5,0x3af79e83,0x3ae9a66b,0x39f6b808,0x38e25d93,0xba9387f4,0xba2a49cc,0x3a93bcef,0x3a725c9a,0xba22e460,0xbb35178f,0xba8da54c, -0xbaee4995,0xb9188677,0xbb8d95f4,0x3a1e47de,0xba3cef13,0x3ba9dbf4,0x3c2cc5cc,0x3c6a3e18,0x3c517e72,0x3c16cc3d,0x3b94676a,0x3b887e65,0x3be09993,0x3c2a6249,0x3c1ff77c,0x3c1129dd,0x3bdc5988,0x3b8f880a,0x3aff8bbc,0xb8520745,0xba8b4179,0xbb2efc1a,0xbb13de55,0xbb2be90c,0xbb34590f, -0xbb1835a9,0xbaae5aa6,0xba3d05d0,0xba4f3b0e,0xba0d96c8,0xba197406,0xbaa05c44,0xba84babb,0x398390e7,0x38809fce,0x3a091817,0x3a9284d2,0x3b195067,0x3aadc31a,0x3ab5947e,0x3b51fa37,0x3c20afea,0x3c4b617c,0x3c4dd1ed,0x3c71d736,0x3c6f4f3b,0x3c5255d9,0x3c3e97d4,0x3c2df3e9,0x3c43e7ff, -0x3c057192,0x3bb73c2a,0x3b74a8dc,0x3b245fcc,0x3af418ff,0x3aa0b5b7,0x3ab897d7,0x3aa61591,0x3afc03f6,0x3ab520e6,0xba327891,0xbb2c3fa3,0xbb38c354,0xbb0d3a2d,0xba87365a,0x3a9d7085,0x3b0e509c,0x3b0d7276,0x3ae2fcf2,0x3afae1e3,0x3b03f023,0x3b547fa8,0x3b6f4f8f,0x3b0ace17,0x3b697e00, -0xbae8080b,0x3ac9da62,0x3b670f2a,0x3b90670c,0x3b898f1b,0x3b5256c4,0x3b2b35ba,0x3b6e7d48,0x3afd9bf2,0x3a75eeac,0x3a02e5bd,0x3a6292df,0x3b0869c5,0x3b49d0c0,0x3b730201,0x3b60f9b1,0x3af679e1,0x3ace6687,0x3940b9f9,0xba7eee73,0xbb041dfb,0xbb25080a,0xbaba6b9a,0xbaa61e50,0xbae0204b, -0xbb1cfbae,0xbb16f75c,0xbaef47c5,0xba5b3351,0xb86d7465,0x3a13e957,0x3a84b7ac,0x3a831c41,0x3a553c47,0xba69350c,0xb6bcd9dc,0xbab8aab7,0xbab0f655,0xbae15472,0xba641fc3,0xb9ddb10a,0x3a495c60,0x3aec1fc3,0x3b3eb117,0x3b5a007d,0x3b73c4df,0x3b76714f,0x3b43bcfc,0x3b09e8f8,0x3ab9b5ed, -0x3aa6d79a,0x3ab13bc5,0x3abb8e7e,0x3a8d61e1,0x394f7d3b,0x3a001a80,0x3a419c37,0xba01a7ed,0xbabeb42f,0xbadc81ba,0xbadb4ed7,0xbafa229d,0xbb0be895,0xbb2f5340,0xbb26fd09,0xbb7f6e58,0xbb8d8ffc,0xbbaa43f5,0xbba567e3,0xbba2d9e6,0xbba60b04,0xbb5b94e1,0xb7f542d0,0x3a348ef2,0x3a26d79a, -0x3aa3f0f5,0x3abe7bea,0x3ad46e02,0x3adab760,0x3afa90ec,0x3aacbb87,0x3a66288e,0x3a2f3994,0x39ff59d7,0x3a0a348d,0x3a212137,0x3a2836f3,0x3a0e0669,0x39eb3460,0x39e94998,0x39729088,0x3a0a8f93,0x3ab7df96,0x3a3502e5,0x3a9c056a,0x39e3d8e8,0x39f81257,0x3982b42f,0xb95284bf,0x389f5725, -0x387ab82e,0xba0995bc,0xba9a7dfd,0xba9e9388,0xba615e7d,0xb9d2cc04,0x3930ab77,0xb897fab3,0x3ac693d4,0xb9cc0264,0xb94d46f2,0xb8ce9506,0xb811dc77,0x391829e1,0x39a9a3b9,0x3a1ae6d5,0x39c72ee1,0x398d8170,0x38ca0a8b,0xb771d501,0xb928b2c6,0xb9a70924,0xb99fc815,0xb98dafe8,0xb9893f88, -0xb93c1fc4,0xb8e1ead3,0xb9ef44a8,0x3ae0ef19,0x3aef8a12,0xb9a2fa06,0x3abe2318,0x3ae42788,0xba4bab09,0xba2dad73,0xba48b90f,0xba8351ea,0xba3f4e94,0xba363e41,0xba67d4dd,0x3a66ac34,0x3a566cef,0xba8901a2,0x3aa2f772,0xb98bd49f,0xbb41c0a5,0xbb76d6c6,0xbb430ad6,0xbb1be0a6,0xbb36dd64, -0xbb2e93d6,0xbb6f8769,0xbb7c861f,0xbb6ff760,0xbb55b651,0xbb450b58,0xbb3e15a1,0xbb340957,0xbb340e3c,0xbb2ec8ca,0xbb4acc61,0xbb559607,0xbb5e9028,0xbb5bbe47,0xbb42dca6,0xbb54ce2a,0xbb86e089,0xbb030a7e,0x3b5d9254,0xbb87ff2e,0xbafa62cf,0x3b5fee09,0x3b496928,0x3b441596,0x3b4a837d, -0x3b25309f,0x3b1d1ef9,0x3b255d8e,0xbb05d248,0xbb8b5def,0x3b6e9afb,0xbac63547,0x3a22df0e,0xbb569362,0xbab5d6f1,0xbb0e027a,0xbb0ef025,0xbba6f0f8,0xbbc74b2a,0xbbb42559,0xbb9a6711,0xbb802d80,0xbb6235f2,0xbb271a8c,0xbb1285a3,0xbb15455c,0xbb79eb7d,0xbb9c6210,0xbbae184b,0xbbad8340, -0xbb953b46,0xbb9c0659,0xba94ecd5,0xbb4d94e5,0xbb84d0d7,0xbad40591,0xba8c0648,0xbb213adf,0xbb0a2768,0xbb3ae544,0xbb07d037,0xbb2d0116,0xbb02756e,0xba42dd13,0xbacf9f70,0xba6fd105,0xbabbdf86,0xbb09566a,0xbafc24c1,0xbb3e45ed,0xba9e8e51,0xbb1c7fa0,0xbb07de74,0xbbf667cc,0xbc156b93, -0xbc02b818,0xbbc552c1,0xbb8ceae1,0xbb887361,0xbb341b5f,0xbb2ab9bd,0xbb1f1696,0xbba3e6f3,0xbbcf0d2f,0xbbe6c374,0xbbd6a5ce,0xbbc22cf3,0xbb8a57d7,0xbb8032bc,0xbb5a7603,0xbb68f469,0xba9ef72c,0xba174a2c,0xba175f9c,0x3905acf9,0xb92c98d3,0x3a40a2bd,0x38577883,0xb94dca1a,0x3a03b865, -0xb99feb04,0xb909e6fa,0xb9e66f0c,0xba8ecb98,0x3a5dceed,0xba528847,0x3b17743f,0x3a986670,0x3a86dfcd,0xbbfa0500,0xbc436960,0xbc38d1d9,0xbc09bddd,0xbbc90749,0xbb9f42b5,0xbad824b6,0x394c226a,0xb984ee98,0xbbc5aa4d,0xbc1c92c9,0xbc388c03,0xbc30de3d,0xbc0fcd30,0xbbca0d56,0xbb7e23f4, -0xbb717339,0xbb842b8d,0xba8514a0,0x39d816d7,0x3b32cf9e,0x3ad766aa,0x3b184531,0x3bcbd01f,0x3bac4012,0x3b905fb4,0x3b9e13e1,0x3b3cd789,0x3a63985b,0x39cbadb0,0x39cc3365,0xbbb16ee7,0xbc1e7d3a,0xbc1e3a9f,0xbc389cc7,0xbc46965f,0xbc643051,0xbc38a99c,0xbb9627f6,0xbb522f70,0xba498eb6, -0x3b4476a5,0xbb9ed9f7,0xbbf982e9,0xbbb34398,0xbb3ad6a5,0xba53e7a2,0x393e0da6,0xb9ce4cbd,0xbaffc29c,0xbb67b4ef,0xbad94372,0xba55bcc6,0x3a2bd15f,0x3a4ce302,0x3a456e53,0xbaeaa603,0x3ba3218d,0x3bac6187,0xba3d160c,0xbab713ca,0xbb8538ac,0xbbb3c304,0xbb445b4f,0x3a220fe1,0x3b676c08, -0xbadf54ba,0xbb7bb650,0x3a2248db,0x3b1dec0c,0x3b6ffcd3,0x3c23f277,0x3bda28f5,0x3b7bea71,0x3b1fa792,0xbb50844b,0xbb7e4c76,0xbac94fec,0x3bb37143,0x3bc48dd3,0xbb0d0c61,0xbba80bc5,0xbc07320d,0xbc19c48d,0xbbeeced5,0xbbb6e726,0xbba073b3,0xbb2b0242,0xbb0d2f66,0xba0fc97c,0xb98285ee, -0x3a591b5c,0x3ae5151f,0xb91a76e6,0xbb1781f1,0xbb5ce440,0x3a04211b,0x3b5173e4,0x3b819751,0x3aef497e,0xbbab34aa,0xbc40a9d8,0xbc0749b9,0xbb6a26d7,0xbb9221e5,0xbc5150a8,0xbc8938d5,0xbcad8345,0xbce96344,0xbcce677b,0xbc26de79,0xbb253f1f,0x3ac96506,0xb88a7277,0xbbb1e9ed,0xbc0921f8, -0xbbf4960a,0xbb6fea85,0xb90fe1d5,0x3b4191d5,0x3af8d224,0x3a3bebb4,0xba96ceed,0xba6ea70c,0xb9471362,0x3973a357,0xb92be5b6,0xba3431fc,0xb96693fc,0xbaae5bc2,0xba390cc3,0x3a81df13,0x37860bae,0xbaf333ad,0xbb8b39bf,0xbad6593a,0xba79b4a3,0xbabef65f,0xbb7f9bf6,0x3a321f45,0xb99b9079, -0xbb82b3ee,0xbc0b6fe8,0xbc707992,0xbc331505,0xbbf160a8,0xba743d8c,0xbb32edda,0xba66c8d4,0x3b267ce4,0x3b2cf2d9,0x3b2fe054,0x3b16548e,0xbad8d7e6,0xbba4e6a4,0xbbe16b4d,0xbbde263c,0xbbadb184,0xbb7c5842,0xbb62d95a,0xbb79d984,0xbb4fae55,0xbadf5f20,0xba7ae17e,0xba98e01f,0xb94b8add, -0xba6128fe,0xbacb700f,0xba8b8007,0x39244fad,0x38811750,0xb79cb508,0xb7c5aee3,0x3b343603,0x3ad1a180,0xbaace3da,0xbc2625ab,0xbc63b805,0xbc3cf19f,0xbc104096,0xbba9fa76,0xbb3ad4f1,0xba7e6f9f,0x3a2ce3f2,0x3a3e83f3,0xb9941ec2,0xba792933,0xbadf59da,0xbb346b7f,0xba337f79,0x3a1a833b, -0x3a3b334b,0x3a7f2356,0x396072eb,0xba37a5b8,0xbace1447,0xbb3f01c2,0xbb4b5b14,0xbb5569fe,0xbb1dc003,0xba9bf78d,0x3a602d2a,0x3aef4449,0x3a5cea7a,0x3a79d9cb,0x3a61b06c,0x3a0f017b,0x3b013732,0x3b045573,0x3a97320a,0xbb3b828b,0xb9417e72,0xbb7fe9f0,0xbb054412,0xb9230123,0x39d55a83, -0xb9e09a6c,0xbab6f8cf,0xbb47d88a,0xb9ed6d5f,0x3a3d9d80,0x3a922d6f,0xba17c93d,0xbaab0768,0xbaa9dbe8,0xba827d9d,0xba80335c,0xba78cd18,0xba3c8405,0xba58ae02,0xba84724e,0xbb1fbe1e,0xbb53ea13,0xbb5682a1,0xbb3eb687,0xbb206f41,0xbb368eb3,0xbb2b2443,0xbafd8027,0xb9661758,0x3986bebc, -0x3a4323c6,0x3a62fb4c,0x3ab19fea,0x3938a5a7,0xba80e398,0xbb399189,0xbbbc8da7,0xbb9c4f07,0xbb909a0d,0xbb8b6cbb,0xbb743ee9,0xbb649943,0xbb45415f,0xbb3dfd08,0xbb158f3a,0xbb025e14,0xbab8c7c9,0xba36e63d,0x386d820b,0x3a4c0e2d,0x3a242bc7,0x3a3dd61d,0x3a6e9e21,0xb9840b6b,0xbab47cf7, -0xbb1a39ad,0xbb008778,0xbaf373bf,0xbb074928,0xbb0d0452,0xbb035f5a,0xbb12da3c,0xbb113985,0xbb44d04a,0xbb678125,0xbb8897f0,0xbb9e5bb9,0xbbbdda54,0xbbccdbd8,0xbbe2a9b6,0xbbeb65ff,0xbbccc0f1,0x39b92e2e,0xbad7bd90,0xbab4884a,0xbac69185,0xbacd7d44,0xbaec20ec,0xbb03d9fd,0xbb0fc94e, -0xbac30264,0xba451f44,0xb9086806,0x39dbc3cf,0x3a523273,0x3a96521b,0x3a7be3aa,0x3a4c7ab9,0x3a395c92,0x3a1bb5ef,0x3a643ba7,0x39ae58c9,0x39626313,0xba6b9c38,0xbaf141b5,0xbac6ab62,0xbb117b07,0xbb5a6999,0xbb5ebfa4,0xbb773395,0xbb624c1a,0xbb6dad10,0xbb5e44f9,0xbb4e99a3,0xbb30bdf7, -0xbadf75cc,0xbaece404,0xbaf9eee3,0xbb54f7e6,0xbb34580b,0xbb213dbc,0xbb2b4a36,0xbb27b82a,0xbb232949,0xbb1c315f,0xbb1e390c,0xbb0e71e9,0xbb082b21,0xbaff776b,0xbaed3e41,0xbad62e21,0xbab242ed,0xbabd981b,0xbabf0d30,0xbac31ff2,0xbac7986a,0xbac3819d,0xbab91bbf,0xbb256c7e,0xbae6dd4f, -0x3aaa1719,0xbb5e505a,0xbb1d4ece,0x3a902d1a,0x3a6615d6,0x3a25e209,0x39cf458c,0x38c1b134,0xb8c248fe,0xb9cf4bf5,0xbb37706c,0xbb849e8a,0x3a4f84f6,0xbb09d766,0xbb46b1cc,0x3b5cfdcc,0x3b1fbec0,0x3b84004c,0x3b3c0b4a,0x3b50a7f6,0x3b3200a8,0x3b50e778,0x3b5e37cf,0x3b63848c,0x3b7a1a19, -0x3b7ec343,0x3b6eac46,0x3b759be1,0x3b76174a,0x3b83a649,0x3b6b7461,0x3b5e356c,0x3b4d7a8d,0x3b4d428d,0x3b2c9103,0x3b6e52b5,0x3af1161a,0xba934f44,0xbbdacd45,0x3b524a34,0xb9a4d6c6,0xbbb9c4f9,0xbbb3215e,0xbbaf353d,0xbba133ca,0xbba8075c,0xbba741f3,0xbb952b5c,0xb98709d9,0x3b71b815, -0xbbb68c78,0xba5384e4,0xbaaf5e24,0x3b9da9bf,0x3b81d602,0x3b7c1580,0x3b39e7da,0x3b6bfb05,0x3b81a94d,0x3b894508,0x3ba4e530,0x3bac0543,0x3b9f19fb,0x3bb05800,0x3bbcb241,0x3bd0007b,0x3ba8efce,0x3b8e47c8,0x3b672995,0x3b42d617,0x3b1e4a25,0x3b2a4e78,0xbb5b01b6,0x3a447a96,0x3a51f1cf, -0x3a91ab1f,0x3a9069b3,0x3b0fd3c0,0x3b24a9db,0x3b40ac86,0x3b0c11c6,0x3b35fe8d,0x3b34ba61,0x3b2776db,0x3b21c271,0x3a87e713,0x3ae56d75,0x3b7de6d7,0x3b286b3f,0x3b58cd00,0x3b880ea9,0x3b6b0dda,0x3b041319,0x3b62d672,0x3b9beff4,0x3bab56eb,0x3bf3906e,0x3c0198c0,0x3bd1ba0d,0x3bebd21d, -0x3bef0411,0x3c0edc64,0x3bd19623,0x3ba63c5a,0x3b7685b1,0x3b2fb2e3,0x3b1a7960,0x3a1065bb,0xba76e430,0xb9ea89d9,0xba62d5db,0x3b033ac2,0x3a8ef9ae,0x3b022a32,0x3a832804,0x3b16b338,0x3aed40ed,0x3a7b6b51,0x3a0e72bd,0x3b19ac49,0x3a9016c0,0x3aef9333,0x3accfa3b,0x3b4fc005,0x3b81ec2d, -0x3ba9c706,0x3bc5f28c,0x3bae05d6,0x3b3ab358,0x3b9201ca,0x3ba8abec,0x3bb22eb6,0x3c0cfb30,0x3c18e089,0x3bfa1fef,0x3c22954c,0x3c4c6c5f,0x3c6d7758,0x3c27b0c3,0x3be23a0c,0x3b83df01,0x3ad267ab,0x385f1cd7,0xba883711,0xbb698298,0xbacd8ec6,0xbb5c2aaf,0x3a9d7ff3,0x3af3b730,0x3b3b86cc, -0x3b1594d5,0x3b044a3c,0x3bb0301a,0x3ba2fa2c,0x3b8d94a0,0x3b9a5102,0x3b4fea26,0x3b19be67,0x3aef11bc,0x3b9af01c,0xbb0cef7e,0x397caf8f,0x3ab736bd,0x39eef2a6,0xbab24e14,0x39ff1c89,0x3b995d02,0x3c5c6ef1,0x3c390034,0x3c318b36,0x3c5681e4,0x3b61f19d,0xbb0e3c05,0xbb9298a4,0xba345e5c, -0x3b1b9195,0x3bb1e7e2,0x3be7e3b0,0x3c038ee4,0x3b8ca4c8,0x39c94a06,0x3b2f8ec9,0x3b45c518,0x3ae9ed4f,0x3a97fb0b,0xbad0f215,0x3bac62e4,0x3bb6ba09,0xb9ff9dd5,0xba702b6d,0xbb77358b,0xbb94714b,0xba891a62,0x3b197289,0x3b8f70fa,0x3a7fca4f,0x3a8cfafa,0x3be177ef,0x3bbf638c,0x3bd53ed0, -0x3c02026b,0x3c380532,0x3c1fb6f9,0x3b9b2f20,0x39f71161,0xba8fd9b4,0xb9c92412,0x3bc01928,0x3bf1f0b5,0x3b219e04,0x3b09a258,0x3b35eacd,0x3bce49a4,0x3b858bfb,0x3b265324,0xbad611cb,0xbb17a5d6,0xbab8f4fa,0x39e0f2ba,0x3a65109a,0x3ae20eda,0x3af50ad2,0xba06b177,0xbb2c2289,0xbb455a8b, -0x3ab55df9,0x3b750ec2,0x3b73e90c,0x3a1783c0,0xbb8984b2,0xbc136ae6,0xbb479a56,0xbb8e61d2,0xbbf62185,0xbc4be957,0xbc0ebe27,0x3b3d9410,0x3a1985d7,0x3b955735,0x3c4c89dc,0x3c82f2a5,0x3c6b691c,0x3c0e1a0b,0x3c1eebbc,0x3c1ff1de,0x3c23a651,0x3c21de95,0x3bf7bcfa,0x3b87e666,0x3b5f9191, -0x3b4cb44f,0x3b1492a8,0x3b14f228,0x3af4fa30,0x3acbcb00,0x3a82d596,0xb9836e83,0xb98ed82f,0xba30fb57,0x38c80d79,0x3ab0dd16,0xb8a1efa1,0xbafea1f8,0xbb8386d2,0xb9981c89,0x39ee976b,0xbac3a1c2,0xbb34c74c,0x3b13fa66,0x3b77d83f,0x3c2668a4,0x3c615e84,0x3ca1465d,0x3c83ab6d,0x3c3e2a89, -0x3bac793e,0x3b07c09e,0x3b3f477b,0x3beafa47,0x3bf92c5d,0x3bf72e87,0x3bdacf74,0x3baaaad0,0x3b7eee66,0x3b0941e0,0x3a833623,0xba2455dd,0xbb017e87,0xbb739b9d,0xbb3853ee,0xbb0d0779,0xba605bd8,0xb8bdd421,0xba1845c7,0x3814b165,0xb99170a2,0xba9be95b,0xba2d67c6,0x39cdac85,0x3a60fb92, -0x38932cf5,0x3ad327d0,0x3b669a43,0x3b2ac187,0xbb8e6a43,0xba9935cb,0x3be25946,0x3c09ce1e,0x3c2bd787,0x3c71d2d1,0x3c8598b8,0x3c6e0192,0x3c58f29e,0x3c4a9939,0x3c616e16,0x3c2535e0,0x3bfd71ab,0x3bba23be,0x3b607e37,0x3b0a44c7,0x3ab468aa,0x3a87b16d,0x3a9834ff,0x3abf0445,0xba1249cd, -0xba9a72a6,0xbb342d56,0xbb45fbff,0xbaf1114f,0xb720de14,0x3a9f9f7c,0x3b0a7a17,0x3ace8063,0x3b149fff,0x3b0b7b61,0x3af38bc2,0x3b2aed49,0x3b1a62f4,0x38c47646,0x3ab4468c,0xbb278fc5,0x3b6a9d52,0x3c04bbd7,0x3c046ea9,0x3c0c0c9a,0x3be6e36a,0x3bcd523f,0x3be6619a,0x3b5fc369,0x3aa9e4d3, -0x3984164a,0x3a6e97f4,0x3b027253,0x3b3fcd5e,0x3b76c6d2,0x3b756e9f,0x3b25ca6d,0x3b0e6ca4,0x39fd4b06,0xbb01044a,0xbb24d56b,0xbb24fa18,0xbad989b0,0xbaae5299,0xbade51d3,0xbb176716,0xbada1fb8,0xba5f4b05,0x3a66040d,0x3aee4c0c,0x3b2905e2,0x3b4472ad,0x3b57497b,0x3b6de3ee,0x3b075214, -0x3b2d5ea8,0xbb325d90,0xbadb7f96,0xba27a2eb,0xb7d60609,0x3aaa12a0,0x3b0fa72a,0x3b4721e6,0x3b82f5b7,0x3b7b03e5,0x3b80aaf0,0x3b629ce3,0x3b37b7de,0x3b01748d,0x3a9aa181,0x3a95a714,0x3aa3daba,0x3ac98071,0x3a6be5b3,0x3a0f58e4,0xb9150bdd,0xba533816,0xbaac2f56,0xbade8e79,0xbae48d4e, -0xbb04dbeb,0xbb0174d3,0xbb266983,0xbb0913e6,0xbb42aba6,0xbb5b3c4f,0xbb8c76b9,0xbb93423e,0xbb9f32a1,0xbbb38597,0xbbcebef3,0xbb864903,0xbb1c8941,0x3a2e2fdc,0x3a94027f,0x3af8bd34,0x3b1f2d3f,0x3b4345f2,0x3b67d899,0x3b8bbedd,0x3b6b8ec3,0x3b45337f,0x3b290f69,0x3b064a8b,0x3ad6c36f, -0x3a9dbd98,0x3a959c41,0x3a6c8595,0x3a3e790e,0x3a147509,0x3982cb24,0x3a212d8c,0x354c5b08,0x3a238252,0x3a4575ed,0xb99017b0,0xba05256b,0xb94b0045,0xb9acd3b9,0xb9c69610,0xba8a74bd,0xba4460c8,0xba93100e,0xbae6d35e,0xba9b448d,0xbaa7550a,0xba2893cc,0x38680b84,0xb9144227,0x39a734e4, -0x38c5d002,0x39fb7fb4,0x3a3fff89,0x3a8dddff,0x3ab657f6,0x3af877b2,0x3ac3fc69,0x3aaa84d0,0x3a8b04cb,0x3a665bf7,0x3a371580,0x39f1f166,0x39ee196f,0x39dfe9bc,0x39c2136f,0x39e653d1,0x39b94551,0x39ed8e55,0x39f821ba,0xba8525e3,0xbb81aea7,0x3a13dd94,0xbaa757e8,0xbb9b120c,0xbb998c87, -0xbb97cf94,0xbb933396,0xbb94c81c,0xbb927394,0xbb9394d3,0xbb0693d6,0xb8dc3502,0xbb94cacc,0xbafdf3f9,0x39a4ab4a,0xbb552bdf,0xb9ef37ef,0xbb9017ad,0xbb285cbc,0xbb42984c,0xbb32b3ea,0xbb6bc14f,0xbb7b1c66,0xbb7e9b61,0xbb60e646,0xbb55011f,0xbb5b1af7,0xbb4a69c6,0xbb45172f,0xbb30e32c, -0xbb54d9ae,0xbb62cc3f,0xbb71ddad,0xbb6e9b0d,0xbb51a9d7,0xbb937721,0xba44d505,0x3b1fdd46,0x3bcaf148,0xbabffb7e,0x3b2445a9,0x3bc85538,0x3bccd184,0x3bc9dd6d,0x3bb3af2d,0x3bbe999d,0x3bbf6dea,0x3bc3538e,0x3b0ce41a,0xbb0cb10d,0x3bd3def5,0x3b5056f0,0x3b9ba327,0xbb55c87e,0xbaf27414, -0xbae715e0,0xbae10f77,0xbb84f005,0xbba3b1c1,0xbba88f0f,0xbb8f35e6,0xbb820700,0xbb8447d4,0xbb4b5713,0xbb2c9357,0xbb0638e5,0xbb72ac18,0xbb96475b,0xbbb07b3a,0xbba85e60,0xbba91039,0xbb94e12b,0x3b0a68b1,0xbb15601d,0xbaefe9e9,0xb915ca6b,0x3a2a0f7f,0xbabc2a33,0xbab61668,0xbae4f21e, -0xba2cf72d,0xbb10f549,0xbb15ff05,0x384840ab,0xba94cdbd,0x3a0e4e20,0x3a61cb8f,0xbae2b7d8,0x3a44fbe6,0xbb3ae17c,0xbb1937bc,0xbad9dfdc,0xbac27337,0xbbb2c729,0xbbdfb7d9,0xbbf3dcaf,0xbba85300,0xbb86699d,0xbb9e7d5e,0xbb4d0a0d,0xbb2fec5f,0xba87bd30,0xbb8b4dc2,0xbbb7aff0,0xbbe3c0e4, -0xbbcc8304,0xbbdfafcd,0xbb6f1d89,0xbaceac45,0xbae3da72,0xbae9459a,0x39076a1c,0x3ac23709,0xba1cd3e4,0x3acb3607,0xba93d8b9,0x3a334e17,0xbab3b73c,0x3906dfb2,0x3a5cc489,0x38cbb2bb,0x3a13cc88,0x3af14159,0x3885de9b,0x3b57a012,0xba828320,0x3ab9dc22,0x3b2ae024,0x3b1fd0e9,0xbb710cbe, -0xbbeb6d1f,0xbc172898,0xbbce3259,0xbbb22cf5,0xbbc785b3,0xbb2bfe71,0xb652da08,0x3af7505f,0xbb84c6b2,0xbbfaa9b3,0xbc282f1b,0xbc208ef8,0xbc2062d9,0xbbcfe88f,0xbb1a5ded,0xbb8a6a32,0xbb1060a8,0xb8b16888,0x3a82d374,0x3ae0c47d,0x3adaa95c,0x3b111ab6,0x3b7959e6,0x3b84784a,0x3b4a8eca, -0x3b8bda61,0x3adb45ad,0x3a8036cb,0x3adf455e,0x3a916e65,0xbb19531d,0xbc10d5d1,0xbc475114,0xbc49864f,0xbc4b2c43,0xbc5976d8,0xbc2ff469,0xbb83d471,0xbb90ba66,0xbb32a40b,0x3a903d12,0xbbd5d053,0xbc22dcde,0xbc0a452e,0xbbb4508b,0xbb34e9a6,0xbb36eb78,0xba641160,0xbaf122f2,0xba25a12f, -0x3b19d56d,0x38311802,0x3b0edc55,0x39b87260,0x3a1a597e,0xbaa1a183,0x3b9b1046,0x3ba57098,0xba063a73,0xbacdd615,0xbb902eaa,0xbba0563f,0xbaa7fcb1,0x3b26f416,0x3b811dd6,0xb96d4609,0x3a62acb9,0x3aa2608a,0x3af88bf0,0x3b5db6fc,0x3bb5c942,0x3c042e54,0x3bf292ae,0x3b748e91,0xbadd2c42, -0xbb7aad8e,0xbb2be143,0x3bae845a,0x3bebe2eb,0x3a508af1,0xbb869007,0xbbf7a121,0xbc0edaf1,0xbbc56528,0xbbb30813,0xbb821a77,0xba6ddeab,0xbab998ad,0xba0d2b7d,0xba94ef34,0xb9744698,0x3aa06a1f,0xba9522ba,0xbb478d37,0xbb48b4fd,0x3a8db59b,0x3b5b1084,0x3b022165,0xba7f3495,0xbbf56c49, -0xbc285c95,0xbbd6743a,0xbb804b2d,0xbc6b8661,0xbc84d9ad,0xbc7619b3,0xbc80993a,0xbca6e7c1,0xbcab21fa,0xbc85b8d2,0xbb55ce25,0x3acbda37,0xbb4b7aa1,0xbbf04c39,0xbc226e1d,0xbc0eb580,0xbbacdc43,0xbaaacbb6,0x3afc8e0d,0x3afdef13,0xba2041ff,0xbb01846b,0xba18a266,0xba156123,0x3a95cb4b, -0xb9842029,0xba898e2c,0xba34bc9a,0xba83c300,0xb98f4476,0x3a687b75,0xba62dd8b,0xbb2e7b39,0xbb92a845,0x39f85187,0x3a9287c8,0xba8d52ef,0xbaf2744b,0x3b7afb6b,0x3bc40f52,0x3b015f64,0xbb126bf8,0xbc189558,0xbbe90090,0xbba439c5,0xbb54df9f,0xbb2f82d4,0xba8a0909,0x3b400d20,0x3b580005, -0x3b5bd992,0x3b4fa894,0xba2271e2,0xbb70f37d,0xbbd757c8,0xbbd3d001,0xbbbf5119,0xbb80e654,0xbb11802f,0xbb6508ca,0xbb42f7bb,0xba9dd3e6,0xb9be16df,0xba568842,0xb91e5fb6,0xb9f69172,0xbabb424e,0xba407c57,0x364ba0fb,0xb9457d38,0xb99cc1ef,0xb9205904,0x3b790374,0x3b132658,0xb85acf4c, -0xbc05df35,0xbc6efa3a,0xbc4a654b,0xbc268553,0xbb7dd89a,0xba8d27fb,0xba502a31,0x3ae4aaeb,0x3b2033b9,0x3b4d8435,0x3b18b96d,0x3ac90daa,0x3a1391b0,0x3a5468f9,0x3a88d6f6,0x397c78b6,0x3a6de0d0,0xb9f6b40c,0xbad88baa,0xbaaef481,0xbb66f361,0xbb54eef0,0xbb583de4,0xbb1376b4,0xb98f1d01, -0x3a631809,0x3a963d8d,0x3a88f822,0x3ab7f954,0x3ae901cb,0x3ae05f4e,0x3b13f39e,0x3b068236,0x3ad601c6,0xbac3bb55,0x3baf0275,0x3a94f5d7,0x3a783b36,0x3b2cad50,0x3b00c1ad,0xb9452c50,0xbb097395,0xbb78835f,0xbace7737,0xba29606f,0xba007b18,0xbac469e5,0xbae4b081,0xbab8b365,0xba5ab62e, -0xba8352bc,0xbadb3610,0xbae7fb42,0xbb032e35,0xbae23397,0xbb2157f0,0xbb3a79ea,0xbae09eb5,0xbb20fa22,0xbb28a649,0xbb361bc5,0xbb0ce9b5,0xba5ccd2c,0x39e2b847,0x3acecdb0,0x3b1cb2b9,0x3b25ee70,0x3b6251d5,0x3b49c1ba,0x3b3bdef6,0x3ac2d3e6,0xbb917ed0,0xbba449ef,0xbbaa33c2,0xbb86d59a, -0xbb530af8,0xbb3b2bec,0xbb314db5,0xbb4c3b58,0xbb349ef0,0xbb28b2ec,0xbb0eb4b6,0xbad0d074,0xba819843,0xb9a10931,0xba100e3b,0xb9e824a9,0xb999da3f,0xbaa18ba8,0xbb31b83a,0xbb41d7b5,0xbad9a23b,0xbb0492b4,0xbb1a9bc7,0xbb2383ae,0xbb019423,0xbb2f7ef0,0xbaff2779,0xbb531e71,0xbb222101, -0xbb724910,0xbb6a2025,0xbb952c52,0xbb9e292f,0xbbaba405,0xbba69215,0xbba5a37f,0x3a94e961,0xbb03e659,0xbaf0e076,0xbaf40fb8,0xbb081de8,0xbb1729d5,0xbb1a567f,0xbb115b41,0xbad50598,0xba8df63c,0xba24c483,0xb9490648,0x394a9669,0x3a37cd5f,0x39ab922b,0xb7b19452,0xb9ae07c4,0xba0d6868, -0xba09194d,0xba98bc08,0x39b46057,0xbacfd926,0xbaf8cb60,0xbad0e5ac,0xbae9bb9a,0xbb4505a3,0xbb625205,0xbb670736,0xbb387fec,0xbb7b0554,0xbb853daf,0xbb65fafe,0xbb5242d0,0xbaf6fc23,0xbaf2f185,0xbb278f1d,0xbb140e48,0xbb838e50,0xbb586acf,0xbb5fdd25,0xbb561825,0xbb4a3079,0xbb4207f6, -0xbb429cd6,0xbb3bc7eb,0xbb369291,0xbb2e2431,0xbb252ac4,0xbb1c3a26,0xbb0c99de,0xbb1644e2,0xbb186659,0xbb1c476a,0xbb2206b8,0xbb1d3e55,0xbb3d22b7,0xbadf79c1,0x325d04ae,0x3b244271,0xbb2ffe98,0xb9c68a81,0x3b225647,0x3b19e9e2,0x3b03803c,0x3abdb630,0x3ac39e34,0x3aab4fcb,0x3a61e94f, -0xba8ce44e,0xbb6245f8,0x3ad6bfa6,0xb9b3e492,0xbb7e80a5,0x3b1bb679,0xba9f0271,0x3b6bb499,0x3b08b73d,0x3b159f6f,0x3af93ed2,0x3afd8b1b,0x3b058c06,0x3b122dcd,0x3b2c3df0,0x3b33b70b,0x3b2374bb,0x3b2bcd85,0x3b2e1e95,0x3b456fd1,0x3b2dac38,0x3b22283a,0x3b0f1192,0x3b0d071c,0x3ae59fdf, -0x3b4c8166,0xbad9c07c,0xbb88ee64,0xbbc2f128,0x37d797e4,0xbb68404a,0xbbb5b60f,0xbbb8c41d,0xbbba5fdc,0xbbad33d5,0xbbc3efcd,0xbbc51c56,0xbbaf78d4,0xbb703297,0x39e90172,0xbbaa8daf,0xbb89c32f,0xbb7a0abc,0x3b4c5a0a,0x3b6a103a,0x3b3d507b,0x3b08fb81,0x3acfb242,0x3ace7c8a,0x3b0b4291, -0x3b4cf50b,0x3b63f0e1,0x3b452481,0x3b72a006,0x3b8d389d,0x3bab7c82,0x3b8a2275,0x3b579a1c,0x3b12898d,0x3abe2ca3,0x3ac17486,0x3a414bc9,0xbba69f12,0xb99a7de1,0xba525386,0x392772c5,0xb8acb469,0x39b5a278,0x3a98f666,0x3a46a229,0xba814afa,0x3a0a6ac2,0x3aab703a,0x3a885b58,0x3a45d9fe, -0xba3b7096,0xb8a7af65,0x3b145367,0xba2b7133,0x3aec1ad8,0x3b88d9da,0x3b2913ef,0x3adfac65,0x3a436c6b,0x3a8c4d50,0x3b121435,0x3b96730d,0x3bae91cf,0x3b8054cc,0x3b9bac66,0x3ba420eb,0x3be14a49,0x3ba31c51,0x3b731513,0x3b0aeda0,0x3a92ed86,0x3ac55a7d,0xba87ba4d,0xbb445170,0xbab763dc, -0xba6474c1,0x3ac6938a,0x39169620,0x3a6b8442,0x38ee6424,0x3af87c01,0xbaae3416,0xb94f5875,0xbac8e08c,0x3a9b4736,0xba002e18,0x3996d19a,0x3a161104,0x3a87e25a,0x3a99f738,0x3b7f366b,0x3bdd85cf,0x3ba082cc,0x3b4d171f,0x3a548a4e,0xb89afe56,0x3a8441b8,0x3b93419c,0x3bb7af5f,0x3b840a91, -0x3bd09799,0x3c17b893,0x3c4a315e,0x3c0cac8b,0x3ba370dc,0x3abd04d4,0xba7d2f36,0xba99fa3e,0xbb449ab7,0xbba8eaae,0xba7ef427,0xbb38de74,0x3b0802de,0x3b370dc4,0x3b312cda,0x3b2c6b75,0x3afacdbd,0x3b7313a8,0x3b5d006d,0x3b5ec89c,0x3b8da467,0x3b072d84,0x3a82914b,0x3b2b6abf,0x3b5c09bf, -0xbbf6f33a,0xbb2e5ad2,0xba28eda8,0xbb01e056,0xbb26c4c6,0xbae9de76,0x3a8ec086,0x3c165c4b,0x3c1195c4,0x3c26075d,0x3c5efd1f,0x3bbaf788,0xb915ef21,0xbb3b6620,0xba99db0a,0x3af73c86,0x3be5e065,0x3bf518db,0x3c0f9ed2,0x3b7205a9,0xb95d5785,0x3b726ae9,0x3b50fe31,0x3a70d83e,0x3926805a, -0xba805a7d,0x3b97ba59,0x3ba32569,0xb8fc7a0c,0xbaa743a8,0xbb86243b,0xbb9e1265,0xb9e30097,0x3ac4abf3,0x3b095a52,0xbb7d2fb6,0x3a93f870,0x3be64af5,0x3c1ee582,0x3bc80d13,0x3b6c747f,0x3c057af9,0x3bfdf45f,0x3b3191a4,0x38eb4482,0xbace9b6b,0xbad29ffb,0x3b8d2c9e,0x3bdaba83,0x3b6f3da9, -0x3abeb00b,0x3a1e21fc,0x3b1947d8,0x3a3f5640,0x3aadf94a,0xbb269f25,0xbb0a1936,0xbaa3f144,0xba93ba36,0x3974510e,0x3a7edb6f,0x3aba05c8,0xbaa4ef1b,0xbb48abf1,0xbb2828f8,0x3add6837,0x3b57b56b,0x3b04b3c2,0xbb1b3175,0xbbcc139b,0xbc196f0d,0xbaf4c01f,0xbbbf10fb,0xbc8f83b8,0xbc7fc43e, -0xbc216adb,0xbb2f2959,0xbb87076e,0xbb3a5a2c,0xbab1663a,0x3c683f2a,0x3c858a26,0x3bdb3c6b,0x3bf0ecfb,0x3bc7344f,0x3bb8b013,0x3bd40b30,0x3bbaa53e,0x3b667aa3,0x3b543e8a,0x3b6e3091,0x39335eec,0x381bec43,0x3a920bb8,0x3a726624,0xb70d6cc6,0xba7b95e6,0xba657754,0xb9939eb3,0x3a3efabe, -0x3a8c8638,0xba6211b7,0xbb2d47ee,0xbb92c09b,0x39ea306f,0x3b1183d4,0xbb5d2112,0xba921dd0,0x3b95e64f,0x3c0624dc,0x3c23d8c9,0x3c02f2ad,0x3c1f9a4e,0x3be6941f,0x3ba4647c,0x3b20c655,0xbae737be,0xbb0d8cb8,0x3ad3afce,0x3b5d16a2,0x3b8e521a,0x3ba09af5,0x3b5f392d,0x3b1a6ae2,0x3a3239c8, -0xb9370657,0xba4b7152,0xbb262ed5,0xbb8bd81c,0xbb4a155c,0xbb0f6575,0xba4fa292,0x3897dd9b,0xb9bda29b,0x392ce509,0xb9ce2236,0xba94e73c,0xb96d61dc,0x3a039e7f,0x3aa67fe7,0xb924f020,0x3aae0188,0x3b740f48,0x3b6d8742,0xbbef9450,0xbbedfa46,0xbb67cc6b,0xbb2a08c5,0x3ab46795,0x3bd17916, -0x3c18d3b5,0x3c15cb61,0x3c16d983,0x3c119363,0x3c15c8b1,0x3be7ce1e,0x3bbdf535,0x3b9949e3,0x3b38d6cd,0x3add0ae4,0x3a95039b,0x39d3198d,0x39437746,0xba07334b,0xbb37f394,0xbb2161ff,0xbb46aa75,0xbb4cb4b5,0xbae2ec21,0x3a05bbd6,0x3a3c9593,0x3ab86e2f,0x3a4a8018,0x3b065043,0x3ae34325, -0x3ab3ca4a,0x3ab6ecf6,0x3a5ea3c0,0xba450dab,0xbae6657b,0xba41f150,0x3b4d9d18,0x3bfffe00,0x3bf77d99,0x3c06b352,0x3bdda5fb,0x3bc2ab5d,0x3bb65c18,0x3b48a5ca,0x3ab793bf,0x39d4fb32,0x39ce7d7f,0x39de288b,0x3a36c99e,0x3ac438fe,0x3ae5c4a6,0x3ac59c41,0x3aa25257,0x38b4cbb4,0xbb121bbb, -0xbb1f860b,0xbb19ec54,0xbb18820a,0xbb056454,0xbb098ccb,0xbb1c8ff4,0xba9d1a19,0xb839f9aa,0x3b06dd1c,0x3b3f0662,0x3b6dee60,0x3b7e4ace,0x3b8d3ab3,0x3b950053,0x3b604a79,0x3b5e0623,0xbb91a206,0xbb389afc,0xba8284f7,0xba1373d2,0x3a9cdaca,0x3ac01c56,0x3ae84d89,0x3b06471e,0x3ac70526, -0x3aad24c9,0x3a526387,0x3a5d5ab0,0x3a5086d1,0x3a25e337,0x3a11697e,0x3a0fa219,0x3a5b60ee,0xb877e176,0xb93555c6,0xbacabf74,0xbb2e8ea8,0xbb22e2e5,0xbb2038f9,0xbb18973c,0xbb2cd587,0xbb24cac4,0xbb3fbd22,0xbb099b05,0xbb5e2159,0xbb40a61f,0xbb814f8a,0xbb74f378,0xbb9401d8,0xbbb89361, -0xbbde95aa,0xbba220a7,0xbb62eb08,0xba48abe2,0x36d8a30a,0x3a05126f,0x3a88038f,0x3ad2730d,0x3b19eefa,0x3b508711,0x3b44b3a8,0x3b3862f8,0x3b296910,0x3b0f98ce,0x3adff475,0x3a9bef75,0x3a7bae76,0x3a2845d8,0x39d0880a,0x39178a4d,0xb85817e7,0x37ce5139,0xbab94d27,0xb9f4d4a8,0xba7e90eb, -0xbad65bfe,0xbb0e8900,0xbb006818,0xbaf42a00,0xbb14b89b,0xbb474a32,0xbb199e45,0xbb181170,0xbb48d143,0xbb1fcc43,0xbb2740ee,0xbb0e03ac,0xba919f6a,0xbb2bb3e2,0xba135f79,0xba60da11,0xb9ed9ff7,0xb909b24b,0x397139bf,0x3a07f2f1,0x3a7a0e97,0x3a2ea83a,0x3a0dc79f,0x39dbbf34,0x39a772b5, -0x39883384,0x392e0e10,0x38d8d61e,0x37e36391,0xb8943234,0xb8ae801a,0xb98ae474,0x38c1a6e1,0xbae54808,0xbb623a25,0xbb998e9a,0xbae01b4f,0xbb8058e6,0xbbb0d0c3,0xbbb488a1,0xbbb30b45,0xbbaaad00,0xbbb680a9,0xbbb68f4c,0xbbb7a100,0xbb925f3c,0xbb19bf67,0xbba71b77,0xbb8dd231,0xba298184, -0xba5b0507,0x3b3afb35,0xbb07bcca,0xba0fddc9,0xba27d9a8,0xba0bc2ad,0xba55c505,0xba70f30f,0xba9739d3,0xba2c69d1,0xba17e720,0xba74a6dd,0xba22fb6f,0xba03b40a,0xb889f99d,0xba1d70a4,0xba59bea4,0xba94dd68,0xba9380c0,0xba852e6b,0xbb0c28a7,0x3b27745a,0x3b872704,0x3b5a7e08,0x3b0ee675, -0x3b90bb77,0x3b62a146,0x3b80cbbb,0x3b7dd9ff,0x3b44df01,0x3b77b242,0x3b808c21,0x3b8ad898,0x3b82f5e8,0x3ac1dc58,0x3b7b7c96,0x3b9cd856,0x3ba4b2f5,0xb96068e2,0x3855a202,0x3a44a17a,0x3a1fca53,0xb8eac28b,0xba0be841,0xbaa18bcf,0xb9adf7bf,0xb9a80636,0xba8a8c9f,0xb948774d,0x39c46050, -0x3ab9e457,0x3874309b,0xba361224,0xbadf6aac,0xbadd9d35,0xbb23da49,0xbad0b72a,0x3b14ae1f,0xb9c3bd0f,0x3a8b4cb7,0x3ac0e1de,0x3b04f617,0x3a3462d9,0x3a195408,0x3a3931f6,0x3a8d2b59,0xb98e05ca,0xba4e8aaf,0x3ab6cbf7,0x39aab219,0x3acb6b2f,0x3b39cfff,0x3a0a76f5,0x3b424a2d,0xba0941e8, -0xba2b0b75,0x3a7b0347,0x3a35955e,0xb8e2befd,0xb9bc6d49,0xbb0d9f3c,0x3a15e3ab,0x3a5d87e3,0xba892327,0x3a2aa697,0x3a986a59,0x3b7182f3,0x3a42d39a,0xba09d513,0xbb1a7abf,0xbb143a83,0xbb6d19d0,0xbacc13ff,0x39d4e404,0x38e30b8b,0x39f3c30e,0x3af87f73,0x3b37da61,0x39aa4ae0,0x3b103532, -0xba42e4cb,0x3990abcd,0xbb0110e8,0xb797462e,0x3ab25276,0x39b9a99f,0x3a9a984f,0x3b62e9e8,0x3ae92844,0x3b95922c,0x3a6ca6b3,0x3b182e76,0x3b98331e,0x3b86b677,0x3b3f81ac,0x3aca3efd,0xbb04c539,0x3aa7843b,0x3a7c7236,0xbaf37d0d,0x3ab57545,0x3b921e94,0x3c04bea0,0x3b6a2ac4,0x396065b3, -0xbb5a0168,0xbb87e70c,0xbbcf8bc1,0xbb944f9b,0xbaeea810,0xbb4bb97e,0xb9832e2c,0x3ac8a0ec,0x3b013fa2,0x3aacff54,0x3b094ae0,0x3afd127e,0x3a9fbc01,0x3b1f9893,0x3ae14be5,0x3b58d419,0x3a24e90d,0x3a887d3f,0x3b47e4c6,0x3b280985,0xb9e447c5,0xbb8ef559,0xbc0e8584,0xbc014fc3,0xbbf78bf9, -0xbbdeafa3,0xbb84f220,0x3b30ed5e,0x3a3baa3f,0x3ab7232c,0x3b94969e,0xbb456c9c,0xbc02976a,0xbc110292,0xbbcbc3d1,0xbb365050,0xbacfb87f,0x3b0b5ba5,0x3b3cebec,0x3ba056cd,0x3bb3d154,0x3b113633,0x3b6541ad,0x397f75f2,0x39b2894a,0xb9bef9d2,0x3b7d2ce1,0x3b8d0a09,0xb92d46c2,0xba8ef53c, -0xbb764004,0xbb776469,0x3914012a,0x3b5f6a75,0x3b7cc3ae,0x3a222f64,0x3bb06dc2,0x3b7b9cdd,0x3b2dadf2,0x3b48e617,0x3ae0c51c,0x3c1ee4f7,0x3c334e67,0x3bac83e8,0x3a2c8da3,0xbb3ba4a3,0xbb684bfa,0x3b804ad9,0x3bee3639,0x3ba69f7b,0xb9a644a2,0xbb323d57,0xbb10b42c,0xba9c048f,0xbb006c15, -0xbadd6a0e,0x39f7ba27,0xb9a2c8c6,0xb9f1541f,0xba9f7907,0xba1b5dbc,0x3a804880,0xbae45e34,0xbb52d1fe,0xbb174423,0x3aa25589,0x3b3c6f94,0x3a22f7ee,0xbb3c4bde,0xbbfe4534,0xbc06fc38,0xbb1b6b95,0xbbb4df78,0xbcb15ec0,0xbc83491f,0xbc1a2972,0xbb9584e3,0xbbc6a6dd,0xbbfa8b72,0xbc2d0146, -0x3b64bcf5,0x3bd5c50d,0xbad1ee89,0xbb2120b2,0xbb729a1e,0xbb3463ea,0xba9df6b2,0x3a36e767,0x3aca6151,0x3b005130,0xb9b6c5b3,0xba73e228,0x3a17b3b5,0x38e937d5,0x3b0045bc,0x392704ff,0xba8199cd,0xba98ae8f,0xb9c33f49,0x3a0901cf,0x3a4911bd,0xbaa02304,0xbb2caa36,0xbb74e51d,0x3b0bcb44, -0x3b2b1fe3,0xbb09aee8,0xba4e3bea,0x3bedc22a,0x3c40832d,0x3c261493,0x3bfcdb5a,0x3b8ee9de,0x3b422470,0x3af0d67f,0xbaf8502c,0xba7361d5,0xb9597114,0x3b430911,0x3b936d8f,0x3ba4a301,0x3ba33898,0x3b224163,0x39f78f6d,0xbb1abafd,0xbb423c93,0xbb7f96f4,0xbb4de4cd,0xbaf5bdfe,0xbb35677e, -0xbb0cb3f2,0xba256ec5,0x3933797f,0xb923374f,0xb974e8f3,0xb99b6192,0xba87357d,0xb90ccba1,0x393b2132,0x390b53b5,0xb8285c4f,0x3a0b0de5,0x3b752d8e,0x3b6ae880,0xba725822,0xbb689716,0xbbddd7ca,0xbba40904,0xbb43ea8c,0x3b49c3ca,0x3bb18ecc,0x3b91f131,0x3bd031e7,0x3be64004,0x3c0dd3f7, -0x3beac638,0x3bc3ace1,0x3ba6ae57,0x3b4972ed,0x3ae78838,0x395e924b,0x39e967ad,0xba6e95bb,0xbaf5146f,0xbaaf12c9,0xbb51ea86,0xbb587f56,0xbb483743,0xbaf90b51,0x3a004d3c,0x3a234dbd,0x3a157d6a,0x3aa2b7f4,0x3aec18cd,0x3b179e38,0x3b26d73d,0x3b0082d9,0x3ad8ce8a,0x3abcc61b,0x39dd546e, -0x3be45a07,0x3bc1bb3c,0x3bb6bf22,0x3bca4056,0x3ba3a1f8,0x3b28389f,0x3a521e81,0x38c15e36,0xb8df23c5,0xba108a48,0xba8e3764,0xba8f49a6,0xba45508b,0xb941c377,0x3a13902e,0x39d47a20,0xba45193d,0xba99fe13,0xbaed5ad2,0xbb0695f2,0xbb06bc09,0xbb03c495,0xba2555a6,0xbae60d00,0xbb1974ab, -0xbb1e7d26,0xba9c7de7,0x39e12b10,0x3ac0150e,0x3b3a7902,0x3b72d9eb,0x3b7e2b0a,0x3b97ae08,0x3ba74fc6,0x3baa933e,0x3bb00bc9,0xbb254e85,0xbb681b4d,0xbb6bc005,0xbb05148f,0xba457192,0xb97bf76b,0xb97f98d1,0xba201e11,0xba4ea644,0xba55733c,0xba6a608e,0xba5834a9,0xba53020b,0xba2ac98a, -0xba71cff1,0xba701074,0xba603d25,0xbab14055,0xbb20177d,0xbb12e1e0,0xbaaf0773,0xbb0aa7e5,0xbb2a2a71,0xbb3151a3,0xbb174d3e,0xbb42fd70,0xbb0fb162,0xbb3cb9e4,0xbaec60a5,0xbb370f4a,0xbb1bb636,0xbb389442,0xbb494f45,0xbb61209f,0xbb647a2f,0xbb5d2330,0xb9663a75,0xbaeac50d,0xbacf5905, -0xbaa67f7d,0xbaab7ff1,0xba9c3c0a,0xba5790ae,0xb9577688,0xb92d3a3f,0xb93f17a4,0xb955ae16,0xb95930f0,0xb90a9613,0x39088439,0xb98fb532,0xba31182c,0xba90da9e,0xbab00e78,0xbad6fd11,0xbafeed09,0xb9658633,0xbad4be19,0xbaaea78f,0xbac545e8,0xbaae1c5f,0xbaff6a3d,0xbb24d1ec,0xbb1da713, -0xbb04829d,0xbb4a92d5,0xbb735fc6,0xbb60ab43,0xbb5137be,0xbb13cee4,0xbafbf328,0xbb224f3b,0xba7683ab,0xbb597483,0xbb2fbe8a,0xbb2887bc,0xbb18c1b5,0xbb05e44d,0xbaf70b0c,0xbae2415d,0xbaf52ade,0xbaf5c08c,0xbaf3589a,0xbaefdc44,0xbaf04d41,0xbaead7c0,0xbafd4074,0xbb01f98a,0xbb0723c5, -0xbb0d08b4,0xbb0c0952,0xbb370493,0xba11aade,0x3a14002d,0x3a20b960,0xba912767,0x39fb473a,0x39fa776b,0x39f361fe,0x39610087,0xb98bc17a,0xb80a3147,0xb8f5ab4f,0xba012719,0xb9d2466b,0xbaf1daef,0xb9a4cbe0,0x389328d8,0xbb39b686,0xb9963a27,0xbb5787a9,0x39c675fc,0xb8c63ab7,0xb9310d60, -0xb944e559,0xba51d25f,0xba6ca5ac,0xba4e380c,0xb9988aac,0xb9068435,0xb9c18f79,0xb9155e31,0xb893e17c,0x399397a6,0xb81e1feb,0xb9493876,0xb9f78d7a,0xba090ac7,0xba11d545,0x37c6b89b,0xbb654258,0xbb6929cd,0xba2f5247,0xbb25e94f,0xbb5888a2,0xba80ab44,0xba9d47d5,0xbab8711b,0xbac2b66f, -0xbb091c59,0xbb0b968b,0xbacdc02f,0xbb7135a5,0xbb2c12fd,0xb9e196d0,0xbb6c885e,0xbb1b058f,0xb9daeeed,0x3aa3f40c,0x3a1e53cd,0x39fd56ab,0xbac79042,0xbb0b28d1,0xbaeaabc8,0xba340c50,0xb99238b6,0xba529c16,0x3909c6fe,0x3a5ab495,0x3aeb34ac,0x3a6e8438,0x371ccb23,0xba8ef260,0xbae2af52, -0xbab913f0,0xbb186238,0xbb5c9e7c,0xbac5d740,0xbaeead99,0xb9dbd32b,0xba081539,0xbabf923f,0xba33f264,0xbadc3faa,0xbb48ae72,0xbb10050d,0xba9dfce4,0xb9e4dd31,0xbaa3cdfd,0xbac3d930,0xba4ba6c5,0xb9df2ba1,0xbb25aead,0xba7c3a22,0x3adea08e,0x39f6b273,0x3a563dce,0xbb38f992,0xbb7bbeb1, -0xbb53291f,0xba1f0bcd,0x39c484bb,0xba6e65d8,0x39c53c16,0x3a49f3a6,0x3b2b8ff7,0x3a80d401,0xb9212d19,0xbaf06077,0xbb13a64b,0xbaf06f4b,0xbb3e2835,0xbb6b21d0,0xbaf11031,0xba0e5dd6,0x3a4abfe6,0x38a84bb2,0xb9dd00fb,0xb8b5d3eb,0x39373595,0xbb527f96,0xbaf7b53e,0xbb338319,0x3885a581, -0xbad6ec67,0xba708ae2,0x3a22ad0b,0xba81b731,0xba16ae48,0x3a77ee33,0x3ba0f097,0x3b775849,0x3b73408b,0xbb213ade,0xbbaed6cf,0xbbaeb006,0xbae39050,0xba2727a1,0xbb0bed79,0x3a211d85,0x3b64ac1d,0x3bdae7d3,0x3b64bdc5,0x378e6826,0xbb719082,0xbbab2670,0xbb99d5cf,0xbbb34064,0xbba55d0a, -0xbaa8674a,0xba7aff4b,0x3b15731e,0x3b3c078d,0x3b08a75c,0x3b26c3d9,0x3ae3cdcf,0x3a9a85b0,0x3aaf78d6,0x3ad0015c,0x3b55757b,0x39b7aeee,0xb9dea5c2,0x3b55653f,0x3a8f75ad,0xbc17b799,0xbbd34167,0xbbcd9cee,0xbbe9cb07,0xbbc6b9fe,0xbbe0ed80,0xbbb166ba,0x3a38c04c,0x3b16ab8b,0x3bad0312, -0x3c1ac72e,0x3b6816f5,0xbadded53,0xbb6c89a5,0xbb722018,0xba55255b,0x3b8f6dff,0x3b9b0141,0x3bbdf155,0x3b4958cc,0x3ac251d9,0x3b5c8fab,0x3b2b432d,0xb990c5f6,0xba2e58c9,0x37cc36de,0x3b579e37,0x3b7043a3,0x385270f3,0xba9e7c7b,0xbb6b7f18,0xbb8879c2,0xb9250d36,0x3a7f769b,0x3a380f0a, -0xbbc98574,0x3b1f277f,0x3ba6e144,0x3c09664d,0x3b50fd41,0xb880a024,0x3bb9cbed,0x3bda0304,0x3b1510f0,0xb987e0b3,0xbb3d7d4c,0xbb822e02,0x3b0156af,0x3baee3f8,0x3b994f04,0xb9926b71,0xbb5ab1e2,0xbb835eda,0xbb7efaf3,0xbade420c,0xbb327605,0xba4a4147,0xba1da6d9,0xbb0806ab,0xba56ed55, -0xb9a2590b,0x3a676ef4,0xbaeaa2d0,0xbb46e1e2,0xbb002ef5,0x3aa37a5c,0x3b15f088,0x39ac652b,0xbb8a44ee,0xbc00e005,0xbc159bd4,0xba7a3fb6,0xbc064220,0xbcc8fcb2,0xbc7cc284,0xbc1dd44f,0xbc2db13f,0xbc52dd91,0xbc691dd3,0xbc84fb05,0x3bb51f06,0x3c385951,0x3aa09abb,0xb6db4301,0xbb2ea8dd, -0xbb41c2b6,0xba63ed84,0x3a9b8db9,0x3b08f5a4,0x3b0a1c3f,0x3b0cbdd4,0xbad759f9,0xbac60487,0x38f4ca42,0x3a14e0b6,0xba4d5079,0xbabb5559,0xbabbd860,0xb871abd2,0x3a8604f5,0x3a326071,0xbab74927,0xbb332852,0xbb744d96,0x3aa2dab1,0x3b3b1b8d,0xbb98bb18,0xbaca0e5b,0x3bfdb393,0x3c46aabe, -0x3be9840e,0xba317eb8,0xbbac21a6,0xbbba9bca,0xbb869b7f,0xbaca9e42,0xbb909f1b,0xbbaefba7,0xbb608c40,0xb9790d6d,0x3ad1f2c8,0x3b3f4545,0x3a6bb2c8,0xba2ff7fc,0xbb10a0e7,0xbb39185d,0xbb1dc733,0xbb4f37ba,0xbb6fef04,0xbb4525a1,0xbb01b28d,0xba3e1ecb,0x3820a110,0xb8778c9d,0xb81d4ee0, -0xba2c2664,0xba7411b6,0x391816a3,0x39f86815,0x3a83e416,0x38e6e97d,0x3a50f701,0x3b492964,0x3b9bacb4,0xbbd28ac1,0xbc2ea05b,0xbc62e8ce,0xbc53603d,0xbc0ba9ca,0xbb84c258,0xba325075,0x3a863321,0x3b444c50,0x3b7370e3,0x3b49d334,0x3b42035e,0x3b30ba1a,0x3b22ffce,0x3ae382fa,0x3a91422a, -0x39fcaf35,0xb9a111e0,0xbaa94f5a,0xbb3caae5,0xbb856a78,0xbb7747c6,0xbb63435c,0xbb46726f,0xbae59d22,0x39df9c96,0x38e20d57,0x39e778f7,0x393ce12c,0x3aaa01f1,0x3a9a83a3,0x3a90896d,0x39a61f05,0xb9569989,0xb9e3f423,0xbb78f5bc,0x3b4e1044,0x3b11b2db,0x3b95017d,0x3b96532d,0x3b9fe30a, -0x3b771441,0x3b434f4c,0x3ace6db9,0x3aca7c53,0x3a8a62e8,0x3a0f34d9,0xb9d5f749,0xbaaf1268,0xbadc5bfc,0xba980b64,0xba60c901,0xba1ca709,0xba30bb50,0xba5db17a,0xbaea8737,0xbafb2c9c,0xbb0291b4,0xbb23add9,0xbb2ba85c,0xbb1fc211,0xbb144031,0xba3bf084,0x3a3db7e6,0x3b2829cc,0x3b569c20, -0x3b7621fc,0x3b72b6c9,0x3b8a2d8e,0x3b88bcaa,0x3b7fded0,0x3b53869f,0xbba71511,0xbb823ad7,0xbb2012bf,0xbafcbed3,0xb9d05a6e,0xba1c9ae6,0xba5401d0,0xbaa0996b,0xbadc79a0,0xbaf9806c,0xbb048b45,0xbab2954f,0xba34e65a,0xb91ff621,0xb9c18fbe,0xba071c2f,0xb9e4a3d4,0xbaabba39,0xbad36ea1, -0xbb3ae635,0xbb6775d0,0xbb4fc9b1,0xbb4793d7,0xbb3c4a6c,0xbb40da0e,0xbb418059,0xbb3ba8d6,0xbb193c35,0xbb48c4d6,0xbb1d99d2,0xbb3a7465,0xbb27a96a,0xbb64c86b,0xbb9a68b4,0xbbba99f0,0xbba0b4e8,0xbb4132a9,0xbb31bfb9,0xbb048317,0xbafec8eb,0xbade0f1d,0xbab4de30,0xba518b21,0xb95db2c1, -0x39546bd8,0x3a0b05ec,0x3a30d41a,0x3a3d09ae,0x3a157ee2,0x39e4ebbc,0x388ada3a,0xb9878ae4,0xba0acc5a,0xba5021f0,0xba56c3c0,0xba990e9a,0xbb0a57d6,0xbafcab40,0xbb33be54,0xbb341d2d,0xbb5a03a5,0xbb6cbb7c,0xbb6902f3,0xbb86420f,0xbb921311,0xbb880517,0xbb8336ad,0xbb8f1e55,0xbb7fc46c, -0xbb695995,0xbb653990,0xbb3bd9e7,0xbb88f267,0xbb22f4b1,0xbb212e5b,0xbb13783c,0xbb021d3c,0xbae53aa6,0xbad0ec48,0xbaba639c,0xbabaf949,0xbab5a5f1,0xbaaabd7f,0xbaa2fbe7,0xba9657e2,0xba853116,0xba963a11,0xbaa283a3,0xbab0d64a,0xbabf08f6,0xbad3e594,0xbab83215,0xbb5b1f9a,0xbb7ed343, -0xbb2bd516,0xbb6c72bd,0xbb8eac8e,0xbb40d7bf,0xbb5081e5,0xbb56db69,0xbb530a42,0xbb6e8080,0xbb75e706,0xbb80ac39,0xbb9c376a,0xbb89dd44,0xbb45317e,0xbb924054,0xbb1dafbe,0x3b083506,0x3b68b336,0x3adc2ccb,0x3af4346f,0x3b0a7ab7,0x3b031a02,0x3b115354,0x3b14b0b2,0x3b0556ec,0x3b26aa46, -0x3b284b2f,0x3b079c6e,0x3b1ab6bc,0x3b218518,0x3b3cf2bb,0x3b24adf7,0x3b17d4b4,0x3b02d198,0x3afc0536,0x3ad24eef,0x3ac7221c,0x3b562e15,0x3b124c50,0xbaf0d4de,0x3b7c95bc,0x3b34368a,0xbad1b73d,0xba965f17,0xba9ceb29,0xbae1ce21,0xbaa074be,0xba8b1fa5,0xb9ee8013,0x3b1bf441,0x3b676b92, -0xba996260,0x3b241657,0x3ae0c300,0x3b47499a,0x3b2a384a,0x3b56dcc2,0x3b41a033,0x3b607612,0x3b669b5f,0x3b39322f,0x3b7de0b5,0x3b735bed,0x3b27ac89,0x3b5724af,0x3b7f2271,0x3ba68e78,0x3b8e9241,0x3b74f6b2,0x3b2d85d9,0x3b09c545,0x3a85641d,0x3abc2732,0xb966c330,0x3a9359cb,0x3b2c9192, -0x3b0e6ba8,0x3b0f5174,0x3b053399,0x3b073732,0x3b1444ba,0x3ab55dbf,0x3a92facb,0x3a54443b,0x3b0710f2,0x3aacdbd3,0x3aa8b157,0x3b50599b,0x3b269561,0x3b36d86c,0x3af83d71,0x3b155dd3,0x3b63b5dc,0x3b40f863,0x3b8a1102,0x3b9fbbed,0x3b527f1c,0x3bc89e9d,0x3bc6dba5,0x3b6b92c6,0x3ba135d0, -0x3bae0c29,0x3c0000ef,0x3bc4d640,0x3ba25c41,0x3b44a0cc,0x3b096048,0x3a557170,0x39792fe4,0x3a271698,0x3a860e63,0x3b01aa67,0x3b401633,0x3b2e48da,0x3a904f16,0x3ad07c58,0x391929b8,0xba7dd550,0xbb0b0d6d,0xba8f1279,0x3ac0022c,0xb8386ab7,0x3a82d2f6,0x3b6d77c1,0x3b1b2cd4,0x3b5fd1c1, -0x3b4abdb8,0x3b8c943e,0x3bc636ee,0x3baf4241,0x3be8ce68,0x3bf41a00,0x3b91afa1,0x3c01fa94,0x3bed7c3a,0x3b5d790b,0x3bbf9d68,0x3c11fbe9,0x3c58891d,0x3c35aad7,0x3c071247,0x3b8b0960,0x3adaac08,0xbabc2b6e,0xbb20ef32,0xbb254cdd,0xba8da9bc,0x3aa66de6,0x3b4e972b,0x3b41f11e,0x3ac0ff6b, -0x3b20b77e,0x3ab7ce14,0xba58143d,0x39fb9c44,0x39ac121c,0x3b16457a,0xb9af83ee,0x3a12713e,0x3b88a7ba,0x3b5469b5,0xbafd67d8,0xb9c51813,0xbb4eee33,0xbb135ff3,0xbab91389,0x36c276ba,0x3b200327,0x3c0dac8c,0x3bedb487,0x3c030528,0x3c2b3eb7,0x3b7ee162,0xbb1e4a97,0xbbcd785e,0xbba5932d, -0xbad5dd40,0x3b12cde8,0x3bc4edcb,0x3c08e530,0x3c11cf79,0x3bcc726e,0x3b8e53a1,0x3b6fd73d,0xb87ab370,0xb974dcfb,0x3a284e3c,0x3b2d0f12,0x3b47e736,0x38864698,0xb9e0f729,0xbb2685c4,0xbb1a8b93,0x3a952e8b,0x3b439d05,0x3b289927,0xba5d1b11,0x3c0348e8,0x3be428c5,0x3b93ba13,0x3b1250da, -0xbadaf14d,0x3c1d7f9f,0x3c478e66,0x3bbdb691,0x3b1dbb4a,0xbaff4732,0xbb997b75,0x3aabdcd2,0x3bbc7d31,0x3c05b31b,0x3b6cc8c3,0x3b1de803,0x3b8e8baf,0x3b3bbede,0x3af24491,0x3a1016ca,0x3a8b2133,0x3a1cd687,0xba23091b,0xba2ea28d,0xb9ff88ad,0x3a3db5ac,0xbb01798a,0xbb396f40,0xbac51113, -0x3a8f5a5c,0x3b04a0ce,0xb982687f,0xbb8f34c3,0xbbea4ac6,0xbbcee357,0x3b1ca8f7,0xbc1ccf04,0xbcca3f87,0xbc481744,0xbb1d800b,0x3b8be7c3,0x3b923eec,0x3b4f8772,0xbb010063,0x3c2a5684,0x3c42237c,0x3b32ee3e,0x3b8ccf0f,0x3b7bdda7,0x3b869f7a,0x3b722ad4,0x3b4faad9,0x3ad2746d,0x3b02af25, -0x3a9ea740,0x3a565a56,0x3ac9a7b8,0x3a991a03,0x3b0087b4,0x399d1403,0xba667fad,0xbac3ea59,0x398fe561,0x3aa06948,0x3a2b5d56,0xbaa7b057,0xbb0fad69,0xbb0fa470,0x3b2689e9,0x3b39dd7e,0xbb6ee9cf,0xbb3522ca,0x3c27089d,0x3c78719c,0x3c7225ed,0x3c53ef77,0x3c65c1b4,0x3c21da95,0x3bdae1d3, -0x3a19b3d0,0x384c1af0,0xba12cf76,0x3a6e853e,0x3b84fe6a,0x3bb4abf3,0x3bbddb2b,0x3ba4a4ec,0x3b874d77,0x3b188ca4,0x3a6af687,0xba887667,0xbb03ac79,0xbb133d36,0xbaf79627,0xba859661,0xb8b8e15c,0x3a014772,0x39ef0368,0xb98e81fd,0xb9bb736a,0xba19e263,0x39bd52db,0x39dd7838,0x3a49c779, -0x3a367914,0x3ad2cfc9,0x3b437e35,0x3bb5cbbc,0xbb735ac9,0xba5bbb7e,0x3a696ed0,0x3aff0c6b,0x3b80bc1b,0x3c05ca1f,0x3c226f6b,0x3c105d15,0x3c1dd526,0x3c27c070,0x3c41e6b7,0x3c22b0f0,0x3c0b9bf4,0x3bfe7fbd,0x3b8c6188,0x3b0225d3,0x39b2ae71,0xb9bc9948,0xbaacd4c0,0xbb0119e6,0xbb0b96a0, -0xbb324799,0xbb5d39cf,0xbb2c9fe4,0xbac08e07,0x3a4004d5,0x396bad6e,0x394c9cc8,0x3a79cc51,0x3adb1d12,0x3b06c0f9,0x3b246244,0x3a827de1,0x3a1f0c81,0x39a597f1,0x3a3ebde0,0x3ba444e8,0x3c007e98,0x3c0de451,0x3c037b84,0x3bef60d7,0x3bbf4077,0x3ba5f7be,0x3bb29901,0x3b2d3119,0x3a3b6a8f, -0xb9a962c9,0x39563521,0x3a33a4bd,0x3a83a536,0x3ae4c056,0x3ae09f45,0x39f7e77e,0x38322a5b,0xba4fc89d,0xbaee7c2f,0xbac3c3ec,0xbaa35248,0xba0e19f0,0xbaad8cba,0xbaf792d7,0xbae27cda,0x36bccc0f,0x3acef66c,0x3b279683,0x3b6e7e80,0x3b89050f,0x3b8a3996,0x3b97c8c2,0x3bb75083,0x3bb83e50, -0x3bde5a67,0xbab70f8f,0xbae940f2,0xba948f86,0x392fb908,0x3ac914c0,0x3b013483,0x3b00a399,0x3b02b781,0x3abe6c68,0x3ab43e3b,0x3a846042,0x3a1f2a40,0x38f6a85f,0xb999a2fa,0xba1ed486,0xba5563ea,0xba730e6c,0xba8d3fd5,0xbab8f305,0xbab0e348,0xbacb3e7f,0xbb1628b3,0xbb32a3fd,0xbb2dd0b5, -0xbb2aaac8,0xbb36433e,0xbb243b63,0xbb0699ff,0xbad3b760,0xbad4100f,0xbab355bf,0xba8024fc,0xbabdc163,0xbb078a69,0xbb3147d2,0xbb0556a3,0xbb394de5,0xbae61a9c,0xbab70d00,0xba5cd02f,0xba0bdcb4,0x36f5f350,0x3a437e44,0x3ad4cdf6,0x3a9a2c6d,0x3a32ee1c,0x39887aaa,0xb8fcf3bd,0xb9c24533, -0xb9f71973,0xba44acbb,0xba8935e2,0xbab62d29,0xbad14431,0xbb0415b8,0xbaf9c78e,0xbaaee226,0xbab61096,0xba7c7c34,0xbace7223,0xbab91451,0xbaa04f58,0xbad3afd4,0xbad230d9,0xbb009513,0xbb1e0e3d,0xbb4a2791,0xbb607acf,0xbb4ea3be,0xbb41c3ae,0xbb209637,0xbb1679fb,0xba3ba542,0xbaeb8c55, -0xbad0006f,0xbaa3661a,0xba7fb087,0xba314c3d,0xba0478e9,0xb93e51ae,0xb9f6f7e3,0xba0acc97,0xba1f7876,0xba339856,0xba5242e6,0xba7769ce,0xba883475,0xba9149b1,0xba9d37d1,0xbaa5605e,0xbab1cbec,0xbae0a0b8,0xb9b2586d,0xba29c9d6,0xbb327a88,0xb98c9c9e,0xba1692c3,0xbb46ba22,0xbb46286b, -0xbb4abdb1,0xbb52910a,0xbb4a4de6,0xbb4943bd,0xbb5570be,0xbab840e0,0xba67252a,0xbb601c6e,0xbaadd315,0xba9be864,0xbb0df8c2,0xbb16e6b3,0xbb2a7bbb,0xbad5a7f5,0xbaf49923,0xbacce730,0xbb225b68,0xbb3295cb,0xbb38c9f3,0xbb149871,0xbb09c945,0xbb1a94f8,0xbb061ca1,0xbafeede8,0xbad69077, -0xbafc21a8,0xbb074721,0xbb16ac3d,0xbb1c9351,0xbb0c40ad,0xbb33792a,0xbb1875a7,0xb91a9ecb,0x3b93d2ec,0xbb1cd584,0xb93ad64c,0x3b783a4f,0x3b72ea4b,0x3b61b183,0x3b367777,0x3b3204d3,0x3b348067,0x3b50be1e,0xba40b62b,0xbb48ade6,0x3b91e74b,0xb7495d38,0x3aa1b66f,0xbb302a19,0xba4973c0, -0xba54911f,0xb9ba4cce,0xbb37e476,0xbb72d6aa,0xbb81dd04,0xbb3efa29,0xbb2df5d9,0xbb57e4f1,0xbb185ac5,0xbada29e1,0xba48d082,0xbabde6a8,0xbb0c2d8f,0xbb4b3e50,0xbb65a13e,0xbb63d215,0xbb7cb733,0x38ba13a9,0xbadf7ce6,0xba94fcc3,0x36179f7a,0x3933e367,0xbaead6ed,0xbac62234,0xbb236cee, -0xbb3c679a,0xbb5fff66,0xbb3b180e,0xba51e833,0xbb083645,0xba7009e5,0x3965b5ca,0xbb00ad6a,0xbafc82dc,0xbb2a5ad4,0xba4a23c4,0xba10a371,0x3a061531,0xbb75d4a2,0xbbb154e7,0xbbca6d90,0xbb63f2fe,0xbb29d179,0xbb7bf422,0xbb143f8d,0xbaed17ad,0xb8b55e5d,0xbac687f7,0xbb200397,0xbb8390ca, -0xbb85cd1d,0xbb8f7f3d,0xbb5db650,0xbb15df75,0xba9e7bae,0x39d5e96e,0x3a275393,0x3a81e35e,0xba8bb91e,0x39a8f4e5,0xbadb0596,0xbb5980d9,0xbb5c902b,0xbb38d5f0,0xb99dbbe9,0xbaed5344,0xba933c99,0x3aed2814,0xbac909d8,0xb9e00267,0xba980d12,0x3b20b146,0x3b575448,0x3b95601a,0xbb0a01b5, -0xbbb629a1,0xbbfa9dda,0xbb925544,0xbb83bc25,0xbbbe63f8,0xbb4d0959,0xba03bcbd,0x3b2cfaaf,0x39e37657,0xbb1b5e46,0xbbbb48d9,0xbbdd3274,0xbbe3a51b,0xbbcde8d1,0xbb62175f,0xbae8e986,0x3ac74e46,0x3b1b650e,0x3b26b1b7,0x3aae6909,0x3b04d19a,0x3aa308de,0xbac47722,0xba472ee8,0xba1d6efa, -0x3af38868,0xbab9cf35,0xbaa7d9ee,0x3b7a5548,0xb9e25a41,0xbbe73dd4,0xbc001702,0xbc2bee4f,0xbc2673a8,0xbc0352bb,0xbc1f936e,0xbc181a6c,0xbbb0d51f,0xbb341fe8,0x3a8e257b,0x3ba1a837,0x3ab4675f,0xbb4e2880,0xbba936b4,0xbbc9a575,0xbb7b0b0a,0xb94b85f2,0x3abacf5e,0x3b1b9e79,0x3b655e10, -0x3b941f99,0x3b294ea2,0x3ae56e79,0xbabd3a78,0xba9f6ee2,0x3a8f14ac,0x3ae897ee,0x3b04a24f,0xb843307c,0xba4cc6bd,0xbb1e78d3,0xbb1dc308,0x3a0f481d,0x3aba065a,0x39e0d0fc,0xbbadb130,0x3bb4a134,0x3b5f82cc,0x3b7a5f00,0xb9fda1f2,0xbb55a831,0x3b9c3771,0x3bedbfc1,0x3b669783,0x393e4a33, -0xbb7da00c,0xbbd6e6f0,0xba0be3ce,0x3b76fd7a,0x3bbbbb9f,0xba42cd66,0xbba2e93f,0xbbe25df3,0xbbbc8c79,0xbb6d87a7,0xbabb2a12,0x3a920e3a,0x39ccbcd5,0xbaf59b45,0xbabbd4ba,0xbab69b69,0x3959eb0d,0xbb0766dc,0xbb28037f,0xbab4460c,0x3a11b50a,0x3a9866dc,0xba9b3427,0xbbb1171f,0xbc0e48f9, -0xbbf501a7,0x3a4bd4d4,0xbc43f384,0xbcda47b9,0xbc3f31f1,0xbbbe33a0,0xbc52a960,0xbc803610,0xbc9972ca,0xbcb05326,0xbb4ceba0,0x3b762506,0xbb297d67,0xbbc240d8,0xbc155671,0xbc1007e9,0xbbd5138b,0xbb31eacd,0x3a00571c,0x3a74de93,0x397c70aa,0xbaebc351,0xba9f9bd9,0xb9946b80,0x3a1b6207, -0xba88c80c,0xbac2cd9a,0xbae4c3a0,0x38d3fe9c,0x3a87e3e4,0x39c8b982,0xbacc2e6b,0xbb150e98,0xbaf1c099,0x3ad4ffb8,0x3b0b354e,0xbb8c61a3,0xbba413b0,0x3c32c108,0x3c6b4d68,0x3ba0938f,0xbb9b4104,0xbc527e1c,0xbc40a8b8,0xbc0cfe99,0xbb918a13,0xbb9db445,0xbbb5278f,0xbba8a6a8,0xbac82417, -0x3a2740a4,0x3af5853a,0xb90791b8,0xbb09e4ea,0xbb638288,0xbb888aa5,0xbb6ed6e7,0xbb4b6a06,0xbb0ffcd7,0xbb149978,0xbaa7a2eb,0xb9cbe87a,0x388b3b7d,0x3983e2f0,0xb9afb037,0xba4aabc6,0xba1fd751,0x3983e588,0x398ca999,0x3a0f1b71,0x3a7b4f2a,0x3a4e8070,0x3b228cf3,0x3bc81f12,0xbb65d953, -0xbc15ed85,0xbc85bcde,0xbc78aab7,0xbc4b57a9,0xbc0dbaa5,0xbbc2586a,0xbb7fd36a,0xba1c1bf1,0x3a8b33c7,0x3a1d5879,0x3abea143,0x3acaf08b,0x3ae6d7df,0x3aa0d20f,0x3a315647,0xb983a9a7,0xba8048ad,0xbb2a8a04,0xbb8e0eee,0xbb844908,0xbb908d38,0xbb7804dc,0xbb2ddb62,0xbad71bcd,0x382f1097, -0xb9a09f31,0xb9cface0,0xb91df6a7,0x39ddcce9,0x3a542109,0x3aa86223,0xb97540d7,0xba199b6d,0x3953e1e2,0xbb7480be,0x3bd974e2,0x3b268065,0x3ae22a4c,0x3b0dad7c,0x3af70093,0x3aa8008d,0x3a36ca59,0xba450200,0x3a2d9117,0x3a6749bb,0x3a56a349,0xba03d293,0xbaddcb97,0xbb211d70,0xbb0d36ff, -0xbb09d050,0xbb11c576,0xbb0ad6e0,0xbad464d8,0xba8e9f81,0xbaa68b12,0xbac9c4b6,0xbafd0473,0xbb28bb8d,0xbb191a2a,0xbae17f21,0xb79a7161,0x3ac7cf44,0x3b23ab5c,0x3b48b0fb,0x3b53e86b,0x3b3f8f24,0x3b682809,0x3b64ea65,0x3b837f73,0x3b500f15,0xbb785691,0xbb7d7274,0xbb5447f8,0xbb2752b8, -0xbae3afd1,0xbb081e3f,0xbb264b9a,0xbb5418cd,0xbb58943d,0xbb54a5fc,0xbb396bf1,0xbb0cedc1,0xbab37b0c,0xba248967,0xba8f7626,0xbabd3297,0xbae159a0,0xbb13bfa6,0xbb3c3c35,0xbb5ae392,0xbb4edfea,0xbb4c4569,0xbb51fb0c,0xbb455ea9,0xbb31ba7d,0xbb3eb47b,0xbb169c5c,0xbb157526,0xbaf9f482, -0xbabe7346,0xba88e44f,0xba4cabcd,0xbac848cf,0xbb1fd444,0xbb3e4142,0xbb54878a,0xbb03ccba,0xbb834a0d,0xbb703bbe,0xbb7b004d,0xbb7c4d40,0xbb776893,0xbb646216,0xbb54fb51,0xbb2b5d1e,0xbb0a8afe,0xbae81797,0xbab455b8,0xba92936b,0xba433cf4,0xba91af9e,0xbaaf42da,0xbaced48e,0xbae7f0cb, -0xbae21b2b,0xbb154a15,0xbb01f62a,0xbb37aecc,0xbb5cfa49,0xbb420795,0xbb569e89,0xbb815fb8,0xbb87ede2,0xbb94ded8,0xbb911387,0xbba0aa2a,0xbba341d2,0xbba0e769,0xbb99f5c7,0xbb81438c,0xbb84f51d,0xbb876cb9,0xbb808fb0,0xbb814012,0xbb6712bf,0xbb66f7de,0xbb5deacc,0xbb58ef1b,0xbb57f6ee, -0xbb5b9d72,0xbb4dfaf4,0xbb425db6,0xbb342565,0xbb28d309,0xbb1dd7f4,0xbb0da830,0xbb1859d1,0xbb1dc5bf,0xbb23c157,0xbb2e1b0b,0xbb32e00c,0xbb3e7aa9,0xbb5c02a9,0xbb23cb79,0xb89289a3,0xbb7b090e,0xbb331ced,0x38413998,0xb951bc57,0xb9e728b3,0xba33eb2e,0xba6ca8c6,0xba8d049e,0xbab72451, -0xbb4edc1a,0xbb8efcb0,0xba197f95,0xbb3708a3,0xbb69c0b5,0x3b502981,0x3ac0eeb6,0x3b74ae03,0x3b362182,0x3b4e4e2d,0x3b412801,0x3b510a7f,0x3b56ef08,0x3b4fb4ab,0x3b6e5437,0x3b710269,0x3b53e376,0x3b6297c3,0x3b674d28,0x3b7c7d4a,0x3b7145da,0x3b68b7a0,0x3b57cec6,0x3b4c3cdd,0x3b2b197d, -0x3b621515,0x3aa64ba8,0xba937ffe,0xbb996dab,0x3b28aaf1,0xba1e2e98,0xbb981f45,0xbb938db2,0xbb96e179,0xbb98f7b7,0xbb9decec,0xbb9a6de5,0xbb8045e2,0xba7065cd,0x3b2a4eca,0xbb86da0c,0xbaa7ee4d,0xbb0aa053,0x3b7f0814,0x3b7497f2,0x3b814a4c,0x3b7077ec,0x3b854aa8,0x3b8be147,0x3b819fd9, -0x3ba3e4a4,0x3ba10027,0x3b78eb9c,0x3b8f51bb,0x3ba3b16f,0x3bc7bb76,0x3bc3eedc,0x3bb3e37c,0x3b93bb70,0x3b61c167,0x3b2e1125,0x3b119ce0,0xbb3ae204,0x3aa75a27,0x3b0d80fe,0x3ae02b63,0x3aa5bda5,0x3ad5e5e9,0x3af8fb83,0x3addb9db,0xb840fbcb,0x3a357767,0x3a82ce61,0x3ac21b7e,0x3a75db50, -0x37f27507,0x3aff0599,0x3b2ee8ad,0x3a097172,0x3b21f77c,0x3b84b0e8,0x3b87789a,0x3b7c55f2,0x3b9b1232,0x3baeb13c,0x3b96ee17,0x3bec39c1,0x3bf06f93,0x3bac22a1,0x3bc7ab1a,0x3bd07367,0x3c07cbc1,0x3bfde5e0,0x3be49d07,0x3baead57,0x3b7117c7,0x3b45e665,0x39f77f66,0xba226664,0x3a31574e, -0x3b0fcaf4,0x3b2ee7b5,0x3ac0973f,0x3a7a91dd,0x3950babb,0x39d2215f,0xbb2dc1de,0xbb1afb15,0xbb2c630a,0x3a70b4c1,0xba828a67,0x36b1357c,0x3b27b398,0x3aa9e8f3,0x3a2ea7cd,0x3b6d2f7f,0x3bb579de,0x3bc32d36,0x3bb9e2d5,0x3bd82d8c,0x3be6fffb,0x3bb9a72c,0x3c0ecaf2,0x3c093608,0x3ba64b29, -0x3bd4b17c,0x3c1671d6,0x3c593c04,0x3c5a049c,0x3c3675f5,0x3bf55f4e,0x3b76d63b,0x3aa24960,0xbadbe3c9,0xbb66909f,0x3a0dee5c,0x3b0b2c24,0x3b83743b,0x3b63dbb4,0x3ae97df1,0x3b17511d,0x3a2a49f0,0xbb0d0e7b,0xbac5c97c,0xba8626e0,0x3aaf2bc7,0xbab0f745,0xba0faed1,0x3b956fdd,0x3b1be0fc, -0xbbb500aa,0x39ac21bb,0xb81da15a,0x39e003f2,0x3acb9420,0x3b0ece36,0x3b67430f,0x3c0575a3,0x3c198469,0x3c3da8fd,0x3c62f774,0x3c28ccaf,0x3b7d0b5b,0xbb2b2ddc,0xbb5920cf,0xba798249,0x3b99c1c2,0x3bed5951,0x3c27922b,0x3c12b21d,0x3b9eec25,0x3ba20403,0x3b1d01d6,0xba8080bf,0xba9cc5b6, -0x3ac106fc,0x3ab1c987,0x3ac19540,0xb82e72a2,0xb8ea2c66,0xbaaf7807,0xba680b11,0x3aecbba6,0x3afcadcf,0x3a036715,0xbb7cf9cf,0x3c0c76f0,0x3c03ff0a,0x3bb6efe8,0x3a128a31,0xbb964502,0x3be36092,0x3c249407,0x3ba2c55e,0x3b36d517,0xbae9038c,0xbbcc57b6,0xbad428cd,0x3b516887,0x3c09ca13, -0x3bae4e30,0x3b90305d,0x3bcaca33,0x3b53208d,0x3b4c7f99,0x3ad93dfb,0x3a953f43,0x3a918949,0xba722303,0x3702d26d,0xb9ba4b4f,0x395ce3c2,0xbafd91c6,0xbb0a08eb,0xba7625ca,0x3a35b88a,0x3a676bd5,0xba98f7f5,0xbbbd5f5b,0xbbde672c,0xbb9eafcb,0x3bbbdc45,0xbc73a3de,0xbcca75f5,0xbbf31fe2, -0x3b24c718,0x3ba0bb6b,0x3bbeae61,0x3ba42bff,0x3a6e2110,0x3c2f2321,0x3c4ce38e,0x3bcf373f,0x3be6d4dd,0x3bc6178e,0x3bb98745,0x3b960482,0x3b59a4e6,0x3aae38d5,0x3ae19483,0x3b2f9a2f,0x3af08318,0x3acdfd95,0x3adee51f,0x3a8c953f,0xb922f4f8,0xba726caf,0xbadf2838,0x3a1be9e8,0x3ab6ca18, -0x39e1eac4,0xba9acc33,0xbad00317,0xba0dbcfb,0x3ab772b1,0x3ad3b720,0xbb88e381,0xbbef1162,0x3c4387a0,0x3c7176ba,0x3c51106d,0x3c210610,0x3c492259,0x3c041eb0,0x3badb56f,0x3ab7b410,0xba6c1fc1,0xbb1e28f9,0xbb0bb176,0x3ad35a15,0x3b7c4701,0x3b96eb9e,0x3ba3fee7,0x3b9c4fbc,0x3b8eddd8, -0x3b21b504,0x3a3daef3,0xba9bc278,0xbb28cc30,0xba8fcf8c,0xb7216f47,0x3996fb1b,0x3a080670,0x3a34be38,0xb97a86e5,0xba12a640,0xb9adee49,0x39ceb4f2,0x39f368a1,0x3ab86c00,0x3ae6bdc6,0x3b268ced,0x3b22c599,0x3bf6f948,0xbbcda328,0xbae5a1de,0x3b14e4c3,0x3b2f7eb9,0x3b9462e0,0x3bdf97a3, -0x3c06f8be,0x3c0427f6,0x3c0dabeb,0x3c1a1767,0x3c2495a3,0x3c0f95c6,0x3bf9b619,0x3be712b1,0x3b787cb2,0x3ac487a8,0x39990f16,0xbab3c9b5,0xbb047c87,0xbb2322ec,0xbb6441a4,0xbb36ac94,0xbb6578cb,0xbb0e9ad8,0xba8db0a7,0x39ca2c65,0xb97917e0,0xb92345cb,0x385cfb8d,0x3a5d21a1,0x3a9394d2, -0x3ae54d48,0xb96b6586,0xba276663,0xba8a261c,0xba833ee4,0x3b11f22f,0x3bca45e7,0x3c0111e8,0x3be15d07,0x3bed1df6,0x3bea7216,0x3bf77c24,0x3c0a22cd,0x3ba0706b,0x3b236241,0x3ab0678d,0x3ad3a00d,0x3ad2dbac,0x3a9d53f4,0x3adb4eed,0x3adb6ebc,0x3a49725f,0x3a253ae8,0x37aa3f7a,0xbaa5490f, -0xba8b5962,0xba7860a9,0xbaaaf2bf,0xbaba3334,0xbac11390,0xba769391,0x3a840d32,0x3b1530de,0x3b4c7a55,0x3b688739,0x3b6b2f2f,0x3b61d23a,0x3b6de036,0x3b923f3f,0x3b8ea4bf,0x3bb0cf88,0xba912b98,0xba124417,0x3a43853b,0x3a9f5f9c,0x3b0def50,0x3b115fe8,0x3b0e4379,0x3b2152d6,0x3b01367d, -0x3b04e826,0x3aecb09e,0x3aaa4e30,0x3a471f5d,0x39662bdf,0xb95ee390,0xba317e44,0xba833b09,0xba8923d5,0xba4dd035,0xba9c7a02,0xbb1597a8,0xbb27bdc3,0xbb356398,0xbb22027d,0xbb2e6083,0xbb1b897a,0xbb229c54,0xba90a718,0xbab977fa,0xb9911a37,0xb98563a8,0x3a54879f,0x38a9a7f5,0xba5c05d1, -0xbaf9ab9c,0xba86413c,0xbb9e9189,0xbb12100d,0xbae97313,0xbaa9338a,0xba44da72,0xb8253812,0x3a4209d5,0x3abe33bb,0x3a80c4be,0x39efa525,0x37996dda,0xb9c26497,0xba34d17b,0xba780e5b,0xba8cf021,0xba9d8798,0xbab4877d,0xbac86f79,0xbaf07ab6,0xbacf1170,0xbb1ac8f2,0xbab70b2f,0xbaacff88, -0xbb004d20,0xbb07c491,0xbac54403,0xbad06ef8,0xbaf1a6ec,0xbb3253ac,0xbb21f4c0,0xbb3a8274,0xbb6e615d,0xbb59336e,0xbb6fe287,0xbb570895,0xbb20967d,0xbae377c4,0xba619861,0xba8b8d7d,0xba30d7d1,0xb9f87620,0xb9961b0a,0xb9232911,0x3938ebec,0xb7e5cf31,0xb84c4923,0xb8f2c100,0xb9460174, -0xb998b18d,0xb9e784af,0xba05965f,0xba1b9ca3,0xba334810,0xba41725f,0xba71be08,0xba5f40c6,0xbaa819dd,0xbb2a3194,0xbb9da265,0xba646d0e,0xbb289656,0xbba9637b,0xbbab7d03,0xbba9d07d,0xbba2d564,0xbba78198,0xbba62638,0xbba6c848,0xbb4a1c1f,0xbaa48483,0xbba9f3bd,0xbb57a281,0xb9e31166, -0xbae3d6c7,0x3a1f80a0,0xbb3c93d6,0xbaa55603,0xbab88a02,0xba8667a9,0xbadf3a53,0xbafe2714,0xbb11c107,0xbae1f3e3,0xbad376c3,0xbaf7f08b,0xbacecf84,0xbac016f2,0xba9c5de7,0xbabae6a0,0xbacb81cf,0xbae340dd,0xbaf8ed1d,0xbadd7e6d,0xbb3cbf18,0x3a264e84,0x3b48a298,0x3bb78e81,0x389312fe, -0x3b44a8cc,0x3ba1c45c,0x3ba73e10,0x3ba06cda,0x3b82c103,0x3b915ca2,0x3b95ece2,0x3ba35ca9,0x3b1f98b7,0xba57d622,0x3bb7365d,0x3b5af299,0x3b75882f,0xbb0397cd,0xba60cac9,0xb946a2cf,0x39e339d3,0xba9441a9,0xbaf0962d,0xbb2d45ff,0xbaecf5fc,0xbaeec7ec,0xbb28f44f,0xbaf02841,0xbaa636e5, -0xb9d3a9bb,0xba424b9c,0xba94f3a5,0xbaf8c061,0xbb17049c,0xbb3fdc1f,0xbb2f21d2,0x3b2173ad,0xba1da5f2,0x3a5a2493,0x3a93b995,0x3ab2c3d5,0xba130800,0xba546387,0xbaae7585,0xba8a7dae,0xbb270523,0xbb2bb8c9,0xb82eb9e2,0xbab4a312,0x39940810,0x3b00a248,0xbaab5c0c,0x39642a14,0xbafaf39a, -0xba9b8bc2,0x39da3d5e,0x3abc50ca,0xba887b62,0xbb161863,0xbb8bdccc,0xbaf9556c,0xbabaab31,0xbb2e35e6,0xbaa462e3,0xba539ee1,0x3a5a52a7,0xb95c8b5d,0xba68b0b6,0xbb13509e,0xbb2f5a01,0xbb7dd4d8,0xbb0bd5ea,0xb8f10f74,0x3932054d,0x3ad7a17c,0x3aa3e1cc,0x3b074a2d,0xba51d2fb,0x3a39861a, -0xbb232d79,0xbb1ba1c3,0xbb834038,0xbb1a0974,0x382e066c,0xbaa8bd9f,0xba13a094,0x3b4d9957,0xba0ae6c1,0x3a4ee054,0xba8cd582,0x3aa4398a,0x3b7ccfdc,0x3bb4530a,0x3afe76f4,0xb9a933d9,0xbb82b101,0xbae019b9,0xbb0df368,0xbb8eee32,0xbb21a611,0xb8b8a2ae,0x3b4fab84,0x3b22af58,0x3a2766f6, -0xbb0d58c6,0xbb77fb3a,0xbbbb6bf1,0xbb9cd4c2,0xbac31363,0xbabc67e6,0x3b643713,0x3b3343a4,0x3b1860b9,0x3a5fed06,0x3ab0c85f,0x39d28f74,0xbb6088d8,0xbb262784,0xbb2246f5,0x3a0b434c,0xbb30d0f9,0xbac4f67a,0x3b8707cf,0xb9e28ddd,0xbb55120b,0xbbb26bd1,0xbc1d5735,0xbc06f02c,0xbbd218eb, -0xbbfe1c6f,0xbbfb816b,0xbbb84ee8,0xbb3a9656,0x3a6c2b6c,0x3b6ff62f,0x3b31e3e7,0xbad064c4,0xbbc198b5,0xbbdd6f65,0xbbac30e0,0xbb5d1d3d,0xb925a3bf,0x3a9ca4cc,0x3ba2edee,0x3bd73cb0,0x3afde7bb,0x3a5e66bd,0xbb197152,0xbad367be,0x3af9d65c,0x3a0b7fb0,0x39e5f785,0xb9dad971,0xb9ce5b0c, -0xba85c6bc,0x37cee0fa,0x3ae7b394,0x3b197df9,0x3a29df07,0xbb3d7f49,0x3c1439af,0x3b4329e8,0xb9c9a89d,0xbb449dbd,0xbbbeeefa,0x3b95ff2b,0x3c0655c0,0x3ba94fbd,0x3acbf1c7,0xbb778f66,0xbc097f0a,0xbb2f0bb9,0x3b0f5327,0x3bcfe709,0x3a95b39a,0xbb1ce6dd,0xbb80fca3,0xbb611ac3,0xbb33bc25, -0x3a5dfcab,0x3b27c4c6,0x3ab950b9,0xba59f24a,0xba8eb8de,0xbad76e3b,0xb9e4fe6e,0xbb06f156,0xbaf0a511,0xba65a4bc,0x3808023c,0x38a55553,0xbb21c387,0xbbccf1c3,0xbc098dc9,0xbb98f7a3,0x3b6dafb5,0xbc84a6d7,0xbccd7eb6,0xbbd97143,0x37f058ba,0xbbf6fd19,0xbc086062,0xbc3dc4b4,0xbc804cb6, -0xbbcc1f13,0xba1cf4b1,0xbac1a6f3,0xbbc0c8b8,0xbc0f91cb,0xbc04632f,0xbbe3a0b7,0xbb78234b,0xba2db00e,0x3982de23,0xba0dcf50,0xb95e36d9,0x3a0115a0,0x39170d22,0x3a3240f3,0xba68e2ee,0xba9f6c48,0xbaf454a3,0x39765698,0x3a6a8222,0x395ff945,0xbaa70c17,0xbab9697f,0x3927c2be,0x3a7c99bf, -0x39e385e0,0xbb1d14c0,0xbc1e20f6,0x3c52bc1d,0x3c5c9876,0x3b93c839,0xbb01ac94,0xbbfecb79,0xbc005ede,0xbbcacecb,0xbb8968ac,0xbb399741,0xbb5752ad,0xbb6d7f5e,0xba23e72a,0x3ab4e686,0x3b062960,0x3a6e4447,0xba32d9fe,0xbaca0d0e,0xbb336983,0xbb49e522,0xbb0a2c3a,0xba461bf3,0xba841e11, -0xb8f927a0,0x394b790e,0x396b8a50,0x39e117d2,0xb9fca370,0xba367ed3,0xb9b80674,0x38e02c97,0x381c0514,0x3a191e23,0x3b0ec184,0x3ad71645,0x3b2d5847,0x3bfd55c0,0xbaaede4a,0xbb842886,0xbc1b1962,0xbc0b03ac,0xbc023692,0xbbaca8b0,0xbb7c495b,0xbb36d625,0x39aa9a5a,0x3b17b4c7,0x3b34e294, -0x3b5ba1d0,0x3b44edd7,0x3b3ba020,0x3ae6fa07,0x3a2a8344,0xba3dc101,0xbad527b8,0xbb5952c6,0xbb8f4fd2,0xbb5b3119,0xbb887be5,0xbb7a61fd,0xbb08bc86,0xbaa793d0,0xb9a7f4f9,0xba010414,0xba60a50a,0xb9cd47c9,0xb97d88d3,0x3a2ab7d8,0x3adbb125,0xb99c72f5,0xba0169a4,0x39875e83,0xbb13ca72, -0x3bef6c38,0x3b6c0e0f,0x3a8bf690,0x3ae145b1,0x3abd20c2,0x3aa53d6b,0x3a9bb818,0x3a6cfb11,0x3ae13d6d,0x3ad1b556,0x3ab5ae28,0x3a0a652d,0xb9373872,0xba855cc5,0xba7cac69,0xbaaeefde,0xbb154e7e,0xbb0cf8fe,0xbade5472,0xba2fe5e8,0xba66310f,0xba9bcf88,0xba98c763,0xbb001fd1,0xbae68dd0, -0xba5fee42,0x3a57aad4,0x3b0e1c82,0x3b0f24bf,0x3b2761c5,0x3b1fe436,0x3b0994de,0x3b2c56f7,0x3b3aa4aa,0x3b7245c0,0x3b613b70,0xba807437,0xbb00e352,0xbb068f1a,0xbab99306,0xbab5cce6,0xbad22222,0xbb026320,0xbb207d4e,0xbb124f36,0xbaf5fda3,0xbaa3ddf8,0xba9a48e6,0xba82fdcd,0xba350668, -0xbaae094a,0xbaef0b64,0xbb1b4633,0xbb1f2202,0xbb49ee8b,0xbb35521f,0xbb0ad845,0xbb267d6d,0xbb3d661c,0xbb2ff0c4,0xbb11ba60,0xbb23a392,0xbacefcc5,0xbacaf005,0xb992fac2,0x385b9c8d,0x3a8da6a4,0x3ac64cbd,0x3a86b479,0x3a0de339,0x39e229da,0xb9eec471,0xbadecf2d,0xbb7e41f0,0xbb8043a9, -0xbb835c3c,0xbb858938,0xbb8479e9,0xbb817d7f,0xbb81326c,0xbb6a8894,0xbb5b6784,0xbb4be814,0xbb311443,0xbb1417fe,0xbad980c9,0xbafb39ec,0xbb0558f3,0xbb12f39f,0xbb1aed38,0xbb1f19f3,0xbb3a9f18,0xbad48862,0xbb37946f,0xbb386b80,0xbb22d477,0xbb1f33c2,0xbb47694d,0xbb6067cf,0xbb67b287, -0xbb562e39,0xbb89973a,0xbb960d21,0xbb8ef0db,0xbb8d5a26,0xbb6ba531,0xbb7004e1,0xbb85a6a1,0xbb1ad832,0xbb7cbf92,0xbb5a6f95,0xbb5ecf69,0xbb5daecf,0xbb5f942a,0xbb62d1c0,0xbb69a5c9,0xbb5b0631,0xbb4dd488,0xbb40c116,0xbb35b151,0xbb2e2fd4,0xbb218e3a,0xbb2bad82,0xbb2ff058,0xbb344b32, -0xbb3ddd5c,0xbb3ed061,0xbb5f115d,0xbb0e27dc,0xba532ed8,0x3a3c9f1c,0xbb2820e3,0xba47d5b8,0x3a804c32,0x3a5e3672,0x3a1cce79,0x39772f5d,0x399e500d,0x393ba02c,0xb9074852,0xba9695c9,0xbb3d0bd1,0x3909b8e6,0xba79d049,0xbb5d33d4,0x3afe0010,0xbaa3c227,0x3b34e31a,0x3ae815e4,0x3b032dc2, -0x3b00d003,0x3aeac1bd,0x3ae873d0,0x3ae617bc,0x3b0c4d4a,0x3b127995,0x3b02ec4b,0x3b0c9c3a,0x3b0fd388,0x3b1d492c,0x3b1c6fe6,0x3b18321b,0x3b0d9d7c,0x3af926c4,0x3aca9dd4,0x3b1fbd32,0xbaad5169,0xbb3df098,0xbb47747c,0xb9077d3f,0xbb2cbd20,0xbb614856,0xbb6d14f6,0xbb78b0b4,0xbb7171be, -0xbb8c6ea5,0xbb8aff38,0xbb63c7e5,0xbb41bcbd,0xb8e049f6,0xbb37a0d8,0xbb548557,0xbb5c228f,0x3b025431,0x3b34547f,0x3b2a1a4c,0x3b3235a3,0x3b0738b2,0x3afba404,0x3af61831,0x3b327965,0x3b385da2,0x3b0b4a4b,0x3b291c45,0x3b4fe983,0x3b835fa0,0x3b8d6393,0x3b8154b3,0x3b4fec9b,0x3afcf80b, -0x3ad3a138,0x3a241910,0xbb5419fa,0x39e11637,0x3a283013,0x3a49cbbd,0x395b6493,0x38589929,0x39d349a3,0xb9b0ed56,0xbafbb472,0xba94ee0e,0xb9c0850f,0x39156c7f,0xb9f2a459,0xba9784a2,0x39cb4afc,0x3a841ff6,0xbaeee3a1,0x3a84f5c1,0x3b628b28,0x3b3f2044,0x3b607fdb,0x3b0f8403,0x3af10590, -0x3ae89646,0x3b70af70,0x3b8a1b38,0x3b55b46a,0x3b74bc2e,0x3b8232c8,0x3ba7961f,0x3bb34394,0x3ba35123,0x3b79d4b8,0x3b04872a,0x3af39714,0xba30bbe8,0xbaf20c6b,0xb9051d90,0x3acb8666,0x3acb4c92,0x39ae5a3c,0xb8b33d57,0xba850893,0xb9f23b86,0xbb763dfd,0xbb4383d8,0xbb7835ad,0xb711f651, -0xbafb0f73,0xba945d57,0x3ab0a4df,0xba0245f9,0xbae44265,0x3b05fd71,0x3ba1930c,0x3b9bbb77,0x3bb78e84,0x3b5b3569,0x3b1fe540,0x3b025c9d,0x3b83bd16,0x3b8a7d82,0x3b2c01ae,0x3b525e19,0x3bb10add,0x3c0c1f3a,0x3c22a8eb,0x3c0a8e28,0x3bb936bf,0x3afae650,0x3a0ad8e8,0xbb15acc9,0xbb629df8, -0x3a9c05ef,0x3b2e2433,0x3b7d5d0d,0x3b540480,0x3ae03734,0x3aca4ba2,0xb9688dd4,0xbb3d7327,0xbb55c9f4,0xbb20e9cd,0x39cb6ad0,0xbb2192c8,0xbaf0ef65,0x3b87d5eb,0x39f6dc77,0xbbfdfe7e,0xbaddfe02,0xba448b99,0xba4178a4,0x384b7e87,0xba2ec0e0,0xba3be03c,0x3ab6f8a6,0x3bb80734,0x3c1eb83f, -0x3c4480ed,0x3c4a479d,0x3be55fad,0xba5fdf38,0xbb30a4df,0xbaebf600,0x3b594852,0x3b9605f4,0x3be503f2,0x3bb7ce71,0x3b315df5,0x3b57ca86,0x397dfb1b,0xbb1bb0f8,0xbb0ee23f,0x3b07b34f,0x398125a5,0xb8da6e6d,0xba080a23,0xb9b09814,0xb9cd630c,0x3a473f30,0x3b1828de,0x3a9910e7,0xba8efa98, -0xbbc2b600,0x3c004c1c,0x3bc75501,0x3b903f7e,0xbae2b17e,0xbbdf96d5,0x3b30fdd2,0x3bc3c4f2,0x3b6d464e,0x3b14e6d2,0xbb1a39bd,0xbc017511,0xbb883e52,0x39eefbac,0x3bcbdac8,0x3b9a0a94,0x3b50a0c0,0x3b465ecb,0x39e9fa1c,0x3acc7484,0x3ae4f684,0x3aa9ad16,0x3ab8f329,0xba83bc6f,0x39d276dd, -0xb9e8d4bf,0xba048aa0,0xbae980fe,0xbab3b6d2,0xba22aa8b,0x3974014b,0xb9ac55c1,0xbb22281f,0xbbe4df00,0xbbe621f7,0xbb70821b,0x3bd9a0c3,0xbc9b93f2,0xbcbd1dc8,0xbb8a7ab8,0x3b6277a3,0xba31b325,0x39ec9659,0xba69d58f,0xbb8ff6d8,0x3b574438,0x3bf69c12,0x3be8fb3c,0x3b8c9142,0x3ad4840c, -0x3a84b52f,0x39f78c86,0x39d7a040,0x395ee51b,0x3a6f9131,0x3b346bdf,0x3ad57f87,0x3a644365,0x3aabcee7,0xb942c904,0xba83b715,0xba9478b3,0xbaeb6c99,0x39f835bd,0x3a88617d,0x3949f90c,0xba7e955d,0xba859bef,0x3a1b03ed,0xba295c2f,0xb9ab21dd,0xbb32b90c,0xbc3fd119,0x3c486038,0x3c30dfda, -0x3bb87916,0x3aa4156e,0x3b1f3b88,0xba28fdab,0xba94f2bc,0x395989fa,0xbb1993a8,0xbb86a0fe,0xbb9e0515,0xbab68189,0x3a996556,0x3b13eaa5,0x3b3827b4,0x3b2e63a2,0x3b534e06,0x3ab600ac,0x3a1ffa5b,0xba5e476f,0xbb096905,0xb9dca7fc,0x3a3a04f3,0x3a0771b7,0x39ad0d39,0x39ed3de3,0xb96af35c, -0xba38d5cc,0xb966cd78,0x39056d57,0x399e64ab,0x3af71fc6,0x3b31c54b,0x3b3f2ed1,0x3b3de943,0x3c14d34f,0xbbd4cc7d,0xbb876f24,0xbaf9abc3,0xbb05c4cc,0xba2f0fc1,0x39676c13,0x3acb71a9,0x3b3d35bc,0x3b82948f,0x3bacf114,0x3ba5c3e6,0x3ba38418,0x3b8e7616,0x3b7e65a0,0x3b15bf22,0x3a381c19, -0xb974368e,0xbb129ec9,0xbb3d37f2,0xbb5d81e2,0xbb95d423,0xbb5da0c2,0xbb6ad28e,0xbae81a68,0xba54d869,0xb98d0d54,0xba269e6c,0xba1b8e2b,0xba82e508,0xb9a6ec76,0x38cc29c4,0x3a6c8f41,0xba8537ec,0xbab88387,0xbafb8281,0xbb5ce5c4,0x3a67d2f0,0x3b19b578,0x3b67eb4b,0x3b56b14f,0x3b98d2ed, -0x3bba16a4,0x3be0982e,0x3bfa8c12,0x3bb74921,0x3b807bd9,0x3b4851da,0x3b2b26aa,0x3af9f483,0x3a47d1c3,0x3a2a847d,0x39ea2871,0xb858c7b7,0x390c6df3,0x36f6ae7f,0xba4aab82,0xba7aea00,0xba94c676,0xbb0e2041,0xbae83eaa,0xba9ac7b0,0xb9886568,0x3ac6f646,0x3b1cf6e2,0x3b3b1881,0x3b2fe60b, -0x3b15f71e,0x3b02f0d5,0x3b0addbc,0x3b1df36f,0x3b1e9f84,0x3b296005,0xba5a388f,0x392737e4,0x3ac82e1d,0x3a9a7ec1,0x3ab3017f,0x3a793b1c,0x3a5112f2,0x3a8452f2,0x3a5b0d88,0x3a8a5160,0x3a9e0daf,0x3a5d5d3c,0x3a0b0324,0x396273ef,0xb99407fe,0xba6087b4,0xbaad95f9,0xbaba0f4b,0xba899d26, -0xbae4526a,0xbb3ce808,0xbb304950,0xbb305334,0xbb12666c,0xbb1bffb0,0xbafc28e9,0xbaf8ef8b,0xb97eb392,0xba21f838,0x3a8dfaa7,0x3a99fc19,0x3b20665f,0x3acd363a,0x3a18cf25,0xb9f400a0,0xb7f199c9,0xbb9df097,0xbb3b7a9f,0xbb274bb7,0xbb1cfb85,0xbafd9a24,0xbabd45a2,0xba85029d,0xba55782c, -0xba657d8b,0xba86797c,0xba92af94,0xba96cb1d,0xba9d0e43,0xbaa6a5bd,0xbab0baf5,0xbab41ca9,0xbabbeaa6,0xbaccc90e,0xbad9f840,0xbad4d5e2,0xbb3bfd19,0xbaf9e4fd,0xbb16111f,0xbb25adc8,0xbb3d2ce6,0xbb28977b,0xbb1d5c69,0xbb383b18,0xbb6b15ab,0xbb4855bc,0xbb452b6d,0xbb722c1c,0xbb5dff87, -0xbb75cba1,0xbb726e5a,0xbb347111,0xbb468d38,0xba9a9b54,0xbac352c9,0xbaa728f6,0xbaa050ba,0xba9f31bc,0xba99c056,0xba85bb2b,0xba7e9200,0xba68d959,0xba5df191,0xba56731a,0xba539437,0xba50f4b2,0xba66a12b,0xba7d6bf8,0xba894eb7,0xba932c29,0xbaab7498,0xba886fa2,0xbb2d1a2d,0xbb77af82, -0xbb8cebd1,0xbb1b41cf,0xbb800977,0xbb94d7e8,0xbb9947f2,0xbb9786e2,0xbb8d9ec6,0xbb97b214,0xbb976c6a,0xbb959b10,0xbb807773,0xbb1e4478,0xbb8fc1c2,0xbb88ff22,0xba973e35,0x39d8d96c,0x3b3e6f2d,0xba0b1e02,0x3a08fd41,0x3a271379,0x3a69f003,0x3a3b0e2d,0x3a1deae1,0x3988f7ca,0x3a239708, -0x3a2f33c2,0x39df17af,0x3a2590bd,0x3a3c9c28,0x3a7396a5,0x3a5ab6a3,0x3a4266c6,0x3a1dfaf3,0x39b6424e,0x3986170d,0xba1680b1,0x3b3c79a2,0x3b6f0d37,0x3b21fe34,0x3b2b8aaf,0x3b749a8a,0x3b09de90,0x3b1dbecc,0x3b16aa0c,0x3ad7c91e,0x3b0cdbfc,0x3b192fb8,0x3b3a33ab,0x3b588d91,0x3b0044c1, -0x3b2fdddb,0x3b7c9206,0x3b545ae5,0x3a2fa63c,0x3a459cb3,0x3ae469a4,0x3b135227,0x3b07061f,0x3aede39d,0x3a574569,0x3ab6a6f8,0x3a9b5f9a,0x39ff4189,0x3a5cb66f,0x3aaa5efd,0x3b0723b3,0x3b1448a5,0x3b0be82e,0x3ac89ea4,0x3a56cf41,0xb99e9bdd,0x38d7047c,0x3b14675b,0x3a81c9f5,0x3b29c01e, -0x3b071d7f,0x3b065b23,0x3a82c39d,0x3a113ee3,0x3a01ba97,0x3a29df25,0xba42b1e6,0xba950f3a,0x3a68ef0b,0xb86e5e2e,0x3a7e57f6,0x3b3f4209,0x3a23d058,0x3af61381,0x399600e3,0x3a0d2b2c,0x3b253b55,0x3b50f15b,0x3b500df1,0x3b3a9519,0x3a1a6a09,0x3b1568c5,0x3b1a9761,0x3abbde61,0x3b0de990, -0x3b24b9b9,0x3b7982f7,0x3b6d926f,0x3b53d5a8,0x3b0a48ac,0x3a51ba15,0xba569000,0xb9640218,0x3aaec642,0x3ab60ad3,0x3b1f5e93,0x3b027381,0x3b1a8ef2,0xb95a626b,0x39ed0d63,0xbb0d5e7c,0xbacd0207,0xbb7c4219,0xbb0fe016,0x39d7dc7a,0xba505784,0xb6bb48bd,0x3b62d9da,0x3a613adb,0x3ac333ee, -0x3a342ea0,0x3ae8eb83,0x3b9ea16f,0x3bd0295a,0x3bdafa3d,0x3bcbe4f4,0x3b222dbd,0x3b72d6d8,0x3b363fac,0x3a4e539b,0x3abd3883,0x3b66725f,0x3bd6a780,0x3bffb60c,0x3be37628,0x3b9816a1,0x3ad93485,0xbadbc754,0xbb008044,0xb94652a9,0xb5a2b3ca,0x3b8b1c72,0x3b564d5e,0x3b18a49a,0x3a35208b, -0x3a27740b,0xba2e87ac,0xbb84f40e,0xbb8148b2,0xbb783871,0xba11d42c,0xbb5c2462,0xbac66fb7,0x3b7e09d2,0x39dbcd55,0xba1dfc08,0xba854961,0xbb8249a9,0xbb25b049,0xbb1a5e1b,0xbb23460e,0xbb1f4276,0xbada0c8c,0x3a8e1838,0x3b896d16,0x3bb507f8,0x3bdd98bb,0x3b17f1a1,0xbba9efeb,0xbbb452c1, -0xbb9e44c6,0xbb6d446f,0x396016e5,0x3b066c0c,0x3bb805f0,0x3bbb8fce,0x3a9ea68a,0xb9670049,0xbb41c0b8,0xbb01378b,0x3b1dc7be,0xb9802c88,0xba43af56,0xba642694,0xb9950d30,0x398bf8e4,0x3b21e3e9,0x3b4dd9f9,0x3b45c2ba,0x3a4648a4,0xba71e25c,0x3c303031,0x3b68462c,0xbaf69a8f,0xbb7abc2e, -0xbbf61371,0x3b69e6b4,0x3bfdd9a4,0x3bb9fcc5,0x3b484988,0xbb32d2f6,0xbc123762,0xbb939c21,0x39ae4fc9,0x3bc50c06,0x3b926292,0x3b421329,0x3b1a2ab3,0x3a8dc1a2,0x39a44831,0x3b49e5aa,0x3b456e92,0x3b0be8be,0x399b305c,0x38082de5,0xba89a653,0xba80f68e,0xbaf006a9,0xba8f0a92,0xba0a712f, -0xb82f0344,0xba3d2028,0xbb64b0a1,0xbbe7157f,0xbbf2d949,0xbaefc57a,0x3bd158bb,0xbc9d1eb7,0xbcb0f84f,0xbb542627,0x3b915205,0x3b011570,0x3b60062b,0x3a22c4ac,0xbb99abff,0xbb8598fc,0xb9c672d1,0x3b7fbc24,0xba0b9a26,0xbb43cd64,0xbb2b4ece,0xbb5a635f,0xbb25ac76,0xbab467f8,0xb804b717, -0xb60235f0,0x3ae4f9d0,0x3b0c534c,0x3a60c8c9,0x39c54340,0xba45edd7,0xba76c558,0xbae64e8b,0x399a3f04,0x3a2ec4e5,0x3912e764,0xba4f72ef,0xba27c5f7,0x3ab2550a,0xba1ac50c,0xbaa3b574,0x38dcaeb2,0xbc55eece,0x3c4f7321,0x3c18d9d8,0x3b9bb502,0x3b6af5e8,0x3b93ef72,0x3a8a3138,0xb9a273c1, -0xbac0bbff,0xb9176d00,0xba4016a2,0xbac7020d,0x3a417afe,0x3b22cd35,0x3b2a54a3,0x3b3cf142,0x3b1f4602,0x3b1585e6,0x3a0957f6,0xba712cdf,0xba2e9b8b,0x389ea2d5,0x39a757e8,0x3a92160e,0x3a558f2b,0x39ce828f,0x39a397d6,0xb9e116f1,0xba0c3b85,0xb9321fa2,0xb7b8c1d2,0x3817cc59,0x3ab8bcea, -0x3b487075,0x3b33e8b2,0x3b7404f3,0x3c162742,0xbaa32dd7,0x3a9861d4,0x3a96b461,0x3ab23358,0x39905f88,0x3ad386a3,0x3b0386a6,0x3b03aabc,0x3b6a7ac3,0x3baf6da1,0x3bddb608,0x3bd11980,0x3bb01d1c,0x3b971a03,0x3b3060ac,0x3a56f942,0xba7d8e77,0xbb0f3f68,0xbb59a96a,0xbb6285a8,0xbb3c0d14, -0xbb5d0c96,0xbb65b33d,0xbac361a1,0xba4430e3,0xb9faeacd,0xba11f547,0xba7a4b52,0xba3d49dc,0xba17ac5d,0x3a05b7fb,0x3ae7027d,0xb9273491,0xb9c5dafc,0xba25c506,0xba790c1c,0x3b953496,0x3b7b046f,0x3add7c4e,0x3b14de9c,0x3b310593,0x3b5b11b8,0x3b864b34,0x3badb177,0x3b8b43c3,0x3b51ca75, -0x3b2b2146,0x3b252cca,0x3b1fe0e5,0x3ad72296,0x3ab1c9a3,0x3a2110e5,0xba7746f7,0xba710998,0xba8aa122,0xba3ba3cc,0xba6ff78f,0xba8e861c,0xba56f42c,0xba98427d,0xba73a509,0x388f3927,0x3acaf32c,0x3b1f9909,0x3af53604,0x3b02c54e,0x3adbc762,0x3ab9f368,0x3ae2047c,0x3b1234ed,0x3b3cf33d, -0x3b59cc94,0x3af87099,0x3a841251,0x3a68c060,0x3a9b4f60,0x3a444714,0x3a23b71f,0x39edca95,0x3a03d9a2,0x3a3522f9,0x3a920168,0x3ac54cd2,0x3a3bb159,0xb7b8e6a0,0xba0b0b48,0xba90a285,0xbad21ce6,0xbb102502,0xbafb880b,0xbb110ab9,0xbad5a3e1,0xbaa68fb4,0xbaf96e3b,0xbb1a93f7,0xbb04e08e, -0xbadae863,0xbade3a46,0xba64acb3,0xb9462b49,0x3a9f9d95,0x3adfe823,0x3b34cf0a,0x3b659e66,0x3b4e72ef,0x3b405ca7,0x3b36e0f6,0x3b0eab46,0xbb101c3d,0xbb2ef26a,0xbb3df488,0xbb35d05f,0xbb2f6756,0xbb251dfc,0xbb21c1be,0xbb24d6fc,0xbb2d339c,0xbb3b7ed8,0xbb3dae13,0xbb336800,0xbb1cd023, -0xbaffbc09,0xbb071f39,0xbb0a92e0,0xbb146af5,0xbb1a99b7,0xbb29afd4,0xbb305797,0xbad8f47f,0xbb12f2c7,0xbaf41e39,0xbaff24b4,0xbae1c42e,0xbaf9427a,0xbb0da947,0xbb053474,0xbb019e92,0xbb2c0bb2,0xbb476952,0xbb434917,0xbb411f24,0xbb31fa6f,0xbb2c6ebe,0xbb38b68e,0xba712132,0xbb201413, -0xbb0f395f,0xbb0ec878,0xbb12434f,0xbb15a8e0,0xbb17a26c,0xbb178fe0,0xbb126321,0xbb0af02a,0xbb06d1c6,0xbb025cce,0xbb02f9fb,0xbb00d36a,0xbb07c364,0xbb0afaee,0xbb0e35b0,0xbb13c31a,0xbb14f701,0xbb32bc20,0xba89b4d6,0xb9bfc801,0xba57b505,0xba9503f9,0xb946d9e9,0xba44682f,0xba3b94d3, -0xba55e76a,0xba81ed26,0xba48d57a,0xba45f32c,0xba5fd449,0xb9a2f040,0xba8ce78c,0xba9c85d5,0xb9e57e89,0xbb118427,0xb98ccf86,0xbb1666ca,0x37dbc092,0xb81008e9,0xb80e2af9,0x396c73a6,0xb9d61ed6,0xba190a4c,0xba293e3a,0xb9bbd137,0xb96d86ca,0xb970649d,0xb913e52d,0xb8d34f88,0xb755c9ac, -0x3899ff63,0x385c7aba,0xb7e52105,0xb9a9f097,0xb9c10abd,0xb9758291,0xbb140f9d,0xbaeb7434,0x3aa6723d,0xbaf4966c,0xbaf5760e,0x3a011c06,0x397046b0,0x376112a2,0xb872ba38,0xba1ed229,0xba17088d,0xb7d4bc86,0xbb12d0c4,0xbb0caacc,0x3a99ae37,0xbb049ddb,0xbabdc3e4,0xba45236e,0x3a311e74, -0x3a1c8095,0x3aa5bb6a,0xb9bbe778,0xba7a8d70,0xba94568c,0xba205d41,0xb9dcb0ce,0xba14b574,0xb9826975,0x397c16fd,0x3a3ccaf3,0x3aa546ac,0x3a8adb05,0x3a07a04d,0xba0c2d20,0xba269dd2,0xbac7435c,0xba93c2be,0xb9cbe90b,0xb9cb9f30,0x3971aed1,0xb9088450,0xbaaf3812,0xba97ae6c,0xbb0a17af, -0xbb321afd,0xbb396e0a,0xbb0b6b98,0xba82f8bd,0xbae1de43,0xbab70e4a,0xb9a2f0cc,0xba7ab842,0xbb1e574f,0xba68df87,0x3aae131c,0x3a9cc679,0x3b2739d2,0xba0150a7,0xbaf1422e,0xbb0f9e8f,0xba8f7f29,0xb99f6830,0xb64d36b4,0x398d8794,0x3a0af5ac,0x3a6bf264,0x3ae00638,0x3ac19459,0x3a3bc8da, -0xba427ebb,0xba7cf6f8,0xbaf5e8ea,0xbaef3d4d,0xb9ee28cb,0x3a59e403,0x3a0415e4,0x386ec2d2,0xbaaddbe0,0xbabb406e,0xbb015db8,0xbb72bb0e,0xbb77825d,0xbb835dc4,0xba651492,0xbb1028c2,0xbad6bf62,0x3a539c27,0xbad1d9fb,0xbb1806e5,0xb91d74e1,0x3b38050b,0x3b5c9599,0x3bb76221,0x3a767c4d, -0xbab70d49,0xbb1dc2c5,0xbad39b4a,0xba9aa065,0xba7be367,0xba640c9a,0x3a496815,0x3b2bc895,0x3b97a7f9,0x3b7ff5df,0x3b082fbe,0xba6d1471,0xbad9d563,0xbb3de7c8,0xbaf5e288,0x3a891e83,0x3b4a5312,0x3b4a6718,0x3b1f0108,0x3a85e26b,0x39a2f7e4,0xba95e6c0,0xbb546335,0xbb98868d,0xbb80f004, -0xba446ac1,0xbb6538d2,0xbb30200d,0x3b4832ca,0xbaa780f9,0xbbcb9622,0xbb6f4f09,0xbb3d24b7,0xbb46a64a,0xbb5f23f0,0xbba16cbf,0xbbc6042d,0xbbd490a7,0xba2af8b8,0x3b8ccaa9,0x3bce4e04,0x3c1e0e2c,0x3bc4f91a,0xbae69411,0xbb6c5b68,0xbb811e5a,0xbaa7a47b,0xb9ba192d,0x3a4bba61,0x3a75acb4, -0x3a6b4da0,0x392ae5ab,0xbafc3f4c,0xbb71c701,0xbb34e39d,0x3b21fbdb,0xba090171,0xbaa2801c,0xba8aaae5,0xba44072d,0x39db3fc2,0x3b2f2889,0x3b45ab32,0x3abc8305,0xbaa80807,0xbba6a9db,0x3be50536,0x3b275589,0x3a8d9e05,0xbb8246a3,0xbc01b2fb,0xba8e256f,0x3b1db629,0x3b35f3bc,0x3aef5abd, -0xbb36d2e6,0xbc11ef0d,0xbbbf456b,0xbae622cd,0x3b531efb,0x3b59388e,0x3ab1f1c9,0xba96a781,0xbb119e19,0xba2c93f9,0x3af3ec91,0x3af5d43c,0x3adcf013,0xba098ba0,0x3a0bd277,0xba2c572e,0xbaaae5a3,0xbad1cb50,0xba462e09,0xb9df62d9,0x388a8b5f,0xba951b7b,0xbb802377,0xbc0280f4,0xbbf76a36, -0xbb183ee8,0x3bc055cf,0xbca64bd0,0xbca6d972,0xbb6bca92,0x3ac71401,0xbba21f3a,0xbbac235b,0xbc084d67,0xbc3cc388,0xbbe66040,0xb9f31617,0x3bbd6eea,0xba5fae8d,0xbba5b54c,0xbbb77d86,0xbbada658,0xbb6ffec9,0xbaca5d90,0xb990c888,0x3a9da800,0x3a07a86f,0x3910ead0,0x39a3f046,0xba98fdd6, -0xbae7a67b,0xbab2d259,0xbadd7ecf,0x392ae886,0x3a071882,0x38570e23,0xba36666c,0xba28ff79,0x3a741fc5,0xbb1c8fbb,0xbb01099f,0xb916d63d,0xbc660e50,0x3c3381c7,0x3ba9681b,0xbaaef631,0xbbb92616,0xbbcb07e1,0xbc0583bd,0xbbdd063e,0xbafbaf9b,0xbb409bd9,0xbb89363e,0xbbaf7a9a,0xbb44b8ae, -0xba4d17eb,0x38c6f1bd,0x39dc1dd7,0x396b6943,0x3a71077a,0xba04a889,0xb9f3225e,0xba3d6dbe,0xba3d0a61,0x398b95dd,0x3a9c2b0d,0x3a3abf33,0x38f1015e,0xb892cbf5,0xb9919ce7,0xba22cfe3,0xb8608ab3,0xb7d5af89,0x3966eb0d,0x3b0fa03a,0x3b477feb,0x3b2dcd5b,0x3b8a04a4,0x3c1d747a,0xbb853709, -0xbb9b7b84,0xbbc7d2fe,0xbbd88011,0xbbd4adbf,0xbbc9fe85,0xbba0e632,0xbb3204d2,0xba67ee18,0x3a803786,0x3a41cdfa,0x3ad75d20,0x3ac2fab5,0x3a8f5a8e,0x3a748586,0x3826ed56,0xba858fb5,0xbb2e4b7b,0xbb65e614,0xbb855ff2,0xbb9989b2,0xbb7f0520,0xbb5cb55d,0xbab4e7a5,0xba1e0332,0xba4d1f8f, -0xba59ca25,0xba838ed5,0xbacc4ab9,0xba91ce2b,0xba0075cf,0x39ceb3de,0xba846681,0xbab764fb,0xbb0372d4,0xbb943bd5,0x3a92d8da,0xba8df70a,0xbad74034,0xba3fe35e,0x3a8afe53,0x3b3f8429,0x3b8e93ee,0x3b9b2cc0,0x3ba481af,0x3b99f754,0x3b92d92c,0x3b5e036b,0x3b10490f,0x3a28c82c,0xb68fb6e5, -0xba1da864,0xba920012,0xba528740,0xba23e12e,0xba239a93,0xba94816e,0xbac4380f,0xbb1c8ada,0xbaefa6e7,0xba62391b,0x398ff5ba,0x3aceab90,0x3b0822fd,0x3af5d38f,0x3ac31dd8,0x3a7c7fe7,0x3a193f1a,0x3a5581d2,0x3a21722f,0x3a72637b,0x38fec2bf,0x39a15647,0x3a7daef3,0x3ae62e14,0x3a924862, -0x3a1ae460,0xb92e31bf,0xb9fac997,0xba134318,0xb9ca7fff,0xb8ce9a29,0x39bec424,0x383342f3,0xb9175d5e,0xb99e2681,0xba4aa943,0xbaa7e697,0xbaea393a,0xbafae2b0,0xbaf0c41b,0xbb17f384,0xbb33ccf9,0xbb206166,0xbb1f4485,0xbaf2042c,0xbad9cbcf,0xbaa353cd,0xba46d614,0x3a06a5fb,0x3a590e35, -0x3b0f4bef,0x3b2956b1,0x3b679302,0x3b3854ac,0x3b0d7790,0x3ad26d5e,0x3aaa1bfc,0xbb462b34,0xbb48865d,0xbb480e52,0xbb540ae4,0xbb480822,0xbb426d05,0xbb4548d5,0xbb591b7a,0xbb4291fb,0xbb329f11,0xbb20002d,0xbb08780c,0xbae6dcff,0xbac40312,0xbacf42ed,0xbad04825,0xbad2d45b,0xbae192ed, -0xbadb80b6,0xbb00cc55,0xbb2fd351,0xbb238f6b,0xbb48cba3,0xbb3bb757,0xbb561182,0xbb66ed5f,0xbb54f7d3,0xbb66a173,0xbb718b29,0xbb5c1f3d,0xbb45247f,0xbb4b97cf,0xbb40cb84,0xbb4235d1,0xbb515eae,0xbb334511,0xbb5f1c6b,0xbb0a791b,0xbb11daa5,0xbb14cd40,0xbb1aff24,0xbb235bf4,0xbb264f57, -0xbb2af9bc,0xbb1aa672,0xbb10b79c,0xbb0856d4,0xbb00242f,0xbaf2496e,0xbadc35f8,0xbae91b6d,0xbaf1820e,0xbaf8f564,0xbb028b12,0xbb0902aa,0xbafcd4e7,0xbb58f4d6,0xbb612f12,0xbb0b5f61,0xbb6099e8,0xbb6f5db3,0xbb0d7b22,0xbb13cd64,0xbb14297f,0xbb09ab52,0xbb178578,0xbb18ec65,0xbb150ac6, -0xbb50dc2a,0xbb4adb6c,0xbb024647,0xbb5b77ea,0xbb213add,0x3b1a0e67,0x3b3c0689,0x3b1301f5,0x3b0b57c4,0x3b208949,0x3b25c5ea,0x3b30d678,0x3b310af1,0x3b1f0cc6,0x3b2c99b7,0x3b2dd076,0x3b26d123,0x3b2a1ef8,0x3b2ce34c,0x3b33ec1d,0x3b39ce72,0x3b371311,0x3b302f14,0x3b1b915e,0x3b027b28, -0x3b05c8b8,0x3b35153d,0x3accc8eb,0xbadff67b,0x3b511fe9,0x3ae85253,0xbaf608ed,0xbad9266b,0xbadfc164,0xbaf1e9be,0xbae3d69a,0xbacf29e3,0xba838af3,0x3ac85443,0x3b441755,0xbab3e102,0x3ac8ca0b,0x39fdeaa3,0x3b3e44f1,0x3b1f9fcc,0x3b521d2d,0x3b691c83,0x3b8957c7,0x3b8be6d2,0x3b62e0da, -0x3b79dbad,0x3b6d5f4d,0x3b5502ea,0x3b547265,0x3b6c7fbf,0x3b87e9d8,0x3ba02db7,0x3ba1683d,0x3b914c12,0x3b5cce66,0x3b146875,0x3b134c06,0x397f9578,0x3af896d9,0x3b3a01f3,0x3b097fe4,0x3adf90dd,0x3ac450aa,0x3aa6541d,0x3aadfa4b,0x3a61105b,0x39b6fef9,0x38ffbfa7,0x3a7e768f,0x3a303245, -0x3a224ce6,0x3b13731d,0x3b03be36,0x3ae94c89,0x3b0e59b8,0x3b30af1e,0x3b8261bf,0x3b9175a1,0x3bba9222,0x3bc32ced,0x3b8b5c01,0x3ba8df33,0x3ba8debd,0x3ba3f4ff,0x3ba1f54c,0x3ba8e3f4,0x3bbd05c4,0x3bd9df01,0x3bd57b02,0x3bb950ed,0x3b6b7006,0x3b154142,0x3a7f63ce,0x3a9fc012,0x3ad874d1, -0x3b1048f1,0x3b09eafb,0x3ad46ebc,0xb8df0657,0xb9f77b22,0xbabf46f1,0xbae0ac35,0xbb5de409,0xbb2cbd80,0x3902d2be,0xba473daf,0x379c4e80,0x3b1c3025,0x3ab2ab87,0x3a5a6610,0x3b181f4f,0x3b391f2e,0x3ba59aec,0x3bd56f8c,0x3c0dd3ca,0x3c1672bb,0x3bd6f8fe,0x3be2ba15,0x3bcd79ea,0x3bb2878d, -0x3ba1768a,0x3bd68be0,0x3c1020c4,0x3c401529,0x3c3ec387,0x3c211b8f,0x3bbe047b,0x3b1fdbab,0x3a06dc75,0x3943b9db,0x3adf3cd4,0x3b7329e8,0x3b67a04d,0x3b1b36a0,0x3a07ba1b,0xb90e5759,0xbadf3c91,0xbb6e023b,0xbba3cc9c,0xbb960637,0xbac9cf61,0xbb676c80,0xbad9c7ac,0x3b39363f,0x3a613bcd, -0xb7a337e4,0x3b248c04,0x3b321780,0x3b51cf23,0x3a961de6,0x3b07d56a,0x3b018982,0x3ad784ee,0x3b9bf44a,0x3bf24e02,0x3bfec5b0,0x3c2db8a4,0x3bd17f4e,0xbb54c838,0xbb68d413,0xbb75e04a,0xbb1af7d2,0x3a41a819,0x3b2bf36c,0x3b6ec6f4,0x3b07ab32,0x385f522f,0xbad4141a,0xbb5dd008,0xbb1803cb, -0x3b2ae9ee,0xba2752b0,0xbab37fd5,0xba915d4f,0xb9c4ad9c,0x3aa66854,0x3b8f8400,0x3b8c79bf,0x3b4fee04,0x3a004cea,0xb93b3fde,0x3c1d1fa0,0x3b79ac45,0xba9580c0,0xbb7216fd,0xbc02ebb7,0x3a74457d,0x3ba66b77,0x3b99ee63,0x3b812243,0xbaa10598,0xbc07986f,0xbbc34597,0xbaefc199,0x3b892f54, -0x3bdea6a4,0x3bf3ba38,0x3bed75eb,0x3b945118,0x3b5a8f86,0x3b8fa9d6,0x3b2bcba5,0x3b16a65f,0x3a7dd6c6,0x3aa4702d,0xb92fac21,0xbabd5ae8,0xbac3648c,0xb9f916d8,0xb99acf51,0x3951fed6,0xba986b57,0xbb8a98ec,0xbc0419c4,0xbbd4c408,0x39590eda,0x3bfda0e0,0xbca0cd57,0xbc8c7bbc,0xbb1e206d, -0x3ba9de2e,0x3c1a9a66,0x3c3182df,0x3c050a86,0x3b356681,0xbab3e24b,0x3aaa5f8f,0x3c1a7c66,0x3bac5fa7,0x3b3b454b,0x3b1114da,0x39aa09df,0xba878218,0xbaf6a67b,0xb99c22e0,0x3a5e7839,0x3b17381f,0x3b1b9ade,0x3a8cfe87,0xb9ee98a7,0xba849983,0xba76c81a,0xbabebdc2,0x39706353,0x39d16759, -0x383dfe94,0xb9c35715,0xb99ef0c2,0x3aa7bd60,0xbb13a6db,0xbb152b34,0x3ab59805,0xbc664ef0,0x3c2861f7,0x3b67aad9,0x3b87b888,0x3bdf6c1c,0x3c5b9e85,0x3bff7c7c,0x3b8fa910,0x3a8372f9,0x3a90e080,0x395b934a,0xba008320,0x3a6cf248,0x3b1bd8d8,0x3b1190c0,0x3b7ffbe3,0x3b9d1dd7,0x3bad46be, -0x3b5c2325,0x3ac6644e,0x3a10e449,0x399b9ff4,0x3aa6a7dd,0x3b01a882,0x3a9fef9f,0x39dbb82a,0xb88edff6,0xb9aa3c0e,0xb9bc098e,0x37fefa6d,0x37c93007,0x399861f6,0x3b1f5147,0x3b4a10e8,0x3b53e97c,0x3ba6d889,0x3c1e5a56,0xbb20ae08,0x3b5c6d3c,0x3c038b20,0x3bece551,0x3bb02f38,0x3bb40dad, -0x3bb5aa9e,0x3bab3e9b,0x3bb21dc8,0x3bdd95c5,0x3c0974cb,0x3bf64a80,0x3bd07ebc,0x3bac6fca,0x3b42c126,0x3a4412e3,0xba8982b6,0xbb265ecf,0xbb42aad2,0xbb28c7b8,0xbb44cdac,0xbb2b4a0b,0xbb39a434,0xba7c579b,0xb96f6888,0xb9eb1069,0xba1cc080,0xba69ff36,0xba8afa6a,0xba335556,0x392de64c, -0x3a9b40be,0xb8dd5de2,0xb9ff0506,0xbaf5b9ae,0xba6dd7e6,0x3917bcb7,0x3b097819,0x3ac7ec38,0x3b046899,0x3b6839d3,0x3bae83a8,0x3be07ea2,0x3c0ffd34,0x3bd6cd92,0x3ba655a7,0x3b9110d2,0x3b9865fb,0x3b990ce3,0x3b749b48,0x3b53e8d2,0x3b17e1a2,0x3a235ce6,0x3a0a9683,0xb988c556,0xba8b908e, -0xbaa4005f,0xbaa268d3,0xba8af4d9,0xba1befa6,0xb922e7bd,0x3a4ec488,0x3af746b9,0x3b100f4c,0x3ac21bf3,0x3ab85061,0x3a8911ac,0x3a5cf959,0x3a739b5d,0x3abd0013,0x3ad02bc3,0x3b0bcc79,0x3b6d79eb,0x3b6b3b3b,0x3b80a9cc,0x3b742fb7,0x3b50e452,0x3b3f1783,0x3b3c5215,0x3b5710c4,0x3b54fe5f, -0x3b646b07,0x3b643b7d,0x3b0c8f5c,0x3a5d7a6d,0xb9a1dbd6,0xba38a2b7,0xba945f71,0xbad32bb9,0xbaa74bcd,0xba8c6932,0xba4bcdb3,0xba8e3429,0xbac6f4b1,0xbaf3439d,0xbaa50c80,0xba88f142,0xba187f20,0xb912329b,0x3aa738bc,0x3b0b2ad7,0x3b3ed103,0x3b63b885,0x3b90f04c,0x3b871d65,0x3b82cd0e, -0x3b6f1ba1,0x3b720de6,0xbb3b156a,0xbaafcf99,0xbac62170,0xbaa1836f,0xba6d195a,0xba1dfe43,0xba01da14,0xba0402af,0xba7f9ea5,0xbac085b1,0xbadfea6b,0xbaf12f0f,0xbae62dc6,0xbadbf793,0xbad9873b,0xbadbf2b1,0xbae5241c,0xbaf0f48e,0xbb0bb6ae,0xbb020b18,0xbb04764d,0xbad5fcb2,0xbaac5240, -0xbaeac140,0xbae32051,0xbac4a6b7,0xbab5b141,0xba99c845,0xbab85c7f,0xbaa5c6fa,0xbab26bed,0xbac27428,0xbab9f6db,0xbae660d2,0xbad0755c,0xbaa77327,0xb9fb1534,0xba39d3be,0xba627a9b,0xba4677ce,0xba594b74,0xba5fcb7c,0xba5976de,0xba36b58f,0xba4d4c20,0xba50ff56,0xba68737a,0xba74da70, -0xba889365,0xba97749c,0xba9cb413,0xbaa15cc4,0xbaa62159,0xbaa89766,0xbab0d161,0xbabf8287,0xba50c3de,0xbaa91bb7,0xbb4de5fe,0xba1a126a,0xba9c2dfc,0xbb5d4023,0xbb522f12,0xbb4ab83d,0xbb3f73b4,0xbb32dadb,0xbb299373,0xbb1e03d0,0xba5ddfb6,0xb8d05822,0xbb468540,0xbaa2162b,0xba7a38bd, -0xbac787c2,0xba878698,0xbb02715a,0xba8b281c,0xba9a9936,0xba3b230d,0xbabe362f,0xbadfe457,0xbafdbfc0,0xbae464cb,0xbad403fd,0xbabdc7d3,0xbab96115,0xbab439c6,0xbab2dc82,0xbaa2c1be,0xbaa3bae9,0xbaa97da9,0xbacecd27,0xbabacc80,0xbb0c52eb,0xba7fce7e,0x3a730e3d,0x3b91bb8a,0xbab7baac, -0x3a2de1b7,0x3b6ba532,0x3b661996,0x3b59941f,0x3b40c733,0x3b3a054b,0x3b3f0e78,0x3b51996f,0x399cd253,0xbb0091d6,0x3b89fa44,0x3a7cf7dd,0x3ad0a521,0xbb0763b6,0xba557a58,0xb9e5875c,0x3a183b8e,0xba86fa27,0xbaedf44c,0xbb21e429,0xbb136a9b,0xbb0979a9,0xbaedb838,0xbadfb105,0xbab2eab0, -0xba9813fb,0xba075b07,0xba09a6b4,0xba6915bd,0xbad09694,0xbaf56d4a,0xbb0fb29c,0x3ad8fcbb,0xb9c813eb,0xb925066e,0x39ea3ea6,0x39b5cf27,0xbacca08e,0xbad6ce5f,0xbb175a08,0xbb00ada5,0xbb48d5a7,0xbb3ce31f,0xbaacea2d,0xbaf80da2,0xba2e82e3,0x385a5b24,0xbade1459,0xba84f44e,0xbacad7cd, -0xb9fc3afb,0x39e20a1e,0x3b0cbf9a,0xba4da6f7,0xbb1d6959,0xbb7a8854,0xbb5b9b2f,0xbb2df7da,0xbabc88f0,0xbab13f6d,0xba8c72da,0xba96ec13,0xb9911240,0xb9af7c3c,0xba675a77,0xbb00623a,0xbb2f46b5,0xbafa6ca8,0xba0bb800,0x364b6d15,0x3a065539,0x39303c75,0x3a18636a,0xbb06bbb6,0xba952b02, -0xbb4dfdaa,0xbb3b4fbc,0xbb8aecce,0xbb5b625a,0xbab5f41c,0xbadc4654,0xbaa0afce,0x3a70109c,0xbaaa21fe,0xba9fab66,0xbab780fa,0x39f8fd8a,0x3b25eafd,0x3bb88725,0x3acd4649,0xba8c2f6d,0xbb6f88ad,0xbb7913d9,0xbb67650a,0xbb0a14dd,0xbb1e3100,0xbaa5982d,0xb9b50331,0x3af80d44,0x3af5df90, -0x3a4ceb83,0xbab94e94,0xbb2360e5,0xbb118701,0x39eab183,0x3a4970ba,0x3b52554e,0x3b16ac75,0x3acf2780,0xb8f4dcb0,0xba77b5d4,0xbb0063f0,0xbb5eaea7,0xbbb53806,0xbba937d8,0xbb08b7f6,0xbb84a390,0xbb31d8db,0x3acb9be2,0xbafc6ab4,0xbabf33d3,0xbb3dd671,0xbb3cb2ce,0xbb490bcf,0xbbad2203, -0xbbcbcae9,0xbbf96a0c,0xbc2245e1,0xbb9888e7,0xb9cd60e5,0x3a7344a7,0x3bb8820b,0x3b6699cd,0xbb6f7a23,0xbb9f996f,0xbbc42461,0xbbcf67a2,0xbb989bc7,0xbb93c02d,0xbb2d956b,0xb9be3c82,0xbb35bed1,0xbb60fa6e,0xbb8d8d22,0xbb33f1b1,0x3b2c0103,0xba69930e,0xbad61319,0xba956a68,0xba47829c, -0x3aab5a76,0x3b969207,0x3b848a8a,0x3b2f069c,0xb8fb6394,0xbac37e17,0x3bcf8c35,0xb9d7f3dc,0xbb322b52,0xbbaf45fb,0xbc007d3b,0xbb5621eb,0x3a0aacae,0x3b3dacd0,0x3b1821e5,0xbb0c083b,0xbc0d3620,0xbbd986e6,0xbb596fee,0x3a37d88b,0x3b2d1522,0x3ab89b43,0xbb0b4aa0,0xbb0075d8,0xba91d0e1, -0x3b2f7019,0x3b2ab3de,0x3af8d523,0x39e886d9,0x3a2ef4b8,0xba3edbc5,0xbaf4772c,0xbab61ea7,0xb998865c,0xb9778e88,0x38c58f5e,0xbac8613e,0xbba2d37b,0xbc0ecc33,0xbbfaaa44,0xb9fa79f1,0x3b9af067,0xbc95ac5f,0xbc82d4d1,0xbb867512,0xb9d861ff,0xbb4617d7,0xbba1fa31,0xbc1eba1a,0xbc61211c, -0xbc5ff660,0xbbdf0621,0x3b8d3b93,0xbb6b9358,0xbc03de03,0xbc109208,0xbc084241,0xbbc8f805,0xbb4aec81,0xbab2d496,0xba67cf08,0xba34989b,0xb91608ec,0xba226ba9,0xbacc8eda,0xbb0ae857,0xbac00588,0xbab2bca8,0xb7cca35e,0x39483cc1,0x3768c00e,0xb9b9c833,0xb9e0af97,0x3a04433c,0xbb445ff5, -0xbb2df566,0x3abc2d29,0xbc606202,0x3c0abfbf,0x3997f27e,0xbb7e7672,0xbbbeb77f,0xbbd57cfa,0xbbfa2e06,0xbbd1c3da,0xbb50e458,0xbb06a72b,0xbb26b855,0xbb5b4f0c,0xbb2a20b0,0xba9b7d33,0xba739230,0xb9d537fc,0xb9a47d58,0xb839a1d9,0xba816760,0xba5acb93,0xb988855d,0x3a6a2f2d,0x3a81e8c0, -0x3ad02848,0x3a739960,0x375feb11,0xba0cd6de,0xb9c1e362,0xb9b9bd84,0x3930661b,0x3819357a,0x39a5e508,0x3b0b2b04,0x3b24c6e6,0x3aff439f,0x3bb2b2d1,0x3c122c37,0xba2bfcb8,0xbb13d181,0xbbafc9a0,0xbbc90d35,0xbc005784,0xbbfb1460,0xbbdfd324,0xbba6721d,0xbb3b8ec7,0xba578c30,0xb9a2cd06, -0x3a59d93a,0x3a64c856,0x39d6f9eb,0x3a184cc3,0xb94a0d63,0xbad68885,0xbb2a1d3c,0xbb6969be,0xbb845bb8,0xbb7adc42,0xbb729154,0xbb2f35b1,0xba6d136d,0xb9af8c1d,0xba6016bb,0xba4b57bf,0xba953912,0xbab28bb3,0xba9b72f0,0xba03cea5,0x39544338,0xb9d5a51f,0xba4bf20e,0xbac718ac,0xbb702d51, -0x3abf3691,0xbb2f6e08,0xbb9e9db9,0xbb4b22af,0xbab1d341,0x3a51680a,0x3b0786bb,0x3b1987d8,0x3b893145,0x3ba28cf7,0x3bae8ad7,0x3b884be8,0x3b453931,0x3abf208d,0x3a2bcdc2,0xb9aa1212,0xbab1c082,0xbaa5c92a,0xbaa69657,0xba6cef48,0xbabe20aa,0xbae3768b,0xbaf0bb4f,0xbaac78d3,0xb9c73c60, -0x3a3d9a6f,0x3ab3faac,0x3ac67896,0x3a32f0c7,0x39f4fe2e,0x38f59708,0xb9755ce1,0x3890269b,0xb9951c00,0x3944a4a2,0xba8345f8,0x3b1694fe,0x3b0fb78a,0x3b0ebaff,0x3ae413f1,0x3a61e5f6,0x38848087,0xb9a6eba7,0xba211014,0xb9aef8d0,0xb922e181,0x39a0794c,0xb965014d,0xba142e61,0xba635ceb, -0xbaa6660f,0xbad7af96,0xbb0a0812,0xbb0ad64d,0xbb19e7bb,0xbb15a1e1,0xbaf5dba3,0xbaefc1cf,0xbb006296,0xbaa46c23,0xba2c200f,0xb98d8902,0x3a1957d5,0x3aa5c456,0x3b1af856,0x3b3e1b95,0x3b697833,0x3b82f441,0x3b727ab8,0x3b6c55e7,0x3b71a969,0x3b3cc3ea,0xba6cdc0d,0xbb1dcff1,0xbb2dd3f7, -0xbb403c76,0xbb435709,0xbb509314,0xbb66f1a7,0xbb83e0b2,0xbb6f78a2,0xbb5b0d8c,0xbb429805,0xbb24e805,0xbb05a745,0xbacf19ee,0xbadae3b3,0xbadf6eee,0xbae5f488,0xbaf3489a,0xbaf01653,0xbb14fbdb,0xbb0496bb,0xbb2e1102,0xbb455e24,0xbb3054e7,0xbb409906,0xbb6aa13f,0xbb5b9132,0xbb570f67, -0xbb39c87d,0xbb3c50ff,0xbb234f18,0xbb00ff3a,0xbb0314fe,0xbade0e22,0xbb018dd5,0xbb0bf72c,0xbb1b3732,0xbb21def3,0xbb1903b8,0xbb26d1fe,0xbb31f3b4,0xbb3c3897,0xbb4171bb,0xbb4d28a4,0xbb3d46f6,0xbb358ce8,0xbb2ec392,0xbb268eb8,0xbb20459e,0xbb14af72,0xbb1a61c2,0xbb1c5217,0xbb1e0368, -0xbb2369a6,0xbb231453,0xbb2a668b,0xbb318e63,0xbaf995e8,0xb9020fc8,0xbb4b0695,0xbb072e48,0xb84bff75,0x36f70fca,0xb7928843,0xb820372d,0x37ed016b,0x38247456,0x38cf7e12,0xbaae5c62,0xbb218c74,0x393f4140,0xbab45779,0xbb47c0e7,0x3b276334,0x3a66c7c4,0x3b512a09,0x3b16008c,0x3b2b57fe, -0x3b2dddd6,0x3b3699bc,0x3b375a07,0x3b2acae2,0x3b311758,0x3b342dee,0x3b3c47cd,0x3b3600c5,0x3b361396,0x3b362a73,0x3b454944,0x3b45ab4a,0x3b4090c3,0x3b2c1823,0x3b0fd20a,0x3b3bec95,0x3a4699cf,0xba9340bd,0xbb61d178,0x3ace77c3,0xba7ad325,0xbb716038,0xbb706dc8,0xbb74f9b9,0xbb667829, -0xbb7d9243,0xbb77b9ef,0xbb576cdf,0xba8c10d5,0x3ae077e0,0xbb534904,0xbab192ef,0xbb0676f6,0x3b3f33c7,0x3b3019e8,0x3b4428f1,0x3b5e5b47,0x3b7be628,0x3b7cde42,0x3b589b38,0x3b6680de,0x3b67f977,0x3b751eda,0x3b63ff4f,0x3b76cba4,0x3b8424de,0x3ba661d5,0x3ba982a0,0x3b9c0d0f,0x3b6c0686, -0x3b41b75e,0x3b1a7935,0xbac60396,0x3ad358f7,0x3acc933d,0x3aa7825b,0x3a2c189a,0x3a137c47,0x3a43cb65,0x3a1a4356,0xb9c54cd8,0xb701437d,0x3925ccd3,0xb70c88e1,0x39953daf,0xb9bfded9,0x39ed98ff,0x3ae34724,0x398eb09e,0x3b1bebc9,0x3b60b52a,0x3b713d45,0x3b8f0eef,0x3ba5764e,0x3ba774f1, -0x3b859ef7,0x3b8dba9a,0x3b95e6d5,0x3bb7dd66,0x3ba18a3e,0x3ba55e52,0x3ba249ce,0x3bd5f313,0x3bd75185,0x3bc2d4f3,0x3b78fc10,0x3b50945a,0x3a5d7f15,0x38808359,0x3a7dca2e,0x3a8f5ee5,0x3ab25ccd,0x39d011ef,0xba560a78,0xbac7e1eb,0xbaa69bcd,0xbb2ea6e9,0xbb4c4a02,0xbb55f75d,0xba6ad379, -0xba8da10c,0xb9e3b9be,0x3a12fb85,0x3a2e459f,0xba4ee24e,0x3b1687c8,0x3b3f4f6a,0x3b82eacb,0x3bbf760b,0x3be53f39,0x3be5d93a,0x3bb39b4c,0x3bae80c4,0x3bb48651,0x3bd902f1,0x3bad04ce,0x3bcf848b,0x3bf83c3c,0x3c373020,0x3c3d79a7,0x3c27c1e8,0x3bcec780,0x3b88bb68,0x3aca1ea0,0x394943f4, -0x3b302a5f,0x3b1fdc3e,0x3b4f2f66,0x3b0d0a87,0xb839b456,0xba77d6b6,0xbb1fa4d9,0xbb40f0b2,0xbbb7c435,0xbba44b74,0xbb2940e0,0xbb61462a,0xbb013164,0x3a922af2,0x394798d4,0xb9bd0788,0x3b6e31b2,0x3bd9b0ef,0x3bbc3d3c,0x3aec9e1b,0x3b46b9cb,0x3b2717d2,0x3a97a274,0x3b9ab3e9,0x3beb3789, -0x3bf30c18,0x3c3ac085,0x3c07524e,0xbaae4bf4,0xbb16db32,0xbb5f0559,0xbb0eb413,0xb9efc64e,0x3a65d38f,0xba20f6ae,0xbb1fa2d9,0xbae0459a,0xbb54483d,0xbb6e17b0,0xbb22d5bd,0x3b263831,0xba473ad9,0xbab7331e,0xba677569,0xb99d2d80,0x3b050124,0x3bb4ce1f,0x3ba4463c,0x3b4a16d1,0x399bfe5f, -0xb8b96e67,0x3bca025f,0x3b27d330,0xb974ec3a,0xbb6abf39,0xbbf70dc4,0xbb36277a,0x3a6e8383,0x3b3ccfd7,0x3b8324a5,0x39359ef0,0xbbe31a3d,0xbbe413f6,0xbb8416b9,0x3aa01cd5,0x3bd7c661,0x3c0acf19,0x3bfbd940,0x3ba49b38,0x3b923962,0x3b92e669,0x3b011375,0x3afff763,0x3a8dcf51,0x3af8484d, -0x39c9997a,0xbae41604,0xba9af799,0xb8b5ee96,0xb907b15b,0x39960051,0xbac72f84,0xbb9ae14a,0xbc11d618,0xbbc420e1,0x3aa66862,0x3be1dc61,0xbc8b17d1,0xbc497bea,0xbb5a2cf2,0x3b31313e,0x3c2eac57,0x3c28ecbb,0x3bef3777,0x3b30ea65,0xbb03a68a,0x3a70b083,0x3c35814b,0x3beda3b4,0x3b9459ff, -0x3b23820c,0x3a439574,0xba93906f,0xbb1fc618,0xba5c73a5,0x3a6a783d,0x3a7e92da,0x3a87cd9e,0x39e9ca93,0xbac4308a,0xbad8c57e,0xba9eae67,0xba8a7369,0x3908d533,0x3949dfb6,0xb8a51570,0xb8d6221f,0xb9a316a3,0x392fc90c,0xbb46c457,0xbb1bfeb3,0x3a243254,0xbc503479,0x3bd72b6d,0xba9f2003, -0x3b137ee0,0x3bb2de40,0x3c4ff967,0x3c0927ed,0x3ba7633f,0x3ac6f84b,0x3a07b3a5,0xba25deed,0xba6ff16e,0xb9f29848,0x3a4d4249,0x3a43f71c,0x3b4d7c10,0x3b9c414a,0x3bb4b464,0x3b860b42,0x3b3b2656,0x3aa02ea1,0x39d359c3,0x3adaf023,0x3b149e10,0x3aa98da3,0x39836658,0xb9fffd36,0xb99b2883, -0xb9372d47,0x39731df5,0x390925a3,0x3a0f479e,0x3b2dfdde,0x3b083140,0x3b25cdd6,0x3bb8739f,0x3c0b79bf,0xbb49388c,0x3b141bbb,0x3bf9e2cc,0x3bc8f1b0,0x3b87e851,0x3b5aa726,0x3b662e30,0x3b7531ff,0x3b71a954,0x3b9ba62e,0x3bc490df,0x3bb4e055,0x3b9f33c3,0x3b80c7bf,0x3b1529cb,0x39cb4c1f, -0xba93ee6b,0xbb2790f0,0xbb2ac120,0xbb17ff66,0xbb5e8895,0xbb0f4e42,0xbafc738e,0xba04f168,0x3912e568,0xb9d254ea,0xba2699a2,0xba51a023,0xba8f61d9,0xba2dd628,0xb996b303,0x38e049a7,0xb922faa0,0xba278d8a,0xbb218353,0xbaea72df,0xbb580379,0xbaa3e8d0,0xba193d07,0x38a73d37,0x3b230aec, -0x3ba16825,0x3bdd4fe0,0x3c0b1726,0x3be4acb3,0x3bc95ac4,0x3bc1c30a,0x3bc0e76b,0x3bb446e5,0x3b8c3f41,0x3b708bb2,0x3b3348e9,0x3ab010de,0x3a889060,0xb8022d2a,0xbac1784a,0xbadc576f,0xbacab9f9,0xbaccaa00,0xb9d2f426,0x39ae51b2,0x3a9b5816,0x3adcd74c,0x3abe4b1b,0x3a62e98d,0x3a31eed7, -0x39e8fbf9,0x398c1100,0x39531df0,0x39b81a2e,0x38745a1c,0xb759af11,0x3b7c7b52,0x3b9738ee,0x3bae04c1,0x3b9ab6de,0x3b8c7f46,0x3b77392a,0x3b741206,0x3b86fde7,0x3b7b8766,0x3b74b33f,0x3b6187ce,0x3b0cbee0,0x3a728ed5,0xb9a6a2cc,0xba0afe64,0xba61bebb,0xba9941b7,0xba7e0498,0xb9ed3d6a, -0xba24e73d,0xbab41cd4,0xbab4413b,0xbac3cd1e,0xba21a1ad,0xb9c257dc,0x3a11e2c9,0x3a35dc0f,0x3b1bf34f,0x3b25be19,0x3b61f21d,0x3b5fef01,0x3b8b534b,0x3b830948,0x3b7e14c8,0x3b61de51,0x3b7ea108,0xbb31158a,0xb9d98a5b,0xb9e19f9e,0xb971eb2e,0x39150365,0x39d111bf,0x39f59ae8,0x39e06832, -0xb8171a5a,0xb9f1355f,0xba37d673,0xba780460,0xba8bd7a9,0xbaa68fef,0xba9e315c,0xba9ffdd6,0xbaa1f00a,0xbab056e9,0xbace6806,0xbabbe568,0xbb1b08ed,0xbabf300a,0xbac57f00,0xbb03680d,0xbb1353a9,0xbafe02c4,0xbac3ae50,0xbab2d566,0xbadb791b,0xba643817,0xba079014,0xba26cffc,0xba0aa12a, -0xba8b9847,0xba790b34,0xb98bd2fb,0xba744a79,0x3987f6f6,0xb9390139,0xb8979cd0,0xb91d8439,0xb92ed729,0xb9032fd7,0x37b921a2,0xb8fc4d9a,0xb964ccdc,0xb9c5e85d,0xb9fb04fa,0xba1dc9cb,0xba45a80f,0xba44eb36,0xba4c78c8,0xba5345e8,0xba504770,0xba677188,0xba2f3abf,0xbab4d964,0xbb23b652, -0xbb85bbeb,0xba90b199,0xbb2827ff,0xbb933935,0xbb8c75cc,0xbb8442f3,0xbb6d6be5,0xbb6a2086,0xbb5db7e8,0xbb4773cc,0xbaea91dc,0xb99df8e2,0xbb63d963,0xbb0f384c,0xba0f472c,0xba7dc354,0x3a9e2381,0xbae5bfdb,0xba20b234,0xba2bb772,0xb951180e,0xba2395f3,0xba5b2b95,0xbaa22443,0xba922077, -0xba871df6,0xba49d22d,0xba55d93b,0xba4da174,0xba550139,0xba2ea2bc,0xba30f65d,0xba3f5204,0xba7fb149,0xba66381b,0xbaf0fc27,0x3a9deb43,0x3b3bd20c,0x3b85b8b5,0x3a092dbc,0x3b2d4840,0x3b632e65,0x3b6ea52b,0x3b6690e6,0x3b44fc0a,0x3b5acd45,0x3b63faa1,0x3b69fa86,0x3b1c3698,0xb7828b9c, -0x3b810879,0x3b49a7c0,0x3b4c0fc3,0xba94b34d,0xba4388f1,0x388cd0f7,0x3a8d2acb,0x39e68644,0xb92ed59a,0xbaabb6ae,0xbaa24fd7,0xba9a5c42,0xba2550a1,0xba5a53d8,0xba296f57,0xba162f1a,0x39380cdb,0x39b1bc07,0x3856ec26,0xb9d6c398,0xba88adc8,0xba5e7baa,0x3b43895c,0x39dcb575,0x3a6a2925, -0x3a88e1c4,0x3a8568bc,0xba436aef,0xba6d1be5,0xba879d94,0xb9f4708d,0xbae9a29c,0xbb0cfaf9,0xba78439f,0xba82cfa4,0x399b752d,0x3a419d22,0xba646aa4,0x3a85749e,0xb9f4374a,0xba25212f,0x3a890506,0x3b24b772,0x3abe9360,0x39ca20a1,0xbb07797d,0xbafab015,0xbaca3b13,0x3924e82f,0xb9159b21, -0x38c18122,0xb8f554fe,0x3a4d2229,0x3a5becd1,0x39988225,0xba322611,0xbaf14e72,0xba2e8e4b,0x3a8365ac,0x3a558e0e,0x3a0ba3eb,0x39e8b31a,0x3a96c785,0xbb08532e,0xba4809a4,0xbb5962b4,0xbb0a30fa,0xbb857135,0xbb206172,0xbad39c63,0xba52433c,0xb9aeec57,0x3a89ac24,0xb85440b7,0x395ac6e6, -0xba7b57ad,0xba33f992,0x3b1b982e,0x3bb35657,0x3b9455b3,0x3b371e3a,0xba954b90,0xbad4fc2f,0xbaca74af,0x39eb7024,0xb9f88398,0x397c67b6,0x3a572547,0x3b5a8555,0x3b7fc7d1,0x3b4b16bc,0x3a9ca1b1,0xba340545,0xb906ab16,0x3b15330e,0x3a7f743b,0x3b3482ea,0x3af0d1e4,0x3a8b2378,0xbaa6f147, -0xbaea8bd9,0xbb248bd0,0xbb5da8dd,0xbbbd35da,0xbbbaf52e,0xbb61bf02,0xbb800345,0xbb0a35c6,0xb78abaf8,0xbac11ad7,0x3b6c1235,0x3a427e4b,0x3a27535d,0x3977395a,0xbb7d8dca,0xbb5ef57e,0xbb8dcc4f,0xbbe7f343,0xbb837b30,0xbad3e5a3,0xba9a76fb,0x3b5e5ff1,0x3b0d7739,0xbb93fd2c,0xbbaa24b0, -0xbbdb1401,0xbc136323,0xbbd1fbc8,0xbbd2d53f,0xbb876196,0xbad83623,0xbb918941,0xbb8910e8,0xbb84d064,0xbb1161ba,0x3b23aacd,0xba533751,0xbaa738ca,0xba251c9b,0xb92d6e74,0x3b18f43d,0x3bc50a1f,0x3ba8079f,0x3b855336,0x3ad16d29,0x3b2c58eb,0x3bb0abb9,0xbacfd4ae,0xbb9fb3a0,0xbbb13fcb, -0xbbe61e65,0xbb838af0,0xb94cfdb8,0x3b4e8c8b,0x3b5cfeaa,0xb9d99bf4,0xbbe6d328,0xbbdf9913,0xbb8f0786,0xba329ee8,0x3b4e09b1,0x3b783d4b,0x3a900d0b,0x3ab843cb,0x3a6aba78,0x3b806df5,0x3b40b890,0x3afa947b,0x3ab5596e,0x3a7f85df,0xb9e75f8f,0xbb01feff,0xba9ce09a,0xb7935102,0xb8d9c6b9, -0x37e97606,0xbae93301,0xbbacc6d1,0xbc102937,0xbbe08644,0x3acd50b4,0x3b819beb,0xbc64c638,0xbc2ede1d,0xbb9caf9d,0xba74d9ea,0x3b8b30dc,0x3acdbfc3,0xbb54907a,0xbbfc15fa,0xbc543409,0xbc0a2f33,0x3b87c02f,0xbad49ac8,0xbba3fe0f,0xbbdca5b8,0xbbdefc9d,0xbbbd0153,0xbb7e9aa7,0xbb02f2fe, -0xbb0ee9c8,0xbaae94cb,0xb8477b27,0xba86ee3b,0xbac82385,0xbb0703de,0xbab22a6d,0xba6a8656,0x38828378,0x3913fd6a,0xb888be9d,0xb69cd01c,0xb98e1896,0xb9e2914b,0xbb183ebf,0xbb139dc3,0x3a599fc3,0xbc39e448,0x3ba59feb,0xbaec58db,0xba841763,0x39ad520e,0x3a8b7818,0x39ec9bed,0xb9a84971, -0xbb102529,0xb96d6fbb,0xb9d936e0,0xba020e64,0xba879e06,0xb9b862cd,0xba331ed0,0x3a1e3d48,0x3aa64315,0x3a8dc043,0x3a1327f7,0x39776c9c,0x3a309952,0x3b021bbf,0x3ad6cf6b,0x3aff94e9,0x3a93d568,0x38757c80,0xba3fcdf1,0xb9d57aae,0xb8870176,0x3977141a,0x38e68dac,0x39da3d7d,0x3ad9251e, -0x3aa7d7c8,0x3a8d417c,0x3bb1b901,0x3bd8e818,0x3ad455c4,0x3ae92627,0x3950df85,0xba3fc3fa,0xbb7ac500,0xbb84722a,0xbb81afa7,0xbb5f411a,0xbae328eb,0xb7134f5f,0x3ad22017,0x3b0b0663,0x3b075e14,0x3ad0da65,0x3a90a604,0xb77e79fa,0xbae27c83,0xbb0f1760,0xbb436422,0xbb53b1c0,0xbb282ec2, -0xbb2fc9d0,0xbad27bf7,0xb9be1b05,0x366cd491,0xba10adb8,0xba20c4e0,0xba70dd34,0xba37b155,0xba421fc6,0xb97b7f64,0x3892f9ef,0x3994c5bc,0xb7050854,0xba5af026,0xbabfbabb,0x39e29db7,0xbb316eb4,0xbba36819,0xbb5567a8,0xbae8320d,0x385a96b0,0x3a8eb306,0x3af67691,0x3b7601f6,0x3b9f5421, -0x3bb496c7,0x3ba14aad,0x3b8ba531,0x3b468981,0x3b15c8ad,0x3a8ddf68,0xba070a89,0xba7c1860,0xbac6c753,0xbabceb31,0xbaeab28d,0xbae62848,0xba834028,0xb9e99c4e,0x395a3f7a,0x3a8d94b7,0x3a8be4f3,0x3a60af1a,0xb947a6a2,0xb8e708a5,0xb935e133,0xb9d0c1a3,0xb9616587,0xb9ecf9e3,0xb93394ce, -0xba8f195d,0x3b8592bd,0x3b60a7ff,0x3b3d851d,0x3b397134,0x3b08e261,0x3ad1b38c,0x3ab2993d,0x3a990998,0x3a9c2cb8,0x3a8e2539,0x3a98acbe,0x398c89f0,0xb9f896c2,0xba99c6c8,0xbabacc46,0xbad99423,0xbb031c35,0xbaea1706,0xbb03e1ea,0xbac4457c,0xba5438c5,0xba8f378d,0xbab770bc,0xba1724fd, -0x398e1871,0x3a5a6651,0x3add8b4d,0x3b087649,0x3b60de97,0x3b53bd18,0x3b78bc0e,0x3b7aaff9,0x3b811c53,0x3b8d5dfd,0x3b9ad4f0,0x3b830cab,0x39e2b5a8,0xba48391c,0xba917bf9,0xbaa8d50b,0xbabd9f37,0xbae2c874,0xbb0b99d4,0xbb2606c7,0xbb26721a,0xbb25229c,0xbb1cff1c,0xbb11865a,0xbafce5d6, -0xbad4b3b8,0xbadbd9e7,0xbae3a120,0xbaef3244,0xbafccf7f,0xbb0687e9,0xbb1b8527,0xbac68e62,0xbb16848c,0xbb117564,0xbb08b35b,0xbb0a03de,0xbb2c2e4c,0xbb235d59,0xbb0c82e1,0xbac6b0fe,0xbadc4c96,0xbab9b1be,0xba3bdccd,0xba4f7de2,0xb9ecc45c,0xba0aa4c2,0xba61cbe3,0xba2de748,0xbadf8c93, -0xbacceac9,0xbae84dbe,0xbafdf8fd,0xbb06101a,0xbb0a9f30,0xbb13f6f2,0xbb10a39f,0xbb1141d5,0xbb13350a,0xbb11ed05,0xbb130278,0xbb1156f8,0xbb13ed2b,0xbb142e0b,0xbb143de8,0xbb16bf59,0xbb1288a0,0xbb25bc0b,0xbabf6ee1,0xba050dda,0x3981749f,0xbae68de8,0xb9fc874b,0x3990fbd9,0x39fd41f1, -0x3a06dd68,0x39e97b85,0x3a4235d0,0x3a58132a,0x3a750db1,0x39970404,0xba7247e7,0x3a3d5daf,0x3998d70f,0xbb2779b7,0x3a8ef84e,0xba9ab719,0x3af1fcc4,0x3a8cbe67,0x3aa02d82,0x3ab50183,0x3a9e51ad,0x3a939db9,0x3a7454fd,0x3a827733,0x3a8f5d75,0x3abd2c4a,0x3aa5a6d2,0x3aa36a36,0x3a984339, -0x3abe6797,0x3ac2a19a,0x3aba41e4,0x3a98c8a0,0x3a75b0eb,0x3ac731a6,0xbaa47366,0xbb0f1365,0xbae56384,0xba337328,0xbb1139c5,0xbb125d13,0xbb1afad7,0xbb2384fa,0xbb17133f,0xbb3647c4,0xbb339548,0xbb241a40,0xbb156ae1,0xba07dd74,0xbaebe194,0xbb1ecf29,0xbb1e27f0,0x3a8507d5,0x3ab71847, -0x3ab84ea4,0x3b062302,0x3ae1aebc,0x3ab508a7,0x3a5ffb1e,0x3a849761,0x3aa7d0e9,0x3b069f27,0x3ad926eb,0x3af1c3a9,0x3af305cd,0x3b40f787,0x3b48bca7,0x3b31fd3e,0x3aedf8cb,0x3adb53f9,0x3a5a91c8,0xbabf9162,0x3a1d20f0,0xb8e58424,0x39860687,0xb99ef028,0xba8265c8,0xb9ffd1ff,0xba6c17d8, -0xbaefa689,0xba9c8718,0xba55359b,0xbab3289e,0xba3e3bc4,0xba90f9ae,0xba9aa2c4,0x393dd6b9,0xba98cd54,0x3a9a7702,0x3b175ab6,0x3b0768a8,0x3b52b4de,0x3b1d516d,0x3ae2557f,0x3a4e3534,0x3a3efab5,0x3aaa5144,0x3b61d002,0x3b220975,0x3b2717de,0x3afed71d,0x3b7278df,0x3b7b9c25,0x3b5a6d23, -0x3ae9636c,0x3adb9ad1,0xb8ad3b13,0xba6d02c8,0x37ef3475,0xb93e9d2e,0x394579af,0xba041dec,0xbb00849e,0xbb09e718,0xbaf261b3,0xbb7041a7,0xbb5141f9,0xbb64b44a,0xbb0e6225,0xbaad6fe4,0xba630494,0xba6b48e7,0xba043dff,0xbb08d795,0x3a5b6ac4,0x3ad94254,0x3b135cab,0x3b9bcf13,0x3b721b8a, -0x3b17f41c,0x3a5b9861,0x3a0ff102,0x3acc57ba,0x3b937c03,0x3b340490,0x3b4e72df,0x3b62e98f,0x3be262f3,0x3bf82f71,0x3bd9d5b1,0x3b80d838,0x3b534175,0x3aadf931,0x3a1394ca,0x3b285a67,0x3a9d23ff,0x3b0c2c09,0x3ac56260,0xba8b25d9,0xbad97fdf,0xbb313a45,0xbb288e7c,0xbbb84d7f,0xbba71b94, -0xbb72fc4a,0xbb53498f,0xbb0f5811,0xba4e4c98,0xba9e3d44,0x3926977b,0x3b3f8fb1,0x3bdc6915,0x3ba0161d,0xb6cd3759,0x3a3c0b0a,0xb94ef289,0xbb17c2d7,0x3a8d3259,0x3b57439d,0x3b75ba3b,0x3c07a05a,0x3be08a47,0xba00873d,0xbb1ac9e6,0xbb8a68a3,0xbb88d595,0xbb69713b,0xbb4c0dcf,0xbba95688, -0xbbb90516,0xbb7b91d8,0xbb98d180,0xbb68f07d,0xbb0f5326,0x3b122a89,0xba199c1f,0xba71398e,0xb9911e33,0x390f3ebf,0x3b2ccb0c,0x3bbf2808,0x3baccb8f,0x3b5281d6,0x3a489981,0x39ff33ce,0x3b19a6d4,0x37406852,0xba2981ca,0xbb7e1c31,0xbbd72a0f,0xbbc31822,0xbb3bdc14,0x3aa4478b,0x3b5f3b28, -0x3a891cfe,0xbbb2f39d,0xbbedea44,0xbbb6d0eb,0xbad64dbf,0x3b87411d,0x3bcbd435,0x3b9651ff,0x3b61010c,0x3b71a4e8,0x3b786573,0x3ad3d5be,0x3ab9cdd9,0x3a71adce,0x3ae4ee91,0x39be4b78,0xbaf211d4,0xba80ca13,0x389b4c7f,0xb8b7302a,0x388360c9,0xbaee7777,0xbb9e0f96,0xbc10aee1,0xbbbc12f0, -0x3ae5ea1c,0x3b8e8511,0xbc4a4013,0xbc03eca0,0xbba868df,0xba9dc110,0x3bef318b,0x3b8fff88,0x3a93a38b,0xbad8437c,0xbbc06375,0xbb253f2c,0x3c0654ec,0x3ba1b8c7,0x3af923f4,0xbac2fdda,0xbb0575e7,0xbb3b07ad,0xbb4f15c7,0xbad88325,0xb9629ddb,0xbaaf3b8c,0xba664095,0xba395040,0xbb12a5bd, -0xbb148a0b,0xbab984d0,0xba1f9bf2,0x392bb23b,0x38ec486b,0xb904bc81,0x38c3b899,0xb996d6e4,0xba969656,0xbb1c2a16,0xbade0b96,0xbac6b2e9,0xbc227f2a,0x3b25ab3c,0xbb1ffcb2,0x3a79e999,0x3b01da8f,0x3b9e9186,0x3b8af4ad,0x3b3d8ac8,0x3a401a46,0xba45b3fd,0xbb02f7c9,0xbaf6bf14,0xbb0eb97b, -0xba94bdf8,0xba73bb74,0x3aa62d89,0x3b32daeb,0x3b56537c,0x3b37f4d9,0x3b302249,0x3ab7eb98,0x3a5eb863,0x3ade0782,0x3b0b6894,0x3a9266b6,0x37bdc607,0xba363edd,0xb9a27ee7,0x37a77bf7,0x3977d8ec,0x38cf9f9c,0x3a117c4d,0x3af85f0f,0x3a20a451,0x3a81dc4a,0x3b968a22,0x3baaaa87,0xbaf8a54f, -0xb825ed72,0x3b171414,0x3a5d5ac9,0xba9226bb,0xbb201b8c,0xbb113793,0xba97ffc9,0xba20f783,0x39fd7795,0x3aac1b8f,0x3add2b62,0x3af0309a,0x3acc0f15,0x3a81d41f,0xb8bd93ba,0xba998fd0,0xbb0ed3de,0xbb1665b4,0xbb25bc83,0xbb5ba6d4,0xbafd6a9d,0xba7fdcdb,0xb90e38c4,0x398fe984,0xb9c6522b, -0xba1b6fb6,0xba22ee71,0xba2c3465,0xb9f7ad64,0xba01d822,0xba4add3f,0xb9638111,0xba144737,0xbaea6b7a,0xbb16b2e8,0xbb8c3681,0xbb90fe0d,0xbb69fa4e,0xbb2d4e0f,0xb9a8266a,0x3afdd950,0x3b658d53,0x3b94c27e,0x3babea83,0x3bbf5453,0x3bd0b220,0x3bc1595b,0x3ba4b921,0x3b6c40bb,0x3b3b3243, -0x3afb6897,0x3a7123db,0x39b0dea8,0xba15cd13,0xbae38d08,0xbb0314cc,0xbaebaa9f,0xbae81862,0xb9c6cb48,0x3a08cb4c,0x3a9e5588,0x3a87a42d,0x39fa7c29,0x38873f71,0xb8d61ccf,0xb90c8687,0xb9a88832,0xb9d5f999,0xba504b22,0xbaa645b3,0xbb105d04,0x3b46cd50,0x3b7d48eb,0x3b8fe08e,0x3b794e88, -0x3b686fd6,0x3b451bf1,0x3b417f9c,0x3b4c7208,0x3b31a4fd,0x3b172156,0x3affa4d5,0x3a89a2d3,0x3996ce50,0xba206811,0xba364085,0xba729ed5,0xba90b4de,0xba884f97,0xba161ff9,0xba7a843a,0xbacafa49,0xbaa4bd2b,0xbaa2f129,0xb95e8ba1,0x3996e55d,0x3ac083ce,0x3acf5400,0x3b3b4363,0x3b34e523, -0x3b5899b7,0x3b3dd70f,0x3b534db0,0x3b4a7f6e,0x3b49245e,0x3b38b751,0x3b4b88cf,0xba974895,0x39a9d696,0x39ad1bba,0x3971e456,0x39b2bbfb,0x399d1bc4,0x39196450,0xb87f2104,0xb997343e,0xb9e3b256,0xba0b194c,0xba38945b,0xba6548fa,0xba97900e,0xba922759,0xba9472a3,0xba937b4b,0xbaa3c7ec, -0xbaafc5f7,0xbab98bf0,0xbb1e00ac,0xbadc822a,0xbb0395c1,0xbb0c5880,0xbb266b65,0xbb20bcba,0xbafc3137,0xbaf69136,0xbaff73e1,0xba853963,0xb9a9a92b,0xb9830d7f,0xb8aa17e3,0xb9c9dd8e,0xb9c0f92c,0x39a1db6b,0xbac19876,0x391dc0df,0xb99afa5c,0xb9a6c69a,0xb9daa572,0xb9f7dbb3,0xb9fcdbf5, -0xb9f61cb5,0xba11314c,0xba2fc862,0xba556803,0xba6c81e4,0xba803a06,0xba8d2a35,0xba8a8df3,0xba8d4881,0xba8e9d94,0xba8d7110,0xba94960e,0xba58e7bc,0xbb0d76b5,0xbb3fcf97,0xbb47cf89,0xbb03170d,0xbb478448,0xbb59dcab,0xbb4f8d01,0xbb401f50,0xbb26be8c,0xbb2a0163,0xbb211a90,0xbb0b4c75, -0xbb050369,0xba852c53,0xbb0a94a4,0xbb106323,0xba97b658,0x3a2a6916,0x3b234a8f,0x396fcc08,0x3a384b13,0x3a5aa321,0x3a90cec2,0x3a9533a1,0x3a88cc02,0x3a16c642,0x3a2afd2c,0x3a3789fc,0x3a84b59b,0x3a633c7d,0x3a662c43,0x3a57246d,0x3a85447a,0x3a848e9d,0x3a72aa07,0x3a3dab36,0x3a1d98b5, -0x38ee014a,0x3b1d81d1,0x3b280806,0x3a71248b,0x3b0884ee,0x3b2415d7,0x3a230077,0x3a72b2a1,0x3a62282a,0x39ff13d8,0x3a75d323,0x3a9021fa,0x3a9061c7,0x3b1ea498,0x3af66ddd,0x3a7aab35,0x3b3380ae,0x3b09311d,0x3a798200,0x39f11717,0x3aaf4c7b,0x3b0744a9,0x3b29125b,0x3b187b18,0x3a855c07, -0x3a8df0e3,0x3a92d895,0x3af071a2,0x3aaaaabe,0x3ab1c5f5,0x3ab57caa,0x3b168ee1,0x3b287d6b,0x3b15d79a,0x3af44c39,0x3a8a4018,0x3aac8d98,0x3b0c8d38,0x3aa8959c,0x3adac127,0x3aae8377,0x3a96e221,0x39313708,0x396fae81,0x3a051d65,0x3a02ab3c,0xb8a38de5,0xba25cd29,0xba066546,0x3909b9e9, -0x3a368f8f,0x3a5d9228,0x3a0f43cf,0x3b0673ab,0x3ab90d3f,0x3a2b5850,0x3b11e2dd,0x3b4d0e38,0x3b884350,0x3b806690,0x3a9b42eb,0x3aa3194c,0x3ab0e9b4,0x3b584f07,0x3b2046ff,0x3b2809b6,0x3b16cba2,0x3b622cf6,0x3b6b1f70,0x3b4140a1,0x3af27a40,0x3a328d51,0x3a69589c,0x3ad66d52,0x3aa2f7a2, -0x3a04754d,0x3a3b09d1,0x3a897b4b,0xbaeabfeb,0xba5acb16,0xbb2c3477,0xbb10ae5c,0xbb5f9802,0xbb00effc,0xbaf6c669,0xb92b952e,0x39bb3b05,0x3a28f7ee,0x3a848814,0x3a2df4ad,0x3a02bac9,0xb9de26b6,0x3b1e35d0,0x3ba01843,0x3be8f06a,0x3bd9471d,0x3b26f453,0x3b0e271a,0x3b1c8d95,0x3b9b5ecb, -0x3b42f09c,0x3b50e43e,0x3b73c45d,0x3bdd84a5,0x3bfe5ff1,0x3be35586,0x3ba23644,0x3b2d2894,0x3b153c61,0x3b37de31,0x3ad45599,0x3adf1ad2,0x3ac87cb5,0x3a4e3c8f,0xbb0784c6,0xbb052874,0xbb2cfdd1,0xbb4d5ba8,0xbbae94e8,0xbbadf89b,0xbb934458,0xbb52eaf9,0xbab77526,0xbab73afe,0xba3cd763, -0x3bcc983f,0x3ba4b469,0x3bc16893,0x3ba39444,0xb980af00,0x3aa8523c,0x3a73cb29,0xba8d1ef6,0xb9c671a7,0x38aacbe2,0xb93f22c5,0x3b688c1d,0x3b368ec1,0xbb4c49db,0xbb86d11a,0xbbc08d8d,0xbc0abc57,0xbbc0143a,0xbbb3cc8c,0xbb8d7980,0xbb64aa9b,0xbb9f730f,0xbb928623,0xbb4a296f,0xbab19550, -0x3b07b595,0xb9d5bf76,0xba0525f7,0x393ba8ca,0x3a29a031,0x3b4c5482,0x3bcd8db2,0x3bbc583b,0x3b9f7b5b,0x3b3eac52,0x3ba59752,0x3b6c39fc,0xba9f2f2c,0xbb91b2c2,0xbb910aab,0xbbc41fe6,0xbb8df798,0xba5c5bc6,0x3b3dae19,0x3b8a5c76,0x3ad21ef5,0xbb9dda82,0xbbdaac79,0xbba9b6f6,0xbab2b0a0, -0x3b744549,0x3bd3667d,0x3bbe69dc,0x3bb46446,0x3b830b92,0x3b9a423d,0x3b294b8d,0x3ad80e05,0x3ae98b0a,0x3ab0f07b,0x374b8937,0xbaec52fe,0xba75cd13,0x38dc90c2,0xb94de05b,0xb93370bf,0xbaf6e4de,0xbb9caeba,0xbc03ee3e,0xbbaea9aa,0x3b4769f2,0x3b61b0fa,0xbc19af7f,0xbbbd41ca,0xbbb03211, -0xba3a0661,0x3c44b83b,0x3c142380,0x3bb4f468,0x3af53355,0xbbf1e487,0xbbca2695,0x3ba733f1,0x3b603580,0x3acfd834,0xbae64b87,0xbb2a61c3,0xbb6393a6,0xbb79bed4,0xbb0ebe0d,0xbb1201c6,0xbac00a6d,0xb86b5b44,0xba802f26,0xbac1e9e2,0xbaebd1cb,0xba92b4cb,0xb9c463ef,0x39925325,0x38b2115e, -0xb823a047,0x397069dc,0xb77e0ea0,0xbaaac6be,0xba77c41c,0xba963f57,0xbadf85a0,0xbc08a227,0x3aaca248,0xba0cde8f,0x3b90058e,0x3bf49a73,0x3c1b716e,0x3c1bd413,0x3be4b102,0x3a5f636a,0x3ab30f8c,0x3a3832a5,0x3aa310d0,0x38f5d9db,0x3a026638,0x386be548,0x3b0abbe7,0x3b587085,0x3b4af085, -0x3b3fe12f,0x3b0d7b05,0x3ae63ba9,0x3b12baa4,0x3b072eee,0x3b11ca3f,0x3a9d0cba,0x390dd991,0xba2b908b,0xb99ebf43,0x38a1a827,0x38672891,0xb8095e85,0x39bf0cae,0x3a82722f,0x3890b9c9,0x3990cb9f,0x3b6e4b77,0x3b3518b6,0x3b0043ba,0x3b94a52f,0x3bcd249a,0x3bb0ff32,0x3af5774e,0x3a7eb34a, -0x3973a420,0xb9878d43,0x39ac24b5,0x3abcfcb4,0x3b6dd947,0x3b60e4f5,0x3b57f1c0,0x3b45df62,0x3ad7c050,0x397a17a3,0xbaa6c267,0xbad73c76,0xbb050946,0xbb05de17,0xbac8fa3f,0xbaa4714f,0xb9f0d886,0x390d9257,0x39a2d6cc,0xb94863c9,0xb9e58c06,0xb9f37e69,0xb8d8ae48,0xb94d91b3,0xb825e254, -0xb952ff51,0x3a00431e,0x39e19a8d,0xb91e3df6,0x3a40186b,0xbaf96ab1,0xbb17140a,0xbb496e0f,0xbb0bd191,0xba8e7546,0x394f8e58,0x3a95bbb5,0x3b2abfa3,0x3b6d8f7b,0x3b949b01,0x3bac3d2c,0x3bb15b23,0x3bacb1c4,0x3b8fb437,0x3b74535b,0x3b255123,0x3a3513db,0xb97da3d0,0xbaab515e,0xbaf97f44, -0xbb040951,0xbad26536,0xb9e633f1,0x39b0cbd4,0x3a3d3e0a,0x3a9c24de,0x3a3a9674,0x396c98a8,0xba08b13c,0xb99f868e,0xb9261bc3,0xb98be33a,0xb9a3af3d,0xb9e83ee3,0xba2d30ff,0xba895bbd,0x3b910f90,0x3b7905db,0x3b5615f3,0x3b623045,0x3b50002b,0x3b507c00,0x3b55d73e,0x3b60defc,0x3b4a85b6, -0x3b31fa26,0x3b1a2c13,0x3a953b83,0x38299f49,0xba8a59a6,0xba977b55,0xbaaae0f2,0xbac5315c,0xba93416f,0xba8b8758,0xba06a965,0xb918bfb1,0xba0d082d,0xba63c75c,0x37f15b81,0x3a663513,0x3aecb1a7,0x3b1517b0,0x3b323970,0x3b6ccaab,0x3b490804,0x3b4c9a0e,0x3b3ebd44,0x3b548c61,0x3b78299b, -0x3b870ed5,0x3b7fe20b,0x3a744ee7,0x3aa50184,0x3a7b3d45,0x3a6fbe87,0x3a4387d3,0x3a091e41,0x3969a14f,0x38237f68,0xb9ee2ead,0xba5b6cdd,0xba8e9cfb,0xbaafd639,0xbabc5589,0xbac9e4e3,0xbac6a585,0xbacd228e,0xbad7abd7,0xbae57354,0xbb02a506,0xbb06ac7e,0xbababff3,0xbacde413,0xba992fb3, -0xbaaa7149,0xba9cd1e3,0xbaa01222,0xba8e5034,0xba26cd3f,0xb975b758,0xb8f7aae5,0x39020846,0x3a13b9fc,0x3a1c917e,0x3a28c395,0x3a5d5d6a,0x3a579357,0x3a199373,0xb9849600,0xb9b3b4b1,0xb9e44d02,0xba0f1511,0xba1a1b97,0xba2588c9,0xba2ee5bc,0xba5d725a,0xba82ca60,0xba9ba947,0xbaab93a9, -0xbabefd81,0xbad5c4d9,0xbad28df0,0xbad1df5b,0xbad027e1,0xbacdbc35,0xbac6712c,0xbae25ba4,0xba0e013e,0xb9765d6f,0xba83559d,0xb9eb1dd5,0xb6a81ce9,0xba884cf2,0xba48aa03,0xba24ed29,0xba181bcf,0xb9831708,0xb8d82abb,0x38e402b4,0x3a442515,0x3a095668,0xb9843831,0x3a384250,0xbab7dc19, -0xba30f936,0xbadb87d6,0xb9cbd08d,0xb9cebe64,0xb9e9915c,0xb909567d,0xba101986,0xba408e10,0xba86d0fa,0xba79bc6e,0xba5779df,0xb9a9b1ef,0xba0d03bc,0xba10d038,0xba31e69e,0xb9d60e78,0xb9c45707,0xb9e2ab1d,0xba2029bb,0xba166ff9,0xba1f6567,0xbadd552d,0xba894109,0x3abe0dfa,0xbae8b028, -0xbaa97643,0x3a494bd7,0x3a2fa068,0x3a03a328,0x39baec81,0x3946d8a8,0x3975e1ea,0x391d08ea,0xbab081ea,0xbaea598c,0x3a99ed74,0xba91fa20,0xba2fd014,0xba892aaa,0xb9ada0b6,0xb9842290,0x3a1f0e9b,0xb971b686,0xba671afd,0xbad8eeaa,0xbac9b935,0xba96a920,0x3721f397,0xba08d0a9,0xb9f58b59, -0xba1d450b,0x39b977fe,0x3a09d673,0x398a32d8,0xb93eca24,0xb908e6b2,0xba3ab452,0x39419d9f,0xb97ac223,0xba74ae21,0xb9a1e996,0xba1d2894,0xbb007019,0xbab367fe,0xbaeaaf09,0xbb15b65f,0xbb00a5af,0xbae3ad08,0xbb0e370c,0xbab78496,0xba86c25c,0xbadafcf9,0xbaaad8c3,0xbaae8480,0xb9146650, -0x39c650c5,0x39f0f514,0x3af54344,0x3953d873,0xba888764,0xbb27bbd8,0xbb2ec012,0xbb010d0e,0x3a638b83,0xb962bcbb,0xb91f1c34,0xba6e2e09,0x3a1b8c7d,0x3a4a3fc2,0x39a16a33,0xb9df52c5,0xba0a2c7d,0xba40de72,0xba6007e9,0xb9f10bf6,0xba6a2dd8,0xba3f288a,0xba31a578,0xbb3b324f,0xbb03763b, -0xbb301e6b,0xbb865997,0xbb5beb33,0xbb483ea5,0xbb4c5e34,0xba945f80,0xba558a79,0xbaae0eb7,0xba94ab84,0xbb10bac9,0xba57a396,0xb980f7ab,0x3a49eeab,0x3b70a098,0x3acbd182,0xba4c2b44,0xbb531393,0xbb6751dc,0xbb0cb7d6,0x3af3922f,0xb93a52b2,0xb9e6e742,0xba2129be,0x3b15610c,0x3b51b1f3, -0x3b2b998a,0x3abbc959,0x3ab4cd3d,0x3a7cd2d1,0x3ab973d6,0x3adb8f66,0x39e0e828,0x3a54545a,0x3a09fb00,0xbb0c9bb1,0xbb01be10,0xbb2003a7,0xbb2376c7,0xbba282b6,0xbb9a63a1,0xbb978fc5,0xbb3ead89,0xbb0580ca,0xbb1796c7,0xbb1ae8f2,0x3b17b918,0x3b181dc3,0x3ba1a54f,0x3b43424a,0xbaf369e9, -0xbb01e1ab,0xbb5018ab,0xbbad6a0a,0xbb4fc421,0xbadc7eee,0xba920e73,0x3b56cc20,0x3b6eed2f,0xb9a27bcd,0xbb48406a,0xbbb354df,0xbbed3e9a,0xbbe41095,0xbbed11e8,0xbc011667,0xbbd8ab5e,0xbbb71235,0xbbb11b02,0xbb3fdca7,0xbaa8421e,0x3ae2bb96,0xb95122cf,0xb959fdd2,0x39eb9ce2,0x3a42892c, -0x3b439fd2,0x3bb05a88,0x3ba85beb,0x3b78a008,0x3b0137dd,0x3b0e2c65,0xb96bcc69,0xbb1f0e34,0xbb140ba0,0xbb8cdc32,0xbbb496fb,0xbbf01237,0xbb951755,0x3a4e787a,0x3b42062a,0x3ad9acb4,0xbb815de8,0xbbe38348,0xbbd09d0c,0xbb62fe50,0x3a8ae344,0x3b422c7c,0x3aa30bab,0x3b01f20c,0x3b1fd159, -0x3b47ab56,0x3ad564f9,0x3a8022b5,0x3a568ab0,0x3a926146,0xb70ef176,0xbae2fa73,0xba3c0f46,0x38f95dd1,0xb982ede2,0xb9701098,0xbaf181b5,0xbb8f9000,0xbbfa8c1b,0xbba99f11,0x3b07f963,0x3acb176c,0xbbfdeb0e,0xbb96f2d1,0xbbd3b0bf,0xbb7f998e,0x3b8f6b98,0xba18e0a8,0xbb859ba4,0xbbb4e396, -0xbc25d8c6,0xbbe6a1a3,0x3b554ea3,0x3ab6b1d8,0xbaa92cf6,0xbbb94be3,0xbba84693,0xbb979154,0xbb6ff076,0xbb1f251d,0xbaf86891,0xbb4d1754,0xbb0af61b,0xbadcc730,0xbb1da343,0xbb1c33cf,0xbaa50e40,0xb92272f9,0x3999c496,0x38096b7e,0xb6bd94d4,0x39922a10,0x38fe7748,0xbaea7789,0xba4f6b20, -0xba34ab8d,0xbb7f07cd,0xbbe97c82,0xba650062,0x39518732,0x3aa430c9,0xba0a0589,0xbb5bc756,0x394db209,0x3aa0c458,0x3a0cd773,0xba8cdc13,0xbb1e4747,0xbb020c4e,0xbb4155f2,0xbb0fdb4c,0xbae82201,0xb9bb0e96,0x39c884e0,0x3a16060a,0x3a8c3b92,0x3aedc77d,0x3ac4a2bd,0x3ada96c8,0x3adce46d, -0x3af7cf76,0x3a62160c,0xb8a625eb,0xba25c57f,0xb95e418f,0x38a870eb,0x380c43b0,0xb8fa9b14,0x39a42970,0x3a380584,0xb9dbf794,0xba237fc2,0x3b00d5d5,0x39ceb402,0x3a536ba2,0xba77a959,0xbb16ba84,0xbb469256,0xbbac6702,0xbbdb52c8,0xbbe451fc,0xbbbcc69a,0xbb92b040,0xbb552324,0xbb224ed9, -0xbab15a71,0xba1a4711,0xb9608ab0,0xb7805047,0xb9a804c6,0xba832765,0xbac6445c,0xbafbcb0b,0xbb252bce,0xbb205f36,0xbabd3665,0xb8af37fa,0x39590bb7,0x39986dc9,0xb9979cf5,0xb9cefa1e,0xb98f9b89,0xb82678c1,0xb8ecba5e,0xb99f1583,0xba826752,0xb95dae55,0xb93b57c6,0xb89b908d,0xbaa6703f, -0xbb50e419,0xbbb7f67a,0xbbafb3b6,0xbb91857e,0xbb507de5,0xbae8f110,0xba4ad01d,0xb99c8190,0x3b261c78,0x3b90cec9,0x3bb7798f,0x3ba22ac6,0x3b829fbf,0x3b31d152,0x3af749b7,0x3a67a68e,0xb890b420,0xba5ee75f,0xbab77bc6,0xbae9f852,0xbb08465e,0xbaebb449,0xbab5b0bf,0xb96c1a47,0x3a1149d2, -0x3a712e75,0x398bd3bc,0xb99bf04f,0xba1978c9,0xba24aacc,0xba0b329e,0xba4ee2b7,0xba576e3b,0xbaccc6da,0xbb021601,0xbb5d0f38,0x3aff4d1d,0x3b09e2a0,0x3b05191e,0x3aedfd1d,0x3ade6c6e,0x3ac2e142,0x3ac75d6c,0x3ac4c712,0x3a9d4a75,0x3a44cfb4,0x3a16ecdf,0x36f78f59,0xb9c6b532,0xba6f8eae, -0xba80d3f7,0xba94ef48,0xbaa62e30,0xbaa152fe,0xba8e379c,0xbaa8c7b2,0xba9f988a,0xba70f880,0xba6435b7,0x38bd457d,0x3a6c504b,0x3b0791b0,0x3b162674,0x3b311546,0x3b388f03,0x3b2bcec7,0x3b0d6b44,0x3aee820a,0x3afbbfb0,0x3b0a4970,0x3b11bf8c,0x3b0426f1,0x3a9a528e,0x3a897f2f,0x3a71b6b1, -0x3a0dc406,0x398ddfb9,0xb8dff32d,0xba059fa3,0xba64dfd1,0xba70bdaa,0xba647f55,0xba60bd73,0xba705350,0xba85e662,0xbaa00943,0xba9f50a5,0xbaa2d033,0xbaa3cb8d,0xbab3765c,0xbab1d40b,0xbad8a68d,0xbb004011,0xbaec2245,0xbb06e74d,0xbae6b096,0xbb06157e,0xbb10c6d4,0xbaee01e1,0xbade9c65, -0xbab0b5b2,0xba47505b,0xb79dbd8f,0x39b987dc,0x39fefa3f,0x3a13ea27,0x3a0a5d11,0x3a55bd10,0xbaabffe4,0xb9eb729e,0xba2fc2aa,0xba5b6d1b,0xba791f56,0xba8a54ef,0xba95822a,0xbaa919a3,0xbaaaa3f7,0xbab7854d,0xbac4dea9,0xbacc159c,0xbad0a2e5,0xbad5d054,0xbad37d75,0xbad4d85c,0xbad3e710, -0xbad4a784,0xbad2c097,0xbabf4845,0xbb163981,0xbb0e27b3,0xba85f38c,0xbb137465,0xbb0c0c96,0xba75840d,0xba59202c,0xba37679e,0xba0b75df,0xba0cd020,0xb9f92020,0xb984ac47,0xba93352e,0xbaa119a7,0x385359a0,0xba89f6fe,0xbafc04e5,0x3aee4336,0x3afa666a,0x3b08ef86,0x3ad7a744,0x3af6b737, -0x3aff68f0,0x3b139429,0x3b133194,0x3aef9491,0x3af62d04,0x3afc36f7,0x3b179a3d,0x3b06bdd3,0x3b05c943,0x3b009947,0x3b10fdd8,0x3b11cd1c,0x3b0bca65,0x3b00980f,0x3ada78e9,0x3af8ff74,0x3ae89c02,0x3a0ece73,0xbb0e98fe,0x3b02b47e,0x3a192380,0xbb18e6c3,0xbb095ccd,0xbb0c86d3,0xbb14df26, -0xbb03b3db,0xbaf6f699,0xbafe3e8f,0x3a3023b4,0x3b10740c,0xbb077daf,0x3a10047b,0xb9acf3d4,0x3b16d062,0x3ac63604,0x3b072d8f,0x3b21da60,0x3b67428d,0x3b65efea,0x3b1c447e,0x3b22e940,0x3b2bb81b,0x3b68647c,0x3b320374,0x3b2edff3,0x3b3100b0,0x3b745162,0x3b846799,0x3b785248,0x3b583a38, -0x3b2e7bf2,0x3b295572,0x394606a7,0x3ac05cb6,0x3abbce74,0x3a703798,0x3a0b2f62,0x39ab34dd,0x3a492bfb,0x3a900b14,0x3987b308,0x3a54efc6,0x3a00066b,0xba112552,0x3a2630ea,0x39aa40ad,0x38bc713c,0x3aa4a5b1,0x3abf45ee,0x3b28a762,0x3b03b8df,0x3b358290,0x3b50aafb,0x3ba6ef41,0x3bad7811, -0x3b476932,0x3b4708ec,0x3b4d1c3b,0x3bb1d9eb,0x3b822c30,0x3b81ef95,0x3b6df8bb,0x3ba70744,0x3bad9a2f,0x3b99bf3f,0x3b64d607,0x3b34b7ef,0x3adc69cd,0x3a893234,0x3a696d0c,0x393d35ce,0x39e9f6f3,0x393dca4f,0xbadfeb27,0xbab11004,0xbae7af10,0xbb4da085,0xbb2dbfb9,0xbb05914b,0xbb1ed258, -0xb875030f,0x39efe485,0xb9a3d971,0x3a8dc84a,0xb94db762,0x3ac8ed00,0x39cf721d,0x3b046c33,0x3b74bb15,0x3be9ce03,0x3beef81e,0x3b862dd0,0x3b7d7b55,0x3b96f9ca,0x3bf8ea58,0x3ba16a33,0x3b94af39,0x3ba6537e,0x3c0af5ea,0x3c1fe23a,0x3c139c87,0x3be652fd,0x3ba8f984,0x3b736aa2,0x3b0dc3ac, -0x3b0996a7,0x39d0b3f9,0x3a8013cd,0x39e50c20,0xbb1b54a5,0xbae831aa,0xbb164a2d,0xbb26a6c0,0xbb8dc03d,0xbb898266,0xbba117c5,0xbb19e823,0xba81973a,0xbb1fde43,0xba0da9b7,0x3bc33079,0x3bf5b5c9,0x3c20632b,0x3c08583d,0x3b4ce1dd,0x3b8e94fe,0x3b85acc7,0x3b5ac67e,0x3b2b1b52,0x3b00686a, -0x3ac07137,0x3b93ee1a,0x3b904ade,0x39225533,0xbb10f37b,0xbb90b222,0xbbcbf7a6,0xbb9bdc29,0xbb850365,0xbb96969b,0xbbb5e6f1,0xbb9951c5,0xbb95e42a,0xbae67551,0xb9cac85a,0x3abbadb1,0x386bf038,0x3967c319,0x3a4a1fd4,0x3a96dfa1,0x3b52ed4d,0x3badf03e,0x3bb40967,0x3b9f66f8,0x3b62a2ad, -0x3bab0385,0x3a8547f2,0xba08a4d5,0xbb221df9,0xbb58284b,0xbba6cf89,0xbba6a853,0xbb08fadb,0x3b0af867,0x3b8ec6bb,0x3b4e25d4,0xbb242dae,0xbbd36aae,0xbbc818c2,0xbb0d9098,0x3b4e6827,0x3be7b3ae,0x3c07b7a0,0x3bf5fb3b,0x3bc43bd9,0x3b91f17f,0x3adbdef1,0x3a9011fb,0x3ac5a1e8,0x3aba9863, -0x397824d5,0xbac058df,0xba08d6a5,0x370f262f,0xb9d7ad10,0xb9b40ccf,0xbada897e,0xbb790be5,0xbbdab2ed,0xbb6f7bca,0x3b61bad1,0x3b27ef6f,0xbbc5ea81,0xbb04b34d,0xbbaff4db,0xb9f8a1d2,0x3c7cad29,0x3c4669d6,0x3c224c75,0x3bf987da,0xbb1cddb7,0xbb5943a5,0x3bae0516,0x3bf8e66e,0x3be72a10, -0x3b0bceda,0x3a628a77,0xbaaa07d5,0xbb50586f,0xbb0e2f41,0xbad3d072,0xbac6f081,0xb9f8f0bf,0xba59465d,0xbad598c4,0xbacaea53,0xba5c588c,0x38bfe56c,0x399b70a4,0x381b440f,0x390d45bd,0x399c3d2a,0x39ea0676,0xbac8b84c,0x395f61d8,0xb8c2c34b,0xbb987365,0xbbc1b8ba,0xbb007fca,0x3b4d8cdb, -0x3bf9cc76,0x3c190c34,0x3c312d5f,0x3c4e1595,0x3c2edb2a,0x3b9165a4,0x3b07dcf9,0x39c528a8,0x3a913785,0xb8e70706,0x399e40ec,0x39ade7de,0x3b246a5a,0x3b7915d4,0x3b843fec,0x3b8b5e1e,0x3b6ef27e,0x3b269f20,0x3b00b5b6,0x3b0fe875,0x3b156d57,0x3a85e344,0x38f46dd2,0xb9ddf07e,0xb90a3cdb, -0xb608bce9,0xb898940a,0xb9838597,0x39081097,0x39b7c6a0,0xba063ae4,0xb9e92d81,0x3979380b,0xbafcb0fc,0x3abbe257,0x3b950979,0x3c095271,0x3c01626f,0x3ba0e26e,0x3b58a59d,0x3af121cc,0x3a767466,0x3a40990f,0x3ab17615,0x3b57d082,0x3b4502ac,0x3b46d20e,0x3b4ad89e,0x3acd5e34,0x39c665e8, -0xb9f6c355,0xba8c7cac,0xba8f581d,0xba7e7110,0xba6f49f3,0x37f713c1,0x3a1067b3,0x3a0c6dd9,0x3a0178a6,0xb71c9053,0xb9633c2c,0xb80272d5,0x391bdbe9,0x3902fc3a,0x383a75ec,0xba084fdc,0x3912250d,0x39ed563f,0x3a1c00db,0x3b11eb96,0xbb86e399,0xbb17598b,0xba974713,0xbaa23e64,0xba2e56a0, -0x388ecc2b,0x3a885633,0x3b362d0d,0x3b52f380,0x3b7f3c19,0x3b94f65d,0x3ba785e4,0x3bab3cbc,0x3b975f1b,0x3b83db2b,0x3b40df4c,0x3aa44ccb,0x3936212b,0xba807d0a,0xbb0610ee,0xbb05272d,0xbab7b2bd,0xb9c19f75,0x3a317453,0x3a778fb7,0x3a7a1f06,0x3989113f,0xb99f280e,0xba050a81,0xb9b9b08c, -0xb9436758,0xb9ac0cc7,0xba06b5b5,0xba373c11,0xbab5dcba,0xbac5e8d7,0x3b493433,0x3b39b4b0,0x3b2ccbde,0x3b3928a7,0x3b43bc8c,0x3b60a087,0x3b7ae7fe,0x3b8e8da8,0x3b7d17ed,0x3b61aab3,0x3b40a2cc,0x3ae39221,0x3a1f18a4,0xba193d80,0xba23c0dd,0xba44a97e,0xba5f40a0,0xba063d09,0xb946cade, -0xb7fa353e,0xb8c1ae56,0xb965e3b8,0xb9a8a150,0x3a095903,0x3a9e36ee,0x3b205f2e,0x3b1b3384,0x3b3debec,0x3b414201,0x3b21bc12,0x3afb082e,0x3ad07f66,0x3af9d4ba,0x3b166f1f,0x3b19175d,0x3b295c76,0x3a8814da,0x3b2ba9f5,0x3b21700d,0x3b209e7a,0x3b178a31,0x3b0f9dd0,0x3b04d51c,0x3b03cac8, -0x3aa663ed,0x3a2f4d35,0x393fd2d1,0xb9b8adce,0xba479805,0xbaa304b2,0xba96a70a,0xba99b722,0xba9e5a20,0xbaac177e,0xbac9e60d,0xbabbf256,0xbac76e73,0xba5b21ae,0xb9d30fd2,0xba1fb582,0xba0ac1f2,0xb8902de9,0x39300ab1,0x3a0da4b2,0x3a20c51d,0x3a97f205,0x3ac3cee4,0x3ad08ea3,0x3adfb830, -0x3aba2c8a,0x3ae47d05,0x3b0b7d9e,0x3a50f09e,0x3a7815bb,0x3a20f7a7,0x3a27d178,0x3a1d3433,0x3a1a4926,0x3a130e38,0x3a1f51ab,0x39a5e4b6,0x38c1420a,0xb93c8af5,0xb9c8a19e,0xba1b3450,0xba6558bb,0xba543924,0xba54d30c,0xba516940,0xba43ede8,0xba4271b6,0xba38d695,0xb9ccac95,0xba67538a, -0xbb1d525b,0x38db41c3,0xba0b5ddb,0xbb1dc228,0xbb0e62fa,0xbb005dba,0xbae43f7d,0xbaca9490,0xbab43d6e,0xba8eb7fd,0x39500655,0x3a8ca7ab,0xbab28989,0x38b044d8,0xb9b07aa3,0xbab4a0f6,0xba013a0b,0xbad80893,0xba81beeb,0xba91ce9c,0xba457276,0xba932b35,0xbaaf1d75,0xbae6a923,0xbadb5775, -0xbacb726a,0xba836a4d,0xbaa41aba,0xbaa493f3,0xbab24b55,0xba97365d,0xba942a76,0xba9a0b93,0xbaaaefe0,0xba966145,0xbae3ef78,0xba009c62,0x3a814075,0x3b587138,0xba924ac5,0x3a29b61a,0x3b2c7317,0x3b31af69,0x3b27f152,0x3b081102,0x3b1d9627,0x3b22fa9b,0x3b0d237e,0x3a2713d7,0xbaa5baff, -0x3b4384fa,0x3a939aa4,0x3ab95984,0xbadbb736,0xbaa0cfe8,0xba5f4e75,0xb6101ca0,0xba18156f,0xbaa32ff8,0xbb1a80c7,0xbb16f8a2,0xbb002a0e,0xba2a3e69,0xbab8caf2,0xbac4fc38,0xbad0d470,0xba5768b7,0xba102c45,0xba321d10,0xba4a80ac,0xba689fd2,0xba7b2885,0x3af95537,0xb9b4871c,0xba0e7010, -0xb9878d0b,0xb9948d30,0xbae47872,0xbaa8e61c,0xbabaab00,0xbac7cdd9,0xbad085d9,0xbae45e58,0xbb03ddae,0xba997e61,0xb99b1ae5,0xba8b78be,0xbad6a5f0,0xb985f31b,0xb9df6f0a,0xba5d7a03,0xb883c9fd,0x3a931349,0x38aa1d99,0xba923e3f,0xbb604e14,0xbb653e71,0xbb423d60,0x38ac1e58,0xba9e6d67, -0xba9734fa,0xbadca0ff,0xba16ed61,0xb9c29ace,0xba47c90a,0xba857593,0xbac38a9d,0xb9ecb0b5,0x3829a9a6,0xb9a5b605,0xba4f611b,0xba86ae5f,0xb9d4da6f,0xbb45bb3c,0xbac4abd4,0xbb488e98,0xbb7ff465,0xbb51e6c9,0xbb0e914d,0xbb61de89,0xba1246e4,0xb9866ebc,0xba70b8f4,0xba52a8a1,0xbaaca180, -0xbabcc03d,0xbad2817e,0x38dc2b4d,0x3b32b204,0x3af3a930,0xb96e16c2,0xbb7bf6b0,0xbb8afd7e,0xbb42af3d,0x3aa3bdef,0xbaa5177f,0xbb09b25a,0xbb0c788e,0x3995e3bf,0x3ac8852b,0x3aab641b,0x3a890827,0x3a2c2d81,0x3aafd0e2,0x3b13d029,0x3a3f4a9c,0x38cc0f8d,0xb9bce48d,0xb9e0fcf4,0xbb32171c, -0xbae8e670,0xbae8a582,0xbb121914,0xbb757554,0xbb7965aa,0xbba0c8ac,0xbb1c9db8,0xbac1e073,0xbb4ed26c,0xbb2a09de,0x3ba9ee5c,0x3b53a3a7,0x3b872141,0x3b34100f,0xbab4e7f1,0xbb1d1677,0xbb6ee0ca,0xbba0331a,0xbb9d24d0,0xbb93931b,0xbb8b10e9,0xb9effd0f,0x3aa15fa8,0x39a1b7dc,0xbb4f1376, -0xbbc3543a,0xbc1658f2,0xbc0ed1c5,0xbc16cbb6,0xbc026123,0xbbc0708c,0xbbca3fbe,0xbbab6543,0xbad8e513,0xb7eaacc7,0x3a939c3f,0x397cec0f,0x39c5f6c1,0x3a642eaf,0x3a907dd4,0x3b3a65f0,0x3b8dcca8,0x3b9999c4,0x3b959e77,0x3b676677,0x3b90c73c,0xba957b6d,0xbb6034ee,0xbb7a6409,0xbb90423f, -0xbb98e3a2,0xbbe3f4bb,0xbb8b7436,0x3ab6a66d,0x3b402d56,0x3b16e891,0xbb1152e7,0xbbcafb12,0xbbd7cc1e,0xbb8545a6,0xba7db00f,0x3a8d1f7e,0x3a0eaa6e,0x3b13306b,0x3b095017,0x3b31bca3,0x3ad4f017,0x3a2a75da,0x3a61438b,0x3a0ebc96,0xb9b798ba,0xbab41062,0xb9b38d18,0xb8ac0486,0xb9e91511, -0xb9cb5c60,0xbab6be62,0xbb62ceb9,0xbbbdf9bc,0xbb848536,0x3b2028b4,0xb99773d7,0xbb8f3434,0xbab137f4,0xbbc34aab,0xbb70b813,0x3bab5f78,0xb93cff1e,0xbb6759cd,0xbb949ba1,0xbc360818,0xbc1c645a,0xba433b95,0x38c51093,0xbaaae49e,0xbbca3ab2,0xbbb9c05e,0xbba0f76e,0xbb6d4c9a,0xbb39acf7, -0xbb49ea82,0xbb60cc96,0xbb0650b6,0xbafaa795,0xbb0399a6,0xbaf3dcc6,0xba4b5071,0x397210b2,0x39861958,0x3825b705,0x3973a27c,0x39591f43,0x3a422226,0xbabb2142,0x3a1d1f51,0x3928ca4c,0xbbae466f,0xbba32696,0xbb4cef4e,0x3ba79ce8,0x3b2f9433,0xba546743,0xbbd98627,0xba4599ff,0x3b066e34, -0x3b17ccbe,0x39889487,0xbab770b9,0xba86e7dc,0xbb1c1e8c,0xbb022acb,0xbac3b6f1,0xba5daa43,0xba3aab7e,0xba2e52af,0x39d153b6,0x3aaeda5a,0x3af00cf3,0x3b21b7d2,0x3aee6544,0x3ae4e90d,0x3a20accb,0xb8a56365,0xb9cf948b,0xb8ac12c2,0xb890c6f5,0xb9091899,0xb9971f7a,0x38033b08,0xb95ca20b, -0xba21df05,0xbacd712b,0xbaf1a643,0xbb97504a,0x3b796536,0x3a1da0c1,0xbb1818ab,0xbb0fe123,0xbb9b2cbb,0xbbc655dd,0xbbf0f271,0xbbe70ad3,0xbbb930bf,0xbb915035,0xbb577f99,0xbb078c6c,0xba9aff12,0xb9f25dff,0xb9226d8a,0xb8d337a9,0xba0725f1,0xba39f58e,0xbaa864e8,0xbae89b8e,0xba61f63e, -0xb9e89109,0x3a45b069,0x3a162b51,0x39b1dc37,0xb8ea662e,0xb8ab50e5,0x38d141a8,0x39a0ab7e,0x3948b75e,0x3892390f,0xba30302e,0xb9057714,0x39d3bd75,0x3af34c5a,0x3ac4eafb,0xbadb585f,0xbb9034fe,0xbb99d90a,0xbb8abca1,0xbb8d538d,0xbb83a63e,0xbb6631c9,0xbb48b648,0x39ea1902,0x3b2ee222, -0x3b7f9fff,0x3b6cfc41,0x3b4b532c,0x3b170fae,0x3acc5f5d,0x39f4b444,0xba4e4b84,0xbad75d8b,0xbafdd90b,0xbadeed2c,0xbafc9de6,0xbac86db5,0xba202208,0x39016488,0x3a0a0049,0x3a010499,0xb9a2b08f,0xba2cb8a8,0xba5c4485,0xba41ebfd,0xba2fda43,0xba83287f,0xba85322f,0xbae5d7e9,0xbb06cbfd, -0xbb54d59a,0x3a908c8c,0x39cab739,0xb98fc6e3,0xb7d99678,0xb8732c66,0x39a47a06,0x3a1a5101,0x3a2bff01,0x3a1529ed,0x39a9b47d,0x39ca13bb,0xb89e72e7,0xb9cd5c4d,0xba4cb2a2,0xba723a66,0xba89a7fe,0xba9d78fb,0xba9332df,0xbaad0f56,0xbaa1d7d0,0xb9fa776a,0xb9a5e970,0xb98353f5,0x39f3068d, -0x3aba46f1,0x3b1c64f8,0x3b2afc21,0x3b12a5b8,0x3b2cd755,0x3ae9a5fe,0x3abe2e4b,0x3a292fe8,0x3a7ceea0,0x3aaeb638,0x3adfc82c,0x3a917da1,0x3b3eff68,0x3ae82c83,0x3ac65517,0x3a8c07d8,0x3a1478e1,0x3887b81e,0xb9df1e15,0xba4d3fa2,0xba66f2d7,0xba6c52b6,0xba77bc9c,0xba84d1ee,0xba8d4f34, -0xba9d83c2,0xba9e5a1a,0xbaa2c679,0xbaa7aaec,0xbab4c37d,0xbab1b4b3,0xbadf6033,0xba9cefa8,0xbabc90ea,0xbaae1889,0xba5887fb,0xba551ab7,0xba7ca202,0xba531836,0xba09e736,0x3894fb74,0x393a7274,0x3a2bd789,0x3a9ddf2a,0x3a9e500c,0x3ac53be4,0x3ac5c313,0x3ab33d50,0xb9b89a46,0xba2e1c86, -0xba28425e,0xba5e3764,0xba756d3a,0xba8a77f7,0xba9aa4b6,0xbab5a678,0xbab795c5,0xbac2b19e,0xbace7255,0xbad4ceff,0xbadaa6aa,0xbae0c9be,0xbadeb347,0xbadf039e,0xbadcc88a,0xbade1bd3,0xbad57d36,0xbae05611,0xbac3ea9e,0xba3cb9dd,0x3a077d53,0xbab877f2,0xb9df1018,0x3a757001,0x3a85df17, -0x3a897dbb,0x3a827622,0x3a933b9d,0x3a97510b,0x3aa43e37,0x39a80f5b,0xba107484,0x3ac6e6c7,0x3a0510f0,0xbafa2f4a,0x3ace965c,0x3912146a,0x3b1786a7,0x3abb3891,0x3ad417a5,0x3ad27034,0x3af27ef9,0x3af0f8da,0x3ac542f7,0x3aca5bca,0x3ad432ce,0x3b0ac3f2,0x3ae764e6,0x3ae39ab3,0x3ad9cd86, -0x3afc03c9,0x3b004da8,0x3af9b895,0x3ae5184e,0x3ac08e4e,0x3b07e390,0x37a4f88f,0xbab8cabf,0xbb3a1781,0x39ec9725,0xbabc063c,0xbb4ad25f,0xbb470050,0xbb4c50c9,0xbb4bdca0,0xbb4a2de2,0xbb45faa7,0xbb4fca26,0xbaa2ffe2,0x3a692729,0xbb3a618f,0xbac9b0dd,0xbb0920b3,0x3af6fb58,0x3abba400, -0x3ac9f90b,0x3aeccf51,0x3b29afe3,0x3b25c8a9,0x3add4a1f,0x3ae9e493,0x3b080d13,0x3b565d78,0x3b11cbcb,0x3b097bd4,0x3b0df628,0x3b4e25ab,0x3b62b079,0x3b5ab4e1,0x3b39cd14,0x3b29523d,0x3b0ad669,0xba9aa404,0x3a54190e,0x39c19311,0xb667191c,0xb9e3c84e,0xb9bdab61,0x39ae605c,0x39ef00c2, -0xba56b963,0x39fdf353,0x3a0ac8d9,0xba8f62c1,0x39912af7,0xb9cf58b7,0xba8730ed,0x3a39936b,0xb836ef0b,0x3b15857a,0x3b0fea2e,0x3b0b0851,0x3b1d5699,0x3b71fb0f,0x3b70a309,0x3b07a891,0x3b004a19,0x3b126114,0x3ba4a1e4,0x3b4b3bd4,0x3b471d02,0x3b2f75e2,0x3b8ae476,0x3b933b4e,0x3b872d9e, -0x3b481ca1,0x3b39deed,0x3aade6b9,0xb909f683,0xb77d927e,0xb9a90857,0xb9d20806,0xba7cfcc1,0xbb0004e7,0xbaf8b9f6,0xbabc7285,0xbb895af3,0xbb0d8440,0xbb147bec,0xbb4a150a,0xb9aa9894,0x38ee98a5,0xbaab093f,0x3976f599,0xbaca409a,0x3aab8bd2,0x3a2910f6,0x3a811da1,0x3b15ce97,0x3b996ebd, -0x3b94401c,0x3b148464,0x3b023bc7,0x3b5ae2ad,0x3bebe576,0x3b798c09,0x3b372527,0x3b574dac,0x3bd71541,0x3c036641,0x3bfbf8eb,0x3bc900df,0x3bac3f3b,0x3b6be3b3,0x3a98ba99,0x3af4b4bf,0xba22ff4f,0xb6892355,0xb931e827,0xbb131f82,0xbaa8a8c1,0xbac8cfff,0xbad7ba18,0xbb4515fb,0xbb392033, -0xbb964ffa,0xbad247fc,0xba7125dc,0xbb4c0725,0xba9721b9,0x3b8936fe,0x3bed7869,0x3c2936bf,0x3c0e99ab,0x3b96e8b7,0x3b824d21,0x3b4e93de,0x3b679bf5,0x3b21d69d,0x3adc2867,0x3ab08954,0x3b90e9f1,0x3bb32644,0x3b70d33b,0xb9dd8206,0xbb574c4e,0xbb925131,0xbb9973d4,0xbb877c08,0xbbb4be1c, -0xbbe15c31,0xbb9248d5,0xbb935ce9,0xb9de3148,0x39e7c587,0x3a46e5c1,0x39dbf819,0x39f7ca30,0x3a53a5ab,0x3a8f7d37,0x3b2928a5,0x3b6a0010,0x3b9384c8,0x3b8ee1da,0x3b6bf57f,0x3b854bbe,0xbac723d2,0xba0690ed,0xba5a18e7,0xbb3847d5,0xbb92be63,0xbbce3473,0xbb7ea815,0x3a9bd775,0x3b677a6c, -0x3b6d2294,0xba11164a,0xbbc49294,0xbbe2b833,0xbb61b8ed,0x3a86a21a,0x3b9fa28a,0x3be2dcf2,0x3bd286f5,0x3bb839d0,0x3b52e021,0x3a30ac10,0x39c83335,0x3a64bc2e,0x3a846be6,0x38750a1a,0xba875dec,0xb946f416,0xb965d385,0xb9d27a5a,0xb9e7091e,0xba84e9b4,0xbb2bbf30,0xbba29193,0xbb231410, -0x3b3b9997,0x3a888ca9,0xbb705a0f,0x3a84928a,0xbb900c39,0xba1462d2,0x3c560ad1,0x3c1c0656,0x3c031e83,0x3bec1f9b,0xbaa6ae63,0xbb2fac16,0x3b59754c,0x3c043833,0x3c081075,0x3b2ea9f1,0x3ab5a222,0xba4a2dbe,0xbb265c43,0xbb100531,0xba9a2171,0xbadfbf6b,0xba89fd72,0xba4dbbf1,0xbaea2498, -0xbaa5764b,0xba001398,0x39aad673,0x39355cac,0x38c58dcb,0x39858a6b,0x3916a785,0x3a496b1c,0xba738fed,0x3a3bbccb,0x3a0b5bef,0xbbcb550e,0xbb8815b9,0xbb861799,0x3be9c3b5,0x3bcfefe4,0x3b94e41a,0x3b71223e,0x3bf2f99a,0x3c0c1ee7,0x3be699b9,0x3b07a8ec,0xba1ac8f6,0xb9db43bb,0xbab209da, -0xba612113,0xb9733dd6,0x3aa1fae0,0x3b0ed728,0x3b410004,0x3b6e05ea,0x3b789825,0x3b356c06,0x3adeda2e,0x3b087695,0x3b00fd71,0x3a1cf1d5,0xb7c44eb1,0xb947955e,0xb8cedc87,0xb900aa61,0xb8f72d17,0xb98ae9be,0xb8641571,0xb8f810e0,0xba0004d1,0xba8e9c94,0xbb7d41e2,0xbbd06457,0x3af147e5, -0x3b39bc3f,0x3bb96e54,0x3bb51ffd,0x3b6e35c5,0x3addfdbc,0xb959eea8,0xba7bb94d,0xbaa9918d,0xba50fbbf,0x39e491c4,0x3a24c4ba,0x3a8b92eb,0x3ad7040a,0x3a696778,0x39d3e1ac,0x398a0a8e,0xb9f9ae88,0xb9b90164,0xb97c6646,0xb9d20a35,0x3a6bafcd,0x3aaa2b2a,0x3a507256,0x3a091a47,0x37ae7b6e, -0x383b96c6,0x3958dbb8,0x394ee942,0x396cd0a7,0x38f3df8e,0xba167702,0xb9a2bd9a,0x39b71530,0x3acd3cdd,0x3b5b1b6b,0xbb9be8ae,0xbb3096fd,0xba0c55d2,0xbaa5988a,0xba9ad6e6,0xba7aace8,0xb8126571,0x3ab01369,0x3b0e25cb,0x3b3da406,0x3b5f8103,0x3b813f8c,0x3b82753a,0x3b64b8f8,0x3b40262a, -0x3b0430b6,0x3a43f2e0,0xb91e16e1,0xba728d7b,0xbaf2beb7,0xbaf2b1fa,0xbaa0cd31,0xba10ddb3,0x3a0ea9d5,0x3a47d7bd,0x39e3b221,0xb972522c,0xba2885eb,0xb9f4451a,0xb9e55921,0xb9bd784a,0xba2fc4e8,0xba67ce4d,0xbaa8f0cb,0xbb0a7053,0xbb1e3c98,0x3a51df2a,0x3a5ceb9f,0x3a6d120a,0x3a7cd1ef, -0x3aa91a7f,0x3b041a35,0x3b2ce535,0x3b5a5db1,0x3b445f0a,0x3b36002a,0x3b24c308,0x3ae12ea6,0x3a7c4f5c,0x38cf2d58,0xb527700c,0xb93023d6,0xb9897a2b,0xb9277eb9,0x391e9c4a,0xb9565bc3,0xb9c0eb79,0xb836a244,0x393d7925,0x3a5f0466,0x3ab63a50,0x3b2a8b82,0x3b0ee77f,0x3b24f2de,0x3b02814c, -0x3ada3101,0x3a4b34fd,0x39b5cdb3,0x3a09709d,0x3a25dce2,0x39e76137,0x3a407fad,0x3aa6b4e0,0x3b3de59c,0x3b3cdbc6,0x3b360aba,0x3b2c5725,0x3b270887,0x3b1fc211,0x3b2091fa,0x3aef0530,0x3aaa79fb,0x3a59453e,0x39999b1e,0xb94c27ba,0xba52820a,0xba378596,0xba3750de,0xba3456a1,0xba4cdba7, -0xba644d7d,0xba526f44,0xbabab1bb,0xb9b17e94,0xb8af051e,0xb8b7e62b,0xb8b22fbd,0x3a13da3b,0x3a60319c,0x3a87ed31,0x3a73bc63,0x3ad7430b,0x3b070947,0x3b02633b,0x3b091ac9,0x3ae1b12f,0x3b01023c,0x3b2564ed,0x3994764a,0x3aa96dfb,0x3a6c9f28,0x3a7d0ee7,0x3a800abe,0x3a784f9d,0x3a6f5e07, -0x3a7ae7a6,0x3a3b22b3,0x3a08a7a8,0x3996e869,0x38dd5bd2,0xb88ce64f,0xb9a6cdbe,0xb981c515,0xb988e1b9,0xb9859df5,0xb95c17bb,0xb97ffdcc,0xb61de7a9,0xba36bb64,0xbac0e889,0xbb239b59,0xb858bed1,0xba919a8c,0xbb197c80,0xbb12f2e0,0xbb0629be,0xbae9403e,0xbae76ecd,0xbad79c48,0xbab715c2, -0xba051e76,0x3a38ec02,0xbab5dd71,0xba1b37f4,0x39098e4d,0xba3b3356,0x3a8ee6f4,0xba94558c,0xb9f1193f,0xba031595,0xb9863c2d,0xb9a41d52,0xb9f42560,0xba7bf1ec,0xba69c348,0xba53d98b,0xb98ec5ed,0xba18809b,0xba17e9f1,0xba224020,0xb9fb10dc,0xb9f35cd5,0xb9fae5ea,0xba1d9d35,0xba0b71ea, -0xba9a174c,0x3a89d422,0x3b0774dd,0x3b20084a,0x39c18eba,0x3ae9e55a,0x3b020f09,0x3b10c098,0x3b0a98fe,0x3acb078c,0x3b0fac85,0x3b172ab5,0x3af84561,0x3af681b2,0x39a09c9a,0x3b129929,0x3b16199e,0x3b063206,0xba2a16df,0xba5dbf1f,0xb98c80b6,0x39a4277c,0x3a187b39,0x394c9866,0xba9080b6, -0xba930dd2,0xba6a723a,0x39cb8fcd,0xba2bf4d7,0xba644335,0xba5110b3,0xb9307690,0x3956e28b,0x398362f3,0x3975118c,0xb931407f,0x38c071a4,0x3b13663b,0x38fa2b05,0x39dd8fa8,0x3827ea12,0x38c77a9a,0xba453038,0xba004c84,0xb98358a7,0xb9bd2f4f,0xb9c89dd8,0xba54adf7,0xbaa4f589,0xb99a6111, -0x39d9d7d2,0xb951f568,0xba56ea59,0x3a829973,0x39e946fb,0xba2829ae,0x3a0fa1e3,0x3a94dd2b,0x3ae0b62c,0x3a8f2456,0xbad50a24,0xbae084bd,0xbac3ec51,0x3abc1756,0xb96cfeda,0xb9486a8c,0xb9aa7fe3,0x3a002e12,0x3a3e548b,0x3a0723fd,0x39535af6,0xba21756d,0x39fd670d,0x3a685eef,0x388123e9, -0xb96279e7,0xba702931,0xb99ebc4d,0xbb1e00b3,0xba92eeb4,0xbb307038,0xbb63f644,0xbb2a90a0,0xbab2e091,0xbb524741,0x37c0a3fa,0x39cee10a,0xb9d12f61,0x382166eb,0xb9a6d6c6,0xba46abf8,0xbae2fd1d,0x3914dc8f,0x3af90bcc,0x3b7186de,0x3b385aa6,0xbaab51c4,0xbaf5b9f3,0xba6a8826,0x3b4434d3, -0xb92e3566,0xbabd3af9,0xba83f6dc,0x3aa2ff97,0x3b38cd47,0x3b45cd95,0x3b3641f3,0x3ad611a3,0x3b15d165,0x3b1dc568,0x3971efa2,0xb8dd64f3,0xba9049c4,0xba849243,0xbb24cc6c,0xba9dddc7,0xba75ec99,0xbac6c7fd,0xbb1994f3,0xbb27b99c,0xbb8e350b,0xbadafe63,0xba4a65d3,0xbb5b8f54,0xbb028222, -0x3be2ee15,0x3bad295e,0x3bb220fb,0x3b9ec811,0x3ae577c1,0xb96590f1,0xbabf567c,0xbaa82569,0xbb4a3a5d,0xbb833cea,0xbb8c55cb,0xba7bdae2,0x3aba71c3,0x3b0c3b83,0xbaf975a5,0xbba45a76,0xbc0b752f,0xbc045ca6,0xbc075ead,0xbbca3145,0xbb9ac10d,0xbbb34349,0xbb8b5aca,0xb8875a4c,0x3a7e498d, -0x3a1369c0,0x3a086fde,0x39deaa9a,0x3a541969,0x3a728b67,0x3b117386,0x3b38b4a9,0x3b8082d9,0x3b9fbf68,0x3b9aa4da,0x3bc0b1e0,0xba90bbda,0xbb2c0a21,0xbb8446cc,0xbb8148d5,0xbb86fa8c,0xbbc273f3,0xbb5fc707,0x3b05ccda,0x3b3f9ef8,0x3b3d1cac,0xb9785c43,0xbbac7fc3,0xbbd8ba52,0xbb859f47, -0xbace8cbb,0x3a9275fa,0x3b26d381,0x3b7eb6b1,0x3b3851ec,0x3b249797,0x3a9df94b,0x39a07d88,0x3a733173,0x397ad9ea,0xba01dff8,0xba58b538,0xb90f13cf,0xb991f860,0xb9bbb91a,0xba03f88d,0xba348686,0xbb0b810c,0xbb7faadf,0xbb2dac55,0x3b2b33ae,0xba60c359,0xbb0064c0,0x3b06c974,0xbb7889b3, -0xbaa181c0,0x3c0f370e,0x3ba06ed2,0x3b1c3c63,0x3aaf82d0,0xbbfadb52,0xbc0b9d46,0xbb1373a9,0x3aff6f4a,0x3b1e3b5b,0xbb16b229,0xbb488e14,0xbb61c54f,0xbb468dc9,0xbb31e989,0xbb4643d1,0xbb175f50,0xba7d82be,0xbaa94127,0xbaabf4ff,0xba866ffe,0xb9555f18,0x39b536e1,0x39098d67,0x38fdddf5, -0x3998ffd2,0x38d4798f,0x3a481af6,0xb9e580f5,0x3a8ddc6e,0x3a1a3e5f,0xbbad233a,0xbb5cc4d7,0xbb8a2bc6,0x3c11314b,0x3b6a2c08,0x39109a3f,0xbb999f1b,0x3a276091,0x3b8957e7,0x3bbb0bac,0x3b2961b4,0x39d8b6fb,0x3809323e,0xba97ea5a,0xba8fed95,0xba3f2d3e,0xb9ed5708,0xb9c59545,0xb8d914a7, -0x3a8b4c4a,0x3adcdf82,0x3b199129,0x3b35f482,0x3b02afc7,0x3acdd82c,0x39ad9414,0xb8aefaeb,0xb93ee761,0xb8c1c9e9,0xb92b5bbf,0xb926b0c9,0xb9916249,0xb8abfe09,0xb9f8b364,0xb9d3bdb1,0xbaeacb35,0xbbb99701,0xbc0a97ae,0x3bc348c7,0x3b729f36,0x3ad9e65f,0x3b02b6e9,0xb9c89bd8,0xbad1576b, -0xbb7cb269,0xbba23a31,0xbb8b8ed7,0xbb569463,0xbadd6e07,0xba89b634,0xb9caf7aa,0x3a0bc6fa,0x39e1fe74,0x39e50b34,0x3920f971,0x381ecf60,0xb9b688ac,0xb9be0a10,0x3a54bf56,0x3a732c8a,0x3abc8608,0x3a609614,0x39cd613e,0x3899a787,0x3917b5db,0x397f26a8,0x39a5e0c0,0x397b18ec,0x3993bba5, -0xb96e35e5,0xb8b3a756,0x3a6c0f7a,0x3b52b479,0x3ba3f7c0,0xba91a67a,0xbb02c807,0xbb0b0020,0xbb1c162c,0xbb5b7a1c,0xbb7fb234,0xbb6c4138,0xbb36b7ae,0xb9449d6b,0x3ab1d676,0x3b08c369,0x3b1edfd7,0x3b255d35,0x3b135761,0x3adf7d56,0x3a2d590b,0xba5b9560,0xbad4a991,0xbaf599b8,0xbace7118, -0xbad8c28b,0xba933226,0x38edade2,0x3a034b6b,0x39ef37ef,0x388e4ba5,0xba0e8a7a,0xba2f8309,0xba4680df,0xba0fdbf4,0xba17924f,0xba754a36,0xba8868b0,0xbac9ddfc,0xbaf1f9a7,0xbb1994eb,0x39f29b68,0xba3b2b93,0xbac966ef,0xba889272,0xba8397b6,0xb8933aff,0x3a03ac07,0x3a696a42,0x3a81c89a, -0x3a8cf473,0x3aab4627,0x3a58f17b,0x39d1b30f,0xb7faf5dd,0xb990e103,0xb9ea430f,0xba2a67f8,0xba1367fc,0xba6a9887,0xba3ebf43,0x3979e693,0x399fe48c,0x39d7a4ac,0x3a5af798,0x3adb9439,0x3b18f0b5,0x3b1b7e71,0x3ae07f1b,0x3b0c2f5e,0x3a8d2953,0x3a5b5e5b,0xb87f4dd3,0x39aa1381,0x3a3a3111, -0x3a8c84ad,0x39e7c566,0x3b55cdb0,0x3b1c46a9,0x3b0b32d9,0x3af25418,0x3ab5fdb4,0x3a8819cf,0x3a33e90b,0x3a073932,0x394556eb,0xb8d1f7c9,0xb9b8c01b,0xba184638,0xba3dce3a,0xba6bc915,0xba67cc84,0xba6e283f,0xba7abcef,0xba862cb6,0xba897eaf,0xbaa51e10,0xb9f6fb57,0xba16c115,0xb89f7d75, -0x39adaab3,0x3a224e5a,0x3a50534b,0x3a47e22c,0x3a901fb3,0x3acd4f1f,0x3ab4cd37,0x3ac25e9c,0x3af8fc4b,0x3aee097c,0x3b056f30,0x3b0d777b,0x3af8d022,0x3a552342,0xb8cd7484,0x36ac2c2c,0xb8dfa907,0xb9086b04,0xb964b6ed,0xb9a74ab3,0xb9e8fe1a,0xba0e344b,0xba25f6ce,0xba43793f,0xba5774d6, -0xba70506c,0xba87e88f,0xba840a16,0xba83f2b7,0xba81b87c,0xba818de6,0xba727a56,0xba90fbaf,0xb9685983,0x3a01ae5e,0x3a45a501,0x38850c61,0x3a812de6,0x3aa8ae4f,0x3aafb194,0x3aae90fd,0x3a9cd894,0x3ab8aff7,0x3abdadb7,0x3ac09006,0x3aaba035,0x3a1be021,0x3ac7cef5,0x3ac10ca1,0xba6b377b, -0x39b3acd3,0xbaa7cf3e,0x3a873406,0x39d96bbd,0x39f1a76e,0x3a035840,0x3a0571f3,0x39dd6020,0x3907afcb,0x39271799,0x3989744c,0x3a5ec311,0x39eb1aa0,0x39dc098f,0x39c3c6de,0x3a16de79,0x3a231776,0x3a284c76,0x3a007933,0x39c803ef,0x3a509fcf,0xbab13fe8,0xbaf2ba08,0xba89cbc5,0xba9b4887, -0xbb068a8d,0xbac1f7ee,0xbacde6f5,0xbadc81b6,0xbae384de,0xbae79dee,0xbae56e6e,0xbb04ab8c,0xbaf02ff1,0xba4ae819,0xbaa4d8cb,0xbb0147ba,0xbb029680,0x39b786e6,0x39f1fd04,0x39aed705,0x3a2507db,0x3a50e5a6,0x3a0d6365,0xb92d734f,0xb9245c29,0x396ea251,0x3ad4e559,0x39f91ce7,0x398d20a0, -0x39be8439,0x3a8f7b43,0x3ab7ca44,0x3ac56c20,0x3a93b5f8,0x3a9bd4df,0x3a1d13c9,0xba8aa920,0xb907d8cf,0xba24a474,0xba512b94,0xba8fb269,0xba9d783e,0xba1a409d,0xba380d02,0xbaeb0f9c,0xb9e73ac2,0xb93a8568,0xbad7742e,0xb9d51a30,0xba4f7c06,0xbadc4e02,0xb9f6057f,0xba93098f,0x3a900722, -0x3aa73317,0x3a77f5fe,0x3aafa64c,0x3abff7d4,0x3a6adade,0xb9de0c36,0xba3602fd,0xb98f847a,0x3b3cbfa4,0x3a4cc9c1,0x3a3f07be,0x39dac1c3,0x3ad9dc45,0x3afe5fbf,0x3b008cc6,0x3aa10b9f,0x3aa3dd3b,0x39c208e4,0xba70f903,0xba587775,0xba27c169,0xbab77d2e,0xbae5b526,0xbb0e3719,0xbb062761, -0xbad7401f,0xbb91e58e,0xbaf86535,0xbb0ca91a,0xbb5ddcc3,0xba128a74,0xb9707988,0xbae430db,0xba3a1db3,0xbb13b029,0x395d655b,0x393839f7,0xb820f67e,0x3a99c4ef,0x3afe8fe9,0x3a8f8d68,0xba6b90c2,0xbac361ef,0x390ce2c6,0x3b951d85,0x3a6792e0,0xba2a69c1,0xb9a47a65,0x3b12588c,0x3b7843f9, -0x3b897d69,0x3b5f7fcc,0x3b5bf58f,0x3b1c93ad,0x3a0edc0e,0x3a74951b,0xba88e0ef,0xba955d6a,0xba5809f0,0xbaee3af8,0xba45e1aa,0xba2ae838,0xba307516,0xbadbf1ba,0xbad37a8a,0xbb6c781d,0xba8b52f5,0xba73ceda,0xbb5aead7,0xbb0358ca,0x3b426fa1,0x3bb1964e,0x3c06a66f,0x3be770a3,0x3b957ae4, -0x3ac661f4,0xb9085ac8,0x3a6267d2,0xb8bcc8c4,0xba19dfb5,0xba359e88,0x3b42cc44,0x3bb1ee57,0x3bc9955d,0x3a64dbb3,0xbb2c527b,0xbb830c03,0xbbb737d0,0xbbb60b27,0xbbcef9d7,0xbbdc2fd0,0xbb8edd2d,0xbb81667c,0x3a2b147b,0x3a7e8563,0x3990479e,0x3a05a7f4,0x3999a2b6,0x3a127390,0x3a1a1b37, -0x3ad97c2e,0x3aecef7e,0x3b5229a6,0x3b75a9c5,0x3b719fc0,0x3b4d4e5e,0xbb448583,0xba8bc7bc,0xb9c4d0b6,0xbb366021,0xbb788b19,0xbbe67ff3,0xbba9d155,0x3a4255c4,0x3b1ccbb1,0x3b5e42e2,0x3aa0b9b6,0xbba43e0c,0xbbea08c4,0xbb98f839,0xbacc8a48,0x3ab6f458,0x3b5b3ee6,0x3b7127a5,0x3b67d2af, -0x3ace7361,0xb83d8968,0xb9870011,0x39c0822e,0x39a3c23d,0xb9a1247c,0xba0df2ca,0xb8c6cc35,0xb9845df2,0xb96be5ae,0xb9cf0e30,0xb9e992aa,0xbaa46439,0xbb533fdf,0xbaea87d5,0x3af16655,0xba36de83,0xbabe398d,0x3b67b13e,0xbb1f743d,0xba00fe67,0x3bfebd07,0x3b9c1aaa,0x3b586618,0x3b5ead7e, -0xbb43fa2f,0xbb8476b6,0xb96c2e1c,0x3bb10f1e,0x3bcb6562,0x3aa09d4e,0xb92fe7e0,0xbaca2768,0xbb03a5f4,0xbb0d9665,0xba93bb70,0xbadf55be,0xbaa128f3,0xba3e432e,0xbad2412d,0xba538234,0xb8b47da9,0x39927e54,0x38b7fe93,0x3907fe4d,0x394b5756,0x38e00e30,0x39f0053a,0xb874c0c1,0x3a3392b7, -0x3a1ec504,0xbbb97a42,0xbb311de5,0xbb9fd0de,0x3c0eafe2,0x3af630d6,0xbb42dca4,0xbbd6d944,0xbae8aac2,0x3b45c703,0x3c04ab75,0x3b203b8e,0xba15c42f,0xbaea4edc,0xbb151a40,0xbafe4ee9,0xba92a879,0xba49d225,0xb9b8d387,0x3a3267c8,0x3ae915ab,0x3b38af26,0x3b2980c8,0x3ae5ab7a,0x3af25919, -0x3aac7fe1,0x38fb8398,0xb928a101,0xb8b6e9a8,0xb9038369,0xb919ee93,0xb8f925f5,0xb9547890,0xb8852d55,0xb9803988,0xb9a10aa9,0xbad2b10b,0xbbedcc5c,0xbc193b0f,0x3b8623b7,0x3b048473,0x3aaa74ad,0x3a8a74fb,0x3945f557,0xbacfedd0,0xbb6bc54e,0xbb888462,0xbb86ffc4,0xbb6055e2,0xbb348a7d, -0xbb030b82,0xba947ded,0x37e1191a,0x39968123,0x3a105ddc,0x3a5113b8,0x39764b49,0x39a92515,0x39b756d2,0x39d05403,0x3ac38386,0x3adddca2,0x3a6b837c,0x39e80dc5,0x383e5272,0x395b5d8b,0x39821158,0x39605391,0x39442302,0x3971bbcb,0xb9a41328,0xb9df9ed0,0x3a0bb880,0x3b316b9a,0x3b9e5592, -0xbb65db45,0xbb2e9c6f,0xba60e7e1,0xbadaffd1,0xbb060f72,0xbb16c939,0xbad46f0c,0xba77d3fd,0x3a5dd438,0x3aebc8f1,0x3b0edb82,0x3b19c941,0x3b0ca33e,0x3ae2ef03,0x3aa03505,0x3a00ee4b,0xb9b26342,0xba6a28df,0xba8c5887,0xbaba7aa0,0xbac869a6,0xba82425f,0xba0eaba4,0x398a67a9,0x39ca5f57, -0xb8ab0bb0,0xba0d25fb,0xba3763fb,0xb9e53398,0xb9e77a8d,0xb9f1c7de,0xba6e1696,0xba948f7d,0xbaeab8b3,0xbb20376e,0xbb414f68,0xba944f3e,0xba9a1434,0xba8ec2b8,0xba915728,0xba6486e9,0xb839c820,0x3a214de7,0x3a9ee1d6,0x3aa719c2,0x3abc5dde,0x3adbc843,0x3abef9bd,0x3aa5039d,0x3a76ed39, -0x3a34ade6,0x39e18464,0x39820c02,0x389499e7,0x38f0c09b,0xba0ebe75,0xb9ef8dc1,0x3928c9fa,0x3a1ba082,0x3a81eb78,0x3ab9deb0,0x3b104c3d,0x3ae98671,0x3ae2923f,0x3a9b8d25,0x3a6792a6,0x386f0918,0xb9fea515,0xb9e3b520,0xba01df97,0xba314a28,0xba419c36,0x3aea72a3,0x3b1f3225,0x3b219888, -0x3b1311af,0x3b062c9a,0x3afe3a40,0x3aee0370,0x3ae86b37,0x3ac2eaf3,0x3a9ea4da,0x3a708cd2,0x3a1a0042,0x397d8544,0xb9644d8f,0xb92949bf,0xb91ad1f6,0xb8f4e98c,0xb941fd46,0xb8e8d18f,0xb96e0a77,0xba69eae4,0x38414925,0x390d6157,0x39f02c19,0x39eee170,0x3a8579cd,0x3a9faa2a,0x3a9c6717, -0x3a8f9d60,0x3acdde30,0x3aff9d1d,0x3af5f38f,0x3afb8368,0x3ae096b6,0x3aeae641,0x3b0fe420,0xb9030bdd,0x3a854f0a,0x3a4b9223,0x3a519b1b,0x3a5a98e9,0x3a492e21,0x3a3af9e4,0x3a350536,0x3a198ea0,0x3a014b27,0x39c70203,0x3998e527,0x395f8f9e,0x38b17b3c,0x390a6efa,0x38ed533c,0x38ee2b3f, -0x39016ec4,0x38ae82eb,0x39bef1ca,0xba4a277e,0xba9da7f0,0xba9476ab,0xb97d508c,0xba6ad30d,0xba49410d,0xba58fbb0,0xba4129fd,0xba1861fe,0xba330ae7,0xba2df0c3,0xba11ec1f,0xba113b0e,0x392a3373,0xb98572f8,0xba062a88,0x39799521,0x3a38346f,0x3af4d202,0x3a2512fb,0x3a3cc643,0x3a591b03, -0x3a64c457,0x3a980b2b,0x3a90e53d,0x3a2a7a1d,0x3a304fd6,0x3a3bbe4a,0x3a9edbb4,0x3a5ac8ed,0x3a584b39,0x3a5b93aa,0x3a751948,0x3a79569f,0x3a813aae,0x3a5c42cc,0x3a3bfb63,0x3a063aea,0x3ae5c8be,0x3ac7739b,0xb8c6877c,0x3abd249c,0x3ab1a9ae,0xb99a4191,0xb8ba5371,0xb8dd2116,0xb9eb3de2, -0x38ef8f63,0x3966057f,0xb8e8a136,0x3ad0b4a1,0x3ad9430a,0xb91f4b6e,0x3adadcd3,0x3a82782a,0x3a967045,0x39eaf3ad,0x3a79a14c,0x3a976645,0x3b12afa2,0x3b10eff8,0x3a86e721,0x3a739475,0x3a8afd0c,0x3b12f73b,0x3a82a149,0x3a35c615,0x3a664cdb,0x3ab68c09,0x3aec9bbe,0x3b05f677,0x3af52541, -0x3ab014ac,0x3ac8a305,0x3a97180e,0x3a384131,0x3a98e848,0x396326dd,0x3917005a,0x3998212a,0x39d03aab,0x3a4a6820,0x39a14363,0x3a6696fd,0x3a006f4c,0xb9f0e106,0x3a2ace2e,0x3a357f63,0x39833f70,0x39f243d1,0x3acb7551,0x3aef0289,0x3a4b1264,0x3ae6e8cc,0x3ae3ce35,0x3b74c5a2,0x3b766fa0, -0x3ab10885,0x3a923df0,0x3a8b4201,0x3b740707,0x3adf4a9c,0x3adb445f,0x3ae6d78b,0x3b1f8387,0x3b307c86,0x3b36eb7f,0x3b0915f2,0x3aa66dda,0x3ab247fa,0x3a8afcbe,0x398e39f7,0x39bd3a54,0xba4c577c,0xba2a3c4b,0xbabeaf38,0xba99457a,0xbae2787c,0xbb420227,0xbae3b65a,0xba7c3a06,0xbb285bf7, -0x39b83bfa,0x3a4f204f,0xb9811230,0x3a4a6f72,0x39023b20,0x3a2edf70,0xba1385cb,0x3a318e8d,0x3abb2e13,0x3bb0dc52,0x3bbf0347,0x3b15dc74,0x3abf5df1,0x3b1234bb,0x3bb89432,0x3b03b33c,0x39d4d45d,0x3a8da567,0x3b4fe456,0x3ba19cbf,0x3bb8e3bf,0x3ba0e474,0x3b5bfb32,0x3b4711ab,0x3ae1aa4e, -0x39799125,0xb9c2d727,0xbab9c998,0xba95ca0e,0xbae68083,0xba064024,0xb9eac82a,0xba41b732,0xba8adac4,0xbaae7f09,0xbb4ca674,0xba683df8,0xb9482c45,0xbb445785,0xba8be272,0x3bdc8f2e,0x3beb1a87,0x3c04e928,0x3c05cec7,0x3bc8f093,0x3b523aaf,0x3af5b957,0x3b5aebaf,0x3a22b893,0xba864c9a, -0xbaeb8f18,0x3aae1489,0x3b825688,0x3bac4616,0x3a4eb54f,0xbb294423,0xbbace9f1,0xbbb72a6f,0xbbb0d72b,0xbb81ac40,0xbb84de2c,0xbb823cb4,0xbb35fec2,0x3a9ec4b0,0x3ab16f1f,0x39452ca0,0x39f3e2ed,0x39549560,0x3a10f186,0x39b22fc4,0x3aac3a78,0x3abb4937,0x3b393167,0x3b8de42c,0x3ba14580, -0x3bc28341,0xba6f9024,0xba107a6e,0xbb12b871,0xbb2d1b92,0xbb55ab99,0xbb9e1924,0xbb362d72,0x3b1bf7bc,0x3b4784b1,0x3b7601f6,0x3b16dad7,0xbb77e7a1,0xbbc952fd,0xbb741f11,0xba898dc5,0x3b16de19,0x3bae40ce,0x3bb411bb,0x3b7b5812,0x3b076c15,0x39cfceef,0xb8314d17,0x3a6a1e5c,0x3860e400, -0xb9ef7c97,0xb9ae2890,0xb8e659c0,0xb95906aa,0xb95c09c8,0xb9990b19,0xb9d4eb18,0xba3f47ba,0xbb16f041,0xbaaedf44,0x3b163638,0xb9fedc6b,0x39207e41,0x3bab396c,0xba060a13,0x3b01e4ba,0x3c411034,0x3c2d883f,0x3c189f03,0x3c07cb29,0xbabb260f,0xbb904c8d,0xbaba0142,0x3bb52448,0x3bfc5b7f, -0x3b79f022,0x3a9ba003,0xba760aa9,0xbaeafacf,0xbb0162ea,0xbadc55ff,0xb9eb7d39,0x39c77ca2,0xb91817bd,0xba2bc967,0xb982dfe3,0x391f13c5,0x3957c43b,0x389c0380,0x3903c885,0x392142ce,0x38fbf637,0x399d77cd,0x3921d5fe,0x3a5e3560,0x3a086c5c,0xbb854aba,0xbae5cfe9,0xbb8c101a,0x3c121fb0, -0x3b298780,0x39a44932,0xbab8e4e4,0x3ada883e,0x3bb3b02e,0x3c145f0e,0x3baae31f,0x3b2d235c,0x3a362bb0,0x38e8ec24,0xb9176e7d,0xb673ec45,0x39749250,0x3a2ef928,0x3ab2ceef,0x3b186250,0x3b2aa58b,0x3b3d6796,0x3b273758,0x3b0a17c5,0x3aa07e91,0x38862152,0xb8fc5878,0xb8f51606,0xb8ccadc6, -0xb90fcf9f,0xb8f8b145,0xb923f9a8,0xb89faa29,0xb9998500,0xb9540e4c,0xbacbfedf,0xbc03ef97,0xbc22bf70,0x3befb5ca,0x3be3d91b,0x3bcf9b99,0x3bc43470,0x3b917046,0x3b52ffea,0x3a25cb34,0xbabbd13f,0xbae6daee,0xba92989c,0x3a09e3e3,0x3a0329f1,0x3a6e3250,0x3afe453a,0x3ab68551,0x3a9dd92b, -0x3a85b8de,0x3a5f088e,0x3a71192e,0x3ab5526c,0x3b099fa7,0x3b19ff91,0x3af7300a,0x3a80b935,0x39d90f1b,0x3905d671,0x392dad83,0x396f5868,0x3963845c,0x3914450b,0x394de6c7,0x3875a6d5,0xb8360ab8,0x3aa7d5a6,0x3b746ec3,0x3c04b40f,0xbab760ec,0x39a82cf3,0x3a7c7233,0x38cc4c56,0xba80e9b4, -0xbaeffe64,0xbac4aa15,0xb9db4934,0x3a20956c,0x3a8b93e5,0x3a91cf0d,0x3ae7e661,0x3b0e8628,0x3b110ef7,0x3af83e19,0x3a9132b4,0xb987883f,0xba56b330,0xba9001cd,0xbaa13f53,0xba9d829d,0xba0f13cb,0x3a1a2a1b,0x3a47bb1f,0x39d1fea3,0xb924a753,0xb9f3e16a,0xba0ec366,0xb9ff91d8,0xb99c648a, -0xb9a0667e,0xba24caea,0xba5fe41a,0xba8a815b,0xbabd6be5,0xba9781b2,0xb84aba98,0xba7e7e23,0xbab77996,0xba7cd990,0xba568e4a,0x39afa0d9,0x3a8b550d,0x3ae1ab28,0x3b010570,0x3b1b93de,0x3b328b66,0x3b16b472,0x3af0a247,0x3ab42c24,0x3a85a8ea,0x3a3fc2dc,0x39eb3a22,0x39e9b9b8,0x39690772, -0x3916f114,0x3a42bb1b,0x3a5dfebe,0x3a89159d,0x3a9f749f,0x3ad352e0,0x3b00b735,0x3addf7f0,0x3aae3e2f,0x3ab68d9d,0x3a2d4026,0x39a58df4,0xb9a8d4cc,0xb87a05eb,0x392575bb,0x3986bf93,0xb812b68e,0x3b224a47,0x3b3566a0,0x3b2ccc2b,0x3b2b9044,0x3b1db577,0x3b1ac888,0x3b165278,0x3b1be741, -0x3af7a881,0x3ab5226e,0x3a79aacc,0x3a12886a,0x39981aa7,0xb644b677,0x382db72a,0x38341140,0x3779dce1,0xb7bef678,0xb8b88e70,0xb8d75610,0x39188e18,0x3a30f63c,0x3aacc417,0x3ac20080,0x3af527ee,0x3b248da1,0x3b1daed4,0x3b2a5724,0x3b2c3634,0x3b230faa,0x3b1a8ac3,0x3b1a9c6c,0x3b163513, -0x3b0fd235,0x3b1e6980,0x3b1c0e51,0x3adf4131,0x3a98c467,0x3a9863bd,0x3a9f036d,0x3aa58879,0x3aa1b95d,0x3a9c5f8c,0x3a9ea8e3,0x3a871710,0x3a75f333,0x3a549c0a,0x3a3b5fcd,0x3a1a2d4f,0x39d551d4,0x39eba353,0x39e8d550,0x39ec0f4f,0x39f3adea,0x39f5eec3,0x39daa379,0x3a878da2,0x3a8c4d64, -0x3896172d,0x3acb217f,0x3ace7cf2,0x3a05cb7d,0x3a0523ad,0x3a0aff80,0x39fb5b2d,0x3a25afee,0x3a30d956,0x3a33d389,0x3ac98a86,0x3ae2603d,0x3a16c2c5,0x3ace91dc,0x3a6794f5,0xba761eff,0xbaa05913,0xba438b20,0xba274b43,0xba3ed67e,0xba1d43c1,0xba4696c6,0xba6ff0d0,0xbaa17b55,0xba9e996c, -0xba90af2d,0xba0356d6,0xba69af69,0xba6ece35,0xba72f2ea,0xba588f9c,0xba4d8e59,0xba346e4f,0xba5a30f2,0xba451f31,0xba70f066,0xbaa51cc8,0xba07c149,0x3ad891cb,0xbad6c63e,0xba66102e,0x3a9663ef,0x3a87e20b,0x3a79c011,0x3a3c7089,0x3a5f0c47,0x3a618588,0x3a00df09,0xba2c3027,0xbabc3c3c, -0x3aaaa569,0xba011abc,0xb930bde6,0xba8c5386,0xba3a87c3,0xba46d808,0xb9e07b31,0xba1b6341,0xba816d8b,0xbae5e2cb,0xbaf42760,0xbac4af81,0xb8990c07,0xba9c3811,0xbac2178a,0xbaba1c9f,0xba88e312,0xba3e781d,0xb9bfa47a,0xba0a559f,0xb9e03692,0xba496d1f,0x39b1f96c,0xba31d60d,0xba4e31b4, -0xba863497,0xba9084aa,0xbabb3de1,0xbaa6e84d,0xbac3d257,0xbafae778,0xba89cec9,0xba6a37c3,0xbade7f6a,0xba49822a,0xba0441ab,0xbab27c35,0xbaae13e3,0xba6bd73a,0x37cb3dbc,0xb8f54dd2,0xb71a4e1e,0x39d41937,0xb81a030f,0xba7b20f6,0xbb209601,0xbb3a64c5,0xbb204de7,0x3a3373da,0xbaa4914a, -0xbaa82bff,0xbac6a323,0xba63a301,0xba1c4276,0xb9299235,0xba0bc5d5,0xba315e64,0xb9d2d2e9,0xba3fc682,0xba81685f,0xb9ff2236,0xbb03162f,0xbaea3a93,0xbafce60b,0xbadbdc4a,0xbaee3c7b,0xbb5b2b76,0xbad775ce,0xbabf7b56,0xbb3fd7f4,0xb9d52def,0xb94890c7,0xbab33208,0xba82e357,0xbadb0d2b, -0xba5322b9,0xba4e5577,0xba3d9152,0x39abae62,0x3a06a738,0xba1f8383,0xbb43a867,0xbb807aed,0xbb226888,0x3aefb692,0xbaca2963,0xbb5dbb3f,0xbb5c7bfb,0xbaf95c63,0xb99b0cb8,0x3a771deb,0x3a6abebc,0x3a81c2f2,0x3a8a5061,0x3a1d31d4,0xb93f39f8,0xba53d487,0xbaf8fd97,0xba9c0ea0,0xba9eefed, -0xb9915cb0,0xb949bc25,0xb97cc123,0xba146eb4,0xba50b7a3,0xbb195ca0,0xba2c09ef,0xba2a7306,0xbb464471,0xbb1aeb6d,0x3b5b02ee,0x3b680787,0x3baf18b4,0x3baabdc6,0x3b85d369,0xba49de3c,0xbb46440c,0xbaf14001,0xbb4019da,0xbb58f576,0xbb562024,0x3a169775,0x3b8806f4,0x3be28307,0x3ad61dd9, -0xbb0c27d9,0xbb8f77a6,0xbbd2523c,0xbbe2e0b0,0xbbc81b1d,0xbba80720,0xbb852afd,0xbb2f1f87,0x3aa876c2,0x3a992b44,0x382fd825,0x39cc994d,0x386a7bb4,0x39aa29ba,0x391eb0a1,0x3a44dc9d,0x3a45c761,0x3af76839,0x3b4fb57e,0x3b73c844,0x3b557d35,0xbb2f8c48,0xbab28a23,0xbaa312a0,0xbb4ca65e, -0xbb61e8fc,0xbbe8cef5,0xbbbaf024,0x39f19c3d,0x3a9e0328,0x3b33f17a,0x3b2e68f6,0xbb6fe7e3,0xbbddf5aa,0xbbb73974,0xbb6b723c,0xbab9b753,0x396158c5,0x3aacbcb4,0x3a9a5110,0x3970ed5c,0xb99afccc,0xba0deb98,0x398c070b,0xb99c58a5,0xb9fe2d0f,0xb936e65d,0xb8e71359,0xb8f16fe0,0xb9018aaf, -0xb92466ac,0xb9913c5b,0xb99d3d39,0xbacdc5bb,0xbaa79695,0x3a892661,0xbaeacc2e,0x3a963f22,0x3bafc06f,0xba0b57ea,0xb9bb49dc,0x3b3b395c,0x3acb2a3b,0x3927c245,0x39b13340,0xbb9a0e57,0xbbbc461c,0xbb852785,0x3acf9ab2,0x3b4d99e6,0xb769cf6c,0xbb00f4be,0xbb309218,0xbaeb0c31,0xbb0ae477, -0xbac07733,0xba95bbd0,0xba23e4a7,0xb9d67959,0xba6f1bf8,0xb9647bb9,0x39425a4e,0x390dfc4f,0x388d721a,0x38c2dc8b,0x38b34743,0x38caa464,0x3925f715,0x390b3350,0x3a190101,0x39a3bd37,0xbb68ce28,0xba919b4d,0xbb9237a5,0x3bca9dc7,0xbb808624,0xbc142cf9,0xbc5e749f,0xbc19500e,0xbb23bfef, -0x3beb066c,0x3b5e595c,0x3a4b541c,0xbb1a12b8,0xbb245c85,0xbb302821,0xbb0b866f,0xbb2a0dfe,0xbb1fb9db,0xbabb44e3,0xb88c3507,0x3ab3b4c7,0x3b1209ed,0x3b104b5b,0x3ad6534e,0x3a25632a,0xb93e6663,0xb95230f9,0xb8a025b2,0xb8d8bbbb,0xb8e9367e,0xb8b2cbff,0xb8f1b70f,0xb897f305,0xb9334921, -0xb90f2df9,0xbaf3f132,0xbc0b927b,0xbc22bbcd,0x3bf96f71,0x3b56e1b0,0xbac93c4f,0xbb1a8cfe,0xbb291384,0xbb7445e7,0xbbb49946,0xbbcc2fc1,0xbbc07024,0xbba551b2,0xbb96a34b,0xbb69ee19,0xbb23319f,0xba7df57f,0xb76b08cb,0x3a38b48e,0x3a80d414,0x3a6cdc82,0x3a6f07f8,0x3a8a08fa,0x3ae005d0, -0x3b064105,0x3af15158,0x3a705076,0x39a8c72f,0x38bd5f11,0x39561a8e,0x39485ebd,0x39319fbe,0x38f7ef4d,0x39540cf7,0x385e91c4,0xb930ff7d,0x3a8fceee,0x3b726c37,0x3bde7c87,0xba729cdd,0xbae92a38,0xbaac5883,0xbae232c1,0xbb20c191,0xbb47ebb1,0xbb35adb7,0xbb36344d,0xb9c5893f,0x3a2efae6, -0x3a663fd5,0x3a2cc41e,0x3998db03,0xb7fd0e7a,0xb9c73aae,0xba626974,0xbab50f40,0xbacadaa9,0xbaab6c69,0xba7010b3,0xba71cb97,0xba156cfa,0x37620254,0x395be9b1,0x3908ddca,0xb9a131ff,0xba0634e1,0xb9f190b6,0xb9b3a1a2,0xb991e227,0xb9a9938f,0xba49aa42,0xba7e6d74,0xbad35150,0xbaff425c, -0xbb20652a,0xbaf3811d,0xbb1b789d,0xbb269b1e,0xbb1e58f3,0xbb1b2119,0xbad40139,0xba9231a9,0xba4f1eb1,0xb9a3f8d9,0x395efec8,0x3a6f2cc7,0x3a9c5c44,0x3ac1c675,0x3add4c35,0x3aa7f4e5,0x3a779104,0x3a248e62,0x39a64a23,0xb808d65e,0xba106dff,0x388f0393,0x3a20c9dd,0x3a89080b,0x3a915bda, -0x3abb7d84,0x3acbe916,0x3ab6669e,0x3a5fe9af,0x3a557485,0x3997faf2,0xb8bdc736,0xba420dd7,0xba44bb6f,0xba5f7d31,0xba5be5b9,0xbab4c48a,0x3b280917,0x3ad37552,0x3acf8993,0x3ab1d50f,0x3a92aa40,0x3a828747,0x3a63f14c,0x3a4ef4d9,0x3a5ea432,0x3a57d236,0x3a4392ac,0x3a32b81b,0x3a1ae99f, -0x39f5ed85,0x39ed7f6d,0x39f7f435,0x39fe4d4a,0x39ef1001,0x3a195682,0x39b57d7a,0x39a9dcc0,0x3a1cbb1c,0x3a3b2132,0x3aa376a9,0x3ab6e31a,0x3adc2bae,0x3ad8432f,0x3acba622,0x3ad588ab,0x3ac9ad60,0x3ad693ad,0x3ae00d8b,0x3ad79e33,0x3ae4db5a,0x3adfab7e,0x3ad07220,0x39a4bf60,0x39fd78d7, -0x3a19346d,0x3a0d242c,0x3a1673e8,0x3a01723b,0x39e09696,0x39b28f29,0x39c2c04d,0x39cce465,0x39d7af78,0x39e496c8,0x39ed8baa,0x39efded0,0x39f2e8d6,0x39e92abc,0x39e5eaff,0x39d81ca0,0x39d28708,0x39f9e99c,0x38272e17,0x39a0c7f5,0x3a9c15bb,0x3987c7ef,0x3a0e64fa,0x3adcf281,0x3aca4946, -0x3ac48594,0x3abb247a,0x3ab44d24,0x3aad0634,0x3aa5074d,0x3a153702,0x3986f9c2,0x3ad3f46f,0x3a3c879a,0x39b6f41f,0x3a8bae88,0x3a6cb257,0x3ac16d31,0x3a81ea03,0x3a95de71,0x3a86fc48,0x3abc6a40,0x3abc0ce3,0x3a8ec374,0x3a8cde5a,0x3a91cc4d,0x3ad00933,0x3a9c128e,0x3a992a99,0x3a9c8f8a, -0x3aa5f737,0x3aa9ce43,0x3ab76963,0x3aa25e61,0x3a863abb,0x3aa643a2,0x3a4a79ed,0xb9746980,0xbaff5a21,0x3a5900c1,0xb9bb71de,0xbb05b7ab,0xbb04143a,0xbb0173b4,0xbb0471f7,0xbaea2a65,0xbae5f649,0xbb00da1d,0xb7eae59f,0x3aa42cbf,0xbb03c176,0xb97f4bd1,0xba5ad111,0x3ace8d2e,0x3a67bc0e, -0x3a873109,0x3a7002c9,0x3b0e48ed,0x3b17d4a8,0x3ac0262e,0x3aaedd6d,0x3ac37a03,0x3b2bea50,0x3ab9a315,0x3a8e437e,0x3aa21e0a,0x3ad1ee75,0x3b0256d9,0x3b1fe0c3,0x3b0aa6fd,0x3ae8be6a,0x3ad2b425,0xba062996,0x3a0191e6,0x3a4e333e,0xb99e0fbf,0xba08f089,0x39a796a7,0x39574cec,0x39ca9e4b, -0xb9943a57,0x3a5c3f83,0x3a51e072,0xb9f3b06b,0x3a226731,0x3908dfd3,0xb9a077d3,0x3a2c446a,0x3a382f9f,0x3b04eae1,0x3abc3046,0x3ae61ce5,0x3aad103b,0x3b63ec92,0x3b735460,0x3b07ed39,0x3add71b8,0x3ad7ab72,0x3b86bf74,0x3b088918,0x3b034cf1,0x3b05662f,0x3b2a0e97,0x3b3c386d,0x3b5f4177, -0x3b223a50,0x3b047602,0x3a90513d,0x397b1f31,0xb9007525,0x39b73a98,0xba9aa01f,0xbab953ae,0xba6f5519,0xbac58bbe,0xba8ea579,0xbb20f5cb,0xba924a08,0xba88e95a,0xbb06fd1b,0x38bb4e1a,0x39f0060f,0xba50bc9c,0x39e601e2,0xb9e0a90b,0x3a93337c,0x3927e9da,0x395cf381,0x38c40188,0x3b89827f, -0x3ba7d3e5,0x3b38598f,0x3af72a41,0x3b35c068,0x3bc2f579,0x3b25bad8,0x3a4a77d0,0x3a945b3b,0x3b338ca4,0x3b93a2b4,0x3bc100f1,0x3ba13687,0x3b76ee63,0x3b288557,0x3a0b64eb,0x397192aa,0xba27ebd0,0xbaca5b6c,0xba86967d,0xba539ca1,0xb90103cd,0xb94c16f1,0xb9029965,0xb9a1a4c9,0xb9d9e6ec, -0xbae9ff37,0xb9c4e4d0,0xb8b6cae1,0xbb26dcad,0xba5ea1fa,0x3b928eb3,0x3bd749db,0x3c121bdf,0x3c175397,0x3c041b92,0x3b856d35,0x3b1b4b2f,0x3b90aaf5,0x3aed2ad0,0x39837444,0xb99816af,0x3b29483c,0x3bb3d5f3,0x3bee81e6,0x3b3cbab7,0xba13bacc,0xbb1527df,0xbb70f9ff,0xbb5b8516,0xbb47a1e0, -0xbb860a14,0xbb29fd22,0xbabc9b23,0x3adcd548,0x3a92d78b,0xb75841e7,0x3992a37d,0x38667386,0x395bedeb,0x38c3a156,0x39d93bdb,0x3a03e463,0x3abfa189,0x3b3f9c5c,0x3b768942,0x3b8a9cc3,0xbaac7403,0x3a40dc30,0xba49b6c9,0xbb22c529,0xbb736ea2,0xbbbd9c0d,0xbb9409b4,0x39e8a48a,0x3aa1d076, -0x3b3a9aea,0x3b57d269,0xbb5ecb3c,0xbbdb0e00,0xbba4c879,0xbaf5d0a6,0x3aed92e5,0x3bb07307,0x3b9e6916,0x3b5c868e,0x3a4a5d1c,0xba3117bc,0xba0695fc,0x3a0daa45,0xb97535db,0xb9c5043a,0xb8ce4bc7,0xb8b945a8,0xb8a98556,0xb8c00598,0xb89fd166,0xb9563408,0xb8fbc8f2,0xba824087,0xba18830f, -0x3a9e9f69,0xb9fb2d91,0x3ae8541b,0x3bd19b9b,0x3a8cfb17,0x3b217c14,0x3c1ec06d,0x3c36f4a6,0x3c352c5d,0x3c2537e6,0x3b14e2aa,0xbae2be3a,0xbb0e640b,0x3bc0f95e,0x3c170c5b,0x3be5b619,0x3b4c1a72,0xb4d94794,0xbab1af05,0xbadf2afd,0xba16ab8d,0x3a3b5cf5,0x3a78c418,0x3a1d08e5,0xb9c233c9, -0x393b19e9,0x392250e4,0x38b854f0,0x3847c505,0x38959558,0x386722e5,0x387960fa,0x38c61be7,0x38a860d7,0x39e21365,0x391d881d,0xbb397b0c,0xba01a834,0xbb947ed8,0x3b6ff835,0xbafaf199,0xbb3e9caa,0xbafce7d6,0xbaaef9b1,0x3b233e27,0x3c0b1caf,0x3bb42357,0x3b463deb,0xba5ac90e,0xba533c64, -0xbab18747,0xbaa56a33,0xba6c3f72,0x389ed7f1,0x3aaad3dc,0x3b1110e3,0x3b284bac,0x3b29009d,0x3af72ab0,0x3adab3cf,0x39f87768,0xb93ea3c7,0xb937050f,0xb8422edc,0xb896ab04,0xb8aace58,0xb8845662,0xb8670826,0xb878d361,0xb8afc86a,0xb90a5efc,0xbabedaae,0xbc09fb17,0xbc17430a,0x3bf779b0, -0x3bfa7b43,0x3bd8c375,0x3ba2e99a,0x3b9bff72,0x3b699232,0x3ac33567,0xba25120c,0xbad8dfef,0xbab45460,0xb966050a,0xb9badc5a,0x390dc832,0x3ab2f0d4,0x3a92ab3b,0x3a8eb0a5,0x3a9a39fe,0x3a825aba,0x3ac3bfc2,0x3b12616e,0x3b2a51c1,0x3b3f793c,0x3aee1277,0x3a5a1111,0x396b5a49,0x3876df4a, -0x390b5733,0x3917d638,0x38e7ec28,0x388d794d,0x38a933b4,0x38fb9ff6,0xb89b154d,0x3ab5a452,0x3b55c1ef,0x3c11386c,0xbb054d60,0x3a25eace,0x3aed64b8,0x3a5b655e,0x391c5b44,0xba1fb56f,0xb99c14aa,0x39ed53a6,0x39de3d08,0x39230c8a,0xb96b92c1,0x39adf9e9,0x3a275e49,0x3a35f4a4,0x3a30d2c3, -0x39c5a812,0xb9c62abf,0xba20e7a8,0xba6167bd,0xba979fad,0xba649306,0xb99e6a50,0x3a009a92,0x3a0c277a,0x395cc7a1,0xb975ddd4,0xb9a20e58,0xb9a5be6a,0xb9742c16,0xb8fb04d9,0xb900acd6,0xb9d34609,0xba39bed1,0xba5daeb2,0xbaa8a4cc,0xba557204,0xba96ae79,0xbad97355,0xbad1ac27,0xbab2f65a, -0xba96934e,0xb980e1af,0x39b97e75,0x3a80411f,0x3ab0e361,0x3affabfd,0x3b1e9eb1,0x3b1a835e,0x3b110e0a,0x3b065f78,0x3ad9aa38,0x3aaab6db,0x3a81a365,0x3a60662f,0x3a42de3c,0x39c558a7,0x3a239f8f,0x3a6b0f74,0x3a9fda01,0x3a988e2e,0x3a9e357d,0x3a9ad7b8,0x3a67d45f,0x3a29da7f,0x3a0c228e, -0x3900efa8,0xb97037b5,0xba256515,0xba2fec9c,0xba4c7258,0xba8359d7,0xba8df550,0x3aabc993,0x3aeb05d1,0x3af46765,0x3b02e75f,0x3b04e4ff,0x3b11864c,0x3b1c7d02,0x3b2b3881,0x3b141397,0x3aef855d,0x3abe2459,0x3a8fe93e,0x3a59dcb1,0x3a161468,0x3a229e4b,0x3a2ed704,0x3a32e8da,0x3a30c826, -0x3a25643b,0x3a3cda37,0x3a3146b2,0x3ab472cc,0x3aefcc3b,0x3af91b1f,0x3b1370b9,0x3b3f7346,0x3b37e4ed,0x3b33b31e,0x3b23f4f5,0x3b1eab05,0x3b11efc9,0x3b02bf56,0x3afcc4ab,0x3adb1ab2,0x3af129d5,0x3af0d68c,0x3abc5f29,0x3abbe118,0x3abb0d2f,0x3acb1ed9,0x3ad7be17,0x3ad97043,0x3adad1ad, -0x3ae80d64,0x3ad49832,0x3acedb82,0x3ac5c2d8,0x3abeb475,0x3ab3fc9f,0x3aa16daf,0x3aa57548,0x3aa314f9,0x3aa1bf83,0x3aa35404,0x3a9f0355,0x3aa55070,0x3aad9986,0x3a708cf7,0xb8d4f4b4,0x3ae97ff5,0x3aa036fb,0x390b0ed0,0x389033e0,0x38f124f6,0x39017ef9,0x392d4de2,0x393d2318,0x3937938d, -0x3a81e5aa,0x3ad29c98,0x38b31be4,0x3a756440,0x3ad84333,0xbaac19b9,0xb9bc9329,0xbabd406f,0xba780347,0xba88bdbd,0xba73d7ee,0xba8317f4,0xba975c1b,0xbac52914,0xbac7432b,0xbabe6729,0xba7665a5,0xbaa62f59,0xbaa7cd18,0xbaa717d0,0xbaa80b5a,0xbaa45fef,0xba8ec524,0xbaa03952,0xba8fd860, -0xbad28a95,0xb9d54c33,0x3a3559be,0x3b16c6fb,0xba8a0569,0x39a188ef,0x3afc2557,0x3af27428,0x3aeef150,0x3acca8c9,0x3af26106,0x3af452c2,0x3ac3d6be,0x3a0e8e12,0xba7ca37b,0x3afe73a1,0x3a5896c2,0x3a862712,0xbaa7fc88,0xba914b00,0xba7c3316,0xba4799fd,0xba23dd73,0xba72dd7d,0xbaeabf85, -0xbb061490,0xbaf179f3,0xba25e7b3,0xbad27006,0xbb008479,0xbb0148a1,0xbafed9fe,0xbad30be4,0xba81c806,0xba828017,0xba88bd1e,0xba8d9b4b,0x3a924ac3,0xba410ede,0xb9b5b914,0xba7e81f5,0xba6f9d51,0xba803863,0xbaba0f14,0xbac81953,0xbab7f7a8,0xba80e92f,0xba7f9906,0xbaa6664e,0xba3115d1, -0xb912d4ef,0xba475556,0xbaab43b1,0xb8b42b3d,0xb92aa398,0xba331c1f,0xb8a5ce6d,0x37ccc6bf,0x396597e5,0xba0611f3,0xbb13f277,0xbb397360,0xbb31717f,0xb8fe1f5e,0xbad893e9,0xbadd45d0,0xbaf0c91e,0xbaf1f1a0,0xbad26ed8,0xba440ae1,0xba845ade,0xbab82a45,0xba22dc24,0xb9643410,0xba53ae56, -0xb92a0679,0xbb0a1ee6,0xbacef87b,0xbaaea459,0xbaabe6e2,0xbae1b72c,0xbb02dd81,0xba9fb836,0xba5b1bd4,0xbb07f71c,0xb94e6800,0xb87ab1ea,0xba676ce2,0xba3f0def,0xba392634,0xba7f1823,0xba9b08b3,0xba42eea6,0xb9824626,0x3a8c1543,0x3a0b9eca,0xbb0ea047,0xbb640e63,0xbb2ebd20,0x3a3d2d0c, -0xbafa34e2,0xbb79093d,0xbb875906,0xbb7735c3,0xbb0e2201,0xb8ee0a5d,0x3921ac59,0xb91c4fcb,0x39a535df,0x3a29835f,0xba756adc,0xb9e26703,0xbb064268,0xba92a5ca,0xba056b64,0xb8a9e079,0x391902a6,0x392b0467,0xb8c42297,0xb9633abd,0xba999164,0xb9d3c5f8,0xb9b3a634,0xbb20b898,0xbb02f296, -0x3b893c2d,0x3b4c20cb,0x3b8dbf2a,0x3ba617d9,0x3b9c22c6,0xba14ce4c,0xbb422269,0xbae2adc7,0xbb6a8cbe,0xbb8e2770,0xbb908e39,0xba92ff86,0x3b3c8a58,0x3bd72a79,0x3b20eaa0,0xba96065b,0xbb8c57c4,0xbbc9dfb8,0xbbdf4583,0xbb9ddec3,0xbb5fb740,0xbb54e585,0xba944edf,0x3ab4476f,0x3a7556f5, -0xb69fdf74,0x3957645d,0xb89fa51d,0x37e06a77,0x380d4f91,0x397a76d7,0x395f7474,0x3a62bc62,0x3b164449,0x3b57994b,0x3b6d10be,0xbaf14dc8,0xba5fa515,0xbac252bc,0xbb32268a,0xbb3f07cc,0xbbc9d563,0xbbacef48,0x398394c5,0x39784ed7,0x3b009f07,0x3b635438,0xbb29503d,0xbbcc61ab,0xbbc51a3f, -0xbb8c43bc,0xbb0ae5d9,0xb9b74218,0x3a41f7a3,0x38388450,0xba17dbab,0xba2373dc,0xba2cb090,0x3975f611,0xba11a88d,0xb9b8d33e,0xb89eb8c8,0xb889ed00,0xb6ef37fb,0xb6da6270,0xb82ba108,0xb8eebbdc,0xb8ab697f,0xb9eda83b,0xba3a1af6,0x39ea8bab,0xbafce684,0x3b419ea0,0x3bd5dc14,0x3b033f98, -0x3a856d3d,0x3ae4ac15,0x3b3e469e,0x3afa39d0,0x3a8499a3,0xbb795da7,0xbbc29d90,0xbbd16a5f,0xb9c2c95b,0x3b235a17,0x3aeeb2aa,0xbaa28b1d,0xbb1a302d,0xbaac4110,0xbadb17c6,0xbaaa455e,0xb8f722e8,0x39a2910a,0x379d94e8,0xb997d29c,0x392bbbae,0x3950a5b0,0x3869d717,0x383dde5a,0x37b4efed, -0x3784cc15,0x37d244d4,0x38ab6a35,0x375c9a39,0x39af3d62,0x38bc17d2,0xbb0882ee,0x39534f83,0xbb8d4c9f,0x3a350155,0xbbdd6058,0xbc1c1527,0xbc532c3f,0xbc352a87,0xbba311b1,0x3ba3aaf0,0x3b9e2445,0x3b5638b0,0xbacb38df,0xbac8b8f4,0xbb1d358e,0xbb1ca716,0xbb46fd1d,0xbb35e7a5,0xbaff63fb, -0xba3296b3,0x3a0cd561,0x3ae4658e,0x3b0a40c7,0x3a9247ab,0xb88da92f,0xb9997da2,0xb908a25e,0xb865c19f,0xb8800409,0xb82d6662,0xb7e767ca,0xb818102c,0xb85b7957,0xb8a840d2,0xb815abd1,0xbada7757,0xbc00f8d2,0xbc078481,0x3c235613,0x3bcf3583,0xba11cef0,0xbb2c5eaa,0xbb276b32,0xbb58846c, -0xbb9a02e1,0xbbbb9db5,0xbbb702ca,0xbb9c94d4,0xbb810042,0xbb4b1e0f,0xbb094d2f,0xba0e242e,0x39ca06b7,0x3a869d47,0x3a99d2cd,0x3aba7ea5,0x3ac61057,0x3ae2f69b,0x3b2ba72c,0x3b15c0cf,0x3ac0cbf2,0x3a2734ba,0x38d389ba,0x38d6372c,0x38f27060,0x38a2cd52,0x38877eb3,0x383b196c,0x38b29379, -0x39088bb3,0x3812065e,0x3ac1b332,0x3b6f5abb,0x3c078ceb,0x39c688f5,0xb9856180,0xba45342f,0xba830636,0xbb00a48f,0xbb3aa0cc,0xbb4564b6,0xbb5b9771,0xbab158a1,0xba2385dc,0xba1f0deb,0xba3dd50a,0xba6e2a81,0xba8ebdce,0xba91b84a,0xbaaceda8,0xbadecae3,0xbae7023b,0xbab7b86f,0xba58861c, -0xba44d63e,0xb991cd84,0x39ccbeff,0x391c68ed,0xb8283a3e,0xb99d0a51,0xb989a5ad,0xb918cafb,0xb919bff3,0xb8776869,0xb8f196e8,0xb9c45a64,0xba32ccc4,0xba8d57d4,0xba9f5f71,0xbaae49d6,0xbb0ab0e5,0xbb41e2a6,0xbb50e0d3,0xbb3f0551,0xbb3dfc4c,0xbb1480e7,0xbafb286b,0xbaea3cb6,0xba8cf045, -0xb9ad6ad6,0x3a140570,0x3a8ae966,0x3ac99e0f,0x3b03b87a,0x3ac7fe2a,0x3a937082,0x3a3d26aa,0x39e6ca91,0xb80e2403,0xb9a7a42f,0x39daf00e,0x3a3b39d3,0x3a8367f5,0x3a521d54,0x3a76df86,0x3a2a7aca,0x3a29f693,0x37665082,0x39959deb,0xb999bcd8,0xb9c85fd4,0xba823211,0xba8e1a7b,0xbaa05a09, -0xba9942c8,0xbaf1a1d8,0x3afe0121,0x39ea7eca,0x39e7ed5c,0x39b0023e,0x39363268,0x38f1424b,0x38a5b138,0x38969a3d,0x398fe765,0x39b1904a,0x39c0d4ce,0x39e50861,0x3a0793e4,0x3a2baaee,0x3a214569,0x3a2f8741,0x3a335508,0x3a36bc78,0x3a53edbc,0x3a193480,0x3a858450,0x3a7457eb,0x3a97c074, -0x3ad8ff32,0x3afead74,0x3b053eb8,0x3aebd644,0x3adaf089,0x3ae6745c,0x3aa9fc54,0x3a91fbea,0x3aa1919f,0x3a8a1c83,0x3aa1b6f7,0x3a94c1ea,0x3a2dc907,0x3a30fe19,0x38dbe9b5,0x39c7cc82,0x39af8a30,0x39c862f1,0x39b191c8,0x399b9fd9,0x396470c6,0x39996429,0x39c2ff49,0x39f2a684,0x3a113d1d, -0x3a21c503,0x3a32a5b5,0x3a2f5482,0x3a2bf413,0x3a2a5998,0x3a20eae5,0x3a254fb0,0x3a106358,0x3a4945cb,0x3aaf476f,0x3b0c3b46,0x3a532965,0x3ac80334,0x3b2b1bc0,0x3b218bb2,0x3b1a6239,0x3b0da358,0x3b0e2da7,0x3b0887b7,0x3afbb468,0x3aa34c46,0x39ff0358,0x3b071d5f,0x3ab08739,0x3a1032fb, -0x3a2a72fd,0xb9e1dd6f,0x3aaefc1f,0x3a30b875,0x3a4cdd3f,0x3a23ec37,0x3a7448d0,0x3a710e34,0x3a387bb7,0x3a24ca9f,0x3a2d07e9,0x3a8df3b8,0x3a44c0d1,0x3a3bfd39,0x3a3a8a9e,0x3a3f8258,0x3a48b02c,0x3a781a52,0x3a4ecd2d,0x3a21457d,0x3a84f81a,0xba185f42,0xbac72b7e,0xbb0826e7,0xb9d1ccf0, -0xbadc79a5,0xbb0ea7d0,0xbb1b464b,0xbb1835b5,0xbb0e7450,0xbb10c58c,0xbb13a60b,0xbb1c1382,0xbaace116,0x38c71e90,0xbb11f4f7,0xbad19479,0xbaeaeacd,0x3a8be70b,0x3a4dc441,0x3a244fa0,0x39cb9dff,0x3aa92baf,0x3ab721ec,0x3a702630,0x3a295eb9,0x3a522a02,0x3aec77ea,0x3a688bcd,0x3a0ebafa, -0x3a04130b,0x3a1a927a,0x3a69747e,0x3accace4,0x3aa0a778,0x3a9caed4,0x3a3e0092,0xbabc2a69,0xb8b72609,0x379f4a6d,0xba796848,0xbaa14d2f,0xb914fe5d,0xba19929b,0xba2c796d,0xba955a89,0x38c76bd1,0x39e91aa2,0xba386b5c,0x38f07fbf,0xba01053d,0xba7c10b9,0x3961a6ed,0xb99694a4,0x3ace4e83, -0x3acb4936,0x3ab26e81,0x3a648e6e,0x3b1827de,0x3b19d987,0x3ac771ed,0x3a4bfc5e,0x3a4008f8,0x3b39fab9,0x3aa8e888,0x3a99830f,0x3a727885,0x3a926b76,0x3ab0a847,0x3b1b3165,0x3ac31361,0x3abc0163,0x3931c2d8,0xba40b698,0xba453ee6,0x38159151,0xbae1ec0f,0xbafe7b0a,0xba23fe37,0xbad19418, -0xba54add3,0xbaea2cf3,0xba23c052,0xba836d7f,0xbabf74ad,0xb96b6448,0xb8541b2c,0xbaa3a155,0xb950e017,0xba805f5c,0x3a79e033,0x3a2c8f07,0xb8f3e25c,0xba13c601,0x3b19db52,0x3b46de8a,0x3afc4837,0x3a122eff,0x3aa99f38,0x3b84fa01,0x3ad1b5fa,0xb95024b8,0xba2409a6,0xb8b852dc,0x3abf080e, -0x3b6eb5b0,0x3b41358f,0x3b29c36b,0x3a9c77f4,0xba0a668c,0xb8c2ea7f,0xba4e9543,0xbac83544,0xba395f7c,0xb8d487a1,0x378cfd32,0x39037e1c,0x39dbe25c,0xb75fad3d,0x38c94209,0xba29f11d,0xb8d2d773,0xb91b6b42,0xbafc5036,0xba7d18b4,0x3b2b6700,0x3ba2082d,0x3c07c32a,0x3c11a01c,0x3c0d62ef, -0x3b76c1cc,0x3ad7a24f,0x3b6d15bf,0x3ad5bfb0,0x3a1220aa,0x3971e4ef,0x3b40671e,0x3bccf296,0x3c108bfa,0x3ba45aa2,0x3ad05249,0x38048945,0xbb292ab9,0xbb2fc76b,0xbb4bb530,0xbb879558,0xbad5444f,0xb9dad343,0x3abfd631,0x3a161f1b,0xb870ff72,0x38d69de5,0xb8a49d89,0xb8c85503,0xb83fa15d, -0x38e1d1f1,0x3879d572,0x3a01eab4,0x3ad1517c,0x3b1f0880,0x3b21dedc,0xbac597c2,0x3aea2d64,0x3aaf5272,0xba9d4679,0xbb3916c7,0xbbc12703,0xbbb3859b,0xba14a4ed,0x39df21e6,0x3b334db2,0x3b980c68,0xbafd0555,0xbbc0c53c,0xbbb64563,0xbb29116c,0x3a2f0308,0x3b69966c,0x3b41e23b,0x3b070449, -0xba00b54c,0xbaa5da36,0xba346ca4,0x39427447,0xb9d54f53,0xb980cc24,0xb792ae52,0xb807ecf7,0x3790b5e8,0x3835a621,0x379c164b,0xb87ac40e,0x359fa449,0xb9ad1505,0xb89563f3,0x39adba3e,0xb9d63975,0x3b71f600,0x3bf49b15,0x3b3d10f3,0x3b1290b7,0x3b8f4c6d,0x3c03ac71,0x3c0ee6fd,0x3c0063d1, -0x3b6cee2f,0xb8e6c51e,0xbb430b1b,0x3b9203ac,0x3c0665b5,0x3c041e98,0x3b770453,0x3a2964c8,0xb9d3ae42,0xba6bb657,0x39ea1f5f,0x3aa70068,0x3a86992d,0x3a56d036,0xb94dfd27,0x399b3fe7,0x38be2c4b,0x3811d511,0x3782c154,0x368df55f,0xb7b513ed,0xb711ed2a,0x37d999dd,0x3605cd93,0x39371ce0, -0x3919c259,0xbaf7b42d,0x3a353d76,0xbb8a2e08,0xbb5f2c60,0xbbd55f19,0xbbd681fb,0xbbc5780f,0xbbd3045e,0xbb2120be,0x3bb97c13,0x3bb349c0,0x3b81d8fc,0xbabbc4b8,0xba8f87b9,0xbb050af0,0xbb05aa2e,0xbaef628d,0xba4e1ebe,0x39dc3a09,0x3aa66b0a,0x3af74dcb,0x3afdaaca,0x3a9f80fc,0x3a76b16f, -0xb957a13a,0xb96a566f,0xb8baa20f,0xb70ddd1a,0xb82995f1,0xb7399a77,0x36f43401,0x374fc3fd,0xb735f5d8,0xb7af7bb2,0xb6c242ac,0xba8f67f0,0xbbe0967a,0xbbd3f04e,0x3c0356b0,0x3bec63b9,0x3b64d273,0x3a2723b3,0x3abca4af,0x3a106424,0xb9ba01dc,0xbaaedddc,0xbb1e16ce,0xbb120ba3,0xbada735a, -0xbabd62d5,0xba376157,0x3a330e41,0x3a7daaaf,0x3aa1d891,0x3ad27684,0x3acd6ded,0x3b0f6b98,0x3b301b1a,0x3b2aadbf,0x3b335ff1,0x3ab5044a,0x3a001984,0x3735fa11,0x38443e02,0x38847f74,0x38210ae6,0xb746714d,0xb76155a2,0xb7bb02a4,0x389baf3c,0xb8a27b2a,0x3ab7da35,0x3b317439,0x3c03a70b, -0xbacb6b56,0x3a03cd5e,0x3ad0c55f,0x3a76095c,0x3a093ff0,0x37838b82,0x39128a66,0x395b1c63,0x396f3da9,0xb85ac0e6,0xb9ee0d98,0xb99a25e0,0xb9df6c86,0xba33ec51,0xba16b6ba,0xb9fd6e19,0xba096b0c,0xb9fe4dc4,0xb9ec4bdd,0xba486e26,0xba09985d,0x38219b39,0x39955306,0x398a5c9c,0x382b5ee7, -0xb92ae3c9,0xb8e500c2,0xb8c16b65,0x3835b5de,0x3835391c,0x38bbdc03,0xb88894bf,0xb9c1cd95,0xba027a68,0xba7319cd,0xba02a0e2,0xbb12a285,0xbb0df3e6,0xbadda381,0xbadd0426,0xbabae37c,0xba5f9265,0xb9e593f4,0xb7ffeb25,0x39d79327,0x3a862ec4,0x3ace832e,0x3aff2cc6,0x3b147241,0x3b25d2c3, -0x3b0c010e,0x3ae0b234,0x3ab166b6,0x3a9087a6,0x3a8f9aea,0x3a06ef3d,0x39bf154f,0x3a3dd44a,0x3a84f5a1,0x3a4ea639,0x3a1459b2,0x39d2a6d8,0x39021005,0x38574ccd,0xb935d3fe,0xb9b39bda,0xba449b7f,0xba8490e1,0xbaaa795f,0xbadbf51c,0xbb0b699c,0xbb078e94,0x388f6623,0x3a0f1f0e,0x3a47e624, -0x3a74f023,0x3a916e2d,0x3ab3f442,0x3ad757b5,0x3af94473,0x3af5ba82,0x3ae4a002,0x3ad1ee38,0x3abcce78,0x3aa7f518,0x3a98224f,0x3a99596f,0x3aa3e127,0x3aaae4ac,0x3aad5119,0x3ab12d3e,0x3ab9a903,0x3a5ce664,0x3ad9c58b,0x3aeeb12c,0x3af7b893,0x3b044d30,0x3b22f0b4,0x3b1a27d9,0x3b0832e3, -0x3aded233,0x3adea062,0x3ad228f6,0x3aa5b9bf,0x3a9d20f5,0x3a65111c,0x3a6ae82b,0x3a7bc3ab,0x3a4e9b8c,0x3ab7d1e1,0x3ab351fb,0x3ac4fac6,0x3ad2bb30,0x3ad7a89e,0x3adc8229,0x3ae90af9,0x3ae32d96,0x3ae5ea2a,0x3ae8557b,0x3aebc62b,0x3aed1a42,0x3ae8ff5a,0x3aeb2ea5,0x3ae89c31,0x3ae67462, -0x3ae60911,0x3adda110,0x3af73453,0x3a9c8305,0x3a193dc9,0xb844c2cb,0x3ac3dab0,0x3a32cd7b,0x391b686e,0x38292032,0x3896cc0a,0x38de62ae,0x37817e4a,0xb821055b,0xb89d2c42,0x39bf71f2,0x3a919483,0xb919f517,0x395bf95a,0x3b034348,0xba404b0b,0x3a36b6bf,0xba6fb178,0xb9f29de4,0xb9fdb1e2, -0xb9fca11e,0xb9a396aa,0xb9cf66e7,0xba3ab6bd,0xba4b9200,0xba46c3fa,0xb9d4434d,0xba21d854,0xba250a94,0xba28825d,0xba4248c7,0xba40ee23,0xba09d9da,0xba2a2c9c,0xba1faaa9,0xba9072e9,0x3a1a515e,0x3a9dbd18,0x3aaa0669,0x371b6ff6,0x3a6b66b9,0x3a981a9c,0x3a8e4185,0x3a92fdc2,0x3a826fec, -0x3aae09ea,0x3ab2b977,0x3a8f2be1,0x3a9b726d,0x3903c188,0x3a8bc97d,0x3ab66f96,0x3aad47e4,0xb9d76a14,0xba2719d9,0xb9c8cb40,0xb9f04f2a,0x3992fecf,0x39842234,0xba0775f8,0xba662866,0xba5e0d2a,0xb782d1d0,0xba3135b8,0xba8b3c8e,0xbaa24dd4,0xbac55117,0xba9e2780,0xb9d0b401,0xb9c20928, -0xba180cee,0xb9f98989,0x3a867ab5,0xb9bc2abc,0x39baea5c,0xba33c4cd,0xba2357a0,0xb918560d,0xba89631f,0xba8349fc,0xba17cb38,0xb9aa4404,0xb9d63612,0xb9f5da24,0xb91daeec,0x395abc59,0xb8c24b64,0xba1309c7,0x3a56c701,0x39f4dd6d,0xb9a8f1a1,0x3a0ab7c9,0x390c0ee5,0x3ac27540,0x3aab7cb5, -0xb981a406,0xba806b4b,0xba986c4c,0x3a0b7025,0xb9acb68a,0xb9d38461,0xba2990f9,0xbaa0c018,0xba8f2252,0x38c84cf5,0xb998ac56,0xba5674cc,0xb9c82ccc,0x394ee199,0xb9f7927f,0x3972a1e3,0xbaeb1459,0xbaafa1a1,0xba1d32fe,0xba89d0ff,0xbaa16076,0xba74b911,0xba34ebf5,0xb9b8e233,0xba8c954e, -0x37c876ec,0x39072df3,0xb9c716b5,0xb8ddb71e,0x3984a17e,0xb992aa1e,0xba7090c7,0xb9e0ddc3,0xba3d96c5,0x3b172e83,0x3b3beb41,0x3a2289a6,0xba72eeb7,0xba547fbf,0x3a9f019f,0xb9820cb3,0xbb015de8,0xbb39ae2f,0xbb639a60,0xbb06868b,0x3a1e4b74,0x3a4efc87,0x385ea401,0x3906fdd2,0x39bcf56c, -0xba8ee315,0xb96536da,0xbadcb8b8,0xba204c46,0xb88873a3,0x38d0f894,0x39d7401e,0x39674a3d,0x39372bf8,0x3678ea64,0xb98ec630,0xb96329bb,0xb8496e86,0xbada35f6,0xba972104,0x3b9984bb,0x3b58985f,0x3b99432b,0x3bc88f87,0x3bd0715b,0x3ab9967d,0xba37df48,0x3a3e096f,0xbad2be5e,0xbb2b2f91, -0xbb2d39ab,0xb999412f,0x3b64dc8c,0x3be8081e,0x3b90e31d,0x3a94291e,0xbb205c3c,0xbb8c7f44,0xbba0309c,0xbb3e4ae9,0xbb097510,0xbaf5b60e,0x393c1a07,0x3a8b9cb6,0x39f31a1d,0xb7970e3f,0x36ac258d,0xb92f55a9,0xb8afc755,0xb8a13f89,0x3853f390,0x389a96cb,0x3947d128,0x3aaf8b7f,0x3b19e29f, -0x3b62cedb,0xb9467cd0,0x3a0d58d0,0xbab5db3f,0xbb0df94a,0xbb3def00,0xbbad060e,0xbb9e28ce,0xb9cc95fe,0x366cf8fa,0x3b0b414e,0x3b9875f3,0xba809879,0xbba33f03,0xbbba427b,0xbb7a4c82,0xba9de887,0x3a8ef9a7,0x3ad0ce0c,0x39a36ca5,0xba3b3609,0xba1f60b4,0xb9d24e0f,0x394f2961,0xb9ed67d7, -0xb9409ed4,0xb80e7680,0x3798f38a,0x387a0362,0x3857bf16,0x37fe005a,0xb7be0e1d,0xb7bd21d9,0xb928e4dc,0xb964ba45,0x39c8e562,0xba847181,0x3b995e93,0x3be2fae8,0x3b38e0eb,0x3ab605fc,0x3abd4832,0x3bc0a2df,0x3bcb47b8,0x3b8e0904,0x379ad245,0xbb6e1a9c,0xbbd4c797,0xb9aa10ef,0x3b720b78, -0x3bacb650,0x3aadb01a,0xba57b01d,0xba52167b,0xba8aeebd,0xba4359dd,0x3a8aeb8c,0x3aa7e74f,0x39fbb94b,0x39496272,0x395611f9,0x38d30145,0x37a477c3,0xb6cb2565,0xb8062fd9,0xb7e061b8,0xb7eb677b,0x37b220f6,0xb7baba47,0x39181663,0x39734651,0xba9dcc8d,0x3a786bf3,0xbb8e5b29,0xbbe9f499, -0xbc021757,0xbbdb102d,0xbbfeef32,0xbc08701f,0xbba070c4,0x3b0bb782,0x3bb92f95,0x3baf705b,0xb9cd99d3,0xba24dbbb,0xbb0e6e9f,0xbb2806f1,0xbb358b75,0xbb099c4d,0xbabfdbde,0xb9f1145a,0x3906f7c6,0x3a9cc301,0x3ada456a,0x3a096845,0xb9c7e304,0xb935c0b3,0xb8440d25,0xb7af5d96,0xb499ff12, -0x37c214ec,0x37d6a605,0x37bc55da,0x37af715a,0xb82be658,0x38804b91,0xba67c1e0,0xbbba6ce9,0xbbaaf86a,0x3c225d8f,0x3c06f3af,0x3ae4ee7b,0xbaa10f2f,0xba6f8b6b,0xba943b9a,0xbae1e1b5,0xbb34659a,0xbb59d5e4,0xbb492bac,0xbb106567,0xbaf8b315,0xba96d5a2,0x3974cb3e,0x3a27f4c7,0x3a86ce0d, -0x3aa155a4,0x3aea2c7e,0x3b0bd4ea,0x3b268ade,0x3b5984cc,0x3b1d1a3c,0x3a8aeff2,0x39a44cad,0xb820bf0f,0x38895094,0xb6cfe3fd,0xb7f74764,0xb80742c5,0xb85232cf,0xb83a46ed,0x38337ca2,0xb8bf2c9b,0x3ab6c737,0x3b3fcf77,0x3bfcd14a,0x3a864275,0x3aae9f22,0x3a45c081,0x3a309489,0xb95438e5, -0xba943a98,0xbad11221,0xbb0139db,0xbaa82e1e,0xba963471,0xbab0231e,0xbaab7136,0xbab5f1f4,0xbacd54fa,0xbab375a1,0xbaa641e0,0xbab98709,0xbaa53fee,0xba7d22c5,0xba073416,0xb98400e7,0x39768dd4,0x3a4f9731,0x397f1033,0xb8028356,0xb8ceeb4d,0xb7467522,0x38c5cfd6,0x382faf3c,0x3922edf3, -0x38bfc47d,0x38861f27,0xb9361a95,0xb95f18be,0xb9a6878c,0x393046ec,0xbaea24d6,0xbb207801,0xbb258c8c,0xbb103cd0,0xbb07ebbe,0xbad0a312,0xbab4654b,0xbaacc22e,0xba468f10,0xb92445db,0x39fe3673,0x3a7e1597,0x3aba75c2,0x3af9fd36,0x3ac7f629,0x3a9a9256,0x3a52af71,0x3a36c9b5,0x39c09bb6, -0x39d09d7a,0x3a6c3701,0x3a604c57,0x3a66da36,0x3a0a469e,0x39f12355,0x3822c577,0x383923b8,0xb9d00154,0xb90632fb,0xba111987,0xba0f76dc,0xba826b53,0xba992cfd,0xbab35c63,0xbab5b05c,0xbaeba24c,0x3a67c351,0xb91fc9bc,0xb896de32,0x38a448fe,0x38f49447,0x39709627,0x39cb026e,0x3a175b34, -0x3a419609,0x3a4f0440,0x3a587ffb,0x3a689c06,0x3a812ccd,0x3a9e936b,0x3a95b6ee,0x3a9bdd51,0x3a9a97fa,0x3a9ddc8d,0x3a9ddbc6,0x3a929c67,0x3ad0e127,0x3ac28b14,0x3aeaf32c,0x3b0165a5,0x3b12424f,0x3b118b1e,0x3af7fd97,0x3ae6b86a,0x3ae337f5,0x3a9da29b,0x3a5e4670,0x3a6e303d,0x3a3ad33a, -0x3a55867e,0x3a408768,0x395c2257,0x3ab0bbf9,0x3a00f428,0x3a4e4a8a,0x3a54184c,0x3a670e2a,0x3a7035b9,0x3a73d7f8,0x3a7519cc,0x3a7eac87,0x3a89b07a,0x3a95bb1d,0x3aa212a0,0x3aa9d308,0x3ab12ded,0x3aaea7cb,0x3aad7a3c,0x3aac02f8,0x3aa7d3a4,0x3aa8fb7e,0x3a95ab04,0x3ae63a6d,0x3b0c3f48, -0x3b0c57ad,0x3ae58f57,0x3b16632b,0x3b23a873,0x3b1dfc6c,0x3b17a844,0x3b0b02fc,0x3b0de41f,0x3b08cd16,0x3af9050a,0x3aebc38a,0x3aa2136b,0x3adebbde,0x3ae636e7,0x3ab9ac89,0xb9f39b0b,0xbab59085,0x389c3a26,0xb97f6db6,0xb98448cd,0xb9c214fe,0xb979f9ae,0xb994ab78,0xb9d4029a,0xba064518, -0xb9fcd170,0xb924af01,0xb9b066fb,0xb9c329b1,0xb9e77ac3,0xba06f56a,0xba01f093,0xb989215a,0xb9c7164f,0xb9d3cb23,0xb9873037,0xbac4c62e,0xbad48dcf,0xba1165ae,0xbacbfe26,0xbaf8df59,0xba4002f6,0xba8cd645,0xba8c9cc4,0xba6db347,0xba840ab5,0xba8ab7e3,0xba98d161,0xbaccf680,0xba9ba1fc, -0xba59ea0f,0xbadafbf7,0xbab88926,0xb99b53f6,0xb8dc2faa,0xb9c7782d,0xba253140,0xb9531ced,0xb94dc07f,0xb9d483fb,0xba4b55e7,0xba2a9d54,0x38d80edc,0xb9abd07b,0xba30a0da,0xba84cf8b,0xbaabe1ef,0xba93f072,0xb996b028,0xb9de969b,0xb955cbba,0xba3eca19,0xba9dd42e,0xba5515d9,0xba3a4b33, -0xbabc27ae,0xbad0bdd7,0xba44e4c1,0xbacb558d,0xbae86c84,0xbade2984,0xba5b47af,0xb9cbc2ad,0xba725762,0xba1ab6d9,0xba69d7a3,0xbab14ea8,0xba425c11,0xba83b564,0x39e0f20c,0x3a26bb43,0x39c2a842,0xb8d259fb,0x3a096df2,0x39918ff3,0xb7a46a4a,0xba7c2acc,0xba7f0f45,0x3a0e5a9a,0xb8857e9b, -0xb96604c7,0xba62325b,0xbaaeb59c,0xbaa369a0,0x3908df63,0xb9bf99ac,0xb948c38b,0xba817a8f,0xbaaeb514,0xba9f599d,0xb9979b04,0xbb06ffd6,0xbaf987f7,0xb9df4d44,0xbaa08f0e,0xba1fa005,0xba661291,0xb998b984,0xba24f9b4,0xba584388,0xb9d0d895,0xb9f76f33,0xbab088b1,0xba790e4e,0xbaa6d165, -0x366665f0,0x396d44e7,0xba449be4,0xbab45ed4,0x393ab45e,0x3a024fec,0x392f622f,0xbabaf947,0xba85b865,0x3a76e512,0x3824baae,0xbad7922d,0xbb4cd526,0xbb854184,0xbb406ba1,0xb8a7cfc2,0x3808f88f,0x39ce103a,0xba0025c9,0xba88dbfe,0xba2bdeb9,0xba2d39b9,0xbaa925e6,0xb96ab9aa,0x3931504b, -0x394d7d0c,0x39937c65,0x398dc6fc,0x38dc2d37,0x3940bcb1,0xb7d0afc4,0x35a6298d,0xb97ba5ce,0xbab52675,0xbaa94e65,0x3aa848e6,0x3b0c1367,0x3bb0b566,0x3bcf1bf2,0x3be4b0c5,0x3b02cebb,0xb96268c5,0x3a9fdcc3,0xb91e5c7f,0xba06dc1e,0xb84032ae,0x3b12d40d,0x3bbe4694,0x3c14135d,0x3bcfbaa4, -0x3b474369,0x3a14b0c2,0xbb2ecec0,0xbb5c31d0,0xbb62e929,0xbb5fe508,0xba87b3c9,0x399842d9,0x3a5b8c97,0x3926d4e0,0xb88ab81b,0xb8875120,0xb9039d4f,0xb8e971bc,0xb87ea553,0xb8626d39,0x370a0411,0x36a9bfc4,0x3a1457cf,0x3a94997d,0x3a901e85,0xbac2800c,0x3aa521ea,0x3aaf8f67,0xba8854ab, -0xbb127618,0xbbbe3d8f,0xbbc8ab4b,0xbafc0d96,0xba306183,0x3b08b070,0x3ba438fb,0xba377264,0xbba23317,0xbbcc4c78,0xbb861026,0xbacd2841,0x39de1d4a,0x3a18cae9,0x399e48b8,0xbab6424c,0xba939151,0xba009440,0xb8a55943,0xb9b467b1,0xb8cbdc15,0x37ef5c51,0x380284ec,0x388201cf,0x3855e920, -0x384d43d6,0xb588887f,0x388bdc5c,0xb925b7f3,0x3842f0fa,0xb7303352,0xba12eedf,0x3b99649a,0x3be3ba5a,0x3b79a6cb,0x3ab4cf2d,0xba86465b,0x3b7f7f1f,0x3ba2349d,0x3b674b03,0x3b17ae59,0xba832b3a,0xbbb21be1,0x39956733,0x3b8818cd,0x3bce1afd,0x3b2e25fa,0x39aa056f,0xb8ef9346,0xb9f36e79, -0x3a133606,0x3a8d1417,0x3a214a4a,0x3a07db40,0xb7c3a9c9,0x3963bbc1,0x37ed417f,0xb63bc7aa,0xb7cab3c8,0xb80459b8,0xb8276153,0xb7e1653a,0xb805ff2e,0x362775b1,0xb82e106f,0x3a000cd5,0xbac907c4,0x3a8c0d5b,0xbb9c8d3a,0xbc2acf27,0xbc0c7d8e,0xbbf8861d,0xbc136b57,0xbc1db4ae,0xbbd4db20, -0x3a753f99,0x3b99dcab,0x3b9a7909,0xba9a7555,0xbabaaf8f,0xbb44a689,0xbb4aef8f,0xbb56f25a,0xbb22d85c,0xbac70679,0xba27c559,0x3973aacb,0x3a4241d0,0x3a175105,0x3901b56a,0xba088706,0xb88ddbe6,0xb80970d6,0x3762623c,0x3742e699,0x38131dad,0x3815726c,0x3846199d,0x3808c03c,0x3815b548, -0x367d7c3e,0xb9a3d4dc,0xbb92a8b0,0xbb6611ff,0x3bf779c5,0x3bc473f2,0xb986fc31,0xbb7399f4,0xbb2484b3,0xbb48823f,0xbb3e6464,0xbb37bdf2,0xbb71326b,0xbb71295a,0xbb67e5f9,0xbb38ebfc,0xbaf11b84,0xba03a9a7,0x399bbf31,0x3a6b8102,0x3ac3a9a7,0x3aea3698,0x3b1952c5,0x3b28adcd,0x3b244cad, -0x3b05997b,0x3a599616,0x39226ed3,0xb835f099,0x378cabdc,0xb80b1585,0xb830d15c,0xb897d00e,0xb8877783,0xb8f0676f,0x37473975,0xb95c0e93,0x3a857567,0x3b110955,0x3bbe1cc9,0xb98378d7,0x3a1b4477,0x3a8ab622,0x3a777bad,0x3a25770d,0x36ec9178,0xb9da76a1,0xba9fd58e,0xba65add7,0xba65cd78, -0xba8ae2ec,0xbaa8973a,0xbae35a7a,0xbb10f128,0xbb025b4e,0xbad535a7,0xba97fc54,0xba5c435f,0xb9ebf92d,0xb9b083f2,0xb83421b8,0x39b6681a,0x39a29e5a,0x38d80714,0xb7a97a04,0x374a789e,0x38669c68,0x38da40c4,0x391430b6,0x393138d8,0x3967f474,0x393c225b,0x37ea548d,0xb890645b,0xb9bd6d58, -0xb915a483,0xbb275eb2,0xbb18a6a7,0xbaec73fa,0xbaf7c1f0,0xbad7074d,0xbabce373,0xbaa8e0e9,0xbaa39175,0xba5a2b00,0xb9ce638c,0x38e9784d,0x3a4cdb4a,0x3abd3bf7,0x3b068344,0x3ae6f341,0x3aba9a87,0x3a9397fb,0x3a6c8154,0x3a6a54b9,0x39e9f647,0x39723bbf,0x39f95af7,0x3a1854fe,0x39a06b47, -0x38d2c033,0xb906c693,0xb9644756,0xb9a94dc4,0xb9c858e4,0xba025472,0xba492427,0xba849f50,0xbab7b266,0xbaf5c663,0xbb14fc4b,0xbb17d9ed,0xb9c7d36d,0xba250260,0xb9a99a8d,0xb914c68c,0x38ad150d,0x399fa6e7,0x3a17eb4e,0x3a57a330,0x3a936bfe,0x3aaf0d4d,0x3ac05083,0x3acbfe99,0x3acf2451, -0x3adbc74c,0x3ad3881b,0x3adbc77c,0x3ae07575,0x3ae14d9b,0x3ae981ab,0x3ae1e6ac,0x3aa26d50,0x3ad5e29c,0x3ac4ff7a,0x3ad14a77,0x3ac78419,0x3aca4d50,0x3ab12c99,0x3a838e65,0x3a3e0b6e,0x3a212168,0x3a10ef33,0x39ca5840,0x399caa53,0x3930d379,0x37fccc44,0xb8ac7336,0x39e2d1c2,0x3a6ffbff, -0x3a8377d0,0x3a8d2cee,0x3a992b1e,0x3aa0f4ca,0x3aa771a5,0x3aad9051,0x3ab79d58,0x3ac34f75,0x3ad1fa23,0x3ae08f8e,0x3aee5986,0x3afbb41a,0x3af87cfc,0x3af4d8f9,0x3af138d3,0x3aecc487,0x3ae55ad8,0x3af80a7d,0x3a93c178,0x3a5ef493,0x3a90cc91,0x3a96b8fa,0x3a5103c7,0x3aa7e60d,0x3a98c662, -0x3a947602,0x3a905f27,0x3a7d61b1,0x3a617574,0x3a42cb4b,0x39db0feb,0x3a20d06b,0x3a401da3,0x399ffe74,0x3af03852,0x379eff94,0x3a5e4193,0x39088299,0x3920f6e6,0x396b0be2,0x38798248,0x39f4816b,0x39fbde7a,0x3995c931,0x3914fe1d,0x38e30f52,0x39909426,0x395d9dc5,0x394a8448,0x39041492, -0xb79d8faa,0xb7f12886,0x394ea7c6,0x38e4abf2,0x37e98bb7,0xb910ef64,0x3a325a27,0x39da4149,0xba36fd55,0x39e2d737,0x39709ce1,0xba1b86b2,0xba461a31,0xba2e67e2,0xba12c6cc,0xb9c60de3,0xb9b56126,0xb9e5c5b8,0x3a145752,0x3a341301,0xba5671f9,0x3a0cc632,0x396c9a59,0x3a12c38d,0x38c91dd8, -0x3982bb24,0xb91f2545,0x3a8c2b51,0x3aacb53d,0x3a679ea4,0x39d1fb46,0x39964129,0x3a32f03e,0x39f15d51,0x38d7b5a5,0xb998f23e,0xba43d2ff,0xba0cfbae,0x39b3fedb,0x39c3ac7f,0x393e25e1,0x392311ea,0xb8b0e99b,0xb9128723,0x3a136234,0xba3084e6,0xba41911e,0x39842918,0xba52ff86,0xba4097bd, -0xb995d1ea,0x3919353e,0x3920e976,0x37cf892e,0x38f6ab47,0x36bef71e,0xb85e7348,0x38cbf3e8,0x3a663d3d,0x3a92b0c6,0x3a119432,0x3a91cbb3,0x394127fa,0x3b1f283c,0x3b3790bc,0x3b014b32,0x3a777975,0x3a04ed3f,0x3aa059c2,0x3a9b0b31,0x3a8aa037,0x3a07d082,0xb9c92a9f,0xb9c28b63,0x3a826d6e, -0x3a0c7271,0x394f683a,0xb98e5145,0xb849c3e4,0xb9e84874,0x3967545c,0xbac61514,0xbaa42553,0xb90c2885,0xba607a59,0xba0828fc,0xb9a8d75d,0xb9914f54,0xb94aa283,0xb9a1c677,0xb822aa7d,0xb7d5154a,0xb9de5583,0x391edd17,0x39ba3d55,0x3a13dcfb,0xb8b54a2f,0xb904a362,0xbaac63ef,0x3b3368e8, -0x3b8a37dd,0x3b5573ae,0x3abeae80,0x3a845f92,0x3adbcfb9,0x3ad5dd5a,0x39733d8d,0xbaabfc47,0xbb31514d,0xbad863c3,0x3aa5b107,0x3ab9b291,0x3a41d12d,0x36a5cc2a,0xb9c395e7,0xba678229,0xb9984c6c,0xba883534,0xb8842a99,0x38fb85eb,0x39496280,0x398358a5,0x391d76de,0x38c7595b,0x385afe54, -0x37e7feb8,0xb87737fa,0xb6c1823e,0xba8bdf6e,0xba018d9d,0x3b6b7922,0x3b70e5cc,0x3bbf95b0,0x3bf28e3e,0x3c07abb0,0x3b8d9df4,0x3b28bc8a,0x3b7fcff5,0x3a9a9180,0xb8afd94b,0xb84cd288,0x3ab1fcac,0x3b933bb7,0x3bf13b2a,0x3bcaa88b,0x3b602928,0xb5a268f6,0xbb057689,0xbb24a63e,0xbace64b1, -0xbad7870b,0xba1fad4d,0x3a501164,0x3a006cca,0x38eaae7e,0xb88d963c,0xb895a075,0xb8f09a3f,0xb8a44ed9,0xb8229966,0xb80931d7,0x37a805c3,0xb856707c,0x39e59ff5,0x3a9ea3d0,0x3b14f8c3,0x39ef6596,0x3b07d01c,0x3a4aaa33,0xb8a16d1e,0xbac4de49,0xbb7ba0d3,0xbb8bca20,0xbaad65e5,0xb998bafd, -0x3b0904e8,0x3b9e2767,0xb802a154,0xbb82eb57,0xbbb27b2c,0xbb621dcf,0xb9e17505,0x3b1ce9d2,0x3b18f844,0x3a895453,0xba235d9d,0xba101188,0xb9246097,0x37963007,0xb9955cd8,0xb81dbf65,0x37abe0ca,0x3834c047,0x386c5f1a,0x382b1471,0x3812576c,0xb626ef6e,0x383f8746,0xb88cf0ad,0xb8f0164b, -0x399b9b7e,0x38c2bc58,0x3bb67e08,0x3bfac57d,0x3b9408d7,0x3b1ca3f3,0x3ad67ec9,0x3c0b2eea,0x3c2a89bb,0x3c0516a4,0x3b9d52fc,0xb934f88a,0xbbaf14c0,0x3a089e56,0x3ba838bc,0x3c07fec8,0x3b9165cf,0x3ac071d5,0x386e8987,0xb9274a85,0x3982f838,0x3ae981c8,0x3abf0b31,0x3a176941,0x3961689d, -0x38acf0d7,0x38043372,0xb7a57098,0xb7e7775c,0xb81610bb,0xb817c29c,0xb7a637e1,0xb80d1f6d,0x37667d82,0xb8cb403f,0x39ea2e2f,0xba805130,0x3a9b11fe,0xbb8d1aa3,0xbc502c22,0xbbdd63cb,0xbb213849,0xbb1b8462,0xbb82692d,0xbb5e869b,0xb9e3b9b5,0x3bbc7838,0x3bdf20bb,0x3ab62c7e,0x39f8c48a, -0xbadc0b53,0xbb12adf8,0xbb1092fc,0xbaacefc6,0xba3833ae,0xb885e503,0xb8138ea8,0x39f9fceb,0x3a2269f9,0xb89a4019,0xb9d21295,0xb607d270,0xb707553f,0x37a8e6c5,0x37f3d121,0x3836ec57,0x38120ed9,0x38599ec3,0x3785c303,0x38992f87,0xb813435c,0x37deda7e,0xbb49b04f,0xbb11a119,0x3bf8095b, -0x3c05a88f,0x3b5b123e,0x38a6535a,0x39d2e902,0x39f35e9b,0x3a2d5a2a,0x3920024e,0xba9a9db5,0xbac0682a,0xba282cb1,0xba106f00,0x3842c07b,0x3a89a574,0x3a881e8e,0x3a9b2d06,0x3acb4008,0x3b01e41a,0x3b223d97,0x3b4068e0,0x3b4b913c,0x3b0244e3,0x3a11fe03,0x36870898,0xb85e3dbf,0xb726529b, -0xb8875ec8,0xb87f47e7,0xb8a8e080,0xb88097c7,0xb8f7e508,0x37abd17c,0xb9a13fe3,0x3a458327,0x3b08e9e9,0x3bba7c6d,0x3a8de56e,0x3b29b223,0x3b1eea18,0x3b1c3396,0x3ade7b26,0x3a4f36d1,0x3867c4dd,0xb9a8fc73,0xba790bf7,0xbaac0ad1,0xbad2a89e,0xbab077d9,0xbaaea030,0xbad046d1,0xba998dde, -0xba5735dc,0xba3cf18c,0xba053d27,0xb9b202ec,0xb97d3c63,0x39582247,0x3a224d44,0x3a486c9c,0x397a45e1,0x378a2b3e,0x389e315b,0x38f2e254,0x391f2169,0x39128d66,0x3940e57c,0x39313ec8,0x3961e666,0x38f3487b,0x39e171ef,0x39b32a51,0x3aa2dd1a,0xbaaf5382,0xbacbed79,0xbab6dab8,0xbaa24f63, -0xba884cab,0xba294147,0xb9e03499,0xb9999d3c,0x383b9c38,0x39db404a,0x3a412df6,0x3a905df5,0x3abcf534,0x3aee80f5,0x3acea5d3,0x3aab0f01,0x3a87e178,0x3a8b1b1b,0x3a8647b0,0x3a8fa6ee,0x3a809d83,0x3a403605,0x3a14a235,0x39672264,0x35e3386e,0xb99197e1,0xb9a72fcb,0xb9e32031,0xb9a26fb6, -0xb9ff5f0d,0xba0b311f,0xba3b974e,0xba7bfc8c,0xbaa35351,0xbabaa750,0xbabd4741,0xb9d8ae47,0xba24a26b,0xb9cf227c,0xb678e06d,0x39899f19,0x3a0d1925,0x3a612c05,0x3aa01ca8,0x3aaba2ef,0x3ab0c528,0x3ab59a83,0x3ab86659,0x3abf5859,0x3ad80142,0x3acfcacb,0x3ad60532,0x3ad470c7,0x3ad5d594, -0x3aca85ea,0x3ad50924,0x3ae7eedd,0x3aee0595,0x3b01c53e,0x3aebb270,0x3af2d3a4,0x3ae98bb8,0x3ac17027,0x3aa86e27,0x3a8c64d1,0x3a4078b7,0x39d0b274,0x39a3ece1,0x3936d7ca,0x39186999,0x38ff4ce3,0xb9716f2d,0x3ac8e0f5,0x3a6db0d2,0x3a92bf37,0x3a9fa8a5,0x3aacb936,0x3abadce0,0x3ac4cc1b, -0x3ad19956,0x3ad17a33,0x3ad9bbb5,0x3ae30f1c,0x3aedfe83,0x3af5669d,0x3afb9387,0x3af81938,0x3af5b479,0x3af2ab92,0x3af044b9,0x3aed5067,0x3ae07fb0,0x3b10d4bb,0x3b0d3f9e,0x3ac73155,0x3b108bf8,0x3b1105c3,0x3ad7fba0,0x3ad3673d,0x3ace1cee,0x3ac06071,0x3ac064f9,0x3ab73dd4,0x3aa32f90, -0x3ad3aed6,0x3acc66cd,0x3a69001e,0x3abfecf9,0x3b08420e,0xbab47712,0xbaaf38ce,0xba987273,0xba7d86e7,0xba8a2ad6,0xba944f92,0xba913f7b,0xba9b1b5f,0xbaa598b7,0xbabb11da,0xbabb9712,0xbaa61c4a,0xbaa17242,0xbaa3758e,0xbab3c2c7,0xbac81cb2,0xbac8a9d2,0xbaa93229,0xbaaf8cc2,0xbaa1ea0b, -0xbac27a77,0xbabe65f6,0xba4d83df,0x3a778e3e,0xbaec2102,0xba8cc42a,0x3a49410e,0x39d218af,0x39b3926a,0x39f419dd,0x39ed41be,0x39f41ad3,0x39cce58a,0xba568adf,0xbad4743a,0x3a257e61,0xba3c145b,0xb991bfdd,0xbaa51e51,0xba5d9015,0xba85f07f,0xbaa8df3d,0xba929e51,0xba9ccff2,0xbaa9f37a, -0xbaf1e906,0xbaf37012,0xbac0c7ab,0xbaacb44f,0xbad2e331,0xbb107307,0xbb37d15f,0xbb328ba5,0xbaf1dbad,0xbadbda0d,0xbab6e9cc,0xbae364ed,0xb9c9bc99,0xba9c4db5,0xba6672d5,0xbabfe8e6,0xbac5c9d0,0xba859fce,0xbb040364,0xbb0b6b0e,0xbac44904,0xba989a60,0xba6a81cb,0xba4aad46,0xba70627c, -0xba5ae3ab,0xba96c09b,0xbaab456e,0xba5152dc,0xb9af75c1,0xb919f6b2,0xb900ebbd,0xba35e08e,0xb9da2cb2,0xba576326,0xba786607,0xbb0fed96,0xbb1bc996,0xbae16577,0xba95ff24,0xbaa051b2,0xbb0c6ce3,0xbb50de71,0xbb54d7ef,0xbae99af4,0xbae98003,0xbad43064,0xbae2bb41,0xbaa86a58,0xbaa7c297, -0xb9d83ee5,0xbafea837,0xbab23470,0xb92bceeb,0xba04ecf2,0xb9692dc7,0xb93af7e3,0xb6e20bb6,0xb919193d,0xb9469c64,0xb9a5eb02,0xba19fa94,0xba7f3a32,0xba8980ef,0xba59a1df,0xba24226f,0xb93a0fc3,0xba56ea3c,0xbade4eb2,0xba4be71e,0xba1fc14b,0xba2e05bb,0xbb2f1aae,0xbb41780e,0xbb0cc7fa, -0xba9c539b,0xbb204d4d,0xbb9b344d,0xbbe07be0,0xbbca9934,0xbb4cb70b,0xbb09d778,0xbac22fb2,0xbadcdc19,0xba83e21d,0xba90e063,0xb9deb53f,0xba4d1e4a,0x394063e1,0x3912b29c,0x392c16fe,0x3951fae8,0x38b0a030,0x38678597,0x3855a71f,0x3858bf52,0x38886c72,0xb93764df,0xba6b1d06,0xba979b15, -0x3ad07fd4,0x3a6f6802,0x3b518057,0x3b93eee7,0x3bc58891,0x3ab0c887,0xba68c93a,0xb99def5c,0xbadba714,0xbaf8197b,0xbaa14835,0x39b4f46e,0x3b78a45a,0x3bf32b8f,0x3bd74237,0x3b7e780b,0x393bbc74,0xbb38c684,0xbb8287e2,0xbb5c4761,0xbb0dcb30,0xba3136cc,0x3a252103,0x39844b29,0x382a24d2, -0xb8d52dc8,0xb8879592,0xb8dc1470,0xb8434560,0xb80cfdcb,0xb7cb841c,0xb7e59201,0xb79e9af7,0x38f0ec3d,0x3a0db7d9,0x3a5e9a65,0xb9968484,0x3a986395,0x3a9727e8,0xb9664c69,0xbaa839c0,0xbb9c4701,0xbbb59312,0xbb17c887,0xba8795b7,0x3acf9acc,0x3b92e713,0x39a4eaed,0xbb73c3bb,0xbbcecc5c, -0xbbae419c,0xbb63a48d,0xbb019fab,0xba76fb88,0xba69fb93,0xbac6920b,0xb9fd2e06,0xb9517d02,0xb91d376c,0xb930b04b,0xb69a6fb8,0x381ff7f0,0x3836a9db,0x3855d4f3,0x37f6911e,0x37e1625e,0x36fe52e9,0x382455f1,0xb74db6a3,0xb8a9de26,0x38d700da,0xb93ef9c0,0x3bbc4dcb,0x3bdc1421,0x3b656284, -0xb938b773,0xbbaef8d1,0x3a8c4b7f,0x3b4306b3,0x3ab2afe4,0x3ae51c37,0xbac5258c,0xbbe2e77d,0xbb4de8e5,0x3a191533,0x3b903983,0x3b0bb8b3,0x3a303b67,0x39a67e12,0x3814b83d,0x39870b4a,0x3a2f6b7d,0x39890a99,0x38b05a63,0x39030bd2,0x389ecde7,0xb62d6470,0xb7adc3c9,0xb80e1a2f,0xb8017f0c, -0xb809350c,0xb746e46d,0xb8431838,0x380a6077,0xb92bb421,0x39e92c9a,0xba5334ba,0x3a816051,0xbba003e0,0xbc7d47c2,0xbc192b69,0xbbda85c3,0xbc1c2076,0xbc200c75,0xbc06ea49,0xbb70709c,0x3b6ca06c,0x3bb2076e,0x3a1da93e,0xba6b17db,0xbb4f19f7,0xbb581829,0xbb7f4884,0xbb64c7ad,0xbb401b87, -0xbb08188d,0xbaa9a277,0xb9efb4ef,0x369e3f8a,0xba014d38,0xb9bfd3fa,0x38479e4a,0xb79cd300,0x38129929,0x37f6c9ca,0x38387702,0x37ff00f1,0x384a4943,0x379738fc,0x38a71e64,0xb7f43f3d,0x390ee0c2,0xbaf93862,0xbab622ec,0x3bb9839c,0x3b729a66,0xbb4c1de0,0xbbc91e12,0xbbb3dc13,0xbbad4f46, -0xbb8c1943,0xbb5b9977,0xbb829382,0xbb8a6efe,0xbb8ab314,0xbb57efcf,0xbb11aa20,0xba8b51d2,0xb834f0b3,0x3a4b145c,0x3aca87ec,0x3b04e841,0x3b16ec39,0x3b13d55d,0x3b115786,0x3aa5c829,0x39a3f41d,0xb7cbc977,0xb7be6b98,0xb81f54a5,0xb8798df3,0xb88bfdfd,0xb8907d5c,0xb884901a,0xb8d0bf69, -0xb810f41f,0xb954d8f5,0x396f66d3,0x3af2b413,0x3b3f423d,0x3acd42c5,0x3a893f9e,0x3a1e06e7,0x3a7db341,0x39dae104,0xb9a0b21b,0xba9fbd58,0xbb1cda1d,0xbafdbdca,0xbad76845,0xbad24510,0xbafa262e,0xbb1bc9c0,0xbb3cc4b1,0xbb20184a,0xbb00804c,0xbab47820,0xba80bf70,0xb9d30e9c,0x390f9eb0, -0x39d1b3e5,0x3a16198c,0x39c90e66,0x38610363,0x38089920,0x38df3323,0x38d892c1,0x391d4f4a,0x38fdd0e5,0x39212f9b,0x392c4f36,0x39570ec5,0x39627ef5,0x398b34a8,0x39a20409,0x39c89481,0xbb0e9000,0xbb0f2595,0xbb00706a,0xbb056681,0xbafb63e1,0xbaf04439,0xbaeaa923,0xbaff7374,0xbace4430, -0xbaacd443,0xba734e12,0xb967dc21,0x3a093823,0x3aa477d0,0x3a8d4f3e,0x3a671065,0x3a34dfc2,0x3a216fcb,0x3a0a101d,0x39fed768,0x39d6a579,0x39b3a1e9,0x3980e8ed,0xb839be5e,0xb926499f,0xb9a5049e,0xb96aa6a0,0xb9ab2322,0xb9802ab0,0xb99ba115,0xb9d38229,0xba25fabe,0xba849aa1,0xbac02287, -0xbae35d73,0xbafd8efa,0xba0874ef,0xbac9c37c,0xbaa25e2c,0xba888d74,0xba5da01c,0xba3d5a9f,0xba09b46e,0xb9adffbc,0x3911180c,0x3a128a37,0x3a68b46a,0x3a99a8ac,0x3ab5275a,0x3ae056e3,0x3ad2969c,0x3ad7c6c2,0x3ad7c7d3,0x3ad83053,0x3ade25d4,0x3ace9d36,0x3ad29319,0x3aaa8c92,0x3a8a3b91, -0x3a9417b0,0x3a7f7083,0x3a18d642,0x39aceaf3,0x383f336b,0xb8a593b7,0xb9bfdbe0,0xba02ea1c,0xb9f79234,0xba18678e,0xb9f68e43,0xba318728,0xba88ffa0,0x3992e6d9,0x390cf51c,0x39c8180b,0x39c69a2d,0x39e9e010,0x3a069cc7,0x3a135124,0x3a1120a0,0x3a386166,0x3a591171,0x3a814d8e,0x3a9629ef, -0x3aaa3e14,0x3ac1e50a,0x3abb63fa,0x3ab90080,0x3ab63c5c,0x3ab08237,0x3aaf19c8,0x3aaad633,0x3a922081,0x3ab251cd,0x3b122639,0x3a5d5f88,0x3a9f0da3,0x3b15cf71,0x3b0f0855,0x3b076bb6,0x3aff8892,0x3af10920,0x3ae180e9,0x3ac983a7,0x3a430515,0x395d9a84,0x3acd7279,0x3a3771b7,0x3a9ec040, -0x39a0eb89,0x38c63a50,0x3a49ab2f,0x39d98f60,0x3a064935,0x3978782b,0x3a2f8d30,0x3a409749,0x3a3bec78,0x3a03a779,0x39e54201,0x39e538ed,0x3a0d13ca,0x3a086eb4,0x39cc2a74,0x3974dc15,0x395e99d5,0x39d78423,0x39c5c247,0x39802a57,0x39dae6e1,0xb8f7ce3f,0xba70416f,0xbb067805,0xb80198be, -0xba823992,0xbaeb86f4,0xbb083da7,0xbb03cf24,0xbae5eb39,0xbae2bbd0,0xbae0ee7b,0xbad72ff6,0xba30073c,0x39a8bbf4,0xbb0a18d5,0xba6361dd,0xba8dec5f,0x3a64f533,0x3a10ed62,0x39f6e0a0,0xb90f392b,0x3a832fb5,0x3ab195dc,0x3ab8db72,0x3a5799bb,0x3a2660ec,0x3a26432d,0x3a6fc774,0x3a2a26f5, -0x3844f996,0xba04e945,0xb9e9fd4e,0x39b47c3f,0x39d878c0,0x39e1493e,0x3924346b,0xbaab9d2d,0xb989774c,0x392fc121,0xba6d364a,0xba902b87,0x389e406d,0xba602f6b,0xba49923c,0xb9b09a12,0x39155f35,0x39ab2fa8,0x392aea12,0xb63c7f23,0xb9f81908,0xb9df44d1,0x395cfb04,0x398fe993,0x3aa4602c, -0x3aa27a3e,0x3aa6109a,0x38aef73b,0x3b0c32a3,0x3b2e92cb,0x3b3d99e1,0x3accdaa4,0x3a873179,0x3a6272e0,0x3ade5122,0x3ad03542,0x3a39c764,0xb99a785f,0xb9dd58bb,0x3a653119,0x3a0ddfc2,0x3a1bf1b0,0xba1d1b53,0xba488c9f,0xba35bb0c,0xb90b7291,0xbaa9c97b,0xba85b397,0x386efc7c,0xb9f8020c, -0xb7ae1f31,0xb8f9f28e,0xb880529d,0xb93dd8de,0x3802a5ab,0xb922a14e,0xb99618dc,0xba2bb37e,0xb74a2b65,0xb8718887,0x3a786c60,0x3a401b7c,0x364f8665,0xbadd25ee,0x3adee348,0x3b5e11fe,0x3b85fa49,0x3b063629,0x3a9ee9f7,0x3a4ad238,0x3b0d62ba,0x3aa21758,0xba74bc98,0xbb39e8fe,0xbb18995c, -0x39c7e04a,0x3a540a93,0x3a430701,0xba0c8877,0xba9a63e3,0xba297296,0xb9e26446,0xb9bf826d,0x39853f9e,0x389709fb,0x392256be,0x388eb5e4,0x380cef6e,0x3835172e,0x383e4843,0x36e9beda,0x381a4145,0xb42f1a6a,0xba1ba8df,0xb98ea71f,0x3b0056ac,0x3b468de4,0x3bb685e8,0x3be382f7,0x3c0b6a0d, -0x3baef974,0x3b7ef2d0,0x3ba2cad3,0x3b39ce35,0x3afbe049,0x3b0aecec,0x3b30c1e0,0x3ba66f70,0x3beff5b4,0x3bf793dc,0x3bb2302a,0x3b13d4b6,0xb97ee4fa,0xba679c1b,0xbaa4ebbc,0xbae0f7d8,0x39586fdf,0x3a2bf3f2,0x38a4ef55,0xb7cab153,0xb8a58fc9,0xb85dea71,0xb8427e1c,0xb7743ca6,0xb7d04f31, -0xb78edec6,0xb7531a63,0xb77fef5e,0x37a9d996,0x39b11fa7,0x3a8845a5,0x3a33f1ba,0x3b291efc,0x3afa248a,0x3a66cf0a,0xba3ea26c,0xbb474633,0xbb810946,0xbb08a152,0xb9702d59,0x3b183a37,0x3b9f5035,0x3a8a74b3,0xbb2be538,0xbb9fcd4d,0xbb622660,0xba5b6c39,0x3af2c89e,0x3ae5cc68,0x3a99f86b, -0xba0cb4f1,0xb9d13fa0,0x37570785,0xb93e272d,0xb8b16f55,0x37e9bb94,0x3813374c,0x380d099a,0x37d374a4,0x374507b1,0x379de8c3,0x370c813a,0x37a2c5b0,0x37884b11,0xb8847436,0x38a4cd15,0x3a458de8,0x3bad3590,0x3bde5319,0x3b8e69f3,0x3af22c83,0x398f2e3d,0x3bfaf024,0x3c2cdbcd,0x3c07fbdc, -0x3bed4b18,0x3b18e604,0xbb813648,0x3a3929f9,0x3ba78c63,0x3c15b769,0x3bd81d56,0x3b73db51,0x3aa4d752,0x3a6e6c0e,0x3aa5c158,0x3ae145cb,0x3a549ba7,0x39bb3ba0,0x389227a0,0x3841e9c4,0xb7f0a4ee,0xb7b35141,0xb7fbada5,0xb792a3e3,0xb7abce97,0xb6f6ddac,0xb82e542e,0x38137fe6,0xb9244dbc, -0x39adcc75,0xba26e8fa,0x3a58c045,0xbba469e8,0xbc812cf9,0xbba9dce0,0x393148cf,0x3a3376c4,0xbab5c1c0,0xbb3e69b6,0xbb541ae6,0x3b83d8aa,0x3bce042a,0x3b2acd90,0x3a28d6e3,0xbaeb9613,0xbb06a4ac,0xbb08c9c1,0xbaa581b8,0xba202421,0xb967f7ed,0xb9a6c40a,0xb9aed797,0xba0a06c8,0xb9ea9b7d, -0xb95e423d,0x38857d9e,0x36b02bbc,0x382b5b17,0x380319b6,0x38053317,0x37afce93,0x381e4c56,0x379fb33c,0x38889aa5,0xb7511089,0x39382dd5,0xba7faea2,0xba284484,0x3b4b1a33,0x3b968e89,0x3b1f93c8,0xb9907fa1,0xb8df322d,0x3821b97b,0x3a673c9c,0x3a976b11,0xba07b242,0xbaab6de7,0xba766c41, -0xba43d79d,0xb8dd3f17,0x3a252061,0x3a3d612d,0x3a8667a6,0x3aea2953,0x3b0a101d,0x3b2e8e3b,0x3b3f4311,0x3b1639ad,0x3ab1ce40,0x3917828e,0xb8c2228d,0xb8132c94,0xb8815624,0xb888c0a0,0xb85279a5,0xb8616f61,0xb84e94de,0xb8b8ed6a,0xb82854c4,0xb918311b,0xb8a35144,0x3a93e87b,0x3b25ea64, -0x3a35ceb2,0x3b38cea3,0x3b502dce,0x3b481041,0x3b258697,0x3ae7e3a5,0x3a73c408,0x39f82a16,0xba72e82f,0xbac83ce0,0xbaf18959,0xbac96c1d,0xbac85b1f,0xbaf0bb6d,0xba9d62a3,0xba314589,0xb9aed30c,0x3811d268,0x398588a8,0x3973481a,0x3a215fee,0x3a54b6ad,0x39fff961,0x391b8e26,0x38a3ac97, -0x391406a1,0x390b982a,0x38e588fa,0x38d6ab82,0x38fc524e,0x39196e7a,0x393e76e2,0x39170f19,0x39fa5297,0x3a18844b,0x3ab47e8c,0xbaa48d79,0xba881f88,0xba29a400,0xba426bf4,0xba05139c,0xb992bd83,0xb8fa98a8,0xb7434ee3,0x39016e0d,0x397f27ba,0x398f0c95,0x3a02bbc5,0x3a3e24f7,0x3a7a104f, -0x3a6d53a6,0x3a4fc9df,0x3a38b692,0x3a53a526,0x3a80968b,0x3a8b2ef2,0x3a117755,0x3990fdb5,0x38d2384a,0xb8f10a44,0xb9a66871,0xb9affe91,0xb9b2314c,0xb97e0735,0xb970cdd0,0xb980cc41,0xb9b30028,0xb9ceffd8,0xba39ad5a,0xba8901ef,0xbac36777,0xbaa475c2,0xbaca71f1,0xba8706d2,0xba2fa9b7, -0xb976e8ff,0x390f9e07,0x39e90a4f,0x3a53baf4,0x3a9d4d95,0x3aa91a48,0x3ab4f449,0x3abfec5d,0x3ac2ee89,0x3ac610dd,0x3ad63083,0x3ad1a377,0x3ad75604,0x3ad886ec,0x3ada8481,0x3ad12053,0x3ae55627,0x3ac20de8,0x3ad30273,0x3ac59c04,0x3a970a13,0x3a84d84c,0x3a69aff9,0x3a2dadb5,0x39e0913a, -0x391d8528,0x37ccdb2b,0xb93346bc,0xb9bf21d0,0xb9eaadef,0xba217a6f,0xba235ec9,0xba347263,0x3a6f6081,0x3a74c90b,0x3a813640,0x3a919c5e,0x3a9e82e5,0x3aafa538,0x3abca202,0x3acd2d83,0x3acc0af4,0x3ad1a600,0x3ad84110,0x3ae181ec,0x3ae96b57,0x3aefde8f,0x3aee0141,0x3aecb005,0x3aea7e69, -0x3aea1d01,0x3ae589d3,0x3ae83a03,0x3ae24e72,0x3aae1ffe,0x3a33f58c,0x3add9ef3,0x3aa263ea,0x3a1d7aa8,0x3a16345f,0x3a119faf,0x3a0623c0,0x39ea37aa,0x39c4b88a,0x39914c3b,0x3a327b1b,0x3a8bd1cb,0xb762532c,0x3a033e28,0x3b026539,0xbab8cddd,0xba012fe0,0xbac4bcbb,0xba85e8c6,0xba9149cd, -0xba9dc624,0xba9006ea,0xba936591,0xba936366,0xbaafd56e,0xbab6c1c9,0xbabb47c4,0xba9ef14d,0xba9ed939,0xbab39055,0xbacdbf0f,0xbad22f60,0xbaba1740,0xbab7f525,0xbaa86045,0xbae25e65,0xba2223c0,0x393df4e4,0x3a9dfc33,0xba8a45c6,0xb78ae283,0x3a92ce8c,0x3a4f9bfd,0x3a4090a0,0x3a6abc7e, -0x3a7b1f66,0x3a87e9e5,0x3a884edb,0x391f3f3b,0xba86179f,0x3a855300,0x39b64813,0x3a29c9af,0xbaa796c3,0xba87c565,0xba870b8d,0xbab3b3cb,0xba827978,0xba71b98a,0xba5b7833,0xbac5033e,0xbaded052,0xbaea65c9,0xba9ccf4c,0xbab96bd3,0xbb0bfcf2,0xbb3bc48c,0xbb3cff37,0xbb0d0ffe,0xbae94d64, -0xbad1c6f7,0xbadb3157,0x39607996,0xba8327b6,0xba00ec9d,0xba964d06,0xba9ba32a,0xba4ffda9,0xbad2b077,0xbaca3448,0xba570b11,0xba442278,0xba3a259a,0xb98aa4ac,0xba4185ea,0xba09da29,0xba1168f9,0xba93db3f,0xb89a7419,0xba03d6bd,0xba21744a,0xb978264f,0xba85977e,0xb96f1cae,0xb9921568, -0xb8709ec5,0xbac302c7,0xbafd1202,0xbb1666e9,0xba59a17f,0xba5e64c7,0xbaf3ca2a,0xbb516818,0xbb5f84b9,0xbb10ae56,0xbafb4756,0xbaf643e3,0xbadb86fe,0xba51ea82,0xba8149f0,0xb9b789d9,0xbab204e5,0xba22a893,0x38eb37bc,0xb82fb16f,0x39136abd,0x390fce41,0x38c4dc07,0x38899305,0x39037211, -0xb8e2d5c7,0xb9f657bd,0xb9ff9527,0xba33f78c,0xb92aba44,0xba56b08c,0xba3561b1,0xba5d771b,0xbb05bd3b,0xba088db7,0x398e285f,0x3a4ef133,0xbabc8bc8,0xbb24f48c,0xbb518d11,0xba6a5f57,0xbacf6e29,0xbb87cd8a,0xbbdd247c,0xbbd78029,0xbb82042e,0xbb23c3f2,0xbb044920,0xbafc7e79,0xba571a60, -0xba973c08,0xb94fccac,0xb96f221b,0x39a56d95,0xb79d241a,0x3830bbf2,0x35a2199b,0xb82fe3c1,0xb78eeb9d,0xb7a76d30,0xb825f4f5,0x386f1b63,0x374d551e,0xba0a712c,0xba47dc5a,0x3b01e38f,0x3a1913f0,0x3ac7465b,0x3b471d9e,0x3bad89b8,0x3afc4fb1,0x397e266d,0x39c65875,0xba7ca8d3,0xba9cda10, -0xba2084a0,0xb85459aa,0x3b28251d,0x3bb8aff7,0x3bd62525,0x3b996c96,0x39b8bfb3,0xbb02a786,0xbb58fe01,0xbb1bbbe1,0xba70ab3e,0xb94c0406,0x3a161523,0xb8495fea,0xb8068b54,0xb8661299,0x3566635f,0xb7a0b3df,0x379d4785,0x35f46f90,0x37480e97,0x36a1bec4,0xb7a74e5c,0x3799a099,0x39448bae, -0x3a51ca66,0x3a3138f5,0x3a7015d8,0x3a7904b8,0x3a70915a,0x394cbb35,0xbb34a2e9,0xbb7e99ae,0xbb14d56a,0xba4c94e7,0x3acd4c7c,0x3b865391,0x3ad9f287,0xbad65a19,0xbb9c3967,0xbb9fd659,0xbb6fbd97,0xbb139d46,0xba716d2a,0xba5b2971,0xba5698ea,0x39279585,0x360c5a28,0xb9134936,0xb85a272a, -0x3855da6f,0x37629f5d,0x376555e3,0x36cf006c,0xb636fe60,0xb554ad40,0xb5bb1226,0xb6072c3e,0x381bdf2c,0xb8ad1762,0x38c4aeeb,0x392b71da,0x3baecb13,0x3bcd2fc7,0x3b77dc00,0xb81b2f73,0xbba6a89a,0x3a9e691a,0x3b68454c,0x3ad74b6e,0x3b10712c,0xba91077b,0xbbd75a30,0xbb8b7441,0xba4dfe2c, -0x3b75b4c9,0x3b465413,0x3b0c1abc,0x3a9f5ae8,0x3a7511db,0x39e30565,0x3a35d47b,0x3983cf43,0xb8c978ac,0x39409fcf,0xb81e8726,0xb6bd28ec,0xb7d97c82,0xb71ed6fe,0xb716440e,0xb68749d7,0x35ec3bd2,0xb790b64a,0x37ad6096,0xb8d1bcf1,0x394205f0,0xb9aa2268,0x3a2b0d8a,0xbb9b7b90,0xbc7f9a47, -0xbbdfe4fd,0xbb3cb453,0xbbb806e7,0xbbc0fbb7,0xbbd423b6,0xbbc9af40,0x3b08797e,0x3ba741ef,0x3b277b64,0xb8330df8,0xbb2dceb3,0xbb3e14f3,0xbb6ca525,0xbb5f4f09,0xbb4b97df,0xbb201bf4,0xbb06ba68,0xba974f71,0xb9cae162,0xba24a97c,0xb7c20247,0x37b773eb,0x37cf7894,0x37d7701f,0x37b3783a, -0x376c9828,0x3712f84e,0x3707ceec,0x3783d697,0x37ac5c22,0x38329c2c,0x385aad30,0xb9aee3c5,0xb9b847e1,0x3b2dc2be,0x3ab1214a,0xbb39cc81,0xbb97e8b4,0xbba3b2a6,0xbb8b3d66,0xbb4c512f,0xbb12b1ad,0xbb40ad67,0xbb6388d6,0xbb5b659d,0xbb2cd180,0xbae45ac5,0xba7994be,0xb9377f41,0x3a1b1014, -0x3ab60fa4,0x3b057f65,0x3b0eb32b,0x3b0e4fae,0x3b059d8a,0x3a4df4b5,0xb6809ece,0xb89ba5d5,0xb7fa6980,0xb86f1052,0xb8134cab,0xb80917dd,0xb75971a0,0xb7d2c655,0xb7912a2d,0xb8ac5354,0x371f4b54,0xb9bd4df4,0x3a932f1f,0x3a5d5f38,0x3b2a1c66,0x3b0fd5f6,0x3aa151f3,0x3ad71af9,0x3a56d77a, -0xb870f95e,0xbaa0348a,0xbb0ed3ff,0xbb0e2b88,0xbb02bfa5,0xbb02d907,0xbb07fb38,0xbb174f8a,0xbb30f976,0xbb0880fc,0xbad42fe3,0xbaa337fb,0xba467903,0xb933e4ce,0x3a11d360,0x3a51dea3,0x3a3b0128,0x39d5e7c1,0x3897cf8e,0x38d73546,0x38df06dd,0x3898a358,0x38820b93,0x37cc20d5,0x380bd293, -0x38867f4c,0x38c5cfe5,0x393bf397,0x3978b3f2,0x3a372580,0x3a77ac26,0xbaa90c2c,0xbac57b3d,0xbacc40aa,0xbacd8f12,0xbacb30e4,0xbabdf55f,0xbabb5e12,0xbad587e4,0xbab28049,0xbaa4e145,0xba8b023b,0xba32db78,0xb981cfec,0x395261e8,0x393a349a,0x391a8add,0x38ca5a82,0x39304d93,0x3866a7be, -0x39b1283b,0x39b1af38,0x385e4500,0xb8bccfdc,0xb99c1d78,0xb9993d6e,0xb96cabdc,0xb907971d,0xb8c9a5c9,0x36db07e9,0xb7bc3913,0xb8b6d8e7,0xb936571b,0xba02a4c2,0xba50b6d7,0xba80e36b,0xba9873f5,0xba301b70,0xbad22f03,0xbab36663,0xba95b2eb,0xba805c56,0xba6ff15e,0xba4c63c7,0xba1e30f2, -0xb972db43,0x39068226,0x39e973d8,0x3a3d91ba,0x3a7f0a25,0x3aae9e90,0x3aa5e69d,0x3aaa7725,0x3aab07d6,0x3aaf2b19,0x3ab32d55,0x3aad689f,0x3ad4c5e2,0x3a815e96,0x3a4dea5f,0x3a3f6b1d,0x3a0d9bdf,0x38672a2b,0xb933c7ef,0xb9acf131,0xb9d8009a,0xba33066c,0xba681ef1,0xba6024cc,0xba79ebd2, -0xba4dd4d6,0xba739545,0xbaad48d0,0x39d6b49e,0xb96cb120,0x3816fd5b,0x3791cbb1,0x38876c3d,0x39130ce9,0x39466120,0x393944b2,0x399bc4b1,0x39d12bf3,0x3a098da1,0x3a2e200d,0x3a5044ea,0x3a7a3c86,0x3a714fa8,0x3a720191,0x3a70c167,0x3a6a609d,0x3a700dc5,0x3a4ca253,0x3a98dea7,0x3ad38121, -0x3b13a4fb,0x3a58b108,0x3ac1bd12,0x3b0fe879,0x3b0a334c,0x3b007db1,0x3aef1476,0x3ae3aac5,0x3ad7aaa8,0x3ac166f7,0x3a760add,0x39615ae6,0x3ac05229,0x3a73ce58,0x3a44a666,0xb917dd57,0xba7203d6,0x39c20df4,0x37835582,0x387d53d2,0xb953f44b,0x38b7cef7,0x39216e78,0x39978f24,0x37f86d3c, -0xb83af178,0xb929a32c,0x38ae935c,0x38a5bd47,0xb8ba21ec,0xb9764672,0xb98b8fe9,0xb90bb82c,0xb8dc6e16,0xb937eb24,0x388eca68,0xba8cd931,0xbad81d03,0xbae6fa3d,0xba64cd1c,0xbad7fefe,0xbace06a9,0xbafe3890,0xbafbc4f4,0xbad6dd3a,0xbadcb691,0xbadbc53f,0xbac57a01,0xbabb78ea,0xba1f1be3, -0xbaf16a12,0xbad8fdc4,0xbad4147a,0x390273c7,0x39607780,0xb823e05b,0xba20f904,0x38955648,0x39c481af,0x3a56a43c,0x3924246e,0xb881586e,0xb9b42d2f,0x39bffad8,0x39733017,0xb9f922b4,0xba896f2b,0xba95299f,0xba168354,0xb9cc7a8d,0xb901487b,0xba069abd,0xbadb68fb,0xba198097,0xb9ec8d34, -0xba979c9d,0xbaadd46c,0xb9b68038,0xba7b67cc,0xba69fcb2,0xba0278c6,0xb9440963,0x38a47130,0x38843ea9,0xb9b9368c,0xba640339,0xba5deb73,0xb998cebf,0xba223140,0x39d68cc9,0x3a744afe,0x3a1b6582,0xb9ee0435,0x3a4ba5b0,0x3a9421f9,0x3b0f739e,0x3a2cd222,0x393c8af5,0xba186824,0x3a7d5180, -0x3a7bad1c,0xb8eae790,0xba8e30a0,0xbab008dd,0xb9c5eddc,0xb9bec437,0x37c3aa36,0xba954253,0xbaa9cc05,0xba6b3e36,0xb9fa6443,0xba748a9f,0xb9f5d289,0x39197c55,0x376b57df,0x39655dce,0x387bda37,0x38a4b343,0xb8bd34b3,0x38c5eef1,0xb923543d,0xb9ef6fe8,0xba5e1408,0xba0197d6,0xba451934, -0x39450134,0x3a3371de,0xb9dc21e8,0xbb062a74,0xb9448ec2,0x3a9b9dde,0x3b46eee7,0x3a5e0075,0xb973454b,0xbab3828b,0x3a95197f,0x3a49debc,0xbade98b3,0xbb7ae158,0xbb7f3bca,0xbaf07a60,0xba64b065,0xb92b815f,0xbaa43b7a,0xbac61109,0xba08e977,0xb9b62c72,0x38afbf50,0x397d15e8,0xb7c9bd1e, -0xb6811f9e,0xb86fc074,0xb811fc6e,0xb7717107,0x374ba199,0xb7a64af7,0x388f5127,0x38ccb8a0,0xb9b1b9f2,0xb9db4824,0x3a0cb75d,0x3adb45ca,0x3b7add4d,0x3b9e497f,0x3beb3e1d,0x3b932d1d,0x3b497c71,0x3b5964d4,0x3b240984,0x3b18ccfe,0x3b348d44,0x3b401b59,0x3b98db97,0x3bd71fe5,0x3bfd46cd, -0x3bccd7f7,0x3b53f0fa,0x3a0997a0,0xb9ec9e02,0xbabf7f72,0xbac298bf,0x3a061012,0x396f0f5a,0xb7eaa51b,0xb8c8303d,0xb72f3611,0x3700e382,0x37962a65,0x37939327,0x3694d5ed,0xb654de3f,0x37062f79,0xb84f44c2,0x37b3e8d4,0xb7eab177,0x396e68c4,0x39d5b478,0x3b0da332,0x3b36d731,0x3afc2ac7, -0x3a017fda,0xbb14ba2a,0xbb69872b,0xbb2cecb0,0xba1a2785,0x3ae06aed,0x3b700b28,0x3ac974cb,0xbab6faa6,0xbb893055,0xbb8013a1,0xbb1c61eb,0xb9c838ed,0x38ea40b8,0x3a037c4a,0xb9d49d1b,0xb8457ddf,0x38982889,0xb95760c2,0x38504492,0x37f9d1f6,0x379f8e77,0xb6d112bc,0xb698d1de,0xb72a14ed, -0x36374b29,0xb6dd0edd,0x378a4947,0x340941b7,0x383a1c02,0xb8e26361,0x3a3b77a4,0x3b99477f,0x3bc2d0d1,0x3b5995d9,0x3947f806,0xbb4c80ec,0x3b5be57f,0x3bd5bc49,0x3ba7b31d,0x3bc5d7d9,0x3b1564da,0xbb7a771f,0xbaad18d7,0x3b047f1b,0x3bc816e1,0x3bbbd117,0x3b8884f3,0x3af6c6fa,0x3ac5977c, -0x3ac88f98,0x3a8e39dc,0x38923d49,0x38e879d4,0x384d7c39,0xb7350894,0xb805178c,0xb73949d4,0xb6732fdc,0x3654a134,0xb4aa482e,0x36ae0006,0xb772b28c,0x37a5dd04,0xb8b750f6,0x39092a1b,0xb9a5508b,0x3a023b46,0xbb9f5584,0xbc77d70b,0xbb9c523f,0xb934407d,0xb9dfe966,0xbac33f35,0xbb612e8e, -0xbba7afdb,0x3aaf740f,0x3b8c9550,0x3b4e68fd,0x3990d3f8,0xbb1341d1,0xbb1f06c9,0xbb32fe0d,0xbb13526e,0xbae0102d,0xbaae6dfe,0xba9efc94,0xbaa23095,0xba928f5b,0xb9f63652,0x37affc7d,0x37e8eb14,0x37ede750,0x37b34c91,0x36f293c5,0x364187eb,0x35b69adc,0x35c8bd92,0x36cf5eab,0x378153b3, -0x381231a8,0x386a8253,0xb8808081,0x38137a7f,0xba387611,0xba29fecf,0xb9c0bfb0,0xbadef6ad,0xbb06a576,0xbad145b6,0xb9fe1a6c,0x39b3ca42,0xba675267,0xbae921ff,0xbafbfb6b,0xbace268d,0xba63c202,0xb9c7917b,0x3846ce99,0x3a1c3a5a,0x3ac8431e,0x3aeba5bf,0x3b114b08,0x3b146f2a,0x3abe9a92, -0x3a2cb15f,0xb8c7ce19,0xb84f5d46,0xb8564128,0xb824827f,0xb7839435,0xb7201c4b,0xb6281ac5,0xb718069b,0x35ddb0c7,0xb8836760,0x36e4ac6a,0xb998bb53,0x39e75647,0x37de30cb,0x3a8226cd,0x3b134104,0x3b2a4354,0x3b24cfbd,0x3b0783da,0x3ac30405,0x3a23408f,0x3866fb2b,0xba93e79c,0xbac972dc, -0xbae4d694,0xbad32799,0xbadfd98a,0xbb030f13,0xbaa9a0f6,0xba45ab64,0xb9aa86b1,0x3911be20,0x3a04a9bf,0x3a29c802,0x3a58928b,0x3a43d288,0x394b55b7,0x38db408d,0x38f41ec5,0x389b57b4,0x3809cd77,0x3774d69c,0x3720ac23,0xb5df484f,0x37c72fd9,0x385a4060,0x39248b17,0x39518d83,0x3a1467df, -0x3a8cdb88,0xba9f509f,0xba5a6ebf,0xb9e36951,0xba2b233b,0xb9fed435,0xb9e4bf11,0xb9b7d6c9,0xb9b0e55b,0xb99bb6b9,0xb9afa023,0xb9d82bfe,0xb98d6f7a,0xb8c00083,0x383e9bf6,0x38ff0d5d,0x391029a6,0x394b39c2,0x39949923,0x3a023500,0x3a062309,0xb881311d,0xb928a756,0xb96d33d5,0xb99e7f81, -0xb9a735c9,0xb8f3f777,0xb8868a83,0x3648a0b0,0x369feb03,0x3870048e,0xb7a96527,0xb85b2c12,0xb9bb4608,0xba2ef208,0xba981dae,0xba8813eb,0xbadd151c,0xba9f120f,0xba6170d5,0xba1173b2,0xb979ee17,0xb7e4aff6,0x39735d0c,0x3a03ffeb,0x3a2f835e,0x3a5fea3c,0x3a855be8,0x3a915c51,0x3a98d6cd, -0x3aa6d2ac,0x3aa893fb,0x3ab0320c,0x3ab6e02b,0x3abb3d6f,0x3abd62ee,0x3acf3db6,0x3a9358bf,0x3a91ee0a,0x3a4e4186,0x3a008d87,0x396e42b7,0x380c596b,0xb8d7c688,0xb98cd5b1,0xb9ee4fb6,0xba06b31e,0xba17f65c,0xba486c38,0xba58b0a7,0xba832a90,0xba898529,0xba7a63f1,0x38a2ab77,0x39f71717, -0x39f14fa6,0x3a0e835d,0x3a20dd84,0x3a3bcadb,0x3a51c025,0x3a683799,0x3a702ced,0x3a7b8949,0x3a84c301,0x3a8e3976,0x3a9857d5,0x3aa231fd,0x3aa1caac,0x3aa1f324,0x3aa171b8,0x3aa2873d,0x3a9f56b8,0x3aabb725,0x3a6801b5,0x3a0b4eed,0x39e16264,0x3a4617d3,0x39b52e21,0x39824a5b,0x3945a767, -0x39099ea8,0x38b4ca48,0xb6dc7af5,0xb8ab5a23,0xb910f816,0xb8d66f54,0x39748dc3,0xb9649ee6,0xb9742907,0x3aa05f96,0xba3ad079,0x39651aa4,0xba4fdd88,0xb9f1316a,0xb9f49e64,0xba2294c7,0xb9cfe13f,0xb9bc77b9,0xb98f4687,0xba0c8b8c,0xba261d0f,0xba585236,0xba047494,0xb9ff810c,0xba2817f4, -0xba574468,0xba64caae,0xba4dd234,0xba3bffe5,0xba318ee2,0xba7c8c41,0x38bb680d,0x39b01e88,0x38fe9277,0xb92ff86b,0x397a0388,0x3943662a,0xb88acc68,0xb87bda04,0x39370d57,0x39835d5a,0x39b23a5c,0x39e66a44,0x39c3694f,0xb91fadc9,0x3889c176,0x39fe693d,0x39e8d63e,0xb9f1c3fc,0xb9f17f1c, -0xb9c0eab4,0xba4f5d27,0xb9298cd2,0x38abe953,0x39b690bf,0xb9c584c1,0xba3af86a,0xba998704,0xb9b1f7f8,0xb9ec3d02,0xba95d425,0xbae98ab2,0xbaf69041,0xbabc5a29,0xba8526b7,0xba7390dc,0xba606678,0x383cc2c6,0xba0750b7,0xb8ac3888,0xba5c9362,0xba632612,0xb9a7eb3b,0xba509ee2,0xba255cdb, -0xb9405909,0xb91e55d4,0xb9403a5a,0x3967ccb4,0xb9bcc4a0,0xb9bd0c66,0xb91ca900,0xba01d156,0x39cafc27,0xb881b88f,0xb8a0aba9,0x39ad9bec,0xba196645,0x3a312da4,0x3a80754c,0x3ad1bd6b,0x38a9bafb,0xba0ec3c5,0xbadaf05d,0x394fd0d8,0x399256ad,0xba29c2af,0xbaf01f1a,0xbb0c98e8,0xbabe00de, -0xba8d4779,0xba8aadef,0xba8d0400,0xb9cb0c45,0xba239ac3,0xb99b5e8c,0xba20fea7,0xb8b5b1fb,0x3905a5cf,0x38ba64c5,0x390cce34,0x384b07ce,0x38196efa,0x3711101d,0x387c90c6,0x37417bcd,0xb98f5bc5,0xb99e8e51,0xb96e892b,0x39051b3e,0xb9a98e87,0xb97190b1,0xb980c270,0xbad5b953,0x39c91b2c, -0x3ae35807,0x3b3a81e1,0x3a143363,0xba7f7fa8,0xbb313283,0x39545702,0x38a73e0a,0xbb1483ca,0xbb95f983,0xbb9daa2f,0xbb4f01de,0xbae0c22c,0xbab54f2f,0xbabb9a12,0xba3c5720,0xba4cd77f,0xb84f4c79,0x38ab23d0,0x3907e10a,0xb88b5ea8,0xb7809dee,0xb8359461,0xb7c0e530,0xb720d47a,0xb6366a87, -0xb80b0084,0x3712e94a,0x38d69126,0xb961d8df,0xb9bfbf8e,0x3afc8356,0x3ac1611a,0x3ad557d5,0x3b47094c,0x3bb6434c,0x3b5f3b31,0x3b10d130,0x3afcb98a,0x3a8905bb,0x3a43de7c,0x3a604b52,0x3a4ac378,0x3b186a41,0x3b8ee0a0,0x3bcfc9fd,0x3baf0513,0x3ac461cd,0xb95a1f5b,0xbab5b082,0xba75d408, -0xb9310f51,0x39596b37,0x39544539,0xb8cbad48,0xb7f85ca7,0x36dbfbac,0x3786131d,0x374ca320,0x375fd196,0x36556a9b,0x360316c1,0x37980e95,0xb79bfd97,0xb72d0d5d,0x37d731ff,0x3a21544f,0x3aaaf5ea,0x3a9e583e,0x3a734800,0x3accddd1,0x3a6b2b4a,0xba8ca683,0xbb0d719f,0xbaebcc99,0xb9c480a8, -0x3aa98157,0x3b3b0939,0x3ae80f63,0xba2722b3,0xbb670ea7,0xbb8b449e,0xbb5e997c,0xbaded392,0xba0ee3e9,0xb9b4fe69,0xb8820801,0x39ef143d,0x37d45d16,0xb8e04dbb,0x38229ec8,0x37c8ce25,0xb66e63aa,0xb6a29b82,0xb6ccdc2f,0xb6da836a,0xb5850d1b,0xb6a2df03,0xb664bbd3,0x36b3beeb,0x377cc260, -0xb848425d,0x394c1058,0x3b897f19,0x3ba91250,0x3b4700b4,0x394c0e11,0xbb4053fb,0x3b25f624,0x3ba882e2,0x3b6f64ab,0x3b76aea3,0x39f5e3a3,0xbb92e7ee,0xbb4d15bd,0xb9545684,0x3b816f23,0x3b9238e4,0x3b78b6c8,0x3b056de1,0x3ad859ff,0x3a5a3962,0x3a47f258,0x3958ab36,0xb8bb0c7c,0x38e59e86, -0xb8827d5e,0x34eb078a,0xb739eab9,0x368def5a,0x359c6cd8,0x3650d68a,0x369297f1,0xb6218217,0x378c4be0,0xb82dffcc,0x38823f5f,0xb93227b9,0x399c24ed,0xbb8ff0c2,0xbc5671ae,0xbb769b95,0x3a462289,0x39028b1c,0xba2148db,0xbb373aae,0xbbbc3ca9,0x3a7bb178,0x3b90723b,0x3b97f605,0x3ab57338, -0xbaa656d9,0xbaf23a56,0xbb1f07ea,0xbb19b9fd,0xbb15521e,0xbaf867de,0xbafc3cc4,0xbac3856d,0xba54d134,0xb9d8c232,0x38f855d8,0xb6bfbe7c,0x380cc13d,0x3689c08f,0x36c6bc0e,0xb5d3c10b,0xb5e12d99,0xb6b97b12,0xb6003461,0xb705dabc,0x37b3643b,0x379c4e27,0x38012869,0x38a28cf1,0xba3c964f, -0xba91b6cf,0xb98a5772,0xba211c7c,0xbaf38de9,0xba99615f,0xb9eedf3e,0xb8e96f92,0xba702758,0xbadb2249,0xbabd63ac,0xba962831,0xba09ed5a,0xb954cd08,0x3942ae6d,0x3a34e52f,0x3ab1c364,0x3aefc21f,0x3b004541,0x3b04961e,0x3acc6f27,0x39d594e9,0xb928ddaa,0xb805ff8b,0xb820d237,0xb7b41f34, -0xb6efc3e4,0xb68d620e,0x371085b9,0x3505a287,0x37d3c7bc,0xb7eb0cac,0x385d7542,0xb972cb1f,0x3988117f,0xb9a46841,0x3b1aa71d,0x3b3f4e5a,0x3b0c857e,0x3b114461,0x3ab4d335,0x3a222516,0xb9d67eb8,0xba628895,0xbad8f1bb,0xbaf25c61,0xbb013d5c,0xbae7400d,0xbada1e4d,0xbae6ddde,0xba876027, -0xba2500c5,0xba060411,0xb8889522,0x39ba7fea,0x3a64864c,0x3a7d7f32,0x3a436630,0x3983b651,0x38991d98,0x38b9718f,0x380f3e5f,0x37953d77,0x36068e1b,0xb743d09f,0xb7cdb0a3,0xb77b7e58,0xb83b254f,0x38c33d56,0x37dc9be7,0x3a0b4e48,0x3aa0acb0,0xba04ce18,0xba2abffa,0xba407457,0xba381eeb, -0xba36518b,0xba16d8a3,0xba0be1b6,0xba24f66b,0xba0aa96a,0xba107654,0xba19a896,0xba1a0d34,0xba0f3ea7,0xba035b27,0xb9da7c74,0xb9b121fb,0xb991853d,0xb8c3cf83,0xb8d8b49a,0x39969cdb,0x3933227e,0xb913cce9,0xb94ef183,0xb99b274d,0xb93dc321,0xb84807d3,0xb744087a,0x3794d354,0x385c431c, -0x38af15da,0x38b380af,0x390e458d,0xb8e8243e,0xb98f4640,0xb9ca2e61,0xb9ff016f,0xba660858,0xba93d3cf,0xba794cea,0xba3b6f67,0xba11ae62,0xb9f9c68d,0xb9b8095c,0xb93368d7,0xb782c485,0x3921789a,0x39ad8dc9,0x39f998a9,0x3a26fcaf,0x3a63655b,0x3a67b0f9,0x3a74d4c5,0x3a7da281,0x3a85ff93, -0x3a868f5e,0x3a92cb28,0x3ab04636,0x3a4877c5,0x3a1ea894,0x39bc3104,0x392a0191,0xb908b2d3,0xb98289d6,0xb997fb21,0xb9c3d913,0xba091442,0xba3c3470,0xba489be3,0xba6496fe,0xba54ece1,0xba66627a,0xba8b31e3,0x39f0e8b4,0xb90bb786,0x37770f1c,0x380846be,0x389600e2,0x391b8359,0x3951efac, -0x396c6cfb,0x398a13c6,0x39a319a7,0x39c122a8,0x39ea4d6c,0x3a07aac1,0x3a1cffd3,0x3a1c6bf3,0x3a211587,0x3a23cba2,0x3a262203,0x3a2e5822,0x3a106222,0x3a8d24bf,0x3aac9f6f,0x3aaf5392,0x3a570bba,0x3a9acec9,0x3a96b923,0x3a8e1d50,0x3a7d8e48,0x3a6393bc,0x3a5377cf,0x3a45b9b1,0x3a293b39, -0x3a2ab2f6,0x399b66d2,0x3a201ff5,0x3a2ef53a,0x3a1446da,0xba495a60,0xba9e2bb7,0xba017b13,0xba0933ef,0xba0fded7,0xba3a1b8b,0xba227b16,0xba1a10d1,0xb9ca293b,0xba2c80d9,0xba41c1f8,0xba72bfb1,0xba1f060f,0xba1adebe,0xba44b4b6,0xba64a5c7,0xba6eafe8,0xba61a37a,0xba4c4671,0xba421570, -0xba337110,0xbaa963cc,0xbaa4167c,0xb9fe6718,0xba9d4bcc,0xbaa67d69,0xba0e4fac,0xba67af14,0xba6f8bfd,0xba2d74cd,0xba31f835,0xba24a8e2,0xb9e09153,0xba946196,0xba901eed,0xba18c913,0xbaa28fb3,0xba7f4387,0xba418be9,0xb9b9712f,0xba1551db,0xba7a9300,0xba4cffd6,0xba21f80a,0xb8384a8e, -0xba41e83a,0xba8198f3,0xbabbb08f,0xba0a037c,0xba10a6b3,0xbaa04457,0xbae2cfd9,0xbafa4aab,0xbad6080a,0xbaab1957,0xba745cd0,0xba9a85fe,0xba8731f6,0xba4094a8,0xba4a0853,0xba949db7,0xba8b98ab,0xb9f2a0ec,0xba3cb082,0xba29e47f,0xb9c5d52e,0xb9a0eda2,0xb931f3af,0xb5fe6339,0xb9ff7c4d, -0xba5fc20c,0xba599f98,0xba3b6543,0xba4ab1a9,0xb9eb4280,0x39581ef9,0xb86551c3,0xba3f81a3,0xb9dbe487,0xb9ba318a,0x3a7e81a6,0xba1d142b,0xba890dd0,0xbb0bb738,0xb99abd1b,0xb9323928,0xba98540f,0xbb023a03,0xbb16e429,0xbaedd05f,0xbab93c4e,0xba7929de,0xbabc5c5a,0xba984f52,0xba58f5e2, -0xb9ffe0f3,0xb9aa413d,0x388838eb,0x39338214,0x391af974,0x39852694,0x390756e5,0x38f6826f,0x37be3c8a,0x38a78589,0x37bdc811,0xb977b22c,0xba22b37c,0xba267ec9,0xba3b6cf0,0xba1aced7,0x397606ff,0xba0a14a3,0xbadb3ef3,0xbaab58cf,0xb9ff223d,0x3acfeacc,0xba25ef5b,0xbaf6857b,0xbb5cf260, -0xb9e4d54e,0xb9b9b554,0xbb2dbd9b,0xbb973c95,0xbba69217,0xbb80f671,0xbb25604f,0xbab9fc00,0xbae48eee,0xba9bcfbe,0xb9dbd689,0xb8a34a7a,0x393a28df,0x370c4bb7,0xb88a3dd1,0xb885a520,0xb8cfa12f,0xb88a6654,0xb83543ba,0xb7921d15,0xb8150d1c,0x36918313,0x390a5cda,0xb7f359e3,0xb9cd04c0, -0x3998432a,0x39b15a1d,0x3a992a42,0x3afeb445,0x3b9660a1,0x3b22942d,0x3aa261e1,0x3a2f5f8b,0x3a8425fa,0x3aa96998,0x3abc4212,0x3ab3f933,0x3b2780b4,0x3b8cacfa,0x3bc7f9aa,0x3bb087e0,0x3b2e8107,0x39ef91cd,0xba3f9fa4,0xbabfcc83,0xba371b2e,0x39be6ced,0x376b2c4c,0xb8663b55,0xb7d14c06, -0x380ec8f7,0x37f5b32b,0x383c82ea,0x380add5a,0x37af0173,0x371833c0,0x37b2e2b2,0xb7966376,0xb81a237e,0x361af938,0x38a3a4d9,0x39c067dd,0x3a730aa0,0x3b02bda8,0x3af8ff90,0x3aa17867,0xbab72f99,0xbb32a38c,0xbb22438b,0xba34565a,0x3a8cd650,0x3b1f3b00,0x3ae28e3e,0xb9cb2b84,0xbb57ff03, -0xbb8d6104,0xbb85798d,0xbb3c8520,0xbae68a35,0xba3ecab4,0xb9d9e877,0x39480a42,0x365aa7f4,0xb8b9065f,0x387ef030,0x3251b8d8,0xb709cd7d,0xb7a15b23,0xb7ab9cd9,0xb7ac80ae,0xb719a6d1,0xb7527ec2,0xb50cefd4,0xb713e469,0x3865087d,0xb894e1eb,0x39581990,0x3b588547,0x3b915972,0x3b206d0e, -0xba2840b1,0xbb9e5a4a,0xb9f93dcd,0x3b0ef5dc,0x3ae6116a,0x3b6cb114,0x3abdfc33,0xbb5690a7,0xbb3a1b80,0xba4c4f0b,0x3b334567,0x3b891ff1,0x3b860c87,0x3b259b79,0x3aff1bbc,0x3ab3e797,0x39cb40df,0xb9b7bcbb,0x380334d5,0x38068579,0xb81412f6,0xb6370c07,0x364f72d6,0x374233ba,0x37701624, -0x3764b16b,0x3753a279,0x363c9423,0x37aa30df,0xb81a7480,0x38640e15,0xb9282583,0x38b651be,0xbb80d414,0xbc3d135a,0xbb92ed59,0xbac6476a,0xbaf90905,0xbb0a0f8e,0xbb6e8bfe,0xbbb2c69b,0xba576329,0x3b1620b8,0x3b69805e,0x3a1c6575,0xbada628a,0xbb0cf16f,0xbb315837,0xbb302157,0xbb22de19, -0xbb094bc0,0xbaeadefc,0xbad9dcc9,0xba95a963,0xb94c15a1,0x38ac9193,0x33272e6e,0x37a43a25,0xb6caca7b,0xb70b3846,0xb7893b71,0xb79171ef,0xb789bf20,0xb723607f,0xb78b69fe,0x37a008c1,0xb57cc2ed,0x388cad41,0x39899cbb,0xbb1c9c88,0xbb8dbb1e,0xbb04d250,0xbae99913,0xbb2ffcf4,0xbb16cdc7, -0xbad0b757,0xba791131,0xbad18068,0xbb1b3c08,0xbb2de278,0xbb11a78e,0xbac1fc02,0xba92fa47,0xb9ad9bfd,0x39c88a9c,0x3a9f0bd4,0x3ac721fb,0x3ae0f320,0x3ad9eda0,0x3a747b26,0x3940c937,0xb90b364a,0xb72404af,0xb7fca2b4,0x36e65d65,0x375350a9,0x37d8b16b,0x381158a8,0x37c66e16,0x38103f5c, -0xb6115a6d,0x383c60bf,0xb92f622f,0x394936de,0xba697b82,0x3ad72546,0x3adce54f,0x3abb4c01,0x3ab5760e,0x3a7bff62,0x3a0a3ef0,0xb97b82ac,0xba49ce31,0xbab06040,0xbac04c78,0xbace156b,0xbad3a235,0xbae69ae2,0xbafebd66,0xbaa6ec87,0xba508fab,0xb9c733f4,0x391c7c78,0x3a20df6c,0x3a83393d, -0x3a811a80,0x3a2025d7,0x388e3ed3,0x38ce24b4,0x37f806ce,0xb6e330c8,0xb7e30638,0xb86b6b74,0xb889633b,0xb88e0d5b,0xb820336c,0xb89c2ec6,0x38471519,0x37f30809,0x39a8ec69,0x3a479951,0xba649ad7,0xba1e0de5,0xb9e4c809,0xba29b351,0xba2e2a97,0xba3b744c,0xba3a5a3a,0xba55609d,0xba4e8bac, -0xba65eb00,0xba790336,0xba63307b,0xba3fdd20,0xba2d0e5b,0xba0aab60,0xb9e1b59b,0xb9a72370,0xb98716d7,0xb92f5f18,0xb8d31395,0xb9c63b3a,0xb9b32025,0xb98fa499,0xb967fa81,0xb83b46ad,0x38478c30,0x388cf1a9,0x3915ab4d,0x391fcc52,0x393432ae,0x38e09d16,0x3942695e,0x37a7c219,0xb9680b18, -0xb9f84782,0xba17e21d,0xba972358,0xba96e73f,0xba720550,0xba516ba3,0xba26b17c,0xba13a693,0xb9f29f7f,0xb9b9fdf1,0xb908e9e9,0x38d9d955,0x39a34c79,0x39f3bf95,0x3a16ee4b,0x3a38f4a6,0x3a444bad,0x3a5517dd,0x3a692f78,0x3a787222,0x3a8779e1,0x3a9152af,0x3a63fd03,0x3a0cce6b,0x393b6e70, -0x371d3122,0xb94b5c3f,0xb9afb590,0xb9be9ff6,0xb9ddebbb,0xba01bf9e,0xba0efad6,0xba1af5c8,0xba3fc360,0xba592f93,0xba76ae7e,0xba8c961c,0xba84e1dd,0xb9cf7079,0xb9255c08,0xb911c2d9,0xb8fe3824,0xb8ba7e9b,0xb82df42d,0x35216e54,0x37714a42,0x38a0a624,0x38fd3856,0x393b03a7,0x3982d379, -0x39ad8c26,0x39dd24b9,0x39e1d0c2,0x39ea9846,0x39f0ab7d,0x39f7db7a,0x39fcf5ae,0x3a0d912f,0x397d88b6,0x39613877,0x3a2700b3,0x3819b972,0x3654ae1f,0x39b88444,0x3982a7f5,0x3913683b,0x38a128b5,0xb6fce560,0xb8734930,0xb8be7d1b,0xb9bd0329,0xb9c75d90,0x389d07d5,0xb9bdb04a,0x398f550e, -0xb937d712,0x39259a4c,0xb8c85f1a,0xb85dea83,0xb6e07dde,0xb9418c13,0x3862dc44,0x39036916,0x3997535b,0x37bfb486,0xb8b0a87a,0xb9adc6c8,0xb6c15b46,0x37bbe547,0xb8d2d869,0xb9618872,0xb98b01ac,0xb98c32e8,0xb93a1d62,0xb956a7c9,0xb95149ff,0x387c8dbf,0xb96f5e5c,0xba7ed37d,0x380e5c25, -0xb991d5f5,0xba5508d3,0xba7ef53f,0xba683110,0xba2b155f,0xba211532,0xba0ece2c,0xb9c4ba08,0xb8f85eb5,0x38d1ce10,0xba782a25,0xb92601e7,0xb9a3ab1a,0x3851cc11,0xb7281e00,0x379f7539,0xb9ce6eb3,0x395e75d3,0x3a085ed7,0x3a78e830,0x398f9835,0xb89b1d07,0xba2ac90f,0x39580959,0x395bd9b8, -0xb9b3516a,0xba47ec18,0xba709974,0xba4d0362,0xb9ea0353,0xb9b294e1,0xb98dd243,0xba0a5657,0xb959565e,0xb8eff31c,0xba29f65c,0xba19b2af,0x370b19f4,0xb9533cd8,0xb9130cca,0x38535c8b,0x38be0ec7,0x38b61a3a,0x399f253e,0xb91d49a9,0xb9d06ef1,0xb92d1f74,0xb8d6d443,0x396b8ba7,0x38ca69e4, -0x39acfd0d,0x39fe1e6b,0xb9a024e0,0x3a5bf217,0x3aa614b8,0x3b1536cb,0x3a59ea5e,0x3967c0f2,0xba950d01,0x3a2679fe,0x3a556bd0,0x38c4b346,0xba281762,0xba7c9401,0xba4a71de,0xb9ec748d,0xb9979842,0xba22edbf,0xb9b720b5,0xb9d31838,0xb98ae123,0xb8841f3b,0x38bf3de7,0x388bc2da,0x388ab259, -0x3896ee7f,0xb6223ed0,0xb6b79a92,0xb83627ab,0xb856202c,0x380df8f0,0xb8a0a9c3,0xb994905d,0xb8d67083,0xb8212a06,0xb9167df6,0x38d08c44,0xb8a73e25,0xbaaa87a0,0x39c33962,0x3aeae010,0x3b5f8851,0x3aabef4b,0xb965dc58,0xbb0de895,0x3a2c6355,0x3a813bb9,0xba56e914,0xbb1c85a3,0xbb3ca42a, -0xbb144d13,0xba960df9,0xba3a0666,0xba794095,0xba3b3e0a,0xb9a02c73,0x381e0177,0x388e69db,0xb7d375c9,0xb81748f7,0xb803de9f,0xb7fdae8a,0xb6c7e925,0x35ebb86e,0x378b743f,0x37866bca,0xb7879116,0x389137fe,0x3796efa2,0xb9327112,0x3a88d45a,0x3ac5e1da,0x3ac507f8,0x3b1eb591,0x3b9f58bf, -0x3b7156be,0x3b3d6fe2,0x3b13f319,0x3b192b5d,0x3b0f5dde,0x3aeaa882,0x3aa006bc,0x3aeb74f2,0x3b40ef2e,0x3bab605b,0x3ba338e3,0x3b2055e7,0x3a9c442f,0x39a96341,0xb8483de0,0x36dbb70f,0x398781e3,0xb800670c,0xb7c9ff84,0x35b4597e,0x37b0287f,0x376f6c4f,0x3773b7c3,0x36907f8e,0x34fdb24a, -0xb709bf67,0xb525b4e1,0xb68e0bc6,0xb74a3b14,0xb851a36a,0x394a598b,0x3a708fcf,0x3a98a48d,0x3aba3dba,0x3b0c40c3,0x3ace90fe,0x38a87022,0xba84b8d8,0xbacaa5c8,0xb8b35ba8,0x3a9b5998,0x3b09c71b,0x3b0449e5,0x39e8dd3b,0xbb01d202,0xbb4c6c87,0xbb392b61,0xbaa3f4e5,0xba104a19,0xb8eeafab, -0x3937bdc1,0x396908ec,0xb8592587,0xb7e9c7cf,0x380b3a5c,0xb6f97ff2,0xb6da106c,0xb7213a05,0xb6e093a6,0xb6934014,0xb544791e,0x34a6cb3a,0x34c95438,0xb55170ed,0x36f58be4,0x380f86e2,0xb902fcd4,0x3b2d9a99,0x3b8310db,0x3b17d5dc,0x39935aeb,0xbac5c4de,0x3b237b98,0x3ba6fd8f,0x3b96ec87, -0x3b972dc4,0x3b00dfd9,0xbb0b0e4d,0xbad09506,0x39fa97c3,0x3b714f2b,0x3ba75793,0x3b9cf353,0x3b387749,0x3b102475,0x3ab3f9f1,0x3a53a2f7,0x388a1371,0x3775cb13,0x3725e790,0xb7c554c7,0x36793366,0x3637ed84,0x36e2829c,0x36ab89eb,0x36992a47,0x368df5f6,0x361bbe3d,0x3702898a,0xb70474d7, -0x378ff368,0xb851a5d4,0xb91240ee,0xbb54d4fc,0xbc16632d,0xbb16840f,0x3ac6beaa,0x3b5a7eca,0x3b0f5f6e,0xb9d7a7c0,0xbb880ed1,0xba0050c3,0x3b222a43,0x3b9a40c7,0x3af5b488,0xb99b6842,0xba9ebdbd,0xbac551d8,0xbabd26c7,0xbabfc10c,0xbaa33fa1,0xbab4e99c,0xbab9b2a7,0xba6cbaa4,0xb8995559, -0x388a1673,0xb58917e4,0x37202837,0xb6c8a8ee,0xb6bc05bc,0xb6ee1a21,0xb6ff1a39,0xb711915b,0xb72300ad,0xb74772fb,0x33258129,0xb6a1751f,0x375fd783,0x39c895fc,0xbb318a4d,0xbb52b375,0x3adc841c,0x3b2059cd,0x3a8d3634,0x3ab37d2d,0x3ac52cea,0x3a9c869d,0x3992dfd6,0xba1498c9,0xb9c3253c, -0xba175709,0xb95d11d5,0xb8d1822c,0x39175ac7,0x3a004cac,0x3a894ccc,0x3ab5a617,0x3ad55cc5,0x3aecaacc,0x3a8d2f62,0x38c0dc12,0xb90df0b2,0x373e6732,0xb7cb7151,0x37591275,0x36f0a3f6,0x375e8ed8,0x37814390,0x378d4e6f,0x37d25ef5,0x3797dd16,0x37a65237,0xb7dd5c2e,0x37d5a499,0xb9f62bcd, -0x3ad4124f,0x3b2575ca,0x3b0acc89,0x3aee55cb,0x3ab097c1,0x3a636581,0x39517aa4,0x39317da1,0xba78ee7c,0xbab49d8e,0xbad522e2,0xbab12eb8,0xba949671,0xba87c7d6,0xb9a3f11e,0x38a11cff,0x391f36cd,0x3a0eb03f,0x3a497179,0x3a81a405,0x3a7cf852,0x3a139135,0x3816f08b,0x3897bee4,0x37162e57, -0xb7391430,0xb7aaa52d,0xb7d246d4,0xb80ac01a,0xb81fc9b9,0xb849c520,0xb8652dc8,0xb7a07e65,0xb4da9604,0x37ff310f,0x3a7c5f34,0xb8c00618,0x38b0b748,0x38a29bbd,0x37dd8290,0xb7891ebc,0x37ff5169,0x389458f7,0x388b8fde,0xb5cae417,0xb8eee466,0xb9a3b92e,0xb9fa72a2,0xba24f51a,0xba547b09, -0xba30f7f3,0xba11a862,0xb9e35933,0xb9904e71,0xb94f9845,0x3863b45b,0xb9342ecc,0xb9916d66,0xb95e408f,0xb905b832,0xb73b7fef,0x38061aee,0x3838495d,0x387790c5,0x38a4810a,0x38b471a0,0x38ed26f5,0x3902370b,0x38caf899,0xb78fc68a,0xb8528648,0xb7e7043d,0xba830622,0xba29c920,0xba08f2b8, -0xb9b1c140,0xb94d35c8,0xb8b57c0f,0x37c6c5fc,0x3934d5c8,0x3939d5e3,0x3953f3af,0x3983e9e5,0x398e88f3,0x39a52e6b,0x39c90698,0x39eec3ad,0x3a069f4e,0x3a168a20,0x3a278e7e,0x3a29eb5d,0x3a5887e2,0x3a580361,0x39f7a7c8,0x39a09b82,0x35d81917,0xb8d5c197,0xb8c1172b,0xb908a4ad,0xb9377b09, -0xb9694bab,0xb98850bf,0xb992e74d,0xb9d488e6,0xba10b8fc,0xba2b3692,0xba3a85be,0xba356740,0x3936f6f1,0x378ff7dc,0x37d260bc,0x389e5c7e,0x38e51db6,0x392b4079,0x3959333c,0x3987679f,0x39755431,0x3975c653,0x39773860,0x39852986,0x398e5bda,0x39936c5d,0x39a0a488,0x39ad6ff0,0x39b6e1ed, -0x39c74352,0x39d37d1b,0x39c5d659,0x3a23ab20,0x3a136c97,0x3985bfe0,0x3a01cb19,0x39d2e7d8,0xb7a9bba1,0xb872e149,0xb8cf0484,0xb921cd66,0xb95549cf,0xb98cca40,0xb99b3ca3,0xb61d38dc,0x38ee4b5f,0xb99fab62,0x382b1ce0,0x39c2bfdf,0xba7df13d,0xba59a3a4,0xba7e80f2,0xba411f47,0xba4d1094, -0xba60311d,0xba60a08f,0xba5cef85,0xba29d694,0xba691a19,0xba7dbb6b,0xba997043,0xba6210b1,0xba59f2d9,0xba788e94,0xba875e4c,0xba8cc2b1,0xba8fd762,0xba831e7c,0xba6f1ece,0xba84dab5,0xba5e0def,0xb9f3f956,0x398b0125,0xba75ee66,0xba1899e7,0x387016c9,0xb9146cce,0xb9117ff0,0x3845ece2, -0x382327fd,0x38e684f5,0x399d1b36,0xb9f78ea4,0xba74f047,0x39641b25,0xb9ea9b1e,0xb94f7ffd,0xba8c247d,0xba359a72,0xba49c5b4,0xba800dae,0xba81b63d,0xba69fb0b,0xb9cf4375,0xba85b4f9,0xbaa76d74,0xbae5a137,0xba6cc3b6,0xba611301,0xbab3d306,0xbae2e854,0xbafbf745,0xbaf8455a,0xbac938bd, -0xbaa10428,0xba9fa811,0xb98949d6,0xba1e9edf,0xba3efa6b,0xba3c9583,0xb9fe8841,0xb9852c68,0xb9a8e37f,0xb99f6c42,0xb93796c1,0xb9485f9d,0xb931420e,0xb7d61827,0xb9a44a12,0xba13063f,0xba1c31e6,0xba414fe1,0xb9fd9104,0xba6c2b4c,0xb9d3ca9c,0xb9d3dc7a,0xba488ff0,0xba4b1fb8,0xba5462a9, -0x39b47fa1,0xba848237,0xbab91ca2,0xbb263474,0xba632273,0xba295c13,0xbab0f6c2,0xbafbd01f,0xbb12155a,0xbb0f7592,0xbada55f2,0xbaae7ad2,0xba9abdbb,0xba1e7082,0xba102d14,0xb9145d64,0x38cc3c83,0x391ed2ac,0x38e59aaa,0x38dfb211,0x38e69489,0x3888e94d,0x3890cdd7,0x38390bd1,0x380bd627, -0x38d8a6d7,0x3817fefb,0xb959042b,0xba0758b1,0xb9e27b40,0xba8d9d66,0xb9cd8661,0xba213b28,0xbaa91a22,0xbab455b2,0xba5605b4,0x3a60ba27,0xba8f29c4,0xbb191f2f,0xbb7c4294,0xba9a312c,0xba5237db,0xbb249b85,0xbb80f46f,0xbb94d729,0xbb8b5b35,0xbb3dc832,0xbafb62dc,0xbacb43e8,0xba1c044f, -0xb959d16f,0x38c2c9de,0xb7877136,0xb88365a1,0xb854cfa9,0xb8424a39,0xb8427b42,0xb802e80b,0xb7f52733,0xb7901f9a,0xb7b76c63,0xb820c005,0xb4e4adc5,0x38e63087,0xb92ddb35,0x39e24035,0xb7f69f7a,0xb9a4e0bc,0x39bd91fd,0x3b3472ad,0x3ab7d38d,0x39f35835,0xba2b405c,0x39e1c52f,0x3a581d81, -0x39fb1f23,0x3930d94f,0x3a51ba85,0x3b134ff7,0x3b89e941,0x3b86e9ec,0x3b01331d,0x3a1e896d,0xba0a04af,0xba569bd6,0x38533440,0x38fc94d5,0xb7b8df99,0xb70b9a14,0x3808d155,0x37c2d3b7,0x37c2ae45,0x37b119f0,0x378cb68b,0x3759cb9e,0x3733ea7c,0x372052ad,0x37bba84b,0xb7486aff,0xb80db0e6, -0x388e95a4,0x39d1494b,0x39ab0870,0x3a9870ba,0x3ae6f4fd,0x3ada9e66,0xb9787094,0xbaaf4b51,0xbadb8e40,0xba045be9,0x3a20b34c,0x3ac60d03,0x3afaf574,0x3a268c3c,0xbaf6bd95,0xbb6aaec3,0xbb88ad2c,0xbb6c8dab,0xbb1d4ac4,0xbab3362c,0xb9b661c4,0x3954a4bc,0xb8cabaca,0x37a949f0,0x360c1690, -0xb7656bf1,0xb76694ee,0xb7456679,0xb7476c39,0xb7191578,0xb71ab1a4,0xb68e2148,0xb76d8660,0x36843e27,0xb7fbfe43,0x38c37aa4,0xb943fdaa,0x3b01560a,0x3b442037,0x3acf1463,0xba4d06ca,0xbb8f8cad,0xbb03f535,0xb8bb9979,0x398fb188,0x3ad9ce02,0x3a08ae50,0xbb2a4060,0xbb5de959,0xbb1452bb, -0x3a0937f6,0x3b327ff5,0x3b6836da,0x3b34bc36,0x3b0a318f,0x3a984f08,0x390fa615,0xb94b5c68,0x38492aae,0xb764271e,0xb691c329,0x37198863,0x370e9ee0,0x3714aad0,0x3709b2be,0x370c55f8,0x36edf1db,0x3708b084,0x3707f176,0x3722806b,0xb69a85b8,0x37f14dc6,0xb99c4777,0xbb208dad,0xbbed1e93, -0xbb671745,0xbadd484c,0xba8603b6,0xbab64117,0xbb2ce5d4,0xbb895e98,0xbae37661,0x3a70a07d,0x3b6d7a96,0x3aa6272e,0xba0d8d28,0xbac76152,0xbb0845e7,0xbb19b330,0xbb23424f,0xbb0be5fc,0xbaecc586,0xbacb1331,0xba36f776,0x384b8d00,0x37c65664,0xb3fb4ba1,0xb6c7e18f,0xb72c05cb,0xb720f961, -0xb72e2ad2,0xb73483e4,0xb744f6f7,0xb73dea63,0xb78a588a,0xb72faef4,0x360ef9ba,0xb878870c,0x3a015f47,0xbb1ab9fa,0xbba2657a,0xba90e9e5,0x388c9f1d,0xba8b495d,0xba77f80d,0xba668aba,0xba6b57f8,0xbaaf908a,0xbb0146b5,0xbb09889c,0xbafeb1ae,0xbab6f0b2,0xba9d9aab,0xb9d48989,0x39624d9b, -0x3a480fa1,0x3a96f252,0x3aa129ba,0x3aa563df,0x3a34c99d,0xb893ecd5,0xb8839cef,0x373c827a,0x364dc750,0x37a93bf0,0x3775f830,0x379a6d5c,0x37ada74b,0x37a535e0,0x37e7d198,0x37ae2ac2,0x38365719,0xb82358dd,0x38ff0dd5,0xb9ddc85a,0x3aee359d,0x3ab266df,0x3a04bd3a,0x39be19e6,0x36ae0137, -0xb9a07bb9,0xba5eb826,0xba911027,0xbaa344ba,0xba9f47e2,0xbaa8d830,0xbab0c7f5,0xbab6101e,0xbab336f4,0xba4b93f8,0xb9dbf84b,0xb9463779,0x396c52a2,0x3a1bbcf5,0x3a88fb96,0x3a6f442b,0x39b35178,0x370c6dbe,0x3806d351,0xb80c90bf,0xb7f76072,0xb81080af,0xb81958da,0xb82faac2,0xb8404013, -0xb842febe,0xb88f1237,0xb82b3cf5,0xb830396a,0x375f8190,0x39b92c77,0xb988823a,0xb9224240,0xb96eae5b,0xb9aaebbe,0xb9faf275,0xba1563e6,0xba23b609,0xba4c06ba,0xba5749d9,0xba784de6,0xba88efd7,0xba8529df,0xba79f466,0xba76d450,0xba599bd1,0xba3caf34,0xba20981b,0xba14bd2f,0xba1c4f8a, -0xb9f97ec3,0xb9e8051e,0xb9ae610e,0xb90dfa58,0xb62479fd,0x38802478,0x38a7fa75,0x389e66cc,0x38b6c920,0x38caccc4,0x38d753cb,0x38e92f56,0x39100011,0x39160840,0x388182d7,0x380beb91,0xb8168ff7,0xba174ea5,0xba5c7590,0xba496027,0xba461c95,0xba3d9dde,0xba3dae83,0xba3e94a7,0xba3b545c, -0xba0c2c1e,0xb9b9de23,0xb9509cd5,0xb8949e17,0x3800a87e,0x3916dd5a,0x394a2199,0x39810304,0x39a48319,0x39c4986d,0x39f36018,0x3a054068,0x3a138a2d,0x3894186f,0xb92d6a2b,0xb94e1c42,0xb9573e9c,0xb980eb8b,0xb972b373,0xb989d2b1,0xb98dca9c,0xb99d63aa,0xb9973ab6,0xb9c66271,0xb9eda5e1, -0xba179250,0xba3f898c,0xba536c64,0xb9ca1bc3,0xb9f73e2f,0xb9db6c10,0xb9e2cfe2,0xb9de88ca,0xb9db0e1e,0xb9d5fb7b,0xb9e22859,0xb9c9e073,0xb9bc1a0f,0xb9a6c5d9,0xb98e2a14,0xb9628874,0xb91f487a,0xb90d63b4,0xb8e995c4,0xb8c264c8,0xb89ff23c,0xb837d08d,0xb8703ab3,0xb7c24b78,0x393c3c98, -0x3a260304,0xb9657fe7,0xb79ff5a8,0x3998acb2,0x395de560,0x3910c7b3,0x38b6d2ae,0x37c3bcc0,0xb7f6dfd1,0xb85110d8,0xb9997550,0xba04f42e,0x394b4491,0xb936b1ae,0xb9929569,0xb8a422ee,0xb99e0c39,0x38bad09f,0xb7a9cc6e,0x37ff97ab,0xb8cf3fab,0x384a684c,0x38ead653,0x399f1c4d,0x389cc4ab, -0xb768e1fd,0xb96e01f1,0x37faa750,0x38744fab,0xb7dd37f3,0xb89460d8,0xb8e22415,0xb92bbfb4,0xb8a88ea0,0xb8e9ca2f,0x3877d43a,0xb9a78757,0xba37297b,0xba9f913a,0xb98369b6,0xba4484ce,0xba84578b,0xba90d11f,0xba87e32f,0xba649005,0xba607e0a,0xba52e3a3,0xba292d61,0xba1c0015,0xb9226b71, -0xba9a50a8,0xba3ecb8a,0xba5614d5,0xb77b02e0,0x3857531b,0x35d82280,0xb98be866,0x3890a6a3,0x39a16795,0x3a4bd0a2,0x396ddb32,0xb84e4891,0xba0ea959,0x391c79de,0x396048c9,0xb92cd42f,0xb9beeb96,0xba0af514,0xba1f5fe7,0xb9ccb254,0xb96185e5,0xb93588ff,0xba4c8c7a,0xb9180e7e,0xb9a9a88f, -0xb9ba4938,0xb95f6fc7,0x3915d233,0x38a2144c,0x38cce936,0x39040764,0x39076119,0x38d8ad80,0x39613b27,0xb82a41c8,0xb9bc1256,0xb9b84e86,0xb8b6f1c9,0xb9774206,0xb93153fb,0x39aba859,0x3981ad68,0xb937f892,0x39d4db90,0x3a3629ed,0x3aeee37b,0x3a2365ef,0x39340997,0xba7e927e,0x39b9f67c, -0x3a150e89,0x3894c7ba,0xb9607323,0xb9fe0160,0xba26a01a,0xb9c67ce7,0xb8c41905,0xb9de34ec,0xb9c9e0c4,0xb96096c0,0xb89f03c2,0x3906c8a6,0x38769580,0xb6704ae2,0xb6999777,0xb57fb5a1,0xb7e10645,0xb7aded8b,0xb7eb298f,0xb87022e9,0x3802118d,0x38bf7009,0xb91cc466,0xb9379618,0xb9a91301, -0xb9c7f9b4,0x39325d58,0xb90c281e,0xba5ec3e7,0xb8e022dc,0x3a6a3645,0x3b284dd6,0x3a60c597,0xb9b4284f,0xbaf870bc,0x398e0ac1,0x3a418bb5,0xb9f86386,0xbaa9b60c,0xbaf357b0,0xbb020fbc,0xba9f9167,0xba1ccaa7,0xba35ee0e,0xba0f02b9,0x37c74d65,0x378d730f,0xb7d5bcc8,0xb81a80ba,0xb4496dac, -0xb6a5ed44,0xb618cd9d,0x36e19f3e,0x36d29779,0x3732dddf,0x37b5bde3,0xb7b56790,0xb787807c,0x38871ec8,0xb7bc6295,0x397e6240,0x3a852cab,0x3a874fbb,0x3abe814e,0x3b5b6629,0x3b2f5f50,0x3b09deaf,0x3a99b900,0x3b1524b1,0x3b1ff310,0x3ae84f75,0x3a9e4935,0x3aa79808,0x3b00ba7e,0x3b7ac7e6, -0x3b83bfa4,0x3b3951d9,0x3af15ddc,0x3a9584e8,0x399b589a,0xb6413f5a,0x39076bba,0xb881934a,0x38024a8f,0x36f963eb,0x36d8bdab,0x35648773,0x36269348,0xb61908a5,0xb622a3bb,0xb69b890d,0xb70a3fc7,0x37358cf2,0x36bc61bb,0xb813d864,0x37f83e4e,0x397ac33c,0x3a81754c,0x3ab99c59,0x3afd9018, -0x3acb288e,0x39bd9340,0xba20cbfa,0xbaba4a9b,0xb97a7bc4,0x3a2ebf65,0x3aa8fac8,0x3ae6b135,0x3a5c1016,0xba8aaac0,0xbb16cc23,0xbb28d3eb,0xbad98174,0xba9955c3,0xb9fabd30,0xb8841bbc,0xb8334fa4,0xb7904f4a,0x361f41dc,0x3600f618,0xb74ab885,0x333c5aae,0xb6351959,0xb57813bf,0x351cc536, -0xb5512974,0x36ae31d0,0xb6bd2be9,0x373a1723,0xb82412d0,0x38b94632,0xb91c2a7b,0x3a9ac258,0x3b246524,0x3ab06d98,0xb8597ab6,0xbabeb608,0x3a25c323,0x3b2f2d3f,0x3b53c5bb,0x3b6f2b9d,0x3b0cf10b,0xba37b26b,0xba8e59f0,0xb7fc948d,0x3b0c06e9,0x3b7f1e46,0x3b87423d,0x3b393997,0x3b0deee0, -0x3ac28fce,0x3a1edab7,0xb82ee259,0x388a145e,0xb82bee86,0x378f3bc1,0xb60127c6,0x36ad6d44,0x3461e418,0x360e3a20,0x355893e0,0x3551973e,0x358af785,0xb5222b99,0x373b16ce,0xb7869862,0x388e4547,0xb99c4c9a,0xbad305eb,0xbbb43919,0xbb011774,0x39b19d82,0x3b598bf6,0x3afab390,0xb8b26d21, -0xbb25c6d4,0xbacbc2d5,0x3a0a2480,0x3b648e60,0x3ae91fd3,0x39af3387,0xba6177bb,0xba834eaa,0xba88726a,0xba940c3b,0xba7efda1,0xba7b65fc,0xba98b585,0xba1d3018,0x390e342b,0xb7ac8287,0x372274e6,0xb71f613d,0xb500014b,0xb6806504,0xb5dd1b67,0xb6852c67,0xb51bbd73,0xb7037b56,0x36cacce1, -0xb80b49e3,0x3865f1f8,0xb933db56,0x3a103291,0xbb2386fe,0xbb7fcaa8,0x3b09295f,0x3b568cd8,0x3b18171a,0x3b0b44e1,0x3af18863,0x3a9f7ac2,0x39adcbd8,0xb9ec49e5,0xb9e72336,0xba4b4dec,0xba044dfc,0xb9e45040,0xb8c67548,0x3954f522,0x3a1f0fed,0x3a61285c,0x3a9322b8,0x3aaebabf,0x3a109794, -0xb90a7c2e,0xb784d793,0x370d3f7c,0x36456bae,0x36f83d49,0x365acdcc,0x36d72ca0,0x368dfe3a,0x371b8397,0x35aeef42,0x37bd2410,0xb716a289,0x388a80de,0xb8c4e911,0x3974bd28,0x3a80d588,0x3ac03c8a,0x3a954f14,0x3a2a653b,0x3a035555,0x399a7379,0x3803d1ad,0x396e1ca3,0xba06b55c,0xba5897ad, -0xba895c79,0xba69a64f,0xba467dca,0xba1f037e,0xb886199c,0x398dfad0,0x39d0fbec,0x3a3a5e9d,0x3a5764f9,0x3a6b3fb9,0x3a47ff12,0x3963fc4c,0xb70204f7,0x370a05eb,0xb7ae222c,0xb6d2f127,0xb730ca77,0xb714b985,0xb75f9d3e,0xb724d521,0xb7aa8ca7,0xb726f151,0xb86bcf82,0x37104abe,0xb8f5b37a, -0x398d8f7d,0x389e2f3c,0x39e14d06,0x3a00706a,0x39c28762,0x3990b9c4,0x395ceb36,0x394a7398,0x3930cdf7,0xb6ae2a44,0xb93223d2,0xb9d5468c,0xba0a70f3,0xba29e975,0xba55efcd,0xba363577,0xba1ce101,0xb9ff6a0a,0xb9da3167,0xb9a5455a,0xb98c0914,0xb9e00f67,0xb98c5188,0xb88e1e48,0x3816de4e, -0x37f453a5,0x3788ab62,0x375526b8,0x3783759f,0x37ad27fc,0x379e595f,0x37e95b74,0x38177d3e,0x38ab8d19,0x38d1d5d4,0x37e5bce6,0x392b6a41,0xba5fe54a,0xb9e1b80b,0xb9bf60cc,0xb9974479,0xb951be52,0xb8e55292,0xb8370eb0,0x381cabbc,0x37e3310f,0x37e06c2b,0x3806d9bd,0x37228e1a,0xb7672c1f, -0xb826d609,0x3818f006,0x38bf0636,0x392aac2e,0x39658f9b,0x3985e341,0x39d7b67c,0x398b5e67,0x38e12471,0xb8311edc,0xb91658e6,0xb8cba36e,0x36de7cc7,0x37a44f8a,0x37067e82,0x36f2de9e,0xb5b80f76,0x375a6a87,0xb8968bcf,0xb9435bfb,0xb9ca0a5e,0xb9f5847f,0xb9dcdde3,0xb94f745d,0xb828ecd3, -0xb8c28b98,0xb845a90d,0xb7dc7243,0xb6f03ac5,0x3785afd0,0x385d4fab,0x379c56f3,0x355aa055,0xb77097ed,0xb7b88366,0xb7b56a2d,0xb80ec1e5,0xb4c2fb64,0x37b0411a,0x381edfc4,0x38953ed1,0x38b0d33f,0x39039a1e,0x38a5e9b4,0xb8a1a981,0xb9959020,0x3690b147,0xb981fe3c,0xba043479,0xba0c07d4, -0xba109cbf,0xba180218,0xba1e01db,0xba2647ac,0xba251225,0xb9ef9fc4,0xb95878ca,0xba25db05,0xb9d957f7,0x38378315,0xba27241f,0xb98bd780,0xba41645a,0xba018ab0,0xba04e223,0xba0b5954,0xba0ce722,0xba0a03d7,0xb9c83709,0xba1545be,0xba273de1,0xba52f9bb,0xba184b2e,0xba0fe337,0xba20614f, -0xba2b3283,0xba34182a,0xba443475,0xba2ea7d6,0xba1d9cde,0xba3867ee,0xb97c4dd0,0x3816e46c,0x38fff6ef,0xb9dc1e85,0xb8d193cf,0x38870803,0xb623c8a2,0x37c13f25,0x390debce,0x390a34e0,0x39404c8f,0x39a774cc,0xb81c8af5,0xb9e3592f,0x392656a1,0x37e6162f,0x38b80258,0xba35e72a,0xb9ffe59e, -0xb9e9d84e,0xba0c3513,0xba0bbebe,0xb9ef61bf,0xb9057515,0xba213e47,0xba5dfb20,0xbaa178fa,0xba266615,0xba1540cf,0xba656a09,0xba8ad4e6,0xba9e4f92,0xbaad3a9c,0xba896cc1,0xba659335,0xba377602,0x38bdb515,0xb9b73c23,0xb9be37ec,0xb94400d9,0xb8c3e829,0xb85d7897,0xb89926f3,0xb893ad51, -0xb859cf94,0xb88149a0,0xb8864038,0xb8355c2f,0xb89ff9ea,0xb9398a17,0xb993c431,0xb9eb2d1e,0xb916fce1,0xba38bad1,0xb9beef63,0xb95aaac2,0xb9b21501,0xb9ae1726,0xb9b29e2a,0x39eee50b,0xba126f8c,0xba6bff17,0xbaeb0ea7,0xba296648,0xb9dc7c07,0xba4e48a2,0xba8b8190,0xbaaab238,0xbac85e06, -0xba922c7f,0xba76e531,0xba195608,0xb8eb98dc,0xb9297026,0x38e5285d,0x38922447,0x3838f4be,0x37d057be,0x38057cbd,0x3800b305,0x37a6230d,0x37bca8b5,0x37b78021,0x3700c106,0x38307970,0x386f9be4,0x38957d41,0xb944930f,0xb8e85a66,0xba5d6d91,0xb9bddfda,0xb96a8ed3,0xba093e6c,0xba102bfc, -0xb8e57065,0x3a7e183d,0xba0d81bf,0xbacfff97,0xbb364c00,0xba70b5de,0xb9fd3edd,0xbabf5bd8,0xbb11358a,0xbb347324,0xbb45c876,0xbb093f11,0xbac3a8fe,0xba6a0ca6,0xb90e12bd,0xb80641e9,0x3794bad2,0xb86b89e9,0xb72cb265,0xb790f172,0xb752a8ca,0xb78072b9,0xb70ffa9f,0xb73b94db,0xb6e5fe2a, -0xb7084563,0xb7305de8,0xb8419306,0x37cfd654,0x35b19fa7,0x39d6eaa3,0x397d455b,0xba1aa520,0xb89ea24a,0x3acebed2,0x3a7ecbec,0x39e63920,0xba3dc042,0x3a28940d,0x3a810901,0x39ac35cc,0xb8dedc3b,0x38371998,0x3a7c9df2,0x3b28877e,0x3b3b551a,0x3ad7dfb7,0x3a83e6ba,0x394522db,0x38e698f5, -0x399e4d29,0xb8859471,0x37e8c49b,0x36ca1228,0x3787a869,0x365a2975,0x37169c88,0x36c0eeb7,0x36c7db7d,0x3674e7a4,0x36d947da,0xb5b79f09,0x378be40f,0x358c2f79,0x37e6ab35,0xb8cd1458,0x39584c62,0x398ee4d1,0x3a0fb927,0x3abc7b47,0x3ac9c64c,0x3a220f24,0xb92663b5,0xba73aeb5,0xb97c976a, -0x39b22ed3,0x3a5dc06a,0x3ad5c67a,0x3a7f55ff,0xba5a0052,0xbb1c7349,0xbb4e399f,0xbb3e06f7,0xbb05c1c0,0xbaad1365,0xb9a02a24,0x3885b54a,0xb8934eb0,0x380e52e5,0xb7c8a419,0x353d6990,0xb6d8191b,0xb62f1825,0xb69ef5b2,0xb60145f1,0xb6ac739e,0x3600ae5f,0xb74c10b0,0x3787dfd0,0xb861f428, -0x38c09010,0xb9257af9,0x3a36f1d7,0x3addbdab,0x3a620af9,0xb9effee6,0xbb207519,0xbac1dc6f,0xb93e767b,0x3a1565be,0x3a927aa6,0x39f4b872,0xbab221b7,0xbb20b6e1,0xbafc047e,0xb8498bc9,0x3af3b1aa,0x3b3670ef,0x3b21f1e8,0x3af5e2f4,0x3a8286f2,0x39532a8c,0x385d8e92,0xb5e1ef42,0xb6a0727f, -0x36fc27ef,0x3674c2cc,0x36365eb9,0x36545858,0x3637db12,0x36535a77,0x3606852b,0x36930ee8,0xb5cd1ee6,0x377fdcdc,0xb7c033fe,0x38b81b87,0xb985c833,0xba48a767,0xbb8042d7,0xbb112e42,0xba6bf1de,0x3a9323c1,0x390776c9,0xba8c48c8,0xbb1d0140,0xbae16e3f,0x388f678d,0x3b3f445b,0x3ae0f0d8, -0x3a15889b,0xba3773a1,0xba8ce80d,0xbab541d8,0xbad869cd,0xbabbb39e,0xbaa28d2f,0xba8c9386,0xb96f0c25,0x3895cadb,0xb760193d,0xb64d93fb,0xb6ac7c0a,0xb6584bee,0xb6829d32,0xb66badd9,0xb69e0f98,0xb6255cb3,0xb7063bf3,0x369703c6,0xb7e934d4,0x38415efd,0xb91d20f3,0x39bfc6e8,0xbaa1ea9e, -0xbb5e51ac,0x3a82ed04,0x3b10c0d2,0x3ab8cf7f,0x3a98c9ed,0x3a47389d,0x3900c4ef,0xb9d03413,0xba7c58bd,0xba7793ac,0xba97051b,0xba682b7f,0xba4d1ce8,0xb99203fc,0x38ab0b42,0x39af48d5,0x3a39e1b8,0x3a4e224b,0x3a7df455,0x39ca36ba,0xb91a1675,0x38134194,0x331e8ab8,0x372ee7c3,0x36a13167, -0x36e6f07d,0x36eb6bd2,0x36ddc95e,0x3721a19b,0x3687e555,0x378e98f2,0xb6c900d1,0x384d0a26,0xb8567b5b,0x395cd149,0x3aa00936,0x3a880334,0x386e7c3e,0xb972d243,0xb9ef4aee,0xba2ecadd,0xba727f61,0xba631a31,0xba605f97,0xba530a54,0xba61e4a1,0xba609998,0xba4ff2cd,0xba259da5,0xb95ae598, -0x3830dcd5,0x3901d53f,0x39ccaab9,0x3a10e8b8,0x3a5f8e7f,0x3a21de54,0x3859f112,0xb6ebb744,0xb7ce7c9a,0xb727afd8,0xb76ba8ab,0xb74a4fce,0xb76d0d9e,0xb77a28b0,0xb781dd2d,0xb790aa00,0xb783b12a,0xb7d364c6,0xb7daab41,0xb829adeb,0xb90439ac,0x398263ca,0x39b19fd7,0x3943c009,0x3932dd65, -0xb6fc4275,0xb8fca4a8,0xb96488d0,0xb9c55501,0xba01a901,0xba275822,0xba4c141e,0xba505245,0xba525fb3,0xba5d3114,0xba482da5,0xba326a85,0xba1e8649,0xba1309dc,0xba1b2c54,0xb9fd5c45,0xb9b08f03,0xb92ae47c,0x387f173b,0x382302e7,0x37e798af,0x37db6708,0x37de1f7f,0x37f2b54f,0x37ffa822, -0x38081bf4,0x380eb515,0x380d32d2,0x384257ca,0x388f8ceb,0x38c22603,0x393e229c,0xb9af45fa,0xb9fa585b,0xba028c80,0xba0a0eb2,0xba0f8a7b,0xba12133c,0xba19c0f9,0xba1cb0c1,0xba08890e,0xb9eaaed2,0xb9cb3c64,0xb9b1c015,0xb99d301c,0xb984dbc8,0xb95932d9,0xb92e720f,0xb8ed0d4a,0xb883ec56, -0xb69b4082,0x38491479,0x3954c801,0xb937a844,0xb94f7732,0xb8ebd947,0xb86eb1de,0xb87659e0,0xb86f2df7,0xb87d2747,0xb881b5c6,0xb883b486,0xb88ce15b,0xb87b27ea,0xb8ada132,0xb9534f2c,0xb99e17f2,0xb9db44d9,0xb96c09ad,0xb9d5b520,0xb9c693d1,0xb9cb3800,0xb9cccea9,0xb9d22775,0xb9d49c3f, -0xb9dfcead,0xb9dd50e3,0xb9ddf737,0xb9d952e0,0xb9d43034,0xb9cbb9c8,0xb9c2e149,0xb9b6b160,0xb9ab574a,0xb9a2005b,0xb997ce05,0xb986ed92,0xb9999001,0xb8bcf03a,0x38c352e4,0x3976dc70,0xb974eef4,0xb8404bb5,0x37b6a599,0xb7421263,0xb82add31,0xb889d2aa,0xb8c09db4,0xb8f64c45,0xb9106f6f, -0xb9507008,0xb9bc810f,0xb828ef06,0xb8e9df58,0xb9cc8e53,0xb9803a75,0xba0514e0,0xb90f57d0,0xb9417f88,0xb92b6404,0xb95e36e3,0xb948ccc7,0xb92ccc65,0xb77d275c,0xb933702b,0xb96c8e2a,0xb9ba3139,0xb94f585a,0xb937e1ce,0xb966bcbf,0xb96c82e8,0xb981b7cb,0xb9a332a8,0xb981fa32,0xb97d9ec7, -0xb8f5055b,0xb9f58947,0xba1fe53f,0xba40326d,0xb9d86ec4,0xba18997a,0xb9f957d8,0xba089105,0xba02cc0f,0xb9e2aa05,0xb9e517f8,0xb9d72b60,0xb9a2df58,0xba0740ce,0xb9c4cb0a,0xba351dd7,0xba2d7838,0xba240c6e,0xb9978cef,0xb9078ea2,0xb944c853,0xb994d071,0xb989116b,0xb9291d64,0x3946887c, -0xb94175aa,0xb9b81571,0xba2978f6,0xb957bbce,0xb90d10ad,0xb9b4e217,0xb9d91d31,0xba0e7ad3,0xba34bd78,0xba10961f,0xb9c1047b,0xb9a3934d,0xba058c97,0xb92a8ed1,0xb9688e9d,0xb3b0c953,0x38a5d6fa,0x38f61cd1,0x38b29208,0x38c98eb7,0x38c61b81,0x38c6ca38,0x38a21982,0x38eb52d6,0x38aa004c, -0xb84ede93,0xb97f3d3f,0xb94d94ba,0xb9c3455c,0xb9e86270,0x38202aa0,0xb892ec74,0xb916d96f,0xb9231f95,0xb8dd74d5,0x3a43ec40,0xb888a255,0xb9a4e17b,0xba82fa95,0xb962eb04,0xb80bab87,0xb99df407,0xb9b39f3a,0xba090f48,0xba4d231a,0xba106b77,0xb9962a63,0xb9ba5bf7,0xb98a0730,0x37ff4bab, -0x383111da,0x382cb0e5,0xb7c31d6d,0xb7f0acc5,0xb7c4b43b,0xb7bc5d05,0xb7ec8d10,0xb7cd19f8,0xb7c00e6e,0xb8186fd6,0xb78e5a20,0x382c2f3a,0x387bcb1c,0xb81b916a,0xb9398d8b,0xba1ad94a,0xb78e6c27,0xb963193e,0xb9dc5141,0xba0f3399,0xb912a855,0x3a89204a,0xb8f79494,0xba606304,0xbae1cfe0, -0xb9cdb840,0xb6e6983a,0xba2ecea9,0xba844339,0xbac0d175,0xbaf6a7d4,0xbab1f9da,0xba475f9f,0xba0dc1f1,0xb95c32a9,0x38a8120a,0xb84cbf5b,0xb6d12df5,0xb2b53277,0x37738423,0x36f95937,0x371b0496,0x37322160,0x37276792,0x37139215,0x378d052c,0x354b92b8,0xb757ecce,0xb81e41a2,0x38ab1820, -0x35f54550,0x394bbeb0,0x38f8c9a2,0x3993b9e1,0x3acc89af,0x3a9f9fe9,0x3a631272,0xb8aea220,0x3aaf1126,0x3ad897f1,0x3a80e5a5,0x3a1ae7c2,0x3a040737,0x3a80c465,0x3b0a2f45,0x3b212a81,0x3b0e393c,0x3ac7a5b0,0x3a80f21a,0x39a3c192,0x37c836b3,0x3775e8c8,0xb6ceae8e,0x378b7bc8,0xb6b5d065, -0xb6731c6f,0xb6a3ea64,0xb668ebb1,0xb6b30bc2,0xb67db020,0xb6c40e54,0xb68cb6ab,0xb6eae47f,0x37bc8c60,0xb7917685,0x37c8d289,0xb903a9f9,0x3a0cb251,0x3a81fa21,0x3ab0e2ca,0x3aa894c2,0x3a042612,0xb9516e3a,0xba82f848,0xb99397a6,0x3983bdac,0x3a2b54bb,0x3aa57ebc,0x3a4febe5,0xba0e98e4, -0xbad58347,0xbb11220b,0xbb03689d,0xbad3b36a,0xba73e207,0xb9d278ec,0xb8603d9c,0x37a683f0,0xb7210724,0xb5d72f20,0xb5a806f0,0x36783338,0x35caa5f8,0x3619569e,0x361da026,0x3605b9fa,0x364cfae0,0x35f793ab,0x3646f04a,0xb71ee149,0xb5cf2633,0x37dc658d,0x3958554c,0x3a96b4cf,0x3a151d5a, -0xb9ba3e34,0xbad5ab9b,0xba8faabd,0x38cfbad8,0x3a937484,0x3ae7b8b8,0x3aa8d372,0xb97f674a,0xba9466f6,0xba5a316f,0x39f1c63f,0x3aff9227,0x3b280d71,0x3b0f7aa4,0x3adb3294,0x3a98e872,0x39a94df4,0xb7fe1327,0x37d743f0,0xb79639ab,0x3768864e,0xb6b608b7,0x356aacf3,0xb6236c7d,0xb530ae08, -0xb5dd7413,0xb59d847b,0xb5a8f195,0xb64b772a,0x369db811,0xb7393290,0x38487fcd,0xb8fa8995,0xb8cebb15,0xbb3b57f4,0xbae40220,0xba4c9b61,0x3ae73d16,0x3a2d6d00,0xb9d391a5,0xbab21a35,0xbae00aa6,0xba08b08b,0x3b01aa79,0x3aba983d,0x3a3861bd,0xb9dd8661,0xba24d1e5,0xba54f0a1,0xba73d7bd, -0xba563f12,0xba2ed4ed,0xba467f41,0xb92c5556,0x38ba270d,0xb808de77,0x36fd64b4,0xb689311c,0x365f76b4,0x3493326a,0x35ea2af3,0x34a4f379,0x36378276,0xb6195bb2,0x371e36a1,0xb797a1ea,0x38139efe,0xb8c32ea6,0x392e8312,0xba436e6c,0xbb35e0a0,0x3ad1cf73,0x3b2478bd,0x3b11a1f0,0x3ae7f3ed, -0x3ab2dad3,0x3a471a2e,0x3890392f,0xba0b4a8b,0xba2dc617,0xba73acb0,0xba44bd0e,0xba32fccc,0xb99781cb,0xb7c87afd,0x396a019c,0x39ee291d,0x3a225634,0x3a52702c,0x38ef7c67,0xb8c3e3f5,0x3813f28e,0xb69d9947,0x36521205,0xb67d8b72,0xb5b1bfc2,0xb5be0737,0xb62b70d8,0x34def071,0xb6c8a00f, -0x36e665a0,0xb7a6d0ac,0x3862fe87,0xb8c94a1c,0x398fba3d,0x39f369a9,0x3a0429fe,0x37f6b86c,0xb9c24c91,0xb9c3d791,0xb9e1e741,0xb9f4e04f,0xb997da47,0xb9e1c165,0xb9f58ecf,0xba0d0d50,0xba0a25f2,0xba039c73,0xb9c7e360,0xb87568fd,0x394640cd,0x39b44e9d,0x3a1434f3,0x3a1e688e,0x3a38a64f, -0x39cb210d,0xb7877adf,0xb528b3c1,0xb797f676,0x36d05509,0x3659e301,0x369373ff,0x3658d08a,0x366da25e,0x3688566c,0x35f7e375,0x370a8dd1,0xb696581b,0xb74fe1b3,0xb781c320,0xb8d3d625,0x392ca1a0,0x3a022644,0x3a02022a,0x39d53682,0x39932a48,0x3916d4ee,0x3862725d,0xb8413fa0,0xb965b678, -0xb9c7b45f,0xba135895,0xba160e23,0xba1883ed,0xba2658d1,0xba1187e0,0xba017a8a,0xb9dce341,0xb9d80cb3,0xb9b77d7c,0xb9cf2f13,0xb9bf1394,0xb8277e05,0x384d2bb5,0x3766139e,0xb6fc00a6,0xb781fb3f,0xb726cdb7,0xb73f4c53,0xb73953b2,0xb73e1ec8,0xb721e123,0xb788440f,0xb6c119a1,0x3813cd29, -0x3849d8bf,0x38aa3b09,0xb9fcf067,0xb9a99b80,0xb9a14b5d,0xb9acc463,0xb9a3a6e9,0xb9931802,0xb98efe68,0xb98a4d5b,0xb97969c8,0xb95d97bc,0xb95311e7,0xb95d5656,0xb97e3118,0xb993eaf0,0xb9766b28,0xb9503de9,0xb9164acf,0xb8dfd3bb,0xb864b9e2,0x37aba9db,0xb8d4d088,0xb9104461,0xb8e85e21, -0xb74b2f58,0x38681e29,0x38817c33,0x385a8677,0x386f0a43,0x38679559,0x387445fd,0x385ffb56,0x388b999d,0x387400ce,0xb8687f89,0xb942cc99,0xb92fc33d,0xb9bd6db2,0xb92a0dab,0xb95dbfe0,0xb94d29fd,0xb94a2c02,0xb952b192,0xb951a98f,0xb94e2499,0xb95fb617,0xb9710a1e,0xb97af71b,0xb98305b4, -0xb982a0a7,0xb986401e,0xb970fce2,0xb961934e,0xb9550f34,0xb93e8c1c,0xb936cf00,0xb9059a9f,0xb97e306d,0xb9a8a6e0,0xb9b99b13,0xb9928832,0xb9c50e32,0xb9ba98b0,0xb9c22934,0xb9c50fbe,0xb9c95633,0xb9cc31ad,0xb9d11ffe,0xb9d03785,0xb9de130b,0xb9ad99dd,0xb9febbec,0xb9f80dca,0xb97b4a97, -0xb986a321,0xb84bd3a0,0xb9a17f63,0xb9564ebb,0xb944ced5,0xb94cbb86,0xb94261f6,0xb935b64d,0xb8b70d67,0xb951f4ba,0xb9804840,0xb9b41261,0xb970626a,0xb95afd0e,0xb971a73d,0xb97aae7d,0xb9877567,0xb9a4c5b3,0xb98a3630,0xb97eed99,0xb986c64d,0xb712c4ce,0xb6d7c598,0xb98d1d24,0xb8a66fd5, -0xb79d252f,0xb8b4f18d,0xb8bd2803,0xb89d04b8,0xb82a5c62,0xb825cd1a,0xb7bf2b49,0x37c3c70c,0x337a04a3,0xb8d191ac,0xb95deb47,0xb7faecbb,0xb8934ef4,0xb98e5b76,0xb95fa36e,0xb92545ed,0xb93e1272,0xb913b446,0xb8a211aa,0x38d4fd4d,0xb941ca31,0xb9af9673,0xba12ba12,0xb9870da7,0xb9574516, -0xb9adda99,0xb9c9bdc0,0xb9f73260,0xba1d8cad,0xb9f48ed4,0xb9cbfc73,0xb966c22b,0xb7442711,0xb8d75e9c,0xb7d7454c,0x36749ed1,0xb5ecca15,0x381a5141,0x380f78a9,0x37f48038,0x379bc807,0x378a6c17,0x36d055e1,0x359e9554,0xb7088563,0x35e64e9b,0xb80037ec,0xb91c989d,0xb7cd00b1,0xb9d49878, -0xb92f16f8,0xb85add60,0xb850fbea,0x3745124e,0x383d7f2d,0x3a0309fb,0xb8ab0eb6,0xb99f51e3,0xba56cc9c,0xb98d85df,0xb8f911fc,0xb976eb9f,0xb998f527,0xb9df3844,0xba31874a,0xb9f17003,0xb9c2f521,0xb928db81,0x38387c54,0x352c9d06,0x37fc901a,0x3537d405,0xb41b549b,0xb7422901,0xb758697d, -0xb725d6a5,0xb6fb5c18,0xb6bba39c,0xb610b84b,0xb5e6c238,0x36a07942,0xb58d3c8e,0x381118a9,0x3714a50f,0x383ac58e,0xba07be0b,0xb97c8799,0xb8a042fe,0xb90bf0a0,0xb87adbb0,0x39839117,0x3a5e2b6f,0xb80c54c5,0xba3116e7,0xbab21c5a,0xb9df1f26,0xb8ed8e7e,0xb9fd6c09,0xba3c56ad,0xba8b951a, -0xbabfebdd,0xba88a0d8,0xba470101,0xb9a1d17f,0xb5529ad9,0xb6bdd4b3,0xb710ece2,0xb6b08f7b,0x362ac392,0x3679b04c,0x36d0bd02,0x368aa494,0x36772162,0x360de849,0x35ebd0bc,0xb51364da,0x35647349,0xb6c6a0be,0xb706bfd5,0xb7527370,0x3829b71f,0x39b25bed,0xb94b9830,0x384d66ab,0x3a646c44, -0x3a47d4c0,0x3a0fd984,0xb9a108a9,0x3a4e33e2,0x3a806606,0x39c1d319,0x375bcf19,0xb8b1f209,0x39a51b1a,0x3a9fe388,0x3ad011da,0x3aadc0f5,0x3a8db117,0x3a2ff33e,0x3a0ac333,0x3814d6c2,0xb7d48334,0x378a8f43,0xb62c4d44,0x359c28b0,0xb6491ed6,0xb61f13c4,0xb6253847,0xb5d5a9a5,0xb5c28d76, -0xb4fafd96,0xb56ac4dd,0x35d7452f,0xb5e72cc6,0x37893af2,0xb7d963bd,0xb88b8ef0,0x39bf6ad3,0x39cfc02e,0x3a7eb7ea,0x3a8aa25d,0x3a4443ea,0x39916ce0,0xba07d712,0xb916293c,0x391a5218,0x39f4f7ff,0x3a8fda2b,0x3a5c8710,0xb91eb17d,0xba8fabb8,0xbad69493,0xbace669a,0xbaa2f23c,0xba6648a5, -0xb99b14b9,0x34c15a90,0xb5b64559,0x35907d98,0xb68a3987,0x360f7b10,0x34e985d6,0x3604bfe3,0x3598b7d9,0x35b30951,0x351ef77a,0x35aa9d6d,0xb535a251,0x3600582e,0xb66f2563,0xb65de701,0x37649b74,0x37704665,0x3a3416f0,0x39cc5173,0xb93573bf,0xba61b98c,0xba368a4b,0x388efffa,0x3a69e882, -0x3a7811f6,0x3a1a700c,0xb995d615,0xba927e57,0xba7479d7,0x388d2522,0x3a99ffe2,0x3ae67697,0x3ada5ff4,0x3aa9ced7,0x3a4c73f3,0x39971185,0x380828bb,0xb7a7887f,0x37089582,0xb527db6b,0xb41e79f2,0xb5a4c70d,0xb5a7003b,0xb5b13c13,0xb589ee8b,0xb5ac725b,0xb4e9d4a6,0xb6159bcc,0x36601ef7, -0xb70ea4cc,0x37d662ff,0xb83b2a7a,0x394ea892,0xbae07b76,0xba94966a,0xb98249bf,0x3af2cec9,0x3a6f292a,0x3746a0df,0xba6c4951,0xba9ae667,0xb9ab02ed,0x3ad60f45,0x3abbf3ef,0x3a793524,0xb898cad9,0xb99bd377,0xba062a82,0xba32968d,0xba1eac26,0xba118871,0xb9f37185,0xb785b2f0,0x37b783ff, -0xb7292e9c,0x3525d156,0x35532df7,0x35bd57b0,0x3604758c,0x35ed397a,0x35ea3fa3,0x360799c6,0x35a9b6fc,0x3650d0f7,0xb6235223,0x36bfe4d4,0xb76f6690,0xb6f34e7d,0xb946b7a6,0xba9da7f0,0x3aeed8f6,0x3b2730ab,0x3b1a2cf9,0x3b018cbd,0x3ac93761,0x3a63b9d2,0x399adb49,0xb945fa40,0xb95c52a4, -0xba085dda,0xb9f0e67c,0xb9dcf7ad,0xb94d2890,0xb8320dc6,0x388b5f1e,0x39aaadbf,0x39d47641,0x3a224333,0x3779ee9d,0xb83525ca,0x37e993fd,0xb70ea607,0x362c6f8c,0xb6a3c084,0xb62d878d,0xb67c4b71,0xb66373b2,0xb6666ae6,0xb68d6104,0xb61d7f55,0xb6b264ed,0x3749cc1a,0xb7cd7930,0x38c36444, -0x3990404b,0x3a0de7ff,0xb9328a81,0xb9e8d591,0xba0b09cf,0xba2447e6,0xba2b36bf,0xb9e4e8fa,0xb9e86e4e,0xb9d8e210,0xb9e3abf3,0xb9c8e5e5,0xb99dd28c,0xb91e519d,0x38ab5fb2,0x397f23c4,0x3995fd08,0x39dfb0e1,0x39d8ee4b,0x3a13ae72,0x3945199d,0xb8774d99,0x3722312e,0xb73b1a3f,0x3701e5fe, -0x36936c79,0x370726f1,0x36da0d8b,0x37027f68,0x36e57c10,0x3718ded3,0x36affde8,0x3731818f,0xb7ad8917,0x3815e0d0,0xb913c5db,0x39867d4d,0x3a0e442c,0x39cd7ae3,0x39d59890,0x398ea432,0x393a31d8,0x38a76ae0,0xb80c2c09,0xb92be34d,0xb9951d67,0xb9dbbaf9,0xb9ea7e5a,0xb9faae13,0xba09faa3, -0xb9f7ea16,0xb9ddeaef,0xb9c43531,0xb9b4c6d7,0xb9ae8407,0xb99d65c7,0xb9167628,0x3823c680,0x37b719dd,0xb3e2a501,0xb6cdc69c,0xb7862259,0xb780628b,0xb7881ab4,0xb7897257,0xb7916df1,0xb78d6c01,0xb7ad1eb0,0xb6bbb5cf,0xb5c6c428,0x380f1d9d,0x3620b1be,0xb935acb2,0xb95b8c24,0xb976194a, -0xb98781e3,0xb990cd06,0xb98ea787,0xb99638e7,0xb998733a,0xb996b82d,0xb995fb16,0xb9981613,0xb99cc5c5,0xb9a3ac52,0xb9aa75d7,0xb99b16d4,0xb9902481,0xb97fc014,0xb965d7fd,0xb9484443,0xb91a775a,0xb8b5c6c5,0xb91595e9,0xb7525bc3,0x360011d2,0x37bdcf3f,0x38384aea,0x38339f22,0x383d2e5a, -0x383fb47b,0x384adc4f,0x384634d5,0x386b3abe,0x37d73759,0x36a97924,0xb82f004b,0xb88d397e,0xb9203674,0xb954cfd0,0xb95a49e1,0xb95a3062,0xb95d8a77,0xb9687d1b,0xb96e01ac,0xb974179f,0xb9840c41,0xb98c2d81,0xb991d871,0xb9985f64,0xb99c11a0,0xb9a201ee,0xb99867f5,0xb99217a1,0xb98cfe50, -0xb9851274,0xb97ca172,0xb9832de5,0xb8fc7d2f,0xb8c5448a,0xb9340cf1,0xb9085f26,0xb88baffd,0xb8dfe053,0xb8e8c97d,0xb8eca754,0xb8f6ddf2,0xb8fbff9e,0xb904dc0f,0xb905ff90,0xb8d1cb9f,0xb9162bbf,0xb97e6846,0xb92a7342,0xb99315a4,0xb9853fbf,0xb9abaac5,0xb96c4369,0xb95e744e,0xb954fa5a, -0xb953da93,0xb9733254,0xb97239c4,0xb9293ed0,0xb9755353,0xb986d207,0xb9a19233,0xb97fc930,0xb972fd93,0xb97fe29c,0xb97bc3ee,0xb9829fe5,0xb996a748,0xb98549dc,0xb9784d68,0xb94f3933,0xb99693d7,0xb993ff6a,0xb975fc06,0xb8cf1b7e,0xb8ed6dc5,0xb81ddc1c,0xb8613da2,0xb852a1c7,0xb81d5960, -0xb8293936,0xb80fdb20,0xb6a7ebec,0xb8eaebd5,0xb8e02cb5,0xb966cdc6,0xb9aa75a1,0xb99714da,0xb9a01a7f,0xb93e5ca8,0xb953adf4,0xb948fec2,0xb9909a41,0xb98ad605,0xb8ee5125,0xb999a67a,0xb9c12016,0xb9fd14ab,0xb99cd727,0xb986ce53,0xb9ac37c5,0xb9b47215,0xb9d5d215,0xba043d33,0xb9e5a2b3, -0xb9ad9c85,0xb98ce009,0xb92d6c02,0x37cf29e3,0x370304ec,0x38951844,0x37f03ef9,0x37d76292,0x3794ef4e,0x37b35284,0x37845647,0x37960ff7,0x371f2a83,0x37821948,0x37ecb261,0x388e6718,0x37b6919b,0xb6b42bfe,0xb86d23ec,0xb9ec7ba0,0xb8d65a51,0xb9262ce6,0xb89b87ff,0xb987f351,0xb9a335d2, -0x388ea1ab,0xb9a1c9b3,0xb9d72b2a,0xba311326,0xb9c1e61e,0xb98ca9b4,0xb9b34738,0xb9a8f830,0xb9d384bf,0xba17fb21,0xb9e5455e,0xb99dd415,0xb96fd570,0xb6bd28dd,0x3805eb6e,0xb7416f84,0xb7956477,0xb77309fb,0xb7000378,0xb7005a22,0xb6e0f212,0xb6e2819b,0xb6b81c4a,0xb69840b7,0xb69f48df, -0xb7696274,0xb783d48e,0xb7b92f69,0x388d78e9,0x38b3e24b,0xb9f4feac,0xb8f89ec6,0xb90977f0,0xb8aacf4a,0xb9ce07d9,0xb9b3361a,0x391cfa0e,0xb9d67d8d,0xba4495f5,0xba8c08c0,0xba098a73,0xb9a9a3d5,0xba0c1e9c,0xba2659d6,0xba667263,0xba9b61c7,0xba715f47,0xba1dcdab,0xb994ade2,0x37bb5aca, -0xb709ea24,0xb57aa081,0x3722e58e,0x36bcc271,0x368503e8,0x3656524c,0x364ee4b0,0x364869f6,0x362694b5,0x36034055,0x363115d6,0x36bb58a9,0x370afcbd,0x36a9ec1b,0xb80161af,0x382e7d0c,0xb85215b3,0xb970da1a,0xb92d99f8,0x39ae9340,0x397cde67,0x38b592af,0xba0e51a6,0x39d6ff89,0x3a2a533a, -0x398aa565,0x38a59762,0x376d4af5,0x399e0147,0x3a43f0f1,0x3a84d5e6,0x3a8f2575,0x3a532bbb,0x3a0522be,0x396bd1c7,0xb72e527d,0xb610be98,0x367d405a,0xb6bf9deb,0xb61a90af,0xb614e4b1,0xb5c4f0ab,0xb5d4d4a7,0xb5c37144,0xb5a95730,0xb581a995,0xb5dafe1b,0xb5fbda0d,0xb6e73fd8,0x3701306e, -0xb76d526c,0xb8bd5361,0x394ea55d,0x39e67fab,0x3a26be5a,0x3a3deede,0x39e40204,0x38c23ea2,0xb9ea739a,0xb93a3064,0x383c1f1b,0x3997e85e,0x3a3d9837,0x3a13a812,0xb9057cf0,0xba4869ea,0xbaa16fbe,0xbab37780,0xba959044,0xba4e6018,0xb9ba0f6b,0x386e15c4,0xb7724084,0x369cbb95,0xb49f1d5d, -0x3643ca7f,0x350da307,0x35a26eb5,0x355364bd,0x35752b31,0x355c7498,0x34fda867,0x35cb6127,0xb4998692,0x36f91d1c,0xb7751278,0x3813437b,0xb6f9a639,0x3986fd5c,0x391867f6,0xb993fd00,0xba85ba76,0xba981841,0xba39bc7b,0x38921037,0x39d78f4a,0x39c5be8d,0xb9155565,0xba659083,0xba6bc632, -0xb99c1ff0,0x3a025395,0x3a84773b,0x3a9345e9,0x3a67e33e,0x3a1b7587,0x39125131,0xb2f84156,0xb706ce83,0x36a52a3f,0xb666eb0b,0xb51de302,0xb5a3d590,0xb52ff655,0xb5704e5c,0xb533c205,0xb57ad7e6,0xb4af532d,0xb5d8842f,0x34f3b484,0xb6afe1d7,0x370395dd,0xb7390363,0x396dd3b3,0xba70ee0d, -0xba89b8ca,0xba355b42,0x3a0e4199,0x38a2e01d,0xb9a2ef0b,0xba0c2c18,0xba80e6c8,0xba0855f7,0x3a492442,0x3a600877,0x3a29bf46,0xb7fd36b7,0xb987c482,0xb9eaf452,0xba08821c,0xb9fa1d2b,0xb9c149f6,0xb99138f7,0x37cef6ab,0x3642d205,0xb684a1f9,0x36707320,0x35950903,0x35b73c42,0x35971cd1, -0x358a71f7,0x35b795eb,0x3528af18,0x3614239b,0xb59b708e,0x36e5df73,0xb7279a51,0x37ece6fb,0xb89cd111,0x38d1de7c,0xba3ca396,0x3a5f6f97,0x3aaf59f4,0x3ab7f64a,0x3a8d8da5,0x3a523a61,0x39edb736,0x383d4c80,0xb9a2147e,0xb9f1943c,0xba1e88e2,0xba0d7296,0xba01041f,0xb984cdc4,0xb8d7ef3e, -0x369a225b,0x392a3ffe,0x396f3ccf,0x39a2c493,0xb86ead92,0x3733cf84,0x34e73ccc,0xb697aad2,0xb624b365,0xb61f15b3,0xb60478c6,0xb6154928,0xb5ffc6ac,0xb63109dd,0xb59d19bc,0xb6916d39,0x35ab7a70,0xb73db2eb,0x376c6404,0xb7dbe1f6,0x38885131,0x3890b642,0xb9ca8903,0xba16a5c0,0xba1a53a8, -0xba1ecf2e,0xba162580,0xb9eecb3b,0xb9acb40b,0xb976209b,0xb95761d5,0xb96acc67,0xb96a66d1,0xb91efd5b,0xb7bee07f,0x38c75656,0x39449350,0x3993cc32,0x39975bd6,0x39c70cd7,0x3810adb6,0xb7e740f3,0x36dccdf8,0x36de93ba,0x36c81ea0,0x3693b3af,0x3692e3c2,0x368cf65b,0x369e464b,0x36861e5b, -0x36b86708,0x363e8348,0x3720c091,0xb5ad006a,0x37b1325d,0xb84b9419,0x384a9f9c,0x39c8848a,0x39969603,0x398dedb8,0x3932686f,0x389287ac,0xb7ad63dc,0xb9021963,0xb96405b4,0xb9a1ff6c,0xb9cdc9c6,0xb9c11990,0xb9b3525c,0xb9afd1de,0xb99ce645,0xb98db9be,0xb975f5b6,0xb97cbbf2,0xb96487b1, -0xb98d96af,0xb865d03b,0x3865c645,0xb79d2540,0xb76d25d1,0xb765bbe0,0xb7214b6b,0xb7257971,0xb721b2ea,0xb72ae512,0xb72a76a7,0xb725de8d,0xb74638b5,0xb723e7c1,0xb7b8df1c,0x3664ec0f,0xb6e4a63c,0xb8e1bb79,0xb93682d6,0xb94a2cf9,0xb96decad,0xb980cd71,0xb9839ab7,0xb98cd8b0,0xb996a6af, -0xb987b6af,0xb974e842,0xb969ae58,0xb965ceec,0xb9738008,0xb9834633,0xb9779d33,0xb96bab82,0xb9542867,0xb94aa17d,0xb922ffd6,0xb9294b5a,0xb937c72f,0xb6ad3cf2,0x37c06f9b,0x386cd329,0x37f2e614,0x38011e1c,0x37ceeba5,0x37ed5391,0x37e51687,0x37f29fe3,0x37e11069,0x3808d6df,0x37ef5dbf, -0x38627238,0x3794c90f,0x37b53a54,0xb98707e1,0xb92c3e39,0xb93a8d3e,0xb9417b37,0xb946be4c,0xb9540d69,0xb95b3283,0xb9666c9b,0xb96a8b0a,0xb973a028,0xb9771f38,0xb97ded36,0xb97d6e75,0xb97e333d,0xb9735504,0xb96d8eb4,0xb9689a09,0xb960b8f4,0xb95fc281,0xb941c445,0xb98305bd,0xb98a928a, -0xb958ed7d,0xb8aad938,0xb8d63ad7,0xb87f2f2d,0xb88d4ebf,0xb88ef885,0xb891801e,0xb89373d0,0xb8965530,0xb8902d33,0xb8d02fa3,0xb897bdc6,0xb9590c47,0xb984db70,0xb9871e9c,0xb87b2876,0xb889ff0d,0xb8520ef8,0xb863767f,0xb82be93b,0xb82ed0a4,0xb8276530,0xb814d819,0xb6fa0877,0xb82ee2d4, -0xb8670634,0xb8ab96f4,0xb866b969,0xb84d45f0,0xb8543742,0xb848485a,0xb85b9b3d,0xb898157b,0xb871f8b9,0xb87429e1,0xb80dc51e,0xb8169869,0xb8a4bcfa,0xb94022c7,0x3823bcfa,0x378f14bd,0x378bb028,0x37919b48,0x37907276,0x37905367,0x37906b35,0x3791aed3,0x378b701a,0x3790e73d,0x381bc44a, -0xb931cac8,0xb8ca1ef2,0xb8db6038,0xb89fc182,0xb8332083,0xb82105c3,0xb8103367,0xb7f9a916,0xb71fd5b4,0x38438795,0xb8184082,0xb8a947ee,0xb9138a8d,0xb88ffacd,0xb84dcfd6,0xb8910f84,0xb891940c,0xb8c64741,0xb918a176,0xb8fa2ada,0xb8c1809a,0xb818d0aa,0xb89892ed,0x3821fd9a,0x3850671e, -0x36894897,0xb75ca7b2,0xb6811606,0xb6e86a96,0xb6c7f31f,0xb6d52ef6,0xb6c93ff9,0xb6e4a202,0xb68b6d4b,0xb74e9de3,0x361aecf7,0x384ef7e9,0x382fe8a0,0x385318f9,0xb91d84ff,0xb7dcd040,0xb7726802,0x3785b734,0x37586dd9,0x37c74430,0x39342f4e,0x36a7d6fb,0xb87d593f,0xb94e9556,0xb8a5253b, -0xb801160f,0xb8178c24,0xb7945267,0xb85d05a0,0xb91edb96,0xb8cd8875,0xb88a475c,0xb7a6bab8,0x378ad294,0xb6a2b7d0,0xb792672d,0xb64ffce9,0x368b69e8,0x360bdadf,0x3603a8ff,0x361ce0a1,0x360b99eb,0x3616b406,0x36126f14,0x35e16ae0,0x369f248d,0xb679dfa5,0xb783a6f6,0xb7200257,0x3823c053, -0xb91f15f4,0xb888f467,0xb783795e,0xb62398da,0xb7a671ff,0x3885e513,0x39873e4b,0x36c9b934,0xb93b82ba,0xb9b9eff8,0xb90ff7b0,0xb8101389,0xb8a7fb62,0xb8bd821d,0xb9539703,0xb9c37f94,0xb99aedb6,0xb9530903,0xb848c4aa,0xb6de130d,0x36ec710c,0x36479115,0x3686ddd9,0xb632afc2,0xb525d252, -0xb58a98fb,0xb57de272,0xb57c3323,0xb5908ebf,0xb535b2e5,0xb5c52406,0xb52538a0,0xb57cf399,0x376c95f7,0xb794a717,0xb7d3aa07,0x38d04830,0x369254bd,0x37fc7ee7,0x39714f3c,0x398d9c9e,0x397a6731,0xb8a02047,0x39bb2463,0x39e2d613,0x395da19a,0x38ad23af,0x36ce3097,0x38c42a2c,0x39a3356c, -0x39f9d8b2,0x3a1b7efa,0x3a03349c,0x39db7830,0x396ada34,0xb875384b,0x379a2f97,0xb72641ab,0x35f0c7ed,0xb51afa81,0x359f937e,0x340afca0,0x352e2b5a,0x34c77147,0x3527f703,0x3451decf,0x358a0436,0xb46fb641,0x358a5151,0xb7005d76,0x373748a8,0xb887c1dd,0x3912e0a7,0x39621dab,0x39abdac6, -0x39c4958b,0x39b0ecb7,0x393c68ef,0xb93cdc67,0xb871add9,0x37fd085d,0x3919b7d1,0x39c7ee53,0x39af1e09,0x380a1ab0,0xb981d390,0xb9e9a716,0xb9fb94f4,0xb9e44995,0xb9ae707a,0xb91279e8,0x37b12dd6,0xb53e82d4,0x33cba1bf,0x35d66821,0xb56b3765,0xb3f1dd5d,0xb4d83ad8,0xb4553a6e,0xb4dc0d9b, -0xb3cc9658,0xb53b2ef4,0x35269c74,0xb631ce8f,0x36c50e74,0xb734131a,0x37e9ae8c,0xb6c61b75,0x38a41ae3,0x389a0153,0xb8504749,0xb93f451f,0xb9846938,0xb73f4918,0x39c9914f,0x39c5d877,0x3993eeb1,0x3865fd16,0xb9927f8e,0xb990db2b,0x370603d8,0x39adfeb9,0x3a0a5536,0x3a113741,0x39e92adc, -0x39a5627d,0x38fb4c2a,0xb7a31d56,0x36070fda,0xb585288d,0xb50df2b1,0x349e53ae,0x34c8d31f,0x346b7c1b,0x349d6a37,0x348ec67c,0x34927d6a,0x3491480b,0x348e8d56,0x3508f8db,0xb58139d4,0x348e4399,0xb5ddc5c6,0x38ad8029,0xb9a23415,0xb9ca33bf,0xb88162de,0x3a40f981,0x39e191aa,0x390c60b7, -0xb9179838,0xb9da3723,0xb96cf313,0x39d3440b,0x3a0dbb7a,0x39f98ef5,0x38ebc082,0x35057bd3,0xb8ba52ea,0xb8fad28e,0xb905bfd2,0xb8f5a94d,0xb8a00728,0x369e8fb7,0x367773be,0xb5b30c0b,0x3602177e,0xb5a1b7fe,0xb41069c0,0xb50e065f,0xb4bee2c8,0xb4cfda5e,0xb50dbcd0,0xb38736b5,0xb5a4cd19, -0x35afcbe1,0xb6808f20,0x37435d1e,0xb7e3253a,0xb76f12bc,0x37e15819,0x3a550a2f,0x3a85f4b0,0x3a8f4938,0x3a72441a,0x3a47a445,0x3a09525d,0x3983dba8,0x3813475a,0xb817c411,0xb92aaba8,0xb92f8397,0xb922d9f7,0xb8cbfaf5,0xb8727a20,0xb75a1d20,0x386cb2e1,0x38ea69f4,0x39173474,0xb82d1a2b, -0x3780fb77,0xb71d7942,0x3614bf76,0xb490186f,0x35c12f61,0x34ebe1be,0x35755361,0x353c1430,0x355cfd03,0x35347fdb,0x357ac4fc,0x355016e6,0x331ffc13,0xb68d1eb4,0x369e0ab6,0xb836a837,0x389388fa,0xb90d6189,0xb98bc5d5,0xb99169b2,0xb99a12af,0xb98722e7,0xb919564e,0xb91356c1,0xb8f398f1, -0xb8de014a,0xb8a27d63,0xb843fc43,0x368fc6ff,0x38903475,0x39009eef,0x391d8911,0x393bec9d,0x392e3dbd,0x393281a6,0xb825a35b,0x373aa97a,0x3631de52,0x36371361,0xb65772e0,0xb5a24b2b,0xb5e83fab,0xb5cc8e70,0xb5e2f53b,0xb5c695c1,0xb5f9b319,0xb56c761e,0xb6869974,0x369f8208,0xb659399d, -0x37b01ec3,0xb7f7b496,0x398bccf2,0x3958ce60,0x39584b5b,0x3926ff8c,0x38f48dea,0x3894f85e,0x37cf7823,0xb800ec1c,0xb8a62bd3,0xb90c017c,0xb9119e42,0xb9186b00,0xb9252ded,0xb911148d,0xb902127c,0xb8ddf89c,0xb8d1648b,0xb8ae6747,0xb8c39c4b,0x37f9fdc0,0xb6c0fbf1,0xb7966533,0x3515fe5b, -0x36a43b27,0x367cfb39,0x36631590,0x3682028b,0x3669a084,0x3682ec56,0x365e4a53,0x368411a4,0x36979852,0x35a23abb,0xb7935650,0x364d3806,0xb8357e94,0xb7f87295,0xb890e5ef,0xb88cb862,0xb8a177e6,0xb899efc4,0xb8a2e12e,0xb8a79468,0xb8b4c501,0xb8c264d6,0xb8d5e512,0xb8ee2e41,0xb9073ed7, -0xb9192944,0xb9125f49,0xb90f01fd,0xb9064cf8,0xb9053583,0xb8eb5f25,0xb90417ee,0xb8a5d0c3,0x38574454,0x382d8330,0xb61764ee,0xb789c808,0xb70ce73c,0xb73a8602,0xb72bae08,0xb7323579,0xb72be6c5,0xb739b320,0xb70f9fdc,0xb785fcd6,0xb64526b6,0x3822e929,0x3822490f,0xb8add3e9,0xb86ee7d0, -0xb87a13c8,0xb87bff27,0xb8835a0d,0xb88bcc5e,0xb8910bb6,0xb891cf15,0xb8a7fe16,0xb8ba40c0,0xb8c99143,0xb8db780b,0xb8e782ec,0xb8f810f7,0xb8ebd74c,0xb8e70998,0xb8e26f2a,0xb8da7c78,0xb8d9ecc7,0xb8bb0c89,0xb8f58fd7,0xb8e3b27e,0xb91a32be,0x384aca54,0x37f2b6e4,0x37ef5aef,0x37f4dd47, -0x37f3b6bd,0x37f3aa22,0x37f3b2e3,0x37f4d916,0x37ef85b1,0x37f3031c,0x38458b01,0xb90eed11,0xb8bfe5eb,0xb8d3ec31, -}; -const uint32_t defaultHRIR_rom_AlphaR48[470 * 128] = { -0x3e094595,0x3e0070b5,0x3e249d6a,0x3cdebe05,0xbcb8b8ac,0xbd743498,0x3d767ab7,0xbc7e793e,0xbd7b74ec,0xbd83ebe3,0xbd77e4f6,0xbd3b83f5,0xbd7150b2,0xbd7e0636,0xbd7119ac,0xbc7c942a,0x3d352f28,0xbd848755,0xbc870462,0x3caef063,0x3e15c18c,0x3dee7ab7,0x3dfce600,0x3e00876d,0x3e01163c, -0x3e024a33,0x3e035f7f,0x3e04b5f7,0x3e06feee,0x3e09c88a,0x3e0d20e6,0x3e10371e,0x3e151794,0x3e12d853,0x3e1028ae,0x3e0987f9,0x3e0931f2,0x3e20e8e2,0x3e0b90d0,0xbd02dc11,0x3dd27b26,0x3d122337,0x3d2c1d55,0x3d888631,0x3d6ef13d,0x3db299a0,0x3d78d706,0x3d017832,0x3d617605,0x3d82a0c4, -0x3d694f61,0x3d00648f,0x3d4abe94,0x3d45c45e,0x3d7d8112,0xbc9cc1ae,0x3dddca9b,0x3e051b61,0x3e012b5e,0x3e0b9909,0x3e0c1d7a,0x3e106cf1,0x3e133fa9,0x3e162ff7,0x3e1bd401,0x3e247577,0x3e2f6688,0x3e3a7047,0x3e463a8e,0x3e44da00,0x3e3c22ab,0x3e29207f,0x3e200d41,0x3e3a14f6,0x3e02f236, -0x3d13cc60,0x3d7cd57f,0x3c867a71,0x3ce6b061,0x3ccc0823,0x3cbd7e35,0x3b645ab3,0x3d2cb2a4,0xbc17826b,0x3d4c34fa,0x3af31597,0x3cfb2a34,0x3b90b90a,0x3ce80da7,0x3cec41dd,0x3cec2f91,0x3c98453a,0x3d957269,0x3e02685e,0x3df2c132,0x3e0f08cb,0x3e0fd707,0x3e17edad,0x3e1dca8c,0x3e249ea3, -0x3e304162,0x3e40f8ed,0x3e528311,0x3e681e31,0x3e7eb4b4,0x3e79b8e8,0x3e68f514,0x3e44e649,0x3e2fdee8,0x3e4c92e2,0x3dd12cbd,0x3c86d9d0,0x3d678820,0x3cfcc451,0x3ca616e5,0x3cccdb61,0x3c934c02,0x3c6d584e,0x3bdbbe3f,0x3c90630e,0x3b541073,0x3aef66f7,0x3c3bcbe4,0x3bf143c2,0x3c8aacb5, -0xbbf3e38b,0x3cdb4d74,0xba818a14,0x3d66b380,0x3de1730f,0x3de4c8e1,0x3e0a9799,0x3e0bfcc5,0x3e16e14b,0x3e1f99f3,0x3e2663f3,0x3e375f5d,0x3e51af28,0x3e7091a0,0x3e8aeff4,0x3e9f2451,0x3e9dc5e0,0x3e8eed58,0x3e64d701,0x3e3bd239,0x3e8d5739,0x3e1e412c,0x3d246c2b,0x3d493d16,0x3cb16f14, -0x3c1cee42,0x3cdedc6c,0x3c3f5bba,0x3c540526,0x3c21cecf,0x3c421806,0x3c2fbff5,0x3b97d6ed,0xbac12178,0x3b9ec1d7,0x3c838b2d,0x3bb94c23,0x3cfc0a96,0x3bf25a88,0x3d8556c4,0x3e0d36fd,0x3e0ea62d,0x3e3e16e5,0x3e4cdf7c,0x3e61c2aa,0x3e6c10f7,0x3e859436,0x3e8f8477,0x3e903571,0x3ea9a0bc, -0x3eafeba1,0x3eab4a09,0x3ea5a7e4,0x3e9b53b7,0x3e91e606,0x3e80d6c0,0x3e9a2bd0,0x3e03191e,0x3c6096cd,0x3d8653ae,0x3d811170,0x3d015304,0x3d330778,0x3c669eeb,0x3c8108f0,0xb82fc02c,0x3c0dafcf,0x3bf8a2a4,0x3bd815f4,0x3c5d5358,0x3c86ff8f,0x3cacb82f,0x3bf13f65,0x3d09fb60,0x3bc07b73, -0x3d9ce3ac,0x3e1e7153,0x3e22e413,0x3e595906,0x3e66b5b3,0x3e7fc06a,0x3e89f455,0x3e88af01,0x3e8a8d72,0x3e8e2e5d,0x3e9fad4b,0x3eaa8185,0x3eaf5903,0x3eb40538,0x3eaf29f3,0x3ea9b428,0x3e91ada4,0x3ec8e1f3,0x3e33d418,0xbc3e53cc,0x3d9e654c,0xbae50000,0x3d649c84,0xbc14061a,0x3cc2159e, -0x3b9f41ab,0x3cc12d49,0x3c4a53a1,0x3bdc38de,0x3c4e078a,0x3c6133de,0x3c8feee4,0x3d101c44,0x3c7e8306,0x3d35a757,0x3cbcbbcc,0x3d92eddc,0x3e24939f,0x3e21dd97,0x3e577100,0x3e8107c0,0x3e9b39f6,0x3eb32895,0x3ebd665a,0x3ebd0f21,0x3eb12a54,0x3e9edc5e,0x3ea1033f,0x3eb3442b,0x3ebfc82a, -0x3ecb4568,0x3ee537e1,0x3ec6aef4,0x3edd6967,0x3e53e71f,0x3cf6f3da,0x3dfa4e3e,0x3c22ef66,0x3d7a11de,0x3cdd1847,0x3c90a6a4,0x3b989102,0x3ca35b3d,0x3cdb269c,0x3c8196c3,0x3c1a9dd8,0x3b2084a3,0x3ca84d9e,0x3c86e7ad,0x3c920006,0x3d535c60,0xbbb3d49c,0x3dab615a,0x3e18ddc9,0x3e1666c9, -0x3e3f3dfa,0x3e624a2a,0x3e830a64,0x3e8f8696,0x3e9e3399,0x3ea5c6f9,0x3ea7ce1f,0x3eae3532,0x3eaebb2b,0x3eaceb1f,0x3eaf980d,0x3eb16b96,0x3ec2f11d,0x3ec0d2ac,0x3ec0fa35,0x3e8136ab,0x3ce1613a,0x3d6be9d8,0x3d8ceb29,0x3c76d985,0x3d5b75bd,0x3d43c2cf,0x3c231b88,0x3c970205,0x3b82f96b, -0x3c7718b5,0x3cac9266,0x3c910634,0x3c9f26bf,0x3c695c43,0x3d0e8bbc,0x3d2d1d54,0xbbb02f4c,0x3dc5df37,0x3e1adb91,0x3e05d927,0x3e14ea98,0x3e28abe1,0x3e4facc0,0x3e7fd6b7,0x3e8e7a66,0x3e9bf12c,0x3ea7f980,0x3e9adcde,0x3e94ced1,0x3e9ce3c1,0x3e968a79,0x3e9b8af3,0x3eaf4b48,0x3eaeb9c3, -0x3e871eb8,0x3e432124,0x3c597938,0x3d549215,0x3cb6433f,0x3c66ad21,0x3d16c0d7,0x3cb1ff3c,0x3d0afe6d,0x3cd86cad,0x3d3f00ed,0x3c17188f,0x3c450b5b,0x3cad5ae3,0x3d03a62c,0x3d087ed8,0x3d48ae0f,0x3d4740e8,0x3ccd0da2,0x3dba995d,0x3e2148c7,0x3e12056e,0x3e1e73f3,0x3e2fe45f,0x3e420cef, -0x3e4b5ca8,0x3e52b60f,0x3e51f68a,0x3e503a06,0x3e5a3a26,0x3e6d12ac,0x3e7d1865,0x3e786b0a,0x3e71e50f,0x3e6e6fef,0x3e6916e0,0x3e4cdaf7,0x3e02191e,0x3d45534a,0x3db7fee8,0x3d0ff223,0x3d311970,0x3cfcd265,0x3ccb28b2,0xbb08c5d4,0x3d34d285,0xbc8d227a,0x3d80b58c,0xbb0d931d,0x3d09f2b3, -0x38962bc6,0x3d07cc2a,0x3cab5565,0x3d181f55,0x3ca9595c,0x3dbb20d2,0x3e1185bb,0x3de54f1e,0x3dff5960,0x3e058238,0x3e12686e,0x3e19443b,0x3e32bff4,0x3e478537,0x3e5bf84a,0x3e61b9f1,0x3e64c828,0x3e69ae3c,0x3e62a692,0x3e581165,0x3e54cf24,0x3e3814bd,0x3e210374,0x3e137ec2,0xbd314e2a, -0x3dd21757,0x3d0706c3,0x3d2f2b9c,0x3d9cdee6,0x3d8ac808,0x3ddbb83c,0x3da2cdc5,0x3d262ce3,0x3d8fbc44,0x3daedb8a,0x3d9cc2a3,0x3d2e51ef,0x3d869d54,0x3d89836e,0x3d997a33,0xbcb690f6,0x3dead195,0x3e02007f,0x3df4baf6,0x3e001c1e,0x3dfb500b,0x3dfefd2a,0x3dfca0ef,0x3e0dcdf9,0x3e17299f, -0x3e21a6b4,0x3e297a6c,0x3e3288d4,0x3e3c480c,0x3e344b56,0x3e2c49e5,0x3e29034f,0x3e1d34ed,0x3e1710fb,0x3e3eaef4,0x3cfdd759,0xbccb286b,0xbd8efddf,0x3d96688d,0xbca67db0,0xbd9a5c5a,0xbda5e43b,0xbda00bdd,0xbd70fda5,0xbd9b3bb0,0xbda63b49,0xbd9d8384,0xbcaeb0f1,0x3d5745f5,0xbdac5d81, -0xbcc1857e,0x3cc1c426,0x3e349546,0x3e0ebba6,0x3e14ab28,0x3e14eb73,0x3e14beca,0x3e150f7c,0x3e134260,0x3e1725db,0x3e19d2ee,0x3e1cba26,0x3e20f6f0,0x3e248a52,0x3e2a3649,0x3e263bfd,0x3e246166,0x3e220a03,0x3e20aa6b,0x3e2ff142,0x3ebd3e60,0x3eb1330d,0x3ec8464f,0x3e868ae6,0x3e1f9162, -0xb9c67cc8,0x3e9a6b90,0x3e2858e1,0x3c5cc5da,0x3bc30407,0x3bb42eec,0x3c9cc248,0xbb160584,0xbbc2ca14,0xbbcfb1b0,0x3e215c6b,0x3e8b51af,0xbcade073,0x3e1c3a7c,0x3e760d09,0x3eb85558,0x3ea41f7e,0x3eaca088,0x3eae9b71,0x3eb016af,0x3eb1e22b,0x3eb3c2b3,0x3eb61c88,0x3eb92710,0x3ebc8f09, -0x3ec0b6b4,0x3ec4b19c,0x3ecb2247,0x3ec8455a,0x3ec53914,0x3ebd39b0,0x3ebbd0b2,0x3ed4592d,0x3ed0b71f,0x3e046116,0x3ea8b74a,0x3e65ccfe,0x3e5be330,0x3e82d61a,0x3e6a5747,0x3e8b0b0a,0x3e810a4b,0x3e4ff18d,0x3e7a0485,0x3e744e71,0x3e6c4883,0x3e35e945,0x3e533946,0x3e6cf826,0x3e70d49a, -0x3ddfe003,0x3ea5f80d,0x3eacc212,0x3eb2a993,0x3ebbb64f,0x3ebf1ceb,0x3ec4a393,0x3eca25b8,0x3ecfe5eb,0x3ed82a7d,0x3ee2b844,0x3eef968b,0x3efda383,0x3f073132,0x3f066b70,0x3f01a647,0x3eeaddaa,0x3ee0bea1,0x3eeb3984,0x3ec88f74,0x3e8363a9,0x3e851ebc,0x3e2644bb,0x3e2ab4eb,0x3e19c930, -0x3e142ac5,0x3dd026a7,0x3e193276,0x3da449ac,0x3e2c11b3,0x3d9d0b2a,0x3e103172,0x3dbb30c5,0x3e0fc466,0x3e1aeb39,0x3e1719f9,0x3e24a834,0x3e76471e,0x3ea2b2ba,0x3ea89ebd,0x3ebe2fed,0x3ec46490,0x3ecf8357,0x3eda344c,0x3ee644a1,0x3ef5cf58,0x3f051831,0x3f1008c1,0x3f1dd872,0x3f2d34b6, -0x3f2a2b02,0x3f2123de,0x3f09131d,0x3ef91e2e,0x3efec4ce,0x3eb997e6,0x3e506030,0x3e65fe3d,0x3e1da56f,0x3df627eb,0x3de190f4,0x3d942eda,0x3d74b5f0,0x3d1addf9,0x3d5d58fe,0x3c8aa7e0,0x3cb97c36,0x3d1bc907,0x3d120c6f,0x3d86eebf,0x3ce400da,0x3dc35506,0x3d955567,0x3e367c8d,0x3e89e963, -0x3e987600,0x3eb41677,0x3ebbeadb,0x3ecba170,0x3edad066,0x3ee9752d,0x3f0100b9,0x3f105b07,0x3f22f346,0x3f3b06aa,0x3f575d60,0x3f56ffd9,0x3f46c53f,0x3f20099d,0x3f06fea1,0x3f29c90e,0x3ef304f4,0x3ea4819c,0x3e7b9b40,0x3e1c4056,0x3def2ed2,0x3e096bd0,0x3db17389,0x3d987273,0x3d63dc2f, -0x3d5e4662,0x3d294f9b,0x3cf38c11,0x3c9058a5,0x3d29297b,0x3d9323b3,0x3d882d09,0x3dfc8a89,0x3df94f43,0x3e6b464d,0x3ec01913,0x3ed6eb03,0x3f060659,0x3f11f518,0x3f201a63,0x3f2b556c,0x3f3a937b,0x3f4673c3,0x3f492dd4,0x3f6e74a7,0x3f781c98,0x3f720f4e,0x3f6618d9,0x3f580317,0x3f4af428, -0x3f335b37,0x3f4967d1,0x3eed290e,0x3e8b0188,0x3e97b871,0x3e903a5f,0x3e3625e7,0x3e225e96,0x3db3ac73,0x3d95647f,0x3d1cecc3,0x3d4188ae,0x3d3b6e3c,0x3d2ffe21,0x3d811b82,0x3d98eafe,0x3dbcafd8,0x3dd3823a,0x3e216438,0x3e0a0d14,0x3e8a7955,0x3ed4c715,0x3ee8cec7,0x3f117543,0x3f1fb39e, -0x3f33d295,0x3f474aef,0x3f4e75d8,0x3f5677ff,0x3f5bb981,0x3f73e1e8,0x3f805d3d,0x3f80c405,0x3f813f54,0x3f79b8c5,0x3f6ed14d,0x3f531cbe,0x3f792a1e,0x3f1ea472,0x3e80fcda,0x3e9ff2eb,0x3e30500d,0x3e6d6999,0x3d97e532,0x3de73b2f,0x3d6cc3d1,0x3dbf99d5,0x3da81c02,0x3d5bee64,0x3d8183c4, -0x3d9a8ec9,0x3db59271,0x3e16f79a,0x3dff3225,0x3e344037,0x3e35113b,0x3e82da60,0x3ed074ca,0x3ee3748c,0x3f0ffe5e,0x3f24b379,0x3f404483,0x3f5d06f9,0x3f701eaf,0x3f7b3cf8,0x3f7bebcb,0x3f6c3529,0x3f68c9f3,0x3f72b167,0x3f75e995,0x3f7f2739,0x3f881629,0x3f7f9f65,0x3f7502bf,0x3f2e5bf6, -0x3ebef280,0x3ecc7e43,0x3e25bd13,0x3e725cd2,0x3e072203,0x3ddcd1fb,0x3d7dee80,0x3dc183fd,0x3e1753d5,0x3db31688,0x3d7074b2,0x3d8629c3,0x3de6b3bc,0x3ddf1f15,0x3e159667,0x3e6103e3,0x3e0cadc4,0x3e905ce0,0x3ec2b5f8,0x3ecf71e4,0x3efeb354,0x3f1a911b,0x3f325789,0x3f43d0cd,0x3f58a6d4, -0x3f64c835,0x3f698203,0x3f77f494,0x3f7b713a,0x3f7aeefc,0x3f6d7c8e,0x3f6093d0,0x3f5ae230,0x3f6ac3a3,0x3f61f977,0x3f3bda06,0x3ec431fb,0x3ea93f2e,0x3e981e66,0x3e27285d,0x3e4c8cf4,0x3e4f61a9,0x3dd23ac1,0x3deecba9,0x3da3ee9f,0x3db80b95,0x3dc93b66,0x3dd083a9,0x3df1eebb,0x3df0470c, -0x3e310972,0x3e486fe6,0x3e0dce87,0x3eb53116,0x3edc2e46,0x3ed2ef30,0x3ed59157,0x3ef40688,0x3f10c753,0x3f2f2618,0x3f427a49,0x3f552f5d,0x3f64fb6b,0x3f5dea65,0x3f5ae325,0x3f662f08,0x3f59f7d8,0x3f5ba528,0x3f61a727,0x3f666c0a,0x3f3630cb,0x3f1cff6b,0x3e9cd9a0,0x3ea2635b,0x3e4b5d64, -0x3e3dc4dc,0x3e490217,0x3e1434f7,0x3e2305e3,0x3e0aa062,0x3e39c441,0x3dadf83a,0x3dbfccf3,0x3df15b45,0x3e1f2057,0x3e41f430,0x3e7ac723,0x3e76aea5,0x3e624a8b,0x3eb1cc0e,0x3eea4a56,0x3ee12ee8,0x3ee04d39,0x3ef6eb47,0x3f07c374,0x3f12d55e,0x3f1d8732,0x3f2527fa,0x3f2bd475,0x3f33b5ae, -0x3f3cfd65,0x3f4250fd,0x3f3f6dc6,0x3f3adc9e,0x3f30ff68,0x3f315be0,0x3f16f3c4,0x3ef2859f,0x3ea5b2f3,0x3ebc3b1c,0x3e7bcfaa,0x3e6d5f2f,0x3e3edecb,0x3e1f6b50,0x3dd153e2,0x3e4146c2,0x3daf0d73,0x3e77e632,0x3dac2c1c,0x3e3b4b7b,0x3dd0373f,0x3e4264d3,0x3e34d971,0x3e5fdcd8,0x3e5cfcc1, -0x3eaf3236,0x3eda79db,0x3ec5a313,0x3ed2bfb9,0x3edf9afb,0x3eeed6c6,0x3ef89318,0x3f0bdea2,0x3f187ca8,0x3f2508d1,0x3f2a4165,0x3f2e61e6,0x3f336f78,0x3f2e45c0,0x3f286058,0x3f237e2f,0x3f155f03,0x3efbdf75,0x3efe031b,0x3dd39d38,0x3ecb34fb,0x3e866f17,0x3e8642af,0x3eab0011,0x3e9a2bc8, -0x3ec368cd,0x3eb7e7fe,0x3e8d5138,0x3eb23f82,0x3eb434ae,0x3eace303,0x3e835ff0,0x3e9854ee,0x3ea72d07,0x3ea146b6,0x3de2d6a6,0x3ed0699e,0x3ed0ff8e,0x3ed19c2c,0x3ed6c420,0x3ed81791,0x3edcb3d9,0x3edefa69,0x3eefd589,0x3efacaf1,0x3f03622c,0x3f07ced7,0x3f0c8d61,0x3f1265b3,0x3f0ccc0d, -0x3f085b1f,0x3f055367,0x3f0049ba,0x3eed5668,0x3f0851b4,0x3ea976fb,0x3e40d30a,0xbca3b156,0x3ecfede4,0x3e4bfaf6,0xbc2419a0,0xbcbba915,0xbcce003a,0x3b5fe713,0xbd01990f,0xbd1c8d29,0xbd0f1c67,0x3e474a11,0x3eb9e655,0xbd76c714,0x3e3c9d20,0x3e9d8d6f,0x3f012267,0x3ee0fb7e,0x3eea0982, -0x3eea057f,0x3eead1fb,0x3eeb40a3,0x3eea05ff,0x3eee2217,0x3ef148a0,0x3ef49e24,0x3ef98a48,0x3efdbe45,0x3f022b24,0x3effbf26,0x3efda656,0x3efa30e5,0x3ef9ac5b,0x3f082bd2,0x3e55bff9,0x3e4bb958,0x3e12cedf,0x3eadee33,0x3ecd9629,0x3ec89e80,0x3e8d4aa3,0x3ec02004,0x3ec94ffa,0x3eca2660, -0x3ec58973,0x3eb87a9f,0x3ec024b0,0x3ec1f2e5,0x3ebdbb44,0x3ebc699f,0x3e93c889,0x3ec1eaf2,0x3ebfe052,0x3ea7797e,0x3e134842,0x3e3ecd9f,0x3e3b8e11,0x3e3d14b5,0x3e404b63,0x3e4380bb,0x3e474d06,0x3e4c64b7,0x3e4f0f96,0x3e50cde8,0x3e510799,0x3e51f19a,0x3e536056,0x3e5368da,0x3e532f70, -0x3e53c25f,0x3e49f47f,0x3e5aae82,0x3e74d658,0x3edf1eb6,0x3e6a174c,0x3e99671f,0x3e8e4651,0x3e6f042c,0x3e6a0b11,0x3e37e5f8,0x3e5c80f0,0x3e835748,0x3e64fca5,0x3e4fa609,0x3e5c6f75,0x3e7a1984,0x3e6e1b5d,0x3e7fad3c,0x3e6b7278,0x3eafdb56,0x3e4da08c,0x3e30d4a6,0x3e45a018,0x3e446d7d, -0x3e4e0013,0x3e563acf,0x3e6361ec,0x3e7332e6,0x3e7d3a38,0x3e8088a0,0x3e7fc39c,0x3e812def,0x3e84492f,0x3e85aea3,0x3e854822,0x3e8388e3,0x3e7943d6,0x3e4e7388,0x3e839d15,0x3ead296c,0x3e8413af,0x3e896cf2,0x3e6c26b3,0x3e58ea65,0x3e43400c,0x3e487f82,0x3e09fb3a,0x3e4e41f1,0x3e00bd73, -0x3e33086e,0x3e1cb208,0x3e3be37e,0x3e306351,0x3e488967,0x3e4db166,0x3e7909be,0x3e495cf1,0x3e160953,0x3e3e8754,0x3e3fa509,0x3e5323f1,0x3e6554c1,0x3e7cc060,0x3e8cc723,0x3e945688,0x3e98bba9,0x3e9a698e,0x3e9be62a,0x3e9e37ac,0x3ea05146,0x3ea10d78,0x3e9c2451,0x3e8d22a9,0x3e56e8c9, -0x3ea1bd29,0x3eadd2a3,0x3e58f6dc,0x3e3d3e90,0x3e2e873f,0x3e057f5e,0x3dbd068d,0x3d84d6ed,0x3d629cf8,0x3d1eb30d,0x3d286cc7,0x3d305c88,0x3d24d20e,0x3d5fe81a,0x3d97a228,0x3de284cc,0x3dde22a3,0x3e2d4336,0x3e180b96,0x3df262a3,0x3e1885ee,0x3e2351bc,0x3e3e9d50,0x3e58e0b0,0x3e7c67b0, -0x3e96359c,0x3ea52caf,0x3ea9c547,0x3ea96f08,0x3ead6e06,0x3eb5d2f9,0x3ebdb6b6,0x3ebf2951,0x3eb3237f,0x3e9f6f66,0x3e38a5c9,0x3e86bc14,0x3ed34d72,0x3e961725,0x3e756b50,0x3e52132a,0x3e123158,0x3dfd135d,0x3dbf4376,0x3d91d552,0x3d9456e7,0x3d5f3afc,0x3d616b78,0x3d689ef8,0x3d9fa6f7, -0x3dbfde1e,0x3e01c3c9,0x3e19164b,0x3e6c3a4e,0x3e65e02f,0x3e6811cd,0x3e9a36a3,0x3ea124ca,0x3eb0cdc3,0x3ec3c93f,0x3ee58f13,0x3edf658c,0x3ee88962,0x3efc021b,0x3f028375,0x3f00e460,0x3eee3e06,0x3edcecbf,0x3ed2734d,0x3ed11cff,0x3eb21605,0x3e856416,0x3edc6f93,0x3f07827a,0x3eb8dc7b, -0x3e9957a6,0x3e7b5050,0x3e2e43bb,0x3e1de746,0x3dd88b7d,0x3db9a1a9,0x3da6d728,0x3d8c12a1,0x3d82034d,0x3d8da5d1,0x3da637df,0x3ddea6d2,0x3e3c34f5,0x3e538449,0x3e943ff8,0x3e86b400,0x3e6baae5,0x3e88bf77,0x3e7a83f6,0x3e950cb1,0x3eaeaaa2,0x3ed2df13,0x3f032dec,0x3f157724,0x3f1d4e48, -0x3f231c53,0x3f2156be,0x3f0ffdfa,0x3f085841,0x3efa9013,0x3ee18f5c,0x3ecb7830,0x3e434e20,0x3ef7df06,0x3f1d657d,0x3eb469c8,0x3ed3b503,0x3e8541d6,0x3e7b3992,0x3e1fb57c,0x3dfd2c32,0x3dedd014,0x3e2345c0,0x3de80068,0x3de89f6d,0x3e048968,0x3e09d0d1,0x3e2263d1,0x3e6a984d,0x3e550521, -0x3e8bfd73,0x3e772aa6,0x3e20ad2c,0x3e5c1e98,0x3e5571d1,0x3e32401e,0x3e1e3840,0x3e244536,0x3e68950b,0x3eb07d7b,0x3f0133a8,0x3f19fcc3,0x3f127607,0x3eebc91a,0x3ec79cec,0x3ea6fff6,0x3e3b07bf,0x3e866ddd,0x3d2ae3b7,0x3ed36c93,0x3f1a58b7,0x3e989da9,0x3eb0dfa6,0x3e60d585,0x3e433ced, -0x3e1dba0d,0x3e08a778,0x3e119d7b,0x3e8439ea,0x3e089cbc,0x3dc5edd9,0x3e118e3a,0x3e295365,0x3e46d4d3,0x3e7f07e6,0x3e809c3b,0x3ea8c5ab,0x3e79eb7e,0x3e2117c8,0x3e4787a9,0x3e46fc44,0x3e783b06,0x3e85d66d,0x3e8e6950,0x3ea010dc,0x3eb644aa,0x3ecf67ac,0x3efc0f9a,0x3f0e2324,0x3f17b639, -0x3ef6a17e,0x3ec67418,0x3e7743ca,0x3e705982,0x3e5581ff,0x3ea08c57,0x3f18a705,0x3ed11192,0x3e992023,0x3e95a79e,0x3e5f6345,0x3e5c1113,0x3e54a719,0x3e4342f5,0x3e534c06,0x3e1d0cb7,0x3e162305,0x3e31d973,0x3e5402bf,0x3e73c866,0x3e84cdc4,0x3e9356a9,0x3ec2b414,0x3ead5bca,0x3e8ae941, -0x3e9778e4,0x3e7538c5,0x3e8545b2,0x3e84f5dc,0x3e8de2d3,0x3e989563,0x3eab5a3c,0x3ec1e2de,0x3ef8a799,0x3f0f6919,0x3f195dbd,0x3f1854ec,0x3f0c0a0d,0x3ed0307c,0x3ec7403f,0x3ec4ac8c,0x3ed6cada,0x3f1adb62,0x3eeaab7d,0x3ec26065,0x3eb4ab7f,0x3e8c1a87,0x3e74b400,0x3e637d4f,0x3e619e09, -0x3e5a3236,0x3e437f68,0x3e3ab418,0x3e459c4b,0x3e603487,0x3e8b3c05,0x3ea19348,0x3eaeda1d,0x3ecd0046,0x3ec03939,0x3ea73bee,0x3eaca7fc,0x3e8a400d,0x3e88ca06,0x3e8fae1b,0x3ea862ee,0x3ec658d2,0x3ef0216c,0x3f0ebfa0,0x3f16b9b8,0x3f17d7d1,0x3f161653,0x3f1bb2c0,0x3f18c8e7,0x3f0878d8, -0x3f0143f5,0x3ee78aa7,0x3eff7320,0x3f01e37a,0x3ed42618,0x3ece35e1,0x3eb01af7,0x3ea18b14,0x3e871c5f,0x3e926e93,0x3e80d2de,0x3e9a1719,0x3e85c8e4,0x3e8ac545,0x3e8fa74e,0x3e94bacc,0x3e9eb364,0x3eaf1556,0x3eb624d6,0x3ed02a13,0x3ebc68cc,0x3eab52d6,0x3ec3b201,0x3ec85b4c,0x3ed120f8, -0x3ed136f8,0x3ed2d5af,0x3ed738df,0x3ed99a38,0x3edbd48d,0x3eea312c,0x3efabad5,0x3f05441f,0x3f052c18,0x3f07c90e,0x3f085f12,0x3f05609b,0x3edc5720,0x3ee92038,0x3f0ae2f4,0x3ee1df47,0x3ef1a768,0x3ee2ebbd,0x3ecf1221,0x3ec54cc3,0x3eb80206,0x3ecb2bc8,0x3ed6b930,0x3ece8ff6,0x3ebbc23b, -0x3ec01186,0x3ecb1340,0x3ec9f6ef,0x3ed38f32,0x3ec9648c,0x3ee5df07,0x3ed404dc,0x3ecf4914,0x3edcac53,0x3ee07d8e,0x3eea2890,0x3ef37e13,0x3efdd967,0x3efa79a1,0x3efa3800,0x3ef9087b,0x3ef84122,0x3ef541ab,0x3ef56476,0x3eef5607,0x3eebb839,0x3ee5e635,0x3ee6a81b,0x3ec8ffba,0x3eb8de0f, -0x3f085a15,0x3f0f471c,0x3ef81b51,0x3ef6e88e,0x3f0b4865,0x3efd2988,0x3eff7dac,0x3efb7de0,0x3ef0cc8a,0x3ef6291a,0x3efa78c5,0x3ef59a18,0x3f09c302,0x3ef89e8e,0x3ef2950c,0x3f0b77ff,0x3f049b1a,0x3eb2940a,0x3ec22f6a,0x3ec541ce,0x3ec724a3,0x3ec9f072,0x3ecb612a,0x3eceeec8,0x3ecda2ec, -0x3ecdc45a,0x3ecdc591,0x3ecd3845,0x3ecce581,0x3eccaaa8,0x3ecb90da,0x3ecad0c0,0x3ec8f7a8,0x3ec9573f,0x3ed73623,0xbdb20078,0xbda3068e,0xbe0820ea,0xbc803ecd,0x3de4b7f8,0x3ea9edf5,0xbd96ae4e,0x3db6fd1c,0x3e967c23,0x3e9a19fc,0x3e99d4be,0x3e957de3,0x3ea00574,0x3ea2f557,0x3ea4dd1d, -0x3dc0e3ed,0xbd30e039,0x3eb3481a,0x3de1e6de,0x3b68bd51,0xbddd93df,0xbd840eea,0xbda93e8e,0xbdaf3a3a,0xbdb0e0d5,0xbdb133e5,0xbdaecc64,0xbdaf585a,0xbdb4d198,0xbdbc3cab,0xbdce01a6,0xbdde9199,0xbdfe2844,0xbdeb1e88,0xbde14631,0xbdc6d5b4,0xbdcd7e40,0xbde4ea27,0xbdf54122,0x3e420b20, -0xbd8add3a,0x3d0abd05,0x3d3bc163,0xbc645793,0x3bd9b2d4,0xbd60075b,0xbd2a93a0,0x3c72826c,0xbd048558,0xbca079b2,0xbc7897e0,0x3d73352b,0x3d14fdb1,0x3b33d79f,0x3c9c1a3f,0x3e2fbf12,0xbd859b02,0xbd863396,0xbda306de,0xbdbf5c78,0xbdc36ed8,0xbdc3a450,0xbdb936df,0xbdb350ac,0xbdc073aa, -0xbddd3fbe,0xbe0a20bd,0xbe292c8e,0xbe563a55,0xbe497eb1,0xbe3a1e73,0xbe102686,0xbe084c84,0xbe0535b7,0xbd9be4e2,0x3c50a154,0xbc6bd0e0,0x3d88832a,0x3d612e57,0x3d594f5e,0x3d0682b4,0x3d82d24b,0x3c803a1e,0x3db064e9,0x3ae3b1d3,0x3dc405c8,0x3cd9cd84,0x3db16b49,0x3d41b31f,0x3d5eb511, -0x3d9d2c1b,0x3d88cab3,0x3c177ba0,0xbd5e54f3,0xbd87af14,0xbdcfec92,0xbdd60dab,0xbdd50c2f,0xbdc0d5a7,0xbdb7a2cf,0xbdc8906b,0xbdfbbf51,0xbe2b3ad4,0xbe6e7e40,0xbea4878b,0xbe935197,0xbe83e80d,0xbe2a4e46,0xbe0ede22,0xbe00f997,0xbc33374d,0x3da9dd48,0x3b8d8068,0x3d0d9def,0x3d6c2a9d, -0x3d3650d1,0x3d38b792,0x3cd8fe0a,0x3d091d63,0x3cd8d091,0x3d50652c,0x3d2df52b,0x3d2153d0,0x3d565a12,0x3d4de086,0x3dce3407,0x3d95d50d,0x3ddba832,0x3d3ebb48,0xbc9b8449,0xbd47d2f3,0xbdbcb489,0xbdbc2736,0xbdb6deed,0xbd89fdad,0xbd403954,0xbd836abc,0xbdcf1584,0xbe388466,0xbe994a6e, -0xbeecdde4,0xbedd5f2b,0xbebe878b,0xbe6073e0,0xbe12fc59,0xbe9538cf,0xbe40a8c1,0xbd572735,0x3cb15c7f,0x3d71b917,0x3d65df97,0x3b18ece6,0x3cdfb0b7,0x3c5c813b,0x3c98e3c3,0x3d135146,0x3d360886,0x3d607893,0x3d710cda,0x3d6ec94d,0x3d65b833,0x3dae55b7,0x3daedb2a,0x3df5413a,0x3d251b75, -0xbd92a577,0xbdca6499,0xbe46b0bb,0xbe612259,0xbe719906,0xbe631925,0xbe802ab7,0xbe8019e0,0xbe405e31,0xbed3c684,0xbeeebcc8,0xbeeac535,0xbecce332,0xbeb97136,0xbea9f316,0xbe918992,0xbefeb445,0xbd698cfd,0x3e2005e4,0x3d93b002,0x3cdf5abf,0x3db57a2a,0x3d8ab514,0x3deaf5be,0x3d9e30cb, -0x3d9ec099,0x3da13fea,0x3d22614f,0x3cdfca01,0x3c684953,0x3cb090b6,0x3d12b566,0x3d90a04f,0x3d8aa881,0x3e143f00,0x3d1974b3,0xbdaeb810,0xbe017ecd,0xbe8cbfb6,0xbeab7af3,0xbed2e097,0xbef04e67,0xbedc140b,0xbeca6745,0xbeb1a599,0xbee16243,0xbef5a9f9,0xbeffe10a,0xbeee7cc7,0xbee96136, -0xbef5733c,0xbef873d9,0xbf1ed7dd,0xbe7bc2a6,0x3e3d3e1c,0x3d30e01a,0x3e18af04,0x3cd5a79a,0x3e26481f,0x3d9f2f0c,0x3dc1c2b3,0x3d8e0778,0x3e18686c,0x3df097a6,0x3de5745a,0x3dc99926,0x3d9db07b,0x3d11da8a,0x3df368fd,0x3da3af04,0x3dafa1d7,0x3cfa37f1,0xbe09b3f7,0xbe454c6c,0xbeae56ec, -0xbed7d653,0xbf074d80,0xbf230132,0xbf30a207,0xbf2c47a4,0xbf12f1c5,0xbebc6406,0xbe8ca41a,0xbe9ec23b,0xbe75c958,0xbe9f38e5,0xbee94785,0xbf08f3e1,0xbee0ffa9,0xbe8e4d08,0x3ceaf712,0xbceacfdc,0x3e2fd2e0,0x3cdb588c,0x3dd69d06,0x3dae4039,0x3dd1f249,0x3dd37f61,0x3e4ea42b,0x3da74ce0, -0x3d7dfccb,0x3dd46c07,0x3da6485f,0x3dfd0f00,0x3dfffd85,0x3d8a73b1,0x3e24ce9b,0x3b96582a,0xbdd8a30a,0xbe0c0dc4,0xbe75139c,0xbeb52255,0xbee7b173,0xbf02b217,0xbf10f46a,0xbf0e1928,0xbefa1761,0xbeeb4336,0xbec2347f,0xbea69266,0xbe3a574a,0xbd4e10b6,0x3db6e6cb,0xbe85e2d1,0xbea21e3d, -0xbeb77127,0xbc624ef3,0x3c2ee7d7,0x3c8c3419,0x3df5e16e,0x3d7775f5,0x3cc2134e,0x3e04a851,0x3debdf42,0x3e49bf3e,0x3df7951f,0x3dd6a7e6,0x3dfc7b11,0x3e05507f,0x3e2ac256,0x3e014da4,0x3e14fdd3,0x3e7c7dd4,0xbb85fda5,0xbdeeefff,0xbde31801,0xbdfe18de,0xbe34b7fc,0xbe87b8f8,0xbec369e7, -0xbee1629f,0xbef6941f,0xbef84853,0xbec485bd,0xbe8ca97f,0xbe7d0bba,0xbdc77a34,0xbdd0af55,0xbe1c383e,0xbe86202f,0xbe54da06,0xbe2e282e,0x3e257d24,0x3db3ffa4,0x3e2f5800,0x3e0ddbb6,0x3dbc15e4,0x3de69397,0x3def0aa0,0x3e193b74,0x3da767cf,0x3e336e4c,0x3e1b81e8,0x3e0a6e23,0x3de60509, -0x3dd2b027,0x3d96d09b,0x3de9e5ae,0x3e39af64,0x3ce1489a,0xbdb4755c,0xbd6cff8f,0xbda77b26,0xbe003d53,0xbe3143c0,0xbe5380d0,0xbe71c51b,0xbe6f0071,0xbe4dcfc4,0xbe483687,0xbe4060f9,0xbe1b98c8,0xbda4073a,0xbd56120b,0xbd021e87,0xbdecc29a,0xbd90c8b2,0x3d02a431,0x3e414c68,0x3daf977b, -0x3e47767f,0x3e287eec,0x3e3f0d14,0x3e30b13b,0x3e703b04,0x3df3c775,0x3e70f549,0x3d685d6a,0x3e7e3eea,0x3e072b01,0x3e7b2246,0x3e1f5479,0x3e42b384,0x3e2475ef,0x3e3f4856,0x3d4d3442,0xbd09b285,0x3d3949f7,0x3d27d072,0x3c8bbb94,0xbc771305,0xbd051911,0xbdad1998,0xbe018798,0xbe313ae8, -0xbe2da90d,0xbe254867,0xbe1f6215,0xbe00d494,0xbda5b43c,0xbccfda68,0xbc3052ba,0xbca1f59d,0xbd190b72,0x3ef3b4a5,0x3d4b385b,0x3e5431a3,0x3e45b92c,0x3d983ebd,0x3dbc0cc4,0xbc784229,0x3c63ee0e,0x3de683cd,0x3c75e32a,0x3bc656b2,0x3c6ac682,0x3e14a56e,0x3de803d5,0x3dad1393,0x3def554b, -0x3ed07382,0x3d0ed124,0x3d58167f,0x3d8ec196,0x3d9d8f78,0x3dbc0c16,0x3dcfe68a,0x3dec22f6,0x3d99d60f,0x3d5282c1,0x3ccd8ed8,0x3c0ba8f5,0xbc494906,0xbd0e4a38,0xbcd6f6ee,0xbccb8815,0xbcecf24d,0xbca22b73,0xbd38cd71,0xbe144d01,0x3e04b876,0x3ea4f8e2,0x3f1c1e5e,0x39fe9be3,0x3e8ff8ff, -0x3f1068c0,0x3f150567,0x3f14af7b,0x3f0bc380,0x3f167e5b,0x3f18ecda,0x3f173ddf,0x3e8d4fef,0x3d38b8b5,0x3f24589b,0x3e9db9c5,0x3e115e8e,0xbdfa8632,0xbce70d4e,0xbd351524,0xbd1a95b8,0xbd00b972,0xbcce1ad9,0xbc3c95c1,0xbcbcc15b,0xbcf19def,0xbd165712,0xbd4a156d,0xbd76aa46,0xbd97ec3f, -0xbd92fc30,0xbd930c1d,0xbd8fd6a7,0xbd93d351,0xbdc274b4,0x3d898d77,0x3d8046f3,0x3deb9726,0xbd222642,0xbdf90cfb,0xbe1a8e4c,0x3bd648bb,0xbdccb159,0xbe190227,0xbe1d1bc8,0xbe175665,0xbdfc2ef1,0xbe0dac04,0xbe0ee109,0xbe0977b0,0xbdc43c09,0xbc0b4eb7,0xbe0d4d19,0xbdcae833,0xbd1416ba, -0x3dccc590,0x3d830de0,0x3d8bac7b,0x3d831972,0x3d7a3220,0x3d70d332,0x3d702f66,0x3d5dc842,0x3d5c0e25,0x3d60b79f,0x3d695788,0x3d72d60c,0x3d777559,0x3d85792c,0x3d8375f8,0x3d632d31,0x3d8a31b9,0x3db23b69,0x3d9d8d37,0xbe10da40,0x3d60fd0e,0xbce670c5,0xbc9a35cd,0x3c999265,0x3c5817e8, -0x3d5561ce,0x3cf52bc9,0xbb925351,0x3cd97550,0x3d15438f,0x3cafc774,0xbaf29dca,0x3c35be95,0x3c1e4d79,0x3cf67d19,0xbd8ba95a,0x3d9d315a,0x3dc60f9b,0x3dabf73d,0x3da0e229,0x3d8fb360,0x3d859a54,0x3d837aec,0x3d4fea8b,0x3d3fbb35,0x3d5132f2,0x3d650edd,0x3d6c2a88,0x3d53e08d,0x3d808f17, -0x3d8590bf,0x3d50a3cd,0x3d8e0938,0x3e18efb5,0x3dcf1863,0xbc7741f1,0x3cd43a32,0xbcdb0d26,0x3aee8fa2,0xb98c93a0,0x3bfa8151,0xbc595310,0x3d2ad7e2,0xba322ce1,0x3d8863d4,0x3c414567,0x3d042e6d,0x3c53834a,0x3d0f1062,0x3cac9a99,0x3d0e6bd2,0x3c854761,0x3d93b4a2,0x3df0a273,0x3db01f83, -0x3d9758b0,0x3d638a3c,0x3d31b92d,0x3d3547f3,0x3cb94d7f,0x3cc23911,0x3cfb80aa,0x3d06efdd,0x3d26c90e,0x3d140cc6,0x3d8304ba,0x3d7a233b,0x3d30b331,0x3db5f93f,0x3e457790,0x3da1ca7c,0xbb4af62f,0x3da39500,0x3d16a778,0x3cc3c790,0x3d11957d,0x3d13c247,0x3d250bc8,0x3d1f895f,0x3d86326a, -0x3d2e5a73,0x3d434c14,0x3d547e0b,0x3d6e5123,0x3d798961,0x3d3913b9,0x3d96a357,0x3d5806fd,0x3de144f7,0x3e1bf82c,0x3e08c1d0,0x3dedd6db,0x3dbf126f,0x3daca85f,0x3db859f1,0x3d67a1e7,0x3d3fb9c0,0x3d681cfc,0x3d738900,0x3d2cd7fb,0x3a9c0887,0x3cd78646,0x3d084fe6,0x3d1d5202,0x3dd00e52, -0x3ebb81db,0x3e616f14,0xbcb9f66b,0x3d68d674,0x3cdc02d5,0x3cf96a9b,0x3d90fc76,0x3d098da6,0x3cc0744b,0x3cd34b47,0x3d02bcbc,0x3d4d0356,0x3d43f1a0,0x3d16b7cb,0x3d0e1241,0x3d3c2805,0x3d64bd42,0x3d85f2cc,0x3cc805d6,0x3d1708f0,0x3cda666e,0xbd5190e8,0xbdd8372d,0xbe1dbcaf,0xbe534bf5, -0xbe87d823,0xbe651ec6,0xbe559cc9,0xbe4b5441,0xbe4497db,0xbdb6674f,0x3db58583,0x3e288ead,0x3e3e7326,0x3e0a3450,0x3e39756c,0x3ea6f61c,0x3c960075,0xbe228300,0x3c7c5319,0x3d42d444,0x3d3599b7,0x3d940793,0x3d87a2dc,0x3d97afc6,0x3d7b46a2,0x3da266eb,0x3d1a534f,0x3cc68603,0x3c90056c, -0x3d219cda,0x3d1b6df1,0xba5b82bd,0x3bb3b52e,0xbccc1a35,0x3d51c7b9,0x3dcb0cc6,0x3d91bf9d,0x3d8d1fea,0x3c55cb25,0xbd76e700,0xbe225937,0xbe9062cb,0xbeafd0ed,0xbea86dbd,0xbea0a5e1,0xbe6d105f,0xbcdc89ab,0x3d895a11,0x3e2c40e1,0x3e75e9be,0x3e55b12e,0x3f151b2d,0x3d26f77b,0xbe73a3df, -0x3d09e00f,0xbe1371ec,0x3c4e755d,0xbd04be52,0x3d4dfb90,0x3d476262,0x3d892ebc,0x3ded8e27,0x3db0551d,0x3d9c516c,0x3d2ac084,0x3d1690ed,0x3d2815bb,0x3b8c315e,0x3d91e42c,0x3cebd22e,0x3dcbf52d,0x3e648fcc,0x3e20a2eb,0x3e0d40d5,0x3e36b5ad,0x3e4826b9,0x3e4406f5,0x3df038a7,0xbac68b64, -0xbe240142,0xbe2e8cd0,0xbc924010,0x3e640c50,0x3ecb4d7b,0x3ef57ac4,0x3f2585ea,0x3f087d6a,0x3f32db24,0x3e7dbec2,0xbded2785,0x3e21ada1,0xbc495ca5,0x3dd92421,0x3d8fbdf3,0x3dc20d55,0x3d8368f4,0x3db5c7fd,0x3dfd2d4f,0x3d6d35ca,0x3d3d7e53,0x3d6ee792,0x3d4198a3,0x3d530d83,0x3d1cb066, -0x3d717fd8,0xbc416508,0x3dc36be6,0x3e6011cf,0x3e3b7ca9,0x3e3e3fb9,0x3de0464e,0x3dccd33f,0x3dffee65,0x3df40638,0x3de6634e,0x3dc50023,0x3d13e041,0x3b630159,0xbc9d67a9,0x3e633cba,0x3ecab89f,0x3f1bbd44,0x3f0473e1,0x3ea26427,0x3e625ec2,0xbdc18896,0x3cda17d2,0x3dc4ede6,0x3d43fc5d, -0x3d8b602b,0x3cccdbb2,0x3d13c128,0x3d506368,0x3dadb04b,0x3db05abf,0x3d9fe46c,0x3d539721,0x3cc40e9a,0x3ca51ffb,0x3c3955f1,0x3c465ab6,0xbd3c6e4d,0xbc6af41f,0x3d49c24e,0x3d7779e3,0x3e34f69b,0x3e2f9e2b,0x3e3ac83e,0x3e1e51c4,0x3e17498f,0x3dd7d025,0x3d45dcf5,0xbdde1659,0xbe31ace1, -0xbe317806,0xbdb0aee6,0x3c6a6912,0x3e43234d,0x3e306df0,0xbc216de0,0xbab6b44a,0xbe418e34,0xbdc6344f,0xbd5027de,0xbd74cf3a,0xbbbf637b,0x3cd76adb,0x3d2073ee,0x3d20c819,0x3c4da622,0x3d984250,0x3da5eed8,0x3d846433,0x3d3b15c6,0x3bd35a19,0xbd178248,0xbd0e3c37,0xbd7f2689,0xbda87b8b, -0xbccb4fd6,0x3c883618,0x3e0d6ccf,0x3e31ac24,0x3e2a5035,0x3dce6e90,0x3cbb7fca,0xbdacc7ff,0xbe3b897b,0xbe5c40c4,0xbe553452,0xbe4cc55b,0xbe3f2807,0xbe1c75a4,0xbdb2e97c,0xbdac5482,0xbdfe7d02,0xbe100be9,0xbd9081b8,0xbcc55f5b,0x3c9a650a,0x3d110014,0x3d0e4d89,0x3d61ffbb,0x3d246eec, -0x3cfe1d38,0x3c64af90,0xbaa761a7,0x3d070536,0xbaf89531,0x3cb87015,0xbc25ee85,0xbcce51f0,0xbcf66239,0xbd6b1749,0xbd04b6a5,0x3c4f9ae1,0x3c879ee3,0x3d050efe,0x3cefb7f6,0x3d3be073,0x3d8ab6ca,0x3d6ba929,0x3d679ca7,0x3d5bd5ce,0x3b076972,0xbd542a8f,0xbdd50329,0xbdf51204,0xbe102bf1, -0xbe1a6923,0xbe14344d,0xbe0921a9,0xbe236504,0xbd96cd22,0xbe0ec6c4,0xbde9e402,0xbdd9b818,0xbdd37371,0xbdbc5a01,0xbdc43e07,0xbdd696bd,0xbdcc5407,0xbdd76ac0,0xbda55310,0xbdb5cb53,0xbd846dda,0xbd95f130,0xbda86130,0xbd70bc48,0xbc243ab8,0xbde0774e,0xbdd80796,0xbde88ab4,0xbde7267a, -0xbdf96891,0xbe0a2022,0xbe1620f5,0xbe197907,0xbe1f6318,0xbe218248,0xbe208b58,0xbe1a35ac,0xbe1aca68,0xbe12ed2c,0xbe0f00ba,0xbe0c1b03,0xbe0f854d,0xbe091982,0xbe152002,0xbe289a67,0xbe16dd3d,0xbc8b2400,0xbe2ea5ce,0xbe1e089f,0xbd51b6b2,0xbd52ea16,0xbd4dcb6f,0xbd3676da,0xbd37db04, -0xbd4a528b,0xbd378057,0xbe1aeb9d,0xbe222e70,0xbbe40a42,0xbe141b70,0xbe1a0360,0xbe00a1a5,0xbdeafa5c,0xbdfa7132,0xbdfc14ed,0xbdf9f03b,0xbdf276e8,0xbdeea24a,0xbdf3c06e,0xbdf9899e,0xbe007795,0xbe029d2a,0xbe05a5c8,0xbe07fd78,0xbe09ae59,0xbe0b764a,0xbe0b18ec,0xbe0eb8ed,0xbe1c830e, -0x3dce82c0,0x3dd55707,0x3dcc5e72,0x3e19b2fe,0x3e0b75b9,0x3d24f953,0x3e0bc7d0,0x3e01d335,0x3d78197f,0x3d72838c,0x3d6b827d,0x3d48780a,0x3d4e725e,0x3d46402c,0x3d2239e2,0x3dfe72f1,0x3e04f430,0x3d03f6d0,0x3df6287e,0x3e051a38,0x3da832c4,0x3db81e7e,0x3dbe4752,0x3dbdd9e0,0x3dba3b5b, -0x3db4d1be,0x3daeb7df,0x3da6bdfe,0x3da2797a,0x3d9f9104,0x3da82a80,0x3db56a68,0x3dced484,0x3dcd5617,0x3dd2c0e0,0x3dd68287,0x3ddb41a9,0x3e07653b,0x3e17376c,0x3e02471a,0x3e0572b9,0x3dfd669f,0x3dd38a64,0x3dcd0aa8,0x3dc6cd41,0x3dc42e18,0x3ddfb77f,0x3df2a008,0x3de73e63,0x3dc80c46, -0x3dca5a91,0x3db6ea64,0x3db7133f,0x3dde1da3,0x3db72533,0x3dcb5c9e,0x3dd59c10,0x3dbc4daf,0x3dd8b780,0x3dd45282,0x3dd31407,0x3dc5c15a,0x3db47918,0x3d9c9911,0x3d91516e,0x3d8b0c40,0x3d94de3e,0x3db1fe91,0x3df75a6c,0x3df9dc33,0x3e09f609,0x3e0ede39,0x3e1552b9,0x3e231776,0x3e32b3ac, -0x3e51a60e,0x3e2bf642,0x3e04680b,0x3dcd3df2,0x3db404b0,0x3dc1f2fe,0x3dac1ef8,0x3d927933,0x3dc36a66,0x3d9bd717,0x3d95113c,0x3d86dd53,0x3d9a7e86,0x3d9d98f3,0x3d9e42e3,0x3d930c51,0x3dd51656,0x3dbd3776,0x3da9e6b1,0x3dd9ea29,0x3dd04e9e,0x3dc7aa7a,0x3da0bc13,0x3d69126a,0x3d02f020, -0x3c587543,0x3c0f5e80,0x3cc334f6,0x3d93c4bd,0x3e19bbc5,0x3e1608ee,0x3e2b61e7,0x3e248b3e,0x3e3034fb,0x3e1eb3f0,0x3e3a35cc,0x3e47e7d7,0x3e2df703,0x3e02d038,0x3dab57b4,0x3d7c26f1,0x3d7d3770,0x3d5307f2,0x3d5954bb,0x3d6ddd3b,0x3d4099b8,0x3d4a64fc,0x3d17d217,0x3d589bf7,0x3d4fa7f4, -0x3d6cda5d,0x3d6013eb,0x3dc7a372,0x3db03c80,0x3da61882,0x3de069d2,0x3de4eab0,0x3de5b9a1,0x3dbfce9f,0x3d7a02ef,0x3c9b0f69,0x3b1cddaa,0xbc93d628,0xbc29bd28,0x3d4255fe,0x3e271e57,0x3e27fd07,0x3e4645f2,0x3e3f05bb,0x3e44a250,0x3ed7e396,0x3efcf99b,0x3ee0b397,0x3e99a479,0x3e80ee64, -0x3e67011f,0x3e4d8acd,0x3e0e325c,0x3dd1af80,0x3d933821,0x3d82fd7a,0x3d583397,0x3d2b4a2c,0x3cfa2bf4,0x3d27bbf1,0x3d40a20a,0x3d8d2929,0x3d2aa64f,0x3d63271e,0x3d8c8b5e,0x3db58b95,0x3ddcdc29,0x3dcd926f,0x3d25c884,0xbcde5a0b,0xbda98ee1,0xbe11dc2f,0xbe45412d,0xbe87e070,0xbc3e93a0, -0x3de8a800,0x3e7684a0,0x3e867f17,0x3ea8fa95,0x3ecd04be,0x3ed6a67a,0x3f235095,0x3ebd919a,0x3e70472f,0x3e3faaef,0x3e2f4cda,0x3ded2db1,0x3dad4a04,0x3d7f552e,0x3d9d6b45,0x3d9e1b6d,0x3d9bc504,0x3d821ff7,0x3d80f859,0x3d460a79,0x3d8b45dd,0x3d8ec59e,0x3d90b5ad,0x3d8727d6,0x3d9eb300, -0x3e00a392,0x3e07039a,0x3e28b5e6,0x3e6ab081,0x3e8e84ef,0x3ea14a8f,0x3ea304cd,0x3e827aac,0x3e485d70,0x3df1229e,0x3e46d8bc,0x3e75cc34,0x3eaf22a8,0x3e7671c6,0x3e97d07a,0x3ee4b9f2,0x3f236636,0x3eae9010,0x3f039487,0x3eb1d4e6,0x3e5e9c61,0x3e5311e9,0x3e25841e,0x3dd329b7,0x3da42d49, -0x3da22be7,0x3d9e365a,0x3df0fd51,0x3d5cad69,0x3cf96841,0x3c908b08,0x3d6849de,0x3db7eae0,0x3d99c396,0x3e0224a3,0x3e3abba4,0x3e480660,0x3e7d4173,0x3ea482eb,0x3ec02888,0x3eb797b2,0x3eaf5993,0x3ea9ebfc,0x3eb2b996,0x3eb40519,0x3ea3321d,0x3e674515,0x3e1a4115,0x3df94aac,0xbdb3f343, -0xbe22b337,0xbe866c01,0x3e0d3239,0xbeae7ea2,0x3e7783c3,0x3ec7545a,0x3de8bc24,0x3e19fdf6,0x3de48c37,0x3dc6d347,0x3dd0aed9,0x3dc3512f,0x3daa3af5,0x3db046dc,0x3d996d0f,0x3dabdcb1,0x3d93b508,0x3dab77f5,0x3d99df50,0x3db233f1,0x3de17d16,0x3e170ad4,0x3e541694,0x3e816255,0x3e8f3331, -0x3e96c349,0x3ea7344b,0x3eb3ddb4,0x3eb457e9,0x3eacf4e4,0x3e8cd011,0x3e2d68b8,0x3dc8dfb2,0x3ba42ecd,0xbd18e36a,0xbe80d2f0,0xbee28aa5,0xbf48df8b,0xbec8b044,0xbec296b4,0x3c8b1372,0x3e9a5721,0x3e3efe14,0x3dd330a8,0x3e0d2d62,0x3d984028,0x3d6805f4,0x3d838a0b,0x3d55fe07,0x3d02678c, -0x3d92d77b,0x3d8dcd35,0x3cf94c9e,0x3ce22f65,0x3ca278ae,0x3d548210,0x3cd43565,0x3ca53dcc,0x3dd2cd95,0x3e4638b0,0x3e89ae55,0x3ea2d7a6,0x3e9ab7f4,0x3e96d797,0x3e9352e6,0x3e845151,0x3e5af083,0x3e0ecc08,0x3d9c1215,0xbcf9a6e7,0xbdeaf7e3,0xbe8cf66d,0xbeaa0432,0xbedc4f73,0xbeaf4be0, -0xbe394f8e,0xbd87597a,0x3dd20780,0x3d5c7b00,0x3d3d0dc7,0x3d417aad,0x3d1172ac,0x3d9f1ae1,0x3c7fff28,0xbbb48f61,0x3b257dce,0x3cc55737,0x3d2eb6f3,0x3d09381e,0x3d0f86e6,0x3ce70f4a,0x3c9785af,0x3cd159af,0x3c3908da,0x3d6d6530,0x3dd222c7,0x3e0a44ad,0x3e547691,0x3e69f65f,0x3e7f75f7, -0x3e846fed,0x3e8a7d29,0x3e89e489,0x3e74d9b0,0x3e3a58f8,0x3db685c6,0xbd444e4c,0xbe0cd842,0xbe3ff9ea,0xbe82c684,0xbe3e3515,0xbe0bfa18,0xbdb200b9,0xbd9c2ee3,0xbd850d11,0xbce95301,0xbc349e36,0xbbd9d16d,0x3bbdf918,0x3bf7b1fb,0x3c5a964a,0x3c88309c,0x3c6f6026,0x3a561de3,0x3c7e4a9f, -0x3ac1718b,0x3c7ed9c6,0x3c5fe722,0x3cae6f81,0x3cdb05e5,0x3d13782b,0x3d6119d0,0x3d86b03e,0x3da2afd7,0x3de4db62,0x3e1523c7,0x3e39769c,0x3e21574e,0x3e0e7837,0x3e05db00,0x3da376f5,0x3d0dade5,0xbc7a6ce6,0xbd85a4b1,0xbe0164b3,0xbe57bca1,0xbe2277a1,0xbddde803,0xbdc6fbf8,0xbdf641b0, -0xbd93f778,0xbd95476a,0xbd9d7a24,0xbd5a6a1e,0xbd386750,0xbcfe9b4d,0xbce11b3d,0xbcd10656,0xbc4dd8f4,0xbc96ce3f,0xbc2534b9,0xbd093604,0xbd36042d,0xbd225dfd,0xbd7a3f30,0xbdc2eb93,0xbd955335,0xbdb87786,0xbdc60d54,0xbddee140,0xbdefc33a,0xbe0424cc,0xbe0a14e3,0xbe111bf4,0xbe15d529, -0xbe1aaaf9,0xbe2293de,0xbe277722,0xbe2b728a,0xbe1e782e,0xbe09f3e8,0xbdf7eabc,0xbde12d40,0xbdafec28,0xbd9d17b6,0xbda985cb,0xbdd4bd46,0xbe2b5484,0xbd5b611f,0xbda50d9d,0xbe0f70ad,0xbe10e723,0xbe0db645,0xbe0ee7db,0xbe0eb9b0,0xbe0c9e19,0xbe0c4f6b,0xbd91ab57,0xbd421eb9,0xbe1c4b45, -0xbdaacf6d,0xbd860d66,0xbd8e0bb0,0xbda1ed41,0xbda5cb45,0xbdaef1c5,0xbdb9f830,0xbdc58c38,0xbdd53081,0xbdd4c77b,0xbdd70622,0xbdda20d4,0xbdd4f63e,0xbdd1662a,0xbdd41262,0xbdc4ed50,0xbdbdec27,0xbdb26df0,0xbdb0acea,0xbda06812,0x3d11b5bd,0x3d0f5bab,0x3c8c0893,0x3cb406a7,0x3d823359, -0x3e0ee267,0x3c106515,0x3d3b539c,0x3deb5ff3,0x3ded1b40,0x3ded6794,0x3df2c301,0x3df43a7e,0x3df3859e,0x3df5682d,0x3d3838f5,0x3c5dbe1e,0x3e035b91,0x3d4edb7c,0x3ca9cd37,0x3cdeebc5,0x3d0f2ddd,0x3d084bb9,0x3d1afcb5,0x3d214c28,0x3d258026,0x3d222f34,0x3d20a8e5,0x3d154816,0x3d05c021, -0x3ce7a9d9,0x3cb98cab,0x3c65a792,0x3c50857c,0x3c8daf17,0x3d084596,0x3ce5decd,0x3ce0de59,0x3c562f3c,0x3df3c1c7,0x3cf67249,0x3d79619c,0x3d6989f7,0x3d18fc01,0x3d277379,0x3cd439a5,0x3cc71152,0x3d1cfc7f,0x3cea5a07,0x3d1a6c81,0x3d03c12e,0x3d570681,0x3d5401fa,0x3d154555,0x3d40d53f, -0x3d97be1c,0x3cbe2f0b,0x3d130533,0x3d0d5de3,0x3d3b6d4f,0x3d5367e3,0x3d61a4e4,0x3d50f5d8,0x3d54562a,0x3d3bb85b,0x3d069f15,0x3cb1df8d,0x3bc7a304,0xbc3b83b6,0xbcc667af,0xbc9f47e5,0x3c9801f8,0x3c810b22,0xbc09130b,0x3c059112,0x3d7e5325,0x3d64cfc1,0x3dbca3cc,0x3d828ad2,0x3d632823, -0x3d307857,0x3d33f79d,0x3d2c199a,0x3d68231e,0x3d405957,0x3d6b9f49,0x3d16c728,0x3d50a894,0x3d41acce,0x3d60860f,0x3d541b44,0x3d3eb112,0x3d0741e1,0x3d21277f,0x3d407790,0x3d849b5f,0x3d99cc04,0x3da2a7a8,0x3d8945df,0x3d7a389f,0x3d299f04,0x3c9d0c2d,0x3c1c2da1,0xbc9ed29c,0xbd5b3e07, -0xbdaad4af,0xbd80b3cc,0x3c136a44,0xbbceb948,0xbd7a7b11,0x3c2b7cb3,0x3d935a8d,0x3c8d679e,0x3d8b0c02,0x3d78f0f0,0x3d2b5a7b,0x3d1e67da,0x3ccce608,0x3cf00167,0x3d6501b5,0x3d5a2ad3,0x3d47d870,0x3d323b50,0x3d527768,0x3d6abdab,0x3d51916d,0x3d866a42,0x3d6abcd1,0x3cf423b3,0x3d0a6801, -0x3d15f1de,0x3d6975f6,0x3d96ed32,0x3d9a21cf,0x3d5b5a1a,0x3d4378ff,0x3cd31fdf,0xbaea5717,0xbca31ce3,0xbd2b3bb6,0xbd952bdd,0xbdf3957d,0xbddb904d,0xbd0abcd5,0xbd4473d0,0xbe4e256a,0xbc647226,0x3e3a766a,0x3e08bf76,0x3e1f831d,0x3dfc38ae,0x3d8ae20c,0x3dc51506,0x3d99b298,0x3d7543bc, -0x3d8a38d8,0x3d5fe84c,0x3d443a6d,0x3cd534da,0x3d4d2f78,0x3d713852,0x3d4ddee8,0x3d82b767,0x3d7a4aeb,0x3d97d87d,0x3dd766d0,0x3e070587,0x3e46d5bc,0x3e56f123,0x3e6676c0,0x3e5da78c,0x3e1f377d,0x3deabd85,0x3db57af8,0x3c9a0b52,0xbe174a18,0xbeb9299a,0xbed7429b,0xbebf95b6,0xbe6431c3, -0xbe02805a,0xbf0ed6ce,0x3c1ca63f,0x3e8b2e4a,0x3d8f2d93,0x3cd9002f,0x3d836d75,0x3d2138ac,0x3d4b9899,0x3d570b32,0x3d7db738,0x3d85dc73,0x3d835b54,0x3d8718eb,0x3d454db9,0x3d44b29d,0x3d5c5c83,0x3d9533e6,0x3db20ceb,0x3dcdf8ea,0x3d99bce6,0x3d47db01,0x3d5fbae2,0x3d9a33d2,0x3dae60e9, -0x3dd9b133,0x3e082066,0x3e3497f2,0x3e39642a,0x3e169d6c,0x3d7139e5,0xbd8fee27,0xbe93ab6c,0xbedd07de,0xbf11b714,0xbf362117,0xbf0abf7a,0xbf8d5a6a,0xbea81967,0x3e4b2949,0xbd907239,0x3e349834,0x3b85e869,0x3e15fe43,0x3d4003b1,0x3d96f4a5,0x3d79dcb0,0x3dd8b48d,0x3d1dd67c,0x3c8b5382, -0x3cd73289,0x3d7736d8,0x3d8a3777,0x3dc589d5,0x3dc01669,0x3dfd70b5,0x3da6dcdc,0xbb887304,0x3b8aad26,0xbc8b7eea,0xbd1e8dcd,0xbd92f83b,0xbdf16472,0xbe2474e9,0xbe33735e,0xbe168ada,0xbe45aa0d,0xbeaab19b,0xbf10cbac,0xbf2ec83f,0xbf4757ae,0xbf7eb3c4,0xbf804ae5,0xbf79b0e7,0xbf41485a, -0xbe5c0cf6,0xbe8b7916,0x3d01dc6a,0xbdb62ef1,0x3c9adaad,0xbc54c652,0x3d705e31,0x3ce5fa72,0xbc19c72c,0x3d7ca248,0x3dbd9ca0,0x3d383d86,0x3d77d4a5,0x3d6ff20f,0x3d4ef4c5,0x3d022065,0x3dd49443,0x3d94537a,0x3c96e611,0x3c862da0,0xbd3d9d6c,0xbd56e140,0xbe0ea75e,0xbe8c19b4,0xbec56d87, -0xbeec1a29,0xbef51c8c,0xbf0250fb,0xbf040af3,0xbf08006e,0xbf22bf10,0xbf29acce,0xbf2b1485,0xbf4bf978,0xbf0ed26c,0xbf1eefec,0xbebf5bb4,0xbe85f16e,0xbe65cdc7,0xbdb9495f,0xbda5f422,0xbd39f0f1,0x3c59e2de,0x3ca2e173,0x3b5ce937,0x3d154d61,0x3d2bcd16,0x3cf5f7f0,0x3d36fd5c,0x3d56401f, -0x3d8af2ef,0x3d780d50,0x3da6e36c,0x3d3adf27,0x3d4af71e,0x3cf13507,0xbd83d9e2,0xbe1485e3,0xbe61baf1,0xbe82c026,0xbea80384,0xbeaf6595,0xbe9e7766,0xbe319fc1,0xbdf2f2d9,0xbe26a94c,0xbe75e9da,0xbebe19ee,0xbf02a506,0xbf0ced90,0xbe9b1ba1,0xbeaaa165,0xbe0a7ee3,0xbdd37a40,0xbd1b46f8, -0xbc9130f5,0xbc87d3cc,0x3bed9c1c,0x3b1f98ee,0x3c097589,0x3c2cbe95,0x3c22f62b,0x3c21ec5a,0x3c40912a,0xbb1bbcab,0xbc286673,0x3c204003,0x3b96be73,0x3d07699d,0x3d330e53,0x3c32a674,0xbbdfad05,0xbd94dbad,0xbde56510,0xbe02c234,0xbdd8d497,0xbdde36aa,0xbd911e31,0xbced12c3,0xbd3be487, -0xbd9bd704,0xbd91b2b9,0xbdfea3cb,0xbe49a6c8,0xbe887338,0xbe99fe41,0xbe0d0fdd,0xbe0c913c,0xbe267bed,0xbe257b30,0xbe1c94fc,0xbde42980,0xbd8f381f,0xbd1d89b1,0xbcdd5798,0xbccd4698,0xbc6d337c,0xbcad2934,0x3bbe451a,0xbc08c142,0x3c2dada8,0xbc199154,0xbc82aa20,0xbcd0e364,0xbc1bc129, -0xbda74dfa,0xbe14a5ef,0xbe15f7e9,0xbe2ae486,0xbe36d864,0xbe510a7b,0xbe69e903,0xbe7f1494,0xbe8a7905,0xbe9468bd,0xbe85a5ec,0xbe70452e,0xbe58a06b,0xbe47d2e5,0xbe3265bd,0xbe240bea,0xbe1c869f,0xbd825bc3,0xbd886363,0xbda39b50,0xbd0f947c,0xbd34fba4,0xbd127913,0xbd08a4b3,0xbcc494d0, -0xbcd0bc16,0xbd358f5e,0xbd3e1365,0xbd639dcf,0xbd493271,0xbd5a51c6,0xbd6a7c4c,0xbd822a44,0xbd8f05d1,0xbd88576b,0xbd892d36,0xbd9eef13,0xbd85bf4f,0xbd8fe070,0xbd9bb4b8,0xbd96319f,0xbd898edc,0xbd8108c4,0xbd8f3786,0xbd9094f6,0xbd98eb67,0xbda3539f,0xbdb32a19,0xbdbdd1f9,0xbdb336cb, -0xbdaf63d2,0xbda55e54,0xbd9bb0a5,0xbd421568,0xbd0e6ac9,0xbdd8940d,0xbdd52809,0xbdaa436f,0xbda591ff,0xbdb16e58,0xbd894e68,0xbd8aa1ee,0xbd7cc0f5,0xbd6d567a,0xbd628ff9,0xbd68f3b1,0xbd5edb38,0xbdb708d0,0xbdb2918e,0xbd833dd2,0xbdc2af4f,0xbdd371c1,0xbd689a36,0xbd7db0c2,0xbd8932cf, -0xbd89c4de,0xbd958b3a,0xbda3e32f,0xbdafa67d,0xbda5851f,0xbd9daf9d,0xbd94d1ef,0xbd9091f5,0xbd8a1e5e,0xbd86f06f,0xbd7b3c0c,0xbd6b356e,0xbd58d34a,0xbd4fd90b,0xbd47ab6e,0x3df75052,0x3db930b8,0x3dd3c09c,0x3db51a15,0x3d44467e,0xbbd63eae,0x3de270bb,0x3d78cd7f,0xbbdf1a66,0xbc124796, -0xbc10df58,0xba9b02bf,0xbc09ea06,0xbc15eb64,0xbc34cd1c,0x3d7116a5,0x3ddf6506,0xbc737ad2,0x3d6731d9,0x3dc8f3f6,0x3df28669,0x3dd8b231,0x3de700a9,0x3dee8044,0x3df60ba7,0x3dff38fa,0x3e05001a,0x3e090a81,0x3e0e2d2e,0x3e1446e0,0x3e14bc92,0x3e0f3ac7,0x3e043b6f,0x3deea607,0x3dd8c915, -0x3dba992d,0x3dc11e6a,0x3d82073d,0x3dac40de,0x3d0627f3,0x3db3f77b,0x3d9ca0ed,0x3d87abad,0x3dacc310,0x3d9beb09,0x3dc4d531,0x3dccfc3a,0x3db84e54,0x3dd95c20,0x3dcc7da4,0x3dbfacf5,0x3d998ec1,0x3da540df,0x3dc8e784,0x3dc5f5c8,0x3d3ce2d0,0x3decd852,0x3de6e633,0x3df85173,0x3e08144b, -0x3e0db5a8,0x3e1681df,0x3e22aca3,0x3e2b2a13,0x3e39dcc1,0x3e4e50d2,0x3e5ec5ec,0x3e59325b,0x3e397cb2,0x3e17c6b2,0x3de249dd,0x3d8f2176,0x3d8cad92,0x3b7829d1,0x3cd4b976,0x3cb58007,0x3d13ded2,0x3d4e4794,0x3d626a94,0x3d57a8fc,0x3d4070e5,0x3d2ff5b5,0x3d8495ef,0x3d8cd023,0x3db85422, -0x3d7acce9,0x3d96f5e2,0x3d7c6330,0x3d9f0e5c,0x3da86ff6,0x3db12a66,0x3dabed56,0x3dc4a0ae,0x3de9da3b,0x3df88aca,0x3e1acaa8,0x3e2b9522,0x3e455062,0x3e66bbe0,0x3e7a65b7,0x3e8ed067,0x3e9dc5e5,0x3ea5189a,0x3e94df25,0x3e5dcc1a,0x3e1deb23,0x3daacace,0x3c5f1f12,0x3c2c0b21,0xbd08a89f, -0xbc174b6f,0xbb34c0ca,0x3ba21857,0x3d0989ae,0x3d321280,0x3d0f710f,0x3c8513f4,0x3cc8c071,0x3cf5edfb,0x3d7ee9e0,0x3d4ca0c7,0x3d6a8ed3,0x3d49e21d,0x3d6c7b5f,0x3d8d2ee7,0x3d8a59b0,0x3da6ec30,0x3d8437f8,0x3daa6e73,0x3ddc7fdb,0x3dfa78ad,0x3e2026b2,0x3e29830e,0x3e43ecfc,0x3e68c5c1, -0x3e80127e,0x3e9481f8,0x3eb7880a,0x3ed8702c,0x3ed1e011,0x3ea2a017,0x3e63f2fa,0x3de3885f,0xbc35297a,0xbcdd5813,0xbeab5a13,0xbe8aaab6,0xbe119518,0xbd69f23f,0xbd3151d7,0xbcf04a36,0xbc832298,0x3d085804,0x3d166c5f,0x3d504d33,0x3d73622f,0x3d836509,0x3d804641,0x3d2babb5,0x3d843709, -0x3da08b35,0x3da72568,0x3df1889b,0x3e0048c4,0x3e074f0b,0x3e01180e,0x3e14a84b,0x3e5d0ea9,0x3e9c1b23,0x3ec7e092,0x3ee4a890,0x3f09f86b,0x3f15baab,0x3f1dabcf,0x3ed19711,0x3e7eb49b,0x3da050f6,0xbd93baf4,0xbe5df235,0xbebc3936,0xbeaafcfe,0xbf025ca9,0xbebbdd62,0xbe550e11,0xbde2d153, -0xbd85cd56,0x3bfc1dc4,0x3d00adae,0x3d44a533,0x3d4c8c24,0x3d6fb6b7,0x3d9baaf9,0x3d813928,0x3d6dece9,0x3d407c57,0x3d760055,0x3d8d1e26,0x3d9eb4cf,0x3dc8a7c3,0x3db47d24,0x3dd693b6,0x3e15164b,0x3e2aa069,0x3e4b5b14,0x3e4bb861,0x3e467fa4,0x3e47777b,0x3e27842f,0x3e146399,0x3e2fa44e, -0x3d08eeb4,0xbd714b77,0xbe3fa460,0xbd4eaf65,0xbdc884c1,0xbe91c79f,0xbefacfba,0x3e0c53f0,0xbefa7b2d,0xbf082a56,0xbe6a36ff,0xbe821d13,0xbde971a3,0xbd845eb3,0x3c81fae7,0x3c85e538,0x3d2d21ed,0x3dadcb58,0x3d5c4650,0x3d3fda1a,0x3d67eb85,0x3d8a3305,0x3da54c56,0x3da2a577,0x3dace5d2, -0x3d92d826,0x3dc5c79d,0x3e12a295,0x3dd8a8f1,0x3dbe0b08,0x3ddb4920,0x3e0d41bf,0x3e3b1617,0x3dd44e95,0xbc9abe0c,0xbe1cbb9c,0xbea10c62,0xbeb2452f,0xbe95343c,0x3caf4289,0x3e998fd4,0x3f39fee1,0x3eabc4ce,0x3f5c6ccb,0x3d155c57,0xbee9b50b,0xbb968ce4,0xbe2cdffb,0x3b89c0cd,0xbcca0196, -0xbc468424,0x3c9e9450,0x3d205d9c,0xbc351fde,0x3d96c675,0x3d98df97,0x3d2686a0,0x3d445834,0x3d4c9919,0x3d5a98ad,0x3d786a42,0x3d20a528,0x3d82ffbc,0x3d8765bc,0x3d8a42dd,0x3dc41b9f,0x3db4c0e5,0x3d9f5e23,0x3d8d11fd,0x3d8122ae,0x3d7709f5,0x3d827250,0x3da7dee2,0x3db8a5ef,0x3d8d00f5, -0x3e8bc579,0x3ed4a312,0x3f3d437d,0x3f277d74,0x3f1453de,0x3ea4ea17,0xbe678c05,0xbdc5ad7e,0x3ab96730,0xbdc56021,0xbb9e9064,0x3d49d26c,0xbc14aac3,0x3c7588ea,0x3c4413ab,0x3d1d2e93,0x3d3a389e,0x3d54283f,0x3d6dd17c,0x3d5cc2c9,0x3d288f7a,0x3d936421,0x3d95941b,0x3dc7e39b,0x3d8f50ba, -0x3c760999,0xbd44db79,0xbb847932,0x3d30f754,0x3dcee600,0x3e1af3b8,0x3e40cab7,0x3e515c49,0x3dfc0c7f,0x3debf706,0x3e28046b,0x3e5fa5d0,0x3e9622a1,0x3eee6260,0x3ee3a5b6,0x3e8a31af,0x3e63e699,0xbe47a52b,0xbd8a4f52,0xbdacb438,0xbd461fea,0x3c2363fc,0xbc8b48b8,0x3d220314,0x3d1a50f3, -0x3d32f7ed,0x3c07d348,0x3c680925,0x3d12a1c4,0x3cbe1c41,0x3d0e2c4e,0x3d8d0165,0x3d215f81,0x3ccf5303,0x3cddd797,0x3ce4aa3e,0xbaf68b53,0xbd56f6ba,0xbccdfa7d,0xbc11d324,0x3c114304,0xbc959acb,0xbd7c3034,0xbdb9908f,0xbd9e4663,0xbc9648b1,0x3d73c29d,0x3da57206,0x3ddf393c,0x3e419310, -0x3e3f4c83,0x3e058c06,0x3d1a1a9d,0x3bcfcc03,0x3d9664ef,0x3c242d0f,0x3c688548,0xbbbfc374,0x3ac736f4,0xbcee68e5,0x3c7e914b,0xbcd25f3c,0x3d22c488,0xbcfaa2ea,0x38e3aa0a,0xbd22ffbd,0xbd076130,0xbd7d7264,0xbd8bb737,0xbda82348,0xbd647acc,0xbd2d657c,0xbdaaf118,0xbdc5863c,0xbdeb6697, -0xbe0928c1,0xbe23e794,0xbdd778fe,0xbd6714e9,0xbc6860b5,0x3c1c3145,0x3ce2790b,0x3d4b467a,0x3db55001,0x3dfbaf17,0x3e2880ab,0x3df542ff,0x3e0bebfe,0x3e14a08a,0xbdb7cf7e,0x3da0dda9,0x3c931499,0x3ceda467,0x3d9eb2c3,0x3d8ffde2,0x3dda7738,0x3dcc75be,0x3d6c0f3a,0x3dbc37bd,0x3dc87f9f, -0x3db97f72,0x3d0460e6,0x3d28ba7c,0x3d571973,0x3d2ded53,0xbda086e2,0x3d7ba3c2,0x3d7c963f,0x3d5e57b8,0x3d603a78,0x3d4e3765,0x3d559991,0x3d36dce2,0x3da0efec,0x3dc67f3c,0x3df4af57,0x3e0ee67e,0x3e250b7e,0x3e3732ea,0x3e2a2418,0x3e1b17b3,0x3e161c9d,0x3e0d0ace,0x3e01edaa,0x3e2bb7af, -0x3d970609,0xbc2d6b2a,0xbe03b18a,0x3dea38b9,0xbbcc9384,0xbde869cc,0xbdfc096b,0xbe026a49,0xbdef4b14,0xbe0a4604,0xbe13362b,0xbe11cf57,0xbc4b3eb5,0x3db0c933,0xbe24adef,0xbd0570d1,0x3d1e73ff,0x3e14dbbb,0x3de3a3a6,0x3df3db4d,0x3df338ce,0x3df3b2af,0x3df4d100,0x3def2208,0x3dfc73af, -0x3e02aed8,0x3e079a3f,0x3e0d1f84,0x3e123315,0x3e1caecb,0x3e161251,0x3e141943,0x3e0ea21f,0x3e0ff10b,0x3e1e3471,0xbd64d9cc,0xbd8c0167,0xbdd827b5,0x3cf564e3,0x3de61522,0x3e3bed1c,0xbc1dfc3c,0x3dd7a7ab,0x3e39eeb8,0x3e400ee8,0x3e3ff418,0x3e3179c9,0x3e4387a7,0x3e458fa6,0x3e4027d8, -0x3dde6237,0x3c59d465,0x3e4c4074,0x3debf9a3,0x3d3c6a66,0xbda7ecaf,0xbd3999fc,0xbd609a65,0xbd5fc114,0xbd60989d,0xbd614eef,0xbd64d778,0xbd5d112a,0xbd57fdc4,0xbd500e79,0xbd5aaf3b,0xbd604ebd,0xbd5c0b6f,0xbd730416,0xbd85a43f,0xbd9516bd,0xbd9e067d,0xbdda91d7,0xbdca6740,0x3dd4cb59, -0xbd38f756,0x3cdd1bd4,0x3ccd6d9a,0xbbe5f0cc,0x3c882320,0xbc8bf283,0x3b44b554,0x3d3a88a9,0x3c1ca04f,0x3b43f0ef,0x3c1a9a8b,0x3d3a1713,0x3cd73a6c,0x3cc6a225,0x3c3bac81,0x3dfcdb4e,0xbd221ca7,0xbd6ce6d3,0xbd5ccd4a,0xbd711796,0xbd726437,0xbd7b45cc,0xbd7d8ada,0xbd6dfe3b,0xbd62d391, -0xbd51fda6,0xbd6adaf8,0xbd731d95,0xbd69766d,0xbd8545a1,0xbd98a1f9,0xbdb8c010,0xbdcc7157,0xbe26446c,0xbdf50b13,0xbc86ac80,0xbd01fd0e,0x3c8d16df,0x3c270dff,0x3cadab50,0x3d269bae,0x3d88e580,0x3cc7defe,0x3da9f4ac,0x3be0de1c,0x3d91e857,0x3c8bb68c,0x3d685476,0x3cd5191a,0x3d101add, -0x3d2a0b44,0x3d53f6be,0xb956b32c,0xbd7fbc2d,0xbd4cad59,0xbd811152,0xbd75ae16,0xbd72e991,0xbd65da11,0xbd27f72a,0xbd015115,0xbcd695b2,0xbd47ecec,0xbd7f4acf,0xbd7151f5,0xbd9bed39,0xbdd3ef05,0xbe13d02c,0xbe183803,0xbe280f65,0xbdea1f5c,0xbc9ddc48,0xbc58ef98,0xbc9e4d07,0xbc992414, -0xbc599074,0x3d05ea3a,0x3d040c2c,0x3d3c90a3,0x3d2074ac,0x3d65cc4a,0x3d3befd1,0x3cd1e0f7,0x3d10b695,0x3cc2ff2a,0x3d9c967d,0x3ce5182d,0x3d8c7c4e,0x3c912465,0xbd4fcee7,0xbd4a0fc9,0xbd65090b,0xbd538dd8,0xbd52b9fe,0xbd376d85,0xbcce648d,0xbc322af3,0xbc2265f3,0xbd19c50b,0xbd75fc40, -0xbd76d931,0xbda3ebef,0xbddadf99,0xbe13db91,0xbe0fec9b,0xbe23ea21,0xbe3c2ad6,0xbe3b8532,0xbdd49067,0xbd266e97,0x3c30b0fa,0x3c977265,0x3c499895,0x3ca5bfd9,0x3d0a15e7,0x3d3568f2,0x3d4be935,0x3d5944cb,0x3d42bffb,0x3d4b34b0,0x3d1dceb2,0x3d899005,0x3d15c5c5,0x3d8fdb2f,0x3c57a1a0, -0xbd74e8df,0xbd2f4590,0xbdbff622,0xbdf13374,0xbdea3c56,0xbd589519,0xbd6953ae,0xbd88d1b4,0xbdcf8fa9,0xbe07480f,0xbda704d7,0xbc3d9ff3,0x3c68578a,0xbc8bb929,0xbdcfd262,0xbe4a700b,0x3eb85d7e,0xbdef3159,0xbe8ee885,0xbe040601,0xbdbe8b89,0xbd8a67ec,0xbce3ffed,0x3c1eabd4,0x3cd5631b, -0x3d465778,0x3d89ac54,0x3d5c3924,0x3d49af2b,0x3ced80cd,0x3d44e192,0x3d4d2cf9,0x3d7ce2e4,0x3d517e87,0x3dc58721,0x3d0198c4,0xbc844986,0xba619333,0xbd361e0e,0xbd0a804d,0xbd5f2b8b,0xbdbb995f,0xbe01dcf9,0xbe41e346,0xbe91e7e5,0xbe8ec2c1,0xbe8b0cb4,0xbe577655,0xbdcbc65a,0x3dad8f7b, -0x3ec7a191,0x3ec3e8b1,0x3f0c91fc,0x3e9dbc99,0xbd0b4d24,0x3d40674a,0xbd4e4ddc,0x3caa9144,0xbd1cc349,0x3b80037a,0x3bcb345d,0x3c68bba3,0x3d44fe9e,0x3d7c2bdf,0x3d85667f,0x3d5006de,0x3d74357c,0x3d17819c,0x3d8e61ec,0x3cb0acbc,0x3d747436,0x3cd55f8b,0xbd4ea2be,0xbc620bd4,0xbd11cd70, -0xbe25e6aa,0xbe7d3a6d,0xbe9457a0,0xbe6901c8,0xbe1d5e49,0xbdc27429,0xbd66ac56,0xbda965b8,0xbd61a7c1,0xbe2af1bb,0xbe35574d,0xbe0944b4,0x3e81695b,0xbdc30df7,0x3ef093cb,0x3eb87d9f,0x3de225fe,0x3d007681,0x3d3d646e,0x3c9dd628,0x3d115c36,0x3d68d24e,0x3d967aa3,0x3d51e0b3,0x3d8e49f7, -0x3d406c8b,0x3c90c143,0x3beff203,0x3ca915e5,0x3cf058d0,0x3c16ea6a,0x3db3bba2,0xbcb9b32e,0xbdbb2ef0,0xbd54a81a,0xbd074ee5,0xbc88b9af,0x3d092848,0x3dc0f9cf,0x3e42c018,0x3e5bf27a,0x3e1a8663,0x3e2f3c21,0x3e246ffa,0x3e557f31,0xbc2579d2,0xbe696822,0xbf1953a7,0xbe59dc2d,0xbe2d58cd, -0x3e45afbf,0x3ee0d432,0x3e87393b,0x3e1d8296,0x3e011dde,0x3da2fd77,0x3d960f1f,0x3d2f7d38,0x3ceefe3a,0x3d4a8901,0x3d3a0f53,0x3d2a2141,0x3d0f5b55,0x3d271ae5,0x3d0653dc,0xbbb866fa,0xbbd9d7d8,0x3d91c2f3,0xbd19ba1e,0xbdb90ac6,0xbcccbcd4,0x3caf3932,0x3ded6244,0x3e36edde,0x3e54b13a, -0x3e813102,0x3e7d7954,0x3e479a3f,0x3dee9ad5,0x3caed420,0xbcce1b42,0xbde7dc27,0xbe011d0f,0xbe5cd0f6,0xbdef4519,0x3c0895a3,0x3dc56aeb,0x3e72e8bf,0x3e02802c,0x3db933f8,0x3db9e552,0x3d69c6fe,0x3d2fa59b,0x3c87d13e,0x3c8f2878,0x3cba5a1f,0x3cad1476,0x3cdc11ee,0x3d32b3eb,0x3d21b4d2, -0x3d374689,0x3cb0b9a4,0x3d3de70a,0x3d13f4f6,0x3787da2b,0xbc50fd73,0xbc310bd4,0x39527127,0x3a5c070e,0x3c98d012,0x3d65e69e,0x3de18d94,0x3e119f2e,0x3e1498fe,0x3e0123f0,0x3d8b059f,0xbd47deb3,0xbd4b597f,0xbc80f65d,0x3c3d207d,0x3d44afe5,0x3d2502bf,0x3dc0200a,0x3de81f90,0x3db1ea80, -0x3debac01,0x3da132f2,0x3d7ca051,0x3d0a32b4,0x3d6aede9,0x3d28352e,0x3d8f29a0,0x3d485fc2,0x3d557b51,0x3d822124,0x3d2c6ffc,0x3d7af001,0x3da1fddd,0x3d8ad771,0x3d1c332e,0x3db564f7,0x3e070ba6,0x3e053f1d,0x3e136cd1,0x3e1d8517,0x3e2ca6ee,0x3e36f23e,0x3e2b6140,0x3e20b92d,0x3e1ad12d, -0x3df54446,0x3dd13c47,0x3db05781,0x3d92deb3,0x3d4a1511,0x3ce05d66,0x3d55f7b8,0x3d3e58c6,0x3d6ba750,0x3e21f01e,0x3d86e0eb,0x3dcf07b5,0x3dbed41d,0x3d8842cf,0x3d8ec8fc,0x3d40a4b8,0x3d8c6fd3,0x3dc28035,0x3da8b5f1,0x3d87c064,0x3daacddc,0x3dc2da73,0x3dcf913d,0x3db346c2,0x3da93685, -0x3db26b8c,0x3df1e285,0x3dd7066f,0x3dcc3937,0x3dc7ef4a,0x3db68d7b,0x3da13a30,0x3d94e98b,0x3d8d6a95,0x3d7f6212,0x3d5fc647,0x3d433cbf,0x3d2435a0,0x3d00694e,0x3d111b2e,0x3d386708,0x3d42eba3,0x3d5a421c,0x3d3f8cb1,0x3cbcb892,0x3e0700b0,0x3e317ec2,0x3e2cbdae,0x3dc44fb3,0x3e26bfe2, -0x3e309e40,0x3e372ea2,0x3e34b558,0x3e284792,0x3e31ce7f,0x3e38a514,0x3e3411e6,0x3e2a5247,0x3deb55be,0x3e1dee8f,0x3e30b09d,0x3e11db9c,0x3d916ecb,0x3d960767,0x3d9fff3e,0x3d9e020a,0x3da46323,0x3dac17f6,0x3db33eb8,0x3da00e1c,0x3d90e4c8,0x3d823118,0x3d6bc8f8,0x3d50db1d,0x3d2b82a8, -0x3d3519d6,0x3d31b639,0x3d323306,0x3d32230a,0x3d53ed89,0xbce4b897,0xbc3d8a07,0x3c3e2114,0xbdbe9d89,0xbdf13abb,0xbd8892e7,0xbd9290cf,0xbdde3ef6,0xbd8643cd,0xbd88d7e5,0xbd809e11,0xbd4b945e,0xbd66437c,0xbd690da3,0xbd53c9f0,0xbdd505bf,0xbda5b30e,0xbd44020a,0xbdd4890b,0xbdba0659, -0xbbe86b3a,0xbcb44952,0xbcbec94a,0xbcd43675,0xbcdd4bf5,0xbcf2a625,0xbd09c62f,0xbd1be135,0xbd3597fd,0xbd56b0a8,0xbd6cbf45,0xbd6ee13f,0xbd6c42a6,0xbd1fe508,0xbcd0d57b,0xbbe5593f,0xbbfa5d08,0x3d0cb51d,0xbc579fe5,0xbe08898a,0xbcd1ba5d,0xbd949aa1,0xbd5a9371,0xbd16373d,0xbce8c59c, -0xbc699de3,0xbcf67fbe,0xbd491ac1,0xbd19d64a,0xbcd17dc5,0xbd1d0682,0xbd1f5a24,0xbd17505f,0xbd542f49,0xbd06c64d,0xbd875a85,0xbce6c871,0xbc278191,0xbcc75f70,0xbce7f6ba,0xbcf476b9,0xbd0aa923,0xbd34d97f,0xbd525538,0xbd903853,0xbdc930df,0xbdff213e,0xbe055ef7,0xbdf43661,0xbd95ec7a, -0xbd060980,0x3c8160f2,0x3c90c17f,0x3df6fd0f,0x3c1d71dd,0xbd93cd10,0xbc8e89eb,0xbd5e2c4e,0xbd0bc9d7,0xbcc8e9eb,0x3b42b551,0xbba6000c,0x3ca3338b,0xbc406ff7,0x3c9334f0,0xbba311ba,0xbc496dea,0xbcab77c8,0xbc9dfc40,0xbce6ae1e,0xbcb7cbc5,0xbd26bb61,0xbc9b1a35,0x3b1f7530,0xbca33b85, -0xbd07048d,0xbd21d1a9,0xbd49214a,0xbd97a081,0xbdb4f86d,0xbe016a32,0xbe2e32c6,0xbe56a6fc,0xbe63bfe3,0xbe4dfd84,0xbde2a17a,0xbcde70a3,0x3d9a3f4b,0x3d9d213b,0x3e557257,0x3c5ea1ed,0xbd800ffd,0x3c9e0e9a,0xbb641a1d,0xbcc9ba87,0x3ac5c306,0x3d309f71,0x3d2f25a0,0x3d2d8bf2,0x3d737ee6, -0x3d4c6da0,0x3d24e1e2,0x3cf09272,0x3cf510aa,0x3ccdeb04,0x3cbbb0c1,0x3cf01f2d,0x3c0c15c2,0x3c27295c,0x3c4c91c0,0xbbd7e23f,0xbccb0f30,0xbcd4bb52,0xbd1957a7,0xbd64f88d,0xbd85cd14,0xbdeec96c,0xbe4a25ce,0xbe989297,0xbeac625c,0xbe9c2472,0xbe2be394,0xbd3752d4,0x3df488d3,0x3e0400fd, -0x3e9d5dc1,0x3e0d8ba4,0xbd581d1d,0xbd19bc75,0x3aaa5b3d,0x3cb80592,0x3d63bedd,0x3cefdbbd,0x3d0d168c,0x3d0b2ff3,0x3d0c21fe,0x3d2b41bd,0x3d311619,0x3d00d71e,0x3cd6831b,0x3c735ae9,0x3b85f9e5,0xbc3a13cc,0xbd10bf97,0xbca808b2,0xbc111582,0xbd4799cc,0xbdcb16b5,0xbdf4964c,0xbe2206bb, -0xbe5ca4b3,0xbe98587a,0xbeb05e02,0xbec62d1b,0xbeaf32f9,0xbe927654,0xbe80653c,0xbdc99c04,0x3d2eaad2,0x3e6adb48,0x3e76dcf5,0x3d159b17,0x3df7e611,0x3d11c503,0xbcb65ecd,0xbc85ca64,0xbd55b2a4,0xbd191bc9,0xbd0e6016,0xbb4c4827,0x3c853abb,0x3d48a651,0x3d4ea7ae,0x3d45164a,0x3d0691db, -0x3d15caf0,0x3cd6da17,0x3c8da004,0x3aceecf4,0xbbdd8798,0xbd4ea9ab,0xbd874012,0xbdb3f9e2,0xbe04509c,0xbe60c540,0xbe9b69ab,0xbec2f5fc,0xbebf1ed9,0xbebe1df4,0xbed3208e,0xbe7e519c,0xbe17b3d6,0xbd74de0b,0xbe4bbfb0,0xbe7e5f5d,0xbe6991a2,0xbd5b062d,0xbf2f5d90,0x3be4be31,0x3e817b7f, -0x3d13fbbe,0x3e033968,0x3d34a329,0x3d87bb18,0x3bf3317e,0x3d4042e2,0x3d1d4779,0x3c5892a4,0x3d850fc6,0x3d89902f,0x3c6c19fe,0x3cc8ffc1,0xbc8a5cfa,0xbcf007c4,0xbd8d57bb,0xbda8b4db,0xbde186a8,0xbe26993f,0xbe1e54fb,0xbe017676,0xbd8faff7,0xbd2ef9c6,0xbd734528,0xbb857724,0x3d5714df, -0x3dc11138,0x3e816362,0x3eaeadec,0x3eb33afc,0x3dd86bc4,0xbe45b589,0xbf321009,0xbf2f301e,0xbf266972,0xbf015b27,0xbcd651e6,0xbe238aeb,0x3ceec5b1,0xbd6762bd,0x3c0ec626,0xbc41735b,0x3d3ecd2c,0x3d337703,0x3c703248,0x3d2fdbfc,0x3d09eb9c,0xbd07ee67,0xbd178278,0xbd3517a5,0xbd9b1620, -0xbda27d58,0xbdb64925,0xbdd557fb,0xbd04dab2,0xbc1d85a6,0xbc84df69,0x3c9b4a9c,0x3d3acdc2,0x3d69000a,0x3da895e9,0x3e0c4cec,0x3e652249,0x3e26a83c,0x3df00e44,0x3d760dd8,0xbd3003d0,0xbd52b2db,0xbdaa6e37,0xbeac9e3d,0xbdeaafbc,0xbea467fe,0xbe57abcc,0xbe0863d5,0xbde3d1dc,0xbcadbd8c, -0xbc2d6e02,0xbc11bacb,0x3d20805e,0x3d55fc6b,0x3d538aa6,0x3d2ce72c,0x3d1adb6f,0x3cc33bdd,0xbb4051db,0xbcb1d369,0xbce5ce79,0xbd61a107,0xbdcf59b0,0xbe01f3ef,0xbdaed8ed,0xbd55cc6a,0x3d6e7b62,0x3d84787d,0x3da697f3,0x3db41ae0,0x3d96b1cd,0x3d8f5233,0x3dd1985a,0x3e20ed12,0x3e1da887, -0x3d927e6c,0x3cc9ba5c,0xbd7d11e1,0xbe12dfe4,0xbde6e238,0xbdd34cf1,0xbe3b295c,0xbcbe936e,0xbbbb89e1,0x3d15616e,0x3cfc360d,0x3c244b34,0x3bc8813a,0x3bb49ad7,0x3caaa5a2,0x3d20ca72,0x3d46e526,0x3d45d2b0,0x3d27f077,0x3d56050c,0x3cfd922c,0xbb68ea4a,0xbc2d4598,0xbc986eb6,0xb9755281, -0x3ce50f87,0x3d3e738e,0x3dcb4377,0x3da517b7,0x3d7b3124,0x3cf9027d,0xba7ea581,0xbbf7b86f,0xbbd9bd5b,0xbcc6ed7b,0xbd1bdede,0xbb916a3d,0xbc25fff8,0xbcf4a221,0xbda09d75,0xbdb96f47,0xbd0f17c0,0xbcefe97a,0xbd1a11d8,0xbd777edc,0xbd3c0453,0xbcde7fb1,0x3b59b371,0x3c974362,0x3ceabc47, -0x3c999d14,0x3cb1e97a,0x3ca76619,0x3d7494a5,0x3d5e4de7,0x3dad219b,0x3dc1e8c6,0x3de8bf4b,0x3dfbb7ab,0x3df13049,0x3e061f42,0x3df3caa7,0x3ddda7ca,0x3dbec8f6,0x3da9c9b4,0x3da23087,0x3da5ec2f,0x3d3cbd42,0x3c49fc94,0xbcb9b9f8,0xbc88f59c,0xbc676506,0xbc32f0bb,0xbcdaa2d0,0xbcf8ee3d, -0xbcbda9a0,0xbcf8b9d5,0xbcd45718,0xbd2881f3,0x3d3e3ee9,0xbb502d67,0x3c327927,0x3c1a6b1f,0xbc1a7405,0xbbfbf643,0xbc968e04,0xbccb2a55,0xbca89bcf,0xbcf3c7ac,0xbca8d013,0xbcd1ec1f,0x3c074f97,0x3c84ad00,0x3c9e89ea,0x3d27f4de,0x3dc83285,0x3d465277,0x3d3dd27d,0x3d5505a7,0x3d624502, -0x3d63e004,0x3d5082c8,0x3d454a67,0x3ce7baab,0x3c9c2f15,0x3bd90ce2,0xbb26feac,0xbc638955,0xbcbc628d,0xbc9cabba,0xbcaaaad8,0xbcd0ac15,0xbcea71f3,0xbc0dd7db,0xbcb74789,0xbd277a76,0xbc869937,0x3d992774,0xbd451441,0xbc889500,0x3d6ade53,0x3d78ef53,0x3d826400,0x3d8b124d,0x3d90896e, -0x3d927935,0x3d949bca,0xbc23cb34,0xbce68b40,0x3dcbec6b,0x3c5ac6e4,0x39f49471,0x3980a040,0x3c09f9ee,0x3b60234a,0x3af47ad9,0x3ab54983,0x3b12377e,0x3ba9b89c,0x3b85009f,0x3b3c33c6,0x3ae4f761,0xbb1c4ecb,0xbbbb58a7,0xbc30b3a7,0xbc4036ed,0xbc4fdcbc,0xbc417c32,0xbc5e39ee,0xbc4dc6d9, -0x3d183f3f,0x3d64b965,0x3d644f9d,0x3da9218d,0x3d35116e,0xbd71fff1,0x3da67efe,0x3d2fefd0,0xbd0ff50f,0xbd1424c2,0xbd1bd401,0xbd3a08b2,0xbd3e02e1,0xbd47bb14,0xbd6537c8,0x3d190b20,0x3d858432,0xbd899a78,0x3cec703d,0x3d689d06,0x3cd02998,0x3cd32d27,0x3ce9b11b,0x3cd9e5fb,0x3cdd45ad, -0x3cdda33b,0x3ceb31d1,0x3cd92643,0x3ccc01da,0x3cba2378,0x3cc84964,0x3cd7645d,0x3ce1bdde,0x3d04a80b,0x3d25bfd0,0x3d5f0680,0x3d7618a0,0x3dc4c0d9,0x3de7e9ec,0x3d3f256b,0x3da01baa,0x3d7e6258,0x3d42f7e0,0x3d55a22b,0x3d1bafd5,0x3d3f3f86,0x3d6b29a3,0x3d5c9e7d,0x3d726790,0x3d335d84, -0x3d2ce305,0x3cb79c83,0x3ca0d8c1,0x3d20b52e,0x3caa273c,0x3bd21ab8,0x3cebd257,0x3c43cfd0,0x3caeb1b2,0x3c734509,0x3c8172b9,0x3c7878c3,0x3c95cbcc,0x3c638cd1,0x3c41a067,0x3c068672,0x3c198156,0x3c47ed2a,0x3cb5a16e,0x3d021685,0x3d61acec,0x3db99072,0x3dda44ec,0x3e1b9881,0x3e133b66, -0x3e0cb457,0x3de78a00,0x3da3994d,0x3d7b1188,0x3d538bea,0x3d3485ac,0x3d307627,0x3d100e43,0x3d390486,0x3d192a1e,0x3cddc72b,0x3cc8afb0,0x3cad0d36,0x3c942645,0x3b921bd0,0x3b508881,0x3cbb8646,0x3b232c20,0xbc39fddd,0x3a12ab26,0xbbd6a02a,0xbbd1531d,0xbc2c97b9,0xbbf22263,0xbcb548e2, -0xbd0489d0,0xbd226d9f,0xbcee0041,0xbc596a40,0x3b066fae,0x3cca8a1e,0x3d8aa651,0x3e14f1c0,0x3e2a03d5,0x3e44c450,0x3e4d821a,0x3e3f0cc8,0x3e08a189,0x3df8eefa,0x3dbce99f,0x3d8d4256,0x3d1a9cf9,0x3d176c4d,0x3d1576fd,0x3d2c0e6a,0x3d225a2d,0x3d0d695e,0x3bdd4156,0x3ca7c93e,0x3bf849ab, -0x3c7d9831,0xbbcbffb8,0x3cb45ab1,0xbca24a00,0xbd1ede0e,0xbc717e1d,0xbcda19c8,0xbced5533,0xbd07a050,0xbceabd3e,0xbd40c3a7,0xbd62040a,0xbd7f959c,0xbd7defdf,0xbd604f82,0xbca1669a,0x3c791ce8,0x3dcf9aed,0x3e5d8311,0x3e6ff441,0xbdc505a0,0x3d054310,0x3e1b6f84,0x3d70b534,0x3d3dc54c, -0x3d38989a,0x3d366be3,0x3d8878e5,0x3d8870e6,0x3d6290b6,0x3d28ccf9,0x3d27e720,0x3d1f642c,0x3d11a5ed,0x3cbbe46d,0x3b84746d,0x3c611216,0xbcd1c78a,0xba9ec4a0,0xbcda9a98,0xbd6d8705,0xbd362376,0xbd995b5b,0xbd4c7261,0xbda2513c,0xbe1849c2,0xbe24332a,0xbe2b43a7,0xbe1b05b6,0xbc9c4246, -0x3d789816,0x3e1ae6f0,0x3d725951,0xbbca4477,0xbd85a1c3,0xbb84d4cd,0xbee7eaca,0xbde104fb,0x3da13c67,0x3c2ac443,0x3c9f0764,0x3d096f1d,0x3c4d8e63,0xbc0e8889,0x3b54240f,0x3cc2f3b5,0x3d17d108,0x3d6c9463,0x3d6e976b,0x3d115216,0x3ce56c95,0x3c7d99d1,0x3c3ae7c7,0xbc989793,0xbd10f650, -0xbd5ebc5a,0xbdaadaf7,0xbd8c3e27,0xbd2300ab,0xbc0f4286,0x3cc9cefc,0x3d823ed4,0x3db518c1,0x3e26542e,0x3e97a75a,0x3e9fe17c,0x3eb0e239,0x3eb74fe0,0x3e6b8048,0x3d87d134,0xbe602a16,0xbecae48c,0xbc90cb5a,0xbece7657,0xbe85ea49,0xbe0d2f64,0xbd9d6c7e,0xbd357a48,0x3b5eec23,0x3b3321a2, -0x3d5a86f7,0x3d61f4dc,0x3b303752,0x3d6eeb0b,0x3d2cbc7e,0xbcb6e2c4,0xbcb82906,0xbd2d201f,0xbdb0ffd9,0xbd8e99fd,0xbdb6bed8,0xbd03c18d,0x3dd6a6ae,0x3e2563af,0x3e8dd5d8,0x3ee2f62a,0x3f0f126f,0x3f2121c3,0x3f1ba795,0x3f0b1684,0x3eed0b57,0x3ea8efbe,0x3e9d5f59,0x3e878b92,0x3ec2a0bc, -0x3efdd764,0x3f3291d6,0x3e9da187,0x3f3084ce,0xbc987f09,0xbea8fa34,0xbc8c4c9e,0xbd952abc,0xba2b50a0,0xbc63fbb5,0xbc58ea16,0x3c68490d,0x3cd06bdc,0xbc88f05c,0x3d2f6ffa,0x3d44bb50,0x3c2fe059,0x3c47c1fa,0xbbf71edf,0xbcaecfe1,0x3bbe2104,0xbd7cb53e,0x3d43e3f7,0x3e1bec77,0x3e2fe324, -0x3e7867e2,0x3e8eabc8,0x3eaf0d58,0x3ed8b71e,0x3eccaf89,0x3ece010c,0x3edd52fd,0x3ec5deb2,0x3e9adb03,0x3e2a8e18,0x3e978add,0x3ed1ae33,0x3f3aac4c,0x3f1a16e0,0x3ecfd7b1,0x3e875d5f,0xbd4c3c27,0xbd4f51a2,0x3c647894,0xbcadaa2e,0x3ca84d7a,0x3d04c83a,0x3d4ba744,0x3d6b8927,0x3d385c2b, -0x3d204e59,0x3d0d27da,0x3d0a425f,0x3c7c3282,0x3bb53ebd,0x3d175b10,0x3c9bdf35,0xbd449ebc,0x3da674d4,0x3e0efe65,0x3e10f924,0x3e329ae3,0x3e252136,0x3e1641f0,0x3dead975,0x3df122d9,0x3dc124c0,0x3ce63746,0xbbfe1de8,0xbb008768,0x3cbf4109,0x3da6cd9f,0x3e36bc4b,0x3ecb01a2,0x3ec1cf6d, -0x3e2a2360,0x3e34e48d,0xbd5504ab,0x3c07c4a5,0x3af8b7a0,0xbc21ace7,0x3bc75f41,0x3c2af6b4,0x3d09437b,0x3d134e4e,0x3d254d62,0x3d636e5c,0x3d6e08bf,0x3d1669b3,0x3d554d63,0x3d858f45,0x3d9bbc16,0x3d790039,0x3d732988,0x3d8fbe39,0x3d685fbc,0x3d6ef555,0x3d62e517,0x3d86cc00,0x3d7a69a8, -0x3cc2d50f,0xbc8b3261,0xbd8320bf,0xbdb6119e,0xbdad901c,0xbd1e5e18,0x3d0efe52,0x3d57014e,0x3d61a110,0x3d8c8b6b,0x3df908e5,0x3c833634,0xbbb8de94,0x3caa50af,0x3d38829b,0x3cf2c091,0x3cea9243,0x3c82c7d5,0x3c8ed361,0x3c2ab8b8,0x3c94ab92,0x3c96222e,0x3c97fce6,0x3c9f72fe,0x3c7cfc99, -0x3d2242c5,0x3d029a21,0x3d0ac139,0x3d365dd0,0x3dab1cc9,0x3d083a86,0xbc087edd,0x3bb907d6,0xbc31c27e,0xbc733c72,0xbcd6c2ff,0xbd052a26,0xbc5f9ca2,0x3b5592cb,0x3c8bfdc4,0x3ca65bfb,0x3c891dd3,0x3c03130e,0x3caaf108,0x3d0ae299,0x3d018fb5,0x3c954bf5,0x3cd795f4,0x3d0ac006,0xbd0db45e, -0x3b2c29fe,0xbb5b9f9d,0xbb01e286,0x3c6aeda1,0x3c4e53ed,0x3cc9a599,0x3d0ef80e,0x3d0cd3de,0x3d38046e,0x3d37cf1b,0x3d37ae67,0x3d075730,0x3ca5f7a2,0x3d22b97f,0x3cd793aa,0x3d1d9559,0xba8b1149,0xbbb38c83,0x3a2fd9c0,0xbb0f359d,0x3af0e35a,0x3bb87e55,0x3bdb0a28,0x3c1ed745,0x3c4f34dd, -0x3c9db147,0x3cca78e1,0x3cfbd153,0x3d104228,0x3cf7ae32,0x3cc647ec,0x3cd5be0d,0x3ce27e5d,0x3cb3d9e2,0x3cfcb795,0x3d36676a,0x3ca37204,0xbd102861,0x3d4b2827,0x3c9faadf,0xbcd88f6f,0xbce9774a,0xbcfbdbc9,0xbd0543e9,0xbd0bbdb4,0xbd12c1ca,0xbd11b563,0x3cf54099,0x3d45daff,0xbcab3c1d, -0x3cabc7cc,0x3d0903e1,0x3bbbcc6e,0x3c6e4440,0x3c3438a1,0x3c2e7a16,0x3c0dbb24,0x3bc35a54,0x3b508646,0x3be4a589,0x3c1e4f18,0x3c3dddc3,0x3c701c99,0x3c993788,0x3ccf2a4b,0x3cd09dcb,0x3cdbb5da,0x3ccff690,0x3cd57974,0x3d03de98,0xbdc3abcf,0xbdc9d8bd,0xbe0672df,0xbd73c1c5,0x3c9eb2ea, -0x3df354f7,0xbdb45d51,0x3a8a7655,0x3db87692,0x3dc32fb8,0x3dc198c1,0x3db47b4a,0x3dc9567c,0x3dcaace7,0x3dc95460,0xbb5ba32c,0xbd9b26be,0x3dd60cd6,0xb9662f82,0xbd75eb31,0xbdd5adfd,0xbdb0bec6,0xbdbf5d18,0xbdb94238,0xbdbc1263,0xbdbc7d13,0xbdbb50d2,0xbdba5ac0,0xbdb832cc,0xbdb4fc23, -0xbdb7512a,0xbdbb91f4,0xbdbefa93,0xbdd69f88,0xbde33b9b,0xbde71c18,0xbdea6e0a,0xbe1a7b9f,0xbe0f1094,0x3dc58892,0xbd979d9c,0xbc01d552,0xbc732441,0xbd3e0112,0xbd16d046,0xbd77d469,0xbd672786,0xbd10cfb8,0xbd6722b3,0xbd533dcf,0xbd4ffceb,0xbcc68fa8,0xbd16c67d,0xbd72b61c,0xbd6be629, -0x3bed0934,0xbdce2291,0xbdcb0a81,0xbdd36f15,0xbdc4f8a8,0xbdc3f50f,0xbdbf4295,0xbdbe861a,0xbdc578d8,0xbdc7ecc4,0xbdc446fb,0xbdc7ad1f,0xbdd8d12f,0xbdea82e6,0xbe187543,0xbe270f9e,0xbe26e156,0xbe25632b,0xbe7e483d,0xbe187ea0,0xbc75f6be,0xbd50c663,0x3ce1a09b,0x3a3aee1c,0xba0950d0, -0xbc465ee7,0x3c68acde,0xbc096e43,0x3c077aa6,0xbcda9110,0x3c4b8ceb,0xbcb24b92,0xbc0f8a78,0xbd0bac17,0xbd1579ce,0xbd232b69,0xbd6975dd,0xbdabad77,0xbde1221f,0xbde35c0c,0xbdd5a735,0xbde20db9,0xbdeae338,0xbdeef9de,0xbdfe9e74,0xbdfc50d8,0xbdf42895,0xbdf09e6b,0xbde9fafd,0xbde4305b, -0xbe3bea3b,0xbe669a3c,0xbe798adc,0xbe74df35,0xbead49d6,0xbe0c8730,0x3d1e800e,0xbc8c942f,0x3ca882e2,0x3d1eae45,0x3ca7f44d,0x3ce24fe0,0x3ce47f06,0x3d035a3b,0x3ce049fa,0x3d2ed812,0x3cb2511f,0x3b5c3f4b,0x39234fac,0xbc89b098,0xbcbd8e46,0xbd2ec8ae,0xbd5250c6,0xbda20f98,0xbdca0d75, -0xbdddcf52,0xbdbd3497,0xbdba0e61,0xbdb729a2,0xbdcfc7c3,0xbe047756,0xbe136cc8,0xbe17b223,0xbe0d2c8e,0xbe07715e,0xbe0e64c2,0xbe83f67c,0xbe9a7ebe,0xbea342f7,0xbe96f8dc,0xbeec4722,0xbebf5f18,0xbe4820d0,0xbe08f86d,0xbdc88397,0xbd8a1645,0xbda89127,0xbd04b2fa,0x3b088745,0x3ca905d5, -0x3d0ace44,0x3d1231ac,0x3d153d18,0x3cdb8c9a,0x3c45cb06,0xbbc6e270,0xbc582573,0xbd191c33,0xbd8b6605,0xbdf6ef83,0xbe0ba333,0xbe168b1a,0xbe208cec,0xbe572994,0xbe70b0fe,0xbe6606fc,0xbe49f4fa,0xbe2aa375,0xbddcae67,0xbddb2abd,0xbdd0e931,0xbd703050,0xbe08b91b,0xbe688202,0xbec179bb, -0xbee57193,0x3d7c6c40,0xbe53d233,0xbe54261b,0xbdcc30ca,0xbdbc4225,0xbd16f441,0xbba2c426,0x3c0192bf,0x3c144eee,0x3cc403ae,0x3cb63fdd,0x3d3eda88,0x3d30619c,0x3c5fc389,0x3b811054,0xbc88976e,0xbd50de15,0xbd764263,0xbd9e9fca,0xbd2ed0e0,0xbce67592,0xbc6694a1,0x3d35cfa3,0x3e3474de, -0x3e9d3b39,0x3ed4e692,0x3eec09f7,0x3eea22d3,0x3ee1b198,0x3e6902fd,0x3d0cb503,0xbe107baf,0xbdb70c28,0x3cd7d241,0x3e7ae487,0x3e17a385,0x3ed924ba,0x3dd95a8d,0xbe18eddd,0xbd07f7a0,0xbdb3974a,0xbd17a5dc,0xbd5ba6d1,0xbceb9fe3,0x3c82b588,0x3cf230ff,0xbc648dba,0x3d0ae73f,0x3c57f647, -0xbd2c7905,0xbd3fb311,0xbd4a17c4,0xbd5bd07b,0xbc9bc1cc,0x394ae8d9,0x3d1ea96d,0x3d5dc3a5,0x3db44a2b,0x3e065547,0x3dcde5f9,0x3d749b24,0x3bc42009,0xbbb8b3e9,0x3cb1f43a,0x3da7844d,0x3d757eec,0xbd81fea4,0xbe451903,0xbe756ed7,0xbe66632c,0xbd0b03fb,0x3e4e3657,0xbe587ee4,0x3e93ef16, -0x3e661334,0x3d93bc5e,0x3cc39d4c,0x3c1a534c,0x3c6783c1,0x3cc9f8b1,0x3cd26248,0x3ce32bf0,0xbca02379,0x3d044d3f,0x3d39cc15,0x3d0aa880,0x3d187fb3,0x3ccfd3f1,0x3d230bb7,0x3c22b004,0x3d59f9d1,0x3d1a9f23,0xbd51c2b6,0xbd84027a,0xbda11d32,0xbe125e19,0xbe446889,0xbe659354,0xbe85b728, -0xbeb33bd8,0xbf010c49,0xbee0ef2d,0xbec4f56e,0xbe8c13d7,0xbec07bc7,0xbeed861d,0xbf23164e,0xbeca0ce1,0xbee006e4,0xbe05a019,0x3e45dfd1,0x3dc358db,0x3d0b1732,0x3d5593c9,0x3c116cbf,0xbcb9630f,0x3c1e5898,0x3c3053be,0x3c91f438,0x3c3c8aa2,0xba09ebbd,0xbbe7b2c8,0x3c6cb53a,0x3d16f581, -0x3d1e43af,0x3d317b87,0x3dc51435,0x3d1459ba,0xbd107796,0xbd43008d,0xbdfff798,0xbe311fec,0xbe77b9d5,0xbe9e081b,0xbebd54bb,0xbecb9176,0xbed36f56,0xbec6810f,0xbebed739,0xbea9ee37,0xbe981ca6,0xbe89d2e1,0xbe9f4744,0xbeb5668c,0xbe1ed5b6,0xbdb58204,0x3dd15cba,0x3c627e1b,0x3c21fb60, -0xbac3da45,0xbbbd02bc,0x3c9f8366,0x3c48def6,0x3c629937,0xbbdfd1fa,0x3c5731c6,0x3c2b8e11,0xbb06a57e,0xbcb71880,0xbd0b7b46,0xbd540281,0xbbe46cd3,0x3ced8acc,0xbd12a28a,0xbdac636e,0xbdc4cf73,0xbe1f31a9,0xbe49b033,0xbe5a2e19,0xbe4ad8a0,0xbe0830b6,0xbd9623ac,0xbd12e297,0xbc3f4bb3, -0xbd0ccbc5,0xbdf6cbd0,0xbe022714,0xbdf9a23c,0xbdcbb10f,0xbdf057b7,0xbd87f41d,0xbc318a80,0xbc1330b5,0xbc86eeda,0x3ca70648,0x3c08b849,0x3c05f523,0xbb9f3b12,0x3c673250,0x3b1fcd1f,0x3ce7039c,0xbc6d5821,0x3c50b502,0xbc99e4c4,0xbb31f857,0xbd019a47,0xbceacc7d,0xbd48b846,0xbd536780, -0xbdc7ee26,0xbdcb3543,0xbd797ad7,0xbd105ff9,0xbd0ac582,0xbd1cbb30,0xbd3c8d32,0xbd7ade25,0xbd991054,0xbdaa7b3a,0xbdd294fa,0xbdea9a91,0xbdffb90d,0xbdf9e3f7,0xbe02bed0,0xbe0eb641,0xbdbd8de9,0xbd879def,0xbd8f3db4,0x3d054f8e,0xbd441b9d,0xbcb894ff,0xbc928e2b,0xbd26e1fb,0xbd0dd16d, -0xbd523858,0xbd507a5d,0xbcbc98f0,0xbd34eb40,0xbd322478,0xbd0eacb2,0xbc30d09d,0xbcaaef9d,0xbd2dc154,0xbd0e61a3,0x3c7efdae,0xbd463bad,0xbd279dbf,0xbd4f2e80,0xbd6863e7,0xbd69e5cd,0xbd5c1851,0xbd42aa30,0xbd5ee387,0xbd7b5190,0xbd8d3c3f,0xbd9d559a,0xbdaac0a2,0xbdbad4a4,0xbdb05459, -0xbd9ecf15,0xbd94f326,0xbd8a6fc7,0xbd931a28,0xbdb4cc66,0xbd18d00a,0x3c4868c5,0x3da25a9f,0xbd81d5c2,0x3bbedd39,0x3d902d55,0x3d9df2ed,0x3da5ec08,0x3d9ccafe,0x3db7e2b5,0x3dc54e31,0x3dcbc5e1,0x3c0621a3,0xbd6253d9,0x3dbac611,0x3c02a21d,0xbd2bd59b,0xbdae637f,0xbd8f22a1,0xbd93851c, -0xbd8f1ce3,0xbd8f3ca1,0xbd930118,0xbd956b45,0xbd9e10aa,0xbda26fea,0xbda6f7b1,0xbda9ad4e,0xbdadf244,0xbdb6eaeb,0xbdaca691,0xbda80c92,0xbda0564f,0xbda0cb21,0xbdb71d8e,0x3d614f99,0x3d1098b2,0x3d96c6d1,0xbd3be8a9,0xbde43e39,0xbe1a9d2a,0x3b2e0173,0xbdb7a8c1,0xbe18744e,0xbe1b220a, -0xbe18c254,0xbe0abd3e,0xbe183626,0xbe1a74b9,0xbe16889f,0xbdb6b66a,0xbbc3de52,0xbe22edfe,0xbdc1eb0a,0xbd017ec7,0x3db07dc3,0x3d4dad22,0x3d77c201,0x3d811985,0x3d859aaa,0x3d89505a,0x3d8e38cf,0x3d8a3b55,0x3d890c02,0x3d842fa6,0x3d82afc6,0x3d7ca742,0x3d763bf7,0x3d6f2046,0x3d5895a7, -0x3d13da79,0x3d31d164,0x3ca7a226,0x3bec5b15,0xbe1dabe1,0x3c3d44ee,0xbd37b94a,0xbd1f815b,0x3a8971bd,0xbb35ab35,0x3d23bc7e,0x3cd79499,0xbc653f21,0x3c96efb5,0x3cb2ddd0,0x3c72bff6,0xbcc1a2db,0xbc3359a0,0xbbdec11b,0x3beeaa6d,0xbdcdd299,0x3d7ab578,0x3da0d210,0x3d9ecb63,0x3db94659, -0x3dc20e12,0x3dcd21a4,0x3dd2ae3e,0x3dc4563a,0x3db3f691,0x3da11ce3,0x3da40273,0x3da3428b,0x3d96f4a0,0x3d8ec374,0x3d436682,0xba5e6a13,0x3bf28ed8,0x3c35f106,0xbd31d996,0xbde3e901,0xbd656fc6,0xbd8afaf0,0xbd0c5027,0xbce7d975,0xbc96ef97,0xbc9c16dd,0x3ccf28d1,0xbcc19883,0x3d1b06c8, -0xbc81eb53,0x3cbfda59,0xbcd8e7fb,0xbb96c8d5,0xbb8fccf0,0xbbc78d79,0xbcdaafc3,0x3d2c3356,0x3dcf4038,0x3dbb43fb,0x3df7ccf8,0x3e05ed80,0x3e143bda,0x3e1f8469,0x3e158404,0x3e0fd8b1,0x3dfcbc69,0x3df9048b,0x3de775f6,0x3ddd3fb2,0x3dc74f71,0x3d7f22b5,0xbd15d37f,0xbc9f5007,0xbcd878f4, -0xbe0db756,0xbe3d862d,0xbd8a693c,0xbd768833,0xbd181bae,0xbc6504c1,0x3ba615ff,0x3d1b8e99,0x3d15886b,0x3d2a8ae6,0x3d0093e8,0x3ce59681,0x3ce4e03f,0x3c0b9667,0x3c54cc19,0xbce680fc,0x3c7da9ca,0xbd1d6c71,0x3d62837d,0x3e03d461,0x3e015bf8,0x3e22f315,0x3e2bdd1e,0x3e3beeef,0x3e4401d6, -0x3e2857f2,0x3e03c6fd,0x3dc3e289,0x3de3d28c,0x3e043870,0x3df807e7,0x3dd34d63,0x3c4c4cca,0xbe167ea3,0xbdfad7b7,0x3e9c0e6b,0x3d8d3c41,0xbe20971e,0xbd98ded0,0xbdc3f2a1,0xbda08047,0xbce53ba8,0xbd47048c,0xbc73d85d,0x3c86c228,0x3cb82dcd,0x3d2de4ee,0x3d3b22fc,0x3cea0b84,0x3cae6dd7, -0x3cb9c1b2,0xbc0885da,0x3ce5fd65,0xbcec145d,0x3d27f8f4,0x3df82732,0x3dd33219,0x3e3d687e,0x3e7e3669,0x3ea02694,0x3eb5ed95,0x3ecfafb0,0x3ee3c40e,0x3eeebb2f,0x3eb67de3,0x3e885237,0x3e1e69c6,0x3e735c61,0x3e92c930,0x3ea34bc5,0x3e7317e5,0x3ebe8df1,0x3dfaf9df,0xbd8f622e,0xbb86e637, -0x3cdcdaa8,0xbc593308,0x3beb6e15,0x3ba08d21,0x3c7a7170,0x3c7f330c,0x3cef1d7a,0x3d329b90,0x3d175b89,0x3cd691e1,0x3d005465,0x3ca3d9f3,0xba925fa2,0x3c55347b,0xbc37cbb9,0x3dafc78f,0x3e35c8a5,0x3e442ac5,0x3e6d43dc,0x3e7ec945,0x3e88a765,0x3e9483a0,0x3e870d33,0x3e4f5ab4,0x3d9b73ca, -0x3d945297,0x3d4803aa,0x3d2eac26,0x3df04b58,0x3dfc7078,0x3e21b508,0x3e8b937f,0xbe21b6eb,0x3e6e6d15,0x3e4cfdab,0x3dd7b2b5,0x3d464141,0x3d3eab12,0x3b41a379,0x3b64f7cd,0x3d0a7e06,0x3d38bcf4,0xbc5b3d2b,0x3d0fd2ce,0x3cc59d2f,0xbbe02355,0x3bcb2d1c,0x3ce9f4ac,0x3cce4e98,0x3d2075af, -0x3d458771,0x3cf64dc8,0xbd09e01c,0xbda64edb,0xbe10b029,0xbe24dc49,0xbe3424f9,0xbe3746da,0xbe7f1e7b,0xbe959aba,0xbeaa1aab,0xbe686996,0xbdd8cf1f,0x3dacd3a7,0x3d8644c6,0xbcddb46e,0xbe5427ce,0xbe75529d,0xbe1b06c3,0xbe501206,0x3ccdcb8e,0xbc354f40,0x3bd40c2d,0x3c852779,0x3ce59db9, -0x3cd59b58,0x3d0308ee,0x3cf4f049,0xbc7f5d85,0x3ce8d9be,0x3cde5f34,0x3c908dcb,0x3c7987ed,0x3bf2e7db,0x3c692ac6,0xbc605314,0xbc686a9b,0xbd55af74,0xbdd6aa8b,0xbe048a47,0xbe31b63b,0xbe4e6a03,0xbe84dcee,0xbea26096,0xbea35963,0xbe8e9ce2,0xbe4ee038,0xbe33b859,0xbdf731fa,0xbda4a7f9, -0x3caa3943,0x3e022aea,0x3e3c4c5e,0x3d2aa30a,0x3e12afa2,0xbde52732,0xbe80fc4f,0xbde867a9,0xbd60ac6a,0xbd3ee311,0xbc55e044,0x3c134a74,0x3b40f6aa,0x3cac8da5,0x3beb7313,0x3be99510,0xbb5107ce,0xbbcf6209,0xbc523e80,0xbc5ee3fd,0xbd0a2c14,0xbb05e03e,0x3c049bf5,0xbd6f48d2,0xbdbca7f5, -0xbe122cdd,0xbe39d599,0xbe4241e0,0xbe2f50dd,0xbdd52cbd,0xbdb02ffd,0xbc6ee650,0x3e02c56c,0x3e141f10,0x3e25bb9a,0x3e1d9476,0x3e3b2f91,0x3e1e9ca4,0x3dbae86f,0x3dbaf3ef,0x3cd96162,0xbd6793be,0xbde9ed51,0xbd58e2ed,0xbd4078f5,0xbcc0ff73,0xbb967ccd,0xbab85a42,0x3c9daea8,0x3c83a361, -0x3c39c9e9,0xbb5d53fb,0xbb9455fc,0xbba4e5af,0xbcb92a44,0xbd3b1361,0xbd4899ab,0xbdac1302,0xbdd015e1,0xbdb590ee,0xbd71f3df,0xbd4ccb95,0xbc7cbe23,0x3ccb74b0,0x3d086fd1,0x3cd8402b,0xbbc1808d,0xbcd88b5a,0xbd099a15,0xbcd90b0f,0xbc6046d1,0x3c953481,0x3cadd10f,0x3d158713,0x3d4379db, -0x3bf87063,0x3d17d854,0x3c1f0390,0xbcbceb55,0xbc82eb10,0xbd247043,0xbc8c11ff,0xbb887007,0x3c5a8af4,0xbb83b13e,0x3c341ada,0xbbedff01,0x3bdd3b86,0xbcc12a06,0xbcc3877f,0xbd2019a1,0xbd228c88,0xbd7489fd,0xbd6c0778,0xbd93a74d,0xbd316301,0xbcbc5f8d,0xbd26be15,0xbd270f37,0xbd44224d, -0xbd33bf71,0xbd1b3a54,0xbd0a5bf1,0xbcdd4786,0xbcc86392,0xbbd12cf2,0x3bea15a7,0x3ce62027,0x3cb380cb,0x3cafa26e,0x3d237ca9,0x3cde46ad,0x3bc86704,0xb776c595,0xbda049ff,0x3a615566,0xbcf00627,0xbced7585,0xbbf5ddfc,0xbc5cabd3,0x3b974595,0xbc35ac09,0xbd134bf8,0xbcbd5436,0xbc6a4c01, -0xbcc588b9,0xbd249157,0xbd1b3d5f,0xbcef2261,0xbcd46caa,0xbd8104e1,0xbd13f2ac,0xbd133612,0xbd06f9b2,0xbce2c1e5,0xbcc47af0,0xbcb84209,0xbcc301ef,0xbc65e81d,0xbbade4fc,0x3b5500ae,0x3c5f13dc,0x3cc9fd68,0x3d1b0714,0x3d0bf354,0x3cef97b7,0x3ca78890,0x3c2c31fc,0x3c33c343,0x3ccfe40d, -0xbd5adff1,0xbdc3b8cf,0xbdeac4b4,0xbcbd79f6,0xbdadccf4,0xbde8c330,0xbdf2f99f,0xbdefe861,0xbdde3532,0xbdeec5aa,0xbdf765ac,0xbdf4132c,0xbdbee490,0xbd1e3ce4,0xbded023f,0xbdc35deb,0xbd63c633,0x3bcb38ea,0xbb7d1020,0xba8ce611,0xba5f6648,0xb92abdd0,0x3ad40b10,0x3b29ffdc,0x3c14ac7a, -0x3c664b12,0x3c9e1c7b,0x3cba55a8,0x3cce34b6,0x3cf36248,0x3cbb5608,0x3c9fdac4,0x3c8cca82,0x3c833619,0x3c4676a7,0x3d4c45b8,0x3d47e097,0x3d21e35d,0x3db3cb72,0x3dbb8b90,0x3d1d702c,0x3d9e3a0c,0x3dbb9234,0x3d687079,0x3d7a0dc9,0x3d7a50d9,0x3d4a1173,0x3d616899,0x3d5cb7e3,0x3d4c6a30, -0x3dbf57ea,0x3da09eae,0x3d31abe4,0x3dbfb236,0x3db22d59,0x3cf8d107,0x3d3322d8,0x3d35845f,0x3d33791f,0x3d40da24,0x3d493c22,0x3d4d1154,0x3d556394,0x3d596600,0x3d5cb0ae,0x3d6a61de,0x3d76caf4,0x3d8ab88f,0x3d75d396,0x3d6b94db,0x3d5a2866,0x3d5ddf99,0x3d692148,0x3d8630c8,0x3d42e5d6, -0x3d291236,0x3d5c2b48,0x3d4f8576,0x3d3fa4fd,0x3d3b94d8,0x3d4bf534,0x3d7462c9,0x3d87af45,0x3d763d73,0x3d4d91be,0x3d75f86d,0x3d475eee,0x3d37379f,0x3d818427,0x3d3c21f2,0x3da0aa41,0x3d401f2a,0x3cf9b36f,0x3d22dd40,0x3d0674b1,0x3d16fa29,0x3d1614fb,0x3d1f28c1,0x3d3f2fe9,0x3d68e3d0, -0x3d85347d,0x3da00300,0x3db28810,0x3dd0ec5a,0x3db24021,0x3da442bb,0x3d8ee74b,0x3d9127e4,0x3dc0cead,0x3d86aad6,0x3d546ca1,0x3d32d7aa,0x3cec4edd,0x3cd4931e,0x3cee067f,0x3cd4d023,0x3d404dd0,0x3d033da2,0x3d2c30c4,0x3cada6a4,0x3d17fb38,0x3d1f7544,0x3d034a2a,0x3cc11b44,0x3d15a90e, -0x3d03119d,0x3d87924d,0x3d33c77c,0x3c9acfd0,0x3d31b40d,0x3d1392cc,0x3d69275e,0x3d8ac946,0x3da38490,0x3dc741d0,0x3ddd2f2c,0x3df3e94f,0x3e0be544,0x3e123025,0x3e260d23,0x3e07ed14,0x3e03fefb,0x3de51399,0x3dedc35f,0x3deea7a6,0x3d92d801,0x3cb67d29,0x3c828a83,0x3c4d39ca,0xbb53ecb0, -0x3b18c0e9,0x3ab85229,0x3cded041,0x3d10434a,0x3c3910b2,0x3ccda914,0x3ca1809a,0x3c62560a,0x3ab2866e,0xbbf40e84,0x3cbd56fa,0x3b8c2565,0x3d52afb3,0x3cb8ba7f,0xbc73ff7e,0x3a9cd162,0xbc51e2e9,0x3b4f5f33,0x3be73e62,0x3c880089,0x3d418615,0x3db6ccf8,0x3e01093d,0x3e25b134,0x3e2ec4c4, -0x3e47590a,0x3e248560,0x3e0f7dec,0x3df7c05b,0x3dfc2604,0x3e5fb39e,0x3e7c723b,0x3e43c5f7,0x3de1ff22,0x3ddbaf9b,0x3daa868f,0x3d97153d,0x3d2790aa,0x3cdb68af,0x3cabb6ec,0x3c8056a6,0x3d019152,0x3d10978b,0x3d141fab,0x3cbf6441,0x3c3b9153,0x3cd87081,0x3c1bbd53,0x3d7d682f,0x3d8a9758, -0x3d8a29b2,0x3e16451f,0x3e3dcb01,0x3e6df216,0x3e947028,0x3ec0d524,0x3ec2bd23,0x3eb3abcb,0x3e827433,0x3e90af9b,0x3e954910,0x3e91d785,0x3e95796e,0x3e9ca9ac,0x3ead5ecf,0x3ea491bb,0xbe291c0d,0x3df5cdc5,0x3e3f6214,0x3da077fe,0x3d906c41,0x3d38d732,0x3c9caae3,0x3c17b113,0x3c8bf744, -0x3cba844b,0x3cc6ab4d,0x3d1daaec,0x3d12db1a,0x3cea4aa7,0x3ccb1ece,0x3ce2307c,0x3d838397,0x3d710690,0x3ddc380d,0x3c9eecca,0xbdc1ce18,0xbdf13c2d,0xbe4b2aef,0xbe4004c2,0xbe5c5053,0xbe70e329,0xbe8ce0fd,0xbe8354e3,0xbe55221e,0xbde0108a,0x3cbe16cf,0x3e27020d,0x3db14f28,0xbcbe831a, -0xbe4f308b,0xbe4cc392,0xbe0385cf,0xbe029ff4,0x3d95f79e,0x3d1e9f46,0x3da9572d,0x3d3c31f9,0x3d806843,0x3cb6ae8e,0x3d690260,0x3d4b5fed,0xbbd2eb2a,0x3d272e2f,0x3d0fbb12,0x3cec7e78,0x3d033d79,0x3cb9837c,0x3d488a4a,0x3b7009ca,0x3a8e09d7,0xbd559945,0xbdc4bee8,0xbdb90a1c,0xbe200643, -0xbe4d09b1,0xbe5c26a6,0xbe20fc6f,0xbe29a438,0xbe2a8499,0xbe1ffa95,0xbe692920,0xbe6ba2ed,0xbe80c28f,0xbe4dbea2,0xbd498a0a,0x3dffed1b,0x3d24adbd,0x3e7aa9df,0x3ce68552,0xbddf4510,0xbc952b53,0x3bad3719,0x3c488aa2,0x3c2e0998,0x3bee1a12,0x3cc68554,0x3cda8c56,0xbb0d6646,0x3c76aa79, -0x3bc9879a,0x3c3a54be,0xbc91dbb8,0xbcadc4ad,0xbce2e291,0xbcbd1a8b,0xbc8db8b5,0xbd6c4693,0xbda72bbf,0xbda48a89,0xbd855a96,0xbc96f6bf,0x3d02cfec,0x3dac458e,0x3e0200d7,0x3e42ff84,0x3e8ce760,0x3e6f868f,0x3e31352d,0x3dafef02,0x3dc232e3,0x3d8b7675,0x3e16ab8a,0x3e49be5e,0x3de023ee, -0x3e1ebff9,0x3dd03b92,0x3ce6468b,0x3d3b08f6,0x3c9a29b8,0x3d0b226d,0x3d81f3a0,0x3d441c81,0x3cb56d02,0x3bbae065,0xbb0a577a,0xbb5a3250,0x3c38d991,0xbb32278e,0xbcbd2887,0xbd1c81a8,0xbd73b9d6,0xbd6fddf8,0xbd460fab,0xbc9fbf0f,0x3b9f8109,0x3d00d4ec,0x3d856f50,0x3dad877b,0x3dadfa05, -0x3e1e14ba,0x3e105d33,0x3d4b4a3f,0x3cf95e76,0x3c154bc0,0xbb4600ed,0xbd52bb17,0xbcd8f5ee,0x3d5fcb16,0x3dda53d5,0x3d939e67,0x3dd8a3cb,0x3ccfe8d3,0x3bf62750,0x3bc0e829,0x3a771c04,0x3b294d6e,0x3c51f135,0x3b456eca,0x3b18f5f2,0x3b1b387e,0x3bdb8da9,0x3af4a8f1,0xbb60f73f,0xbbe6f233, -0x3ba2366c,0x3cda8c7f,0xbbaf99a9,0xbd15c465,0xbc3349dc,0xbce3c992,0xbd1e81a1,0xbcbd227b,0x3c48c777,0x3d292af9,0x3d7fe3ee,0x3d4bcb25,0x3cf2a0cb,0x3c7effcb,0xbca400e5,0xbd018141,0xbcc2faf6,0xbc934fd7,0xbc3e1dce,0xbc0f6015,0x3d7ffa1d,0xbbe7f925,0xba8a0d79,0x3d192c9b,0x3d01cc93, -0x3d0da940,0x3cd24a06,0x3c83a8fd,0x3c2f89d9,0x3c80db82,0x3b81a79a,0x3c8d11c2,0x3a93d513,0xbb2f5962,0x3b58d98e,0xbc46a2d4,0xbc1b89a3,0xbc4778ee,0xbc5482cf,0xbc107bc7,0xbc679133,0xbcc9d555,0xbd01c693,0xbd40e3b0,0xbd07804d,0xbcbff718,0xbc3ea13d,0xbc33b85a,0xbbd6117b,0x3a1aeb73, -0x3b9394b9,0x3c5684de,0x3c81c07f,0x3cc7a7c8,0x3cfcdab3,0x3cc6971f,0x3c7dd955,0xbbf54f67,0x3b5b8e28,0x3cac6650,0xbb938d86,0x3c72bd66,0x3c318221,0x3bd2ffbd,0x3c3e1be8,0x3a9a0363,0x3c4d49aa,0x3cae4bf8,0x3c97f148,0x3c1329e3,0x3c65ccc9,0x3b2f40a8,0xbb1b95e4,0xbbc296a8,0xbcc12e34, -0xbd07832c,0xbce134d8,0xbcdd2052,0xbcc2548a,0xbcb60c4b,0xbcbc2af5,0xbcd06b98,0xbcd45a0d,0xbcb3f476,0xbc94c4f8,0xbc811f41,0xbc6aad2b,0xbc8a7881,0xbc9e3937,0xbca11df4,0xbc95051f,0xbc50b436,0xbbeda903,0xbbed2603,0xbc57dfce,0x3d33d46d,0x3d5fcdfa,0x3c83a6ba,0x3d0ddf52,0x3d59384a, -0x3cf453b5,0x3cebf334,0x3ccff891,0x3c8231e3,0x3c8872f2,0x3c7f7e14,0x3c36e19c,0x3d485562,0x3d0713ec,0x39a7767b,0x3d266aeb,0x3cfdc8ed,0xbbc3b377,0xbb71b93f,0xbb672e2f,0xbb60f5c7,0xbb4f5c4d,0xbb132427,0xbb03a501,0xbb98102a,0xbbf9df88,0xbc2650d9,0xbc4120a1,0xbc3f8ce2,0xbc3d82a4, -0xbc1bbb2d,0xbc0e674f,0xbc1d7b3f,0xbc023354,0xbb6f5982,0x3ccbbc4c,0x3cdcdcd7,0x3ceead27,0xbb17cef7,0x3b9fbcf4,0x3d610e39,0xbb794e88,0x3afb4c66,0x3d2ef1e3,0x3d3c5729,0x3d3f85b0,0x3d4ba714,0x3d481200,0x3d4e1486,0x3d664cc2,0x3b67b82c,0xbb9d5446,0x3d744627,0x3bcda8ea,0xbb931ee9, -0x3c99085d,0x3c9ce7ca,0x3c866c35,0x3c6d8815,0x3c660195,0x3c5229ce,0x3c22d95d,0x3c41909d,0x3c5e574a,0x3c90c30e,0x3ca7962f,0x3cce0814,0x3d0a30b9,0x3d0078a2,0x3d03e2dc,0x3d1f5b8a,0x3ce5809a,0x3d4e4780,0x3cecf47c,0x3cbbe377,0x3c910377,0x3c4e3e77,0x3cb236e2,0x3ca317cc,0x3c863541, -0x3cab7f04,0x3c712b80,0x3b850532,0x3c0d7e27,0x3c88a20a,0x3c7cc53d,0x3c8b4968,0x3c83c268,0x3ba816b3,0x3c7584cf,0x3ca72d73,0xba400065,0x3c2dc366,0x3affb8ff,0xba6819b0,0x3a225aaa,0x3895e51a,0xbb9666a1,0x3a978177,0x3c170e47,0x3cc15cfe,0x3cfea4fc,0x3d28eb6c,0x3d6a721b,0x3d4d928c, -0x3d5e0e80,0x3d9d80d6,0x3d6079ce,0x3d88603b,0x3d3e22f9,0x3ca849c3,0x3cc1672b,0x3c813218,0x3c2d4175,0x3c5122c6,0x3c00bba0,0x3cad6866,0x3cf7af52,0x3b1ebfb2,0x3cb1b9fb,0x3c7d399d,0x3cb8a4d5,0x3bc13b36,0x3b719528,0x3bcf71cb,0x3c0c63c9,0xb980527e,0xbc31311a,0xb97923fa,0xbc46fd30, -0xbcd0eae8,0xbcda17d2,0xbd016404,0xbd2ee01a,0xbd027b3b,0xbc9b84f5,0x3c377439,0x3cdcae63,0x3d4cdb1e,0x3db29c22,0x3d91fec2,0x3d9b5529,0x3df52156,0x3d90c1e0,0x3de84c9e,0x3d95837a,0x3d3b4c03,0x3d033fd4,0x3d02ab1e,0x3cc46d69,0x3cc100da,0x3c6bcb70,0x3cef89e2,0x3d01ed4c,0x3cabe0f0, -0x3cccfbf6,0x3c990374,0x3cd759e3,0x3b756305,0xba3dd603,0x3b6698d3,0x3c2f9a76,0x388ebcec,0xbcb9d418,0xbcac0a1a,0xbd19f6d6,0xbd55f95b,0xbd2c8634,0xbd24228d,0xbd415d32,0xbcc26700,0x3c0db508,0x3d8188f8,0x3da27b03,0x3dd99efe,0x3e1735e3,0x3df04845,0x3e0536ea,0x3e56d11f,0x3e14def7, -0xbd37f722,0x3b8da530,0x3d9db3e7,0x3d710276,0x3d3a3acc,0x3ccdabca,0x3c2350e5,0x3cf343dd,0x3cb1abc7,0x3c4c49de,0x3c6be344,0x3cc5c84e,0x3cd32730,0x3cbfbc92,0x3c66f0d1,0x3c1a67a1,0x3c047053,0x3c67f062,0x3c3689f2,0xbc1d2d23,0xbd0bc134,0xbd6bc05d,0xbdaec282,0xbe0dddd3,0xbe2ef4dd, -0xbe3fb5b6,0xbe34c6af,0xbe2dad08,0xbe305c89,0xbe2a4764,0xbe251a8d,0xbe231b7a,0xbe07c1e1,0xbdfe21d5,0xbdcf691a,0xbd9ee547,0xbe57b8ef,0xbde00865,0xbc1ecf5e,0xbbbd8342,0xbbc18b2d,0x3c8a1a56,0x3cdc709a,0x3d09fee0,0x3d0c4bd3,0x3d06e7a3,0x3cb3a392,0x3d0e8f9d,0x3cd209ae,0x3cacb917, -0x3bb71c1b,0x3ad8ae2f,0x3a8c8735,0x3b8f221d,0xbc7bab56,0xbd94749c,0xbded7bcf,0xbe309b76,0xbe5cc6ce,0xbe8c7e7b,0xbe99cb92,0xbe9de9cf,0xbe88bace,0xbe609718,0xbe0a4abd,0xbe0d0dbe,0xbe1d5339,0xbe77d63a,0xbe74f741,0xbe4dda7f,0xbe1396b3,0xbe298032,0x3c8b23a9,0xbd933052,0xbdf55846, -0xbd53a896,0xbcd1b03a,0xbc6f1c1f,0x3c1a6e02,0xb9f14046,0x3d05c0d8,0x3d2f5638,0xbba2cd79,0x3d2d2665,0x3d3474e1,0x3d1b470e,0x3c8e90ab,0xbb89bcff,0xbc0010ba,0xbccc80ca,0xbd7bf03e,0xbd8f9794,0xbda9d061,0xbdc7eb43,0xbd89d68d,0xbd726542,0xbd21ea30,0xbd162b1c,0x3d632967,0x3df55eb5, -0x3e319444,0x3e2e7608,0x3da80784,0xbda7b45a,0xbd9c4910,0xbdd09c7c,0xbda4c20f,0xbd342876,0xbea581f1,0x3b660bf0,0x3d6d9c30,0x3bf60877,0x3c93a84a,0xbbf2fe58,0x3c89b0ea,0x3cdaa46d,0x3cd4d3c5,0x3c836bf4,0xbc35816b,0x3b64a758,0x3bb6f51a,0xbb932ff7,0xbc971342,0xbd1d857c,0xbd774033, -0xbd4236b5,0xbd7f2e15,0xbd329329,0xbc21a21e,0xbb849d55,0xbbede2b6,0xbccc0e8f,0xbd3871d5,0xbdbfcb2d,0xbd98715d,0xbdff9bff,0xbe6a6497,0xbe6e725f,0xbe58f362,0xbe2cbf40,0xbe4c708d,0xbe6657f2,0xbe8175b3,0xbeb9b0ad,0xbe741af9,0xbe3cdc53,0x3bf17545,0x3c7f968f,0xbc59c8d9,0x3c535e3a, -0xb9d2c5be,0xbc2272b6,0x3b85ff2c,0x3ae1b513,0xbc6b0419,0xbc35b19a,0xbb8b2408,0x3bcdd323,0x3b897665,0xbb0a3f00,0xbc18926e,0xbce7ba47,0xbd6f7440,0xbd17f8f4,0xbd314702,0xbd4d8a16,0xbd0a859e,0xbd470b70,0xbd7d2353,0xbdb3672c,0xbe0f01d6,0xbe389dce,0xbe510f2b,0xbe3a6225,0xbe2cbeca, -0xbe24356b,0xbe088a15,0xbe08a3e3,0xbe0543a1,0xbe3c5ac1,0xbd957282,0xbdd69865,0x3ba96285,0xbccf791a,0xbc496509,0xbc536fa6,0xbb76cfff,0x3be5ab1f,0x3a9a9eae,0x3b45f683,0x3b95053a,0x3c286b8b,0x3b895267,0x38e1c25d,0xbbf9e39f,0xbc597b62,0xbcc05b2c,0xbac036a9,0x3bc0a030,0xbb1d5422, -0x3c1807f0,0xbc43b631,0xbd7fcd3f,0xbe042947,0xbe19ddd5,0xbdf8e1f9,0xbd997957,0xbd05f91c,0xbcafd311,0xbc59c3b2,0xbc3f156a,0xbc4aed45,0xbce27b36,0xbd2e3819,0xbd130d9e,0xbd505656,0xbb79f09f,0x3ba19b5c,0xbcdfc2b9,0xbc9d87e8,0xbc47b6c1,0xbc062fc0,0xba81c021,0x39f66723,0xbb5efeb6, -0x3a4148d8,0xbc841a65,0x3b8ac9ee,0x3c339b72,0x3cbb287d,0x3c63d3b4,0x3c7f9a74,0x3c7a6bb8,0x3bbb6c5f,0xbc9a6954,0xba628b8b,0x3b2423de,0xbc8343a8,0xbc70e956,0xbc3c8a0f,0xbc7b8b3f,0xbcf61b8b,0xbd1c9ba5,0xbd47caee,0xbd618271,0xbd6bf4f8,0xbd82227d,0xbd8e247a,0xbd6f207f,0xbd4c9c49, -0xbd31a3ca,0xbceae710,0xbd351523,0xbd53eb35,0xbcb04568,0xbd0db9be,0xbd17a62c,0xbce05b69,0xbcfed9b1,0xbce3980e,0xbce49db4,0xbd1665ee,0xbd2046c7,0xbd22a143,0xbd131d1e,0xbd1ac60e,0xbcd30ca0,0xbc73ef81,0xbceea1d4,0xbc742f5c,0xbc7d6380,0x3bd49f73,0x3bc1a7e1,0xbb664de4,0xbc1f2370, -0xbcb0ac08,0xbce885bb,0xbd05bbb3,0xbd0f7e38,0xbd1f2574,0xbd37ca14,0xbd584390,0xbd6d5257,0xbd85f29a,0xbd74b1df,0xbd6a5e6e,0xbd5a5553,0xbd5405e2,0xbd1801a9,0xbd184280,0xbd78d2e9,0xbd3441ae,0x3c9a241d,0xbd7f248d,0xbd359150,0x3b910927,0x3bad8b5e,0x3be9178c,0x3c574bc9,0x3c3fbbc3, -0x3c59013e,0x3c830054,0xbd35d810,0xbd6763fa,0x3c78e35c,0xbd0e6ddf,0xbd3567d6,0xbc8bcb3b,0xbcdc332f,0xbcebf948,0xbcfcc916,0xbd042e8d,0xbd0c6f58,0xbd1978e7,0xbd249895,0xbd2e3e00,0xbd343eaa,0xbd394c33,0xbd40c119,0xbd4ff57c,0xbd41a752,0xbd386f14,0xbd2b17b1,0xbd27ab44,0xbd37de32, -0x3ce67d59,0x3d24e1e0,0x3d0fbdc0,0x3d973f10,0x3d70c6b9,0x3c582f00,0x3d82cedf,0x3d69b1bc,0x3cc49f84,0x3cda2288,0x3ccbe993,0x3c81e42f,0x3c9d7737,0x3ca3ba62,0x3c938f77,0x3d644367,0x3d73737c,0x3c388fc2,0x3d52660e,0x3d7852e7,0x3c82a099,0x3cb1b39e,0x3cb42240,0x3c9e4cd5,0x3c9a8fbb, -0x3c985306,0x3ca7bc16,0x3c9674c2,0x3c90fae2,0x3c8a87ce,0x3c7ac2af,0x3c75a43d,0x3c6bd4da,0x3cae98be,0x3cec7611,0x3d2d52a5,0x3d2e39e0,0x3d853d27,0x3d929574,0x3d5c8499,0x3d588be0,0x3d453462,0x3d33af5f,0x3d289bea,0x3cf39c43,0x3d047be2,0x3d38a4b4,0x3d44c379,0x3d4388e2,0x3d1ac72f, -0x3d304cd3,0x3d095e61,0x3ce5d7dc,0x3d1e43df,0x3ced2f1c,0x3d010dda,0x3cdc4964,0x3ca91507,0x3ce3c13b,0x3ca85366,0x3ca03973,0x3ca05a7e,0x3cd691a1,0x3cb81882,0x3c9217fb,0x3c555762,0x3bac2d80,0x3be96ccc,0x3c625f60,0x3cf912c5,0x3d3cc59e,0x3d923c97,0x3d94b9b9,0x3dc21e8c,0x3dc25fc8, -0x3db7b7a3,0x3d960e63,0x3d5476e3,0x3d45bf1c,0x3d1aa2f2,0x3ca51a6e,0x3d16a9fb,0x3ccfbf06,0x3d1a89d8,0x3cd5b021,0x3d0a3b58,0x3d155fe5,0x3cf97b19,0x3cc3d9a0,0x3c865411,0x3cb3ea0f,0x3cd37878,0x3c1fa581,0x3c089251,0x3c0eecb5,0xbb30b20e,0xbc04ab02,0xbc316a02,0xbb67a53b,0xbc86e616, -0xbca933a8,0xbcf0718f,0xbd24e0a6,0xbd18d5a4,0xbcd661a4,0x3c7eae6e,0x3d4a0b41,0x3dd94bf9,0x3dd112b1,0x3ddfeece,0x3dd9eb12,0x3dabea35,0x3d798627,0x3d42990c,0x3d5de934,0x3d0cd236,0xbb8e88ac,0x3caa05b0,0x3cd3f3cb,0x3bf11dc1,0x3c9d38e2,0x3ca3614a,0x3c5d150d,0x3b026fa6,0xbbd1a6ee, -0x3c133d3f,0xb9ba7f29,0x3c498b3d,0x3adf938c,0x3c90f632,0x3d082aba,0x3c7f688a,0x3bd25c10,0x3bb6f297,0x3ccd5584,0x3c67ad34,0xbc1aee64,0xbd22f1d9,0xbd878feb,0xbd525017,0xbcc65de5,0x3d2501ec,0x3db8ea4b,0x3e18a636,0x3e07e274,0xbd275bef,0x3b653bc7,0x3dc0035f,0x3dc098f9,0x3cba928e, -0x3c766c1f,0x3c2b5edb,0x3c983004,0x3d0528fa,0x3d1df03c,0x3cb91821,0x3cb7a61c,0x3ca33724,0x3d09252e,0x3c609589,0x3af03be0,0x3c2f6bba,0xba30c9e3,0x3c11c388,0xbc6d0ab2,0xbdabf340,0xbdf95300,0xbe2b82bd,0xbe01b5e8,0xbe0f8667,0xbe510d20,0xbe4ec914,0xbe21a7bb,0xbd45b557,0xbd033685, -0xbca66dcf,0xbb91093c,0x3c2bccc8,0x3bba6f38,0xbc20495b,0xbd391cc6,0x3daeb0e3,0xbd74fae7,0xbdbe6fda,0xbcda0c09,0xbbc66b9f,0x3c9aabd7,0x3d01179a,0x3d5dd049,0x3d4b2c84,0x3d417500,0x3cec3f48,0x3d193c0d,0x3cd6329d,0x3ca66342,0x3b6c13c4,0xbb869f88,0xbc28d94b,0xbcdcb17a,0xbd3483d7, -0xbcf1f472,0xbc179f9d,0x3c3f2608,0x3d321556,0xbcd202db,0xbd08da8c,0x3b757813,0x3d99a172,0x3de02d5d,0x3dd9f727,0x3e3fe5e3,0x3e576105,0x3e3e489b,0x3e90b0df,0x3e8951f1,0x3e4d4b72,0x3e092d3c,0x3d5cb6bc,0x3d8369ad,0xbc5e257e,0xbbb0e744,0xbce73a2a,0xbc318364,0xbc2b6a2d,0x3c15a009, -0x3ca5472d,0x3d02b6c8,0x3b31d6e1,0x3d0455d2,0x3d136c8e,0x3d2ff547,0x3c7a89a6,0x3bdbe7a0,0xbc22cc09,0xbb8a038e,0xbc167c9f,0x3be8b174,0x3d47ae26,0x3d56123a,0x3dc4666c,0x3e1669b1,0x3e3cb5cb,0x3e3b9e42,0x3e356207,0x3e04eab8,0x3d0bda32,0x3d35a7eb,0x3dbcc437,0x3e3f5be3,0x3eac8a1e, -0x3ea7221a,0x3e3ed50b,0x3da8b5ce,0x3e3ccc54,0xbca5d58e,0xbcee78d8,0x3cec79b8,0xbc544172,0x3cb3ce94,0x3c89d2ad,0x3d246931,0x3cb7a5d0,0x3c4a8dcf,0xbbfffd4e,0x3c4055b9,0x3c90e98c,0x3cd2264f,0x3cb22e65,0x3c448fee,0x3c1c6d37,0x3c3ea5c8,0xbce144f5,0x3c0a9521,0x3d3257b3,0x3d42f7fd, -0x3d814b0f,0x3d72f219,0x3d76b8a4,0x3d9817ae,0x3d3712f5,0x3d3da2ba,0x3da9e16b,0x3d98816e,0x3dbfb996,0x3d95bb9c,0x3e74262e,0x3eaad302,0x3ec10ce6,0x3e8bd322,0x3e7cb74d,0x3e045abe,0xbd9b6e5d,0xbc155c57,0x3c1a4a28,0xbaf67012,0x3c5c7b9b,0x3cc22fa2,0x3c454556,0x3c843033,0xbb5e8ad4, -0x3c71486c,0x3cb9ee61,0x3cdd326a,0x3c612cc1,0x3b9764ae,0x3b902b77,0x3d0cdc81,0x3c817679,0x3d60020f,0x3d62d9b0,0x3cd08f55,0x3b55386a,0xbb645a3b,0x3c8a895a,0x3d7908fa,0x3d613d19,0x3ddd68d5,0x3e5deecd,0x3e2afdaf,0x3e25c96e,0x3e24f29d,0x3e797209,0x3e8c031f,0x3e950fd7,0x3e684301, -0x3dc17ec3,0x3d7d0005,0xbd2f9622,0x3c077aa8,0xbb1e043d,0x3c931c47,0x3cc226ee,0x3c66a2c7,0x3cd1abb0,0x3c9c20f0,0x3cb08516,0x3c1874e0,0x3c2f93ef,0x3c86a045,0x3cbd6ee3,0x3d02a135,0x3d19f764,0x3cc68e6b,0x3c80f8fc,0x3cf8ec32,0x3d5e9315,0x3d7c9249,0x3d84a2f2,0x3d7986e3,0x3d2da12e, -0x3bd321d2,0xbcba3eac,0xbd5d5b30,0xbd8a283b,0xbd5785f2,0xbc9bd1ea,0x3cb52ebc,0x3d8d7267,0x3dd970da,0x3e034982,0x3dc840bd,0x3d81b82f,0x3d591d20,0x3d4c4aae,0x3d379ba8,0x3c8b93fe,0x3ccd0322,0x3ca7ad75,0x3ced529f,0x3c66e9d0,0x3cdcb9c8,0x3c7ce134,0x3d09b483,0x3c6759e9,0x3caa2220, -0x3c90fb96,0x3c9e0130,0x3c174129,0x3cc93b95,0x3d186c17,0x3d5d077a,0x3d42e71d,0x3d09ed4e,0x3cccff14,0x3c38e35f,0x3aa00c48,0xbc156787,0x3c301271,0x3cc07843,0x3cec07d3,0x3d1d0b69,0x3d1d0de2,0x3d13a978,0x3d3527f6,0x3d620e71,0x3d9bbb8d,0x3d85c02d,0x3d623d2f,0x3d862998,0xbd20f038, -0x3d38ab87,0x3c9d3c5e,0x3c90fc8a,0x3d2a3e7f,0x3d0dd1d2,0x3d55d9c6,0x3d4e7ae3,0x3d070ad5,0x3d361f0e,0x3d263729,0x3d0fb126,0x3c909fd4,0x3c8fe4af,0x3d1d35e2,0x3cfa314d,0xb89ebcc2,0x3cc0487d,0x3c3cabaa,0x3c636568,0x3c3389e0,0x3c2a913a,0x3c1524ec,0x3b514cad,0x3c078158,0x3c39a3ea, -0x3c93e038,0x3ccdb642,0x3d124ecf,0x3d3e9205,0x3d4bf565,0x3d4f73cf,0x3d534d84,0x3d5b4200,0x3d4fad5e,0x3d90241d,0x3cf3afb1,0xbc64808d,0xbdaeaba6,0x3d6386dd,0xbb94c7da,0xbd91931e,0xbd9be90a,0xbd9e2634,0xbd9917ac,0xbda48040,0xbda9acf4,0xbdac313e,0xbbdac58f,0x3d24801f,0xbda471e7, -0xbc56113f,0x3cb70409,0x3d26de0d,0x3d09fd1d,0x3d0bfd25,0x3d02f622,0x3cf90757,0x3ceccc4d,0x3cdc210b,0x3d0aa326,0x3d20ba03,0x3d347452,0x3d4435f1,0x3d503cad,0x3d613abd,0x3d5a3b46,0x3d5ae8c9,0x3d58e320,0x3d618cfa,0x3d74370e,0xbdc9ebf2,0xbdb9e9b5,0xbdf5514f,0xbd6d46dd,0x3c00d8c6, -0x3dc7941c,0xbdb3c180,0xbbfad1e9,0x3d97ad34,0x3da3afec,0x3da508c3,0x3d9b33e6,0x3db04165,0x3db45fdb,0x3db7e719,0xbc0e4505,0xbd9b2c8c,0x3dc484a1,0xbbc381f8,0xbd76c214,0xbdd617ce,0xbdaed385,0xbdbeb8ea,0xbdbba23d,0xbdc07c79,0xbdc13409,0xbdc20960,0xbdbe146e,0xbdbe078b,0xbdbf2848, -0xbdc40537,0xbdcb8c9d,0xbdd980cc,0xbde1296a,0xbde2898a,0xbdd8490c,0xbdd51b6e,0xbe11197d,0xbe0121a6,0x3d853837,0xbda26891,0xbcf52a7d,0xbcfc7398,0xbd6b165d,0xbd430a11,0xbd8914cf,0xbd8349d2,0xbd2e3252,0xbd7e176e,0xbd61d93c,0xbd518cbf,0xbccf34d1,0xbd18622c,0xbd6d31c0,0xbd69400c, -0x3c346652,0xbdc3a816,0xbdc3d76b,0xbdce7b36,0xbdcdccc9,0xbddb3cd7,0xbde1c390,0xbde66ab8,0xbdde315d,0xbddda312,0xbde98da7,0xbdf7eeb5,0xbe0b7071,0xbe2058aa,0xbe2c25cb,0xbe2d6830,0xbe22fcfd,0xbe1ed109,0xbe35cef5,0xbdd41a6a,0xbc57bbc6,0xbd440062,0x3a505b03,0xbc2e8df1,0xbc3871f5, -0xbcbfc00b,0xba4fed3c,0xbc94a061,0xbb8a118c,0xbd05d62d,0x3bf39a92,0xbc9585fe,0xbb61db0e,0xbceabf9b,0xbd075e2b,0xbd1cb8f5,0xbd3a294c,0xbd8da212,0xbdcad96a,0xbdcbea72,0xbdd23eeb,0xbdec7b82,0xbdf83314,0xbe01cc47,0xbdf440e9,0xbdf67df3,0xbe03e8fd,0xbe0e3555,0xbe25403b,0xbe4de410, -0xbe5e3984,0xbe5e2964,0xbe48b391,0xbe33536f,0xbe97abb4,0xbdf594ee,0x3c39f2dc,0xbd1f10d1,0xbd03d05e,0xbc45f0d0,0xbc94ff10,0xbc5316ee,0x3bd156da,0x3c8672c9,0xba236dbd,0x3cac9412,0x3c2bbc55,0x3bc2e259,0xbbe114b0,0xbcb83257,0xbc7e40e2,0xbd21de18,0xbce32065,0xbd8060d2,0xbdc492f6, -0xbdd57f73,0xbdd56e0f,0xbdf93777,0xbe0eedf0,0xbe213d25,0xbe19df38,0xbe15a3ac,0xbe293e07,0xbe3da277,0xbe778663,0xbea2ad02,0xbeb1a428,0xbeae295d,0xbea233ab,0xbe92f3f1,0xbd1a2888,0xbd86580e,0xbd98e29e,0xbcf52e13,0x3c82072e,0x3cce5e21,0x3c22adf0,0x3a5ae5d4,0x3bf94dd7,0x3c7a8491, -0x3cbe9e9e,0x3c2c0042,0x3c024b09,0x3cd2b629,0xbb154c3a,0xbca7ebb0,0xbcb3d500,0xbd634017,0xbd867b3c,0xbdd7390d,0xbdc939f5,0xbdc12366,0xbe014b21,0xbe30913b,0xbe38dbe1,0xbe1a478d,0xbe2932a7,0xbe396863,0xbe413531,0xbe0c83fa,0xbd8b3726,0x3ce61d38,0x3d3590ce,0x3d58c389,0x3cf2d493, -0x3a980c93,0x3d811d75,0x3d6db4d2,0xbc014c32,0xbc43dc82,0xbd03944e,0xbcb49051,0x3a8aa8c6,0x3c9b4555,0x3d201218,0x3d263534,0x3c62240c,0x3ca6a509,0x3c8b1246,0x3cc2d51f,0xbc10569e,0xbce1c426,0xbd37535f,0xbd87be07,0xbd67e485,0xbd9b4d71,0xbdd8137c,0xbdb498f5,0xbd7a590f,0xbcfa1099, -0xbc62d0e6,0xbc1b89ec,0xbb6209a8,0x3bb15723,0x3c167884,0xbd16f667,0xbd065694,0x3d109d8b,0x3b896c25,0x3c84d24d,0x3da372cc,0x3d0cb87f,0x3c39bddd,0x3ace8cfa,0x3d4ef671,0x3d054974,0x3d009f0c,0x3c4a443b,0x3c121323,0x3c98a77d,0x3c6d3e31,0x3c81a3a5,0xbb390ab6,0x3bd4489b,0x3c27b839, -0x3d1d5b84,0xbb178066,0xbc80c835,0xbbc27e4d,0xbabea2c6,0x3c06d667,0x3c05751e,0x3cd361b6,0x3cf8f477,0xbc171f29,0xbd40cd37,0xbda60e6d,0xbdbbb17a,0xbdfff9cb,0xbdf9259f,0xbdbad676,0xbe111ddf,0xbe369c2d,0xbe7aee90,0xbe8d8e6e,0xbe74b504,0xbe56ad81,0xbd05c8a1,0xbc6d7272,0x3db9c73c, -0x3cc5825d,0xbc2c155c,0x3c95673e,0xbbccb66f,0x3bcdd11c,0x3ccdeb72,0x3c26009a,0x3b882ca0,0xbc02f5a7,0xbb4f31df,0x3c02c98a,0x3d3edb4d,0x3ca65747,0x3cb63ed0,0x3d3b4617,0x3cb7a815,0x3cec66bd,0x3c43fd89,0xbd004039,0xbd55d130,0xbd5275cb,0xbd4155ff,0xbd01ee78,0x3b524c56,0xbd282916, -0xbd2fcf83,0xbbc3bdeb,0xbca87ec1,0xbc2cda5d,0x3d3c0434,0xbd6bb60c,0xbe2ed2d8,0xbeadcd79,0xbe08298b,0xbe70164b,0xbb356309,0x3e03b663,0x3d303a1c,0x3cc020b7,0x3d066d39,0x3caba730,0x3c2ee752,0x3c59776c,0x3b3700b5,0x3b8a7cbb,0x3cc4944d,0x3cd76996,0x3cb6a3ad,0x3c8d5eb8,0x3c803055, -0x3ca46a31,0x3b9b3919,0x3d096e25,0x3cccd108,0x3cc352ac,0x3d3e0a03,0x3cf4dbf5,0x3a99a29b,0xbd1c17e9,0xbdd13a74,0xbd9852bd,0xbdc9ee10,0xbe2de632,0xbe1f2c8c,0xbe12d541,0xbdd37f16,0xbe0e6930,0xbe1e97a8,0xbe5a57a0,0xbe6a524f,0xbdd5f0d2,0xbd726a56,0x3d193d33,0xbb2936b8,0x3c874b79, -0x3c95bcd7,0x3c5ee4b9,0x3c085008,0x3b4ecdfd,0x3c055163,0x3bd0122d,0xba70b147,0xbb242428,0x3b73274b,0x3c12d790,0x3c76167d,0x3c8909c4,0x3ceecef1,0x3d15c7ce,0x3ca4a3dc,0xbc2852c1,0xbc3a9773,0xbc264d8d,0xbcba1c80,0xbd014826,0xbd805d0f,0xbd5f72aa,0xbd4c746b,0xbd163edd,0xbd0872af, -0xbd20aca1,0xbd6db245,0xbd2da6d8,0xbd2975fe,0xbd68c16e,0xbd87b5ce,0xbd66cc74,0xbd0bc47e,0x3b5b7916,0xbca3a0e7,0x3b0154af,0xbbbcdd1d,0xbb709fa2,0xbbc156e9,0x3c8f51e0,0x3c09242f,0x3d141347,0x3c1428c7,0x3cbb53c7,0x3be60641,0x3c44a6e1,0x3b143e75,0x3bc1fc89,0x3be98137,0x3ca1b22f, -0xbae8f795,0xbba410db,0x3c78d7e7,0x3cb7b2b7,0x3c474fc7,0x3b9a3a8d,0x3ad74ecc,0xbc3271e3,0xbcbe9e5e,0xbd0e60a2,0xbd24416c,0xbd179086,0xbd16d445,0xbd20232c,0xbd27cade,0xbd3f8e32,0xbd237f8c,0x3a73887a,0x3b72400b,0x3dab02a3,0x3c61ab13,0x3d2921f1,0x3d19a023,0x3c805f3c,0x3cb12be1, -0x3a372db5,0x3bd6fba6,0x3cb10901,0x3bfd49c4,0x3bd59297,0x3c32dbdb,0x3c9575bb,0x3c8688b7,0x3b9c10fa,0x3b62109d,0x3ccc510f,0x3ba844f9,0x3c43d992,0x3c144c3a,0x3c1cadbd,0x3c5d820b,0x3c8a9f90,0x3caa3247,0x3c5cc67f,0x3c12aca3,0x3b6a95f5,0xbacf917d,0xbc3f6376,0xbcaf5937,0xbc92330b, -0xbc538f71,0xbc0ca6b9,0xbb069622,0xbc06a87e,0xbcaf7285,0x3ce25623,0x3d81e1b6,0x3db2e815,0x3bf8eb95,0x3d696fbb,0x3db53b59,0x3dba5221,0x3db73e56,0x3da7d7be,0x3db2c32b,0x3db32068,0x3dafec7e,0x3d5e6eca,0x3c6530ec,0x3da0ba53,0x3d4fb6a6,0x3c9f1582,0xbc1f51c7,0xba89a176,0xba83dbc9, -0x3a67f2a2,0x3ae4ffe5,0x3b115218,0x3b8d937e,0xb9d6b245,0xbb8b67e6,0xbc0c28ba,0xbc5370cc,0xbc7ee9d1,0xbca5805f,0xbc869782,0xbc784803,0xbc61d8f1,0xbc59c732,0xbc60efc0,0x3cc3f898,0x3bf8ce83,0x3d213788,0xbd605a76,0xbdde145c,0xbe122793,0xbc777ca0,0xbdb88edf,0xbe0d6e04,0xbe112a31, -0xbe0ffbf7,0xbe038783,0xbe0ee405,0xbe0f9df0,0xbe0ba959,0xbdb27579,0xbc962b2a,0xbe15f095,0xbdc31f45,0xbd31ceb4,0x3d4e00df,0x3ca87592,0x3ce31547,0x3cf744f6,0x3ce79583,0x3cdfad06,0x3cd2524e,0x3cd72b4d,0x3ce05525,0x3ce88d81,0x3d02a413,0x3d079688,0x3cfbf091,0x3d0f5e94,0x3cf942fe, -0x3c79e6ff,0x3c685586,0xbbf8a99b,0xbc9e27f4,0xbe0f9fe1,0xbc5b458e,0xbd6e740a,0xbd512cc3,0xbc838ab4,0xbc84a874,0x3c83c021,0x3bea5674,0xbcbdcbd4,0x3ac033e3,0x3ba06b2a,0x399ef2cf,0xbce5efe5,0xbc9b3b5d,0xbca94d36,0xbc431a1a,0xbdca799d,0x3cd71c48,0x3d0cbc63,0x3d00559a,0x3d31763b, -0x3d24c06d,0x3d1ed97b,0x3d011579,0x3ce943b1,0x3cf0d6d7,0x3d12ed84,0x3d4dd896,0x3d6ab977,0x3d3e3164,0x3d775b14,0x3d42ef4e,0x3bc9a40f,0xbbaf7530,0xbc8869e5,0xbd3f85dc,0xbdc813bc,0xbd79b221,0xbd9dc019,0xbd42da9d,0xbd09b193,0xbc8c5f28,0xbccabc57,0x3c648dbc,0xbcc85243,0x3cd446f1, -0xbca03fad,0x3c9ef1db,0xbc8f1659,0xbad9eead,0xbc6d72d6,0xbcad3568,0xbd1e2eea,0x3c37c669,0x3d44817b,0x3d17e263,0x3d7e1703,0x3d5788c6,0x3d49838c,0x3d26a7ff,0x3d21c853,0x3d379f57,0x3d674ea1,0x3d9d1c98,0x3db4079f,0x3d8331e7,0x3db1b070,0x3d766524,0xbc87d14d,0xbd002cf5,0xbd1ba473, -0xbe0a41bf,0xbe25c7ec,0xbd9f4b78,0xbdaa03f7,0xbd789abd,0xbd0ddfc1,0xbc2a1e77,0x3c8dabe2,0x3cc6e105,0x3ce01e02,0x3c65725e,0x3c9aa406,0x3cec9324,0x3c239df9,0x3c2e6679,0xbd03196b,0xbbb3c73a,0xbd4a500b,0x3c181f2f,0x3d4e1581,0x3d3cc5ba,0x3da60de4,0x3d967a4f,0x3d8ea4c4,0x3d4ab88b, -0x3d0ed262,0x3d19ddc2,0x3d8c15f6,0x3df7da2f,0x3e169ff4,0x3de30dc3,0x3e0cb1ca,0x3db5ca19,0xbcfc8bf5,0xbd83df3a,0x3eaf8110,0x3e4f9f60,0x3cc03776,0x3c7e10c4,0x3bfe8579,0x3b20cd5d,0x3d114f05,0x3cf3f316,0x3bafd61c,0x3b270939,0x3ca1a9a9,0x3c50c218,0x3c3d8fd7,0x3c914c25,0x3bd88234, -0x3c3a454d,0xbc8bf634,0x3be53a2a,0xbd1e9976,0x3b056db0,0x3d8de724,0x3d29ec44,0x3d972e37,0x3d7d9ea4,0x3d702ecd,0x3d03428d,0x3d716c86,0x3d42ce1c,0x3b947871,0xbd592a85,0xbdb35a5b,0xbe11c84c,0xbd8e7db8,0xbbfa59b0,0x3d16a728,0x3e5bcdfb,0x3d68fbe7,0x3dc36a7d,0x3d8d6e9e,0x3d80aff2, -0x3dafc190,0x3d120a12,0x3cf3a2cb,0x3c631d4e,0x3d209502,0x3d151d69,0x3c8016f8,0x3c8d8c9f,0x3c91da47,0x3d25e36b,0x3c90164e,0x3bc9cf19,0xbcaa6cde,0xbc49a1ac,0xbd583467,0x3c3b19a3,0x3dcba8dc,0x3dc4581b,0x3df46c5e,0x3dfc2427,0x3df05863,0x3db2b30c,0x3d58cee8,0x3cd01320,0x3cece299, -0xbda1288c,0xbdd5c190,0xbdbb67d9,0xbdbe7c50,0xbd81180d,0xbd3d4c77,0x3c78fcfa,0x3c032d3e,0x3d811f9c,0x3c815e18,0x3d23874f,0x3cca233c,0x3ceeb4f3,0x3c8b8f8a,0x3d5a75b2,0x3cf3a13e,0x3cefcf66,0x3b57d23d,0xbb3f89b5,0x3b9f5442,0x3d63e253,0x3c78565f,0x3cb41936,0x3c6cb22e,0x3d0084ee, -0x3cde129d,0x3ccff543,0x3c9ff579,0xbc564a80,0xbd0cd0ae,0x38c38fd6,0x3cf073b8,0x3d31cf82,0x3d535805,0x3d653ec5,0x3dad98c8,0x3dbb9aa6,0x3e0827ad,0x3e60fa8e,0x3e1b25af,0x3d95596d,0x3ca574a8,0xbce9c1f3,0xbd4ca188,0xbd0cc4c1,0x3d1409ad,0x3d1618be,0x3c53bd8c,0x3cb226d4,0x3cba73ec, -0x3d3ce307,0x3c51c304,0x3ab18e81,0x3ad92bf8,0x3b5ad219,0x3c3d2695,0x3d4f134d,0x3cd4380e,0x3c6de9be,0x3ca6bc96,0x3c8b6491,0x3bd20d20,0x3c93874e,0x3d0896c6,0x3d0a863a,0x3cd295b8,0x3c7ef0e2,0xbcae00ee,0xbdb44fd2,0xbdacfeac,0xbdd77926,0xbe06c01e,0xbdc13269,0xbd3851a1,0x3c846f14, -0x3cb4a72c,0x3d851188,0x3dd382af,0xbc231497,0x3d9a022b,0xbd482683,0xbdccd3e4,0xbcdc47fd,0xbc1b0d0c,0xbb941808,0x3b9f0e14,0x3bbed29b,0x38592157,0x3c8df07b,0x3ca138fd,0x3cc98953,0x3cb36f8a,0x3c9d0958,0x3c5bf6ee,0x3c93f2f8,0x3c98a228,0x3ca3f315,0x3bfc05bd,0x3ba7925d,0xbbe077cd, -0xbce658f7,0xbcd8812a,0xbd06ff48,0xbd00a385,0xbccd8b45,0xbd5a878a,0xbd8d9831,0xbd70a6de,0xbd077f2d,0x3bdb0089,0x3d57a9bb,0x3daa2ac0,0x3d85f100,0x3c82587e,0x3d2094a2,0xbc1528fe,0xbd43cc80,0xbd845b80,0xbc5d4161,0xbc0c7766,0x3bfd1f66,0x3ca935e0,0x3c47a7ee,0x3ccaf4f1,0x3cbff2ef, -0x3cb209d3,0x3c82c52c,0x3c81830c,0x3c59c287,0x3c88adb7,0x3c156f87,0x39958528,0x3a322868,0x3b03f857,0xbc23605e,0x3b981824,0x3c2f419b,0x3cacf9a3,0x3cd8b569,0x3cdc473d,0x3cc1c131,0x3c18ffc5,0x3b26dea6,0xbc2e05ec,0x3cb5905a,0x3d4ec4df,0x3dad6ab7,0x3d0970df,0x3b1715bd,0x3b84a587, -0xbcec04c1,0x3cd38116,0xbc16eb15,0xbd231166,0xbc8bc349,0xbcece642,0xbc9c0e19,0xbc2cb9f0,0xbb046267,0xbbbd2fff,0x3c34ce41,0x3b2bc783,0x3caeb714,0x3bd92437,0x3c9aa3bd,0x3ba6d4e1,0x3c3a470f,0x3bf85b0f,0x3bc50020,0xbaf7c54b,0x3c55def7,0x3cd1f966,0x3c9509b6,0x3ca89f79,0x3c53d940, -0x3c22bd9d,0x3bc2e591,0x3c9ca3bf,0x3d0d1c93,0x3d49cd74,0x3d3e5935,0x3d1e35e5,0x3d27cb57,0x3d07ea98,0x3cd6d04b,0x3cc57e35,0x3c70e8c6,0x3c5fc7d8,0x3be40d97,0xbc937d11,0x3c2a99c8,0xbb5f34cc,0x3a7369e2,0x3c48af65,0x3c11f960,0x3cb7c828,0x3c80c58e,0x3b7b5ed0,0x3c8f3f53,0x3ccad536, -0x3cc0cdd3,0x3c97ba51,0x3cbc35d4,0x3cbcfc7a,0x3cd3eb20,0x3c299102,0x3ce22336,0x3cce9113,0x3cd718ee,0x3ce82851,0x3ce8eed1,0x3cedd5bf,0x3ce17e00,0x3cf8f00c,0x3cf85e4a,0x3d047b6d,0x3d0e7099,0x3d29c8ed,0x3d3b2ae6,0x3d2715e4,0x3d0dc75f,0x3cdd9bef,0x3c968991,0x3c8919c3,0x3ca23bb2, -0xbc79c8e8,0xbd01a933,0xbca02802,0xbbb766e1,0xbcf67905,0xbcf5484b,0xbcfe3cf1,0xbcf4e08f,0xbcbb522f,0xbce505fb,0xbcec43dd,0xbcd3b3fe,0xbcc53be2,0xb9cda76d,0xbcad8f88,0xbca4afb6,0xbb185a79,0x3cd868a6,0x3ca8097b,0x3cb56320,0x3cb2fbaa,0x3cbb1346,0x3cc4ff3a,0x3ccee4b4,0x3cd2f1ed, -0x3cd7f3d6,0x3cda9ddf,0x3ce234fe,0x3cdd3c27,0x3ce5709b,0x3cc5b521,0x3cb680ad,0x3cae7498,0x3ca0bfb6,0x3c86f146,0xbc019588,0xbb767567,0xbc44dfc5,0x3d3b4413,0x3d6f2a04,0x3cbb3e93,0x3d040c26,0x3d685491,0x3d3267ac,0x3d40fc77,0x3d419ae9,0x3d137e7c,0x3d2bf356,0x3d2a7842,0x3d1d5b96, -0x3d7fc5de,0x3d1245da,0x3d035906,0x3d765263,0x3d349640,0xbca1dacb,0xbbdf80ac,0xbc0113fd,0xbbe555d7,0xbbf65707,0xbc05591b,0xbc1b82ea,0xbc266751,0xbc3b9a67,0xbc495792,0xbc7e706d,0xbc89b7ff,0xbc918803,0xbc7870c1,0xbc3f2a96,0xbbab20e9,0xbb5ed69e,0x3c9d8e92,0x3cba71be,0x3c801abe, -0xba860409,0x3c98e518,0x3cab7455,0x3c24597d,0x3c2d5cc6,0x3b526a15,0x3c79cf20,0x3d101689,0x3ca45737,0x3c496525,0x3cc351d6,0x3cba1b92,0x3c8431ff,0x3cbee98c,0x3befc98f,0x3d30645b,0x3b1e4b6c,0xbc73e7cd,0xbbf6f091,0xbc2be5b0,0xbc7057f5,0xbc9a8f4d,0xbca8dcb5,0xbcabe2f8,0xbcadce7c, -0xbc9df055,0xbcd8076a,0xbcd7a8e2,0xbcb05e38,0xbc3496de,0x3b368d1f,0x3cb61524,0x3ceed159,0x3d2df0bc,0x3cfbca65,0x3cb7e3d3,0x3cc1ce47,0x3c2ea428,0x3bd5e9f7,0x3c432ba9,0x3c1b88b0,0x3cd4a833,0x3bb5e336,0x3d0dc698,0xbab878bf,0x3cc93b69,0x3cc95345,0x3ceb9417,0x3c78143e,0x3c79f657, -0x3c187306,0x3ce4853b,0x3c1ac7ce,0xbca83f80,0xbb9b9d6f,0xbb85a441,0xbb7100c5,0xbbd8c926,0xbc2d9cbf,0xbc3c8c28,0xbc8ef1a5,0xbcc84434,0xbd3b80de,0xbd61e92c,0xbd66ab45,0xbd21934d,0xbc8755da,0x3cfbb71a,0x3d2d4661,0x3e02a40e,0x3d8ffe3d,0xbb27eb34,0xbc340c11,0x3b889702,0xbc09b7ac, -0xbb6ed592,0xbc549940,0x3b32c385,0x3c93e641,0x3b9e52d5,0x3c472387,0x3c528f94,0x3c900f81,0x3b8579db,0xbb9bd2e3,0x3bbb571e,0xbc8f5a7f,0x3c109827,0x379ee9bb,0xbcdef419,0xbc88861d,0xbc94081e,0xbd0134e1,0xbd2c9085,0xbd35dc18,0xbd2cf983,0xbd341b59,0xbd3f5900,0xbd92c114,0xbd8d1dfb, -0xbd4f676b,0xbbdac06e,0x3d28972b,0x3dee2223,0x3e091258,0xbd8aa93d,0x3def1972,0x3e7de66b,0x3e21b8c7,0x3dcd2f82,0x3d8a9da3,0x3d4f3b95,0x3d80120d,0x3d36b3bb,0x3cdf8ee8,0x3c9d2d65,0x3c0c0725,0x3bb452e2,0x3ccf9c79,0x3c4b145f,0x3bb10a85,0x3bcf4773,0xbb2d7bc6,0x3cf03b10,0x3cbe7031, -0xbb706ca1,0x3d297f80,0x3d95e6b6,0x3ded3fd5,0x3e154984,0x3e2f6212,0x3e179d15,0x3e06500a,0x3df20cf6,0x3d834bad,0xbb58f48d,0xbd9dac30,0xbe02ea15,0xbe0d57c0,0xbdf7ee76,0xbd273743,0xbcf1f879,0x3c279b94,0x3d8bf580,0x3d1da7fd,0x3d60b57f,0x3d900181,0x3d2c39da,0x3d086e94,0x3cf81941, -0x3d07f46d,0x3c2bb8c2,0x3cadccda,0x3ccb521c,0x3d050ac6,0x3c6673bb,0x3c94f3bf,0x3d0e3343,0x3d1cd58a,0x3d80c6a7,0x3cd1c781,0xbcabbd90,0xbd23c532,0xbddf171f,0xbd9ef7e8,0xbd878dbb,0xbd917c54,0xbd41806a,0xbd12c49e,0xbcdb6e64,0x3d894ee7,0x3e11d9e4,0x3e56eac7,0x3e6d4ea3,0x3e3889f6, -0xbb42b5c4,0x3cb5b5b3,0xbcc56ec6,0x3bbc2b84,0x3d8a84d4,0x3d0ca1f4,0x3d618f90,0x3c329f39,0x3d29b04e,0x3d8d7dd2,0x3d0e4702,0x3c809a5a,0x3bed38e5,0xbc69bc08,0xbb0c8e68,0x3d946670,0x3cb0f939,0x3be70c9d,0x3ccb4e16,0x3ae5ee5b,0x3c415426,0xbb47da5b,0xbcb4625e,0xbb181c2e,0xbc369fdc, -0xbd5ff0f2,0xbdb84a75,0xbde2a347,0xbdc42172,0xbdb5d260,0xbdb3c87a,0xbd8fc3b9,0xbd19b4b1,0x3d1cd0e8,0x3d5869e3,0x3daab49c,0x3da63f94,0x3d568a91,0x3e0b9eb8,0x3cf97985,0x3adc1003,0x3b8cbd10,0x3c589890,0x3c8b459e,0x3c87c6d6,0x3d0834b1,0x3c19c623,0x3aa4d5b4,0x3cc07eba,0x3c502299, -0x3c935e21,0x3d57c24e,0x3cb08698,0x3ca42a38,0x3c08828d,0x3c7ecd98,0x3d14dae7,0x3bed4fe5,0xbcaa6bb0,0xbc6b46ba,0xba919b0b,0x3cb85244,0x3d455785,0x3d9707a7,0x3d9055b8,0x3d8838d6,0x3d73ce40,0x3da6d10b,0x3d84bb28,0x3b072f40,0x3d342c72,0x3d51c384,0x3d17f5c7,0x3e200a14,0x3dcabb33, -0x3ddf1bab,0x3d918fce,0x3d1b2c4e,0x3cfe50be,0x3ccf9998,0x3ca5ffe7,0x3d0feaac,0x3ce45c8a,0x3c806b82,0x3ca3a321,0x3c1e8bde,0x3c10459e,0x3c530f32,0x3c3fc10c,0x3c4fdfa3,0x3bb676a8,0x3c6d5307,0x3cd5cff4,0x3c30958e,0x3c584c2e,0x3c702d22,0x3c33a215,0x3d3370cb,0x3d6b75fc,0x3d9a32d3, -0x3d6e64af,0x3d732b10,0x3d68e34f,0x3d2017bb,0x3cb89a68,0xbbebf0e1,0x3bf77490,0x3cca7e53,0x3cb52fff,0x3dbd8611,0x3cc9c5e6,0x3db5da0e,0x3d4eaee2,0x3d5478a5,0x3d252190,0x3d0bb8b8,0x3cbb83c9,0x3cfc2f6d,0x3cc2ca4b,0x3c9fc746,0x3bf8170d,0x3caabc2c,0x3ca3ff55,0x3c86e95a,0x3c5f6299, -0x3c99f4c4,0x3cc5d525,0x3c84fa29,0x3b9f46fa,0x3c29337b,0xbc5c07fe,0xbc436867,0x3b9b3209,0x3d45eeb8,0x3d7c2d40,0x3d799ffd,0x3d0ee0cc,0x3cae7e89,0x3ce9defe,0x3ba22c6e,0xbca400d3,0xbd79de1b,0xbd06e8cf,0xbc8eae4f,0xbc9e64ca,0x3b68a11c,0xbaa45d06,0x3b28d194,0x3ce1e7be,0x3cc098c0, -0x3cdd7d4c,0x3cb20f58,0x3c80d731,0x3c2378b0,0x3c864782,0x3c096966,0x3ccf4f68,0x3bfb4c44,0x3cb4c016,0x3c945bb1,0x3cc580f2,0x3c9e4e4a,0x3cb804dc,0x3c95332b,0x3cd12291,0x3b5b3e3f,0xbbe53e69,0x3b822978,0xbb5f8df0,0x3b7e47d4,0x3c2b9785,0x3cb62197,0x3cbbe657,0x3cb249c0,0x3ca0027e, -0x3c3f0d79,0x3c008340,0xbb34ad8a,0x3c24db3b,0x3c8a9861,0x3cc41de2,0x3c93bfe7,0x3c3cc3ed,0x3cbb7cc5,0x3ccf92fb,0x3ca89b47,0x3cf92228,0x3cf46e14,0x3d00c498,0x3d054b48,0x3ceaf0e1,0x3d04c428,0x3d2d3fbe,0x3d0a6cc8,0x3cd4647b,0x3cee2f92,0x3cf91db7,0x3c97af11,0x3cae6d1a,0x3c1bd230, -0x3cdb950e,0xbc7017b3,0xbc7e50f8,0xbc417714,0xbc2f2f97,0xbc061f8f,0xbc0cdfbb,0xbc091669,0xbc46dbdf,0xbc683703,0xbc812a88,0xbc8b2a6b,0xbc942007,0xbc9d8f71,0xbc6a2961,0xbc0f8f91,0xbb084a48,0x3bb19e8c,0x3bf5dd5d,0x3bf3c7e5,0x3d10af2c,0x3d21c728,0x3c620387,0x3d06166d,0x3d28a754, -0x3cc92695,0x3cd33ca8,0x3ce0040b,0x3cb80d77,0x3ce9d98a,0x3d004889,0x3cf50561,0x3d2cd503,0x3ce47152,0x3ce042a7,0x3d1a8eae,0x3ce365a3,0xbc0f6213,0x3a9006b3,0xba4c9602,0xba40688a,0xba865ef2,0xba560cef,0xb905e23a,0xba4f7c32,0xba7a80c9,0xba897ae4,0xba682c6a,0xba0ecdfc,0xba75df3b, -0x3af4bc0a,0x3b56c0fc,0x3b80ad1f,0x3bd17a64,0x3c2856f8,0xbc8f8449,0xbcb5cb0f,0xbc914640,0xbd5921d0,0xbd3b10d8,0x3bb83cce,0xbd407428,0xbd4213f7,0xbc43569f,0xbc371813,0xbc0fcc94,0xb9db2f2d,0xbb8bc720,0xbb55bbf7,0x3b6c7a2f,0xbd408492,0xbd4290d7,0x3bad6a6c,0xbd3aaf43,0xbd4f5f79, -0xbbe6e14a,0xbc53e219,0xbc63b06c,0xbc55efc4,0xbc724bc4,0xbc82ed92,0xbca29ae2,0xbc8ce566,0xbc8703ca,0xbc6abc60,0xbc812f0c,0xbc8abc6a,0xbca2fc03,0xbcb6be73,0xbcc9c19f,0xbcd7ff65,0xbcd4e5e8,0xbd282e6a,0xbd02bf37,0xbbf12b60,0xbc9047ac,0xbc91c760,0xbc856db7,0xbc81909f,0xbc8db546, -0xbc7acb29,0xbcdf4366,0xbd0887af,0xbcec568f,0xbc8b7b68,0xbc919981,0xbc7b3e40,0xbc5df2ac,0xbcf4825c,0xbc83d42b,0xbcd2aa35,0xbca6dada,0xbbff5bb9,0xbc85af4b,0xbc47c2f2,0xbc8d0fe5,0xbcaa3365,0xbcf1ca83,0xbcb51663,0xbc9349fd,0xbc6ed0dc,0xbca7a924,0xbcfdf16d,0xbd3a10c2,0xbd690a93, -0xbd826313,0xbd78db53,0xbd69720d,0xbd8cda4f,0xbd04944c,0xbc60f87f,0xbc3a3a42,0x3b7981b9,0xbbaf408a,0xbbbf35b7,0xbbe8e0ab,0xbc3460bb,0x3ac29e9a,0xbc8d0c72,0x3af095c2,0xbba8693f,0x3bf5b596,0xbbcccdca,0xbbcfd0d5,0xbc0bfd48,0xbc121403,0xbcba4012,0xbc34afd7,0x3b72d935,0xbbd9ab2e, -0xbb9a2ca6,0xbc706415,0xbcaccf3e,0xbd29132e,0xbccf19fa,0xbc9836c8,0xbc372468,0xbc85ad8e,0xbcf3d0b2,0xbd5dd0e6,0xbd967ea8,0xbdb2dec9,0xbdae6583,0xbd9e6b9b,0xbe03f3ee,0xbc488a5d,0x3d3f5f40,0x3cbe20cb,0x3d0b00df,0x3cbf0d0a,0x3c9a8f9a,0x3c2f23d7,0x3c07c73a,0x3c0f6c55,0x3c58e7b3, -0x3c4c52eb,0x3c7f641b,0x3d16ffa6,0x3c6bfcf0,0x3c8026b9,0xbb3992f7,0x3c491905,0xbc593459,0xba191e6e,0x3be4cf4c,0xbc1ec8c7,0xbabefbce,0xbc636a9b,0xbcd8e70e,0xbd645642,0xbce9a7d6,0xbc1dfc05,0x39f46741,0xbcad5547,0xbd8e358a,0xbe020eb8,0xbe279ea9,0xbe3ae1c7,0xbe2ca6ee,0xbe11fcc2, -0xbe0d313d,0xbdf19a98,0xbd970999,0xbcacb34e,0xbb0770cd,0xbbaf5759,0xbc8e9b98,0x3b73bf40,0x3cff2c1c,0x3d01ae9a,0x3cdebd5b,0x3c2c202d,0x3bcaccc3,0x3c880842,0x3c1c9221,0x3c304d9a,0xbc4b17f9,0x3c73574c,0xbbddc3fd,0x3b5b3b56,0x3d095538,0x3c509092,0x3c3f653a,0xbd664f32,0xbd8672e5, -0xbcef95ea,0xbbfa89cc,0x3bfd61db,0x3c9bcfa1,0x3cad71e4,0x3d2432c3,0x3dcc8e26,0x3d3406b4,0x3c7b78c2,0x3c84a464,0xbdd69ef9,0x3cef91f4,0xbc321b06,0xbc2f999d,0x3bd9ca9c,0xbc9dec22,0x3ca115b4,0x3d0eda76,0x3ce3e87d,0x3cf4c403,0x3cec71ac,0x3b469045,0x3c82f234,0x3ca04699,0x3d112225, -0x3c63f111,0x3c478981,0x3b914c1c,0x3c662b90,0x3ab662c6,0xbc8b1946,0xbd004abd,0xbd810452,0xbd907695,0xbdbc9f20,0xbdec7d5f,0xbe1f4711,0xbe2af07e,0xbe28c4ad,0xbe1569d0,0xbd99d235,0xbd40bf42,0xbcd4c4c8,0xbc90a783,0x3badcd29,0x3cdd36b7,0x3cf01e92,0xbcc8f306,0xbd4cf486,0xbd17ad57, -0xbcdf35b2,0xbc5785c1,0xbcb6427b,0x3b39aa7f,0x3d532c1c,0x3c81526f,0x3ba98051,0x3a025eb3,0xbc22d82f,0x3bd60824,0x3d86d79d,0x3c687386,0xbaeeedef,0xbc26d1de,0xbc4322c8,0xbcd5328b,0xbcb6df71,0xbce8651a,0xbd586ce2,0xbd87a20a,0xbda3e686,0xbd9dabe5,0xbd81f383,0xbce6911c,0x3bf61e9d, -0x3ce34b1b,0x3d41c9b1,0x3c1688a1,0xbdc290d8,0xbe39e798,0xbe62b70e,0xbe66fb20,0xbdb8c745,0xbe226e70,0xbc61fcb9,0x3a734a96,0xbce01933,0x3bbf4a9d,0xbc23b12e,0x3bfe89f4,0x3caa4108,0x3b8f2888,0x3b4348da,0x3cac1983,0x3b84ee16,0x3c561430,0x3d166903,0x3b332ee7,0xbbc24834,0xbc12beb0, -0xbbb398b8,0xbc040176,0x3af1ab56,0x3ca360ee,0x3c41d8e7,0xbbc9d73a,0x3c00fcf7,0x3c50c388,0x3badbe31,0xbc910ab3,0xbd6c8682,0xbdf4c24c,0xbe266d03,0xbe2fb3a0,0xbdecee38,0xbe39c194,0xbe686aab,0xbe99f9d7,0xbe67b31b,0xbe437a1e,0xbdfde098,0x3b2b8daf,0xbb31e1da,0xbc3b3cae,0x3a2df63c, -0xbb1ceba9,0xbb717913,0xb9da97e1,0xbab8a6b0,0xbb21667c,0x3b5fbebf,0x3bce9f05,0x3b968f37,0x3be6f29d,0x3c115ba8,0x3c3f9d1f,0xbc1b259f,0xbca9092d,0xbc6a3b4b,0xbc5f12d0,0xbabc8a39,0x3c8519bf,0xb7c5f234,0xbcd2c921,0xbd7d957c,0xbd9b7d54,0xbdd423d7,0xbe0c0f01,0xbdcf008d,0xbdbb1f76, -0xbdb52d45,0xbe0ef7df,0xbe308a58,0xbe5a2c17,0xbe3e4882,0xbd954431,0xbd749486,0x3c181d9b,0xbc7dfe1e,0x3bac7d18,0xbb63f137,0x3b0a293d,0x3be073f5,0x3c376f2e,0x3c7a1d34,0x3c119584,0x3c0c073f,0x3bed7995,0x3c1db50e,0x3b54a1eb,0xbbd6d7cb,0xbc602c24,0xbb9ca2fd,0x3b2bd332,0x3baa4fe2, -0x3b61879b,0xbbd3b971,0xbcc3e1a5,0xbd2756ec,0xbd5c084f,0xbd686475,0xbcb22b8d,0x3beaea3a,0x3cc5ddad,0x3b17160a,0xbc809e98,0xbcca2442,0xbbe55ab4,0xbc925af4,0xbd8356a3,0xbd8d947a,0xbd081722,0xbd0b2562,0xbd10960b,0xbcf67da1,0xbc827996,0xbc64f209,0xbbda3246,0xbba82a87,0xbb44a930, -0xbb02ba92,0xbbd8587a,0x3aedd4b5,0x3c0ddf44,0x3c0df852,0x3c3838c1,0x3c1c075d,0x3c0cbf0c,0xbb2cf435,0xbc9b433c,0xbccb83a4,0xbc8f7ef4,0xbc850ff3,0xbc0f18c4,0x3a507891,0x3bfd4940,0x3c387fdf,0xbc8134fa,0xbd3329df,0xbd88d9ab,0xbd64b5b3,0xbd2a8c82,0xbd04860b,0xbd0e6ff1,0xbd0ed7ce, -0xbd08e4db,0xbd032815,0xbbad6d7c,0xbc163a9b,0x3c8bae17,0x3b1076f5,0x3b8bcd46,0x3bd4f008,0xb9eded7c,0x3bc0bd44,0xbb4d1b3c,0xbbefb9b0,0xbc2846a7,0xbc6cd898,0xbc205a29,0xbc56ada3,0xbc40a01c,0xbc218f77,0xbc9a10fd,0xbc2d4f97,0xbc6d6fd0,0xbb8e0362,0x3ac6d77d,0xbba50bcd,0xbbe65639, -0xbc2e583b,0xbc46788a,0xbc133684,0xbc09a292,0xbb7297aa,0xbbab275a,0xbc135a73,0xbc93c907,0xbcbffd4b,0xbcae7b6a,0xbc9c35f4,0xbc854f2f,0xbc59e339,0xbb8047e8,0xbb60f21e,0xbcbbf591,0xbc715da0,0x3ca6ed65,0xbcc3f006,0xbc818f56,0x3c873404,0x3c8c7965,0x3c889cea,0x3c98613a,0x3c8ca6f5, -0x3c7d9530,0x3c82afe0,0xbca8037f,0xbcb8aff3,0x3c415383,0xbca69606,0xbcc0990e,0x3b73c4a8,0xbadbb26c,0xbb192b34,0xbb17ebdf,0xbb51d128,0xbb9d5a31,0xbbfe1406,0xbc0f8020,0xbc2b0327,0xbc2f2e13,0xbc3c1107,0xbc2ed8c2,0xbc40f97b,0xbc17b88c,0xbc021c2a,0xbbd0b151,0xbbcea0fd,0xbad55195, -0x3d236a20,0x3d0607fc,0x3d0b0dda,0x3d28c866,0x3c8aafa5,0xbd31010d,0x3d5e2e21,0x3cd6c944,0xbcf712ad,0xbd0921c2,0xbd0fe6b0,0xbd1a45ca,0xbd20802e,0xbd217187,0xbd269876,0x3cd3c26f,0x3d5d145f,0xbd4bb7bc,0x3ca75300,0x3d414d3a,0x3d1b44a6,0x3d0c270e,0x3d18f1cf,0x3d10f044,0x3d1374b1, -0x3d1376c1,0x3d170a27,0x3d157fae,0x3d1a3ccf,0x3d1bbba4,0x3d2f4be1,0x3d39a73b,0x3d3caa56,0x3d534445,0x3d5136a6,0x3d2f44c6,0x3d23c3b7,0x3cae405f,0x3cb4c2f6,0xbbd48678,0x3d074f21,0x3cc54aa3,0x3c90aa0c,0x3cff76df,0x3cefd141,0x3d106468,0x3d26da66,0x3d13ca42,0x3d31573b,0x3d15381b, -0x3d27ee71,0x3cc89b29,0x3cca5325,0x3d137b0f,0x3cf39187,0x3bd59e70,0x3d34bd98,0x3d1d10ed,0x3d3d33ca,0x3d2bd536,0x3d3943f8,0x3d3e6127,0x3d490f86,0x3d458035,0x3d44b1e7,0x3d4402b6,0x3d76d2a6,0x3d92b8f1,0x3d99fb00,0x3db6ef2e,0x3da28b12,0x3d3bf4ac,0x3d111d19,0x3b54c526,0xbc329575, -0x3a9ed76f,0x3bc3b2f3,0x3c0bc38e,0x3c93aa6e,0x3c9af7f1,0x3cc399f6,0x3c869bdb,0x3c8e42e7,0x3cb47ddd,0x3cd5b68a,0x3ca00a65,0x3d0cad62,0x3ce3689e,0x3cf259eb,0x3c8259cd,0x3cc6e646,0x3d0c6785,0x3d017e11,0x3d163084,0x3d228ba5,0x3d08879f,0x3d1220e7,0x3d0dbaab,0x3d1b5bac,0x3d06dcba, -0x3d1edb28,0x3d380fbb,0x3d948dff,0x3dc4d00f,0x3dc893c9,0x3e05d7b8,0x3df28e5a,0x3d3c1199,0x3ce12042,0xbd837c47,0xbdadde8a,0xbd20eb15,0xbb65c577,0xbbb713f1,0x3c61ae20,0x3c4a04ae,0x3c2fd0d7,0x3c59c68a,0x3c519f96,0x3bc8bec2,0x3bd7ed7d,0x3c9d92eb,0x3ce4992c,0x3ca66b85,0x3c6de314, -0x3c583d11,0x3c840105,0x3cdd432f,0x3ce8adf8,0x3d20f907,0x3d79762d,0x3d48470e,0x3d6080aa,0x3d735119,0x3d89d6eb,0x3d839b77,0x3d7863c3,0x3d7bbeee,0x3de0b137,0x3e194bd5,0x3e2503ec,0x3e51e6c4,0x3e281813,0x3c8fefbe,0xbcf2824c,0x3e0ad80a,0x3d83695c,0xbcf55dc2,0xbcf52b83,0xbcc38484, -0xbc925425,0xbb272e03,0x3ab822cf,0x3c92ae5a,0x3ce7fbb7,0x3ce8e1bf,0x3c80d680,0x3c5ee3ae,0x3cda39be,0x3c9aa590,0x3c9d5abf,0x3c9e2d2d,0x3cdde53b,0x3d322b3a,0x3d7defba,0x3b9ebc26,0xbce30088,0xbd7bd523,0xbc26a328,0xbcb3b4d1,0xbdc8f2bd,0xbdb12372,0xbd9c7c65,0xbd5fa9be,0xbd0268df, -0xbb3a2756,0x3d04f99e,0x3c9f171b,0x3d2d1ddc,0x3db7c44a,0x3dd1ca0f,0x3e01cf77,0x3d470866,0x3d205ae1,0x3d71dcb8,0x3d71870e,0x3d3d0c51,0x3d297760,0x3cfd7be5,0x3d043506,0x3d08f52e,0x3c6f4c91,0x3c4361f5,0x3c7f72ac,0x3d15a6c9,0x3caf8123,0x3cafc1ce,0x3c897cf4,0x3c9c1691,0x3c4a8e7d, -0x3d1fe9e8,0x3d8a9bb7,0x3dc5ca9c,0x3e06a8c0,0x3dae3aec,0x3d898ff9,0x3dabd300,0x3d8cbaa2,0x3d7b2f08,0x3d621f9f,0x3ccb998b,0x3c8cb624,0x3d0c6ab2,0x3d47de74,0x3d684a96,0x3da67e67,0x3df85914,0x3dd1a92f,0x3d6ff701,0xbc98c2c8,0xbbab06e9,0xbcf766bf,0xb93ff3c5,0xbb57ac69,0x3d564194, -0x3c8a8631,0x3ba91a00,0x3b6a9f2a,0x395eadff,0x3c8278ec,0x3d6d3534,0x3cc74916,0x3cbd6166,0x3c992888,0x3c1c8a9f,0x3c2691c8,0x3af9cc18,0x3c635193,0x3b658011,0xbb74647a,0x3d9314da,0x3e031e6b,0x3e25c8a4,0x3e231f9a,0x3e03a2df,0x3da6e918,0x3d8956c9,0x3da57626,0x3e22d15d,0x3e1b5cf4, -0x3e05d8ef,0x3dd45a7b,0x3d834191,0x3df3a50e,0xbae47588,0xbaae7b11,0x3d30ab5d,0xbb946614,0x3ce951cf,0x3c545071,0x3d04f741,0x3c37c687,0x3c2502d3,0x3cb5a2c8,0x3b3b6d52,0x3c2a5990,0x3d24ff02,0x3cb8f98a,0x3c83d680,0x3c52a30c,0x3c84a39f,0x3c22b66f,0x3cfe7065,0x3d9e6bf8,0x3dbbecc9, -0x3d9b262d,0x3db290ce,0x3da6c563,0x3d88c218,0x3d9a4943,0x3d933482,0x3d8c8dd1,0x3d338b16,0x3d004228,0x3cb7a6a2,0x3d990d69,0x3e266d39,0x3e9eb25a,0x3e35aef7,0x3e474de9,0x3daea4cc,0xbd4e095a,0xbb6014f3,0x3c8456c4,0x3af1f816,0x3c6d52fc,0x3cdf5d08,0x3c4ac664,0x3c5f64ad,0x3c0cb022, -0x3c8526de,0x3ca64c98,0x3c9dfe48,0x3c775c77,0x3c3d431a,0x3c0726a7,0x3ca7a35c,0x3c25bfce,0x3cbf9e7c,0x3ccbf1af,0x3c9f9619,0x3c1f53c1,0x3c6ff949,0x3ce8a014,0x3d45c190,0x3d57bcc4,0x3da365d6,0x3e0add77,0x3dfea5a9,0x3e040398,0x3e03fae9,0x3dfc392f,0x3dfd273e,0x3e24524e,0x3e2cdac0, -0x3dadea87,0x3d70ac19,0xbc97ed0c,0x3c942acc,0x3c399eba,0x3c5d7463,0x3c67a717,0x3c3b63b7,0x3c80abed,0x3c562a37,0x3c574e59,0x3c33cefc,0x3c370e93,0x3c1ac84c,0x3cab0f5a,0x3cd684b3,0x3cc3631c,0x3c28cc01,0x3bd05e95,0x3c96a214,0x3cfcaf1e,0x3cf70fa0,0x3ceaef49,0x3cd87f60,0x3ce24f16, -0x3d14b96e,0x3d09235e,0x3c6fdb11,0xbc9fee81,0xbc5f7a07,0x3c4fe650,0x3d878a8d,0x3d324ce4,0x3d221b2c,0x3d210eaa,0x3d765c22,0x3cdb7771,0x3c8416b7,0x3c5ae937,0x3cf586d8,0x3cbe2a51,0x3cc7c8b9,0x3cc19811,0x3ccf96b1,0x3c6d0b9c,0x3c8a1bc9,0x3c1b4e4f,0x3c8cb8f1,0x3c0dcd91,0x3c8718de, -0x3bedf1b2,0x3becfe21,0x3a378b41,0x3b8c3ea8,0x3b8e5658,0x3c3f5cfc,0x3bd0476f,0xbb6e52cd,0xbc03cd38,0xbb97d066,0xbb65369e,0xbbb6590f,0x3c0f407a,0x3cdead10,0x3d38c5fb,0x3d70656c,0x3d78d79e,0x3d882154,0x3d44f971,0x3d15e5ae,0x3cc5b671,0x3ca7b4ed,0x3cfba3b3,0x3d03e384,0xbc417e45, -0x3c9541e7,0x3c0d34ce,0x3bb4b6c4,0x3c66fb19,0x3c4c9e8a,0x3cad5749,0x3cdd013f,0x3cc24a75,0x3d081229,0x3cf89b86,0x3d099902,0x3cb8e47c,0x3cad28e4,0x3cfaa790,0x3cc3da50,0x3b5cdd4a,0x3cbeef64,0x3c880ba9,0x3ca18b1c,0x3c8f0c37,0x3c85d06b,0x3c7dd4e1,0x3c5a2211,0x3ca129b1,0x3cbb730f, -0x3ce30312,0x3d0b0c03,0x3d351af1,0x3d67db20,0x3d564f39,0x3d481993,0x3d349beb,0x3d227b70,0x3d12bad6,0x3d20e325,0x3d179b63,0x3c7288cb,0xbcd446ae,0x3d2f5d2e,0x3c7cc758,0xbcac4aba,0xbcaf4b09,0xbcb97e8f,0xbcbaa4e9,0xbcccce41,0xbcd27530,0xbcd9bfb9,0x3cab287f,0x3d33013a,0xbcebe3d7, -0x3c8c2fba,0x3d11789a,0x3d075a50,0x3cec3bc9,0x3cf3af86,0x3cebd5ad,0x3ce6f000,0x3ce0479c,0x3cd10dff,0x3cfc88dd,0x3d109372,0x3d220a76,0x3d31fed0,0x3d3ba8ef,0x3d4d62fa,0x3d3b56fe,0x3d33c4f2,0x3d2a9081,0x3d24519b,0x3d3ba4d2,0xbd5ad34c,0xbd3d9b17,0xbd804078,0xbcd84320,0x3c9206ce, -0x3da0cfdd,0xbd351fef,0x3c4c3a82,0x3d96968a,0x3d9b5a19,0x3d9b8649,0x3d9388f8,0x3da29735,0x3da5f900,0x3da86b1c,0x3c786711,0xbd158f2a,0x3db05614,0x3c928184,0xbccab268,0xbd80b502,0xbd3ce21d,0xbd559077,0xbd580006,0xbd575d5e,0xbd5880b7,0xbd591a7d,0xbd5d13aa,0xbd62594f,0xbd690dba, -0xbd742c59,0xbd7b8289,0xbd7b5249,0xbd877d34,0xbd8457fa,0xbd603941,0xbd5bb6f0,0xbd43d0a5,0xbd75be20,0x3c9a761f,0xbd4f73c9,0xbc87315d,0xbbfb347a,0xbcd42104,0xbc865966,0xbd133125,0xbd0ca82b,0xbc869772,0xbd0272d2,0xbcd9cd57,0xbcbfa6b5,0xbab59e3b,0xbc1f29c0,0xbcd8dfda,0xbcd6d0b0, -0x3cf1e9d3,0xbd63cd3b,0xbd5db3b9,0xbd6b395e,0xbd80c818,0xbd7f5aec,0xbd80680f,0xbd7d01ac,0xbd805b4d,0xbd886a6c,0xbd969e28,0xbda7dc3c,0xbdb52b4c,0xbdac1837,0xbdbfe1d1,0xbda6a28d,0xbd5c44b9,0xbd4f3148,0xbd5f77f8,0xbd68e8da,0xbd31c584,0xbd277f37,0xbc285cfa,0xbc08b35d,0x39334ef8, -0xba8f82ba,0x3bfe4787,0xbbf549b4,0x3bb3e254,0xbc8524ce,0x3c625ef0,0xbc0502e7,0x3c3c0903,0xbbbdba74,0xbc675a64,0xbc5d328f,0xbc6ded0d,0xbd1ff9c7,0xbd7396f3,0xbd749c42,0xbd92ea2b,0xbd92350c,0xbd96159e,0xbd99a9ec,0xbda23027,0xbdb7c77b,0xbdcff690,0xbdf4caca,0xbe04c53e,0xbdf63e01, -0xbe134a8e,0xbe00f2ba,0xbd9d8500,0xbd887eb9,0xbd303ad0,0xbd85eb00,0xbd999a72,0xbd8bf350,0xbd0706f4,0xbca520b6,0xbbbc6c83,0x3b5390bd,0x3b9518b1,0x3c33848e,0x3b7d33e7,0x3c55fa09,0x3c466ff7,0x3c886617,0x3c5c4aef,0xb9bd6a62,0xbb8e2921,0xbc8dea7d,0xbadeb433,0xbd181c5e,0xbd75204a, -0xbd876b93,0xbdb06ef3,0xbdb37bd8,0xbdc08699,0xbdbc3b4b,0xbdc13a0e,0xbdd5294c,0xbe02a5f6,0xbe20cb98,0xbe339178,0xbe1d5ac5,0xbe30a8b7,0xbdfbda3e,0xbd3deab2,0xbd32bed7,0xbd89fd74,0xbd0f17e2,0xbb051f1c,0xbcf2b9a6,0xbb7cdcaa,0xbb81a45b,0xbb383211,0x3bf4b8e5,0x3c0889b2,0x3c15d0ca, -0x3c7515d5,0x3c349dc3,0x3c4a7496,0x3cbb24cc,0x3bbffc69,0xbb4514db,0x3b9ee023,0xbcd76541,0xbc5fa1fe,0xbd2a9c4a,0xbd8e7f5a,0xbd4c5756,0xbd9bf2e2,0xbd67f53e,0xbd4b837d,0xbd350ca3,0xbdc1006d,0xbe09564a,0xbe2886c0,0xbe132d43,0xbe0880f7,0xbdf96615,0xbe42b6e4,0xbe423185,0xbe1ccd09, -0xbd9d614d,0x3dab179a,0x3d9af5f0,0x3d767fed,0x3d17fbc9,0x3d0c31c5,0x3cb7fe4a,0x3c9b4821,0x3cdf2649,0x3c839a15,0x3c981106,0x3c122f22,0x3ba41d0e,0x3c1fa3c6,0x3cb84d90,0x3b11b482,0xbb88e7e6,0xbc0bad0e,0xbc87b2d1,0x3c3baf43,0xbd0347bc,0xbdc1a9c9,0xbdaebd60,0xbdc69038,0xbd623b8e, -0xbd179053,0xbcd34dd0,0xbb014398,0x3c97db5a,0x3cce2b01,0x3bcb1937,0xbc3b0a32,0x3c5493e1,0xbd86f6ca,0xbd6ee82c,0x3c8a89b3,0x3d61e14d,0xbc29be35,0x3a225b4c,0x3d86cef4,0x3cce6f2b,0x3cc1d78c,0x3cc346e1,0x3cfb54b9,0x3d3b7165,0x3c557a6a,0xbb374ef5,0x3bb328ad,0xbaa18e77,0x3c52d152, -0x3d31877a,0x3c14c33f,0xbbdedc8e,0x3c3883b7,0xbb53a391,0xbc11c94e,0xbc9f7713,0xbc8d1cfa,0xbc33b7c5,0xbcf675bb,0xbd770e87,0xbdd68d27,0xbe1d630d,0xbe2a658f,0xbe1e468e,0xbdfd57c2,0xbdb87a95,0xbdd7b974,0xbe1123a2,0xbe35a691,0xbe019022,0xbdaa3fbd,0x388f7333,0xbce7d2d6,0x3cf9b5d5, -0x3cc64427,0xbc1efa78,0x3ca1352e,0x3bfa10b4,0x3c40a8f0,0x3c6790f3,0x3c05bffe,0x3b80a11d,0x3c684fa5,0xbbaabaef,0x3b3f2439,0x3ce5109b,0x3caefcb3,0x3cf0abde,0x3cc15264,0x3c5c58e5,0x3cfbddba,0x3ba2d834,0xbd0759a0,0xbd2d04d8,0xbd341c56,0xbd4bf010,0xbd21a3cc,0xbc1f336b,0xbbcaa510, -0x3be4a1cd,0x3c9fc991,0x3cf18b61,0x3c386386,0xbbb358ee,0xbdb8e033,0xbe143e40,0xbe384da6,0xbd7cc3fc,0xbe11bb2d,0xbc757202,0x3da026b5,0x3cb095a3,0x3c0edf3a,0x3caeeafb,0x3c84d7bf,0x3c953404,0x3c8946c6,0x3b178fc1,0x3b1b0f4c,0x3c0808f6,0x3c511f64,0x3c2226be,0x3c2fa194,0x3bf9b70c, -0xbb343b57,0xbbd63e7a,0x3c720b79,0xbbe9e991,0x3b4136f4,0x3c895b31,0xbc789939,0xbb3e19af,0xbc5d5c5d,0xbd37905e,0xbd0458ed,0xbd05e9cc,0xbd7ab1f4,0xbd87c7a6,0xbda99310,0xbdbc04fb,0xbdff2ee7,0xbdf9a9b2,0xbdd13162,0xbe023180,0xbd081239,0xbc07ca69,0x3d6b8660,0x3cbf0449,0x3cbfdc0d, -0x3c37834a,0x3aa7871e,0x3c5bd9c5,0xbbef240a,0xbb993d7b,0xba80b35b,0x3b4b1418,0xb8c8795b,0x3ac68684,0x3b79877e,0x3b9829fc,0x3a932105,0x3c02bf10,0x3c5c7b89,0x3bf23ccd,0xbc8194e3,0xbcaff78d,0xbce83e56,0xbd219bfd,0xbd03a7a2,0xbc496c2b,0xbc193370,0xbba33f43,0x3b0aa881,0xbc23aac6, -0xbd04d208,0xbd8405e8,0xbd91e7d6,0xbd8b4d9b,0xbd77ad48,0xbcd7e0a2,0xbcef740c,0xbae4c23d,0x3c2da3f4,0x3b8c0428,0x3cc77be0,0x3ca83d5d,0x3cb21f77,0x3c932bae,0x3cca0607,0x3bef323c,0x3c728585,0xbbc645df,0x3c8493fa,0x3b56d7e6,0x3c212f35,0xbaa67393,0x3b3deaab,0xb9d1fc9a,0xbb115a4b, -0xbc5624b5,0xbc881306,0xbc19c2be,0xbc152185,0xbc3c8d93,0xbc608fc4,0xbc55c7a1,0xbc90460b,0xbca37e6d,0xbcba6cd3,0xbd01c0dd,0xbd118e1c,0xbd216dfd,0xbd2af7a0,0xbd36a850,0xbd5b85f1,0xbd15ea34,0xbcc94593,0xbce9749a,0x3cf9762e,0xbca4f442,0xbb50cacf,0xbb7b99d2,0xbca336b5,0xbc8e99d7, -0xbcee93c7,0xbcd37425,0xbc249477,0xbcbf9e03,0xbcc85c79,0xbcad4a50,0xbbad8556,0xbbd061b8,0xbc7bb265,0xbc339730,0x3ca87829,0xbc3da255,0xbbeba198,0xbc08e7b8,0xbc00a707,0xbbe60fc3,0xbbf412fc,0xbc09834a,0xbc5881af,0xbc9535ff,0xbcb988f1,0xbccbd02d,0xbce75a53,0xbd03d5d5,0xbcf5ba8a, -0xbcdd96ad,0xbcc75fc2,0xbcc014bf,0xbca443bc,0xbd00b076,0x3a981c7d,0x3cf7d03b,0x3d83b8a0,0xbc8437b1,0x3cccd672,0x3d74e3e9,0x3d8256fd,0x3d85af7a,0x3d7f6f6e,0x3d8e73cc,0x3d954fe5,0x3d968cb0,0x3cce69fb,0xbc406c1d,0x3d91c8db,0x3ce17acc,0xba169bca,0xbccdf2f2,0xbc84a146,0xbc8fcfec, -0xbc868a22,0xbc821714,0xbc6fefbe,0xbc4902eb,0xbc701cdf,0xbc832506,0xbc911681,0xbca36a67,0xbcb3ef4f,0xbcca8078,0xbcbf4377,0xbcbe7e1f,0xbcbb2a08,0xbcbef771,0xbcbb7bb2,0x3ceb202d,0x3ca675d1,0x3d37ee8f,0xbc905a49,0xbd76fda0,0xbdb15db6,0x3beff6fc,0xbd464f9d,0xbda84cbe,0xbdafb57a, -0xbdae5e33,0xbd9d3f1d,0xbdad4006,0xbdadd27a,0xbda9ed4e,0xbd45f402,0x3a974fb8,0xbdb60199,0xbd5ac7d3,0xbc839578,0x3d3a5e6b,0x3cd55502,0x3cfeb72e,0x3d012573,0x3cf7d8ab,0x3cf37192,0x3cf3656c,0x3cee0f82,0x3ceb971b,0x3ce07254,0x3cf80bce,0x3cf90dfd,0x3cdc4f6f,0x3ce9aad3,0x3cd7bafc, -0x3ca38824,0x3cbfa36f,0x3ccecc6e,0x3cee51e1,0xbd922e37,0x3c8c298b,0xbc55e28f,0xbc245ad2,0x3c395dfa,0x3ba4dc06,0x3cadcebb,0x3c5eb611,0xbbb63cd7,0x3c44c3fe,0x3c672438,0x3c0c1915,0xbbcbf578,0x3a2506f9,0xbabcd453,0x3ba58182,0xbd65f821,0x3cfd0279,0x3d211ff9,0x3d1867eb,0x3d2da10d, -0x3d239c12,0x3d1eb4fc,0x3d1405e8,0x3cff3657,0x3cf79fd9,0x3cf02842,0x3d1b30a1,0x3d0c1b7f,0x3c91a112,0x3c9edddc,0x3c8eeb66,0x3c2cf813,0x3c99db3e,0x3ce3175a,0x3cb275db,0xbcd2e586,0xbba72509,0xbc9f05fa,0xbbd08c90,0xb9c37a40,0x3be65692,0xbc0a2d9a,0x3c5cf67d,0xbbe1e1f0,0x3cdb7fe9, -0xbb85eab5,0x3c7e0857,0x382d9de9,0x3c6547cf,0x3b22df5c,0x3960a99a,0xbc64cc90,0x3ca8ab80,0x3d559601,0x3d2f4da6,0x3d619492,0x3d398dd0,0x3d328fe6,0x3d36305e,0x3d20a321,0x3d211715,0x3d05d806,0x3d40cf0a,0x3d2c1379,0x3c685cd1,0x3caeec38,0x3c414625,0xba03c82c,0x3c0c4f4d,0x3d571d67, -0x3c98fb7a,0xbcff3b26,0x3b3e0150,0x3c2e9245,0x3bd4d80d,0x3c9b56c3,0x3c83fa79,0x3c66d7ad,0x3c51c797,0x3cc83ae5,0x3c34d938,0x3ca5ba05,0x3ceed06c,0x3cdd0f4c,0x3cf997dd,0xbc1508f8,0x3c7c2d98,0xbc8b4da5,0x3cbcb701,0x3d773bf6,0x3d62396f,0x3d990e34,0x3d85caa5,0x3d8215df,0x3d7600a8, -0x3d326d93,0x3d266cad,0x3d24ce3b,0x3d81f46e,0x3d2cf822,0xbc84af46,0xbc8215ae,0xbc846672,0xbc25e0a9,0x3c945d50,0x3db1d76a,0x3cdf68d4,0xbcb53fcf,0xbc66f4c4,0xbcf7bbfc,0xbcd46d62,0xbb3d93a6,0x3bf0886b,0x3c955269,0x3c9a293f,0x3c3b70cd,0x3c9a5b36,0x3cac3c8f,0x3c844da0,0x3c5ae54e, -0x3c94752e,0xbacfd753,0x3c79f5ed,0xbc91e2d2,0x3bde072f,0x3d83a3ef,0x3d180e7d,0x3d07ace1,0x3bcdd6d8,0xbc312f8b,0xbc9ae6cc,0xbb9fbed2,0x3aa17b85,0xbc02dd7c,0xbaed704c,0x3c164f42,0x3d189fb6,0x3ce3294a,0x3bceddbc,0xbba2e798,0x3cb981c3,0x3d5dbb8c,0x3da9c522,0x3db6dc43,0x3d9d7c11, -0x3d93a061,0x3d00d06d,0x3cc2b2f0,0x3d1c0534,0x3c99bd3b,0x3c54000a,0x3bc31bae,0x3bf0852e,0x3c52d8d1,0x3cc1efef,0x3c6b5c5e,0x3c0624d3,0xbc6cc5cb,0xbc8f91d3,0xbd43ff10,0xbc8715d0,0x3d279f60,0x3d42c7e7,0x3d8fd9e7,0x3d8f6231,0x3d5817b0,0x3bfbc69c,0xbcf777d0,0xbd7d8780,0xbda62c94, -0xbd5be350,0xbd843308,0xbda94cb0,0xbdcf9e24,0xbcd4a17d,0x3dd1bf00,0x3d5c81f6,0xbc83dda2,0xbceb42a4,0xbd278b67,0xbcd1ac4b,0xbc24ac28,0x3cda6ef9,0x3d1152e8,0x3d493422,0x3c657a8c,0x3b9f521c,0x3c534698,0x3bcded59,0x3c8ccc18,0x3ce64c59,0x3ccb3f8a,0x3ccbc050,0xbbc182ad,0x3ca15f89, -0x3c3fc622,0x3c286df9,0xbc3829c4,0xbd2e1c83,0xbd1da18f,0xbd000caa,0xbc521a7d,0x3bc2715d,0x3c327362,0x3cdf8924,0x3d3b1e2e,0x3ddd9c27,0x3e2abc6c,0x3e3e3880,0x3e2298cb,0x3dc2c75f,0x3d9417de,0x3c3ce799,0xbc310f95,0xbd070132,0xbc4c64eb,0x3c0712fa,0x3c1b5e97,0x3ca7cfd4,0x3c829411, -0x3c7f16ac,0x3c35a158,0x3bdfa8b5,0x3c5ae084,0x3bdf17c6,0x3c2019a5,0x3c8962ef,0x3ca07008,0x3ca95b25,0x3c4554a1,0x3bd019f6,0xbc21b7cf,0x3acd3617,0x3c8adf17,0x3cb372c2,0x3ce27c73,0x3ce63b22,0x3c83fc53,0xbb0b1d22,0x3c95762b,0x3d178584,0x3d30d5b3,0x3cf68ed8,0x3cc05477,0x3d0bf32d, -0x3d212e83,0x3d644f4d,0x3d922c05,0x3b69a223,0x3d41a2f1,0xbce2b038,0xbd8b1798,0xbcb3fddc,0xbc3232f9,0xbbeeae97,0x3bddfd02,0x3c7362b4,0x3ba93043,0x3c23a199,0x3bb5acbc,0x3c286e30,0x3c490309,0x3c69f078,0x3b8da99c,0xb94ac87c,0xbb230ae1,0xbbc05bf6,0xbc86dd8a,0xbc4815db,0xbb71a643, -0xbc350ab1,0xbbe6bbd1,0xbb495c55,0x3c0cce43,0x3ce31aa4,0x3d0e1647,0x3cf548c3,0x3d09055f,0x3cba0782,0x3ce6bebb,0x3d690c27,0x3d5646e4,0x3d3a0e78,0x3d3ba751,0x3d0364c8,0x3c21b755,0xbcb5d606,0xbd16223f,0xbc66dedf,0xbc6ea485,0xbb7961a4,0x3ba69cde,0x3b89b688,0x3c1aa965,0x3c20ad7e, -0x3c85c6be,0x3c0d5884,0x3c3a04c5,0x3ca17ce5,0x3c513c1f,0x3b2f6150,0x3a02798d,0xbb464d05,0xbb85a6d1,0xbc25d74d,0x3c934d28,0x3cedb20e,0x3d01513e,0x3d05cac8,0x3d041bc0,0x3cdd0da3,0x3cba221a,0x3cbde655,0x3cb1d79c,0x3d3b879e,0x3d769ed6,0x3da42dda,0x3d42c1a6,0x3cfe239f,0x3cea05dd, -0x3c0f7975,0x3d1c74f4,0x3cd2fdd0,0x3b2c5cd3,0x3c1b6452,0xbb43a9ab,0x3bc51188,0x3c0bc94a,0x3c8d28d9,0x3b8bd6a8,0x3c5bed50,0xbbea1e70,0x3c613c11,0xbbf46081,0xba075ca6,0xbb68c210,0x3bee790c,0x3bd34179,0x3bef7748,0x3a531a7c,0x3cabce1e,0x3cecd584,0x3c52b4bb,0x3c1efd55,0x3bcff829, -0x3bed1675,0x3bf2b0b9,0x3c1fa03d,0x3c34c142,0x3c2a3d74,0x3c8fd655,0x3cc25c79,0x3d1cefc0,0x3d0894e5,0x3cee928a,0x3cc3d7d4,0x3cd21b0a,0x3c74d0c0,0x3bce2174,0xbd28e8a1,0x3a67f2cd,0xbc93b871,0xbc96a892,0xbc098431,0xbc4341b8,0x39e1b62b,0xba871b6e,0xbc6a1db3,0xb7816156,0x3bfa9fe2, -0x3b84d266,0xbbf33069,0xbb3bdbb1,0x3ac040f7,0x3b92b542,0xbca91044,0x3c3649ff,0x3bf8ada5,0x3be1f705,0x3bf5d169,0x3bb70e33,0x3b52549c,0xba0ecb7d,0x3c32ee44,0x3cb427b4,0x3d081d93,0x3d2c1e71,0x3d48c1c6,0x3d63747e,0x3d3e8970,0x3d20f14d,0x3cfebac4,0x3cb0aa3d,0x3cb85734,0x3cf31f3a, -0xbc3f97d8,0xbd11d759,0xbd328636,0x3ad89011,0xbd03e93d,0xbd3c2de4,0xbd45cdc1,0xbd4a2ebb,0xbd3381fe,0xbd503fe6,0xbd5cdda7,0xbd55a08a,0xbcf89a44,0x3b25665a,0xbd413799,0xbcf0e1a2,0xbba75457,0x3d05a76b,0x3cc0a314,0x3ccc4407,0x3cc47d0d,0x3cc27417,0x3cc67aa9,0x3cbd4375,0x3cd6a218, -0x3cdd53ae,0x3ce5bd01,0x3cf23583,0x3d00f05f,0x3d12f1b5,0x3d028d7d,0x3cf5ae36,0x3ce9eb93,0x3cd8e1d4,0x3ce94a36,0xbcb39af1,0xbc72a0ef,0xbd058669,0x3cfe9c48,0x3d66abd0,0x3d40be60,0x3c6917e2,0x3d52e6b6,0x3d6451eb,0x3d680395,0x3d63fb47,0x3d3e16f9,0x3d5ada72,0x3d5a693a,0x3d49c158, -0x3d573856,0x3c9e3ba6,0x3d4ab66c,0x3d561b66,0x3cf1d0b7,0xbd0fc417,0xbca35e59,0xbcbd1d09,0xbcc0a247,0xbcc2119d,0xbcc1e9f1,0xbcb4166f,0xbcc1b2c8,0xbcca00b5,0xbce5298b,0xbcc9b2ff,0xbccf16a1,0xbcfb736f,0xbcc6bff2,0xbca591c2,0xbc7d6fa3,0xbc7f14f0,0xbc01dc0d,0xbb9e7a0f,0x3d4b6a40, -0xbb417b9b,0x3cd8eae5,0x3cbc3344,0x3bfb4dc0,0x3c248533,0xbc080f6b,0x3a6176c4,0x3cb3f517,0x3be70604,0x3af253b1,0x3befa091,0x3c91ecc8,0x3c2207ac,0x3c64402d,0xb9689a3f,0x3d36a084,0xbc683246,0xbcf9868f,0xbcd68f4f,0xbd035955,0xbd09b1cc,0xbd0bbe31,0xbced8fd5,0xbd093294,0xbd127e92, -0xbd2f1c6e,0xbd06ccc4,0xbcfc682e,0xbd267ad8,0xbcd43f23,0xbca6ae0d,0xbc2287b1,0xbb39ce33,0x3c2a9e59,0x3bcd70b1,0x3d086a58,0x3ca284d5,0x3cf56fde,0x3cb00655,0x3ca0770f,0x3c8cf3e4,0x3ca4c787,0xbb4d3876,0x3cf17c53,0xbbbccbf3,0x3cbfb80b,0x3ba2faac,0x3cd56fb6,0x3c4eeb6b,0x3c355af8, -0x3be76890,0x3cb20917,0xbb477cb1,0xbd1fb2c8,0xbce6262c,0xbd0d8dff,0xbd0ac9fc,0xbd0eb8ee,0xbccd79ef,0xbd0dc386,0xbd1fb0e8,0xbd5f924c,0xbd0e1f28,0xbd182273,0xbd88754f,0xbd043c2f,0xbc84f4ee,0x3c880933,0x3ccbfe85,0x3d5560c9,0x3d2d548c,0x3d510046,0x3d046e62,0x3d29b63e,0x3d008860, -0x3cd51b9b,0x3c91bec6,0x3b739f25,0x3bc1985e,0x3b828fe8,0x3c30bd81,0x3c572746,0x3c1b9e6f,0x3c5af814,0x3b792454,0x3c8781e5,0xbc35d6dd,0x3c93f6b7,0xbb51a7f1,0xbd302b51,0xbd12be71,0xbd41b23b,0xbd5a95e3,0xbd5863ba,0xbd0c7640,0xbd43d822,0xbd6b4417,0xbda01093,0xbd3ab224,0xbd1ee0e7, -0xbd91ab8f,0xbcc5e00b,0xbbb20eb0,0x3d0c7126,0x3d8df6df,0xbdd90501,0x3b013b18,0x3d5e81ec,0x3cc16e4b,0x3cbd8b71,0x3cbb3977,0x3c127f9a,0x3bbe8444,0x3ce03d03,0x3cee6129,0x3c4a9beb,0x3c96210c,0x3c99b28e,0x3c8f4aa7,0x3c8b956e,0x3c44bfa9,0x3c7f3643,0xbc1451f2,0x3c8917bd,0x3c0ef865, -0xbcf648e9,0xbb87596f,0xbb7c4e7b,0x3cfdef9b,0x3cfd9255,0x3c8ad0c0,0xbc65d36c,0xbccd0a0b,0xbd1b9425,0xbcfdc74b,0xbd4c0feb,0xbd9da301,0xbd7724d4,0xbd84dd69,0xbd597d59,0xbd8bd391,0xbb565c07,0x3c686318,0x3d4f96e2,0x3d367652,0x3d08c310,0x3cfd641d,0x3c99748a,0x3d3b4fe3,0x3c869381, -0x3c2b66e6,0x3b3805bc,0x3bba6aed,0x3c54188f,0x3c542624,0x3c257e13,0x3c057544,0x3b867c33,0xb9433da8,0x3c394f4d,0xbc105f19,0xbcaad5bc,0xbc9fc510,0xbd813823,0xbd53f305,0xbd14524f,0xbb8a9d60,0xbbe2f1dc,0xbc83659e,0xbd15ada5,0xbc876e92,0xbc372202,0xbd0fd5e9,0xbbddc2fd,0x3c6eabde, -0x3d774727,0x3d0b9cf5,0x3c5e3fc0,0x3b55f087,0xbc8fed3b,0xbc8f18f6,0xbb5ca8b3,0x3cc3fcb5,0x3d21e41b,0x3d19abc3,0x3c0f094f,0xbc0b3df3,0x3bf83d73,0xbb2d0ae9,0x3b927007,0x3bdfa836,0x3cdeec62,0x3cb8aef9,0x3b1c5898,0xbc25001d,0xba03b0b9,0xbc9b9f6e,0xbd429dac,0xbd001dfd,0xbcfbaded, -0xbd6e5a3b,0xbd962aa2,0xbd778cf1,0xbd30c78b,0xbcc1c877,0xbc28fd50,0xbc79926a,0xbbe325e5,0x3cbd020a,0x3d5ab72d,0x3d3ca4a9,0x3d8f46a0,0x3ccebf1d,0x3d685e40,0x3d064255,0x3c343bd1,0x3cbb7df1,0x3c4693b7,0x3c5a061d,0x3b71dba9,0x3bcbba0c,0x3c88ccfb,0x3c90f2d5,0x3cab31fb,0x3c661e79, -0x3c753c4c,0x3c0d95cf,0x3c9b78e8,0x3cb21d66,0xbbc2e867,0xbbd69c0a,0x3ba6ce10,0xbc2d6730,0xbcac36f0,0xbc1e85ea,0xba0c8918,0x3c93ed5b,0x3d305e7c,0x3dab7de9,0x3dc38034,0x3df5111e,0x3e19e470,0x3e228f99,0x3dfadaec,0x3d382871,0x3d09ebfd,0x3cde04d0,0x3d5e9382,0x3d7acd28,0x3d7629b6, -0x3d97d87e,0x3d533650,0x3cc5ac5b,0x3cbf83e3,0x3cd51324,0x3cd6f8a5,0x3cf42659,0x3ca13e18,0x3bb830cd,0x3c3f9614,0x3b9f9ab6,0x3ba2a7af,0x3c45c267,0x3b786491,0xba20e274,0xbb82e513,0xba6a94e8,0x3bbec405,0xbbb533f9,0xba5d6fae,0x3bed4751,0x3c9dffc3,0x3d09de47,0x3d44461c,0x3da05c0c, -0x3d9f9924,0x3da51e39,0x3d99f3c8,0x3d746ddf,0x3d2f2772,0x3cb7eb05,0xbbe8a91d,0xbbda5334,0x3cc5566f,0x3d79a377,0x3c1f339c,0x3d2a0b58,0x3cde99c0,0x3cbadfae,0x3c4942b4,0x3c3bebde,0x3b4fa988,0x3bb9a58b,0x3b2450e9,0x3ad6d32b,0xbb2724e3,0x3c1a59d9,0x3c64505d,0x3c92d64e,0x3c150e96, -0x3c475817,0x3c8f458e,0x3c76102e,0x3bd7adea,0x3bc3658c,0xbb6a0407,0xb9d51d28,0x3c284217,0x3d08c817,0x3d244f84,0x3ce226fd,0x3c7a24c7,0x3c06f8be,0x3be25b87,0x3ca1a5ad,0x3c4ef351,0xbc7a8580,0xbcbb8627,0xbc900068,0xbb18d8cc,0x3bbed36e,0xbbd8ac24,0x3bdf5f17,0x3cfaee25,0x3ca8486e, -0x3cd15507,0x3ca43702,0x3c72d2f3,0x3c37205a,0x3c92ec7c,0x3c609dd2,0x3cdc3131,0x3c2cf54d,0x3c25950d,0x3b39734d,0x3bfcfdd8,0x3c140e06,0x3c5b6bc2,0x3c8fd0ea,0x3ce9e423,0x3cafcbb8,0x3bbc68a6,0x3bb6b9dc,0xbbb24de8,0xbb5212a3,0xbb02adce,0x3aefb0d3,0x3c24adda,0x3c8fea2c,0x3cca1479, -0x3cad54ad,0x3c9bc426,0x3c7f79b0,0x3c793b91,0x3c293f2d,0x3af5d1cd,0x3b6483f3,0x3bf3acf6,0x3c313eb9,0x3cc209b5,0x3b543595,0x3c49ebfc,0x3c08a2f8,0x3b7d009d,0x3b0279a9,0x3ab911b3,0x3c084ff5,0x3ca3f06c,0x3c93b64b,0x3c79b8d4,0x3cbb08a2,0x3cc2d81e,0x3ca0924c,0x3c9ec8e5,0x3c42ba4a, -0x3c8e5aa2,0x3c384347,0x3c4c80f7,0x3c816a98,0x3c8cbf4e,0x3ca5f5e4,0x3cb02568,0x3cb8f8b0,0x3ca6aa93,0x3c9029e5,0x3c84df8a,0x3c601543,0x3c40cfd1,0x3c1ec5fd,0x3c009f13,0x3c10ccd5,0x3c0fdce8,0x3c37f942,0x3b8d37bf,0xba5164a3,0x3d117f37,0x3d3a2dbe,0x3cde9e2f,0x3ce6e001,0x3d331f4e, -0x3d00b18e,0x3d083c32,0x3d0aee82,0x3cf3e079,0x3d0ca7d4,0x3d16730a,0x3d15836d,0x3d4531fb,0x3d004a85,0x3d053fc1,0x3d3fdaba,0x3d127854,0x3b256084,0x3bf73549,0x3bf94292,0x3c0300d9,0x3bfd35fa,0x3bfa4968,0x3c073d40,0x3be81bdd,0x3bce6ae8,0x3ba5a882,0x3b9f6e1f,0x3b92565b,0x3b7cff9b, -0x3b95e1c7,0x3b9397f9,0x3b874232,0x3b7af6e5,0x3b887a42,0xbcb97b91,0xbcc3a476,0xbc9077cd,0xbd6b3dce,0xbd63e732,0xbc332af3,0xbd4936b7,0xbd5e4592,0xbcc5feab,0xbcd498a0,0xbccb2f77,0xbc85c95c,0xbca2d26d,0xbc9f22f9,0xbc7eb9c5,0xbd616f09,0xbd4e1ed4,0xbc423344,0xbd5f7caa,0xbd645236, -0xbc372347,0xbc978f31,0xbc99e41d,0xbc96309b,0xbc97a503,0xbc9acaec,0xbca414ff,0xbcacac51,0xbcb0873e,0xbcaade41,0xbcaf7007,0xbcbef2c4,0xbce89f40,0xbcf5e4c0,0xbd02c2d2,0xbd06bebf,0xbce896e6,0xbd08dc04,0xbd0d365c,0xbcee8521,0xbcc950fa,0xbcddfc19,0xbcc6ec9c,0xbcac8582,0xbc9fcfd2, -0xbca0b50b,0xbcf46e2d,0xbd1bb25d,0xbcf9245a,0xbca8ee94,0xbcdbb8da,0xbcb32718,0xbca44a86,0xbd0b4676,0xbcc0feeb,0xbd1fde45,0xbccdd53a,0xbc6becb8,0xbcbbbdd7,0xbc9f93bb,0xbca446db,0xbca51d58,0xbcb932d8,0xbcc52234,0xbcce4d39,0xbcd68273,0xbcf40f97,0xbd1f05d2,0xbd545052,0xbd647ff1, -0xbd6c2eab,0xbd64df75,0xbd42d948,0xbd365bf3,0xbd028dc6,0xbd066bc9,0xbcde72ff,0xbc06dbcb,0xbc1a778b,0xbc253772,0xbbfae73d,0xbc8c68e0,0xbb88d0ca,0xbca85ff4,0x3addcf89,0xbc1543ca,0xbc0b248b,0xbc6bb152,0xbc32efea,0xbc65c0f6,0xbc97dbbf,0xbd10fb1a,0xbc94eeea,0xbb439fd1,0xbc520c01, -0xbc3972ed,0xbc4966f5,0xbc6e9fb0,0xbcbf291d,0xbcd6addc,0xbcf49385,0xbce5dbfb,0xbd068766,0xbd396c45,0xbd85b69c,0xbda334a6,0xbdb7a1a6,0xbdbbbade,0xbd85193f,0xbd914f3d,0xbca79ec9,0x3be12044,0x3bc6026f,0x3ca7bc77,0x3c9c922b,0x3ca04416,0x3c988e87,0x3c027cf7,0x3b6840c3,0x3c754fe6, -0x3c633a6a,0x3c8fd7f7,0x3cc82e25,0x3c9c77f3,0x3c947cb8,0xbb875117,0x3bdc2704,0xbcab8cbd,0xbb8933c0,0x3b2c7358,0xbc94af78,0xbc6a797e,0xbc5fb46a,0xbc824594,0xbcedeb8a,0xbcf56506,0xbd0513e8,0xbd0746f1,0xbd4e89c2,0xbda56921,0xbde17dc9,0xbe0163e0,0xbe0bebbf,0xbe075778,0xbdcbf0a6, -0xbdc42dee,0xbdda19c4,0xbe052ada,0xbdb64272,0xbd148e4e,0xbc98c8e8,0xbc891933,0xbcbca435,0x3c0420ab,0x3ca14d51,0x3c490070,0x3ca0ff5e,0x3c9532c0,0x3a9c42dd,0x3c190e11,0x3c68469f,0xbbaf8fe8,0x3abd83e7,0xbcbbe749,0xbc612590,0x3cd51d49,0x3cc3a1f6,0x3d361e82,0xbbefc6d9,0xbc671875, -0x3c990c66,0x3cb43cbf,0x3c97ab75,0x3be5f5cb,0xbb2c9341,0xbc4ec64c,0xbd2dead9,0xbd5976f3,0xbd502284,0xbccc44d5,0xbd9589f3,0x3d7939dc,0x3d548855,0x3b969b4d,0x3c51960a,0xbb7c0f5e,0xbb81c171,0x3c3472f0,0x3cffa7fd,0x3c5a202a,0x3b97fed9,0x3aa6abc5,0xb9611adf,0x3bf2b4dd,0x3c99c111, -0x3ca875d5,0x3c6ecd0f,0xbbf2abbf,0xbbcd67f9,0xbcbbe6ce,0xbce880d6,0xbcf6d711,0xbd760763,0xbd9bedb9,0xbd96c111,0xbd915de6,0xbd839c4e,0xbd7300b3,0xbd01121d,0x3abdd1eb,0xbc768c8b,0xbd764c2d,0xbe0b801c,0xbdf459d3,0xbdf8659f,0xbdb1fafa,0xbcaa91ce,0xbcd43278,0xbc2136a1,0xbbcb1d97, -0x3a5f6ac3,0xbac29813,0x3d099381,0x3ce17206,0x3caf764f,0x3a711b3d,0xbc1d8196,0xba80edc4,0xbb1ebcf3,0x3b3549d1,0xbc6a846c,0x3c5d18cc,0x3c6b6af4,0xbcc06855,0xbc9229a2,0xbd150132,0xbcdf39e5,0xbcb8172f,0xbce51188,0xbc9d3cc2,0xbcd563b7,0xbd0f5995,0xbd2f1929,0xbccb49bb,0xbb226b61, -0x3c848349,0x3d257603,0x3cd0c38f,0xbcea9499,0xbd07cefc,0xbc3c855e,0x3cf841e6,0xbc237a14,0xbdb1842e,0xbbc3bbdd,0x3c84a68d,0xbb904031,0x3b76f955,0xbb70c3e4,0x3b995760,0x3b74e580,0x3caaecfa,0x3cac7490,0x3c609906,0x3c219445,0x3c5885a3,0xbb9b5f38,0x3c822ffb,0x3c49fcfa,0xbc67bd9f, -0xbc3ae763,0xbccd505f,0xbc630c6d,0xbc30fc69,0xbcaf2fad,0xbccef833,0xbd293cd0,0xbd1d6077,0xbc9f72fb,0xbca8dd03,0xbcdc7b68,0xbd3e95cb,0xbc3b9980,0xbaaf138c,0x3c52d768,0xbd83030e,0xbddc3de9,0xbdfbee02,0xbdf1935c,0xbdb820d5,0xbd9a519a,0xbc546072,0xbc17bc78,0xbb87e1ed,0x3c6654d8, -0x3c6577e2,0xba86f382,0xb9ef7cd7,0xb9e42cb3,0x3aa05534,0xbab016a0,0xbac82f31,0x3ad00d2b,0x39d5ff0a,0x3aff1f6c,0x3bd6772c,0xbb8b0594,0xbc8660a2,0xbc365a6b,0xbca13135,0xbc83377e,0x3bf4ea62,0x3a08c9d0,0xbc1aa350,0xbc925777,0xbd1a9763,0xbd4fb4bd,0xbda43ee8,0xbd32cd55,0xbd16eb6f, -0xbd10c482,0xbd80b662,0xbd9fd38e,0xbd9a0339,0xbda9872c,0xbc9f400a,0xbcf42267,0x3b15bc2b,0xbc20136f,0xbc210270,0xbc256cfb,0xbb4a1ea3,0xb9e676c0,0x39c2ddd6,0x3a9c22ba,0xbae476fe,0x3b890f04,0x3bfbad77,0x3c01beb3,0xba914bda,0xbc0e9630,0xbc667ab3,0xbbc99d48,0x3b20c382,0xbaf4df00, -0xba9b7dad,0xbbf59d06,0xbcc21fc1,0xbd003533,0xbd1424ff,0xbd1a0738,0xbcd56c8f,0xbc4da35d,0xb9c4aa00,0x3b58c968,0xbbb0e7ea,0xbcb70142,0xbcdf57f4,0xbcf4ce7f,0xbcaa40fd,0xbcb6707d,0xbc5c1ba4,0xbc4a34f9,0xbcc9daee,0xbc849e40,0xbc214b5f,0xbc03654d,0xbb94070e,0xbb7e9512,0x3a3c1d4f, -0x3bbd9cd6,0x3bda0b1a,0x3bba9044,0x3bd98d46,0x3a75ae33,0x3b78763d,0x3b340552,0x3b8183dd,0x3b3ad577,0xbb2884eb,0xb99bf125,0x3b61d4bc,0x3bba2d9f,0x3c2a2589,0x3b25eaec,0xbbe01bff,0xbc8cf418,0xbc832a79,0xbc8fddaa,0xbc931baa,0xbce46e3b,0xbd092c7a,0xbd22db7e,0xbd0c39aa,0xbcfb37dc, -0xbcd00d7c,0xbcc0be60,0xbc81c018,0xbcb097b6,0x3a6d3e1a,0xbc4badf0,0xbc507110,0xbbf594c8,0xbc12c47f,0xbc2a3bba,0xbc2a706a,0xbc92bb46,0xbca08d50,0xbcb78fc2,0xbc8f7908,0xbca4ad6b,0xbc11ed82,0xbb397187,0xbbfe6b3a,0x3b174389,0x3c69d1bc,0x3c56ea2b,0x3c911493,0x3c82b8e3,0x3c905a1a, -0x3c99fcf1,0x3cbd8cab,0x3cdf5949,0x3c9e5119,0x3c336470,0x3b37a237,0xbba655da,0xbc4f2879,0xbcb3be60,0xbca344db,0xbca54613,0xbc9e0884,0xbc9a08fa,0xbca7d8ad,0xbcb69bf5,0xbcf4cc17,0xbc986e16,0x3ca6f52c,0xbd02e724,0xbc9ac1b1,0x3c2ee97b,0x3c2b82f5,0x3c441004,0x3c77d050,0x3c7f3c10, -0x3c863163,0x3c95976b,0xbcb749e8,0xbd01a3aa,0x3cb3114b,0xbc8289a1,0xbcbd39ca,0xbc5a36d0,0xbc570c6a,0xbc524cc9,0xbc46684f,0xbc3a515b,0xbc3e568b,0xbc2a2ec7,0xbc67ddd9,0xbc8324cc,0xbc9468fa,0xbca36644,0xbcb28a07,0xbccd9675,0xbcc036d3,0xbcbb8ce9,0xbcb428d5,0xbcb697a5,0xbce6d2e2, -0x3ce77e37,0x3cabde6f,0x3ccefe67,0x3cf581ab,0x3c15f370,0xbd37b40b,0x3d283d2f,0x3c86eb2c,0xbd0423ad,0xbd0f6b0e,0xbd13f2eb,0xbd1f11c0,0xbd20aca4,0xbd24c881,0xbd333763,0x3c847a12,0x3d25bdb9,0xbd4d5bfb,0x3c405661,0x3d0d50a0,0x3cebcd25,0x3ccf98df,0x3ce9a5e9,0x3cd8bd01,0x3ce228f0, -0x3ce620bf,0x3cf721a9,0x3ce3983d,0x3ce55c07,0x3cf17430,0x3cf86211,0x3cfe0ae9,0x3cf7581e,0x3d0bac3c,0x3d06aa80,0x3ccd5f45,0x3cd0261e,0x3c992a35,0x3cbe90b0,0xbc58cc2e,0x3ca5d23d,0x3c884ffd,0x3c321952,0x3cb032dd,0x3ca0d558,0x3cc986b4,0x3cec8efa,0x3ccedac5,0x3d051db2,0x3cd69b78, -0x3cdd2bcf,0x3c7ba128,0x3c881a84,0x3ce69771,0x3ca0c3d1,0xbb07ab2e,0x3d11a530,0x3cfcab2f,0x3d19f0f7,0x3d076c05,0x3d15e2b5,0x3d182423,0x3d2732de,0x3d0c0e14,0x3d0df4b8,0x3d2aabcd,0x3d39f68e,0x3d48caa5,0x3d3f14b4,0x3d666506,0x3d56d3ea,0x3cf83b28,0x3ce7cb2a,0xbbf952b4,0xbbadfd97, -0xbaedc60d,0xb86d71da,0x3baadaa5,0x3c1d29f9,0x3c33e66a,0x3c6e4fde,0x3bf0260b,0x3befff93,0x3c69ff6c,0x3c93c031,0x3c54c62d,0x3c86e9a4,0x3c8a2e5e,0x3cabb133,0x3c65cc8b,0x3c7090e3,0x3cbd83cf,0x3cde33bc,0x3d0a6cbc,0x3d1d8d91,0x3cf58248,0x3d146b4d,0x3d159ea8,0x3d3e9be7,0x3d07765a, -0x3d15b724,0x3d3dce78,0x3d46fb20,0x3d5d2eea,0x3d5bdc7b,0x3d9d26df,0x3d91b343,0x3c4eadc8,0x3be80e46,0xbcef139b,0xbd19b21c,0xbd01bdbd,0xbc3111b5,0x381e2621,0x3c2a949e,0x3c3b1183,0x3c2166a2,0x3be7bb2a,0x3bf46c6b,0x3bf5b943,0x3c2f917e,0x3ca83261,0x3c78aa80,0x3ca8756c,0x3c895e0c, -0x3c809dfc,0x3c4e9234,0x3cad85bd,0x3ceab7d0,0x3d23d7b3,0x3d5bc5d1,0x3d22af69,0x3d4f1c6c,0x3d66dcba,0x3d8392e6,0x3d3bcb65,0x3d30575f,0x3d7d3500,0x3d98bcb5,0x3db3746d,0x3db660e0,0x3df6a861,0x3dd5924f,0x3c4b6a3e,0xbc2c8340,0x3d52f8b7,0x3cf11430,0xbd0d8852,0xbd1c8e38,0xbce1781b, -0xbc36c9f9,0x3ae79365,0xbbda5e3e,0x3bf250c8,0x3c9f0f01,0x3c042c34,0x3ca7b212,0x3c925d22,0x3b231cea,0x3c8142dd,0x3c886c98,0x3c05ff96,0x3c5f2943,0x3cdf4be0,0x3d086e10,0x3b561b0f,0xbb5087ed,0xbbf081db,0x3b89b8ad,0xbc47518c,0xbd2ef769,0xbc974ee2,0x3b7b909c,0x3d0f649b,0x3ca53ddf, -0x3cb7d20c,0x3c8e6194,0x3cfdf458,0x3d1134da,0x3d342016,0x3d14de42,0x3bef09b7,0x3d50a625,0x3d9a675c,0x3d52f717,0x3d082c78,0x3c985531,0x3c675c1b,0x3cd91392,0x3c324261,0x3b96838a,0x3bcfe979,0xbb21e9d1,0x3c01ddcd,0x3cb8d819,0x3cd44892,0x3ce0b548,0x3ca706d2,0x3c89bd8b,0x3b0b957b, -0x3ccef86f,0x3d3bd03d,0x3d5aec7a,0x3d8c0c65,0x3d6a9aeb,0x3d48f9c9,0x3d5cb837,0x3d18a6c9,0x3cdd60f7,0x3c7aa267,0x3d069d33,0x3ca30a30,0xbcf06f27,0x3cbba609,0x3cd19b1a,0xbc3ff33c,0xbb34a914,0x3d852404,0x3c889f94,0xbcba5e84,0xbbdb4617,0x3c913e63,0x3d3f7c4b,0x3d1accd6,0x3c8767bd, -0x3be2a815,0xbbbb659a,0x3a23af4e,0x3a6c5887,0x3b6d8e53,0xbcabbc9c,0x3cd2c7a1,0x3d0ba7d9,0xbc0621d7,0x3a1ac58b,0x3b0292bf,0xbad6ceef,0xbb0bc597,0x3bcdbff8,0x3c9a46c6,0x3d3bfbaf,0x3d871850,0x3dadea6d,0x3d553c68,0x3cf0426e,0x3ca993c8,0x3cbb08c4,0x3d825053,0x3e06e9d4,0x3e4b962f, -0x3e6c7935,0x3e738530,0x3e02474f,0x3dc967a6,0x3bc932d6,0xbc009a6e,0x3c91f1b5,0xbbbc2dcd,0x3c9de98f,0x3c71f488,0x3c4b9deb,0x3ccf6c7c,0x3cb712a7,0x3c6984b0,0x3c49280e,0x3c6f6d85,0x3ba532cd,0x3cd3222b,0x3cc16444,0x3b72e85b,0x3bb2337f,0xbb1de43b,0x3b076969,0x3bcc0173,0x3c121049, -0x3bc456c1,0xbb851700,0xbc092f9e,0xbbe69040,0x3ca655a7,0x3d322061,0x3d5b7347,0x3d98753a,0x3da75623,0x3d5151d7,0x3db84ff8,0x3df2b3a1,0x3e306500,0x3dfe1e16,0x3e0c4704,0x3d90b58d,0xbc164fc7,0x3c5c847d,0x3c8cda71,0x3c80e4a2,0x3c8f7c34,0x3c4bf2f9,0x3c1e42d6,0x3c09a5f1,0x3bd4084b, -0x3ad394aa,0x3b217be7,0x3c36a874,0x3c0c736d,0x3c00453e,0x3bfa6640,0x3c9873d5,0x3c55afb5,0x3c4a809d,0x3ba7bcec,0x3b507ea1,0x3c4d12de,0x3cb236a3,0x3d10f22e,0x3d5c29dd,0x3d47370d,0x3d669b7f,0x3d95d41b,0x3d9d36f2,0x3d9b8bf2,0x3d75b28d,0x3dd8ae79,0x3e02a220,0x3e129dff,0x3e084827, -0x3d8ae6c2,0x3d5a06d9,0xbb8fcd26,0x3c405f67,0x3b86cd5f,0x3c4176df,0x3c642b2a,0x3c38113a,0x3c75285a,0x3c32884b,0x3c0188f6,0x3bf362e9,0x3c1af871,0x3bb4fea7,0x3c1e6f1e,0x3c526254,0x3c5115ba,0x3a5e7fff,0xbb350ca3,0x3ad61ab9,0x3c5c05b3,0x3c52049f,0x3bb212e2,0x3c8d94f9,0x3cb3a9b6, -0x3ce92f86,0x3c508637,0xbb0cbc1f,0xbc6d8f02,0xbc259b0e,0x3a12e84a,0x3c813770,0x3c97c932,0x3cdaf2cc,0x3d39f006,0x3d684137,0x3d0a277c,0x3cf453d5,0x3cd6446d,0x3cf70b5e,0x3ca344f1,0x3c96641e,0x3c53b458,0x3c4370a4,0x3c048fcc,0x3c34d8a4,0x3c4438e4,0x3c3594e2,0x3b5ad29d,0x3b9b0c60, -0x3b74fe0a,0x3bc6db19,0x3bc99dac,0x3bcfaeeb,0x3c51aa7c,0x3ba085a1,0x3a8425d6,0x3bbfce3b,0x3c033c1c,0x3b5a81a5,0xbb7cd26d,0xbc384ff2,0x3a6e78d9,0x3c5650ac,0x3cc140d9,0x3ca73d3d,0x3c767611,0x3c267ae1,0x3ca358f6,0x3ce82738,0x3d12035b,0x3d04e2f3,0x3c859be9,0x3cb114d8,0xbc90cd1f, -0x3c69c8ea,0x3be3f7c4,0x3bfdc191,0x3c9046c1,0x3c872786,0x3ca7f120,0x3ca7e8f8,0x3c81d9bb,0x3c9cae92,0x3c810aa9,0x3c6656d2,0x3c16e095,0x3bd65f3c,0x3c869d0c,0x3c496809,0x3c0b1640,0x3bf32d43,0x3b2d0d4c,0x3b7ec2b0,0x3b1b15d2,0x3adb90bd,0x3b38fb90,0x3aefb0f5,0x3b258b65,0x3adb0222, -0x3b7c06b6,0x3bd77b86,0x3c43991d,0x3c771e43,0x3c7fe0ef,0x3c749d38,0x3c811cac,0x3c852245,0x3c1c6915,0x3c803b98,0x3c1a8154,0xbbeb8d19,0xbd190d59,0x3c916146,0xbb476607,0xbcec8031,0xbcfff5e3,0xbd042829,0xbd0a0e82,0xbd1203ed,0xbd17af0c,0xbd1fe8af,0xbb6d71dc,0x3c514fcb,0xbd0d026b, -0xbbab512a,0x3be01db5,0x3bb00dfc,0x3ba64254,0x3b9a8610,0x3b815a4c,0x3b82d6b9,0x3b5f34b0,0x3b389460,0x3b8f75f9,0x3bc3ec0c,0x3be79b33,0x3c0bf22a,0x3c1ccfb0,0x3c416747,0x3c37e1b3,0x3c397cfc,0x3c327d08,0x3c40bc4b,0x3c0cbb64,0xbd0ca859,0xbce94f4e,0xbd24a3c9,0xbcb8c3db,0x3c049259, -0x3d62014a,0xbd0aae70,0x3b96ee34,0x3d48f338,0x3d4e32b9,0x3d4ffe4f,0x3d49efba,0x3d5e42d4,0x3d61eef5,0x3d63588e,0x3bcfdd51,0xbce820fe,0x3d795585,0x3c1a2a21,0xbcaac2c2,0xbd2c3532,0xbcf78ad1,0xbd0e48fe,0xbd143e98,0xbd0ea0e4,0xbd0d57df,0xbd0c2434,0xbd0e6430,0xbd104bec,0xbd0bee6c, -0xbd1dad81,0xbd24571d,0xbd1d4053,0xbd294576,0xbd1d216f,0xbcf3c66a,0xbcfee903,0xbcaac742,0xbd0be70b,0x3c231e9a,0xbd113dea,0xbc29d7d1,0xbbafa6d5,0xbc94e6d2,0xbc39fdee,0xbcc95267,0xbcd305a9,0xbc7c3b8a,0xbcc0ebb4,0xbc9897b5,0xbca0dd02,0xbb03a176,0xbbcf93f5,0xbc88d008,0xbc944513, -0x3caac47a,0xbd2420bc,0xbd14e9ad,0xbd2294a3,0xbd3fa0a8,0xbd364089,0xbd35d0d0,0xbd2f3352,0xbd322dac,0xbd349a69,0xbd2daf86,0xbd59445e,0xbd62e081,0xbd41a413,0xbd6bc5a8,0xbd5432e6,0xbcee60ec,0xbcccf5d1,0xbca2cf64,0xbd186569,0xbd14f085,0xbd001581,0xbbe1ece2,0xbc1bf9ce,0xbb82a35d, -0xba957d26,0x394edda9,0xbc0e9589,0xbb089fbc,0xbc4859ad,0x3bd7e3a3,0xbc6b40c0,0x3b700ac3,0xbbc14965,0xbbb873ed,0xbc3c0094,0xbc346345,0xbd02f3f9,0xbd335d10,0xbd333852,0xbd748248,0xbd546d5a,0xbd51473c,0xbd4a8eb6,0xbd53c68b,0xbd61658a,0xbd4da468,0xbd90f601,0xbda39bb5,0xbd81f435, -0xbdac088d,0xbd839f16,0xbc95862c,0xbca6b1f9,0x3c9ff226,0xbc8ab723,0xbd44d324,0xbd3b49c5,0xbc49a7fa,0xbc5480ec,0xbaab4a1d,0x3c2805fb,0x3aba99c6,0x3b862d6a,0x3b6c23e5,0x3c75f9ea,0x3c6013eb,0x3b8274a1,0x3c383584,0x3b78569c,0x3b9ed37c,0xbc2cb5d0,0x3a9dc98b,0xbcec9e4f,0xbd2e9e82, -0xbd48e8e6,0xbd9c6162,0xbd8e66d3,0xbd9489bf,0xbd899244,0xbd8e7a06,0xbd8d9ec9,0xbd7db848,0xbdc138a0,0xbdc5f9e9,0xbd87180c,0xbdcab429,0xbda1db00,0xbbcf01eb,0x3c0d8235,0xbde778f3,0xbd58db44,0xbca8c973,0xbcfaaa83,0xbc36efce,0x39bc5dc4,0xbb90631d,0xbbce4462,0x3b88daf1,0x3c17cc3c, -0x3b1550d8,0x3c5910ee,0x3c32f0dd,0x3a1cfb3e,0x3baec052,0xbb078978,0xbbd93abd,0xbcdc92cb,0xbcaeab2e,0xbd437561,0xbd8a8925,0xbd43fec0,0xbd56b859,0xbd274d53,0xbce3588f,0xbc32bc69,0xbd300d93,0xbd55f054,0xbd5e152a,0xbd8b7041,0xbdb5254f,0xbdf4e2d0,0xbdad44e7,0xbd82f37f,0xbd69e5d1, -0xbdbaaf60,0xbcd7c56b,0xbc0f6977,0x3b95659b,0xbbbda0ae,0xbcf688b7,0xbbb8b341,0x3be8955d,0x3cbd0169,0x3b830098,0xbbb66617,0x3af00afe,0xbb6cd40f,0x3be19be8,0x3c5e70a2,0x3c1f1203,0x3bba63a1,0x3aacef6b,0x3a174f53,0x3c5ee961,0xbc361a1c,0xbd6829e3,0xbd788ae8,0xbd82868a,0xbd84229b, -0xbd78e388,0xbd2f5694,0xbce61cf7,0xbcf702b6,0xbd4418f1,0xbd4f1533,0xbd3329a3,0xbd7775c6,0xbd6ddf88,0xbd7829f6,0xbd5efec1,0xbcd3f6fd,0x3d1da9c9,0x3cc135b1,0x3c3a31fb,0x3c53ab63,0x3d13c541,0x3d38479d,0x3d108f5f,0xbbb07f32,0xba28e0b6,0xbbf39915,0x3964c1dc,0xbb160329,0x39e1da6a, -0xbca36990,0x3c842bc0,0x3c839f1c,0xbbb139cc,0xbc4c6fdf,0xbcac9335,0xbcd00b35,0xbca2ed53,0xbc1d0a5e,0xbc830b14,0xbd46da76,0xbda28188,0xbdcf163c,0xbdee9d5a,0xbddb8298,0xbda84f61,0xbdaf3950,0xbdee9883,0xbe2e4667,0xbdf98f77,0xbd9d4c76,0xbd6c4416,0x3cb55021,0xbd460378,0x3cadfaec, -0x3c6a5b41,0xbbd6c9cd,0x3be0d6fb,0x3b8a30fb,0x3c6dbc5e,0x3be3c288,0x3ca9698f,0x3c82c8c3,0x3b96f838,0x3be3bf9e,0x3c3a3f95,0xb9fb4641,0x3c98d880,0x3ca87147,0x3a89ecfa,0xb6d0d508,0x3b32b37d,0xbc9c43a7,0xbd5c5050,0xbd89d316,0xbd8f3600,0xbda62ddc,0xbda4aec6,0xbd8df1cc,0xbd89aae7, -0xbd413f49,0xbcc9294f,0x3b87484e,0x3b94cfa6,0xbceb27ac,0xbd8ec25a,0xbdfa0d8d,0xbe3837dd,0xbdbd948d,0xbde1136e,0xbccd04c9,0x3d5ecc66,0x3cabf47f,0x3bedaf1b,0x3ca374aa,0x3c3a1a15,0xbb14e4da,0x3b121de9,0xbba97e28,0xbb9654d3,0xbb9499ee,0xba89bf6f,0x3ba2a7df,0x3c39598f,0x3c331178, -0x3b908bf1,0x3b4b6217,0x3bd5ec56,0xbaad9b32,0x3b92cb17,0x3c3742e2,0x3bed008f,0x3b1f108e,0xbaf46e25,0xbc84a91b,0xbc2a0cad,0xbc9e09b2,0xbd37dafa,0xbd3bd3f2,0xbd8da5ca,0xbde9ae4c,0xbdc57fdf,0xbdab9ffa,0xbda8e264,0xbdbe2018,0xbceb76bd,0xbc8443f6,0x3ce71b3e,0x3b232851,0x3c3568a5, -0x3c016a63,0x3bff7dad,0x3c3827f9,0x3b7404f9,0x3b870c3e,0x3b9336e5,0x3b1a1344,0xb9d6224a,0xbb106a6d,0xb9ebb0ae,0xb95d5f67,0xbbc5ef00,0xbaeaf72f,0x3904dee9,0xba81364e,0xbca5fbec,0xbce74e65,0xbceed758,0xbd101312,0xbd17a9c6,0xbd034013,0xbccee038,0xbc39d3ee,0x3bcd62c0,0xbc19a104, -0xbcf1e265,0xbd912e0d,0xbd2a7f59,0xbd03839b,0xbd02c89b,0xbc90bb17,0xbc8ded1f,0xbb4d9454,0x3bda7b73,0xbb7d78e8,0x3bd6c791,0x3b3401db,0x3b0926f5,0xbae956d9,0x3bb6c128,0xb9a02cad,0x3bcab538,0xbaea9bff,0x3c0f8dff,0x3b981132,0x3bcb9d1c,0x3b080282,0x3b9cd82c,0xbb64c74a,0xbc32af42, -0xbcb90dcc,0xbca1a627,0xbc623f82,0xbc46844f,0xbbb2b403,0x3acbb379,0x3c1e5f91,0xba2ae3cf,0xbc2bc071,0xbc924407,0xbcdd8e8c,0xbcfdaa80,0xbd23a39c,0xbd0538ea,0xbcdefb67,0xbcb70c02,0xbc78039a,0xbc827734,0xbc4beafe,0x3cd79af1,0xbb931074,0x3be25567,0x3bcf8068,0xbb4a70bc,0x3abd628b, -0xbc1ca995,0xbc3601e0,0xbbc56403,0xbc762ddf,0xbc84a925,0xbc853037,0xbc0c2382,0xbbf9b72a,0xbc5d113a,0xbc0ce57f,0x3ba16d8c,0xbb5b9654,0x3a7b8b7b,0xbad57166,0xbaca9d6f,0xbb539455,0xbbc74cb1,0xbbe0192e,0xbc447611,0xbc8715ca,0xbcbb0dab,0xbced7ebf,0xbd145b39,0xbd33f05c,0xbd1bab3b, -0xbd0730a4,0xbcde59cd,0xbcb2d76f,0xbc95904e,0xbcbab0b6,0xbc25eb7d,0x3be7db98,0x3cdd9863,0xbc8c62f8,0x3b9af40b,0x3cd88faa,0x3ce29a2b,0x3ce4aac4,0x3cd48594,0x3ce898bd,0x3ced1f70,0x3ce39787,0x3a40e4ab,0xbc8b8230,0x3cd4451b,0x3b2a0098,0xbc412e26,0xbc8131e0,0xbc6179bf,0xbc6e108b, -0xbc644dc4,0xbc5ea763,0xbc512e6c,0xbc3dddf1,0xbc794844,0xbc939977,0xbca82aea,0xbcbccd35,0xbcce6328,0xbcf11e55,0xbcd3da88,0xbcc7f331,0xbcbbc30b,0xbcb0b207,0xbcba2701,0x3cfa2577,0x3cd52519,0x3d2730bf,0xb9fc0153,0xbd0e3c24,0xbd7cf845,0x3c847007,0xbcd3eb81,0xbd69bc6b,0xbd77feb6, -0xbd781156,0xbd645c09,0xbd790864,0xbd7ac7da,0xbd7b8d22,0xbcd5d277,0x3c52283c,0xbd835000,0xbcf4b2ab,0xb9a2b245,0x3d22123a,0x3cd93746,0x3cfd7888,0x3cfd9779,0x3cfed4b0,0x3cff09b1,0x3cf747d3,0x3d01111b,0x3d0270da,0x3d09268b,0x3d03c862,0x3d064d68,0x3d0d200d,0x3d0b2e28,0x3d03898f, -0x3cd7b761,0x3cf2fbb9,0x3ce79fee,0x3d0a2fae,0xbd25f84f,0x3caf3d56,0xbad6ed44,0xbb58c440,0x3c5bd8fb,0x3c2f4252,0x3cb49b8b,0x3c91496e,0x3b1cfc3a,0x3c8e3d96,0x3c8b8af5,0x3c3f1654,0x3a8f79c5,0x3beda95a,0x3c250fa6,0x3c43dde6,0xbd11a3d4,0x3ce45aec,0x3d118d8b,0x3d1256d7,0x3d1dd247, -0x3d201a12,0x3d1f5a65,0x3d12195e,0x3d216a31,0x3d297520,0x3d36b274,0x3d1a86d3,0x3d11f2f0,0x3d1967a9,0x3d14efca,0x3d0399af,0x3c9b0710,0x3cd0499f,0x3d202be6,0x3cfad030,0xbbb2335f,0x3b2ac425,0xbc13e28d,0xbb706d83,0xba8b0186,0x3c2aa63d,0xbb96ef0a,0x3c1f25cc,0xbbb32820,0x3ca8d90f, -0xbaedd0ea,0x3c140b6b,0x3a80ce0f,0x3c614ca5,0x3c1e82c5,0x3b855c83,0xbbd4fab0,0x3c4c753a,0x3d2b46bf,0x3d1aef5f,0x3d3a4f22,0x3d36e854,0x3d3dee3a,0x3d311b08,0x3d4d9133,0x3d507063,0x3d71ce2d,0x3d4979da,0x3d537223,0x3d803fc8,0x3d6d9cf4,0x3d3eca1b,0x3c83259e,0x3cf17b4f,0x3d2a8812, -0x3d23e096,0x3bbe6df0,0x3c78870b,0x3c7d5964,0x3bd42c64,0x3c357365,0x3c906ea7,0x3c1857b9,0x3bbed55f,0x3c514b08,0x3c493e87,0x3c92c8e0,0x3c1a6359,0x3c9e43e7,0x3cd8e7b5,0x3b5bf286,0x3c850291,0xbc1b23c2,0x3c2586be,0x3d3fce73,0x3d458a64,0x3d72e828,0x3d7ebaba,0x3d7ec222,0x3d62d63c, -0x3d83f161,0x3d8f0d71,0x3da8de21,0x3d686d2f,0x3d51b88e,0x3d7ac464,0x3d516db6,0x3ced61f0,0xbb851cb6,0x3c8b4e08,0x3cdc16b9,0xbc26fc86,0xbd123df5,0xbca10960,0xbce941c5,0xbc832085,0xbb961b15,0xbb8f82e6,0x3c122e59,0x3c80d850,0x3bd4fc5f,0x3c767a0c,0x3c688e22,0x3baf3b9f,0x3c19004b, -0x3c131a81,0xbbf7f82e,0x3bbfb1d3,0xbc9eb914,0xba89769a,0x3d37cfd6,0x3cabeb70,0x3c9a4d65,0x3b8e9aba,0x3bbb1864,0x3c6fe333,0x3cf3dda3,0x3cfd8124,0x3ceffc38,0x3cbf16fb,0x3d057344,0x3d114732,0x3d96742b,0x3da7e910,0x3d42f7bc,0x3cc1805d,0x3af162d8,0x3cae32e5,0x3b00e061,0x3ba410f8, -0xba9ed8f4,0x3b82166f,0x3c85487b,0x3cbd5c5b,0x3c33fb08,0xbadb0286,0x3b6f0086,0x3b05a2d1,0x3c0cb985,0x3c333e86,0x3ca2f300,0x3c943ebd,0x3afc0847,0xbabe87bf,0xbcb0cbf0,0x3bed1693,0x3d24038a,0x3d39042f,0x3d9d067d,0x3cdd6a7a,0x394ed90f,0xbc5d4387,0xbce3abc1,0xbcef14c8,0xbc701899, -0xbd81284e,0xbd903d54,0xbd82d1c5,0xbd4f450e,0xbd617638,0xbd9015ad,0xbd0a7fe5,0x3d6b227c,0x3d54a167,0x3c8a7c81,0x3cff97d4,0x3d077151,0x3d4cd0f4,0x3cded3f9,0xbbb2d7f3,0x3bb0df83,0x3bb78c42,0x3bdc6e63,0x3bcf0ad5,0x3c124d8b,0xbc256d4b,0x3cb8681a,0x3d05ea2c,0x3a0e922e,0x3c2496d0, -0xbb053903,0x3bbc2d31,0x3b97f469,0xbc298353,0x3b49f861,0x3ce548ba,0x3d5ec847,0x3d8cd75f,0x3d8cd197,0x3d6b3fa9,0x3d0e1f3f,0x3d3bdeb3,0x3d89ebc4,0x3d848df6,0x3e0538b8,0x3e11b98e,0x3df1b0a8,0x3d9980b4,0x3cacf283,0xbc87287a,0x3a70846b,0x3c5341cf,0xb919c915,0x3c9725d6,0x3cb4d8a3, -0x3ca7b7f4,0x3c9f2272,0x3c3724d8,0xba886c5a,0x3c3ca1de,0x3c46daef,0xbba7277c,0x3c856993,0x3c8484a8,0x3bd69768,0x3c10d57f,0xbc6918ec,0xbbb43c89,0x3c122ae3,0x3bf99a03,0x3baeb493,0xbbe35581,0xbce86ac1,0xbd70f9d8,0xbd6a524e,0xbd372ef2,0xbca8e440,0xbba6720a,0x3c8ab524,0x3ceedfa9, -0x3db71e21,0x3df21b30,0x3e01c0bc,0x3d4d2ccf,0x3da3dd8d,0x3c1ceaf9,0xbd3d9a5c,0xbbeab392,0x3c035569,0x3bdff989,0x3c1cd9dc,0x3b61c8ba,0x3a0b76d3,0x3c16158f,0x3aa01b74,0x3b967618,0x3c04ddff,0x3c4e2b6a,0x3c83dae9,0x3c78bac6,0x3c1f4e2d,0x3c5c412b,0x3b5e6701,0x3ca01ed0,0x3c91d6bd, -0x3bc4c7ab,0x3c15e15b,0x39059ca9,0x3c7124c9,0x3d14dfa6,0x3d5556d3,0x3d75ca10,0x3d9be83c,0x3d332d73,0x3d1651dd,0x3d1eb3f4,0x3d9169b1,0x3da3c80a,0x3da35463,0x3d943df9,0x3d128083,0x3bb0d116,0xbcb0e129,0x39fc9b0e,0xbb297ff1,0x3c08ccf5,0x3c905e48,0x3c785b5a,0x3ca397fd,0x3c852b1c, -0x3c93ea23,0x3c2af1f4,0x3c262b07,0x3c45407b,0x3c4b06aa,0x3bf0577c,0x3a839043,0xbbb0aa26,0xbc03aaf3,0xbc071b13,0x3c009b4e,0x3c72bc5c,0x3cacea5e,0x3c01bbbd,0xbb5ccad5,0xbc35fbd0,0x3b0646a8,0x3c22a20b,0x3c770427,0x3c8d407f,0x3d0173e0,0x3d593111,0x3d5d0c90,0x3d5747cb,0x3d50505c, -0x3d1a5ac6,0x3d0c4917,0x3cb31e78,0x3b1479d8,0x3c07ab51,0xbb864bbd,0x3aa4a538,0x3b0c7177,0x3bc6e9d3,0xbb07f2d5,0x3c14e089,0xbb2a2e34,0x3c8211c3,0x3ac308ae,0x3c33235f,0x3b9d3f81,0x3c3cc785,0x3c0b2ee1,0x3c1bb64b,0x3aaf05c1,0x3caebaf5,0x3cf09d0b,0x3c75b732,0x3c538df4,0x3c8bc3dd, -0x3cc3c9b0,0x3ce00a37,0x3cf51c0d,0x3cfd8f89,0x3d041ed6,0x3d0359b9,0x3cfb209c,0x3d08c5f9,0x3ce86214,0x3cd849fd,0x3ce30f21,0x3ccfae17,0x3c1c93ad,0x3c03b234,0xbcbaa720,0x3c069b6d,0xbb3f0999,0xbb1dddb2,0x3c06cf3c,0x3befbfd6,0x3c87081a,0x3c633a73,0x3ad5c420,0x3c3f2489,0x3c692945, -0x3c30ab91,0x3ae972f7,0x3baf0aae,0x3c3219b4,0x3c362807,0xbbdc7504,0x3c5f7d91,0x3c0f0ba7,0x3c3037e9,0x3c355be5,0x3c1cd8b1,0x3bf20be1,0x3bc435e1,0x3c025dc1,0x3c349b96,0x3c6ea82d,0x3c99df8f,0x3cbfabaa,0x3ce36817,0x3ccb3b4d,0x3cad887a,0x3c8d7aba,0x3c52e739,0x3c80d45c,0x3ca9facc, -0xbb69c6b2,0xbcb1be64,0xbd0cff85,0x3bfa41f2,0xbc95ae44,0xbd11422b,0xbd1c92bd,0xbd221339,0xbd1402ce,0xbd2bd3fa,0xbd36cd01,0xbd37003f,0xbc967e5b,0x3bd90e1a,0xbd24b973,0xbc950aa6,0x3a8ebcb7,0x3caac1aa,0x3c74164f,0x3c832218,0x3c78fec2,0x3c7866d5,0x3c7bfaad,0x3c747b44,0x3c8ae550, -0x3c942045,0x3c9bb138,0x3ca21ffd,0x3ca6ab43,0x3cb53d02,0x3ca46f09,0x3c9ec1cb,0x3c98efab,0x3c94527c,0x3ca84596,0xbc9fb7d0,0xbc6210f5,0xbcf2229c,0x3c9d3a4c,0x3d37ca35,0x3d482873,0x3b537725,0x3d213661,0x3d5b2060,0x3d5e0eb0,0x3d5a8e14,0x3d3bd249,0x3d579733,0x3d587d88,0x3d4b17a6, -0x3d280f84,0x3c1fab97,0x3d57666c,0x3d2d1b38,0x3c9e1db1,0xbcfd6d11,0xbc923d0d,0xbcab48e2,0xbcabe2b0,0xbcb1a959,0xbcb263cb,0xbcb03bcc,0xbca49043,0xbca5b6dc,0xbcb0dbcd,0xbcc01ed2,0xbcc45a36,0xbcc4a6d1,0xbca524ff,0xbc8f1979,0xbc5e2118,0xbc7fa199,0xbc71888b,0xbc797293,0x3d31172f, -0xbc3cef87,0x3c4767df,0x3c3772b2,0xba394bfa,0x3bbab901,0xbc230001,0xbb80f478,0x3c46cf06,0x3830b6e3,0xbb437de5,0x3a632876,0x3c4e57f5,0x3bf5d616,0x3c256bcc,0x3712a1bc,0x3d1c634e,0xbc8eda30,0xbce4796f,0xbcd12815,0xbcea3ee6,0xbcf6b829,0xbcf29f3a,0xbcdee1cd,0xbcb28604,0xbcb10d33, -0xbcce1a7c,0xbcf72d69,0xbcf86eb2,0xbcdfea59,0xbc89659a,0xbc10d87e,0xbadb46d5,0xbbd00447,0xbc56aa7f,0xbbd91627,0x3ca4c0ef,0x3b87e238,0x3c605da6,0x3be04f5f,0x3c038e2f,0x3c439fc4,0x3c4f95b5,0xbbb7330f,0x3c81c5d9,0xbc26abfa,0x3c7c157c,0xbae40dbb,0x3c8e0997,0x3bef6664,0x3c30ca90, -0x3bc802f0,0x3c5f4a42,0xbc371b95,0xbd180680,0xbcf8eef0,0xbd0b1e08,0xbd14f8c7,0xbd14070a,0xbd05621e,0xbcc61127,0xbccd29b3,0xbd097e29,0xbd3eb95b,0xbd4bf8e3,0xbd390864,0xbcb01fde,0xbb91a82e,0x3c4fb5e6,0x3b42ba6b,0xbc26bd86,0x3ab90e7a,0x3cc6e28a,0x3a9dbd71,0x3bbae408,0x3bbdc112, -0x3ba14c6d,0x3c68f617,0x39e0b3d0,0x3b0dab21,0xbb158c1e,0x3c39a132,0x3bf740e0,0xbbf1d0fb,0x3b81e82b,0x3af95c7c,0x3c925223,0xbc19210e,0x3c141d82,0xbc96af62,0xbd418cc9,0xbd2de243,0xbd41d99e,0xbd504aaa,0xbd4377f1,0xbd19c5df,0xbcaa530a,0xbca2e5ab,0xbd0b2486,0xbd560b31,0xbd5add40, -0xbd2e06a7,0xbb8fb9a1,0x3cdb4c10,0x3d4d1dd8,0x3cfba64f,0xbda24954,0xbcd7a6cd,0x3c956560,0x3c0c6f79,0x3c048167,0x3bbc7d59,0xbb8b948f,0xb97012d4,0x3bbb76fd,0x3c5b4fa7,0x3beb93a3,0x3c1dfc07,0x3c375eba,0x3c8b5839,0x3c22ed0d,0xba63cd05,0x3bd322cd,0xbc74b1e3,0x3bbd25ad,0xbc206809, -0xbd3134a6,0xbcbdc4c4,0xbce8ad8b,0xbc226286,0xbc11b086,0xbc8ae863,0xbd00bd65,0xbd4e2b90,0xbd5c294e,0xbd827059,0xbd7aa8ef,0xbd54e983,0xbd213ae1,0xbd5192c1,0xbdb451b0,0xbd840bf2,0xbda87278,0xbcd7a6f5,0x3b2f296f,0xbc290177,0xbc8b9b43,0x3c1c4186,0x3c36d388,0x3c21c70b,0x3bc08632, -0xb7321d03,0x3b182920,0x3abad78b,0x3b7a17c9,0xbb73ee16,0x3c061d69,0x3c35d6c5,0x3c11bc25,0x3aa031a1,0x3c69aa88,0xba33957d,0xbcd7991f,0xbcd1aa75,0xbd4fe943,0xbd2253a8,0xbcebef76,0xbc2d0977,0xbb87850b,0x39c81187,0x3bfc7c92,0xbcf4b700,0xbcf7b841,0x3b4db275,0x3c55af1e,0x3b90ed84, -0xbce832c7,0xbd6bb3c8,0x3d95e20b,0x3d4b22a0,0x3d5a8487,0x3d3920a8,0x3d6faea6,0x3d26c9a5,0x3d0291e3,0xbb9bf39f,0x3c163bf9,0x3af103c4,0x3b5febd4,0x3a70e796,0x3b9a863b,0xbb2bc8d1,0x3caac251,0x3c9cb6b7,0x3c46dc29,0xbbfba5cb,0xbba94fe5,0xbc53098c,0xbcd8bf5a,0xbc25302d,0xbc087c57, -0xbd14de2d,0xbd66efab,0xbd6726fa,0xbd8569bc,0xbd85e39f,0xbd4761eb,0xbdae8819,0xbdb6a101,0xbda9a8d2,0xbc724830,0x3cf524c3,0x3cf63d6c,0x3d9edd19,0x3c9bdc5c,0x3c5ec96a,0x3b27001d,0x39e0db03,0x3be133f9,0x3c4a798d,0x3c9d33e5,0x3c9332e2,0x3c710a6f,0x3bf93287,0x3b13d63d,0x3c082542, -0x3bc39cdc,0xbbff6bef,0x3bbf96c2,0x3c37f75a,0x3b508099,0x39c6066d,0x3c1a65cd,0xbc5100ad,0xbd0e8dd4,0xbd22852a,0xbd454cbe,0xbd4f183b,0xbd2b6517,0xbcbd3deb,0xbca0db46,0x3aa0d3e4,0x3d3de28a,0x3d337b15,0x3d35b0df,0x3c43a20c,0x3d346224,0x3d1bb620,0x3b1e209d,0x3ceea0e9,0x3b028717, -0x3d39885f,0x3d5fa585,0x3cdfb37e,0x3ccae59f,0x3cd2f1e1,0x3c8f9abe,0x3c4fc1a8,0x3c64c117,0x3c03dc6e,0x3bf96a4d,0x3bcdbd84,0x3c12e227,0x3c414992,0x3ca62c23,0x3c950c03,0x3bc9a895,0x3bbe262a,0x3ca71675,0x3c0ef29e,0x3c270be6,0x3c8a4bde,0x3c31dfb1,0x3ca3b261,0x3cbbfe55,0x3cb7e22e, -0x3d1429c7,0x3d3a4d7c,0x3d6a290f,0x3cc6e706,0x3b5ebda3,0xbcb581aa,0xbc999b3e,0xbbececd2,0x3bf4c151,0x3c189c54,0xbb0e50a0,0x3cbca490,0x3cf44a14,0x3ca3b0a0,0x3c9068e1,0x3c908726,0x3c5ac8b0,0x3c80dbef,0x3c7786fb,0x3c4cdc58,0x3b9c081c,0x3c4087cc,0x3c380d15,0x3c1ebef8,0x3be439ce, -0x3c15e4c2,0x3c62740f,0x3c216751,0x3ac4d164,0x3bd1c5e7,0xba8b0c59,0xbb3f0c49,0x3aab0992,0xbc49fa1f,0xbc39f762,0xbb9f3efb,0xbac3f8e0,0xbb488e8f,0xbab001c9,0xbca0184d,0xbce3bb0b,0xbcf763b3,0xbc9fc82a,0xbbd1f7c2,0x3c164331,0x3b913a6c,0xbaaa3ccd,0x3c397fa9,0x3cd63158,0x3c70e9ba, -0x3c89ad06,0x3c598f9e,0x3c2d301f,0x3bff91e9,0x3c5830f6,0x3c0d57a3,0x3ca4b2d3,0x3c01deed,0x3c6ad1b4,0x3c20b428,0x3c67b79b,0x3c409304,0x3c5debea,0x3c895bff,0x3cd89f3c,0x3c903907,0x3c00776f,0x3c5932f0,0x3c5a355a,0x3c6eadb7,0x3c5d197e,0x3c409cf9,0x3c109209,0x3bae415f,0x3a9b44fc, -0xba50afca,0xbb2c8bae,0xbbee8b72,0xbaf13ae5,0x3a57c61f,0x3b041b5e,0x3ba9dde5,0xbad79446,0x3b23dd70,0x3c980fd7,0x3b953809,0x3c6ae14e,0x3c70ee90,0x3c48f8d1,0x3c6a4da9,0x3c30a7e2,0x3c597463,0x3caec039,0x3c834521,0x3c4f7c67,0x3c81a8ed,0x3c8ce487,0x3c346526,0x3c100b18,0x3b10dd94, -0x3c4f5999,0xbc1fccf9,0xbc26c640,0xbc1f1977,0xbc48aaab,0xbc3b19b0,0xbc390cb6,0xbc2f6373,0xbc627373,0xbc7c8304,0xbc8551ca,0xbc854153,0xbc8628b1,0xbc8b5bad,0xbc66b976,0xbc2f7965,0xbbfcce54,0xbb6111c0,0xba2a73dc,0xbb68a77e,0x3c9cd633,0x3cf1ae4f,0x3cc3f65c,0x3c71118f,0x3cf275e9, -0x3ce69bfa,0x3cf02657,0x3cf73100,0x3cdd1e9f,0x3cfc7e20,0x3d04f5e6,0x3d03a384,0x3d01ee82,0x3c765ab1,0x3cedd91a,0x3ce7a661,0x3c8336bf,0xbbff2e93,0xbb1bc32b,0xbb799b4c,0xbb6e2b6b,0xbb92c802,0xbbb05e73,0xbbbecb07,0xbbb9557f,0xbbb1815c,0xbbb4137c,0xbbc40487,0xbbc8cab0,0xbbce312a, -0xbb9cf448,0xbb8030a0,0xbb4a0fe2,0xbb112991,0xb940eef5,0xbb460200,0xbbb08e48,0x3b9b397d,0xbd0fe6b5,0xbd363e79,0xbcb85912,0xbcd8a40e,0xbd2a4afb,0xbce7b19a,0xbcfb5a34,0xbcf699a7,0xbcbd362d,0xbcdd63a0,0xbcd9ce89,0xbcc016c8,0xbd2a503e,0xbce4d906,0xbca7b1bc,0xbd283a5d,0xbd0bec4b, -0x3bf05141,0xbb1b962c,0xbad3d9d4,0xb9abd5e1,0xbad590f6,0xbb05fe59,0xbb544abf,0xbae9bb8f,0xbac8c0f9,0xbaccdbb8,0xbb6bc47a,0xbb9e3b84,0xbba43dc6,0xbbdb470d,0xbbec57d9,0xbbce3d38,0xbbcefa9f,0xbbf664e4,0xbc347c47,0xbd10a7c1,0xbc51a4f6,0xbcc96a2d,0xbc9c269a,0xbc31f023,0xbc0ec980, -0xbba5c0b6,0xbc583ac3,0xbcc20090,0xbc7d8365,0xbc182e70,0xbc5a660f,0xbc659737,0xbc1ebd49,0xbc882a11,0xbc076254,0xbd049e69,0xbbc5f8a9,0x3ae4153c,0xbb9454fd,0x3b1933bc,0xbaa4aca1,0xbabf49a1,0xbb91d18c,0xbad91117,0xbb46018d,0xbbd47d7d,0xbc3cc835,0xbc67f0ee,0xbc4f0606,0xbc85ece2, -0xbc8e4f15,0xbc5c6ba2,0xbc6a3c9b,0xbc33a453,0xbc2aa884,0xbcdb7117,0xbc99a2e5,0xbc9a521d,0xbc5973dd,0xbc19801b,0xb95d0f9f,0xbc49c9aa,0xb8ec2a93,0xbc8d9fbc,0x3b84a055,0xbc1f5d21,0xba3169c5,0xbc375fcf,0xbb6c57f9,0xba9c7d99,0xbbb1f5ac,0xbcb564d7,0xbbcecdc8,0x3c1057c2,0xba84f9c3, -0x3c0a65ed,0x3916be57,0xba83660a,0xbc1ccde4,0xba3a15e9,0xba652fbf,0xbb7e0cb9,0xbc410b75,0xbc9a47f1,0xbc8f2cf3,0xbcfcecd6,0xbd10c08f,0xbcac12c3,0xbcb69809,0xbc4c17a8,0xbc85b5fc,0xbce4b9d3,0xbcad1931,0xbc5925bd,0xbbb81e2d,0x3b66c87a,0x3c7c6b43,0x3bbcc24e,0x3b2931eb,0x3c155f70, -0x3c354f09,0x3c19de3e,0x3c1029d8,0x3c123ab1,0x3c864b14,0x398fc13c,0x3c1378ca,0xbcb1e270,0xbae6d98c,0x3c3c6138,0xbbac2050,0x3c6116a0,0x3b54ace5,0xb96f5f3d,0xbc486f62,0xbb56b0b3,0xbb606fbf,0xbc606a29,0xbce132c1,0xbd19dcf0,0xbd01a384,0xbd4d184f,0xbd5a0b62,0xbce620f4,0xbce1104d, -0xbd0c33ad,0xbd6b1f35,0xbd80248f,0xbd15d095,0xbcdaecf7,0xbcd4bd3e,0xbc91c37e,0xbbefb7e0,0xbb94e7d9,0x3b9fc547,0x3bd9089a,0x3c1059b4,0x3c491afa,0x3c66e395,0x3bd3fcdb,0x3bf8e8c3,0x3ae85a98,0x3c018862,0xbca850bb,0xbc9d6a99,0x3cceaff9,0x3c972cd2,0x3d0a0dc3,0xbc64071e,0xbc42fcba, -0x3c7f25b5,0x3ca4c1f4,0x3c8260a2,0x3b92e6bf,0xbb53398b,0xbc1afe72,0xbc823a32,0xbc9f6ac5,0xbcf0fec9,0xbd428201,0xbd3a8142,0xbc8b09c4,0xbc9268aa,0xbd24d41e,0xbccaf10d,0xbcac2c6c,0x3acc423e,0x3c5626db,0xbb9261a8,0x3a7dd7bb,0xbb6a75ef,0x3afd9cbc,0xba9ed534,0xbaa4c6aa,0xbb592758, -0x3c73a927,0x3c735429,0xbabc5821,0xbbbb0793,0xbc982196,0xbc80de58,0xbc4d8450,0xbcda5580,0xbcb7be57,0xbc8076d1,0xbcaba1d6,0xbd38597e,0xbd2493a3,0xbd0e0de4,0xbc995b96,0xbd231eb6,0xbd212591,0xbce7d918,0xbd12b1f6,0xbd0b4921,0xbce873f9,0xbd12051f,0x3d4aff39,0x3d662484,0x3d1ac46e, -0x3d3ba222,0x3d217f03,0x3d020805,0x3c770b36,0xbb9fdd45,0x3be3b7a4,0x3bad4724,0x39b70d5e,0x3b451278,0x3bda73d7,0xba267703,0x3c2eb3c1,0x3c5f4b13,0x3ae8277d,0xbb0932da,0xbc9937c2,0xbc12a7d0,0x3b30c973,0xbc4158f1,0xbcac3dbe,0xbd10d713,0xbd0ecbf1,0xbcf209d0,0xbbd457b2,0x3be1e7f3, -0x3cbd20a8,0xba214a46,0xbc8e0bed,0xbd2e52cd,0xbd44ed45,0xbd2e653e,0xbcf1809c,0x3c9c0137,0xbd6ea8ce,0xbc8e991c,0xbae2fec4,0xbaba8a8c,0x3c0d1ca5,0x3c700493,0x3cb754ef,0x3cac12cd,0x3c3382df,0x3b777d7d,0x3b161520,0x3b60f0e6,0x3aa79a24,0xbbdea3d5,0x3ad7fb35,0x3a07fe24,0x3b3c5160, -0xbaf4301e,0xbc933662,0xbc677fea,0xbc4d009a,0xbcd1801b,0xbd00156b,0xbd281345,0xbd357d83,0xbd40ad05,0xbd540ead,0xbd6f61e1,0xbd5ff7b7,0xbd6fadea,0xbd00c1fb,0x3c63d972,0x3c9872dd,0x3bd0a0b5,0xbd33ae71,0xbd73bc8d,0xbd428afa,0xbd3dc485,0xbc752457,0x37af4b4d,0x3b6526e1,0x3bf9eed6, -0x3bea4d62,0xba51e939,0xba2843f5,0x3bfcbdd9,0x3c25ec2a,0x3c1bfc39,0x3c1c565e,0x3bb63781,0x3c931c08,0x3c928a2e,0x3c4290ee,0xba81bbf1,0xbc3ada6c,0x3b0f1f8c,0x3b25602c,0x3aed27f2,0x3c1777c4,0x3b86106a,0xbb9b68df,0xbc8ab995,0xbc67d0f7,0xbc5a675c,0xbbe2b56c,0xbc453e27,0xbc74ad57, -0xbc1a04e4,0xbccbba09,0xbd08b037,0xbd267599,0xbd540ad1,0xbc85390d,0xbce2024b,0xbc325d0e,0xbc334c4f,0xbb2dba18,0x3b362c37,0x3c41f741,0x3bfea5c6,0x3c84f4f8,0x3c85093e,0x3c3f9d84,0x3c2e0a7a,0x3c24c545,0x3bbdb1f7,0x3a325cfe,0xbb28ed8c,0x3b0ecd7f,0x3ba13fcb,0x3c09aa59,0x3bf921b7, -0x3c49750c,0x3c2df347,0x3b82542f,0xbc428557,0xbc43f414,0xbba62338,0x3b4ec1ec,0x3bb63568,0x3b91d714,0xbc72c4b9,0xbc7834dd,0x3be356a9,0x3ba6672e,0x3b901687,0x3b9ac32d,0xbc52d5f6,0x3b415d8f,0xbb980237,0xbc529bb6,0xbc221352,0xbc43259f,0xbbfcd50c,0xbb5d2ffb,0x399f3c55,0xba1e8908, -0x3b7a2e78,0xb908c886,0x3c0c9cc6,0x3bf66668,0x3c4c7b89,0x3c17b03d,0x3c0e5866,0x3b879810,0x3b978b32,0x3a9095b2,0x3c133728,0x3c8bc431,0x3c7bdb6e,0x3ca27af9,0x3c8a46c6,0x3c69b6a3,0x3c2e59d3,0xb8c5eb96,0xbc33d3ab,0xbcabe15b,0xbc67c48f,0xbc29b3c4,0xbc127c02,0xbbde7cf5,0xbb477ed8, -0x3b43b6f6,0x3a9a3987,0x3b18e765,0x3a0d958e,0xbab9cc71,0x3bc0831c,0x3b0ac930,0x3bc10ad3,0x3c105968,0x3c27b9d1,0x3c316763,0x3bb7e8a1,0xb9f5668b,0x3a21a2f7,0x3b6c4c25,0x39c5f232,0xbad30867,0x3904e10a,0xbb846cbd,0xba188ac4,0xbbfcdc99,0xbb0d45ab,0xbb16d18f,0xbbc40fdc,0xbbf85789, -0xbc16b57b,0xbc229b5d,0xbc261af7,0xbbd49b18,0xbb48077f,0xbb2815b6,0xbb463504,0xbb9104f0,0xbba6d1d6,0xbb2f9cc2,0xbb1efe98,0xbb05af46,0xbae22bfa,0x3b730bdf,0x3bd51145,0xbc547c2c,0xbc6d69b0,0x3a8c60ce,0xbc068dd3,0xbc571dff,0xbb14708a,0xbb481534,0xbb2369d9,0x3a07dc73,0xbaaf05e9, -0xbb03a308,0xba3ab6a2,0xbc7fd341,0xbc237656,0xbae80f6c,0xbc81778a,0xbc48aba6,0x3bc56945,0x3b3d980a,0x3b585861,0x3b5b28ca,0x3b4d27dd,0x3b392489,0x3af488b7,0x3af5fbf5,0x3ac68a55,0x3b060878,0x3af3932f,0x3b059f60,0x3ad1fa5b,0x3ad93f9d,0x3b0852bc,0x3b43bdaf,0x3b55dbf4,0x3b8e719c, -0x3c8439be,0x3c4ba629,0x3c25d7de,0x3cfd0863,0x3cc02d8b,0xbc7481ac,0x3d03c33d,0x3cd44145,0xbb40c628,0xbb94ff43,0xbbbd26a8,0xbc28fe07,0xbc127566,0xbc1a79b6,0xbc436d04,0x3cda70e2,0x3d0ad42e,0xbc76cf8e,0x3ccb6a35,0x3d0aee34,0x3c6ee62a,0x3c6c6c29,0x3c80d23e,0x3c8066e3,0x3c7388ef, -0x3c7536af,0x3c85a019,0x3c81ad4c,0x3c812386,0x3c81e77d,0x3c855549,0x3c91ee2b,0x3ca5092e,0x3cb67e77,0x3cb17d1a,0x3c91f96d,0x3c7e9b77,0x3bf4aab7,0x3c528ea0,0x3bea06d7,0x3c46098d,0x3c5dfd46,0x3c46cbc5,0x3c86018a,0x3c895e4d,0x3c7f0938,0x3ca7bb21,0x3cbb109a,0x3cb83a3e,0x3c8ac004, -0x3cb58fbf,0x3c79dfe1,0x3c7ff0df,0x3cd71dbc,0x3c9adef7,0x3c69a6c8,0x3cd52380,0x3c8ba1e1,0x3cb3ae80,0x3cb22bad,0x3c9d149a,0x3c955b65,0x3ca5a057,0x3c930c6d,0x3c91b457,0x3c993869,0x3c943fa0,0x3cb15f17,0x3ce38b60,0x3d109618,0x3d09f371,0x3cb01e85,0x3c883acb,0xbba3ede0,0x3aa05fac, -0x3c46413f,0x3bdc1de2,0x3b1f5adb,0x3bf73fe1,0x3c2ed7e3,0x3c7e326e,0x3c35ba36,0x3b69306a,0x3c67a8a7,0x3bc82ff3,0x3c38b1e8,0x3c94c8d1,0x3c8bb35e,0x3c975ad6,0x3c9f48a4,0x3ca8b44c,0x3cdd48eb,0x3cc946f0,0x3c8d71c3,0x3cadb155,0x3cb5f717,0x3c8f0127,0x3c8960d8,0x3cbfede2,0x3ca09a44, -0x3c9af31a,0x3ca40c99,0x3cb07939,0x3d06d146,0x3d3ed569,0x3d7f6713,0x3d62cfee,0x3cac727f,0x3c11a0bd,0xbc9ab2a7,0xbc692cdf,0xbc3b5bef,0xbc6221ac,0xbc3dce9a,0x3a450716,0x3b94d98d,0x3c23b0ce,0x3b4e43fc,0x3b77a3da,0x36b2883d,0x3be6469d,0x3c0f040f,0x3bd20d40,0x3c07385c,0x3c2e5abd, -0x3caed479,0x3c643f0a,0x3cbf4d8d,0x3ce0f415,0x3cc0af51,0x3d04b92e,0x3d0c9141,0x3cdc023f,0x3cd8123b,0x3cff0d51,0x3cb40078,0x3c9f278d,0x3ca49895,0x3cb2c737,0x3d147a6d,0x3d7145fb,0x3dadba12,0x3d9617d1,0x3c89c738,0xbb071ef4,0x3c36099d,0x3cb11b43,0x3cdb5cb8,0x3c8deee7,0xbaff6bde, -0xbbf21b99,0xbb2a0b10,0x3c0f6209,0x3b45da13,0x3be71de0,0x3ba68109,0x3bfb1d2f,0x3c41b2bd,0x3c9f5b1f,0x3c48a882,0x3c33bf70,0x3ca103d4,0x3c87f058,0x3cbed3bf,0x3cabe961,0x3b339343,0xbafe3f07,0xbbdcf4d3,0xbbb181ec,0xbc8c0723,0xbd0f09d6,0xbca33e46,0xbc3a339d,0xbc8e7272,0x3bf3ef66, -0x3cc15c4a,0x3d0a6e3e,0x3cefe123,0x3cbcbae7,0x3c3f16fc,0x3c5b6556,0xbd27a277,0xbcbc1581,0xbc0e1463,0xbbe69473,0x3c3a1b2d,0x3ca4b839,0x3c6c0791,0xbba93dca,0xbb09accb,0xbb42bc65,0x3b6d571b,0xbafbb11b,0xba989ead,0xbb61623c,0x3c92ebf3,0x3cbda1c8,0x3c91135f,0x3c29c68b,0x3ba9465d, -0x3c5ef5cb,0x3cd4dedd,0x3d10ae48,0x3d2695cd,0x3d0b683f,0x3d070c82,0x3cccf8a7,0x3cd30fb2,0x3c04933c,0xbc7273dc,0xbcdbcc99,0xbc2a36b7,0x3d1a739e,0x3d596b10,0x3d4b9b4a,0x39ad4675,0xbcba6101,0x3d90801b,0x3dabb1a8,0x3d62d832,0x3d4344eb,0x3d4ac563,0x3cf5b6b7,0x3c90bacc,0xb920e07b, -0x3c104a26,0x3b24dca1,0x3a354f69,0x3b0e8efd,0x3b24fcef,0xbae97a43,0x3c18626c,0x3c6b42f9,0x3ca9e636,0x3bc78676,0x3c0a8ff5,0x3b0d2b8c,0x3a30ec51,0x3b2f5b04,0xbba6394c,0x3a0fbe4a,0x3c6b673f,0x3cd91ac3,0x3d1d69e9,0x3cd35efb,0x3becb5c2,0xbcdd6670,0xbc496d03,0x3d7ce914,0x3d5099e1, -0x3d7a8f88,0x3dced54f,0x3d960cd0,0x3d5b17b6,0x3b3ee5b6,0xbb826add,0x3ca01155,0x3c51b2f2,0x3ce74178,0x3cc0edcd,0x3cb5c085,0x3bfa9d95,0x3ac0a369,0x3bea28bc,0x3b77adde,0x3b0f09cc,0x3c02b656,0x3c1087d0,0x3c24b09d,0x3ca6c684,0x3bfb2788,0x3abe4517,0x37d61508,0x37930b16,0x3a2c852f, -0x3ad5ff49,0x3c36f180,0x3c505156,0x38eacde0,0x3c2b1938,0x3b8d4f23,0x3c12752f,0xbbf71585,0x3c333cfc,0x3d49213f,0x3ddcf957,0x3e11d5e6,0x3e20ed73,0x3dc5d2fd,0x3dc16fa5,0x3d85cfc1,0x3c5c643c,0x3cb0e0d1,0x3cc1e7c8,0x3c8243b5,0x3c57583f,0x3c759a38,0x3c64e68f,0x3c87fe00,0x3cc69669, -0x3c6a82cc,0x3c48f511,0x3c3248c7,0x3c8f9344,0x3c89506e,0x3c29aa3b,0x3c68546f,0x3c7d1df4,0x3c6a6b76,0x3c0cb93e,0x3be1259e,0x3b9540ff,0x3b6ba198,0x3c3b8dd0,0x3d017738,0x3d38dd00,0x3d7866c4,0x3dac740d,0x3d64d965,0x3d5dd728,0x3d914222,0x3d8fc9c2,0x3d948c2f,0x3d80cdb4,0x3da6eee2, -0x3ce10c2a,0x3cd8b22f,0x3b08ec63,0x3c880653,0x3c8a87ed,0x3cb559ea,0x3ca263d2,0x3c7a04f7,0x3c8f2355,0x3c7befb9,0x3c5eadde,0x3c430d74,0x3c2e39d7,0x3bbc6f8f,0x3c0564b8,0x3c797185,0x3cc06d66,0x3c8742d7,0x3c3dbd7e,0x3c2825a4,0x3c6e5948,0x3c970e1b,0x3cb215a7,0x3d3614e5,0x3d57f2ea, -0x3d444d66,0x3d0eef6a,0x3c639aea,0xbbf615aa,0xbc069742,0x3add89ce,0x3cd24964,0x3cd628fd,0x3cdf68f2,0x3cb498be,0x3cd924b7,0x3c92f837,0x3c3ff3a5,0x3c928248,0x3c99f355,0x3c75ca34,0x3c5f0a0a,0x3c47a6e2,0x3c49a7a5,0x3c20fb91,0x3c0f0eef,0x3c229a3d,0x3c377765,0x3c49af59,0x3c941837, -0x3c5ab568,0x3c1e5089,0x3b85a416,0x3c277137,0x3ca1a706,0x3caa6f99,0x3c7450bf,0x3c708760,0x3c275448,0x3c0f9a87,0x3be8b28e,0x3bf5b447,0x3c122720,0x3c5980b8,0x3c8737ce,0x3cc0c221,0x3cd926c5,0x3cf54b45,0x3ce87f12,0x3cf230bd,0x3d004fbe,0x3ccbccf1,0x3cb7dfa2,0x3cd9b7ae,0x3becdc0f, -0x3ca7dec0,0x3c9c1a9a,0x3c99e790,0x3cb6c254,0x3cb9ffbb,0x3cc243c5,0x3cdad4f4,0x3cdb8273,0x3ce54401,0x3cc12f07,0x3cc823f2,0x3c92bfa8,0x3c654535,0x3c8a217c,0x3c1da6b8,0x3ad9a757,0xb8060a2a,0xbb435527,0xba9d4fed,0xbaa1fd4c,0xba83f680,0xba96beef,0xbafbb995,0x3a6cae36,0x3b6a266f, -0x3bde9286,0x3c35f34d,0x3c86060b,0x3cb74a35,0x3cb842b5,0x3cb8d584,0x3cb99806,0x3cbc5650,0x3c9ca9a5,0x3cb071df,0x3cda200c,0x3c9e586f,0xbb86bcf8,0x3cec2feb,0x3ca85bf6,0x3b17879a,0x3ae2b5a1,0x3a83ae5a,0xba6981eb,0xba8cd657,0xbaaeea78,0xbb1b96ed,0x3cb1b04b,0x3cd772d8,0xbb9968f9, -0x3c8af0f9,0x3caa9380,0x3c2e0782,0x3c3fd69f,0x3c3fe9f9,0x3c38264d,0x3c37938b,0x3c353b98,0x3c293087,0x3c5380a2,0x3c730113,0x3c886b6f,0x3c92aa7d,0x3c9a4a60,0x3ca88c94,0x3ca1bd0b,0x3ca18dd8,0x3c9e5501,0x3ca501b4,0x3ca8bb38,0xbcc997fb,0xbcb768c9,0xbcde6409,0xbccfb071,0xbbb326fa, -0x3d0a59a9,0xbcfbbc07,0xbbf7d4dc,0x3ce717c8,0x3ceb1192,0x3cee70ee,0x3cf549d5,0x3d0291f7,0x3d06ffdf,0x3d130ed9,0xbbcee320,0xbce28623,0x3d254fcc,0xbb467155,0xbcb8ae72,0xbccff71b,0xbcac2e28,0xbcc6a0ab,0xbcc3e8b9,0xbcc7f15a,0xbccb5687,0xbcd00026,0xbcd2743c,0xbcd6eb07,0xbcd1d9a8, -0xbcef9ccb,0xbcf4c1b5,0xbcde190e,0xbcf2c3ff,0xbce9bb00,0xbcc34d0c,0xbcce5967,0xbcc77e85,0xbd045653,0xba9b858a,0xbcdf9b79,0xbc8d83f6,0xbc079bf7,0xbc6a2b80,0xbc252e13,0xbc954046,0xbcb5ca1c,0xbc92ee6f,0xbcbd6158,0xbc8d8c65,0xbc712019,0xbbad2a5f,0xbbdb82eb,0xbc6bf65b,0xbc31551b, -0x3c375cd9,0xbcc808d4,0xbcc0abf7,0xbceba138,0xbcf5692c,0xbd02a96b,0xbd04898b,0xbd053d96,0xbd034d56,0xbd0610fd,0xbd0097d3,0xbd256939,0xbd2d415f,0xbd0e3f6f,0xbd2a5256,0xbd1b3004,0xbccf0917,0xbce3c5b6,0xbcea7baa,0xbcfa982b,0xbce6bd1b,0xbcbac0ef,0xbc614028,0xbbf9dfd3,0xbb26c11f, -0xba13955f,0xbaf7f128,0xbbd495e6,0xbbfa22e1,0xbc3cfd2a,0xba27f7a8,0xbb0dc69e,0x37da487c,0xbb8bed37,0xb97a8404,0xbad7a19c,0xbb9d6f5f,0xbc6ea551,0xbcd6287a,0xbcf75d08,0xbd0b16ca,0xbd109944,0xbd187e25,0xbd236aca,0xbd2920aa,0xbd3ac743,0xbd277e80,0xbd78f85b,0xbd85088e,0xbd469e30, -0xbd8343be,0xbd5de990,0xbccd1c17,0xbd060f09,0xbcabd7f5,0xbce78182,0xbd069dc7,0xbd06c232,0xbcb525b5,0xbc1bd50c,0x3b0a3508,0x3c497867,0x3ae02bd8,0x3a6cbf5e,0x3a07cb36,0x3c035456,0x3bafbe88,0x3c2b8286,0x3bb3c437,0x3b9f397c,0x3c288e07,0x3ba3dbbd,0x3c0e7eea,0xbbf483b4,0xbcd158f3, -0xbd14e4ba,0xbd3b876d,0xbd4eeb7c,0xbd59ed54,0xbd51f66a,0xbd5579ec,0xbd53ff00,0xbd36d450,0xbd9ccbf5,0xbdaa9dfb,0xbd6f6e4c,0xbda11c22,0xbd7bf136,0xbc7a4c9a,0xbcc81868,0xbd94db9a,0xbd35f0db,0xbbf4b334,0xbb66a586,0xbb819cff,0xbbcbd189,0xbc1ae194,0x3a32eb68,0xb8bcc751,0x3a400533, -0x3b04aef2,0x3b2886a7,0x3beb238f,0x3c7a15f5,0x3b89ac3f,0x3ad2d220,0x3c096ee0,0xbbd842b6,0xbc49056e,0xbcecef19,0xbd1d6050,0xbcd700e3,0xbcac38c0,0xbc8f64ce,0xbc7b0c42,0xbcbbda7b,0xbd18ac3f,0xbd3eb360,0xbd84e9d5,0xbd1c901d,0xbd1596a9,0xbd48fcbf,0xbd6ad599,0xbd7eea49,0xbd8901a8, -0xbd969a87,0xbd2567ac,0xbd390c0c,0xbd52a0a7,0xbd1ce505,0xbc91cc90,0x3b239160,0x3c0c5c68,0xbc0edc89,0xbb595d39,0xbbad4ce9,0x3a6a9d3c,0xbaaf138e,0xbb0d48b4,0xbae4ea03,0x3c3ac79d,0x3c235a29,0x3b21a058,0x3b3e4f0a,0x3c134ba0,0xbc44be24,0xbd1456b0,0xbd3b4e24,0xbd6eca31,0xbd412849, -0xbcf7a5a8,0xbca4081a,0xbb1b3c66,0xbc1c4f02,0xbd34edde,0xbd3a32b0,0xbd419ba4,0xbc7543d5,0xbcd9c1d4,0xbcdb4f66,0xbce37bcc,0xbd036a09,0x3cf97eb4,0x3d6278fe,0x3d8debf3,0x3d5f1c43,0x3d644e01,0x3ca6730a,0x3c1007fa,0xbbb0b52e,0xba0f8870,0xbb4ed2b1,0xbb1e1719,0xbaf293f9,0xbb863d97, -0xbb432958,0xbc12d77b,0xbbe8fa6c,0x3ca5b7db,0xbb6cabdd,0xbc7e4410,0xbc98cc47,0xbc0500b9,0xbc18b2fa,0xbca55b41,0xbd2897e5,0xbd851882,0xbdc0d786,0xbda0ad1c,0xbd96e240,0xbd9cbcd4,0xbdb21951,0xbddf59db,0xbdd6f58f,0xbe2a41ee,0xbe1cee91,0xbdd0bbe7,0xbc3e289e,0xbd325fb1,0x3c45aa84, -0x3c09a128,0x3ae5cf92,0x3cb60e2d,0x3c84d4d6,0x3ca75efa,0x3c55d6f4,0x3a5f20e1,0xbb26d94f,0x3b1177ac,0xba351b5a,0x3a1bc955,0x3be16c64,0x3b4b6704,0x3bbb5331,0x3c985b43,0xb89d3af7,0xbaa5dbfb,0xbc27ef61,0xbd0449c6,0xbd31ef4b,0xbd306131,0xbd3cfcdb,0xbd1648f3,0xbce1810c,0xbcdbd2e4, -0xbd25c527,0xbd5d1d3c,0xbd8e587e,0xbd76d7ec,0x3a629419,0xbd1476df,0xbd66d91b,0xbdaff055,0xbd7a2c36,0xbda9fe62,0xbcc398c7,0x3d06881c,0x3c699059,0x3c1dfbb5,0x3c4ec663,0x3bf609ff,0x3b54859c,0x3c1ea4a3,0x3c1f1e23,0x3c8a49d1,0x3c165e0a,0x3be1d265,0x3b924bc8,0x3c34d8a6,0x3c36a907, -0x3c0e9457,0xba1dfa95,0x3a9956de,0xbc07743c,0xbc1ceaec,0xbbe229bc,0xbc5415a9,0xbccb1073,0xbd09401d,0xbd32169d,0xbcfe76d7,0xbcf51b2d,0xbd2d93aa,0xbceaa867,0xbcf024ef,0xbcca97e1,0xbd7b085e,0xbd9f5505,0xbdb13872,0xbda86b61,0xbd24ba5d,0xbce84db3,0x3c12d496,0xba8264a7,0x3c3a6202, -0x3c11f342,0x3c1dbd7a,0x3c2f00b1,0x3b974fc6,0x3bb0eefe,0x3c1ecca0,0x3bb4222f,0x3b1d45ec,0x3aaa89b6,0x3b694daf,0x3bc5bf58,0x3bac4da1,0x3c42fd1c,0x3c597cf4,0x3c2e1733,0xba416771,0xbb85588f,0xb992d071,0x3c1a521c,0x3c7211da,0x3c7c96fc,0x3c337c2d,0x3bbbc3ae,0xbb12022e,0xbac58e6b, -0xbc52ae7b,0xbd0e0dea,0xbc966c61,0xbca64cfc,0xbd11f7ad,0xbd0e16b2,0xbc389818,0xbc0905ac,0xbb871930,0xbbb8ffa1,0x3b2762c7,0x3b00a522,0x3b91e843,0x3ba8a27e,0x3c02e6f3,0x3b53acd9,0x3b8e5f37,0x3b3d6169,0x3c67955e,0x3c5eaa5c,0x3c2a6aa1,0x3a73c001,0xbb634d2c,0xbb4d22ea,0xbaafd561, -0xbc0bc14a,0xbc0e023b,0xbb0ea095,0xba323c3b,0xbb18c016,0xbb78f509,0xbb2cbb27,0xbc07091c,0xbc3c9d3e,0xbc75f19c,0xbc75f047,0xbc4cf0d6,0xbc46763a,0xbc47b0a9,0xbc4d9ce9,0xbc299513,0xbc142efe,0xbaadc4f4,0xba81cbf7,0x3cd51be3,0x3b8a5096,0x3c2aeb43,0x3c3a8989,0x3b880db1,0x3bbf85a3, -0xba12b90c,0xbadd8d78,0x3acd05a4,0xbb8c5609,0xbb99b01e,0xbba25a53,0x385c701f,0x3ad63a7c,0xbba1fea8,0xbb207aa6,0x3b85c18c,0xbab9711f,0x3b5b6e0c,0x3ad9f848,0x3b3a3d47,0x3b64d7e4,0x3b8c98fd,0x3bad2644,0x3b117075,0xba9418cc,0xbbaaccb4,0xbc15fe86,0xbc646f9e,0xbc924d79,0xbc6f048d, -0xbc3660c3,0xbc02baad,0xbbb4316f,0xbb75ce5c,0xbbd5f86d,0xbab3f9ec,0x3c3462f2,0x3d06297a,0xbc081bda,0x3c0053c3,0x3cebc1f9,0x3cf70b9a,0x3cfc3fa7,0x3cfbfab1,0x3d056683,0x3d0906b4,0x3d0b1de2,0x3bb86aaf,0xbc0490a2,0x3cf7d0a9,0x3bc353ad,0xbba1d14f,0xbb8f96cc,0xbb456e24,0xbb6191ae, -0xbb3e7568,0xbb2999fe,0xbb148722,0xbabdee16,0xbb51d9dd,0xbb8d2683,0xbbb18782,0xbbdd7ac9,0xbc03ade4,0xbc32f24f,0xbc0fe1c6,0xbc039db9,0xbbe6a0b9,0xbbc87acf,0xbbf48dff,0x3cd879aa,0x3c9b61f4,0x3d03df65,0x3c20eb36,0xbc84f367,0xbd450c6a,0x3cb46c40,0xbc1890b1,0xbd252cf8,0xbd30a4bc, -0xbd33241e,0xbd2c1e38,0xbd3ac860,0xbd3b9892,0xbd37ab72,0xbc218918,0x3c9f6dba,0xbd4748de,0xbc49ea71,0x3c3c1dab,0x3d0993f7,0x3cc3a51b,0x3cdfa6a2,0x3ce42445,0x3ce2dc04,0x3ce09898,0x3cd85ac3,0x3cd869fd,0x3cdb09ef,0x3ce859c9,0x3ce4a639,0x3ce977a9,0x3cf8b75b,0x3cee0404,0x3cd88a12, -0x3ca1b9de,0x3cafdc3c,0x3c6d4bba,0x3cdd36d5,0xbcdb6702,0x3c9ef711,0x38312f30,0x3b22667c,0x3c8068b6,0x3c4eff49,0x3ca857c2,0x3c980a2f,0x3bff7bc5,0x3c8c1ff6,0x3c824f04,0x3c91a370,0x3bb93c5b,0x3c26a23e,0x3c823f82,0x3c8cb04a,0xbc84b939,0x3d000279,0x3d01734a,0x3d0783b0,0x3d12f675, -0x3d122488,0x3d0d7b46,0x3cffb888,0x3cfe7d18,0x3d024293,0x3d1369e4,0x3d0ee511,0x3d1c8abf,0x3d30b12e,0x3d2d9b03,0x3d0f1146,0x3c82d733,0x3c70e3f4,0x3c34bfe2,0x3cb6b180,0x3b2a18c6,0x3c126ea9,0xbc0f9958,0x3b7892d8,0x3bce9077,0x3c3caf32,0x3af3659b,0x3bf5fc0d,0xbadc1079,0x3c484a9e, -0xba0db902,0x3c93fe82,0x3bd8bde3,0x3c8348ce,0x3c606e0f,0x3c7bbc26,0x3c3f6708,0x3cc685e9,0x3d1df99a,0x3d168326,0x3d38469b,0x3d343f78,0x3d316a1c,0x3d1f822b,0x3d15d464,0x3d1b7436,0x3d462136,0x3d3e63e4,0x3d556873,0x3d6f13e6,0x3d4fbb16,0x3d073074,0xbb177b7f,0x3b835ed3,0x3acc0efd, -0x3c8d6e88,0xba96d681,0x3c0f1311,0xbb82a89b,0x3c00e2cd,0x3c43ba90,0x3c604bd9,0x3bf1a212,0x3b2c4c88,0x3b6c8d04,0x3b7a297e,0x3c2469dd,0x3c97c4af,0x3c776b30,0x3cac233f,0x3c500f95,0x3cd0d9a4,0x3c4739ef,0x3cd5cd3b,0x3d38ad35,0x3d46c0a0,0x3d715a33,0x3d7147e9,0x3d6870a8,0x3d496f4f, -0x3d38641b,0x3d3f5d87,0x3d7858cb,0x3d674520,0x3d8a3988,0x3da665c1,0x3d94865f,0x3d2c6778,0xbc275a1f,0xbc54a03d,0x3ce1cc85,0x3b2870a7,0x3bbd2c6b,0x3c33d5f2,0xbc87bbd6,0xbc37073c,0xbadd8253,0x3b427a9d,0x3b16ef1b,0x3bb9e600,0x3b8532fb,0x3b680aaa,0x3bfb7af7,0x3c6c08f7,0x3c06a235, -0x3c3095a3,0x3c23eed9,0x3c96af1a,0x3b2e2a14,0x3c7a0d71,0x3d0ab3ac,0x3c6191fb,0x3c423925,0x3c9c6d94,0x3c9deffb,0x3b99dfb5,0x3c38162a,0x3c82864a,0x3ccab88e,0x3d596926,0x3d713785,0x3d319573,0x3d1fc7ce,0x3cf0e4d4,0x3c01ffc0,0x3c39b886,0xba872eeb,0xbc85dae3,0xbcab55a4,0xbc1a93aa, -0x3c8bee59,0x3c55b1cb,0x3c3d44b0,0xbba562b8,0x3b56661d,0x3acd9b8c,0x3b5a8f2d,0x3b0db19e,0x3a202aa2,0x3ba6ef7a,0x3c967b06,0x3c9cbba3,0x3c64b25d,0x3c0a6c00,0xbba9ceac,0x3c1fa753,0x3d1a0208,0x3d3b4380,0x3d86d865,0x3d1b2225,0x3caf8ae8,0x3c0297f2,0xbc0e648f,0xbc98e93d,0xbd1e298f, -0xbc8bbbb5,0xbb2a63e2,0x3c9d6ea4,0x3c79023d,0x3c22d2fb,0x3b833898,0x3c04f23e,0x3cf1cb54,0x3d3c94d0,0x3d3af811,0x3d350dce,0x3d2e7b2b,0x3c7da1a3,0x3aec9a04,0x3950a3c1,0x3ad8324a,0x3b02a749,0x3b0db82a,0x3b81d527,0xbaac7845,0x3acd4d9c,0xbbbf131e,0x3ba3abda,0x3ce6ee9f,0x3c944d82, -0x3c0d7dd4,0x3c08a814,0x3c0c125e,0xbba5a89d,0xbb06308a,0x3cddf329,0x3d4d54cc,0x3d4d7aae,0x3d78993f,0x3d37be2f,0x3b71e265,0x3c5d7f8b,0x3d08775e,0x3dad6888,0x3d422f08,0x3d006019,0x3ce455cf,0x3c35f8da,0x3d838fd7,0x3c273f67,0x3c2e5a5c,0x3cda0fb2,0x3cbe86f7,0x3cfcc080,0x3cc043c2, -0x3c8d9c2f,0x3aab79cc,0xbb101e00,0x3a8935ad,0x3b366212,0x3b2a27a3,0x3c0a9f0f,0x3b8ffd3d,0x3baa35c8,0x3cc70415,0x3b6a8f13,0xbc37503d,0xbabb402d,0x3c3202a5,0x3c8fdb79,0x3cc0eceb,0x3c8921cc,0x3c395139,0x39e68eb1,0x3c8e14ea,0x3c120ada,0xbcd023d2,0xbd155d89,0xbcc59572,0x3d1d2588, -0x3d9ce0a9,0x3df97425,0x3e2919ad,0x3dc9824b,0x3daf32bb,0x3cf404c2,0xbcabea6e,0x3bc52f23,0x3c81f051,0x3beb71d7,0x3c24c988,0x3c61a24d,0x3c61625a,0x3ca738cf,0x3c9ecab7,0x3c6251a9,0x3c31df44,0x3c0cdaf3,0x3c163ce1,0x3c1a5a2c,0x3c5b38d5,0x3c1cd084,0xb9eae3e1,0x3b61fac7,0xbba62029, -0xbc839271,0xbc7a309e,0xbc9ea189,0xbc16c433,0x3be6fc66,0x3c5f80c4,0x3cb5bea2,0x3d183de5,0x3d6b84ce,0x3d9e96c2,0x3dda14c7,0x3dc82d94,0x3da524e8,0x3d8b1042,0x3d985883,0x3ccf2ccf,0x3c56ebae,0xbc8592d5,0x3b8f99b6,0x3bea0577,0x3c6128ab,0x3c8e97b6,0x3c4f59d8,0x3c4c5eab,0x3c281ce6, -0x3c7f6dc7,0x3c1030e7,0x3c0020e5,0x3c24e46d,0x3c79a942,0x3c7e6151,0x3c3209b5,0x3c13833a,0x3c0d66af,0x3bed2969,0x3c9fa29f,0x3cf0e9a9,0x3d19ec97,0x3d3ca305,0x3d3fb587,0x3d3f9ead,0x3d1b1d6b,0x3ce0a87f,0x3c2ac69c,0x3cb05e58,0x3d0b7e5e,0x3d546026,0x3d22c18a,0x3d169283,0x3d03f85e, -0x3cb10f96,0x3cc7c8e8,0x3c71e89e,0x3bd196f0,0x3c4c2ad5,0x3b853fd0,0x3bec9870,0x3c041fb2,0x3c4ae8d8,0x3bc569b4,0x3c27931c,0x3b373162,0x3c507252,0x3bdabdfb,0x3c4b1eca,0x3ba10a05,0x3b86f3af,0xba429962,0xba499921,0xbab18d44,0x3b1f25e1,0x3bbad61e,0x3b061dca,0x3aefd06b,0xb98c0913, -0xbaa10ce5,0xbb08cf8e,0x3bbf35c7,0x3c71700a,0x3cba423c,0x3ced46b9,0x3d009715,0x3d130d39,0x3cf7f7e3,0x3cd25c9c,0x3cbe46ae,0x3caa6335,0x3c9872eb,0x3c9985d8,0xbbc115d3,0x3c758ab2,0x3c01e772,0x3bebfdea,0x3c57a582,0x3c3f968d,0x3c8a92f9,0x3c926074,0x3c40bc77,0x3c95daf3,0x3c9800cd, -0x3c916a1b,0x3c31d4b3,0x3c3f0f60,0x3c84c5d6,0x3c5a2e51,0x3a94b3a4,0x3c35e7b6,0x3c04e79d,0x3c1a3bbe,0x3c22dc7f,0x3c2723a3,0x3c30ea08,0x3c227c31,0x3c5d343c,0x3c830ef3,0x3c9ffdb3,0x3cb144a6,0x3cce3e08,0x3cf31f88,0x3ce2b758,0x3cd6407e,0x3cc15fdd,0x3cad2181,0x3c9f4d22,0x3cbe43b1, -0x3c2a559b,0xbb5ec688,0xbc910bca,0x3c839ea9,0xbb13b9d3,0xbc8d8433,0xbc97be86,0xbca0ad1d,0xbc95a6e2,0xbcaf70f0,0xbcbbe1ca,0xbcbd2257,0xbaa7b3b3,0x3c7ccbcd,0xbcb125ca,0xbb2187be,0x3c29c507,0x3c9ed510,0x3c870abe,0x3c8c705b,0x3c87904e,0x3c87658b,0x3c871d4d,0x3c84e126,0x3c919afb, -0x3c9a15fb,0x3ca258c9,0x3cb042d4,0x3cba7124,0x3cc902e0,0x3cba889f,0x3cb4ff74,0x3cb0d401,0x3cadd40b,0x3cbeba07,0xbca3dd75,0xbc8dbe10,0xbce47261,0x3ba67a62,0x3cf2d7de,0x3d32e3f0,0xbbd7df60,0x3cce3881,0x3d3a28d5,0x3d3ecb1e,0x3d3bd1e8,0x3d261100,0x3d3aa6ff,0x3d3da96e,0x3d3e191a, -0x3cda76ab,0xbaae6e9c,0x3d477bca,0x3cedcc40,0x3bf3b0e4,0xbce14749,0xbc8eff95,0xbcaaa86f,0xbcad9e4a,0xbcada19b,0xbcaff839,0xbcb31bc2,0xbcb34fe5,0xbcb33f6c,0xbcb0b84d,0xbcb55c3a,0xbcb3363d,0xbca78541,0xbcaaa88e,0xbca19d8c,0xbc80a37a,0xbc9f0a7f,0xbcb323d9,0xbca59c55,0x3cf0ae67, -0xbc86a378,0x3a79f9cc,0x3bd3fc65,0xbb63b4f3,0x3a0d8a30,0xbc3d2d23,0xbc1521c0,0x3af39ae7,0xbc09bf82,0xbc012df6,0xbaf96606,0x3c005bf2,0x3b844fa9,0x3b49c069,0xba474979,0x3d08b1dc,0xbc8602f3,0xbcc58e4a,0xbcc76d64,0xbce6b97b,0xbce4a1c2,0xbce729c2,0xbce49d72,0xbcdc62c9,0xbcdb2efe, -0xbcdd7531,0xbcee16d1,0xbce453fe,0xbcc18ee2,0xbcbe7887,0xbc9dfd9f,0xbc25f388,0xbc97d463,0xbcf8a1db,0xbc7355b9,0x3b94fd44,0xbb1f9e9a,0x3b075915,0x3b8bdae8,0x3be3dcec,0x3bb87eb9,0x3c193356,0xbbb57481,0x3bbb4ce0,0xbc5cbf8f,0x3c00912b,0x3a8b5625,0x3c5fc9c0,0x3ba8a1a1,0x3bed7124, -0x3c0bc04c,0x3c751235,0xbbb134e4,0xbcf249a8,0xbce11f3f,0xbd096d62,0xbd066c17,0xbd0c423c,0xbd109d95,0xbd127de1,0xbd12e2c2,0xbd0d96b5,0xbd1e1c84,0xbd139b9d,0xbce4e507,0xbcdf4790,0xbc996a6a,0xbb63ef39,0xbcbcbf17,0xbd195bbb,0xbc298808,0x3b3e5756,0xbc480ee4,0xbc3b8ac2,0x3b8b0760, -0x3bd3d3f8,0x3c1bbf56,0x3af7b8a6,0x392a5189,0xbbabf6f7,0x3b5d3645,0x3b46f903,0x3c001ae1,0x3ba5cbfc,0x3b35a04e,0x3c9b2e20,0x3bae722d,0x3cb24eb8,0xbb4a4767,0xbd0473bc,0xbd089c08,0xbd379a79,0xbd3853de,0xbd3bb2b5,0xbd2e6026,0xbd21153c,0xbd1ab0ff,0xbd2a467f,0xbd4f9887,0xbd3091b8, -0xbceb25b2,0xbcb42251,0xbbb85145,0x3c851b6d,0xbc80b549,0xbd886229,0xbd1f037f,0x3cdf736b,0x3cb398e8,0x3b93cff3,0x3b785c3a,0xbb306dd3,0x3b66b903,0xbb533019,0xb997379d,0x3b805447,0xba8ab694,0x3b2b1150,0x3c79c951,0x3bf76d89,0x3aa230fd,0x3c18bd6a,0xbc09ce56,0x3be9a64e,0xbbb7d3fa, -0xbd230b08,0xbcde58b1,0xbd0fb878,0xbbcd826a,0xbbdcf6ac,0xbcb4d96b,0xbd49dae7,0xbd68be45,0xbd43e5a2,0xbca5c9aa,0xbcca5703,0xbd5efd8e,0xbd699de3,0xbd8979bd,0xbd9e404e,0xbd7a2e0e,0xbd112440,0xbd3c66b7,0xbce4ee54,0xbcc8f035,0xbb9e82cc,0x3b74a722,0x3ab9aad5,0xbb9b6c16,0xba4058be, -0xb8d2b299,0x3a66d5fc,0x3a334af8,0xb903862b,0x3a7b93b1,0x3b188bc1,0x3ba331fa,0x3c8a532c,0x3c1da115,0x3c9cfe78,0xbb6f794d,0xbcd49a01,0xbcd11ca7,0xbd34ee11,0xbd17c820,0xbce6986e,0xbc0e771f,0xbc4a8a19,0xbc96a981,0xbd0174bb,0xbcb572ae,0xbabeb7ca,0x3ceb5d4c,0x3c68b140,0x3c81b6b2, -0x3cd8d082,0x3a01354b,0xbc44ade6,0x3c6aefc7,0x3d610604,0x3d2687ec,0x3d2c328f,0x3b9a7e4b,0x3ad635c7,0xbb0c101a,0xba281c5c,0xbb3aabb3,0x3a9823a5,0x39d7974b,0xbbaf627d,0x3b8058c6,0xbbd7b266,0xbba48feb,0x3cf6b8e3,0x3b1105e8,0xba08ea7c,0xbc22c348,0xbc9b9005,0xbc0436e9,0xbc04ec4b, -0xbcba0cc8,0xbd1fba1d,0xbd5d7d05,0xbd8f6001,0xbd93e6c7,0xbd8bdc16,0xbd8ff299,0xbdb19e19,0xbdc55812,0xbde8c008,0xbde9a682,0xbdf097ed,0xbd45f0e1,0x3d34f5ca,0x3d226577,0x3cbe8d05,0x3c87d208,0x3d055a2f,0x3ca3d084,0x3c8bb3ce,0x3c24606d,0x3a771baa,0xba11559b,0x3a124856,0xb83c22f9, -0xb99d53ee,0x3bc08fe0,0xb982e719,0x3b4f9cc1,0x3c85946b,0xbbc425e9,0xb915aa1b,0xbc3bb807,0xbcf113bd,0xbcf6fb48,0xbd004b71,0xbcecf264,0xbc98ef45,0xba1a5001,0x3c223d84,0x3c2604cd,0xbc22d70c,0xbc5fd100,0xbcb7e9a1,0xbcaf858f,0xbc9c3321,0xbc347f3b,0xbbc7edde,0x3d26a29e,0xbd03754c, -0x3c7d8476,0x3d3ea233,0x3cb0f2ff,0x3c998675,0x3c938895,0x3c707a24,0x3c99c8b6,0x3ca1a31c,0x3c5a7506,0x3c68b047,0x3c49dc37,0x3c267a1c,0x3b897788,0x3bc6c0d1,0x3bf7aa52,0x3c237d1d,0x3b6c39c2,0x3bf3dcd0,0xbc1de975,0xbc4d1c5e,0xbc411e9e,0xbcb492a6,0xbc48721a,0xbc43312c,0xbc7fad28, -0xbcc085aa,0xbccec1ed,0xbceedd2a,0xb88b651e,0x3c679d26,0x3c7f2db5,0xbb03b193,0xbc8daea8,0xbd0ba674,0xbcddf7af,0xbc1f5fc2,0x3c01a464,0x3cddfea0,0x3c941d26,0x3cb9d539,0x3c8873db,0x3c184ed4,0x3c0f57b8,0x3ad4c1d6,0x3abb4532,0x3aa83e03,0x3bb57d16,0x3bab8205,0x3c14a393,0x3c33a093, -0x3c38b8a1,0x3c01e456,0x3c2c0839,0x3c154006,0x3c3f9679,0x3bba1d70,0x3be115fe,0x3c50dcc2,0x3c81c340,0x3c90a21e,0x3cb50b97,0x3c6c6aa3,0x3c85ee31,0x3cb61bea,0x3c7cd000,0x3b3ecf74,0xbc87eae9,0xbca5cdde,0xbc7d85f5,0xbc23857e,0xbbd9f4d4,0xbc6363b0,0xbb51f57b,0x3c3c20d8,0x3bbeedd7, -0x3c53f7b2,0x3c261020,0x3c2c2640,0x3c1a31ec,0x3c664dc4,0x3c0b9285,0x3c78d3fe,0x3b84c517,0x3c40f278,0x3baebc08,0x3bf9f3dc,0x3b7dd695,0x3bc9a640,0x3ae48825,0x3a478472,0xbc2d1bda,0xbc8088b6,0xbc4ede77,0xbc6248a3,0xbc466dcc,0xbc36d5b8,0xbc1969e4,0xbc13c5d2,0xbc124205,0xbc022497, -0xbc1578b9,0xbc0ffd12,0xbc39aff7,0xbc130725,0xbc242aa4,0xbc518221,0xbc28ef7c,0x3b3b696c,0x3b9add55,0x3cc6cced,0x3b9be731,0x3c4ce798,0x3c38524c,0x3b9c83b9,0x3bb75399,0x3a7a469f,0x3b565aec,0x3c37ce87,0x3bc19de4,0x3b8ad72b,0x3bec9079,0x3c38101f,0x3bfd6e6b,0x3b8ea5f5,0x3b1aefd1, -0x3c495e75,0xba9ff36a,0x3b059884,0x3b2bc977,0x3b417cb2,0x3b85cde6,0x3b94edb9,0x3ba49d1e,0x3afe1bc8,0xba6a2e9d,0xbb7e162b,0xbbe62b6b,0xbc2771c9,0xbc57830e,0xbc25fba3,0xbbcf6766,0xbb3bc266,0x3aab0bd2,0x3a6e1a9c,0xbae70292,0x3c5d018f,0x3cc6c80b,0x3ce7b8ac,0x3bed62d2,0x3cb64a77, -0x3cef5690,0x3cfead10,0x3d022b46,0x3cf2c058,0x3d080354,0x3d0ed6f3,0x3d0f2042,0x3cbd0cad,0x3c004d30,0x3cfd5ccd,0x3cb13e8a,0x3c26aa02,0xbb70f2ca,0xb95aa439,0xba9734dc,0xba55b871,0xba8f4ed1,0xba9d7259,0xba3283c6,0xbb01e9f6,0xbb2ed991,0xbb56a969,0xbb6e41b1,0xbb7a631a,0xbb9ffd9f, -0xbb510e56,0xbb24c417,0xbae3dc2d,0xba9fd108,0x3a91f2ee,0x3c0e3865,0x3bad9530,0x3c93807e,0xbc96e3a8,0xbd0d6bdb,0xbcff24ff,0xbbfd7bf5,0xbcf33cc4,0xbd04d0b2,0xbd0c37fb,0xbd0b800d,0xbcef0ddb,0xbd0829d3,0xbd068f5b,0xbcf2e54d,0xbcf7d891,0xbc2f8f92,0xbcf1ae7c,0xbcf9d6b2,0xbc903619, -0x3c905bfc,0x3c02e987,0x3c199665,0x3c1d230b,0x3c1ddb6a,0x3c17164e,0x3bfbb6ed,0x3c033d8f,0x3c090520,0x3c1c01d1,0x3c15961d,0x3c126603,0x3c21449c,0x3bc918f0,0x3ba1cd7f,0x3babcde8,0x3bb63ca9,0x3ba346c8,0x3be85bb9,0xbd079dd9,0x3a540571,0xbc84f0c9,0xbc12a12f,0x3a89a629,0xbaa41889, -0x3bb29312,0xba8cea8c,0xbc50d0b5,0xbb9195c4,0xb9e41c55,0xbb05d8de,0xbbd0fa98,0xbae1f8ef,0xbb9bae3c,0x3b14f6e5,0xbcc73115,0x3c04cbe6,0x3c585830,0x3c146c87,0x3c4a193c,0x3c5033e1,0x3c49ba7e,0x3c05dfcc,0x3c0c9f88,0x3c1114f1,0x3c29165c,0x3c28f22e,0x3c10d867,0x3c0a870f,0xbac5c441, -0xbba380ac,0xbabcf5fc,0xbaa781a3,0x3b6a66bb,0x3bcc04d8,0xbc90a47e,0xbbf0b0ee,0xbc7c92e2,0xbb7c1a4e,0xba26218e,0x3b01c5b2,0xbbc08900,0x3b529ee4,0xbc5ae162,0x3bab2042,0xbc12094b,0x3ba34ab1,0xbb831d9b,0x3b851402,0x3b735ad6,0x3b664433,0xbbe13ab4,0x3be5c0e9,0x3ca046e2,0x3c3c1010, -0x3c86e5cb,0x3c764742,0x3c5c5f77,0x3b56016c,0x3bca7590,0x3c018f71,0x3c62e3e2,0x3c5ae367,0x3c25f0c1,0x3c462ffb,0xbc41bdda,0xbc96c9a8,0xbb696346,0xbbf40c72,0x3adc25c1,0xbb287fcc,0xbcbfbc51,0xbc6443a1,0xbc82814d,0x3b30793d,0x3c20322c,0x3c39544b,0x3c041e89,0x3adade79,0x3b8c50c7, -0x3b1906a7,0x3bdcb17c,0x3c8f0cd8,0x3c3d5505,0x3c9505fe,0x3bf279cb,0x3cb471b1,0xba750039,0x3c4d7d27,0x3cb43751,0x3c346189,0x3cac740a,0x3ca81760,0x3c8e86be,0x3b4e527e,0x3bdf123e,0x3c2ed30b,0x3c72a65e,0x3c4882e5,0x3bb75106,0x3b72effc,0xbd031c89,0xbd2892b7,0xbc68518a,0xbc83bb7c, -0x3bc99217,0xbd28183b,0xbcb12c29,0x39bbcd7e,0xbc9a2e23,0xbc59bc3a,0xbb9f90f6,0x3b34ab2d,0xbbf4df6e,0xbbb0e533,0x3ba40279,0xb93dc79a,0x3b4c6106,0x3c1b01cf,0x3c05b2b1,0x3c2e7038,0x3ad858a4,0x3c2bd4fc,0xbc137c10,0x3af8b0ca,0x3d122ef5,0x3cbd00a9,0x3cdae589,0x3bab821f,0x3b3e4d8b, -0x3ba3daf1,0x3b8ebda7,0x3c603229,0x3ca9db6c,0x3d2f13a0,0x3d242104,0x3c1c22ad,0x3c1beb13,0xbb0ff6b5,0xbc97b3c9,0xbc554c2d,0x3ca642c6,0xbc7c316d,0xbd170720,0xbca134b5,0x3bba7360,0xbb641312,0xbadba3d1,0xbba8197c,0xbb08610e,0xbb2f9748,0xb9ccaf03,0x3980ca40,0xb9a05f35,0x3b863713, -0x3b9615c1,0x3bd20be2,0x3c5e0ff1,0x3bbfcbe7,0xbc0f4caf,0xbbf97292,0x3b8946f0,0xb9f1b65e,0x3c4e3696,0x3bbb2b13,0xbb5df03f,0xbc811678,0xbd003f1a,0xbcf727fe,0xbc800805,0xbc1f9569,0xbc7f946d,0xbd033306,0xbd1ad771,0xbcb98397,0x3c1b293e,0x3c4bf5ba,0xbd35df3d,0xbc15c78f,0x3cb9480e, -0x3ce189e1,0x3c5b9473,0x391fc120,0xbbdd6a05,0x3a359c20,0xba277d6a,0x3b05672e,0x3ae9d476,0x3ba11586,0xba83c306,0x3b9082d4,0xbbe43ec6,0x3a31cacf,0x3c8d0ca0,0x3c473bfe,0xbadd7ebd,0x3b89f799,0x3c5d990b,0x3a6c7311,0x3a7c434a,0x3c6184f0,0x3cc2c434,0x3cebe0c6,0x3c4b27e3,0x3bb445d2, -0xbae6a44d,0x3cf9ed4e,0x3cfb414d,0xbbc842ec,0xbcc3b715,0xbd71521f,0xbdc19098,0xbd8f5a91,0x3d60e7e8,0x3cff9b7a,0x3cde4e75,0x3cd1634f,0x3cffb74f,0x3cc39be7,0x3c92f32b,0x3c575a34,0x3b913967,0x3b03cbbb,0xbaad1d2a,0xba36aed1,0xba899482,0x3bb4aa85,0x3ae93b7b,0x39efa7ce,0x3c4b68b4, -0xbadcb238,0xbc8f1709,0xbc0c4076,0xba67a204,0xbb1b4f7e,0xba9ce40f,0xbb6067ec,0xbbf8187e,0xbb9ef49e,0xbc996735,0xbce01212,0xbd351633,0xbd162e7c,0xbd068013,0xbca96179,0x3b0bee6c,0x3cef976e,0x3d4d6d02,0x3d5fc3b5,0xbbb37d8e,0xbcce6d12,0xbcbae6cf,0xbb54f244,0x3bf2f88a,0x3bab968a, -0x3c3aca4e,0x3c8650e6,0x3c32be3a,0x3c685540,0x3c232c93,0x3c7ef9dd,0x3c48c440,0x3ad507b7,0x3b5658fd,0x3bc8eaf5,0x3c6ae11e,0x3b8874f8,0xbc288185,0xbb8474a4,0xbb8cd4cc,0xbc4616a7,0xbc75043a,0xbc4a2cb1,0xbc9272da,0xbcc0ecd6,0xbd192ba7,0xbd198fd0,0xbcfc14d4,0x3ba4e007,0x3d017f7a, -0x3d507c49,0x3d3e30f1,0x3cfa4cb1,0x3c606017,0xbba35bf8,0x3c88554c,0x3a98456a,0xbafca68c,0x3bbec947,0x3bf176ff,0x3bdbcd75,0x3c134b31,0x3ba75c39,0x3b959bcc,0x3b5f90b1,0x3b6ebe76,0x3bbda790,0x3c197a59,0x3c582afe,0x3c4542a4,0x3bc714fd,0x3b1adde2,0x3b729942,0x3c0ab48d,0x3c1d82df, -0x3c8f1fba,0x3ca79c06,0x3ca5f114,0x3c5c921c,0x3c332e9f,0x3c4d0b19,0x3c895b59,0x3cda5851,0x3d1b6b7b,0x3d0d25d1,0x3d056805,0x3d201ed2,0x3cbb082e,0x3c5a39e7,0x3c51f666,0x3c3c9f10,0x3b877792,0xbb0668fd,0xbc14a6a5,0xba1b21c0,0xbad44ea5,0x3b1243eb,0x3bb53ebc,0x3c14ed53,0x3bc2036b, -0x3c231a07,0x3b69ff8a,0x3c136dcb,0x3b1c402f,0x3b5b8c91,0x3b3a103f,0x3beaf0f8,0x3c01824e,0x3b8d1958,0xbbc25d24,0x3b3823ab,0x3c1cac20,0x3b0c119e,0x3b17cdea,0x3b025451,0x3b48e1a4,0x3b12ac4f,0x3b2aaa41,0x3a8be66e,0x3a50303c,0x3b56b04f,0x3bb6c34e,0x3c0499ae,0x3baa4698,0x3b39b1a1, -0x3923a43b,0xbad5ee33,0x3c30d99c,0x3c0623c7,0xbb17d9f4,0x3bfd3c88,0x3add46f3,0x3af6f2ca,0x3b9cb2cf,0x3b57343d,0x3be128cb,0x3b886430,0xba8c3429,0x3b32f3d9,0x3bc57c25,0x3b8186e5,0x3a88f32f,0x3b425772,0x3b414a1a,0x3bbe7504,0xbb02fe68,0x3c2328b5,0x3c22eacd,0x3c21819b,0x3c2e2972, -0x3c286bb3,0x3c26f451,0x3c2930fc,0x3c538701,0x3c75712f,0x3c804337,0x3c82410c,0x3c809587,0x3c83817b,0x3c789c3d,0x3c66ae28,0x3c56c262,0x3c3e3fd3,0x3c4b5e89,0x3c74a4a6,0xba666212,0xbbfd1f2a,0xbb88c9b9,0x3b4047c2,0xbbeffd42,0xbbee6a21,0xbc025ea4,0xbc02e9d3,0xbbb65c4e,0xbc001988, -0xbc107dca,0xbc032709,0xbc11800b,0x3b01f0f7,0xbc043a06,0xbc083249,0xb934e365,0x3c78a56c,0x3c3d29fb,0x3c4a73a0,0x3c493f19,0x3c4b38a0,0x3c4eca3a,0x3c4c4132,0x3c4db952,0x3c4f19df,0x3c595965,0x3c62fef2,0x3c6ce65f,0x3c775d7c,0x3c6947de,0x3c625547,0x3c5ea555,0x3c55a8f4,0x3c820370, -0x3b48bdc6,0x3adcaa2d,0xbb41c4f0,0x3cc95622,0x3ceae41e,0x3c016736,0x3ca70b30,0x3ce6be7f,0x3c80dc20,0x3c810d5f,0x3c6f46f0,0x3c1537a2,0x3c43661c,0x3c40d47e,0x3c22ef7d,0x3ce8f540,0x3cb89211,0x3c14737e,0x3ce53a38,0x3cd20e8d,0xbabc2e10,0x3b375bc0,0x3b176221,0x3ad719f4,0x3ae602a8, -0x3afa3e09,0x3b1ebaa1,0x3b298f81,0x3b365405,0x3b28af8d,0x3b7125db,0x3b8853d1,0x3b87102e,0x3b97097b,0x3b8d0839,0x3b7873d1,0x3b0aef84,0xbb0e8a30,0x3ba68244,0x3cab358b,0x3bc5dd31,0x3c3fe604,0x3c5d1aca,0x3c3dcddb,0x3c343647,0x3bd1908a,0x3c2bce8d,0x3c80ff03,0x3c38123a,0x3bfa73ec, -0x3c4d84d7,0x3c578c21,0x3c4744d2,0x3c9858ec,0x3c4448fb,0x3cb81a6b,0x3c263fa1,0x3a8f9773,0x3b90f3be,0x3afbb8cf,0x3b18a0e9,0x3ace1803,0x3ad04a04,0x3a984430,0x3aedc1cf,0x3b090c80,0x3bbe0666,0x3c0cc157,0x3c1622c8,0x3c50516d,0x3c3cfd2c,0x3beee2ab,0x3b76b81b,0xbc12f17e,0x3b86f97a, -0x3c8271fc,0x3c13ba5d,0x3bcff29e,0x3c445cdf,0x3c5b278e,0x3c2e5ef1,0x3c4a8bb4,0x39b6985c,0x3c2308c0,0xbb5a9dbe,0x3c0181e0,0x3c0f9f9a,0x3c8b32d5,0x3c72e67d,0x3c73b5ab,0x3c84be9c,0x3cc1696e,0x3c641ed4,0xbab59fce,0x3b18361e,0xba94a18f,0xba929cf9,0xbab59cd4,0x3abb553a,0x3ab3a825, -0x3b689312,0x3accb684,0x3c1ce8fd,0x3c6509f4,0x3c352f77,0x3c968192,0x3c53b479,0x3a42e81c,0xbac6aac5,0xbc34cf1c,0x3b2abc3c,0x3b9f0421,0xbbac71d9,0xbc248b99,0x3bf89635,0x3c0f9277,0x3bf6dba7,0x3b893b51,0x3ab66f99,0xbb93f25d,0x38e48364,0x3b84df64,0x3c06c3f2,0x3bf5c9e1,0x3c03af1b, -0x3cb99728,0x3c69eeb1,0x3cd2fe62,0x3c809643,0xbb004b4d,0x3b94f080,0x3a037c2e,0x3a8f819d,0x3a3c4c11,0xba22950d,0xba81708a,0xba332d64,0xbb8d5a16,0x3c3d5fcd,0x3cb85b37,0x3cba3704,0x3d1adf4b,0x3cf96d9e,0x3b768871,0xbac0c397,0xbcb8ca4c,0xbc05f5b9,0x3d1b0b5c,0x3d1199ce,0x3be8fca8, -0x3bf7f1d5,0x3be4d448,0x3c61c3ef,0xbb00dad4,0xbb898237,0x3b5314ce,0xba7569fc,0x3b07fefa,0x3c36c20d,0x3c652c4e,0x3c40d9b4,0x3c4a90e5,0x3c098f44,0x3cc5e637,0x3cafd270,0xbbbdaf4b,0xbc06d271,0xbc9973d0,0xbc27eefc,0xbca14df4,0xbd0ab301,0xbcca65f0,0xbc7c46d3,0xbbcac4da,0x3c26b917, -0x3c26e445,0xbbac9689,0xbc468341,0xbcaeb528,0xbcef3d97,0xbc84071f,0xbc8908a2,0xbccbbc3b,0xbb35488f,0xbb6b98b6,0x3ca08def,0x3b0dfa38,0xbc319352,0xbc018b4c,0xbbc85a8e,0xbb663e51,0xbb1e3861,0xb9d84b61,0xb9c29dcc,0xba61c56a,0xbac38b66,0x3ba89438,0x3cc7335d,0x3c3579ad,0x3c10208f, -0x3bd49903,0x3c176933,0x3c97edce,0x3c9e171d,0x3cb7e2a5,0x3c90727d,0x3be982c0,0xbc00be21,0xbc58b32d,0xbc70f7e7,0x3c06d365,0x3c60b19b,0x3bc769f8,0x3c9e542b,0x3cbd2a30,0x3c7ac8b8,0x3c082141,0xbd5866b8,0xbcd042a9,0x3c3bdb01,0x3be22cf6,0x3c08c849,0xbba74439,0x39bdf67d,0x3b8fe979, -0x3b584778,0x39400ebb,0xb8943d9a,0x3af39399,0xbb5218b5,0x3b145d39,0xbaab79b0,0x3b529d2d,0x3cb6ec1c,0x3c4eb5f9,0x3c944e21,0x3bfb2486,0x3a8842a3,0x3bf9098a,0x3b80f1e5,0x3c09dbcd,0x3c39fdeb,0x3cb92635,0xb9466fa3,0xbc6d467f,0xbce4495c,0xbc8047ec,0xbaf7c2a3,0x3c0f7da7,0x3cb1748c, -0x3b204c88,0xbcd7769a,0xbd46ef59,0x3ddc87bb,0x3d6d2025,0x3d204cff,0x3d1f27fc,0x3d0df0f9,0x3ce4b3ba,0x3c8722eb,0x3c21ad95,0x3bd87c9f,0x3b7f8190,0x3abad0f7,0xb8df452e,0xba094699,0x3c13473f,0x3ba4c389,0x3bd6ed34,0x3c6b5eb0,0x3b9a0bd7,0x3b94d36b,0xbb8cf9b6,0xbbbaa948,0xb7f6276d, -0x398fb688,0x3c87d126,0x3c882c51,0x3c64c970,0xbba9c3f6,0xbbe14bea,0x39cbcea9,0x3c8f9010,0x3c73cc60,0xbcb827db,0x3c965d6e,0x3d5ad029,0x3dc3b5aa,0x3df393a7,0x3d27d23f,0x3d2556ca,0x3caf96e4,0x3c9421a7,0x3cbf2b80,0x3c8d51a1,0x3c8d912a,0x3cc8412e,0x3ca8fa83,0x3c763f5f,0x3c54efa7, -0x3c805aa9,0x3c46b841,0x3b81ef0d,0x3b725da9,0x3bc2063d,0x3c488a46,0x3c299a63,0x3c410976,0x3b57d34d,0x3b26dfe3,0x3a0cedea,0xbc21b9ee,0xbc0907a8,0xbc5a3a25,0xbc1a1433,0xbca849bc,0xbc1cbb4f,0x3c941d99,0x3cd427b2,0x3d35ebf8,0x3d69419f,0x3d990577,0x3d970eb3,0x3d6e4e8b,0x3d45d5dc, -0x3cf1628d,0x3d14e3c9,0x3ce1718e,0x3ceb25cf,0x3cc06c23,0x3c97bf55,0x3c303853,0x3c2c4852,0x3b87ee58,0x3aebf739,0xba91e757,0x3bbe28b8,0x3c2c2e65,0x3c491a47,0x3c56fef2,0x3c586588,0x3c661b6d,0x3c138782,0x3bfc1fe5,0x3c05332b,0x3bdc9d8d,0x3bf57964,0x3bf62807,0x3c8a86c9,0x3cafc944, -0x3c968ac6,0x3cc70d5e,0x3cd524db,0x3ce440ed,0x3ce5e465,0x3cd4252a,0x3cb8b919,0x3c15d618,0x3bddc5ab,0x3c4debd8,0x3cda02eb,0x3b3e0f64,0x3bf3e0ae,0x3c8775d8,0x3c8e09ec,0x3ca75be5,0x3c960166,0x3c88e085,0x3c7e5429,0x3c81769a,0x3c4df70e,0x3c756bc5,0x3c031cbf,0x3be536e6,0x3b85e647, -0x3bf59cc5,0x3c2ba8ff,0x3c720334,0x3c78e092,0x3c916a34,0x3c69fb3a,0x3c1a9797,0x3c326eb4,0x3c13dad1,0x3bf85e86,0x3bc34a1d,0x3b7e914b,0x3bea582d,0x3c2bc62b,0x3c725d10,0x3c567767,0x3c389ec6,0x3c276826,0x3c204b8e,0x3c0a5248,0x3b81e4aa,0x3b8ee28c,0x3c4be1fe,0x3c623d0f,0x3c472f22, -0x3c1e8d43,0x3c4730c2,0x3c30a6a6,0x3c22979d,0x3c1a7870,0x3c0b53c4,0x3c380ff4,0x3c78bbbc,0x3c6d45b4,0x3c4d2daa,0x3c72711d,0x3c632004,0x3c251069,0x3c2f545b,0x3bd7bbc9,0x3c143ed4,0x3b7b480f,0x3b174590,0x3b3a08b2,0x3b1f571a,0x3b39d2b2,0x3b5089ad,0x3b633b6b,0x3b84f31c,0x3b9ed35c, -0x3bd7bf96,0x3c0fcee9,0x3c3f9872,0x3c68e6a6,0x3c5a1ab2,0x3c5c8103,0x3c631942,0x3c6ad2c9,0x3c1dc499,0x3c0878e7,0x3cb5d313,0x3cbf554b,0x3c46a6f3,0x3ca1bf43,0x3cbeb021,0x3c7e66c7,0x3c83688b,0x3c82dbf2,0x3c63a7c5,0x3c78c613,0x3c7fa671,0x3c7535e5,0x3ccabeb4,0x3ca4194d,0x3c62023e, -0x3cbd5853,0x3ca2c316,0x3bc36b7c,0x3c02d191,0x3bf93820,0x3bed9c6d,0x3be460c2,0x3bd7a4e3,0x3bc4ff6d,0x3be5b746,0x3c005238,0x3c0a42bc,0x3c18499c,0x3c239120,0x3c3b87ef,0x3c337c76,0x3c2f3629,0x3c26554e,0x3c23b18f,0x3c3c7826,0xbc65469e,0xbc57d78b,0xbc43a2b7,0xbcc7f402,0xbc872926, -0x3c3f903c,0xbcc3b090,0xbc87d65e,0x3bc95c59,0x3bd1a9b8,0x3bd932b6,0x3c10998f,0x3c0c53c9,0x3c190ca8,0x3c46f8f6,0xbc873448,0xbcc181ae,0x3c8449d8,0xbc7134a7,0xbcc00461,0xbc453df1,0xbc4ad19f,0xbc68ca7a,0xbc6b037c,0xbc67e71f,0xbc6a6200,0xbc78f2a6,0xbc6b669e,0xbc69cb4b,0xbc6e4348, -0xbc7c4700,0xbc8415b3,0xbc865628,0xbc92ed4d,0xbc8ead7a,0xbc62ba1f,0xbc774aa1,0xbc5811be,0xbc9203fe,0xbc16a231,0xbc71a21f,0xbc825a5f,0xbbea5560,0xbc07a3a9,0xbc0a67bd,0xbc287881,0xbc7f375e,0xbc93deac,0xbc981d1d,0xbc58ac9b,0xbc5eedf6,0xbbdfcdb3,0xbbc1d253,0xbc53aca6,0xbc0d7f37, -0xbb5d4053,0xbc85e999,0xbc6056c5,0xbc9a23a8,0xbc9c845b,0xbc9bf55e,0xbc98d76a,0xbca4207e,0xbc8fd136,0xbc9383fe,0xbca58a34,0xbcb67c9b,0xbcca2c9d,0xbcd1bfef,0xbcf77dfd,0xbcdeaa4a,0xbc817069,0xbc94d771,0xbc82ec48,0xbc611ade,0xbc9b8e59,0xbc4b96fe,0xbc390143,0xbb08b7d1,0x3a14a5b9, -0xbb053db9,0xbb20625a,0xbb1e2b3d,0xbc43b760,0xbc00efcd,0xbbdf14a6,0xbb96571a,0xbad9d80a,0xbab46bec,0xba1791ab,0xbb323dd2,0xbc130544,0xbc2cd844,0xbc6f408a,0xbca72280,0xbcbeb992,0xbcb8d5b7,0xbcbdb57a,0xbce32e7d,0xbcba62fe,0xbcb7a809,0xbcd1c804,0xbcf42d02,0xbd0d9364,0xbd1421a1, -0xbd34de54,0xbd19006c,0xbc7dcd88,0xbcc16670,0xbc044c29,0xbbb944fc,0xbc3f3929,0xbc250c77,0xbc42dc6a,0x3b21613e,0x3c172cec,0x3c2b6073,0x3bcb32a6,0x39f8c301,0x383bb542,0x39cbf557,0x3b22a0a5,0x3c358fa8,0x3bfdf5c0,0x3c141efe,0x3c082323,0x3c1b4d8d,0x3b13acf3,0xbb78f9f6,0xbc7047cc, -0xbcdd59cc,0xbd02975e,0xbd046f50,0xbd045c2c,0xbd130ae7,0xbce93155,0xbce9e5c0,0xbd116f2e,0xbd304fd2,0xbd4ed9a1,0xbd58dcbc,0xbd826779,0xbd403d8e,0xbc166274,0xbc978dd4,0xbd4a8b3e,0xbd52fdc6,0xbcc39638,0xbb82915f,0xbb7bf82e,0x3a6b0df5,0x3a9ddb56,0x3b87b727,0xbbae2252,0xbbfc2304, -0xb8cae761,0xbb2ad466,0x3a4a2836,0x3bc8fa1c,0x3c28dee7,0x3c32a5b0,0x3b3bb48d,0x3a83d4c5,0xbbb17fa0,0xbc783b96,0xbc6bf6f7,0xbc11426d,0xb944a2a1,0xbc3fe2af,0xbc5a7e35,0xbc590d24,0xbbcb6f3c,0xbbaef344,0xbbb3dc69,0xbbcdc35c,0xbc943b26,0xbd0788ed,0xbd4a6982,0xbd6aea04,0xbd5abcea, -0xbd62dd36,0x3bc74c6c,0xbce879b9,0xbd13338e,0xbca1df7e,0xbafc4d74,0xbc1e70e8,0xbc5aa21f,0xbc5d8847,0xbbf8fd77,0xbbcacdce,0xbbab0ea0,0xb92d4a14,0xba9aa535,0xba3f2068,0xbb9fec60,0xbb34cd61,0x3c24a2f1,0x3b9dfeb3,0x3b248bf5,0xbbdc9cbe,0xbc845c42,0xbcd76fc2,0xbd07cfce,0xbc980ad1, -0xbc91be6f,0xbd005e13,0xbcc6105c,0xbca61b32,0xbc9a1057,0xbbd6e277,0xbc155308,0xbccf3f69,0xbcdea2aa,0xbcab71a4,0xb9911686,0x3b20d418,0xbda0d0ba,0xbd4f334b,0xbc28c712,0xbb48d081,0xbc15b920,0xbc359cdf,0xbbe4e779,0x3a062e8e,0xba76a2fd,0xba23d48c,0xbb7624a5,0xbade1b07,0xbb9e4cb5, -0xb9e05b86,0xbbd09683,0xbb86a2fe,0x3c130693,0x3baa5956,0xbaf74cc0,0xbbac28ca,0x3b1c7071,0x3a8c5e84,0xbb4ea77f,0xbc4c0660,0xbcdeefd0,0xbd274020,0xbd3891b3,0xbd1f8ab1,0xbcff1f2b,0xbc9f3195,0xbd023d42,0xbd9d2784,0xbdb7d1d4,0xbdd7d42e,0xbde67210,0xbdc2f2d9,0x3cf3eadf,0x3d7c8b17, -0x3d4c7295,0x3d1330b3,0x3d19308a,0x3cbfee96,0x3c837f8c,0x3b9a8c73,0x3bbb4495,0x3b5aac47,0xba8c7bba,0xba8f28cc,0xba143722,0x3b2ea690,0x3acbd5d0,0x3b1e87d9,0x3bd7222d,0x3ba957c4,0x3a30e954,0xbbda2c2f,0xbc0d4cc2,0xbc6ed34e,0xbc9f2d4e,0xbc4bce50,0xbc8702cc,0xbcc172bf,0xbd514e6f, -0xbd6b3cd6,0xbd4350bb,0xbcdb6592,0xbcce792b,0xbd24b51b,0xbd9a3794,0xbda5a71f,0xbd802442,0xbc060ac6,0xbd706166,0xbcfafb90,0x3c0cdf11,0x3bd7f7f4,0x3c2a4869,0x3c3566bc,0x3c3e0509,0x3c331923,0x3c28737f,0x3c04c5c7,0x3bb06978,0x3c278929,0x3bfc3671,0x3a6d3e95,0x3a4450e4,0x3b242c42, -0x3c2b6861,0xb9df0193,0xbb98ce02,0xbc05ecb6,0xbc03885d,0xbc0b9433,0xbc586556,0xbcd13582,0xbd25412c,0xbd5ca8ca,0xbd8619ce,0xbd85e630,0xbd67a119,0xbd1f7486,0xbcc34bb7,0xbc3515b6,0xbc2758de,0xbc663efb,0xbca00d5b,0xbd3c2dc4,0xbc1446ed,0xbc043f21,0x3c82cda5,0x3c072c3e,0x3c2bb24a, -0x3b951339,0x3b9308f4,0x3bc4833c,0x3ab1fbaf,0x3a90308b,0x3ab4174c,0x3ae756b9,0x3ba380a5,0x3be5acac,0x3bef9f4f,0x3b921d75,0x3b63553a,0x3b4a7620,0x3bc05fc4,0x3b6b077b,0xbb5c3459,0xbc1cf166,0xbc73fad7,0xbc5370f1,0xbc1f2632,0xbc27f493,0x3bf2329b,0x3caaf2d8,0x3cfa3503,0x3cf4be8f, -0x3ca7a381,0xba0a6958,0xbb5e17e5,0xbc0f3440,0xbc571c26,0xbc27153f,0xbb896ff5,0xbafdc489,0xbb68c6cb,0xba38e863,0x3bbaace0,0x3bd96c16,0x3c0bb024,0x3c197625,0x3c247d21,0x3c1c36fc,0x3bdd5712,0x3bf3e3fb,0x3be785a1,0x3ba6f4d1,0x3bd5a87f,0x3c05f539,0x3c2e54a5,0x3c0bbd53,0x3b893ee2, -0x3b39aecd,0x3c04d5fb,0x3c3f6c7b,0x3c74f902,0x3c476c84,0x3c258499,0x3bf461c8,0x3b791a65,0xba342625,0xbb56a92f,0xbc1c4ed9,0xbc55e24d,0xbc87d647,0xbc595e4e,0xbc3f710d,0xbc2f6c1f,0xbbff0c77,0xb99c4ef0,0xbb1553a3,0x3c28c694,0x3a82a848,0x3ae8bdd9,0x3b3279af,0xb98af0c7,0xb884a988, -0xbb2fde55,0xbba21ad0,0xbbb5ed5a,0xbbebae9d,0xbba89987,0xbbc79918,0xbb10cad9,0x398e5550,0xbb7307ba,0x3a955eca,0x3b7d0e9b,0x3c0937d4,0x3c1c5f1a,0x3bbd9a5a,0x3bb25334,0x3b862f58,0x3b697447,0x3b5d1fca,0x3b61b877,0x3b428724,0x3af5059f,0x39b12eac,0xbadc372d,0xbb9d644d,0xbb863515, -0xbb73afc9,0xbb2a07a3,0xbb08751a,0xbb10e1dc,0xbb5c660b,0xbbcfe95a,0xba047da9,0x3c8ba038,0xbc07f39d,0xbaa32539,0x3c5f7a35,0x3c6530cd,0x3c6c015d,0x3c801980,0x3c7fbf0d,0x3c81c9e7,0x3c86abc6,0xbb65223a,0xbbff7e40,0x3c85851f,0xba39dede,0xbb908787,0x3b824245,0x3b0ae515,0x3aeaf6c0, -0x3ab04363,0x3a8699e5,0x3a2c4623,0x3859b5ff,0xba4f3034,0xbad48c7c,0xbb1e3fc8,0xbb43412c,0xbb611a37,0xbb8db1af,0xbb65ba0e,0xbb5441ec,0xbb3f77d8,0xbb4a1121,0xbb53adb7,0x3c9bfdd6,0x3c715c25,0x3cadf41d,0x3c87074f,0x386a4218,0xbcf5a95e,0x3cbdd4ae,0x3b930d02,0xbcb84c94,0xbcc1ec88, -0xbcc8bd66,0xbcd2b75e,0xbcdf5637,0xbce30720,0xbce87685,0x3b6ec54f,0x3cb0e9c2,0xbcfad3b1,0x3a98aae8,0x3c86814e,0x3cae0a5e,0x3c892c5c,0x3c9bc606,0x3c9a73d0,0x3c9dd3cd,0x3c9f32ec,0x3c9caef1,0x3ca33849,0x3ca5865e,0x3ca46c38,0x3caa1ed3,0x3cac69b1,0x3cac576e,0x3cae8f8a,0x3ca3cc4b, -0x3c821742,0x3c8a0ab9,0x3c60ce48,0x3cc0336f,0xbbe1092f,0x3c9ac46e,0x3be698e6,0x3c0d5be5,0x3c82b250,0x3c3dd71f,0x3c8a56c5,0x3c8c267a,0x3c304508,0x3c7ab001,0x3c51510c,0x3c6abb68,0x3c08fd91,0x3c379d4c,0x3c8891c9,0x3c62b8c1,0xbbb4b167,0x3cb69a37,0x3ca8553a,0x3cbe2513,0x3cc16db5, -0x3cc74769,0x3cc60d8d,0x3cb9fd54,0x3cc940a8,0x3ccd71fb,0x3ccc1e9b,0x3cd8fa97,0x3ce19848,0x3cdfe529,0x3ce74f79,0x3cc6f966,0x3c65f45a,0x3c7116c1,0x3c49aa64,0x3c9dbd24,0x3c56b62a,0x3c61d993,0xba3e135b,0x3c316a3a,0x3c3b7254,0x3c166dd3,0x3be87273,0x3bcdf099,0x3aab50f7,0x3baebf76, -0xb54b97bd,0x3c29ae28,0x3c2cc145,0x3c865a2c,0x3c51f774,0x3c46ebad,0x3c43e94d,0x3c8ecb6b,0x3cc1ef73,0x3cccbd5b,0x3ce1204e,0x3cef2e73,0x3cf47363,0x3ce97ff2,0x3d042425,0x3d0b81c1,0x3d09e0d1,0x3d17880b,0x3d1dd8c1,0x3d16e1ae,0x3d1aade2,0x3ce839de,0x3c1fff79,0x3c54a0ed,0x3c3ea679, -0x3cb46c41,0x3c87c435,0x3c975f2b,0x3ab62026,0x3c712b1e,0x3c7292ab,0x3c2179f5,0x3c17a8b4,0x3b26f992,0xbaec161e,0xbb4a7edb,0x3b8bd98e,0x3c31d287,0x3c6b902d,0x3c943fc2,0x3c62e036,0x3c938ded,0x3c4a9752,0x3c9a77e4,0x3ce3e4c5,0x3d0690b7,0x3d160721,0x3d1ff893,0x3d22a3db,0x3d114bfb, -0x3d23748c,0x3d220973,0x3d1cf4b6,0x3d3621ef,0x3d3fc35f,0x3d39f01f,0x3d3aa97e,0x3cf72f86,0x3b88c928,0x3be8b52b,0x3c819830,0xb95dee10,0xbb1d7f7b,0x3bbdda6b,0xbb143e2d,0x3bc4c38b,0x3c272ae2,0x3bb81a79,0xbb0487a1,0xbb77bf41,0xba18f062,0xbac5b433,0x3b006688,0x3bdbb67c,0x3c6ff22d, -0x3c8c17b6,0x3bfc5c0f,0x3c9157c4,0x3c65d025,0x3c99f750,0x3ccb5125,0x3c59345a,0x3c488753,0x3c40e3d9,0x3c0a59a9,0xbab1dbb0,0x3c8ba0fa,0x3ce12c9d,0x3d1fa1b3,0x3d115d0b,0x3d14af7b,0x3d2eefdb,0x3d05b651,0x3cd4963d,0x3c9357eb,0x3c30f031,0x3c47fe8b,0xbabbef5b,0x3a12c400,0x3bb58d71, -0x3c85c8f3,0x3b0f2db6,0xbbe07ed1,0xbc1c94f8,0xbba356bd,0xbb487fbf,0xbb8c0924,0x3ab616a2,0x3a8acba9,0x3aa4228e,0x3a867a83,0x3bc3ef93,0x3c9cee25,0x3c33ee48,0x3b4a5481,0x3c4f7ab8,0x3cea01a4,0x3d0de92b,0x3d34ab62,0x3cebba21,0x3c4276bd,0xbbd1878c,0xbc2476dc,0xbbedbc9e,0x3beb20dd, -0x3c4ec191,0x3c7306d5,0x3b19b356,0x3c7a6b64,0x3c6f238d,0x3bd42add,0x3c3b6d0b,0xbd6bf845,0xbd2caf97,0xbcf05361,0xbc7f61f4,0xbc706aca,0xbc13043c,0xbbb1da2a,0x3b0a3817,0x3acaad75,0x3b092025,0xbac5c422,0x3910c8c1,0xbb2d5ac1,0xba84dfa5,0xb848277b,0x3b64a7fa,0x3bf98f02,0x3c714960, -0x3c8e011e,0x3c3bdd14,0x3be1f915,0x3b5c9c21,0x3bc8cfda,0x3ce0cb5f,0x3d20e0a5,0x3d23ea36,0x3d1b4c64,0x3cf8d7b5,0x3cbbf3f5,0x3ce72d03,0x3d3d2ab5,0x3d8280f1,0x3d86a641,0x3d4ed30e,0x3d17ed30,0xbd2ced8a,0x3db65ee7,0x3d8028bd,0x3d69aecd,0x3d6214f7,0x3d199840,0x3d085e71,0x3c9265d0, -0x3bd6d77e,0x3bd0fbc8,0x3b3aad18,0x36a62b16,0x3b1cc429,0x3add1f36,0x3b2692cd,0x3b56919d,0x3bb3614d,0x3c245412,0x3c4c7d0b,0x3be256d7,0x3b4d969d,0x3ca41c2f,0x3cd8735f,0x3cc7f9f8,0x3cc294a9,0x3c3b9eaa,0xbbccd970,0xbc51559c,0xbc36f307,0xba165263,0x3b7a2249,0x3ba58369,0x3ac19cef, -0x3c4f8bda,0x3d3b68a2,0x3de70f7f,0x3dba84ca,0x3db19187,0x3d2137db,0xbb43bfef,0x3c729c98,0x3cad6336,0x3c6511d8,0x3c776890,0x3c901281,0x3c6a58e4,0x3c6c9460,0x3c225bf7,0x3c218362,0x3c019981,0x3c01b42b,0x3afed0c3,0x3aa83d27,0x3bf81b27,0x3c0c9b1b,0x3ba5a5ac,0x3a1fc523,0xbc126f9e, -0xbc5f6d82,0xbc2340b0,0xbc79bcc6,0xbc42fc8e,0xbbd192e7,0xbb997f3f,0xba7c3218,0x3c2d207e,0x3c43bf8f,0x3cf577de,0x3d74d382,0x3db18665,0x3dcce720,0x3dd93ea5,0x3dbdfe77,0x3d07163c,0x3cee6cfb,0x3be4d1cf,0x3c910aed,0x3c37b124,0x3c4f75a1,0x3c3b4554,0x3c1e06dc,0x3c257f13,0x3c080f8a, -0x3c0b6210,0x3bacdc66,0x3bde54af,0x3c0817ae,0x3c52facf,0x3c773a22,0x3c89e7a1,0x3bc90f3e,0x3b17e347,0xbaa3326e,0x3aecfd04,0x3b3b2790,0x3a1e8038,0x3c25c1e7,0x3c5da373,0x3c669feb,0x3cbb48d0,0x3cd096d9,0x3cc37538,0x3d0a023e,0x3d2e0670,0x3d51d6ab,0x3d15d8d1,0x3cf06f94,0x3cdb41ca, -0x3cdc10c7,0x3cb45658,0x3c9e33ed,0x3c809b54,0x3ca0bcbe,0x3c840ee1,0x3c86bb71,0x3c74820a,0x3c7bed92,0x3c457f10,0x3c689b3e,0x3c3acc0b,0x3c79512a,0x3c069bad,0x3c29445f,0x3c0d97e9,0x3c41a718,0x3c43efd6,0x3c5b632e,0x3c6efdda,0x3c9002fa,0x3ca17bff,0x3c9c2302,0x3c9708c9,0x3c928020, -0x3c8e9f3d,0x3c8782ed,0x3cacd457,0x3ccfa606,0x3cf2b743,0x3cdb7bec,0x3cbbf965,0x3cb2ebbb,0x3cafaec0,0x3cadfa14,0x3c9a5996,0x3c9deb11,0x3c4e0bfb,0x3c4dc0cb,0xbb71e7e7,0x3c17af82,0x3bbb151f,0x3b997612,0x3c0c3b57,0x3c00d637,0x3c32d7f0,0x3c531f32,0x3c260c3d,0x3c6a9efd,0x3c678463, -0x3c6bf67b,0x3c32e36a,0x3c433fe4,0x3c87ec81,0x3c767598,0x3c070d67,0x3c90f980,0x3c584817,0x3c4bb544,0x3c3b9897,0x3c1f8fa6,0x3c0bf1d5,0x3bdaf32b,0x3c1d7c8c,0x3c45fc7c,0x3c822e9e,0x3c9daa35,0x3cc0982c,0x3cdb5a40,0x3cc0d80e,0x3ca93135,0x3c954063,0x3c81db5d,0x3c4b9445,0x3c6000dc, -0x3c44daad,0x3b6c34bd,0xbc2d09e2,0x3c7c19ce,0x3bab35f7,0xbbfd71c8,0xbc0f4735,0xbc20c056,0xbc245198,0xbc435831,0xbc5596b4,0xbc646122,0x3bd6d9a3,0x3c880d6b,0xbc361393,0x3be8b934,0x3c77ff73,0x3c87b517,0x3c67178a,0x3c669088,0x3c528963,0x3c4a2260,0x3c3fcaf0,0x3c2ab327,0x3c4633a2, -0x3c542ed7,0x3c5d21ec,0x3c6eb5c4,0x3c7c4371,0x3c8ec8a1,0x3c838650,0x3c7f2449,0x3c723132,0x3c67c929,0x3c72a347,0xbc8f7630,0xbc6a4244,0xbcb684c4,0xbbaf6ef6,0x3c6365c3,0x3d0af902,0xbc5477ad,0x3c2e5d48,0x3d022a14,0x3d08d224,0x3d076324,0x3cf77ce6,0x3d0851ef,0x3d0ac567,0x3d0d0d2d, -0x3c393aaf,0xbc1e6476,0x3d1c414f,0x3c558c09,0xbb997657,0xbcba2995,0xbc7fb578,0xbc969c32,0xbc9c09cb,0xbc9a5d0b,0xbc999e6b,0xbc99aa6a,0xbc8f7184,0xbc8fb78c,0xbc97f9fb,0xbca231be,0xbca6c67f,0xbca39aab,0xbca6720e,0xbc9ca477,0xbc72ac4e,0xbc86acb4,0xbc769185,0xbc940666,0x3ca59935, -0xbc55cd71,0xbb3f6993,0x3b460936,0xbb97a5b2,0xbb6f519c,0xbc2817ec,0xbc304fdc,0xbbc687a2,0xbc4edf52,0xbc2b5263,0xbc06cfcf,0x3b3d9175,0x3a728d9e,0xbb53cf70,0xbbb491c2,0x3c966059,0xbc9d0008,0xbcaeceeb,0xbcbcadb1,0xbcd72114,0xbcd11cb0,0xbcca60ea,0xbcc57bf5,0xbca63fc3,0xbca8b39c, -0xbcc28894,0xbcdaee37,0xbce3c2e4,0xbcccd5c9,0xbccd78fb,0xbcab7e89,0xbc368fd0,0xbc76793d,0xbc888be4,0xbc6a5089,0xba5800f9,0xbb94fae3,0xbae5b479,0x3b944f1e,0x3bc6332e,0x3948e8f1,0x3bd12dc4,0xbb34bedb,0xbb26efdb,0xbc4b4c21,0x3a676c6b,0xbbbb9ac2,0x3c0a1073,0x3b591f28,0x3b62c814, -0x3a07364d,0x3b0acefe,0xbc4888c7,0xbcd6e3e4,0xbcd642c8,0xbd0992aa,0xbd01bb31,0xbcfeaf1c,0xbcfe7d40,0xbcb99a0d,0xbcbeb50e,0xbcfa02c5,0xbd183804,0xbd267892,0xbd1303d9,0xbd1376f7,0xbce5a091,0xbc100300,0xbc67583e,0xbc6c9025,0xbb97a8d5,0x3c0bcaf1,0xbb5c0234,0xbc0775b5,0x3bc1bb76, -0x3c209da1,0x3bfe7738,0x3be6e18a,0x3ae8647a,0xbbc0db15,0xbb26cdec,0xba7dce44,0x3b563e08,0x3c0f0e44,0x3bf0b2f6,0x3c4912ad,0x3a5ac1b0,0x3c0b84da,0xbc4098cc,0xbcffe09b,0xbd0dfe98,0xbd40df9f,0xbd33f8e4,0xbd2c5451,0xbd23e016,0xbcd40b11,0xbce03bdb,0xbd215926,0xbd44bacf,0xbd4a52f2, -0xbd21fe28,0xbd0ca347,0xbca112e0,0x3bb61e45,0xbba7ef4d,0xbd5a0486,0xbd224e78,0xbc8bfbdf,0xbc0466ab,0x3c11e4a6,0x3c3aa7c6,0x3b9cf11f,0xb93862df,0xbbbf87a7,0xbc05ad50,0xbb2a2403,0xbb89e877,0xba068abf,0x3bcaff8f,0x3c3b97d1,0x3c11166f,0x3b962d3f,0xbb683d3c,0x3b990bfa,0xbbd51727, -0xbcfb5bb6,0xbcae4c91,0xbcb082a1,0xbc3577cb,0xbc335149,0xbc388989,0xbc89fc20,0xbc8cd560,0xbc5ddc8f,0xbd020af7,0xbd3f39cc,0xbd5cae32,0xbd80f7e0,0xbd76bfce,0xbd407163,0xbd31d37b,0xbc94e224,0xbc85ff9b,0xbbf26869,0xbc06c2f5,0xbc5fddd0,0xbc1e815e,0xbc193cae,0xbbe3454d,0xbbe4551d, -0xbbba97b7,0xbbcb3933,0x3a46a2b4,0x3a93f910,0xbad708b8,0xbbd539c1,0xbb85848d,0x3c0e0d04,0x3c061d68,0x3c79a907,0xbb5d8af2,0xbcd17e1b,0xbd03f43c,0xbd4d937c,0xbd23385b,0xbd00a443,0xbc9f8a1d,0xbc68ffda,0xbc396bb0,0x393a9801,0xbade49cb,0x3adbe820,0x3b27e0d5,0x3b54d450,0x3a99188b, -0xb8e35cb0,0xbc5ce548,0xbd749799,0xbd5e509e,0xbcd77b5b,0xbca357d6,0xbc1112fa,0xbc27ef21,0xbb86bc5c,0xbb850436,0xbafe3e9c,0xba5893f6,0xbb3841ac,0xbb42b851,0xbb8aa295,0xbaf2f0b1,0xbb0c653f,0xbbf2ede8,0xba8a26ee,0xbaa47125,0x3ae1b94b,0xbbfe7d54,0xbc57576b,0xbbe9a1cc,0xbc022642, -0xbce51f70,0xbd5351d1,0xbd8c7144,0xbd93595a,0xbd71afc7,0xbcf18f82,0xbd33ff0d,0xbd86304f,0xbdb3855f,0xbdbc06b8,0xbda096f9,0xbd815ec1,0xbd6bebe9,0x3c231a03,0x3d673714,0x3d6f5665,0x3d228eca,0x3d22685b,0x3ca39c86,0x3c4bfacd,0xb94fdc13,0x3b624ba4,0x3a989088,0xbaab7a84,0x398727e9, -0x3853c1eb,0xbb12573b,0xbae2935e,0x3ab7e843,0x398a2d76,0x3bc5871b,0x3c5c4c8d,0xbbc0aee6,0xbc504e3e,0xbc93f513,0xbcc691ae,0xbceb8850,0xbcde7ccc,0xbcc4f2b9,0xbcbd191f,0xbcaeabd3,0xbc8979c8,0xbcb63d94,0xbcd977f2,0xbcfa1378,0xbda2e6f3,0xbdc63bf3,0xbda6a98f,0xbce89fbc,0xbc8719f4, -0x3c4c2ddb,0x3d29b5ec,0x3cbc9873,0x3c8e4b77,0x3c9ad6db,0x3c75e726,0x3c51d51a,0x3c5f8e51,0x3be74766,0x3b8d0a94,0x3b60530e,0x3b6c6a7d,0x3be1a14a,0x3aaf40fc,0xb8db10a4,0x3aa42920,0xba617639,0x3b10b765,0xbc83d49e,0xbca9947c,0xbc90cb05,0xbc998aae,0xbc92400a,0xbcb5e2de,0xbd218b19, -0xbd043785,0xbd20856f,0xbd79d30d,0xbd577b25,0xbd48d670,0xbd34a3be,0xbcdec184,0xbc21c9e4,0x3a6c0e65,0xbbb71c34,0xbc5b17b1,0x3a0b04ca,0x3cc5bf00,0x3c4dcd9c,0x3c4d521a,0x3c07b576,0x3ba5808f,0x3bc5e5f5,0x3bac3091,0x3bd618ef,0x3bab65b0,0x3b900e63,0x3b3c8554,0x3b8c2f13,0x3bea9386, -0x3c1e1743,0x3c241583,0x3bf31319,0x3b2dab76,0xb9af93b6,0xbc308c79,0xbc8ec51b,0xbca9c855,0xbcba6ad1,0xbcaa9a45,0xbc60407c,0xbb852054,0x3bc73fb5,0x3c80ea5c,0x3ca3780d,0x3c603725,0xbb9c9325,0xbb7c6ff2,0xbc056d0f,0xbc40bf7f,0xbc27a9a3,0xbb1d5219,0x3bcac356,0x3c46eb32,0x3c0d808a, -0x3c7edca9,0x3c4cecc9,0x3c39faf0,0x3c10f9ac,0x3c5875fa,0x3c25dcfa,0x3c7982a8,0x3c165d65,0x3c65f041,0x3c1c2458,0x3c391498,0x3c0bc59e,0x3c22c585,0x3c14ae02,0x3c20d454,0x3b9178c5,0x3b68547c,0x3c099faa,0x3c28dad9,0x3c5201fb,0x3c683be3,0x3c840f03,0x3c48e03e,0x3c099fb5,0x3ba54e57, -0xbb2e82de,0xbbe9702c,0xbc4350c1,0xbc0e0a3d,0xbbe2eac6,0xbbe2bd91,0xbb0d276d,0xbb653f4a,0xbb71500a,0x3c6ce830,0xbaa8f96f,0x3b7e44b7,0x3b8931c4,0xba17fb25,0x39423520,0xbb56016b,0xbb374230,0x3b05e74d,0xbae74bc6,0xbabeb8ab,0x39fe2870,0x3bdd978f,0x3c0a16fa,0x3bc91f8a,0x3c10b381, -0x3c90424c,0x3c605445,0x3c74ff68,0x3c4f4f09,0x3c369aec,0x3c252913,0x3c13fe47,0x3c0a671d,0x3bae422e,0x3b23e96e,0xb967d723,0xbb40f42d,0xbbcd87c1,0xbc335cb3,0xbc1f96e1,0xbc0c74bc,0xbbe41160,0xbba9ad42,0xbbb23162,0xbc070d60,0x3a2d87f3,0x3c307489,0x3cb5913b,0xbb845a82,0x3c1cf892, -0x3caf76df,0x3cb9ef6c,0x3cc02e73,0x3cba54ab,0x3ccd5ed1,0x3cd70695,0x3cd86133,0x3c352774,0xba771ab0,0x3cd6a04a,0x3c5764ff,0x3b886f74,0xba7428bc,0x380af538,0xba2f2bee,0xba1bc712,0xba838b45,0xbabb6380,0xbac65e75,0xbb4b24cc,0xbb90f337,0xbbc2bae6,0xbbeda3f0,0xbc076cf2,0xbc20b1a1, -0xbc057824,0xbbf62ee9,0xbbe1a365,0xbbdd9b88,0xbc03f1aa,0x3c811141,0x3c526275,0x3cb6ee90,0xbb50d4b1,0xbcacd196,0xbd02d118,0x3bd02512,0xbc855791,0xbcf9269f,0xbd005581,0xbd00fe66,0xbcee9305,0xbd04e5c4,0xbd051e37,0xbd005fec,0xbc8e30fa,0x3b61a438,0xbd00ba3f,0xbc9a1384,0xbb7dc9ac, -0x3cae4c8f,0x3c612939,0x3c815b94,0x3c7fb9fa,0x3c836959,0x3c849133,0x3c7e77ed,0x3c88d090,0x3c898f3e,0x3c844d78,0x3c8042b0,0x3c7d2c9a,0x3c86ca0e,0x3c736ac4,0x3c64d2bc,0x3c4b97ad,0x3c66062c,0x3c71e05f,0x3c8af2bb,0xbca9c08c,0x3c4b35a4,0xbba67af0,0xba7d55de,0x3c097e2d,0x3b84ef8d, -0x3c4e9c60,0x3c0feba2,0xbb35721c,0x3ba2aa38,0x3bc488cd,0x3b86018a,0x3988ea4a,0x3b9018be,0x3b940fe8,0x3bd22056,0xbca32de7,0x3c56a0d0,0x3c9272c7,0x3c8b1569,0x3c9b0c17,0x3ca3a504,0x3ca8ad22,0x3c97d37a,0x3cb19904,0x3caf1dad,0x3c9f7d7f,0x3c997d87,0x3c95aba3,0x3ca818b0,0x3c85c656, -0x3c61bad2,0x3c296740,0x3c44d3bc,0x3c838c00,0x3c488f52,0xbb0f1ce1,0x3b72cc52,0xbc1a49c6,0x3b8bcb26,0x3ba745c8,0x3b3931b0,0x3a3f116a,0x3be9b85a,0xbc0dd9c1,0x3bd34672,0xbbcb6b24,0x3b699c03,0x3ab2a597,0x3c1de93e,0x3bfcc552,0x3b8bd642,0xbb630a12,0x3bdd816d,0x3cb59cac,0x3c96705c, -0x3cade164,0x3cb88274,0x3cc207e2,0x3c9909ff,0x3cdbb6e3,0x3cdddead,0x3cb9f857,0x3ca6cfab,0x3c934e11,0x3cc3351b,0x3c6e24b5,0x3c1f01c5,0x3bd87980,0x3c2bed9c,0x3c6ef171,0x3c0ed0e7,0x3b0bc8f5,0x3c070323,0xbbd75ad0,0x3c0934ac,0x3c614aef,0x3c03485d,0x3c48e16e,0x3b8bb57a,0xba6f24c9, -0xbb72d473,0x3b223ee2,0x3c08e615,0x3c7c2a9b,0x3ca963e1,0x3bd111c4,0x3c6370c3,0xbbaaa2e7,0x3ba75443,0x3cb8bc95,0x3ca4082d,0x3cd9f22e,0x3cf55706,0x3cfbc069,0x3cb46e72,0x3d0c2725,0x3d0624f4,0x3cd1bc40,0x3cc4243d,0x3cb68882,0x3cf50938,0x3c84e0e7,0x3c0295e2,0x3b67de83,0x3b94e9fd, -0x3cf9f1a5,0xbc6b451b,0xbd27f1b5,0xbca74437,0xbb410402,0x3a09d5fb,0x3b984b7f,0xba598128,0xbbb39a40,0xbbe2e7d4,0xbb16ac85,0xbb034b7b,0x3ab892ac,0x3b74161a,0x3c2c330f,0x3c781b0b,0x3bb8747f,0x3c7fd751,0x3a4a87d4,0x3c47ca49,0x3d079292,0x3c9fa695,0x3cb09652,0x3b9b0ed0,0x3bb28b30, -0x3c4fcdf0,0x3cdc0f33,0x3d1703d3,0x3d4056b6,0x3cd06889,0x3c6d8df3,0x3c8ad1d9,0x3c00e1f9,0x3bec93df,0x3c3b2b25,0x3ca56a51,0x3c1eb7ef,0x3c400b2e,0x3b67d29f,0x3b9e37e6,0xbb53b3e5,0xbc2f234b,0xbbfccf76,0xbb5e9515,0xbb888a5a,0xbb8cbcb4,0xbba525e5,0x3ac1aa30,0x3b08ba9a,0x3aa901a3, -0x3ac578f9,0x3b0bc28b,0x3b706dc5,0x3bea0bc8,0xbaf04f00,0x3b2bef41,0x3c51000b,0x3c137678,0x3c9d48d5,0x3c29f30f,0x3afc13b1,0xbbcfb60c,0xbc570425,0xbc20ba7a,0x3be96647,0x3bb8feed,0x3bcc87b1,0x38668a29,0x3bbba66a,0x3bab7c7f,0x39515754,0xbbc25bba,0xbcd9696e,0xbd401691,0xbd363099, -0xbccc614d,0xbc9eac8a,0xbbbfcfaf,0xbb97eb25,0xbb3ceeff,0xba45f903,0x3b741286,0xba033765,0x3b0d086b,0x3a95423a,0xba45fa1f,0x3a0f44bd,0xb8b78394,0xbc08e46b,0x3c240d39,0x3c03bb5f,0x3bc43008,0x3bfb9eeb,0xbb9c4a5f,0xbb82700b,0x3ba141ad,0x3c5fbaaf,0x3c91ae4b,0x3cca90cc,0x3ce7fc11, -0x3cf89677,0x3ced0393,0x3ce4b0bf,0x3cb02f87,0x3ca8eced,0x3cac621b,0x3cad3f48,0xbc0bf410,0x3ccc5a09,0x3cf15a73,0x3d46c12b,0x3d38e361,0x3d07c162,0x3cb73f75,0x3c382b00,0x3b4e06e4,0x3b739694,0x3a29b69d,0xbaf3dd0f,0x3a9f267a,0x3998f400,0xbb2a460b,0xb930d057,0xba241dec,0xbb296267, -0x3c28ad02,0x3b49ac9e,0xbada3a04,0x3c4bcb18,0x3c4976ca,0x3c5dfa5c,0x3b776bd0,0xbb935e75,0xbc8c3791,0xbc36b41e,0xbc6857eb,0xbcbfdb87,0xbcdab603,0xbc9e2d39,0xba0030b8,0xbb91c3bc,0xb9062978,0x3c84c911,0x3c190155,0x3d9453bc,0x3ce1bcd7,0x39a03cf7,0x3c7a8b97,0x3c856ba2,0x3c5b17f4, -0x3c7849d9,0x3c67775b,0x3c234985,0x3c284b4c,0x3b442f7f,0x3b467c8f,0x3b840baa,0x3c189bbe,0x3b4e47eb,0x3ac1a490,0x3b1701b4,0x3afb27a4,0xbc08cd81,0xbc0dbf84,0xbc5ab272,0xbcb20849,0xbca37d3d,0xbc8c2c32,0xbc54d42c,0xbc80ab5a,0xbaffd19d,0xbafd792b,0xbc786c45,0xbc5b0b39,0xbc23a576, -0x3b416b25,0x3d049201,0x3d60b158,0x3d96a145,0x3d91aaba,0x3cb78c3b,0x3c27f3b9,0xbb818800,0x3ba6dcea,0x3aeb1968,0x3bc4dd19,0x3c2a755e,0x3c019473,0x3c5d4514,0x3c5e184c,0x3c514a97,0x3c170967,0x3c050cdc,0x3bfffcf8,0x3c1723bb,0x3c1573ff,0x3c0754eb,0x3bc253ed,0x3b61404a,0xbb24bf9e, -0x3ae606fc,0x3b44b724,0x3b012c78,0xbc12756f,0xbc4db7d3,0xbbfd7cca,0xba9098bd,0x3b9bea8b,0x3c145fcd,0x3cb7e0cb,0x3d1516e0,0x3d55f709,0x3d43561c,0x3d1de784,0x3ce9ae17,0x3caa3b59,0x3cb39e47,0x3c8193cf,0x3bf88385,0x3c4d8be0,0x3c11fff2,0x3c1ac353,0x3c02c86c,0x3c024f4e,0x3bc3715e, -0x3c25721a,0x3bfabcdd,0x3c583ff1,0x3c084564,0x3c26ef2e,0x3c0cd920,0x3c255497,0x3c0fb730,0x3c1ab273,0x3bf154f6,0x3c8a1cf7,0x3cb4324d,0x3c92efe3,0x3ca0e6b9,0x3cafbec6,0x3cc4861a,0x3cce2deb,0x3cda53be,0x3ce5e748,0x3cef0a66,0x3cdbd664,0x3cc55459,0x3cc60a5f,0x3ca5e03c,0x3c9bd92c, -0x3c95c85a,0x3c96c487,0x3c2598cb,0x3c17ef97,0xbbe9e531,0x3c016be0,0x3acdd23f,0x3adb4228,0x3bdbd6c5,0x3bb1668b,0x3c249d32,0x3c10d441,0x3b869e0a,0x3c0994ba,0x3c2cdbd1,0x3c1de20c,0x3c0251c3,0x3c384c92,0x3c7c056b,0x3c929eaa,0x3c48d489,0x3cad2f20,0x3c959f76,0x3c955c18,0x3c8c84bd, -0x3c84219b,0x3c73ecc5,0x3c5e2e6a,0x3c74f7eb,0x3c814a02,0x3c89dbe4,0x3c909c99,0x3c9952aa,0x3c9c5b1e,0x3c904813,0x3c7c8809,0x3c58adf6,0x3c34a641,0x3c2e479a,0x3c5ad3f4,0xb994c24f,0xbc178708,0xbc64f273,0x3ba726e8,0xbbfa7b02,0xbc69706e,0xbc7a5b8a,0xbc7ce681,0xbc619da4,0xbc80bbfa, -0xbc887dd7,0xbc875e15,0xbbdcd31c,0x3bba241f,0xbc540027,0xbba68266,0x3b917dc7,0x3c72e76c,0x3c49592c,0x3c56b10f,0x3c56bb3f,0x3c58588d,0x3c5bc882,0x3c5c7f24,0x3c5d2ad5,0x3c5a818f,0x3c580e75,0x3c5948fe,0x3c590086,0x3c5f2579,0x3c536ef3,0x3c4fd7ee,0x3c4d0393,0x3c45deaa,0x3c4704ff, -0xbb88bbcf,0xbb52806a,0xbc3a4fe7,0x3c7d8360,0x3cdb5dd1,0x3cb05105,0x3c0f8bdb,0x3cc87a52,0x3cce765e,0x3cda325c,0x3cd3ba70,0x3caa1738,0x3cc4c045,0x3cc4af23,0x3cb6935a,0x3cca515c,0x3c3e3ea9,0x3cc4de94,0x3cce95e4,0x3c814598,0xbc27e801,0xbb7a40fc,0xbba5d542,0xbbba7e71,0xbbb17d30, -0xbba3c54a,0xbb86f46f,0xbb6ae612,0xbb827428,0xbbc29312,0xbbb6abce,0xbbb01836,0xbb92eac8,0xbb7cc393,0xbb4e2397,0xbb04d6cb,0xbb663929,0xbb8e83b4,0xbb56ad4b,0x3cdcdf60,0x3a9179df,0x3c0cb2a9,0x3c2dc723,0x3bb13c49,0x3bb0ea99,0x3a574758,0x3b7e9c71,0x3c129259,0x3b527895,0x3aa0b27d, -0x3b8c39d1,0x3c28f85a,0x3c0d6f4b,0x3c3d07d5,0x3ba31cd3,0x3cb0c4ec,0xbb2c044c,0xbbfaa4d8,0xbbb61c60,0xbc0acbbd,0xbc05ce4e,0xbbf9702a,0xbbb08ed9,0xbb679359,0xbb87c133,0xbc0699a6,0xbbf53b43,0xbbbef5f1,0xbada8b6a,0x3a28752c,0x3b0052b5,0x3b13d16e,0xb8481876,0xbc066aad,0xbbb0f5a1, -0x3c5b9eaf,0x3bd6179d,0x3b6c385b,0x3c2ae0db,0x3c2d6237,0x3b8cd892,0x3c39c62a,0x3a7a1671,0x3bb38ed3,0xbbd384e4,0x3bb7aebf,0xb877bd5f,0x3c56b772,0x3c2766db,0x3c3fb9ac,0x3c1070b6,0x3c5606de,0x37e2ab2c,0xbc3b8ad1,0xbc0132e2,0xbc544e96,0xbc40f0ce,0xbc20e256,0xbb961564,0xbabc01a4, -0xbb571ce7,0xbc62cebe,0xbc40908c,0xbc28bdf0,0xbb876192,0x3b032246,0x3b979d94,0x3b168cc2,0xb83c276f,0xbbe6411c,0x38c88139,0x3c8f99c6,0x3bb658e5,0xbbed1e53,0x3bd3e614,0x3c1c4475,0x3b954d6e,0x3c00e121,0x3b8181fd,0xbc025851,0xbb7a1876,0xba973d3e,0xb9fa5f99,0x3c15b356,0x3c09ad4b, -0x3c89e87f,0x3b4f56b0,0x3c43ba60,0xbb48a82b,0xbc75f006,0xbc248948,0xbc90d18e,0xbc83ebc4,0xbc5e4102,0xbbf8fcd2,0xbab1e3c9,0xbbab8621,0xbc9e2dbf,0xbc617a9c,0xbbbe5cc8,0x3bebc675,0x3c926611,0x3ca6caf6,0x3c17a66a,0x3bb60b2b,0xbcb415b6,0xbc11429f,0xbbaf02cb,0xbb578e23,0x3ca17de6, -0x3c65695d,0x3bdeb28f,0x3b3f93fa,0xbb79ba1b,0xbbd6d9bf,0xbb6b8574,0xbb174d98,0x3a3e95db,0x3b9c3358,0x3c20905f,0x3c1b1a11,0x3c6ffba5,0x3ba1acca,0x3c8db709,0x3c5ed96e,0xbc763048,0xbc6088bd,0xbcb8ade9,0xbc7e26a2,0xbc81e4c8,0xbc3bbe56,0xbc50ef4d,0xbc69a030,0xbc0a2de0,0xbce76372, -0xbd172208,0xbce7a120,0xbd014239,0xbcdec5bd,0xbc996738,0xbc0fc743,0xbcf12870,0xbc08721e,0x3c95a967,0x3bb63395,0xbc431edb,0xbc6c8e01,0xbc82a44e,0xbbbce915,0xbbcc9228,0xbb7e60fb,0xbbb1d93b,0x39843a47,0x3a6a7684,0xbb454dcd,0xbb61c751,0xbae989bb,0x3b572060,0x3bfb4158,0x3c6da40f, -0x3b41f0e4,0xbc121ea2,0xbbfda078,0xbc8c8fbd,0xbc296486,0xbc03bfd8,0xbb924919,0xba0cba5a,0x3b23415f,0x3bed27f1,0x3b61318c,0x3c0aa7b8,0x3c82da66,0x3cc12fac,0x3ca16309,0x3ba15c93,0xbc5be2d1,0xbb14ce83,0xbd0aef9a,0xbcffb776,0xbcd9e75a,0xbc472ff3,0xbbce93ef,0x3b4ea648,0xbb1db49f, -0xb92e848f,0x3a388191,0xba8ba883,0xb883b2c8,0xb8c5f6fe,0xba27bc23,0x3b82f421,0xbb1ea173,0xbba2f2ca,0x3b9451c7,0x3c59643b,0xbb11a85a,0xbc537ad6,0xbc15b6f0,0xbc5af59b,0xbcb4fdcf,0xbce134bc,0xbce1f400,0xbcd89331,0xbce6f486,0xbcdf128a,0xbd1e1994,0xbd30580e,0xbd195607,0xbcc8b328, -0xbc0110e5,0x38cd576b,0x3c0cb32d,0x3ac4f9c1,0x3cb0eb3f,0x3d27fbe5,0x3d0edb2c,0x3cf670eb,0x3c53f0e5,0x3b89202c,0xbadd96a6,0x3ae6d062,0xb9e1dfef,0xbab0735d,0xb9f11b47,0xba9eb31b,0xbb591407,0xbb17c7fc,0xb98b34a4,0xbba31fa9,0x3bf6f8c4,0x3c7576ef,0xbb9b69a6,0xbc3a0341,0xbc438d1f, -0xbc26c616,0xbc25ee59,0xbc1e58f5,0xbc5f4e87,0xbb845e78,0x3882e6f8,0x39fb38e5,0x3aa145e9,0xbb3f684c,0xbcc86254,0xbc7b9660,0xbcc04459,0xbd2f1cb7,0xbc3cb22c,0x3d58cc07,0x3d774937,0x3d57721c,0x3d0d0e4e,0x3cd0996c,0x3cc86023,0x3ca4b398,0x3c9073c4,0x3c7aa3cf,0x3beca793,0x3b1ca710, -0x395d7b98,0x3b2701b2,0x3c14676b,0x3b98eb21,0x3b2bbba7,0xbb35aeb6,0x3a48d57e,0x3b813585,0xbc220569,0xbc40e452,0xbc6a893c,0xbca2f62e,0xbc70aaa9,0xbc283bbc,0xbbaea081,0x3b5335bf,0x3b73a22e,0xbbac00cc,0xbc99c0ca,0xbce37ed9,0xbd18ec04,0xbc0a8a64,0x3c973191,0x3d0b0276,0x3d595531, -0x3c699f53,0x3ca9aa92,0x3cbfe6a1,0x3c9bdea6,0x3c81fe0f,0x3c69d344,0x3c342357,0x3c493009,0x3c3f7513,0x3c3ff890,0x3c0ffe69,0x3c31185c,0x3c09e877,0x3ba3c7a2,0x3b9b4f82,0x3be3b89e,0x3c06e979,0x3c03b555,0x3b380656,0xbb1248c7,0xbc042985,0xbc255d90,0xbc1b6d6f,0xbc7db50e,0xbc91ed75, -0xbc94845b,0xbc9f15cc,0xbc8b107e,0xbc0e12b6,0x3b27793f,0x3c5431ef,0x3c8e5ff1,0x3cce1717,0x3cd9cb94,0x3cb1ca87,0x3ca9b8d1,0x3c07d062,0x3c54fb84,0x3ca546bf,0x3c85cad4,0x3ca18e28,0x3c76bd82,0x3c35fb01,0x3bdd06fe,0x3c233e3f,0x3be59ed4,0x3c5475db,0x3bc85d39,0x3c32fbea,0x3bec302e, -0x3c311c80,0x3c146848,0x3c32a8ed,0x3c5195e3,0x3c9898ae,0x3c802c4a,0x3c2faca0,0x3c57e730,0x3c4ddf9d,0x3c79f45a,0x3c903d40,0x3ca461b0,0x3cb09269,0x3cc2b43b,0x3cd15db1,0x3ca97438,0x3c8acf7f,0x3c6aab0a,0x3c4e2286,0x3c3be1c3,0x3c17370a,0x3c38ec57,0x3bd0dec2,0x3c0190f1,0x3c5ffab8, -0x3be06a21,0x3c2a8c59,0x3c19d60a,0x3bfdb71f,0x3c07e205,0x3be8fb1e,0x3c0fbacb,0x3c5fa24a,0x3c3526bf,0x3c2028c6,0x3c43c00a,0x3c682dfe,0x3c441b43,0x3c511754,0x3c36f718,0x3c95570d,0x3bdb30e2,0x3be61ff0,0x3c0ccb82,0x3c077e4e,0x3c160630,0x3c13ad4b,0x3c163820,0x3bcfa832,0x3b8907b8, -0x3b51d6bd,0x3b4b63d1,0x3b626a94,0x3b563c98,0x3b8128df,0x3b9e1923,0x3bb5a5a4,0x3bd37946,0x3ba8176c,0x3b6886a2,0x3c5a2256,0x3c8df485,0x3c51fa1c,0x3c358f69,0x3c8c0643,0x3c7a8d5c,0x3c838f57,0x3c86ee62,0x3c71f9cc,0x3c8a937c,0x3c910ba5,0x3c8d8066,0x3c9afe68,0x3c4240ba,0x3c8d9f01, -0x3c93808e,0x3c4e5287,0x3aa8bc73,0x3b9e45ab,0x3b94bb5e,0x3ba9fe42,0x3bb1635d,0x3bbe363c,0x3bdb60bd,0x3bc7f00a,0x3bbe9907,0x3ba878db,0x3b96ef17,0x3b834d33,0x3b62f992,0x3b864c83,0x3b8f89f1,0x3b9566e4,0x3b9c8525,0x3babbee2,0xba1a95e9,0xba6cdd40,0x3b2658e8,0xbc874335,0xbc9d12ca, -0xbbb1c6a7,0xbc43eec5,0xbc8ea165,0xbc11d977,0xbc0dad21,0xbc0902fa,0xbbb93c38,0xbbf35155,0xbbe6f867,0xbbaaaea6,0xbc929ccf,0xbc579fd2,0xbb0595c9,0xbc8abe57,0xbc82a0c8,0x3b3dd4e7,0xba1a11f3,0xba38d1a0,0xba4b42c0,0xba41d215,0xba360158,0xba0c6b95,0xb9db75d2,0xba59dc8b,0xbb2462ea, -0xbb1ed199,0xbb2586b0,0xbac520a3,0xbb3b9d51,0xbb25f74d,0xba3d823b,0xba92ba9a,0x3a7a00c9,0xbb8144bd,0xbc538a7a,0xbb12be03,0xbc2fe0c2,0xbbad920c,0xbb19c5cd,0xbb8216cc,0xb97e5a77,0xbb98d002,0xbc381741,0xbc09a6f5,0xbba5f960,0xbbe259d4,0xbb945ac7,0xbb0abd93,0xbbac2f0e,0xbb135a72, -0xbc37514c,0xbb8d8101,0x39c1906b,0xbb5bd89a,0xbb1a37dd,0xbb2613bb,0xba990bc6,0x39387172,0x3a122f44,0xbac350bc,0xbbc82150,0xbbd06b84,0xbbdf418e,0xbb826373,0xbc057ab2,0xbbe46189,0xbadf0a84,0xbb26f5bf,0x3ad1e6b8,0xbbb2934b,0xbc550083,0xbbc46049,0xbc38f783,0xb9c96525,0x3a347515, -0xbb2415b8,0xbae4c851,0x3b620493,0xbc1fe15b,0xb8b49efb,0xbbdffd07,0xbb4c22cc,0xbb511e58,0x3add128e,0x3b8c489b,0xb963ea7b,0xbc10773b,0xbbae956d,0x3aeb076b,0xbb6f884b,0xbb7715b5,0xbb84d1a3,0xbb2f4538,0xbb0088e0,0xb9f32839,0xbb6b6005,0xbc4ccc0d,0xbc544da8,0xbc68fe61,0xbbf38c2b, -0xbc7cedae,0xbc3e9246,0x3994310f,0xbb8a0adb,0x3bd75be0,0xbab45521,0xb9d42c65,0x3b5be927,0xbc03dddc,0x3b0c70de,0x3c206761,0x3bd3d492,0x3c2aa597,0x3b9a5999,0xbab0096e,0xbb5b4f3d,0xb9d4f860,0x3b98bfb4,0x3c244c44,0x3c554a37,0x3bdd536a,0x3c028b09,0xbbc644ee,0xbb9a6dc7,0x399de753, -0xbc0d3549,0xbc0c8570,0xbc0c2bf3,0xbba6b71b,0xb99b3ee1,0x39305068,0xbbd5d64e,0xbc97de17,0xbca358dd,0xbca5ac56,0xbc2cf5e1,0xbcc197fc,0xbc84ee05,0x3ab5e40a,0xbb367c1e,0xbb841aa8,0xbcd82c69,0xbd53fec5,0xbcffe878,0x3befcb58,0x3b18d0f1,0x3a7d658f,0xbb09415d,0xbbc15182,0xbbf957d9, -0xbb88fccc,0xba969a1c,0x3add85a8,0x3a24e338,0x3ba3e7ff,0x3c221044,0x3c3572f3,0x3bf26837,0xbba96b74,0xbb6551d8,0x3bf69cb2,0x3bcd547a,0x3c45ea62,0xbb8c5537,0xbada747a,0x3c47ff23,0x3c71971c,0x3c666714,0x3c4b63b5,0xbc5f6663,0xbcc2e7f5,0xbc94d3f1,0xbcbce259,0xbca08372,0xbc3d91bc, -0xbbc8a0cf,0x3ba9e5f7,0xbb4cb560,0xbb8a4fcf,0xbb066047,0xbcaa3b73,0xbcb24888,0xbc809a04,0xbc19ddd6,0xbbc78385,0xbb891754,0xbba565cf,0xb9477acb,0xb8f6c9e0,0xba7fbbb0,0xba918df2,0xbb6c5652,0xbc04d806,0x3b76b735,0x3b26ba1c,0xbb8b0cf9,0xbbefe13b,0xbc916709,0xbc9b1218,0xbc584c3c, -0xbc463d50,0xbc8f6e6d,0xbbbddea5,0xbae7491d,0x3b75dd1c,0xb7e8871e,0xbbf58595,0xbc8f2124,0xbc7182df,0xbc575644,0xbc1145f2,0xbbe6bd75,0x3b98c031,0xbcab53c7,0xbcec7eed,0xbca19f18,0xbc9cc0cf,0xbbc5d418,0xbae6ae5f,0xbb287538,0xbb46c638,0x3a9d8b27,0xba5f315f,0x39fabd8e,0x3a8b85a3, -0xb7b9e3b7,0x3b0a2b4c,0xbb0686fe,0xbc3fcb11,0x3b95cbfe,0xb9a8b151,0xbbbbd0c5,0xb8ade1e0,0xbc16139d,0xbc478ddb,0xbc874d2f,0xbc95fc52,0xbcb239d3,0xbc29a5cb,0xbc14a983,0xbc864811,0xbc206a1a,0xbc93e3e4,0xbd393367,0xbd2f238c,0xbd153278,0xbcf0cb6f,0x3a9da711,0xbd48fa7c,0xbb7cd076, -0x3cc415af,0x3cbb434d,0x3ca8c0d5,0x3bc03d7c,0xb93d0a8f,0xbb84710b,0xb994f881,0xbae70361,0xbb837acc,0xbae97625,0xbae2937a,0xbbd6c0f1,0xbb94b21f,0xbba28c09,0xbbf7b929,0x3bd2a026,0x3b1a1f98,0xbb5c36a5,0xbbb1865a,0xbc51ed5c,0xbc27b790,0xbc796ace,0xbc8eb641,0xbcb7252d,0xbcb33f50, -0xbcb6c067,0xbcc46a86,0xbcb3efe6,0xbcbae9ae,0xbce2ba20,0xbd028ef5,0xbd4ea1ac,0xbdb73d6c,0xbd964ee6,0x3ca674ad,0x3cbf4046,0x3cd13725,0x3cc05462,0x3c96f972,0x3c9fd301,0x3c9e835a,0x3c4a2cc0,0x3bea550d,0x3b98c87e,0xbae5f8e1,0xba210568,0x3adcefd4,0x3bac3b70,0x3b608bb8,0x3ac2faea, -0xbb25307c,0xbbcbf3dc,0xbc54012d,0xbc2edb3a,0xbc13b6e8,0xbc50824f,0xbc3d0c56,0xbc7fc00b,0xbc6d2998,0xbc2f6f85,0xbc741949,0xbcb054fb,0xbcea1ea3,0xbcfec930,0xbd1e7e48,0xbd4dbc6a,0xbd25e392,0xbcbd1af3,0xba5c4c86,0x3c349b32,0x3c503a7f,0x39f54477,0x3bbfb76f,0x3bca9bf8,0x3bca639e, -0x3bf1b276,0x3c3b0841,0x3c2a134b,0x3c4f15f5,0x3c50ff6e,0x3c52a049,0x3c33e737,0x3c05dcc0,0x3b3f5f5f,0x3984ee2b,0xbaea462b,0xbac034f4,0x3b4e999c,0x3b533990,0xbb019ddb,0xbb8c7292,0xbc11ef7e,0xbc49e9c7,0xbcaf65f0,0xbcdb16d8,0xbd017a38,0xbd0406a7,0xbccd81f5,0xbc35c402,0xba518d32, -0x3c574df8,0x3cd8b976,0x3d208d03,0x3d1fc307,0x3cfc631f,0x3c99ef6e,0x3c83d6e2,0x3c37dee5,0x3b80d503,0x3bb7f71f,0x3ba42c13,0x3b9f9964,0x3b7ff35b,0x3b50e030,0x3b25f38d,0x3ba30e57,0x3b1cf495,0x3bd2f7fb,0x3bb65a89,0x3bd86649,0x3be16c49,0x3bf150f7,0x3bdeeec2,0x3be5da72,0x3bd19ea0, -0x3c1e82fa,0x3c51e5e3,0x3c45197c,0x3c5806e2,0x3c6e5dcc,0x3c885df7,0x3c95b0c8,0x3ca7bb37,0x3caeda61,0x3cb3d07c,0x3ca257d4,0x3c979cef,0x3c95dcaa,0x3c70e7c1,0x3c59946b,0x3c61e321,0x3c60ca70,0x3c0955b1,0x3bd54aa3,0x3b75ca05,0x3c04bb51,0x3b9949c7,0x3bb2ab20,0x3beed490,0x3be0da46, -0x3c0d6b3c,0x3bbdb341,0x3b357634,0x3b73c826,0x3bb67677,0x3b84339c,0x3b7c54ce,0x3bb43aba,0x3b9fa5a1,0x3bf6aa4e,0x3badebb0,0x3c04e4d8,0x3c2189f3,0x3c2c0247,0x3c406d2f,0x3c500bd9,0x3c5c906c,0x3c6bce26,0x3c65cf50,0x3c608689,0x3c5acbad,0x3c57731a,0x3c51903a,0x3c4c5d86,0x3c48aa1c, -0x3c389c0d,0x3c23a2ed,0x3c074472,0x3c209c45,0x3c30f454,0xba07f276,0xbb2ebca2,0x3b688ae2,0x3aee773c,0xbb1fe7e2,0x3a8d09b7,0x3a43bdfb,0x3a988613,0x3b432b94,0x3b0a6f63,0x3afd8b25,0x3b2b42cc,0xbb6e7bb5,0x3a60f76c,0x3b4083fa,0xbb3a8489,0x38165801,0x3c322f64,0x3c26786c,0x3c322ab6, -0x3c3e74e3,0x3c47ea05,0x3c53940f,0x3c6373a1,0x3c58736d,0x3c5126cc,0x3c48d80d,0x3c413a04,0x3c387af8,0x3c2cc7be,0x3c28e989,0x3c272890,0x3c28bb83,0x3c25d5b0,0x3c3444b3,0x3c335fac,0x3c125998,0x3c00d9d3,0x3c97beaf,0x3c5ad2d5,0xbc04232e,0x3ca06057,0x3c736d20,0xbb09c224,0xbaf6d24b, -0xbb21a830,0xbba97129,0xbba2ce76,0xbbb309f2,0xbbe8526f,0x3c6b48fa,0x3ca1b191,0xbbee9108,0x3c6071c0,0x3c9db514,0x3c219708,0x3c2235d4,0x3c320691,0x3c2e603c,0x3c2e7c69,0x3c33a63f,0x3c49ea26,0x3c3aac1e,0x3c324822,0x3c16d524,0x3c30e205,0x3c3bbf4c,0x3c47998c,0x3c551506,0x3c504324, -0x3c2e75c4,0x3c2ba868,0x3bf36fc1,0x3c4458ce,0x3c14e5bd,0x3c59acec,0x3c310da8,0x3c1f76c5,0x3c3901c7,0x3c19f780,0x3c34eb56,0x3c5f455a,0x3c5a5329,0x3c4f52e5,0x3c1a5ce3,0x3c3cbefc,0x3c1a2057,0x3c29eae3,0x3c8b9e36,0x3c460741,0x3beddc89,0x3c6ef503,0x3c3bc437,0x3c68d9b2,0x3c5e826b, -0x3c5771e3,0x3c5d4706,0x3c86befe,0x3c5f5d0d,0x3c430b1e,0x3c1598f1,0x3c519d7e,0x3c8216fa,0x3c9800fa,0x3cabe880,0x3c9bd572,0x3c4604a6,0x3c39f999,0x3bc9dde8,0x3bde3512,0x3c60a4d2,0x3c2f1062,0x3b648c1f,0x3c287505,0x3c1c050c,0x3bb63b3d,0x3c0bdf6f,0x3ba94e9a,0x3bdfae58,0x3b246b2b, -0x3b506d09,0x3bc1556d,0x3c1bff41,0x3c543869,0x3c739606,0x3c543be1,0x3c67a05e,0x3c486db7,0x3c517894,0x3c77c54c,0x3c7fb08d,0x3c7ab0e5,0x3c8ab551,0x3cc6718e,0x3c98335c,0x3c82a321,0x3c045152,0x3c7a7614,0x3ca3b6d0,0x3cc11d41,0x3cf4c31b,0x3cd00557,0x3c562fdc,0x3c523a8f,0x3b51dce6, -0x3be5c41a,0x3c9e6702,0x3c7fdd4a,0x3a214068,0x3c07e424,0x3c19c8c4,0x3b626c44,0x3c098044,0x3bb19c87,0xbb96480c,0xbb9c85a2,0xba06dd38,0x3b07e417,0x3c23f313,0x3c48b9ac,0x3c86ab34,0x3c2f96cf,0x3c34304b,0x3c2a63fe,0x3c6e1d7e,0x3ca55262,0x3cacda6e,0x3ca8d47b,0x3cc042e7,0x3d05c2c6, -0x3cb9036f,0x3c604654,0x3ba3154a,0x3c9916c3,0x3cf644e8,0x3d1877c7,0x3d343a38,0x3d111ec3,0x3c4e909c,0x3c4530ab,0x3c624aa7,0x3c27151a,0xbc52f018,0xbc30f538,0x3c88735c,0x3c259fc5,0x3bdff7fd,0x3b4bb954,0xbb0054f0,0xbb84c7a6,0xbb832fc1,0x3952a0fe,0x3b1b59b8,0x3ac6b35f,0x3bcd0325, -0x3c2b10e8,0x3c9b571f,0x3c5f2ffe,0x3c77219a,0x3c8bfa34,0x3c629592,0x3c104e3c,0x3a85a9ae,0x3b47158c,0x3b107819,0x3aae3d1f,0x3beba137,0x3c3999fd,0x3c8c7009,0xbc012c7f,0xbbee6120,0x3c8540a3,0x3c86438f,0x3c8ab4cd,0x3c3690b1,0x3c9437e4,0xbbd064f6,0x3b3797fa,0x3cbd7013,0x3c5b3fbd, -0xbbbaaf14,0xbc3d5462,0xbc56eba5,0xbc02f1b4,0xbbc35c64,0xbb19d213,0xbb77f8ca,0xba55f6f3,0x39ef80fd,0xba37cd29,0x3ad49b5a,0x3ab3e818,0xb8a12b2d,0x3bec8bbc,0x3c0dc7ae,0x3c0e8b50,0x3c5f87a4,0x3c8e2bda,0x3cae61ca,0x3c568beb,0x3bf286ec,0x3af67d46,0x3bda18e2,0x3b83de7c,0xb9ce06b4, -0x3bc3664a,0x3bf6cf81,0x3abec19e,0x3c87e956,0x3c3db92d,0xbc4fb9d8,0xbb8c02b1,0x3c957fcf,0xba210cd2,0xbc89e443,0xbc889a4f,0xbc339bfd,0xbb93958e,0x3b0c798e,0xba7c08fa,0xbabfdf1a,0x39f0571b,0x3a951b4a,0x3a25035d,0x3a1c346d,0x399220e4,0x3bb5a02e,0x3af6f726,0xbb862f5e,0x3c08234e, -0x3c59b487,0x3b3c56a1,0xbb88a92c,0xbbcfae62,0xbbe04137,0x3a993e2b,0x3c33f419,0x3c9125f2,0x3cc41eeb,0x3c80114f,0xbb8dd401,0xbbc2ad13,0x3bcc7dd3,0x3cc95399,0x3d3de9ae,0x3d54e79d,0x3d4d311c,0x3d026704,0xbccbe2aa,0xbc5641ff,0x3c280761,0x3c922e8f,0x3c432ccb,0x3b442f0e,0xbba85ad1, -0xbbe473cc,0xbb11ebb7,0xbb5786cb,0xbb79407f,0xba440ddf,0xb9bf8251,0xbb77aff9,0xbb31d12b,0xbb00a988,0xbb261f5c,0x3bc79e6c,0x3bfe0c4a,0x3b69d03e,0x3b384238,0x3b95026d,0x3bf50200,0x3c167003,0x3bf5a1a5,0x3b04253c,0x3be3f9c9,0x3c15f5ed,0x3c2d78fb,0x3c1d83c3,0x3bc355cb,0xbc0bac86, -0x3cd131eb,0x3cf59050,0x3c8067a6,0xbc4fba01,0x3dbb0e00,0x3da1d2ab,0x3d346b60,0x3d22603d,0x3d030793,0x3cf58f44,0x3cdaba9a,0x3ca3cb1d,0x3c5a67f4,0x3c051f54,0x3b6e9bae,0x3a8c250f,0x3af8a4aa,0x3bae036a,0x3b636c7d,0x3ab67882,0xbb676758,0x3a4a4669,0x3a75cccc,0xbaa8bd4f,0xbb696a87, -0xbba0a0fa,0xbb6d8af8,0xbb284d48,0x3bb6800e,0x3c990ba9,0x3c4e52c4,0x3c39717e,0x3c9bd105,0x3c01f986,0x3b41ae2a,0xbb5ffc18,0x3bef4754,0x3cdbd7d0,0x3d5f572d,0x3d9eebef,0x3d1c23a9,0x3d07d98f,0x3c907c4f,0x3cba2c8b,0x3c8bc202,0x3c9e4f0f,0x3c8b81a6,0x3c65a349,0x3c786c33,0x3c6a4cb9, -0x3c5ed5c1,0x3c581642,0x3c21b0dc,0x3b5237c5,0x3a921fbb,0x3b1ac143,0x3bb1b2f7,0x3bbf45e2,0x3b531669,0xbb03735c,0xbb8952d7,0xbbbe3e85,0xbbfd5c38,0xbbbc6f55,0xbc10d33c,0xbc75b90e,0xbcbc4816,0xbcd48192,0xbcafc76d,0xbc3d4c0c,0x3bf0de9e,0x3d086565,0x3d335e24,0x3d49f8d5,0x3d429a21, -0x3d2d2fb5,0x3cdd686e,0x3cc14f55,0x3cb7d120,0x3ca62333,0x3c830101,0x3c613267,0x3c2bad74,0x3c065eb7,0x3bee8c9c,0x3bf398ff,0x3c0489d6,0x3c033946,0x3be6ca22,0x3c12d4cd,0x3c13de52,0x3c1bba51,0x3c15fdb9,0x3c22d942,0x3c6e2c33,0x3c4bd9ca,0x3c0fd89c,0x3c126eb5,0x3bd16c5b,0x3c13e561, -0x3c368271,0x3c5d0461,0x3cb67b73,0x3cf89241,0x3d191844,0x3d224e1a,0x3d260f70,0x3d2e42f6,0x3d164f4a,0x3d0a9a37,0x3d01841a,0x3cf41841,0x3c9f3517,0x3ca374b1,0x3c0d48d7,0x3c8982f8,0x3c792ed0,0x3c6df989,0x3c8ac537,0x3c8766ff,0x3c934b94,0x3c9b7d31,0x3c9a43e3,0x3ca20a5c,0x3c924665, -0x3c93acde,0x3c73281b,0x3c4e1b62,0x3c753eae,0x3c36f8c0,0x3c0e57c7,0x3bc43670,0x3bc93c07,0x3c15ca49,0x3c2ebbd0,0x3c4d9ee1,0x3c67b7d1,0x3c7b0a7b,0x3c824221,0x3c899346,0x3c9b82ca,0x3cb1fef6,0x3ccea7b5,0x3cf22f0d,0x3ce2aa46,0x3cd583a8,0x3cc35542,0x3cb29b58,0x3c9c2a5c,0x3ca04b0e, -0x3cb0fab7,0x3c8d2f29,0x3b79f495,0x3cbde9de,0x3c93698c,0x3bda4419,0x3bcacc7f,0x3bbeb8d1,0x3ba076c1,0x3b9982bc,0x3b93a160,0x3b8193d2,0x3c96e2f9,0x3cafd445,0x3b8240de,0x3c883d61,0x3c9b8986,0x3c5da0b6,0x3c7a3ab6,0x3c8142ab,0x3c859c26,0x3c89aae5,0x3c8d9ad2,0x3c92d6e4,0x3c9a394f, -0x3ca191be,0x3ca681f1,0x3caca826,0x3cb068c0,0x3cba26ef,0x3cafbafa,0x3cac0965,0x3ca77dbc,0x3ca6030c,0x3cae982d,0xbc420121,0xbc24c5ea,0xbc6f8223,0xbc43ccae,0xb83e2119,0x3cabcd7b,0xbc730148,0xbaf2531a,0x3c88be17,0x3c92ea27,0x3c9510a7,0x3c97d3de,0x3c9d42de,0x3ca0ae96,0x3ca94cd8, -0xbabd0799,0xbc59100d,0x3ccb9edc,0x3a71941f,0xbc269e89,0xbc5331a2,0xbc258328,0xbc44923e,0xbc48da0d,0xbc4e30b0,0xbc4d3232,0xbc3b0a15,0xbc4a9c33,0xbc536c80,0xbc6633bf,0xbc6594f6,0xbc662daa,0xbc5daf3e,0xbc602a56,0xbc5275fa,0xbc24ebef,0xbc39673c,0xbc362190,0xbc8c1c0c,0x3bc4de2f, -0xbc2bc1e0,0xbbac4ba3,0xbb156a95,0xbbda6068,0xbbae9e43,0xbc032ce0,0xbc1bd5bd,0xbbf891c2,0xbc3d03e9,0xbc1408ed,0xbc0e6ead,0xbad64237,0xbaf9beca,0xbb9b66e4,0xbb859ec0,0x3c02e825,0xbc51e614,0xbc45a67a,0xbc787f4a,0xbc872c06,0xbc8e2612,0xbc88539d,0xbc5f6ea9,0xbc84e467,0xbc963c1c, -0xbcad40ec,0xbcb0551f,0xbcacef91,0xbc99b147,0xbc9aeab8,0xbc84db95,0xbc1b2055,0xbc45194e,0xbc4980b4,0xbc8d5390,0xbc1d01a1,0xbc020d8b,0xbb48f3a8,0xb9263646,0x38e8a635,0xbb51456f,0x3a5837ef,0xb976b0b2,0xbb23486f,0xbbbd3aca,0xbb03a09d,0xbba7b5a1,0x39e71ada,0x3741b857,0x3b928ca2, -0x3ade0735,0xba86c4eb,0xbc01701c,0xbc5bec21,0xbc860c18,0xbca5b99a,0xbcb24931,0xbcac9d4b,0xbc7c72fa,0xbca39f89,0xbcbea466,0xbcf3b5d6,0xbcf51417,0xbcf4670f,0xbcd3d609,0xbccce28e,0xbc9ff303,0xbbcefb3c,0xbc3cb866,0xbc55a080,0xbc7a0056,0xba8efd00,0xbb49ec73,0xbba06ef7,0xb958bbdd, -0x3b95c441,0x3b3d7850,0x3bcde114,0x3b907b74,0xbb0a09b3,0xbb4e0c93,0xbb3c4379,0x3aade185,0x3bbb8637,0x3bd70e14,0x3c3d5e67,0x3b6cfa10,0x3b6cf3ea,0xbbca3901,0xbc751860,0xbcb6671c,0xbcf08517,0xbd012e78,0xbcef053e,0xbc9f9695,0xbcda7813,0xbd0e5154,0xbd2efd9f,0xbd2ecd12,0xbd1e982b, -0xbd03538d,0xbcf6b42c,0xbca3da47,0xbaa74d70,0xbc01b3a4,0xbcea338a,0xbcb1cae1,0xbd0c13e1,0xbcd4128c,0x3c5ba557,0x3bdf2b3c,0x3a9bb7aa,0xbadb7b72,0xbb763c8b,0xbbba0098,0xbb9cbf72,0xb9ec184b,0x3a93afe2,0xb9eea944,0x3b2e82c1,0x3baf81b2,0x3c580499,0x3aa6ca56,0xb99c17e8,0xbc1d1a8b, -0xbc7479b8,0xbbec619e,0xbbb90a0b,0xbb9be96e,0xbb56de3b,0x3b65dfc3,0xbb11ac6b,0xbb8a00bd,0xbb4cf551,0xbd0b97f4,0xbd395e8f,0xbd1ded89,0xbd105f6b,0xbcf23cf9,0xbccb22db,0xbcce4f35,0xbbd0b79a,0xbc0ee693,0x3a86d709,0xba7cd6fb,0xbca49c90,0xbc911f67,0xbc51ffb6,0xbbf4b911,0xbbd8ab69, -0xbb892df6,0xbb7db056,0xbaaf962f,0x393e0583,0xb6e19cc0,0xba936a57,0xbb8ef0f0,0xbbfa3594,0x3b283260,0x3c0861b4,0xbb3c0492,0xbc885486,0xbcd709fc,0xbd175af1,0xbce81cb6,0xbc9bbbc6,0xbc3baa00,0xbbc33eda,0xbbfeaa3a,0xbc672105,0xbc685c19,0xbc6c4375,0xbc97d7e0,0xbc720452,0xbc87b505, -0xbcb4e447,0xbc478970,0x3baf142a,0xbaf91ed9,0xbbfa1b58,0xbc381a0b,0xbc0a9f54,0xbbeabf23,0xbaf0cd0e,0xbbc53521,0xbba61255,0xbab88397,0x3919843e,0xbadadca5,0xbab937a1,0x3922ea3f,0x3a80dab9,0xbb9d3fe1,0xbbd9bedd,0xbb10d34e,0xbb866d17,0xbc15ec8f,0xbc1abfa7,0xbc19aa6f,0xbc145056, -0xbcc582b4,0xbd1509fc,0xbd31dc23,0xbd2b341f,0xbd0e54ba,0xbceb295f,0xbd1710b7,0xbd530135,0xbd92f670,0xbd821fda,0xbd562436,0xbd2b83c6,0xbb37b3d5,0xbdbba244,0xbcebd57a,0xbbe512df,0xbbc83fbf,0x3b24670a,0xbc3bf5bd,0xbc3a2ed3,0xbc599cc2,0xbbc39946,0xbba6a92f,0xbbb36ab6,0xbaf84caf, -0xb9db59bd,0xbb984181,0xbb943369,0xbb9babd4,0xbbcccc6e,0xbac953f7,0x3b1e217d,0x3a9cdb9b,0xbc3e543d,0xbca5397c,0xbcb8a336,0xbcbcb5d2,0xbc93907a,0xbc336ad6,0xbc6e1ad3,0xbc8d1a2c,0xbc9187a1,0xbc9ecfa6,0xbcb36646,0xbcca4305,0xbd515e8e,0xbda1b5ce,0xbde18bd9,0xbddac755,0xbc03a486, -0x3cfad95c,0x3d5d4258,0x3d186596,0x3cd72642,0x3d020b5d,0x3cd979da,0x3c53d9e7,0x3c112e82,0x3b2ccc32,0x3a7dbcdb,0xba6ee3f8,0xba904a8f,0xba30bf76,0x3a09ad94,0xb993ff66,0xbb9e0e6b,0xbb801781,0xbb84a366,0xbc0caeb1,0xbbf4d011,0xbb897bfc,0xbb5fa4e9,0xbb940888,0xbc1c1f00,0xbca56d53, -0xbcf1cc57,0xbd140e19,0xbd25e89e,0xbd18973e,0xbd31e12b,0xbd66cf04,0xbd94ea91,0xbd874a2f,0xbd248999,0xbcb8b132,0x3bc22978,0x3bba4b34,0x3cbb55f8,0x3c764c6a,0x3c7dd41d,0x3c5f31e6,0x3c50822a,0x3c2f3a60,0x3c38b5e4,0x3c46b686,0x3c4b5495,0x3c307d31,0x3be0104b,0x3b01fb92,0xbb28506e, -0xbb8146e4,0xbb5d1a1a,0x3b05ed9c,0x3b236f48,0xbaa88065,0xbc2e1650,0xbc94134d,0xbcba6025,0xbcdcf6d4,0xbcf72163,0xbcf8ba57,0xbd06728d,0xbcefa02b,0xbc9f4eef,0xbca6e2dd,0xbc9b4fec,0xbc8f8e84,0x3be3219d,0x3c8b6d31,0x3c81c670,0x3c450c1f,0x3c7dfda6,0x3c652a33,0x3c448b30,0x3c0af574, -0x3c166d68,0x3bf82d85,0x3bec3d8a,0x3bad600b,0x3bdb24bd,0x3bc1d7fc,0x3bbf66bb,0x3bbcef1e,0x3c1189d3,0x3c171b0e,0x3c163159,0x3be88eb4,0x3bce9aa2,0x3b430694,0x3ad649bd,0xbb9003db,0xbba181a3,0xbb1498b2,0xbad659e8,0x3afd3701,0x3b93a7b6,0x3bf21297,0x3c0ca416,0x3c15943b,0x3c1ebcef, -0x3c4b2145,0x3c8b5f52,0x3ca18be4,0x3c96c827,0x3c92c6a2,0x3ca49940,0x3c966c92,0x3c5cc0cf,0x3c5358a8,0x3ca46d6e,0x3c62e7d8,0x3c698242,0x3c777268,0x3c4c035c,0x3c4bd780,0x3c284cc8,0x3c0637c3,0x3c0cb179,0x3bbfcdc0,0x3bb27e9d,0x3b89df00,0x3bce4b88,0x3bd9396e,0x3b65b5db,0x3ba5ae42, -0x3c014d31,0x3bb78cd7,0x3c1ea263,0x3c23e456,0x3c38e60f,0x3c4d3ead,0x3c6459ed,0x3c813e55,0x3c71b26c,0x3c62189a,0x3c463940,0x3c32aff1,0x3c0f4262,0x3bfe1fb3,0x3c14819b,0x3c290440,0x3c3705e9,0x3c3e42f3,0x3c33c1f2,0x3c2c8d0e,0x3c16aa59,0x3c67dea7,0x3cc28931,0x3be95f1b,0x3c543b01, -0x3cb18fc9,0x3cb3bd67,0x3cb6e904,0x3cb96fe0,0x3cbe255b,0x3cc2b9fd,0x3cc64de6,0x3c2e1be3,0x3b9be7d2,0x3cb77e72,0x3c2f853c,0x3bc236a6,0x3c0432a9,0x3c13ea81,0x3c1859f2,0x3c28f788,0x3c30feac,0x3c38a079,0x3c458021,0x3c368f40,0x3c30dd7c,0x3c2da51d,0x3c2585d9,0x3c1fc399,0x3c0ee4f9, -0x3c18be29,0x3c1b53c3,0x3c201d14,0x3c26a019,0x3c201200,0x3c7ed749,0x3c480a05,0x3c9375d3,0x3bd6f422,0xbbf61eba,0xbcc5339e,0x3c59a4cd,0xbb89e599,0xbcadce5b,0xbcb3ba11,0xbcb3e014,0xbca9679d,0xbcbf14d9,0xbcc26b20,0xbcc370e0,0xbb9c1165,0x3c3a724f,0xbcc6d58c,0xbbb27d81,0x3bf2668a, -0x3c9ebb90,0x3c69a8e7,0x3c83cf92,0x3c83d17a,0x3c829c10,0x3c831866,0x3c88c039,0x3c7c6e7b,0x3c76d8b0,0x3c7433cd,0x3c808cde,0x3c8531a2,0x3c89f945,0x3c8c7a32,0x3c845f40,0x3c4e90da,0x3c63b02b,0x3c3fc14e,0x3c7a0852,0xbc41ba91,0x3c5f2b7b,0x3b852e48,0x3b1d085e,0x3c0b4583,0x3bd42073, -0x3c4955df,0x3c457578,0x3bdfc15f,0x3c2b17bd,0x3c12c6f5,0x3c0b2c33,0x3b61317e,0x3bd2d15e,0x3c2ddcdf,0x3c2fd69e,0xbc037885,0x3c915979,0x3c9cc5bc,0x3ca18508,0x3cabcb69,0x3ca74e62,0x3ca53ae9,0x3cac375a,0x3c8ca56d,0x3c8245f1,0x3c8750d8,0x3c9339d6,0x3ca0eaf7,0x3ca7aa57,0x3cafb2fe, -0x3c97d56c,0x3c219b06,0x3c4080ea,0x3c22138f,0x3bf0fbb7,0x3b2650dd,0x3be62bd1,0x3a123a94,0x3b901bde,0x3b5a4725,0x3b6c8cf9,0x3af83272,0x3bdc63d9,0x3b25b8ad,0x3c03501f,0xbab5852b,0x3bc13907,0x3b2bb500,0x3c1db293,0x3c377ba1,0x3c2c4dd8,0x3bed4e42,0x3c600c07,0x3cc305a6,0x3cb7be70, -0x3ccfeca2,0x3cc556f8,0x3cc70c9f,0x3cdcd534,0x3ca21d5e,0x3c93ecd4,0x3c944bd3,0x3cb24a3a,0x3ccfde62,0x3ce0794e,0x3cf33895,0x3cbce40b,0x3bc9f1cf,0x3c1c7e6a,0x3b84b636,0x3a1d5fcb,0x3b073758,0x3c2b2c4a,0x3b41144c,0x3b9029ad,0x3bbfcb21,0x3b2117ab,0x3bf0c62b,0x3bae9fe6,0x3a7d7ea5, -0xbb69550c,0x394bf1e6,0x3b8a65b4,0x3c1cc764,0x3c6dea50,0x3c41ddda,0x3c6c4d08,0x3b9f391f,0x3c624128,0x3ce34d46,0x3ce5b577,0x3d099ce8,0x3d0351ca,0x3d03d2bd,0x3d088664,0x3cb087ab,0x3c766624,0x3c8cca46,0x3cc17ca6,0x3cf4eed8,0x3cfd929b,0x3d032be4,0x3cac443c,0xbb127f12,0x3a817ef8, -0x3ce994ae,0x3c235ab5,0xbcb4de9c,0xbc8848be,0x3bd2a96c,0x3ba72ac1,0x3bde0f60,0x3aa6263b,0xb87e39d5,0xba9fb006,0xbb4cdcad,0x3ae47bd7,0x3b15c936,0xba377f1f,0x3b8b05ad,0x3c2ac973,0x3c667015,0x3c90510c,0x3c02b51f,0x3c4a3a49,0x3cf17411,0x3ca69078,0x3c9b663e,0x3c32730c,0x3c26d060, -0x3c4cef03,0x3ca1723e,0x3ce18b86,0x3d24138f,0x3c8b7cf8,0x3c8f23f4,0x3d09ee59,0x3d1cd07f,0x3d1739aa,0x3ccced57,0x3cc80525,0x3c583b39,0x3c4ca081,0x3c5690f1,0x3c343b1b,0xba117d2d,0xbc122ecd,0xbc07eb39,0xbb82643d,0xbb6c0ba9,0xbaed7a90,0xbae2d65c,0xba250477,0x3aa0708a,0x3b4144a4, -0x3bbce935,0x3b734a98,0xba69e0e8,0x3b738c10,0xb9e16a82,0x3c1de38a,0x3caa85dd,0x3ca70ea9,0x3cf0aa46,0x3c922df7,0x3c3feabd,0x3bf5b8e7,0xbb82a312,0xbbf6fd36,0xbb870986,0xbbbb86ed,0xbbbc7881,0xbc27af5e,0xbb6fd24c,0xbbd743fe,0xbca014df,0x3a1ba088,0x3c7d28b5,0x3c120312,0xbc22832a, -0xbc212be1,0xbc529d95,0xbbbd42dc,0xbb65372e,0xbbba7460,0xbb703d08,0x3a549a49,0x3aec8bc2,0x3abd94b9,0x3a9a8631,0x3aa95e12,0x3b278a3e,0x3b2e3111,0xbb277515,0x3bff21f7,0x3bdcc530,0x3c04962e,0x3bc0068f,0xbac8d923,0x3b600145,0x3c594a89,0x3cd5dbe2,0x3d18b21f,0x3d115f08,0x3ceff89c, -0x3c838835,0x3c87bda1,0x3ce4f8dd,0x3d34ec29,0x3d69497c,0x3d61a3e5,0x3d48c371,0x3cbee4f1,0xbd2ba769,0xbd25cde7,0xbcacbf87,0xbbf776b9,0xbc16173a,0xbc1b8697,0xbc3efcd1,0xbc2facf0,0xbbcf7c9d,0xbba8de3f,0xbb7d3d19,0x39cdbf45,0x3a937a77,0xba473ebd,0xb991cc6d,0xbafc94b5,0xbae35aa7, -0x3a286756,0xbb01e901,0x3c21db3c,0x3c55c66d,0x3c599183,0x3c6625e5,0x3c319256,0x3c0b9e00,0x3bda1095,0x3ba2e387,0x3b4c9b44,0x3b373030,0xbb6aade5,0xbb1a2041,0x3c2761b0,0x3c8eb24b,0x3cc1209e,0x3d08bb23,0xbcc4149e,0x3d93b8d8,0x3d5a0b62,0x3cea2b6b,0x3d149e9c,0x3d0287a8,0x3d035d84, -0x3ce3981e,0x3c769771,0x3c119e2b,0x3bdb45be,0x3ba19e83,0x3ac4663e,0xb950ca93,0xb9818dc0,0x3a21789c,0x39e019dd,0xbb13dc0a,0x3ba72342,0x3a1a89a3,0x3b7fbe90,0xb969e2fd,0xbb71ffbf,0x3a1d43e1,0x3aebfd5e,0x3abac04a,0xb8f70171,0xb9b6998f,0x3af18631,0x3c06c698,0x3befa87b,0x3c1472aa, -0x3c6fa193,0x3b9e808a,0x3c0a0bda,0x3cf04f0f,0x3d51fc13,0x3d24bd39,0x3cf38d57,0x3c4bc648,0x3ca0dae2,0x3c6853b8,0x3c8c231d,0x3c9312cf,0x3c73ceae,0x3c90d653,0x3c860a7f,0x3c85f823,0x3c4f5a56,0x3c27be8c,0x3bf3855b,0x3b75cec4,0x3b1d2a37,0x3ad8e7e6,0x3a278a1e,0x3985253d,0xbb815862, -0xbb517f2e,0xbb589759,0xbbcbdd85,0xbbfb5197,0xbc1bf38b,0xbbe89d95,0xbc30cba5,0xbc6f851a,0xbc90ff2f,0xbc877384,0xbc010a4c,0x3c418c3e,0x3cdb4e98,0x3d18e1af,0x3d2238f7,0x3d1c3f93,0x3d15568c,0x3ce0bcf9,0x3ca488d3,0x3cad9230,0x3c67398b,0x3c65bc0c,0x3c507347,0x3c41e6a1,0x3c04dbf2, -0x3c29e5c1,0x3bd2abef,0x3c3c2071,0x3bf3918c,0x3c3ab0da,0x3c0d6454,0x3c167bef,0x3be3ecea,0x3b91a082,0x3b0129dc,0x3b3d05cb,0x3b8c47ac,0x3afc2639,0x3ab573fc,0x3b757fd8,0x3bb397ea,0x3bd66f2d,0x3c3795a1,0x3c847512,0x3ca77721,0x3cfa62e8,0x3d21d019,0x3d465dbb,0x3d384fff,0x3d326b1e, -0x3d37d852,0x3d1edcac,0x3ce03f5a,0x3ce4ac14,0x3c3b9322,0x3cc6a304,0x3c9b300d,0x3c9644da,0x3cb13c49,0x3ca56b58,0x3cbbf62d,0x3cb63740,0x3c940337,0x3ca961ab,0x3ca13c65,0x3c91309e,0x3c5a141d,0x3c58a6d9,0x3c812988,0x3c6a640d,0x3bf41138,0x3c54eb53,0x3c4a5e8f,0x3c639a44,0x3c6f48a1, -0x3c78dc0f,0x3c83a5e3,0x3c88bfdb,0x3ca4df9d,0x3cbc2881,0x3ccf7f33,0x3ce4a2ec,0x3cf56a69,0x3d0a8787,0x3d04de68,0x3d011db4,0x3cf624af,0x3ce95b11,0x3ccec004,0x3ce2a492,0x3ca9a836,0x3c4debb7,0x3b1ed02e,0x3cc18fca,0x3c523be7,0x3b2ac086,0x3ab11e19,0x3a074476,0x3a5645e4,0xba9a11b7, -0xbb100063,0xbb29d9ef,0x3c34f36e,0x3ca60050,0xbaf59f01,0x3c23162e,0x3c8baabf,0x3caa54b9,0x3ca2bfd5,0x3caaae0b,0x3cadcb69,0x3cb1b7ff,0x3cb4ffc1,0x3cb59edb,0x3cbf1b54,0x3cc790a0,0x3cd25442,0x3cda28da,0x3ce18275,0x3ceb9944,0x3ce18f02,0x3cdd37f8,0x3cd824c4,0x3cd88892,0x3cdd63e2, -0xbc136c6d,0xbc02390e,0xbc774d0f,0x3b6e8d5b,0x3c8e71b4,0x3cd2f3f3,0xbb1e8cec,0x3c67c39f,0x3cca226f,0x3cd3abdb,0x3cd38a59,0x3cc33b1b,0x3cd28705,0x3cd2fb84,0x3ccd49c6,0x3c75b95d,0x39669e69,0x3ce2a668,0x3c8ac032,0x3bb1ef01,0xbc520005,0xbbef2619,0xbc145ffe,0xbc1a5317,0xbc1f4114, -0xbc1ec64c,0xbc0d4dd8,0xbc234615,0xbc2c3ccf,0xbc348df3,0xbc30670a,0xbc2c3d67,0xbc29e879,0xbc177caf,0xbc0b88df,0xbbf602ae,0xbc102c25,0xbc1fc03d,0xbc39a8bb,0x3c97ed2e,0xbbb51480,0x3bbc991a,0x3b8d3fa7,0xbb1a05be,0x397c1487,0xbba6d3bc,0xbb478127,0x3b8000d2,0xbb3d871b,0xbb5d9cfb, -0xbad98f03,0x3b98a254,0x3b54fdb4,0x3b7620e0,0x3ac96ac0,0x3ca0460d,0xbbd3f101,0xbc1b5411,0xbc1f837d,0xbc48c4b2,0xbc586f64,0xbc5ef177,0xbc34c246,0xbc6e56c7,0xbc7ec828,0xbc80423b,0xbc7ace12,0xbc650711,0xbc5383f7,0xbc1d327d,0xbbfe1288,0xbbd0efac,0xbc007706,0xbc6c8d42,0xbc5e8d72, -0x3ad756cd,0x39919bd6,0x3bf78a6a,0x3b566fd3,0x3b1691f6,0x3a87382d,0x3b9d2aa2,0xb9b8d9fc,0x3bec2ee4,0xbb9876c6,0x3b7c293e,0xbb08c5a2,0x3bd5fbb3,0x3b7d4e87,0x3bf66629,0x3bf8c9e0,0x3c30abf1,0xba1af2a7,0xbc37837f,0xbc27795d,0xbc74d0fa,0xbc856d02,0xbc868593,0xbc29d924,0xbc95cb2f, -0xbcaae0ea,0xbcbc617e,0xbcb06eaa,0xbc9e4346,0xbc95d770,0xbc2a1908,0xbbd94660,0xbbe446fa,0xbc224472,0xbc6d97cc,0xbc2dd48d,0x3b279bd1,0xba509471,0x3b1cea89,0xba0b6c7d,0x3966ea76,0x3a90d252,0x3b3a2ebf,0x3b7a90fd,0xba69dcbe,0xbad514b2,0xbb225b5e,0xbaac66e8,0x3b6c9858,0x3b83db9c, -0x3c772d15,0x3b9ad94a,0x3c5d753c,0x3a09caef,0xbc3af2b2,0xbc465dcb,0xbca7b419,0xbcbd2adc,0xbcbec91d,0xbc7e7473,0xbcd640a9,0xbcfd1fce,0xbd00d153,0xbce4605f,0xbcad8268,0xbca29f41,0xbbf80e90,0xbb0a5655,0xbbad9dbf,0xbbdd0cee,0xbcfc0010,0xbc237ba2,0xbba62ed9,0xbbf0ee08,0x3c808f49, -0x3c55ff0f,0x3bebf545,0x3af89277,0x396e04ef,0xbac51233,0xbb3965cb,0x3a73b639,0x3a813885,0x3915acf2,0x3b755deb,0x3ba16f25,0x3c5bdbb7,0x3ba7d4a8,0x3c58f980,0x3b0ac10f,0xbc87b18b,0xbc3c350a,0xbc8530a5,0xbbfbc542,0xbbe9b632,0xbb5c63d6,0xbc8d9320,0xbca6f063,0xbc4623ff,0xbd075d1c, -0xbd14aeb4,0xbccd5e95,0xbc87631c,0xbc54e815,0xbc8c32f9,0xbc9266b2,0xbc10eb03,0xba03d4ab,0x3bbff9e0,0xba1ac516,0xbc433b73,0xbc3b2631,0xbc32617d,0xbbaa1e9e,0xbb9a28ee,0xbb0fb124,0xbaf536da,0xbace4cf9,0x38e4b14c,0x39b43fac,0x3a5e45fe,0xba33743c,0xb9237011,0x3b084ad2,0x3c192168, -0x3ba0b9d7,0xbc17aa73,0xbc4d0c49,0xbcc95381,0xbc943570,0xbc446331,0xbb7bdc01,0xbbcb84c5,0xbbfd4c45,0xbbdb2d8b,0xbc2b4998,0xbc130942,0xbb157e31,0xbc446c9c,0xbc8d7447,0xbca1a4ae,0xbc100c2e,0x3b8e33cc,0x3beb1124,0x3b93769e,0xbbb41997,0xbc10f99b,0xbbfb1f2a,0xbb107ac9,0xbc06f1bb, -0xbba892a5,0xbb236824,0x38c36935,0xba8aa56a,0xb9c3b010,0x3aa5b9d1,0x3abb0891,0xbb01a055,0x3aa97383,0xba441f59,0x3b343e64,0x3ab75f06,0xbc05cb18,0xbb50dab3,0xbad25540,0xbc674923,0xbcc229da,0xbce08cdd,0xbd060296,0xbd073eeb,0xbce49445,0xbd1e42f1,0xbd343a12,0xbd18daac,0xbce1be65, -0xbc925381,0xbc71f3ff,0xbb05c8e5,0xbd72792b,0xbd261729,0xbcf15a48,0xbccd5237,0xbc74a1af,0xbc925618,0xbc5a888b,0xbc52118b,0xbbfdcbb7,0xbbace658,0xbb233263,0xba1d6eb4,0x39a9d2ce,0xba4e7d9e,0xba74464a,0xba959101,0xbb739440,0xbb96b6ca,0x3b851b0f,0x3bbefae2,0xbc04c2bd,0xbc4ced14, -0xbc8f6ba5,0xbc719188,0xbc2c0eae,0xbbc29e0e,0xbb92e730,0xbb15c25a,0x3b07d62c,0xbb4e41cc,0xbc212eea,0xbc834f72,0xbd0eb8e3,0xbd409dfa,0xbd6201b1,0xbd657bb0,0xbbd763b0,0x3cff8e8a,0x3d68a14f,0x3d25d13c,0x3cfde83a,0x3d0e513d,0x3cca047e,0x3c1b4bb5,0x3c0a8802,0x3acb86c1,0x3b577795, -0xb9f56ee1,0xbaec252e,0xbb35a489,0x393a8309,0x3a38f5d5,0xbb6decfb,0x3b255742,0x3be89494,0xb8afbc04,0xbb36e8a0,0xbaddbaff,0xbb35f2a4,0xbb4b0189,0xbc2c6b72,0xbc9e2367,0xbc83d8b0,0xbc8f02dc,0xbcc6e30e,0xbcc82f6f,0xbcdff7ef,0xbd0752bb,0xbd3b7907,0xbd48cc8e,0xbd386075,0xbca0398e, -0x3c72a75e,0x3cb99f16,0x3d0b8d7a,0x3cca3b5f,0x3cb63d19,0x3c8decac,0x3c6fc42c,0x3c9135c1,0x3c7032ee,0x3c5f589a,0x3c3e3904,0x3c2ede8d,0x3c0b769b,0x3c0432dc,0x3b65950d,0x3add09b5,0xba9df748,0xba98dfc4,0xbb670ed2,0xbbac85b0,0xbc643bdf,0xbc942385,0xbc9f7c99,0xbcb3cf60,0xbca71ae5, -0xbc6f943d,0xbc91e70a,0xbc9a920b,0xbca04018,0xbcc66094,0xbcfeb8be,0xbd235241,0xbcace5a3,0xbb8bf00f,0x3be6f518,0x3c751bc7,0x3c8acc7c,0x3c9c8933,0x3cbf0694,0x3c9802d6,0x3ca599b9,0x3c8f6e20,0x3c851dd9,0x3c566b66,0x3c61e4bc,0x3c2ac007,0x3c41a937,0x3bee672f,0x3c34a742,0x3c0aeb8b, -0x3c1a50fb,0x3bd5ee87,0x3bdac0ea,0x3b804979,0x3b3d55f5,0xbb887f93,0xbbef3f16,0xbba89446,0xbbbb0b41,0xbb899a49,0xbb8c0e6e,0xbb82ab15,0xbbb141e7,0xbbbde618,0xbbda6b2d,0x3afc8e40,0x3c41dd99,0x3ca2e82e,0x3cb6040d,0x3cbc7209,0x3ccf10c8,0x3cb53e4b,0x3c900187,0x3c9ba485,0x3cf6e981, -0x3c99876f,0x3cb57020,0x3cb05381,0x3c90be54,0x3c91ac56,0x3c720398,0x3c7041af,0x3c909286,0x3c62be81,0x3c4394ba,0x3c42e640,0x3c62c52c,0x3c40fff4,0x3c16a92b,0x3c07e951,0x3c63fe9a,0x3bc0f95b,0x3c0bffa4,0x3c1914cc,0x3c243480,0x3c373515,0x3c4a442a,0x3c61852b,0x3c5745cd,0x3c5056b6, -0x3c3cc96c,0x3c2ee629,0x3c08fd54,0x3bf6ba90,0x3c10370d,0x3c37c3c0,0x3c5a8881,0x3c812bc0,0x3c5e66c0,0x3c45f681,0x3ca68715,0x3cdaa945,0x3cf8d6be,0x3c8447d6,0x3ccbca0a,0x3cf12b74,0x3cf54d30,0x3cf5bde6,0x3cebc3fb,0x3cf7323c,0x3cfc4757,0x3cfb248a,0x3cbd41db,0x3c63c1ec,0x3cebea4d, -0x3cb453e3,0x3c756a21,0x3be6aca4,0x3c1e1f2e,0x3c1d708f,0x3c29ef9c,0x3c2fa356,0x3c350c55,0x3c3f1bb1,0x3c381508,0x3c379d6a,0x3c3a55ce,0x3c3450c6,0x3c34605a,0x3c2abb84,0x3c3ad99d,0x3c3fa59f,0x3c42b7d9,0x3c4ba3f6,0x3c519c6e,0x3c048606,0x3bc2d25e,0x3c409bce,0xbbf3be35,0xbc87638f, -0xbc7204e2,0xba8c5e1e,0xbc6acfa9,0xbc8bf916,0xbc92a28a,0xbc8ea471,0xbc619536,0xbc8a2d48,0xbc8adccc,0xbc827cce,0xbc6d7602,0xbb421a06,0xbc73b501,0xbc65ccf2,0xbbcdf6bc,0x3c51b7be,0x3bfd36ff,0x3c0c7770,0x3c0c4c51,0x3c0955cf,0x3c059371,0x3c05fce7,0x3be38493,0x3bda30eb,0x3bde1891, -0x3bf10b16,0x3bfbd003,0x3c02f9a2,0x3bface40,0x3bed93f0,0x3bc2f720,0x3bdb62bc,0x3bea9f55,0x3bc4dd05,0xbc868153,0x3bb28f67,0xbaabaf6c,0xbb49c895,0x3a987f06,0x3a745758,0x3baec5d2,0x3b400c41,0xbadb2779,0x3a9c428a,0x3b0e538c,0x383a0fdc,0xbb00ceba,0x3a804247,0x3a1bf9f7,0x3b944ca8, -0xbc27880f,0x3c01eca1,0x3c3f626c,0x3c1bdfcf,0x3c2f39f0,0x3c287b47,0x3c244751,0x3c228b65,0x3bc97b7f,0x3ba00e09,0x3bb2f629,0x3bddbd24,0x3bf5ca7f,0x3bf18150,0x3bcf970a,0x3baaac93,0x3b30ab87,0x3b91d935,0x3bcdcbcd,0x3b127df5,0xbc02b1f7,0x3a0e7549,0x3ad1ec07,0xba429d1e,0xbac7fbe8, -0x3ad66a8c,0xbb230155,0x3ba87be0,0x38a08585,0x3be14ae5,0xbb72212a,0x3ae5a01f,0xbb0dafb7,0x3b7bd91b,0x3bbaebec,0x3bc273a7,0x3a1285d9,0x3bda4c01,0x3c821354,0x3c3d90e3,0x3c53fc36,0x3c3fae03,0x3c3342fb,0x3c2d73a6,0x3b658ade,0x3adcc7f2,0x3b44952b,0x3bcd2e18,0x3c08abef,0x3c1099e5, -0x3bca144c,0x3b9a18ed,0x3a451e1d,0x3ab0c79a,0x3c03c961,0x3ad1ffb4,0xbba30ccb,0x3bb6987a,0x3c177d28,0x3a2330fb,0x3ad6ef14,0x3b6b59b5,0x3badea88,0x3b988fbb,0x3bcf1edc,0xba2a9517,0x38f93f69,0x3b7b8d6f,0x3bd9d3cd,0x3c3dfd9e,0x3bf8c986,0x3c614016,0x3b287542,0x3c12f076,0x3c9c1b8d, -0x3c54e0a8,0x3c7c5f09,0x3c655eaf,0x3c5bc35c,0x3c533d2b,0x3a52685c,0xbb6d38a7,0xba0714fc,0x3b8c873b,0x3be891aa,0x3b9e1a6d,0xb974d9b9,0xbb2664e5,0xbbe3ddef,0xbb54b36b,0x3c368e00,0xbc2a36e7,0xbce65568,0xbc923adb,0xb96d5a8f,0x3b6fbf6c,0x3beed547,0x3b0d497e,0x3a4eec10,0xba018bc5, -0xbadd5f7f,0x3b16c733,0x3b18367e,0xba855feb,0x3b5623db,0x3c0d038f,0x3c137ace,0x3c7d539c,0x3b8b84c7,0x3b52c176,0x3ca1008c,0x3c6d5607,0x3c983862,0x3be2c4fe,0x3c0655e3,0x3c806b34,0x3c6919c4,0x3c8a43b7,0x3cb982a9,0x3c0fd154,0x3c03d232,0x3c8a14ec,0x3c92b4f6,0x3c9aeeb2,0x3c6eae3d, -0x3c2cb83b,0x3cc68d0a,0x3cb4946e,0xbb8fb8be,0xbb32b284,0xbbb001bb,0xbc19b152,0xbbe3c63d,0xbbb54409,0xbb413131,0xbaa0a998,0xba23b92e,0xbab215b7,0xb959d3c9,0x3b292e0e,0x3ba9fc72,0x3b357223,0xba7c3c49,0x3aa0238c,0xbb2dae30,0x3be0662d,0x3c29f75a,0x3b97df2b,0x3c064e78,0x3b8c88be, -0x3a51f095,0xbbb1f08d,0xbc1d1c5d,0xbc0ed4f0,0xba6ba8e6,0xbb35ccd4,0xbbe62d36,0xbc163ac5,0xbcdc4187,0xbcf2c841,0xbc979feb,0x38fae95e,0x3b052c21,0x3c028c2a,0x3ac0341e,0xb903bc8c,0xbc86b7ff,0xbbba0b71,0xbbadf8f8,0xbbeb90d0,0xbbb65950,0xba658997,0x3a23923b,0x3a9539b6,0x3b0c6f0c, -0x3aeef73f,0x3a986c64,0x3b35b0fd,0xb9e085d7,0x3b8d368d,0x394eb3f2,0x3c37e9b3,0x3c2f238a,0x3b4e9522,0x3bc5e649,0x3c40e14a,0x3c7ccf6e,0x3c449d62,0x3c8193f0,0x3c6a70b8,0x3c1be7ea,0x3c5aaaf2,0x3c7aef51,0x3c7757b9,0x3c9a099d,0x3c77a3f4,0x3be6f638,0x39ad5568,0xbcef2b28,0xbd36e363, -0xbd194193,0xbcd8eb7d,0xbcb61843,0xbc5f5076,0xbc15409a,0xbc064d45,0xbbd51d17,0xbb9041fc,0xbac83b79,0x392fd0de,0x3a56669a,0xb9c2858b,0x3a589f01,0xbac9e7cc,0xbb0e8c02,0xbaf6a4c9,0xbbabc140,0x3c18430a,0x3c199c9e,0x3bb74bec,0x3b230987,0xba549353,0xbbb4cd98,0xbc305e7f,0xbc1fd293, -0xbc1b88f1,0xbc0e56da,0xbc2d568a,0xbc3e8c59,0xbb455148,0xbc4490ba,0xbc5370c2,0xbc39e3cf,0xbcc7d2e1,0x3a66e0ce,0x3b4e9155,0x3c3a6655,0x3cb5eaf1,0x3cb822a7,0x3cba9846,0x3c897a0e,0x3b57f534,0x3aa51561,0x3ab68297,0x3a96654f,0x3a487720,0xb9f80683,0xbb3f624e,0x3a2d0fad,0x3ac9aa7a, -0x3a1bfdda,0x3a6f856d,0xbb7749d2,0x3baf3f50,0x3aae4ff9,0xbb83aa6f,0xbab3e42e,0xbbf6d69d,0xbc2cf53a,0xbc17ed60,0xbbf52ffe,0xbc17abb4,0xbc44420a,0xbc2964f8,0xbc13b699,0xbbaa5c6e,0xbc357f1e,0xbca34443,0xbcc8872d,0xbc5edf85,0x3cfbe458,0x3cc31f14,0x3c90c872,0x3c9f0f4b,0x3c85f8da, -0x3c634328,0x3c9027fa,0x3ca9873c,0x3c9da393,0x3c86f41a,0x3c7641a4,0x3c31b8ff,0x3c2a8843,0x3c3cb11a,0x3be25fa1,0x3ae8fb26,0xbb717fae,0xbb9e5d40,0xbbb5ad03,0xbbd8211e,0xbbd2c425,0xbbe5b92e,0xbbd47b80,0xbc489327,0xbc4895b0,0xbc17532a,0xbc2ef8dc,0xbc2c9d9f,0xbc579fce,0xbc7a3103, -0xbc8793f6,0xbc739ade,0xbc0308ee,0x3b62085f,0x3c9911db,0x3cbd6529,0x3cdc00d6,0x3cadee7d,0x3c6f3198,0x3c8a3fd2,0x3c5775bb,0x3c750109,0x3c7b52e5,0x3c815f13,0x3c3f2bbf,0x3c5985fe,0x3bff6c30,0x3c390bc1,0x3bdb2063,0x3be754a2,0x3bac0afb,0x3bb3d831,0x3b700614,0x3b12ec40,0xbb0dc635, -0x3aa33ae9,0x3b78c294,0xb92c7847,0xba6f6456,0xbb0f7628,0xbb63bcff,0xbbb0bc61,0xbbb16a93,0xbbbd79da,0xbbe2f6d1,0x3b8002a5,0x3c640bdf,0x3cc3de87,0x3cd48772,0x3cdfdb7e,0x3cfd9475,0x3cd6fd99,0x3cafab51,0x3cb0c312,0x3c7c9059,0x3caf2775,0x3c919085,0x3c9045c3,0x3ca015fe,0x3c98a0db, -0x3ca43212,0x3c929ffd,0x3c5fe790,0x3c763479,0x3c7c669c,0x3c54248e,0x3c2b526f,0x3c2955b0,0x3c266c1e,0x3c2be768,0x3bcd0f2d,0x3c113b63,0x3c17f67e,0x3c2d1518,0x3c4257e2,0x3c4fa0ec,0x3c5f66c1,0x3c6b6b76,0x3c883ec3,0x3c99de74,0x3ca365a2,0x3ca80580,0x3ca2d6a5,0x3ca71754,0x3ca49476, -0x3ca61fba,0x3ca6c42c,0x3ca9cc01,0x3ca8155c,0x3cb6c26b,0x3c5cb7ee,0x3c12bae2,0x3c1d595b,0x3c8155f2,0x3c12bff0,0x3bf3d55e,0x3bd3f19e,0x3bc37efd,0x3be5458a,0x3babff82,0x3b91799c,0x3b95662d,0x3bb9cbba,0x3c47516d,0x3b9c3ee3,0x3bab28fc,0x3c240027,0x3c89c6ec,0x3c82a42f,0x3c878a82, -0x3c897e94,0x3c8cb426,0x3c908caa,0x3c939922,0x3c9824bd,0x3c9ba38b,0x3ca1e818,0x3ca4c1fb,0x3ca9f713,0x3cae1d0c,0x3cac1edf,0x3cab14c2,0x3ca9c8ae,0x3caa0981,0x3cbbac72,0x3b3dd872,0x3b079930,0xbb075571,0x3c71b0eb,0x3c993b3d,0x3c279df0,0x3c421f32,0x3c8d5069,0x3c48dbff,0x3c49f689, -0x3c46e4d6,0x3c27c4ad,0x3c33b804,0x3c2c3a8f,0x3c1110b3,0x3c90dc0c,0x3c594b45,0x3c17033a,0x3c959ac0,0x3c840c72,0x39b4f837,0x3b54ca98,0x3b40f9c9,0x3b2d974a,0x3b2ad811,0x3b27e4b7,0x3b4b5eb9,0x3ae64b4a,0x3aaebc87,0x3a7af7b0,0x3b1a005c,0x3b45e0e2,0x3b413e29,0x3b90ae53,0x3b901438, -0x3b36abb7,0x3b278692,0x3a1a1964,0x3b3cb2c1,0x3c7dcb06,0x3bcb2893,0x3c6ae044,0x3c0a48f9,0x3ba5b87b,0x3be785e9,0x3b80db87,0x3bee564a,0x3c5552b6,0x3c0546dc,0x3baf8b90,0x3be56b4a,0x3c08277f,0x3c0138f1,0x3c3ff7ed,0x3c12d36b,0x3c8429ce,0x3bee470c,0x3b6dd2ed,0x3bb6122d,0x3b78a06d, -0x3b66009c,0x3b250356,0x3b513649,0xba298689,0xbab2c6c3,0xba800ed2,0x3b223744,0x3ba22a3d,0x3b9d8442,0x3c11890b,0x3c052016,0x3b442e20,0x3b6ab164,0xbb30e00a,0xba26b83f,0x3c3a99c0,0x3c143244,0x3c81692e,0x3bd69783,0x3b9d1b2a,0x3bd98adb,0x3bdbbb23,0x3b240544,0x3c54e73b,0x3aaff948, -0x3bbabcc3,0x3b5aebba,0x3c11e026,0x3c0dd64c,0x3c2ac012,0x3c4d624d,0x3c89d5da,0x3c26a8ff,0x3b86dcc9,0x3bd49af2,0x3b9598b7,0x3b8eef6b,0x3b6822bd,0x3bd79f75,0xbaf947a7,0xbb808893,0xbba26c17,0x3b306906,0x3bfe5758,0x3bc5654a,0x3c7e8810,0x3c5cd9b4,0x3b0a3b0f,0x3b78723e,0xbb47b611, -0x3ad4912f,0x3c42e380,0x3c21edf6,0x3c8374a1,0x3b750c5a,0xba55546b,0x3b24da94,0x3b0c2aae,0x3b8e8680,0x3b75ec02,0xb7ea7c44,0xba8ff82b,0xb99a9e89,0x3b914d10,0x3bd081f1,0x3c731ef4,0x3c28a818,0x3c8fa440,0x3c330630,0x3be50c59,0x3c322602,0x3c00199a,0x3be3633a,0x3bab391c,0x3be5083a, -0xbbc04ab4,0xbc25ee76,0xbc1cb80a,0x3b81f251,0x3c4f949b,0x3c212c87,0x3cb9bcbe,0x3c96d4e8,0xba575445,0x3b86d0bb,0xbbe5299b,0x3aa515e3,0x3bbd08fd,0x3aa52a68,0x3bee147a,0x3c3dfbbb,0x3c3a778c,0x3c00d72b,0x3b5d222c,0x3a250f47,0xbabce00f,0x3b0b7094,0x3b17cb88,0x3abc6179,0x3ba99408, -0x3bdd6eff,0x3c50a062,0x3c609c24,0x3cabf710,0x3c4f880b,0x3aaa58c5,0xb9e7d4d7,0xbc1224b8,0xbb10f277,0xbb391ad3,0xbba9fb0f,0xbc1623ce,0xbc2031ae,0xbbf8aa4b,0xbc3ab1fa,0xbb9bd970,0x3c5a910e,0x3c6e1154,0x3c70fb15,0x3c13504c,0x3bbb8583,0xba2c9eae,0x3cb4bcfe,0x3c420e71,0x39073ff3, -0xba11fa35,0xbb559b2c,0xbbdf17cb,0xbbaad85a,0xbb53d663,0xba0765de,0xba313214,0xbb05201b,0xba10dbfb,0x3a18f927,0x3b58fc7e,0x3b6c03f1,0x3bc07a9c,0x3b3779b9,0x3bd6cc0b,0x3c3796d2,0x3be402c7,0x3c2b02fa,0x3c097484,0x3b08f439,0xba115985,0x3a194f1d,0xbab5a6b4,0xba3cc173,0x3a97989f, -0x3ae5dd73,0x3b1ea7f1,0x3c0ca470,0xbc1c1c88,0xbc810277,0xbc531b72,0xbbb3678d,0xba1ac3fd,0x3bb5174e,0x3c0fbffe,0xb82d593e,0xbc229049,0xbbd61035,0xba938110,0xbbc1e9fa,0xbb8f1311,0xbb3cbb93,0x3a04bb5e,0xb8096e93,0x3a9e0a72,0x3aba571d,0x3b4c0e1b,0x3b570707,0x3bd59a4c,0x3b4cf993, -0x3c12ffcd,0x3c6efeae,0x3a969f9f,0x3b4a3979,0x3b73e369,0x3b799650,0x3b60006c,0x3b12edc8,0xbb503c66,0xbc0a7f0b,0xbc1cdb1d,0xbc3be709,0xbb75da63,0x3c7fbc4e,0x3cf4c105,0x3cfad40a,0x3c9ceaf2,0x3bb04451,0x3a1c7443,0xbced3b9b,0xbd0e15fc,0xbceab8a8,0xbcbab61c,0xbc511316,0xbbf11ab4, -0xbbfa5787,0xbbbf63b9,0xbb73e6c3,0x394704ad,0x391442df,0x3a3b0d4b,0x3aadbd47,0x3abcc625,0x3a75ca02,0x39a5da0a,0xbb14be12,0x3b73f78a,0x3c1d0c70,0x3b52895e,0x3b65cd02,0xb946805c,0xbacfba9e,0xbb9561f5,0xbb3c0a23,0x3a106b8f,0x3ba8c65d,0x3c3e9481,0x3c3294a3,0x3b8cd0ed,0xbc2b73e0, -0x3900f8bd,0x3ba0d521,0x3bd13906,0x3c63586f,0xbb77e946,0x3c6f3533,0x3cd569d3,0x3cc963fe,0x3cbc8eee,0x3cadb72a,0x3c3dbee0,0x3b1b52d2,0x3b5a6806,0x38018e9d,0x3b03bab2,0x3a98128e,0x39a48e42,0xbacf67e7,0x3acb2af0,0x3b23d52e,0x3aabe67d,0x3b076a5f,0x3bcd0fde,0x3bcb42be,0x391e887c, -0xbb00d1a9,0xbbab62f3,0xbbb8cae6,0xbb459d22,0x3b99f2ca,0x3b68bc90,0x3b8aab8c,0x3c07b763,0xb926ccdc,0xbab50aec,0xba93f6a6,0x3b556721,0xbb05f6e0,0xbc87fdc2,0xbbf0944f,0x3d044daa,0x3d29f1b6,0x3d1c286f,0x3d0bc8ca,0x3cf1191a,0x3cbc97a5,0x3ca42774,0x3ccc26ec,0x3c9f4420,0x3c81ed1f, -0x3c392d32,0x3c2f6bee,0x3c28f2cc,0x3c3205be,0x3beeb337,0x3b88d548,0xb972c514,0xbb5e0130,0xbbddfcd1,0xbbadd6d4,0xbc1802a2,0xbc1bc42f,0xbbd5b34b,0xbbd26680,0xbb9d7fbc,0xbb991843,0xbbfc5d94,0xbc3b0ae7,0xbc8be664,0xbc9c2d4c,0xbcb63613,0xbccf6a9f,0xbcced0cb,0xbc5447e2,0x3c1356bd, -0x3cc2182c,0x3c9006bc,0x3cae4d78,0x3cd16d72,0x3cbd992a,0x3cbc890c,0x3cb4d0d0,0x3cabadc1,0x3c9f9f48,0x3c95502e,0x3c76e124,0x3c8029b1,0x3c212978,0x3c1420ee,0x3bab3410,0x3bc72821,0x3ba20164,0x3ba59863,0x3bafffcf,0x3bea0b60,0x3b4c7fa0,0xbb153186,0xbb4ef301,0xbbd623fd,0xbc06088a, -0xbc274509,0xbc462db3,0xbc35fb4c,0xbc245aa6,0xbc21ca24,0xbb1f5f0e,0x3b7ca219,0x3c23179f,0x3c7d1a79,0x3c9b4bd5,0x3caf8643,0x3ca1e6ce,0x3c93a4ee,0x3ca373bb,0x3cc50a80,0x3c9d8c13,0x3cb60be6,0x3cadeee4,0x3ca30de2,0x3ca6cada,0x3c953ad4,0x3c9b8d46,0x3cabd4ab,0x3c99b399,0x3c87b56b, -0x3c891e32,0x3c8068cb,0x3c3b346b,0x3c2a4f24,0x3bcfee7f,0x3c121690,0xba4403bd,0x3875a87f,0x3b11cb22,0x3b553a4e,0x3b9983fb,0x3bbab95b,0x3bd384a2,0x3bdf705b,0x3c022363,0x3c19f271,0x3c2ea8b8,0x3c3fec22,0x3c5784d2,0x3c5987b1,0x3c6af699,0x3c80be7b,0x3c9177af,0x3c87ac3b,0x3c7f8545, -0x3cc961b8,0x3cda3f18,0x3cb33049,0x3cba4bc7,0x3cd75b3a,0x3cbfb60e,0x3cbf827a,0x3cbbe15a,0x3cadbf3c,0x3cb360fc,0x3cb3937e,0x3cae020e,0x3cc810f2,0x3ca2692f,0x3ca160d0,0x3cb51306,0x3c98e19a,0x3c0622ec,0x3c3380b7,0x3c2dae25,0x3c303e53,0x3c3252d4,0x3c35a394,0x3c3a57eb,0x3c49bcbd, -0x3c560c09,0x3c617117,0x3c69594c,0x3c742915,0x3c81becb,0x3c82c2f0,0x3c83b92c,0x3c8275bb,0x3c84238b,0x3c9b0b7d,0xbb361768,0xbb2dc6b7,0xbb067d1b,0xbc39d4e7,0xbc07a2d3,0x3c01f819,0xbc263d03,0xbc119083,0x3b2aa2bb,0x3b17a59c,0x3b3b3382,0x3bbdfb90,0x3b8d052f,0x3b90bde5,0x3bb46a00, -0xbc0b1651,0xbc27a677,0x3c0299fe,0xbbdf8000,0xbc207b04,0xba654c83,0xbaf90eda,0xbb3231ba,0xbb3c545f,0xbb451400,0xbb5aa4fe,0xbb75b49b,0xbb9299e3,0xbb9a9ac8,0xbb9d87bf,0xbb876035,0xbb830d6a,0xbb8ea95f,0xbb87b39a,0xbb7b5536,0xbb46e64b,0xbb500f9b,0xbaed8062,0xbbcfdfc3,0xbb989eda, -0xbb4a9328,0xb9dd88f6,0xbb41b1ea,0xbb8a8163,0xbb0005f6,0xbb2ba6f7,0xbb98053f,0xbb8ca1e1,0xbbbd9208,0xbb78dd80,0xbbaddddc,0xbb13592e,0xba9c5fc5,0xbb8c589c,0xb997e4cf,0x39c010c0,0xbb5b02a8,0xba8a2e0d,0xbb87b8eb,0xbb8f30bb,0xbb94a4d1,0xbba79c0e,0xbbcc91cc,0xbc0b8575,0xbc197664, -0xbc1bee08,0xbbfabecc,0xbbf3efcd,0xbc10ac43,0xbc0f6c25,0xbbfddfef,0xbb9dcf95,0xbb9595c7,0xbb098624,0xbbeb3870,0xbc1a0142,0xbb5038f2,0x3bdc3c69,0xbae7995f,0xbb1dc5df,0x3ac6d8be,0xbad1b04d,0x3b0cfe92,0x3afa2dce,0x3adf986f,0xbafa4086,0xbae65ba0,0xbab497ee,0x39e92e22,0x3b2556b7, -0x3b6e90a0,0x3a0ecff5,0x38fbfd94,0x3980893a,0xbb7ed9eb,0xbbb5b6d4,0xbbcf98fc,0xbc01c31e,0xbc2a0f2d,0xbc6c8166,0xbc842858,0xbc85c1bc,0xbc437cd1,0xbc34a223,0xbc61d420,0xbc513657,0xbc23a915,0xbb8d1d5b,0xbbb14891,0x3a7e42f4,0xbbaff462,0xbba480f4,0x3ae485e7,0x3c6af6ce,0xb98c67f8, -0xbacd95de,0x3ba97c08,0x3b4fd459,0x3b8b9092,0x3c19103b,0x3ad80484,0xba8ad2ec,0x3b381997,0x3b8d43d3,0x3beca7ba,0x3bed196f,0x3c25300b,0x3bca4951,0x3b5e9d9b,0x3ab7b267,0xbbcd77ff,0xbc14e077,0xbc277a39,0xbc4f8052,0xbc8202e4,0xbcbb6a07,0xbccee72b,0xbcc6e0db,0xbc9053da,0xbc8c0cba, -0xbcb9d95f,0xbcb6334a,0xbc8cb4b8,0xbbe2ed21,0xbbba47c9,0xbc1f9653,0xbc95aa90,0xbcbdc75e,0xbc81045c,0xbb9e919b,0x3b4eb095,0x3bede792,0x3bb886e2,0x3ae997ac,0xba93a4e7,0xbad81c9a,0x3aff249f,0x3b2f2bdf,0x3a17b4f2,0x3b70feaa,0x3bc7cd12,0x3bdf0a01,0x3c2cc8aa,0x3bb01d3c,0xbb3bfe52, -0x3a784908,0x3ab2f555,0x3b85a1d5,0x3676fad8,0x3b06dca2,0x3c00b997,0x3b9082f3,0x3abdb9ab,0xbbb2bf3a,0xbc154208,0xbc2844d1,0xbbd0e8b7,0xbbe84374,0xbb4816f7,0x3b5d0752,0xbbc37ddd,0x3c394337,0x3cc0233e,0xbbfa66df,0xbc297660,0xbc017b3e,0xbbc96e4b,0xbb863262,0xbba710f3,0xbaeffe45, -0xba50f822,0xba60457f,0xbae260e3,0xba4ad432,0x3b013387,0x3b36267e,0x3a93839b,0x39567a61,0x36bf5e72,0x39b77f78,0x3b2a2e9e,0xbb944c0e,0xbc41300e,0xbc8467a8,0xbc76c1aa,0xbc4d56c1,0xbc223ff6,0xbbf1ef8c,0xbb60dc35,0x3a929b80,0xba4091b1,0xbbc01c95,0xbbc73fd3,0xbd052518,0xbd0f7ad4, -0xbc54170f,0xbc09d82a,0xbc005abc,0xbb5d3f83,0x3b4b7a03,0x3a91abda,0xbc6415a6,0xbc149d6b,0xbbd410dc,0xbbcb481f,0xbbc6fe01,0xbb442c50,0xb96ffa9f,0xb9f13e9a,0x3aa92e00,0x3ab0e597,0x3a1e0f89,0x3ae7618c,0x3b5bdc62,0xba0f3777,0xbb2c49b6,0x3c2110d2,0x3be37471,0x3b36e46b,0x3b04aed4, -0xbbe4485e,0xbc5c24d5,0xbc845546,0xbcadf6df,0xbc97f996,0xbc2424bb,0xbbd49c1b,0xbc451fe4,0xbcdbf284,0xbcc7c9b2,0xbcd26862,0xbd048e04,0xbc510d9b,0xbc9a834a,0xbca9f976,0xbd0a8960,0xbd06b976,0xbcbef025,0xbc65daee,0xbbb38f08,0xbbc82d7b,0xbba78d80,0xbb2f4a45,0xba2a75a1,0xba217562, -0x3909ddd2,0x39c5e6e5,0x3a03f11d,0xbad258aa,0xbb00de77,0xbb3ae25d,0xbaedf2ba,0x3bdc5b30,0x3a3f3fd2,0xbbbeb510,0xbc380187,0xbc838fdb,0xbc91307e,0xbc47dcc8,0xbc828ae2,0xbc8064ff,0xbc563566,0xbc445654,0xbc6a818c,0xbc9ba148,0xbd171879,0xbd45df04,0xbd71a8a8,0xbcfaae81,0xbd8b7d85, -0xbd255dbf,0xbb263299,0x3b95f9aa,0x3bf2fc30,0x3bda7732,0x3a3247c7,0xbbe1b8f6,0xbba4ed16,0xbb8d96be,0xbb0a5573,0x3a881a66,0x3a1a78ed,0xbb375c6b,0x39a57dbc,0x3ae4a40d,0x3b6f1d45,0xbb70b032,0xbbc7e1ac,0x39e8b200,0xba484008,0xbb164bd9,0xbbbcec0b,0xbc04bbc5,0xbc2d9bc2,0xbc7130d1, -0xbca760b9,0xbcbac29a,0xbcba80e0,0xbcabf55d,0xbcb4aac0,0xbcce4cc3,0xbcf29ebd,0xbd229745,0xbd60dacb,0xbd8867cd,0x3c86c4eb,0x3caa54f6,0x3cfa5807,0x3cc95bc0,0x3cca1c85,0x3c949652,0x3c9afbd6,0x3cb63134,0x3c9cbec6,0x3c83991e,0x3c3a21ba,0x3c141c2e,0x3c0a0b03,0x3c090dad,0x3b9ac045, -0xba670b4a,0xbbca4ccb,0xbbc8ae95,0xbbb2bf34,0xbb2b23f3,0xbbd3e7ae,0xbc192379,0xbc120464,0xbc5a67d5,0xbc5ebc22,0xbc520128,0xbc316e59,0xbc14f5d7,0xbc2a8c60,0xbc52b962,0xbca473e0,0xbd014d17,0xbcf5e4a0,0xbcc25da3,0xbc003e38,0x3bae6a90,0x3c3cc75d,0x3c6567db,0x3c4103ed,0x3c56b74a, -0x3c67bf49,0x3c7d16eb,0x3c88fed4,0x3c8ed96f,0x3c7e309e,0x3c6fec67,0x3c406278,0x3c2bcca8,0x3c002e50,0x3ba303fb,0x3b856148,0x3b59289f,0x3b0d3cf2,0x3a0a424e,0xbb36fda4,0xbba73e84,0xbbbd9ec9,0xbbf4b6bd,0xbc0d9934,0xbc2cd012,0xbc46c60a,0xbc650752,0xbc87ff55,0xbca33322,0xbcc189cf, -0xbca1ad6e,0xbc810d41,0xbc4a1eff,0xbb807857,0x3b1fc051,0x3c0bb2f5,0x3c12089b,0x3c3d0ebc,0x3c39e27e,0x3c92dd39,0x3c618084,0x3c6a432c,0x3c79a57a,0x3c697edd,0x3c6e1884,0x3c4b88bf,0x3c1ff569,0x3c02dc0a,0x3bc8b088,0x3bcae0ff,0x3b8cf475,0x3b942adc,0x3b6b92a1,0x38c1c69c,0x3a050a49, -0x3a4414cb,0xba0fbf7b,0x3ac6e600,0x3aaec935,0x3b00bbe0,0x3b201434,0x3b3d0cbe,0x3b5eb246,0x3b9189fd,0x3bb86fde,0x3bc8e0cc,0x3bc6805b,0x3bafbd38,0x3b8fc126,0x3bb13285,0x3bcc3639,0x3c013bcb,0x3c1b7610,0x3c2f4821,0x3c2d0c1a,0x3c0bc3d7,0x3c36f820,0x3ca980f9,0x3c01f085,0x3c31ea79, -0x3c98599d,0x3c95645b,0x3c94e8dc,0x3c98cbe7,0x3c959b3a,0x3c94892b,0x3c960cc9,0x3bdfe304,0x3b96d2ac,0x3c87367f,0x3bd53028,0x3b95010c,0x3bfe6f6e,0x3bfc06b0,0x3bf91fee,0x3c001733,0x3c0080da,0x3c028e60,0x3c031211,0x3c0631c8,0x3c073291,0x3c0b3f48,0x3c0b3945,0x3c0f1014,0x3c0f9620, -0x3c17fe76,0x3c1cb36f,0x3c1fed81,0x3c22e6c6,0x3c44b543,0x3c5249a0,0x3c2a3c00,0x3c4f29ce,0x3c5f44d2,0x3bc90589,0xbc0f238a,0x3c83b27c,0x3becc1a7,0xbbd35088,0xbbf4262b,0xbbf71736,0xbbf12b2b,0xbc0f94c5,0xbc19b863,0xbc2bbf15,0x3be8e1e2,0x3c7b9fda,0xbc3bcdbc,0x3bdaf9eb,0x3c6a8cae, -0x3c649343,0x3c4424de,0x3c556784,0x3c53453a,0x3c54256d,0x3c5078b4,0x3c483e7b,0x3c3dd3c8,0x3c3b8a28,0x3c3a18b1,0x3c582621,0x3c630e65,0x3c59ffda,0x3c6e955a,0x3c647933,0x3c310f5e,0x3c3fbbec,0x3c272e78,0x3c7374bc,0x3ae410c9,0x3c680ec4,0x3c634270,0x3be6f5a1,0x3c0fda32,0x3c1afce3, -0x3c2dd414,0x3c4bdcea,0x3c54aaad,0x3c4fd833,0x3c2509fe,0x3c28d5f0,0x3be63d28,0x3c089033,0x3c4aeb13,0x3c4459c2,0x3b781cb6,0x3c88ed5f,0x3c7868de,0x3c897cdb,0x3c89ea39,0x3c8a0943,0x3c7bfc59,0x3c58c3e9,0x3c33fe2e,0x3c32d7b1,0x3c41cad7,0x3c87f5f4,0x3c993c7f,0x3c889405,0x3ca292c5, -0x3c8dd960,0x3c1913ad,0x3c36f7a4,0x3c0ac579,0x3c254c1d,0x3c28db75,0x3c4085ae,0x3c76771f,0x3bcfa19f,0x3b930c4c,0x3c0cfc05,0x3ba28ea4,0x3bb3258a,0x3c35d66d,0x3becf923,0x3b6c6587,0x3bd9080e,0x3bd2b224,0x3c1fe65e,0x3c1e74d7,0x3c4f79ec,0x3c66dbf2,0x3c82bf7e,0x3c960873,0x3c9a826f, -0x3ca43275,0x3ca42074,0x3c948099,0x3c773f30,0x3c2e0934,0x3c270451,0x3c3729a9,0x3caddb03,0x3cd2478a,0x3ca91973,0x3ce42649,0x3cbac869,0x3bf78cb0,0x3c35c14b,0x3be26344,0x3c141c83,0x3c21a03c,0x3c77e18a,0x3caeb876,0x3bbe043b,0x38bec248,0x3ba7b94c,0x3b5ba52a,0x3b9dd5cb,0x3c101106, -0x3aa2e2e2,0x39cb634d,0x3b458372,0x3bda3f2b,0x3c2451e7,0x3c34c380,0x3c72c54a,0x3c640fb2,0x3c8955e3,0x3cb508c4,0x3ccd28e4,0x3ce7127a,0x3ce31ef5,0x3cbf7b59,0x3c8120ed,0x3c006b2c,0x3bd58839,0x3c1f6b52,0x3cd85002,0x3d045ba5,0x3cc8dbc1,0x3d06f6c5,0x3cbd99c4,0x399f6c93,0x3bb30f34, -0x3ca17fce,0x3c354842,0xb8ce18c0,0xbb27787e,0xbb8dbf22,0x3bc90f76,0x3c5046f5,0x3c3159c1,0x3ba4cfa3,0x3aacdce6,0xba839e6d,0x3b35b809,0x3b7049b2,0x3b21851f,0x3bd459ba,0x3c1493e2,0x3c2834aa,0x3c99bb72,0x3c928e92,0x3c93d8d2,0x3cac244f,0x3c4a0b4e,0x3bda33ab,0x3bb19f14,0x3ba3d177, -0x3b36752e,0x3c186514,0x3c4d6801,0x3c38059d,0x3c88ba24,0x3cc4454a,0x3d0e256d,0x3d05e803,0x3d096fb3,0x3d0e3db8,0x3ccf2dd8,0x3bc0d74c,0x3d0a9d9b,0x3c2a5713,0x39256673,0x3bc85373,0x3ae40060,0xba93cdb9,0xbb1bb50e,0x3a0983c6,0x3b007b32,0x391fae09,0xba92a283,0x38626d80,0x3b39f214, -0x3bad0019,0x3bcecccd,0x3bf7e145,0x3b47dedd,0x3a7c1016,0x3c364649,0x3c839de5,0x3c9f0bb6,0x3cc59b4c,0x3c630625,0x3bf3aede,0x3ba568f7,0x3b219198,0x3b88eb57,0x3bfb7368,0x3c01f0b6,0x3c06965a,0x3c365b1c,0xbbc0098c,0xbc4f8dd3,0xbc130c0b,0xbbc49570,0x3ae382ee,0x3918a27b,0xbaab1901, -0xbb119080,0xbc40ee01,0xbc148465,0xbbc38594,0xbb48c0b0,0xbb7016c5,0xbb22f60f,0x3a2d7c87,0x3a8bb37c,0x3b1ef7c7,0x3abcb7cb,0x3b5ea1f6,0x3bdc8713,0x3bfe470f,0x3bb22a06,0x3c1b4e6a,0x3c9b20e0,0x3c1e7934,0x3bbae578,0x3b83cc09,0x3c36378b,0x3ca55ad7,0x3cf0edfd,0x3cbeb47f,0x3c8a7f88, -0x3c4079cf,0x3c82d4d9,0x3cef21b0,0x3d3bd204,0x3d6a2cff,0x3d58c4fa,0x3d183cea,0x3c58dd2c,0x3cd8d1d4,0xbb8e1676,0xbccd3621,0xbcba730c,0xbcaf4f4e,0xbc0573f5,0xbb5c0003,0xbb237f2d,0xbb4b85fe,0xba890176,0x3a5e5e9a,0x39ab4fbc,0x3a0326ea,0x3b5e9e59,0x3b438c69,0x3acb0ebd,0x3b1774f4, -0x3aea548e,0x3b2d2c47,0x3c0a40c8,0x3c2cc429,0x3c537f8e,0x3c31d46a,0x3c2e9202,0x3bd82999,0x3b8a5ee0,0x3b437180,0x3b9e2e77,0x3c0f2dd5,0x3be1d569,0x3bb5ae6d,0x395379a2,0x3c85d7af,0x3ce1be5d,0x3d27b344,0x3d12c0bb,0xbc04876c,0xbc88b8dd,0xbc82dfcb,0x3a63ec55,0x3be98b7b,0x3a8d106e, -0xbb6bebc3,0xbb8bfc97,0xbb7dbd0f,0xbb1d0af6,0x3a07890e,0x3b4fcb9e,0x3b2e22f1,0x39e5144b,0x3a8fcac1,0x3b0c3217,0x3ba7d30d,0x3afce6b3,0x3a82fa2a,0x3bf2d738,0x3ba3609c,0x3af220fa,0xbb43cf17,0xbb066ed6,0x3ab1fddb,0x3bf38501,0x3bb88150,0x3c27938e,0x3ca28d53,0x3c79712f,0x3c8bbf23, -0x3cabc438,0x3cdf8795,0x3cc11db7,0x3c4689a5,0xbb06ed20,0x3d084695,0x3d2616c8,0x3cf6fb12,0x3d02c394,0x3ce9442a,0x3ccd95b8,0x3cb97c3e,0x3cc3be2f,0x3cb2db86,0x3c926d3a,0x3c3d8cd9,0x3c246094,0x3c14c617,0x3bf24c59,0x3bd4f694,0x3b82737d,0x3aadf43d,0xbb3e03e3,0xbb6e1627,0xbb15e386, -0xbafa7d84,0xb8eea432,0x3a2a5df0,0x3b8014a8,0x3b868569,0x3b72ea17,0x3b14fc4b,0xbb2b9355,0xbc343d0c,0xbc15fb49,0xbc04e0d1,0xbbb67d7d,0xbc45203a,0xbc1faafa,0x3ad9067b,0x3c970d07,0x3c998ebd,0x3cb3ac3d,0x3cb4e9b4,0x3cc4f995,0x3cb82ecc,0x3cb50dd1,0x3cad058a,0x3caa1f81,0x3c91c19c, -0x3c8634c1,0x3c7a3ea1,0x3c551f01,0x3c145716,0x3bf92f29,0x3bba4c17,0x3bb1fb3a,0x3b7dc90d,0x3b28e50f,0x3abf3c3f,0xbaa9929e,0xbb9d8f5a,0xbbf61e89,0xbc323313,0xbc45991d,0xbc571df3,0xbc6c361d,0xbc59e805,0xbc4513cb,0xbc3b9faf,0xbbf17a39,0xbbaa0345,0xbb1eb968,0x3b8c8970,0x3c2fccb0, -0x3c7b4328,0x3c89c669,0x3c7a8ba2,0x3c886d58,0x3c49f16c,0x3c810553,0x3c83493b,0x3c83903e,0x3c8f7d15,0x3c9181fa,0x3c89113c,0x3c876b28,0x3c74898a,0x3c6b9338,0x3c487a8b,0x3c36952d,0x3c0c864a,0x3bcc3567,0x3bd9ddf4,0x3b6b198e,0x3acd3b3f,0x3a0bebcc,0xba2b7b14,0xb786b8fb,0xb95ba4fd, -0xb960140f,0xb9f5124e,0xba8f7644,0x3ad406cf,0x3b8f0a2b,0x3bf30eb4,0x3c275e19,0x3c5d593e,0x3c86ca0b,0x3c8171b6,0x3c76cd13,0x3c787750,0x3c7e7f98,0x3c5e1bf9,0x3c60d74c,0x3c90f9d3,0x3c7cce5b,0x3c16a98c,0x3c965da1,0x3c85546d,0x3c38e08f,0x3c280476,0x3c1a1c85,0x3c07dafc,0x3bf7826c, -0x3be08d36,0x3bc19227,0x3c6082b7,0x3c7b2d2f,0x3bb4e106,0x3c48b79f,0x3c5fe2fa,0x3c0f8f35,0x3c148b31,0x3c122b18,0x3c0cde84,0x3c08a726,0x3c05980b,0x3bf70343,0x3c1540c6,0x3c25e74c,0x3c376bac,0x3c4779c9,0x3c563907,0x3c70674b,0x3c67a03a,0x3c686e1d,0x3c63ef03,0x3c64d2f8,0x3c7c194f, -0xbbe7bb0c,0xbbbfc937,0xbc23fe95,0xbb3a9d17,0x3c03cb96,0x3cbec34c,0xbbe2a056,0x3baad687,0x3c9cb14d,0x3c9f0fc6,0x3ca0d401,0x3ca36aa8,0x3ca87b80,0x3ca91d9d,0x3caa5645,0x3bc15423,0xbbaf2ab2,0x3cbce4f3,0x3bfff0c8,0xbaca9580,0xbc0d4269,0xbbb86965,0xbbeee953,0xbbf90597,0xbbfdbe14, -0xbc04ab98,0xbc0f0f99,0xbc11b8bb,0xbc145b4b,0xbc1a04ef,0xbc0a1e58,0xbc0791bb,0xbc1455ab,0xbc042f4d,0xbbf2a8ac,0xbbc8347c,0xbbe08756,0xbbc3492f,0xbc0b5191,0x3c47f67d,0xbb78134f,0x3bbbd62c,0x3b071954,0xbb66563a,0xb90b8924,0xbb978cc1,0xbb8e1957,0x39ff581c,0xbb8d7502,0xbb618051, -0xbb5cd07e,0x3b01db5d,0x3a8bb216,0xba8a5c8f,0x39baf429,0x3c5b9922,0xbbb44df4,0xbbe31cec,0xbc0ea8cd,0xbc2ab10b,0xbc3115ed,0xbc43bd6c,0xbc5e3831,0xbc68e79d,0xbc69ad3d,0xbc71022f,0xbc4354b9,0xbc3a64be,0xbc5b0c93,0xbc33d56c,0xbc191e65,0xbbc8734b,0xbbdf090e,0xbbede8a9,0xbc01fa11, -0xba21cd97,0x39d9eb4d,0x3c4a7ab0,0x3ab8f6af,0x39cb0129,0x3b48b008,0x3b2dbfa0,0x3a18bf56,0x3bc8c9ca,0xbad83921,0x3b3299c5,0xbadddeaf,0x3b5cb3ae,0x3aac6975,0x3b365d48,0x3bac0b89,0x3bdc38bb,0x3a176388,0xbbfb469e,0xbc175ba0,0xbc5715b4,0xbc61760a,0xbc83930c,0xbc9bd2e5,0xbca7ef09, -0xbcad52a9,0xbcb3dd7c,0xbc88e778,0xbc801c29,0xbca2a0f4,0xbc6a1e90,0xbc243763,0xbb9f66eb,0xbbc57a0d,0xbb7e0835,0xbb234a82,0x3b83f2c0,0x3ba21f7e,0x3c8e4aa9,0x3aa4c9c2,0xbb2043df,0x3bb36a0d,0x3b057ba5,0x3b822ca4,0x3c12947f,0x3b3c7e92,0xba98f0d7,0x3abb8f97,0x3b61fb51,0x3b6ec24f, -0x3c0e89d6,0x3bf620ad,0x3c4ce1d7,0x3b710040,0xbbf54583,0xbc3e9756,0xbc94a6df,0xbca398c0,0xbcc63d24,0xbcec3a68,0xbcffa148,0xbcf84151,0xbcf7eccd,0xbcb1a29c,0xbca27fcc,0xbcd71eda,0xbc8f687a,0xbc463d51,0xbba4f5b3,0xbb8abcf6,0xbcb35d89,0xbc476ab4,0xbc098bb7,0xbc203fb8,0xbb643c36, -0x3bd34ffe,0x3c201622,0x3c17a86b,0x3b7ed5c9,0xba409b62,0xbae7ad7d,0x3acffb05,0x3b416ec9,0x3b2ca5b8,0x3bbc59d1,0x3bb37205,0x3bf9b7d7,0x3bcc2593,0x3c2be79e,0x3b409d1c,0xbc3e0e31,0xbc17d440,0xbc2bf7d0,0xbbcaed71,0xbb9cec01,0xbb3137d8,0xbbf85087,0xbc46b637,0xbcad6060,0xbc84b4b4, -0xbc90b05b,0xbcadb007,0xbc951e14,0xbc2a45d1,0x3b850150,0xbc1ce0d0,0xbbaf5a9f,0x3ca10203,0xbafef6d2,0xbc27b0b8,0xbbc463a2,0xbb9a0bbe,0xbb560877,0xbb2ccf2d,0x39b44918,0x3af06938,0x392dfb73,0xba80858a,0xb9523025,0x3b03c7b7,0x3a77d742,0x3abc3702,0x3b61f617,0x3af7c3db,0x3bb056ff, -0x3af356d7,0xbc30a6c4,0xbc7a621b,0xbcd4c73b,0xbc9e29ea,0xbc57a6ad,0xbba31d4b,0x3a27da32,0x3b9097dd,0x3ba810f4,0xba470b8d,0xba29ae9a,0x3bde8e21,0xbc8b07e0,0xbcc02f63,0xbc41f422,0xbc6d457c,0xbbf4f301,0xbbc70725,0x39d7146b,0xbb2bbfba,0xbc0c3615,0xbc362259,0xbc06cfa7,0xbb868f39, -0xbba3cf93,0xbb8c1c82,0xba8336c6,0xba002ce7,0x3ab6cf51,0x3a59efe1,0x3adba857,0x3b091b33,0x3bb66bb4,0xbb198def,0x39452c71,0x3bce9ae0,0x39c3e4ab,0x3b13b0ee,0xbb00a96a,0xbc4d9179,0xbcba2dde,0xbce45b7d,0xbd0d9272,0xbcfb4b4a,0xbc85f936,0xbca1e739,0xbcdc5c86,0xbd130ec7,0xbd107136, -0xbcfa6a13,0xbd06fed8,0xbc3e6060,0xbc3f859d,0x3b6a6d4c,0xbc8e686b,0xbcd87ccd,0xbc8bbc7b,0xbc4cdd7d,0xbb7f53b1,0xbb46b6bc,0xbb3a8957,0x38140bd8,0x3a53a059,0xba81195e,0xb9b6f89e,0x3b133cab,0x3abb06bb,0x3a71680c,0x385f4461,0x39d50710,0x3b92646c,0x3ac7b3bf,0xbbbc57e5,0xbc1ead87, -0xbc702025,0xbc46973e,0xbc248598,0xbbe02ab1,0xbc544fac,0xbc4ad63c,0xbbe646c6,0xbc1c9c43,0xbc4b69d6,0xbca05441,0xbd2181c6,0xbd5429f7,0xbd6f6ed2,0xbce22357,0xbd9fb334,0xbd56d507,0xbc2c72b5,0xbbf2d4f8,0xbb5b80a8,0xbbbe1133,0xbc2a7642,0xbc1ee426,0xbbf6a0e4,0xbbff237a,0xbb3e94e3, -0x3abd6314,0x3afc5f7c,0xba09b4b1,0x394d84f4,0x3a953641,0x3b66fd2d,0xbb18f78b,0xba068ffc,0x397578f1,0x3b11610c,0x3b33788c,0xbb977278,0xbbcdbe30,0xbc2e04bc,0xbc7d60d2,0xbc8cc4a6,0xbc919679,0xbcb61d20,0xbc999c72,0xbcaa4c36,0xbce350c4,0xbd0b3394,0xbd241fb7,0xbd4663fe,0xbd878044, -0xbb511545,0x3c56f84a,0x3d03c271,0x3cbb61e4,0x3ccf4a78,0x3c9ecf12,0x3c8988fe,0x3ca1c2e9,0x3c878b57,0x3c6d29ba,0x3c0b129d,0x3bf6db1f,0x3bab48f2,0x3b5d3ad6,0x3b3e11ae,0x3a1b489b,0xbacfbff2,0xbb196896,0xbb25a3a8,0xba940f72,0xbbd3ba0d,0xbc19328e,0xbc2de173,0xbc25500d,0xbc2affa5, -0xbc1bc0e6,0xbc1343ce,0xbc0b8d92,0xbc1d292b,0xbc314ab1,0xbc994247,0xbd0bae56,0xbd06d77f,0xbd03585c,0xbce0f538,0xbc52204b,0x3b341dee,0x3c4415b4,0x3c813401,0x3c7f6632,0x3cab9684,0x3c9a764d,0x3c96c64e,0x3c89ba42,0x3c8aebd8,0x3c5bdb44,0x3c667641,0x3c1d9d59,0x3c3b8cd4,0x3c011e3b, -0x3bdbf637,0x3b691e79,0x3b08f400,0xbabb2be7,0xbba5e69a,0xbc42df51,0xbc7574ec,0xbc754218,0xbc88cae2,0xbc8c2f34,0xbc913e1a,0xbc943959,0xbcb529b3,0xbcd3d35b,0xbcf1ce71,0xbcf563a4,0xbcf1d4a6,0xbcf897e2,0xbca84dbe,0xbc491ff6,0xbbb39557,0x39448880,0x3b3840c2,0x3b6e9e6b,0x3c90b738, -0x3bd14c0c,0x3c2bd3d1,0x3c3ea6dc,0x3c0d6471,0x3c23f345,0x3baf5f4c,0x3b76f84e,0x3b98d391,0x393b26d1,0xbabaec09,0xbb26bcd9,0x39b5521b,0xb93c7fcd,0xbb6d3ba2,0xbb37eb92,0x3b118932,0xbad955fd,0xb9b46082,0xbaf11f52,0xbb29c5e7,0xbb58bd96,0xbb8a0bd8,0xbba0f337,0xbba2c1b1,0xbba2792b, -0xbbb0eb11,0xbbc06fb9,0xbbd8b70b,0xbc04d68a,0xbbc82c4c,0xbb990264,0xbb14d967,0x37df759d,0xba005aa3,0xbb0802f1,0x3b890dff,0x3c3b6176,0x3cb53377,0x3a862873,0x3c328463,0x3cb1c20a,0x3cb0ea5c,0x3cb0170e,0x3ca94766,0x3cafbb59,0x3cb19da0,0x3cae5b1e,0x3bfd55ef,0xba6c7aed,0x3ca1eaca, -0x3bff152b,0x3a9d9f84,0xbb185fce,0xbae3e4ba,0xbb210d49,0xbb29bf2d,0xbb48e775,0xbb603fbd,0xbb805501,0xbb8301b6,0xbb890460,0xbb8b1795,0xbb9449a7,0xbb98072f,0xbba68f3f,0xbb7a94bb,0xbb4766a9,0xbb1bf908,0xbaef81fb,0xbb246ce8,0x3c564da1,0x3c3275c6,0x3c85c6b0,0x3b6977bc,0xbbe75450, -0xbc67ff0a,0x3c0b5960,0xbba88596,0xbc6d8bac,0xbc808f7d,0xbc7edfb7,0xbc5a619a,0xbc812d19,0xbc83e072,0xbc82b5ea,0xbbb43b29,0x3bdbd31a,0xbc88418f,0xbbbcb5c7,0x3b7b5362,0x3c89db8d,0x3c46d182,0x3c599e67,0x3c5854af,0x3c57da61,0x3c5135ef,0x3c3f841a,0x3c3e621f,0x3c3fca69,0x3c4266e1, -0x3c58b834,0x3c5fedd5,0x3c5849af,0x3c5fb14f,0x3c566133,0x3c300139,0x3c4403ef,0x3c493709,0x3c73594b,0xbc01e9de,0x3c55ae3e,0x3bf3389a,0x3b1ebe30,0x3bcaa9e8,0x3bca9934,0x3c235659,0x3c1a4c02,0x3bba9321,0x3c0eeca2,0x3c03c8d1,0x3bd402ab,0x3b291449,0x3b99facd,0x3bcbfa75,0x3c12b7f8, -0xbba6157a,0x3c7c5226,0x3c859254,0x3c8123be,0x3c885400,0x3c87c9e8,0x3c7aba7b,0x3c44fe53,0x3c3678bb,0x3c37dd38,0x3c43ce89,0x3c819e11,0x3c89cb50,0x3c6d9e24,0x3c7d5cdf,0x3c5be934,0x3c05b4c3,0x3c2b236b,0x3c59e9ba,0x3c4779be,0x3b85a860,0x3c0c3b06,0x3c22e1e0,0x3b4e99bc,0x3af3b522, -0x3bd195e5,0x3ae479d6,0x3bd30dd8,0x3b9fecf6,0x3c14a129,0x3a50fa97,0x3bb19e6c,0x3ae32963,0x3bd10e16,0x3bbcdc0c,0x3c0e6683,0x3bdd57e9,0x3c6611f9,0x3ca67cfe,0x3c91b714,0x3c9ea1a4,0x3c9b8673,0x3c86ee0e,0x3c2b8db2,0x3c195fc0,0x3c224423,0x3c4b6c07,0x3c9c990c,0x3cb1103b,0x3c932f60, -0x3c9d594c,0x3c85e43b,0x3be7835a,0x3c30d93d,0x3c6dac48,0x3c52dcda,0x3bf35646,0x3c87da1a,0x3caf844b,0x3bb00239,0x39dd3ff7,0x3bc798f7,0x3b981640,0x3ba82293,0x3c3a9c63,0x3b2ef0e1,0x3ade6858,0x3ba15473,0x3beb0b0a,0x3c25e867,0x3bb71931,0x3c794979,0x3c0de0a6,0x3c8bdb22,0x3cc76148, -0x3cb4b47c,0x3cd0c24e,0x3cca4f95,0x3ca63059,0x3c1ef2d3,0x3bbd97d9,0x3be89ece,0x3c38e690,0x3cb5df7a,0x3cc49561,0x3c8b267e,0x3c93c9f1,0x3c300eb1,0xbae9765e,0x3b83b63c,0x3cbf610a,0x3ba0a006,0xbc542b10,0xbc45eabb,0xbc4826ea,0x3af99954,0x3c48c5bc,0x3c3a5045,0x3bc70d87,0x3a966f11, -0xbac1f8d5,0x3b25b730,0x3b84f916,0x3b2d4c88,0x3be7168b,0x3c1ff9ec,0x3bf808e5,0x3c786860,0x3c0abdc7,0x3c6444fc,0x3cb3a22e,0x3c65c51c,0x3c84c135,0x3c03a11e,0x3c030792,0x3c0e3ab0,0x3c9e5c90,0x3cb54dba,0x3c65d675,0x3cd1b2b6,0x3cef1180,0x3cd4295e,0x3cd8c7dc,0x3d02fde0,0x3d2cfc55, -0x3ce34193,0x3c4067ac,0x3d00f4a3,0x3b83f465,0xbaa4a80d,0x3bdd289d,0xbb04ca51,0xbb0532e6,0xba9d19fd,0x3b0a3d15,0x3b705f07,0x3b0de0fb,0x398e587c,0x3a4ff75e,0x3b840790,0x3b9fd78c,0x3bcd95f3,0x3bc4169e,0x3b98c8ab,0xb97f1101,0x3c03bcb7,0x3c74a9fb,0x3c6a1342,0x3c9b385f,0x3c56b370, -0x3c155f77,0x3bc61fbc,0x3b49049e,0x3bbcbb87,0x3c3ba20e,0x3bdfc603,0x3bced3fd,0x3c0f85c6,0xbbde71e1,0xbc5ac00f,0xbc3643de,0xbbd3d2de,0xbaa1ecfc,0xbaacc394,0xbbc75de0,0xbb50303e,0xbc2cb472,0xbc09a96a,0xbc1add0d,0xbab833f1,0xbb631d2d,0xbb0b66a1,0xb80b4457,0x3b12e09f,0x3b7162b0, -0x3a982bdd,0x3b4dd698,0x3bf2552f,0x3b95dc55,0x3ba55295,0x3ba36d58,0x3c505ed5,0x3c5a89c2,0x3c02fcd0,0x3bbc2a1a,0x3c716eba,0x3cb24f81,0x3cd2077f,0x3cbb5e9b,0x3ca4834d,0x3ca2a2c9,0x3ccc50a7,0x3d0857ba,0x3d1fefff,0x3d192b52,0x3d043490,0x3cb85100,0x3bc4a1a1,0x3c89a588,0x3b25d8c8, -0xbc3c6265,0xbc626ce6,0xbc70eb03,0xbbc10f41,0xbad44586,0x3b09ce76,0xba2d4116,0x3acaaf6c,0x3b0047ef,0x39d50cde,0x3a24f17f,0x3b6ccaba,0x3b7d32ba,0x3b4c5468,0x3b896bc3,0x3bcadcf9,0x3ab59a0f,0x3b9fed05,0x3c518d76,0x3c69a211,0x3c5be7aa,0x3c534880,0x3c1bfdab,0x3b8c4f77,0xbad2622a, -0xbb173574,0x3a7476f8,0xbb8785d9,0xbb4c07bd,0x3b53c5e5,0x3c05ddc7,0x3c856ef7,0x3cedf4ed,0x3c917fe0,0xbc570fae,0xbd220fc4,0xbd236b1a,0xbc8a77d7,0xbbe91810,0xbc6218d6,0xbc63ae17,0xbc06bdf5,0xbc1abe34,0xbbb8de22,0xbb1cdee2,0x3b2b5984,0x3b637b2d,0x3b06f4cb,0x3aa1f3f3,0x3ac646c8, -0x3ba59de6,0x3ae088d6,0xbadefa41,0x3be45209,0x3be0ad42,0x3b241b18,0x392ae4f2,0xbb013c92,0xbab44159,0x3ae60508,0x3ba01c7e,0x3be4bf64,0x3bd8b753,0x3c27d8f8,0x3c41f582,0x3c5fb14a,0x3c42ddf1,0x3c0bb946,0x3bdde4c8,0xbbfc6153,0x3c0ef554,0x3c619fde,0x3c2897dc,0x3c738751,0x3c75f6a0, -0x3c83e656,0x3c8c7b8c,0x3c936d2d,0x3c8ebc8f,0x3c72565a,0x3c2edefe,0x3c03de6c,0x3bc75946,0x3b923bf2,0x3bb60b4a,0x3b899e68,0x3b54e635,0xba06733b,0xba7f0f50,0xbacc73c0,0x3b07ad16,0x3b8397bf,0x3b66c93c,0x3b5a6f66,0x3adb80be,0x3a58dd94,0xb919a587,0xbb1d9ace,0xbbe43e7f,0xbb383a49, -0x39ce29fb,0x3b945b6f,0xbace76ea,0xbbc75b1a,0xbbf7af30,0xbaf4e7a3,0x3c7056b1,0x3c90cc32,0x3c7b93c3,0x3ca003a9,0x3ca0ae66,0x3c9bf1b9,0x3c918780,0x3c8ecf86,0x3c65fdd4,0x3c686a8f,0x3c354551,0x3c5415c2,0x3c188743,0x3c1fa0f4,0x3bbf1aef,0x3b92eba8,0x3a900095,0xbac15059,0xbbc919ba, -0xbba60bd2,0xbba47865,0xbc1c9e6c,0xbc41370d,0xbc5211be,0xbc5ae6cd,0xbc6bd4d4,0xbc6491b8,0xbc5e8f53,0xbc5e6682,0xbc520fc5,0xbc5a24ee,0xbc5caa53,0xbbfdd648,0xbac46290,0x3b83a078,0x3c147ee1,0x3be8a2b5,0x3c02d217,0x3b18871f,0x3c054992,0x3bd83988,0x3be9710f,0x3c1e1f01,0x3c268239, -0x3c23482c,0x3c1017d9,0x3ba384f4,0x3bb2100e,0x3b8f3f19,0x3b175a9a,0x3a15cd35,0x3ab1e5a0,0x3b2bd242,0x3b3119af,0xba376140,0x3b68b806,0x3a929e11,0x39b0246a,0xba467e75,0xbb0ff687,0xbb73aa60,0xbbb9a00a,0xbb481525,0xba7e70b2,0x3a9d6d61,0x3b4cbcc8,0x3bb4e47c,0x3bed8f2e,0x3bf5bdae, -0x3be2be1b,0x3bdf96ed,0x3bda9c1a,0x3ba91676,0x3bd06d3f,0x3b403bfb,0xba6c5249,0xbb355014,0x3ba43874,0x38a1f236,0xbb0168fb,0xbb599483,0xbb8934e3,0xbb8982d2,0xbbbd56b8,0xbbdf7f95,0xbbf81b50,0xbb167680,0x3b4476fe,0xbbd49e2b,0xbb1ba8f9,0x3af68a05,0x3b97b267,0x3b3fc078,0x3b369b0e, -0x3b09a181,0x3ace9544,0x3a99a72b,0x39759b16,0x3abb10a5,0x3b05b05c,0x3b339032,0x3b5e2d15,0x3b80929d,0x3b9d01cf,0x3b97c1ec,0x3ba1d4b2,0x3baa01e6,0x3bb1cfac,0x3b98cb9c,0xbb14084f,0xbac1cc16,0xbbd7bcbe,0x3c138fc4,0x3c9119c0,0x3ca5e357,0x3b7a0ceb,0x3c74a6fa,0x3ca0831b,0x3ca409ed, -0x3ca2aeaa,0x3c9430ea,0x3ca0d81d,0x3c9fa76d,0x3c974328,0x3c7c76d8,0x3bb96c40,0x3c9da4d5,0x3c87dcfb,0x3c1f3563,0xbba395a7,0xbaaf7fb3,0xbb2319e8,0xbb3915c3,0xbb3fb0a7,0xbb52055f,0xbb719ef8,0xbb760c7f,0xbb7b64e9,0xbb87d2d7,0xbb4a4f32,0xbb363414,0xbb5c771f,0xbb0c3f98,0xbadb6d38, -0xbabcf3c5,0xbafe1403,0xbb0f0893,0xbac16b16,0x3ca055c6,0x3b261695,0x3c40e84d,0x3be26c31,0x3ac77d69,0x3b86e9e6,0x38f69a0c,0x3b2c3559,0x3c00aa8e,0x3b63048b,0x3b110015,0x3b47a618,0x3bcfe604,0x3ba1fe6f,0x3bc93195,0x3b9febb0,0x3c92d398,0x3af6986e,0xbb086df1,0xbae340e6,0xbb7b2b14, -0xbb8c78a0,0xbbb8e0e9,0xbbeb1347,0xbbf8aa11,0xbbf024f4,0xbbf4ace6,0xbb8b37b7,0xbb444e03,0xbb8d00c7,0xba892f86,0xb9e7db7d,0xba259c26,0xba7a9d2b,0xbb51a36e,0xba881300,0x3c2f31fe,0x3be422ac,0x3c746a14,0x3b9d5f8d,0x3b6a25e9,0x3bad1a2d,0x3bdbb126,0x3b059df8,0x3c1baebe,0xb6ae81bc, -0x3bd805c1,0x3aa0eb6a,0x3be9d39a,0x3b947de2,0x3bb41222,0x3c09c246,0x3c53dbea,0x3beb287e,0xbb37b405,0xbae68635,0xbba90440,0xbbb28c2c,0xbbff8e0e,0xbc20edc0,0xbc3533bd,0xbc358c52,0xbc3e6a20,0xbbd061cb,0xbb84533c,0xbbeac818,0xb9b45b0b,0x3af9baa2,0x3a6c6b53,0x3ab727b5,0xbafb1a7d, -0x3b8f1e7d,0x3c73b3af,0x3c44aca0,0x3c969755,0x3b80dfd1,0xbb13bae1,0x3b855fa3,0x3b115041,0x3b9a5cb6,0x3bf90eb3,0x3b64c6d1,0x39789cd0,0x3a34f01e,0x3b7b60f6,0x3b391bda,0x3c19e0af,0x3bfbf8f5,0x3c8c459d,0x3c31d69b,0xba5a4486,0xb9bbaea5,0xbbc34a71,0xbbf8ccb1,0xbc40c995,0xbc883875, -0xbc9b799f,0xbc8f4ba8,0xbc8d0150,0xbbee8148,0xbb5b579c,0xbbeb4dc0,0x3b6a2351,0x3b7eb1cf,0x390682b1,0x3b0d98b9,0xbc47af79,0xba63e633,0x3b955ebe,0xbb8a1f51,0xbb938ffb,0x3bf56ba2,0x3c47cad8,0x3c55d8d0,0x3befc735,0x3a8c6a61,0xbb0c799d,0x3aba1d45,0x3b49ffe4,0x3b800a52,0x3bf77c77, -0x3bcbb895,0x3c13686d,0x3b9e39ac,0x3c577357,0x3c1edc6e,0xbc1dcb15,0xbbfd2768,0xbc3bf0e2,0xbbb18840,0xbbbeeda7,0xbc07cef9,0xbbb31715,0xbc11b4af,0xbcb7e514,0xbc2a2d71,0xbc053920,0xbc3dafef,0xbbe9e32a,0x3aebb676,0x3c88f949,0x3b84b335,0xbc7f9190,0x3c54e66d,0x3c194413,0xba917ffd, -0x3b2b6c85,0xbb4ee405,0xbbb6f2a4,0xbb0b523e,0x3a221103,0x3b529525,0x3b235132,0x39eb0bf0,0x3a5d4390,0x3b0064c6,0x3a785616,0x3b6d44ce,0x3bf389b2,0x3bc18f57,0x3c2332c9,0x3bb74cf5,0xbb12366a,0xba9d0183,0xbc1dea07,0xbbcc0f70,0xbb397698,0x3b4b4613,0x3bc3c705,0x3beec3c8,0x3b952c79, -0x3adf1790,0x3b945dc0,0x3c52c913,0xb9973fe1,0xbc0ec17b,0xbc55e436,0xbc823cb7,0xbbcf8bd1,0xbb48d15b,0x3a2318ff,0xbb7b60a2,0xbb4c46aa,0xbc07471c,0xbbd0b33c,0xba624aa1,0xbb45baf7,0xbb747e0b,0xba3bbdfc,0x3a4a5a16,0x3b152032,0x3a45345b,0x3b50b616,0x3b888234,0x3bcab3e2,0x39da6db7, -0x3badec5d,0x3b8cbecd,0x3a0bbcc7,0x3bb5d670,0x3a35d6b7,0xbb99020b,0xbc379e36,0xbc65f628,0xbca9824d,0xbca8e50a,0xbc2b79c3,0xbc5c90d4,0xbc4f3f71,0xbbc6bb19,0xbc003ee3,0xbba799b0,0xbc047656,0xbb99da07,0xb9816df1,0x3b5c4050,0xbba85da4,0xbc56c85f,0xbc198f31,0xbc106d51,0xbb53b0c7, -0x3ae6bcd3,0xb9778662,0x3b089f2e,0x3b3106d1,0x38c17eac,0x3a00b8c9,0x3b5bc50f,0x3b577922,0x3b9f2ee4,0x3b979aa2,0x3ba22932,0x3c0ead3d,0x3aff951c,0xba03431c,0xb95449af,0xbb662783,0x386d6e73,0x3b048017,0x3b0c0d92,0xb76ddbd0,0x3aa52082,0x3ba74233,0xb9b713ed,0xbba3e865,0xbc64aa12, -0xbc642bac,0xbc6b8519,0xbc7d1419,0xbad479ef,0xbd050158,0xbcef6bb9,0xbc5aab75,0xbc504854,0xbc09c294,0xbc48b29a,0xbc6d477d,0xbc049041,0xbbf086ae,0xbc03079e,0xbb549570,0x3a1c48c3,0x3b201816,0x3b2121db,0x3ae7d175,0x3ae9c41a,0x3b4381be,0x3b025636,0x3bd1189a,0x3b456d7a,0x3b715a2d, -0x3b8a6069,0xba145e39,0xba89b60c,0xbb3e0410,0xbb9d56ad,0xbacf9839,0xbab24d54,0xbbd81d35,0xbb74a5cd,0xbbe0697f,0xbc7f09cd,0xbc9aec64,0xbca8716f,0xbcc68b8e,0xbcd090fb,0xbc80979b,0x3adaf37c,0x3c85c02b,0x3c4ca65d,0x3c6a496e,0x3c649cd3,0x3c3f7b83,0x3c694be4,0x3c29ed33,0x3c146168, -0x3bb3d516,0x3bd277c3,0x3b8b13c1,0x3b5759e2,0x3b7e8174,0x3b8b2da4,0x3b9638f4,0x3aa71d33,0xbaa69491,0xba64e4d7,0xbb3c1652,0xbb5e744e,0xbb5bb094,0xbb8e8700,0xbba0becc,0xbbcad6af,0xbbdf9b52,0xbc06f7b2,0xbc25d03b,0xbc0913ac,0xbc1ede01,0xbc64337b,0xbc8d71a9,0xbca23482,0xbcb0ce82, -0xbc92693d,0xba4a7c78,0x3c241e36,0x3c8f6240,0x3c85b4a6,0x3cb7aaa6,0x3c9de975,0x3c8cfd88,0x3c752656,0x3c80d1b4,0x3c463e37,0x3c68f98b,0x3c12a309,0x3c3d181d,0x3c0603c1,0x3be59646,0x3b48cf56,0x3ac00662,0xba2c8316,0xbafb41b1,0xbbdbe88d,0xbc39c05a,0xbc48807f,0xbc737651,0xbc7d15f3, -0xbc855ad4,0xbc8b0b26,0xbc91436c,0xbc9551e9,0xbc98af70,0xbcafb07d,0xbcc6d6a6,0xbce558fd,0xbcb19e30,0xbc82bd3a,0xbc40a217,0xbb752310,0xbad1b50e,0x395bc578,0x3c31cc16,0x3abe3958,0x3bc45b61,0x3bc6db30,0x3b81d695,0x3bb89e30,0x3b025841,0x3b17f4f8,0x3b96087a,0x3a89bcaf,0xba6c3cc8, -0xba4f0fce,0x3ab2a2ff,0x399fd0f1,0xba85b6ab,0xbae6cdd4,0x3b5dd6f9,0xbb58801a,0xbb7b11a4,0xbb99edec,0xbbc33fee,0xbbe43af5,0xbc084aeb,0xbc1fd798,0xbc2c04c7,0xbc37560e,0xbc3a6285,0xbc38ac63,0xbc2cd83b,0xbc301dc2,0xbc0c9ce3,0xbbe51151,0xbba9d87a,0xbb507e1e,0xbba01330,0xbbced100, -0x3b1fdb8f,0x3c0296de,0x3c33a13b,0xb98f0613,0x3bfad425,0x3c491948,0x3c4a29a3,0x3c46b439,0x3c2e9fcc,0x3c40466f,0x3c4383e1,0x3c38c14d,0x3bdda56b,0xba633f84,0x3c2d8ccf,0x3bc4fdf2,0x39e51646,0xbbfb1602,0xbbcfe88c,0xbbed2041,0xbbfa02b4,0xbc06c4fd,0xbc0eb559,0xbc182baa,0xbc13ca50, -0xbc124a10,0xbc131e28,0xbc143d44,0xbc163076,0xbc19da7d,0xbc088288,0xbbf69216,0xbbdb3388,0xbbc69808,0xbc00c6bb,0x3ba54fdf,0x3b96e6ce,0x3c02e6f9,0xbbbb5765,0xbc22907e,0xbb6ac27a,0xbb35adaf,0xbc181fbe,0xbbe10e30,0xbbef1485,0xbbe4c427,0xbb92c824,0xbbc85b32,0xbbc6c389,0xbbac8e1e, -0xbc1a6dd0,0xbb7c05c4,0xbb94177d,0xbc0e932f,0xbbaf2f4e,0x3c07bfb2,0x3ba29e73,0x3ba680c2,0x3ba2a1ab,0x3b9f4c83,0x3b91900c,0x3b6231d7,0x3b69a2a2,0x3b6f15cc,0x3b739a17,0x3b8dd7cc,0x3b91a6f6,0x3b890037,0x3b85b483,0x3b85fb53,0x3b84ee2d,0x3b99178e,0x3bd08127,0x3b91e1e5,0xbbdc7ccf, -0x3b9c7017,0x3a8de0fa,0xba9ffb2f,0x39fe0649,0x3a6c92cf,0x3b7a9121,0x3b0f1c88,0xbac12581,0x3a984120,0x3b128f28,0xb93d0cb8,0xba6ec3cf,0x3a0f1e1a,0xba123d87,0x3b4b5e20,0xbb7a6d88,0x3bc099fd,0x3bf6b50c,0x3ba83a24,0x3bb2733e,0x3bab6a14,0x3b926e6a,0x3af9db75,0x3ae3eb0e,0x3ad73a5e, -0x3ad56a3c,0x3b7561a0,0x3b7af1b8,0x3b2562d3,0x3ae8d4ae,0x3ad8b4c8,0x3b221cc4,0x3b672c0a,0x3c0ef515,0x3b9ab8a8,0xbb102f9d,0x3b0205f5,0x3ba06c8a,0xb9be5fe3,0xba46d14c,0x3b2b00db,0x39e786d2,0x3bb1ab8b,0x3a201b37,0x3bd3ba1e,0x3916b8e7,0x3aae7864,0xbaa128fc,0x3ad089d5,0x3b256788, -0x3b80f455,0x3aabff06,0x3be9a5e4,0x3c22b9f4,0x3bc608a3,0x3bbb863f,0x3ba7c479,0x3b386bb1,0xbb29efad,0xbb00be57,0xbac6fefb,0xba08b5a6,0x3b1db898,0x3b409c55,0x3abce07f,0xba367884,0x3a1fd519,0x3b5b4e81,0x3b9bf083,0x3c3385fc,0x3bc33683,0x3b3c685e,0x3c2b5332,0x3c7930c2,0x3b3520dc, -0xba10c965,0x3b9fec39,0x3b9cfe86,0x3bb98195,0x3c3496ad,0x3b866491,0x3b07e58e,0x3b83a226,0x3bb59d85,0x3be5c44c,0x3b561ed9,0x3c382e31,0x3bd744bb,0x3c4ca334,0x3c50f7aa,0x3bc7aa06,0x3bb50300,0x3b8c7d65,0x3a8634fd,0xbbe43df6,0xbc02b6b8,0xbbd0720a,0xbb8dce09,0x3a618224,0x3950271b, -0xbb417682,0xbbd618df,0xbbdbbe7f,0xba833f70,0x3aa9ba4d,0x3c4f3444,0xbb8fb085,0xbc8cc90a,0xbc84b5ed,0xbc80b4f8,0xbaa6c4c2,0x3c1511ce,0x3c35690e,0x3bf8ab68,0x3acadf9e,0xbb0b20da,0x3ad8d246,0x3b613ddb,0x3b420609,0x3bdddcc3,0x3bffaf45,0x3ba70dd8,0x3bdcfb8e,0x3883cce0,0x3b27bd1e, -0x3c05100f,0x3be51bc3,0x3c590065,0x3bb1c2bf,0x3bd9f02d,0x3c252143,0x3ca56347,0x3c9be6d6,0x3b134b53,0x3c2a9891,0x3c1462bd,0x3aa9dfc4,0x3b414cc0,0x3c42a862,0x3cef12e0,0x3c836226,0x3b01589e,0x3c3a7f25,0x38827f81,0x3a4f5a69,0x3b5a6d3d,0xbb36125f,0xbb58f180,0xbb39ba59,0x3aadb9a7, -0x3b57fe9e,0x3b74890a,0x3ad462c8,0x3aae6df8,0x3b765093,0x3b4c5edd,0x3b91c334,0x3b8ba713,0x3bbd9164,0x3b42e933,0x3b5bb66e,0x3bbf97fb,0x3ac5e2ee,0xb9f4efb8,0x3a858e86,0x3aa1c3de,0xb9903e06,0x3b613d85,0x3b9fa420,0x3b105ad1,0x3b46fa38,0x3a87d0da,0xbacc4f72,0xbc3b039d,0xbc83ab84, -0xbc6680ec,0xbc3a5556,0xbbb8edf8,0xbb4c7013,0xbb928996,0xbb1a9d09,0xbbc8e201,0xbbd5d841,0xbc15bcf0,0x39fa3b52,0xbb3a4ef5,0xbaf2c584,0xb90ea294,0x3b02c1df,0x3b522687,0x3a9cfb6e,0x3b0615fa,0x3bb27f7c,0x3aff1e77,0x3b1080f5,0xba3f13e5,0x3b5bd63d,0x3c3f0d16,0x3c0b90ce,0x3b9187e4, -0x3bd5c4fe,0x3bb1c334,0x3b0a3307,0x3b252ebe,0x3b9e94eb,0x3c181746,0x3c7e7f50,0x3c7f481f,0x3bebec2d,0xbb21d105,0xbbe905d8,0xbc343fdb,0xbbd23d59,0xbb9751d1,0xbbb455d3,0xbba57138,0xbbe623b2,0xbbffdce8,0xbbd36369,0xbb21655b,0x3b90d481,0x3a771e99,0x3b337c30,0x3b20b8cb,0x3a5a41af, -0x3a8b559a,0x3b3b8488,0x3b74bb4b,0x3b88e40a,0x3ba054f9,0x3bdf9fb6,0x3b291190,0x3b5fa074,0x3c089b62,0x3bd9cda9,0x3b9a070c,0x3b95687b,0x3b580197,0xbb059382,0xbb6af1c5,0xbbbb7279,0xbc1d540a,0xbc54fc13,0xbc4e4a6a,0xbbf25954,0xbc2455ea,0xbc22a5c3,0xbc449712,0xbc1713fc,0xbcbcbe9b, -0xbd19611d,0xbd0dc358,0xbcbd10ef,0xbc80bc3b,0xbc94e505,0xbc809a36,0xbc272023,0xbc35d9db,0xbbfda5ba,0xbbac218e,0xb93fce76,0x3b08edde,0x3b2ca55a,0x3b02e3e5,0x3b09c450,0x3b978aa2,0x3ac20562,0xbad2fce1,0x3b3937c8,0x3bb11a30,0x3b75aba9,0x3b449ccc,0xbac6a489,0xbb855c86,0xbbe58d22, -0xbbbed56d,0xbbd87c28,0xbc2f82ba,0xbb0ed9f7,0xbb859cce,0xbc3f11e5,0xbc944640,0xbcb2b295,0xbcae47ed,0xbcc2ac33,0xbc9283f8,0xbc7bcf37,0xbbf1e41d,0xbb4aab88,0x394cf068,0x3ba4bf70,0x3c0a6718,0x3c0598e8,0x3beef40f,0x3bd166b3,0x3bbc548d,0x3bbf536b,0x3ba5fdb0,0x3b9b9a6e,0x3b88f6a6, -0x3b2c2db1,0x3b1f2f1a,0xb9be3e21,0xba2314cf,0xb9030c2f,0x3b5c0127,0x3b705306,0x3b4bae5b,0xbb2eb778,0xbb9fb768,0xbbde5f5e,0xbba48f5a,0xbb85d3fc,0xbb9dd340,0xbb6b0c7b,0xb9b91983,0x3bb09875,0x3a8fae26,0xbba46f36,0xbc372840,0xbc95b79d,0x3aff8631,0x3bb3590c,0x3ba28ab1,0x3c06c54f, -0x3c37d794,0x3c3aaa3d,0x3c33ffd8,0x3c3f3f77,0x3c29084d,0x3c361f46,0x3c11e105,0x3c254a60,0x3c001dc1,0x3beaae56,0x3b8ceac1,0x3b1c49c7,0xb99039bb,0xbb0f540c,0xbbcd2c56,0xbb86e1f1,0xbb66692b,0xbbf795b1,0xbc12c54b,0xbc27cc34,0xbc345913,0xbc4d0711,0xbc4c5d8d,0xbc57cdec,0xbc5c61c9, -0xbc8018d1,0xbc985c06,0xbcb28258,0xbc996e14,0xbc74599b,0xbc30c589,0xbb913c96,0xbaa9841a,0xba3f1768,0xbaa9c683,0x3a2982d5,0xb9d08d46,0x3955783d,0x3ae42a97,0x3b1644bc,0x3b0f461a,0x3a0c2817,0xbb0f4093,0xbb01fa29,0xbac9d057,0xbb4a40d1,0xbb636f53,0xbb195299,0xbb3b7127,0xbad3c8b1, -0xbb6242f9,0xbab64b3f,0xbb2d734e,0xbb7389c5,0xbb980929,0xbbc4a3fe,0xbbf10564,0xbc10f0f9,0xbc01b5a1,0xbbf5bcd8,0xbbeba70f,0xbbe50ee8,0xbbccb6b2,0xbbd026e8,0xbb8fe65f,0xbb71e700,0xbb4b8997,0xbb2bf5c3,0xbb49eb3a,0xbafebd03,0xbbfb74d6,0xbc120fdd,0xbb9bfd82,0xbbc51c0c,0xbc08cc9c, -0xbbb4abad,0xbbcc5c29,0xbbd3c0c8,0xbbbd1a7f,0xbbdb7a81,0xbbec8b32,0xbbeaf532,0xbc251121,0xbbef7ef9,0xbbe44ad9,0xbc250778,0xbc0222b7,0xbb3624cb,0xbb8b63f4,0xbb93c888,0xbba31d3f,0xbbb0b907,0xbbbac86f,0xbbcef7b0,0xbbc433dc,0xbbc231d0,0xbbbe601d,0xbbba8151,0xbbb9ae8c,0xbbbddfb2, -0xbbaf6094,0xbb9d52ad,0xbb826f93,0xbb683c75,0xbbad020a,0x3bd2ea80,0x3bc201e6,0x3b89800e,0x3c666f8a,0x3c6179e8,0x3b88720e,0x3c480f83,0x3c558179,0x3bca3197,0x3bcf970b,0x3bc7b3e3,0x3b8e305a,0x3ba673f5,0x3b9a3699,0x3b538704,0x3c553d54,0x3c51a56f,0x3b307e3a,0x3c57511e,0x3c68d2ec, -0x3bab3e30,0x3bcca8d8,0x3bd0731a,0x3bc8ce04,0x3bca25ed,0x3bc43821,0x3bb843d2,0x3bb356b8,0x3bb1d1bb,0x3baad07c,0x3bcd31ad,0x3bdaa940,0x3bd2c2b0,0x3bf2ce90,0x3bf0955e,0x3bc4376d,0x3bd103d5,0x3bb95955,0x3c0c676c,0x3c4bc79d,0x3c1a9a2d,0x3c48f823,0x3bfc80af,0x3bd0aa70,0x3be434a0, -0x3bdf26e5,0x3c1d9ac4,0x3c3a9c55,0x3c2bb831,0x3c032b06,0x3c045047,0x3bed9a80,0x3be3b825,0x3c3166d5,0x3c0fdd35,0x3c38e044,0x3c30a51e,0x3bf41384,0x3c129d0f,0x3bfdf7f3,0x3bfa44d5,0x3bd6ed36,0x3ba90ffa,0x3b942324,0x3b99cc54,0x3ba1bdec,0x3c01ec55,0x3c197e67,0x3c0ffeda,0x3c37aff1, -0x3c27fa37,0x3bd162ce,0x3bf108fd,0x3bb46e85,0x3bf704eb,0x3c635cc9,0x3c267355,0x3c45f839,0x3bbeb466,0x3b9bbf1b,0x3bc3c2a8,0x3bf729e1,0x3ba5a67a,0x3c1a8e98,0x3ba0ba74,0x3be82d91,0x3b880668,0x3be1c8c9,0x3bdbcc4a,0x3c014972,0x3c1e3211,0x3c5e6707,0x3c4fa3a6,0x3c089d35,0x3c2485de, -0x3c1061a3,0x3c167e65,0x3bf213c0,0x3bb43f49,0x3b8a71d9,0x3b9613a5,0x3b91fe5a,0x3c1a69c4,0x3c48c7af,0x3c2c0461,0x3c828db9,0x3c6c7e07,0x3bdc5911,0x3c205050,0x3b8bb062,0x3c1053e6,0x3c7c0c61,0x3c6cf1ed,0x3c7c2cde,0x3baf8f8c,0xba2b18fd,0x3b261b3a,0x3b643282,0x3bc30d62,0x3be4fa56, -0x3b840b8a,0x3b0edbfe,0x3a4b2081,0x3b98e59d,0x3b980dbb,0x3c144642,0x3c1c2615,0x3c81aeff,0x3c843e4b,0x3c3ff5cb,0x3c6931b7,0x3c4c005c,0x3c45344e,0x3c12e011,0x3b73f9ce,0x3a64dce6,0x3ade6631,0x3b49534f,0x3c521c25,0x3c883673,0x3c74aa8f,0x3cb31336,0x3c87691a,0x3b7a91f3,0x3bfa3dcc, -0x3c3cdde8,0x3c44ec77,0x3c1dbc5e,0xba5b78d4,0xbc090c66,0x3b79e841,0x3c3299bc,0x3c5f642e,0x3c2cb1e0,0x3b7e63d9,0xbafaa7a5,0x3ab63bf7,0x3b470cd2,0x3b9f28ee,0x3c077c21,0x3bec6491,0x3c05d4cf,0x3bd6435c,0x3c324bc0,0x3c3c1323,0x3b8217d7,0x3b46d971,0xb9dec206,0x3b09dbfd,0x3abd5bdc, -0xbb02ab0d,0x3c14bc02,0x3c0be5ab,0xbba00083,0x3b6b8a09,0x3c045864,0x3c51bbe5,0x3c6504ec,0x3c9ee353,0x3cf45104,0x3caca1aa,0xbc8147aa,0x3aae0fb5,0x3c85d4a1,0x3c344ab0,0x3bfa3778,0x3b4cab88,0xbb24471e,0xbb3ff85d,0x3a447a31,0x3b838ac1,0x3b973246,0x3aff2cf8,0x3ad26e93,0x3b36dd02, -0x3b4b04be,0x3bd23fcb,0x3c189a09,0x3bf9bb5f,0x3c0de01c,0x3bf95cf1,0x3c31fc32,0x3c728ff0,0x3c432108,0x3c0a65a9,0x3bcfcf0d,0x3be20a71,0x3c1ebbba,0x3c070500,0xba9b88af,0x3ba1c10e,0x3bcfbaf2,0x3b491556,0x3b952ae5,0xba696843,0xbc44caee,0xbc43c69f,0xbadae9cf,0xba217776,0xba82bc69, -0xbb5fdf46,0x3a292a40,0xbb9a5dea,0xbbb82cd7,0x3b05a5ac,0xba26c2dd,0xbafe0c1f,0x3a11fa32,0x3aebbb1b,0x3b26d599,0x3abc2e03,0x3b6481eb,0x3bc2c465,0x3ba3be94,0x3b5ce92a,0x3be93ad1,0x3bb0c45b,0x3bc3917d,0x3c07f7a3,0x3b5c9682,0x3c0be539,0x3c275782,0x3c1a3112,0x3c11d7b2,0x3bea5504, -0x3b9ecb72,0x3c071c2c,0x3c8d71e0,0x3cf7ebbc,0x3cee63b0,0x3cd05f8d,0x3c99120b,0x3b962b13,0x3c582bf2,0xbb4c5bf6,0xba424a4a,0xba59ed4f,0xbb9659d5,0xbb872ec6,0xbb2c563c,0x3b8c4958,0x3ab08da7,0x3b367d5d,0x3b5b220c,0x3ab3033c,0x3ab9c3df,0x3b892c02,0x3b92dd89,0x3bd70edb,0x3bea0386, -0x3bec551a,0x3c0fb467,0x3b932614,0x3be8bf52,0x3c2ee1fc,0x3c290a56,0x3c4dbfa3,0x3c376df4,0x3ba48b12,0x3c153ff9,0x3c14fde5,0x3ba78247,0x3b2c84d9,0x3a0d9438,0xbba44186,0x3c7a5d9d,0x3cd1e933,0x3cef6113,0x3cc6ab3e,0x3c594a4a,0x3a0c3274,0xbc6d6e28,0xbc673bab,0xbc3df247,0xbc50d471, -0xbc3ec6ee,0xbbc7f50d,0xbbca3e13,0xbbbfcf0d,0xbb6075df,0xba6fbfbe,0x3ace98d8,0x3b8da50e,0x3b43dded,0x3b45a7d9,0x3b84b062,0x3bb617f0,0x3c048cfb,0x3b97d093,0x3bc53986,0x3bca63dd,0x3b54a8d0,0x3afe7eec,0x3b4d31b7,0x3be4f2b6,0x3c069433,0x3c28b6b9,0x3c4a9f32,0x3c500b63,0x3c27fa51, -0x3b3b5f23,0x3b94000d,0x3bb506f7,0x3b9815dd,0x3c4e796f,0xbc5a7b91,0xbbd118f7,0xbbb2f1b9,0xb9949ba2,0x3ad2ea04,0x3bf2fdd7,0x3bd8fc3e,0x3ba7c631,0x3b4cb0f7,0x3b242375,0x3b02b5ea,0x3bbe86c4,0x3bc5c89e,0x3baca00d,0x3b976fbd,0x3ba5d33f,0x3bc685f4,0x3acca862,0xba07b87c,0x3901850f, -0x3b423e67,0x3b9bf04c,0x3b9e38d2,0x3b8f66cf,0x3b5a4bbf,0x3a68ab4b,0xba895907,0xbb8cce54,0xbbeca732,0xbc0788d8,0xbb442ac2,0x3c10f768,0x3b67dd83,0x37a3a23e,0xbb9d81ac,0xbc2616d6,0xbb03f3c3,0x3b7edcfe,0x3c290dc2,0x3c2ac0cb,0x3c62f242,0x3c4ac382,0x3c322ebc,0x3c2cee34,0x3c3a5f70, -0x3c260739,0x3c4e33ef,0x3c05d730,0x3c0391fd,0x3bbb1d32,0x3ba17230,0x3b3b9310,0x3b018043,0x3ac3af67,0x3b0f4ace,0x3a0ffd0f,0xbb65884d,0xbbb1564c,0xbc06646e,0xbc166b9f,0xbc278737,0xbc3d00a1,0xbc19b9c5,0xbbf1da0f,0xbba373cb,0xbbd67fc8,0xbc1cf51c,0xbc524c96,0xbc4a6f39,0xbc314876, -0xbc2668a6,0xbb945c82,0xba6651a1,0x3aa42285,0x3b08ab6f,0x3a5689a8,0x3b41ea83,0x3b22c741,0x3b3ea85c,0x3b77029b,0x3b333033,0x3b6bd522,0x3b9d725e,0x3b7d92b8,0x3b29d647,0x3b46ee5d,0x3b0c366c,0x39040bc5,0x39510e11,0xbb1b0f14,0xbad18469,0xbbdf49e8,0xbc0a931b,0xbc09d149,0xbc19584b, -0xbc26c4b3,0xbc377406,0xbc4d3b74,0xbc4825fd,0xbc4438d5,0xbc36de64,0xbc2328d4,0xbbfe3fab,0xbbc6fca3,0xbb8c1296,0xbb483fca,0xbb11782f,0xba978023,0xbb6ab12c,0xbb6f29a7,0x3acd757c,0x3b079f65,0xbb2d4867,0x3ab8c6a2,0x3b2ad9ee,0xb9bf8d44,0xba212f41,0xba6fac6f,0xbb0d628d,0xbadf8ef9, -0xbaf2104b,0xbb1a4a01,0x3b2219a5,0x3a2397e1,0xbb3fd440,0x3a55729d,0xb9d9cde3,0xbbe7ff44,0xbbca9bc9,0xbbdfdbab,0xbbf02469,0xbbfe71f5,0xbc058f18,0xbc0f340f,0xbc031e31,0xbbf696dd,0xbbe9faa5,0xbbdbf34d,0xbbd363f6,0xbbc4dce3,0xbbbb6a30,0xbbab25fb,0xbb9635b5,0xbb84f4ce,0xbbbe000d, -0xbb5992e8,0xbb0cfba8,0xbb6101bb,0xbbd480af,0xbacc79fb,0x3c410984,0xbbfe9495,0xbb3ac209,0x3c00af3e,0x3c0a828e,0x3c0f7d57,0x3c1ebdfd,0x3c21e4c0,0x3c252d2a,0x3c2b86a0,0xbb2cba83,0xbbef9695,0x3c4a820a,0xba9ad685,0xbbc19c1f,0xbb484340,0xbb286625,0xbb6854fe,0xbb757b26,0xbb786a26, -0xbb84d976,0xbb95bd00,0xbb93411e,0xbb940258,0xbb970da2,0xbb95aa6c,0xbb97de56,0xbb9cf8a1,0xbb9d4067,0xbb8ca040,0xbb3aca4d,0xbb40d329,0xba9ae40c,0xbba528f1,0x3b592571,0xbb22807a,0xb99edc43,0xba72fbef,0xbb463d7b,0xbafe7788,0xbafb7648,0xbb2c67c0,0xbb38df55,0xbb3d6c9e,0xbad40e56, -0xbb6c9595,0xba415c46,0xba4db56b,0xbb1e59f9,0xba170993,0x3b98b9d0,0xbb52dad0,0xbb35a60e,0xbba67a6c,0xbbc3834e,0xbbc33e40,0xbbcbd869,0xbbf14cfe,0xbbec4776,0xbbf1da6a,0xbbfd69f4,0xbbedc671,0xbbfbd65a,0xbc04f9f5,0xbc0e9f22,0xbbee83a4,0xbb4ae00f,0xbb43f5cd,0x3a144419,0xbb5e3ffc, -0xbb366a8e,0xbad68db1,0x3b662544,0xba67c7ec,0xba5cfa08,0x38a23cdd,0x3ae93c77,0x3b6186ff,0x3a6d3c1f,0x3b29fb30,0x3b21d629,0xbaec52ca,0xb9a76420,0xba623a2a,0x3af52900,0x3ae418f5,0x3a9bfe18,0x3a0ae665,0xbb414fdc,0xbbaec0f3,0xbc041fea,0xbc03bfbf,0xbc1bd808,0xbc471e84,0xbc38d3c0, -0xbc383c03,0xbc3bf970,0xbc3d7f76,0xbc47a499,0xbc4e800a,0xbc5bda6f,0xbc1b4b48,0xbac498fe,0xba9d4db0,0x3b34928f,0xba638e34,0x3b0b081d,0x3b8baa3b,0x3c104a01,0x3a23252f,0xbaace3c0,0x3b24667e,0x3b75974a,0x3bbdeb7f,0x3c077a43,0x3bb09870,0x3b07c646,0x3a724b43,0x3b44cb0d,0x3b39297a, -0x3b9c549d,0x3bc9b56a,0x3bfb3a7b,0x3bb6e7d4,0xbb035b52,0xbc045860,0xbc5a6fb4,0xbc5f2f9d,0xbc764657,0xbc97ea9e,0xbc9163c2,0xbc871609,0xbc7f6ee4,0xbc731117,0xbc8b0de4,0xbc92327b,0xbca0bf22,0xbc6d7d0c,0xbafbcfdd,0xba09383e,0xbb436cc6,0xbbe4d6bc,0xbc1c6aa7,0xbc439d54,0xbc3af5be, -0xba889ccb,0x3bb18330,0x3c1a1dad,0x3c1f0782,0x3b66607a,0xbb05aa9a,0x3a1658ee,0x3b1d8777,0x3b953f72,0x3bd959c2,0x3bad9281,0x3b8661cb,0x38c85497,0xbab85d2f,0xbb9fef57,0xbbf77ced,0xbb2b8ac6,0x3b0267b7,0x3a869d22,0x3b0cb32b,0x3b961d47,0x3c272a60,0x3bbda539,0xbc3f901b,0xbc34b002, -0xbc649ecc,0xbc80a7e4,0xbc59cb3e,0xbbb1e12f,0x3c2d6eaf,0x3af774cc,0xbc273161,0xbc47ce57,0x3b398eb3,0x3bd976a0,0xbb5c66a7,0xb933dd97,0xba8bd68c,0xbb870903,0x391205bd,0x3b4349da,0x3ba876f2,0x3b17247b,0x3aa7754d,0x3b49a782,0x3b10b3be,0x3b76d682,0x3b6f61ec,0x3ba77993,0x3bc42ae8, -0xb9e85293,0xbb351d19,0xbbfbfff2,0xbc8b955c,0xbc371f22,0xbbc1925c,0xbaa0389a,0x3b91f6e5,0x3b8d6076,0xbba1f67c,0x3a39255e,0xbb523fd0,0xbc806657,0xbc8215f4,0xbc819a5a,0xbc51a1ac,0xbc49bf49,0xbbefdb11,0xbba374a2,0xbafb380e,0xbace83ed,0x3a8acee7,0xbb5fff40,0xbbeb6c8d,0x3a8c3d4e, -0xbaada8fa,0xbae6f866,0x391e3ee5,0x3a6c6d3c,0x3afacba6,0x3aea79c2,0x3a7d7897,0x3b192856,0x3a2b6d90,0xbad01e00,0xbb4e4353,0xbb103ad5,0x3bae8288,0x3bc72a5c,0x3a9eba32,0xbb6d4a67,0xbc42f93f,0xbca55745,0xbc935cdb,0xbc3b50e8,0xbba75fbf,0xbaca64ca,0xbbe4d368,0xbca8bc40,0xbcf45cac, -0xbd03435c,0xbcf462af,0xbc58b5de,0xbc8203a2,0xbbc4ce18,0xbaa3bc34,0xbb3f6f1e,0xbb51ffe2,0xbbb5e4ff,0xbb2194a2,0x3b2af6a2,0x3a3f669e,0x3b1c5269,0x3b144b57,0x3a27bf56,0x3a8d4030,0x3b20f94d,0x3b465d80,0x3b948df6,0x3b823928,0x3b976bb8,0x3b9f1fd4,0x3ad0584c,0x39827bee,0xbb1c15cc, -0xbb8d460a,0xbba19452,0xbb8eace3,0xbbaef0b3,0xbbb83339,0xbc11a6c5,0xbc7e7ca1,0xbc71ba5d,0xbc71adb1,0xbc6f7619,0xbcb39dc0,0xbce8b4ea,0xbd1e4ba5,0xbcc6aaff,0xbd040e2a,0xbcb7c083,0xbc61c8b3,0xbc9b2e91,0xbc9a88d6,0xbc6f55b8,0xbc411404,0xbc210d88,0xbc0d423f,0xbbfb1668,0xbbc967b7, -0xbb3a2122,0xb7d73bc5,0x3b3f3d22,0x3b0edf66,0x3b251dfd,0x3b676237,0x3ae5ade8,0x3ab5a851,0xbab53277,0x3b5b201c,0x3ba284d9,0x3b3491a8,0xb9da31a4,0xbb8f5e3b,0xbc1615ac,0xbc2fcde3,0xbc5caf0d,0xbc9982f4,0xbc538a45,0xbc82f212,0xbcd6603d,0xbd096a3f,0xbd14ed0f,0xbd14546b,0xbd09cc03, -0xbcf2270c,0xbce4098d,0xbc6dccff,0xbc542a76,0xbbc6d9bf,0xba846813,0x3a463c48,0xbae0939a,0xbb1942e1,0xbac02f2e,0xb912857b,0x3b73ade9,0x3b979765,0x3b87019c,0x3b0bc04f,0x3a163d71,0x3928afa8,0xb908b40f,0x39983239,0x3acf1f6b,0x3b3d761c,0x3ab1c17b,0xba7b5c3f,0xbb93f468,0xbbdb56a3, -0xbbf9ee9f,0xbbf5e6ec,0xbbc1d662,0xbb3013b5,0xbbff5811,0xbc11fa56,0xbbfa68d6,0xbb8dde35,0xbbeaa8bb,0xbc7228bd,0xbcc0d4f5,0xbc2487f1,0xbbd7c9ce,0xbb619c26,0xbb198e3b,0x3b2634c0,0x3b2a335c,0x3b5af95b,0x3b93f3e1,0x3bd48fad,0x3bde536f,0x3c0477db,0x3bb80b77,0x3bc3b254,0x3b74a345, -0x3b47ee19,0x3a8bc031,0x390d9ce3,0xbaaccf53,0xbb5f83f4,0xbb9b2c45,0xbbad829b,0xbbc7c6c1,0xbbcfeed9,0xbbf0f3b5,0xbc079c01,0xbc1b16b4,0xbc30bbdf,0xbc508ced,0xbc629229,0xbc81d2e0,0xbc8f2122,0xbca6f089,0xbca2814c,0xbc9ab88e,0xbc8d14a9,0xbc55c9b7,0xbbc89d10,0xbbaf73f2,0x3aa6e4ff, -0xbb494b86,0xbadded39,0xba76b03a,0xbacababe,0xba6029bb,0xbb17d218,0xbb7d5fa2,0xbb81bf39,0xbbaff50b,0xbb9f0f77,0xbbb29cb6,0xbb9a93e1,0xbb9e6125,0xbbf58dd2,0xbbde8448,0xbbcd0889,0xbbf8248b,0xbbec9488,0xbc0e2020,0xbc1b89aa,0xbc2d0b89,0xbc3bc208,0xbc4ac549,0xbc4b988a,0xbc5298f8, -0xbc62eaed,0xbc702223,0xbc7e738f,0xbc886f57,0xbc615b68,0xbc3ed375,0xbc21962e,0xbc07e355,0xbc0e10bc,0xbc0b42d0,0xbc249833,0xbbe78e72,0x39caf96e,0xbc2907bd,0xbbe5afce,0xb9e3ac27,0xba01eff0,0xb9819e0b,0xb79a6aa9,0x399174c5,0x39c259d8,0x3a3d4952,0xbc0b81e6,0xbc38143b,0xba48dcdb, -0xbc117179,0xbc361095,0xbc0daa93,0xbc168f38,0xbc1ec002,0xbc22abe7,0xbc28592c,0xbc2d5040,0xbc33fa52,0xbc397874,0xbc3e9c45,0xbc411139,0xbc457276,0xbc48be28,0xbc550d5e,0xbc449198,0xbc39fe0c,0xbc2a89fc,0xbc20549f,0xbc44dd8d,0x3c3a2dca,0x3c23d1fe,0x3c4c09de,0x3c180e66,0x3ac9fbce, -0xbc232a53,0x3c3f4471,0x3b3e4cdc,0xbc0431a7,0xbc0687e5,0xbc06b833,0xbc084466,0xbc12f33f,0xbc18d569,0xbc291f12,0x3b24bd8c,0x3c304077,0xbc360c2b,0x3b069ea2,0x3c159807,0x3c4d51e8,0x3c28f5ee,0x3c39b9c3,0x3c3906d9,0x3c3b75fe,0x3c39eb6e,0x3c34284a,0x3c320dfd,0x3c3289fb,0x3c3564b3, -0x3c3c3444,0x3c410100,0x3c42f395,0x3c4751fe,0x3c3fbb46,0x3c1e2621,0x3c324ffe,0x3c2d4ebd,0x3c58dc07,0xb9b5d379,0x3c3b3712,0x3bec8afd,0x3b8ffcd6,0x3be772a6,0x3bc29176,0x3c1e426e,0x3c32f925,0x3c0abc17,0x3c3bdaf9,0x3c1cc10e,0x3c01e7be,0x3b90b3d3,0x3bb485ec,0x3c181fca,0x3c0d53e2, -0x398a83fa,0x3c5b030d,0x3c528d62,0x3c62f39d,0x3c688f5c,0x3c6fab6a,0x3c6825d1,0x3c50d75e,0x3c47fabc,0x3c48ad41,0x3c582b3a,0x3c6cec8a,0x3c7637c1,0x3c72f132,0x3c77481e,0x3c5b91e7,0x3c0afdc3,0x3c303dac,0x3c48c7e5,0x3c3a352c,0x3c0b1410,0x3c04c63d,0x3bbdf333,0x3b7ba733,0x3b594fc4, -0x3b8ff4b8,0x3b9ee61a,0x3be15535,0x3bba4ac4,0x3c156a14,0x3ba76a37,0x3b9d6c8e,0x3b5cb8e9,0x3bbf52ba,0x3bf18cf8,0x3bf5248f,0x3c02d34d,0x3c3fc571,0x3c73c526,0x3c7b603d,0x3c860613,0x3c8d4587,0x3c860e4b,0x3c67e01e,0x3c5de9a5,0x3c65001c,0x3c80d4c7,0x3c8dbfde,0x3c9bf676,0x3c9b74c8, -0x3ca1eb64,0x3c87a1e9,0x3bf050bb,0x3c4b5b6a,0x3c2a29a8,0x3c264756,0x3c1c1f9d,0x3c5091f5,0x3c2f87ee,0x3b8fbceb,0x3a3997d4,0x3aa9bb0b,0x3b8b728f,0x3bcdb0d6,0x3be65176,0x3ba6a693,0x3b81ce51,0x3a804e15,0x3b9ad1ab,0x3bca9120,0x3bde528c,0x3c27dfdf,0x3c183a88,0x3c6855bc,0x3c932cdf, -0x3c9d8780,0x3cae3f28,0x3cb93329,0x3cb05704,0x3c83da42,0x3c69da2a,0x3c71ea84,0x3c99d238,0x3cbc0db4,0x3cbddf62,0x3cb7e0aa,0x3cafd4e6,0x3c70a203,0x3abd6a89,0x3bfa5356,0x3cdee1e2,0x3c5ed93b,0x3ab93945,0xbb9a16b3,0xbc332456,0xba5a663d,0x3bed04c0,0x3c2c451d,0x3c489f30,0x3bdb1407, -0xba8b0f52,0x3a84d6ff,0x3b32bf50,0x3bc24dfa,0x3bfd7182,0x3bfa2a03,0x3bc8ba23,0x3bf5ab81,0x3b8e39f8,0x3bfbe868,0x3c72878b,0x3c489055,0x3c50b96c,0x3c169df4,0x3c080a99,0x3bd68fe8,0x3c9f9a3f,0x3ca52cba,0x3c1c4c52,0x3c4952f3,0x3c8ccb4e,0x3cdc4b8d,0x3cd0cae0,0x3ce189ac,0x3d07e6c1, -0x3cec9c0e,0xbbaa4a50,0xbc08215e,0x3c859646,0x3c9a49eb,0x3bc2a1fc,0x3bc06485,0x3ae70a17,0xbb461754,0x3a6b1c93,0x3b86c053,0x3bd7e7c9,0x3b416309,0x3aeff0b8,0x3b76838d,0x3bbac0ec,0x3c0d4288,0x3bf71723,0x3bd273f0,0x3b6e1f07,0x3bcb2f30,0x3c8d7fdc,0x3ca01f6f,0x3caca662,0x3c81465e, -0x3c4afbf2,0x3c26d41e,0x3bee7176,0x3ba65f3d,0xbab81f58,0x3c11782d,0x3bae5112,0xbc5671ec,0xbb4ab7c4,0xbb0b2879,0xbc1a47d6,0xbbad3f71,0x39960a96,0xba414c7b,0xbb904ad6,0xbb1feb4c,0x3b09ff42,0x3a330da7,0xbb70e475,0x3b5405af,0x3a8ed7ca,0xb982e2a9,0x3ac58268,0x3b0e5353,0x3b3b07a2, -0x3b1dcae6,0x3b13a8d0,0x3bac1a44,0x3ad8e33f,0x3b5ec73e,0x3b930277,0x3ba99364,0x3c1bec0b,0x3bfe4d38,0x3b9b31cc,0x3c633375,0x3ca150a1,0x3cba1bb5,0x3cd246ef,0x3cc876f5,0x3c83180e,0x3cbd608d,0x3d088827,0x3d2ee4b0,0x3d2418a4,0x3d063877,0x3cefd0a3,0x3bffce6c,0x3c850caf,0xbb32528b, -0x3a9b7f33,0x3bb49ac2,0xbb1a19d0,0x39ed5390,0xba57205d,0x3b4845da,0x3a8bb873,0x3b06a5ac,0x3b3198eb,0x3ac1123d,0x3ad52e3a,0x3b6b2d41,0x3b938d08,0x3bc62504,0x3bc350c6,0x3bce406c,0x3b9808d5,0x3b9a7522,0x3c32c90d,0x3c6f2eef,0x3c83ea4c,0x3c6e4ba5,0x3c3d9ce3,0x3be59935,0x3c0581d2, -0x3ba701c4,0xbb0bd5fe,0xba564789,0x3a3bc687,0x3b88e62b,0x3cc6f9d8,0x3d15f0e6,0x3d38cc01,0x3cdb2e0b,0x3cd4d52e,0x3bd3101e,0xbc933d51,0xbc79c1e5,0xbc7b9797,0xbc4ff6f3,0xbc120588,0xbbb991f1,0xbbb04c42,0xbb6b9ef9,0xbb63c491,0xbb07531f,0x39c1ab3e,0x3b9d0e00,0x3b3e1eec,0x3b432562, -0x3b77ee86,0x3bc576ef,0x3b9f325e,0x3b89adaf,0x3bbe942e,0x3bab9c03,0x3bbe4e04,0x3bb418c5,0x3be33898,0x3c261717,0x3c3e418e,0x3c490947,0x3c5c2841,0x3c521ca7,0x3c5fbe93,0x3c6c178a,0x3c800167,0x3c85e2e7,0x3c9a25cc,0x3cbc9961,0xbbf83365,0xbc3d95c5,0xbca9a8cf,0xbc326918,0xbbe3a343, -0x394ddc4d,0x3a867d0c,0xbb4753fe,0xbb1ec223,0xbb08982e,0xb96fdbdb,0x3b725e2d,0x3bb2f42a,0x3ba115af,0x3b777c3b,0x3b6498c9,0x3b73c10b,0x3ae5ebd2,0x3ae2e211,0x3acab93d,0x3be8fd9f,0x3c18d7ff,0x3bfdf236,0x3c084cdb,0x3bd2a353,0x3ba114c6,0x3b13c1a3,0xba0ee978,0xbb0cd2cf,0xbb7f45aa, -0x397c371a,0x3c354fb4,0x3c38902c,0x3c168a4c,0x3b2b0ed1,0xbb8ebe23,0xbae52538,0xbb258f29,0xba3bdcff,0x3ac0c3a8,0x3ae72673,0x3b1200f4,0x3b15867d,0x3b762d77,0x3b952adf,0x3bcccd82,0x3bfc37ad,0x3bd0e9d5,0x3b829d50,0x3b7739a9,0x3b1e0d00,0x3b041591,0x3a5235b0,0x3a0bc3c5,0x39b6e43c, -0x3a991176,0x3a484a4d,0xba4d0086,0xbac30b8e,0xbb253c83,0xbb67687e,0xbba1efc9,0xbb31a9bd,0xba514d35,0x3aa3ee1e,0x3b0fcdfe,0x3b10b6a3,0x3b069e55,0xba7a85ac,0xbb2c9235,0xbb76e9c6,0xbb403008,0xb92d387f,0x3aaddacb,0xbb93a9fb,0x3a8c9392,0x3a0e4396,0x39ff2db3,0x3b3d2cb0,0x3b4caa9f, -0x3b7918e9,0x3b76f2f3,0x3b2370fc,0x3b6c3482,0x3b53adb8,0x3b418160,0x37315b9a,0xba95d4e4,0xb9b46c02,0xbb1d0f16,0xbbd35c0f,0xbbaad687,0xbbee4896,0xbbfad85b,0xbc0b9b2c,0xbc1c100f,0xbc2891f0,0xbc3d2ae0,0xbc20e479,0xbc0c6e13,0xbbed809a,0xbbbf13c2,0xbb87df5a,0xbb0b985a,0xbaae365e, -0xba226c6d,0xb9dbd1cd,0xb91c4a78,0xbb041be7,0xba5e9020,0xbb038bd1,0xbbb4f47b,0xbc40711f,0x3905af0b,0xbb90b625,0xbc229698,0xbc2e60da,0xbc34c97a,0xbc3bea45,0xbc4644a9,0xbc5086db,0xbc560a19,0xbba246f0,0xba5598b8,0xbc5ac393,0xbbcba451,0xbb464bd0,0xbb4c4b54,0xbb80b10b,0xbb861cc9, -0xbb976f9c,0xbba0e60d,0xbbab43bd,0xbbbfe583,0xbba666aa,0xbb969223,0xbb83afca,0xbb61a0df,0xbb422f74,0xbb1c2e2f,0xbb255c2e,0xbb1c5835,0xbb0c8c95,0xbaf25ac3,0xbb5b7395,0xbbaa63d3,0xbb71ce67,0xbc072cd1,0x3a43515a,0x3c1d3f15,0x3c96b3e3,0xbb60990a,0x3bf28116,0x3c87bcc0,0x3c90af49, -0x3c91c472,0x3c88ceda,0x3c9691fb,0x3c97423f,0x3c917b2b,0x3bffb397,0xbaf8450a,0x3c9f29da,0x3c14675c,0x3aa3a137,0xbbfd2c94,0xbb915e93,0xbbb84b5b,0xbbbc011c,0xbbbaffe1,0xbbbbe6c1,0xbbbc3cf8,0xbbbde7af,0xbbc0ed20,0xbbc1d12c,0xbbcdbbd1,0xbbd08daa,0xbbd0a185,0xbbc7d04a,0xbbb6a392, -0xbb8e2ba5,0xbb96cfda,0xbb8ba85b,0xbbd903aa,0x3c52264b,0xbb55f1bc,0x3b44fcae,0x3b1d9d86,0xbaea3579,0xba2430c9,0xbb2e16eb,0xbabd221d,0x3ad6f7d2,0xb9aae7d9,0xb9b6cfb1,0xbab4ac82,0x3b1991b0,0x3a99fa25,0x3aa96c49,0x397586ee,0x3c44cef9,0xbb9dd417,0xbbcf2d66,0xbbdf19d0,0xbc03439b, -0xbc010ba4,0xbc02b20e,0xbc02f86b,0xbc00dea4,0xbc009222,0xbbfa52db,0xbc089a31,0xbc0f4803,0xbc0b5c91,0xbc06ca2e,0xbbe07864,0xbb807ddd,0xbb82c6a0,0xbb60a0c6,0xbba3bcfb,0x3b1cb231,0xb9ad21db,0x3b95ed97,0x3a825b8a,0x3a96d356,0x39ec981f,0x3b8e84c7,0x3b189b50,0x3b8b8f49,0x3aad88dd, -0x3bccf555,0xbab37d18,0x3b47798c,0x39acec17,0x3b6fbc71,0x3b319fcb,0x3b9a4041,0xba9b749c,0xbc07a4fb,0xbbfa4463,0xbc28a310,0xbc1f6457,0xbc25c7b2,0xbc23526b,0xbc21c145,0xbc27bc1e,0xbc25ff4b,0xbc4a5e6a,0xbc527232,0xbc4a8eb3,0xbc32f494,0xbc01a812,0xbb46c844,0xbafc393f,0xbb800a5c, -0xbb26fcf7,0x3baa91f6,0x3b1315eb,0x3ba54f5c,0x39c79484,0xbab50e5e,0x390e5d47,0x3b0fcb3b,0x3ba8fda0,0x3ba1270a,0x3bcf8eb4,0x3b356b67,0xbaedb05a,0x3aa76288,0x3a0158ef,0x3bf8927f,0x3b4852b8,0x3c17cf1e,0x3aaa8006,0xbc103c2c,0xbc22bbfc,0xbc72221c,0xbc69990f,0xbc6d6f71,0xbc71ec04, -0xbc622a17,0xbc53addb,0xbc37bd61,0xbc57ff16,0xbc77bea7,0xbc6d9983,0xbc569872,0xbc1310c4,0xbb269cc9,0xb9ca3545,0xbbf91927,0xbb1ccb30,0x39d9036b,0xbbde5000,0xbbd5ca3b,0x3a012454,0x3b71416c,0x3bf6e507,0x3c3ba8c6,0x3bd4f5ac,0xba4db82a,0xb940e6bf,0x3ad8391f,0x3bdd3c0e,0x3bd4c799, -0x3b79cdb0,0x3b9fe0ec,0xbb0f6a3f,0x3ad9cea6,0xbb6b1926,0xbc4ba2d4,0xbbcb5224,0xbbce5401,0xbb0385e2,0xbae6d4fe,0xbabb3f87,0xbaaf6b47,0xbc005199,0xbca9ed79,0xbcb112c9,0xbcacd64e,0xbc6c1747,0xbc4f02cc,0xbc0373ee,0x3ad12af8,0xba8a5b84,0xbc96611c,0xbcc788e7,0x3c359d03,0x3c6c70bf, -0xbb89dd6c,0x3b38b931,0x3a1dbe39,0xbb6b3488,0xb93dd4c3,0x3b45f9e9,0x3bd29868,0x3b46e36c,0x3ad91b77,0x3b21bd9a,0x3b3f616c,0x3badab57,0x3b8dbfa5,0x3b8ff0c1,0x3bf745c3,0x390a04cc,0xbb6d70cf,0xbbb075ae,0xbc77dddd,0xbc127fd9,0xbb69746f,0x3b2d2a60,0x3ba3a5a7,0x3b59a253,0xbbcc604b, -0x3b4da975,0xba8fd9c7,0xbc91a404,0xbc40761b,0xbc15c4fb,0xbc147e15,0xbc36dc87,0xbba297e3,0xbbc394df,0xbad1c42c,0xbb4803e1,0x3b96e63f,0x3abcfba1,0xba1fb8d9,0x3b0fb0e5,0x3a670f38,0xba965729,0x3a5d776f,0x39c6c09a,0x3ac62b61,0x3b11f944,0x3a0e7056,0x388dd905,0xb7f2a24b,0xbb64054a, -0xbac525bb,0xbb6f7976,0xbadb38ac,0x3b241a62,0xba2e4060,0xbc10924e,0xbc917ed6,0xbcb383fb,0xbcac1236,0xbc80dc85,0xbc3a383e,0xbc2de284,0xbc7728fc,0xbca8bacb,0xbcd47a54,0xbccf567b,0xbc936276,0xbbf95cac,0xbc320d3d,0x3aadb66c,0x3b3a3ba0,0x3a1d0610,0xb92322ac,0xbb37a924,0xbaebf94c, -0xba61ac60,0xb99a76fe,0x3a8cda45,0x3afe48d8,0x39bb1567,0x3a72da8a,0x3b036923,0x3b3194f6,0x3b998ae2,0x3b1d31a2,0x3afe60fc,0x3bb831d8,0x3a018f69,0xbb6d5508,0xbb9e0d1a,0xbbd332f7,0xbbc2bd8a,0xbb85f9f5,0xbad54c83,0xbaeed38c,0xbba52d14,0xbc41c7cd,0xbc09ad6b,0xbc1c1ad4,0xbc523294, -0xbc89e0df,0xbcad0cf4,0xbcdba5ed,0xbc852178,0xbcc35578,0xbc0642ed,0x3a087915,0xbc4cb8c5,0xbc92eb59,0xbc36a592,0xbc13507d,0xbbf73c9d,0xbb91f83a,0xbbad607f,0xbb8f48dc,0xbb71315f,0xba8f9fce,0x3b545a43,0x3b0a8f2a,0x3b14da76,0x3a9ec046,0x3b392043,0x3bacf458,0xbab58a6e,0x3ab5cd89, -0x3b982b01,0x3b9095df,0x3b755f77,0x391543b8,0xbbb0e375,0xbbc5c9d5,0xbc184cf2,0xbc7e5bf5,0xbc694ba8,0xbc80b924,0xbca49fbf,0xbccaae3a,0xbcd60bc9,0xbcd4180a,0xbcb6f56b,0xbccd3046,0xbcb63563,0xbc458cef,0xbc4d75d5,0xbbaa53b4,0xbb6281c2,0xbb91ebb0,0xbbd48347,0xbbf66cf7,0xbbc0d67b, -0xbb749b26,0x3a307ff1,0x3b0aa15e,0x3b30639a,0x3a56c771,0x39eadb79,0x39914b7b,0x3af9b5c0,0x3b0a450d,0x3b279dea,0x3acce036,0xb97fb97e,0xbb00a69b,0xbb497b16,0xbb8aab51,0xbb9c6604,0xbbc83c29,0xbbac7a75,0xbb02c8af,0xbbc39bde,0xbc4139f2,0xbca75dd0,0xbc5c114a,0xbc415578,0xbc81c9a0, -0xbc9e2230,0xbc73dc76,0xbc42d07e,0xbbc47ed4,0xbbe75f7e,0xbb1bcfb1,0xbb3260b0,0xbad687cb,0xba7700f9,0x3b42ec51,0x3b300e1b,0x3bd9afe2,0x3b110ab5,0x3b948fc1,0x3b14e65d,0x3b17f149,0x395d1aaa,0xb95c854b,0xbaaedce8,0xbacc2508,0xbbab76e7,0xbbbbd480,0xbb5ab02e,0xbb114415,0xbb3eb559, -0xbb83a18f,0xbba31b22,0xbbd651fb,0xbc07cc69,0xbc1f0e96,0xbc2ae1b1,0xbc1e06e7,0xbc2808f8,0xbc3c4073,0xbc5aea99,0xbc6e390b,0xbc5f674e,0xbbed3bd1,0xbbc7fc52,0x3b5661d0,0xbb7493a2,0xb9c468b6,0x392a4ba2,0xbac8b1bc,0xb9d64c5d,0xbb3ae08d,0xbb5b51ff,0xbabecbe6,0xbb6ba288,0xbb787028, -0xbb5ccec0,0xbb1f508a,0xbb60ecd4,0xbbbefb69,0xbbc805d2,0xbb852821,0xbbe8bbd2,0xbbd7b05b,0xbc03e6b2,0xbc1129a8,0xbc1e681f,0xbc267dc0,0xbc2e531f,0xbc3cadc2,0xbc4d32a9,0xbc638533,0xbc776499,0xbc8a691c,0xbc95f409,0xbc8411ee,0xbc5e922d,0xbc3b3442,0xbc17fb1f,0xbc1ab644,0xbc25e958, -0xbbd6b2a2,0xbafdc3f1,0x3b3eabc6,0xbc028536,0xbb04fb55,0x3b5a6777,0x3b6ef07f,0x3b80742a,0x3b56c035,0x3b8af141,0x3b9403d9,0x3b956564,0xbb2ab9ab,0xbc02e62b,0x3b342c8e,0xbb56cb1f,0xbbf779e0,0xbc1d1e48,0xbc17a4cd,0xbc1fc52f,0xbc2205a0,0xbc257c5f,0xbc29d2fb,0xbc2d5cf5,0xbc365463, -0xbc3ccd21,0xbc41d13f,0xbc484771,0xbc4c2eb2,0xbc5aaee8,0xbc478c17,0xbc3f6b97,0xbc35144a,0xbc2cd654,0xbc4827aa,0x3c0c14cb,0x3bf7aabe,0x3c38f0c9,0xb9973683,0xbc01d5d2,0xbc34a012,0x3b67c25b,0xbbc8f8d5,0xbc3954d9,0xbc3bdc21,0xbc371a29,0xbc1ee2cd,0xbc31cd01,0xbc33af5d,0xbc3698d1, -0xbbd42008,0x3b0d4a03,0xbc36c0a1,0xbbdcaa05,0xb9cbfe2c,0x3c30d58d,0x3bf71614,0x3c0a1a4a,0x3c0d10a4,0x3c0e9e24,0x3c0dbc8b,0x3c086113,0x3c072a70,0x3c080754,0x3c0ecfa7,0x3c0aa3b2,0x3c0b2b62,0x3c0fbec6,0x3c07aff7,0x3c00ff17,0x3bddaa3e,0x3c037a6b,0x3c096eac,0x3c05716f,0xbc07c10e, -0x3bd5da20,0x3a0a8aed,0x386827e0,0x3b68f0f7,0x3b0baf5e,0x3bda1a1d,0x3bc55408,0x3b00008d,0x3bd0b2d3,0x3bca0d34,0x3b598ca6,0x39eb7a9f,0x3afe7fba,0x3b5c63c6,0x3b939fde,0xbbc35bf0,0x3bfbea86,0x3c1bde66,0x3c14a11a,0x3c2b87bc,0x3c326ddf,0x3c335f1f,0x3c221dd2,0x3c1de7a2,0x3c1d41b4, -0x3c2fcd9b,0x3c27288a,0x3c1f4e5f,0x3c1f1dd5,0x3c002f90,0x3bdb617c,0x3b999429,0x3be23157,0x3c374b23,0x3bf48e3f,0xb9b6ad73,0x3b0ebc5d,0xb86a6330,0x39f8133d,0x3a4cfbdb,0x3aef00b1,0x3ac17848,0x3bceca5c,0x3ab8e118,0x3c1c610c,0x3b4e7613,0x3b497a89,0xb99a6e20,0x3b27f34f,0x3b95d45b, -0x3b53ca63,0x3a1ad559,0x3ba843ca,0x3c35462f,0x3c20f42e,0x3c43d085,0x3c4cc540,0x3c4aa871,0x3c25ffc8,0x3c28550b,0x3c29e6e7,0x3c57f763,0x3c3a3dd3,0x3c38b44f,0x3c4a209d,0x3c0b503c,0x3bd4f0cc,0x3b56dd73,0x3bf7f39a,0x3c17a2f1,0x3b99a29d,0x38b4eacb,0x3bc5f02f,0x3bb7596b,0x3b0bfa03, -0x3aaa3ba0,0x3a40fba9,0x3b81ab37,0x3bb05a2b,0x3bd57ec4,0x3bd01d48,0x3ba55e19,0x3a8a1646,0x3b6b2db9,0x3bc16655,0x3ba17609,0x3c057bbb,0x3b093111,0x3bcf4f2a,0x3c42b76d,0x3c296acc,0x3c67053b,0x3c7c5d42,0x3c7d1b3f,0x3c3d42fe,0x3c390bed,0x3c46c5a6,0x3c8dfaa5,0x3c77c69c,0x3c4575c5, -0x3c4283f0,0x3b86d575,0x39d9c45a,0xbb2d8722,0x3b2f9b10,0x3cd3203e,0x3be5d53d,0xbc169ee6,0xbc3b5bd2,0xbc64f612,0xbb991f94,0x3b56b4d2,0x3bbcd8c5,0x3c423752,0x3c0a719f,0x3a1e369d,0x39ea2a80,0x3b13a08f,0x3bdec8fd,0x3bc6e3dc,0x3bca55fb,0x3b719a4d,0x3b9d6384,0xbb24f5b7,0x3a7dbdc1, -0x3c65f336,0x3c4bb457,0x3c899bba,0x3c24494c,0x3c2e1c88,0x3c5a51c2,0x3c9d5a82,0x3c896530,0x3c005b5b,0x3c0609fd,0x3c3a7198,0x3c9e7b5e,0x3c94e165,0x3ca00690,0x3cbeb1e1,0x3cb10bc8,0x39e3c3b5,0xbc865ee5,0x3c29e247,0x3c9f5eda,0x3afd99d8,0x3bb86220,0x3b6a2e8b,0xbafe826b,0x3a91dae7, -0x3b675464,0x3bf04c8b,0x3b874b19,0x3b29490f,0x3b8793ab,0x3bdb847d,0x3c0b336a,0x3b6f00f4,0x3b8d1c6d,0x3a33954f,0x3b64a78b,0x3c54268a,0x3c42772e,0x3c724e8e,0x3c454064,0x3c2224d5,0x3be15ab7,0x3b885acb,0x3b365384,0xbaba2d6b,0x3c1ed9ec,0x3b6f38d5,0xbc8c4abc,0xbc287db8,0xbbe5ac0a, -0xbbc91b0a,0xbb235cc5,0x3adb616d,0xbb8df6a1,0xbc021ab4,0xbb7e3ce9,0xb9810e6c,0x3b762a41,0xb7ebd0ee,0x3b4450d2,0x3b034327,0x3aa13591,0x3afa19fe,0x3b03e5cd,0x3b3da4e6,0x3b3105b7,0x3a0719a7,0x3b0fcbce,0xbb1fdae6,0x39fab2af,0xba88b945,0x3aa6c40a,0x3bf859a0,0x3b9363c6,0x3b8eb55a, -0x3c0777b7,0x3c405242,0x3c64adec,0x3ca337b5,0x3cb49e0d,0x3c74dd60,0x3cc19b3d,0x3cda3360,0x3cc1caef,0x3c9ac3d5,0x3c5cdfb0,0x3c897ae4,0x3bbcd75c,0x3bf0d990,0x3aefa7b1,0x3b5aa271,0x3bc6f6f0,0xba2f7d28,0x3ae053bf,0xb94d85dc,0xb933efc4,0xb885ce3e,0x3a4923ba,0x3ad7330a,0x3a97803f, -0x3ab9bd0a,0x3b0b9765,0x3b6d0817,0x3b88b763,0x3b2b1ab7,0x3b5d9565,0xb721ff18,0x3b46bfcb,0x3c0e59bb,0x3c1de6f8,0x3c322a39,0x3c06dc76,0x3bb2371c,0x3b3437c3,0x3ad321ea,0xbb4dd14c,0xbc40d649,0xbbf9a4fd,0xbb94e761,0x3b787767,0x3c219026,0x3c881633,0x3cc65331,0x3c11b22b,0x3c16793f, -0xbbe23061,0xbca18e3d,0xbc8710c8,0xbc9ac355,0xbc7059c6,0xbc1d1587,0xbbd99d64,0xbba55755,0xbb141eee,0xbb436070,0xbb276664,0xba0e8dc2,0x3b5fe790,0x3b0b5379,0x3b0a1719,0x3adbefc9,0x3b6e0cb9,0x3a35c402,0x3b403e95,0x3b5b3522,0x3b361f38,0x3be5eda1,0x3b9df61e,0x3b8bcb1b,0x3b5c10df, -0x3b366dcd,0x3adcb91a,0x3a5e98c5,0x3aaaa5f7,0x3b592bfc,0x3c0c614e,0x3bc948e3,0x3b9f073c,0x3c04b8e3,0x3bf908f5,0xbbf232de,0xbc7b6255,0xbcb989a4,0xbc7067df,0xbc132d35,0xbbbaa866,0xbb864df6,0xbbf44cef,0xbbc73b95,0xbba81331,0xbb0422a8,0xb9ceb051,0x3add2327,0x3b5f43b3,0x3b0584de, -0x3abc4a84,0x3a92e686,0x3b14bc1c,0x3b5dced3,0x3b318af9,0x3bd6d275,0x3bf8fbe4,0x3bf4b934,0x3ba7f89e,0x3b613f7d,0x3adf225d,0x3a3b6d5b,0x39a65a84,0x39223a64,0x39f5abf9,0xb8412b97,0xb9855863,0x3ab4bde5,0x3aa46bf8,0xba9939cc,0xbbd3d2a1,0xbbbbe7dd,0xbc21fb27,0xbc31a6ad,0xbc05687d, -0xbc0bd13d,0xbbcffd59,0xbb92c157,0xbafb2878,0xba838da3,0x3b076dd8,0x3b1aa929,0x3b84bdfb,0x3ae0da21,0x3b4b58df,0x3a56f930,0x3a45c149,0xba996c9a,0xbae599d5,0xbb6817eb,0xba6056fb,0x3b3d8b89,0x3b2395db,0x3b8cfc6e,0x3b422639,0x3b031768,0x3a18c22d,0x3a8a4850,0x3a89668e,0x3a68d13e, -0x3b1d87d2,0x3b87ef8d,0x3bc54c68,0x3b19ccf5,0xba99c346,0xbb5883f6,0xbbb8f967,0xbb07952d,0xbad0b513,0xbbe17f39,0xb9ead940,0xbb0384a3,0xbad4c35a,0x3a4b6a59,0x3a887d70,0x3b08ea8c,0x3aa5f05e,0xba980884,0x3a3d2936,0x3ac23ae3,0x3a6e1e91,0xbaead3ff,0xbac59c0a,0xba6469a1,0xba86d9bf, -0xbbc46fb4,0xbaa7649c,0xbb369114,0xbb6f9679,0xbb898b0e,0xbba7062d,0xbbb5fd72,0xbbcc6b02,0xbba43cff,0xbb8c9eb4,0xbb7eff96,0xbb78a843,0xbb879675,0xbb814cb1,0xbb709b91,0xbb43a8df,0xbb34cfb8,0xbb25c6ca,0xbaf26272,0xb9c574b3,0xbbceeff7,0xbc284bf6,0xbc4e6aa2,0xbb629ec7,0xbc16f958, -0xbc45574a,0xbc4f342f,0xbc525b66,0xbc4ac277,0xbc5c9d45,0xbc683211,0xbc68b7e5,0xbc1eddef,0xbb73823b,0xbc6a9e4d,0xbc264ff3,0xbbbc3e25,0xb9963d3e,0xbb014b74,0xbae4e334,0xbb07d70b,0xbb085e8a,0xbb0d9807,0xbb2162f8,0xbb17ed95,0xbb15f36b,0xbb0a0676,0xbafbd68b,0xbadec50b,0xbadd7932, -0xbadb1ee3,0xbae0f7a9,0xbad87494,0xbad14b76,0xbaef261f,0xb9cd343b,0x38f261c2,0xbb713ccb,0x3c0b0cbc,0x3c5c9877,0x3c3b9829,0x3ba66fe9,0x3c472097,0x3c4da20f,0x3c5a9ffe,0x3c5a1063,0x3c3a550d,0x3c576a56,0x3c54cbe9,0x3c3c3a07,0x3c4ad16a,0x3bccb428,0x3c42b4c8,0x3c4f73b7,0x3c0d7fce, -0xbb54750b,0xb9a2fd31,0xba436631,0xba2f6769,0xba220dc8,0xba0c09c7,0xb9b7c5ae,0xba196771,0xba340b8f,0xba064664,0xba4f0547,0xba42e7a0,0xba1fa471,0xb998aa1b,0xb949b5fd,0xb9d10610,0xb9635062,0xba9a36f5,0xba2c1f4a,0x3c51aeac,0x3aa6cb6d,0x3bd6dd5c,0x3baeabc9,0x3b21e1fa,0x3b3a816f, -0x3ab0325d,0x3b719435,0x3be4382a,0x3bb7e603,0x3b87b96d,0x3b723e1b,0x3ba57be7,0x3b8048d9,0x3bcca6e1,0x3b6858da,0x3c3c8a8e,0x3a25d0b6,0xbae3d6c4,0xb9d24de0,0xba76fd74,0xba64ac38,0xba947fab,0xba6846be,0xbaa541e3,0xba81c7aa,0x3910eeb7,0xba0e1067,0xb9efbbbc,0xb60c29ae,0x3a0c51dd, -0x3a07ed05,0xb9cb69c1,0x39d67ae4,0xba92e7c8,0xb8e55d51,0x3bf76ebe,0x3b64be24,0x3bb61c40,0x3b67b5d2,0x3b6cbb0d,0x3b279124,0x3bc484a8,0x3b485f3e,0x3be8bf67,0x3b676931,0x3c098fd2,0x3af205cb,0x3bb49570,0x3b4cd317,0x3bb3bbd8,0x3b98a3a3,0x3bf31124,0x3afe35fc,0xbb5a8a50,0xba4430bb, -0xba9de3e2,0xba223602,0xba0764e2,0x39eee0aa,0xba3ed2fe,0xba96ad83,0x39f2bd70,0xbabbe0e6,0xba6e0c68,0xb932212a,0x3aec1bd1,0x3ac6e292,0xbaa9e24f,0x3ad87ed2,0xbb843c17,0xb9531f2c,0x3bd1a68a,0x3b5a0eb1,0x3b8fd2b5,0x3b0a66d9,0x390bff8d,0xba16291e,0x3ae4720f,0x3b8ee68f,0x3b2bd3f6, -0x3bdb6e6e,0x3b89d56c,0xbaff65a6,0x3aa85e4d,0x3aaf3f5f,0x3c185749,0x3b408c46,0x3c075ea9,0x3ac3c7b2,0xbb8a82b5,0xba434777,0xbac4ae91,0xba5f265c,0xbab48f95,0xbaabb3b0,0xbb01400d,0xba56ff42,0x3b4e7b64,0x3ab4c4b8,0x3a88ce4a,0x3af49da7,0x3b5c1bb9,0x3b04d4f1,0xbb3e076c,0x3ab0a424, -0x3ab9026b,0x3c0e5fc4,0x3c1728a6,0xbab0784a,0xbbcabd67,0x3a872371,0x3b7766b3,0x3bb17cfa,0x3c454c6b,0x3c191b00,0x3ad5e205,0xb85dc968,0x3ad33637,0x3c0454f8,0x3bc106ba,0x3b5a179e,0x3bad1661,0xb5c946c9,0x3ba4d804,0x3b491419,0xbb7a457e,0xbaaae4b9,0xbb90b1ec,0x3a082af4,0x3a760ac5, -0x3aa9f2e3,0xbb568957,0xbc2179af,0xbc865d35,0xbc7513da,0xbc1d0a8f,0x3b1d5da0,0x3b89af49,0x3ba68239,0x3bb70653,0x3bb0c51f,0xbc860570,0xbccf4c53,0x3c754cfa,0x3c987c54,0xba14b417,0x3bc9d13c,0x3b2686da,0xba32d021,0x39b4af05,0x3b3c9bb2,0x3be45e67,0x3b8e8a31,0x3b462ce4,0x3b2bb097, -0x3b9e7dce,0x3bed7e92,0x3b9f443f,0x3b81c210,0x3be10198,0x3b6e6eef,0x3b322dd5,0x3bb0189b,0x3b18359f,0x3b21f7a8,0x3b7420b1,0x3bd6205b,0x3bc55f5b,0x3b86f91a,0xbb459549,0x3bf28a06,0x3ba84f14,0xbbe4638b,0xbb188e33,0xbaed8bd2,0xbb9ea869,0xbbb10388,0x3b0ef6fb,0xbbb590dc,0xbb6f0edc, -0xbbad9672,0x3b580934,0x3b7e0da2,0x3b75dcbe,0x3b008b19,0x3b2d872a,0x3a2ded5f,0x3ae23752,0x3a79ba34,0x3af18aff,0x3b2ca85b,0x3a411674,0xba4006da,0xba573cce,0xbb21857d,0x3ab4e9c8,0xbadcdb22,0xbb644569,0x3a7cdc46,0x3a9606ea,0xbb8e7a01,0xbc00abf5,0xbc023239,0xbba76af6,0xbb2c377f, -0xbb9175a5,0xbb115e09,0xbb0ef84c,0x3a444c47,0x3ad8a6fb,0x3b53c264,0x3c1b0f48,0x3bb0e678,0x3b952f04,0x3bf216ff,0x3bcf0631,0x3b82bff1,0x3a454cc5,0x37e701fa,0xba8d4dcb,0xbb2480dc,0xba2cd0a1,0x398a5a57,0x3ad95f75,0x3a6d82eb,0x3a9e2d40,0x3b00a58b,0x3b3604cd,0x3b8d8bb2,0x3aee2035, -0x3a8163b5,0x3b92529d,0x3ac45dba,0xb962e230,0x3aa951eb,0x3ae016a8,0x3aab62e6,0x3aa02498,0x3b3ea311,0x3b48d861,0x3a5a081d,0xbb751423,0x3987a314,0xba155ca5,0xbb9eef0f,0x3ad355df,0x3ba6d05f,0x3bfdc3ef,0x3be9262d,0xba87ded7,0x3b10f616,0x3a96b29e,0xbc0f39ae,0xbc827370,0xbc3bb1cb, -0xbc163a16,0xbbb2ff67,0xbaea3b46,0xbb0de404,0xbac07ec2,0xbb363b57,0xba8828db,0x3b2b3eef,0x3afa2079,0x3af7f822,0xb9b478c6,0x3b505d3e,0x3bd8773a,0x3ac95ec9,0x39648194,0x3b1509af,0x3b82ec58,0x3b8dce9a,0x3b73eeee,0x3b02f61b,0x3a835016,0x39e27992,0xb9a7f793,0xbb9f7a75,0xbba5c018, -0xbb08d725,0xbb17d3ee,0xbaeeb100,0xbb1d43e7,0x3aeb8a00,0xbc3e74c3,0xbc13dffd,0xbc004939,0xbbe613c9,0xbaecb4f3,0xbb4614d2,0xbbc43b76,0xbbf61e10,0xbc0b92d7,0xbbef98ae,0xbbb0a679,0xbb2dc7c5,0xba5cef29,0x3af280d7,0x3a678035,0x3b015c98,0x3b1301c8,0x3b74adf7,0x3b5038da,0x3b4277a4, -0x3ab6399f,0x3ab3f0d3,0x3b4276ed,0x3b1298e1,0x3afef1c6,0xb7d6f9be,0xbae72ac1,0xbb67d9d1,0xbb989ca1,0xbb9c0255,0xbc0d5091,0xbc7f8c1b,0xbc80e4e3,0xbc59ee1b,0xbc2a00b8,0xbc1dda36,0xbc68061e,0xbc5a4f55,0xbbf54959,0xbc0feb9f,0xbbc84a8f,0xbbb8e3e7,0xbb848459,0xbb408eff,0x39cec980, -0x396d29c3,0x3b907913,0x3a903e49,0x3b61000c,0x3b2befdc,0x3b0cfa51,0x3a11c571,0x34933253,0x37c2a8df,0x3aa02760,0xba29e255,0xba31b8fd,0x3aeba305,0x3b4e1eab,0x3b06a043,0x3a72974b,0xb873f2a2,0xba1ce7c8,0xba62defd,0xbab848a0,0xbaa2bd26,0xb9da68c9,0x39959c65,0xbb057e64,0xbbb1357c, -0xbc12fb61,0xbc30ab11,0xbbacd7eb,0xbb8c3217,0x3a87f36e,0xbb33991e,0x39a30822,0x3998505c,0xba360bf4,0x39d90e91,0xba8b456d,0xb959e241,0x3b053822,0x3a93422a,0x3a3c9ca3,0x3b052d09,0x3ae01deb,0x3900adec,0xba1798aa,0xbb0c9a39,0xba6dda7e,0xbb93d3a1,0xbb99cc1f,0xbba6e363,0xbbb3e2c9, -0xbbb9a8fe,0xbbbaaf98,0xbbbad295,0xbbdb392f,0xbbf8b481,0xbc08381d,0xbc139b33,0xbc234da2,0xbc2d9eb4,0xbc24e9b8,0xbc0cc4be,0xbbf1b720,0xbbc211fa,0xbba2b5f6,0xbbbbd16c,0xba26ce67,0x3adfd9fd,0x396ce129,0xbabcc2a9,0x3b0001ae,0x3af9ad14,0x3b18fd83,0x3b237923,0x3acd3415,0x3b1e08b2, -0x3b276165,0x3b1a11cd,0x3b3dd513,0xb9f33ae6,0x3a8c871a,0x3ae31f9c,0xba6c8500,0xbbb6e48f,0xbb99109f,0xbba0c8af,0xbba31035,0xbba2577e,0xbba4aa56,0xbba3ff7e,0xbbad8abb,0xbbb27bca,0xbbb8eda1,0xbbbebeec,0xbbc22433,0xbbcd5e7e,0xbbbb466e,0xbbb7ac8d,0xbbb46650,0xbbb0bcfd,0xbba42caf, -0x3a815ae8,0x3a92d5f1,0x3b367396,0xbbd3a298,0xbbfa4732,0xba093c0b,0xbb99e04b,0xbbe617d7,0xbb387f27,0xbb2b4de8,0xbb111cb0,0xba238f55,0xba892128,0xba6fc066,0xba2a3185,0xbbe830ae,0xbbb1ceb8,0x3969d60d,0xbbdea844,0xbbcfbca5,0x3b152a11,0x3a4ef737,0x3a4cf470,0x3a82d750,0x3a7652e6, -0x3a5cd9a9,0x3a0ea47c,0x39ffc260,0x3a0ecae5,0x3a98f493,0x39e91d07,0x39826964,0x39e8b2b4,0xb990a5fa,0xb99a4e1b,0x38e2bddb,0x3a42c473,0x3adad454,0xba84d1e6,0xbbc6f4e6,0xba53223c,0xbb461f60,0xbaf570a1,0xba544455,0xbab36ad3,0x3a618107,0xb9e49404,0xbb30267b,0x3851ea02,0x3a993cc4, -0xbac32468,0xbac95a7f,0xba80beef,0xbb0be548,0xb9bcc12f,0xbb716d36,0xba8f11fe,0x3a7d196e,0xba02834a,0x3a0524e2,0x3a0b6b84,0x3a111e78,0xb88b1d05,0xb976a2ae,0xb84c03dc,0x3ac43e06,0xb952e982,0xba9ad355,0xba97edc7,0xbb71fd8b,0xbb68d2d3,0xbad80916,0xb9b4da4b,0x3b8223f1,0x3970b7ef, -0xbbab0ada,0xbb23d9f3,0xbaf9a0f2,0xba8a13f1,0xb97a3951,0xb8005a03,0x39b55926,0x3b8ce3a8,0xb916e1c0,0x3bd8fc28,0x3b45749e,0x3a5c1c0f,0xbaa37985,0xba2ec943,0x3a8d83af,0xb994e802,0xbb4edb59,0xbad4ca65,0x3a87e19f,0xba3d9054,0x39a6f613,0x38e5c814,0xb880f360,0xbaf80603,0xbadfaef2, -0xbadf5a15,0x3b00eb44,0xbb0258cd,0xbb5cbde9,0xbb12ce55,0xbbee5745,0xbbd31976,0xbb3b6a0c,0xba047f87,0x3b640789,0xbad1d741,0xbbabb63a,0xb9fc9eb0,0x3b05e156,0x39da2732,0x3aae09c1,0x3a5dfcfa,0x3b5014bd,0x3b874207,0x3ba4e905,0x3bede687,0x3bacd728,0x3a8b96fb,0x3b085cc1,0x3b70c387, -0x3b84b7e3,0x3b80502c,0xbaaab2c7,0xbabccac5,0xb9b62944,0xbb686fd6,0xbb0c801b,0xbb0420a0,0xbb2d76ef,0xbb9763b4,0xbb850b8e,0xbaf049df,0x3b93c755,0xbaeed494,0xbbbe71d0,0xbbc0881a,0xbc7507f9,0xbc623a03,0xbbcb5ef3,0xbb1a42a5,0x3c0b99b1,0x3a24a339,0xbc115dc9,0xbc29b214,0xbc4b2cc1, -0xbb8738dc,0x3aa988ae,0x3b03290b,0x3c2a99ec,0x3c1ac5b2,0x3b434428,0x39aa7595,0x3af2ee6c,0x3be71081,0x3b89a25f,0x3b5cf7c2,0x3aee2658,0x3a3d18a1,0xbb8a3cdd,0xbb57cbde,0x3b8c72b7,0x3bb54dbe,0x3c2d7bed,0x3bddc872,0x3c12df56,0x3c7a0752,0x3c0b5e26,0x3b009165,0xbb8dde23,0xbba8e3a7, -0xbb75673e,0xb9054efa,0x3b475e0c,0x3ba17e80,0x3bda970a,0x3b86a19f,0x3aa6e01f,0xbcb6d7a3,0x38eddbb7,0x3c42e6a5,0xbb472eda,0x3b716b2b,0x3b870d5b,0x3a4e1139,0x3a70e4fc,0x3af98355,0x3be432e8,0x3baaae66,0x3b711032,0x3b74d33b,0x3bc35da8,0x3bd02d0a,0x3a1f846a,0x3b102b72,0x3a8090df, -0x3a1009c5,0x3b08d388,0xba6f30d9,0xb99992f0,0x3ad19829,0x3b4f5748,0x3b31ae4a,0x3b0630ed,0x3acefd05,0xba3c5285,0x3bf56b3a,0x3b055a3b,0xbc541490,0xbc552960,0xbc31c5d2,0xbb944f05,0xb8f4fb43,0x3b347321,0xbbd0009d,0xbbd8da08,0xbb60705d,0xba13e63b,0x3b9a3d4a,0x3b07cb04,0x3a3afa14, -0x3afcc992,0x3b00ed2e,0x3ae84d73,0x3ac4f4c3,0x3b1deb8c,0x3b4b8f61,0xba0a3464,0xbad228ee,0xbb8a01d9,0xbb3cf9b9,0xbba7eaf1,0xbb5fde4e,0x3af21ce7,0x3aa210e8,0x3b86b2a6,0xbb197323,0xbbb26338,0xbbbd4ccf,0xba1e6fa7,0x3b9b8a42,0x3ba4ffb2,0x3c287fed,0x3b91166c,0xbc1f4225,0xbc5d27d6, -0xbc5c6712,0xbbbcdfad,0x3ab1543c,0xbb815bf8,0x3b97ea4b,0x3b905418,0x3b3459be,0xba47f6df,0xb9636225,0xba2ff37d,0xbb0be49e,0xb9c1d1ff,0x39d318c7,0x3a590167,0x3a9458a8,0x3abccda0,0x3a82c2de,0x3b0769d8,0x3b075c97,0x3930981a,0x39e4d7b9,0xbaad57d0,0x3ad12f25,0x3b504647,0x3a983663, -0x3ab97869,0xbb2d4497,0xbb7b1afc,0xbb22b450,0xbbb80e3a,0xbc179432,0xbc65a113,0xbc22f77a,0xbbf6505f,0xbaf6a86e,0xbc121ba7,0xbc3ebe04,0xbc4f2514,0xbc312727,0xbc8a7d28,0xbc90d5e7,0xbc6ee361,0xbc807fae,0xbca1f52c,0xbc844cb2,0xbc3db24b,0xbc069ffc,0xbba5a4d8,0xbb16f588,0xbb192fa3, -0xbb178e19,0xba917757,0x3a4dbdd0,0x3a874afc,0x3aad760b,0x3998078d,0x38e396af,0xbaf256ee,0x3956e26b,0xb9aa3274,0xb8329ac1,0x3b6c53af,0x3b07cd41,0xb98cb60e,0xbbb0f1c8,0xbbf16d39,0xbc20ba04,0xbc473846,0xbc50e9e4,0xbc4c392f,0xbbff8e41,0xbc41b6af,0xbc5f24c3,0xbc495d14,0xbc84591e, -0xbc43f6b1,0xbc87dbf2,0xbc72f6ad,0xbc48a4a9,0xbbcf07a7,0xbbfbebd5,0xbbf44e12,0xbc1a4849,0xbc0acce3,0xbbef59da,0xbb9d3e72,0xbb98f1df,0xbb248003,0x3a9f7982,0x39eba96c,0x394b5002,0xb9df5fee,0x3b12f9c9,0x3b630cdd,0x3b5e976d,0x3b4d1031,0x3b2f60f1,0x3b877fe2,0xb7b16759,0xbac9e56a, -0xbb590641,0xbb3ad35a,0xbb0e4a54,0xbae8aee1,0xbb1f60e7,0xbbb6dd93,0xbc309636,0xbc46d98f,0xbc4c7d8e,0xbc2d2818,0xbc498d88,0xbc45c97b,0xbc7ed12b,0xbc87868f,0xbc7196bf,0xbc632c56,0xbc338854,0xbbfa38d8,0xbb96fdca,0xbb537d1f,0xba8b3d08,0xba1fe91d,0x3aac24bf,0x3ab907a4,0x3b2a52af, -0x3a433a1d,0x393343dd,0xbaa8fd2f,0xbaadeab2,0xbb38a83d,0xb972858c,0x3b617a36,0x3b799105,0x3bca117d,0x3b9ce65f,0x3b813035,0x3b362f3b,0x3a8fcbb1,0xba6cc42d,0xbb4d3bbf,0xbb3b20fe,0xbb09d445,0xba9376db,0xbb613c27,0xbbd111c1,0xbc0eb57c,0xbc3ac8b5,0xbbabc4e6,0xbbbcdf94,0xbbae5949, -0xbb55144f,0xbb7a1914,0xbb47647c,0xbb187689,0xbaf63c26,0xbac2b05f,0xbb1b9b17,0xbb67dd12,0xbb23f31b,0xba993a15,0xba94cc35,0xbb093cf2,0xbac562fd,0xbb1821af,0xbac2a733,0xbb8575f0,0xba8ef41e,0xba83d0c7,0xbae4e57f,0xbaec83fa,0xbb064e48,0xbb0124a1,0xbae5a27c,0xbaf5794e,0xbb11a142, -0xbb459994,0xbb87be6f,0xbbbe050f,0xbbee1eef,0xbbead32f,0xbbdb23ce,0xbbcdc1aa,0xbbc3a8a2,0xbb3b46d3,0xbb1647d1,0xbbeea667,0xbc0642c8,0xbba6801d,0xbbbd93f8,0xbbf9750f,0xbbb6a361,0xbbb46ecd,0xbbaa5022,0xbb8ed119,0xbb9baa3a,0xbba17f76,0xbb93f24b,0xbbf256af,0xbba41ba4,0xbbaf18c5, -0xbbf585df,0xbbc0c49f,0xb9963467,0xbab561e3,0xba964657,0xba93ec0a,0xba80fd5d,0xba703eca,0xba5c34cf,0xbaaff2fd,0xbae049e5,0xbb012c3e,0xbb1461a7,0xbb208605,0xbb42a4ca,0xbb326908,0xbb3698ad,0xbb355bc3,0xbb3ce6c4,0xbade0673,0x3bc1da67,0x3ba8d167,0x3ba957d1,0x3c24524a,0x3bf59289, -0xbb07b94e,0x3c22a98f,0x3c0334bd,0x39e63ab4,0x3a1d5ee8,0x3a0fdd11,0xba15c2f5,0x38601141,0xb97b2b24,0xbad17fe1,0x3c002ad1,0x3c1eebad,0xbb29d8ab,0x3be9cbda,0x3c1fbce0,0x3ba53b6f,0x3bacd540,0x3bbeb190,0x3bc41b47,0x3bc34eba,0x3bc2b52b,0x3bbf5b99,0x3bb80378,0x3bb9a74f,0x3bcfcf00, -0x3bc97bd7,0x3bcdbbbc,0x3bd413d4,0x3bd4df41,0x3bc87e95,0x3b983baf,0x3bb2e849,0x3b8e7e9f,0x3bea405d,0x3b90141f,0x3bcfc4f9,0x3bd53d43,0x3bad15da,0x3bbbe189,0x3ba05f9e,0x3bc16447,0x3bfe5723,0x3c09637a,0x3c1bcd2d,0x3bfb8f6a,0x3be5309c,0x3ba1138e,0x3b96ddf6,0x3bf4b04d,0x3bb7f13c, -0x3b82dedb,0x3be53911,0x3bbc7ba7,0x3bf63fad,0x3c00aa98,0x3bfb31c5,0x3be47a0d,0x3bd2ec8f,0x3bbb2ad5,0x3bd09a82,0x3c10fab3,0x3c09e411,0x3c10579b,0x3c1327df,0x3c0ed908,0x3bee1e5c,0x3b6c92f8,0x3bb09fda,0x3b9ee719,0x3be6283c,0x3c08a7c1,0x3bc6df9e,0x3b8c5d32,0x3b9205a1,0x3b971bee, -0x3b82efab,0x3bb2e5e3,0x3b9eb8d9,0x3be5f7a9,0x3bf05964,0x3bfca1d1,0x3ba61c94,0x3ba2e9e1,0x3b90d219,0x3b9caf13,0x3ba165ff,0x3bd2c94f,0x3bb9a0bf,0x3bc31a3f,0x3c0532b5,0x3c1e4bab,0x3c1df872,0x3c176f09,0x3c0c8f61,0x3be67410,0x3bf1a548,0x3c4014d3,0x3c2c9e7c,0x3c3f4e2b,0x3c46bb6d, -0x3c4630a4,0x3c13ac69,0x3aaf3b9a,0x3bb6acb1,0x3af5d409,0x3b9b80cb,0x3ba68ca2,0x3bae9ed8,0x3b938d0d,0x3b78f65b,0x3b0bb50f,0x397b594d,0x3b2a8907,0x3b822874,0x3b2fad3a,0x3be2ca4d,0x3bc19d87,0x39f5c9ae,0x3b26d269,0x3b627681,0x3be4c261,0x3b81f990,0x3b92ecf8,0x3b7c6532,0x3bc279eb, -0x3c28f2b7,0x3c5761c2,0x3c544837,0x3c315c66,0x3c0acc3d,0x3bd83f67,0x3c13d830,0x3c88f41a,0x3c7e8bd8,0x3c84842f,0x3c83ad33,0x3c611338,0x3bfaa089,0xbb41bb25,0x3b444c99,0x3c54a26e,0x3c802852,0x3c3a6b13,0x3b36ec56,0xbbe38c04,0x393dafd2,0x3b850772,0x3b80766c,0x3c3624a4,0x3c356bea, -0x3b99937d,0x3a7e94a9,0x3aff6458,0x3bfd8f70,0x3b9ac6f7,0x3b63ac5c,0x3b924620,0x3b8c0866,0x3bc8ed8d,0x3c0a1007,0x3c1b36d2,0x3bf95ee9,0x3bae85ca,0x3bd7f5ac,0x3bf1989f,0x3c173a40,0x3b00ff3c,0xbb2f4374,0xbb46d64e,0x39ba146a,0x3c0428d1,0x3c92ff13,0x3cb3277c,0x3ca69062,0x3c5e8ec7, -0x3c4cb835,0xbb811e5e,0xbc94dd79,0x3be68d66,0x3c54d6f5,0x3b9375b2,0x3bdf9281,0x3b8b621d,0x3b47c8d1,0x3aa12def,0x3b08cc1c,0x3be1d8ca,0x3bbbf763,0x3b960279,0x3b4f7771,0x3bd6a05b,0x3c020056,0x3b93d3ec,0x3b4a4933,0x3b4d62c5,0x3bb5fc71,0x3c1abc24,0x3c651508,0x3c9b84e3,0x3c71f34e, -0x3c3ee280,0x3c1de295,0x3ba411a0,0x3b4d8335,0x3ae8f549,0x3c28aed4,0x3c0a5002,0xbaf60875,0x3b2a692b,0x3af17147,0xbb5654c9,0x3b4100d7,0x3c03171b,0xbac3e7c1,0xbb55bd26,0xbb405df0,0x3b16d37e,0x3bbfdb98,0x3ba826b7,0x3a8a0cac,0x3b46e175,0x3b0f58de,0x3b1655f9,0x3af822c3,0x3b22a630, -0x3b60b33b,0x3a897ccb,0xba11894f,0xba86bb88,0xb92b407b,0x3b0d865b,0x3a610c4e,0xba512f24,0x3a9d074d,0x3b9c27ee,0x3b546a84,0x3bd5f042,0x3c4c3ef9,0x3c7575ee,0x3c69805b,0x3c178153,0x3c2df51c,0x3c67865f,0x3ca8ecbe,0x3cc88b19,0x3cd06ad1,0x3ce77542,0x3c6e12f3,0x3c876e73,0x3bedfddb, -0x3bb82c70,0x3b9b0265,0xbaab00b3,0x3a717787,0xba760408,0xbaf2d752,0x39c3e329,0x3a4ecb09,0x3ab3e86c,0x3b017b9f,0x3b05f5dd,0x3b061e25,0x3b1d44f3,0x3b3fc946,0x3afbd952,0x3a6692a9,0x3b011872,0x3b5ad126,0x3bc3c54d,0x3c0dd9f0,0x3c27ad79,0x3bfb742b,0x3bb34382,0x3b921aa5,0x3b8ef70b, -0x3b6ee686,0x3b3f0960,0x3ba246ca,0x3bc41b5a,0x3bd6c2a5,0x3ca2f2d7,0x3ce19c63,0x3d0b7a76,0x3cc8d6dd,0x3c84569d,0x3bd65828,0xbbfb4d42,0xbc1bf532,0xbc565e54,0xbc5512bd,0xbc273c5e,0xbbaacdea,0xbb0e70ed,0xb9ecfd46,0x38d97d12,0xba9b1576,0xba312ec7,0x3a53faa0,0x3a99f00a,0x3ac93887, -0x398b220c,0x3b268542,0x3b74fa06,0x3b65f1d4,0x3a1fb40c,0x3a0ac7fe,0x3b286aef,0x3b872566,0x3bc02b53,0x3bf0c314,0x3bf1a290,0x3bf6caa4,0x3c286efe,0x3b5aa129,0x3b7a49ca,0x3c35cb8e,0x3c7ddcdb,0x3c93eddf,0x3c994dbb,0x3c94c5f9,0xba2031aa,0xba3f5461,0xbbf705d3,0xbb7276e3,0xbacfd74a, -0xbb67126c,0xbbd4c9fb,0xbc013ad3,0xbbfd3378,0xbbecd2eb,0xbbc442bb,0xbbac052d,0xbb492ef5,0x3a201683,0x3abe6748,0x3b4cc7db,0x3b634a46,0x3b6b128c,0x3b4a6af8,0x3b308eca,0x3b1b1f24,0x3b7fe1da,0x3bcb7f9d,0x3bdcd47a,0x3bc35110,0x3b666b70,0x3af3edba,0xba9ac317,0xbb919092,0xbb985aa5, -0xbb88c456,0xbaea43f1,0xbbf30e4b,0xbbfd9464,0xbb99f174,0xbb14e599,0xbc14d332,0xbc2f7e7a,0xbc0df537,0xbc089d7f,0xbc0aad27,0xbbdca3e9,0xbb984608,0xbb2ded98,0xbac034b6,0xba99d2be,0x3a931e9b,0x3a13eece,0x3ae6cebd,0x3b27472a,0x3ad6d5e3,0x3a9ab7da,0x3a40cf0b,0x3afe6f9a,0x3b77cfc3, -0x3ba06938,0x3b9d2d90,0x3bac41b2,0x3bb6eab5,0x3b9b98a8,0x3b8721c0,0x3b65cb00,0x3b798463,0x3b89b63e,0x3b850b0e,0x3b97ea7a,0x3b92fcef,0x3ba41092,0x3b001c20,0xba8b6924,0xbb9e3035,0xbbe54bf8,0xbb39b4f7,0xbb266e54,0xbb8b29c0,0xbaf1ac0a,0xba732492,0xba8255c8,0xb99a920b,0x39a2d86c, -0x3a2405d1,0x3af53114,0x3b3844ee,0x3b6df517,0x3b6422ff,0x3b9d216c,0x3b4d537c,0x3afd00f4,0x3b2d5e23,0x3a3c477b,0xba5a2817,0xbad5b2dc,0xbb1a7de2,0xbaf6b7ea,0xbaf56163,0xbacfea2e,0xbaa8f598,0xba85bcc7,0xbaa96ed1,0xbaada06b,0xba85dbef,0xba4f5804,0xb9e6db4d,0x38f64264,0xba69de2f, -0xbaa325ee,0xbad59708,0xbaf5e22f,0x39242262,0xb8be0064,0x3b242949,0x3a93a894,0xbb8fbd14,0x3b4f9966,0x3af59090,0xbb1ee44d,0xbb1013dd,0xbb0adeb3,0xbb2a2489,0xbb1b0a97,0xbb21aace,0xbb2c8a05,0x3b66ca3a,0x3b9445f6,0xbb57b848,0x3b2131bd,0x3b578372,0x39bde906,0x3a4bfea8,0x3a64d426, -0x3a58a1a9,0x3a6e6912,0x3a6c2f7c,0x3a76bdd8,0x3a8ed57e,0x3aa0dac3,0x3aa8228d,0x3ab5aee5,0x3abf9a68,0x3ae54d28,0x3aba91fc,0x3a9905d6,0x3a56bda3,0x3a178455,0x3b216b97,0xbba1a11b,0xbb7e7638,0xbbb0d72a,0xbb9e651e,0x3a2470ec,0x3c320ab3,0xbbd6e765,0xb9ba75f2,0x3c0cc622,0x3c1765c7, -0x3c1bc658,0x3c20f215,0x3c2ee533,0x3c320d47,0x3c325c3a,0xb94cca59,0xbbcca4a6,0x3c405c89,0x39db4c9c,0xbb99a1c1,0xbbbb1d04,0xbb8cfbfe,0xbba7c573,0xbba55741,0xbbad9959,0xbbb3c794,0xbbbe1e85,0xbbbd8801,0xbbba48c4,0xbba10df9,0xbbbae793,0xbbc1952f,0xbbbe3833,0xbbce05ef,0xbbc4fca0, -0xbb9cd469,0xbb9f66b9,0xbb8a8911,0xbbd651cd,0x3b3fca3f,0xbb9b57c1,0xbae0bd84,0xb978c11e,0xbb1c5bb5,0xbb0a138c,0xbb40c39d,0xbb55e327,0xbb0a63ff,0xbb14031b,0xbaa026db,0xbb293965,0xba05cd50,0xbac01a25,0xbb62be24,0xbb26eafe,0x3b667b54,0xbbcb42e1,0xbbb6a032,0xbbdcb256,0xbbe5b8c4, -0xbbfc8e7c,0xbc073817,0xbc0db922,0xbc0dbbec,0xbc027371,0xbbc00e76,0xbbfb3754,0xbc09000e,0xbc084cdf,0xbc248a4a,0xbc16d274,0xbbb77c8c,0xbbb0a079,0xbb48dc79,0xbb65f94b,0xbb310aee,0xbb2d37fc,0xb828d479,0xb7b66ffd,0x3a6fa5f7,0xb890f652,0x3b015665,0x3b271489,0x3afb2b92,0x3b630af8, -0x3ba26f51,0x3994f5e1,0x3a2dbcf4,0xbaebc2e5,0xba82cdc0,0xba8bce8d,0xbab84620,0xbb8b020f,0xbbdbfb57,0xbbf2be01,0xbc08aac0,0xbc1c2119,0xbc2ae70d,0xbc41902b,0xbc4072a2,0xbc39c7e4,0xbbeae8c5,0xbc358d2d,0xbc47bfdf,0xbc3abe0c,0xbc6dba0b,0xbc4aae75,0xbbc56b9f,0xbbb6db1b,0xbb3e79e7, -0xbb69ce90,0xbb61cc91,0xbb38ddf3,0x3a3c8a68,0x3a5fc14b,0x3acebe19,0x3a8844bb,0x3b260cc7,0x3b65b439,0x3b761c0f,0x3c01b48d,0x3bb700ba,0x3aac4aa9,0x3a98e17b,0x3a4b156f,0x3b4d4e3f,0xb8f555e8,0x39247ca4,0xbb9433fd,0xbc0c367e,0xbc2e40d2,0xbc514839,0xbc73c395,0xbc8e8ccd,0xbc954275, -0xbc8d255a,0xbc5b66db,0xbbd00bf2,0xbc50c141,0xbc75113c,0xbc761e4e,0xbcaac7a4,0xbc915c6d,0xbbd6fe55,0xbb91514e,0xbc07c841,0xb9b3e9ab,0x3aa8dd58,0xbb1334ec,0xbbe27018,0xbb019715,0x3a2774a4,0x3abe25d5,0x3c0c1b61,0x3c1e0fce,0x3bbe1c98,0x3a7b2aa2,0x3ac39ca8,0x3bd87d77,0x3b3e827f, -0x3aa484f4,0x3b057891,0xba6abe93,0x394340e3,0xbb1b3d73,0xbbab43b0,0xbadfaac9,0x3a23d136,0x3b1cb40f,0x3b9b75bd,0x3c2e6b1b,0xbba8cc00,0xbc65f2a9,0xbc8afc03,0xbc8327f6,0xbc69014b,0xbc683afb,0xbbb5700e,0xbb73cefc,0xbbd46410,0xbc184129,0xbb1ed141,0xbcbac416,0xbc25f41a,0xb9224de4, -0xbaa8c5c4,0x3b0d5673,0x3b4f74bc,0x3b6a5ceb,0x3a9369bd,0x3a8790f6,0x3bc997c9,0x3bcc8602,0x3ba2643a,0x3b376f85,0x3b8f75df,0x3b836a5f,0x39ac9e03,0x3a61b8fb,0x3b1ec31c,0xba0f3265,0xbbbaa570,0xbbf0a678,0xbc0f5f34,0xbb7f76a0,0xba29d687,0x3ad7351e,0x3a909b1e,0x3a73867d,0x3a23b13f, -0x3b8e6cb5,0x3a466bda,0xbbf889f3,0xbc11b49d,0xbc06490b,0xbb89f36f,0x3ab7c266,0x3b8e80d0,0xbb23a027,0x393b3afd,0x398754f7,0x3b213016,0x3ba615aa,0x3b82e156,0xba1fe67f,0x3acfd521,0x3aeb055e,0x3ac93844,0x3a869de7,0x3af20579,0x3b661e16,0xb9b57be4,0xbb6cdfd0,0xbb2a4f2a,0xbb8b04cf, -0xbbad5ff6,0xbbafc06c,0xbb89bc83,0xbabf0222,0x3afae045,0xbc1d479e,0xbc8388b2,0xbc9089a9,0xbc80d9bf,0xbc344f51,0xbb8fb138,0xbc06c7b2,0xbc933e50,0xbcf312cc,0xbd024536,0xbcd6ac8d,0xbc8674cb,0xb9305374,0xbc0f468d,0x3b9a7fa7,0x3b36a036,0xbaced6ab,0xbb08d37f,0xbb43d03d,0xbb099e8a, -0xbb48e5b5,0x39c1c07d,0x3a969d37,0x3a3a987e,0x3ae8c766,0x3b033a38,0x3a340863,0x3a068cdf,0x3a0904e9,0xba15293f,0xbacc8fbc,0x3910e27f,0x3a5e5000,0xbacc8fdd,0xbb8afc79,0xbbafb3dc,0xbc03911b,0xbbfc93cf,0xbbbe493a,0xbbfdd390,0xbc11170b,0xbc012ab9,0xbbcbbd45,0xbba0a683,0xbb294906, -0xbc61d97d,0xbcb44647,0xbcf29f9b,0xbc89287f,0xbce59dc0,0xbc785aa5,0xbbaf4f8c,0xbc47a7c8,0xbc73ee32,0xbc62afa1,0xbc3c5e86,0xbc0c02ca,0xbb9a4596,0xbb3f5c36,0xbaf74afc,0xbaea4651,0xbabdbdd9,0xbadff74e,0x380b69a6,0x3a4811e5,0xb97d306a,0xbab3ab39,0xba639ae6,0xbaa2f4ea,0xbae330dd, -0xb9ea68aa,0x3943d16c,0x39becba8,0xbb0519f0,0xbbf24268,0xbc1bda99,0xbc5790e9,0xbc889090,0xbc9795cd,0xbca60b04,0xbca21a94,0xbcacacd6,0xbca925d2,0xbca6884a,0xbcce2229,0xbc776d38,0xbc6442e0,0xbbb2a9b8,0xbbfe5165,0xbb828a80,0xbc0677e2,0xbc232103,0xbc22a09d,0xbc1e624b,0xbc09de16, -0xbbe93f01,0xbbeb371e,0xbbb2188a,0xbac8bce5,0xb9e5c2b3,0x39806cb0,0xb94ef476,0x3b0260cf,0x3b253b69,0x3b3fa0af,0xb9cb6afb,0xbb0b6708,0xbad7a48d,0xbb382575,0xbb7f0cd0,0xbbad01b8,0xbbaae2fe,0xbb88def9,0xbb29ff2d,0xbbaa51d7,0xbc1f0339,0xbc8b8c77,0xbc89835b,0xbc8f80cd,0xbc8e73b9, -0xbc7b6431,0xbc6edf75,0xbc6fc3b9,0xbc61765b,0xbc5e7bf2,0xbc388b72,0xbc19ae8c,0xbbd20cf0,0xbb8e67e1,0xbb3bc7c0,0xbb57fdbb,0xbb06b17d,0xbb034c4c,0x3a95c316,0x3a9ec847,0x3a839ad4,0x391810e8,0x39a87f8d,0x3a09e6b8,0x3a0ce010,0x39c7caf2,0x3a8bbc22,0x3b120912,0x3b54fd11,0x3b438ebe, -0x3b3e548b,0x3b504f5c,0x39376f9f,0xbb4b4c47,0xbbd68a90,0xbc04b08a,0xbc11c943,0xbc22f34e,0xbc2fe80b,0xbc45739e,0xbc5dbac5,0xbc65ca89,0xbc0285ae,0xbc1117a7,0xbb2a3d12,0xbbc5ca6a,0xbb935a84,0xbb6d7be2,0xbb9b6ef3,0xbb81fb3e,0xbb9c9868,0xbba26b7d,0xbb7d9c91,0xbb927d1e,0xbb700abf, -0xbb3bbd5a,0xbae33e3f,0xbaafa42d,0xbb44038b,0xbb09b1c9,0xba9f30ca,0xba83d22e,0x395b57cd,0xb9b890d0,0xb96699ed,0x381a855a,0x39a124e3,0x3a6fa155,0xba179817,0xbadf826a,0xbb4ebdaf,0xbb9abeeb,0xbbdcbc7c,0xbc0f87ca,0xbc10a4f4,0xbc0eb38f,0xbc0998da,0xbc089f87,0xbb955088,0xbbb17b51, -0xbba43e0a,0xbb15cce8,0x3b5bf262,0xbbbb88f9,0xbb135aab,0x3b3df2a8,0x3b678c46,0x3b8727a2,0x3b94921e,0x3ba9a2cb,0x3bb5eea8,0x3bc4d60a,0xbaaed9c1,0xbb84eb12,0x3b99c362,0xba934809,0xbb56fa5f,0xbae0e633,0xbae56c46,0xbae0e674,0xbac5675c,0xbabe5f01,0xbabc6a23,0xba9cca30,0xbb01fc94, -0xbb279595,0xbb4d022f,0xbb75a6f2,0xbb8ad056,0xbba4e81d,0xbb98f85c,0xbb9a1903,0xbb9ae1ac,0xbb9f3642,0xbb5851dc,0x3bfce09c,0x3bd6c8bf,0x3c22ca94,0x3b9270b3,0xbb23f8c6,0xbc2e69b2,0x3bea5a54,0xba61d711,0xbc14bcef,0xbc183c7a,0xbc16d7d0,0xbc0f108e,0xbc18a985,0xbc1c1a4e,0xbc244be4, -0xbab1a1f0,0x3bba2d2f,0xbc3dba49,0xbb1571ee,0x3b7ff898,0x3c158a02,0x3be454c5,0x3c01537f,0x3c036886,0x3bfec8d6,0x3bf71486,0x3be63d2b,0x3be571f2,0x3becceab,0x3c0745be,0x3c033bb8,0x3c0530f1,0x3c09a368,0x3c01c25c,0x3bf14d73,0x3bbf85de,0x3be4064e,0x3bdaa4aa,0x3c188011,0xbba70440, -0x3be2eec7,0x3b2ced6f,0x3b278ad4,0x3baede5c,0x3b6ba4ad,0x3bdd0ed1,0x3be87cd2,0x3ba03916,0x3c041507,0x3bea5236,0x3bbfb52d,0x3b00f06e,0x3b1957a4,0x3b6f1b81,0x3b8809a4,0xbb876953,0x3c026355,0x3c1227d2,0x3c1cbcad,0x3c2929da,0x3c1c6872,0x3c0c2b24,0x3bef58ca,0x3be1be50,0x3c000b99, -0x3c3122fc,0x3c29835e,0x3c2c5ee7,0x3c2a56b7,0x3c10af10,0x3be82131,0x3b7faa8c,0x3bc468a6,0x3c07780a,0x3c251883,0x3b8ef692,0x3ba49ee7,0x3aa2caf1,0x3b507feb,0x3b6d7780,0x3b5760e9,0x3b553dac,0x3bbe121d,0x3b8f746e,0x3c19a322,0x3bacdd6d,0x3bc0650a,0x3af99df6,0x3b3140ce,0x3ad4dfcf, -0x3b30dd20,0x3b0c39dd,0x3bb6eccd,0x3c2fde41,0x3c30c492,0x3c50702d,0x3c398409,0x3c238889,0x3bee0bff,0x3bdc6f34,0x3c0223e7,0x3c62da15,0x3c4f6b95,0x3c5d0ea4,0x3c67d1cc,0x3c318f78,0x3bf4a275,0x3acca218,0x3bb13fb0,0x3bd75fac,0x3be55bf5,0x3a605bcb,0x3b9fb9de,0x3b7fe489,0x3ba291aa, -0x3b865134,0x3ab6a1f6,0x3b7b457b,0x3b87b7a3,0x3b94e319,0x3bf9193a,0x3bf400e4,0x3b6a2d52,0x3b62fdcb,0x3b888c82,0x3af3f22a,0x3b7e3591,0x38eae5c5,0x3b8e35d5,0x3c3d6bbd,0x3c5572f1,0x3c86a007,0x3c662224,0x3c2bd5b3,0x3bd47338,0x3bb8b031,0x3c1de5b5,0x3c9abfc4,0x3c8a66ef,0x3c89a94a, -0x3c83b7f2,0x3c138472,0x3b306dbe,0xbb6da62f,0x3ae16d76,0x3c936f6d,0x3c7c2990,0x3bfe05c2,0x3b64319c,0xbc001f52,0xbb588c8e,0x3b09d488,0x3b481e65,0x3c0c8cf1,0x3c2f3711,0x3bfbf1fb,0x3b123580,0x3b013ab2,0x3bca3ef9,0x3b4e7453,0x3b6dd78d,0x3b6bf494,0x3be9a7ba,0x3b8f1d77,0x3c0395eb, -0x3c811f91,0x3c4a2879,0x3c6159f4,0x3c305c4a,0x3c415a4d,0x3c71192b,0x3bc1618d,0x3b06615b,0x3b6f8337,0x3c1474d3,0x3c82e760,0x3c99d23d,0x3cd40f1b,0x3cc7f5f9,0x3c6cd5e8,0x3c52bd02,0x3bde9474,0xbc3ca1d9,0xbc17b89f,0x385dc34a,0x3c23fcbb,0x3bb90233,0x3b8e3eb7,0x3bafdad0,0x3b1d6e88, -0x3b0358bd,0x3bced9b5,0x3be7ef90,0x3bc34260,0x3b6161fd,0x3bd16799,0x3bce6147,0x3b3b1484,0x3ae154f4,0xba5e0fec,0x3b998ab0,0x3c2c6e7b,0x3c5f587b,0x3cb783e7,0x3c92289c,0x3c57c1fe,0x3c00b644,0x3b1b3233,0x3b01ee8d,0x3bbcdc57,0x3c0dd99d,0x3bbed463,0xbb2b3b87,0x3abfcd51,0x3ac48136, -0xbb32676a,0x3c002a89,0x3c405cbf,0x3b984acb,0x3a80e7e0,0x3b2bbf4b,0x3b061526,0x3bc8129a,0x3b88f743,0x399f63e0,0x3b23137e,0x3b4988c5,0x3b130431,0x3b1e2638,0x3b39c28c,0x3b7d8d5b,0x3a88954d,0xb98a652e,0xba709737,0x3a86f4f8,0x38e33fbb,0x3ad2220c,0x3afb328a,0x3a3f9ca9,0x3ba220a7, -0x3bfdd2b3,0x3c634b24,0x3c99d3d9,0x3cb40950,0x3ca24e30,0x3c80f156,0x3c5fec83,0x3c8430cd,0x3cb01f07,0x3cb9976f,0x3cc435a7,0x3cda3c84,0x3c7f7e37,0x3c7011b9,0x3b4e8b83,0x3ab4bd1c,0x3b0091e1,0xbb5e2f03,0x393745f8,0xbab67665,0xbab6b9ee,0x3ab91032,0x3af71d98,0x3aab638a,0x3b4a85ca, -0x3b3611f5,0x3ac93806,0x3aa1c5f6,0x3a6127b9,0x3acdc162,0x3a32035a,0xba61ccfa,0x3b829477,0x3c183c92,0x3c3868c5,0x3c4dfc85,0x3c111a18,0x3bb374ef,0x3add7f56,0x3a978d58,0x3a87f6f1,0x3b823c93,0x3b4c7bb1,0x3bde9389,0x3c7eaa05,0x3cc02d20,0x3ced4793,0x3d0be63b,0x3caeb58e,0x3c8586fd, -0x3ad044d8,0xbc7c0724,0xbc38c53f,0xbc219482,0xbc521f6c,0xbc2356f1,0xbbc56b90,0xbb87d4b5,0xba4c7f08,0xba10707e,0xba1718d6,0xba3e862f,0xbab599d7,0x3995c53b,0x3a6aeca0,0x3a431e19,0x3aa62d72,0xb934d8ea,0x3b63f951,0x3a89f23b,0xba14ade4,0x3aa3c600,0x3b10acd9,0x3b8fd5df,0x3bde4cd5, -0x3bcce3b1,0x3bc4c184,0x3c0b6250,0x3b7aa7d6,0x3b859be2,0x3c14d79d,0x3c73419b,0x3c968584,0x3cac9996,0x3c8ac1fe,0x3b11f8d1,0xbaace356,0xbc20e29d,0xbbb051b7,0xbbc328c4,0xbbf004fe,0xbc087703,0xbc13593d,0xbbf072af,0xbbdee52f,0xbbb93ce4,0xbbd445cf,0xbb9916cb,0xbabb2e1d,0x3a9c3cfc, -0x3b30faa1,0x3b3eb301,0x3b262ae8,0x3b2d310b,0x3b042d15,0x3b47b40d,0x3b8e80f8,0x3b9fca55,0x3bd852a7,0x3bbdc585,0x3b7f162a,0x3b08d123,0xb782c86f,0xbb1e8756,0xbaccc4d0,0x3a6148e2,0x3ba25c7c,0x3acfed9c,0xba516fac,0xbb1367c6,0xba458434,0xbb88c625,0xbbe4cca5,0xbc0e55e6,0xbbd81a86, -0xbc02e785,0xbbc15813,0xbb88e03a,0xbb0856aa,0xbb55dd35,0xbb464bc0,0xbb6ac56f,0xbaa45cfb,0xba5b30e3,0x3a8ac48b,0x3a04f759,0x3abb153b,0x3ae7e0bb,0x3b1c310a,0x3b370155,0x3ba83eed,0x3bbbc3c5,0x3b980021,0x3b8b284b,0x3b8e44ff,0x3b9cc65d,0x3bb4606c,0x3ba684af,0x3b9402b2,0x3b62a011, -0x3b58539e,0x3b1ae05c,0x3b14b514,0xb8b77c07,0xbad8305d,0xbb66f3b6,0xbb951c4f,0xbb4a04ba,0xbb7e4d1a,0xbc16a617,0xbb5daf21,0xbb8e4596,0xbb85ba20,0xbb137d48,0xbb002311,0xba028b85,0x39b0154b,0xb9cb0455,0x3ab67cf4,0x3ae6a65e,0x3b17d593,0x3a5f7371,0x3a9f8ccb,0x3b337448,0x3b15043b, -0xba244469,0x3b3a2b54,0x3aff1ef7,0x3b18b5d8,0x3b2128c4,0x3b2d20fc,0x3b301f66,0x3b346af4,0x3b3dd472,0x3b5c74fc,0x3b80ce20,0x3b8dfbd2,0x3b9df1c9,0x3bb0fb48,0x3b6ae4a1,0x3afb648c,0x39b3f848,0xbab2e5a8,0x3aab98f3,0x3ac495f5,0xb857070f,0xbb5e91d3,0xbbfa4394,0x3adcbf01,0xbb20c17f, -0xbbd4c522,0xbbd6fede,0xbbd643fe,0xbbccf558,0xbbdb1a7d,0xbbe49fc1,0xbbe55dde,0xba80a9e0,0x3b53f742,0xbbdc2394,0xba78938e,0x3b1cb4b1,0x3b810b93,0x3b56d95e,0x3b6c8308,0x3b685936,0x3b6af1ba,0x3b6cafa7,0x3b6db641,0x3b797ee8,0x3b7ce2b2,0x3b7e17d6,0x3b811744,0x3b81738e,0x3b8c4c7e, -0x3b6705fa,0x3b4a3715,0x3b27e2c4,0x3b0c7654,0x3b88e848,0xbba52bc6,0xbb82b93a,0xbbe0b5f7,0x3aebfbc3,0x3c0bb337,0x3c55d091,0xbadc6d64,0x3be408dc,0x3c4db91f,0x3c5b399b,0x3c5be547,0x3c4a026e,0x3c637e13,0x3c641f64,0x3c5af3ec,0x3be62ffb,0xba839396,0x3c586e57,0x3bf20b10,0x3ad64562, -0xbbe891fc,0xbb88ef58,0xbba528bf,0xbba8321b,0xbbb6afcd,0xbbbf4524,0xbbc88eb8,0xbbc5c25f,0xbbc0ef9f,0xbba8a072,0xbbb8f792,0xbbba2067,0xbbb55c17,0xbbbb6820,0xbbb44193,0xbb9a6868,0xbba117c9,0xbba24a86,0xbb9ac519,0x3c1beb3f,0xbb481014,0x3b0dd122,0x3b430a00,0xb9b96c18,0xb969cdc0, -0xbb117d19,0xba861f3e,0x3b0d10f7,0x39d33f6d,0x398da466,0x3999463b,0x3af23663,0x38034f61,0xba530cb0,0xbaad0d97,0x3c06602f,0xbb95d4ea,0xbbb2ff84,0xbbb1cb7a,0xbbda9bc2,0xbc042d3e,0xbc163491,0xbc1a3f40,0xbc171289,0xbc05a20b,0xbbc3b7f2,0xbbe59ec9,0xbbe73e76,0xbbdff405,0xbbf3556c, -0xbbe21a1f,0xbba006ba,0xbb9eb11a,0xbb9b8069,0xba8bead1,0x3b82c26a,0x3a9ec614,0x3b4ae75c,0x3b31dff3,0x3b551c3e,0x3a8fe88b,0x3b91874f,0x3b11b72b,0x3bac3076,0x3b25856a,0x3be3ec37,0x3aecab77,0x3b4ee715,0xba41aa3e,0xba8a7353,0x3993295e,0x3b2f919b,0xbafffbb4,0xbbd17cb9,0xbbb5e042, -0xbbf6a81e,0xbc1fb42e,0xbc3ab70a,0xbc47e661,0xbc47d95f,0xbc380aa8,0xbbf26ff0,0xbc1d8b5b,0xbc1d73f1,0xbc102246,0xbc1eade9,0xbc0b7b6c,0xbbb2fca3,0xbb9f9eab,0xbba55da5,0xb6f9d9de,0x3b09aa22,0xba0b7483,0x3ad74355,0x3b6e5b05,0x3b3d49ad,0x3a78dad7,0x3b2411f9,0x3b71e652,0x3b5a33b0, -0x3c098fdf,0x3bd5bffc,0x3b0b851e,0x3a9c5d96,0xba7e995e,0x3af82ac5,0xbaf75ec9,0x3b4f39da,0xbb21a006,0xbbea4778,0xbbd5ea66,0xbc28e252,0xbc6ef5b3,0xbc97d514,0xbc9962a5,0xbc8ef6f2,0xbc5213f0,0xbbda4a71,0xbc263aaa,0xbc25be9d,0xbc1f0911,0xbc40e08d,0xbc2cb1b1,0xbba57344,0xbb50cb79, -0xbc34cbd4,0x3bd71ae4,0x3c7058b5,0x3bf8c1b0,0xbaadea0f,0xba8a405a,0x38b90b3b,0x3b2cec95,0x3bdcddaa,0x3c17f920,0x3c1136ab,0x3b08cbd0,0x3a933edd,0x3bbdd374,0x3b156e02,0x3a82202e,0x3b851ca2,0x3a953132,0x3bce225b,0x3b210828,0xbbd5f4fe,0xbb5ba939,0xbb8f39aa,0x3a83fc4d,0x3b0558d9, -0x3b6078e0,0xbc5b7298,0xbcb12034,0xbcb66135,0xbc8b3ba6,0xbc4cabcc,0xbc59a608,0xbb1aea29,0xbacf92d7,0xbc1360d0,0xbc22ca6a,0xbbceb0a4,0xbc9a510a,0xbc894e70,0xbc20b766,0x3bd40cf3,0x3b6d2929,0x3b1e8978,0x3ba77472,0x3af38f92,0x3ac1bccd,0x3bad659b,0x3be82bcc,0x3bc5dcb4,0x3b001874, -0x3b3d0cea,0x3b2176d5,0x3ae1e213,0x3a26b5c3,0x3b615b8b,0x3a82d0eb,0xbbb2c2e7,0xbb7c0f16,0xbb915bcd,0xba5e8554,0x3a38e93e,0x3aed51ba,0x3abf7888,0x3af0326e,0x3b5c0a90,0x3ac716a6,0xb9ff5625,0xbb5430a9,0xba3145bd,0xb99bd631,0xbb40155f,0x3b240d2c,0x3c1722a2,0x3bc4700f,0x3c09d129, -0x3baf7370,0x3bbd4f44,0x3ba29b0f,0x3b9e35b8,0xba459976,0x3afeba25,0x3b06a0d0,0x3ab32543,0x3a9076d6,0x3adfc8f5,0x3b6ae453,0x3a2fcb3e,0xbb45efcb,0x392e258f,0xbb3e1071,0xbafd02e8,0xbb6484ac,0xbbdae002,0xbb21ee80,0x38cbce4f,0xbc0357e6,0xbc4d18e9,0xbc6575ba,0xbc654229,0xbc577477, -0xbbd6a239,0xbc890c38,0xbcbc652b,0xbcb5fb97,0xbcb3b939,0xbc679134,0xbbcc0cb6,0x3ba0eb06,0xbb915af9,0x3b12fe82,0xb8c4ba0a,0xbb79913d,0xbb394cbd,0xbb4fff08,0xbb20db43,0xbb45647b,0x3a834762,0x3b058fcf,0x3ab09ae6,0x3b35bdcb,0x3b1fca81,0x3a009602,0xb9cc237a,0xb7b75c23,0x3914e485, -0xbad19f20,0x3b0326dc,0x3ac3a7c4,0xbab1bd48,0xbb060777,0xbb58d383,0xbb93f547,0xbb87001e,0xbb78d767,0xbba0ded3,0xbb6bf1dd,0x3b3d31ae,0x3a34a8f8,0x3b0b9154,0x3b89767a,0xbb05247a,0xbc0411a3,0xbc7cd4f6,0xbbc04d0c,0xbc838ca0,0xbb8cd7e8,0x3ab2db9f,0xbbe6e4c7,0xbc04d5bd,0xbc17d886, -0xbc10c59d,0xbbda3b25,0xbb6be200,0xbb446d47,0xbaed729b,0xbae96727,0xbade5301,0xbb3c79d2,0xb9680261,0x39eaf95e,0xba24fa98,0xba0e90df,0x3b017de0,0xba229fd0,0xbad5cbd4,0xb9ea895f,0xbac8141e,0xb9b1d7bd,0xba8720fe,0xbb362ace,0xbb907adb,0xbbcb8ff3,0xbc09f50f,0xbc471f80,0xbc75b941, -0xbc962c16,0xbc7182a6,0xbc3c2dfe,0xbc3848a7,0xbc4cd110,0xbc34eb72,0xbbd9a8ff,0xb89018c3,0xbb8cc0d5,0xbb971675,0xbc0a69c3,0xbc3553d6,0xbc25cd7a,0xbc22155c,0xbc099b68,0xbbfd6c17,0xbbf04408,0xbbce347a,0xbb69d706,0xba6b527b,0x3a80215d,0x3ac9f291,0x3b128707,0x3aeb0f86,0x3b0021e2, -0xbad3d8fd,0xbb4e1088,0xbb6450b2,0xbae146c1,0xbab42494,0xbb05b398,0xbb6c9f52,0xbb888a5e,0xbb861a0f,0xbb997219,0xbbf248ec,0xbc66277e,0xbc55c7ee,0xbc5a98c3,0xbc62ab7a,0xbc3127e5,0xbc42043a,0xbc1f15a3,0xbbdf94a0,0xbbf7b309,0xbba2cbb5,0xbb9c2bab,0xbb7015b5,0xbb4d5349,0xbb25440a, -0xbba7bae5,0xbb784abf,0xbba4c74f,0xba130e3b,0xba86f19c,0x3a45bcae,0x3a285146,0x3b31d934,0x3b1d9202,0x3b4d7702,0x3a48b7e9,0xba72839c,0x39aea631,0xb8d85566,0x3a3d4d88,0x3ab079ac,0x3b37e404,0xb9766220,0xbb3fd445,0xbbbc4ea1,0xbc017936,0xbc1beac4,0xbc3802a9,0xbc355f7b,0xbc37f23b, -0xbc4504cc,0xbc366702,0xbc08f4e2,0xbc17bc08,0xbb2abaa3,0xbbfc4bb0,0xbba7874d,0xbb987526,0xbbcbd757,0xbbaaf637,0xbbce7418,0xbbab3114,0xbb2fd56d,0xbb7f13c8,0xbb7e548c,0xbb2cb154,0xba1681c1,0xba07e931,0xba9b9e76,0xba3e543d,0x3b2c952a,0x3a3d7b50,0x3ad6dca8,0x3ac471ca,0x3acb9821, -0x3aef0444,0x3aee33e5,0x3b110a41,0x39a19ac8,0xba72bb7d,0xbb0f5ce2,0xbb5a8613,0xbb978026,0xbbc55d0f,0xbbda98c4,0xbbeadabb,0xbbf49114,0xbc0103ae,0xbba33e5f,0xbbd598dc,0xbaff4c9a,0x3ad9ec4f,0x3b9c9b61,0xbb660b8e,0x3ad192f3,0x3bade22a,0x3bc69fbe,0x3bd5980e,0x3bcd2c14,0x3bf16544, -0x3c018160,0x3c03f51d,0x3b54c9d8,0xbaabbddb,0x3bf3db25,0x3b7091df,0x399251f5,0xbb2848da,0xbaeb8c78,0xbb0008e9,0xbaeb1f3d,0xbaeead71,0xbaefdd26,0xbad2ac05,0xbb1261a2,0xbb3169e4,0xbb558c35,0xbb7adc37,0xbb8dee77,0xbba0e4e5,0xbb9bfd2a,0xbb9ecbc1,0xbba381ec,0xbba9b220,0xbb7a8c7b, -0x3b6f5a5c,0x3b4ef68b,0x3be45b3f,0xbb4704a9,0xbc05112f,0xbc0764d3,0xb98e0858,0xbbdf3507,0xbc1272ce,0xbc12cd1e,0xbc0eca98,0xbbeeeacb,0xbc05a7b0,0xbc05ded0,0xbc0008fe,0xbbf16c80,0xbafd5d14,0xbc1297d5,0xbc001941,0xbb6e8181,0x3bbe50f5,0x3b64eacd,0x3b81d19b,0x3b811958,0x3b622857, -0x3b488df4,0x3b1ce208,0x3b2c8626,0x3b406e0c,0x3b800c0d,0x3b67b13b,0x3b693569,0x3b80a87b,0x3b444db6,0x3b2d97a1,0x3b156aa2,0x3b488773,0x3b794d90,0x3b9a3cda,0xbc04d97c,0x3b32439b,0xbaf710eb,0xb9f3c140,0x3afe624f,0x38f4bdf5,0x3b5cebbe,0x3b21d52f,0xb9ba67fe,0x3b3138ad,0x3b4dd9eb, -0x3ad52882,0xbab2c9e8,0xba90398b,0xbb08a022,0x38edbb99,0xbbdfcb20,0x3b41d566,0x3bae5546,0x3b90f270,0x3b9b67a8,0x3b5e3ee6,0x3b1ed1a5,0x3a9f9bfe,0x3ac9cbf0,0x3b2394eb,0x3b9ca585,0x3b856c0d,0x3b77c391,0x3b7bce7b,0x3a9ba9bd,0x39bb11bb,0x39b99251,0x3ae2c5cb,0x3bc1768b,0x3bf4b13b, -0xba02b31b,0x3adb2290,0xbaa15d23,0x3aa9e2db,0x3afd894b,0x3a811f9e,0x3aaa3ac1,0x3ba73240,0x3ac5a0ed,0x3c01c344,0x3b45ee32,0x3b83042f,0xba915014,0xba3fc453,0xbb02c50a,0xba521c00,0xbb1dc82e,0x3ae7cc3c,0x3bf2c6f9,0x3bb66e3c,0x3bc28533,0x3b530879,0x3aa533c6,0xbafa16b3,0xba5cbb08, -0x3a44b583,0x3bbacaad,0x3b892dbe,0x3b85a6cd,0x3bb76aa4,0xb9cbfbc6,0xbad6899e,0xba95cdac,0x3a427ea8,0x3bc2b8a7,0x3bc1ec06,0xbb0dd8b6,0x3b0f4558,0x3b11f5c8,0x3ba22472,0x3ba4b550,0x3b0079b4,0x3b8fd46f,0x3b8cd284,0x3bc24986,0x3c0af8b0,0x3c0515b2,0x3bae069c,0x3b4748d8,0x3b1d8724, -0xbb29ec36,0x3ac24476,0xbb31652f,0x3ae55a6f,0x3c079902,0x3bc3ebf9,0x3bcfb206,0x3af94a2a,0xbaf69854,0xbb9f2e88,0xbb5292e5,0x3abf2598,0x3c0bbf41,0x3bad47c9,0x3b7b77b6,0x3b876596,0xbbc4c522,0xbc08435c,0xbb948db1,0xbae3bf9a,0x3c3ba993,0x3c1d8a7f,0x3ba140c3,0x3b7ab138,0xbbba6052, -0xbbc24ff8,0xbaa833be,0x3b0016ce,0x3bb0e87e,0x3c125eb3,0x3c2cc093,0x3b4871bf,0x3ab0a0d0,0x3b936e36,0x3ada1e67,0x3b4a6c2e,0x3b4aa39a,0x3bd350f2,0x3aebf71c,0x3b5383c1,0x3c34be93,0x3c1ce764,0x3c607671,0x3c2217b7,0x3c2d1ee3,0x3c480059,0x3b3925a7,0xbaca8cd2,0xbaebbc74,0x3ba1ca0e, -0x3c190ea6,0x3b9ecf56,0x3c6a455b,0x3c64e965,0x3b9d7ac0,0x3b9484f4,0x3c0a1239,0xbc1a4bc0,0xbcc7e49d,0xbc53d34e,0x3c436ef7,0x3b9e5555,0x3b843bd9,0x3bac231a,0x3b3efe65,0x3b00f59a,0x3ba81271,0x3bf7bbc5,0x3bd513a5,0x3b470bb6,0x3b8d0af5,0x3b47fec7,0x3a3b42ce,0x3a18498b,0xbb02ef63, -0x3afc6092,0x3b90c6b6,0x3b942108,0x3c395907,0x3c2ebd50,0x3c002a86,0x3b2cbb11,0xb8ce5827,0x3a99e5b3,0x3bee2af2,0x3b32825b,0xbaf72c79,0xbc01ee7c,0xbb2f469b,0xb990080a,0xba8e915c,0x3beb6c90,0x3c533a8d,0x3c35118e,0x3c033a67,0x3c0e83d3,0x3b5be4cf,0x3bb8895b,0x3b527c0a,0x37e6a2b8, -0x3b123422,0x3b63a3eb,0x3adb9926,0x3b12a456,0x3b2cc7c9,0x3b753627,0x3a53ead9,0xba2b9e28,0xba73de2e,0x3993dca3,0xbb294348,0xb93b6815,0x3af15208,0xb955afbe,0x3b310622,0x3b8ca553,0x3c03f27d,0x3c279a8b,0x3c448698,0x3c2eee3e,0x3c3bcbf8,0x3bbe0a03,0x3b817cc1,0x3b700f4b,0x3b384976, -0x3bb3dbfc,0x3c183b77,0x3c2dc3d8,0x3b1e83a0,0xbb280ef7,0xbb5ab3b4,0xbb0c22dd,0xbb70ce2f,0xba0ae622,0xba9dc2f7,0xba93ba76,0x3ac1057f,0x3b1c9180,0x3abd3e81,0x3b5dc894,0x3b2e03fa,0x39352ba9,0xb8fb257e,0xba472a25,0x39ff533f,0x390bca57,0xbafe9c3a,0x3b5252bd,0x3be6c043,0x3be36360, -0x3be797ab,0x3b808da6,0x3ac8dadb,0xbb0af084,0xbb9f291c,0xbb8d6755,0x3ae28946,0xbac5c89a,0x3b647c64,0x3c82b059,0x3c501fef,0x3c3a9ed7,0x3c1d7dc8,0x3b71ff32,0x3a86880e,0xbbfb65eb,0xbc6e9276,0xbc2cc9b7,0xbc09d810,0xbc2a6245,0xbc013e6e,0xbbc8f4b3,0xbbaaeb2a,0xbb0f102c,0xbb2527e5, -0xbacff560,0xbaceb6a9,0xbb45ae7c,0xb993c551,0x39a2d54c,0x3a1081e8,0xb98dd328,0xbb2fa200,0x3aa8b919,0x3a20be44,0xba81a249,0x384fa401,0xb924f68b,0x39a8f9cf,0x3a6b2a1c,0x38d1e60e,0xba43d1a0,0xbaaceb33,0xbb3663a3,0xbb802b41,0xbb9401ee,0xba1e6d28,0x3b0a7210,0x3ba1b4c7,0x3a72f2d5, -0xbad1a14e,0xbbbee296,0xbc187a67,0xbc0147c3,0xbc28eec2,0xbc33e9e3,0xbc2ae98a,0xbc31f304,0xbc091407,0xbbe8803e,0xbbba7cc3,0xbbdb0ef3,0xbbb4b203,0xbb6260f1,0xba0f2a8a,0x3a377c39,0x3ad3b2c9,0x3ab69c39,0x3afd5dec,0x3ac8646b,0x3b136188,0x3b14cd3f,0x3ac7f37d,0x3af2fe76,0x3af2699d, -0x3ae04400,0x39cae6c6,0xb98ae78b,0xbaa5b5bf,0xb851efc3,0x3ad556a3,0x3b3a9807,0x3b01853b,0xb99fd4cf,0xbafb8d0a,0xbb552e97,0xbb4e7461,0xbbbb9809,0xbc1005bf,0xbbccf695,0xbbe346ad,0xbbb448c6,0xbb9819a6,0xbb54df7f,0xbbac7078,0xbbb26c4d,0xbbfb89d8,0xbb8e5a92,0xbb75b7aa,0xbb05b1d5, -0xba85008c,0x3a5c167b,0x3b214dd7,0x3af8f344,0x3a0bd1dd,0x3b2615a3,0x3b745023,0x3b164aa4,0x3b052d4e,0x3b282c3e,0x3b540ccd,0x3b88636a,0x3b1f45e5,0x3a52e797,0xba81da04,0xbafab16c,0xbb511fda,0xbb7ba007,0xbb9521c0,0xbb988d64,0xbb93562e,0xbb9b7761,0xbb9f4672,0xbbd0c714,0xbc2d38d6, -0xbbc3b99b,0xbbf99eb4,0xbbe912da,0xbbb80327,0xbbb33a09,0xbb7dae67,0xbb6a006d,0xbb982c1e,0xbb4a5768,0xbb0d0d64,0xbb107e27,0xbb16aa24,0xba6e4bce,0x39b5224f,0x3ad9f07b,0x397be179,0x3b8d96d6,0x3b794244,0x3b77aa49,0x3b79f0e7,0x3b6fa3a2,0x3b5ed5de,0x3b59d5eb,0x3b5aef1f,0x3b67f17c, -0x3b683810,0x3b5ff28b,0x3b568916,0x3b469931,0x3accdcf8,0xb93d8f7c,0xbaef9351,0xbb6c9146,0xba51a557,0xb9ec7d0b,0xbb978a1a,0xbbe83bf8,0xbbe5d60d,0xbb40f783,0xbbd1accf,0xbbe6a235,0xbbe862de,0xbbe46062,0xbbc95990,0xbbd9a6d2,0xbbde8ffd,0xbbd66d63,0xbbad37d7,0xbabd54f2,0xbbba58a6, -0xbb8d1bcd,0xbaaabaf2,0x3b468f59,0x3b009bba,0x3b105f94,0x3b0d106f,0x3b0d47e0,0x3b0fd60b,0x3b0facfd,0x3b09c939,0x3afe118b,0x3aed1ee2,0x3adc2e73,0x3ac8248d,0x3acade06,0x3a751905,0x3a1a99fe,0x397f201b,0xb920247b,0x3aafaa0c,0xba0426c3,0xb9924875,0xbad177fb,0x3be3375d,0x3c16bebe, -0x3ba3c256,0x3b9838a2,0x3c0ae456,0x3bd1a769,0x3be73ed7,0x3be47ea5,0x3bb3f1f7,0x3bd9de42,0x3bd3f04d,0x3bb7dba7,0x3c05dd38,0x3b9af391,0x3b8b4e52,0x3c01744f,0x3bcfb491,0xbb038263,0xb8181f6e,0xb9878e38,0xb9fab549,0xba7cd941,0xbaa2a535,0xbac4f011,0xbaabff6e,0xba93a4f2,0xba10593f, -0xba2639ac,0xb9fcc659,0xb93010a4,0xb9cf2ef5,0xba06e3a4,0xba51ee3e,0xba2f56af,0xbaa62553,0x3ae7eb9d,0x3c08de8a,0x3ae0b0b2,0x3b915faf,0x3b98c3e6,0x3b43b1e0,0x3b07cd67,0x3ac85a1e,0x3b5cd8bf,0x3bbc11b3,0x3b98678b,0x3b60f1ee,0x3b850795,0x3b4548aa,0x3ac19deb,0x3b1d8303,0x3a94ba03, -0x3bc99852,0x3a94591b,0xb6da312a,0x3a821698,0xb9d8332d,0xbb013f5f,0xbb51ce50,0xbb655d80,0xbb47b3cc,0xbafb139a,0xb9389355,0xb986a154,0x39421f80,0x3a3d4a2d,0x3984eed4,0xb99e9a3c,0xba9763c1,0xba232353,0xbaaeac80,0x3ba0dd48,0x3c0e0c1d,0x3ba6afd1,0x3b85433d,0x3b964928,0x3b9c4b5f, -0x3b0c4de7,0x3bb5b28a,0x3b57997f,0x3bdcc832,0x3b7c17c0,0x3be20597,0x3b81228d,0x3b735c7d,0x3a455244,0xb95b9c89,0x3ac11789,0x3b988283,0x3b1bd2bb,0x39fa0e89,0x3af9b719,0x38a63bcd,0xbb20311f,0xbb8dcf2f,0xbba21743,0xbb94a031,0xbb535ead,0xb9ba137d,0xb9c03643,0x3a1e6137,0x3b0076fd, -0x3a853d2f,0xb96ab954,0xbb149076,0xba53e40a,0xbb29429a,0x3bb34cfd,0x3bd3310b,0x3b50fa4d,0x3b2415a3,0x3bcba37a,0x3b951497,0x3a82fd10,0x3b4e0aa4,0x3b86a46c,0x3b6b1580,0x3c0aa8b0,0x3bf79891,0x3b5f3d52,0x3adc1b4f,0xba8c0005,0x38e00389,0xbae1cc4b,0x3b6ad293,0x3adb3bc2,0x3ab7bdaf, -0x3b7a830a,0x3a146e2c,0xbb8977ce,0xbc04b916,0xbc09f5eb,0xbbdf7e7b,0xbb2b5b7f,0x3ade476d,0x3ab8e5a2,0x3b358555,0x3b8d83d0,0x3b091d8f,0xba261a5d,0xbb4901be,0xba38d4bf,0xbab15d13,0x3c63649a,0x3cb1fd77,0x3c658bf1,0x3ae764a5,0xbb029159,0xba9b5ddb,0x3b4cacbf,0x3b9cea15,0x3c08db1d, -0x3c40ca96,0x3b4d1596,0x3a27b0a7,0x3b976a71,0x3afa1fd5,0x3b0230cb,0x3baec0d7,0x3b9d605e,0x3c17e6a4,0x3be8e42a,0x3a7bd655,0x3ab8e241,0xbac89109,0x3b500b8e,0x3b16a778,0xbabdcb75,0xbc4311c5,0xbc8ab419,0xbc872547,0xbbed4088,0xb9fe5731,0xbacb5038,0x3c0dd3b6,0x3bf2b9f7,0xbb8ddac4, -0xbae9919e,0xbbe400fa,0xbc40c378,0xbc9c71d6,0xbc653d96,0x3c5ade10,0x3bdaffd1,0x3b505269,0x3b98c9c4,0x3b2081b4,0x3b0fc1e6,0x3b8af358,0x3beb3b70,0x3bd638b9,0x3af1f274,0x3b1ed371,0x3b0b1032,0x3b4b961d,0x3aa1781c,0x3b3a7bb7,0x3b46dc7e,0x39d18c42,0x3b95beca,0x3bf3f4bf,0x3beea071, -0x3baf1f00,0x3b7d2ad7,0x3af22394,0x3b2c1472,0x3bd869a5,0xb9f7fbd5,0xbb215594,0xbb1be9c0,0x3bc2448c,0x3be49705,0x39b848a3,0x3b43d057,0x3c5a9ff4,0x3c6d6214,0x3c6ae06d,0x3c245a0d,0x3bf322dc,0x3ba81be1,0x3bb25c83,0x3a6947f6,0x3b4c4790,0x3b38b0d3,0x3ac07592,0x3acd768e,0x3af2de78, -0x3b5ba3ee,0x3ae1fa74,0xba76adbb,0x3ae1a4c0,0xb931e503,0x3ad97c1d,0xb9e8fa08,0xbb94b893,0xbae264e9,0xba7c14fc,0xba27a535,0x3aa178f0,0x3b589aa1,0x3a8c16f2,0xbb1ef305,0xba0eebac,0xbc30ddb7,0xbc27785c,0x398b6248,0x3bc063c2,0x3c3f129b,0x3c603985,0x3c48a77c,0x3b7e3ae7,0xbb000832, -0xbb6b21c6,0xbb62afb2,0xbb103251,0xba44ade3,0xbabaf743,0xbabbec6c,0x3a949e72,0x3b0df546,0x3afce738,0x3b4c9927,0x3b142fd7,0x39273295,0xb9de3ee7,0xb8a50b17,0x3a1fbab3,0xb9e46606,0x3b22de98,0x3b1b5c62,0x3ad6d71a,0x3b66703c,0x3b673207,0x3b70dc27,0x3b39bb27,0x39970a71,0xb967bfc8, -0x3b2f85fe,0x3c30a74a,0x3bf4b7ac,0x3c1bf737,0x3c44f89b,0x3c844450,0x3c83dade,0x3c5494cc,0x3c3494ef,0x3bad594f,0x3bc588d3,0x3aaabbbf,0xbb557da2,0xbb8d0147,0xbbad127f,0xbba469b7,0xbb646ea9,0xbb143625,0xbb123585,0xbb07df75,0xbb1a12d2,0xbb0f63ef,0xbb37b18d,0xb9935a24,0x398eae89, -0xb8f73210,0x3a8200bb,0x3b53f981,0x3a9f2721,0x39b07a88,0x39f535c5,0xba722abd,0x3a383aca,0x3af47a06,0x3b84f4e7,0x3b891f11,0x3b8c5c4f,0x3b862d8c,0xb96b4b40,0xbb23384d,0xbbc1e7ea,0x3a56371e,0x3ba93135,0x3bb2a1de,0x3be98934,0xbb099921,0x3a596965,0x39a81ba6,0xbb093044,0xbbd5a385, -0xbc07f249,0xbc3056db,0xbc28728a,0xbc196794,0xbc01c658,0xbbef8dd6,0xbbd19037,0xbbb9007b,0xbb91d2eb,0xbac3b0ee,0x3a90428e,0x3b5c9ecf,0x3b102ca0,0x3aa1114d,0x3a874626,0xba174c98,0xba52d46b,0xbaa4ad3f,0x3a9e1698,0x3b1d6259,0x3b40ac24,0x3a2a7cd0,0xbad4ef99,0xbb6bf4b3,0xbb5962a9, -0xbb2e75dd,0xbb1c8a05,0xbb77c60f,0xbb828475,0xbb3e0bea,0xbaeb38e6,0xbbb5e871,0xbb846de4,0xbaf6790d,0xbb175f7e,0xba95ad85,0xbb05170f,0xbb35187c,0xbb5fb11c,0xbb7a2dc1,0xbbce59a7,0xbbbacd16,0xbbdc745e,0xbb7379f0,0xbb826255,0xba54108a,0x3a07c321,0x3b6ea7f1,0x3b59a36f,0x3b8f42e3, -0x3b2f1bbd,0x39c9380c,0x3a3e78f5,0xb9c73ccb,0x3956e68f,0x39d754c4,0x3a948f09,0xb7b1c9bd,0xb9fed480,0xba84d03d,0xbb25deaf,0xbb8ef893,0xbbc2617a,0xbbbbd25f,0xbbb05a0e,0xbbbd30d8,0xbba66c65,0xbbb24f34,0xbbc344a1,0xbb9dd903,0xbbd4a974,0xbba94c94,0xbbaca0d2,0xbbbd6d72,0xbbac03b9, -0xbbab859c,0xbb699790,0xbab0d7d3,0xbae202e2,0xbb02dc8a,0xba6e14b9,0x396666d7,0xb96069c3,0x3a240288,0x399fdfac,0x3b50eed0,0x3a217738,0x39e15417,0x3a4b56ba,0x3a2bc8c0,0x3a461544,0x3a21a3b6,0x3a23f272,0xb9a47755,0xba5c0e65,0xba8c19df,0xba8a736c,0xba43ec98,0xba292be2,0xbad55233, -0xbb2ccdde,0xbb68508c,0xbb8c8688,0xbb3b88c7,0xbb78ae8a,0x3a145589,0x3af17cdc,0xb7edc11c,0xb950092e,0x3b02fdd7,0x3aa35708,0x3adf5710,0x3af57ffd,0x3ab6cc80,0x3b0ede73,0x3b256666,0x3b21dc4a,0x3b7c9750,0x3ac9ec51,0x3b3adfb1,0x3b866ad1,0x3b254443,0xbaec76e2,0xba7053e3,0xba93f070, -0xba962686,0xbaa009c9,0xbaa7cc94,0xbaa45fb9,0xbaab4fee,0xbab10faf,0xbac45817,0xbad59136,0xbaec9eb3,0xbae14ca0,0xbb0525f0,0xbb0f96e6,0xbb1eec81,0xbb2e150b,0xbad41646,0xbb2ed98d,0xbb0b4192,0xba368776,0xbbd366f0,0xbbbb2e7c,0x3a96644a,0xbbc5c997,0xbbbb59e3,0xba71a7bf,0xb9cd3220, -0xb8fb7cfd,0x3a69dd4a,0x3a3e5c43,0x3a5e0ca3,0x3ac18928,0xbbc8ece4,0xbbe1b873,0x3a90a1fc,0xbbc1ecaa,0xbbe23bcd,0xbad3f5d7,0xbb049e6c,0xbb1c7e71,0xbb2d3871,0xbb501688,0xbb6870f3,0xbb845eb6,0xbb6ca550,0xbb5c419a,0xbb366ae2,0xbb515199,0xbb565d01,0xbb3e6222,0xbb7ffffd,0xbb7e78e5, -0xbb40fdaf,0xbb3b2674,0xbaf2ad21,0xbb202484,0xbb5b7ac4,0xbb2d7d9e,0xbb814f84,0xbac238a6,0xbab7f1e3,0xbb2f4ef5,0xba9e7670,0xbb0e6424,0xbb4e33f6,0xbb11f1a1,0xba951f44,0xbb012d46,0xbb34ba22,0xbb59c06f,0xbbb4a13f,0xbb660467,0xbb513f10,0xbb673fea,0xbac68b30,0xbb4d9c99,0xbb829b21, -0xbbb1c85b,0xbbc86ca2,0xbbd956e7,0xbbb52db5,0xbb986a31,0xbb6ef209,0xbb945c04,0xbba759f9,0xbb9a218a,0xbbf279d6,0xbbe8f886,0xbb86f286,0xbb80483f,0xb9bad91f,0x3ada2560,0xbb19a63f,0xbaa356f1,0xbaff14e4,0x396bd15b,0x3a864618,0xba82567a,0x3a931301,0x3b605ab1,0x3a1beffb,0x3b847ed3, -0x3b0e12d7,0x3abf4d15,0xbb0a934d,0xbb65136d,0xbb809df7,0xbb552569,0xbb81f67f,0xbb1e4962,0xb9bfda19,0xbb26df07,0xbb9a2fe7,0xbbf8c96e,0xbc1a5af1,0xbc3979d2,0xbc143261,0xbbfb469a,0xbbaa1ce2,0xbbde2f6c,0xbbfcd0b5,0xbbbc9a98,0xbc404f23,0xbc2e44bb,0xbb928e5d,0xbb9d66ba,0x39d84150, -0x3aecd98c,0xbb1bf3e2,0xba950819,0xb934fbe8,0x3b8f5947,0x3ba6c8a4,0x3afbc8be,0x3b87ec19,0x3b89dc98,0x3bb9c8b3,0x3c0f9ae2,0x3bfbfd1a,0x3ba8a1e9,0x3ab89eba,0xba787b9e,0xbb8879b3,0xbb1117d9,0xbb3fc0d7,0xbae627dc,0xb81aecb9,0xbb826904,0xbc06b747,0xbc55006d,0xbc818482,0xbc83c330, -0xbc44b56d,0xbbf9fefd,0xbb934615,0xbc090175,0xbc2a487b,0xbc103449,0xbc93b0e4,0xbc844f4a,0xbba377d3,0xbb99fc25,0xbab1aa4d,0x3b787e9f,0x3bdba318,0x3bcdd1e4,0xbad25e5c,0xbbdc579e,0xbba007cf,0x3a16d792,0x3b206ad3,0x3bd81715,0x3c4c64a2,0x3b5568e6,0x39a0593d,0x3b47648a,0x3a32598b, -0x3af7e4e9,0x3b2eca46,0x3b60dc35,0x3a9d4719,0xba46a189,0x3a8dbc6b,0x3b249865,0x3bb6b717,0x3ba96f24,0x3ba2694c,0x3b779324,0xbbb3cb9e,0xbc2d57ff,0xbc512b22,0xbbbd3a0e,0xbb85bacd,0xbc4efeb5,0xbb1492f0,0xbae75b8a,0xbc1c9cf8,0xbbeb9bcd,0xb98b1651,0xbc3a5596,0xbcf2656f,0xbc9fbf7d, -0x3c172d7c,0x3b9f5f49,0x3b84962a,0x3b6bfa3e,0x3b27e377,0x3aff6217,0x3b68b5f4,0x3be8064b,0x3bd4a95f,0x3b28254d,0x3b02faf2,0x39c92027,0xb892e332,0x39f6c089,0xb91e31a0,0xba56bbc5,0xbb76dabb,0xbbb00ef9,0xbb7ee7ce,0x39257e72,0x3a4ac485,0xba66b898,0xba8eb7f4,0x3a8c2906,0x3be608c2, -0xbb6759d5,0xbc051562,0xbc144bcb,0xbb854856,0xba4fc2d7,0x3adffc20,0x3b10fb63,0x3c3e0947,0x3c720380,0x3c6f0a46,0x3c4e7bad,0x3ba90946,0x3b8d3736,0x3b5fa505,0x3ac9dc7b,0x3b334b3f,0x3b53716b,0x3a9e40cd,0x3abece9f,0x3ae8d324,0x3b4c8706,0x3a5af84f,0xba9e397b,0xba26c7b1,0xbab46104, -0xbb85f1ab,0xbb5a9e40,0xbaa01664,0xbaccddd8,0xba8dc8eb,0xbab0940f,0xbaf45d1b,0xbb565f5a,0xbb8e4f17,0xbb9a55e8,0xba072a87,0xbc010285,0xbc5ccf60,0xbc9ddd36,0xbc7f930d,0xbc2cb3be,0xbc013da4,0x3b9e0667,0xbc245b15,0xbbc6c01e,0xbbe699a9,0xbbbda77a,0xbb05b88f,0xba972e55,0xba884fc7, -0xba4be99b,0x3a44cbcd,0x3af0199a,0x3ab1dd11,0x3b23ad54,0x3adcd704,0xba74e38c,0xba90fb40,0xbadf1a64,0xbaa9a742,0xba484c42,0xba819e01,0x3a99d894,0x3a39d803,0xba3eff9d,0xbaa36a0d,0xbaf93398,0xbb28cc55,0xbb9ecc51,0xbbe4046c,0xbbb29039,0xb7d4f9e7,0xba8f540b,0x3b209e35,0x3c0f2040, -0xba5185c5,0xbc08328a,0xbc87cc8c,0xbc519fab,0xbc7bc3a7,0xbc2b92a6,0xbbc82e4a,0xbbe5fefa,0xbbe72063,0xbbd350b2,0xbb9c2f73,0xbb9ae99c,0xbb8ca215,0xbb4937aa,0xbb7c0284,0xbb4ed5e7,0xbb3bb320,0xbb661b54,0xba93427b,0xb9bb8822,0x3a106916,0xba9d6fe9,0xbb212f0f,0xba5599dc,0x3a0c9324, -0x39bc1dbc,0xb8c9330f,0xba5c115f,0xbb13b4d8,0xbb8718eb,0xbba51e8b,0xbbe90056,0xbc30de5b,0xbc1a488c,0xbc389545,0xbc834974,0xbc7c0a23,0xbc6d065c,0xbc54b50d,0xbc81de93,0xbbdca459,0xbc11607f,0xbbad0fda,0xbc00d088,0xbc36b9f4,0xbc4c9339,0xbc454a16,0xbc3f5f75,0xbc1db0a6,0xbc01aaf8, -0xbbd6848f,0xbbd5d2aa,0xbbbf153d,0xbba1ed35,0xbb365135,0xbacaf6da,0x39eaf34f,0x3a4cb23e,0x3aad7dea,0x3aaa76a1,0x3a0610ae,0xba7d9800,0xbb17bfec,0xbb4c57ba,0xbb326ad0,0xba840c6e,0xbaa33236,0xba306225,0xb9115d65,0xba8bc5b5,0xbafac79e,0xbb6306c1,0xbb2cb5f9,0xbb722087,0xbb80ebb0, -0xbbc7704e,0xbb941cc9,0xbba6dfe7,0xbbe92762,0xbbc23840,0xbba4dcd9,0xbba818c3,0xbbb0bc86,0xbbb6a806,0xbbd87cf9,0xbbedb172,0xbc13838c,0xbbebb274,0xbbc47b18,0xbbb60b58,0xbb35da60,0xba341a44,0x3b04bd91,0x3a907b70,0xb9611796,0x39a65708,0x3a6117f7,0x39b33183,0x39d72a8e,0x39da0fc0, -0x39bf4bdd,0x39e89a60,0xbac6918b,0xbb5726a1,0xbb9f144c,0xbbd6644a,0xbc033475,0xbc1b60e9,0xbc0d0748,0xbbfaa8e7,0xbbd431de,0xbbc46d11,0xbbbc1c47,0xbbe22130,0xbbe56826,0xbbdd6f76,0xbbfd8142,0xbbecb451,0xbbe8134e,0xbbe9d0b3,0xbbceac9e,0xbbd3108f,0xbbd69fd4,0xbbca811a,0xbbaa72d7, -0xbbaff2b7,0xbb893167,0xbb4df246,0xbb4ff4b6,0xbaba2885,0xb9b9c9a5,0x3a77b771,0x3aa31c50,0x3a6a42c6,0x3a5f8551,0x3a38d676,0x3a16667f,0x3a1cad2e,0x3987d2fd,0xb90787d4,0xba4de623,0xbab9c94b,0xbb0b81df,0xbb4fa272,0xbb631958,0xbb8b8279,0xbba07598,0xbbb76b50,0xbb6c033a,0xbb678e18, -0xbbcf2656,0xbbc4243c,0xbb1080e7,0xbbc413e5,0xbbc179b9,0xbb47d2c1,0xbb3cef30,0xbb296db5,0xbaeec373,0xbaed72ad,0xbad2ce99,0xba972808,0xbbae27e0,0xbba55d8a,0xba22c16b,0xbb8a5cca,0xbb82ee5c,0xba58588d,0xbaac38e5,0xbaabc667,0xbaa6e285,0xbaaa9351,0xbaab18ed,0xbaa69176,0xbad9c0e4, -0xbb01b79b,0xbb13d314,0xbb28b8fe,0xbb3b6030,0xbb5040e1,0xbb569704,0xbb5a9990,0xbb5b4a27,0xbb663a19,0xbb4741cb,0x3b7ed5d1,0x3b55b133,0x3b9e2f52,0x3bca17f2,0x3b2dc633,0xbbc05ed0,0x3bda3c50,0x3b582ef1,0xbb805a61,0xbb69aeb7,0xbb6c8c1d,0xbb8c0aba,0xbb8af69f,0xbb93f8bf,0xbba49430, -0x3b2c7fe0,0x3bbb4205,0xbbe42f38,0x3afa35d5,0x3baee675,0x3b88e1d8,0x3b7a5228,0x3b8c2957,0x3b821538,0x3b6c3b51,0x3b5d30a0,0x3b4b3450,0x3b607dee,0x3b6de366,0x3b83d63b,0x3b877c08,0x3b8deed0,0x3b9c3c68,0x3b8a9c56,0x3b7a2970,0x3b3c22a3,0x3b5e4ccd,0x3b3837d6,0x3bd91fe4,0x3a69f25b, -0x3b9d9443,0x3b37528d,0x3b5fb8d7,0x3b9599f8,0x3b282ad7,0x3b94b5e1,0x3bbaca25,0x3bb5021f,0x3bcb1d85,0x3ba00857,0x3bafda09,0x3ae066d2,0x3a94d9f9,0x3b325585,0x3b0862c7,0xba168378,0x3baebebe,0x3bad2494,0x3bc8b4e8,0x3ba86323,0x3b82678e,0x3b4c1d36,0x3b313bba,0x3b6a9fdb,0x3b9526ac, -0x3bb64bb5,0x3bbee799,0x3bcb148c,0x3bded3f1,0x3bb6bda6,0x3b8a8a54,0x3af72c20,0x3b3ce03a,0x3b4f399f,0x3c0dd52e,0x3bf6463e,0x3bbb1d3b,0x3ae73f4d,0x3b862ea6,0x3b8cc232,0x3afd183a,0x3b937056,0x3b95216a,0x3bad159e,0x3baf5c21,0x3b8fb6ec,0x3ba4cb92,0x3ad168cb,0x3a4a72bc,0xb9321d1f, -0x3a8150fb,0x3b370f95,0x3b9a4735,0x3becd1ff,0x3bfb2f43,0x3bd40183,0x3b8fb4c8,0x3b3d7a00,0x3b039108,0x3b5e44a3,0x3b9d4c04,0x3bdd3b9d,0x3bf94cb0,0x3c0b82bd,0x3c27a704,0x3bf0eec3,0x3b95807e,0x3a0d41ba,0x3b13018f,0x3ac26055,0x3bf78b6d,0x3baa2322,0x3b8d7294,0x3ad2791e,0x3beb2850, -0x3bc63acb,0x3aacd279,0x3b8826ca,0x3b935da0,0x3b8fa305,0x3c015d72,0x3c0108f0,0x3b9bdb48,0x3ae6936c,0xba08cba6,0xbb0616ab,0xba6b3cf2,0x3a463ed1,0x3b861837,0x3c1476f3,0x3c2d7097,0x3c0d6469,0x3ba1e91b,0x3b19a4f8,0x3adaac91,0x3b917c7d,0x3c025202,0x3c299615,0x3c311659,0x3c3e4abc, -0x3c5c8081,0x3c097ffc,0x3b65647f,0xbae8d5bc,0x39e06a8a,0x3c22642a,0x3c864e7e,0x3c9ef475,0x3c6f3181,0x3ac9e8e1,0xbbaa9f83,0xbb84688b,0x3ae6eb83,0x3b29683e,0x3bdbacf5,0x3c54e2de,0x3b6d9f34,0x3951216f,0x3b3f8404,0x3ab915b8,0x3b3ed18e,0x3b8fc94a,0x3be3c367,0x3bf7632a,0x3c0b3807, -0x3c2093a4,0x3bf2d1a0,0x3bacf285,0x3bd27b36,0x3b8eedc9,0xbade8ff0,0xbbac9998,0xbbdfd3e5,0xbbb21b9b,0x3b96a3d6,0x3c312a49,0x3c083e65,0x3c819e09,0x3c560429,0x3994f62e,0x3ba74f75,0xbbadff8b,0xbbf3b1c9,0xbca1e32b,0xbc6d1a53,0x3c5fdad9,0x3c0d73e8,0x3ba79b34,0x3b77c874,0x3b2f8b25, -0x3b2e8b41,0x3b4ff7b1,0x3bdcdb69,0x3bda87ea,0x3b319de0,0x3b342bc0,0x3b134a27,0x3b64217b,0x3b0ee243,0x3a9441e1,0x3b59f8ab,0x3bb864b1,0x3c1b5944,0x3c7279be,0x3c523022,0x3c1237ba,0x3b946af7,0x3ab1dcf6,0x3b2801ac,0x3c0fdc6e,0xba9fefad,0xbb612080,0xbb00abf9,0x3be73aeb,0x3c12965f, -0x3b847c64,0x3b28514a,0x3c78eb7c,0x3c9840ab,0x3c8601b1,0x3c50cf30,0x3bc0c454,0x3b817388,0x3b98edd9,0x3b7a9f87,0x3b8a49a7,0x3b67f369,0x3adf1ef1,0x3aee1a76,0x3aebc3a4,0x3b35dd97,0x3b16f416,0x3a9a937f,0x3ab818c8,0x3ad205d0,0x3af3b3c5,0x3a717462,0xb9c95899,0xb9d7974a,0xb9956933, -0x3c01f0f4,0x3c6e0902,0x3c92a473,0x3c845ade,0x3c28e7af,0x3ba6983f,0x3987f4d0,0x3ba3f005,0x3c69db7f,0x3cdfcb11,0x3cf664e2,0x3cc4b46e,0x3c82013c,0x3be6b3ff,0xbbaec471,0xbbe90475,0xbb51826c,0xbaa0e622,0x3a8aebd4,0xba269373,0x398ca26a,0x3a23bc0e,0x3ab01a49,0x3ada09a7,0x3b15d690, -0x3aab811c,0xb923bb3b,0xb9d8e890,0xba3a907d,0xb848ecb6,0x3a1574b4,0x3a8cc421,0x3b1dee65,0x3b9370a4,0x3bf8ff11,0x3c161178,0x3c1c93dc,0x3bedec74,0x3b3ed899,0x3b6597ca,0x3bd20e75,0x3c39602f,0x3c375f55,0x3c5d68c5,0x3c6c33ac,0x3cc8947e,0x3ce7f303,0x3cf674bb,0x3c90dfb2,0x3c9416b1, -0x3c2abf5c,0xbb37c942,0xbad3959d,0xbadd113e,0xbb36778a,0xbaf51666,0xba75412c,0xbab8f926,0xba8303d0,0xbb09f532,0xbb391912,0xbb3243b4,0xbb0e25f2,0xba88b4d7,0xb9a24cf2,0x3a8e351a,0x3aca109f,0x3ae5966d,0x3b256d1b,0x3b1b555f,0x3ad29807,0x3a8c813f,0x3aeb6f2b,0x3b7445b5,0x3beee889, -0x3c053fdf,0x3c0f8119,0x3c1a963f,0x3bf190da,0x3bf4e8dd,0x3be9875f,0x3c498fe1,0x3c73add0,0x3c858b3e,0x3c8a3317,0x3b960269,0x3b486ec3,0xbb808f59,0xbb5f865d,0xbc14ba58,0xbc1abbf1,0xbc292fd9,0xbc22671b,0xbc08318f,0xbbed2a1d,0xbbd00c1e,0xbbb11c8e,0xbb996ceb,0xbb9282ce,0xbb0c5165, -0x39036567,0x3b441dc3,0x3af33251,0x3ac67ff9,0x3a5097cf,0x3ade02f1,0x3b1b9d57,0x3b00739d,0x3b63c6ef,0x3b8a19f1,0x3bbc7d41,0x3b824c30,0x3acd122b,0xba86b090,0xba640de4,0x3ad9b762,0x3bf563b6,0x3ba065e6,0x3b8d4a1d,0x3ba3d094,0x3b9512c5,0x39fc6217,0x3926f142,0xb9878359,0x39499014, -0xb9e2e470,0xbad91fe5,0xbb631b1c,0xbb9cbe3b,0xbbc2c997,0xbbddb173,0xbbf26476,0xbbe2a6de,0xbbda1fc8,0xbbc7dc58,0xbb4a2824,0xb9ea6ada,0x3b2347f6,0x3b1dd844,0x3b506b9a,0x3b7119e7,0x3b217639,0x3adf40c0,0x3a3acf79,0x3a0145b6,0x38f49714,0xb93b2db8,0x3a059eea,0x3ad65dcb,0x3b2fe718, -0x3b116130,0x3a875696,0x39901e1f,0x362dd97d,0x399e9f2f,0x38decd76,0x3937197a,0xbaefe7fa,0xbaf667dc,0xbbd1aede,0xbb6d108d,0xbb91af68,0xbb9adc5f,0xbb7381f0,0xbb80a0f3,0xbb2dfb94,0xbaceaa30,0xba97c711,0xb9aa33b0,0xb9e52e88,0xb9039bac,0xba182a5e,0xba8959ae,0x39db5da8,0xb93df701, -0x386d202f,0xb9ed4662,0xbaa8054b,0xba418292,0xba4b5eb0,0xba36dd10,0xba33f642,0xba5bb6b6,0xba0e5f1d,0xb9923841,0x39a48126,0x3a8b8d76,0x3b0e6c91,0x3b491e01,0x3b0fd04c,0x3a93c576,0x38f5a5d0,0xba351437,0xba276400,0xba046636,0x3a05d057,0xba94d413,0xbbb58226,0x3a8e4b36,0xba49f865, -0xbb94e26a,0xbb97a2c9,0xbb9a9d5c,0xbba0798b,0xbba1a50b,0xbba2b7f4,0xbba58084,0x397bed2b,0x3ad6d125,0xbb857797,0x39d3a646,0x3ad687c9,0xb9d22565,0xb8f92b0c,0xb909d651,0xb972e18b,0xb988cf37,0xb99940f6,0xb9b2f578,0xb8a558f2,0x38f1dbbc,0x39827e92,0x39d6ad7e,0x3a0369b0,0x3a7c90b0, -0x39e7b8d9,0x3990eb25,0x385c3a8d,0xb909a292,0x38fef46a,0xbbc8201d,0xbba5b6b8,0xbbd0e3f7,0xbb77bdcf,0x3ab501c6,0x3c0aabe7,0xbbc177b7,0x39827b64,0x3be29324,0x3c013ce1,0x3c03b705,0x3c002f26,0x3c0b43e2,0x3c0cb1c8,0x3c127469,0xb710faa1,0xbbbec908,0x3c0fde31,0x39fa98d6,0xbb871622, -0xbbdd8faf,0xbba6e706,0xbbc31a61,0xbbd0792c,0xbbddd44a,0xbbe4e24f,0xbbea517b,0xbbda10a7,0xbbd55b4a,0xbbd0f00b,0xbbdb5226,0xbbde02bd,0xbbd36d52,0xbbea8c2a,0xbbe34a07,0xbbb6fc09,0xbbc4a14b,0xbbb61a79,0xbbc52471,0x3b7eff16,0xbba042fc,0xbb31307d,0xb92bd6e2,0xbb0b5d43,0xbb390452, -0xbb56f4ac,0xbb559ad2,0xbadf6dd2,0xbb57db04,0xbb2f00c0,0xbb0ece33,0xbae0ee4e,0xbb4b9819,0xbb9c08ed,0xbb8b02e4,0x3b2631a8,0xbbcab3a8,0xbbbf7a01,0xbbe4f73a,0xbc0f6404,0xbc22bd43,0xbc29314e,0xbc24d86b,0xbc0a2a4d,0xbbfa1d7a,0xbbfce80c,0xbc0bd435,0xbc1406c7,0xbc093962,0xbc24cfef, -0xbc186556,0xbbbfda47,0xbbd352c6,0xbbafb6ea,0xbb0605a7,0xb7d22329,0xba9ccb59,0xba7b0a1d,0x3a45bce1,0x3abd7275,0xbabf5b83,0x3b26fb3d,0x3b0be52b,0x3b07f1d5,0x3a032a3d,0x3b1ff242,0x3a199b41,0xba8484b9,0xbb800bec,0xbb6dc12a,0xbb541e40,0xbb0096e6,0xbb69cbdb,0xbbbe6cd4,0xbbe33391, -0xbc2c72d4,0xbc51bd70,0xbc6478e4,0xbc64ce0d,0xbc37f4fe,0xbc277d8f,0xbc24f043,0xbc39fa78,0xbc49e136,0xbc2ac7dd,0xbc6716d4,0xbc4a5ace,0xbbb6c913,0xbbe8c8fd,0xbba6b0e0,0xba633fa9,0xb8759cec,0xbb2f754f,0xbb11d161,0x3b87ed72,0x3ba3a2ee,0x3abd9357,0x3b778e43,0x3b8b6224,0x3b9205eb, -0x3c014a7b,0x3bd43f2e,0x3b87bedc,0xb9a6dd3d,0xbb713ff1,0xbb53ce84,0xbb95b2ca,0xba8a7ac6,0xbb45fa18,0xbbc22fe4,0xbc0f26ee,0xbc7c4a2a,0xbc9e98e6,0xbcaac420,0xbc999595,0xbc56d116,0xbc1acff2,0xbc22b72d,0xbc5a6152,0xbc7314df,0xbc4f4c07,0xbc90531f,0xbc6d32bb,0xbb866927,0xbbad531e, -0xbc27fc30,0x3b3a1aef,0x3c577378,0x3c358b25,0x3b4e8339,0xbbc9c384,0xbbf86097,0xba4b7568,0x3a0a9714,0x3b96fbd8,0x3c4a77b1,0x3b47dcba,0xb9d0fb75,0x3af84d09,0x3a0167d7,0x3a83618a,0x3b16d741,0x3a6cb6a0,0x3b4cd441,0xb9a7a748,0xbbbdb077,0xbb4ba166,0xbb55aadd,0x3a01be02,0xba5aa98f, -0xbba7c0c2,0xbc590690,0xbc92ff47,0xbc9f4a45,0xbc4cbcbb,0xbc3a344d,0xbc9bfa0c,0xbc2c53de,0xbc325a02,0xbc92dabb,0xbc61be71,0xbc33a5ca,0xbc7273f6,0xbcd58cd8,0xbca25bd6,0x3b8546df,0x3bbf22bb,0x3ba65db8,0x3b4b7ba8,0x3b0072a5,0x3af0cb18,0x3b115070,0x3bc733df,0x3bca89f2,0x3b268f41, -0x3a3488e8,0xba26c7a8,0x3a6d1bc7,0x3ab67d15,0x3b282f5a,0xbae0e00f,0xbbf4d00e,0xbc0999ca,0xbc34f3a1,0xbb9edc6c,0xbb22d578,0xbae57583,0xba5fb304,0x3ab03687,0x3bd41090,0xbbcb1819,0xbc165d6e,0xbbb59b10,0xbaef44b2,0x3ab9003a,0x3ba4a67c,0xbb03a341,0x3c2ae5bf,0x3c80ca5c,0x3c95e9cb, -0x3c5d468c,0x3bb250f9,0x3ad86da7,0x3b58bb21,0x3b86b38e,0x3b75b574,0x3b423350,0x3a826248,0x3a327909,0x3a580556,0x3b0874c3,0x3ab957d8,0xba53632c,0x38b7446c,0xbb19e689,0xbb666acc,0xbb955914,0xbb82c0c4,0xbb095d73,0xbb2ffbd7,0xbb7be926,0xbbdc1f3a,0xbc1a3eb3,0xbc41a10e,0xbc5561cf, -0xbc367f5d,0xbc888139,0xbcb19ff1,0xbce55e85,0xbc7fac84,0xbc24aa1d,0xbc6259d8,0x3b23b9f6,0xbc6b486f,0xbbd774b2,0xbc10ff69,0xbc00b40d,0xb9cc0ab3,0xbae562f9,0xbaaa7aeb,0xba34fd1a,0xb9bd5513,0x3a0fee4a,0x3a5a9a43,0x3a5e4e99,0x395c631e,0xba9fcf57,0xbade372f,0xbb0b65c9,0xbb1d2fe0, -0xbaa3eec7,0x3a6675a9,0xb9f4e57a,0xbb72eddb,0xbb94dbf3,0xbba3d402,0xbb7c4abc,0xbb5a1539,0xbb45682e,0xbb735fdd,0xbab0bb19,0x3b0fbd05,0x3b8ba6a6,0x3ba0a2f9,0x39eb0e66,0xbbe63777,0xbc73d446,0xbcbcf114,0xbc849504,0xbc8d7cc5,0xbb5adc92,0x3b954176,0xba839a8b,0xbb1ac04f,0xbabdab6c, -0xbaadbc25,0xbb0b0de9,0xbaf5b3a7,0xbb228090,0xbb4db400,0xbb77228a,0xbb6a43dd,0xbb41b3a3,0xbb014b0a,0xba7e6353,0x3a19293f,0xba89017b,0xb962e3c9,0xbabec9e2,0x39f6728b,0x3ae20693,0x39965df3,0xb9862825,0xbb0b7751,0xbb9f5394,0xbbb44144,0xbbf8dc5b,0xbc468392,0xbc27df9e,0xbc362724, -0xbc75ea26,0xbc8920fc,0xbc8f1abf,0xbc8d6471,0xbc92b16a,0xbc0937a5,0xbbf5a784,0xbafc51dd,0xbbe54585,0xbc20a452,0xbc45a6d4,0xbc491bce,0xbc2cc90d,0xbc203cc8,0xbc0614e1,0xbbeaab4b,0xbbc0a763,0xbbb28314,0xbbab5fdd,0xbb82bd3a,0xbb321fc4,0xba0f7145,0x3a7f7edc,0x3ac19d10,0x3ab3a421, -0xba0f1db6,0xbb200435,0xbb5c2b1f,0xbb8ec961,0xbb78cb1e,0xbabf496f,0xbac7bcba,0xba64ba56,0x38869be5,0xbaf1f2a1,0xbb95214a,0xbc05e7bb,0xbbd0586a,0xbbc425b8,0xbbc5597e,0xbbce1c43,0xbba9e848,0xbb6eb746,0xbb5392e8,0xbb80b24d,0xbb0436ac,0xbb746b26,0xbba9be12,0xbbe640d4,0xbbdeb234, -0xbc01a728,0xbc060eaf,0xbc0ad706,0xbbdae894,0xbbe9f231,0xbb7697bf,0xbaf7d7f0,0x3a8f6604,0x39e2de64,0x3996ae69,0xba36802a,0xbab7a3b1,0xba6548ab,0xba626180,0xba90326c,0xbad24481,0xbafd110c,0xbb5d91c2,0xbb964a19,0xbbb6f6af,0xbbeb9fef,0xbc050c01,0xbc1c78a0,0xbc0504f0,0xbbe7f889, -0xbbc9c6a0,0xbbb1680e,0xbbb09799,0xbbbae790,0xbaf95d63,0xbbb8edef,0xbba7fe08,0xbb9e0812,0xbbbb86c3,0xbbb9a0cd,0xbbc1ce07,0xbbc4e73a,0xbba181f6,0xbbbcc44a,0xbbb250a6,0xbbb13860,0xbb7b1ab4,0xbb782d0e,0xbb9aeee6,0xbb714216,0xba8b3fcc,0xbb1d80f5,0xbac8d9af,0xbaea8719,0xbae3a06d, -0xbad6cba8,0xbac47c2c,0xbaa4f04f,0xbb09df0e,0xbb44dfa5,0xbb83929a,0xbb9fe6d3,0xbbc16c25,0xbbecea2a,0xbbde0cf6,0xbbd8c82d,0xbbcdbd19,0xbbc22e48,0xbbabfff5,0xbbbba42c,0xbb9ca112,0xbb0e5ece,0x3b031d6d,0xbbbdbed9,0xbb25f895,0x3aa6cbaa,0x3acaae32,0x3aeed5af,0x3b01b934,0x3b22383f, -0x3b3b9cfd,0x3b4f6024,0xbb207051,0xbbb29461,0x3b51b5f1,0xbae724df,0xbb857f71,0xbb8c0fc1,0xbb808505,0xbb8536d4,0xbb8111d2,0xbb812c55,0xbb81243d,0xbb77cf74,0xbb8e701b,0xbb9a7717,0xbba6b955,0xbbb4974d,0xbbbf76f9,0xbbcfa248,0xbbc3e499,0xbbbed14c,0xbbb917df,0xbbb7567b,0xbbca9c2a, -0x3b8ba31e,0x3b62fb5a,0x3bdd5a52,0x3a348c15,0xbba4b3f4,0xbc2dde77,0x3b464fc3,0xbb73c719,0xbc1f7f9e,0xbc1c1a15,0xbc1a45b1,0xbc1110a2,0xbc209c68,0xbc239e41,0xbc1ebb94,0xbb92a8cb,0x3ac2dc1c,0xbc3a4d4d,0xbba846ae,0xb8c07f8c,0x3bc569e8,0x3b8272a3,0x3b960ad9,0x3b8ceaf4,0x3b842325, -0x3b7dd32a,0x3b6cd654,0x3b8642a4,0x3b8cdb04,0x3b933c30,0x3b943ded,0x3b978b96,0x3ba6310a,0x3b8a6c63,0x3b77c70c,0x3b49d315,0x3b70eacc,0x3b6e160c,0x3bc3bbab,0xbbc362d0,0x3b75ef27,0xbaaee745,0x39c557ae,0x3b4e748a,0x3a6fecb2,0x3b8cf6a8,0x3b87bb66,0x3b05d497,0x3b6d310a,0x3b4ee5e5, -0x3b5a8632,0xba80e012,0xba5c73f5,0xb986baaa,0x3a12bbb9,0xbbc9e0c4,0x3b987410,0x3bbd8e43,0x3bb5c1ae,0x3ba9542b,0x3b8f532d,0x3b85b204,0x3b76a0bc,0x3baab1a1,0x3bc2755c,0x3bc56fb6,0x3bc38395,0x3bbde970,0x3bcdb070,0x3b8bb6cd,0x3b4acc4c,0x3ad9550f,0x3b2ad492,0x3b8ffe06,0x3bf49c2c, -0x3b211bef,0x3b4fca9f,0xbafc39c4,0x3af3960b,0x3b171027,0x3a02a64c,0x3b1b9294,0x3b9edea4,0x3b2085f7,0x3ba65855,0x3a861c61,0x3b8f7d9a,0xbac56e3c,0xba6de3d2,0xbac9264e,0xba7fcfad,0xba9a655b,0x3b5d1add,0x3c039fd2,0x3bdd463d,0x3bc87553,0x3b8e558b,0x3b682841,0x3b271e8f,0x3bab5307, -0x3bd6c08c,0x3bf10734,0x3bfaeeb1,0x3bfb0bcd,0x3c1a9deb,0x3b97e15d,0x3b17ac23,0x3a03b0d8,0x3ac00453,0x3b568a06,0x3bbac557,0x3a6bbed2,0x3b0d2bef,0xba97bfbf,0x3bbf1931,0x3bd6d01f,0x3aed8ec0,0x3ba6b98d,0x3ba11d4e,0x3bac6712,0x3bdb02c4,0x3be226b0,0x3bb87db2,0x3a840559,0xba184255, -0xbb7dd61e,0xba273b1d,0xbb32597f,0x3b5e1a8f,0x3c1c43dc,0x3c06721a,0x3be77945,0x3b8c726a,0x3b5cd026,0x3b48eb8a,0x3c00d542,0x3c32a541,0x3c341bdf,0x3c233d55,0x3c10f230,0x3c283105,0x3b4875df,0xb9a9b439,0xbb07ba57,0xba7ba883,0x3c4bca0c,0x3c3e9b90,0x3c48bd73,0x3c42d4bc,0x3a91ad47, -0xbc0150d7,0xbbf38d7b,0xba934a94,0x3a019389,0x3b97ef49,0x3c408198,0x3b66077f,0x38a18d0d,0x3a979e7f,0x3a793398,0x3b4c4ec3,0x3b050344,0x3bc39dc8,0x3b5090c3,0x3bbeaddb,0x3c4050f3,0x3c10ec89,0x3c1bb3f2,0x3bf34134,0x3baa9a4e,0xb9295fa9,0xb9e881bf,0xba132c72,0x3a845914,0x3c1ad3bf, -0x3c598676,0x3c120ea2,0x3c504cb0,0x3c19a890,0xb9207023,0x3b9020c1,0xbb42e3a0,0xbbf9eeb2,0xbcaf2e32,0xbc79a462,0x3bd6c7ef,0x3c08b677,0x3bf39c17,0x3b833c9e,0x3b1ee7e0,0x3b0dbc02,0x3b0d2b5e,0x3bba7347,0x3bc7c497,0x3b70da34,0x3b350a45,0x3ada4281,0x3b1aea03,0x3b236203,0xb9eb0978, -0x3ad35692,0x3bc01b27,0x3be63b83,0x3c3df5b5,0x3c2f4f46,0x3bf51e73,0x3b447f5f,0xb967231b,0x3adc7a19,0x3c1af836,0xbb099db3,0xbbaa2bc6,0xbb4f0277,0x3b250495,0x3bc55c93,0x3bfb9a32,0x3afc9da7,0x3c59f733,0x3c923bad,0x3c7b23d3,0x3c54fc0c,0x3b31f31d,0x3a4ee11c,0x3b02aaab,0x3bc3b764, -0x3b9c422e,0x3b8444d0,0x3ac07305,0x3ad0855d,0x3ab8198a,0x3ae23bde,0x3b174da1,0x3b1643df,0x391acb96,0x3aafa34c,0xba2124ab,0x3a093720,0x3b291d7f,0x39b907d1,0x3a12a93c,0x3c234dd8,0x3c88c665,0x3ca25ddf,0x3c9defa1,0x3c62518a,0x3ba73037,0x3bd6614b,0x3c355721,0x3c47c7ab,0x3cde8a53, -0x3cd8aa4a,0x3c71d2a4,0x3c3c6994,0x3aeab412,0xbbf9443a,0xbc16ff81,0xbb8c6b22,0xba41b8a4,0x3a931a30,0xb99730fe,0x3a58c71e,0xb98fbaf9,0x39046800,0x3a2b4929,0x3a1d5c15,0xb91119a2,0xba10ad8f,0xba7bb21e,0xbaffa0b9,0xbab1dc06,0x3a192721,0xba6499b7,0x3a8c7117,0x3b93e03b,0x3bdeb864, -0x3c0aa44a,0x3c099314,0x3bc79cda,0x3b6a89db,0x3b5f9b02,0x3bb3cfe4,0x3bebd3a9,0x3c1eb134,0x3c376a41,0x3c1bb59c,0x3c82944b,0x3c9cef3c,0x3cb77300,0x3c178d2a,0x3c7d6a82,0x3be39803,0xbb9fd533,0xba191381,0x3a1abfbb,0xba42d4a5,0x397cb891,0x397e6b14,0xba993530,0xb9760436,0xbac34562, -0xbb34177f,0xbb4373aa,0xbafb2bf4,0xbaf4e8d3,0xba66948c,0x3ac83501,0x3a530518,0xba554914,0x3b086348,0x3b382ce4,0x3af3f774,0x3b1c9035,0x3ae7bba4,0x3b2b7317,0x3b8dc613,0x3ba3c45d,0x3ba26be3,0x3b9bea13,0x3bbeb973,0x3c01d911,0x3c36d5e4,0x3c3d9292,0x3c36e048,0x3c57dcce,0x3c4a6d9e, -0x3b81ffcc,0xb9e8d976,0xbc0d9503,0xbbf59889,0xbc3d95a4,0xbc399fc3,0xbc25b99c,0xbc1335f5,0xbbf1ea4b,0xbbd8d4ac,0xbbb1a394,0xbb99fece,0xbb7f0fb6,0xbb7ff981,0xbb35b233,0xbadea152,0x39b14631,0x3a9ef887,0x3b0a3e04,0x3a94c773,0x3b46310f,0x3b73b7dc,0x3b6ae575,0x3b3a20df,0x3b498325, -0x3b96c015,0x3b838685,0x3b42b9f4,0x3a8e801a,0x3abfa023,0x3b634868,0x3c0d759e,0x3beae563,0x3bca66ac,0x3ba433e8,0x3b7a284a,0x3b455c5b,0x3a9ac437,0xbac29edb,0xb9efc15b,0xbafb5784,0xbb3d6552,0xbb9d58a8,0xbbcc40ed,0xbbf9c204,0xbbe2ce21,0xbc0da4ce,0xbbd4c6d8,0xbc00816b,0xbbd3e766, -0xbb920548,0xbabf282c,0x3a07140e,0x3a16d1ec,0x39fd50ad,0x3b3b6405,0x3b5c3b34,0x3b026ef6,0x3ad953df,0x3a978da9,0x3a23368f,0xb92032fb,0x3a5f0302,0x3afa672d,0x3b3c34a8,0x3b46d853,0x3b347c35,0x3b34640b,0x3b1fd0b5,0x3b2b7ecf,0x3b3dbedf,0x3b135cb3,0xba46f1bf,0xba65ec04,0xbbd7e9c7, -0xbb03f9b7,0xbb814c95,0xbb82d622,0xbb0f81a8,0xbb279219,0xba78e1f2,0xba6f67df,0xbb0ad1c3,0xba4fcc7c,0xba1914f8,0xba8f9d3d,0xbb138756,0xbb0f39be,0xba82d9bf,0xba68d9eb,0xbb31a0a7,0xb9a3cf22,0xba8e1cd5,0xba41eaa2,0xba2bc24a,0xba2a9ff7,0xba0cb59f,0xba226fbc,0x38bc607a,0x3a0a4033, -0x3a91b7b8,0x3ada68d9,0x3b19a593,0x3b3f3458,0x3b160cb3,0x3abaa87c,0x3a211721,0xb8e6452e,0xb9549916,0x3a118edb,0xbb0d3ab5,0xbba41f0b,0xbc02ab89,0xba38d3a6,0xbb9683b5,0xbc005e11,0xbc078e30,0xbc0ae175,0xbc063094,0xbc114306,0xbc1604f5,0xbc166a0f,0xbb99b51a,0xba802f37,0xbc055675, -0xbb8d21b2,0xbabf8eba,0x39e47f0f,0xb9048887,0x38879bf3,0xb78a3694,0x37ab27f2,0x38461f10,0x37f9084b,0x395e82a9,0x39b7b563,0x39fb21e6,0x3a259e00,0x3a462d42,0x3a8fd849,0x3a33e1d0,0x3a12abb9,0x39d57443,0x399848f0,0xb8dd8154,0xbb93080c,0xbb789448,0xbbc388d6,0x3ae63a06,0x3bd532e0, -0x3bfa5b7e,0xba85f5dc,0x3bad5809,0x3c0167be,0x3c115762,0x3c1174ed,0x3bfe2cc2,0x3c0c5755,0x3c0b34e1,0x3c0ab416,0x3ba59696,0xba2cbdd5,0x3bfe3f71,0x3babd8c1,0x3ab076ba,0xbbc1f996,0xbb77dd82,0xbb91dc5c,0xbb9da97f,0xbba6905c,0xbba7fd99,0xbba4e33f,0xbb9481ce,0xbb91f9f9,0xbb975af1, -0xbb9b170f,0xbb9b4a55,0xbb9287b6,0xbb9dde93,0xbb9a69b3,0xbb8440cc,0xbb908348,0xbb9ccded,0xbb7d9d9d,0x3bf174dc,0xbb334a9f,0xb7ee9168,0x3aee52e3,0xb930e0cb,0xba2df8a1,0xbad3f9ef,0xba133397,0x3b098c0c,0xba1f4573,0xba88b128,0x3a0c6931,0x398d9256,0xbaa942b5,0xbabbf529,0xbb12083c, -0x3ba72679,0xbb6410d2,0xbb9b4eed,0xbb9d9f6a,0xbbd590e8,0xbbf3c7ca,0xbbf99351,0xbbe28246,0xbba66c9c,0xbb8e552a,0xbba52d28,0xbbb4f70d,0xbbbcea23,0xbba68e23,0xbbb86ce4,0xbbad1197,0xbb80d36c,0xbb90fd20,0xbbb634c3,0xbab24dff,0x3b84fbd6,0x3aad6590,0x392c274a,0x3b0009a1,0x3b1d54e8, -0xb9d50c02,0x3b864f38,0x3b0bae5f,0x3b8f6ffe,0xba0858d3,0x3b31ddb6,0x3ae7dd8e,0x3a1ace4b,0xbb17f28b,0xbb0db2b5,0xbacab0ad,0x3a948faa,0xba9e942d,0xbba71a46,0xbba0eb64,0xbc0031cc,0xbc1b27f2,0xbc210390,0xbc0d156d,0xbbbfea15,0xbba46bdd,0xbbce7641,0xbbdc52ad,0xbbeaa2ea,0xbbbda01a, -0xbbe648ae,0xbbd72953,0xbb83dddf,0xbba11924,0xbbcef5c8,0xba0f515a,0x3b5211c3,0xbac68fed,0xbb593c4a,0x3b85403e,0x3ba65809,0x3aaff7a2,0x3b824b1b,0x3b9b2420,0x3b72468b,0x3bc859c6,0x3ba4cc5e,0x3b6d918a,0xba9c7a6a,0xbb8effe8,0xbaf288d3,0xbb8e689f,0x3a7fe45a,0xba7ccdee,0xbba5fd87, -0xbbb5057a,0xbc327eb4,0xbc6355f5,0xbc695480,0xbc399151,0xbbaa4216,0xbb19dbfd,0xbbaa3331,0xbbe5b6b5,0xbbfe0389,0xbbc3498d,0xbbe13543,0xbbb743d0,0xbb2d8057,0xbb599e34,0xbc11d850,0x3bb4cc15,0x3c9878ae,0x3c7ab7d5,0x3bd40136,0xbb9d09a2,0xbc0c3d00,0xbb0eacc7,0xb979a6e3,0x3b5c0ae1, -0x3c26a876,0x3b40508b,0xb990225d,0x3a607d61,0x3a7fc581,0x3aa6d25e,0x3afff3bb,0x3a209d2b,0x3bac064a,0x3b44cf0f,0xbba84b7d,0xbb62c370,0xbbc4e818,0xba69a676,0xbb512a17,0xbc1bdead,0xbc74e89c,0xbc91985e,0xbc874698,0xbc1be0d7,0xbbe70f04,0xbc25acaa,0xbbd2a430,0xbc141817,0xbc7cbe22, -0xbc3313e6,0xbc7d192d,0xbc6f27f8,0xbc9ce39e,0xbc8b6aee,0xba94f211,0x3be9f68a,0x3beb7a33,0x3b8601f8,0x3ab32672,0x3aa10c8e,0x3aa05cd3,0x3b97e626,0x3bafde2e,0x3b3c2402,0x3a3f30a5,0xb9264116,0x3b16267a,0x3b0f2703,0x3b6a2075,0xb99fea72,0xbb90d35b,0xbb6514fd,0xbbd74111,0xbb35dc46, -0xbaaff31c,0x39d4a525,0x398f26ba,0x3b0a49c6,0x3bd872f6,0xbbb800c0,0xbbe9e5d0,0xba110053,0x3b101893,0x3bb20f04,0x3c1406cc,0xbb30cfce,0x3c1487af,0x3c80fc90,0x3c8db37b,0x3c3dbf54,0x3b8482b4,0xbaec0eae,0x3ad75090,0x3bc0b6b9,0x3b9cba58,0x3b4d5364,0x3a49f38d,0x39c38b29,0x3984b30c, -0x3a792904,0x3b14a2b5,0x3a3c4ad1,0x3a6f4038,0xbad1b93e,0xba794c69,0xbb2d3c08,0xbb8d6174,0xbaee37b0,0xbb1edeaf,0xbaaf9ef9,0xbb118e62,0xbb35fc74,0xbbb81b37,0xbc149789,0xbc46d5df,0xbc5f30a6,0xbc5a7715,0xbc5d6a30,0x393307c9,0x3b0c8458,0xbbea6aa0,0x3b176d59,0xbc1844ce,0xbbd862bc, -0xbc0959e7,0xbbe90428,0x3812416d,0xba847292,0xba4f8029,0xb9c5e21d,0xba778209,0xba09197c,0x39674130,0xba271f17,0xba8dde32,0xba5a2cfe,0xbafd7c35,0xbb14f94d,0xbb2167ee,0xbaa3c979,0x3ad11493,0xbacc5c63,0xbb832a1c,0xbb414815,0xbb355d47,0xba5073e8,0xb93059d6,0x3ae17aba,0x3b1dc548, -0x3ba9bd17,0x3be95594,0x3c2c9a2f,0x3c0a4208,0xbb37db98,0xbb3cb5c4,0xbbae5c38,0xbc08e301,0xbbc61dd9,0xbb29049f,0x3bee7e12,0x3c23d20d,0x3b838e1d,0x3b231450,0x3b275e56,0x3ab6c2bb,0x3a34c002,0x39d43515,0xba7c54cd,0xba6c344a,0xbb468f0e,0xbb5d3997,0xbb153f76,0xbb0e0395,0xba8b86d2, -0x398e559e,0x38f5cbcc,0x3b13c338,0xb9b00f73,0x3a7a5242,0x3b1a555e,0x3a780a7f,0x3a807e0b,0xb7e67ccf,0xbaa0fd78,0xbab9a29e,0xbb27773e,0xbb9eb0fa,0xbb7c9f8e,0xbb3f8045,0xbb1babae,0xbb826bf8,0xbba0beb2,0xbbae890c,0xbb448b06,0xbbc068df,0xbb54a8c3,0xbac01969,0xbbc7c440,0xbc0c56b1, -0xbc2ac50a,0xbc336a55,0xbc074e85,0xbc0bcbca,0xbbf575f9,0xbbde5ef5,0xbb9ec149,0xbb8caf75,0xbb8be3d1,0xbb81af4c,0xbb3a3107,0xba86e66f,0x3aa35abf,0x3ae0eae8,0x3ab481c3,0xb99d5327,0xba9beb81,0xba8e5943,0xbaeb5852,0xba8b90ee,0x39b9d2ab,0x3960904b,0x3916d267,0xb95a980b,0xbab7dea1, -0xbb67fdea,0xbbc3bf0a,0xbbad3cbf,0xbb961426,0xbba1a0e7,0xbb78379f,0xbb4a1a36,0xba8b25ca,0x39e80374,0xbab997d8,0xb98de94b,0xbb213d5e,0xbb93afad,0xbbe4d47d,0xbbce5095,0xbbf2828f,0xbbdd126b,0xbc01ba57,0xbbce6029,0xbbd98252,0xbb7786b5,0xbb10a191,0x39074154,0x39ac5f92,0x3ac86471, -0x3a2793e2,0xba58bec6,0xb8b579a1,0xb9a1b089,0xba170a73,0xba9f13a0,0xbaea6911,0xbb064712,0xbb0757a2,0xbb0208fd,0xbb3a619c,0xbb54197d,0xbb85a802,0xbb4ed816,0xbb2e1421,0xbb2252a3,0xbb0e2bab,0xbb7735a5,0xbb68ffbf,0x36de6551,0xbb6f116c,0xbb199d99,0xbb1a22b7,0xbb509a10,0xbb399f25, -0xbb6691ba,0xbb4f26be,0xbad8fa89,0xbb324568,0xbb4c728c,0xbb3d8ba3,0xbafe98ff,0xbb2dc677,0xbb4feac0,0xbb4cce8d,0xba4461ac,0xbb402db2,0xbb204f05,0xbb1bd1f2,0xbb1a9743,0xbb0d4d8c,0xbafcc911,0xbada568f,0xbb25fd6f,0xbb5cac90,0xbb838388,0xbb93569d,0xbba3edc3,0xbbb9022d,0xbbaf03e1, -0xbba4ad48,0xbb96e323,0xbb856f94,0xbb843d60,0xbb983093,0xbac040bb,0x3a6465c6,0x3af0c9bc,0xbb2dbb7a,0x3a0e4c9d,0x3b044f17,0x3b10f0f0,0x3b14f9e7,0x3af0ab32,0x3b1c70cf,0x3b2f25ba,0x3b2bda7e,0x3a11093a,0xbb2997b3,0x3b2b1e9d,0x3a3fd2ff,0xbae02a9f,0xbb91a7b9,0xbb72fc27,0xbb7e2a7f, -0xbb7876d9,0xbb78b62e,0xbb7a2d3d,0xbb715209,0xbb82f5e9,0xbb87f888,0xbb8fa3e8,0xbb97719f,0xbb9d7e36,0xbba5dc67,0xbb9b3214,0xbb963944,0xbb9257d9,0xbb8ec558,0xbba8b417,0x3a2dfdcc,0x39dfeb2c,0x3b429f41,0xbb973d2c,0xbbf9a600,0xbbd482b6,0xbb33acc3,0xbbe04483,0xbbe98fb7,0xbbdf96e5, -0xbbd7d355,0xbbb158ba,0xbbd6b1b9,0xbbd7214b,0xbbb83048,0xbbf20fae,0xbb8331e8,0xbbd7922b,0xbbf8b947,0xbba9441b,0x3b1f82d8,0x3a201c21,0x3a461134,0x3a0e1873,0x39a22a9b,0x396fa5ac,0x38b0120e,0x3a35eb27,0x3a63cabc,0x3a62e1ed,0x3a2dd292,0x3a197149,0x3a655845,0x37dfa45b,0xb92bc9e4, -0x383b58df,0x399d899b,0x3a4b635d,0x3a403112,0xbbdf7877,0xb94c2103,0xbb966213,0xbb021881,0x39042521,0xbaa8e53b,0x3aac1e98,0x39a67d8d,0xbac79120,0xba5832e3,0xb9ac92e2,0xb91638a2,0xbb4298f3,0xbb3de20d,0xbb825a70,0xbb0de6bb,0xbbd38da4,0x39014ff9,0x3abe3010,0x39230176,0xb8287a4c, -0xba33562c,0xb9f91c4e,0xb9b3fa91,0x3ad30fce,0x3b0c2410,0x3aba3010,0x3a35ed51,0xb8aabbec,0x395339c9,0xbaf25688,0xbb0599ed,0xba8ffdd8,0xba5336df,0x3ad4dc0e,0x3b12ab04,0xbb0a0088,0xb959c15f,0xbb8a6afe,0xb9c4e8f7,0x39a92b55,0xba672388,0x3a75909d,0x3b81dffd,0x3a3d3cf1,0x3b3c53a1, -0xba896c31,0x3b274b50,0xbb5c55bf,0xbb449747,0xbb5bc47b,0xbb486a48,0xbb864aa4,0xb97064d2,0x3b2ebb1e,0x39befe30,0xb9e9bff6,0xbb076e6e,0xbb0e3a5e,0xbb2d3e8e,0x3a911a5b,0x3b11ea59,0x3ae3737e,0x3a5cbd96,0xb9c144cc,0x3a6a1cd5,0xbb8163d8,0xbb8c041a,0xbadaa9f2,0xbb018670,0x3ad0c36e, -0x3a681b72,0xbb26bd09,0xbaa0abf0,0xbb813459,0x3b594286,0x3bc3246e,0x3b1e5ccf,0x3bb308c7,0x3baee833,0x3bbf5d14,0x3bada56c,0x3ba57466,0x3bb70e4d,0xb9b5f1e1,0xbae63f10,0xbb994989,0xbad057e9,0xbb84fb08,0x3a2440d4,0x3b45185e,0xba523d3e,0xbb2a1761,0xbb9fdbc6,0xbb8f74f9,0xbb5609b9, -0x3b687799,0x3bcc054d,0x3b832641,0x3a554017,0xbb0daf71,0xbac64ab3,0xbc023b43,0xbbefc543,0xbb306bf2,0xbb4593a8,0x3ba47b9b,0x3b5b9bb1,0x3bcb794a,0x3c13c684,0x3b0f1f52,0xbc03915d,0xbc1e9645,0xbb8509a3,0xba6d3e4e,0x3b31d4a6,0x3c0c5fc5,0x3b53a506,0x39baea1d,0xb9e5aa71,0x3a4af2e6, -0x3b2d350b,0xb915c223,0x3b269d2a,0xba36c52e,0x3a6967df,0x3baed09f,0x3b95f38a,0x3bf1d45a,0x3ba03363,0x3b48a232,0xb9dfdf1d,0xbafc5088,0xbb18c69c,0xb8b33c86,0x3ba7fe26,0x3bc08d63,0x3a8acbe2,0x3ab4d43c,0xbae59b99,0xbbc298d7,0xbb31a079,0xbb652927,0xbc1c934f,0xbcb69255,0xbc892d60, -0xbb7ab4db,0x3bda7f85,0x3c1a1c9d,0x3b9f1639,0x3ad236ff,0x3a37a28e,0x3a6e73be,0x3b8609ae,0x3ba234c8,0x3b8479c3,0x3b0fbb47,0x3a0bfd70,0x3a3f40e9,0x3aed15a6,0xba3aa81d,0xb9cc16d7,0x3aa40282,0xba2699ea,0x389acc00,0x3ae99ea7,0x3acca43a,0x361a255b,0xba7ff664,0x3aae638d,0x3bfd0105, -0xbb6f089e,0xbbdf607d,0xbb3e7152,0xbb1ab64c,0x3b1fef8e,0x3c3a705c,0x3a15efa1,0x3c0a0a01,0x3c812c64,0x3c4dfcf2,0x3c2c301e,0x3809bf4f,0xbb51e3ab,0xbabbc5e0,0x3bc561f4,0x3b99dc48,0x3b832bd4,0x3a49ab4a,0x3a5b4367,0x3a1a82ec,0x3a31e5f0,0x3b0391ed,0x3b0e971c,0xba56d6f5,0xb9370d62, -0xbb3fa2f4,0xba8d604b,0x3ae85937,0xb96d3636,0x3a05f902,0x3bc0ca7c,0x3c10ddc6,0x3c1af45d,0x3c1733e6,0x3bc9be7f,0xb940a4a0,0x3b7b0201,0x3bb2cf1a,0x39db1e51,0x3be4e1fb,0x3b70c24e,0xbbbf72cd,0x3a6e4e9d,0xbbf80490,0xbc1502b0,0xbc138acb,0xbbafa305,0xba6bfd5c,0x39ea75ac,0x39a9b881, -0x3a49013b,0xba301586,0xba395484,0xb9aa0c1a,0xba83b73e,0xbab92d12,0xba6bf920,0xbafdc5b5,0xbb4d3b58,0xbb30c6c9,0xba2c3666,0xbb1bfa5a,0xbab7f234,0x3a6df7c0,0x3aa6eb31,0x3b12b479,0x3b07b177,0x3aa93a18,0x3b090bda,0x3b05def3,0x3b490125,0x3b155e9d,0x3bd0bb77,0x3bc005a8,0x3ad28b7d, -0xba90db61,0xbaf9aa98,0xbabe1aeb,0xbbc8c15f,0x3b72233f,0x3a69fca8,0xbb01ede7,0x39f1f724,0x3aa0f07f,0x3a4b6e88,0x3a95f101,0x39b2c636,0xba8201b3,0xb928afdf,0xba092ea2,0xbb0cc516,0xbb3cadf8,0xbb1a31d8,0xbb16a9f2,0xba9c6793,0x3a32fd45,0xb986f71d,0xbafc504e,0x3a0932de,0x3b0b78f5, -0x3adf37ea,0x3b0ff83f,0x3a5bc1b2,0xb90b83bc,0xbab8cd3c,0xbb0c11d4,0xbb596a7f,0xbb93976b,0xba320970,0x3b089e80,0x3bcbfcd0,0x3b2218cd,0x39bc9bfc,0x3b17fdbc,0x3aa3f469,0xbb38d4e6,0xbbd225f4,0xbc2359a8,0xbc2c3128,0xbc47c41a,0xbc46355e,0xbc218ceb,0xbc00642f,0xbbe1d49e,0xbbcbe7db, -0xbb9fb24c,0xbb8dcf35,0xbb62866e,0xbb564ecd,0xbb685a72,0xbb69bf46,0xbb2187de,0x39a3467f,0x3b034892,0x3acb1f8a,0x3b2a30bb,0x3b27de75,0x3b2ba901,0x394711ef,0x35855fcc,0x3a7fb8ec,0x3b0091db,0x3b3e84fc,0x3b2d296c,0x3b1652b1,0x3b055024,0x3b3c234a,0x3b34b515,0x3ad5c17f,0xba089f3b, -0xbb15cc93,0x3ad90de8,0x37d74474,0xbb522f98,0xbb3d0966,0xbb89e423,0xbb9ad951,0xbbc4fc71,0xbbea7982,0xbc01c225,0xbbdefd99,0xbc0cb066,0xbbc5f3fe,0xbbea07a5,0xbbb80acd,0xbb94475d,0xbb17341a,0xbab76fe2,0xba74ae63,0xba9d6967,0x3adb7494,0x3b3f22a7,0x3afb1aff,0x3b15163f,0x3ae00b69, -0x3aa2c7e9,0x39d69217,0x3a23ef4d,0x3a259107,0x3a441f43,0x3a4f0ce3,0x3a7c3a57,0x3a91fd14,0x3a894dcf,0x3a8f56ca,0x3adcbdc1,0x3a815f47,0xbace6e6f,0xbaf78390,0xbb9f4d83,0xbb0036dc,0xbb686d8e,0xbb59a37d,0xbb0d8a48,0xbb172a94,0xbab87592,0xbb04f7f2,0xbb61cbab,0xbb2b4d03,0xbb0e8308, -0xbb4380ee,0xbb67f126,0xbb411202,0xbb28c3c5,0xbaca0cab,0xbb4eceec,0xb8a4448a,0xb9b4dfa0,0xb9db360b,0xb9c3fca4,0xb9e350a3,0xb9b00f15,0xb9965b49,0x3890d418,0x3910ed13,0x38c117dd,0xb884004f,0xb9b1ff17,0xba2da131,0xba44f38e,0xba88f21a,0xbaada07e,0xbad78041,0xba68dcba,0xb901be9b, -0xbb88da4a,0xbbc1ed6b,0xbbb32e46,0xbb4b19d3,0xbbbe8db7,0xbbc7c93c,0xbbd331a8,0xbbd6dba2,0xbbc5caf4,0xbbdbb590,0xbbe2fc6e,0xbbe02092,0xbbd39489,0xbb68d5ed,0xbbc9cffa,0xbbbf32f4,0xbb757973,0x39269c48,0xba347920,0xba038a1c,0xba0716ba,0xb9fb0c43,0xb9ed468f,0xb9e4515d,0xba0b0d96, -0xba1b2c56,0xba24407a,0xba2d4e8e,0xba30cd65,0xba40dbb6,0xba4bcf3c,0xba4cd8e4,0xba454936,0xba42e7a7,0xba9f80b0,0x38967c4d,0xb88b0ef8,0xba51c2d5,0x3ba6cf8e,0x3bb6e72b,0x395e6efc,0x3b7d56f2,0x3babbda8,0x3b02bd1e,0x3b26b34d,0x3b23bf24,0x3ac7ddd2,0x3ad4b35d,0x3ab81aff,0x3aa7c739, -0x3ba035ea,0x3b73ac3e,0xb9490ab1,0x3b942b62,0x3b937884,0xba3dc62d,0x38c47265,0x383b5672,0xb94d2152,0xb9b0d1d6,0xb9904418,0xb8d0a501,0x39ce4f16,0x39fd65b9,0x398fd30d,0x399de7a7,0x39b0b7fe,0x39fd3a27,0x39b9fe0b,0x39549cce,0xb8daf51b,0xb8dca9f3,0xba6d0736,0x3aa78a7a,0x3b952b46, -0x3aacb73c,0x3ac42050,0x3b2678d7,0x3b1b4415,0x3ae33bc0,0x3aeb44f7,0x3b48ea25,0x3b9d8bcb,0x3b37aa25,0x3ad5a466,0x3b5c3615,0x3aa2ab76,0x397c1b65,0x3a9db285,0x399260c2,0x3b2934c9,0x3abbb139,0xb9100524,0x39f4813f,0xb9fc3fed,0xba8d44ed,0xba874517,0xb9a3ad73,0x3abe0c01,0x3b08d117, -0x3ab08289,0x3a8e9c08,0x3a757b83,0x3aa78dc1,0x3aaad661,0x3a6ffe1c,0xb9489ba5,0xb924a6b5,0xbad83cde,0x3b02f2a2,0x3bc34d56,0x3b77d352,0x3992ff37,0x3b285167,0x3b361904,0x3a8fa874,0x3b8f7635,0x3b4acd3d,0x3bb692dd,0x3a5f4155,0x3b08643b,0x3b684570,0x3a78f4fc,0xba0625af,0xba8fd84c, -0xb93f1454,0x3b148406,0x3b007706,0xb8b3ca37,0x3a0541a4,0xba3b3818,0xbae369e4,0xbac141a0,0xb955d2f4,0x3b2c0d3f,0x3b66d40e,0x3b0a3d08,0x3b19bf57,0x3b0e94dd,0x3b27fa15,0x3b21d87a,0x3a951760,0xba5ec27b,0xba269111,0xbb4719e8,0x3ac45015,0x3b90520a,0x3a719d35,0xbb4a3e7d,0x3b813c3a, -0x3bace302,0x3afbf542,0x3b998b8d,0x3bb415dc,0x3b8cc7b2,0x3b8e8531,0x3b81ee74,0x3b831881,0xba924fe6,0xbb525a68,0xbada2ad1,0xbb23d971,0x3a9cf70f,0x3b00196a,0x3977c5d4,0x3a8d6b44,0xba90d1be,0xbb386a9e,0xbb1520fc,0x387df26f,0x3bc599bd,0x3c047747,0x3b9d5006,0x3b85c3e6,0x3b591864, -0x3b710f7f,0x3b8d93af,0x3b4ad01b,0xba5c84f6,0xba1feb4b,0xb9625af1,0x3c049685,0x3c91b587,0x3c808249,0x3bea6254,0xbb7bbeaf,0xbc061c17,0xbb5e1d13,0xb9ba6f18,0x3b2cba03,0x3bdc7319,0x3b536cde,0x3a23a3a4,0xb9cfb9ec,0x3ad17956,0x3b188faf,0x3a96f005,0x3add8fdf,0x3b9cd152,0x3baa58e5, -0x3a7b7843,0x3a134dd6,0xbafd7599,0x3a159520,0xbb0a6da7,0xbc058efb,0xbc2bc7c0,0xbc2ae7be,0xbba8b61a,0x3a20948e,0x3b84a3e8,0x3bb01345,0x3b67dacf,0xbaa64f41,0xbbd81a87,0xbb30da71,0xbc4c060b,0xbc207dc5,0xbc59a6df,0xbc5e854d,0xbbb021fb,0x3bf83fa6,0x3c1ea116,0x3bbc911c,0x3a926607, -0x3984eb36,0x395848b6,0x3b4b310b,0x3b9099e7,0x3b62aa7b,0x3aeffa0f,0x3a8ee184,0x3b4097c5,0x3b0af982,0x3b11ffc7,0x3aea91cd,0x3ad449f9,0x3b6da7d1,0x3b46aa83,0x3b2ce332,0x3af572eb,0x3b06f68a,0x3ab134ed,0x3b29ec71,0x3bc386e9,0xbb5fea8a,0xbb79db93,0x3b812138,0x3baaca6b,0x3c0e59af, -0x3c57176c,0xba58ca32,0x3bf4c8ff,0x3c872b46,0x3c4c73eb,0x3bf31018,0x3a9a6b57,0xbb980fab,0xba927713,0x3bbc0916,0x3ba90917,0x3b691c50,0x3a268db8,0x39ad7e4c,0xb8335345,0x39916c62,0x3b341331,0x3b229d71,0x3a8fdb2b,0x399cabe6,0x3ac685f5,0x39c56af8,0xbb13b88e,0xba711727,0xb98e98a8, -0x3b9283eb,0x3bf37791,0x3c14d0b3,0x3bef394e,0x3b2056b0,0xbb96d1a1,0xbb21f1c1,0x3b66b27e,0x3c397b77,0x3c7f0a5b,0x3c3d3af1,0x3b21c176,0x3ae78345,0xba9bde3a,0xbbedc421,0xbbdd0401,0xbb8552c8,0xb9fea4c0,0x3a5012db,0x3a133b8d,0x3a0b0cfa,0xba0cac8b,0xba75c4cb,0xb95d2d74,0xbab7e48b, -0xbae6c26b,0xb9d9a401,0xbb0238e0,0xbb1ca851,0xbb05036d,0xba9bbc4e,0x394097b4,0xbaf76a54,0xbaa9b30d,0x3a9d38fa,0x3b26ac7b,0x3b7825f8,0x3b81d316,0x3bc04658,0x3c072dc3,0x3c2857e0,0x3c23581d,0x3c5cdb22,0x3c29bb68,0x39ced17d,0x3bbb7ffa,0x3c14d78b,0x3c46b322,0x3bd9a0be,0x3c8379a1, -0x3c67e7c7,0x3c05c18a,0x3bb59d9a,0x3b9670f3,0x3b71f9ac,0x3b1bc2a1,0x3b0cdb27,0x3ab7b6f1,0x3a2211e7,0x3a9d44b2,0xbab9a460,0xbb1e9c76,0xbafbfd9e,0xbb0431f1,0xba8d8dc4,0xb9a7b80c,0x3a9a80fe,0x3b4573f7,0x3abd293b,0x3af6598b,0x3b120290,0x3ab0e803,0x3aeb4ece,0x3b1105fc,0x3b43ae4e, -0x3b2a6bab,0x3b46657f,0x3b8ce18a,0x3bab72c4,0x3c026590,0x3c4a6ce2,0x3c450f1f,0x3c4706be,0x3c55045d,0x3c82a460,0xbaf2fc09,0xb903aa7d,0xbb95c0c7,0xbbcc5f50,0xbc087143,0xbc0bea79,0xbc0b5013,0xbbc510ac,0xbbd418e4,0xbbc59f68,0xbbae3b31,0xbb7a18e8,0xbb48d005,0xbb436093,0xbb5c1b76, -0xbb260042,0xba9cb76f,0x3a594d71,0x3abe7b65,0x3ab2a1cb,0x3aa2efc0,0x3ae5eaca,0x3b1d644c,0x3b1929a6,0x3b2ab4cf,0x3b44f3f4,0x3b473357,0x3b195985,0x3a60a4c7,0x3a141fe2,0x39c15d6f,0x3ab50228,0xb983d169,0xb9ef6cd3,0xbaa64a92,0xba4b1c4e,0x39bccf30,0x3a97f006,0x3adc87e8,0xb8e80192, -0xba7d4deb,0xbb2591ab,0xbb911de3,0xbbd0abdb,0xbbc46126,0xbbcf5a99,0xbbbde17a,0xbbc5742a,0xbbb21b09,0xbb9bcca4,0xbb5c3adb,0xbb0a7437,0xba8af64b,0x394284d9,0x3b153fb5,0x3b465c3e,0x3adc59ed,0x3af3b2c7,0x3abe5145,0x3a90f3d4,0x3a2a470b,0x38e4b5e1,0x3a800101,0x3b0454a2,0x3b4e044b, -0x3b4fc099,0x3b4e060b,0x3b4a4916,0x3b338d2c,0x3b1be959,0x3aeb48d7,0x3ac51595,0xba996c63,0xba3b8917,0xba7e5734,0xbab6572e,0xba4b0899,0xba8ea753,0xba8e6550,0xba6428c5,0xba89a1b1,0xb9d78a24,0x39c5e2f1,0x3911f429,0xb9f4c3ef,0xb995676b,0xb9ee41da,0xba95a90f,0xba1fa12f,0xba97f90f, -0xba0a5e55,0xbace8ac9,0xbafb7f99,0xbacfa558,0xbad750a7,0xbac2cfac,0xbab2318f,0xbaab24e0,0xbacd768a,0xbaef45a7,0xbaecadda,0xbad95164,0xbab1a3ff,0xba86c156,0xba9404f7,0xba8c4e92,0xba8b3146,0xba70c945,0xba439556,0xba659ee2,0x3abff7de,0x3accd847,0xbaa0eaa9,0x3a8313b5,0x3ab55f2a, -0xba0b6cf4,0xba0e38a3,0xba36f5fa,0xbaa0aebb,0xba8e82b9,0xba8c36f0,0xbaaf08e6,0x3aca5901,0x3a75b37c,0xba7e3bde,0x3abdba56,0x3a7b2b56,0xbadd8727,0xba9e9de3,0xbaa8dbb5,0xbaaca334,0xbaaf2644,0xbab45536,0xbab1bbec,0xbaa8bd6d,0xba9adbcd,0xba96f584,0xba8ef4fe,0xba8af4ac,0xba7915d4, -0xba6fc1a3,0xba6390da,0xba619cda,0xba4a5424,0xba8aff7b,0xbb688cdc,0xbb489ef3,0xbb3d52d1,0xbbb7f783,0xbb7b219b,0x3af1eb5e,0xbbbd2193,0xbb8904f6,0x3a13f92c,0x3a8913d3,0x3aa762b2,0x3b08d8b1,0x3ac1ba03,0x3acb3e76,0x3b26315f,0xbb90c648,0xbbcbd090,0x3b0c99c3,0xbb8a5f80,0xbbc3675c, -0xbb49e8e5,0xbb546763,0xbb729573,0xbb7ffbe1,0xbb85965a,0xbb854d91,0xbb837659,0xbb5ef4e4,0xbb5650be,0xbb5f9a5a,0xbb770afa,0xbb825cf0,0xbb81be39,0xbb92071d,0xbb8dffc2,0xbb5b111b,0xbb697f2f,0xbb4474c5,0xbb8fd9c6,0xbaf89479,0xbb6a651a,0xbb960530,0xbb05d94c,0xbb014946,0xbb0e69f4, -0xbae775cf,0xbb2575cf,0xbb1703b7,0xbb6c7b16,0xbb3b1fe6,0xbb1461df,0xbb3cc028,0xbb63288e,0xbbb37ba0,0xbb80ff4a,0xbb1032cd,0xbb8db431,0xbb8047ff,0xbbb0d457,0xbbc24e56,0xbbd26316,0xbbc23ae4,0xbba9ab50,0xbb4d6eee,0xbb31d75c,0xbb7704c4,0xbba20043,0xbbc44826,0xbbc48020,0xbbeacb8a, -0xbbd19aa3,0xbb71d661,0xbb8860e1,0xbb2c578f,0xbb36d8b7,0xbb3f0cb3,0xbae6d484,0xbb6d957d,0xba6e89b0,0xb98cfdbe,0xba947cfc,0x3a8e029f,0x3b274ead,0x3ab9fa48,0x39227b05,0xba8180fb,0x3a7dc81e,0xbb3ed819,0xbb7ebfee,0xbb8bc90f,0xbb80a060,0xbb883d0a,0xbb530338,0xbb8b3afe,0xbbca1054, -0xbbfcb7c0,0xbc11cf3a,0xbc0a6685,0xbc0099db,0xbb80e6ac,0xbb4a67bf,0xbb93e1ae,0xbbc861cf,0xbc03440e,0xbc00a010,0xbc2d0734,0xbc15b2c7,0xbb6a8c41,0xbba19e99,0xbaf9327f,0xbb37a41b,0xbb21fbf1,0xbb4b9ed5,0xbba37c7d,0x3abbcad5,0x3b9c788f,0x3b3a1fcd,0x3ba9986d,0x3bba9182,0x3bc5b230, -0x3b86a120,0x3b5298c9,0x3b9bc4d5,0xbad294ff,0xbb586169,0xbb881f45,0xbb4fa5c0,0xbb42d818,0xbb147a8d,0xbbabf3f7,0xbc17de86,0xbc4ac1ea,0xbc64540b,0xbc4d0b17,0xbc1cddb9,0xbb0d0fe7,0xb8671edc,0xbb6dbbea,0xbc00b2e7,0xbc3b6a8a,0xbc42d2b9,0xbc70623f,0xbc2fb43e,0xbb21696a,0xbb7ff98a, -0xbbb5d6c0,0xbb350e27,0x3b9c722f,0x3c069790,0x3ba4af6e,0xbbb36744,0xbc1ee825,0xbbb2bd6b,0xbabdbd11,0x3ab9be3b,0x3b9b19d0,0x3b540dae,0x3a8f02e2,0xbac649d4,0x3a85ba72,0x3af6a7a2,0xbaa19449,0xba97a336,0xbb0366c7,0xbb2af0a7,0xbb60128a,0xbacbb648,0x3a54583a,0x39a5f875,0xba9d4227, -0xbb606130,0xbc01b8cd,0xbc1137fb,0xbb967c42,0xbb248cf0,0xbb66c5c6,0xbbde9ed9,0xbc1643db,0xbc473a72,0xbc46684d,0xbc23e50e,0xbbe4f3e6,0xbc2484dc,0xbc9d5e46,0xbc87d9ae,0xbc45c541,0x3b8b130e,0x3c2608cc,0x3bc7849a,0x3a8a0c8f,0xba3c0120,0xba16fc01,0x3b18d233,0x3b73e40c,0x3b7539b2, -0x3acb1c54,0xb9675c31,0x38696691,0x3a34df96,0x39380071,0xbacf02eb,0xbb88efc7,0xbbe2a5be,0xbc220edd,0xbbd3102f,0xbb850af2,0xbb25c9ca,0xb9c63825,0x3acc1c53,0x3b89195f,0xbba9009c,0xbbe754d7,0xb811c982,0xbb4facc0,0x3b03683a,0x3c6a868b,0xba74cc75,0x3b6e3771,0x3c6e5e9c,0x3c149913, -0x3bb6208e,0xbaa795fa,0xbbc01ece,0xbb6c5046,0x3b86c1af,0x3b866ae4,0x3b67f1ed,0x39401c24,0xb927c612,0xb9dcf0a4,0x38d4dae4,0x3ad7ed40,0x3ac9ffa7,0xba4151ef,0xbaa39d00,0xbb40afae,0xbb0e3a90,0xba9ea498,0xba91a063,0x39a65966,0x3886e470,0xbac14c73,0xbb5d7e16,0xbb86d614,0xbb9e2751, -0xbbcd8df5,0xbb848562,0xbb9205a0,0xbbea0ebb,0xbc6e9339,0xbca31e78,0xbcbacf38,0xbc0b74df,0xbc628a9a,0xbc13ced8,0xbbe19f0f,0xbba5c439,0xba62a930,0xb8eb58bb,0x3a74f83f,0x39be025c,0xb9e19fb5,0xba86aefb,0xba57036a,0xbafc27a0,0xbb083a1f,0xba998402,0xbb2ec373,0xbb66e407,0xbb5dbb70, -0xbb1689f3,0xbb2c4979,0xbb566d0b,0xbb70d353,0xbb98e671,0xbb8f60d7,0xbb89a1f0,0xbb2759ba,0x3aa9efea,0x3b1906f8,0x3b378932,0x3a61c6a3,0x3b8f98ae,0x3af41c00,0xbb5d122d,0xbc5c8d48,0xbc9264e2,0xbca8ef97,0xbc845e65,0xbbaf04e6,0xba8f9d24,0x3b8ff602,0x3b0d1562,0x3aef140d,0x3af83bb7, -0x3aa37889,0xb68821b0,0xb9de5c9a,0xb984c2d7,0x39ea86d4,0xba879983,0xbb0d492d,0xbb33c580,0xbb1eced8,0xbac93f06,0xba52cefe,0xba7d47bc,0xba81daa0,0xba3a8c6b,0x3a82cca8,0x3abfe81f,0x3a8f2d33,0x37f00d7c,0xbb06bbf7,0xbbb9d92d,0xbbedd1cc,0xbc0870fa,0xbc1de8da,0xbb99c52e,0xbb280c7f, -0xba14281b,0xbbab3c42,0xbbdf164a,0xbba3a601,0xbbb1cdcc,0xbc1678e2,0xbc1a9be1,0xbc040c36,0xbc32c261,0xbc2dbcf3,0xbc2c7307,0xbc0ae472,0xbbccb2d1,0xbbcef76b,0xbbba10a1,0xbb93b506,0xbb83ec66,0xbb5b1868,0xbb442f07,0xbb8147ab,0xbb8cc43d,0xbb81bae0,0xba261dba,0x3a925f78,0x3af0c9a1, -0x3aaea1b2,0x3a09077a,0x3a018b6c,0xbacdce59,0xbb03c4a0,0xbabb949c,0x3908d9de,0x3af70940,0x3b4c4fb6,0x3af4cb69,0xb9fc4fd8,0xbb8034e0,0xbb5417c7,0xbb89dd13,0xbbcf0f1b,0xbbffb33a,0xbacbaa2a,0xbae246b6,0xbb66d03c,0xbb93b60b,0xbba7c96a,0xbbba86a8,0xbbd5e534,0xbbf736f4,0xbbea7d8e, -0xbbd51873,0xbbea5e36,0xbbb4ca65,0xbba7a88b,0xbb82fc12,0xbb681f50,0xbb325ae8,0xbb23146f,0xbacd25fe,0xba895030,0x3a257594,0x3a988253,0x3aa59c9a,0x3aef4825,0x3ac4d413,0x3aa8c6d9,0x3a6fb722,0x3979e900,0xba1902e2,0xba8f5c3a,0xbacbf742,0xbabb7714,0xbad8d688,0xbacaf031,0xbadb7337, -0xbaa99420,0xbac70373,0xbb2963f3,0xbb3636b6,0xbac12571,0xbb19fbd1,0xbb2c1f23,0xbb1cd6b3,0xbb2a7d03,0xbb297d1f,0xbb31ae3f,0xbb582209,0xbb721608,0xbb7a801e,0xbb657d41,0xbb820a02,0xbb60c3bb,0xbb34881b,0xbb52f885,0xbb011194,0xbaf16d1b,0xb9c89594,0xb8371566,0xb9d573d3,0xb9ea85dc, -0xba06ed2f,0xba0369a9,0xb9cf8b4d,0xba3d0bc6,0xba9f3c12,0xbb01ae79,0xbb351bf1,0xbb7580da,0xbb9ac551,0xbb8a3308,0xbb7a28b5,0xbb6238df,0xbb520b66,0xbae3e529,0xbac31bdd,0xbb695ad3,0xbb44159a,0xb85c7bd2,0xbb79a1fe,0xbb602717,0xba8d0633,0xba8bd4a5,0xba838941,0xba26323f,0xba4dea8b, -0xba3d733b,0xba132849,0xbb7f6585,0xbb8223c9,0xb9cd45bd,0xbb5847e9,0xbb6602ec,0xba740a5d,0xbab32a4c,0xbab0d592,0xbaaacaa7,0xbaaacbfc,0xbaab342e,0xbaa3c375,0xbad40aeb,0xbaf3d871,0xbb06b55d,0xbb151f2f,0xbb211b85,0xbb3e2806,0xbb27325f,0xbb1def32,0xbb1015b4,0xbb055fa1,0xbb163b50, -0x3b6173c1,0x3b327dd3,0x3b879781,0x3b709909,0x37e625a6,0xbbe646f3,0x3b9aaac3,0x3a3a564f,0xbba9de9b,0xbba885e4,0xbba78eda,0xbba6483a,0xbbc3713c,0xbbcba06b,0xbbc6305b,0x397afd51,0x3b79cb70,0xbc002431,0xba046ffd,0x3b42481d,0x3b81bdd2,0x3b3f36af,0x3b5c81a8,0x3b53c741,0x3b5173e4, -0x3b579bf7,0x3b614ddc,0x3b7de505,0x3b835464,0x3b802496,0x3b80fc60,0x3b80a8a7,0x3b7fda49,0x3b76e7c7,0x3b625bda,0x3b2f73a2,0x3b48269e,0x3b2ba414,0x3b99bf19,0xbac3c0cb,0x3b717310,0x3a338922,0x3aba462e,0x3b55054c,0x3b1fed38,0x3b7d7385,0x3b90bf55,0x3b8d5ca1,0x3b776f8e,0x3b33e2ce, -0x3b77753d,0x39f583e9,0x39866414,0x3a7bc7dc,0x3a83f09c,0xbb294aa2,0x3b849296,0x3b5eb22b,0x3b791c4c,0x3b74cd9b,0x3b6623aa,0x3b7c2b4e,0x3b92a5d9,0x3bc1fcae,0x3bd06f9b,0x3bbe932b,0x3bb545fe,0x3ba9806c,0x3ba307a0,0x3b9da6d8,0x3b85ef51,0x3b0d5e46,0x3b32c70b,0x3b27155b,0x3b8db921, -0x3b84cead,0x3b8197ba,0xba55cbcb,0x3b05ce12,0x3b0c5a0e,0x3ae4e2a7,0x3b4bb8cb,0x3b7d1a25,0x3b9f99a9,0x3b2cc4fd,0x3a1a2692,0x3b880696,0xb95d30e8,0x37092053,0xbabecfe8,0xba05bc04,0x39c75a6e,0x3b400439,0x3b81e7da,0x3b7d50c6,0x3b85fb2b,0x3b6be387,0x3b8bb38d,0x3ba6e29c,0x3bfec89f, -0x3c0ea404,0x3c00999b,0x3c054fd6,0x3bfaa52c,0x3be64949,0x3bd21616,0x3b8f7a03,0x3a97576b,0x3b0b220d,0x3ae3173d,0x3b4ec0a6,0x3b443617,0x3b192565,0xbb2180b1,0x3b5bfe9c,0x3bad220e,0x3b3be272,0x3bb13d13,0x3bca80ad,0x3bc0ac69,0x3b4ddda6,0x3b5570d1,0x3b9b0836,0xba297e63,0xbad188ed, -0xbb3a2d88,0xba89fba1,0xba771378,0x3b2c3b04,0x3b826a2b,0x3b88e7af,0x3b9adf9a,0x3b8bdeca,0x3bba7487,0x3bf886c6,0x3c503f81,0x3c637d27,0x3c3899ff,0x3c2bb211,0x3c105e71,0x3bf589ea,0x3be8d3f6,0x3baa04f3,0x389ce106,0x3a786cae,0x3be8e7e0,0x3bd2be87,0x3c2b1cbe,0x3c409375,0x3bc2e4e8, -0xbb5f76d9,0xbbebfecd,0xbb8b1cea,0xba2b6e3f,0x3afd4437,0x3b596bfc,0x3b7c63a5,0x3b01cb90,0xbac7c7ca,0x3af6e4e0,0x3b4a075b,0xb8c64500,0x3b0fc318,0x3ad217ef,0x3b8b8746,0x3bd7f74e,0x3ba0aa7d,0x3b90ed8b,0x3b3cb1fc,0x39c6472f,0xbb82d7c1,0xbb8c8076,0xbaf9ee0d,0x3bd25ec0,0x3c2086f1, -0x3c4c84a1,0x3c73384a,0x3c12adc4,0x3b58fa93,0x39efd4a1,0x3b4deb32,0xbbb89745,0xbb674873,0xbc25c048,0xbc32c622,0xbc07552a,0x3bb5f90c,0x3c2b6e5a,0x3beaa74c,0x3ac499bd,0xba08cd32,0xba802617,0x3ad1a15f,0x3b5a92ee,0x3b7616d7,0x3b3bf2cb,0x3af52bf6,0x3b1ec30a,0x3a8fe32a,0xba062f66, -0x3af6bedd,0x3ba13b9c,0x3bd4713f,0x3c0dbdb9,0x3bb20304,0x3b5c075f,0x3af42359,0x3b07b56c,0x3b407fd5,0x3b92e391,0xbb06edf5,0xbb166403,0x3bab0d9c,0x3bad4c40,0x3c1c9f19,0x3c814684,0x3ad0ce1e,0x3bb184b0,0x3c8a236f,0x3bc77d4f,0x3b1a5e86,0xbad6086c,0xbbb492ad,0xbb56d8ba,0x3b69cbb1, -0x3b8ec8aa,0x3b76b7b8,0x3a182cd6,0x394e047d,0xb99d5587,0x3901b713,0x3b1ab797,0x3b5cf6ac,0x3a420fdf,0x3aff32c0,0x3b11f037,0x3b219571,0x3a6629d4,0x39918582,0x3b163233,0x3c081a74,0x3c5b0c9d,0x3c8392fb,0x3c7e18b7,0x3c37d973,0x3b89bac0,0x3bef41ab,0x3c80e1a9,0x3ce92ba7,0x3c928d78, -0x3c0ae380,0x3b56da2a,0xba692d13,0x3b0f96fa,0xbc04e955,0xbb9c7a10,0xba6df48f,0xba733b6b,0x3b0657d1,0x3ad33dfa,0x3a89d827,0x3923f52b,0xba807940,0xba114dcb,0xbaceedb9,0xbaeefdeb,0xb9e2cac2,0xbaf5cefd,0xbb230a60,0xbaf79830,0xbaba1f26,0xbb131753,0xbaefb53b,0x3a707ff9,0x3b531803, -0x3ba83fb6,0x3bafd84a,0x3bc0bc8d,0x3bf22f95,0x3c266af5,0x3c364d76,0x3c1a20a2,0x3c359ea6,0x3c0b99da,0x3bb09f95,0x3c1b5589,0x3c6fc2a3,0x3ca36181,0x3c27ccc3,0x3cc28ec4,0x3c4a1214,0x3b2aa084,0x3b87656c,0x3b968ee8,0x3b3da792,0x3b087e83,0x3aeaabb8,0x3a756a0d,0x3ab6e17e,0x3b09dbeb, -0x39cae62c,0xba8734b0,0xbaf37b26,0xbb0321e6,0xbabf1701,0xba6b7bf0,0x3a88d26b,0x3ac5ce45,0x3b1eebbb,0x3b16bbbf,0x3ad90ab9,0x3af25321,0x3aeaa0f2,0x3b23f389,0x3b63d844,0x3b6b4f63,0x3bac857e,0x3c0b4c3f,0x3c288d44,0x3c5bbe3f,0x3c97a9d8,0x3c9c484a,0x3ca488b0,0x3cb86603,0x3cc471da, -0x3a21276e,0xb9b788e9,0xbc0dfec0,0xbbfeb535,0xbc11af1c,0xbbe46113,0xbbb3fe18,0xbb888ea5,0xbb8ab505,0xbb8bb7f4,0xbb62fd0d,0xbb4c0a81,0xbb1bef01,0xbb127a2c,0xbb292af1,0xbb156ef0,0xbafb24e0,0xb9c49889,0x3a4a967f,0x3ab3a418,0x3b347d88,0x3b8471cf,0x3b96692b,0x3b9e2ce9,0x3b95b1ad, -0x3b8e9dab,0x3b94e922,0x3b7193a9,0x3b15cc68,0x3b28fc6f,0x3b7f340a,0x3be994e4,0x3b93646b,0x3b4cd979,0x3ac0be29,0x3a338634,0x3b22a5f9,0x3aca0650,0x380de7d3,0xba4d424a,0xbb5a5330,0xbb803d2d,0xbbabe850,0xbbcac655,0xbbcd6743,0xbbb12b80,0xbbb5e63f,0xbb83028b,0xbb90ed14,0xbb33427d, -0xbb3a8057,0xbafdb8b3,0xbb050aa8,0xb9d6f0c7,0x3ab4b437,0x3b69135b,0x3b54f2e3,0x3b3bf1b1,0x3b2e3aae,0x3b23ac1c,0x3b1e80c1,0x3b0dc6ba,0x3b58cada,0x3b947f8b,0x3bbe8c45,0x3bd082e5,0x3bd46fd5,0x3bdf66e0,0x3bb31aea,0x3b950e40,0x3b7574bb,0x3b4793ee,0x3a32780b,0x3a85fc75,0xbb31e61f, -0xb64f2065,0xba2ff49e,0xba85f154,0xb93bce18,0xb9c0a66f,0x399ccd65,0x3a3f534a,0x39928d02,0x3a89cdce,0x3a45b25d,0x3a320f94,0xb9725ab6,0xb96ec983,0x3a76be3c,0x3a122b97,0xba2b1755,0x3a16f9a3,0xb9870426,0x379bc1de,0xb8ab1c0d,0xb90f7c80,0xb94bbe83,0xb9bb173a,0xb7e16d07,0x39589bc9, -0x3a16bd59,0x3a7ff33a,0x3ad22bf0,0x3b1d3e2c,0x3b0ac9da,0x3afad771,0x3aca9031,0x3a9dc976,0x3ae87165,0x3b14041f,0x3af47c77,0xb8e9259b,0xbb82c5d9,0x3b13fedb,0xb9503183,0xbb6f7886,0xbb7c56ed,0xbb85c6fd,0xbb8a13a7,0xbb961ab7,0xbb9c82cd,0xbba348bb,0x37c831f9,0x3b0fcc26,0xbb8beb6d, -0x37945e18,0x3ad9e74a,0x3ab09676,0x3a971258,0x3a9ea131,0x3a8ee414,0x3a8cb002,0x3a884818,0x3a7aafdf,0x3a9e379c,0x3ab893ab,0x3ad1e16b,0x3af05b7e,0x3b017fef,0x3b118824,0x3b0408f7,0x3b00bb3e,0x3afb9c57,0x3b023cc5,0x3b0c5d9d,0xbb9ee717,0xbb867ea0,0xbbc10b88,0xbb0b9aee,0x3b19ffa0, -0x3be455c1,0xbb826516,0x3aa88bab,0x3bd0e9d7,0x3be1b24f,0x3be5ca53,0x3be433eb,0x3be4f856,0x3be54270,0x3bf57521,0x3aa22966,0xbb7630d1,0x3be867f8,0x3ab8b7aa,0xbb2065ab,0xbbbe8563,0xbb9293fe,0xbba91450,0xbbaef910,0xbbb17a13,0xbbae1ad8,0xbba4a060,0xbb968321,0xbb93eba7,0xbb9ac9f7, -0xbba43bd2,0xbbab7823,0xbbb29826,0xbbb47e29,0xbbacb1bb,0xbb8ba1c6,0xbb991a2a,0xbb8f6cb5,0xbbafeac3,0x3b84ea70,0xbb6f8001,0xbae448f0,0xb925c6f8,0xbad569ea,0xba8b45e5,0xbb219ec1,0xbb17f609,0xb8d974ac,0xbb3f018e,0xbb317286,0xbadd14f3,0xba876351,0xbb1029a9,0xbb80fdf5,0xbb679821, -0x3b1990a7,0xbbac4ac9,0xbbc9a461,0xbbe0f8ef,0xbbfb60eb,0xbc024263,0xbbf18d74,0xbbc71a77,0xbb934170,0xbb88f921,0xbba99195,0xbbca9953,0xbbe6e401,0xbbf09f40,0xbbf236bb,0xbbd137ac,0xbb7f3039,0xbb95601d,0xbb9a4048,0xbb892b80,0xb90a76be,0xba2be41e,0xba9933fa,0x399df931,0x3a1f0fec, -0xb8fb69f6,0x3b132393,0x3aca2fb5,0x3b6c78c1,0xbaa238f2,0x39dfbbe0,0x3a189ab7,0xba55b491,0xbb3abdef,0xbb7d6754,0xbb522646,0xbb01f708,0xbb699898,0xbbf7624f,0xbc046f30,0xbc1f9dd8,0xbc28ef44,0xbc1b003a,0xbbf84978,0xbb9cc4fe,0xbb8b44a3,0xbbc659b9,0xbbebc812,0xbc11ef96,0xbc22014d, -0xbc234912,0xbc096b16,0xbb6fcfe3,0xbb9e35f3,0xbb74a757,0xbb3a0e37,0x3a58205c,0xbb07b664,0xbb811e25,0x3a9300ad,0x3b8138bd,0x3b4cf2d2,0x3b9b42db,0x3bc4ec68,0x3bc37291,0x3b4fc1d3,0x3b047b24,0x3b70e754,0xbafd56e8,0xbb7ecf1d,0xbb4fdec8,0xbb8b9ac8,0xba9c770f,0xbb641af5,0xbc1acc87, -0xbc3a975b,0xbc6ce91b,0xbc77be55,0xbc5740ef,0xbc0cff79,0xbb34b34c,0xbaeced50,0xbbbadf5b,0xbc0fec0e,0xbc3ca3ef,0xbc55303b,0xbc431625,0xbbf9ace9,0xbaa51489,0xbb1f4450,0xbc358858,0xbb8b8e7f,0x3bc894f5,0x3c08a8a0,0x3bf9b7e1,0xbafda34a,0xbbfe1e5b,0xbbac0f4c,0xbad61220,0x3a3b64f0, -0x3ae165dd,0x3b75005f,0x3b1620c5,0xbaf24d4b,0x3abef9ab,0x3ab21a8b,0xba77b4b2,0xbb39ebe2,0xba3d7bb1,0xbb18bfaa,0xbbef37cf,0xbb90838c,0xbb92522b,0xbb27d011,0xbb8d6503,0xbbefb587,0xbc51fda8,0xbc56eff0,0xbbc9845b,0xbbbf4a82,0xbbdcd81b,0xbbebc7d8,0xbc4188dd,0xbc7afa26,0xbc62338f, -0xbc44228b,0xbc247054,0xbbf4d947,0xbc463919,0xbc5d3460,0xbc66d013,0x3af648ac,0x3c0f6897,0x3be0af81,0x3a9b424e,0xbaa613c8,0xbaffe779,0x3a2b8e1e,0x3b2389c6,0x3b42a40d,0x3aa2bc0a,0xb9442893,0x3a2e0376,0xb9c53012,0x3a2499f8,0xbb046f55,0xbbced615,0xbbf43979,0xbc3a8e69,0xbc12fe19, -0xbbc50fdf,0xbb40cf11,0x3b08570e,0x3b52c575,0x3a90083e,0xbbb42cd8,0xbbb63443,0x3b72cb7e,0x3a2ee80d,0x3bb0fa1d,0x3c8036d5,0xbaa0d4ab,0x39f121ba,0x3c67736b,0x3bae6cb7,0x38666563,0xba8757e0,0xbbc387bd,0xbb6b18b8,0x3aaa967d,0x3b40fec2,0x3b35e893,0x38a3fc4b,0xba63416b,0xba99c6e2, -0xb7b62b12,0x3aade3df,0x3a9a2962,0x39bf2579,0xba68eb6c,0xba22553f,0xbaa7d084,0xbb4b4945,0xba91c6ec,0x3a232dd5,0xbb2563a3,0xbbb7dc07,0xbc0185fc,0xbc1f7032,0xbc1ed386,0xbbf74e03,0xbc0edf7b,0xbc0593e2,0xbb23a9ec,0xbca7e329,0xbce02206,0xbcd3330a,0xbc45cec0,0xbc4d9983,0xbc001f8f, -0xbb828881,0xbb484333,0xb9a4d1aa,0xb9880832,0x3a7f8fcf,0xb8c9b734,0xb87ccc65,0xba9805ed,0xba7ebe3b,0xbb0564c3,0xbb01c0a9,0xba972816,0xbb2a5299,0xbb42c195,0xbb54854a,0xbb5a7273,0xbb087795,0xbb7969f1,0xbbcdfbfb,0xbbe95d17,0xbbe6fa5a,0xbbbe2381,0xbb1478a6,0x3b248a63,0x3b962a3d, -0x3bae85f5,0x3b88b4f9,0x3ba40aa2,0x3aa520d6,0xbb4acf68,0xbc50a8c2,0xbc8b74ea,0xbcacf0aa,0xbc6221f9,0xbb8d5998,0x3a821783,0x3c13e288,0x3b7d7100,0x3b44af68,0x3b520627,0x3ad8c5b3,0x390a6a3f,0x39d7c6b7,0xb8086267,0x3aacfff2,0x39e449eb,0xba64e8e7,0xbb298d96,0xbb1c4b41,0xbb02ace9, -0xbb02ddef,0xba7ad572,0x3a795743,0xba0564ba,0x39cf0b1b,0x3ac0a0f0,0x3a28cc8e,0x38d57632,0xbb0433cd,0xbbb3410f,0xbbc74c29,0xbbc4158e,0xbbc36b0e,0xbb36f8d2,0xbae4e4cd,0xbad5184b,0xbb82de0c,0xbb7f49ab,0xbb429dd5,0xbafd9811,0xbc1cb58b,0xbbf8d195,0xbb98f900,0xbc0afab4,0xbbf98a3c, -0xbbe28f94,0xbbb8b3b5,0xbb8332ae,0xbb9c2805,0xbb9183ef,0xbb7d429d,0xbb69e62a,0xbb534ed7,0xbb40bec1,0xbb5fdc12,0xbb6a0325,0xbb8210ab,0xbab862d1,0xb898473b,0x3ac3c7a1,0x39585adb,0xb9fd4847,0xba069994,0xba89d65c,0xba9625e8,0xba8e7745,0xb93c68d1,0x3a4dca17,0x3b10d6ec,0x3a57ab5c, -0xbaea2be2,0xbbca06b2,0xbbb95a30,0xbbc762ec,0xbbf4ac7c,0xbbfc4dc7,0xbb6b556c,0xbb1d0d1d,0xbb1c7a11,0xbb9073aa,0xbb9b907e,0xbbb63496,0xbbcc9226,0xbbeca4dd,0xbbc22b17,0xbbbf1755,0xbba3eb67,0xbb9c72b6,0xbb4c77e5,0xbb2df19d,0xbb1998c0,0xbb2716ba,0xbb1eaf8e,0xbaad7289,0xb69e50e7, -0xb86520b9,0xba0d3de7,0x3a13793f,0x3a849218,0x3a96afe6,0x3a9b10a8,0x3aa90271,0x39e7a603,0xb9a4cc54,0xba53b76a,0xbac7a49c,0xbadea7e5,0xbb1ad0fb,0xbb210dc3,0xbb3990cd,0xbb448126,0xbb3897b2,0xbb23a244,0xbb1cfb74,0x3aa4fa41,0xbb0edd4e,0xbaa0e8ab,0xba9bf9b4,0xbb19e0dd,0xbb1683f0, -0xbb4641fc,0xbb48942c,0xbb1300ec,0xbb4750ed,0xbb4b5a66,0xbb426e7f,0xbaeb10bb,0xbabec9d9,0xbb09749a,0xbab8d46d,0x399c4621,0xb9b25277,0x392d06cd,0xb950b0e4,0xb9aa2d2e,0xb9d769db,0xb9fd059b,0xb9d115a7,0xbaa1a8fb,0xbb05d679,0xbb447c8e,0xbb7cdb83,0xbb9cc4fe,0xbbb84be9,0xbba107cc, -0xbb899850,0xbb6a70e3,0xbb497dbb,0xbb00e35f,0xbb15a22d,0xba8e14e8,0x3a7fb3ca,0x3b6d65dd,0xbb207275,0x3970a165,0x3b3a78d0,0x3b4e2240,0x3b5765aa,0x3b55c375,0x3b6f762f,0x3b815c62,0x3b84ffd9,0x39b1975f,0xbb0d4447,0x3b813c19,0x3a3279fc,0xbaaa97c2,0xbaec9fb0,0xbad3d4a0,0xbae7b639, -0xbae2cedc,0xbae78fd1,0xbaedaad1,0xbae81eb6,0xbb0c3e8f,0xbb1af8a5,0xbb28c733,0xbb37c222,0xbb460e48,0xbb669402,0xbb4a3874,0xbb3f156d,0xbb2f8387,0xbb205dd9,0xbb2b5c04,0x3b4c6ea1,0x3b242da3,0x3b9e779c,0xba40101e,0xbba53a35,0xbc06f66d,0x3ab8b100,0xbb84b2a8,0xbbf96e5c,0xbc007e62, -0xbbfbe86f,0xbbda728b,0xbc0396d3,0xbc06133b,0xbbfa519d,0xbb92b8cd,0x395e1bcf,0xbc13ef61,0xbba98985,0xbab639d2,0x3b9055d0,0x3b23418f,0x3b41096a,0x3b3e0da1,0x3b3eef8a,0x3b45487f,0x3b4f7295,0x3b644e7a,0x3b6dac8b,0x3b6cccfe,0x3b67e022,0x3b5fd2a8,0x3b545d4a,0x3b424194,0x3b31de8c, -0x3b17720e,0x3b34e061,0x3b4fcce0,0x3b77b9df,0xbbb14930,0x3b36ec7f,0xbab07fea,0xb9ed7402,0x3afd3b7f,0x3aaec91a,0x3b48cb25,0x3b29a519,0x3ab32b34,0x3ade42f9,0x3ac15d99,0x3ace481d,0xba8d7b19,0xba6935b3,0xbad472d2,0xb9d0ec66,0xbbc37c26,0x3b1e3329,0x3b3b1716,0x3b249112,0x3b43a262, -0x3b470cf9,0x3b716d71,0x3b917982,0x3bb398a5,0x3bb8fe84,0x3ba7dbfe,0x3b982c18,0x3b812539,0x3b5a136d,0x3b2a2173,0x3b12e2f9,0x3ad7bf94,0x3b1918a5,0x3b78fcd8,0x3b5a21fb,0x3905ca57,0x3afc24b7,0xbb01d155,0x3a5648f1,0x3a6e76cf,0x3ab73080,0x3aa48668,0x3b64c82c,0x3b43d345,0x3b449df7, -0xba43d29e,0x3b40685e,0xbad59a55,0xba3ce8d3,0xbb3be302,0xbb07e1b6,0xbb378738,0x3a668ac6,0x3b557244,0x3b0f32d1,0x3b43d177,0x3b36e09f,0x3b74665c,0x3b954620,0x3bdbe1cd,0x3bf39fc7,0x3be0af8b,0x3bde174d,0x3bb73169,0x3b8e0e59,0x3b2313f6,0x3aadb941,0x3a51893a,0x3ade1683,0x3b94cb92, -0x3b37d596,0x3a2d6d0a,0x3b051bcc,0xbae9324c,0x3b1ed274,0x3ba2d24e,0x3b7f4e10,0x3bbb8f08,0x3bd3d960,0x3bedddf2,0x3b29f330,0x3b2bebf9,0x3b9f0792,0xb971c67b,0xba314999,0xbb93bc2e,0xbaa3e2dc,0xbb751be3,0x39a18310,0x3b119f76,0x3a4d1268,0x3b19522d,0x3b2ecc33,0x3ba20c3f,0x3bf92afd, -0x3c3cd0fd,0x3c3ef587,0x3c1a19d4,0x3c01670b,0x3babe838,0x3b37b2bb,0x3a0ef2cc,0x39e595c4,0x390be4d6,0x3a8a83f6,0x3bd3055a,0x39c4faf5,0x3a39ed98,0x3bac6bd5,0x3b91260b,0xbb380955,0xbbc8ea7d,0xbba27454,0xbad30936,0x3a674b8e,0x3a6cafb2,0x3b94a191,0x3b5dd85c,0xbb0c436d,0x3ad9604e, -0x3b3b7cac,0xba66e599,0x3aa0af72,0xbb01c564,0x3a6ed1d4,0x3be51410,0x3bc0432a,0x3bf17224,0x3b72d670,0x3add43e4,0xbaa65a3a,0xba9c3acd,0x3b06dde5,0x3c370abb,0x3c3c80df,0x3c43027a,0x3c4e61f9,0x3baa63ba,0x3939abac,0xb8e89457,0x3ae9c890,0xb81845b8,0x39f69f70,0xbc0ddd5c,0xbc1a13ba, -0xbc266748,0x3afc8bda,0x3c0f1efb,0x3be8d828,0x3b0692bb,0xba5ca2bd,0xbb0ea3ec,0x390d669e,0x3b0a3024,0x3b6185d9,0x3b409c71,0x3acb4e73,0x3a983a68,0xba07f670,0xbb4556b5,0xb9ecce37,0x3b41e28b,0x3b3c79f8,0x3bacbdde,0x3b1d6700,0x3aa063b5,0xb9fde0a4,0x3b4d341d,0x3b8064d6,0x3b18365d, -0xbb0719c5,0xbb1ffac3,0x3b864964,0x3b5f2e80,0x3c068320,0x3c83056f,0x3b4715b9,0x3a5042c3,0x3c696445,0x3a473a3b,0xbb055e98,0xbb2baad6,0xbb98555d,0xbb8028f6,0x39ce67d4,0x3b1a5d03,0x3b4be72a,0x3a2832f9,0xb939f8f8,0xba2ce5c3,0x395184ce,0x3aaebc9d,0x3b3a22ca,0x396f12d5,0x3b08b890, -0x3a926d74,0x3b294060,0x3b34e2b1,0x3a9c99ef,0x3b770846,0x3bfe09d4,0x3c3bb4c4,0x3c4fa863,0x3c4ad6b8,0x3c2d22bc,0x3c018832,0x3c21609b,0x3c811167,0x3cd596a0,0x3ba840b9,0xbbc4e3f0,0xbbc1c707,0xbbd5c28d,0xb9de5328,0xbc0159f6,0xbb529213,0x3a25c674,0xb9cd964a,0x3ae348b1,0x3ac3de6d, -0x3a78ada6,0x39f16a20,0xba8b60e9,0xba84db0a,0xbabc1feb,0xbabaad14,0xba518fb9,0xbadefe8f,0xbb2494c9,0xbb175d77,0xbb0f322e,0xbb8b7bf2,0xbb0e222f,0x3985d463,0x3a862ed9,0x3b25a000,0x3b2644c4,0x3b8860cd,0x3bc2dee7,0x3c01ecfe,0x3c05768b,0x3bd9e5e0,0x3bbe9482,0x3b7f736b,0x3bdc8824, -0x3baf61a5,0x3bffe1dd,0x3c2535e6,0x3b69b22d,0x3c7c47fe,0x3b3fd7af,0xbb06d926,0x3abdfeb8,0x3b3dfeab,0x3b0ca9c0,0x3af4ef86,0x3a471839,0x376d02e4,0x3aa363dc,0x3af6dde8,0x3ad9855a,0x39436a19,0xbb01cd51,0xbb0ff6b5,0xbb0cffd1,0xbacde4b4,0xb90fcbe5,0xba1ea669,0x3b0a03ff,0x3b033be5, -0x3a974ef0,0x3b0aa24f,0x3aa42791,0x3a7ad5b0,0x3a3ee75d,0x3aaae20d,0x3b4463e0,0x3bcd12ed,0x3c0a0e7e,0x3c30631a,0x3c695ab4,0x3c687467,0x3c74e30d,0x3c8c732a,0x3c86beee,0x394272e5,0xbb671b45,0xbc1cd5ec,0xbc05a86e,0xbc0ac936,0xbbb28ebf,0xbb3c0717,0xbb2af2a5,0xbb0f86b1,0xbb243f66, -0xbafb0c1a,0xbb394fa9,0xbb1c749b,0xbb10d021,0xbb0686e2,0xbb1b1fb6,0xbb4975f1,0xbaf6ef69,0xb9a4b361,0x3a618964,0x3b32a89b,0x3b8068fc,0x3b84a7b9,0x3b7dd372,0x3b67ccfc,0x3b49b54b,0x3b5f1d86,0x3b52047a,0x3b49ddcb,0x3b571308,0x3b94156a,0x3be45e4c,0x3bacf52b,0x3b723a5d,0x3af02017, -0x399ad142,0x3ae5f9de,0x38306e3b,0xbb448e7b,0xbb50fb68,0xbbc8ff75,0xbbbf3c8d,0xbbce5c40,0xbbcf212e,0xbbd248d7,0xbb9cc7fc,0xbbae233f,0xbb397c0e,0xbb6b0e07,0xbaf24d9a,0xbb268605,0xbafc68f3,0xbb1e0cc9,0xba97b030,0xba02be6e,0x3afc04d3,0x3b3cac0e,0x3b22e078,0x3b3be3bf,0x3b3d2bf2, -0x3b4767cb,0x3b4592b9,0x3b6dcec5,0x3b891bf8,0x3b9c88e3,0x3ba6a5df,0x3ba55c36,0x3ba87fde,0x3b7068af,0x3b30c275,0x3b0fb4d4,0x3ac4b7eb,0x3a62302c,0x3a5ded44,0xbb50f7f4,0x38c6745d,0xbaa5c554,0xbab95d61,0xba0bd6ea,0xba848dc1,0xb872715f,0xb8e9d0a4,0xbaa6997c,0xb9640646,0xb7a7838c, -0xb9a6537c,0xba7e2d91,0xb95ca2fa,0x3a4d395c,0x3a93ef86,0xba068532,0x3b092f46,0x3ab5d8cf,0x3ab073b5,0x3aa1fe17,0x3a8272ef,0x3a585c0a,0x3a1d6d95,0x3a88720f,0x3aadc001,0x3acc648c,0x3ae3888f,0x3b0641f4,0x3b276362,0x3b1e9f32,0x3b107b96,0x3aec4547,0x3aa60038,0x3ae34f9d,0x3b1f5323, -0xb942efcf,0xbb2125c5,0xbb8b853d,0x39ea50e9,0xbb2c2f1d,0xbb9b2f8c,0xbba164e4,0xbba5e1f2,0xbb9aa3ce,0xbbabf41e,0xbbb22639,0xbbb1e435,0xbb209ec2,0x3a0c2068,0xbb993d92,0xbb09e9ea,0x3926d921,0x3b16f93c,0x3ad25c7e,0x3ae1f609,0x3ad0ea38,0x3acf6f7c,0x3acc6dad,0x3abdd021,0x3ad3f482, -0x3ae2e407,0x3af73245,0x3b07b025,0x3b0e7c7c,0x3b159b66,0x3b057e69,0x3afde658,0x3af9115e,0x3aff03ed,0x3b079718,0xbb20e17f,0xbb073fe5,0xbb824a20,0x3b21f99c,0x3bb96f01,0x3babf427,0x3a20d0a8,0x3b9cb777,0x3bc37d9a,0x3bcb7f6e,0x3bcb980e,0x3bb7cdbb,0x3bbee2c9,0x3bbabeef,0x3bb7b013, -0x3b9b614e,0x3a719500,0x3b9c6bb7,0x3b9406a9,0x3b045bb1,0xbb7e6bae,0xbb1f1186,0xbb37f58f,0xbb3ee535,0xbb3cb2aa,0xbb310b40,0xbb13ac90,0xbb088a52,0xbb0620ea,0xbb13bbc9,0xbb180064,0xbb21cd37,0xbb378744,0xbb2c2a60,0xbb251dbd,0xbb0d04e7,0xbb197456,0xbb1437f4,0xbafdd400,0x3bc95cfb, -0xba2a900b,0x3ac91682,0x3af13f09,0x3a043024,0x3a991b2a,0xba19f188,0x3986e707,0x3b395113,0x3924da86,0xb9d7d534,0x3a1e1dd8,0x3a832a1c,0xb9215e23,0xba7735b4,0xbac32c8f,0x3b5ff3ca,0xbb221628,0xbb850b10,0xbb74fdfd,0xbb8d934d,0xbb8d13e9,0xbb7329ce,0xbb0f89de,0xbab2d18d,0xba9f68cd, -0xbb019629,0xbb1efaa1,0xbb3edd84,0xbb60c5e3,0xbb3dbe24,0xbb1b752a,0xbaccb5e2,0xbae00e50,0xbb3dd0a4,0xbae5824d,0x3b5eedd7,0x3af94d2e,0x3aa36ef1,0x3b006cfe,0x3aeccba2,0x3acb4004,0x3b469e2c,0x3aa73e2a,0x3ba8d738,0xba1fe9df,0x3adc7ea8,0x3aa4905b,0x3a9a9e77,0xba23ed76,0xbb2a9ed2, -0xbad45d49,0x397e087d,0xbad70b9f,0xbbb513cd,0xbb9d9899,0xbbb711e1,0xbbb3f0e2,0xbb8f2ed1,0xbadb3506,0xba0f6858,0xb9915f88,0xbaff11e2,0xbaf9b54b,0xbb4222a6,0xbb9a4cac,0xbb62a1dc,0xbb4d3563,0xbaea421f,0xbae199e3,0xbaf413b4,0x386e24a7,0x3b9358a4,0x3a91fc18,0xbabc01cb,0x3b032410, -0x3b75ea9c,0x3b71ceb3,0x3b969b07,0x3bc924ac,0x3bc2d494,0x3b24a574,0x3ad75841,0x3b3ef957,0xba931c88,0xbb3ab0ff,0xbb30b6fe,0xbb841d15,0xb9e04625,0xbb338a08,0xbbfa51a8,0xbbe533d3,0xbc0600f6,0xbbff0bbc,0xbbb04c5b,0xb96ab3f5,0x3b3a0518,0x3b191d66,0xba95d561,0xbb008e53,0xbb5d143b, -0xbbb93266,0xbb4049bc,0xba4f28df,0x39ef2c46,0x3a4d7be1,0xbc0cb4b9,0xbb16717d,0x3bcf1203,0x3bf09545,0x3c05a159,0x3a67b293,0xbba26828,0xbb9457be,0xbb03e06b,0x3974d702,0x3852f4ed,0x3b95df4f,0x3b731b7e,0xbae61b21,0x3ae329df,0x3ab7392c,0x39b140b4,0xbae85509,0x3a9dd679,0x39f5822c, -0xbb829170,0xbb124a48,0xbb961c85,0xbb0e3494,0xbb90a25b,0xbc148fc4,0xbc49d733,0xbc2d4af4,0xbabff286,0xbb0b9935,0xbaf1728c,0x39aef769,0xbbcaedb6,0xbc2d577d,0xbc29c288,0xbc0280e4,0xbc08d0b0,0xbb2470b9,0xbb87259f,0xbc11181f,0xbc4505ae,0x38d4e616,0x3bd066e5,0x3bd2b9da,0x3af994df, -0xba5ca8cc,0xbb3e2ea2,0xba4ccfbe,0x3ab6a10c,0x3b16d15e,0x3abe76ad,0x3a0d6f47,0x3ad8f494,0xba8ef347,0xb97a33d7,0xbae7e073,0xbb7ed4d3,0xbb30885b,0xbb9a8550,0xbba8eab5,0xbb719a92,0xbacaa859,0x3ba2515f,0x3ba6d7bc,0xb9b843af,0xbb83d1ba,0xbb328f63,0x3bd0e021,0x3bcc30c9,0x3c23517d, -0x3c7411ff,0x3a326d51,0xbb70af86,0x3c2a8b5a,0x3a9cb75b,0xbb84b68c,0xb91b9089,0xbb884f85,0xbb1c6d43,0xbaac6565,0x3aa9d7bb,0x3ae95be8,0x3a10c4fb,0xba812cce,0xbab8c87a,0x388d7c34,0x3a888f64,0x3aa7079c,0x3ab7a256,0x39f454a8,0x3b0c6540,0x3a7d50a2,0xbb115ebd,0x39415855,0x3af9e50d, -0x398674ae,0xba9139fe,0xbb20d898,0xbb9cd90e,0xbba9ea26,0xbb27d7e0,0xbb9aadea,0xbaeb190b,0x3c209ac6,0xbc378cc3,0xbc9af708,0xbc74e0ed,0xbc37e0d1,0xbb864ca8,0xbba74788,0xbaca15a6,0xb9b4b338,0x3a6e4ad7,0x396c5b5a,0x3a27ba1c,0xb8846b3a,0x3982bec4,0xba9ecb7e,0xba8d8c68,0xbac1a2b1, -0xbaa54ef0,0xba740d30,0xbaef228f,0xbb02b4b1,0xbb2c17a8,0xbb630923,0xbafb8619,0xbb561763,0xbbb26ffa,0xbba543ac,0xbb95d785,0xbb2825c6,0x3a8e206e,0x3ba02990,0x3bf6a530,0x3c0e0ecb,0x3c136ecb,0x3be55fb2,0x3b479996,0x3a230e55,0xbaea25df,0xbb119ba5,0xbb91f285,0xbabbb484,0x3b717d7f, -0x3b6ebba1,0x3bf7e3e9,0x3b7f4cfc,0x3b654cab,0x3b866bbe,0x3b24c300,0x3a8ac2bd,0x3aa96a8a,0x3a3ccdf1,0x3afe1c50,0x3adb5637,0x39bfd0cb,0xbb0027f4,0xbb138420,0xbb21a624,0xbb2ef5aa,0xba0a5f1f,0x3b1659cb,0x3a680be5,0x3a366b6d,0x3ac9d671,0x3a7cb612,0x3a80f5ac,0x385b521b,0xba7967c8, -0xb9abf9c4,0x3aa2ae78,0x3b7138bc,0x3b80b04f,0x3b9ae060,0x3ba1c412,0x3bafcbf4,0x3bd0a1ba,0x3bc121e7,0x3bec428b,0xbb81f251,0xbb3f1243,0xbb04434d,0xbb8a7351,0xbb8c336e,0xbb352d72,0xbb0d9704,0xbabcd268,0xbb0f1feb,0xbb1cc4d0,0xbb27562d,0xbb3bc774,0xbb3ca84a,0xbb35a5b8,0xbb1d687f, -0xbb11dded,0xbb3c6c47,0xbb03282e,0xbaac32cf,0x39b0c591,0xb9274d13,0x391dfaf4,0x39a0fb56,0x3a9adeb4,0x3ac33aea,0x3a906dab,0x3a6993fb,0x3a130d73,0x3a96524e,0x3a073af1,0xba07cfa6,0xbb1d039f,0xbb364fae,0xbb2c72f0,0xbb35dfd7,0xbb0fbb85,0xbb55f4fb,0xbaf6bab1,0xbaa37653,0xbb675321, -0xbb9209ab,0xbba61618,0xbbb61e47,0xbbcbda2f,0xbb9d52ee,0xbb9d412a,0xbb5008fb,0xbb7479c4,0xbb0d539b,0xbb0a7031,0xbae16a23,0xbb0675a0,0xbae306df,0xba30747a,0x3a7a0f95,0x39542ea7,0xba2d0b00,0x3a2cc767,0x3a78b8da,0x3a972b33,0x3a9eb23f,0x3abf7701,0x3ab150cc,0x3ac0824d,0x3adab4da, -0x3a890635,0x3a11594a,0xb986fca4,0xba663ba8,0xbad370d1,0xbb206a63,0xbb161af5,0xba88014e,0xba486e00,0x3adcbf6c,0xba9cfda5,0xb87df1d3,0xb9add51b,0xbac285fb,0xbace3840,0xbb0fb4a1,0xbadbeefd,0xb9f7232f,0xba99df15,0xbac5a741,0xba82b72a,0xb7e315f2,0xb8965509,0xb8ee8f7d,0xb9574153, -0x3addd110,0x386a5786,0x39523f5e,0x38d338cc,0xb7f077e7,0xb86eb8ab,0xb8e8ccfd,0xb8f53eee,0xba50c54b,0xbab3a871,0xbaf0844e,0xbb0e7b79,0xbb1b99ec,0xbb2021d7,0xbb08e2d8,0xbad36210,0xbaa5fe57,0xba83f0b0,0xbaa3e102,0xbae4cf01,0x3a962402,0x3b328a40,0x3b39e037,0xb9a3f018,0x3b05229b, -0x3b2d0883,0x3b43d04a,0x3b48d6b9,0x3b33d9c1,0x3b56d5f5,0x3b69e7dd,0x3b67e392,0x3b304bb3,0x3990a513,0x3b6c196c,0x3b3827c7,0x3a8297d9,0xbad1a7a5,0xba8d1e87,0xbaa582a1,0xbaa900a8,0xbaaf3e47,0xbab7976b,0xbab7a974,0xbac55fce,0xbac99828,0xbad26b11,0xbad7abea,0xbae1fda7,0xbaf93e65, -0xbae7083a,0xbae34a22,0xbadb0606,0xbac947c6,0xbae16c48,0xb78e895d,0xb76bde86,0x3aab941a,0xbb863039,0xbbb409f4,0xbb485cd2,0xbb35195d,0xbba767c5,0xbb778eaf,0xbb838e20,0xbb7a26d0,0xbb2a86c5,0xbb6bc26a,0xbb6c3884,0xbb41e194,0xbbada64c,0xbb6620e9,0xbb6ade8a,0xbbb8d753,0xbb964d82, -0x3a5fba3e,0xb9c22e61,0xb9a91dd6,0xb9b49784,0xb9957a48,0xb92fd3bb,0x38c42867,0x397abff7,0x39ad83b1,0x39960ad1,0x390ac174,0xb8d1fc29,0xb9da2dbc,0xba41920c,0xba454ccc,0xb9ac2779,0xb904885f,0x3a8a05dc,0xb8b59cb4,0xbb8942cf,0xb8609ead,0xbb211575,0xbac3b8ca,0xb99ca4a0,0xb94c5483, -0x39ad7e56,0xba26b6e6,0xbabb8443,0xbab4ee47,0xba59d3c2,0xbaa4c335,0xbaf310ac,0xbaf4e1d3,0xbb8336d6,0xbb1db797,0xbba57adf,0xbada3109,0xba725d45,0xbaef1ad5,0xbab972b9,0xba948b6c,0xb9833dc3,0x3a679ef5,0x3ac2899d,0x3ab51916,0x3a2f651f,0x3845e9e0,0xba65bf4c,0xbadcc62c,0xbb2d72d8, -0xbb10f98f,0xba144a2e,0xb92f9296,0x3aea4e95,0xb8fe8b7e,0xbb2081a8,0xb9ad595a,0xbaf43206,0xb8e1a575,0xb8c74af0,0x3a4ce774,0x37776a46,0x3afffb7c,0x3ab09fa0,0x3ad924b9,0xba759d72,0x3a61ffa8,0xbaf9031c,0xbac93b2f,0xbb7e97ac,0xbb5a2fa9,0xbb96fe5d,0xbb1efd0d,0xbab315a4,0xbb33e892, -0xbb1e608d,0xbb138c79,0xba8f38f4,0x39e8c314,0x3ad91b86,0x3b01b41b,0x3a8edc26,0x3a3bf5b6,0xba8b3b56,0xbb351474,0xbba1bc24,0xbb90c6b3,0xba7b015a,0xba3327a1,0x3b8a4863,0x3a5eab71,0xb9c00a3f,0x3a70bc50,0xba8f55a9,0x3abcfaf1,0x3b85d8bc,0x3b99cbf4,0x3bafd3ea,0x3bc9be0e,0x3bf54965, -0x3b21b699,0x3b024993,0x3b844b74,0xb81b69f6,0xba372f75,0xbba9b7e6,0xbb2c2cd7,0xbba23393,0xbb56f86a,0xbb6ebaff,0xbbc66b00,0xbbb094bf,0xbb909d7e,0xbab54835,0x3b411b00,0x3bb1783f,0x3b93af3b,0x3af9d545,0xb886dd9e,0xbb4a77e2,0xbbc4c92e,0xbc0bd7da,0xbbbca56b,0x395454ec,0x3a4b628b, -0xbaba2545,0xbbc60c2f,0xbbac6072,0x39b64670,0x3b81abe2,0xba980304,0xbb9ef621,0xbbb1ff13,0xbb4309e2,0xb9d665f9,0xb9cf43d7,0x3ba5ad8a,0x3b92c896,0xbb13585e,0x3aa03fdf,0x3afb3ed1,0xba004e0b,0xb9f06b4f,0xbb62c92e,0xbb16150d,0x3b1d448e,0x3b46f10a,0x3ba12cec,0x3b0653bc,0x3995cb18, -0xbb11076c,0xbb503546,0xb8f3d572,0x3c095ab7,0x3bc19414,0x3b88bcae,0x3b3f97a8,0xbb8b1098,0xbc016379,0xbbd3ad2c,0xbba07539,0x3b1b0eac,0x3ab20b5b,0xbbecc67e,0xbc11a545,0xbc44f793,0xbb068726,0x3bb5caa4,0x3bbd400d,0x3b2fcd9f,0xb9f6e8f0,0xbb498875,0xbaa02b0f,0x3a6cf486,0x3b3042a5, -0x3b071fef,0x3a0dbff0,0xb898318e,0xbae9c0ec,0xbb6ba265,0xbb557ed3,0xbb019cf8,0xbb5d062f,0xbb49b400,0xbb75907c,0xbb2d42c0,0xbb1e9b7f,0x3b90bde9,0x3b9c57e0,0x38a431eb,0xbb42c68f,0xbb5478c6,0x3b2180a2,0x3b1980eb,0x3bde421f,0x3c62acd3,0x3b6f68a8,0xbbd96342,0x3bc68f24,0xbb26b1af, -0xbb8a2da9,0xbb06122d,0xbb4212e9,0xbb4c346b,0xbb27a2e7,0xb84f5f90,0x3ad50801,0x3a5c77a1,0xba2541e3,0xba8ec6cf,0x392c75aa,0x395a5394,0x3ab02879,0x37c8f5bf,0x3a719390,0xb9b5a115,0x3a8b48d0,0x3b1bd2f5,0x3ae52019,0x3b7d0b92,0x3b7efdb5,0x3b71bba2,0x3af82c4f,0x3ab34a8a,0x3b2937c9, -0x3bacc3e3,0x3bc726eb,0x3bd81778,0x3c0e7a4e,0xbc6a09f4,0xbcbaebda,0xbc8a4239,0xbc598563,0xbb8a7c9b,0xbba0e595,0xbad2dc84,0x3a17d8a6,0x3a958e33,0x3a342b63,0x3a4735e4,0x39da5ae4,0x39d2b764,0xba92a610,0xbabb3fad,0xba915837,0xba551479,0xba9cb6f1,0xbabdfb95,0xbb172087,0xbb42a45a, -0xbb4fba25,0xbb9a9293,0xbb3e2dcf,0xbb2d4c2c,0xbb632b5f,0xbb3d52e9,0xbb0da489,0x3a199995,0x3b5f32bf,0x3b91399d,0x3b8f5789,0x3b80500c,0x3abb3c64,0xb9f77cd5,0x3b6290e6,0xbb302c77,0xbb8898d0,0xbbcb494a,0xbbb330c5,0xbabc54f4,0xbbd39d68,0xbb418ac7,0xba1471bf,0x3a72302c,0x3b019b18, -0x3b01ce7f,0x39752739,0xb8a4c130,0x3a663856,0x3aa320c8,0x3b045860,0x3a4d5a1c,0xbafa2965,0xbb1d490f,0xbb39f61c,0xbb1d30d8,0xbad54865,0xbadb6aaf,0x3a5a97b3,0x3a99294c,0x3a7d791d,0x3ad80ddf,0x3a223d85,0xba1f0678,0xbb140959,0xbad11634,0xb9ea20cc,0x3ac3265e,0x3b667753,0x3b9a12ee, -0x3bb389ce,0x3b76a250,0x3b42d0d2,0x3b47b5c6,0x39fcc351,0xbadde009,0xbbc2dfce,0xbbd318d9,0xbbc791f5,0xbbb79b0f,0xbb54229e,0xba52b52d,0xba804958,0xba15dd78,0xba806215,0xba6f65a4,0xbb2763b7,0xbb2d5019,0xbb24809d,0xbb0adea6,0xbb30c556,0xbb70edd5,0xbb4342e1,0xbacf9717,0xb8f07981, -0x3a9ad77f,0x3ae18df5,0x3acabd43,0x3a89acac,0x3a5479e6,0x3a02b622,0x3a4ee9c7,0x3abba845,0x3b32df91,0x3b27cbec,0x3b1fbd99,0x3b00491a,0x3b0efcee,0x3ad3e8b1,0x3a5a2a26,0xba3947f8,0xbab4ceb3,0xbb245b4b,0xbbabc314,0xbbbb10f8,0xbbff5db4,0xbbe8a14c,0xbbdd4e81,0xbbce1676,0xbbc1180b, -0xbb90d414,0xbb962344,0xbb2e10a2,0xbb3d2ce9,0xbaff6aef,0xbb18b273,0xbb05849e,0xbb13b753,0xbad4444a,0xbae3e3cb,0xb9e09a74,0x3a7f8aeb,0x3aa22ddf,0x3b0f65e5,0x3b09df51,0x3b0f61c1,0x3b14e8ba,0x3b08bdc2,0x3ae9e16c,0x3ac8f08b,0x3aa2c57f,0x3a82576d,0x3a1b69cc,0xb9a75d9c,0xba9369bf, -0xbab8f93a,0xbaf2b229,0xb9318af3,0xba02f841,0xbae98d39,0xba40902a,0xbadf1dec,0xbadeb818,0xbada8482,0xbb10c097,0xbae28b81,0xbb0a218e,0xbb418ecc,0xbb20c5f9,0xbb00beb6,0xbb11e4a5,0xbafcbddd,0xba6d2473,0xba260bf0,0x39a6ca71,0xb94e4c85,0x3aec734f,0x3ae3b4ce,0x3abcdea4,0x3ab98300, -0x3aa41631,0x3a9cafed,0x3a92c0d4,0x3aa2b63c,0x3a9ec531,0x3a840ac6,0x3a36b89d,0x39bec041,0x3929b2eb,0x39990b78,0x39ac06ac,0x3979851e,0xb8b5464b,0xb996fcff,0x38996c30,0xbb24f49b,0xbb59ceac,0xbb03929c,0xbb21638f,0xbb751cb2,0xbb4c9638,0xbb4ac570,0xbb477368,0xbb25b94a,0xbb35f274, -0xbb3554b1,0xbb28f8dc,0xbb6961ce,0xbb0b1ee8,0xbb07895b,0xbb3f3142,0xbaf0cf9b,0x3a694f20,0x398b542e,0x39aefcce,0x3990df00,0x39910a76,0x398cf87f,0x397a8c5c,0x3923e6ad,0x38bfbfbb,0x38acd0f7,0x38ca191b,0x38b407c7,0xb843f639,0xb91fee88,0xb988dd44,0xb9948f08,0xb990fe80,0xb9e8a219, -0x3aafdbec,0x3a953825,0x3a3b77c5,0x3b8fc88d,0x3b7e4f7b,0xba5ab8d3,0x3b832eb0,0x3b7867e9,0x3a2800d2,0x39e45834,0x39c85b00,0xb83de1c8,0xb900e24e,0xb9a74f52,0xba2fd7b0,0x3b72489e,0x3b8079e7,0xbaf1655d,0x3b4704ea,0x3b7832ef,0x3a198cc5,0x3a6599e4,0x3a87ca6d,0x3a82e344,0x3a97d24a, -0x3ab3a623,0x3af2d6f1,0x3ae85b6d,0x3ae9c737,0x3ad58920,0x3ae91a48,0x3ade31e5,0x3ab0166f,0x3abf8f37,0x3ab1ada5,0x3a897177,0x3aa4af11,0x3ac75163,0x3b304095,0x3b59216f,0x3b34e742,0x3b3cbf86,0x3b1814ea,0x3b1d4a69,0x3b33e1bf,0x3afa3bc3,0x3b2f2a89,0x3b7d7b2c,0x3b380cd7,0x3afec361, -0x3b1db686,0x3aea5145,0x3a9da4f6,0x3a8cbb48,0x39e434be,0x3a20f95a,0x3a9cc2a7,0x378b9ae4,0x3a5b6e5b,0x3a563b4d,0x3aa322ba,0x3afba36e,0x3b5b896f,0x3b5df18e,0x3b57d01b,0x3b32d1b2,0x3b3902c0,0x3b29aa00,0x3af8a3ab,0x3b128527,0x3b0a7699,0x3abcfd7f,0x3b0589aa,0x3a905275,0x3af2987e, -0x3b96301e,0x3b6d49d4,0x3b07afef,0x3b288644,0x3b07db44,0x3b2b3154,0x3b1d6a3b,0x3aae932d,0x3b941ae8,0x3a94b29d,0x3aee0205,0x3b063342,0x3aea70f9,0x3aaab88c,0xbab6b9b5,0xb9e9ef28,0x3a254f4d,0x39e24870,0xba48fc76,0x396a662b,0x3a1b2662,0x3ab59788,0x3b2f36ec,0x3bb1f22e,0x3ba4c7e9, -0x3ba7136a,0x3b7f5e8c,0x3ba3e34b,0x3b918081,0x3b186e49,0x3b4dbb10,0x3b0ade3c,0x3a364efc,0x3afee398,0x3b262abe,0x3b5a5abf,0x3bba63ef,0x3b818c9c,0x3a6ddb36,0x3b321159,0x3b6f78b9,0x3b8f3642,0x3b9704ed,0x3bbf3df9,0x3bc298ab,0x3b0bb893,0x3af2b746,0x3b34e1e4,0x39b974a8,0xba37c2f8, -0xbb3c0d63,0xbb34bd98,0xbaaec857,0xbac63ae2,0xbb316de3,0xba6cbd35,0x396f49db,0x3af9bf09,0x3b9de6c5,0x3c1ec3c8,0x3c21e731,0x3c051a08,0x3baf0ccb,0x3bcf601d,0x3bb916f7,0x3b39eb3b,0x3b9414d7,0x3b8d934e,0x3b0963dc,0x3b7b666f,0xbb055a52,0xb9882d55,0x3b635625,0x3b9bd93e,0x3bcd7275, -0x3b0635b8,0xbb2426b5,0xbb8990ef,0xbb393109,0xb9b29d76,0xba10a307,0x3baf0cd2,0x3b9f909d,0xbadb8a4f,0x3ad77fd0,0x3ae7ff2a,0x3adb4051,0x3a450b40,0x3af47c3f,0x3b3adf7b,0x3b476a61,0x3b362425,0x39472666,0x39b3193d,0xbb1eac06,0xbbf6f445,0xbbf66881,0xbb5c3e52,0x3bdf7a25,0x3bb4753a, -0x3bd8387b,0x3c1d706d,0x3adba8f5,0xbb4e6ff3,0xbb98acef,0xbb166581,0xbac0f53b,0x3b35d24a,0x39f3a357,0xbbb15597,0xbc158e16,0xbaf9c4f5,0x3b6e912c,0x3bac7108,0x3b4598a9,0x39a49b7f,0xbb51db7a,0xbaf1a3d7,0x39edfc82,0x3b03d3ae,0x3aeba00b,0x3a990d10,0x3ae6313f,0xbaac9b93,0xbae70f4a, -0xbac0f2ec,0x39e71386,0x3b334631,0x3b6f7669,0x39bc1859,0x3888847d,0x3a520847,0x3be297ad,0x3bc80d80,0xb9dd253d,0xbb08da46,0xb9c66c18,0x3bd475a0,0x3c20b2bb,0x3c4ae5bf,0x3c487821,0x3b86e39f,0xbc06866c,0x3b242bfe,0xbb203524,0xbb9e2b17,0xb9e099f9,0xbae598d7,0xba9a3e56,0xbb4bb485, -0xb9ec6bdf,0x3a4c4b47,0x3a99a6e0,0xba17c678,0xba9c225e,0x381a5963,0x3a0743b8,0x3ab9bf95,0x3adc5469,0x3ae51993,0x3b5a6097,0x3b2638d5,0x3a392761,0x3b0a4337,0x3b636ee9,0x3ba76b02,0x3bd2d953,0x3bcc0053,0x3b9da391,0x3b88cbc4,0x3b9e59a9,0x3bb2efb4,0x3c150bd2,0x3c8b7cd9,0x3a32360f, -0xbbc18db2,0xbad8b76c,0xbc190453,0x3bb0f779,0xbaa357eb,0x39f2fefa,0x3b0c82e6,0x3b1544ef,0x3a9e5a77,0x39d9df5d,0x39a2d642,0x39d84c2a,0xba8d8d8b,0xba9af6a4,0xba3a20ef,0xb9d8c8da,0xba345cb3,0xba504fde,0xba9b3b9a,0xbb0b5d19,0xbb44c1b5,0xbb23952d,0xbb21336d,0xbb29479c,0xba8fb48c, -0xb81e413a,0x3afedcba,0x3b8fa2ab,0x3bdc3281,0x3c1141d6,0x3c20024e,0x3c2a5baf,0x3be099a4,0x3b88ae42,0x3b949c57,0x3c16f409,0x3c51483c,0x3c6ac3c0,0x3c2b73dc,0x3c1ed0e1,0x3b5e2ca8,0x3aaf3f01,0x3b0723c5,0x3b39d476,0x3b6d0eab,0x3b421d0d,0x3b001f21,0x3af75850,0x3ae4c53a,0x3b07aa62, -0x3b14090e,0x3a93b4b8,0xba85dcc2,0xbb08ebb1,0xbb3a1561,0xbb38217d,0xba149573,0x3ad7add2,0x3afb68b3,0x3aa5dd2d,0x3ab85e5d,0x3aa0b15e,0x3af413ae,0x3b244f98,0x3b74f297,0x3bb712bb,0x3c05687c,0x3c43f522,0x3c2de9fd,0x3c3e96af,0x3c52504f,0x3c6f6036,0x3c72038e,0x3c4d97a3,0x3c4bec47, -0x3b5e6c3a,0x3ae713e1,0xbaba8073,0xba3925c3,0xba94bae1,0x3a437eb8,0x3a9a2734,0x3a687c32,0x3a204d4b,0xb8ddea1c,0xba49b3f9,0xbaf5c418,0xbb148a93,0xbb1ecf03,0xbadf4973,0xbab48015,0xbadbe69c,0xbb1e7621,0xbb0e8f00,0xba810292,0x3945b9cc,0x3ace289f,0x3af64324,0x3b60fc4b,0x3b730641, -0x3b49c1d2,0x3b086f3b,0x3a6247ba,0x3a02e7ae,0x3a75c8c9,0x3afde81e,0x3b6e4164,0x3b2ac4c6,0x3b52d0e2,0x3b88bca1,0x3b9261ad,0xbada60e7,0xbac3dcd2,0xbac6fdb0,0xbb47b15a,0xbba11152,0xbba27924,0xbba709f8,0xbba929f0,0xbb8dc3bf,0xbb7f5488,0xbb27b928,0xbb2f0e26,0xbb0c18d6,0xbaf9910a, -0xbadaeb9d,0xbad3fce3,0xbab161a3,0xba04e2ff,0x3a4dc73d,0x3a059f30,0x3948e067,0x3a8da67d,0x3abb9b01,0x3ab14043,0x3aa6d5df,0x3ab9bb71,0x3b09ed7b,0x3b43be7e,0x3b76828f,0x3b73c0b8,0x3b59ecd4,0x3b3edd11,0x3aec409c,0x3a49c62d,0xb9dc6731,0xba67d7f4,0x3a228362,0x3a4bfc60,0x375034b1, -0xb973a215,0x38733f85,0xb9d4d1a2,0xba5c3b3b,0xba9fea05,0xba9ac6bc,0xba08847b,0x38834212,0x38a1dce9,0xb953ab49,0x39827f76,0x39f52470,0x39cce396,0x3a95029a,0x3a3300b7,0x3ab54f7a,0x3a064a63,0x39757472,0x39e91bd7,0x39eadb9a,0x3a0e0758,0x3a2832cf,0x3a211b1c,0x3a0a2720,0x39ff47b4, -0x3a2f094e,0x3a663830,0x3aacca90,0x3afa5efd,0x3adaaa91,0x3ad419b9,0x3abedfae,0x3aa3b29b,0xb94d6066,0xb9de6772,0x3ac551ba,0x3aaaae18,0xba8263ca,0x3a5777ac,0x3a6507cc,0xba674d41,0xba35c351,0xba3fd4bb,0xba837090,0xba48e8f3,0xba2d7c74,0xba4bb62d,0x3ae4b6d1,0x3ac0a3fa,0xb99831e8, -0x3af08bd5,0x3ae1d02b,0xb9eb9a25,0xb8e1db07,0xb93c7392,0xb988fe01,0xb98da5cc,0xb99fbb4f,0xb9a6f847,0xb9288c33,0xb76eb017,0x38cac4c7,0x398d7cc3,0x39c7331c,0x3a1b074a,0x39a9eddd,0x39191c3c,0xb818ee1a,0xb8c6399e,0xb98bfefc,0xbb41c3da,0xbb1be3eb,0xbb43d397,0xbb778aeb,0xbac3b3a3, -0x3b70e1f1,0xbb8ac433,0xbb05d15c,0x3b255c8e,0x3b1d3569,0x3b253f7f,0x3b4a63d3,0x3b43bd5f,0x3b494510,0x3b603282,0xbafa8f86,0xbb882439,0x3b5e9fea,0xbb009931,0xbb86a6f7,0xbb56484a,0xbb434ba8,0xbb5b748c,0xbb5e9c82,0xbb558e57,0xbb4ac3fe,0xbb2ebb45,0xbb340ff4,0xbb341166,0xbb3e0d53, -0xbb44fb6c,0xbb55b98d,0xbb7004a0,0xbb7c7371,0xbb6f6799,0xbb2e9ffa,0xbb36bc6a,0xbab69ddd,0xbb546468,0x3a29b742,0xbb0c097c,0xbac7bdbc,0xba797629,0xbacf3c55,0xba432c2c,0xbb029d11,0xbb2d2183,0xbb07985a,0xbb39f644,0xbb09d729,0xbb21df16,0xba8c0622,0xbad1cd56,0xbb85f704,0xbb53a797, -0xba97a01b,0xbb99b310,0xbb952f18,0xbbadbe61,0xbbae02b3,0xbb9c7490,0xbb79e6a6,0xbb157808,0xbb1272d8,0xbb27066e,0xbb6247ef,0xbb803e98,0xbb9a642e,0xbbb40e96,0xbbc7605c,0xbba71dc8,0xbb0ec2c5,0xbb0e2cd5,0xba9aa90e,0xbb433702,0xbaffcdd8,0xba88a857,0xb98aa3f5,0xb8bf68d2,0xb9a1914f, -0x3a040321,0xb9498057,0x385c3935,0x3a4041ff,0xb94b85ed,0x3903cae9,0xba1511c0,0xba13cd3d,0xbaa4f52c,0xbb64c786,0xbb5115d2,0xbb7cba64,0xbb8f8e09,0xbbc0f3dd,0xbbd6e8b6,0xbbe6a56f,0xbbcf0383,0xbba3f03d,0xbb1ea6d1,0xbb2af1eb,0xbb3438d0,0xbb886324,0xbb8cd827,0xbbc54dda,0xbc02d445, -0xbc155361,0xbbf62aca,0xbb07ed4f,0xbb1ceebe,0x3b0e2aaa,0xba0de82e,0x3a515748,0x39cbc199,0xb8e7c50d,0x3a60fa57,0x3b3b70af,0x3b9e8801,0x3b8fe778,0x3bac9263,0x3bcb79d3,0x3b1e2ee0,0x3ad2e744,0x3b351aaf,0x39a5ef33,0xba5d0e7b,0xbb8aebbd,0xbb7f107f,0xbb860049,0xbbbb2dbf,0xbc13222e, -0xbc2f3ec0,0xbc39731d,0xbc1c3561,0xbbc5e653,0xb98b61e9,0x39543760,0xbad76515,0xbb9f80e7,0xbbc8e3db,0xbc09ddd0,0xbc386a1a,0xbc43cfbe,0xbbf9efd2,0x3a835964,0x3aa0f94f,0xbc2492ea,0xbc1200f2,0xbbae8c05,0xba86c992,0x3b8fedac,0x3a96620b,0xbb4ed22c,0xbbb2a286,0xbb85d4c5,0xbab4d15c, -0xba46f999,0x3bac3810,0x3ba2b35c,0xbafd2a3d,0x3a5c5099,0x3a623c0c,0x3a75186f,0xbaa4a15d,0xbafb5d5e,0xbb3b23e2,0xbb14fd3b,0xb9822033,0x38ff5b19,0xba4bc2ab,0xbb3be9f1,0xbbb2bffc,0xbbfa2046,0xbb9f44da,0x3b459db8,0xba4a9d53,0xbb521f60,0xbb965ca7,0xbc390e4b,0xbc63c759,0xbc47c962, -0xbc35d2bd,0x3b0f0b3c,0x3a924869,0xbb8eef28,0xbc04e13d,0xbc4d487b,0xbbacb5cd,0x3ae23412,0x3b854c35,0x3b51db1d,0x39e9ab23,0xbb5bf613,0xbb174fad,0xb933c56c,0x3aed6df3,0x3a58b3a1,0xb9f216f7,0xba3add96,0xbb0acc47,0xbb163b83,0xbb97eb9c,0xbbbc0429,0xbbec2a5c,0xbc1aa4ec,0xbc06ccb0, -0xbba87f6a,0xbb0c59d8,0x3bc5089d,0x3bb42b5d,0xbacaeb3c,0xbb7e5ec5,0xbb509a62,0x3b1f6c35,0x3b7b4feb,0x3bdaf0ce,0x3c2305cc,0x3b77e04d,0xbc538f8a,0xbb8b2eca,0xbb591b76,0xbb6d2b07,0xba98c0c5,0xba89b199,0xbabd9190,0xbb8ce671,0xbaf369d8,0x383b38c1,0x3a7b24d4,0xba42c80d,0xbaa99d36, -0xb934bd4d,0xba27f34c,0xb903f83d,0x39ebe067,0xb9aa30e5,0xba58d26b,0xba610144,0x3a187017,0x3b0056b3,0x3b40846a,0xb901f4bf,0xbb7096e3,0xbbf3fdd6,0xbc095e8d,0xbbb1f064,0xb8997851,0x3acb5fcf,0xbb253883,0xbc26e14c,0xbcceacf9,0xbce97745,0xbcadb900,0xbc88a313,0xbb8b0f18,0x394aab19, -0x3a27172e,0x3a174b9b,0x3b409266,0xb8a57577,0xb8274066,0xb840867d,0x3922533a,0xba84ab30,0xbaca05ca,0xba4c8aca,0xb9aa72fb,0xbaa13a24,0xba84801f,0xbae6bc54,0xbb56c744,0xbb7a1b58,0xbb724216,0xbb6b8f34,0xbbb1c50d,0xbbdc1218,0xbbe2a4b3,0xbba46b0e,0xbad98e1e,0x3b15db7b,0x3b2fe7d0, -0x3b2cf7e8,0x3b26bb9a,0xba687aa0,0xbb329795,0xba79f7df,0xbbf195f9,0xbc32d376,0xbc712d26,0xbc09b35f,0xbc638854,0xbc256cb8,0xba36f953,0xba566283,0x38784674,0x3b0d6d26,0x3b0cac19,0x3a05d67d,0x3a5f225b,0x3a6f7d3a,0x3a6551ee,0x3ae6fab2,0x3a6d8ff5,0xbaa3a380,0xbb1b073c,0xbb534340, -0xbb48d2ae,0xbb31f43e,0xbac21d29,0xba1ffba6,0x39387bac,0x3a816b09,0x3a39efe1,0x3a1b7924,0xba3452ed,0xbb33c19d,0xbadf7d72,0xba78ae7c,0xb995fb2e,0x3a3e9613,0x3a2d3088,0xba7fb3ab,0xbb3a7240,0xbba9bf30,0xbc105e28,0xbc3cd348,0xbaf746b8,0xbb8a655e,0xba86fc89,0xbb0ca751,0xba4d2105, -0x39026227,0x3aa7906d,0x3a6d3438,0x3a5aab83,0x39afe8e6,0xb98b55fa,0xbaf827b7,0xbb2b62fb,0xbb36a73b,0xbb22382d,0xbb37e7dd,0xbb57b09d,0xbb51e9d8,0xbb2259a7,0xba94d519,0xba4b6153,0xba41f51f,0xba76727e,0xba80a33d,0xba828a04,0xbaa970a6,0xbaaba5bb,0xba17f1aa,0x3a92353f,0x3a3e2c47, -0xb9eea8c5,0xbb4744e8,0xbab6ba91,0xb9e5efff,0x39e2a5a1,0xb96548ab,0xbb92a605,0xbb955603,0xbbb26a2b,0xbbd5bbf4,0xbbef71b0,0xbbe1c01f,0xbbcbd485,0xbbbea238,0xbb9f1d17,0xbb896230,0xbb6723de,0xbb453181,0xbb11bf2c,0xbb12413d,0xbb036d5c,0xbb0f5cb8,0xbb0799ad,0xbaf4e3ff,0xbafe6451, -0xbb17062b,0xbab5c3a6,0xb983ab26,0x3a6ebdd1,0x3a3db17e,0x3a246010,0x3a4bb39f,0x3873d2ff,0xba3679a3,0xbab9394c,0xbb024346,0xbb1579b0,0xbb3e497d,0xbb45348b,0xbb649bb8,0xbb746421,0xbb8aecf2,0xbab1dfac,0xbaea600f,0x395787b6,0xbae96820,0xbae0a697,0xbae18522,0xbb31d5bb,0xbb4dcad9, -0xbb5d6a45,0xbb6cf7eb,0xbb623cdb,0xbb7719f7,0xbb5e6b61,0xbb5ac674,0xbb113b96,0xbac4637b,0xbaf03bed,0xba6a6fe3,0x3953f3d2,0x39a13bcf,0x3a643343,0x3a1c5210,0x3a390f73,0x3a4c97a0,0x3a7bd173,0x3a966412,0x3a51fb31,0x39db5bc1,0xb90653fb,0xba4565a1,0xbac317ce,0xbb0fa19d,0xbb03e238, -0xbaebe846,0xbacdfa90,0xbac6381f,0xbb2131b6,0xbb3066f0,0xbb51b64d,0xbb0c6ab9,0x3a4454fe,0xbb84854f,0xbb36f802,0xb9d19517,0xb8cdc886,0x38b9ca88,0x39ce9d00,0x3a25b6a8,0x3a65b571,0x3a90629a,0xbb1d72a0,0xbb5eb98a,0x3aa97cfd,0xbae702dc,0xbb2504bd,0xbab7ea48,0xbac34547,0xbac7c501, -0xbac31436,0xbabf0c7d,0xbabd994e,0xbab24580,0xbad622f9,0xbaed382f,0xbaff8c4d,0xbb082509,0xbb0e6f3d,0xbb1e43b3,0xbb1c34c3,0xbb233104,0xbb279103,0xbb2ba12e,0xbb46b2ab,0x3b5cfe8c,0x3b3c517c,0x3b84fb45,0x3b2141fd,0xba579fcc,0xbbb79d58,0x3b70217d,0xb988aabb,0xbb952747,0xbba765ee, -0xbba7f2d4,0xbba0e64a,0xbbaf0e72,0xbbb3240d,0xbbb9bcc9,0xb9a77dba,0x3b5124d9,0xbbdb3519,0xba949d68,0x3af1b566,0x3b6fdd0e,0x3b2cec58,0x3b4cefaf,0x3b4d98f6,0x3b5e2d00,0x3b6b7dab,0x3b83b055,0x3b761e5d,0x3b759d80,0x3b6ebc92,0x3b7ed77f,0x3b7a1d41,0x3b637940,0x3b5e31ee,0x3b50dc62, -0x3b322051,0x3b505c08,0x3b821154,0x3b9ada46,0xbab5c563,0x3b801768,0x3aefe0b7,0x3a8f5ffb,0x3b21e038,0x3b275ca3,0x3b357e35,0x3b359320,0x3b0a93c5,0x3b400c5f,0x3b24bbba,0x3b0fcc03,0x3a90e6ba,0x3a981fd3,0x3a5851cf,0x3a498432,0xbb5ac69f,0x3b2549eb,0x3b1e8be2,0x3b43551c,0x3b66cc87, -0x3b8e6183,0x3ba8dd19,0x3bcfe9e7,0x3bbca9b5,0x3bb059fb,0x3b9f0513,0x3babf2e4,0x3ba4dd8b,0x3b895b0c,0x3b81a400,0x3b6c2df6,0x3b39981e,0x3b7c6ead,0x3b860e41,0x3b652875,0x3b2b61ec,0x3b4d9d3b,0x3ab966d1,0x3ae46aac,0x3a906665,0x3b19dda9,0x3a096c72,0x3a7eacfe,0x3af21da8,0x3b177fef, -0x3a83491d,0x3b01b470,0x3a907889,0x3afa276d,0xba6cdb1f,0xb9f01cd5,0xba81a767,0x3a3f3406,0x3b16e798,0x3b3077fe,0x3b76820c,0x3ba62beb,0x3bd1a73f,0x3c0ef40f,0x3bef0ba2,0x3bebcb3d,0x3bd1dc4f,0x3c01a030,0x3bf39fce,0x3bab2e9d,0x3b9bf2be,0x3b62c874,0x3b03d105,0x3b6c42ce,0x3bcfeb85, -0x3b96aa9a,0x3b84ba20,0x3b98531d,0x3b14df7d,0x3b21dacc,0x3b506357,0x3b9a0d75,0x3b8e5466,0x3ba186f2,0x3bae59a5,0x3b028daf,0x3b152cab,0x3b3d9bd6,0x3aec3004,0x3ab90620,0xbb5446a9,0xbad6540b,0xbb5bc040,0xbaca9532,0x39a1b4e1,0x3ac2c79f,0x3b85aed1,0x3be1579c,0x3c27f2ab,0x3c6d09e6, -0x3c4c8dcd,0x3c2286db,0x3bfa14de,0x3c18e2c7,0x3c0d0dd8,0x3bb225e9,0x3ba956c3,0x3b90c8f3,0x3b3fdf9c,0x3ba8db56,0x3b06a418,0xba844ec5,0xbb0c9501,0x3a37ef09,0x3b61ec30,0x3aed2ca2,0xba8c8393,0xbb930834,0xbb74ecd1,0xba6f0cbe,0xb9f1f05c,0x3bb641e3,0x3bab5490,0xbac8ab38,0x3a8ce98e, -0x3aeab745,0x3b2006a8,0x3b3d2766,0x3a9cbec4,0x3b582bcb,0x3c0addbb,0x3be0fe46,0x3bb5220a,0x3b18ce43,0xba317040,0xbb91c504,0xbb0f3a9e,0x3b61265b,0x3c56dde4,0x3c315807,0x3c394046,0x3c5bb5fd,0x3b9a25f9,0x39d655c9,0xba9eba13,0x39117c79,0x3bca45d4,0x3bcb5c9a,0x3ac89561,0xbb796c90, -0xbc00b5b2,0xbb926aab,0x3a36a0f8,0x3b6be843,0x3b726a82,0x3aad252d,0xbb45c522,0xbb2afce1,0xb9f50cc9,0x3af25c10,0x3ada4124,0x3a7c100a,0x3a20cb4e,0xbaa5a556,0xbb3b6bb0,0xbae8ca51,0x3b2f2105,0x3b82a7f5,0x3bd067a7,0x3b34240b,0x3b0a4dfb,0x3b217056,0x3bf278e3,0x3bc088ce,0xb9cef8a4, -0xba90600f,0x39fdd785,0x3b9a8f4b,0x3c2056e6,0x3c37a204,0x3c031bd0,0x3bd0711a,0xbc4b4a61,0xbbf536af,0xbb98768a,0xbb440c8c,0xbad408a8,0x3a12cf02,0xb99e2f3f,0xbb842ce8,0xbaf2cacf,0xb79561d9,0x3ab30839,0x38f6a0b2,0xba3767b0,0xb99fccfb,0xb992b765,0x3a97e61c,0x3aabebf8,0x3b00569a, -0x3b095b8a,0x3b02c6aa,0x3b5451b3,0x3b5c33b3,0x3b8881c8,0x3bf74c77,0x3c2207ef,0x3c238335,0x3c1ffe7e,0x3c1ee10d,0x3c0e35dd,0x3c6b7378,0x3c82eff4,0x3c4c5d88,0x3b954be7,0x3a13431a,0x3b3ef6ec,0xbc0f178c,0x3c2bd7b8,0x3b4e950b,0x3b1887d2,0x3b6a69ee,0x3b587732,0x3ad93f73,0x39448765, -0x3a49cece,0x39d3acf6,0xba482bf4,0xbaa4c832,0xb9853787,0x3879149c,0xba0ccee6,0xb88b7180,0xba697074,0xbb0843a5,0xbb2e0daa,0xbb661365,0xbb1213a4,0xba0217ad,0x3a768a3a,0x3b0aee3d,0x3b7e2cdf,0x3baae085,0x3bda95ad,0x3bf7578e,0x3bf92c9f,0x3beaec71,0x3b3eee49,0x3b081621,0x3bac79f6, -0x3c3e70e2,0x3c837aee,0x3ca1c032,0x3c5f11ae,0x3be57d0c,0xbab979f0,0xbbab6b24,0xb9ff1577,0x3aba5d2f,0x3b0b7f90,0x3b293c66,0x3b0b338b,0x3af43d97,0x3b18a71e,0x3ad9b62c,0x3b08689e,0x3aa72edd,0xb8e5dc34,0xbb001226,0xbb494b20,0xbb31977c,0xbac50470,0xba428e54,0x3ab23f0d,0x3a9e041c, -0x3a853ee8,0x3ab55728,0x3b0a0504,0x3b609c42,0x3bba1d73,0x3bfd6ab4,0x3c252ce8,0x3c6182a5,0x3c4a8c78,0x3c590b45,0x3c6dda04,0x3c85c191,0x3c71d0f5,0x3c2c29ed,0x3c08f651,0x3c017543,0x3b83b3df,0xba9de1d7,0x3a9df0c0,0x3a9c244e,0x3b449108,0x3b6ec4e5,0x3b282540,0x3b379e3e,0x3ae904fc, -0x3a667558,0xba61fc04,0xbadb7ca5,0xbb136a59,0xbad6344a,0xbab9b994,0xbaaac7c1,0xbb2c96c4,0xbb1ff1e7,0xbaf4a1be,0x39e680b5,0x3b0f34db,0x3b257656,0x3b75861b,0x3b76c47a,0x3b3fc871,0x3b027c96,0x3a6e0020,0x398510df,0x3aa96e55,0x3b600c9e,0x3be5f22c,0x3bcd379b,0x3be70cae,0x3c0ba27b, -0x3c05a20e,0xba0fccd0,0xbb01aabe,0xbb513cdf,0xbb676212,0xbbbd96cc,0xbbabda0e,0xbba10958,0xbb900255,0xbb8d2ad6,0xbb5c65e3,0xbb420b33,0xbb08f638,0xbb262592,0xbb039828,0xbb058176,0xbae4a8b4,0xbaeed0fe,0xbaa9f9f8,0xba570d75,0xb94804e9,0x3a1287a0,0x3a6bfcc4,0x3ac96f22,0x3aa3ef9e, -0x3a959beb,0x3a9aa2eb,0x3b017a72,0x3b37b330,0x3b62c8a4,0x3b80a7c9,0x3b7af2d2,0x3b832841,0x3b472742,0x3b0fcc66,0x3aaa4da1,0xb837e57a,0x3a8fcf90,0x3a64945c,0xbb0e7f98,0xb9720a67,0xba82f842,0xbab904b0,0xba9b8a8c,0xbaeae5e6,0xba93e27a,0xba404ff0,0xba8b0b0d,0xb9c84507,0xb9ac517e, -0xb938692a,0xba0454d8,0xb987f887,0x3a548793,0x3a24ef37,0x36cb7b23,0x3a27f81d,0x3981e6b4,0x3a13b16a,0x3a3ebeae,0x3a6c6112,0x3a95a1f1,0x3a9dbb1c,0x3ad6be38,0x3b064a01,0x3b28f119,0x3b453969,0x3b6b8ff1,0x3b8ba487,0x3b67d36b,0x3b4310c9,0x3b1f84e6,0x3af81b5d,0x38c67c34,0x39718b9f, -0xb95b5780,0xbaf059de,0xbb8fb9cf,0xb8312ab3,0xbb05fd2c,0xbb935434,0xbb9247c7,0xbb94f4e0,0xbb9330b3,0xbb97bba0,0xbb999b62,0xbb9b4316,0xbaa796bd,0x3a1139f5,0xbb82506a,0xba85fd54,0x39f6d80f,0x39e8fcf0,0x39b895c8,0x39e749e3,0x39c1f486,0x39dffcf5,0x39ee276f,0x39f1fd60,0x3a371c80, -0x3a666b91,0x3a8b1de4,0x3aaa843c,0x3ac40585,0x3af89988,0x3ab670fa,0x3a8e01a9,0x3a3f2e4d,0x39ffb39d,0x39a47f0f,0xbb552a2a,0xbb28adf0,0xbb916d32,0xb9fdb563,0x3b5113bc,0x3bd49324,0xbb0b6104,0x3b0cfbaa,0x3bc306dc,0x3bbf370f,0x3bbec058,0x3bb3e7ff,0x3bc9cf5f,0x3bccaff0,0x3bc81920, -0x3b243b89,0xbabe2e4d,0x3bcb1964,0x3b1fbbd5,0xba473814,0xbb941e8c,0xbb51fedc,0xbb6e5479,0xbb71ef2d,0xbb62c567,0xbb54d1a4,0xbb30d02b,0xbb451289,0xbb4a6e22,0xbb5b0bc0,0xbb54ef41,0xbb60e6db,0xbb7eb04e,0xbb7b1d1c,0xbb6ba923,0xbb32e60a,0xbb421a1d,0xbaf44381,0xbb4de465,0x3b9d626a, -0xbae63807,0x3a5535d2,0x3a00757c,0xba945fab,0x388af509,0xbb14c88f,0xbb11e8e6,0xba3138c8,0xbae420ec,0xbab50855,0xbaba3d70,0x3a2c797c,0xb940d077,0xbaf12539,0xbb14a097,0x3b0acd2f,0xbb92c20a,0xbba922ad,0xbba892d3,0xbbb06304,0xbb965a37,0xbb72a6f6,0xbb067c6d,0xbb2c9266,0xbb4b4be2, -0xbb8459c9,0xbb821a6f,0xbb8f357d,0xbba877fb,0xbba3a5f1,0xbb8523d1,0xbadff597,0xbae871f5,0xbb131430,0xbb4c551b,0x3a3b0d93,0x38b0970c,0x3afcaab0,0x3a2bae65,0x38a888fe,0x3a56f514,0x38bf5c6a,0xbaaf4da8,0x3a38eddf,0xba9525a8,0x3ac94227,0xba20f083,0x3abe2f58,0x3959efd9,0xbae69131, -0xbae9a699,0xbaca4030,0xbb7933e6,0xbbde2c3c,0xbbcce7b3,0xbbe3992d,0xbbb7ab8a,0xbb8b55c7,0xba86a5c1,0xbb3007f2,0xbb4d1866,0xbb9e638a,0xbb865530,0xbba84b91,0xbbf41203,0xbbdfb6ef,0xbbb29d7b,0xbac2494e,0xbadca2a8,0x3a810f3c,0xb9578e11,0x3b4ec1c2,0x3aa17c71,0x3ab7aabd,0x3a573403, -0x3adee826,0x3b8d79cb,0x3b4f504c,0x3b81328a,0x3b78a8a7,0x3b114ed0,0x3ae110a8,0x3ae17fd1,0x3a8f5860,0xb981fae7,0xbb171083,0xbb841741,0xbb26f424,0xbbc11f68,0xbc241eed,0xbc1eaebf,0xbc2934bc,0xbbf9ccd5,0xbb850cc4,0x3af5368f,0x36169257,0xbb2be492,0xbbc7a79d,0xbbb1fd19,0xbbce8a83, -0xbc16a716,0xbbec6741,0xbb6e4c8f,0x3b1980c0,0x3b385a54,0xbc5496ad,0xbbee8196,0xbb1ff272,0xb9df4340,0x3ba01390,0x3b469b35,0xbaa6ae8c,0xbba174bd,0xbb8e7739,0xbad020f1,0xb9f459ef,0x3ba4bfa5,0x3b9a38d1,0xba9eb872,0x3a033e80,0x394591b6,0x3b2f5024,0xb8c41b32,0x3ad411c2,0x394a2897, -0xbb116ac1,0xba3882e5,0xbb3bf5dc,0xbb328ca8,0xbbb4e53e,0xbc09fa54,0xbc232788,0xbbd633c9,0x3a926480,0xbb32d526,0xbb90d00d,0xbb83a89f,0xbc30b6a0,0xbc5861b4,0xbc4de7a5,0xbc435ce7,0x3ace2cdf,0x3aeb7bf1,0x3a0babc8,0xbbb70028,0xbc3990a0,0xbbe44042,0xbacc5929,0x3b18bf0a,0x3b522641, -0x3a9b0d62,0xbb4ac659,0xbb487439,0xba8ce443,0x3a908d07,0xb8ac9494,0xba696627,0xba333131,0xbaca70dd,0xba063ef6,0xbb80d33a,0xbbb5d288,0xbbc38dbd,0xbc0f8e57,0xbbf6f8cc,0xbb86e2b9,0x3a505f5b,0x3bec7089,0x3baf3292,0xbb2cb8f6,0xbb7a9310,0xbadd9f12,0x3b74897b,0x3bf240df,0x3c0515c1, -0x3bb29cdc,0x3b698fd1,0xbc86353e,0xbc6675ce,0xbb66633d,0xbafeb1c2,0xba85dde4,0x3a84240a,0x3a0d05b4,0xbb9ae669,0xbb2c3aa6,0xba84262a,0x3a6e7230,0xb98abab4,0xba870818,0xba38d5ad,0xba7a4aa9,0xba313259,0x3aa94860,0xba2679d2,0xb9631d61,0xbae24a64,0xba3d9866,0x3b01a0fd,0x3afba9ea, -0xbaa9c0e6,0xbbad13cc,0xbc0e7c19,0xbc22a008,0xbbf052fb,0xbb4c031d,0x3ace5166,0xbb56b190,0xbc856a58,0xbcab638e,0xbca6d4e9,0xbc80ddcf,0xbc74e0a2,0x3aea1c01,0x3bcca241,0x3b6be7c3,0x3ad2ec2e,0x3b827c37,0xb910e246,0xb9f71df0,0x3755a071,0x38ad3253,0xba2be0c0,0xbab21a22,0xba1186af, -0xb8e6127c,0xba55aa04,0xb9f55cce,0xba8e487c,0xbb404e7c,0xbb7ac938,0xbb203f5a,0xbb74f8cd,0xbbc3005e,0xbbd1c1cc,0xbbd8a0d4,0xbb6ff2c6,0xba23f5e6,0x3b4f4e3d,0x3b5bcbae,0x3b580762,0x3b402394,0xba8a4149,0xbb2fd0cb,0xbb54a62d,0xbba4c366,0xbbe85306,0xbc194e41,0xbb0c46b6,0xbc7181d5, -0xbbff5c96,0x3a7b6761,0xb8afac09,0x3a06f189,0x3b1769a6,0x3b0a8dbe,0x3ab8af54,0x3b02f00a,0x3aae8e29,0x3a7032b7,0x3aa2291e,0x3a44cb97,0xb958e601,0xbb0953ab,0xbb55ab76,0xbb5e903b,0xbb4813c9,0xba659265,0xbac53c07,0xba0e1849,0x3a74a71a,0x396e42b9,0x3a89b7b9,0x3a539b08,0x3a14bd58, -0x3ac8ec76,0x3b18cc7b,0x3b4d61de,0x3b2056ac,0x3ae467be,0xba4e2e16,0xba8d1e6a,0xbb7c3c3b,0xbc2721da,0xbc492580,0x3a8caf54,0x3a513c6e,0x3b85c892,0x3b1e3c50,0x3b67bd49,0x3b687def,0x3b55787b,0x3b384070,0x3b1640b3,0x3ad47e28,0x39ef08ff,0xba5f13a3,0xbb09eb35,0xbb3b6a10,0xbb2bcf63, -0xbb1f0538,0xbb118bce,0xbb2fa0bf,0xbb3032a3,0xbaf7a077,0xbafdab6c,0xbaeaeefb,0xbada0fe5,0xba83c82b,0xba5a972c,0xbab86d5b,0xbae5178a,0xbac4743c,0xba00ab82,0xba28d3f0,0xbacef6ac,0xbb77dd9a,0xbb09ae71,0xb94a27ad,0x3b019499,0x3b29f48b,0xbbac35b0,0xbb9c75d0,0xbb8279c9,0xbbb110b9, -0xbbb34a15,0xbbb1bcfb,0xbb9d6a7c,0xbb976b5f,0xbb6a2020,0xbb724a1e,0xbb22f487,0xbb534f42,0xbb005a34,0xbb2d2457,0xbb01182d,0xbb21304a,0xbb0e9a67,0xbb05c3f8,0xbad0b736,0xbb3c4dae,0xbb33042b,0xbaa15555,0xb99981e9,0xb9e86ed6,0xba0fea35,0xb9a18c6e,0xba8177b3,0xbad0a8e2,0xbb0ed958, -0xbb289cec,0xbb3486fe,0xbb4c8247,0xbb313048,0xbb3b2e30,0xbb530ea5,0xbb867b60,0xbaedf0d2,0xbb0eff71,0x3a702bcf,0xbb1cb5f8,0xbad0db0c,0xbae884b2,0xbb519c5a,0xbb64667e,0xbb84e008,0xbb7b2e27,0xbb381760,0xbb66aca4,0xbb6233d8,0xbb462c90,0xbaea48bc,0xbad60107,0xbb023054,0xbad1c623, -0x39a35bd7,0xba9f27af,0xba083d71,0xba0c81b3,0xb9aeff83,0xb7ac237e,0x39ab7001,0x3a37e9b5,0x394a064b,0xb949a1e1,0xba246c6d,0xba8e16c3,0xbad5191f,0xbb1139b0,0xbb1a63e6,0xbb1717c0,0xbb085ecd,0xbaf3908d,0xbb586805,0xbb811b63,0xbb0f2cb3,0xb9d19491,0x3ac826a9,0xbb65a08f,0xba8e2b2a, -0x3a6014b4,0x3aaa806f,0x3ac3aa3c,0x3abd79e6,0x3b034a12,0x3b19fa40,0x3b22aee0,0xb9c4a51a,0xbb2ea982,0x3b264d38,0x37620681,0xbaddc972,0xbb3bef33,0xbb1d1a19,0xbb223089,0xbb1c3b65,0xbb186728,0xbb1645f0,0xbb0c9ad7,0xbb1c36b0,0xbb252885,0xbb2e2afd,0xbb368c87,0xbb3bc5e6,0xbb42a55a, -0xbb4208db,0xbb4a3440,0xbb55efeb,0xbb603fa0,0xbb7e80c9,0x3b1bb299,0x3b091c37,0x3b6e43ef,0xba9b9b5d,0xbb89d3b0,0xbbaacd9c,0x39e0a061,0xbb707cc8,0xbbaf6436,0xbbc52e8e,0xbbc3ece6,0xbbad1628,0xbbba4ff9,0xbbb8b78d,0xbbb5649f,0xbb68976a,0xb5a1e8ce,0xbbc2bfe5,0xbb87db1f,0xbad7651d, -0x3b4d46a9,0x3ae5d981,0x3b0cd8e8,0x3b0f2d21,0x3b2223ce,0x3b2db79b,0x3b458781,0x3b2e2b5a,0x3b2bd24f,0x3b238593,0x3b33d161,0x3b2c4365,0x3b12224a,0x3b05929b,0x3afd89c4,0x3af99f0d,0x3b1533fc,0x3b6abd9c,0x3b44c422,0xbb7d32e4,0x3b14ca1e,0xb893f774,0xba2e9a39,0x3a4676c7,0x3a87b9d5, -0x3aac3829,0x3a0a4952,0xba82888a,0x3a45ca3d,0x3a98a7aa,0x39ab294c,0xb8b27d4a,0x397e5dc3,0xba569fb0,0xb9ca09e8,0xbba75bd5,0x3a369b93,0x3ac2483f,0x3abea7b3,0x3b123fd7,0x3b57bb9e,0x3b8a12e6,0x3bab60c4,0x3b8d2c12,0x3b729cb4,0x3b44feda,0x3b63c04a,0x3b4cde98,0x3b0b7dcb,0x3ace1a26, -0x3acffe01,0x3b088aba,0x3b3dce11,0x3b8612f4,0x3b06ab74,0xba22ac51,0x3a881f76,0x3a144ab7,0x39440c4a,0xb9f83cfd,0x3a9b35f4,0xbac9822c,0xb952f968,0xbaab5be3,0x3af80d59,0x390417ac,0x3a6f28bb,0x3942b804,0x3aaff76e,0xba5ca430,0xbaa0415a,0xbb44ea12,0xba741f66,0x3abfc56f,0x3a94692a, -0x3b0aee1d,0x3b730a48,0x3ba3256b,0x3be18491,0x3ba42c0e,0x3b9bad45,0x3b807270,0x3baea83e,0x3b968bcc,0x3b119af0,0x3a8cdba8,0x3a43e6be,0x3adef645,0x3b2ab979,0x3bea7fbf,0x3b4f5ea1,0x3aa8424b,0x3b53850f,0x3b2f7482,0x3aa15705,0x3b02cb52,0x3b8e91af,0x3b5da91f,0x3b5e8858,0x3b6e8a49, -0x3b0086bc,0x3b27619f,0x3b34b23a,0x3b29ea36,0x3b252e38,0xbb3c8b26,0xbab797ee,0xbba555ce,0xbb5888f7,0xba8270d3,0xba8a0390,0x3ac1f935,0x3ba2beb5,0x3c0ce6fc,0x3c49c0b5,0x3c17d1f4,0x3bd07159,0x3b83fb35,0x3bb7b2ea,0x3b935465,0x3a84b5fa,0xb8715d7f,0x3a4694e1,0x3b53d370,0x3b99cae6, -0x38dcb35c,0xbb85c67a,0xbbf20eeb,0xbb58cf43,0x3ac71321,0x3aa29617,0xba14edf7,0xbb9c1a58,0xbb880dc5,0xbaa3035c,0xb925ce51,0x3ba355c5,0x3b96bab3,0xba8bcb75,0x39694e39,0x3a91dcf2,0x3b2ef999,0x3b68d12d,0x3a48f17b,0x3b3e210a,0x3c15499b,0x3befdea5,0x3be88c5a,0x3af31d4e,0xba98d7c6, -0xbb3a1a9f,0xb91f7e33,0x3bbaabdf,0x3c5f551b,0x3c25dfbf,0x3c11e042,0x3c1598c7,0x3a9268e9,0xbaf56a64,0xbb1bb718,0xbb195693,0x3c231862,0x3bd81a17,0x3aa43f55,0xbb48496c,0xbc0a6016,0xbbe1e3f6,0xbaf33a22,0x3ae4b42d,0x3b5fddc1,0x3ac79f5c,0xbb26adc9,0xbb472da8,0xbaa8b62f,0x3accc76a, -0x3a55a7ad,0xb8844125,0xba891b57,0xba80033f,0xbb29255e,0xbb207f60,0x3ab1e73d,0x3a353220,0x3b1b3e4f,0x3a1a6122,0x3abf8420,0x3b6eb214,0x3bdb2846,0x3b8d8757,0xbad407fb,0xbacf5b23,0x38f1a1aa,0x3b3101c1,0x3bfefd5d,0x3c05274c,0x3b70b91b,0x3bc3890d,0xbc7fba42,0xbc8f8b7e,0xbbc7cad7, -0xba76e4f9,0xbb54ce30,0x3b14f0ca,0x3a101c00,0xbb8bc176,0xbb2e7344,0xba32f944,0x3a8a5d9b,0x3a353e19,0xb985c3c8,0xba5f62ce,0xba850ceb,0x39f47b09,0x3a5a4bc6,0x3a90494e,0xb9986c8a,0x387dd83d,0x3b70a7b1,0x3b532f6b,0x3b66c086,0x3bba813e,0x3bd42f39,0x3bb8a6a4,0x3bc73ab1,0x3bf0f977, -0x3bdb2e70,0x3c85bbad,0x3c68141b,0xbaadb9e2,0xbb3aa37a,0xbb872c73,0xbb2efafe,0xbc21619c,0x3c26f676,0x3c0189d5,0x3b9b0f24,0x3b826b23,0x3b673c74,0x3aabe8f1,0x388b1eb3,0x3a7c2de5,0x39d0a119,0xb996e0c9,0xbaa300fd,0xb984c9e5,0x3892ea6e,0xb9d351fa,0x39123ae9,0xba7a8886,0xbb14f021, -0xbb310234,0xbb88cd35,0xbb2c4af7,0xba3abcaa,0xb9591f68,0x3a353b02,0x3b19fb8a,0x3b5f89e8,0x3ba04e2d,0x3b8e6e85,0x3b5d0663,0x3ad39cd6,0xbb0e24d5,0xbae6fa86,0x3b203616,0x3ba4b6d8,0x3be609d3,0x3c203fd9,0x3c017449,0xbb5a51e8,0xbbfbd2db,0xbc0636ac,0xbb1cbcc9,0x38246e06,0x3a28b9f3, -0x3ad1d736,0x3ae115f1,0x3abcc51d,0x3b098b90,0x3a780c34,0x3aa95c88,0x3a5ef2dc,0x39c64432,0xbaf9f32c,0xbb4f8686,0xbb3a7d39,0xbb3d730a,0xbb51c7ac,0xba1e593f,0x3970d638,0x39ca06dd,0x3a96163c,0x3adc8e60,0x3b3902a4,0x3b992c43,0x3bbe054e,0x3be7bcc3,0x3c15d982,0x3c118d7c,0x3c16faaa, -0x3c159b02,0x3c193512,0x3bd14727,0x3ab89a21,0xbb2f9439,0x3bfc5e7e,0x3b60957c,0x39df3b94,0x3b1831c7,0x3b2b79c8,0x3b7bbaa2,0x3b966f96,0x3b633b88,0x3b7ea588,0x3b3fffbe,0x3b02d25f,0xb6ce1981,0xbaa29953,0xbb1675b5,0xbb058d2c,0xbb05064e,0xbae08a78,0xbb278a19,0xbb12927c,0xbb0b5ff5, -0x382feedd,0x3aa3bbea,0x3ac550a2,0x3ae5d7b9,0x3ac42794,0x3a37488a,0x39dde0d9,0x39cd86d4,0x39d6084f,0x3ab718b9,0x3b48d46a,0x3bb5fd37,0x3bc2b55c,0x3bdd95e9,0x3c069970,0x3bf871bd,0xba764eeb,0xbb4652f1,0xbb9f0f4a,0xbb9516ba,0xbbcecc57,0xbbafa5e1,0xbb94c4fb,0xbb6f3814,0xbb8236fc, -0xbb42acf4,0xbb5cbe95,0xbb09d283,0xbb3f683d,0xbb27666a,0xbb2dbcba,0xbb1c7680,0xbb2f0746,0xbb211733,0xbb31a182,0xbad2f8aa,0xb9235d01,0xb87baf6d,0x3a5b1ecc,0x3a0fcaea,0x3a115c7c,0x3a25b498,0x3a50a62e,0x3a5d5832,0x3a52d43b,0x3aad2f0c,0x3ac706ea,0x3b068f34,0x3ae84c6f,0x3ac05055, -0x3a9cd43b,0xba158cdd,0xb780b1ca,0xba215442,0xbb56784a,0xbaab9b19,0xbb230e34,0xbb31aa96,0xbb212090,0xbb4a8cbb,0xbb183371,0xbb18576d,0xbb47bc2d,0xbb14fc1a,0xbaf3ba6a,0xbafe3335,0xbb0df79d,0xbacf085a,0xba61805f,0xb9ee0eb9,0xbab7037b,0x38820668,0xb869a5dd,0x3914b0dd,0x39d15a21, -0x3a281e01,0x3a7bbc88,0x3a9bf860,0x3adfefad,0x3b0f96c2,0x3b29544d,0x3b386105,0x3b44abc6,0x3b5062b6,0x3b19ea75,0x3ad23ca6,0x3a886fd2,0x3a040cf0,0xba60adc4,0xba24c235,0xbb2fc133,0xbb8b70e7,0xbba29c61,0xbb150fa1,0xbb91d3d0,0xbbb769b0,0xbbb6743f,0xbbb6b590,0xbbaaa8d1,0xbbb2f13d, -0xbbb4a267,0xbbb10667,0xbb808a87,0xbae3c68a,0xbb9adb1e,0xbb631d87,0xbae61e82,0x38a5468b,0xb98b7f97,0xb8aa0bb9,0xb8956e17,0x37e46a48,0x38d8e64c,0x392dfc4a,0x39883a87,0x39a78b2c,0x39dc0596,0x3a0dd0dd,0x3a2ec14e,0x3a7a3f57,0x3a08124a,0x3971c673,0xb90bc11a,0xb9eab88a,0xba298cb5, -0xba5af334,0xba1115a7,0xbb09e630,0x3b39b7d4,0x3b9cba5b,0x3b7afde8,0x3ac26c16,0x3b82fac5,0x3b8a73fc,0x3b8029cd,0x3b781344,0x3b45bffa,0x3b7e1c4c,0x3b80af9a,0x3b61db39,0x3b90ad45,0x3b0fe277,0x3b59fe5a,0x3b862a39,0x3b268292,0xbb0c4751,0xba852beb,0xba936b9d,0xba94e2ed,0xba59bb3a, -0xba1d527f,0xb88747cd,0xba038e03,0xba22f813,0xba745027,0xba178df7,0xba2c5a0b,0xba976a7d,0xba713e49,0xba55b541,0xba0c7482,0xba261da0,0x38286796,0xb8eeef53,0x3ba5bda3,0x3a0bbd60,0x3b3ba441,0x3ac8a288,0x39ac0eb7,0x3aba15d5,0xba462f62,0xb998086e,0x3a891548,0x3a37335a,0x3a1b115e, -0x3a3b300a,0x3b05d118,0x3abaa1d5,0x3a8d79c9,0xb9992b17,0x3b162fe4,0xbacfca3c,0xbb240630,0xbaddad0c,0xbadf6e42,0xba3626b7,0x3871c87b,0x3ab96174,0x39c3ced9,0xb94856ba,0xba8af690,0xb9a9702e,0xb9ae5bd0,0xbaa12563,0xba0af160,0xb8f0f78b,0x3a21aba0,0x3a421e7d,0xba16d271,0xba43357a, -0x3b418da2,0x3ae72108,0x3b5f093c,0x3aa1f7ac,0x39b0a083,0x3aae661f,0xb8a78fc7,0xbafbf690,0x39a62f8a,0xba3e84a2,0x3b0f1cce,0x399aaaaa,0x3b34f81b,0x3b02c9c9,0x39e71413,0xb8364997,0x39cdf476,0xbacf372b,0xbb6c2b53,0xbb1498e6,0xbb1a3e66,0xba0a0917,0x3a42e64e,0x3b720555,0x3a988111, -0x3a2a93f6,0xba888e8b,0x3a5e30d6,0x3a166575,0xbb0e06de,0xb9be9675,0xb8e15f59,0x3a35d43c,0x3a76d5fc,0x3b015744,0x3ac81bf5,0x3b91c740,0x3b304b8f,0x3b4edf01,0x3a6bab13,0x3a31544a,0x3b5c7e2c,0x3af0f06f,0x3b159c96,0x3a9c2579,0x3af2df47,0x3b0eb4ec,0x3aacb8f8,0x3b0c17bc,0x3aa76e70, -0xb95d22b2,0xbb34d296,0xbaf13a9b,0xbb919b5c,0xbbd18363,0xbb86c025,0xbb5b73fc,0x39695bf4,0x3b6a26e5,0x3c04683b,0x3b924017,0x3ab5080d,0xbaf38230,0x3a7dbeeb,0x3aa6848b,0xbb032e00,0x3ac8724d,0x3b422066,0x3b842c6f,0x3b9d8884,0xbc173eeb,0xbb5acc28,0xba222a21,0xb9438930,0x3b886262, -0x3b63d019,0x39898967,0xbb7b3a93,0xbb71328c,0xba92766c,0xb88dd906,0x3b8c3cbb,0x3b7addb4,0xb967bd5e,0x39153861,0xb76deb2c,0x3b7661aa,0x3b1f2e67,0x3ba44b4e,0x3ba80048,0x3b36195d,0x3b0dd7ca,0xbad289db,0xbb35ad3a,0xbbcc014d,0xbc10ab1b,0xbc02d0a0,0xbb460fde,0x3b9519da,0x3ab697c0, -0x3a3c2aca,0x3b30b080,0xbb8610bb,0xbbdd60ea,0xbbfb27af,0xbbfa6575,0x3b254635,0x3b8181f9,0x3bb42e82,0xbace5256,0xbc0d60e7,0xbbeb78d0,0xbb63cf79,0x3a72b493,0x3b30e515,0x3ab57ac7,0xbb1a62c7,0xbb53d6e9,0xbad62948,0x3a4d24a8,0xb9dde494,0xba422d37,0xb9f90826,0xb9eca2e7,0x3a15824d, -0xbaf52e29,0xbafa93ba,0xba9dfaa6,0xbb1068a2,0xbb324a86,0xb9a51fd6,0x3ba611c1,0x3beec0c4,0x3b80b128,0xbb68f296,0xbb3ba313,0x3a2c99c1,0x3bac5bc3,0x3c33729f,0x3c1fa838,0x3ad8f550,0x3b4ee4fb,0xbc841464,0xbcaf75df,0xbbac98ef,0xba9512aa,0xbb157b16,0x3b28df81,0x3b070019,0xbb82f599, -0xbb28d388,0xbab64188,0x3a54ea1e,0x3a13f277,0xb9e44c01,0xbaa0b805,0xba6ffcb2,0xb9ae6c91,0x3afad631,0x392a74a1,0x3a6b2482,0xba6feeef,0xb9b8e68c,0x3aff7f17,0x3acb94eb,0x3a35cd96,0xba9d93d0,0xbb3452c1,0xbb72c893,0xbb212ee3,0xbad27de3,0x3bd65994,0x3b6380be,0xbc2c32a7,0xbbfb155c, -0xbbc65422,0xbb95f27c,0xbc19acd4,0x3c26e4c0,0x3c3cfd07,0x3be59e2b,0x3b7b3253,0x3b75ae71,0x3a1e56ad,0xb94d14aa,0x39e6d65e,0x399236db,0xb8dbfa23,0xba7f78de,0xb9e7af8c,0xb8b87c5f,0xb8c59998,0x38b1cbc7,0xb9f19ad8,0xbb038d68,0xbb4be20b,0xbafcafbd,0xbb4efdc3,0xbb802177,0xbb4159df, -0xbb1b985c,0x39f9d390,0x3b2237cd,0x3ba306ed,0x3ba4b3bf,0x3b937b67,0x3b42dc6d,0xb958a6d8,0xba75dbce,0xbaf5b353,0x3aef37ab,0x3b4284e3,0x3b8ec30e,0x3bfcb8a7,0xbbe3583f,0xbb50c4bd,0xb9c6dbcf,0x393f1000,0x3a9d4d17,0x3aee0709,0x3ad80198,0x3b140dff,0x3b26200c,0x3ae5bbd0,0x3a8e305c, -0x3a3c4dff,0x39f08a5e,0x3a1c2571,0xbae8cc69,0xbb47d844,0xbb64f403,0xbb3c0c0e,0xba6a2c2b,0xbae95dd4,0xba7b4491,0x39f22073,0x39537681,0x3ae8129c,0x3b496c14,0x3ba696af,0x3bc3a618,0x3beab9c4,0x3c0ddf04,0x3be6509d,0x3bd02658,0x3b924256,0x3bb196ed,0x3b4b5162,0xbb463652,0xbba196bd, -0x3bb691d3,0x3bbf8dd5,0x3bd19297,0x3bb9453b,0x3bb93ded,0x3bb65824,0x3b948399,0x3b861782,0x3b69f26a,0x3b3a01ad,0x3ac77004,0x39cf4d1f,0xba95f9dd,0xbb2376bb,0xbb1b1d54,0xbaed610b,0xba93bf45,0xbaf4c045,0xbb155460,0xbb0bb4e1,0xbae94df2,0xba9b1c8d,0xba4484fc,0x39d3db05,0x3a13b1a2, -0xb94134d1,0xba4560df,0xba8f5840,0xba8e58b0,0xba1096a2,0xb8e342e5,0x38c5f28c,0x3a506bce,0x3b286b85,0x3ba3508b,0x3bcab7e5,0xbb6c2165,0xbb644454,0xbb176bfb,0xbb62d6be,0xbb7502a5,0xbb6d98e4,0xbb49f0d2,0xbb3b7276,0xbb1ae9bc,0xbb364b37,0xbaee7dd3,0xbb3cc78e,0xbb10226d,0xbb413565, -0xbb16d225,0xbb2d0147,0xbb1dd72c,0xbb0b37c1,0xbaa6cb83,0xbb0f6a9d,0xbb20f6ca,0xbab10f58,0xba602012,0xba701798,0xba71ce1a,0xba2add66,0xba52f783,0xba582528,0xba6a3747,0xba555247,0xba4e7e7d,0xba202dcd,0xb97dde14,0xb97b7031,0xba44fd48,0xbb053e23,0xbacec892,0xbaf15200,0xb9a9f36f, -0xbb1fabd0,0xbae6eb0d,0xbb0c6929,0xbb4f9ca9,0xbb5fc831,0xbb73327c,0xbb4b02e8,0xbb041f80,0xbb1d4fc8,0xbb24e481,0xbb00840e,0xbaaf02c5,0xbacc5621,0xbabb1e55,0xbad75230,0xb9813667,0xbb01aa5a,0xbad68758,0xbaafd6b7,0xba910117,0xba310433,0xb98fbd1e,0x3908ac4c,0xb90aa923,0xb9596379, -0xb95616bb,0xb93f877d,0xb92d80c2,0xb95795c0,0xba57bf49,0xba9c53e9,0xbaab953d,0xbaa652de,0xbb2fc1f4,0xbb57d672,0xba6ce845,0x38666cd9,0xb9c794eb,0xbaf84ac7,0xb9da4683,0xba0220c9,0xb8fab44f,0xb802a90c,0xb98c73e4,0x395ddae9,0x39f43abd,0x39fc615e,0x39fe084a,0xba8dc8b1,0x3a29eadb, -0x3a17ff7b,0xba0ef41d,0xbb362a42,0xbb0bf97c,0xbb0d226c,0xbb071a8c,0xbb01f9fd,0xbafd4190,0xbaead83a,0xbaf04c8a,0xbaefd8cc,0xbaf35280,0xbaf5b9cb,0xbaf5270a,0xbae23dc4,0xbaf701fe,0xbb05defc,0xbb18ba9f,0xbb289d97,0xbb39b720,0xb996613f,0xb8bfc70d,0x39ce6d83,0xbb570166,0xbb6bb9eb, -0xb9d74b35,0xbb2be613,0xbb716a14,0xbacdd26a,0xbb0bc204,0xbb091c21,0xbac29bfb,0xbab87a74,0xba9d1f00,0xba7f0e67,0xbb58bf0e,0xbb26fcc5,0xba2a8e8c,0xbb660ebb,0xbb64335d,0x37848d1a,0xba12a597,0xba08b3b6,0xb9f74f3b,0xb94909b5,0xb81b8f6a,0x3994428a,0xb89260e2,0xb91524c3,0xb9c10504, -0xb904be97,0xb9985d52,0xba4e77df,0xba6c7cd6,0xba5197d4,0xb943880e,0xb933a88a,0x3aa46ace,0xb9f384f8,0xbb1bb1f0,0xb9ec11de,0xba5aec9f,0xbac308cc,0xbaa364f4,0xb9e41514,0xba9d02a0,0xbb101255,0xbb48d54f,0xbadc08d4,0xba347143,0xbac20567,0xba08d8a1,0xb9bf25e7,0xbaf434eb,0xbad5fc45, -0xbb5e77be,0xbb16e95d,0xbab888e1,0xbae303e8,0xba8f0c45,0x37164d68,0x3a6e5744,0x3aeabfd2,0x3a5a6aba,0x39099c67,0xba532b15,0xb993eeb0,0xba346132,0xbaea269f,0xbb0b5427,0xbac7ba50,0x39fc14a6,0x3a1ef879,0x3ada42f5,0xba61bd14,0xbb25acad,0xba7adce0,0x3a42a0ce,0xba7b097b,0xbad567bd, -0x386293bc,0xbb341d79,0xbaf7d49c,0xbb51e792,0x392ccc8e,0xb89f9fae,0xb9d50b5a,0x38f091c9,0x3a2a959e,0xb9f62e3e,0xbad50296,0xbb691828,0xbb40e305,0xbaf07b4a,0xbb138696,0xbaf0226d,0xb92068d1,0x3a80c943,0x3b2c09c0,0x3a4a1743,0x39c55d57,0xba6d9219,0x39c6352e,0xba1e2fce,0xbb53bcfe, -0xbb7b6a4f,0xbb38b1a3,0x3a5551a3,0x39fcbf9a,0x3ba5a8b3,0x3a352ab3,0xba0ef4f4,0x3a862eb8,0x3b3fedb5,0xb989c4cd,0x398f1520,0x3b590cb5,0x3acf82e0,0x3ab25c38,0x3a93bf98,0x3aec3d7e,0x3b21d33e,0x3b0befa5,0x3b305147,0x3b2c97bf,0xba96e24b,0xbae0864e,0xbba782ae,0xbbafa07c,0xbb9aa426, -0xbbaad01a,0xbb724bf0,0x3792a3d9,0x3b64fd31,0x3bda3db9,0x3b64e9ac,0x3a206f95,0xbb0c1f34,0xba2670c3,0xbae431ac,0xbbae1d58,0xbbaef537,0xbb22f56a,0x3b760145,0x3b721dec,0xbbc66780,0xbbe06274,0xbc15516b,0xbbae9169,0x3a746623,0x3a9888a5,0xb9a081a2,0xbb875765,0xbb71618b,0xba99b485, -0x369ad60e,0x3b713260,0x3b56033c,0xb8f10bf2,0xba11fa85,0xb8c9135d,0x3b27338d,0x3b44f31a,0x3af7c04e,0x3b47df22,0x3bbdd2ea,0x3b9b0d8c,0x3b8fc0a3,0xba54b650,0xbb72658b,0xbb6b9bf3,0xbadeb463,0x3b67afc4,0x3c1b0c9d,0x3bace537,0x3b17606e,0x3a327d84,0xbbb150ae,0xbbe20fbb,0xbbc501ad, -0xbbed398e,0x3c097037,0x3ba96454,0x3b0f6396,0xbad72134,0xbc14fd3f,0xbc08c775,0xbb7ca2bc,0x3938454e,0x3b1f336a,0x3a927879,0xbafda3af,0xbb462180,0xbaf0e63a,0x3a87d8ae,0xb9da92bb,0xba9a4a8d,0xbb0d4793,0xb9d66ffe,0xba5ef9bb,0xbb23f3a9,0xbae8c081,0xbb7cf20b,0xbb8413a1,0xbb5a3890, -0xb992ee34,0x3b98cc2f,0x3baf3c49,0x3b01dd8c,0xbb827598,0xbb3dcfa2,0xb98b2251,0x3b1512a1,0x3bda6cbe,0x3bba2068,0xb869cb12,0x3b4fcfaf,0xbc7dd42e,0xbcc8a47b,0xbc057f45,0xba97a8b2,0xbb909e40,0x3b38d50a,0x3ab366a2,0xbb655e19,0xbb386faa,0xbaa4f16d,0x3a2bd1d2,0x3a7c5a0b,0xb774e832, -0xbab5bf75,0xbabe414d,0xb9e08ecd,0x3a2f62b8,0x37f5312a,0xbadf728c,0xbac74019,0x3b089127,0x3b0bde37,0x3b086246,0x3a9c4f54,0xba64ad85,0xbb41351a,0xbb2ef54d,0xb658b12c,0x3a9f568f,0x3c38edd0,0x3bb497ad,0xbc848560,0xbc695c10,0xbc52b206,0xbc2df0c2,0xbc1d5c8f,0x3be7be01,0x3c4995a5, -0x3bff9fe4,0x3b8dfd70,0x3b469f76,0x3a43f5cf,0x398990c7,0x3a45c96f,0x39bafffa,0x392cb02d,0xba81c5d5,0xba0ab5df,0xb92710a5,0xb910538b,0x3899585f,0xba652839,0xbb0ba350,0xbb32f964,0xbb764090,0xbb47a627,0xbb20a09f,0xbb37d2d1,0xbb117b9c,0xba2f0e1e,0x3a6bda10,0x3b3e9a70,0x3ad2523d, -0xb9785ddc,0xbb609a70,0xbbaf3b15,0xbb90c163,0xbacbf2bc,0xbb86cca2,0xbbba9aa8,0xbbac3f8a,0xba2e10a6,0xbc609b18,0xbc32720a,0xbbd7ce58,0xbb39ed8d,0xba44ec14,0xb963989d,0x3a0e9612,0x3aa1d8b5,0x3a8f2a3c,0x3aa91214,0x39960448,0x39b96c92,0x394a46bd,0x39bdf177,0xbaf274e9,0xbb46fc24, -0xbb583129,0xbb813d62,0xbb8cbff4,0xbb3ca46a,0xbaa8f896,0xb9a17f63,0x39fd6728,0x3a91340e,0x3ae3bd2e,0x3b22c72c,0x3b30eb3d,0x3b41efc5,0x3b49f802,0x3b73882a,0x3b44a69c,0x3a856a56,0xba2ecb69,0xbb84d047,0xbc0b6bf9,0xbc5419a2,0x3b96752a,0x3b0dedcf,0x3b545688,0x3b553498,0x3b7491a2, -0x3b7fe8fe,0x3b8af168,0x3b6c54bc,0x3b7d3da0,0x3b5ab046,0x3b236305,0x3a4dc22d,0xba4637d1,0xbb10847c,0xbb1ed0b0,0xbb2640a0,0xbb0c1274,0xbb0acf4d,0xbaea2eec,0xbae91e6f,0xba5f53ee,0xba30f173,0xba1c0a1c,0xba610437,0xba982222,0xbadbec2f,0xbaaf56a2,0xb9d6552d,0x3a0f4b9e,0x3a8a292a, -0x3aca61a4,0x3ace2aee,0x3b43853b,0x3b76a1e2,0x3ba05a31,0x3b955eed,0xbb210464,0xbb813523,0xbba8374f,0xbba1bb14,0xbbb748ca,0xbb96c686,0xbb639959,0xbb26ddb6,0xbb3b7b5e,0xbb1f2f3a,0xbb47c841,0xbb19cde8,0xbb3b8f21,0xbb42ac1b,0xbb415de9,0xbb4077af,0xbb50b7ca,0xbb4eb650,0xbb696a98, -0xbb3c37ba,0xbad27e96,0xbaabda7b,0xb9e4e03c,0xba07131b,0xb9c17a69,0xb92132fb,0xba34bfdc,0xbab28263,0xbb048fb8,0xbaf95baa,0xbadc5338,0xbaa09af9,0xba53ff1a,0xba1c940d,0xb9d1356d,0xbafbde54,0xbb04533c,0xbb32af0e,0xbb400392,0xbb3acf80,0xbb693514,0xbb6daa1c,0xbb8085dc,0xbb8f2c77, -0xbb830fcc,0xbb87a8b8,0xbb922a0e,0xbb86431a,0xbb68c459,0xbb6c39cc,0xbb5981cc,0xbb30fece,0xbb2f0e71,0xbafb991e,0xbb09b7b6,0xba972565,0xba578fe2,0xba503a20,0xba0aa40b,0xb987a44b,0x388b0503,0x39e52fca,0x3a15716f,0x3a3cf289,0x3a30d885,0x3a0ad798,0x39539b34,0xb95d9d01,0xba519c71, -0xbab4c5e4,0xbade2d74,0xbafed299,0xbb212365,0xbb22b326,0xbb892bc8,0xbb926191,0xbb439fd4,0xbb88f4b3,0xbb9bde63,0xbb80ab8d,0xbb760007,0xbb6eb96c,0xbb5310b5,0xbb56cd0d,0xbb50a93c,0xbb41008e,0xbb8ed861,0xbb6de204,0xbb2d9404,0xbb7f625f,0xbb5b4fde,0xbab8eead,0xbad3e309,0xbabef34a, -0xbab0e1cf,0xbaa28225,0xba963c48,0xba8536e6,0xba96568e,0xbaa2f81c,0xbaaabce7,0xbab59c7b,0xbabaef75,0xbaba624a,0xbad0ec94,0xbae542df,0xbb021473,0xbb13837f,0xbb1daede,0x3b08381f,0x3af4234a,0x3adc2199,0x3b68ee75,0x3b233e70,0xba9ce634,0x3b66823b,0x3b1bd44f,0xb9f2afe5,0xba8c8d99, -0xba9fef13,0xbae00bea,0xba9be7f0,0xba966c80,0xbad2a629,0x3b34011e,0x3b7cb0d7,0xbaf240d5,0x3b108e7d,0x3b55c663,0x3ac92a99,0x3ad2df5c,0x3afb9d9c,0x3b02e1f5,0x3b17cfdd,0x3b24b516,0x3b3d0714,0x3b219183,0x3b1abcb9,0x3b07b360,0x3b2864de,0x3b26b20e,0x3b0541e3,0x3b149afd,0x3b11476f, -0x3b031474,0x3b0a8b0f,0x3b2a2e14,0x3b478feb,0x3adf0bb1,0x3b28593e,0x3b55036d,0x3aac2710,0x3aad2b72,0x3b082f31,0x3a5bf35f,0x3a912b8f,0x3ab15313,0x3b131b7b,0x3b074519,0x3b0651b4,0x3b0fe68c,0x3b0df02d,0x3b2dff54,0x3a9c1987,0xb9542c8f,0x3ab5a76c,0x3a856056,0x3b0a1c50,0x3b2d4c8e, -0x3b75147d,0x3b8e85bc,0x3ba6759e,0x3b7f0333,0x3b571dd6,0x3b2774fd,0x3b732b8a,0x3b7dc6d8,0x3b3969dd,0x3b66c960,0x3b608bf4,0x3b41b0ca,0x3b56b62b,0x3b15a7ec,0x3af6ec1e,0x3b3869af,0x3b18fd86,0x3b648a85,0x3a7ed011,0xb8537af9,0x3abd2d88,0xba9631ce,0xbb08c2e7,0xba72b2c2,0x393b49bb, -0x3acfc277,0x3a8d37ed,0x3b2cece1,0x3b4169ef,0x3afec771,0x3a70325c,0x3a1bc790,0x39b6cb42,0x3a4e4db9,0x3b09a8c5,0x3b44b3b4,0x3ba24f6f,0x3bc4e206,0x3c00190c,0x3bae2150,0x3ba137ea,0x3b6be2cc,0x3bc6efd8,0x3bc8b8d5,0x3b5215f7,0x3b9f9c14,0x3b89feeb,0x3b40e204,0x3b63e000,0x3b8c4a95, -0x3b4a98f4,0x3b5e9528,0x3b568fa1,0x3b948021,0x3a14698b,0xb9a2f0fa,0x3b18e9be,0x39dff768,0x39be33cd,0xba6417c2,0x3aaabee1,0x3b23b501,0x3ac27f57,0x3b473821,0x3b49bc73,0x3ab3b3fa,0xba6dbccc,0xbb1bbfa7,0xbb354e0c,0xbaa9c8fe,0x3ad27cff,0x3b8bf3c9,0x3c06d625,0x3c35d351,0x3c582c7c, -0x3c1206bf,0x3bbf67ef,0x3b5d94f5,0x3bed96af,0x3c01f093,0x3b92109b,0x3bf45eff,0x3be8f386,0x3baf557b,0x3bc614f1,0xbb463618,0xba23bc0f,0xbb066c7c,0xbac8779d,0x3b0a73b8,0x3b2d57ad,0x3aa137b3,0xbb1c2c5c,0xbb243c1c,0xb9e50ce1,0x39175d62,0x3b474a06,0x3b2acbae,0x3a4efd31,0xb9d1e4b1, -0xb964a7f8,0x3b66290c,0x3b98eb43,0x3bd2d001,0x3c099080,0x3c0cafe9,0x3bc12a14,0x3b163636,0xbad8c8b8,0xbba568b6,0xbbccc645,0xbb1eb390,0x3b7e8957,0x3c2b7a0d,0x3c02ee97,0x3bedfe7e,0x3c0d5d3a,0x3b1fd273,0xb793d564,0xbab51e33,0xbb173285,0x3b98ec83,0x3bd6fb51,0x3c0a5a80,0x3b186b78, -0xbbbd0c76,0xbbe5b4bc,0xbb9592bb,0xb9470fc8,0x3afd8c8e,0x3a978a3c,0xbac8c879,0xbb39d0ec,0xbaf822f4,0x3a1e7f6b,0xb9e29ff4,0xb9b3163f,0xba08d39e,0x3a1a3441,0x3a4b95d4,0x39a7511d,0x3b01a9b9,0x3b374501,0x3b8ffd5a,0x3b1ca46b,0x3b6d9d47,0x3c05396e,0x3bbce974,0x3aac0cec,0xbb99a802, -0xbaffb2bc,0x3b1e088b,0x3bbd4ed0,0x3c480fc5,0x3c1dbb4c,0xbad8f3f2,0x3b0e6c0a,0xbc480171,0xbcc9ef36,0xbc1d1b23,0xbb47adcf,0xbb7e7db8,0x3b3dff3c,0x3b1d078f,0xbb139d15,0xbb0d1b88,0xbaaefeba,0x3a335f89,0x3aa50bf7,0x396720fb,0xbacb7c54,0xba64f81c,0x390e726e,0x3ae8f038,0x3aa8234e, -0x3acc8aa8,0x3a233e96,0x3aaa5a6d,0x3aff6972,0x3ad4d4ec,0x3b4ed764,0x3b72d2f6,0x3b86574d,0x3b7c2da3,0x3b8cca94,0x3b32eb2a,0x3c42621e,0x3c2a142a,0xbafc99f4,0x3b4f79ec,0x3b923ac7,0x3b8c5fef,0xbb1f47f2,0x3c761384,0x3c703038,0x3c25568d,0x3bd1a037,0x3b38d2cb,0x3adbf6ef,0x3a38d3e8, -0x3a70732b,0x39eead6a,0x39abf12a,0xba1a1e42,0xb9e5f5f2,0xb91e7d6f,0x3a089d89,0x39fc18f1,0xb7744c36,0xba6deca7,0xbb00542b,0xbb0b4440,0xbb1019e6,0xba79ff4b,0x3a60f335,0x3b19aec7,0x3b870807,0x3ba4d2d2,0x3bbd9c52,0x3bb4df6d,0x3b85177f,0x3a6d0166,0xba12ba97,0x38279c1b,0x3a1ee54c, -0x3bdacff6,0x3c21a384,0x3c6659ed,0x3c526831,0x3a5f3cf0,0xba4ceaf9,0xbb832933,0xba3ca8d5,0x3a84ecb5,0x3a139bb9,0x3a4b7742,0x3b20c227,0x3b0a6cd8,0x3adb3357,0x3a68fddd,0x3995c260,0x3912f25f,0x3a4da4a0,0xbac2d3cf,0xbb2ed59b,0xbb619347,0xbb359ef9,0xbb04a4df,0xbb029d9f,0xbaac1e14, -0xb9be4296,0x39b1fdb5,0x3b0213f5,0x3b8c7bc5,0x3bfe3095,0x3c0b9f58,0x3c22a297,0x3c42034d,0x3c27c397,0x3c1dde40,0x3c1069fa,0x3c228a28,0x3c05f100,0x3b807960,0x3b007e7f,0x3c0bd86f,0x3c046246,0x3bb4cdc3,0x3bcb4bf5,0x3bb38ef0,0x3bb8b977,0x3b9ab5c9,0x3b892d2f,0x3b879f9d,0x3b6c37c5, -0x3b29c92b,0x3accd8d6,0x376d2415,0xbae2750d,0xbaf5466a,0xbab82f4d,0xba2329ba,0xbaa2c98b,0xbacae4c7,0xbae7f081,0xba5586b5,0x38571c71,0x39f56158,0x3ae0ce3f,0x3ae4c104,0x3a83ac50,0x3a341b87,0x395574c3,0xb9a9c364,0x3a3a9c9c,0x3b2d478c,0x3bb250db,0x3ba5d3c1,0x3bbf7a22,0x3beea6fc, -0x3c045dd9,0xba8de9e2,0xbafd644c,0xbace5552,0xbaeb31d2,0xbb2b1d87,0xbb095b3f,0xbac22a8d,0xba7c5c7e,0xbab20307,0xbad31245,0xbad470b9,0xbb06c1a4,0xbb24055f,0xbb36a6b5,0xbb2ab4d9,0xbb2b61e4,0xbb302f3a,0xbb159292,0xbac966b0,0xbab29863,0xbab89ebe,0xba8d328e,0xba730ea9,0xba55464e, -0xba1ef281,0xb999a4b1,0x38f5ad0f,0x3a1f082d,0x3a84bf65,0x3ab4357a,0x3abe5df8,0x3b030067,0x3b00ac1f,0x3b0143c5,0x3ac95c2f,0x3922a53c,0xbab92abc,0xbad91f48,0xbb3406b8,0xbb1e29fb,0xbb255837,0xbb40a86a,0xbb4d7875,0xbb60e5f4,0xbb4a88ef,0xbb1e375a,0xbb007bf7,0xbad1dee7,0xbad3f0a2, -0xba9fccdc,0xbab95c8e,0xbad154ef,0xba81329e,0xbab74f64,0xbaaf875e,0xbaf93789,0xbb0407ec,0xbad16c2c,0xbab62509,0xba893f95,0xba449e73,0xb9f713dc,0xb9c21a2f,0xb8fcb7d7,0x39878d90,0x3a32fc6c,0x3a9a2cd7,0x3ad47f4b,0x3a436bf5,0x36b69033,0xba0b1ebb,0xba5d6337,0xbad00934,0xbaf0de91, -0xba424b6f,0xbaa8a787,0xbb5de546,0xba6854ab,0xbab93d49,0xbb555262,0xbb491ade,0xbb4a41c6,0xbb5297e0,0xbb4acc53,0xbb4622c2,0xbb46d0d3,0xba161c4f,0xb987e7b7,0xbb31d992,0xba287424,0xb9b19e75,0xbae0c225,0xbab1e3ca,0xbaa54faf,0xba9d36ba,0xba91481e,0xba8834e7,0xba776c2c,0xba524c01, -0xba33924f,0xba1f4cd0,0xba0acd83,0xb9f6e475,0xb93d8ae0,0xba045963,0xba31237c,0xba801177,0xbaa2de75,0xba9bea99,0xbb0dfad0,0xbad5e3bc,0xbb2bae2e,0xbb17d470,0x365c987c,0x3b92cf11,0xbb47a26d,0xba40ee91,0x3b505711,0x3b342aa5,0x3b321e83,0x3b36a68d,0x3b61b9a2,0x3b72e9f0,0x3b783b35, -0xb93b8654,0xbb1c9235,0x3b9459e3,0xb8ff40d7,0xbb184707,0xbb34aee3,0xbb0c92f0,0xbb1c569a,0xbb16b8b9,0xbb07402a,0xbafc13ca,0xbad66fd1,0xbafeda74,0xbb061a6c,0xbb1a84c3,0xbb09b131,0xbb1493ba,0xbb38de2d,0xbb3293ba,0xbb224778,0xbacd0f32,0xbaf42788,0xba4b0875,0xbb2cb853,0x3aa5bbed, -0xbb02d6c5,0x391afd76,0xba78c5b7,0xbb07f6bc,0xba4e8305,0xbb3a24f6,0xbb606c47,0xbb3ccac5,0xbb23780b,0xbac61c9d,0xbaeae287,0x39360356,0xb6afad60,0xba99a79d,0xbae7a3a0,0x38a14579,0xbb78e442,0xbb63da3c,0xbb65fcc9,0xbb4b1749,0xbb0c4ec3,0xbabddcaa,0xba49a2a4,0xbada44aa,0xbb185d26, -0xbb580680,0xbb2e2638,0xbb3f0a24,0xbb81bec0,0xbb72d77e,0xbb382819,0xb9b83fd4,0xba55e844,0xba3f5fc4,0xbb321853,0xbafff808,0xbac4d50a,0x3aff85d1,0xba8e36c8,0xbaedc68a,0xb9a86dc1,0xbb3a9920,0xbb5b8315,0xbb58fa50,0xbadaf9af,0x39a9456e,0xba8bde4e,0x3a81cc5e,0x3a2889eb,0x39f694c1, -0xba927997,0xbb13382a,0xbb6656a5,0xbb8e5d6c,0xbb86117b,0xbb837699,0xbb1ff16e,0xbac6a992,0xb8a829c9,0xbaed0e43,0xbb143a6f,0xbb7bc5f6,0xbb29a255,0xbb63c2e0,0xbbcab2fc,0xbbb142b7,0xbb758e45,0x3a05fee2,0xba12b980,0x3b135c1a,0xba4bd25b,0xba04216c,0xb9c8dd16,0x3b5e9911,0xbaa8e275, -0xbabd9457,0x3afb997d,0xba114a7b,0xba50e3b4,0xbac75d98,0x3aa4392c,0x3b03e6dd,0x3ab16ef4,0x3b24fef8,0x3b1da4aa,0x3aaedc11,0xbaf85d84,0xbb6c9f91,0xbbc1b605,0xbbe962d0,0xbbda60a1,0xbbbccf68,0xbb1a2cd0,0x39e099e6,0x3b2c32a8,0xba039f3d,0xbb4d1d6d,0xbbbe78bc,0xbb838e42,0xbb92ad92, -0xbbf9b470,0xbbb6d684,0xbb08e671,0x3b93f5ff,0x3b5d73b9,0xbc32af43,0xbbe5b80e,0xbbe6b761,0xbba0f755,0x3a9eb293,0x3af2eb0b,0x39fbc523,0xbb1e4fe7,0xbb21c1fc,0xba49412c,0xb825b3a7,0x3b0533ce,0x3ae65f18,0x3a881000,0xba9ba9b5,0xbabdd174,0x3b0ce76f,0x3b17ca43,0x3b883f2b,0x3b8764d3, -0x3b0871c2,0x3acbcf8a,0xb981c4a9,0xbb7934e3,0xbbca1614,0xbba8d417,0xbb4e55ff,0x3ab43eca,0x3ba1ef8b,0x3a8e5fc5,0xbb34225d,0xbbb09c62,0xbc1890cc,0xbc1f1111,0xbc04c09b,0xbc2334e9,0x3b6caddc,0x3b7b7e91,0x3ba99a1b,0x3a80a1e3,0xbc05e320,0xbc0db8c4,0xbbb41fae,0xba8d88a4,0x3a9c4543, -0x3a143624,0xbab58874,0xbb286d18,0xbb07e646,0x39760158,0xbab322cf,0xbac85b31,0xbb05c2c7,0x39c8fddc,0x3ab745e3,0xbaa7a7c1,0xbb746c07,0xbbba7691,0xbbe3e927,0xbba2489d,0xba43e8d5,0x3bbaf941,0x3b779325,0xba0ad7c7,0xbbd70ba1,0xbb7dbd1d,0x3935db76,0x3b6690c8,0x3bedbe25,0x3b9d96bf, -0xbb5957da,0xb9c905a9,0xbc411209,0xbcd96046,0xbc3e8025,0xbb9b593b,0xbb8717d9,0x3b063a94,0x3ad72138,0xbae95f8c,0xbb19fc09,0xbacca720,0x39c57418,0x3a83ea4a,0x38f26004,0xbae225cb,0xbabe9e86,0xba8dc5fa,0x3a4ac9e8,0xb9bcfec6,0xba95d843,0xbacd82fe,0x39107306,0x3a7f890d,0x39fb2279, -0xbb315b9e,0xbbd54228,0xbc0fd52e,0xbc1577c0,0xbbc22fdd,0xbb2a4d9d,0x3b780a2a,0xbb4dfcb1,0xbcafd7b9,0xbc999f54,0xbc801896,0xbc52fc01,0xbbbd0e5d,0x3b99ec2f,0x3c71c890,0x3c31319e,0x3bb0a178,0x3b2a0121,0x3a44a2b8,0x3a7c0242,0x3a0d3a6f,0x3969f942,0x39adcd3c,0xba1ad342,0xba47cb71, -0xb9c4b7b8,0x39587223,0x3822da82,0xb9d807f1,0xbab3c132,0xbb162f6c,0xbb1cf6fb,0xbb3e557f,0xbb755dd7,0xbb86e6c6,0xbb652f70,0xbb094533,0xb90a1af3,0x3af46caa,0x3a28088d,0xbac7c285,0xbba8b532,0xbbb53550,0xbb9e01be,0xbb91888b,0xbc0d4e75,0xbc406ea3,0xbc531593,0xbb98603c,0xbc85ea8c, -0xbc141732,0xbb3f43f0,0xbb0cccc7,0xba584fbf,0xb9da5600,0xb93ff1a0,0x3a917444,0x3a822267,0x39bda3c4,0xb94ff012,0xb9c2fffa,0xb9b56f72,0x38c000d0,0xbad357f4,0xbb2c649f,0xbb761f92,0xbb8a6313,0xbb7ff15b,0xbb8b43dc,0xbb2d1ac4,0xba7c7630,0xb987840f,0x3a322524,0x3aa0ec3e,0x3ae64080, -0x3acb4c98,0x3abe988f,0x3a1d849c,0x3a8ba3ea,0xba1c1041,0xbb7f8a91,0xbbc25de1,0xbc0d93dc,0xbc4b9831,0xbc7836a6,0x3af3d251,0x3b12f4ba,0x3bbc6bc2,0x3b852ca8,0x3b93ea9f,0x3b798334,0x3b5aade4,0x3b4f9685,0x3b4d7f81,0x3b4cb83e,0x3b21c62c,0x3acd505e,0xb7f2b540,0xbae2b3ea,0xbb1b66eb, -0xbb22f900,0xbb07e677,0xbac48d2b,0xbaac6dbe,0xba997bc1,0xbad0115d,0xbb0b9185,0xbb1179c5,0xbb09eda5,0xbb0d3d09,0xbb20df82,0xbade1373,0xba03ab41,0x3a56316d,0x3a67647d,0x3a2cc01d,0xba43b50a,0x3a37531f,0x3aa7353a,0x3af993f0,0x3b0a2889,0xbb58442e,0xbb6fee00,0xbb63d74e,0xbb6bc0a0, -0xbb51c109,0xbb2764ee,0xbac3745e,0xba5cc888,0xba881ee1,0xbabebf5f,0xbafa30e2,0xbb161546,0xbb16bf64,0xbb3df21d,0xbb319eda,0xbb469bc5,0xbb4f0c9e,0xbb4c7a31,0xbb4df549,0xbb588f22,0xbb3cb8d4,0xbb13c0b6,0xbae148b4,0xbabd3b24,0xba8f6d85,0xba24e097,0xbab371fe,0xbb0ce054,0xbb39845d, -0xbb54928e,0xbb587da0,0xbb544652,0xbb2645db,0xbb082f7b,0xbae3e119,0xbb266ed7,0xbb6edd73,0xbb87e18b,0xbb0d3c64,0xbb81a57b,0xbb7c84ff,0xbb7e2e18,0xbb9a0a0a,0xbba037b9,0xbba3053d,0xbba0c7d3,0xbb90f643,0xbb94b8a6,0xbb87e129,0xbb819c33,0xbb5678a6,0xbb41c98e,0xbb5e328f,0xbb37f6ce, -0xbb027d85,0xbb168140,0xbae210f1,0xbae7af33,0xbacef0b4,0xbaaf3af2,0xba91af8e,0xba43133c,0xba92959e,0xbab462e1,0xbae7f7c2,0xbb0a97b3,0xbb2b67b1,0xbb54e399,0xbb6466b7,0xbb7746bb,0xbb7c8a1d,0xbb7ad166,0xbb67104d,0xbb7e96fb,0xbb7e16be,0xbb3b2216,0xba30e552,0xbb9006de,0xbb4f13e6, -0xbab7e2fa,0xba8d9e79,0xba6c51c4,0xba344021,0xb9e84679,0xb951f5a0,0x384acf92,0xbb333059,0xbb7b04aa,0xb886e446,0xbb2392d4,0xbb5bc369,0xbb3e0ddd,0xbb32cc11,0xbb2e2e82,0xbb23bded,0xbb1dc61e,0xbb185c4c,0xbb0dac16,0xbb1dd866,0xbb28d290,0xbb342b3f,0xbb4259bc,0xbb4df91d,0xbb5ba3de, -0xbb57fb98,0xbb58fa27,0xbb5dc619,0xbb674f72,0xbb69bd9c,0x3b5028ac,0x3b365d79,0x3b767bd1,0x3ac39049,0xbaa93def,0xbb878ed2,0x3b290e03,0xba7163aa,0xbb80530d,0xbb9a9f69,0xbb9de60f,0xbb98b85d,0xbb96a2c2,0xbb9377c9,0xbb98112a,0xba1f1da9,0x3b27d92c,0xbb9980d0,0xba933d0d,0x3aa73632, -0x3b6342f8,0x3b2b63e8,0x3b4bf9d3,0x3b57e498,0x3b68b1ad,0x3b714c85,0x3b7c8e41,0x3b675b4e,0x3b62a0f5,0x3b53f514,0x3b711a72,0x3b6e5cca,0x3b4fa696,0x3b56e4ae,0x3b50fd73,0x3b414738,0x3b4e0767,0x3b751f55,0x3b79cb16,0xbb0d5125,0x3b307472,0x3b02c0ef,0x38a32a1e,0x3a767c4d,0x3ac2973d, -0x3a84e301,0x3a347781,0xb8840dd4,0x3adb54fb,0x3af8532c,0x3ad5ae3d,0x3aa5dacd,0x3ae528bc,0x3b0da26a,0x3aa608bb,0xbb3b03a8,0x3b0dbb93,0x3b2e3b3e,0x3b622d76,0x3b93997c,0x3bb3f6e7,0x3bc3e0f0,0x3bc7aaaf,0x3ba39f4a,0x3b8f4ac9,0x3b78c37e,0x3ba0eac1,0x3ba3d570,0x3b81bb31,0x3b8be0ec, -0x3b856697,0x3b702ba7,0x3b8170c7,0x3b82bdcd,0x3b2d6bcc,0x3a131329,0x3aa6e04c,0x3b21ffb2,0xb8a39de1,0xba81a7aa,0x3a6ea858,0xbb2e206e,0xbb1a5386,0xbb2c10f1,0x39e1da27,0x3959f1d5,0x3a793ef2,0x3ac286b3,0x3b29e710,0x3b0f924f,0x3a3b0aa9,0xba2bd645,0x3a20bca6,0x3b4318bd,0x3b71abed, -0x3baea552,0x3be492ec,0x3bfdf2cd,0x3c07db8f,0x3bd08fb2,0x3bc7b263,0x3bac405b,0x3bf07fdf,0x3bec589e,0x3b96b8f8,0x3baeb060,0x3b9b02b0,0x3b7c1b5b,0x3b8810b2,0x3bbea416,0x3b4b06db,0x3a407516,0x3b17d42e,0x3b9e1c57,0xb9ccb12f,0xbab4192f,0x3ab24632,0xba810266,0xbac9de1e,0xbb106c80, -0x3a1a6447,0x3b15c9cf,0x3aed875c,0x3b5f9c04,0x3b89437f,0x3b0dd5f2,0x39c92afd,0xbb5ab323,0xbb08e398,0x3abd758f,0x3b707c5e,0x3bf6ee1f,0x3c361398,0x3c5a3ac1,0x3c58ee1f,0x3c167196,0x3bd47768,0x3ba657e9,0x3c093e38,0x3c0eccce,0x3bb9c0b6,0x3be79a12,0x3bd72c0c,0x3bbc3379,0x3bbe6e03, -0x3a162338,0xba5a12c3,0xbbb432c8,0xbb7f6409,0xb95fdab6,0x3ac737f1,0x3ae9b0a0,0xba605636,0xbab491f8,0xb8c9d0e0,0xb76da4dc,0x3ac32f73,0x3aaef80b,0x3ac757d1,0xbaa14a20,0xba79ad2a,0x3b05d5cf,0x3ba741d5,0x3bb41379,0x3c063f33,0x3c2d367d,0x3be7fd38,0x3b9c5a6c,0xba8109a5,0xbb5882cc, -0xbb29fb52,0x3b7d491a,0x3c28da82,0x3c6318f1,0x3c3d9996,0x3c19b1f2,0x3c05162c,0x3b688e57,0x3b0a6332,0x3adcb327,0x3919384c,0x3bc04d52,0x3bf6215a,0x3c12de4d,0x3b9fc403,0xbb7d2913,0xbbeafeb6,0xbbb3e78d,0xbab0eb53,0x3a74dc51,0x3a28d4c3,0xba76d501,0xbb09a428,0xbafc315a,0x39807459, -0xb9e59bea,0xb81649fa,0xba56861c,0x3aa284ab,0x3a3cc325,0x3accef4e,0x3b5339d7,0x3b4f18d3,0x3bcc3d56,0x3b8f8394,0x3baec4a1,0x3c094638,0x3b51e52e,0xbad4e3d3,0xbbcc5d2f,0xbae9a015,0x3b372da9,0x3ba23621,0x3c253766,0x3be30922,0xbb9440dd,0x39dac054,0xbbf1d580,0xbccb3ae1,0xbc76a9cb, -0xbbeed405,0xbb8ba95b,0x3ae112c0,0x3aa6e33e,0xb9c2772d,0xbad1d969,0xba9232a3,0x39e673d8,0x3ab6e117,0x3a18d15f,0xbae1994c,0xba7ff60d,0x38c097d4,0x3a6ee9a3,0x3ae9e3b2,0x3aac00e7,0x3ad3ff01,0x3b35f23d,0x3adbedc8,0x3aafff74,0x3b58eac2,0x3b96520f,0x3bb9492d,0x3bc641e8,0x3be6d6be, -0x3bcf2ef0,0x3c4d16e5,0x3c2efeeb,0x3a753f2c,0x3ba4609e,0x3bbe796d,0x3ba180f7,0x3b21b150,0x3c54b2e7,0x3c6b70bc,0x3c452163,0x3c072554,0x3b1659a0,0x3b272586,0x3afe5a45,0x3aa968f7,0x39d040f4,0x39b99382,0xb9c59d7a,0xba0d3389,0xb967672a,0x3a390ada,0x3a1791dc,0x395ded21,0xb79ec846, -0xba61828c,0xbb1e3df3,0xbab4c17f,0x3a58dada,0x3b1e5889,0x3b8fd1db,0x3b9be4b3,0x3ba43d42,0x3b96a6b7,0x3b7cc409,0x3ad3c277,0xbb0c02be,0xbb1e42a2,0xba6d6875,0x3ab8bb5d,0x3badd153,0x3c03cfbd,0x3c49d545,0x3c1f71fc,0x3b1c31ae,0xbb04086c,0xbbe74b4e,0xbb173723,0xb9043f5f,0xba56a86e, -0xb95219be,0x3afba91b,0x3a85cc21,0x3a653c27,0x38cb5143,0xb92d1a75,0xb958046b,0x39bbffaa,0xbaa09861,0xbb11ad9c,0xbb5e751e,0xbb4d60de,0xbb745d4f,0xbb293f89,0xbb01a1c7,0xbab5e3ae,0x399c8cea,0x3ac3ec61,0x3b78d183,0x3be6b161,0x3bf9d087,0x3c0f894f,0x3c24b088,0x3c1a170a,0x3c0dbf64, -0x3c0416bd,0x3c07242a,0x3bdf6b04,0x3b94febd,0x3b2c64d0,0x3bfdc8b2,0x3bd4b35b,0x3b55f083,0x3b9396b2,0x3b7aaed2,0x3b876879,0x3b796d03,0x3b53d7ca,0x3b6fc2c8,0x3b670c22,0x3b4b9b57,0x3b16a76f,0x3a7d6bf3,0xba627300,0xbabbb5eb,0xbabe2fa4,0xba7c3a2e,0xba8c2669,0xba760f41,0xba963a97, -0xb7ec373f,0x3a2965de,0x3a478612,0x3adbbcac,0x3adb3c8d,0x3a9d8411,0x3ad31686,0x3ad3903b,0x3ab05e24,0x3b232039,0x3ba08b48,0x3c09e830,0x3bf78303,0x3bea93dc,0x3bec9c75,0x3be2e182,0x3a535fbb,0xba4b81bf,0xbac1f853,0xba32e564,0xbad0620f,0xba3b1d6d,0x385edd43,0x3a623ad5,0xb9854eeb, -0xb9936b83,0xbab89dc7,0xba9156d1,0xbb21e8c5,0xbb1dba80,0xbb2eefbf,0xbb234ff7,0xbb3d755c,0xbb267f73,0xbb17e6e8,0xbaa3e984,0xba4a2d42,0xba893b1b,0xba833f00,0xba31511c,0xb95f7d56,0x3965cea0,0x3a46f570,0x3aaa3826,0x3aed0f40,0x3b04e02c,0x3b012a01,0x3b21b68e,0x3b0e395b,0x3b116c26, -0x3b0dfc77,0x3a9de658,0xbaec3cf9,0xbb082bb2,0xbb98d1bb,0xbb2b6751,0xbb6519df,0xbb74c0c3,0xbb5945f4,0xbb6f905e,0xbb3b0954,0xbb21ae3f,0xbb32749b,0xbaf1b419,0xbad094a1,0xbac31e2c,0xbb076ec6,0xbafd66f7,0xbaa54f3c,0xbab65381,0xbb19ba0d,0xbacae2fe,0xbaf0c525,0xbac8c9e4,0xbab463cc, -0xba9d9d3c,0xba8ce38c,0xba7800d2,0xba34b270,0xb9c24a5f,0x378aaed8,0x39efe3c8,0x3a80c4d2,0x3abdd000,0x3a420d45,0xb82b83db,0xba43e780,0xbaa9af4b,0xba8b92e0,0xba72ba31,0xbaeb17b8,0xbb53e6ee,0xbba6e806,0xba9fd964,0xbb49d23a,0xbba69e0f,0xbba6013d,0xbba78bae,0xbba2d59d,0xbba9c703, -0xbbab877d,0xbba98e9a,0xbb28cf08,0xba67e2e8,0xbb9e4c90,0xbb2aa985,0xbaa8f238,0xba624ad3,0xba722000,0xba40f784,0xba3360b5,0xba1b9539,0xba059921,0xb9e795f6,0xb998cd2c,0xb945f3d7,0xb8f173ba,0xb84cd7f7,0xb7e44a81,0x3939dfeb,0xb922bcdc,0xb995e4ac,0xb9f99e0d,0xba2f60e7,0xb9e315be, -0xbae3d313,0xbaa5ee3b,0xbb3ec1b7,0x3a19a354,0x3b5b5644,0x3bb79cf7,0xba5447ee,0x3b1fa1da,0x3ba30d1d,0x3b95ab9d,0x3b917403,0x3b82fa9a,0x3ba08b37,0x3ba736a7,0x3ba17ba1,0x3b44b21c,0x38b8639c,0x3bb7b3cd,0x3b480011,0x3a239e11,0xbb3d9800,0xbaddd1d9,0xbaf898e2,0xbae366aa,0xbacb7819, -0xbabadf6a,0xba9c45f0,0xbac00438,0xbacec8e2,0xbaf7d58b,0xbad356ae,0xbae1ec4b,0xbb11d508,0xbafe3c76,0xbadf24ed,0xba86ba4e,0xbab7b9cf,0xba636028,0xbafa40cc,0x3b784868,0xbaad3830,0x3afddff4,0x39807acf,0xbab4336e,0xb7b84d60,0xbb2a4fe7,0xbb27bc5c,0xba8c64e6,0xbaaf9dc0,0xba53f8f1, -0xba0e0873,0x3ab3b769,0x3a8ce7de,0x3a57bbd8,0xba15b5a8,0x3b2238b5,0xbb2c5d31,0xbb402061,0xbb1735a8,0xbaf864b0,0xba9529f3,0xba4232ef,0xb9d4e847,0xbaa65b8b,0xbaf0352e,0xbb291238,0xbaef08b6,0xbaed0ee7,0xbb2d18f4,0xbaf042e5,0xba94bd51,0x39e6ca26,0xb94fe0e0,0xba91c757,0xbb0bce54, -0x3947e89c,0xba09b7f8,0x3b50b371,0xba02185d,0xbaaaa89c,0x3792e14a,0xbb1ce055,0xbb8244fa,0xbb1aa3e8,0xbb21d61b,0x3a374e1e,0xba5752c1,0x3b0533be,0x3ab14116,0x3ad9d5b8,0x38d1e8c8,0xb8d64f64,0xbb1277f3,0xbb7b78b6,0xbb301769,0xbb1325a7,0xba689fb7,0xb95d0a4e,0x3a5b7988,0xba534445, -0xbaa44f4e,0xbb2e0e62,0xbaba754d,0xbaf90960,0xbb8c0f26,0xbb1636ce,0xba8847e0,0x3abc82fa,0x39d17e39,0x3a6c1e0e,0xb9dfc86d,0x3a300abb,0xb9a16601,0x3b80eb67,0xbad497ae,0xbb2f050a,0x3a178972,0xbb1c560b,0xbb2c4a21,0xbb60aead,0x39ac9ae0,0x3ab7783f,0x3a5fb9e7,0x3b204e93,0x3b23a1a3, -0x3b5fe2ac,0xbaa193a5,0xbacff860,0xbb93676c,0xbbc09d88,0xbb729061,0xbb100271,0x3a2c2591,0x3b223ba0,0x3b4f3850,0xb8bed1e2,0xbb21c953,0xbb8ef0f2,0xbb0d8a47,0xbae184c7,0xbb81d8fc,0xb9b41574,0x3b01e14c,0x3bb1aa0f,0x3b83eb9e,0xbc2770cb,0xbb8b93c6,0xbb5cf617,0xbb515e8a,0x3aaa6bfc, -0x3b2d3a9c,0x3aed90ad,0xb70fa89f,0xba847b22,0xb9d6ae62,0xb9b55ddc,0x39e52b89,0x3a08aafb,0x3b01f231,0xbadf0f1f,0xbb259399,0x3ab30ae3,0x3b01938e,0x3bbf2c48,0x3bb94cf5,0x3a6960b4,0xb7e5f1ad,0xbb612723,0xbbab42df,0xbbddde8d,0xbbc11e7f,0xbad00645,0x3b3257bb,0x3b6fe82a,0x3a6d5588, -0xbb3b0c59,0xbbb77e21,0xbbfcc499,0xbbfc47e0,0xbbd68441,0xbc020dd9,0xba1e14e2,0x3b5b93ee,0x3c125c93,0x3b8eaae2,0xbbaffdc6,0xbc02d65d,0xbbdad54b,0xbb1159ba,0xb703f2f8,0x391ff471,0xba6f6741,0xbaf2b0e9,0xbb03cf79,0xba0f278e,0xbac708fb,0xba63105e,0xba7a514e,0x3aa45921,0x3b3e98ad, -0x3a53309f,0xbb3623ea,0xbb5e7a48,0xbb820158,0xbb1c0226,0x3a959292,0x3bcf0190,0x3b0fcb42,0xbb2f1758,0xbc097ed3,0xbb777810,0x3acb8691,0x3ba90400,0x3c065f28,0x3b97a52a,0xbbc139ae,0xbb3cac26,0xbbdceb44,0xbccc79cd,0xbc81bd62,0xbc1ef045,0xbb1f1928,0x39cd9576,0x3a59e979,0x3877c6d0, -0xbabebb72,0xbab3a6dd,0x3969bc62,0x3a6e95e8,0x3956948f,0xbaf7df88,0xba981b38,0xbaa1a912,0x3a4d5ca9,0x3918bbde,0x3a3df6ad,0xb89743cf,0xba1c0586,0x398bc9fc,0xba2e0ceb,0xbb77f5f8,0xbbe3b462,0xbc043f35,0xbc0faf82,0xbbc0cdc6,0xbac2f079,0xba19f36b,0xbbcc7cd3,0xbc7fea82,0xbc3dff30, -0xbc083372,0xbbf74e7d,0x3835b5d3,0x3b8e9482,0x3c60b60d,0x3c504346,0x3bf140e7,0x3b36f546,0x3ad76d42,0x3b085d3f,0x3a4e329c,0x3898db49,0x393acb86,0xb99c49c0,0xba4c655d,0xb9dc8cf8,0x39efe259,0x392adaf8,0x3997ad93,0xb8ce23a5,0xbaa45290,0xba6a12ac,0xbb033ee8,0xbb4e2739,0xbb310525, -0xbacc0ecd,0xba3126a9,0x3a6dc836,0x3b05cb2d,0x3ab55e7b,0xba22d437,0xbb6da32a,0xbb570f7f,0xbb3a4988,0xbb88ff0a,0xbbcb7e55,0xbc00263c,0xbbffed3c,0xbaf8bc97,0xbc1d596a,0xbb73db69,0xba196855,0xbab68e6c,0xba181104,0xb99e42ba,0xb9eb32ba,0x3ab204c7,0x3a79523e,0xb9a4f362,0xba0b18c7, -0xba424c5a,0xba247311,0xb9508ed6,0xba9b8333,0xbb071848,0xbb803d7d,0xbb7b19a3,0xbb443cb8,0xbb8c29c5,0xbb5c5b4d,0xbad2b37f,0xba404ea6,0x3a2b69ab,0x3ae71757,0x3b3b4353,0x3b450f9a,0x3b5ba456,0x3b34e79b,0x3b17eaaa,0x39a901a4,0xbb3627cf,0xbb7cdb09,0xbbac2735,0xbc02bc40,0xbc09e1a9, -0x3a994c43,0x3b5af19e,0x3bcdfb52,0x3b8ea19d,0x3b902254,0x3b61c0ec,0x3b1c05a9,0x3b212873,0x3b123b2a,0x3b28b904,0x3b1088a0,0x3b0e4a2b,0x3a5b7694,0xba6bfdba,0xbaed0e8d,0xbafc3442,0xbad48754,0xba88ccb3,0xba88a572,0xba4a0977,0xbad90386,0xbb0db5b1,0xbb1530b3,0xbaaf103d,0xba7cb182, -0xba850a8f,0xb937f980,0x3a0aba71,0x3ab5577d,0x3ad1da6f,0x3ae0e584,0x3a6e032b,0x3a9b9e80,0x3aa5135d,0x3abe3d78,0x3add34ca,0xbb09ed78,0xbae8f28e,0xba222f49,0xba527686,0x37953e30,0x39a27434,0x3a89e5ca,0x3abbe59a,0x3a90674d,0x389218c0,0xb999957c,0xbacb9be3,0xbacf46b9,0xbb2218e4, -0xbb114386,0xbb2de37b,0xbb32a652,0xbb2776a4,0xbb080809,0xbb31a316,0xbb4ad8c1,0xbb1f143e,0xbb1b2fe1,0xbaef15d4,0xbaae066f,0xba353e57,0xba83062c,0xba9a3ca1,0xbaa3fa9e,0xbaf5ecf9,0xbb124392,0xbb209956,0xbb0258e5,0xbad2431b,0xbab5d1d1,0xbab872ad,0xbb7f3e55,0xbb838de3,0xbaf4dfe2, -0xbb7ff2e6,0xbb5df2c3,0xbb62d417,0xbb8cd880,0xbb8e21a7,0xbb95eb9b,0xbb8a07bd,0xbb55d0ce,0xbb6755f7,0xbb607ffc,0xbb483ade,0xbb1f62fd,0xbb251e97,0xbb3d9ede,0xbb386c62,0xbad6f116,0xbb3cc7b9,0xbb1eea9a,0xbb1ac601,0xbb130ed1,0xbb055388,0xbafb392f,0xbad971ba,0xbb1414cc,0xbb31170f, -0xbb4bdce6,0xbb5b6d22,0xbb6a8cad,0xbb812b81,0xbb818053,0xbb846dee,0xbb85a2c7,0xbb834247,0xbb5a77df,0xbb78d993,0xbb173c8e,0xba853223,0x375ff3f3,0xbb410327,0xba98601f,0xb90dee97,0x39379493,0x39a0a509,0x397633e3,0x3a1bff7a,0x3a5e9c08,0x3a80ceae,0xba472d04,0xbb26efb5,0x3a43fd22, -0xba503688,0xbb0daf55,0xbb5e476e,0xbb3ebb30,0xbb3dfaef,0xbb34415f,0xbb2ff0b2,0xbb2bb00c,0xbb219157,0xbb2e31cd,0xbb35b1f2,0xbb40c5cb,0xbb4dd360,0xbb5b0665,0xbb69a975,0xbb62d44a,0xbb5f9bed,0xbb5d8f9c,0xbb5f2151,0xbb5d30f1,0x3afdf8ab,0x3ae8a335,0x3b36cc48,0xbaa162fc,0xbb547a27, -0xbb37a086,0xb8f3e490,0xbb41fc9c,0xbb63ae1d,0xbb8b0bc9,0xbb8c7b2c,0xbb716351,0xbb786790,0xbb6cdbfd,0xbb60dcbe,0xbb2ce4b0,0xb916b6bc,0xbb46ce19,0xbb3c19f8,0xbaab9935,0x3b201b4d,0x3acac35c,0x3af8e969,0x3b0da680,0x3b183019,0x3b1c752f,0x3b1d5507,0x3b0fe0cc,0x3b0ca4f9,0x3b02f4e0, -0x3b128a3f,0x3b0c5304,0x3ae606ce,0x3ae87ab9,0x3aeabdca,0x3b00f51a,0x3b02dabd,0x3b34eb45,0x3af93c25,0xbb5e4258,0x3a846178,0x39c66a27,0xba933e9c,0xb9f1284f,0x3912685e,0xb9be5584,0xba947ea0,0xbafbd843,0xb9b701c8,0x39cfeb36,0x38247da2,0x3956c1b5,0x3a5648d8,0x3a21d263,0x39b94aac, -0xbb553538,0x3a1ebfd5,0x3ad3f547,0x3afd63a0,0x3b4fd1aa,0x3b815d5b,0x3b8d5bcb,0x3b83546e,0x3b4fca4b,0x3b290c90,0x3b0b3a34,0x3b3840da,0x3b326273,0x3af674a8,0x3afb5e72,0x3b075ac0,0x3b31de6e,0x3b2a7ab7,0x3b5e3d17,0x3a9de15f,0xbaec29e6,0xba01e4eb,0x3ab476fe,0xba9e2411,0xbaf98db8, -0xb72ec0ff,0xbb7878ff,0xbb440381,0xbb75febf,0xb9e939d4,0xba83322d,0xb8a3bf3d,0x39bf1089,0x3abdd4f6,0x3ad0c559,0x3794e335,0xbaf2b10c,0xba21eeb8,0x3af0acce,0x3b04ce1b,0x3b79becf,0x3ba34f81,0x3bb349be,0x3ba7aa40,0x3b824bf2,0x3b74d0d8,0x3b55cd6a,0x3b8a252c,0x3b70e4c3,0x3ae7d0a7, -0x3af174e7,0x3b0f8c65,0x3b60433c,0x3b405ac0,0x3bab3f18,0x3ac60350,0xbada8da5,0x39ce097a,0x3b861f69,0xbad7d60f,0xbb25313b,0x39d70deb,0xbb214308,0xbb539865,0xbb3fbc92,0xb97391c6,0x3ac23ebf,0x3ae58e2d,0x3b4aca87,0x3b8786e5,0x3b290c4b,0x3a5ca308,0xbb5d1f8c,0xbb2188fc,0x3a262dbd, -0x3af49ebd,0x3bba0e96,0x3c0a56c7,0x3c22c6c6,0x3c0bf2f5,0x3bb0ef26,0x3b520f65,0x3b2c00d5,0x3b8a8f48,0x3b83b1f8,0x3b02a007,0x3b209686,0x3b58d297,0x3bb9f9ec,0x3b96cd7c,0xb956860e,0xbb330be9,0xbbfa118d,0xbbb09450,0xbabd8d29,0x3a869b15,0x3b104bcf,0x3a576521,0xb9fc048d,0xb9a32351, -0xba0bb6ce,0xb8aa2303,0x397ea174,0x3b03c3d4,0xbb0967ec,0xbb12850e,0x38504bc0,0x3b51fb4a,0x3b51aa8f,0x3bac1247,0x3bea3ffc,0x3b93834d,0x3b5bf95b,0xbaede233,0xbb30778a,0xba5bc1fb,0x3be5beb8,0x3c4a7d53,0x3c447b48,0x3c1ebd31,0x3bb8346e,0x3ab5f09c,0xba3739a3,0xba3dc2b7,0x392bfe00, -0xba81aeba,0x3b95f1ba,0x3bbf4674,0x3c018b9b,0x3bbb34d2,0xbb46bba0,0xbbf8c25d,0xbbd58ce0,0xbb31d714,0xb951dd4f,0x390f7043,0xba20e58e,0xbab22593,0xbaefcdb7,0xb9c31e72,0xba16bd00,0x38b89032,0xba82a11c,0x3accdb97,0x3a8e9c5c,0x3af07f8d,0x3accc7f1,0x39e71034,0x3b46e36a,0x3b5048bb, -0x3b9a4305,0x3bcb08ff,0x39f0051d,0xbb887879,0xbc016a8d,0xbb1a6bd2,0x3b14fecf,0x3b6c3277,0x3bc4ac7c,0x3b305cd5,0xbbde04a4,0xbaf00b78,0xbb8a5e5b,0xbcbe0382,0xbc9cb155,0xbc3b8d99,0xbb2ae61d,0xb9892450,0xba35da84,0x3a5d87b3,0xba8cc4cb,0xba64660a,0x394923cc,0x3a8496f1,0x3a038131, -0xbae90def,0xba9be5a6,0xba1d9a2f,0xb94dc12b,0x3aabd563,0x3a127ddc,0x3acd2ba4,0x3b363623,0x3a6cecee,0x395f980b,0x39d6837d,0x39f8a139,0x3a8514e8,0x3ad44b3c,0x3b8c965b,0x3be8c8f1,0x3bf6f001,0x3b571a43,0xbb8f4e1e,0xba68858b,0x39ec2eaf,0xba2eb14c,0x3b60a93a,0x3bb96bd4,0x3c31bb18, -0x3c4baf8f,0x3c1577cd,0x3b39fcf2,0x3b3be0af,0x3b3f085c,0x3ad690d0,0x393e5618,0x390a127f,0xb98c4ece,0xba267d2c,0xb996070d,0x39d9df91,0x39d56bf2,0x39bdaba4,0x3a1a94e2,0xb8bde7aa,0xbb057182,0xba6a44ca,0x3a29e618,0x3ab32c18,0x3b5473c6,0x3b2dea04,0x3b38721c,0x3b136a2d,0x3a9a2818, -0xbab62bb8,0xbb9e0fdf,0xbb86b137,0xbb19bb81,0x3953e12e,0xba952763,0xba2bbbef,0x3b201c0d,0x3aa1b582,0xbae51ae7,0xbb926748,0xbbe85f68,0xbb652732,0xbacd15f6,0xbacc63ab,0xba54c627,0x3a912df6,0xb800bda6,0xb99a9734,0xba71edb5,0xba2b921d,0xba110219,0xb9ab70d2,0xba7f5aeb,0xbaeb74d5, -0xbb5dd2a5,0xbb741269,0xbba10125,0xbb6273d0,0xbb3a9277,0xbb137b3b,0xb96cbc13,0x3a36fa24,0x3b1608da,0x3b7ddf98,0x3b8e9a21,0x3ba37d4d,0x3ba5d8b6,0x3bacf0c0,0x3b82bbc5,0x3b3cc2ab,0x3acc85ac,0x395cd53f,0xba28dd80,0xbb09bbd1,0x3b65bab0,0x3b228d26,0x3aca171a,0x3b0df48b,0x3b03e283, -0x3b075bcd,0x3b10ec34,0x3aefba99,0x3b1be7f1,0x3b30ae5c,0x3b384504,0x3b201e53,0x3abed493,0xb92a7ea0,0xba975c29,0xbae1ee0b,0xbae32c82,0xbaa66f9f,0xba4c949b,0xba36563f,0xb7d572ca,0x391649bd,0xb86d852a,0x39eb0003,0x3a2a4457,0x3a487e5e,0x3af9ffb1,0x3b2b2bf9,0x3b484d3d,0x3b806848, -0x3bb75cd9,0x3bfa31d7,0x3be0c0b4,0x3bba03cb,0x3b98eb35,0x3b56dc22,0x3acac3e4,0x387ecb3d,0xba8c9654,0x38f372cc,0xb970c4e8,0x3a3db3a6,0x3acd4d8e,0x3b22bc4e,0x3a9933be,0x3a8c8cf2,0xba1f70ae,0xb982dd2d,0xbaf76feb,0xbb0069fc,0xbb1ca050,0xbb161ef1,0xbb3b30e9,0xbb2f5fd3,0xbb40185f, -0xbaeaa804,0xba87f359,0xbaba31d4,0xbaad89ee,0xba606f64,0xb9942ab7,0x3961a993,0x3a0ae93e,0x3a5d4777,0x3a9e3077,0x3a8a4d3a,0x3a5afdb5,0x3a84d3aa,0x3a50d46e,0x3a793fa3,0x3ab2defb,0x3a9a5e1c,0xbb27d50d,0xbb369f03,0xbb9a1f3c,0xbb38e136,0xbb7c7f98,0xbb7b54c7,0xbb5ef7a3,0xbb72ebb4, -0xbb45655b,0xbb47f34e,0xbb6b32dd,0xbb384fd5,0xbb1d5dd8,0xbb2787de,0xbb3c99e9,0xbb229b5b,0xbb10989f,0xbaf8272e,0xbb3aa169,0xbad0edc2,0xbada62e3,0xbacd08c0,0xbabbd3b9,0xbab42dca,0xbab0b104,0xbaa6994d,0xba9d02a6,0xba96c797,0xba92c4aa,0xba8671b8,0xba658c41,0xba55ef2a,0xba850002, -0xbabd43c0,0xbafd6c9a,0xbb1d1e52,0xbac355eb,0xba9f11d9,0xbb492cd4,0xbb88384c,0xbb8da4a4,0xbb1bc6b7,0xbb802527,0xbb958082,0xbb975905,0xbb97c056,0xbb8da166,0xbb977a67,0xbb995627,0xbb950188,0xbb803b3c,0xbb1cbceb,0xbb8debac,0xbb787599,0xbb2d9ba5,0xba89eb2b,0xbaab9262,0xba92f83d, -0xba895a32,0xba7d648f,0xba66a6cd,0xba51016f,0xba53a002,0xba56740e,0xba5de48f,0xba68df95,0xba7e8650,0xba85a8ae,0xba99bbe9,0xba9f3595,0xbaa06d19,0xbaa6d83f,0xba973c24,0x39d8f6a6,0x3a081839,0xba10428f,0x3b3dae5f,0x3b7c217b,0x3b2f273d,0x3b00426b,0x3b588a43,0x3b39a43e,0x3b18a4bf, -0x3b0d01f3,0x3ad8e6d6,0x3b17151e,0x3b1db49d,0x3b09285c,0x3b749dea,0x3b2c9ade,0x3b21923a,0x3b6d0ffa,0x3b3b9d02,0xba15ead2,0x3987090c,0x39b5dab1,0x3a1dd08a,0x3a426419,0x3a5abbc4,0x3a73b603,0x3a3cc2b1,0x3a25a750,0x39df57a7,0x3a2f50c5,0x3a23a195,0x39888311,0x3a1da4e9,0x3a3afa90, -0x3a6983c8,0x3a281b85,0x3a4454a9,0x3a3f5b89,0x3b55800e,0x3a2769fb,0x3b416b55,0x3a7c3fb7,0xb86317ea,0x3a6db17b,0xba9229ed,0xba452234,0x3a252552,0x39faeec2,0x3a118977,0x3a860511,0x3b06db10,0x3b03da1c,0x3b2aac03,0x3a8c559b,0x3b15f18c,0x38ca23dd,0xb9a0ea10,0x3a57804c,0x3ac8ba1f, -0x3b0be947,0x3b1444b8,0x3b070f4b,0x3aaa2a87,0x3a5c86a1,0x39fea599,0x3a9b4532,0x3ab6917e,0x3a57b962,0x3aee499c,0x3b06fa61,0x3b139969,0x3ae3a37e,0x3a18a433,0x3920c19d,0x3af5be99,0x3a5a53e4,0x3b5e8fdb,0x37cd8500,0xba53ee42,0x39ccb406,0xbb12bb10,0xbb7a756e,0xbaca8962,0xbb0b0e12, -0x39e7ed09,0xb978dae1,0x3b184c00,0x3b094489,0x3b1dd210,0x3aa33b79,0x3aab7258,0xb95a8ea2,0xba54527a,0x3a4ff467,0x3b0a5029,0x3b53c71a,0x3b6d9d8d,0x3b79a18f,0x3b24e8a2,0x3b0df8bf,0x3abc1319,0x3b1a9a94,0x3b158593,0x3a198353,0x3b3a5633,0x3b4ff416,0x3b510009,0x3b24a19e,0x3ace18d8, -0x3a8ae3ce,0x3ab94d8d,0x3a0a4983,0x3b83b40f,0xbad24dc7,0xbb593a8e,0xba09a327,0xbb7237a6,0xbb8469c9,0xbb84d7b7,0xba4dab1d,0x3a39dd30,0x3a341cef,0x3b2274c1,0x3b44396d,0x3b8d1dc0,0x399a716c,0xb90f6cb9,0xbb027e74,0xbadd62f0,0x3adb333c,0x3b97fd62,0x3be38e3d,0x3bffaaf4,0x3bd6806b, -0x3b661ad5,0x3abcbcf3,0x3a4ebf03,0x3b368e00,0x3b726fd7,0x3b230c0a,0x3bcbb493,0x3bdbe917,0x3bce96cb,0x3ba1d1c0,0xbb8b7cb8,0xba00d3bc,0xba436351,0xbace43b7,0x3a4b1bef,0x3b41ea58,0x3b537f6c,0x3b20c512,0x399baf32,0xb9a1b3bb,0xba4cfc1a,0xba454709,0xb9826881,0x3b274673,0xbb0a3d22, -0xbb4ff5f4,0x3850fd73,0x3ac58388,0x3baac23c,0x3bbefefe,0x3b00d8b9,0x397d1e57,0xbb6e861d,0xbb9e06ec,0xbbb481f3,0xbba94bdd,0x3b18844f,0x3bde15fd,0x3bb4c4db,0x3b899193,0x3a8d2a2a,0xbad6f505,0xbb20af3e,0xbb217cb8,0xbb1e934c,0xbb1c8e24,0xbafc3a28,0x3b693d37,0x3c338874,0x3be20957, -0xbaf9c998,0xbbe6ed23,0xbbf3330f,0xbb5952d0,0xba57967b,0x387a8279,0xba138641,0xba90e529,0xbae76fbd,0xba93f94e,0xba75ce45,0x39bab81d,0x3997ca9c,0x3b013dbc,0x3b4de382,0x3b3db8d9,0x39c25774,0x3a8c6f11,0x3b1a87b5,0x3b41f669,0x3b928e23,0x3bc43767,0x39b02a75,0xbb93cbab,0xbc12273b, -0xbb32a5ce,0x3b488624,0x3bb95e99,0x3bfe5724,0x3b6bdaf0,0xbbf705bf,0xbb7839b3,0xbb571821,0xbcb08c3c,0xbc9c1259,0xbc5a2196,0xb898aaa3,0xba9ee64a,0xba4f258c,0x3aa154dc,0xba29f039,0xba60dbc5,0x391bcaee,0x3a37597b,0x39814a04,0xbaecde3f,0xba6ed637,0xba8dd6c1,0x39b02c7f,0x3a751c7f, -0x3b170941,0x3ade5486,0x3802112a,0xb85a7ed2,0xbab33af8,0xbb2606cb,0xbb5a33ff,0xbb2b28a7,0xbb441041,0xba0c49f8,0x3b7f6b9b,0xb9c97159,0xbb85b54f,0xbb9921c5,0x3a234ccf,0x3b604a34,0x3b0176ab,0x3b90c92f,0x3b9b9f82,0x3c181be8,0x3c4e79ee,0x3c19c773,0x3b7876c9,0x3b35eba8,0x3b42cdd9, -0x3ad558c2,0x38b66de9,0xb7346558,0xb91408c9,0xba208687,0xb9b2d856,0x39cc8509,0x39b98202,0x3a726742,0x3a9cde40,0x38d55015,0x38ccf81e,0xba3fc334,0xba6c0b8f,0x3a082d25,0x3b160c81,0x3b1f1f9a,0x3b3d0638,0x3b2a202b,0x3b2315b3,0x3a4275d8,0xbac73d0a,0xba3e6417,0xb91fa3ae,0xbabe87f1, -0xb9a9673a,0x3a8a3f30,0x3b93b03b,0x3b6c2981,0x3a86aea8,0x3ab5d644,0xba7f6b57,0xbab558dc,0xba2ed0f3,0xb9a7b490,0xb9c0e8ff,0x3acb54a5,0x3a386115,0xba1fb6a6,0xba585abe,0xba5d61e2,0xba3234b6,0xb9c5d547,0xba387013,0xbac2f05c,0xbb6b7456,0xbb5225b8,0xbb2ad210,0xbb60a1d7,0xbb5aa364, -0xbb0ec67c,0xba7ef898,0x3a572392,0x3b3084cd,0x3b96e21e,0x3bb02a96,0x3bd11825,0x3bddbf6b,0x3baf756e,0x3b6a5902,0x3b042865,0x3b03170b,0x3ad509fa,0x3984287d,0x3ab8f93f,0x3adcbdc3,0x3b79a6f6,0x3b8a4961,0x3b6a67c6,0x3b53b6cc,0x3b2d27ad,0x3ad39808,0x3ad52d0b,0x3ac66fb5,0x3b0102d8, -0x3af9d392,0x3b1e4ad6,0x3acc5cc1,0x38404849,0xba7a3210,0xba9c3a92,0xba993f39,0xba7ef1f9,0xba897a0c,0xba44757d,0xba88da4b,0xba71892a,0xba7836fe,0x3a214fec,0x3ab1c5f3,0x3ad739f1,0x3b1ff572,0x3b2540d6,0x3b2b0013,0x3b51cd15,0x3b8b45af,0x3bad9265,0x3b863cf4,0x3b5b4e97,0x3b308659, -0x3b15b1d4,0x3a67b485,0x3a87731c,0x3b03dd86,0x3b0940b8,0x3b297d57,0x3b35a2c4,0x3b4e302b,0x3b6306b8,0x3b3627b5,0x3ae2d9aa,0x3a9e6e0a,0xb946171b,0xba642063,0xbadcffcc,0xbada4182,0xbb01f7bc,0xbb12171d,0xbafae3f2,0xbaa24151,0xbad1e872,0xbb119167,0xbafb68c1,0xbb100b90,0xbad21fe6, -0xba90a964,0xba0b159f,0xb7befae5,0x3a3b9816,0x3ac56421,0x3a91f44d,0x3a350ad9,0x3a045a2a,0x39edee59,0x3a23a3a8,0x3a448f8f,0x3a9b0552,0xbb3db5fc,0xbb308ca2,0xbb13b167,0xbb35ea5d,0xbb23d31e,0xbb2bbf24,0xbb3fcc86,0xbb4293b0,0xbb478a9a,0xbb2cec03,0xbb017dc5,0xbb050bb1,0xbb0ddc82, -0xbaf9e235,0xbae233a2,0xbb020294,0xbafc9b57,0xbb13a253,0xbada9810,0xbb318f0e,0xbb2984c4,0xbb1a8e11,0xbb147fcc,0xbb0a91dd,0xbb071d21,0xbaffb751,0xbb1cc8c7,0xbb336506,0xbb3db308,0xbb3b79f6,0xbb2d317e,0xbb24e798,0xbb21c55f,0xbb251ed4,0xbb2f6ab2,0xbb35c181,0xbb0f47db,0xbb1f431a, -0xba6c621b,0xb9eec22e,0xbaa3b419,0xba9242f9,0xb9a9c233,0xba60802a,0xba460e22,0xba47a877,0xba81dd46,0xba5649a4,0xba3b2b61,0xba4408a6,0xb943f8e5,0xba92b100,0xba517c0a,0xb9bb0940,0xba892000,0xbb324677,0xbb14f170,0xbb13d09e,0xbb0e2cfb,0xbb0afa70,0xbb07c4f5,0xbb00d4f0,0xbb02fd3a, -0xbb025e0b,0xbb06d0e1,0xbb0af26f,0xbb12637c,0xbb178aa0,0xbb17a01a,0xbb15a8f9,0xbb124112,0xbb0ed5f6,0xbb1182f1,0xb98ce97c,0xb80b0c4b,0x380c2639,0xbb1647f3,0xbb0402c1,0x3a9c2078,0xbb0c441f,0xbb12f612,0xb7da4a06,0xba1723db,0xba1f427f,0xb87c3f80,0x37741662,0x3971f73c,0x3a020c4e, -0xbaf576ec,0xbaf504e7,0x3aa85f8b,0xbae7a234,0xbb138d0b,0xb97f62e8,0xb9c2498f,0xb9a95729,0xb7eafeed,0x385d450e,0x389a4d5a,0xb750af14,0xb8d22a91,0xb9139140,0xb9706dd0,0xb96d30b6,0xb9bbcd09,0xba2958f5,0xba18e977,0xb9d5d2ca,0x396d36e7,0xb8142c9e,0x3a31f692,0xba4b4632,0xbabdaf66, -0xba7f3cf3,0xb9bf1a7e,0xbab7ccf8,0xbae16dca,0xba82b301,0xbb0b5b61,0xbb392e39,0xbb31ac73,0xbb0a5e0e,0xba980a6c,0xbab0251d,0xb90d2302,0x3980b258,0xb9dcf152,0xb9f2fc08,0xba95bdcd,0xbac384e5,0xba26a864,0xba0c6f7b,0x3a081f39,0x3a8abe8a,0x3aa54c1d,0x3a3c98f2,0x397ae847,0xb982ca68, -0xba149e58,0xb9dcf9c4,0xba207a62,0xba94163b,0xba7b04f3,0xb9bc5cc2,0x3aa590ef,0x3a1cdc26,0x3aab9282,0xba5be6e5,0xbb1ec9e5,0xbacfa048,0x3a70bf50,0xbad87a58,0xbb0fd50b,0xba675436,0xbb8357c4,0xbb780e38,0xbb736038,0xbb00e9bb,0xbaba6922,0xbaad5012,0x38a193f5,0x39f359f6,0x3a6851e0, -0xb9abd7b3,0xbaec5ba2,0xbafd9b72,0xba7959dd,0xba43dd2d,0x3a3bad00,0x3ac1aa7f,0x3adffd53,0x3a6c4123,0x3a0b7421,0x398e202c,0xb66af407,0xb99f511e,0xba8f4422,0xbb0feba3,0xbaf0ca71,0xba00b019,0x3b271d53,0x3a9d88ef,0x3b3c833a,0xb986148f,0xbb17b226,0xbaa8bd5e,0x3b341efb,0xbb2a2c57, -0xbb683169,0xba3ab154,0xbb813af3,0xbb973f99,0xbb54a597,0xba954556,0x398ecbb1,0x3a8a15c6,0x3b18f165,0x3b52e248,0x3b412685,0x3a5136ec,0xbafc6015,0xbb3440ee,0xbae2372f,0xba63e5a4,0x3b07527e,0x3b802a58,0x3b979123,0x3b2bbc79,0x3a47e0e3,0xba645a14,0xba7c49d8,0xba9a344b,0xbad44f98, -0xbb1d0f8e,0xbab7d2cd,0x3a736564,0x3bb7fc54,0x3b5a3c71,0xbb385e7b,0xbb78e334,0xbbc815d4,0xbb9245a3,0xba896c63,0x3ad5e4ee,0x3b3d47ae,0x3b32ac81,0x39b00496,0xba3f6b47,0xba8cc72e,0xbaa06fba,0xba067bba,0x3b1c9ae0,0xbb2e2612,0xbb6b1b2e,0xbae5e659,0xb83317fb,0x3a52d4db,0x3aa51c83, -0x3a2535ac,0xb999089f,0xbaab1601,0xbb80a3e8,0xbb6cea8e,0xbae4ab8a,0x3bc56c5c,0x3c1e5ead,0x3bcdf754,0x3b8cfe9a,0xba2c2bf6,0xbbd400b8,0xbbc61c61,0xbba1a667,0xbb5e3adb,0xbb48c2d6,0x3a86c853,0x3b345d59,0x3bddef8c,0x3bb5a984,0xbb1ecd96,0xbc00c549,0xbbfccca7,0xbb8339f0,0xba890c49, -0x37083c1f,0xb9e10ea3,0xba43ae6e,0xbad8d643,0xba9ce211,0xba3d7cbe,0x397bd517,0xba23d71a,0x3ae2af74,0x3b052631,0x3b045eb6,0xba41b834,0xbb0e4d46,0xba9ae90f,0x3ab39e98,0x3b590c0e,0x3b522b05,0xbae66c7b,0xbbbf720e,0xbc11dc5e,0xbb36bd67,0x3aef01f5,0x3b351947,0x3b1e3287,0xba8ce5fc, -0xbc01c373,0xbb81f9e2,0xbb6f0770,0xbca732f3,0xbca60be3,0xbc611fdf,0x383468bd,0xbb0156a2,0xbb1bce6e,0x3a8b8d36,0xba37fbe8,0xba26f492,0x385596c2,0x39fe2b35,0x3950722f,0xbada5712,0xbab4d742,0xbacade62,0xba871cfe,0x39827db7,0x375f06d3,0x3a2749ca,0x3a96c562,0xb984c6ba,0xbacbab5b, -0xbb6f8f8f,0xbbadd5b8,0xbbb70cce,0xbba60689,0xba5f99c8,0x3bbd1547,0xb9f107fc,0xbbe6585f,0xbc3c806e,0xbc0850e6,0xbbabe59f,0xbba259df,0x3ac7cef8,0xbac58439,0x3bb6c1da,0x3c360756,0x3c13f5a5,0x3b8d991e,0x3b29a0e7,0x3b4c2916,0x3b05d4bd,0x390f8173,0x3703f3b6,0xb8974801,0xba15b050, -0xb9b45c72,0xb8f75605,0x391d9cd4,0x3a1d5648,0x3a89e9b6,0x39e3c86a,0xba507935,0xba21270f,0xba0585ee,0xb9fe6cc1,0x3a70241d,0x396da847,0x39dbb202,0x38beb798,0xba4c7fc9,0xbb449b40,0xbbaf6793,0xbb892f5b,0xbb40c540,0xbafcbcf7,0xbbdd6555,0xbc05755d,0xbbcbd6ec,0xbbb6c583,0xbbc57082, -0xbb9ff4d9,0xbb845f95,0xbb671a95,0xbb20d09a,0xbab801c6,0xba57a212,0x39e41e7f,0xba032be2,0xba92a079,0xbac81322,0xba885fdb,0xba4f0635,0xba52f022,0xba32451a,0xbab36e0a,0xbb524fc0,0xbb82a2b9,0xbb9e61d1,0xbb856896,0xbb65727a,0xbb2e43f7,0xba8580c5,0x3822dd37,0x3a751e99,0x3a8ed793, -0x3ac38054,0x3ad78f91,0x3a413cb9,0x3a804159,0xba6782ba,0xbb3232f4,0xbba0e024,0xbbca1b93,0xbbd47692,0xbbd9336e,0xbacc4603,0xba9fbc30,0x3a6d1046,0x3a04a8aa,0x3a8183fe,0x3a1a819b,0x3a411166,0x3a24e2e3,0x3a7e79fe,0x3ac76a0c,0x3af0bc98,0x3b0ae107,0x3ac8a96d,0x39aecc88,0xba653fe6, -0xbae3eedf,0xbb10dd49,0xbac99927,0xba89a08f,0xba27a091,0xba2264a3,0xba535791,0xba921b7f,0xba1d9b64,0xb6ab6f31,0x3a298f16,0x3b10386f,0x3b5e18ec,0x3b92d20d,0x3b99fc13,0x3ba482fc,0x3b9b150d,0x3b8ec356,0x3b3f23af,0x3a8d2f4e,0xba49ed8d,0x3ae1beb3,0x3a8a5b16,0x39c66011,0x3a947d19, -0x3acc3070,0x3b0ee029,0x3b3a0ce8,0x3b66868f,0x3b292753,0x3b0f01ae,0x3a5a4872,0x3a0566ac,0xba451bf6,0xbaa56672,0xbada40b3,0xbaf84782,0xbb243f4e,0xbb2065b2,0xbb35422d,0xbb182788,0xbaf0841d,0xbafaf32e,0xbaea13a6,0xbaa7eba3,0xba4aa3c6,0xb99ea35c,0xb9178e73,0x3833f970,0x39be1c60, -0xb8cdf5a0,0xb9ca4d81,0xba13344c,0xb9fb2a35,0xb92f1bbe,0x3a1a6ef4,0x3a9376ec,0xbb47584a,0xbb4c187b,0xbb480840,0xbb2dc7d3,0xbb4ec19d,0xbb432e89,0xbb419fe3,0xbb4b2eda,0xbb44f094,0xbb5c1d9f,0xbb71898e,0xbb66a9d0,0xbb54f688,0xbb668b21,0xbb55a66b,0xbb39a7f5,0xbb461247,0xbb22f52c, -0xbb2f470d,0xbb007e92,0xbadbb6bf,0xbae18c7a,0xbad2e4a0,0xbad04ae4,0xbacf3e92,0xbac3f3d7,0xbae6d6b1,0xbb08788c,0xbb1ff218,0xbb32a0ef,0xbb4297de,0xbb5919e7,0xbb454817,0xbb425193,0xbb482698,0xbb53f847,0xbb11de2b,0xbb0911ed,0xbb5e9ff4,0xbb5d650e,0xbb038ca2,0xbb4a870d,0xbb5087a3, -0xbb152837,0xbb190616,0xbb17836e,0xbb09b049,0xbb1420d2,0xbb13da15,0xbb0d9779,0xbb6fa5d8,0xbb6181d5,0xbb0c6fc0,0xbb619d2e,0xbb5921c5,0xbafd1f9d,0xbb08fd44,0xbb0288c9,0xbaf8f3f5,0xbaf18010,0xbae91fbf,0xbadc3cd3,0xbaf24d44,0xbb0025ad,0xbb085cb2,0xbb10b7fd,0xbb1aa4d1,0xbb2af9f9, -0xbb2652a4,0xbb2365eb,0xbb1aed66,0xbb14f6ad,0xbb213858,0x3b1a10cf,0x3b0b566f,0x3b137c3a,0x3b3c733e,0x3ac72699,0xbab6c1aa,0x3b434c8c,0x3ac80cf4,0xba842063,0xbacfe5c8,0xbae3d286,0xbaf13726,0xbadefe33,0xbad926a6,0xbaf6ceb5,0x3ae8424e,0x3b515ec8,0xbae11759,0x3ac9bad0,0x3b34baf4, -0x3b06ad04,0x3b02c368,0x3b1b58e4,0x3b30307d,0x3b370e28,0x3b39ce8e,0x3b33efa5,0x3b2cec43,0x3b2a25ef,0x3b26d137,0x3b2dd02a,0x3b2c9a3a,0x3b1f0579,0x3b30fd04,0x3b30c7c3,0x3b25cc48,0x3b2078bb,0x3b1fe5d5,0x3b3cf6d0,0x39f52b6d,0x3b059505,0x3b172084,0x3a28d4e0,0x3a30d65b,0x3a80a0d3, -0x390e5426,0x39b5f00f,0x3a5e3458,0x3aabefcb,0x3aa6630f,0x3ac63dae,0x3adfd9cd,0x3b08b0e2,0x3b3b2c98,0x3b001976,0x39882e4f,0x3b107206,0x3b1448fb,0x3b5d3c22,0x3b914202,0x3ba174e0,0x3ba0272a,0x3b87e993,0x3b6c6330,0x3b546336,0x3b550198,0x3b6d62a1,0x3b79d415,0x3b62f410,0x3b8bf3a3, -0x3b896b93,0x3b690b85,0x3b5226f9,0x3b2f791a,0x3b113540,0x3aec0c8c,0x3aade9fd,0x3b154641,0xb74213d9,0xba4826c3,0x38e43474,0xbb2e4f05,0xbb5d54d7,0xbadf2cc5,0xbabb1d17,0xb9fa57fe,0xb905165f,0x3ad32b66,0x3b0bd72f,0x3b0e3e5b,0x3accae26,0x3a9a4d67,0x3a8cafa5,0x3b13defb,0x3b6b7471, -0x3bb94141,0x3bd57029,0x3bd9ea8b,0x3bbd014f,0x3ba900e5,0x3ba1feb3,0x3ba3f6c8,0x3ba8d75a,0x3ba8e91f,0x3b8b4c31,0x3bc31716,0x3bba7a38,0x3b916c22,0x3b8293b3,0x3b3e7c01,0x3b0e87fd,0x3a5d7892,0x3a6825cc,0x3b4c6134,0xbad6629c,0xbb664226,0xbac6369e,0xbb949241,0xbba4f2cf,0xbb6deb43, -0xbaeba7ed,0xb8c7cb8d,0x3a0a6607,0x3b1eee5a,0x3b610121,0x3b79f410,0x3aefff25,0x39b47b8a,0x39676b95,0x3b282899,0x3bbc4f23,0x3c21a535,0x3c3e8d06,0x3c402a31,0x3c1014d7,0x3bd6592c,0x3ba154f0,0x3bb296ac,0x3bcd8b7b,0x3be2b4a9,0x3bd6fa57,0x3c169f6c,0x3c0dc48f,0x3bd610c4,0x3ba43e2b, -0x3b42a436,0x3b030e5e,0xb8996be4,0xba1de531,0xb88c2e86,0x3b3a1e76,0x3b8d728c,0x3b904c94,0x3aa5dd1f,0xb9c7350e,0xba8c163c,0xbab370aa,0xba26ecbf,0x3b3221f8,0xbb1d3333,0xbb639c95,0xbadf4add,0x39bef73a,0x3b08946b,0x3b5aabe2,0x3b35bb27,0x3a2d26db,0xbb190cc6,0xbb76cd69,0xbb68b0ae, -0xbb5362fb,0x3bd1ee9e,0x3c2e0d7c,0x3bfe6179,0x3bf268a6,0x3b9bd79b,0x3ad9176c,0x3b01eff0,0x3b0667de,0x3a9cd75f,0x3b4a287b,0xba820684,0x3b65e3dc,0x3c22dfeb,0x3bf92b40,0x3a4dfb25,0xbbd4cd4d,0xbc0446f0,0xbb8b9df5,0xba9ac6bd,0x3955ae5f,0xb99ebdc8,0xb9fc29d6,0xbabf8ac3,0xbac5b349, -0xb921b8e0,0x3ab7f3d7,0x3a8995c9,0x3b138843,0x3b22d268,0x3b89e7db,0x3b60dfaa,0x3b92fc8b,0x3bee6f4d,0x3bf34f20,0x3bdeecee,0x3b88a388,0xbaeffeb8,0xbbc391bf,0xbc077e70,0xbaa0a7c4,0x3b815da6,0x3b992d71,0x3ba736ae,0x3a738c94,0xbc027487,0xbb7689d2,0xbb1bd2f1,0xbc8d24c3,0xbca23925, -0xbc699975,0x3a9efb8f,0xbb0f9fc2,0xbb1c9303,0x3aa07da5,0xb999c09b,0xb9bff453,0x384db5e1,0x39d87d1c,0x3956aa6f,0xbac2caf9,0xba7be89b,0xba8a92a4,0xba16e0ba,0x3a9895e7,0x3b18d9a7,0x3b0be12f,0x3a74521e,0xb9b0f770,0xbaf52c20,0xba889eb1,0x39ac87ef,0x3b110db4,0x3b3b28a9,0x3bac4e74, -0x3c1a7381,0x3aa870e0,0xbab36bdc,0x3b35274e,0x3c0547ca,0x3c31782a,0x3c1adea0,0x3ba89f46,0x3b8b97e0,0x3b595484,0x3c29f613,0x3c2718eb,0x3ba556cb,0x3b56004c,0x3b4966c2,0x3b24bf3e,0x39a179ed,0xb729f9ef,0x37ced0d1,0xb9c27b49,0xb994f06b,0xb6ff4b89,0x39e49279,0x3aa2b9ef,0x3b04cb40, -0x3aa6c8aa,0x39e6b5fa,0x39c9b4c9,0x3ad0e3d9,0x3b59ba5f,0x3bae1bf7,0x3b9cd044,0x3b801b52,0x3b11922c,0x3b1c1007,0x3a6d7259,0xba0083a7,0x3961673b,0x3a907aa0,0x3a85135b,0x3b8f9ad5,0x3bff1bb1,0x3c5becbe,0x3bde1d01,0x3c03594e,0x3b5a172c,0xbb390efb,0xbb096b31,0xbaa00728,0xba1a39cb, -0xb957ac02,0x3a9dc2cf,0x391b9517,0xba2dc616,0xba8bca4f,0xba623dac,0xba2395f4,0xb9e23b21,0xb997cab6,0xba80ad28,0xbb37a441,0xbb34a6a2,0xbb466042,0xbb2c5a75,0xbb40ed52,0xbb26e7ce,0xba89526d,0x3a435e97,0x3b42faa3,0x3bac2fdf,0x3bd0919f,0x3bf64a35,0x3c097872,0x3bdd8870,0x3bb220c0, -0x3bab45d7,0x3bb5ac6d,0x3bb416e9,0x3bb033d5,0x3beccd0b,0x3abca430,0x3b162096,0x3a28193d,0x3add2473,0x3ab7c538,0x3abab560,0x3a830a7b,0x3a50b214,0x3a85e44a,0x3ab26608,0x3ac45be3,0x3b0f283a,0x3af4e084,0x3a58fb52,0xb91747f2,0xba27b768,0xba86cc11,0xbaa2cde0,0xbaa38817,0xba85088c, -0xb993d15f,0x3a0cb168,0x3a216eb1,0x3b180834,0x3b53e426,0x3b749e1b,0x3b991eb4,0x3b986e28,0x3b910a30,0x3ba64f9f,0x3bd6e620,0x3c0fd120,0x3be08066,0x3baeae41,0x3b674215,0x3b06eb5a,0x3b81d9fe,0x3b62cfe9,0x3b61b664,0x3b7df67d,0x3b763056,0x3b82eccd,0x3b865a65,0x3b91820b,0x3b643be3, -0x3b3f9f44,0x3b0b3178,0x3aa790d1,0xb9096c74,0xba1d146c,0xba8920c4,0xbaa310be,0xbaf49194,0xbac6cd07,0xba8eaa83,0xba5096a3,0xba8bec53,0xbaa7418e,0xbad30314,0xba945814,0xba38c198,0xb9a1ccc0,0x3a5d3ae2,0x3b0c8244,0x3b645177,0x3b645cf3,0x3b54ed4e,0x3b575e36,0x3b3c4929,0x3b3f1a3c, -0x3b50f9e9,0x3b739360,0xbac79da8,0xbaa49b47,0xbb358969,0xbab2eabb,0xbada8624,0xbae6c18c,0xbab89fba,0xbac3619e,0xbab33116,0xbaa6736e,0xbab8a212,0xba9a0617,0xbab617dd,0xbac386e6,0xbae310cf,0xbaeb9d98,0xbaabe338,0xbad5f017,0xbb04423e,0xbb01761d,0xbb0bb408,0xbaf1226e,0xbae52dbf, -0xbadbfd2d,0xbad97e38,0xbadbf712,0xbae61af9,0xbaf12212,0xbae002fd,0xbac06f9c,0xba7f8e77,0xba049b36,0xba01d3b0,0xba1e3e19,0xba6c841c,0xbaa1b459,0xba62aedd,0xba434743,0xba04e144,0xba9e44ea,0xbb44477d,0xb8c8f0ae,0xba5ed6f2,0xbb1de1a3,0xbb296520,0xbb32bcc8,0xbb3f5f69,0xbb4aa697, -0xbb52280f,0xbb5d6d67,0xba9c3546,0xba1992a9,0xbb4dedea,0xbaa92ecd,0xba513149,0xbabfe936,0xbab0e92f,0xbaa87f40,0xbaa61c04,0xbaa159bb,0xba9cb5da,0xba9776b3,0xba889ae1,0xba74e141,0xba686533,0xba511092,0xba4d48dc,0xba368821,0xba5964f3,0xba5fba7a,0xba59a83c,0xba45ac60,0xba7a394b, -0xbac787f1,0xba8b856c,0xbb039bda,0xba896061,0x3a7f4270,0x3b8a9eb2,0xbaff48f8,0x399c8cb6,0x3b514134,0x3b3eeca8,0x3b39fe9e,0x3b40b04b,0x3b598bc0,0x3b6603c3,0x3b6b6a21,0x3a2e6b9e,0xbab6431c,0x3b920614,0x3a74d42b,0xba805daf,0xbb0d4a60,0xbabb37f3,0xbace7d5d,0xbaa9aedc,0xbaa3b0f5, -0xbaa2c326,0xbab2dd6b,0xbab42fef,0xbab95d4a,0xbabdd658,0xbad40f30,0xbae46db2,0xbafdcff3,0xbadfe274,0xbabe209b,0xba3b6f9c,0xba9a3a34,0xba564eda,0xbb040b08,0x3ad47dc2,0xbae07969,0x363aca5f,0xba370f7e,0xbaf796bd,0xbaab45af,0xbb3c9847,0xbb48d532,0xbb0060d2,0xbb175d15,0xbad664d6, -0xbacb97e3,0x39b544e8,0x39da4720,0xb9387802,0xb9cf2f93,0x3ad8ffcb,0xbb0c9806,0xbaf5d76b,0xbad0ea84,0xba6817c6,0xba0a1bf6,0xba07247f,0xba981b88,0xbab2fdc5,0xbadfc1b0,0xbaed9147,0xbb096fe6,0xbb1362c7,0xbb21d153,0xbaede781,0xba8751f8,0x3a191da0,0xb9e7a89c,0xb9ea1311,0xbad9b784, -0xba8839a2,0xbaa88c89,0x3a849113,0xba9ab46d,0xbadd12a5,0xbab8bf4c,0xbb5bdb05,0xbb8ae143,0xbb3bff98,0xbb4db90e,0xba9623b6,0xbb075c21,0x3a16c77b,0x396a5ebe,0x3a0e722c,0x3757c847,0xba05977f,0xbb0456df,0xbb2cfd24,0xbb012612,0xba67403a,0xb9af1e19,0xb9916b6f,0xba96e9ae,0xba8c4db7, -0xbab11fed,0xbabcc17b,0xbb2e05b5,0xbb5b98af,0xbb7ab801,0xbb1d5f26,0xba4d1f39,0x3b0ccaab,0x39dd7459,0x399968c2,0xba88695b,0xbaa837aa,0xbaf2bca3,0x3aa52592,0xbb3528e5,0xbb84d1dc,0xbb052df7,0xbba8c8b0,0xbbb51778,0xbb5d2b2e,0xbb016bd4,0xba72171f,0xb8dc80d3,0x3ad287c6,0x3b0f145b, -0x3b4c19d2,0x3a517522,0x39b37171,0xbafbfa89,0xbb2d86ed,0xbaae9990,0x3a43ce38,0x3af81b21,0x3af6e44f,0xb9b1ee16,0xbaa68354,0xbb1e1f09,0xbb0a33b3,0xbb672399,0xbb7996e1,0xbb6e8650,0xba8e4b68,0x3acfe3cc,0x3bb718c4,0x3b2bde5f,0xbb54e378,0xbb112d88,0xbabf173e,0xbaaa29d9,0x39d494b8, -0x3b432d2f,0x3b82a0f3,0x3b9736ee,0x3aa68ff5,0xba471967,0xba958443,0xbad5e098,0xba671610,0x3b2b2ea5,0xbb31e3f4,0xbb8e63b8,0xbb4586d3,0xbb3cabbd,0xba7f6e87,0xbafda426,0xbb9e38ad,0xbb940b19,0xbbd1a8fb,0xbbc31f3b,0xbba01525,0xbb6e88ac,0x3b676d06,0x3bb9341f,0x3a6f2819,0xb9c8ffcb, -0xbb98efbf,0xbc21b1af,0xbbfa1d01,0xbbca7862,0xbbafc7f2,0xbb3dc84a,0xbb3f4c97,0x37abb064,0x3bc6f89a,0x3ba87aa4,0xba8d5700,0xbbf692da,0xbc107185,0xbb9fa4ab,0xbac81ffc,0x38dbb429,0xb9823ae0,0xb997eabd,0xbab807b7,0xbaf50528,0xba331c24,0x3a220255,0x39a4fe87,0x3aeb7902,0x3b436be3, -0x3b349f77,0xba9cee45,0xbaf88ba2,0xbb0e3706,0x3abb1d27,0x3b2c9e58,0x3a368c56,0xbb59c595,0xbbd9a9a7,0xbc0d1f53,0xbb0ba83d,0x3b17e800,0x3b3cf507,0x3a08ccf2,0xbb547a9f,0xbc013c7c,0xbbac38d4,0xbb884583,0xbc82c7b5,0xbc949571,0xbc5e5a78,0x3ac76642,0xbb3154bb,0xbb42ef0e,0x39df3f3c, -0xb9f42bb9,0xb9b389e4,0x3735188b,0x39389a9c,0xb6dc4d79,0xbab1d5d8,0xbabc408e,0xbb11f66a,0xbab6edbc,0xba323186,0xb7ccae18,0xba04a142,0xba7bf11d,0xbaaefb75,0xbb4ba02a,0xbbc8b067,0xbc086521,0xbc104c0a,0xbc041113,0xbb6b8c4c,0x3b8cd8e6,0xbbdf35c3,0xbc5fef0f,0xbc60efe1,0xbc1ec771, -0xbba19c4d,0xbb471b87,0xb9cdb80c,0xbb868ac0,0x3a3d9e2d,0x3c0b0f46,0x3c072e13,0x3bb8458d,0x3afd01a1,0x3b1d3eb5,0x3b10b0e9,0x39aabf79,0x3840d771,0x393b418e,0xb9b2b10c,0xb9d004b1,0xba0fcf9a,0xb726d2ed,0x3a740d2f,0x3ac75005,0x3a6db02d,0x3a49a140,0xb8f608a5,0xba6ec597,0xba788d0f, -0xb875e055,0xb9a0be1c,0xb9d775be,0xba730dc4,0xba9baef4,0xbb2a1344,0xbb5b0ac3,0xbb2662e6,0xbb06eb0d,0xbb50c68f,0xbbd2428e,0xbbf9bf17,0xbbd6d55e,0xbbbb5b2e,0xbbb1c492,0xbb0a9f0a,0xb90e1d7b,0xbb245452,0xbb17abe1,0xba2b4b9a,0xb9cdca13,0x385368a2,0xb9cc8fe8,0xba9e53c4,0xbab4ccda, -0xba93683f,0xba538a27,0xba55ea08,0xb9a21db7,0xba6459fc,0xbb2c47d0,0xbb68660c,0xbb728534,0xbb827226,0xbb6aef1c,0xbb295c01,0xbad76a85,0xb947b6c7,0x3a18662c,0x39d603ac,0x3a657b82,0x3a5a9823,0xb9a56f4a,0xba57725f,0xbb3bc13e,0xbba64348,0xbbe01239,0xbbfadea3,0xbc009664,0xbbc80aea, -0xbb9a7eda,0xbb412623,0x3a27f5b0,0xb92625e3,0x3a2a78e6,0x3829cf2a,0xb8fbbc3c,0xb5aaef1d,0x379c5641,0x39ff6b6e,0x3a2fa14d,0x3ac7a0f3,0x3ab26824,0x3a3dd72b,0xb9db470c,0xbaa3ee7d,0xbb0395bc,0xbada1de0,0xbac5a19a,0xba811e84,0xbaa24632,0xbaa72ed5,0xbab19a67,0xb9aa6624,0x3a2bbbd5, -0x3abf6c92,0x3b4527e1,0x3b885d9a,0x3bae7ccb,0x3ba2a67e,0x3b892488,0x3b19c2c0,0x3b07bad2,0x3a505fb6,0xbaafc328,0xbb4e0a84,0x3b0b0408,0x3b1bdd4b,0x3b2967c3,0x3b272896,0x3b5f250c,0x3b6495d8,0x3b7467ba,0x3b811b90,0x3b69e04c,0x3b3ec4b9,0x3b1ae527,0x3aa5e8cd,0x3a19a90c,0xb989f959, -0xba2b2798,0xbaa54ad5,0xbaf9a5f7,0xbaf15838,0xbaf3c97d,0xbb13323b,0xbb1a75c1,0xbb0ad07f,0xbb09ec5c,0xbad7bde8,0xbaa6619e,0xba638bc8,0xba144392,0xb964a690,0x399f2cca,0xb9227665,0xb9aeadd8,0xba219c53,0xb9a70c19,0x3881a905,0x3a61a79e,0x3ae57923,0xbb2c8243,0xbb2614e9,0xba87ace4, -0xbb013d74,0xbae99c1d,0xbad52828,0xbb03020e,0xbaff7b0d,0xbb22efa8,0xbb3ce152,0xbb39c2c7,0xbb571826,0xbb5ba12c,0xbb6af16c,0xbb408bcf,0xbb30987a,0xbb46e592,0xbb2e2197,0xbb051acc,0xbb1649a6,0xbaeff926,0xbaf30f23,0xbae6257c,0xbadf6695,0xbadae291,0xbacf0d27,0xbb05a425,0xbb24e878, -0xbb427c31,0xbb5b11c0,0xbb6f7d23,0xbb83d6ad,0xbb66f132,0xbb507182,0xbb438e12,0xbb40047c,0xbb190ac9,0xbb1e5893,0xbb1874fa,0xbabbf8b9,0x38cc6541,0xbb23a6fb,0xbaaef5fa,0x38c45f63,0x381561a7,0x3802e270,0xb81d6f66,0xb7941f8d,0x3708ca06,0xb8456785,0xbb07350c,0xbb4acd1f,0xb8f4c36a, -0xbaf93ee2,0xbb3154ee,0xbb29f12f,0xbb2301df,0xbb237c22,0xbb1dfbe3,0xbb1c51e8,0xbb1a6424,0xbb14b24b,0xbb204736,0xbb26915d,0xbb2ece81,0xbb358ce8,0xbb3d46e5,0xbb4d2eb0,0xbb417775,0xbb3c43a4,0xbb31d388,0xbb272692,0xbb47be1e,0x3b2762c1,0x3b16291d,0x3b52c509,0x3a6b1a30,0xbab29c94, -0xbb5431f7,0x3adeccc7,0xba8c848e,0xbb5772a3,0xbb77c5b8,0xbb7da719,0xbb667e62,0xbb74d3a7,0xbb70690e,0xbb714a9c,0xba7ae6a1,0x3acd8260,0xbb61f3ce,0xba932bc6,0x3a47dfff,0x3b3cbfa2,0x3b100989,0x3b2be048,0x3b409661,0x3b45a68e,0x3b4548eb,0x3b362a73,0x3b361b30,0x3b360733,0x3b3c3f36, -0x3b34279b,0x3b311478,0x3b2ac82d,0x3b375528,0x3b368ca9,0x3b2dfbdd,0x3b2b0dcf,0x3b30c064,0x3b3a746f,0xbb0897c6,0x3ae5d986,0x39fd8468,0xb9ae226d,0x39969843,0xb6ac631a,0x3925e511,0xb686feec,0xb9c44c26,0x3a185c13,0x3a43e442,0x3a133002,0x3a2acad8,0x3aaa8346,0x3accfd38,0x3ad29ffe, -0xbac62f5a,0x3b17c472,0x3b41c625,0x3b6c6b9e,0x3b9c009d,0x3ba98fc6,0x3ba65bcc,0x3b842a5b,0x3b76b3f8,0x3b63ef81,0x3b7533d4,0x3b680820,0x3b6680de,0x3b58ac2e,0x3b7cd71a,0x3b7c1d4c,0x3b5e0e9d,0x3b448276,0x3b5cd183,0x3b265da4,0x399c15ad,0x3a28d5c9,0x3a055923,0xba01cf72,0xba8cbc4e, -0xba6e1057,0xbb55a14e,0xbb4ceb25,0xbb2edcec,0xbaa4d62d,0xbac7e99c,0xba5718f6,0x39da5c14,0x3aac56f1,0x3a8e68cc,0x3a822cf2,0x38117862,0x3a7780d6,0x3b4eb8b9,0x3b7935c6,0x3bc2bd83,0x3bd74af7,0x3bd5fc60,0x3ba23b85,0x3ba57725,0x3ba1958c,0x3bb7d007,0x3b95db9e,0x3b8dbe62,0x3b8590fe, -0x3ba77473,0x3ba56581,0x3b8efab5,0x3b723b87,0x3b509434,0x3aefe47d,0xba3cf4d9,0x39165bed,0x3aa8b76f,0xbaf2b1aa,0xbb62e236,0xbb26e00c,0xbba501a7,0xbbb699cc,0xbb40ea1a,0xbb215714,0xba796a85,0xb7a58771,0x3b08d7f6,0x3b55b72c,0x3b230f0c,0x3b285d17,0x39af0927,0x3aa2f778,0x3b8d8c17, -0x3bcca938,0x3c28655b,0x3c3d34b5,0x3c374a88,0x3bf83c7a,0x3bcf50e0,0x3bacee99,0x3bd90449,0x3bb487f8,0x3bae8e79,0x3bb375af,0x3be65ea2,0x3be45ecc,0x3bc17b0a,0x3b7d6ef9,0x3beaffd5,0x3b29b157,0xb99e8990,0x380b635e,0xb9b07d5d,0x3b3525d8,0x3ba2035f,0x3bb6af52,0x3b0188bc,0xb99234e4, -0xba6e5c74,0xbab5f829,0xba45861c,0x3b270692,0xbb209473,0xbb68a3f3,0xbb64945c,0xbad14d80,0xbb0875f4,0xba89e10e,0x3a8d6bb8,0xba11c482,0xbb0c11a2,0xbb60318e,0xbb169d01,0xbaac00b3,0x3c079227,0x3c3b1af0,0x3bf29fb4,0x3beb4e0b,0x3b9aac04,0x3a98273d,0x3b289354,0x3b43a140,0x3afb7267, -0x3bb3edf4,0xb81d35ed,0x3b1315aa,0x3bd151e5,0x3bcdd876,0x3b027f42,0xbbcf8dce,0xbc0c0e18,0xbba10bb7,0xbabd8d07,0x39687698,0xb8efd57c,0xb8adb3cf,0xba9e674d,0xbadcd4f7,0x399e4c46,0x3ae7347b,0x3a9815d9,0x3b0438ff,0x3ae65a8f,0x3b919e88,0x3b94019a,0x3ba3aea5,0x3bfc9ae5,0x3c0aa1e7, -0x3bd7f388,0x3a9f8979,0xbb84576b,0xbbe46773,0xbbe2e240,0x3938c0ec,0x3b834fb9,0x3b3b882b,0x3a73bc2a,0xbb37afa1,0xbbf54027,0xbb71d2b9,0xbb55121f,0xbc4c5400,0xbc8d9fab,0xbc4f7a57,0x3a1ae35e,0xbb18030f,0xbb45b021,0x3938e43e,0xb9984856,0xb8a189db,0xb88eb91e,0x393a43ff,0x3917ae67, -0xba89f158,0xbaa4c91e,0xbab9f08a,0xbace9d75,0x39fbb012,0x3a5b7bd3,0x3a59db42,0x3a7adef8,0xba63c972,0xbb1f80ae,0xba9423ad,0x3a44056c,0x3b23b4cd,0x3b944d80,0x3bedac24,0x3c35736b,0x3a6ce6a3,0xbb0336c0,0x3b30414e,0x3befc33d,0x3c28deb1,0x3c2ee289,0x3b2f01ee,0x3b1a5edb,0xbab0a658, -0x3bdcf2c1,0x3c10bbd4,0x3bb50061,0x3b26d9a0,0x3b0a8764,0x3b2a7bec,0x3a0dbe87,0x38cb6217,0x396a2be1,0xb91b530f,0xb9a19f27,0xba011c1d,0x39a4207e,0x3a9e7151,0x3b11ee91,0x3af5c5fd,0x3a0ed208,0x3a8f04f8,0x3b3fdb28,0x3b84d949,0x3bb5801f,0x3b9bf534,0x3b4dab2a,0x3a44c21c,0x3a4d5fb8, -0xb9f2bf8f,0xba6f512d,0xba250f9a,0x3a07eade,0x3ac77419,0x3ba79976,0x3c08fae2,0x3c5053a5,0x3bb15e9b,0x3bfcc384,0x3b04e5f9,0xbb72fe0f,0xbb2f73c6,0xbae69599,0xba50de35,0xb8b7265e,0x398dfbd2,0xb9e1f9c6,0xba23db39,0xba88d778,0xba5bf40c,0xba181f2f,0xb9ec594b,0x36fbcfc9,0xba0abbcf, -0xbae845fc,0xbb251e8f,0xbb6fca8a,0xbb1dbd9e,0xbb27cc48,0xbb288da9,0xba934495,0x39c946b1,0x3b1561ea,0x3b80940f,0x3b9f4b30,0x3bb4e5bd,0x3bc48a76,0x3b9b8f53,0x3b71beec,0x3b750356,0x3b6672be,0x3b5a2295,0x3b8889b7,0x3bc76f89,0xba2d4552,0xba888519,0xbb24ed9b,0xba21781e,0xb9cc5129, -0x381cfac2,0x39b4e90b,0x38a9fe5c,0x3a0a2b11,0x3a2aff49,0x3a61c88b,0x3abeeeb5,0x3ad738b9,0x3aa61767,0x39bcf0e6,0xb9d86769,0xba9f7b6f,0xbad7c413,0xbacbf57f,0xbab6b3a5,0xb889acdf,0x3a89f8b9,0x3aaf2c19,0x3b336d7d,0x3b70858c,0x3b8c43b5,0x3bb454f1,0x3bc0f172,0x3bc1c118,0x3bc958e7, -0x3be4c76b,0x3c0aeba1,0x3bdd6751,0x3ba17b53,0x3b227e70,0x38e17fa3,0x3baf3d17,0x3b92584c,0x3b6a0565,0x3b86cf8e,0x3b72ca3c,0x3b831c63,0x3b825fbc,0x3b8cc4b4,0x3b5f9646,0x3b61c5e3,0x3b2606e8,0x3b1c1981,0x3a38df4b,0x3a0903d7,0xb9c553db,0xba28880b,0xbad4a0f5,0xbab2f778,0xbab8a339, -0xba3086ec,0xb9e76fcd,0xba7e285b,0xba992956,0xba61a9a3,0xba0b1d98,0xb9a6a006,0x3a725306,0x3b0cb382,0x3b618f91,0x3b74a951,0x3b7b79a4,0x3b87204c,0x3b74013e,0x3b773b4d,0x3b8c82d6,0x3b9a76ed,0xb9e89cef,0xb9a239d2,0xbb284a10,0xb9c5bf6d,0xba9319d4,0xba95374d,0xba0bb1e5,0xba2a8f16, -0xba08dc3c,0xba6336e8,0xbadbbbee,0xbab35ae0,0xbac3f4be,0xbafbe3f3,0xbb130903,0xbb019c1c,0xbabd3a79,0xbabdceb7,0xbb1a08f4,0xbab880b3,0xbaceafff,0xbab09dac,0xbaa1e22b,0xbaa00d2f,0xba9e2732,0xbaa68e15,0xba8bc636,0xba77ea0b,0xba37e6b3,0xb9f0f146,0xb816c74d,0x39df654b,0x39f5c28f, -0x39d0b65a,0x3917714e,0xb973e01b,0xb9396947,0x395f28c7,0xba800dbb,0xbb0cb114,0xbb5f05b3,0xb98c3907,0xbae9d5e5,0xbb4735d0,0xbb5d825f,0xbb6a368e,0xbb6d6557,0xbb842f90,0xbb8c7b4d,0xbb9362bb,0xbb2860c9,0xba929146,0xbb867842,0xbb244f24,0xbab5a21d,0xba31bb94,0xba67b720,0xba4fe278, -0xba5351c6,0xba4c71e4,0xba44ee25,0xba45ade2,0xba1dd73a,0xb9fb17f6,0xb9c5e2b3,0xb96505c8,0xb8fc1292,0x37bdcde9,0xb90306bb,0xb92eacc3,0xb91f1496,0xb8905453,0xba0f4762,0xba7db7b4,0xba21db1d,0xbae90180,0x3a9bf90c,0x3b49b679,0x3b81301b,0xb6bfb494,0x3b1c390c,0x3b697b38,0x3b63c38e, -0x3b5ad9b9,0x3b450463,0x3b6685e0,0x3b6e721e,0x3b62a474,0x3b2d7a44,0x3a0dcb4e,0x3b85a87a,0x3b3a90ea,0x3a9c6f40,0xbaf1f736,0xba667f8c,0xba7f66fd,0xba3fa78e,0xba30ec65,0xba2eae8a,0xba550f74,0xba4d9513,0xba55d45f,0xba49fff5,0xba87377c,0xba922f22,0xbaa23818,0xba5b59e6,0xba239243, -0xb952ff3d,0xba2aa245,0xba44bce4,0xba8b1065,0x3b4e0b10,0xba652d78,0x3a3fe350,0x398bf1f4,0xba827107,0xba736cd9,0xbb0c887f,0xbaea01ce,0xb9f479c6,0xba878c25,0xba6b64c4,0xba3ead6c,0x3a8592fc,0x3a81f5fd,0x3a6bb179,0x39f8872c,0x3b448876,0xba57d941,0xba89394b,0xb9d6fc82,0x38634762, -0x39b125f4,0x3938ca16,0xba1619e9,0xba29919b,0xba5a7787,0xba24e3b5,0xba9a2fc1,0xbaa22f96,0xbaab9ee2,0xb92c2417,0x39e59f0e,0x3a8dc91e,0x388107c4,0xba1800d2,0xba2489ce,0x3a82fa56,0xb86ee215,0x3a8acd10,0xb990b472,0xba553587,0xbad76561,0xbb211fa6,0xbb852fd6,0xbb0a8668,0xbb590ee0, -0xba4c2d86,0xbb099629,0x3a93c646,0x3a10731c,0x3a08d926,0x3a3a69fc,0x3a839855,0xba3f22b9,0xbaedce63,0xba34eecf,0x3998a2db,0x3a5befa9,0x3a4d0e72,0xb8f786bb,0x38c404c5,0xb91480a3,0x39226487,0xbaca6c3f,0xbafad18e,0xbb0790d4,0x39c87e12,0x3abe8664,0x3b24d5fd,0x3a874335,0xba74eac6, -0xb9fddd39,0x39049d18,0xbab3ade7,0xb89fadc1,0xbb120e34,0xbb7e4ce9,0xbb5dcaaa,0xbbba37a5,0xbbbdf211,0xbb5b7e2b,0xbb271064,0xbae2142a,0xbaa7f9db,0x3a99afd0,0x3acd5ef1,0x3b358b08,0x3aa06aed,0x3b11f451,0x384b31e2,0xba503e72,0x3aa490d6,0x3b4986dc,0x3b805247,0x3b5a06bc,0x3a5920a6, -0x3974fbfa,0xb9f81066,0x39eada31,0xbaca0b2d,0xbad5cf71,0xba938dde,0x3b3656f2,0x3b956a26,0x3bb14f2f,0x3b23d6f0,0x39575506,0x3ac8dadd,0x3b65c1b4,0x3b17e40b,0x3afb42aa,0x3b89d896,0x3ba8d45f,0x3bc4b36b,0x3b19354e,0xb934f0f5,0xba23f68d,0xbaa80b7c,0xba5305d1,0x3b285cfc,0xbb147508, -0xbb888e83,0xbb7a5609,0xbb8e2368,0xbb186639,0xbb6a7454,0xbbdacff9,0xbbce9d9b,0xbc145b40,0xbbda48f4,0xbbaa8633,0xbb938b19,0x3b0e2860,0x3b5fa616,0xba9c8bc0,0xbad30647,0xbb83e8ac,0xbbe6cf0f,0xbb8e8543,0xbb5bcb69,0xbb81d46d,0x39e323f1,0xbba53bd0,0xbaa715d0,0x3bae3fd7,0x3b988d48, -0x3a8a1957,0xbbd4b462,0xbc1469a0,0xbba7b0bf,0xbaeebb0f,0x3885d8c7,0xb8eb0de7,0xb7d537a9,0xba99bffc,0xbb08186b,0xb9b3eaa6,0x3a97553d,0x3aad5fd9,0x3ae42cb6,0x3b553f42,0x3b7cc1d0,0x3a6547ba,0x3abc50b5,0x3a8d063b,0x3b78f187,0x3b4db96d,0xba325473,0xbb8f4721,0xbbdfc736,0xbbe6a2d5, -0xb9d58344,0x3b5cf840,0x3b4dcad9,0xb955d400,0xbb82d357,0xbbe793b0,0xbbae56a8,0xbb9d0625,0xbc2ee1e8,0xbc6348c7,0xbc3b5ead,0x3a465a69,0xbb169f36,0xbb1792f9,0xba21ea82,0xb996582a,0xb6bc4358,0xb88feddb,0x390d9755,0x388851b0,0xba6c0d02,0xbaacd277,0xbb1a09cf,0xbabee1cc,0xba877291, -0x39347387,0xbaa29e61,0xbb112d10,0xbb026521,0xbb7ed578,0xbbbce2ae,0xbbdf2955,0xbbdc3e9d,0xbba43c1c,0xbad469af,0x3b877dd2,0xbc0a70d4,0xbc542964,0xbbfc05f2,0xbb5481cf,0x3aceb769,0x3b8adbbd,0xba71d969,0xba922017,0xbad782f8,0x3ba275cb,0x3bcfd150,0x3bb48e8c,0x3a92993f,0x3a8e785a, -0x3af61123,0x39fe654e,0x38a0be5b,0x398751b4,0xb87f7817,0xb9d75b30,0xba388ca4,0x372ccb04,0x3a9f792d,0x3b0154ba,0x3abac456,0x3afcb2be,0x3a3e00e4,0x394f23f3,0x3a18fc90,0x3a8ca9f8,0x3aa6de15,0x3a1d3acc,0xba31702f,0xb9ba06f9,0xba879b06,0xba01268e,0xb9d54471,0xb971593b,0xbb0f547a, -0xb9ac5dcf,0x39f34e2c,0x3a8813cb,0x39ca78e6,0x388eb309,0x3b05f7ec,0x3b0be22d,0xba9085a8,0xbaaa572e,0x39058998,0x39054e59,0xb8eff87b,0xb8faecce,0xba43d740,0xba3e6abc,0xba68d936,0xba2f0cdc,0xba00d378,0x3893d8e2,0xb9b0b69e,0xbad79b99,0xbb22857e,0xbb184112,0xbb500ff3,0xbb450d09, -0xbb0e5afe,0xbae396a2,0xb751b083,0x3a90a392,0x3ad090cf,0x3b076d0a,0x3b0b295d,0x3ad1944b,0xb71ac8e0,0xbae3dd1f,0xbb5e8cda,0xbb82090f,0xbb842052,0xbb7c348f,0xba3255b3,0xbba1194a,0xbb3d6b1e,0xb98f00fd,0xb9eb57e7,0x399efd04,0xb80c627e,0xb9c4630a,0xb9236161,0xb9a2ddc1,0xb8fd4299, -0xb93b45da,0x3a5a5bde,0x3a8dd178,0x3a896c9e,0x393956e8,0xb9e90cd4,0xbaabf38f,0xbad812e4,0xbafa9635,0xbac61d64,0xbac30aa2,0xba7e1a83,0xba071520,0x3a8dd6d3,0x3b15ce01,0x3b469157,0x3b8ba8a2,0x3ba15f24,0x3bb48476,0x3b9f7292,0x3b75e7f3,0x3af705db,0x3a8e9b69,0x385d92df,0xbae7ccb7, -0xbb5670ad,0x3b3b3897,0x3b692229,0x3b8dbc1c,0x3b76658b,0x3b917a17,0x3b8812f6,0x3b817eed,0x3b7732e6,0x3b799fe6,0x3b54fbf8,0x3b60af51,0x3b08e999,0x3add4996,0x3a5e5451,0x399122b2,0xba0f7ef8,0xbaa8c392,0xba90df2c,0xba4bbd44,0xbabf0409,0xbb048ac3,0xbaea015a,0xbb030366,0xbad99f18, -0xbabacf16,0xba99c85a,0xb9f8fbbd,0x398c8c8a,0x3a9869a9,0x3a8e2a2a,0x3a9c33bf,0x3a98cf22,0x3ab2a0a1,0x3ad1955f,0x3b08ead9,0x3b39b05f,0xba8fb386,0xba605fed,0x39a5f43f,0xba42a319,0xb9b13981,0xb9bb6315,0xba4c1062,0xba3769fa,0xbab963a0,0xbaddecb8,0xbac6d964,0xbb0c9f15,0xbb237859, -0xbb2cac5e,0xbb0a3ad3,0xbb0a85fe,0xbb1508e9,0xbb170647,0xbac86395,0xbb1d1297,0xbb0663e7,0xbafc9ae8,0xbaef61fc,0xbae39840,0xbadbd8ba,0xbad4afb1,0xbafcd9ed,0xbb1183b1,0xbb1ce7c3,0xbb2524d5,0xbb2672b8,0xbb25f799,0xbb0b9a26,0xbae2a91f,0xbabde5b6,0xbaa86f33,0xbaccfb89,0xbada3aac, -0xba23f99a,0x3982206e,0x3a27f257,0xba7d67d1,0x3991a40a,0x3a73dc52,0x3a577a1b,0x3a435451,0x39ea66a4,0x3a06dfcc,0x39fe0b6b,0x39922d04,0xb9fb407e,0xbae4bcef,0x398bac4c,0xba0318d6,0xbabeba94,0xbb252960,0xbb127a73,0xbb16d38b,0xbb143541,0xbb142e39,0xbb13eec1,0xbb115866,0xbb1304a8, -0xbb11f070,0xbb133e52,0xbb114253,0xbb10a464,0xbb13fbd0,0xbb0aa282,0xbb0614b5,0xbafdd0d8,0xbae8c742,0xbb2777ef,0x3a8ef396,0x3a8d067c,0x3af49935,0xba992447,0xbb1eaf12,0xbaeb5637,0xba089a05,0xbb159ae3,0xbb2406dc,0xbb335d1d,0xbb3658a7,0xbb176132,0xbb239f0a,0xbb1afb04,0xbb120be1, -0xbb112866,0xba358238,0xbae49abc,0xbb0ddb67,0xbaa3507b,0x3ac76c7b,0x3a75b611,0x3a98a516,0x3aba406e,0x3ac2a003,0x3abe64f0,0x3a983c44,0x3aa374d7,0x3aa5af55,0x3abd0ce8,0x3a8f47bc,0x3a826a16,0x3a74481f,0x3a939f84,0x3a9e4991,0x3ab536c0,0x3a9fa796,0x3ab835d9,0x3a7a3b07,0xbb1f8195, -0x393c0713,0xba9cc9a9,0xba8f2560,0xba3da417,0xbab3120d,0xba57f9e4,0xba9bf1a0,0xbaee226c,0xba6b850b,0xb9ff445a,0xba83ae20,0xb9a39111,0x3993e803,0xb900f472,0x3a0ff9ac,0xbac13f7c,0x3a58ca6f,0x3adb8b83,0x3aee3f1e,0x3b31fe42,0x3b48c26f,0x3b40f713,0x3af3248c,0x3af1a885,0x3ad90a18, -0x3b06c7b4,0x3aa7fa18,0x3a84ace3,0x3a604710,0x3ab4e58d,0x3ae1ec78,0x3b05e097,0x3ab8fc78,0x3b141124,0x3aabd692,0xba976119,0xba02ed86,0xba61729b,0xba6d44ab,0xbaac291a,0xbb0f2942,0xbb630ffb,0xbb524925,0xbb714137,0xbaf305c5,0xbb09d20a,0xbb000526,0xb9f88992,0x3908f493,0xb9291132, -0x390115c5,0xba6c19b6,0xb8806eb4,0x3ada406a,0x3ae97c95,0x3b5a4c0c,0x3b7b9f69,0x3b727ad0,0x3afe93b8,0x3b273466,0x3b2223cf,0x3b61976d,0x3aaa26d6,0x3a3ed8de,0x3a4da3ea,0x3ae28084,0x3b1d4c4a,0x3b529765,0x3b0828da,0x3af55894,0x39f62ba4,0xbb054403,0xbaa5e88a,0xba627631,0xbb08126b, -0xbb564600,0xbb700eab,0xbba913fa,0xbbb60976,0xbb28411a,0xbb2f264e,0xbadd4a8e,0xba881c94,0x3ab6e1d7,0x3b15fee3,0x3a988567,0x3b19b1fb,0x3a1c1920,0x3aa417b7,0x3b566395,0x3b803457,0x3bda5237,0x3bf7fb7b,0x3be2702f,0x3b633ac5,0x3b4e0a20,0x3b33ff4f,0x3b936c01,0x3acc5565,0x3a0ff19a, -0x3a5bc5ef,0x3b187de6,0x3b70965b,0x3b9d66cc,0x3b0cc0b8,0x3be83e95,0x3b103382,0x3989d0ee,0x3a826c27,0x3a0b5bf7,0x3b4dad92,0x3ba8d4ba,0x3bc0cd0d,0x3b28a0b5,0x3929d0bc,0xb9af8712,0xba6f1310,0xba1667bd,0x3b0e1c98,0xbb07f4a1,0xbb5dda2f,0xbb9d2de2,0xbb814bf7,0xbbb0b467,0xbbad7435, -0xbb487286,0xbb6b4147,0xbb889438,0xbb8a819c,0xbb1ada9d,0xb9fc00d4,0x3be0fd3e,0x3c07ef04,0x3b74ec78,0x3b577871,0x3a8ce3c1,0xbb17606b,0xb93cc505,0x3a33d49a,0x389bd4e2,0x3b9a25b8,0xba14e038,0xb82d7a0f,0x3b1650a3,0x3b79ea78,0x3b061c1c,0xbbc8e3c7,0xbc098950,0xbba42388,0xbae1b8c2, -0x3686ec25,0xb8878a8e,0x38adbb91,0xba87fb36,0xbae3f3fe,0x39892a25,0x3ac05a43,0x3a72ec08,0x3ac47ffe,0x3acc704c,0x3b7efe0a,0x3b6feb57,0x3b61bfea,0x3b962ef4,0x3bcbdbda,0x3b8734ec,0xbad58ac9,0xbbb732d9,0xbbee3315,0xbbb2c25f,0x3a89a4dd,0x3b5f436a,0x3aa2c607,0xbb3b9457,0xbbc3c8df, -0xbbd60260,0xbb80f80b,0xbba6399c,0xbc06a62a,0xbc4db3ca,0xbc1e49c2,0xbab97266,0xbadedd79,0xbb133bbe,0xba94d832,0xb98bd6a7,0x38c1bd22,0xb8fa7a2e,0x38bedfcb,0x3951c5bc,0xba19d31f,0xbabd777f,0xbb018df7,0xbb10744b,0xba42bb33,0xba8b52b1,0xbaaf1af6,0xb9668a29,0xbad84e5c,0xbb4f80fc, -0xbb3ad3b7,0xbb05b89a,0xbac1a68e,0x3af8d4d7,0x3ba1e0cf,0x3c063bb4,0xbb25f425,0xbbc02b58,0xbad95417,0x3a94d144,0x3b8ff9c6,0x3bef31c4,0xba9eba20,0x3a783eea,0xbb1a2944,0x3b2d0a02,0x3ba4cc0c,0x3b93edd1,0x3a81e3f3,0x3a259e8c,0x3aede4b9,0x3a10b585,0x38c0ade8,0x397a7507,0x3810c79d, -0xb9b06b24,0xba44af61,0x38aec5fa,0x3a82dca5,0x3b04816d,0x3afc75dc,0x3a696741,0x3ab78635,0x3b30d569,0x3b3762b4,0x3b56d743,0x3b32ad60,0x3aa627d0,0xba7281b0,0xba950c65,0xbb0ed1df,0xbaf63e0d,0xbb02e186,0xba44ee88,0x3a3f002d,0x3b3e1302,0x3b8af6aa,0x3b9eb2d7,0x3b016169,0x3b1d5cb1, -0xb9835134,0xbb149915,0xbb135d25,0xbad1792f,0xba28cb40,0xb8947bce,0xba2984fc,0xba1ff99c,0xb9ecc299,0xba21ad12,0xba2fbc0d,0xba0a4800,0xb9e16d0a,0x392bf756,0xb912f515,0xba4f6f7e,0xbb10b34c,0xbb6e07fd,0xbb294de1,0xbb146391,0xbb0f782a,0xba992298,0xb8c264a0,0x3a821861,0x3acb945b, -0x3af081b9,0x3add4dfc,0x3aabcb58,0x39fc35fe,0xba20f406,0xba98298e,0xbb1119b8,0xbb20bf24,0xba8f8c36,0x3a515334,0xbb69eca0,0xbb8f8eb3,0xbb7f6b8c,0xbb1c9fae,0xbacad4ce,0xba8bcdcb,0xb9afe98f,0xb9e73098,0xb85a4573,0xb8ce14ff,0x385a664d,0x3a010d76,0x3a829024,0x3aa7209d,0x3a0cdbe3, -0xb9b4d6af,0xbab8cd74,0xbaf97a28,0xbaf3c933,0xbadd40be,0xba1b23a3,0x39b3d392,0x3a705e2a,0x3afb86e2,0x3b3b2f11,0x3b6c4edb,0x3ba4bf03,0x3bc168cc,0x3bd0abd1,0x3bbf612a,0x3babf25f,0x3b94a852,0x3b65c652,0x3afd9b29,0xb9a5e6f2,0xbb2d9dba,0x3b9009e6,0x3b7aa603,0x3b3d989b,0x3b4f6260, -0x3b42f3db,0x3b5086fe,0x3b4a67d0,0x3b54dc1c,0x3b3d3ee9,0x3b580a16,0x3b350339,0x3b3b5421,0x3ad06b5c,0x3abd236e,0x3995014d,0xb986b74d,0xbab500f3,0xbaa38ae4,0xbacfda36,0xba81aa13,0xba13bdf7,0xba8870df,0xba90a7f9,0xba729520,0xba365297,0xba206efb,0x39966811,0x3a899b0f,0x3aff7a99, -0x3b172318,0x3b31a3ed,0x3b4c7f25,0x3b41738c,0x3b45188d,0x3b68651d,0x3b794ee7,0x39ab7a92,0x39bbad36,0xba8e3a1c,0x3993dd07,0xb9f52d53,0xb9ecc4d7,0xb8c08264,0xb98660cd,0xb9a9ecc8,0xba8476c2,0xbaff62ff,0xbaf6f8c5,0xbafc4fa9,0xbb1ff7a7,0xbb262270,0xbb09e587,0xbafe0d41,0xbadaeb57, -0xbb1d01cf,0xbab6bfa3,0xbab01ae4,0xbaa3ee4f,0xba936d5e,0xba947c0f,0xba9220b6,0xba978be6,0xba652df6,0xba3882ef,0xba0ae102,0xb9e3b34b,0xb9974972,0xb88014de,0x3919a4bf,0x399d40f1,0x39b2f069,0x3971951c,0xb99aeff1,0x390c4170,0xbac4c2f8,0xbb0fbf3e,0xbb07e1c6,0xba816045,0xbb04843f, -0xbb0b35d1,0xbb210b16,0xbb2a2483,0xbb26c9bc,0xbb400322,0xbb4f99c1,0xbb5a160f,0xbb47c2a1,0xbb0445dd,0xbb497b19,0xbb40790b,0xbb0dd41e,0xba5b09be,0xba94a8c0,0xba8d4d99,0xba8ea61a,0xba8d46a5,0xba8a8faa,0xba8d2dfa,0xba803eff,0xba6c8eb8,0xba557eea,0xba2fcbdc,0xba112ad7,0xb9f616ce, -0xb9fce780,0xb9f7ec0a,0xb9dad32a,0xb9a6652b,0xba97b43b,0x3a2a770d,0x3a378907,0x3963f224,0x3b22ece2,0x3b330dcd,0x3a779d23,0x3af64508,0x3b1ea24b,0x3a8fb113,0x3a8fdc75,0x3a75f1a3,0x39ff0f67,0x3a61ec70,0x3a720051,0x3a214cad,0x3b244569,0x3b0953f2,0x3a6ec06f,0x3b262aee,0x3b1cd940, -0x38f822e6,0x3a1e1337,0x3a3d56a2,0x3a728df7,0x3a848b38,0x3a853c59,0x3a570f41,0x3a6639a4,0x3a6347b9,0x3a849847,0x3a374cae,0x3a2add4f,0x3a169edd,0x3a88a4fe,0x3a951c1d,0x3a90aed5,0x3a5b1ca4,0x39f0d2ca,0x3a814887,0x3b09a878,0x3a12d075,0x3a66affe,0x3a356906,0x390ab008,0xba02b349, -0xba24fadd,0xb8a6104a,0x3a02cdf9,0x3a057c6c,0x39758ea6,0x3940406a,0x3a96d7a5,0x3aa96aee,0x3add85b9,0x3ab24c83,0x3b0dbbf3,0x3aaab505,0x3a89edf3,0x3af4adc1,0x3b15e03c,0x3b288203,0x3b169210,0x3ab59c6d,0x3ab1ad30,0x3aaa8fed,0x3af0b73e,0x3a930e08,0x3a8e1394,0x3a8573f0,0x3b18b13f, -0x3b29211a,0x3b0768a8,0x3aaefb6b,0x3a30b81d,0x3aaf3341,0x3b06901a,0x3a81f50f,0x3a164d33,0x39c6f805,0xb931f1cc,0xbaf9df48,0xbb012701,0xbb5f6c88,0xbb10f007,0xbb2c13af,0xba5e4b1a,0xbaeca323,0x3a87305d,0x3a5105b2,0x39f53363,0x3a921bca,0x3ad39bc2,0x3a70703b,0x3a3284b9,0x3af1fdb7, -0x3b41333c,0x3b6b1585,0x3b6231f9,0x3b16a5f5,0x3b282676,0x3b20608f,0x3b581b21,0x3ab0b51e,0x3aa2e730,0x3a9b2a4e,0x3b803cc7,0x3b882aed,0x3b4d2398,0x3b117687,0xba09ed15,0x3a376549,0x3a24b87d,0xba2ea8e4,0xba9f45f4,0xbac1f8d2,0xbb512ccd,0xbb91c6c1,0xbbadc8fa,0xbbaedd39,0xbb4b9a42, -0xbb2ee22b,0xbb015200,0xbb08bf3a,0x3a68c76c,0x3aa9af7c,0x3aecc500,0x3af59e30,0x3b3b3f43,0x3b1035a0,0x3b2e6457,0x3ba22783,0x3be38b02,0x3bfe5b4f,0x3bdd7945,0x3b743404,0x3b5076db,0x3b42e453,0x3b9b5cae,0x3b1ca08d,0x3b0e0778,0x3b27572f,0x3bd9593c,0x3be99b57,0x3b9f2494,0x3b21e296, -0x3bbd461d,0x3bab5020,0x3bc90c0d,0x3b9606bd,0x3b34e549,0x3b9aebd5,0x3bbe455e,0x3bccdc8e,0x3b4d1ddd,0x3a280f4b,0x3931b97b,0xba06928e,0xb9d7be43,0x3b0dab35,0xbab8c3ee,0xbb4f8dbe,0xbb90305d,0xbb97d2b8,0xbb77e229,0xbb8bfb3e,0xbbb43d7b,0xbbc01ba7,0xbc0af6e1,0xbbc07660,0xbb86e4a7, -0xbb4bb1f6,0x3b372ac9,0x3b69880d,0xb94c09e6,0x38b055ef,0xb9ca6073,0xba8acd25,0x3a723546,0x3aaa82b0,0xb98da796,0x3ba52f2d,0xbb920749,0xbaa10bd8,0x3b766756,0x3b7b7d1d,0x3b461498,0xbba65876,0xbc05d8d1,0xbb9ae287,0xbaf7dedc,0xb9274a3a,0xb9473c48,0x38c7d845,0xba703f78,0xbaf757a5, -0x388a6fb2,0x3acc38ea,0x3aef27b9,0x3ac81ce1,0x3b2d3ebf,0x3b95af8e,0x3b849d19,0x3bb3de4f,0x3bbec7d0,0x3bd34712,0x3b74504d,0xbab22bfe,0xbbaa08a8,0xbbdaf396,0xbb9daa21,0x3ad30759,0x3b8a7a6b,0x3b3cdc67,0xba5c79f2,0xbb8dee0c,0xbbc45290,0xbb90a576,0xbbae4f68,0xbbbf582e,0xbc1a9484, -0xbc0b479d,0xbaf3af85,0xba982006,0xba764e63,0xbabafb2c,0xb7a4f6c3,0x397171db,0xb825d91f,0x38a3d6e7,0x39962210,0xb9c51dbb,0xba903783,0xbb0342d4,0xbac911ee,0xba733f51,0x3889b91e,0xbac79275,0xbb101247,0xbb0ff293,0xbb797bd9,0xbb63c24c,0xbb2a68be,0xbae593b2,0x3acffe36,0x3b60788b, -0x3ba71e1a,0xbbcad52f,0xbbf1bef5,0x3af3cc3b,0x3bb532bd,0x3c141c56,0x3c44c18d,0xba3c3ff4,0x3b921c5d,0xba37b95d,0x3a9d7858,0x3b436790,0x3b699f4b,0x39b48b34,0xb8702117,0x3a98b5dc,0x39dc3ab8,0xb88fe074,0x38935c8f,0x38a5c4a3,0xb9a2382c,0xba2491b8,0x38e9fa6b,0x3aa80cbe,0x3b15aab6, -0x3afc869b,0x3b16a06b,0x3adc64d3,0x3b0f42a8,0x3b3f2038,0x3b4b661a,0x3b584d50,0x3b0ab091,0x3884c32b,0x3a01bbfb,0x38f4b754,0x3aa34dac,0x3a39d27e,0x3ab30cba,0x3a62c3bf,0x3be4e35c,0x3c1be76b,0x3c1b86aa,0x3bf3d5b4,0x3bca008d,0x3b9a249a,0x3b0570dd,0x38ae8fef,0x385385b1,0x39f57b55, -0x399f3b82,0xb98b35fc,0xb6b13532,0xb93bdcc2,0xb8e7b34b,0xb9ee6fae,0xb9ef0f96,0xb9281461,0x39b0892c,0x390c6a53,0xb9ff844a,0xbaa01ee9,0xbab91b72,0xbb05f196,0xbb0514c5,0xbad71b56,0xbaa74750,0x397a902b,0x3ad7dfea,0x3b459526,0x3b57f356,0x3b60e7ca,0x3b6dc604,0x3abcbd9d,0x39a9e24f, -0xb982bf3b,0x396bf9e0,0x3a7fc76f,0x3af42855,0x3bb1e93b,0xbb4b1fd9,0xbb155771,0xbb0062cf,0xba86af7d,0xba0a6f7a,0xb97e4ad6,0xb9b1f193,0xb93de236,0xb97bf6ef,0xb9af4a76,0xba032ca1,0x394a4eff,0x3a3f311d,0x3a98fda6,0x3a3d5fbc,0x3996d5c0,0xba1a69d7,0xbacc6947,0xbb084c5c,0xbaf9681f, -0xbaab5e5d,0xb97b24a0,0x3a34378b,0x3b255ed5,0x3b745d4e,0x3b8faaaa,0x3bacc302,0x3bb16e01,0x3bac2b5e,0x3b94b154,0x3b6d8811,0x3b2ad2d8,0x3a955519,0x395401b5,0xba8fbf5e,0xbb0a813e,0x3b56a42e,0x3b780460,0x3b91aec1,0x3b801166,0x3b8471a1,0x3b72d472,0x3b53d894,0x3b3dcc9f,0x3b4d6c20, -0x3b49fc61,0x3b6cb0df,0x3b32ba52,0x3b1505e6,0x3aed8a41,0x3a66d2c6,0x387f14a1,0xba5468e5,0xba0dadd6,0xb907a7c6,0xba04c0f0,0xba8bde7e,0xba933b4a,0xbac515d5,0xbaaadfc1,0xba9788cd,0xba8a4641,0x3824afc4,0x3a952dcf,0x3b1a1e61,0x3b31f7f1,0x3b4a80c6,0x3b60dfe0,0x3b55dd92,0x3b507cb9, -0x3b5016bd,0x3b61daf0,0x3a7ac43a,0x3aa5e59c,0x3a71e193,0x3a576b4c,0x3a6a4518,0x3a354a0e,0x3a202e88,0x3a14a2d6,0x38fd8dbf,0xb90421af,0xb977d702,0xba276e44,0xba8e847b,0xbaa05df8,0xba9d44dc,0xbaad5e68,0xba9d3b7b,0xbaceae60,0xbabb8cc0,0xbb070f07,0xbb028e5d,0xbae570b7,0xbad7bd2e, -0xbacd22d3,0xbac6a171,0xbac9e9aa,0xbabc434c,0xbaafca1c,0xba8e876f,0xba5b68ba,0xb9ee198f,0x382329a9,0x396998e6,0x3a08f729,0x3a43a610,0x3a6ff25e,0xb9b3d9fd,0xb98582b7,0x3a1a6e4c,0x3a37de0e,0xb98ea688,0x3a040c79,0x3a421bfd,0x38e26a00,0xb8d69687,0xb9819f81,0xba17ad28,0xba24c280, -0xba486468,0xba883977,0xb62eb297,0xb9e5e71d,0xba81c9dc,0xb9718542,0xba0d78ed,0xbae20b66,0xbac675dd,0xbacdc389,0xbad0203b,0xbad1df1d,0xbad28ece,0xbad5c540,0xbabf0361,0xbaab9ae7,0xba9bb268,0xba82ccb3,0xba5d7492,0xba2ee650,0xba258519,0xba1a0cc6,0xba0f2b87,0xb9e436c4,0xbab7db52, -0xba3100a5,0xb9ceed19,0xb9cbc32f,0xbadbb6ee,0xba90e163,0x3a9c09e4,0xbae94119,0xbab09328,0x391d440a,0x397a4ba7,0x39469e08,0x39b80485,0x3a02bf9b,0x3a2f7af7,0x3a4a18b9,0xbaa91a28,0xbae88d36,0x3abf21d7,0xba871545,0xbadccdac,0xba21ab2a,0xba171c45,0xba1fcf88,0xb9e300ce,0xb9c43ea9, -0xb9d6270c,0xba320077,0xba10c388,0xba0cfb56,0xb9aa51d5,0xba57b42a,0xba79e1d2,0xba86df66,0xba409629,0xba100ee9,0xb9092e24,0xb9e9e7c9,0xb9ac7d5d,0xba897156,0xba2e4465,0xbaad2313,0xbae09b3d,0xba88c1c9,0xbab77303,0xbb0e12b0,0xbae54bb6,0xbb007d61,0xbb14d5de,0xbae9bd4b,0xbab32eac, -0xbb00e444,0xba1f2be7,0xb9a20796,0xba792137,0xb9932be9,0x3936561f,0xba337af9,0xb9087d25,0xb940b20a,0x398b3aa7,0x3a09927d,0x39b9e094,0xba1d0429,0xb9f5b1f2,0xba090718,0x375690c9,0xba967971,0xbac98f73,0xbad8c6ef,0xba670ca6,0xb971ff95,0x3a1ef934,0xb983893d,0x39c3635c,0xb90fbc00, -0xbaafd573,0xba91f0ee,0xbaa31c5c,0xba527510,0xba939ca1,0xbb4d1e2f,0xbb468c2a,0xbb5ca7f9,0xbb86f3c1,0xbb30f808,0xbb0386f2,0xbb3aa623,0xba2d4138,0xba405979,0xba633f21,0xb9cdcbd3,0xba59b4c4,0xba50de37,0xba066174,0xb9e197a1,0x39a125c4,0x3a4a7b09,0x3a1b523e,0xba6eb36c,0xb91e8501, -0xb960c4fc,0x3a62522e,0xbb011dce,0xbb2ed9e2,0xbb27e318,0xba8887d4,0x395449d8,0x3af54b32,0x39f091f6,0xb979e89e,0xba54aebb,0xbb10e69e,0xbb1bf3d8,0xbb2671a7,0xbb047f70,0xbb40ebc0,0xbb963e73,0xbb9c2e1a,0xbba09fe5,0xbb22ac29,0xbb1d0a16,0xbb02d492,0xbb0c5311,0x39f5e99d,0x3a5b3895, -0x39bcf10d,0x3acc4b78,0x3aaf722b,0x3a945a75,0x3aab09a8,0x3ac0c752,0x3b2a95de,0x3b522fcc,0x3b15130e,0xba1ea5ac,0xb9ea45b4,0xb939025d,0x3af33177,0xbb0cb02c,0xbb678315,0xbb527a0d,0xba4d09c5,0x3acbf78d,0x3b707d7f,0x3a4ab4e2,0x3b9fee5f,0x3b1d0ffc,0x3b1b4bd8,0x3b2bd686,0x3b11b519, -0x3b81cf55,0x3ba5e997,0x3bb09ab5,0x3b41a910,0x3a447a45,0x39d51398,0xb9596eae,0xb943a39d,0x3ada337a,0xba9a22c0,0xbb373fb4,0xbbadcf63,0xbbbd1a35,0xbbdc97a6,0xbbf84c4d,0xbbf1a5d9,0xbbe1fb76,0xbbee6efc,0xbbb2d1c9,0xbb48a8dc,0xb9a2cd79,0x3b6f9a54,0x3b57a6a7,0xba936fb5,0xbadc0d7c, -0xbb50206c,0xbbad0187,0xbb503276,0xbb017033,0xbaf430b9,0x3b43f13d,0xbb19b95d,0xbb0f678f,0xb9f2d5d0,0x3ac74c16,0x3ae82182,0xbbadf6b7,0xbbf337b6,0xbb91b52d,0xbae9e87c,0xb98190a6,0xb9766aa7,0x38fda05f,0xba4650fe,0xbada65a4,0xb84f1a25,0x3a6f0029,0x3a467161,0x3a80c679,0x3aeb755c, -0x3b508e65,0x3b1ac014,0x3b04a317,0x3a9fa9b7,0x3b42e792,0x3a89ffa4,0xbb624934,0xbbd10a9d,0xbbe3c138,0xbb813399,0x3ada6075,0x3b41d49a,0x3a4d58dd,0xbb9578a1,0xbbf03784,0xbbb4d078,0xbb8bf38a,0xbbd2acac,0xbb99cc73,0xbbfe06fb,0xbbe0a063,0xbb75f8dc,0xba473aa9,0xba2aa588,0xbaeaa4e1, -0x3900d099,0x398da049,0xb61ec1c9,0x37c9b9f8,0x39adb500,0xb9139eda,0xbaa3ab60,0xbb14daf9,0xbb160d91,0xbae5778d,0xbb0d2e66,0xbb45113d,0xbaffde98,0xbb1d9aa0,0xbb70b561,0xbb97509d,0xbba88611,0xbbb8d0d3,0xbaa9610b,0x3ab7ba65,0x3b54cd55,0xbbe6ea61,0xbc25c45a,0xbbb5012a,0xbb85a506, -0xba18756d,0x3b8f0a66,0xbb7e63f7,0x3a96f9a7,0x39e10c69,0xba6f5fd2,0xb8f1c557,0x3afda546,0xba22b322,0xb9ed6b19,0x3a338cf5,0x39a9541e,0xb9031ff3,0x38261dad,0x38a2f5b2,0xb972d887,0xba33a3a6,0xb87b0229,0x3a5259c4,0x3aeaf3ef,0x3ae88d59,0x3ad28e60,0x3ad1c92a,0x3ae7a8ab,0x3a8ed44d, -0x3a139500,0x39caa821,0xb9bc8de3,0xbae78b30,0xbb101bd5,0xbb4172d8,0xbb01ca05,0xbb1e3715,0xba8c5d34,0x3a0ab487,0x3aa1970f,0x395aec1d,0xbb5cd441,0xba015194,0xbb15b329,0xba7afcd6,0x3a738091,0xba0bacc8,0xb9e86086,0xb9045012,0xb9059a22,0xba820715,0xb9a71adb,0xb8e7140d,0xb80dda9b, -0xb99b19a0,0xb9bf8f09,0xb99e5c5f,0x398977a2,0x3969d695,0x3803fee3,0xbac4d5c7,0xbb271f25,0xbb24cb72,0xbafbb023,0xbac61a33,0xba83556d,0xb9a7cf78,0xb777e843,0xb962acc8,0xba19d8b9,0xbab137f4,0xbb2281dd,0xbb553b20,0xbb92c405,0xbbbca5a6,0xbbe4751b,0xbbdb7a3c,0xbbac3a11,0xbb472f05, -0xbbad60be,0xbbbc8fa5,0xbb61ba6b,0xbb4543ec,0xbaf6a0e2,0xbacbf92e,0xba674444,0xba40ea93,0xba0b40ee,0xba1ff60c,0xba1b07a8,0xb998ae54,0x398636e0,0x3a73df1f,0x3a1004f2,0xb93bd4de,0xbaa5bda0,0xbaf05dbd,0xbb048229,0xbaeb701b,0xbab6e432,0xba5f4728,0xb890100f,0x3a678efa,0x3af75176, -0x3b31d919,0x3b829fca,0x3ba23e8d,0x3bb769ee,0x3b90ebbf,0x3b25f9a2,0xb9995fd8,0xba4a8525,0xbae96b27,0xbb4fb9a3,0xbb9277f1,0x3b033fc1,0x3b0faa25,0x3b0568d6,0x3af46da7,0x3b0d41d4,0x3b0a9e65,0x3afdffcd,0x3aec4b76,0x3b0d46fb,0x3b2ba2db,0x3b3862b3,0x3b312bf8,0x3b163d3e,0x3b076d45, -0x3a6c7827,0x38822f65,0xba714347,0xba705f9f,0xbaa189f4,0xbaa9124a,0xba8e0eab,0xbaa16e0e,0xbaa61e2b,0xba94f188,0xba80d7fd,0xba6f8d76,0xb9c70eeb,0x36ff83a6,0x3a163c52,0x3a44fe75,0x3a9d603c,0x3ac467cf,0x3ac7617d,0x3ac2d2d5,0x3ade4bd0,0x3aeecebf,0x3a73f5d8,0x3a822eda,0x3a954a89, -0x3a69d06a,0x3a17cf1f,0x3a12fe89,0x39fb352f,0x39bd1cc5,0xb785f05c,0xba472852,0xbab06d6a,0xbadec215,0xbaee08ee,0xbb10c061,0xbb06006c,0xbae429ba,0xbb052964,0xbaeb7a94,0xbaffce22,0xbad838d1,0xbab1f6b7,0xbab3687f,0xbaa3d12e,0xbaa2d038,0xba9f4e68,0xbaa00656,0xba85dd1f,0xba704cee, -0xba60492a,0xba64a000,0xba70cff0,0xba647bcc,0xba059f54,0xb8ddfe96,0x398d03f0,0x3a0e35dc,0xba2fa823,0xb9dfa51e,0xbaaa8095,0xba8d7d93,0x37e0a615,0xbaa11d95,0xba92dc66,0xb985bf4b,0xb9f9ebe6,0xba0ce5fa,0xba0ba978,0xba37553c,0xba591e26,0xba757d25,0xbb0c24af,0xbb1402ef,0xba874bfc, -0xbb0e69d3,0xbb1654f4,0xbabf7c4e,0xbad2bb10,0xbad4a800,0xbad3e8c5,0xbad4d838,0xbad37f5c,0xbad5d371,0xbad0a5b7,0xbacc1cca,0xbac4f4a7,0xbab781dc,0xbaaaa31f,0xbaa929a2,0xba958a86,0xba8a5e51,0xba78e208,0xba5c1077,0xbafc010a,0x3aee4642,0x3ad7ac74,0x3b098744,0x3afb75ff,0x3a0dcfc2, -0xbb08910b,0x3b0fde0a,0x3a300262,0xbafe3e5d,0xbaf6c3cb,0xbb03b834,0xbb1509c2,0xbb0ca05c,0xbb096db8,0xbb18eee8,0x3a19aab3,0x3b02c341,0xbb0f207a,0x3a0a8b7c,0x3ae85f63,0x3afa897a,0x3adadc56,0x3b006bd3,0x3b0bd045,0x3b11c8e0,0x3b10f9b6,0x3b00933a,0x3b05ce23,0x3b06c2d6,0x3b1787e3, -0x3afc1811,0x3af61d8d,0x3aef847e,0x3b131eea,0x3b138209,0x3aff7a7f,0x3af67ac7,0x3ac6dabb,0x3b151f23,0xb9b67c5d,0x3aa6fd63,0x390b16fc,0x39b40490,0x3a25cea0,0xba1073bf,0x39fd0756,0x3a55666b,0x398adc3f,0x3a906dec,0x3a49c7c7,0x39abdace,0x3a0a0ca9,0x3a6f2411,0x3abe28f8,0x3ac591f7, -0x394dcfee,0x3b26e7b4,0x3b2e84a5,0x3b5884a5,0x3b783c12,0x3b8471bc,0x3b744eb7,0x3b311814,0x3b2ecfd4,0x3b31f00f,0x3b68928b,0x3b2bd26d,0x3b22f978,0x3b1c5437,0x3b6616cb,0x3b677642,0x3b21bc5c,0x3b0757d2,0x3b0229bc,0x3b2c753c,0x3ac1a3c7,0x3a8b8252,0xb9cfab90,0x39e41a0e,0xb860d2c1, -0xbb1f66d2,0xbb04ad17,0xbb2e2fdd,0xbb4e33c6,0xbae83301,0xbab1ab0b,0xbadff3d2,0x394165e4,0x39f107ff,0x391a5e5d,0x3a59ff75,0x3a85d9de,0x3ae75f33,0x3b334624,0x3b650c66,0x3b99aeb1,0x3bad9521,0x3ba70af0,0x3b6dc6c0,0x3b820078,0x3b823f29,0x3bb1b705,0x3b4d076b,0x3b46edaf,0x3b475aae, -0x3bad5405,0x3ba6ce87,0x3b50aa7d,0x3b35cc16,0x3a03f6b7,0x3ab020c4,0xb92cd350,0xba1444a3,0xbb0fa435,0xba800099,0xbb19f572,0xbba07e5e,0xbb8a75d2,0xbb8ce4ac,0xbb25c0da,0xbb15f2ae,0xbae5fbd0,0xbb1c4a33,0x39ed3cc9,0x3a6fba36,0x3a050396,0x3b0e75f9,0x3b1498bd,0x3b63c734,0x3baca74f, -0x3be4ab94,0x3c141820,0x3c1fb050,0x3c0b0721,0x3ba683a5,0x3b947cde,0x3ba15766,0x3bf8ea16,0x3b96ef83,0x3b7d9ee2,0x3b862775,0x3bef7126,0x3be9b427,0x3b761270,0x3b015c51,0x3c246cc7,0x3be5467c,0x3bc1e45a,0x3ba3c486,0x3b43fb5a,0x3b9603b1,0x3bb563a1,0x3bad58bf,0x3b53326b,0x3a96df5e, -0x3a44a642,0x3965fbf0,0x3872c03b,0x3ac06f6f,0xb9c7db18,0xbae1ca82,0xbb9cfd48,0xbb937fa7,0xbbaf7af0,0xbba2e0ed,0xbb7eb5af,0xbb9e877f,0xbbcb1ee8,0xbb912d0a,0xbb108bc1,0x392164fc,0x3b9099ff,0x3b943f0d,0x3abf6fbc,0x3b0058fa,0x3b2b1773,0x3b5a976a,0x3b860ffc,0x3b8dcabc,0x3b50b673, -0x3c063a25,0xbb19a45f,0xba4b4cd3,0x3aa3634a,0x3b1d9bb7,0x3b7cc392,0xbb733222,0xbbd59136,0xbb7ea6dc,0xbad41fc1,0xb9bf2cdf,0xb9d09a36,0x370ab580,0xba0c1082,0xbac0cf22,0x3954ecfa,0x3ac18c45,0x3ad2500c,0x3a8f2f38,0x3ac6ea7f,0x3b8ecf59,0x3bc65982,0x3bf4b245,0x3c083a09,0x3be74afe, -0x3b4ea909,0xbb0d28f5,0xbbc87eb8,0xbbd3ca1e,0xbb23cb0c,0x3b4e6b95,0x3b8ef117,0x3b0a3399,0xbb089456,0xbba75956,0xbba5ac1f,0xbb5c6ae5,0xbbac9409,0xbb0d3344,0xbbcc2f1f,0xbbc398e9,0xbb9b6d69,0xb8b6d5bb,0x3972babe,0xbac8e75b,0x39ef9b21,0x399a368a,0x390fe619,0x3804e3fd,0x39a269ec, -0x38d6bc72,0xba607caf,0xbac6504f,0xbae39914,0xba4a6dfd,0xba0db20d,0xbad8dbaf,0xbacbdd8c,0xbb10084a,0xbb4ffaed,0xbaaab8dc,0x3a631955,0x3b0be758,0x3be77135,0x3bf925fc,0x3bae0607,0xbb5a7b16,0xbb1c721b,0x3bf8f1e8,0x3c22793c,0x3c46423b,0x3c7cd965,0xba01c0cd,0x3bff1476,0x3b39f2cd, -0xbb043866,0xbac51450,0x38281904,0xb9ccf63b,0xba06be08,0x39c541bc,0x3914d518,0xb985aa5c,0xb89a4b28,0x338ff216,0xb9151983,0xb9e0a919,0x3912f63b,0x3a868965,0x3b171380,0x3b137a69,0x3b091d40,0x3b1e2399,0x3b7324e4,0x3b8a4894,0x3b84ce12,0x3b78a4aa,0x3b24905b,0x39b0062b,0x399d9828, -0xb8e9e56e,0x3a915797,0x39c6230b,0x3b083b27,0x3b9163ca,0x3c2f26c4,0x3c4e0c46,0x3c319af7,0x3c17d9dd,0x3c094b9e,0x3b93f79d,0x3a8938cc,0x3a9693dc,0x3aa23b51,0x39c8b006,0x38916e7e,0xb9f35e59,0x37375e9e,0x3914110e,0x392001af,0xb83398e0,0xb94dc873,0xb7898f44,0x39ed16d6,0x3a07a73f, -0x3a1daf7f,0xb926e849,0xba8656b0,0xba87052a,0xba8bc0df,0xba8dc204,0xb9f54be8,0x39c53741,0x3acda524,0x3b4a788e,0x3b46dcb8,0x3b44ee35,0x3b57e74b,0x3ab110da,0x3a4041a8,0x3a777077,0x3af0fe66,0x3b584d84,0x3ba12e76,0x3c0126bd,0xbaa23674,0xbb0bcdbe,0xbb69b888,0xbb02a748,0xbad64793, -0xba5816fb,0xb9da2148,0xb9d812f4,0xb93c8005,0xb9c6f496,0xba00913a,0xb9a8c208,0x398b5ff0,0x3a7b130a,0x3a7eb214,0x3a22c195,0xb96f4ce4,0xbabeae03,0xbb01cb27,0xbb01877a,0xba843473,0x39419e73,0x3aa38b15,0x3b40fa07,0x3b83dfee,0x3b974f45,0x3bab5234,0x3ba7946e,0x3b94e7f2,0x3b7f565b, -0x3b52f79f,0x3b361667,0x3a87e96e,0x389761f4,0xba31c3ed,0xba9dade4,0x3b2f4412,0x3b319f23,0x3b3c43a2,0x3b35df29,0x3b22a816,0x3b1973e5,0x3af6d48f,0x3ad3757e,0x3afbc218,0x3b21de91,0x3b41381f,0x3b3e27b9,0x3b1b5299,0x3b1fe0b6,0x3a9e1502,0x3a0b3486,0xb9c13864,0xb95c2726,0xb8e237b0, -0xb88041f2,0xb93f86b4,0xba0665c9,0xba5f2c82,0xba44905d,0xba23e8b0,0xba1900f8,0x3a1ec6b7,0x3ae37fc7,0x3b40a214,0x3b61a821,0x3b7d115a,0x3b8e9731,0x3b7aeeaf,0x3b60ae05,0x3b43ce55,0x3b38921c,0x3b2091d0,0x3b3131c0,0x3a943750,0x3b057986,0x3ad728f0,0x3ab6b259,0x3ae077b1,0x3acf8778, -0x3ac30374,0x3a97fdb1,0x3a209081,0x3a0d3410,0x392f06c7,0xb886474a,0xba0b3529,0xba1f1230,0xb9c85390,0xba5ac62e,0xbac6676e,0xbab9b942,0xbac9f97d,0xbaac4750,0xba9e4c15,0xba99c23e,0xba96a01c,0xbaa30eb9,0xba4772f2,0xb9b87797,0x393ff34b,0x3a2f52c3,0x3aa66894,0x3b03bfd0,0x3b04d3ea, -0x3b0f85ad,0x3b17af6b,0x3b2087cb,0x3a2102f0,0x3a6e9ad5,0x3a48f136,0x38f18fc7,0xbaacae1d,0x3a8e63ac,0x394f56ae,0xba8e7098,0xbab3dffb,0xbaca94cb,0xbae434bf,0xbb005023,0xbb0e62c4,0xbb1dda44,0xba0b3133,0x38d5ec09,0xbb1dbf32,0xba67fc0b,0xb9ce6c5a,0xba3a6f2d,0xba42b5ee,0xba43ae37, -0xba517257,0xba54cfb1,0xba5437bf,0xba6556d5,0xba1b3f4a,0xb9c8bae4,0xb93c9d4a,0x38c128aa,0x39a5e7c3,0x3a1f5c9b,0x3a131ca8,0x3a1a69d9,0x3a1cd738,0x3a289de8,0xb9b07d52,0xbab4a077,0xba821a31,0xbada4194,0xba044e59,0x3a947c39,0x3b446470,0xbaa4307d,0x3a278ba9,0x3b0d1955,0x3b2333cd, -0x3b1d99f6,0x3b07c90d,0x3b27bd1b,0x3b31a5cc,0x3b2c67f0,0x3a2ab754,0xba90ee0d,0x3b58a7ef,0x3a8124af,0xba019f99,0xbae54ca9,0xba96bc6f,0xbaaaacd4,0xba9a2a44,0xba942380,0xba973fe4,0xbab25b1e,0xbaa48e27,0xbaa41736,0xba83967b,0xbacb9574,0xbadb6c22,0xbae6bf2c,0xbaaf346f,0xba93298d, -0xba45c3d2,0xba917b18,0xbaa14520,0xbad541ac,0x3abc76cc,0xbad8b7c3,0xba8f7ca9,0xb9aa9e6d,0xba99a9a7,0xbb03b1e6,0xbae5a62f,0xbad06ecd,0xbac67cb3,0xbab9b72f,0xbaa8c825,0xbae467bb,0xb996ab55,0xb99762e2,0xba0fca9e,0xb9b1b6a3,0x3af96819,0xba722497,0xba68f3c9,0xba4b3fd6,0xba316974, -0xba108a39,0xba571cc7,0xbad0b33f,0xbac503c0,0xbab8eb08,0xba295582,0xbb000fa0,0xbb16de79,0xbb1a6f21,0xbaa2e1f8,0xba185db9,0x3559bc89,0xba600a14,0xba548c3a,0xba0c0d05,0xb9905023,0xba4e8518,0xba626880,0xb959dbec,0xba12b029,0xbb6242d8,0xbb0d63ad,0xbb52388c,0xbb8075ab,0xbb495308, -0xbac4f97b,0xbb457992,0xb9d74567,0xba7dc285,0xba4d95c3,0xb9b08950,0x388295e3,0xba0bd5a2,0xbac04e13,0xba865972,0xba47c0d0,0xb9c224b4,0xba173ff8,0xbadce4f9,0xba972a56,0xba9e1d19,0x38a0a99d,0xbb424ac4,0xbb656539,0xbb606c35,0xba92a34b,0x38a8cd9f,0x3a93583e,0xb89ad4fb,0xbae8a0bb, -0xba921597,0xbab317f2,0xbb27a750,0xbb59c920,0xbacd1dd6,0xbb1c7c15,0xbba04e54,0xbb7b7474,0xbb739c59,0xbb10f8a8,0xbae4f109,0xbae7f11a,0xbb3384e4,0xb9ce883b,0xba03cd76,0x38923234,0x3a56131a,0x3b0cf940,0x3aced9c4,0x3a0ced31,0x3a90d504,0x3aa7ed05,0x3aca3aa8,0x399228be,0xbb0bb3dd, -0xbb0a229a,0xbaa4fe34,0x3aa37776,0xbb42a803,0xbb8b1ff7,0xbb7b17ae,0xb976861e,0x3af6ea1b,0x3b2fb788,0x394ce5c7,0x3b76fd4e,0x3b7ef811,0x3ba897ba,0x3b92b412,0x3b81c89a,0x3b9cb282,0x3b9a0a19,0x3b8cb1c1,0x3b3b818e,0x3a8f5852,0x3a617299,0x39c28789,0x3981be50,0x3a918bcc,0x3791feee, -0xbad52864,0xbba42441,0xbbcd2d13,0xbbcd648d,0xbbf59477,0xbc1a3e7a,0xbc0d3cad,0xbc173d63,0xbbc29e3a,0xbb4f7c3e,0x399c186c,0x3aa25d2c,0xb9ec6682,0xbb8b586f,0xbb937e1f,0xbb9d5e40,0xbb9fb691,0xbb6fff40,0xbb1af573,0xbabdfd02,0x3b3e17fb,0xbb827c47,0xbb4b3dfd,0xbab0bf57,0x392d80be, -0x3af48357,0xbb7dceb6,0xbbbf67ae,0xbb5feecd,0xbab62549,0xb9cd7d7b,0xb9e5f86e,0xb8a8647a,0xb9b57dfa,0xbab54a85,0xb9aa3d62,0x3a0a6911,0x3a527382,0x3a1333cd,0x3af78baf,0x3b358492,0x3b052c4a,0x3b159400,0x3a08ab4c,0x3a8e99d3,0xba7f84e6,0xbb84e94e,0xbbd836d0,0xbbcb3af5,0xbb10febf, -0x3b174400,0x3b400645,0x3ab6413b,0xbb8c07a8,0xbbe3b264,0xbb99fa16,0xbb8dc0f3,0xbbc2b0b2,0xbab42be1,0xbb8bbe6e,0xbba00629,0xbbabbb93,0x389e2eaa,0x3a2def11,0xbab95a7c,0x3a3f4cfc,0x395c8ab4,0x3973d5f8,0x37f89aa4,0x399269fb,0x39736280,0xba413869,0xbb00bb5c,0xbaf9e37f,0xbaffeaf7, -0xbafdefa4,0xbb584e98,0xbb4da435,0xbb383975,0xbb6ddb54,0xbba0c32f,0xbbb9f68b,0xbbc9d37d,0xbaaa88fd,0x38d9233c,0xba44e44b,0xbc1c8f2e,0xbc35f7e1,0xbb94bc45,0xbb67ac3c,0xb93d7342,0x3baafe69,0xbb6f44b7,0x3b29ce9f,0x3bacc355,0xbb574287,0xbba4c711,0xbaf41a4b,0xbacb6b8c,0xba319528, -0xb93b251f,0x3804bc79,0xb99a17ce,0xb9061bda,0xb886a0b8,0xb8c60b96,0xb9da652d,0xb8cce876,0x3a295471,0x3ae07d6b,0x3ae36f65,0x3b1c55bd,0x3afd6fc4,0x3aa78de6,0x39deffaf,0xba3227de,0xba390f22,0xba5e78b9,0xbac363d0,0xbb0260aa,0xbb1c3629,0xba868c03,0xbab74a91,0x398b5e1d,0x3b17088a, -0x3b06d366,0xba41671e,0xbbda2b46,0xba4b017b,0xbb1d2693,0x3a4ddfd3,0x3b89e64b,0x3b0b1099,0x3ab25763,0x3a07d7ed,0xb92b5999,0xba3e7124,0x38dc71ab,0x394a2d20,0x399f366a,0x38c83855,0xb8a89118,0xb8c81d77,0x39c5a023,0x3a1b7df0,0x3a486567,0xb9aa4bb0,0xba49e011,0xbae35b9f,0xbaaacc31, -0xba37c92a,0xba083849,0xb8cf4571,0xb922ae10,0xb9f32fbc,0xba9aea56,0xbb0788f7,0xbb579b43,0xbb9159b9,0xbbb9508a,0xbbe6c1d1,0xbbf135f0,0xbbc646fa,0xbb9b8010,0xbb0dfd75,0xbb975b5a,0xbb9670a4,0xbb1318b5,0xbb2f7d02,0xbadf21e2,0xbac4de7d,0xba96c9c0,0xba5eec16,0xba41a64d,0xba3f10c1, -0xba5c1553,0xba2f0d78,0xb9998428,0x39ed4abd,0x3a07de80,0x39112908,0xba449960,0xbac35f87,0xbb00ddc6,0xbae449a8,0xbafb95b6,0xbad7e080,0xba4e3268,0x39f45efa,0x3acc75f9,0x3b170300,0x3b4b5843,0x3b6d24f2,0x3b7f717e,0x3b2f2b58,0x39e80eba,0xbb480132,0xbb6661e4,0xbb83b74e,0xbb8d0d93, -0xbb8b939a,0xb9a196c7,0x3a06da30,0x3aaaf5e2,0x3a68e9fc,0x3ac3e8ad,0x3aa24017,0x3a816442,0x3a20069f,0x3abee8d6,0x3aea6c9a,0x3b2cabd7,0x3b12d74f,0x3b2aaf4c,0x3b1d777e,0x3aba6304,0x39f61b1a,0xb951fdee,0xb9a7b5bc,0xb9f53f27,0xba9f3b72,0xbaadb863,0xba933d94,0xba9d5e55,0xba89abcc, -0xba72442a,0xba4c956c,0xb9cdbcd8,0xb89dcf93,0x39c8c443,0x39aa1e1c,0x3a1567ab,0x3a2adc60,0x3a1a9954,0x39a45e91,0xb874c11d,0xb7a7a57b,0x3ac7d43a,0x3adcbde9,0x3b38e3eb,0x3ac1beb2,0x3ad8a946,0x3acc7bc4,0x3a9e524f,0x3a9f49f4,0x3a2c9fda,0x39353f6a,0x38966778,0xba09f14a,0xba530da1, -0xba7ea6b9,0xba555cad,0xba5ab369,0xbab146ca,0xbabd19c6,0xba9d874c,0xbae0ce3f,0xbab197e0,0xbab49b3e,0xbaa7c2d1,0xbaa2c212,0xba9e5a0d,0xba9d86da,0xba8d46e7,0xba84d003,0xba774b0e,0xba6c7eed,0xba6701ff,0xba4cb351,0xb9df45c6,0x38890812,0x3a13eeb5,0x3a8c5981,0xba28220f,0xba244f5a, -0xb9a8cb60,0x39f541d7,0x3abeb89f,0xba1732bc,0x39a6648f,0x3aa3e763,0x3a970ab5,0x3a9373cc,0x3a827f98,0x3a896e63,0x3a85f7e5,0x3a760cbe,0xb9de8c76,0xbab7dba9,0x3a09b400,0xba3bd47b,0xbac3a9df,0xbadfd5e7,0xbad56e0a,0xbade343d,0xbadcc1b8,0xbadf03ef,0xbadeb48f,0xbae0ca84,0xbadaa887, -0xbad4d5bd,0xbace877e,0xbac2ab67,0xbab79701,0xbab5bc21,0xba9aab0e,0xba8a7c4e,0xba751c05,0xba5f161f,0xbafa2bbf,0x3ace9414,0x3abb7ffd,0x3b18c55a,0x391ffb06,0xbaca230f,0xbb3add7b,0x3a6735f9,0xbaa300e1,0xbb4f7da8,0xbb45a72f,0xbb4a3305,0xbb4c22c7,0xbb4c6d60,0xbb46f692,0xbb4a86f4, -0xbabbe8cd,0x39e8a8f8,0xbb3a2e55,0xbab83029,0x37d750dc,0x3b08723f,0x3ac0c2c2,0x3ae4d575,0x3af9c82f,0x3b004a08,0x3afbfc29,0x3ad9c0ca,0x3ae3a797,0x3ae7713c,0x3b0aad66,0x3ad413e4,0x3aca4c6a,0x3ac53627,0x3af0df9b,0x3af26087,0x3ad29c93,0x3ad39c65,0x3abc8bdc,0x3aef9815,0xbb0ac88f, -0x3a3bb830,0xba851b6d,0xb9c475b0,0x398f4f92,0xba90745c,0x3a073e2b,0x39ff5238,0xba542275,0x39f0b6ec,0x39ae0a57,0xb9c2dd58,0xb9e70a73,0x37a00309,0x39c314b8,0x3a503b7b,0xba9b88c8,0x3b0908c0,0x3b297d67,0x3b39fd9c,0x3b5aa136,0x3b62c169,0x3b4e258d,0x3b0e0f01,0x3b096b3a,0x3b11b3b2, -0x3b569946,0x3b0825be,0x3aea05fe,0x3add7007,0x3b25da7a,0x3b29e8a3,0x3aec5003,0x3acaa7b1,0x3b0cf9f4,0x3b1db436,0xb7d8f0a5,0x3973db67,0xbaaece91,0x389e1952,0xb9a3a2ab,0xbb49a62c,0xbb12bd88,0xbb0e3a8e,0xbb89c199,0xbabd5942,0xbaf85fec,0xbafe7910,0xba7804c1,0xb9e8f4af,0xb9ad1bf4, -0x37b2ffd6,0xb912ff18,0x3ab67d18,0x3b385fab,0x3b4876fd,0x3b87183d,0x3b933ba4,0x3b8ae3ab,0x3b2f4417,0x3b473ae6,0x3b4b6ea5,0x3ba4737e,0x3b1254d9,0x3b002d00,0x3b0791d8,0x3b707965,0x3b71c585,0x3b1d4bac,0x3b0ba4e8,0x3a5ee093,0x3a7649d9,0xbac20c3d,0xbaa04376,0xbb44cd7e,0xba5e4aee, -0xbad67a14,0xbb968e18,0xbb3cb086,0xbb41e305,0xbad7d8d6,0xbac4a7c1,0xbaab6ac4,0xbb1386dc,0xb9724d3e,0x38becd04,0xba179144,0x3ae54850,0x3aa17be5,0x3b5f8bbf,0x3baf9a84,0x3bc75fc8,0x3bfce80d,0x3c03324e,0x3bd73cd8,0x3b57bb01,0x3b36bff4,0x3b795e9f,0x3bebe114,0x3b5ab536,0x3b026f66, -0x3b146734,0x3b94c914,0x3b98e883,0x3b18abfb,0x3a6976ca,0x3c2f4324,0x3bd5d475,0x3b8a8825,0x3b8b29b0,0x3b52500d,0x3b8876fb,0x3b93cc12,0x3b68e1cf,0x3b29c30c,0x3a8e91fd,0x3a536ba5,0x39f58e19,0x39e253ad,0x3a403df5,0x3a053c1e,0xb9a029dc,0xbb9cdb81,0xbb92696f,0xbbd39abf,0xbbc231c5, -0xbb817a07,0xbb9c1a71,0xbb915236,0xbb58538b,0xb9d8e86d,0x3b6ff06c,0x3bb37be2,0x3b9115fc,0x3aafe2e9,0x3adbe993,0x3b2211e5,0x3b66c25f,0x3b4fa6bb,0x3b80ee34,0x3b99ca66,0x3c0b8372,0xba344cd6,0xba458103,0xbab8c00b,0x3a1666fb,0x3b5838bb,0xbb3505b6,0xbb989a04,0xbb351d7b,0xba78a815, -0xb9f33d1c,0xb9cef483,0xb95dadd7,0xb96cd716,0xba7fc07f,0xb79b99f6,0x3a6c95c5,0x3a75ed13,0x39f1d66c,0x39fe2713,0x3b544e35,0x3bb8f6aa,0x3bd1ac76,0x3be3b1f5,0x3b9f4e0c,0x3a86f179,0xbb61205b,0xbbe32b6a,0xbbc4f75c,0xba0f91cb,0x3b6d3906,0x3b67b8e6,0x3a9a965f,0xbb7e60ea,0xbbcf2e3f, -0xbb9138cd,0xbb3da8b6,0xbb8ca372,0x3a60dd56,0xbb7f0cea,0xbb84ca90,0xbbc9c5fd,0x3a0c3823,0x3a438dce,0xba6095d9,0x3a4b373d,0x390a1dc0,0x39881119,0x38c45978,0x393964ec,0x39b18468,0xba08ce83,0xba8bffb8,0xbaf2c29e,0xba485f49,0xbaa1fd20,0xbaec3550,0xba950a53,0xbb1101ae,0xbb264fb2, -0xba4ad512,0x3ab5c25e,0x3b2ebffa,0x3c084147,0x3c046374,0x3b5973fe,0xbb30791a,0xbaa5a34c,0x3beb7f8d,0x3c03450f,0x3c1bd608,0x3c5632cc,0xba18d81c,0x3bd41632,0x3be3d669,0xbb855512,0xbbc87d09,0xbb853e22,0xba8c8d43,0xb9e3ecc2,0xb940b21c,0xb85d0d5d,0xb9858c88,0xb8fdb21d,0xb9033658, -0xb8c6c62c,0xb965152c,0x37d21305,0x3a0c6f90,0x3afe53bd,0x3b1492cf,0x3aec7c79,0x3b304330,0x3b7bae01,0x3b6c392b,0x3b41df16,0x3b0e7803,0x3aa25c2e,0xb973b879,0xba611f24,0xbab245f3,0xb9dac951,0xba1b725c,0x3b08612e,0x3be5e7fd,0x3c0c74a5,0x3bf2d8f8,0x3b72aef5,0x3b92e03c,0x3bbba379, -0x3b2f509e,0x3aad771f,0x3b2cc56a,0x3b0b41ba,0x3983f46f,0xb9807f4e,0xba040379,0x38ada68f,0x39642541,0x39584392,0x394e175e,0x388acd58,0x368ecb8b,0x39f0fca4,0x3a4c5626,0x3ab82346,0x3a2439ec,0xba2d4978,0xb9a4ab7a,0xb9a63e52,0xba00128a,0x398d7c85,0x39d22a86,0x3a6a0282,0x3ad665ae, -0x3a8bb870,0x3a2440de,0x39e5f862,0xba51e4bb,0xbaa96b84,0xba7bbe4f,0xb9569c61,0x3adc9ea1,0x3b6f74c1,0x3bb3df0c,0xba1d8057,0xbb260b25,0xbb86600d,0xbb3fc269,0xbb224ab3,0xbacf226a,0xba477b09,0xba526784,0xb9a012fc,0xb9e87962,0xb9f2056e,0xba28ed8d,0xb97647ea,0x39eb246c,0x3a4f60c7, -0x3a07725f,0xb979606a,0xbaaefa07,0xbae1dfa2,0xbae799a0,0xba7ba136,0xb9116ed7,0x3a427ad4,0x3b0448f5,0x3b402d31,0x3b649c39,0x3b8285f4,0x3b814bb1,0x3b5f6648,0x3b3dbcfc,0x3b0e1d95,0x3ab0125b,0xb81c7b07,0xba7a7094,0xba9b9a50,0xbaa2e405,0x3a75bf51,0x3a3df0a8,0x3a13f4ac,0x3a72916a, -0x3a2bef30,0x3a43e93d,0x3a04b3be,0x39c50023,0x3a4a8941,0x3ad93958,0x3b0292c5,0x3b24e834,0x3b0f1674,0x3b29cb46,0x3ab63ba6,0x3a59e9cf,0x388e71e2,0xb7fc3052,0xb9d3cf9e,0xb9833725,0x392a15d2,0xb928afeb,0xb989651f,0xb92faadb,0xb59b6f5a,0x38d0edfe,0x3a7c0cbd,0x3ae121b2,0x3b24c1c3, -0x3b360227,0x3b44604d,0x3b5a62c2,0x3b2ceeb3,0x3b042a50,0x3aa91c75,0x3a7b517f,0x3b3c032f,0x3b43755a,0x3ab55c90,0x3b1f6a72,0x3aef0fc4,0x3ad8f871,0x3b08e7a4,0x3b01d932,0x3b06cb73,0x3ad7f92d,0x3a73bf4d,0x3a87dc5f,0x3a60219b,0x3a156dfe,0xb8b4f6cd,0xb88809c7,0xb7f67337,0xb9ad7e29, -0xbab89129,0xba4b6a99,0xba64ced1,0xba4d52ae,0xba3424a6,0xba376ead,0xba3777d2,0xba529592,0xb94bb250,0x3999c3aa,0x3a594d5e,0x3aaa74c8,0x3aef02e3,0x3b208def,0x3b1fbee1,0x3b26f44d,0x3b2c788f,0x3b35ecb1,0x3a6cc3ec,0x3aa48092,0x3980dda0,0xba12ea35,0xbaadb796,0x3a40cc17,0xba03e4c7, -0xbab6d839,0xbad758ef,0xbae7aa6b,0xbae952cb,0xbb062035,0xbb12fcce,0xbb19968f,0xba91a857,0xb8856f7b,0xbb24da1b,0xbac1e774,0xba3864fd,0xb74e41ca,0xb9809c14,0xb95aa834,0xb985c7b3,0xb988d7b3,0xb981c146,0xb9a6ca7a,0xb88d2771,0x38dd0959,0x3996e11b,0x3a08abd6,0x3a3b2751,0x3a7aeb4e, -0x3a6f6b10,0x3a786b4c,0x3a7fc2d5,0x3a7dd8f3,0x39098d0a,0xba3b2b79,0xb9f2b178,0xba96ba18,0x3a8d6ac6,0x3b161631,0x3b12a489,0x39a3e021,0x3af6e326,0x3af85f10,0x3b175c3a,0x3b0fa6ad,0x3aca9bf2,0x3b0a76cd,0x3b10c1c9,0x3b01eea1,0x3aea5e15,0x39c79de9,0x3b1fbef0,0x3b065906,0x3a88c86a, -0xba9a8ce0,0xba0ba544,0xba1d6af4,0xb9fb3f42,0xb9f35a41,0xb9fb3c39,0xba225e1f,0xba17d7eb,0xba187333,0xb98f7c1e,0xba542442,0xba69e880,0xba7c2131,0xb9f4ca4a,0xb9a45dfd,0xb986ffb4,0xba024ef0,0xba5ee4a2,0xba1bd57c,0x3b0786f7,0xba5748f1,0xb94dffd8,0x39cedcb7,0xb99bded4,0xbaa53297, -0xba56d40b,0xb9c79237,0xb9b991f1,0xb9809bbc,0xba00914a,0xba44632a,0x38c4406c,0x3687e426,0x39e37603,0x392d7dad,0x3b140f59,0x38db561b,0xb932e1ca,0x3974091d,0x3984588b,0x39563538,0xb92f8a07,0xba50c9b9,0xba646990,0xba2c48d0,0x39cd6e5a,0xba6a046f,0xba92dc52,0xba906504,0x3950878d, -0x3a187f94,0x39a5e3b8,0xb98e4b46,0xba1e01e0,0x39ab0ead,0x3a80e999,0x381bd18c,0xb9d87813,0x39e76595,0x3792b8e6,0xbb51e268,0xbab12943,0xbb2ae8b1,0xbb649b57,0xbb30f988,0xba92f6e3,0xbb1dd272,0xb9a6533a,0xba5c55b1,0xb9775b6c,0xb7ddf9bb,0x3a693e16,0x39eaf272,0xba1dcd6e,0x394ed8a3, -0x3a06f5e9,0x3a3e6f7b,0x39ffdd52,0xb9aba578,0xb9477f29,0xb969dba0,0x3abb546f,0xbac4025d,0xbae0d9f2,0xbad52745,0x3a8e6939,0x3ae05a34,0x3a95318e,0x3a0c8449,0xbafab186,0xb9dd3d1f,0xb9bfdf12,0xbafe62b4,0xbb5a1f1e,0xba69e82a,0xbad67d24,0xbb8f103c,0xbb28cf0b,0xbb187a2e,0xbac4f308, -0xba726514,0xba9bfd4f,0xbb2742f8,0xba742acf,0xbaaa4f4a,0xb881fd8a,0x39e693ed,0x3b1a98c2,0x3b1d017f,0x3acdbd71,0x3b385dc7,0x3b450714,0x3b394340,0x3aa271fc,0xba8296eb,0xbabe1c18,0xb92f969f,0x3b442c08,0xba6ab92f,0xbaf60af1,0xbaa9fe10,0x3b3834a2,0x3b73832e,0x3af29ae6,0x3979625b, -0x3ba74455,0x3bc17aac,0x3bdfae74,0x3bb66943,0x3ba22618,0x3ba28276,0x3b82e94d,0x3b35b2ec,0x3b141766,0x3a6c42a7,0x3a583829,0x39d9b900,0x3a08b3d2,0x3a1a053b,0x3a7c3004,0xb8dab89c,0xbb87588a,0xbbb10c9a,0xbba5dc64,0xbbc21be9,0xbc092a24,0xbc0384e2,0xbc0c072b,0xbba3fb7b,0xbaf97f78, -0x3b0b0268,0x3abb661a,0xba7b1e9a,0xbb8c8e5a,0xbb83352d,0xbb4a8875,0xbaa703bd,0xbac1c1cd,0xb94aefa7,0x3add3b96,0x3ba37b3d,0xbb8780f4,0xbb221bbf,0xba93bf58,0xb9a3f373,0x3b12006a,0xbb1c6dce,0xbb842e63,0xbb082422,0xba37dc01,0xba0159d9,0xb9be48a5,0xb9921839,0xb909d43c,0xba628b6f, -0xb9f087f8,0x39b7e5db,0x3a74f45d,0x39484985,0x3ab34b66,0x3b2181b8,0x3b37e27b,0x3b7efee6,0x3b26e408,0x3a92ba5d,0xbaceec05,0xbb854f35,0xbbd91d9f,0xbbaccc09,0xb972c839,0x3b3d5687,0x3b3fb983,0x3b055b9b,0xbb6093e6,0xbbc24ba9,0xbb87c8bf,0xbb7eff7e,0xbb764f14,0x3b05ff4e,0xbafa254a, -0xbb647d6c,0xbbad4106,0x3a0c7088,0x3a8c2245,0xb9c7b99c,0x3a44058b,0x38dfa1b5,0x39988ad4,0x38fa1474,0x39108dd7,0x39b2ff82,0xb92f7e84,0xba9cfe37,0xbaa9cb63,0xbaa7d406,0xba5963cf,0xbb1545c8,0xbb47059f,0xbb31b99e,0xbb469c04,0xbb61b96c,0xbb48ab91,0xbb1676f5,0x3b1ed1f8,0x3b0053bf, -0xbb138eee,0xbc0bd525,0xbbfaae39,0x3aadeccf,0x3b1c3fd5,0x3ba047ec,0x3c0f2a41,0xbaa075aa,0x3b6a436e,0x3c10b91a,0xbb8e9f5b,0xbc0adbbb,0xbbbb2a71,0xbae82234,0xb9ebcc99,0xb9ed53f7,0xb8be496c,0xb991c4ba,0xb927b2d2,0xb927b13f,0xb8d05501,0xb93d5535,0xb8e5936f,0x39d777f7,0x3ad1f6d7, -0x3af258b9,0x3b34b869,0x3b1ad178,0x3ada9db4,0x3a8c6a3d,0xb8e72514,0xb9c41be7,0xb9edb6db,0xba3f449a,0xba8ffda7,0xba980340,0x380b3404,0x39d91695,0x3b29eb50,0x3bba7175,0x3b899626,0x3a296a18,0xbb99d73a,0x39169568,0x3acc3e07,0x3b807465,0x3bcc2b4d,0x3ba08e25,0x3b494d6b,0x3a7d8d3a, -0xb937d803,0xb981d8ba,0x3999dd88,0x3982a8ea,0x39a360db,0x397fe813,0x39179d84,0x38b67868,0x39e73adb,0x3a627846,0x3ab54dca,0x3a8a9e3f,0x3a7a5f44,0xb9b0994b,0xb9bde206,0x383a3650,0x391dff6a,0x39e5a79f,0x39e212d1,0x3a0b1a4f,0xb9cb3ef5,0xba89ef72,0xbadd2fe2,0xbb56b5b9,0xbb8ba850, -0xbba1e705,0xbb7d20b2,0xbad0c029,0xb9cffdfa,0x3b054187,0xbb09bfdb,0xbb080ef5,0xbabe838e,0xbb0677b9,0xbacb9eda,0xbaa93d3d,0xba94865d,0xba5afc45,0xba2710b0,0xba10694a,0xba44ad17,0xba33abe4,0xba07e571,0x37a3f39c,0x39f121fd,0x39f81e41,0xb8c8c939,0xba8c2f90,0xbae1cbd0,0xbad0e634, -0xbaf47e3d,0xbad4aa62,0xba5c2874,0x3a2d5efd,0x3adf9a77,0x3b1336b7,0x3b257472,0x3b1f0179,0x3b08906d,0x3ab25558,0xb9487526,0xbb361f64,0xbb6ca50e,0xbb7fa160,0xbb5b92a2,0xbb1c3110,0xbacac942,0xba2c6936,0x3a1960c6,0x39afff82,0x3a6ceebd,0x3a1fc60b,0x39b06a4c,0xb8a91d26,0x3a5cda4d, -0x3a8e06da,0x3b0c1b78,0x3ae0e357,0x3b1b2411,0x3b1a1793,0x3adb6252,0x3a622f50,0x3a00fe6f,0x399e990a,0x3985ac98,0xba3ac307,0xba6bd3d0,0xba1369c1,0xba2a2a60,0xb9ea3d82,0xb9910b5b,0xb7f3d856,0x39d13aa5,0x3a58f244,0x3aab21aa,0x3a8d0344,0x3a81e0a7,0x3a689706,0x3a0419d9,0xb8927172, -0xba83873d,0xba88844e,0x3b0b7606,0x3b1991b1,0x3b520326,0x3affe7cb,0x3b149ddc,0x3b09564d,0x3aee874a,0x3af9943a,0x3ac2898e,0x3ab4385b,0x3acd38eb,0x3a9024e2,0x3a47e8de,0x3a4e5e17,0x3a21f3e4,0x39a23528,0xb8f65f8b,0xba18e0f2,0xb9fa42ba,0xbaa665c4,0xba894965,0xba8615e8,0xba7aebf5, -0xba6e264a,0xba67ca05,0xba6bdbdd,0xba3db7bb,0xba183d30,0xb9b850e6,0xb8d3074c,0x39453b24,0x3a079533,0x3a33c69d,0x3a880d0f,0x3ab5e5e2,0x3af27fa1,0x36b6fd58,0xb8a64ac5,0x3a5a2c4c,0x3abe59aa,0x3ac1cabb,0x3a14f7cc,0x3aab0769,0x3ac07c73,0x3abd89fd,0x3ab8e279,0x3a9cf11a,0x3aae8182, -0x3aafcc04,0x3aa8f29b,0x3a816c3c,0x389adc4f,0x3a49a822,0x3a03482c,0xb965fa33,0xba908210,0xba727476,0xba81a03f,0xba81af7c,0xba83f23b,0xba840a39,0xba87e71f,0xba7055a2,0xba577f5d,0xba438e00,0xba25ead1,0xba0e3700,0xb9e9355c,0xb9a7448e,0xb9647d8a,0xb907f72f,0xb8e29984,0xba6b3476, -0x39b39967,0x39da6161,0x3a88e455,0xbaa6d64b,0xbb011327,0xbaa40f90,0xba4ad1d9,0xbaf009b3,0xbb0440c8,0xbae49e3e,0xbae7ac04,0xbae413cf,0xbadcab6b,0xbacdb499,0xbac148d3,0xbb068727,0xba9c39e7,0xba892194,0xbaf07589,0xbab03c6a,0x3a5068b3,0x39c782b2,0x3a007523,0x3a284abd,0x3a23127c, -0x3a16d04f,0x39c39476,0x39dc3f00,0x39eb45b1,0x3a5e5e66,0x3988f475,0x39269b85,0x39075070,0x39dd1f58,0x3a05518e,0x3a0397a5,0x39f04015,0x39f43c43,0x39a2ef24,0xbb035b9a,0xb9f8f171,0xbadeca92,0xba4e4a5f,0xb9d74530,0xbad944bc,0xb94ac118,0xb9e5b509,0xbae9bc13,0xba37764f,0xba1af137, -0xba9f05ef,0xba90470c,0xba4b3976,0xba2776ac,0xb937d234,0xba8c76f8,0x3a1da616,0x3a9c28ce,0x3a93aa25,0x3ac57e2b,0x3ab7cbc6,0x3a8f8b66,0x39bf2808,0x398cb8a7,0x39f8587c,0x3ad56e61,0x39701bcc,0xb9233098,0xb92c5527,0x3a0d9116,0x3a5170d6,0x3a24520f,0x39b0f54e,0x3aa33bc7,0x3a9b5f5b, -0xba929702,0xba3759aa,0xbadf178e,0xb981e358,0xba0f4407,0xbb5cad25,0xbb0ad725,0xbaf9d33d,0xbb924f69,0xbad7f6c0,0xbb05c1bc,0xbb0d4007,0xbae376f4,0xbabdac28,0xba23a87d,0xba42c810,0xba6d5bb7,0x39c11891,0x3aa31d40,0x3aa16178,0x3b0064d4,0x3afe7aa2,0x3ad9bddf,0x39d98a94,0x3a3f5104, -0x3a4daccf,0x3b3c52f0,0xb98fadec,0xba3683b1,0xb9ded63b,0x3a6a74f0,0x3abfb675,0x3aafa328,0x3a796689,0x39a301f5,0xb7f77df6,0xbb10e5b0,0xbb06cd6c,0xbb609be6,0xba64d519,0xba902ad7,0xbb6e80a9,0xbada7f97,0xbad5678a,0xba316d54,0xba225759,0xba4e7b06,0xbaeec78e,0xba6a2bfc,0xba8572a6, -0xba8cb46a,0x3a45e541,0x3a095d47,0x3b1cda00,0x3b5cd771,0x3b5ee090,0x3b89c6d5,0x3b7805e4,0x3b126b28,0xb9a02e07,0xba2c0231,0x3a670689,0x3b951414,0x3909bb68,0xbac33a46,0xba6b0508,0x3a90c158,0x3afd4d5c,0x3a9d53db,0xb8cea8b1,0x3c09b9a3,0x3ba5b492,0x3b471c86,0x3b6632ff,0x3b6fa3ab, -0x3b774122,0x3b51b3bc,0x3aeab185,0x3add1619,0x3a1257f7,0x3a14189a,0x3995cfa5,0x3a0a9ff2,0x39732c8a,0x3a88d8db,0x3a46cddf,0xbb8635b6,0xbb9440e4,0xbbd310cb,0xbbd2e4c1,0xbbb47088,0xbbb7b8c9,0xbb82ec7a,0xbb2c89d1,0x3a666844,0x3bc8ca20,0x3bb24769,0x3b42f9d8,0xba36ec8c,0xba19ed49, -0xb8b78df6,0x3a5fe2e9,0xb90283d1,0x3ac29823,0x3b972646,0x3be41408,0xb9ad2f40,0xba8fef51,0xbb49cb90,0xba8754e7,0x3aff10cd,0xbb05a40c,0xbb43cd22,0xbab1a32d,0xb9d87a30,0xb9d0d55c,0xb969732d,0xb982ba8b,0xb8ec125a,0xba00cbc2,0xb9bb9432,0x3930be3a,0x39be11a6,0xb937abc7,0xb8c5b7c0, -0x3add5596,0x3b657270,0x3b717a1a,0x3b5b94c8,0x3ab6d486,0xbaccca80,0xbb989139,0xbbea7d52,0xbba4962e,0x3aa16fec,0x3b5e3996,0x3b1ce16c,0x3a408c90,0xbba9f7c9,0xbbe73831,0xbb76e214,0xbb38bce5,0xbb1b5ebd,0x3b60bf71,0xbad25f90,0xbb2700ff,0xbbb4b14f,0x3a1b4cb7,0x3a3c0611,0xb6981b47, -0x39ed4a8b,0x38d3b98d,0x394b860d,0x390bae8b,0x38abeb94,0x399700c3,0xb8eb6e0e,0xba26bb57,0xbad0a59f,0xba43d40b,0xbab5eaef,0xbadd9072,0xba950148,0xbb0d14d3,0xbb040670,0xbac9d677,0xb931bf74,0x3aa0cbc1,0x3bcbc223,0x3bb1670c,0xb96d2742,0xbb84ac09,0xbb436b14,0x3b5d90d7,0x3b58bfdc, -0x3b9bdc1d,0x3bfec585,0xba011125,0x3af83861,0x3c0f635d,0xbb9d2e14,0xbc1a8935,0xbbf0f74e,0xbad52b50,0xb9905802,0xb99deb88,0xb8648671,0xb950348c,0xb8f7cf64,0xb91e66ad,0xb8f533e2,0xb8d98911,0xb905fed0,0x386e95e3,0x3aa536be,0x3b045ba3,0x3ae838d4,0x3b2af1cf,0x3b3896f4,0x3ae893e9, -0x3a3288c9,0xb9b9215f,0xba496c16,0xba931f66,0xbafe27b8,0xbb1530fc,0xbaea3a54,0xba16deb3,0x3b211673,0x3c040eff,0x3b469c9c,0xbae8f4bf,0xbbd6ab4b,0xbb439d42,0x3ab32556,0x3af7e2e3,0x3b793a59,0x3b9dd76a,0x3b3aceea,0x39fc00fa,0xb9a21081,0xb99acc26,0x396dfbb9,0x3935ea41,0x3966cfd7, -0x39808310,0x395e702e,0x382527fe,0x39d68c68,0x3a6a65cc,0x3aea46c5,0x3aac83a6,0x392f153b,0x39a0fd89,0x39b4a8a2,0x396fa161,0x3a526201,0x3a0fd798,0x399743bb,0x37c863cb,0xba9465e7,0xbb0332fb,0xbb34557a,0xbb608979,0xbb86f3c8,0xbb887c4a,0xbb6b95ea,0xbad10141,0x39544784,0x3a86bf56, -0xba62171a,0xbb2c82ee,0xbb5200ca,0xbb4c464d,0xbb2d3f4e,0xbb04391a,0xba8c710b,0xba80ae32,0xb9d82e99,0xb9e4cec8,0xb9e76991,0xba359c49,0xba0d9a15,0xb8a2bfeb,0x39d1476d,0x398cb7f7,0xb98cd8b5,0xba8f2806,0xbab8804e,0xbab36e21,0xba8f2edc,0xba68327c,0xb9b45e48,0x3a01235d,0x3aa03e34, -0x3ae2cd7d,0x3b0cb2f6,0x3b19df9e,0x3b0ebb29,0x3aec1551,0x3a5d4008,0xba76be7e,0xbad4b733,0xbb16ef4d,0xbb05cce7,0xbadbaf5b,0xba8de3cd,0xba9e1d63,0xbaa2abd8,0xba338c36,0xba12994c,0xb9d39101,0xb9e59907,0xb9f7cb10,0x38577a74,0x3a65b422,0x3a9bc33a,0x3ae23580,0x3ae9ad10,0x3b0ff8ff, -0x3aba39fe,0x3a7c9a62,0x3a014b0a,0x39351647,0xba008edc,0xba1786eb,0x39010dc6,0x389229c2,0x39823ce2,0x39e1ac9a,0x3a349663,0x3a7712a1,0x3aa4ecff,0x3abef9f5,0x3adbb26f,0x3abc6d97,0x3aa732c6,0x3a9ea92c,0x3a218d11,0xb83728f3,0xba64b7f2,0xba91415a,0x3b215450,0x3b20ea6b,0x3af15eff, -0x3b0e4f7e,0x3ae0d7c5,0x3ad9a5d5,0x3afa948e,0x3af5a361,0x3aff9ea3,0x3ace739a,0x3a8fa300,0x3a9c7ea1,0x3a9fb62a,0x3a85c3c0,0x39ededa3,0x39fd5701,0x3941067d,0x385f4f80,0xba66219f,0xb958699a,0xb8ecc063,0xb943191e,0xb8f4021e,0xb91b2c8f,0xb929223a,0xb9647edc,0x397dcddf,0x3a1a0684, -0x3a70ad69,0x3a9e950b,0x3ac2e11e,0x3ae88404,0x3aedf765,0x3afe2ce7,0x3b063379,0x3b130588,0x3a4bbe9b,0x3a83a1c6,0xb916147e,0xba03e738,0xb9691351,0x3941f867,0xba0fcc51,0xba11e11f,0xba2de151,0xba336f37,0xba18886d,0xba412a81,0xba59229e,0xba495035,0xba6ae980,0xb9851154,0xba96c968, -0xba9e91e3,0xba4b91b1,0x39bad3d7,0x38acf913,0x39027296,0x38edad69,0x38ed7a28,0x390a709a,0x38b17acf,0x395f7ef8,0x3998d69d,0x39c6eaad,0x3a0157b4,0x3a1993c9,0x3a34f6bf,0x3a3afecf,0x3a4939b8,0x3a5a8737,0x3a51d34e,0x39799d4a,0x3a383b4b,0x3a3c7cd2,0x3a23ee5f,0x3af49a2f,0x3ada036a, -0xb92a88de,0x3ad8f2fb,0x3ad117c4,0xb8e12138,0x39696996,0x38ee2756,0xb9ec21b4,0xb8dd1298,0xb8b7a46e,0xb99a4919,0x3ab1e5c3,0x3abda86f,0xb8d69b80,0x3ac51e05,0x3ae51a36,0x3a07a46e,0x3a3c5cf9,0x3a5bf8e6,0x3a813653,0x3a794754,0x3a750699,0x3a5b7b98,0x3a58632e,0x3a5adc95,0x3a9eaed1, -0x3a3b77d4,0x3a303415,0x3a2a5733,0x3a90b746,0x3a97e91b,0x3a64a0b3,0x3a594a85,0x39ea85cb,0x3a98448f,0x3a828c7d,0x39f932b4,0x39935f69,0x3a358583,0x3a298b4f,0xb9f57510,0x39fc8340,0x3a676227,0x39a2f54f,0x3a4a7725,0x39ce7604,0x3997cf76,0x39160b5d,0x3954b7cd,0x3a9b22ec,0x3a444d37, -0x3a986a7f,0x3ac67f9b,0x3ab009ef,0x3af55d91,0x3b05fb97,0x3aecae01,0x3ab696e0,0x3a6698c8,0x3a358a13,0x3a82720f,0x3b133233,0x3a8b3180,0x3a73deb3,0x3a86fa1d,0x3b112c38,0x3b12d41b,0x3a977fa8,0x3a797f3d,0x3a4d9471,0x3aeb1f0b,0x3acbe9ba,0x3a463146,0xb9a278de,0x3a52e167,0x39b7cddb, -0xbb272d62,0xba78f761,0xbae4a290,0xbb423e7e,0xbae28c18,0xba98b49a,0xbabe0465,0xba2c2b92,0xba43ef01,0x39ae5e82,0x3949f259,0x3a891892,0x3ab6acf5,0x3aa5841b,0x3b0929c7,0x3b36c476,0x3b307b8f,0x3b1f7c58,0x3ae68a8a,0x3adb7441,0x3adfb6bb,0x3b73a645,0x3a8b3032,0x3a91f350,0x3ab10816, -0x3b760a85,0x3b747b6b,0x3ae4046d,0x3ae65e2f,0xba1da545,0x3a400bdc,0x38fa8e72,0xba8921d7,0xbb38ba0e,0xb98b594a,0xba5f4b76,0xbb5078e4,0xbab00f8e,0xba88a50d,0xba4136e8,0xb9eae86c,0xba063089,0xbaea7f82,0xba8fada9,0xbac6806c,0xb99b89b6,0x39cdd37c,0x3ae62c08,0x3b416512,0x3b5e54ee, -0x3ba0519a,0x3bb95b31,0x3ba175e9,0x3b4ffbb7,0x3a8e998d,0x39d1c7ed,0x3b037e61,0x3bb89a9f,0x3b1208b0,0x3abf7b1f,0x3b160151,0x3bbf4ec7,0x3bb162b1,0x3ab92ae4,0x3a38181a,0x3c042933,0x3beda7a0,0x3bda3a84,0x3bb564f7,0x3b9d39fd,0x3b8b75d2,0x3b3eaf44,0x3ab6b999,0x3ab07b88,0x39a63a91, -0x3a12fc7f,0x3951b693,0x39f36f00,0x39629a56,0x3aaea815,0x3a9aee84,0xbb3cc51e,0xbb7b761d,0xbb850be1,0xbb86946e,0xbbae8831,0xbbb81994,0xbbacc4f4,0xbb29ae7a,0x3a50b8e8,0x3bab7cb9,0x3b829e94,0x3aae3726,0xbaec4bf3,0xba86565c,0x3a22b652,0x3b5ab867,0x3af4c836,0x3b51c7ae,0x3bc8f0da, -0x3c05f80a,0xbb0ff498,0xba309705,0xba47354a,0xb98ecc35,0x3b1b05e3,0xbaa20fc2,0xbb192bf8,0xba3f6198,0xb9dbac4b,0xb9959ef5,0xb95d43bf,0xb95a5258,0xb8dee033,0xb9b3a69d,0xb9ef25e0,0x392851b9,0x3a7926bb,0xb8b3d67f,0x39b5ae2b,0x3b017bbe,0x3b7e267c,0x3bb31f68,0x3baf1fe3,0x3b1649ff, -0xba894ccf,0xbb738276,0xbbc9b197,0xbb7897df,0x3b17394e,0x3b760197,0x3b47deda,0x3b1b430f,0xbb3650fe,0xbb9e75bf,0xbb551037,0xbb2e0e33,0xb9ea8ff2,0x3ba988bf,0x37fe0b51,0xbb016eac,0xbb86aca8,0x3a0882f9,0x3a56fd8b,0x394a81dd,0x39983bcd,0x39037129,0x391e3fda,0x39053e10,0x389a6136, -0x395b289a,0x39250b4e,0xb9a81456,0xba3c9be1,0xb8d339a2,0x39d5fc74,0xba0b7d87,0xbad7395c,0xbb027a55,0xbaea5026,0xba772a8f,0x3a9c091d,0x3b79768a,0x3bfcd1b9,0x3bb56516,0xbab98e07,0xbb90c0b7,0xbaba1c37,0x3c076ead,0x3c18c65e,0x3c2d6458,0x3c41321f,0x3b01073b,0x3b2fdb0c,0x3c0f034e, -0xbb8bc5bd,0xbc1c7831,0xbc05389a,0xbacab301,0xb95ad8c1,0xb99ba6fb,0xb8aeb678,0xb9219edc,0xb8fbed05,0xb90d7494,0xb8d41c6e,0xb8eec0e1,0xb905113e,0x38edbfc8,0x3aa6b53a,0x3b06969a,0x3b2bfadf,0x3b38578f,0x3b2cf754,0x3b173cf7,0x3ab3a8c1,0x3a2e3e79,0x39773652,0xb6cfe731,0xb914ba11, -0x38e8827f,0x3a35b782,0x3b2d1e91,0x3bab3b17,0x3c13f0f2,0x3bb3f864,0x3ad9b3ca,0xbab73904,0x3992e832,0x3bcdde24,0x3be6cd52,0x3bebbc17,0x3bee2772,0x3b862e23,0x3aa2c614,0xb8bb4cb0,0x389b59c1,0x3951c0a3,0x39161c78,0x39634a4f,0x396db322,0x393012b6,0x3907e2a4,0x39e21811,0x3a7ed9dc, -0x3af30146,0x3b18adf1,0x3b0b0cc0,0x3ab1ed63,0x3a73756b,0x3a5e8827,0x3a85d4da,0x3a9dc12f,0x3ab6a6c6,0x3afdc13b,0x3a6de451,0x3a02484c,0x3a0b3c42,0xba92fd42,0xbae6f20a,0xbabadb90,0x3a256c4a,0x3b53247b,0x3b913b61,0x3bc4d368,0x3a6ed2d8,0x39d6c479,0xba9d7b9b,0xbab5b106,0xbac0c4e0, -0xba897b57,0xba5860f4,0xba2b0e1a,0xb9a355e6,0xb9a04bd2,0xb9fc4a42,0xba10ec9f,0xb9ec2b5c,0xb93d40a0,0x39db4c8c,0x3a39a485,0x3a112403,0xba131016,0xba9e52a7,0xba9b3ff5,0xba926b17,0xba546cce,0xb98aa92e,0x3a91650a,0x3af84f9e,0x3b10ebd1,0x3b0ea8d5,0x3ae80ec3,0x3a91791b,0x3a8bdf9c, -0x3a200277,0xb9d95ab1,0xbac582d1,0xbaef929e,0xba8236ae,0x38fca434,0xbab493fa,0xba8735ed,0xb8f3b7fd,0x3882a7bb,0x39930de9,0x391c062c,0xb88ea227,0xb9a4a571,0x39a6fcaf,0x3a2d5f1a,0x3ab6a5a0,0x3aae4115,0x3addb0d4,0x3b010e74,0x3ad321aa,0x3aa2490d,0x3a8bac3d,0x3a606702,0x3a427a32, -0x39062f68,0x396be79c,0x39e991ed,0x39eb9943,0x3a3fd886,0x3a85978a,0x3ab44c47,0x3af08298,0x3b16b051,0x3b3292a9,0x3b1b9445,0x3b010b42,0x3ae191cf,0x3a8b8912,0x39b0126b,0xba564900,0xba7e56ce,0x3b2c4feb,0x3b37f91f,0x3b24414f,0x3b18fac8,0x3b1cf8b7,0x3b1043f1,0x3b16735c,0x3b1a6242, -0x3b1a68c7,0x3b231125,0x3b2c279d,0x3b2a6091,0x3b1db033,0x3b247653,0x3af4eaeb,0x3ac072ad,0x3aab0e78,0x3a2f4b26,0x391a8267,0xb8c77bbb,0xb8b778d4,0xb7c62317,0x37790bdd,0x3832ee33,0x382e613f,0xb65c1063,0x39984f38,0x3a12942c,0x3a79a0e8,0x3ab51ad1,0x3af7a791,0x3b1be967,0x3b1649ce, -0x3b1ab2a7,0x3b1dc991,0x3b2b8448,0x3a986a0f,0x3a96acb5,0x3ade0bf9,0x3ad099b1,0x3a19adc5,0x3ae21761,0x3ac9538a,0x3a3423b8,0x3a3113d9,0x3a25b472,0x39fb8138,0x3a0af2e6,0x3a052b37,0x3a05deac,0x3aceafa1,0x3acbc112,0x38a2143a,0x3a8caed4,0x3a876bf4,0x39d94444,0x39f58abf,0x39f3ed7d, -0x39ec17af,0x39e8de48,0x39eba691,0x39d55a5e,0x3a1a270a,0x3a3b5a46,0x3a549fd3,0x3a75fb71,0x3a87178d,0x3a9ea818,0x3a9c685e,0x3aa1ca26,0x3aa57043,0x3a9f3a63,0x3a6792d4,0xba762568,0xba275ca6,0xba4492c3,0xbaa0e2ff,0xb9fef1c9,0x3aac5963,0xbabb31d5,0xba2b8cce,0x3a02102f,0x3a62c7aa, -0x3a5f3aa5,0x3a3c26c4,0x3a79e548,0x3a882fb0,0x3a96c2d7,0xba66002d,0xbad6e836,0x3ad934ae,0xba0491e6,0xbaa4c8cb,0xba730f8d,0xba45c4c1,0xba59ca6a,0xba349a46,0xba4d8ca6,0xba589d8b,0xba730ba1,0xba6ebba3,0xba69a405,0xba03b8b4,0xba90cf53,0xba9ea7e6,0xbaa1882d,0xba7014dd,0xba46a269, -0xba1d57ac,0xba3ec025,0xba3ae185,0xba8af35c,0xb9260bc3,0xbaafcbcb,0xbab6e493,0xba08a85e,0xba4a612b,0xbae0042e,0xba6d147e,0xba89ddd2,0xbafa966f,0xbac3f476,0xbaa79966,0xbabc22b4,0xba909a55,0xba85be5c,0xba50b917,0xba39bad9,0x39ad9f04,0xba429c89,0xb9dfdd3c,0xba0b0ca3,0xb9be6ddd, -0xba3ead95,0xba88c540,0xbab9ff7f,0xbac22333,0xba9c5f90,0xb890b907,0xbac48323,0xbaf3ff37,0xbae5cbbb,0xba813a1a,0xba1b4ce5,0xb9e03ab8,0xba46cb3b,0xb8e3b9fa,0x35990397,0xba6f10ed,0xba80fabc,0xbaaad8e7,0xb9316b91,0xb9d3c8ae,0xbb3e7e53,0xbabd6110,0xbad7b00b,0xbb5b4cfa,0xbaee3c83, -0xbada9f0c,0xbafb91cc,0xbae9e325,0xbb03aa55,0xb9f6ebe8,0xba76ad7f,0xba39bb72,0xb9f1d39b,0xba2dd2e8,0xba0c4963,0xb92b9073,0xba1bf898,0xba640197,0xbac6d737,0xbaa82646,0xbaa42ad6,0x3a31c5e7,0xbb204ebc,0xbb3a87e2,0xbb20a5b5,0xba7bbc15,0xb81fed0d,0x39d4d656,0xb7625ba2,0xba593f83, -0xba3e470d,0xbadc2d78,0xbb1ad97c,0xbb51d177,0xba31b809,0xba2d0d52,0xbb1c9333,0xba560f0c,0xba10ece8,0xb983c788,0xb93d5048,0xb9a09d86,0xbaa05897,0xba9e61e0,0xbaf48ba7,0xba608aee,0xb98220b9,0x3a0695e7,0x3aa0ce02,0x3a6fbad7,0x3a7362cf,0x3a741dc7,0xb997e4a1,0xbaf9c51e,0xbb5be130, -0xbb5e12da,0xbaca443f,0x3aef83d0,0xbb2291e1,0xbb808883,0xbb433634,0xba1fa6c9,0x3a097fae,0x39a3b983,0xba369439,0x3baa235c,0x3b7aff82,0x3b5d43ef,0x3b648177,0x3b849da3,0x3b5becd7,0x3af82d8f,0x3a427d38,0x3a49cea9,0x391b56bd,0x39ab48c0,0x3863532e,0x39d15683,0x37fc153a,0x3a9cee7e, -0x3aab1cec,0xbb2c24e8,0xbb8b03b9,0xbba9ded4,0xbbc0fe69,0xbbe6369e,0xbbd0889c,0xbb906112,0xbb0b7b8d,0x3ad658aa,0x3be18a99,0x3b885315,0x3a16c9ff,0xbb567edc,0xbb58d0ed,0xbb402be4,0xbaf11bf8,0xbb47137b,0xba49899f,0x3b85255f,0x3baca2ba,0xbaacc73d,0xba9c0b65,0xbb3bd775,0xbade43cd, -0x3a434197,0xbaaa35ab,0xbaca7668,0xb99e0097,0xb9911b44,0xb926d6a8,0xb9006f5e,0xb8f46612,0xb8e811e3,0xb937e62e,0xb9fac77e,0xb9bcd213,0x397be914,0xba0d14af,0xb9338186,0x39b15845,0x3a922173,0x3ab00aaa,0x3956f14e,0xbab8e415,0xbb6bcaed,0xbbb6bc0b,0xbbde5d22,0xbb706abe,0x3b2eb82e, -0x3b33dad5,0x3a9df9d8,0x39ef4bf3,0xbbbb64de,0xbbe90022,0xbb627d5d,0xbb4aab86,0xba0a736c,0x3baf26c4,0x3a97bf34,0xba882d31,0xbb608618,0x399668ae,0x3a1f4b33,0x39097784,0x39252f48,0x38cc61a6,0x38b2ea11,0x38c3a91d,0x388e8e10,0x390dcf5d,0x394251c3,0xb94f2ee2,0xba60fa74,0xb9eac5e8, -0xba2569b3,0xba8a0ecd,0xbac5db1a,0xbb0986f5,0xbaec1bee,0xbb303d60,0xbb012758,0xb7829430,0x3b4e3277,0x3ad0a9aa,0xbb852cb5,0xbbbc643d,0xbb99cee3,0x39a9c027,0x3929fc6d,0x3acb492c,0x3b3a8844,0xb9b0828d,0xbb845bd9,0x3bd338ce,0xbb8f13f4,0xbc2833d2,0xbc0a9e57,0xbaf82e6b,0xb9175845, -0xb938dfd3,0xb8908347,0xb8f4740b,0xb8b13759,0xb8eaca26,0xb8d77d28,0xb8a48e56,0xb9513efe,0xb9439750,0x3a1f1cb1,0x3ad7d790,0x3b0cf563,0x3b17a739,0x3aae7539,0xb84ea4dc,0xbabcb8d1,0xbb1f7175,0xbb2a1498,0xbb0bc1e0,0xbb300d69,0xbb2465fc,0xbb1a1938,0x3a4ab281,0x3b5f0a67,0x3be9bf07, -0xbb23c797,0xbc19439c,0xbc5ec92f,0xbc134f83,0xbac8db20,0x3b5796f2,0x3bfdf2f0,0x3befea55,0x3b5efb68,0x3a93af0e,0xb9015f97,0x384d5a1a,0x39531771,0x38f5024f,0x39323484,0x3947cb9f,0x395689cf,0x38bedd67,0x39afcc67,0x3a72b6d1,0x3af1a9c2,0x3b08766c,0x3adb725a,0x3a8bc7f4,0x3a6d9215, -0x3a6df1a5,0x3a80c9ad,0x3a38d96f,0xb76cdc8f,0xba7e310a,0xbb233c09,0xbb6a154c,0xbb968837,0xbba5636f,0xbbc06fff,0xbbcc052d,0xbbb4a01c,0xbb7435af,0xbb295c92,0xbb19f3de,0xbaa53142,0xbaf7c876,0xba9af2c7,0xbb0d8c48,0xbaf1751b,0xbad08740,0xba83ec78,0xba45bf76,0xb9a6f28f,0xb98e46d5, -0xb9b5ffd9,0xb9ef7862,0xba05688c,0xb9a69eb3,0x39049890,0x396e09f2,0x37bb42cc,0xba17582c,0xba6d299b,0xba721c27,0xbaaaf029,0xbacaeae8,0xbab5345b,0xba626bd1,0xb9c719a8,0xb7fed6c1,0x3998e7a5,0x3a2d17e0,0x3a659d75,0x3a2fc522,0xb9c75ddb,0xbb35b54d,0xbb35d841,0xbb482665,0xbb201c6f, -0xbae57ec1,0xbb2815cc,0xbb16b49c,0xbae794f2,0xbac3f7a7,0xba6cf52f,0xba610329,0xba41dbf1,0xba42e6b7,0xb8c475a5,0x39973174,0x3a559760,0x3a5f97a9,0x3ab63d65,0x3acc887b,0x3abba0c6,0x3a9056e8,0x3a888c37,0x3a20e1c0,0x38840d30,0xba101e8e,0xb80a536e,0x39a615b9,0x3a24bb75,0x3a779210, -0x3aa7f040,0x3add5351,0x3ac1b881,0x3a9c67c8,0x3a6ee502,0x395fa679,0xb9a361d4,0xba4ff51f,0xba9206c0,0xbad3fda8,0xbb1b30b1,0xbb1df223,0x3ad078e8,0x3acd3c23,0x3b254cf3,0x3ad7ea49,0x3ae5d10d,0x3ae55bd4,0x3ad6f5ca,0x3ae023de,0x3ad6de82,0x3ac9c2dd,0x3ad589e1,0x3acbbe01,0x3ad84fa6, -0x3adbd556,0x3ab6d96e,0x3aa40690,0x3a3bbe69,0x3a1cecfb,0x39ab02b1,0x39b58b39,0x3a194ec9,0x39ef360b,0x39fe1f9b,0x39f7edce,0x39ed864a,0x39f5e88b,0x3a1af330,0x3a32b17e,0x3a43c63e,0x3a57a7d6,0x3a5e8ad6,0x3a4f57e7,0x3a63cf56,0x3a8294e4,0x3a927d86,0x3ab1ecfd,0x3a19460d,0x3a03e5f4, -0x39abbab3,0x3a376991,0x3ad12f2c,0x39856c24,0x3a15bb91,0x3aa505b8,0x3aace7cf,0x3ab442c9,0x3abb2175,0x3ac47aef,0x3aca496c,0x3add113d,0x3a0e63c1,0x3986f1c2,0x3a9bf0b3,0x39a07b62,0x382445d3,0x39f9ca23,0x39d28f4e,0x39d811e3,0x39e5f5c7,0x39e92fd5,0x39f2e5de,0x39efdbdb,0x39ed893a, -0x39e48fa0,0x39d78bbe,0x39cd05ff,0x39c2c71a,0x39b25856,0x39e09321,0x3a016dab,0x3a16abf8,0x3a0cadd6,0x39b6f8cc,0x3a8bae8c,0x3a820c60,0x3ac2a43a,0x3a6e5f96,0xb98263d4,0xbb044b73,0x3aa38e8d,0xb7daa6c2,0xbb008cc9,0xbae581e6,0xbaea10fc,0xbb0478c6,0xbb0171e8,0xbb0400bd,0xbb0597b2, -0xb9bba9da,0x3a57eeed,0xbafffa40,0xb97ac2f4,0x3a4aae8c,0x3aa758fc,0x3a867ad4,0x3aa22273,0x3ab76ef5,0x3aa9c27c,0x3aa5f12c,0x3a9c8635,0x3a9934cc,0x3a9c1b70,0x3acfdfda,0x3a91afc6,0x3a8cd532,0x3a8eba78,0x3abbe97f,0x3abc44d8,0x3a870dee,0x3a95a5e7,0x3a688d3f,0x3acafd4d,0xba5e47f5, -0x3a2f8027,0xb995fc88,0x39145595,0x3a210c8d,0xb9f962c9,0x3a4fd7f1,0x3a5bf365,0xb993d827,0x39caa0fe,0x39547843,0x39a54471,0xba08fb4b,0xb998561e,0x3a50c348,0x3a053639,0xba059f84,0x3acf3cd7,0x3ae8ea21,0x3b0ad01f,0x3b1fdaec,0x3b0269d9,0x3ad1ed22,0x3aa241ed,0x3a8e2aca,0x3ab97a14, -0x3b2c2106,0x3ac3a3ed,0x3aaef624,0x3ac032fc,0x3b17fb44,0x3b0e7fdd,0x3a6f8678,0x3a8783c6,0x3ab96bfc,0x3b08e492,0x3a3af941,0x39deccc9,0xba5ab90c,0x39e86536,0x38caea36,0xbb05c119,0xba877eee,0xba922e5b,0xbb20f8ac,0xba8ec8c3,0xbac4e81f,0xba6da034,0xbab908a9,0xba9d1f7a,0x39aeb345, -0xb91299b4,0x396b2d76,0x3a983c15,0x3b03413d,0x3b228d03,0x3b5f0566,0x3b3c36ca,0x3b2a0b07,0x3b054434,0x3b035f2b,0x3b08b8a2,0x3b869363,0x3ad7a4c1,0x3add3845,0x3b07f2c4,0x3b730925,0x3b63a414,0x3aad18e0,0x3ae6a9e1,0x39891ae0,0x3a74b15a,0xb9cead75,0xba622fc9,0xbb1efc46,0xb8a8a322, -0xb9c597aa,0xbaf0bf6f,0xb9de0fe4,0xb9a27086,0xb906f378,0xb9460bd7,0xb90d3357,0xba56fa84,0xba8747aa,0xbac5c41b,0xba1a7f4f,0x397b21a4,0x3a1bf8b1,0x3b1d949c,0x3b7c7d0f,0x3b9fc889,0x3bc1eccb,0x3b93456b,0x3b33dbba,0x3a94f377,0x3a4976ba,0x3b25897d,0x3bc2f753,0x3b357e70,0x3af788d9, -0x3b381fd8,0x3ba853cd,0x3b89759a,0x38ec1671,0x392d3541,0x3c155e67,0x3bca8728,0x3b9262e6,0x3b860c5d,0x3b66d1ae,0x3b3aa77d,0x3ac709db,0x39fee66f,0x39dd4e7d,0x38b95be4,0x395e94c4,0x386d5244,0x39901ebe,0x3684e2db,0x3a90d1df,0x3adc7bf1,0xbad86b6a,0xbb25f4e1,0xbb79951f,0xbb5f6fa9, -0xbb50b537,0xbb757d83,0xbb135ddc,0xba17cf52,0x3b3d7ad9,0x3beda4eb,0x3bb41fc3,0x3b2945af,0xb999f1f9,0x39832bf5,0x3aedacda,0x3b904920,0x3b1b83f0,0x3b845583,0x3c04fc78,0x3c159ac1,0xba2c1168,0x3a0734b0,0xba9842c6,0xba262d48,0x3ac2c169,0xba2aa501,0xba77e2ca,0xb91bc646,0xb948b947, -0xb8a9005c,0xb8be7c78,0xb8a7b8f6,0xb8c12f2f,0xb8c0f450,0xb9ccb6fa,0xb946b987,0x3a1d13b6,0xb9f95f74,0xba5c1ed5,0x3a4065ba,0x3b5f32b9,0x3b9d4904,0x3bb18852,0x3aec0368,0xbaf57071,0xbba46039,0xbbdb69f7,0xbb5f71ef,0x3b5824b3,0x3b3a63a3,0x3aa299e3,0x39e30a03,0xbb93f950,0xbbbe5754, -0xbb71622d,0xbb266ee4,0x3a92cc9d,0x3bd02baa,0x3ad06a7b,0xba236f78,0xbb3ac625,0x3933a040,0x39dbc35f,0x38b3776e,0x38c44d16,0x3878df3c,0x3866148b,0x3898a9cc,0x383a56ab,0x38c98c2d,0x3910eb98,0x3950b833,0xb9eccb22,0x3a27d706,0x3a65598a,0x3a1e715e,0xba0a2aa0,0xbae16af9,0xbab143e2, -0xb6981bee,0x3b4c6752,0x3be53b48,0x3c174af4,0x3bc126ca,0xbb0dfa84,0xbae401b2,0x3b1574e1,0x3c24cf35,0x3c3566db,0x3c36e76b,0x3c1ece3a,0x3b211d84,0xbaf1bb3c,0x3b697e34,0xbb8f4686,0xbc117997,0xbc0ab503,0xbac05d06,0xb900b07c,0xb8ae1194,0xb8832de5,0xb8600292,0xb885dd61,0xb8aa1dec, -0xb897459e,0xb84386fc,0xb939caa5,0xb9308ab9,0x3a067796,0x3ade5b76,0x3b01a081,0x3b23bbc0,0x3b2b20b3,0x3b0f921b,0x3aac2a9f,0x3895b5d3,0xba6b5415,0xbaa5c682,0xbab10957,0xba534649,0xba5b9677,0x3b462eaa,0x3bb4743b,0x3c0aa16f,0x3b238f78,0xbab090ad,0xbafb33e9,0xbb40497c,0x3bd9f4ce, -0x3bf7369d,0x3beac29e,0x3c050772,0x3b7283c9,0x3aab4fb8,0xb869ceb8,0x38f910a6,0x38b4026d,0x38872d6a,0x38eba03a,0x3915f9db,0x390d6272,0x38672a2f,0x397e7a78,0x3a56505f,0x3aeaaca2,0x3b39877b,0x3b23be33,0x3b0f8e22,0x3ac65169,0x3a8189fd,0x3a9ab8a2,0x3a8e6d6e,0x3a92d2ce,0x3ab27fa4, -0x390c37cc,0xb9bce259,0xb95f21b9,0xbab4c1a0,0xbad8a81d,0xba24565c,0x3ac3b4d9,0x3b697d99,0x3b9c2310,0x3ba28fce,0x3ae497d2,0x3a4f510d,0xbac98a24,0xbaa5944f,0xbac4c195,0xba81bd75,0xba25325c,0xb9f419d4,0xb8d28f68,0xb905eac3,0xb9710ad1,0xb9a5c7b3,0xb99f1263,0xb97f250a,0x396a34ce, -0x3a00d875,0x3a19a18d,0xb9b2e427,0xba5a6339,0xba911498,0xba669827,0xba1f0242,0xb9c87bc3,0x39c63d66,0x3a30f04a,0x3a359e49,0x3a27e105,0x39ae407f,0xb96d7a8f,0x3923ddf2,0x39dde2f4,0x39ece6a9,0xb99e17b9,0xba1f3abe,0x39141a71,0x3a614b5e,0xbacdaf4b,0xbae7ad3a,0xbaadae9b,0xba6ec210, -0xba632bcb,0xba3e9911,0xba33e9eb,0xba21ed32,0xb970c5b6,0x38fd725c,0x3a0c9105,0x3a294a5a,0x3a67cfa0,0x3a9ad171,0x3a9e737a,0x3a997d34,0x3a9bf13a,0x3a6c9fa3,0x3a20a197,0x39b9630b,0x3a4420fc,0x3a605743,0x3a81afd2,0x3aaac042,0x3ad99c40,0x3b06689f,0x3b110164,0x3b1a7de8,0x3b1eb285, -0x3affa6ad,0x3ab0e7ff,0x3a805a8f,0x39b9ffe0,0xb980692a,0xba9686aa,0xbab3a79e,0x3af3051f,0x3af4c6a3,0x3ab67b90,0x3ae60688,0x3ae4aae6,0x3ad71fb2,0x3afd0ad6,0x3b028926,0x3b11ce75,0x3b1eca05,0x3b23e7eb,0x3b33c44a,0x3b37e695,0x3b3f7ca7,0x3b133f05,0x3af920c6,0x3af1703a,0x3ab49ae7, -0x3a32d0d0,0x3a4015ba,0x3a254f6e,0x3a307b88,0x3a32f676,0x3a2ec560,0x3a22a910,0x3a1607dc,0x3a59f529,0x3a8fee0c,0x3abe0e99,0x3aef8370,0x3b1412d3,0x3b2b2f54,0x3b1c7663,0x3b1171a7,0x3b050371,0x3b02c456,0x3abb0879,0x3ab7b229,0x3ab8dd7f,0x3a7cc432,0x39059d7c,0x3ad48667,0x3a81f8c2, -0x39382695,0x393e2f45,0x392cc4a7,0x39018145,0x38f0c784,0x388fb4d3,0x390b09dc,0x3aa0638a,0x3ae95d08,0xb8dcfd51,0x3a701698,0x3aad44aa,0x3aa4bbf5,0x3a9ee9c6,0x3aa36c71,0x3aa1bdfc,0x3aa316db,0x3aa575c4,0x3aa16e6a,0x3ab3f8fe,0x3abeb3b9,0x3ac5cad7,0x3acede20,0x3ad49a1c,0x3ae8139d, -0x3adadb8e,0x3ad97e6c,0x3ad79ab3,0x3acb7f52,0x3ad841bd,0xbaac18e8,0xba78731e,0xbabef5ba,0xb9c17693,0x3a595ecb,0x3aff5a46,0xba7adf16,0x3a0f422c,0x3ac43b2d,0x3af4c32f,0x3af2692c,0x3acc9b67,0x3aeef259,0x3af293db,0x3afc3120,0x39a1ea75,0xba899cb9,0x3b16c57a,0x3a351925,0xb9d70862, -0xbad38d11,0xba9017ce,0xbaa00548,0xba8ee36c,0xbaa46176,0xbaa81160,0xbaa72260,0xbaa7ca1f,0xbaa62f1b,0xba76b49f,0xbabe84e3,0xbac74f11,0xbac53466,0xba9776b9,0xba8322d3,0xba741c6e,0xba88767c,0xba91d3d3,0xbaa2fbc7,0x3a88957c,0xbaac3ebd,0xba4b3fde,0xb92628af,0xba31b002,0xbaa788ac, -0xba80ca09,0xba80d6fc,0xbab7ef2c,0xbac80c1c,0xbaba59f2,0xba807530,0xba6f61fc,0xba808c75,0xb9b55638,0xba3fd414,0x3a9281ac,0xba8a4c8e,0xba88ded1,0xba82d729,0xba816a94,0xbad3245a,0xbafebee6,0xbb013eef,0xbb0083d1,0xbad2874b,0xba251741,0xbaf15090,0xbb0602ad,0xbaeaba32,0xba7231e7, -0xba23d7f7,0xba4701ab,0xba7ccfd0,0xba2b8812,0xb9810a9b,0xb8d5eb37,0xba3d3b04,0xba60f46b,0xb7ce1392,0xb9540905,0xbb06acde,0xba58bee7,0xba9ff23d,0xbb02d4c0,0xbae1dae5,0xbaab8b64,0xbaade28a,0xbacfd0ea,0xbb08ddb1,0xb9286dca,0xba5858a4,0xb9549895,0xba32b69b,0xbab5c9bb,0xba84d1d6, -0xba448e5e,0xbad256d7,0xbaf219bf,0xbaf0e9ba,0xbadd556b,0xbad84d2f,0xb9045ebc,0xbb317326,0xbb399511,0xbb13eed6,0xba07169b,0x396362b3,0x37de0dfc,0xb8b82899,0xbaac7601,0xba3f1e26,0xba40a310,0xbb01222a,0xbb25d629,0xb9de3582,0xb9c2495b,0xbaa1a161,0xb962cbd8,0xb8c05008,0x392852a9, -0x391b36af,0xb8ae04b2,0xba0a83d4,0xba8fb759,0xbb08b340,0xb9f00872,0xba60bf73,0x3a13f07f,0x3a01cc32,0xb97ab574,0x394c11cb,0xb905a05f,0xbb0d9884,0xbb7778f6,0xbb8718d3,0xbb793d33,0xbafa356c,0x3a3ceed9,0xbb2ee636,0xbb643054,0xbb0e3ba8,0x3a0b167a,0x3a8f0f43,0xb9955e22,0xba309d83, -0x3b84729f,0x3b6f80f0,0x3b884b40,0x3b685917,0x3b6d12ae,0x3b207851,0x3a6671f3,0x395c82ec,0x3982c852,0x37e98c90,0x37f44ea5,0xb89f9ebe,0x39558b0d,0x368fadc7,0x3a737239,0x3aaf086f,0xba86939f,0xbb59e7d0,0xbb702d2e,0xbb942388,0xbbe3a8ab,0xbbc7a1d3,0xbb8d8164,0xba946249,0x3b20f909, -0x3bd63ccd,0x3b3cf1ae,0xba932332,0xbb90b9a4,0xbb8e1033,0xbb6aaf0c,0xbae20110,0xbb4366f9,0xba11296c,0x3b9a7e61,0x3baa1c3b,0xbacf6741,0xba2ec531,0xbb00eb53,0xbacc6b6e,0x38d54276,0xba2364dc,0xba06131c,0xb872b941,0xb9026436,0xb81adf1c,0xb6f4c9a3,0xb70f2767,0xb8818ad6,0xb8b58db4, -0xb9ae6387,0xba0f73b7,0x3965522f,0xba385418,0xb9f35c41,0xba1001ad,0x36c19824,0x3a46aa44,0xb9ba8fce,0xbb0a8bf8,0xbb8c6cb3,0xbbc4956a,0xbbccb4ad,0xbb29b385,0x3b6395bc,0x3b007c96,0x39797f6d,0x3980fc75,0xbbad6a77,0xbbc9ce92,0xbb4062f1,0xbb2edcb4,0x3b0320c0,0x3bd641f6,0x3b429b75, -0x38cf965b,0xbb045928,0x38af4ddd,0x39b60ee6,0x372e850a,0x38ab3588,0x37d4b303,0x37859eba,0x37aca93e,0x384a387e,0x384e58c2,0x396496b1,0x38d9eb2d,0xb978ea3d,0xb7986560,0x39d76413,0xb8388a7e,0xbaae6505,0xbad91940,0xbaacebf3,0xbb19f9b7,0xbaa2a244,0x3aed60c1,0x3b23ee92,0xb9c0c293, -0xbbd152c8,0xbbc2c573,0xbb790327,0x3a82f41b,0x3afada23,0x3b3e847e,0x3ae3c1b5,0x3a86f853,0xbbe041bb,0x3a5e5694,0xbb8af7a2,0xbc0a07b3,0xbbfe631b,0xbade940c,0xb7e61286,0xb8af5180,0xb8529771,0xb81bc68c,0xb7e3925c,0xb82d9703,0xb8821419,0xb8561d11,0xb91aa81a,0xb98918bc,0xb8829e5d, -0x3a8608b3,0x3b0646dd,0x3aedbdf6,0x3a02e0ea,0xba2dbb6d,0xbb00742a,0xbb359b14,0xbb4705bd,0xbb1cc6c3,0xbb1d11d5,0xbac8b07f,0xbacb8c26,0x3b564fdb,0x3b9e4d78,0x3ba2d0dd,0xbba35851,0xbc35360a,0xbc536981,0xbc1b651a,0xba1d58cf,0x3bd2eccf,0x3c27f98e,0x3c0d5558,0x3b5d887d,0x3ac5a01d, -0x38055dcc,0x390b229e,0x38acdb40,0x383ea274,0x38870cbd,0x38a184b1,0x38f75e99,0x38ca45fd,0x39046950,0x3a29b2c4,0x3ab8f7ae,0x3b1ff261,0x3b3264b5,0x3ae6d3fd,0x3ac40e71,0x3abb75db,0x3a9976ad,0x3a86cfbd,0x39c99452,0xba0e3558,0xbb096f35,0xbb4b44c1,0xbb80e138,0xbb9c9dc2,0xbbb70ba7, -0xbbbb5c44,0xbb9a2103,0xbb581f73,0xbb285b28,0xbb2a3ede,0xba39997b,0xb9bf5b05,0xb64d361e,0xba847446,0xba85b1e2,0xba807af7,0xba3f1e5f,0xb9b95862,0xb8f76f03,0xb86e2c31,0xb91a6d7c,0xb918e110,0xb98975d2,0xb9a146eb,0xb845a13f,0x392b450a,0x3986ed09,0xb984c1a9,0xba4ff003,0xba5f0f44, -0xbab64bf5,0xbae74f6a,0xbaded5ec,0xbaacf52c,0xba91ac74,0xba8ebe50,0xba6e0ef6,0xba3d8d27,0xba1fb4dd,0xba22d9bc,0xbab1ce02,0xbb5b1336,0xbb459fe2,0xbb3ab000,0xbb00562c,0xba853275,0xbb523de3,0xbb3cd8c9,0xbb01a88e,0xbb00ad50,0xbaa833f4,0xbaa59ef8,0xba8ca9d0,0xba82822c,0xb9c99f1f, -0xb9995ff0,0x399562df,0x376df9e0,0x3a29d24d,0x3a2bf94c,0x3a764dac,0x3a53b5f4,0x3a89f275,0x3a3b897b,0x39e0cb8b,0xb9a04225,0xb81e5e9e,0x39e6cc2d,0x3a3d4f4d,0x3a936ef8,0x3ac7fa24,0x3b03b985,0x3ac98f22,0x3a8af074,0x3a13e691,0xb9ad347f,0xba8cd1f7,0xbaeaa238,0xbafb00a2,0xbb14833d, -0xbb3dfd8d,0xbb3ebcc8,0x39ebd6cf,0x39ce50b8,0x3af57324,0x3a3ccafe,0x3a9ed075,0x3aa500a5,0x3a89bc63,0x3aa17b8b,0x3a923f17,0x3aa9f0b1,0x3ae6761f,0x3adaf24d,0x3aebcb11,0x3b050dd2,0x3afee9b1,0x3ad7e955,0x3a948248,0x3a72a7ca,0x3a84dd50,0x3a170d43,0x3a542b18,0x3a36eab9,0x3a3330a3, -0x3a2f8b0e,0x3a2147b7,0x3a2bad16,0x3a07a0ac,0x39e4fde1,0x39c10add,0x39b14dc1,0x398fcc06,0x38997162,0x38a4ea77,0x38f1e905,0x3934c6d4,0x39b08669,0x39c7d298,0x39068f6b,0x3a36b12f,0x3aadf878,0x3b04f318,0x39f893d8,0x3aa356fb,0x3afbc93b,0x3b087b54,0x3b0e2d2a,0x3b0da4b0,0x3b1a602e, -0x3b219315,0x3b2b2874,0x3ac7f7b8,0x3a545b4d,0x3b0cd078,0x3aafd72d,0x3a49d032,0x3a112b8b,0x3a256084,0x3a20cb68,0x3a2a670d,0x3a2bf584,0x3a2f52e3,0x3a32a3c2,0x3a21c229,0x3a113ba3,0x39f29521,0x39c31c2f,0x399962d5,0x39640bab,0x399b99af,0x39b18e1c,0x39c8d33e,0x39ae9225,0x3a10329a, -0x3a2a6dac,0x3a314110,0x3ab0e70e,0xb9dd2d39,0xbad1c3de,0xbb11fe8a,0x38c29baf,0xbaacbfbb,0xbb1bd120,0xbb138554,0xbb10c649,0xbb0e7705,0xbb1834b5,0xbb1b4609,0xbb0e8c7c,0xbadcb6ee,0xb9d5a69a,0xbb081bab,0xbac6207c,0xba16ec94,0x3a858e53,0x3a2173c9,0x3a4e8655,0x3a781cb6,0x3a4899d3, -0x3a3f7d7d,0x3a3a7c69,0x3a3c0367,0x3a44c594,0x3a8dd28f,0x3a2cda5a,0x3a24bd57,0x3a387c96,0x3a70e8eb,0x3a741121,0x3a242d64,0x3a4c2e26,0x3a4ee3a4,0x3a86379d,0xbaed2265,0x3967a951,0xba7cb273,0xb9fd76e6,0x38e86d6c,0xba3ae6e7,0x39e71a5c,0x38c8876e,0xba954df9,0xba2c9330,0xba197149, -0xb9188ce2,0xbaa13197,0xba73bfb9,0x379276bc,0xb8e66876,0xbabd2456,0x3a3a237f,0x3a9cf3e6,0x3aa0cc1e,0x3accb4b1,0x3a69b26b,0x3a1a8cfb,0x3a044816,0x3a0eb1b2,0x3a686470,0x3aecce92,0x3a527010,0x3a298351,0x3a7023e6,0x3ab74141,0x3aa98d87,0x39ca23b7,0x3a25426e,0x3ac72397,0x3adaa93d, -0xb98fbc24,0xb9593fcc,0xbaa27a3b,0xb896101f,0xb9609862,0xbabd8b59,0xba82c1ba,0xba2440df,0xbaea2a46,0xba54a020,0xbad19868,0xba234d14,0xbafda70e,0xbae7758e,0x381888e1,0xba39313d,0xba411602,0x3957a260,0x3aba1954,0x3ac3bd2a,0x3b1aef4d,0x3ab0ad9e,0x3a92611f,0x3a722045,0x3a9982e3, -0x3aa91f4f,0x3b39b691,0x3a3fff56,0x3a4ba456,0x3ac78d9a,0x3b19b167,0x3b17f45d,0x3a647aff,0x3ab35a26,0x3a52cffe,0x3a331944,0xba78a74e,0xba80b696,0xbafd913a,0xb8cda0a4,0xb90635a8,0xba31fb2d,0x38c2dc74,0xb6d08e8f,0x39d9c7b3,0x39076894,0x3739eb6d,0xb8c7d142,0xba420236,0xbabae552, -0xba4c05ca,0xb95bde8f,0xba02f111,0x3a8f3715,0x3b2db9e0,0x3b3ef733,0x3b704445,0x3abdcfb0,0xb8af7096,0xba234f1e,0xb95129c9,0x3ad18ea2,0x3b84f912,0x3aa90630,0x3a12f05a,0x3afb898b,0x3b47c62a,0x3b193874,0xba0bb999,0xb9418c1a,0x3c0bc3d3,0x3b92a489,0x3b2f0627,0x3b2ad87f,0x3b156b46, -0x3ad11189,0x3a09daf6,0x383ce3e6,0x38ef3028,0xb850ceae,0xb8c7410e,0xb8a0b272,0x38cc7beb,0xb8429fbd,0x3a130665,0x3ac01ba3,0xba17fd52,0xbadf71a7,0xbb773b60,0xbb5f770f,0xbb26f47c,0xbb2c9c22,0x3868606a,0x3acea0b7,0x3ba4afa0,0x3c101ebc,0x3bcd2ec5,0x3b405560,0x396e8c92,0x3a124ca5, -0x3ad6688c,0x3b6c3cfb,0x3ad86b2a,0x3b742f84,0x3c0e723a,0x3c0f8a8e,0x3abedc36,0x3ad0282a,0xbabe1aeb,0xba49c70d,0x3a1ddbde,0xb96cc117,0xb98d865a,0xb7bc4f32,0xb84b44f3,0x3773c1e6,0x383be50d,0x37949269,0xb8123d0a,0xb759ff27,0xb98573a1,0xb9d35bc3,0x395069ac,0xba1a14c6,0xbabbecb6, -0xb9eccc92,0x3b078bb0,0x3b40b1a5,0x3b6b0225,0x3a2d0940,0xbb2906ff,0xbbb5c054,0xbbc1198b,0xbafe0156,0x3b982bed,0x3b32fcd5,0x39e11158,0xba16695f,0xbbb38ade,0xbbc2074a,0xbb369f11,0xbaa5e653,0x3b3fb84c,0x3bf21340,0x3b66c9d2,0x3a3a2956,0xbaf61e4b,0x393b4e10,0x39358073,0xb6511e1f, -0x37efebc3,0xb72f77af,0xb7b44fd4,0x36be4902,0x37413a50,0x383c83fe,0x388d63b1,0x39b932b1,0xb981e367,0x3a5a4eb6,0x3a6bcc68,0x3a9f2637,0x39f67216,0xba6d16ea,0xb9d48b3c,0x3a2918ca,0x3b77409a,0x3c03d36f,0x3c0698c0,0x3b921919,0xbb42986b,0xb8ee6ccb,0x3b6d5ed0,0x3c001404,0x3c0f1fce, -0x3c03b3c3,0x3b8f5666,0x3b123167,0xbbd61e88,0xbb594efb,0xbb82f83a,0xbbd13f24,0xbbdfb45a,0xba916124,0x37003369,0xb7bef0a1,0xb7287fec,0x37544290,0x36f756ec,0xb73bbd9b,0xb8294235,0xb711c291,0xb8b8f345,0xb97ae3c0,0xb94e9244,0x3a86d08f,0x3aa8a65f,0x3af8a90f,0x3afabf98,0x3aa469e0, -0x39dfcbc9,0xba4ef188,0xbaeeffe0,0xbb05c6e7,0xbb04d3da,0xba8f8cc6,0xbabc418c,0x3b81d93f,0x3bb37408,0x3bb8b472,0xbb214cdc,0xbbd362d4,0xbbc55c08,0xbbd65e89,0x3b69dd79,0x3be6c459,0x3bfd4052,0x3c014fd1,0x3b3e45c8,0x3ab29669,0xb880c356,0x3884161b,0xb784e8dd,0xb79a8a08,0xb71945ed, -0x38188516,0x388ae4d5,0x38276274,0x37e2a27c,0x39f92c4a,0x3ab615b1,0x3b2bfba3,0x3b1f1124,0x3b2d1f58,0x3b10cc8d,0x3acc8f8a,0x3ad2fd1c,0x3aa19f80,0x3a7dc97a,0x3a3298ef,0xba37da60,0xbabdcb61,0xbad9ba42,0xbb122cc0,0xbb1ded3e,0xbaaee950,0xb9b82724,0x3a0fcb69,0x3abd67ba,0x3a229e31, -0x3acc51d1,0x3a1fa411,0xba997801,0xba653022,0xba97ae78,0xba2f1d6a,0xb99b1b8a,0xb8eec3d7,0x38e924da,0x381ae699,0x38409338,0xb8c3dc34,0xb8e4a689,0xb92a4e14,0x384979b6,0x3976c0bb,0x39fa35de,0xb840c227,0xb9e63ceb,0xba37b8fc,0xb9f9fce2,0xb9f9bf71,0xba0a7207,0xb9fcc16d,0xba16c173, -0xba33d703,0xb9dec87d,0xb999e928,0xb9eebc69,0xb85a3f2a,0x396ebcf4,0x395a4b82,0x39119326,0x37817530,0x3a09059d,0x3a777d32,0xbadb784e,0xbb12be9e,0xbb1b4d90,0xbafcd215,0xbb021cfe,0xbad35bd8,0xbaac28a1,0xba83a523,0xba446bce,0xb9b47dfc,0xb934c7c1,0x3853e6b9,0x390399ef,0x39d0b876, -0x3a15b77f,0x3a4cd3bf,0x3a78b926,0x3a417048,0x39b28aa2,0x39fc5ef7,0x3a90a6f1,0x3a90734a,0x3ab16547,0x3ae0bca2,0x3b0bfb92,0x3b25d2ab,0x3b146874,0x3aff24f8,0x3acea257,0x3a862eca,0x39d7afa0,0xb7fcaef0,0xb9e568ee,0xba5f78a3,0xbabaef2d,0xbadd23b1,0x3a465bb9,0x3a1cabab,0x3906f28c, -0x3a69c320,0x3a51c1a0,0x3a5adc7c,0x3a9d3d3a,0x3aa5b1d4,0x3ad1daae,0x3adec978,0x3adec6c3,0x3b0833ae,0x3b1a2360,0x3b230d57,0x3b040862,0x3af92729,0x3af2a6fb,0x3ada08fe,0x3a5fbcad,0x3abc2d75,0x3ab1001a,0x3aad2153,0x3aaaf95b,0x3aa3d615,0x3a995fc4,0x3a98241e,0x3aa80030,0x3abcd15b, -0x3ad1dcb5,0x3ae49c4b,0x3af5b722,0x3af93b94,0x3ad752ce,0x3ab3e528,0x3a9190b7,0x3a7467ce,0x3ab3454d,0x3ab4dafd,0x3a498bff,0x3975ce5c,0xb8dd3255,0x3a93f200,0x39c01e9d,0xb89e3108,0xb81cd62a,0x377f3422,0x38de3bf4,0x389730eb,0x38282c04,0x391b4fd3,0x3a331aea,0x3ac31356,0xb86fa820, -0x3a1846d4,0x3a9bf5ee,0x3af64680,0x3add84b2,0x3ae62bbc,0x3ae66cb9,0x3ae89e2b,0x3aeb2e76,0x3ae8fd5f,0x3aed1681,0x3aebc5f4,0x3ae85c1f,0x3ae5ed3b,0x3ae32f8a,0x3ae90e38,0x3adc8665,0x3ad7ad28,0x3ad2a83d,0x3ac53e83,0x3b0342a8,0xba404515,0xb9f37ca4,0xba72f7a3,0x3a34bf86,0x3ab671fb, -0x3a8bc160,0x39070d95,0x3a9bbf8a,0x3a8f47f9,0x3ab2ddfb,0x3aadff1a,0x3a826cad,0x3a92ff6b,0x3a8e450f,0x3a97fdfc,0x3a6b6f1a,0x373f1cfe,0x3aa970ad,0x3a9c7ee2,0x3a18fe3c,0xba90ac5c,0xba1fb1fe,0xba2a12f2,0xba0a06bf,0xba40fd08,0xba424f9b,0xba28911e,0xba2514fe,0xba21e2ca,0xb9d4a11a, -0xba46f17e,0xba4ba05c,0xba3ac022,0xb9cfe3e8,0xb9a3e7c4,0xb9fd2ce7,0xb9fc8e09,0xba283451,0xb9c3eb03,0x3aaf12b7,0xba139ad8,0xb8b86f3f,0x394e24d2,0xb91febb1,0xb9f78e2f,0xb9d76485,0xb9a99366,0xba17e488,0xba834164,0xba89780e,0xb916a58b,0xba22f893,0xba35ad34,0x39bfae7c,0xb9ae9dbb, -0x3a8778c2,0xb9f66489,0xba1862a6,0xb9c26de6,0xb9cfb0c3,0xba9e253a,0xbac5466f,0xbaa24097,0xba8b2ced,0xba31374c,0xb769178b,0xba5dc83b,0xba65f75e,0xba07964c,0x3985a9f6,0x399366e2,0xb9ef2c26,0xb9ca1193,0xb99a1b32,0x39cadde9,0x3a5415dd,0xb8d636fb,0xb9cf1be2,0x392779a4,0x3790b2c6, -0xba8b11f8,0xb9b8f3ab,0xba3556c0,0xba747c5f,0xbaa17a7a,0xba89ab97,0xba1d9501,0xbab050d7,0xbae9417f,0x39687bd6,0xba094267,0x394dce1d,0xb9d135c8,0xba546bac,0xb9995b00,0x38c2e75d,0xba8f2145,0xbaa0d1f9,0xba29b7a4,0xb9d40eff,0xb9ac63d0,0x3a0ab802,0xba9875a9,0xba80a0b4,0xb980cd79, -0x3aaade3c,0x3ac20ba0,0x390e5033,0x3a089057,0xba886254,0xb880911c,0x3974ab34,0xba954470,0xbad53749,0xb9152736,0xb9326f6c,0xb9a98dbf,0x37dbf26d,0x39325a4b,0x3968bb62,0x39d73498,0x38cfed49,0xb88a3fbe,0xba1c1163,0xbae0255c,0xb9656477,0xba7a9191,0x39ae2aed,0x39456411,0x37901bc1, -0x3a52bec0,0x3a1e3ba0,0xbb0658ae,0xbb63b05f,0xbb396e32,0xbb0157c3,0xb981aec7,0x3a9efc30,0xba55384a,0xba731682,0x3a22c10e,0x3b3c0989,0x3b18ad27,0xba4675ee,0xb9bf58a2,0x3b918361,0x3b75a70d,0x3b9809c1,0x3b50625a,0x3b2671ab,0x3ab910ba,0x395b0b24,0x3895a314,0x3853719e,0xb8a4fedb, -0xb8b01330,0xb92ce053,0xb5be24a4,0xb614e9d9,0x39e4048d,0x3a86bf8f,0x39558406,0xbaf07166,0xbb145f34,0xbb3780f4,0xbba1a0d0,0xbb8b9ded,0xbb217c32,0x3a949e0a,0x3b9102fe,0x3be73f6d,0x3b65187a,0xb99a7295,0xbb2d7986,0xbb2b0602,0xbad2e1cc,0x3a3eff2a,0xba3c5e32,0x3abad363,0x3bcf1ea6, -0x3bcbe2fa,0xbabd65d0,0x3a225895,0xb954da87,0xba2be0c7,0x393b600a,0xb8fe7e5a,0xb96eab4b,0x368d029f,0xb80ae976,0x38152e6e,0x384f4810,0x387bc6c3,0x37a2c7f7,0xb820dacb,0xb937ee03,0xb9df6216,0x395e3285,0xb9e5fead,0xba1332bc,0xba4815e8,0x39a7c825,0x3ad00a82,0x3a902edc,0xba9e0e6f, -0xbb7a6f76,0xbbb9be71,0xbba37d6f,0xba812cd0,0x3b988b61,0x3b0b182a,0x36bccc98,0xb9ce36f5,0xbb9e8817,0xbbad0045,0xbb3ef6b9,0xbb0bacb2,0x3b374bd0,0x3be4dd4c,0x3b9b66af,0x3a4e3912,0xba9e20bc,0x397af472,0x391ba69c,0xb7b2c34d,0x37a3cac0,0xb7e818f5,0xb7e0476f,0xb80a1bc0,0xb65d5b07, -0x375500a0,0x38f99a5b,0x39189db0,0x3961c7ab,0x39ed0b21,0x3aba4e9d,0x3a8b2b14,0xba437193,0xba8ab701,0xba528b60,0xba57ae92,0x3aae099e,0x3bac1bca,0x3b72a0b8,0xb9aa3c51,0xbbd48d3d,0xbb6e745e,0x37b23fc0,0x3b8da9a4,0x3bcb86a3,0x3bc0fbe5,0x3abbd3d5,0x3ab85d58,0xbc03778e,0xbbe5bdbf, -0xbb8be70d,0xbbaca9e1,0xbbb66b6c,0xba6e44e8,0x389faf59,0xb8489a7d,0x37cadaaf,0x37b55798,0x37da4967,0x37c1782b,0xb58e0ebb,0xb790af6d,0xb879a9d1,0xb915f709,0xb9bbf917,0x39d8cdcb,0x3ad6fc0f,0x3a9f204b,0x38f2e0da,0xb9ed4651,0xbac08c68,0xbb0977fa,0xbb3589ac,0xbb27f391,0xbb0e53e6, -0xba24c925,0xb9cfdf4c,0x3baf952b,0x3bb924ca,0x3b0b4a91,0xbba0d455,0xbc087c51,0xbbff56d7,0xbbd9e704,0x3ae039e3,0x3c082503,0x3c26587b,0x3c00a9bd,0x3b36a9fc,0x3ab8d39c,0xb8db8a9b,0x384c0c0e,0xb84526e4,0xb8522b1e,0xb8071d51,0xb7f8d3d2,0xb6b040e3,0x3881b3a6,0xb7f0f6a1,0x39a8d4a8, -0x3a80faca,0x3b265168,0x3b62ad24,0x3b27f070,0x3b0aec43,0x3aeafad3,0x3aa0e54f,0x3a8705df,0x3a279a49,0x39748e35,0xba97423a,0xbaf904e9,0xbb101d2d,0xbb4932f1,0xbb59e084,0xbb340f36,0xbae255f1,0xba934327,0xba737e5a,0xba9ce123,0x3a47d507,0x3aab59ba,0x3a4d113b,0x3990ff11,0xb9473b0b, -0xb90f1d1b,0xb94d9dee,0x388066ee,0x38c321ab,0x39249998,0x382b827e,0x38c778c1,0xb75dfb9f,0xb8c73c6a,0xb8193c04,0x3981f3a4,0x3a28a684,0x398aec53,0xb9a4b5b0,0xba0adb0d,0xba7b7bc9,0xbaa559de,0xbab9a975,0xbaa639c5,0xbab36ec3,0xbacd4a10,0xbab5cfd7,0xbaab5850,0xbab06451,0xba9613b5, -0xbaa8665c,0xbb00f992,0xbad166f9,0xba941ccb,0xb954f8e2,0x3a2fe545,0xbb260a76,0xbb1ec110,0xbade5f46,0xbaf05ee1,0xbabe9be1,0xbab7eb98,0xba9870cf,0xba81f3e0,0xba0f976e,0xba111ffc,0xb9066548,0xb9cfc9dc,0x383646e0,0x3826a8ed,0x39ef7373,0x3a0d47d8,0x3a757da7,0x3a60f445,0x3a709ae6, -0x39d6ee0e,0x39beaff7,0x3a36defa,0x3a52ceb1,0x3a9a910c,0x3ac7f114,0x3af9f996,0x3aba6370,0x3a7e0fc0,0x39fe7397,0xb9243529,0xba467e9b,0xbaacebc3,0xbab451c1,0xbad0a3ac,0xbb07e9d1,0xbb101d9b,0xb88e40e6,0xb936e829,0x3a5c3fa8,0x396bd481,0x3a4bece3,0x3a5b34d1,0x3a3a8cb5,0x3a6d6964, -0x3a5e4c3f,0x3a9da51a,0x3ae339cc,0x3ae6b46c,0x3af804bc,0x3b1184e7,0x3b126aed,0x3b00a2cb,0x3ae744ae,0x3ac1723a,0x3acfed6f,0x3a9191da,0x3a9e05a6,0x3a9de8ca,0x3a9a88f6,0x3a9bdef4,0x3a95b92a,0x3a9e9701,0x3a8136c4,0x3a689da2,0x3a587361,0x3a4ef891,0x3a419892,0x3a177e12,0x39caec39, -0x39709825,0x38f3abea,0x38a3b480,0x3a4e1c0a,0x3a03c200,0x3ab2baaa,0x3ae59f3e,0x3adc5fdd,0x3aa0c83f,0x3aebb96c,0x3af93325,0x3b08cf86,0x3b0de2f0,0x3b0b0364,0x3b17a811,0x3b1dfde6,0x3b23a518,0x3b165a59,0x3ae65509,0x3b0d050a,0x3b0c993d,0x3ae698d7,0x3a961255,0x3aa8fe46,0x3aa7c793, -0x3aac0a03,0x3aad7ac5,0x3aaea6f7,0x3ab12c59,0x3aa9cfca,0x3aa21287,0x3a95bdca,0x3a89b3e4,0x3a7ea970,0x3a751075,0x3a73d917,0x3a703687,0x3a67272f,0x3a53f715,0x3ab9aaef,0xb9f3a484,0xb97e1336,0x38ab733c,0xbab51da5,0xbadaacb9,0xba585285,0xba9b5cd3,0xbaccfca6,0xba98b8ea,0xba8ab9f6, -0xba840b07,0xba6daedc,0xba8c9dfc,0xba8cd7d3,0xba3fc752,0xbaf918e4,0xbaccad1f,0xba109d9f,0xbad2fa7e,0xbac4236b,0xb98863bc,0xb9d44dac,0xb9c6e044,0xb98951c5,0xba01ffce,0xba06f526,0xb9e79130,0xb9c34bf5,0xb9b08404,0xb9254223,0xb9fd0e86,0xba064ecf,0xb9d3ea5e,0xb994c74c,0xb97a67d3, -0xb9c1d24a,0xb984fa9c,0xb8d8a5db,0xb9a6dd49,0xbab938b0,0xba433695,0xbab3bb95,0xba6a273d,0xba1ad5fd,0xba72ced4,0xb9cb6ff8,0xba5b585d,0xbade258b,0xbae871df,0xbacb43ca,0xba456657,0xbad08235,0xbaba295a,0xba3bc401,0xba5d6bba,0xba9f139c,0xba3ceb21,0xb9547916,0xb9df3652,0xb995f340, -0xba93e825,0xbaabde90,0xba84c396,0xba306c66,0xb9aba8e8,0x38dad8eb,0xba2a6bd1,0xba4b3740,0xb9d4cad5,0xb94d54fc,0xb951904d,0xba2593a6,0xb9c6776f,0x3a22d166,0x39f99325,0xba8367ad,0xba788e85,0xbaab638b,0xb9fb313a,0xb9ce0e4a,0xba57feb8,0xba25251d,0xb9987e68,0xba66293f,0xba1f8850, -0xbaa0a585,0xb9de82dd,0xbaf93c4f,0xbb08f81d,0xb993d12c,0xba97ef9c,0xbaad08a5,0xba835f78,0xb9489121,0xb9be8e29,0x39059cc5,0xbaa35f11,0xbaaec663,0xba62493e,0xb967b1bf,0xb885a6cc,0x3a0dd813,0xba7f17b3,0xba7c7027,0xb7989124,0x3990ec44,0x3a090038,0xb8d21bc1,0x39c448e6,0x3999cbb0, -0xb8fac78a,0xbaa5aea2,0xbaa9d29a,0xbac30d43,0xb95171e2,0xb7e8035c,0xb789fd7d,0x393c888f,0x38e06d56,0x398d15e8,0x39944a90,0x394add76,0x3936987d,0xb97fed76,0xba9eea7d,0xba3178e1,0xba4a12cf,0xba8d1820,0xb9ea164e,0x39c8a683,0x3804d473,0xb89a520a,0xbb408126,0xbb853a6e,0xbb4cb68e, -0xbad742ef,0x382be4ea,0x3a769641,0xba863707,0xbabacb9c,0x392ad2a0,0x3a04056d,0x3936f69d,0xbab2a401,0xba4cb243,0x3bb2fea9,0x3b036128,0x3ab000fb,0x3aafde1d,0x3a9b90ee,0x3a25c18a,0x347bc258,0x374910bd,0xb86982f7,0xb87a906b,0xb8ebbf49,0xb90172f8,0xb8916caf,0xb8638dcc,0x390d2204, -0x3a56a91d,0x398becef,0xba9a7c09,0xbb53fafc,0xbb653498,0xbb5b4761,0xbb2e8f09,0x3a1459f1,0x3b472901,0x3bcfe65f,0x3c13b2ab,0x3bbe6a92,0x3b12b2d0,0xb847d9ac,0xba065a54,0xb91ae375,0x3a9ef130,0xb963bd03,0x3b017618,0x3be588c4,0x3bcdb0e4,0x3ab1a98f,0x3aa5e1a6,0xbaccc436,0xba460902, -0x38109bcf,0xb8224086,0xb90c8308,0x386e3268,0x36412280,0x38473475,0x3857893b,0x38822f7d,0x3802f32f,0x37da627a,0xb8b5e35b,0xb9b69245,0xb8bc7780,0xb9dc1ee1,0xba99ed18,0xbaab1b0f,0x398e4787,0x3a1a8940,0x39df628a,0xbacd107c,0xbb862ae4,0xbbcbb5e6,0xbba27653,0xba386ac5,0x3ba445ff, -0x3b086a76,0xba305ad7,0xbafc03b7,0xbbc8f082,0xbbbebc00,0xbb1193cb,0xba8a82b7,0x3b7a5375,0x3be2a1c2,0x3b972ac4,0x3a9516b4,0xbac36015,0x3a022e43,0xb821a8dd,0x34d3acef,0xb800b029,0xb7e69888,0xb826a3d4,0xb8033969,0xb7d4de61,0x35bb41ca,0x377f370f,0x397ba6ca,0xb7facd93,0x3a03cc67, -0x3a129c8c,0x3a90e836,0x3a0ee258,0xb9ed5e0e,0xb8fffa6e,0x39ab9572,0x3b2e3c36,0x3bcd86ff,0x3b8856ab,0x3994fd4e,0xbbb1e29b,0xba830b21,0x3b17d8c2,0x3b66bb3e,0x3ba27ff6,0x3b800418,0xba86e43a,0x3ab54804,0xbc0da612,0xbc2854ec,0xbb982114,0xbb6f6953,0xbb8fc44a,0xb9b0e235,0x365f73fc, -0x381b3242,0x380681cd,0x3846b5cd,0x381536f9,0x3813add3,0x373d359a,0x37690122,0xb8051575,0xb8955639,0xba09b27e,0x392c2685,0x3a14528d,0x3a4d3c2f,0x396441a8,0xba265bbd,0xbac7777a,0xbb22c42e,0xbb56e8d9,0xbb4ae6a4,0xbb449732,0xbabac476,0xba9af373,0x3b9a8b00,0x3b99cd95,0x3a732dad, -0xbbd52155,0xbc1dd62c,0xbc137051,0xbbf80547,0xb9437566,0x3bc03b3b,0x3bf73914,0x3bcaee60,0x3b0a4873,0x3a88523b,0xb956ac3a,0x36fa83a6,0xb8ebb392,0xb889b560,0xb89658ea,0xb8348fad,0xb80387aa,0x375679a3,0xb816a467,0x391c88e2,0x3a564ad4,0x3b058d71,0x3b1e520f,0x3b27eb28,0x3b19a532, -0x3aea1397,0x3ac3d754,0x3a6b7b6e,0x399b51a5,0xba0393dd,0xbaf159e4,0xbb390515,0xbb67b06b,0xbb7129ee,0xbb710fd9,0xbb37e69e,0xbb3e501e,0xbb48a8eb,0xbb24434d,0xbb7459c5,0x3a8c267c,0x3a1bb767,0xb94bcbcd,0xb96f72f4,0xb9f7d7fa,0xb916d7b1,0x3840a7ea,0x3935cddd,0x396a3131,0x39302907, -0x3914d076,0x38d9340d,0x3868e631,0x374350a3,0xb7a4e2b0,0x38d6a4c2,0x39d4142e,0x399b907a,0x36ba995a,0xb9a5a187,0xb9f051a8,0xba5baa3c,0xba98167b,0xbad529dd,0xbb025fa5,0xbb10d812,0xbae34e4f,0xbaa88834,0xba8b0248,0xba65dba5,0xba65e0c0,0xba9f994c,0xb9d9de46,0x36b8c4bc,0x3a26be03, -0x3a7486d6,0xbaecfd80,0xbb18aab4,0xbb28922a,0xbb15ec20,0xbb10e76d,0xbaf183e6,0xbab7fb12,0xba84b814,0xba48f27e,0xba026dae,0xb9c83c1d,0xb9a9659d,0xb963f29c,0xb907d00d,0x38d8c812,0x399bc660,0x3a0ff8eb,0x39fe301d,0x3964d55e,0x39e2f8ee,0x3a6b35ee,0x3a6c6d70,0x3a939514,0x3aba9d9e, -0x3ae6efd1,0x3b067a97,0x3abd3117,0x3a4cd59f,0x38ea484b,0xb9ce4bf9,0xba5a1e1a,0xbaa3ad1e,0xbaa8ea5a,0xbabce905,0xbad71e6c,0xbaf752a0,0xb9a8ffd9,0xba2478ef,0xb9c406cd,0xb8cf6dfa,0xb70bb57b,0x391b1e10,0x399c3f77,0x39cafa85,0x3a10ca14,0x3a212b98,0x3a3e0927,0x3a838da0,0x3ab12d67, -0x3aca55f8,0x3ac74b91,0x3ad2592b,0x3ac6f27b,0x3ad5e197,0x3aa31ccf,0x3ae2fac5,0x3ae9665b,0x3ae13d4a,0x3ae07e9f,0x3adbc351,0x3ad38bee,0x3adbd066,0x3acf2c37,0x3acbfefd,0x3ac049bb,0x3aaf07bd,0x3a936b43,0x3a57bfda,0x3a17f60e,0x399fd737,0x38ac904e,0xb915b8c7,0x3a8370d1,0x3a6f9a9e, -0x39e1e328,0x39a3c310,0x3a443d10,0x3a23479a,0x39dba072,0x3a42a1cc,0x3a617fd0,0x3a7d633a,0x3a905e84,0x3a9477eb,0x3a98c2d2,0x3aa7ec05,0x3a511672,0x3a963887,0x3a901fce,0x3a5e910c,0x3a9383b7,0x3af7a1c3,0x3ae55266,0x3aecd26b,0x3af13519,0x3af4da04,0x3af87bf1,0x3afbb07d,0x3aee566b, -0x3ae08fc6,0x3ad1fd10,0x3ac3527f,0x3ab79cd6,0x3aad8bf7,0x3aa76e1c,0x3aa0f043,0x3a9931b5,0x3a8d32ea,0x3af03728,0x379f71d7,0x39208ea7,0x3906f230,0x3a5e54cf,0x3a0c3723,0xba5796e8,0x3a33d109,0x3a147dbd,0xb9e5f15e,0xb9b558d5,0xb9c60fcf,0xba12c891,0xba2e692c,0xba461acb,0xba1b7e3e, -0x39702ad3,0x39e2400b,0xba3810ec,0x39d62674,0x3a31c822,0xb90c544c,0x37f5a29d,0x38e2f620,0x394e6fe4,0xb7f42042,0xb79d85af,0x3903f5d8,0x394a16fe,0x395d4f40,0x39908373,0x38e23bca,0x3914eb4b,0x3995e42c,0x39fb7c39,0x39f40e04,0x387899dc,0x396b8649,0x38c855b2,0x3a141637,0x396a7014, -0x38d4c6cf,0xb828f05e,0x36b99c40,0x38f50fc8,0x37d6f10a,0x39206dd8,0x39196a35,0xb995d95a,0xba4096c6,0xba52fa8d,0x3983f230,0xba416170,0xba2fb9c2,0x3a154e94,0xb8fab8ab,0xb8a4fa28,0x3914874e,0x393d87ac,0x39c43814,0x39b44b6c,0xba0cbecc,0xba43e301,0xb998cd36,0x38d9ab18,0x39f1bace, -0x3a32f4e1,0x3996a9b3,0x39d227fe,0x3a6754c8,0x3aacfb58,0x3a8c6d89,0xb91ee9d8,0x3982622b,0x3a127c5e,0x3a91524f,0x3a676d84,0x391a557f,0xb9ec7b05,0xb79c3a21,0xb82b1ee7,0xb9a1dfda,0xb94a267f,0xb9917beb,0xb9a8be5c,0xba0830db,0xba60784c,0xb90be500,0xbaa42071,0xbac6f8dd,0x395f88b3, -0xb9fabdc2,0xb878f812,0xb97d4d9c,0x3948d1b2,0x3a0d0d3f,0x3a820b01,0xb9c2d706,0xb9c91361,0x3a07bc4f,0x3a8a69f1,0x3a9ae701,0x3aa05a99,0x3a04c9af,0x3a773383,0x3b017bd8,0x3b374c8d,0x3b1eef30,0x3941eaf4,0x3a91b659,0xb8cd18a9,0x3a184e9d,0x39b9607b,0xba016044,0xba81b85f,0xb830769e, -0xb8283025,0x37a4edee,0x3868e9df,0x38c49ac3,0x391dd1d2,0x39838552,0x39486a74,0x38fecd65,0xb88df9a9,0xba858a98,0xb994d6b2,0xba5411b3,0xb9b48c3c,0xb897c149,0x3a4a6427,0x3ab723e0,0x3aa7c438,0xbad8fa86,0xbb312bc4,0xbaac0965,0x39779dd1,0x3ad610d1,0x3adbdb6f,0x3a83e66c,0x3abefc6f, -0x3b54f852,0x3b8a84a3,0x3b33f8e3,0xbaad12d2,0xb8fcc188,0x3bbfc967,0x3b6f6887,0x3b68eff0,0x3b0764e9,0x3a99fa0f,0x39ea9b7c,0xb8442359,0x3798413d,0xb806053b,0xb8231f3e,0xb8a54ae7,0xb8ed93b3,0xb89d3530,0xb8778696,0x38c92438,0x39ff08b7,0x3a40b2c1,0xba0bff08,0xbad0ab93,0xbae22bf4, -0xbb1fe8ad,0xbb073108,0x36e78cb7,0x3b5fa6c8,0x3bcae3d8,0x3bf0a9c7,0x3b934924,0x3ab1962b,0xb8509386,0xb8adcf60,0x3a9aeb83,0x3b7f7830,0x3b287814,0x3b8d3554,0x3c07d4e1,0x3bf23b16,0x3a582f1b,0x3b0013f4,0x3a0d80a1,0x39187fba,0x39b6e069,0xb8cb76b3,0xb8aa836d,0x3857abca,0xb6a24b5c, -0x3816d90f,0x38288898,0x386e5844,0x3832fd38,0x37ad5056,0xb81f4951,0xb98dfffd,0x380a0cf9,0xb91bb935,0xba27a5e1,0xba376294,0x3a8ea6dc,0x3b1748a2,0x3b1e6742,0xb9e541e9,0xbb62140c,0xbbb1ffe6,0xbb8317ae,0xb80fb758,0x3b9e2e92,0x3b08d14e,0xb997424c,0xbaad86eb,0xbb8be895,0xbb7c696e, -0xbac3214a,0xb8d34fd5,0x3b94e924,0x3bf9a34d,0x3bb54020,0x3a900761,0xba84c470,0x39f68994,0xb8d4e240,0x378f176b,0xb815adb1,0xb79d9639,0xb81948fa,0xb816c6fb,0xb7dff001,0xb7ba062b,0x382013a2,0x388156b1,0x395fb6f1,0x3a154fcd,0x3ac86c5b,0x3ae08de7,0x399273f6,0xb932a72e,0x38708dd5, -0x3ac016b2,0x3b919221,0x3c079f87,0x3ba87fb6,0x3a07aecd,0xbbaebcd8,0xb9399174,0x3b9d5824,0x3c04eb10,0x3c2aba74,0x3c0b5032,0x3ad6a81c,0x3b1c0995,0xbbde11ba,0xbc500e62,0xbb8bbe1f,0xbb0cc769,0xbb455d92,0x371864c9,0xb83348be,0x389f2b21,0x3780a504,0x3859d5df,0x38124415,0x3836d04d, -0x37f2021c,0x37b2ef49,0xb750493d,0x37202309,0xb9ca72b8,0xb9011d4f,0x3a27d1cb,0x39e6db67,0xb7987f99,0xb8963d60,0xba3754af,0xbaad1919,0xbb107ec0,0xbb128142,0xbadbfa97,0x39f8922c,0x3ab57edf,0x3bdf4d2f,0x3bbc45fb,0xb9dddf04,0xbb5f17a7,0xbb82a013,0xbb1b44a7,0xbb2169da,0x3b5af019, -0x3c057ca7,0x3bfb2f22,0x3bb95971,0x3b09739c,0x3a47ec4a,0xb995dc85,0x372edfec,0xb8ef8a5a,0xb883ebc6,0xb8a76c64,0xb880874b,0xb886165b,0xb7420d09,0xb84df67c,0x365e2b15,0x3a05eb32,0x3b05b216,0x3b4fcd2c,0x3b40293f,0x3b2217a5,0x3b01f3f5,0x3acb3167,0x3a9b39ae,0x3a87fcfd,0x3a89943d, -0x3836ef9f,0xba10dca6,0xba272ca3,0xbac05b93,0xba9a7eec,0x391f177b,0x3a2ce7de,0x39f5407c,0x39cf26a0,0x38c58434,0x3b1cfa83,0x3b2e10ec,0x3a90f86a,0x3a898f91,0x39b219b6,0x39e1d004,0x38edbf8e,0x3961b79d,0x39320861,0x39405a24,0x3912ce7a,0x391f171e,0x38f2586a,0x38a02114,0x37806dd9, -0x3975780a,0x3a3a4400,0x3a214c54,0x393d3a48,0xb96cd98e,0xb9b53a7a,0xba047f90,0xba3d69ea,0xba5709bd,0xba998d4b,0xbad02c4e,0xbaae7091,0xbab06a0f,0xbad2cc0b,0xbaac293e,0xba78fd0a,0xb9a922bd,0x3864574e,0x3a4fba8d,0x3addd586,0x3b1ce035,0xbab5a4fb,0xbad09053,0xbaaf91c6,0xbab313da, -0xbab88e24,0xbaa410b8,0xba7b56ed,0xba3ba611,0xba0b3bd1,0xb9ff50c1,0xb9a27869,0xb9e312c8,0xb9a744ea,0xb9917dbe,0x3561a500,0x396dc534,0x3a1a6355,0x3a4226d7,0x3a817505,0x3a8f3f8c,0x3a864c41,0x3a8b217d,0x3a87e353,0x3aab1245,0x3ace9ec6,0x3aee7652,0x3abce1ce,0x3a904eee,0x3a4188d8, -0x39db24a7,0x3839fc6a,0xb9995994,0xb9e04aa3,0xba2937f4,0xba88437b,0xbaa275d9,0xb9cfeb39,0xba1f77a2,0xb9da1ead,0xb98e0f6d,0x38deab98,0x391c3bc6,0x3935ec57,0x39a3cb9e,0x39d0cc76,0x3a40742a,0x3a8c64f6,0x3aa86d62,0x3ac17117,0x3ae98adb,0x3af2e3dc,0x3aeb0153,0x3b00fd70,0x3aed27b6, -0x3ae798cb,0x3ad51ff1,0x3aca9819,0x3ad5ca37,0x3ad47166,0x3ad602ca,0x3acfcf01,0x3ad807cf,0x3abf6533,0x3ab86bca,0x3ab58035,0x3ab0c8d3,0x3aababb5,0x3aa01323,0x3a6133c8,0x3a0d0372,0x3989efce,0xb6ac976a,0x3a929f5c,0x3a6bd899,0x3ac92e61,0x3ac1e1c7,0x3a6b2127,0x3acc48cb,0x3ad3aa6a, -0x3aa339fa,0x3ab73aea,0x3ac065f7,0x3ac06173,0x3ace1d32,0x3ad368c6,0x3ad7f8da,0x3b110605,0x3b10b701,0x3ac7cf02,0x3b0d76d6,0x3b10e4d2,0x3ae07d39,0x3aed47aa,0x3af048c2,0x3af2ad31,0x3af5b52f,0x3af81869,0x3afb90dd,0x3af5617f,0x3aedfe7e,0x3ae318cb,0x3ad9bba6,0x3ad17789,0x3ad19bf2, -0x3ac4cda7,0x3abadf32,0x3aacb150,0x3a9fcdf4,0x3b0840ea,0xbab4772f,0xba7d8b0a,0xba98f162,0xbaaf96eb,0xba3b1b56,0x3a26deef,0xbad4230b,0xba56953b,0x39ccc6a9,0x39f426d6,0x39ed3fce,0x39f41b72,0x39b38ba4,0x39d226b1,0x3a49492c,0xba8cf1b9,0xbaec6af3,0x3a77f270,0xba4bb3b8,0xbabe4e57, -0xbac3513d,0xbaa21fc0,0xbaaf5ecc,0xbaa94741,0xbac8ae45,0xbac81b26,0xbab3c70c,0xbaa38a42,0xbaa182db,0xbaa61b40,0xbabba0d4,0xbabb161c,0xbaa58ddd,0xba9b1e4c,0xba9144b4,0xba9458e4,0xba8a145f,0xba5e1f94,0xbaa3b55a,0xb98e2d37,0xbaac8266,0xba98685d,0xba5c45e4,0xba701e8b,0xba4a9c46, -0xba6a8f43,0xba989775,0xbac44ab6,0xbb0b6a02,0xbb040336,0xba85b8c2,0xbac563d5,0xbabf2d9e,0xba670fe5,0xba9e94ec,0xb9cbd30d,0xbae0b6a7,0xbab6f6f3,0xbadc2eef,0xbaf1978b,0xbb328f81,0xbb37cde6,0xbb107358,0xbad2acf5,0xbaac8aac,0xbac0d386,0xbaf35af0,0xbaf1da46,0xbaaa1aa9,0xba9cbd13, -0xba929695,0xbaa8ce4d,0xba86063c,0xb90fd651,0xb9bbafc7,0xba5394ff,0xba879495,0xba7967e4,0xba180d01,0xb9a735dd,0xb9467400,0xb918f002,0xb6e5399b,0xb93af7ae,0xb9690e35,0xba050d31,0xb929fa66,0xbab2c082,0xbb00057a,0xb9d622ee,0xbaa4560f,0xbaa67d51,0xbae8d5ea,0xbad29327,0xbae9a317, -0xbae9d66f,0xbb54d582,0xbb50e5fc,0xbb0c65f6,0xbaa0b2a6,0xba96436b,0xbae14a29,0xbb1bd236,0xbb0ffc4e,0xba77c483,0xba57b05f,0xb9daaeb4,0xba35a03d,0xb903b97a,0xb96512af,0xba10f2f5,0xba5a5fc7,0xba9a29ec,0xba7b225a,0xb9401b54,0x3891f149,0x3855ced8,0x3854ff27,0x38684649,0x38b0b158, -0x3951a829,0x392d05a9,0x39104b59,0x394350d4,0xba44c92c,0xb9e99798,0xba951ec4,0xba8bec20,0xbacb376e,0xbaca698a,0xbb0838fb,0xbb4d3d77,0xbbca6ad1,0xbbe08d41,0xbb9b2f53,0xbb1fed32,0xba9bcbf2,0xbb0cd7a0,0xbb41aa0e,0xbb2f1640,0xba2f007a,0xba1fb28d,0xba49fb1d,0xbadfce86,0xba5184bd, -0x3b493c94,0x3a9714ce,0x3ad84736,0x3a7aa132,0x3a351589,0x392107e4,0xb821bc16,0xb7a189f7,0xb7e7793f,0xb80749b2,0xb8454833,0xb8dc257f,0xb886c2af,0xb8d62b78,0x382c13d9,0x397be8fa,0x3a335ef4,0xba4c50b7,0xbb1149c0,0xbb506d29,0xbb8538ff,0xbb35b69d,0x3923c44e,0x3b7ef3f2,0x3bd74940, -0x3bf29ffc,0x3b78a8df,0x39b34002,0xbaa15ea0,0xbaf7c20f,0xbadb8e0a,0xb99d96ac,0xba6b4a26,0x3ab0eb99,0x3bc4ec82,0x3b95a4fe,0x3a8f0f79,0x3aa9c6ce,0xb9d95363,0xb9393914,0x37074633,0xb88ddb10,0xb7a1c0d8,0x3834e0ca,0x36bb670c,0x37e924f0,0x37f3d8ca,0x38555815,0x3839b31f,0x3816e503, -0x358ee5d7,0xb9394049,0xb9277a00,0xb941c1aa,0xb9e165f0,0xbabe0cbb,0xba74a4f3,0xba7228ad,0xbb02316f,0xbb6342d8,0xbbae6f2c,0xbbce3c7d,0xbb74188c,0x39a4e6bb,0x3b92e2bf,0x3acf4766,0xba87e425,0xbb176bbb,0xbbb60521,0xbb9c5fae,0xbaa961d0,0xb94c2049,0x3b634bf4,0x3bdd3a90,0x3bbfa2bf, -0x3a8da996,0xba4bbdfe,0x39e988a4,0xb92a2961,0x38070149,0xb841bf90,0xb748eaca,0xb808ccd9,0xb8023984,0xb80cd805,0xb7b0d298,0xb624a676,0x38996154,0x391ecf19,0x3838f610,0x39a7bc2e,0x3a451ea7,0x3964b77c,0x3867f281,0x39a109ac,0x3a317844,0x3b0bb99e,0x3b8fb940,0x3a19de3c,0xbb4e279e, -0xbbe2add6,0xbac4c1d1,0x3ae4eaae,0x3ab29d03,0x3b434147,0x3a8e5bb8,0xbbaf721c,0xb922ba2b,0xbc1baba0,0xbc78e61a,0xbb9eb627,0xbae8efbc,0xbae6a738,0x38ef7da0,0xb7e5bebb,0x38a7553e,0x37961529,0x384ab5e2,0x37fe8cb2,0x38386a4c,0x37f7acf3,0x381148c3,0xb79660c7,0x384635d3,0xb9c19ce7, -0xba075043,0xb8893564,0xb9c1d9d3,0xbaaf2789,0xbb06c7b3,0xbb40d196,0xbb647aae,0xbb7f632d,0xbb57ec69,0xbb4f3d6c,0xba6b768f,0x3a1ccb9e,0x3bb22a55,0x3b6c1859,0xbb6fa572,0xbc072115,0xbc1ffdf0,0xbc1c691e,0xbbd8f59c,0xbb4ab74a,0x3b711fe6,0x3bc46cdb,0x3b70b667,0x3ac71e21,0x3993c923, -0xb9630384,0xb7f09036,0xb8d6e2ac,0xb88174cc,0xb892225d,0xb88af0ee,0xb87b6c86,0xb81d6059,0xb7c236e5,0xb7c24817,0x39949304,0x3ab1377a,0x3b143995,0x3b156bad,0x3b16129f,0x3b053bf5,0x3aca6526,0x3a4b73cc,0xb83d17ed,0xba8b0ab3,0xbb11cd69,0xbb57f27c,0xbb8aaa87,0xbb8a6158,0xbb828c12, -0xbb5bd3d1,0xbb8c3014,0xbbad4337,0xbbb4034a,0xbbc8d6d0,0x3a2bacde,0x3a77bf67,0x3aa1704e,0x3a1de3c9,0x39b0cbfb,0x39a9e426,0x39442fe5,0x396384d0,0x39270d9d,0x39239305,0x38fb4df5,0x391e4c58,0x38d5a486,0x38e58dfc,0x37d3ee03,0x3897588a,0x39b84216,0x3a1619a0,0x39cce324,0x38f4aabe, -0xb9ce7b8f,0xba8121b9,0xbab44ac2,0xbb00875a,0xbb201b50,0xbb3ca108,0xbb1bcc47,0xbafa14ea,0xbad25e94,0xbad77639,0xbafdd404,0xbb1c9fa0,0xba9f7352,0xb9a22034,0x39dfa9eb,0x3a7745ed,0xbb020408,0xbb0a5569,0xbb06ae1b,0xbb040509,0xbae7a704,0xbac26201,0xba83fdb5,0xba25fe64,0xb9d3d30a, -0xb99b6101,0xb98057e6,0xb9aafaf7,0xb96b0036,0xb9a4d964,0xb925f71b,0xb84b3ef3,0x3986ed2f,0x39b49fa9,0x39d856dd,0x3a019be6,0x3a098d40,0x3a216e4e,0x3a34e268,0x3a670c32,0x3a8d5076,0x3aa45bdf,0x3a092e03,0xb967e7ba,0xba7346da,0xbaaccc60,0xbace4278,0xbaffa933,0xbaeab9cf,0xbaf05389, -0xbafb8269,0xbb04f417,0xbaa13fa1,0xbad04fd9,0xba17ae72,0xba84ad84,0xba29dfc2,0xb9f29a6d,0xba1876b8,0xb9f8307c,0xba02bb5b,0xb9c004b1,0xb8a54dd7,0x383eb317,0x39ad0765,0x3a18b6d3,0x3a7fa102,0x3a942fa0,0x3a898a81,0x3aaa415f,0x3ad24cca,0x3ace0e43,0x3ade2a61,0x3ad840ee,0x3ad7c229, -0x3ad7c852,0x3ad29881,0x3ae0648f,0x3ab52d2c,0x3a99a82e,0x3a68b261,0x3a127f25,0x39113378,0xb9ad8aa9,0xba09a54b,0xba3d1b94,0xba5dff37,0xba888394,0x39c7f4da,0x39234a7e,0x399d7552,0x3a3515f4,0x3acb98fe,0x3959ebd2,0x3a42ff4a,0x3ac9938a,0x3ae17c4b,0x3af109b0,0x3aff89d3,0x3b076b93, -0x3b0f084f,0x3b15d1fc,0x3a9effcf,0x3a5d6bb9,0x3b1243a7,0x3ab27c17,0x3a92438d,0x3aab086c,0x3aaf22f9,0x3ab07925,0x3ab63e54,0x3ab9011d,0x3abb624b,0x3ac1e09e,0x3aaa3b5c,0x3a962a64,0x3a814e76,0x3a5916af,0x3a385b38,0x3a110ef3,0x3a1342c8,0x3a068739,0x39ea5d52,0x39c5b72c,0x3a9ebecf, -0x39a0e6c5,0x39da261b,0x3a4bd1cf,0x38d3488b,0xba63c5c0,0xbb0a3efe,0x39a816b4,0xba3000cf,0xbad72611,0xbae0f288,0xbae2ba8e,0xbae5eae6,0xbb03ceb8,0xbb083eed,0xbaeb7d9b,0xba824564,0xb8084803,0xbb067ba4,0xba706450,0xb8f37fa3,0x39ddfd92,0x3980f681,0x39c537a2,0x39d796c9,0x395e3e1b, -0x3974f6ee,0x39cc266c,0x3a08450d,0x3a0cf7a3,0x39e56ef0,0x39e53146,0x3a03a949,0x3a3c1196,0x3a40883b,0x3a2f5e6f,0x3978fc9c,0x3a060035,0x3a116d59,0x3a5edd16,0xba8fb70f,0x39629366,0xb9dd15b2,0xb9f61e53,0xb68444e5,0x392a9494,0x39ab5af8,0x39152f47,0xb9b08baa,0xba499b1e,0xba602104, -0x389d9563,0xba903470,0xba6bddcd,0x392f7b97,0xb989383a,0xbaabc738,0x39109a40,0x39e18c18,0x39d91a83,0x39b454f7,0xb9e96382,0xba050bf6,0x38458049,0x3a2a84a8,0x3a702350,0x3a25e6b0,0x3a2685c3,0x3a579d36,0x3ab8a4f4,0x3ab1a8ec,0x3a8376e3,0xb910b712,0x39f785d4,0x3aa0784e,0x3aaaca78, -0x3998aa2f,0xb7b453ac,0xba2d14af,0xb99a4f09,0xb91e4a01,0x37fe136c,0xb93dd3e0,0xb8801758,0xb8fa29b6,0xb7ad9c19,0xb9f7f6e4,0x386c7cc7,0xba855c41,0xbaab1ca6,0xb90b8a39,0xba34baa1,0xba4aa0af,0xba11dbfa,0x3a18ad18,0x3a0f0a92,0x3a648976,0xb9ddb9e3,0xb99a3372,0x3a39c986,0x3acfea44, -0x3addf885,0x3a63192a,0x3a87164f,0x3accc9e7,0x3b3dd763,0x3b2e7278,0x3b0c09c2,0x38ae8c91,0x3aa6a749,0x3a536614,0x3a52ec01,0xb882703b,0xb98a7396,0xba173721,0x3790f3d6,0x37c6facc,0x37539807,0x38343f1d,0x3839f9f6,0x3809a033,0x3890c882,0x39206369,0x389f4474,0x3980ab73,0xb9b4d4da, -0xb9dd9593,0xba3065c4,0xba94f5b5,0xba2bbf8e,0x3a529a95,0x3a4b3f80,0x39d29f58,0xbb191379,0xbb39a9b6,0xba75940d,0x3aa3080d,0x3b0d901a,0x3a4aff75,0x3a9e69f7,0x3b0677af,0x3b859211,0x3b5ec8bd,0x3ade4d76,0xbadaf9d3,0xb80f8e7c,0x3bbb2cf6,0x3b34dd2e,0x3afd2c97,0x3a87174a,0x397ca313, -0x37fbeb11,0xb7994b93,0xb7337820,0xb79841c5,0xb7ca1b1d,0xb780bb15,0xb83cf6b8,0xb86949f9,0xb899084b,0xb81d37e1,0x38e3a9c5,0x3a1b4bd4,0x3970b9eb,0xbac53e1c,0xbac7359a,0xba47cb35,0xb998bf55,0x3b1523d0,0x3bb1c9c7,0x3bf7d238,0x3befa10e,0x3ba66b35,0x3b308a5f,0x3b0afc3d,0x3afbec05, -0x3b3a17a6,0x3ba27a3c,0x3b7f31c5,0x3bae31d1,0x3c0c06c3,0x3be128a9,0x3b021847,0x3b1f08b9,0x3a47440f,0x3a264129,0x3945b2ba,0xb89f7f99,0x37ab20fd,0x379261fe,0x371a43f4,0x379c1f6e,0x374296f6,0x37d78b99,0x3808f031,0x381a7d40,0x37d2b1e6,0xb8ab0f14,0xb93bb045,0x38660de3,0xba0d6e34, -0xba16ed43,0x3a9eb9c8,0x3ae26604,0x3af5ad31,0xba5d6773,0xbb621949,0xbb9f5fe1,0xbb2c20b5,0x3a8a5130,0x3b9f4881,0x3b180a77,0xb96f553e,0xbb0860eb,0xbb81190e,0xbb484087,0xba38f1d0,0x3a5c3852,0x3b8f19a6,0x3bddb7b5,0x3babbe06,0x3a59f27b,0xba2eac70,0x39aa19ca,0xb922e40b,0x3814b34e, -0xb82fe588,0xb6ede171,0xb7ad9e92,0xb7907c67,0xb7ff4b8f,0xb7ac9c3e,0xb7fd8234,0x385236a2,0x3856f9d6,0x39c294d7,0x3a4cd231,0x3ad75cc6,0x3aa9ed6c,0x3a6b77fb,0x3aa4b351,0x3b73af03,0x3bd84a69,0x3c1560e3,0x3ba7c02b,0x3a37cea3,0xbb80daee,0x3b18dee9,0x3bed3f71,0x3c07e326,0x3c2d0872, -0x3bfb3abb,0x398fc9a8,0x3af1101f,0xbba90974,0xbc81c7b7,0xbba4edb9,0xba0f56b4,0xba803653,0x395bcadd,0xb7d3defe,0x38923733,0x3791df53,0x3820d9c6,0x37adf46d,0x38059993,0x38025db4,0x382e307c,0x3644867e,0x38914ed0,0xb95c436e,0xb9e18f6c,0xb9fd0e0e,0xb9c7c9d8,0xb9989dbb,0xb976877b, -0xba1e42bf,0xbaa5ddf4,0xbb08b13a,0xbb0676d2,0xbaebd0a2,0x3a2857e6,0x3b2a8a00,0x3bce24cb,0x3b839203,0xbb52a711,0xbb3eb065,0xbab6b44f,0x3a3737d4,0x39122596,0x3b22a972,0x3b9330b8,0x3b4688ad,0x3b2602a3,0x3a97f0ff,0xb8f5d2c6,0xb90aef91,0xb83c6f7c,0xb8b4a07b,0xb852b1c1,0xb85ecec2, -0xb8557e57,0xb885ef25,0xb887bd1a,0xb7eb109c,0xb8ddd30f,0x390e6b18,0x3aaed91c,0x3b1288b6,0x3b3d6395,0x3b2f4563,0x3b09be63,0x3aea9645,0x3a864a52,0x3a3d2b68,0x3a253fb7,0xb8e15795,0xba44014a,0xba75d80c,0xbaab4c40,0xba07055a,0x3a9669ab,0x3a678c2a,0x381514d5,0xb8d24ed3,0xb9979707, -0x3b4d6863,0x3b3fc0a1,0x3a6f9fb4,0x3a8bec4e,0x3a0c18f8,0x39f810a6,0x3924d41f,0x3937466a,0x391cb27f,0x38f94a37,0x38d8659b,0x38e3ea82,0x390cd46e,0x3911b9a5,0x38ad1bd0,0x390dbf23,0x3a08d900,0x3a4b8681,0x3a292e9e,0x398edacc,0x3979e2c0,0x3828ba22,0xb9b00f48,0xba310aa6,0xba9d6ce1, -0xbaf085cf,0xbac83a04,0xbac96b63,0xbaf1869c,0xbac88888,0xba727b99,0x39f6aa4b,0x3a7429bd,0x3ae80a1c,0x3b253d16,0x3b48e446,0xba2550bb,0xba908628,0xbaae4780,0xba95a36c,0xbabd25bc,0xba899ed6,0xba3a5607,0xb9cea968,0xb9b2f3ad,0xb980e81e,0xb9709c49,0xb97e3483,0xb9b215e5,0xb9b02bf5, -0xb9a61a0f,0xb8ee4da2,0x38bf864b,0x399629ea,0x3a0ebec7,0x3a88d651,0x3a8119e5,0x3a53a67e,0x3a38a675,0x3a4fdad4,0x3a6d450e,0x3a79e641,0x3a3e0d55,0x3a0294d5,0x398fe9c7,0x397ed608,0x3900a60f,0xb72bba32,0xb8fc6aeb,0xb9929687,0xba051957,0xba42ece4,0xba30e62a,0xba819bae,0xbac63343, -0xba429562,0xba2d2f77,0xba20eb2a,0xb9e9bc34,0xb9bf3d87,0xb93371f3,0x37cde918,0x391d71ed,0x39e098d5,0x3a2da6c6,0x3a69c3ed,0x3a84ba87,0x3a9723a2,0x3ac5f95b,0x3ad297eb,0x3ac2c485,0x3ae69ee9,0x3ad11361,0x3ada64d3,0x3ad894d9,0x3ad74ef6,0x3ad1a983,0x3ad63b55,0x3ac61bd1,0x3ac2f56b, -0x3abfca3c,0x3ab4fd57,0x3aa9269e,0x3a9d3829,0x3a53d378,0x39e8da1f,0x3910c66a,0xb978e94f,0x3a811e7e,0x3a705771,0x3a6ccb0f,0x3a0802c0,0x36804d7a,0x3a8be7b7,0x3a322315,0x39916018,0x39c4c028,0x39ea3442,0x3a0623d7,0x3a11a0bf,0x3a163323,0x3a1d78f7,0x3aa26ef7,0x3add8b98,0x3a33d3ae, -0x3aae3089,0x3ae2067d,0x3ae7bfff,0x3ae5787d,0x3aea2fda,0x3aea7a51,0x3aecb0d9,0x3aedff95,0x3aefd9fc,0x3ae965aa,0x3ae181ca,0x3ad84cff,0x3ad1a338,0x3acc0735,0x3acd3278,0x3abca1e7,0x3aafa626,0x3a9e7053,0x3a91d96c,0x3b02651e,0xbab8cc1d,0xba860ace,0xbac6433e,0xba031a26,0x39b79aa1, -0x3a8570a4,0xba860238,0x391fed51,0x3a884193,0x3a87ecd2,0x3a7b1de6,0x3a6abb07,0x3a408f72,0x3a4f9c1e,0x3a92cdc0,0xb78bac9b,0xba8a46c2,0x3a9debce,0x393ea0c0,0xba22a49a,0xbae3019a,0xbaa87b00,0xbab7ce1c,0xbaba27e4,0xbad232d8,0xbacdbccb,0xbab39295,0xba9ef46d,0xba9f0582,0xbabb33ae, -0xbab6c608,0xbaafd6f9,0xba935237,0xba936794,0xba900b9e,0xba9de03e,0xba9105b8,0xba885d02,0xbaa3391c,0x3a2e056d,0xba952edb,0xba10f8c3,0xba0ad420,0xba41af48,0xb98a2966,0xba3a469f,0xba441397,0xba571043,0xbaca3364,0xbad2af32,0xba500896,0xba9b9288,0xba9659dc,0xba008f2e,0xba834c83, -0x39623ae4,0xbad9290d,0xbad1fa3d,0xbae99005,0xbb0cf7f8,0xbb3d016d,0xbb3bc37e,0xbb0c006b,0xbab92aa5,0xba9c92a2,0xbaeaa7b7,0xbadebdb8,0xbac4fa0e,0xba5bf605,0xba7183c6,0xba828009,0xbab3797d,0xba875e58,0xba1b0b50,0xba15c572,0xb8c76eac,0xba2e1823,0xba02873e,0xb9efeae8,0xb8e8eb90, -0x3903971c,0x388a3a40,0x38c45546,0x390fec1f,0x39136f0f,0xb8306ebb,0x38ec2279,0xba22df4a,0xbab1ff9e,0xb9b7c0b2,0xba819b20,0xba505bad,0xbae040d3,0xbaf4a904,0xbafb7b46,0xbb10b886,0xbb5f89dc,0xbb51690e,0xbaf3b311,0xba5f3bd5,0xba5a869e,0xbb162de0,0xbafd32c4,0xbac31824,0xb860f0f3, -0xb992e0dd,0xb970231a,0xba856cc7,0xb97dfbdf,0xba4ff12f,0xba26d275,0xb914263c,0xba54986a,0xba01af5f,0xb7f21186,0x389f31da,0xb8478911,0xb78ae940,0xb79b2c1b,0xb82d3b23,0x3584c4b7,0x38304ecf,0xb7984904,0x39a474f2,0xb967e858,0xb95d8917,0xba93ea7f,0xba614675,0xbaeecbb1,0xbb07ea84, -0xbb224b1f,0xbb8250f9,0xbbd74d93,0xbbdd374f,0xbb87d81c,0xbace684e,0xba6926e8,0xbb518ad9,0xbb251b0e,0xbabc72f8,0x3a4d4767,0x398d6fc4,0xba050f7a,0xbb075193,0xba50f879,0x3aad9e23,0x3a79512f,0x3b04d0df,0x3a3df95f,0x39a60e01,0xb6bd2b77,0xb742b178,0x35929cca,0x37658dd0,0x3581310a, -0x37a118d7,0xb7a3af28,0x35b51a08,0xb86a3e6e,0xb7f684d6,0xb8733562,0x3a22de05,0xb964ae98,0xba88b034,0xbb104450,0xbb5e1714,0xbaffb53e,0x39ac8b05,0x3b99a730,0x3bd62390,0x3bb869c5,0x3b27f67f,0xb864491d,0xba206080,0xba9c9364,0xba7cdccf,0x39c89fa0,0x39715fa2,0x3afde6fb,0x3bac478f, -0x3b4d1ebe,0x3a6387be,0x3a8b0d8f,0x3a1aa1fb,0x39a18fae,0xb792bc24,0xb8682728,0x37efab82,0x358fde4b,0xb62985be,0xb4e5a588,0xb636b7af,0x36c4b717,0x3772562e,0x374600f2,0x38645b9e,0xb86fb6f2,0xb9182d13,0xb73381bd,0x395ebf57,0xba569805,0xba5f3b3c,0xba6f0056,0xbb13f65a,0xbb6f73d7, -0xbb9ff9e0,0xbb9bd16c,0xbad68fd8,0x3ada457e,0x3b86410b,0x3acd378c,0xba4d6a59,0xbb143b68,0xbb7f7343,0xbb3466bf,0x393aa950,0x3a7a9acf,0x3b76ddee,0x3bce1c7f,0x3bb25f32,0x3a32f7bc,0xb9a67502,0x39403d62,0xb8d32b6e,0x37b37120,0xb7941d2c,0x36017827,0xb686d7f3,0xb719ec2c,0xb715f95a, -0xb7e2a265,0xb6639305,0xb8360d99,0x3955c500,0xb907b091,0x39bb0be0,0x3a455b28,0x39d4de4e,0x3a784add,0x3a9e6cbb,0x3b0c467e,0x3b4662b7,0x3b74e346,0xba4dd866,0xbb8ba444,0xbbd71c07,0xba90b591,0x3b102ff4,0x3ad7b452,0x3b6865b3,0x3aa01c37,0xbba6e8b6,0xb7f63c0d,0xbbe2b742,0xbc7df23a, -0xbb9dd396,0xba18f6fa,0xb986f460,0x383fef55,0x38357d9c,0x37ad766b,0x37816101,0x370c40ad,0x370fa355,0x376ee2e8,0x37b2f21f,0x37d66502,0x37d5365b,0x37a731c6,0xb79c0871,0xba2faeb3,0xb9f00a3e,0xba8f759a,0xbb08ea1b,0xbb1ef718,0xbb4c357c,0xbb5f05d4,0xbb6cca4a,0xbb3dd239,0xbb2e142c, -0xb83b908a,0x3b275157,0x3ba76720,0x3b07c63d,0xbbc8d0ff,0xbbd47b81,0xbbc0d7a3,0xbbb84f07,0xbb3b50c7,0xbb3c046b,0x3abd0206,0x3b47bc2d,0x3aaff1dd,0x3a653299,0xb9a5da46,0xb701d992,0xb89b3227,0xb7b26380,0xb7c23794,0xb76cab90,0xb804d128,0xb8199a98,0xb862eaa0,0xb8166501,0xb881479f, -0xb80e7402,0x3a653b38,0x3b0e4938,0x3b10e7dd,0x3b0d527b,0x3b05f4eb,0x3ab5c73c,0x3a1b9345,0xb939e646,0xba78e23a,0xbae4a050,0xbb2cc72c,0xbb5b6a38,0xbb6360bc,0xbb40aa19,0xbb12f5bb,0xbb4c9613,0xbb8b23fb,0xbba3f726,0xbb973d91,0x3aa6f8df,0x3b08a800,0x3b10932d,0x3a98ff92,0x3a47c9b9, -0x399d0272,0x391dcefa,0x38df4d9c,0x3876ca3c,0x38163692,0x37c0551c,0x3884b93e,0x38946d36,0x38e7be6e,0x38c2c2e3,0x38d0a2e6,0x39a53a7f,0x3a453495,0x3a443352,0x3a07bc9b,0xb9232c41,0xba47bc14,0xbaa3093a,0xbad4416e,0xbb088315,0xbb30d447,0xbb1751b7,0xbb07f412,0xbb02e03d,0xbb02cd0a, -0xbb0e2ede,0xbb0ea010,0xbaa0076f,0xb876fd9b,0x3a582806,0x3ad50273,0xbaced865,0xbabbaacb,0xba96542b,0xbaa23c38,0xba879795,0xba55f2e0,0xba01660d,0xb9368897,0xb8b7f598,0xb7b833ac,0x36ce02a2,0xb8c8c4c3,0xb9083a20,0xb96b9611,0xb99a0482,0xb99cd852,0xb878b01d,0x3847a49f,0x39b9c13f, -0x39bb8160,0x3852a4b2,0x393085b3,0x38cb1445,0x391a66d5,0x393a46d0,0x39516903,0xb981dbad,0xba32e83f,0xba8af43f,0xbaa4de02,0xbab28793,0xbad5b166,0xbabb6b2f,0xbabe0227,0xbacb3346,0xbacd0a0b,0xbab27b44,0xbad90987,0xba4277fb,0xbaa97b7e,0xba69549a,0xba4b0725,0xba7a0fb8,0xba606afa, -0xba67f3e1,0xba331a58,0xb9d7ef70,0xb9ad02af,0xb9338168,0x3863dc26,0x3a0e27a6,0x3a3ea022,0x3a4a563a,0x3a811efb,0x3ad3cbe2,0x3aabec2d,0x3ab348e7,0x3aaf48be,0x3aaaf6b0,0x3aaa7a9f,0x3aa5e83a,0x3aaead4c,0x3a7f157c,0x3a3d9416,0x39e954b7,0x39067208,0xb9729833,0xba1e04f0,0xba4c55bc, -0xba6fc689,0xba80890e,0xba958feb,0x38176dca,0xb954ae93,0x39e39a47,0x3a71e154,0x3abe0537,0x395bba6f,0x3a760cd0,0x3ac176f0,0x3ad7a60f,0x3ae3abd7,0x3aef1623,0x3b007d4c,0x3b0a346d,0x3b0fea4a,0x3ac1a385,0x3a593df2,0x3b13f076,0x3ad3cb05,0x3a9942ef,0x3a4dbf90,0x3a702eb1,0x3a6a3933, -0x3a70cf4a,0x3a7203a3,0x3a714bd6,0x3a7a340c,0x3a503f20,0x3a2e2185,0x3a099499,0x39d131c6,0x399bb33b,0x39390fe8,0x394634c7,0x3912daf2,0x38891fa2,0x3782f413,0x3a44a179,0xb917f076,0x378e823e,0x39c706fa,0xba705e34,0xbad90880,0xbaf1532e,0xba1f35b5,0xbabb8ddb,0xbac56db3,0xbadbc7a4, -0xbadcb5a7,0xbad6dc61,0xbafbc416,0xbafe389f,0xbace04a3,0xbad7ff18,0xba64df42,0xbae6a272,0xbad7845a,0xba8c6510,0x38947f6f,0xb9375ee6,0xb8dd181d,0xb90b7eac,0xb98baa84,0xb976239b,0xb8ba1f1d,0x38a42486,0x38ad8593,0xb928d066,0xb83ac8bc,0x37f8dd83,0x3997f6df,0x3921ba9c,0x38b71949, -0xb9534529,0x3878215f,0x3962f1e3,0x38cc4698,0xbad5d5b8,0xb996db38,0xba5f24b9,0xba632fa3,0xb9b8e5d4,0x38828505,0x38a55a14,0xb9443eea,0xba02741a,0xba69febe,0xba7b6a47,0xb9b66e04,0xbaade2c9,0xba977308,0xb9ef3623,0xba1cca59,0xbadc1ae1,0xba08d77e,0xb9006b2f,0xb9cc76a6,0xba169ee3, -0xba951184,0xba897d0f,0xb9f92bbb,0x3975048d,0x39c0ea99,0xb9b57333,0xb8807397,0x392417c7,0x3a561f27,0x39c424e8,0x38980d3a,0xba21619e,0xb81ef087,0x3a6fa92b,0x39f38e3d,0xba1dbed0,0xba043c39,0xba5a69c0,0xb9f52fc9,0xb920936c,0x38c58f9b,0xb8bdb5a1,0x38a52073,0x387b7551,0x39655a47, -0x376e3673,0x39190e85,0xb9f56a7b,0xba74e582,0xb9f84060,0xba6451f4,0xbaa9b051,0xba928ef8,0x3783ac38,0xb9bcd8dd,0xb9c68333,0xbab01afd,0xba8e22bb,0xb8ea0732,0x3a7af555,0x3a7c5e5c,0xba174af8,0x393b6543,0x3a2cc642,0x3b0fb71c,0x3a942651,0x3a4b6e8e,0xb9ee6c3e,0x3a1ce7df,0x3a47fa65, -0x382d7f68,0xba494b84,0xb9d0827d,0xb9c6e9b4,0x390df937,0x385546f1,0xb74d73b9,0x37141c09,0xb758a48f,0xb814b28a,0xb86ec020,0xb6805ef9,0xb7cd59eb,0x397eac3b,0x38a6f282,0xb9b25bfb,0xba1c20c7,0xbac3e324,0xbaac0238,0xb907e982,0xba6a4a63,0xbaef01c7,0xbb7f80c5,0xbb7ab62c,0xbadf1d5c, -0x3a4c1fb2,0x3a959826,0xbab373ca,0xb9768bb9,0x3a5f0203,0x3b460d1d,0x3a9c9030,0xb94dfdca,0xbb04de4a,0xb9f20f0a,0x3b8216f2,0x3ab92646,0x3a06204d,0x39bffbdb,0xb8d71d57,0x3846339a,0xb8805897,0x37637028,0xb6c174d9,0x36bdcf9b,0x378e40fb,0x3799f839,0x36ee43b7,0xb71b10c5,0xb8ce4066, -0xb7b463be,0x3968f2ea,0x39fe1eff,0xbaa9d98b,0xbad52b3e,0xb9c4514d,0x3a0245c8,0x3b54bb24,0x3bcc97a0,0x3bfd6ed1,0x3bd6f599,0x3b98cd8c,0x3b3fe6a5,0x3b34b56b,0x3b18d3a0,0x3b243a76,0x3b590163,0x3b49cba9,0x3b9280ae,0x3bec5f2c,0x3b9c0e65,0x3b3a6e8e,0x3b074891,0x39dc86bc,0x3a161254, -0xb88100f0,0x3808eb2d,0x368b0639,0x377d09ee,0xb6cea4f8,0x36336bb3,0xb72bd32f,0xb69054ee,0xb6e20bd6,0x37a78583,0x37ec2c79,0x385a8ce4,0xb95d9527,0x38da3152,0xb91143c4,0xb9cb5bd8,0x3a053529,0x38d5f748,0xb9c36e1e,0xbb1c8d37,0xbb801c37,0xbb88da5f,0xbab7284e,0x3ac9ac67,0x3b6fdf23, -0x3ae032e2,0xba1ab583,0xbb2c6502,0xbb69c618,0xbb15930f,0x3a067a86,0x3af7abd2,0x3b5a0105,0x3bc2916f,0x3b991d28,0x3a140bad,0xb9ab0ed9,0x39064c61,0xb8b3e298,0x37a04312,0xb76e5249,0x36abb0ca,0xb4c3bec6,0x365fe3c3,0xb68664b1,0xb72b2323,0xb80d5641,0xb6c2d924,0x3817663c,0x390763bf, -0x37ba7ef8,0x3a8b46eb,0x3ac97d45,0x3ac57d01,0x3af631fd,0x3b88842f,0x3bbbe7a1,0x3bc7aeef,0x3b049b09,0xbaadd26d,0xbb79e5d7,0x3b15a1c6,0x3bc5c4f7,0x3ba7a7c5,0x3bd5ef48,0x3b5c7d3a,0xbb4ca2dd,0x394671e5,0xbb9cb7fa,0xbc77bacc,0xbba022b9,0x36823601,0xb8a4e2ca,0x38979617,0x37e565df, -0x379c8b52,0x369f9aef,0x360f42ca,0x358f97cd,0x364b2000,0x36eee70a,0x37b4e6ae,0x37ea4ddc,0x37edd755,0x37ba39b9,0xb9eb48e6,0xba90bd75,0xbaa2a648,0xba9e29af,0xbaaefa88,0xbadfc3fa,0xbb135bc8,0xbb330122,0xbb1eccc1,0xbb138702,0x398f676f,0x3b4e47fe,0x3b8ca1ea,0x3aae63ee,0xbba6e7d6, -0xbb61589d,0xbac363f1,0xb9dc6d9f,0xb942bbbe,0xb9a5e490,0xba4591c3,0xba45330f,0x396e4629,0x39c45b2b,0xb9909a06,0xb458ed62,0xb877f652,0xb3b419d2,0xb70ad5e4,0xb63a77f0,0xb7217d09,0xb77e9f02,0xb829e224,0xb84a7b0e,0xb8649928,0xb8c34512,0x3a2912f1,0x3ab61a7d,0x3b135519,0x3b11c109, -0x3aeb2755,0x3ac8ba53,0x3a1c0f52,0x384279cf,0xb9c6b177,0xba64033e,0xbace14ae,0xbafbf61f,0xbae8ec49,0xba66b29a,0x39aeda10,0xb9fd3ae2,0xbad1e906,0xbb05fba9,0xbae1e00e,0x3b297a4b,0x3b161e8b,0x3a92cb6e,0x3a729a5a,0x3a1153a6,0x39641dd2,0x391d7001,0x386570d3,0x37bdcedb,0xb5a1de09, -0x371ef831,0x3771a494,0x380c53eb,0x38986fa7,0x38fab5d9,0x38c9cd5a,0x396cb5e9,0x3a3cfe8a,0x3a614e90,0x3a2f40ad,0x3a027dd9,0x39140fdb,0xb9ab035e,0xba459871,0xbaa9ac64,0xbb02eb7b,0xbadfd751,0xbad32c8a,0xbae4c4cb,0xbac9bbe1,0xba93af2c,0x385d59f1,0x3a23feb1,0x3ac2da1c,0x3b0799bd, -0x3b24d0c8,0xb9e0ac07,0xba615e07,0xbaa50a4c,0xba81b152,0xba959a02,0xba31cf48,0xb9b9dc88,0xb85dba06,0xb7a84238,0x386fda2d,0x36a13700,0x3642fc6e,0xb8862d40,0xb8f4b5ab,0xb9a6dd6e,0xb99eb08a,0xb976b475,0xb922dc35,0xb8979d1b,0x3a03407d,0x3a02e074,0x39949f82,0x394b112c,0x39105bca, -0x38fed70f,0x383b0e40,0xb8c00f0e,0xb98da40c,0xb9d79037,0xb9afb6a0,0xb99c0a05,0xb9b06e5e,0xb9b852d4,0xb9e49f09,0xb9ff24bf,0xba2afc7d,0xba61e426,0xba9cafc3,0xbada86fe,0xba80016c,0xba8b80ce,0xba827b27,0xba58b75b,0xba488585,0xba17e7b0,0xba06b95e,0xb9ee4ad1,0xb98cd4ab,0xb8d7e85c, -0x380d519d,0x396d8512,0x3a00efda,0x3a4f28cb,0x3a91d3b9,0x3a940860,0x3ad0197f,0x3abd524d,0x3abb2afd,0x3ab6e854,0x3ab02cc9,0x3aa898f6,0x3aa6e026,0x3a98dc67,0x3a916017,0x3a854324,0x3a5ff76c,0x3a2f973e,0x3a03e9a1,0x3973b4b9,0xb7e483f8,0xb97977f7,0xba11bc21,0x39f12b2e,0x39f2fe47, -0x3895ca50,0xb96d2d04,0xb95d7bf6,0x3973686d,0xb8d7c9f2,0xb9109c77,0xb8ab9334,0xb6dc0024,0x38b4c469,0x39099fcd,0x3945a0bc,0x39824917,0x39b549d7,0x3a45e18c,0x39e0de3f,0x3a0b3568,0x3a677ca9,0x3aab617f,0x3a9f4ef2,0x3aa292fb,0x3aa16ee2,0x3aa1f3fc,0x3aa1c86a,0x3aa22ce3,0x3a9853d1, -0x3a8e39e2,0x3a84cb98,0x3a7b84af,0x3a7025b6,0x3a683baa,0x3a51bc1d,0x3a3bc532,0x3a20d0c8,0x3a0eb894,0x3aa06040,0xba3ace88,0xb9f15856,0xba51a019,0x39611a3e,0x39fef4ed,0x38870102,0xb9208e21,0x39c3aaeb,0x39e65433,0x39b23cca,0x39835cd1,0x393709fe,0xb87be64b,0xb88acb65,0x3943657c, -0x3979de44,0xb92f8942,0x38fed848,0x39af6ded,0x38b89b3a,0xba7c97f7,0xba316eb3,0xba3bec6a,0xba4dd5d5,0xba64d11e,0xba573f2a,0xba281862,0xb9ffee6a,0xba04990c,0xba5811d5,0xba261cd5,0xba0c8980,0xb98ee9dc,0xb9bc725f,0xb9d00133,0xba22b3bb,0xb9f3ee1b,0xb9f350d6,0xb9e7b806,0x39ed5f11, -0xba034b2d,0xb91640dd,0xb9bce043,0xb9bd4120,0x396866ca,0xb940836a,0xb91e352f,0xb940646e,0xba255c54,0xba509bf3,0xb9a7ff17,0xba63086f,0xba5cc6ca,0xb8aea307,0xba0654c4,0x3848b4bd,0xba604704,0xba73efa2,0xba853831,0xbabc579d,0xbaf68758,0xbae990bc,0xba95db06,0xb9eb4771,0xb9b0f755, -0xba99e9cd,0xba3ad52e,0xb9c57ccf,0x39b5672b,0x38acc8d4,0xb92937e3,0xba4f1f1e,0xb9c1c08e,0xb880c332,0xb8d184dd,0x39c41b86,0xb95ede29,0xb9a76401,0xb98d050a,0x3734bd6e,0x387c07cf,0x3714fc99,0x3818baa3,0x384b5cc5,0x390ccf29,0x38ba2d05,0x3905e861,0xb8b6a0e1,0xba20f6b4,0xb99939ad, -0xba25b01c,0xb9cce0af,0xba8d347f,0xba8a444c,0xba8d4045,0xbabdfac7,0xbb0ca3f5,0xbaf013c6,0xba299be6,0x3990ded5,0x394bb3f5,0xbada48f2,0xba0f21ac,0x38a915fb,0x3ad25177,0x3a804f79,0x3a30db12,0xba192969,0x39ac0fc0,0xb9963e98,0xb97366d0,0x391ff183,0xb9d529fc,0xb92bac79,0x38a32706, -0x37a7a39b,0xb820493d,0xb4eef3eb,0xb731bc5e,0xb7bd4998,0xb836223a,0xb7818a7c,0xb88a5041,0x3906565a,0x38b4e319,0xb8889802,0xba47400c,0xba3b1853,0xbabaf37d,0xbab6775e,0xbae0973a,0xbb4f14f7,0xbb9d9ba5,0xbb95fb18,0xbb14b69b,0x38b8d09c,0x39588307,0xbb312077,0xba7ffcb3,0x3a14d332, -0x3b39d0db,0x3ae38ea8,0x39cd278c,0xbad766dc,0xb967ac25,0x3ac89fbd,0x3ad99be2,0x3afe2cbb,0x3a008d55,0x38aacbc4,0xb80dc077,0xb7145b87,0x376a6413,0x367d7d13,0x361da321,0x37668ea7,0x374860f0,0x378887a9,0x36c89406,0xb7ec1bdd,0xb8d45a0d,0x3960cc9f,0x39776367,0xb9654f3e,0xba721758, -0xbab641c6,0xb952aeb4,0x3ac369dd,0x3baf05e0,0x3bcfd65c,0x3b8ecf92,0x3b1830c8,0x3a49e260,0x3a60c387,0x3a44172e,0x3a88dbd8,0x3afd4b7e,0x3b105c65,0x3b5f9f9f,0x3bb597a6,0x3b4a4100,0x3a684342,0x3aa4cbe4,0x3aa9c4d6,0x39a533f8,0xb8cc0ff8,0x3808b347,0xb5181cc3,0xb5bb2de7,0xb6b9cc63, -0xb5512ddd,0xb6dad423,0xb6d16316,0xb6976682,0xb68eea08,0x37d483d8,0x38190224,0xb8dd8a3e,0x370a042d,0x39f2538e,0xb8e28170,0xb9ad61e1,0xba10a4bd,0xbade3c67,0xbb5e9b02,0xbb8b52d2,0xbb6693d8,0xba26fab0,0x3ae8761d,0x3b3ad6c0,0x3aa98e9d,0xb9c5ad9c,0xbaeab06a,0xbb0df5ab,0xba8c4c11, -0x3a687170,0x3acfb24b,0x3b461de4,0x3baac565,0x3b8c337e,0x398acaac,0xb9326fff,0x38896689,0xb83a3759,0x379adbc5,0xb65ce408,0x36a050fd,0x364713c2,0x35973359,0x3695c74b,0xb742ccb1,0x35ca36ea,0xb8878740,0x38f6bab6,0xb8d11ab4,0x399141aa,0x3a4904f6,0x3a59b6bb,0x3ad86cce,0x3b0540cf, -0x3b78b135,0x3b924a29,0x3b812216,0xb954a7fe,0xbb4d7dd2,0xbb92a56e,0x39f66e03,0x3b767174,0x3b6f79bd,0x3ba897aa,0x3b268d72,0xbb408d02,0x394ed604,0xbb75e8a0,0xbc57e160,0xbb936ed1,0x38ba658d,0x3802e3f3,0x37bb0cf0,0x37a209c4,0xb6e7438f,0xb627ffcb,0xb6ae937d,0xb5f90f0f,0xb5c7a056, -0x36c68b56,0x36838edf,0x380fda7e,0xb6ffe8f8,0x38fb7af3,0xb9e2e348,0xba5d085a,0xbac2b1fe,0xbafd1665,0xbaf7d4c8,0xbb1582ce,0xbb199c3e,0xbb1f22f5,0xbaf19d92,0xbaa6f73a,0x3ab52d58,0x3b97e836,0x3b90896f,0x3a795935,0xbbbb47e5,0xbb378123,0xba20e5e2,0x3907479e,0x3a42756c,0xb99dfff0, -0xba86c620,0xba0db7bb,0xb977163c,0x3952ae64,0xb962bd95,0x38448a55,0xb7d4d20b,0x37c9697c,0x3594d8aa,0x3709f268,0xb67da169,0xb70470e5,0xb7a70466,0xb82ef0b0,0xb7d5ea0a,0xb92e0649,0x39e84e8b,0x3ad8e2c8,0x3b05d572,0x3aff0b0c,0x3af02cd6,0x3ab1b1b2,0x3a352eff,0x3940e3e4,0xb952a055, -0xba0a4695,0xba960502,0xbabd7f30,0xbadadab8,0xba7020df,0xb8f28b77,0xb9f00456,0xba994d7d,0xbaf3c902,0xba1efa40,0x3b0cbefb,0x3b3d7336,0x3b10e8d0,0x3aa6a5b3,0x3a19e61b,0x37edc57d,0x38bbbd6e,0xb8337a5b,0xb7851951,0xb7c9c7a8,0xb749c883,0x36265c8d,0x378db3ea,0x3817423d,0x38b03d82, -0x38b34d56,0x39509193,0x3a48e9bb,0x3a7465e5,0x3a60a022,0x39bdab9c,0xb88b706e,0xba0620c1,0xba2501a5,0xba876462,0xbae6a3d0,0xbada1f34,0xbae741e6,0xbb0139e0,0xbaf28a80,0xbad8d659,0xba627a48,0xb9d62544,0x3a222c82,0x3ab4ae9a,0x3b115ab9,0xba40f2b5,0xba25e311,0xb9ebbefa,0xba02f877, -0xb9d90078,0xb990c299,0xb8e4305a,0x390dadbf,0x38b3c2c5,0x38af1e61,0x385bf1d8,0x3796155a,0xb748c5ea,0xb845aa0d,0xb93eda8a,0xb99afd4f,0xb93cf524,0xb915b5af,0x393d8403,0x399b640b,0xb8dd8b26,0xb8c38893,0xb99150d4,0xb9b12160,0xb9da81f1,0xba038c52,0xba0f3d5a,0xba1a2246,0xba196918, -0xba108547,0xba0acd1b,0xba24eff4,0xba0bfa85,0xba16d5b8,0xba363865,0xba3845b8,0xba7911f4,0xba95be78,0xba6d8c17,0xba8ab029,0xba61dd19,0xba541300,0xba64ea07,0xba48910b,0xba3c327a,0xba091727,0xb9c3d590,0xb998017d,0xb9827aeb,0xb90917a8,0x392b343c,0x39bb0c66,0x3a1ca025,0x3a47f9e4, -0x3aafaac1,0x3a92100c,0x3a86a1e6,0x3a860ac2,0x3a7d8b8d,0x3a74d351,0x3a67b7b7,0x3a637bf8,0x3a270481,0x39f9a289,0x39ad3fb7,0x3921a8c2,0xb77fa9c1,0xb9337079,0xb9b7f180,0xb9f9c9eb,0xba11bce3,0xba3b4da5,0x3779b84f,0xb90458be,0x39f6424d,0x3a2ed8e1,0x3a1e5880,0x399a482d,0x3a2ad628, -0x3a293df3,0x3a45b6cc,0x3a5379e4,0x3a6394a7,0x3a7d8dd8,0x3a8e1ebc,0x3a96ba1d,0x3a9ac227,0x3a57645d,0x3aafac33,0x3aacd3dc,0x3a8d613b,0x3a10f2f9,0x3a2e63a1,0x3a261121,0x3a23d57d,0x3a21185e,0x3a1c67fa,0x3a1cf8e0,0x3a07a574,0x39ea5195,0x39c13f63,0x39a312a8,0x398a0144,0x396c6b36, -0x3951e4ac,0x391b8640,0x389644c8,0x38069334,0x3a144426,0xba495c32,0xba0902d4,0xba00e00a,0xba9e0cb9,0xbaa28801,0xba1888b9,0xba9019c7,0xba9468c4,0xb9e0850e,0xba24a96c,0xba31f7bf,0xba2d7439,0xba6f8b2c,0xba67af47,0xba0e4eae,0xbaa67ab5,0xba9d5b01,0xb9fdb9a5,0xbaa38eec,0xbaa9331c, -0xba33e010,0xba423381,0xba4c2163,0xba619bd7,0xba6eb17a,0xba649fcb,0xba44b554,0xba1b12fa,0xba1f2873,0xba728123,0xba41be3b,0xba2c7fcc,0xb9c9be07,0xba19ed38,0xba22784f,0xba3a0e84,0xba0fe974,0xb9b9a9d5,0xba434cf3,0xba7fa381,0xba3b6992,0xba5a701f,0xba5fa8bf,0xb9ff519f,0xb60f49e7, -0xb931d6f6,0xb9a0f3a0,0xb9c5d447,0xba29e3e3,0xba3cb3cf,0xb9f28f94,0xba8ba511,0xba947d62,0xba4a6bf6,0xba438000,0xba87990c,0xba99da2a,0xba74508c,0xbaab40e8,0xbad60e24,0xbafa4829,0xbae2d41f,0xbaa04a86,0xba102eca,0xba09879c,0xbabc0fc9,0xba818a2c,0xba41e6ed,0xb8411dbb,0xba22420e, -0xba4cfcbe,0xba7ab070,0xba154f70,0x39555746,0xb9e4200a,0xba4a7cb7,0xba269e88,0xba20ed8f,0xb97a30d3,0x37c1102d,0x38a7a42a,0x37bd7d52,0x38f69e25,0x390754dc,0x3985225a,0x391b10dc,0x39335603,0x3888cb20,0xb9aa689e,0xba0042e3,0xba53563c,0xba97c3c1,0xbabdb796,0xba78b904,0xbab915c1, -0xbaedbe17,0xbb16e923,0xbb02375f,0xba98405a,0xb9351d33,0xb99cbda5,0xbb0b651e,0xba893aa5,0xba1d1ba0,0x3a7f8a42,0xb9b9908b,0xb9dbb972,0xba3f8f0b,0xb85dfc52,0x3982db88,0xba234f13,0xba3b7d1d,0xb9cc7e10,0xb84514d3,0x3914c5c0,0x33945474,0xb80d7e4a,0xb7989656,0xb833f07a,0xb88a89f7, -0xb8cfeced,0xb884c1b2,0xb88c465e,0x37303270,0x393518bd,0xb88936dd,0xb9f70cc9,0xba9cdd68,0xbae11da2,0xbabb3377,0xbb2552b3,0xbb810c94,0xbba68750,0xbb973b2b,0xbb2df09c,0xb9b57174,0xb9e2b038,0xbb5ceae2,0xbaf6c50c,0xba2540d2,0x3ace78bf,0xb9feb0aa,0xbaabdf74,0xbada8889,0xba0cf299, -0x3a9aa102,0x39ad0a25,0x39a10857,0x39237be7,0xb7737813,0xb800511f,0xb7af7495,0x37bf49fc,0x370c8f8e,0x37b169ce,0x380aa722,0x383bd653,0x37f9c7f9,0x380a02d3,0xb7bbe37b,0xb87e6665,0x37e3e67e,0x39b1f5c6,0xba290051,0xbabe9d01,0xba409297,0x39f3939b,0x3b2e3b1a,0x3bb08b16,0x3bc800d1, -0x3b8ca347,0x3b27527d,0x3ab39c7e,0x3abc91e6,0x3aa988f5,0x3a840d49,0x3a300fde,0x3aa23c42,0x3b225252,0x3b9678df,0x3afe606a,0x3b01bf04,0x3a7b10eb,0x39b08a11,0x3939aa14,0xb89297c7,0x386a1085,0xb71f2b40,0xb45c0bba,0xb7550969,0xb7186cb9,0xb7acae0a,0xb7abc720,0xb7a0de51,0xb70b951a, -0x342f68dc,0x387e69d4,0xb8b9fa81,0x367dcbd9,0x3944e780,0xb9bfe274,0xba4446ea,0xbae57d7f,0xbb3cd543,0xbb855fa2,0xbb8d7a0d,0xbb578baa,0xb9caebc5,0x3ae30a2a,0x3b1f01bd,0x3a8cd716,0xba356bcb,0xbb219529,0xbb3320ba,0xbab7a03f,0x3aa19b08,0x3af93041,0x3b1fe378,0x3b9207a9,0x3b5b20d5, -0x38e97e82,0xb92b7c86,0x3862a2c9,0xb8194899,0x37a99ac7,0x363c210a,0x37542482,0x3763f9a0,0x37713bd9,0x373fbd52,0x3667bf86,0xb674b8da,0xb80a790d,0x37e29fa9,0x382cdb19,0xb9c34ee0,0x39db8212,0x3ab1df3e,0x3b0011b1,0x3b254444,0x3b861aa9,0x3b8920d7,0x3b33028a,0xba4ce3a7,0xbb3a6f5b, -0xbb563317,0x3abea6b0,0x3b6c88d6,0x3ae647f5,0x3b0f0e01,0xb9f59e21,0xbb9e7350,0xba27a73e,0xbb936dbc,0xbc3d0bcb,0xbb8206f2,0x396d11e0,0x388dddab,0x3666c1ca,0x37876dba,0xb77c6b33,0xb730c9de,0xb78668db,0xb7930f9a,0xb7888c1a,0xb70b20fa,0xb6cfdd81,0x37a8852f,0xb5a7ee6e,0x38aff312, -0xb9457057,0xba979ce1,0xbad6a451,0xbaec4049,0xbb08fbb8,0xbb231077,0xbb300689,0xbb317364,0xbb0caed5,0xbadb026e,0x3a1bd575,0x3b697b00,0x3b161c94,0xba58f745,0xbbb222ab,0xbb6eabd0,0xbb09eb8f,0xbaf8e4a1,0xbac6b484,0xbb0437e8,0xbb8ded47,0xbb1a700d,0xba3f4f5c,0x390c39e4,0xb919b2f1, -0x38180a2d,0x35e456e6,0x3808d151,0x37cd4033,0x380fc128,0x37da4a29,0x3751762a,0x36e9a715,0xb7fde180,0xb720a967,0xb90ae9ce,0x3948a873,0x3a70031c,0x3ada6bdc,0x3ae0c863,0x3ac7097d,0x3a9f50ed,0x39c89972,0xb9ae46ba,0xba92a551,0xbac20e61,0xbb1192bb,0xbb2dfb67,0xbb1b1c3e,0xbad15f71, -0xba7aaa2b,0xbad0ab4a,0xbb1706aa,0xbb2f8bfc,0xbaeb414a,0x3abdc3d7,0x3ad7632e,0x3ad07ac8,0x3a57a62f,0x39a7bc98,0x3820ec5a,0x38304d4b,0xb896b0a2,0xb8255c78,0xb88cd4db,0xb88a0044,0xb86a97ca,0xb7e50e3a,0xb6d36a68,0x37eec7be,0x38d47bf5,0x38713088,0x3a21766f,0x3a8240c7,0x3a826a47, -0x3a2190b1,0x391b02bb,0xb9c706f4,0xba509ea7,0xbaa6f791,0xbafe714b,0xbae6b381,0xbad3aa42,0xbacdffdb,0xbac07a45,0xbab04330,0xba49e80c,0xb979245d,0x3a09b763,0x3a7d0a35,0x3ab46272,0xb9e802b2,0xba17d020,0xba5fea16,0xba1e244e,0xb9fa958e,0xb969d55a,0x37add6a8,0x39424b8e,0x38e082e2, -0x3934450c,0x391fbc05,0x3915baf0,0x388ccb99,0x3847fa2f,0xb83bc064,0xb9684781,0xb98daa1d,0xb9b446d5,0xb9c7ec2f,0xb8cf8673,0xb92fb051,0xb98702ad,0xb9a71ae6,0xb9e1ac14,0xba0aaa5a,0xba2d4b18,0xba3fcce5,0xba633860,0xba78e182,0xba65ed47,0xba4e9ed1,0xba5560bf,0xba3a7dcf,0xba3b7468, -0xba2e3ed9,0xba295641,0xba71b4a9,0xba98c2d6,0xba9848cb,0xba8369d5,0xba8be6a4,0xba769c79,0xba592eef,0xba3fcd61,0xba1aeec6,0xba0efe88,0xba01bdc2,0xb9ddeea8,0xb9be9b25,0xb9afc220,0xb94b1ddd,0x3717f3be,0x3939a9f6,0x3a0d17a4,0x3a646d24,0x3a914138,0x3a8774e0,0x3a787523,0x3a6929fa, -0x3a5513c1,0x3a4451d6,0x3a390ffa,0x3a16ee5f,0x39f3bdbe,0x39a31f09,0x38d9ff9b,0xb908be07,0xb9b9f42c,0xb9f28757,0xba1393cf,0xba26ce7b,0xba514368,0xb9113a97,0xb91f8d43,0xb9cdd317,0xb9bf926b,0x389711ca,0xb9c771fe,0xb9bd00a2,0xb8be6779,0xb8735b78,0xb6fcc392,0x38a12adb,0x3913673f, -0x3982a8a5,0x39b88665,0x364e18be,0x381ace87,0x3a272296,0x3960d64c,0x397ce660,0x3a0d9521,0x39fd0818,0x39f7d7ef,0x39f0afc8,0x39ea9ca4,0x39e1c81e,0x39dd1340,0x39ad864c,0x3982d90c,0x393b25bf,0x38fd2cfc,0x38a07dad,0x3770bd67,0x350a53c6,0xb82e58da,0xb8ba0a32,0xb8ff7ee7,0x398f547d, -0xb937db78,0xb85c6f39,0xb8c82a4a,0x3925f1ce,0xb925eac1,0xba783207,0x38d1bca0,0xb8f84963,0xb9c4bacb,0xba0ecddb,0xba2114c0,0xba2b152c,0xba683075,0xba7ef5eb,0xba5505b8,0xb991e028,0x380e7769,0xba7eb245,0xb96fe609,0x388020ed,0xb94e190e,0xb9559eb4,0xb93a768b,0xb98c0869,0xb98b0993, -0xb96174c5,0xb8d2cafa,0x37b62a06,0xb6cf30a4,0xb9ad3ec5,0xb8b08cb4,0x37c02846,0x3997b96c,0x3903ad1f,0x3861ff98,0xb94188b2,0xb6d7b0f3,0xb737a734,0x3850bfc1,0xb9a409ed,0xb8d73049,0xb92cbbda,0xb9d06ba4,0xb91d61c0,0x399f2bc3,0x38b60f4c,0x38be0f55,0x38536098,0xb9131123,0xb953360c, -0x370a890a,0xba19b55f,0xba29d804,0xb8f38641,0xb9582597,0xba0a6f8f,0xb992cc55,0xb9b2d1e5,0xb9e9c7b8,0xba4d4345,0xba707aae,0xba480024,0xb9b362de,0x395d6365,0x3959c93a,0xba2b9531,0xb89a0d35,0x398f920e,0x3a785750,0x3a08487e,0x395f0706,0xb9ce78b4,0x379b140c,0x39adaf83,0x38cd0236, -0x396bf42c,0xb8d557b4,0xb9950d06,0xb8a03f58,0x380e3778,0xb856730e,0xb835f13d,0xb6b8824f,0xb620f34e,0x3896e202,0x388ad101,0x388b6b95,0x38c03b8e,0xb886d0ca,0xb989710c,0xb9d313c0,0xb9b96cc0,0xba1d48a4,0xb99a08a9,0xb9eb8839,0xba4a41cd,0xba7cc13b,0xba27f725,0x38c573a3,0x3a54deb5, -0x3a258766,0xba94604e,0x3966260c,0x3a59e323,0x3b157e2b,0x3aa61122,0x3a5bc16c,0xb9a01fa8,0x39fe961a,0x38d1ee78,0xb922530d,0xb80484a6,0xb9362583,0x37b8387c,0x388d48d0,0xb7819f65,0x378463cb,0x378c0ddd,0x35eaf646,0xb6c91745,0xb7fcf35b,0xb804a8f8,0xb8159f55,0xb7da3ddc,0x38917b13, -0x3819021e,0xb9a5d0d7,0xba349537,0xba84b489,0xba330d83,0xba97f571,0xbb13fda7,0xbb3cc47a,0xbb1c6bff,0xba57e05e,0x3a823691,0x3a2d27f2,0xbb0dd0bd,0xb967834b,0x3aac5e13,0x3b5ebab6,0x3aeb4cd0,0x39c306c7,0xbaaa5067,0xb8af7ccb,0x3ac7b565,0x3ac1d304,0x3a835e34,0x392c625b,0xb84cc8ea, -0xb736301c,0xb6a43eaf,0xb4b67c25,0xb70bbdf5,0x3512a748,0x368d9803,0x377655e9,0x3769f364,0x37b63a0d,0xb4adec21,0xb7a81c6d,0xb82cf884,0x3997390c,0x3832caf4,0xb921dee1,0x39c4110a,0x3a99a54c,0x3b20c526,0x3ba30eca,0x3bab753b,0x3b4111ef,0x3aeb0251,0x3a9faaac,0x3aeaf873,0x3b0f6033, -0x3b19113a,0x3b1433a7,0x3b3d62dd,0x3b712a9b,0x3b9f6f80,0x3b1e6c40,0x3abb56e4,0x3a9371b7,0x3a75b559,0xb86113fc,0x37a5d48e,0x37396207,0xb6158778,0x359287e7,0xb3980694,0xb50b087b,0xb697e038,0xb6dc451b,0xb72446ee,0xb6cfc722,0xb704d285,0x380cf256,0xb7dcf856,0xb886f192,0x3950548a, -0x39066a61,0xb8b91ade,0xba13ff0e,0xbaa2bbcb,0xbb395aa9,0xbb4c6a56,0xbb019f2f,0x39e9ef84,0x3b0481ca,0x3b099008,0x3a9b7179,0xb8b74ad0,0xbac9a452,0xba85203f,0x38a4de5a,0x3aced317,0x3b0bf8d7,0x3b17df1d,0x3b83ee4b,0x3b2f56d4,0xb9497cb9,0xb85de111,0x37c5fe9d,0xb7468738,0x37245d6d, -0x35b4af12,0x369d8675,0x3691b525,0x36af3e74,0x36e05ced,0x363c4799,0x366dea3d,0xb7bf82b8,0x36e866cb,0x37e280a2,0x38928b10,0x3a4a312e,0x3ab6209e,0x3b0fa8f1,0x3b388b5a,0x3b9ce069,0x3ba76b91,0x3b70fa27,0x39fa073f,0xbad14962,0xbb0a9d8d,0x3b00f1d0,0x3b971f8b,0x3b96d828,0x3ba71bbe, -0x3b23bbae,0xbac58f1c,0x3990bc13,0xbb126fc2,0xbc18e92a,0xbb5a299f,0x3a08d6ff,0xb7d9a676,0x37089936,0xb69dfa67,0xb728716e,0xb72f7f14,0xb70c507c,0xb70200ea,0xb6eb0429,0xb6bf12c0,0xb6c4c91a,0x371e162b,0xb586e525,0x388adb2b,0xb89be6cb,0xba6ba1f9,0xbabd7c0e,0xbab3281b,0xbaa40a4d, -0xbabf7516,0xbabd3838,0xbac56f84,0xba9e1f59,0xb99d6efc,0x3af586a5,0x3b9a3afa,0x3b222a48,0xba019557,0xbb875da4,0xb9d74204,0x3b0f40a9,0x3b5b3b02,0x3ac2e15d,0x3adaeea3,0xbb51b977,0xbb34b60e,0xba1adaf6,0x387cb8f2,0xb82668e2,0x37d56c25,0x37832cc2,0x37db77e3,0x37897007,0x378287ab, -0x375f7fdf,0x36e6eafa,0x37649ed4,0xb7d7b276,0x376dca6a,0xb912960c,0x38c9f19d,0x3a908cb4,0x3aec3afa,0x3ad56df8,0x3ab57845,0x3a897882,0x3a00530a,0x39163fd4,0xb8cdf78d,0xb95e2938,0xba172986,0xb9c37554,0xba143d6f,0x39931cc8,0x3a9c0beb,0x3ac5436d,0x3ab3300e,0x3a8dff63,0x3b1fb0f3, -0x3b09612f,0x3b281f5d,0x3adc6609,0x3a70eb6b,0x38a1d2f1,0xb7ae1939,0xb72db750,0xb8754d2d,0xb842a655,0xb822e0c8,0xb8099d35,0xb7d21815,0xb7ad6de7,0xb72a4ef5,0x36e62d54,0x38a264d7,0x37c2b30b,0x3a158b18,0x3a7a9405,0x3a81dab6,0x3a4947e8,0x3a0ebd7a,0x391e6916,0x38a14da1,0xb9a4012c, -0xba8798f7,0xba9499ee,0xbab13ea3,0xbad50b89,0xbab4d23c,0xba789378,0x392f068d,0x395202af,0x3a638178,0x3ab01f9b,0x3aefb672,0x38b46c82,0x387aebee,0xb8f1818d,0xb7812548,0xb88512f1,0xb7739003,0x38cae97a,0x3901d77c,0x38edbde5,0x38b41966,0x38a4a787,0x387789e4,0x3838101e,0x380684b8, -0xb73c5511,0xb90656b8,0xb95a3cc5,0xb9920484,0xb931fc1d,0x3865b4b4,0xb94fdd01,0xb99032c4,0xb9e340ce,0xba11a243,0xba30fc98,0xba54a3c8,0xba24eb76,0xb9fa96e8,0xb9a32907,0xb8ef7e58,0xb607bc32,0x388ddeac,0x3893aade,0x3801885a,0xb787ff43,0x37c91e5c,0xba099917,0xba25ed6a,0xba81664f, -0xba362cbb,0xba396782,0xba2afd0d,0xba10f9f1,0xb9d4451a,0xb99303c1,0xb988456f,0xb9695152,0xb9377cc0,0xb9089724,0xb8c158f9,0xb8d53515,0x35ba530f,0x399fcaf2,0x39f79328,0x3a57d415,0x3a58631b,0x3a29f739,0x3a2786b8,0x3a1682d8,0x3a069a36,0x39eed23f,0x39c92b59,0x39a533e0,0x398e8f9c, -0x39838d4a,0x39543305,0x393a16b3,0x39344a13,0x37c77533,0xb8b6557b,0xb94c9154,0xb9b1e254,0x37d19823,0x373f053a,0x3931efc3,0x382a881b,0xb9a01de5,0x38eca084,0xb60302e7,0xb99b4ab8,0xb98ccabf,0xb95548c0,0xb921d122,0xb8cf07a6,0xb872eadc,0xb7a99540,0x39d2d869,0x3a01d860,0x39860008, -0x3a137d3f,0x3a23b8c8,0x39c5f5b5,0x39d378a5,0x39c74552,0x39b6e8e7,0x39ad72e9,0x39a09c2d,0x39935f4f,0x398e5336,0x39852e4d,0x39777881,0x3975b035,0x39753f22,0x3987798f,0x395942f5,0x392b595e,0x38e46eb9,0x389f9464,0x39c2c333,0xba7df050,0xba41115e,0xba7f6dde,0xba5a8bd0,0xb9ea62f7, -0x396495fc,0xba750197,0xb9f7839b,0x399d17fc,0x38e68363,0x38232706,0x3845e57b,0xb9118071,0xb9146d83,0x3870008e,0xba189562,0xba75fc2a,0x398b1cc0,0xb9f32bf9,0xba5e35bd,0xba85373e,0xba6f4299,0xba8306bf,0xba8fd478,0xba8cc02e,0xba875d10,0xba78901e,0xba5a1ec1,0xba622d0d,0xba995359, -0xba7dbac1,0xba691b05,0xba29a840,0xba5ccdbd,0xba60955f,0xba603c9b,0xba4ce562,0xba363840,0xba8aec7c,0xb94629ef,0xba4217f9,0xba1c35e7,0xba12ecfd,0xb9a46c1a,0xb7d4f2fc,0xb931531f,0xb9485721,0xb9379b2a,0xb99f6976,0xb9a8e804,0xb9852286,0xb9fe9aba,0xba3c8955,0xba3ee192,0xba1fc1a1, -0xb988f4b9,0xba9e8f65,0xbaa11208,0xbac96103,0xbaf84cf6,0xbafbfead,0xbae2e724,0xbab3d8f9,0xba60b008,0xba6c5b14,0xbae5f933,0xbaa75cf2,0xba85b290,0xb9d043eb,0xba6a3971,0xba81c6d1,0xba8000ca,0xba49fa24,0xb9cfabe0,0xba70bb06,0xba02d818,0xba051416,0xb95bc819,0x381b008a,0x38d864b0, -0x380bb18d,0x383947eb,0x3890b4c5,0x3888fcbf,0x38e682de,0x38dfc14a,0x38e5964c,0x391eb9e9,0x38cd3f0d,0xb91677a3,0xba0e2ffa,0xba1e18f1,0xba9d1a98,0xbaadcf79,0xbada63f8,0xbb0f5cd5,0xbb12186c,0xbafbcf17,0xbab0e67d,0xba29f0a1,0xba63ff48,0xbb25e95a,0xbab94c80,0xba848637,0x39b653a5, -0xba54119f,0xba4afa3d,0xba487ffe,0xb9d47054,0xb9dc2f5f,0xba87c732,0xb9d2d17f,0xb9478980,0x38ffb701,0xb6d7c0ce,0xb8148e97,0xb7c3169c,0xb78a88e5,0xb7f7f901,0xb8020bfc,0xb8434e53,0xb840fb49,0xb8576bf8,0xb880a2be,0xb79f279a,0x38cff57c,0xb968fdb7,0xba1ea8b0,0xbac4eb61,0xbafe7794, -0xbb3d239a,0xbb8ba1f5,0xbb94baf4,0xbb80fba1,0xbb24bdec,0xba5082c7,0xba99c084,0xbb7c35f0,0xbb192db9,0xba8eedb7,0x3a5e79d0,0xba569319,0xbab4414e,0xbaa9b7fa,0xba1e7fc5,0xb9c2caed,0x38b7fdc1,0x3a004366,0x37d5e2b3,0xb7493fe5,0xb7b5c017,0x37df75c3,0x370098a2,0x37423b59,0x3752e408, -0x378ec18b,0x37af1ce6,0x37c5efa8,0x37bc13b0,0x38104d8d,0xb74e4662,0xb7682b67,0x38e59d0b,0x38062eef,0xba42c494,0xba132a5d,0x3a23bee5,0x3b008978,0x3b8707dd,0x3b89e19d,0x3b136217,0x3a50e1ac,0x392e51db,0x39fc0639,0x3a58616b,0x39dfe36f,0xba28e651,0x39f12719,0x3ab8a95c,0x3b337b40, -0x39cea01f,0x3a92b51b,0x39d0671e,0x39c47043,0xb92a4855,0x38baff64,0xb7f9233e,0x368a864a,0xb770d2a3,0xb6899c9c,0xb71c337e,0xb717e5d1,0xb748afb9,0xb743aa9d,0xb769094f,0xb762ac27,0x3608d786,0x37a8fd75,0xb8d3766d,0x396e5dad,0xb9a3a38b,0xbab61b88,0xbb1c88b2,0xbb6d20fe,0xbb88881a, -0xbb6adde9,0xbaf65808,0x3a272084,0x3afb8a7d,0x3ac5a048,0x3a2101e1,0xba055ba1,0xbada61e5,0xbab046c3,0xb975c48a,0x3ad97b7e,0x3ae97b1b,0x3acc7d36,0x3b47866a,0x3b0442ea,0xb9a37cfa,0x37cb8ac5,0xb5ae8bcd,0x3708cb63,0x3712ef69,0x37040d8f,0x36f1b0a1,0x370bc200,0x37097d37,0x3715a505, -0x370c91ff,0x371d454a,0xb69d3c4c,0xb763e64c,0x385d1146,0xb94526bd,0x393f6d10,0x3a959fd5,0x3b0ac39e,0x3b348946,0x3b685110,0x3b327110,0x3a096828,0xbb14974c,0xbb5e34f2,0xbb2a04d1,0x3a09a18f,0x3ad99946,0x39903a93,0xb8bcdb36,0xbb03b52b,0xbb8f9fed,0xba4c00bd,0xbb66814f,0xbbeeddf4, -0xbb227af8,0x3a0b9e33,0xb8860f66,0x36595040,0xb73c5723,0xb78604c0,0xb7431417,0xb74231bd,0xb735c353,0xb72e1a64,0xb71f755f,0xb730e0e7,0xb6adf3fd,0xb60c08ba,0x37f0719b,0x38138721,0xba3d274a,0xbac82ce4,0xbaee7c66,0xbb0b6c3a,0xbb2398a0,0xbb198add,0xbb086b9f,0xbac6ca4e,0xba0e8a96, -0x3aa60d43,0x3b6d814b,0x3a7055c3,0xbae3e2a5,0xbb88f113,0xbb2d0198,0xbab614e4,0xba85f65f,0xbadda9eb,0xba947de3,0xbba01792,0xbb18c573,0xb9eec05b,0x38eaeffd,0xb8041a41,0x3826c76f,0x37bcb1dc,0x37e0f7db,0x37a88f3e,0x37abcd51,0x379be9bf,0x3771f616,0x37ad03cd,0x360e7a76,0x375e369d, -0xb88d4c8e,0xb86db6b0,0x3a3fa3b8,0x3aa7ed90,0x3aa017ca,0x3a973152,0x3a4813d2,0x39632245,0xb9d53eb4,0xba9d40ab,0xbab70872,0xbafe895c,0xbb09a7de,0xbb012bf6,0xbaaf9593,0xba6bdb25,0xba66a495,0xba784ade,0xba8af098,0x3887abfd,0x3a0aa4a5,0x3aa9c7fd,0x3ae121cc,0x39ff9ee3,0xb790d3c5, -0xb8049937,0xb83e035d,0xb88ac875,0xb846f7a7,0xb83e56a2,0xb830c6f9,0xb818499e,0xb8123c9a,0xb7f0241d,0xb814c2ae,0x381a1197,0xb630233d,0x39bf725b,0x3a6a1ec6,0x3a85a8e5,0x3a1e6c15,0x396889ec,0xb9450c0c,0xb9dc4181,0xba4b9d09,0xbab2fe08,0xbab62e76,0xbab0d44e,0xbaa8c2a3,0xba9f5dcd, -0xbaa33e00,0xba90fe06,0xba5e8677,0xb9a12871,0x36fcc887,0x39bb11fb,0xb9760de7,0xb8f9bc95,0xb96da114,0xb8a71c68,0x3805f875,0x3887892c,0x39147e2c,0x3910be77,0x38e870c0,0x38d7b9c4,0x38ca8f40,0x38b6fc3f,0x389e2ad7,0x38a84f46,0x387f9251,0xb62daa80,0xb90be813,0xb9b26214,0xb9e444eb, -0xb9f3a669,0xba1cf039,0xba14b60a,0xba20870d,0xba3cb26e,0xba59967a,0xba770452,0xba79dcef,0xba852858,0xba88ea81,0xba784cc5,0xba574c11,0xba4c1bc4,0xba23ba4d,0xba15671b,0xb9fad20e,0xb9aae446,0xba491221,0xba623267,0xba1b5d79,0xba4e8cef,0xba3de472,0xba1861b8,0xb9ed25cc,0xb9c687ba, -0xb997301c,0xb99d6738,0xb98dc97b,0xb989d527,0xb972a818,0xb980fb9c,0xb956f5ac,0xb94e9d81,0xb92d5984,0x389a900f,0x3a1290c0,0x3a03a1ce,0x39f37eae,0x39c4dbe5,0x39a458d7,0x398106a1,0x394a2c09,0x39172fb2,0x38003fc8,0xb894c9ae,0xb950bfab,0xb9b9deaf,0xba0c28c6,0xba3b497c,0xba3e934c, -0xba3da3f9,0xba3dc740,0xba45b967,0xb9daf36a,0xb9f2ab1d,0xb9c762a5,0xb93c6a18,0x394748ef,0xba04ad73,0xb99978cf,0xb851694e,0xb7f6632a,0x37c397eb,0x38b6dbc6,0x3910c720,0x395de8c7,0x3998ae74,0xb7a086ba,0xb9653ac7,0x3a25ec64,0x393b67b1,0xb7b67adf,0xb8666b90,0xb8366d3d,0xb8a0998b, -0xb8c22780,0xb8e9861d,0xb90d7124,0xb91f5e71,0xb96285ac,0xb98e228c,0xb9a6bda0,0xb9bc1893,0xb9c9e4a8,0xb9e22d9a,0xb9d6015e,0xb9db0e10,0xb9de6770,0xb9e3595b,0xb992982c,0xb8a43128,0xb7a4f098,0x38c3587c,0xb99c9ae8,0xba3f25fe,0xba9a65c4,0xb9220860,0xba1c0618,0xba292c04,0xba52e2e9, -0xba607dc4,0xba648f68,0xba87e2de,0xba90d12a,0xba845685,0xba4486ea,0xb98366fa,0xba9f8a83,0xba374f07,0xb9a6fa0f,0x3881def6,0xb8e86f9c,0xb8a94fc5,0xb92b5249,0xb8e21e9f,0xb8944bd0,0xb7dd2907,0x38723b72,0x37f85846,0xb96d2bb6,0xb76873b9,0x389cd783,0x399f77d5,0x38ebb5a9,0x384a287a, -0xb8ceb7e4,0x37fcad30,0x385a033c,0xb7d92f66,0xba57e84f,0xb8abf41b,0xb9b83023,0xb9bc6523,0xb828e770,0x39611395,0x38d8ce6a,0x39075885,0x39040aaa,0x38cce1e0,0x38a2187c,0x3915d16b,0xb95f81a5,0xb9ba21d2,0xb9aa1eda,0xb9169c89,0xba4cd4e4,0xb93ec7ca,0xb96129d5,0xb9cc7611,0xba1fac8a, -0xba0ae287,0xb9bf05b0,0xb92cdfbb,0x3961614b,0x391dbe93,0xba0f49e8,0xb84c57df,0x396dcf2e,0x3a4b58f1,0x39a0ef5f,0x38914ddf,0xb98c2fb6,0x35ea6c10,0x39a8b562,0xb91b7b26,0xb96ad2b7,0xb9448d0c,0xb919d387,0x38be844f,0x38020591,0xb86fce87,0xb7ebb8ec,0xb7ad8d5d,0xb7e12e80,0xb5808754, -0xb6980683,0xb679091b,0x3877f8e2,0x390601d7,0xb89c3a03,0xb9616c40,0xb9cb2b04,0xb9d3cb3e,0xb8d00e3c,0xb9c595dd,0xba265906,0xb9fe3311,0xb960240c,0x38951ddc,0x3a14ad9b,0x39b88b7d,0xba7d80ea,0x39329e4f,0x3a2362ef,0x3aef5683,0x3a366438,0x39d4ddfe,0xb938617f,0x3982f2a4,0x394ced9d, -0xb9e3f000,0xb9b49ccb,0x372c508b,0x38536b00,0xb7272151,0xb7cdd3fd,0x37c17817,0x37279c7c,0x36dd7b7f,0x36dbf084,0xb611608e,0xb6a9a8bc,0xb30b77df,0xb81b719c,0xb7d49a83,0x3795aa9b,0x3790239b,0xba0a27d3,0xba449b57,0xba15a227,0xbaa15a6e,0xbb01d76d,0xbaf3a053,0xbaa980c1,0xb9f9d4b8, -0x3a42f997,0x398f1b46,0xbaf84dc6,0xb9b4b14a,0x3a618b5b,0x3b279c4f,0x3a6ac3dd,0xb8e99c12,0xba5cc40c,0xb91c3e86,0x3a8eb8f2,0x3a720694,0x3935dc3b,0x387c926c,0xb86492ec,0x3780da0b,0x36d3fa3c,0xb6d06bb2,0xb6ba707c,0xb60527f7,0xb6296352,0x36346630,0x351352a2,0x36ed54ca,0x36caab95, -0x38100ece,0xb8917c7b,0x3914addd,0x3810df5f,0x3950af70,0x3a9ba1ee,0x3aeecd8d,0x3b39e84f,0x3b8398d4,0x3b7ae6c5,0x3b00e722,0x3aa740e0,0x3a9e0842,0x3ae89742,0x3b1ff57b,0x3b14faaf,0x3a9a6cbd,0x3b09f96e,0x3b2f14ed,0x3b5c100a,0x3abb94e2,0x3abc78b3,0x3a749cff,0x398b084e,0xb8f957d1, -0x38a2e2aa,0xb812c823,0x37182272,0xb698579e,0x3699f057,0xb4f07da1,0x34d054c1,0xb54e6638,0xb64219fd,0x34c8097e,0xb754b43b,0x36406473,0x35bcb370,0xb78ed5d4,0xb86f75b7,0xb8a4aaa8,0xb9f3af93,0xba9a7385,0xbad8d95b,0xbb28f1c0,0xbb16c927,0xba8a8914,0x3a5cb0ad,0x3ae71e49,0x3aa89a9d, -0x3a2ef468,0xb97c8d7a,0xbab96cdf,0xba214127,0x39bbffb7,0x3acbe944,0x3afc07e8,0x3ab08b8f,0x3b257c03,0x3a9bbe19,0xb9a69bc1,0x38868c69,0xb72e802c,0x36fe8f43,0x35a8595d,0x340a77a1,0x35a2f7b1,0x35210dab,0x3614ec8d,0x3432a577,0x36ad6bcf,0xb5fc1e3b,0x378f31f1,0xb82f7517,0x38957f8d, -0xb8832915,0x3a16547b,0x3ac4822e,0x3b0d8217,0x3b396142,0x3b87327a,0x3b7f32b8,0x3b0bf863,0xb8084307,0xba8ee1de,0xba369491,0x3b0d0e11,0x3b6f2885,0x3b538af7,0x3b2f59a6,0x3a25e45d,0xbabe5cd1,0xb86f24dd,0xbafa6ffa,0xbbb83e4e,0xbad78f11,0x3a2d68c7,0xb95e3a47,0x388f7713,0xb81f266a, -0x3702f4e1,0xb70f03de,0xb49e980e,0xb6897100,0xb5d3a24c,0xb6828e55,0xb4cd5fd6,0xb721ec09,0x37248d96,0xb7a71e7a,0x3908d7c1,0xba19be74,0xba9c7b30,0xba777f78,0xba8070e3,0xba93b3ac,0xba8891f8,0xba8365c7,0xba60582b,0x39ae1a25,0x3ae91f29,0x3b648d79,0x3a09aa46,0xbacbe8a4,0xbb252483, -0xb8ae8ae0,0x3afa47ae,0x3b5a25cf,0x39a5c849,0x3b095996,0xbb8071a1,0xbb2d088a,0x390959a3,0xb863d059,0x385a4e25,0xb67e80d9,0x37ac10ae,0x360f7f47,0x3715c909,0x369218ed,0x36d70ec8,0x3653676f,0x37010055,0x36186872,0x37273b68,0xb7a45d0f,0xb901026e,0x3a0f37b5,0x3aad8d47,0x3a93bf19, -0x3a606cac,0x3a1f8601,0x3954a229,0xb8c7aeb5,0xb9e399f0,0xba047fc0,0xba4b313a,0xb9e77ea2,0xb9ebe74a,0x39ae1c03,0x3a9f2aa6,0x3af1cffd,0x3b0b10bd,0x3b18a140,0x3b55780c,0x3a92b2c0,0x3ac6657d,0x3a8e78d5,0x398b389c,0xb8daf4ab,0xb3c72be4,0xb858b43c,0xb74b64e2,0xb7a21ec4,0xb72c6018, -0xb75c7f4a,0xb7155fae,0xb73223fb,0xb6ca8277,0xb7b2fb3e,0x371fc043,0xb738d57b,0x396fe77d,0x3a47563a,0x3a6ba232,0x3a57487f,0x3a3a437d,0x39d0f5f9,0x398dea40,0xb8863c86,0xba1ebc86,0xba469257,0xba69cfc3,0xba893e46,0xba58e5f2,0xba066eb3,0x396b681f,0x38051b6a,0x399a6f19,0x3a02a3b5, -0x3a2ccf7b,0x3a02577f,0x39d38c44,0x38089a5e,0x3927a89a,0x37cc962e,0x38d58eb4,0x38aa6252,0x3817c9f4,0x37e9b92b,0x379de820,0x37ad660a,0x3783603e,0x3754e4f3,0x3788fa52,0x37f3c16e,0x38172929,0xb88d773b,0xb98e8463,0xb9dff7f6,0xb98c0acb,0xb9a5559c,0xb9da0669,0xb9ff6c97,0xba1cdaff, -0xba3637a7,0xba560f60,0xba29d9fc,0xba0a77a4,0xb9d4ee85,0xb93248dc,0xb6b62b93,0x3931f225,0x394a4931,0x395d7fb3,0x3990a0d7,0x39c1906b,0xb9c07c30,0xb9d8f2de,0xba59a7af,0xb9d9f576,0xb9f53bee,0xb9ca2ab4,0xb9437d4f,0xb8963383,0x3758df30,0xb5b10bce,0x36f265b6,0x3706a3b9,0x37a46e58, -0x36dd9534,0xb8cb71c1,0xb91693c4,0xb82fc719,0x38e550c2,0x398b8ed8,0x39d7a1be,0x3985f030,0x3965642f,0x392aa71e,0x38beed8d,0x381939d0,0xb825f53c,0xb767e45c,0x37226ef7,0x3804f332,0x37e18477,0x37e3a12c,0x381a8380,0xb83730e4,0xb8e627fa,0xb9511161,0xb9976f94,0xb8c2d724,0xb846c16f, -0xb959462d,0xb9db2520,0xba25e087,0xb95875af,0xb9ef9791,0xba251675,0xba26477b,0xba1e02fa,0xba180315,0xba109db1,0xba0c08a5,0xba043583,0xb9820229,0x36937e27,0xb995b456,0xb8a31e9f,0x38a55343,0x3903a91f,0x38b0c67a,0x38954e5a,0x381ef0cf,0x37b04088,0xb4ddfff5,0xb80f13d2,0xb7b5a434, -0xb7b83b1b,0xb76dff0d,0x354daed9,0x379c4b4c,0x385de80f,0x37866bfa,0xb6ed629b,0xb7df277c,0xb8435c78,0x3837b794,0xba27232d,0xba017edd,0xba422877,0xb98d6b0e,0x37e5d807,0x39269c66,0xb9e3704b,0xb81c47ee,0x39a771fd,0x39404bc8,0x390a3451,0x390dea58,0x37c136ae,0xb623ec95,0x388702b3, -0xb8d1905d,0xb9dc20c3,0x38fff789,0x3816eccf,0xb97d3534,0xba38b6f4,0xba1da1f1,0xba2e91c9,0xba442a81,0xba3411f6,0xba2b3243,0xba206289,0xba10002e,0xba185c7e,0xba52cebb,0xba274050,0xba154766,0xb9c7f14d,0xba09ec06,0xba0ce017,0xba0b63ad,0xba04c038,0xba007750,0xba33e898,0x38c7fbd9, -0xb9ebe950,0xb993baff,0xb9394ac3,0xb8a05f47,0xb834eb87,0xb8865989,0xb8813d6e,0xb859d93a,0xb893a8a1,0xb8992a45,0xb85d6eb4,0xb8c3e567,0xb9440c5f,0xb9be25c4,0xb9b75c77,0x38c17fda,0xba3694ba,0xba65b78b,0xba897b9a,0xbaad4aeb,0xba9e555e,0xba8ad365,0xba657081,0xba150190,0xba2620dc, -0xbaa1ba73,0xba5ddb1a,0xba2138d5,0xb906fba5,0xb9efb7ee,0xba0bd3b5,0xba0c20f5,0xb9ea20e2,0xb9bb8098,0xba3c61c3,0xb924cc07,0xb93f34e4,0x389139df,0x38720f70,0x383018ad,0x37003b72,0x37b7da19,0x37bc665c,0x37a64b26,0x3800a840,0x38057923,0x37d09265,0x3838961f,0x389291b5,0x38e4600c, -0xb928f536,0xb8f01e46,0xba1b278d,0xba762df2,0xba923ed3,0xbac82a0b,0xbaaab78b,0xba8b8070,0xba4e3856,0xb9dd3110,0xba29fddb,0xbaea9f16,0xba6c5303,0xba1277e9,0x39f04af4,0xb9b22caf,0xb9adf719,0xb9b1e806,0xb95be4ef,0xb9c9ad23,0xba54d73b,0xb8afd598,0xb77aafc3,0x380f7c7f,0xb8558384, -0xb70a3e1d,0xb71a5e9c,0xb6d4abf6,0xb73fdc76,0xb70db341,0xb7813a9b,0xb750e638,0xb7925daf,0xb72792fd,0xb86d968a,0x379991d1,0xb806e75e,0xb90b9ec7,0xba6570fc,0xbac50c33,0xbb08e667,0xbb462ed2,0xbb34507e,0xbb113cba,0xbabf8a47,0xb9fafee6,0xba702ee3,0xbb363eda,0xbad00cf5,0xba0d1def, -0x3a7c57b6,0xb8e8a774,0xba0fe578,0xba0a5e61,0xb9610ffe,0xba26ae3e,0x39adfb81,0x39f7ead6,0xb914ed03,0x38464728,0xb70178ca,0x37ad79c2,0xb658cfe6,0x36f6788f,0x3658e5be,0x36cf2f5b,0x36bbb0b1,0x3719e557,0x364136d6,0x378e9a6c,0x3689cb6b,0x380669ce,0xb893f68a,0x39948f3d,0x391d47fc, -0x393174c9,0x3a854354,0x3ad72e56,0x3b3b75f1,0x3b287c70,0x3a7d1a02,0x382bb660,0xb8e2c570,0x39acf063,0x3a8120c8,0x3a277204,0xba3b14b3,0x39e459d5,0x3a805329,0x3accfc73,0xb849703b,0x3a05b5b9,0x39ad5940,0x3946aeee,0xb92a6162,0x38d1584c,0xb876d58f,0x379cb823,0xb75f979c,0x36248f32, -0xb6b507e3,0xb5f03d71,0xb6a23ae9,0xb62794a1,0xb6ddface,0x358678ed,0xb7cc6a43,0x381097e3,0xb8954079,0x38a08ccf,0xb99cde17,0xbaae20d5,0xbb056a6b,0xbb3e5da5,0xbb4e1048,0xbb1c8b3c,0xba59d7c5,0x3a8004bf,0x3ad643b5,0x3a5d1274,0x39b2ebb3,0xb97f1fed,0xba721171,0xb92b29d8,0x3a2329cb, -0x3ac892d1,0x3abef0f3,0x3a5db276,0x3ae3d9f0,0x3a3e35b6,0xb98cf40a,0x38b8a2da,0xb7b3b069,0x37702bca,0xb59516d4,0x368daaf4,0x3609c889,0x365393f1,0x36351b79,0x365a81b9,0x362a504e,0x3685b850,0x36e6b2dd,0xb66675e3,0xb6a7e3a5,0x38742a4c,0x396e6431,0x3a81219e,0x3af664b0,0x3b21f301, -0x3b367671,0x3af39d57,0xb841d9a6,0xbafc84e0,0xbb20f21d,0xbab1d22a,0x39f58d71,0x3a926961,0x3a152578,0xb93f0e9d,0xbac1b79b,0xbb2081a1,0xb9eec5c7,0xbb0f0dd5,0xbb83269b,0xba4d62a0,0x39d6c608,0xb92c9c38,0x38536d28,0xb7f41ae2,0x36a5ec13,0xb70902b6,0xb6211ff5,0xb69e7c0f,0xb66ddcb5, -0xb67e10f4,0xb66acb84,0xb695c09f,0xb69c00da,0xb72a472f,0x388e4db6,0xb97dae3b,0xba8c5325,0xbaa31d9b,0xbabb42df,0xbad8d66c,0xbab50f9b,0xba8d217c,0xba36643a,0x3a151e3e,0x3ae109d8,0x3b3f46c6,0x388cc364,0xbae18f2f,0xbb1c8a10,0xba8c659f,0x39065055,0x3a937a76,0xba6ded3b,0x3a7de4c7, -0xbb59d551,0xbaa7f561,0x39294400,0xb80b73c5,0x3836d96d,0xb695c0e0,0x378ae3fb,0x368c1de4,0x37213c5a,0x36dd3a43,0x36ed1565,0x36e34952,0x36a917d4,0x37269d57,0x3581f313,0x380f6391,0xb91f406c,0x39e3fb0c,0x3a815194,0x3a4c32a1,0x3a3a604f,0x39aed6b5,0x38acbc9e,0xb99285f5,0xba4ca989, -0xba6869db,0xba96f29d,0xba77e57a,0xba7c16e2,0xb9d07767,0x3901653c,0x3a47302e,0x3a98bd0f,0x3ab9005e,0x3b10bab9,0x388828ea,0x3a83add0,0x3a9bc994,0xb89292a6,0xb870c5fb,0xb7b25ccb,0xb7dfa8d2,0xb77f0ce0,0xb792404c,0xb7811a9f,0xb77b71bc,0xb76b0907,0xb74e82c8,0xb7625107,0xb73d1500, -0xb7b4fc22,0xb7783b58,0x3899e76b,0x3a1bdadf,0x3a5949b1,0x3a135edb,0x39cafc1d,0x3902e589,0x382ed5b2,0xb95ae191,0xba255fd4,0xba501a08,0xba60b69c,0xba61be16,0xba53218b,0xba605e7a,0xba630ef1,0xba7296cc,0xba2ee047,0xb9ef765c,0xb97214a8,0x39429966,0x39b91100,0x3988ee20,0x392ad561, -0x38c400b8,0x38928cf0,0x383e547e,0x380f2dab,0x380dca55,0x38088e7a,0x37ff2109,0x37f33661,0x37dd68f5,0x37dc9b5f,0x37e5b43b,0x3823e64f,0x38810f46,0xb931b97e,0xb9ac2748,0xb9f7ae9d,0xba1bc305,0xba130614,0xba1e755a,0xba326ff9,0xba482900,0xba5d4d74,0xba524d0f,0xba504c40,0xba4c0f4e, -0xba275574,0xba01a497,0xb9c55fec,0xb96453dd,0xb8fc8722,0xb6ebb6e1,0x39314c36,0xba02a541,0xb9fec859,0xb9b24c6f,0xb9d734c0,0xb99d17a5,0xb954f0a7,0xb8ac6559,0xb87bdfc2,0xb88ccd8d,0xb883b7ad,0xb881b6b6,0xb87d2f5d,0xb86f13ed,0xb876aeb4,0xb86dd17e,0xb8ecdd7d,0xb94edcd7,0xb9351089, -0x395024ea,0x382f6068,0xb693ace4,0xb882e468,0xb8edadad,0xb92e6423,0xb9592f33,0xb984c44d,0xb99d3dd8,0xb9b1cb10,0xb9cb46fb,0xb9eab340,0xba088abc,0xba1cb04f,0xba19c5f3,0xba121aa7,0xba0f99ac,0xba09c1c1,0xb9c64531,0xb9d3f01e,0xb96a0844,0xb8ee9262,0xb82e8bc1,0xb9bc33a7,0xb9508164, -0xb91078aa,0xb8f6394a,0xb8c0a3e2,0xb889cc69,0xb82adf9e,0xb741df21,0x37b6a385,0xb8406d2b,0xb974b8f2,0x39765f39,0x38c21f7c,0xb8b96702,0xb9985280,0xb986c405,0xb997f6bc,0xb9a1f248,0xb9ab5516,0xb9b6b5c9,0xb9c2e6b7,0xb9cbb68c,0xb9d429df,0xb9d94d27,0xb9ddf467,0xb9dd4f81,0xb9dfcd2f, -0xb9d49972,0xb9d21bae,0xb9cccb10,0xb9cb7c40,0xb9cc902e,0xb9803cb2,0xb9412c1d,0xb90c9833,0xba04718c,0xba2d774d,0xba35321b,0xb9c4b920,0xba074288,0xb9a2de5b,0xb9d72a74,0xb9e51797,0xb9e2a933,0xba02cbc7,0xba0890cd,0xb9f95607,0xba189b09,0xb9d8669c,0xba403114,0xba2006d4,0xb9f5801c, -0xb8f3514b,0xb97d7548,0xb98203fe,0xb9a30d9e,0xb981aeac,0xb96c814d,0xb966bf6b,0xb9383185,0xb94f83db,0xb9b9f1eb,0xb96c949f,0xb9337203,0xb7756e11,0xb92c6170,0xb948b4e5,0xb95e0c8e,0xb92b9c23,0xb9072685,0xb99b0c8e,0xba25a769,0xb94c76e4,0xb97ef10f,0xb850013c,0x38aa47ee,0x38eb3174, -0x38a226f8,0x38c6c2ec,0x38c61de7,0x38c98a9a,0x38b296c8,0x38f610ae,0x38a5e6d4,0xb3aa0708,0xb968e4da,0xb9292bb4,0xba057ad8,0xb9a4f7f8,0xb9c0e21d,0xba109017,0xba34f193,0xba0e7b71,0xb9d92115,0xb9b4e48d,0xb90c6602,0xb956fb19,0xba29d8e6,0xb9b7e3b6,0xb9416d41,0x39454fa4,0xb92a0df5, -0xb98921bf,0xb994f7a2,0xb944b017,0x38138410,0xb9e227b3,0xb9bdaf5e,0xb82bf532,0x387f67ec,0x382bb6f2,0xb78e9fae,0xb8183bff,0xb7c05d5d,0xb7cce45f,0xb7ecabbf,0xb7bc490c,0xb7c4b8f6,0xb7f0c5ab,0xb7c28d0a,0x382ba2fd,0x383494c0,0x37eee008,0xb98aef28,0xb9b71b7e,0xb99741c0,0xba1047c3, -0xba4cd3fc,0xba0915f0,0xb9b396cd,0xb99de8b0,0xb80f5c17,0xb9649d7c,0xba82a7f9,0xb9a561f9,0xb888cd3c,0x3a447c49,0xb8db0d74,0xb9229c27,0xb9171f58,0xb8903a4f,0xb690118d,0xba21f3da,0xb951f05f,0x38c725f3,0xb8378570,0xb7295eb1,0xb5174127,0x3792582e,0x370e7839,0x3729e4c0,0x3730c923, -0x371c0129,0x36f6d4d3,0x3775dfd8,0xb4b153c0,0xb6ba0a21,0xb852ef4f,0x38ac2b89,0xb953593e,0xba1290a5,0xba44dfbb,0xbab28525,0xbaf6cc5e,0xbac0dfa5,0xba842dd3,0xba2f2983,0xb6794f4d,0xb9cd09a8,0xbae1be90,0xba6081c1,0xb8f41162,0x3a884c39,0xb912f0bf,0xba1019e9,0xb9da1a35,0xb96b6c9f, -0x3914cdd0,0x39299ce7,0xb7e12b6d,0x382bd0b5,0xb7dcd61e,0x37e04237,0xb7158ff6,0xb6604666,0xb6d0d65a,0xb671b56d,0xb6b63814,0xb6640f0e,0xb6a720d0,0xb6670c02,0xb6c29185,0x379265b2,0xb70569ad,0x379a752f,0x378cefc4,0x399968db,0x3a8260f4,0x3ac71265,0x3b0e73d4,0x3b2115a3,0x3b0a34e7, -0x3a80ff2d,0x3a039117,0x3a1a965a,0x3a81101b,0x3ad8a6da,0x3aaeac7a,0xb8a12d5f,0x3a6333e6,0x3a9f95d1,0x3acceb80,0x398fbdc0,0x3a8278a0,0x3a09a248,0xb90c818c,0x38099630,0xb6727878,0xb7128bcf,0x362d902b,0x360b0014,0x3643d489,0x360b25e1,0x361a255d,0x361c5256,0x35c3112d,0x367e3a63, -0xb5bbb94a,0xb5bb9298,0xb7240641,0x37a42fea,0xb85540fa,0xb9cd7f09,0xba746acf,0xbad3a7b8,0xbb037f11,0xbb111aef,0xbad59179,0xba0e88a8,0x3a5074ba,0x3aa5daad,0x3a2aca69,0x398428ce,0xb9949852,0xba824b33,0xb9536ee4,0x3a040377,0x3aa8bf99,0x3ab08939,0x3a135582,0x3a999f02,0x3956b6bc, -0xb904c6d2,0x384d0936,0xb72e732d,0x36879ff4,0xb62ffa37,0xb5c6f73b,0xb58d90e9,0xb5e6525b,0xb524228b,0xb62701bc,0x35821e80,0xb6bd2907,0x3770f0c2,0xb7a0756f,0x37f04a18,0xb821649d,0x39a389e1,0x3a99a3f4,0x3adad97e,0x3b0fa027,0x3b27ff42,0x3aff93ba,0x39f28b16,0xba5af2a3,0xba94c027, -0xb97d6f07,0x3aa90fd1,0x3ae7c349,0x3a9325cd,0x38d0af8e,0xba8fbf06,0xbad58979,0xb9ba9d2a,0xbadfbfa0,0xbb3f67cf,0xb9064831,0x3956914f,0xb8e6d323,0x382fc671,0xb7ae4326,0x3731523c,0xb63ab19f,0x3646c701,0x3451b41b,0x35f336dd,0x3462df53,0x36657653,0xb68e66d7,0x3703737a,0xb80b2bff, -0x38bb8d7f,0xb927072d,0xba4a8e9b,0xba2cc558,0xba5731ae,0xba739ff8,0xba550a04,0xba24f97a,0xb9dc0f48,0x3a384935,0x3abab994,0x3b01ac79,0xba0934db,0xbadff834,0xbab1cfaf,0xb9d3173d,0x3a2cce4f,0x3ae7c193,0xba4f014c,0x3ad25e14,0xbb36b0d9,0xba5bfcb7,0x3992fa83,0xb8ccf160,0x3869bc73, -0xb7afb08c,0x36fa213c,0xb6d2b2fa,0x351971c7,0xb631a3a9,0xb5b3cdca,0xb5bfb27e,0xb6712192,0x363ae458,0xb689ac72,0x38111927,0xb8c58b68,0x39001bbf,0x3a51f599,0x3a22dfca,0x39ed4906,0x396b046b,0xb7c9d059,0xb997b33a,0xba32b1ae,0xba44e472,0xba739b9d,0xba2dfb78,0xba0b2b29,0x3890ef22, -0x3a46e222,0x3ab31091,0x3ae7a8d7,0x3b120098,0x3b23b61a,0x37c95580,0x3a084016,0x3a04a682,0xb8c9cbe0,0xb796e7b8,0xb74446a1,0xb69d227f,0x370c0ab0,0x35f102c6,0x3689a0e2,0x366b0393,0x365ccee6,0x368f8779,0x366b48be,0x36bc30a8,0xb78bafa9,0xb690df76,0xb6f5afab,0x39c88d21,0x3a36046a, -0x3a1f7f51,0x3a13aa6e,0x39b4cce0,0x3945d52e,0xb87571a0,0xb9c77c2b,0xba03b9e4,0xba0a4605,0xba0cdb77,0xb9f5da03,0xb9e1907f,0xb9987418,0xb9f4d32a,0xb9e21ac3,0xb9c42dd0,0xb9c09393,0x3a0280ed,0x39fff5b7,0x391ab119,0x38a0e661,0x384fdc08,0x3812de62,0xb6c09ba1,0xb788454d,0xb721e3c6, -0xb73e1836,0xb73974d3,0xb73f08e1,0xb72757cc,0xb78186d7,0xb6fe86b6,0x37660070,0x384fc2a1,0xb834621c,0xb9be09c0,0xb9ccf866,0xb9b7f5cc,0xb9d7ecc5,0xb9dce723,0xba017ae6,0xba1184d8,0xba2670aa,0xba18740a,0xba160a16,0xba1351fa,0xb9c7ae46,0xb965afd7,0xb83f71f3,0x3862767e,0x39172b49, -0x39931491,0x39d4d3ec,0xb9a191f1,0xb9a6c2a3,0xb9f7e8fe,0xb92c00f4,0xb94387e9,0xb868b43e,0x38744a94,0x388b8d4b,0x386004ff,0x3874451d,0x38679978,0x386f065f,0x385a97f8,0x388167d0,0x386889b7,0xb74e4fdd,0xb8e83393,0xb90edb8c,0xb8d7145a,0x3798bbfe,0xb864948f,0xb8df94cf,0xb91660ca, -0xb95037a5,0xb97667fb,0xb993d678,0xb97e4857,0xb95d6527,0xb9532efb,0xb95d99c2,0xb9797bcb,0xb98a68cd,0xb98f06fa,0xb993317b,0xb9a38687,0xb9acbe99,0xb95dd2a8,0xb92c922f,0xb9bf69c3,0xb9f8fd04,0xb9fea925,0xb9ad8b73,0xb9de1a38,0xb9d036d8,0xb9d1209f,0xb9cc3270,0xb9c956a6,0xb9c5109d, -0xb9c2297c,0xb9ba9924,0xb9c51224,0xb9927c0d,0xb9b9b026,0xb9a8db97,0xb97dc171,0xb904bbf6,0xb936a805,0xb93ea70e,0xb9550705,0xb961941c,0xb9710450,0xb9864601,0xb9829f15,0xb9830170,0xb97aeb41,0xb97108f1,0xb95fac8b,0xb94e1337,0xb9519b5a,0xb952a437,0xb94a4b55,0xb94d0e59,0xb97b464e, -0xb986a3ad,0xb956349d,0xb9a19d25,0xb84c32cb,0xb7f98ee3,0xb95de60e,0xb8d1a46b,0x33a26f70,0x37c3c078,0xb7bf27dc,0xb825cb7d,0xb82a5b6d,0xb89d03ff,0xb8bd277c,0xb8b4f0a8,0xb79d274e,0xb8a66b37,0xb98d1eef,0xb6d8c517,0xb70de743,0xb986858d,0xb97ec9ff,0xb98a35e3,0xb9a4af83,0xb9876cb7, -0xb97aaf55,0xb971a856,0xb95b32b6,0xb9707eb7,0xb9b3e3bc,0xb9804e16,0xb951f89d,0xb8b6661e,0xb9357dde,0xb94259b9,0xb94cbe35,0xb944af2b,0xb9601dfb,0xb98dffd8,0xb892d682,0xb91d29ee,0xb7ff9fc1,0x35eb1f67,0xb709285e,0x35a13d72,0x36d002b7,0x378a737f,0x379bc3d1,0x37f4804f,0x380f7860, -0x381a5029,0xb5eca1b1,0x36746960,0xb7d75a56,0xb8d715f3,0xb74dc595,0xb96829ff,0xb9cc0d83,0xb9f487f8,0xba1dae86,0xb9f73b0b,0xb9c9bc26,0xb9addf10,0xb956d3ec,0xb986cbbf,0xba1300ef,0xb9af6a55,0xb941bd04,0x38d33576,0xb8a2eccb,0xb913c589,0xb93e0d0d,0xb925744a,0xb92dc110,0xb9d5535a, -0xb7d0432b,0x3728b483,0x380f06e1,0xb5772bac,0x369fd1a5,0xb5e76696,0xb6103538,0xb6bbd0ff,0xb6fb3c6c,0xb725e025,0xb758602b,0xb7423593,0xb414c565,0x3533ec1d,0x37fcfc0a,0x34e33c0d,0x383affd6,0xb9260df6,0xb9c31435,0xb9f17c10,0xba3143c2,0xb9df42a4,0xb998f18a,0xb976d655,0xb8fa429d, -0xb98e1d0e,0xba5653be,0xb99fbb5f,0xb8ab41f5,0x3a037483,0x383f9329,0x37467d81,0xb850afcc,0xb85b0e04,0xb98066b2,0xba06fee1,0x383e9e5e,0xb784ae04,0xb6cafb18,0xb6e71fb6,0x35af6897,0xb54dc10b,0x35f9e1cc,0x360a6946,0x3678e801,0x368a2470,0x36d116ad,0x3679018b,0x362bb2d7,0xb6b143e3, -0xb710a4b1,0xb6bb0935,0xb5592318,0xb9a58a74,0xba46807b,0xba88a741,0xbac037d5,0xba8b8888,0xba3c4cca,0xb9fdde19,0xb8e924ac,0xb9deb3e0,0xbab20a1a,0xba3124c2,0xb807ac5c,0x3a5d07e1,0x39836589,0xb87c1f0f,0xb90c6da1,0xb89e0e6a,0xb952227c,0x39b91d89,0x388c0f51,0xb819859f,0x37af9a47, -0xb680e0cd,0x362fca8c,0xb5b71371,0xb47aa5c6,0xb5d18cc8,0xb5ce788d,0xb6270dfb,0xb61dd906,0xb64a820e,0x35a0fab7,0xb630fd8f,0x378c0a89,0xb7d92cfc,0x381a359c,0x3a0a4224,0x3a302ce2,0x3a8daad9,0x3aadd706,0x3ad00bf7,0x3a9fe1dc,0x39a5e172,0xb8b54443,0x374a1421,0x39c244f3,0x3a8071d4, -0x3a4d6644,0xb99d6da6,0x3a0f9446,0x3a489fc2,0x3a636764,0x38691b6a,0x39ca1576,0x39c5dc12,0xb889f345,0x36e0b4f4,0x35adae4a,0xb6c56a91,0x3648220b,0xb59b0422,0x35c6f1d4,0x3505d6c0,0x35b88ecf,0x35966312,0x36052b9b,0x34e85e18,0x361005e8,0xb68b42d7,0x3595e50c,0xb5923f63,0xb5907c86, -0xb9a05a79,0xba6577fd,0xbaa30c5e,0xbace82cf,0xbad68b0d,0xba8fb162,0xb91f243e,0x3a5d0cf4,0x3a90250e,0x39f42d5e,0x391b4a89,0xb9174c28,0xba06ebd7,0x3990afa6,0x3a44cfdc,0x3a8a3528,0x3a802329,0x39c7b21a,0x3a3a5f8f,0x3808a5d1,0xb848d479,0x37d2aad6,0xb702adf6,0x3641f9b5,0xb605f80e, -0xb5133eb0,0xb5a565d5,0xb58d022b,0xb5b01054,0xb5a76c5b,0xb5a3a421,0xb44697ee,0xb50a4fa8,0x3705fd4f,0xb7ab8b06,0x3818e46e,0x3997bc97,0x3a4c99a1,0x3aa9ae39,0x3ada9c39,0x3ae6626e,0x3a99ff1d,0x388f959b,0xba751ac2,0xba92c84f,0xb9951eb9,0x3a1a855a,0x3a781d32,0x3a695ddb,0x388eaff2, -0xba36ac25,0xba61a938,0xb9348f9b,0xba90a6b6,0xbae84456,0x3906a031,0x37b34610,0xb7d47d00,0x3729d32f,0xb68f16f9,0x3682d20d,0x35773e7d,0x3611a0ca,0x35e24b58,0x35ee629a,0x3606e5bb,0x35af22af,0x35897aed,0x342588eb,0xb71e998f,0x37ba9882,0xb7b6bf7f,0xb9f89dc6,0xba10e108,0xba1ec03e, -0xba32c7f9,0xba0611fe,0xb99c37ce,0xb893fe60,0x3a794315,0x3abc1f53,0x3ad60c14,0xb9ab8ff4,0xba9ad8a7,0xba6bb0f3,0x374dcd99,0x3a6ea500,0x3af33d92,0xb9867a12,0x3aeeb498,0xba9e60e5,0xb931ec29,0x38bbbfcd,0xb7d0ef5b,0x3756d5ab,0xb6c3b419,0xb60a6bd2,0xb6923b78,0xb661adb5,0xb6658c78, -0xb67bdd35,0xb62c3954,0xb6a611f2,0x363a2f91,0xb7192115,0x37fb1e2b,0xb85351ac,0x381a8cee,0x3a25af28,0x39d1de8e,0x39ab59e4,0x3889aa09,0xb82ffa28,0xb94db03b,0xb9dc88d8,0xb9f14bcb,0xba0859b9,0xb95ce47b,0xb945a61f,0x399ad333,0x3a63cd3a,0x3ac954df,0x3b0177f1,0x3b1a6613,0x3b26c138, -0xb933930a,0x3a0e8cfe,0x398a9d72,0xb91485c1,0x381be85c,0xb7b3fa84,0x3736e629,0x36abe1f5,0x37198a90,0x36e52db2,0x37026383,0x36dac7e3,0x3706417d,0x3697e2da,0x36f84453,0xb72b4b7c,0x36e95358,0xb8570113,0x39356db8,0x3a0f9419,0x39dbff13,0x39de9928,0x39966462,0x397ed0df,0x38ab7588, -0xb91de611,0xb99df1a3,0xb9c9135d,0xb9e369bf,0xb9d90a88,0xb9e856f1,0xb9e53763,0xba2b498c,0xba245ff3,0xba0b269b,0xb9e7d1e7,0x39cd8e37,0x3a0dfeac,0x39888e01,0x367344ca,0x380b9dd7,0xb5a071c2,0xb6bde3bb,0xb7ad1262,0xb78d5f58,0xb79172f5,0xb78979f0,0xb787fab2,0xb780aac5,0xb7858b31, -0xb6d22db6,0x33a42f41,0x37b7bfa2,0x381bb4d1,0xb90fedf9,0xb999cf44,0xb9af2b58,0xb9b4c6f8,0xb9c4222d,0xb9ddf5cd,0xb9f7e22e,0xba0a08f7,0xb9fa995c,0xb9ea775c,0xb9dbb5e5,0xb99518ae,0xb92bd8dd,0xb80b3d74,0x38a7ba3c,0x393a78a6,0x398e9e61,0x39d550aa,0xb975ea55,0xb95b4a6d,0xb937aae6, -0xb88f5af5,0xb82d45e2,0x36a7b2ad,0x37d6fd34,0x386b5231,0x384626b5,0x384ae109,0x383fb152,0x383d2c31,0x3833a675,0x38382bed,0x37be84ff,0x35e333dc,0xb74cda88,0xb9151de4,0xb8bd2c54,0xb91e8b60,0xb9483489,0xb9658388,0xb97fedd0,0xb9901e0b,0xb99b173e,0xb9aa6a73,0xb9a3b49d,0xb99ccb75, -0xb9981d92,0xb995fd3e,0xb996bef0,0xb9988345,0xb9964840,0xb98ebddc,0xb990c0bb,0xb9876a7a,0xb95a6d05,0xb954c801,0xb91f8512,0xb929f3be,0xb97e81be,0xb9163382,0xb8d1bb07,0xb90601b2,0xb904da9c,0xb8fbfe61,0xb8f6dc2a,0xb8eca6dc,0xb8e8c5df,0xb8dfe186,0xb88bb2ef,0xb9084af9,0xb93444b7, -0xb8c5286d,0xb8f98bab,0xb9825fc3,0xb97c6832,0xb9852b25,0xb98cf6cb,0xb99216f1,0xb9986a07,0xb9a2041a,0xb99c0f7c,0xb9985bd6,0xb991d486,0xb98c2bdc,0xb9840864,0xb9740aa5,0xb96df0b9,0xb9686cf1,0xb95d93ba,0xb95a3eb7,0xb99316ea,0xb98540cd,0xb95e43b7,0xb96b18b4,0xb9ab291c,0xb9aa6d26, -0xb966ea5c,0xb8e016e0,0xb8eaee84,0xb6a7dbe6,0xb80fd762,0xb82937bf,0xb81d5646,0xb852a012,0xb8613a0a,0xb81ddb94,0xb8ed6c15,0xb8cf1515,0xb97607c4,0xb993f53f,0xb99670ae,0xb94f14c3,0xb9785950,0xb98545c3,0xb9969693,0xb9829838,0xb97bc534,0xb97fe439,0xb9731cba,0xb97fd9cf,0xb9a1790f, -0xb986d6b1,0xb975587e,0xb929074e,0xb972000a,0xb9731b3e,0xb953c9dd,0xb955144a,0xb93e5b39,0xb9a195aa,0xb99851ee,0xb6ad2e29,0x37b7bea2,0x388e3267,0x37ed118e,0x3781eeb3,0x371f47d3,0x3796082a,0x3784568f,0x37b34f9f,0x3794f0b6,0x37d755ca,0x37f0607e,0x3894fe82,0x3704bd81,0x37cea407, -0xb92e32f5,0xb98d0313,0xb9ad8a77,0xb9e5a7c1,0xba0454a5,0xb9d5de30,0xb9b46ddc,0xb9ac3a20,0xb986ac12,0xb99cb158,0xb9fd6203,0xb9c10407,0xb999a051,0xb8ef6376,0xb98b184e,0xb990b024,0xb9491f73,0xb95392d8,0xb8d83aaa,0xb9e9e4e9,0xb85c2a3b,0x388b3fde,0xb7b7da68,0xb783aad3,0xb76a0303, -0xb69e5149,0xb698da05,0xb6b7bbe1,0xb6e2bdc7,0xb6e0b574,0xb7008261,0xb6ff7009,0xb77393f8,0xb794ec6d,0xb7424765,0x38050111,0xb68945fd,0xb96f972c,0xb99de9ac,0xb9e54f11,0xba17c980,0xb9d38245,0xb9a8fcbf,0xb9b33fcb,0xb98cd9cb,0xb9c23c44,0xba30cfd0,0xb9d76ae8,0xb9a1d1ad,0x389085ea, -0xb9a2d710,0xb987c462,0xb89ba44a,0xb925d64c,0xb8f08416,0xb9fa57ae,0x389fca87,0xb7dd69dd,0x3653da4e,0x37193279,0x36ae6b10,0x363cdf04,0x35fbbebb,0x3629108a,0x36472610,0x364fc203,0x3655310b,0x368626d0,0x36ba0e55,0x372646d3,0xb5c6a898,0xb6de8561,0x3796f30e,0xb994b611,0xba1dc8b4, -0xba713723,0xba9ba7ce,0xba665c2d,0xba26545a,0xba0c3ca2,0xb9a8fed8,0xba096729,0xba8c027e,0xba449f64,0xb9d62c66,0x391a56a6,0xb9b39c5b,0xb9ced3d8,0xb8a801b4,0xb90bf38d,0xb96f801f,0xb8453074,0x3822d94c,0xb741e972,0x36d3c25f,0xb6d2cfc3,0xb60e94bc,0xb5cdab12,0xb5870c8c,0xb5a70ef2, -0xb5c477b3,0xb5d44dba,0xb5c5295c,0xb61501b0,0xb619b919,0xb6c14581,0x368530cb,0xb641ec79,0xb710b2b3,0x3978afc8,0x3a03e376,0x3a53ba45,0x3a8f3414,0x3a84de16,0x3a43e586,0x399e45b3,0x375f4cfa,0x38a43c9e,0x398af040,0x3a2a6c3d,0x39d5e758,0xba0d1790,0x38b50e72,0x397e6cce,0x39ae027e, -0xb92c6d68,0x39e339ca,0x3958697a,0xb8ba6301,0x38061941,0xb7554649,0x36dbb3cc,0x33ac9e23,0x35b7d8a4,0x350deb7e,0x3556d6a7,0x3576e393,0x35536772,0x35a1de2a,0x350f8ddb,0x36435d69,0xb49ef208,0x369bbb70,0xb76a8e3b,0x386237d0,0xb9b74e77,0xba4f25f9,0xba955106,0xbab3c9f6,0xbaa155ea, -0xba488075,0xb905a26f,0x3a13fe38,0x3a3e025a,0x399760c5,0x383e4a98,0xb93b4e34,0xb9e9084f,0x38bfd323,0x39e4809c,0x3a3d8dd4,0x3a277c81,0x3912c297,0x398e6045,0x3698c7fc,0xb770fa0d,0x370d1238,0xb6afbac7,0x34cf54a3,0xb5d21617,0xb4be3ee6,0xb5768fbd,0xb536cbd0,0xb56cbccd,0xb536791f, -0xb59c821b,0xb5404fc3,0xb6531843,0x3690f562,0xb6f06e69,0xb4719c12,0x39170ebc,0x3a1b3c19,0x3a67d826,0x3a9373f5,0x3a847056,0x3a023fe2,0xb99b63f4,0xba6c49d9,0xba65eb80,0xb914d495,0x39c62fec,0x39d7ba74,0x388f7b6a,0xba39d7f7,0xba983835,0xba85a6f1,0xb993eb36,0xba8754a5,0xba7a45f7, -0x394cdd17,0xb88080b9,0x37c26561,0xb706fa12,0x36cb7b19,0xb55e5772,0x360a887e,0x3539ca21,0x35b3745b,0x358cfcb8,0x3594b6aa,0x35ba8896,0x358f5a42,0x3676e65f,0xb68ff38b,0x36911c2a,0x37a6321f,0xb993a5d7,0xb9c0ac95,0xb9fa1ce6,0xba08a7ec,0xb9ead8de,0xb987fa15,0xb7f44c32,0x3a29e064, -0x3a604d45,0x3a492855,0xba089c70,0xba80cefa,0xba0c4693,0xb9a2a642,0x38a00132,0x3a0ec162,0xba36855b,0x3a5ff233,0xba3dfbd8,0x38f943f7,0xb7fe4bff,0x37731a9c,0xb73a1839,0x358ff5b8,0xb68d4b79,0xb5a60ed5,0xb62ea27e,0xb6016667,0xb613d392,0xb60686b8,0xb61ba2cf,0xb62a16b8,0xb695161a, -0x3527d3c8,0x37179e53,0xb8547c5f,0x39a84ec9,0x396ba108,0x392b1201,0x368ec18f,0xb8d76cce,0xb984f3c2,0xba00d8ba,0xba0d8d8a,0xba1e83cb,0xb9f1dc7d,0xb9a1f791,0x383dda13,0x39ed9a88,0x3a526ac4,0x3a8d69ec,0x3ab843dd,0x3aaec363,0xb9c9316b,0x388595e8,0x386c0851,0xb845b177,0x37b216b0, -0xb5c4e81e,0x3722367b,0x363c5414,0x36b8a0ea,0x36863aaa,0x369de1da,0x368dcfb0,0x36910026,0x369805a8,0x36bdda46,0x36f81b46,0x3698db4a,0xb7b79154,0x37a67517,0x39c0cc04,0x3999b96c,0x3992e6df,0x3945682f,0x38c6c488,0xb7befac2,0xb91e9b4a,0xb96ab0fc,0xb96b052b,0xb956fb79,0xb97647ec, -0xb9acb3ad,0xb9eeda39,0xba162a65,0xba1ee4dd,0xba1a452c,0xba16acd5,0x399619ba,0x39ca2745,0x3859340a,0xb6e1033d,0x364b711e,0xb7b75bdd,0xb724ee1e,0xb745e80d,0xb725f303,0xb72a674a,0xb72afb65,0xb7217eaf,0xb725e080,0xb7207b26,0xb76735b0,0xb76afcdd,0xb79d168f,0x38609b3d,0xb84b8eb0, -0xb98abd6a,0xb965a006,0xb97cac03,0xb975efed,0xb98dc0e1,0xb99cde57,0xb9afe916,0xb9b340ea,0xb9c10eec,0xb9cddb2f,0xb9a1f358,0xb963ef8b,0xb9021684,0xb7acbf95,0x3892bf0f,0x39326422,0x398dd9c7,0xb949e8e4,0xb9387abf,0xb8e5f911,0x37b2afb1,0x3796eced,0x38622660,0x37ef65c0,0x3808dbc4, -0x37e10417,0x37f2a293,0x37e51290,0x37ed4e73,0x37cef6bb,0x380106ba,0x37f36767,0x386c25bd,0x37c2ee9f,0xb6aa5495,0xb93b7366,0xb92ca9f4,0xb922e234,0xb94a6654,0xb95441d4,0xb96ba051,0xb977a0bc,0xb9833cba,0xb9738ff8,0xb965da8c,0xb969a05a,0xb974f5a9,0xb987bf88,0xb996a7e3,0xb98ce005, -0xb983a0e2,0xb980d27e,0xb96dab87,0xb93a8921,0xb92b71f0,0xb9869897,0xb984bf8c,0xb959251d,0xb897ba21,0xb8d02824,0xb8902ec6,0xb8965258,0xb8937289,0xb8917e1b,0xb88ef79e,0xb88d4b83,0xb87f302a,0xb8d63b14,0xb8aabd31,0xb9591ba8,0xb98a7a35,0xb9824cff,0xb9406499,0xb95f9bb1,0xb960df4f, -0xb9689062,0xb96d8ec0,0xb97356ee,0xb97e36a3,0xb97d6930,0xb97de85d,0xb97721ac,0xb9739a83,0xb96a82a3,0xb9666951,0xb95b2c9c,0xb9540646,0xb946ba1f,0xb9419fa0,0xb987200f,0xb87b2c24,0xb8630639,0xb850c0ee,0xb8899705,0xb8ca30c4,0xb931ccd0,0x381bcd1d,0x3790e350,0x378b741b,0x3791b073, -0x37906d71,0x37905587,0x37907473,0x37919db0,0x378bb216,0x378f14ce,0x3823c494,0xb94026bf,0xb8a4c306,0xb815a48e,0xb80c5476,0xb873cbd5,0xb8721dfa,0xb897f665,0xb85b7e5f,0xb8484c1a,0xb85436cb,0xb84d721d,0xb866cbd9,0xb8ab67d8,0xb86719c2,0xb82ee7be,0xb6f6d61b,0xb8148804,0xb82752ca, -0xb82ebd4b,0xb82c0a13,0xb833a060,0xb8a1993d,0xb8dc3369,0x38307de7,0x384edd27,0x361af43c,0xb74e97ef,0xb68b7bd7,0xb6e49eb4,0xb6c94660,0xb6d5308b,0xb6c7f658,0xb6e86d89,0xb6811cf8,0xb75c9eea,0x3688fe8d,0x38507011,0x38225669,0xb89991e3,0xb81cc5e0,0xb8c1a93a,0xb8f9f587,0xb918d38a, -0xb8c655e8,0xb8918fb3,0xb891139a,0xb84d7579,0xb88fc320,0xb913d215,0xb8a910ee,0xb8183071,0x38427f14,0xb7229ea4,0xb7f9c720,0xb810720a,0xb820c141,0xb7de56f0,0xb91b9005,0x3854b73a,0xb723e479,0xb782f22e,0xb67be637,0x369f8bbe,0x35e0cb36,0x361293f2,0x3616a754,0x360ba384,0x361cdd2e, -0x3603adf4,0x360be46b,0x368b5a6a,0xb64fba35,0xb79246c8,0xb6a81f1e,0x378fa2e3,0xb796f792,0xb88ab6a4,0xb8cdbd93,0xb91e7cf4,0xb85d115c,0xb794510e,0xb8177d4e,0xb80185cc,0xb8a5adba,0xb94e1aad,0xb87e4de7,0x36a6d321,0x3934a90b,0x37c92365,0x37591428,0x3785feab,0xb7718391,0xb8850595, -0xb9252e78,0x3825c9c3,0xb794b737,0x376c8cae,0xb57d7662,0xb524d094,0xb5c554a1,0xb535718e,0xb590baae,0xb57bbcc4,0xb57eab9c,0xb589e0b4,0xb528a994,0xb631687f,0x3685e374,0x36480b9d,0x36f24474,0xb6ed476e,0xb85e260b,0xb951608c,0xb99b13e1,0xb9c3d498,0xb95393f3,0xb8bd4fd4,0xb8a874ce, -0xb80e1d31,0xb90fd51c,0xb9b9dc70,0xb93b929c,0x36d5c8e6,0x39868c1f,0x3885b54d,0xb7aa6e87,0xb600714d,0xb78c4a03,0x36c96d54,0x38cafb8f,0xb7cf4195,0x37355287,0xb6ff828a,0x3587aecb,0xb461db00,0x3588f811,0x345721aa,0x35271cfc,0x34c93057,0x352cce55,0x34162665,0x359c7626,0xb50c8ba7, -0x35deb444,0xb7202a3e,0x379170d5,0xb86ab9b6,0x396c5130,0x39db717a,0x3a031e27,0x3a1bbc8c,0x39f9be94,0x39a33255,0x38c52835,0x36beb932,0x38ac80a9,0x395decd6,0x39e2e77d,0x39ba9708,0xb89b4ce3,0x397a58ed,0x398e0ba4,0x3970c701,0x37fed8ee,0x395f9335,0x3917d266,0xb8879331,0x37e62165, -0xb72fcc27,0x36c0c676,0xb62db2e0,0x351f19ca,0xb537ad65,0xb3d9e5cf,0xb4da2815,0xb458aafc,0xb4d5e833,0xb400da0b,0xb5680d85,0x35d5031e,0x334be125,0xb4c425e6,0x37aa9f5a,0xb919fd18,0xb9ad1727,0xb9e4b6db,0xb9fb9b71,0xb9e9b311,0xb981cb67,0x380910e7,0x39af7d1b,0x39c8500b,0x39193448, -0x37ff7901,0xb8730f67,0xb93b936c,0x393c3ed4,0x39b14582,0x39c43d78,0x39ac6e81,0x38994355,0x38a672ac,0xb6a7a6d4,0xb6102f77,0x34fc05d2,0xb58bf7da,0x35117077,0x3487affd,0x34943411,0x349111d2,0x348fc9f9,0x349c49e7,0x346eae4b,0x34c6b965,0x34a08e18,0xb5104e08,0xb5777d06,0x35d12c25, -0xb7942e84,0x38fa4679,0x39a5ecc3,0x39e8c072,0x3a117312,0x3a0a4181,0x39ae01b1,0x370cf810,0xb9914acc,0xb992e072,0x386795a1,0x3993f4b3,0x39c5f0ce,0x39c90b16,0xb740df5e,0xb984abb6,0xb93ee901,0xb851e148,0xb9c66ae9,0xb9a9b397,0x38ae4102,0xb7de32de,0x373dba37,0xb676cd4c,0x35a69493, -0xb5a0c896,0xb3a3b7d8,0xb50c42fc,0xb4d0a68f,0xb4bfc596,0xb50c32f6,0xb4245740,0xb59bb3e3,0x35f76726,0xb5a08a57,0x367b4713,0x3681711a,0xb8a85278,0xb8f40c07,0xb905ca86,0xb8fb1e8a,0xb8ba3257,0x34bd6ba7,0x38ecb219,0x39f9d034,0x3a0de6f6,0x39d33930,0xb96d65e3,0xb9da00ad,0xb917922c, -0x390cc761,0x39e14f2f,0x3a412136,0xb8842bd0,0x3a55db10,0x379fe60e,0xb76f698d,0x36ae1ac9,0xb6968f38,0x343b430c,0x353eeb94,0x35816528,0x3530ac6d,0x355f10a4,0x353a8c95,0x357745da,0x34e52089,0x35c46140,0xb4a6e475,0x3618516a,0xb71cd27e,0x37775ca5,0xb823f35f,0x391d44c4,0x38e73078, -0x386ddef1,0xb75d0ae6,0xb8721530,0xb8cc31a7,0xb922a87f,0xb92fc758,0xb92ab995,0xb8186b96,0x38136e9a,0x3983e8f7,0x3a0947b4,0x3a47c321,0x3a722435,0x3a8f721d,0x3a8598bc,0xb90d72c9,0x38976af7,0xb835ea84,0x37aec384,0xb6559530,0x369f0dec,0xb6868966,0xb56c0701,0xb5f9ffff,0xb5c62289, -0xb5e3d123,0xb5cabd2c,0xb5ec59de,0xb598e832,0xb6628b73,0x365259fb,0x35d536e2,0x376a201e,0xb83f9229,0x39291fc4,0x3931bc13,0x393a91a6,0x391e2149,0x390064e1,0x389053cf,0x3692bda8,0xb844232f,0xb8a2bbf0,0xb8dd9019,0xb8f3dfe5,0xb91339fb,0xb919b3e4,0xb98727f7,0xb99a3330,0xb9915ced, -0xb98ba8bc,0x3958be2a,0x398b5345,0xb7f8cb86,0x3651c45e,0xb7936866,0x35a1bd2c,0x3697b677,0x368401ab,0x365e5313,0x3682f505,0x366975e7,0x368232b0,0x36625d7d,0x367e5971,0x36a31c90,0x351f2fd0,0xb795a7ab,0xb6dbc007,0x380976ef,0xb8bbe057,0xb8afbd81,0xb8d15f15,0xb8ddde76,0xb902201c, -0xb9110a5a,0xb9254125,0xb9185e93,0xb9119af9,0xb90c0400,0xb8a620e3,0xb800dc4b,0x37d07988,0x38951843,0x38f4c2a5,0x3926ef4d,0x3958401f,0xb890a7cd,0xb7f453fa,0xb834e578,0x382216d4,0x3822ea2e,0xb644eea6,0xb7860150,0xb70f9e18,0xb739b536,0xb72be86d,0xb7323549,0xb72bb4e2,0xb73a765f, -0xb70d1ab0,0xb789846f,0xb61c7ea0,0x382dfa53,0x38580731,0xb8a989c6,0xb9063c0c,0xb8eb61e4,0xb90507d9,0xb9066291,0xb90ef892,0xb9126254,0xb91921c0,0xb90743c4,0xb8ee330e,0xb8d5e8ec,0xb8c268a2,0xb8b4d2a8,0xb8a7b4ee,0xb8a2fde4,0xb89a09bf,0xb8a165c5,0xb88cb6c2,0xb87a62ee,0xb86fab3d, -0xb8adfea5,0xb8bfdd3e,0xb90eebca,0x38458914,0x37f30681,0x37ef876d,0x37f4dafc,0x37f3b4ac,0x37f3acab,0x37f3b745,0x37f4e1d2,0x37ef5aac,0x37f2af15,0x384aeb24,0xb91a4941,0xb8e39e44,0xb8f40b4d,0xb8b96003,0xb8d9a8ef,0xb8dab0ba,0xb8e26219,0xb8e70a4b,0xb8ebd981,0xb8f81313,0xb8e780b4, -0xb8db74bf,0xb8c98e54,0xb8ba3e83,0xb8a7f64b,0xb891c20d,0xb890fcbf,0xb88bc3ae,0xb8835e51,0xb87bff26,0xb8d3ede1, -}; - -const uint32_t defaultHRIR_rom_AlphaL32[470 * 86] = { -0x3e8066b7,0x3d6b6818,0x3e9b1d76,0x3e6eb9f6,0x3e80f9a1,0x3e7fc18c,0x3e872602,0x3e89dc1c,0x3e8bfd52,0x3e879b23,0x3e84b0af,0x3e814fd4,0x3e7d129a,0x3e789b9a,0x3e7672bf,0x3e74293d,0x3e71fca2,0x3e70cc6c,0x3e6dc4f6,0x3e5e0778,0x3e8d7812,0x3d3ed63e,0xbd3edf1a,0xbe2f4824,0x3dc2aa83, -0xbd25c67f,0xbe208217,0xbe25cbab,0xbe20144f,0xbe03eb2f,0xbe21c0e0,0xbe2920f9,0xbe21eb2a,0xbd20e547,0x3e036d5d,0xbe231008,0xbd6c7998,0xbdafc7d5,0x3e88ca90,0x3e9511fa,0x3e95b010,0x3e9c8165,0x3eb08521,0x3eb9821a,0x3ebae5d7,0x3eb09cec,0x3ea5f616,0x3e9aa337,0x3e91d0b0,0x3e8c628e, -0x3e8a3da9,0x3e87695d,0x3e839cc8,0x3e833683,0x3e742754,0x3e790812,0x3e55b244,0xbd6373eb,0x3df04bdf,0x3dbe5205,0x3dad30a9,0x3d57c4d3,0x3ddfaa8d,0x3dfadb9c,0x3de1a54f,0x3d6bbfb7,0x3df7a8a4,0x3e2cd1e2,0x3dda7a9a,0x3dff2189,0x3d8722f0,0x3d6d82e4,0x3e45eb79,0x3d7b915d,0x3e6c7ef4, -0x3eb11802,0x3ea46d18,0x3eb4f88f,0x3eda7dc2,0x3eeb9896,0x3ef00e47,0x3edcb4f3,0x3ec877a9,0x3eb6c7e1,0x3ea61a3d,0x3e9a4b89,0x3e94e56c,0x3e8e8542,0x3e87360a,0x3e8694a2,0x3e654023,0x3e76c045,0x3e0a62a3,0x3d0a16bb,0x3d30f600,0x3d49a008,0x3d646c2f,0x39e8faf2,0x3d718e6c,0xbb857593, -0x3dcbf7b6,0xbca00739,0x3da4897d,0xbb863e7d,0x3d1adf88,0x3d26aa76,0x3d55c4b0,0x3cd473fe,0x3deaa24d,0x3c8d651d,0x3e633011,0x3eb88a9a,0x3eb42f74,0x3ed034a5,0x3f06dd52,0x3f15143a,0x3f16f6ef,0x3f055563,0x3ee7e7c8,0x3ec78e27,0x3eac94ca,0x3e9c4058,0x3e97995c,0x3e8e62c6,0x3e84ce8f, -0x3e83cb85,0x3e5ea884,0x3e53af3d,0x3de973c0,0xbc048f3c,0x3d87c41c,0xbc5690e4,0x3cc704c4,0x3cb97262,0x3ca46547,0x3bc30305,0xba0460d2,0x3d081064,0x3b9a75f3,0x3d055323,0x3d1480fb,0x3d312dd0,0x3cdb67de,0x3d253734,0x3dde5e87,0x3d7d5d30,0x3eb07b3d,0x3ef67b29,0x3ef1d5fc,0x3f008cb7, -0x3f0fd78b,0x3f1a55af,0x3f2149a3,0x3f23b537,0x3f1daa0b,0x3f07c88b,0x3f06710f,0x3ef7fd0d,0x3ed55b26,0x3ece9bdd,0x3ebb640b,0x3ea9e961,0x3e80869d,0x3e7875ef,0x3e0ad375,0xbc01c760,0x3d87824d,0x3ca33f6d,0x3c9a29a5,0xbb34429b,0x3bd9ba9a,0x3c028aa6,0x3c938261,0x3cdcc0fa,0x3c71b331, -0x3cf2a6ae,0x3c625d4e,0x3d7a24df,0x3cab8465,0x3d879f2a,0x3d8ba412,0xbc720628,0x3e57c661,0x3f04dd83,0x3efb1862,0x3f17204e,0x3f231071,0x3f279f82,0x3f201890,0x3f17ad80,0x3f0bcb50,0x3ef7a24c,0x3eeceed0,0x3eeb7f3b,0x3ef503b7,0x3ee63d86,0x3ed35c35,0x3ec9c5b0,0x3e96a713,0x3e90b00e, -0x3e088bca,0x3c5a8ae1,0x3d1e6570,0x3cb3026c,0x3d6b9135,0x3d3345cf,0x3c62038f,0x3c9ff4e9,0x3c484df1,0x3c1251a8,0x3c679b68,0x3c29eab7,0x3d4699cc,0x3cd10a29,0x3ddc9243,0x3d856a5a,0x3e06aed5,0xbd15bc1b,0x3e9003ef,0x3f41de0c,0x3f4c5a58,0x3f74e519,0x3f51c535,0x3f3e12e2,0x3f27a72b, -0x3f0e4542,0x3f086567,0x3f1daae0,0x3f30a24b,0x3f36cc47,0x3f30a1f5,0x3f17ce56,0x3ef90da9,0x3ec9a440,0x3e97a801,0x3e9cfcfe,0x3e025fec,0x3d663dbe,0x3d9fba4c,0x3c3726d8,0x3cf69635,0x3ce6d3d5,0x3c61b7ed,0x3c3e56ec,0x3c9d2142,0x3ce09430,0x3cbc9dfb,0x3c4e1308,0x3c274fa6,0xbd56dd86, -0x3da4f3a2,0xbd8601b2,0x3e0a6d38,0xbaf56263,0x3ef4ad4f,0x3f674a82,0x3f5689cd,0x3f566148,0x3f3a387a,0x3f2e18aa,0x3f1ffe20,0x3f242372,0x3f2539a6,0x3f21119b,0x3f1e2856,0x3f1691f6,0x3f0914d3,0x3ef7da13,0x3ed60895,0x3eb6a440,0x3e8fa95c,0x3e8fcd72,0x3e1b0613,0xbcf4d5b9,0x3d695bec, -0x3d37b250,0x3d156f6e,0x3d010032,0x3c595841,0x3d1470fa,0x3b186edd,0x3d416d07,0x3d026cbd,0x3c772f08,0x3d9a5eb0,0x3c630b40,0x3dfe53d1,0x3be5a3b0,0x3e097457,0x3dabfc72,0x3f07623f,0x3f474961,0x3f33e3f6,0x3f3204c2,0x3f16f9da,0x3f0c949a,0x3f0ef01b,0x3f060e8b,0x3f0d5766,0x3f1f2bcd, -0x3f14bcb5,0x3f080d8a,0x3ef27b5d,0x3ec3651e,0x3e9c3b31,0x3e87b7c5,0x3e6fdbff,0x3e88be13,0x3e3cbc18,0x3abad8ac,0x3dcefee4,0x3cad7ef0,0x3cb47c93,0x3d328723,0x3d1c4f2d,0x3ca7612c,0x3d24dea7,0xbc79506c,0x3cf344a3,0x3cf0e539,0x3d5bddbb,0x3d64178b,0x3d2ec65e,0x3cf25be8,0x3e6a7d72, -0xbdea8686,0x3eb295e7,0x3f03d73c,0x3ed6d07f,0x3edbab26,0x3ed77838,0x3eda89da,0x3edd34c9,0x3ec7664b,0x3eb13389,0x3ea8166f,0x3eb0f721,0x3eba14a4,0x3eb964c1,0x3eb46867,0x3ea3290d,0x3e8fe28e,0x3e7d7b97,0x3e908c06,0x3e057cd2,0x3a8931f3,0x3de42939,0x3c99986e,0x3d601e81,0x3d49c101, -0x3cea9bc5,0x3cc2fede,0x3bc78070,0x3db7f6e1,0x3d1dfc9f,0x3d172146,0x3d8269cd,0x3d1984b0,0x3d9adbf2,0x3d8eb093,0x3e212dcd,0x3de120f1,0x3e6cc823,0x3eb25260,0x3ea2f465,0x3ebdceed,0x3ec06589,0x3ec97fb9,0x3ecf3cd8,0x3ecbece9,0x3eca9fef,0x3ec5f322,0x3eb0c7ec,0x3e9abc11,0x3e806283, -0x3e74313f,0x3e5c9314,0x3e532d6c,0x3e3e5fd6,0x3e76fa36,0x3e24dbc8,0x3ce056e7,0x3d282d6d,0x3d2e1613,0x3d579fe2,0xbc7a2bd1,0x3d5a2b73,0xbcb1ba50,0x3de17315,0xbd422301,0x3d9c7c6b,0xbc6b6825,0x3d085fd3,0x3d3fd4c0,0x3d3ead8e,0x3cb8e5c5,0x3e0446d1,0xbe062617,0x3e7770be,0x3e8d0a0d, -0x3e89985f,0x3e94582f,0x3e97fa1d,0x3e9fbfb8,0x3ea79bd7,0x3e9d540e,0x3e93506b,0x3e8acf46,0x3e7f722e,0x3e6c3f43,0x3e4c0281,0x3e5034ab,0x3e4e782c,0x3e537829,0x3e4aab3c,0x3e5778bc,0x3e3fc463,0xbd8d884e,0x3e0055ef,0x3dd3b7ad,0x3dc96648,0x3d8316fe,0x3e0919e5,0x3e1d1234,0x3e01f22e, -0x3d8427ee,0x3e10c913,0x3e420124,0x3de684ca,0x3e071b9d,0x3d91597d,0x3d827016,0x3e3fbb2b,0x3d694f59,0x3eac6fab,0x3e83ba52,0x3e8d85d2,0x3e8ef9ff,0x3e915d57,0x3e934077,0x3e9762f6,0x3e917c53,0x3e8de23f,0x3e899945,0x3e86b34d,0x3e83fbd0,0x3e7fdb4c,0x3e81cf34,0x3e81730d,0x3e81a546, -0x3e8195b2,0x3e780980,0x3ea09d25,0x3d1a0e40,0xbd8be2d3,0xbe4dbb8f,0x3dc9df9e,0xbd79e4da,0xbe450e4c,0xbe4d6316,0xbe42e4f4,0xbe1f63e1,0xbe4400b4,0xbe48119a,0xbe3bb17c,0xbd7aa61d,0x3e045d52,0xbe3e57c4,0xbd9a3f39,0x3e9b4cf1,0x3eee9e16,0x3f030144,0x3ed73574,0x3ee16cfa,0x3ee8c036, -0x3eef1ab7,0x3ef48dac,0x3ef6e650,0x3ef98874,0x3ef2c530,0x3eeedef9,0x3eeb61bb,0x3ee8196f,0x3ee4a773,0x3ee08288,0x3eddbb0f,0x3edb06e7,0x3ed87778,0x3ed5f9e6,0x3ed0e1f3,0x3ecb0cb0,0x3ef64e1c,0x3eed28ce,0x3ea9fc2d,0x3ef07717,0x3eec3d3d,0x3eac30d8,0x3eb0d6a7,0x3eb0e123,0x3eb1bc59, -0x3eb99280,0x3ebddc5d,0x3ebfca61,0x3ef250a9,0x3ef5c522,0x3eb9c652,0x3efd16a3,0x3f016b8c,0x3f06021c,0x3f01b918,0x3f0e0082,0x3f15d17b,0x3f1fac39,0x3f2343cd,0x3f238f79,0x3f19d4b6,0x3f132abe,0x3f0e8560,0x3f09d3d1,0x3f04846f,0x3efd7419,0x3ef44372,0x3eec80a2,0x3ee55438,0x3ede3a7d, -0x3ecf727f,0x3ed8634d,0x3ecb1042,0x3ec43029,0x3eccf687,0x3eba1983,0x3eb592a3,0x3ebcdd2d,0x3eb9072f,0x3ec54244,0x3ec5f459,0x3ec48de5,0x3ebbc446,0x3ec35407,0x3ecf234c,0x3ed51acb,0x3ee2335a,0x3ee8f666,0x3f01c8a9,0x3f06d4bc,0x3f06160e,0x3f1e8c07,0x3f3092c8,0x3f45e774,0x3f4c0e61, -0x3f4e85c6,0x3f3da364,0x3f3065a4,0x3f26d964,0x3f1d4e80,0x3f14a1fa,0x3f099d6c,0x3f01742c,0x3ef304a3,0x3ee52432,0x3ed31727,0x3eba4751,0x3eb34066,0x3ead50a1,0x3e912b91,0x3e9310e0,0x3e85214d,0x3e6b409f,0x3e754d02,0x3e591c09,0x3e70f95c,0x3e77253c,0x3e6f5db5,0x3e82684d,0x3e8ff4a6, -0x3e9c31a8,0x3eaa226b,0x3ec0b5cc,0x3edede30,0x3eefcdfa,0x3f0e4750,0x3f0eb5f3,0x3f2e5173,0x3f4df71a,0x3f722f1a,0x3f7decfc,0x3f7b9345,0x3f5ac43e,0x3f43169d,0x3f34e6a7,0x3f28444e,0x3f1876ce,0x3f08792c,0x3ef8f443,0x3ee253cd,0x3ece61ec,0x3eb38470,0x3e9619b0,0x3e86cb8f,0x3e480e1f, -0x3e28cbda,0x3de4d2a0,0x3dca43fc,0x3d977921,0x3d69dafd,0x3d583134,0x3d28eb55,0x3d9151da,0x3d93e8c6,0x3dd33aab,0x3e133273,0x3e438e94,0x3e7fa87d,0x3e867527,0x3eb98a54,0x3f236f02,0x3f1c5950,0x3f31d7d7,0x3f61055e,0x3f82c178,0x3f85e09b,0x3f8c9572,0x3f94ef2e,0x3f9bf74b,0x3f97d0b2, -0x3f827fea,0x3f7d6850,0x3f724ae8,0x3f6cbab8,0x3f546c6a,0x3f4220db,0x3f32fe62,0x3f1acf75,0x3ef84e58,0x3ec3440b,0x3e89d64c,0x3e59a332,0x3e32b8c6,0x3dfd62f3,0x3dbcb2e9,0x3d86f625,0x3d86b548,0x3d982276,0x3ddd1a24,0x3dd8d7e1,0x3e11c04b,0x3e39c25f,0x3e6a2af2,0x3e99e8f9,0x3eb3cdb5, -0x3efe137b,0x3f30cea3,0x3f51e380,0x3f6b96dc,0x3f8d4c03,0x3f973ec2,0x3f9c7239,0x3fa38e9a,0x3fa9649a,0x3fb256d2,0x3faeb3d7,0x3fa13168,0x3f9e3754,0x3f935723,0x3f840c8c,0x3f652c8b,0x3f4602c7,0x3f2c3e51,0x3f189919,0x3f053a5b,0x3ee58da7,0x3ec20ac0,0x3e952ad8,0x3e749a8f,0x3e3042f7, -0x3e074d74,0x3dd26c18,0x3dbac4bd,0x3dbf58c1,0x3dbfb9ee,0x3df3eb92,0x3e07f77a,0x3e55a8b4,0x3e8301c5,0x3eb9c412,0x3ee4f470,0x3f14e020,0x3f51849f,0x3f8457eb,0x3f6af469,0x3f773163,0x3f55cec2,0x3f76a99b,0x3f8328ad,0x3f92e379,0x3fa036e8,0x3fa8ea7f,0x3fa47930,0x3f8eeb8c,0x3f73fcbe, -0x3f50a11b,0x3f399f73,0x3f2a4d1b,0x3f24c36e,0x3f0bdd75,0x3ee27b64,0x3ed62e7b,0x3eca4816,0x3ea27ac9,0x3e9bf55a,0x3e6ac309,0x3e4024a1,0x3e22ea67,0x3e02c6fe,0x3e0c3931,0x3e4c4945,0x3e0def24,0x3e22b5ef,0x3e49a5ea,0x3e904a8f,0x3ed40608,0x3f0cffe1,0x3f16bbfe,0x3f68a8e2,0x3f64523f, -0x3f1e6703,0x3f418864,0x3f230910,0x3f6293d6,0x3f895a6c,0x3fa58157,0x3fa0ab48,0x3f98df78,0x3f892c12,0x3f840abf,0x3f769c9f,0x3f5d33dd,0x3f4c3b14,0x3f33b647,0x3f0f2086,0x3efa57eb,0x3ed5ef06,0x3ee7353f,0x3ec929b7,0x3ebbb525,0x3eac1ffa,0x3e84fddb,0x3e64efcd,0x3e2d1e07,0x3e15f41e, -0x3e1ce506,0x3eae1e6b,0x3e517a68,0x3e330c07,0x3e6760d0,0x3e805c6c,0x3ebd480e,0x3ee1e498,0x3f136334,0x3f57aa05,0x3f4b30da,0x3f441d2e,0x3f738c8b,0x3f711f2c,0x3f8bc1af,0x3f93ee8d,0x3f9e1c4b,0x3f97043c,0x3f90ed0b,0x3f85eead,0x3f758348,0x3f5e72a0,0x3f4b37a1,0x3f2e42d5,0x3f1c56c2, -0x3f0baa15,0x3f18e263,0x3f140347,0x3f156e96,0x3ee453f4,0x3ee0880a,0x3ea8021d,0x3e961ae7,0x3e986a8c,0x3e6bee36,0x3e3674e2,0x3e58de7c,0x3e50a50b,0x3e7b9a3c,0x3e8ceb57,0x3eabef64,0x3ebc8b4f,0x3ec91528,0x3ef4a2fc,0x3f267553,0x3f59f2ec,0x3f5664c0,0x3f5d1638,0x3f781a06,0x3f7c0db8, -0x3f8b6a97,0x3f8fe73b,0x3f907abc,0x3f9291e8,0x3f9086fe,0x3f8a3f85,0x3f78535f,0x3f5b0bf3,0x3f40c99a,0x3f2a5932,0x3f1c60b5,0x3f15e3ce,0x3f2584a3,0x3f2a9400,0x3f17802c,0x3f035287,0x3f0103fc,0x3ee1e7c6,0x3ec40a17,0x3e984507,0x3e6e6f66,0x3e6975e4,0x3e55bf94,0x3eaac8a9,0x3e8edc61, -0x3e968840,0x3eaf13f6,0x3ec24ad4,0x3ef1d853,0x3f047b2a,0x3f2dc9c6,0x3f2d7d13,0x3f503603,0x3f5bec8f,0x3f69376c,0x3f74fbc2,0x3f7b452b,0x3f7f9247,0x3f82b19e,0x3f7a6dad,0x3f6fc079,0x3f65a251,0x3f5b3888,0x3f514345,0x3f43e20c,0x3f3eb0b1,0x3f37a250,0x3f2d5b93,0x3f25c688,0x3f22fd26, -0x3f1ba479,0x3f085b6f,0x3ef5ffd2,0x3ee5051a,0x3ed73f67,0x3ea72a7e,0x3ec8e6a2,0x3e94dd99,0x3ed5a974,0x3ea3a51b,0x3eb9d536,0x3ea44b3e,0x3eab8c2e,0x3ed3d229,0x3eef9489,0x3f0646bf,0x3f2204e8,0x3f0d625a,0x3f4b9ca8,0x3f434f5f,0x3f49d5e9,0x3f4d1a72,0x3f519fa1,0x3f5607ff,0x3f5cd835, -0x3f5873e4,0x3f5697ac,0x3f53ea82,0x3f500148,0x3f4bdc98,0x3f46ec28,0x3f415504,0x3f3b8fb6,0x3f36e36f,0x3f33bba2,0x3f2dcffc,0x3f2f0236,0x3eeb10f5,0x3f16d371,0x3f1d5d64,0x3f13b6e3,0x3f0b7efa,0x3f183ec9,0x3f1949a5,0x3f21d0d5,0x3f1644c9,0x3f21b884,0x3f1e1560,0x3f134a81,0x3f1dd2e0, -0x3f18096d,0x3f1fb510,0x3f358e7c,0x3f39caf2,0x3f3d7efd,0x3f363328,0x3f3b5f32,0x3f3b428b,0x3f3d38db,0x3f3e36e5,0x3f402988,0x3f3dc6ba,0x3f3c2f36,0x3f3a652e,0x3f391179,0x3f37ca16,0x3f36c0bb,0x3f35fcf8,0x3f3578ba,0x3f342766,0x3f3362bf,0x3f2e4fae,0x3f3629f8,0x3f335fd6,0x3f1f8fda, -0x3eb07469,0x3f37febf,0x3f20cbbe,0x3ec1a228,0x3ec45ad1,0x3ec240b9,0x3ecbdc83,0x3ec9ea3a,0x3ecdc26c,0x3ed0bddb,0x3f22977d,0x3f3f9c3e,0x3ec3e302,0x3f221f41,0x3f4afa25,0xbd4a6add,0x3d1c19f7,0xbdd0c11a,0xbd37a103,0xbd8b479b,0xbd87ffcc,0xbda0ca82,0xbdaa95fb,0xbdc35e76,0xbd99eff8, -0xbd85c2a1,0xbd62e56e,0xbd558982,0xbd4c2d23,0xbd4bfc23,0xbd58ae77,0xbd5aa2cb,0xbd586a6f,0xbd460f60,0xbce5b559,0xbd9d89f3,0x3d759b0a,0x3e2e2dcc,0x3edb825b,0x3babf80e,0x3e1a834f,0x3ecaa5f5,0x3ec85c14,0x3ec487da,0x3eb8d7a7,0x3ebd4fbf,0x3ebe95b0,0x3ebafdbe,0x3e15839d,0xbcf52bee, -0x3eceaa98,0x3e2a93bb,0x3e810f03,0xbdac1ea1,0xbd9ecab3,0xbdce0449,0xbdeb6134,0xbe1ef6c4,0xbe2ed5e8,0xbe405fb5,0xbe03525d,0xbdbabaf0,0xbd7d70dc,0xbd481bbc,0xbd33c758,0xbd4501e3,0xbd712b0b,0xbd757896,0xbd6cb2d1,0xbd1efbf0,0xbcc47ae4,0xbcadfea0,0x3e7598bd,0x3d8c5cf5,0x3d518bb5, -0x3db02ded,0x3de227ff,0x3cdcac46,0x3cc21102,0x3c453943,0x3d8222de,0x39f805bf,0xbcb22b1c,0x3d40edc0,0x3cf0451c,0x3dc8fdeb,0x3db7f7d5,0xbcc9102f,0x3d88daf8,0xbc5511f2,0xbdb77795,0xbdc82646,0xbe0fe33c,0xbe75d7a1,0xbe8a6fe0,0xbea2c987,0xbe487aa4,0xbde68746,0xbd7da812,0xbd1b6c05, -0xbd126dfe,0xbd33e94e,0xbd888641,0xbd91f442,0xbd8cd195,0xbcc5badc,0xbc2bb233,0x3d89b6cd,0x3e021237,0x3e1115ac,0x3dd8009f,0x3dbec8a9,0x3e0eba0b,0x3d8be20a,0x3e138dcf,0x3d286069,0x3e0a89dc,0x3d42502e,0x3dd93846,0x3d97287a,0x3dc8b55b,0x3dceee9b,0x3dd1a12b,0x3cc352d3,0x3e162f2a, -0x3d01f314,0xbd5d44af,0xbdd0e1de,0xbe4867ce,0xbebed527,0xbedfdf53,0xbef75a46,0xbe8336a4,0xbdd4475c,0xbc8083bb,0x3c716e9e,0x3ce14cbe,0xbb1316f7,0xbd35c65f,0xbd5e36f2,0xbd533726,0xb9a1ea6b,0x3d25363f,0x3dcab891,0x3e30cb93,0x3de1d412,0x3e185abb,0x3dc1b024,0x3d9dd02c,0x3d8af352, -0x3d89b64e,0x3d9a3ddb,0x3d51d1d2,0x3d74558b,0x3d35f9f2,0x3d732c54,0x3db6999a,0x3dd257b8,0x3de17de4,0x3d53172c,0xbcb40f14,0xbe696590,0xbe87b8a0,0xbe9b703d,0xbeb4e084,0xbeb8cac8,0xbec39894,0xbee558b2,0xbef2fb35,0xbed46076,0xbde0b0e7,0xbe5295b9,0xbe64b139,0xbe5b04e9,0xbe6e4858, -0xbe639c55,0xbe4dd5af,0xbdb02be8,0xbd064bb3,0x3da28b48,0x3e6684aa,0x3e1298b5,0x3dfbd66d,0x3dd6c858,0x3dcd7a9a,0x3da5ef86,0x3db056b8,0x3d94d8a6,0x3d581925,0x3d1e3a25,0x3cd8a5d1,0x3d5b7327,0x3cd37189,0x3d676760,0x3d353ba0,0x3d1298b3,0x3e78f2c0,0xbdf415f8,0xbf18e9ec,0xbf2143b1, -0xbf085f46,0xbee87ac1,0xbee741e8,0xbf07e353,0xbf09c7e1,0xbf029549,0xbec95663,0xbef88108,0xbf08c2b5,0xbf121e38,0xbef8bb7e,0xbec0aa80,0xbe92e856,0xbdd083e8,0xbd2fab53,0x3db361ae,0x3e3ebba8,0x3e11da70,0x3dd6aa03,0x3d5011d0,0x3d04acc8,0x3d312afc,0x3d1a8deb,0x3d8623bb,0x3e0518cb, -0x3dd695a1,0x3e0fcc61,0x3e17a6c8,0x3e337113,0x3dbc838c,0x3e370592,0x3d949422,0x3ddeae1f,0xbec8e353,0xbf11c036,0xbedd8e87,0xbe2ae05b,0xbdbbfe62,0xbd7b2c58,0xbe828e05,0xbe8d6328,0xbee13488,0xbf3084ab,0xbf465db4,0xbf433b06,0xbf2d362f,0xbf0f19af,0xbee4c74a,0xbebca73e,0xbe39c3f8, -0xbdb1c1c1,0x3d9d591a,0x3de073ff,0x3e08bb07,0x3e361b3f,0x3df1f628,0x3df1c095,0x3e237074,0x3e39e265,0x3e2ff987,0x3e61a601,0x3e0812b5,0x3e08bb0a,0x3e1f19ba,0x3e6c325e,0x3d892f7c,0x3e2ff5a7,0x3d567090,0xbb83e0ce,0xbe8e68f5,0xbdeb896e,0x3d1ae272,0x3f140ea2,0x3e85e8ae,0x3ca6f1a4, -0xbe8a31e6,0xbea5de10,0xbedb49e5,0xbeef8fcc,0xbf13b042,0xbf1b9f98,0xbf0b9075,0xbefac943,0xbebf5529,0xbe5fec76,0xbddc4fd2,0xbd4d3058,0x3d137181,0x3e7da2dd,0x3e38dac8,0x3e34b74c,0x3e2f4684,0x3e0e8d52,0x3e1bccc8,0x3d9e9b3e,0x3e1c5703,0x3e99b23f,0x3e2103d9,0x3e0cd4bb,0x3de38122, -0x3e3ff1e0,0x3dc09334,0x3e579b13,0x3dfc3791,0xbace7923,0xbe75f4db,0xbdf36b12,0xbd8c6b78,0x3da39388,0x3d902bd6,0x3d049b5b,0xbe4eb13f,0xbe85989c,0xbecdd59a,0xbefe4d0c,0xbefbc641,0xbee4558a,0xbec74132,0xbe7f8a7a,0xbe1a47c7,0xbdc271df,0xbdbda744,0xbdab95bc,0x3cfaf862,0x3e9d8c7b, -0x3e289386,0x3e7f9372,0x3e741f48,0x3e295471,0x3e3c3fde,0x3e39b62f,0x3e30dcc1,0x3e9f8cd0,0x3e3edead,0x3e287e40,0x3dd9d0e9,0x3df63ed4,0x3e247ac3,0x3e3cd196,0xbd7f56de,0x3e86b132,0xbd8b0be8,0xbe09ebfe,0xbc955876,0x3daa8801,0x3d1d6349,0xbc661a34,0xbdfb0817,0xbe4edfa9,0xbe71c613, -0xbe7dd60a,0xbe8b464a,0xbe7ede5e,0xbe4396ea,0xbe0d56a7,0xbda0cc1d,0xbd351d37,0xbc82ecc6,0xbdb1118f,0x3de945f0,0x3ea2491e,0x3e080827,0x3e74da75,0x3e3305be,0x3e47ca64,0x3e661b19,0x3e683ec8,0x3e89d542,0x3e06ddb3,0x3e7570db,0x3e62cabe,0x3e06519e,0x3e3f46e3,0x3e098ebd,0x3e3c9a4b, -0x3d48f562,0x3e99584a,0x3db2021e,0xbc343751,0x3d8baeef,0x3d83b4de,0xbc67c766,0xbd9c4c1b,0xbdf28b8a,0xbdfeacc2,0xbe07cb95,0xbe0ca0c4,0xbdb48720,0xbd42d534,0x3bc7e296,0x3cd9a837,0x3d8a6e09,0x3dcb512a,0x3dd53454,0x3bf62249,0x3dae9d6e,0x3e870af2,0x3e817471,0x3e762d50,0x3e657e2b, -0x3eb1618d,0x3e4a9ac7,0x3eb40b22,0x3de81c4c,0x3eae78e3,0x3e42112a,0x3eacd0bd,0x3e8e44fe,0x3e92d35b,0x3e98b9b3,0x3eb69390,0x3e6c18bc,0x3f28413a,0x3ccfaf0b,0x3d1217c7,0x3d29484f,0x3d057bc4,0x3d2711b9,0x3d332602,0x3d16c346,0x3d788cde,0x3da69be5,0x3dc77b61,0x3e014d74,0x3e1d364b, -0x3e4c2051,0x3e3aa03f,0x3e2cb31c,0x3e18562f,0x3e0b86ba,0x3de251ab,0x3dd36310,0x3f13f63c,0x3e4d9a75,0x3e381c59,0x3e4e67de,0x3e71fb72,0x3d99badc,0x3d845037,0x3d9b6cfb,0x3e4720c5,0x3d9edbd2,0x3d02944b,0x3e26b082,0x3e14a6c3,0x3e8e85be,0x3e92b0b1,0x3db9719c,0x3e6db8b0,0xbe092675, -0xbb4c76f7,0xbd0f2888,0xbd052e11,0xbd0380e2,0xbcfc88a4,0xbcff5f9c,0xbc7fff17,0xbb19bcce,0x3c5578e4,0x3cb1fc5a,0x3cefd123,0x3d309a99,0x3cc799aa,0x3c71577c,0x3ba45d91,0xbb354e12,0x3c7f6a54,0xbde36311,0x3e75a2fc,0x3ee0ee85,0x3f580f9e,0x3deedadf,0x3eccacdf,0x3f467add,0x3f48f0c5, -0x3f46757b,0x3f396a7c,0x3f44bb18,0x3f462ce6,0x3f40cf39,0x3ed1cf6e,0x3d942b22,0x3f534e86,0x3ef23caf,0xbd7c2e50,0x3dea5fec,0x3d3a52ea,0x3e239fd7,0x3dead300,0x3df87902,0x3de05d08,0x3dee513d,0x3debcb26,0x3de48135,0x3dc805e7,0x3db6aeb1,0x3dab49ca,0x3dabdc9e,0x3db0ac79,0x3dc01732, -0x3dc7efd3,0x3dd22711,0x3ddbfc7c,0x3de3cb1b,0x3dd7fe04,0x3e08b18e,0x3d0a8609,0xbcd37735,0xbdf37c53,0x3d7626d8,0xbca1d410,0xbde07041,0xbddd6112,0xbdd71374,0xbdbc67bb,0xbdde8dd8,0xbde9cea7,0xbde127eb,0xbcb2f4f4,0x3da61915,0xbdfc8ac4,0xbd0721ad,0xbd6fae37,0x3e22c7e6,0x3e225661, -0x3e1c2649,0x3e09adde,0x3e12c8d0,0x3e04cbfb,0x3df0a44f,0x3db3b7ee,0x3d9308ff,0x3d83d77f,0x3d83446d,0x3d9712b1,0x3dc5d8cd,0x3ddc2487,0x3df28f3a,0x3e02a773,0x3e087ae5,0x3e0b8f8c,0x3dfedea4,0xbc4ada87,0x3d902953,0x3d850f47,0x3d635bd1,0x3d316b14,0x3d9242b7,0x3daba994,0x3dabf5a8, -0x3d7551b6,0x3daf4bf9,0x3dd148ca,0x3d892714,0x3d8da442,0x3d06b1a2,0x3d17443d,0x3dfdca72,0x3de9999b,0x3e429841,0x3e74bb02,0x3e3e490a,0x3e1245c9,0x3e2d24ff,0x3e1dc6d7,0x3e06c04f,0x3d5ce182,0xba4a1511,0xbc65cd0a,0xbc822e39,0x3ac2f5eb,0x3d30a563,0x3d893762,0x3dc7564f,0x3df6ee7d, -0x3e0a9cda,0x3e17faab,0x3de22bd0,0x3d86b1b9,0x3d7464ec,0x3d5fb39e,0x3d8bc66c,0x3d41b5f2,0x3d73fb3b,0x3d40f313,0x3dcc810c,0x3d50dd4f,0x3da4a428,0x3d092591,0x3d78db90,0x3d3daa31,0x3d7a6cb7,0x3d711bb5,0x3e067db6,0x3de74a1b,0x3e4b6a56,0x3e83fa51,0x3e6436b6,0x3e215d6b,0x3e2c26f0, -0x3e08feb1,0x3de0fc77,0x3cd14830,0xbc856b7f,0xbcaa30a7,0xbbced3ee,0x3ca4969f,0x3db62b9f,0x3df405b2,0x3e15f7dd,0x3e2bf3b4,0x3e3a3204,0x3e36afdc,0x3e15e4b7,0x3dc6be16,0x3dba2f62,0x3d894b78,0x3da03d27,0x3da97822,0x3d86debe,0x3d902d7b,0x3d86fecc,0x3dc0a307,0x3d85c370,0x3d98b713, -0x3da90277,0x3d6cd87e,0x3d56d3d8,0x3dab2875,0x3e4343ee,0x3e980464,0x3f2d1c1b,0x3f2bb99c,0x3f09d27b,0x3ef4feb1,0x3eef63bc,0x3ebe6b3a,0x3e8825b3,0xbcae3d3e,0xbe74917e,0xbef92005,0xbed9bda7,0xbec90583,0xbebf55e5,0xbe8b5cbe,0xbe22c59d,0xbd48a142,0x3c2e9783,0x3d8d13b6,0x3d5e0419, -0x3cdfd2cf,0x3d851005,0x3da5af03,0x3d7368da,0x3d3487a1,0x3d416769,0x3d812036,0x3d96141c,0x3d94becd,0x3d8675c0,0x3dc76695,0x3df0f86a,0x3e64fb14,0x3e63f237,0x3e86f5d8,0x3e859bc6,0xbca58623,0x3ec4c75d,0x3f74d398,0x3f62735d,0x3f3242b4,0x3edd4ea5,0x3e7fe2a1,0x3e8145e5,0xbcdc4af7, -0xbe0f3cd0,0xbe6dfdac,0xbe1e890a,0xbd240437,0x3dfec6e5,0x3e5397c7,0x3e7085ea,0x3e72fa4b,0x3e385bae,0x3e359903,0x3dfbda14,0x3c30ba29,0x3cc1d850,0x3d18f61c,0x3da8595b,0x3dab90d6,0x3d1fc19a,0x3d86b59c,0x3d9348c6,0x3dea0778,0x3dd73dcb,0x3dcd6edb,0x3dd55e96,0x3d8a5e0e,0x3e153bbe, -0x3daa440c,0x3e4c2703,0x3e2482f6,0x3f24d5f5,0x3f5c069d,0x3f190419,0x3e64600c,0x3e6379ef,0x3e7e949c,0x3eac7b15,0x3e197741,0x3daf52e2,0x3e1dde68,0x3e9af1c4,0x3ec247b0,0x3ed122cb,0x3edadb48,0x3ede4c2d,0x3ed8abb8,0x3ec613f9,0x3ebea9d5,0x3e6bff93,0x3e29e47d,0x3e10388b,0x3d1927d7, -0x3d9a4a4b,0x3d73cdcb,0x3d06a184,0x3d964c4d,0x3dc800ca,0x3e2774ed,0x3dd9ce52,0x3db0ea2f,0x3db26c4c,0x3c887294,0x3e12234f,0x3cffc864,0x3e600970,0x3ea13fb2,0x3efe6ee9,0x3e30659c,0xbc3cc81f,0xbeb0c45d,0xbe0dda28,0xbda94cff,0xbd4f6d8d,0xbc5d4a18,0x3dbca1cb,0x3e4f8a47,0x3ea7e142, -0x3ec795bd,0x3ec9a8c2,0x3ebc3083,0x3eb31f8a,0x3ec46bcd,0x3ebdfc04,0x3ebe1a99,0x3e738359,0x3da0068e,0x3dd3a667,0x3da6fb7b,0x3db029bb,0x3db41d79,0x3dbe56ab,0x3db773d4,0x3dcd443f,0x3e1f2d20,0x3df959c3,0x3e056cba,0x3e209cf1,0x3dfc5b66,0x3e24129b,0x3dff5ba3,0x3e5671da,0x3e42572f, -0x3e1b23f9,0xbe0bd0cf,0xbe6b8421,0xbe9903b6,0xbeaca5e1,0xbeb9d7b9,0xbe906d1b,0xbe4b386e,0xbd160308,0x3e206378,0x3e892e79,0x3eb019c3,0x3ec1c38a,0x3ece7a20,0x3eca6423,0x3ed03dd5,0x3e822508,0x3e2e3851,0x3d2a0019,0xbd474efd,0x3a512eda,0x3c9af555,0x3bd1184c,0x3c3eb449,0x3d21bfb3, -0x3de0b616,0x3dd72fac,0x3dae1332,0x3d836d7f,0x3d81c5ae,0x3d37e12f,0x3dff12bc,0x3e24bdff,0x3e15055a,0x3e620b7e,0xbd8c7850,0xbdc2a411,0xbe4e3994,0xbe889903,0xbea86e03,0xbea613bc,0xbe9e399e,0xbe72af3c,0xbdcf85d6,0xbc7efdcc,0x3d7d7b95,0x3e2f6848,0x3e821ae7,0x3e98a179,0x3eafb800, -0x3ea97f64,0x3e9335cd,0x3de21fec,0x3d58bbd1,0xbd71aef8,0xbdc499e0,0xbce2ace7,0xbd99d998,0x3b024cd8,0x3d35c97d,0x3d8b35bc,0x3d9f4577,0x3d832d25,0xbc73e07f,0x3bdb5f27,0x3cbeaa78,0x3d952a32,0x39fa9c45,0xbccc6ea2,0xbc9d3e60,0xbd06ddb9,0xbe250e59,0xbe599f02,0xbe795de5,0xbe93a9b6, -0xbeb0ec14,0xbe8335b4,0xbe34182b,0xbde3c113,0xbc9d8155,0x3d91f27c,0x3e2a1ef0,0x3e37bea3,0x3e4e15ea,0x3e70f0e9,0x3e3a5314,0x3e078953,0x3dd66cf1,0x3d96135a,0x3d84dc12,0xbaedacd6,0xbd560016,0xbceac60e,0xbcb66a80,0xbc59e23d,0xbbe5eaa7,0xbc2331ea,0x3b896c44,0xbbf634f1,0xba39676c, -0x3c8c84b6,0x3c703bb0,0x3cdfa3ef,0x3aca0afc,0xbbb99de1,0xbd1b781a,0xbde8e031,0xbe4bfcac,0xbe815815,0xbe71e6ab,0xbe7ad9d4,0xbe8068ce,0xbe8828d7,0xbe93e492,0xbe9dcea9,0xbe9af19d,0xbe9a9a7d,0xbe966fa0,0xbe926b9e,0xbe8d19df,0xbe87ed99,0xbe7efda4,0xbe663fc5,0xbe549309,0xbe4a0160, -0xbe391110,0xbe317968,0xbe01b9a7,0xbe027a04,0xbe0c1e11,0xbe0204bf,0xbde736a5,0xbde9174e,0xbdeb45fa,0xbe09c96a,0xbe12c147,0xbe15bb0e,0xbe0aeb01,0xbe17b8d8,0xbe2a0c88,0xbe41a049,0xbe4593c6,0xbe52689c,0xbe83cbef,0xbe5a61da,0xbe5a80f8,0xbe5fe63b,0xbe5d231b,0xbe6339d1,0xbe64a567, -0xbe6a4e52,0xbe658bd3,0xbe63af1c,0xbe639219,0xbe5e3fb5,0xbe59e56c,0xbe56d9a1,0xbe5179ad,0xbe4fc1ff,0xbe4bb275,0xbe46d329,0xbe3ef18e,0xbe38c060,0xbe63733f,0xbe6ea930,0xbe292045,0xbe5bd9e6,0xbe6d1729,0xbe3b5a1c,0xbe40c2ff,0xbe3ededc,0xbe3db3b4,0xbe457844,0xbe4b216b,0xbe49f1c3, -0xbe78a0c1,0xbe6e045d,0xbe40fbfc,0xbe85018b,0xbe667d70,0x3e02a845,0x3e188447,0x3dca8d70,0x3df9b795,0x3df228d6,0x3dfb4d70,0x3dd9abba,0x3dd18759,0x3ddc8fb0,0x3deec704,0x3dfa3b4f,0x3dffc0f9,0x3e0327cd,0x3e05520e,0x3e052e2f,0x3e048834,0x3e020935,0x3dfd5ebd,0x3df06187,0x3deae901, -0x3dd2e295,0x3e0c335e,0x3e18973b,0x3e17b2f4,0x3e0619f6,0x3e168c07,0x3e152a36,0x3e1a59f5,0x3e1bbb75,0x3e1b31ab,0x3e1f4677,0x3e2290d4,0x3e2334d4,0x3e1a8dfd,0x3e030d98,0x3e2d9c2c,0x3e2ff4a9,0x3e6383b9,0x3dfb706a,0x3df8ebca,0x3df88da8,0x3df8d370,0x3db24c2f,0x3db24be9,0x3de2af97, -0x3e019b3d,0x3e0eed9e,0x3e12e1ed,0x3e1c7871,0x3e1ecf23,0x3e1caeb7,0x3e1e2e1e,0x3e1889d8,0x3e0e35ad,0x3dfe7d6e,0x3de54c35,0x3de476e1,0x3e18dfbe,0x3e01b9eb,0x3e05083e,0x3e0093ac,0x3e00cb81,0x3def42f5,0x3df78b32,0x3dff893c,0x3e098d41,0x3ded9d8c,0x3dd1a942,0x3dedc449,0x3dfce58c, -0x3e16ac81,0x3e2aa6eb,0x3e05aa38,0x3e42e6dd,0x3df7b745,0x3d96f146,0x3dd6b5ad,0x3df37257,0x3d5f234e,0x3d2170d5,0x3dbc86bc,0x3e026a4e,0x3e1aeffd,0x3e16458c,0x3e288617,0x3e39e98b,0x3e406143,0x3e478644,0x3e3d96d2,0x3e28e4a7,0x3e0ac3e2,0x3dda8a02,0x3dd61153,0x3e03ca89,0x3de5ab1c, -0x3df660e0,0x3de0ba83,0x3ddb1781,0x3dbdc4b9,0x3ddf76b4,0x3dd7d834,0x3dfef09a,0x3db6e2a6,0x3dd3015a,0x3dda2d05,0x3dfb2a2e,0x3e079a27,0x3e3986e0,0x3e214c87,0x3e45257f,0x3dcdbd2f,0x3c9ee695,0x3d48451b,0x3db37f38,0x3d15ce55,0x3d32798b,0x3dee9c15,0x3e094d40,0x3e0b0e34,0x3e00096f, -0x3e0e9e30,0x3e1bcbc3,0x3e23acef,0x3e3842dd,0x3e324f73,0x3e180b7b,0x3de8ab2e,0x3daed974,0x3d9ea224,0x3df12498,0x3ddd48f2,0x3db6c92a,0x3db97c56,0x3da9de72,0x3d829d49,0x3da0d58c,0x3d9ca5a4,0x3db1b147,0x3d5c4706,0x3d260ff6,0x3d6369a6,0x3db48a7e,0x3e10cabd,0x3e27f9a7,0x3dbcd0ed, -0x3ec445cb,0x3a9da1f5,0xbe243b19,0xbdaed9e6,0xbe418189,0xbeb57c40,0xbebb7339,0xbe70a920,0x3d349e39,0x3e7f14f9,0x3e94a718,0x3ea9236b,0x3ec25124,0x3ee2c945,0x3ee6cb7e,0x3ed5bcfd,0x3ebbee0d,0x3e87eed5,0x3e4ab69e,0x3e294414,0x3dfadbc2,0x3defa291,0x3dd4cd24,0x3dc21ed1,0x3da9a062, -0x3d466d2b,0x3d9a0282,0x3db215b8,0x3dd87c55,0x3ddcc6a1,0x3e019eef,0x3e36be9a,0x3dfb00d6,0x3e43e6c6,0x3e4ef6f4,0x3e93d904,0x3ee0f6d1,0x3c86d2ff,0xbf310850,0xbf2d7a7e,0xbf523b1e,0xbf0d82a8,0xbea797fa,0xbe0fe5c6,0x3e04470d,0x3e8de10f,0x3ec2813f,0x3ecf38b4,0x3ecb0cb1,0x3eb67010, -0x3e9b53b1,0x3e838557,0x3e61c6e5,0x3e2761ce,0x3e061f5b,0x3e20d9b7,0x3e3c2752,0x3e193de3,0x3e0a490e,0x3dca140a,0x3db0996a,0x3da8e4bf,0x3dd7bb2d,0x3dd5bbb3,0x3ddaab51,0x3dc137cb,0x3dcf5242,0x3d7ffb61,0x3e0d80c2,0x3d9bc939,0x3e30897d,0x3dc27f89,0x3df48683,0xbeff394a,0xbf9637ab, -0xbf815cfb,0xbf622b6e,0xbf4485ac,0xbf3e793b,0xbf2ac97c,0xbec53c79,0xbe397adc,0xbcc17401,0xbbc123fb,0x3d4eceac,0x3df47f90,0x3e0ce4ba,0x3e1823d0,0x3e18c31a,0x3e17d6fd,0x3dedd0e2,0x3e30326b,0x3e539139,0x3e2dd510,0x3e1f182b,0x3e03aa67,0x3dcf5f71,0x3d3f4967,0x3cf55f26,0x3d7ed8b0, -0x3e27557e,0x3de3daf9,0x3de14e0a,0x3dd4f3f5,0x3e59cf44,0x3d0a33a5,0x3e73bd6b,0xbdc23601,0xbea549ce,0xbf646063,0xbf4efc65,0xbf372cc4,0xbf1ad053,0xbf29ef84,0xbf20e28e,0xbf07088f,0xbeec2c4f,0xbed69532,0xbebcee14,0xbeb1aa6d,0xbe80a1d5,0xbde501d3,0x3d058cd2,0x3de9f201,0x3dbc0080, -0x3e0d7f78,0x3e03a4c8,0x3e2cd96c,0x3e341653,0x3dc88548,0x3dd1c5d2,0x3dd44ca1,0x3ddb4c61,0x3da9cd72,0x3e0ed637,0x3dec1dc7,0xbc2502a8,0x3d67b221,0x3d93604c,0xbcb804ff,0x3d8d3306,0xbd7db673,0x3c61d30d,0xbe4f86f3,0xbec8e628,0xbf0490c0,0xbef7ecf4,0xbef6733e,0xbee97f3b,0xbeae5510, -0xbe4eb617,0xbda9693f,0xbd09228e,0xbda11a9b,0xbe54c7be,0xbe6b3afc,0xbe613fc9,0xbe1e108e,0xbe09b497,0xbd7145cc,0x3ce27576,0x3e1fbf6c,0x3e35f37f,0x3e197661,0x3e07a4be,0x3df36705,0x3de31fb4,0x3daafae8,0x3dae1977,0x3d75aedc,0x3d9e0041,0x3d8117b5,0x3c85083e,0x3d3f3edd,0x3d04af83, -0x3b882801,0xbda302c1,0xbdeb4604,0xbe1cb0fd,0xbec0fcdc,0xbe18d1fb,0xbe88af44,0xbe819546,0xbe8a8f91,0xbe87eb64,0xbe3506bd,0xbdab576f,0xbba77fd4,0xbc9156c7,0x3c620590,0x3d26dc09,0x3b3d5d4f,0xbcdef120,0xbc87aff3,0xbd53d4da,0xbd4b0b41,0xbcd0776d,0x3d6bbc9f,0x3da60c77,0x3de53c8f, -0x3d9b7175,0x3d4ccfac,0x3d8d85d9,0x3ce265b4,0x3c8f48dc,0x3cf548a1,0x3cd5c66d,0x3cad5757,0x3cff8e8d,0x3cae70f0,0x3cee9154,0x3c8dd310,0x3c87f888,0xbcaec886,0xbd811192,0xbdeb79db,0xbe31ae06,0xbe0b09d1,0xbded0b5e,0xbe0a34c3,0xbe0afa94,0xbe0ff6a8,0xbe26f88f,0xbe3bc93d,0xbe571c13, -0xbe784ce9,0xbe8f16b6,0xbe8cad5e,0xbe890980,0xbe86d684,0xbe7203cc,0xbe55601c,0xbe4dcb61,0xbe2e7e72,0xbe26817d,0xbda65d59,0x3ba3e2af,0xbce9ef2a,0xbcb7da8d,0xbc029a19,0x3b99a676,0x3acfb0e4,0xbb8dcac1,0x3a74b548,0xbc3a7d07,0xbc828865,0xbd120b9d,0xbd0e758a,0xbda30756,0xbddd3e67, -0xbe1d1563,0xbe0f89d1,0xbe13395e,0xbc108e1f,0xbcb48ea1,0xbd038143,0xbd204234,0xbd3e3b79,0xbd41abb5,0xbd4b4c51,0xbd523a0b,0xbd4c1703,0xbd509156,0xbd636df6,0xbd7fba84,0xbd874925,0xbd8eb4e6,0xbd9ef85b,0xbda56e04,0xbd9107f7,0xbd88393a,0xbd949b93,0xbdf4a7ab,0xbd793cd3,0xbd35598a, -0xbd53048d,0xbd2905ab,0xba7d7672,0x3b807469,0x3b4ad259,0xbbeedd4c,0x3c443e7d,0x3ce37d79,0x3c152a90,0x3b5cae0b,0xbd00dbc6,0xbd3212d5,0xbbe5c19e,0xbd89cece,0x3d04bd04,0xbaaf04ad,0x3ac6a926,0xbb289242,0xbbda83be,0xbc42a74b,0xbc8a0804,0xbcc7548f,0xbd0334a1,0xbd1da69b,0xbd3cdb92, -0xbd59e02e,0xbd8107cf,0xbd5785a1,0xbd2cd9a5,0xbd0a5405,0xbd03b881,0xbcefee88,0xbc2ce16e,0xbda13617,0xbddc2e4e,0xbe3b296b,0xbd05e6c0,0xbdafbbf1,0xbe221d5e,0xbe2406a1,0xbe1fae5b,0xbe1b34ca,0xbe2021e0,0xbe248e39,0xbe1eb8a0,0xbdaab4e6,0xbc44dbc9,0xbe46b656,0xbde3b9ba,0x3c6e5aee, -0x3d0b05b9,0x3d254630,0xbc855a96,0xbbca3475,0xbc3dc3d6,0xbc271b20,0x3c499a1f,0x3ce97b15,0x3d36a19c,0x3d5e23f5,0x3d786cc2,0x3d80c233,0x3d620790,0x3d49c0b5,0x3d349272,0x3d25864a,0x3d172176,0x3d0d43d4,0x3cfe8839,0x3d0889bb,0x3cb541df,0x3d8b9799,0x3db5365c,0x3e033450,0x3d5f0888, -0x3daa88e1,0x3df42b35,0x3df81c0f,0x3df54d40,0x3de9f363,0x3de599b8,0x3de23155,0x3ddc7250,0x3da5b889,0x3d133914,0x3df40f7f,0x3d9349d8,0x3d602613,0xbd69201f,0xbd9052c7,0xbd8a151d,0xbd659d9c,0xb9dd9f0e,0x3d3b335d,0x3da9946e,0x3de86a23,0x3df8df1d,0x3de6ab10,0x3db8978a,0x3d9a9374, -0x3d863d02,0x3d655aab,0x3d4bfb40,0x3d3f04c6,0x3d1d467c,0x3d0f13f9,0x3d2c859b,0x3dc7a8d3,0x3d8366c3,0x3d87a6b4,0x3d82ccd9,0x3d91c97f,0x3d6641fa,0x3d73c001,0x3d7f04cf,0x3d94c9f8,0x3d5f258c,0x3d352c11,0x3d4a6211,0x3d0a8732,0x3d2362c9,0x3d35daea,0x3a7045d4,0xbd74b216,0xbe01f562, -0xbe3896c3,0xbe357a0b,0xbe2b6347,0xbd70c906,0x3d1d8e8b,0x3de1eebb,0x3e38689c,0x3e63e47f,0x3e6ca505,0x3e4a195f,0x3e1fd19e,0x3e011423,0x3dc2c846,0x3d94eaf7,0x3d75f0eb,0x3d30f630,0x3d204670,0x3d7b5913,0x3da023e4,0x3db94aed,0x3d9ec9df,0x3d85c73d,0x3d9beb10,0x3d71912a,0x3db47782, -0x3d89799c,0x3dc0d341,0x3d71080d,0x3d7b4fe7,0x3d36a345,0x3d077488,0x3cbe0829,0x3c18457d,0xbd37a622,0xbdb9a699,0xbe38728a,0xbe5ce42a,0xbe5cafd8,0xbe50c0dd,0xbd4e1b31,0x3db3ab56,0x3e49a85d,0x3e975fc5,0x3ea8d6ed,0x3e97e1d3,0x3e6c8215,0x3e3e582e,0x3e1a0a43,0x3de72973,0x3db4bd63, -0x3da4c184,0x3d5a8216,0x3d5e0f84,0x3d984406,0x3da9d489,0x3da20039,0x3dd16756,0x3d9b68ef,0x3d88b05b,0x3d7ce0d9,0x3d9d2c65,0x3da7877e,0x3da01035,0x3d609f0c,0x3d26d1fd,0x3cf9be64,0x3abf6013,0xbc2b89a2,0xbc4fb521,0xbd6eb74a,0xbec47c34,0xbeed6d11,0xbeed349a,0xbf095213,0xbef47dd5, -0xbe84a43a,0xbdd8a000,0xbc756756,0x3da3919e,0x3e44d7ab,0x3ee3a6a9,0x3edbba8a,0x3ec3dbee,0x3e93707d,0x3e3da9ba,0x3dde8ec2,0x3d835dc6,0x3d38e48a,0x3d2d8384,0x3dbd1091,0x3e1a45a4,0x3df4d8a4,0x3dd7653e,0x3dc3faa5,0x3db6f612,0x3d834cef,0x3db7a48d,0x3db1a300,0x3d9444d4,0x3d515d02, -0x3ca36a05,0xbb1cf98d,0xbd04fdf0,0xbdad762f,0xbe069c2f,0xbe618c72,0xbf03e467,0xbef7b81b,0xbdba6cd7,0xbd94b568,0x3df22c99,0xbd2a7fcb,0xbe5023cb,0xbeee6a39,0xbec5a678,0xbe925373,0xbe0c4473,0xbd91dff7,0x3bea2da1,0x3d86aafb,0x3dce6e1d,0x3e01918d,0x3e00f3ac,0x3e0ab498,0x3dedf660, -0x3dc9de45,0x3de532fd,0x3de31abb,0x3dad69cf,0x3da4a9ab,0x3d947c90,0x3d5707ac,0x3d93df28,0x3daa4fef,0x3ddde9b6,0x3d9be7a1,0x3d72df66,0x3d2a5fd9,0xbbf98293,0xbd88e638,0xbe2b2cb1,0xbe8e17d9,0xbef8d2ee,0xbdd7ea0f,0x3f217e7e,0x3f084641,0x3f02183b,0x3de0c2e8,0xbde8cc73,0xbe9e3ad3, -0xbed06e59,0xbebffe8d,0xbe9b1562,0xbe759896,0xbe4a2688,0xbe37a79e,0xbe2bbc29,0xbde7c991,0xbc12669a,0x3d0b1bff,0x3d76b383,0x3db6a9f5,0x3da1eb79,0x3d9e4a52,0x3de2580e,0x3dc46f11,0x3dc84173,0x3dafa9a9,0x3db552de,0x3db1f94c,0x3dc7bd3c,0x3d0366a6,0xbb04b1f2,0xbb38cbc7,0xbe04f3e7, -0xbde473d1,0xbea9b199,0xbe0cfe65,0xbd834dd7,0x3f0c92f9,0x3f16361b,0x3ebef686,0x3e0229d5,0x3e2a7267,0x3e46ae01,0x3e32ce9d,0x3de46e0c,0x3da79bf3,0x3cfca39d,0x3dc9149a,0x3db1adfe,0x3c253a14,0xbc69e803,0xbcd152e5,0xbbb3d48b,0xbd08eaf4,0xbd57ffd9,0x3bda24b2,0x3dadde0d,0x3d633627, -0x3d4e206b,0x3d2b89e1,0x3d0baa09,0x3d04ef5d,0x3db3f23d,0x3dc6dc00,0x3cf2917e,0x3dac3a83,0x3d5de32b,0x3d0fe36b,0xbd165410,0x3d0ee6e8,0xbde32022,0xbcd2f1dc,0x3e13892d,0x3ebc93a6,0x3eb095ab,0x3e8315de,0x3e57c67f,0x3e12fcd1,0x3da8964b,0x3d9f68b7,0x3d7deb40,0x3e0e7959,0x3e8ca9ae, -0x3e915743,0x3e81b08e,0x3e3c0712,0x3de26208,0x3c9c8092,0xbdbe22c5,0xbd9951eb,0xbd810157,0x3c7081d1,0x3dc4915c,0x3cea5f75,0x3d0153da,0x3d88c3a4,0x3d8527cc,0x3d778c05,0x3d719dc0,0x3d78b281,0x3d0aecdd,0x3c95a28f,0x3c6faa7e,0x3d84d859,0x3d37633e,0x3cc65791,0x3cb4fa06,0x3e8a001a, -0xbd4e9ebf,0x3e6396ba,0x3e67b37b,0x3e33cbec,0x3e353453,0x3d85a19a,0x3baf4549,0xbca795d1,0x3c0bd1f2,0xba3bced5,0xbbbd3da8,0x3c8a3c1a,0x3cc919e0,0xba8a0d12,0xbd3b20f4,0xbd8ad8e0,0xbdaae4fb,0xbd3d688f,0xbcbd3245,0xbc247477,0x3d0dc230,0x3d2698d3,0x3d47f80c,0x3d0ba758,0x3d248e16, -0x3d5d4f48,0x3cba798a,0x3c4d87d8,0x3d44633e,0x3d246a46,0x3cfe5667,0x3caed1a9,0x3cbdb3b5,0x3d495470,0x3c87836d,0x3d88afda,0x3dc437de,0x3ddd3257,0x3e0c8ad6,0x3e0a4818,0x3e1aa876,0x3dfe68d2,0x3de3d44c,0x3db39099,0x3da6c455,0x3da8c2c2,0x3db7cc8b,0x3d754050,0x3ce1b56f,0xbc129249, -0x3c03e326,0x3c590d9a,0x3ccf926e,0x3c984a16,0x3d73a6e2,0xbbb4b733,0xbda94d58,0xbce9399c,0xbc3fccca,0x3b972086,0xbc69b7be,0x3d1d00f6,0x3c07cb94,0x3d7fe33f,0x3c987d86,0x3d23c744,0x3c606449,0x3c9be2ce,0x3d28bd91,0x3d54ed47,0x3d91c795,0x3dcc211c,0x3d2341ce,0x3e0fe72a,0x3e0f83d1, -0x3e129928,0x3e18a855,0x3e1cc671,0x3e2258d7,0x3e29bc85,0x3e21fb37,0x3e14e366,0x3e0997c9,0x3dfae31d,0x3de82897,0x3db2aaaf,0x3dcbb31d,0x3ddb58f6,0x3df4fec7,0x3df46106,0x3e088e86,0x3e1095f2,0xba37ab69,0x3dbc23f6,0x3dc02454,0x3dd02f26,0x3dae6fac,0x3def4019,0x3de314a4,0x3de78099, -0x3dc7f299,0x3de55263,0x3ddd1221,0x3dc6ca01,0x3dccc1a7,0x3dbd0eae,0x3dbc47f8,0x3de68eed,0x3e0a5e12,0x3e143b71,0x3e036e08,0x3e0b7e16,0x3e0b9439,0x3e0ff99b,0x3e133416,0x3e17f159,0x3e17fe1d,0x3e1a747b,0x3e1b9510,0x3e1dd060,0x3e20bbad,0x3e23d632,0x3e2227e6,0x3e1d3d23,0x3e1967cd, -0x3e1a0c43,0x3e0ee8a0,0x3e2b8dbb,0x3de97593,0x3daa6b85,0xb969d2fd,0x3e02a1b0,0x3dba2fdb,0x3cf2e9e4,0x3cfac6dc,0x3d057cfd,0x3d26349f,0x3d1cc3ff,0x3d2dd830,0x3d37346d,0x3dc1720c,0x3e07073d,0x3d0cfbcd,0x3dcb57a7,0x3e197d97,0xbd244668,0xbce0d93f,0xbc4ecf0b,0xbc5d5fbc,0xbc1d88d8, -0xbc1cf977,0xbd0ed111,0xbd5898c0,0xbd996fac,0xbda2f852,0xbda563d8,0xbd99bfe6,0xbd84d2f8,0xbd693c6e,0xbd53b4bd,0xbd3fe360,0xbd32474c,0xbd2d715f,0xbd1bd71e,0xbd07d13c,0xbd24b0e6,0xbcffdc8b,0xbca47603,0x3cb148cb,0xbd171492,0xbca7ee28,0x3c93598c,0x3c9d6c73,0x3ca3506d,0x3c8a6edd, -0x3c947000,0x3c7f13a1,0x3c6a8ca9,0xbccaee19,0xbcf0bb40,0xbb494cf0,0xbce192e3,0xbd5a8481,0x3c5d4e68,0x3d3d1c0b,0x3d25922a,0x3d0f847b,0xbd028568,0xbdb66b72,0xbe1668e3,0xbe313ae4,0xbe2e3bbb,0xbe0d746e,0xbdd69036,0xbdaaedca,0xbd9b0e97,0xbd830acc,0xbd6664df,0xbd5f2d41,0xbd284146, -0xbd0f8ecc,0xbd09a272,0x3bcac87c,0xbca8af6d,0xbc9e0102,0xbc66f2f6,0xbbe7f8ab,0xbc7ac2db,0xbc030004,0xbbf7b541,0xba3458b8,0xbb8d1d7e,0xbba7bb7c,0xbb1ef024,0xbc7eac20,0xbc94a180,0xbcf9d7bc,0xbbf9224b,0x3a5e9640,0x3d2f5a2e,0x3e2858a7,0x3e097371,0x3dfd726d,0xbc56ec23,0xbe039449, -0xbe789ec4,0xbe9471b3,0xbe913dc6,0xbe714c5f,0xbe39a610,0xbe090f9b,0xbdf29a94,0xbdb7c87b,0xbd994df4,0xbd8fe40c,0xbd25a1e3,0xbd119d0a,0xbc5ee5a5,0x3ae1fb05,0xbaab280f,0xbc28e869,0xbb9f4431,0x3c6585e6,0x3a3951b5,0x3d083a3f,0x3cc530c8,0x3d2bdd73,0x3d1a4509,0x3d351ae1,0x3d2bd58d, -0x3bf83741,0x3a96c258,0xbb891061,0x3d0fc2f9,0x3cf890ab,0x3deea082,0x3e8a38a5,0x3e71adb1,0x3e53065e,0xbc6e05ae,0xbe4a422a,0xbec1aced,0xbee6fe6a,0xbed03571,0xbe8e5f7c,0xbe34f1d3,0xbdfde1a9,0xbdf039f5,0xbdc5b5a5,0xbd9d3ea0,0xbd9b0456,0xbd27619a,0xbd0b9967,0x3be0b0c5,0x3d6b9277, -0x3cb2adad,0x3d6f1fba,0x3d0aff61,0x3d1b83b7,0x3d081b13,0x3d71910a,0x3d9bb040,0x3d9a1ad0,0x3d8b0cf7,0x3d81dc69,0x3d8cc2cb,0x3c92970e,0xbbbf2242,0x3cda0576,0x3db78c02,0x3d44ae73,0x3e8cd91b,0x3eb5de23,0x3ebc65db,0x3eb8db28,0x3e2e2a95,0x3c6546e9,0xbe1880d0,0xbe8efdea,0xbeda71f9, -0xbf140d9c,0xbefe1e07,0xbed63541,0xbe96d35f,0xbe6e424a,0xbe33eed2,0xbe197fe9,0xbd784d56,0xbd2feb4f,0xbcf41235,0x3c077028,0xbcc50a9b,0x3c8c3a02,0x3cd5399a,0x3d4c6985,0x3d4d5600,0x3d84ebbb,0x3d7f6aaa,0x3d642d56,0x3d826458,0x3d9adf5d,0x3d99d466,0x3df08481,0x3de3d7cb,0x3daae193, -0x3c34452d,0x3db46b96,0x3e61d052,0x3dc66f16,0x3d33b10f,0xbe125ea9,0xbe1acc5b,0xbdad0448,0x3e003a39,0xbd8d463f,0xbe819ad1,0xbf030a8d,0xbef3cce1,0xbef97e48,0xbefa0fdc,0xbeca4ffd,0xbe992b97,0xbe59f989,0xbe164e98,0xbe08c0c5,0xbd7d931b,0x3cd775f5,0x3ce47659,0x3d58a08d,0x3d286fd8, -0x3d587d65,0x3d778413,0x3d9c0940,0x3da7ad98,0x3d9ee85f,0x3cfdfaa4,0xbb32cdf4,0xbd1ecbe6,0xbd6a8cd0,0xbd2a2b09,0xbce25adc,0x3d543adf,0x3e9aaf51,0x3d7b9068,0xbf1a94f9,0xbf1b0a6e,0xbf2e091c,0xbe1af26c,0x3e264f3b,0x3ef9accd,0x3efb2c80,0x3ecfa861,0x3e84b3a2,0x3e4cca8d,0x3de844c1, -0x3cc38127,0x3cdda582,0xbb8f5609,0xbd84263f,0xbdf81e00,0xbe35fc09,0xbe07d420,0xbdc6963b,0xbdb71644,0xbceb7479,0x3b0adde2,0x3d170ec2,0x3cdfd4c1,0x3dd001dc,0x3dc8598a,0x3cab6bea,0x3d872649,0x3d991a8c,0x3ce36dae,0x3dccaf41,0x3db58dc7,0x3e4cf0c2,0x3d2321c4,0x3d4912fb,0xbef1a38c, -0xbf0c72b7,0xbe9a87cf,0xbe1f92e3,0xbd15c16d,0x3d8aa42f,0x3e87f626,0x3ec5ee70,0x3efd77f4,0x3f16df96,0x3ef4c556,0x3ec7b4bd,0x3ea7d93b,0x3e77f15e,0x3e18429b,0x3d87bbb9,0x3d163f82,0xbc4a7efc,0xbde2669e,0xbd8f110e,0xbd8ae6c9,0xbd9f1ef7,0xbd5355ee,0xbd09d933,0xbcea86ef,0x3d51ac7f, -0x3dab49e5,0x3d10fb63,0x3d9b954f,0x3d8feeaf,0xbc9d3816,0x3d14f118,0xbd226fd9,0x3d2b52d1,0xbcfa6505,0xbc582715,0xbe1dcaef,0xbddc01d0,0xbd89eb15,0xbe20aadc,0xbdaaefe0,0x3aeffe0f,0x3dd7e1c8,0x3e649ed5,0x3e8a165f,0x3e7a1dc2,0x3e8c2e56,0x3e95989c,0x3e8e258e,0x3e8bb95d,0x3e711aa7, -0x3e461f77,0x3cdd77d4,0xbd6f8ef6,0xbdfde45f,0xbddd54fc,0xbd9c88cc,0xbce7a604,0xbca1741b,0x3b8b32a1,0x3d44133b,0x3d841280,0x3d8e1409,0x3dbdf5a6,0x3db32f88,0x3db3fc83,0x3d563489,0x3d3f8da5,0x3d0af92b,0x3d0ee030,0xbe18f217,0x3e1c7501,0xbdacbe63,0xbd9a5c87,0xbd173b6c,0xbda9c4f2, -0xbc7da13a,0xba43364d,0x3bb6929b,0x3b1317f8,0x3d24ba43,0x3da17750,0x3daa08d9,0x3dbfde68,0x3dfc28e6,0x3e1fb7f5,0x3e290f10,0x3e2f8bd4,0x3dbe0adc,0x3d8430c3,0x3d2e8ba8,0x3c88c75d,0x3d3b9658,0x3d14423a,0x3db282ad,0x3dc0e370,0x3d8eb74e,0x3da3ccf7,0x3d9b6e31,0x3d7009c8,0x3d056b1b, -0x3cb9f1c3,0x3cccdcb1,0x3d649c32,0x3d68f6f3,0x3da79e90,0x3d3c86f7,0x3c82d955,0xba18f520,0xbce76959,0xbc106db9,0xbc0889ea,0x3bea3bd0,0x3cbe37a6,0x3d4ecc49,0x3d73f451,0x3d8540a6,0x3d92f313,0x3de58a9d,0x3e1ceb60,0x3e491b3e,0x3e3b59ca,0x3e36b8b8,0x3e375763,0x3e4bc9e8,0x3e4ba1b2, -0x3e6177d1,0x3e57c6d5,0x3e4c1cac,0x3e41cf26,0x3e1afe4f,0x3e0558dd,0x3dc3a22e,0x3dc83207,0x3d420edb,0x3d9106c3,0x3d2ce37f,0x3d89653d,0x3d3a3385,0x3d1b9599,0x3cfde8d1,0x3cf98361,0x3a998c14,0x3e07b475,0xbbb80c7a,0xbc0e86be,0xbbb28c56,0xbc0f683b,0xbbfcac4d,0xbc2d5f08,0xbc85c56d, -0xbb13860b,0x3c730607,0x3ce5324a,0x3d366249,0x3d6c31e1,0x3dad1ade,0x3db3aca6,0x3dc40b4c,0x3dc260b0,0x3dbf0446,0x3da8d7fd,0x3dc0624b,0x3e291fcb,0x3db1c003,0x3d9cd7ca,0x3d8db57e,0x3d89d1e1,0x3ce5888f,0x3cc17641,0x3cdb4c03,0x3d295b62,0x3ca47dd1,0x3bdd9cf7,0x3cefb684,0x3cd2f181, -0x3d4e4821,0x3d69de9e,0x3cac7a52,0x3d339da3,0xbc8d67fe,0x3c49c1a0,0x3bbeca15,0x3bdcc478,0x3bc19459,0x3bc8e507,0x3b96c02f,0x3c478401,0x3c8b0b07,0x3cbf35ed,0x3ce171d0,0x3d00e79d,0x3d126590,0x3d02e56b,0x3cfcff9f,0x3cfff5bc,0x3d09d120,0x3d2073f6,0x3ca81f50,0x3dbe6344,0x3df87df3, -0x3e349121,0x3d575c56,0x3dc782fd,0x3e1ac02e,0x3e1de385,0x3e19c56b,0x3e10f47b,0x3e17179b,0x3e16d18d,0x3e107356,0x3daef76b,0x3cc1320d,0x3e1be4ba,0x3db93410,0x3c65b785,0xbcd8b56e,0x3a538c7b,0xbcd32b70,0xbc815d34,0xbcbd78ba,0xbcd66379,0xbd1210c0,0xbd1828b6,0xbd0646ec,0xbcfc3d4d, -0xbcf934dc,0xbd00fb82,0xbd025c5b,0xbd02c7bd,0xbcf8860a,0xbd058c80,0xbd056643,0xbd01c8c3,0xbd05c3c8,0xbd027b38,0xbd04f6f2,0xbcb438b8,0xbca6ea83,0xbcf3d480,0xbc87caca,0xbc6d381e,0xbcc1e065,0xbca26b58,0xbc949d0e,0xbc9ca00e,0xbc7efe5d,0xbc5d93ea,0xbc6f845e,0xbbc8efe2,0xbc0ef067, -0xbc1ac15f,0x3b8d9824,0x3d8c9770,0xbbc17054,0xbc95d254,0xbcae6749,0xbd0d1858,0xbd7b6e31,0xbd88c9e5,0xbd435e18,0xbd345041,0xbd243ba3,0xbd2ef864,0xbd340064,0xbd2a9662,0xbd0c91ae,0xbd1c1f5c,0xbd282d9a,0xbd2de8db,0xbd3caddf,0xbd423b8c,0xbd329e1b,0xbcfaaa29,0xbcf2ad94,0xbcbeb07c, -0xbc983d0b,0xbc51b397,0xbc0a92af,0xbb45a483,0x3b0236c7,0x3ad2ea5d,0x3b37ea47,0xbb31b67a,0xbb6c9db9,0x3bf545df,0x3c9c1a3d,0x3d066765,0x3c7952e9,0x3daea8a4,0x3ca0e958,0xbd5cf32e,0xbd21ab56,0xbd5fe1d6,0xbdd2f8b9,0xbdcb2481,0xbd7b7d9f,0xbd8985cc,0xbdac0065,0xbdcc7a70,0xbdd22be5, -0xbdc98f00,0xbd9e67d8,0xbda3363c,0xbd9738e3,0xbd88a26e,0xbd94b401,0xbd93f915,0xbd7cadcf,0xbd34e5a3,0xbd0a6442,0xbd01651d,0xbc87d070,0xbb32f6e2,0x3b1964f0,0x3c8ae951,0x3c8ecf1f,0x3cc0ec00,0x3cae7a22,0x3cef7169,0x3c928eb9,0x3d084d69,0x3d1a6509,0x3d904538,0x3d3e2aa0,0x3e28d368, -0x3d118164,0xbd956c1f,0xbcf61a66,0xbd310b0b,0xbdfb2c27,0xbe170a2f,0xbda391b5,0xbdbb3554,0xbddfd523,0xbe060d66,0xbe07a064,0xbde65847,0xbd8f8fe3,0xbd896849,0xbd8d992e,0xbd8865c2,0xbd9d7b93,0xbda7f9c2,0xbda7e650,0xbd1f01ad,0xbd185311,0xbc9ae322,0x3b069898,0x3c86937f,0x3c2bfb45, -0x3d2d4899,0x3d7c464c,0x3d6e66ab,0x3d4f4fec,0x3d3f066b,0x3d373352,0x3da20331,0x3dfd282a,0x3e00c07d,0x3db1f496,0xbd89bdf5,0xbebd751b,0xbeede34b,0xbee5513a,0xbeea8872,0xbe920c88,0xbe0df14f,0x3c35e72b,0xbd83b344,0xbdd0438f,0xbe319912,0xbe85f916,0xbe97aaa5,0xbea846ee,0xbe82ab93, -0xbe56316b,0xbe43f589,0xbe2c1bd0,0xbe1584dd,0xbdf97b1b,0xbd818ef6,0xbd2c9197,0xbc2243db,0xba5886ae,0x3cb62656,0x3d3379dc,0x3d652f28,0x3d73b609,0x3d603dc2,0x3d6f3fd6,0x3d3252b0,0x3cc88e33,0xbd7e11f9,0xbd95e3e7,0xbdd7d2e5,0xbd7531e9,0xbe0905b8,0xbeb81f02,0xbedb2fdb,0xbeaa6f9b, -0xbd82cdbe,0x3cd8f135,0x3da44016,0x3df68d3e,0x3e9e1cbe,0x3ef2880f,0x3f2c902f,0x3f0de863,0x3efa14f4,0x3ed89b03,0x3e980f38,0x3e26a5dd,0x3d3806a5,0xbd348814,0xbd7f40f3,0xbdaf1ff4,0xbe04f71f,0xbd926a61,0xbd388bfd,0xbbf54a3c,0x3cca977f,0x3d15d6ea,0x3d9a2eee,0x3da007b4,0x3d327504, -0x3d047aef,0x3c696f9b,0xbb93db5f,0x3cf6d6ca,0xbc2b14cc,0xbd007826,0xbe11c603,0xbedbb206,0xbeb5c0cd,0x3e98c9f9,0x3ee04686,0x3f2fd13d,0x3eae4c50,0x3e631b0d,0x3dcef0aa,0x3e6b8ff9,0x3eafcd2e,0x3ef5e842,0x3f069f73,0x3f150983,0x3f1ebddb,0x3f196be6,0x3f02943f,0x3eb7c40c,0x3e5bb8b6, -0x3e1fd6d5,0x3c13243d,0xbd979cf9,0xbda3e506,0xbe084c23,0xbdb346db,0xbd8ec2c3,0xbd61b288,0x3d254f20,0x3d8b094e,0xbc36a261,0x3d8ca219,0x3d3b9875,0xbcebfdd0,0xbd7b1950,0xbdd2aeeb,0xbe4d4931,0xbe26792b,0xbe369e37,0x3e61fcd5,0x3eea0133,0x3e9316cd,0x3e9a3833,0x3d8c17f4,0xbd14080d, -0xbe0f3ba8,0xbe00c4f9,0xbdf4f6f7,0xbe130d79,0xbcf51887,0x3d6abd4e,0x3dfdd009,0x3ddf1c8b,0x3df546a3,0x3e229cff,0x3df00d97,0x3de7fe74,0x3db0fb3e,0xbd29cc6c,0xbb637fdc,0x3c118f3f,0x3ca02d9a,0x3d2f64e8,0x3d0a544e,0x3d8faaf9,0x3d64c9e0,0xbd2e59f9,0x3ce95c96,0x3cafa649,0x3c3c0baa, -0xbca3abd5,0x3b09a08f,0xbd7f0605,0xbd4cb52e,0xbc040943,0x3d975b1f,0x3db1fa57,0x3dd28dcc,0x3e3ddb99,0x3b5ee64e,0xbdedc13a,0xbe73e92d,0xbe9f9944,0xbeb2f19a,0xbeafb2a7,0xbe9c30d6,0xbe893b17,0xbe4f18ba,0xbdfffb5a,0xbd549bf4,0x3c41b24e,0x3d801868,0x3dc2cbdc,0x3de4d3c7,0x3d2b3c58, -0x3d9ff27f,0x3d7baba0,0x3d04de8e,0x3cda27a2,0x3c4f22d9,0x3cf384ae,0x3cfd1b02,0x3d38f535,0x3d4eeb4b,0x3cbf9ff3,0xbc551696,0xbb54d42e,0xbc1e84d4,0xbd2882d0,0x3d5b1219,0xbd91e4cd,0x3d7156da,0x3d2c2ff3,0x3c1d421e,0x3bc8206b,0xbd1f628a,0xbd2fa510,0xbd5a84d9,0xbda2aeab,0xbdfdf205, -0xbe256da1,0xbe297cdc,0xbe2acde2,0xbe3484e4,0xbe1b36b7,0xbe018f05,0xbdbfafc9,0xbcfb22dc,0xbc91de80,0x3cae4af4,0x3d845142,0x3cab68bd,0x3d070290,0x3c9dae76,0x3c80b409,0x3cf27194,0x3d4cb456,0x3d6cfb4d,0x3cc82ac8,0x3d32d5d1,0x3d1774e9,0x3c59a906,0xbc954321,0xbcd5c165,0xbca0af4c, -0xbc21d9bc,0xbc4b9153,0xbcb65761,0xbced8c56,0xbd6a9cb1,0xbd9c2959,0xbd9f4c2a,0xbdbd2e7c,0xbde73783,0xbdced7f5,0xbdb85cfb,0xbdab0736,0xbdc19c0b,0xbdd98d48,0xbdf49e1f,0xbdcb69b2,0xbda30320,0xbd8ff6ab,0xbd9cd7a8,0xbde34c28,0xbd9a9a8c,0x3b4a944b,0xbcb4a6ae,0xbcd11700,0xbc8e3280, -0x3ca14f45,0xbc817b7e,0x3c50fbf3,0xbb36f273,0x3c62b89e,0x3c216823,0x3a6ce630,0x3b05c0cc,0x3bbae978,0x3c00ffdf,0x3c26925d,0x3bb8d892,0xbd6c6687,0xbd0e82ea,0xbce92488,0xbd005a33,0xbd048eb4,0xbd104b8a,0xbd06441e,0xbcfa8e8f,0xbd03b54e,0xbd17f7cd,0xbd1dae36,0xbd28f0d1,0xbd2569c3, -0xbd2b9c3a,0xbd3f8756,0xbd5cba05,0xbd665921,0xbd48bc9b,0xbd36d152,0xbd4b527c,0x3cad0732,0xbc802754,0xbc48bdac,0xbc73fa32,0xbacc92f9,0xbbbd1092,0xbbf0e79a,0xbc7aba4b,0xbc70a831,0xbcc72fcc,0xbcc37ed4,0xbd02f09e,0xbd06fb50,0xbd193348,0xbd407ddf,0xbd384701,0xbce6e176,0xbd069b6a, -0xbd1e0ed8,0xbd1cb613,0xbd1c194d,0xbd21fbb8,0xbd2c2633,0xbd3573d3,0xbd47aa4f,0xbd53f930,0xbd61c618,0xbd69d306,0xbd74ab7c,0xbd7e3bc2,0xbd6d1e89,0xbd5c1083,0xbd537ac0,0xbd592084,0xbd457e6a,0xbd7b6c0c,0xbd2ffe71,0xbcee89ca,0x3c0e4bf2,0xbd0f3ccf,0xbcb2e15f,0xba91d284,0xbbd3987a, -0xbc0526f1,0xbc5258c8,0xbc6ea7b4,0xbc8a360d,0xbc976efe,0xbd04e2c2,0xbd0f1c0b,0xbc674a5f,0xbced031f,0xbd3451a5,0x3ab9a68b,0xbd4c47df,0xbc3d971e,0xbcad8c49,0xbcb25c60,0xbceff9e1,0xbc017f4b,0x3b204709,0x3c5804cd,0x3c6270c5,0x3c8b87d7,0x3c982c2d,0x3ca9d08c,0x3caaf5fb,0x3cb0b2be, -0x3c9aef59,0x3c86e3bd,0x3c63119e,0x3c1e759e,0x3b9690bb,0x3c97150d,0xbd02309b,0xbd37dbcd,0xbd52c297,0xbccb6c7b,0xbd2f821f,0xbd3135a6,0xbd3748e2,0xbd30a2c9,0xbd281b29,0xbd358c00,0xbd3d9bb3,0xbd479cdb,0xbd2de1ce,0xbce64633,0xbd270679,0xbd572598,0xbd9a5059,0xbd964fe9,0xbd9655f6, -0xbdb42aa1,0xbdcb603d,0xbd298ccf,0xbc028f69,0x3c95f964,0x3cd08342,0x3cf74cdd,0x3cf2cff3,0x3d1f42bd,0x3d3898a6,0x3d4c6cf5,0x3d40a3b6,0x3d2ab2db,0x3d1710cb,0x3cc0e0ed,0x3cb95d14,0x3c61213a,0xbd45bf39,0xbc241528,0xbc97bf0f,0xbc8f7dbe,0xbc9d05a9,0xb9997df8,0xb98e349c,0xbb2eea14, -0xbc569895,0x3b4e5273,0x3c0a860c,0xbc61c60a,0xbcafd817,0xbd1b8469,0xbd1b5e0f,0xbd103afb,0xbdf124f7,0xbe069eb2,0xbdffecdf,0xbe152251,0xbe317997,0xbd3c02f3,0x3c53158c,0x3d8d5655,0x3d918279,0x3daefb80,0x3db90abb,0x3ddf96fe,0x3de70bab,0x3dee6e3f,0x3dd2e815,0x3db1fee5,0x3d93e852, -0x3d31cac7,0x3d2a7047,0x3c5c4a3a,0xbcdc70b0,0xbc8d0ac8,0xbc0dc271,0xbc73876f,0xbc93f28e,0x3c8b4cdf,0x3b506247,0x3c72837e,0xbb9ccd4e,0x3c9bfeac,0x3af21ff6,0xbca083ed,0xbcd0953e,0xbce44da1,0xbd59a285,0xbdacdc8f,0xbe3a3a66,0xbe6766a3,0xbe6251d4,0xbe990d3d,0xbeb57f71,0xbe21a298, -0xbd043225,0x3d5a2c3c,0x3d8668ae,0x3d6d9f2d,0x3d270c0c,0x3da16fcc,0x3dde9e95,0x3e08a591,0x3e054f0a,0x3dee3f0d,0x3dd0ec47,0x3d8d8b0a,0x3d88bc62,0x3d17516c,0xbd22b1af,0x3b59432e,0xbcde3b22,0xbbafece7,0x3ba9a972,0x3cd8a855,0x3d13c38a,0x3d4fe138,0x3d360063,0x3d5cd001,0x3d4be6c2, -0x3c02ac39,0xbcb3fd70,0xbd74fa28,0xbd93aea8,0xbdcb9bb1,0xbe4b3a00,0x3d4d2527,0x3e3db690,0x3e53a5fe,0x3eb51a0b,0x3ebd4ce9,0x3eab82c2,0x3e8689ea,0x3eb197a3,0x3ed9002d,0x3f05fed5,0x3f067e18,0x3efbbc23,0x3ee1df88,0x3ea9cf79,0x3e7f6d4a,0x3e4a9619,0x3dded9a1,0x3dab9248,0x3cb71203, -0xbd584433,0x3c556288,0xbaab766c,0x3c91bb57,0x3ce32cff,0x3d4508d2,0x3d821f20,0x3d701e85,0x3d083634,0x3cc1700a,0xbc67fa5d,0xbd84c464,0xbcd4cb12,0xbd665220,0xbd869451,0xbe0744d9,0xbdc265fe,0x3e3d8d6b,0x3f04de55,0x3ee871b0,0x3e9f834e,0x3e335da0,0x3df4d9ab,0x3d22d890,0x3cece365, -0x3d9481ab,0x3ddd4425,0x3e8dd085,0x3eb72b14,0x3ec942ee,0x3eadd881,0x3e8e9be5,0x3e425ac3,0x3e259d97,0x3e0d1520,0x3dc42c01,0x3d167068,0x39274e18,0x3bece013,0x3cbc98f8,0x3d1dcfc2,0x3ce865f7,0x3d6a37d0,0x3d80e5f1,0x3d21e5e7,0x3cdbf89d,0x3c7675a3,0x3c87517e,0xbcc5fb22,0xbb0003e3, -0xbd070d28,0x3d261b0d,0x3e9d4a88,0x3ed08e9e,0xbc80168d,0xbe58c88e,0xbed41a36,0xbe9ef63b,0xbe803072,0xbe278b0c,0xbe9d2274,0xbec4f0c8,0xbefa258d,0xbf010dd2,0xbefc4953,0xbed2b433,0xbec55bac,0xbe9b7e10,0xbe489917,0xbdc4af1d,0xbd88c8c0,0x3d363d52,0x3d960941,0x3d59ebe7,0x3d4062ea, -0x3c9bc08c,0x3c3385fb,0xbc80fa6f,0x3d02732d,0x3d48fbc4,0xbcb0e198,0x3d7162b9,0x3d4dab95,0xbad1c252,0x3b96534e,0x3d9d7477,0x3dbc2af8,0x3e116213,0x3e42a369,0xbd9468a4,0xbe97d9ed,0xbe5a83f3,0xbe9ea9e9,0xbe3790cf,0xbe263edc,0xbe15db73,0xbe65898d,0xbe914652,0xbea69f77,0xbec3b11d, -0xbed80afe,0xbedad530,0xbec3a45f,0xbea71a39,0xbe954a6f,0xbe72f351,0xbe4d0b2b,0xbd8d6c13,0x3d444073,0x3a8165af,0x3d0d691d,0x3c8325ad,0x3c9db185,0x3d198a0c,0x3d0f7ffe,0x3d31a2da,0xbc2e411a,0x3d4379d0,0x3d5df89b,0x3d2350cc,0x3d405e76,0x3cc2f236,0x3d39ce55,0x3da0af90,0xbd49d8e4, -0xbe01589e,0xbe0f98f5,0xbe11292e,0xbe2bf094,0xbd352393,0xbba698fb,0x3c5d4cfb,0x3ccf1c5e,0x3cc68426,0xba996cbf,0xbdcfaac6,0xbe2642cc,0xbe49beee,0xbe747902,0xbe751f6a,0xbe6d7575,0xbe2dc581,0xbe0b58d7,0xbdaa0aba,0x3d02d09e,0xbcf9a082,0xbcae92fe,0xbbcbe41f,0xbc8cddff,0xbc283bb9, -0xbbca7135,0x3bf02422,0x3c6f221c,0x3cca14d8,0x3cd4d1a8,0x3cbd91eb,0x3c570c0a,0x3bf2a156,0x3cc52294,0xbd9f3e41,0x3cb27b17,0xbd99f2dd,0xbd889678,0xbd3e61e4,0xbced46d0,0xbd0e31d8,0xbd6c8777,0xbd7932ae,0xbca911dd,0x3bc49a11,0x3c48999c,0xba880ee1,0xbc16b2e4,0xbc18971b,0xbcaa5479, -0xbd20b645,0xbdad058c,0xbde3dc39,0xbdfa69ca,0xbdd7295c,0xbdc7d389,0xbdc6b8b2,0xbd8dddec,0xbd8a8aef,0xbd187571,0xbc425ce0,0xbc35bb6b,0xbbd480c5,0xb9574e00,0x3c6adf30,0x3c9dd586,0x3c761055,0x3bb08f09,0xbc57c199,0xbcbbff22,0xbd03952f,0xbb5fbb8c,0x3be37c87,0xbbe9c20e,0xbc43dc46, -0xbcb53946,0xbccfb7aa,0xbc8404ba,0xbbb32e70,0xbcc142f6,0xbd154a7c,0xbd312a9f,0xbd16322c,0xbcf48212,0xbc8c3591,0xbd03a55e,0xbd33fe6e,0xbd3e5649,0xbd674bda,0xbd6be43e,0xbdb1a02a,0xbdc9e5cd,0xbd9dc5de,0xbd8f6852,0xbd5eb232,0xbd4157c4,0xbcfca013,0xbc7aaf20,0xba45708c,0x3cc8df99, -0x3c5809d2,0x3c8b30f3,0x3c742948,0x3c10ffd7,0x3b80dc46,0xbbaefc5c,0xbc0898b8,0xbc1fd33e,0xbcc924f5,0xbcda5e4a,0xbcaa2ea4,0xbc8fb3d2,0xbc619b1a,0xbc8a962e,0xbc8daae4,0xbcbd2527,0xbcd3753e,0xbcfdb1c7,0xbd0bf522,0xbd228630,0xbd35632c,0xbd3f95ed,0xbd46ddd9,0xbd596f84,0xbd6cd346, -0xbd6f576d,0xbd728d4b,0xbd6a6564,0xbd46f287,0xbd3ff4fd,0xbd27b19a,0xbd123506,0xbcf75d3b,0xbcf2d2fa,0xbcfa7a3b,0xbcd42dd3,0xbcc6fa8a,0xbc8cd8eb,0xbc605d45,0xbc682192,0xbc7b2a17,0xbc45c8ab,0xbc4bd608,0xbd0f6480,0xbce0dfdb,0xbcbf409b,0xbcc040c7,0xbcbc0cbe,0xbcb5b8fa,0xbca338b0, -0xbc8aabcb,0xbc8babd7,0xbc8cd939,0xbc90c547,0xbc9f5553,0xbcaa637a,0xbcb7c2db,0xbcc8c856,0xbcdb9a14,0xbce8a325,0xbcf4d69a,0xbd074146,0xbd0f04f5,0xbd319629,0xbd395018,0xbd2f5d70,0xbd15ed0a,0xbd262b87,0xbd07f520,0xbd0549fe,0xbd0359f2,0xbd090076,0xbd039999,0xbd0a2bf0,0xbd072f0a, -0xbceeab61,0xbcd65bde,0xbd187ab3,0xbd0f1a91,0xbcf58ddb,0x3dda55e3,0x3dbd81b4,0x3dec22d5,0x3dd97546,0x3df38514,0x3e0108d4,0x3e0008da,0x3dffe52a,0x3e04cfa5,0x3ded10d5,0x3dddb315,0x3dd05249,0x3dc86ed5,0x3dc3e7fa,0x3dbea440,0x3dc0cc01,0x3dbecc65,0x3db895be,0x3dbe0ec1,0x3db90d18, -0x3db9e834,0x3db8e534,0x3d929b24,0x3c7850a3,0x3dc006b9,0x3d93ef3b,0x3cbb054a,0x3cb146e6,0x3cb6c439,0x3cc5cd1c,0x3ce69bc5,0x3ce04678,0x3cc2fba1,0x3d8c8e80,0x3dce95bd,0x3becc364,0x3d8033b2,0x3c808c54,0x3e10faeb,0x3e1cca05,0x3e317722,0x3e4472cb,0x3e3e5547,0x3e3e864d,0x3e46cdcd, -0x3e292380,0x3e133caa,0x3df9dfa8,0x3dd0e594,0x3db17103,0x3d9cc8ea,0x3d9e7064,0x3d9e55e7,0x3d9273de,0x3da3c5d4,0x3d9da7c0,0x3da7317b,0x3d7deea1,0x3d91f1e7,0x3da1e101,0x3d8066d2,0x3d7957db,0x3dafd376,0x3da58c2f,0x3daf9600,0x3d98658f,0x3dba167a,0x3db855d7,0x3d8cf807,0x3da12245, -0x3d87a8c1,0x3d737370,0x3dad6464,0x3d82fc25,0x3e0f5747,0x3e67faba,0x3e7a9f7d,0x3e92104b,0x3e8886f1,0x3e848656,0x3e8d98b3,0x3e69ad29,0x3e4a9f06,0x3e26bc44,0x3e01ac46,0x3dda542a,0x3daff7c0,0x3da7123b,0x3d985aa4,0x3d6140db,0x3d8e5ece,0x3d72f6d7,0x3d6811de,0x3d8f37b2,0x3d3bc55e, -0x3d3bbd16,0x3d10dc3c,0x3d056201,0x3d805168,0x3d1dc8ea,0x3d5bc318,0x3d10f9cc,0x3d7ad258,0x3d56349c,0x3d09bc31,0x3d183007,0x3d045000,0x3d0916a1,0x3d9bac5e,0x3d28742d,0x3e436136,0x3e9d6185,0x3eb0d350,0x3ecf2903,0x3ebbdc1c,0x3ebbc1c7,0x3ec7837f,0x3ea610ab,0x3e8eef67,0x3e637c02, -0x3e0d2abd,0x3d9ae93c,0x3d043190,0x3cbfb9cf,0x3c6e8668,0xbc10af64,0x3c6e7323,0x3c17ff50,0x3cb6b3b0,0x3d4b638d,0x3cb48d08,0x3cc5ca43,0x3a6f90ef,0x3bf002a9,0x3d0ec4cd,0x3d00411d,0x3d11c9a5,0x3cecf78b,0x3d534c8e,0x3d39dafa,0x3c693000,0x3cc3e04e,0x3cad8887,0x3cef60f0,0x3d6604a9, -0x3e8b218e,0x3e959e09,0x3e80bc83,0x3e953048,0x3e6eee9a,0x3e277dbf,0x3e0a05d5,0x3dd322a5,0x3e0e7f41,0x3e14a456,0x3e033cb1,0x3e5d174c,0x3e712dae,0x3e617326,0x3e3c5142,0x3e20785f,0x3e07ec02,0x3de6168a,0x3d8d0c54,0x3dae7b3a,0x3da75295,0x3d02bc56,0x3d117747,0x3cc8e6b5,0x3d0b02e6, -0x3d2cdfe4,0x3d457588,0x3d30f7e0,0x3cad241e,0x3cce7eb3,0x3d36cecc,0x3d90445f,0x3da49c33,0x3dcc7923,0x3e10d51b,0x3e3f544a,0x3e3fa661,0xbb1f657b,0xbed0011b,0xbed96bec,0xbecc37f1,0xbe4efecd,0xbdbf1557,0xbca5016f,0xbd999164,0xbe49411b,0xbe966723,0xbeda4bc6,0xbef9cbb4,0xbef68ca4, -0xbee41a55,0xbec392bf,0xbea2300c,0xbe58d84d,0xbe1070ab,0xbcfc0b0d,0x3d9c0620,0x3d964f02,0x3d76f416,0x3cea9ca2,0x3ce1821b,0x3d378f54,0x3d3ceb32,0x3d676a61,0x3d163a81,0x3d2f6650,0x3d205030,0x3d030c25,0x3d481a9e,0x3d65f276,0x3dbc982e,0x3d805376,0xbdc4dff5,0xbe914ce7,0xbe28f757, -0x3c3394c3,0x3e641aeb,0x3d652671,0xbd79a66a,0xbe21c37b,0xbd5b3158,0xbc35da29,0x3d815214,0x3d373470,0x3c962874,0xbd3d8de9,0xbdf5bfa0,0xbe239e97,0xbe315754,0xbe1e35b9,0xbe0bda7f,0xbde4d1ba,0xbd7f905b,0xbc959853,0x3d0d09c8,0x3cf868f1,0x3d2bfbee,0x3d6573cc,0x3d8293ef,0x3d897223, -0xbbe5692c,0x3d9ca93c,0x3d96c938,0x3cacbc64,0x3d90b90f,0x3c9a92fe,0x3d29bfbb,0xbc8ea84f,0xbe1e1e5c,0xbd0a07f4,0x3dd191e6,0x3db6ab61,0x3e8a01e4,0x3dab17b6,0x3d428581,0xbc7a8002,0x3d81aba9,0x3ddd545a,0x3e1c788e,0x3e1031ad,0x3dee0917,0x3d6f2a11,0x3d68111c,0x3cdf2203,0xbbc37eec, -0xbcc991cc,0xbd15f50f,0xbda9a5e6,0xbdc0fdcf,0xbd7f0d3e,0xbdac93eb,0xbd6e90e7,0xbd015992,0xba583406,0x3bf83cc4,0x3c68d797,0xbc5af8ec,0x3cfd88bd,0x3d0bc8ae,0x3cb83b57,0x3c5a0223,0x3bfa39df,0xbba7baee,0xbd7325a0,0xbb934cae,0x3d0aa0fd,0x3dea8cfe,0x3dfe1840,0x3dfb71c0,0xbab33fbc, -0xbd1ad495,0xbd30d3ee,0xbd247170,0xbd1f889d,0xbcf9b37b,0x3d477b57,0x3dacf123,0x3d88a897,0x3d87e3d5,0x3d36fa87,0x3caa4d6c,0xbcdc8a88,0xbd027ed0,0xbd7e122c,0xbde170fc,0xbd8555df,0xbd5a156d,0xbcd06738,0x3b22aba2,0x3c94bbce,0xbbcd4031,0xbc45d60c,0xbb9dec19,0x3cc3d717,0x3d1bc0d8, -0x3d4e1944,0x3c91d14c,0xb9db3f74,0xbc7b4d4c,0x3d196b7e,0xbd6a779f,0x3d37f23e,0x3da5b4bf,0x3d73a8c2,0x3c289a4c,0xbbc88e48,0x3b5a7bc4,0x3c697515,0xbd0a1adc,0xbd40d9e8,0xbce0c40a,0xbc06adcc,0xbb394edd,0xbbbae00f,0xbd2f3a2d,0xbd596037,0xbd1f678b,0xbcadcf1a,0x3c119e97,0xbc575b1b, -0xbd2c8572,0x3beb6df8,0x3ba2e241,0x3b82764f,0xbbc3e82f,0xbae07bc4,0x3c3a841f,0x3c8b91f7,0x3c449740,0x3bea1926,0x3bc3335b,0x3c387238,0xbc056ba1,0xbc2f3aeb,0xbc6eb68b,0xbc80da04,0x3c13444d,0x3c08997d,0x3c94c5a3,0x3c8f4b7e,0x3ce0b6cc,0x3caf23ea,0x3b8c7099,0xbc74ea4b,0xbc6cfb25, -0xbc907eab,0xbccfe47c,0xbd15c04b,0xbd35aff2,0xbd525f12,0xbd42146d,0xbd4e7147,0xbd7fbbf4,0xbd2c8892,0xbc380e52,0x3b87120d,0xbc65eb6d,0xbbd8d139,0x3b9393d8,0x3c01fabc,0xba2d0b7b,0x3cbcf323,0xbabf5432,0x3c026729,0xbc4ea4d9,0x3b62c5ae,0x3a8a4404,0x3c3454f4,0x3c20cda3,0x3c007ef6, -0x3bbb4e49,0x3c680712,0xbd2a2222,0xbccb4bcb,0xbcc573f5,0xbcf04f74,0xbd00d86b,0xbd14d405,0xbd0e2b1b,0xbd120063,0xbd07ce05,0xbd073852,0xbd03910d,0xbd09a35b,0xbd156833,0xbd2d9ea5,0xbd15caef,0xbced2a71,0xbc9b871f,0xbc83d256,0xbc66d8c7,0xbc6df2f9,0xbd4c77f5,0xbcb929a5,0xbca68b47, -0xbc64a16a,0xbc9acf48,0xbc29669f,0xbc1538e6,0xbbdd08ab,0xbc6b1423,0xbc096bba,0xbc078c52,0xbc40c67f,0xbc7a4f09,0xbca4d606,0xbcce19fe,0xbccd956d,0xbc49cffe,0xbc4b8f69,0xbc8f1e2e,0xbc90d031,0xbc9ee143,0xbca29b76,0xbcb039f3,0xbcc0ca68,0xbcc3346a,0xbcc4aaf2,0xbcc17c6f,0xbcb69bc1, -0xbca3a083,0xbc96621a,0xbc7f3bfa,0xbc720c1f,0xbc5dab75,0xbc3bfa19,0xbc2344c8,0x3ae637a6,0xbc261414,0xbc80ef79,0xbd08071c,0xbc2b1f17,0xbc7f0a42,0xbcf25d40,0xbceb704c,0xbcddd602,0xbcb137f2,0xbcb7ede7,0xbca930bc,0xbc9283fd,0xbc664e9c,0xbc3610a2,0xbca1c5db,0xbc7cf561,0xbc7ed3dc, -0xbd0a65f8,0x3cdc81c1,0xbd1e9754,0xbc7dde5e,0xbcc28928,0xbc9ee6ef,0xbd269877,0xbd461030,0xbd5373ac,0xbd4f7124,0xbd4aebea,0xbd3cc131,0xbd3f782c,0xbd3e6517,0xbd3ba5d5,0xbd3ba99a,0xbd35eb3d,0xbd2c343b,0xbd216870,0xbd050d95,0xbd5476ba,0x3c2e8b93,0x3d465ca4,0x3df19c9b,0xbb7e4439, -0x3d410afc,0x3dec449d,0x3de7e3ef,0x3de1cfad,0x3dcdf944,0x3de22b77,0x3de518e4,0x3dd69441,0x3d496473,0xbbefd908,0x3df21917,0x3d843e33,0x3debf487,0xbbf2aef1,0xbc1a3915,0xbc46dbeb,0xbc07c1b9,0xbd694066,0xbd9b0bcc,0xbda36b6d,0xbda7d0c6,0xbd9bc651,0xbd79d51d,0xbd6a64fc,0xbd5cd92a, -0xbd5c01d2,0xbd68b690,0xbd61b8be,0xbd518e3c,0xbd31413d,0xbd2a1d3a,0xbd3520f3,0x3d47ef4b,0xbbc8a4e3,0xbb80a135,0x3c0a9c4e,0x3ca8d550,0x3ba03d59,0xb9a657ae,0xb9806ebe,0x3c5bd433,0xbaf17f58,0xbc53e015,0x3ad58848,0x3c0c0fe5,0x3d11280d,0x3d151fe9,0x3bcb149c,0x3dbf488d,0x3d4602cc, -0xbc2be053,0xbab6a24c,0x3c358819,0xbdb325b0,0xbdfaefcb,0xbe1104ff,0xbe1c0399,0xbe193030,0xbe04f77c,0xbe0114f7,0xbdfd9b36,0xbdefbe49,0xbde838fb,0xbdd3b445,0xbdb41f56,0xbd895e32,0xbd70d050,0xbd329a4a,0xbc089b2d,0x3b961d71,0xbb6df382,0x3ab16f3a,0x3cd422d7,0x3cb55561,0x3d200a78, -0x3bb7786c,0x3cfa52b3,0x3c8e440f,0x3d26f523,0x3c1826db,0x3d1072fa,0x3d3833fd,0x3d821e9f,0x3d5ad7b3,0x3e099571,0x3d67ca64,0xbcd0b8b2,0x3b47733d,0x3ce669b6,0xbdd5c1d1,0xbe2bf6bf,0xbe4601f4,0xbe4eef95,0xbe436b3f,0xbe0e2817,0xbddf5ebf,0xbdbc862d,0xbdbb2207,0xbdc59b92,0xbdb3e04d, -0xbd93ac8d,0xbd4a9c3f,0xbd35c1ee,0xbd4e702e,0xbba9ffcc,0xbcb012bf,0x3b6262e4,0xbc5aa9c2,0xbb76ca64,0x3ca7bdb9,0x3cc84154,0x3d0cba2e,0x3c1302f8,0x3d19e120,0x3cd87ce3,0xbb76891c,0x3d273729,0x3d96fb95,0x3d8768f3,0x3d7b7db6,0x3cd51cdd,0xbe30e65e,0xbe603895,0xbe6fb865,0xbe07afd8, -0xbdc14d2d,0xbd98a554,0xbdb8fc6e,0xbe2caf43,0xbe600bb6,0xbe8638dd,0xbecae65c,0xbee4c59a,0xbee3aea0,0xbec60808,0xbeaf998b,0xbea0a288,0xbe6da53f,0xbe2b45bc,0xbdcca0f2,0xbc5c320a,0xbcd34b1e,0xbc23ff01,0xbbc0123c,0x3c565ca8,0x3d2d212d,0x3cd1e771,0x3cf0f576,0x3d0660a8,0x3d3c9f9f, -0x3d0ba2de,0x3c596361,0xbc3921c9,0x3b380a5b,0x396838c4,0x3d8415bd,0xbe29e031,0xbdfd0915,0x3dda9449,0x3e3da17a,0x3e91075d,0x3e5934a7,0x3e21f09b,0x3d41c265,0x3dfa7d7e,0x3e0f1f21,0x3dab2e05,0x3d96ffa8,0x3cb180f7,0xbdadd850,0xbe0514a6,0xbe0875bc,0xbd7bbda3,0xbdcac736,0xbdd77db2, -0xbdccb8aa,0xbdceca20,0xbd67babb,0xbd26645b,0xbccc9586,0xbbc307bf,0x3cdab29f,0x3d10b331,0x3d4c2019,0x3d125a44,0x3d89cf4d,0x3d957f28,0x3d8c3bc2,0x3d252e80,0xbc1338aa,0xbd515173,0xbda22a23,0xbce01ff1,0x3df951fa,0x3e004922,0x3d0f80a5,0xbd88f99c,0x3db36435,0x3e0237ac,0x3cab169b, -0x3d709d10,0x3daa49e1,0x3d86e55f,0x3de5cae8,0x3de9552b,0x3db3b9e8,0x3df2d38e,0x3ddc5566,0x3db803cd,0x3d19e571,0x3cf55dd0,0xbbb8f643,0xbcb4c5d5,0xbcc281c9,0xbcf646d5,0xbc56e033,0x3c020ecc,0x3d71023e,0x3d4a68eb,0x3d337565,0x38feef42,0x3d271e19,0x3caca2f9,0x3b80f857,0xbcbcbcb5, -0xbcad0816,0xbd353af7,0xbcb39ae7,0x3db8842e,0x3d456160,0xbde3fc0d,0xbddce459,0xbdee34fb,0x3cb80808,0x3cd8d55b,0xbd198aec,0xbdba34ad,0xbe09e11e,0xbe005212,0xbdc8e85a,0xbd720d02,0xbc1dab42,0xbc6235ff,0xbb6b10ba,0x3c987a96,0x3c52179b,0x3c80f10e,0x3b7af8b1,0xbce84206,0xbb77dff0, -0x3c5a5c84,0x3c43a8f5,0x3cbd8653,0x3d15d0c9,0x3cb572da,0x3c2d43ed,0xbc798b8f,0x3c9a65a8,0x3d008369,0x3d5cf27e,0x3cde27c8,0x3c119aad,0x3c57c1ca,0x3d47164f,0x3c89a7d1,0xbc8cb0c7,0xbdd6667e,0xbd98d7b3,0x3cffd777,0x3d9de009,0x3d886b3d,0xbbae7774,0xbc8c3874,0xbc8e6a22,0x3c20a90e, -0xbd8f9580,0xbdc47ef4,0xbd85cdfd,0xbd7fab18,0xbd4c1c28,0xbc880671,0x3c7f21ff,0x3d0c91f4,0x3d5a3e9c,0x3ceb52df,0x3d1c3549,0x3c293dd8,0x3c6fb13d,0x3cbbe32e,0x3d0259aa,0x3cb760d0,0x3c901b98,0xbc619c00,0x3c01265a,0x3c16b78c,0x3be38a06,0x3c8ee5ed,0x3cd08c42,0x3cdd0d7e,0x3c283983, -0x3cd62f8f,0xbd3b528e,0xbd16477c,0x3c4e0ba0,0x3d851f02,0x3d5c3340,0x3c9a60e0,0xbd11cd02,0xbd19f1d8,0xbd5cf270,0xbd953710,0xbdadbc5a,0xbdbf3be2,0xbddbeb2e,0xbd921a9b,0xbd06833c,0x3c97175b,0x3d3c7451,0x3d45a535,0x3d0724cc,0x3d2001e0,0x3d0208c5,0x3c804e1d,0x3cb2d1f3,0x3c87ef56, -0x3c65bfbe,0x3be25e40,0x3bea79e6,0x3c9a7fd3,0x3c8ffcb0,0x3cb217d1,0x3c9147d3,0x3cd81f62,0x3ca5686e,0x3b82ee1b,0xbbb9669d,0x3d0be069,0x3d265027,0x3cc7df2c,0x3c903e6c,0x3c05c864,0xbc44d1ba,0xbcbc48bc,0xbd069bc9,0xbcdb1a42,0xbccba57a,0xbce1c803,0xbc750150,0xbbd85880,0xbbef2624, -0x3c2dbfc4,0x3cc9f0d9,0x3d264142,0x3d1ac30e,0x3d33ef01,0x3d3f29d6,0x3d0a5042,0x3cf22f29,0x3caf71ed,0x3cd6fe29,0x3cfb4378,0x3cee680e,0x3cf44ecb,0x3d0633a7,0x3cbf3205,0x3ce0046f,0x3ca7990d,0x3cc32b07,0x3c913a78,0x3c9516fc,0x3c72acb3,0x3cb72daf,0x3ab9371b,0x3d0a8c66,0x3ccd7675, -0x3c8f52a5,0x3c2c84fb,0x3b9d990b,0xbb1028e5,0xbc4180cb,0xbc4c2b7a,0xbc553e80,0xbc4056e6,0xbc3305e8,0xbc12c6e0,0xbbe29042,0xbb0362e8,0x3a5b50f3,0x3baccc82,0x3c4489c3,0x3c8f7851,0x3ccf5846,0x3c1e3b1a,0x3ca6bde6,0x3c8ec45a,0x3c3dc52a,0x3bfb9cf1,0x3c159d6e,0x3c5ec2bf,0x3c859193, -0x3c8a6120,0x3cca5fbc,0x3cec7906,0x3cce9105,0x3cdf99d1,0x3ca76f46,0x3c97a106,0x3cf5c19e,0x3b301beb,0x3cf79083,0x3ca2a6d1,0x3c97f4b1,0x3c8167fe,0x3c58521f,0x3c3489c4,0x3c078dfd,0x3c18a420,0x3c10faa5,0x3c033e5a,0x3bc4c22d,0x3b763790,0x3a478556,0x3b68ab47,0x3bc9ceab,0x3c04be89, -0x3c265456,0x3c31edc6,0x3c889e4d,0x3ac6ec51,0xbbf08669,0xbc9acb8d,0x3be7a08f,0xbbbc93b7,0xbc95ddb5,0xbc93d056,0xbc90608d,0xbc852b20,0xbc926bf7,0xbc91fc33,0xbc8091e4,0xbaa3e12b,0x3c843401,0xbcafa204,0xbbe0910d,0x3ca3218a,0xbd43371e,0xbd835a65,0xbd5438a1,0xbd5a70f3,0xbd66c81f, -0xbd6f5dd6,0xbd4a0541,0xbd3bde1d,0xbd42e8b8,0xbd236d29,0xbd1b478a,0xbd21f8ad,0xbd1f53ba,0xbd222909,0xbd2826e8,0xbd271380,0xbd257f63,0xbd1aef60,0xbd270b61,0xbd2a3d7d,0xbd0c575c,0xbd6d0700,0xbd82829c,0xbd706801,0xbd4b17f5,0xbd6be2b9,0xbd5727a3,0xbd5ea81d,0xbd60690d,0xbd604c3f, -0xbd6bd39b,0xbd6f784c,0xbd742bcf,0xbd70b723,0xbd62e66f,0xbd5c5d08,0xbd81b637,0xbd7f8b5c,0xbdcad3db,0xbdd5fab0,0xbddc04ec,0xbdd59ef8,0xbd94830b,0xbd7b383e,0xbd8b9b89,0xbd36e460,0xbd2718c4,0xbd4b027f,0xbd43d216,0xbd44b708,0xbd43b52e,0xbd308c4e,0xbd2453ac,0xbd096720,0xbd29f964, -0xbd22bef8,0xbd2017c5,0xbd7bc0a8,0xbd378662,0xbd3d8726,0xbd18fd14,0xbd0d9c69,0xbcdfb515,0xbceaa700,0xbd0113a5,0xbd119d58,0xbcf8d8e2,0xbcf49e11,0xbd2a1d56,0xbd4ad3ae,0xbd74e0f6,0xbd79beb2,0xbd809750,0xbda2fb29,0xbdd5aac3,0xbe02bbc9,0xbe07c6e0,0xbe12279e,0xbdb52617,0xbd91573f, -0xbdb1c7cc,0xbd0a5d75,0xbcd3ea4d,0xbd1b83ec,0xbd140490,0xbd1bb128,0xbd250d07,0xbd13c5e3,0xbd02b0e3,0xbc988764,0xbd14a359,0xbd0a1513,0xbd092a8a,0xbd53c3bb,0xbd2d3866,0xbd014dfc,0xbc89fda4,0xbc2cb071,0x3baa3d04,0xbbbe679d,0xbb381729,0xbc637828,0xbb226ff8,0xbc822490,0xbce1f95f, -0xbcfc70c2,0xbd1d1f0d,0xbd74fe2a,0xbd9e2cc8,0xbe06bfbb,0xbe56f41d,0xbe73107c,0xbe80d68c,0xbe801fb5,0xbe1735d8,0xbde8d283,0xbe053305,0xbd38b5f2,0xbcf0246f,0xbd87f429,0xbd8f323b,0xbd93f191,0xbd803135,0xbd27af91,0xbcd11f0a,0xbbfb3061,0xbd032a3a,0xbd0740e1,0xbd0694af,0xbd4901e6, -0xbd122bfd,0xbd0baba3,0xbc50a421,0x3b42b811,0x3cb09f3a,0x3cb678ac,0x3ccda98a,0x3c8e192b,0x3cfa7e40,0x3c86f440,0xbcb740e2,0xbd3d68ca,0xbd95020f,0xbdc73390,0xbdd196cd,0xbba131bd,0x3e5152ac,0x3e9f9762,0x3e8aea89,0x3df2efdb,0x3dc083d3,0x3cd18192,0xbd4db11e,0xbd9274e5,0xbdc76dc5, -0xbdc676a3,0xbd381194,0xbc76d6ef,0xbc9bc13d,0xbc8b4062,0xbcb276c6,0xbc479914,0xbc921c51,0xbc8252e0,0xbd7a5169,0xbd9f8c1c,0xbd1c2024,0xbcbd40d2,0xbc1ede92,0x3b16831f,0x3d1407ee,0x3c68108b,0x3c948041,0x3d0264c4,0x3c5f2bc8,0x3c2d5e1e,0x3cd80b36,0x3d5d9b0a,0x3d1fb492,0x3d394981, -0xbbfabc8c,0x3da43e7a,0x3e2c1ab3,0x3d94d1f0,0x3c1b59cc,0xbc2c94ff,0xbc023fcd,0xbb18dce9,0x3d2239e8,0xbd7ff94e,0xbd897904,0x3d5dfa8f,0x3d4e0101,0x3d879e51,0x3dcae47d,0x3de83d35,0x3dd97e5a,0x3d999155,0x3d0f592a,0x3c1a78cd,0xbd0671ce,0xbd81b5ba,0xbd838cf6,0xbd25d140,0xbc2eec7e, -0x3c260c2a,0x3d4450fe,0x3ce2323e,0x3cd795f5,0x3cc3499d,0x3d6adcd8,0x3d65a00e,0x3cd6bd93,0x3bfd0a5d,0x3d0791cf,0x3d2d9876,0x3d9f20cf,0x3d97591f,0x3c9cf46e,0xbc9063ba,0xbc9dc0f9,0xbd2d7c18,0xbd3228bb,0xbd3ddb25,0x39d21523,0xbd8db16a,0xbdc5b065,0xbd1d2fc1,0xbd7a1b76,0xbd26c78f, -0x3b68285b,0xbc531783,0xbc8b1bbf,0xbce36ba3,0x3d005e9b,0x3d468425,0x3d00467c,0x3d1c50be,0x3cf3a821,0x3c863075,0x3ba22df5,0x3c63df2b,0x3d8dbeb2,0x3c1b6b10,0x3aa55121,0x3b0617df,0x3d1202be,0x3d1cb65b,0x3d5dff43,0x3cca2462,0x3d1fb1b3,0x3d5480ea,0x3d89419f,0xbc809950,0x3d12bc58, -0x3df00a9f,0x3da21245,0x3ceb7d41,0x3d74039d,0x3daa012d,0x3dfc8bb4,0x3d895c77,0x3d0e7d7f,0x3ca1e9c6,0xbd11725d,0xbd2a72ca,0xbc3ef17f,0xbb8f92e2,0x3a467a45,0xbbb7c989,0xbbd067bb,0x3bf81212,0x3cef4b52,0x3cfc9973,0x3d1cf567,0x3d6eb743,0x3d111837,0x3d1af6bb,0x3da13ce1,0x3c5abdd3, -0xbaac0605,0xbbb7fd11,0x3b4bb40d,0x3c8a00ed,0x3d600a1d,0x3c7c3f57,0x3c88c711,0x3c81b922,0x3c0d653e,0x3c28a0f8,0x3d50ebff,0x3ca2e752,0xbcd62c78,0xbd33fba2,0x3c08ffb9,0x3cbb3d80,0x3cdd810d,0xbd25ba48,0xbda00f8b,0xbdc51dcd,0xbd4c83d6,0xbcf81d44,0xbd5180d4,0xbc8c047d,0x3b1ac7f6, -0x3cb13973,0x3d09ed20,0x3d06fd1d,0x3d02a136,0x3d01a2fd,0x3cb32c06,0x3cdfb6e7,0x3cba2a28,0x3cd143aa,0x3d103c58,0x3d2fb539,0x3d2f3fff,0x3cafbfb9,0x3cab77ac,0x3c8b4fd7,0x3cccc9b4,0x3cc64a71,0x3c9588ae,0x3bb19378,0x3c880b72,0xbd46a626,0xbd054617,0xbd10b341,0xbd12825b,0xbc82d803, -0xbc4d55cc,0x3be9acc5,0x3d0e2ab3,0x3b8b3f0b,0xbcbaccfa,0xbd4e78d6,0xbd1952a1,0xbc5dbe10,0x3c576d33,0x3d3c6e05,0x3d349616,0x3cf359f5,0x3bbbf1ca,0xbb17b3f3,0x3c724e49,0x3ceeec05,0x3cd62596,0x3d0e063a,0x3cf56635,0x3ccb49c6,0x3c671ac6,0x3c34da44,0x3c3dae47,0x3cc92e6b,0x3ccbdc04, -0x3cb49339,0x3c8a4de5,0x3cd99fc6,0x3cd05bc2,0x3c3082c3,0x39a8ef85,0xbc5911a9,0xbd033937,0xbc83f3fd,0xbb5b17f4,0x3be3eb5a,0x3c6ef9e7,0x3cb04e61,0x3cf8d502,0x3ce50446,0x3cff6a95,0x3d116c23,0x3cc29228,0x3c2c66f6,0x39c02de1,0x3b6e4dfe,0x3c4b0e8a,0x3ce4d31a,0x3cd7e657,0x3c87e896, -0x3c6b18c6,0x3cbcce70,0x3c355e9c,0x3b938f03,0x3be74bea,0x3c269526,0x3c949c2a,0x3cacb48e,0x3cd6ce00,0x3d127d4a,0x3c90909d,0x3c41179d,0xbb5e2777,0xbc004b17,0xbc6addd7,0xbc8a29ab,0xbc9b9ccf,0x3d4c0074,0x3cd3a068,0x3cdb0afe,0x3cfd2526,0x3d07f3d8,0x3d16a09f,0x3d21db6d,0x3d2edb4b, -0x3d32bcff,0x3d2fdf7e,0x3d2ca541,0x3d2e2b43,0x3d3a6f49,0x3d422d4c,0x3d3af76d,0x3d282a7f,0x3d0f68ef,0x3cff9640,0x3ceb8bca,0x3cdb160e,0x3cf60c98,0x3cf03939,0x3d12746e,0x3d1fd01f,0x3d21177d,0x3d3392c5,0x3d23be8a,0x3d193c98,0x3d0fe27c,0x3d04c64d,0x3cf110d4,0x3d06f384,0x3d03991b, -0x3d19033c,0x3d26c5e3,0x3cf36009,0x3d0e544a,0x3c5dc728,0x3ca48923,0x3ca4aa58,0x3cad0729,0x3cb575be,0x3cbed5fc,0x3cca9eb9,0x3cd54f5d,0x3ce57e87,0x3cf62318,0x3d0598aa,0x3d0c1876,0x3d1556e5,0x3d06eee3,0x3cfe0869,0x3cefa1cd,0x3ce3342d,0x3cd42f9a,0x3cb11739,0x3d0682a1,0x3d1d2cf2, -0x3d082f9c,0x3d0d599d,0x3d2a5ecf,0x3d1096c2,0x3d108c27,0x3d157c29,0x3d160b0b,0x3d201c6a,0x3d24f55e,0x3d23be68,0x3d1af6f0,0x3cde02d2,0x3d28f9b3,0x3d2823b1,0x3c99e2e2,0x3b9dc039,0xbbea4bec,0x3c43a62d,0xbae60c15,0x3a5e306f,0xb91c60b9,0x3a06fb97,0x39a29788,0xbb232ec8,0xba686c6f, -0xb903ce8f,0x3b2f2b5b,0x3addec59,0x3b16411b,0x3af50208,0x3bc49ce3,0x3bfe99f5,0x3c21ba2a,0x3bf7d11a,0x3ba73597,0x3c45584e,0xbb1b8997,0xbc480f68,0xbd17c788,0x3b91026c,0xbbee5cf8,0xbce83662,0xbcf99bc0,0xbcf69aec,0xbce007b8,0xbce2cc7c,0xbcf2fa3c,0xbd00db4e,0xbc748492,0x3b9105e1, -0xbd39a28e,0xbcb07e1c,0xbd7a737a,0x3c9562db,0x3c9709a2,0x3ca87775,0x3c98e2fa,0x3c2deca5,0x3b5f4b34,0xbbda03fe,0xbb724d74,0xbb37e1b3,0x3af6f702,0xbbd75835,0xbc0ada31,0xbc1260fe,0x3a263e81,0x3bd81236,0x3c6050e0,0x3c038fb6,0x3bfd0bdf,0x3c4706ce,0xbca4b42e,0xba3e0207,0x3a7d9af2, -0x3ad3b7d5,0x3abfd549,0x3c7333c1,0x3c076f86,0x3c009f45,0x3bdbb4b2,0x3c0025ee,0x3c0456d5,0xbb19a7ad,0xb99e098e,0xbc06fa1d,0xbc90c219,0xbc00b9a1,0xbcf8adf3,0x3bdad606,0x3cf4860c,0x3c40e928,0x3c045958,0xbc6ff33c,0xbca2ce2b,0xbd04dfcd,0xbcac540a,0xbc48aa89,0x3bce45a5,0x3b1fcb22, -0x3b62f1dd,0xba5a140f,0x3c896eb2,0x3cc407b8,0x3d0330ac,0x3c908e6a,0x3c7a6537,0x3c49990f,0xbb2e7c63,0xbb995513,0x3bc008cb,0x3c3b62e9,0x3c36f274,0x3d035d5e,0x3be5bea2,0x3c514bf9,0x3c2208b1,0x3c589fcd,0x3bb5c749,0xbb3362b3,0xbc14a1a3,0xbcad1c7d,0xbcc03940,0xbbb149ce,0xbd5663c7, -0x3d6ddde5,0x3ddba12e,0x3dcac3df,0x3dac5454,0x3cfa9047,0x3bb31711,0xbcd47b86,0xbc8d0507,0xbc6ac986,0x3b87988b,0xbc8bccb3,0xbcc40d4d,0xbcee55f2,0xbbad6245,0x3c1ec144,0x3ceaefba,0x3c0c9d95,0x3c2f6239,0x3c2af70c,0xbcca61dd,0xbb5863d7,0xbc2eae3d,0x3bd096c3,0x3c6c36ec,0x3d275c53, -0x3cc0c11d,0x3c9bccd9,0x3cbf8d1d,0x3ce2b808,0x3c4586e8,0xbc1a34b1,0xbbf9c207,0xbc9ea4f8,0xbc8f2e9b,0xbcb3ba55,0x3e6200b1,0x3deb1a30,0xbc199387,0xbd505118,0xbe202e23,0xbe3b47f9,0xbe3519f9,0xbe096cd9,0xbd31ccc0,0x3d3ef6e5,0x3e0f9a3d,0x3e25870c,0x3e2ebb72,0x3e2c7979,0x3e0ad825, -0x3df02b59,0x3dfb4d44,0x3d95a563,0x3d4e96db,0x3d05b3ea,0x39912d05,0x3c7d149d,0xbb405291,0x3c67d583,0x3c82a8c4,0x3cf69ab5,0x3c26473d,0x3c5e7bf2,0x3cfd42e6,0x3cfd5d6b,0x3d5c5940,0x3d99a83d,0x3d36af6d,0x3d663619,0x3db488b6,0x3e2c55d5,0x3d958a90,0x3bcfc9e5,0xbbb2625c,0x3d11d209, -0xbc44276c,0x3e01d2d0,0x3e09681a,0x3dc8f569,0x3d63efe0,0xbb344b59,0xbdae846a,0xbdd0b4f9,0xbdcd49bf,0xbde2104f,0xbd8ecacc,0xbd8fba69,0xbdc21320,0xbcdb0076,0x3c8e196b,0x3cbf7cd8,0x3d328f75,0x3d1c5abd,0x3cd69cda,0x3cd95abe,0x3cc59efb,0x3d5568ca,0x3d0db696,0x3cf55a11,0x3c53af9d, -0x3d48a3c2,0x3d46d360,0x3d2cdae7,0x3d8a9289,0x3d9ccc87,0x3da78271,0x3d3a82e8,0x3d10f584,0x3cc73849,0xbcb4b0a2,0xbbdc9bdd,0xbc74c762,0x3cd54dab,0x3d8ec79c,0x3e01c22f,0x3d95f859,0x3d23ddb2,0xbc80670c,0xbd4f5b1b,0xbdb69fd8,0xbe0d91e6,0xbdf0bad2,0xbdbb8aa6,0xbd480687,0xbd2b6176, -0xbd0d1048,0xbb2893c9,0x3b603783,0x3c3a7541,0x3caed737,0x3c605cca,0x3cfc9aa7,0x3dd586b4,0x39099d7d,0xbc9bc339,0x3c177a3d,0x3cd725c8,0x3d3c7aae,0x3dc98980,0x3d430c7a,0x3c2d1072,0x3d6e251e,0x3cf56186,0x3d49ad15,0xbbd6d8b5,0xbd3d1134,0xbd08be73,0xbdee8752,0xbd837e37,0xbd893bf8, -0xbda7e4e2,0xbda4443b,0xbdbbdf06,0xbdfc08e0,0xbd4dd512,0xbc3db7ea,0xbc13064a,0x3c66de43,0x3c5d2015,0xb8a73ef3,0xbb1880b2,0xbbd2c8f8,0x3bdb65bf,0x3ceb6187,0x3c61ecc7,0x398845ae,0x3c6d103b,0x3cd79871,0x3d91ee3a,0x3cd38274,0x3c741b5d,0x3cf91f49,0x3b035cad,0x3c57d05c,0x3d510723, -0x3d048606,0x3c97bcac,0x3cb1a707,0x3c8e5987,0x3c61dd9d,0xbc9ba9a9,0x3b81e74f,0xbb250745,0xbdabce56,0xbd0405f6,0xbcdd69a6,0xbd41713b,0xbd0c1529,0xbd1b6e69,0xbd4a4f41,0xbd3d5f51,0xbcd17722,0x3cd6d442,0x3c7088ff,0x3c172c10,0xbc7584c5,0xbcb2d8cb,0xbc596a8c,0xbbbcb354,0x3c47ffba, -0x3c46b521,0x3c8f6fd4,0x3ca8305c,0x3c48fccd,0x3c50ebe6,0x3c540706,0x3c386f11,0x3cc0709a,0x3c94b6dc,0x3c9b8444,0x3cc1fe5f,0x3c5d899b,0x3c917a9e,0x3ca3e5d6,0x3c63444e,0x3d0366f4,0x3c94104c,0xbcd63039,0xbd4bf883,0xbd3beaa1,0xbce93c33,0xbcc54bcf,0xbd0be6d6,0x3be9a761,0x3d043527, -0x3d45facc,0x3d02d082,0x3cc9da58,0x3d0c260a,0x3cef1e44,0x3cc2f714,0xbbe90e1c,0xbc5b17a0,0xbc652c27,0xbacf765a,0x3a94577d,0x3b6d8c9d,0x3b56ac06,0x3bf0569d,0x3c81a261,0x3cc1c7af,0x3ce0891e,0x3cf0ed62,0x3c8787bc,0x3d01becc,0x3d11cf22,0x3d0fe0b9,0x3ce9f022,0x3cda82bd,0x3cf43cea, -0x3d050e82,0xbc4deb1f,0xbbf895a3,0x3b6bfccd,0x3c292264,0x3c7fcca4,0x3bafbc7c,0xb9b2e704,0xbc4a13a5,0xbbb4df44,0xbb00ece2,0x3baf7c4e,0x3c6a85cf,0x3cc78737,0x3d0234e8,0x3cb0e406,0x3c5343d7,0x3b898fde,0x3ba1bc22,0xb99cd894,0xbb8af00c,0x3bf79b66,0x3c91911c,0x3cf15f78,0x3ce17ede, -0x3ce32722,0x3cd660eb,0x3cbb199c,0x3c4be21e,0x3c468c07,0x3bf9b176,0x3bc30280,0x3b775a1d,0x3b919464,0x3b7f1b1b,0x3b101b07,0xba53afce,0x3bd9ae4c,0x3bf0e8ea,0x3b46146b,0xbbb887f7,0xbc1b37ce,0xbc617beb,0xbc8f75a1,0xbcb225f7,0xbc9e96c5,0xbc8e0c1d,0xbc767fb3,0xbc5e3e0c,0xbc603b6c, -0xbc3d40de,0xbc3d715f,0xbc1c09e3,0xbc0af68a,0xbc149413,0xbc100449,0xbc090f0d,0x3c9c4d39,0x3c1a93cd,0x3c44e8a9,0x3c675f81,0x3cad3a43,0x3c966313,0x3c9ce4ee,0x3ca43081,0x3cc00f92,0x3cbcfa00,0x3ce45f8f,0x3cdc1dc9,0x3ccfb79a,0x3c9b9178,0x3c6427ba,0x3c743a8c,0xbba98473,0x3bd4a628, -0x3b5340aa,0x3b0d6d8b,0x39b142f7,0xba97a4d6,0xbb2352a2,0xbb9f31a1,0xbb8a26cc,0xbb93ad84,0xbb9d924d,0xbb9cc293,0xbb836d94,0xbb4557ce,0xbb2597f4,0xbb1f3e85,0xbb05c8bf,0xbac344ac,0x395e6821,0xbb3447c9,0xbb17a6da,0xba60ccfa,0x3c68eac6,0xbb4919ff,0xbac00d9a,0x3c6690f8,0x3c53cb6f, -0x3c326f34,0x3c0a3e8a,0x3bdb93cc,0x3b803513,0x3b4890e2,0xbb28bcc5,0xb9971d70,0x3b2465ed,0xbbbdb397,0x3b955bc2,0xb9a005eb,0x3b21f4d9,0xbc3de769,0xbb7fce32,0xbb832ba2,0xbb1a616e,0x3a95f2b0,0x3af5583b,0x397a6196,0x3b24cdfd,0x3b12adc1,0x3a08f51b,0xba7a6764,0xbb0ddb05,0xbb87256b, -0xbb0e1d2b,0xbacbb235,0xba8c4795,0x38d7e393,0x3a923f6b,0xbb0aa8f7,0x3bbf224c,0x3c0e7919,0x3c427e22,0x3b9ec4c5,0x3c1d4c2f,0x3c776aa4,0x3c4216bb,0x3c337f54,0x3c301916,0x3c2f4d0a,0x3c2a2c06,0x3c30e8d1,0x3c23f2f3,0x3b191887,0x3c7dff3e,0x3c26390c,0x3cf682c9,0xbcaf0a6b,0xbcfb445a, -0xbd04b3f1,0xbcfd82b8,0xbc8167a6,0xbba7d270,0xbb966ac8,0x3b49014a,0x3b956a3b,0x3b2f63b1,0x3b43c86b,0xb71f9205,0xbbe25000,0xbb7e6896,0xbb0203a0,0xba1420cf,0x3b3f700f,0x3b17d510,0x3ad3d976,0x3c6d458c,0x3be68598,0x3bb70a4b,0x3c23388f,0x3c4e3bf9,0x3c6e2388,0x3c0ecdff,0x3bbec306, -0x3bcdb065,0x3b461f41,0x3b8aba35,0x3c0a642a,0x3c18090d,0x3c3f0b61,0x3c92926e,0x3bbf6194,0x3c5f68ee,0xbcf8241b,0xbd8660f2,0xbd36d493,0xbd329136,0xbc05f728,0x3b99320e,0xbb26d6b7,0x3c8605a3,0x3c571ba0,0xba0bf7dd,0xbbe3f42b,0xbc7a6bdc,0xbcd3522a,0xbc692afb,0xbc13f8c2,0xbbb416d0, -0x3b91310f,0x3ba0cb6f,0x3bdf4ce7,0x3c8efba5,0x3c629d27,0x3bde54e1,0x3c827bad,0x3cbaf2de,0x3ce348ad,0x3c9654de,0x3c331020,0x3c3e37ef,0x3c0e0f46,0x3c3fd691,0x3c75b619,0x3c90cdc9,0x3c94f2a7,0x3cd63eb8,0x3ba403dd,0x3d303957,0xbda3b2e7,0xbe2a67fb,0xbe1cf8e0,0xbe1343ed,0xbd853eb9, -0xbcd68aa5,0xbcf047fe,0x3bc180dd,0x3ca82e5b,0x3c219685,0x3c3b050f,0xba7df939,0xbcd6b941,0xbc5189ff,0xbba087d0,0x3a42e7d2,0x3c59d91e,0x3bee1271,0x3c4b1fc9,0x3cb1b778,0x3c71ef51,0x3c6fef63,0x3c8691dd,0x3cbc84cc,0x3d377e05,0x3cc5daf0,0x3c683b17,0x3bfb39ee,0x3c6883c5,0x3c47fabb, -0x3c8a4939,0x3cd660d8,0x3d33246f,0x3d27eb14,0x3ccf3433,0xbd92c31a,0xbda9fd52,0xbd843e14,0xbcd9ab97,0x3dd458b9,0x3d869955,0x3d9b38a5,0x3e1036dd,0x3d59fe11,0x3bc62bbb,0xbcfad591,0xbd6d2afc,0xbd96d24a,0xbdb3266e,0xbd89fa96,0xbd6fcbf8,0xbd625fee,0xbcbde101,0x3b91b13b,0x3d33dd2d, -0x3d1a1f4a,0x3cb35576,0x3c082d8a,0x3c9c01a0,0x3cafe001,0x3d0d0ccc,0x3c58b3ef,0x3c9b3fc0,0x3d30b253,0x3d5369e0,0x3d1d3d19,0x3abf3964,0xbc7c8d22,0xbc6d9e79,0xbcb48819,0xbd290e42,0x3c7ba4a1,0x3cbd007e,0x3ddbae21,0x3dd8fbf6,0x3da311eb,0x3d9586c4,0x3d9799a7,0x3d7e7de8,0x3c2583f7, -0xbcccd379,0xbd9bdb0a,0xbdb4ce99,0xbdbf6afa,0xbda4180d,0xbd976944,0xbd37e40b,0x3bc1f381,0xbbc9ee32,0xbbd38219,0x3c5817aa,0x3cc5d10d,0x3cfa866d,0x3ca3a2a1,0x3cba0430,0x3cc8c954,0x3d5a4461,0x3cd6187d,0x3cadaed7,0x3c50c2bc,0x3d3d930e,0x3d448beb,0x3d2cb2cb,0x3d76bfdd,0x3d3deac2, -0x3ca2ae1d,0x3d09f145,0xbce1a57f,0xbc788535,0x3d3884c9,0xbcb626c7,0xbdf3d6f4,0xbdef8f0e,0xbdd0fb11,0xbd3303d0,0xbbca06e9,0x3ce9d8b8,0x3d3c2af0,0x3d9b6aa7,0x3d9e3444,0x3d713229,0x3cabea37,0xbc80038c,0xbd59ed9c,0xbcf8a67e,0xbc5fa9cd,0xbcc47c30,0xbc8775a8,0xbc39b0fa,0x3bd7d300, -0x3c3f8ce1,0x3cdb4a27,0x3dc10bb8,0x3c8724f1,0xbc1b4f63,0x3a972a70,0x3ba980c8,0x3cb8da29,0x3da0ee17,0xbb4a589a,0xbcb9b6d2,0xbd0ef9a8,0xbcc4bc06,0xbcb6678f,0x3bef579a,0x3c9d6a9c,0xbb9f0ed0,0xbc304114,0xbd7af516,0xbd9fdb8f,0xbd708bb4,0xbd98f6c8,0xbd2a044a,0x3cb7b06c,0x3d57990e, -0x3da2c7ee,0x3dcc8bf5,0x3db97fed,0x3d994e86,0x3d394d33,0x3d8eb86e,0x3d884b24,0x3cc56fb0,0x3ba57099,0x3bd90488,0x3b6f54b3,0x3c09ce5c,0x3c8ffca3,0x3d6d0bd8,0x3c877092,0x3bb8589f,0x3d0c6b5a,0x3c227546,0x3c1ed61e,0x3d0eb9a1,0x3c22af9d,0x3c1c1560,0xba18f7ca,0xbb8273b7,0x3ab4427a, -0x3b9549a5,0xbbf8412c,0xbcae9686,0xbd68aff7,0xbd8720bd,0xbd30ecfa,0x3c9904ac,0x3cdaf406,0x3cc3ba86,0x3c0f213e,0x3b99ef25,0x3b41ef56,0xbb2dd067,0x3c8efe79,0x3cf9918d,0x3d201714,0x3d0683c7,0x3c93e37a,0x3c44277c,0xbb7a8ffe,0x3bcfa5a3,0x3c543d7d,0x3c67f3fa,0x3c94e276,0x3c9c78ea, -0x3c9da636,0x3c6ec21a,0x3b7c54b0,0x3be83700,0x3c5b46d9,0x3cbcbe3d,0x3c4b33c3,0x3bde423d,0x3c09a5c4,0x3bf9db2d,0x3c097ef1,0x3c9f60e5,0x3c253b46,0xbb743105,0xbcedc3b8,0x3c2edcef,0x3c68ca0a,0x3b0d75db,0xbcc80114,0xbcc1fd38,0xba227798,0x3c392cc9,0x3bd5df0c,0xbc92a7e1,0xbc8cdd90, -0xbc1d02c5,0x3a6330db,0x3c4c8c45,0x3cc43134,0x3cce7c71,0x3c16760d,0x3c37df3c,0x3c741ad5,0x3c997d18,0x3c8d5e77,0x3c555494,0x3c409166,0x3c576d5c,0x3c507b41,0x3c9fa9c5,0x3c9337be,0x3c4a5b48,0x3c2f391d,0x3c3209be,0x3ca900e0,0x3c11a598,0xbbeebd8b,0xbcb8c0e1,0xbcb4ef7a,0xbc8a6365, -0xbc6eeda4,0xbba53435,0x3b513231,0x3c99212e,0x3c0a5365,0xbbdd2a1c,0xbcda4c74,0xbca4fff5,0xbc20308a,0x3b517318,0xba07e474,0xbbffb869,0xbca2f71f,0xbca78c5c,0xbc9a4428,0xbc5e8032,0xbbb4c396,0x3a4fd3a5,0x3bcba5a9,0x3c380f58,0x3c82ce95,0x3c917615,0x3c87460a,0x3c4152dc,0x3c1af15d, -0x3c239386,0x3c518c39,0x3c6fff84,0x3c74251f,0x3c3cf1e3,0x3c589b98,0x3ad0ba19,0x3cce9622,0x3cb5de25,0x3ca8ef15,0x3ca29a28,0x3c8d66f9,0x3c832bb0,0x3c714ee6,0x3c70348f,0x3c3c3cd4,0x3c6278b1,0x3c6225d1,0x3c5916da,0x3c0b1164,0x3bafcc29,0x3b4e4124,0x3b87a488,0x3bcf9dbc,0x3c1b3528, -0x3c3d4a38,0x3c1f500f,0xbbadfe9f,0x3bfd37d3,0x3c19eea5,0x3c22dc42,0x3c464c61,0x3c977cc5,0x3c885a89,0x3c93e296,0x3c9d2ea7,0x3c94748c,0x3c5bee31,0x3ca31f7e,0x3c6ee8ff,0x3c9cd394,0x3cb4d150,0x3c9c21f4,0x3cde557d,0x3cbbaf20,0x3cbaefbc,0x3cbcc950,0x3cc19969,0x3cc4999b,0x3cc32ca1, -0x3cc34cf4,0x3cb6c2b3,0x3ca44ba9,0x3c964f95,0x3c81b486,0x3c699eeb,0x3c414c1e,0x3c7a77f9,0x3c8dac28,0x3c979d32,0x3c991e1f,0x3c9a662a,0x3cbc36dd,0x3ca40013,0x3c8bd0fa,0x3bab2dc1,0x3cd7319d,0x3cb67e9b,0x3c59942e,0x3c72d087,0x3c85692a,0x3c88a29e,0x3c997f05,0x3ca8b2d4,0x3ca0eeca, -0x3cbc1bff,0x3ccb3e86,0x3c753c78,0x3cccbfc4,0x3d05a5e0,0xbc04be1a,0xbc5136da,0xbc1e2a5b,0xbc2d44f2,0xbc36ebad,0xbc42ebf7,0xbc4fc79f,0xbc47f9bf,0xbc2ffd9a,0xbc3c34c8,0xbc3fb4d4,0xbc4c4e99,0xbc335306,0xbc27ef0c,0xbc0ab513,0xbc141023,0xbc0d4f85,0xbc0f6729,0xbbf488fb,0xbbdeaefc, -0xbc05df50,0xbbc8adf9,0xbb88831a,0xbae8882d,0xbb5d8bbb,0xbaaa8e13,0x3b1c1339,0x3ab555f2,0x39a81caf,0xba8648d3,0xba5af84a,0xb930d997,0x3abb4112,0xbb78b867,0xbbd48d8d,0xbb8d4e18,0xbc369dca,0xbd123d1c,0xbcca7a24,0xbc412a13,0xbbe6c9d2,0xbb882557,0xbbcd7bf2,0xbc4d507a,0xbc46d579, -0xbc8236b0,0xbc854189,0xbc93963d,0xbc569882,0xbc0b483e,0xbb70392f,0xbba26daf,0xbbb6757c,0xbc0388c0,0xbb8b52f5,0xbb91d3f1,0xbc09b4f5,0xbb85081c,0xbbb0cb6f,0xbbc7f332,0x3b45c36d,0x3bb9fe09,0x3b6ca148,0x3b133101,0x3a344de9,0x3979a86a,0xba447e37,0xbabb9373,0x3af1941e,0xbb6b1e9c, -0xbc083fb1,0xbc82b6c1,0xbcb0d430,0xbd85d2b0,0xbd4e6a69,0xbccbf7a6,0xbd17fab3,0xbd0d86b6,0xbce3c88f,0xbd058d09,0xbceb5a97,0xbd1ede4e,0xbd31a74e,0xbd303ae5,0xbd10be55,0xbce5487b,0xbc897e23,0xbc990292,0xbc883ca0,0xbc7a18ed,0xbc0ad991,0xbb91e05e,0xbc071850,0xbbbcc264,0xba7007ea, -0xbbbe8f12,0x3c5db99a,0x3c9a03b1,0x3c650f25,0x3c7df193,0x3c3dd15e,0x3c0b98d4,0x3c0a8b7e,0x3c00982f,0x3c2805ba,0x3b5e4e5f,0xbc008b06,0xbcdf67d9,0xbd3397f4,0xbe0a9442,0xbdcf8854,0xbcfe15d8,0xbcc33954,0x3aa1a47d,0x3c7ce312,0xbc445aa1,0xbc8edeee,0xbd1ed999,0xbd34cbf2,0xbd4bd6de, -0xbd0c3808,0xbca0eb23,0xbb622bb9,0xbc16dcf9,0xbc0577af,0xbc1ed543,0x3b5a9432,0x3a9a5cac,0xbc2c951c,0x375e0665,0xbb6275be,0xbbb51ec0,0x3c8c825f,0x3cf2b7b5,0x3d0bb44c,0x3cc94149,0x3c840706,0x3c83937a,0x3ca5cea0,0x3c81431a,0x3c1027de,0xba4c3160,0xbcf1857f,0xbd499b2a,0xbdadd4a4, -0xbcb8f84f,0x3d5d29ec,0x3dc206bc,0x3ca93682,0xbdfcce2e,0xbe31473e,0xbe3d9f9a,0xbdf7236f,0xbe131ef1,0xbe284a29,0xbe3da5aa,0xbe263ab0,0xbe06a169,0xbdce9666,0xbd6747ac,0xbd47978b,0xbdabafae,0xbd3a9276,0xbcfe949f,0xbc2de858,0x3b0379cc,0xbb9d0694,0x3c242398,0x3c3f2d6f,0x3c7cbd17, -0x3d0903da,0x3cbe4d5e,0x3cae486d,0x3cc452ac,0x3c85bcfe,0x3c4e405e,0x3c2507e0,0xbb322265,0xbcdea12e,0xbcdc4bf2,0xbd50f933,0x3ddb193d,0x3e08a457,0x3e1eab2f,0x3dfac341,0x3d97c72c,0xbd6225b5,0xbdcab51b,0xbcb28d2f,0xbd044795,0x3c30271b,0x3d761a9e,0x3d830fd3,0x3d7c3054,0x3d721087, -0x3d7143e7,0x3d5ca7a4,0x3d038e24,0x3c077929,0xbc9e7631,0xbc4660ba,0xbc57f129,0xbc600b0a,0xbc118ee0,0x3be3f786,0x3c813dd3,0x3d283656,0x3c7a2cfe,0x3c1f3df3,0x3c8bed5c,0x3cf83f95,0x3cf531b0,0x3d3741c4,0x3d0c9788,0x3d62904b,0x3dacb153,0x3dd11a61,0x3d30f8c8,0x3d1c2792,0x3d30b477, -0x3d58791a,0x3d355e3d,0x3d13f53b,0x3cc8a800,0x3d881695,0x3d06f9d8,0x3bc2e281,0xbd514ceb,0xbd8723fd,0xbd7ee97d,0xbd34fb43,0xbc52e8ab,0xbbfc1e26,0xbcdf509f,0xbc634811,0xbb240fb1,0xbb6e468e,0x3c0d014e,0x3c63b0fb,0x3c9aac9d,0x3c53f7e3,0x3cb297a6,0x3d8b0ec0,0x3cce8278,0x3b672e0f, -0x3c3e026a,0x3b8da210,0x3cb75b27,0x3d95989c,0x3d0a7170,0x3d10813f,0x3c15fb52,0x3c8c6b5f,0x3cecfcaa,0x3bab2e3c,0x3c9256fa,0x3d1e329e,0x3d49a4ab,0xbb4e046e,0xbc6a2861,0x3cbfc240,0x3cee1d8b,0x3d1e71bb,0x3cfd6eaa,0x3cbe07f6,0x3bb098fa,0xbc8ecd3c,0xbc7a3a86,0xbbaccb1c,0x3bced4fb, -0x3c51ddd7,0x3c4fe4c3,0x3cb14e18,0x3cfaf09f,0x3cd001cf,0x3d0e98c0,0x3d2929ec,0x3d14190b,0x3d2daa75,0x3be5442c,0xbb817467,0x3cb11f74,0x3bf63592,0x3c7b82ba,0x3d075cbd,0x3cc1831f,0x3cf29870,0x3c959c7c,0x3ccd01fd,0x3b532340,0x3c227cec,0xb938bf46,0xbb7aeb18,0x3d15e1fc,0x3b60b53f, -0xbb31a0fb,0x3c0ea413,0x37a1cb6d,0x3be039e0,0x3cb6dafa,0x3c0da68d,0xbbaf7838,0xbc86a8c9,0xbbfed912,0xbc4d8f59,0xbcf27a02,0x3c1dc5a9,0x3c223f47,0xb8a0fad6,0x3c63ebf2,0x3b78010f,0x3ab6e03e,0x3c4f3bf8,0x3c8a4552,0x3cabfc27,0x3ccae6ef,0x3c92d21a,0x3c021763,0x3c530fe7,0x3ca1fab7, -0x3ceaeea4,0x3ca4c1c2,0x3c6d0433,0x3c164bfa,0x3b0494f3,0x3cb8cd2c,0x3be02211,0x3cba6dd2,0x3c81b1e9,0xbc5cc88c,0xbcf05ca1,0xbcb88403,0x3c86dd53,0x3bd4ec3f,0x3b646e8c,0xbb713bcd,0x3c1945eb,0x3c873d59,0x3cae13f9,0xbbcfe94f,0xbc71e5ae,0xba2fa763,0x3be44e05,0x3bc4363d,0x3be6b09b, -0x3c556afa,0x3bbf6ccb,0x3c1dda4d,0x3c7749e1,0x3c86fce7,0x3c162d5e,0x3bef4b91,0x3c1beaf7,0x3c3988dc,0x3b5b4499,0x3b3c7184,0x3c9dfd88,0x3c24748e,0x3c501f2d,0x3c7a8872,0x3cc0a80e,0x3c77ffab,0x3cd26dcf,0x3c60025f,0xbbf67746,0xbcbbf4a9,0xbc0e233a,0xb8a629e5,0x3c3865b4,0x3c090df7, -0x3c57bf4c,0x3c7fdd28,0x3bb5477a,0xbbeaaffa,0xbc8380fa,0xbc4b55fd,0xbc080281,0xbb346259,0xbab90d5e,0x3b82802b,0x3b3b2a59,0xbb475540,0x3b3a1571,0x3b1ea566,0x3b2b0756,0x3c06b8f0,0x3c1d60d9,0x3c543497,0x3bd1312e,0x3c2c7968,0x3c9b126b,0x3ce9d376,0x3d106187,0x3d0a17de,0x3d04d6fd, -0x3cf79bf6,0x3cc37798,0xbc04513a,0xbc5b230e,0xbbb9884f,0x3b5e8773,0x3c2cd648,0x3c712678,0x3c90123d,0x3caf90c8,0x3c73d826,0x3becedbb,0x3ac32bbb,0xbae1332f,0xbb05ad39,0xbbacc328,0xba23af58,0x3a929ba0,0x3b05e3d6,0x3b1d6df2,0x3afaf320,0x3b9b7da4,0x3c6b1323,0x3b6a098a,0x39f74bbc, -0x3a8692b4,0xb9a3b8a9,0xbbcc4f17,0xbc05fb27,0xbc187f5d,0xbc14d011,0xbc6c4f32,0xbc90db15,0xbc9f48fc,0xbc94e2f5,0xbc7ad07d,0xbc725e08,0xbc61a65b,0x3b8dbd96,0x399b7e65,0x3ba561c0,0x3bcf87b5,0x3c09c77c,0x3c20dcce,0x3c3fd8e1,0x3c76463e,0x3c5b5e78,0x3c5edc7a,0x3c5366b5,0x3c3f9fb1, -0x3c21d587,0x3c00f77d,0x3bd43db1,0x3ba96723,0x3b9c4668,0x3b9d5c73,0x3ba529f8,0x3b214780,0x3be8ef17,0x3c3a0be3,0x3cc5f6a0,0x3b5b3a81,0x3c1465ef,0x3cb915dd,0x3cadb3e3,0x3c9f4ad5,0x3c8e1ed6,0x3c8613ae,0x3c7b8555,0x3c59e4ae,0x3b9b9863,0xba4f9bd9,0x3c95b147,0x3be4c1c2,0x3c037cb1, -0xbc4ffbbf,0xbbdadc9f,0xbc071122,0xbc3049a8,0xbc3fa5f0,0xbc7bc8fc,0xbc919d7d,0xbca11743,0xbcc26c0c,0xbc834106,0xbc6e7f73,0xbc93b042,0xbc673859,0xbc515603,0xbc3ccc34,0xbc479efe,0xbc3f638c,0xbc27f1fe,0xbc30cbb7,0xbc2d3d79,0xbc22f68f,0xbc0c4e82,0xbbece377,0xbbaba7fb,0xbbc858d0, -0xbba46349,0xbb837911,0xbb68a651,0xbb6ef2e6,0xbb7de46d,0xbb8ac4a5,0xbb9a081e,0xbb7b9140,0xbbc5e3f6,0xbbc2132e,0xbbf6aec7,0xbbfe6e24,0xbc04f047,0x3bcf248e,0xba4a5f2e,0xbc14d817,0xbcd42f51,0xbd2a582d,0xbd3efd37,0xbd57ee02,0xbcf33aaf,0xbcc22a06,0xbd0b2320,0xbcd65a1d,0xbcc2880c, -0xbc92aa01,0xbc971e4b,0xbc85a0b9,0xbc3dae67,0xbc40f13f,0xbc27345b,0xbbdca0a3,0xbbff6d87,0xbbf93b87,0xbb9c9019,0xb933426c,0x3aecf536,0xbb0e1481,0xbab290c0,0xbb2304bf,0xba8763a6,0xbbb783de,0xbb8ba7e5,0x3ac6af16,0x3b77c593,0x3bab678c,0x3b4ca56d,0xbb0b0bac,0x3bbf82c6,0x3c93902b, -0x3ca77722,0x3c1deed8,0xbc5474db,0xbd6d08f6,0xbd893eb2,0xbdaf1888,0xbd13864a,0xbcad626e,0xbd298f17,0xbca9335f,0xbc805336,0xbc037d0d,0xbc557042,0xbc2d8231,0xbadf95af,0xbbdcce95,0xbbce3aa2,0xb911c9be,0xbbb44c15,0xbb2cb35b,0x3b9b9265,0x3c4c321f,0x3c68e32e,0x3bec086f,0x3c3c38dc, -0x3c0459d6,0x3c3bb1fe,0x3b446c37,0x3bad0de3,0x3c538196,0x3c390a21,0x3c0373fe,0x3c339ca1,0x3c054080,0x3d047029,0x3d9e006a,0x3da5a7aa,0x3d691545,0xbc8d0c25,0xbdd61164,0xbe045add,0xbe1580e6,0xbd82c0eb,0xbd0d15bf,0xbd80fc56,0xbd29e32c,0xbd0bbafe,0xbc8095f8,0xbcbc4a05,0xbc91ad65, -0xbacef162,0xbc185fcd,0xbb778f7c,0x3b9b4115,0xbbd108f0,0xb79c37f1,0x3b2542cd,0x3cc3fc8f,0x3cf2bd77,0x3ce88fa1,0x3cc1b6b0,0x3c8eead3,0x3cb1dbbc,0x3c53b0eb,0x3c410b99,0x3ce1f03b,0x3d0fa99e,0x3d0b33f0,0x3d33580c,0x3d14b2d7,0x3cc54d7a,0xbcbe0a8e,0xbd99e94a,0xbda1c2ed,0xbd6e32a0, -0xbd4e78e9,0xbcaca4f8,0xbca76f5b,0xbcd1377e,0xbc9b3798,0xbd08cb60,0xbc0be1f9,0xb98eee58,0x3caffb8a,0x3c45fad9,0x3ca4b3b9,0x3cf83bf8,0x3cf3ce93,0x3cb61693,0xbbe4628b,0xbc8b5d11,0xbb2aceb8,0x3be9bc07,0x3c93e695,0x3ca29cba,0x3cc586c4,0x3ced01b6,0x3cdc713a,0x3c8e49a6,0x3d137274, -0x3d1658f8,0x3c2dd632,0x3b0d3258,0x3b825073,0xba486b1e,0x3c84a8a0,0x3dc9bdb0,0x3d7e3808,0x3cde2fe4,0x3d57aaba,0x3dff91b6,0xbca80a9f,0xbdc2555f,0xbdb852d0,0xbd87dbb4,0xbd997a8f,0xbe076415,0xbdd234ba,0xbd960bcd,0xbd369e16,0xbcdcd031,0xbcd8bebd,0xbd2fa9ad,0xbc94a5d5,0xbc893822, -0xbd14c4b2,0xbce95179,0xbcac7a1e,0xbc66ab4a,0x3c06b752,0x3c745156,0x3ccd6d80,0x3ca0fe82,0x3c226fd7,0x3b78c10c,0x3c78f2f7,0x3cd322ef,0x3d800047,0x3d062496,0x3d0b1950,0x3d92c6e6,0x3d92f07a,0xbd3485eb,0xbd3e8c69,0xbd0ba7b5,0xbc09ea47,0x3d08dd1c,0x3cb4137e,0x3d9a30a1,0x3dacc3a5, -0x3db2648f,0x3d45172a,0xb92d8c14,0xbd15c9e8,0xbd9e0b9a,0xbdcda7d0,0xbdf30969,0xbdd91eb2,0xbd897d5c,0xbd8747d3,0xbd58bee6,0xbc4724d3,0xba487ae3,0x3ba52e5c,0xbbf70e12,0x3cfd0f25,0x3d17c570,0x3ce3138e,0x3c86d425,0x3a92ede6,0x3c869957,0xbb8f8639,0x3c7a8548,0x3d872203,0x3d7c3096, -0x3d1607b1,0xbbb5a736,0xbd0436b2,0xbbb7e43e,0x3b396b68,0xba839f98,0xbc744bd4,0xbcad9ce0,0xbc122f9b,0x3c806e80,0x3d44bb38,0x3dc64082,0x3e0b0624,0x3e13c610,0x3de84acc,0x3da4d021,0x3d82391f,0x3d15a3b5,0x3ca30c5b,0x3b00ecc7,0xbc5510fa,0xbca5080e,0xbc7f5b86,0xbbc29921,0xba94fa87, -0x3b1e3d5d,0x3cef6237,0x3cd03616,0x3c79d2e2,0x3c9841ee,0x3c7260dd,0x3cce7718,0x3c8f3b2a,0x3c954666,0x3c2753db,0x3c67d54f,0x3c99c65a,0x3c9d15ca,0x3bcc2633,0x3bddb567,0x3bd6c72f,0x3bbaa79f,0x39f7f495,0xbcaa10c0,0xbd132753,0xbccf6638,0x3c8b4508,0x3c3b3e2c,0x3cc4166f,0x3d292c4c, -0x3d845675,0x3d99e351,0x3d8744ba,0x3d1cc436,0x3cce0725,0x3c726a95,0xba58bd75,0xbbd00f64,0xbcadf16b,0xbc72e43e,0xbc7aa266,0xbbdc4c52,0xbb56f5b5,0x3b6181d7,0x3c8c0b6e,0x3c45bbb8,0x3c158d2a,0x3c294925,0x3c093538,0x3c918d4c,0x3d009a67,0x3cbf61cf,0x3c6a6c57,0x3baf0588,0x3b8b6573, -0x3ad13bbe,0xbb980183,0xbc886998,0xbc4aef73,0xbac10156,0xbb345506,0x3bbfd5e2,0x3ce60461,0x3d4dd67e,0x3d5f6c19,0x3d024b20,0x3cbe4a9a,0x3ca68011,0x3ce164db,0x3d3d75a5,0x3d302b96,0x3cce4145,0x3c64f21b,0x3b6b4d8c,0xbb8dac18,0x3b21e26b,0x3c157cf9,0x3c0eccb3,0x3bd26d06,0x3c5968ae, -0x3cea801c,0x3c8e7f3c,0x3c40ee73,0x3c183913,0x3bd7ab7a,0x3bc6e384,0x3b8437a9,0x3b659833,0x3b042c2a,0xbb4ffd5c,0xba8c16e0,0x3ca53bc7,0x3c672761,0x3c132754,0x3c29d370,0x3bc6a553,0x3c834df9,0x3cb5df89,0x3ccb0a50,0x3c78648c,0x3c153fc3,0x3bde3879,0x3c2242c9,0x3c47f16e,0x3c4ab490, -0x3bbfaeb5,0x3ade94ca,0x3a5534c4,0x3c3c52fb,0x3cb876a1,0x3cdc664d,0x3c9c1885,0x3c8f045a,0x3c809e51,0x3c3b9cdf,0x3b39a8c8,0xba9a3009,0x3ada6cd1,0x3c758ce3,0x3c5c0682,0x3c8dd6aa,0x3c7d240a,0x3c8be8bb,0x3c54f7c2,0x3c689baf,0x3c4cca75,0x3c5690ee,0xbb221037,0x3bb268dd,0x3c25fa6b, -0x3c80f421,0x3ca12299,0x3cca05e2,0x3ce795bc,0x3d125cb4,0x3d13e2a6,0x3d15a8e4,0x3d0a3f15,0x3ce02fe9,0x3ca7aac1,0x3c697fce,0x3c7df09f,0x3c893f9a,0x3c80e571,0x3c5dd992,0x3c53d2cc,0x3c406a85,0xbbcf5e61,0x3ba41a9f,0x3bca6a7c,0x3be984dc,0x3bc85268,0x3c41b2cc,0x3c15c6fa,0x3b88708c, -0xbb018933,0xbb25f670,0xbbcfd7e5,0xbc33cca2,0xbc066984,0xbbf4a0ed,0xbb884c87,0xbaa08201,0x3c45a807,0x3c522920,0x3c5a174d,0x3c6e1464,0x3c846da0,0x3c8b0d17,0x3c933d30,0x3c9cdce7,0x3c901d5f,0x3c8ab803,0x3c8c5edd,0x3c97d957,0x3ca44784,0x3ca4a926,0x3ca61d81,0x3ca1f928,0x3ca4f80c, -0x3ca54407,0x3c9cb27f,0x3cb2441a,0x3c887410,0x3c525a91,0x3b0ab58a,0x3c8c391b,0x3c50c9df,0x3b2e23f9,0x3aaf711f,0x3afab9be,0x3b4ab68b,0x3b19d61e,0x3b3239c4,0x3b2c0b4f,0x3c21d728,0x3c5c6774,0x3b3069bf,0x3c227749,0x3c89cdfb,0xbc6ae618,0xbc869df5,0xbc8e4ed3,0xbc7a945a,0xbc8f32de, -0xbcaa4a43,0xbc8fce85,0xbc8ae455,0xbcac5aec,0xbc68ff7e,0xbc5689c9,0xbc770bbb,0xbc751219,0xbc6b8f03,0xbc3fe8f3,0xbc4aa72d,0xbc48cd18,0xbc4e383b,0xbc43caed,0xbc417db4,0xbc37f305,0xbc5f4438,0xbc5725c5,0xbc251b1e,0xbc3eec7a,0xbc3bbf0b,0xbc2ad5d1,0xbc24b7bb,0xbc2124e2,0xbc233774, -0xbc35c820,0xbc2fa8b1,0xbc076994,0xbc31ee48,0xbc558efc,0xbbeef82e,0xbc500e23,0xbb4fb0c8,0xbcc4902d,0xbcc8774c,0xbcdbf6de,0xbd05df46,0xbcbe330a,0xbcb08f68,0xbd060301,0xbc93ab40,0xbc72c2c2,0xbc9ac3a9,0xbc929d87,0xbc845ffe,0xbc31a47a,0xbc56f3c1,0xbc606fad,0xbc7002c3,0xbc5a29f1, -0xbc402f79,0xbc1bb249,0xbc338ff8,0xbc1405df,0xbbee9133,0xbb90a0ae,0xbb2fa0e2,0xbbaa339e,0xbb69085d,0xbbbc77da,0xbc058bcc,0xbc19563d,0xbc06a607,0xbb0e5f1d,0xbb8046d5,0xbb81ae1d,0xba879d89,0xbc29dcb6,0xbc021cb1,0xbcd17da5,0xbd22a8b5,0xbd226b54,0xbd79adb4,0xbd1068e7,0xbceaf96a, -0xbd43a327,0xbcaa914d,0xbc864f03,0xbcc7371b,0xbcc9703e,0xbcaf0745,0xbc14a9f4,0xbc1fb175,0xbbf8b365,0xbc301fe1,0xbbc1dd75,0xbbb06202,0xbb436360,0xbbdd58d8,0xbb97e100,0xba0fb36a,0x3b9ccb7e,0x3bcecc90,0x3b3a2d6a,0x3c044d20,0x3bc44eec,0x3b3c989c,0xbb0a3c61,0xbaa02f05,0x3bfa83e6, -0x3baf92bc,0x3be220a8,0x3c20fede,0xbc39c09b,0x3cb9130b,0xbd176976,0xbd847dd9,0xbd8b1201,0xbdab737d,0xbd1e5e28,0xbccbde79,0xbd6e756d,0xbce6bcbf,0xbca2de66,0xbcebe803,0xbcdd20ce,0xbc96f10b,0xbbd33810,0xbbf94196,0xbc319443,0xbc805c82,0xbc06949c,0xbaf81e1e,0x3c13fba4,0x3abe7b72, -0x3be0a5bc,0x3c3978fe,0x3ca66d2c,0x3cd828d7,0x3ce8c183,0x3cd33061,0x3c922970,0x3c6d5858,0x3bf1f51b,0x3c1e16ca,0x3cc7e2a7,0x3cfbb6fa,0x3d17ff89,0x3d193fa9,0x3c8f1966,0xbdd5ea5a,0xbd9983cc,0xbdb564f7,0xbd7d6b24,0xbcae5c3a,0xbd7ab6ab,0xbd8bb2b6,0xbd92703a,0xbcc833ff,0xbc0971ff, -0x3ba2a127,0x3bcc4cdd,0x3bbe0460,0x3b367302,0x3b76231b,0x3c920b7e,0x3d0ee9a4,0x3c8d3fd3,0x3c250575,0x3c96b829,0x3bdb74a0,0x3bc9b3ab,0x3c0ed46b,0x3cc63aca,0x3ca9e136,0x3be48ed3,0x3ce5f04f,0x3cfc7c2d,0x3c944f83,0x3d10a1c2,0x3c8c1128,0xbcba2e72,0xbc1476bd,0xbc57c28c,0xbd105e0d, -0xbdb1216d,0x3d336e55,0x3d89a7cc,0x3d6f96ec,0xbbf571c0,0xbd9a7ffa,0xbdb31015,0xbda8cda1,0xbe0f2c9d,0xbd1c33c7,0x3c7cb0d2,0x3d12f1b2,0x3c33ad7d,0xbc664d54,0xbc82b900,0xbd4d9dd0,0xbd76e6b2,0xbd7898a6,0xbcf3137a,0xbbe4a988,0xbc22fbf5,0xbbe847a2,0x3b897985,0x3beed44e,0x3cea5d62, -0x3d04579c,0x3ce38bf5,0x3c4c79e4,0x39de268f,0x3bb71f57,0x3c1e6a76,0x3cbaddc3,0x3d4b838b,0x3cbce472,0x3c806336,0x3cd4ae72,0x3d2e1f77,0xbc64f804,0x3c77f65c,0x3c90d39c,0x3d79ce75,0x3e36ee77,0x3e03e5fa,0x3dc0c456,0x3d639079,0x3d3db540,0x3d2e90f3,0x3d090db5,0x3cc6dde8,0x3c4cbbcf, -0x3a53bdca,0xbbba2706,0xbba032dc,0xbc21a823,0xbcd80147,0xbd155e91,0xbd05298a,0xbd0054f4,0xbcab9871,0xbca92d38,0x3d039268,0x3cef4006,0xbca029be,0x3b8f8fc3,0xbb844bc1,0xb994d8ab,0xbc5939c7,0x3bc28401,0x3d1f6e11,0x3d39c052,0x3d5231a9,0xbb12c90d,0xbb7b6597,0x3cac23ba,0x3c50dae5, -0x3a7f8bf3,0x3a7a259d,0x3d1a27b4,0xbbf0fb87,0x3be62dc6,0x3d5fcf7b,0x3db13300,0x3db0ddc5,0x3d22b3c4,0x3d3a730c,0x3d1cb41d,0x3cc9032b,0xbc23fdb7,0xbcaef939,0xbc21bc39,0xbbd17e7f,0xbbb6586b,0xbc37fdbd,0xbca585ac,0xbc561574,0xbc855027,0x3cd99d08,0x3cf0f844,0xba06b1c9,0x3caabb77, -0x3c9dd12a,0x3cd04d68,0x3d093575,0x3d084296,0x3c1bb732,0x3bf70371,0x3c07e3a9,0x3b98dcd3,0x3ca09863,0x3b64406c,0x3bfc083c,0x3d066384,0x3d14cf33,0x3cea7842,0x3aa2cfee,0x3bba3a3a,0x3cbefe93,0x3d127d37,0x3d083acf,0x3b6ba762,0x3c6cf30d,0x3c846eff,0x3d2b5f82,0x3cd2b6d2,0x3cb60046, -0x3c8bbcec,0xbc44b95a,0xbc877995,0xbb2e0707,0xbab251fe,0x3c107ff8,0x3bdcc1f9,0x3b893d68,0x3b996bc6,0x3c07f6c6,0x3af80e59,0x3a2fed09,0x3c2d8b18,0x3bca953e,0x3c3f85ad,0x3c8f57a5,0x3cfd30e4,0x3cf7a5e8,0x3c6bc73d,0x3c0a6adc,0x3c2bac7d,0x3cc42f10,0x3cde5138,0x3c53df94,0x3b8fc6f1, -0xbcc03c19,0xbce3c38e,0xbc914d09,0xbb681413,0xba29aa99,0xbc4daa00,0xbc447f64,0xbc30ef5d,0xbc044d92,0xbbd33844,0xbbf313db,0xbc73d80d,0xba3fb111,0x3ba75445,0x3b6e708b,0x3b816941,0x3ae5405a,0x3b20f488,0x3b825e44,0x3bc2dcdb,0x3c837280,0x3c805424,0x3c328862,0xbb660dbf,0x3b95ce7c, -0x3bc3b809,0x3baed92e,0x3b12f789,0x3afd6f51,0xb77973bd,0x3c462173,0x3a823726,0x3b59d3b9,0xba9e3b41,0xbbe128ae,0xbbd03de1,0xbc256dc1,0xbc61a110,0xbcafc29e,0xbc23c443,0x3a47bdc4,0x3c5b800b,0x3ab474b9,0xbc31c7af,0xbcd19d73,0xbc3b76ed,0x3b13eb8a,0x3c42665a,0x3c3a6b82,0x3bcc18a8, -0x3c6adcaa,0x3c9d3b7d,0x3c5f36a3,0x3c2650a2,0x3c031d39,0x3c109f8d,0x3b9a5a24,0x3c56c74a,0x3c651175,0x3ccb03f8,0x3c7df196,0x3c3b95e6,0x3bb7c061,0x3c03ec57,0x3c16e201,0x3c35639c,0x3c0279f2,0x3b61aec3,0xbba74700,0xbb8216d5,0xbb8b0d0f,0xbbcad524,0xbbedf4d6,0xbbee3116,0xbc12adea, -0xbae7baf8,0x3b2c7975,0x3c281742,0x3c9a12dc,0x3cf9de3a,0x3d24fe14,0x3d122586,0x3cf09fab,0x3cd8b403,0x3cce6b42,0x3cc1be79,0x3cb08cf0,0x3cf9373c,0x3c84cd41,0x3c61ccf9,0x3c58a1e4,0x3c3c38a4,0x3ae0d3a8,0x3999eaed,0xb9746a0c,0x3b048004,0xba9416e3,0x3b1d0c67,0xba045b8c,0x3b43d563, -0x3aab26c5,0xbb210b7c,0xbb6b6862,0xbb47dcb2,0xbc70f83d,0xbc5539fb,0xbc61d38b,0xbc60e67e,0xbc6658f6,0xbc6d7b3d,0xbc811d74,0xbc5d1b26,0xbc44e68a,0xbc396783,0xbc215930,0xbc186c17,0xbbd01355,0xbbf94bfc,0xbbdf1346,0xbbf2200c,0xbc01ad8c,0xbc01f1b5,0xbc3da91a,0x3b174fee,0x3c2100fc, -0x3cc2cd54,0xbbc580a6,0x3ba9b3d4,0x3ca726ed,0x3ca001b9,0x3c8fa7a3,0x3c74fbc8,0x3c723d87,0x3c56a89b,0x3c58def8,0x3bb1479b,0xbbbc20d8,0x3c886c40,0x3b98d647,0xbcac16ed,0x3aae1f10,0xbc0ba7e3,0xba5af020,0xbb2c933a,0xba925677,0xbaba6f37,0xb9c96934,0xb9c9284f,0x3a53a26e,0xb86bfe2d, -0x3a667c55,0x3b87c6c5,0x3abd8ac8,0x3ac5e756,0x3b6fe647,0x3b13c2c1,0x3adb5b9a,0xb963a45c,0x3b17d099,0x3b071126,0x3afcf6b0,0xbb58b180,0xbbdf4fd5,0xbc66ff59,0x392530cf,0xbbb05661,0xbc525814,0xbc43453f,0xbc4279f1,0xbc4d6398,0xbc57d051,0xbc57af97,0xbc3a6d78,0xbbc51b60,0xbaa6264d, -0xbc5c2ad2,0xbc3acd00,0xbcc25c4f,0xbb95f51b,0x39951180,0x38e50120,0xbb4fa6ef,0xbb01990f,0xbaa1ae77,0x3b95faf9,0x3ab8f4ec,0x3b237229,0x3c1ad988,0x3a9ecb1c,0x3a841f9a,0x3be5944b,0x3b9b45fe,0x3b96d434,0x3994f04a,0x3be70b27,0x3bd1979f,0x3a8f11a6,0xbbbdbcfe,0xba20f04c,0x3b14010f, -0x3b7ed188,0x3b5980d3,0x3b1609d0,0x3ba27b72,0x3b757df9,0xbad8128f,0x3a548e44,0x3b1e6bcb,0x3b330598,0x3993cdf1,0xbb869152,0xbb8f5eea,0xbc36cfdc,0xbd2bf333,0xbd0b692b,0xbcc11136,0xbcaeee96,0xbc9b9950,0xbb68b481,0xbc070917,0x3abe4fdb,0xbc30aa45,0xbbae3405,0x3c3c640c,0xbb3162c1, -0xbb712671,0x3bfd4368,0x3ac7b043,0x3a606af5,0xbc111438,0x3bf014b8,0x3c0062e6,0xbadc61d1,0xb98d071d,0xba18fc5f,0x3b3cae8d,0x3c147264,0x3c096c0b,0x3ab8c9c3,0x3c0a3bf0,0x3c0fcef6,0xb7f1440c,0x3a103b77,0xbabad29c,0x3bc6c61b,0x39c452f8,0xbba90624,0xbc273315,0xbcf614b1,0xbd960a95, -0xbd27b33a,0xbc88a478,0xbcc10bf2,0xbcc96241,0xbbec3997,0xbb4d0417,0x3c86d386,0xbb759aaf,0xbb6df43a,0x3c8b6fa5,0xbc008ada,0xbc008a8c,0x3c13c49b,0x3bb84da3,0x3baa91a6,0xbc01bdd4,0x3c978bbe,0x3c9137d9,0x3b858aa6,0x3c19c279,0x3bcbc444,0x3c365cff,0x3ca7b049,0x3cd75d3e,0x3c974627, -0x3cddacad,0x3ca4b64a,0x3c4278c5,0x3c16d966,0x3bff72a9,0x3c704239,0x3be09d33,0xbc04cf23,0xbc4c9804,0xbd4edb9e,0xbd88c012,0xbcb94f70,0xbd0ba73a,0xbd0984df,0x3bec20bc,0xbae34590,0xbc976612,0xbd4c6500,0xbce991ca,0xbc91c79e,0x3ba1b82a,0xbca5374a,0xbd1446d2,0xbd20a8a0,0xbd248990, -0xbd154b2a,0xbd0dc5ee,0xbcf81420,0xbcf919ec,0xbc8e1908,0xba9f0a80,0xbbe24bc0,0xbbb6bed5,0x3c52f28a,0x3c76abd7,0xba9ae143,0x3cb2b774,0x3cd29be6,0x3bcffac8,0x3ca0f131,0x3bda862e,0xbc4b6be7,0xbb93098e,0xbc887355,0xbd1c0c8e,0xbd89f1df,0x3d7bc8a0,0x3d25f014,0xbae165a1,0xbcb1fb27, -0xbd52703f,0xbd112e75,0xbd241346,0xbd9baf12,0xbcab0d09,0xbc95e9df,0xbd2c4931,0xbcab9113,0xbc1db5dc,0xbb4cdae9,0xbb85a360,0x3be8696c,0x3c98f5b9,0xbb53fa56,0xbb810838,0x3c00258f,0x3a8fb4de,0x3c464cec,0x3c6df16f,0x3cc8fb5c,0x3cea7171,0x3cf50246,0x3c2bf09b,0xbbacf910,0x3bc75842, -0xbb504601,0x3c2adaed,0x3d101433,0x3c6f29d4,0x3b98f1c9,0x3a9fc7cd,0x3d130574,0xbc7e622b,0x3c9f6e18,0x3d8a2650,0x3dd7a6ca,0x3e032702,0x3de1a6f2,0x3d6749a7,0xbcab07dc,0xbc97d046,0xbcf1499d,0xbd22c592,0xbd5b045d,0xbd353df0,0xbbbc23d7,0xbb876a01,0xb97194c1,0x3a5332e4,0xbb3ea255, -0xbc182539,0xbc89dc7a,0xbc6d77ad,0xbbe25783,0xbc8072b8,0x3d19b7de,0x3cf59da8,0xbd043029,0x3b680bfd,0xb95669c5,0x38eb4265,0xbc0619ac,0x3b67a5ee,0x3c12e830,0x3d61db40,0x3d9012cc,0x3d21a2e4,0x3a9e40d4,0x3949a3bd,0x3c42e16b,0x3c993eea,0xbb482820,0xbd10410d,0xbc99e06a,0x3bae2729, -0x3c4e6e76,0x3d2f176b,0x3cf5007f,0xbbe20810,0xbcbe98c8,0xbd5b42fe,0xbd9b5908,0xbd9d6ffe,0xbd8c9c67,0xbd4692b2,0xbd363469,0xbd0765e1,0xbc56f699,0xbbad8557,0x3b9286bf,0x3bad7530,0x3d0581bf,0x3d078ec1,0x3b739653,0x3c9c286a,0x3c6b0756,0x3c4e04c2,0x3ce47f03,0x3d0bdba5,0x3c6aed39, -0x3cb996e2,0x3c8aabed,0xba8c41b8,0x3b0551d4,0x3c8e0750,0x3c086e94,0xb9b4da1c,0x3c10b9f1,0x3d08fa61,0x3cf763b8,0x3bc5fa8e,0xbd40d2eb,0xbbe863d0,0x3bdf3470,0xbb0742e3,0x3c1e9763,0x3c757b9d,0x3c706365,0x3c8ebd6c,0x3c5ba19f,0x3c63b354,0x3c021dc0,0x3bb5bbf6,0x3bdfdef4,0x3c131710, -0x3c803651,0x3c1dd721,0x3c6717aa,0x3c7b8a11,0x3c38619e,0xb92d9bec,0xbb49d382,0xb9871a03,0x3ae04964,0x3b952986,0x3b3ab3a4,0x3c904d8a,0x3cb1d608,0x3c43de2f,0x3c9af446,0x3c19f815,0x3c678fc8,0x3ccf23b4,0x3cdf603b,0x3c341fe6,0x3afca46f,0xbc101c61,0xbd09ee80,0xbc96ce15,0xbc4e4137, -0xbb3a3d91,0xbc18704c,0xbc40e69d,0xbbf84aab,0xbc8ae5ca,0xbc8ed15c,0xbc9cbadf,0xbc185f34,0xbb54e59c,0xbb05cb89,0xbb60c51b,0xbbb5b822,0x39858390,0x3ba9034a,0x3bb6a5da,0x3a317502,0x3bae0ac9,0x3bcd0aa1,0x3c3f7043,0x3c48d8c5,0x3c69c7e8,0x3c853907,0x3c830183,0x3c428442,0x3bdd1876, -0x3a7b0474,0x3c8aa3ca,0x3ca09f20,0x3c853b72,0x3c65af84,0x3c383232,0xb9e948cc,0xbc4fa5f1,0xbcd9eb15,0xbc95e5a4,0xbc5486f8,0xbba35b49,0xbb89f0a8,0xbb240374,0xba28669a,0xba714ea2,0xba563dbb,0xbac6ce41,0xbbe2e30f,0xbc64a5f9,0xbc9b2303,0xbbe183bc,0xbae66bf6,0x3bcbe15b,0x3ba88702, -0x3ba8966d,0x3bbe0314,0x3bb9b372,0x3bc6aa5b,0x3be46574,0x3bcfa072,0x3bd035fb,0x3bbcc7fc,0x3c00f3df,0x3c2ebba1,0x3c50c605,0x3c744fed,0xbae8deff,0x3bb039a4,0x38b89919,0xbbb34ab6,0xbc0f61d6,0xbc5b67ff,0xbc8196e6,0xbca81ce0,0xbc8bb738,0xbc7fc0b6,0xbc61f2c7,0xbc425266,0xbc2188ae, -0xbc09158b,0xbbd64954,0xbb986220,0xbae73f7a,0xba2c9b53,0x3ae55968,0x3b165fc1,0x3b33afbf,0xb9f6267a,0xbb82a1a1,0xbbf05e55,0xbc0198ad,0xbc0e7718,0xbb9968cd,0xbb464dfa,0xb9ca60f3,0x3b81eb39,0x3bf26148,0x3c49a8f3,0x3c18e017,0x3bf6a6b7,0x3bd4019a,0x3bea7d2a,0xbc4b01d3,0xbb56d3d0, -0xbbd6feb3,0xbbe69f21,0xbc0e40bb,0xbc1c91d2,0xbc2f519b,0xbc505a5e,0xbc3bf1ef,0xbc31d4a5,0xbc2452c5,0xbc136532,0xbc00b4dd,0xbbd109e0,0xbbd7a397,0xbbe22e69,0xbbf02ade,0xbbe737a0,0xbbd3d029,0xbbac8c59,0xbc765ecf,0xbc97866e,0xbca4906f,0xbc4f8585,0xbc9ea573,0xbcc30010,0xbcb006fc, -0xbca12950,0xbc93040f,0xbc8a07f1,0xbc81d44c,0xbc672cbf,0xbc66c8f2,0xbc041dc5,0xbc9c7201,0xbc855450,0xbc2cb66b,0xb9d576c0,0x3acda3cd,0x39e5cdb2,0x3b3fc06e,0x3b85908f,0x3b329db5,0x3a6a11b1,0xba1e3b93,0xba210654,0xbb52d1be,0xbb491933,0x39f36101,0xba1237c5,0xb9f59464,0xbb0b42be, -0xbabb0b97,0xbaca8d2c,0xbb08f1af,0xbac71653,0xbab045cb,0xbb67d871,0x3ae4dde4,0x3b8f66bb,0x3bd40b50,0x3b6ab6fc,0x3bada215,0x3b990458,0x3bccb013,0x3bc486e8,0x3b8ded8e,0x3bab1208,0x3bb21530,0x3be0327f,0x3b7830b8,0x3a383ef9,0x3b731c9c,0x3ac2cc74,0xbb33ffb5,0x3c004b70,0x3c20cb9d, -0x3c181362,0x3b533565,0xbab1bafc,0xbb96333a,0xbb763157,0xbc3ab36e,0xbc130143,0x3b6f86d0,0x3b211222,0x3a578f69,0xbbad8e8f,0xbb917d00,0xbb97f76f,0xbbb997c6,0xbb370de9,0xbb350eee,0xbbacc1c5,0x3b358de7,0x3ae148e1,0x3bc48ac6,0x3be768a0,0x3be0c798,0x3a858fa7,0x3b7b94b1,0x3b7b10a6, -0x3b23545a,0x3aad25f1,0x3af01e29,0x3bdbadf0,0x3b500ed4,0x3b23755f,0x3b0bb0e3,0xbaf8c6b9,0xbbcb7863,0x3c352dc8,0x3cf14917,0x3ce75830,0x3ca86b33,0x3c39ca1b,0x3b1814dd,0x3b9b4af5,0xbc818837,0xbc6b2556,0x3bf7700f,0x3b368dc8,0x3ba8b0e2,0xbb88d72d,0xbb7a961c,0xbbc734f3,0xbc0f4e1e, -0xbbd287f4,0xbbf2059d,0xbc37477e,0xbb4da8a2,0x3a1ef55c,0x3c21885a,0x3c35042d,0x3c32e119,0xba4d073d,0x3c122a13,0x3ba101fc,0x3b603592,0x3ac11478,0x3b77793d,0x3c569cb6,0x3ac57b37,0xbb301bb2,0xbaa9105a,0xbbb60f1d,0x3baee5bb,0x3d3343b5,0x3d644410,0x3d4a3805,0x3cdf72f2,0x3b6d8de0, -0xbb0e9498,0x3b8901da,0xbcd3df4a,0xbcb4e203,0x3cb7eb14,0x3c7f7c90,0x3c27de44,0xbbb98fe4,0xbc10f781,0xbc148061,0xbc5aece5,0xbbe8d52b,0xbc0ad318,0xbc8f642d,0xbaf361ce,0x3abd8059,0x3c434a66,0x3caac16c,0x3c9d740b,0x3b23dfa2,0x3ca9a240,0x3ca29362,0x3c154b47,0x3bd4a376,0x3bed3fea, -0x3cc5503b,0x3c25917c,0x3b522cb5,0x3c52b8e4,0x3b0f7b33,0xbc5a2a42,0xbd147cd1,0xbd82b30a,0xbd35ff66,0xbc9ca0e2,0x3ca9bcec,0x3b8e0dc8,0xbd60d57f,0xbd3500c1,0xbd33911b,0xbd0786e2,0xbcbc9cb3,0xbbe075ab,0x3bff91cf,0xba49d88c,0xbc40b093,0xbcc2f487,0xbc849808,0xbc7d73f8,0xbce622a1, -0xbcc88c00,0xbc880135,0xbc00d576,0x3b78bcb2,0x3c524197,0x3c39557c,0x3c972217,0x3c9e1d78,0x3c098d5f,0x3caf67f2,0x3c54e11e,0xbb81e174,0xbba634c1,0xbb404c14,0xbc6dbde4,0xbc2be651,0xbb83c91a,0xbbcf9199,0xbd2d4d2c,0xbd796029,0xbdcb7795,0xbd9ee1c4,0xbd867792,0xbda08a25,0xbdc96899, -0xbdc0a891,0xbcc4381f,0xbcff752e,0xbd0552a9,0xbd082999,0xbd3dffa4,0xbd04ae78,0x3c2a7f5c,0xb910f521,0xbb9d4e2e,0x3aa8799d,0xbb53f10d,0xba8f9eb3,0x3b73e927,0x3c895db6,0x3c9d1c6f,0x3c39886e,0x3c3b1cff,0x3b01c35a,0x3b7d9393,0xbb6d96d7,0x3c51eeb7,0x3d0ac308,0x3ca712f1,0x3b35421e, -0xbcbd756b,0xbc4151a9,0x3d3bbfd8,0x3d9f5d18,0x3db1dc07,0x3db8165d,0x3d86ce5d,0x3da55d0d,0x3d14765d,0xbd88817d,0xbd236df0,0xbd1cebf3,0xbd032f85,0xbccd78af,0xbca06f97,0xbc5ab8fb,0xbc4b4dd3,0xbc377310,0xbbe43caa,0xbc8b8cdd,0xbc8ee9d5,0xbc3975d2,0xbc3c8eb8,0xb89334ab,0x3bc70e19, -0x3d201506,0x3d05203c,0xbc7ecc9e,0x3c0ed4eb,0x3b8cb34d,0x3c00faf6,0x3afbe82a,0x3bdeb336,0xbc3e5a9c,0x3d3d70bf,0x3d92cbd3,0x3d7bf61d,0x3d54f253,0x3c472196,0x3b8d6b28,0x3ba99f12,0x3c89adab,0x3d0cb3a0,0x3d7309fe,0x3d6b5fda,0x3c3d349a,0x3d1082f6,0x3cb03572,0xbb4fa894,0xbd619bab, -0xbda69b6c,0xbda5d279,0xbd897ed7,0xbd5c4411,0xbd278302,0xbd11cf2f,0xbcee91d8,0xbc89d3eb,0xbb8e21ea,0x3c039a19,0x3bc94acb,0x3cd05f51,0x3cb02638,0xbc0c29ef,0x3c889f23,0x3c7c5c70,0xb9e7f79a,0x3c8ac70d,0x3ce4946f,0x3cd22f64,0x3cea4e79,0x3ca25416,0x3bc7ea7d,0x3c2c063e,0x3c20106d, -0x3ca9aa77,0x3cb2246d,0x3cd4218c,0x3cf07e37,0x3ca30398,0x3b5b5b1a,0xbce96b05,0x3a21c06a,0x3cddd4d4,0x3d9745a7,0x3d898e5f,0x3d72df01,0x3d117943,0x3ca033b5,0x3bbef309,0x3c559651,0x3c8ff115,0x3cb80048,0x3ca6c8d4,0x3c7ea5e3,0x3c6a363a,0x3c25889c,0x3cbb6368,0x3ccbe94e,0x3c8e8b6d, -0x3c0aca0d,0x3b8c9334,0x39e435a8,0x3be79661,0x3c02b153,0x3bd2c724,0x3c9a9c81,0x3cc4f578,0x3c9b8693,0x3c52c0b5,0x3c0afc9e,0x3bea373d,0x3c613b22,0x3cbd477d,0x3ce9d504,0x3cd3b42e,0x3c98f2fc,0x39deab37,0x3c0139eb,0x3c0a8c77,0x3c8ba812,0x3b233354,0xbc3979d3,0xbce9cff4,0xbcbad469, -0xbc3c23e4,0x3bdfc8bc,0xbb9588a3,0xbbe11b07,0xbbcccfdd,0xbbebc24f,0xb992a7c1,0x3b049a96,0x3c2e3224,0x3c5ba4bb,0x3c492fda,0x3c46b374,0x3c4e4d46,0x3c913ed0,0x3c8de753,0x3caaf670,0x3cc22a0f,0x3cb03aec,0x3c8ec53c,0x3c39c809,0x3c60737a,0x3c7494b8,0x3c9da20e,0x3c89da83,0x3c593b20, -0x3c2b5400,0x3c20cbe3,0x3c3a0948,0x3c5f6605,0x3c8c975c,0x3cb0290b,0x3ce41109,0x3cf5d242,0x3d08ab09,0x3d112dbc,0x3cdcd438,0x3c81b8ae,0x3bdb2d64,0x3c29103a,0x3ca31215,0x3c901d8b,0x3bee0d78,0x3c5e71ff,0x3c72f264,0x3c70e078,0x3c4476f5,0x3c77137c,0x3c30dd60,0x3c787d74,0x3c0d9c70, -0x3c2a81ca,0x3bc47e0a,0x3bd9210a,0x3bddacaf,0x3bf6ae4e,0x3bcf8b70,0x3c1c5567,0x3b8a8170,0x390d9bec,0xbabc5fa3,0xb9e86031,0xba013f71,0xb9f11644,0xba6f1f4a,0xbac3bbab,0xbabd13b1,0xbae8bda9,0xbb0d4cb3,0xba8f3936,0x390a2271,0x3b5f1ecb,0x3b90c0ab,0x3bf81c6b,0x3c0c78ba,0x3c0b438f, -0x3bd407d8,0x3c0808f5,0x3b6acf53,0x3bf730e5,0x3c068d47,0x3bfdbe97,0x3bd76808,0x3c1982b1,0x3c1fb993,0x3c1df8ef,0x3bf30968,0x3c286e6d,0x3c334e67,0x3c17eb5d,0x3bf9cfc3,0x3bae7e20,0x3bca70c6,0x3b9c9d13,0x3b975d74,0x3b81b032,0x3b9918d1,0x3b908e16,0x3b8966e9,0x3b838883,0x3b77ffac, -0x3b5dae90,0x3b8a141c,0x3ba6dfbc,0x3bc17596,0x3bd3f05e,0x3bdaba4b,0x3bda08e8,0x3bce335c,0x3bc1a243,0x3bc78bcf,0x3bcf5cc6,0x3bcb2926,0x3bf70379,0x3bf1c4a7,0x3b97beb2,0xbb7a1532,0x3bfcd6fc,0x3b9c9d1e,0xbb9ac90f,0xbb899e1a,0xbb5caeb6,0xbae91d5c,0xbb14d433,0xbae16316,0xba7d9864, -0x3b98420b,0x3be2c017,0xb9fb34b1,0x3b7246c7,0x3bf1a059,0xbb8a1c3c,0xbb84cb40,0xbb80787d,0xbb90eb71,0xbbb2f0ea,0xbb923863,0xbb9c1c07,0xbbade41a,0xbc01b364,0xbbea94bc,0xbbc97217,0xbb832ad9,0xbb42bd11,0xbb56969a,0xbbb9021f,0xbba32cd0,0xbb965b97,0xbb386cd9,0xbb7dd2a3,0xbb7fd51f, -0xbb1a1aca,0xbb65638b,0xbb44d316,0xb94c6e72,0xbb236c03,0xbb32eeeb,0xbb2d893c,0xbb016813,0xbb0ab6d7,0xbb360d48,0xbb38caf7,0xbb1a407a,0xb9331b95,0xbb694d1c,0xbba1dc4f,0xbb1f59ad,0xbb70ab0d,0xba4b3330,0xbc004766,0xbc15da82,0xbbcaabe4,0xbab020c1,0xba763cc9,0xbb877a1a,0xbc4e7b0e, -0xbc6148aa,0xbc46cc12,0xbbd4daef,0xbad56799,0xba91cf5a,0xbbf27c16,0xbbd31e59,0xbbd7c19a,0xbb21797b,0xbbe607be,0xbbb820f3,0xbb4777cb,0xbb85c22a,0x3a4dfd56,0x3b198b8d,0x3af5c9cc,0x3a5c033e,0xbaddcb7a,0xba9e3a22,0xbaeb1a07,0xbb35adbd,0xbb44b581,0xbaf1685c,0x3b3b6df2,0xbae9f138, -0xbb86f764,0xbbb43ae5,0xbbe84f61,0x3b6bdaab,0xba7b6583,0xbc71d411,0xbc28b6ae,0xbb676f32,0xbbf5961e,0xbc278043,0xbcc97b2a,0xbccbbba3,0xbc9a23df,0xbbd95636,0x3b1ad09b,0x3aba51fd,0xbc49fc63,0xbc0fdc79,0xbc055943,0x3ae7005e,0xbbd410af,0xbb86e203,0xbb337057,0xbb3c6d0c,0x3b8ba842, -0x3c30857f,0x3bf8ee36,0x3bb72368,0x3b5fb10f,0x3b81825f,0x3ac33b7c,0x386d14f9,0xba97a89f,0x39f6666b,0x3c3dba1b,0x3a2e970a,0xbb31fb02,0xbb36d0a4,0xbb718314,0x3bd24cc0,0xbc3f52c7,0xbcbce3d9,0xbb644bd5,0x3c823a33,0x3c0226ed,0xbba5898f,0xbcf700e0,0xbd10310d,0xbcddf9c7,0xbc1561ce, -0x3c18af65,0x3c097863,0xbc3ca0cf,0xbc03204e,0xbc0cb159,0x3b1aa280,0xbc753a90,0xbc1afbba,0xbba91e88,0xbc2400ae,0x3bbdc077,0x3c661ee7,0x3c8ec0bd,0x3c38c41e,0x3b01da92,0x3c6189c7,0x3c86bbf3,0x3bd223cb,0x3b8e3a59,0x3bb5c199,0x3cb685ed,0x3c0a5734,0x3b9d341d,0xb9d86a0f,0xbbcaf410, -0xbd179f52,0xbd5db51c,0xbd68a86e,0xbd7ee8c1,0xbdb269d6,0xbd1f19d6,0xbc8407cf,0xbc9053a2,0xbcee8fff,0xbd008c21,0xbc80c3cf,0xbc31ba8f,0x3affaa7e,0xbb0b45b4,0xbc7229c7,0xbc4aa8c7,0x3c7db71b,0x3c1125dc,0x3bb1c261,0xbbe691fa,0xbc09326b,0x3b5f9ac9,0x3c170fe4,0x3bee1ac0,0x3c61f6cb, -0x3cc81060,0x3c97eddc,0x3c74a12a,0x3c3389a5,0x3c7ef7b6,0x39e0499d,0xbbba14df,0xbc8d0448,0xbca6007c,0xbc9ff627,0xbcb51cba,0xbc8f49a9,0xbcc76a1c,0xbd94bb11,0xbd8f1951,0xbd0cc8cb,0xbbfbc44b,0xbb5f09f8,0xbc1d903b,0xbd2f5a24,0xbd2f3304,0xbb03b863,0xbcd23835,0xbd053dbe,0xbd067521, -0xbc9c6151,0xbc8dbd2d,0xbce1ec5f,0xbc914796,0xbc24330f,0xbc040af6,0xbbfd6755,0xbb84efcd,0x3c046727,0x3cbdeb05,0x3c9dd114,0xbba72069,0x3ae7d40d,0x39dcb23d,0x3b819405,0xbaf8782c,0x3be80af8,0x3b234d81,0x3ca39898,0x3c3fdc81,0xbc9ebb4a,0xbc993063,0x3d82f42a,0x3d9dc5e0,0x3dc73dd9, -0x3db99128,0x3d42545a,0x3d3fd524,0x3c5158bb,0xbd2aa8a0,0xbd2ef7ed,0xbd26a104,0x3b7ffa33,0xbc8523e5,0xbcb264ee,0xbcfc7a05,0xbd3537dd,0xbd244656,0xbc8f7a51,0xbc7de468,0xbc650bfe,0xbc1fb4ff,0xbc581e3b,0xbb35cb9a,0x3c1f1b1f,0x3cebf589,0x3cdb7ace,0xbab2b9a1,0x3c2d8b96,0x3b8e0f95, -0x3b7b4fe4,0x3bf9b941,0x3c6c1b6c,0xbb93a7aa,0x3d1662fb,0x3d615dda,0x3d95959a,0x3d89d684,0xbb9bc1a0,0xbc1cb68b,0xbc1b4d1f,0x3c284478,0x3cd4a0ce,0x3da386f8,0x3da30457,0x3d01e849,0x3c97a564,0xbbc2097d,0x3ae25698,0xbd0abe0c,0xbd3aa2ec,0xbd45bf01,0xbd62eaef,0xbd67c58d,0xbd3f915c, -0xbd116ad1,0xbcc942e2,0xbc8ff30d,0xbc01e89b,0xb99e2685,0x3bae6c8f,0x3c017ffd,0x3bb07771,0xbc36bf2c,0x3ba43d00,0x3c1b9d58,0x3b55379d,0x3c180e9f,0x3c9b02b8,0x3cfee143,0x3d0357c8,0x3cc0a62a,0x3c0e78b6,0x3aa16c61,0x3c81be4c,0x3c2a2e29,0x3ba76d29,0x3b6b14b2,0x3c4eaa20,0x3bff2edb, -0x3b8e1c7a,0x3bd930a1,0x3c6cb4a5,0x3ce90144,0x3d742179,0x3d179f8a,0x3cdc20d5,0x3c77848f,0x3ca7aa43,0x3cb4727a,0x3c8977fb,0x3c59c2fb,0x3c357f75,0x3c3806aa,0x3bd5339e,0x3bbdb1d7,0x3c6b5b09,0x3ce4670b,0x3cef2f99,0x3c69810b,0x3c763667,0x3c67bf0b,0x3c5de1ff,0x3c6d2c3b,0x3c2bdb64, -0x3c33be6d,0x3c997e4b,0x3cbff680,0x3cb58435,0x3c9c7a88,0x3bf86099,0x3bbf2774,0x3a582aab,0x3bd64df8,0x3ce6e4b5,0x3c513e56,0x3b60f47e,0x3b543905,0xbcd56e44,0xbcd35096,0x3ad3ec53,0x3b9dbb2d,0x3beaea24,0xba248990,0xbc3ad8db,0xbc41bb50,0x3c42d8a2,0x3c74a30e,0x3c7ea463,0x3c1bb534, -0x3bbdbbdb,0x3c43c870,0x3c4cf436,0x3be648c2,0x3bede3e8,0x3c6ee7b9,0x3c92387f,0x3c966537,0x3c69de0d,0x3cc64f2c,0x3cdfaaf2,0x3c8fb800,0x3cab468c,0x3c8419d9,0x3c1cdebe,0x3bb94843,0x3c4fc2fb,0x3c3bc654,0x3c3e4edf,0x3c64a97a,0x3c6bf0d6,0x3c0aa7d6,0x3b47ee68,0xbb414012,0xbb0af425, -0xbb86bb56,0xbc241493,0xba22df9c,0x3c08c80a,0x3c86130f,0x3cbdbf2c,0x3ce53ee3,0x3cfe9d30,0x3cdccf21,0x3ccf2217,0x3cdafacc,0x3ccb2eb3,0x3c9598fc,0x3c77c253,0x3c8abac4,0x3c8c37f8,0x3c872180,0x3c73ce1e,0x3c76e2f2,0x3c709148,0x3c371efe,0x3c11848e,0x3c065b67,0x3bcc1b7c,0x3bab4486, -0x3b72a8ce,0x3c11d3f8,0x3b241db3,0x3bf57f2c,0x3bbf22fa,0x3b2120ee,0x39630ed6,0xba867c32,0xbb1fa5df,0xbbac4479,0xbbdb865c,0xbc05a510,0xbc24f1a3,0xbc490d59,0xbc7fd3c9,0xbc93338a,0xbc938172,0xbc929eeb,0xbc8cc0c0,0xbc5ada3f,0xbc37f9b5,0xbc106a41,0x3b0b3a87,0x3b89d72a,0x3bff6a90, -0x3c25f403,0x3c6aa3e0,0x3c92e806,0x3c97f412,0x3c98d028,0x3c9b8855,0x3ca55890,0x3cb62aca,0x3cae34e8,0x3c9fa0e5,0x3c7808d9,0x3c3b2cbb,0x3c2f6b16,0x3bcced41,0x3c27ab4f,0x3c036268,0x3bf95cf2,0x3be362c3,0x3bc2419d,0x3baaffa6,0x3ba41d96,0x3b819c3e,0x3b4dce21,0x3b3ace2f,0x3ae5710a, -0x3a89c4e3,0xb98cf26f,0x3ab1e7c5,0x3b2ade65,0x3b6bb7db,0x3b74a0cb,0x3b90ea40,0x3b6f807d,0x3b9c1988,0x3bb08f35,0x3be9d36f,0x3c0b01d8,0x3c124b08,0x3c0f708b,0x3c0432ec,0x3c023a53,0x3bfc76c2,0x3bf1715e,0x3bd8fbe5,0x3beb256e,0x3c0c5437,0x3c28e5de,0x3ba2d0af,0x3bc2bd66,0x3c29af7d, -0xb9ac74ce,0xbb504b07,0xbb5333b4,0xbb3ab1c3,0xbae10ba4,0x3a969862,0x3a6e114f,0x3a6cb6a0,0x3ac69b8a,0xbae2695f,0xbb174ad8,0xba0b3ea7,0xba5d118c,0xba17ede3,0xb9b0faab,0xba75b14b,0xba45ca3f,0x3a06ef0c,0xb7182a05,0x396db68e,0x3b1cc9aa,0x3a680d8f,0x39489f85,0xbab0be7b,0x3a87cfe6, -0xb913b25a,0xbb0d9c81,0xbb40acc8,0xbb5191eb,0xbb5d155f,0xbb5bf636,0xbb3dfa68,0xba86e90c,0xbaa95f86,0xba69e198,0xbba009b2,0xbb5f6871,0xbc333978,0xbc284e64,0xbbee1259,0xbba4f88b,0xba17e130,0xba4ff4b2,0xba19683f,0xb924f184,0xbc1b5d06,0xbc2a0aeb,0xbb8f31ce,0xbb80d458,0xbb293ec4, -0xba6836e3,0xbad207d7,0xba0ecf21,0x3b7db6c6,0x3af7c3ed,0x3b545ec5,0x3bc96a83,0x3b1a3ba0,0x3bb6fb32,0x3bbd7a9f,0x3b849b4a,0x3b3326b6,0x3b8b38a0,0x3a78460c,0xb897781c,0xba4f8e76,0xb946aaa9,0x3a90464e,0x3b78109a,0x3a4c26f9,0xbb426bf1,0xbc04caa8,0xbc1c925a,0xbc943b66,0xbcaa0e68, -0xbca1b9d1,0xbc76e933,0x39a94276,0x3b909793,0x3be5403d,0x3c264665,0xbc278914,0xbc7f14cc,0xbbf01642,0xbc136069,0xbbbf23d0,0xbb8cb532,0xbbb48db7,0xbb6f5fde,0x3b78afdd,0x3aff22a0,0x3ba657a7,0x3c196ea7,0x3c1189f1,0x3c3e57d0,0x3c548f0f,0x3c1c3fc4,0x3bec87b1,0x3c45351c,0x3b712ec6, -0x3a81a6a4,0x380a9350,0xb9eee27f,0x3b023960,0x3c2684ea,0x3b154e92,0xbb8311cd,0xbc557786,0xbc782220,0xbd34f570,0xbd0dc047,0xbccc4867,0xbcba7994,0xbc007422,0x3a1d4665,0x3b9dd830,0x3bde929d,0xbcdd57b8,0xbd04de44,0xbc8d4184,0xbc843de8,0xbc59172b,0xbbb8ab0d,0xbbb5bc51,0xbada3de7, -0x3c36a952,0x3bfc7531,0x3c523744,0x3ca0251f,0x3c4510b9,0x3c889ffe,0x3ca073a7,0x3c70e7c1,0x3c30822d,0x3c4e4223,0x3c45095a,0x3c51b781,0x3b7d72d5,0x3b8ed5b8,0x3ba215f5,0x3c8b5af5,0x3b6cc3d7,0xbc1de6ad,0xbce24aee,0xbd27e757,0xbbe845da,0xbc9ff405,0xbd0e0dd6,0xbd090fdc,0xbcd53b1d, -0xbc8a6f0c,0xbc340b20,0xbb76ad62,0xbae21b76,0xbc3ca405,0xbd296add,0xbca54e63,0xbcc311ed,0xbcfb4355,0xbce3dbbf,0xbca71f6f,0x3906fc74,0xbba9499b,0xbb9e403c,0xbba43abe,0x3b8d290c,0x3c5efa00,0x3ca66333,0x3c4cb3ad,0x3c5dfa26,0x3ccf96f4,0x3c85a81e,0x3c22b045,0x3bcff2a1,0x3bb5462a, -0xb9fe341e,0x3ba1643e,0xbc4f1f4f,0xbc97cded,0xbc3448b9,0xbb8ef3c9,0xbd48d0d2,0xbd39085c,0xbd41ce54,0xbd259dc7,0xbcb239c2,0x3c656e7f,0x3c6bb6c7,0x3c2f5a7f,0xbd36854c,0xbd6e7a38,0xbd1694f2,0xbc1472d9,0x3be610c3,0xbbeda928,0x3b93eb84,0xba5a9705,0xbb8029ff,0xbbbde7e0,0xbb38aa68, -0xbadc05e0,0x3ac90188,0x3bd39b91,0x3c625b72,0x3cd982b7,0x3cbaa94f,0xbba7e502,0xbb49156a,0xbb771e69,0x3b792380,0xbc00aa4d,0xbb9262ec,0xbc2c3a5c,0x3c99a0be,0x3c8d34fd,0xbc236c19,0xbd08ed76,0x3dac6f95,0x3decbbc6,0x3daa149e,0x3d552fcf,0x3c84a476,0xbd4e5a60,0xbd81698b,0xbc9aa90e, -0xbd8460fb,0xbd5fe18d,0xbc3d3516,0xbb9a6c4f,0xbb891d91,0xbd055597,0xbd04484d,0xbd092be3,0xbcb44b5c,0xbb8028c3,0x3a81920a,0xbc2db3df,0xbc07151e,0x3a7c830a,0x3cbb086a,0x3c45e6e6,0x3bef9aca,0xbb6d7898,0x3b3b9e31,0x3abacb1c,0xba992a08,0x3b46249f,0x3c0314f0,0xbb7068b8,0x3cb23d34, -0x3d2abf30,0x3d906ce2,0x3d9a29aa,0xb9a50d05,0x39f131e0,0xbc1fe435,0x3c689e25,0x3d662d59,0x3da2affb,0x3d8d8eef,0x3d2bc0c4,0xbd069f5c,0xbd804332,0xbd30000e,0xbd2d7764,0xbcd2cf13,0xbceddfd2,0xbc9fe53e,0xbcbfa44d,0xbceb0bfe,0xbce6a345,0xbc91d122,0xbc126285,0xbbdea5a9,0x3b929ee2, -0x3cc2a2fe,0x3c305bc3,0x3c21ec85,0x3c0041cc,0x3abdd384,0x3b56a2ae,0x3c00196f,0x3af34176,0x3c1488ef,0x3cee451a,0x3d0b98ea,0x3d06a0b1,0x3cb0cdfd,0x3c678728,0x3c91c8da,0x3c8e6459,0x3c44854a,0xb99d74e0,0xbc72f4c1,0x3aaebba2,0x3c12be53,0x3d05b2fb,0x3c71a763,0x3c9aaf3c,0x3d232e58, -0x3cdaa17a,0x3c70d769,0xba98cf1c,0xbc01d622,0xbbb53a71,0x3b700c35,0x3b9de55b,0x3b9cef07,0x3c0fd576,0x3be6b183,0x3c3228b3,0x3c806080,0x3cc0cd16,0x3cbf9fbc,0x3c39e5cc,0x3c7c200c,0x3c966796,0x3cf34b46,0x3c909aa2,0x3c528ada,0x3c348c0b,0x3c7383b6,0x3c9ac48f,0x3cae6d98,0x3cb32b64, -0x3a2e2f34,0xbbc82367,0xbb7fa1fd,0xbaa72b31,0xbb27250b,0x3c3cc24c,0x3c5b6403,0x3bb5d9a8,0xbc425a0e,0xbc66f93a,0xbbbe2715,0x3c67395f,0x3d02c616,0x3d2a0980,0x3d358680,0x3d0e5ae5,0x3c706229,0x3c6668ff,0x3c6912b5,0x3c7f7523,0x3c9d3285,0x3ca315a2,0x3cac434d,0x3c3ee60a,0x3bc5cbcf, -0x3ba6b094,0x3c41832d,0x3c763309,0x3c95c4df,0x3ca30f16,0x3ca71e58,0x3c92e731,0x3cba43f0,0x3cae9726,0x3c8d2fb8,0x3bf174f5,0x3b5b7cad,0xba6d1359,0x3be1bff5,0x3c5eb097,0x3ca326bf,0x3c75788e,0x3c4d3135,0x3c5ec792,0x3c24c4ef,0x3b9b3ffa,0xbb798289,0xb91fa111,0x3b552a2d,0x3c29a67a, -0x3c16f273,0x3c32e726,0x3c5629b8,0x3c7d4a6e,0x3c6d7c80,0x3c7b999c,0x3c53310f,0x3bedc759,0x3b0c2928,0x3c2e8e4f,0x3c936806,0x3ccc1cb0,0x3c934fc1,0x3c3fe8e4,0x3bfae52b,0x3c00a2ec,0x3c19d521,0x3c245c9e,0x3c0f9a15,0x3bd66454,0x3bcda071,0x3ba9d8ed,0x3c96133e,0x3caafe8b,0x3c94846b, -0x3c748a1f,0x3c5bfb30,0x3c3e9b38,0x3c241298,0x3bf1079d,0x3b9b8d93,0x3b6e3f7e,0x3b1d178e,0x3b015756,0xb8b474b8,0xbb2b13c1,0xbb11eeb9,0xbade40d5,0xbaa9937a,0xbadf59dc,0xba6714d2,0xba8f08a6,0xbb09797e,0x3ba4354d,0x3bf184f0,0x3c2809cd,0x3c3c7b26,0x3c74d829,0x3c81030f,0x3c96cb12, -0x3ca4030d,0x3cab26af,0x3cae3804,0x3cc28644,0x3cb31838,0x3cb41d64,0x3ca8bb60,0x3ca69c33,0x3c6fc1df,0x3c82557e,0x3c6b2b28,0x3c62c512,0x3c4eb087,0x3c47b922,0x3c3faea4,0x3c397db0,0x3c40cb3d,0x3c4049dc,0x3c3d9df4,0x3c2a6af8,0x3c1db7b0,0x3c0b60a9,0x3c131fba,0x3c101cf2,0x3c0c668c, -0x3c0d4a13,0x3c0a1e4d,0x3c0b6575,0x3c0a2556,0x3c13f6f0,0x3c17e7ea,0x3c4444dc,0x3c4c5ed3,0x3c60852a,0x3c6387f6,0x3c645225,0x3c655ac3,0x3c6b25e7,0x3c6cd01f,0x3c6e7450,0x3c67f0cb,0x3c71d0b1,0x3c4eff2b,0x3c6ad1fd,0x3c5fdfa8,0x3a79eb76,0xba1c49bd,0xb9365d85,0xbb299c05,0xbb3178bc, -0xbb31552a,0xba2bd29c,0x39a651d4,0x3b0976a5,0xbac729d6,0xbae6ead0,0x3a9daf41,0xb9c19727,0xb909b33f,0x3982d3c2,0x3a88966b,0x3ac4d8c9,0x3b01a3f3,0x3ac9668c,0x3aea0ae0,0x3b22def5,0x3b4e3526,0x3b4cd38e,0x3b202ac9,0x3b3fd3a7,0x3b298569,0x3b22b5da,0x3a287651,0x3887a2a9,0xb9b242c2, -0x39a021b6,0x3a47b610,0x3b0852c4,0x3ae75661,0x3aac94ee,0xbb080751,0xba4d25a8,0xbc0a08e8,0xbb544ce6,0xbc0b5e05,0xbbfb7182,0xbb5c31dc,0x3b7ff4c0,0x3bbf8ca1,0x3c0701e8,0xbade3f1e,0xbb70bd17,0x3b747164,0xba88c72c,0xbab85c87,0xbacceedb,0x3844e8e3,0x3aa63973,0x3b30a0c5,0x3b4dc064, -0x3b8615de,0x3bdae22e,0x3c054757,0x3c01fdf8,0x3bf86709,0x3bd50a1c,0x3bb56d8d,0x3be05573,0x3adec95b,0x3913b05f,0xb6120427,0x3a5eb3b3,0x3b356048,0x3bb3fdb4,0x3b8d10c1,0x3aba7928,0xbbc434fa,0xbb8003b1,0xbc318b23,0xbbd57bf0,0xbc820786,0xbca1522a,0xbc923021,0xbbafab58,0xba68edfe, -0x3c0ad092,0xbc1883e5,0xbc4afb88,0x3b951762,0xbbd92e07,0xbb90082c,0xb97cf9ae,0x3b05aaac,0x3b7e28b7,0x3ba2f29b,0x3b6fd5cd,0x3ba67a6b,0x3c200456,0x3c5fecfd,0x3c66e017,0x3c5861b9,0x3c438b85,0x3c2decc3,0x3c618dd3,0x3b67ce3f,0xbaa2c84d,0xba7ac92c,0x39a57701,0x3b950dc1,0x3c3039d3, -0x3bd01f99,0x3a8c94dc,0xbc3dcac1,0xbbc4c4bf,0xbc9225bb,0xbbb5cb9e,0xbcac494f,0xbcc47208,0xbc260133,0x3c024102,0x3c74036e,0x3cc2c515,0xbbe4bddd,0xbc58f4a3,0x3c5ec07d,0xbb5f1fb2,0xbb9c38a5,0xb9653ad1,0xb9133e3e,0x3b10d5e6,0x3b9ed1a0,0x3c07b6bf,0x3c171ba5,0x3c719ac7,0x3cc19085, -0x3cae7d49,0x3cae7ce8,0x3c8ba502,0x3c70237c,0x3ca519a1,0x3c3963a3,0x3c1021b9,0x3a892dae,0x3b2cc1b6,0x3bc01d42,0x3c9ba1e0,0x3c3175aa,0x3a35f9f7,0xbc9552a4,0xbc631197,0x3c5d0ac4,0xbca9ea1e,0xbd14b9e1,0xbd3b009d,0xbd438ffc,0xbcda4e18,0xbc70ada1,0xbb5f4577,0x3c514572,0x3b725a0c, -0xbd22e40e,0xbd0bbad7,0xbcf3df38,0xbccb8a2f,0x3a8df4ce,0x3aaedd0f,0xbc9af677,0xbc918e9f,0xbc6f54c3,0xbbba72e8,0x39daf439,0x3bef2990,0x3c8104ee,0x3c147e26,0x3c2d9236,0x3cbb0315,0x3c36d6d3,0x3b8e3825,0x3b8cf5d4,0x3bc844e2,0x3b716e3e,0x3b99c98b,0xbbc296d2,0xbc0133a1,0xbc132903, -0x3c7d871c,0xbd3b4a03,0xbd470626,0xbd329540,0xbcb26b39,0xbc83ca50,0xb927df74,0x3bd11fce,0x3c72ad13,0xbd07dac7,0xbd331f1f,0xbd7ffdc6,0xbc63aa44,0x3af8cfa1,0x3b0231c4,0xba2b8be0,0xbb7f3929,0x3bfe161d,0x3bc46593,0x3b6bccc8,0x3b34d3e9,0x3c0a0d48,0x3c2cdb85,0x3c7983e2,0x3cb038b9, -0x3cb292ec,0x3b2126ab,0xba6dc8e0,0x3a894d8d,0x3b5ae60f,0xbadefc7e,0x399a868b,0xbc2965c7,0x3c7fb533,0x3c661b6f,0x3b2d6610,0xbd02ef31,0x3db8827a,0x3d9bdb96,0x3d52d163,0x3c557e12,0xbd10f8ca,0xbd99c640,0xbda1c881,0xbbfb1193,0xbd89793c,0xbd90cfb3,0xbd8a5c4a,0xbcf7ef88,0xbc966268, -0xbd0fd36a,0xbc40340f,0xbc125ec3,0xbc70f574,0xbc2759fd,0xbb777f19,0xbbf36f05,0xba8d9b53,0x3c34744d,0x3d240445,0xbac87974,0xbc290821,0xbb018b55,0xbb9e18af,0x3a700ed1,0xb9700eed,0xbaee11e2,0x3a925ae8,0xbb44c77a,0x3c38c0f0,0x3ce17a7b,0x3da38d37,0x3d9a2339,0x3c60dc50,0x3caa470b, -0x3cf050e5,0x3d413df5,0x3da0ca34,0x3d7be0cb,0x3d1ece8f,0x3d0ba759,0xbd62efca,0xbd8cee91,0xbd3d1cc8,0xbc479ed5,0x3b151e54,0xbc6df856,0xbc6a0742,0xbc9f8e52,0xbc68ac22,0xbc9d3fa2,0xbc90ecdc,0xbbea7181,0xbb7bd624,0x3b88c055,0x3d0cf26b,0x3c20b417,0x3bcae02c,0x3c4da9bb,0x3b3ba73d, -0x3b0e5965,0x3b41f7cd,0xbb8a3303,0x3a749146,0x3cb41dfd,0x3d08bd78,0x3d15297c,0x3d0a628b,0x3cad7db6,0x3c9f6e95,0x3cbf2167,0x3c8e941e,0x3c23dcfd,0xbb0bf34b,0x3c4cac28,0x3d1223c4,0x3d8b4049,0x3d335e0a,0x3cfd90e9,0x3c14b91c,0x3b9757cb,0xbbaa72ab,0xbcb7983e,0xbcfa72c5,0xbd0a7c87, -0xbcb97f18,0xbc85e151,0xbc31be66,0xbb4a0085,0x3bb4beed,0x3bf87b5c,0x3c873830,0x3c73c58c,0x3c711ad9,0x3c34f408,0x3c5a50d7,0x3c8a2641,0x3cef5b1b,0x3cc16aeb,0x3cac83a6,0x3c6a6595,0x3c672ac2,0x3c8d9bec,0x3cbb9c68,0x3ca92671,0xba9230ee,0xbb553a10,0xbc0b627a,0xbbe027ab,0xbad689e2, -0x3c4a4fa9,0x3c67043c,0x3c115a5e,0x3c74b2f9,0x3c62753f,0x3af82ca1,0x3cc7def1,0x3d231f0f,0x3d5761d3,0x3d57a487,0x3d3f538f,0x3ced7da4,0x3c955e50,0x3c4fae55,0x3c63c5a3,0x3c88237e,0x3c8886e9,0x3c854721,0x3c9a7586,0x3c82d23e,0x3c07164d,0x3bffcac2,0x3c32a929,0x3c999da8,0x3c3cea2b, -0x3c54a9ca,0x3c9e1ce6,0x3cae41cd,0x3ca363a3,0x3c8e2d7e,0x3bf50f73,0x3c134a9d,0x3c10b5c6,0x3c39d869,0x3c410b74,0x3c46ba21,0x3c519f74,0x3c88c174,0x3ca889bf,0x3c8cda7d,0x3c67f893,0x3c2a04b6,0x3ba5f705,0xbadd2bdd,0xbbb54e6a,0xbbaf55e7,0xbb303e4f,0x39e7407d,0xb8a3f8d9,0xbb8e37dc, -0xbb6fe081,0x3b2c321a,0xbac9bec7,0xbb5ca242,0x3b696774,0x3c494456,0x3ca3d3f9,0x3c8b58f3,0x3c3fa7aa,0x3c04e1aa,0x3c32306b,0x3c547ad6,0x3c79873e,0x3c48b393,0x3c361127,0x3c2b6db0,0x3c295667,0x3c8ff832,0x3c7861a4,0x3c6319b7,0x3c54f1ec,0x3c4e387f,0x3c422af5,0x3c23a620,0x3c15b33c, -0x3c0609d4,0x3c097982,0x3c192539,0x3c1c7dfe,0x3c33324a,0x3c3bd6dc,0x3c380b09,0x3c1f8090,0x3c0c6794,0x3bf20a7b,0x3be67bed,0x3bc6b124,0x3befe75f,0x3c13469d,0x3c3c30c1,0x3c491eb1,0x3c40602c,0x3c51f2c3,0x3c4f7d26,0x3c66aa56,0x3c6b8857,0x3c6db2b4,0x3c57d7ee,0x3c6fbae5,0x3c6d954b, -0x3c831713,0x3c8557eb,0x3c7a441b,0x3c4e96ac,0x3c4563e7,0x3c4298a9,0x3c3ae629,0x3c31e7ae,0x3c2cfe50,0x3c2ba497,0x3c24fefc,0x3c2ecf1e,0x3c2e7d02,0x3c287c7e,0x3c2a2012,0x3c26b27c,0x3c2522d4,0x3c1dc882,0x3c1ca150,0x3c1a4576,0x3c1bd360,0x3c1e3d53,0x3c190925,0x3c114df0,0x3c1ccf4d, -0x3c274167,0x3c258e14,0x3c323398,0x3c45f48c,0x3c469dda,0x3c49463a,0x3c4ce1ba,0x3c4d2f8a,0x3c535423,0x3c4d9243,0x3c328ecd,0x3c282e88,0x3c610803,0x3c4e5889,0x3c3e6cd7,0xb9a3f718,0xba5ce356,0x3a3df2b4,0xbb31b607,0xbb4d3011,0xba836b02,0xbabdfb9c,0xba30524d,0x3ae7af0a,0xb98aee7a, -0xba251c04,0xb93473b4,0xbad2649a,0xbb018ce7,0xbb0e7aae,0xba26ed7a,0xb8f89505,0xb91171fa,0xb98931b1,0x3931d3ec,0x3a85983c,0x3ae109f9,0x3b0ec9ae,0x3b322531,0x3ad4b86d,0x3ad10c92,0x3b2b03f2,0x3a35fe78,0x384b99be,0xb9ab1fea,0x3a27f933,0x3ab426c8,0x3b23893f,0x3a7dacc4,0x3864e0d1, -0xbaa49f54,0xb9fe909e,0xbb5e5a9f,0xb8d7315d,0xbc035271,0xbc0db4d4,0xbacfd82b,0xbb2b0d43,0xba5b38e5,0x3b6dff60,0xba9465c8,0xbb3bd348,0xbaa7b633,0xbb38a7a9,0xbb560fb3,0xbb8ec764,0xba9e3d6f,0xb9d0eee9,0xba5eceea,0xba60f3d0,0x3a012503,0x3b6204a7,0x3bcf6804,0x3be2124f,0x3bbfc58d, -0x3bc0ac8b,0x3b9f3daa,0x3b9175b8,0x3968a2b5,0xbabc8b4a,0xbac2b0e5,0x3914ece2,0x3afdd61d,0x3b959fe1,0x3b74c58a,0x3ac3e5cd,0xbbd35fe6,0xbb773684,0xbad77666,0x3b3b3d72,0xbc829184,0xbc954fa5,0xbb34c573,0xbbe3fc73,0xbb4a59f1,0x3c2bbcc0,0x3aea46d7,0xbab48655,0x3a6b05e8,0xbbdfbc50, -0xbc095b7e,0xbc0e02a1,0xba39ee2e,0x3aa23348,0x3ac4e43a,0xb965289f,0x3b24b1ac,0x3c027035,0x3c3bd1de,0x3c566fd4,0x3c3b1d48,0x3c39c629,0x3c283c12,0x3c1dc272,0x3aac8a98,0xbb2febf7,0xbb2de0d6,0x39c2aa00,0x3b985c9e,0x3c1744e0,0x3bd9a904,0x3b2071e3,0xbc0771e0,0xb841116b,0xbb785597, -0x3a81f976,0xbcdc0eb8,0xbcc8ac83,0x3b72259b,0xbbb0127d,0xb9bcc4bb,0x3c74b139,0xb8ef2731,0xbc0b89d1,0xb6777803,0xbb342436,0xbbd025e7,0xbc19b56c,0xbaf62278,0x3a9f7f23,0x3ab93d17,0x39288486,0x3b93ff8d,0x3c4c2c08,0x3c94eda0,0x3cbc6809,0x3ca93f25,0x3c94b150,0x3c701c8f,0x3ca59840, -0x3c0e5149,0x3b9f7f24,0xba1ebf49,0x3ae9fc61,0x3bfa9ba6,0x3c88f328,0x3c61bfe8,0x3c1591d1,0xbc6acaa9,0xbc017788,0x3c27a61e,0xbd44999a,0xbd0e141a,0xbd3ad8b6,0xbd793df5,0xbd1ad17a,0xbcb32e4a,0xbca7d3da,0x3cc7f97d,0x3cec3b5e,0xbc3c63c5,0xbce483e2,0xbcda72f6,0xbb6f59be,0x3c1c87a2, -0x3c0e3bec,0xbbfb0bbf,0xbb27326a,0x3ae62136,0x3b1a26a9,0x399e77bc,0x3ba20837,0x3c282a9c,0x3c08f70e,0x3c38368e,0x3ca3bcab,0x3bb9bf64,0x39b141c6,0x3bd8b470,0x39f0af27,0xbbb88371,0x3b3add62,0xbbb711c6,0xbc045f54,0xbc585b08,0x3c94a7b0,0xbd378094,0xbd3df9fd,0xbc50107e,0x3c77034c, -0x3d07a82c,0x3c02e418,0x3b42995c,0x3cb9cf3c,0xbb753d4b,0xbce77e14,0xbd383b59,0xbd1a0655,0xbcfe8d0e,0xbc6945cf,0xbc9f7213,0xbc58cf66,0xbae789e2,0xbaabd950,0xbb351d67,0xbb2c9591,0x3c09a34c,0x3c48ed5f,0x3cc1513a,0x3c526d65,0x3c2f62a3,0x3bb89d27,0x38c13f9c,0x3af6790a,0x3b153c9b, -0x38b51f6c,0x3ac7b154,0xbbe685cc,0x3bf5fb39,0x3bb68e0f,0x3b876266,0xbcf5422d,0x3d862ca0,0x3cc6729f,0xbc6da5b8,0xbd86d354,0xbdfdcc56,0xbdcd5dd9,0xbd9e75cf,0xbd33b571,0xbd0fe84d,0xbce18f67,0xbd2e25a3,0xbcecefb6,0xbca32d57,0xbbbdc491,0x3b56a1cd,0x396a45f5,0xbbe0a33a,0xbc1edd78, -0xbbdf110e,0xbb1ac4e2,0x3accdf9f,0x3c5e1ab5,0x3d28526d,0xbaa36a7a,0xbc26679c,0x3bc46450,0xbb986885,0x3b8c4fff,0x3b4d58fe,0xb9896757,0xb9c9ea24,0xbb1b1b8f,0xbb079f18,0x3c0c0d03,0x3d58d853,0x3d7297d4,0x3d061445,0x3d37b4c7,0x3da13f61,0x3db90233,0x3da65d88,0x3d57141f,0x3c8bed1a, -0xbc1debf0,0xbd247bf9,0xbd1e10f0,0xbd0cba9c,0x3bccc110,0x3c3a3367,0xbb18995f,0xbc618a36,0xbc8a6cf3,0xbc50da98,0xbc70a3df,0xbc895eda,0xbc5f0c85,0xbc65309a,0xbbb59e8f,0x3cd1215a,0x3b3631f7,0x3aa7eedc,0x3c0f9d73,0x39bd6c25,0x3a5e2891,0x38e83d19,0xbaa1e606,0x3b49e3fa,0x3c9fde42, -0x3cea3f77,0x3d1391d7,0x3d3a1d52,0x3d024a55,0x3c6f8a9c,0x3c2a4017,0x3c0244b4,0x3be72666,0x3b9cd729,0x3cf7df96,0x3d6703ae,0x3d9c8535,0x3d6526dc,0x3ccdc140,0xbcbe86c0,0xbcd4caba,0xbccfa0e2,0xbc639490,0xbc801d17,0xbca34571,0xbcf2024d,0xbcb9fe9e,0xbc747971,0xbc0db9b8,0xba3cff09, -0x3bf58f3c,0x3c96cd06,0x3c391450,0x3c0922a3,0x3bdaee7d,0x3c85f332,0x3ca68712,0x3cb088d4,0x3cbfb08c,0x3cc30a03,0x3ccd037c,0x3c9b1f46,0x3c8d8dd0,0x3cb5a017,0x3c80964f,0x3c2fb20b,0x3c27f028,0x3c2106bc,0x3c0a07c0,0x3c5d85ff,0x3c18bd1f,0x3c1d0cd7,0x3cd8a4d1,0x3cf13645,0x3d0cffe8, -0x3d1eacea,0x3d0bc094,0x3cff82ae,0x3d23e24a,0x3d0dc52e,0x3d1104df,0x3d104787,0x3cdf52c1,0x3ca5325a,0x3c787e8c,0x3c505a30,0x3c42c2d5,0x3c1afd70,0x3c877487,0x3c9ccf72,0x3c83bd17,0x3c2c4234,0x3c1982a5,0x3c0a5f6c,0x3bd5dce8,0x3c00dbc7,0x3c4a6a29,0x3c8c2fd8,0x3ca3d362,0x3cb3adc1, -0x3c925770,0x3bd3d754,0x3ae42009,0xb9044d5c,0xbab238a0,0xbacee79b,0x3b366ed2,0x3bd25046,0x3c003934,0x3bece697,0x3ba0128c,0x3adcbcf6,0xbb031434,0xbb951cb8,0xbc0554cf,0xbc1d3276,0xbc3aa6ba,0xbc4f9b03,0xbc3d5bf2,0xbc0300cf,0xbc15d67d,0xbbcaca88,0x3a6e01a9,0x3beb4190,0x3bde58ae, -0x3bfb590f,0x3c184734,0x3c3cea7b,0x3c3f4541,0x3c5d0a26,0x3c646087,0x3c666e10,0x3c6973f7,0x3c3f5363,0x3c19ec98,0x3c05d7cb,0x3be0b7f8,0x3c5aa6c9,0x3c5f40fd,0x3c5c186e,0x3c5f6fe2,0x3c428892,0x3c2fb247,0x3c11a5ee,0x3bf7ac14,0x3c0477cd,0x3c1c3455,0x3c39ee7a,0x3c449a0e,0x3c451e09, -0x3c3d79c6,0x3c4122ac,0x3c3d5eb1,0x3c32cd00,0x3c2637e8,0x3c159892,0x3c00fb35,0x3c096af9,0x3c1eb3ea,0x3c32d79e,0x3c3bd86d,0x3c54bbe0,0x3c677d44,0x3c55377b,0x3c4b54b8,0x3c4283f2,0x3c30baef,0x3c204abf,0x3c1850e7,0x3c2134fa,0x3c324c54,0x3c4b2eff,0x3c4abd2d,0x3c4c6a0d,0x3c6dc34a, -0x3c5e7c59,0x3c5327f0,0x3c541029,0x3c4dd3e4,0x3c4c2b07,0x3c492db7,0x3c460172,0x3c3a5702,0x3c2ea24e,0x3c2b2eb0,0x3c2e9563,0x3c3614ca,0x3c326ed1,0x3c32185c,0x3c35bd7a,0x3c362989,0x3c374f12,0x3c3deb76,0x3c31a0d0,0x3c2458d7,0x3c0f7859,0x3c4835f7,0x3c391368,0x3c36fc73,0x3c30eb45, -0x3c2de38c,0x3c272df1,0x3c25c486,0x3c253c94,0x3c1b8855,0x3c3231b4,0x3c4b9bea,0x3c1fb29e,0x3c3b5483,0x3c8df493,0xb994bf04,0x38add493,0x39e0a3d7,0xbafd37e2,0xbb1dacac,0xba295e13,0xbb334c3d,0xbb16ed6f,0x397c4a3d,0xb9fe0b80,0xba107078,0xba3b4047,0xbaa3f6ad,0xbacc4ded,0xbaf68337, -0xba9f563c,0xba80fa64,0xba8b2896,0xba12e9c2,0x386eaaf1,0x3a94f125,0x3adf2af9,0x3b0258f4,0x3af3699f,0x3aefde50,0x3abce77a,0x3a85a85b,0xb97aa5fd,0xba2f6fde,0xba7dc06b,0x386c802b,0x3a2e17fa,0x3aadc543,0x3aacbc13,0x3ab25526,0xbac10644,0xb8ad1591,0xbb2370d3,0xba9af900,0xbb9d85f8, -0xbba682fd,0xbad35bcb,0xbbe49684,0xbbbc66b1,0xb9bcd718,0xba0a695d,0xba4154b5,0xbb35635d,0xbb7005ea,0xbb8a98e8,0xbb8d6670,0xbaed80f9,0xba95014e,0xbadeb023,0xbaa7394b,0x39ba1fdb,0x3b823475,0x3bafce10,0x3bcd7e0a,0x3bc35750,0x3bb2964d,0x3b81d39c,0x3b2eeb3a,0xb8f2b782,0xbab3c804, -0xba9e20f9,0x39d29852,0x3b10ef5f,0x3b7c16d7,0x3b99754a,0x3b14c410,0xbbb7431c,0xbb3ce0f3,0xbba36150,0xba84571c,0xbc3be0e7,0xbc546a61,0xbb9d7e1f,0xbc958043,0xbc6cf822,0xbaed8cc8,0xbb128419,0xbae074af,0xbba821af,0xbbe0dcdb,0xbc174fe9,0xbc402e6b,0xbbd8f6be,0xbba2b4a7,0xbb802a70, -0xbb1cfa5b,0x3a9833e9,0x3c17593d,0x3c35b514,0x3c4c9e5f,0x3c43c586,0x3c33eb76,0x3c19999c,0x3bdd3f7a,0xb972c39f,0xbb4cab00,0xbb388567,0x38ee4939,0x3b9fedb6,0x3bf65ae1,0x3c0cde2b,0x3ba36a10,0xbbd941f2,0xbb678f3f,0xbc9a4e31,0xbc099119,0xbc5b0184,0xbc727116,0xbbb4c60d,0xbcb608aa, -0xbc9fcd81,0xbb967781,0xbb807eee,0xbb9984f7,0xbc3dc9ea,0xbc286cf2,0xbc5c8154,0xbc8d2503,0xbbeb4868,0xbb9f559d,0xbb9c5d00,0xbbaa1347,0x39893c25,0x3c796cc6,0x3c9d9ebb,0x3cc218eb,0x3cbbcac9,0x3c868ff9,0x3c4c5422,0x3c9026c1,0x3be68423,0x3b1968e9,0xba87b803,0x3b026313,0x3c0513ee, -0x3c610333,0x3c49f18b,0x3b9a6d47,0xbcbd71f7,0xbcb459f8,0x3c54494d,0xbd39eff1,0xbceafead,0xbd113a12,0xbd582438,0xbd179103,0xbcaedc2c,0xbc84ab44,0x3cacaa4c,0x3cc5dc47,0xbba1b633,0xbc6dca97,0xbcdb9d58,0xbced3f70,0xbc9f7f61,0xbc21c7cd,0xbab26b0c,0x3b7c91ac,0x3c10be21,0x3c4cbb49, -0x3c1cb738,0x3c144bec,0x3c2d229e,0x3c6d01d0,0x3c8241a2,0x3c7b1139,0x3b4be37d,0xbaa88168,0x3bc0e3b0,0xbc0cc28c,0xbbfe3c28,0x3c486792,0x3a44b8b7,0xbb00577c,0xbba40609,0x3cdfa6d9,0xbd097028,0xbd0e6d42,0xbb957064,0x3c2407ef,0x3c8a5a05,0xbb77a633,0xbca51f58,0xbccd11c8,0xbbdb8a1c, -0xbb43ab5a,0xbcb6c9b8,0xbd000578,0xbce63258,0xbbfde853,0x3b544d77,0x3be2e14a,0x3ad0812d,0xbb1235b7,0xbb416bd3,0xbb9ea9bc,0x3b4e8b66,0x3c4a9b59,0x3ce0e146,0x3bca33e8,0x394f0a49,0x3af1d617,0xba81ecef,0xba1df118,0xbb1bb701,0xbbcde73a,0xbbe6d8c6,0xbc24f7f0,0xbc276fc7,0xbb7cdea0, -0x3c5eca3a,0xbcaaa66f,0x3ce8a224,0xbcfe0261,0xbd9f25cb,0xbdc6d887,0xbdf34e0b,0xbd970b18,0xbd151aac,0xbd084e17,0xbb079467,0xbbc342e5,0xbd1fd55b,0xbcfbd548,0xbc8df430,0x3c894e54,0x3bf5eec2,0x3bcdfe29,0x3b224703,0x3bd33b24,0x3bfedf94,0x3b9f2f60,0x3c1fd8e1,0x3c6d4ae3,0x3cf52dfd, -0x3a41055d,0xbbf92866,0x3babd773,0xbb6c47a4,0x3b9075c4,0x3a4992fe,0x3aa12a9f,0x3ada3e63,0x3b60f31c,0xbb7a86fb,0xbb8dbf8f,0x3c9de571,0x3ce1268e,0x3d4cbec2,0x3d8ec1bf,0x3de5b534,0x3de5f94b,0x3d8f7b83,0x3d087c56,0xbb8f084d,0xbd312fd8,0xbc8cb92a,0xbc8149af,0xbd0e2e63,0xbcf9ed63, -0xbcba1de5,0x3bba9598,0xb9c4d18a,0xba5f6e11,0xbc543bf2,0xbc550e12,0xbc5df409,0xbc3b1bc2,0xbc09094c,0x3a1544da,0x3c9b8133,0x3ba04f88,0x3ba0dba1,0x3c2f6e5f,0xbb0653d4,0xba97f804,0xb8087e7e,0x3b90ef1f,0x3c07ca3c,0x3c8263d5,0x3cc9cff5,0x3d154cea,0x3d4be0f6,0x3d2f2e80,0x3c16a22a, -0x3b766af2,0xbaf9bf3a,0x3bd2d947,0x3cf0b340,0x3d5dc2b9,0x3d898f9a,0x3d786d2e,0x3d2d3ba6,0x3c2a81a4,0xbcc63987,0xbd3ce009,0xbd595127,0xbd076fdc,0xbcd97f82,0xbc79f314,0xbc9e6d63,0xbbe19d47,0xbaf209b4,0xbb3c8181,0x3ae9d2b3,0x3c1b5d11,0x3c9fc6f7,0x3c12df02,0x3b9b7bb0,0x3b482c95, -0x3c9735ca,0x3cbce8a1,0x3c87c1d7,0x3ca89020,0x3cc40dd5,0x3cfd618c,0x3cb359e0,0x3c922f62,0x3cb4bc22,0x3c5ac6e2,0x3cccccc1,0x3cc1a02d,0x3cd570c7,0x3cada589,0x3c0f46ea,0x3b93cc96,0x3c57bfa7,0x3d03774a,0x3d181136,0x3d39021c,0x3d4cec26,0x3d161aa9,0x3cd51600,0x3c905763,0x3c96aa9f, -0x3c877675,0x3c818bdb,0x3c87c80c,0x3c83403b,0x3c6c055e,0x3c4f0f26,0x3c231a8a,0x3c31a77e,0x3c592658,0x3c90b560,0x3c9ac8fe,0x3c6c9b05,0x3c04679f,0xba1a4b64,0x3b123021,0x3b8ea654,0x3c33d61f,0x3c549d0a,0x3c96c939,0x3ccabc96,0x3cddef2e,0x3b97769d,0x3926532f,0xbadc7fa1,0xbb844d46, -0xbb72fc7a,0x3aad752f,0x3b68eb2c,0x3ba3ea1c,0x3b99b43b,0x3b8ec4ba,0x3ba777d9,0x3b760dd6,0x3b8c8cff,0x3b5afb3b,0x3bb23df5,0x3bc23ab3,0x3be81cc7,0x3c0498c8,0x3c373c25,0x3c3552d7,0x3c15cf52,0x3c733c63,0x3c902825,0x3c51fa74,0x3c06429f,0x3b91bbda,0x3c000825,0x3c333ef3,0x3c7886d7, -0x3c8511a5,0x3c8dd86e,0x3c9147ce,0x3c88ac25,0x3c79f57e,0x3c70bf22,0x3c23f56b,0x3c4c7c35,0x3c589735,0x3c69e875,0x3c7ac4a9,0x3c778935,0x3c6d75be,0x3c69ca86,0x3c710ad9,0x3c66e61f,0x3c5d5cc5,0x3c502cd7,0x3c497d68,0x3c38ff1e,0x3c2832cc,0x3c1ab950,0x3c140c68,0x3c0eb6d7,0x3c095d2f, -0x3c07d827,0x3c02a103,0x3bd4c5f5,0x3bd9dfc3,0x3be11984,0x3c07af41,0x3c232809,0x3c2f3e8f,0x3c278bd7,0x3c17bebc,0x3c149c86,0x3c0375f4,0x3c083d1b,0x3c03c22f,0x3c17c6cd,0x3c226d9a,0x3c2d9d44,0x3c3500cc,0x3c747c9d,0x3c4f3529,0x3c51f8c2,0x3c52977c,0x3c586688,0x3c5de95e,0x3c62bded, -0x3c688b6e,0x3c59fdb7,0x3c5047ff,0x3c46a142,0x3c3cee04,0x3c37516b,0x3c33c823,0x3c38e0a8,0x3c3a5f80,0x3c3bbedf,0x3c3c9722,0x3c3a9afb,0x3c3e7603,0x3c554ecf,0x3c60ca48,0x3c676b99,0x3c59bcd2,0x3c6b433c,0x3c83836b,0x3c80cf2c,0x3c7ff291,0x3c7a3ca0,0x3c7aaf4c,0x3c7502de,0x3c6e29b3, -0x3c7107f5,0x3c5fb52f,0x3c759279,0x3c78c5ce,0x3c8122cb,0xba497472,0xba7b5e1f,0xba8aa90d,0xbb3cc5fc,0xbb4bc392,0xbafe3a39,0xbb0b2b44,0xbae4fcca,0xbaa69ee6,0xba41e25a,0xba074a03,0xba5c9715,0xb9e0a1bd,0xba3827e0,0xbadd571c,0xba9895bc,0xbaa18587,0xbad1d728,0xbaa0f534,0xba39b679, -0xb916a606,0x393b73a6,0x3a3d49bc,0x3ae1dc6e,0x3a8a51fe,0x3a2fcb88,0x389f558c,0xba65d612,0xba996917,0xbab9f6bd,0xb9c78b49,0x398a76b5,0x3a253d90,0x3a713b63,0x3a4ad7bc,0xbad06214,0xba395799,0xbacae70a,0xba83c3d4,0xbba4ee64,0xbbbe7371,0xbb400d32,0xbb80825e,0xbb80184e,0xbb58b130, -0xbb1970eb,0xbb1f5d22,0xbb5fa460,0xbad447d0,0xbae06d77,0xbb83ec11,0xbb23aff2,0xbb1818e9,0xbb2ec16d,0xbadec605,0xba0f9194,0x3afd2b6d,0x3b7cb75b,0x3b87e310,0x3ba17934,0x3ba40571,0x3b6a3b6d,0x3a9bd36e,0xba8b8fa0,0xbb176cef,0xbb0d0f8a,0x39237acd,0x3b116098,0x3b4add72,0x3bb05b87, -0x3b793b0e,0xbb72bfd6,0x38c21160,0xbae19ce3,0xba101ab2,0xbc3087a0,0xbc5f832f,0xbc11f799,0xbbfc5d19,0xbbc77957,0xbbc49736,0xba8142d8,0xba0aa7c9,0xbb610abf,0x39ccbe30,0xbad663ec,0xbbc7f751,0xbb839b2e,0xbb7f504b,0xbba93710,0xbb423366,0xba768b04,0x3bb48b68,0x3c004ddb,0x3c1e6bef, -0x3c30ba0f,0x3c3ec091,0x3c1dc21b,0x3b9a2c76,0xbaf309e9,0xbb9cae81,0xbb84cb77,0x3a702afe,0x3bc21e2e,0x3bd9fa11,0x3c2bfbb7,0x3c0265f4,0xbbb3b1c5,0x3a4306ab,0x3a946621,0x3c1fe7be,0xbbaf8d09,0xbc4b8241,0xbbc10376,0xbbb47228,0xbc033d34,0xbc1c39ee,0xbbb9acd4,0xbbe2b566,0xbc47a991, -0xbb995112,0xbb87a02f,0xbc226ec2,0xbbb52cf7,0xbbbaeeaa,0xbbc510b6,0xbb2b8d92,0x3ac9c1c9,0x3c458b63,0x3c8de169,0x3c9fd159,0x3ca736f0,0x3c85a24b,0x3c683621,0x3c80307c,0x3bab897a,0xba2fe75d,0xbb12852f,0x3ae6bca5,0x3c1c2ec2,0x3c6d3c20,0x3c831564,0x3c367a2d,0xbc38614b,0x3a8a98c3, -0xb9e2ad0b,0xbd2063c0,0xbd25c036,0xbd3511e3,0xbd301c2e,0xbd25e9a5,0xbce49a6a,0xbbda2b22,0x3bc2c385,0x3c7147d7,0x3c34077e,0x3b489615,0xbb9adfee,0xbccd0ea6,0xbc7d15e1,0xbc17d166,0xbb5bc248,0xbbc22300,0xbb8212aa,0x3b93bc6e,0x3c4bc11a,0x3c452a4d,0x3c3196d4,0x3ca275bc,0x3c9c53f9, -0x3c330752,0x3b0ea3f0,0xbb317fff,0x39f086cf,0xbc0828b4,0xbb8e6ce2,0x3c3e507f,0x3c1475b5,0x3bebb453,0xba1595c1,0x3c78ee4f,0xbce0e590,0xbd075703,0x3b8ffdd6,0x3c48ed42,0x3c0e46dc,0x3a7bb416,0xbb4f8b99,0xbc562fa4,0x3bfc04ad,0x3b8359b9,0xbcabefe7,0xbcbd8d64,0xbccc4d1b,0xbcc8bd7e, -0x3b2f9e1e,0x3c530252,0x3bcd6397,0x3bcc350c,0x3bdcd681,0x3b900820,0x3bbf5ccb,0x3c3f8f1e,0x3cc7fbd9,0x3b0ea2be,0xbb84374d,0xba42ce14,0xba7122f3,0x398552d5,0xbbd86f7f,0xbbedc536,0xbc26ae4c,0xbc99f576,0xbc992fb6,0xbbc2267d,0x3c863665,0xbc5dcc60,0xbc99916d,0xbd891948,0xbdd31597, -0xbddc9465,0xbd95fbae,0xbd50833a,0xbcc49b72,0xbcae38d5,0xbb1e2fde,0xbc0ad393,0xbcc16a82,0xbc879d15,0xbc4248c5,0xbb064adc,0x3b44bb43,0x3bd97732,0x3ae87ac4,0x3bc8a23b,0x3bbca316,0x3b917409,0x3c6fc2bf,0x3c7d5a48,0x3ca08ee2,0x3a670dc9,0xbba6b8ef,0x37c31e32,0xbbc45af5,0xba80d201, -0xbb87e355,0x3a37975c,0x3ad92c3e,0x3b947381,0xbbdd7893,0xbc723ce0,0xbc3e7b2e,0xbbf6e36d,0x3d9a59a7,0x3dc4a8d8,0x3dd1fda7,0x3da52a1a,0x3d2616c2,0xbc95633a,0xbd2ba114,0xbd19a405,0xbbb96c04,0xbbfc04b5,0xbd189d64,0xbd5cb38b,0xbd474b8f,0xbc7500ca,0x3b59d4f4,0x3c5158f3,0xbad1be95, -0x3b25a33c,0x3a9a88a1,0xbb8a81a0,0x3bb29bef,0x3c4211d6,0x3c6de584,0x3bddd65c,0x3ba2e004,0x3bd33955,0x38389b20,0x39de8479,0xb91926e9,0x3bb6255b,0x3c1670aa,0x3c124dd5,0x3cd0a958,0x3d2ca15d,0x3d621a4c,0x3d810638,0x3c4af262,0x3c0c46da,0x3bfc1e2f,0x3cbdbc3d,0x3d5979fd,0x3d7e5ecf, -0x3d7939ed,0x3d2cd220,0x3c731f84,0xbc2c29b5,0xbcc3a934,0xbd56ebb5,0xbd777f02,0xbd3f8709,0xbd2f3188,0xbcf81f88,0xbc84ecbc,0xbc1e25f4,0xbbcfe967,0xbb3230b8,0x3b749e77,0x3beda0e2,0x3c89c94c,0x3b9bdcf5,0x3b16497a,0x3ba2b639,0x3c635c7f,0x3c8d5948,0x3c54c7dc,0x3c8ed510,0x3caa0a26, -0x3cc70a00,0x3caafeae,0x3ca42faa,0x3ccc0b50,0x3c9bb7e8,0x3ccce4a6,0x3ca8bb00,0x3c9bf328,0x3c6cfe60,0x3bd7d27b,0x3c0f2ed5,0x3c7c9055,0x3ce8403e,0x3d2eac47,0x3d3d6221,0x3d2d09de,0x3d17b032,0x3cd47a54,0x3ba8883b,0x3c071cd0,0x3b016ecd,0xbc1722f2,0xbb834e81,0xb99792a1,0x3ba2400a, -0x3c0a85a9,0x3beb0cda,0x3c6b79bc,0x3c631198,0x3c7c0762,0x3c557b1c,0x3c2612f2,0x3bb5036e,0x3b66913a,0x3b8aa7d8,0x3bcea161,0x3c50058f,0x3c4559dc,0x3c7ce739,0x3cac9fb9,0x3cc36bdc,0x3c27a993,0x3c1cb779,0x3bf77481,0x3b903166,0x3aec83d2,0x3b63171d,0x3b326bba,0x39861cc4,0x3b84f48e, -0x3c1b39a0,0x3c8500e1,0x3c6626c6,0x3c63273e,0x3c581805,0x3c8c2d06,0x3ca63ea5,0x3cc618ad,0x3cb79f3f,0x3c97e6d3,0x3c77a7c5,0x3c89d383,0x3c9517b0,0x3c9927f9,0x3c748048,0x3c2f91ac,0x3c15a70d,0x3c2cfd96,0x3c69973e,0x3c6c778b,0x3c8e7ff4,0x3c94a4f8,0x3c9e5a7f,0x3c9a422c,0x3c99afa0, -0x3c9a4f78,0x3c6ca186,0x3c2e2caf,0x3c1557f6,0x3c22fd45,0x3c2ed2b3,0x3c3693f3,0x3c374081,0x3c46139f,0x3c59ae24,0x3c5219ca,0x3c3251af,0x3c1ace12,0x3bf801d3,0x3bce2b1f,0x3b8f3473,0x3bacbe20,0x3bc57ecf,0x3bfbeb96,0x3c0b9136,0x3c410e45,0x3c6236d5,0x3c0cf89d,0x3c0ae9e6,0x3bef48ed, -0x3c062d3d,0x3bfb3766,0x3bdd3730,0x3bd64599,0x3bc83daa,0x3bbba341,0x3bc72368,0x3bbf3b4c,0x3be9d1c1,0x3bf1c11d,0x3c07002e,0x3c097251,0x3c090d7d,0x3c0ee3d6,0x3bc6ca25,0x3be1c35a,0x3beaf7ec,0x3bf9d345,0x3c0297ab,0x3c04a805,0x3c08d4a6,0x3bf43d1c,0x3be89285,0x3bd84343,0x3bdaaed7, -0x3bd5b7ab,0x3bc04608,0x3bec5ad4,0x3c024f7c,0x3c0c1579,0x3c1eaf22,0x3c26286c,0x3c40be37,0x3c2883e6,0x3c33345e,0x3c464492,0x3c0c6dcd,0x3c16960a,0x3c382a08,0x3c3caf55,0x3c3fb964,0x3c47e5b1,0x3c48401a,0x3c4caec8,0x3c4ddd07,0x3c25204e,0x3c00e1a3,0x3c4bc0af,0x3c222952,0x3c00683a, -0x3a86ae4f,0x3999b03f,0x3ad71f96,0x3942e2b7,0x38369717,0x39415e2a,0xb9af32c7,0xb9692886,0x39d0564f,0x37c7fbb0,0x39cc35cd,0x3a96f5cd,0x3af27971,0x3ad7fe5d,0x381d7ebd,0x3a1facd7,0x3a063c1c,0x382403f7,0x3a0c1646,0x3a44a165,0x3a4ecf8a,0x3a348c04,0x3a65825b,0x3a7793c9,0x3b191f50, -0x3aadd065,0xba0f13c2,0xbab3c0ff,0xbad38c91,0xbadda55f,0xb9c44946,0x398e2883,0x392b0a7b,0x3ad1b366,0x3af078cc,0xbb04f7d2,0xb8eaa410,0x3aab87d1,0x3b5bfbc8,0xb970c9ed,0xbada7c7b,0x39054c87,0xbad601e7,0xbb00296c,0xb9fdead0,0xbb06cbe0,0xba85fcbc,0x3a7fad16,0x3b5ecf22,0x3b5c095a, -0xbaa27c07,0xb83e703c,0xba40f82b,0xbaf3c6f5,0xba04aeb1,0x39273bfb,0x3a23c61f,0x3b10e75d,0x3b79cb2e,0x3bb0b633,0x3bd123fb,0x3ba09258,0x3aa9296c,0xb9d97446,0xbac6be15,0xbaf29267,0x3b037a77,0x3b856e09,0x3b591ec6,0x3bcd01b9,0x3ba3e6cf,0xbaea0b06,0x3b391e96,0x3b46873f,0x3b61b2b5, -0xbaa603ec,0xbaedf87d,0x39f8c140,0xbbc9fb36,0xbbc99ad1,0xbb1761e3,0xbbafe1df,0xbb141353,0x3b29b4c4,0x3bf2221d,0x3bdbe7e0,0xbb583435,0xb983ef92,0xba78f853,0xbb75f6b2,0xba7da473,0xb8aeee9f,0x3ad9cf7e,0x3b9da6b4,0x3bdfde26,0x3c21f91b,0x3c4fc159,0x3c2e3b3f,0x3b1583cc,0xbb17c9f7, -0xbb977257,0xbba3bd71,0x3b3d25e4,0x3be89e01,0x3bb0da58,0x3c3253d8,0x3c118f34,0xbbb3a6aa,0x3b7e80e6,0x3c7a8fad,0x3c4694b3,0x3a702e51,0x38352741,0x3bccdc96,0xbbac2fa0,0xbbe49604,0xbb69db89,0xbc1550ea,0xbbbbcae1,0x3a20e155,0x3c1c4e3d,0x3c2e7fd8,0xbb916a41,0xbab62c21,0xbb560be9, -0xbbf518a2,0xbb225fe9,0xb973ce44,0x3b671c88,0x3c3ae8d7,0x3c69a8f5,0x3c8a55d9,0x3ca5aba1,0x3c93ead1,0x3c406128,0x3b240cb0,0xbb81bbd7,0xbb92e481,0x3b551133,0x3c53faff,0x3c61145c,0x3c9a980c,0x3c794aef,0xbbada0af,0x3c2d2247,0xbcd2bced,0xbd16c694,0xbccd1343,0xbcd34c46,0xbca7dff4, -0xbcc41ce7,0xbca74f84,0xbbb98cf6,0xbb9a077f,0x3bc986dc,0x3cbfd1d2,0x3c57f77d,0x3bb4fa5d,0xbb747f66,0x3b2190f8,0x3b77b00c,0x3a700ae5,0xbade1b16,0x3981e8f8,0x3b88bc69,0x3c0a39d0,0x3c2bed60,0x3bdf541a,0x3ca15237,0x3c9cd54b,0x3c10c2b5,0x3a87a62a,0xbb938f56,0xbb2bfc2f,0xbc19543f, -0xbbdf74e8,0x3b104185,0x3c26a9e0,0x3c31963e,0x3a40df20,0xbc12c79b,0xbc3e0388,0xbc299cdf,0x3b1ee502,0xbaadd935,0x3af455fb,0x3b5fe14f,0x3b7c02f0,0xbb8e3249,0x3bf62ba8,0x3bdf294a,0x3c021c0d,0xbc742f10,0xbca8cbe1,0xbcc58b9d,0xbc9fa29f,0xbc58e42f,0xbc0bb5c7,0xbb3f6db8,0x3a176eec, -0x3ba3ba63,0x3c3f33e9,0x3c64f96f,0x3c9a5af1,0x3a42ce8e,0xbb85de39,0x39e9dda0,0x3acd5ac8,0x3af47243,0xbc02be68,0xbbe44a31,0xbc106458,0xbc4fc542,0xbc332b9f,0xbbf03680,0x386799a1,0xbb8db54c,0xbd319fe6,0xbd97fdb8,0xbdbd6375,0xbda87510,0xbcf0ec2e,0xbd047ac7,0xbcf18aad,0xbcbc57a5, -0xbc2ca884,0xbbaba66c,0xba6b855b,0xbca92dc8,0xbcdc7468,0xbcc7bbab,0xbc142d11,0x3a25af99,0xba4ea9f9,0xbb52c6ee,0xbb23a7f8,0x3ad50573,0x3c2ca33b,0x3c1589fb,0x3b61c88c,0xbb388577,0xbb321124,0xbb19efeb,0xbbabf321,0xbb111069,0xbb665525,0x3aa1b9bc,0xba97f85f,0xbaf38834,0xbc16c8c7, -0xbc6f132e,0xbc9d2326,0xbcd5d486,0x3db275a3,0x3db67a9f,0x3d880e1f,0x3d0891fe,0x3c3a51eb,0xbd4fc29c,0xbd742fa3,0xbcb3aa0a,0xbcc15e2d,0xbcb23670,0xbc9a7cd8,0xbcf68d28,0xbd02fd00,0xbcdd6ebd,0xbc887ae6,0xbbfae53a,0xb9fad7c8,0x3bd14e38,0x3becb6fd,0xbaf08d3c,0x3c57d145,0x3c6dd868, -0x3be35ad3,0x3b7e8177,0x3a3bcdb8,0xba4a2bb2,0x3aa5d992,0x3b0b03f0,0xbab8cff3,0x3b373030,0x3be30f30,0x3b91cd53,0x3cc31aca,0x3d22b057,0x3d6ebd91,0x3d9070c9,0x3cbd3f9e,0x3cde9d86,0x3d2d51c8,0x3d62044c,0x3d9717ff,0x3d725aaa,0x3d182ae3,0x3bf86359,0xbca8c831,0xbd1bf205,0xbd497440, -0xbd191348,0xbd052a54,0xbd2000c5,0xbce09fbf,0xbcd4936a,0xbcafae03,0xbcd0a273,0xbcc4a735,0xbc5afde4,0x3ae2713c,0x3b7e29c8,0x3beeb348,0x39e98255,0x3aebfff5,0x3c33315b,0x3c0c6ecb,0x3c1981db,0x3c25acb6,0x3c80a0b0,0x3c9ec985,0x3caac5b8,0x3cafe046,0x3cbce0fd,0x3cd5286d,0x3cd96152, -0x3c9a1797,0x3c8224cf,0x3c378336,0x3c076bc1,0x3c17a204,0x3c7c102a,0x3cd2730c,0x3d137254,0x3d324437,0x3d2d3c88,0x3d0327ac,0x3cc83dfa,0x3c5637a3,0xbaf20d02,0xbc0997f7,0xbc44d7f8,0xbc85ecb3,0xbc3a57cc,0xbbd965a9,0xbaa05d29,0x3b7d47d5,0x3c180ff6,0x3c9d13bb,0x3c8fe6db,0x3c720f80, -0x3c11f090,0x3bd2284d,0x3bdd4f8c,0x3c336fc6,0x3c33d0db,0x3c36b6f1,0x3c2eb33f,0x3c3ee685,0x3c5a0943,0x3c6c3781,0x3c970b6a,0x3c8da6d9,0x3c95ac56,0x3c787e15,0x3c43fff6,0x3c04d254,0x3c17ae1a,0x3c001a19,0x3bb410d8,0x3c202651,0x3c81a16f,0x3cc34459,0x3cc5eade,0x3ccc1a5a,0x3ccd28ed, -0x3cc60d3f,0x3cbf5789,0x3cb2db5f,0x3ca6c64a,0x3c931190,0x3c72d0f3,0x3c760a96,0x3c7da405,0x3c7d2e73,0x3c761360,0x3c6ea507,0x3c7a9329,0x3c866e5b,0x3c9af3ef,0x3c982633,0x3c95df71,0x3c926d1f,0x3c9020d6,0x3c9653db,0x3ca1369a,0x3cac0049,0x3c9a7353,0x3bba094a,0x3b9b8a14,0x3bba90ea, -0x3bdbfd9d,0x3bf76338,0x3c0a6834,0x3c25709c,0x3c40bfae,0x3c5bdb82,0x3c59aa0b,0x3c570359,0x3c4c7091,0x3c4e4af6,0x3c4c082f,0x3c6bf8cb,0x3c84e55a,0x3c98ae54,0x3ca726f9,0x3cbdfed3,0x3cd0ee99,0x3c9259d0,0x3c9223d6,0x3c7f56d1,0x3c6543c9,0x3c2f1323,0x3c0c286f,0x3bf9b8ca,0x3bdbba45, -0x3bbd9be7,0x3bb9fb6d,0x3b9bce03,0x3b956ee3,0x3b987540,0x3b9f4172,0x3ba13d43,0x3b9e8ea7,0x3baac077,0x3b848e25,0x3b9d200c,0x3ba7b719,0x3bb6e8c8,0x3bb97daf,0x3bb60bed,0x3baf24cf,0x3ba904db,0x3bb0465d,0x3bba3b24,0x3bd4fef8,0x3be5d76a,0x3be8621d,0x3c060127,0x3c12f95f,0x3c1e3a83, -0x3c2d561a,0x3c3426a2,0x3c584b41,0x3c3466d0,0x3c271ec5,0x3c0bd6b6,0x3c063267,0x3bf8003c,0x3bcec3ba,0x3bd9bbd6,0x3bded050,0x3be74bba,0x3be66968,0x3beda2f1,0x3becef11,0x3bc3bc01,0x3ba11598,0x3be2302b,0x3bbaf9e8,0x3b94ebea,0x3b3a93c5,0x3b2f1276,0x3b2f2e5a,0x3b2831a7,0x3b1b593d, -0x3b1a1598,0x3a9c5e95,0x3a8e4cad,0x3b1025be,0x3a71b2a8,0x3aa6ce9c,0x3b0cf66b,0x3b76faab,0x3b7b3b7f,0x3b0ad540,0x3b12be8f,0x3af8eacd,0x3ab4177c,0x3b0996d4,0x3b145737,0x3b0683bb,0x3b1da7cc,0x3b2e5045,0x3b301a9a,0x3b808538,0x3b3a286a,0x3a263344,0x39b94625,0x3918d03d,0xb8cc34c9, -0x3acc084b,0x3b0dcb3b,0x3acbd5b0,0x3b54df05,0x3b6390b2,0xb956a3ce,0x3b0cdac3,0x3ba3ba2c,0x3b7aa930,0x3b4e1639,0x3b54cbad,0x3b9694d6,0x3b5b23fb,0x3b47e795,0x3ba31638,0x392d7008,0x39103a49,0x3ae3fadd,0x3bc07531,0x3bcecaa5,0x3ab986c4,0x3b056bea,0x3a8fc58c,0xb983697e,0x3a6b58c3, -0x3a9bb9ca,0x3a2cb4ba,0x3b0cac7b,0x3b942afd,0x3be26442,0x3bf0586e,0x3bc1b483,0x3ad19f7d,0x3a6aff00,0x396d93e9,0xb9cdb9e1,0x3b811f38,0x3bb3fc5c,0x3b7caca1,0x3bd7278f,0x3ba479e7,0xba80cbcb,0x3b8c7eea,0x3b8d366d,0x3a995df2,0x3af3aa8c,0x3b1daafa,0x3ac2efd4,0xbb0a3ce3,0xbb20f72c, -0x3ac52f9e,0xbbf517db,0xbb9c71c5,0xba701aa0,0x3c1f2c09,0x3c2672e0,0xbac1b742,0x39bbaa28,0xbacd7724,0xbb782aad,0xba11da92,0x3a2280a1,0xb9030bab,0x3b7c03b8,0x3bdf402c,0x3c3ee6df,0x3c4da97f,0x3c245a3a,0x38d069cc,0xbac279c2,0xbb3cf4d1,0xbba127e5,0x3b91fa28,0x3c02d38e,0x3b80f85f, -0x3c2b1e1b,0x3c18779d,0xbbb9c15d,0x3b6b5295,0x3c32b29d,0x3b3af7d6,0x3a6ff301,0x3b607cb8,0x3c0f742b,0x3c167e18,0x3c166de2,0x3c368d34,0xbb9c7c49,0xbbe7debf,0xbb9f8407,0x3c38eb11,0x3c66d670,0xbba442fc,0xb9a84bb3,0xbb1a8335,0xbbe92ecb,0xbb7d6263,0xbb4e9af1,0xbb627107,0x3b7f31d1, -0x3c313a7d,0x3c82d973,0x3cae5a97,0x3c95d855,0x3bd7a548,0x3a38687f,0xbba9cda4,0xbbd3138e,0x3bb1002a,0x3c730212,0x3c243304,0x3c9016b4,0x3c29d75d,0xbc3f5837,0x3ba3fbae,0xbd199f27,0xbcf00feb,0xbbba9ae5,0xbb7ecfec,0xbc9e9b4d,0xbd084787,0xbd15b859,0xbcca5ab4,0xbccd869b,0xbbaeefc2, -0x3cde53cf,0x3c70ee73,0x3becc5d8,0xba37c040,0xbc08ed67,0xbc0f1ef3,0xbb7e40fc,0xba25c6b5,0x3bb57f9d,0x3c5b7562,0x3c1fc186,0x3c4035d0,0x3c3c3165,0x3c95d695,0x3c857b60,0x3be1dfef,0x3a6ebc1a,0xbb8b6d1f,0xbb86e941,0xbc349db9,0xbc003e77,0x39c4bc45,0x3bf44bab,0x3c2dee85,0x3c1aeac9, -0xbc9b8e31,0x3c193f7f,0x3aa3acdf,0xbc7c263d,0xbc90e8e8,0x3b3de7e2,0x3c7fcf96,0x3c9f0aeb,0x3c4a14f8,0x3c30508c,0x3b8f30f7,0x3bc34a96,0xbc4a5f77,0xbc844a53,0xbc396908,0xbc5b4582,0xbc4d0a7b,0xbc5ae9d5,0xbc249af2,0xbbae8f0d,0x3ab54cd8,0x3c27b52f,0x3c3dfd62,0x3bdb265d,0xba84353e, -0xbb3606f6,0xba45663e,0x3b2a7101,0x3adb2439,0xbc06a041,0xbbeb797e,0xbc0212c0,0xbbc8b373,0xbc5f6ceb,0xbc9421bf,0xbc4998f4,0x3b83baeb,0xbd69c9ad,0xbd93d0a1,0xbd312ba8,0xbcb2f21b,0xbbd3c7d9,0xbc8b95c3,0xbd023247,0xbd10e850,0xbccf81ef,0xbc43379f,0x3b5a2170,0xbc59b03d,0xbcb7a846, -0xbcd9b890,0xbcc72b28,0xbc994c51,0xbc42e7fa,0xbc2a374f,0xbba7f832,0x3a3f7e51,0x3c468525,0x3bfddc84,0xbc14ff43,0xbb6f6567,0x3a820f3a,0xbac0b9b8,0xba15d7d0,0x3a2bd735,0xbaefe850,0x3b45ea4c,0xba9ec596,0xbba80052,0xbb786e50,0xbc25380f,0xbcada7f4,0xbd1ebbeb,0x3d97f8fc,0x3d4e899d, -0x3cc811a7,0xbc0f84d0,0xbd1f659f,0xbd48ea07,0xbd2561c7,0xbca211ac,0xbcdb8d3d,0xbcfa879e,0xbccfa5d3,0xbc89d187,0xbc828870,0xbcdc05a7,0xbc902f58,0xbc58804e,0xbb86ba9e,0xbb5875ca,0xba81a7a5,0xbbc9e941,0x3c6107d2,0x3c547123,0xbb9fba2a,0xba0e3657,0xbacf0acd,0xbb81566a,0xb9ef77e9, -0x3aa036b9,0xbb104ef7,0x3a28ff72,0x3b97df9e,0x3ab94c11,0x3c80c61e,0x3ced959a,0x3d5593aa,0x3d80fef9,0x3d1f8d52,0x3d4c8555,0x3d8dec50,0x3d9540d2,0x3d8e0fb3,0x3d38faa4,0x3c233023,0xbd04442d,0xbd20c34d,0xbd1df649,0xbd1b360d,0xbc57ba95,0xbc3c3564,0xbcffd798,0xbcb42439,0xbccd8527, -0xbd0242f7,0xbcf1d0f6,0xbcbd7f3d,0xbc8e2f88,0xbb77ef7a,0x3a9157c4,0x3aa635ed,0x3b19b5a4,0x3ba35d19,0x3c5c1151,0x3bac6320,0x3b3eb09e,0x3ba2ed01,0x3c578914,0x3c9ad3c6,0x3cb54304,0x3cc627a8,0x3cdaa886,0x3ce1cdff,0x3d10a054,0x3c720164,0x3c7b04e4,0x3c7bb87a,0x3c93adca,0x3cbabee7, -0x3d0a1094,0x3d2c095e,0x3d2d6d6b,0x3d16cc99,0x3ccf96b0,0x3c1899a8,0xb4cf3794,0xbc148174,0xbc914aec,0xbcd2e003,0xbcb9269e,0xbc13d27a,0xbc00cef4,0xbbc1afa4,0xbb38338a,0x3ba64f41,0x3c319575,0x3c6b96d6,0x3c62fef7,0x3c40cd58,0x3c216ab2,0x3c2b0f9e,0x3c5181da,0x3c709f26,0x3c8e79ab, -0x3c861558,0x3c52b7b8,0x3c587045,0x3c59ea9e,0x3c44b7d7,0x3c7cb01f,0x3c9b0fbc,0x3c9aa569,0x3c8ff7f1,0x3c888211,0x3c60923d,0x3c77a23c,0x3c81862d,0x3c962404,0x3cad990c,0x3cd8c66a,0x3d07c5c5,0x3d082e69,0x3d07dbcd,0x3d09eacb,0x3cfcc1b2,0x3cdedd70,0x3cbfe233,0x3caecd57,0x3cb15a3a, -0x3ca6ec7b,0x3c856c7e,0x3c7a9939,0x3c677556,0x3c678bfb,0x3c7b5cb9,0x3c6901c7,0x3c86f8e9,0x3c80f891,0x3c8edd91,0x3c66f308,0x3c5efa86,0x3c3b4334,0x3c6e9f51,0x3c9064c8,0x3ca8f0f2,0x3c9d38a1,0x3bb44775,0x3c064d3d,0x3c042b2b,0x3bfd52a3,0x3c02588d,0x3c09af32,0x3c127513,0x3c12a35f, -0x3c34ce28,0x3c419ff2,0x3c4ffea0,0x3c61c738,0x3c7cf8b1,0x3c8bb530,0x3c95ec6a,0x3ca2a2d6,0x3ca9b510,0x3cb92939,0x3cbb80d9,0x3cc9264d,0x3ccdb9a6,0x3cb537e6,0x3ca251c2,0x3c8ba4b3,0x3c70023f,0x3c45e21e,0x3c3266e2,0x3c1e08fd,0x3c169665,0x3c0a52b8,0x3c0ad06c,0x3be3f548,0x3bf3d345, -0x3bd1cbd1,0x3bd6b7cf,0x3bf73768,0x3b9ba2e8,0x3be8a2c0,0x3bdc47ca,0x3be75821,0x3beb99ae,0x3be24da6,0x3bd95686,0x3bc7695c,0x3bde0f2b,0x3bf5851a,0x3c07619a,0x3c18be57,0x3c271ded,0x3c37ea72,0x3c30e697,0x3c2e5660,0x3c2e5edb,0x3c27d7c7,0x3c240484,0x3c211554,0x3c1e4037,0x3c0eca1c, -0x3c05ab0c,0x3c01e542,0x3be48162,0x3bb2f2f1,0x3bb1936e,0x3bab7858,0x3b98a2fd,0x3b91d71d,0x3b820326,0x3b7af8f0,0x3b9780bf,0x3bbf69ca,0x3b51d115,0x3b834e1c,0x3bd4e669,0x3b33e073,0x3b21be32,0x3a8d3301,0x3b04a75e,0x3b1a6753,0x3b55c0e5,0x3b1cac4c,0x3b02406f,0x3b271169,0x3a871e69, -0x3a571eb0,0x3966b0cb,0x3b3f8ff5,0x3b66f0a9,0x3b4861ff,0x3b1bf065,0x3b03ba32,0x3adf7d46,0x3b0c2072,0x3b143453,0x3b0cd7ea,0x3b3b6ce1,0x3b643cf9,0x3b96d615,0x3b71fd58,0x3b4a16a8,0x3af39879,0x3b00678b,0x3af3c053,0x3ad0b1c1,0x3b45de22,0x3b628ec4,0x3b2b8359,0x3b6a34cc,0x3b5e2c00, -0x3a7e30dc,0x3b2e6aa1,0x3bb82f73,0x3af76aaa,0x3b3e49f0,0x3b63c6a6,0x3b9c0c89,0x3b6a74f8,0x3b454c53,0x3b9be931,0xb98a10be,0xbab28936,0xbb14e7f6,0x3b81c054,0x3bbffbce,0x3b8c0729,0x3b007816,0x3a204614,0x3a0060a7,0x3a9c95de,0x3ae4c492,0x3acb1777,0x3b42a392,0x3ba7f35b,0x3bff973b, -0x3bd4d0a7,0x3ba568da,0x3acb2018,0x3a7b5275,0x3a2c3f10,0x3a42abbf,0x3b84c3e4,0x3ba62007,0x3b63540c,0x3bb9a410,0x3b974bd9,0xb9b85a81,0x3b97ecc2,0x3b1f5c60,0xbb2f3416,0x3a311b0d,0x3b0003ab,0x3bb983ea,0x3b7dcb7f,0x3ac40411,0x3b6cdda4,0xbbc6892e,0xbbdd76d3,0xbc168512,0x3b9da825, -0x3c0a00e8,0x3bac760f,0x3ab5a039,0xbaa03950,0xbb02698b,0x38df2f1c,0x3ab7e249,0x39ec9a87,0x3b84520d,0x3c030601,0x3c5c449b,0x3c32d5c5,0x3bf489e8,0xb8aac6b4,0xbaa8e330,0xbaeb2c93,0xbb437964,0x3ba44181,0x3bec3108,0x3b2adc4f,0x3c164c51,0x3c0c5331,0xbbc47321,0x3b5f6c95,0x3c63ce2c, -0x3b64053f,0x3ba3ee99,0x3ba4ca1f,0x3c0699e7,0x3c2b2758,0x3bf4c32a,0x3c42cf6d,0xbb8e12f2,0xbc248f79,0xbc72b326,0x3b68bc54,0x3c384fe5,0x3be82581,0x399481b6,0xbb8445a6,0xbbab93e5,0xbb31dbae,0xba9714e6,0xbad32ed3,0x3b714cfb,0x3c33c10a,0x3c8f2e88,0x3c95c013,0x3c7c668e,0x3b84f98c, -0xba02dc0a,0xbbb66863,0xbbd69397,0x3bde2a4e,0x3c6cdf17,0x3c08997d,0x3c7fa446,0x3bf3d4d5,0xbc2ec14a,0x3c2da9b1,0xbd2d6377,0xbca44a0a,0xbbbf30c2,0x39013da4,0xbc32a3d6,0xbca2ce33,0xbcc7d15c,0xbc961592,0xbd051b9b,0xbcacab80,0x3c3cedf2,0x3bee3339,0x3bf64ced,0x3b5b9ae8,0xbc29ea66, -0xbc43d28b,0xbac63f22,0x3a9431be,0x3ba869b8,0x3c4807d0,0x3c27813f,0x3c566037,0x3ca583d3,0x3c84766c,0x3c3c4b4d,0x3b6cc668,0x3b0d1bf4,0xbb127e2c,0xbbb9469b,0xbc2668e2,0xbbe3cf1e,0x3aa05dd5,0x3bcda3fe,0x3c3fc460,0x3c9deaa3,0xbcd0525e,0x3c51ca61,0xbb9eaecd,0xbc685162,0xbc4c70a5, -0xbac020e3,0x3be731e9,0x3c070a22,0xba813114,0x3b0c4334,0x3ba67cab,0x3c46e7ff,0x3b21cc1c,0xbb66c967,0xbc6ae2e9,0xbc0e5df7,0xbbedf897,0xbc4bb431,0xbc18e023,0xbb885585,0x3a95f3d6,0x3c2ea044,0x3c10fe7e,0xbb5a4ad1,0xbb3c1281,0xbb0d3991,0xbb2a856d,0x3a2b9a4f,0x3941f930,0xbbf9115a, -0xbbb7eeb8,0xbc0d4d33,0xbc402462,0xbcc03a74,0xbcdd55b0,0xbcadab68,0x3bafacd2,0xbd3fafb0,0xbd1e5a83,0x3bcdc86f,0x3c755e20,0xbb84a88c,0xbc3d63a3,0xbcd13cb3,0xbd1bd234,0xbce29519,0xbcc713e3,0xbcc74779,0xbc57dbee,0xbc1560d8,0xbc9ea321,0xbca716a9,0xbcaf5566,0xbc93b455,0xbc52c2af, -0xbbd601ab,0xbb4082d7,0x3c46ca25,0x3c1b57fe,0xbc5105ac,0xbaaf5273,0x3babe4e7,0xb9370b8e,0x3ac6e876,0x3a832953,0xbaa1fa96,0x3b15f2cb,0xbb04347d,0xbb21deef,0x3a929801,0xbc092b2f,0xbcd12d55,0xbd150e46,0x3d45481d,0x3c30c3be,0xbccff46a,0xbd463d5d,0xbd947869,0xbd035099,0xbc9a1d6c, -0xbd0c6692,0xbc7649d6,0xbc45d9ad,0xbc6fba05,0xbc63da1b,0xbc8b3d90,0xbccd73e3,0xbc79db3a,0xbc3f0de5,0xbbf06dc6,0xbc4466a9,0xbbff44dd,0xbba41725,0x3c4682f8,0x3c442d21,0xbc161d8f,0xbb7f96aa,0xbb9de811,0xbbebdcea,0xbb205460,0xba8a4bb4,0xbb8416bb,0xbab1483b,0x3a860bba,0xbb80381f, -0x3b966ce4,0x3c7f0530,0x3d1d70a2,0x3d417d29,0x3d57a849,0x3d8c624e,0x3d98fac2,0x3d884db6,0x3d2d30e2,0x3c607bdb,0xbca9d170,0xbd5a6af3,0xbd22b17b,0xbce4e0ea,0xbc5a2601,0xbb8fadd7,0xbaae01c5,0xbbaf3d17,0xbc87311f,0xbcba7154,0xbcc0f78e,0xbcaa8192,0xbc69bb45,0xbc5a270d,0xbbe53714, -0xbb6e1be6,0xbb4f713f,0x3b63daea,0x3bcdd183,0x3c3675f8,0x3b7710a3,0xb9036b02,0x3a6a2b4e,0x3c212d0b,0x3c889af7,0x3cbd8f21,0x3cee87f7,0x3d044362,0x3d043b43,0x3d33a09a,0x3c8f7baf,0x3ca1ff5b,0x3ce55c24,0x3d150b89,0x3d4181e0,0x3d6cd62d,0x3d6c51c3,0x3d35973a,0x3ccc02cf,0x3b3af11b, -0xbc7978a9,0xbcfc2075,0xbd16c4a1,0xbd0decd6,0xbcf2c8d8,0xbcc01982,0xbc4a16d1,0xbc2ebfc0,0xbbed2d25,0xbb7093dc,0x3b90c1d5,0x3c043543,0x3bd9340f,0x3b9a1bae,0x3b8e4922,0x3be71e5d,0x3c56482e,0x3c8b84b7,0x3c8c2451,0x3c9df1a0,0x3c9f344e,0x3c951abf,0x3c8f5b2b,0x3c90214f,0x3c85af69, -0x3ca202f2,0x3c99c13f,0x3ca6e4df,0x3cb72eb8,0x3cb6e9a9,0x3cb064f8,0x3cbf578a,0x3cd2cf3d,0x3cfb746f,0x3d03f2b3,0x3d13b2fb,0x3d26918f,0x3d1ab40d,0x3d0c04ee,0x3cf734d6,0x3cdfffbf,0x3cc4ae52,0x3cae8f78,0x3cae6cbc,0x3caec82d,0x3cb5728e,0x3ca29766,0x3c8102b5,0x3c57cf1f,0x3c4f4acf, -0x3c533d04,0x3c263c1a,0x3c3b77f8,0x3c2637cb,0x3c2f4ba8,0x3c1741ee,0x3c0df348,0x3bfe9457,0x3c3c1710,0x3c75470c,0x3c94a9ca,0x3c928c4c,0x3c1d64b7,0x3c565f93,0x3c5b8bd2,0x3c688cb4,0x3c7e6d82,0x3c886d6b,0x3c8e95e9,0x3c918b1d,0x3c8a5435,0x3c8080e5,0x3c753c5b,0x3c762772,0x3c84487a, -0x3c91251e,0x3c8c4205,0x3c890647,0x3c7b8e83,0x3c6e9285,0x3c4b803a,0x3c415436,0x3c884825,0x3c7db95e,0x3c7d49f4,0x3c646448,0x3c6bdca3,0x3c6e30c4,0x3c694787,0x3c61053c,0x3c5fc289,0x3c5ca758,0x3c68e8a0,0x3c4ca44f,0x3c4ec1c6,0x3c35a966,0x3c3ea93b,0x3c5338d1,0x3c35778a,0x3c6d0654, -0x3c67eb42,0x3c6fb96a,0x3c713f60,0x3c715bec,0x3c720880,0x3c74f8bc,0x3c7c7f58,0x3c83710a,0x3c8702c4,0x3c8bebe2,0x3c8de487,0x3c91faf4,0x3c86f3b7,0x3c7f35b0,0x3c74836a,0x3c652d93,0x3c5d2773,0x3c4143db,0x3c32babe,0x3c1fc569,0x3c08a952,0x3c474263,0x3c26506b,0x3bf6f5da,0x3bf693ee, -0x3bf4c804,0x3bea6eb0,0x3be3ad95,0x3bd72a71,0x3bd87166,0x3c1d32a5,0x3c4cf9d2,0x3bc31e4e,0x3c1511a1,0x3c83a66f,0x3b1c835f,0x3ad3cf2e,0x394266df,0x3adc3cc2,0x3b0e511b,0x3b4b541a,0x3b21c3f7,0x3b0c07ac,0x3b0c9bdd,0x3a89a238,0x3a23166c,0xba3d9520,0x3ae6b848,0x3b25a2a3,0x3b6dad33, -0x3b0516ba,0x3ae873f1,0x3afc3f8e,0x3b10d28b,0x3b1c7c41,0x3b246ea8,0x3b4ebeca,0x3b6ce050,0x3b9bc504,0x3b53935c,0x3b307ebd,0x3af4c96d,0x3af38ab2,0x3af8b48d,0x3b0c716f,0x3b3d0a82,0x3b4a02ec,0x3b15a0e0,0x3b4b37ea,0x3b405a21,0x3a9788b2,0x3b04ec59,0x3b86e579,0xba1663db,0x3a55615f, -0x3b05f777,0x3b901688,0x3b864a9c,0x3b7997d9,0x3b74325b,0xb9b3eeba,0xbb351a90,0xbbb640f5,0xb989f109,0x3b3e249e,0x3bcb473c,0x3b00fe6e,0x3a464c59,0x3acb75eb,0x3b0d7117,0x3b43bde9,0x3b50599e,0x3b8c099a,0x3bc2598c,0x3c049582,0x3bb85973,0x3b86fbb7,0x3aeb6ca1,0x3a4f502b,0x3a3fd030, -0x3af20420,0x3b7564e3,0x3b8a6edd,0x3b348dd1,0x3b8c12c7,0x3b812823,0x3aaf0ce0,0x3b8837aa,0x3a3568dc,0xbb812555,0x395df230,0x3b5243d2,0x3c039b83,0x3baa1f70,0x3b916589,0x3b29286b,0xbb87849f,0xbbee8b61,0xbc5244e5,0xb947bca8,0x3b925694,0x3c297a6f,0x3af79361,0xb92ee9f3,0x3a61490e, -0x3b0c4784,0x3b7dc2eb,0x3b4d8e22,0x3bc67081,0x3c1fc860,0x3c671992,0x3c1ee8c5,0x3bb60640,0x3a5db0ce,0xbaa9ac17,0xba5a5509,0x39006ce5,0x3b9fefb8,0x3bbda1bc,0x3ad699e2,0x3bea6040,0x3bec328e,0xbb549d0b,0x3ad37fe8,0x3c6ecc1e,0xbaa771e2,0x39587401,0x3bb0193a,0x3c3aad72,0x3c3c8337, -0x3c237b58,0x3c18f8ad,0xbb28f168,0xbc548620,0xbcc0b0c3,0xbc05b4e8,0x3ba4df91,0x3c87958c,0x3b209c2e,0xbb1d6c25,0xba942f39,0x3aa55580,0x3b7a6d0c,0x3b42da75,0x3be2bab9,0x3c462b7e,0x3c9c631c,0x3c850258,0x3c567b05,0x3b7e2a77,0xbaf9b838,0xbbc7f681,0xbb9f4fe0,0x3bf6bd23,0x3c4fcc4a, -0x3bc10689,0x3c507e49,0x3bdd5a96,0xbb91183f,0x3c46cc22,0xbd35f2a7,0xbc478416,0xbb86c886,0xb9304b6e,0xbc090637,0xbc204c84,0xbc660d14,0xbc4eefe2,0xbd11f5b7,0xbce23164,0x3c6add43,0x3c436010,0x3c25c153,0x3bf2aad4,0x39efe680,0xba235b0a,0x3b57b60c,0x3bbe2ad6,0x3bc4cb65,0x3bc09c97, -0x3c05140b,0x3c503535,0x3cc2607e,0x3c5c8c24,0x3beb96b3,0x3a543825,0x3b3ee3d9,0xb9fa8199,0xbbd54e1c,0xbc0a0b62,0xbbb23c4b,0x3a5d33f7,0x3bb07d42,0x3c31b20c,0x3caa99b6,0xbd0221c3,0x3c771f7f,0xbb44a59a,0xbb97335a,0xbc2e0c94,0xbcbe92a1,0xbb7c98bc,0x399cd0b3,0xbc6676e7,0xbb011b90, -0x395dc77a,0xbbc3d0a5,0xb848c8fb,0x3ae9ef53,0xbc39432d,0xbbfc60b8,0xbc042daf,0xbc02613e,0xbbbf6728,0xb9c450ca,0x3b4c7785,0x3c34102b,0x3c00679f,0xbbe70311,0xbb288f9a,0xb874db8b,0xba94694c,0x39854277,0xbabce0cc,0xbbcfbdbf,0xbba09a13,0xbc1eaf8f,0xbc594af1,0xbcb0a122,0xbcc2d60a, -0xbcb196cc,0x3c15466b,0xbcc5ed96,0xbbcf2a67,0x3c9226ef,0x3cbe4fd7,0x3befcd05,0x3aa127b1,0xbc2487dc,0xbd005eff,0xbcc75506,0xbcc44324,0xbcb930a0,0xbbc8591a,0xbb764342,0xbc7e7a36,0xbc758cf6,0xbc82bb55,0xbc657222,0xbc477342,0xbbeed2f8,0xbb99f3ab,0x3be1a9c5,0x3be103d3,0xbc2fa558, -0xbaab5a32,0x3bb26f44,0x394e1edc,0x3835a158,0xb96aee17,0x3a243d0b,0x391cf30c,0xbb959eca,0xbb2dec4b,0x39e5428a,0xbbff6371,0xbc9869d7,0xbcc7c281,0x3c550c8b,0xbcc8c308,0xbd9d0f1f,0xbdadf4f5,0xbd93f323,0xbcfc847b,0xbc6c7b8a,0xbced3ef1,0xbc5a13f9,0xbc0ee9f7,0xbc0ab641,0xbc0f2fe4, -0xbc165f4e,0xbc3ea18b,0xbc0a9357,0xbc0f5426,0xbc10adcb,0xbc32fadc,0xbbb92e28,0x3ad8975f,0x3bf3fa14,0x3bd87ea1,0xbbef003e,0xbbba4cc4,0xbbc46866,0xbbf5386e,0xbaaa06af,0xbb0db685,0xbbe9235d,0xbb9f1d7b,0xbb9f2b71,0xbc55c987,0xbbee433b,0xba19abd6,0x3c9a04b0,0x3cad926b,0x3d83bb86, -0x3da332f3,0x3d8eb3d7,0x3d4ba5f7,0x3cb49c39,0xbc998106,0xbd2e1757,0xbd414a45,0xbcfcd97a,0xbcaf90d2,0xbc675703,0xbc82e92d,0xbc091663,0x3b8c3ddc,0xbb840565,0xbc150311,0xbbde3930,0xbc12fc8f,0xbc1007f9,0xbc0efcbf,0xbbd6c62c,0xbb9ee3d1,0xbbb48fb5,0x3aa8c137,0x3b77b000,0x3ba7b5d4, -0x3af9de09,0x3910821b,0x3afefaf2,0x3c0bbd99,0x3c829ed5,0x3cc95705,0x3d18cef4,0x3d2ba547,0x3d21c805,0x3d5bf0a6,0x3cc209d8,0x3cd425a5,0x3d0e0c46,0x3d30cfcb,0x3d5df311,0x3d71571e,0x3d51ce92,0x3cee9096,0x3b4aa48f,0xbc9136ed,0xbcedc4be,0xbd2e7596,0xbd37839c,0xbd172c5c,0xbcec9f5d, -0xbcbdf413,0xbca84f30,0xbc7f137d,0xbc129bf4,0xbb1b070e,0x3b9e7bcf,0x3bd17c60,0x3afac71c,0xbaba9518,0xba8bbb21,0x3b6e5538,0x3c4f6ae0,0x3c94a6e9,0x3ca19323,0x3ca20bc8,0x3ca2d797,0x3c96495e,0x3cb0e6dc,0x3cbf10bb,0x3cb22d58,0x3cd1025d,0x3cb627c5,0x3cdc3f1a,0x3d01b9f2,0x3d0a158b, -0x3d111362,0x3d1427e4,0x3d20a29a,0x3d3bd2f0,0x3d33d085,0x3d2d9ba4,0x3d273e60,0x3d0ea176,0x3ce49240,0x3c9e2613,0x3c80e6b4,0x3c4c4cdf,0x3c0e1daa,0x3c24dc54,0x3c122ff7,0x3c31f016,0x3c65afe0,0x3c342b2e,0x3c3a8fa8,0x3c4934c2,0x3c4c4de1,0x3c4a2d24,0x3c29164c,0x3c268369,0x3c0c605b, -0x3c179863,0x3c09e288,0x3c0e8f41,0x3c38f330,0x3c60a0f0,0x3c81eda0,0x3c9d1976,0x3c7477fc,0x3cadef0c,0x3cb5b1e7,0x3cbe9caf,0x3cd11503,0x3ce221a7,0x3cecf51f,0x3cf67da5,0x3ce03661,0x3cd2d2b4,0x3cc7272b,0x3cc04439,0x3cbf9866,0x3cc1bdf2,0x3caf9b11,0x3c9c479d,0x3c879ea3,0x3c67963b, -0x3c3b7b67,0x3c0d962a,0x3c28f248,0x3c45274e,0x3c5ad041,0x3c5b14cd,0x3c69eda1,0x3c821aae,0x3c899958,0x3c909f07,0x3c9128fb,0x3c9a6daa,0x3ca56a81,0x3c9ef0aa,0x3ca28444,0x3c980389,0x3c95b284,0x3ca737fa,0x3c99dee5,0x3cb657a1,0x3cb26386,0x3cb861ae,0x3cb958a1,0x3cbb75e4,0x3cbe3975, -0x3cc56729,0x3cc3bc3b,0x3cc3ef93,0x3cc27233,0x3cc18a33,0x3cbed80f,0x3cbecdc9,0x3cb4da7e,0x3cae2e36,0x3ca7a522,0x3c9e84e5,0x3c98286c,0x3c8c7de1,0x3c82b4a7,0x3c7a09ad,0x3c5bba72,0x3c8f2faa,0x3c84694d,0x3c68b858,0x3c66f946,0x3c654298,0x3c68e592,0x3c652ae3,0x3c6326cf,0x3c68af28, -0x3c8d0526,0x3ca37a01,0x3c6293b8,0x3c8aa4a9,0x3cc04df7,0x3b21c88a,0x3ab13b92,0x3a02afc9,0x3aba9e7b,0x3ae904f0,0x3af7329f,0x3b35a101,0x3b3c5e99,0x3b1a7d47,0x3acd515d,0x3a8de235,0x39b0430f,0x3ab1e1c3,0x3b060719,0x3b798e2c,0x3b135ce6,0x3b092434,0x3b1fcaf0,0x3b30859a,0x3b3c4007, -0x3b4c0c47,0x3b5bf31c,0x3b612575,0x3b85ae02,0x3b3e555d,0x3b12f6b4,0x3ac6faa2,0x3aba91c2,0x3ac61250,0x3b13cfb5,0x3b154461,0x3b14338b,0x3adc25ba,0x3b14dda2,0x3b266e7a,0x3ac330d7,0x3ae13fbf,0x3af5638b,0xbaab9934,0xb9fcfec7,0x39543b49,0x3a5c7f98,0x3b60d2b0,0x3b747503,0x3affd51a, -0xba092ce6,0xbb2417ae,0xbb6b699b,0xbb0c4857,0x398a5895,0x3bad1aa8,0x3b074527,0x3af69dbf,0x3b42c6d0,0x3b6caca0,0x3b93d813,0x3b9425b1,0x3baa6b28,0x3bd265d4,0x3bf2b9da,0x3baa3365,0x3b75dda4,0x3af90c0a,0x3a93de1d,0x3aa90e75,0x3b3f2472,0x3b64e784,0x3b65bd37,0x3b1d6b82,0x3b2e7024, -0x3b29c9d5,0x3b1ec3ee,0x3b4f55cf,0xba6fc627,0xbbf8f98f,0xbb5ee354,0xb9fcb63a,0x39c4eacb,0x3bc46442,0x3bf57545,0x3b1f4b87,0xbaebcb48,0xbbab2d1a,0xbc0c1a1a,0xbb6c9a03,0x38e44eea,0x3c1bf475,0x3b0909ad,0x3aada8db,0x3b5dcf0f,0x3b976e38,0x3bd0dcc2,0x3bb9f0ab,0x3c0a61c4,0x3c316b55, -0x3c577fe5,0x3c0c4d0f,0x3b9c733e,0x3aa62f75,0xba0d0687,0x3a6063a7,0x3b32a92b,0x3b954871,0x3b860efe,0x3ab12596,0x3b853471,0x3ba40365,0x3a18c9c4,0x3aa6b6c8,0x3b70a533,0xbc45eb1e,0xbc1afb5f,0xbb8049ec,0xbae51bfc,0x3bd3118c,0x3c0c3c17,0x3b1ee152,0xbb62566e,0xbc4eb49c,0xbc9bb7cd, -0xbc70a6bb,0xbb76f4a2,0x3c343f9e,0x3b0447c0,0x39b562a7,0x3b53d462,0x3bb08577,0x3c067b27,0x3bdfbcef,0x3c1b09f5,0x3c56d62a,0x3c9ed049,0x3c79d403,0x3c372ddb,0x3b5f95be,0xbb194658,0xbbaf2943,0xbb02be9f,0x3bebf64d,0x3c1fb40d,0x3b521e39,0x3bfc51c4,0x3b676991,0xba899d4c,0x3bd2163f, -0xbd0fce90,0xbb74ff4f,0xbb0a49ea,0xb9fb6ab4,0x39e666ee,0x3bed093e,0x3b83b4fc,0xbb4e4edd,0xbcb90321,0xbc7c70e9,0x3ccb1008,0x3c5e43b3,0x3c16e59e,0x3c0a2e77,0x3b749b5d,0x3b716149,0x3ba12d28,0x3bf4dd3d,0x3c0369cf,0x3b9b3bd9,0x3c11b2b2,0x3c673397,0x3caf9fda,0x3c3e07cc,0x3bb300c6, -0xba11923d,0x3b2282cd,0x3a771f1e,0xbbc00ead,0xbba3dbdc,0xbb17dfa3,0x39c01a70,0x3be5880d,0x3c2fcf82,0x3c8d2c13,0xbce953b3,0x3c79ddc2,0x3ae1dfc9,0xb99c1e1a,0xbc183d37,0xbcfd0a04,0xbc510ece,0xbc0bb5a3,0xbc979453,0xbc64c05e,0xbc80274c,0xbc6baa6a,0xbc2ef2ce,0xbbc6b228,0xb98da226, -0xbb92137d,0xbbe2957e,0xbb7ee533,0xbae632ca,0x3b6ca035,0x3bd46f2e,0x3bfc5a49,0x3ba83211,0xbba53cab,0x3884fc44,0x3b61f18d,0x3b00ac32,0x3aa9635e,0xbaced436,0xbb8bac01,0xbb885bca,0xbc01c788,0xbc03b1e6,0xbc861aa4,0xbc990e9f,0xbc65b095,0x3c277e73,0xbc49884e,0x3bd3ab46,0x3c893050, -0x3c95aa09,0x3c40e89c,0x3c0db1f8,0x3a181676,0xbc91a64f,0xbca8fe0f,0xbca15fc2,0xbc39d075,0xbbd25863,0xbbcc4e8e,0xbb771967,0xbc05ccae,0xbc0cedbf,0xbb905e02,0xbc0b77f0,0xbba9bf8b,0xb9d75a1b,0x3b7edb28,0x3b8d7c0f,0xbbc49d4b,0xbb0469df,0x3b44c4ba,0x3a6bd00b,0xba260be5,0xb961fe8a, -0x3ad77451,0xba3cdf92,0xbbd04b13,0xbc077b76,0xbb4c3821,0xbc1a9f8b,0xbc6dae50,0xbc901708,0xbcafed87,0xbd5938de,0xbdc8d624,0xbdbf027f,0xbd4945da,0xbd126378,0xbcaba820,0xbc1e31a4,0xbc6ec9ad,0xbc55ce04,0xbbdce086,0xbbdb1683,0xbb6e69fc,0xb60f84a9,0xbba98abd,0xbc00db22,0xbbc0d5cd, -0xbb96d2a7,0x39d439c5,0x3c11b2f6,0x3ae14cfa,0xba8a48c5,0xbbb448bf,0xbb8f03fe,0xbb5f1058,0xbb5d122c,0x3a427184,0xba95f15f,0xbbe94339,0xbbf82f88,0xbc22dd35,0xbc9d019a,0xbc8dfc0b,0xbc864a53,0xbb8e5820,0xbc06c24a,0x3d8a1243,0x3d922066,0x3d627ccb,0x3cec7ea7,0xbb421374,0xbd1fe8d7, -0xbd439f26,0xbce77470,0xbcba7e61,0xbc9e3f56,0xbc9f41e3,0xbcb7eaf0,0xbca53663,0xbc5815d9,0xbb8233b6,0xba0955b0,0xbb1437a0,0xbbaf1b83,0xbbc42c91,0xbb46a7d0,0x3a428e1e,0x3b185131,0xbbbf23aa,0x3841ba4c,0x3a57a50e,0xba6822fd,0xba6e6722,0x3a0e40ba,0x3ba7014f,0x3bf54fb9,0x3c6e6d86, -0x3cb9e540,0x3d2d0f43,0x3d4b70ea,0x3d3a8595,0x3d6c2c4c,0x3cf3a812,0x3cf8a90d,0x3d128b89,0x3d20baa2,0x3d2aef02,0x3d2689c0,0x3cc6335d,0xbbc59a6b,0xbcb43188,0xbcf0c106,0xbcef66c9,0xbd0868ff,0xbd02825d,0xbcd9c3d3,0xbce9368b,0xbccc5d2a,0xbcb39c2b,0xbc86cf64,0xbc341462,0xbb72e813, -0x3b0a3953,0x3b19debc,0x3748ecca,0xba54c663,0x3a7f2fb8,0x3bdbabf6,0x3c53faae,0x3c9178f4,0x3cae9425,0x3cae27bc,0x3caf29f2,0x3c9fe2e9,0x3cbd30e2,0x3ccd8511,0x3cc8fdd3,0x3cee5382,0x3cdc1bec,0x3d03263f,0x3d1f7745,0x3d3410e2,0x3d4c365b,0x3d43218e,0x3d495792,0x3d57d62a,0x3d34c2c4, -0x3d0b1616,0x3cc71ced,0x3ca3c8ea,0x3c78474f,0x3c2942f6,0x3be5ba23,0x3b683c9f,0xbab4d4c4,0xba871791,0xbaf84848,0xba98eaee,0x3b8dfdcb,0x3bcce638,0x3c2c89e8,0x3c4f1d41,0x3c659bef,0x3c81fb01,0x3c532465,0x3c50c18b,0x3c2a4e82,0x3c4987d2,0x3c44704e,0x3c577d28,0x3c826ec9,0x3c8ecffb, -0x3c9e4442,0x3cc37276,0x3cd2a173,0x3d02a76d,0x3d00a7ec,0x3cfdce5a,0x3d014100,0x3d022faf,0x3d002c2e,0x3d001b1b,0x3ceb46b7,0x3ce93b58,0x3cdefadd,0x3cda9908,0x3cd022d0,0x3cc30dad,0x3cb3e5a2,0x3ca5f0a6,0x3c9a451a,0x3c8ed7fb,0x3c81a248,0x3c59a903,0x3c504172,0x3c7030d3,0x3c7e0d32, -0x3c810caf,0x3c85493b,0x3c928db3,0x3ca2b140,0x3cb0bf68,0x3cb5fb71,0x3cc3f0ef,0x3ccf6deb,0x3cd02ad6,0x3cd7af5b,0x3cd8e1df,0x3cda19e7,0x3cf087fb,0x3cd18bb0,0x3ce9f53a,0x3ce09a26,0x3ce2707a,0x3cdf117e,0x3ce16182,0x3ce385c1,0x3ce70bad,0x3ce4e06a,0x3ce118ba,0x3cdd9cdb,0x3cd6162d, -0x3cd0e0ec,0x3cce85f0,0x3cc98392,0x3cc48816,0x3cbec90c,0x3cb629a6,0x3caf9a8b,0x3caa279d,0x3ca2112f,0x3c9e040d,0x3c911e7e,0x3cade28e,0x3ca7617e,0x3c997c83,0x3c9ae4ec,0x3c9cbb4b,0x3ca24795,0x3ca3667a,0x3ca699e5,0x3caba7de,0x3cbe39f7,0x3cd0d9c1,0x3cafe00b,0x3cc46009,0x3ce2b136, -0x3b3fada2,0x3af69068,0x3a98025c,0x3aba1e44,0x3ae6b401,0x3af5a748,0x3b4b47c8,0x3b4c911e,0x3b17f286,0x3af5a2cf,0x3ab292e2,0x3a49ab0a,0x3a8a69dc,0x3addc9a7,0x3b6fcae2,0x3b2d5717,0x3b3170df,0x3b49777e,0x3b5a211c,0x3b65a986,0x3b70ab39,0x3b8160bd,0x3b80012d,0x3b80f2de,0x3b4fef7d, -0x3b2a9bde,0x3af33798,0x3b009b9d,0x3b0a370e,0x3b4adfe9,0x3b22ef34,0x3b157f25,0x3b060a09,0x3b141d15,0x3b3c7e13,0x3b2ec5db,0x3b1c2cb2,0x3ac838f1,0x3a17c829,0x3a081820,0x3a329bcf,0x3985616f,0x3b74c5f1,0x3b81ae04,0x3ad115f2,0x3a2a8e13,0xba93a052,0xbb0bdd5e,0xbb3a6a1d,0xba9f2750, -0x3b8d90e5,0x3b0ee35e,0x3b310f9d,0x3b7b8e55,0x3b976d5f,0x3bb424b9,0x3bb4b71b,0x3bd2354b,0x3be70eb0,0x3be1a77c,0x3ba82cca,0x3b73c9c9,0x3b04b21c,0x3af8c396,0x3b1c05cc,0x3b9514cf,0x3b6a29c0,0x3b547d7e,0x3b3fe1b4,0x3b00a062,0x3b2195ce,0x3b9c8d7a,0x3b664b1e,0xbadc92c0,0xbbc8ffd8, -0xbb8c8ffa,0xbb795fb9,0xbb48a8c8,0x3bc23cb4,0x3bca3197,0x3a3c18b9,0xba829027,0xbb980ec7,0xbbfdb3bf,0xbbf02adb,0xbb880764,0x3beda75b,0x3b0c7a69,0x3b255f5d,0x3b9646fd,0x3bccb0e0,0x3c00f327,0x3bf573e1,0x3c2d6e1b,0x3c40167d,0x3c42b0a8,0x3c002ae5,0x3b984c80,0x3abce1d3,0x3a303128, -0x3b33b60e,0x3bc59bdf,0x3b92fc48,0x3b3f48d8,0x3b27f3cf,0x3b060ace,0x3b6d5e33,0x3bbf79f3,0x3b40b82b,0xba3b32dd,0xbbd28253,0xbbc362c2,0xbbe3d5bf,0xbc0be69c,0x3bb1e3bc,0x3bd12ae3,0xba4eda9d,0xba7d6c67,0xbc135ee2,0xbc74e481,0xbc903003,0xbc28accf,0x3bde1f81,0x3a857f6e,0x3ac7d7b3, -0x3b9a47d6,0x3bf73fba,0x3c299ad0,0x3c1968f6,0x3c48c518,0x3c709ed5,0x3c953bf0,0x3c5b6c6d,0x3c0ff21c,0x3b0f7366,0xbad77863,0xbb41d07f,0x3b081df9,0x3bd2e429,0x3be3e498,0x3b433090,0x3b3f4f21,0x3a47aa01,0x3bb4cb02,0x3bb0542c,0xbcc00e03,0xbbe42e0e,0xbbddf4b4,0x3a8a320d,0x3b3469d6, -0x3c569c9f,0x3c3156e4,0x3acbce19,0xbc818e08,0xbc57d1c9,0x3c8bb7ed,0x3b182807,0x39adb554,0x3c1ad9bc,0x3b050033,0x3ab0b7f2,0x3b64a70e,0x3bb6e158,0x3bfbbe8f,0x3c067b8e,0x3c5f3ac0,0x3c8a3e1a,0x3c962c03,0x3c348fa9,0x3bb364ec,0xba33c978,0x3b1ee6cb,0x3b1a1bfd,0xbb6d1c16,0xbacb5f73, -0x3a23fa52,0x3b0e6e8b,0x3c376eb2,0x3c5778b5,0x3c67c607,0xbc985aa4,0x3be8724c,0x3c4aab88,0x3c144307,0xbbae2229,0xbcf39c01,0xbce150a5,0xbcaf5e02,0xbc191e95,0xbc470da7,0xbc36d7fb,0xbbcb6d80,0xbc53d106,0xbc2d45b9,0xbac3de37,0xbb5acfbd,0xbb83ec31,0xbb5ffaba,0x3a31e967,0x3bb9dcbd, -0x3c272622,0x3bab6391,0x3b4f1f6d,0xba376733,0x3b16702d,0x3bac8aa4,0x3b257a88,0x3a165f58,0xbaf30287,0xbb101050,0xbb1daeca,0xbbbdce26,0xbbe740e7,0xbc68d581,0xbc80e6a8,0xbc2edfd6,0x3b227958,0x38034238,0x3c5c285f,0x3c2cc18e,0x3bf62303,0x3c4d017a,0x3c7b5513,0x3c2a64e4,0xbb0fbfe4, -0xbc6d5efb,0xbc83971d,0xbc24d47b,0xbbc6d608,0xbb0f5f94,0x3a99d6d7,0xb93ccd71,0xb8b73566,0x3b4b7e30,0xbab2dd33,0x3a5c21b5,0x3c112e2e,0x3b95f712,0x3b91a6e5,0xb98b112f,0x39920910,0x3b1378fc,0x3b1661b7,0x3a8f1218,0x39e16ee8,0x3a8509d3,0xbaf54a7c,0xbbf4ad8a,0xbc388a69,0xbbbd4cb7, -0xbc21fd50,0xbc9976d8,0xbc0eb29f,0xbd3b3025,0xbd878214,0xbd93c3df,0xbd7807ab,0xbce9e4af,0xbcf31688,0xbcc18c52,0xbbec8a83,0xbc58ca4e,0xbc0702cf,0x376b5051,0xbb5f20b3,0xbb94b00a,0xbbb66c0c,0xbbb390bf,0xbbcc8458,0xbbcdc216,0xbac876ca,0x3b455d31,0x3c441e8f,0xb905caa8,0xbb891dd7, -0xbb8bc140,0xbaf38f7b,0xb9911991,0xba3a34a6,0x3a8c4c1a,0xb95d9b17,0xbb7c8c59,0xbbf79103,0xbc32c4c6,0xbc8b8e99,0xbc98d812,0xbcbc62c6,0xbcc49651,0xbcfad953,0x3d669b75,0x3d3994d4,0x3cd10cc4,0x3a886e76,0xbd04d36e,0xbd293f95,0xbd12cd41,0xbc9daf08,0xbc9fe97a,0xbc9d43b9,0xbca73169, -0xbc7ce509,0xbc76b583,0xbca63dd7,0xbc4707ed,0xbb80d34e,0xbad5c2bb,0xbb8103af,0xba95de0d,0x3b88e08c,0x3b8ef50e,0x3ba0c2c1,0xbb75758c,0x3a8dab15,0x3a441bfd,0xbb6f1e30,0xbae7b111,0x39df81f6,0x3ba68b06,0x3b988f52,0x3c1ddcf5,0x3c785ec4,0x3d170c0f,0x3d41624f,0x3d3c4cf4,0x3d4e9c9d, -0x3d146e27,0x3d1683b7,0x3d1ca82f,0x3d0e0afe,0x3ce29a95,0x3c539ec3,0xbc0de4aa,0xbd02a3cf,0xbd070573,0xbcf634e1,0xbcd4d780,0xbcb782e1,0xbca44464,0xbc812681,0xbcc0861a,0xbcc7e637,0xbca02acc,0xbc8d8998,0xbc6954f4,0xbc073eaa,0xbb9cf9fa,0xbb4b8fae,0xba8fb699,0x3b4185a6,0x3bed092e, -0x3c5a3b39,0x3c6cfb62,0x3c89b6c1,0x3caa7262,0x3cba358a,0x3ccbc6e5,0x3cda8362,0x3cc3024b,0x3cc2e9ac,0x3cdecf03,0x3d07807d,0x3cfa38e6,0x3d0895b7,0x3d1b7f8b,0x3d2e5a67,0x3d4ae2a1,0x3d3c089e,0x3d3ab89a,0x3d36c4c4,0x3cf88594,0x3c70957f,0xba3949ed,0xba85d3bd,0xbb169f60,0xbb2852e4, -0xbb1481bd,0xbb13d6ac,0xbb78d185,0xbb5224ec,0xbb13353b,0xbb0af151,0x3a9b0e68,0x3baf8ce6,0x3c12f6f0,0x3c2e3ecf,0x3c4c6498,0x3c61ea6a,0x3c5fc70b,0x3c6a0567,0x3c64458c,0x3c898c01,0x3c90f173,0x3ca701f4,0x3cbd4422,0x3cc859d7,0x3cd1f37f,0x3ce9d9a9,0x3d07be37,0x3d0a574b,0x3d04b359, -0x3cffa96b,0x3cf4bdf9,0x3cec9a04,0x3ce004c7,0x3cde35a0,0x3cd63e14,0x3ce1db74,0x3cdd9567,0x3cda003d,0x3ccbd347,0x3cbb94b7,0x3caeffc8,0x3ca26f0f,0x3c97ffdd,0x3c8e989d,0x3c823b51,0x3c699a93,0x3c84a148,0x3c87578f,0x3c8ede37,0x3c95b242,0x3ca074e6,0x3caaa0a3,0x3cb9bc16,0x3cc6b976, -0x3ccfb9b1,0x3cd9ef46,0x3ce3e578,0x3ce70766,0x3ceeabe5,0x3cf4aab4,0x3cfc99ab,0x3d037a3f,0x3ce6a19c,0x3ce9fd0b,0x3ce56cd0,0x3ce33929,0x3cdfa880,0x3ce11cbe,0x3ce18ce1,0x3ce023e8,0x3cdea175,0x3cd9c635,0x3cd82b44,0x3cd06f7e,0x3ccc3ee6,0x3cc9c2d1,0x3cc4cdaf,0x3cc00d5d,0x3cbb0f60, -0x3cb46c6c,0x3caee920,0x3ca6262e,0x3cb177d1,0x3cb39620,0x3cb3b931,0x3cbb8263,0x3cbe1153,0x3cbae56b,0x3cbc3cb0,0x3cbe8929,0x3cc2a66a,0x3cc50dca,0x3cc90a46,0x3ccd48c1,0x3cd86c8d,0x3cde7f7b,0x3cdb9ef4,0x3ce2d2cf,0x3cec859c,0x3b74782d,0x3b2808a0,0x3aecd3da,0x3b178594,0x3b351b3f, -0x3b374a5c,0x3b834c9f,0x3b83ed35,0x3b52f00e,0x3b480e5c,0x3b1c77e9,0x3a8991dd,0x3aad1e0a,0x3af6d9ba,0x3b7ac1fa,0x3b5a6c4e,0x3b689f82,0x3b75de6f,0x3b842874,0x3b8b1f79,0x3b93e550,0x3b98d356,0x3b91f1f0,0x3b812c5f,0x3b777f4b,0x3b4e5133,0x3b0da416,0x3b22922e,0x3b34e110,0x3b8336eb, -0x3b383ffc,0x3b24a6c3,0x3b34e0f7,0x3b33bfca,0x3b6899dd,0x3b8aa323,0x3b4b1dc7,0x3b1d026c,0x3aaec307,0x3b06b744,0x3b0bbb81,0x3a7b501d,0x3b8dbfc2,0x3b9e6905,0x3b2d99f6,0x3b308ef7,0x39fa5cf2,0xbb350a45,0xbb4f1e76,0xbad024e9,0x3b858280,0x3b57f45d,0x3b87337c,0x3b9a7597,0x3bb8b4b7, -0x3bd1f890,0x3bd47f32,0x3bf15e9a,0x3bfefd6c,0x3bdcedf5,0x3bae4ef9,0x3b820996,0x3b22e46b,0x3b342a59,0x3b641d30,0x3bcf6821,0x3b864bee,0x3b6a2336,0x3b871619,0x3b08d2a4,0x3b5378dc,0x3c0b4538,0x3b9d785f,0x3a137095,0xbb41f7da,0xba8f8744,0x395979c1,0xb9a9d712,0x3bdf9364,0x3bf518d5, -0x3b21c51d,0x3b4fbbe7,0xbae044c6,0xbc174d6e,0xbc115e05,0xbbbd6deb,0x3bc0ff07,0x3b59c2a0,0x3b92bd74,0x3bb8e7c5,0x3bee8574,0x3c12e4d8,0x3c17c138,0x3c4520b0,0x3c4d3587,0x3c335121,0x3bfce77a,0x3b9b18d6,0x3b048110,0x3acbebd3,0x3b86a1e8,0x3c19add8,0x3b977a43,0x3b3b7e4c,0x3ba7746a, -0x3ae0aeab,0x3b667533,0x3c559ae1,0x3b9b2c41,0x3b896ef4,0x38fdc867,0x3a8ec6e6,0xba6ba031,0xbbd81208,0x3ba6e176,0x3bdb16d9,0x3a0bd69e,0x3b7c44fb,0xbb923816,0xbc8c5791,0xbc9aa580,0xbc4b7e68,0x3bc77926,0x3b71da0b,0x3ba939b1,0x3be6f002,0x3c226054,0x3c502401,0x3c46494b,0x3c79bdb7, -0x3c8772de,0x3c892738,0x3c461517,0x3bf1907d,0x3b04c38d,0xbaa1aff2,0xb9c7b87c,0x3bedf260,0x3bd28780,0x3ba8d47a,0x3b974635,0xb8fa35c9,0x3b12e36e,0x3c94f105,0x3c1ce60e,0xbc91858d,0xbc4506fc,0xbbe8640b,0x3b832cff,0x3c1ebe1c,0x3c7a3a71,0x3c57d4ab,0x3c376644,0xbbfa0f1b,0xbc2a6121, -0x3b65f84a,0xba93e62b,0xba5007c2,0x3bd5b53a,0x3ae8bfc6,0x3a682c23,0x3b38c971,0x3bb7f204,0x3c0288ce,0x3c0dd55e,0x3c9243af,0x3c9f7d7c,0x3c81c89e,0x3c2d4e2d,0x3bc3a95e,0x39d1f3b9,0x3b5759e7,0x3b4bc239,0xbb1ad2d2,0xb9bf209c,0x3b3d5a3c,0x3be55611,0x3c5fc460,0x3c403b36,0x3bc2d411, -0xbc55ecc1,0x3b657af9,0x3cfcb8bf,0x3c7cf017,0xbbaf703e,0xbcc5364e,0xbd175657,0xbcf8b361,0xba741b13,0xbba5d008,0xbb18686d,0xba8c7d94,0xbbf5fc9e,0xbc162fbd,0xbbdd285a,0xbb974ab3,0xbb1ce0cc,0x3af627b9,0x3b89589f,0x3bed0c17,0x3c45cd8e,0x3b8b6664,0x3b2c30cb,0x3b48d627,0x3b772c24, -0x3bb5185c,0x3af4d0ef,0xba4b314e,0xbb341506,0xba95294b,0xbac38993,0xbbaa89ed,0xbc0965a0,0xbc3cb604,0xbc2b6240,0xbbe5baca,0xbb8d0a91,0x3c175fc1,0x3c1d5fb6,0xbaaf96ad,0xba992393,0x3b9b74a3,0x3c8dbd8d,0x3c90c422,0x3bb0c724,0xbb895c9b,0xbbebc5fe,0xbbe1f927,0xbbca6461,0xbb4d5ece, -0xbb1f3f27,0x3ba741a5,0x3be5c2bf,0x3bcdddfc,0x3b8533b7,0x3bda7a48,0x3c8f5ad3,0x3ba5ce91,0x3b809f26,0x3b8a8861,0x3b4e5316,0x3b3fcbde,0x3b1a019a,0x3b0f9c7c,0x39c068d3,0x3a1c2b5a,0xbb5aacb6,0xbc002134,0xbc292e0e,0xbb99511a,0xbc1502aa,0xbca0cac9,0xb849ce1f,0xbd5d6c8d,0xbd671b9a, -0xbce69255,0xbc9c486d,0xbcd0449f,0xbcb81a04,0xbca801d0,0xbc7acfc3,0xbc0a3c5c,0xbaf342ee,0xba3cd39a,0xbbd42b83,0xbc28de73,0xbc62d885,0xbc4703ff,0xbbedd956,0xbb87f2b0,0x3aef718a,0x3bbe5a4b,0x3c592e1c,0xba2b3f1d,0xbb83bf29,0xbafbc3bb,0xba0351f3,0x3a9f359a,0x39ce9a47,0x3a89f4ac, -0xb8291a7b,0xba80e35f,0xbbcd22d6,0xbc18b1ce,0xbc51b04c,0xbc50776c,0xbcadf56e,0xbd0b33f8,0xbd2be451,0x3cfcc5e5,0x3c0a487a,0xbc8c0582,0xbcf64ea3,0xbd3a47ff,0xbcf2deb4,0xbc932ef1,0xbc7fc168,0xbc85e3e7,0xbc7c5986,0xbc322d57,0xbc18dfa0,0xbbea9638,0xbbebd604,0xbc52a4f0,0xbc3b6c5d, -0xbbba7738,0xbb98a263,0x396b5ae3,0x3bf5759f,0x3abc17ff,0x3a912105,0x3a52afab,0x3b3e06b0,0x3ae7281a,0xbb7af1eb,0xba10c289,0x3a7ea264,0x3af243ff,0x3a0d7b75,0x3b23465f,0x3b94f543,0x3cb4802b,0x3d064964,0x3d146185,0x3d004592,0x3d38d12a,0x3d3b9ff1,0x3d2c5e0c,0x3cfc3936,0x3c83a27b, -0xbc54df5b,0xbd01c2b2,0xbd1c82c0,0xbd05cf5d,0xbcdd7661,0xbcbbd0cf,0xbc9495fa,0xbc87e089,0xbc5bfdbf,0xbc828ef1,0xbc8d7e75,0xbc484d1c,0xbc768713,0xbc5d77c9,0xbc144675,0xbc1ec0cf,0xbbd8f0c2,0xbb7142c3,0x3b7926e5,0x3c28088f,0x3c88683a,0x3c7a23d0,0x3c8171d6,0x3c9cd8cb,0x3cc1e8d4, -0x3ce767e1,0x3d0b72e4,0x3cdec17f,0x3cdb1a57,0x3d0e8c62,0x3d2681d6,0x3cec34b5,0x3cf4821e,0x3cf7005c,0x3d011c70,0x3d1334c0,0x3cfeeacf,0x3cdf2995,0x3cab40f8,0x3c14dde9,0xbb51ea21,0xbc872521,0xbc7288aa,0xbc6a6df1,0xbc66c3a0,0xbc375b84,0xbc0bed03,0xbbcc8869,0xbb571e15,0xb96101aa, -0x3b0c571f,0x3b622a99,0x3bb1fdaa,0x3bcacecc,0x3bee551b,0x3c0ac9ae,0x3c0deae7,0x3c457c2d,0x3c7610c7,0x3c9163f4,0x3cab6cd3,0x3cb9f242,0x3cd5f3b3,0x3cdda445,0x3ce0adaf,0x3cdafba0,0x3ce5d3b8,0x3d042838,0x3cf0e79c,0x3ce3d1dd,0x3cd8f41b,0x3cc54ece,0x3cb7b9cd,0x3cab7917,0x3ca82ada, -0x3ca41f37,0x3ca915a8,0x3ca3d8ae,0x3c99a89d,0x3c8a90c6,0x3c809a3b,0x3c6bb408,0x3c51fa8d,0x3c346769,0x3c15aa2a,0x3bd9dc8f,0x3ba4df20,0x3c4533e8,0x3c3cf90d,0x3c63dc44,0x3c80e04d,0x3c9bde6a,0x3ca8f5c7,0x3cb63e76,0x3cc07b67,0x3cccfd83,0x3cd4589d,0x3cde1952,0x3ce90376,0x3ce9c900, -0x3ceec827,0x3cf5f67b,0x3cf28a54,0x3cdde36f,0x3cd55e4b,0x3cd44f22,0x3ccfded6,0x3ccdbf22,0x3cce4cb1,0x3ccd41d0,0x3ccaeba4,0x3cc52ae3,0x3cbea183,0x3cbb9a42,0x3cb48580,0x3caf204c,0x3ca8ac20,0x3ca37a05,0x3c9f2693,0x3c9beaa2,0x3c98d478,0x3c987cc5,0x3c89b1e6,0x3ca404e1,0x3cabd38a, -0x3cba4afd,0x3cb2d932,0x3cbbd3e7,0x3cc5daf0,0x3cc82ce7,0x3ccb027e,0x3cce1735,0x3cd28008,0x3cd6ee38,0x3cdb089c,0x3cdd0711,0x3cdab408,0x3ce24558,0x3ce0aea4,0x3cee5e3f,0x3b928910,0x3b537a8c,0x3b4267e6,0x3b53db07,0x3b6b9d7c,0x3b5db4be,0x3b9cc704,0x3b9ed28b,0x3b6a2add,0x3b860bb1, -0x3b62c972,0x3adcc66d,0x3afb7c6c,0x3b180c48,0x3b6e91b8,0x3b80d0ac,0x3b8bd748,0x3b8e1cf3,0x3b97063c,0x3b9f42b7,0x3badc40d,0x3ba9b3ba,0x3ba0e2a0,0x3b8d5e8e,0x3b8a315e,0x3b7138df,0x3b398912,0x3b4ff901,0x3b682549,0x3ba1ba37,0x3b635457,0x3b501e36,0x3b78bc4e,0x3b572c6e,0x3b8425f6, -0x3bc041ff,0x3b7891c3,0x3b523876,0x3b28995c,0x3b4dadf6,0x3b34da0a,0x3acd75a9,0x3b9cbe14,0x3bb167f3,0x3b204dec,0x3b904db0,0x3b20c9c6,0xbb0f27ba,0xbb2cce69,0xbadf116a,0x3b1b1552,0x3b7bdfed,0x3babc95a,0x3bb0d2dd,0x3bcaf421,0x3be37a20,0x3befdbef,0x3c024d53,0x3c062e28,0x3bd79c94, -0x3bb8b77e,0x3b932e71,0x3b50c855,0x3b6618e8,0x3b8b8b71,0x3bf277fc,0x3b97abf3,0x3b8479e3,0x3baddc6a,0x3b269579,0x3b83796b,0x3c35a3d6,0x3bc53dc1,0x3af8ac14,0xbacb9b8f,0x3a8b4a66,0x3b173c69,0x3a60e1a7,0x3bf9bae2,0x3c0e6234,0x3a848c15,0x3bc128ee,0x3abaa4a9,0xbc124b51,0xbc0f45d2, -0xbbd45916,0x3aceee60,0x3b647063,0x3bbaa052,0x3bccbb3b,0x3bf8657e,0x3c190f1a,0x3c2d34fd,0x3c4ff8a2,0x3c4f1e4d,0x3c20f34d,0x3bfb205e,0x3ba5d660,0x3b35b015,0x3b16184e,0x3b9c8829,0x3c365fe2,0x3b9c5730,0x3b610f0e,0x3bed8ee5,0x3afee01b,0x3b7ab090,0x3c8d69b0,0x3bc2c8ee,0x3b9cea16, -0xb96a17e7,0x3b07e33a,0xb8a21101,0xbba4a0b3,0x3b8e38d7,0x3bd1bf57,0xbb2242dd,0x3bc82117,0x3914c4ec,0xbc8b038e,0xbc9ce7da,0xbc76835f,0xbae4f450,0x3b5103ff,0x3bf2a668,0x3c0c24b7,0x3c27de78,0x3c52d993,0x3c5e62fe,0x3c8a4ef6,0x3c8d776d,0x3c7bd918,0x3c417fbe,0x3bf3eba0,0x3b4c2329, -0xba8e77b3,0x3ad23d81,0x3c4212b0,0x3bd7bbe7,0x3b8e7126,0x3be38554,0xbade6054,0x3b6d8ce5,0x3cd14f32,0x3c371d40,0xbc658939,0xbbfe1a64,0xba851877,0x3c0d30b3,0x3ca39904,0x3c925b55,0x3c7699ab,0x3c87a905,0x3a8de25b,0xbb8e916c,0xbb42fb77,0x3b2c0f1c,0x3b767b0d,0x3b914591,0x3b23a259, -0x3ac4af45,0x3b12bd22,0x3bcbfc58,0x3c26a236,0x3c22c729,0x3c9eac11,0x3ca9f308,0x3c61c87a,0x3c2b535b,0x3be7cd04,0x3b0e9726,0x3b8e97fd,0x3b5bfb0c,0xbb07b148,0xb861b252,0x3b9ca103,0x3c3cc5c7,0x3c73b705,0x3c0fdb6e,0xbb5a1e42,0xbc3d2d73,0x3b7e0498,0x3d232f72,0x3c256ba5,0xbc2caa55, -0xbc8cb309,0xbd16deec,0xbcf8fa99,0x3b34d5ff,0x372ff6b4,0x3b8397e0,0x3b90a7cc,0xba9752ba,0xbba69b78,0xbb9bdbfc,0xbbd1cee9,0xbb8d76b6,0x3b2dba9c,0x3b867916,0x3bd02608,0x3c310343,0x3b436ec3,0x3b0d7882,0x3bb9fe92,0x3ba0ef89,0x3bb4bd48,0x3b295586,0xba4b5ce7,0xbb290ba9,0xba7b4204, -0x379b1948,0xbb316399,0xbbd52107,0xbbcd99ae,0xbb8a3495,0xbb38772b,0xbbeb5d50,0x3b9facce,0xba8ec0c4,0xbbc05d1c,0xbaf22758,0xba60ce9f,0x3c7fd418,0x3c9998fe,0x3bcb0f6f,0x3b35d074,0xbb177469,0xbbe3acf9,0xbc2c670d,0xbbf2038d,0x3b1be089,0xba308f80,0x39748041,0x3b9d39c8,0x3bb7b47e, -0x3c1f5b3e,0x3cacc2d3,0x3bb7274d,0x3b4b85ce,0x3c09b10e,0x3ba58341,0x3b4299f4,0x3b088d5b,0x3b11dfad,0x36b81441,0x39c46944,0xbb92420e,0xbbf49a3e,0xbc07a89c,0xbbe52daf,0xbc4ee1ad,0xbc9a20a3,0xb9595ac5,0xbd432574,0xbce0baa1,0xb9c0daff,0x3a599338,0xbcb7f9cc,0xbca45652,0xbc99c230, -0xbc960900,0xbbb4b698,0xba0db715,0xba42f9f8,0xbbde79a0,0xbc1d5cd0,0xbbf673e4,0xbc55b62c,0xbc116542,0xbb5f52d7,0x3b36ef13,0x3bd75f99,0x3c4d4fa3,0x3a9d2dcb,0xbb2e4e35,0xb9822c55,0xb941bd40,0x3b071a9c,0x3b108203,0x3a297cfe,0xb989006f,0xb7a07483,0xbb823c3d,0xbbe0907b,0xbc0e8c2c, -0xbbfaa4aa,0xbc966911,0xbd0f0215,0xbd324099,0xb8cfb17d,0xbcfc54b4,0xbd62ac76,0xbd5823ac,0xbd28513d,0xbc945f1c,0xbbebdce8,0xbc16387f,0xbc0f4125,0xbc06c874,0xbb6ea728,0xbc307221,0xbc38c9a8,0xbb9b2b64,0xbbe76f7c,0xbc0a89cd,0xbc020ae9,0xbb0b2ed1,0x3a726d10,0x3bb1bb14,0xbb031b5a, -0xba9bd3f7,0x3bb06ed8,0x3b4c9e0d,0x3a9f8e4a,0xbb1c8304,0x3ac37d3e,0x3b2a1033,0xba1968d0,0xbb787822,0xbb9abd37,0xbbac4014,0x3b78fe9e,0x3c4add97,0x3ca3b18c,0x3c0af91d,0x3d521d29,0x3d49a24e,0x3d220cb3,0x3cb35474,0xba5816af,0xbcd9cc55,0xbd168c0b,0xbd0cf57e,0xbcd5cc14,0xbca4f796, -0xbc971123,0xbc3ede1a,0xbc1a33e6,0xbc1c7258,0xbc1cff4a,0xbc257f93,0xbc057d28,0xbc261bfc,0xbc0db2ea,0xbb952537,0xbc08d16d,0xbbe97419,0xbb9a2a9f,0x3b26be0e,0x3c0fd026,0x3c5eadce,0x3c6205db,0x3c70fdbe,0x3c8b40aa,0x3ccc0ca9,0x3cfa257e,0x3d0fb09f,0x3cfe8563,0x3d034e2a,0x3d27a8c7, -0x3d378157,0x3cd8d3f7,0x3cdb7ef1,0x3cb7d463,0x3ca7ad80,0x3ca6f6ef,0x3c581494,0x3b91b234,0xbbdd6fba,0xbc4b6dc1,0xbc951696,0xbccedb8b,0xbcbbe228,0xbcb0cecd,0xbcaa189b,0xbc9398cf,0xbc7e47e1,0xbc517e4c,0xbc16fee8,0xbbd9ee68,0xbb16fee0,0x3b0b1ed8,0x3b75e10e,0x3ba74d13,0x3bcd467b, -0x3be97f11,0x3c03a5dd,0x3c4b4110,0x3c881ef1,0x3cab9a73,0x3cbe42e7,0x3cd1d1ab,0x3cecaded,0x3ceb0ac3,0x3ceabb08,0x3ce4c281,0x3ce43cc8,0x3ce096b8,0x3cbb4c1b,0x3cb15723,0x3ca6981f,0x3c95dd65,0x3c87b11d,0x3c82b838,0x3c7e3c6d,0x3c6a11e1,0x3c5101ac,0x3c344740,0x3c0d399e,0x3bc7c16c, -0x3b83c731,0x3b6716eb,0x3b388d86,0x3aec7bf8,0x3a8132a6,0xb81e0d5a,0xbac39dcd,0x3b798570,0x3b7506ca,0x3bd69585,0x3c1b6a1a,0x3c55c1ac,0x3c6f09eb,0x3c84d7eb,0x3c91eafa,0x3ca4f71f,0x3cae56cd,0x3cbbf5a2,0x3cd1e935,0x3cce3d61,0x3cd242de,0x3ccfb21f,0x3cc3523a,0x3cbffb11,0x3ca0f6d8, -0x3ca52150,0x3ca0f580,0x3c9f61ed,0x3ca02106,0x3c9e4df0,0x3c9d7e25,0x3c942aaf,0x3c8d6a61,0x3c882cb9,0x3c80c2ab,0x3c745ff7,0x3c605a29,0x3c62407a,0x3c60980f,0x3c60ed9d,0x3c5f127a,0x3c6334a1,0x3c4f6436,0x3c876f1d,0x3c995248,0x3cb48331,0x3c9268df,0x3ca898f1,0x3cc72a5c,0x3ccb2fca, -0x3cce25e2,0x3cd09cba,0x3cd6e571,0x3cdb5d46,0x3ce0cd86,0x3ccf19dc,0x3cba463b,0x3ce16c7f,0x3cceafc2,0x3cbd7834,0x3babdd54,0x3b919465,0x3b8e1c3a,0x3b87109f,0x3b907d8e,0x3b86e394,0x3bb2cd42,0x3bb3c3d0,0x3b84ce46,0x3ba5a476,0x3b931a03,0x3b203316,0x3b30d39d,0x3b3d4f42,0x3b606fe6, -0x3b914374,0x3ba0dd21,0x3ba36154,0x3bacc3e0,0x3bb5d932,0x3bc833af,0x3bc2281a,0x3bb7e0a9,0x3b9e0776,0x3b9f0e42,0x3b9367ad,0x3b75bc5b,0x3b83ef8b,0x3b8fa2e9,0x3bb888bf,0x3b8c9e3f,0x3b8567ab,0x3b9d3981,0x3b88bbbf,0x3b9ca6f1,0x3be5bb9b,0x3b9fc776,0x3baba54c,0x3bb37aad,0x3b903912, -0x3b66317b,0x3b22dcc1,0x3bb6ab83,0x3bcef94b,0x3b3d2900,0x3bc7c668,0x3b8f6abb,0xba972734,0xbac58f3e,0xbab43bd3,0x3a317207,0x3b7ad24c,0x3bbb3931,0x3bc363f4,0x3bdc164b,0x3bf648cc,0x3c0c263f,0x3c0d6d64,0x3c0c2308,0x3bd96a0c,0x3bc3dbb4,0x3ba808f1,0x3b868d45,0x3b935f59,0x3ba97e16, -0x3c00246b,0x3bb07b30,0x3b9c2efa,0x3bc9372c,0x3b5b2515,0x3ba42346,0x3c4bbd38,0x3bfe58ab,0x3b8436d6,0x3b0d433d,0x3b2e4f3f,0x3b6f25fd,0x3b01afa5,0x3c07bbbe,0x3c10250b,0x3a77d547,0x3c01dfcd,0x3b8bddb1,0xbbe3d1ce,0xbbf3dc1e,0xbbdcc678,0xbb33fb0f,0x3b308fe5,0x3bc23124,0x3bd5800c, -0x3c0356a9,0x3c227b9d,0x3c42e3a7,0x3c55b178,0x3c4bed6f,0x3c0b7dad,0x3bf4f9e8,0x3bb62aaa,0x3b661446,0x3b55aa8c,0x3baa975d,0x3c3568ff,0x3ba3adf1,0x3b89a734,0x3c058cc0,0x3b2df2c6,0x3b991b13,0x3c998e2a,0x3bff9bf5,0x3bf72ef1,0x3bb37bbd,0x3b8a7a4d,0x37af7bcc,0xbb8d37a7,0x3ba16e27, -0x3c01bf09,0xbb1ba66e,0x3c0f987d,0x3b8140be,0xbc69c766,0xbc8b975b,0xbc8a6af5,0xbc1eba4b,0x3a003de5,0x3be4b9ff,0x3c0ea469,0x3c28a2b9,0x3c5248cf,0x3c76cb92,0x3c8f629c,0x3c8e67c9,0x3c5c62d1,0x3c3864dd,0x3c015f44,0x3b86435a,0xb9dd5650,0x3b499f57,0x3c69027f,0x3bd7b8b9,0x3b92f229, -0x3c0b323b,0xbace40ac,0x3ba01841,0x3cec7151,0x3c6ccc64,0xbc3c4e95,0xbb15d0aa,0x3add3850,0x3c52aee2,0x3cfc942c,0x3c942024,0x3c3a2718,0x3c38dc9a,0x3bf8b654,0x3b8e469e,0xbb364e77,0x3ba36a87,0x3bb5c4e8,0x3b72bb17,0x3b151c65,0x3a90c7c3,0x3ad49231,0x3b9cff98,0x3c277aa7,0x3c6b240e, -0x3c9bfbce,0x3c9c9324,0x3c4e6e23,0x3c3578aa,0x3c10de99,0x3b759220,0x3ba710d0,0x3b5bb0ba,0xbb06088e,0x39649818,0x3bd51ea5,0x3c6be958,0x3c86c8ba,0x3c009a3f,0xbc038253,0xbc46472e,0x3b68a407,0x3d2a3a14,0x3b90b541,0xbc72da36,0xbc80bae5,0xbcf22557,0xbca48bac,0x3c3b7ffb,0x3ba112fd, -0x3bb2237f,0x3c1f57d4,0x3bc06ba5,0x3ab7bb01,0xba9e2059,0xbb90b47a,0xbb8382d0,0xbad220dd,0x3b0128de,0x3b8fa16c,0x3c11b622,0x3b453cd1,0x3b590f95,0x3bf4bef2,0x3bc0a041,0x3ba73a94,0x3b80d660,0xb8b92859,0xbac6a0c0,0x39577758,0x3b5159d7,0x3a4fbac4,0xbb680bf5,0xbb2b8ee5,0xbb1d5058, -0xba0cd1a5,0xbc0c7a26,0xbb11cf38,0xbb9fd620,0xbb8b9acf,0x3a11efac,0x3a1bb05e,0x3c690834,0x3c70fded,0x3beacc23,0x3bb12c35,0x3aee0b40,0xb835dd73,0xbbd63edf,0xbbb2e09d,0x3b3f1b51,0xb90c6695,0xb88391c7,0x3ae40411,0x3bc85660,0x3c1b88ce,0x3c9b74ae,0x3bc11aec,0x3b1bedfa,0x3c182bea, -0x3bd5b20d,0x3b62c27d,0x3ae5305e,0x3b402c92,0x3a2323e2,0xb98c39d3,0xbba99b15,0xbbd823dc,0xbbbdbc63,0xbc3b51d1,0xbc7c1008,0xbc86efd8,0xbb6b5a9c,0xbd00f626,0x3982581f,0x3c1bbbb5,0x3b23332a,0xbc864793,0xbcae9e00,0xbc9e990a,0xbc5f13d6,0xbbf053db,0xbbaf0ca1,0xbb1e9814,0xbc08ce33, -0xbc1a84cb,0xbb56ce62,0xbb3c4b44,0xba876c9b,0xbb25de03,0x3b2df9c0,0x3b965691,0x3becc6ca,0x3b815253,0x3ac42bcc,0x3ac1ec74,0x3ac4cf46,0x3b574f39,0x3b888713,0x39330cbc,0xba27cf83,0x3a9a9449,0xba4443df,0xbb833ba5,0xbb835756,0xbbaa2d76,0xbc7ef384,0xbcf29889,0xbd16a94d,0xbcd64de6, -0xbd6e106c,0xbd8cedbf,0xbd631d4a,0xbce83da0,0xbc66a2bf,0xbbc55fdc,0xbba85754,0xbb5eb0be,0xbb720ca1,0xbb8bd23f,0xbc0248fc,0xbc31b855,0xbc01b05f,0xbc02ea83,0xbbdbeb33,0xbbaea7f9,0x3b6349d5,0x3bc037b0,0x3bb63563,0xbacea83e,0xba21b9a3,0x3bdee664,0x3b1b69e6,0x3a468f41,0xb8dfb8ca, -0x3b6049e2,0x3b6a7732,0xbb0b458d,0xbbfb4a5e,0xbc26b531,0xbc30da03,0xbc3055e1,0xbbb4e2e8,0x3b84564a,0xbc2f003e,0x3d3da296,0x3d1fe898,0x3cbb7ef5,0x3b7bd3de,0xbc9fccc6,0xbcfb06cf,0xbd0411eb,0xbce9a28c,0xbc9b1f74,0xbc63b1e4,0xbc6be731,0xbbf5e227,0xbb9b8562,0xbb943a6e,0xbbaa03b7, -0xbb9d50c1,0xbbe9c125,0xbbd310a8,0xbbb519f2,0xbb273cbb,0xbb948ea0,0xbb87b2c4,0xbacfadc4,0x3b40b94e,0x3be005bf,0x3c0537a2,0x3c2e71f1,0x3c594252,0x3c7dfc18,0x3ccab25a,0x3cf37918,0x3d029fd5,0x3cf85536,0x3d007745,0x3d1c7017,0x3d1d3a79,0x3cd43e6f,0x3ccca838,0x3c8c4e94,0x3c54368f, -0x3bff1565,0xbaa3fb7b,0xbc4c90c5,0xbccba295,0xbcd97955,0xbceab74b,0xbd01200f,0xbcec3696,0xbcd9a766,0xbcc55d9e,0xbcbb2242,0xbcb1aa89,0xbca7e48c,0xbc8af221,0xbc6d43f9,0xbc2d0bc6,0xbb8ce7f3,0x39453eb4,0x3b8f4b83,0x3bde1f51,0x3c136563,0x3c408468,0x3c764281,0x3c8e7747,0x3cad7e4e, -0x3cb730c1,0x3ccfe3a0,0x3ce6aafe,0x3ced8891,0x3cf85d55,0x3d0256ba,0x3cf059dc,0x3cad8447,0x3c7b5f86,0x3c61d4b4,0x3c411ceb,0x3c24b4a9,0x3c08dedf,0x3c040044,0x3be900c4,0x3bc99784,0x3b8ed44a,0x3b2d5bf4,0x3a223fca,0xbadfbb2b,0xbb85df04,0xbb47f89a,0xbb0b329a,0xbabde07b,0xba440530, -0x38f05675,0x3806c039,0x3adcd00b,0x3a0d1794,0x3ac12365,0x3b786c15,0x3bb10cbe,0x3bb0a41b,0x3bf603f3,0x3c233413,0x3c5937c0,0x3c7407ee,0x3c893ba2,0x3ca893a3,0x3c9ffebe,0x3ca2fc60,0x3c982330,0x3c86b109,0x3c6c6178,0x3c19bc8d,0x3c262f9d,0x3c1cc06d,0x3c15c288,0x3c112331,0x3c075e27, -0x3bff48c0,0x3be35284,0x3bcf70ff,0x3bbe016a,0x3ba49368,0x3b91632c,0x3b5ae26e,0x3b8a2ccc,0x3b9718fd,0x3ba8d673,0x3bb479b9,0x3bc5f285,0x3bc4e5e9,0x3c1d3ade,0x3c490a10,0x3c8995c4,0x3c1a2adc,0x3c54e80d,0x3c9365d3,0x3c9ad283,0x3c9edf15,0x3ca1cc33,0x3caa46a2,0x3cb06283,0x3cb8e8a4, -0x3c91480e,0x3c5c2de0,0x3cb45631,0x3c8ed291,0x3c2505b7,0x3bb83ebe,0x3baa6bfc,0x3ba3a5a0,0x3b9f33a9,0x3ba55b77,0x3b989a79,0x3bbcff3c,0x3bbbc641,0x3b937696,0x3bb07072,0x3b9fd757,0x3b4a6c11,0x3b534576,0x3b54b5bf,0x3b5bb710,0x3b969111,0x3ba88671,0x3bac7fb5,0x3bb6f3ad,0x3bc0f3e6, -0x3bd6ab44,0x3bcab460,0x3bbfd7b3,0x3ba72b57,0x3ba56968,0x3b9d5841,0x3b906d32,0x3b989184,0x3ba12c64,0x3bbd22b3,0x3b9d17a6,0x3b999a8f,0x3bacca78,0x3b96c2a0,0x3ba29f75,0x3bf250a4,0x3bb457b5,0x3bf169cf,0x3bdffe4c,0x3bb576d0,0x3b8f21b3,0x3b48fc68,0x3bbc223f,0x3bced4a9,0x3b560b63, -0x3bcff0be,0x3ba1b974,0xb98721d6,0xba12322c,0xba438b02,0x3965917a,0x3b7eedf9,0x3bbe9579,0x3bcb2b83,0x3be900b5,0x3c03bcf4,0x3c1db430,0x3c13b35a,0x3c0ad838,0x3bd4dfb0,0x3bbf13d0,0x3bac4f58,0x3b96576a,0x3bad9a16,0x3bc274d2,0x3bf53c47,0x3bc72d33,0x3baee907,0x3bc75e2b,0x3b70bccd, -0x3bb2a4bf,0x3c4ce5e7,0x3c126bc2,0x3bed7590,0x3bab0645,0x3bb1ad44,0x3bc23359,0x3b5a1e9d,0x3c0f16ee,0x3c0537d4,0x3b10be34,0x3bfcf8f0,0x3b968778,0xbb8bccfe,0xbbbc1002,0xbbc231d7,0xbb8889a5,0x3b0eda6d,0x3bc07ddc,0x3bd53853,0x3c0877d2,0x3c29058b,0x3c57977c,0x3c51324d,0x3c40a8c9, -0x3bef7432,0x3be07fa8,0x3bb52219,0x3b753d61,0x3b8dd9cd,0x3bbd022e,0x3c1f12c5,0x3bb60a40,0x3ba2b357,0x3c027342,0x3b44ca55,0x3b9e6121,0x3c94a545,0x3c196a68,0x3c5db63a,0x3c308272,0x3c07fc7d,0x3b0d5264,0xbb6f7ea4,0x3b966492,0x3bf91116,0xbaab761e,0x3c0343ec,0x3b93d338,0xbc2ae749, -0xbc605a97,0xbc81a9d6,0xbc3a557f,0x3925ed1e,0x3bdb0d60,0x3c0d2e1f,0x3c35979f,0x3c664c0d,0x3c93bdb1,0x3c9317d3,0x3c893217,0x3c33a85d,0x3c21ed63,0x3c02a1c3,0x3b9108b4,0x3a58e9d2,0x3b8f2812,0x3c719579,0x3be4bac1,0x3ba3394b,0x3c075939,0xbace1dda,0x3bc6dddd,0x3cf7aef6,0x3c9b762e, -0xbc301907,0xbad6a749,0x3b17643d,0x3c900dfa,0x3d1f759a,0x3ca343ca,0x3c163144,0x3ba729f9,0x3c384ea9,0x3c054ca9,0xbc010122,0x3bd9e224,0x3bff6e21,0x3a9a9049,0x3a93c356,0x3a6c28f3,0x3b222840,0x3b365012,0x3be48bd7,0x3c7bf49b,0x3c840548,0x3c74ea6d,0x3c447590,0x3c3e330f,0x3c28e345, -0x3b9770d4,0x3baea6ff,0x3b442dfc,0xbb2bb82e,0x3a512d5e,0x3c107722,0x3c8a7475,0x3c912313,0x3be4bf72,0xbc42ff9c,0xbc67ace8,0x3bbe7541,0x3d14ee18,0x3a3b147b,0xbc861e23,0xbc90429a,0xbcb2c66c,0xbc35a5b2,0x3c7899a3,0x3bc95678,0x3bab123a,0x3c5d18d9,0x3c16cd33,0x3ba398d5,0x3b92d6ec, -0x3a0755bd,0xba457dfc,0xba12ab16,0x3b6cf791,0x3bb187e0,0x3c0ebb66,0x3bc156d2,0x3bd19db8,0x3c0eb6dc,0x3bd60750,0x3b8b15ae,0x3b90c74b,0x3a575330,0xb801b137,0x3b2c74eb,0x3ba3964a,0x3afac755,0xbb1715f9,0xbba3dfe5,0xbb9b262f,0x3b4aa1ac,0xbbb269c7,0xbb876acf,0xbb96b893,0xbbd53de3, -0xbb151b95,0x39398ba6,0x3c0fbf2c,0x3c14e060,0x3c37b64c,0x3bf6f9c0,0x3b8a0ae7,0x3b7328e5,0xbbd7cebe,0xbbca70ae,0x3abc91af,0x3b0f9c23,0x3b81fa62,0x3b7543ab,0x3c0efcad,0x3c1e6bba,0x3c56e726,0x3bc5eec4,0x3b3ab6df,0x3c00ce32,0x3bfa2d09,0x3b8a2d0d,0x3ab5a0a6,0x3b87476c,0x3aee3e7b, -0xba5a71c2,0xbba4c319,0xbbb62fff,0xbb6738d2,0xbc52705f,0xbc636702,0xbc46e83f,0xbba356b6,0xbc82ae47,0x3bd83f4f,0x3bf4f1f9,0x3a5fd6ec,0xbc02ff19,0xbc746279,0xbc7fd330,0xbc282e72,0xbc137408,0xbbdd6447,0x3a226e7b,0xbbd5a102,0xbbde77f3,0x3af26d08,0x3b7ed206,0x3b96d1c7,0x3b327cd0, -0x3bd112fa,0x3bd8cec5,0x3b8fa55c,0x3bcb08dc,0x3bd50361,0x3ba4d926,0x3b9abf2f,0x3b98f9f1,0x3b9ec0a7,0x3a137b01,0xb98f867e,0x3b461561,0x3b02594f,0xba9cfa11,0x3aa24432,0xbb7960b5,0xbc4d36a5,0xbcad9561,0xbccf11f3,0xbd216945,0xbd80a5cc,0xbd5d91ec,0xbd2b37ad,0xbcbe061d,0xbc92aad7, -0xbc4ee6ab,0xbbe23d96,0xbb236261,0xbae58ee8,0xbbe33f24,0xbaed0338,0xbb457bbc,0xbbd77638,0xbbd51072,0xbb933cc3,0xbb100822,0x3b8fd9bb,0x3bef94f2,0x3bd39330,0x3ac4acbc,0x3ab26453,0x3bc1ae08,0x3b0b231d,0x3ae0ef49,0x3b1ebb8f,0x3b903064,0x3b321bac,0xbb84bff9,0xbc2b4470,0xbc5a0c2b, -0xbc506183,0xbca6b968,0xbc93acbd,0xbc06e281,0xbcba3b73,0x3ce83ef0,0x3c83a517,0xbb0e1f1d,0xbc6d9233,0xbcd74df4,0xbcd0e73f,0xbcaec30c,0xbc85f939,0xbc30e00d,0xbc17ab21,0xbc511b4a,0xbc0d0507,0xbbd7db20,0xbbb25336,0xbb9c3984,0xbb4d633f,0xbb50280a,0xbb135255,0xbb13388c,0xbb081bf7, -0xbb09e0a3,0xb9889505,0x3b5a007e,0x3ba7f53d,0x3bd64822,0x3bad454a,0x3bfe51ee,0x3c388673,0x3c5a8d51,0x3ca6af64,0x3cc5bd00,0x3cd369b3,0x3cc7ca15,0x3cbe711a,0x3ccd65a3,0x3cb94cba,0x3cc78b1e,0x3cb15b08,0x3c3e87c9,0x3baba83c,0xbb85957b,0xbc4e09ac,0xbcbb025b,0xbd0995e9,0xbd018649, -0xbcf85af5,0xbcf11cac,0xbce3018c,0xbcd6c86d,0xbcc89572,0xbcc01ebe,0xbcb8de3d,0xbcb02ef0,0xbc954286,0xbc6fbb93,0xbc3e9c18,0xbbfd56d5,0xbb129879,0x3b12ba0f,0x3bc1de27,0x3c218f03,0x3c61b7cd,0x3c8358c2,0x3c87f4d4,0x3c9b9154,0x3ca45114,0x3cbbe5f4,0x3ccf2b4a,0x3cdd9cec,0x3cf4ca9f, -0x3d07319c,0x3ce6a190,0x3c564846,0x3be91e5c,0x3ba98c0a,0x3b4cbebf,0x3ac90dc9,0xb8d9c386,0xba6b14b7,0xbb333931,0xbb550189,0xbba11974,0xbbc95d26,0xbbf3a4c3,0xbc0d6d94,0xbc26ef9f,0xbbfe9e97,0xbbb87a58,0xbb76da7b,0xbb06f0f7,0xb9dd7dcc,0x3a9354a1,0x3b05b29e,0x399ae499,0xb8391220, -0x3a5ac1f3,0x3a3f3d9a,0xb95298ba,0x3ae495f9,0x3b84306d,0x3be54931,0x3c0beda3,0x3c2072be,0x3c5a6ab4,0x3c3f0fc3,0x3c3e16e2,0x3c2aa7bd,0x3c05c994,0x3b8f6969,0x3a304f82,0x3a937f61,0x399fcd40,0xb9c132d6,0xba973c7f,0xbb04fb98,0xbb3cd27a,0xbb520912,0xbb63df03,0xbb77c0b7,0xbb8a46f1, -0xbb96fdb3,0xbbb58521,0xbb8fd5a6,0xbb744368,0xbb3ccc0a,0xbb0baa23,0xbab1be63,0xba506d06,0x3af2700a,0x3b6e8f76,0x3bed6115,0x3a98215f,0x3b7cb764,0x3beabfe2,0x3c06300b,0x3c1028bc,0x3c16d47a,0x3c267968,0x3c33bb9c,0x3c4420a5,0x3beb11fa,0x3b6de06d,0x3c38dbdc,0x3be5bc10,0xbab5c2d5, -0x3bb28a54,0x3bafc2a3,0x3ba0a7c1,0x3ba7ef1b,0x3baa5e0e,0x3b9e6b72,0x3bb0d96c,0x3babdf91,0x3b8f374c,0x3ba2ee40,0x3b95f4ac,0x3b512a1f,0x3b5956d5,0x3b57cb37,0x3b57627f,0x3b90a12d,0x3ba179e7,0x3ba5aec2,0x3bafe717,0x3bba9be2,0x3bcdc6c9,0x3bc52644,0x3bbf7d52,0x3bb0c289,0x3b9f5513, -0x3b9d20e1,0x3b9e90db,0x3baad8ab,0x3bb0d402,0x3bbcb24a,0x3bac8f91,0x3bab008b,0x3bb22655,0x3b99a74d,0x3b9869b9,0x3bef1394,0x3bba299d,0x3c05f637,0x3bcf49c6,0x3bc20ca7,0x3ba39859,0x3b83f465,0x3bb05672,0x3bbafa6e,0x3b72a4cc,0x3bba9745,0x3b917e29,0x38bc8c87,0xb79b1239,0xb94075aa, -0x39cbfeb4,0x3b6f9ac4,0x3baf018a,0x3bbe517f,0x3be0a36e,0x3c006e77,0x3c1e7f85,0x3c14c8b6,0x3c01b622,0x3bd2aa4b,0x3bb031d2,0x3ba2ece4,0x3b939a24,0x3bb9b023,0x3bd0e647,0x3be21011,0x3bd45942,0x3bb5fd67,0x3bb10e6f,0x3b6be48d,0x3bab858b,0x3c371e9f,0x3c0d24de,0x3c0c63f6,0x3bcb18bd, -0x3be4c3b0,0x3bfa2f46,0x3bb20ee6,0x3bf1a15c,0x3bc8cdee,0x3b25500b,0x3bc66cbc,0x3b5eec3a,0xbb6039c5,0xbb881ed8,0xbb9756ec,0xbb7fa6ac,0x3af6fd34,0x3bb0fca6,0x3bc482c2,0x3c02739a,0x3c1f8d79,0x3c5d23a3,0x3c441ce2,0x3c2d02c0,0x3be64f8f,0x3bc1fbc0,0x3ba3d600,0x3b5bd72e,0x3bae4e1d, -0x3bd069f9,0x3c0899c2,0x3bd32c63,0x3bbee3a2,0x3be348d3,0x3b3aa1be,0x3b88113a,0x3c7a9f23,0x3c11eb93,0x3c76c057,0x3c27fbb2,0x3c120619,0x3b8cdc33,0x39c51875,0x3b75c5d8,0x3bcbfbc9,0x3a74776c,0x3bcf02f4,0x3b51bea5,0xbc19360b,0xbc3e227d,0xbc628055,0xbc2fb522,0xb978bbbc,0x3bb40340, -0x3bf6a947,0x3c2c1aa5,0x3c65bbef,0x3ca4342a,0x3c943a5f,0x3c798eae,0x3c1dfaaf,0x3c0acc1f,0x3bf73353,0x3b7f0994,0x3b05ad8c,0x3bb382c5,0x3c66cb57,0x3c0156fd,0x3bb564d9,0x3bd939b6,0xbadd50ea,0x3bc2dd73,0x3cd9769a,0x3c99bb19,0xbc058ac9,0x3971df36,0x3bea7c23,0x3caf3108,0x3d261b8a, -0x3c90765a,0x3b9fcf8f,0x3a54a4bc,0x3c07c6a8,0x3bc9da4b,0xbc26b79b,0x3c4123cb,0x3c64fc78,0x3b057375,0x3b05d67c,0x3ae8e65c,0x3b8c0574,0x3b3a5afc,0x3b8a2a53,0x3c40571e,0x3c3b5eaa,0x3c283634,0x3c30f8d3,0x3c378b3b,0x3c342cf6,0x3bad6d6d,0x3ba60c40,0x3b2326a7,0xbb4e1966,0x3b1326b7, -0x3c3e2c29,0x3c99202c,0x3c88a0cc,0x3b8f2f86,0xbc8332b0,0xbc6adcdd,0x3c13b3d7,0x3ca8815b,0xbc0e9aa4,0xbca0ad27,0xbca53445,0xbc835497,0xbbbb8bd1,0x3c2ade6f,0x3bc49b61,0x3ba3ca0d,0x3bc0f0f1,0x3c194f76,0x3bfa7492,0x3b876a5b,0x3b2fd52b,0x3afefb33,0x3a2e3974,0x3bc342d6,0x3be9dad3, -0x3c0735d7,0x3c160a97,0x3c18090f,0x3c1eef7b,0x3be2eeb4,0x3b6f1ca1,0x3b90e975,0x3ae7e1ed,0x3ad9047c,0x3b9e5d34,0x3bad7342,0x3ac5e7a7,0xbb561171,0xbbe1e2c5,0xbb4e4dfa,0x3bd454a9,0x3b0c663d,0xbb55826f,0xbb720a10,0xbbf74107,0xbb8ceb57,0xbb28ae47,0x3b8e6185,0x3be89405,0x3c74d494, -0x3c3f0386,0x3bfbfc7f,0x3b8a232d,0xbb812c93,0xbb839677,0x3a0d1a1d,0x3b3e1563,0x3bb4f4c2,0x3ba0037b,0x3c3a2818,0x3c2fba1b,0x3bede268,0x3ba72f82,0x3b5be2fa,0x3bd15dee,0x3c045775,0x3b8ced57,0x3ac665ee,0x3b906c72,0x3b214509,0xb9e73caf,0xbb884827,0xbb83da3d,0xb95d399c,0xbc3c8609, -0xbc328a79,0xbbf0fabb,0xbb99fa6d,0xbbf88f37,0xbad76ba1,0x3b2ab70f,0x3b1a604f,0xbb5ec873,0xbb96eb14,0xbc0ac45b,0xbc4c926d,0xbc2b1f21,0xbbf46036,0xb9c178d2,0xb927cfc2,0x39acffce,0x3b2266c1,0x3bfdb9f5,0x3c0310c7,0x3bb3468c,0x3c1148a6,0x3c0e9767,0x3b9e7778,0x3c095d28,0x3c1aa690, -0x3c01e529,0x3bedc10f,0x3bb9fce8,0x3ba1a1a6,0x3ab05525,0x3a649318,0x3b894434,0x3b70e1e3,0x3a97c176,0x3bb28c81,0xbb873e71,0xbc2dc49d,0xbc576882,0xbc621a22,0xbd1d9b46,0xbd3a82cd,0xbcf15920,0xbccfe65e,0xbcc13c5c,0xbcb08743,0xbc94ce00,0xbc4cd33d,0xbae2924e,0x3abfbc92,0xbbd1e8f0, -0xba4c30af,0xba983f6c,0xbbad9ec3,0xbb4e0909,0xba721d8f,0x3b23fce3,0x3bc6bf24,0x3bf73a07,0x3bbb88a3,0x3b890089,0x3b70313c,0x3bbda167,0x3b46c822,0x3b51cccd,0x3b8ac8d1,0x3b7a735b,0x39e9d3fd,0xbbbf4bf9,0xbc3a1b0c,0xbc64c423,0xbc553717,0xbcbb4631,0xbcbd8ff0,0xbc87fecf,0xbce24828, -0x3bc65b8c,0xbbed514a,0xbcb12a66,0xbcc3ac20,0xbcab9efa,0xbc745b0c,0xbc02449c,0xba110007,0xbb9e1749,0xbc03d9f9,0xbc3af618,0xbc07ad47,0xbbe859a6,0xbbfb3ad4,0xbba24269,0xbb3d48d2,0x3b020491,0x3b05f01d,0x3ab0e09b,0xba823c8c,0xbabb082b,0x3a8994f8,0x3bcae1e2,0x3bc4d8de,0x3bd74ad5, -0x3bcbc61f,0x3bf128d8,0x3c1a6d27,0x3c117b59,0x3c468bd3,0x3c70a0fa,0x3c8637e3,0x3c8784be,0x3c5bed07,0x3c15ae9b,0x3bb39f32,0x3c9309cc,0x3c5717c2,0x3b538bbe,0xbb853887,0xbc7150f8,0xbca98218,0xbce2464d,0xbd0be8c0,0xbcee789c,0xbcc9ae96,0xbcad6412,0xbcaf7b38,0xbcaf907e,0xbcb2766d, -0xbca40e00,0xbc9a09b2,0xbc8de50d,0xbc65b3cb,0xbc1f95f4,0xbbda859a,0xbbb56dab,0xbaee2929,0x3a838c29,0x3b8e506a,0x3c0b7eea,0x3c427635,0x3c6b7995,0x3c7443b4,0x3c8f2b53,0x3c912c66,0x3ca01bc1,0x3caa50c5,0x3cb136c3,0x3cc79afb,0x3cdc7c45,0x3caba0d6,0x3bb8d0a8,0x3a8d9ca8,0xba802fbe, -0xbb2dd2ca,0xbb8892e4,0xbbb632d4,0xbbe2d5fc,0xbc1dfc88,0xbc257a21,0xbc42966e,0xbc4e4b55,0xbc5827e5,0xbc5a1490,0xbc623954,0xbc3c12d9,0xbc1a5896,0xbbfa5ba8,0xbbc3b14e,0xbb9ca800,0xbb3c5e9b,0x388b1866,0xbab8e287,0xbaaee1ad,0xba401446,0xba396a5d,0xbaaafd23,0xb954b99e,0x3a8739e2, -0x3b3e039e,0x3b73fd01,0x3b8f3620,0x3bd6ad7f,0x3ba4a732,0x3b911f88,0x3b78a66f,0x3af24a69,0xbb2c058e,0xbb95b345,0xbb9625c5,0xbbb57c01,0xbbcde175,0xbbf32caa,0xbc08ea9a,0xbc172de6,0xbc178c99,0xbc188402,0xbc1c359e,0xbc1f72b2,0xbc2444a6,0xbc2fd667,0xbc204ced,0xbc168127,0xbc0a08fb, -0xbbfca2d9,0xbbe2b433,0xbbdb92c6,0xbb8ac5be,0xbb448361,0xb9b2e018,0xbb8aa182,0xbb147fb5,0xb9b1a4b8,0x396d8c9a,0x3a26aba7,0x3a495fdc,0x3ab59ba1,0x3af5e3cc,0x3b2633b2,0xba06ffa7,0xbb2f676c,0x3afb6d64,0xba4608e3,0xbc04bbf6,0x3ba750a0,0x3ba6412b,0x3b9798b9,0x3ba67963,0x3ba70c88, -0x3b98113d,0x3ba35094,0x3b9da218,0x3b881b3d,0x3b93305b,0x3b88e7f6,0x3b4da8f3,0x3b5ac22e,0x3b5bb589,0x3b5de71d,0x3b8b15b5,0x3b985a2a,0x3b996f2b,0x3ba34565,0x3bac9be3,0x3bb8aa34,0x3bb5da48,0x3bb313de,0x3bad554a,0x3b940467,0x3b9271b7,0x3b96f0e3,0x3ba99e6a,0x3baed5a5,0x3baf408d, -0x3bac4786,0x3baa2ea8,0x3ba397ae,0x3b91d139,0x3b8d8fed,0x3bd3630b,0x3bad061e,0x3bf727c8,0x3bb8dd56,0x3bc49c1a,0x3bb1255a,0x3b8d271b,0x3ba02c60,0x3ba3fd4b,0x3b79b0f5,0x3ba01c04,0x3b8215d3,0x3a40d7e2,0x3a54236e,0x3a54aee0,0x3aa5cea9,0x3b7289a8,0x3b9fd54d,0x3ba62670,0x3bcb68d3, -0x3be70868,0x3c0d1b1a,0x3c0aa06f,0x3be9486e,0x3bd2e0df,0x3b9dbad9,0x3b91eea2,0x3b874be8,0x3bbebca2,0x3bd94328,0x3bcea121,0x3bd761a6,0x3bb432d0,0x3b91c337,0x3b612a99,0x3b977501,0x3c12fb3b,0x3bf36b45,0x3c00cb3a,0x3bbde629,0x3bf6ca83,0x3c0943db,0x3bb8702c,0x3bd6f398,0x3bb37806, -0x3b3146b1,0x3b99494d,0x3b30afc0,0xbb0b1d50,0xbb0b15fe,0xbb2900cf,0xbb15d43d,0x3b1421b8,0x3ba6230f,0x3ba5b95c,0x3bed7edd,0x3c0c2594,0x3c46919a,0x3c2e6c6e,0x3c15be6e,0x3befc412,0x3ba10b75,0x3b8bafc6,0x3b3020a8,0x3bc6c918,0x3be59462,0x3becea32,0x3be9aa4d,0x3bce84a4,0x3bae67fc, -0x3b30e6dd,0x3b693141,0x3c416b12,0x3bf16a09,0x3c52a5c9,0x3c00cf30,0x3c0a5ac3,0x3bc1993c,0x3affdf2e,0x3b516f9c,0x3ba0cd4c,0x3b054a37,0x3b99efd4,0x3b423125,0xbbd6886f,0xbc09726f,0xbc257818,0xbc0370c1,0x395c075e,0x3b8c6fbd,0x3bae9958,0x3c147276,0x3c4d9eb8,0x3c99e5b3,0x3c8bc0a7, -0x3c5be3a6,0x3c1db489,0x3bee9c22,0x3bd9010f,0x3b2749fd,0x3b4c9923,0x3bd737fc,0x3c4f3b0c,0x3c10721e,0x3bc3076f,0x3b955808,0xba925ea5,0x3ba8dcf4,0x3ca8f549,0x3c8027fc,0xbb5efab6,0x3b926396,0x3c43d3f1,0x3cb3cb60,0x3d176f62,0x3c830aff,0x3baf9512,0x3b39a43b,0x3b62a96d,0x3b0df954, -0xbbeb285b,0x3c85b59d,0x3c9ba0d2,0x3b97e290,0x3b9864fa,0x3b82d601,0x3bb707a6,0x3b6d23f5,0x3b377ad9,0x3bdbdd11,0x3bf37a47,0x3be66303,0x3c162e38,0x3c28c9e4,0x3c37ebe3,0x3bd3e216,0x3b9334c0,0x3af4d3c6,0xbb49db21,0x3b985259,0x3c6c1e94,0x3c9404d7,0x3c5a3a5a,0x3ac7f253,0xbc8c6304, -0xbc3b0d70,0x3c49cabe,0xb9ae2aec,0xbc78bc68,0xbc9635e1,0xbc9e47ef,0xbc5737ce,0xbbeac74c,0xbb9486e3,0x3b6324ce,0x3b95efd0,0xbb32be40,0x3c220214,0x3c2bffc8,0x3b713715,0x3b0c863f,0x3ad50daf,0x3aa9b58e,0x3c033758,0x3c120a07,0x3bd5eeff,0x3c20284f,0x3c241028,0x3c20aa54,0x3bfd2b4a, -0x3b86cb59,0x3b973176,0x3b11a358,0x3b43a1ff,0x3bde3dda,0x3bb591cc,0x3a77fe6f,0xbb9d130a,0xbb824e9b,0x3ae21985,0x3ba8dc3f,0x3c3c628c,0xbb3eb3bc,0xbb79f3d0,0xbbc9eabc,0xbb9f4dbf,0xbb839903,0x3af0c0ff,0x3bf06b63,0x3c8230d0,0x3c81b1d7,0x3c3ef5f0,0x3ba4088b,0x3b27a33f,0x38afbab3, -0xba91806b,0x3ba05f0e,0x3bf5e13f,0x3b990e87,0x3c439b3a,0x3c374123,0x3b83da4e,0x3b5eee85,0x3b319702,0x3b95fa06,0x3bf4e7af,0x3b74804a,0x3b0ec57e,0x3b78e36e,0x3b2000c3,0x39c78887,0xbb418a38,0xbb0513f8,0x3b085f85,0xbc324156,0xbbfd9efc,0xbac7e622,0xbb7d8238,0xbb4c65ab,0xbbf20a92, -0x3a362b4d,0x3b7e7d31,0xb987e820,0x3b44041a,0xbaedfbc8,0xbc54d358,0xbc30079b,0xbc1a974a,0xbbdb00a7,0x3a7ef58b,0x3b4726fc,0xb8add70a,0x3bfbbf20,0x3c144d02,0x3bf639eb,0x3c182ce6,0x3c0adb11,0x3bad8e83,0x3c193c1b,0x3c222977,0x3c107e9c,0x3c06644a,0x3bc20466,0x3ba7ed10,0x3af304b3, -0x3adb5daa,0x3b9044c1,0x3b87e553,0x3af98976,0x3bcb0023,0xbb891476,0xbc021e93,0xbbf349da,0xbb98db97,0xbceac327,0xbcb712ac,0xbc4046ac,0xbc5e0eed,0xbca6d665,0xbca3a280,0xbc950da9,0xbc65324b,0xba0c84d6,0x3b69341b,0xbb26d2bb,0xba877df7,0xbaaa7e2b,0xbaba6d38,0xbac9af7b,0x392414e1, -0x3b988ba2,0x3c05436f,0x3c027bea,0x3b77ee9b,0x3bbfb20b,0x3bafedb6,0x3bcba91f,0x3b856338,0x3b80ac13,0x3bac6b7f,0x3b0870b7,0xbb0b160a,0xbbe3f68f,0xbc2cf695,0xbc4adb71,0xbc4ab69d,0xbc9e0b37,0xbcb39d60,0xbcb38f2c,0xbcd94e5a,0xbc57a978,0xbcbab98a,0xbcf19936,0xbcc6e80d,0xbc59097a, -0xbb8a6bc3,0x3b07300c,0x3be2592a,0xbbbdb6f8,0xbc32f068,0xbc05c78b,0xbbe81195,0xbbbe63f2,0xbbae13b6,0xbb1126c7,0x398b8b69,0x3b94a774,0x3bb3b02f,0x3b9a4ab9,0x3a18f76f,0xba414c5e,0x3a580213,0x3bb7c6c2,0x3ba1f0b9,0x3bbea0eb,0x3bf370cf,0x3c090669,0x3c02f668,0x3b639bb5,0x3b68de0a, -0x3b9636cf,0x3ba6ecc8,0x3c11eda9,0x3bb9d883,0xbb3550ca,0xbc10e4d8,0x3bfee011,0x3af0c6b3,0xbba7d311,0xbc31b7a5,0xbc9e0f67,0xbcb3d987,0xbccba38d,0xbcd8c9e3,0xbcaf4f42,0xbc8bfc71,0xbc679e8a,0xbc7cfcb2,0xbc81f85c,0xbc8b3cd7,0xbc74eb44,0xbc5da174,0xbc427b1d,0xbc14e39a,0xbbba8d52, -0xbb2cdb7b,0xbafaff22,0xb9282800,0x3ab5b960,0x3b5ca09a,0x3bd1c33c,0x3c076db6,0x3c36c458,0x3c45b024,0x3c81c7ea,0x3c6a5f94,0x3c71e995,0x3c68aa33,0x3c5a8c83,0x3c709def,0x3c820005,0x3c27646c,0x3aa1a165,0xbad5ffd3,0xbb78c6a6,0xbbafedf0,0xbbe3aaf7,0xbc0b6cd2,0xbc2ceeee,0xbc63cf07, -0xbc6f99cf,0xbc84aad1,0xbc897695,0xbc8b8954,0xbc8c7621,0xbc90707d,0xbc812f1c,0xbc681597,0xbc4f6926,0xbc39c9fe,0xbc2b6a7d,0xbc1352fa,0xbba91ba6,0xbbabd3c0,0xbb865c63,0xbb3a01cd,0xbae3cd4a,0xbaa1ec5c,0xba42b9b1,0xb99dc09a,0x3a58792e,0x3a8b19f1,0x3ad643aa,0x3b3ac911,0x3aedbc86, -0x3a802285,0x3a1caf15,0xba83887f,0xbbc8f557,0xbbe35141,0xbbf2ec86,0xbc09c611,0xbc174491,0xbc2ae780,0xbc38c9c5,0xbc45ae00,0xbc44f51a,0xbc46a98f,0xbc4aaf6a,0xbc4edb69,0xbc52b740,0xbc5b0bf8,0xbc4ddc0a,0xbc459d35,0xbc3bbdb2,0xbc318492,0xbc24ac4a,0xbc233804,0xbc05e800,0xbbebf155, -0xbbacdc9e,0xbbeb25a3,0xbbbdc32e,0xbb8c0dc1,0xbb86f679,0xbb7de798,0xbb82eea8,0xbb66491c,0xbb594379,0xbb3a4b55,0xbb918db1,0xbbb84d6b,0xbb6fb8ad,0xbba1ca7f,0xbc380a87,0x3b9b08af,0x3b935f5b,0x3b8b48d6,0x3b9e267f,0x3b9d1804,0x3b876287,0x3b93974f,0x3b8fa0db,0x3b829175,0x3b848b7d, -0x3b7c8723,0x3b63577e,0x3b63c257,0x3b655b10,0x3b6a0d16,0x3b86febe,0x3b8ed52e,0x3b8c0ff1,0x3b935c4c,0x3b9975e0,0x3b9d22d8,0x3b9f3c0c,0x3b9f6b7a,0x3ba3fdb6,0x3b856875,0x3b83bb8a,0x3b881ec8,0x3ba16941,0x3ba63ce7,0x3b9eac8d,0x3ba2ee0a,0x3b9ecc1f,0x3b8d7227,0x3b8502d0,0x3b80488f, -0x3bb06109,0x3b966d1a,0x3bda0953,0x3ba58c4a,0x3bb764ba,0x3ba65bdb,0x3b673531,0x3b876dbc,0x3b88c43c,0x3b7a08ae,0x3b89dc2a,0x3b80fadc,0x3b25facc,0x3b0bb292,0x3b0f02d7,0x3b2388d3,0x3b8968d6,0x3b9d515c,0x3b9303e2,0x3baee754,0x3bc047b6,0x3bdfe971,0x3befdc82,0x3bcb3e67,0x3bcc08d6, -0x3b8a8cea,0x3b7f9660,0x3b72353b,0x3bc2148e,0x3bde0df4,0x3bbaf49a,0x3bcd7eda,0x3ba7ed02,0x3b5dadf9,0x3b4daee7,0x3b806fad,0x3bdeb889,0x3bcaba22,0x3bd22289,0x3ba3dcd9,0x3bf99ed4,0x3c012001,0x3b841c25,0x3bafc280,0x3b96e0e6,0x3b52545e,0x3b734a44,0x3b2d37b3,0x3aad5c4f,0x3a070ab3, -0x396b53a3,0x3999bf9a,0x3b577ea2,0x3ba4d5c5,0x3b8b21a4,0x3bc89f29,0x3bdb8e3e,0x3c1666d1,0x3c0ef822,0x3bf97e3f,0x3bf350e2,0x3b84d6b8,0x3b6d72da,0x3b0bad3d,0x3bdf85c4,0x3bfdd48c,0x3bcd5ffb,0x3bed7851,0x3bc80275,0x3b729877,0x3b262b28,0x3b432ee6,0x3c08758e,0x3bb8b611,0x3c31c7fe, -0x3bd26f61,0x3bfd3d71,0x3bb810ca,0x38815fdb,0x3ae7f643,0x3b370fe3,0x3b2fb90e,0x3b759c69,0x3b949614,0x398c9125,0xbb48190f,0xbb8cbbe9,0xbb60ef38,0x3b2d62ae,0x3b94ac8b,0x3b76f898,0x3be9c3df,0x3c1f40f6,0x3c6d9cd2,0x3c6eb044,0x3c3a1157,0x3c1dfe7f,0x3bc5f69b,0x3bafb6ff,0x3a50083e, -0x3b8b0e6a,0x3bff8771,0x3c320610,0x3c13a2c3,0x3bb88bc6,0x3b189b5b,0xba2a6918,0x3b7dac84,0x3c746a5d,0x3c4de69c,0xbb02a2bd,0x3bbd8d64,0x3c6b1120,0x3cacf4f6,0x3cfa862e,0x3c707c0c,0x3bef76a3,0x3bc973db,0xba8511c7,0xbb43f6ff,0xbbb4ffa1,0x3c7b60aa,0x3c97afbc,0x3baf51ea,0x3bc125ae, -0x3bc45990,0x3be5f7e2,0x3b9b2503,0x3b187df1,0x3b277be6,0x3b8cfbb1,0x3ba228c3,0x3c03e2c8,0x3c1a6d68,0x3c342f97,0x3c05e847,0x3b77f9ec,0x3a8c1b43,0xbb1b22d4,0x3bfccce2,0x3c88fc68,0x3c7d81aa,0x3c1d827b,0xb9810af9,0xbc76580a,0xbc24b9a2,0x3c81f44d,0xbc8cd4ab,0xbc777087,0xbc66cd0a, -0xbc885f7a,0xbc468c76,0xbc4df10b,0xbcaa1777,0x3af357fb,0x3bdd8a60,0xbbad76f7,0x3bf2a53d,0x3c1ab789,0x3bedbbac,0x3b85633f,0x3b05557e,0x3aabfdf4,0x3c0bc386,0x3c1e576e,0x3b928ef1,0x3c0898ce,0x3c126a3e,0x3c11d667,0x3c1764ef,0x3bb3343c,0x3b9cb943,0x3b146f1f,0x3b7b980d,0x3c100940, -0x3bb33c80,0x39e00909,0xbbad85f9,0x384e3698,0x3ba19832,0x3ab20e48,0x3ca42b4a,0xbb6b812b,0xbb8e3c21,0xbbb283db,0xbb8903be,0xba01a38b,0x39a5b886,0x3bd83ada,0x3c6cb2e0,0x3c7c1f1e,0x3c3de89c,0x3b9f4646,0x3bc0247f,0x3b02e5ce,0xba95e741,0x3b4cf1d5,0x3bc41c9e,0x3b7b95a7,0x3c257b8c, -0x3c1afd4e,0x3b042af1,0x3aed39a8,0x3a8c0672,0x3b19a3be,0x3bb8a51e,0x3b29bbc0,0x3b4f2681,0x3b5d7758,0x3b0a3ff9,0x3a998926,0xbaf38626,0xb7c15a16,0x3b534be7,0xbc06ebda,0xbb13cbc6,0x3b660a71,0xbb40d79b,0x3985d91e,0xbbba1fab,0x39b86d7e,0x3b4e3fa0,0x3b88f9db,0x3bc629f8,0x3adb8904, -0xbc1787c5,0xbc1a4166,0xbc20dedb,0xbc396a3d,0xbac40f13,0x3b39b9d5,0x3ae8acb8,0x3baa3541,0x3bd54e29,0x3bfab6ff,0x3c04c09a,0x3be3a621,0x3b94c921,0x3c0844d0,0x3c065c73,0x3bf87ef5,0x3c0548ca,0x3bb97528,0x3b967290,0x3afce400,0x3acf76d3,0x3b7d483a,0x3b5d68f7,0x3aa868a9,0x3b854f4a, -0xbb36c751,0xbb877e0f,0xbb7fa384,0x3aaec949,0xbc9c6eea,0xbc0a7c2c,0xbb94fbb3,0xbbee1c14,0xbc6172c4,0xbc768991,0xbc64dab1,0xbc23f904,0xbb0f69d1,0xb91ed749,0xbb499af3,0xb88c59c3,0x3ab3c416,0x3aad8610,0x3b1875c3,0x3b85b336,0x3bc48981,0x3c026dc7,0x3bda41d4,0x3af3ab54,0x3bcc9c61, -0x3bc4cd23,0x3bb1f5d9,0x3b89909b,0x3b7b4c1d,0x3bbf9ed8,0x39a308ae,0xbb803efb,0xbbe66cf9,0xbc0eb749,0xbc20aa6b,0xbc3ab146,0xbc7710f6,0xbc9e4b45,0xbccd31f3,0xbcc13065,0xbcc97f4e,0xbceaf99e,0xbcec7796,0xbcae5467,0xbc2694e8,0x398f20b9,0x3b635c25,0x3a0fa1ad,0xbc04c36b,0xbc22f195, -0xbb8d3674,0xbbb51afc,0xbb89add2,0xbaef0dbd,0xb89a0e50,0x3b35c8b3,0x3b8b3f38,0x3becf3bc,0x3be198fd,0x3b15811f,0x3ab95747,0x3ac4f37a,0x3b5f5f76,0x3b57a646,0x3b8e7af7,0x3bdc2aea,0x3bf8c10e,0x3bbaf1f1,0xba619a9f,0xbb3ee195,0xbb676667,0xbb89a0af,0x3ada9028,0xba29ab85,0xbc187110, -0xbc90d9bc,0xbaef3a00,0xbbe8e777,0xbc25bf98,0xbc4fb360,0xbc88851a,0xbc89cd04,0xbc857278,0xbc6eba18,0xbc44c39c,0xbc2f5441,0xbc1f65ee,0xbc2d4893,0xbc2ed087,0xbc39a526,0xbc1b38a5,0xbc02bfc8,0xbbd6535e,0xbbb7d929,0xbb8fa32d,0xbb2d0278,0xba9a04f4,0xb93ada62,0x3a7ef9da,0x3b173d5d, -0x3b8f70c8,0x3bb315ea,0x3c00a277,0x3c0ca929,0x3c4ff316,0x3c1e3d12,0x3c0fd7ef,0x3bd12b95,0x3b94d70d,0x3b91fc76,0x3b96dbdd,0x39070c4c,0xba6fe040,0xbb53596e,0xbba8e920,0xbbdefa40,0xbc0a28ca,0xbc262be0,0xbc4c3c57,0xbc7baa58,0xbc83ad28,0xbc88e346,0xbc8c86aa,0xbc8d987d,0xbc9109fe, -0xbc9911ac,0xbc8bfcd0,0xbc820f33,0xbc6bf674,0xbc569455,0xbc40f895,0xbc2f169d,0xbc137601,0xbbf22f1d,0xbbc21ff6,0xbb8d4303,0xbb3e577f,0xbad15a68,0xbaa67cf8,0xba8ad215,0xb98c9a50,0xb8cf0961,0x3a3ed27a,0x3ae60a4a,0x3a79326d,0x387dfb63,0xb9ee702f,0xbaff5486,0xbc004982,0xbc05b3de, -0xbc0fa50d,0xbc1d7a08,0xbc298bd6,0xbc387352,0xbc42ceed,0xbc4f0da2,0xbc4c93fe,0xbc4f9a30,0xbc52fef6,0xbc57eecc,0xbc5a1afd,0xbc5f2d86,0xbc52a2ea,0xbc4a8a1e,0xbc424b8c,0xbc3930b7,0xbc2f1697,0xbc265add,0xbc1fd3bc,0xbc162a02,0xbc055d94,0xbc0a5fd7,0xbbfd95b6,0xbbd62c4e,0xbbd493e4, -0xbbcc3ff7,0xbbd060d0,0xbbc099ea,0xbbbdd4e4,0xbbaf51a5,0xbbd0e1dc,0xbbe86bc9,0xbbcf8670,0xbbe718f1,0xbc4d2cfb,0x3b8b936c,0x3b838fb7,0x3b6fcaa2,0x3b907c2e,0x3b8ca67d,0x3b63cac6,0x3b7c6573,0x3b7ada49,0x3b74a5a6,0x3b6968c6,0x3b659fd1,0x3b7599b0,0x3b66b61d,0x3b68998d,0x3b6fb3d5, -0x3b809a99,0x3b82d239,0x3b7d4408,0x3b7ed144,0x3b820820,0x3b7af9d6,0x3b8bc475,0x3b918c63,0x3b9ecc33,0x3b73b3bd,0x3b7a939d,0x3b81b7a9,0x3ba15a58,0x3ba58f9c,0x3b962c1e,0x3b9d4620,0x3b96c071,0x3b80b805,0x3b7ae237,0x3b6777af,0x3b95ec37,0x3b86f3c9,0x3bb6b376,0x3b78cfe8,0x3b955e22, -0x3b8a56c3,0x3b21ae6a,0x3b4dfdf9,0x3b565f90,0x3b759c9d,0x3b6dfd5b,0x3b8108b6,0x3b8b3a8e,0x3b560f2c,0x3b55a634,0x3b61e322,0x3b9106db,0x3b979eb9,0x3b881c9f,0x3b8cd940,0x3b90bcb1,0x3ba00de1,0x3bc9360b,0x3bae80a3,0x3bc1e25c,0x3b7719d4,0x3b66fcd7,0x3b619965,0x3bc4aa25,0x3be0115f, -0x3babc8e8,0x3bbaad3f,0x3b95b2d4,0x3b2db5d5,0x3b3ebe64,0x3b60c92c,0x3ba728d7,0x3b9d306f,0x3b9e7329,0x3b84af9d,0x3be6014f,0x3bdab933,0x3b0891ae,0x3b66a3be,0x3b63ec78,0x3b7352d9,0x3b3c45d9,0x3b2ca9b3,0x3b954a74,0x3b2d73ba,0x3b30a702,0x3b341bb4,0x3b8eb73d,0x3ba2d87a,0x3b815593, -0x3b9615a1,0x3b909b5b,0x3bbd8591,0x3bd98cfe,0x3bcaf4f0,0x3bf18468,0x3b64f544,0x3b59e08f,0x3b081e79,0x3bfc7956,0x3c0a1014,0x3bbb6475,0x3be21d99,0x3bb6d634,0x3b341858,0x3b1a831d,0x3b140fdf,0x3baca07f,0x3b78b747,0x3bfac01e,0x3b7f972e,0x3bac1f23,0x3b7c399f,0xbb13a306,0xb9c97c6e, -0x3a527024,0x3b5c347c,0x3b50791c,0x3bc112ab,0x3bde5c2b,0x3afa9e3f,0x3a5ce94f,0x3a593993,0x3b99aa0f,0x3ba78166,0x3b6cf954,0x3b989d91,0x3bba82b1,0x3c100be9,0x3c36add2,0x3c176fb1,0x3c23b3c0,0x3ba93fe6,0x3b85479e,0xba0d9c29,0x3bb4f882,0x3c139c80,0x3c12096d,0x3c085df2,0x3b9c1f30, -0x3a1a5b45,0xb94a1fff,0x3b385175,0x3c23d03a,0x3c10cb2c,0xbb4e2a0d,0x3bc817bc,0x3c82d435,0x3ca026fa,0x3cc01b00,0x3c510cbb,0x3c0703b5,0x3c088d11,0xbb794ce1,0xbbf122de,0xbbf88aec,0x3c17ea66,0x3c6d8fc5,0x3bd94c17,0x3bc9f194,0x3bcbc6f1,0x3bf32a5c,0x3bb33e11,0x3b30cfa0,0x39d632e0, -0x3afd5508,0x3b52d99e,0x3becfbd4,0x3c0876dc,0x3c27159a,0x3c224908,0x3b4eca8a,0x39b464a9,0xba45e273,0x3c2ecb3b,0x3c91a43f,0x3c4398d5,0x3bd5e16b,0xbb0c6ce5,0xbc6e5c90,0xbc3be01e,0x3c980f35,0xbce27b6e,0xbc73074b,0xbc36dbab,0xbc4ece05,0xbc25685f,0xbc68078f,0xbcd780e8,0x3b27d43d, -0x3c1e6038,0xbbbe169f,0x3ba93aa9,0x3c01f161,0x3c115f01,0x3bd64c7d,0x3ba0d1b1,0x3b5e8144,0x3c0df434,0x3c1cb4be,0x3b788fb9,0x3bddd8c1,0x3bf50496,0x3bf29cc1,0x3c2e7299,0x3be31d94,0x3b9f318d,0x3b3948ab,0x3ba141bd,0x3c26845c,0x3bae8a1d,0x3a0fa14a,0xbb996514,0x3b222617,0x3be155b0, -0xb7cb30be,0x3cd67d64,0xbbc5f53a,0xbbcec632,0xbb46a397,0xb975bb10,0x3bb7fabd,0x3912bf49,0x3ba19e58,0x3c4443c1,0x3c56f323,0x3c32b64b,0x3b8c2d63,0x3bf2028e,0x3b5e18da,0xba032d40,0xb9302d4b,0x3b211eb7,0x3b456ed2,0x3bd7ee8d,0x3bb838ca,0xb90411b8,0x38d0f1e1,0xba80eb35,0xb9b7fd6f, -0x3b56afa2,0x3abd13db,0x3b6e073b,0x3b5b405e,0x3afac3a4,0x3b00ffe5,0xba12fd03,0x3aff0b82,0x3b8e7771,0xbb045bf8,0x3b4768e8,0x3b8f9168,0xbb917307,0x3b7cf5e6,0x3a703715,0x3aaf201f,0x3b1b5217,0x3c0f3818,0x3bcb1dca,0x3adf6077,0xbbba6b89,0xbc0ab037,0xbc1c9a2f,0xbc6ad18b,0xbb3a1825, -0x3b2ff7e2,0x3b3e5e4c,0x3b7faa78,0x3b9ab0c2,0x3bc1746a,0x3bc66ce8,0x3ba7ea1f,0x3b58bc63,0x3bbbec7d,0x3bb07059,0x3ba223c1,0x3beddecc,0x3baa81c2,0x3b6bc029,0x3aed9df0,0x3aa27fb9,0x3b4a9828,0x3afa8475,0x38988913,0x39b763e8,0xbad8766f,0xba80317d,0xba98955f,0x3b9dbb56,0xbc66d6a2, -0xbbb8f4fb,0xbb34da76,0xbb666626,0xbbec083a,0xbc23b6a5,0xbc0f05bc,0xbba2272b,0xbb929bc0,0xbb9ce9d8,0xbbc02264,0xba848ef1,0x3ae8e2d5,0x3acf3ed9,0x3ba0bda2,0x3beea615,0x3c0d7c2f,0x3bdafff1,0x3b9a6e33,0x3ae607ea,0x3bc3d81d,0x3bbcb781,0x3b549dde,0x3b71488b,0x3b5fb705,0x3bb717ce, -0xba5b89ff,0xbb96751f,0xbbbd1969,0xbbcac307,0xbbe8c567,0xbc27d736,0xbc59bc91,0xbc97096b,0xbcd8d51c,0xbcabb2e8,0xbcdaf95c,0xbcdd29e0,0xbcc2c02d,0xbc933667,0xbc2dafef,0xbb73c7a4,0xbb8b4994,0xbc3305dc,0xbc07fa36,0xbba98db0,0xbad74cfb,0xbb6a8ddd,0xbb4a13bd,0xba275518,0x3a5ff1ed, -0x3b4cf56d,0x3b9108ee,0x3bd8a249,0x3bdbb0a5,0x3b63dad8,0x3b6ee6f1,0x3b462dc6,0x3b0599a1,0x3b0d73c1,0x3b3a9487,0x3bac52cd,0x3b8fed33,0x3b03bd17,0xbb6fc170,0xbbe96628,0xbc0f1aed,0xbc1aaaa4,0xbb912a3f,0xbbb29ed4,0xbc2d9e99,0xbca12abf,0xbc120aad,0xbc5ba7d8,0xbc5cff4c,0xbc53b3be, -0xbc526324,0xbc2e8a1a,0xbbe7f721,0xbb5c9152,0xbb7b32b9,0xbbb0eb7b,0xbbc57136,0xbbbba8f2,0xbbaa5f21,0xbba8abb4,0xbb5ae620,0xbae7b9d3,0xb9d78e0b,0xbae6abcb,0xbb3b332a,0xbb81118c,0xbb2a4397,0xbad881ca,0xb9e94234,0x3a950407,0x3b35d71c,0x3b88541d,0x3bae00b7,0x3bb5edbc,0x3c0d81f3, -0x3ba4a7c2,0x3b557cce,0xb93d2351,0xbb19aab5,0xbb7106f8,0xbb9462fd,0xbc003822,0xbb16d2f4,0xbb91ba0e,0xbbc600f3,0xbbfd5adc,0xbc1b7996,0xbc381627,0xbc5fc463,0xbc802cfc,0xbc7e1858,0xbc7049ab,0xbc6bc707,0xbc6703da,0xbc68934c,0xbc725ebc,0xbc5fc802,0xbc51df8b,0xbc3b14b1,0xbc27d7c6, -0xbc0d166e,0xbbf799aa,0xbc0437b3,0xbbbdb1ba,0xbb9c019e,0xbb6f333e,0xbb2ccc3a,0xba8867b8,0xba75f45c,0xba72066c,0xba191ca9,0xb9bfe938,0x39c15f65,0x3aba6997,0x39e35de4,0xb9bf5b91,0xba698140,0xbb1b969d,0xbc067e77,0xbc001ae1,0xbc0a22c7,0xbc1450f7,0xbc1ca0b0,0xbc25f86b,0xbc2c65ba, -0xbc39a4ef,0xbc32d415,0xbc34c790,0xbc3517a2,0xbc368452,0xbc35251b,0xbc34b445,0xbc2bca4d,0xbc25e3e5,0xbc216174,0xbc1a0a93,0xbc14b58a,0xbc06dece,0xbc156d33,0xbc164469,0xbc1a3175,0xbbfe479e,0xbc03d6a6,0xbc0279a4,0xbc0059b5,0xbbf5209c,0xbbf445c1,0xbbe58401,0xbbe37ea5,0xbbd8505d, -0xbbe98f56,0xbbeb4978,0xbc006420,0xbc02085f,0xbc3533b3,0x3b70790e,0x3b5fe524,0x3b4917db,0x3b74a872,0x3b6886d3,0x3b2f358a,0x3b498713,0x3b4ea6f0,0x3b5c57eb,0x3b4947f4,0x3b4a358a,0x3b6c6c27,0x3b517e6a,0x3b54a3c8,0x3b61e5ec,0x3b688a0b,0x3b679525,0x3b61f3df,0x3b55b683,0x3b547680, -0x3b46eea9,0x3b69aea6,0x3b77c375,0x3b8f7c6f,0x3b52e2c6,0x3b622c1f,0x3b6cbe15,0x3b989b1c,0x3b9c5be0,0x3b87e993,0x3b8d6803,0x3b85514b,0x3b6215b8,0x3b60eddc,0x3b4e3b55,0x3b7767f2,0x3b6424cf,0x3b77f7fa,0x3b1f29e8,0x3b5f1c37,0x3b4f506b,0x3aa190e5,0x3af9c7f1,0x3b1337b8,0x3b64e433, -0x3b4dd5aa,0x3b70b040,0x3b9fbbcb,0x3b5dcf95,0x3b556bfa,0x3b6b1cd5,0x3b852574,0x3b86fef7,0x3b77c9ac,0x3b566729,0x3b4c9757,0x3b5782a6,0x3b9a564d,0x3b904b15,0x3bab51be,0x3b5840c4,0x3b50d87e,0x3b580f3f,0x3bc0e399,0x3bd7f860,0x3b9aed22,0x3ba32a61,0x3b83d3d5,0x3b16db73,0x3b37a483, -0x3b49e59c,0x3b7ca2be,0x3b5eff54,0x3b58f4f3,0x3b445299,0x3bb792ac,0x3b95f00c,0xb8bd5cb3,0x3ac99a72,0x3b0afca5,0x3b81b55f,0x3b259127,0x3b2fe3a7,0x3bc7524d,0x3b461f94,0x3b5d92eb,0x3b7f17c5,0x3b9bb0e9,0x3b9b19cf,0x3b82572a,0x3b538924,0x3b2ca951,0x3b4e4be3,0x3b97aea2,0x3ba01f46, -0x3bdb0af0,0x3b489c6f,0x3b54fbf9,0x3b254cb1,0x3c077f41,0x3c10cbdb,0x3bb33723,0x3bd30de9,0x3ba51d47,0x3b21c923,0x3b26b7ee,0x3b0803ab,0x3b5d9a1c,0x3b1e427e,0x3b56f722,0x3a8b0fa2,0x3b258078,0x3ac52ffb,0xbba08808,0xbb51eb31,0xbabe0352,0x3b713c8e,0x3b4a4862,0x3bcea44a,0x3c29fad0, -0x3b80daab,0x3b1c5373,0x3b229879,0x3b9d46c4,0x3ba2e4b8,0x3b6f6e81,0x3b1b6630,0x3b0b7658,0x3b77c978,0x3beefafa,0x3befbd65,0x3c2a9c33,0x3b9f395b,0x3b4d7f16,0xba4c3fb7,0x3bdce6b9,0x3c225809,0x3be33978,0x3bec29df,0x3b862ab9,0x37cafec0,0x3a4998c0,0x3b22c480,0x3bdc9f9a,0x3baaa82e, -0xbb04c9a4,0x3c0b515d,0x3c8131e3,0x3c8202d2,0x3c8dff1f,0x3c526aa6,0x3c2ab377,0x3c1c7a06,0xbb8a24d7,0xbc1a974d,0xbc25075d,0x3b224c93,0x3c2800b4,0x3c2f6145,0x3bfba840,0x3bd91bb1,0x3bf9932e,0x3bc2a88e,0x3b825768,0x3a070647,0x3a2d4c14,0x3b0e9e72,0x3bc9dc66,0x3bdf71d7,0x3c114307, -0x3c352a70,0x3b39403f,0x387b1bd3,0x3adb30f3,0x3c56692a,0x3c90862d,0x3c030738,0x3b9819e3,0xbb4c3bd6,0xbc7a1da7,0xbc373276,0x3c8c6092,0xbd089b09,0xbc51c40d,0xbbe33bdb,0xbc08e4eb,0xbc100949,0xbc43958c,0xbc9fdb11,0x3bab22d8,0x3c4072c4,0xbb847026,0x3ba033e8,0x3be81428,0x3c09de95, -0x3bf1cbf3,0x3bd732d1,0x3bd9955b,0x3c0b30c7,0x3c0bc2bb,0x3b88ed1d,0x3bbf0989,0x3bc45b3b,0x3bb4b55e,0x3c35f2c6,0x3c04f37d,0x3ba3d197,0x3b872431,0x3bd03f89,0x3c2e0112,0x3b9a3c3b,0x3a71c6ae,0xbb103a7f,0x3b8b1d44,0x3c057887,0xba1f087a,0x3ce0332c,0xbc0e66d4,0xbc0a2a64,0x3ae92c23, -0x3ba84749,0x3c2b1615,0x3adad172,0x3b72c792,0x3bfb7ccc,0x3c3e8d7f,0x3c453f70,0x3b8d714a,0x3c113dcf,0x3b83d428,0xbb316e26,0xbb2792fb,0xb9501a98,0x3b5cef47,0x3b686435,0x3b0cec8d,0xbae53dfc,0xbaa97d8d,0xbb2699ed,0xbb3d9641,0x3a35f00e,0x3a271db8,0x3b7fe83d,0x3b5ca6c4,0x3b048b41, -0x3b29f738,0x3aa1c2a9,0x3b58c295,0x3b6bab00,0x3b25adb4,0x3bb3c61d,0x3b13c8d8,0xbbdeeea0,0x3bef3c52,0x3beb02d9,0x3b66e6fe,0x3b5d0909,0x3c2e41cc,0x3bb34ef5,0x3a52268c,0xbb6e7f32,0xbbd232dc,0xbc023ed0,0xbc6c0289,0xbb8c2b9c,0x3aa2c579,0x3b1aaf25,0x3b11c16f,0x3b783672,0x3bc26e59, -0x3baae337,0x3b910d21,0x3b327bd7,0x3b4f3257,0x3b43ce7b,0x3b306490,0x3bc34faf,0x3b967fe2,0x3b344756,0x3af684e8,0x3aabccfa,0x3b19179d,0x3a3d3a1f,0xba4d1f7b,0xbb21ab8c,0xba8c5d8f,0x3a32ff8f,0x39aac639,0x3bcebf79,0xbc4e7c6a,0xbc032384,0xbb52101a,0xbafe3de2,0xbb900393,0xbbc797f6, -0xbb9e7584,0xbaa9cc07,0xbbd09de9,0xbbf10093,0xbbaad49c,0xbb3538ac,0xba5a34c9,0x3a6d2eb3,0x3b90e380,0x3bcd157c,0x3c041593,0x3b70eecd,0x3b0a7473,0x3b1e322c,0x3b9dbfd3,0x3b899146,0x3a6cd551,0x3b3fd774,0x3b36bd0b,0x3b87fa5a,0xbaadfcd6,0xbb8b7ea1,0xbb77814d,0xbb7c3a86,0xbbafd0e7, -0xbc1e3074,0xbc688773,0xbca299ef,0xbcddcf1a,0xbc9bafb6,0xbcba8aa0,0xbcae295e,0xbc8fa362,0xbc758fb1,0xbc3b3ad7,0xbc4270c4,0xbc63e872,0xbc84f76c,0xbc029b75,0xbb5712be,0xbb4bf44f,0xbb4c424b,0xbb16cff6,0xba244e84,0x3b042680,0x3b652ab6,0x3bd28caa,0x3bb32ec0,0x3bb056cc,0x3b8f909b, -0x3ba29360,0x3b90cff2,0x3ae5396d,0x3afcbe40,0x3aee1d59,0x3b7a6d78,0x39874c7f,0xbb1cd27e,0xbbc00332,0xbc1d1a05,0xbc3a831b,0xbc4182b9,0xbc053895,0xbbf4cba2,0xbc067bca,0xbc895092,0xbc743a1a,0xbc99ae2e,0xbc88ca36,0xbc65f7bb,0xbc348d8a,0xbbe4d341,0xbaf902a3,0x3b12f303,0x39d8f9e6, -0xbad0149f,0xbb257b24,0xbab4ffe5,0xb9fde8a2,0x3965716f,0x3b01ae8d,0x3b68dd8e,0x3bb0c575,0x3b2ef0c1,0x3a3ec325,0xbb1aff55,0xbb2c6d36,0xbaf0b80a,0xba978da6,0x3a393ac3,0x3b0b979d,0x3b87167e,0x3b809bed,0x3b61be69,0x3b9d58db,0x3ab12cef,0xba3f02ce,0xbb88a3cc,0xbbe468d0,0xbc1f72b9, -0xbc425ce7,0xbc6af254,0xbb6d7268,0xbbb9f7f1,0xbbd811c1,0xbc004b73,0xbc1923ce,0xbc2fa3f8,0xbc4ed645,0xbc5d8087,0xbc4e2965,0xbc349bb9,0xbc263af3,0xbc1b5323,0xbc1456e3,0xbc1275d9,0xbc0b1bb3,0xbc0503b6,0xbbeec095,0xbbd78d95,0xbbb051b2,0xbb9363c4,0xbbaa0d22,0xbb4623b7,0xbb13287e, -0xbadb59dd,0xba6b09f5,0x3a562cf6,0x39a436bc,0xb8fa9692,0xba02b3ac,0xba02417e,0xb988210f,0x39cb869e,0xba3d296b,0xbaacb5ed,0xbad9f874,0xbb471fa7,0xbbdd111f,0xbbc0ba69,0xbbce15cb,0xbbd8ec26,0xbbde3f4b,0xbbe5397f,0xbbe8dc6c,0xbbfd99c1,0xbbed44b4,0xbbec7343,0xbbe77d9d,0xbbe2a71e, -0xbbda9bb6,0xbbcfd7e4,0xbbca99a2,0xbbc74da8,0xbbc7ebe0,0xbbbfe3dd,0xbbbec7b3,0xbbab1b61,0xbbd394a0,0xbbe5237d,0xbc06a154,0xbba2c117,0xbbc32dc1,0xbbe4fc35,0xbbe2ab7c,0xbbd8197e,0xbbd61d48,0xbbce98d8,0xbbd0fd61,0xbbcffc1c,0xbbc91a1f,0xbbb5d806,0xbbf98b7a,0xbbe5143e,0xbbd80054, -0x3b442f0c,0x3b398e8f,0x3b2e3ad9,0x3b41fe5d,0x3b30bebc,0x3aef9795,0x3b12dc7b,0x3b1b6171,0x3b3402f5,0x3b22754b,0x3b278d38,0x3b568958,0x3b23420b,0x3b227786,0x3b325ffd,0x3b3c9169,0x3b3e8293,0x3b3ff8bb,0x3b2e8206,0x3b2ac276,0x3b1f6a16,0x3b3bf3e1,0x3b46c386,0x3b72552a,0x3b293a11, -0x3b44ac76,0x3b5811bd,0x3b8b8d40,0x3b8ec756,0x3b72e361,0x3b78442f,0x3b67ed77,0x3b467b94,0x3b46ab05,0x3b33b1b0,0x3b50d7c7,0x3b3c652f,0x3b1b108f,0x3af9c062,0x3b2556ac,0x3b0dc457,0x3922c3d8,0x3a370cc9,0x3a9cad2b,0x3b3dbb78,0x3b2b4d73,0x3b4d88cc,0x3b9e0db8,0x3b1668c6,0x3aed3aa7, -0x3b1d7fde,0x3b3f4126,0x3b552021,0x3b547c35,0x3b273aba,0x3b183a22,0x3b17243b,0x3b61f30b,0x3b5f5d58,0x3b837f45,0x3b342a6b,0x3b3d5e34,0x3b5549ef,0x3bb79e93,0x3bc8180f,0x3b8a45f7,0x3b8cb27e,0x3b685af6,0x3b0c4266,0x3b32facc,0x3b3ce516,0x3b4724bd,0x3b228930,0x3b27a8da,0x3b3c19c9, -0x3b8e1dae,0x3b26f5f3,0xbb0af75d,0xb98a0d70,0x3a057e90,0x3b5a1b7b,0x3b061ac1,0x3b1d57da,0x3bd6d5ee,0x3ac996b0,0x3ad4ea9c,0x3b2ecabb,0x3b757d12,0x3b7f9b96,0x3b77b21e,0x3b22e3ca,0x3aec2242,0x3af33d53,0x3b509beb,0x3b6fcb49,0x3ba27779,0x3b270ecd,0x3b5a0700,0x3b5a0080,0x3c0b7e66, -0x3c14af16,0x3bb3cd08,0x3bca80d2,0x3b9c4d11,0x3b29e44a,0x3b4beaa5,0x3b2055ac,0x3b267e3a,0x3b0256a4,0x3a25ca6d,0x3a0cde5a,0x3ad38d8e,0x38ad3568,0xbbe2edae,0xbbbdc075,0xbb6d93e5,0x3b51f182,0x3b3f4a3b,0x3bbb87d4,0x3c3d2338,0x3b1b4858,0xba16a657,0x38bea46c,0x3b185153,0x3b747b6a, -0x3b59235f,0x3aa8925b,0x39c18e20,0x3a5adddf,0x3b8536c4,0x3bb14993,0x3c1b5c3c,0x3b995977,0x3b3a2de9,0x393fb730,0x3bfed247,0x3c2ba155,0x3bb50051,0x3bc9b6a0,0x3b8045e2,0x39d4f649,0x3aee92dd,0x3b2abbb8,0x3b9e375c,0x3b465454,0x3af8e36e,0x3c2bd695,0x3c43caa0,0x3c26318d,0x3c4bfb4f, -0x3c605e07,0x3c4fdb47,0x3c0a8b1e,0xbb546e17,0xbc1bbc69,0xbc2f3165,0xbb6c712d,0x3bb54d7e,0x3c7bc737,0x3c20a67f,0x3bfcf8fc,0x3c024e83,0x3bd7058f,0x3bb3bf6c,0x3b18f0cd,0x3a9f3f9b,0x3b0df7a1,0x3ba09242,0x3baa0230,0x3bee87e6,0x3c387d01,0x3b34b681,0x39f717e2,0x3b9ac90f,0x3c748e40, -0x3c882915,0x3ba26370,0x3b850433,0xbb190315,0xbc646eb7,0xbbe3d28b,0x3c1af873,0xbd099ec1,0xbbe45673,0xba68f7a8,0xbbccea1d,0xbbfda4cd,0xbc146297,0xbc49a500,0x3beae449,0x3c4da66a,0xba7efd07,0x3b852a19,0x3bc12d5c,0x3c085368,0x3c0a439e,0x3c04348c,0x3c0a7cd3,0x3bea8fa1,0x3bd1395e, -0x3b86f7b6,0x3b9895da,0x3b917082,0x3b84b553,0x3c2c430c,0x3c0f64af,0x3ba4d7a7,0x3bb7f1c4,0x3bfd016b,0x3c2aa64a,0x3b553a4e,0x3a9ec208,0x3accfe8f,0x3bbbd33d,0x3c010b71,0xba4ff3c0,0x3cac7175,0xbc03229b,0xbbfa470c,0x3bc9c8c0,0x3c17e3e3,0x3c3b6a44,0x3b23d439,0x3ac2e70a,0x3af96c15, -0x3c0d1527,0x3c38c827,0x3bb7305e,0x3c079342,0x3b7198f5,0xbb150805,0xbb91d8b6,0xbb0803d9,0x3bb4631b,0x3ae28b64,0xb9e9293b,0xbb38b060,0xbb179abd,0xbb4feab3,0xbb80acb7,0xbaca72b4,0x39b93339,0x3b949c97,0x3b5ea9b7,0x3b133bee,0x3b3e3ce8,0x3b2bc23f,0x3b7434b8,0x3ad42772,0x3ba45044, -0x3bee6e00,0x3ac95bf6,0xbbbf7e28,0x3c08d056,0x3c1c106f,0x3bc2532f,0x3badc81b,0x3c028a0b,0x3b9f0a71,0x3b0ecd21,0xba6381c3,0xbb4b35e2,0xbb9f999a,0xbc29143e,0xbb9c4b98,0xba830eb2,0x3ac0115b,0xb9003b13,0x3ada2790,0x3bc3e01e,0x3ba00a30,0x3b979acd,0x3b4a06fa,0x3ace96e8,0x3a98ae6f, -0x3ac4278e,0x3b8bcfb5,0x3b6aafa0,0x3b126091,0x3b196f73,0x3aee267f,0x3ae60215,0x3a1b6469,0xb9e85e66,0xbb584496,0xba8dea5d,0x39dadd89,0xba0bc3d9,0x3bb6badd,0xbc55d6e5,0xbc16b7d3,0xbbbd1c6f,0xbb558983,0xbb03fbd8,0xbb3826ca,0xbb2cb29f,0xbab002c6,0xbc182367,0xbc1de5d7,0xbb8e0ead, -0xbb719629,0xbb028ed2,0xb954c7d8,0x3b6f0616,0x3b9ef83d,0x3ba7702d,0x3a58dc09,0xb90963e1,0x3b0dff93,0x3b2923b9,0x3b09a379,0x392eda2a,0x3b16e97a,0x3af27719,0x3aeb0065,0xbabb321c,0xbb505bf0,0xbb0a4b60,0xbb25f300,0xbba5e239,0xbc233348,0xbc82edd6,0xbcafe358,0xbcd502d0,0xbc95017a, -0xbc88a445,0xbc7b6033,0xbc52be17,0xbc58421d,0xbc5ab7ed,0xbc92d650,0xbc97fbc0,0xbc6d629c,0xbc146a31,0xbbb74499,0xbbac0496,0xbb6015e4,0xbaedddb5,0xba6b3ac3,0x3b0f35fb,0x3b705410,0x3be6492c,0x3b86bb8c,0x3b72c990,0x3b9cad60,0x3ba6ed03,0x3b9736b0,0x3aff6099,0x3b0d8107,0x3aa6d7aa, -0x3b074f65,0xbb64d7f7,0xbbd3bfac,0xbc03e45c,0xbc3385db,0xbc4c5121,0xbc53506e,0xbc26cf76,0xbc028706,0xbbb0273b,0xbc480303,0xbc98111c,0xbcabe9ca,0xbc940648,0xbc7979eb,0xbc3ba742,0xbbdb39fc,0xbafe9679,0x3af64b22,0x3a14afd4,0xb98606ee,0xba5ca75e,0x3a792d2b,0x3b1201a7,0x3b64c072, -0x3ba6a4e1,0x3bd3cc17,0x3c088f83,0x3bc080dc,0x3b91f030,0x3ae54f5c,0xb7399854,0xb92c7898,0xba3752cd,0x3a56477d,0x3b04abbe,0x3b81c1de,0x3b4bbd92,0x3ad75712,0x3ae73ebd,0xba9c6ec6,0xbb3cae63,0xbbb99d4b,0xbc161aad,0xbc565d69,0xbc85348a,0xbc931032,0xbba7a721,0xbbdd2910,0xbbdfb356, -0xbbeca214,0xbc024a8c,0xbc0c6b3c,0xbc191528,0xbc16624c,0xbc04ae3e,0xbbdb5bd6,0xbbbad850,0xbba30ac8,0xbb8e437f,0xbb76b816,0xbb8599e2,0xbb8c5ae2,0xbb895b0b,0xbb83fb55,0xbb6b7db5,0xbb570c63,0xbb66092f,0xbac4d49f,0xba2d1caf,0xb8cd5fd7,0x3a306771,0x3b124948,0x3a904c3c,0x39b231a9, -0xb9e8603f,0xba660739,0xba91e61f,0xba838974,0xbb02843b,0xbb1da376,0xbb3907c0,0xbb805441,0xbb8cc610,0xbb722c63,0xbb74bedb,0xbb74e071,0xbb6a918b,0xbb641c31,0xbb5c9160,0xbb6d06a4,0xbb54b1b0,0xbb4bc7c6,0xbb3ccf03,0xbb2d7898,0xbb1c982e,0xbb0156cb,0xbb07c1af,0xbb0a15d5,0xbb1522dc, -0xbb139977,0xbb1bc973,0xbb0db01d,0xbb4ae7f7,0xbb6aa87a,0xbb9b5f63,0xbae10646,0xbb28d287,0xbb5dddcf,0xbb6814b5,0xbb60cda9,0xbb6a37f6,0xbb6d998d,0xbb8145bb,0xbb8bbd8a,0xbb7a2e73,0xbb53abcb,0xbbb179b2,0xbb99caa6,0xbaf475bb,0x3b141a23,0x3b2140c8,0x3b1b9cf6,0x3b100dad,0x3aefdb54, -0x3a8f2dc8,0x3abd82dc,0x3ad3eb55,0x3b0ab15c,0x3af52656,0x3afdb291,0x3b302c96,0x3ac8126c,0x3ab5bed8,0x3ac8139d,0x3afc0b56,0x3b097a0c,0x3b169edf,0x3b08a0e7,0x3b068690,0x3af52438,0x3b177341,0x3b1d4b62,0x3b3c9a65,0x3b000920,0x3b289139,0x3b48c39f,0x3b7cb208,0x3b80f3d0,0x3b593a99, -0x3b5afe10,0x3b4c8d46,0x3b300490,0x3b301c4a,0x3b1977d4,0x3b30c3e6,0x3b22c4e8,0x3aebc573,0x3aff4aa8,0x3adb174e,0x3a8d077d,0xba30bfea,0xb9df00eb,0x39896939,0x3b114975,0x3b0b8642,0x3b20613f,0x3b87dd6f,0x3a22ee04,0xb9bc9927,0x3950b54f,0x3a92543c,0x3b03561b,0x3b2ae1cc,0x3b0f691b, -0x3b02d981,0x3ae59ea9,0x3b298020,0x3b1dd3dc,0x3b234a7a,0x3b0615f6,0x3b2726f1,0x3b597245,0x3babe072,0x3bb76c91,0x3b7db10d,0x3b76e992,0x3b4d29cc,0x3b03c748,0x3b33d6aa,0x3b3e53a7,0x3b25e0c3,0x3b0677ff,0x3b3abd2a,0x3b7faf2a,0x3b5b263d,0x3a636033,0xbb3b9cdf,0xbae1a312,0xba2bda1c, -0x3b36aa8c,0x3aedfdce,0x3af92cdc,0x3bbe73b3,0xba82e4f5,0xbad67412,0xba2da2a4,0x3ab8546b,0x3b1cc1b7,0x3b592aae,0x3b1744c2,0x3aebde58,0x3ac43b3f,0x3b23728c,0x3b2c37f8,0x3b2ef1e8,0x3af0a74e,0x3b597ec8,0x3b8c219f,0x3c0dcb71,0x3c16c03d,0x3bbda199,0x3bc76c9d,0x3b9d2d65,0x3b3ae292, -0x3b73ef83,0x3b3a18cb,0x3b0ee671,0x3b161a40,0xb93933d8,0x3ad541bc,0x3aaefd26,0xba71bf0b,0xbbee7afd,0xbc02309e,0xbbaa84cc,0x3b31475f,0x3b4407a2,0x3b96b54f,0x3c2cc3a4,0xba838ae0,0xbbbb7473,0xbba5ee3e,0xbb02ffa7,0x3abed7a4,0x3b46d53d,0x3aced6e4,0x3a127e6d,0xb862e417,0x3b0eea5b, -0x3b675dbd,0x3bde0c0e,0x3b875c12,0x3b458a94,0x3b01732a,0x3c11abc9,0x3c34f72f,0x3bac4d58,0x3bb85243,0x3b891973,0x3a9e5e77,0x3b46d8c9,0x3b64b400,0x3b7807c5,0x3b0e966d,0x3bdaef48,0x3c3d2a11,0x3bf2a4ac,0x3b9ccd6e,0x3c02d311,0x3c781d9d,0x3c765713,0x3bc25c18,0xba63e439,0xbbfdfc81, -0xbc31dc64,0xbc0aaf0b,0x3a916718,0x3c8fb9e9,0x3c33555d,0x3c0abf9c,0x3c04c5ba,0x3be1deef,0x3bd192fe,0x3b92f824,0x3b584442,0x3b5e9762,0x3b8e1b50,0x3b8351af,0x3bbb084c,0x3c2bf26a,0x3b30432e,0x3ac21bfb,0x3c03abb8,0x3c8040d5,0x3c70215f,0x3b7a68ef,0x3b5c349e,0xbb10c55b,0xbc3c172e, -0xba8d05f7,0xbb4efcc3,0xbcf269e7,0xbab5f051,0x3b8e594e,0xbbb71700,0xbbb5a95d,0xbbbc37ca,0xbc05634e,0x3be745cb,0x3c3ea36f,0x3b155bd2,0x3b3545a0,0x3b8a5142,0x3c0df516,0x3c1b6835,0x3c24c9bb,0x3c26da74,0x3bc8f297,0x3b91f11b,0x3b777bd8,0x3b46f710,0x3b411ed1,0x3b58cd20,0x3c1457e2, -0x3c0ca41a,0x3b9ece3c,0x3bebd660,0x3c152875,0x3c209784,0x3b181d52,0x3af76c87,0x3ba681b1,0x3bc3dddd,0x3bdc062e,0x3b39668e,0x3c0ff569,0xbb5a4e43,0xbb388f15,0x3c1aa16a,0x3c3a6c70,0x3c2c8d87,0x3acf4f81,0xbb1cb340,0xbb552f1d,0x3b081901,0x3bd2551c,0x3beaba74,0x3bdf5252,0x3b7c4060, -0x3783cd69,0xbb83280d,0xbb3c2e0f,0x3bbc749d,0x39753e30,0xbb0c3e0d,0xbb450134,0xbb3e0a44,0xbb3f6d9c,0xbb4fb784,0xbb32b12b,0x3a02da45,0x3baa9504,0x3b5ec81c,0x3b1f023d,0x3b438fb2,0x3b51018e,0x3b6238f2,0x39b34dd1,0x3bd7dabc,0x3c090df1,0x3b3498aa,0xbad8613c,0x3bcab06b,0x3c0b4dac, -0x3bdf9f42,0x3bd94bd3,0x3bcf37ec,0x3bcd1533,0x3bc993d2,0x3b95e4ae,0x39e86a30,0xbafedf67,0xbb9e0010,0xbb96465a,0xbb3e4acd,0xba8b6a94,0xba96b3cf,0x3a4b85b0,0x3bac09e9,0x3b9a5d0c,0x3b9de486,0x3b5f17a6,0x3a37cf31,0xb95c0919,0x3a7cd907,0x3b1b3304,0x3b161ef6,0x3b043e3d,0x3b510d3f, -0x3b36eb29,0x3ac3ac81,0x3ac23d5c,0x3a343703,0xbb5f0903,0xbb05bd0d,0xba974d1c,0xbb320383,0x3b378181,0xbc5c0b9e,0xbc035b99,0xbbecb65d,0xbb88540a,0x3a8a678f,0xb94bb1dd,0xbb1141d0,0xbb8d66f6,0xbc35ab49,0xbc2bd08b,0xbb8ed95b,0xbb83f226,0xbaadc2cd,0x3944f71c,0x3b440cb4,0x3b5f02df, -0x3b1b68f2,0xb8eb9ed6,0xba0a86e3,0x3b0126fe,0x3a6db695,0x3a2dcd2f,0x39b69a44,0x3ae09fff,0x3a409a62,0xba611378,0xbac1f985,0xbb077eac,0xbab6b5ea,0xbb190e6c,0xbbb9ebb8,0xbc2c0fa9,0xbc88191a,0xbcabe2e0,0xbcb34d47,0xbc8d5158,0xbc427547,0xbc3c80cb,0xbc2c3a27,0xbc4c6a4e,0xbc794f91, -0xbc8d21f4,0xbc8266a8,0xbc3beb8a,0xbc15ec12,0xbbdcb80e,0xbb978be9,0xbb5d3fac,0xbb05408d,0xba896e26,0x3af77299,0x3b68407f,0x3b8f92a9,0x3b1718c7,0x3b0f9f03,0x3b8c6f37,0x3b8e32a2,0x3b82ab51,0x3b15ecb9,0x3b22898f,0x3a78daba,0xb9babd00,0xbbd28305,0xbc17f071,0xbc1ca2b7,0xbc3c8356, -0xbc50e8c0,0xbc5d42ad,0xbc475fd4,0xbc183c3b,0xbba0448e,0xbc145fec,0xbc927695,0xbc9a1082,0xbc881080,0xbc770a49,0xbc52272e,0xbc1317bc,0xbbb8c6a8,0xbb2244ce,0xbb153f9b,0xbad822ef,0xba96a5e2,0x3ac7913a,0x3b6f023f,0x3bb48291,0x3bc06507,0x3bd15de0,0x3bef7971,0x3bcaea62,0x3bb3715d, -0x3b8ed1b0,0x3b2f44b6,0x3adc2bd7,0x3a12d458,0x3a861aa9,0x3ae33070,0x3b3eb80b,0x3af761bb,0xba36aea3,0xbaa320e5,0xbb56646c,0xbb74466f,0xbbadddaf,0xbc0eb9ee,0xbc4fdc34,0xbc8250c9,0xbc8b7f5e,0xbbd79ace,0xbc058ad5,0xbbf6c6c6,0xbbe50662,0xbbd81969,0xbbcf0250,0xbbc23c86,0xbba348c1, -0xbb837b22,0xbb3cbc06,0xbb034958,0xbaaf0858,0xba3d0160,0x398d6768,0xb9b95eff,0xba4c55f8,0xba960b8c,0xbaa7f42b,0xba9f2b7e,0xbab5db46,0xbb1534c9,0xba37f494,0xb8ec81e1,0x39bf231e,0x3a39f548,0x3acbdb07,0x393f8767,0xba0cc2c9,0xbaa11ec3,0xbb0383a3,0xbb28a6e6,0xbb2fb4a6,0xbb698fe8, -0xbb7a3445,0xbb9171b9,0xbbb25796,0xbb24e598,0xbb3fd305,0xbb213059,0xbb11afdc,0xbaf92215,0xbacf9861,0xbaac675a,0xba9f9cb0,0xba6f5c95,0xba2b958b,0xb9aa5d22,0x3620c7ef,0x399acdf4,0x3a38fef3,0x3a08a346,0x3a041248,0x39cb30ff,0x39967e44,0x38bef0b3,0x394c2b5c,0xb9e74e91,0xba2a3bf9, -0xbaa896eb,0x395d3f20,0xb8e6792a,0x37af0bf9,0xb9769d64,0xb9a2ae86,0xba2c7e35,0xba618cb2,0xbaae0202,0xbaf09cc7,0xbaf7ce06,0xbafd83b8,0xbb377f3a,0xbb2d9d74,0x39f7f70b,0x3ac08368,0x3b04cf59,0x3b0984bb,0x3ac1fecd,0x3a83fdec,0x39ac7e50,0x3a20fdfb,0x3a5445df,0x3ab74ba0,0x3a92f9be, -0x3a949bdf,0x3aefeb64,0x39f5e78c,0x395b19f7,0x394a1c8c,0x3a532d2b,0x3a975a0f,0x3ad270c3,0x3ac73153,0x3ac93f52,0x3aac370a,0x3ad534bc,0x3ad30479,0x3aedde82,0x3a9b3a70,0x3af4c311,0x3b2cb4cd,0x3b52757b,0x3b56d2df,0x3b3288a8,0x3b31577a,0x3b256aef,0x3b09585d,0x3b0adc1d,0x3aeff02e, -0x3b073384,0x3b025a6d,0x3ab9fd81,0x3b093e63,0x3a862da6,0x3914bc3d,0xbabd07c8,0xbab6c7e7,0xba3412ef,0x3aa9b215,0x3aac67ae,0x3ac1a7c2,0x3b40f47e,0xba7a5d31,0xbb193cf4,0xbb09f9a9,0xba758d83,0x39ebb6bf,0x3af1b5e9,0x3afb851b,0x3af7dd56,0x3aaf84d7,0x3aeef5d8,0x3ab54acd,0x3a61cefd, -0x3a9388dc,0x3b015aaa,0x3b573b9b,0x3b9aa278,0x3ba31f99,0x3b65c693,0x3b591e2d,0x3b31c651,0x3adae436,0x3b326f58,0x3b40e4c9,0x3b07d4a0,0x3aeaa37b,0x3b6ef429,0x3bab4d6a,0x3b30d582,0xb9c03615,0xbb65a3f9,0xbb454206,0xbafc7cce,0x3af8fdee,0x3a683757,0x3a3aded7,0x3b84e43e,0xbb651ae8, -0xbba1287d,0xbb938759,0xbad94041,0x39ad66d3,0x3b30c4e6,0x3b20a4bd,0x3b193e0c,0x3ac1f97d,0x3b07f194,0x3adb48fc,0x39b6ae9b,0x3a65976a,0x3b4135e1,0x3ba42a8e,0x3c0b5d45,0x3c146777,0x3bc5c3be,0x3bc4a3a2,0x3b9fbaac,0x3b36bcc7,0x3b8af1c6,0x3b5b0af1,0x3b0e0f1a,0x3b437f3a,0xb8e8df2d, -0x3b68b53e,0x3ab0e6c0,0xbae8748f,0xbbede795,0xbc1889c7,0xbbd5c1b6,0x3ac2aada,0x3b01ee2e,0x3b3c067b,0x3c07b91d,0xbb779eb1,0xbc252c30,0xbc29ad35,0xbbe56ed5,0xbaeafdb6,0x3b212841,0x3b1cd444,0x3af2d93e,0x398a55f5,0x3abdf8c0,0x3af39e90,0x3b4e0090,0x3b4935f3,0x3b582247,0x3b847c9c, -0x3c262460,0x3c40f84d,0x3bc34404,0x3bbb30ef,0x3b9ada14,0x3aef9d9e,0x3b9aea39,0x3baecf4f,0x3b670bc5,0x3b0b18b0,0x3c4430f9,0x3c600ebc,0x3b99b7a4,0x3aa4f4e1,0x3b852744,0x3c7b9a95,0x3c7b65c3,0x3b1835fa,0x3a39868c,0xbbdbc3cf,0xbc554e4c,0xbc542a10,0xbb5ac271,0x3c86ba79,0x3c369444, -0x3c137da9,0x3c060167,0x3bdc1ab5,0x3bd326be,0x3bc4bc21,0x3bb7ae13,0x3bac7d14,0x3ba07662,0x3b65d68e,0x3b8ce83a,0x3c15cee8,0x3b20a986,0x3b35c9f4,0x3c3a346b,0x3c78e8b5,0x3c45b089,0x3b7cf59b,0x3ae05dd4,0xbb644a0c,0xbc0c94c2,0x3b989268,0xbc8cdaf2,0xbccb9adb,0x3ad7da0f,0x3bf21703, -0xbba1cc79,0xbb1854e4,0xbb27a352,0xbbb5e382,0x3b96903f,0x3c0d4b2b,0x3bbc6254,0x3b22a3fb,0x3b2e80c7,0x3be77dff,0x3c1a5410,0x3c315f4b,0x3c2fad47,0x3bac2c55,0x3b42e9ba,0x3b64fd2b,0x3adddad4,0x3ae5e11e,0x3b3c43d8,0x3be0434b,0x3bf3c565,0x3b91c165,0x3c0d7340,0x3c2aba29,0x3c1301fb, -0x3b1dbac6,0x3b3e1c46,0x3bf4f334,0x3babfd30,0x3bcc9e3d,0x3c173a2e,0xbba572dd,0x3b854363,0x3b9c1232,0x3c5f7918,0x3c55b570,0x3c20d1ea,0x3a3f3040,0xbbbcb583,0xbbbc2cce,0xbbaf02fe,0xba1dee77,0x3bdc423e,0x3b8bd019,0x3b6ec1f1,0x39f509b3,0xbac28dd8,0xbabb6dbb,0x3b8b5668,0xba987ee9, -0xbb4d6c37,0xbb1d36c2,0xbb3a8395,0xbb0d3e7f,0xbac9e721,0xbb372274,0x3a68cd2a,0x3bb5ee63,0x3b5ef41b,0x3b285f86,0x3b3616de,0x3b6e2cc4,0x3b4bf3f5,0xb9eabc59,0x3bd69734,0x3c06ea28,0x3b96bd2d,0x3b8d8a8c,0x3b069a70,0x3ba8977f,0x3bae4796,0x3bcbcad6,0x3bcf4e25,0x3c0c75b3,0x3c2a6c5e, -0x3c423668,0x3b7e3b5f,0x39687e15,0x3a83c17e,0xbb868d50,0xbb86f33a,0xbb3761c6,0xba6f8620,0x3aa34658,0x3bb2638b,0x3bb4145b,0x3bb1b4b7,0x3b7585e9,0x39739b2f,0xba5bf922,0x3a6b18dd,0x3a2fcd19,0x3a66ada8,0x3acd5c05,0x3b7c5831,0x3b82c8a5,0x3ae2ea4d,0x3b2e66fb,0x3ad89fcf,0xbb5d078e, -0xbb42c571,0xbb1da986,0xbb91d855,0xba637040,0xbc4dc05b,0xbbd1faf3,0xbbc60145,0xbb446edc,0x3b2e54f5,0x39e31f92,0xbb70a139,0xbc107ad8,0xbc37f7aa,0xbc1cb608,0xbb83cf2f,0xbb6a7ad0,0xba964f71,0x3a5ea7b7,0x3afe9063,0x3acb18c5,0x397a040a,0xba51a38f,0xba242371,0x3ae5028a,0x398e1402, -0x38118343,0x398cf6af,0x3a8fc608,0xb82fcbd8,0xbb44dbee,0xbadaa2ed,0xbae13a5d,0xbae5903d,0xbb3bb422,0xbbcfc7c2,0xbc2b922c,0xbc7d2700,0xbc95faee,0xbc861f3a,0xbc79d8d6,0xbc1624ee,0xbc14de02,0xbc107f85,0xbc356503,0xbc6d7a9e,0xbc522393,0xbc2d7a63,0xbc13204c,0xbbca9c88,0xbba46105, -0xbb8eb828,0xbb5e643a,0xbb0c2016,0xb963ec90,0x3b0579a0,0x3b4259cf,0x3a9d57da,0x3a65706c,0x3aa6c27a,0x3b5eba14,0x3b6d6536,0x3b628f43,0x3b26d0db,0x3b249ef9,0x39cdbd37,0xbb3ff5e0,0xbc06957a,0xbc2adeeb,0xbc23bbc6,0xbc3c00dc,0xbc5316f9,0xbc69aa32,0xbc69fed5,0xbc42715e,0xbbf7cbb6, -0xbc07759e,0xbc68a261,0xbc6d973a,0xbc5d01be,0xbc5a311f,0xbc5310bd,0xbc2edb2f,0xbc143355,0xbbea1a38,0xbbc0bfbe,0xbb88a51e,0xbb2177da,0x3a68087e,0x3b75b2fa,0x3bd4f3cc,0x3ba8ac1d,0x3b9465cd,0x3b88ad65,0x3b8cc3f0,0x3b863353,0x3b87ed2d,0x3b69d5d4,0x3b408eed,0x3b24956b,0x3ab2a8eb, -0x3a918c41,0x3a6999b7,0xb96e70f0,0xbb705718,0xbb9e7575,0xbbb328fc,0xbb8ee4c5,0xbb8d3cc9,0xbbe0863e,0xbc1eeb90,0xbc450a37,0xbc56477d,0xbc0c80a0,0xbc257060,0xbc0f8836,0xbbf3f226,0xbbc57fd5,0xbb9ff8b1,0xbb64fb32,0xbaf535a9,0xba6d25d6,0x389f0e92,0x3a6528a4,0x3acb6ca2,0x3b0de5a9, -0x3b6299ef,0x3b44b550,0x3b3b0ce6,0x3b228455,0x3b163cf8,0x3b16e69a,0x3b06ec52,0x391b6e50,0x3a06ca67,0x39a3377b,0x3942d507,0xb98c1583,0xba0aa0af,0xbae9f023,0xbb197cda,0xbb3a8b7c,0xbb78f512,0xbb9bbc14,0xbba3a547,0xbbc22889,0xbbc9a88c,0xbbe1a3d1,0xbc012804,0xbb2e4d30,0xbb734818, -0xbb3a43ba,0xbb2030fd,0xbb03e623,0xbacc23ba,0xba9bba13,0xba5e1de4,0xba0938c3,0xb8fe31ea,0x39aa3d63,0x3a4be5e1,0x3a99898c,0x3ad3de4e,0x3ab8d926,0x3ab620ec,0x3ab1aa47,0x3aa33d49,0x3a8918c2,0x3a9f57d3,0x3a31d1d9,0x3a17cff2,0x39ae8f8b,0x39956a16,0x398cd537,0x3a70439b,0x3a38a342, -0x3a0e8a31,0x390f7627,0xb8f78573,0xba123a86,0xba8c7a51,0xbaec02af,0xbb1cef8b,0xbaf9cde8,0xbb210fa6,0x3942d1c3,0x3a2d1202,0x3acdb229,0x3ae56169,0x3a4e25b3,0x396733ce,0xb9ba3c6c,0xb96d3bef,0xb7b2360b,0x3a40ac57,0x39b03e8a,0x3996b38b,0x3a5da785,0xb9f24336,0xba52dda3,0xba8502b3, -0xb9a46b45,0x392cfb89,0x3a5f057b,0x3a72f017,0x3a838a85,0x3a39e216,0x3a6d63c2,0x3a5fd371,0x3a5f596d,0x39da3191,0x3a940daa,0x3b0e70e9,0x3b26c9fb,0x3b2b59ee,0x3b0b6aa3,0x3b0b3a49,0x3b00da63,0x3abd16d1,0x3accaa3c,0x3aa5ca49,0x3ac6e1f4,0x3ac9288a,0x3ab534af,0x3b15a6e2,0x39f5ee9c, -0xba2b0dec,0xbb0067fa,0xbb157c93,0xbada0c0c,0x3a0809a2,0x399a9880,0x39b4e8d1,0x3ab8c77b,0xbb081da5,0xbb6e60d6,0xbb806701,0xbb352e80,0xba93329b,0x3a7498a1,0x3acd9ab4,0x3ae1ddfb,0x3a735db1,0x3a96451d,0x39b2ef64,0xba034746,0x393976fd,0x3aa5ed17,0x3b48baf4,0x3b83dd1c,0x3b8b0b5e, -0x3b4a5bd2,0x3b3c0b44,0x3b152eec,0x3a8e1df7,0x3b279c98,0x3b3a3a1c,0x3acd7839,0x3acb6806,0x3b960786,0x3bd8f071,0x3b09cc52,0xbab5067b,0xbb7a4910,0xbb89a5b3,0xbb564b5e,0x3ab5793e,0xb9943767,0xba2365bb,0x3ae14896,0xbba66ee3,0xbbe74661,0xbbf8c6fd,0xbb9809e8,0xbafaa2be,0x3ae4dcf2, -0x3b28ae35,0x3b3b0564,0x3ac40eaf,0x3ac5fdc8,0x3a1d24bf,0xbac3124b,0xb9428adb,0x3b16888d,0x3baaaab7,0x3c02927e,0x3c0b27cd,0x3bc50403,0x3bc03433,0x3ba12e4a,0x3b13dcdc,0x3b95514d,0x3b7b762d,0x3b113660,0x3b72c32a,0x3ab2b4a8,0x3bc9713d,0x3ab2e8c1,0xbb231872,0xbbd95243,0xbc24d74f, -0xbbfc58c3,0x3a63eceb,0x39be73a8,0x3a601f34,0x3ba48dac,0xbbaa4742,0xbc467416,0xbc6393da,0xbc369f1d,0xbba9add6,0x3aa89ce3,0x3b4da86d,0x3b57bb83,0x3a5d89bd,0x3a8c1dbb,0x390bae3b,0xb9abdd7b,0x3ad66d30,0x3b5ba658,0x3bbb48f9,0x3c377fe8,0x3c4d27ab,0x3bdd7ec8,0x3bc55343,0x3baad696, -0x3b09454c,0x3bcbbea3,0x3be7d364,0x3b5d86a1,0x3b2b30c4,0x3c8a915d,0x3c78e5be,0x3b58f7c7,0xba605099,0xb906d49d,0x3c5abddb,0x3c5ed010,0xbaaeaf7f,0x3ac100e4,0xbbcec693,0xbc832938,0xbc8374e1,0xbbedd023,0x3c3dee38,0x3c227ccf,0x3c11ea81,0x3bfd17a1,0x3bca3622,0x3bbc49de,0x3bced8fa, -0x3beceea8,0x3bdd8eeb,0x3bbe1a7f,0x3b613911,0x3b4ed470,0x3bfb8321,0x3af9dd04,0x3b819b31,0x3c717ebc,0x3c658379,0x3c17b832,0x3b81c59b,0xba184807,0xbb9f4456,0xbb981d71,0x3c230fc6,0xbcee78f2,0xbca5c696,0x3af0382b,0x3c032ae2,0xbb423339,0x3ac327e0,0xb9a52d57,0xbbece768,0xba16b156, -0x3b83b5ce,0x3c09fc04,0x3b27a698,0x3ac7801f,0x3b93b89a,0x3c0ace03,0x3c2dd186,0x3c21ab86,0x3b81f9dc,0x3acb3ba9,0x3b51259b,0x3a8fbee2,0x3a9559f1,0x3b24e619,0x3b90c617,0x3bba24c3,0x3b7db463,0x3c1b088f,0x3c35c966,0x3c009925,0x3b311824,0x3b70e14b,0x3c03f79d,0x3ba16342,0x3bea8942, -0x3c7a5a0e,0xbc89df25,0x3c4c217d,0x3c61d002,0x3c8f3cac,0x3c69e97e,0x3c1c1497,0x3af40276,0xbbb5739b,0xbbc1d0a9,0xbc2083af,0xbbbddafe,0x3bc2b3fc,0x3b069db2,0x3b661ce6,0x3b08edcb,0x39dac6ee,0xba36a6b8,0x3b252943,0xbae1c01f,0xbb55191a,0xbad97761,0xbb0b5485,0xbaa8061d,0xb90d07cd, -0xbb130e07,0x3ab0aaa5,0x3bb54332,0x3b5edf7f,0x3b2e056c,0x3b1dafac,0x3b8ae991,0x3b5aa1c5,0xba12f64a,0x3bcda1cf,0x3c0427ce,0x3be35f67,0x3c2fd022,0xbb22a77e,0xb8ea243b,0x3b2f033d,0x3babfbd4,0x3bc9c75f,0x3c32e061,0x3c64f781,0x3c8e5903,0x3bccd72c,0x3ab433ef,0x3bbee5b8,0xbb7f4eef, -0xbbb494d6,0xbb41b90d,0x39427657,0x3b0aa9a2,0x3bb0c78a,0x3bc1a478,0x3bb79d20,0x3b8327b7,0x39a9c51e,0xba4d45f3,0x3a658cf1,0xb9cbcc2d,0xb95167d0,0x3a2be6fc,0x3b7f922c,0x3b9d462e,0x3b132cff,0x3b5bde3a,0x3b0525e5,0xbb331695,0xbb3b73b2,0xbb105d0d,0xbba4ed4f,0xbb78c99b,0xbc25525c, -0xbbab23bd,0xbb7e8e9b,0xbab54d22,0x3b036835,0xb9f9fce5,0xbbb6a13e,0xbc4dd2c6,0xbc29b1ca,0xbbf9dfa7,0xbb386af5,0xbae9e236,0xb9e7c494,0x3a8e3b4e,0x3a2a6cfe,0x381854a2,0xba815a59,0xba89f6d0,0xb9eed4f6,0x3aa24026,0x392eaf7e,0xb849928d,0x38155e98,0x3a2c9959,0xb9a9f603,0xbb8d185a, -0xbb1273fb,0xbb1d014f,0xbb3b9047,0xbb65d36d,0xbbcda404,0xbc17d285,0xbc4d9154,0xbc6a570c,0xbc4547a5,0xbc452f00,0xbbee815d,0xbbe417a9,0xbbe5b989,0xbc099cca,0xbc221bd3,0xbc09916f,0xbbd1f3bc,0xbbbda07f,0xbb534020,0xbb5db488,0xbb8e5ec3,0xbb3e5917,0xbaaf12c9,0x3aa3cb73,0x3b03d365, -0x3ad9dbbc,0xb9fd3209,0x3936f507,0x3a4d88e0,0x3b26fd3b,0x3b3b1c30,0x3b3ec202,0x3b43be89,0x3af2ff70,0xba526bea,0xbba3e540,0xbc0ff340,0xbc296014,0xbc23d1ba,0xbc3b6b37,0xbc5b2b87,0xbc7d4a46,0xbc80e38a,0xbc65131f,0xbc34a8c5,0xbc05cf5f,0xbc2c8f73,0xbc2dea1f,0xbc2721a9,0xbc2f7d83, -0xbc36007f,0xbc29d26a,0xbc242d10,0xbc187193,0xbbfc3de8,0xbbb53bfb,0xbb633976,0xb9dc156b,0x3b193a0d,0x3bb4791c,0x3b6f398d,0x3b2bdefb,0x3ac88b7e,0x3b1771eb,0x3b2a9da0,0x3b53b8a0,0x3b61034e,0x3b6ec9c5,0x3b88646a,0x3aaf564c,0xb8a66bb4,0xbb104b50,0xbb521712,0xbbe0a9e7,0xbc093367, -0xbbfe98c4,0xbbb8411d,0xbb8f3e15,0xbbbd2b33,0xbbe67241,0xbc05c0ff,0xbc18134b,0xbc29f054,0xbc340a0a,0xbc17b9f2,0xbbfa8c3d,0xbbbf2ab3,0xbb8864ca,0xbb1657d5,0xb9f39ddd,0x39ba29c3,0x3a8936e2,0x3ae0e27c,0x3b1c5f7d,0x3b44673b,0x3b8c3fc4,0x3b8633e6,0x3b8d4185,0x3b89f368,0x3b87da1f, -0x3b85ca20,0x3b85fa28,0x3b256591,0x3aad9cdb,0x39ce58a4,0xb9fb5b69,0xbab3f927,0xbb241bb9,0xbb66d1ab,0xbb84ca4a,0xbb93a101,0xbbb8b2f4,0xbbe40a44,0xbbf64230,0xbc093323,0xbc0d077a,0xbc169f99,0xbc20f425,0xbb6e3d2d,0xbb91779b,0xbb6b7546,0xbb4c70a6,0xbb2d69f6,0xbb1091ec,0xbaf01866, -0xbab0495a,0xba8fbd7d,0xba3178f5,0xb984b5eb,0x393633b3,0x3a104b39,0x3a777325,0x3a52a7f9,0x3a4d2f1c,0x3a522219,0x3a467d99,0x3a32ab4a,0x3a579530,0x3a055aba,0x39bc0eb1,0x3994c4d2,0xba152965,0xba166d1c,0xb88ccdee,0xb9825459,0xb9f6646f,0xba670ee1,0xba97a18e,0xbac5f113,0xbb0207c5, -0xbb38be07,0xbb5d8c97,0xbb35766e,0xbb5eb35a,0xba6a2092,0xb8612ec8,0x3a8d78c3,0x3aa8dfe0,0x39171dc3,0xb9fa28be,0xba6ef97c,0xba793578,0xba423ddf,0x394f9a2a,0xb9a896d0,0xb9d6f906,0xb835ac80,0xba8d15cc,0xbabbd8f5,0xbaf0d69a,0xba9aefc4,0xba30041d,0x38d265e3,0x39bebdc7,0x3a009f0a, -0x391fbc51,0x39710228,0x391178e7,0x360df14b,0xb9848a1d,0x39d1e2b6,0x3acd2361,0x3ae866a9,0x3af3e5d9,0x3abd16d1,0x3ac74d22,0x3ab40501,0x3a364fd2,0x3a83cf0b,0x3a3566cc,0x3a5c1715,0x3a8689df,0x3abc475d,0x3b0b0b31,0xb945e968,0xbab74313,0xbb1cc44f,0xbb45eb8f,0xbb1e9149,0x3866c1de, -0xba0c2783,0xba05f386,0x39236ca9,0xbb1c4e10,0xbb80b102,0xbb9de8c2,0xbb800a1f,0xbb19e36f,0xb8a6e897,0x3a960ee9,0x3abe0f5f,0x3a03025b,0x39d4c96f,0xba27f6f3,0xbababb15,0xba3e4731,0x39fb08a6,0x3b30970c,0x3b5184f6,0x3b6045ae,0x3b2b4ab3,0x3b1f960e,0x3af5b4d5,0x39d657b1,0x3b16dac6, -0x3b25d27c,0x3a552ba9,0x3a9c94eb,0x3ba5a593,0x3beb1804,0x3a9e68d2,0xbb158890,0xbb801d96,0xbba9fdff,0xbb8c369b,0x3a9c8bed,0xba9b9ad0,0xbac254b7,0xb99361bb,0xbbad1e39,0xbbf2e2ac,0xbc14117b,0xbbd6ed0d,0xbb6f7584,0x39f53822,0x3b236e38,0x3b4aa457,0x3ab67777,0x3a3e2e00,0xba1286f1, -0xbb272116,0xbaa3e37c,0x3ab27e92,0x3ba15185,0x3be4276e,0x3bf55732,0x3bb806b1,0x3bbacb83,0x3ba05946,0x3ac3d528,0x3b94cd2a,0x3b7d603b,0x3addd798,0x3b78efa0,0x3b3f158c,0x3beb3990,0x3a2a9641,0xbb4c180d,0xbbc4f832,0xbc298280,0xbc07c797,0x3a8b4f47,0xba6e831b,0xba054709,0x3b21683d, -0xbb986633,0xbc3857a3,0xbc708a85,0xbc572352,0xbbfaaf9a,0xb9f40195,0x3b64bb1a,0x3b8c3ed3,0x3a998497,0x39bf1c5f,0xbadb45a3,0xbb3c5d65,0xb7534fbb,0x3b3f55c7,0x3bdbc1c9,0x3c3ff9cb,0x3c538bbb,0x3bea502e,0x3bcdccc1,0x3bb77741,0x3b1361b3,0x3befd499,0x3c05b5e6,0x3b2a15e0,0x3b321a7e, -0x3ca42085,0x3c78f18c,0x3b38c5f4,0xbb1f0405,0xbba6d85d,0x3c2452ac,0x3c317750,0xbb934627,0x3adda8e5,0xbbb7bd01,0xbc922d4b,0xbc8b500b,0xbc1db308,0x3bac195e,0x3bfe4b1c,0x3c06cc75,0x3bd6a8b2,0x3bbbce4f,0x3baf76c8,0x3bc222b8,0x3c002c3c,0x3bf26dcb,0x3bc8b4b5,0x3b624e69,0x3b1358dc, -0x3bc8192c,0x3a8c1322,0x3b9c5723,0x3c90b31c,0x3c47b984,0x3bcffcc7,0x3b5df381,0xbb630bbd,0xbbd147e0,0xbaa78d05,0x3c66f92e,0xbd11047a,0xbc85f31e,0xbab88d70,0x3bc4a3e0,0x39eb46f7,0x3b96c0e5,0x3ac64e81,0xbc10c245,0xbbc79aa9,0xba683a5f,0x3c2b0b3d,0x3b33de67,0x3a4a1649,0x3b5c90e1, -0x3be79f89,0x3c19bd29,0x3c05fc58,0x3b3616e0,0x39d7405c,0x3b28ff9f,0x3a931f9a,0x3a9aa1b2,0x3b1f03ef,0x3b2a9047,0x3b882514,0x3b67fd5e,0x3c205521,0x3c339e56,0x3bd22abe,0x3b46df7b,0x3b81aa0f,0x3be08ad7,0x3bb07a8f,0x3c0d53eb,0x3c9569d8,0xbcc17079,0x3ca0940d,0x3cac1c4b,0x3c9d2ebf, -0x3c727b40,0x3c256e5c,0x3bbb4d1e,0xbac30026,0xbbc542f6,0xbc3abc41,0xbc0fc19a,0x3b85b37d,0x39a8235f,0x3b63a9c8,0x3ba4962f,0x3b4b9506,0x39e4526a,0xb97b491b,0xbb01e65b,0xbb450b4a,0xbad9a1e8,0xbab53961,0xba0dadc7,0x3a357d26,0xbab7974d,0x3aefce30,0x3ba87f3f,0x3b4de07f,0x3b2783c5, -0x3b0d1f70,0x3b9a8751,0x3b891258,0x3a63c5b2,0x3bd6677d,0x3bfb2045,0x3c111b88,0x3c8280db,0xbbe24dcb,0xbba88371,0xb9b2bc14,0x3b8547a3,0x3bc7074f,0x3c4e7eb7,0x3c855fc4,0x3c99e14a,0x3c12a94f,0x3b83a385,0x3c0b65d4,0xbb10912b,0xbba8b609,0xbb2fd0e0,0x3aca0418,0x3b5966ce,0x3b98fc9f, -0x3ba0c3a6,0x3b8abe31,0x3b61e4a2,0x3a2180de,0xba0e9933,0x390766be,0xba8b7ed9,0xba573b91,0xb9888885,0x3b573804,0x3b9b4ab7,0x3b2885e1,0x3b536324,0x3aeea846,0xbac67349,0xbb07715a,0xba879b99,0xbb82288d,0xbbbada01,0xbbe9c2db,0xbb55bcb1,0xbb0a36fb,0xba849eb2,0x39a85293,0xbac90d77, -0xbbcb91c7,0xbc55a957,0xbc0414e8,0xbba679c5,0xbafb8c1b,0xb836b651,0x3a8454e5,0x3ac9045c,0x39eb6def,0x378c0c9d,0xba53c3e9,0x36cf743b,0x3a2eabd1,0x3a81b2ab,0x39825e55,0x38f57724,0x399ed371,0x39456482,0xba49cc4b,0xbb99b2bc,0xbb5394e1,0xbb6f1054,0xbb847614,0xbb77926e,0xbbb05b4d, -0xbbe6e401,0xbc0f5935,0xbc27065b,0xbc1f895d,0xbc0ea101,0xbbb69adc,0xbbac592b,0xbb9e461a,0xbba381af,0xbb88de5a,0xbb8e7f70,0xbb3b85f5,0xbaf2e8ba,0xbafc9a9f,0xbb387646,0xbb521cbd,0xbad115d4,0x389125fb,0x3b1b6171,0x3aaace29,0x394c384f,0xbab2567f,0xb9244754,0x3a1920cc,0x3aee788d, -0x3b088383,0x3b19c1ce,0x3b5a226b,0x3a103555,0xbb202549,0xbbd3ac15,0xbc0d39aa,0xbc202479,0xbc2501ac,0xbc3d96f2,0xbc62b527,0xbc854453,0xbc87c967,0xbc78ae39,0xbc599669,0xbbf6bb3b,0xbbf83b9e,0xbbe90c56,0xbbe468a4,0xbc010648,0xbc0ae03a,0xbc10af64,0xbc1bb54f,0xbc206c2b,0xbbfe5876, -0xbbad2c71,0xbb4c1f3a,0xbab7f7e9,0x3995c363,0x3b2b9950,0x3adf6f3e,0x3aaa5ed0,0x3a230e08,0x3ac50c3a,0x3b074072,0x3b4504bd,0x3b552bb6,0x3b6fa70e,0x3b932ad6,0x39ed3690,0xbb061b29,0xbbc33166,0xbbd6c0cc,0xbc1b4950,0xbc3136ff,0xbc1d2a13,0xbbf3d61b,0xbbc19985,0xbbc21fb9,0xbbb82752, -0xbbb447fe,0xbbd46972,0xbc2e587a,0xbc1f34ee,0xbc0656e9,0xbbdec3a6,0xbbabdcb7,0xbb6e5124,0xbaf3f988,0xb9e51b72,0xb7b7993b,0x3885aa37,0x39b658d9,0x3a4916a1,0x3a9ffac1,0x3b04930e,0x3b071683,0x3b19ed2c,0x3b1f8729,0x3b26ffa8,0x3b21334f,0x3b31d064,0x3b223896,0x39e16286,0xba1de958, -0xbae359c3,0xbb1ffa18,0xbb755ae5,0xbb91f089,0xbba5576f,0xbbb57385,0xbbdb024e,0xbc028661,0xbc12b156,0xbc19ac3e,0xbc1e383b,0xbc23835e,0xbc2197a3,0xbb83d902,0xbb8d35eb,0xbb7a4301,0xbb5d2068,0xbb42ee54,0xbb2e8ae0,0xbb1c21a1,0xbaf33f0a,0xbaed3f5f,0xbac63fa0,0xbaa3c954,0xba81e81e, -0xba4bb00f,0xba137521,0xba17b05a,0xba0e7e37,0xb9f7286e,0xb9e95206,0xb9c47c5d,0xb9cb37fd,0xb99d911f,0xb9ee66a0,0xb9d6f6cd,0xbac6db06,0xbac3c195,0xbaa764a4,0xbac78171,0xbaeb820d,0xbb0ecae8,0xbb229166,0xbb35e9eb,0xbb4f6160,0xbb68aa4c,0xbb775b87,0xbb74598f,0xbb81f9d5,0xbaecd05f, -0xba2c3198,0x39f59586,0x3a3a7e67,0xb9e74d2f,0xba89173a,0xbaadb57b,0xbaca8bb0,0xbab140b2,0xb99cf9cd,0xba652d64,0xba7a64f0,0xba3d27f0,0xbab77218,0xbae14ced,0xbb1531df,0xbae6f674,0xbaad5a9c,0xba27adcf,0xb944d038,0xb7c6443c,0xb9b03cd5,0xb9e737da,0xba16f147,0xba3a12bf,0xba68beb9, -0xb9b6b8cd,0x3a66ef39,0x3a70a2db,0x3a863dce,0x3a3da0e7,0x3a66b286,0x3a43797a,0xb89d8959,0x39c41792,0x38b18ee1,0x37aff011,0x39ce5e58,0x3a8efd7e,0x3ac3968b,0xba5bafcf,0xbb02adde,0xbb2cf674,0xbb67a2fb,0xbb431e7c,0xb9b0f1b0,0xba985dfa,0xba89e9f1,0xba14a35b,0xbb02f9b6,0xbb5fab4e, -0xbba1893a,0xbb904ec1,0xbb51ff04,0xba9dc250,0x3a04f208,0x3a7dca3f,0xb721825e,0xb9cd5120,0xbac0c702,0xbb061d86,0xbaca7831,0xb9b42700,0x3b130653,0x3b129e0c,0x3b22957c,0x3b096e91,0x3b00f109,0x3ac11c96,0xb97dfe86,0x3afeb5c3,0x3b028c63,0xb993737d,0x3a165e10,0x3b981ee0,0x3bd111b1, -0x397fec5c,0xbb43cacb,0xbb74c71b,0xbbc2bb3a,0xbba7c087,0x3a507b50,0xbafa76fe,0xbaf8f432,0xbaacd3e5,0xbb8e7074,0xbbd06e02,0xbc13c94c,0xbbf0bc9e,0xbb9ef56b,0xba916c62,0x3afce0d4,0x3b39c264,0x3a89d544,0xb91b9dc2,0xbad4b199,0xbb47a278,0xbb125406,0x397405b1,0x3b91eb55,0x3bb4079f, -0x3bc6dd05,0x3ba329dd,0x3bb378cf,0x3b9b49c1,0x3a291000,0x3b892551,0x3b62c673,0x3a0f98cb,0x3b565d12,0x3b41e881,0x3bc822c9,0xb9e42bc7,0xbb66e99a,0xbba87662,0xbc24d52e,0xbc0a8be7,0x3a8d0b16,0xbae05227,0xba897cf2,0x3abf596a,0xbb191692,0xbc073f1b,0xbc5d1275,0xbc5a3451,0xbc1704e2, -0xbb347572,0x3b3ba154,0x3b8ca9bc,0x3a861085,0xba356f99,0xbb4f6560,0xbb8c518f,0xbad87bba,0x3b02fbb1,0x3be7bd57,0x3c3cc991,0x3c4f11e9,0x3bea2189,0x3bd3e7ee,0x3bc19ca6,0x3b13a3c9,0x3c063525,0x3c0cff97,0x3a7e8905,0x3af89571,0x3caf4c3d,0x3c712c53,0x3b239004,0xbb8a73fd,0xbc2049e4, -0x3bb3a342,0x3be51c86,0xbbe23d13,0x3aa7cec0,0xbb97cce0,0xbc8eabe2,0xbc883583,0xbc3550e5,0xb9d4cb4e,0x3bb1a5f3,0x3beb912d,0x3ba4d82c,0x3baa86aa,0x3ba859b6,0x3bb58512,0x3bf46435,0x3be3b10c,0x3bb29d7e,0x3b57bd10,0x3acc2f5c,0x3b90e408,0x3965de91,0x3ba75639,0x3c9d047c,0x3c23e574, -0x3b6ed91e,0x3b00cbbb,0xbbe2fbf0,0xbc089124,0x3a8b14d1,0x3c887f2d,0xbd15adde,0xbc7b0f69,0xbbdddf2a,0x3b30e944,0x3b8a5114,0x3bd1104a,0x3b32dcb4,0xbbfe5dc8,0xbc13dce6,0xbb8b83ab,0x3c3aa0f3,0x3b3cb786,0x39d40038,0x3b1d9dff,0x3bc223fc,0x3bfaf96c,0x3bad9256,0x3abc5f9f,0xb9ef59bf, -0x3ad8fd23,0x3ad37608,0x3afe90d4,0x3b32c82f,0x3ace7e7d,0x3b510d61,0x3b7707b9,0x3c2183f7,0x3c2969e0,0x3ba2b458,0x3b591769,0x3b7aa3c7,0x3bb0f85f,0x3bd9eac7,0x3c2307a1,0x3c89ef89,0xbcd3b236,0x3cc622a5,0x3ccd10ce,0x3ca1ca1c,0x3c700205,0x3c1b47f7,0x3c39a3fc,0x3b932ac8,0xbc093d4a, -0xbc3a1ea9,0xbc2349ac,0x399ca0fd,0xb8da397f,0x3b8d6159,0x3be5e926,0x3bcaf686,0x3b3f5622,0xbae09eae,0xbafca488,0xbb2d8b40,0xbb1dcec2,0xbac78782,0xb99b9fd6,0x3a60ffb7,0xb9bb1f60,0x3b18f335,0x3b911951,0x3b28fda9,0x3b11119d,0x3b09264a,0x3ba29460,0x3bac6335,0x3b70decf,0x3bd34919, -0x3bc9678f,0x3c144754,0x3c9c5405,0xbc2e940a,0xbc0817d8,0xbb7578cd,0x3ae9e86e,0x3bb8bc85,0x3c4121c9,0x3c7eb93a,0x3c819177,0x3c43bae2,0x3c03d464,0x3c118459,0x3a5d81df,0xbb32f32c,0xbaf71c60,0x3b2cb71e,0x3b8f7914,0x3b858c61,0x3b6740b2,0x3b1dc8c4,0x3b1b5e86,0x3a3d0abd,0xb9cf46f5, -0xba965ac3,0xbae7a924,0xbaa72107,0xba61da40,0x3b06ee81,0x3b714aae,0x3b183c7b,0x3b161717,0x3a86917b,0xb9cc7ac3,0xbac71ff9,0xb992933c,0xbb1b61eb,0xbbf03847,0xbb6fc351,0x3a0546c5,0xba7518a2,0xbadde82f,0xba16038f,0xbb179e71,0xbba58717,0xbc1b9dfe,0xbb996819,0xbb431dce,0xbb1211d3, -0x39cd09b2,0x3ad2cb0a,0x3ae6bc0c,0x3a4dbe25,0x3a20e8b7,0x39e5146e,0x3ad5508c,0x3af7e753,0x3a6cfcaf,0x397409f5,0x394c9065,0x3a8c1377,0xba10d5fc,0xbae2f740,0xbb8cfa00,0xbb8b81ef,0xbb99800c,0xbb933fc6,0xbb589f28,0xbb7c80a1,0xbb92597d,0xbba4dd4b,0xbbcdffcb,0xbbe392ce,0xbba241e1, -0xbbaf135e,0xbb915cfb,0xbb483194,0xbb0d632b,0xba2a7490,0xbab2e840,0xba03b7ef,0x3a0cda39,0xbace5bdd,0xbb0f3b45,0xbaa31d9c,0x38f6f0e0,0x3ac1d85b,0x3b464e22,0x39f59f74,0xba09d64c,0xbaa619eb,0x38867a47,0x3a7d4cca,0x3accfd7f,0x3b03e883,0x3b04c9cc,0x3b365194,0xba889bf8,0xbb80ad5e, -0xbbec254e,0xbc048c90,0xbc143a93,0xbc249667,0xbc3e560a,0xbc632b91,0xbc83e24e,0xbc8ba974,0xbc83e45e,0xbc6b40f0,0xbc00c428,0xbba027c1,0xbb84c0b2,0xbb8ab3c8,0xbbac19ec,0xbbc1abc1,0xbbd89387,0xbbfb15b5,0xbc09253c,0xbbd37e11,0xbb8e88aa,0xbb23c54c,0xbb0497c5,0xbab9f0d0,0xb98f88e3, -0xb90fa96c,0x396fa811,0x39bab195,0x3a901b4c,0x3ad6a56f,0x3b2e2cf9,0x3b2dea50,0x3b35407f,0x3b63c5e2,0xba800ecc,0xbb8be638,0xbc12ff48,0xbc18270b,0xbc34128d,0xbc43eeba,0xbc2ebd04,0xbc157de4,0xbc018a42,0xbbd4d4c8,0xbba0200b,0xbb6b2489,0xbb8bd92d,0xbc11e35d,0xbbe756ba,0xbbcc12c4, -0xbbb13b51,0xbb93e795,0xbb64cabe,0xbb168df8,0xbad00d34,0xbaab9f7c,0xbabfd5af,0xbab80762,0xba97823f,0xba5aadde,0xba07780a,0xb9fa31d6,0xb9d738b6,0xb9d3f7e3,0xb9acd2b2,0xb9ed0c6a,0xb98eefd7,0x398790c1,0xbad790f6,0xbb1c0c95,0xbb506df2,0xbb60388a,0xbb8f92c4,0xbb99b208,0xbbaac69d, -0xbbb93556,0xbbd53b3e,0xbbf0ac7d,0xbc0b5932,0xbc09e396,0xbc0f390d,0xbc11a5e4,0xbc064edb,0xbb82c3b7,0xbb84a152,0xbb80b299,0xbb6d634b,0xbb5e9bbb,0xbb562be4,0xbb4e6254,0xbb37ee16,0xbb393829,0xbb2c3d51,0xbb204e42,0xbb156913,0xbb0c86ad,0xbb01186a,0xbb01f91d,0xbafebd62,0xbaf7ade3, -0xbaf5332c,0xbae9729b,0xbafefd70,0xbacfb241,0xbad2c130,0xbaaed274,0xbb2ed378,0xbb232ccb,0xbb1508f0,0xbb26df39,0xbb376d73,0xbb4804df,0xbb59c35f,0xbb67e4cc,0xbb750b17,0xbb788a53,0xbb7e41e2,0xbb8098c8,0xbb823a36,0xbb4dcb0c,0xba8dce6c,0xb7a56147,0x390ece55,0xba6ddfed,0xbabc85a5, -0xbacf2821,0xbaf86a30,0xbae07221,0xba29df97,0xbaa1afb7,0xbaa98fa1,0xba942094,0xbabec9d1,0xbae121aa,0xbb1cd490,0xbb072912,0xbae5ef14,0xba9fd909,0xba3351cb,0xba021ed9,0xba385432,0xba6e1681,0xba8a31d2,0xba9a9168,0xbaad8528,0xba60be56,0x39c24ba0,0x394dd28a,0x39a4e87a,0x3957a4e8, -0x39cf8c88,0x398acff9,0xba2b57eb,0xb8d144e9,0xb9c5bab2,0xba2f606f,0xb8b19363,0x3a22b067,0x3a48a750,0xbab3daea,0xbb1d4a4d,0xbb331a97,0xbb71fa6a,0xbb52d196,0xba38f9f3,0xbad50121,0xbab18b56,0xba627581,0xbaa08238,0xbb216fdb,0xbb9513a8,0xbb918963,0xbb72ecb8,0xbb0a8984,0xb9945092, -0x399de145,0xb9de9c44,0xba81d33b,0xbb034204,0xbb1f03a8,0xbb09f3de,0xba7ffb19,0x3af6cc4d,0x3aa98896,0x3acc646e,0x3ae4caef,0x3ad00b4e,0x3a9a41f3,0xba2f909e,0x3acc56fa,0x3ab360b3,0xbab60ff1,0xb8ad129e,0x3b7ef8c4,0x3ba50a6e,0xba4f067c,0xbb6ad71e,0xbb646d54,0xbbc67c07,0xbbac710a, -0x39f75cb2,0xbb167bcf,0xbb00d272,0xbac87989,0xbb3239e5,0xbb93d77d,0xbc047e95,0xbbf01f3a,0xbbb764ce,0xbb222812,0x3a630d84,0x3b048da4,0x3a32522f,0xba56de7a,0xbb18000c,0xbb551d64,0xbb3ee241,0xba4267f7,0x3b875a20,0x3b7a7f56,0x3b91e42b,0x3b925188,0x3bab7113,0x3b944313,0xb8f4cb46, -0x3b6d8363,0x3b3ccb63,0xba4f9453,0x3b2f069c,0x3b19efba,0x3b9814b3,0xbade8cf3,0xbb83c342,0xbb8f35c1,0xbc140cbf,0xbc023090,0x3a165e60,0xbb1b6176,0xba9b6337,0x3abf9ca6,0x3a5847a9,0xbb8e90c7,0xbc3a961a,0xbc4c5591,0xbc24a2aa,0xbb9a87db,0x3ab158bb,0x3b59d231,0x3a4a2292,0xbad3e188, -0xbb81420d,0xbb9b290a,0xbb416b90,0x3a5ba53e,0x3be86c03,0x3c2c512d,0x3c3d38ef,0x3be3c37c,0x3bddde71,0x3bce25f8,0x3b1115f5,0x3c0dbda1,0x3c06514d,0xbaad3566,0x3a18718e,0x3cb2b94b,0x3c58dad6,0x3ae1f3aa,0xbbc609e2,0xbc52171a,0x3a9631c5,0x3b7bb417,0xbbe16fe2,0x3aceef69,0xbb510761, -0xbc7defa0,0xbc7ecb6a,0xbc3e4732,0xbb9488ff,0x3b506c8e,0x3bc01c16,0x3b6c0a63,0x3b8dbba4,0x3b974ad6,0x3bb0c4ef,0x3bd8713c,0x3bbbfd39,0x3b8559a5,0x3b4b7acd,0x3aa02485,0x3b393cad,0xb995aee8,0x3ba4b34c,0x3c991ffe,0x3bffc3f0,0x3abb634f,0xb93a9443,0xbc27a4c6,0xbc1faf76,0x3b5b295a, -0x3c96da76,0xbd0ecd5d,0xbc86fe3d,0xbc37ad60,0x3951b535,0x3c0630dd,0x3be3748b,0x3b262979,0xbbc62425,0xbc24008e,0xbbbde1fa,0x3c422535,0x3b2a5915,0xb9535005,0x3ad4f787,0x3b9ea7f0,0x3bc52e92,0x3b2e2a5f,0x3a12a5f4,0xba46ff4c,0x3a30eea5,0x3b07cb23,0x3b3ecf1f,0x3b465b44,0x3a85b58a, -0x3b2f3ed0,0x3b8f5844,0x3c1bda8f,0x3c1812f7,0x3b72f054,0x3b4dcd1e,0x3b64d3eb,0x3ba82b02,0x3c0dc23a,0x3c2e9504,0x3c3a2dd7,0xbcd35808,0x3cd4914c,0x3cd2beed,0x3c9b3f55,0x3c53d9d8,0x3bc0859f,0x3c82479a,0x3c34573f,0xbc20dc45,0xbc158998,0xbc16a70d,0xbb82341b,0x39e8822c,0x3bbea977, -0x3c09f33f,0x3c002d50,0x3b94e1ac,0xbaea138b,0xbac15d91,0xbaf673cd,0xbb337f12,0xbb077d01,0xb9fe26f5,0x3a2cb614,0x3a5eeea3,0x3b386f75,0x3b593909,0x3afc3bbf,0x3ae93172,0x3b0196ce,0x3bab2f5c,0x3bce43e2,0x3bdaf8b1,0x3bac9bfc,0x3b51e0e7,0x3bf55bad,0x3ca43120,0xbc56bc28,0xbc2113ea, -0xbbde9139,0xba638d18,0x3b992d49,0x3c0a0523,0x3c38c656,0x3c21c700,0x3c5cd795,0x3c3af58a,0x3c10c072,0x3b78e921,0x390ab8f2,0x39d7d0cd,0x3b44a6e0,0x3b93828e,0x3b68e0a9,0x3b261c24,0x3a81f478,0x3a8fb3ed,0x3a3dd792,0xb9af2997,0xbb18b0fa,0xbb2917fa,0xbae88ba9,0xba98a50f,0x39e97b6a, -0x3af7c58d,0x3ac51234,0x3a65e80a,0xb90eb706,0x3916e72f,0xbab944fa,0xb983beb6,0xba889d6a,0xbc10063f,0x39b157c5,0x3b984b70,0x3a73ffed,0xbab37a98,0xba2f9560,0xbb121872,0xbb2204ad,0xbb5db3a1,0xbadc38bc,0xbb0237d4,0xbb434360,0x390bde52,0x3ab30ce9,0x3a9b5c89,0x3a8968a6,0x3aa37c37, -0x3ad3d306,0x3b2e5d4f,0x3b204f6e,0x3a4cc468,0x393a8bfe,0x3909ca09,0x3ad03eea,0xbaa2c091,0xbb2f5473,0xbb6dc625,0xbb9efdff,0xbba29226,0xbb76cf2c,0xbb16011b,0xbb0d7b15,0xbb02440b,0xbad4db71,0xbb13afc6,0xbb2b0b09,0xba479ae6,0xbbd546a9,0xbb8a5519,0xbb17c680,0xba68ad00,0xb839ad03, -0x39251d7b,0x39f5c5bb,0x3a457c93,0xba9986f7,0xba887a98,0x39373c88,0x3aa07961,0x3b0c7be8,0x3b4fe433,0x3919dce5,0xba1ff37e,0xb94ed411,0x3a38d258,0x3ac91c15,0x3ae0b1d7,0x3b23e8df,0x3af534a1,0x3a9bb2bb,0xbb2628bc,0xbb9e473f,0xbbe8ef45,0xbbee9d71,0xbc065c9f,0xbc1f9fa1,0xbc3986f6, -0xbc59e11c,0xbc730f71,0xbc8a9658,0xbc88ef00,0xbc75f53f,0xbc1b4b43,0xbb396309,0xbb0058dc,0xbb10892f,0xbb386cd7,0xbb4cb494,0xbb7a6252,0xbb9c152b,0xbbb63e68,0xbb8b965b,0xbb47acac,0xbaecb40b,0xbafc83c1,0xbb019207,0xbad9ce89,0xba80b550,0xb97955f5,0x3980086b,0x3a49ce44,0x3aa4594c, -0x3b0555ae,0x3ad2dea5,0x3abed4bc,0x3af6955c,0xbb0f20c5,0xbbbd249e,0xbc275258,0xbc2e478f,0xbc3ac0ac,0xbc48bf66,0xbc35c0b3,0xbc28869d,0xbc1bb67c,0xbbe483d7,0xbb922f2e,0xbb162dc9,0xbb320d09,0xbbd3c55b,0xbba3fd4d,0xbb9b8843,0xbb91dfc8,0xbb874434,0xbb710829,0xbb4827e2,0xbb38935d, -0xbb20bb3a,0xbb1f9b78,0xbb19cb16,0xbb09be23,0xbae56fc8,0xbace85f8,0xbad91f3e,0xbaeed4a5,0xbafda221,0xbb03b158,0xbb0f6aa9,0xbb0fa210,0xbb02b90f,0xbb502667,0xbb7059f1,0xbb84743e,0xbb808c95,0xbb8f48ed,0xbb8cd600,0xbb95c980,0xbb9ed388,0xbbace4f3,0xbbb7c1d2,0xbbd7dbd1,0xbbd067dd, -0xbbdfcd55,0xbbe2a7e1,0xbbcaf146,0xbb85651c,0xbb850d44,0xbb8653df,0xbb8173eb,0xbb7e07f6,0xbb7ce34d,0xbb7d0689,0xbb762aba,0xbb73fd0b,0xbb6a4186,0xbb5e95a8,0xbb53fd11,0xbb4b5060,0xbb3c09ac,0xbb424245,0xbb4284f7,0xbb42e7fe,0xbb44445e,0xbb428786,0xbb4bbc09,0xbb3fb2c1,0xbb3f8584, -0xbb2fef45,0xbb73cf7c,0xbb6d0961,0xbb655f20,0xbb70ffaf,0xbb7a6048,0xbb7e1755,0xbb8451b5,0xbb870c5d,0xbb864f6c,0xbb833660,0xbb83c7e7,0xbb82bba4,0xbb83dff9,0xbb934f8e,0xbaa3c155,0xb9adc2d9,0xb9962344,0xba95bae8,0xbacf2dfb,0xbadb0dcb,0xbb011f5f,0xbaea30cd,0xba518748,0xbaae61b4, -0xbab1b74a,0xba9f97ac,0xbaa275d4,0xbabe3993,0xbb116b52,0xbb07d7ca,0xbaf9c890,0xbac28e79,0xba83521f,0xba564cf3,0xba5c1195,0xba99387a,0xbab25299,0xbaccf3c3,0xbac8475e,0xba98fbf7,0xb7d250ab,0xb9e82f02,0xb9a8e328,0xb922c338,0xb78ef06b,0xb924da77,0xba8de2b1,0xb9eca5c9,0xba2867e7, -0xbaa6e186,0xb9e15ceb,0x3943c1d7,0x38722d39,0xbad66963,0xbb239ea6,0xbb307513,0xbb659b12,0xbb4e7eea,0xba7d0f06,0xbaf04669,0xbab1cb67,0xba4a1bf5,0xb965b0c5,0xbaa8990a,0xbb7b80eb,0xbb878d1c,0xbb7c4dce,0xbb271ca5,0xba80ea05,0xb9a9d2e6,0xba19e79f,0xbab62423,0xbb12969f,0xbb2f5bb0, -0xbb1cd374,0xbab257c8,0x3ad90b2e,0x3a0a8180,0x3a562e5f,0x3ad45e4b,0x3ab3ce79,0x3a8b6d6e,0xba40c18d,0x3aa1e81f,0x3a491ab4,0xbb14c8b4,0xba0524bb,0x3b5088ca,0x3b5f67ea,0xbac3bf86,0xbb782a04,0xbb61df92,0xbbbb306c,0xbba25801,0x392437ff,0xbb157f91,0xbad5a29b,0xba9962e6,0xba3f2ccf, -0xbb190411,0xbbd9b981,0xbbdc3208,0xbbbf85d8,0xbb50e9d9,0xb9a72ec0,0x3a802323,0x39e71c48,0xbaa41b29,0xbb2e99d3,0xbb602a6e,0xbb543bb3,0xbabafe7a,0x3b837d45,0x3b147cc4,0x3b47fe58,0x3b8b7278,0x3ba4f31a,0x3b8c0a93,0xba055bcd,0x3b40a0d6,0x3b0de83a,0xbb0a0747,0x3b0e7d76,0x3ae5de9e, -0x3b35622b,0xbb224a15,0xbb877d1e,0xbb83dc10,0xbbf98e63,0xbbeaaef5,0xb9b55538,0xbb37e931,0xba6ce6b6,0x3afee93c,0x3b87fdd9,0xb9b7f55c,0xbc1256b0,0xbc34fafd,0xbc270baf,0xbbbd07b7,0xb9dab944,0x3afb9d5f,0x3a5a9e78,0xbb079e7e,0xbb8507b7,0xbb9b51ad,0xbb79b185,0xb99f166c,0x3be692c7, -0x3c116e66,0x3c20f1c8,0x3be1d026,0x3bede752,0x3bded23b,0x3b2104f6,0x3c0e3f59,0x3be477ba,0xbb786091,0xba1a62ba,0x3caca0fb,0x3c2eb448,0x3a72d33e,0xbbe7716e,0xbc5e7d6a,0xbb2612e9,0x3ac24a54,0xbb924fa8,0x3b193ca6,0xbacb19b5,0xbc4fa511,0xbc684b81,0xbc3cce8b,0xbbdc5a13,0x3ac549e8, -0x3b9969fb,0x3b2e5b8f,0x3b545c92,0x3b6e7acf,0x3ba4e8ff,0x3bafefb1,0x3b8adcd4,0x3b23bf26,0x3b4bc46c,0x3aa2f028,0x3aaca0ca,0xb98d830c,0x3b9d8dc7,0x3c860146,0x3bbf9ebe,0xb8e45080,0xbb366239,0xbc4e448a,0xbc2357bc,0x3bb01931,0x3c9d5e30,0xbd031c34,0xbc8e7526,0xbc5b0474,0xba6ba6ab, -0x3c4c3dae,0x3be74a12,0x3ae14687,0xbb7f8bff,0xbc276218,0xbbcfb98f,0x3c4345d2,0x3b292d37,0xb9e5045a,0x3ad57782,0x3b552475,0x3b7aba0a,0x3a0fb557,0x3916e1f9,0xb9f171c0,0x394c1d91,0x3b0a0a4f,0x3b5dd703,0x3b41b885,0x3a3fdfb6,0x3b215ba0,0x3ba28716,0x3c0cabe0,0x3bfd8561,0x3b27a72b, -0x3b14d1b6,0x3b3d9f50,0x3bc11433,0x3c351bee,0x3c2f99ca,0x3b5dd56a,0xbccd461b,0x3cc8f744,0x3cc9d933,0x3c85c5d6,0x3c0d53b4,0x39e9ebcd,0x3c7f492a,0x3c6aea6a,0xbbdf3289,0xbb94d791,0xbbd7795e,0xbbd69625,0x3aa370ef,0x3bea9969,0x3c1e218b,0x3c0ad955,0x3baa5b6f,0xbacbe1d3,0xbaa170ca, -0xbaab65e9,0xbb18cbb3,0xbb12857c,0xba35beea,0x39df8994,0x3b03ef8a,0x3b536503,0x3b0406b0,0x3aa683e2,0x3aaf709d,0x3acfd1a9,0x3bb45b62,0x3be7670f,0x3c0db67b,0x3b30991d,0xba52baae,0x3ba58b1d,0x3c9933b2,0xbc5f11f8,0xbc32db0e,0xbc0eb779,0xbb393b7b,0x3b404678,0x3b8a4158,0x3bb2e8da, -0x3b6ee6d5,0x3c580025,0x3c5d2623,0x3c11c9da,0x3bcec79a,0x3b3ae704,0x3b3c6abe,0x3b3f7e69,0x3b80b571,0x3b294c54,0x3ac1c63e,0xb99d366f,0xba31432a,0x3955b463,0xba225ff8,0xbb537470,0xbb605f03,0xbb1a6fe7,0xba9c5bac,0xba911c18,0xb7f546e3,0x3a06936b,0xb9d38fbf,0xba83ac8e,0x39bece6b, -0xba819070,0xb933f304,0xba11f3a3,0xbc197cf0,0x3b70a9a9,0x3bf8a6eb,0x3b8c5007,0x3ac97c10,0x3a7dc2f3,0xb95be6fa,0x3aadab4e,0x3b57dfac,0x3a795b2f,0xba99153c,0xbb61b71c,0xba47eff6,0x3a1963fa,0x39e3998f,0x3a83749c,0x3ae01495,0x3b21dcb0,0x3b4a034d,0x3b2b5e82,0x3a44b047,0x39c31787, -0x393c72d4,0x3abbc680,0xbacaa939,0xbb50390e,0xbb55dde2,0xbba12c15,0xbb90ecc3,0xbb0a5713,0xba9d2fb0,0xba445f27,0x38cf1b46,0x3a834966,0x3a9bc1c6,0x3aba8808,0x3b2b5ba7,0xbc030ea5,0xbb986de6,0xbb48c994,0xbabe90bc,0xba9c7165,0x392d5b25,0x39ce65dc,0x39b20a5c,0xba17b4b1,0x38ee5a2e, -0x3a76b030,0x3b095789,0x3b1e36f5,0x3b2f6056,0x39b038e1,0xb9a8f100,0x3aa61d49,0x3ab9ddea,0x3afbf7bc,0x3b00cc94,0x3b3dff53,0x3ad46e94,0xba5963ed,0xbb793d3f,0xbbabdb9d,0xbbcd9879,0xbbccddfc,0xbbf01cbb,0xbc1604e6,0xbc2f998e,0xbc48e93f,0xbc54b29e,0xbc84c557,0xbc899074,0xbc7d149b, -0xbc384334,0xbad94430,0xba0a19dc,0xba22681a,0xba34b108,0xb9f5ce4e,0xba8aec2c,0xbade0162,0xbb1b9f1b,0xbada3816,0xba9ba1e4,0xba089286,0xba77867f,0xbaaea74e,0xbacbf070,0xba0a1cec,0x39b7f013,0x3a759178,0x3a979398,0x3ad1fbe0,0x3b02ded0,0x3a5d5b26,0x39bcb553,0x39661604,0xbb3ff06b, -0xbbced56e,0xbc2323c9,0xbc2fb97e,0xbc334f25,0xbc434aa6,0xbc326ce4,0xbc2f3f89,0xbc2861f0,0xbbf0be7b,0xbb962c6b,0xbb15204c,0xbb0d8730,0xbba0f6f8,0xbb812a75,0xbb7e59bd,0xbb7b3d8c,0xbb763499,0xbb6a507f,0xbb550e8f,0xbb4e2a7d,0xbb35d28f,0xbb2a6893,0xbb1f621d,0xbb0fb388,0xbaeb35ee, -0xbad23953,0xbae9558a,0xbb05b3ee,0xbb0e259c,0xbb1438c7,0xbb1f68f3,0xbb1e5e4d,0xbb40450e,0xbb5dbc9d,0xbb7ae944,0xbb855bd5,0xbb7aa258,0xbb7dd57d,0xbb67836c,0xbb690d64,0xbb70c54f,0xbb768d35,0xbb788143,0xbb904462,0xbb902220,0xbba3d50c,0xbba70349,0xbb97183c,0xbb7ead7d,0xbb69691b, -0xbb723d82,0xbb6ec4a5,0xbb6f61d9,0xbb709a60,0xbb73a808,0xbb75244b,0xbb70f20d,0xbb6a5db2,0xbb6133a4,0xbb57bf22,0xbb51a50d,0xbb43ec72,0xbb4b0c32,0xbb4bda78,0xbb4df56c,0xbb4ff9bf,0xbb51c0c5,0xbb516d1b,0xbb6399d1,0xbb6f553d,0xbb7a90d4,0xbb80911c,0xbb89e846,0xbb93a10f,0xbb949180, -0xbb954eef,0xbb9193a1,0xbb92cd21,0xbb9123df,0xbb8ba61b,0xbb82a9e6,0xbb74b532,0xbb88b88b,0xbb82830d,0xbb972ad9,0xbaa2e6b0,0xba02af8e,0xba0e19ec,0xba9d74f5,0xbaca7c24,0xbacf01fa,0xbaf3e715,0xbadf27a5,0xba6e14cc,0xbaa87a74,0xbaa3181a,0xba8c77e9,0xba6d3e36,0xba8f2281,0xbafc4e36, -0xbafdbd13,0xbaf7c53b,0xbacc8c4b,0xba9a1f72,0xba831955,0xba62578c,0xbaa8ae19,0xbac3842e,0xbae5d621,0xbacdc8ca,0xbaa77ce4,0xb94e4a13,0xba55a3c7,0xba364874,0xb9796f47,0xb96b9cfb,0xb9c58125,0xba9dbdd1,0xba2c5fa2,0xba4624ab,0xbacff153,0xba1c1619,0xb90f30ed,0xba01db9a,0xbaddbe20, -0xbb1a9b5c,0xbb1c5cb5,0xbb4b543b,0xbb409557,0xbaa76602,0xbafa9431,0xba9e9955,0xb9d4ec63,0x3a3b1540,0xb95626c8,0xbb476b2c,0xbb72d4dd,0xbb799622,0xbb33d179,0xbaccb8f9,0xba61c23c,0xba2d1ef4,0xbaca4e25,0xbb15947f,0xbb3bec07,0xbb20c15a,0xbac4e63b,0x3ac1d827,0x376cd6ec,0x39ac9067, -0x3ade74d8,0x3aa5f0a0,0x3a88912d,0xb9f80354,0x3a814ab8,0x39a558e1,0xbb30c137,0xba313aee,0x3b258ae8,0x3af32365,0xbae1a67d,0xbb6a6b66,0xbb4baa5c,0xbba6d1f1,0xbb92fc1c,0xba06662b,0xbb0c908f,0xba8a34c0,0xb9bf3145,0x3a94a07f,0xb9b53d1d,0xbbac2171,0xbbc27f38,0xbbbf65be,0xbb6d6ce0, -0xbabcc78d,0xb90485fc,0x395377ec,0xbac6b875,0xbb38a239,0xbb6f055e,0xbb55c60d,0xbaea6f5d,0x3b819ea3,0x3a91ac2a,0x3b0923e7,0x3b91483d,0x3b9feb26,0x3b8464f3,0xb9cd2509,0x3b1504ba,0x3ac6d6e5,0xbb3db22e,0x3af7fcc9,0x3a9b7e9e,0x3a6559fb,0xbb2989dc,0xbb733cce,0xbb57751e,0xbbc58166, -0xbbd3252e,0xbaea4384,0xbb504b90,0xb9f8ab59,0x3b35b71b,0x3be1c6a0,0x3b47e364,0xbbda3756,0xbc1c104e,0xbc23aa77,0xbbd428db,0xbb13388c,0x39a3d96a,0x3a70654a,0xbb03d411,0xbb7b846e,0xbb9981bf,0xbb8ac39e,0xba9c6f73,0x3be42c34,0x3be8b68a,0x3c02be63,0x3becfa4f,0x3c014976,0x3bef3bdf, -0x3b45f6bb,0x3c08fed5,0x3bb3b478,0xbbb21982,0xba976317,0x3c9b6017,0x3bfc9ce5,0x38bc54c5,0xbbf02697,0xbc53efee,0xbbaf4a10,0xb8fa93ba,0xba8372a0,0x3b495719,0x393cd1f6,0xbc0d88f6,0xbc51399e,0xbc3abebd,0xbbf3bb5f,0x389f1c43,0x3b5d422a,0x3b08ed9c,0x3b086e0d,0x3b11368c,0x3b7e91ed, -0x3b73ee2d,0x3b2e0d9a,0x3a842ef8,0x3b58028d,0x3ac7eb79,0xb94a751c,0x39933cad,0x3b9b46c0,0x3c4fee0f,0x3b8bee4a,0xba780e32,0xbba96eb2,0xbc5fffdb,0xbc15e0f0,0x3be64119,0x3c99c0c7,0xbceaf3b3,0xbc879ba2,0xbc6101b1,0xba8b503a,0x3c8ac9ee,0x3befd8f2,0x3aa273fa,0xba3b402b,0xbc16914d, -0xbbc8eb33,0x3c2dc373,0x3b3ab3ba,0xb83b9698,0x3a8b264d,0x3aaeca2f,0x3a9e42b2,0xbaae2a16,0xb9a9456a,0xb8fb0632,0x39b7745c,0x3ae4cd59,0x3b4d8cf3,0x3b2ac598,0x3a4266cc,0x3b283f7a,0x3bb1346a,0x3bf267d1,0x3bc29186,0x3aa90ae8,0x3a66b36f,0x3b0dc887,0x3bed27aa,0x3c5e0178,0x3c286dd8, -0xbba6876e,0xbcc4a6b9,0x3caaba3a,0x3cc32034,0x3c4e1bc0,0x3b175369,0xbbbd1c06,0x3c0f5e97,0x3c42ea0d,0xba2b03cb,0x3983cb14,0xbb65db6b,0xbbe2ec76,0x3af811cf,0x3bf44c56,0x3c1bc50d,0x3c0be9c3,0x3bb5075b,0xba41b790,0xbaa40d5e,0xbaae7796,0xbad68acf,0xbaf48218,0xba32f3d8,0x3941f594, -0x3b3da1cd,0x3b6261a7,0x3a73b9fb,0x3a148cdb,0x3a5ba77f,0x3a8e5ccb,0x3bb90e77,0x3bf0cef4,0x3c12eb40,0xba2c105c,0xbba09564,0x3b12764e,0x3c787a84,0xbc4d8496,0xbc43e23d,0xbc1bc03e,0xbb826caf,0x3a430050,0x398c6054,0x39a51baa,0xb953cb3c,0x3c40c263,0x3c69e901,0x3c0a4cb6,0x3c09a293, -0x3bbc68df,0x3b95b8a8,0x3b21ca91,0x3b36170d,0x3acf0ff3,0x398b9712,0xbabae9c8,0xbb2197a2,0xba7e3420,0xbaafb2b7,0xbb75e607,0xbb872fe7,0xbb430693,0xba912d2f,0xbb13c032,0xbacad770,0xb99d7b7e,0xba9b723a,0xba93dce5,0x3a3e4156,0x37c0101b,0x399113a4,0xba5d5cfe,0xbc0c3ac9,0x3bc4b14a, -0x3c1911b1,0x3c06e393,0x3bcc47e4,0x3b9baafd,0x3b57e4e1,0x3baba9bf,0x3c10cbc2,0x3b6a27a1,0x3856639b,0xbb5e3ebb,0xbb0d5ee1,0xba7bc6e1,0xb9585056,0x3a536034,0x3ae31b29,0x3b258e07,0x3b492bbb,0x3b2f9ada,0x3a5534f8,0x3a5012bc,0x399b4660,0x3a1c5e21,0xbadb807c,0xbb5a17a2,0xbb567b21, -0xbb926e25,0xbb54e24f,0xb9807f93,0xb9716e10,0x39688bfe,0x3ab2d279,0x3b1e4373,0x3b538afd,0x3b6ed76d,0x3b96ea5e,0xbc1b8205,0xbbbf373d,0xbba4083c,0xbb5b9d7c,0xbb371b36,0xba4ed5a2,0xb978067a,0x39803a34,0x393d0cf4,0x3aab463c,0x3b0b6cdc,0x3b4ac85c,0x3b30817b,0x3b0349fb,0x3a23f2aa, -0x39b3fdfc,0x3b221dc5,0x3b08418a,0x3b115ce8,0x3b0ec5e1,0x3b3371d4,0x3a86bd88,0xbb22d440,0xbb9af98f,0xbbb1c2c6,0xbbaa3a30,0xbbad63b1,0xbbd5f7f1,0xbc06f8e1,0xbc210603,0xbc33c006,0xbc34b55a,0xbc73c7bf,0xbc8306ee,0xbc7a073d,0xbc4ce1d6,0xbaaaacf4,0x393eda81,0x396e0a80,0x3a19a053, -0x3a90c151,0x3a5d3d5c,0x3a48aa26,0x3a16ffd4,0x3a4d6204,0x3a4dd7ca,0x3a89045c,0x39f3ab3b,0x37e15185,0xb9d84804,0x3a2f53d5,0x3abf44c7,0x3b0b5c0d,0x3b0a0465,0x3b221fcd,0x3b2f7a6e,0x3a2af386,0xb9f1c405,0xbabf9239,0xbb5dd3a6,0xbbc7a212,0xbc0c6cc3,0xbc208b68,0xbc212008,0xbc358d33, -0xbc27e7ad,0xbc2b9f2c,0xbc2a87c2,0xbbfea32d,0xbbaf8d17,0xbb63a5a5,0xbb257818,0xbb7c4eab,0xbb4462d9,0xbb479e47,0xbb4bf2fd,0xbb4ef167,0xbb4d0edf,0xbb493054,0xbb499991,0xbb32d807,0xbb20f9d5,0xbb11a552,0xbb004994,0xbaceaccd,0xbab50abb,0xbacb8969,0xbae890a0,0xbaf67eb1,0xbaf86ddb, -0xbb03e6b0,0xbaf44a3c,0xbb378336,0xbb378167,0xbb57d77a,0xbb6b8057,0xbb627f06,0xbb5aa4f7,0xbb3e82c2,0xbb37be6f,0xbb3bfb51,0xbb35b0c5,0xbb31bb75,0xbb42ad33,0xbb4cac88,0xbb6c7bc4,0xbb6fda0b,0xbb5b9750,0xbb4280a5,0xbb149bd0,0xbb258ce6,0xbb278cdc,0xbb2d1090,0xbb317ab9,0xbb3664e3, -0xbb3dd419,0xbb37c5f3,0xbb338b2a,0xbb2d997e,0xbb26d3d9,0xbb233bee,0xbb190e3b,0xbb1dd8b1,0xbb1d6601,0xbb1e919e,0xbb1f79ed,0xbb21fa85,0xbb19f334,0xbb4406f3,0xbb5b5b52,0xbb7e460a,0xbb516e25,0xbb79a1cf,0xbb9329df,0xbb90a30e,0xbb8f1add,0xbb881cd2,0xbb871bdb,0xbb830ff0,0xbb7a1d0b, -0xbb5ea5d7,0xbb3aee0b,0xbb768a9b,0xbb564153,0xbb5b9a02,0xba942b6e,0xba03c0d5,0xba2d1851,0xba941016,0xbab5720f,0xbab465db,0xbad7f96c,0xbac8ea9b,0xba8250b8,0xba957e8a,0xba8682ee,0xba527d73,0xba168ae3,0xba468bf9,0xbad102a5,0xbae21c8a,0xbae824b8,0xbaca7592,0xbaa18e47,0xba8b8ea9, -0xba5ee94c,0xbaa5fe8d,0xbabe4954,0xbae7f053,0xbabea25a,0xba9ab274,0xb94c56df,0xba6fb397,0xba4e9e79,0xb8b674dc,0xb976fb1b,0xb9cde8c0,0xba87d9db,0xba2c366e,0xba35957a,0xbacc3d2b,0xba11ecc8,0xb96cddd4,0xba3cbafb,0xbac8b5b5,0xbb062201,0xbafebc3d,0xbb2c540e,0xbb2ec860,0xbad3951e, -0xbaeffb2c,0xba737fe2,0x38c2d508,0x3ab3db08,0x3a19e26b,0xbb133a47,0xbb521242,0xbb6d570b,0xbb3a467f,0xbb01c5cf,0xbaaaabce,0xba4b0f92,0xbace5445,0xbb142be3,0xbb431419,0xbb18b511,0xbabbea9b,0x3aac4866,0xb97e850e,0x38e46720,0x3afda99d,0x3aa0d4f8,0x3a87fbe7,0xb78a7fac,0x3a60443d, -0x38e07f94,0xbb27a240,0xba1f342e,0x3b05ad39,0x3a4bc154,0xbad24252,0xbb4a54c7,0xbb2640dd,0xbb900a9b,0xbb829fb3,0xbab63463,0xbaef0ad4,0xb9a9c157,0x3a198f4f,0x3b242ce9,0x3a9385ae,0xbb836910,0xbba7471c,0xbbb89ffa,0xbb82c152,0xbb19df13,0xba93bb01,0xb9110c32,0xbae80752,0xbb41a766, -0xbb8032d5,0xbb495471,0xbaf21b74,0x3b7ce53b,0x39e3691e,0x3acb17d4,0x3ba2574e,0x3b9934ab,0x3b7a5f84,0x38e5fca0,0x3aefcd53,0x3a9d4102,0xbb4000c7,0x3af070fc,0x3a875b4f,0xb90d4536,0xbb0df702,0xbb44f2bb,0xbb190111,0xbb967608,0xbbc0b318,0xbb61fb15,0xbb562a26,0x38fdaac8,0x3b748406, -0x3c0ca9f6,0x3bb38669,0xbb939444,0xbc0259ee,0xbc1af04b,0xbbe8235b,0xbb80c43c,0xbab411ae,0x3a0efa23,0xbafa188f,0xbb6ec451,0xbb989875,0xbb8d0af1,0xbae895a9,0x3be12c5a,0x3bb533e0,0x3bd0688e,0x3c02cfc5,0x3c0b99ee,0x3bf98492,0x3b74d10c,0x3bfe57f9,0x3b891d71,0xbbc20d69,0xba8d7495, -0x3c821b30,0x3b9abf70,0xba3d8548,0xbbe55a4b,0xbc3b4a5a,0xbbec1c62,0xba8e28db,0x3b25979f,0x3b80a712,0x3afa1963,0xbb867d05,0xbc3c4a47,0xbc3a3efa,0xbbeea3c0,0xbaa15480,0x3afbcfd0,0x3ad95913,0x3a9af709,0x3a72c8ca,0x3b150d54,0x3af31f44,0x3a9134b0,0xb995c59a,0x3b6454dd,0x3b000372, -0xbac8ca92,0x3aaa5915,0x3ba273c9,0x3c0b0a67,0x3b4b00b4,0xbaacd765,0xbbdc5ac9,0xbc5b33c0,0xbbf24a8c,0x3c0b2d2c,0x3c8f2f0d,0xbcc8dec5,0xbc5f43ac,0xbc50f003,0xba224bc3,0x3caa31c5,0x3c05b655,0x3acbb97b,0x3b390819,0xbbfee5ed,0xbbbeb867,0x3c043db3,0x3b45c96e,0x3a216ad1,0x389a354a, -0xb9937952,0xba4533a7,0xbb10190c,0xba2d314c,0xb8cf03dc,0x3a12bdaf,0x3a8968ac,0x3b15e9a9,0x3b138a23,0x3a7f3ff5,0x3b3d5b60,0x3bb787c8,0x3bc9af63,0x3b861928,0xb92c6db6,0xb9fca6c8,0x3aee8be9,0x3c11ba40,0x3c7ba9c9,0x3c101e6d,0xbc4ac6fe,0xbcb62b98,0x3c801545,0x3cc0a20c,0x3c0f7ba3, -0xbb81efa0,0xbc42f042,0xbb1672c5,0x3bb5a307,0x3c02d0ba,0x3b7ee2eb,0xba9ff870,0xbbb2cef1,0x3b0ddb6d,0x3bdc2c4e,0x3c06ba91,0x3bfdc437,0x3bb062da,0x3a143d70,0xba9ad86c,0xbac1fbbe,0xba429557,0xba7b562d,0xb989be78,0x38ce3afe,0x3b5f4587,0x3b5c1af1,0x399f9a60,0xb92e8a5a,0x3985eedd, -0x3a355c03,0x3bb85090,0x3be58ce7,0x3bf8a2f6,0xbb703a09,0xbc008c85,0xb9c955d8,0x3c202d28,0xbc2a21e4,0xbc4bb79f,0xbc1acb2a,0xbb948808,0xba9893d2,0xbb31038f,0xbb48f5fc,0xba37b895,0x3c1e1368,0x3c5d31ce,0x3c05d053,0x3c260d1b,0x3c0a1fb0,0x3bc1a359,0x3b093575,0x3a9e433c,0x3a0337b6, -0xba84aad0,0xbb1b2afa,0xbb6e1f7e,0xbb172e5c,0xbb164a18,0xbb819deb,0xbb92aa54,0xbb5f19df,0xba955c28,0xbb3bceac,0xbb204072,0xba5856c9,0xbac0c22b,0xba34042a,0x3a790ef1,0x3aa1dffc,0x3a74ab02,0xba994753,0xbbd8540f,0x3bef0c96,0x3c263346,0x3c3e3cee,0x3c350243,0x3c1c212b,0x3bea005c, -0x3c06d4b4,0x3c426adf,0x3bcafbdb,0x3b0e5730,0xbb1b51c2,0xbb37f04e,0xbb23f0ac,0xba8c4449,0x3a1bec86,0x3ac8dac2,0x3b089804,0x3b317924,0x3b23b9d7,0x3a7c057f,0x3a8fc4ea,0x39672c5d,0xba196339,0xbafc2c94,0xbb5a5738,0xbb5d4849,0xbb640c58,0xbad69dd8,0x3aa77e82,0x3a0194d3,0x3a3a5835, -0x3ad94d8e,0x3b305288,0x3b7ff5fa,0x3b997ceb,0x3bb3a4ec,0xbc30c467,0xbbdc1920,0xbbddf039,0xbbad75e1,0xbb886728,0xbae73916,0xba185768,0x3a133c76,0x3a97d347,0x3b1e562a,0x3b57b9d7,0x3b766847,0x3b491c0e,0x3af2b411,0x3a9a34d9,0x3ab9f797,0x3b4a9da5,0x3b2a914f,0x3b24835b,0x3b1d292a, -0x3b04b0c3,0x3860966e,0xbb6d2f19,0xbba678a3,0xbbadd1c9,0xbb8ec8fe,0xbb9737db,0xbbbf201a,0xbbe78bc2,0xbc0d8494,0xbc1b1386,0xbc13b954,0xbc4fc2b2,0xbc68fd82,0xbc6f764f,0xbc5a64f7,0xbacd6eb9,0x38a6abef,0x398a43ae,0x3a72c8cf,0x3ac611cf,0x3adc1603,0x3b0c79bf,0x3b27ae07,0x3b28c263, -0x3b1eff60,0x3b2664a8,0x3af74f3d,0x3ac5aba8,0x3a905542,0x3af1d1d8,0x3b193e71,0x3b3e5949,0x3b37225a,0x3b410af2,0x3b52d6e8,0x3a49a488,0xba886b80,0xbb37f857,0xbb691743,0xbbadbf05,0xbbd3c907,0xbc057a86,0xbc08f0dd,0xbc239596,0xbc1b7d3c,0xbc24c8a3,0xbc29d7cf,0xbc0773dd,0xbbcfad62, -0xbba11a1a,0xbb52c8b9,0xbb3977b2,0xbb07bbb5,0xbb123fb1,0xbb1a77e3,0xbb20dc90,0xbb26bc30,0xbb31c8dd,0xbb3b703e,0xbb299366,0xbb152d3d,0xbb018243,0xbad5af14,0xbaa80eed,0xba9111a0,0xba99964c,0xbaa583fd,0xbaaaba12,0xbaa1f054,0xbaa5f063,0xba872c85,0xbb0c0870,0xbb000a41,0xbb206f50, -0xbb385484,0xbb402ee5,0xbb38ebb3,0xbb221ef0,0xbb190251,0xbb2051ca,0xbb16001a,0xbb1435a7,0xbb1ab6ff,0xbb201104,0xbb2ffb8b,0xbb2c04d2,0xbb1e84f0,0xbace9d6f,0xba51428b,0xba934bee,0xbaa1d838,0xbab68a02,0xbac65d28,0xbad31834,0xbae9fda4,0xbad6bb46,0xbacf41f6,0xbac90c1e,0xbac15d39, -0xbabb302a,0xbaa9ab9e,0xbaadbcac,0xbaaa77ed,0xbaa96bdb,0xbaa75593,0xbaa9aaf3,0xba9164d2,0xbaeed104,0xbb104015,0xbb3ceaf8,0xbafd31c7,0xbb29f176,0xbb61e21c,0xbb5bd3b4,0xbb58d9f7,0xbb49f5df,0xbb48a7a2,0xbb40abaf,0xbb396739,0xbb17ad27,0xbaddabfb,0xbb2b3d53,0xbb00e00b,0xbace5f3b, -0xba750551,0xb9ecb759,0xba2333f1,0xba79331b,0xba954f92,0xba967d4b,0xbab6b813,0xbaace448,0xba855787,0xba6fbb5c,0xba40b6e7,0xba00cfc0,0xb991df21,0xb9efbfb2,0xba9bfad1,0xbabbdaff,0xbacaad6d,0xbabadda2,0xba9a2bc4,0xba86edcd,0xba4c0e10,0xba9ea264,0xbab829de,0xbae98d6d,0xbaa4c694, -0xba872039,0xb95d640f,0xba7303c6,0xba4dfcdb,0x38acbe7a,0xb97cca9e,0xb9d3ea74,0xba59ec5f,0xba19eabe,0xba0a37ca,0xbab72c50,0xba01f295,0xb91335b5,0xba202aa8,0xba92b209,0xbaccfc80,0xbac42ea6,0xbb0f1b75,0xbb1c9096,0xbaf071b9,0xbacd3f25,0xba0e268e,0x3a0f1880,0x3ae4c0d4,0x3a949f82, -0xbab0e0c7,0xbb2acfd7,0xbb56986a,0xbb3853c6,0xbb11b752,0xbad69903,0xba7c43f1,0xbadf3eeb,0xbb14739e,0xbb48526d,0xbb0800ca,0xbaa03f37,0x3a90b15a,0xb998f5f0,0x389e9960,0x3b0c3001,0x3a9dc092,0x3a891231,0x39f0bbaf,0x3a5f7ef4,0x38fcf3c6,0xbb058448,0xb99cf802,0x3adaf7f1,0x3960aa4e, -0xba9abac2,0xbb1cda5c,0xbb07526d,0xbb7bf59f,0xbb6cee95,0xbb0db148,0xbab23622,0x39e315da,0x3ab0fba7,0x3b561fcd,0x3b065bf0,0xbb2927c5,0xbb87f989,0xbba8b334,0xbb870e2d,0xbb434dff,0xbafefd3b,0xba1dee7e,0xbb0beea0,0xbb4fb7ea,0xbb8b6d50,0xbb304a80,0xbad6c01e,0x3b6b31e7,0x39370ceb, -0x3ab3b6aa,0x3bb4006b,0x3b8ee14b,0x3b680cf5,0x3a3af02c,0x3ad7a0f9,0x3a9d8380,0xbb22d7a0,0x3af0aa70,0x3abab5d9,0xb8c38226,0xba8f7014,0xbaf8af7e,0xbaba2915,0xbb67bb86,0xbbb3c483,0xbb9aa21b,0xbb423f8f,0x3a487e64,0x3b8cb048,0x3c15508c,0x3be6b759,0xbaff9548,0xbbcc1763,0xbc0d140f, -0xbbf2a5df,0xbbae8c4d,0xbb481a6d,0xb9dd3674,0xbb128291,0xbb747725,0xbb9f1953,0xbb84f465,0xbafb95e9,0x3bdacbce,0x3b8d72c1,0x3ba772bc,0x3c1211b1,0x3c14af6d,0x3bfe4312,0x3b91d318,0x3be9bd1c,0x3b58577c,0xbbb28c7d,0xb9e5b587,0x3c427261,0x3acba234,0xbaca172c,0xbbd5c9ed,0xbc21cb5a, -0xbc0e1833,0xbb078014,0x3ba5510f,0x3b9aae79,0x3b6acfd0,0x3988eef3,0xbc26d2ed,0xbc39f895,0xbbe974b7,0xbb042b86,0x3a87a668,0x3acffcfa,0x3a7a2753,0x399af8ef,0x3a68fa9c,0x3934894d,0xb926ff69,0xba9053e8,0x3b6546d0,0x3b18c73b,0xbb20b216,0x3b306116,0x3bb44f1e,0x3b99e063,0x3b0eaed6, -0xbad996bd,0xbbf0d64d,0xbc451d53,0xbbabcf71,0x3c1994fc,0x3c772385,0xbca113dc,0xbc17ee31,0xbc33df3f,0x395d835f,0x3cbe9d19,0x3c1f74f1,0x3b30c8e4,0x3bad9987,0xbbdad75d,0xbbbadbc9,0x3bab759b,0x3b7d6b3d,0x3b05dfb8,0xba5ac29b,0xbadc4957,0xbb19f9cf,0xbb1adb77,0xba92e3b1,0xba2faa02, -0x33e9b045,0xb8be9b0e,0x3a865313,0x3b024fb5,0x3a9a820a,0x3b4ee888,0x3bafc7f2,0x3b9e1ae5,0x3b154aa8,0xbadd02e6,0xbab2762b,0x3b0553d8,0x3c2790b8,0x3c7a98bb,0x3bcb79a8,0xbc8786ee,0xbca0bd7d,0x3c22e0de,0x3cc0114f,0x3bb4a19a,0xbc1289fe,0xbc8db97d,0xbc580a57,0xbac552ba,0x3c896bef, -0x3bc9877f,0x37945431,0xbb2e09f3,0x3b0aae65,0x3bb1b94a,0x3bdf2ca2,0x3bd5adf6,0x3b9ded97,0x3b0376c0,0xba42a334,0xba9c4736,0x39cda84a,0x39669c2f,0x3a01afb3,0x39bad5d4,0x3b66641c,0x3b3c3b83,0x38b776e9,0xba5bb7b9,0xb9a89c00,0x3a022ca3,0x3bae695c,0x3bc0e4cf,0x3b9fcaa4,0xbbadde46, -0xbc101fa2,0xbb0b7098,0x3b780d4a,0xbbfaff92,0xbc4c8ee3,0xbc1405dd,0xbb9c516b,0xbb2cc0c0,0xbb784245,0xbb83223f,0x3a972127,0x3beda507,0x3c3e5724,0x3c0d29f1,0x3c377180,0x3c24cec8,0x3bdee310,0x3b113e8d,0xb9800f25,0xba748793,0xbb207ee8,0xbb5a924e,0xbb888b5b,0xbb62f0cb,0xbb52b105, -0xbb8304f6,0xbb8f7355,0xbb61cd1a,0xbaa2e138,0xbb3f8241,0xbb34e447,0xba975150,0xbac9c160,0xb9123499,0x3a5da888,0x3b034f55,0x3ab14b97,0xba9eb038,0xbb836378,0x3bf283ff,0x3c13233c,0x3c595816,0x3c6b32dc,0x3c54f5aa,0x3c253bee,0x3c2246d5,0x3c4a0faa,0x3c00acfa,0x3b8e9fc5,0xb995fbaa, -0xbb073efe,0xbb3dc305,0xbb07e5e3,0x39072d6a,0x3aa8b04c,0x3b00221e,0x3b1898cc,0x3b0dd5af,0x3a9dd702,0x3a8e9578,0xb8d83a55,0xbadc31a3,0xbb1de413,0xbb5bb11f,0xbb5cfdf2,0xbb07540c,0x392a1ce1,0x3b111c98,0x3a6cde90,0x3a4c764f,0x3aa9294c,0x3b26a1e6,0x3b859957,0x3baa8395,0x3bb4bc4d, -0xbc399103,0xbbe660fe,0xbbed3775,0xbbc1fac8,0xbb984640,0xbb0537cc,0xb9ef9f0e,0x3a80e617,0x3af3b50e,0x3b40a8db,0x3b7901a7,0x3b73c241,0x3b5443ab,0x3b086d6f,0x3b029a59,0x3b1faa92,0x3b56486f,0x3b3e5957,0x3b295708,0x3b1d09b0,0x3a83c162,0xba972a97,0xbb90afc1,0xbb9e77d1,0xbb9bc672, -0xbb80cba4,0xbb8ad4fe,0xbbab962d,0xbbbd0f27,0xbbe9341d,0xbbf94ce7,0xbbe07f5d,0xbc1e5a45,0xbc3df23b,0xbc5c509e,0xbc5aa7f4,0xbb1525ff,0xba0bc6d9,0xb991f9aa,0x39fd03e8,0x3a81eed1,0x3ac461d6,0x3b1b365a,0x3b5af1a5,0x3b6120ff,0x3b5b0e50,0x3b5ef18a,0x3b3d41fe,0x3b2e2f42,0x3b218ee4, -0x3b330c14,0x3b3a766a,0x3b464d63,0x3b369085,0x3b288b22,0x3b37188b,0x3a1f7055,0xbabc0951,0xbb653114,0xbb633fa8,0xbb8d5916,0xbb92a45c,0xbbcfcc95,0xbbe1a01a,0xbc0f6177,0xbc0e9ae3,0xbc1d597b,0xbc289a7d,0xbc0fc995,0xbbf0dd6a,0xbbd00b54,0xbb85bdb9,0xbaff4b4d,0xbaab73e6,0xbac88674, -0xbad8b6cb,0xbae1dabb,0xbaf514ba,0xbb0f744a,0xbb22e94e,0xbb18301c,0xbb02ad1d,0xbad34950,0xba99c870,0xba5614d2,0xba194879,0xba0e5388,0xb9f9205b,0xb9c4966d,0xb977e20a,0xb9145630,0x38f59f44,0xba8e7bc5,0xba7b8cda,0xbabb0d71,0xbaeec28d,0xbb12786b,0xbb141bf4,0xbb08793b,0xbb00a4cb, -0xbb0c34a0,0xbb03bae1,0xbb074712,0xbb0e53fd,0xbb077c8f,0xbb06ab94,0xbafa7161,0xbae7f66c,0xb9dc8a1c,0x393c51eb,0xb9130953,0xb9a08f76,0xba082a73,0xba30d738,0xba49c3ae,0xba787d78,0xba41c6bc,0xba31d3b6,0xba2e060c,0xba27c2cd,0xba1b9904,0xb9f8301a,0xb9edf006,0xb9d6ce3f,0xb9c8a776, -0xb9ad8273,0xb9a67384,0xb8b6d488,0xba2ce767,0xba73fc5f,0xbac7be75,0xba521ab4,0xbaa8c2ac,0xbb05864f,0xbb02d618,0xbb031e6e,0xbaf07756,0xbaf50c1c,0xbaeaa35e,0xbae91268,0xbaab3e8d,0xba580881,0xbaadb111,0xba493a61,0xb9ade0d3,0xba45eb1c,0xb9c84c19,0xba0f1dc0,0xba45dcad,0xba6ec302, -0xba7d2d42,0xba9f2c99,0xba98ea9f,0xba836bac,0xba395cec,0xb9fd9a84,0xb98c5892,0xb8b3dcba,0xb9809260,0xba4e98de,0xba9707f3,0xbaacb23c,0xbaa8254b,0xba91c454,0xba8286d2,0xba44cfe0,0xba961cf3,0xbaaba8a5,0xbadf5812,0xba86eea5,0xba57ce33,0xb94343d1,0xba4ecd0c,0xba269913,0x398a6550, -0xb93977d3,0xb9b47f9b,0xba127615,0xb9efdb2b,0xb9bc1737,0xba8e2cd5,0xb9cb7460,0x3914bfd6,0xb9aef186,0xba1f492d,0xba88c376,0xba92eb5f,0xbafc76c9,0xbb1385de,0xbafcab07,0xbaa579d5,0xb9635c50,0x3a498926,0x3af2bfff,0x3abffc2b,0xb9eac408,0xbb03cd6c,0xbb3cac21,0xbb319eb0,0xbb1d954f, -0xbb008c72,0xbaa57db7,0xbaf423ac,0xbb161d59,0xbb4b6978,0xbae0165a,0xba6ad0a3,0x3a51eb4d,0xb977946c,0x38d67196,0x3b0d1c29,0x3a8f735a,0x3a836cdb,0x3a67a03a,0x3a6f1c68,0x3996fa1e,0xbaa9e669,0x39045cda,0x3aba920f,0x372b4e3f,0xba1ba0a0,0xbad82f13,0xbadd2ca8,0xbb6d411b,0xbb65f9b9, -0xbb2c80b1,0xba686623,0x3a87dee2,0x3adb4cbd,0x3b64928d,0x3b26c2f1,0xba83565e,0xbb50fc5d,0xbb94dda0,0xbb847305,0xbb639ad3,0xbb315727,0xba9e445f,0xbb26d0fa,0xbb5c20e5,0xbb95c1f0,0xbb0a590c,0xba9b7d7a,0x3b481f0b,0x397b204c,0x3ab2f57a,0x3bbb20a3,0x3b7b5a70,0x3b4f4997,0x3aaec941, -0x3ad56201,0x3ab8d820,0xbadc7cf8,0x3af0b693,0x3b13dfc0,0x3a2762f5,0x39c4d7f2,0xb9fa522e,0xba06f74e,0xbb47c00d,0xbbb1a83d,0xbbafc0ba,0xbb1c894f,0x3aa133c2,0x3b87abdc,0x3c0eb6b8,0x3c0281bb,0x3a68aedd,0xbb92a511,0xbbf94cca,0xbbf26063,0xbbd4c978,0xbb9b44db,0xbaecd1e8,0xbb42ff58, -0xbb866ae9,0xbbaf1b7e,0xbb64c563,0xbad046b3,0x3bcc1ef4,0x3b62f49c,0x3b8b9011,0x3c1f0ba0,0x3c1a685c,0x3bff2a46,0x3baba87c,0x3bda739f,0x3b42406e,0xbb85ecfa,0x3a2fc14b,0x3be71b91,0xbad7a95b,0xbb317a00,0xbbd5986a,0xbc1b0575,0xbc20f4ea,0xbb4862c4,0x3bcc221f,0x3ba5bc5e,0x3b9d2251, -0x3b7f65e6,0xbc0ce1d3,0xbc34cdf3,0xbbeea279,0xbb14e003,0x3a3dc707,0x3ad0bf08,0x3aa89a0e,0x39a1d3ef,0xb79ddafe,0xba7b3604,0xba73ee71,0xba95f2b0,0x3b55e55b,0x3b22550a,0xbb3d281d,0x3b8b9f0a,0x3bcd3adf,0x3af51e63,0x3aa9c8c4,0xbb1677ea,0xbbf46114,0xbc24b33f,0xbb476891,0x3c1c7875, -0x3c39eefc,0xbc6a5341,0xbb9b17c2,0xbc0d146e,0x3ab159f5,0x3cc3cdc3,0x3c3b3f19,0x3b920f63,0x3be03993,0xbbb209e7,0xbbb19781,0x3b2aad72,0x3bb6086a,0x3b8b7f85,0xbaffc8c0,0xbb3921ea,0xbb727698,0xbb2c44a6,0xbaee3e31,0xbad962dd,0xbaadcaa7,0xbad33fb5,0xb9edec20,0x3aee28b5,0x3aa27765, -0x3b51c12b,0x3b9cad78,0x3b6263cd,0x3a11746b,0xbb4a914b,0xbad6e642,0x3b27c2ea,0x3c2bcf8a,0x3c5adbb4,0x3b4f05fa,0xbc90b175,0xbc863473,0x3b98c68d,0x3cb2d7e3,0x3ab8d5e0,0xbc50ef16,0xbca75321,0xbcac13c9,0xbbf01451,0x3cb0eab7,0x3be6dd18,0x3a88f610,0x3a1d4315,0x3add632e,0x3b6bebfb, -0x3baff397,0x3bb7985f,0x3b936f8a,0x3b57433e,0x38885c3b,0xba051512,0x3ac3a989,0x3aa0bbd6,0x3a9941db,0x3a487d2b,0x3b524e38,0x3b0c55ff,0x39032822,0xbab32a42,0xba52169e,0x3a1c0281,0x3b943507,0x3b830239,0x3ad0be73,0xbbb38817,0xbc02fdee,0xbb23aff9,0xbae5d0c8,0xbba8f0ec,0xbc3e9798, -0xbbffabc6,0xbb8864e7,0xbb5af1a7,0xbb3bd02e,0xbb324724,0x3b5fb5fb,0x3ba4f0d1,0x3c1b4fdd,0x3c1dabe9,0x3c3bc9c0,0x3c2cb5f4,0x3bebba7a,0x3b201c3e,0xbab18b4f,0xbb20ca7f,0xbb79c6de,0xbb8c2050,0xbb8e93f7,0xbb8f89f0,0xbb836dff,0xbb827b52,0xbb81657a,0xbb4c6f1f,0xbab3621b,0xbb2325a6, -0xbb2ab96c,0xbac088a6,0xbad7006f,0x396caa3e,0x3a2b0f4e,0x3afc7e3b,0x3aa6ed36,0xba0e7fe7,0xbac4b58f,0x3bc3db60,0x3bb3cd9b,0x3c45c800,0x3c729446,0x3c63f4cd,0x3c3eed87,0x3c2d1ef4,0x3c3dec53,0x3c0c73aa,0x3bc383f8,0x3b268aa4,0xb9ed2968,0xbb0b766a,0xbb18dedf,0xb934369a,0x3aa67c7d, -0x3b079936,0x3b074f2a,0x3af9c596,0x3acb5dc0,0x3a77c541,0xba15e2c3,0xbb2b3fa7,0xbb4889a6,0xbb5f47bf,0xbb53e16b,0xba13318e,0x3ae67246,0x3b2ad5a9,0x3a8fa88f,0x3a445865,0x3a76caa4,0x3b34c68e,0x3b8f9c23,0x3ba21442,0x3b955103,0xbc2704f5,0xbbe1e712,0xbbc691c1,0xbb980281,0xbb6db679, -0xbab012c9,0x38ca0b1d,0x3ab8078f,0x3b10d010,0x3b3edddc,0x3b704400,0x3b49ebdf,0x3b3f2f88,0x3b110255,0x3b2a9042,0x3b39ecfb,0x3b420917,0x3b37dbc3,0x3b0eda62,0x3ae8d22a,0xb98ceb73,0xbb1d79b4,0xbb9f63a1,0xbb8a9f92,0xbb8199b5,0xbb7bae11,0xbb86dc3e,0xbb9b5854,0xbb8f9751,0xbbab34a6, -0xbbaeb8e8,0xbb95b6fd,0xbbd0026f,0xbc0a8e68,0xbc3c3245,0xbc3e4e8f,0xbb5358f6,0xbaae1d0c,0xba928af6,0xba058840,0xb9062d28,0x3a12718b,0x3ad6ecea,0x3b4059e3,0x3b5acda7,0x3b66ca97,0x3b75755a,0x3b5fd852,0x3b572f20,0x3b543def,0x3b4efc93,0x3b45ae23,0x3b3b72b9,0x3b1cada5,0x3aedbfb3, -0x3ae745fd,0x3931fd56,0xbad0f9f2,0xbb65f00c,0xbb553067,0xbb67ec57,0xbb581937,0xbba0cb16,0xbbb9dbb4,0xbbf333e7,0xbc00c870,0xbc139e97,0xbc243e97,0xbc151904,0xbc06d994,0xbbfc35e5,0xbba7ba60,0xba9fe6ad,0xba49a41f,0xba79bdfd,0xba7ad659,0xba72933c,0xba8976e9,0xbab6bdf5,0xbae5b6f2, -0xbae10075,0xbabebf30,0xba8d78c2,0xba2866db,0xb9904855,0x37f8ba9c,0x39221c6b,0x39b0040b,0x3a12c459,0x3a4485ce,0x3a7a297e,0x3aa0afe7,0x3926f46d,0xb7118bca,0xb9f749bb,0xba6ae932,0xbac7616c,0xbaedb23b,0xbaeea3e3,0xbae6bbdb,0xbafcc640,0xbaf9109c,0xbb054a5e,0xbb0dc184,0xbaf4a6b3, -0xbad1c289,0xbab7d93b,0xbaaaf2dc,0x373b4610,0x399feef6,0x38b71dc4,0xb8af9e2d,0xb997ed84,0xb9da579a,0xb9f0c98e,0xba126a33,0xb9b536cf,0xb99883bb,0xb99eecaa,0xb99cf96d,0xb98e308f,0xb946fb01,0xb90544fe,0xb88a7a41,0xb7cd2e02,0x387e3a12,0x38dd135b,0x39ae416d,0x366b86bc,0xb8e91d98, -0xb9e0a972,0xb997a695,0xba04d2e7,0xba723ee6,0xba7803d5,0xba868270,0xba807293,0xba8bd2e7,0xba88c545,0xba95213d,0xba61164f,0xba27349f,0xba00724f,0xb9548107,0xb8b201c7,0xba0e258a,0xb96dc66a,0xb9d8c5bf,0xba03f261,0xba29348f,0xba4a0dbf,0xba8901a6,0xba856f2b,0xba6dba30,0xb9f740bf, -0xb969ab33,0xb8a739ab,0x38bb2cd0,0xb805c3d1,0xb9b2a1ae,0xba5812c8,0xba87a6ff,0xba8e25a2,0xba8160aa,0xba6f112d,0xba365ed0,0xba82f947,0xba93d6f6,0xbad00e17,0xba3af697,0xba11bc0b,0xb94f3a70,0xba2008fd,0xb9f0de8e,0x39af161b,0xb9127208,0xb9962b36,0xb9907a33,0xb992fefe,0xb9216ea5, -0xba3e3462,0xb95ad4c5,0x3a0cb0a8,0x3853b0c9,0x38522e93,0xb9cc6122,0xba3c245b,0xbae14d7f,0xbb0bccf2,0xbaf29475,0xba6d333e,0x38cd3ad3,0x3a62b242,0x3af6e2e8,0x3ae5c237,0x3a069654,0xbaacfe81,0xbb1a2155,0xbb22ed89,0xbb1fab23,0xbb0dc82c,0xbac6357a,0xbb012d40,0xbb10e6dd,0xbb42a3ce, -0xbaa30594,0xb9fe294f,0x3a045692,0xb8a5c097,0x394a8fd4,0x3b012df1,0x3a743737,0x3a700a00,0x3aa7b01d,0x3a80dcc1,0x3a056724,0xb9eb56f5,0x3a1dc6b2,0x3abb06ba,0xb7a267b4,0x391a7d3c,0xba5ce37c,0xbab3b0b2,0xbb66e989,0xbb665cc0,0xbb38116b,0xb9c7948b,0x3accac82,0x3ae301bf,0x3b657f8a, -0x3b3da139,0x3a3f4880,0xbb0af3a8,0xbb75d527,0xbb7888d3,0xbb732ac7,0xbb543587,0xbaed4de0,0xbb38d6a2,0xbb5a67f7,0xbb961c9b,0xbab0b561,0xba1ad07f,0x3b1c5497,0x3a05363d,0x3ab8fecf,0x3bb10eba,0x3b4959f2,0x3b2df275,0x3aff840a,0x3ad3d5a4,0x3adbc7b8,0xba2647f6,0x3afdd133,0x3b57a485, -0x3ac59334,0x3b0d634e,0x3aa3c38b,0x39d5ad9e,0xbb343836,0xbbb01a35,0xbbb24920,0xbad6ee87,0x3ad62c2c,0x3b6e527f,0x3c02ebd2,0x3c0df965,0x3b819627,0xbb24260c,0xbbcf1b0d,0xbbe7f0f0,0xbbeb5ea4,0xbbc6e166,0xbb52356f,0xbb774490,0xbb923f73,0xbbbe2f96,0xbb2f0fd1,0xba6ef6f7,0x3bb602fe, -0x3b409336,0x3b764aa0,0x3c26062b,0x3c1a9ffd,0x3bfb9c9b,0x3bc82b3b,0x3bcbdbb5,0x3b417ec1,0xbb11a34b,0x3b03a280,0x3b22973f,0xbb8a5f3b,0xbb84d615,0xbbe1f876,0xbc237337,0xbc2f46bb,0xbb878274,0x3bd05d68,0x3ba34833,0x3bb03c4b,0x3bdd7a64,0xbbdb4b10,0xbc2a99ba,0xbc00070c,0xbb1779d8, -0x3a3f4bf4,0x3acf5940,0x3af96d51,0x3a5bbd14,0xb9b0a246,0xbab4e44f,0xba85e325,0xb9b7ae4c,0x3b3e69df,0x3b1d2d2a,0xbb42a8bb,0x3bbd8ac5,0x3be81c46,0x38be02ba,0x39af6274,0xbb56627e,0xbbf1d81e,0xbbff114b,0xba667bc9,0x3c15c03b,0x3beecfb1,0xbc156734,0xba4fc27e,0xbba9aeaf,0x3b477438, -0x3cb8d7a5,0x3c55c01e,0x3bd95a7a,0x3bec96bc,0xbb89d659,0xbb9eabb5,0x3a2312df,0x3be7b70f,0x3bd4b49b,0xbb1f7a0d,0xbb562509,0xbb8c5da5,0xbb29f696,0xbb118f2c,0xbb21210d,0xbb376029,0xbb4036f6,0xbae0f81f,0x3ad2b953,0x3a9c6561,0x3b463143,0x3b85b926,0x3b0c3172,0xba870536,0xbb898c2c, -0xbaa1cc4e,0x3b5ae674,0x3c1d40c9,0x3c2b0923,0xb7d18824,0xbc8f5d34,0xbc59d6b7,0xb8c53ebf,0x3c80aa20,0xbb9f9a8c,0xbc82bdd8,0xbca4565c,0xbcd03813,0xbc428cff,0x3caf9349,0x3bf5bc2a,0x3b385a18,0x3b63fb1f,0x3ab73bca,0x3af81ca3,0x3b81590b,0x3ba8aef6,0x3b9be2bb,0x3b90e0ca,0x3aa6889a, -0x39ea65ab,0x3b1107b9,0x3af21b73,0x3ac82e3f,0x3a91b5a7,0x3b2a669e,0x3aad5fbc,0x39569c0e,0xbae02a07,0xba8da037,0x3a81e6e0,0x3b5398ef,0x3adbe1d7,0xbad4cac0,0xbb974740,0xbbc572dc,0xbafc2aa6,0xbbb9dd10,0xbb428b42,0xbc116bc1,0xbba1fd7d,0xbb02e438,0xbb04f9be,0xb9a54624,0xb9af40d3, -0x3b96c688,0x3b5f01b7,0x3bffb921,0x3c2eb898,0x3c367357,0x3c27dbe2,0x3bea8536,0x3b2baa00,0xbaeb1e05,0xbb659bcd,0xbb98a41b,0xbb9fa4d1,0xbb8e17af,0xbba2bff2,0xbb95f85e,0xbb829f67,0xbb5ab3ef,0xbb249679,0xbac27455,0xbae1b9bd,0xbb0960aa,0xbae93956,0xbadf42be,0x39dee4e1,0x3a00b8fd, -0x3ab4b31f,0x3a8b1947,0x3a628f58,0x39a1e3d2,0x3b56639c,0x3a87bd07,0x3c0658be,0x3c4488cc,0x3c49d2d8,0x3c3efbc4,0x3c3174c4,0x3c375334,0x3c19f41e,0x3bf43fc5,0x3bb8d130,0x3ae77242,0xb9fd2f9e,0xbab83571,0x38aa3fc1,0x3ab9c763,0x3b11da9d,0x3afc9182,0x3ae4af77,0x3aee8a17,0x3a387c12, -0xba95898e,0xbb60721c,0xbb74d616,0xbb62b738,0xbb3d6f2f,0x3a20bce7,0x3b365e1f,0x3b2aac72,0x3aad78e6,0x3a80db36,0x3a862ef6,0x3b569832,0x3b973de5,0x3b829dd8,0x3b3fff8c,0xbc0072e6,0xbbc5897b,0xbb6825ed,0xbaf16ebe,0xba88a4da,0x3928ff4a,0x3a7a550a,0x3aee3672,0x3b1e2210,0x3b31b6b4, -0x3b4fc10d,0x3b12f066,0x3b15de0b,0x3b0ef268,0x3b36587d,0x3b35f6ba,0x3b1ec5c7,0x3b1a8574,0x3aba20ed,0x3a20331e,0xbada3e21,0xbb62a0bd,0xbb9c379d,0xbb6bc387,0xbb581b9a,0xbb7cf552,0xbb84c520,0xbb89a99e,0xbb3fb966,0xbb4b6dc1,0xbb3a1bb2,0xbb1181a6,0xbb4dd7c6,0xbba6a0fe,0xbc0af91e, -0xbc0987fc,0xbb8999af,0xbb15fdd6,0xbb0f109f,0xbaecb852,0xbac57a7c,0xba1e7d1e,0x3a2364db,0x3b0497ae,0x3b34c54b,0x3b551a3d,0x3b744ffd,0x3b6286b6,0x3b5754e0,0x3b51fb34,0x3b43bc4a,0x3b396837,0x3b2fd90a,0x3afebe16,0x3a8afa58,0x3a359136,0xb97d02e9,0xbacbb347,0xbb499f9b,0xbb45a65a, -0xbb4d0527,0xbb424d8c,0xbb8469df,0xbb9caaf6,0xbbc925ca,0xbbe56db9,0xbc072927,0xbc1b2ecc,0xbc1597ca,0xbc11c532,0xbc120905,0xbbcba778,0xba3cb69c,0xb9ce488c,0xb9e7f11a,0xb97191a4,0xb8920af2,0xb9006700,0xb9d04ccf,0xba2e268a,0xba424785,0xba1bdcdb,0xb99e5c87,0x37a90166,0x39ad26ec, -0x3a1b94cf,0x3a3f9a75,0x3a662c68,0x3a8d1900,0x3aa1b2ae,0x3abec19d,0x3adc582c,0x3a83ee5b,0x39f9fede,0x37b245b9,0xb9e85664,0xba948463,0xbadef170,0xbaf23bcc,0xbaf72cf5,0xbb032a10,0xbb0854c3,0xbb140425,0xbb1b1eda,0xbaf8f932,0xbab3a009,0xba8de9e0,0xba82d1fd,0xb983d433,0xb96500b4, -0xb9974405,0xb9d6c1e7,0xba0b5f46,0xba129bd4,0xba02ed10,0xb9f169f4,0xb9a70b6f,0xb99ba98a,0xb9b582af,0xb9ba7ce6,0xb9b885f4,0xb9a43627,0xb983a979,0xb948fc2e,0xb91dda45,0xb862f793,0x36af4333,0x39279d78,0x387fc796,0x382fa098,0xb7ddca6c,0xb9dc3cde,0xb9e878b6,0xba15c054,0xba2569da, -0xba4a4927,0xba5d7e90,0xba7b4c78,0xba816039,0xba9a2e92,0xba8ba82d,0xba88eb21,0xb9e59155,0xb9be228e,0xba11dde9,0xb9aa856a,0xb8ac9bfd,0xb983841f,0xb9813ee9,0xb9c63b96,0xba0f837a,0xba66eb12,0xba652706,0xba4707ba,0xb978683c,0x37a7f816,0x38751aae,0x397a391c,0x39357f3b,0x38f94a93, -0xb9f6d365,0xba3d57d6,0xba65f8ee,0xba565192,0xba4dc3f2,0xba205e58,0xba5d32e6,0xba73dbe2,0xbab7e3f5,0xb9cca239,0xb9a34d40,0xb9718e6d,0xb9e5099a,0xb9a47b44,0x398a8f6c,0xb932705a,0xb98ed8db,0xb83d80b7,0xb92fcdb6,0xb6bf8b08,0xb9c9174d,0xb86943d5,0x3a6884e3,0x39e6f542,0x3a3f14be, -0x3997d0be,0xb981086e,0xbac864f0,0xbb03834e,0xbad89f2e,0xba0effc2,0x39bd1c6f,0x3a5c35de,0x3af4949e,0x3b0398a5,0x3ac31518,0xba1179db,0xbae33719,0xbb121e96,0xbb193a40,0xbb113d42,0xbadc5e34,0xbb03f6a3,0xbb048c5e,0xbb2d1926,0xba3fc693,0xb85836cb,0x39857c7f,0x38f37eee,0x398e9b6d, -0x3acb67bf,0x3a334106,0x3a437d0d,0x3ac97e28,0x3a7e31de,0x3a2ad4c7,0x398e66df,0x3a80ba24,0x3ac1fe2b,0x37416e5c,0x3a566261,0xb8c31ccb,0xba724c46,0xbb5ee49e,0xbb65a535,0xbb35222e,0x38f075bc,0x3b01cd0f,0x3ad01f03,0x3b5c466a,0x3b4c8074,0x3b2288c1,0xba7d76ed,0xbb38857d,0xbb661537, -0xbb708674,0xbb6334de,0xbb17b260,0xbb4024a7,0xbb493f98,0xbb88ea6e,0xb9f32b78,0x386fcad7,0x3ae39b35,0x3a5f1ea5,0x3ab8f35b,0x3b92cd4d,0x3b0921e7,0x3afe2062,0x3b18e9b9,0x3abbe873,0x3ae89d01,0x39b5ef51,0x3b03774c,0x3b853000,0x3b150735,0x3b7ceafb,0x3b443cfd,0x3acb9ba6,0xbb229e92, -0xbbaad909,0xbba87beb,0xba6873a3,0x3af9ec76,0x3b3d5334,0x3beaaf9c,0x3c15b1e6,0x3be55a03,0xb9b83a46,0xbb9e5f12,0xbbdbe9cd,0xbbf2645a,0xbbe0acfb,0xbb8ff22f,0xbb8fb732,0xbb9640c3,0xbbc123e9,0xbad8d5bc,0x37665d6e,0x3b9e1fe0,0x3b311afb,0x3b63ec78,0x3c238cc6,0x3c13a8a2,0x3bf03d4d, -0x3bdf1dd1,0x3bb6f0fd,0x3b3dd326,0xb9d9f97c,0x3b4b66d4,0xba7c497b,0xbbc28406,0xbbb5e50a,0xbbfce335,0xbc2efabb,0xbc344dca,0xbba0c1ca,0x3bc7e54b,0x3ba22796,0x3bbcd0ad,0x3c1042f2,0xbba1b512,0xbc2185c1,0xbc08f26d,0xbb27706b,0x3a4b261f,0x3af64059,0x3b2fe609,0x3ade33e2,0xb95fc102, -0xba9a3e24,0xb9fb0057,0x3a7a7244,0x3b2546d3,0x3b0d598a,0xbb3eb1ce,0x3be570e5,0x3bfed42e,0xba569a4d,0xba342a92,0xbb930e00,0xbbf0449c,0xbbb55df2,0x3a80f2bb,0x3c059f10,0x3b80f6b1,0xbbaba90c,0x3b13c0fd,0xba4ba670,0x3bab948f,0x3ca074f8,0x3c66731d,0x3c0fb42d,0x3bdc5343,0xbb501644, -0xbb8dca05,0xba29b07c,0x3c05fc65,0x3c0b4d7e,0xbae736c9,0xbb547062,0xbb958d23,0xbb1d576a,0xbb16649d,0xbb3788dd,0xbb82cb9a,0xbb6ae8cd,0xbb2091d0,0x3a97135e,0x3a78a1b4,0x3b2acbd6,0x3b6145d5,0x3a773287,0xbb1b064d,0xbb9d21da,0xb94836a8,0x3b8d6474,0x3c04d93a,0x3be4004a,0xbb553086, -0xbc8887c5,0xbc357666,0xbb673dfd,0x3bc56822,0xbc3dff77,0xbc95ee29,0xbc8f22ce,0xbcd42112,0xbc77a74d,0x3c745df8,0x3bff7e87,0x3bb97b07,0x3baf266b,0x3ada53b6,0x3a4b852e,0x3b24633b,0x3b9a0e68,0x3ba5cd3f,0x3ba787be,0x3b2ac9ec,0x3abd247e,0x3b0e0191,0x3b028111,0x3acafe2c,0x3ab05be9, -0x3aeb96c5,0x39e88a6f,0x390deb07,0xbaf142b1,0xba8f413b,0x3abf2af6,0x3addab92,0xba1d4c79,0xbb88fe61,0xbb542897,0xbb6fe802,0xbad18626,0xbbe11a15,0xba4fc10d,0xbb928f46,0xba8e0118,0x3a5dddce,0x3a449caa,0x3b1c7424,0x3b01b4d4,0x3b95b401,0x3b0d80a4,0x3bc2db0c,0x3c2b1953,0x3c25980f, -0x3c19c5c9,0x3be5d784,0x3b2d7eea,0xbad9cff1,0xbb80decd,0xbba10193,0xbba6b827,0xbb8ca9e5,0xbba7e92f,0xbb9ef50a,0xbb83a4ef,0xbb2e62a8,0xbae3d79d,0xbac5e578,0xba6affdc,0xbabf301e,0xbb035627,0xbad7362e,0x39ef3092,0x39bdbaf9,0x3a4d1c40,0x3a8aa0c1,0x3b2b72d7,0x3ad4e975,0x39a40990, -0xbb496a91,0x3b2ba35b,0x3bd4743e,0x3c081d6f,0x3c2669fc,0x3c2f540a,0x3c34f02e,0x3c273c04,0x3c108fb8,0x3c07077c,0x3b8f687b,0x3aecb624,0x381addb6,0x3a6b1fec,0x3ad9cf6b,0x3afdfa0d,0x3aef1972,0x3acd0c31,0x3adb2792,0x391f28df,0xbaf6d811,0xbb836d4e,0xbb8cac0e,0xbb611b78,0xbb11405d, -0x3aad6349,0x3b50c875,0x3b1b9e36,0x3ae63533,0x3accbe36,0x3abcae9a,0x3b726429,0x3b9140a0,0x3b328dcf,0x3aa1065a,0xbba5b2e0,0xbb80b86b,0xb960c7d7,0x3ad58e4b,0x3b1a43b4,0x3b0943a2,0x3af11f55,0x3b055768,0x3b1543e3,0x3b12fef4,0x3b16048d,0x3aa663d9,0x3ac66708,0x3b0222f9,0x3b2bfd2f, -0x3b26716b,0x3ae84ca0,0x3ae39e6b,0x3a0fae7f,0xba424643,0xbb3b139c,0xbb873bd4,0xbb8a8dff,0xbb52a825,0xbb45cf3c,0xbb7babca,0xbb7b174d,0xbb60df7a,0xbabf5167,0xba821907,0xb9d022ef,0x38cf9153,0xb8d2b38c,0xbac7e337,0xbb916f67,0xbb977b37,0xbba6a919,0xbb62e4ac,0xbb563720,0xbb3dfe74, -0xbb1d010f,0xbaae0724,0xb7ba1c6c,0x3aa9c886,0x3b08083c,0x3b2b2c76,0x3b491103,0x3b3bdb49,0x3b2e0150,0x3b25bd27,0x3b17bc6c,0x3b183f80,0x3b1e6ba2,0x3ab76018,0x398d278b,0xb9c63e34,0xba3720f0,0xbad1d674,0xbb2e25f1,0xbb387d32,0xbb3f8a58,0xbb422876,0xbb6b9989,0xbb8a3c33,0xbbaa5656, -0xbbcecf5d,0xbbf60f03,0xbc0f972b,0xbc11e8b9,0xbc176b24,0xbc1e6504,0xbbe74033,0xba0a010a,0xb998b248,0xb92236d7,0x396e128c,0x39f40aab,0x39ffb31d,0x39b13f43,0x398f0948,0x394ea465,0x39a81d9a,0x3a149239,0x3a4c8d92,0x3a84dc8c,0x3a9ce198,0x3aa1768c,0x3a9bcdb4,0x3aa05949,0x3aa328bb, -0x3ab44430,0x3abdb0b6,0x3a94e8d6,0x39d0a652,0xb8450330,0xba0b5605,0xba9c6b48,0xbafaf0cb,0xbb0c09e6,0xbb144349,0xbb198eb5,0xbb22edf8,0xbb2fcdae,0xbb364993,0xbb0d7406,0xbabb3753,0xba8aa68f,0xba7c6406,0xba762a2d,0xba89e321,0xba80e346,0xba84ec4f,0xba838512,0xba6a037f,0xba3b8dfd, -0xba0d5a49,0xba026809,0xba08612f,0xba1bd4e2,0xba2037e5,0xba21b8c9,0xba199d6d,0xba16ef86,0xba0d2b3f,0xba09e491,0xb9e9afbb,0xb9d0460a,0xb9adb251,0xb9acab4c,0xb9b3c061,0xb991bc30,0xba790bc0,0xba6dd8d3,0xba68c342,0xba7d81b7,0xba957ca3,0xbaa913fc,0xbab9cf99,0xbac292d9,0xbae3c84e, -0xbae077e7,0xbae990ff,0xba7cfbf0,0xba83ab3a,0xbaadfdd8,0xb93c8ddf,0x381e5d67,0xb928c74b,0xb86e5dc4,0xb937dde2,0xb9bbf87d,0xba44864f,0xba48837b,0xba26efd4,0xb8a414e7,0x392bf655,0x38af22e9,0x3999f7c8,0x399940c1,0x3a00079b,0xb93a02f3,0xb9f0e4fc,0xba3daac3,0xba31dbbe,0xba3242ad, -0xba172026,0xba335495,0xba336d5d,0xba8b43e6,0xb8d0c828,0xb84dd847,0xb9342479,0xb94bf67c,0xb9054d9f,0x391f2faf,0xb9374b3d,0xb96e80d3,0x39319c4f,0xb8a916b4,0x388b877c,0xb7b5665a,0x38df5638,0x3a9b20b7,0x3a39c2fc,0x3aa40b7e,0x3a5d56dd,0x393e7094,0xbaac6cd9,0xbaee87e7,0xbabad5a4, -0xb988fd82,0x39fff7e5,0x3a23c5cb,0x3addd647,0x3b09ef79,0x3b16ed07,0x392ad521,0xba922c86,0xbb02b7e2,0xbb105c31,0xbb116ff6,0xbaee0cb8,0xbaff7d1a,0xbae9fa29,0xbb0d1666,0xb95db7c9,0x39ca41f3,0x389be657,0x3999c359,0x39974567,0x3a75e45f,0x39abb798,0x39f62e0c,0x3ad152b2,0x3a5b7409, -0x3a33a838,0x3a51052c,0x3a9ac89c,0x3ac00f8b,0x386de6f6,0x3aa77a9d,0x3a0db43b,0xb9c29518,0xbb4b7a4b,0xbb589aae,0xbb295668,0x3a04c76b,0x3b0cb11a,0x3a9d4ab2,0x3b442058,0x3b4c129f,0x3b82917c,0x39018800,0xbaf32a01,0xbb528867,0xbb6250a8,0xbb668372,0xbb2d1f88,0xbb3dd058,0xbb2d3447, -0xbb5fa698,0x39eb2516,0x3a428a68,0x3a9cc4cc,0x3a9ebf43,0x3aa76921,0x3b477ad4,0x3a79d50a,0x3a89419b,0x3b1a527d,0x3a8ba240,0x3adab06c,0x3a9d6c6b,0x3b00299c,0x3b926804,0x3b3a1cef,0x3ba9585a,0x3b92fb84,0x3b322814,0xbaff5507,0xbb974469,0xbb97c456,0xb970dcc1,0x3afe6667,0x3aea4064, -0x3bc6c7b1,0x3c1543a8,0x3c1c970e,0x3ae965f1,0xbb529a7e,0xbbcd0220,0xbbeffa59,0xbbee8f4f,0xbbacc978,0xbb9c36ff,0xbb9290bf,0xbbb324f8,0xb9ea233b,0x3a930630,0x3b8827ef,0x3b340be7,0x3b598c6d,0x3c13a3aa,0x3c04e2c4,0x3bdaa77b,0x3be857cd,0x3b9b7472,0x3b30508e,0x3a9d6155,0x3b767e51, -0xbb5bf98f,0xbbe3cb5b,0xbbe656c6,0xbc0e6fd5,0xbc33d67d,0xbc328417,0xbbb1f531,0x3bc3746e,0x3ba0feaa,0x3bc5a9c9,0x3c26084c,0xbb5a2c53,0xbc1681e6,0xbc0d0459,0xbb4fb8c1,0x3a1aa85c,0x3b1ee276,0x3b72f60d,0x3b415bc4,0x39cb6502,0xb9bb76df,0x3a1dc670,0x3b1d4442,0x3b07d04a,0x3ae50037, -0xbb2e9cc8,0x3bfa57a0,0x3c052068,0xba85f8e5,0xbac7960e,0xbbb76769,0xbbf0e7ce,0xbb66920c,0x3b1af5eb,0x3be0d3a6,0x3ab48ae9,0xbb145a41,0x3b94e893,0x3b694062,0x3be4378d,0x3c788bc6,0x3c67cd70,0x3c2c5412,0x3bca9643,0xbb1071ab,0xbb824516,0xbab461b4,0x3c0f2359,0x3c23e048,0xb9a6e664, -0xbb372f68,0xbb966770,0xbb2e286f,0xbb1cf23d,0xbb3858f8,0xbb98b21e,0xbb642076,0xbb2bf1c0,0x39e4ed99,0x39f4e453,0x3b009ded,0x3b3b2178,0xb93c9aa0,0xbb6135f6,0xbb9fb418,0x3a878fba,0x3ba737ec,0x3bce9d5b,0x3b4e5f7d,0xbbcf45d6,0xbc801a8a,0xbc18e5fc,0xbbadaf1e,0xbba8c53c,0xbc8e5fcd, -0xbc9cd922,0xbc6b8ce1,0xbcb7041e,0xbc81f7bd,0x3b92da2b,0x3c06063f,0x3c14521e,0x3bb525ad,0x3aeaedb3,0xb89c0857,0x3a9de7c2,0x3b827a3d,0x3ba50fd6,0x3ba9fddb,0x3b6ddd39,0x3b078384,0x3aa24b71,0x3acd6bb5,0x3aa76c47,0x3ac7dbb3,0x3a7d09c0,0xb9dd290b,0xb94e092f,0xbadcd915,0xba4487a9, -0x3ae206fc,0x39a28dd1,0xbb1dde30,0xbbbdf3bc,0xbae12e8c,0xba9eb6fb,0xbad53b59,0xbbba51f4,0x3acc99a3,0x3a70bec3,0x3b54ff0f,0x3b716604,0x3b5ab102,0x3b810cc5,0x3b553731,0x3b5ccf5d,0x3a1c75be,0x3b57630f,0x3c10f911,0x3c1002ed,0x3c0a00e6,0x3be3f9dc,0x3b2bd34f,0xbaa5b9ff,0xbb84ec69, -0xbb9db145,0xbba568f1,0xbb8fbaa2,0xbba3592f,0xbba1051d,0xbb83e055,0xbb0648d2,0xba7f77e1,0xbab594ad,0xb99b4d13,0xba71be53,0xbb078b22,0xbabc4a11,0x39bd706a,0x39ce3af5,0x3958776e,0x3a8e2806,0x3b8e1cb8,0x3b31b4b0,0xbb111ea7,0xbbd49503,0xbb55c446,0x380c7710,0x3b3c8515,0x3c045171, -0x3c295142,0x3c285376,0x3c2af7b8,0x3c1f8826,0x3c25d543,0x3bdaea1f,0x3b885636,0x3ae57cb8,0x3af92eb7,0x3b04a5bc,0x3ac7e1a9,0x3adaee1d,0x3a96c820,0x3a6fc407,0xba48a0cb,0xbb36d0ca,0xbb8e647c,0xbb983453,0xbb57d5d3,0xbaa4d89e,0x3ad31e7a,0x3b47b5cb,0x3b083a66,0x3b159685,0x3b126ac9, -0x3afbe01e,0x3b76716f,0x3b7afdd7,0x3ad4b2a5,0xb8f835e5,0xbafccb9d,0xba4250c3,0x3b561af6,0x3ba27f9d,0x3bb42947,0x3b7e1198,0x3b2b279b,0x3b0c031f,0x3aeeb818,0x3ab6bfdc,0x3a8b96bc,0x398da37b,0x3a384a8e,0x3ac77376,0x3b171184,0x3b0fd139,0x3a8d4e60,0x3a826526,0xb9a874e7,0xbafc63d3, -0xbb6b000d,0xbb8dfb4f,0xbb6793b0,0xbb4944c6,0xbb488b28,0xbb7aee82,0xbb60f151,0xbb1fe8d4,0xb8ea25bb,0x3a715e4a,0x3aee95f1,0x3b135698,0x3b32f05a,0x3b01297b,0xb914c257,0xba7152f3,0xbbbc9a0b,0xbb9742ca,0xbb861af8,0xbb5fd53c,0xbb19746a,0xbaae1740,0xb9657e2d,0x3a3853b4,0x3aa4e6a7, -0x3adada52,0x3afa6c5b,0x3af0b31d,0x3adae814,0x3ace1b00,0x3ab80523,0x3acda519,0x3af47fff,0x3a2603bd,0xba2dfeef,0xbac8a703,0xbab6db91,0xbb02c5c1,0xbb2df8bc,0xbb39da9b,0xbb3ae810,0xbb4a70c5,0xbb5e963b,0xbb82844b,0xbb98fd7d,0xbbbeae80,0xbbe07323,0xbc029e24,0xbc099641,0xbc152f08, -0xbc1e9944,0xbbf38aa0,0xba34e59b,0xba16d330,0xb963d166,0x397dc6ad,0x3a03857d,0x3a23571c,0x3a3a74de,0x3a7d105a,0x3a7b41af,0x3a8c4c08,0x3aa4d4f2,0x3ab27329,0x3ac2dc1d,0x3ad01831,0x3abd4e05,0x3a99ecd2,0x3a8511ce,0x3a62f6f8,0x3a5e80ae,0x3a3f40b8,0x3a428735,0xb89f19a7,0xba01fc48, -0xba80ccb0,0xbaccfc10,0xbb17c9b8,0xbb29d2e7,0xbb356fb6,0xbb3928ba,0xbb478330,0xbb570ce4,0xbb5dad4d,0xbb2fbe7d,0xbaf0516e,0xbaba8e4a,0xbaaaf539,0xbae78be9,0xbb00b18b,0xbae87c32,0xbadd34c6,0xbac74f32,0xbaa4c4b9,0xba80b6c0,0xba34beb6,0xba489bce,0xba575aa1,0xba6b779c,0xba70b317, -0xba7295f9,0xba6922ee,0xba78ad1a,0xba79d2f7,0xba826a32,0xba7abd1a,0xba76381e,0xba7fd908,0xba6f8385,0xba7765c5,0xba54cded,0xbad1abe1,0xbac9e9a7,0xbabe9993,0xbacac53d,0xbae3d4e3,0xbafe4c55,0xbb0794f7,0xbb0d62d1,0xbb212451,0xbb225596,0xbb29971c,0xbade9b50,0xbaeb8719,0xbb0b0adb, -0xb8860f53,0x38ee186d,0xb8d3cc0e,0x38cf1225,0x36b35dd3,0xb9381f0f,0xba1a8724,0xba240c69,0xba09f9e1,0x388f6989,0x399390f8,0x388ebe5f,0x39a7aa03,0x39c5ee41,0x3a4f9876,0x38bbcf56,0xb95bcb97,0xba14ce80,0xba0cee69,0xba15d7b0,0xba09f1a4,0xba0e4ef7,0xb9fcb1ee,0xba44dfe4,0x391b7c65, -0x391cdb41,0xb9214f11,0xb831da84,0xb853e1b0,0xb8ca1501,0xb990364f,0xb992b37a,0x39827f8f,0xb88e948c,0x38c4793a,0x39640b91,0x39502e8b,0x3aaa11e4,0x3a586b52,0x3ad3604d,0x3aaa327b,0x3a183449,0xba811e30,0xbac541a1,0xba9e9044,0x37e0e648,0x3a1b8c45,0x39b0cfc7,0x3abec4e1,0x3b0ab263, -0x3b42afe1,0x3a63d07b,0xb9ec46a2,0xbadb781b,0xbb026e12,0xbb0d56bc,0xbaf88c46,0xbaf915c4,0xbac93950,0xbacb46ec,0x3985c13a,0x3a460847,0xb79b929d,0x39e3ffc2,0x39802d99,0x3957f4f1,0xb8dddce0,0x39041870,0x3ac5da4f,0x3a18de5a,0x3a14e279,0x3a979659,0x3aa12154,0x3ab10a18,0x37fc37c0, -0x3ad1c29f,0x3a9187cb,0x39479b85,0xbb240215,0xbb3765c7,0xbb1bf120,0x3a79455e,0x3b14b451,0x3a4cd8e8,0x3b2a2b14,0x3b44279a,0x3ba98523,0x3a999344,0xba5ae604,0xbb367e5e,0xbb4a046e,0xbb5e677a,0xbb364b80,0xbb35ccc7,0xbb0d14f2,0xbb1b945a,0x3aa59bc7,0x3ab25248,0x3a5337af,0x3ac276bb, -0x3a83650a,0x3aa6c37a,0xb98890db,0x3827d551,0x3b0aef7e,0x3a0a09ac,0x3ab4e0bd,0x3afcdc08,0x3aeaf096,0x3b933153,0x3b42f00a,0x3bc48490,0x3bb8c36d,0x3b748553,0xba82cbee,0xbb6a4ce1,0xbb87bebc,0x39f3e81b,0x3b027e1a,0x3a234fb7,0x3ba07528,0x3c0f5c06,0x3c3d206b,0x3b8044c2,0xbab2d92f, -0xbbb36161,0xbbe336fd,0xbbf32a1e,0xbbc22a86,0xbba5f392,0xbb889237,0xbb94523d,0x3a5a4ba4,0x3b12c3f2,0x3b6aebcf,0x3b451cdd,0x3b506e37,0x3bea3a35,0x3bdd8bf1,0x3bbaea9b,0x3be0e315,0x3b7254fb,0x3b137ead,0x3b291914,0x3b84115c,0xbba8310f,0xbbef8a08,0xbc046b2c,0xbc17b4e8,0xbc2dbf9c, -0xbc288225,0xbbb35f1c,0x3bc8cefa,0x3ba0a8b4,0x3bce8b58,0x3c36fffb,0xbacb290d,0xbc073919,0xbc103070,0xbb88a0fe,0x38641cae,0x3b3d9b98,0x3b9ec3d4,0x3b9aa2ec,0x3af66ea4,0x3a8a5d34,0x3b073e8f,0x3b729af0,0x3ac8a503,0x3a985e39,0xbb0dea1c,0x3bf738e0,0x3c02f639,0xba43a095,0xbb021d89, -0xbbccfc60,0xbbef9edb,0xbaf78696,0x3b533853,0x3bbaa835,0xba427559,0x3a129db8,0x3bc81f2b,0x3be2887e,0x3bf9269d,0x3c251001,0x3c5f7238,0x3c41b012,0x3bb884bd,0xbaa9ada1,0xbb7760bf,0xbb102d39,0x3c080018,0x3c2f8525,0x3b013ef9,0xbaf8c5b5,0xbb89e970,0xbb38ce6a,0xbb1e7e10,0xbb24b094, -0xbb99523b,0xbb367669,0xbb172963,0xb9d1978b,0xb91bdb15,0x3a9b758f,0x3b17ffab,0xbaa179ea,0xbb8bee18,0xbb9689a4,0x3af89d50,0x3bae237a,0x3b8d800d,0xb9f1910a,0xbc118fa6,0xbc734f19,0xbbf26030,0xbbd15091,0xbc885e4e,0xbcb2b21a,0xbc9860ef,0xbc3fa706,0xbc8d6655,0xbc705abe,0xbb9f065a, -0x3c19298b,0x3c4c6549,0x3b91f11b,0x3adeb645,0xba17c7c3,0x399a07af,0x3b4b3a16,0x3b96b397,0x3b99d0da,0x3b85e11f,0x3b16c4da,0xb8c7690e,0x3a4367d4,0x3a66651a,0x3ae1aea8,0x39af69cc,0xba8ebc52,0xba40a3bf,0xbaa608c4,0xb8ee1a77,0x3adc4555,0xba4487da,0xbb68c9cf,0xbbd6b7ad,0xb8ff48a5, -0x3a9c9b29,0xbb135b26,0xbb64337a,0x3b8d4363,0x3be4b09c,0x3c02b816,0x3bd1d6a3,0x3ba166ee,0x3b8e32d5,0x3b588b02,0x3aaf9596,0xbaad654e,0x39aa45ac,0x3bd491ad,0x3bed2775,0x3bf2a62c,0x3be0fe02,0x3b3b638e,0xb9e4d9d2,0xbb78f7ae,0xbb91ca5b,0xbb9db185,0xbb950917,0xbb9d6720,0xbb9fcdc5, -0xbb80f207,0xbad3a0d0,0xb9cd83a9,0xba90f93a,0xb7c7fe02,0xba230bfc,0xbb038ac5,0xba8ac466,0x39a97e2c,0x3a24192c,0xb96adbfa,0x3a89a480,0x3bb37c91,0x3b71363c,0xbb8af1f9,0xbc1100bd,0xbc03682c,0xbbae7498,0xbad72a24,0x3bcc686e,0x3c20ae2d,0x3c16c96b,0x3c27f5c5,0x3c260a14,0x3c389881, -0x3c0652ea,0x3bc60602,0x3b7de926,0x3b34d008,0x3b0ff033,0x3aa5698c,0x3ab6c21f,0x3a03bd0a,0xb9a61736,0xbafaf169,0xbb72185c,0xbb942d57,0xbb9cce8d,0xbb49ad97,0xb97e9c66,0x3ac6e71b,0x3b22c091,0x3ae7af27,0x3b2f48e8,0x3b32dd73,0x3b1bcd3f,0x3b6079b3,0x3b46a46a,0x3a806ea2,0xba870d25, -0x3ab9f160,0x3b29023b,0x3bcf0d5e,0x3bf883c7,0x3bfcba58,0x3ba82529,0x3b51e73b,0x3b13b483,0x3abf2319,0x3a34a050,0x38a318bf,0xb9e01c9c,0xb890b75f,0x3a3dda3c,0x3ae5747b,0x3add8461,0x3a1476ba,0x399e82ba,0xba87c489,0xbb34d1f0,0xbb78733c,0xbb87108d,0xbb40708a,0xbb48c8c5,0xbb55c225, -0xbb7c6433,0xbb3d2279,0xbaae7601,0x3a90e031,0x3b281dc3,0x3b72d114,0x3b8625d9,0x3ba40aa0,0x3b9e5e0d,0x3b60700a,0x3b24327a,0xbbc65fec,0xbbadc91a,0xbb8fa2d0,0xbb595872,0xbad22657,0xba50d3b8,0xb8a8df7f,0x39979709,0x39db8d27,0x3a1d0c21,0x3a14039b,0x3a31c163,0x3a354cc3,0x3a407346, -0x3a0da766,0x3a3604ab,0x3a897117,0xb9883c84,0xbacb4776,0xbb27abd5,0xbb168ce2,0xbb311c58,0xbb4be772,0xbb51d87d,0xbb4a38c0,0xbb640fe1,0xbb62b2dc,0xbb8128ef,0xbb8f3ae1,0xbbae7301,0xbbc84cb8,0xbbe3563c,0xbbf709be,0xbc0ad2ed,0xbc1560d4,0xbbf09836,0xbaa43ecd,0xba9b2cec,0xba206d3e, -0xb9013930,0x391720aa,0x39cabdc3,0x3a4b93ef,0x3ab6a42e,0x3abf47d3,0x3aca34a6,0x3ad63e11,0x3ad2d71c,0x3acdf4f8,0x3ace6f79,0x3aa338e0,0x3a54621a,0x39f78853,0x3942bbea,0x3800036b,0xb96feacb,0xb78744f7,0xba4e0fd1,0xba99b162,0xbad70f77,0xbb0ae0d8,0xbb3816d8,0xbb4d31b2,0xbb5ba282, -0xbb5fc3df,0xbb731fe1,0xbb82f48c,0xbb8797c9,0xbb60cd0e,0xbb27ccf2,0xbb0bf0cd,0xbaffc7d9,0xbb24cd3e,0xbb334df5,0xbb213841,0xbb13d5a3,0xbaff9cad,0xbacc8d52,0xbaa1b2af,0xba642e59,0xba89f3f2,0xba93937a,0xba9bcefd,0xba9e2951,0xba9e6677,0xba99ad15,0xbaa92b28,0xbab00690,0xbabc35e3, -0xbabeb366,0xbac35448,0xbad48d93,0xbac9106c,0xbad139cd,0xbabfc17a,0xbb105287,0xbb0e9500,0xbb09215a,0xbb106cce,0xbb1d9aaa,0xbb2cef0d,0xbb359350,0xbb3c3ce5,0xbb523896,0xbb50fb9e,0xbb5616c6,0xbb21744d,0xbb2732e1,0xbb33ec47,0x389b9b71,0x390da5c6,0xb72be47f,0x39856879,0x3951de66, -0x3881d5ff,0xb9bf1668,0xb9de43af,0xb9d29a91,0x39856077,0x39e49f4d,0x38a84387,0x39ce79b9,0x3a0349d4,0x3a8b182a,0x39c03288,0x38869412,0xb9bc11d6,0xb9ba19e5,0xb9dd3680,0xb9da5de1,0xb9dd1351,0xb9ab33fe,0xb9f14364,0x39b57b59,0x398e9d24,0xb91ec7cd,0x380da26c,0xb8775cb7,0xb9d09541, -0xb9e56989,0xb9ce5b12,0x398269a4,0xb90315b7,0x38bbb918,0x39c7c8fd,0x39628e2b,0x3a9e92ca,0x3a611ee6,0x3af1486f,0x3adb2d3c,0x3a89510c,0xba051af9,0xba899c05,0xba82daaf,0x39c2a9d4,0x3a4bb963,0x38fa0f05,0x3aad30d6,0x3b0e48de,0x3b6594fa,0x3acd6c38,0x39865d15,0xbaa00a84,0xbadad700, -0xbb026f49,0xbaf8e89c,0xbaf3c8f2,0xbaa41be8,0xba5fbc7d,0x3a2ceacf,0x3a86a96e,0xb8134b9e,0x3a0b9e81,0x39222980,0xba08baee,0xba196ad5,0xb99008be,0x3aae4d46,0x3974451e,0x39b36af7,0x3abba7f9,0x3a97d1ea,0x3a8b4c12,0xb83d311f,0x3aeb24ca,0x3acecc00,0x3a690159,0xbad74944,0xbb05e0bf, -0xbb0f75a1,0x3ac1c7f7,0x3b23d535,0x39eaa5ed,0x3b1c0b11,0x3b41afb5,0x3bc4bb5a,0x3b0e59c1,0x3969b7a7,0xbb0f2c15,0xbb2851fb,0xbb49c9ec,0xbb36f63c,0xbb2880e4,0xbad52ff4,0xba94a095,0x3afa7ffb,0x3af0971c,0x3a0b40ec,0x3ad1db83,0x3a21c3ac,0xba15c343,0xbac0ac15,0xba8703ce,0x3ae2c90f, -0xb92120af,0x3a70954f,0x3b25ea7d,0x3ac4db63,0x3b83fa84,0x3b344b9a,0x3bceff14,0x3bd1943e,0x3b9d693a,0x39a82fda,0xbb11af1f,0xbb727ee3,0x3aa27916,0x3b11838e,0xb99eb7e1,0x3b8367ae,0x3c08f0df,0x3c5266db,0x3bc33fd0,0x3a22c277,0xbb8f09ce,0xbbcba337,0xbbed9f53,0xbbd32f4f,0xbbae121a, -0xbb6d9f9c,0xbb461098,0x3b06fb40,0x3b50d8d8,0x3b4b85d7,0x3b5c7fad,0x3b4529af,0x3b981214,0x3ba3d44b,0x3b8ee668,0x3bc827ce,0x3b1d1025,0x3ac905a2,0x3b7570e4,0x3b7f8729,0xbbd30290,0xbbe91aa2,0xbc0f231a,0xbc1a2ecf,0xbc1f9514,0xbc16984a,0xbba55a06,0x3bc8290f,0x3b9f4833,0x3bd98b3b, -0x3c42e395,0x3987b0d3,0xbbecf88c,0xbc124493,0xbbb3a668,0xba5bcb6d,0x3b53c7a6,0x3bbf3fac,0x3bdac220,0x3b8d2e5a,0x3b41ce5e,0x3b68f91b,0x3b9687dd,0x3a6c8b04,0x39fe877d,0xbab29cc6,0x3bdd1a1b,0x3bef219c,0xb9b51add,0xbb031719,0xbbcba35d,0xbbe2c5d2,0xba3a5024,0x3b650ff6,0x3b96d230, -0xbb29662a,0x3b5834bb,0x3be6682f,0x3c10d760,0x3be64492,0x3bafdd4f,0x3c527892,0x3c51d633,0x3bb290b4,0xb9a810ab,0xbb752062,0xbb66c1ea,0x3bdf9ba6,0x3c2d4deb,0x3ba22271,0xba3dbf14,0xbb6ea740,0xbb2de22b,0xbb16d77d,0xbb022b3c,0xbb863b38,0xbadc10ed,0xbad0ca6a,0xba9e1da2,0xba4da378, -0x39bac7b0,0x3af565f8,0xbb077037,0xbb9a3504,0xbb81fe2d,0x3b0e50f2,0x3b9ee17d,0x3b1f6879,0xbb57bde8,0xbc2cd60d,0xbc65735b,0xbba14e07,0xbbfc853b,0xbcdd3f8e,0xbcc64e54,0xbc89f5f0,0xbc208baa,0xbc5702b8,0xbc577b4d,0xbc419766,0x3c29043a,0x3c7514ab,0x3b3bc89e,0x3ab46f54,0xba86c18b, -0xba02444b,0x3b07fa14,0x3b7be7f2,0x3b7d64ae,0x3b7eb476,0x3b10e2a3,0xba90be65,0xb70315b4,0x3a19af04,0x3af9a3f6,0xb84f0614,0xbac5608e,0xbab24140,0xba434aca,0x3a23e9f1,0x3ab9b98d,0xbac0a48b,0xbb84235a,0xbbd5f365,0x3ab71d74,0x3b4ee20d,0xbb6c4932,0xbad43598,0x3bf9184a,0x3c53eadc, -0x3c4687c6,0x3c055612,0x3bab3fe4,0x3b6a1ed1,0x3b1f9253,0xb9c64a05,0xbb341964,0xbb08b2ec,0x3b6b5f3d,0x3bb4a6c1,0x3bd1d3d2,0x3bdcab87,0x3b4fd724,0x39ec4e78,0xbb49a80d,0xbb7ce1e5,0xbb90e338,0xbb97988a,0xbb985d1b,0xbb99cfd1,0xbb6cfd5d,0xbaa8c7ca,0xb6a90300,0xba2b212e,0xb7ae18ac, -0xba126b5b,0xbaeb1ed6,0xba04e9af,0x39dd2b89,0x3a693451,0xb99b191d,0x3a8cd6fd,0x3bbbcd6a,0x3b9e51a7,0xbbb844d7,0xbc21af34,0xbc35a329,0xbc10e901,0xbb8db54b,0x3b8e14f5,0x3c0b7d99,0x3c036d26,0x3c216148,0x3c264b4d,0x3c391469,0x3c11c02d,0x3bec19a7,0x3bba4d3c,0x3b6b5cfa,0x3b18892f, -0x3a817758,0x3a5e2247,0xb9cdceea,0xbae5a03e,0xbb47e68e,0xbb9131a0,0xbb9b1ff9,0xbb9babab,0xbb3c0590,0x3a03a0c6,0x3a92a79f,0x3adbfef8,0x3abf9942,0x3b356e0a,0x3b3df523,0x3b309e0a,0x3b30bf35,0x3b08e5e4,0x3a327d5b,0xbad8e9f3,0x3b92a69a,0x3ba974d7,0x3c0808a7,0x3c13d2c6,0x3c0f1434, -0x3bbe3ea2,0x3b72e19e,0x3b2117fe,0x3abfac50,0x39f61263,0xb9d34899,0xba4d5c7a,0xba3b22a2,0xb91e14a8,0x3a7d7db9,0x3a85c2d7,0x39003d0b,0xb9991897,0xbac24de7,0xbb4dedd0,0xbb68a562,0xbb6c2b10,0xbb27028f,0xbb4b9968,0xbb622156,0xbb77b19d,0xbb0facfa,0xb94745a9,0x3b11fc87,0x3b7d995d, -0x3ba62775,0x3bb07e46,0x3bd100b4,0x3bd8a54e,0x3bbd1e6f,0x3bacd385,0xbbc20869,0xbbb174a1,0xbb89ceba,0xbb3922e5,0xba3196b3,0xb9122008,0x39041a27,0xb7351567,0xb9af57f8,0xb9e097d7,0xba359924,0xb9d0621a,0xb939b101,0x384100bc,0xb95f65fe,0xb9315ab7,0x390971f4,0xba8e52d4,0xbb0fbf4e, -0xbb51343b,0xbb4b02ba,0xbb603ad0,0xbb731c1b,0xbb741b8b,0xbb6a0115,0xbb84894c,0xbb737c1e,0xbb807f32,0xbb864f14,0xbb99380d,0xbba99c7a,0xbbb77343,0xbbd041dc,0xbbf41f50,0xbc06b56b,0xbbe0fe7e,0xbb07e803,0xbb049246,0xbaac29ed,0xba5b3fb0,0xba12dd75,0xb951478c,0x39f4de01,0x3ab49784, -0x3ac49bcc,0x3acdf591,0x3ace67b7,0x3abecd09,0x3aa811e9,0x3a9ea1a7,0x3a3f6941,0x394f0f61,0xb9937084,0xba28a4a0,0xba6c8ca3,0xbaa0b893,0xba76f121,0xbad1a1db,0xbb005697,0xbb1c5a4a,0xbb354f89,0xbb5b5724,0xbb718c80,0xbb818d65,0xbb8506cc,0xbb902698,0xbb9adba4,0xbba12255,0xbb8b802a, -0xbb615ffb,0xbb45acbc,0xbb355226,0xbb4c5311,0xbb5989b7,0xbb43eee9,0xbb30cef4,0xbb17381d,0xbaf31a3a,0xbac8cbba,0xba97ae7e,0xbab5f072,0xbabe6012,0xbac278b4,0xbac3867d,0xbac249df,0xbabcbc76,0xbad1baee,0xbadd53fb,0xbaedbde2,0xbaf8485b,0xbb0264e0,0xbb0fff8d,0xbb0b1a9e,0xbb10ef19, -0xbb097a8c,0xbb317380,0xbb32d957,0xbb2f271d,0xbb37f583,0xbb4546df,0xbb54c915,0xbb5e0998,0xbb6520ad,0xbb7c17cd,0xbb75db64,0xbb767c3e,0xbb4c208a,0xbb4fef58,0xbb4d9cdc,0x3987b950,0x395c70e3,0x38e08edf,0x39deb7d1,0x39dcab9d,0x39c2db86,0xb89d39e9,0xb92655d3,0xb9750416,0x3a02859c, -0x3a2c162a,0x3931b998,0x3a11aebb,0x3a35b8b9,0x3aaa0f73,0x3a2ff1ec,0x39c84611,0xb893f701,0xb8e5fb5f,0xb95c2c0d,0xb985880a,0xb961ee5b,0xb8ad30a4,0xb89ad03c,0x3a15c8ae,0x39ebd534,0xb8653958,0x392b5446,0xb6cb9960,0xba15c921,0xba04d58e,0xb9dd3cdb,0x39a47ebd,0xb8ccd294,0x39146533, -0x3a213993,0x399e7bb9,0x3a8ae541,0x3a642a06,0x3b000aac,0x3b01d477,0x3ad2bd47,0x38b454df,0xb9f4f5f1,0xba38f3f6,0x3a572a59,0x3a8e6887,0x383feacf,0x3aafa7b8,0x3b169596,0x3b7ce106,0x3b134a6c,0x3a84e9fd,0xba1de954,0xba9e3ba6,0xbadd4e26,0xbae6de42,0xbadc1030,0xba671a50,0xb860f8d1, -0x3a89c712,0x3aa4f9c1,0x380efd9e,0x3a1bbd4b,0x38827776,0xba8acef8,0xba896d8e,0xba3452d0,0x3a95582d,0xb8e819fe,0x390e74b8,0x3ae55b39,0x3a850c33,0x3a2e752a,0xb8cf4ee5,0x3af31e6a,0x3b01f171,0x3ae62b8c,0xba27b52d,0xba969521,0xbafbee40,0x3b0a4641,0x3b3f862f,0x39b49f4d,0x3b20b517, -0x3b4b2653,0x3bd3a984,0x3b4e5326,0x3ab01263,0xbab02804,0xbaf665bd,0xbb28c011,0xbb2dcb22,0xbb128177,0xba866043,0x3952c3be,0x3b1cc75a,0x3b0eaac4,0x39af08d2,0x3aca2259,0x38e955fa,0xbb0d110a,0xbb2b4d05,0xbb074dfa,0x3aaa6bf7,0xba5b7820,0x39cd4568,0x3b4b331a,0x3a926416,0x3b4e5173, -0x3b1d5f69,0x3bcbd780,0x3be09ee0,0x3bc54cc1,0x3af0ba38,0xba28fd6e,0xbb477181,0x3b110aec,0x3b320010,0xba599f0b,0x3b656596,0x3c037d86,0x3c5b16f5,0x3c00c89f,0x3b34044e,0xbb39ced7,0xbba74288,0xbbdae1d2,0xbbdb10d4,0xbbafa377,0xbb3a4ae2,0xba833632,0x3b501328,0x3b7d23d8,0x3b306832, -0x3b6d2043,0x3b324afb,0x3af5d327,0x3b3cfdde,0x3b2ae3f1,0x3ba2dacd,0x3a6a7787,0x3a2c2512,0x3b9f2fc8,0x3b5d8c0c,0xbbef776c,0xbbd86a0d,0xbc1528a3,0xbc1712bd,0xbc09161f,0xbc01750c,0xbb93e321,0x3bb50d78,0x3b9ec747,0x3bece129,0x3c4cedd5,0x3b099df0,0xbbc478fc,0xbc10106b,0xbbde7bc5, -0xbafc7c10,0x3b629b02,0x3bd6c90f,0x3c084990,0x3be5c818,0x3ba6da31,0x3b9bf25c,0x3b9f391a,0x393d25bb,0xb945f486,0xb98f3482,0x3bb2157d,0x3bc682ba,0xb859a009,0xbad7f209,0xbbb31bec,0xbbc1c043,0x39100983,0x3b59b744,0x3b60eeb3,0xbb857604,0x3bc9e634,0x3bfd4005,0x3c161f63,0x3bac0e41, -0x3aa29573,0x3c454ddb,0x3c60f4e7,0x3bbdf125,0x3a41f1b9,0xbb7cb072,0xbbaf06e7,0x3b92bd57,0x3c1cd096,0x3c00ab74,0x3a2b1a3c,0xbb3829c2,0xbb0eaa93,0xbb0a9ec9,0xbab59a47,0xbb3f4125,0xb9c4d13b,0xba289984,0xbaedf964,0xbaa6409e,0xb9e0e240,0x3ac0e0e7,0xbb2cd084,0xbb99e50b,0xbb4ef73a, -0x3b012640,0x3b812ec6,0x3a5bb62a,0xbbae864c,0xbc3a5006,0xbc5179e8,0xbae6ac5d,0xbc297aa9,0xbd0da96d,0xbcbfe4b9,0xbc594fa5,0xbc049bd8,0xbc283885,0xbc44ae5d,0xbc83c1b9,0x3c25f021,0x3c8138ac,0x3ac0460a,0x3a71bad1,0xbacd9a42,0xbaa560cc,0x3a65c032,0x3b39ffe5,0x3b46d9a2,0x3b586cf0, -0x3afec0df,0xbab18c60,0xb99da927,0x3a0c1fed,0x3b035027,0xb998d959,0xbae284c1,0xbafdea9e,0xb96edad9,0x3aa7a559,0x3a953f5b,0xbafb3988,0xbb82b9a1,0xbbb78212,0x3b288f0f,0x3b8a68e8,0xbbab8774,0xbace6d84,0x3c382e4f,0x3c94581f,0x3c7244db,0x3c07302c,0x3b8e25f1,0x3af3fd87,0x3a8ba510, -0xbab0e3aa,0xbb5b8c63,0xbb72f6d9,0x394c07f0,0x3b7a3928,0x3bb7eee9,0x3bd5f511,0x3b678b97,0x3a9baee1,0xbb00d2b8,0xbb49c241,0xbb7d8331,0xbb915a63,0xbb8fc82b,0xbb8aa29f,0xbb4212e2,0xba757de5,0x39804d25,0xb8bcca92,0xb929bd2c,0xba2f291c,0xbabc3d94,0x38889a21,0x3a12eb7e,0x3a88c8bc, -0x389573ca,0x3aa695ad,0x3ba84a5e,0x3bd0cb14,0xbbcfa00c,0xbc1d8e34,0xbc48a2e2,0xbc29c2a8,0xbbb39a83,0x3b1475fe,0x3bd2b2cf,0x3bd87b4e,0x3c1296cc,0x3c1fe80b,0x3c2ebe10,0x3c13b765,0x3bfc30ca,0x3bdcc1fa,0x3b87af34,0x3b1abb8f,0x3a34687d,0x38d67191,0xbabd03d1,0xbb4f2a24,0xbb8342a8, -0xbba11eee,0xbba447b0,0xbb947fe4,0xbb2e4d3f,0x3a57b961,0x3a1aadfd,0x3a623895,0x3a969575,0x3b24a573,0x3b32efeb,0x3b388286,0x3ae40177,0x3a8dff14,0x3a00925e,0xbb08a084,0x3bd98f49,0x3bdf9ef5,0x3c142d75,0x3c16ab9b,0x3c0de12a,0x3bc541c1,0x3b8aa420,0x3b45755d,0x3af2bc10,0x3a23fae1, -0xb9ccf9cf,0xba542379,0xba87d33e,0xba47fa09,0x398478b4,0x39cf4a81,0xb9bad8cb,0xba51d104,0xbad839ba,0xbb444a4f,0xbb44491f,0xbb3f4d9c,0xbb1588cd,0xbb4aedb5,0xbb635919,0xbb6215f9,0xbaac6ef1,0x3a7a0dbb,0x3b51a3c4,0x3b9c6071,0x3bbdf0f6,0x3bc28b66,0x3bded6a4,0x3beef46c,0x3be559db, -0x3be49e85,0xbbb2363f,0xbba84708,0xbb7968ea,0xbb14bd44,0xb7fa4438,0x399283db,0x394ad1f5,0xb9696809,0xba5b2269,0xba8c0d89,0xbab6c756,0xba876ac1,0xba401354,0xb9e71c5b,0xba4ab008,0xba660c00,0xba42fbc8,0xbae1be03,0xbb291976,0xbb60a0ad,0xbb6a4d45,0xbb8033cc,0xbb88d7b6,0xbb86c06b, -0xbb82bf26,0xbb900698,0xbb803e9f,0xbb756479,0xbb731c83,0xbb79ce7b,0xbb824b6c,0xbb812fe7,0xbb9f4589,0xbbc7c86b,0xbbe6b713,0xbbc61043,0xbb43be31,0xbb43c072,0xbb135a68,0xbaee9c4b,0xbac9e9bc,0xba8d59d6,0xb9770f54,0x3a52e677,0x3a763723,0x3a80babb,0x3a705b68,0x3a4b58b9,0x3a15c32b, -0x3a04026d,0xb8413bac,0xba1aa868,0xba91f63f,0xbac3de2e,0xbaeccfbe,0xbb0c4f46,0xbaf4810a,0xbb1b4c2a,0xbb2f91a3,0xbb46bc25,0xbb59e054,0xbb759a98,0xbb85e8b0,0xbb905fa8,0xbb9714ac,0xbba33bea,0xbbaffeb8,0xbbb83cd1,0xbba59dc4,0xbb8d983b,0xbb806d9f,0xbb6e3f06,0xbb6701bf,0xbb7328da, -0xbb5bc803,0xbb460835,0xbb2b3b63,0xbb0ed621,0xbafa72cf,0xbace3498,0xbae92b38,0xbaebce39,0xbae9b0a8,0xbae83b64,0xbae5fd47,0xbadf67c8,0xbaf7a317,0xbb031ee6,0xbb0c97cb,0xbb15084d,0xbb1e1a6d,0xbb2ebcc6,0xbb2a23c5,0xbb2f97e1,0xbb2a8613,0xbb46b4a6,0xbb4921c0,0xbb48f37b,0xbb537206, -0xbb6055a6,0xbb6e059b,0xbb77cb68,0xbb7ec0a5,0xbb8ad4ef,0xbb851d01,0xbb83e280,0xbb68d6c1,0xbb6ab9b2,0xbb5797cb,0x39f46017,0x399ac81b,0x39876703,0x3a1f5663,0x3a2cc132,0x3a371003,0x397a37ee,0x390c06e7,0xb7ef39ba,0x3a45dd9b,0x3a6c8dab,0x39b46fd2,0x3a49d131,0x3a6f8501,0x3ac161c5, -0x3a7e9670,0x3a3b3570,0x39918c23,0x393551bf,0x381efdb9,0xb8432b65,0x36db2480,0x391e282b,0x399feaa5,0x3a49901a,0x3a1dd752,0x3855065f,0x398765ad,0x380a76ea,0xba2abe99,0xba110bee,0xb9e5221c,0x39c9d496,0xb824bced,0x396a6fe3,0x3a5cc452,0x39c5b91b,0x3a54d556,0x3a663c31,0x3b0333ba, -0x3b117a02,0x3b0bdfd5,0x3a32cb78,0x3917d9d5,0xb9ad159e,0x3aa7ed49,0x3abb72ef,0x390b1002,0x3ab99336,0x3b1cf432,0x3b828f6e,0x3b3a0696,0x3ae7a214,0x39289bfb,0xba253a85,0xbaa58c16,0xbac1b9fb,0xbaba5062,0xba000088,0x3a38691f,0x3ab50990,0x3aba5b1f,0x390f22a7,0x3a185f51,0xb88d1615, -0xbab75da5,0xbabff89c,0xba8c38e5,0x3a7b754c,0xb9d64f5b,0xb83ec47e,0x3b05f387,0x3a5801d4,0x3955afe0,0xb8e9390c,0x3afe26b3,0x3b1dc76c,0x3b2b3d2f,0x39b77f4a,0xb987a099,0xbac7ee18,0x3b2fe230,0x3b5db389,0x3a1979f4,0x3b302e65,0x3b58b389,0x3bd58b77,0x3b837b60,0x3b2022d5,0xb989b773, -0xba8c5d12,0xbafdd548,0xbb1a3325,0xbaf58f3b,0xb9f78a3f,0x3ab57b7d,0x3b2ddd9f,0x3b19045b,0x393abd47,0x3aa3cac2,0xba0453f3,0xbb59d854,0xbb6d6c80,0xbb445643,0x3a73e0a6,0xbab9fe76,0xb8edde23,0x3b697f6d,0x3a2e0ba5,0x3b048b38,0x3b075742,0x3bc29fe3,0x3be884b5,0x3be8d99e,0x3b52ec84, -0x3a71e51b,0xbb08de4d,0x3b4cd6af,0x3b546ab5,0xba613627,0x3b4b2637,0x3bf4e003,0x3c560bfb,0x3c19f6ac,0x3b9f545b,0xba58e3c5,0xbb6e9e8a,0xbbbb0f85,0xbbd40f01,0xbba98672,0xbb026ad6,0x3a98c70a,0x3b864e35,0x3b8ba10b,0x3b1b9b75,0x3b6ae530,0x3b109029,0xba496d39,0x3a12cde1,0x3a20ad12, -0x3b6f7412,0xba31b4f4,0xb996df1f,0x3bbe2e63,0x3b274cbb,0xbc00d969,0xbbc3babc,0xbc13cc6e,0xbc0c58fa,0xbbd92066,0xbbd8aa94,0xbb872dde,0x3b8bd891,0x3ba116e5,0x3c052ae9,0x3c56207c,0x3b94adb5,0xbb7b3797,0xbc0363e6,0xbbf92bfe,0xbb47516e,0x3b56b5bf,0x3bdd25ba,0x3c1712eb,0x3c13d17a, -0x3be27978,0x3bb3ffa9,0x3b90019a,0xba3925f4,0xba6c42ed,0x3a6fc724,0x3b7ddb84,0x3b914656,0x389b7067,0xba8e9e35,0xbb89c877,0xbb8dabb6,0x3a77726e,0x3b48435f,0x3b1511ab,0xbba99fe9,0x3c11125b,0x3c086201,0x3c04e847,0x3b2e7c6d,0xbb277e1b,0x3c34377e,0x3c696b3a,0x3bd2089a,0x3adc70da, -0xbb85c988,0xbbf5c1c7,0x3ac4c06e,0x3bfd7d49,0x3c24988d,0x3b0b9aee,0xbada52ca,0xbab18de6,0xbaf342e5,0xba58cb6e,0xbaa746ab,0x3a7105a1,0x39b7aab1,0xbb06b9f0,0xbaba5db8,0xba8aff01,0x3a7bcdbf,0xbb41f39b,0xbb8ba4ec,0xbb1b5cf0,0x3ac4769c,0x3b386f02,0xba0ad2f7,0xbbe348df,0xbc3f4a33, -0xbc360ceb,0x3ad2bf73,0xbc6fd5dc,0xbd1c3c8c,0xbca05ec6,0xbc01b18f,0xbbcf2c94,0xbc073546,0xbc34ddb6,0xbc89b240,0x3c093947,0x3c6d319b,0x3a9aa109,0x3a1b7a49,0xbb05db3f,0xbaf12110,0xb9c973f5,0x3ad1e342,0x3b0d3472,0x3b2aff04,0x3ae69b60,0xba618f84,0xb83e4980,0x3a409b3d,0x3af690c0, -0xba065366,0xbaeb2976,0xbb191748,0x396b4e33,0x3ae08631,0x3a65caef,0xbb0a6346,0xbb6a68d9,0xbb790d52,0x3b487426,0x3b87088c,0xbbcd05cd,0xbb8cb6c1,0x3c711b9e,0x3cb0ac58,0x3c7cf6f2,0x3be5ef43,0x3b2c2463,0xb8ad21e8,0xb9d7e71e,0xbb04ee3c,0xbb6fc33d,0xbb9cc416,0xbb3fec0d,0x3b0bb378, -0x3b9d011a,0x3bc59b6a,0x3b7d71f7,0x3aed65ed,0xba2b15f6,0xbb0eaf16,0xbb50154b,0xbb814806,0xbb809ba6,0xbb62c9d5,0xbb058914,0xba062496,0x39d07e3d,0x39dbab27,0xb9b71b6e,0xba57f84f,0xba85b2f5,0x39ed209a,0x3a1f19a3,0x3a9607bd,0x3a640232,0x3ae1e513,0x3b8c0e87,0x3c06ade6,0xbbd74ffb, -0xbc0b7993,0xbc3dd3ea,0xbc23e1db,0xbbba8e90,0x3a1a9e6e,0x3b8c339f,0x3ba48814,0x3bfd011a,0x3c15557d,0x3c20c90a,0x3c0fb1fe,0x3bfd270e,0x3bece61e,0x3b8aab5f,0x3b0b6596,0x39aa0df3,0xba455b73,0xbb230e7a,0xbb8d4a3d,0xbb9b755a,0xbbaa3688,0xbbacdf02,0xbb876eeb,0xbb1d16c2,0x3a41cee6, -0x3894e101,0x390f2198,0x3a39b6c1,0x3af7ecd7,0x3b146d26,0x3b33b674,0x3a3e110d,0x38cc2b31,0x392aa16d,0xbb21f78a,0x3bf90cc7,0x3bf763a6,0x3c0e5efc,0x3c0991bd,0x3c007861,0x3bc7e5ee,0x3ba33893,0x3b85c9da,0x3b2eafae,0x3a9d893e,0x3981f9f2,0xb996d878,0xba5151db,0xba83b1cf,0xb9182e6a, -0xb729736d,0xba566611,0xba92bde9,0xbacd48e6,0xbb1ff487,0xbb1762f1,0xbb14214f,0xbb0ad777,0xbb450877,0xbb556d02,0xbb396e27,0xb998d147,0x3b054b41,0x3b7d2136,0x3ba8f7d9,0x3bbe551e,0x3bba2311,0x3bd285f8,0x3be8082c,0x3becdfae,0x3bf48dce,0xbb95d148,0xbb919932,0xbb4cebf8,0xbaddee6c, -0x397d9497,0x39b0d71e,0x38519db1,0xb9cda30f,0xba84323c,0xba9623bd,0xbaaa41cd,0xba877620,0xba4e04e8,0xba115d86,0xba887c85,0xbab5055c,0xbac967eb,0xbb105842,0xbb380404,0xbb6129b7,0xbb773f3d,0xbb87cffd,0xbb917764,0xbb8b0928,0xbb86dd58,0xbb8dbdce,0xbb7c3816,0xbb59cea3,0xbb4e10e0, -0xbb31d7f4,0xbb266ebb,0xbb060a75,0xbb4829d7,0xbb8e8596,0xbbb057fc,0xbb9b301f,0xbb81c710,0xbb81783a,0xbb56ff71,0xbb3faf14,0xbb2bcbfe,0xbb088270,0xba9dae2d,0xb97aaff1,0xb90bdc91,0xb91cbbe0,0xb9867349,0xb9b86191,0xba0013ed,0xb9f2fbcd,0xba7c6d08,0xbab73c68,0xbaf263d8,0xbb0edef7, -0xbb21f517,0xbb34c9f6,0xbb2a35e7,0xbb3e0fee,0xbb4e3c8e,0xbb5f9006,0xbb6ef939,0xbb7f4e0f,0xbb8ac5f3,0xbb96b984,0xbba20b84,0xbbaf0e98,0xbbbe02e6,0xbbc97da2,0xbbba7593,0xbba73630,0xbb9c098b,0xbb91a809,0xbb7582d7,0xbb7df7fb,0xbb67cdc1,0xbb5268b6,0xbb3af8a2,0xbb24b1e5,0xbb186448, -0xbb067265,0xbb0eab57,0xbb0ba78c,0xbb0755dd,0xbb04d3cf,0xbb035cc3,0xbb000a97,0xbb0c33af,0xbb14103a,0xbb1d9a97,0xbb2791ff,0xbb320169,0xbb421a66,0xbb3f8581,0xbb445af0,0xbb430b9d,0xbb4f8bed,0xbb52e834,0xbb565dec,0xbb62b9bc,0xbb6ef3f5,0xbb79b5fc,0xbb8229dc,0xbb859304,0xbb908216, -0xbb87f837,0xbb851435,0xbb7af234,0xbb7a5773,0xbb54a932,0x3a26fb37,0x39bd9de7,0x39d16c94,0x3a481b4f,0x3a6157cf,0x3a7e16e5,0x3a050f1c,0x39c94aec,0x392b2991,0x3a75ed3a,0x3a8d5b3f,0x3a092e56,0x3a788911,0x3a8e95cf,0x3ace74ea,0x3a9da217,0x3a818520,0x3a20aa61,0x39dc3bc2,0x3985c4b8, -0x3910ff92,0x39489bd7,0x39b36b17,0x3a2a604d,0x3a68d631,0x3a394e50,0x39386f3d,0x39aeafda,0x38a066b0,0xba226c34,0xba0fe3a6,0xb9d5da4f,0x39fba598,0x38041fd1,0x39952b11,0x3a8a69d3,0x39e2da21,0x3a14de36,0x3a661436,0x3b02abc1,0x3b1aa2f7,0x3b2539f0,0x3a996f2b,0x3a2ecdb5,0x383785fe, -0x3ad1bb1c,0x3ad8d2c1,0x398d561c,0x3abb56bb,0x3b1ba320,0x3b7f78f5,0x3b54cc39,0x3b1cd64f,0x3a76efd8,0xb871a034,0xba570c8d,0xba95d6ed,0xba907cf2,0xb907eea0,0x3aa89331,0x3ad3bd53,0x3ac5971a,0x395ff38e,0x39f8fbf5,0xb98535ab,0xbaceb05a,0xbaeca321,0xbab6d0b1,0x3a4c1bc4,0xba2af9e0, -0xb946380b,0x3b12adaf,0x3a24c9a9,0xb95fd28c,0xb89d7634,0x3b055ce7,0x3b3528fd,0x3b582089,0x3a9c6c38,0x3a01d6da,0xba8d66ea,0x3b423a3b,0x3b6c00e7,0x3a797b79,0x3b3b8eaa,0x3b606837,0x3bcdcf4b,0x3b97db94,0x3b5b9169,0x3a6a09a4,0xb9a3485b,0xbaae82e4,0xbb01ae8c,0xbac6015a,0xb83da143, -0x3b11ca82,0x3b3021c4,0x3b17f349,0x3763b612,0x3a47a3b3,0xba990212,0xbb8466df,0xbb90c138,0xbb74990c,0x3a2649bf,0xbaf1a81d,0xba103ea2,0x3b78d09c,0x395e950f,0x3a725451,0x3ae7cf93,0x3bb548e4,0x3be865a0,0x3c006e4a,0x3b8d1f3a,0x3b156e0a,0xba82b1f1,0x3b707323,0x3b64044d,0xba281aec, -0x3b257b47,0x3bd69efa,0x3c45fce3,0x3c29b1a1,0x3bda613d,0x3ab83d0f,0xbb06cf6b,0xbb95c5eb,0xbbc07c1d,0xbb9a4967,0xba9b48f7,0x3b4761df,0x3b9b9c03,0x3b90aef1,0x3b0e81c3,0x3b51a6e5,0x3abbf8f9,0xbb4320cf,0xbadf7f8e,0xbab12ff5,0x3b175373,0xbb0dea79,0xba9f51f7,0x3bd06259,0x3ad43c6e, -0xbc048b49,0xbbae3eb3,0xbc0a5f9f,0xbbf622df,0xbba4a6d9,0xbbb94e5d,0xbb889789,0x3b10e601,0x3b97545b,0x3c10f376,0x3c59ab5e,0x3bfe6d3d,0xb9eca453,0xbbdacd5f,0xbbfae1b8,0xbb843eeb,0x3b1c3432,0x3bc7e98b,0x3c1478c6,0x3c216855,0x3c019d79,0x3bb63bf4,0x3b5639b0,0xbaeb4172,0xbade933f, -0x3b008071,0x3b1834e9,0x3b2bd879,0xb899f6e8,0xba1e0c89,0xbb35902b,0xbb189d93,0x3af42eaa,0x3b3ccfdd,0x3a91a824,0xbbc18de6,0x3c391bf6,0x3c0a94e9,0x3bc75d30,0xb92ad936,0xbbc1d379,0x3c1a19e1,0x3c61fdf4,0x3be285bd,0x3b208a5d,0xbb8bc9d1,0xbc1f05c9,0xbac553aa,0x3bb2b280,0x3c3332d0, -0x3b6515ee,0xb9b548d0,0xb9a4d098,0xbac83513,0xb9e305f6,0x39e67c5d,0x3b03f614,0x3aa3fd5e,0xbaf80a83,0xba9bf285,0xbabcd1d9,0x399b0bcd,0xbb475104,0xbb66fa07,0xbae1fcf6,0x3a6dd7fc,0x3acbf41e,0xbaef54b3,0xbc084598,0xbc3f0f26,0xbc13bfbd,0x3ba0e223,0xbca39012,0xbd1e3289,0xbc695c54, -0xbb084f86,0xbba31c65,0xbbcf2f0d,0xbc1a57b1,0xbc74b402,0x3ba98a00,0x3c39fc86,0x3b0c272a,0x398b1275,0xbb2e3029,0xbb23bf22,0xbadeca3c,0x39792510,0x3a9ef861,0x3afaa8fe,0x3ae39e2b,0x38fc3a7d,0x3a18cfde,0x3a8a7b25,0x3ac3099d,0xba48e683,0xbae5eba2,0xbb29b0e4,0x3a090472,0x3aee07f7, -0x3a2256f8,0xbb07240a,0xbb3c6aa0,0xbadc3ea2,0x3b2640e0,0x3b3a84b6,0xbbc82475,0xbc1676b4,0x3c8e8f3e,0x3cb66f11,0x3c63e444,0x3ba510d3,0x3a497b98,0xbadea1fb,0xbae5be00,0xbb22b0e0,0xbb79aadc,0xbbad0fa1,0xbb9ba6ee,0x3a2f5782,0x3b7bdbf3,0x3ba90efc,0x3b805296,0x3b0f5fb5,0x3a2f67be, -0xbaa94782,0xbb1f2937,0xbb52bcfd,0xbb561215,0xbb20c6cf,0xba77bbc2,0xb8151ca4,0x39f9e016,0x3a43446f,0xb9fb1a68,0xba7ab29a,0xba32c864,0x3a01cb20,0x3a07080e,0x3aabe7a8,0x3b0642cd,0x3b2111a9,0x3b74ff08,0x3c26bbc2,0xbbd3c771,0xbbe66996,0xbc1d5ba4,0xbc083378,0xbbab6ef2,0xba05a3f0, -0x3b1e5d67,0x3b616748,0x3bd28f16,0x3c07d462,0x3c0f95ac,0x3c07e1ac,0x3bf26b51,0x3be834bb,0x3b82dbc4,0x3ae24955,0xb82b3706,0xbadec79d,0xbb658657,0xbba6d56c,0xbbacc66d,0xbbaf7cb5,0xbbb3502d,0xbb6c889c,0xbb06bf46,0x39b34efd,0xb9c12f00,0xb9efe569,0x38a49bf7,0x3a83678b,0x3ad353a6, -0x3b24b31f,0xb93105e0,0xba39f266,0xb9aef96f,0xbb3ee293,0x3bf56575,0x3bedf88e,0x3bf1a1d5,0x3be51c88,0x3bde0744,0x3bc7dab6,0x3bbf0577,0x3bb414a7,0x3b7f4fd2,0x3b1465cd,0x3ab32cb1,0x3a38c7e0,0xb7c6f0f7,0xba4faff2,0xb934bb81,0xb94e1352,0xba9c29d3,0xbaa595ae,0xbab401c0,0xbae7308f, -0xbae056ba,0xbaec73c5,0xbb09b563,0xbb3b8f97,0xbb3a7f42,0xbb029cde,0x3a4220e2,0x3b3e4ddd,0x3b86e45f,0x3ba28770,0x3ba91634,0x3b9e52ef,0x3bb347e1,0x3bc9e2b1,0x3bd79dbd,0x3be1b22f,0xbb5476e8,0xbb55ff07,0xbb07ffae,0xba85ceeb,0x3988aad9,0x39119e8f,0xb97b3b54,0xba136ef8,0xba775baa, -0xba580293,0xba2c86b3,0xba2054c2,0xba080003,0xb9da3e7b,0xba91dee3,0xbae1142a,0xbb0fb8b1,0xbb26d57f,0xbb3ff0ce,0xbb5a65f2,0xbb766f24,0xbb874423,0xbb91d0d4,0xbb870ab7,0xbb81b0ca,0xbb82aad7,0xbb64bede,0xbb2c211f,0xbb14b1de,0xbaab2be2,0xba546d8e,0x38d1431a,0xba6e5b0d,0xbb0d3d19, -0xbb4ef6d6,0xbb3e314e,0xbb9c3683,0xbb983c26,0xbb876650,0xbb7cf6cc,0xbb66a915,0xbb41c5a7,0xbb0ec034,0xbabf8503,0xbab6244a,0xbabf7053,0xbacc628e,0xbacbfb36,0xbacc7d0a,0xbab729e4,0xbae8e0d7,0xbb063905,0xbb1c3cc7,0xbb2ca60c,0xbb3c2d35,0xbb4a9b79,0xbb45eee4,0xbb4fa6be,0xbb5c01e0, -0xbb67e641,0xbb7496c0,0xbb7d0848,0xbb890b93,0xbb95bde3,0xbba4a818,0xbbb2059e,0xbbc19367,0xbbcfdea5,0xbbc44cbb,0xbbb71285,0xbbaf4ab0,0xbba3475f,0xbb76cb09,0xbb78e3ba,0xbb674f35,0xbb552234,0xbb44c524,0xbb379886,0xbb30e108,0xbb23eb32,0xbb24b03a,0xbb1d0b26,0xbb15e4ff,0xbb1111c6, -0xbb0ec1d4,0xbb0ac527,0xbb16572a,0xbb1e2976,0xbb26d185,0xbb314ffc,0xbb3c34b4,0xbb4aef9b,0xbb49a2d3,0xbb4cf35d,0xbb4d452b,0xbb4f1a38,0xbb523ef0,0xbb55db0d,0xbb630e91,0xbb6e3bfb,0xbb75c297,0xbb804bfa,0xbb8379c4,0xbb8d164b,0xbb82c0d8,0xbb7dd280,0xbb7ec9bc,0xbb7c52bc,0xbb4af0f9, -0x3a4fd7a6,0x39fa430a,0x3a0d24b1,0x3a6df5c1,0x3a887a0a,0x3a9f870e,0x3a47886d,0x3a231116,0x39c1c153,0x3a8be368,0x3a9d45bc,0x3a3e4bbf,0x3a904f54,0x3aa128b6,0x3ad62991,0x3ab6ce4d,0x3aa0e180,0x3a74b0b2,0x3a284e6d,0x39eb86d8,0x399c8eaf,0x39cd1b42,0x3a0ccab1,0x3a6ee438,0x3a81934c, -0x3a52f773,0x39983491,0x39cae605,0x39038dba,0xba033308,0xb9ffa0ea,0xb9ac7fb8,0x3a19eaad,0x391c2cde,0x39c34b26,0x3a9fe5a3,0x3a0ac0c9,0x39e6ac9f,0x3a6a30a8,0x3b00a9a7,0x3b20d91d,0x3b39bc9a,0x3ad3678a,0x3a94fda2,0x39dfc433,0x3ae95a49,0x3ae7e5b6,0x3a02b37a,0x3abd6486,0x3b18b887, -0x3b73d44b,0x3b691e24,0x3b406b7d,0x3adeed07,0x3a0112ec,0xb9c8e727,0xba4c0b3e,0xba372037,0x397a0141,0x3adeb0ff,0x3ae8eea6,0x3aca0bb8,0x3988d7d5,0x39acd9bf,0xb9e077ea,0xbacdaa71,0xbb03c6cb,0xbad4b5bf,0x3a1ec34b,0xba53e9a6,0xb98c96be,0x3b17a685,0x3a05eec2,0xb9db29c9,0x36ef6462, -0x3b0c171c,0x3b4a0c1a,0x3b7f3946,0x3b01e455,0x3a9bcbf3,0xba08ec4d,0x3b424fcc,0x3b6a31af,0x3abfb234,0x3b444657,0x3b66427c,0x3bc194db,0x3ba700ab,0x3b86e4dd,0x3b056514,0x39bf3de9,0xba527f3a,0xbad1961d,0xba8e49fe,0x39abb270,0x3b2ff4e0,0x3b27dc49,0x3b0e62c0,0xb9634d40,0x393220e0, -0xbaeb38f3,0xbb8c5ed1,0xbba32762,0xbb8af83a,0x39cb5fe7,0xbb09277b,0xba645988,0x3b781431,0xb8ced5b1,0x38916e83,0x3ac01120,0x3ba56b17,0x3be48fb6,0x3c08ffee,0x3bacd4a2,0x3b64c9a0,0x393a424a,0x3b7b3a6e,0x3b61ec5c,0xb8dcaf8c,0x3b057337,0x3bb99a87,0x3c324200,0x3c33dde4,0x3c06bed1, -0x3b70f3b9,0xb9e90fb1,0xbb5c6d85,0xbba3d6d1,0xbb7e079f,0xb9b0593a,0x3b90d525,0x3ba6f546,0x3b8e0e33,0x3b035b7c,0x3b24b80a,0x39f672c3,0xbb93d5ca,0xbb73e714,0xbb4e9830,0x3a8a1e08,0xbb622d03,0xbb05547d,0x3bd2c832,0x3a4fb713,0xbbfc581e,0xbb921c0d,0xbbec41c3,0xbbc55f38,0xbb7d1992, -0xbba0b677,0xbb8ef551,0xb983e344,0x3b80d6a3,0x3c15c1a9,0x3c542cd7,0x3c3503ec,0x3b58540c,0xbbb34955,0xbbeaef59,0xbb9de3c4,0x3a5f5334,0x3b983c87,0x3bff4c60,0x3c1a9d4d,0x3bfeca95,0x3b9b95e1,0x3adb2046,0xbb443ebe,0xbb23bce2,0x3b362f6c,0x3a7f585a,0x3a572e08,0xba033b16,0xb9de774f, -0xbab696a4,0xb84fc190,0x3b3c7b5d,0x3b3a8cd5,0x392448b6,0xbbc67e45,0x3c554821,0x3bff2ef1,0x3b7226f5,0xbb2e1460,0xbc0f2c8f,0x3be8e42e,0x3c485aea,0x3be8b4b6,0x3b4bf6ab,0xbb8e7067,0xbc3e8aac,0xbb8a954f,0x3b444f9e,0x3c2a7f06,0x3b9c4cf1,0x3aa34e58,0x3a5a3e64,0xba87f90d,0xb8ede594, -0x3b00b7bc,0x3b379a32,0x3b03fe5a,0xbab5dae6,0xba25a0d4,0xbac623c0,0xb9ddaaa9,0xbb411521,0xbb2f3856,0xbaa011f5,0x39bbd204,0x3982771d,0xbb50dabd,0xbc1bd0eb,0xbc3b4fbd,0xbbdafa31,0x3bf8d18f,0xbccd6fe6,0xbd1703f2,0xbc1527c9,0x3b2c67c2,0xbb7a5a4b,0xbb66f00b,0xbbd9d459,0xbc4d0a2c, -0x3a955834,0x3bf67b82,0x3b8985f7,0x3987f35f,0xbb53152d,0xbb4cd071,0xbb41a2f9,0xba9e2eaf,0x39303fea,0x3aa0f07e,0x3aebadee,0x3aa3e3b8,0x3aad8af7,0x3aad1ee6,0x3a5dba5b,0xba8e62fa,0xbadb6c6b,0xbb32cf2e,0x3a20552b,0x3ad483a0,0x39c97cf6,0xbae815dd,0xbb04d202,0x3954d64a,0x3a87a2c5, -0x3a57fa39,0xbb961d9a,0xbc6da222,0x3c9a9447,0x3ca36f95,0x3c2cf604,0x3b3d50af,0x3812aa6e,0xbb352b45,0xbb394dab,0xbb1cbc87,0xbb5d08d3,0xbba44dc1,0xbbb24af2,0xb9e3c9f5,0x3b3fb35e,0x3b8804a9,0x3b74d0c3,0x3b1fd1d0,0x3afc2e22,0xb9dc0049,0xbad89f8a,0xbb1718cb,0xbb1e482c,0xbaad0f0b, -0x3954162a,0x39efa881,0x3a03573a,0x3a4f72ec,0xba0aee9d,0xba8481f7,0xb9f51d82,0x39952bd7,0x39a81146,0x3add40af,0x3b5bdafe,0x3b5b57f6,0x3b7fdf02,0x3c467b95,0xbbc6d474,0xbbac76ca,0xbbda6e3a,0xbbbf5bae,0xbb88aa9d,0xba88c1e5,0x3a873ca9,0x3b14676a,0x3baa176a,0x3bf358e4,0x3c00bfdf, -0x3bff2185,0x3be0552b,0x3bd02ca8,0x3b6e9e47,0x3aacc359,0xb9f91013,0xbb2abea9,0xbb8e1435,0xbbb3663a,0xbbb77adf,0xbbb17296,0xbbb58a10,0xbb47555e,0xbad96c55,0xb9436746,0xba3a2dbf,0xba70b83d,0xba2eb6a2,0x3753eef1,0x3a726d8a,0x3b12815a,0xba46352d,0xba9e216b,0xba81de01,0xbb5ce9f5, -0x3bd43f00,0x3bc40b37,0x3bae48b9,0x3bac2241,0x3bbc3f79,0x3bc3f1e2,0x3bd70480,0x3be627fc,0x3bb044dc,0x3b705836,0x3b3189c7,0x3b0422e2,0x3a9ff10a,0xb75b55f6,0x393fa180,0xb91b8c4d,0xbab32a30,0xbaa2f547,0xba9b1369,0xbaa31c1c,0xbab565b0,0xbad6c8da,0xbb10b3da,0xbb2eb513,0xbb1745ad, -0xba8d12f3,0x3ad3c6e4,0x3b61030f,0x3b81cea1,0x3b8d554d,0x3b8588a2,0x3b6f5cd9,0x3b87d086,0x3b9b97ca,0x3bae60da,0x3bb840c8,0xbac5eb37,0xbad252f0,0xba1d7e23,0xb8e61769,0x39b8423a,0x38556d0e,0xb9a0b73c,0xb9e24900,0xba0ba20a,0xb92587ed,0x3992082b,0x36333bf9,0xb947d072,0xb99969fb, -0xba943adf,0xbafa9cf6,0xbb2c3fcf,0xbb322636,0xbb3fa461,0xbb4dbe6c,0xbb6a4be3,0xbb7fb301,0xbb8a97d3,0xbb784032,0xbb6bc591,0xbb653108,0xbb3d29fe,0xbad928a1,0xba88ba17,0x39b9331d,0x3a952e2b,0x3b1ce6ef,0x3ab817be,0x3998c1e7,0xba25e7e8,0xba4570a7,0xbba75680,0xbb9e699e,0xbb953b77, -0xbb8f0b48,0xbb8368c6,0xbb658920,0xbb4175a2,0xbb295ce6,0xbb261355,0xbb2ce2f7,0xbb2fcb58,0xbb277c4d,0xbb1c6d91,0xbb08da17,0xbb19ed6a,0xbb22e160,0xbb326880,0xbb3f1c68,0xbb4c4bdc,0xbb57fba8,0xbb543eb8,0xbb589232,0xbb616d97,0xbb6883c0,0xbb725723,0xbb778ada,0xbb83b690,0xbb8f5a0e, -0xbb9f1d28,0xbbaac5af,0xbbb81b90,0xbbc6cfd4,0xbbbd89fa,0xbbb630b6,0xbbb2432a,0xbba48f24,0xbb6b6b29,0xbb68b82c,0xbb5dd0d2,0xbb511ece,0xbb49c791,0xbb4648b5,0xbb444c4f,0xbb3ca45f,0xbb35e2fe,0xbb2a988f,0xbb21b145,0xbb1ad484,0xbb17bc5d,0xbb12553b,0xbb1d7711,0xbb24ff13,0xbb2c89f2, -0xbb36cf8f,0xbb414078,0xbb4f3c07,0xbb4bd690,0xbb4c614a,0xbb4b99bd,0xbb4bf39d,0xbb4cb74a,0xbb4e9608,0xbb5a53f7,0xbb635c5d,0xbb66cf6f,0xbb6ff5e8,0xbb749bbe,0xbb8124ec,0xbb6d2e37,0xbb66bf9e,0xbb739208,0xbb705b71,0xbb452072,0x3a7017fd,0x3a1bb535,0x3a306569,0x3a85f0ac,0x3a9b8ecc, -0x3abc5894,0x3a8097d3,0x3a591d7d,0x3a131f51,0x3a94a0b6,0x3aa4e1a1,0x3a73cf33,0x3a9e64fb,0x3aac6c55,0x3ad4427b,0x3ac88c30,0x3ab95c43,0x3a9d26f9,0x3a566bd8,0x3a1db80a,0x39de0fd4,0x3a11c9c7,0x3a337014,0x3a8b8c36,0x3a882168,0x3a5e5d4f,0x39b79917,0x39cffa6b,0x3920fad6,0xb9b3db1b, -0xb9da5b86,0xb98485ce,0x3a2a2721,0x3980f182,0x39ea6bf7,0x3aa97f8f,0x3a2087ca,0x39ca1e15,0x3a729dc3,0x3afa741b,0x3b23932b,0x3b4b6150,0x3b0365e6,0x3ac94f97,0x3a496086,0x3aef3ed7,0x3aea5afa,0x3a57143e,0x3ac2327a,0x3b151a44,0x3b6171bb,0x3b76e838,0x3b5d6beb,0x3b1ac140,0x3a8043bd, -0x37f55da6,0xb9dc31fd,0xb98a93bb,0x3a1dd28a,0x3afb2bda,0x3af2fa07,0x3ac5b80b,0x396e0548,0x391b1036,0xba1b3353,0xbabde33b,0xbb0a8b7c,0xbae9467c,0x39c9b2f3,0xba6dcc58,0xb9a900fa,0x3b10137c,0x39ee196d,0xb9e11e34,0x391a0a12,0x3b1317ed,0x3b5b5e72,0x3b9297b8,0x3b307cf5,0x3aec1394, -0x38714790,0x3b33a03a,0x3b5a5218,0x3b080ab0,0x3b49c605,0x3b6861c0,0x3bae23d5,0x3baff355,0x3b9a408a,0x3b46392d,0x3a6fbe42,0xb9bf38f8,0xbaa7349a,0xba2b39f6,0x3a2cffc5,0x3b34cc7f,0x3b181fe4,0x3afbac7d,0xba128ae5,0xb9f080ff,0xbb199d55,0xbb88662c,0xbbaf1e35,0xbb9660ef,0x38bb4fe9, -0xbb10d33c,0xba8e3d9a,0x3b64e049,0xb97f7abf,0xba00d7d3,0x3aa37520,0x3b947820,0x3bddbfd1,0x3c10cfa2,0x3bc9a506,0x3b939b7f,0x3aa53a28,0x3b7098da,0x3b548231,0x3a51b195,0x3af3d2c5,0x3ba4bf40,0x3c1c0483,0x3c38de0c,0x3c1b8b16,0x3bbc8ef1,0x3a8de036,0xbb09a543,0xbb7f8af9,0xbb31cfeb, -0x3a1a7283,0x3bab47d2,0x3ba89201,0x3b846eec,0x3ae34058,0x3acd2687,0xba26149a,0xbbacfafe,0xbbb3007d,0xbb9c17fa,0xb908cf43,0xbb9368bb,0xbb321b56,0x3bc34ccd,0x39082e34,0xbbd9150d,0xbb5ac830,0xbbaab732,0xbb865035,0xbb4f1d85,0xbb8b4606,0xbb92c608,0xbb2b2bda,0x3b473174,0x3c106c55, -0x3c40e312,0x3c596fc9,0x3bcc9f6b,0xbb9cb354,0xbbd6ece1,0xbbb3b1fa,0xba8a077f,0x3b2b2982,0x3bb4a411,0x3bf95606,0x3bcfad95,0x3b457b63,0xb946e3e9,0xbb88c75d,0xbb516ac5,0x3b5d6187,0xb873134e,0xba3a5dd7,0xba8ca701,0xba0ec5a6,0xb92a2cc6,0x3b18e392,0x3b81d47d,0x3b45ee54,0xb9cded40, -0xbbb4d24c,0x3c5f94c8,0x3bd46823,0x3ac0ae6b,0xbb955fe0,0xbc3171c8,0x3b89d089,0x3c201ab8,0x3bdde9c3,0x3b6dfad3,0xbb88fd0d,0xbc53080a,0xbbd73a10,0x3a024efa,0x3c101068,0x3bc4c490,0x3b506022,0x3b010c43,0xb9a9f1a6,0x39a62343,0x3b54501f,0x3b582407,0x3b2b433e,0xba3187f1,0x3900fe5a, -0xbaac2e2c,0xba99c9db,0xbb331ce9,0xbaf398cd,0xba65ca18,0x388c4253,0xba6093f4,0xbb963552,0xbc2d418a,0xbc364f24,0xbb8fc426,0x3c17bfe6,0xbceb17ba,0xbd0aaacf,0xbbbd075c,0x3ba721ab,0xbaff32fa,0xb9e725a7,0xbb7f25ce,0xbc28ef5c,0xbb4c131e,0x3b72acb4,0x3be415e0,0x3a37b201,0xbb686c7c, -0xbb6c3c15,0xbb84bd6b,0xbb2f0ac5,0xba8bb47d,0x3a0210b1,0x3ae0a8b6,0x3b0722bc,0x3af50e62,0x3ab07789,0x37b3f4e6,0xbac337ea,0xbad75f02,0xbb30c1dc,0x3a07b868,0x3aa13928,0x3973f802,0xbab3a662,0xbaa7f36d,0x3abdd131,0xba8060c1,0xbaa38c5b,0xbafd2897,0xbc994b43,0x3c99b26b,0x3c76a9dc, -0x3bcdfc58,0x3a83c5c4,0x3a6b0344,0xbb4db1c0,0xbb67595e,0xbaf9abb4,0xbb24eb23,0xbb8955c3,0xbbb13814,0xba96072c,0x3b0b4f15,0x3b4ccb87,0x3b608772,0x3b319cea,0x3b427706,0x39dcf4bf,0xba66b636,0xbab5106d,0xbab97b4f,0xb94104c4,0x3aa4cc33,0x3a739eed,0x39f8787f,0x3a0b7c64,0xba0676e1, -0xba7d03aa,0xb99d64ba,0x383f2ced,0x39570bb6,0x3b19cc61,0x3b8dd3dd,0x3b84c39d,0x3ba158df,0x3c5fd5ae,0xbbb0e855,0xbb5ca8fe,0xbb61f3f7,0xbb584b00,0xbb45b1e8,0xbaa40ead,0x3945b971,0x3ad099bc,0x3b84d72b,0x3bd67aa7,0x3becea2d,0x3beec578,0x3bcccf17,0x3bb29b51,0x3b577458,0x3a7f6bab, -0xba853ee4,0xbb5b0ff3,0xbb9ea4cf,0xbbb3dc7d,0xbbbbe8e3,0xbbaf6ddc,0xbbb0b9a7,0xbb22bcd7,0xbaa1a94d,0xba2eb5b8,0xba761fc8,0xbaa35c72,0xbab49c8b,0xba57bd95,0x39b41c1d,0x3af8f4cc,0xba7d668a,0xbab7e211,0xbae84439,0xbb76813c,0x3b9bbcda,0x3b827609,0x3b37a7c2,0x3b56fc9a,0x3b969e9e, -0x3bbee3d2,0x3bebab8b,0x3c092f99,0x3bdfba14,0x3ba9ee45,0x3b8b783c,0x3b6b12cd,0x3b36e791,0x3aa0bd70,0x3a6440c1,0x3921bd21,0xbaa5ed38,0xba88f4ab,0xba872da0,0xba865bd5,0xbab5fd84,0xbae323f9,0xbb1acfe5,0xbb1c6eef,0xbadd775f,0xb94ef256,0x3b11cb71,0x3b6a37f3,0x3b630f49,0x3b5ef0cb, -0x3b3a6546,0x3b1d06cd,0x3b35d764,0x3b5360d3,0x3b7bd6f9,0x3b82fa2e,0x39ee89d8,0x39e34c1f,0x3aa4f5fc,0x3a9d81e4,0x3a72a653,0x39e66a6a,0x3905ec10,0x393bfb15,0x3994bc2d,0x3a50492c,0x3aaf26ca,0x3a2a7d3a,0x3885633c,0xb9b802d4,0xba9aa0eb,0xbb0270aa,0xbb38137b,0xbb32a3d8,0xbb36e03d, -0xbb3c6176,0xbb564d6b,0xbb67dfe1,0xbb7cd183,0xbb56be20,0xbb477846,0xbb36afcc,0xbb050c40,0xb9ed584b,0x39e7bdbd,0x3b059574,0x3b43894a,0x3b9090d4,0x3b638a32,0x3b28808d,0x3ae7907e,0x3ab7c48d,0xbba0613a,0xbb936050,0xbb927fdd,0xbb8f576b,0xbb84722d,0xbb6fc623,0xbb5e4452,0xbb5dacc1, -0xbb5b04d8,0xbb623f9a,0xbb5fcbd6,0xbb5070cd,0xbb3abff4,0xbb21275f,0xbb2c3bf3,0xbb3034f3,0xbb3a93f7,0xbb459a0d,0xbb51cd4c,0xbb5d1dba,0xbb5cdec4,0xbb5c4614,0xbb63626a,0xbb676a5a,0xbb701297,0xbb75f880,0xbb7b529d,0xbb859e42,0xbb929f10,0xbb9933c4,0xbba0a6cd,0xbbabdb81,0xbba42ade, -0xbba22958,0xbba1d207,0xbb937a62,0xbb5ad7f1,0xbb522f95,0xbb4ef23e,0xbb4882ca,0xbb49f1b0,0xbb4e3004,0xbb4f568f,0xbb4c5f62,0xbb40c8de,0xbb347ac8,0xbb2bf4b5,0xbb244a43,0xbb21257a,0xbb1a9243,0xbb24e17f,0xbb2b9be1,0xbb31f96a,0xbb3b0410,0xbb43f666,0xbb4f828a,0xbb4d5b42,0xbb4ced21, -0xbb4adf4e,0xbb4cd02c,0xbb4cd185,0xbb4d642f,0xbb54957d,0xbb59e6b8,0xbb580f90,0xbb5d3a94,0xbb5e9403,0xbb63a70b,0xbb518588,0xbb4c9b57,0xbb628b55,0xbb5fabcb,0xbb46a98a,0x3a7838df,0x3a324375,0x3a435e7b,0x3a8b03b4,0x3aa28851,0x3acbcf28,0x3a90e918,0x3a767565,0x3a2be264,0x3a8dfef6, -0x3a9d5456,0x3a8a766e,0x3a9ff408,0x3aaa694b,0x3ac2f17b,0x3acb396e,0x3ac27a03,0x3aaeb282,0x3a69af8d,0x3a2e9005,0x39f217e1,0x3a2b5287,0x3a4d09f4,0x3a9730c6,0x3a844339,0x3a5dd31f,0x39cc53a4,0x39d57ead,0x394a2634,0xb92a2fae,0xb9a64f95,0xb926aa82,0x3a2fa33e,0x39a71487,0x39f743fd, -0x3aab0c3d,0x3a335cfb,0x39da7ae0,0x3a73a1c4,0x3ae9cbb7,0x3b1f05ab,0x3b5438c6,0x3b151d42,0x3aeb1aa9,0x3a7c6a69,0x3addc858,0x3ada0ed8,0x3a936a94,0x3ac29ab6,0x3b0d8118,0x3b45a64c,0x3b784b2b,0x3b6cebaa,0x3b379173,0x3aaec20a,0x39c1f40e,0xb8e28ee6,0x39388efc,0x3a6ada65,0x3afa9b5a, -0x3aefcf62,0x3ab844eb,0x38968f83,0xb8a2c1a6,0xba456e01,0xbaabdc99,0xbb0cbe01,0xbaf81f77,0x3861d9f5,0xba7d57cb,0xb9bcd259,0x3af350b0,0x39cfb8cf,0xb98bee72,0x39c295b5,0x3b14d919,0x3b63837e,0x3b9fd876,0x3b5382b2,0x3b13cf6c,0x39f01f56,0x3b1382dc,0x3b39ecdd,0x3b2b2957,0x3b48ae32, -0x3b632554,0x3b92bd65,0x3baf9c63,0x3ba3a5b5,0x3b711c27,0x3aa71536,0xb8612e70,0xba843e38,0xb98d2573,0x3a6d285e,0x3b2181ed,0x3b02d4a1,0x3ad402d6,0xba887323,0xba87e2d7,0xbb394a50,0xbb80256a,0xbbb5f250,0xbb9c9276,0xb9c5df3b,0xbb0f7c32,0xba993b9d,0x3b3f08be,0xb98362d0,0xba41d90d, -0x3a93916b,0x3b7d6559,0x3bd027b7,0x3c153fa8,0x3bdf5804,0x3baaea87,0x3b0394e6,0x3b4fa2c7,0x3b39c5b3,0x3af270f0,0x3afea217,0x3b95c121,0x3c02c829,0x3c364fe7,0x3c281ba8,0x3bf0ba13,0x3b1cdd12,0xba595282,0xbb2b4062,0xbaaf2bd8,0x3abe4d33,0x3bb13425,0x3ba12b3e,0x3b6b80d1,0x3aa29c05, -0x39e0501b,0xbae76a82,0xbbb0636a,0xbbe1b168,0xbbc8f54c,0xbab13900,0xbbabfc49,0xbb511353,0x3ba01a39,0xb9cd3db2,0xbb9b1981,0xbb029eaa,0xbb263a10,0xbaf11f00,0xbb3870d7,0xbb6d3ed8,0xbb91bd32,0xbb972605,0x3afd5137,0x3bfe89ee,0x3c212238,0x3c641494,0x3c011283,0xbb954c14,0xbbc7f08d, -0xbbca0bc3,0xbb52e826,0x393ecdbe,0x3b22ac4c,0x3b91a530,0x3b785d86,0x3a2a2e00,0xbb09d175,0xbba942d7,0xbb71c2d1,0x3b76d12f,0xba450153,0xbae98f1d,0xbace8457,0xba53926e,0x3a713dff,0x3b984ffd,0x3ba69d54,0x3b619f00,0xb9f929e1,0xbb874b51,0x3c578c38,0x3b9c8bce,0xb9e67e8e,0xbbbf7c96, -0xbc426534,0x3a86efa0,0x3bdf78b9,0x3bc77707,0x3b853256,0xbb6ba090,0xbc58c577,0xbc08ad11,0xbaf282f9,0x3bd18d62,0x3be2957e,0x3ba9556a,0x3b492966,0x3a2e6571,0x3a815095,0x3b8d44d5,0x3b6a80e7,0x3b439a50,0x390daf99,0x3a6e49d6,0xba771809,0xbaf93668,0xbb20dd5b,0xba94eefa,0xba226dcb, -0x38d92f3d,0xbacfb246,0xbbbfe6c9,0xbc3e9089,0xbc31cd11,0xbb13c058,0x3c2231fe,0xbcf68722,0xbcf515b8,0xbb973bb1,0x3ba75163,0x3a883340,0x3b082e71,0xbb126be8,0xbc0e6138,0xbbe9a622,0x384a19ed,0x3c1c7e15,0x3aae4436,0xbb6c6236,0xbb84f541,0xbba12c8a,0xbb832f30,0xbb1c9cc0,0xb9a4d738, -0x3aa3e175,0x3b09173b,0x3b00894d,0x3a8780d5,0xba62dc13,0xbafef7a7,0xbade7b31,0xbb23245f,0x39add397,0x3a4e224a,0x38dc7db2,0xba77aa25,0xba502d64,0x3aed0712,0xbb3dc258,0xbb3cd309,0x3a26b5cc,0xbcabaf73,0x3c8b3e0b,0x3c0f567a,0x3b22b397,0x38972ef5,0x3b3867b0,0xbb180b26,0xbb544339, -0xbac1a42a,0xbad9c5ca,0xbb4e5e23,0xbb97bbc9,0xbac1acf5,0x3ab6ca72,0x3b030137,0x3b45d448,0x3b482383,0x3b7423fe,0x3a9f892f,0xb8a7cdc6,0xba0e88ff,0xb9bd7f38,0x3a5e21f4,0x3b09eb62,0x3aae1a24,0x39d85cbf,0x386558fe,0xb9ff7c22,0xba51a686,0xb8cde2c7,0xb802284c,0x398e9a16,0x3b4c7b9b, -0x3b998cf2,0x3b8ddfe3,0x3bd4d515,0x3c6bd787,0xbb9054e5,0xbac7412b,0xba0a191d,0xba9460e4,0xbb114e2c,0xbabe1a25,0xb9d3de78,0x3a883c88,0x3b443ca3,0x3bb6215e,0x3bd872d0,0x3bdc59b9,0x3bbbe1e1,0x3b9a08c7,0x3b3f0653,0x3a2a7c1a,0xbac7e98d,0xbb78a057,0xbba4196d,0xbbace46c,0xbbb9bc67, -0xbba882d8,0xbba1baa1,0xbaff82ee,0xba5444c1,0xba7774ad,0xba8ac1d7,0xbabe943c,0xbaf2ac9a,0xbaad841e,0xb8c82322,0x3ac079b4,0xba5c9235,0xbab1df7b,0xbb21533c,0xbb820ee4,0x3b2c953d,0x3ad2fe46,0x390c94ef,0x3a9dd258,0x3b561c7d,0x3bb6dae7,0x3bf704c5,0x3c1518ec,0x3c01fe26,0x3bda18e4, -0x3bc42b4c,0x3bacceeb,0x3b90d59a,0x3b2bdde6,0x3aeef9f5,0x3a3ff47f,0xba70f305,0xba3a31cb,0xba76ef31,0xba928c29,0xbad78db0,0xbb016ae2,0xbb20a6bb,0xbb02e1e0,0xba87d5ad,0x3a119850,0x3b252e47,0x3b5b9155,0x3b2fb2df,0x3b1d7960,0x3ae3b1b6,0x3aa82359,0x3ad16eb4,0x3af4d667,0x3b1e1df9, -0x3b1373db,0x3b201241,0x3b278622,0x3b524421,0x3b357354,0x3b01d812,0x3aa88897,0x3a8114a1,0x3a934e15,0x3aad8e4e,0x3aece297,0x3b16b16e,0x3a9e654e,0x39811ab7,0xba0cde04,0xbaa4b507,0xbb0245c5,0xbb363ac8,0xbb2baeb2,0xbb29d9d9,0xbb296634,0xbb3ca624,0xbb4a998a,0xbb5e7a7a,0xbb2b8740, -0xbb14ecb8,0xbaecec9e,0xba7a335a,0x3a5469ba,0x3afe256c,0x3b612cd7,0x3b8f3021,0x3bbc0d9a,0x3ba26aa2,0x3b8e8523,0x3b75db5e,0x3b588577,0xbb89741e,0xbb771d9d,0xbb80f6ff,0xbb800456,0xbb6c4708,0xbb5c4a4a,0xbb5a9ceb,0xbb6af83f,0xbb6aa7e2,0xbb721c87,0xbb6bdb8e,0xbb5a30d5,0xbb3f9199, -0xbb25701b,0xbb2b92c1,0xbb2d869d,0xbb33dd4a,0xbb3dc7db,0xbb4934bf,0xbb553059,0xbb5d8d61,0xbb58a83f,0xbb60a90d,0xbb65fcba,0xbb7112fa,0xbb7afe61,0xbb71dbba,0xbb759132,0xbb815b04,0xbb802b28,0xbb7d58ab,0xbb8236b3,0xbb79ebaf,0xbb7eb914,0xbb818750,0xbb699f5d,0xbb4329bf,0xbb33a8de, -0xbb36c8ae,0xbb35e975,0xbb3ddb8b,0xbb4620b9,0xbb487e8a,0xbb486521,0xbb3caeaa,0xbb32d70d,0xbb2d7dbc,0xbb270710,0xbb2512b7,0xbb1f3c68,0xbb279e18,0xbb2ccfe8,0xbb31b103,0xbb38a64b,0xbb3f66af,0xbb465395,0xbb4a68ae,0xbb4c3e0f,0xbb4cd35a,0xbb4c295a,0xbb4f02bf,0xbb525993,0xbb51b3f4, -0xbb519c63,0xbb4a04ed,0xbb491e41,0xbb462777,0xbb412494,0xbb333135,0xbb2df757,0xbb4d535f,0xbb48fdb4,0xbb449f34,0x3a6f0085,0x3a41e99d,0x3a4aca1f,0x3a880406,0x3a9f7e61,0x3acf39ce,0x3a985871,0x3a818d6a,0x3a2e4291,0x3a7aa71b,0x3a8c455e,0x3a93f252,0x3a99e7fd,0x3aa0d836,0x3aab2efb, -0x3ac3b6e2,0x3ac00fcc,0x3ab1b633,0x3a6b27ca,0x3a30daa7,0x39f12fa9,0x3a3703c7,0x3a5582c7,0x3a9220d5,0x3a74f035,0x3a513b49,0x39b44c06,0x39bf9407,0x393960b3,0xb89434ae,0xb9868cc5,0xb8da7d84,0x3a1992ec,0x39bf2da8,0x39fc3b41,0x3a9c6341,0x3a3de13c,0x39f620ac,0x3a69579c,0x3acd57d6, -0x3b136322,0x3b536de5,0x3b203621,0x3afe1c08,0x3a829112,0x3abcda8a,0x3abeb6f8,0x3ab93a9d,0x3ac1f2ae,0x3b04c902,0x3b28cecc,0x3b7106c5,0x3b713694,0x3b467386,0x3ad12908,0x3a30e72a,0x3947ce58,0x3a10a264,0x3a8fafb7,0x3ae3057c,0x3ae14327,0x3aa38c20,0xb93edcee,0xb99bd090,0xba61991c, -0xba9eeb52,0xbb08ab10,0xbafdc3e8,0xb9c89293,0xba7e2fe2,0xb9c5a866,0x3aacf79a,0x39abf194,0x333a8025,0x3a2620c4,0x3b0e85e2,0x3b606922,0x3ba55fcd,0x3b6dc4f3,0x3b2b7413,0x3a26a18f,0x3ad4e3aa,0x3b11358f,0x3b498b91,0x3b45191e,0x3b5bdec7,0x3b70bd1b,0x3ba92aa0,0x3ba4da42,0x3b8305dc, -0x3ac6a703,0x39609de3,0xba403f68,0x383ce685,0x3a880679,0x3af9aeef,0x3ad5b354,0x3aab88d5,0xbad40409,0xbac3df64,0xbb5225bb,0xbb75d847,0xbbb794cf,0xbb9c70bf,0xba869c01,0xbb042e82,0xba8fec76,0x3b0a8608,0xb925c885,0xba595861,0x3a75ad18,0x3b429f87,0x3bba2ba5,0x3c141a27,0x3bed7d14, -0x3bb88397,0x3b15b27a,0x3b212642,0x3b19dacc,0x3b41219e,0x3b121608,0x3b8cbcc1,0x3bd8ea8b,0x3c2ed9a7,0x3c2d664b,0x3c0967fa,0x3b66b053,0x39f5449b,0xba9f85f1,0x3847c3ca,0x3b0c54a3,0x3ba3cc49,0x3b931063,0x3b4a8430,0x39ef25a9,0xba442b31,0xbb35eaea,0xbba80a9b,0xbc01f4e7,0xbbecbc5e, -0xbb2db970,0xbbb869cd,0xbb5df00d,0x3b581cd1,0xba55ba51,0xbb0e2dc5,0xb9941db8,0x3a249e2c,0x3a1f4fe6,0xbb2c336e,0xbb30fcdb,0xbb7eee52,0xbbbead4c,0x3a554a8d,0x3bca84cb,0x3bf69997,0x3c59ca88,0x3c0a54b0,0xbb91a50b,0xbbbe585f,0xbbe085db,0xbbb4bcc7,0xbb1a790c,0xba478f77,0x3a1bf534, -0x3a2a0bf0,0xbaf293c1,0xbb7d0fb9,0xbbbdafab,0xbb7f5e16,0x3b80825b,0xba976f38,0xbb15d16c,0xbadfe114,0xba6c95a6,0x3afa5c94,0x3bda4636,0x3bcb9c21,0x3b86747a,0xb8993e3c,0xbb03b6b7,0x3c3d3776,0x3b3cc6b9,0xbb0535eb,0xbbd786c1,0xbc43a7a1,0xbb0b9253,0x3b74297f,0x3bae882f,0x3b973757, -0xbb20f55e,0xbc4ec63b,0xbc1d0220,0xbb845278,0x3b697375,0x3bee1855,0x3be24208,0x3b8733a6,0x3afd7032,0x3afe72a5,0x3baa450c,0x3b710d59,0x3b4a4207,0x3a70d472,0x3acf761e,0xba0f1819,0xbb228bef,0xbb0bf15e,0xba12ce1f,0xb9d09a56,0x39848143,0xbb04f4b4,0xbbe0f61e,0xbc4fc9d4,0xbc2c7c4e, -0xb9a2a46c,0x3c1c8e43,0xbceb6fcc,0xbccbcb16,0xbb9ed129,0x3b6a2340,0x3b997278,0x3b8d14c8,0xba91f250,0xbc01ee0f,0xbc2a0165,0xbb4ad432,0x3c36fe67,0x3b0d0188,0xbb4b1a13,0xbb8dcb8a,0xbbb10fc5,0xbba38af2,0xbb6b1e28,0xba96ad83,0x39df40fa,0x3aa7c6a0,0x3ac8c447,0x39df4476,0xbadb3ac7, -0xbb1e81f7,0xbaf14566,0xbb0abcac,0x391a0893,0x39e490a9,0x38145bc5,0xba11a5b8,0xba15353f,0x3aac64ac,0xbb88209d,0xbb74c165,0x3b0077b8,0xbcaba182,0x3c651df9,0x3b29c80f,0xb7b53599,0x399ffac3,0x3ba886ed,0xb86796a0,0xbad53269,0xbaaa8219,0xba807bd8,0xbb108809,0xbb5d414f,0xbad71987, -0x3a27991b,0x3a5c9200,0x3b2b3447,0x3b63840f,0x3b8a72e9,0x3b04c61c,0x3a5b3fb5,0x398a513b,0x3a22e931,0x3adbbc94,0x3b3110e9,0x3ad2f80a,0x39a33e03,0xb9f3a150,0xba01400f,0xba126cc7,0x39232ef1,0x383e907b,0x39ffbadd,0x3b6a9e59,0x3b8aff02,0x3b83001b,0x3c01ffd8,0x3c671f99,0xbb4ee40a, -0x392bb890,0x3af6cd19,0x3a183afa,0xbaecded9,0xbae5a9b0,0xba806aba,0x39a119bc,0x3b024ee7,0x3b91aff3,0x3bbe8542,0x3bc69d56,0x3bacaa5f,0x3b8686c2,0x3b295f73,0x39c1a0e7,0xbaff4e3a,0xbb80b944,0xbb9f88f9,0xbba1c435,0xbbb157fa,0xbb9b2573,0xbb878414,0xbab82fa6,0xb9cf8366,0xba811fb0, -0xba8b0d52,0xbac5ee37,0xbafe4937,0xbabd2349,0xb9bfd86c,0x3a67034d,0xba0b4ca8,0xba93f34e,0xbb3a950e,0xbb7ce130,0x39e47213,0xba57726a,0xbb1acfa3,0xba4b86f5,0x3af97e23,0x3ba4e555,0x3bee3424,0x3c12338c,0x3c0a4071,0x3bff788a,0x3bf708b7,0x3bde27a0,0x3bbf2bf1,0x3b7ea166,0x3b3d8930, -0x3ac7a7eb,0xb9c489fc,0xb9b0c686,0xba7996f0,0xbac1c242,0xbb05bf8c,0xbb139d40,0xbb1d8565,0xbac51bbf,0xb9ca9623,0x3a9762cf,0x3b23a31c,0x3b372e93,0x3ae421b3,0x3abd5d37,0x3a65ca40,0x39ee18de,0x3a3a8b71,0x3a4f265c,0x3a968e52,0x3a2131d0,0x3b896a7a,0x3b90825f,0x3ba01746,0x3b8b7eb7, -0x3b54044a,0x3b1b05fc,0x3b0691f0,0x3b0f0918,0x3b187bb6,0x3b2b5686,0x3b3f75c4,0x3acaa779,0x39aecc59,0xba4947fc,0xbab0f20a,0xbb00aeae,0xbb2dce1e,0xbb212fca,0xbb1a834a,0xbb15c23b,0xbb20ba85,0xbb2ad3e9,0xbb3cf7a9,0xbaf5884a,0xbab042a9,0xba2173a5,0x3979179b,0x3b033f95,0x3b51d625, -0x3b905205,0x3ba9ad32,0x3bcef15c,0x3bbdab3f,0x3bb4b5a6,0x3ba9cd83,0x3b9c5ce2,0xbb53dde2,0xbb3816c5,0xbb481736,0xbb47e002,0xbb35f34e,0xbb2dd70b,0xbb368db6,0xbb4e8b31,0xbb533f61,0xbb5bdd39,0xbb55ab6e,0xbb478f46,0xbb2f6f92,0xbb1a338e,0xbb1cc8d7,0xbb1ecbe8,0xbb234a6e,0xbb2cef09, -0xbb38d482,0xbb458100,0xbb54613d,0xbb4ede79,0xbb58a21b,0xbb626a4b,0xbb71f64d,0xbb805de6,0xbb69ec36,0xbb60c198,0xbb5e8482,0xbb4b8e38,0xbb37545d,0xbb2ab80f,0xbb26a6fa,0xbb2fffcc,0xbb367b45,0xbb22ec7c,0xbb2074d7,0xbb0c38e2,0xbb13e8bc,0xbb172543,0xbb228f9d,0xbb2b4b00,0xbb2d5b19, -0xbb2e21eb,0xbb26a70c,0xbb21f348,0xbb21b3ff,0xbb1e58d2,0xbb1ed687,0xbb1c0707,0xbb21e786,0xbb25684b,0xbb28b3c1,0xbb2d66ce,0xbb31e919,0xbb34d3ea,0xbb3cba5e,0xbb41cbb1,0xbb48195e,0xbb41a9c3,0xbb4829e3,0xbb53a2cf,0xbb49acdb,0xbb432165,0xbb35f2f1,0xbb2e527b,0xbb266792,0xbb182e04, -0xbb0f3c4b,0xbb091f68,0xbb2ecfa0,0xbb275d47,0xbb3897a7,0x3a58dfcb,0x3a3f0286,0x3a4aaea4,0x3a7c4ffc,0x3a943f62,0x3ac81a04,0x3a982fe8,0x3a80ddc0,0x3a1ccb8c,0x3a4de99f,0x3a6c244f,0x3a985a2f,0x3a8e9211,0x3a9249a6,0x3a91495e,0x3ab5010a,0x3ab4d44d,0x3aa8ccbd,0x3a5fa9c7,0x3a294dc2, -0x39eb9728,0x3a2df237,0x3a446740,0x3a7b7702,0x3a50f7f4,0x3a307b32,0x395bfd73,0x3987380b,0x38b4b597,0xb8e00bba,0xb98bb228,0xb8f4564c,0x39c94f99,0x39b52ac5,0x39ee2930,0x3a7d38b0,0x3a33c993,0x39ec4fdc,0x3a52fc47,0x3aa853aa,0x3b01eae4,0x3b49b283,0x3b24b134,0x3b0153dd,0x3a6319ea, -0x3a927fd4,0x3a9efc69,0x3adda45a,0x3abfe05c,0x3af5e8dd,0x3b0e36ef,0x3b636f4e,0x3b6c348c,0x3b48a1e9,0x3ae8459e,0x3a777f7d,0x39f941fe,0x3a535203,0x3a9a8cff,0x3aba24e9,0x3ac6a851,0x3a866093,0xba0393a0,0xb9fa5b49,0xba6ccbbd,0xba9d8e9b,0xbafc5d9d,0xbaf7c4a7,0xba6a9100,0xba763224, -0xb9cdd6be,0x3a2b4abe,0x396a5317,0x3970c1a4,0x3a69ad82,0x3b02248a,0x3b525baf,0x3ba2cecd,0x3b7e5325,0x3b3b8508,0x3a1aab13,0x3a804076,0x3ace529d,0x3b646675,0x3b3ed170,0x3b51bd41,0x3b44d61b,0x3b9e7776,0x3b9f9b40,0x3b835591,0x3ad97404,0x39f410cf,0xb9da6db3,0x39885e2c,0x3a87c32f, -0x3a9d1d69,0x3a9fdfc6,0x3a80e991,0xbb117f1a,0xbaf0b94e,0xbb63ea88,0xbb79db78,0xbbb4d95f,0xbb972c37,0xbaed8a18,0xbae4e4d6,0xba721b71,0x3a9bc5ed,0xb83eba60,0xba74da79,0x3a344d2f,0x3b00f23a,0x3b9cfd85,0x3c0ca0b8,0x3bf3a26c,0x3bbbc5cd,0x3b06b542,0x3ad6ef84,0x3af7ed37,0x3b84f42d, -0x3b2b1089,0x3b865a5a,0x3bb5ecf4,0x3c24134e,0x3c2c647a,0x3c112172,0x3b90eb07,0x3ae09278,0x3940dc81,0x3aa57aa9,0x3b2b8167,0x3b8756e1,0x3b7f40d2,0x3b28874d,0xba16af3d,0xbaea22fe,0xbb67e0ad,0xbb9c7133,0xbc0b8572,0xbc01d56e,0xbb83f1dd,0xbbb881ca,0xbb5a06e1,0x3ab8879c,0xba9e05f8, -0x3a2bfc9c,0x3ae377c8,0x3b7ce449,0x3b43c984,0xbb1b8854,0xbad8cffd,0xbb402b8f,0xbbc4c85c,0xb90242d4,0x3b8c4768,0x3ba7ed53,0x3c3fd05a,0x3c05a47d,0xbb8ab372,0xbbb864c0,0xbbf47806,0xbbfbd48a,0xbb9bcf37,0xbb77faed,0xbb50c3dc,0xbb26f0cf,0xbb872517,0xbbaf4e6b,0xbbc2feea,0xbb76fbd7, -0x3b7c96d7,0xbaa3c062,0xbb105c17,0xbab3f569,0xba227a74,0x3b3d5747,0x3c06707c,0x3becb765,0x3b9f8433,0x3a4a185b,0x39e21a38,0x3c14db55,0x3a82457f,0xbb54c290,0xbbe03f04,0xbc38cc6c,0xbba0cb91,0x3a471d03,0x3b925331,0x3ba84de6,0xba68a561,0xbc36fd38,0xbc291af1,0xbbc2f177,0x3a580d53, -0x3be6cbf6,0x3c05c2ad,0x3ba60e54,0x3b5bb3e5,0x3b498416,0x3bbf639b,0x3b6d0195,0x3b3f554c,0x3ac831fe,0x3b04549b,0xb93c8e2c,0xbb36c01a,0xbaf3626f,0xb9262874,0xb95b2fbf,0x399219ed,0xbb1cc17f,0xbbf4d947,0xbc5a67eb,0xbc2416b3,0x3ab44434,0x3c098e2d,0xbccc841f,0xbc9da062,0xbbbe9796, -0x3aba0a50,0x3c05bc8e,0x3bc7f2d2,0x38a33b2e,0xbbdbb9c6,0xbc4760a4,0xbbb40401,0x3c39e6b5,0x3b491e45,0xbb0376bc,0xbb8ff3ae,0xbbb423ef,0xbbb62f0d,0xbb944e07,0xbafe1a7f,0xba1b2005,0xb8bd9b21,0x3a34eec1,0xb9b14e26,0xbb172898,0xbb3a2801,0xbb021f84,0xbad87ee7,0x38c1605c,0x39834711, -0xb8ac77c9,0xb9560936,0xba01950a,0x393b2462,0xbb8f63ae,0xbb73c340,0x3ac8fd4b,0xbc9c36a1,0x3c24f9a3,0xbaebac13,0xba190014,0x3ad5a281,0x3be560f5,0x3b4dc159,0x3a79dd26,0xba91b01a,0xba0233d6,0xbacadcd6,0xbb09474c,0xbae48aa8,0xb866c1a9,0xb90a00c9,0x3b16e013,0x3b78e7e3,0x3b8f0bc3, -0x3b34bfc1,0x3aeb92cb,0x3a886073,0x3abf040d,0x3b13ed38,0x3b46d8ca,0x3ae551f7,0x39592d6c,0xba64e358,0xba08decf,0xb9939e4a,0x39b6bff6,0x392fee9d,0x3a363230,0x3b615952,0x3b45e8a2,0x3b46a3d0,0x3c0ab352,0x3c4af65e,0xbae7cfac,0x3ac60bd2,0x3b659f19,0x3ae2a8ec,0xbad6b665,0xbb124554, -0xbae399d2,0xba311730,0x3a594254,0x3b49e0be,0x3b9e2781,0x3ba8a51b,0x3b98b2fa,0x3b6b74ca,0x3b16b64b,0x394b752b,0xbb0dcff2,0xbb74bb75,0xbb9235cb,0xbb944e3c,0xbba24a64,0xbb865c16,0xbb495ffb,0xba60779f,0xb7a22c4a,0xba5ee9fa,0xba837326,0xbab7c996,0xbad3738a,0xbaa3a4ff,0xba0425b5, -0x3945793a,0xb9118946,0xba485878,0xbb33911d,0xbb5a25b8,0xbad31608,0xbb482ae7,0xbb9005c8,0xbb245fc9,0x3a0b2643,0x3b7f420c,0x3bc8c308,0x3bff0b81,0x3c05ecbc,0x3c08638d,0x3c0c387e,0x3c005cd1,0x3be034b8,0x3b9f7ac5,0x3b7a6d90,0x3b157541,0x3970b70f,0xb8ef8f99,0xba91c9b1,0xbb019db4, -0xbb22ad19,0xbb232901,0xbb126985,0xba7ff5d6,0x393f144b,0x3acf53ff,0x3b0f57a2,0x3b01eef1,0x3a4ea9e8,0x3a1d321c,0x398d2aa7,0xb8b4bfaf,0x3881d64e,0xb873c126,0x3836d791,0xba5eabe6,0x3baff9eb,0x3bb80a63,0x3bc0f73a,0x3bac44d3,0x3b8c3f5b,0x3b5d91c6,0x3b4a7b63,0x3b4f9e1e,0x3b4b1715, -0x3b486c8e,0x3b4917cf,0x3acde314,0x3985d5d7,0xba88615b,0xbabe34ff,0xbafc7e41,0xbb216d46,0xbb12d1bb,0xbb06ca6f,0xbafec76d,0xbb04d710,0xbb0b222d,0xbb1c0025,0xba967050,0xb9d15754,0x3a24f056,0x3ab945ea,0x3b4778ba,0x3b879f63,0x3ba19079,0x3bb14245,0x3bcb059d,0x3bc30904,0x3bc42bd4, -0x3bc0ecd5,0x3bb7127f,0xbb0acb55,0xbacf055d,0xbaef7713,0xbaf3d434,0xbada9d7d,0xbadb79b5,0xbafb9144,0xbb174ef5,0xbb2360a9,0xbb2e758a,0xbb2c7c1a,0xbb273bcf,0xbb185721,0xbb0d541d,0xbb0e10ec,0xbb113d92,0xbb15907d,0xbb200156,0xbb2d6ffc,0xbb3ab1ff,0xbb48ebbc,0xbb446ea9,0xbb4e09eb, -0xbb5a1939,0xbb6c87fd,0xbb7cffe4,0xbb5e496a,0xbb4ccb06,0xbb3e914b,0xbb1e5d11,0xbafa038e,0xbac2d7ec,0xbac042f7,0xbad0c2a8,0xbad9989e,0xbab58467,0xbaf1b50f,0xbac07a8d,0xbada19cc,0xbae66781,0xbaff614d,0xbb074cd5,0xbb091a7e,0xbb0a7758,0xbb0984dd,0xbb0b465b,0xbb10d015,0xbb11bda7, -0xbb156e82,0xbb173591,0xbb1a6475,0xbb1c8c94,0xbb1e6f10,0xbb210583,0xbb2347de,0xbb23ffc7,0xbb2b214c,0xbb314b78,0xbb39ee47,0xbb30d619,0xbb386b51,0xbb4b03dd,0xbb3a0bcc,0xbb2dfc7d,0xbb1ce4c6,0xbb109aa8,0xbb0509dc,0xbae10a6e,0xbad8b5ca,0xbac997a6,0xbb095bb9,0xbb0048ac,0xbb2a6e34, -0x3a37429a,0x3a31e207,0x3a3ec593,0x3a5d7fb6,0x3a825c72,0x3ab78a34,0x3a9033c5,0x3a714889,0x39f12056,0x3a1ad9c8,0x3a3a1ae4,0x3a956b7f,0x3a7cdcd6,0x3a7f59e5,0x3a6b2fbb,0x3aa0fb4a,0x3aa2e2da,0x3a9642b7,0x3a48a962,0x3a18e3ea,0x39d7a482,0x3a1bb142,0x3a2caac5,0x3a4e9b98,0x3a24e5e4, -0x3a0cdc34,0x389e82a0,0x392a822e,0xb648f878,0xb955f8a1,0xb98e6b4a,0xb9000a10,0x3924b1c7,0x39a759d4,0x39d65d85,0x3a3f5db7,0x3a2578af,0x39d0447a,0x3a357c36,0x3a7f6234,0x3ada62ab,0x3b387244,0x3b21fba9,0x3af89065,0x3a1d4b7b,0x3a4a13a7,0x3a7d201c,0x3af8148f,0x3ab7c0fc,0x3adbd30f, -0x3ae7f07c,0x3b50d253,0x3b601586,0x3b4046f9,0x3af43ac0,0x3a96829a,0x3a3d5a10,0x3a80737c,0x3a96ca25,0x3a8b684e,0x3aa2d361,0x3a4632df,0xba5a44ee,0xba1c8e28,0xba64b543,0xbaa36b1a,0xbadc6266,0xbae5fcca,0xbab8010c,0xba6697dc,0xb9cc0ef5,0xb72d380a,0x38914560,0x39cb45c1,0x3a960ce4, -0x3ae382ec,0x3b3d6f45,0x3b991c80,0x3b820b19,0x3b421e79,0x39af736d,0x39d95c40,0x3a83d429,0x3b767315,0x3b33e47c,0x3b426222,0x3b1e7ed9,0x3b91b6cf,0x3b96b15e,0x3b777fd7,0x3ae24158,0x3a30b662,0xb898a542,0x39d26406,0x3a70edc7,0x3a0024bf,0x3a48318e,0x3a296c66,0xbb3570e4,0xbb073a8f, -0xbb6ef300,0xbb870557,0xbbae568a,0xbb8db490,0xbb2db41c,0xbababc1a,0xba33baa9,0x399a2ba8,0x38035f5c,0xba8b0d03,0x39f853a8,0x3a82f914,0x3b79b608,0x3bffd6e7,0x3bf12e2e,0x3bb553db,0x3aba4b33,0x3a5eeea8,0x3ac91e94,0x3ba3f292,0x3b3e7f84,0x3b780ec3,0x3b96563d,0x3c171bf8,0x3c270f30, -0x3c10c871,0x3ba6d793,0x3b369893,0x3abebb9a,0x3b11c81f,0x3b3b4294,0x3b458468,0x3b4ea913,0x3b0444e4,0xbae202b8,0xbb281ae2,0xbb81c49f,0xbb92decf,0xbc0c5c6a,0xbc0501da,0xbbb0a3c0,0xbbad978b,0xbb48bba6,0xba0ce7e6,0xbad0e6a3,0x3b59dbfa,0x3b76cd89,0x3bda800a,0x3ba4d86b,0xbaf99ae3, -0xba2248f5,0xbaec8ef9,0xbbadaf6f,0xba55b82f,0x3b181fdd,0x3b3729dc,0x3c1aa0cf,0x3bebdf99,0xbb7647fd,0xbbb39f9b,0xbc01ba0a,0xbc1b895f,0xbbe04510,0xbbceaedd,0xbbce34e3,0xbbae8105,0xbbc3a2c9,0xbbd48990,0xbbb7f18e,0xbb55b6a0,0x3b696e85,0xba881d71,0xbad67dd9,0xba2f54a1,0x37fe923f, -0x3b79bbdd,0x3c1404d5,0x3c024078,0x3bb7faa1,0x3afbe6b4,0x3b35a377,0x3bcb2fc7,0xba33197d,0xbb8546e9,0xbbdded84,0xbc2760ed,0xbbe77771,0xbaeeb85e,0x3b676177,0x3bb0ad91,0x3a3b5d33,0xbc17f960,0xbc2cfb08,0xbbf24567,0xbab8f3d6,0x3bc9d00d,0x3c0d784d,0x3bbff35b,0x3b9cd7b5,0x3b8a909b, -0x3bc95b2a,0x3b617ab3,0x3b285dda,0x3af741ff,0x3b0fb9ce,0x38832f13,0xbb3acead,0xbad5ce3a,0x3851307b,0xb90d90e7,0x38ba534a,0xbb30711f,0xbbf78d61,0xbc58f6db,0xbc17928a,0x3b358fc1,0x3bda844e,0xbca1eee3,0xbc625c07,0xbbecee4d,0xba64bb58,0x3c33dc38,0x3bebfc50,0x3ab2f24c,0xbb8d9ea0, -0xbc4b99b2,0xbbebd465,0x3c268e39,0x3b80de4d,0xba16724f,0xbb91e4be,0xbbae2470,0xbbbc8b37,0xbbaa9da1,0xbb2d6565,0xbad46fd3,0xbad43279,0xb9af44d7,0xba8f8107,0xbb311585,0xbb4c27cd,0xbb04c869,0xba92139c,0x39436a11,0x395741a3,0xb91e822f,0x38ae6465,0xb9d6dc3e,0xba96e54f,0xbb664969, -0xbb41a7f7,0xb9de3ab0,0xbc82b72d,0x3bbba0b8,0xbb53d35d,0x3a8a7004,0x3b7bc611,0x3c012396,0x3bcd6d4b,0x3b7b4aae,0xba00253b,0xb947cd74,0xbaa93d39,0xba9e0a3c,0xbaf2ec91,0xba1e44c5,0xba543f3c,0x3b078120,0x3b7d5c7f,0x3b880a1d,0x3b577c77,0x3b2cdc62,0x3ae51da8,0x3b0aecb0,0x3b2adde2, -0x3b4f6a97,0x3ae5e50b,0x38ee0d77,0xba89d732,0xba0bb774,0xb7d45a60,0x39bb65c8,0x392ff866,0x3a448f93,0x3b33ddb3,0x3abc5602,0x3ae087a5,0x3bf993d0,0x3c13785e,0xb9c4210c,0x3b1afe9f,0x3b8a69ef,0x3b1acaa6,0xbace3177,0xbb36360f,0xbb2fe621,0xbaf0d080,0xba047a53,0x3ac30bba,0x3b682b96, -0x3b7ecdf5,0x3b779d1a,0x3b4b73fc,0x3afd858e,0x38442785,0xbb0ba0d5,0xbb56aa25,0xbb7ce01f,0xbb856670,0xbb8c5cf9,0xbb55bdac,0xbaf81e58,0xb9b0e66b,0x39883364,0xba256504,0xba6968b1,0xba93ff02,0xba83157c,0xba610192,0xba012be4,0xb9e8e733,0x39113c2a,0xb9b918e4,0xbb06d011,0xbb1b9a4a, -0xbb5542f5,0xbb9ce460,0xbbb88c98,0xbb77e5b3,0xba6ba36c,0x3b0d5b1a,0x3b8863c5,0x3bbe5fcf,0x3bea89c0,0x3c054570,0x3c11af40,0x3c085382,0x3bf0dec0,0x3bb27bac,0x3b8f25cb,0x3b34386f,0x3a302fc0,0xb9232b54,0xbab9ecba,0xbb20ad8d,0xbb3ad735,0xbb2b5453,0xbafebe13,0xb9f0a3af,0x3a2718ac, -0x3ae9abf8,0x3ad9028a,0x3a8ada8b,0xb83c1d32,0xb8a6a95c,0xb914a1aa,0xb9db2690,0xb9cb6b6f,0xba3fe5bd,0xba76fc4e,0xbb08fd73,0x3bbb7b8f,0x3bc04734,0x3bc11832,0x3bb226c1,0x3b9ae503,0x3b83cac2,0x3b7c5620,0x3b80df04,0x3b6a909f,0x3b5048ce,0x3b3c3a79,0x3ab411bb,0x389c4459,0xbaa863ef, -0xbac754ad,0xbaf48a69,0xbb1341a7,0xbb0196d9,0xbae1e24f,0xbace4b73,0xbad1d4fa,0xbadb22d5,0xbafcba00,0xba0b87a1,0x39e63474,0x3ae924ad,0x3b205dcf,0x3b79b0ff,0x3b9aa5df,0x3ba35d60,0x3ba684c0,0x3bb146b5,0x3bb19849,0x3bbb2ef3,0x3bbdce90,0x3bb7897c,0xba4ab9c4,0xb8b3f1ea,0xb9aeb988, -0xb9ed00ae,0xb9e246ea,0xba1e9222,0xba7bad24,0xbab0494f,0xbad9fd77,0xbaf78255,0xbb00e8bb,0xbb076599,0xbb05e295,0xbb08f64f,0xbb0857c8,0xbb0c14e3,0xbb104aa3,0xbb1b7235,0xbb29a386,0xbb36fde1,0xbb3fd7c9,0xbb38d9e3,0xbb3dee9e,0xbb46c5a5,0xbb584fe7,0xbb654635,0xbb452003,0xbb2f40f2, -0xbb194209,0xbae1af30,0xba8bd162,0xba12b383,0xb9fcc6d9,0xba116c50,0xba0a9181,0xb958e2d0,0xbaa34bbb,0xba5d0565,0xba92d5a4,0xbaa3b2db,0xbabc1bda,0xbac9527e,0xbaced074,0xbad5252a,0xbae0554d,0xbaf08258,0xbb03421e,0xbb08bcb8,0xbb0faeae,0xbb16a417,0xbb16eaa2,0xbb180c92,0xbb189481, -0xbb192e14,0xbb192626,0xbb18a420,0xbb1beb21,0xbb1fdf29,0xbb2731dc,0xbb1d2d2a,0xbb2204eb,0xbb375d6d,0xbb236e45,0xbb145e35,0xbb0276f8,0xbae896f5,0xbacf58a4,0xbaa00ece,0xba98bbcc,0xba86abb2,0xbac45c57,0xbab04b3b,0xbb203628,0x3a1e27e8,0x3a22785f,0x3a3b973f,0x3a44886d,0x3a666042, -0x3aa5b538,0x3a8948ce,0x3a64c5fd,0x39b4ce41,0x39ed6cdb,0x3a1781d0,0x3a9555f6,0x3a66a7d4,0x3a655f77,0x3a43decb,0x3a91ab84,0x3a94a120,0x3a863609,0x3a3a1281,0x3a10669b,0x39da6af9,0x3a08ebad,0x3a0df66a,0x3a1504a7,0x39fb8d9f,0x39ca3bd1,0xb8e03cda,0x378d2477,0xb91a54f1,0xb9cf5d43, -0xb9ae5d77,0xb94014ec,0xb9034fa2,0x399296dd,0x39cedefc,0x39f1aedb,0x3a0f1579,0x3991ff09,0x3a264c6a,0x3a3e28da,0x3ab579a6,0x3b24516e,0x3b1d51d4,0x3aee7c3d,0x39c1668a,0x3a08aafc,0x3a54c8ea,0x3b094056,0x3ab126a7,0x3ac2b045,0x3abd6d1b,0x3b3ea6b4,0x3b52f7b8,0x3b35b876,0x3aff0a59, -0x3aafd3d2,0x3a7c88d0,0x3a8809db,0x3a89a8b8,0x3a443c14,0x3a712c92,0x39ef00f8,0xba8d283a,0xba1bff15,0xba3ed242,0xbaa902c9,0xbaadbddb,0xbac23695,0xbaeafff1,0xba48dcec,0xb9bc4f5f,0xba1234a1,0xb8a0e353,0x39f31fb8,0x3ab78c68,0x3ac57578,0x3b27c263,0x3b8ae9b4,0x3b81ccdd,0x3b45cf46, -0x38c130ac,0x3874c5d9,0x3a277c77,0x3b83afa0,0x3b2a6850,0x3b339c01,0x3b02a66d,0x3b86ab9a,0x3b8e0c51,0x3b64ed00,0x3aee3c25,0x3a6ef495,0x399a598e,0x39f3e320,0x3a3a6a10,0xb8cc6b1f,0x3995a11d,0x3991d956,0xbb51e85a,0xbb121f0b,0xbb7185a2,0xbb980be4,0xbba4d798,0xbb82dec9,0xbb61fe0e, -0xba8ea435,0xb9d9baf2,0xb9ed2c15,0x38809955,0xbaa1a17a,0x39b052df,0x39669d98,0x3b3d405d,0x3bdfb4fc,0x3be904a0,0x3bacac0d,0x3a5185b9,0x39983891,0x3ab7e31e,0x3bbff84e,0x3b4bf6c6,0x3b598d59,0x3b7362cb,0x3c09810e,0x3c1f8aa9,0x3c0c226f,0x3bb7fefc,0x3b721178,0x3b25faa2,0x3b38c439, -0x3b3ae335,0x3af123c6,0x3b1425ae,0x3ab35953,0xbb360d69,0xbb409245,0xbb81c0a5,0xbb8b39b4,0xbc039421,0xbbfcc485,0xbbd65d18,0xbb9b0990,0xbb2f7c66,0xbb14abec,0xbafe8e51,0x3bb37518,0x3bb92a87,0x3c10fee2,0x3bda52c5,0xba82f754,0x39cc2d76,0xba346ef2,0xbb7d6249,0xba99df1e,0x3a1fb9ff, -0x3a586093,0x3be695b3,0x3bc78b5d,0xbb2bb046,0xbba77280,0xbc04081f,0xbc2e3aea,0xbc09e5c9,0xbc04cbc0,0xbc092591,0xbbf355d4,0xbbee0de4,0xbbec6f05,0xbb9da184,0xbb1b6cb6,0x3b483b0e,0xba216543,0xba559dcd,0x395900e2,0x3a56140a,0x3b92f54f,0x3c1325c2,0x3c074983,0x3bcc7928,0x3b4e9d1c, -0x3b99b5d2,0x3b5ad4a1,0xbaf91106,0xbb8e8efd,0xbbd15e86,0xbc13801c,0xbc09c222,0xbb6d67ce,0x3b392f3f,0x3bb520ef,0x3b12467c,0xbbea66fe,0xbc29fe93,0xbc09f92f,0xbb479fb9,0x3b9aab9b,0x3c075d97,0x3bd23973,0x3bc695b4,0x3bacd745,0x3bc715dc,0x3b4d70f7,0x3b0b1d3c,0x3b017d15,0x3b0a2233, -0x3925c455,0xbb324fd7,0xbab1e969,0x39356d19,0xb98617e5,0xb94d4886,0xbb393831,0xbbe87872,0xbc49ca4d,0xbc057e4a,0x3b73d47f,0x3b9c0dbe,0xbc6d6da8,0xbc139d84,0xbc0afe2e,0xbb2da38c,0x3c57b8a3,0x3c010e6d,0x3b301fd5,0xbaca6591,0xbc3f602d,0xbc075798,0x3c062566,0x3ba052df,0x3aa82602, -0xbb88fd10,0xbb9bf0fc,0xbbb3b215,0xbbb2a18b,0xbb505cfd,0xbb20a8f6,0xbb3ce87c,0xbaa6f841,0xbadbe50b,0xbb3ee71e,0xbb4eb2f5,0xbaf66df3,0xba152673,0x39cd9c4d,0x38e9b8f5,0xb8ce3380,0x39a692fa,0xb8e9cf17,0xbb0e317c,0xbafd8fd7,0xbae5c4bf,0xbb5ba78b,0xbc4e611f,0x3ac6c58b,0xbaca9528, -0x3b835006,0x3bc4600f,0x3bf3e62f,0x3c0d26ff,0x3bd84f1a,0x3a81c37e,0x3957376e,0xbaa3a8c3,0xba226ddc,0xbaff276a,0xba7fccab,0xba8b86ff,0x3af45916,0x3b6bf032,0x3b736403,0x3b6d4a84,0x3b5a2fc7,0x3b1d4c93,0x3b2a7fba,0x3b3815bc,0x3b4fefa3,0x3ad7760a,0x388b4257,0xba84da4e,0xb9e3c00d, -0x38f722d1,0x3916318d,0xb7aa9d78,0x3a222d01,0x3ae1d420,0x38549847,0x39a48f05,0x3baeb4be,0x3b8bc87f,0x3a7da3f9,0x3b39fda2,0x3b90bbec,0x3b3dfcaf,0xbaaa381d,0xbb47bdaa,0xbb69410d,0xbb4357b8,0xbaefd9a7,0xb8fa626b,0x3b088038,0x3b261d46,0x3b3840d2,0x3b2e8d96,0x3acacb4d,0xb6dfc3ce, -0xbaeb69c0,0xbb2cb2ef,0xbb4c2f2f,0xbb63d35b,0xbb5f7c79,0xbb133821,0xba41170f,0x3904887e,0x39ebd2df,0xb9d3aa4d,0xba3ba702,0xba36541f,0xb9ac7775,0xb9c24b9a,0xb9bf67c2,0xba66942c,0x3951d0a5,0x37775158,0xba661f8a,0xba7a6963,0xbb8f02ed,0xbbbb9613,0xbbbf77ef,0xbb907076,0xbb112957, -0x3934f471,0x3af33266,0x3b640028,0x3bb9755e,0x3bf03af6,0x3c0c2408,0x3c068167,0x3bf138d6,0x3bb8f9ef,0x3b950c0d,0x3b3f7c8c,0x3a60d2e2,0xb9c0c6fc,0xbae11bf8,0xbb354683,0xbb491c53,0xbb291577,0xbacd680b,0x36e15b69,0x3a7a0215,0x3ae0d21f,0x3a8587c4,0x3953ce58,0xba21c378,0xba0dfa7e, -0xb9cced72,0xba26500d,0xba3c733d,0xbaa66d3f,0xbae9b48b,0xbb44bb6d,0x3ba9fd3a,0x3ba86dff,0x3ba1afac,0x3b9b89a5,0x3b904d29,0x3b8645f1,0x3b87a8ee,0x3b8d1b43,0x3b76a81d,0x3b4d62bd,0x3b2d5a72,0x3a9d45e3,0xb8075fcc,0xbab4efd3,0xbac4ebf9,0xbae6131b,0xbb0413ca,0xbadf1012,0xbab8d4d1, -0xbaa33756,0xba9d2496,0xbaa3b67b,0xbac08ab0,0xb7cef671,0x3a9178b7,0x3b31b060,0x3b50e97a,0x3b88e058,0x3b9e1489,0x3b95881e,0x3b8b1ec2,0x3b85b5db,0x3b8d548a,0x3b9ca378,0x3ba2ff18,0x3b9f1b22,0x3a3578a3,0x3ac02c83,0x3a9dd706,0x3a801918,0x3a4eb5bb,0x39edfd17,0x3745e379,0xb9b76a55, -0xba536659,0xba91ba99,0xbaad09a5,0xbad0e56e,0xbae88da1,0xbb05ca96,0xbb0376f3,0xbb06ef64,0xbb0aae6b,0xbb15f453,0xbb2359df,0xbb301c1a,0xbb349e42,0xbb24edb1,0xbb21cf0a,0xbb239f50,0xbb30f4f4,0xbb34bb07,0xbb1659d3,0xbafab751,0xbac5cf2e,0xba56531a,0xb885623e,0x39e1d480,0x3a186e11, -0x3a0b315f,0x3a2ef969,0x3a88687a,0xba34d317,0xb9985ead,0xba23c7c7,0xba49c5fc,0xba750504,0xba86bb85,0xba8fcad4,0xba9aa134,0xbab05f49,0xbaca3a88,0xbae8e9ec,0xbafbd730,0xbb07b85c,0xbb1373b1,0xbb113b4c,0xbb11bd0a,0xbb112380,0xbb102549,0xbb0e77b8,0xbb0c7d69,0xbb0dc3cf,0xbb0fbc55, -0xbb176945,0xbb04be10,0xbb07a0b7,0xbb1e9910,0xbb0ac1a7,0xbaf59fec,0xbad41c56,0xbab83f60,0xbaa06a41,0xba5f23da,0xba3c3209,0xba09b3dd,0xba7fa5ea,0xba4d8014,0xbb12bd56,0x39ff1c08,0x3a0b252b,0x3a2cf183,0x3a25fde2,0x3a4135ce,0x3a8cd2b1,0x3a77dea0,0x3a4c4fd7,0x39572624,0x39a0fc54, -0x39e60e94,0x3a90b851,0x3a48ad95,0x3a44a18d,0x3a1ccdef,0x3a7e64e2,0x3a830380,0x3a688beb,0x3a25da75,0x3a026e51,0x39ce7914,0x39e1e855,0x39e05700,0x39dfe0f2,0x39a50d6b,0x39780167,0xb96cc521,0xb892d48c,0xb9727552,0xba11562d,0xb9b45d60,0xb952c2b9,0xb9b774cb,0x39791c77,0x39ba6af8, -0x3991cae8,0x39efd58c,0x39180b1f,0x3a0fe16f,0x3a00b654,0x3a8ee9db,0x3b0a34ec,0x3b11ccff,0x3adaa68b,0x3907a46b,0x39914feb,0x3a29f254,0x3b110533,0x3a9e3318,0x3a9d629e,0x3a92762b,0x3b279caa,0x3b405041,0x3b27aea4,0x3affc932,0x3abdcd19,0x3a92fdfd,0x3a85f188,0x3a650b07,0x39ff5539, -0x3a10cc7c,0x390ac867,0xbaa1daf2,0xba0ed2c9,0xba137115,0xbaae19db,0xba7cb59e,0xba988cd9,0xbb056f31,0xba25e2b7,0xb9a24d5a,0xba779d13,0xb9814510,0x39e5d401,0x3acb570b,0x3aa680b3,0x3b105f60,0x3b6e4e68,0x3b777d8b,0x3b3f253c,0xb9424b36,0xb9831659,0x39a61d14,0x3b887f7b,0x3b198543, -0x3b1d9a64,0x3ad3f695,0x3b73e13c,0x3b8311ee,0x3b50ced8,0x3af4ebc8,0x3a8eb612,0x3a239ac2,0x39eca66c,0x39e15690,0xba008c53,0xb966e9c4,0xb90e9bce,0xbb65b318,0xbb1843c0,0xbb6c22dc,0xbbab011c,0xbb98099b,0xbb6e1b97,0xbb87eefd,0xba4f2b72,0xb934a666,0xba82bb3f,0x37a02cee,0xbabfa02a, -0x394ed708,0xb9be3c98,0x3b043b3d,0x3bb7aa58,0x3bd802c5,0x3b9f633e,0x394f5b9d,0xb9721410,0x3aa4a894,0x3bd3a699,0x3b4600a1,0x3b2605bf,0x3b36dcfb,0x3bf1b005,0x3c141794,0x3c043e21,0x3bc18ab8,0x3b8da8e5,0x3b5be027,0x3b47180d,0x3b29a108,0x3a4aec86,0x3aa177a7,0x3a20b1f0,0xbb66ea6a, -0xbb3d3c29,0xbb687f3b,0xbb7f09fd,0xbbe523a6,0xbbdea1b8,0xbbed5669,0xbb83f26c,0xbb12d372,0xbb6c71b0,0xbb1523b0,0x3be41b6c,0x3be9e640,0x3c2797ae,0x3c002205,0x399bf4e8,0x3a940e2f,0x38147030,0xbb13a27b,0xbab3a406,0xba5385eb,0xba488095,0x3b9dc49f,0x3ba8ab40,0xba461faf,0xbb914554, -0xbc012198,0xbc3529c2,0xbc1ad6b4,0xbc177cdd,0xbc1b0698,0xbc0ebd63,0xbc027cd7,0xbbf634f3,0xbb6a6c03,0xba9e4b95,0x3b1cba85,0xb8e41f18,0x37d5acf7,0x3a79e6f2,0x3abfcd77,0x3b9a6548,0x3c05008c,0x3c036b91,0x3bdb4dde,0x3b8cc7f0,0x3bc68899,0x3a59d733,0xbb2c7212,0xbb8d3e7f,0xbbc315bb, -0xbc02372d,0xbc169181,0xbb9c860a,0x3b1c812c,0x3bb3da64,0x3b647d53,0xbba2b508,0xbc23f7a3,0xbc180399,0xbb8b18c9,0x3b3d2747,0x3be91fe6,0x3bd78ba7,0x3be11d3a,0x3bc2c3b3,0x3bb96bf6,0x3b301a1e,0x3ad34719,0x3af0b994,0x3aec2b1e,0x38a91bb9,0xbb1e84b5,0xba77196b,0x38e83799,0xba044df8, -0xb9eba963,0xbb2e433e,0xbbcb1cc4,0xbc2f9247,0xbbdccf2a,0x3b8a3dce,0x3b3b2625,0xbc2644ea,0xbba458d5,0xbc13f037,0xbb66628b,0x3c6cf694,0x3c04ff62,0x3b6d49f5,0x3a323ed0,0xbc2de4a3,0xbc11df94,0x3bb820e3,0x3bba464d,0x3b53f148,0xbb6c550d,0xbb842693,0xbba2ba6d,0xbbae47d9,0xbb6a626e, -0xbb48525e,0xbb6eddd8,0xbafcb559,0xbb0430f7,0xbb413edb,0xbb40c05b,0xbacc224f,0xb826bc26,0x39f1730f,0x3851a837,0x38d8d9c4,0x39ef0ac0,0x39eafe52,0xbb2450e3,0xb99f7cc2,0xba19d946,0xbbcd4ec9,0xbc1f9ce3,0xbb08ae98,0x3b25b4e1,0x3bd5dfd1,0x3bd59c8d,0x3ba14818,0x3c163035,0x3c0cd7de, -0x3b558185,0x3a5139c5,0xbaacb36e,0xb9d63e71,0xbb0dcfe3,0xbab3a915,0xba923b3e,0x3abfb946,0x3b3be305,0x3b4725f6,0x3b6e903c,0x3b75ac4f,0x3b421fbb,0x3b422203,0x3b3f809c,0x3b4bcb34,0x3aba0123,0x381e2068,0xba5226fe,0xb986e572,0x388d373a,0xb8411a71,0xb999b08d,0x39a7ea83,0x3a37224d, -0xba410bd2,0xba7018f2,0x3ae19b1a,0xbaa13bb7,0x3b1944bc,0x3b435114,0x3b87a7fe,0x3b5a0497,0xba5643d9,0xbb423c66,0xbb8d730d,0xbb884647,0xbb4f2e01,0xbade66c9,0x39f9046d,0x3a95fa29,0x3ae543a6,0x3b091015,0x3a92eb01,0x37cc8700,0xba9d3ed4,0xbafa61eb,0xbb195034,0xbb326bff,0xbb1a1f85, -0xba93b7ec,0x39b28ab7,0x3a1337e8,0x3a152b84,0xb9607435,0xb9ec03b2,0xb96e222c,0x39181db8,0x38014fe3,0xb90f2faf,0xba8a7067,0x3831d02d,0x39a9ebbc,0x3a209c6c,0x3a66cf7b,0xbb9e6b28,0xbbbfb3d6,0xbbac5004,0xbb937d74,0xbb579256,0xbaea46ab,0xb9d93666,0x3a9d1c1b,0x3b818f03,0x3bc6376d, -0x3bf5df77,0x3bf33125,0x3bdf2968,0x3bb20551,0x3b8ecc8f,0x3b341e5c,0x3a30eea5,0xba4214e7,0xbb019889,0xbb3bc674,0xbb49c782,0xbb1da578,0xba996d96,0x39c13279,0x3a91b29a,0x3ab79ac2,0x39bc5536,0xb9f04ce8,0xba6ebea5,0xba4b63d9,0xba150be7,0xba635c49,0xba8375bb,0xbadeda10,0xbb2023be, -0xbb6c1209,0x3b80fe87,0x3b6d870b,0x3b5349bc,0x3b58d2e2,0x3b579719,0x3b64876f,0x3b7875c9,0x3b8674c0,0x3b69089e,0x3b3f4db8,0x3b20e7b9,0x3a944208,0x36c591df,0xbaa496d6,0xbab0ced7,0xbacac0e2,0xbae34dae,0xbaba33f5,0xba9a2ef7,0xba8a4578,0xba5ab0e3,0xba5185ee,0xba6a3852,0x39e7d97d, -0x3ad787d0,0x3b5d7781,0x3b6bf45d,0x3b8756df,0x3b92b26d,0x3b78a851,0x3b4f04f3,0x3b2841e3,0x3b40d61a,0x3b62ee8e,0x3b72c29a,0x3b6a3018,0x3b072311,0x3b314817,0x3b1f55ae,0x3b0a3c4f,0x3ae3b2d1,0x3aaad0bf,0x3a57e347,0x3a03d565,0xb8738a07,0xb9ea2a18,0xba4a011d,0xba999da0,0xbac47cc3, -0xbafd5675,0xbaf55fc9,0xbafb3b22,0xbb00b9be,0xbb0b9698,0xbb16790f,0xbb228c59,0xbb211fcc,0xbb081dc6,0xbaf5d586,0xbae5ade9,0xbaf1fc79,0xbae1d227,0xbaabe92e,0xba68d924,0xb9e7fe9b,0x397c8cf6,0x3a826e4b,0x3abed089,0x3ad35aed,0x3acda888,0x3ae8df3d,0x3b0aeec6,0xb968543a,0x38d8b629, -0xb96804ff,0xb9be24dc,0xba0055fb,0xba19762a,0xba3310ed,0xba4f71fd,0xba8369ac,0xbaa1cf6a,0xbac4ee44,0xbadcaeca,0xbaf3d180,0xbb08c5fc,0xbb051974,0xbb057617,0xbb043f7c,0xbb025ca9,0xbaffbfe8,0xbafa4809,0xbaf98906,0xbaf78691,0xbb02dc2a,0xbacdebcc,0xbacdc939,0xbaf69f32,0xbad394ff, -0xbab5f736,0xba9a0436,0xba7fa40b,0xba542e54,0xb9f13bb9,0xb994dbd1,0xb8a702d2,0xb9eee7f1,0xb9901a32,0xbafe02c2,0x39cce214,0x39ea94f5,0x3a2066ae,0x3a0c7bed,0x3a22656a,0x3a6a712f,0x3a5f2db6,0x3a360a0d,0x38c998d1,0x394a229c,0x39ab7a0d,0x3a8c5081,0x3a2aae97,0x3a252fe3,0x3a009ef1, -0x3a5d30a2,0x3a66837f,0x3a4e6949,0x3a15143a,0x39ec3fe9,0x39c58572,0x39b6304a,0x39a7aed7,0x39a12534,0x3933effe,0x38b53f93,0xb9aed09e,0xb9263be9,0xb9a5748e,0xba38f3f1,0xb9be07c2,0xb970578b,0xba10a3a0,0x3948f268,0x39ad5276,0x3900c194,0x39c04217,0xb19d2d7a,0x3a00df6f,0x39a6d2ce, -0x3a5cb6f1,0x3ae075f5,0x3b0568b8,0x3ac8d468,0xb8126c47,0x38b279ba,0x3a044696,0x3b154474,0x3a820176,0x3a5ff12c,0x3a57875b,0x3b0e6ea1,0x3b2b4fa0,0x3b1b19fe,0x3afaa6dc,0x3ac2bd39,0x3a9f28f9,0x3a743479,0x3a2e75d6,0x39a5d174,0x3935f483,0xb93322fc,0xbaa47a07,0xb9f2b475,0xb9c733a4, -0xbaab965d,0xba1c0e34,0xba547229,0xbb08f83b,0xb9f272ac,0xb98068dc,0xba97531b,0xb9c3978d,0x39c09375,0x3ad7d5a6,0x3a8ffa4a,0x3afa05b1,0x3b462b0e,0x3b695c44,0x3b36aafe,0xb9c3256c,0xb9f71770,0x386b87f8,0x3b8b1020,0x3b01f376,0x3b02451e,0x3aad2260,0x3b59bb28,0x3b6f14e7,0x3b42b969, -0x3af8d83f,0x3a9d3328,0x3a6aa389,0x39c9fcbf,0x38fa18b5,0xba286122,0xba398808,0xba1e7383,0xbb6d08ef,0xbb1b463b,0xbb60a3e2,0xbbbb507a,0xbb88ca7b,0xbb55b783,0xbb98ab42,0xba0e1506,0x38519878,0xbaad585e,0xb84260db,0xbad8860a,0x38fb5962,0xba3a597b,0x3aa6852a,0x3b8dec85,0x3bc51b03, -0x3b945c40,0xb948a75d,0xba2cb221,0x3a8e8ed3,0x3bdf73e8,0x3b2c201c,0x3abf9bb6,0x3aeee212,0x3bcb7e4b,0x3c05f804,0x3bf80f91,0x3bc49f9e,0x3b9892fe,0x3b7fb6a5,0x3b405a98,0x3b0ad4f6,0xb875ddf8,0x3907ce29,0xb95544a8,0xbb7972f0,0xbb232795,0xbb37bc87,0xbb564132,0xbbb6b67e,0xbbb3e351, -0xbbefd78c,0xbb555ca2,0xbaec4556,0xbb930595,0xbb24d8d4,0x3bfdb7cb,0x3c068a1c,0x3c3448c1,0x3c0f6fb1,0x3b08d147,0x3adb8f60,0x39c7d668,0xba2ad364,0xbaaedb10,0xbae34131,0xbaf6adf8,0x3b505f4b,0x3b9ba5e8,0x3ae4bad0,0xbb57f046,0xbbeecb4c,0xbc305f83,0xbc22f62b,0xbc208c00,0xbc1f3957, -0xbc1687df,0xbc03d1eb,0xbbf10819,0xbb064693,0x37d5488e,0x3ad9ac16,0x39c3dab7,0x3a1e0007,0x3aa9ce60,0x3ae16773,0x3b8ef42c,0x3bd910e2,0x3beff643,0x3be28672,0x3bae3449,0x3be0e8bc,0xba91e215,0xbb3c3b3e,0xbb825e19,0xbbb42812,0xbbe67859,0xbc1a9401,0xbbb03350,0x3b17d4d4,0x3bacbd32, -0x3b902810,0xbb341d19,0xbc18d2d7,0xbc2111de,0xbba6ade6,0x3a81a8e3,0x3bb5af76,0x3bd42cab,0x3beb9676,0x3bca259a,0x3ba3aa9e,0x3b08bd24,0x3a89c498,0x3acae045,0x3ab323a8,0xb8f152b1,0xbb01e569,0xba02f097,0xb915778d,0xba303675,0xba182348,0xbb08b9b2,0xbba4a1fb,0xbc0f1a6e,0xbbacc8c7, -0x3b8c13db,0x3a9ce9d4,0xbbe1c016,0xbaae4256,0xbc05ad2e,0xbb47d5c6,0x3c789d6e,0x3c0adbc4,0x3b9762c4,0x3b323dae,0xbc1863cb,0xbc15a393,0x3b400b06,0x3bd105bf,0x3bac555b,0xbb2260b6,0xbb4a188b,0xbb8b8f18,0xbb9def84,0xbb752337,0xbb583bc9,0xbb771ad2,0xbb0aeb91,0xbb04d627,0xbb381939, -0xbb2114ea,0xba8ef815,0x39bbf04a,0x39c32f00,0x388e6ac7,0x39b0d946,0x39a8297e,0x3a8ba8ba,0xbb072cf6,0x3a612c0a,0x39b12f5e,0xbc076bb3,0xbbf4474b,0xbb9bc5d5,0x3c008e32,0x3bfde9bd,0x3ba9a00b,0x3a9627e6,0x3bfad223,0x3c187da3,0x3bcbcd0d,0x3aeeacc0,0xba8fa410,0xb9d276ed,0xbb13a57f, -0xbad253c9,0xba7fa694,0x3a7687f5,0x3afa0e53,0x3b1879e4,0x3b62613c,0x3b81663a,0x3b60da4b,0x3b51c101,0x3b442a4c,0x3b40ed39,0x3a8e7625,0xb78e97fd,0xba08db5b,0xb9070d52,0xb8e289ab,0xb93bef30,0xb9dfbbd7,0x381d8b79,0xb8d1ac6e,0xba64d9d0,0xbae513e7,0xbb3419f2,0xbbd9e72b,0x3b810b8d, -0x3b595361,0x3b8166fe,0x3b7afcfe,0x388d837e,0xbb1789b2,0xbb967a26,0xbba4787d,0xbb8acd3f,0xbb40811e,0xba626eb5,0xb78b5370,0x3a526c1c,0x3acc4a84,0x3a629680,0x397c68d6,0xb9e0b7dd,0xba90bc39,0xbac12376,0xbae4e281,0xba975096,0x387cc077,0x3aa92638,0x3a7794ef,0x3a2b7bf9,0xb89db38b, -0xb9032d72,0x392f9fca,0x39c2401f,0x399b0729,0x38dcd3fa,0xba7921af,0xb932e848,0x3a1c84b0,0x3b0ea1ed,0x3b549e42,0xbb9cf81d,0xbba8b04e,0xbb82beb7,0xbb8373b9,0xbb7aa312,0xbb54f315,0xbb0c9f8e,0xba1975a3,0x3b1f3fac,0x3b966ff3,0x3bc31bca,0x3bcb19b4,0x3bc1568d,0x3ba0b10f,0x3b8038cb, -0x3b1951b7,0x398d3b95,0xba9605fc,0xbb0b11c5,0xbb34f8eb,0xbb3f925d,0xbb0b64cd,0xba520369,0x3a198189,0x3a8c424b,0x3a6e75af,0xb96be1c7,0xba65be4f,0xba81d014,0xba5ffbed,0xba37efd7,0xba91757b,0xbaa7f656,0xbb05d51a,0xbb3c1351,0xbb7ef5ee,0x3b17a2e1,0x3ae40b07,0x3aa01ac4,0x3ac4f8fe, -0x3ade1173,0x3b1f0661,0x3b46b7a6,0x3b698051,0x3b4f2b03,0x3b320e60,0x3b200d29,0x3aac0280,0x39ae3c64,0xba49ac83,0xba7111f2,0xba92e023,0xbaaa3699,0xba8b3dbd,0xba7618d8,0xba7bbae5,0xba099b61,0xb9acb91e,0xb9722bd5,0x3a684fe4,0x3b06635d,0x3b7523bb,0x3b714d3e,0x3b770c40,0x3b7b1a1c, -0x3b3e2a9c,0x3b076951,0x3a9b695f,0x3ad3c37c,0x3b083be2,0x3b1588dd,0x3b08ff8c,0x3b45321e,0x3b65cbf0,0x3b555c09,0x3b3d1e8c,0x3b1dcf21,0x3b00b65f,0x3ac4efd3,0x3aa351e8,0x3a245a3f,0x392c1223,0xb98349c3,0xba3f807a,0xba957d01,0xbadb3937,0xbad13895,0xbad5809f,0xbada1442,0xbaedebd3, -0xbafc21c5,0xbb09b999,0xbb0635c2,0xbac39cd1,0xba95c260,0xba637f9b,0xba593c6e,0xb9ff00e0,0xb925368d,0x398ab04b,0x3a3095b7,0x3aa69a7d,0x3afbfaa5,0x3b17ff08,0x3b1e033f,0x3b1a2562,0x3b294db4,0x3b3c0733,0x39380456,0x39e92ea9,0x392a9361,0x385a2875,0xb7bdc2a1,0xb9022af5,0xb9792fa2, -0xb9b73614,0xba16c15b,0xba52e248,0xba8c95ea,0xbaa58a61,0xbabdd0d5,0xbade5196,0xbad59f4f,0xbad6b097,0xbad40b23,0xbacfcfc6,0xbacb381f,0xbac35003,0xbac6d300,0xbac2ab60,0xbad51422,0xba81a055,0xba815ae5,0xbaa5c234,0xba8c21f6,0xba67b0a6,0xba3d7de2,0xba10e4c5,0xb9d8c8c2,0xb90424d1, -0x38b630e8,0x39a8dc0a,0xb824d3fa,0x3911c522,0xbabbf114,0x396d4321,0x39a89387,0x39f8e394,0x39c64e49,0x39e728c3,0x3a2a2949,0x3a3257c6,0x3a0ab543,0xb89e6b32,0x37313ec7,0x3917ae1a,0x3a78754b,0x39ecac1e,0x39e1f8ad,0x39b079f8,0x3a288caa,0x3a338510,0x3a27abec,0x39e2c448,0x39ad3f79, -0x3989cdec,0x396a1812,0x395bbbdc,0x398d5911,0xb793ac1c,0xb88efcef,0xb9b6cf71,0xb9449455,0xb9b1709e,0xba499318,0xb9a988da,0xb9561496,0xba29d50f,0x390b81ea,0x39797200,0x3845ea3a,0x398d6010,0xb8f58b0f,0x39c1bbe9,0x38e7388b,0x3a0d7e38,0x3aa20a55,0x3ae33988,0x3aaa479d,0xb984172a, -0xb9464e54,0x3983dc18,0x3b0e81b5,0x3a25424a,0x39c7cd7d,0x39f25a8a,0x3ad9a5c5,0x3b0d85bb,0x3b09e973,0x3ae39f0c,0x3ab307b9,0x3a94916f,0x3a4e1119,0x39d19cdb,0x393fff50,0xb95afbe4,0xb9f85728,0xbaa156fc,0xb9f5dd45,0xb9a17ae5,0xbaac10b2,0xb9b944ef,0xba112842,0xbb06b9b2,0xb9b13123, -0xb959ba41,0xbaa36583,0xba089c26,0x3980821b,0x3ad2effe,0x3a63c4bd,0x3acea9c0,0x3b1ad5d6,0x3b52bd0d,0x3b2434ca,0xba230f5f,0xba4dcf71,0xb9a34aaa,0x3b86c601,0x3abd517d,0x3abb8cd5,0x3a82358a,0x3b36fdf4,0x3b4f5bf8,0x3b34618b,0x3aedc821,0x3a96fa1e,0x3a821aef,0x3981bd37,0xb95e7920, -0xba20292d,0xbaa03dec,0xba93b8b5,0xbb64a662,0xbb1b24f3,0xbb54804a,0xbbc34209,0xbb6fc78e,0xbb3b4ba3,0xbba08827,0xb9c82739,0x3945ac55,0xbac35f2e,0xb92e644a,0xbae5fc5a,0x37878d3e,0xba81099b,0x3a0d28d5,0x3b43cdba,0x3bacf4ab,0x3b86a347,0xba11be1f,0xba9beb8f,0x3a39c211,0x3bdd9197, -0x3af67c21,0x39056d40,0x3a3ae757,0x3b9cfc58,0x3be6a143,0x3be4947c,0x3bbe7cb4,0x3b9752a1,0x3b8489e6,0x3b2838b4,0x3ac2d409,0xba249659,0xba771c4a,0xba770c6d,0xbb6bd650,0xbaf8c6e9,0xbaefa066,0xbb196f28,0xbb83bfaa,0xbb84695c,0xbbdc29b5,0xbb232292,0xbab81bcf,0xbba1d2ae,0xbb305575, -0x3c006009,0x3c0e07e1,0x3c365dbd,0x3c198e78,0x3b84e177,0x3aee6de4,0x38eecd6e,0x39d5b4f0,0xbabb3051,0xbb210f53,0xbb34655d,0x3b107877,0x3ba25f3b,0x3b917cef,0xbaf2aa1a,0xbbd20156,0xbc22ae95,0xbc240538,0xbc222054,0xbc19befa,0xbc13314c,0xbbfaa5fe,0xbbdcd36f,0xb9e2e4f1,0x3a876edc, -0x3a7f8223,0x3a3c4a15,0x3a3172e5,0x3a9e25b1,0x3ac7af89,0x3b6a9fd7,0x3b9b3cab,0x3bccc052,0x3bdf57c5,0x3bc7a03d,0x3be6fba4,0xbb1ab4c0,0xbb31fc88,0xbb6e7abc,0xbbabb2d0,0xbbd53a0d,0xbc1e324c,0xbbc52759,0x3b0b6f5a,0x3b95d595,0x3b9a097e,0xba37d8f6,0xbc0c1017,0xbc28e758,0xbbc3f495, -0xba757644,0x3b728dae,0x3bc39f55,0x3be202c6,0x3bbe38fa,0x3b843ff3,0x3ab32e5d,0x39eb9306,0x3aa12abf,0x3a6038a7,0xb9c9ff5e,0xbab881c1,0xb9767672,0xb9c74ee9,0xba13ed12,0xba3c8d93,0xbaa49006,0xbb6b7147,0xbbd9e27d,0xbb822d0d,0x3b80dab3,0xb93dca10,0xbb894b57,0x3b0e98cd,0xbbd3250e, -0xbb055ada,0x3c6f3899,0x3c0eb9d6,0x3bb5e17d,0x3b91615a,0xbc01283a,0xbc14b658,0x3972da64,0x3bd723ec,0x3bdfd52f,0xba823fe8,0xbb108780,0xbb71e4f9,0xbb8c27df,0xbb786c21,0xbb563944,0xbb5ae65b,0xbaf0b669,0xbae29189,0xbb20d0fc,0xbaed2204,0xba0db906,0x3a0714ff,0x396d7023,0x392c5598, -0x39dac184,0x3937345b,0x3a9b797f,0xba8842e9,0x3ab1523c,0x3a5d1add,0xbc0f4bbe,0xbbb945cd,0xbbcf87f1,0x3c444d1f,0x3bd6ba36,0x3af16e7a,0xbb5d072f,0x3b837e98,0x3c05bfe0,0x3c158c63,0x3b422401,0xba342028,0xba5e80d5,0xbb1ffc1c,0xbb00bbe1,0xba907b70,0x3866df72,0x3a3865d3,0x3ac46ee4, -0x3b445f31,0x3b7b4422,0x3b72d9ef,0x3b5b27af,0x3b43b448,0x3b2a18dc,0x3a2c5464,0xb8e0de81,0xb99131e5,0xb91a6214,0xb962d0c9,0xb95ac22b,0xb9d5e307,0xb8e5353b,0xb9ffaa1d,0xba32f950,0xbb15b556,0xbbec658a,0xbc383a5f,0x3bbe870a,0x3b8086e6,0x3b703153,0x3b7e07cf,0x3a53bfcf,0xbacbcec7, -0xbb957b84,0xbbb8d395,0xbba8b42c,0xbb81fd6e,0xbb073c8f,0xba9bc95d,0xb9648787,0x3a822880,0x3a2d0014,0x3a00b1fe,0x39883aec,0xb9c03938,0xba23f049,0xba2c02d6,0x3918ba92,0x3a9f9244,0x3b060cac,0x3aa13e9b,0x3a2e6807,0x384241f8,0x3925068d,0x39b35293,0x39d11225,0x39b97038,0x399e9142, -0xba28bc53,0xb9bbd4d0,0x3a6176f9,0x3b6c7921,0x3bbe5683,0xbb8c6958,0xbb85eeef,0xbb2d28ea,0xbb57094b,0xbb808953,0xbb8754e3,0xbb53828a,0xbae921b5,0x3a9f7f2a,0x3b4e076c,0x3b88ccd6,0x3b98c1df,0x3b9722b5,0x3b81a456,0x3b4ab25f,0x3ad6627d,0xb9a91f14,0xbaca6efb,0xbb10bc61,0xbb26874a, -0xbb2c537d,0xbaee69d1,0xb9f597af,0x3a2e7037,0x3a61fb42,0x39b18868,0xba289649,0xba869504,0xba796980,0xba51326c,0xba4adb95,0xbaaba136,0xbac76abd,0xbb172203,0xbb4d1c11,0xbb811d33,0x3a2700fa,0xb93aea42,0xba45b81d,0xb9c7a0ad,0xb90ac357,0x3a8a88b7,0x3afbf374,0x3b2eec6e,0x3b2532b5, -0x3b1e4d30,0x3b2055cd,0x3ad23aa7,0x3a5d9fb9,0xb71d553f,0xb98dccaa,0xba08acad,0xba42b19c,0xba29f16e,0xba3812a9,0xba6d0344,0xb9848613,0x390044b7,0x39d6f675,0x3aa1e975,0x3b170495,0x3b72ccdf,0x3b622585,0x3b4d2d49,0x3b48459b,0x3b03eb18,0x3a97cc04,0x3900e2cc,0x3a083812,0x3a609321, -0x3a82b319,0x3a2e11e8,0x3b68b981,0x3b78d75a,0x3b6b68dd,0x3b546810,0x3b3413ca,0x3b1bc552,0x3b023bfd,0x3aede079,0x3a9d7142,0x3a34bf25,0x39639412,0xb997f2b5,0xba3e41e2,0xbaa7ecac,0xba9defbb,0xbaa04489,0xbaa33820,0xbab33ef1,0xbab927ad,0xbacf2c2f,0xbabf99e7,0xba54f979,0xb9b3daa7, -0x386721f9,0x396b201f,0x3a451aed,0x3a7d6f45,0x3aad4fc2,0x3ad79924,0x3b05d173,0x3b23b4bb,0x3b37ed2a,0x3b38c03e,0x3b3589f6,0x3b444014,0x3b50f38a,0x3a05df78,0x3a31ff6b,0x3a002c40,0x39dc9730,0x39d3a6dc,0x399cbed7,0x3942cd56,0x38bfc838,0xb90033eb,0xb9a609c8,0xba109065,0xba3dfeae, -0xba6bddba,0xba95cf9c,0xba8cc7ee,0xba8e3936,0xba8c0186,0xba88850c,0xba85496f,0xba7b0a0d,0xba80b117,0xba70a61d,0xba89e4c6,0xb9b39345,0xb9a43e1f,0xba033d3b,0xb9d5cdfa,0xb9946dca,0xb94ebf73,0xb8738a06,0x3831e3a3,0x3973bb2c,0x39ddc922,0x3a24d7f9,0x39c8d1cb,0x3a078ed1,0xba588e0b, -0x3990835b,0x3985e58f,0x3a1a3a94,0x39e05e33,0x3a011c22,0x3a25632f,0x3a4109a8,0x3a1bed4f,0x37188ab2,0x388b3b3c,0x3946485d,0x3a853e3d,0x39eeb1ea,0x39e26679,0x39ccb508,0x3a24b78e,0x3a30a020,0x3a362a52,0x39fc572e,0x39c5ffca,0x39ba3c06,0x39165fde,0x388026d3,0x38aabc9c,0xb8f3b6c1, -0xb986d54b,0xb9fac1d4,0xb9c1da83,0xba023e67,0xba6a1d77,0xb9e32499,0xb9af1694,0xba5946b6,0x380d1cf8,0x3981aa9d,0xb92e9e33,0x38f6ca51,0xb993b84a,0x3a000f25,0x395631c4,0x3a0da491,0x3a8a901d,0x3ae2fd41,0x3ab67137,0xb8c58a07,0xb90de150,0x3991a578,0x3b135c39,0x3a054990,0x3921f746, -0x39af7a0f,0x3aabf67b,0x3af1c00d,0x3b05045f,0x3adcb778,0x3ab21e7a,0x3a921642,0x3a0ef4ac,0x39786ac4,0x393d7b4d,0xb9f89928,0xba35a7bb,0xba870944,0xb9e16d0f,0xb982dd45,0xbaa84bbc,0xb8b36f8d,0xb9674279,0xbaf1d910,0xb90a7930,0xb90c4b2e,0xba9c561b,0xb9eed63f,0x394d039c,0x3ae035eb, -0x3a834add,0x3ad3b9e0,0x3b0a3812,0x3b55738c,0x3b2c72eb,0xb9b4c5d5,0xba2dc1ce,0xb9a042a5,0x3b884177,0x3a9ad9d5,0x3a95f01d,0x3a714aa1,0x3b1d4473,0x3b3734bf,0x3b34dc59,0x3af07d5b,0x3a9deb3b,0x3a87036b,0x38e3c32b,0xb9f558bb,0xb9d4f6c9,0xbada3c4a,0xbad72ddf,0xbb49f52a,0xbb1b294a, -0xbb3ef966,0xbbbdb995,0xbb47cfc2,0xbb20cb44,0xbb9b33f2,0xb98362f9,0x39a230de,0xbac68719,0xb94055b3,0xbae0f4e6,0x390b89d2,0xba4582a8,0x39a446e5,0x3b0d619b,0x3ba52ce0,0x3b8c7c28,0xb9355abb,0xba9610c6,0x3a38ab3e,0x3bdcc6cb,0x3ab642d4,0xba604d7e,0xb9103b39,0x3b5fe591,0x3bbfc69d, -0x3bd4c25c,0x3bb5e47a,0x3b915c60,0x3b7d69ee,0x3b03dc5d,0x3a5e8486,0xba7d4b00,0xbaf04610,0xbabfd83f,0xbb448aca,0xba9dfe01,0xba7aa440,0xbaac855a,0xbb24d2fe,0xbb2d2d87,0xbbb5c4dc,0xbae571f4,0xba88cd55,0xbba19fcc,0xbb2ccecb,0x3bf641b1,0x3c11ada6,0x3c391f41,0x3c27c481,0x3bd32687, -0x3b198251,0x39315ae2,0x3ace5d29,0xba7a0dfb,0xbb1aac45,0xbb3c2d15,0x3b1648bf,0x3bc607df,0x3bf18f7b,0x3948741f,0xbba00ba7,0xbc080f39,0xbc1a07a4,0xbc192f69,0xbc0b2cce,0xbc07cf4a,0xbbe06385,0xbbb876c8,0x3a800c67,0x3ad9d8c3,0x39f69537,0x3a4adb16,0x39f2d8e6,0x3a7583a8,0x3a70de8f, -0x3b29bb06,0x3b3e4d20,0x3ba315af,0x3bcfc563,0x3bd4b191,0x3be2f86c,0xbb47d29e,0xbb06a8ab,0xbb321918,0xbb953b53,0xbbb61b46,0xbc16af69,0xbbc6c8fb,0x3b19ed53,0x3b868c50,0x3ba671c8,0x3ae08a4c,0xbbeaf6f0,0xbc2661c1,0xbbd10001,0xbb0ccfb5,0x3b1ae052,0x3bb6c21c,0x3bd1f773,0x3bab07ad, -0x3b41152d,0x3a167385,0xb8d41744,0x3a7db1fd,0x39b72891,0xba1c49a4,0xba58dfde,0xb91e502e,0xb9cc9959,0xb9c5e90d,0xba22d92d,0xba38030f,0xbb0151fe,0xbb9ad81e,0xbb374c7b,0x3b5637a1,0xba8d4393,0xbaee8925,0x3bb2ef48,0xbb5a58cd,0x38da16c9,0x3c64e202,0x3c1f6d5c,0x3beacb44,0x3bd19b09, -0xbbba0b97,0xbc031912,0xbad1353c,0x3be4091d,0x3c0d262c,0x3ad0144f,0xba4253a4,0xbb33a27f,0xbb581290,0xbb5d7d60,0xbb2d3e4b,0xbb1845fb,0xba94cd2d,0xba9043ee,0xbafdfdef,0xba8b63bf,0xb868bc6b,0x39e0db36,0x390e6a08,0x394d0865,0x39a7f411,0x39296b6a,0x3a41e5b4,0xb889d3ed,0x3aa54d7f, -0x3a700a81,0xbc0102ab,0xbb81f810,0xbbe48661,0x3c609558,0x3b88b22c,0xbade7b7a,0xbbe2c786,0xb9150cf4,0x3bcbdca7,0x3c41d7b0,0x3b9ffe49,0x3a54faab,0xba6d9ef6,0xbb0070f9,0xbae9e255,0xba81165e,0xba1307c4,0xb8bd80db,0x3a87f73c,0x3b2e300d,0x3b766dd8,0x3b80f86b,0x3b59f9dc,0x3b40ac1c, -0x3b0672e2,0x3974eef2,0xb94c7a8d,0xb931839d,0xb92fa556,0xb9722994,0xb950b3fc,0xb9a8c772,0xb8dc3717,0xba008077,0xb9ed3d61,0xbb21fce5,0xbc311d40,0xbc6844fc,0x3c04a261,0x3bba46a8,0x3b8c0983,0x3b874d60,0x3afed590,0xb9af527d,0xbb76460c,0xbbb2b41a,0xbbad4f3f,0xbb87a4c9,0xbb19fe3f, -0xbacf5d2d,0xba0f7ced,0x3a8a23f3,0x3a7b4ce6,0x3a8c03ef,0x3a8c0b5e,0x3a0b3b52,0x39f7e0e5,0x3a2cbeb2,0x3ab9c30e,0x3b1b7f40,0x3b261b90,0x3ab43433,0x3a28bbf9,0x39001ee8,0x3997508d,0x39c3f3f1,0x39c02a58,0x399709a8,0x39c4f3ce,0xb9964d2a,0xb9c1f54d,0x3aa08014,0x3b99f4e7,0x3c0e3cee, -0xbb6c7c41,0xbb24c6b2,0xba7af509,0xbb06667b,0xbb4fa751,0xbb817c96,0xbb531418,0xbb00a509,0x3a412f52,0x3b0fad34,0x3b353d1e,0x3b599c2e,0x3b5fc76e,0x3b480453,0x3b19e48f,0x3a8eb715,0xba2db1ec,0xbad2dd8b,0xbafdf294,0xbb0c9957,0xbb145f4a,0xbab58f63,0xb90b6116,0x3a33ce7a,0x3a1f9058, -0xb8f56c45,0xba524084,0xba822d1b,0xba528755,0xba2a002c,0xba344e38,0xbaa7a636,0xbacff260,0xbb198c5a,0xbb4ae1e9,0xbb66ba3f,0xba38554d,0xbacd321c,0xbb024b75,0xbad6d0e5,0xbab5b1db,0x387be6fb,0x3a8bed7e,0x3afca2f6,0x3b0a4de8,0x3b1f13ec,0x3b3974d4,0x3b16c77c,0x3aea7fa0,0x3a9c6417, -0x3a4b11cd,0x39d62b9e,0x38bf81fa,0xb6756899,0xb93f8e89,0xba26c414,0x37ee2bf7,0x3a0fdd38,0x3a8137de,0x3ac5abc4,0x3b16febf,0x3b57051d,0x3b3bf090,0x3b1f8a38,0x3b10c725,0x3aa9833a,0x39eac633,0xba10111d,0xb9840f23,0xb8609e5f,0xb7024d01,0xb9d61706,0x3b65c7a2,0x3b79e177,0x3b71f249, -0x3b5fb856,0x3b45084c,0x3b35c0fd,0x3b251d54,0x3b21282b,0x3afb0d33,0x3ab5c553,0x3a6a828b,0x39d192de,0xb7ada956,0xba104107,0xb9fcd087,0xb9fc0dd2,0xb9ff30e9,0xba1765e9,0xba11b9e9,0xba3f38f2,0xba59502a,0x385ddc23,0x3a1625a1,0x3a870b68,0x3aaa1909,0x3b063199,0x3b0c2b2f,0x3b18a5ea, -0x3b1ff345,0x3b2eae4f,0x3b401171,0x3b46bc64,0x3b44c12b,0x3b3d54bf,0x3b4a0bcd,0x3b56f329,0x3a65e586,0x3a99bbcb,0x3a863617,0x3a85d8f3,0x3a8abe8f,0x3a7ce4ca,0x3a640b53,0x3a5541d4,0x3a23578a,0x39fc6d45,0x399dd826,0x392e1687,0x379a6739,0xb94ffa9b,0xb90c03c5,0xb91be2e4,0xb9113664, -0xb9024232,0xb9057189,0xb6ceaca9,0xb98eaad2,0xb9a012c1,0xba17df46,0x39ea7120,0x39a7b66d,0x3899eca5,0x38473b87,0x38fa5d9e,0x392b453e,0x3970304f,0x399017db,0x39bf1dd6,0x3a2f7b7d,0x3a8591de,0x3a12e47d,0x3a4c7c8c,0x393272db,0x3959603f,0x39c30fea,0x39f9efa0,0x39c69f42,0x39e10d8a, -0x3a06735b,0x3a2eeca3,0x3a0b5fdb,0xb7bd9a0b,0x368a4685,0x38f00154,0x3a75d2f2,0x39b5ef5f,0x39a8086d,0x39a67221,0x39fc7f89,0x3a0aa2d2,0x3a23b219,0x39d2110d,0x39a3a531,0x3971115d,0x397ec645,0x3973f5f1,0x39b07a41,0xb8d6bf2d,0xb900ae88,0xb9257fce,0xb8edb633,0xb93efb27,0xba0b1e8c, -0xb8c6a3d7,0xb79222de,0xba049121,0x397fe7d4,0x399c4ae6,0x38884844,0x39a35fb5,0xb6e9c149,0x3a00b7f2,0x393ae029,0x39e9364b,0x3a4ccbef,0x3ace84c3,0x3aad17db,0xb892d77f,0xb9626150,0x392bfba0,0x3b0afc99,0x39a7cfa4,0xb8fa913b,0x38a30f97,0x3a4f660c,0x3aaf08ff,0x3ae8816c,0x3abd8fdf, -0x3a963efe,0x3a71c42b,0x3a1a6ae1,0x390d8b3d,0x399e2984,0xba2117c7,0xba51f267,0xba462662,0xba000b09,0xb9ca4a09,0xbaa22579,0x388c35a1,0xb80f4469,0xbacccd94,0x3845033e,0x38431874,0xba74ed7a,0xb9c90a8b,0x39bda09f,0x3ae02cc2,0x3a796d5e,0x3acec4d2,0x3aeb91ca,0x3b4c74a4,0x3b27793e, -0xb94c8815,0xba3263bc,0xb9ddb0a9,0x3b807bb9,0x3a62d147,0x3a5399ca,0x3a3459dc,0x3ae9fb53,0x3b0f9724,0x3b295c3d,0x3ad99a28,0x3a8604d2,0x3a69199d,0x38d6cf12,0xba116e46,0xb8aeb0a5,0xbb050f9c,0xbb00a854,0xbb213743,0xbb1440d6,0xbb218b84,0xbb9f8976,0xbb202c74,0xbafc719b,0xbb86eb46, -0xb89357cd,0x39e5d36f,0xbaaf3778,0xb8e47dfb,0xbaad0c7d,0x3982d862,0xba272420,0x389e1a38,0x3aabd79c,0x3b96e055,0x3b8afd46,0x38c58850,0xba9e6e99,0x3a078415,0x3bcf22b8,0x3a7d2e2c,0xbad4d7cd,0xba8b1dec,0x3ae6b3c4,0x3b8cb2a4,0x3bbb1b9c,0x3ba17294,0x3b7d56a4,0x3b59205d,0x3ac7d37c, -0x39858095,0xba83e467,0xbb1e8cde,0xbadeff04,0xbb0f3964,0xba12cadc,0xba046c20,0xba32b4c4,0xba9c020a,0xbac955cb,0xbb85ae87,0xba8f4205,0xba223496,0xbb938d84,0xbb1f7487,0x3beb51bc,0x3c0a513a,0x3c332519,0x3c3087cd,0x3c0916c8,0x3b28c9e9,0xb8b6e929,0x3b0696a8,0xba4af847,0xbb18a910, -0xbb3fe397,0x3b15f60e,0x3be0287e,0x3c1e19aa,0x3b105d31,0xbb4fc948,0xbbd47cd5,0xbc0a0c18,0xbc0bffc7,0xbbf1a1d7,0xbbeb6d32,0xbbbf0307,0xbb85a709,0x3aff83ff,0x3af6af6f,0x391cf7c0,0x3a286c38,0x3946f002,0x3a2a195c,0x39af2304,0x3ac7e10c,0x3ad02583,0x3b66f4f5,0x3bb6156e,0x3bd1c03e, -0x3bda29f5,0xbb368555,0xba857a79,0xbb055d7d,0xbb852722,0xbba4196c,0xbc132112,0xbbd2fd0a,0x3b0655a5,0x3b588f81,0x3ba6e0b4,0x3b802e47,0xbbb67673,0xbc1f2430,0xbbe1b01b,0xbb4e6b4c,0x3a9abfc2,0x3b9feab9,0x3bb59dd7,0x3b89f424,0x3ae9af27,0xb8450461,0xb9f49759,0x3a5e3b92,0xb90eff29, -0xba33272e,0xb9bd4a81,0xb92dd477,0xb97bd458,0xb97f5d7f,0xb9a92957,0xba074e5d,0xba394f14,0xbb3f4baf,0xbaf44adc,0x3b24ce64,0xbac1e850,0x3a803de1,0x3c058c08,0xba3d2eca,0x3abad41e,0x3c3e59cd,0x3c22aa50,0x3c05dab4,0x3bfb9b81,0xbb5c3a21,0xbbd72fc9,0xbb5a4060,0x3bd292c9,0x3c180726, -0x3b7a6eef,0x3970cfda,0xbb125710,0xbb2719ba,0xbb4342c8,0xbb06aeca,0xba85e69b,0xb9045fa1,0xb99578a6,0xba9f4fcd,0xb9b51206,0x3983187a,0x3983265d,0x38da08b4,0x392fcdf5,0x39316b07,0x39316a13,0x39a5e657,0x3977a73c,0x3a8830a1,0x3a24e478,0xbbbdf282,0xbb0b44a4,0xbbd69e19,0x3c3b74c9, -0xba4b350b,0xbbcb43e7,0xbc290836,0xbba3fc1d,0x3b3c4053,0x3c50c659,0x3bd5f297,0x3b22631c,0xbaadca84,0xbaec5455,0xbb07a5eb,0xbac41047,0xbac93700,0xba7f0eb5,0x39d867fd,0x3b09b885,0x3b5a3641,0x3b81cacf,0x3b6142b5,0x3b3aab88,0x3abb6431,0xb8bf8c66,0xb982db1a,0xb9123d17,0xb92325e7, -0xb94114d7,0xb91bf027,0xb94c2bc5,0xb8e8bd25,0xb9a9d54d,0xb9856b04,0xbb243084,0xbc4d3ff8,0xbc74ea27,0x3c304172,0x3bf9ed75,0x3b8bc1b3,0x3b5c774b,0x3b0dbb6a,0x39a2b6f7,0xbb427132,0xbba5fe1c,0xbbab7f90,0xbb8a446f,0xbb32f871,0xbb07a254,0xba8175a5,0x3a6f1589,0x3a93654f,0x3ac10dbd, -0x3ad0c079,0x3aac9075,0x3ac003c0,0x3b012d4a,0x3b37e3da,0x3b602528,0x3b3af237,0x3abd0f9c,0x3a1507da,0x391fa5c6,0x399263a6,0x39a699cc,0x39932df0,0x3944fcae,0x39935e17,0x3883b5a8,0xb95bf816,0x3ae3032e,0x3bb2ecb3,0x3c36e1ca,0xbb10e2bb,0xba8d031b,0x3909d170,0xba7576c5,0xbb0f3a44, -0xbb513f5d,0xbb2cdb56,0xbae2d29d,0x3a106d75,0x3ac686dd,0x3ad6593d,0x3b032a62,0x3b04eb46,0x3aec88ee,0x3aaa3791,0x39c30ad8,0xba82c683,0xbac91880,0xbad4e39c,0xbad24d71,0xbace2756,0xba537dac,0x39cf6903,0x3a44d6b5,0x39dea9c0,0xb9b4a45c,0xba3f63e4,0xba4bf049,0xba1bcb15,0xb9e28836, -0xb9efbd24,0xba885cc5,0xbab2ef8b,0xbb01958a,0xbb29b758,0xbb2fb2fe,0xbac05777,0xbb1adb13,0xbb2f8de4,0xbb181ddd,0xbb0bc6f1,0xba35a788,0x398a8005,0x3a8d2583,0x3ace2836,0x3b13bd0a,0x3b43ef04,0x3b3ad089,0x3b2f884f,0x3b1fa5c0,0x3af5c1c9,0x3ab75c0f,0x3a7b263b,0x3a3a69e1,0x39bff177, -0xb93b212e,0x3a162ded,0x3a9195ce,0x3ad3cf16,0x3aec7db7,0x3b1548ef,0x3b3023a9,0x3b1505a8,0x3ae1ff50,0x3acfd3eb,0x3a455aa2,0x38e52ca5,0xba4e9131,0xba252a76,0xba1ade50,0xba1c0d2c,0xba8dd2dc,0x3b682033,0x3b6187f0,0x3b5c0c06,0x3b523cb7,0x3b3f8719,0x3b3ac5b6,0x3b344303,0x3b371108, -0x3b1e919d,0x3b01513c,0x3acb2538,0x3a971a92,0x3a582d1b,0x39e7a936,0x39f94cb4,0x3a01b5f2,0x3a00cff5,0x39e65bcd,0x39fb6776,0x39b06305,0x398f452d,0x3a8df509,0x3ad5bd9a,0x3b08fe32,0x3b213ce1,0x3b55593f,0x3b51623b,0x3b541868,0x3b52a770,0x3b4f5464,0x3b4ffc53,0x3b4d5776,0x3b48c9bc, -0x3b42ac45,0x3b4d4b0c,0x3b4e4314,0x3ac5a68b,0x3ac78c75,0x3ac7eb98,0x3accbc5f,0x3ad67df9,0x3accf2da,0x3ac3f61d,0x3ac0fcc7,0x3aaf33d3,0x3aa63287,0x3a996d68,0x3a90392c,0x3a83c130,0x3a5ef9c2,0x3a6a4a66,0x3a650328,0x3a647702,0x3a63d3b2,0x3a5de133,0x3a744562,0x3a587f46,0x3a554083, -0x3a0082ce,0x3abd91b8,0x3ab2368c,0x3a965ade,0x3a87eb50,0x3a898bc1,0x3a84f123,0x3a8a9a0e,0x3a8a7f05,0x3a8964da,0x3ab2afe3,0x3acfac97,0x3aa111bd,0x3ac068f7,0x3a9bf391,0xb94bd158,0xb7965b72,0x38e48816,0x37a62b0d,0x384a8ea2,0x38860ab1,0x3988413c,0x390ae90e,0xb9c77142,0xb9c85c19, -0xb994889c,0x3a03d40e,0xb8907977,0xb8ca9f9b,0xb8a52ebe,0x371dd521,0x387516e1,0x3976d40d,0x3745d137,0xb862f907,0xb92919eb,0xb90e0770,0xb8bd428b,0x398000a8,0xba083d1e,0xb9fc0367,0xb938beaf,0xb96f9731,0xb97eb22b,0xb9fd9a45,0xb916d0ce,0xb8ec75f3,0xba13225c,0xb88af98c,0xb8e5ed37, -0xb8bb2022,0xb819abb6,0xb97c5b05,0x38ed12f2,0xb92f28d2,0xb7eb240a,0x38cd42a6,0x3a7e7d30,0x3a50bf44,0xb9f1c51d,0xba3344ac,0xb9b1043b,0x3ac82fd7,0xb937ae49,0xba2ed3a5,0xba0acbbe,0xb8e29e49,0x39e1002e,0x3a954009,0x3a5dd580,0x3a243b0e,0x39bd9379,0x3973a1a2,0xb97b58b1,0x38af297f, -0xba866c41,0xba9aeae2,0xba45017c,0xba785727,0xba79c59f,0xbac994a6,0xb97d918e,0xb95cccc9,0xbac9822e,0xb92745f7,0xb9372b1f,0xba8d565e,0xba25de84,0x389265ad,0x3aacd228,0x3a214848,0x3a9366a8,0x3a84a310,0x3b1eeac1,0x3afd0d80,0xba0bcfdc,0xba975d13,0xba7b0c73,0x3b4ab9d5,0x39817129, -0x392e7e1f,0x386046d8,0x3a3a0756,0x3a92059b,0x3b03456b,0x3a904f3a,0x3a137d2a,0x39bc0f0c,0xb95cba22,0xba526ad4,0xb7118de5,0xbb233ffa,0xbb19c903,0xbafff86a,0xbb134adb,0xbb101d25,0xbb7bfa78,0xbafeb8dc,0xbad79d69,0xbb63927a,0xb93fb1fc,0x39673d28,0xbac119f5,0xb9d9a2a2,0xbaa6d284, -0x37d313ab,0xba4526b9,0xba0ae6c5,0xb7b06b83,0x3b6316fe,0x3b62a5b4,0xb9699175,0xbae10b0d,0xb91aeb2f,0x3baa714a,0x39b3066c,0xbb1d2c97,0xbb12f8a4,0xb9bdcdd9,0x3b0ec581,0x3b924cea,0x3b7dfedd,0x3b43047b,0x3b1aaa69,0x3a67246a,0xb99e328f,0xba763f29,0xbb310b1e,0xbadcbf5c,0xbaa2df6f, -0xb957543a,0xb924b755,0xb9102fcb,0xb9e146b9,0xba2e66fa,0xbb2d20e6,0xba315a04,0xb9ee7450,0xbb835433,0xbb1bbff9,0x3bc74109,0x3beafdd8,0x3c23b20f,0x3c2b689d,0x3c14a1d5,0x3b0c91b3,0xba7071e8,0x3ac7474e,0xbac41a85,0xbb47242c,0xbb5cf4f0,0x3ac4b28b,0x3bd7dce7,0x3c2b5cc5,0x3b699456, -0xbaee3646,0xbba8c4e9,0xbbfbb984,0xbc0145b0,0xbbd5158e,0xbbccffaf,0xbb9bc1ff,0xbb24fe23,0x3b171d61,0x3adad013,0xb7180393,0x39e25c9d,0x380c6058,0x39992ba4,0x3913745b,0x3a2167aa,0x3a37844a,0x3b085459,0x3b8ae133,0x3bb2b3d6,0x3bbb3c94,0xbb3756df,0xba065d51,0xbaf96d70,0xbb8f4fb8, -0xbbb091a6,0xbc1ca556,0xbbfda58f,0x39db482a,0x3aa150db,0x3b71c7b4,0x3b984ba5,0xbba58094,0xbc255fe1,0xbc08e53c,0xbb97fdee,0xb9986e53,0x3b6e6e18,0x3b87fcd0,0x3b364a99,0x39b577aa,0xba663b20,0xba64f697,0x3a175508,0xba0c5853,0xba21ecd6,0xb9206cc8,0xb90dab9e,0xb8d791a4,0xb901a436, -0xb8ff749c,0xb997a524,0xb94a9e25,0xbabab21f,0xba9dac2c,0x3ab7dbc8,0xbafc9319,0x3b38230b,0x3c1549e2,0x3a9ffb4f,0x3afd122a,0x3c0e83ba,0x3c1dc419,0x3c0c4fd1,0x3bf7eff2,0xbb002e13,0xbbc79741,0xbbc36f45,0x3b91ce9d,0x3c0cf18d,0x3bb4e368,0x3a45b9c5,0xbb0df88c,0xbb180ecd,0xbb38d3cb, -0xbacf7e02,0xb77959f6,0x3a0bb162,0x398fec11,0xba3ea552,0x3916dd88,0x398dc1f1,0x390c933f,0x38a5d8be,0x38caa757,0x38ab2720,0x38bba135,0x3921f4ae,0x38e79d4b,0x3a2e1474,0x39706548,0xbb8997a1,0xba3e83ea,0xbbdfa707,0x3bb29fd2,0xbbbb2370,0xbc1de780,0xbc4377be,0xbc16d82e,0xbaaa1a23, -0x3c3253c2,0x3be7b305,0x3b6baa63,0xbb18b2ca,0xbb1a6d26,0xbb4ee618,0xbb3aad16,0xbb47f657,0xbb0e7652,0xba09a4a1,0x3a9c0afa,0x3b256ba0,0x3b5db0be,0x3b48a660,0x3b15e64e,0x3a0b7907,0xb9b1adf9,0xb98e837c,0xb8aa292a,0xb8ef108b,0xb8ff6568,0xb8c52d80,0xb8d051a0,0xb8c57155,0xb91e9422, -0xb9347b3e,0xbb22b92e,0xbc4fa0b3,0xbc658440,0x3c4a24e3,0x3c16e31b,0x3b7dad61,0x3acbbb48,0x3ab5c6a5,0xb980fb91,0xbb47553a,0xbbaeee61,0xbbc08bf1,0xbba53e77,0xbb73ab7d,0xbb495cf3,0xbaf7a957,0x39656523,0x3a5a2aef,0x3ab433a1,0x3ad2da43,0x3acbade4,0x3b0068ae,0x3b2ebc57,0x3b6bfa3b, -0x3b7a998d,0x3b2c4907,0x3aa0c843,0x39aae110,0x38efa0d7,0x396db2c7,0x395f495e,0x393bba56,0x38f5c433,0x393b97bb,0x393d28ec,0xb8c22c1f,0x3b04884a,0x3bac3ef1,0x3c4a6fa0,0xbade89fe,0xb9cfaa4f,0x39d91593,0xba104069,0xbadf74ea,0xbb3bc286,0xbb2acdaf,0xbb122a71,0xba0a3d2c,0xb823d59f, -0xb978ca3d,0x37d07b9d,0x383cce7c,0xb8a6cd49,0xb96a0388,0xba36b418,0xbad05707,0xbaf00885,0xbae7cfc1,0xbacacbe2,0xbaa81e78,0xba175a88,0x3a08415f,0x3a059b85,0x3934a270,0xb9df25de,0xba0cd895,0xb9efb265,0xb9c4f60e,0xb9652481,0xb98d697f,0xba47af0e,0xba9b1ab2,0xbae01e1c,0xbb103ff1, -0xbb0bf8f6,0xbb1ebfcc,0xbb5d62a7,0xbb663d38,0xbb50466f,0xbb4501af,0xbaefa1a4,0xba8d3fd1,0xb9f38a27,0x3996a0fa,0x3aa230fd,0x3b119d64,0x3b23c7d1,0x3b317fe7,0x3b3c6488,0x3b13019b,0x3adf1dd8,0x3a9d248e,0x3a632248,0x39e51fcf,0xb90c76d3,0x3a259148,0x3a99169b,0x3adea5a0,0x3ad18de6, -0x3aefa544,0x3adea0f9,0x3abe5f45,0x3a4867f2,0x3a57602d,0x3885f052,0xb9af2832,0xba949592,0xba9df8fe,0xbab47c27,0xbac4832c,0xbb07f259,0x3b376939,0x3b06d8f1,0x3b0956df,0x3b06a3d3,0x3afad504,0x3b01cae0,0x3b056a49,0x3b0d64f1,0x3b041062,0x3ae1a930,0x3abbe819,0x3a9bd33a,0x3a832b39, -0x3a59dfbd,0x3a5cf8f8,0x3a6d3b57,0x3a728844,0x3a6f4842,0x3a802be4,0x3a5fab44,0x3a8c9bbd,0x3acfa55b,0x3b05ba4f,0x3b24d8d8,0x3b41e1b4,0x3b6a25af,0x3b5d7703,0x3b5472a1,0x3b4eccde,0x3b3a766e,0x3b2e187a,0x3b296f07,0x3b1f96e2,0x3b1c4782,0x3b206255,0x3b0e7aa7,0x3ab9227a,0x3a9bb54b, -0x3ab1c6eb,0x3ab7b0cb,0x3ac513fa,0x3abf9ea0,0x3abae9b7,0x3abb9754,0x3ab3a40d,0x3ab532de,0x3ab5137d,0x3ab65d56,0x3ab312a6,0x3aa9b98d,0x3aabdc68,0x3aa8593d,0x3aa69a93,0x3aa44b9e,0x3aa20ffa,0x3aa389d8,0x3aa535ac,0x3ab042c9,0x3ab370b7,0x3adb1b5a,0x3ae21361,0x3afa4403,0x3ae4e69f, -0x3ae0c1bd,0x3ad2083a,0x3ad4bba0,0x3acecc00,0x3ac1cdfa,0x3abe60cf,0x3ab7f65d,0x3ad5c760,0x3ac8871f,0x3ac1b39e,0xb9907e8f,0xb8f12fa4,0x38c1b5a9,0xb7b8f69c,0x377275eb,0xb80b74ea,0x3962afa9,0x38de44a6,0xb9b2af2a,0xb9d82cce,0xb9b7110b,0x39b0df57,0xb9271e0e,0xb9490616,0xb93fadcf, -0xb93c1c06,0xb90db338,0x38ff1007,0xb8ccd4e6,0xb92ad96b,0xb9890bd1,0xb9905b96,0xb99736bf,0xb8a0a0d4,0xba233662,0xba2f72c6,0xb9c83b62,0xba0d2bed,0xba04ebe0,0xba1c0b0b,0xb9b8988c,0xb9bcaa2f,0xba3f82d0,0xb9603900,0xb93ff97c,0xb9db23e1,0xb96d74bc,0xb9c3f3d7,0x392279e6,0xb8c2a1a1, -0xb7a02bd9,0xb8a42163,0x3a6cebc4,0x3a563ee9,0xb9883da7,0xba2de7eb,0xb9e33fb1,0x3a9c36bb,0xb98495ea,0xba4d990e,0xba519666,0xba3a33ca,0xb9614efd,0x3a4679cc,0x3a03a114,0x39b5edcc,0x385c2df6,0xb8ddd3ef,0xb9de53d6,0x387106f6,0xbaa68039,0xbabc0828,0xba155b3d,0xbaa5dd5d,0xbaad3843, -0xbad0c0de,0xb9c469cf,0xb944e66d,0xbaa7d407,0xb956c13f,0xb994143b,0xba87567a,0xba109448,0x38e7a080,0x3aac2273,0x3a467c23,0x3a9e9688,0x3a5a4e1d,0x3b2140ce,0x3b0833a2,0x35fbc7d6,0xba808012,0xba83aaa3,0x3b200a5b,0x38e2e2ca,0xb6a25387,0xb976b65c,0xb8f855b8,0x397b3872,0x3ad65321, -0x3a3f1aa0,0x39949f55,0xb8c068d0,0xb9e4b1af,0xba81a791,0x385d78a4,0xbb332821,0xbb25a105,0xbab29784,0xbb0c719a,0xbaf2e599,0xbb344b7b,0xbab141c7,0xbaaabb79,0xbb284359,0xb95b5a80,0x387016f3,0xbabb4dba,0xb9df0ceb,0xba7b0f2e,0x394c763f,0xb9c5c94f,0xb9f4771d,0xba0953a7,0x3b569776, -0x3b6f5d14,0x3a1ccaa9,0xbaba8b21,0xb9c58ab1,0x3b862da9,0x3976ee74,0xbb250b23,0xbb43e3a5,0xbb14a7d3,0x390e059b,0x3b586ccd,0x3b3d4c5b,0x3b0bd289,0x3ab5a0c7,0x397560c7,0xba46bbef,0xba602333,0xbb2e5107,0xbab49f40,0xb9ebc00e,0xb863b102,0x394f4540,0x39eceb38,0xb89cea75,0xb8a6a07c, -0xbab20be7,0xb9c1a276,0xb99412d1,0xbb55a299,0xbb03ed3a,0x3bb82f21,0x3bd83eca,0x3c21f6ba,0x3c33f6f0,0x3c2c4586,0x3b45c3fe,0xb996daea,0x3b0f416d,0xba82a9e5,0xbb2a9d44,0xbb487118,0x3aae435e,0x3bdd1776,0x3c39d799,0x3bb5615e,0x39a78462,0xbb561c83,0xbbd1d9c6,0xbbe0fff7,0xbbb5a595, -0xbbb198db,0xbb6ae62a,0xba893b6e,0x3b0ec5ae,0x3a975781,0xb83eabc5,0x3974b409,0xb8f05370,0xb8791e2d,0xb7415593,0x398954d0,0x394d1a92,0x3a8673d6,0x3b43643a,0x3b9167d9,0x3ba1def4,0xbb120f17,0x3a70f181,0xb920bc5f,0xbb35d3c2,0xbb8a1aa9,0xbc0e6ffe,0xbbfbc828,0x371b1a7c,0x3a2b51d7, -0x3b6be88d,0x3bc8768e,0xbb5b62a1,0xbc13ba16,0xbc0afcec,0xbb9ee100,0xba20cde4,0x3b4d3d1d,0x3b5aacf1,0x3af6b9f8,0xba24fc2e,0xbab5b85c,0xba816405,0x39c7ae85,0xba3a77d7,0xb9e3c235,0xb8989f36,0xb89a35e9,0x36fbf349,0x38069107,0xb789fd02,0xb90a4836,0xb87b2866,0xba1033e9,0xba0d78f4, -0x3a3142f6,0xbad23c88,0x3ba65b3c,0x3c2ff4ca,0x3b7f0069,0x3b3c17b6,0x3bbb13e3,0x3c1d0113,0x3c1aa5e6,0x3c0225d1,0x3a024e6f,0xbb8bed8b,0xbbdef91d,0x3b6abf31,0x3c0f1b3d,0x3c0587ff,0x3b1dee4f,0xba853841,0xbaa437a7,0xbaf85bc8,0xba29c423,0x3a8cbe71,0x3aa375c1,0x3a3f873a,0xb998c0e3, -0x39c23e78,0x39691d3f,0x388a73e5,0x38440854,0x3799c2aa,0xb6ddf425,0x374305d2,0x38ab3dcb,0x36ad4728,0x39c896d6,0x3919cc0b,0xbb3e240d,0x3a409b41,0xbbcdf604,0xbaf40897,0xbc1ba75e,0xbc35e838,0xbc4fe032,0xbc436c00,0xbb9a8113,0x3c07eaae,0x3c04e830,0x3bbed12b,0xbaf2ea07,0xbaceea18, -0xbb42debc,0xbb492ae4,0xbb58e3f4,0xbb14f482,0xba4b8914,0x3a475fda,0x3b01170a,0x3b3b2413,0x3b27e9f9,0x3ad0508c,0xb93fb92c,0xb9ccb1b3,0xb925b59a,0xb850df4b,0xb89fd061,0xb81bc3a9,0xb763e96e,0xb76b315b,0xb855b5c9,0xb898f090,0xb804166a,0xbb06fe75,0xbc35c55f,0xbc35b3f0,0x3c60bee2, -0x3c329328,0x3b5c2698,0xb9b9a23c,0x3931315b,0xba85845d,0xbb3ab068,0xbb968670,0xbbb172d5,0xbb99c335,0xbb629ead,0xbb39e526,0xbad45094,0x3a0d30a8,0x3aa38d51,0x3aec932d,0x3b0b12c3,0x3b156316,0x3b398a08,0x3b6183bf,0x3b857b56,0x3b7e84be,0x3b0d0425,0x3a5dd663,0x38a6fd68,0x38ef054e, -0x39074887,0x38b2ceda,0x3815f033,0x37afae42,0x381b94dc,0x39246e79,0xb788ce21,0x3b10e5aa,0x3b9d6179,0x3c4f2885,0xba5e1552,0x3a15bf6d,0x3a81042b,0x3981cd9e,0xba5f8870,0xbafed036,0xbb019e8b,0xbb0557d8,0xba42fa67,0xba09c5c4,0xba6472fc,0xba3ad257,0xba5a91d3,0xba903b93,0xba83a5aa, -0xba9151c3,0xbac831b8,0xbad078f5,0xbab2a61b,0xbaa1d006,0xba80b08d,0xb92550a5,0x3a1dd3ac,0x39c20b38,0x378facb3,0xb9b560b9,0xb989f115,0xb937f4ba,0xb899f193,0xb681c869,0xb74f755c,0xb99da5b8,0xba4c469d,0xba8f7a9d,0xbac661af,0xba93df3f,0xbb496f96,0xbb749105,0xbb6afc0d,0xbb5a1619, -0xbb4c3e60,0xbb0ceb8d,0xbaca80e4,0xba8f8fb6,0xb970ffab,0x3a543fca,0x3af67071,0x3b213303,0x3b431910,0x3b630c72,0x3b374679,0x3b0e5ab1,0x3ad067eb,0x3aa0533e,0x3a629e74,0x398ea244,0x3a3c8fdc,0x3a966609,0x3acbe019,0x3a9fca9f,0x3a94e488,0x3a4d57cf,0x3a1067be,0x384fa2ee,0x38b70be0, -0xb9fb5d52,0xba5c60bc,0xbac1af22,0xbae3c8f6,0xbb095596,0xbb1bd7be,0xbb385bfb,0x3ac0f77f,0x3a5b3029,0x3a80a99e,0x3a8c1f37,0x3a8ed258,0x3aa5c368,0x3abf0ae2,0x3adb8d89,0x3ae4160d,0x3ad50eae,0x3ac3ff43,0x3ab5ecf0,0x3aac49c2,0x3aad19b8,0x3aab3820,0x3ab8cadd,0x3abf0efc,0x3ac2a904, -0x3acd17fa,0x3ac249f5,0x3abd382f,0x3b03cc15,0x3b1c3f5b,0x3b34e166,0x3b4c8955,0x3b6b1307,0x3b57b312,0x3b45ce8f,0x3b3636a9,0x3b1dc25c,0x3b0c48c2,0x3b002c49,0x3ae73a2c,0x3ad606dd,0x3ad2d29a,0x3aa8aa7d,0x3aad3a29,0x3a9eb537,0x3ab6a5ee,0x3ac15b59,0x3ad0ee92,0x3ad17116,0x3ad1a2ee, -0x3ad57ebd,0x3ad508e1,0x3add93ff,0x3ae66741,0x3af0674c,0x3af5635d,0x3af5b1be,0x3af6a8a4,0x3af3c07c,0x3af1bfe5,0x3aeea24a,0x3aea5dbc,0x3af24f73,0x3adc179b,0x3ad58660,0x3ac28480,0x3b00b3e8,0x3af606c0,0x3b014e63,0x3aeb5177,0x3ae44897,0x3ad46056,0x3acf9a7b,0x3ac3691a,0x3ab01d1d, -0x3ab63bc0,0x3abaeff7,0x3aad5a94,0x3aae3455,0x3b04bff0,0xb9f03bbd,0xb973eaca,0xb8dca0c8,0xb92c4a61,0xb91614ed,0xb981b803,0x382070c5,0xb845c67a,0xb9d52e47,0xba088cd8,0xb9fc2c5c,0x38965d34,0xb99634fc,0xb9a9277c,0xb9bc89ba,0xb9ed391e,0xb9dffbdf,0xb8e85ffc,0xb9a2ffcb,0xb9bc13bb, -0xba025b23,0xb9da663d,0xb9c8cfb2,0xb899afc1,0xba4e0220,0xba4c9f4e,0xb992787a,0xba0f0463,0xba02ccd4,0xb9f512f2,0xb9941fa3,0xb99ca1f7,0xba1ab943,0xb99b7afc,0xb9bdf821,0xb9d545e9,0xb99aedec,0xb99a9aa0,0x362328cc,0xb9453b74,0xb94114bd,0xb9e11505,0x3a1e1c99,0x3a23038f,0xb94f9090, -0xba37d664,0xba130560,0x3a415285,0xb99022e9,0xba5860eb,0xba8ff3f7,0xbab49891,0xba7f1bd3,0x395aad8c,0x380e8044,0xb81d84e5,0xb9bc2f50,0xb99eeab0,0xba21c57d,0xb7de1fda,0xbabc8332,0xbacca5c1,0xb9ee0159,0xbad2dd08,0xbadead98,0xbaca2562,0xba0fea6b,0xb993a0bd,0xba80254b,0xb99ba17c, -0xb9cbf18e,0xba7fb41e,0xba218a47,0x3899e9a3,0x3a92fd3c,0x3a23ddb1,0x3a8a3f7a,0x39d3f5eb,0x3b0c5896,0x3afaa158,0x39bdd765,0xba543b79,0xba78c0bf,0x3ae017f3,0x396b1d7d,0x388725cf,0xb9ed4581,0xba8096ff,0xba46eb91,0x3a89893e,0x39646aa4,0xb8e8b353,0xba1f68d8,0xba3303fc,0xba92e38b, -0x38967c9f,0xbb37871d,0xbb240cac,0xba5ee5cc,0xbaf70d11,0xbac2a825,0xbae0ee58,0xba60cc21,0xba6bcf48,0xbadb7b53,0xb9741868,0xb8eb3c64,0xbaa8bf09,0xba0c2201,0xba3528fc,0x393cbba1,0xb9a33d1e,0xba2de9ab,0xbaa819b1,0x3b29d022,0x3b5cc7c9,0x3a9ce9a0,0xba8b0ac0,0xba0482e7,0x3b3998d9, -0x39e410fb,0xbb0f531b,0xbb6897a7,0xbb88dbe3,0xbb097b11,0x3aedc519,0x3adef617,0x3a9af6f0,0x39b2b4b5,0xb9c55e19,0xba8ecffb,0xba3eb154,0xbb1a03c8,0xba548553,0x37110773,0x392fe3cb,0x3a05d024,0x39eb6243,0x395bf1e4,0x390d7088,0xb9cb562a,0xb94a042a,0xb941c0dc,0xbb21f24c,0xbae29ff4, -0x3ba07dfd,0x3ba5ca3a,0x3c0dbe97,0x3c291faa,0x3c2e49d1,0x3b4d4328,0xb8dc35b0,0x3b17215a,0xba1fc956,0xbaf10b11,0xbae9b2b4,0x3af5ffc9,0x3bf04fdf,0x3c487d7d,0x3bfd67d5,0x3b3107e6,0xbabb9668,0xbba71020,0xbbbfe989,0xbb9864e7,0xbb92b2bc,0xbb1b17b5,0x38ebb022,0x3add46f1,0x3a1c93e0, -0xb87bd408,0x36663668,0xb9641b15,0xb9214b21,0xb8f51d3d,0x383433f1,0x388ad0fd,0x39906a09,0x3ae90f0a,0x3b4783eb,0x3b7d956c,0xbaa35d55,0x3acf8ef3,0xb91c3427,0xbb2f5bcd,0xbb8d4394,0xbc0c4cb7,0xbc0561e7,0xbaaa19ec,0xb8ceb2c9,0x3b62c736,0x3bedfc22,0xbadaaa72,0xbc000be7,0xbc0f0a2c, -0xbbafdaef,0xbaa19b36,0x3b1723d1,0x3b2233d9,0x3a8f092a,0xbaab5006,0xbab82856,0xba46d076,0x3934eaee,0xba25b771,0xb98f6f57,0xb7a09592,0x37ab6596,0x38ad5b55,0x38ab6cc9,0x38702cf0,0xb7ed1077,0x372714db,0xb9987e20,0xb9081752,0x39bda866,0xba95bd7c,0x3bdbee57,0x3c2be074,0x3b906c89, -0x3b10e616,0x3b0ac707,0x3c0f1456,0x3c1ddd19,0x3bf1f3e9,0x3b15c131,0xbb483c33,0xbc033189,0x3ad235b3,0x3bf5be46,0x3c1aeeed,0x3b612df9,0xb98cac54,0xba534c32,0xbaad641d,0xb9134656,0x3ae03a3c,0x3ad14094,0x3a6ad374,0x38964318,0x39bd6860,0x38ea399c,0x37f8b785,0xb74b1b9e,0xb824f23d, -0xb84405cd,0xb830a4e7,0x37536af3,0xb7ae03a5,0x392f889c,0x39d621ea,0xbb0ca908,0x3ab89e48,0xbbdbcc2f,0xbc3269ec,0xbc43f307,0xbc2e7ad3,0xbc3eccd1,0xbc4e449c,0xbbeebf35,0x3b8573fa,0x3c035b3f,0x3beb7c76,0xbac2a353,0xbacda0a1,0xbb6eff53,0xbb819b5b,0xbb850a52,0xbb395cdb,0xbac6e5e3, -0xb8de49a1,0x3a70f303,0x3afbc7cb,0x3afcb0cb,0x3a4e21cf,0xba1dee30,0xb98144d8,0xb8a6e6a2,0xb73ffa5d,0xb700a441,0x38001f1a,0x38279f40,0x382e2cc4,0x38127761,0xb81c78bc,0x388c8214,0xba9fe871,0xbc0c4f68,0xbbfac31b,0x3c59eb31,0x3c35c055,0x3b1fd6ee,0xbb1299e7,0xba95d1f3,0xbaf3a6b1, -0xbb26f5fa,0xbb6e39bf,0xbb9dbdfb,0xbb961917,0xbb754f4a,0xbb4f7aa9,0xbaff492d,0x39173291,0x3a6807c2,0x3ac85eaa,0x3b07b9c0,0x3b2aeb8c,0x3b5b17e8,0x3b80b0a6,0x3b91892c,0x3b6e401d,0x3ad6e1f3,0x39fabb2a,0xb86a9a41,0x389cf21b,0x365393e3,0xb7fd5c97,0xb8795e4b,0xb89e4c44,0xb8b47e6e, -0x386b38d8,0xb933a882,0x3b02eef9,0x3b830fb5,0x3c3411b5,0xb60c4739,0x3aad5806,0x3ac97bac,0x3a9b8206,0x399a8092,0xba4fb5fc,0xbaa06e53,0xbaec1197,0xba99e187,0xba9d32c6,0xbacf9887,0xbad3cd7a,0xbafc7380,0xbb19e20a,0xbb08585a,0xbaeda4f8,0xbae1746a,0xbabbe40b,0xba88bdc4,0xba4cf9e5, -0xb9c9b7f0,0x39b06148,0x3a55dfca,0x39a21ee4,0xb7ccc42b,0xb906e9a5,0xb7bd5a5e,0x38bec29a,0x38ece687,0x39605f02,0x39510478,0x38e9dfbf,0xb97e960e,0xb9c815b6,0xba43f7a9,0xb919fb22,0xbb53a46f,0xbb69eaec,0xbb52750d,0xbb44ea76,0xbb3101e1,0xbb07fc50,0xbae15acc,0xbac73d23,0xba4dd5e3, -0x38688705,0x3a73218e,0x3adf9ee7,0x3b1fb80d,0x3b4e31cd,0x3b2ad9f8,0x3b072560,0x3ac8a862,0x3aa62651,0x3a85bf1f,0x3a2a7c10,0x3a694447,0x3a8fd3ed,0x3aa6e44f,0x3a54766e,0x3a198694,0x38d77774,0xb7f09ac4,0xb9e51285,0xb9b74eb4,0xba4a1764,0xba85cbee,0xbacbad74,0xbb003982,0xbb20005f, -0xbb373819,0xbb4a2820,0x3a046e3a,0xb9226823,0x38e3ae09,0x39b9127e,0x3a0d6174,0x3a55ade0,0x3a96af4b,0x3ac2b4e7,0x3ae14df7,0x3aeb31f5,0x3aee85d5,0x3af10401,0x3af35cf4,0x3b03dbb0,0x3afe161e,0x3b04d1ef,0x3b06991a,0x3b088fac,0x3b0afd05,0x3b06e9fa,0x3b01ce1a,0x3b1c09a6,0x3b2b826d, -0x3b389413,0x3b465901,0x3b522577,0x3b3a0ee3,0x3b238280,0x3b11c09a,0x3aea85a0,0x3ac10938,0x3aad3cca,0x3a928e68,0x3a843d47,0x3a6b8dea,0x3a03a0eb,0x3abd7271,0x3aa812fb,0x3ac67609,0x3ad35f11,0x3ae44773,0x3aec918c,0x3af245d9,0x3afa068e,0x3aff440f,0x3b0640be,0x3b0e1694,0x3b161dde, -0x3b1bef0e,0x3b20728b,0x3b1f6207,0x3b1dd1da,0x3b1c30e4,0x3b19a80b,0x3b16f43e,0x3b18d858,0x3b0f0735,0x3b09e476,0x3b009eb4,0x3b16e9fe,0x3b120d83,0x3b1b94f6,0x3b11bcd8,0x3b0d29e4,0x3b03e288,0x3b0033ce,0x3af086c2,0x3ad69ae1,0x3ad19391,0x3acdce7e,0x3abe6629,0x3abf3b30,0x3b276dcc, -0xba2f6a59,0xb9de0d3e,0xb9a2ed5b,0xb9b5d3f7,0xb9af6ee7,0xba04f97c,0xb9265bfe,0xb9546db5,0xb9eea3d6,0xba272632,0xba26ba76,0xb987894e,0xb9e40af0,0xb9f818ea,0xba16fb5e,0xba450da1,0xba43b722,0xb9cfc7e4,0xba0f84f4,0xba174cc2,0xba416ce8,0xba2215cf,0xba16ba93,0xb97e27b7,0xba7fb1d6, -0xba7b1ddd,0xb9b7927c,0xba3d971d,0xba2f9d57,0xba06516d,0xb9d7b918,0xb9d99614,0xba1c4795,0xb9f7b9fa,0xba15d612,0xba16bc75,0xba008d7f,0xb9eb9d2a,0xb9570308,0xb9abf42f,0xb9c6fd6e,0xba545465,0x39a52235,0x39eb6ab5,0xb8a59b9e,0xba3df7a6,0xba3b3b00,0x392d0ba9,0xb9a383f5,0xba5df063, -0xbab8bab2,0xbb040cf5,0xbae17212,0xb9d750fc,0xb9e5215c,0xb9d655cd,0xba471ebf,0xba193acb,0xba5c2f40,0xb93e1046,0xbad2b844,0xbae15c6b,0xba0058a0,0xbafc2874,0xbb05cfb3,0xbac9382b,0xba34d5b5,0xb9d0214b,0xba43d430,0xb9fbabfb,0xba23ae11,0xba8754c1,0xba401d56,0xb8b8e437,0x3a5f1392, -0x3a05e38e,0x3a5e71ed,0xb9018775,0x3af24627,0x3af08554,0x3a65f26e,0xba1aecd3,0xba6e2adc,0x3a520cd1,0x39bdc952,0x3924346a,0xba40300d,0xbaf232c0,0xbae91c27,0x399e89c0,0xb9a67bca,0xb9fcfecc,0xba929837,0xba804cb0,0xbaa63204,0xb8800c29,0xbb334358,0xbb1766fb,0xb9e290d2,0xbac40cc0, -0xba6b271a,0xba52f411,0xb9e02b3e,0xba0c500a,0xba5a9a3e,0xb9a0fb02,0xb9c6279f,0xbaa5ddcc,0xba38078d,0xba28ce0d,0x38c1a05f,0xb952e28a,0xba522b24,0xbb06a7c4,0x3afc80b3,0x3b4c3e76,0x3aff700c,0xba2040d0,0xba2cbca2,0x3ab0cacd,0x3a362c7e,0xbad7045f,0xbb81bcdd,0xbbbfbc09,0xbb8a2137, -0x393ba460,0x3a0ef652,0x39b0e58d,0xba1a5902,0xba74c7f0,0xbaabbecc,0xba28f1d5,0xbaebdc56,0xb967632e,0x39606463,0x399af3b9,0x39dd1fc0,0x3998254e,0x39250852,0x392dd775,0x37b1202f,0xb861b52c,0xb9403fcb,0xbaf31e81,0xbabee6af,0x3b7af82d,0x3b812d39,0x3bfd818a,0x3c1e4d8c,0x3c323681, -0x3b850a66,0x3a872e7e,0x3b437fd7,0xb870fcee,0xba9ddabc,0xba42d99b,0x3b0868a7,0x3bed81fe,0x3c4589d0,0x3c1624f1,0x3b962724,0xb8fbfa7e,0xbb83b0ea,0xbba3d811,0xbb82aea5,0xbb6c9dc5,0xbab34f38,0x3a6176cc,0x3a7fe91a,0x395b9ae5,0xb8c852e2,0xb8dedfc4,0xb9431726,0xb910b634,0xb8928f48, -0xb890a376,0x37e0f88e,0xb85c41ab,0x3a46dc8a,0x3aebc829,0x3b2cbd0d,0xba531a22,0x3b0cf2c6,0x3aa621c4,0xba7d4e1c,0xbb333b0e,0xbbedb7e7,0xbc003f4a,0xbb1f318e,0xba60563c,0x3b431c61,0x3befa112,0xba072b97,0xbbdb16d2,0xbc113f93,0xbbc32197,0xbb00d0ce,0x3abdaaa8,0x3ae85783,0x3a23b5f4, -0xbad31a67,0xba9b682e,0xb9f96c9b,0xb809bf46,0xb9fdf93c,0xb8c1f8a0,0x3811b6b7,0x3876d916,0x38c044b4,0x388e1716,0x388029c9,0xb64118d5,0x38b8a295,0xb9226111,0xb89373e0,0x3974c9fd,0xba0a927f,0x3bfe6680,0x3c3324b0,0x3bcec4c3,0x3b2ec162,0xb995f897,0x3c09d450,0x3c2b46cc,0x3bf9d103, -0x3b8ce9cb,0xbae1ce38,0xbc0fe6c9,0xb9afded2,0x3bc37991,0x3c25121b,0x3b95b446,0x3a665341,0xb928fbe6,0xba11abec,0x39c74b6e,0x3b03162e,0x3ac61fda,0x3a44fdf6,0x39473398,0x39641042,0x386556e4,0xb79f284e,0xb821c87b,0xb85f79c9,0xb86cff8d,0xb810b955,0xb84ad755,0x371d9575,0xb8d9b4b3, -0x3a3de6bc,0xbaf44f08,0x3ae20a9c,0xbbde8b7b,0xbc8ea502,0xbc42bec8,0xbc0579bd,0xbc1fd022,0xbc374e61,0xbc0547c4,0xb63dd46f,0x3bff2786,0x3c0e0d30,0x38bd7532,0xba51306f,0xbb6e49bf,0xbb886bd3,0xbb901d05,0xbb540247,0xbb0a9f11,0xba6f96d7,0xb91b35a3,0x3a58416f,0x3a83dc34,0x36abee2a, -0xba39b02a,0xb855a68b,0xb7ddea64,0x37b05a7b,0x380a4a04,0x388011ae,0x385f3496,0x389b33f8,0x38188221,0x38a97ca0,0xb7b4db75,0xb954103b,0xbbb9cc02,0xbb8c8ac6,0x3c416778,0x3c2e0f7f,0x3ace9aeb,0xbb637343,0xbb1aa783,0xbb2e1760,0xbb1bd649,0xbb2d1f0e,0xbb873940,0xbb8b9e02,0xbb66164b, -0xbb388af8,0xbad04af6,0x3952b6ed,0x3a6ad7fe,0x3ac6a8fc,0x3b10b21d,0x3b39703b,0x3b68831d,0x3b842568,0x3b8bf54e,0x3b425d69,0x3a8698f3,0x38e73b32,0xb895ac24,0x374980cc,0xb8a2daf3,0xb8a9d13c,0xb8f0a45a,0xb8c6b2d3,0xb939b0ed,0x37c362b9,0xb9cb0860,0x3ab18eb0,0x3b5b257e,0x3c0e08b5, -0x3a83c20c,0x3b182a26,0x3b14b48d,0x3b13c8c4,0x3abcecf4,0x39710802,0xba3cab24,0xbae197ce,0xbad79c08,0xbae83281,0xbb079f1d,0xbb0a474e,0xbb21e0a2,0xbb468c3b,0xbb27f654,0xbb05d28c,0xbad44953,0xba9f01d2,0xba3eb341,0xb9df9c9b,0x38fb560d,0x3a3a2e84,0x3a5ebf7c,0x398436e6,0xb74da69d, -0x3888bf3c,0x3909a815,0x3957d4d5,0x395674b3,0x398dfc4d,0x3998d9e6,0x399ffea7,0x39046d03,0x398ec4c3,0x37c6d81c,0x3a4f3e81,0xbb40c33a,0xbb4802b5,0xbb2c0419,0xbb2627f6,0xbb123b02,0xbaec4ff2,0xbacb6fb2,0xbac26d13,0xba657587,0xb9820260,0x39de2fe8,0x3aa3d293,0x3b06e662,0x3b3ba0c6, -0x3b2091b1,0x3b028796,0x3acc016c,0x3ab779dc,0x3aaa97a6,0x3a8b43fd,0x3a73a4fd,0x3a6f25f0,0x3a5edb61,0x39c265d3,0x38b823b2,0xb9aa13b7,0xb9cb41a2,0xba1e2f57,0xba013734,0xba44c962,0xba791267,0xbaab11eb,0xbae7bc88,0xbb182e6a,0xbb2fec39,0xbb39bf29,0xb9c9161e,0xba89f76f,0xba3031ba, -0xb98f4164,0x386f1f46,0x39cc8a15,0x3a523214,0x3aa075df,0x3ace1675,0x3aed1901,0x3b019513,0x3b0a3aee,0x3b1113a7,0x3b22a98f,0x3b1baab3,0x3b20ec42,0x3b21b6be,0x3b228c11,0x3b2232f7,0x3b2056eb,0x3b18ed20,0x3b252dd2,0x3b271526,0x3b26b735,0x3b2698bd,0x3b1f5f72,0x3b057aad,0x3ad7f1c4, -0x3aae849e,0x3a725abd,0x3a1e318e,0x39fa61f1,0x3998a0d2,0x3981e8e3,0x38cbce83,0xb9b49e5d,0x3ac01b9b,0x3a99de9f,0x3abe9932,0x3acc1c84,0x3addf216,0x3aed5a2c,0x3af88d43,0x3b01bc44,0x3b0715e5,0x3b0f823d,0x3b19afd8,0x3b244f28,0x3b2d3309,0x3b36010d,0x3b330711,0x3b30c5a0,0x3b2e4901, -0x3b2b43fe,0x3b281115,0x3b27885e,0x3b22e361,0x3b1e755d,0x3b1aa4a5,0x3b204eaa,0x3b1f0bb7,0x3b2bd874,0x3b23fd07,0x3b1eb050,0x3b15e825,0x3b0fefac,0x3b06dd62,0x3af021f7,0x3adcddef,0x3acaef74,0x3acf4f21,0x3ac6c86a,0x3b3543b2,0xba5d6937,0xba1b51c1,0xb9ea2f66,0xb9ec3107,0xb9e85042, -0xba3135cb,0xb9ac0ec5,0xb9b9610b,0xba02e4c3,0xba472153,0xba5255ba,0xba22558a,0xba172413,0xba1d884c,0xba497d30,0xba8308e1,0xba84f1c1,0xba2fc950,0xba457ecf,0xba48bff0,0xba74c469,0xba599ea0,0xba4f3dae,0xb9efadab,0xba955631,0xba90ce49,0xb9e43153,0xba6548dc,0xba5faa78,0xba21a004, -0xba10c2f8,0xba09e2ca,0xba19253a,0xba2c594f,0xba4785b2,0xba459f7c,0xba31ed5a,0xba179d5c,0xb99d38e6,0xb9a38acf,0xb9da0f06,0xba84fc31,0x3813b1e9,0x395bb15b,0xb7b3a240,0xba5cec9b,0xba7e5382,0xba0bfed7,0xb9cc9aef,0xba5d4df9,0xbadaded1,0xbb242a3c,0xbb194563,0xba87d368,0xba6618aa, -0xba42ce02,0xba91e0a7,0xba6137e9,0xba8550bd,0xb9b45f13,0xbadb78e8,0xbaed98a9,0xba1cd020,0xbb0b3482,0xbb0c8968,0xbaae7e34,0xba3e3598,0xb9e9f111,0xb9faf954,0xba1f53de,0xba4f4f90,0xba85fc83,0xba516b5f,0xb8ef65d6,0x3a428488,0x3a317c21,0x3a6f0bc4,0xb9b52592,0x3ac9fe32,0x3ad00719, -0x3aa2ca5f,0xba1bcd99,0xba91686a,0xb9ddca56,0x39a8a0f3,0x3939d553,0xba896d9c,0xbb279bb5,0xbb2d3856,0xba07df86,0xba5a9a0c,0xba584de5,0xbad01e05,0xbaa47635,0xbab43494,0xb98723ee,0xbb251a8e,0xbaf9e6e5,0xb916b654,0xba6726fb,0xb9ba6fae,0xb99a6b88,0xb8f1c8a8,0xb980dbc6,0xb95d19fe, -0xb9a6ef51,0xba1243d2,0xba93de9e,0xba32dd6d,0xb9f3d9e3,0x396449dd,0x3967d334,0xba15402b,0xbb1ab54a,0x3a9f9ed5,0x3b281eec,0x3b1d590b,0xba14c79b,0xbaa62594,0xba1aef04,0x3a2d5a4b,0xba972349,0xbb8c72f1,0xbbe99325,0xbbc56b01,0xbace2dc6,0xba2146b8,0xb9f35a0d,0xbabb04fa,0xbab153d9, -0xbab67d6d,0xba1e066f,0xba910cda,0x397a87d4,0x394c2ffb,0x398a3fa7,0x399306be,0x3915d3c7,0x38cde4f9,0x38999afc,0x3890e61d,0x3854e47f,0xb91495e5,0xbaa71b20,0xba902d4b,0x3b5bb28a,0x3b5ede58,0x3be450fa,0x3c14f6ca,0x3c363ec4,0x3ba06efb,0x3b026e49,0x3b5ae287,0x39cc1d81,0xba2d0067, -0xb8f29237,0x3aeca62f,0x3bd46b96,0x3c3659e9,0x3c26b047,0x3bcf5361,0x3a8cdd76,0xbb3c3f2d,0xbb87bb73,0xbb654423,0xbb3c78ac,0xba20dbab,0x3a8b43ba,0x39c70856,0x38725251,0xb9178c99,0xb8d4a622,0xb91934d9,0xb89bcc98,0xb85ef039,0xb81fa69b,0xb8051b2c,0xb82cadd1,0x39626409,0x3a7b530e, -0x3af6cafc,0x39bb6b56,0x3b391a71,0x3afe7a60,0x393090c8,0xbaf70213,0xbbcaa73b,0xbbed7f80,0xbb449717,0xba7bbeea,0x3b3a81a2,0x3be4dde4,0x3a126486,0xbbb05abd,0xbc0f02b4,0xbbd8c5a0,0xbb45abf9,0x398a2ef0,0x3a73d9b0,0x3967fc02,0xbacf6044,0xba3da8de,0xb94db137,0xb93d9f96,0xb986b973, -0xb70790d3,0x38659854,0x388b3227,0x38985608,0x383c9cee,0x3831a60a,0x373b9eae,0x386e1549,0xb7a0475f,0xb90e2342,0x39777a12,0x398c0ef9,0x3c0c8c14,0x3c2cb02c,0x3bc01b08,0x3ab559ed,0xbb593866,0x3bea61f0,0x3c2c7763,0x3bf99d9a,0x3bcbbbeb,0xb8ad38dc,0xbc0d1806,0xbae3cd0e,0x3b940cfa, -0x3c26499c,0x3bc2477e,0x3b253425,0x3a38c3fc,0x399587ad,0x3a474469,0x3af3ff8e,0x3a8ef11b,0x39de7267,0x3953695c,0x38d3247a,0xb6d34f8b,0xb8049e39,0xb8573d77,0xb83e788d,0xb84f04d4,0xb7a57651,0xb88f44ba,0x38502aa0,0xb97974f7,0x3a27fafa,0xba9a80ef,0x3ac801c6,0xbbea9d86,0xbcbac8ba, -0xbc3ecadc,0xbbbc292e,0xbbf5be66,0xbc15ec4b,0xbc0ab342,0xbb886e40,0x3bd6c4da,0x3c170db6,0x3b0849f3,0xb917a1e4,0xbb6c926d,0xbb84128c,0xbb91daa9,0xbb643d9a,0xbb2a395c,0xbacf937b,0xba8ba61d,0xb99c0cfc,0x3692d682,0xba1e9f7e,0xba07fa2c,0x3899a1a4,0xb7aa6977,0x3865bead,0x384634e8, -0x3889f274,0x3841cf62,0x389e8ae1,0x37c9931f,0x3902551b,0xb86d847e,0x397e6ec9,0xbb3a2415,0xbb02b778,0x3c07b037,0x3bfe17b0,0x377de9dc,0xbb95dece,0xbb7e6ffa,0xbb6e3c75,0xbb1f2a7a,0xbaebc0aa,0xbb6226c8,0xbb853453,0xbb6d4fcd,0xbb399e79,0xbace05e9,0xb867c915,0x3a389bd5,0x3abfbfd3, -0x3b21d752,0x3b4a7cf9,0x3b722f17,0x3b809903,0x3b726999,0x3b10e8a7,0x39fc656a,0xb8862528,0xb84d18f0,0xb882bd28,0xb8cc7cc7,0xb8cd50e0,0xb8e5d236,0xb8c3d9a2,0xb9268e6f,0xb7f99933,0xb9baf23f,0x39d5a558,0x3b29eb81,0x3bab6dab,0x3af0b808,0x3b3b7da3,0x3b2c52be,0x3b3ab699,0x3b02241c, -0x3a5b61e0,0xb9e640e7,0xbad4b609,0xbb0bab4e,0xbb16dfc2,0xbb24063a,0xbb23d80b,0xbb398e6b,0xbb5fd71f,0xbb2f86c9,0xbb0159b5,0xbab22d89,0xba61f764,0xb99e8713,0x38cd50b5,0x3a2188bb,0x3a81ee53,0x3a48ba2b,0x39412332,0x3881eb41,0x39332a66,0x393b6b4a,0x39692caf,0x394e2a9c,0x397cf175, -0x39804217,0x39a47dbc,0x39929d45,0x3a1acd23,0x3a1f8263,0x3aaf6a4f,0xbb2a05de,0xbb29b0c0,0xbb107527,0xbb12a20c,0xbb01bb62,0xbadb704c,0xbac3b008,0xbac54891,0xba8a68a7,0xba342f96,0xb992c24c,0x39fb4e83,0x3aa4ab28,0x3b05cfe1,0x3aeb8e7d,0x3ac4dd29,0x3aa01dd4,0x3aa0fca1,0x3aa0c008, -0x3aa68c6d,0x3a7a21eb,0x3a31d51c,0x39f05e73,0x377e4527,0xb983c3b7,0xba00beb7,0xb9e569b9,0xba088b46,0xb9db8da2,0xba05ae0e,0xba260e21,0xba6a4b48,0xbab6b5f5,0xbb01bf5b,0xbb1e8db1,0xbb21a66b,0xba9a7878,0xbaec98a7,0xbab0c951,0xba644ac3,0xb9f5d029,0xb91612fc,0x399065eb,0x3a3c6b22, -0x3a9476a4,0x3ac3f93c,0x3ae9fda6,0x3b03e50a,0x3b0ff13c,0x3b2817c0,0x3b204930,0x3b24600b,0x3b23fb08,0x3b248e0a,0x3b220274,0x3b22943e,0x3b21a301,0x3b16edb8,0x3b0c88ce,0x3b018a0f,0x3aef6db8,0x3abea216,0x3a8ab61b,0x3a322b12,0x39cd8b07,0x360189ce,0xb99f3066,0xb9cbc0a8,0xba10783d, -0xba0eed75,0xba39d232,0xba9633c1,0x3a9a0bb3,0x3a59127c,0x3a924b40,0x3a9daf69,0x3aae7252,0x3ac175e6,0x3acf58ca,0x3ada6ce9,0x3ae83ebb,0x3af99df1,0x3b078d0b,0x3b131e67,0x3b1d7456,0x3b2891b9,0x3b250411,0x3b235c75,0x3b214762,0x3b1e9f7a,0x3b1ca068,0x3b18c603,0x3b1c2e1f,0x3b1bae0f, -0x3b239895,0x3b0dbf5c,0x3b134cbe,0x3b267308,0x3b203a04,0x3b197685,0x3b104e07,0x3b096171,0x3b00138b,0x3ae17f5c,0x3abe1c5f,0x3a9ccbc1,0x3ac25233,0x3aa87a97,0x3b242d15,0xba72db60,0xba2e4fd8,0xba179a28,0xba0c11ff,0xba0d9c2c,0xba562a7d,0xb9ed57ee,0xb9e17a58,0xb9de7661,0xba442f5d, -0xba59a057,0xba5def48,0xba1fd44e,0xba23da80,0xba5e6a43,0xba91a9cc,0xba96b12b,0xba60efaa,0xba646ffc,0xba646c3c,0xba86ba3b,0xba6fab06,0xba68da3f,0xba248709,0xba959559,0xba8ff6ac,0xba08f097,0xba84ccc9,0xba85f3d7,0xba38e0eb,0xba2fabc0,0xba201dc5,0xba0f43f9,0xba3f3f19,0xba5b46e2, -0xba5ac040,0xba441999,0xba198fac,0xb9eea89d,0xb9d3f4e0,0xba0bd425,0xbaa25cbf,0xb96998c1,0x388cb935,0x397179e5,0xba392454,0xba7dfec1,0xba84fff1,0xb9b45359,0xba384cc1,0xbae0940c,0xbb2f9afc,0xbb2e6955,0xbac66980,0xba9c8a9c,0xba7f8e96,0xbaac46a6,0xba864cda,0xba8c638f,0xb9eb1a80, -0xbada1af3,0xbaf1fd7e,0xba33181e,0xbb02503b,0xbafa0bdd,0xba8791e1,0xba1f8654,0xb9cade71,0xb945c56b,0xba3158f1,0xba6af833,0xba73e0ea,0xba59616d,0xb917cdea,0x39e6bff1,0x39f8fd37,0x3a2900fa,0xba4ef66a,0x3a913e06,0x3ab52a90,0x3af24714,0xb979f9c6,0xba71aeb7,0xbaa79447,0x39edceca, -0x39b8dc64,0xba922be7,0xbb3aede7,0xbb4bd3cb,0xba9e357a,0xbaa09292,0xba8b2833,0xbaf54f0d,0xbab835e1,0xbab4e882,0xb9ef0a62,0xbb075456,0xbaa70cf7,0x38f9ffd6,0xb9c1d11d,0x38f99b28,0x37f71616,0x384baaa0,0xb8c1fb5f,0x38f9d0f9,0xb97a8cbb,0xba26e4f6,0xba7f830c,0xba35acf9,0xb9cc7c49, -0x366f4d82,0x38c9e819,0xba408c78,0xbb3bde0a,0x39dffb58,0x3b0c05ef,0x3b53b699,0x37e3d4ad,0xbaaee2b3,0xbb089ca8,0x3a3990aa,0xba06ea57,0xbb879a3e,0xbbf7aa76,0xbbe7c113,0xbb479ccf,0xbacf672a,0xba8df9ca,0xbb03e69e,0xbad77cd0,0xbab0f9b3,0xba06719c,0xb9e1bfbf,0x39ea4fb8,0x3839bcc3, -0x391dd04c,0x383f6a9f,0xb79fb5c0,0x379c99c5,0x37db56aa,0xb7bf494d,0x38b1fe20,0xb70b00a6,0xba5baa61,0xba64b28e,0x3b28254f,0x3b1aa4d7,0x3ba8f532,0x3bed3827,0x3c263d17,0x3ba82170,0x3b32d338,0x3b6e0806,0x3a9e6984,0x3a00d398,0x3a9ab5e8,0x3b08525c,0x3bc07566,0x3c228bed,0x3c2f39bc, -0x3bfb9235,0x3b0b0396,0xbae11e65,0xbb542420,0xbb442cda,0xbb0ea802,0x37298653,0x3a6bb4ef,0x3779dcf2,0xb84c45e0,0xb8d802bb,0xb82660b2,0xb83f6d7d,0x37187e21,0xb784e912,0xb6c0c869,0xb730cc5c,0xb7d12fe3,0x363026c7,0x39af938e,0x3a9c2542,0x3a4b88b3,0x3b2590f0,0x3b1739cd,0x3aabe752, -0xb9d98052,0xbb95d1aa,0xbbc9786c,0xbb62ff69,0xba5f88e8,0x3b3fa16e,0x3bdf1b8c,0x3b0819ec,0xbb528e4a,0xbbf0d2b8,0xbbd16211,0xbb6c35f0,0xba2f4007,0x39a0a774,0x38e9ae4d,0xba97c204,0xb97fad7f,0x36d0b1cd,0xb98c2601,0xb8c970f9,0x3885834f,0x382892cf,0x38152b40,0x37b8f592,0x3683477d, -0x37520689,0x36eab98c,0x378591e2,0x38509f3f,0xb8ceb845,0x38c96fab,0x3a2d9b9e,0x3c01bc36,0x3c1ef64c,0x3bc7a0ea,0x3a9af1c6,0xbb8b289d,0x3bc1e556,0x3c20f9e7,0x3bde3277,0x3be207bc,0x3a73516f,0xbc0248c7,0xbb39b978,0x3b44c676,0x3c1abe61,0x3be84a6a,0x3b8ec9ca,0x3af92c48,0x3ab88bd1, -0x3ab2bc51,0x3ae11664,0x3a269237,0x392dd6a5,0x393422b1,0x379cd6d3,0xb7f4e49d,0xb81302ed,0xb800770a,0xb79b82c9,0xb78ed5ff,0xb65dae78,0xb84081f4,0x383a10c4,0xb950c16c,0x39d12b26,0xba4268c7,0x3a900921,0xbbf3cf95,0xbcc2d334,0xbc187d58,0xbb2b8791,0xbb956fea,0xbbcbad19,0xbbf9aa43, -0xbbedcbd7,0x3b8e75b4,0x3c080ed0,0x3b69fc8e,0x39312e35,0xbb6b1e1c,0xbb7e59ae,0xbb92dfc5,0xbb742d08,0xbb4219a0,0xbb0cd4b4,0xbaeeb553,0xba98c8fc,0xba49f590,0xba5b0033,0xb946611f,0x38912b18,0x37b7d166,0x38584ed3,0x38265591,0x380cfbe5,0x37afc517,0x380ca873,0x37ed33e0,0x38844f1b, -0x37f3ed20,0x392f5dd0,0xba73b8a2,0xba3c5795,0x3b879d74,0x3b83ca0c,0xba81c207,0xbb9137b7,0xbb915bb6,0xbb7a2098,0xbb136172,0xba9f1319,0xbb41ee41,0xbb816ccf,0xbb7288d5,0xbb3f6915,0xbadf5811,0xba077fd7,0x398aa1e7,0x3a96b0f9,0x3b1c5d67,0x3b4b6f3f,0x3b6e7b80,0x3b77527a,0x3b4e1162, -0x3acc794e,0x38cd4ec8,0xb9059951,0xb83e1d15,0xb8bd30ba,0xb89ec35e,0xb8802501,0xb847130e,0xb869a1c9,0xb8a93e93,0xb8ce7fab,0xb8b0cddf,0xb9c5c010,0x3ade483d,0x3b197bc4,0x3b1a091f,0x3b6661bc,0x3b4e263c,0x3b5d1af7,0x3b1eba27,0x3aa0c291,0xb98ee8e2,0xbabb8472,0xbb1b9788,0xbb2d687e, -0xbb3b8928,0xbb351a27,0xbb45196e,0xbb6a93f3,0xbb2d68b7,0xbaf64969,0xbaa49bb1,0xba18b0f2,0x388ad105,0x3a1f796a,0x3a8bd0cf,0x3a94446d,0x3a246c00,0x391dd67e,0x390bbb3c,0x3947a7fe,0x39230237,0x39059619,0x38bcebfd,0x38ef0b99,0x392e64c7,0x3961954b,0x39819f1c,0x3a09eafc,0x3a76640f, -0x3ad28a38,0xbb086094,0xbb032dbb,0xbadd49fc,0xbaeea765,0xbad52607,0xbaba8793,0xbaab165f,0xbab771f6,0xba8f96f8,0xba7568f6,0xba462462,0xb984d201,0x399bef22,0x3a5e3da5,0x3a5202e5,0x3a365d8c,0x3a1cf404,0x3a381e25,0x3a4793b5,0x3a7f6455,0x3a12bf12,0x39472d42,0xb816e65a,0xb9b0fbfa, -0xb9faa860,0xb9e2b047,0xb9b7b926,0xb97eaf0f,0xb925f2c1,0xb94787dd,0xb9adb3f8,0xb9e99e67,0xba75e43a,0xbabd60bc,0xbb00de83,0xbafc805e,0xbae4d815,0xbb075dcf,0xbad122da,0xba92d5f6,0xba3b3e76,0xb9e76abb,0xb891bea4,0x39b4ae61,0x3a403d3c,0x3a91acf1,0x3abcbe48,0x3add14f7,0x3af896bc, -0x3b13dcc9,0x3b0ea7eb,0x3b1287ca,0x3b1387c3,0x3b15b8f9,0x3b150424,0x3b1924d8,0x3b14b245,0x3afb665a,0x3ad58887,0x3ab0da9e,0x3a8d3fd1,0x3a1fed31,0x3990412d,0xb82e1029,0xb9a262fa,0xba1b3a3a,0xba602541,0xba80a8d5,0xba923c74,0xba93aebf,0xbaa52463,0xbace0743,0x3a52c1ca,0x3a0575ea, -0x3a3ec8e0,0x3a528a7c,0x3a6ef127,0x3a8b4d13,0x3a99b5cc,0x3aa4011d,0x3ab1003f,0x3abffe4a,0x3ad26fbf,0x3ae8066c,0x3afc2e10,0x3b094172,0x3b06c7d3,0x3b065362,0x3b0533f3,0x3b03ad48,0x3b02b975,0x3afe6ae9,0x3b03ac7f,0x3b042d5f,0x3b0e7e02,0x3ae0fd2f,0x3aeeec2b,0x3b075850,0x3b0112ba, -0x3af1656b,0x3ae00988,0x3acf1d88,0x3abe38e0,0x3aa459b2,0x3a867089,0x3a50b00c,0x3a8c83f2,0x3a67a32a,0x3b041c71,0xba7706a3,0xba46f50b,0xba296bc4,0xba176f52,0xba18892a,0xba64bd12,0xba0a08e5,0xb9f73179,0xb9b16856,0xba3b71f3,0xba5928c0,0xba841466,0xba2088c2,0xba1f4881,0xba5fbfaf, -0xba91aaab,0xba992d21,0xba7d1258,0xba6ec6d5,0xba6bedca,0xba8520f9,0xba7d2d61,0xba7d8989,0xba4644a8,0xba8f22bb,0xba8c6dbe,0xba21c9ad,0xba91be8b,0xba9254a9,0xba46b6c1,0xba411b6b,0xba2eab34,0xba02d32d,0xba52bfee,0xba6892ca,0xba6d71db,0xba5e0c6e,0xba3f204a,0xba1e7a25,0xb9ec294b, -0xba1b722e,0xbaac8333,0xb9d563ae,0xb86398be,0x39d6857b,0xba21c39b,0xba81910b,0xbaba38b7,0xb9ac1cf8,0xba10c5ae,0xbad5237c,0xbb298b1f,0xbb30f9b7,0xbaef8b84,0xbab48cb6,0xba8e1787,0xbab2a0d2,0xba903fb5,0xba854201,0xba0b9843,0xbad1806b,0xbae6f0f8,0xba34aa5c,0xbad710cd,0xbac4152c, -0xba410f4e,0xb9f8b32e,0xb99242d7,0x3850b89d,0xba314b1e,0xba7ce7c2,0xba652ff9,0xba5e191c,0xb9a7ad16,0x38605322,0x39c4a58a,0x39e87914,0xba833bea,0x3a41ab9b,0x3a91c430,0x3b112245,0xb8549dad,0xba5711ee,0xbb022712,0x39fe7ddf,0x3a04ae85,0xba8849c5,0xbb34766f,0xbb4ebcd5,0xbadf8e22, -0xbabba531,0xba949c29,0xbaf999ab,0xbab6b18f,0xbaa69e5b,0xba1b729f,0xbabda419,0xba1b70af,0x3965c830,0x389f788a,0x39972c7f,0x390e6584,0x38fc2c11,0xb7d08cfd,0x392899d4,0xb91eb243,0xba27b469,0xba6f2758,0xba3a6cbc,0xba13834b,0xb9b50418,0x38c2e2d7,0xba4c5c10,0xbb44c528,0xb95b43ea, -0x3ada1b40,0x3b6fa6b6,0x39a080a8,0xbac7af11,0xbb5ad0d5,0x3a19bc90,0x37af6ece,0xbb7338cf,0xbbec796c,0xbbef4235,0xbb873089,0xbb14f9b4,0xbabe2920,0xbb11f2ff,0xbadec841,0xba95c14c,0xb9b6b6f0,0x3814e717,0x39c34c61,0xb879d998,0xb70d2966,0xb88a9f83,0xb851f96b,0xb7cec82c,0xb6a1fd23, -0xb8395fc7,0x38aecaba,0x3907fc58,0xba0e8acb,0xba3f09ea,0x3afcd778,0x3b060779,0x3b845fec,0x3bc22c76,0x3c1c6e16,0x3bb2adb7,0x3b57be5d,0x3b5dd29f,0x3af8fcbd,0x3acdb0c0,0x3b0ef5c0,0x3b21e843,0x3baf1e56,0x3c0ead70,0x3c2fb901,0x3c0befd7,0x3b4b51e1,0xb9e99fe7,0xbb0c3c79,0xbb1886ca, -0xbabffb7e,0x39db5d84,0x39f2a95e,0xb8ac6c96,0xb8e16898,0xb7c945ef,0x37a1e369,0x3764ae2e,0x37d42afa,0x36db0ad7,0x368a4c4d,0x3775f1ba,0xb8844949,0x381f6477,0x38202253,0x3a3ba10d,0x3a93c419,0x3b22543c,0x3b3cef5a,0x3b2462c0,0x3a65db43,0xbb4951fa,0xbba09b84,0xbb662869,0xba6b4eea, -0x3b1881bb,0x3bae49e2,0x3b2304de,0xbaf14b34,0xbbcc90d9,0xbbd0df4d,0xbb91d40e,0xbae91469,0xb9e345b0,0xb8585158,0xba1b990d,0x39866770,0x38a35890,0xb9820b1d,0x3829b336,0x38608dce,0x37955f58,0xb698ef1b,0xb6a2cefa,0xb73b660f,0x35314be9,0xb7116533,0x3747ace8,0x37872a00,0x3741245f, -0xb887f698,0x3a3cdba1,0x3bed3bcb,0x3c116600,0x3ba4a006,0x38ba997f,0xbbb6cef0,0x3b7c1816,0x3c056174,0x3bbd99b7,0x3bdbd3c1,0x3ab0883c,0xbbec92e4,0xbb836c2d,0x3a71f9e2,0x3bf094bc,0x3be63d32,0x3bada2bc,0x3b296dc5,0x3b08f1bd,0x3acf1913,0x3ab27feb,0x39849271,0xb609972e,0x392b0228, -0xb870068d,0xb7ded00a,0xb7c3cf97,0xb62b7a96,0x328d8356,0xb44bffe2,0x36da4831,0xb783f542,0x37dc2203,0xb8ec1a2d,0x392f49ef,0xb9c5f53c,0x3a43c071,0xbbe8361d,0xbcb749fe,0xbbf8ae43,0xba55845c,0xbb1e8736,0xbb67357a,0xbbc7e654,0xbc0b6c4a,0x3b0bfeec,0x3be0c01d,0x3ba8c2eb,0x3a362c17, -0xbb53b685,0xbb704db4,0xbb901758,0xbb80ec6c,0xbb5ef4b1,0xbb320d49,0xbb2435ce,0xbb01b5a7,0xbaa8da84,0xba4b459a,0x38a75c15,0x37ba53df,0x38452f58,0x37e844a0,0x377449b0,0x36c44a24,0x368bd99a,0xb4aa14db,0x371a8ea4,0x376598e3,0x38709329,0x387b98b6,0xb89ef5eb,0xb802d7b0,0x390de6ac, -0xb9e9a2a7,0xbacd664a,0xbb5cb1aa,0xbb8c9793,0xbb590448,0xbae20efb,0xba1ccb25,0xbb07721e,0xbb53ad8d,0xbb5238bf,0xbb288bf8,0xbac297f0,0xba3c8c81,0x37b044e0,0x3a6e654d,0x3b0dafe8,0x3b3781fe,0x3b51aebd,0x3b5578c6,0x3b213d52,0x3a73fac1,0xb92088a9,0xb89fe17e,0xb891327d,0xb881c625, -0xb7ca37a3,0xb7afa109,0xb6233e3d,0xb77b9f0d,0x3762d8be,0xb8cd60a2,0x381c737b,0xb9f883b6,0x3a58743d,0x38cd5812,0x3b3220fc,0x3b7014e8,0x3b53a7e9,0x3b5d5b40,0x3b1c6604,0x3aad1448,0xb940eb0d,0xba9676c9,0xbb18782d,0xbb2c0ddf,0xbb38da9b,0xbb2e9229,0xbb362a4d,0xbb508ac0,0xbb0c0357, -0xbab8c3ea,0xba71f0d7,0xb9711623,0x39e0bff1,0x3a8694d8,0x3aa9295f,0x3a924a72,0x39d0b805,0x390beae8,0x39379423,0x38e1095e,0x3859e80b,0x3807df0e,0x373ad9fc,0xb6bec26b,0x37c3a6d5,0x386324ce,0x39776ad6,0x397c9b18,0x3a7502b0,0x3ad9fc59,0xbacc8f8f,0xbabcc2b9,0xba9ed6f0,0xbab18096, -0xba9feda8,0xba8f7fb3,0xba83d277,0xba915c65,0xba769fb8,0xba777c44,0xba77736d,0xba37b9fd,0xb9cd37ee,0xb8d638a3,0xb7abd573,0x37699478,0x3886cccc,0x3977a6f1,0x39b4ab96,0x3a24a9ea,0x3928c425,0xb92397d9,0xb9972766,0xb9f5fa5a,0xb9e70fde,0xb93ac880,0xb8aa0802,0xb79941d4,0x381bc059, -0x38b7fb4a,0x378fd82e,0xb808002e,0xb9fe169b,0xba674784,0xbab2df65,0xbab5344d,0xbaf06933,0xbb0080d0,0xbaca5950,0xba94e8ca,0xba4c348f,0xba15a9f0,0xb993add5,0x3869e38c,0x39c75c1f,0x3a3d4838,0x3a87bd01,0x3aa6681f,0x3ac14cf2,0x3aea4806,0x3ae90e8d,0x3af2ec64,0x3af98a38,0x3b008640, -0x3b0212fb,0x3b0a0110,0x3b023f0e,0x3ac3c689,0x3a924d02,0x3a4ccf10,0x39e23870,0xb81417c2,0xb9905a13,0xb9f60b8c,0xba2f3013,0xba668e3d,0xba8de38a,0xba9fd5b5,0xbaaecc55,0xbab320ff,0xbac1a0b6,0xbad6cd75,0x39d5cbc0,0x3947e065,0x39b5f59a,0x39d50c9c,0x3a009901,0x3a244aeb,0x3a3ef139, -0x3a50cdc1,0x3a66e838,0x3a7e8d8c,0x3a8db8b8,0x3a9fcc4e,0x3ab172c4,0x3ac505cf,0x3ac2c492,0x3ac3ecab,0x3ac3d99a,0x3ac3e55d,0x3ac45632,0x3abff603,0x3ac930d1,0x3acbef56,0x3ae2de82,0x3a9dc195,0x3aacbd17,0x3ac56e81,0x3ab85ad7,0x3aa55734,0x3a94e18c,0x3a8493f1,0x3a6b8db8,0x3a43f450, -0x3a15ecf0,0x39c75968,0x3a2de293,0x39f8e49c,0x3ab744ed,0xba63a59d,0xba34215f,0xba278240,0xba0bf167,0xba0b6f74,0xba50ef5d,0xba076742,0xb9eb61d5,0xb9695ff1,0xba2527ae,0xba498a5e,0xba8b52f6,0xba191a7b,0xba12e21b,0xba50a7ca,0xba856db9,0xba8e4270,0xba811c52,0xba651544,0xba5ebaad, -0xba734192,0xba619f97,0xba671e1b,0xba45cd35,0xba6db4e1,0xba784ad1,0xba320776,0xba9367d4,0xba93d640,0xba42fca6,0xba396695,0xba2035d9,0xb9c3fcc3,0xba3ef47d,0xba4cda55,0xba5f0798,0xba4bd727,0xba32d6c5,0xba1db869,0xb9c5b1ef,0xb9ffd7d2,0xba956f34,0xb9e722d5,0xb8bb74f9,0x3a1547be, -0xba024fe3,0xba77de3c,0xbad7c71f,0xb9b4990f,0xb9e93668,0xbac00679,0xbb17540e,0xbb251ecc,0xbb02183f,0xbabe72bd,0xba92bf0a,0xbaa8070b,0xba81e308,0xba5e76e3,0xba16e236,0xbac1e55b,0xbac1ca05,0xba058be2,0xba89e7d0,0xba63dd22,0xb9c15382,0xb985f27a,0xb920bff3,0x396f160b,0xba17f592, -0xba762881,0xba3fb3ac,0xba420976,0xb99375cc,0xb91ff522,0x39c542e7,0x39db3757,0xba5cd564,0x3a0268be,0x3a6257c1,0x3b1cddf3,0x3887375a,0xba47f2aa,0xbb220b4d,0x399afd69,0x39e844c1,0xba82f61d,0xbb221713,0xbb412060,0xbb077dd9,0xbacafd51,0xba98c89e,0xbae5ed71,0xba9c8a92,0xba8c13d2, -0xba214662,0xba340c48,0xb7cc8ba5,0x395eb282,0x3924172c,0x3994aee5,0x38e00bea,0x38d1da63,0xb72137e2,0x38b6d886,0x371e5b27,0xb9cbec0e,0xba44113d,0xba196ca5,0xb9f6155b,0xb9e810be,0x39807a2a,0xb9e67824,0xbb1f3ef5,0xb9e410c3,0x3aaf2380,0x3b7c9adf,0x39fb0729,0xbad52f60,0xbb86c79f, -0x3986930a,0x397b99f9,0xbb5392ff,0xbbd10292,0xbbe26739,0xbb9e6591,0xbb36e87c,0xbae54426,0xbb121723,0xbac78c7c,0xba5bc2e6,0xb903ce60,0x396cca97,0x38c63f97,0xb8c27bf5,0xb8598d0b,0xb8de1934,0xb88163b4,0xb8027974,0xb643884e,0xb8339407,0x374511d6,0x3940b641,0xb933b171,0xba0c9549, -0x3acaccb6,0x3ad97a6d,0x3b2869d3,0x3b88b820,0x3c036ac1,0x3ba0e242,0x3b4d3b3e,0x3b2918c1,0x3b0b6c03,0x3b07478b,0x3b11aa9d,0x3b074ca2,0x3b83c83a,0x3bdb20ca,0x3c1c9a67,0x3c07cbd1,0x3b65628d,0x3a0bab0c,0xba9965be,0xbad36abd,0xba433a45,0x3a05c6ca,0x39072ea9,0xb8edaa5a,0xb847d35c, -0x3809dcd1,0x37f4b732,0x38387604,0x3808bc53,0x377e1744,0x3604209e,0x37df3cda,0xb802cdd7,0xb84bc278,0xb4c1f5eb,0x39f39065,0x3aa3e3a2,0x3aee8806,0x3b1a1c7a,0x3b2e05f2,0x3aca131c,0xbaed9dce,0xbb6d40c1,0xbb538b41,0xba3fb770,0x3af2e7a8,0x3b82e4cf,0x3b296b8e,0xba555080,0xbba6d484, -0xbbcd6f4a,0xbbadfd69,0xbb42947d,0xbabac207,0xba0bb6cc,0xb9923f5d,0x39e5ed59,0x380c530f,0xb92c302d,0x38b274b3,0x378578f3,0xb6c9ba60,0xb795cf06,0xb7a253be,0xb7a83c90,0xb6b7d07a,0xb73f3b61,0x35ba9ebe,0xb625982f,0x389338e5,0xb905604d,0x39bbfdc0,0x3bb65714,0x3bebe1b5,0x3b8819fb, -0xb90da3b5,0xbba9dd33,0x3b17e85e,0x3bd17e2e,0x3ba0ea84,0x3bce001f,0x3b0317ab,0xbbb0ef20,0xbb7d67b2,0xb81d1123,0x3bba27f2,0x3be74a37,0x3bcd561b,0x3b656389,0x3b34ff20,0x3aecb4ab,0x3a807bb0,0xb8e443f7,0xb7be0de2,0x38b751f9,0xb889d738,0xb6ab760d,0xb6aca32d,0x3732f4a7,0x3747e3ab, -0x37476d22,0x374d7655,0xb60a1b7f,0x37f8fb5e,0xb883a1ad,0x38c58642,0xb98ef55b,0x399a1a20,0xbbd0002b,0xbc9813d0,0xbbbdc640,0x387d494c,0xb9886bbe,0xba9d3ef6,0xbb8b6024,0xbc065ca0,0x3951bac0,0x3ba79417,0x3bce599a,0x3ad213d6,0xbb091d90,0xbb3cb0d1,0xbb6f5222,0xbb65f8ed,0xbb55ed6d, -0xbb334573,0xbb2acf5b,0xbb18e006,0xbacd3469,0xb9eaad92,0x3918cf80,0xb607d860,0x382b4da2,0xb5685463,0xb5d76748,0xb75daba7,0xb76fef58,0xb77b3121,0xb7136656,0xb78bbdba,0x37e0f1ce,0x37b25b96,0x38993356,0x398d9195,0xbb2f2328,0xbb837867,0xba8d5997,0xba9ac14a,0xbb367759,0xbb059dab, -0xba81412c,0xb99b7617,0xbac57026,0xbb31aaa8,0xbb340d89,0xbb1476f6,0xbaa7783f,0xba51d772,0xb70d2829,0x3a5eaba3,0x3b01f9f1,0x3b24c651,0x3b383a6b,0x3b3a3924,0x3af0c724,0x39eced00,0xb9715a39,0xb80480d6,0xb8639b2e,0xb72df140,0x363ed1ca,0x378c1a05,0x3803a6da,0x37939c50,0x382d79c0, -0xb7944d54,0x3890c7e0,0xb9939b0a,0x3983683f,0xba723b02,0x3b344e65,0x3b6a27ee,0x3b44e9ac,0x3b40e783,0x3b054118,0x3a972ca4,0xb928be71,0xba59cfe9,0xbb091d4d,0xbb2060a0,0xbb2e7029,0xbb2279a3,0xbb21fc16,0xbb2e9688,0xbad18f2e,0xba72b420,0xba0ac4e6,0x39503ef7,0x3a57822a,0x3ab7c853, -0x3ac0327b,0x3a883b97,0x39691668,0x390948a8,0x38bc0687,0x37b38c23,0xb68ad396,0xb829eb9d,0xb868467d,0xb88ad55a,0xb8148dce,0xb8bbbd00,0x38d46bce,0x38322fe2,0x3a234bde,0x3aca19b0,0xba85b375,0xba5dda91,0xba3bda2c,0xba648f8f,0xba5e64ea,0xba4ec08e,0xba41b5ad,0xba5ed91f,0xba4cf337, -0xba65b9a3,0xba82814e,0xba801d9a,0xba6a499c,0xba610bf6,0xba339a17,0xba0fed9c,0xb9d71998,0xb960e35e,0xb8dabde0,0x3963df92,0xb933bd63,0xb9c57939,0xb9c1b601,0xb9d05284,0xb93c1b9f,0xb6a7aa2e,0x37fda714,0x38f5b0af,0x391111b5,0x394019d6,0x390a1b0a,0x397dadd1,0xb8992c66,0xb9c6bc45, -0xba3642ed,0xba51fa27,0xbadd35b1,0xbad74af2,0xbaacbf82,0xba85eb20,0xba449313,0xba1ee13d,0xb9d5fe8b,0xb92da549,0x38a42997,0x39b4a6d4,0x3a1e25a9,0x3a4feb2d,0x3a7d7bb1,0x3a9d74a2,0x3aa4adf9,0x3ab0486a,0x3abbb903,0x3ac6d994,0x3ace5a74,0x3ae346bd,0x3ad4e2cc,0x3a87973d,0x3a27c6c1, -0x39904f15,0xb8292534,0xb9a8a8d6,0xb9de5d16,0xba039ce0,0xba26ca7c,0xba47a881,0xba754ae2,0xba90ccdb,0xbaa5b740,0xbab007d7,0xbac0c984,0xbac44e6b,0x38939f31,0xb8a05595,0x37358995,0x386e749a,0x38f359db,0x3963a7fb,0x399a9fd8,0x39b40920,0x39d1f320,0x39f1288d,0x3a0bfa23,0x3a26a4e3, -0x3a41fa7f,0x3a5fcd4a,0x3a6242ed,0x3a68f067,0x3a6d294c,0x3a72e0dd,0x3a792877,0x3a7514f5,0x3a866d05,0x3a8ad9c7,0x3aa0b6d8,0x3a3a06d6,0x3a500e3d,0x3a62f9db,0x3a43730e,0x3a1a7766,0x39fa823d,0x39c1a59b,0x399b4bcf,0x39532ca1,0x39009f15,0x36addeab,0x398b6077,0x38ef09f8,0x3a48233f, -0xba5f4c9a,0xba3704a4,0xba37ce4d,0xba154630,0xba1533c2,0xba4e4628,0xba1a362a,0xba086691,0xb97f1d71,0xba27477e,0xba4c1403,0xba9213bb,0xba240d26,0xba1988a1,0xba4d5bdb,0xba7889ba,0xba852dd1,0xba846657,0xba6489ef,0xba5b15b9,0xba625172,0xba53effb,0xba55f940,0xba3b478b,0xba5928be, -0xba6b18f1,0xba3b587f,0xba886a25,0xba8108c3,0xba2960b1,0xba249af6,0xba0a45f0,0xb981ee61,0xba344cba,0xba44f80d,0xba45d9e2,0xba43e10b,0xba273a2f,0xba3eb99b,0xb9f1062f,0xba11420b,0xba8de4dd,0xba1dee8b,0xb9941810,0x39ef2a82,0xba115c2e,0xba83df3a,0xbaeaf078,0xb9f3813c,0xb9eaae97, -0xbaac2b65,0xbb008a6d,0xbb11bfe3,0xbb04147e,0xbac39f2b,0xba95ffda,0xba9ae0aa,0xba60f145,0xba336d8b,0xba32b0aa,0xba9e44b6,0xba873a83,0xb996916a,0xba119932,0xb9fedac3,0xb941252d,0xb9184e93,0xb8b66145,0x39559432,0xb9e2f1f0,0xba5c2394,0xba2ee418,0xba2f4cfe,0xb9ab02d6,0xba04a317, -0x38e06593,0x38ff3296,0xba5f7bc8,0x38713d5a,0x39c0ba1a,0x3b08aea8,0xb8f552d9,0xba699101,0xbb34f91a,0xb8900111,0x395735f6,0xba80a443,0xbb075760,0xbb26e4cc,0xbb112ad5,0xbad15c88,0xba987000,0xbac58171,0xba780ccb,0xba59ee9c,0xb9eeb968,0xb8d59965,0x393fbb0c,0x392fd680,0x392fb3c9, -0x39587ac5,0x38bd5551,0x38a05fd1,0x3676bac0,0x36b1f9f7,0x38aa9417,0xb90b5e9f,0xba096e2e,0xba0aa7ab,0xb9f38fd0,0xba53b73e,0xb827ef9f,0xba0ee54a,0xbb0c4102,0xba65e29d,0x3a30eb51,0x3b5a6c02,0x392ff894,0xbafd3622,0xbb94c84b,0xb97b8a78,0x39598f8d,0xbb2f5ac1,0xbba8d84e,0xbbc2eeb6, -0xbba2ba3d,0xbb47060e,0xbaf70e80,0xbb04591b,0xba9e9a9d,0xb9f790cc,0x3866b68c,0x38f63576,0xb85b5022,0xb89a3582,0xb89f002e,0xb8acdd1d,0xb83b4d6d,0xb7f6a32c,0xb646da70,0xb6cce7eb,0xb7d35dab,0x38e9eab5,0x387da92f,0xb9b6a32a,0x3a88b0cc,0x3a913c16,0x3aa5e40f,0x3b234bf0,0x3bce5f18, -0x3b86a192,0x3b2ff844,0x3ac89cf6,0x3b0e30c5,0x3b195a31,0x3b010eda,0x3ab43e55,0x3b226888,0x3b957822,0x3bfde03e,0x3beea3a4,0x3b66af30,0x3aa1ae57,0xb9a179bb,0xba7b6dc5,0xb95377eb,0x39c1f017,0xb8100324,0xb8268c25,0x36f8fa0b,0x3829714f,0x3811c810,0x38217018,0x37c47527,0x37792ada, -0x35d97201,0x372a2e60,0xb69865d0,0xb7d0f718,0xb851e0a8,0x39409a24,0x3a7fa2c0,0x3aa474a7,0x3b1707f5,0x3b48edd3,0x3b1c9077,0xba05be35,0xbb1533df,0xbb33dcf8,0xba06fd55,0x3ac8a858,0x3b47fac8,0x3b417f9b,0x3a0624cc,0xbb5eb649,0xbbafc9d7,0xbbaf3529,0xbb67b715,0xbb090aab,0xba76dc7b, -0xb929da6d,0x39af05dc,0xb8b957df,0xb810a8d3,0x384e9252,0xb75480da,0xb77ce0ac,0xb7b0cca5,0xb79de8cf,0xb7823ab1,0xb70d82e9,0xb6eefe2f,0xb684ea78,0xb65e005d,0x378e1e02,0x384acfcc,0xb90b8a9d,0x3b82d1e2,0x3bbf36da,0x3b558d0c,0xb9d73234,0xbb9f2f54,0x3a2e7a8c,0x3b8eed6a,0x3b838d5f, -0x3bae5245,0x3b0d322c,0xbb7d46c3,0xbb720d95,0xba813580,0x3b793f02,0x3bd0c120,0x3bd4bbfa,0x3b882a00,0x3b529379,0x3b01f2d8,0x3a48af9b,0xb93ec089,0x382a42cc,0x37a46779,0xb818cf20,0x3700741d,0x36f5cb57,0x37777672,0x3763727d,0x375a377b,0x374397af,0x36f69cdd,0x37879233,0xb76e7bd8, -0x37e452be,0xb89bca2b,0xb95a7ef6,0xbb9e7dc0,0xbc6413eb,0xbb9f5c03,0xb985663b,0x3a92c9e5,0x39341bab,0xbb3674fc,0xbbe0f47f,0xbac0e5d1,0x3b4205c4,0x3bcca4a3,0x3b071eea,0xba9198eb,0xbb1970de,0xbb44e61d,0xbb493770,0xbb494645,0xbb2b574c,0xbb210352,0xbb17b92b,0xbab55dba,0xb8d0e81c, -0x38c9b6f7,0xb637809f,0x37462b2e,0xb7573291,0xb75aaf7c,0xb7926092,0xb797acbe,0xb7a48dae,0xb78b30ae,0xb7cfba8c,0x370486af,0xb78de606,0x383a59a9,0x3a179c81,0xbb8109d9,0xbbcb06ed,0xb925bf92,0x3a8735ed,0xba505bdc,0xb9b7eb03,0x3854b389,0x38935abd,0xba80980c,0xbb0c0a8c,0xbb0d8292, -0xbb09138a,0xbaada2b7,0xba87213a,0xb9649086,0x3a14d81f,0x3ac70665,0x3b0600ef,0x3b180ce0,0x3b1f9c66,0x3aba1dcd,0x38ca66d0,0xb93feee3,0x37717897,0xb7f9d63d,0x37cfa257,0x379fd5a1,0x37ff4cc8,0x38185c35,0x380a4d83,0x3845f17b,0x37c2e01e,0x384c9076,0xb8c55223,0x392d2f39,0xba7ec9bf, -0x3b2a2f29,0x3b44ead4,0x3b139bf3,0x3b017431,0x3aaec687,0x3a36cf2c,0xb9a33a09,0xba2b1438,0xbae1fd97,0xbb070771,0xbb17421b,0xbb0d8af5,0xbb081f5b,0xbb078897,0xba887c29,0xb9e15026,0xb8fd6f35,0x3a0d62c7,0x3a87a38e,0x3ac9b768,0x3abf1e05,0x3a4f453c,0x382b14cc,0x38ecb3a4,0xb4fbcd9e, -0xb7f3c1f4,0xb843a2d6,0xb8807d88,0xb89adfbf,0xb8a79fe8,0xb8a3d760,0xb8d4768b,0xb7829777,0xb6baa18e,0x38ffc171,0x3a98aca4,0xba0416f6,0xb973c8fd,0xb9644899,0xb9c5b51d,0xb9fe9962,0xba05b4d5,0xba0337e5,0xba1ed63f,0xba2ca520,0xba58290b,0xba8774ce,0xba91abd3,0xba961ddf,0xbaa36c29, -0xba899f8e,0xba659eca,0xba36a149,0xba0e0233,0xb9f6c83d,0xb95a7f64,0xb9ef3bee,0xb9f8daa4,0xb9ac0d94,0xb93d4ebd,0x379be817,0x38b5aafe,0x38db5596,0x391b1fd2,0x39382884,0x3942d176,0x39456908,0x396df923,0x392b5062,0xb872865e,0xb9294707,0xb97834b0,0xbab43e65,0xbaa390db,0xba88f50b, -0xba628801,0xba34edbb,0xba1a5c56,0xb9fb0d6f,0xb9ade085,0xb92f5009,0x3788f780,0x394f9213,0x39abca44,0x39ea6b2a,0x3a1c4f40,0x3a33e6f9,0x3a4b120f,0x3a659e12,0x3a7eadb9,0x3a89a22d,0x3aa0554c,0x3a98d38c,0x3a14a13d,0x395bc1f5,0xb8c7ae86,0xb986a258,0xb9a64461,0xb9b85686,0xb9dda1c4, -0xb9fc77c7,0xba0dd1f2,0xba1140a9,0xba40e01b,0xba6f6900,0xba8c3534,0xbaa14b8f,0xbaa044b7,0xb951bc8b,0xb98a36ab,0xb96e20c4,0xb949d7b8,0xb9212eb4,0xb8c845a3,0xb83c8ad8,0xb775c337,0x3750a7e3,0x382ba70e,0x38a9d042,0x39137fc7,0x395929c9,0x3990886b,0x399fa888,0x39b1b981,0x39bf4af2, -0x39d17ed9,0x39e407a6,0x39e1812c,0x3a06d490,0x3a11f6b5,0x3a388d60,0x398af002,0x399529b2,0x39851e4f,0x3922509c,0x38645c64,0xb80b5925,0xb906aa9d,0xb969cea2,0xb98936a2,0xb988d6db,0xb9974b2b,0xb8ca1491,0xb93d06f8,0x396ddc24,0xba3ff6ba,0xba2b329a,0xba293a87,0xba095b0b,0xba066de5, -0xba2ec4ab,0xba0cc3f1,0xb9f8b76f,0xb948e1f1,0xba0eef02,0xba30f102,0xba8290a2,0xba14ca5c,0xba08bbde,0xba2fc458,0xba4a0815,0xba5a07d8,0xba6a88ea,0xba46bafc,0xba3cd8bc,0xba355cd3,0xba3378ce,0xba377bae,0xba3d1a8a,0xba40eebc,0xba5ea054,0xba3eddef,0xba743732,0xba6303c8,0xba1cc02d, -0xba19eeae,0xba00e03d,0xb9734b36,0xba299120,0xba2eae96,0xba3afc88,0xba370ce3,0xba25e95c,0xba3fb230,0xb9ef7b2c,0xba06790d,0xba65c1b3,0xba15a797,0xb99d7aa8,0x39d2bd5a,0xb9fe1ee8,0xba6c5fda,0xbad86706,0xba00f803,0xb9d7a09e,0xba8d17fe,0xbac4640f,0xbae70598,0xbaec9249,0xbab29971, -0xba87edbc,0xba79e00a,0xba325932,0xba06b88b,0xba3c7143,0xba4b8d07,0xba01e828,0xb82732c9,0xb90f4172,0xb8de065b,0x35e8b6c2,0xb6b84ab0,0xb7b83651,0x393259cf,0xb97d1671,0xba2c5568,0xba275d17,0xba124930,0xb9d0ab9e,0xba412b1a,0xb8712173,0xb83b5243,0xba2d3f5c,0xb8de63d5,0x3908219e, -0x3aea9cd0,0xb900e1ac,0xba4f6a60,0xbb2649d4,0xb98fbad5,0x38697dbb,0xba5896ac,0xbac2cdf3,0xbafc4371,0xbb04c1e8,0xbabd1f5a,0xba8671ae,0xba92bf98,0xba262d61,0xba10bf0f,0xb90b7779,0x394c57aa,0x3924e816,0x38944a2f,0x3884faed,0x387e04fb,0x3723df01,0x37c642b1,0x363a4464,0xb7e32cf2, -0x38e01189,0x38f06700,0xb97ac286,0xb9f69ced,0xb9fd8fc5,0xba888f64,0xb95010c9,0xba02eb4d,0xbace0d00,0xba652607,0x39c8d2a7,0x3b390529,0x38944ee2,0xbaee695c,0xbb899a19,0xba109342,0x38ca400c,0xbb07d221,0xbb761a24,0xbb97b96d,0xbb947d56,0xbb4120a6,0xbaf1515e,0xbad30207,0xba52d11b, -0xb911cde4,0x38ce0321,0xb84c2fee,0xb8a14acd,0xb818b433,0xb804d4ec,0xb7ef526f,0xb7371bca,0xb7447b76,0x339da332,0x366cd37e,0xb850aa3f,0xb7da98fb,0x3916aa80,0xb9018b0b,0x3a23c5b1,0x3a7466bc,0x3a1b5c01,0x3ac16e3e,0x3b9932d9,0x3b53b385,0x3b0b9a68,0x3a1b92a0,0x3b0d5423,0x3b249dd7, -0x3adeff07,0x3a82ea57,0x3ac3d3da,0x3b48dd08,0x3bc50ea5,0x3bc87a87,0x3b68032b,0x3af601a7,0x3a0743fd,0xb97a997e,0x38f756fc,0x39411002,0xb8842aea,0x3788195f,0x380f14a8,0x37ad526f,0x378194ac,0x37685105,0x36fd3822,0x36b06bed,0x361f77b5,0xb5c7c99f,0x37f1808b,0xb7380cad,0xb88488e4, -0x38b22cd8,0x3a1981f4,0x3a86a3dc,0x3aecad94,0x3b352436,0x3b1e7385,0x3975e499,0xbaa8cbbe,0xbb107b7c,0xba00220d,0x3a805c87,0x3b094850,0x3b37362f,0x3a99e066,0xbb0a50a6,0xbb8dfe69,0xbba25b42,0xbb77d6b4,0xbb258d27,0xbaac9362,0xb96d95a6,0x390bc239,0xb8c9b5f1,0x37adbbc1,0xb5adf1d4, -0xb7a61fff,0xb72b2219,0xb71a6d05,0xb7031f3d,0xb6929813,0xb6d89c39,0x3635d556,0xb7863332,0x37730bb8,0xb8773874,0x3918c6a4,0xb995ea29,0x3b1a6bcf,0x3b86fef4,0x3b1169c1,0xba014ff3,0xbb82ba18,0xba224823,0x3b1a03e1,0x3b42986b,0x3b85e023,0x3b03127d,0xbb205eca,0xbb573725,0xbad1273a, -0x3b0cdd69,0x3ba6ebd0,0x3bbf79e0,0x3b8a0f26,0x3b53dcaa,0x3b00c2d3,0x3a1f2d23,0xb8f74620,0x38aee9d7,0xb8409178,0x37463fd0,0x36cdb780,0x3729a02e,0x36c57b09,0x36d5b938,0x36baef47,0x369d051b,0x36d92314,0x36a417cc,0x379881da,0xb79700d3,0x38a945b7,0xb9f8bcab,0xbb497f54,0xbc1ae71f, -0xbb7cf31d,0xba196e2e,0x3b18e038,0x3a6526a5,0xbae02a54,0xbba2f9c4,0xbb19e80e,0x3aa2b38a,0x3bb6539a,0x3b218bc2,0xb72a8ea8,0xbadd72cf,0xbb0ff2d8,0xbb1ecbd5,0xbb2c94a8,0xbb1447fb,0xbb07237d,0xbb049487,0xba7c28f7,0x391600a6,0xb4c34220,0x36ea6fef,0xb7546d0f,0xb704bd2e,0xb719d791, -0xb6fa0078,0xb71d32b0,0xb702673f,0xb76aaab1,0xb6f9a148,0xb818010a,0x3841a1d5,0xb94077ff,0x3a555089,0xbb72df03,0xbbd373a5,0x3a96ad17,0x3b41eddc,0x3aaaea58,0x3aa3f217,0x3a87ca31,0x39efa382,0xba141922,0xbad60ed6,0xbad7f87f,0xbaf0ae4e,0xbaa49727,0xba8e9481,0xb99b842b,0x39b902f5, -0x3a87a608,0x3ac825ab,0x3ae94ebd,0x3b0258f3,0x3a7eabb4,0xb923c925,0xb882729f,0x3778b667,0x36cadde4,0x37ac721d,0x37485e07,0x378679fe,0x37811971,0x37a4d524,0x37a81f12,0x38104c5c,0x37e70407,0x37ec2b1a,0xb61e188f,0xb8c026c5,0x3b0bda4a,0x3b166e15,0x3ab1d30d,0x3a62da4f,0x39ec9831, -0x38265396,0xba170ba2,0xba16f2ef,0xbaab487b,0xbacbdbe9,0xbaeb0eb3,0xbadbe731,0xbacc33b7,0xbab6c8f2,0xba0b1907,0xb7c40a97,0x394e913d,0x3a3edf26,0x3a8c2921,0x3abf7989,0x3aa67c8a,0x39df028c,0x361b8359,0x37c9278f,0xb8388619,0xb7dbdb65,0xb800f342,0xb7ecfff4,0xb811d4cf,0xb8183eab, -0xb84b82ed,0xb873dce8,0xb8a9a79d,0xb80aca8a,0xb8cd8805,0x3a02e095,0xb84e9b49,0x3988c667,0x3969a401,0x38b87d83,0xb8cf3ca2,0xb94fc3e7,0xb9817639,0xb9c2da65,0xba0d29f8,0xba460f73,0xba853966,0xba925f1e,0xba9c8f44,0xbaaf9dad,0xba98d576,0xba841d5c,0xba5d4ea0,0xba42049c,0xba359901, -0xba0aca81,0xba2195d6,0xb9ebcc48,0xb91bf5b8,0x381ab946,0x38897b37,0x388f2fc0,0x38729c44,0x388355f7,0x3894c233,0x38a12a13,0x38d39521,0x3903da02,0x39368fff,0x391352a5,0x38a8fb5d,0x391bb61e,0xba89fc93,0xba6f43db,0xba56950b,0xba423e81,0xba2ad674,0xba182264,0xba0b47a6,0xb9edd351, -0xb9b6a316,0xb975e359,0xb90681f1,0xb87d0762,0xb67f02a2,0x3882706b,0x3925eea3,0x3979f857,0x39b22f0b,0x39e0e4cd,0x3a064797,0x3a30b006,0x3a2a68de,0x390dccae,0xb90b99f5,0xb9874ad3,0xb967b5db,0xb92432aa,0xb90c203c,0xb92d5328,0xb935353a,0xb950af3c,0xb93d72b6,0xb9a60290,0xb9f4e59b, -0xba3a3c00,0xba64cd10,0xba6e02c5,0xb9b3bcf8,0xb9c237dd,0xb9bf0515,0xb9b10917,0xb9a5479e,0xb999ecb8,0xb98c94f6,0xb98533e8,0xb984f682,0xb98371f2,0xb977b9c3,0xb95cc345,0xb9371c8e,0xb915d56b,0xb8d9b9e9,0xb8911caa,0xb82f3642,0xb644d03e,0x380f7316,0x381f08df,0x390078c7,0x392fb34f, -0x398d85d1,0xb8b1c28a,0xb8ee0f92,0xb933cf57,0xb9820a49,0xb9a2e6a8,0xb9c19445,0xb9e2e32c,0xba025570,0xba05caa2,0xba00ea39,0xb9f3980f,0xb9aeabf2,0xb9b92099,0xb921dd46,0xba1dc477,0xba0f21a7,0xba13faeb,0xb9ec48c7,0xb9e2f694,0xba0781bc,0xb9f355ef,0xb9dd5205,0xb93ca3a5,0xb9f57204, -0xba16701b,0xba596058,0xba043431,0xb9f16211,0xba11a5af,0xba1dc96e,0xba2a394d,0xba4333f7,0xba24382c,0xba19c40a,0xba0db6d1,0xba067463,0xba0357a5,0xba2df082,0xba1c5995,0xba209049,0xba093911,0xba23e318,0xba15e285,0xb9d25bd4,0xb9d2411c,0xb9ae7ef2,0xb90673c3,0xb9fc801f,0xba10739d, -0xba1e14e0,0xba0f0798,0xba06efc9,0xba293024,0xb9cbf764,0xb9d49869,0xba1e963a,0xb9ff877b,0xb9a035f5,0x39892380,0xb9f01768,0xba5172a5,0xbab5dff8,0xba054077,0xb9d32c4c,0xba5f3466,0xba8dcab4,0xbaab8319,0xbac391cd,0xba976d6a,0xba66f1c6,0xba3b4c84,0xb9e6644d,0xb9c9bfd8,0xba037238, -0xb9831015,0xb8d5c7e5,0x3874ca99,0x37007e15,0x37a286d6,0x381eb3c0,0x37f2d0bf,0x3770b79a,0x389fd4e4,0xb80dae13,0xb9950643,0xb9f0a00e,0xb9ebbea9,0xb9c20a1b,0xba4bfaf1,0xb903c928,0xb8cbe1ad,0xb9bfae7a,0xb941b2ae,0xb89a441a,0x3aaa3959,0xb974ad8e,0xba44f526,0xbb0a85b3,0xb9f04f00, -0xb90a9503,0xba357bf7,0xba8355ce,0xbab13b8d,0xbadeafbb,0xba9d777b,0xba5ee199,0xba402f61,0xb9b30139,0xb935fcc1,0x38bbb174,0x38ec97eb,0x382f26b6,0x36929791,0x378bae03,0x37a7433c,0x366b69ad,0x36783ce4,0x362f3884,0xb7e78932,0x38022809,0x38c89f62,0x3817c4e4,0xb96f185d,0xb99b198e, -0xba847b73,0xb9432144,0xb9959fc9,0xba5bda0c,0xba361c2b,0x391a4396,0x3b0775fb,0xb92edfca,0xbadd0519,0xbb64be56,0xba49c83f,0xb8d925df,0xbac8d1e8,0xbb249f8a,0xbb595f4a,0xbb768f32,0xbb29718e,0xbad7ca17,0xba95911c,0xb9c8a05c,0x38222590,0xb739c880,0xb86b8e26,0xb7848897,0xb6b7533b, -0xb725180d,0xb736da48,0xb6084d18,0xb6784982,0x353843de,0x37282a39,0xb73a9cd4,0xb84dc985,0x37b1f1cb,0x381113b5,0x39c38281,0x3a1e16d2,0xb879c7ce,0x3a0901ab,0x3b42ab6e,0x3b0c9212,0x3ab76a6d,0xb9629adf,0x3af366cb,0x3b18ab7e,0x3aabf621,0x3a204e13,0x3a34ef05,0x3aed646e,0x3b8828e0, -0x3b96de3b,0x3b50ebb9,0x3b0897cf,0x3a82e6e0,0x39ab0978,0x3983d502,0xb76374a2,0x34d6d2b3,0x37e24e04,0x3721dd20,0x3634a05d,0x36c10a5a,0x36a403b3,0x3628a997,0x35882e2c,0x35dfaa29,0xb6e82966,0x374a79d4,0x37773217,0x375c76df,0xb8c222dd,0x39217809,0x3a48d2d5,0x3ab0f0e4,0x3b1a6684, -0x3b1484b1,0x3a57761c,0xb9d7bee8,0xbad5fd61,0xb9c9ecc0,0x3a1a66b0,0x3aaf92c6,0x3b1bea96,0x3ab4dc69,0xba9e9e5d,0xbb5792dc,0xbb8a8c6f,0xbb6ecb68,0xbb2e4cad,0xbacd07d4,0xb9de3f2e,0xb7372d01,0xb8523ff8,0x37e11536,0xb7b06a0a,0xb63aa336,0xb6505062,0xb6322773,0xb674d0b2,0xb54a558a, -0xb6872315,0x369f8b1b,0xb737be5e,0x37acf6c9,0xb887d898,0x38e90f6e,0xb932bae1,0x3a80c852,0x3b2bf33a,0x3aaf087e,0xba0b79dc,0xbb4905fa,0xbab917a1,0x3a4fcadd,0x3b0492d4,0x3b3ceaa5,0x3ade58eb,0xbaacc224,0xbb302929,0xbaef6eca,0x3a61b64a,0x3b6a6d26,0x3b98015d,0x3b79257c,0x3b3d534d, -0x3ae8d746,0x3a00fe1d,0x37752516,0x380724e5,0xb7cce778,0x37a23247,0xb54bf0e9,0x368c2e37,0x35edc35c,0x36502237,0x3629cc51,0x35e37d73,0x366624e1,0xb66aa2f5,0x3798c580,0xb801e11b,0x3902c770,0xb9bccfc2,0xba946796,0xbbc46b29,0xbb4cd02b,0xba7adfe0,0x3b358cd8,0x3a877de6,0xba851986, -0xbb54441f,0xbb2cb97e,0xb89e1564,0x3b8a26fb,0x3b2415e5,0x3a5df0f1,0xba860a22,0xbabafd84,0xbae523c6,0xbb0529b2,0xbae75306,0xbaca4505,0xbacab831,0xb9e8c358,0x391acaeb,0xb811f5b0,0x3683af04,0xb71cbdff,0xb58aad49,0xb6a0bd0c,0xb653a2b4,0xb6c5821f,0xb593ea09,0xb736161a,0x374cf11a, -0xb83a7be5,0x38a74713,0xb975986a,0x3a17b424,0xbb0e15b4,0xbbaaf110,0x3b0ec35d,0x3b80656f,0x3b3b7454,0x3b1d83db,0x3aed6f03,0x3a5a96d7,0xb9228145,0xba91064e,0xba96b1a9,0xbacb6a1c,0xba9af141,0xba88f9b1,0xb9c5983f,0x38e4e34b,0x3a0deae0,0x3a83c2ed,0x3aa1dd62,0x3ac78e57,0x3a0b8559, -0xb9664c39,0x38404996,0x35ae7acd,0x3737d25c,0x369b14fd,0x36e35ca2,0x370e5761,0x36e3112b,0x37521517,0xb427de81,0x37d50ea8,0xb7c2be44,0x38c8d479,0xb9063a6c,0x39df468c,0x3ac0edb8,0x3ac0c5c2,0x39e4bc60,0xb910140d,0xb9b35f3c,0xba1a3355,0xba6664cc,0xba33ad3e,0xba8132f1,0xba8c80aa, -0xbaa0a34b,0xba9933db,0xba8c21f9,0xba5c92b7,0xb951d911,0x395e82ba,0x39cbca4a,0x3a4fa4f0,0x3a7e8309,0x3aa3bf2e,0x3a6da433,0x38c7476a,0xb7746281,0xb7e27f99,0xb7486661,0xb74cb99c,0xb7555039,0xb780503c,0xb797a83b,0xb7810445,0xb7adb364,0xb6f3d116,0xb8315012,0xb73a1ad0,0xb8c51684, -0xb8c1ad08,0x39980f18,0x3a241f24,0x3a0edd4c,0x39e8bb39,0x3968f6ea,0x384e8fb4,0xb891b74b,0xb97bc772,0xb9f57f58,0xba38e4f4,0xba7f3725,0xba870cf8,0xba8da8cd,0xba9c72ca,0xba8a85ef,0xba753770,0xba53f2c2,0xba44c685,0xba39fa48,0xba2763c1,0xba175776,0xb9838889,0x387f3624,0x385f1d97, -0x38015e9f,0x37a53fbf,0x37c7067a,0x37f00277,0x380b0a18,0x38050017,0x3800f0a4,0x37f1881d,0x387247d9,0x38de87ae,0x38c15819,0x398792b8,0xba4a27a4,0xba27fb28,0xba25b683,0xba27861f,0xba21eecd,0xba17e5b2,0xba171e61,0xba1181fd,0xba00871c,0xb9dec6ed,0xb9c48f6b,0xb9b893c0,0xb9b5d53f, -0xb9b325e3,0xb9879e02,0xb9499e36,0xb8d5213e,0xb7ead95e,0x385e12ac,0x393b9fc3,0x39488317,0xb92c035f,0xb97aba26,0xb91e72ad,0xb87a0e1c,0xb79f588a,0xb797eb66,0xb7ac25cd,0xb7a98bf7,0xb7b674c9,0xb7b7efe4,0xb80604b4,0xb8ba6173,0xb9a27428,0xb9f3c6cb,0xba0b9f47,0xb9d6f291,0xb9cccc18, -0xb9d7e497,0xb9cf1448,0xb9cc17ee,0xb9cf0da8,0xb9ccc086,0xb9cdbfa6,0xb9d61d98,0xb9ddf7cf,0xb9dfcb6e,0xb9e04b85,0xb9da0d1a,0xb9d7c49c,0xb9c218ae,0xb9b23db0,0xb9a54be5,0xb9927422,0xb9819f6c,0xb9770021,0xb9305059,0xb8fa1bdd,0xb8c3ee47,0xb9a4a9cd,0xb9a56aff,0xb9b25a37,0xb9c8168d, -0xb9d8028c,0xb9e8f66a,0xb9f7ed09,0xba049dfa,0xba0830c7,0xba086ac0,0xba034247,0xb9fc1f99,0xb9ef32be,0xb9cba19d,0xb9ea8e52,0xb9d8b3ba,0xb9e4e2d8,0xb9b7a3e4,0xb9acf4e1,0xb9bdfb14,0xb9b9fe77,0xb9ad6eea,0xb92447bf,0xb9bb0529,0xb9e1526c,0xba1d163b,0xb9ced687,0xb9bda834,0xb9d79167, -0xb9dddf9f,0xb9ee4422,0xba0ed465,0xb9f03356,0xb9dfb057,0xb9c57470,0xb9b87377,0xb9c7f30c,0xba1e7463,0xb9d156f0,0xb9cb006e,0xb9a57b84,0xb9b83004,0xb9ab91c4,0xb9853ab2,0xb987d746,0xb96c107d,0xb8f10c72,0xb9adf5f3,0xb9d1e6ae,0xba0abafd,0xb9e2ec86,0xb9db1971,0xba03e40b,0xb9ab0886, -0xb9a6714e,0xb9ce0423,0xb9c60ef4,0xb98d6ff1,0x38f9146b,0xb9c5786d,0xba2095f8,0xba82e08c,0xb9e64212,0xb9b5c2b3,0xba1d412b,0xba368629,0xba6126fc,0xba8bed89,0xba5f348a,0xba2b62fb,0xb9f65b23,0xb99abdcc,0xb9723771,0xb94a1b31,0x37b0459f,0x38a7c23c,0x38dc5049,0x38ad3535,0x38b704b0, -0x38a41888,0x38a1dc83,0x3868d4d4,0x38978c55,0x387ce87c,0xb7234bd8,0xb952c03a,0xb9a39c8b,0xb99b2035,0xba378e38,0xb93c44d3,0xb918d0fa,0xb93a720b,0xb94b3e26,0xb928a66b,0x3a513449,0xb97e6ce9,0xba1aa12b,0xbac22731,0xb9f97887,0xb968eb44,0xba054fc5,0xba1b4e30,0xba59629a,0xba9f9d63, -0xba60d236,0xba1db7fb,0xb9dc9e50,0xb910d4cb,0x38052271,0x38a0e0af,0x38042ef7,0xb7a60760,0xb7e685f0,0xb7dfcb51,0xb7d33e23,0xb7eb4101,0xb7b15564,0xb7922274,0xb7c0eb90,0xb6eaaee5,0x37f21020,0x38d7bfbe,0xb75d3a88,0xb893cb4f,0xba6b5d5b,0xb98a9cef,0xb981c21c,0xb9d7ae6b,0xba089447, -0xb7fd7aa7,0x3aa5ab9b,0xb98d0b31,0xbaaaabf8,0xbb20a8d9,0xba43a7f4,0xb96a9e60,0xba82f69b,0xbabdea16,0xbb06f6b2,0xbb2f2e4c,0xbafc719c,0xbaa516f0,0xba324df4,0xb8f3fe06,0x383d436d,0xb82b7d8e,0xb73ac102,0x36874cbc,0x375092e9,0x373d05e7,0x3733e583,0x373e9da1,0x3716f330,0x3701ff9b, -0x372bf751,0x355e470c,0xb78ff7d8,0xb8246a43,0x38865b2b,0x3895a348,0x39a65af2,0xb9703210,0x38d6f298,0x3add9407,0x3aafa570,0x3a6e38d9,0xb9f9c7d2,0x3abb6ad0,0x3aef6765,0x3a620127,0x39a3cac1,0x394a82c6,0x3a6a8145,0x3b1e8ca8,0x3b4228fa,0x3b2434c5,0x3af41183,0x3a92a2d7,0x3a1e236f, -0x38bd8a82,0xb7afaf6b,0x379cc1d1,0x36acacf0,0xb5da536f,0xb6bbf73d,0xb6b7be20,0xb6aaf624,0xb6b55643,0xb688bab6,0xb6984cf3,0xb64a0ade,0xb676b593,0x376038a3,0xb64179e1,0x36599d93,0xb9012f48,0x3a1fff8e,0x3a78f1e0,0x3adea8d9,0x3ae7a5c8,0x3a7aac2c,0x38b86405,0xba8fcc71,0xb9a92440, -0x398e0bb1,0x3a546642,0x3ae84907,0x3aa23d16,0xba0a0be5,0xbb09a107,0xbb446b66,0xbb3ae82e,0xbb13e25f,0xbabed2db,0xba109a82,0xb7abe764,0x3713bb1c,0xb6b5db82,0xb6c62430,0x35f08975,0x362c4e54,0x36503fc1,0x3638a3fb,0x364ca6cb,0x3608b6d9,0x36565428,0x3502f20d,0x366b0f23,0xb7186067, -0xb706bb86,0x3810bc31,0x390eecb7,0x3aadf915,0x3a34fe06,0xb9e831bb,0xbb04572a,0xbacf23ba,0xb9345def,0x3aa09629,0x3ae94c84,0x3aa06fef,0xba057b11,0xbaf58585,0xbaca2750,0x39447198,0x3b0e4f9c,0x3b4e303f,0x3b3cde83,0x3b11688f,0x3ab9d138,0x39db00d2,0x378b73df,0xb5c0c827,0xb69d07f2, -0x3714c652,0xb67ef106,0xb5193cf6,0xb63f0613,0xb5f9dcf1,0xb6173f09,0xb60c857b,0xb5a4bdfa,0xb681c347,0x36ce41b3,0xb7727e51,0x386552cc,0xb8f8e8ed,0x3913523c,0xbb5d92b4,0xbb0faa59,0xba6ac689,0x3b2264ce,0x3a80db44,0xb9dea0eb,0xbae3cb58,0xbb0f5dd9,0xba28c051,0x3b3239b8,0x3b0d5c26, -0x3aa46829,0xb9c30b4d,0xba3e315c,0xba8a553d,0xbaa9d521,0xba95ad22,0xba7e86a5,0xba739891,0xb8d867aa,0x389d777d,0xb8029f56,0x36b020e6,0xb5f421a7,0x36676407,0x361077eb,0x364a60bc,0x3611ecd9,0x367e940a,0xb4b06610,0x37121d25,0xb76c866a,0x37eeeaf4,0xb88fec7b,0x38cc72f8,0xba150599, -0xbb450013,0x3b1f3dd4,0x3b707632,0x3b583060,0x3b2f4c45,0x3b051d73,0x3a8dfd9a,0x39350bd5,0xba22b7fe,0xba3f0d49,0xba95405f,0xba795175,0xba6489b6,0xb9c6bace,0xb8550c41,0x3957fe44,0x3a1b58fa,0x3a44f745,0x3a89d704,0x38b81b82,0xb8d2b2e7,0x3852fce5,0xb74938c3,0x36a6f290,0xb6f51fb7, -0xb65cce0b,0xb6a68aff,0xb6b415c2,0xb6609c85,0xb6f6beb5,0x36139caf,0xb789a4d8,0x3838252f,0xb8b7b51a,0x398494db,0x3a1efb0a,0x3a4a55d8,0xb95433e6,0xba32cd9e,0xba488ca4,0xba67fbe9,0xba76f883,0xba2f2378,0xba396855,0xba31a672,0xba3f2d8f,0xba373502,0xba23d415,0xb9dc7457,0xb6fd1b65, -0x399a4f4e,0x39e5a7ed,0x3a3a6a9e,0x3a419f55,0x3a7c6984,0x39e3ac6a,0xb8949aac,0x3722774b,0xb7d9152a,0x37504460,0x36c264b8,0x37367ae0,0x3714dd6e,0x373a486b,0x371b2d8b,0x3722eca9,0x37085fe2,0x371eb474,0xb811d17c,0x3804be71,0xb95a343d,0x39b7adfc,0x3a47644b,0x3a2375ce,0x3a184a4c, -0x39c4c0a8,0x394f68f7,0x384e26df,0xb90392eb,0xb9b60677,0xba125851,0xba4e10a4,0xba52f21b,0xba57d847,0xba68528c,0xba4f03c5,0xba392190,0xba21e40f,0xba1a8c81,0xba100ff6,0xba0f977d,0xb9c7f629,0x379f31d4,0x3888b4b2,0x3713570b,0xb76c6be0,0xb7d00eae,0xb7b087f2,0xb7c93aaf,0xb7d70b9b, -0xb7cae0ac,0xb7a48a9b,0xb7e5e86f,0xb73d8f11,0x37c4628f,0x38aa0b46,0x387b7f2b,0xb9e85634,0xb9db9516,0xb9e0a21e,0xb9f8d7af,0xb9fe4c2f,0xb9f5d818,0xb9fd6c6f,0xba00152b,0xb9ee9aa0,0xb9de2f6f,0xb9d7a454,0xb9da115e,0xb9e71640,0xb9f68b5b,0xb9d9da9e,0xb9c3c39b,0xb9a2997e,0xb98a2a43, -0xb9530fe9,0xb8f8e32b,0xb91244ba,0xb983cc88,0xb8e20510,0x35b4fa41,0x3897d520,0x38a42100,0x3890ab84,0x389ceea2,0x3896eb7b,0x38a2a5d3,0x3892f532,0x38c5126b,0x389e96ae,0xb78ef521,0xb92db978,0xb9452894,0xb9ca2092,0xb9a615a1,0xb9b6ddd6,0xb9b39a3d,0xb9b4dbc1,0xb9bd9287,0xb9c09d6e, -0xb9c4e81c,0xb9d07776,0xb9dbd9af,0xb9e20fb1,0xb9e99be7,0xb9eab213,0xb9efa8a1,0xb9dea8aa,0xb9d3ee1d,0xb9cb3fb7,0xb9bd7f0b,0xb9b433a9,0xb9aaf760,0xb990ff47,0xb9936fe6,0xb9ab11b3,0xb9b36630,0xb9a3944e,0xb99b0aca,0xb9a2d4a2,0xb9a65953,0xb9ab37bb,0xb9aef3e7,0xb9b5557f,0xb9b6618f, -0xb9c23ff8,0xb9c9c0e2,0xb9f9e1eb,0xb9e67ffd,0xb9e4b271,0xb9a25898,0xb99b8946,0xb99caccf,0xb987e433,0xb978bed9,0xb978e698,0xb9870605,0xb983a4d4,0xb9231c59,0xb98b83f2,0xb9a0318b,0xb9cc8d1c,0xb998d3e0,0xb98ea930,0xb996d1f3,0xb995483f,0xb99d643f,0xb9bcaa13,0xb9a26c6c,0xb9987be8, -0xb982f6fc,0xb9776406,0xb98ac500,0xb9c9b760,0xb8316401,0xb886669f,0xb86ee8eb,0xb88edad7,0xb8789122,0xb82a3378,0xb82cd5b6,0xb809deeb,0x3543d7dd,0xb87db798,0xb8751b26,0xb9b5d477,0xb9a741bd,0xb9a6c014,0xb9bccacb,0xb972312a,0xb96971c4,0xb960a40c,0xb98b8c5a,0xb96ef399,0xb7e98653, -0xb99ed918,0xb9e3b2b9,0xba23ca49,0xb9b920c8,0xb99919b6,0xb9cdcb3a,0xb9db2033,0xba053adf,0xba2c0888,0xba101ee4,0xb9e0cc42,0xb9983c24,0xb9334737,0x381067dd,0x3852e7f7,0x38873be1,0xb58bfc88,0x37e96c96,0x37b25fb5,0x37adb80f,0x372d5a78,0x37376029,0x35b2d83b,0x3674dc0f,0x368b9960, -0x3882883d,0x3876a9ae,0x35d125e4,0x3639f085,0xba175f85,0xb9173a08,0xb91995ff,0xb852260c,0xb93d4688,0xb957f636,0x39a003c1,0xb9884b34,0xb9e9f844,0xba67b643,0xb9dcd4cb,0xb98be17f,0xb9b90949,0xb9b165ff,0xb9f225ed,0xba421dd6,0xba0bd3a0,0xb9c872b9,0xb973f45b,0x3839ecc9,0x37b59e87, -0xb7c89402,0xb7d1d47d,0xb7026a16,0xb7179ee8,0xb7103007,0xb6badaa3,0xb647c49d,0xb6740869,0xb5c93bbf,0xb5c456b0,0xb71ce071,0xb7ca567c,0xb8256ca5,0x38911650,0x39069427,0xba2242bc,0xb9552408,0xb8fd3ea0,0xb89fcc82,0xb9a14a69,0xb9082e9c,0x3a0b7243,0xb9a72f5e,0xba699a7d,0xbabd2c8c, -0xba23e469,0xb9a26077,0xba1bbaa1,0xba4155c2,0xba9022c9,0xbace8677,0xba9d7ae2,0xba571e3d,0xb9ac197d,0x37f0357d,0xb76d4e08,0x3611ce7d,0x3751ee53,0x36b58867,0x368bae70,0x3684e499,0x36345562,0x3604216d,0x35d36a04,0x35a85c0c,0x357e65d2,0x36d07ee2,0x371c0316,0x3782a4b1,0xb8820d17, -0x37ac9759,0x39180bee,0xb97dd964,0xb8daa5ba,0x3a220495,0x3a116db8,0x39ba7856,0xba1bd7f8,0x3a47196c,0x3a8a43d9,0x39e2d52a,0x38cfabba,0xb8145a29,0x39bb18b6,0x3a904e0d,0x3ac8a0a0,0x3ad2aea6,0x3aa65b80,0x3a62a50d,0x3a04119c,0xb8374936,0xb5cc4b99,0x364432f4,0xb6e3a621,0xb6325bb3, -0xb616f7ab,0xb5f69bc3,0xb5c90a20,0xb588cc88,0xb5862456,0xb4e6e2ea,0xb5d03c74,0xb56dc49f,0xb736e1c8,0x3777c986,0xb809234f,0xb90fd6c2,0x39bbc6f0,0x3a19573a,0x3a81cc36,0x3a920d1b,0x3a503c11,0x399947d8,0xba1eb0c8,0xb961be86,0x38c5737e,0x39efae33,0x3a955c3a,0x3a717c84,0xb8beea6e, -0xba88e08e,0xbaded2f5,0xbaef29a1,0xbac81890,0xba8ebf26,0xb9eed083,0x387dbbb3,0xb7774012,0x36be990a,0xb3db60a0,0x366216e9,0x35020089,0x35c7b07f,0x354d5f0b,0x3557c5db,0x353a8d12,0x34dab654,0x35c0249b,0xb4fced89,0x371a930f,0xb79597e3,0x383b8b5c,0xb7dd20ed,0x39e105df,0x398b8b08, -0xb99ba82d,0xba93f3f1,0xbaa555a2,0xba0e67ad,0x3a159066,0x3a576862,0x3a2732e3,0xb916519f,0xba9b205b,0xba97b0d8,0xb96e4c68,0x3a706368,0x3ad427a6,0x3ae05d16,0x3ab11b49,0x3a688068,0x39921ddb,0x361d847e,0xb7960fb6,0x3722196d,0xb6bc2dde,0xb3863ab0,0xb5de6615,0xb547a1a6,0xb59077c7, -0xb52a2f9d,0xb5930379,0xb4aadb93,0xb60d9415,0x358f24a7,0xb700d008,0x3758ddd3,0xb7772980,0x39ac5b75,0xbab1bbdb,0xbab5cdf2,0xba25fc3d,0x3ac05b2d,0x3a262171,0xb902c886,0xba43c98e,0xbab45ea3,0xba2de5cb,0x3aab2cee,0x3abcab92,0x3a91b519,0x3830566d,0xb98f775b,0xba0e1aa3,0xba2f217c, -0xba2215c8,0xba0806c1,0xb9c902e8,0x37dd4d39,0x3671a308,0xb693af85,0x36859251,0x35c13524,0x35ce1433,0x35d3c1aa,0x35a55fe3,0x35d8a054,0x355adfd9,0x3644257c,0xb59e51c3,0x370d01cd,0xb74cebc1,0x38211af0,0xb8ccce77,0x38543487,0xba5352c7,0x3ae636f5,0x3b231205,0x3b267aca,0x3b074ace, -0x3ad24a83,0x3a7ef10f,0x39a09abb,0xb9846259,0xb9dd3e82,0xba3c0938,0xba2ce75e,0xba1de53f,0xb9a82716,0xb9118e17,0xb59325a1,0x3981ff28,0x39ba6548,0x3a06b52c,0xb8aa5a98,0x370367e2,0x360acdd2,0xb6cd1af7,0xb61bd5ab,0xb652a1f1,0xb63213f7,0xb63d1624,0xb618f66d,0xb663802c,0xb6103fc4, -0xb6bdd8ce,0x354c99f3,0xb74c00d8,0x375eab00,0xb7a136a0,0x388d3049,0x39867642,0xb9f1c64b,0xba48ffe0,0xba54b412,0xba627872,0xba5676d4,0xba18e29d,0xb9f938b2,0xb9c39522,0xb9b60965,0xb9ab7e82,0xb9935541,0xb9184357,0x38791d24,0x397271ef,0x39ad90b5,0x39f25a77,0x39ead4b6,0x3a1575c9, -0x38322623,0xb82bbb4b,0x3720db94,0x36f51e8a,0x36d7369b,0x36bdaf90,0x36ca1921,0x36b1c473,0x36bc48f2,0x36b445fc,0x3706555c,0x36a900f7,0x3741cf2e,0xb588d62a,0x37fb7973,0xb8a0bb0d,0x38e47428,0x3a29b13d,0x39fb225a,0x39f94445,0x39a9e958,0x39477d44,0x3877d207,0xb8b58fbe,0xb974a19c, -0xb9c211d6,0xba056456,0xba03d30f,0xba0258eb,0xba06fb10,0xb9f0ac10,0xb9d87a7d,0xb9bc33d9,0xb9b84654,0xb9a6c430,0xb9bc3eaa,0xb85fe17a,0x3889bbe3,0xb7fb0d31,0xb78824c1,0xb74b5d30,0xb75a8350,0xb75c7f37,0xb74a4d70,0xb7457d8c,0xb75e2705,0xb77c1441,0xb790f0e5,0xb70a4e29,0xb7e084d6, -0xb6c03ede,0xb7899886,0xb91f51a7,0xb9629fc0,0xb9884fa7,0xb99a5997,0xb9a87e93,0xb9a93ca3,0xb9b481f6,0xb9be01bd,0xb9b4dc3d,0xb9ad8abb,0xb9ad9e5a,0xb9b1befe,0xb9be604d,0xb9cdc134,0xb9c169b4,0xb9b8c507,0xb9a8678e,0xb9a0e56b,0xb988ba8f,0xb988469b,0xb96f008b,0xb7201734,0x3866f1e8, -0x385b2f5d,0x37838aaf,0x381abb09,0x38051da7,0x3815beec,0x381916a3,0x3821626a,0x382164de,0x3834eb1b,0x379a4ac0,0x385b6fd1,0x381e83b8,0x381d802d,0xb99ce003,0xb96b3074,0xb97a8759,0xb9806c66,0xb983e321,0xb98c4608,0xb990d9cc,0xb9965153,0xb99eaff2,0xb9a7b5d9,0xb9ad7bb6,0xb9b54b16, -0xb9b88a0e,0xb9bd9d8a,0xb9b4bff2,0xb9affcb4,0xb9abef84,0xb9a536b7,0xb9a310c4,0xb9943593,0xb99fb7c2,0xb9a40266,0xb9a69fef,0xb885dc7d,0xb8a5f063,0xb89d98b7,0xb8a8e9e0,0xb8a8ffe0,0xb8adb3b7,0xb8ae9aaf,0xb8b3f29c,0xb8ac7891,0xb8afe09f,0xb867ae5f,0xb9aa94e3,0xb9a096be,0xb9b9c503, -0xb85c74c1,0xb8afb100,0xb82467c7,0xb8473650,0xb8284c89,0xb8267a63,0xb8368c24,0xb82e2af9,0xb7b5311c,0xb8354480,0xb855f350,0xb88bee89,0xb853abb6,0xb843f029,0xb8484f3b,0xb83c2bac,0xb846ce27,0xb87d3a17,0xb85572ac,0xb8529232,0xb7f9c9ea,0xb87f4e20,0xb8aa4695,0xb8edb9ea,0x3708d8b9, -0x355c44d2,0x380f7d97,0x38091424,0x37fdb600,0x37ee67d7,0x37e72514,0x37e7bcbf,0x37e18f99,0xb4347a32,0x3700b1bc,0xb8e2bd83,0xb8c5f5dc,0xb8b358f7,0xb89641f7,0xb8169b47,0xb82f95c6,0xb8195d05,0xb84bfa08,0xb825a0ef,0x360109d6,0xb84fa8a0,0xb89c9e15,0xb8e60491,0xb886a0e6,0xb854f2fa, -0xb883e49f,0xb8805081,0xb8a3dc95,0xb8eadcc5,0xb8cbc86d,0xb8989bc6,0xb834716c,0xb884b318,0x37f0cbd9,0x37f6e43e,0x372874b4,0x368c7721,0xb677d91d,0xb6ebc24d,0xb67f1ce9,0xb5f7dbde,0xb60244f3,0xb66b8de6,0x35d818e9,0xb50540cb,0x370a4056,0x380c10c8,0x37f6bbfd,0x37c6ea6d,0xb8f69cad, -0xb7bb610e,0xb7eede90,0xb5898277,0xb809a10b,0xb8144efb,0x3895f77b,0xb80cce3e,0xb891418a,0xb91cc33b,0xb8a3d5d8,0xb8469078,0xb858460f,0xb80cf426,0xb8679f4b,0xb8fa8723,0xb8af6346,0xb8661000,0xb7ef1c77,0xb60907e5,0x35d6365c,0xb70df879,0x361659ad,0x363b60f8,0x364d8cab,0x36591103, -0x35eee2f8,0x35620ba6,0x35ca762e,0x35dbcccf,0x35a5225a,0x367a9741,0x357ba20c,0xb60e93e2,0xb7197ddc,0x37d4ad8f,0xb8ea4968,0xb8372f66,0xb7e30edb,0xb734fa81,0xb895315e,0xb81a1550,0x38d8f656,0xb85af501,0xb926af00,0xb986f670,0xb90171db,0xb873a94e,0xb8b3cef3,0xb8b6d5aa,0xb9290f83, -0xb98fe7bb,0xb96cb318,0xb9190276,0xb83e50b3,0xb6b97f1e,0x37172512,0x361ebc43,0x36504040,0xb61a83c3,0xb578d512,0xb5b4dbbd,0xb54fc239,0xb50d754b,0xb53ec231,0xb5177d42,0xb573b6b4,0xb58ebcb4,0xb5e69988,0x3724c752,0xb5d870f2,0xb717562e,0x375cc4d1,0xb78cec70,0xb764978d,0x38fedd36, -0x39190ab7,0x3904ae98,0xb8afd3b9,0x396464d6,0x399206ed,0x391127d7,0x3880d83b,0x37485f7b,0x38943390,0x394a04f4,0x399e523a,0x39d5fe54,0x39ad8f90,0x3991e0c0,0x38f5fa29,0xb812eb2e,0x378f7906,0xb70b4d40,0x35a52c59,0xb489ef8b,0x35999d50,0x34a946b4,0x3518e2a8,0x344b441f,0x350bd2cf, -0x32c425bb,0x3590e6ae,0xb51d89c0,0x362f9354,0xb73ec3e4,0x37ab3f92,0xb832fed9,0x389d7321,0x3928ac87,0x395841e3,0x3981435e,0x395d6681,0x38df0b1f,0xb9057faa,0xb847bd82,0x3722d4d2,0x38b0ef0e,0x397ba013,0x395df6b2,0x3754b9ff,0xb932ec64,0xb9a41585,0xb9bb98e2,0xb9ab0c38,0xb97f9808, -0xb8e50052,0x37c2cfb9,0xb53bb68b,0x32589d1c,0x35c2ec4e,0xb56f3f39,0xb43d9bcb,0xb4fbd261,0xb44ab733,0xb4b403dc,0xb388a430,0xb530289d,0x3510644e,0xb623f7a8,0x36a2d998,0xb71fb629,0x37d1b243,0x35442598,0x37a87cb8,0x37f9c566,0xb8701520,0xb9452dfc,0xb98b2816,0xb8f73850,0x392c8f60, -0x395943b4,0x393662a1,0x38181007,0xb95803c0,0xb96abcbc,0xb84144fb,0x39353a8a,0x39a651c3,0x39bb5ca7,0x39971171,0x395e5b8e,0x38866788,0xb79e9216,0x36b03e34,0xb62e1ba0,0x34318339,0x33df2e8d,0x350e57e0,0x348569a1,0x34b363d3,0x347d972a,0x34ab47c5,0x34a8d173,0x34e3b247,0x34fec6a9, -0xb524f743,0x34ca20b8,0xb62ce7d5,0x3855cd5b,0xb935632c,0xb99478f7,0xb8e50104,0x39c3bc68,0x3953207e,0x38267357,0xb8c1d864,0xb99aa79f,0xb93d2d15,0x396f17dd,0x39b1182a,0x39a1ee27,0x38a548c4,0xb6eb5db8,0xb899bde4,0xb8bb346c,0xb8ca794e,0xb8a3adf0,0xb85038b2,0x36b9ace6,0x3680b3ff, -0xb5893a65,0x35f2d1d2,0xb5b02950,0xb4590b55,0xb53417db,0xb4d621ad,0xb4eae9ea,0xb51ec58c,0xb4cdf6ff,0xb5a4ce28,0x35159c29,0xb62c4146,0x37318c0a,0xb78311d5,0x36c416f5,0x37232f55,0x39f30ce1,0x3a1c1031,0x3a2e2926,0x3a0fe9a1,0x39ec0e7e,0x39a504ba,0x39110b67,0xb6a3d977,0xb893542a, -0xb911bcbe,0xb90fe56c,0xb9070385,0xb8a31c12,0xb83b6c9d,0xb71d8e18,0x38003af8,0x388f48c9,0x389a57a4,0xb8038488,0x376ccc25,0xb724e9a4,0x3625a30c,0xb41406c8,0x35d97b71,0x353b5b8e,0x358bfa2b,0x35503dff,0x35906fae,0x359c616c,0x35c3cd29,0x35a0e39f,0xb446dc35,0xb6c4be31,0xb2827af2, -0xb7df05b1,0x368757d8,0xb8f8ffcc,0xb959384e,0xb95acf04,0xb95f402d,0xb940fe83,0xb8f8160c,0xb8cd6491,0xb897169b,0xb877e86d,0xb8479b20,0xb811cb54,0xb6d4dd76,0x380b7c98,0x3890aada,0x38c7267c,0x38ed162e,0x38e6eec2,0x38e441e7,0xb8163da9,0x3775a1d2,0x3608b551,0x35ea5cdf,0xb64fdf74, -0xb5e9636e,0xb6166a8b,0xb5f484e9,0xb5f691fd,0xb607cbc0,0xb646d98d,0xb60fcd13,0xb693a140,0x365d0e4e,0xb696522d,0x37f06d37,0xb83bee32,0x39318f3e,0x390c7bb8,0x39073c72,0x38cdf8c7,0x388a93a9,0x380e14d1,0x34f44fbd,0xb817a504,0xb891ef8d,0xb8da53f4,0xb8d50701,0xb8cfa23b,0xb8d3f6bd, -0xb8b9e2d5,0xb8a74caa,0xb88df3ec,0xb88c45b2,0xb86969d5,0xb88fcdd4,0x37ca1aac,0xb7116cbb,0xb743271f,0x35b975ea,0x3681b261,0x36a8f879,0x369bf030,0x36985123,0x36806ec1,0x36ab8fc2,0x36cebbd8,0x36e86dc2,0x36a5441c,0x36b2dc41,0xb708d548,0x372b405e,0xb7d96d63,0xb7ade6ac,0xb855d8c9, -0xb85523e9,0xb876e698,0xb8734368,0xb8826e1d,0xb88a32d6,0xb88a6243,0xb88af50b,0xb892df5e,0xb89f1bc4,0xb8b4950d,0xb8cd47d0,0xb8c67b92,0xb8c3104b,0xb8b78ec8,0xb8b84853,0xb89dc932,0xb8bff899,0xb879db5d,0x383ce6ce,0x37caf7c0,0xb533793a,0xb71d62e8,0xb73ac5a6,0xb773dd52,0xb75ea16b, -0xb76fd338,0xb76d3ba5,0xb78a4c0c,0xb74af8d4,0xb729a903,0xb549edd4,0x37f08637,0x37e81b31,0xb89715a9,0xb8356279,0xb83bf248,0xb8419375,0xb84b03bd,0xb858ae64,0xb8619d70,0xb8675a21,0xb87e51ad,0xb88a5378,0xb892c0a7,0xb89d5235,0xb8a32dd6,0xb8ab6d84,0xb8a3fe25,0xb8a17554,0xb89ec5a2, -0xb89acaff,0xb89bac5f,0xb87d5e2e,0xb8d2a09e,0xb8bc01f4,0xb8cf307e,0x380947a0,0x37992239,0x381b73ae,0x381b062d,0x3817a3c7,0x381869b8,0x38172838,0x38191877,0x3813ea20,0x37ad8b28,0x38049fc9,0xb8b6c6f0,0xb896fb40,0xb89d04be, -}; - -const uint32_t defaultHRIR_rom_AlphaR32[470 * 86] = { -0x3e8065c3,0x3e6ef862,0x3e9c117d,0x3d6fefdf,0xbd6f840b,0xbe245973,0x3e022d81,0xbd2167b3,0xbe211338,0xbe2839d2,0xbe21fc71,0xbe049f6d,0xbe2067a7,0xbe25efd4,0xbe202ffd,0xbd25123e,0x3dc1efdc,0xbe2ea55d,0xbd3924e1,0x3d415830,0x3e8d91aa,0x3e5e148b,0x3e6db67d,0x3e70d2c7,0x3e71faf2, -0x3e742a24,0x3e767460,0x3e789e68,0x3e7d14ea,0x3e814fd9,0x3e84afa1,0x3e879b3b,0x3e8bffa0,0x3e89dc0c,0x3e871fb7,0x3e7fe418,0x3e80d105,0x3e955dbf,0x3e8602f6,0xbdb41e6d,0x3e47b547,0x3d78dbd8,0x3d8d8a54,0x3dff4f7f,0x3dd6cbd4,0x3e2a712f,0x3df98017,0x3d723363,0x3de2e600,0x3dfba89d, -0x3dde6511,0x3d5457e0,0x3db00e5f,0x3dbb73b5,0x3de8956c,0xbd66c649,0x3e54f09e,0x3e791bbc,0x3e743d87,0x3e832dbc,0x3e83a2b0,0x3e876621,0x3e8a3e52,0x3e8c5e71,0x3e91cf6b,0x3e9aa2ef,0x3ea5faa1,0x3eb09ae8,0x3ebae53b,0x3eb97981,0x3eb0a1fa,0x3e9c5594,0x3e95e166,0x3eaf0a9e,0x3e78672c, -0x3d80d7ea,0x3de6e42f,0x3cad7122,0x3d404dda,0x3d26ff97,0x3d25eab0,0xb625670d,0x3d9fd366,0xbcb16f0f,0x3dc9c00e,0xbb91fc43,0x3d7324db,0x3b3b7491,0x3d56ebcd,0x3d523589,0x3d4e1a21,0x3d099ec6,0x3e0c9517,0x3e75e3a0,0x3e658021,0x3e868d80,0x3e873369,0x3e8e8957,0x3e94e2d6,0x3e9a53d0, -0x3ea61b0d,0x3eb6c836,0x3ec86fee,0x3edcb7a7,0x3ef012e9,0x3eeb9c0c,0x3eda6e87,0x3eb4e46f,0x3ea4f89d,0x3ec19ceb,0x3e428976,0x3cb52432,0x3dd72e5d,0x3d62d37c,0x3d10529b,0x3d3b2b85,0x3ce8fd33,0x3cda17ef,0x3c39df54,0x3d11d620,0x3b524a66,0x3b99f01b,0x3cb74290,0x3c6923bd,0x3d08b12d, -0xbc8a2c94,0x3d4babe8,0xbba0814f,0x3ddb5618,0x3e57c156,0x3e5c92ea,0x3e84515a,0x3e8492bc,0x3e8e7cc0,0x3e978bed,0x3e9c3c72,0x3eac8282,0x3ec7a9f6,0x3ee7d52d,0x3f056a80,0x3f16c700,0x3f155eec,0x3f065e7e,0x3ed26069,0x3eafaa5a,0x3f03775a,0x3e91af84,0x3d82af5a,0x3da48683,0x3cc5b7d7, -0x3ba51a89,0x3d439b45,0x3c9a2fe1,0x3cb4f27c,0x3c91083b,0x3ca0a0f7,0x3c9c923d,0x3c0b429c,0xbb72ea9e,0x3c021995,0x3cf42974,0x3c1f567d,0x3d6d2275,0x3c5c183e,0x3df3715d,0x3e801376,0x3e7db7fe,0x3eaaae92,0x3ebb0ac0,0x3ecebdae,0x3ed567a3,0x3ef804e9,0x3f0674e8,0x3f07bd54,0x3f1da07e, -0x3f23ca8f,0x3f210ab6,0x3f1ab5e3,0x3f0f1808,0x3f023a4c,0x3eea48d6,0x3f067392,0x3e4e2930,0xbbb8773b,0x3dd7ee78,0x3de8c36e,0x3d61cbe1,0x3d9f79ce,0x3cb7a6b2,0x3cdf3c0a,0xba82da31,0x3c78d616,0x3c58c047,0x3c32c54c,0x3ccfc36c,0x3d0066ed,0x3d1a6393,0x3c2c99d6,0x3d65dacc,0xbb18e9ce, -0x3e09983a,0x3e91809c,0x3e960fb6,0x3eca264c,0x3ed32d12,0x3ee65a30,0x3ef4e2f2,0x3eeb83ac,0x3eecde62,0x3ef7acab,0x3f0bcaa8,0x3f17c181,0x3f1ff78a,0x3f27da67,0x3f22c01c,0x3f17ba6c,0x3ef908f5,0x3f44bdc2,0x3e8b2396,0xbdbf5a5f,0x3de8db1a,0xbd3fdf54,0x3dae7ab7,0xbd193fbc,0x3d201d5b, -0x3b8d4cc5,0x3d29df7a,0x3c9a659e,0x3c36c917,0x3cacfd9d,0x3cb6763f,0x3ce3a84a,0x3d82a966,0x3c8c5ab7,0x3d998c76,0x3d028b7b,0x3e01a9f2,0x3e9d5820,0x3e97882c,0x3ec9a904,0x3ef8fb8a,0x3f17dc21,0x3f308451,0x3f36dffe,0x3f309f9f,0x3f1db901,0x3f084ae1,0x3f0e463b,0x3f27993e,0x3f3e4b18, -0x3f5136f6,0x3f75ec5d,0x3f4a81a3,0x3f72211d,0x3ecaf79c,0xbb9dbe5a,0x3e6ab743,0xbc372e54,0x3dec7f5e,0x3d29a709,0x3cffc775,0x3b12f0ae,0x3d0513b3,0x3d22109a,0x3cd96964,0x3c6f8c56,0x3b1d1031,0x3d0aebd5,0x3cbd5b25,0x3cd88ed3,0x3dbbe74c,0xbce09e5c,0x3e186f0c,0x3e915f60,0x3e8ebaf2, -0x3eb710a1,0x3ed5d35b,0x3ef7f89c,0x3f0908ff,0x3f169b43,0x3f1e2992,0x3f210e31,0x3f253b7d,0x3f242a29,0x3f1ff7d3,0x3f2e6efe,0x3f393f7d,0x3f5891db,0x3f5195c5,0x3f48fc36,0x3f057524,0x3c88b5e7,0x3db92868,0x3e0426a2,0x3c40b3a9,0x3dbb1f8c,0x3db2f15a,0x3c151bf8,0x3cf56bdc,0x3a56ebbf, -0x3cccd88e,0x3d11d826,0x3ced451a,0x3ce5ced1,0x3c8499e0,0x3d5a9ad8,0x3d8962c3,0xbcf9fe12,0x3e2fb123,0x3e8b8d2b,0x3e6e13d4,0x3e87e361,0x3e9c2adb,0x3ec36f02,0x3ef2657a,0x3f08130e,0x3f14bf9f,0x3f1f2a41,0x3f0d5840,0x3f06170c,0x3f0ee615,0x3f0ca974,0x3f168d99,0x3f32b9d5,0x3f32b272, -0x3f00e3ee,0x3ebe6232,0xbc9ecba2,0x3d95b9c5,0x3c7b6152,0x3bf2199e,0x3d71eeff,0x3cee9a7a,0x3d70baf6,0x3d30b49d,0x3da6249d,0x3c3b9000,0x3c9bf39d,0x3d106ddf,0x3d604d19,0x3d693f42,0x3daf8c34,0x3d9b4dfa,0x3cf6a0bd,0x3e19a4e4,0x3e8c58c8,0x3e80356d,0x3e8f4964,0x3ea35fd2,0x3eb4564d, -0x3eb965ab,0x3eba17d3,0x3eb0f3c8,0x3ea81da3,0x3eb12bc9,0x3ec75f9f,0x3edd3de7,0x3eda6d6c,0x3ed7d39e,0x3edac08c,0x3ed92cbd,0x3eb54624,0x3e5b3505,0x3d9c85dd,0x3e254f25,0x3d699fb5,0x3d9490c6,0x3d3dfd9b,0x3d244a9e,0xbc86fd01,0x3d95a250,0xbd367345,0x3de0684e,0xbcacc494,0x3d4e59d4, -0xbc8468ff,0x3d39a0f9,0x3c984c6a,0x3d47de30,0x3c9d7424,0x3e19ea16,0x3e79b070,0x3e3e130f,0x3e532614,0x3e5ca9c1,0x3e7421ac,0x3e806864,0x3e9aba0b,0x3eb0c53f,0x3ec5fc9d,0x3eca9d2f,0x3ecbe9e8,0x3ecf4354,0x3ec977d2,0x3ec0673b,0x3ebded84,0x3ea23e32,0x3e8bd959,0x3e8200b3,0xbdecaf4f, -0x3e2f9d11,0x3d225a67,0x3d677c45,0x3e042a7c,0x3de288de,0x3e41c8a1,0x3e129920,0x3d82280a,0x3e018140,0x3e1d5709,0x3e0a8510,0x3d8441cb,0x3dd6ebc3,0x3dead08b,0x3dff1049,0xbd869b75,0x3e463dac,0x3e56ee89,0x3e4a4368,0x3e53b006,0x3e4e5d2a,0x3e503eca,0x3e4bfcc2,0x3e6c40d1,0x3e7f74a6, -0x3e8ac8c4,0x3e935227,0x3e9d568c,0x3ea796ec,0x3e9fc971,0x3e97e5ff,0x3e947c7f,0x3e898b74,0x3e83d5be,0x3ea9adfc,0x3d54c4c3,0xbd8eb9c9,0xbe3384d8,0x3e0abcc9,0xbd72cf50,0xbe3b2b81,0xbe47d2e4,0xbe44847d,0xbe1f3b94,0xbe428b35,0xbe4da6fd,0xbe4576de,0xbd7bfe81,0x3dc350d9,0xbe51b871, -0xbd8d818b,0x3d152a05,0x3e9f67a5,0x3e77c8a0,0x3e81bf8f,0x3e8199b1,0x3e81759a,0x3e81cfc6,0x3e7fdba1,0x3e83fc0c,0x3e86b35c,0x3e899be9,0x3e8de1cd,0x3e917c1b,0x3e976359,0x3e933f79,0x3e9164ce,0x3e8edf6d,0x3e8dbe3b,0x3e9b4c11,0x3eee9e61,0x3ee16fd2,0x3ed73bfd,0x3f031958,0x3efcd5c9, -0x3eb939e6,0x3ef5a55a,0x3ef279dc,0x3ebffd41,0x3ebdf966,0x3eb9725b,0x3eb1960e,0x3eb0c909,0x3eb0d1b6,0x3eac5428,0x3eec360f,0x3ef02caf,0x3ea9f619,0x3eed5478,0x3ef65df3,0x3ecb29cd,0x3ed0ee4d,0x3ed5f1c7,0x3ed87975,0x3edb0693,0x3eddba94,0x3ee081ce,0x3ee4a6c4,0x3ee818c1,0x3eeb6112, -0x3eeedbb5,0x3ef2c527,0x3ef98bd9,0x3ef6e4c4,0x3ef48d06,0x3eef1732,0x3ee8c183,0x3f01a7b9,0x3f060eda,0x3f011c34,0x3ee97bf3,0x3ee3cd81,0x3ed515c3,0x3ecee8ac,0x3ec2d045,0x3ebb72df,0x3ec4f2af,0x3ec6388a,0x3ec58408,0x3eb90f06,0x3ebc91ee,0x3eb57a5f,0x3ebafc6e,0x3eccf7ed,0x3ec3a84b, -0x3ecb1dc4,0x3ed7f656,0x3ecf6d98,0x3ede49af,0x3ee54c83,0x3eec8436,0x3ef4422e,0x3efd7741,0x3f04847b,0x3f09d504,0x3f0e85a0,0x3f132e72,0x3f19d54c,0x3f238988,0x3f2346f1,0x3f1fad6a,0x3f15d1df,0x3f0e073b,0x3f064ffa,0x3f06a50a,0x3f025dff,0x3ede5978,0x3ebd48d6,0x3eab068e,0x3e9c0293, -0x3e910dad,0x3e82f145,0x3e6db753,0x3e76c61f,0x3e6fbd14,0x3e59678a,0x3e75be18,0x3e6c6cc7,0x3e834651,0x3e931fa3,0x3e9251d5,0x3eacc574,0x3eb45e99,0x3eb9fdc9,0x3ed32464,0x3ee52293,0x3ef30333,0x3f017534,0x3f099a1a,0x3f14a2d6,0x3f1d4c2c,0x3f26d89e,0x3f30611e,0x3f3da198,0x3f4e9155, -0x3f4c09e5,0x3f45df03,0x3f30a100,0x3f1e6942,0x3f0e3e38,0x3f0e47f6,0x3eee0c29,0x3eb928f3,0x3e908df9,0x3e7640aa,0x3e489172,0x3e0c2cfc,0x3dcfdcc4,0x3d9bfb3a,0x3d8fb18b,0x3d3a3036,0x3d4da7e6,0x3d704cb4,0x3d8d07c3,0x3ddd7b8f,0x3de50f7f,0x3e2287eb,0x3e4c35d2,0x3e836a1e,0x3e97ac07, -0x3eb2caba,0x3ecebd89,0x3ee227b7,0x3ef90735,0x3f087a48,0x3f1879a1,0x3f284205,0x3f34f5bf,0x3f431055,0x3f5ac8d6,0x3f7b7a5e,0x3f7df07b,0x3f725367,0x3f4dba7a,0x3f2eb8c6,0x3f302d7f,0x3f201388,0x3f25e853,0x3eeca8a4,0x3eafd375,0x3e916868,0x3e73135e,0x3e379a5b,0x3e123e5c,0x3dd89349, -0x3dd5c6c7,0x3d9951f7,0x3d857ec9,0x3d6d709e,0x3dc353a3,0x3e069f23,0x3e1f594c,0x3e5b9072,0x3e933157,0x3ebc5be8,0x3efb6964,0x3f1a17f4,0x3f335985,0x3f41f93b,0x3f547ff3,0x3f6ca8a7,0x3f724a5b,0x3f7d67f0,0x3f82715f,0x3f97d6cb,0x3f9bf202,0x3f94f875,0x3f8c8e29,0x3f85e5c6,0x3f82a7f3, -0x3f61a3fb,0x3f6f42c4,0x3f495fe1,0x3f3424d3,0x3f0ee426,0x3ef9a4b0,0x3eb31f2e,0x3e880b49,0x3e46b6de,0x3e11ca66,0x3dd3fd91,0x3dcc84ba,0x3dbe8bdf,0x3db5b019,0x3ddfe279,0x3e029bb3,0x3e289aba,0x3e77072d,0x3e9adb96,0x3eb85dc0,0x3ee1ea00,0x3f063f84,0x3f181e75,0x3f2c6f00,0x3f45ea85, -0x3f653770,0x3f840a84,0x3f935a3f,0x3f9e3a6c,0x3fa13332,0x3faeb7d7,0x3fb251fc,0x3fa9689e,0x3fa398e2,0x3f9c4937,0x3f9798d5,0x3f8c8154,0x3f6ddfcb,0x3f8138fa,0x3f51a631,0x3f152d81,0x3f09f0a7,0x3edb4369,0x3e8f7079,0x3e625c79,0x3e182586,0x3e2c10a6,0x3e433eb8,0x3e03d9a8,0x3e0bd75c, -0x3e27191b,0x3e3b30b4,0x3e815ae5,0x3e98b875,0x3ea2133e,0x3ec5d713,0x3ed313f7,0x3ee422d1,0x3f0b7e5e,0x3f24f353,0x3f2a38b2,0x3f39a2d7,0x3f50b0a0,0x3f73f2c6,0x3f8eebc5,0x3fa47402,0x3fa8eaf4,0x3fa0383b,0x3f92df72,0x3f833234,0x3f76643d,0x3f566ad5,0x3f75d065,0x3f1b40de,0x3f696d80, -0x3f6a937c,0x3f11d07e,0x3ee5e72d,0x3ebf3b22,0x3e89555d,0x3e5c1426,0x3e26839f,0x3e43726b,0x3ea7c5f4,0x3e37b1a3,0x3e024c82,0x3e2c86fe,0x3e6a5ece,0x3e7e9fdd,0x3ea835b9,0x3ec6ad44,0x3ecffadc,0x3edf628c,0x3ed9ac32,0x3ef8d1b9,0x3f0f6390,0x3f339a37,0x3f4c4298,0x3f5d3dc5,0x3f769a49, -0x3f840bd3,0x3f892cbf,0x3f98e0eb,0x3fa0ae5b,0x3fa56e4f,0x3f895033,0x3f62cd2f,0x3f22751f,0x3f42f211,0x3f41449e,0x3f4fddb2,0x3f6376dc,0x3f24d7de,0x3efce90e,0x3eca1298,0x3eb0ad83,0x3eb0c3eb,0x3e8431c2,0x3e8025b1,0x3e6884c0,0x3e468439,0x3e484def,0x3e6174fe,0x3e882abb,0x3e9522c4, -0x3eb74a39,0x3ecae442,0x3ee0d203,0x3f139a98,0x3f14835e,0x3f18ca09,0x3f0b7ee4,0x3f1c6cd7,0x3f2e33d1,0x3f4b442d,0x3f5e66b7,0x3f75835b,0x3f85ec4a,0x3f90edfe,0x3f97051f,0x3f9e1766,0x3f93df42,0x3f8be446,0x3f707ec8,0x3f74eb35,0x3f5d98cf,0x3f54b3df,0x3f50bdb1,0x3f2b6cdf,0x3eff2c67, -0x3eee110b,0x3ec9be78,0x3ea59c72,0x3e9dd3c1,0x3e91e884,0x3ea494dc,0x3e5f475c,0x3e601e5d,0x3e7efabe,0x3e9bd793,0x3ec2d750,0x3eedd6a0,0x3ef95ff2,0x3f05f43f,0x3f1c9e56,0x3f2851cc,0x3f266502,0x3f157109,0x3f1c912c,0x3f2a40cd,0x3f40de1a,0x3f5b0333,0x3f785930,0x3f8a3d52,0x3f9089f0, -0x3f929013,0x3f907b6a,0x3f8fe7c7,0x3f8b712b,0x3f7c08aa,0x3f78008b,0x3f5bb2d9,0x3f5142d6,0x3f31353e,0x3f23efd6,0x3f08753f,0x3ef0cda4,0x3ed248aa,0x3eada14e,0x3ea33805,0x3eb8911e,0x3ea52d7e,0x3ed5336f,0x3e955bfa,0x3ec5e652,0x3ea5a0d9,0x3ed68990,0x3ee0c41e,0x3ef8c60b,0x3f075f15, -0x3f19792f,0x3f23854a,0x3f25bcab,0x3f2d5ce2,0x3f37a807,0x3f3eacdd,0x3f43e116,0x3f51419f,0x3f5b3b25,0x3f659b9e,0x3f6fc361,0x3f7a6f46,0x3f82b178,0x3f7f9175,0x3f7b3e6b,0x3f7501d3,0x3f693a34,0x3f436a68,0x3f4acd2d,0x3f0b5a99,0x3f340951,0x3f1e7566,0x3f17ada2,0x3f1e045e,0x3f12f94d, -0x3f1e2c21,0x3f22045a,0x3f1606d8,0x3f21b54c,0x3f19660f,0x3f19014a,0x3f0bfa20,0x3f143629,0x3f1e45bc,0x3f1662dd,0x3eec110a,0x3f302c2e,0x3f2dbf8f,0x3f33a04b,0x3f36ee01,0x3f3b88e5,0x3f4157e8,0x3f46eccb,0x3f4bdd27,0x3f50006e,0x3f53ee64,0x3f569614,0x3f587263,0x3f5cd842,0x3f560902, -0x3f51a31c,0x3f4d158b,0x3f49daad,0x3f363039,0x3f3de28c,0x3f3a97c4,0x3f22dd68,0x3ec4e885,0x3f3fc5ed,0x3f2294b3,0x3ed0dcb0,0x3ecdc593,0x3ec9bd45,0x3ecbf552,0x3ec26e57,0x3ec42580,0x3ec1146f,0x3f209279,0x3f37b6a2,0x3eafeb27,0x3f1f9d96,0x3f332e53,0x3f35bdfa,0x3f2e4082,0x3f337475, -0x3f342409,0x3f357a0e,0x3f35fcfd,0x3f36c017,0x3f37ca50,0x3f391184,0x3f3a640e,0x3f3c2fc2,0x3f3dc7a4,0x3f4029bb,0x3f3e3651,0x3f3d37f4,0x3f3b4528,0x3f3b5958,0x3f4af98c,0xbd4a668d,0xbd3883af,0xbdd47c37,0x3d162b28,0x3e2bee51,0x3ecfdd11,0xbcead0e2,0x3e154543,0x3eba89f2,0x3ebe36e4, -0x3ebd6fc3,0x3eb90ac4,0x3ec49349,0x3ec86c09,0x3eca8deb,0x3e1a59ac,0x3bb5d9a7,0x3edb4aba,0x3e2d23dd,0x3d73ad41,0xbd9e28f4,0xbce67316,0xbd45bccf,0xbd588046,0xbd5a9ac4,0xbd58af5b,0xbd4bff77,0xbd4c3bc8,0xbd558c92,0xbd62dd56,0xbd85a936,0xbd99ec19,0xbdc3795a,0xbdaa9d74,0xbda0b9cc, -0xbd883335,0xbd8abe60,0xbd9f7ba7,0xbda21ff9,0x3e82d352,0xbce27b21,0x3dabe3c0,0x3dc3ac51,0x3cf491a0,0x3d495a43,0xbca2b2ca,0xb9f73a5a,0x3d8079ad,0x3c435ef2,0x3cbf54c7,0x3cdef2a5,0x3de3c656,0x3dadc79e,0x3d555243,0x3d922739,0x3e761a59,0xbca50f3c,0xbcc4dedf,0xbd1f7c65,0xbd6c73c4, -0xbd75aa1a,0xbd710faf,0xbd451859,0xbd338d97,0xbd4829e4,0xbd7d7944,0xbdbafdd0,0xbe03541d,0xbe404271,0xbe2ec299,0xbe1f22b6,0xbdeace05,0xbdcece1b,0xbdb1a1b2,0xbcbb6e55,0x3d7f5030,0x3ce2da40,0x3de8951d,0x3dd4ad43,0x3dc864d7,0x3d8fa736,0x3dd2c6c4,0x3d4b55fe,0x3e0b77e9,0x3d29950f, -0x3e13dcd8,0x3d8c3765,0x3e0c6e07,0x3dc4551f,0x3dd58800,0x3e0b57ce,0x3e02b9d6,0x3d83c0cd,0xbc1bc672,0xbcc7ea9c,0xbd8c9b83,0xbd91f0e3,0xbd889958,0xbd33a873,0xbd12ec75,0xbd1b48a4,0xbd7d7e5f,0xbde62c66,0xbe487615,0xbea2e75e,0xbe8a765c,0xbe75b61e,0xbe0fe42e,0xbdc94e16,0xbd8b5dd0, -0x3d759da1,0x3e17f51d,0x3d543bb2,0x3d9e3b4c,0x3dd4bc29,0x3dac1769,0x3d911644,0x3d457d3f,0x3d5ec393,0x3d4f05c9,0x3d96faba,0x3d8ba4b8,0x3d850ce9,0x3dacfb86,0x3db31a21,0x3e199fe9,0x3dfe0360,0x3e2c83a5,0x3ddcb3fb,0x3d122268,0x3b065f9d,0xbd587e1d,0xbd5bc9fe,0xbd36cc12,0xbb0e9f1e, -0x3ce1bd0e,0x3c75f519,0xbc86a865,0xbdd3a1ea,0xbe836793,0xbef6cee3,0xbee05493,0xbebe19bd,0xbe4b8d06,0xbdc371de,0xbe953255,0xbe39afac,0xbd05b0d0,0x3d843699,0x3dbc3f5a,0x3daf7aae,0x3cced851,0x3d56ca1b,0x3cfacf0a,0x3d179e89,0x3d6edff3,0x3d92ff4d,0x3daf2bc2,0x3db6a41f,0x3dbaf370, -0x3dc14993,0x3e0c46d1,0x3e181d14,0x3e4ab001,0x3dd04195,0xbd2fd8ea,0xbda6d399,0xbe503b78,0xbe6289eb,0xbe6eb673,0xbe5b1c24,0xbe64aed4,0xbe52bb9e,0xbdde7987,0xbed46ec2,0xbef30baf,0xbee51254,0xbec439dd,0xbeb73f40,0xbeb8050d,0xbe94e994,0xbf205c18,0xbd739770,0x3e5f118f,0x3e07e27f, -0x3daae663,0x3e203359,0x3dfd98dd,0x3e367c01,0x3dfd6cd4,0x3df41fe8,0x3dfcae41,0x3d8438cb,0x3d39d775,0x3cfd8874,0x3d3c17b9,0x3d8ae7be,0x3dee5346,0x3def82cc,0x3e5c115c,0x3dc193ea,0xbd468e63,0xbdcab370,0xbe93bad7,0xbec03dec,0xbef90238,0xbf11ef0a,0xbf08d23c,0xbef8758e,0xbec978dd, -0xbf029d07,0xbf09d509,0xbf07cab4,0xbee7e684,0xbee68044,0xbf0a52ee,0xbf1d5f25,0xbf1a26d9,0xbeacc3ac,0x3e309dd7,0x3d8f3126,0x3e2a4055,0x3d466352,0x3e5aa579,0x3e012c88,0x3e105f57,0x3deaeb91,0x3e684849,0x3e385041,0x3e309b25,0x3e1bd72b,0x3df809f4,0x3d99a021,0x3e349fc5,0x3e0dba73, -0x3e0d673b,0x3dae7fd6,0xbdbaeeac,0xbe378268,0xbebd5e54,0xbee45f77,0xbf0f3e1f,0xbf2d0f70,0xbf435a15,0xbf465daf,0xbf30893c,0xbee0ea84,0xbe8d6556,0xbe8273a4,0xbd7f5ef2,0xbdb2b3f9,0xbe33d232,0xbed4adfc,0xbe100876,0xbe66aacf,0xbbc9d2fe,0x3d3b3043,0x3e6783b3,0x3db4b577,0x3e25c225, -0x3e102047,0x3e19d63b,0x3e25a7f3,0x3e9d79dd,0x3e05d2cf,0x3dc55056,0x3e249c95,0x3e07a54f,0x3e428609,0x3e4a83f9,0x3e093832,0x3e6acd41,0x3d5c9db0,0xbd77518e,0xbdd1d012,0xbe625c40,0xbebebe5d,0xbefb1c69,0xbf0b6fb8,0xbf1bb878,0xbf13b99c,0xbeef851b,0xbedb5c55,0xbea5f0ae,0xbe89f2f3, -0x3ca104b2,0x3e875088,0x3f128703,0x3d4f0ea4,0xbde36ca5,0xbe8319bf,0x3b34f3ab,0x3d68aa89,0x3db8b479,0x3e398bac,0x3df31d8e,0x3d95272e,0x3e479ad3,0x3e3a7720,0x3e9633de,0x3e4123a0,0x3e2a3c18,0x3e45d95c,0x3e4b4d9d,0x3e7ce703,0x3e4928d0,0x3e6ba109,0x3eb3029b,0x3d4f6543,0xbdbb01ad, -0xbdb923a1,0xbdc29f33,0xbe1a44b6,0xbe7f9794,0xbec71d74,0xbee45ece,0xbefbd3a8,0xbefe3147,0xbecdea66,0xbe858733,0xbe4f1ac6,0x3d08ec12,0x3d912707,0x3da4b4d5,0xbd9257b5,0xbe00baa7,0xbdaac742,0x3e5b9f03,0x3e180aa8,0x3e7a1c23,0x3e4f1bc0,0x3e1cdb2b,0x3e30fafa,0x3e44fb50,0x3e6ef246, -0x3e1104df,0x3e86cc2a,0x3e6f9b5d,0x3e59758a,0x3e3d47f8,0x3e359861,0x3e144bc7,0x3e426bb5,0x3e8c99c6,0x3d952df1,0xbd8d2403,0xbcb8fd81,0xbd297d80,0xbda30f9b,0xbe0ce258,0xbe43c655,0xbe7ee1f0,0xbe8b558c,0xbe7dd17a,0xbe71dd2d,0xbe4ea09d,0xbdfbe8f4,0xbc5d412d,0x3d19fb0c,0x3dae38ed, -0xbcb5fa32,0xbc7ee9ea,0x3dcabf21,0x3ea0a6e5,0x3e4184a5,0x3ea35c61,0x3e8c158b,0x3e94c386,0x3e8a4a5a,0x3eae64a0,0x3e46bcd3,0x3eacfa4c,0x3de8aec9,0x3eb36156,0x3e5078d7,0x3eb23dab,0x3e6e18e0,0x3e8bf11e,0x3e747239,0x3e8d933a,0x3dd7c0fd,0x3b2805c1,0x3dd654c3,0x3dcb75aa,0x3d8a09f5, -0x3cdab8c3,0x3bc57ab1,0xbd4281a7,0xbdb47b41,0xbe0c9e6a,0xbe07cf22,0xbdfebc9e,0xbdf2662a,0xbd9c6a36,0xbc67234b,0x3d830d7c,0x3d8e4ac1,0x3d1930b5,0x3c8c2913,0x3f2706a3,0x3de782c3,0x3e9ffe0e,0x3e95732f,0x3e1607c0,0x3e28a824,0x3d02d2ef,0x3d99c231,0x3e47fa22,0x3d9cff78,0x3d83f432, -0x3d93d722,0x3e710bb2,0x3e45cab7,0x3e28c3ab,0x3e507650,0x3f12844c,0x3dbbfc4a,0x3de3feca,0x3e0c57d9,0x3e17e5fb,0x3e2ceb36,0x3e3a8ad2,0x3e4c27df,0x3e1d2d97,0x3e0147db,0x3dc77ae4,0x3da6a4d1,0x3d788d6b,0x3d16bd73,0x3d33050a,0x3d27a23c,0x3d04b733,0x3d296792,0xbb5409c7,0xbe05a9fe, -0x3e6e9243,0x3eedbe82,0x3f505ee6,0x3d8839b4,0x3ed11b00,0x3f40b707,0x3f461df9,0x3f44ed39,0x3f396754,0x3f46537b,0x3f4906e9,0x3f46b46e,0x3ecd102c,0x3df77361,0x3f595517,0x3ee133eb,0x3e77beb6,0xbddabe54,0x3c83d81a,0xbb5c75bf,0x3ba9b5c2,0x3c70b698,0x3cc7880d,0x3d309ff9,0x3cefd43c, -0x3cb20ee7,0x3c55641b,0xbb1a5ba2,0xbc800b5e,0xbcff5878,0xbcfc8b42,0xbd03c02b,0xbd049203,0xbd107863,0xbd7c1ec8,0x3dea6175,0x3deae939,0x3e24ee00,0x3d3e73ff,0xbd0b1360,0xbe00671e,0x3da255d0,0xbcb51c4b,0xbddfa3d7,0xbde88ddd,0xbddf0809,0xbdbd22d3,0xbdd73ff0,0xbddd7d80,0xbde049e7, -0xbca0a671,0x3d767047,0xbdf32649,0xbcd17dcf,0x3d0b1b5d,0x3e08cece,0x3dd816e0,0x3de3c275,0x3ddbfcde,0x3dd22544,0x3dc7f139,0x3dc01c2f,0x3db0b46b,0x3dabdf0d,0x3dab48ac,0x3db6a2a5,0x3dc7fedc,0x3de48584,0x3debce1c,0x3dee3990,0x3de094be,0x3df81c2e,0x3e231177,0x3e1f1462,0xbd78abb0, -0x3e0106aa,0x3d2bbf5d,0x3d18aa73,0x3d8e7474,0x3d859a96,0x3dcdfcca,0x3db115ed,0x3d78575c,0x3dac3ae5,0x3dac013c,0x3d91f12e,0x3d2fc2ff,0x3d6305e0,0x3d844d9d,0x3d8edc99,0xbc4e2ddb,0x3dfe2786,0x3e0b8174,0x3e0882b8,0x3e02a4db,0x3df29702,0x3ddc1cab,0x3dc5d10c,0x3d96f9d9,0x3d8342f0, -0x3d83d623,0x3d93280c,0x3db3bd51,0x3df0a6c8,0x3e04bbdd,0x3e12f117,0x3e097751,0x3e1c399d,0x3e714785,0x3e4a8927,0x3dee0776,0x3e04656a,0x3d4c0481,0x3d5ea357,0x3d3b5823,0x3d824e51,0x3d14b7b0,0x3da06918,0x3d4d588a,0x3dcc016e,0x3d3ff547,0x3d749407,0x3d45039b,0x3d8bc11e,0x3d61f583, -0x3d79499f,0x3d86afda,0x3de3e337,0x3e17d9a7,0x3e0aa9cd,0x3df6e2a0,0x3dc74f8f,0x3d894510,0x3d30b3fa,0x3ace92c9,0xbc822bdc,0xbc6607e8,0xba5cae55,0x3d5cd1fb,0x3e06c6e0,0x3e1dc794,0x3e2d28e2,0x3e11f38f,0x3e3f8f5f,0x3e8b0371,0x3e34f1f4,0x3dedb25b,0x3e3efda9,0x3de172ce,0x3d80b9a1, -0x3d7d674d,0x3d97f29b,0x3d9061b5,0x3d904732,0x3dc2b752,0x3d88a35d,0x3d907a39,0x3d87508d,0x3da5159c,0x3da0d27f,0x3d87060f,0x3db488dc,0x3dc89e8e,0x3e133a7f,0x3e37bdb8,0x3e399a53,0x3e2c48a9,0x3e15d37c,0x3df42478,0x3db5e72b,0x3ca414c2,0xbbd5ac29,0xbca6b1b3,0xbc87e1c6,0x3cd3acf2, -0x3ddfd70a,0x3e0a0274,0x3e2a3d1c,0x3e254d0d,0x3e5c61af,0x3f35b976,0x3f19a97a,0x3e98323a,0x3e86928e,0x3e4fbdb0,0x3e4305c3,0x3e5a48bf,0x3dfbe07d,0x3db79a0a,0x3d8c0047,0x3d8ae49a,0x3d99363e,0x3d81afa6,0x3d3ad85e,0x3d47aa5a,0x3d7a6d54,0x3da9cce7,0x3d82bcef,0x3cdd7f1c,0x3d57cb34, -0x3d8f1fab,0x3c220534,0xbd4636ad,0xbe22fc06,0xbe8b623c,0xbebf133c,0xbec9153f,0xbed9c2f5,0xbef941b0,0xbe74c6ee,0xbca883dc,0x3e8745c0,0x3ebf880e,0x3eed7cdb,0x3ef928d8,0x3f0541db,0x3f7b5ce5,0x3eae2f9f,0xbb9ebfb1,0x3e0f043f,0x3e21d98d,0x3dcdf99c,0x3de35eff,0x3dafe5c1,0x3de333a1, -0x3dcc4a72,0x3dea37bc,0x3d931e2f,0x3d791666,0x3d353b72,0x3d9f7384,0x3d97f9c6,0x3cf89400,0x3cffa670,0x3ba8408a,0x3df71a80,0x3e3756f6,0x3e37561e,0x3e73bef9,0x3e701c6a,0x3e53dd6d,0x3dfdfc49,0xbd2402ce,0xbe1ed696,0xbe6dac6e,0xbe0f8e76,0xbcd6ab0e,0x3e809452,0x3e80cd48,0x3edb0a4b, -0x3f34595a,0x3f5e84e2,0x3f6453f2,0x3f159922,0x3dd657a1,0x3e6ba00b,0x3d19ac9f,0x3e16c3d7,0x3cf8e32c,0x3dbb232a,0x3db31701,0x3dd3e1d8,0x3e2be80e,0x3dcbca7e,0x3d98f3fd,0x3d057dec,0x3d768736,0x3db862f6,0x3d20fc41,0x3e110d16,0x3e18f4e8,0x3e6534a6,0x3ec09e02,0x3ec50001,0x3ed94c13, -0x3eddf937,0x3edb13e7,0x3ed0e80c,0x3ec27bc5,0x3e9aee01,0x3e1e0aa9,0x3dae89bb,0x3e19b485,0x3eac2753,0x3e7fd248,0x3e5f8b37,0x3e6c5732,0x3f14e5c8,0x3e404463,0x3eee93d1,0x3e9ef4cb,0x3e72345c,0x3de4fbc5,0x3e32cd9e,0x3e049c09,0x3e210611,0x3df6bc3b,0x3e05bcc2,0x3e1f3733,0x3dbd953b, -0x3dba635e,0x3db4bf9b,0x3db5185b,0x3da6a04b,0x3d9d9112,0x3deb049b,0x3da9f5ec,0x3e69e977,0x3ec09dfa,0x3ebc8f7a,0x3ec52d03,0x3eb2bc8e,0x3ebc6efe,0x3ec96013,0x3ec7c90b,0x3ea7f4f6,0x3e4f6dc4,0x3dbcc0d5,0xbc5e687d,0xbd4ea109,0xbda871b9,0xbe0f9569,0xbeaed778,0xbc9f7221,0xbe1386ef, -0x3e2c21c9,0x3e5337f2,0x3e482d41,0x3e280524,0x3e1fa4c8,0x3de52c3a,0x3d5016f6,0x3d826420,0x3d859e76,0x3d9734fe,0x3de6d183,0x3dd5a6dc,0x3d36bd55,0x3c9146de,0x3ba23ce9,0x3cbd279d,0xbb4be57a,0xbd814037,0x3d124869,0x3e316e26,0x3e816be8,0x3ed0f0b2,0x3eca123d,0x3eceb001,0x3ec18823, -0x3eb03c70,0x3e893d08,0x3e203c37,0xbd151da6,0xbe4b6bb5,0xbe9009f0,0xbeba441d,0xbeac9ccd,0xbe9986e9,0xbe682eb3,0xbe4e3f60,0xbdc9bb13,0xbd942204,0xbd4dc3e4,0xbca1e228,0xbceae619,0x3bca7802,0x3d915707,0x3cb0f1e8,0x3b18407e,0xbc0c9ed2,0x3d715fac,0x3da6d8bd,0x3d770754,0x3d3ac178, -0x37926774,0xbd5f9a0e,0xbd25fea0,0xbda9b18c,0xbd53c439,0x3d4c3a2f,0x3de46f60,0x3e933870,0x3ea97494,0x3eafc871,0x3e988557,0x3e822c90,0x3e2f71db,0x3d7d50cb,0xbc7e1f73,0xbdd01152,0xbe721e1f,0xbe9e6f19,0xbea5ee63,0xbea8ae63,0xbe8849d2,0xbe78e483,0xbe58cff0,0xbe222829,0xbdd8eb85, -0xbd14b3df,0xbba68282,0x381dec55,0x3ce15e94,0x3c7ecb1b,0x3c946901,0xbb07a274,0xbbe2f6a3,0x3b8bbbd0,0xbc0214ca,0xbbc5c1f8,0xbc741fda,0xbcec9219,0xbcd6094d,0xbd662193,0xbbc3b63e,0x3d8706e9,0x3d95ad3c,0x3dd60eeb,0x3e079dd9,0x3e3a469f,0x3e7104c9,0x3e4e0bd4,0x3e37b449,0x3e2a2b51, -0x3d91f397,0xbc9d1bc6,0xbde41a52,0xbe33fe54,0xbe833b60,0xbeb0d293,0xbe93ddf9,0xbe723060,0xbe818e4c,0xbe4e4371,0xbe56d43e,0xbe474855,0xbe41a307,0xbe297365,0xbe17acbe,0xbe0b82b9,0xbe160d20,0xbe1251d7,0xbe09be49,0xbdec27e7,0xbdeb0d89,0xbde8ebaf,0xbe005412,0xbe091977,0xbe02af3b, -0xbdffc345,0xbe2ee835,0xbe394e7d,0xbe4a195e,0xbe546735,0xbe664a6d,0xbe7efb42,0xbe87f14f,0xbe8d1813,0xbe926899,0xbe9672e1,0xbe9a9cdf,0xbe9af132,0xbe9dc6c9,0xbe93e60b,0xbe882d3e,0xbe806df1,0xbe7aafaf,0xbe5a6a62,0xbe5a2728,0xbe833fde,0xbe84236f,0xbe4016d3,0xbe6e0a5a,0xbe78d44b, -0xbe49f901,0xbe4ae8ac,0xbe455f42,0xbe3dcfc8,0xbe3ef026,0xbe4087ce,0xbe3aee6f,0xbe6cc9cc,0xbe5ca5a0,0xbe2a2506,0xbe6ef217,0xbe64217c,0xbe39bc8e,0xbe3f0736,0xbe46b9ae,0xbe4bc3dc,0xbe4fc1a6,0xbe51778d,0xbe56d827,0xbe59e619,0xbe5e41bb,0xbe638f9a,0xbe63ac4f,0xbe658d88,0xbe6a52b3, -0xbe64a60d,0xbe633315,0xbe5d2508,0xbe5fed31,0xbe667e10,0x3e02a6c5,0x3df9d3b8,0x3dc84fc8,0x3e17e9d0,0x3e310c48,0x3e2f76bf,0x3e0500e2,0x3e1b0b5a,0x3e2285f5,0x3e21ed26,0x3e1f5c28,0x3e1b6f05,0x3e1bb88f,0x3e1a50fe,0x3e152b66,0x3e16775c,0x3e05e60f,0x3e17a852,0x3e18c325,0x3e0c3bde, -0x3dd2b71e,0x3deacee2,0x3df067d3,0x3dfd5f00,0x3e0208e0,0x3e0488bf,0x3e052de7,0x3e05521a,0x3e032592,0x3dffbb05,0x3dfa39e6,0x3deec9fa,0x3ddc929e,0x3dd18e19,0x3dd9d399,0x3dfb10b4,0x3df27bff,0x3df6d478,0x3e0118af,0x3e64b50c,0x3e032391,0x3e269cf8,0x3e11af0c,0x3dfb4f0f,0x3df0f151, -0x3dd4f037,0x3decb49f,0x3e0907ba,0x3dffbd76,0x3df7a171,0x3def4e63,0x3e00e7f0,0x3e011e74,0x3e052b34,0x3e013ac2,0x3e18d453,0x3de4ebae,0x3de58768,0x3dfe62fa,0x3e0e3bcb,0x3e188883,0x3e1e2e98,0x3e1cb053,0x3e1ecf67,0x3e1c7dac,0x3e12ebe3,0x3e0eee64,0x3e019b69,0x3de29f79,0x3db2541a, -0x3db1df5d,0x3df933c7,0x3df8b01d,0x3d9f0ab1,0x3de8e5b3,0x3e423d91,0x3e2488f0,0x3e3ff7a0,0x3e104f5d,0x3dfc80f3,0x3dd55cec,0x3dcd2f28,0x3db972cb,0x3e001e16,0x3dd760dc,0x3ddf857d,0x3dbd722a,0x3ddb222f,0x3ddeb7d5,0x3df5d1e6,0x3de78898,0x3e03dd3c,0x3dd52a6d,0x3dda3e65,0x3e0ae13d, -0x3e28d027,0x3e3da081,0x3e478132,0x3e406024,0x3e39e84a,0x3e287fa2,0x3e16322d,0x3e1aebd5,0x3e027155,0x3dbc7cfb,0x3d21eac0,0x3d5f1acc,0x3df46fa1,0x3dd3577d,0x3bab9b38,0x3df4fe14,0x3e401413,0x3dbdf72c,0x3e15ed68,0x3dfefe38,0x3daf9efb,0x3d7c8691,0x3d3938be,0x3d4ebc3f,0x3daff85f, -0x3d9deef7,0x3d9ff01f,0x3d847835,0x3da86969,0x3dbe4f9e,0x3db8376c,0x3dd9b77b,0x3def4e67,0x3da2122c,0x3dae780e,0x3de88b3a,0x3e182c2a,0x3e3238f7,0x3e385041,0x3e23af6b,0x3e1bcdc2,0x3e0eab6b,0x3e002fc1,0x3e0b488e,0x3e08e9df,0x3defedfa,0x3d2cf8eb,0x3d1e0177,0x3daab392,0x3d6a7f1e, -0xbe54f036,0x3dc2b3a3,0x3ec77742,0x3e89423b,0x3e8977e7,0x3e5e1ff8,0x3e1069dd,0x3e2f7b2f,0x3e0845a4,0x3dd7987d,0x3ddc6ad0,0x3db1a43d,0x3d9a2508,0x3d38b23c,0x3da8c571,0x3dc8083f,0x3dc68d53,0x3de87989,0x3e09991a,0x3e21c3cb,0x3e4d8af0,0x3e876d8e,0x3ebc38eb,0x3ed59ad2,0x3ee6e147, -0x3ee2ad04,0x3ec2483a,0x3ea93726,0x3e9438a2,0x3e7f9cf9,0x3d30bd59,0xbe6e6c18,0xbebcddfe,0xbeb38b2e,0xbe4acab4,0xbd83f1d5,0xbf36a901,0x3d49533f,0x3ed9c37d,0x3e157de9,0x3dc4a5ad,0x3e0aafbc,0x3dac29ac,0x3db06732,0x3db5e9d0,0x3dd0f627,0x3dd6bc4c,0x3dd44ab7,0x3ddaeaa6,0x3da97940, -0x3db4803d,0x3dcc3511,0x3e0c6a5c,0x3e1e18bd,0x3e351cad,0x3e21e0b8,0x3e063ce7,0x3e275e08,0x3e61dd00,0x3e837e17,0x3e9b5bcd,0x3eb662d7,0x3ecb140b,0x3ecf507c,0x3ec27e84,0x3e8e0e65,0x3e03784b,0xbe0e7a0f,0xbea8ab53,0xbf0c767d,0xbf5429f1,0xbf29f852,0xbf9b5cf3,0xbedc837f,0x3e54a29b, -0xbdb35bc2,0x3e64d250,0x3ccf3806,0x3e4bae9b,0x3dad6f0c,0x3de9520c,0x3dd021b2,0x3e29efcc,0x3d81720d,0x3cf1f792,0x3d3b7a33,0x3dcc6303,0x3e01488b,0x3e1e7f94,0x3e288318,0x3e5dc0f5,0x3e33a601,0x3de8e0b1,0x3e1903a2,0x3e185af0,0x3e184d58,0x3e0cdc50,0x3df4534b,0x3d4e8f3f,0xbbbfd10b, -0xbcc3c9bc,0xbe3910c7,0xbec55dc4,0xbf2a90e6,0xbf3ef4e1,0xbf43452a,0xbf64bb3d,0xbf7d74a6,0xbf5986db,0xbf4f2dc5,0xbe9f2782,0xbe939a62,0x3d046f39,0xbd8b8340,0x3d16b725,0x3aa5ca12,0x3db6b9a4,0x3d5abcd4,0xb98aaa25,0x3dd7f554,0x3e14b421,0x3dabdc84,0x3de03a61,0x3dd4596b,0x3dd46836, -0x3dc5ce7b,0x3e362dac,0x3e316dc7,0x3e016aab,0x3e0e6044,0x3dbb6bfe,0x3dea2f8b,0x3d0538eb,0xbde49fd0,0xbe80c40c,0xbeb1c2c8,0xbebcdb52,0xbed69785,0xbeec342e,0xbf070104,0xbf213166,0xbf28f000,0xbf1cfd6f,0xbf325cbe,0xbef362c7,0xbf0ada35,0xbec9e119,0xbe8de1d2,0xbe6429f3,0xbdc72914, -0xbd955741,0xbc106e53,0x3d1934d8,0x3d3b8283,0x3c328eed,0x3d8778a5,0x3d998ced,0x3d71bc83,0x3d9f8a96,0x3da9b0fc,0x3dee6226,0x3de0ab8a,0x3e03bbe3,0x3e19131f,0x3e358b2e,0x3e1ff02d,0x3cdeb330,0xbd70251d,0xbe09f0b7,0xbe1dc8da,0xbe6183b8,0xbe6b70b5,0xbe54b2e9,0xbda16c6f,0xbd08f3b2, -0xbdaa693f,0xbe4e9c94,0xbeae2f5a,0xbee9730e,0xbef77c38,0xbe808225,0xbe86fda3,0xbe2229da,0xbdc111ce,0xbd25800c,0xbbb2dd7a,0x3b90a5cd,0x3cf631a2,0x3ccfbb82,0x3cbe1ad2,0x3d08eb32,0x3c9f5bfb,0x3cd4d431,0x3cffde31,0x3ca1deec,0x3cd192f9,0x3d944393,0x3d4abf90,0x3d9d25c5,0x3de9ddf6, -0x3da4304c,0x3d6d3ec3,0xbcd40e17,0xbd4a4a7a,0xbd54362a,0xbc87a1ae,0xbcdf894b,0x3b3be9bd,0x3d270ae9,0x3c61a2a8,0xbc8f7005,0xbbb7dc60,0xbdaa8af0,0xbe359c3a,0xbe8753a4,0xbe8b8f96,0xbdf077d9,0xbe0a7628,0xbe2f56e9,0xbe1b1aa2,0xbe286e6a,0xbdea3297,0xbd9db193,0xbd1b0285,0xbd124e39, -0xbc83202f,0xbc4e7abe,0x3ac411b6,0xbb851713,0x3a46d4f4,0x3b871295,0xbbf81185,0xbcc18e64,0xbce9406a,0x3b97b518,0xbda83160,0xbe265502,0xbe2e7abb,0xbe4db31a,0xbe556326,0xbe720336,0xbe86d3dd,0xbe890737,0xbe8ca7dc,0xbe8f2373,0xbe784c26,0xbe57245b,0xbe3ba6b0,0xbe27032a,0xbe0fe12c, -0xbe0b556f,0xbe094be3,0xbcad3306,0xbc1dad56,0xbe1385c9,0xb9cdd4af,0xbd142c00,0xbce577c9,0x3b42ee95,0x3c2499b5,0x3ce7c566,0x3c4418c4,0xbbda74ad,0x3b3e8784,0x3b74d21a,0xb9f22cc1,0xbd2807f8,0xbd531358,0xbd333a1c,0xbd78de6e,0xbdf4306a,0xbd93a785,0xbd8835b8,0xbd912a0c,0xbda57c1d, -0xbd9efc79,0xbd8eb237,0xbd874e81,0xbd7fca31,0xbd637c9d,0xbd505561,0xbd4c048c,0xbd5243c8,0xbd4b7606,0xbd41cd21,0xbd3e0240,0xbd2029e6,0xbd049ead,0xbad0cbbb,0x3d064854,0xbd8a4fa2,0xbde93f96,0xbe49f8f8,0xbc5cd2af,0xbdab01c0,0xbe1ef02e,0xbe24d939,0xbe20313c,0xbe1b6663,0xbe1fa97c, -0xbe23f7bf,0xbe224e76,0xbdaff166,0xbd06249c,0xbe3b54d6,0xbddc5b60,0xbda16f38,0xbc2fb3e0,0xbcf0431d,0xbd03980b,0xbd0a4e89,0xbd2cdb0e,0xbd578c42,0xbd8108db,0xbd59dce6,0xbd3cdf5b,0xbd1dc2b8,0xbd03454e,0xbcc750cc,0xbc89f425,0xbc427afc,0xbbdbe5a0,0xbb2604d0,0x3ac572b0,0x3c6eb69e, -0x3d0b0b0b,0xbbcf0f57,0xbc8abd97,0x3d211b76,0x3d928063,0x3df4d008,0x3d136d16,0x3da539ed,0x3ddcae7d,0x3de2c84b,0x3de5ed54,0x3dea011e,0x3df55d82,0x3df82c8a,0x3df3ea43,0x3daa6f5e,0x3d5fc201,0x3e03010d,0x3db41c2d,0x3d8b3e2f,0x3cb580de,0x3d08929d,0x3cfe7c6f,0x3d0d3a89,0x3d1722da, -0x3d2582be,0x3d348f00,0x3d49c1e4,0x3d6214c4,0x3d80c438,0x3d788504,0x3d5e37de,0x3d36a415,0x3ce97b82,0x3c4946ad,0xbc275a90,0xbc3c515a,0xbd8fde97,0xbd62af55,0x3d69a6d6,0x3b05cc96,0x3d300b7f,0x3d24230b,0x3d0ceb8d,0x3d491277,0x3d327536,0x3d5db8e8,0x3d94be8c,0x3d7ea231,0x3d736fe3, -0x3d6730db,0x3d9264f8,0x3d81801d,0x3d8882ef,0x3d8667d0,0x3dc80d4d,0x3d2c716a,0x3d0edd27,0x3d1d6791,0x3d3f0e81,0x3d4bf452,0x3d656357,0x3d863ced,0x3d9a95c4,0x3db88099,0x3de6a887,0x3df8bf84,0x3de85a6e,0x3da988ca,0x3d3b456b,0xb9dbb591,0xbd6534b7,0xbd8a99b0,0xbe387895,0xbe0507b8, -0xbd80d424,0xbd4288ab,0x3c55942f,0x3cb39f65,0x3d04cf04,0x3d3870a9,0x3d7fa0cf,0x3d730c13,0x3dc0b4ed,0x3d8a0491,0x3db46dec,0x3d713d6d,0x3d99f873,0x3d88c71d,0x3d9d7ee4,0x3db3b547,0x3da05782,0x3d7aae83,0x3d212f10,0x3d305974,0x3d761eea,0x3d94e320,0x3dc2c682,0x3e01148b,0x3e1fcd67, -0x3e4a2dd0,0x3e6caac8,0x3e63fb9a,0x3e3867f2,0x3de21bc5,0x3d1d3a46,0xbd709096,0xbe2b97bb,0xbe3529de,0xbe5fc216,0xbe2f013f,0xbdb207b4,0xbd4d16fc,0xbcce4b6b,0xbb92ff28,0x3ab8d1ab,0x3cf60455,0x3d1f52b4,0x3d5dc0d1,0x3da0d108,0x3da553cf,0x3d9eeb83,0x3d78323a,0x3d8ff982,0x3d92cedf, -0x3dd43656,0x3dadf79b,0x3da8b7d7,0x3d994d00,0x3d5b3aaa,0x3d5cbe7a,0x3da42fe5,0x3db51215,0x3de6f7e7,0x3e1a2383,0x3e3e409c,0x3e6c8d3b,0x3e97a73f,0x3ea8eb18,0x3e976d77,0x3e49671f,0x3db3fdff,0xbd4de42d,0xbe50dea3,0xbe5c0415,0xbeea4969,0xbef3914f,0xbecb9530,0xbe526429,0xbe099546, -0xbd9336b6,0xbd2f7f6c,0x3afd816b,0x3ca7a317,0x3d55a27a,0x3d9724fe,0x3db0c1ba,0x3db6560e,0x3d881a5b,0x3db03263,0x3dba2859,0x3de01fd6,0x3e013730,0x3e0e2c7a,0x3dcd49bc,0x3d20b915,0x3d3ed20f,0x3d81ddbd,0x3ddf19fe,0x3e3da5b3,0x3e934e42,0x3ec401ff,0x3edbbfc8,0x3ee40a30,0x3e44922e, -0x3da3d8eb,0xbc7d411f,0xbdd80b2b,0xbe848c3e,0xbef4605a,0xbf09b76c,0xbdbeb739,0xbef32538,0xbf043680,0xbe7e4085,0xbe2fc87e,0xbda16a51,0xbbf8a049,0x3d2ece17,0x3d665a1f,0x3d9f3f33,0x3dddaf48,0x3dab26b0,0x3d9766fe,0x3d50eaf1,0x3d9d372a,0x3dac896f,0x3db46605,0x3dd398b5,0x3df2fa4f, -0x3dc70903,0x3dedaa8b,0x3e0ad79b,0x3e00f1d1,0x3e01871b,0x3dceae84,0x3d8608c9,0x3bf09de7,0xbd91c1e1,0xbe0c8f26,0xbe924010,0xbec5a76d,0xbeee1808,0xbe4fc249,0xbd2be595,0x3df36b42,0xbd955299,0x3f28bd87,0xbe1664e1,0xbf0dda47,0xbe313c40,0xbea27d10,0xbdd7c3d8,0xbdfe1e58,0x3a3589c8, -0xbab67eb4,0x3d05cca6,0x3dc5b229,0x3daf58be,0x3db13f42,0x3dae288a,0x3dc07440,0x3daf40af,0x3de05542,0x3da228ed,0x3db250be,0x3db3f3dc,0x3d7905d3,0x3d08df53,0xbc0a0df8,0xbde82a5a,0xbe2bab0d,0xbe37ae1e,0xbe4a1cc3,0xbe75aeae,0xbe9af05e,0xbec031f7,0xbed08ece,0xbe9e079b,0xbde6d265, -0x3dd8abb8,0x3f0418c0,0x3f044bd7,0x3f23efc9,0x3ee1a3c7,0xbdb18cfa,0x3dca88dd,0xbe0bd783,0x3d0a3fed,0xbc5aea89,0x3c71f6b0,0x3d4d6aa7,0x3daadc22,0x3ccbcb78,0x3dd6ca71,0x3db0e022,0x3d1e13af,0x3d10810c,0x3d489985,0x3d69388a,0x3d28d1f0,0x3da65b68,0x3c038bcc,0xbd5c89f8,0xbd060c79, -0xbbb71193,0xbcd0b1ce,0xbc6a0c29,0x3c24c7db,0x3db2235d,0x3dc96bae,0x3cfb3c94,0x3da7c2e7,0x3de4c577,0x3e32784e,0x3e481d1a,0x3e258592,0x3e0d1342,0x3eb2ad9e,0x3eade68d,0x3ec6d31e,0x3df5826e,0x3df3248b,0x3dece391,0x3bc82fb1,0x3d487c20,0x3da40871,0x3ba31960,0x3c9d7855,0x3d26e1dd, -0x3d692b37,0x3d73e51b,0x3d77699c,0x3d948402,0x3d87ed60,0x3c769125,0x3d422a74,0x3de8f4c8,0x3ca3bc35,0xbd865561,0xbd973289,0xbdbf985a,0x3c9dcc31,0x3de29065,0x3e3ba347,0x3e81d4d1,0x3e91700d,0x3e8ca8d2,0x3e0e88fc,0x3d7e21f6,0x3d9f8c0f,0x3da8d8ab,0x3e120b90,0x3e58d7c8,0x3e830a76, -0x3e6032ab,0x3e6b6b8d,0xbbc5df84,0x3c8f10cb,0xbcaa7b1c,0x3c265107,0x3d257907,0x3b9ce0d7,0x3d1dd7cf,0x3d2343e2,0x3d3717c7,0x3c6a5fe4,0x3cb3735b,0x3d63ea31,0x3d0feb3b,0x3d244c1a,0x3d26c780,0x3d332519,0x3cca677b,0xbc8655cb,0xbca8834a,0xbd413259,0xbdaa644a,0xbd8af9d5,0xbd3afb28, -0xba920aab,0x3cc9e7ea,0x3c8abc15,0xbbc04603,0xba2f9a82,0x3c085928,0xbca36c2e,0x3b9dcd6d,0x3d873a03,0x3e333efa,0x3e37f15e,0x3e10a15a,0x3dcd15d3,0x3da58384,0x3df8a47e,0x3dbd2c84,0x3d89ea7c,0x3d1dadf2,0x3cb63c44,0x3c5852e7,0x3d2006dc,0x3ca4ae93,0x3d7ec6ef,0x3c041e3f,0x3d1db950, -0xbc595c5e,0x3b6448d0,0xbc16e15c,0xbcea3561,0xbda1cca4,0xbb19533f,0x3d70ca45,0x3c98dee8,0x3cd03b1b,0x3c5826cd,0x3c044047,0xbc12602d,0x3ce16555,0x3d751ca1,0x3db7e60a,0x3da8c99f,0x3da6c618,0x3db35dc3,0x3de3e736,0x3dfe5ea7,0x3e1b10ba,0x3e08d333,0x3e0db9a2,0x3e15d7ff,0x3d3d3c40, -0x3dcf2aba,0x3d9e436a,0x3dabd67c,0x3dcbf484,0x3dc56ffa,0x3ddc5df8,0x3de6768c,0x3dc68f63,0x3de75fd2,0x3de39b6a,0x3dee9f35,0x3dadf520,0x3dd05e02,0x3dbe2b92,0x3dbb0b8c,0xbb2ebc1a,0x3e0ea3f0,0x3e08acc7,0x3df498f5,0x3df4cc81,0x3ddb6ad5,0x3dcbabe1,0x3db2a5c9,0x3de83382,0x3dfaeab2, -0x3e09907e,0x3e14de25,0x3e21ffd1,0x3e29c1d6,0x3e2263e2,0x3e1ca075,0x3e18c57b,0x3e12cc1b,0x3e03bc87,0x3e11a57b,0x3e0884ca,0x3dd42a3f,0x3d27963e,0x3e0aa8f7,0x3dc2d23c,0x3d3781c5,0x3d2ea0d8,0x3d1c447a,0x3d26f16e,0x3d05d958,0x3cfa1635,0x3cf3fdad,0x3dba4ef3,0x3e02bafe,0x388e8c64, -0x3dab3adf,0x3deb1536,0x3e2c5620,0x3e0efdc6,0x3e19f95f,0x3e19733c,0x3e1d3e59,0x3e222a18,0x3e23d988,0x3e20bb94,0x3e1dd134,0x3e1b9a14,0x3e1a7899,0x3e17feb2,0x3e17f00b,0x3e1333ce,0x3e100d22,0x3e0b74d4,0x3e0bb0ca,0x3e1974cc,0xbd2448f7,0xbc59e8ff,0xbc34014a,0xbcd3cc3e,0xbce0c04c, -0xbb7c919e,0xbcf658cb,0xbccaa027,0x3c6dba74,0x3c7ecc72,0x3c941ba9,0x3c8b4986,0x3ca43c30,0x3c9db89e,0x3c91cd1e,0xbca83e20,0xbd15a556,0x3cafcca4,0xbcaa4047,0xbd016e35,0xbd253da3,0xbd07ea33,0xbd1bb3d2,0xbd2d7b7a,0xbd32432d,0xbd3fe254,0xbd53b494,0xbd694cbd,0xbd84da92,0xbd99c025, -0xbda56b6b,0xbda3069d,0xbd9976e1,0xbd5899cb,0xbd0edb6d,0xbc1b7449,0xbc215a26,0x3d3e448f,0x3c14b7d5,0xbd68bc64,0xbc00d877,0xbce95dc6,0xbc870fd9,0xbc819334,0xbb3b756b,0xbba61020,0xbb8888be,0xba7edbf6,0xbbffabc7,0xbc0469cb,0xbc74d1e1,0xbbdbd0f7,0xbc79ad82,0xbc9abd72,0xbc98e288, -0x3bdcf442,0xbd07c4c2,0xbd0fbff4,0xbd28744c,0xbd5f0dc0,0xbd667af3,0xbd83041c,0xbd9b1564,0xbdaad673,0xbdd67b9e,0xbe0d7738,0xbe2e3177,0xbe31301e,0xbe165692,0xbdb68909,0xbd021a7a,0x3d0e7b10,0x3d26ed9d,0x3e25ba5e,0x3d540491,0x3ba889a2,0x3d148b1e,0xbc06b764,0xbaad3c42,0x3c0619aa, -0x3d2ea7a3,0x3d34ca70,0x3d192e8a,0x3d2dbf55,0x3cc8fbbf,0x3d081328,0x3a0531d0,0x3c50a3cb,0xbb1d92c1,0xbc320b87,0xbba2fc00,0x3ac76230,0xbc728da4,0xbd0fc76e,0xbd261ff7,0xbd8fd26d,0xbd994920,0xbdb7d5bb,0xbdf286b2,0xbe09252c,0xbe39b854,0xbe7142e4,0xbe91459a,0xbe947481,0xbe78c529, -0xbe037d1e,0xbc57a4ee,0x3dfd6c81,0x3e0a03c3,0x3e906ab0,0x3dbcf157,0x3ce003dc,0x3da96944,0x3d2223f0,0xbb2da2d8,0x3c8d82d1,0x3d88f266,0x3d8284b2,0x3d8b5c9c,0x3d9968bb,0x3d981d8f,0x3d76ae55,0x3d027d74,0x3d2ec525,0x3ce210f7,0x3d71adc7,0x3cf9c1c6,0x3d67f1ec,0x3c2b2af9,0xbd13d870, -0xbd2346aa,0xbd9c0bfa,0xbd9cd554,0xbdc5c60e,0xbdf05f14,0xbdfd7951,0xbe34d7c3,0xbe8e5e96,0xbed04851,0xbee6f5b3,0xbec1a48a,0xbe49cec4,0xbc815853,0x3e55b8d8,0x3e6bd135,0x3ebed04a,0x3e7844bc,0x3d634175,0x3c5558a4,0x3d82288b,0x3dbeddfc,0x3df73223,0x3d98da11,0x3d9498f7,0x3d8271b9, -0x3d66afac,0x3d80876e,0x3d83fdff,0x3d64d347,0x3d36bb97,0x3ca35fb5,0x3cf560f7,0xbcc0e262,0xbbf08588,0xbca7cfd7,0xbd4165be,0xbd715806,0xbe1a5c74,0xbe339834,0xbe6e5656,0xbe96f2d0,0xbed634e5,0xbefe349d,0xbf13ff72,0xbeda7f6d,0xbe8eef54,0xbe18930b,0x3c757b31,0x3e2bef1d,0x3ebb2948, -0x3eb7bad3,0x3de2459a,0x3e46554b,0x3dbef849,0xbb679f4d,0x3b2a4073,0xbd442fd8,0xbd37d77d,0xbd2c00a2,0x3a52e3b4,0x3d0f6d93,0x3d9c09b5,0x3da478ff,0x3da1bbcd,0x3d563c24,0x3d77bb41,0x3d48cff6,0x3d673fff,0x3c9a5b9c,0x3d271824,0xbd735021,0xbe0b0e20,0xbe15245f,0xbe5a6576,0xbe990754, -0xbeca7146,0xbef9c9e9,0xbef9932d,0xbef3db66,0xbf0304e7,0xbe81b156,0xbd8c7967,0x3dfdd452,0xbdac24cb,0xbe1c8943,0xbe0f3688,0x3d19053d,0xbf1e7421,0x3da009fd,0x3eafdbc5,0x3da1307c,0x3e439e3d,0x3daf19cc,0x3dc969a9,0x3ca96bd5,0x3d985adb,0x3d6e65b8,0x3cd4572a,0x3dcbfaae,0x3dcc8f10, -0x3ccdefbf,0x3d2bdef8,0xbc8e0104,0xbcd7665c,0xbdbb57cf,0xbdb0d4e0,0xbe02b3bb,0xbe38ee18,0xbdf50ace,0xbd85522c,0xbb853c2b,0x3cdbf4a7,0x3cc5aa00,0x3de818f8,0x3e4ce312,0x3e84b378,0x3ecfaba8,0x3efb4a94,0x3ef94142,0x3e25db3c,0xbe1889e7,0xbf2f3adb,0xbf18bae9,0xbf184a3d,0xbec1282a, -0x3d93bece,0xbe0e9775,0x3d8088fd,0xbd119bc3,0x3ca2bdb2,0xba87b04b,0x3d98bf07,0x3d9ce9c5,0x3d243cd9,0x3d97dd82,0x3d628daa,0xbceae2cb,0xbd208210,0xbd3b33f8,0xbda0b85b,0xbd9dc9dd,0xbd932c30,0xbdd3a5cb,0xbc7e9afa,0x3d1b34f3,0x3d8667bc,0x3e187a5a,0x3e77eaf0,0x3ea7c6fb,0x3ec7b5fe, -0x3ef4cf09,0x3f16da30,0x3efd8191,0x3ec5e5c5,0x3e87f7b0,0x3d880788,0xbd064590,0xbe288100,0xbe9031a1,0xbdd75b88,0xbe2cef2c,0x3c714bcd,0xbcb0365b,0xbd1d0a76,0x3d436483,0x3d1a8baa,0x3d27a12d,0x3db6e02e,0x3db666c9,0x3db426c1,0x3d926640,0x3d8314ee,0x3d3f8798,0x3c2c5277,0xbca4402b, -0xbccd4981,0xbd906ad4,0xbde4e24c,0xbdff09d9,0xbd6e99ee,0x3cdf5479,0x3e467df9,0x3e70f976,0x3e8bc922,0x3e8e0a8c,0x3e95ad9d,0x3e8c3772,0x3e7a12ae,0x3e8a17d9,0x3e6461b7,0x3dd85601,0x3abcea5c,0xbda94ddc,0xbe21ccf6,0xbd885f25,0xbd8d88bb,0xbdba383a,0x3de287a4,0x3da6e6f1,0x3dda7cc6, -0x3db9a2e4,0x3d31f1a9,0x3d1b6a55,0x3c935697,0x3d0973c0,0x3d7458f4,0x3d9df3ae,0x3da441a1,0x3d8e0144,0x3dbea3f0,0x3dabbe91,0x3d3b9585,0x3d19defe,0x3ca96fbc,0x3d37b8d2,0x3d827243,0x3dbec010,0x3e2f99a1,0x3e2901e9,0x3e1fc34b,0x3dfc15df,0x3dbfcfb5,0x3daa044d,0x3da16073,0x3d24d7bb, -0x3b1bd545,0x3badf64a,0xb9ce941d,0xbc8449ef,0xbda66610,0xbd25a3be,0xbd01d262,0x3bcc1bbe,0x3cfb6f73,0xbc621890,0x3c7f1553,0x3c9211ef,0x3d21a346,0x3d2f758c,0x3d897e9c,0x3d2f1749,0x3d8f1477,0x3d3fd5fc,0x3dc80388,0x3dc3ada9,0x3e065cb5,0x3e1b7218,0x3e3ed689,0x3e4e5082,0x3e56eaf1, -0x3e60074d,0x3e4bf865,0x3e4bb2d0,0x3e374586,0x3e36c06d,0x3e3b54db,0x3e491ff9,0x3e1ced08,0x3de594da,0x3d92e5c3,0x3d8535c1,0x3d73ee02,0x3d4ee612,0x3cbe38d3,0x3beb45f2,0xbc0e47f2,0xbbf7a850,0xbbeada24,0xbc2f7383,0x3e00ed78,0x3ce96cdd,0x3d8aae93,0x3d6b38f8,0x3cd94320,0x3cf4cfe1, -0x3bebc83b,0x3ca16eab,0x3d2b9230,0x3cde6e16,0x3cc21382,0x3ce522c7,0x3d887304,0x3d8de90e,0x3d9f1fe9,0x3db07126,0x3e295592,0x3dc22232,0x3da8b6ae,0x3dbefd7b,0x3dc28180,0x3dc40478,0x3db3b037,0x3dad1846,0x3d6c2ba9,0x3d365a30,0x3ce55ee6,0x3c734e02,0xbb13da5c,0xbc85b5a9,0xbc2e286f, -0xbbf901cf,0xbc10eed2,0xbbb8d277,0x3c454e91,0xbc75f63b,0x3d3c2486,0x3db3b751,0x3e170551,0x3ca94ba6,0x3dad770b,0x3e1051f8,0x3e169d45,0x3e172ab9,0x3e10c6ef,0x3e19937a,0x3e1dd548,0x3e1acf91,0x3dc80346,0x3d56e980,0x3e344178,0x3df8abe6,0x3dbe4bce,0x3ca586bc,0x3d2043c3,0x3d09e84c, -0x3cffb4da,0x3cfcf542,0x3d02e139,0x3d1260ee,0x3d00e682,0x3ce16b9a,0x3cbf17b3,0x3c8af414,0x3c476c1c,0x3b96b44c,0x3bc91878,0x3bbfb65e,0x3be047ff,0x3bb9a7c1,0x3c660a72,0xbcd8b2f0,0xbc824e46,0xbcdf9f77,0xba02258b,0x3b914f86,0xbc0a8434,0xbbf30d09,0xbbbd96d7,0xbc76d548,0xbc626f65, -0xbc7d798d,0xbc9b9ef8,0xbc947169,0xbca278a6,0xbcc2486a,0xbc6acc9e,0xbc855e29,0xbcf3e3aa,0xbca7dbde,0xbcb4722d,0xbd057816,0xbd02bee2,0xbd05a587,0xbd01d4d7,0xbd056652,0xbd05882f,0xbcf8756b,0xbd02bb6e,0xbd026016,0xbd010063,0xbcf9454e,0xbcfc3f9f,0xbd064520,0xbd181ad4,0xbd11decb, -0xbcd73b31,0xbcbba45d,0xbc9aac0c,0xbada57a5,0x3d92426d,0x3c742e09,0x3cfb2886,0x3c8043e6,0x3be22d97,0xbb231d10,0xbb03f3f9,0x3b21ad56,0x3ab3fb77,0x3aff43f9,0xbb46051b,0xbc08684e,0xbc55a018,0xbc9f70e7,0xbcbda665,0xbcefd2d8,0xbcfbb035,0xbd30c4cf,0xbd41fd84,0xbd3cef70,0xbd2dbc02, -0xbd283bd0,0xbd1c2346,0xbd0ca581,0xbd2ab887,0xbd33f5e0,0xbd2ee685,0xbd243261,0xbd3441dc,0xbd437e3d,0xbd88bd3d,0xbd7c312a,0xbd0c16ef,0xbcb03ad6,0xbd50005a,0x3c345e2d,0x3da80308,0x3d3e5c1c,0x3d976813,0x3d3300b0,0x3d0a7101,0x3c8375c1,0x3ce5d63f,0x3cb52645,0x3cc28632,0x3c8ff931, -0x3c8a77aa,0x3b117f6b,0xbb2d63e1,0xbc7210d2,0xbd030624,0xbd0d8949,0xbd323216,0xbd80beec,0xbd93846d,0xbd94c588,0xbd88aecb,0xbd973429,0xbda331ad,0xbd9e5906,0xbdc97234,0xbdd230a7,0xbdcc979e,0xbdabfd85,0xbd899079,0xbd7b5cc0,0xbdcb1ee5,0xbdd2b734,0xbd5f606e,0xbd254e28,0xbdafa093, -0x3d6c906d,0x3e2a5213,0x3db9d065,0x3decdd53,0x3de36281,0x3d9f979b,0x3d4985ca,0x3d46c1c9,0x3d468d13,0x3d6f30fd,0x3d7948ee,0x3d2f9b16,0x3c270e33,0x3c8ce7cb,0xbb2a776d,0xbc91c7c3,0xbd0ed84c,0xbd2a15e4,0xbda02b6e,0xbdab3886,0xbd9bf5a6,0xbd890ad2,0xbd8d4365,0xbd8998dc,0xbd8faac2, -0xbde68459,0xbe07afa6,0xbe05c448,0xbddfe531,0xbdbb97a4,0xbda2bd4b,0xbe17e2f9,0xbdf8a57b,0xbd3d3268,0xbcc1b16b,0xbefb201e,0xbea40701,0xbd885212,0xbd9db79b,0xbd8d247b,0xbd46e861,0xbd5d5496,0x3ca3f9b4,0x3d49f540,0x3d661d3f,0x3d6877e2,0x3d6ef07b,0x3d67f0cf,0x3d31f78b,0x3cc715dd, -0xb9b7b230,0xbbdfb41a,0xbd305392,0xbd86796c,0xbdf1fb33,0xbe176c93,0xbe2b38f0,0xbe446b96,0xbe55ec2c,0xbe82cfe9,0xbea7ecb2,0xbe97d950,0xbe85ebeb,0xbe324ce1,0xbdcfc71e,0xbd83b34c,0x3c32a090,0xbe0f24c1,0xbe90a9a9,0xbeed83ee,0xbedef99d,0xbee3300f,0xbeaa3a89,0xbe0d1ab9,0xbdb307d4, -0xbd89a582,0xba8272ca,0x3c3f8c81,0x3ac15898,0x3c14a01d,0x3d0a8d22,0x3d3007df,0x3da11e14,0x3d9a9f9f,0x3d146d53,0x3ca64a14,0xbbea2f91,0xbd46d659,0xbd96d764,0xbe00545a,0xbdaebe82,0xbd7ec10e,0xbd33bc11,0x3d36ff07,0x3e26b507,0x3e98168e,0x3ed86e8b,0x3efa1867,0x3f0dee81,0x3f2c975c, -0x3ef28b91,0x3e9df536,0x3df82114,0x3da2c3cd,0x3ce9f01c,0xbd8b7c70,0xbea6016a,0x3e9c04ec,0xbeb59e12,0xbee82250,0xbe498acd,0xbe476c52,0xbdce02ea,0xbd7f8d1f,0xbce00374,0x3d46fcc9,0x3d883eb1,0xbc363fc0,0x3d8cfb87,0x3d20702f,0xbd6a1dfa,0xbd8534e4,0xbda25dfc,0xbe07509e,0xbd9a0019, -0xbdbde3b7,0x3bab57fd,0x3e22c58e,0x3e5a680a,0x3eb80992,0x3f027ad6,0x3f1984ae,0x3f1e9ab5,0x3f151c58,0x3f06a47e,0x3ef5c99f,0x3eafe59f,0x3e6b7a21,0x3dcfc552,0x3e6366e0,0x3ead9a29,0x3f307bc9,0x3eddde2a,0x3efcf674,0x3e122708,0xbe4df7b6,0x3d0e7071,0xbd9ca4aa,0xbb57d1d0,0xbc1a287d, -0x3aac3954,0x3ca75447,0x3d00a65f,0xbd2e646a,0x3d5ca1f8,0x3d95cfde,0x3d0169ec,0x3d285275,0x3c352ff4,0x3bd1a839,0x3c2cd2f3,0xbd0f8a24,0x3d9e51d9,0x3df0aad9,0x3dec1e4d,0x3e23bcfb,0x3df43cb1,0x3ddfc83a,0x3dfcc618,0x3d6bab90,0xbcf55bcf,0xbe12f41c,0xbdf50e03,0xbe00d34c,0xbe0f1fd4, -0xbd1058d4,0x3d85d8cc,0x3e9db44a,0x3e8af619,0x3daf587b,0x3db132bc,0xbce1f6f4,0xbd07d026,0x3b2d481c,0xbc8c06a6,0x3b235e35,0xbc4d2ca6,0x3cec60e6,0x3d434d6f,0x3d2ce08c,0x3d10b756,0x3cc1904b,0x3c99f5d0,0x3cb0fabc,0x3d0f84b7,0x3d8879d4,0x3d817a26,0x3cf01bb9,0x3ddd62ca,0x3dc76225, -0x3d7b9d13,0x3c49687b,0xbd557b00,0xbdffe7ad,0xbe4ee5dd,0xbe894c86,0xbe9c3c82,0xbeafb8da,0xbeb2ef7f,0xbe9f8ada,0xbe73cfa7,0xbded3802,0x3b2801fa,0x3e3f1cb1,0x3dd01bd3,0x3d1b5b67,0x3d7bf647,0xbd3c9bfb,0xbcc56fbb,0xbcd78f9e,0xbd25417e,0xbc59c785,0x3c105249,0x3d1c0c1b,0x3d2af897, -0x3ce35294,0x3d5c3c4d,0x3d5a0ffc,0x3cca707d,0x3c9c1b98,0x3c8371f2,0x3c3bf158,0x3d0c1b3c,0x3d86e19d,0x3cb49f6b,0xbc93fcff,0xbcfb59ab,0xbdbfa88b,0xbe018da3,0xbe1b4171,0xbe34651c,0xbe2ad75b,0xbe298688,0xbe254e3d,0xbdfe0d1f,0xbda2d397,0xbd5a4c23,0xbd30695e,0xbd1d4cb0,0x3ba17fc5, -0x3c45ca76,0xbcdabc20,0xbcd314d2,0xbcaf99f5,0x3c3e3c85,0x3c6fe1b0,0x3c59bb47,0x3ba8a65f,0x3b3dd663,0x3a90b92b,0x3c222e76,0x3c5af77d,0xbb08d912,0x3c4cb196,0xbc6e67d8,0x3c97e170,0xbc6f3472,0xbc917aa5,0xbcd1bd56,0x3aa28467,0xbd9a4cfe,0xbde38b72,0xbd9c99d1,0xbd900f0a,0xbda2f9a1, -0xbdcb67bd,0xbdf4b889,0xbdd9820b,0xbdc1a0cb,0xbdaafc14,0xbdb85fd5,0xbdced370,0xbde72a1a,0xbdbd36fe,0xbd9f62f3,0xbd9ba2e9,0xbd6e4b18,0xbcf1eda8,0xbd036120,0xbd5b34e7,0xbd430402,0xbd4f202c,0xbd246aaa,0xbd087ff2,0xbd03995f,0xbcc5d551,0xbcc62a59,0xbc6fb2e1,0xbc7d05db,0xbbf78a70, -0xbbc96e74,0xba98b496,0xbc8b6c64,0xbc82e800,0xbc6e2d7e,0x3cb953c9,0xbd4b9f26,0xbd36a9b5,0xbd48e7e8,0xbd66532a,0xbd5cbc94,0xbd3f8896,0xbd2b83e4,0xbd257004,0xbd28efe3,0xbd1dc2ef,0xbd17f516,0xbd03b618,0xbcfac32d,0xbd061b0b,0xbd108e11,0xbd04561e,0xbcff467c,0xbd1d19ee,0xbd0b9a20, -0xbcf245c2,0xbce66922,0xbc4bbb3a,0xbd0aa8c0,0xbd039914,0xbc972089,0xbc8954f4,0xbc6f4837,0xbc52730c,0xbc04b3b9,0xbbce952f,0xba8b1ff7,0xbcb2fca7,0xbd0b2f31,0x3c234c9a,0xbceff636,0xbd32b431,0xbd7b9e82,0xbd456354,0xbd591f17,0xbd5372d9,0xbd5c0fa3,0xbd6d1d92,0xbd7e40d4,0xbd74aa29, -0xbd69cede,0xbd61bb69,0xbd53f818,0xbd47a5d0,0xbd356d13,0xbd2c2dff,0xbd21d884,0xbd1c6516,0xbd1c635c,0xbd3459fa,0x3ab9d7d8,0xbcaf4268,0xbc3ae665,0xbd4ba1da,0xbd580a68,0xbd299761,0xbcef03c7,0xbd3027c4,0xbd47b6f0,0xbd3db155,0xbd355ffd,0xbd27c4ce,0xbd304f37,0xbd3740ec,0xbd310ac6, -0xbd2fb899,0xbccd56aa,0xbd519d74,0xbd3503d6,0xbd006cc4,0x3c993031,0x3b985ec2,0x3c1d8d94,0x3c635dac,0x3c86d8c4,0x3c9af57c,0x3cb0c4e6,0x3caafa23,0x3ca9d4fa,0x3c984176,0x3c8b87bc,0x3c629a40,0x3c585056,0x3b20e7a6,0xbc023838,0xbcef9d7d,0xbcb23e5a,0xbd94beca,0xbd973fad,0xbd9b42c3, -0xbd0d7107,0xbd172462,0xbd0f45c7,0xbca7faf3,0xbc61077e,0x3c0c0701,0x3b45becf,0xbc5944d2,0xbb3d1b73,0xb98c7cb7,0xb9b20437,0xbc9d755c,0xbc895404,0xbc9c94ae,0xbc430539,0xbd48756e,0x3c53ca8a,0x3cb9a461,0x3cc1a576,0x3d16d19d,0x3d2ad4f1,0x3d409004,0x3d4c5b12,0x3d388fb0,0x3d1f45a0, -0x3cf28983,0x3cf762ee,0x3cd05148,0x3c9595b9,0xbc02e1f9,0xbd293ca5,0xbdcb59f6,0xbdb4c37f,0xbe01b050,0xbe05fd01,0xbdeef8fe,0xbdb02ff3,0xbd5c02d5,0xbd0b3ebf,0xbcd53d53,0xbca39318,0x3aeb41b2,0x3c9d744b,0xbb9433a4,0x3c78381a,0x3b527917,0x3c8a8087,0xbc907129,0xbc85f581,0xbc029bb2, -0xbc5d38fd,0xbcdaefbb,0x3c7cfe24,0x3d27ebcd,0x3d325142,0x3d93e1ff,0x3db1f765,0x3dd2ef9c,0x3dee8133,0x3de711d4,0x3ddf9144,0x3db9274f,0x3daef25f,0x3d9184cb,0x3d8da153,0x3c51ec9f,0xbd3bc0db,0xbe31dbe2,0xbe141adb,0xbe5f7623,0xbe65abab,0xbe3d80f8,0xbdc3a1e7,0xbd950931,0xbd320971, -0xbcbfead4,0x3c23176c,0x3d4a1c1e,0x3d5cd972,0x3d32a4e4,0x3d4e0185,0x3d121055,0x3cdf5830,0x3b66e7b4,0xbb0955e7,0xbce0adcd,0xbbc5c93d,0xbd1ba2b8,0x3cfdc0ff,0x3d8eee48,0x3d8a9d87,0x3dd25a2d,0x3ded87bc,0x3e058250,0x3e086cf1,0x3ddec660,0x3da14c6b,0x3d2730f9,0x3d6d55c0,0x3d86d1f2, -0x3d57bd51,0xbd020c15,0xbe224b96,0xbeb4c59d,0xbe9a5a8a,0x3e58637f,0xbb2031ad,0xbe501615,0xbdd9e512,0xbdcd2293,0xbd945788,0xbd12a08d,0xbd7e81f9,0xbc8858ac,0x3cc1b5ad,0x3d0e8a9c,0x3d6f9452,0x3d822f27,0x3d3c40f1,0x3cef2019,0x3c9d2c70,0xbbd1e514,0x3c25e885,0xbd16c4d4,0x3c33c12a, -0x3db6ce0b,0x3dd9ff34,0x3e4bbd47,0x3e7ede92,0x3ea9fe61,0x3ee1ada8,0x3efbe0e8,0x3f067fc8,0x3f0604f1,0x3ed8f458,0x3eb1aeaa,0x3e866a54,0x3eac2ab9,0x3ebc2f4a,0x3eb7b07a,0x3e48107e,0x3f09778e,0x3e2055bb,0xbdbbcfbc,0xbc7993db,0x3c0438f5,0xbcd70a2c,0x3a949a3d,0x3bf869b0,0x3ca78040, -0x3ce0bf11,0x3d1f2d36,0x3d821575,0x3d655c00,0x3d091202,0x3d16c12e,0x3ca6a528,0x3b577c91,0x3c422fd3,0x3c8edc97,0x3dbde67a,0x3e0f619b,0x3e247c15,0x3e42b580,0x3e8e74ad,0x3eae04e9,0x3ec8e3c3,0x3eb76416,0x3e8de0f3,0x3ddd2251,0x3d946889,0x3ced96e6,0x3d21ecb7,0x3df6ae7c,0x3e30c9fe, -0x3ea22d3e,0x3ee31275,0xbc2682ac,0x3ec65ee2,0x3e9afb3b,0x3e302fad,0x3dc2bcbf,0x3d9cac8a,0x3c463704,0x3ab3bdeb,0x3d4614b8,0x3d6db04b,0xbca720cd,0x3d486593,0x3cf6e24e,0xbc559192,0x3b4249e1,0x3cc97a73,0x3d38baf5,0x3d4b1bd6,0x3dae6eea,0x3d379e7d,0xbd8a7f0e,0xbdc3b70a,0xbe48e1e7, -0xbe9b66a0,0xbec56afe,0xbed2a4d1,0xbefc6085,0xbf011a41,0xbefa1c63,0xbec4ecbf,0xbe9d0647,0xbe2808d0,0xbe802e20,0xbe9f140e,0xbed3eb50,0xbe5a043f,0xbea3d952,0xbcad178f,0x3e55a962,0x3c916840,0x3d585477,0x3cf2f243,0x3d307407,0x3d2bbfc9,0x3d517cff,0x3d4b7e50,0xbc4b8e27,0x3d2ae728, -0x3d2269f9,0x3d199e25,0x3cca6294,0x3ca67e47,0x3d27e71c,0xbc1fd422,0x3d25d667,0xbd7fe705,0xbe50a2ad,0xbe70efa6,0xbe95d76b,0xbea6d258,0xbec3d821,0xbeda8ed8,0xbed8305e,0xbec3bae7,0xbea698fa,0xbe91501a,0xbe658abd,0xbe15d0b1,0xbe26daa4,0xbe35e2fe,0xbea0a64c,0xbe50d5f9,0xbe0f81eb, -0xbe08f64c,0xbd0ceb58,0xbc586c3e,0xbba4174e,0x3c284448,0x3c2f57e1,0x3cd9f0e7,0x3cc580f7,0x3cceee5b,0x3c668793,0x3c104fb2,0xbc0039e2,0xbc37176e,0xbc1b096b,0xbbdac2c4,0xbd1b86c4,0xbc35dfb0,0x3d5a3d54,0xbd9b314b,0xbe0ef684,0xbe2c8504,0xbe6e1471,0xbe74d24a,0xbe74aab0,0xbe498e16, -0xbe266410,0xbdcfc1c7,0xba8627ca,0x3cc67af7,0x3cce9c3e,0x3c5d987e,0xbbacd4cf,0xbd326f7c,0xbe2cf9e8,0xbe0fdceb,0xbd817a18,0xbda033ad,0x3b057245,0xbc9663e8,0xbc8d9be9,0xbab4c731,0x3a7cd3bd,0x3c8bf83c,0x3c8ebb17,0x3c67987b,0x391b5b01,0xbbf08d63,0xbc2e1b46,0xbc4a74be,0xbd260709, -0xbd8272ee,0xbd8c0b19,0xbdbefdb5,0xbddcf6ce,0xbdebb35c,0xbdf1dc3b,0xbde6cbff,0xbdabe0cc,0xbd219e23,0xbca96dd8,0xbc1a8a71,0xbc1636b6,0xba83dc42,0x3c46be27,0x3bc67c5a,0xbca9114e,0xbd79025b,0xbd6c3c06,0xbd0fc9ff,0xbce6304e,0xbd464288,0xbc12dcd3,0x3c261dbe,0x3b66acea,0xbc63a24e, -0xbc18d3d8,0xba02b157,0x3c1bcbb8,0x3c73ed93,0x3c8ce98d,0x3c5ba48e,0x3cc81d2a,0xb9fc9cb9,0xbc7d0b60,0xbcf82cfd,0xbd3da139,0xbd63b066,0xbd912859,0xbda07c9d,0xbdc11d57,0xbda88877,0xbd6ffc2e,0xbd673ec5,0xbd3dfddf,0xbd3443e5,0xbd038284,0xbc8c13d1,0xbcf48a3e,0xbd162648,0xbd314751, -0xbd152527,0xbcc118dc,0xbbb4eee8,0xbc83b743,0xbccf6e7c,0xbcb68eae,0xbc392625,0xbcd3b610,0xbcdc773a,0xbc54193a,0xbc22a396,0xbc1217b1,0xbc563ffd,0xbc65de02,0xbc646c13,0xbc8cfbf4,0xbcc7fb72,0xbcd43f8a,0xbcfb326a,0xbcf2b529,0xbcfa9267,0xbd13a1b2,0xbd259ba3,0xbd3cc43e,0xbd45306b, -0xbd743eb3,0xbd7cf485,0xbd6ec0c6,0xbd6bf136,0xbd59e75e,0xbd46aaa2,0xbd3faa00,0xbd356d1a,0xbd2286e8,0xbd0bfa52,0xbcfd84e9,0xbcd3ad62,0xbcbd43c1,0xbc8d6827,0xbc8ae5ba,0xbc60ed96,0xbc90358f,0xbcaaf8a9,0xbcc0855c,0xbcd86759,0xbd0b1b49,0xbd12692a,0xbd1e8a12,0xbcddb598,0xbcf0187e, -0xbd06acc0,0xbd0a1b0e,0xbd037861,0xbd08e302,0xbd034d78,0xbd052c0d,0xbd074828,0xbd25beb2,0xbd16a156,0xbd30ef5e,0xbd3982f6,0xbd2db78a,0xbd0ae663,0xbd06d92d,0xbcf5ebf7,0xbce8557e,0xbcdba40f,0xbcc8c86d,0xbcb7b4e9,0xbcaa60c8,0xbc9f551b,0xbc90d413,0xbc8cc1fe,0xbc8ba22a,0xbc8ab86f, -0xbca32761,0xbcb5df3f,0xbcbb8943,0xbcc0e114,0xbcf58f99,0x3dda5394,0x3dda319e,0x3deeee4b,0x3dbf8e18,0x3d7ff1d5,0x3bde146c,0x3dce670b,0x3d8d14a1,0x3cc4c4a7,0x3ce1441e,0x3ce65efa,0x3cc5e198,0x3cb758b9,0x3cb1cb2b,0x3cbb12ee,0x3d93d847,0x3dbff05c,0x3c760f3c,0x3d92042d,0x3db86dae, -0x3db9bc5f,0x3db90d6a,0x3dbe17ab,0x3db8994e,0x3dbecf3c,0x3dc0c91c,0x3dbe9fec,0x3dc3e7d5,0x3dc87422,0x3dd0531b,0x3dddb422,0x3ded1530,0x3e04d6ad,0x3dffe864,0x3e0008fb,0x3e01185e,0x3df308c4,0x3e1c8608,0x3e0d0bbe,0x3c60b4b6,0x3dadb65e,0x3d78f48d,0x3d87afe0,0x3d9ffae1,0x3d8bf9fa, -0x3db7b0c5,0x3dba6168,0x3d9849cb,0x3daf43d4,0x3da5425b,0x3dafc520,0x3d79daa5,0x3d8097e9,0x3da26b45,0x3d936d96,0x3d7ff1f0,0x3da79925,0x3d9d9c0c,0x3da3b65e,0x3d926d77,0x3d9e4ee2,0x3d9e796a,0x3d9cd4b4,0x3db17367,0x3dd0d840,0x3df9dec7,0x3e133d27,0x3e291f18,0x3e46c19c,0x3e3e767f, -0x3e3e70c4,0x3e442dbc,0x3e320074,0x3e6691b9,0x3e17b80a,0x3d8684dc,0x3d9d0a31,0x3cf78aa8,0x3d07722c,0x3d1a559b,0x3d0d910c,0x3d581918,0x3d799bdd,0x3d118168,0x3d5cc2ea,0x3d1ea1f3,0x3d807cd4,0x3d0472d7,0x3d102805,0x3d3a8324,0x3d369343,0x3d8dd342,0x3d6696ac,0x3d7365d1,0x3d8e62b1, -0x3d616672,0x3d9861fe,0x3da70691,0x3dafdfb7,0x3dda5319,0x3e01b62c,0x3e26c087,0x3e4a9a4b,0x3e69b2aa,0x3e8da219,0x3e849564,0x3e887037,0x3e92327a,0x3e7a7ba2,0x3ea26f58,0x3e2a6ffd,0x3d30c570,0x3d508ac7,0x3d24ff79,0x3c862a59,0x3ccbb8fd,0x3c350185,0x3d3947e8,0x3d54119f,0x3cec5f32, -0x3d0f00b8,0x3cfed9ec,0x3d0ce8fd,0x3c01bc9a,0x3ab62673,0x3cc970e8,0x3cca0a0b,0x3d506f17,0x3cbdc1f6,0x3c112c19,0x3c70a775,0xbc13856f,0x3c6f4247,0x3cbf8381,0x3d04ef34,0x3d9ac210,0x3e0d2811,0x3e63570b,0x3e8ef765,0x3ea624ef,0x3ec74324,0x3ebbee36,0x3ebb7fe7,0x3ecff923,0x3eaed997, -0x3e7eba48,0x3e998ea8,0x3e8e9ac0,0x3e2e41c4,0x3e0e51b4,0x3dc0f5bd,0x3dacaab6,0x3d90b9b9,0x3d30c998,0x3cd64ca8,0x3ca911a9,0x3d329d3e,0x3d446117,0x3d3981a6,0x3d0217fa,0x3cbe5583,0x3d09aea5,0x3d0b5df8,0x3da10f40,0x3daf1858,0x3d8bf837,0x3de6ec48,0x3e07c023,0x3e208f4e,0x3e3c5ad3, -0x3e610b7c,0x3e7179b2,0x3e5d2def,0x3e0383e0,0x3e14875f,0x3e0e5429,0x3dd3c32b,0x3e09e14c,0x3e2789fa,0x3e6eb6c9,0x3e9586c2,0xbed556b4,0x3c5a7725,0x3e448bf6,0x3da9be85,0x3dac4c36,0x3d8d9906,0x3d3471e0,0x3d01ce8d,0x3d1d57a6,0x3d252d89,0x3d1739c7,0x3d654e47,0x3d414ff8,0x3d2a40ca, -0x3cee1a76,0x3d03077b,0x3d86a671,0x3d8b0000,0x3dac15ca,0xbce11ec8,0xbe12583e,0xbe57f55c,0xbea27ef2,0xbec3696e,0xbee43def,0xbef6403b,0xbef9fc05,0xbeda68a1,0xbe966634,0xbe492b49,0xbd996815,0xbca699b4,0xbdc014a2,0xbe4d7400,0xbecdcbc9,0xbed633fb,0xbe32c811,0xbe85002a,0xbda775c1, -0xbd1638d2,0x3d079d4d,0x3c9a540b,0x3d814568,0x3cbbe84b,0x3d9be67e,0x3d9f0505,0xbbe4eff5,0x3d88e3ea,0x3d84dcf6,0x3d680874,0x3d3bc607,0x3cbedc9b,0x3d0ad379,0xbc94b9e5,0xbd7b8071,0xbddf5fb6,0xbe0d61e9,0xbe1d5672,0xbe31e6c4,0xbe235194,0xbdf62147,0xbd3d67e6,0x3c9626cc,0x3d3799a8, -0x3d8183b8,0xbc37fab7,0xbd5ca9a9,0xbe20f307,0xbd7b4cef,0x3d6832ab,0x3e6265ee,0x3c7387f0,0x3deb522c,0xbd7e6d5a,0xbe26f446,0xbca1370a,0xbc04dbd5,0x3b5ad7fd,0x3c84b30b,0x3ca17eec,0x3d0dfe30,0x3cf4ce41,0xbc54b8d3,0x3c5ac14c,0x3bca2fda,0xbaecae4f,0xbd0dc7df,0xbd6588cc,0xbdb303c1, -0xbd77f558,0xbdbbb252,0xbdaa8d66,0xbd13070a,0xbccd6817,0xbbbfd99d,0x3cde90d4,0x3d682d1a,0x3d6fa905,0x3dee197d,0x3e105314,0x3e1c513e,0x3dddb0ca,0x3d8178d0,0xbc75ce20,0x3d430bff,0x3da9cfe0,0x3e8ad5e5,0x3dadc8f1,0x3deaecf5,0x3d190ffb,0xbca21cd7,0xbc870c70,0x3c2438a5,0xbb7aad56, -0x3caa2734,0x3d440683,0x3d25e59b,0x3cc13c37,0xbbc7c8da,0xbc39f8f5,0xbbb343b8,0x3c8f7c8a,0xbad80992,0xbce167f2,0xbd30383a,0xbd95221e,0xbdfcc598,0xbd883c4e,0xbcf5c42f,0xbce078f9,0x3cabe8b5,0x3d36b382,0x3d8808ce,0x3d8847c5,0x3dad52cc,0x3d482e57,0xbcfb03fd,0xbd1f7e9c,0xbd24881b, -0xbd3127d2,0xbd1a50ed,0xbaeb48e8,0x3dfcda0b,0x3dfc08e5,0x3d9f8aa6,0x3d4780a6,0xbd1c44ba,0xbcf07352,0xbcb13c7c,0xbcb8fa9b,0xbb7c3431,0x3c127a3f,0x3be44067,0x3be3b7ef,0x3c41923f,0x3c958993,0x3c22e358,0x39a74957,0xbb960158,0x3b2a172d,0x3c8dff8c,0xbbaa45b1,0xbd070943,0xbb899bc2, -0x3ba7c7ae,0xbca26d85,0xbd222b07,0xbd5863a2,0xbd2f8714,0xbbbc4c3e,0xbb3743bd,0xbc06d6d9,0xbce04681,0xbd41039a,0xbd09fa23,0x3c690bd7,0x3b54c81b,0xbbc25942,0x3c1fb574,0x3d794e76,0x3ca182da,0x3ba3c3c3,0x3b110f67,0x3ca008c5,0x3c2a0279,0x3c4b41e4,0x3c161d49,0x3c37f54c,0x3a8d0d64, -0x3b619c87,0xbc4e748c,0x3bf843c7,0xba89357c,0x3cb511e8,0xba4f3ab4,0x3be9ed07,0x3a29ae52,0xbb44805f,0xbc8aa934,0xb93b10da,0xbc2747e1,0xbd2ce439,0xbd7fb6e3,0xbd4e436a,0xbd42371b,0xbd523045,0xbd35beda,0xbd15d647,0xbccfa89b,0xbc90e601,0xbc6da87c,0xbc743daf,0x3b8c32a6,0x3caf3cf5, -0x3ce16188,0x3c8ba606,0xbccaec87,0xbcb78be3,0xbd1d2b77,0xbce1ca52,0xbceab7b2,0xbcb86905,0xbc7ca320,0xbc3edba6,0xbc09636f,0xbc09476a,0xbc6a290e,0xbbd9608a,0xbc164439,0xbc21eb1b,0xbc9a4aaf,0xbc54f822,0xbc9a47a5,0xbcc2e00b,0xbd471023,0xbc45bc15,0xbc697597,0xbc8554ad,0xbc9ae311, -0xbced8c1d,0xbd15b83a,0xbd2db41f,0xbd1562bc,0xbd099638,0xbd03a371,0xbd0711b9,0xbd07afaf,0xbd1219c7,0xbd0e1d39,0xbd150712,0xbd0090cc,0xbcf02007,0xbc8e3cc0,0xbc5cd2e0,0xbc5b15ed,0xbc6fa35c,0xbc94b36b,0xbc262f1f,0xbc6348ba,0xbc932069,0xbca8d996,0xbcb7dd2b,0xbcb18c5f,0xbcddf81c, -0xbcebbd45,0xbcf3676c,0xbc8036b6,0xbc330d7c,0xbd09b306,0xbc7eb12a,0xbc2dc2d3,0x3a5a8a7b,0xbc251184,0xbc39d9f5,0xbc5e2942,0xbc71eca6,0xbc7f35fa,0xbc965c52,0xbca3a2a3,0xbcb6a432,0xbcc17433,0xbcc4cc4a,0xbcc34ce6,0xbcc0c1c1,0xbcb037f2,0xbca27588,0xbc9f5240,0xbc901878,0xbc7ecc04, -0xbd0a60f9,0xbc80b5a7,0xbd23d188,0x3cd53012,0x3d84a736,0x3df359e5,0xbbdd32a6,0x3d496359,0x3dd5d085,0x3de47acc,0x3de233a3,0x3dce32e4,0x3de1e2cf,0x3de7e699,0x3dec1023,0x3d414ce3,0xbb68c1f1,0x3df17259,0x3d44955d,0x3c2af2d5,0xbd54f170,0xbd0525a5,0xbd214775,0xbd2c4499,0xbd35ea82, -0xbd3ba93f,0xbd3ba71c,0xbd3e6a97,0xbd3f7fa5,0xbd3cc136,0xbd4af089,0xbd4f7f22,0xbd538669,0xbd460865,0xbd2676c4,0xbc9f7dfe,0xbcc0e769,0xbc1cdd39,0xbb786d0a,0x3defa05d,0x3bbb3167,0x3d0f54c3,0x3d0b3e14,0x3c0dcbe3,0x3b2393cb,0xbc47fb55,0xbb02ba87,0x3c581ee1,0xb9a8228e,0xb9b7e541, -0x3ba74bed,0x3ca8eade,0x3bf58092,0xbb76c480,0xbba03096,0x3d48fabb,0xbd33643a,0xbd2a5975,0xbd31707a,0xbd51668f,0xbd61c653,0xbd68b418,0xbd5c068a,0xbd5ccd15,0xbd6a558c,0xbd79d7a4,0xbd9bc72a,0xbda7bfa2,0xbda35e4d,0xbd9affa4,0xbd69e2f6,0xbc042c86,0xbc4bdb9f,0xbc0a02f8,0x3d2736c8, -0x3dbbac0d,0x3d5c208e,0x3d8757c5,0x3d41eb41,0x3d0f4744,0x3c012b27,0x3d2226c0,0x3c9265d2,0x3cfbf7b7,0x3bbe3a62,0x3d1ff0e4,0x3cb3bc4c,0x3cd12112,0x3b533573,0xbb74f3b4,0x3b07b3d2,0xbc051ae3,0xbd375942,0xbd6ee35b,0xbd89a2cc,0xbdb40f7b,0xbdd3bd72,0xbde8327f,0xbdefbb35,0xbdfda510, -0xbe011b36,0xbe04f6e2,0xbe192af9,0xbe1c0d3e,0xbe111544,0xbdfaf3eb,0xbdb2d163,0x3c350d37,0xbaebae9b,0xbd112664,0x3d9d6263,0x3e091389,0x3d82219f,0x3d6f6ea5,0x3d8eac02,0x3d273289,0xb8c0d62f,0x3ce48287,0x3d1311dd,0x3c17e978,0x3d08b171,0x3ccd5a6a,0x3ca5113c,0xbb06f18f,0xbc905fdf, -0x3b3badc0,0xbc76a0b0,0xbbe2ac24,0xbd40171e,0xbd3e2b34,0xbd4668ad,0xbd94b88e,0xbdb346ce,0xbdc5eeea,0xbdbb0fcc,0xbdbc7af2,0xbddf38e0,0xbe0e2fcf,0xbe4376d2,0xbe4f252f,0xbe456ede,0xbe2ca0fc,0xbdd41113,0x3cd56b83,0x3bfb34d9,0xbe6b07bc,0xbe1d08e4,0x3cb94086,0x3d877edb,0x3c865b48, -0x3c5a6be1,0xbc3b3400,0x3c3f270c,0x3d16ada0,0x3d39eb2b,0x3d067e89,0x3cede482,0x3cd2ced9,0x3d333aab,0x3c4d828a,0xbc03b7fc,0xb9f61dcf,0xbcbf51ab,0xbce095ac,0xbdb653a0,0xbe301370,0xbe6b9471,0xbea13773,0xbeaf5678,0xbec63999,0xbee35c38,0xbee501be,0xbecafae9,0xbe862fa9,0xbe5ff46a, -0xbe2c9f34,0xbdb9252c,0xbd99931e,0xbdbf094e,0xbe0a3afc,0xbe6a372d,0x3dde009e,0xbdff5d4e,0xbe3170bb,0xbd91076e,0xbd83b324,0xbbc9b383,0x3d02bb8c,0x3d955cdb,0x3d8fca8a,0x3d8ae226,0x3d11b8f6,0x3d50fb00,0x3d0efc4c,0x3cd3008c,0xbbd1c9b4,0xbcbc8c63,0xbd29cddc,0xbd861e14,0xbdb52da7, -0xbdcdef42,0xbdd851b5,0xbdca0ffa,0xbd7b807d,0xbe0854bd,0xbe053e80,0xbdad70ee,0x3cb20373,0x3d9784ae,0x3daac1aa,0x3e0f2826,0x3dfa0c3c,0x3d436b01,0x3e2221a8,0x3e594a25,0x3e912dad,0x3e3ca2a9,0x3e07d3ba,0x3dd73d79,0xbd1b1ceb,0xbc6fc465,0xbd209b0c,0xbcb5558c,0xbca39753,0x3ae45589, -0x3cb1d95f,0x3d236612,0xba4074ed,0x3d361af3,0x3d4c8e01,0x3d6f7cec,0x3c2e2063,0xbc4ed99a,0xbce38572,0xbca207a5,0xbcf616e7,0xbc03b54e,0x3d0173f0,0x3d16c052,0x3db8d611,0x3ddbe10c,0x3df3131b,0x3db3aaa2,0x3de985f7,0x3de6129d,0x3d86a29f,0x3daac29d,0x3d70ca66,0x3cabe8ce,0x3e02824e, -0x3db2e850,0xbd86b54e,0x3d034f58,0xbded694a,0x3d75068e,0x3dbbea3c,0x3cfb0a80,0x3c6be8af,0x3c30751c,0x3cc9d751,0x3d676602,0x3d099adb,0x3c90b919,0xbc531c71,0x3c20ef9b,0x3cb313b2,0x3d0cc5a4,0x3cb9d329,0x3c0ddd95,0x3c23f470,0x3b128597,0xbcddabbb,0x3b09ed4e,0x3c8855e7,0x3c4a0076, -0x3c9b4ba3,0xbb741522,0xbc60bd20,0xbc20a11a,0xbd71d621,0xbdc907a9,0xbe004a54,0xbe09fca9,0xbdba4fcc,0xbd193307,0x3cd90b6e,0x3cbb4eeb,0xbdef8e50,0xbdd98ab0,0xbdd6418f,0xbc981120,0x3cdc1e46,0x3d23bbd5,0x3c4677e8,0x3ce766bd,0x3c82a862,0x3bcf4f71,0x3c160ddc,0x3c056ebe,0xbc543ae7, -0x3c722e1c,0x3cd704b9,0x3cf2c7df,0x3cac8f7f,0x3c6fbbc7,0x3c697db9,0x3d02c140,0x3cdb389a,0x3d53ac5f,0x3d0f7f08,0x3c7bc7ab,0xbc888e04,0xbd4bf7c0,0xbd7ff6cf,0xbd857b93,0xbdc4fb71,0xbd8ff840,0x3c232cd5,0xbc8e2dfe,0xbc8c55c8,0xbba2e8e1,0x3d881150,0x3d9e6233,0x3cfc294b,0xbd975e54, -0xbd0e4466,0xbd485ad6,0x3c522048,0x3b8db1f4,0x3be77bb0,0x3cc59d91,0x3cca125f,0x3ca20239,0x3cad2091,0x3c944d47,0x3c991b5f,0x3bea60d0,0x3bc7f925,0x3c767c41,0x3c8c49ad,0x3cb45a8c,0x3c8e7d97,0x3d055865,0x3d265ffe,0x3d0d4ea0,0x3d4312db,0x3d3cf6fd,0x3c97390d,0xbd065153,0xbd924835, -0xbddb75c1,0xbdbf549c,0xbdadaf1f,0xbd95491f,0xbd5cf877,0xbd1a240d,0xbd119c99,0x3c9afbf7,0x3d5c01f9,0x3d85b488,0x3c4056fb,0x3cbfc584,0x3d307ff1,0x3d1f60d9,0x3c98454e,0x3c4d3c9c,0x3c89fbd2,0x3c92bc01,0x3cbf1c8d,0x3ca7a3a0,0x3cdf970e,0x3cbe856a,0x3d071525,0x3cf5710a,0x3ceb9dcc, -0x3cf90540,0x3cd522b7,0x3ca8a083,0x3ceef6a8,0x3d074698,0x3d3c8e83,0x3d3489a9,0x3d1ae408,0x3d260e65,0x3cc9f947,0x3c2de6b9,0xbbf1af0d,0xbbd86bbd,0xbc74d8ba,0xbce1c5a1,0xbccb62f8,0xbcdadbeb,0xbd06c2b9,0xbcbc61b6,0xbc455a9a,0x3c054190,0x3c926005,0x3cd0cfa2,0x3d035284,0xba55b4a7, -0x3d01b8bc,0x3ca63884,0x3cad1a9c,0x3ce06c98,0x3ccfeb78,0x3ced0ff1,0x3cca706f,0x3c8ac6ab,0x3c84679b,0x3c5e0a52,0x3c188c6c,0x3c00957a,0x3c414f53,0x3c928a17,0x3ca94e5c,0x3c2588a7,0x3cd25681,0x3c8f3f79,0x3c43d285,0x3badda2d,0x3a5a8cd9,0xbb032e07,0xbbe15640,0xbc12a0dc,0xbc3326e6, -0xbc405ca7,0xbc55a0f1,0xbc4c7197,0xbc41284c,0xbb0fd6a3,0x3b9efb38,0x3c2bb41c,0x3c8f54f1,0x3ca237d3,0x3cfdd6d2,0x3b60a828,0xbbf1831b,0xbcb65be2,0x3c81a7d0,0xbaae5cd6,0xbc80fe05,0xbc924d18,0xbc92814e,0xbc853c3b,0xbc8ff451,0xbc93bac1,0xbc966aaa,0xbbbf18e7,0x3be3d538,0xbc9c44ed, -0xbbf5ccc4,0x3aae44d0,0x3c876a2d,0x3c31c133,0x3c26ad2c,0x3c04931c,0x3bc9bc6a,0x3b686cdc,0x3a43df5f,0x3b75d00a,0x3bc4d25f,0x3c03447a,0x3c1122ad,0x3c18b8c3,0x3c0773ed,0x3c346996,0x3c580e5d,0x3c81af3d,0x3c976e2f,0x3ca3282a,0xbd43336f,0xbd5b2206,0xbd5544fd,0xbd83f828,0xbd822f7d, -0xbd5d7499,0xbd64fa5f,0xbd71c6cb,0xbd73cc00,0xbd6f4c92,0xbd6bedc8,0xbd605ce1,0xbd605280,0xbd5ea6dd,0xbd570a65,0xbd6bc07a,0xbd4b6746,0xbd705830,0xbd821976,0xbd6c71cc,0xbd0c27f1,0xbd2a4b32,0xbd2719e4,0xbd1af3da,0xbd2584b8,0xbd271381,0xbd28289d,0xbd2226a6,0xbd1f562d,0xbd2203be, -0xbd1b407d,0xbd2363e0,0xbd42f8ac,0xbd3be72d,0xbd4a1c0b,0xbd6f5f4c,0xbd668ee1,0xbdd52a59,0xbdc96e93,0xbd7d2d9f,0xbd7e76fd,0xbd787128,0xbd6ee4ae,0xbd48d94f,0xbd2b49a8,0xbcf4f1ee,0xbcf8927f,0xbd115ee7,0xbd016a13,0xbcea9c94,0xbcdff3e4,0xbd0e4273,0xbd180821,0xbd3d83bf,0xbd39bfcd, -0xbd7ce516,0xbd209e12,0xbd227d62,0xbd29efeb,0xbd0955e2,0xbd244bd9,0xbd30908c,0xbd43afdd,0xbd44c033,0xbd43d314,0xbd4ae310,0xbd272933,0xbd36ff8c,0xbd8b886c,0xbd7b1b7d,0xbd947dfa,0xbdd572d5,0xbddc8166,0xbe032a53,0xbdd8edc0,0xbda3cc65,0xbda1723a,0xbd73bd13,0xbd29ed32,0xbcff4c65, -0xbcde5476,0xbc82239d,0xbb2392a8,0xbc65955c,0xbb2cecd9,0xbbbe2704,0x3ba84b13,0xbc25adcf,0xbc8deff1,0xbd019a0c,0xbd292503,0xbd526049,0xbd080c66,0xbd0adda3,0xbd14688a,0xbc991680,0xbd02a4f9,0xbd13c6a9,0xbd251472,0xbd1ba2fe,0xbd13f96a,0xbd1bc109,0xbcd3c593,0xbd0a3cc5,0xbdb1dcd3, -0xbd918407,0xbdb500fa,0xbe126a39,0xbe07505d,0xbe7455d4,0xbe502a4c,0xbe083fc3,0xbdc76980,0xbdccd0ac,0xbd82e141,0xbd40036e,0xbcbc4823,0x3c87b2bc,0x3cfae156,0x3c8f4f97,0x3ccb6caa,0x3cb49789,0x3cb50d14,0x3ace4a3b,0xbc3cb826,0xbd0ac7e4,0xbd1a5236,0xbd4c4566,0xbd089655,0xbd053207, -0xbd043a6e,0xbbf2c6a3,0xbcd1f64f,0xbd2786a9,0xbd802e85,0xbd9403e7,0xbd8f39aa,0xbd87c5b7,0xbcef6254,0xbd38bc40,0xbe0528da,0xbde876af,0xbe174d1e,0xbe800181,0xbe80db69,0x3ea5c011,0x3e3750b1,0xbbfce8b7,0x3aa1efbe,0x3cf36025,0x3d03221f,0x3d4fde66,0x3ce5bd13,0x3c1498a0,0x3c5cbe1e, -0x3d05e8b8,0x3c8ff446,0x3c73430c,0x3d10db42,0x3b7f9e09,0xbbfccde9,0xbcd2c7ae,0xbd266892,0xbd92ed1c,0xbd85cea4,0xbc667c77,0xbc998eb3,0xbc4077b6,0xbcb41d7e,0xbc8a7d41,0xbc9c09ee,0xbc753fe0,0xbd377f85,0xbdc72bf4,0xbdc774e0,0xbd926c2d,0xbd4daaec,0x3cd656f6,0x3dbeaf83,0x3df7e818, -0x3e87fc84,0x3d9ff84b,0x3e21e2d6,0x3db1e88f,0x3d6c5be7,0x3d81c088,0x3c93fc69,0x3cba324e,0x3ca88a5c,0x3d707206,0x3d6f432d,0x3cc35481,0x3ce0d8fd,0x3cd66672,0x3d4eaf86,0x3c0d1a48,0xbc6aa129,0xbd331c7f,0xbd68d414,0xbd92a70d,0xbd08d3cc,0x3c26d073,0x3d0dd601,0x3d9a113f,0x3dd937a2, -0x3de8750f,0x3dca95e4,0x3d87a3e0,0x3d4da4e5,0x3d5f16be,0xbd89b03a,0xbd7ef62c,0x3d205b97,0xbb0b0cf8,0xbc102765,0xbc15be2e,0x3be0497b,0xbca092a5,0x3ccc41cc,0x3d92b9db,0x3d86d024,0x3d5c9742,0x3d244300,0x3cd943c9,0x3d7153ce,0x3d1756b9,0x3d11407f,0x3a7974c1,0x3aca8395,0x3c196c44, -0x3d907148,0x3c42996f,0x3c2dc3b6,0x3c7e88f0,0x3ce7b004,0x3d18fc43,0x3d00385c,0x3d468df4,0x3cff6bb7,0xbce43ba0,0xbc8b1f06,0xbc527c15,0x3b6192fb,0xbd26c3a1,0xbd7a91e2,0xbd1d46d7,0xbdc62d82,0xbd8d5d0a,0xb79a92c7,0xbd3cdcf4,0xbd328de8,0xbd2d6431,0xbc9a9e2e,0x3df8796d,0x3cd5f543, -0xbc7b100c,0x3c9f5faf,0x3c5176bf,0x3c87d079,0x3c9a7094,0x3d523115,0x3c7a6b55,0x3b6b112e,0xbbcafd81,0xb83daf4c,0x3c63bab2,0x3da044ce,0x3d1f2dcc,0x3d0c1089,0x3d71c72f,0x3d1f0b60,0x3d00f272,0x3ce1afe7,0x3c0681d0,0xbbd56293,0xbbb692bb,0x3a43f3aa,0xbb8f8e2c,0xbc3f5e79,0xbd2adfd9, -0xbd120e20,0x3ca3cd00,0x3d0e180f,0x3d89ef6c,0x3dfb70fe,0x3daabfda,0x3d72df7a,0x3cf0f7fa,0x3d9e75a6,0x3ca486af,0x3d54a205,0x3b81d2e0,0xba5a10b1,0x3c8f09b6,0x3c7a4a13,0x3ccdb83d,0x3cd7687f,0x3c88efa9,0x3ca89e99,0x3cc11760,0x3d2e1e3a,0x3d2a2595,0x3d16aacf,0x3cc5cd1f,0x3cbfad39, -0x3ce35d98,0x3cadcd1f,0x3d08ad28,0x3d060e7d,0x3d05ebc0,0x3d099d78,0x3cb251dd,0x3b178e93,0xbc8c1b86,0xbd50ce28,0xbcf77efe,0xbd4c263a,0xbdc557ab,0xbda05256,0xbd24dbdf,0x3cd87a08,0x3cbf0335,0x3c0985f4,0xbd33758b,0xbcd86e4e,0xbd156855,0xbcfd0396,0xbd21b0f5,0xbc12295a,0x3bb8ddc3, -0x3cb0f771,0x3cea7bcc,0x3c6c61cb,0x3cbcd93e,0x3ccca0fa,0x3cc0fb2b,0x3c479396,0x3c3c2473,0x3c5e7bbe,0x3cce35e1,0x3cf3b9d1,0x3cfee039,0x3ce86b14,0x3ce03b3e,0x3c59edfd,0xbadea83d,0x3bb6535c,0x3cf4780f,0x3d345581,0x3d3c8f69,0x3c56e83f,0xbc5e410f,0xbd199099,0xbd4e0267,0xbcbb06a8, -0x3b8d5f03,0x3d0da916,0x3be8f055,0xbc4cd9bf,0xbc84af05,0xbd10282e,0xbc7da45c,0xbd096ae4,0xbc858a81,0xbc7a59cd,0xbc61a7a7,0xbc53733f,0xbc0578db,0xbb38dbb1,0x3c4001f6,0x3c8f7e43,0x3d14428d,0x3cd50e80,0x3cab2e71,0x3c9612cd,0x3c23b025,0x3bf3afc4,0x3bbc1787,0x3c2ca118,0x3cc164cb, -0x3c774ecf,0x3c86734d,0x3cd7d8fd,0x3ce4b1a5,0x3c4b0b05,0x3b6e96b5,0x39bfee24,0x3c2cec11,0x3cc28372,0x3d118377,0x3cff304b,0x3ce4ddd5,0x3cf950fd,0x3cb05252,0x3c6f3392,0x3be57755,0xbb687b7a,0x3cd8d47a,0x3cdccbd3,0x3d516c62,0x3ce430fa,0x3d1df914,0x3d15b240,0x3d038010,0x3d0632c9, -0x3cf0af2d,0x3d04fb4e,0x3d0f1487,0x3d19902f,0x3d242913,0x3d3354bb,0x3d216367,0x3d1e7faf,0x3d101e6b,0x3cf1067d,0x3cf3fbb5,0x3cd7878f,0x3cebcedb,0x3cffefc0,0x3d0f647f,0x3d282ff6,0x3d3af3a2,0x3d422a63,0x3d3a5f1f,0x3d2e2bcf,0x3d2c923c,0x3d2ff276,0x3d32c4e1,0x3d2eb9f1,0x3d21d96c, -0x3d1686ad,0x3d080918,0x3cfd51ee,0x3ca4d79f,0x3c55b63c,0x3d0cb68b,0x3d2adc70,0x3d2cd82a,0x3ce11533,0x3d1b341d,0x3d23f0a8,0x3d25163d,0x3d201dcd,0x3d16445e,0x3d156c72,0x3d1067c8,0x3d109958,0x3d2a5b0d,0x3d0df850,0x3d08f925,0x3d1d4984,0x3d06e354,0x3cb2710d,0x3cd4560a,0x3ce2fd73, -0x3cefa76b,0x3cfe0896,0x3d06f080,0x3d155afe,0x3d0c1e3e,0x3d059c6d,0x3cf632a1,0x3ce57371,0x3cd54e24,0x3ccab5c7,0x3cbee245,0x3cb58d52,0x3cacde63,0x3ca4f55e,0x3c99d913,0x3b9d86eb,0xbabf6ba7,0x3c53bb5a,0xbbd0d945,0xbcafcfab,0xbd3a514d,0x3b9314a8,0xbc709001,0xbd00662e,0xbcf2a1bd, -0xbce2dd23,0xbce019d4,0xbcf68670,0xbcf967ac,0xbce79ab5,0xbbf039c6,0x3b89f1fa,0xbd173df1,0xbc41acfd,0xbb0fa936,0x3c46a0cc,0x3ba7f821,0x3bf70cfa,0x3c21cf9e,0x3bfe9b76,0x3bc49685,0x3af4490e,0x3b164f97,0x3adf04d6,0x3b2f59b1,0xb8f8f6cf,0xba686941,0xbb23482c,0x399bb126,0x3a0779b2, -0xb8e444ba,0x3a302094,0x3c949338,0x3c7d7d7b,0xbd8048b8,0xbc0606f6,0xbc8b72c4,0xbc0baadc,0xba62c2de,0xbb268f58,0x3c02334e,0x3c010032,0x3bdc1b44,0x3c006e9e,0x3c0682d0,0x3c70de00,0x3ac18617,0x3b15f94f,0x3a2f8079,0xbaeb5286,0xbca688e3,0x3c426a78,0x3bfd902c,0x3c04412b,0x3c602108, -0x3bd85c60,0x3a25dcf4,0xbc11ffb7,0xbc0ada80,0xbbd7ef8a,0x3af6c3d2,0xbb38a9ff,0xbb729730,0xbbd91d2b,0x3b5eae35,0x3c2f4def,0x3c973245,0x3cabfc20,0x3cee0096,0x3c4f3a40,0xbcef0331,0xbb85c77c,0xbccff200,0xbca49f79,0xbc091707,0xbb1f212c,0x3bbdf61c,0x3c566dd1,0x3c226125,0x3c509de6, -0x3beb5946,0x3d03b009,0x3c3b6903,0x3c24e207,0x3bcdaed6,0xbb29438b,0xbb35df78,0x3c568151,0x3c75d63b,0x3c911434,0x3d030502,0x3cc41b16,0x3c896d65,0xba66219e,0x3b635076,0x3b2160a8,0x3bceba89,0xbc4895f3,0xbcac109e,0xbd0538cd,0xbca24100,0xbc72f049,0x3c08cf62,0x3c3ced81,0x3dea267b, -0x3d221f0a,0xbd4cd223,0xbce4bb32,0xbc28ffcd,0xbcc3369c,0xbc02f132,0xbc2a37dc,0x3c3e68ad,0x3ce45966,0x3cbf3144,0x3c9e1486,0x3cbade93,0x3d292303,0x3c558762,0x3c1f7a3b,0xbc367fbc,0xbc0c036c,0xbcbfae04,0x3c019bea,0x3c45f5c2,0x3c01870b,0x3cee3d28,0x3c1b9884,0xbbab1207,0xbced96d0, -0xbcc44dd5,0xbc8be9bb,0x3b83ecad,0xbc6ab45e,0xbc8d4db5,0xbcd40cbd,0x3bb85407,0x3cf82a15,0x3dae393e,0x3dc57f12,0xbc785a36,0x3e038e8a,0x3e689bbe,0x3e207dd4,0x3dbe4e9d,0x3d646c06,0x3d48f81f,0x3d969414,0x3d5ad601,0x3d0417cc,0x3cef657c,0x3c69239c,0x3c23ea89,0x3cf233cf,0x3c833ae4, -0x3c80f45f,0xbbf05d14,0x3c672a1d,0x3c0ffc01,0x3cdb482c,0x3d59798d,0x3d936ce2,0x3dfcac9a,0x3defa221,0x3e0afffb,0x3e2c35eb,0x3e2ed97e,0x3e257db1,0x3e0fdf2b,0x3d3ef752,0xbd3226ac,0xbe090e65,0xbe35899f,0xbe3b1c26,0xbe20f267,0xbd478171,0xbc1ee7bb,0x3c5887c6,0x3d90abbc,0x3d5d9478, -0x3d976ce7,0x3daf7661,0x3d7bd65c,0x3d346d8b,0x3d42a914,0x3d446f94,0x3c5daf17,0x3cf3fc7b,0x3d0ce299,0x3d58e4cf,0x3cc711a9,0x3cd147eb,0x3cde1c98,0x3d2e2198,0x3d1600ed,0x3cbd87fe,0x3c91d006,0xbcdde04b,0xbdc2528b,0xbd8fc249,0xbd8ed4b1,0xbde1a8b3,0xbdcd627f,0xbdd0b89b,0xbdaec247, -0xbb36683a,0x3d64214c,0x3dc87dc0,0x3e098eff,0x3e02998f,0xbc567a86,0x3d1a663d,0xbcb7ec9b,0x3cbff786,0x3d2d29ab,0x3d01a192,0x3d5a43c3,0x3c2b6891,0x3d38ffe3,0x3dc8fe04,0x3d3f3106,0x3cdac60b,0x3c105d6d,0xbc9b53f8,0x38284021,0x3dd8483d,0x3cee2971,0x3c551990,0x3ca71ab4,0x3c17c43d, -0x3c021919,0xbaf58baa,0xbd0f55f0,0xbd2a43eb,0xbd4801db,0xbdbb61f9,0xbdf0f8c8,0xbe0d516e,0xbdb6cd76,0xbd4f1392,0xbc803b63,0x3d24069e,0x3d965423,0x3e015be6,0x3d8ece42,0x3cd6fd4f,0xbc7c0e0e,0xbbc6cb31,0xbd50e188,0x3b7546df,0x3d4af4df,0x3c04f873,0x3cc8dd41,0x3c98d3d3,0x3cedd057, -0x3d5ed5d9,0x3c6fa7c5,0x3a676636,0x3cf5a249,0x3c7fa7eb,0x3cce9b88,0x3d939a90,0x3cd640b7,0x3c823009,0x3ac7b7f9,0x3c36cb57,0x3ce12394,0x3bfe8d91,0xbbe44c7c,0xbb067129,0xb974f381,0x3c5dc578,0x3c66cc8d,0xbc128585,0xbc3c7379,0xbd4d9460,0xbdfc3c04,0xbdbbdd53,0xbda45b54,0xbda7e477, -0xbd896d3c,0xbd82ab95,0xbdf02657,0xbd00cd6c,0x3b6ab823,0xbca2c48f,0x3c8e5ef0,0x3cc61e56,0x3c42fb52,0x3ca63c16,0x3c4c71e3,0x3cb99037,0x3c9fa258,0x3c926f30,0x3cbbe1e8,0x3c51fd78,0x3c370330,0x3c63cb43,0x3c702688,0x3caaefc0,0x3c69f8cd,0x3c804aec,0x3c714668,0xbb9d154a,0xbc605531, -0xbcb13fac,0xbc7684be,0x3c173125,0x3c719528,0x3cd4d623,0xbcd18ffd,0xbd3dd840,0xbd49d56c,0xbd1b4e71,0xbd0c3fa9,0xbd40bff5,0xbcde1c92,0xbd0324db,0xbdac4c51,0xbb145005,0xbcd2b349,0x3c9535e3,0x3ce8f343,0x3d108748,0x3d05d204,0x3cf50e72,0x3cdf882c,0x3d13feeb,0x3d1045ba,0x3d01a18a, -0x3c899cff,0x3ced1837,0x3ce1e43f,0x3cc1440f,0x3c72c6a8,0x3bfc1da9,0x3b23deb4,0x3b931d4d,0x38b76109,0xbb3d83af,0xbc5bfdbf,0xbc5d8fef,0xbbe89067,0x3cc2ab7b,0x3cef74b1,0x3d0bf34b,0x3cc9ed45,0x3d02c797,0x3d45c0ce,0x3d044b15,0x3be87e75,0xbd0b8928,0xbcc54b58,0xbce93386,0xbd3bacdd, -0xbd4c8d9f,0x3b58288d,0xbbee6785,0xbc3a234b,0xbb05ca13,0x3a230c11,0x3b291818,0x3b983cdc,0x3b6dafc2,0x3bc26b8e,0x3bfb62cc,0x3c4520b3,0x3c4e0fe2,0x3cbafd1e,0x3cd6fff2,0x3ce5ce16,0x3ce1b312,0x3cf35454,0x3c8f3be0,0x3c02306b,0xbb703148,0xb9e67272,0x3ba16417,0x3b8a9ee9,0x3c533b01, -0x3cb0d426,0x3d02493c,0x3cc77ce5,0x3c6ae84a,0x3bae9350,0xbafe1113,0xbbb467f9,0xbc4ab870,0xb9b597f4,0x3baf8b14,0x3c7f7224,0x3c2a53ea,0x3b50de43,0x3be732bb,0x3bc8b7fc,0x3c7ebb29,0x3c75b957,0x3ca17e9e,0x3ccff742,0x3cdc2468,0x3ce4be09,0x3cbcce14,0x3cc043c8,0x3ca3ce0f,0x3c9cc8a9, -0x3c95d7da,0x3cabfeeb,0x3c65eec1,0x3c43aab2,0x3c1c2069,0x3c9a9ab3,0xbc0e456e,0xbc0fa4ac,0xbc1404eb,0xbc0b6203,0xbc1bff05,0xbc3d6b51,0xbc3d6043,0xbc60472e,0xbc5e64a2,0xbc76387b,0xbc8e31dc,0xbc9ea99c,0xbcb1f979,0xbc8f6b37,0xbc615349,0xbc1b49b8,0xbbb8d2f1,0x3b50476c,0x3bd94c4e, -0xbba47f40,0xbbc5ae94,0x3b05ab8c,0xba1a2308,0xbb2c37b1,0x3b494672,0x3b7f345b,0x3bdb9285,0x3c0a3c53,0x3c329749,0x3c540101,0x3c671756,0xbab8e66e,0xbb45ad5c,0x3c69294c,0xba64b8fd,0xbb125efe,0xbb2c7306,0x396ada36,0xbac5cc3b,0xbb0542e7,0xbb1f30a5,0xbb25a806,0xbb45358a,0xbb83573c, -0xbb9cb8a3,0xbb9dbf1a,0xbb937ae6,0xbb8a0b62,0xbb9f6e90,0xbb239962,0xba984800,0x39b50245,0x3b0c746e,0x3b956574,0xb99ea73d,0xbb864d59,0xbc4e53ee,0x3ae8b83d,0x3c286751,0x3c831455,0x3b36c9e0,0x3c24d95f,0x3c2fd0de,0x3c2a3368,0x3c2ff871,0x3c30cd3a,0x3c338a7a,0x3c41f341,0x3c7743d9, -0x3c1d4a27,0x3b9eaa54,0x3c40e0f7,0x3c0b85cb,0x3bbba02a,0xbb0c3338,0x3a92ff0b,0x38df06e8,0xba8c8b5a,0xbacbacb0,0xbb0e4c1d,0xbb8761ae,0xbb0e3535,0xba7b7656,0x3a07db27,0x3b12f1cb,0x3b24fe6c,0x396cd79e,0x3af3a933,0x3a95f22e,0xbb1e3a10,0xbb7b561f,0xbcfbc27c,0xbc978cbf,0x3d00d036, -0x3bb5ee0b,0x3c890a59,0x3c2bb3ca,0x3c18fa52,0x3c0bc3cf,0x3b8ba2f4,0x3b3eae71,0x3bca4a35,0x3bbee8cf,0x3c0f0a69,0x3c6e740d,0x3c4e5aba,0x3c230683,0x3bbdc8b9,0x3bf56663,0x3c70d106,0x3adae50e,0x3b162c16,0x3b3f3b94,0xba13aafa,0xbb02169d,0xbb7e3d01,0xbbe1bd64,0x3556dd28,0x3b4418a5, -0x3b304a80,0x3b94df7d,0x3b493430,0xbb962965,0xbba590f2,0xbc81eea9,0xbcfc0121,0xbd05de13,0xbd833531,0xbd14e231,0x3c4b6ee9,0x3ba5fe16,0x3ce709bf,0x3ca6166c,0x3c8ce970,0x3c774f5b,0x3c3cb0bc,0x3c12753d,0x3c4070e1,0x3c32ec4c,0x3c96201b,0x3ce314ee,0x3cbac2b1,0x3c82c2f7,0x3bd52e43, -0x3c558d07,0x3c8cb040,0x3bdbd2de,0x3ba33440,0x3b9096bf,0xbbb3bdd0,0xbc1416bb,0xbc69128e,0xbcd39afa,0xbc7aa235,0xbbe411fb,0xba13651d,0x3c579e9a,0x3c85d6d8,0xbb26b09f,0x3b959473,0xbc053d39,0xbd32c554,0xbd37cd7a,0xbe32a70b,0xbd8117ce,0x3d2c7a06,0x3cdeb322,0x3d10a8c0,0x3d20b90f, -0x3ce4c72c,0x3c8389ca,0x3c555990,0x3c5b5a7e,0x3bf613b4,0x3c67d9b2,0x3cc69bf4,0x3d378d42,0x3cbd302b,0x3c85fae3,0x3c7824f9,0x3c8689b4,0x3cb63bbc,0x3c4e89ca,0x3be7619f,0x3c5b6844,0x3a3215fe,0xbb9ec29c,0xbc52695b,0xbcd5d9ca,0xba80e44d,0x3c3bed4a,0x3c213ac7,0x3ca8cb32,0x3bc02cd6, -0xbcee7fec,0xbcd86c9f,0xbd838eb8,0xbe14f680,0xbe193dd6,0xbd8f9394,0xbd945b41,0xbd9f2376,0xbd19cb3b,0xbc111b9f,0xbbdb43bc,0xbc7d2518,0x3a603b16,0x3d276361,0x3d4e9067,0x3d342d21,0x3c99d1f1,0x3c5713fa,0x3d0da32d,0x3cae6a07,0x3c985866,0x3c03757b,0x3cbfc8d6,0x3d0e1ee2,0x3d37fddf, -0x3b8424e9,0xbcbc182b,0xbd633936,0xbd6f7329,0xbd8a2a5e,0xbdb2b78f,0xbd9704e7,0xbd6d20d0,0xbcfb5517,0x3bc4ce37,0x3d5a4647,0x3e0fcfce,0x3d9ab0be,0x3d879033,0x3dd18c48,0xbcc111c1,0x3ddd46e6,0x3ca9dd89,0x3c632d56,0x3d1fe0ba,0x3c38552b,0x3d3cd109,0x3d6568fb,0x3d3717d1,0x3d3d22f7, -0x3d420165,0x3c492f09,0x3cadfb98,0x3cdd0b50,0x3d587e45,0x3cc6ae9d,0x3cc27297,0x3cad8f5c,0x3cdeec37,0x3ce57649,0x3c57c6f8,0xbbd85aff,0xbbc7c143,0x3bc7118b,0xbd37e8fb,0xbd9777f8,0xbda4093e,0xbdbf81df,0xbdb4e0be,0xbd9bc92d,0xbcccde56,0x3c26f529,0x3d7df2ff,0x3d97c01a,0x3d958dbb, -0x3da32b74,0x3dd86fd3,0x3d3923d2,0xbc626bdd,0xbd02deb6,0xbcd4563a,0xbcff73fd,0xbcba8bfe,0xbac555e8,0x3d9bfbee,0x3cbd0806,0x3b81bdac,0x3ac5f474,0xbc138656,0x3c7f26d3,0x3dc01dd3,0x3ce57016,0x3c37bb45,0x3bee0e6b,0xbc2c41ce,0xbc9106ec,0xbcc3595a,0xbc6018ef,0xbcf8ea8b,0xbd5a5b98, -0xbc7ff9f8,0x3cac49bc,0x3d70b716,0x3d9e6653,0x3d9b6d30,0x3d3c5233,0x3ce99f15,0xbbcbb942,0xbd32fee2,0xbdd10f91,0xbdf02e31,0xbdf2db6e,0xbcbc0e81,0x3cb57d7a,0x3a54fca7,0xbcbd30db,0x3b055b2b,0xbb263b94,0x3c0e3cb7,0x3c293850,0x3d0e2d6b,0x3c23777a,0x3c2dc6e5,0x3d0be079,0x3b9fc327, -0x3c901dc1,0x3d706ecc,0x3c8a2694,0x3bf02c18,0x3b42de68,0x3c057f79,0x3baa34c0,0x3cc1aa73,0x3d88c7d3,0x3d8e42de,0x3d393d9f,0x3d993af2,0x3db9a7d2,0x3dcc2808,0x3da2f215,0x3d57b3d1,0x3cb79722,0xbd2a09e4,0xbd98e81b,0xbd706587,0xbd9fd4c8,0xbd7c64cb,0xbc26707f,0xbbc84b5d,0xbbee706b, -0x3ba135de,0x39805bb8,0x3b686c9a,0x3c3d3595,0x3bd142d2,0x3c56bbe5,0x3cbe0dde,0x3c5e6808,0x3bee3583,0x3b50735b,0x3c682e4e,0x3ca4f6ed,0x3c95c74f,0x3c8b63a2,0x3c6402a7,0x3c69b8eb,0x3ba6fbd7,0xbbd8d3ee,0x3c345c72,0x3c978456,0x3d05eab9,0x3d20b2be,0x3cf92780,0x3c8f1721,0xbb2a726c, -0x3b40e710,0x3b9a35fe,0x3c0e098b,0x3cc3bce4,0x3cdae07c,0x3c9832ad,0xbd3124fa,0xbd8797be,0xbd67851f,0xbcb1c929,0x3c219cb7,0x3c9ed3cd,0x3c233c39,0x3bf6be0a,0x3ca06f97,0x3c1f3a11,0x3c2f5c3a,0x3c53f7f3,0x3c8c3913,0x3c9c1fb1,0x3c57de09,0x3c53a915,0x3c42ffea,0x3c4f5d6f,0x3c91b3a1, -0x3c9a0bb1,0x3c7eda01,0x3c243bd7,0x3c300d14,0x3cdb4844,0x3cbec39c,0x3c5013a2,0x3a448e6c,0xbc1c4ff6,0xbc8d1eb4,0xbc923f4a,0x3bd6c559,0x3c39b967,0xba15d851,0xbcc253e3,0xbcc7b982,0x3b0c6335,0x3c69e5a2,0x3c300fa2,0xbcee3b79,0xbb6d8e75,0xbcb3b5ab,0xbcb9da81,0xbbffa798,0x3b0f507b, -0x3c61cec7,0x3c45da8b,0x3c738ec2,0x3c6dde80,0x3c53e15c,0x3c2605df,0x3c194d18,0x3c417d8d,0x3c8765cc,0x3c922220,0x3c81b6fd,0x3c3533fa,0x3bc65a70,0x3a98aa5d,0xbbc8401f,0xbc6a1b3b,0xbc98e651,0xbca786fc,0xbca2fc4f,0xbbff5e03,0xba086de1,0x3b5050e8,0xbc206f5c,0xbca532eb,0xbcda5003, -0xbbdde96d,0x3c09e5a1,0x3c99385d,0x3b4ef457,0xbba60837,0xbc6ebc14,0xbc8ab901,0x3ca8451b,0x3cb6ecc1,0x3cd05350,0x3c99b37e,0x3cb1865e,0x3c9a53a4,0x3c6ed2c8,0x3ca399e8,0x3c5b3c0e,0x3c93e5af,0x3c9d6729,0x3c940710,0x3c881eac,0x3c9745d9,0x3c474174,0x3c252d35,0x3c1a9373,0x3bf8ff90, -0xbba3a3b5,0x3c25eada,0x3c3cdc16,0x3c1a92a0,0x3bd00bd4,0x3b875179,0x3b4e74ee,0x3bb01ac7,0x3c0b4193,0x3c594fbc,0x3c622ca0,0x3c62cd24,0x3c3c82af,0x3c7028c1,0x3c719f8e,0x3c8344a7,0x3c8d7079,0x3ca2a61c,0x3cbb1eeb,0x3cbb2f05,0x3cddd88d,0x3ccda007,0x3c783d72,0x3ccc419d,0x3cbc377e, -0x3ca0c665,0x3ca8c3bd,0x3c99ad37,0x3c889b6a,0x3c8554ea,0x3c730623,0x3c59b65a,0x3cb64a2f,0x3cd6b17c,0x3bab0a16,0x3c8bff79,0x3ca30322,0x3cbaeed7,0x3c9a459b,0x3c994f66,0x3c9794c0,0x3c8db06c,0x3c7a7617,0x3c413a7c,0x3c6987b1,0x3c81aa28,0x3c964b22,0x3ca4385f,0x3cb6b3fe,0x3cc34ac8, -0x3cc31e7d,0x3cc48f78,0x3cc18dbd,0x3cbcd78e,0x3d05a5fc,0xbc04c111,0xbc2c5ec2,0xbc15175b,0xbc4b587b,0xbc37d8da,0xbb928409,0xbbdbafae,0xbb7e1070,0x3ac132ae,0xb92c98b5,0xba5ae989,0xba8807cb,0x39a00f73,0x3ab39e9e,0x3b1b98e4,0xbaa9669e,0xbb5acca5,0xbaeaade7,0xbb8acffa,0xbbca1f33, -0xbc0670ae,0xbbdedcf6,0xbbf42cc0,0xbc0f7566,0xbc0d4fd0,0xbc140bd5,0xbc0aa2db,0xbc27e834,0xbc3347d1,0xbc4c27f4,0xbc3fafe0,0xbc3c3ff8,0xbc2ff4d7,0xbc47e9e6,0xbc4fe0bb,0xbc425e94,0xbc384b21,0xbc3e1d59,0xbcd738f9,0xbd1568b5,0xbcae3fbd,0xbc8110f4,0xbbfa86ac,0xbb657ea6,0x3ae488ee, -0xbababe5f,0xba48a9d3,0x3991a7b1,0x3a3b3d0e,0x3b15c6fa,0x3b6d0472,0x3bb9dfb3,0x3b3ed66b,0xbbc7b9f2,0xbba98251,0xbb83ab82,0xbc07a1c9,0xbb927838,0xbb8bd4d9,0xbc036197,0xbbb687a8,0xbba260cb,0xbb71118d,0xbc0b5277,0xbc56a0a4,0xbc93cbe7,0xbc853cc9,0xbc823674,0xbc46be17,0xbc4db750, -0xbbcc5f56,0xbb8a998c,0xbbe3dbe1,0xbcd47ed1,0xbd41e003,0xbd83a317,0xbd36adac,0xbcdec703,0xbc1978d8,0x3b6b76a5,0x3c28651a,0x3c013e7b,0x3c0acdc7,0x3c0aab97,0x3c3d4d23,0x3c7cabc2,0x3c65297e,0x3c9a0318,0x3c5fe856,0xbbbad980,0xbabd7b34,0xbbb9395a,0xbc0cce09,0xbb8d1952,0xbc0b75f2, -0xbc79e804,0xbc884b99,0xbc9905b0,0xbc894dc8,0xbce5425c,0xbd10c02b,0xbd300e17,0xbd31ad7d,0xbd1ed774,0xbceb6c7e,0xbd05787e,0xbce3b221,0xbd0dc349,0xbd16dee7,0xbcdd66c3,0xbdde2ac0,0xbe0c828d,0xbda9a7aa,0xbd4e055e,0xbcccab13,0xbb1a278e,0x3c1a9df9,0x3c7a9432,0x3ca747db,0x3c82c59f, -0x3c853e35,0x3cca34cb,0x3d0bca51,0x3cf1b48b,0x3c8ccccf,0xbbce8c15,0xbaefb0d3,0xba24c93d,0xbc1ad9e2,0x3a0ced64,0x3b6eef77,0xbc21599b,0xbc041137,0xbc1744ea,0xbb65381b,0xbca0d3f3,0xbd0c579c,0xbd4bd86f,0xbd3518fe,0xbd1ebc8d,0xbc8f97f0,0xbc410e4e,0x3c750dbc,0x3b0ee81a,0xbcd3076f, -0x3dcea108,0x3d2a6987,0xbc9ce86b,0xbd47867b,0xbd0c690a,0xbcf16e00,0xbb569def,0x3c2d6570,0x3c3e5cc4,0x3c88d9af,0x3cc90fa3,0x3cad4ce5,0x3cbe9845,0x3d0b5c95,0x3c7fba73,0x3c38aa0a,0x3c45e73e,0xbb86fb0f,0xbb1156f1,0xbbea03b9,0xbd05a771,0xbd37e9b8,0xbdacb0e3,0xbd470178,0xbd6764e5, -0xbdce9ccb,0xbe0699dc,0xbe264466,0xbe3d7fb9,0xbe284fd2,0xbe12fb5e,0xbdf7b481,0xbe3d68c4,0xbe3230c6,0xbdf94ce8,0x3c8c8dd8,0x3e212077,0x3e045a7c,0x3ddf10a8,0x3db7a289,0x3dc36d68,0x3d49d36a,0x3d1db695,0x3d311aa3,0x3cf8ef7f,0x3d02791e,0x3c8df406,0x3c17adb8,0x3c82209c,0x3d25c99d, -0x3c78c014,0x3bee03c2,0xbc0d9043,0xbc82f0d0,0xbc25549b,0xbc458d66,0xbca0b8f5,0x3c0bbdbd,0x3d034d1e,0x3d5ce61f,0x3d711dd0,0x3d72445d,0x3d7bfa87,0x3d82f6f4,0x3d763edf,0x3c2ec7ab,0xbd041fdf,0xbcb36fbf,0xbdcac50e,0xbd652a37,0x3d99c71d,0x3df7926b,0x3d320257,0x3d1531fa,0x3d3639ee, -0x3cabd24f,0x3c05005c,0x3d1612b4,0x3d143b37,0x3d971815,0x3cb98e69,0x3b617570,0x3c33c60f,0x3b7c6781,0x3ccb8334,0x3d879805,0x3cc08458,0x3c514916,0x3c967440,0x3c80d7f6,0x3bf22534,0xbb83f663,0xbb12b23b,0xbc654f21,0xbcdfcb6b,0xbbfc940e,0xbc52c90d,0xbd34db70,0xbd7f1475,0xbd8735b3, -0xbd5154f4,0x3bc39421,0x3d07439d,0x3d879c44,0x3cc8e576,0x3d137143,0x3d35e811,0x3d579b41,0x3c840a97,0x3c1442c4,0x3cf41a8c,0x3ca60e63,0x3c9e2cc6,0x3cf9f625,0x3cc6a17d,0x3d07621e,0x3c7c77b8,0x3c015fbb,0x3cb2e540,0xbb71173d,0x3be702d5,0x3d348167,0x3d16331c,0x3d2ba4c7,0x3d10943a, -0x3cc90e1b,0x3cf85d16,0x3cb33131,0x3c4c37eb,0x3c53dc41,0x3bcfd9f2,0xbbabffa8,0xbc7aae46,0xbc8e7cea,0x3bb1111a,0x3cbe5675,0x3cfd6778,0x3d1e6277,0x3cee054d,0x3cbfcb88,0xbc6c4c50,0xbb4eb579,0x3d48c0a7,0x3d20ee09,0xb952fc4d,0x3c1ad312,0x3b5dd361,0x3bb37ddf,0x3bec897b,0x3c620b3e, -0x3ca2d6dc,0x3cf00c15,0x3c9d9234,0x3c5177f4,0x3c03a6c6,0x3c948071,0x3cc5d07a,0x3cac6bf4,0x3c8d51b6,0x3c4bf4d4,0xba066661,0x3bade328,0x3c88bbe9,0x3a548e01,0x3c1a7948,0x3c1fa0c0,0xbcf480bc,0xbc4c82cb,0xbbffe267,0xbc85f539,0xbbb09c6d,0x3c0d8d00,0x3cb6f816,0x3be0562d,0x3887f504, -0x3c0dc795,0xbb31b578,0x3b624ead,0x3d156ac2,0xbb6d071e,0x3cba5515,0x3be94c95,0x3cb1723b,0x3cc3eb4e,0x3c8d7d0a,0x3c68cd0b,0x3c203671,0x3c9a1710,0x3b511200,0x3b6265d8,0x3c37ffe2,0x3c1ce480,0x3bec40f0,0x3c1b90df,0x3c857819,0x3c77253c,0x3c05ebe2,0x3be94900,0x3c3743ba,0x3bbbb0ad, -0x3bd5c690,0x3bde12d1,0xba1ada31,0xbc71e8bd,0xbbcfbfe8,0x3cad62d4,0x3c8789d5,0x3c19877a,0xbb72879c,0x3b63aedb,0x3bd5e8f6,0x3c859553,0xbcb88792,0xbcf0fc4f,0xbc5b7b87,0x3c80a1c1,0x3c5f793c,0x3cd21785,0x3c7d7ee9,0x3cc1337f,0x3cf04fe0,0x3d01c6b9,0x3d0a7a99,0x3d1124c8,0x3ce94215, -0x3c9aab18,0x3c2cce9d,0x3bd15033,0x3c542dc4,0x3c1c1d37,0x3c0657d9,0x3b36a6b7,0x3b3dfb66,0x3b254f1f,0xbb1c023a,0x3b65bb4b,0x3b7b494e,0xbab78e35,0xbb33e76e,0xbc085e4e,0xbc4b2063,0xbc83495b,0xbbeaeb43,0x3bb4e3b0,0x3c801149,0x3c57d0e8,0x3c091bfa,0x3c3954fc,0xb87010dd,0xbc0dd548, -0xbcbc1db0,0xbbf4835c,0xbbb89ec0,0xbc5b65d4,0xbc06c818,0xbc5eb5a9,0xbc696f70,0xbc737c6b,0xbc950542,0xbca02c78,0xbc90b161,0xbc6bcf89,0xbc14e92b,0xbc18a1d7,0xbc05d103,0xbbcb29bc,0xb994fbd9,0x3a63e6bc,0x398de79d,0x3b6ddd73,0x3c659304,0x3b8ed651,0x3afe6403,0x3b1f144b,0x3b04fd03, -0x3a946d5e,0xba25e09c,0xbbad375e,0xbb058432,0xbae0673b,0x3ac1f7af,0x3becd1e1,0x3c73b6f8,0x3caf5401,0x3c8fe730,0x3c711164,0x3c2cdc99,0x3b5ca89c,0x3ba50a1a,0x39a50d7b,0x3b8f31b8,0x3be216d5,0x3c93d2bf,0xba7ff96a,0x3b9b3f2f,0x3c5a984a,0x3c7b8345,0x3c85f894,0x3c8e208d,0x3c9f52bd, -0x3cadaa1c,0x3cb8f485,0x3c144b7a,0x3b5fe724,0x3cc67bac,0x3c3a512a,0x3bed134f,0x3b2b4500,0x3ba5a1f7,0x3b9cc47d,0x3b9c6d9b,0x3ba94c24,0x3bd4521c,0x3c010e6b,0x3c21d326,0x3c3f9878,0x3c53732d,0x3c5ee57d,0x3c5b7291,0x3c7674f2,0x3c40023a,0x3c20e1e9,0x3c09d409,0x3bcfc4c4,0x3c037c66, -0xbc500408,0xbc2e3d37,0xbc031a67,0xbbd3dd2d,0xbbfd77cf,0xbbfa4819,0xbbc245b3,0xbbc27e15,0xbb7814ee,0xbb98de89,0xbb8a56f1,0xbb7d43ef,0xbb6fac40,0xbb695459,0xbb828e63,0xbba3e801,0xbbc996bb,0xbbab2ba0,0xbbea5ff1,0xbc0b775c,0xbc228207,0xbc2d387d,0xbc30f006,0xbc27f58a,0xbc3f690e, -0xbc479275,0xbc3cb8f6,0xbc514873,0xbc6742d5,0xbc93b477,0xbc6e3be0,0xbc8334d3,0xbcc28a06,0xbca122c2,0xbc918673,0xbc7ba8b0,0xbc4066e0,0xba82a263,0x3bb838ec,0xbc0aaa57,0xbb1994ad,0x3b6a7549,0x3ba7e303,0x3b6a4423,0x3ab77576,0xbb8eafad,0xbbb7f11e,0xba8bd238,0xbb209955,0xbaaf4be7, -0xbb11b9b0,0x3ae3f4c1,0xb831bdc6,0xbb9da15f,0xbbfffb9e,0xbc0117ea,0xbbdf702c,0xbc26e86e,0xbc40b625,0xbc3d9ed2,0xbc8596c0,0xbc972aa8,0xbc92bf85,0xbcc29327,0xbcd651c2,0xbd0b14e1,0xbcc26f62,0xbcf3637b,0xbd57b549,0xbd3f069c,0xbd2a523b,0xbcd4b76f,0xbc1261a8,0x3ca775be,0x3ca174ce, -0x3bbdf8ea,0x3c14fc3f,0x3c1d1004,0x3c0dfbee,0x3c3a4ef3,0x3c583be7,0x3bb0e05b,0x3b45b748,0x3c3cc044,0x3c02fd04,0x3c3bee80,0x3bed7e54,0x3c6c1c6e,0x3c479352,0x3b9d33c5,0xbb1338cf,0xbbb28310,0x3887c3db,0xbbd13425,0xbbdc5e68,0xbae2c34c,0xbc2d78d6,0xbc556769,0xbc032079,0xbc804ccc, -0xbca935ee,0xbd29af34,0xbcad2ac9,0xbd135259,0xbdaf5c83,0xbd891f6f,0xbd6d3919,0xbc5289bc,0x3c1b61be,0x3da9e698,0x3d90e684,0x3d0fbb08,0x3d030c13,0x3d489dca,0x3cfc7773,0x3d13e751,0x3cd8068d,0x3c4146c1,0x3c4ffc65,0x3cb1e3b4,0x3c904f10,0x3cc16744,0x3ce911c4,0x3ced6044,0x3cc9d99b, -0x3b210046,0xba7109a7,0xbbcfcc46,0x3b88c590,0xbb603b1f,0xbc1ae3b5,0xbabde02e,0xbc922c96,0xbcbbfcb5,0xbc813257,0xbd0ba998,0xbd29ed7c,0xbd80d18f,0xbd0ca5d1,0xbd82de3f,0xbe153ebe,0xbe046b99,0xbdd64d78,0xbc8ae2a9,0x3d65f9f0,0xbda1896e,0xbc6ec11f,0x3cbeeafa,0x3c39d30e,0x3a9a8aa0, -0x3b279e61,0x3b38aac7,0x3c260100,0x3d187e6b,0x3d15d5c4,0x3c880337,0x3cdc79f8,0x3cee3d43,0x3cc9530d,0x3ca853f7,0x3c9cfe22,0x3bafdbe5,0xbb70480c,0xbc743120,0xbc0803d8,0x3cba5f5f,0x3cf13404,0x3cfa1049,0x3ca401df,0x3c46bf67,0x3caf90cb,0xb9a3460a,0xbc0beb25,0xbd09add1,0xbc9ab510, -0xbcd20e51,0xbca6ac4d,0xbcae302e,0xbd4d3089,0xbd710299,0xbd9e6fb3,0x3cc60e7f,0x3d88ce1c,0x3dc86b7f,0x3da7e1b5,0x3d8417da,0x3d267a27,0x3ced5d07,0x3d839f3d,0x3cc950e7,0x3c759abb,0x3b826751,0x3c251948,0x3ca24bf0,0x3ccd65eb,0x3c6c89f1,0x3be0e463,0xbc5c28e7,0xbca23f4f,0xbcf2c7f1, -0xbd1256f1,0xbc8a4a0c,0xbc94bbfd,0xbd300641,0xbcd8c839,0xbcdc978d,0xbd36e874,0xbd95fbfa,0xbdd22e15,0xbe075ce0,0xbd994c34,0xbd8818f8,0xbdb7c07f,0xbdc32864,0xbca67d37,0x3dfdf839,0x3d5ec3c1,0xbd10945f,0xbd32417d,0xbd2b4309,0xbd13a18a,0xbbdcfe1c,0x3d125edc,0x3d75c0bc,0x3d839966, -0x3c810d1d,0xbb84bbe9,0x3c82e45b,0x3ae91e44,0x3c7c0661,0x3cd7c7b3,0x3d180da3,0x3cf75e28,0xbbe52310,0x3b499916,0x3b118901,0xbc4770d1,0xbd5994f6,0xbd86f137,0xbd897fbc,0xbdd904c4,0xbdf328da,0xbdcd6ed8,0xbd9e2a52,0xbd15da09,0xb9395d3e,0x3d452de6,0x3db2353e,0x3dace937,0x3d99e95b, -0x3cb534e8,0x3d07a44a,0xbbfe43c2,0xb9f4a0a4,0x3aaacca3,0xbbd46483,0x3c165388,0x3ca0a96f,0x3c983c79,0x3c4cf5fd,0x3c3aba92,0x3c9a0ff0,0x3c8a78ab,0x3ccd07c0,0x3c7d5551,0x3c9619b3,0x3c8b751a,0x3cd1ad97,0x3cf6b34b,0x3b31de6f,0xbb662948,0xbbbf275e,0xbc6d9d07,0xbca89e64,0xbc5171bc, -0x3af04733,0x3ca3716e,0x3d15913e,0x3d823048,0x3da4c380,0x3de84a25,0x3e13c4d0,0x3e0b0f16,0x3dc62e0d,0x3d4507f5,0x3c7ff811,0xbc134c09,0xbcacef23,0xbc774eae,0x3bbf90ed,0x3bdbc318,0x3beb3e1e,0x3b21c3f5,0x3bb8a8f0,0x3c6e4c0f,0x3cc11873,0x3cfe3cb4,0x3c91dc36,0x3c087bf4,0x3c2d13ad, -0x3c1b863b,0x3c3653a7,0x3c90f104,0x3b88e3d9,0xbb436610,0xbbdd21b4,0xbc6501ce,0xbc77be1f,0xbcabc416,0xbbd5ce5d,0xba413d90,0x3c71864c,0x3cce3281,0x3d1cddd5,0x3d86fff0,0x3d9a1f0c,0x3d847a97,0x3d29137b,0x3cc429a9,0x3c3b4601,0x3c8ae6e2,0xbcd018fd,0xbd13be9c,0xbca8d6f3,0x39963f4c, -0xbc86f4d3,0xbba93ffd,0x3aa2867c,0x3a667694,0xbb1fd1c4,0x3b2307ee,0x3b37525b,0x3bb39a57,0x3bb06266,0x3bdea346,0x3c122296,0x3c458b1b,0x3c8e0fcc,0x3cebd6ec,0x3c58b33c,0x3bc3f50a,0x3c114857,0x3c09c773,0x3b273145,0xbb911c4c,0x3b6f4bf9,0x3c64da41,0x3cce417f,0x3d302041,0x3d3d7cb2, -0x3ce1b5c6,0x3ca63238,0x3cbe1562,0x3d02469d,0x3d5f863f,0x3d4db92d,0x3ce66132,0x3bbe90d5,0xbb3773d3,0xbabcf0c0,0xbc4b58fd,0x3c12344a,0x3c6bbea6,0x3ca5a12d,0x3c4a1a3a,0x3c43ad50,0x3c678674,0x3c563af3,0x3c88afa7,0x3c7dcde1,0x3c8e18ee,0x3c5d7d49,0x3c7469ae,0x3ad9547f,0xbaa2eb50, -0x3b3b66c1,0x3c3e3bf2,0x3c80f51f,0x3c90e861,0x3c9c677f,0x3cdc76f9,0x3cb86bc3,0x3c3c2ba5,0x3a568b11,0x3adf0856,0x3bbf7fb3,0x3c4a81d3,0x3c482504,0x3c227325,0x3bde8493,0x3c155d7c,0x3c78aa05,0x3ccae3b8,0x3cb60839,0x3c8377ec,0x3bc67d5f,0x3c29b25a,0x3c2618b4,0x3bad30e0,0xbb215a11, -0xba5277da,0xbb77e66d,0xbbf38200,0xbc062d14,0xbc311c37,0xbbce65fa,0xbb290bbc,0xbb03b27d,0x3b8926c9,0x3c161b67,0x3c423e91,0x3bc7a172,0x3be6e753,0x3bc85005,0x3ba08257,0xbbd0dde0,0x3c407283,0x3c53d5d6,0x3c5df282,0x3c80e03f,0x3c893aef,0x3c7e0326,0x3c699572,0x3ca79f56,0x3ce01fb4, -0x3d0a3816,0x3d159f1e,0x3d13da50,0x3d1263e8,0x3ce780d0,0x3cc9eea2,0x3ca11df2,0x3c811a62,0x3c5a395a,0x3c531e95,0x3c455f7f,0x3c1fb857,0x3b25d96c,0x3c5bf6d9,0x3c2190a8,0x3b287cc3,0x3b3041c8,0x3b1b221a,0x3b4b81d8,0x3af9fdb0,0x3aaddb53,0x3b2d6080,0x3c50f238,0x3c8c7807,0x3b0d1853, -0x3c5302be,0x3c88a4e8,0x3cb2443c,0x3c9caf9f,0x3ca54026,0x3ca4f8d9,0x3ca1fab6,0x3ca61925,0x3ca4a573,0x3ca44b08,0x3c97e00a,0x3c8c65bf,0x3c8ac20c,0x3c90229e,0x3c9cda30,0x3c9343b9,0x3c8b1728,0x3c846fe9,0x3c6de693,0x3c89cf45,0xbc6ae23b,0xbc7c4e7d,0xbc921942,0xbc89279b,0xbc4f32e8, -0xbbe7ef15,0xbc5219b2,0xbc323b1e,0xbc0993f9,0xbc30e3d8,0xbc352723,0xbc22797d,0xbc21287a,0xbc24a795,0xbc2a8324,0xbc3b6298,0xbc3eda55,0xbc24ef3b,0xbc56b667,0xbc5f0ca2,0xbc37e9a7,0xbc417a31,0xbc43ca5c,0xbc4e2816,0xbc48c921,0xbc4aa6bc,0xbc3fe0f3,0xbc6b84fd,0xbc75087d,0xbc76feb1, -0xbc566e77,0xbc68f751,0xbcac75ea,0xbc8afc60,0xbc8fd89e,0xbcaa82ea,0xbc8e7658,0xbcc8683f,0xbcb976a9,0xbb2bbb8f,0xbc2ae5db,0xbacd9cc2,0xbb92f72e,0xbb7aa3ba,0xbaf546b3,0xbc038102,0xbc1b5fcc,0xbc073761,0xbbbbf73f,0xbb69ba75,0xbbabdaf7,0xbb32b830,0xbb91332b,0xbbeea710,0xbc1575d5, -0xbc33c5a8,0xbc1bedb4,0xbc402544,0xbc5a2fbd,0xbc703138,0xbc607639,0xbc56f3c4,0xbc31bd10,0xbc846acf,0xbc92ab14,0xbc9ad01d,0xbc730232,0xbc93b125,0xbd05eb43,0xbcb032e7,0xbcbe62a9,0xbd057adc,0xbcdd6334,0xbd1fb716,0xbce9f1ed,0xbc063afa,0xbc3e367c,0x3c330578,0x3bfc6aa1,0x3ba9bf10, -0x3bead00d,0xbacc04f5,0xbaf20ec2,0x3b45f163,0x3bc33400,0x3c04643a,0x3b414bad,0x3bd01773,0x3b9f40a1,0xba223c75,0xbb90b526,0xbbde9ef3,0xbb3f6f07,0xbbb15230,0xbbc1664c,0xbc2fe3fd,0xbbf88fd7,0xbc1fbed4,0xbc14761c,0xbcaefa18,0xbcc958e4,0xbcc72482,0xbc862be7,0xbcaa8b2f,0xbd43c831, -0xbceb8640,0xbd105d5f,0xbd79dc49,0xbd22a0d1,0xbd8cfcf8,0xbce5f39a,0x3ca98875,0x3ca209dd,0x3d0a3954,0x3d13afbf,0x3cfc6106,0x3cd1ae91,0x3c26dd6b,0x3bdf055b,0x3c690b87,0x3c92b89a,0x3cd3baf8,0x3ce59125,0x3cd91aa7,0x3ca3509b,0x3c407981,0x3bc961c5,0x3ade77ae,0x3c101a58,0xbae54236, -0xbc07eb6b,0xbc80693c,0xbc31f07c,0xbbf8b00d,0xbbd4297c,0xbc971b06,0xbcdd2639,0xbcec6065,0xbca2496d,0xbce72d54,0xbd6db357,0xbcccb9b6,0xbd1c8293,0xbdad2250,0xbd877197,0xbdba1707,0xbd913288,0xbdd8db51,0xbdad3248,0xbcf97e3d,0xbc19d83e,0xbc1d7c15,0xbcb92530,0x3c935cf7,0x3d0e8032, -0x3c9c3a89,0x3cf957b2,0x3ce752ea,0x3c0465b5,0x3caa54d3,0x3cc43fb5,0x3c0df93a,0x3bd14aa7,0x3bff5196,0x3c8e40a3,0x3c2cfc1d,0x3c8bcf03,0x3d0fb2be,0x3c91982a,0x3b78034c,0x3b34694b,0x3bbffff3,0x3bcd98b6,0x3ba3583f,0xbc08a41e,0xbcc9812c,0xbd91d93a,0xbd8c4f02,0xbd79b35f,0xbcb36bdc, -0xbd77e9d3,0x3d73c301,0x3d859c5e,0x3d2e915e,0x3d321b2e,0x3cbcae9d,0x3c82127a,0x3cad1af8,0x3d50c892,0x3cb341d1,0x3c33207c,0x3b9facc4,0x3a42bad6,0x3c505285,0x3ce0bccb,0x3d02f62d,0x3ce5de82,0x3bda5a75,0x3bb96737,0xbc0fe54e,0xbc28e017,0xbbde5add,0xbcf44e7e,0xbd78d1fa,0xbd76e9c1, -0xbd4d917a,0xbc834d1b,0xbc66f886,0x3c3346e6,0x3d12cd94,0x3c7de81d,0xbd1cf564,0xbe0ea8b9,0xbda8ede4,0xbdb2f1f5,0xbd9a2841,0xbc03d061,0x3c9a7095,0x3c54a3bd,0xbc7e5307,0xbb6310d6,0xb99484a0,0x3d539a66,0x3d3de83b,0x3d174197,0x3bc2fa2b,0xbc6ba367,0x39b0b527,0xbb6a59dc,0x3b6b42f4, -0xbca460ce,0x3cf26e83,0x3d069088,0xbca5f324,0xbcb22fc7,0xbd00bf91,0xbd035953,0xbd15f202,0xbcd73eb3,0xbc21cc22,0xbb9f798f,0xbbbab4b6,0x3a5b9bf6,0x3c4cc532,0x3cc7134e,0x3d08eee4,0x3d2ed7bc,0x3d3d968c,0x3d640ac6,0x3dc0b566,0x3e03c333,0x3e372310,0x3d780f74,0x3a8e0a5e,0x3c52590c, -0x3caf8d36,0x3c9dab98,0x3b4fee5e,0x3c0efcc2,0x3c060915,0x3c26a96c,0x3d091659,0x3d0b33cf,0x3ccf701a,0x3c973afb,0x3cb363eb,0xba6c3790,0x3cefb2a8,0x3cce98ec,0xbc881f85,0xbc3ff62c,0xbca4a0b4,0xbc3d0a82,0xbbb2bb61,0xbbd3d42a,0xbc21e6d1,0xbcaefcf8,0xbc23cf70,0x3cc88bb7,0x3d1ce8b5, -0x3d3a9ee8,0x3d228d7f,0x3db0ed64,0x3db11c0e,0x3d5f9f4d,0x3be4ea6a,0xbbf3d669,0x3d1a50b3,0x3a784b50,0x3d0554c9,0x3c01a314,0x3b1fe334,0x3be83931,0x3c80972b,0x3cf55e62,0x3cf70e55,0x3c866ee5,0x3c3e9f02,0x3bc5a334,0x3c216727,0x3abe9b4c,0x3a626d89,0x3c17d8a3,0x3b88955d,0x3b902149, -0x3c01abe8,0x3bea4c59,0xbb25eaa7,0xbb4701a9,0xbc855f4d,0xbc45429f,0x3c8c825a,0x3cb5b4e5,0x3cd31985,0x3d2ac3cb,0x3c848294,0x3c6c4c18,0x3b6a6989,0x3d085f66,0x3d126541,0x3cbf6cd4,0x3bb76096,0x3a99d8d7,0x3ceaae44,0x3d14ee8f,0x3cdc389e,0x3cc954b8,0x3c42e59b,0x3c2e634d,0xba5f78a1, -0x3a75ac7c,0x3b4a3d72,0x3ba8be7a,0x3bd5517c,0x3b8f306f,0xbb3d3cd4,0x3c284b92,0x3c86df3e,0x3c74ad8b,0x3bccdc4f,0x3b825cfe,0x3b0067ab,0x3b1a9cdb,0x3b96b274,0x3b81785c,0x3ba28a8c,0xba3af6c6,0xbc745cef,0xbbf3633c,0xbbd2b3fe,0xbc04662a,0xbc30d216,0xbc448300,0xbc4dbe3a,0xba244653, -0xbb692b57,0xbc9122b3,0xbce400fb,0xbcc05461,0x3b8f2b4c,0x3c553121,0xba903499,0x3b418636,0x39f6c35c,0x3c0b77ed,0x3c3e87bc,0x3c1c5cdb,0x3c007593,0x3bb59e9b,0x3c39cad6,0x3c7d44b9,0x3cc9d238,0x3c663cfc,0x3c54cbbb,0x3ba45bc8,0x3c1074c5,0x3c02d6f0,0x3c28e427,0x3c5ba760,0x3c9a955a, -0x3c689d21,0x3bcd511f,0x3c3a9f0b,0x3c427aa5,0x3b14788e,0xbc3b988f,0xbcd194e6,0xbc31d87d,0x3ab523ad,0x3c5b57f6,0x3a4b67d5,0xbc238ad3,0xbcafd81b,0xbc616d66,0xbc25395a,0xbbd05ab5,0xbbe1ad6c,0xbb833fe2,0xbb9f60dc,0x3b722db5,0xbb7d332c,0xbb3a9065,0x3a948680,0x3b48b28f,0xb9df5088, -0x3b1fba9d,0xba8cc3a2,0x3b0808eb,0xb9657bc0,0x399abec9,0x3ad0cf1b,0x3c3bba40,0x3c58a82c,0x3c60d213,0x3c85b9b2,0x3cfada39,0x3cb14468,0x3cc1a628,0x3cce4fd4,0x3cd8af1c,0x3cf0973a,0x3d122871,0x3d24fd7e,0x3cf9df19,0x3c9a1031,0x3c282b2f,0x3b2bbec6,0xbae8e8cd,0xbc129d07,0xbbee6154, -0xbbee4796,0xbbca909d,0xbb8b55b9,0xbc553b3c,0xbc72a054,0xbb4d727e,0x3b9c0a99,0x3c89d0ef,0xbbb9bf8c,0x3bb09eec,0x3c583ee6,0x3c565cbb,0x3c71d1db,0x3c74a7d4,0x3c8f88df,0x3ca01d97,0x3ca77693,0x3baa5995,0xbbc55212,0x3cc2e6ce,0x3c204af9,0x3b11ed52,0xbc3e52ca,0xbc01ec39,0xbc0191b0, -0xbbf213c1,0xbbdf0a96,0xbbf94fc7,0xbbd015e6,0xbc186a9f,0xbc215a4b,0xbc396bcf,0xbc44d2b7,0xbc5d0ad6,0xbc811f33,0xbc6d7189,0xbc664a0c,0xbc60f647,0xbc61aa8e,0xbcac16c9,0x3aae0ce6,0xbb2ae03b,0xba1d8450,0xbc098a5a,0xbc3b312b,0xbc5cb71c,0xbab336c0,0xbbc6b591,0xbc3996a9,0xbc572315, -0xbc57a302,0xbc4d21d0,0xbc4243c8,0xbc438714,0xbc52f1e8,0xbbb0f50b,0x39436799,0xbc66ba15,0xbbe099dc,0xbb5b6cf6,0x3afb7106,0x3b07eb6b,0x3b187d7e,0xb95f28bf,0x3adbb0b1,0x3b13c052,0x3b701c98,0x3ac6c7db,0x3abe5740,0x3b87b5c3,0x3a651853,0xb8720fb4,0x3a55abc3,0xb9c4f6e1,0xb9caab38, -0xbab82242,0xba96a30d,0x39c0935a,0xbbac108d,0xbcc47d8c,0xbc34c514,0xbb902346,0xbb784b1c,0x39c1313e,0x3b29e33f,0x3b1a8cf1,0x3a4e26f1,0xbadc263f,0x3b72b420,0x3ba40194,0x3b1b2d73,0x3b5d2717,0x3b7a4482,0x3b0fdbcb,0xba01d38b,0xbbbaf38c,0x3a9392e4,0x3bd02892,0x3be69a70,0x398da71b, -0x3b96b46b,0x3b9b541b,0x3be55185,0x3a8250c9,0x3a9cb71b,0x3c1aee23,0x3b2420e4,0x3ab96c90,0x3b95764d,0xbaa50c2e,0xbb008768,0xbb522224,0x390e029a,0xbcc4edcc,0xbd05e327,0xbd2a9d80,0xbcf8d77e,0xbc22b9b9,0xbbc11ffc,0x39b70a5c,0x3bcde5de,0xbab15988,0x3a1a55ce,0x36f889be,0x3c1170e9, -0x3c088833,0x3aab60c1,0x3c07af88,0x3c160009,0x3b47d791,0xba5c9acc,0xb9c00289,0xbae72f33,0x3c0227c4,0x3befb99d,0xbc106405,0x3a5ef5b9,0x3ac7be9f,0x3bfda8f3,0xbb6fd763,0xbb2f9226,0x3c3c4def,0xbbae6f1b,0xbc30d2f0,0x3ac2996f,0xbc068dee,0xbb686f1d,0xbc9bcd9a,0xbcadb07a,0xbc744491, -0xbd347130,0xbd9738cf,0xbd4a7455,0xbc604afe,0xbbc0a8cc,0x3bd450dd,0x3c6b11b7,0x3bfba541,0x3c16494f,0x3c412e47,0x3ca27655,0x3ce01fd0,0x3c9853b5,0x3cd94cec,0x3ca7407f,0x3c2c4809,0x3be257bb,0x3c1c9084,0x3b8afc45,0x3c8eec18,0x3c985d05,0xbc04287a,0x3bac5fd2,0x3bb792ea,0x3c1387a3, -0xbc01485e,0xbc013e0e,0x3c8b24bf,0xbb70b7b9,0xbb731d6c,0x3c85c36e,0xbb4949a0,0xbbf39a30,0xbcc5c429,0xbcc8bdde,0xbd010b52,0xbce425cf,0xbd880ff7,0xbd869b1e,0xbd27ec67,0xbc8bb6fc,0xbbac43bc,0xbc435274,0x3bcf17ed,0x3ca1544d,0x3bde084f,0x3cd2be3f,0x3cb21f97,0xba4bfc63,0x3c6e27f4, -0x3c446ae6,0xbb677d25,0xbbc1cda7,0xbb7f0205,0xbc7803ac,0xbd00403c,0xbcf4ff22,0xbd0e66fd,0xbd14fd72,0xbd24bcde,0xbd205d9b,0xbd147651,0xbca5a1c4,0x3ba7277f,0xbc920181,0xbce99ef5,0xbd4bda68,0xbc968697,0xbaf59c20,0x3bf9f344,0xbd0dc842,0xbb27b037,0x3d2e9b39,0x3d801a51,0x3d12f253, -0x3a955c1c,0x3bb6c0e6,0x3c75e3bd,0x3d10983a,0x3c267a7a,0xbb08b1bb,0x3bc30a94,0xbbb5fa7c,0x3c2f6cbb,0x3cf25ec7,0x3ce98681,0x3cd2ea40,0x3c65ffc7,0x3c3497cd,0x3b0bdfd1,0x3bf236af,0xbb7cba49,0xbb519ec3,0x3c9964a9,0x3be81a47,0xbb8579f9,0xbb4e666d,0xbc1d59a1,0xbcab8345,0xbd2c9f53, -0xbc955a23,0xbcabd75e,0xbd9b389f,0xbd244640,0xbd10bb09,0xbd52e9e4,0xbcafea2f,0x3d89a454,0x3ca181c8,0xbc829832,0x3a42fe84,0x3d210f9d,0x3d8feb45,0x3d5fda13,0x3bf76cd0,0x3b83a255,0xbc163d2d,0x3993e0ff,0xb929c663,0x3b7a1329,0xbd057b7a,0x3cf6c79f,0x3d1a33db,0xbc7cf784,0xbbc395c5, -0xbc81a56b,0xbc8cba82,0xbc13db35,0xbb460e50,0x3a600cf5,0xb984bb7b,0xbb870880,0xbbbd892d,0xbd358226,0xbd5b5614,0xbd226b89,0xbcf17dd4,0xbc9893ea,0xbca92d22,0x3d67428c,0x3de1f1e2,0x3e03020e,0x3dd8110d,0x3c9b9172,0x3c395d3e,0xb8e3c44a,0x3b1d6734,0xb9b2d617,0x3c88f4aa,0x3cbf20e5, -0x3c66e4aa,0x3d0e1588,0x3ce8d3de,0x3c576f4c,0x3c5d2298,0x3c9d1511,0x3b6ae7e7,0x3d09e51b,0x3d055e19,0x3babdf55,0x3baa46e4,0xbba6a10a,0xbc54ee3c,0xbd079bda,0xbd360dbe,0xbd469338,0xbd8c92eb,0xbd9d85df,0xbd9b1b37,0xbd5b6799,0xbcbe8187,0xbbe382af,0x3cf59451,0x3d2ed77f,0x3c4fea53, -0x3bab1e3c,0xbc9a11d3,0xbd0febf5,0xbb55bbee,0xb99706d6,0x3c09c8b7,0x3c921aa1,0x3c9cfeb8,0x3c3eba41,0x3cb1266a,0x3c92d006,0x3b1c61ef,0x3b9da109,0x3abedc8e,0xba5fc4ab,0xbb46b6f2,0x39a28c05,0x3c316c8a,0x3c6717dd,0x3c6111de,0x3c27ebe1,0x3c7324a0,0x3c0a61ef,0x3bd99032,0x3bba45fa, -0x3c019020,0x3c644283,0x3c5b7855,0x3c8ecb00,0x3c701b76,0x3c75b730,0x3c1f19c9,0xbb08ad56,0x3be08314,0xbbed52ad,0xbd3f6596,0x3bc3f5ca,0x3cf7d282,0x3d08e5b4,0x3c112860,0x3cd044f7,0x3c5fcf2b,0x3c0c73b1,0x3ae8efe8,0x3bc7059a,0x3c361f31,0x3c85b3c4,0x3c822c0b,0x3c6f2b92,0x3c4b96db, -0x3c44dc80,0x3bc76a59,0x3ba8713c,0x3a73458a,0x3bb87ac1,0x3bc22ad8,0xb7ec3551,0xbba42491,0xbb5ed0d8,0xbb134c98,0xbb4f3267,0xbc198315,0xbc9cb71f,0xbc8ee0dc,0xbc8ad67c,0xbbf8fb00,0xbc411690,0xbc188d2d,0xbb3b3086,0xbc4dbbce,0xbc971b88,0xbd097c70,0xbc10cb98,0x3afe9bd7,0x3c346d1f, -0x3cde9e71,0x3c84e098,0x3ca2ab6b,0x3c8d286c,0x3c702ac1,0x3c5527cb,0x3c342ff0,0x3c00039d,0x3bbf7920,0x3bcde256,0x3bcc024d,0x3bdfb41e,0x3bc8e3a0,0x3bbb7264,0x3bbbea21,0x3ba5712d,0x3b9fdbfa,0x3bcbbe1f,0xbafc28de,0xbbe2d07f,0xbc9a5ef3,0xbc65011a,0xbbe24873,0xbac5c52f,0xba5659a4, -0xba718a1b,0xba25cb2d,0xbb23bc5f,0xbb89a21c,0xbba3c53e,0xbc54a0e0,0xbc95dc1f,0xbcda43c0,0xbc4f80a2,0xb9ec629a,0x3c383712,0x3c6613ba,0x38c55ad9,0x3bab0662,0xbafbeb17,0x3bed206d,0x3bcfa0c0,0x3bf06980,0x3c18bb31,0x3c496094,0x3bf31765,0x3b848acf,0xb9a2c0cd,0xbb4827fd,0xbb9a5a18, -0xbc0e06c2,0xbc0038e7,0xbbec243c,0xbb8103fe,0xb9ce219e,0x3b358bde,0x3b136545,0x3ae547f6,0xba2db664,0xbae84440,0xbb985975,0xbbd64ef2,0xbc092a65,0xbc219a58,0xbc4264fb,0xbc61cc40,0xbc7fb638,0xbc8bb144,0xbca7f3ef,0xbc8195b4,0xbc5b5f27,0xbc0f7613,0xbbb3634d,0xbbd6c0d0,0xbb528da1, -0xbc4a32aa,0xbc8566cf,0xbc9c0d8b,0xbc02e57c,0xbc667d9d,0xbc672bb2,0xbc81e366,0xbc8a5126,0xbc934015,0xbca11aae,0xbcafee51,0xbcc31555,0xbc9ef9d4,0xbc504ee6,0xbca4d475,0xbc97c037,0xbc768db0,0xbbac191e,0xbbd3a745,0xbbe733ab,0xbbf00f69,0xbbe22e09,0xbbd7a062,0xbbd0f9e6,0xbc00aaef, -0xbc1360c6,0xbc246122,0xbc31da09,0xbc3bfd10,0xbc5074c2,0xbc2f5aa9,0xbc1c923d,0xbc0e3523,0xbbe6b4d5,0xbc2cb6df,0xb9d592d3,0x3b433f07,0x3a2007c3,0x3ade13a4,0x3ac11073,0x3b6ddf09,0x3a2d03fb,0x3b7a2cb9,0x3be107aa,0x3bb1f7b6,0x3baab4b7,0x3b8e5953,0x3bc51d5c,0x3bcbfc49,0x3b971dec, -0x3bac6266,0x3b6b28a9,0x3bd458c2,0x3b8f7309,0x3ae2f7d5,0xbb69ec07,0xbab1b4b9,0xbac5fc47,0xbb090282,0xbaca912e,0xbabb21b3,0xbb0b6868,0xb9f721c0,0xba136e58,0x39edf753,0xbb49d8e6,0xbb531520,0xba1ec9ff,0xba1d3337,0x3a6a134e,0x3b3342d2,0x3b8498ea,0x3c1ffdeb,0x3bf04815,0xbb4307a5, -0xbaf9424b,0x3b1ac9e7,0x3b291039,0x3b4ab1f1,0x3bd9dc3b,0x3af13972,0x3ab11b8d,0x3b2196ff,0x3b776cfa,0x3b7f209e,0x3a97729f,0x3be3df96,0x3be67fd8,0x3bc3bf30,0x3ae2a867,0x3b362af5,0xbba96f0b,0xbb34865e,0xbb384bc0,0xbbb9607d,0xbb980d4f,0xbb9163e8,0xbbad69ad,0x3a599baf,0x3b21a3ea, -0x3b710cfa,0xbc12a646,0xbc3a8989,0xbb778cc3,0xbb96b256,0xbaafa4e2,0x3b50729e,0x3c192edb,0x3cefd5a6,0x3c475d82,0xbbc7747f,0xbbb01861,0xbaeefcd6,0xbb33699d,0x3ad403c8,0x3c584605,0x3b75f90e,0x3abb9e1e,0x3b619b3f,0x3ba51d49,0x3c106be8,0xba82572a,0x3c303f7a,0x3c35e671,0x3c229882, -0x3a0bc790,0xbb4978ca,0xbc3b5016,0xbbf06c45,0xbbd25bb6,0xbc0f5f27,0xbbc71c00,0xbb7ae494,0xbb890bd2,0x3ba83c29,0x3b35d8bf,0x3bf65608,0xbc6b73ac,0xbc81a9d6,0x3b9c7c79,0x3b19c2db,0x3c395b22,0x3ca8c73f,0x3ce74771,0x3d6a335d,0x3d24c2ad,0x3bc68108,0x3a8fc384,0x3c6fc447,0x3b3f0897, -0x3c24bcf1,0x3cc2d4bc,0x3bf07452,0x3bd4d3af,0x3c16a02e,0x3c9f555a,0x3cac2b87,0x3b3e8a9c,0x3ca02afa,0x3caa3c4a,0x3c3e712d,0x3af39a6d,0xbb15b442,0xbc88cb07,0xbc107a46,0xbbe46c8e,0xbc5bfbb0,0xbc13effe,0xbc113902,0xbbb8917d,0x3c282372,0x3c8006f1,0x3cb817f3,0xbcb5551f,0xbcd3bb15, -0x3b858c0d,0xbb0d2828,0x3b664af6,0x3ce1734c,0x3d47a86c,0xbd836363,0xbd10f8d1,0xbc44507a,0xbc4e5843,0xbc83af92,0xbb733f4e,0xbb8cfeda,0xbb885274,0x3c579298,0x3cae0a93,0x3c066dc7,0x3c9f20d1,0x3c9549b0,0x3c3105b2,0x3c4887da,0x3b57e2e2,0xbbee4c90,0xbc8f0f3f,0xbccaa513,0xbce39932, -0xbc8069cf,0xbc841b2a,0xbcc3e18b,0xbc406471,0xba451ce7,0x3bfc81f4,0xbbe05cb1,0xbcbc8da6,0xbd080edc,0xbd336dc1,0xbd35104d,0xbd603ab2,0x3b91c555,0x3cab399e,0xbc9df437,0xbd34f00a,0xbd30b5da,0xbb8f2402,0xbbaf371d,0xbc09d321,0xbcbf84ea,0x3b5c4da3,0x3ca14d1d,0x3d0a916a,0x3c56e4ec, -0xbb836dbb,0x3b83f3e1,0x3ae96189,0x3c42c33a,0x3c378320,0x3ca2c232,0x3c8e3ce6,0x3b645569,0xbabd001b,0xbb1c7364,0x3aa65027,0xbb9cd3fd,0xb905c5c9,0x3c2cd821,0xbd04c419,0xbd3dfadc,0xbd08401b,0xbd053739,0xbcff4f2f,0xbcc3c85f,0xbdc0bf31,0xbdc9640a,0xbda0901d,0xbd8683f7,0xbd9e9498, -0xbdcbe3f9,0xbd77c720,0x3db36ce5,0x3d9b70c4,0x3d35e92d,0x3d4ee2dc,0x3d7ea76c,0x3d928166,0x3d3b1539,0xbc390ce4,0x3bcca501,0x3b1ca020,0x3bfe64eb,0x3b8dc673,0x3c0b8e46,0xbc80bf52,0x3d007361,0x3d1d3bf8,0x3bcf52ff,0xb971b5d2,0xbc39d4dd,0xbc3aa7b4,0xbc8eac45,0xbc8b91b5,0xbbe426f1, -0xbc379167,0xbc4b62ee,0xbc5ab15b,0xbca08fe4,0xbccd91fb,0xbd034af2,0xbd1ccb32,0xbd23aeef,0xbd87e8c8,0x3d14c8c9,0x3da5a8a0,0x3d86ddd9,0x3db77f24,0x3bad7a4e,0x3b8e6a86,0x3c4c5466,0x3c2926c2,0x3bc4335f,0x3ca231c4,0x3ced8e1a,0x3cccf5e9,0x3ce4cb77,0x3c8ad081,0xb93e2fe7,0x3c7a2ec7, -0x3c8972b9,0xbbfc8da6,0x3cb55cbb,0x3cd2863e,0x3bcf2dab,0x3bf9a2fe,0xbb84fbac,0xbc8adbb8,0xbcedafaf,0xbd11eaf9,0xbd275ee1,0xbd5c3cb5,0xbd8991a1,0xbda59906,0xbda6d08c,0xbd61ca50,0xbb4ea3de,0x3cb06fea,0x3d103675,0x3c3f5074,0x3d6b769d,0x3d735966,0x3d0cb4f8,0x3c88ec51,0x3cb1dfa6, -0x3ca893ae,0x3c23ff70,0x3c5500fc,0x3ca25edf,0x3cc30f97,0x3c9a3347,0x3bf3a59a,0x3be358ae,0x3bf53d8d,0x3a3e5dd0,0x3b6b337d,0x3c18bb86,0x3c894811,0x3cc9f1b1,0x3cba5b83,0x3c2829b4,0x3c6d000f,0x3c818352,0x3ca38548,0x3cb8f304,0x3c8f6360,0x3c557538,0x3bbf8284,0x3c9ff247,0x3d11b380, -0x3d72ec1e,0x3d89a8f1,0x3d974b48,0x3cddf89f,0x3a19c7d6,0xbce81428,0x3b5b5f4d,0x3ca3acc6,0x3cefeb31,0x3cd4d50a,0x3c6048e3,0x3bf0903f,0x3c0fce97,0x3c4c8791,0x3c35d63f,0x3c8ea3bc,0x3cb0f423,0x3cbd565a,0x3cafaa27,0x3c8f19e3,0x3c8d579c,0x3c5a9175,0x3c3c79ee,0x3c56db10,0x3c5a3a26, -0x3c2ae299,0x3b573335,0xba8eb5f2,0xbbe4fb37,0xbbc195ff,0xbbe487b3,0xbb9372bc,0x3bdfd75a,0xbc3bd739,0xbcbb1399,0xbce934f2,0xbc39da61,0x3b253a52,0x3c8b3431,0x3c0adee0,0x3c00b01d,0x3a01bb8f,0x3c98d973,0x3cd40253,0x3ce99b94,0x3cbd8204,0x3c8a02ef,0x3c9cb162,0x3c73b2a0,0x3c243b6f, -0x3bd60caa,0x3bf54c64,0x3bdf731e,0x3bdcfba4,0x3bc1f125,0x3c29f990,0x3c0f3c80,0x3c75b3af,0x3c326a69,0x3c72e5ff,0x3c44b670,0x3c70f261,0x3c6bd220,0x3c61f12a,0x3bed59ff,0x3c8ebd69,0x3ca3436b,0x3c28ded3,0x3bdac438,0x3c81b90d,0x3cdcd969,0x3d111676,0x3d08a576,0x3cf5db0e,0x3ce3fa41, -0x3cb031fe,0x3c8c9967,0x3c5f0490,0x3c39efaf,0x3c20a45d,0x3c2b6647,0x3c592a21,0xbabcabfd,0x395a7294,0x3b8a4f7a,0x3b944d2f,0x3bc5abe0,0x3baf1431,0x3bf8779d,0x3c172f87,0x3c3380b8,0x3c287e0d,0x3bf271e1,0x3c1eb540,0x3c1fe54e,0x3c1b3a23,0x3bd79bbe,0x3bff142a,0x3c09a740,0x3bf5512f, -0x3b6a263f,0x3c098ee9,0x3bd42685,0x3c0b4157,0x3c0ca37e,0x3bf81364,0x3b90caac,0x3b5fd602,0x390f7bf8,0xba8f8f5b,0xbb0cabb4,0xbae90915,0xbabcd757,0xbac2378a,0xba6d437b,0xb9ef5681,0xba010c66,0xb9ea0036,0x3b98f657,0x3b80c019,0x3b97d53a,0x3b787a37,0xb9d8b54c,0x3be2ce37,0x3b98be22, -0xba79c212,0xbae0fe49,0xbb14bd81,0xbae93a70,0xbb5d2a22,0xbb8a4617,0xbb9bcdb3,0x3b9c523a,0x3bfbdedc,0xbb7dd67b,0x3b97dce8,0x3bf1f94c,0x3bf5f8fa,0x3bcade38,0x3bcf6be6,0x3bc76b02,0x3bc1a0db,0x3bce2b7a,0x3bd9e663,0x3bdaa7c9,0x3bd3f0da,0x3bc1576c,0x3ba6dfbd,0x3b8a0adc,0x3b5d64bc, -0x3b77c34d,0x3b837db4,0x3b895fd8,0x3b90a7a1,0x3bf1a0d7,0xbb8a18e1,0xbb92f793,0xbb88dd0b,0xbb8aef38,0xbb707cc1,0xbb1a46fe,0xbb9f5b97,0xbb693715,0xb95c370f,0xbb1b92e7,0xbb376f73,0xbb34595e,0xbb095e1a,0xbb00c747,0xbb2d9656,0xbb337f4a,0xbb254072,0xb92d1fa6,0xbb3ee5b5,0xbb612b12, -0xbb184fd4,0xbb7ff77d,0xbb7e7b91,0xbb387c9b,0xbb966829,0xbba32e64,0xbbb91f15,0xbb5706ea,0xbb42f1bd,0xbb831d58,0xbbc9832b,0xbbeabcb0,0xbc01c746,0xbbadf42a,0xbb9c15e9,0xbb92a4e6,0xbbb1999f,0xbc156765,0xbbe8c744,0xb9d73641,0xbbe8321d,0xbbba7967,0xbb8d2c52,0xbae84225,0x3b4127de, -0xbae9a0d7,0xbb490565,0xbb38e001,0xbaf1e1f4,0xbaa14812,0xbadc3f36,0x3a5ca91b,0x3affe723,0x3b1686d1,0x3a0cc7f5,0xbb8984b8,0xbb4cf5f3,0xbbb75516,0xbbe58662,0xbb214b2c,0xbbd7a215,0xbbd32907,0xbbf23923,0xba8fcdb5,0xbad44e2d,0xbbd515ec,0xbc46bc52,0xbc6114e7,0xbc4e63dd,0xbb86fd15, -0xba7ba736,0xbaa9c85a,0xbbcd486a,0xbc6cce96,0xbb2394fb,0x3b5710b5,0xbb7a85a5,0xbb1d1c17,0xbb1f234c,0x3a25d3c8,0x3c3b9594,0x39b56ed3,0xba84f60e,0x38dbe282,0x3acfea11,0x3b82a90d,0x3b5d6e97,0x3bb7a973,0x3bf51f53,0x3c306706,0x3b9c2425,0xbb36f250,0xbb25cced,0xbb8a5c81,0xbbd38c03, -0x3ae3d835,0xbc054903,0xbc0fe05f,0xbc4a2b89,0x3ab72c56,0x3b19bdac,0xbbd8c5e6,0xbc9a2bd7,0xbccbe400,0xbcc986d4,0xbc27f335,0xbbf4a3c7,0xbb699a03,0xbc291cdd,0xbccc99e5,0xbbecfeb1,0x3bc59d32,0xbbab7bcb,0xbae0c589,0x3b907e1f,0x3c09d9bd,0x3cb91c3c,0x3bbe6267,0x3b839c55,0x3bd0625e, -0x3c84d7f7,0x3c60b5c8,0x3b077c9b,0x3c3874d3,0x3c8f783c,0x3c6c3692,0x3b923ca8,0xbc22f2ca,0xbbbd6a15,0xbc141ed5,0xbc783632,0x3b23d4b6,0xbc0dbb9c,0xbc02a9bf,0xbc3c6629,0x3c0a32a8,0x3c196ce4,0xbc165f12,0xbcddebae,0xbd103ffb,0xbcf651d5,0xbba789aa,0x3c04a048,0x3c7ea9bf,0xbb2d10d7, -0xbd6b1d20,0xbd5b7216,0xbd1b7f2a,0xbcafecd8,0xbc9613c0,0xbc9c3662,0xbc894b76,0xbbbc4b89,0x3a76b427,0x3c7b0978,0x3c3a54df,0x3c7151a0,0x3c988df1,0x3cc5d5d2,0x3c616538,0x3bfd9019,0x3be8bc78,0x3b22505a,0xbbb557df,0xbc112c58,0x3bca5563,0x3c0b9470,0x3c80d2f3,0xbc4c02d9,0xbc716d82, -0xbb11410e,0x3b05974c,0xbc310f46,0xbc804a3a,0xbd00b1e7,0xbcee5cb0,0xbc910fc3,0xbc83931c,0xbd1e335a,0xbdb2f856,0xbd7d462b,0xbd950105,0xbcc281df,0xbc8c5f9e,0xbc947f1d,0xbca4b2dd,0x3c3cc58c,0x3c9debb0,0x3b56acc9,0x3bd0efe7,0xba8f3dff,0x3b76f303,0x3a465152,0x3aff2112,0xbbac9c79, -0x3ca0286d,0x3cbbd94b,0x3c01185c,0xbb35f8a6,0xbc164dc9,0xbbfb8484,0xbc24ada4,0xbc918f40,0xbce24072,0xbc8dc847,0xbc9c6bde,0xbd0633b6,0xbd057351,0xbcd29801,0xbb03d38e,0xbd2f6387,0xbd2f14bb,0xbc1ea84d,0xbb5c65d0,0xbbf95650,0xbd0d37c7,0xbd8ebd3e,0x3dc6a143,0x3d9e9e36,0x3d833219, -0x3d8937ad,0x3d9556bd,0x3d627a57,0x3d126fbc,0xbbaa3ead,0x3c697102,0x3bf29244,0x3b6e862c,0x3b8f8a0d,0x3c287c55,0xba8a4bf8,0x3cd7693d,0x3cea9828,0x3c230cba,0xbb5d24f9,0xbc50b246,0xbc1fb905,0xbc663395,0xbc7cf06f,0xbc8f61e5,0xbd242dc3,0xbd355b19,0xbcfc295a,0xbcb28dd5,0xbc8516b1, -0x3b8143ba,0xbd26b8db,0xbd2ef05e,0xbd2a5034,0x3c51ee82,0x3d404598,0x3d41f1e9,0x3db9c7d3,0xbc1e5011,0xbc1742f3,0xbb8cca00,0x3aaf6425,0x3c18fd86,0x3cbb06d7,0x3d04fba2,0x3d00625e,0x3ca26244,0x3c0bcbfe,0x3b6c0e94,0x3c1f7fc9,0x3bb18d65,0xbc43060f,0x3baa1113,0x3c0310ff,0x3ba79d50, -0x380708fa,0xbc0a6ba3,0xbc8ef015,0xbcc97aaa,0xbd117395,0xbd3fa1cd,0xbd67abc4,0xbd6311b5,0xbd457ae2,0xbd3aef7e,0xbd0aec75,0x3ae28da9,0xbbc2bc61,0x3c97bd13,0x3d01dee5,0x3da340e2,0x3da3eb5f,0x3cd36ad7,0x3c2b1f8b,0x3ba3a7e2,0x3c2fb23c,0x3c7cf137,0x3c93f741,0x3cb6a1d8,0x3cc10a2d, -0x3c99821a,0x3c2c8ac7,0x3c2cb024,0x3c6e778e,0x3c6d378b,0x3c5a8a18,0x3c7aa85c,0x3c6c0779,0x3cf27224,0x3ce44c2a,0x3c7107e0,0x3bb77396,0x3be7871d,0x3c3bbbc5,0x3c32d375,0x3c5b4f1d,0x3c890408,0x3cb4a4b6,0x3ca76e7c,0x3c78bd89,0x3cdc0323,0x3d17a455,0x3d74626b,0x3ce8e053,0x3c6cf475, -0x3bda23b8,0x3b8d18dc,0x3bff1daa,0x3c4e0748,0x3b702a47,0x3a80178c,0x3bb2f332,0x3bebf9d0,0x3be7d4cb,0x3c162409,0x3c82c649,0x3ca9fb48,0x3c945d17,0x3cddc8c7,0x3cc76224,0x3c650087,0x3c965cdb,0x3c95a8c0,0x3c630dde,0x3bfa36cf,0x3bcbe6b3,0x3c6b9bbd,0x3c2e2683,0x3bc68c85,0x3c22aea8, -0x3c7b3c54,0x3c75ce33,0x3c4314c8,0xbc417fa6,0xbc3b082b,0xba271f1d,0x3beb4f30,0x3b9e1f95,0x3ad0ee7d,0xbcd398af,0xbcd54b3b,0x3b511580,0x3b6142c2,0x3c50f777,0x3ce6fe9f,0x3bd5842d,0x3c3d73a0,0x3c3eec49,0x3c5110a0,0x3c09a154,0x3b75c856,0x3bb0aa4e,0x3bcc1450,0x3c037253,0x3c11ca45, -0x3c36c13b,0x3c725c3d,0x3c76c210,0x3c722451,0x3c8891c1,0x3c8c934e,0x3c8b7c01,0x3c6e7e80,0x3c986e62,0x3ccb3712,0x3cd91efc,0x3ccfb84f,0x3cdcb4c1,0x3cfe7968,0x3ce5383f,0x3cbdc817,0x3c861946,0x3c08b7a2,0xba2520c5,0xbc23cfe8,0xbb874212,0xbb0c1794,0xbb3fb512,0x3b481483,0x3c0ab70d, -0x3c6bfb1f,0x3c6493cb,0x3bbf9342,0x3bf1cad4,0x3b23abec,0x3c3347d3,0x3c3b7ff9,0x3c7631a4,0x3c9fbb97,0x3caee24b,0x3cb6544e,0x3ca54e26,0x3c9b1b5b,0x3c98dc96,0x3c983670,0x3c9262eb,0x3c694453,0x3c268fe0,0x3c035940,0x3b8661e8,0x3b08e200,0xbc0e6af4,0xbc383a05,0xbc5af3ff,0xbc8ca21e, -0xbc929c7e,0xbc9385b9,0xbc933763,0xbc7fc6b4,0xbc490011,0xbc250f93,0xbc056b06,0xbbdb2877,0xbbaca54d,0xbb1fee82,0xba869098,0x395e6e33,0x3b21f1d9,0x3c036e1e,0x3c2859d6,0x3bcca9c8,0x3bc025f1,0x3ba23361,0x3c2997c3,0x3c0c46cf,0x3bea2806,0x3bd87ee3,0x3bf1a640,0x3bfd046d,0x3c02358e, -0x3c0413a7,0x3c0fcb26,0x3c12f18c,0x3c0a79eb,0x3be7c04e,0x3bb12623,0x3b9ca7af,0x3b6cf15c,0x3b90bdb6,0x3b75035d,0x3b6b5558,0x3b2ac80a,0x3ab20aaf,0xb98cb1af,0x3a899379,0x3ae55fe6,0x3b3ae458,0x3b4d673b,0x3b8174ca,0x3ba43c07,0x3bab142a,0x3bc245c6,0x3be3700b,0x3bf91b6b,0x3c29b095, -0xb9ac9b5c,0xbb3aa396,0xbb514c24,0xbb509cfb,0xbb61a838,0xbba1115a,0xba746a68,0xbaab8189,0xba85b996,0xbb3cc884,0xbb5ab3a6,0xbb5c3322,0xbb500996,0xbb3e85d7,0xbb0c38bb,0xb925eb6f,0x3a83d91f,0xbaac278f,0x397effd4,0x3a6d35bd,0x3b1e64a1,0x397ce66f,0xb792557a,0x3a06fde6,0xba45c16a, -0xba759cbc,0xb9b083db,0xba17ecd6,0xba5d4f57,0xba0bde1d,0xbb17de81,0xbae300be,0x3ac74662,0x3a6d6151,0x3a6d792b,0x3a97255c,0xbae19d28,0xbbed3176,0xbc29e7a2,0xbc32cb09,0xbc1b32fb,0xbc03e4f1,0xbb3b06c3,0x3a52f0c8,0x3b76c901,0x3a8b1d2d,0xb975cb01,0xba567499,0xb9029a80,0x3a6414fe, -0x3b899947,0x3b354b89,0x3b87b14e,0x3bbaa825,0x3bb2270b,0x3b1a3bc6,0x3bc67f68,0x3b5324d8,0x3afaa276,0x3b7d57ee,0xba0df72a,0xbad2544a,0xba687a25,0xbb294c46,0xbb80b6f1,0xbb8f1604,0xbc29ba84,0xbc1b2e4d,0xb934854c,0xba1aaa5d,0xba4e3411,0xba19d5e3,0xbba50d21,0xbca2a85a,0xbca83f96, -0xbc94e91e,0xbc7a4499,0xbc566826,0xbb8a606d,0x3b149318,0x3c26e0a1,0x3b062b9f,0xb9cc255d,0x389a1e20,0x3a8bc3a5,0x3b7984d8,0x3c4674a3,0x3beb474b,0x3c1954a3,0x3c567e48,0x3c439a7c,0x3c0f7aa5,0x3c1d7be2,0x3ba525e0,0x3afdbd0e,0x3b78e500,0xbb6fa9bc,0xbbb46b2e,0xbb8cae0e,0xbbbf1146, -0xbc137a99,0xbbf03e54,0xbc7f68cb,0xbc27dc61,0x3c26cd49,0x3be53381,0x3b9099e9,0x39a355fb,0xbc7617ee,0xbcc931fb,0xbd0fde89,0xbd33d5e9,0xbd271aa8,0xbce148e8,0xbc14f885,0x3b6ac12b,0x3c8b1066,0x3b9eef72,0x3b8c2dca,0x3b753f60,0x3c4fb18a,0x3c409ef8,0x3c4b9883,0x3c31c822,0x3c76a3e9, -0x3c9fe2f9,0x3c8088f5,0x3c5055fa,0x3c98ce31,0x3c582909,0x3bf7d75e,0x3c37e344,0xbadedc59,0xbbb52d23,0xbbb94760,0xbc58ebd2,0xbc844ce3,0xbc8cf17a,0xbd051066,0xbcdd1169,0x3bdbf053,0x3b9f15b0,0x3a0f0736,0xbbfd3eb8,0xbcbc621a,0xbd09d636,0xbcb1b405,0xbbe120c7,0xbb75547e,0xbc53f23f, -0xbc9c25d8,0xbc552248,0x3ba6d2a2,0xba1b5768,0x3bb6b56d,0x3bd93169,0x3c22c5b9,0x3c85ebbe,0x3cd36470,0x3c55d245,0x3c49cab3,0x3ca40ba8,0x3c6446d8,0x3b95ab00,0xbbaa185c,0xbb993eeb,0xbbac34a9,0x398dacfe,0xbca77202,0xbce3c414,0xbcfb53c9,0xbcc2ea08,0xbca53ec6,0xbd29996a,0xbc3cc14b, -0xbadedd36,0xbb7cd3f3,0xbc32b299,0xbc8ae3d8,0xbcd42e96,0xbd0a6bb5,0xbd423615,0xbd367be3,0xbd49c2db,0xbd081314,0xbc0b7e3b,0x3c85e770,0x3c9e459c,0xbc2c4b39,0xbb9b7229,0xbbf362d8,0x3b6f3a08,0xbb7376a5,0xbb4e4e10,0xbbb328d8,0x3cc0882f,0x3cdca4ae,0x3c5a17dc,0x3be5328c,0x3a547e32, -0xbad5f791,0xbb3a35f1,0xbbbe0806,0xbb809f1c,0xba5ca63c,0x3b9421fb,0xbbed00e3,0x3be82d38,0xbc1345ec,0xbd168746,0xbd6ea580,0xbd36206a,0x3c2b7a6f,0x3c6e1b2f,0x3c65745e,0xbcb1f071,0xbd25ca2f,0x3dab43a1,0x3dea40c5,0x3daa9997,0x3d98e0e3,0x3d90ceec,0x3d2b48a9,0x3cae0a79,0xbb973314, -0x3c0f3d34,0x3b149003,0xba928456,0x3ad3a502,0x3b2f65a2,0xbb5fab51,0x3be2c697,0x3c47dedd,0x3cbb3d26,0x3a5e57ac,0xbc0e1c4e,0xbc2cd310,0x3a7f883d,0xbb818bfe,0xbcb41c4a,0xbd0926b3,0xbd0454c8,0xbd053593,0xbb87a519,0xbb97f3f5,0xbc3e6a5f,0xbd5ff901,0xbd84248c,0xbc9c4bc2,0xbd81715e, -0xbd4f25f6,0x3c85f7f0,0x3d5427a9,0xbc140016,0xba2a979d,0xba20f454,0x3c77a351,0x3cb096bb,0x3d073686,0x3d0a1397,0x3cf4d63a,0x3c24d2cd,0x3abaae92,0x3c061660,0x3b3d5720,0x3ad53f59,0x3bfda2c4,0x3c16ecd7,0x3c232b03,0x3cc2c1e2,0x3bb42c4b,0xbbdf3694,0xbc167728,0xbc90ea31,0xbce6ff61, -0xbceb0cca,0xbcbfaff9,0xbc9ff3ea,0xbced7f19,0xbcd2da72,0xbd2d7c48,0xbd2fcd9d,0xbd806c14,0xbd062905,0x3d2ada6e,0x3d8dfc5e,0x3da2b961,0x3d668073,0x3c64dc42,0x3c4522d2,0x3c8dc7f2,0x3c918534,0x3cb2b31e,0x3cb067a8,0x3c9bb02b,0x3c704027,0x3c3624b3,0x3c4b1ca1,0x3c9313bb,0x3cf5361b, -0x3c95783e,0x3c7c8a18,0x3c3491bc,0x3cc70978,0x3cc442f0,0x3c7d0d3e,0x3c26e3fe,0x3bd7a6ef,0x3c10c6a0,0x3b9cd72b,0x3b9df403,0x3b735d6b,0xbbb58279,0xbc01d623,0xba98a9ea,0x3c710ef7,0x3cdaa492,0x3d232fdf,0x3c9a5beb,0x3c73030c,0x3d04ef61,0x3c1389c8,0x3aa8e140,0xbc724cb1,0xb9c53f7d, -0xbb802898,0xbbc7ca1c,0x3a27c966,0x3be71e13,0x3c876d2b,0x3cad0b89,0x3cbbe125,0x3c910335,0x3ca6b14b,0x3ca105a9,0x3c96e181,0x3c705002,0x3c44df2f,0x3ba2e7c4,0x3bb85c55,0x3c40670e,0x3cac92bf,0x3ca43634,0x3c9dbae6,0x3c80b388,0x3c6805a7,0x3c66b7b0,0x3c701322,0x3d0e4e85,0x3d35a027, -0x3d29d3fe,0x3d02e188,0x3c66fe88,0xbbbd06db,0xbc676fb3,0xbc420f56,0x3bb545ac,0x3c5bf744,0x3c3d08fc,0xbb277464,0xbaa56e28,0x3be1c1ef,0xba6db383,0x3b5ca982,0x3baff3c4,0x3bd820ea,0x3bd9a6f2,0x3c0e847a,0x3c25f529,0x3c1a149e,0x3c017bd6,0x3bfb1c81,0x3c41ab6f,0x3c92e9e6,0x3ccc8c75, -0x3c94c6ae,0x3c2e51bc,0x3b09265e,0x3bec750e,0x3c528789,0x3c7adcf1,0x3c6dbedc,0x3c7d4ec3,0x3c563e0d,0x3c32f81e,0x3c16dfa6,0x3c29e40b,0x3b551439,0xb928ff6d,0xbb789038,0x3b9aedcf,0x3c249c88,0x3c5eebbe,0x3c4cf0f0,0x3c7557f3,0x3ca32498,0x3c5ea970,0x3c9484eb,0x3cab037d,0x3c95eb93, -0x3ca59594,0x3ca72fcb,0x3cb3930c,0x3cb342bd,0x3cc22d2d,0x3cae1184,0x3cab0a0d,0x3ca3cc4f,0x3c966fe1,0x3c8118a3,0x3c744687,0x3c3b0768,0x3c27f5b3,0x3bf2a2b4,0x3ba4f342,0xbb07a868,0xba8bf927,0xba680e72,0xbadfe135,0xbaa9da03,0xbade7dfa,0xbb11ea12,0xbb2b8334,0xb8b4e1f3,0x3b01a653, -0x3b1c6f9e,0x3b6eba83,0x3b9bc15f,0x3bf0ec7a,0x3c243184,0x3c3eb2a1,0x3c5bffb6,0x3c748c15,0x3c6b2a89,0x3c8252ff,0x3c6ff4e4,0x3c6bbe8c,0x3c503f47,0x3c725334,0x3c67eb87,0x3c6ea96d,0x3c6cf975,0x3c6b3672,0x3c659928,0x3c648b01,0x3c638da9,0x3c60ca2f,0x3c4ce6f4,0x3c445e96,0x3c17abda, -0x3c13ca3f,0x3c09f3d4,0x3c0b401a,0x3c0a1e8d,0x3c0d546f,0x3c0c6af3,0x3c101f95,0x3c1322f3,0x3c0b6a49,0x3c1db870,0x3c2a67c0,0x3c3dac0e,0x3c403f8a,0x3c40c06a,0x3c398009,0x3c3fa51f,0x3c47aed6,0x3c4eae39,0x3c62c579,0x3c5fdd4d,0x3a79d7a2,0xbb28584f,0xb89684af,0xba094d26,0xba4da83b, -0xbb095d3e,0x3aaba4d7,0x3ae8c139,0x3b085748,0x3a48a1fb,0x39a35902,0xb9ac76c6,0x38bec49d,0x3a2dcffd,0x3b227609,0x3b2889ad,0x3b3f1c2f,0x3b1f71e3,0x3b4bf882,0x3b4d44bf,0x3b221bc9,0x3ae9bc97,0x3ac996b9,0x3b01915c,0x3ac4da7f,0x3a88a237,0x39838c59,0xb905c966,0xb9c0c42d,0x3a9cc25d, -0xbae8abf4,0xbac7c397,0x3b09fb55,0x39a642bd,0xba2cf3ea,0xbb310274,0xbb33049c,0xbc0b440d,0xbb67d23b,0xbc0c344f,0xbb80370f,0xbbc22a3d,0x3abc4800,0x3b8beda1,0x3bb454a6,0x3b349037,0x3a5b5719,0xb7b2e28b,0x389c8bc2,0x3ad8a790,0x3be0a87b,0x3bb6a2f8,0x3bd5d7fe,0x3bf915ba,0x3c028e8e, -0x3c05b8f0,0x3bdbfcc0,0x3b860f35,0x3b4da8d3,0x3b30d0cb,0x3aa6352c,0x3841822d,0xbacd3886,0xbab98959,0xba895d6e,0x3b757256,0xbb6eebfb,0xbadc9233,0x3c069e1c,0x3bbf8ee6,0x3b809c8e,0xbb5dbe2e,0xbbf9ca67,0xbc8362f0,0xbbc0173c,0xbc303e8b,0xbbc1cdb4,0xbc408f3d,0x3a8dd759,0x3bd1fee7, -0x3c2fc2eb,0x3b95d777,0x39af63c8,0xba75c522,0xba935a4e,0x3b6c5b7f,0x3c615562,0x3c2cee65,0x3c42d2c8,0x3c582267,0x3c65ada0,0x3c5f930f,0x3c1ec627,0x3ba73129,0x3b6f4250,0x3ba2f6f3,0x3b7df93b,0x3b05e330,0xb97b5bce,0xbb8f8b6f,0xbbd8e132,0x3b94557a,0xbc4b7137,0xbc18f32b,0x3c0ba8f4, -0xba6b4c30,0xbbb09b65,0xbc91fd68,0xbca17551,0xbca4c75b,0xbbf5657d,0xbc8f6ebb,0xbc6c4927,0xbc8fbc17,0x39fe313b,0x3c30f6e5,0x3c9bcbb1,0x3bbfb78a,0x3b29fdeb,0x3a86f647,0x3c0b9f57,0x3c378fba,0x3ca5106c,0x3c72356e,0x3c8cc04a,0x3cadfe64,0x3cb0559b,0x3cc14e18,0x3c755e17,0x3c153177, -0x3c08ca77,0x3b9de2ec,0x3b126816,0xb9260b36,0xb963cef7,0xbb9d3bb6,0xbb607f0e,0x3c5f4549,0xbc59b9e9,0xbbe2c213,0x3cc18ef9,0x3c7560e0,0x3c01ae67,0xbc23f6e2,0xbcc6feee,0xbd131d52,0xbcae8ed2,0x3c6c9c41,0x3c748282,0xbc1c3a79,0xbc088907,0xbbc2577e,0x3b9c0585,0x3b7503a5,0x3bc9207f, -0x3b8bdb7e,0x3b92d21b,0x3c35b7f6,0x3cbf4aa2,0x3c251803,0x3c0cef29,0x3c85c587,0x3bf512bb,0x38cb31aa,0xbbb26e30,0xbc70e9c3,0xbc90e70c,0xbc9bc2e1,0x3ab10f65,0x3a8ca8d5,0xbccadf4c,0xbcf419dc,0xbd0bbc3e,0xbd230a53,0x3b71757c,0x3c50a6ed,0xbb5f4a54,0xbc70501d,0xbcdaa751,0xbd433600, -0xbd3bd23a,0xbd33a623,0xbd45d055,0xbd3b89b0,0xbd053421,0x3b624a6b,0x3c6d5c2b,0x3c75b248,0xbc25bb6e,0x393c6fcd,0xbb0f42df,0x3b5c02cc,0x3a773a4a,0xba68d7d2,0x3b0f93ec,0x3cb7b2b1,0x3cb918b3,0x3c702d3c,0x3c2d32fd,0x3c0692e4,0x3b2cc73d,0x3b6ea4ed,0x3bc3a551,0x3bffc9b5,0xbb7fe60e, -0xba26582a,0x3af8f755,0x3b020a73,0xbc62b847,0xbd80105d,0xbd330ca0,0xbd077daa,0x3c6f9636,0x3bd2dd8f,0xb917c98a,0xbc844841,0xbcb10e3f,0x3d4ffe09,0x3d9eac74,0x3dbaad5e,0x3d98f395,0x3da21f4c,0x3ce2789d,0x3c2686d0,0xbb52c286,0x3aaae465,0xbad5bfb8,0xb93e0e0c,0x3a800ce2,0xbba32f7e, -0xbabefc02,0xbc354660,0xbaf5b50b,0x3d22aa99,0x3c36a227,0xba8e360f,0xbbf46465,0xbb75f74f,0xbc281304,0xbc70ce6b,0xbc12bb03,0xbc3fd88c,0xbd0fbf94,0xbc95d05e,0xbcf79fb5,0xbd8a591d,0xbd90ff83,0xbd8953e8,0xbc01be69,0xbda1dad3,0xbd9a0769,0xbd10fe4e,0x3c585113,0x3cf3511f,0x3ca347a8, -0x3c5918af,0x3cb5c374,0x3d0c0899,0x3d1453a5,0x3d076538,0x3cb6ea9e,0x3a841c55,0xbb8440d1,0x3b3c8403,0x3afed2c9,0x3b3a7612,0x3c52b657,0x3bcd8b7c,0x3c22b814,0x3d0db88c,0x3b77e250,0xbb868718,0xbbe847b2,0xbc915246,0xbc9ccf15,0xbc68806a,0xbc9f9189,0xbc69fecf,0xbc6e280a,0x3b199f5b, -0xbc46a9df,0xbd3d2fe9,0xbd8d024f,0xbd624389,0x3d0a7898,0x3d1f4e92,0x3d7ba0b3,0x3da0e61f,0x3d40e2a0,0x3c8f400f,0x3cbf1cbb,0x3c9e6de8,0x3ca4e4e4,0x3cbc90f8,0x3c8e0246,0x3c6a23c9,0x3c728769,0x3ca99a5b,0x3cc320f1,0x3ceba8ff,0x3c8cdce3,0x3c58fd98,0x3c34d8a6,0x3c7c373b,0x3c7ae60f, -0x3c81c417,0x3c0824e6,0x3bd42639,0xbb344d5b,0xbc3417e5,0xbc85a50f,0xbcb9408d,0xbd0a80fb,0xbcfa6adb,0xbcb78a8e,0xbba9f10e,0x3b978b94,0x3c14c804,0x3cfd2959,0x3d338b20,0x3d8acade,0x3d126208,0x3c4c08ec,0xbb096956,0x3c22b59f,0xbc0cacae,0xbb4c7b5d,0xba35b0c6,0x3bedd14c,0x3c8eaa7c, -0x3ca3d60b,0x3cacd688,0x3c9df469,0x3c52b8b7,0x3c3a2cd8,0x3c9ac2a9,0x3c32c159,0x3bf7eaff,0x3c0cee5c,0x3c7c59fd,0x3c9c3bf8,0x3c76a443,0x3c8e3bf6,0x3c83227c,0x3c5b4cea,0x3c53574f,0x3c94fdfe,0x3ced4d22,0x3d3f4d4f,0x3d57b632,0x3d57277b,0x3d233c6b,0x3cc7d296,0x3afa5dc8,0x3c62a3ca, -0x3c74f61d,0x3c1190da,0x3c676418,0x3c4aa3ca,0xbad9c3d3,0xbbde3d16,0x3c3a603e,0x3c0f44ec,0x3c108e1d,0x3c2a8ae9,0x3c2b3fc2,0x3c35c518,0x3c49b90c,0x3c79f6c9,0x3c55353d,0x3c335fe1,0x3c043552,0x3c3fb9b7,0x3c8bce7a,0x3ca353cb,0x3c4b69e6,0x3b6ee658,0xbb43141e,0xbadd3eda,0x3b37efac, -0xbb5ec442,0xbb907f18,0xb8a96ae3,0x39f22694,0xbb306815,0xbbaf55ca,0xbbb4c199,0xbadd9461,0x3ba5a683,0x3c2a5a11,0x3c67f3c0,0x3c8cd8f3,0x3ca87a69,0x3c88a8cc,0x3c518773,0x3c46c6dc,0x3c40c33a,0x3c62e8e6,0x3c795f71,0x3c90a82c,0x3c79e460,0x3c855118,0x3c83268f,0x3c6d1347,0x3c6f5cc9, -0x3c576030,0x3c6d196c,0x3c6bc108,0x3c669a6d,0x3c4f35ea,0x3c520816,0x3c3fa5ce,0x3c474cd2,0x3c396943,0x3c139447,0x3bed335b,0x3bc1cfbd,0x3be6fa28,0x3bf279d7,0x3c0c2b50,0x3c1f84ae,0x3c3804b3,0x3c3bb472,0x3c333621,0x3c1c914a,0x3c18ebcc,0x3c096c49,0x3c060c43,0x3c15c55c,0x3c23c5b2, -0x3c423452,0x3c4e41c1,0x3c55005f,0x3c429c34,0x3c44f5e8,0x3c4e1a2a,0x3c4e6229,0x3c611856,0x3c282b75,0x3c32bb1a,0x3c4dc34c,0x3c538b9f,0x3c4d6415,0x3c4cdd1c,0x3c4949ec,0x3c46b114,0x3c4602b8,0x3c327658,0x3c267fe4,0x3c282e5f,0x3c1d001b,0x3c11d38a,0x3c19f045,0x3c1e5154,0x3c1bb1a6, -0x3c1a5a85,0x3c1ca53b,0x3c1dcc2e,0x3c252f98,0x3c26b1cb,0x3c2a1d01,0x3c2892d5,0x3c2e889d,0x3c2ece5d,0x3c24f73e,0x3c2b98c9,0x3c2cfa55,0x3c31e0ba,0x3c3aeaac,0x3c3e6a6d,0xb9a40b86,0xbb32fbc3,0x3a350215,0xba5cbadd,0xb9f57c5b,0xbaa33301,0x38a7dc83,0x3a7f53e8,0x3b224c8d,0x3ab36c62, -0x3a2a7ed7,0xb9a64fa6,0x3881e201,0x3a3624b6,0x3b2a6f77,0x3ad1822e,0x3ad603e5,0x3b3353f1,0x3b104dd5,0x3ae26afa,0x3a85aeb2,0x392e32ff,0xb98aa28d,0xb9122ff3,0xb8f92152,0xba272928,0xbb0ea11c,0xbb01986d,0xbad239d9,0xb935fb5b,0xba2658e0,0xb98b9014,0x3ae8752b,0xba2eaf9e,0xbabd6eca, -0xba83cdd3,0xbb4d4a21,0xbc02ef72,0x3702c8a7,0xbb5ffc82,0xbb79cdb6,0xbbd3aba5,0x3aba05a2,0x3b741c61,0x3b97395f,0x3affb2fa,0x38eb87c9,0xbac41b55,0xbac1d527,0x3969d640,0x3b925974,0x3b9ebbc6,0x3bc01427,0x3bbe7aa0,0x3be022b1,0x3bcece55,0x3b61c89d,0x3a03e6bd,0xba5fa370,0xba5e4915, -0xb9d0885c,0xba9e1929,0xbb8e8fd9,0xbb55f8ae,0xbb38e03d,0xbaa75e0c,0xbb3b309e,0xba93b97f,0x3b6cdb56,0xba5e1db1,0xbb2bd8b2,0xbacee699,0xbc0d8e46,0xbc825197,0x3b2a2dc5,0xbac934f9,0xb5ca806b,0xbc0793c2,0x3b2a644b,0x3bd9b150,0x3c16036a,0x3b974a62,0x39e4b5e6,0xbb2e3ba3,0xbb2a502f, -0x3aab51b8,0x3c1ce618,0x3c28e0ee,0x3c3a17d1,0x3c3c1586,0x3c5829ce,0x3c3c15fe,0x3c02a567,0x3b23219e,0xb96845ed,0x3ac42ba5,0x3aa215f8,0xba39d2dc,0xbc0e3ad4,0xbc095eae,0xbbdf9277,0x3a6a89ac,0xbab5d92b,0x3ae8a549,0x3c2c4c23,0xbb49697c,0xbbe37824,0xbb347e6c,0xbc95b8c9,0xbcde842a, -0x3aea3bb8,0xbb8c1422,0xbc01080e,0xbc6a6c49,0x3c0f92ed,0x3c623e12,0x3c8a1532,0x3bfda0c5,0x3ad72f63,0xba16131b,0x3b9884fa,0x3c0eecfc,0x3ca682b4,0x3c6e32ae,0x3c949262,0x3ca840ba,0x3cba8956,0x3c94c6b2,0x3c4bb48b,0x3b95ebf6,0x3922737c,0x3abbdcfb,0x3a9f98cb,0xbaf72f80,0xbc19166e, -0xbbd067b8,0xbb33ecc3,0xb7cb24d6,0xbc0b9850,0xb8c701cf,0x3c739027,0xb9d48a63,0xbbafa135,0x3b6b5c66,0xbcc685b9,0xbd0fa5f1,0xbd423910,0x3c32e03d,0x3c9527df,0xbc51ccb0,0xbc047114,0xbbb279e6,0x3b40e90b,0xbbb05adf,0x39836d52,0x3bdd41a8,0x398831ab,0x3bbca5e0,0x3ca6ed61,0x3c38da4a, -0x3c0d3f73,0x3c28313e,0x3b9f41ed,0x3a30ff18,0x3afe9cda,0x3afbb20b,0xbb2a7ceb,0xbbfd0507,0x3c0e3940,0x3c1cad46,0xbb700db5,0xbcdad1e7,0xbce51edd,0xbc3b0dba,0x3cec20ed,0x3cc76b37,0xbca6cb33,0xbcb34014,0xbd1a8974,0xbd79858a,0xbd3a6d29,0xbc50aa91,0xbd3e6c27,0xbd39473a,0xbcf5933b, -0x3b6e04f0,0x3bd552fd,0x3bc743bc,0xbbd8e510,0x3a9b7652,0x3a30ac74,0x3b1479bf,0x3af29ec2,0x399e937e,0x3baad891,0x3c2e0c4c,0x3c5a89d6,0x3cbe776f,0x3c4d2e60,0x3c07d5f3,0xbb1ff0b6,0xbb388fb4,0xbaaa871f,0xbae0ea0e,0xbc58ea4e,0xbc9f62fa,0xbc69d89a,0xbcfe87a1,0xbd1a2193,0xbd3833d5, -0xbce77a8b,0xbb722dd7,0x3cb8a960,0x3b40925d,0x3c01f3bf,0x3d07a549,0x3c77f832,0xbc76bc56,0x3ccfc142,0x3d88885f,0x3d720d9a,0x3d5545f1,0x3c0ba2cc,0xbb272b02,0xbaebb29e,0xba2a4a42,0xb9a7de28,0x3b4a5df4,0x3b8aa9eb,0xbb9ab050,0x3bd0e62a,0xbc21e612,0xbabdcc81,0x3d267b15,0x3c611561, -0x3abb8a8d,0xbb1969d6,0xbbe02217,0xbc1e63ee,0xbbe182ce,0x39611b77,0x3b57f107,0xbbbed71d,0xbca328c5,0xbced1f17,0xbd2e1d40,0xbce1c830,0xbd0ffd2a,0xbd33d7ed,0xbd9e7faf,0xbdcd6035,0xbdfdd928,0xbd8690ef,0x3da1874a,0x3d358dc7,0x3d03705b,0x3d04b118,0x3d3b38d4,0x3d128ded,0x3ce83c1c, -0x3c9cab34,0x3b1f8811,0xba34e80c,0xb90e8974,0x3a81493d,0x39aa900b,0x3c0ce624,0x3a793487,0x3b4c165f,0x3cd0b12b,0xbbbca4db,0xbc67197b,0xbc5aba5c,0xbc8a27c0,0xbc6f9755,0xbc50f31e,0xbc8a558e,0xbc61647f,0xbb1bee06,0x3c3ba0c5,0x3bce8c76,0xbd0cc6a2,0xbd1e064a,0xbd2455e5,0xbc1df1ff, -0x3c8bff7e,0x3d56e3e7,0x3da67b0c,0x3db8c77b,0x3c03c486,0x3c28f7ec,0x3c768ac0,0x3c8403c1,0x3cb46f46,0x3c8f03f0,0x3c9c28f7,0x3cd35136,0x3cc27289,0x3cbf0e91,0x3cadafcf,0x3ca68221,0x3c87667c,0x3be042b9,0x3c11ed4c,0x3c3961c6,0x3c95a400,0x3bf5bb4d,0xba75da22,0xbc0d07f0,0xbc751bbc, -0xbcb9af7e,0xbcf2e3b0,0xbca31108,0xbc801a95,0xbc63ef39,0xbccfcfe4,0xbcd51060,0xbcbea561,0x3ccd99e3,0x3d6535cc,0x3d9c2b79,0x3d6736d1,0x3cf7c1d8,0x3b9dd9aa,0x3be57acc,0x3c1ef491,0x3c2bbabf,0x3c372d2b,0x3c8420a4,0x3cb12c3d,0x3ca29ae2,0x3c8b5186,0x3c49d560,0x3bfc39b4,0x3bd3f151, -0x3c09db42,0x3c1f8547,0x3c27b565,0x3c848f77,0x3c9bdb83,0x3c85be7b,0x3c1f40d3,0x3c41d11c,0x3c5332f2,0x3c78bc27,0x3ca52faa,0x3cdf82f5,0x3d103ddf,0x3d1110a7,0x3d0dc310,0x3d23c994,0x3cff7ee2,0x3d0bb3f0,0x3d1eca4d,0x3d0cfb0e,0x3cf16f78,0x3cd87907,0x3c1cddf6,0x3c1842bf,0x3c5d687d, -0x3c0adc44,0xb890f293,0x3acf7f31,0x3bd0f074,0x3bf6d803,0x3c0a5079,0x3c1aadce,0x3c4036fa,0x3c69e3b3,0x3c6705a4,0x3c651779,0x3c5cfbee,0x3c3d354b,0x3c3e1954,0x3c182027,0x3bfcb5b8,0x3be0d34d,0x3be8b06d,0x3a69b758,0xbbcc893c,0xbc1637f4,0xbc02f128,0xbc3d87b1,0xbc4f8b2a,0xbc3ab9a3, -0xbc1d2b95,0xbc052b0d,0xbb94fe02,0xbb02b57c,0x3ada50fd,0x3ba0232e,0x3beca2dc,0x3c005e4a,0x3bd291e9,0x3b3759b5,0xbacef0ac,0xbab43781,0x3c5bc5eb,0x3c60eaf5,0x3c5a9acd,0x3c45076b,0x3c47b1b7,0x3c31c49f,0x3c20b39e,0x3c17f9a1,0x3c20084e,0x3c304187,0x3c42b618,0x3c4c380a,0x3c54e74e, -0x3c6755c9,0x3c545508,0x3c3b4977,0x3c335617,0x3c1f1bc0,0x3c09d613,0x3c014359,0x3c15974f,0x3c2648cb,0x3c32cb40,0x3c3d6553,0x3c411d98,0x3c3d639f,0x3c450cd9,0x3c4494ef,0x3c3a15da,0x3c1c3ad4,0x3c04803e,0x3bf78ad8,0x3c118bbc,0x3c2f8e33,0x3c429542,0x3c5f6d8c,0x3c5e7bb5,0x3c6d203d, -0x3c4cb4c9,0x3c3d701f,0x3c2158b6,0x3c4bf459,0x3c325f0c,0x3c1bb31b,0x3c255a2f,0x3c25f270,0x3c271288,0x3c2d9e0c,0x3c30f179,0x3c371cd0,0x3c3941c2,0x3c486235,0x3c0f5775,0x3c24203c,0x3c3176bb,0x3c3dcd7d,0x3c374ac0,0x3c3626bf,0x3c35bc22,0x3c321794,0x3c3271d1,0x3c361dfa,0x3c2e9ee8, -0x3c2b2e9d,0x3c2e954d,0x3c3a5140,0x3c46016b,0x3c4933ea,0x3c4c38e8,0x3c4de1da,0x3c5409ed,0x3c533913,0x3c8df35d,0xb994b1e4,0xbafcf145,0x39e185d7,0x38846519,0xb8d64440,0xbac3bdb6,0x3aad80b3,0x3aab3b59,0x3aaf76a3,0x3a309da4,0x38857747,0xba7b2386,0xba2c46ef,0xb97adc1f,0x3a856d1b, -0x3abe675a,0x3af0e07f,0x3af2e01d,0x3b01f339,0x3adf3c8f,0x3a958210,0x38627b7e,0xba13a52b,0xba8b13bb,0xba80e8ea,0xba9f7551,0xbaf6da93,0xbacc7bf7,0xbaa40a8f,0xba3b9e76,0xba10acf6,0xb9fdd356,0x397efcf9,0xbb1686d0,0xbb32f769,0xba292dd0,0xbb1dff87,0xbb9d7848,0xba9d6da9,0xbb1f93bb, -0xbb3a2e6e,0xbbb61578,0x3b1b7f32,0x3b9a1690,0x3b79b217,0x3b0ffdc6,0x39c89bba,0xbaa0ad22,0xbab8268e,0xb8ecf6bf,0x3b2f9878,0x3b80b4c2,0x3bb20b92,0x3bc3ba15,0x3bcdf0df,0x3bafce52,0x3b81b404,0x39c0715b,0xbaa6acdb,0xbadee162,0xba95218c,0xbaed60a2,0xbb8d27b4,0xbb8a87ea,0xbb6fef3b, -0xbb352c4d,0xba40a36d,0xba0abfb9,0xb9bf4624,0xbbbce80d,0xbbe4f521,0xbad39e59,0xbba626db,0xbc3c4f60,0xba7786e5,0xbba7839b,0xbb6afb8c,0xbbda9556,0x3b9cf7ee,0x3c0c9c33,0x3bf8a5a1,0x3ba01187,0x391ddf3b,0xbb36ea0c,0xbb489af2,0xb979a005,0x3bdc4bd1,0x3c1ac2ff,0x3c3447ba,0x3c43656e, -0x3c4c4a83,0x3c35a732,0x3c17eb69,0x3a941dbe,0xbb1cf58f,0xbb80283c,0xbba2a80d,0xbbd8ef5d,0xbc406eba,0xbc175101,0xbbe0f8ed,0xbba848b6,0xbae14414,0xbb125e7a,0xbaecc74d,0xbc6c8ec3,0xbc955606,0xbb9d90f5,0xbc54875b,0xbc58c343,0xbc0d2f87,0xbc9764ef,0xbcb406d3,0xbcbc9d15,0x3ba9ec42, -0x3c4a233c,0x3c5df4c6,0x3c060b3e,0x3afb28c3,0xba912754,0x3b115b4c,0x3be68d06,0x3c90e511,0x3c4925dd,0x3c864061,0x3cbc5466,0x3cc27093,0x3c9d8b3e,0x3c78440b,0x39b30a59,0xbbaa8810,0xbb9c3b91,0xbb9f69d0,0xbbeb8a3c,0xbc8cd452,0xbc5c9d37,0xbc283e79,0xbc3da0bd,0xbb98e47d,0xbb805008, -0xbb97283e,0xbca02026,0xbcb68a2d,0xbbb38398,0xbc7311ba,0xbce8d0f0,0xbd3bf163,0x3c50ed9d,0x3ce088d8,0xbbbf493e,0xbb3e22e8,0x3a07a25e,0x3c4e7581,0xbc03ade4,0xbc0d28d3,0x3bcb6360,0xbabb7c99,0x3b56ec7a,0x3c7fa1c4,0x3c840e10,0x3c75622f,0x3c242121,0x3c135672,0x3c2624f4,0x3c43cff9, -0x3c142b68,0x3b767d8d,0xbaabab71,0xbc21edfb,0xbc9fadb6,0xbcec9e08,0xbcdc118b,0xbc6dec5b,0xbba30319,0x3cc60c38,0x3cac0f99,0xbc83d5f0,0xbcaeec48,0xbd1791ed,0xbd57cffb,0xbd11fec1,0xbb95316e,0xbd0fed01,0xbd07eab0,0xbcb27c62,0x3c6b060a,0xbb5fbaac,0xbc347e35,0xbc1f379d,0xbbeba90e, -0xbbb72070,0xbb263487,0xba1fb90f,0xba585c92,0x3ac901a1,0xb8440eae,0x3bcc81ca,0x3ce1c1f0,0x3c4a71a1,0x3b48a204,0xbb9af3d8,0xbb415036,0xbb127301,0x3ad2fed4,0x3be28106,0x3b547d44,0xbbfd7530,0xbce69b67,0xbd00396a,0xbcb683c8,0xbb42ea0b,0xbbdce873,0xbccc4c64,0xbca5c099,0xbb79db31, -0x3c8a63a5,0x3c23e953,0xbda093ee,0xbcf12e52,0x3cf6bc98,0x3cdf8400,0x3c951d73,0xbb8aead7,0xbb8bedca,0x3b576685,0x3ac4b8d8,0x3a49eee0,0x3a762e82,0x3b93d8d6,0xbb7567ff,0x3ba3a4af,0xbbe519ba,0x3a3706e8,0x3cf0301b,0x3c789e24,0x3c122cb5,0x3b9ea1bb,0x3bff20ae,0x3bd2e395,0x3b2158df, -0x3bcdc716,0x3bf6dc1f,0x3c888349,0xbc8df3fb,0xbcfc40cd,0xbd1fc147,0xbbc1b28b,0xbb0a6337,0xbd08122a,0xbd153553,0xbd96d809,0xbdf39020,0xbdc6386b,0x3de60b9c,0x3d8d3e08,0x3d4a9b23,0x3d353383,0x3d4cbd46,0x3d13f176,0x3ccb20d0,0x3c85a792,0x3c05d9c3,0x3b97720b,0xb8165573,0xbab7205d, -0xbaec7288,0x3c31e3e1,0x3b98ff34,0x3ba52cd2,0x3c9b0913,0x3a4a64e3,0xbc083f3e,0xbc3de96a,0xbc5c4566,0xbc554c37,0xbc54b100,0xba5eff22,0xb9b99d55,0x3bb8178f,0xbcba3337,0xbcfa5f98,0xbd0e1a20,0xbc8140c7,0xbc8d4c6e,0xbd304596,0xbb90c8ae,0x3d086e88,0x3d8f9945,0x3de59fb0,0xbae9ff52, -0x3b74c173,0x3c1139e1,0x3c48aab7,0x3cb701fe,0x3c931c11,0x3cb23562,0x3cfac9fd,0x3cc54e05,0x3ca74bb3,0x3c85ecef,0x3cbe9a50,0x3c94b654,0x3b4fb20e,0x3ba070d9,0x3c135915,0x3c9f700a,0x3c193020,0x3adb3b86,0xbb47422c,0xbaeb2911,0xbbe28171,0xbc9ef1b5,0xbc799fc3,0xbcd9aab4,0xbd074d2f, -0xbd599cd3,0xbd3d2e05,0xbcc5cbf0,0x3c2a64c1,0x3d2d5ba1,0x3d77e3e2,0x3d89b75a,0x3d5de15e,0x3cf0bae9,0x3bd22e05,0x3cd44b30,0x3cc365ea,0x3cd0661c,0x3cdadbf3,0x3ccba3d0,0x3c96fd7c,0x3c562391,0x3c338edb,0x3b90edc3,0x3b0e6f1f,0xba008260,0x3c04be4b,0x3c6e076c,0x3c99e31a,0x3c91483b, -0x3c56432d,0x3c355116,0x3c21b64b,0x3c5046d3,0x3c6f19f9,0x3c829c90,0x3c87ec45,0x3c81c28a,0x3c877592,0x3c969ae3,0x3c90990a,0x3cd505eb,0x3d16279b,0x3d4cddd1,0x3d38f9f0,0x3d1822ef,0x3d035922,0x3c577f67,0x3b92d67b,0x3c0f337d,0x3cadf2a7,0xbad51c73,0x37f30111,0x3b922be0,0x3c263404, -0x3c70703c,0x3c79603d,0x3c886f2e,0x3c91463b,0x3c8da032,0x3c852b17,0x3c77edd0,0x3c32b339,0x3bffa0d9,0x3b927000,0x3c064462,0x3c5297bd,0x3c8faa0b,0x3c735b67,0x3c15669c,0x3c340a3f,0x3c378bdf,0x3c049e11,0x3be7a48f,0x3bc241dc,0x3bb241e3,0x3b5a4b07,0x3b8c7891,0x3b767752,0x3ba6c593, -0x3b8f2460,0x3b9981c1,0x3ba45ea8,0x3b697801,0x3aaf363c,0xbb73092b,0xbb8488d4,0x3c69912a,0x3c59ed7e,0x3c4dc410,0x3c3418d2,0x3c2d850c,0x3c22e706,0x3c18019c,0x3c03da78,0x3c086c94,0x3c0376b5,0x3c14ec0b,0x3c1825f7,0x3c279be2,0x3c2f2359,0x3c230001,0x3c0789ff,0x3be1d3d1,0x3bda0dc0, -0x3bd55082,0x3c0347c7,0x3c07cf03,0x3c094d62,0x3c0ed959,0x3c140e29,0x3c1aba71,0x3c284b53,0x3c3903b4,0x3c49757a,0x3c506299,0x3c5d4e9c,0x3c66e4c8,0x3c70f029,0x3c69adad,0x3c6d55c6,0x3c7792d4,0x3c7ab3c1,0x3c5202c8,0x3c4eaaa9,0x3c740aa3,0x3c790070,0x3c75acaf,0x3c5f8234,0x3c70ec7d, -0x3c6e1b3d,0x3c74f347,0x3c7aa636,0x3c7a1bf8,0x3c7fc6e3,0x3c80cb10,0x3c8387fa,0x3c6b5921,0x3c59c059,0x3c67521d,0x3c60b667,0x3c552bff,0x3c3e3c11,0x3c3a9211,0x3c3c9e9c,0x3c3bb35c,0x3c3a5c0c,0x3c38df04,0x3c33bed2,0x3c374fd6,0x3c3cec70,0x3c468e55,0x3c50478c,0x3c5a02e9,0x3c689469, -0x3c62cc33,0x3c5df4a6,0x3c586241,0x3c52a9f8,0x3c812357,0xba4979ab,0xbb3b95a0,0xba83322f,0xba707c8a,0xba3916ad,0xbad30d0a,0x3a46ecbd,0x3a713cbf,0x3a23d71a,0x398ef91d,0xb9c2445d,0xbab89b91,0xba971306,0xba657b49,0x3890db9c,0x3a302c94,0x3a895e46,0x3adda8ff,0x3a3502ef,0x39324b07, -0xb9165a01,0xba3a13c2,0xbaa0d245,0xbad1b98b,0xbaa1657e,0xba989bdb,0xbadd6ef7,0xba386d59,0xb9e08e7b,0xba5bbfd7,0xba069ef1,0xba41ca7d,0xbaa6b4f8,0xbae534f0,0xbb0b2431,0xbafdebd8,0xbb4cbdfe,0xbba5855d,0xba99ffc7,0xbad370cd,0x389267f6,0xbb6e7244,0x3b7b31b5,0x3bb016e5,0x3b4c77c4, -0x3b0f9c36,0x390d39ce,0xbb0e311a,0xbb1acc28,0xba8b55a9,0x3a9ea1e1,0x3b697daf,0x3ba49529,0x3ba3cb55,0x3b8a9d67,0x3b7d2bf2,0x3afdb084,0xba0f209f,0xbadf093c,0xbb2ee46f,0xbb183fb8,0xbb23a55a,0xbb83ddc2,0xbae02c93,0xbad42472,0xbb603006,0xbb1fa404,0xbb198a79,0xbb587bad,0xbb801142, -0xbb8053e6,0xbb411079,0xbbbd316f,0xbc3191e6,0xb91ffd67,0xbae36519,0x3a6472fd,0xbbb98218,0x3c022e10,0x3c2c2588,0x3bd851bc,0x3bc3b8d4,0x3a786f08,0xbb843ffa,0xbb9968bd,0xbaf451d0,0x3b98a118,0x3c1e6abb,0x3c3e130a,0x3c2f3d58,0x3c1bb43d,0x3c00bff7,0x3bb3a0a3,0xba73d310,0xbb427dc6, -0xbba8f423,0xbb7f3d68,0xbb839776,0xbbc8182d,0xbad687b1,0x39ca4e11,0xbb60144a,0xba0a303d,0xba809bfa,0xbbc4e0bc,0xbbc76067,0xbbfccf57,0xbc119527,0xbc600794,0xbb9d4885,0x3c09cf24,0x3adafaf8,0x39cc9b77,0xbc2d2c7b,0x3c33dc36,0x3c83dd94,0x3c6df9ef,0x3c1b87db,0x3add4467,0xbb1464f2, -0xba6c4800,0x3bac2aff,0x3c815c9e,0x3c657f4b,0x3c86f239,0x3ca7e363,0x3ca390e9,0x3c8c58b5,0x3c47db59,0x3abf1340,0xbb2843e2,0xbbc68aa9,0xbbba706f,0xbbb580ac,0xbc2241ab,0xbb87a80b,0xbb990eef,0xbc47e2e1,0xbbe28261,0xbbb9bbd4,0xbc1c1f08,0xbc02efa5,0xbbb51f05,0xbbbf0519,0xbc4e4ae0, -0xbd2670e2,0xbd1d870d,0xbaa7c083,0x3c792fc1,0xba035a3b,0x3bd7627c,0x3c0caa02,0x3c415bc3,0xbb91dd7a,0xbc071c99,0x3a2069ea,0xbb2fffe3,0x3b11c132,0x3c352f8e,0x3c9c2701,0x3ca3f2e1,0x3c2f0787,0x3c47650e,0x3c49ef9e,0x3b9e2fc1,0xbb85e419,0xbbbfe569,0xbb5b6011,0xbc1783bd,0xbc7dbb9a, -0xbccc2115,0xbb9b49ed,0x3b4b536c,0x3c341b5d,0x3c71a303,0x3bc237c0,0xbbd9a9c0,0xbce51786,0xbd26121a,0xbd3008b9,0xbd34f771,0x3b8919ab,0xbd07612a,0xbcdf9d1c,0xbc4fc37b,0x3c7e8330,0xbba4f43b,0xbc971a5d,0xbc97be80,0xbc28cae0,0xbbea924c,0xbbdb50ff,0x395f40e9,0xba6e90a3,0xba4ecfa6, -0xbb81cfc4,0x3b1654d0,0x3cc9b39b,0x3c3fc955,0x3bb92f65,0x3b89b706,0x3bde97fa,0x3bcbd78f,0x3bccddec,0x3c52ff23,0x3b2e7f5e,0xbcc818ef,0xbcccaa98,0xbcbd95cb,0xbcac3398,0x3b83f1df,0x3bfa5d47,0xbc5496eb,0xbb5120a0,0x3a82d9f0,0x3c0d6343,0x3c4a33e7,0xbdd38a77,0xbd877197,0xbc933287, -0xbc07da5c,0xbc4865d6,0xbc72ddde,0xbbe752b2,0x3b79eefa,0x3ae2e869,0x39dd1168,0xbb83503c,0xba6943ce,0xbbc843e3,0xb96d38ee,0xbba43730,0x3a00745f,0x3c9c52b8,0x3c818337,0x3c6af7f4,0x3b9440c2,0x3bbd0c25,0x3bc813e1,0x3ae8de1b,0x3bd98e83,0x3b44aac5,0xbb0688da,0xbc426d4a,0xbc87b9d8, -0xbcc11746,0xbc0a2bc1,0xbb1f5097,0xbcadfbdb,0xbcc4be76,0xbd50532a,0xbd96208e,0xbddc3808,0x3dd2bb58,0x3dc29e88,0x3d99c438,0x3d850aa6,0x3d62a5a7,0x3d2c6791,0x3cd021f9,0x3c1e91a6,0x3c1f03e6,0x3bb22ccd,0x37606280,0x3916346c,0x395bf670,0x3be2dbe0,0x3ba4979e,0x3be6ca96,0x3c723a97, -0x3c3f6593,0x3bba0d4f,0xbb9606aa,0x3aa81dfc,0x3b238396,0xbad80879,0x3c5154e7,0x3b5a05ae,0xbc74e9d8,0xbd478e45,0xbd5d03c2,0xbd188a7b,0xbbfbe804,0xbbbb91fb,0xbd18fb79,0xbd2c1492,0xbc964455,0x3d2690d2,0x3da4b2ed,0x3bff3449,0x3c0dfda6,0x3c405eee,0x3c8de43f,0x3ccf22cf,0x3ca436b4, -0x3caa1826,0x3cc2d0cc,0x3cab078a,0x3c8df1f3,0x3c52b604,0x3c906b8e,0x3c5bb00f,0x3b9e8d02,0x3b2ba17c,0x3b9ab729,0x3c845a9a,0x3bf3f732,0x3b73eec8,0xbb28a2eb,0xbbd06239,0xbc1e9644,0xbc84655e,0xbcf82818,0xbd2f46b7,0xbd3f5c35,0xbd77d248,0xbd572ddd,0xbcc33cd3,0xbc2c7171,0x3c73abb1, -0x3d2c71cd,0x3d798ef9,0x3d7e86a5,0x3d597358,0x3cbdc7c2,0x3c9ba44a,0x3ca87096,0x3ccea769,0x3cc8c22c,0x3cafc7f2,0x3c7e3648,0x3c45b04d,0x3c534c1a,0x3bd1e867,0x3b8e0013,0x3b72e858,0x3ba7aa07,0x3c2af252,0x3c52eaef,0x3c7a3ad2,0x3c65a883,0x3c6d2a31,0x3bf86a7d,0x3c04a3d2,0x3b960dbf, -0xb9162b03,0xbb85694c,0xbc16f662,0x3b009cb8,0x3c0717e5,0x3baa0219,0x3cd499e9,0x3d17d4a1,0x3d2cea02,0x3d3d6c80,0x3d2ead51,0x3ce83b48,0x3c7c604b,0x3c0ef71b,0x3bd79ecc,0x3c6d1ee9,0x3bf81b41,0x3c1cd92e,0x3c25c5f8,0x3c6845a7,0x3c98803d,0x3c995b87,0x3c9a1680,0x3c9da318,0x3c947706, -0x3c8e1081,0x3c6b6b5b,0x3c6b9629,0x3c2be74a,0x3c165cab,0x3c306099,0x3c7388fd,0x3c988cce,0x3c93cf38,0x3c8b0ee2,0x3c7a6203,0x3c979fec,0x3cb7ae65,0x3cc6254d,0x3ca642d3,0x3c8c2be2,0x3c57cab4,0x3c62ec83,0x3c661563,0x3c84eb43,0x3c1b7188,0x3b84fc62,0x39873c71,0x3b32b218,0x3b637293, -0x3aecfcb9,0x3b9013dc,0x3c22c9ac,0x3c155968,0x3c2f6db7,0x3c0ba460,0x3c0bbce1,0x3c078e38,0x3bf25a7e,0x3beb5823,0x3bbfbcdd,0x3bc8479b,0x3bbc6ca2,0x3bc6cb63,0x3bd6ab73,0x3bdcb276,0x3bfa5c19,0x3c069fe1,0x3bf14f60,0x3c0c1805,0x3c0bb387,0x3c609fa2,0x3c411d62,0x3c0ba1b6,0x3bfbb6be, -0x3bc57746,0x3bacca42,0x3b8f8d7d,0x3bce7710,0x3bf81cae,0x3c1aec7a,0x3c32300b,0x3c520d92,0x3c59aaa8,0x3c4608bf,0x3c373278,0x3c368d0c,0x3c2ed53a,0x3be1ecd4,0x3bc6b3ea,0x3c0e5293,0x3c211265,0x3c4ac7b3,0x3c00903b,0x3c24f6bd,0x3c4d96ed,0x3c4c872b,0x3c480405,0x3c47ca86,0x3c3fe441, -0x3c3cb852,0x3c383dff,0x3c16bad4,0x3c0c451d,0x3c45c4ee,0x3c32d4ec,0x3c28f85b,0x3c415f7c,0x3c263bbd,0x3c1ea043,0x3c0c1f97,0x3c025276,0x3bec4f87,0x3bc021d6,0x3bd596a4,0x3bda9c27,0x3bd82daf,0x3be8a7f2,0x3bf44d09,0x3c08d5a0,0x3c04ac0c,0x3c029d49,0x3bf9d62a,0x3beafbab,0x3c006a41, -0x3a86b66e,0x393d29c3,0x3ad5dbf6,0x399b3c2f,0xb8e7dfc8,0xbb048786,0x3af31c51,0x3ad107e2,0x39142bf0,0x398cf663,0xb9c0eeb2,0xbadcaf3e,0xbad23512,0xbab4a59c,0xba1288b0,0x3aad014b,0x3b189355,0x3a71900b,0x3a5f26c4,0x3a311743,0x3a4ca694,0x3a43aa6a,0x3a0d0139,0x3827e264,0x3a066930, -0x3a1f7928,0x381173d7,0x3ad76d8e,0x3af21ffc,0x3a9709f8,0x39cbcc2a,0x37c002fa,0x39d0deba,0xb9680f6a,0xb9ae51cd,0x393f6731,0x38359424,0xb96f0de6,0x3b5e8360,0x3aa8678f,0x3b3987fc,0xbaebb897,0x3ba20bdc,0x3bcd7475,0x3b5d0172,0x3b8565f1,0x3b02689e,0xbaf3deef,0xbacb64c6,0xb9cd7e58, -0x3aad4c72,0x3ba0d51a,0x3bd1e203,0x3bb22a7e,0x3b7e3ef5,0x3b11eee7,0x3a2b0cda,0x392b710c,0xba06f68b,0xbaf3e516,0xba41a128,0xb837217f,0xbaa1a602,0x3b5ca93e,0x3b5f47a0,0x3a7ed07a,0xba85c21e,0xbb06a38e,0xb9ffe7b3,0xbb00358d,0xbad6c1fc,0x3909cadf,0xbad9f32c,0xbaa1af13,0x3b5ab1e4, -0x3b4c117f,0x3b7bcb1c,0xbbb2bb2c,0x3c132af8,0x3c31fb30,0x3bad46be,0x3be8ec73,0x3b3f1e98,0xbba3b302,0xbb94d16f,0xbb1b1902,0x3b11f3e2,0x3c2e5a8f,0x3c4ec4fe,0x3c216eec,0x3bdae0b1,0x3b9e6608,0x3acf5f64,0xb88bd00a,0xba7c9866,0xbb759dd0,0xba786d53,0xb9847746,0xbb58f0a2,0x3bdb7791, -0x3bf1abbe,0x3b2a3d2d,0xbb143657,0xbbaffb39,0xbb16f0f7,0xbbc996e3,0xbbc9c105,0x39f9ec9b,0xbaf17824,0x3a422519,0x3c4c02b6,0x3c759971,0x3c304c3a,0xbbb1dd01,0x3c7674ad,0x3c9acc1d,0x3c651ad5,0x3c53c318,0x3b50b818,0xbb929fc5,0xbb887c09,0x3b2c0b59,0x3c429c9c,0x3c9315ad,0x3ca7b494, -0x3c897684,0x3c71a0e4,0x3c373bbe,0x3b7b3f2e,0xb9c4514a,0xbb1eaf17,0xbbf6a875,0xbb54d6fe,0xbab7d89b,0xbb906708,0x3c2ed430,0x3c1cdb33,0x3a1c9675,0xbbbc1046,0xbc157117,0xbb69ee3a,0xbbe510f8,0xbbabbd03,0x3bcb14e3,0x393946fa,0xbccf7472,0xbd13f557,0xbcd67aea,0xbc0fae0e,0x3a9a22fc, -0x3c2f9711,0x3c24b9bf,0x3b0daa68,0xbbdd64ba,0xbc1b271a,0xbb23b63a,0xbb91d2b4,0x3a849b94,0x3c13f109,0x3c9b60f7,0x3ca0d661,0x3be52754,0x3c2c24f0,0x3c05be1c,0x3b8d60d7,0x394a7b5e,0xbad6ad36,0x3a6592ca,0x3b791a2f,0x3b203174,0xbb7176ba,0x3bb44dd3,0x3c581e67,0x3cbfc131,0x3bc9d40a, -0xbb996391,0xbbba3759,0xbca78b6c,0xbcc45f02,0xbca7e306,0xbcd2d625,0x3b3e1b29,0xbc3be27a,0xbc3b6502,0xbb9a4f34,0xba1a6d84,0xbbd7d338,0xbc34a1f5,0xbc4f2d64,0xbc1075eb,0xbbdeebc1,0xbc02fcaa,0x3ae359a5,0x3ad7f6a5,0x39a4bb34,0xbb7fdf74,0x3a7caac0,0x3c9dfeed,0x3c620f06,0x3c405093, -0x3ba35478,0x3a1224f5,0xbb3ea4ce,0xbc0bee1a,0xbc58ad92,0xbc9fd2fa,0xbcc5289e,0xbca916b6,0xbc74415e,0x3c0258ba,0x3bdf2d34,0x3bf597cb,0xbb8cd12c,0x3b7cda94,0x3b6019b7,0x3afa49a8,0xbac2adbb,0xbdbd6b34,0xbd9789d5,0xbd30fa0f,0xbcd38a78,0xbc9f073a,0xbc7146dd,0xbc1289f0,0xbb086215, -0xba902b29,0x3a893687,0xbb6042db,0xbb1433ee,0xbbab8922,0xbb1952f8,0xbb2edcbf,0xbb75516d,0x3b486753,0x3c1a95dc,0x3c2da861,0x3ae2ebf9,0xbb24f721,0xbb50f0de,0xba51907f,0x3a283438,0xbc148a5c,0xbcc7268b,0xbcdcdefc,0xbca94bde,0xba6f9d71,0xbbab8964,0xbc2d0241,0xbcbbf8ec,0xbcf1bf0e, -0xbd047ca3,0xbcf1262f,0xbda84b08,0x3d877473,0x3db786d5,0x3db3c96f,0x3d912b49,0x3d6e5898,0x3d23aae1,0x3cbe3bd1,0x3b997117,0x3bee56e0,0x3b3fd25f,0xbabe0ec5,0x3b025afb,0x3ab4f1b5,0xba28f518,0x3a33903e,0x3b931654,0x3bee711b,0x3c62f5e1,0x3c5888ca,0xbafde56f,0x3bec49bf,0x3bd0c53e, -0xb9fc2f40,0xbbfac6a6,0xbc889815,0xbcdd35db,0xbd031eb1,0xbcf6a1da,0xbc9a52cc,0xbcb2300c,0xbcc178c6,0xbcb3a394,0xbd74cb35,0xbd50410e,0x3c3a8132,0x3d08f6d2,0x3d2d7525,0x3cddb88a,0x3cb5642c,0x3ccd34e2,0x3cd87ddd,0x3cbb633c,0x3cb0bec3,0x3cac6645,0x3c9cec61,0x3c802f17,0x3c2259b4, -0x3c1ebfc9,0x3c090546,0x3c3003f3,0x3afc8052,0x3985103f,0x3bda5b09,0x3b927eca,0x3b101e8a,0xbc5695aa,0xbcc55cdb,0xbcd02e93,0xbcaf7b05,0xbcd493d1,0xbce0af37,0xbd1fd42a,0xbd051c76,0xbd18eff0,0xbd499dff,0xbd1be9cd,0xbca8b18a,0x3bf88e3c,0x3d185ed5,0x3d727ba9,0x3d970f1b,0x3d62188f, -0x3c374327,0x3c82e4ca,0x3c9dce65,0x3c9c0946,0x3c74efa6,0x3c5afb85,0x3c3e0c37,0x3c2e8df0,0x3c3975e1,0x3c36d5cf,0x3c345ed9,0x3bda0e1f,0x3bd31f86,0x3c136444,0x3c70e435,0x3c90e3c8,0x3c9b6d06,0x3c17d025,0x3b63b583,0xbabfacc2,0xbbd6b1d0,0xbc3a8dfa,0xbc86610d,0xbc44958a,0xbc09c6b6, -0xbaf06524,0x3c562cf4,0x3cc86630,0x3d0319ef,0x3d2d4be8,0x3d323da5,0x3d1358dc,0x3cd26275,0x3c7c010a,0x3c1786ae,0x3c078ba0,0x3c789315,0x3c953891,0x3c8bf373,0x3c9817d2,0x3ca9d67b,0x3ca0d9ff,0x3c96930d,0x3c8ff99b,0x3c922f01,0x3c953b32,0x3c97d0fb,0x3c9b41f1,0x3c865a36,0x3c7a2712, -0x3c6ebd34,0x3c75c1d3,0x3c7e740f,0x3c7e3c28,0x3c78bdfd,0x3c74b35d,0x3c92e145,0x3ca6c52c,0x3cb30dd9,0x3cbf5369,0x3cc60f0e,0x3ccd2333,0x3ccc11b3,0x3cc5e61c,0x3cc333f7,0x3c81ae03,0x3c204312,0x3bb45c58,0x3c002d0d,0x3c17b38f,0x3c04dc9f,0x3c43f887,0x3bba8875,0x3b9ce23b,0x3bbe3728, -0x3ba4915a,0x3ba67fdb,0x3ba07da7,0x3b97f599,0x3b95c4bc,0x3b9c4c7e,0x3bbb680f,0x3bbe78ef,0x3bdb358f,0x3bf9d091,0x3c0c5aa8,0x3c2f2893,0x3c653ca5,0x3c7ebe8a,0x3c91d152,0x3c9196c6,0x3cd05acc,0x3cbe08e0,0x3ca72ca6,0x3c989384,0x3c84e25a,0x3c6bfc14,0x3c4c0df5,0x3c4e5662,0x3c4c7816, -0x3c571a08,0x3c599751,0x3c5bc309,0x3c40ab51,0x3c2563ff,0x3c0a63ae,0x3bf75c67,0x3bdbfb2a,0x3b9d1867,0x3b83e53e,0x3ba8f113,0x3bb85954,0x3bdffa3e,0x3ba06c09,0x3bc3dde4,0x3becd83c,0x3bed653c,0x3be5dc2f,0x3be6ee85,0x3bdeee6d,0x3bd9bc7d,0x3bce9ca3,0x3bf7e146,0x3c064156,0x3c0c0cc3, -0x3c2779e0,0x3c3503d5,0x3c58c522,0x3c342e57,0x3c2d4eaf,0x3c1e4ca4,0x3c12ff70,0x3c05fe55,0x3be85bcf,0x3be5ce23,0x3bd4f403,0x3bba2a32,0x3bb05430,0x3ba91c8f,0x3baf34d7,0x3bb61639,0x3bb981cf,0x3bb6e92e,0x3ba7bc60,0x3b94ef35,0x3b3a9819,0x3b27fcd9,0x3b2de41e,0x3b2d8927,0x3b0c5499, -0xb955c2d3,0x3b63666e,0x3b548761,0x3acb1a28,0x3b0d4993,0x3acba5c2,0xb8cad552,0x391930f5,0x39b566a6,0x3a23c461,0x3b39fc5b,0x3b808b04,0x3b301531,0x3b2e6314,0x3b1d9d36,0x3b06228e,0x3b141d27,0x3b09c192,0x3ab43f7a,0x3af8f820,0x3b12b133,0x3b0a9a64,0x3b7acf1f,0x3b76c008,0x3b0d3531, -0x3aa6bafe,0x3a717195,0x3b10510d,0x3a8e6cf6,0x3a9c5e82,0x3b19ffec,0x3b1b6da2,0x3b4e1769,0x3b7de1bd,0x3ba58429,0x3b8d1fb1,0xba821600,0x3ba4f287,0x3bd74ee6,0x3b7daca8,0x3bb496de,0x3b813d4c,0xb9cdc769,0x396763a1,0x3a7072a3,0x3ad433fd,0x3bc1e698,0x3bf04327,0x3be27014,0x3b94213c, -0x3b0c711e,0x3a31903c,0x3a9c8514,0x3a696f33,0xb98452ba,0x3a8f95e6,0x3b0581f4,0x3aba922f,0x3bcf3f54,0x3bc0d22c,0x3ae251f6,0x391376fe,0x392fd664,0x3ba2d0cf,0x3b47e493,0x3b5b09d7,0x3b96b1a6,0x3b54b9c2,0x3af5fe5b,0x3a8d828a,0x3b8a9197,0x3b68903a,0xbbb8681e,0x3c179455,0x3c2b7795, -0x3b7f4fd7,0x3c026c8d,0x3b91f551,0xbba13f96,0xbb3b9647,0xbac84325,0x389fd216,0x3c24265a,0x3c4dbcbc,0x3c3ee087,0x3bdf0f31,0x3b7d5ffb,0xb9333594,0x3a2275ac,0xba0f6428,0xbb77f540,0xbacd4504,0x39bb8308,0xbac38dc7,0x3c2622c4,0x3c1ecac6,0xba69bf41,0xbb9ca61b,0xbbf52fcf,0x3ac7519e, -0xbb212ce8,0xbb09ffa0,0x3ac28b89,0x3b1d3358,0x3a584396,0x3b4933f4,0x3c351ab9,0x3ba8743d,0xbc42418b,0x3c2df887,0x3c8e8a4e,0x3c2711ae,0x3c731642,0x3bb0ec97,0xbbd37998,0xbbabeb38,0x3a585d61,0x3bd7e0b6,0x3c962c77,0x3cae5db3,0x3c82d2a6,0x3c321099,0x3b783d21,0xbb5784c0,0xbb51f7cb, -0xbb7ce2aa,0xbbe9d84b,0xbb1a1fdc,0xb9ab7808,0xbba347c9,0x3c6779c4,0x3c399189,0xbba00ed0,0xbbe86096,0xbb9c7c32,0x3c3602d7,0x3c16911e,0x3c167ed0,0x3c0f36ad,0x3b64003f,0xbbbcc04f,0xbcefadde,0xbd1b7f20,0xbc9a7884,0x3c17b387,0x3c293bb6,0x3bffd00a,0x39b1dcd1,0xbc01fbe7,0xbc34b5c3, -0xbb85353f,0xbb8a6906,0x3a6ce2c9,0x3becaa26,0x3c848586,0x3c93f69b,0x3c36b26b,0x3c3d9d21,0x3c227955,0x3c56bc34,0x3bb91d93,0xba2b8b6a,0xbb7ec040,0xbc0ef8bb,0xbc091ff1,0xba329265,0x3bec674d,0x3c70e387,0x3cde8ced,0xbbaf47bc,0xbccd3192,0xbccaa9d3,0xbd15c411,0xbd08772c,0xbc9e4167, -0xbb81639e,0xbc76d1e4,0x3a3ccdee,0x3c1f20bf,0x3b64affe,0xbc4c57d6,0xbc8caf1c,0xbc73686f,0xbbbc3fa5,0xbc030fec,0xbbe7b3b2,0xbc07ad52,0x3ad106fb,0x3b30d7b2,0xba67b1d1,0xbb39897a,0xba474487,0x3bec7d43,0x3c3acae1,0x3c28b768,0x3aba1f91,0xbbae565e,0xbc2481ca,0xbc5b4efb,0xbc4cd1f2, -0xbc5b72f3,0xbc395ffa,0xbc8490c5,0xbc4ae783,0x3bc3d71e,0x3b8ed162,0x3c302d83,0x3c4a6113,0x3c9f288f,0x3c7fea96,0x3b3f089d,0xbc916eeb,0xbd317e7c,0xbd93d2eb,0xbd6a8519,0xbd1c3a5a,0xbcb0c345,0xbc28cd09,0xbb61fcf1,0xbbadb39e,0xbaa12a09,0x3b4231af,0xbadfb430,0x3a2e7775,0xba15274b, -0xbacd530e,0x3a9483ee,0xbb8d38d1,0xbc1896bd,0x3c03f08e,0x3c458462,0x3a44d5b4,0xbba8964c,0xbc29c58f,0xbc4326b5,0xbc993a5f,0xbcc74e2d,0xbcd95743,0xbcb7d7e9,0xbc59939a,0x3b593e08,0xbc4331f6,0xbccf93c6,0xbd10ba9c,0xbd0240f1,0xbc8b7418,0xbbd4bbfd,0xbcb298bc,0x3cc2acdf,0x3d5426f6, -0x3d9a0856,0x3d7fc98d,0x3d551d12,0x3ceef174,0x3c73feaf,0x3adf781b,0x3b9cd0a1,0x3a4210b4,0xbb137c5c,0x3a7a277c,0xb94a65e3,0xbb809de8,0xbaca81cc,0xb8d5fe5d,0xbb984ccf,0x3c4da13c,0x3c622662,0xbbc762e6,0xba871210,0xbb587d37,0xbb85cc16,0xbc587739,0xbc9046c5,0xbcdbcc44,0xbc827704, -0xbc8985d6,0xbccfc9b2,0xbcfa6bab,0xbcdbba56,0xbca206f0,0xbd25c700,0xbd48f392,0xbd1fb687,0xbc0b70ca,0x3d8dd031,0x3d4bb828,0x3d1c440a,0x3d0a98f9,0x3ce77b90,0x3cd9799f,0x3cc860de,0x3cb63ccc,0x3c9b2d28,0x3c565558,0x3b99b6af,0x3b529b38,0x3ba68704,0x3c5dbf9f,0x3b9c85ba,0x3b0f0ae6, -0x3a74370f,0x3adb360d,0xbb6cad84,0xbc8e4dd8,0xbcbd7111,0xbcf19136,0xbd028528,0xbccd6316,0xbcb43eee,0xbcff6ff9,0xbc3b72b2,0xbc5676bc,0xbd1b7438,0xbd1dd706,0xbd20da7b,0xbd03c196,0x3c236cfd,0x3d392a34,0x3d8dffc9,0x3d954938,0x3c7bb5ac,0x3c7d5a6b,0x3c7cd5c7,0x3c7c5569,0x3c41ae57, -0x3c518fec,0x3c5c7572,0x3c4b9038,0x3c87d8be,0x3c8ebf6c,0x3c714250,0x3c52ed24,0x3c2b3813,0x3c20969c,0x3c42f557,0x3c624398,0x3c5b4ceb,0x3c3419c6,0x3ba1757e,0xbb36f1fa,0xbbc1e4a5,0xbc009e21,0xbc13f151,0xbcb902db,0xbcd30503,0xbc9128c5,0xbc14d551,0x34d5f676,0x3c18850a,0x3ccfaa64, -0x3d16c52c,0x3d2d3f10,0x3d2c1287,0x3d0a2191,0x3cbaabc8,0x3c93bf65,0x3c8ffd02,0x3c99d6fd,0x3c98f2bd,0x3c9d0cdd,0x3ca9f488,0x3c91ee0a,0x3c6e21b4,0x3c3d4de5,0x3c5e6a4d,0x3c663ca1,0x3c8ec20d,0x3c808de9,0x3c86feda,0x3c69464d,0x3c7a3a9b,0x3c690790,0x3c6dec06,0x3c7ad5c5,0x3c859329, -0x3ca7110a,0x3cb147b0,0x3caecd7b,0x3cbfe192,0x3cded599,0x3cfcc947,0x3d09e717,0x3d07e0ee,0x3d083070,0x3d07c64f,0x3cd8c89a,0x3cadac12,0x3c964254,0x3c81834d,0x3c777fef,0x3c609d9f,0x3c887cc3,0x3c04319f,0x3c0780a5,0x3bb8c6fa,0x3bf81aed,0x3bd3dba6,0x3bceb215,0x3bf34371,0x3be26789, -0x3c0ad897,0x3c0ad1e5,0x3c16cde0,0x3c1e7e0c,0x3c3261df,0x3c45d45d,0x3c709b46,0x3c8afc41,0x3ca0a55b,0x3cb4d400,0x3ccdbcf5,0x3cc90924,0x3cbb8abe,0x3cb92a74,0x3ca9b5eb,0x3ca2a581,0x3c95eac6,0x3c8bb6a0,0x3c7cf110,0x3c61bfd9,0x3c4ffe3c,0x3c4197b0,0x3c34b1d8,0x3c1283eb,0x3c12763d, -0x3c09c0a3,0x3c025889,0x3bfd4dae,0x3bdc2c51,0x3be784ab,0x3b99ea0a,0x3b82dbea,0x3b543b69,0x3bc09ef5,0x3b9809d3,0x3b7be219,0x3b821702,0x3b91755f,0x3b9859c7,0x3bab26f6,0x3bb19349,0x3bb2e0b1,0x3be42ec5,0x3c028b75,0x3c06e8a9,0x3c0f4b8c,0x3c1e3cba,0x3c212788,0x3c24032c,0x3c27d3f7, -0x3c2e5ecf,0x3c2e5537,0x3c30e6e4,0x3c37eae2,0x3c272094,0x3c18c1ca,0x3c07626b,0x3bf58f89,0x3bde29c3,0x3bc781a8,0x3bd9578b,0x3be2421d,0x3beb9547,0x3be763ea,0x3bd4e40b,0x3b33e083,0x3b04dec5,0x3a8e56b5,0x3b223536,0x3b2e5f57,0x3a7a0520,0x3b5d1932,0x3b6a36b9,0x3b2b8ba4,0x3b621157, -0x3b456b6a,0x3acfe8cd,0x3af3975d,0x3b007547,0x3af345ad,0x3b49ee65,0x3b724254,0x3b972b51,0x3b64a58a,0x3b3b9456,0x3b0cfd2a,0x3b145428,0x3b0c2875,0x3adfadac,0x3b03bd45,0x3b1bf93f,0x3b48746a,0x3b66b8af,0x3b3f6b38,0x396e01a4,0x3a577e86,0x3a872776,0x3b275093,0x3b02594b,0x3b1caba3, -0x3b55cc21,0x3b1a3d25,0x3b3e1c69,0x3af3a9ab,0x3bb7f9a4,0x3b97a996,0xb9a305fd,0x3b98c0bd,0x3bb946e5,0x3b638873,0x3ba6abb9,0x3b852cc5,0x3a46b39c,0x3a2c3fc6,0x3a7b4da3,0x3acb6e97,0x3ba5bc6a,0x3bd4727c,0x3bfeda4e,0x3ba76f62,0x3b428306,0x3aca2290,0x3ae44737,0x3a9c94b0,0x39fe4234, -0x3a2063ff,0x3b006d70,0x3b8be4dc,0x3bc03afd,0x3b820d8c,0xbb163b15,0xbab28b88,0xb98a6a6b,0x3b9b937b,0x3b45223e,0x3b6a849e,0x3b9bf2f8,0x3b642c36,0x3a2cad95,0xbb2a397e,0x3b1dc658,0x3b621c87,0xbbc6f35e,0x3c0aeff8,0x3c170482,0x3b2969fb,0x3beb9b80,0x3ba3c43f,0xbb45330f,0xbaea1976, -0xbaaa25ff,0xb89451de,0x3bf382cc,0x3c334a27,0x3c5cb202,0x3c039569,0x3b840632,0x39f75e4c,0x3ab80dc1,0x38df93fa,0xbb01cf84,0xbaa0731d,0x3ab5956e,0x3bacc2f9,0x3c09cec7,0x3b9d03c7,0xbc15f8ce,0xbbdd914b,0xbbc67c05,0x3b6e1b4f,0x3ac42260,0x3b7dceb6,0x3bb9939d,0x3affe965,0x3ba84034, -0x3b519440,0x3c670ebb,0x3c2a88eb,0xbc2b72a6,0x3bfb1d3b,0x3c7c8806,0x3c0ace24,0x3c6c58a0,0x3bdf0090,0xbbd5949c,0xbbb793ec,0xb9e64388,0x3b81ff49,0x3c7e86ba,0x3c94f2cd,0x3c8f3ab4,0x3c31d67e,0x3b761bf0,0xbade8839,0xba93a02f,0xbb32bf69,0xbbac055c,0xbb84585a,0x399b1163,0x3be6f7a2, -0x3c390c75,0x3b696896,0xbc72a11d,0xbc250184,0xbb8de344,0x3c41fbad,0x3bf54bbc,0x3c2ace5f,0x3c071360,0x3ba2f8f6,0xbbc179c0,0xbca3bae1,0xbd2f4705,0xbccf79c8,0x3c9bb853,0x3c3adccf,0x3bd6d4de,0x3a90c1e9,0xbbe2dc27,0xbc264bc0,0xbbb9ca8e,0xbb11687e,0x3b0e0aeb,0x3b812199,0x3c3a7918, -0x3c81ad78,0x3ca35664,0x3c547ef6,0x3c26e639,0x3c49406d,0x3ba7959f,0x3a95b374,0xbac4854a,0xbc43b881,0xbc29f466,0x3b59ce83,0x3bf6c26f,0x3bee516e,0x3c3d6000,0xbcacb639,0xbd04d788,0xbc96b339,0xbcc7b80b,0xbca2fe96,0xbc3267d3,0x38e7aa60,0xbc66e442,0xbb9c801b,0x3c54e097,0x3ba993eb, -0xbcafa169,0xbcd93deb,0xbcc2f934,0xbc39a160,0xbc102ab2,0xbbb7e404,0xbbfaff26,0x39598b61,0x3a26ac68,0xbb3008c8,0xbb0d6cd1,0xbb2b4740,0xbb4b4512,0x3c108992,0x3c2f6350,0x3a943a98,0xbb88612b,0xbc189023,0xbc4c5df9,0xbbed9c29,0xbc0e88a5,0xbc6a22d5,0xbb673b18,0x3b229186,0x3c469f81, -0x3ba6127f,0x3b0aaacf,0xba76a3fe,0x3c076114,0x3be78d09,0xbabe14b9,0xbc4ce851,0x3bd84f3d,0xbd2257ef,0xbd43b8ac,0xbd118619,0xbcd05551,0xbc0f801e,0x3a9cbfed,0xbb46ee61,0xbaf83fbe,0x3b0af8a5,0xba99d052,0x3a907d2b,0x3ac3561f,0xb9a8a02a,0x3babfbdb,0xbadf9fc9,0xbc4f3c7a,0x3c1b4e11, -0x3c49d5e9,0xbb40c0de,0xbbd5ff2a,0xbc52aa85,0xbc93d49b,0xbcaf43fa,0xbca724f5,0xbc9eac7d,0xbc150707,0xbc5744ca,0xbcc761c1,0xbcc6d24b,0xbce2a7fe,0xbd1b9ec4,0xbcd14c0d,0xbc3d5b3b,0xbb8328f5,0x3c72a458,0xbcd4f72a,0x3c48d4f7,0x3d4960d0,0x3d3d4c9b,0x3d1b6767,0x3c82303e,0x3b686d18, -0xbb50ca10,0x3ac77491,0xbac13026,0xbb7b1f48,0xbaba3e3d,0xbb0e1f3d,0xbbebfea0,0xbb99532e,0xbb71d21f,0xbc13d041,0x3c40e045,0x3c47c324,0xbba5b702,0xbbfe0ba7,0xbc4482f4,0xbbef5fe5,0xbc3f31f9,0xbc79da6f,0xbccd223b,0xbc8b2de0,0xbc63649c,0xbc703cb9,0xbc4582c9,0xbc7735f9,0xbd0bfeba, -0xbc9a2732,0xbd02d1f8,0xbd94b9a9,0xbd453462,0x3d98bc38,0x3d8c1abf,0x3d5562df,0x3d2e19c0,0x3d08cc3d,0x3d037a24,0x3cf1e26c,0x3cbdd324,0x3c890e19,0x3c2135bd,0x3a3d5d04,0xb5d5f40f,0x3b6b20be,0x3c3ba986,0x3bd5280a,0x3b617d2a,0xbb6cd60a,0xbb438cbd,0xbbe6b598,0xbc5b9ab3,0xbc6900f5, -0xbcaaaf00,0xbcc12165,0xbcba699b,0xbc872f1a,0xbbb0769e,0xbaab6cc1,0xbb8efb54,0xbc5a66e9,0xbce4accc,0xbd22d3f7,0xbd59bd8f,0xbcaa257e,0x3c611e3a,0x3d2d0158,0x3d886642,0x3ce5339c,0x3ca36fe7,0x3c95c16c,0x3c9beceb,0x3c7f7054,0x3c87b76b,0x3c927145,0x3c91af33,0x3ca07149,0x3c9daab0, -0x3c8c9fd4,0x3c8b39ca,0x3c5a4a34,0x3bd722fa,0x3b926d2d,0x3b93cca4,0x3bbee29b,0x3c079cf7,0x3b90776a,0xbb6f6225,0xbbed3110,0xbc2ed40a,0xbc4966ce,0xbcc024f2,0xbcf2d6e7,0xbd0dc118,0xbd16e59a,0xbcfc537a,0xbc795a78,0x3b3aa416,0x3ccc021e,0x3d356595,0x3d6c71f1,0x3d6cf65f,0x3d417682, -0x3d15131d,0x3cb74ccf,0x3ca5d2fb,0x3c979ce5,0x3c94ded5,0x3c983804,0x3c7bfb3a,0x3c3b22d6,0x3c010a84,0x3c0dca24,0x3c16cf72,0x3c2f686b,0x3c25aa89,0x3c3ac124,0x3c28d24a,0x3c53014e,0x3c513cbf,0x3c5d4848,0x3c80b113,0x3ca257e1,0x3cb57dec,0x3caebea3,0x3cae6f02,0x3cae6c66,0x3cc4afea, -0x3ce00047,0x3cf71709,0x3d0c110f,0x3d1abf08,0x3d269556,0x3d13b168,0x3d03f8e2,0x3cfb9243,0x3cd2b9c2,0x3cbf37b8,0x3cb06ae4,0x3cb6e604,0x3c5b7ce8,0x3c57f26c,0x3c1f5363,0x3c50d5ce,0x3c39d087,0x3c32036d,0x3c4e79f7,0x3c4c1815,0x3c68be2e,0x3c5cfea5,0x3c5fb1a3,0x3c617b9a,0x3c695a1d, -0x3c6d10ff,0x3c6ba611,0x3c62f400,0x3c7a6e43,0x3c7d9539,0x3c8884e0,0x3c4143eb,0x3c4b86bd,0x3c6e995a,0x3c7baf32,0x3c89081a,0x3c8c4435,0x3c91317a,0x3c843db6,0x3c7609e2,0x3c752f56,0x3c80823a,0x3c8a4a5e,0x3c917d40,0x3c8ea0d4,0x3c887ec7,0x3c7e70d4,0x3c688118,0x3c67df3a,0x3c6c5309, -0x3c34d951,0x3c1601ac,0x3bc75601,0x3c4e7739,0x3c1d8e6a,0x3bd8b6a6,0x3bd75a11,0x3be37995,0x3bea608b,0x3bf46d2a,0x3bf6aeb6,0x3bf7a6b1,0x3c268981,0x3c47f39d,0x3c09b54d,0x3c1ffef9,0x3c328601,0x3c414388,0x3c5d2a43,0x3c65279e,0x3c7479cb,0x3c7f32e5,0x3c86f25f,0x3c91f805,0x3c8de84b, -0x3c8bf2d4,0x3c870642,0x3c83719d,0x3c7c8917,0x3c75029c,0x3c720193,0x3c714f68,0x3c713b27,0x3c6fc71b,0x3c83a4a6,0x3b1c8705,0x3adb1df9,0x391c7152,0x3ad1e6b7,0x3b059861,0x3a96b8f0,0x3b3fc49f,0x3b4af43a,0x3b147684,0x3b48bf4a,0x3b3c6e60,0x3b0be7aa,0x3af83e86,0x3af37a6d,0x3af48a5e, -0x3b306cd8,0x3b53d7d9,0x3b9bfc5c,0x3b6cf022,0x3b4ecc1c,0x3b24b680,0x3b1ca681,0x3b10cc72,0x3afc5c7c,0x3ae865bc,0x3b0530a4,0x3b6df6eb,0x3b25a58e,0x3ae6950b,0xba3bd56d,0x3a239f20,0x3a89c66b,0x3b0cbced,0x3b0bfd8b,0x3b21aeea,0x3b4b368b,0x3b0eb513,0x3a562d54,0xb9f7545c,0x3b87eb46, -0x3b86f88e,0x3ab21fdd,0x3b81e859,0x3b8bf6d3,0x3b37e5cf,0x3b8bbe69,0x3b767299,0x3af4e26a,0x3a40f917,0x3a501483,0x3aeb9e0b,0x3b872c9b,0x3bb7fea2,0x3c045156,0x3bc24b4b,0x3b8c10fa,0x3b4f77ca,0x3b43715a,0x3b0d927d,0x3acaf1af,0x3a46d3d3,0x3b00d350,0x3bcadeeb,0x3b3e1fb2,0xb986cfd5, -0xbbb6d9f2,0xbb35360f,0xb9b55f8b,0x3b73c4bf,0x3b79d9ab,0x3b864cbe,0x3b9049d4,0x3b05367b,0x398289a2,0xbb87c73c,0x3a2a7f72,0x3ade4b75,0xbb57fa76,0x3beabbb4,0x3beb844a,0x3ac8402e,0x3bbc2988,0x3b9f50dc,0x38ae3c53,0xba59af73,0xbaab73f5,0x3a600bb4,0x3bb5552b,0x3c1f4dcc,0x3c67783f, -0x3c1fe432,0x3bc61360,0x3b4fa908,0x3b7dd5d2,0x3b0c1799,0x3a6363e5,0xb9330db3,0x3af7b2a7,0x3c29e277,0x3b9246e0,0xb9542313,0xbc51d684,0xbbee8e4b,0xbb876216,0x3b2a0c8a,0x3b911107,0x3baa2640,0x3c0384b9,0x3b525275,0xb692a199,0xba480def,0x3c700d18,0x3c432e6d,0xbb8ccf72,0x3be152b7, -0x3c4dc82e,0x3bcbfd7a,0x3c4f8e6f,0x3bf7cb53,0xbb9d1749,0xbbc8d16c,0xbaf1cf0d,0x3b79c355,0x3c57fd2f,0x3c845de6,0x3c9c3b6c,0x3c4576d3,0x3be4f8f0,0x3b3b51fa,0x3b7c9073,0x3aa3f21b,0xba953b6d,0xbb1d8e84,0x3b21d082,0x3c86f180,0x3ba61320,0xbc060069,0xbcc06667,0xbc54fa31,0xbb28b39c, -0x3c18681f,0x3c23d906,0x3c3cb867,0x3c3a3111,0x3bb2c39b,0xbb8508d3,0xbc4ba4ad,0xbd36efee,0xbd00f73d,0x3caabfa6,0x3c316bfd,0x3bafc07f,0x3a35ac50,0xbbb20d02,0xbc0983d3,0xbbd71b15,0xb9fbdf0e,0x3b3ff939,0x3a80485c,0x3be934a2,0x3c58e9ef,0x3cc2c3d5,0x3c4eb233,0x3c03bdb8,0x3bc5f798, -0x3bc2a230,0x3bbea1a3,0x3b577bd8,0xba226b02,0x39f27bd0,0x3bf1beb2,0x3c25e4d7,0x3c436bf3,0x3c6adb7a,0xbce2454b,0xbd11a1db,0xbc508e18,0xbc65971a,0xbc209b48,0xbc08b491,0xb95ca9c1,0xbb8fb111,0xbb55d9b0,0x3c78ddd8,0x3c0843e7,0xbcaf54a7,0xbcc68f24,0xbcaa5273,0xbc5a2350,0xbc1e14fd, -0xbba35f42,0xbbcf6fdf,0xbab5deee,0x390640e8,0xba9581db,0x36519cd0,0xbb2a791c,0xbbe6d4dc,0x3c014555,0x3c35e75a,0x3b4802d0,0xb9b8b6ee,0xbbbf480a,0xbc029953,0xbc041906,0xbbfca926,0xbc389a91,0x3aec5c65,0xb75f2f43,0xbbc4a239,0x396296c7,0xbb0361d1,0xbc656ff3,0x39b7e972,0xbb7ad15f, -0xbcbe1d90,0xbc3075d3,0x3c93b353,0xbbe63dfc,0xbcca2490,0xbcbe618c,0xbc944c39,0xbc057a6a,0x39e455a9,0xbb626583,0xbb8eab1f,0xb7828a66,0x3a1fca10,0xb97e4376,0x391995ea,0x3968afcb,0x3bb3043d,0xbab54e20,0xbc2b2e56,0x3bd8423c,0x3bee00b4,0xbb9d443c,0xbbed10f4,0xbc47c6d5,0xbc655c8a, -0xbc82be5d,0xbc758c80,0xbc7e91f8,0xbb74c42b,0xbbc7371a,0xbcb94d2e,0xbcc405cb,0xbcc76a78,0xbd00212b,0xbc24c955,0x3aa42ca3,0x3befa72e,0x3cbdc1b2,0xbd9e7360,0xbcbb0044,0x3c6427e9,0x3ca012d0,0x3c934b8a,0xb905094a,0xbc0ba860,0xbc46df3c,0xbb861dcf,0xbba95a56,0xbbdf2d4f,0xbb158777, -0xbaa3ef00,0xbbfda43f,0xbbc67a7c,0xbbb93df3,0xbbed7ea2,0x3bd4d82d,0x3bfa2621,0x3ac6f6b6,0xbbb6962d,0xbc3359d9,0xbc10549f,0xbc0f87e6,0xbc0a7264,0xbc3e6d06,0xbc163cec,0xbc0f031d,0xbc0b0bdb,0xbc0eb9d3,0xbc5aa08e,0xbceccceb,0xbc6bfd0f,0xbcfb19ff,0xbd945f6f,0xbdad2376,0x3d8e7938, -0x3da2fa6b,0x3d83534e,0x3d582051,0x3d267bb8,0x3d2b0a6f,0x3d19b314,0x3cc9b822,0x3c819d5f,0x3c0cbf97,0x3b027b48,0x38f4af1a,0x3adcc22f,0x3bb72757,0x3b872da7,0x3aad083d,0xbbb9b2a9,0xbb9a59b1,0xbbe74650,0xbc0fd016,0xbc0f46a9,0xbc1348a7,0xbbddbccc,0xbc151acd,0xbb83abfd,0x3b8a667d, -0xbc094ff0,0xbc83294b,0xbc670179,0xbcaf837a,0xbcfd1f4d,0xbd40c061,0xbd2e84db,0xbc99b298,0x3cb45cfe,0x3d4be403,0x3d0e0abe,0x3cd52274,0x3cc629d5,0x3ccb0f3f,0x3cac33c3,0x3cb7cf1f,0x3cb3697c,0x3c94a9c0,0x3ca3b42a,0x3ca24a78,0x3ca16771,0x3c943a1b,0x3c51ed44,0x3b5860fe,0xba8fcf84, -0xbac2ee66,0x3ad212e3,0x3bd50635,0x3ba34c59,0xbb17abb5,0xbc12f576,0xbc7f0296,0xbca830f7,0xbcbdfc72,0xbceca6b7,0xbd170a91,0xbd379da1,0xbd2e95ba,0xbceda350,0xbc91535f,0x3b4b3555,0x3cee3e37,0x3d5200ee,0x3d717c77,0x3d5defdb,0x3d30c71d,0x3d01c089,0x3cdb7dae,0x3cb4d116,0x3c9f7cee, -0x3c855124,0x3c66a3a1,0x3c3807fe,0x3c0f145a,0x3c09dfbf,0x3c170ba5,0x3c0cc2a0,0x3c26834f,0x3c28a816,0x3c4c07dd,0x3c4cdeca,0x3c49e978,0x3c3ca628,0x3c33a28d,0x3c648c93,0x3c31866d,0x3c124acb,0x3c24db75,0x3c0e003f,0x3c4c55aa,0x3c80e4bd,0x3c9e0e75,0x3ce4ab1d,0x3d0eabe9,0x3d2744ed, -0x3d2d942b,0x3d33d022,0x3d3bde47,0x3d2090a7,0x3d141501,0x3d1113dd,0x3d0a18f9,0x3cb5afb7,0x3cae7e58,0x3c758f2d,0x3ca5ed7c,0x3c936bab,0x3c96572f,0x3ca27901,0x3c9ef075,0x3ca55b31,0x3c9a9380,0x3c91110b,0x3c90a71e,0x3c899b16,0x3c81a9ff,0x3c697072,0x3c5a8247,0x3c59bf44,0x3c455096, -0x3c29a6c3,0x3c0ddc58,0x3c3b71fd,0x3c6794f8,0x3c87a64f,0x3c9c45cc,0x3caf9e73,0x3cc1c755,0x3cbf8c87,0x3cc035e0,0x3cc71d17,0x3cd2dd80,0x3ce03604,0x3cf67504,0x3ced07af,0x3ce23822,0x3cd11786,0x3cbe94cd,0x3cb25e41,0x3cb6185a,0x3c99b8b0,0x3c8b2a10,0x3c648f69,0x3ca429c6,0x3c8d222b, -0x3c68a337,0x3c63313f,0x3c6518c8,0x3c68eec7,0x3c653d89,0x3c670946,0x3c69060f,0x3c8489ff,0x3c8f55b0,0x3c5c1b9c,0x3c7a0524,0x3c82907b,0x3c8c6d1e,0x3c982986,0x3c9e858f,0x3ca7a303,0x3cae2e8e,0x3cb4d8f3,0x3cbecbae,0x3cbedc4c,0x3cc19150,0x3cc27676,0x3cc3ec09,0x3cc3bc89,0x3cc56968, -0x3cbe32e6,0x3cbb6d20,0x3cb95689,0x3cb867aa,0x3cc04c92,0x3b21cba1,0x3ab99dff,0x39f8bec6,0x3ab02b38,0x3ae37b04,0x3ac32a9b,0x3b251212,0x3b13e90c,0x3ada8a50,0x3b131b8f,0x3b145801,0x3b12e62d,0x3ac47a28,0x3ab99709,0x3ac693fc,0x3b1340e5,0x3b3efda3,0x3b86054a,0x3b61afbb,0x3b5c6998, -0x3b4c689e,0x3b3c53c8,0x3b307790,0x3b1fd039,0x3b09188d,0x3b137614,0x3b79d0e2,0x3b062a7d,0x3ab20301,0x39b2d203,0x3a8e2543,0x3acd710e,0x3b1a843a,0x3b3c3603,0x3b357211,0x3af713ce,0x3ae9961c,0xb9f84914,0xbaa2f2fd,0x3af81288,0x3b4c1999,0x3b1ebba3,0x3b2d9a74,0x3b2ffa96,0x3b1f7ab7, -0x3b6811e4,0x3b66d815,0x3b413329,0x3aacabc4,0x3a9613dd,0x3af9caa5,0x3b7569c2,0x3ba94a49,0x3bf216e8,0x3bd1aac5,0x3baa0377,0x3b939c30,0x3b93d932,0x3b6cc439,0x3b42ac11,0x3af6ed34,0x3b07121e,0x3bacc366,0x3987cb47,0xbb0c4c5b,0xbb6c3d7b,0xbb2449f4,0xba09bc38,0x3aff7dd0,0x3b74ef5d, -0x3b612376,0x3a5d7d61,0x39494622,0xbb5e285c,0xbbfd4ed6,0xba774b6f,0x3ab23ea0,0x3a1b15b8,0x3ba02219,0x3b84e38c,0x3aa84c6d,0x3b84b9c5,0x3b93cb83,0x3b2f97bf,0x3a553b28,0xba14b647,0x3aa609e1,0x3b9c5b51,0x3c0d4dd1,0x3c57b84a,0x3c323d32,0x3c0a775f,0x3bbb367f,0x3bd08362,0x3b978491, -0x3b5de002,0x3aad3ff3,0x3b0930e8,0x3c1c47eb,0x38f0b095,0xbb6ca48f,0xbc0bcfbf,0xbbab0fd5,0xbaeb7a54,0x3b1fc543,0x3bf4faa0,0x3bc42ed8,0x39c2a212,0xb9f86382,0xbc1d3bd6,0xbc3f9c3e,0x3b71fb06,0x3bcc5e76,0xba90d1bd,0x3b7c7ddb,0x3bf9f937,0x3b60bdf0,0x3c1f8361,0x3bef04f9,0xbafbb5d7, -0xbbac6205,0xbb146d5f,0x3b5d42c7,0x3c383ef0,0x3c76aadf,0x3c9f1ef8,0x3c54454b,0x3c1b9d31,0x3bdbc7db,0x3c0774e2,0x3baf89d4,0x3b54ba6b,0x39b1ea6d,0x3b051c62,0x3c333d23,0xbb763762,0xbc710f38,0xbc9b94ac,0xbc4f13d1,0xbb621f0c,0x3b1d8b46,0x3c0cb5eb,0x3bd3de24,0xbae82248,0xbb7d7032, -0xbafac756,0xbb8bc43a,0xbd0f2b3d,0xbce6cf0a,0x3c8cce99,0x3c2e8e7e,0x3bda7332,0x39cc8480,0xbb200dd6,0xbba0b9f8,0xbbc5e8b6,0x3a7588b0,0x3b2268e5,0xba0fdca3,0x3bb49ca8,0x3c3db7bd,0x3cb12e20,0x3c64a8d6,0x3c17956c,0x3b94a78e,0x3c04c706,0x3bf33b9f,0x3ba1a36f,0x3b70e58c,0x3b74ee29, -0x3c0a40ed,0x3c16c9a4,0x3c5ddc9b,0x3ccb7b47,0xbc7ce224,0xbcb86dfc,0xbb52f497,0x3b857f8c,0x3bed13e1,0x39f1517e,0xba1148a8,0xb920923c,0x3ad13cad,0x3c78e898,0x3c1d6c44,0xbc642b53,0xbc9a12d9,0xbc8229fc,0xbc0572a2,0xbbfefd08,0xbb916b83,0xbb89c799,0xbac93896,0x3a9dd49d,0x3b05ccaa, -0x3b5c48d9,0xb9380248,0xbba8d426,0x3ba93ec7,0x3bfe300b,0x3bd20e86,0x3b7039c8,0xbae96427,0xbb7e5f93,0xbbe2b9e1,0xbb91d7ab,0xb99f95ab,0xbbc64ecd,0xbc2f0a6d,0xbc6bc114,0xbc803188,0xbc64e405,0xbc9767ea,0xbc0b150d,0xbc50c896,0xbcfca23e,0xbc1a4a4e,0x3c8965e4,0x3bc9a6db,0xbc492316, -0xbc867769,0xbc6a3914,0xbc20ae7b,0xbb502013,0xbc0fe9e6,0xbbccf50d,0xba2375f9,0x3ad48de0,0xb9b53674,0xba021fc3,0x3a837f93,0x3b45e547,0xbadbee39,0xbbbe9759,0x3b86d52e,0x3b82c63a,0xba152f73,0xbba6d04a,0xbc0bf5ae,0xbb8f6c64,0xbc0d25ae,0xbc05942e,0xbb78814e,0xbbcbf7e7,0xbbd28398, -0xbc39b204,0xbca16be8,0xbca90aa9,0xbc91419a,0x3a15e9a6,0x3c0e4afa,0x3c402fe6,0x3c95e7b6,0xbdca1b09,0xbd52dfe9,0xbcac91e4,0xbc27e57d,0xbba08f49,0xbc846643,0xbc93271a,0xbc98fc45,0xbc1b48cf,0xbc012b41,0xbbe516ab,0xba8626cb,0x3a3187f1,0xbb6dbe68,0xbb63f2a9,0xbb94a3cf,0xbbb59e30, -0xba7ca0c2,0x3af84763,0x3c0f1a33,0x3a021beb,0xbb97d0de,0xbbc04a74,0xbc00fe19,0xbba94909,0xb8078402,0xbb6e39a6,0xbbdb6b3b,0xbbdca12d,0xbc55eee4,0xbc6e7d39,0xbc1f343b,0xbcab9146,0xbd11fea4,0xbd4a0d99,0xbdbe2425,0x3d62068e,0x3d9209a6,0x3d8b3dbf,0x3d6ebe30,0x3d3adc83,0x3d4c37ec, -0x3d2bf4b4,0x3cb6c8c9,0x3c71282f,0x3bf2969c,0x3bac4433,0x3a0ab8f2,0xba8af00f,0xba1695a9,0x3a57df5b,0x38a6c08c,0xbbbb5495,0x3b069486,0x3988112d,0xbb4c1e98,0xbbc1d4e8,0xbbaf79ac,0xbb144f4f,0xba097643,0xbb825335,0xbc5796b4,0xbca56cfb,0xbcb81822,0xbc9f2bdd,0xbc9e406f,0xbcbaa0a3, -0xbce71533,0xbd441595,0xbd20321b,0xbb41a4ad,0x3cecab9d,0x3d12c2e8,0x3cf86ffc,0x3cf2b3dc,0x3cea0e02,0x3cc6cdac,0x3ccb8c94,0x3cbf6dc8,0x3c9e6664,0x3cb0c7ad,0x3cae6a02,0x3cae0a14,0x3c9193ce,0x3c522302,0x3be11ad2,0x3a4ff75a,0xba0f28cf,0xb92e8227,0x3b2fa50a,0x3b1229e2,0xbb766723, -0xbc33a8e1,0xbc86d7ac,0xbcb3c3a8,0xbccc4d1b,0xbce9421a,0xbcd9d574,0xbd028b0d,0xbd087912,0xbcef461d,0xbcf0d912,0xbcb432f0,0xbbc4f0df,0x3cc690a9,0x3d26aee5,0x3d2af534,0x3d209cd2,0x3d1f63fc,0x3d0331e8,0x3cdcbb89,0x3cc51ac4,0x3c9fab7c,0x3c8f6fa6,0x3c81deb4,0x3c57ffe2,0x3c43e755, -0x3c492ab6,0x3c2aaba9,0x3c51046f,0x3c538738,0x3c81ab6d,0x3c66078c,0x3c4e1063,0x3c2cd253,0x3bc93051,0x3b8bbaa0,0xba96150b,0xbaf94dfb,0xba870d66,0xbab3c18b,0x3b681c3b,0x3be5cd6e,0x3c294f7f,0x3c7865d1,0x3ca3cd69,0x3cc724fc,0x3d0b0daf,0x3d34bf6b,0x3d57cbd1,0x3d494248,0x3d43101c, -0x3d4c3435,0x3d341a15,0x3d00b061,0x3d02a021,0x3cd22dde,0x3cef949d,0x3cd92912,0x3cd88f3d,0x3cd7df49,0x3cd02638,0x3ccf7c4a,0x3cc40ca9,0x3cb5e6b9,0x3cb09e5f,0x3ca2a518,0x3c92a2dc,0x3c854f23,0x3c813689,0x3c7e3ed3,0x3c711e3e,0x3c50fa5b,0x3c598c72,0x3c81a3d4,0x3c8ed9a0,0x3c9a3bfb, -0x3ca5f0a7,0x3cb3e3ed,0x3cc30888,0x3cd01a3c,0x3cda950f,0x3cdef572,0x3ce9474f,0x3ceb4eb7,0x3d0021ae,0x3d00391c,0x3d023a93,0x3d0141d0,0x3cfdc8dc,0x3ce094d1,0x3ce9fd90,0x3cd1c13f,0x3cc4c62f,0x3cb047d6,0x3cd0fd89,0x3cbe2f66,0x3caba265,0x3ca697db,0x3ca35d3e,0x3ca24e3e,0x3c9ccab5, -0x3c9ae81e,0x3c9977f6,0x3ca7582a,0x3cadd7f2,0x3c91094e,0x3c9dd6dc,0x3ca1eb77,0x3caa2728,0x3caf9ce8,0x3cb628e4,0x3cbecc1b,0x3cc48913,0x3cc98421,0x3cce888b,0x3cd0e44b,0x3cd618b7,0x3cdd9e87,0x3ce1141b,0x3ce4dbd1,0x3ce705bc,0x3ce37af2,0x3ce15877,0x3cdf10b5,0x3ce27130,0x3ce2b0db, -0x3b3fabac,0x3aba93bc,0x3a9b3e21,0x3afabf9a,0x3b1d9de2,0x3b2e1979,0x3b3ab023,0x3b13b276,0x3b066437,0x3b153e8d,0x3b220ed2,0x3b49c470,0x3b094112,0x3b001839,0x3af2d864,0x3b2b02aa,0x3b50c200,0x3b81597f,0x3b8065b0,0x3b81addb,0x3b70f4ad,0x3b65b802,0x3b5a1af5,0x3b497f23,0x3b3167c8, -0x3b2d6b1f,0x3b7005f9,0x3ade36a9,0x3a8aacb5,0x3a4a6f12,0x3ab2d35a,0x3af5cc16,0x3b17f18f,0x3b4c61bf,0x3b4b19d5,0x3af5dae4,0x3ae638a8,0x3a090694,0x3a05d69e,0x3ac0109f,0x3b624148,0x3b9d7975,0x3b264b26,0x3b012003,0x3b3f0b90,0x3b54f357,0x3b6c458e,0x3b96463c,0x3b1e5a73,0x3afadf1e, -0x3b0516de,0x3b732af1,0x3ba6fbf7,0x3be105be,0x3be5f38f,0x3bd1abb6,0x3bb44d0b,0x3bb42904,0x3b976fc3,0x3b7b7719,0x3b312fc0,0x3b0ebd73,0x3b8d47cd,0xbaa017fa,0xbb3aaa15,0xbb0c4bab,0xba94147c,0x3a29d1d2,0x3ad11596,0x3b81dfbc,0x3b7557c3,0x398230dc,0x3a345732,0xbb8ddc9c,0xbbc445d6, -0xbad44c15,0x3b491c39,0x3bbd8746,0x3b653add,0x3b061529,0x3b28ffde,0x3b3f210a,0x3b91250b,0x3bc3f60e,0x3b2fc175,0x3a29cdce,0x3abc94e7,0x3b983100,0x3c0189c1,0x3c42b6fd,0x3c415976,0x3c2d8f31,0x3bf684b5,0x3c00c53c,0x3bccdaed,0x3b96456f,0x3b253fe4,0x3b0c8ed2,0x3bee3096,0xbb87b93a, -0xbbeff29c,0xbbfd7317,0xbb97e908,0xba821797,0x3a3c67ab,0x3bc9e07f,0x3bc1c636,0xbb48376b,0xbb7913bb,0xbbbd2e85,0xbbdf6fea,0xba40a064,0x3ba4ef0a,0x3bba88a7,0x3a854316,0x3b3e1a63,0x3b426aac,0x3be2af9b,0x3bd7087d,0x3b0d2cb8,0xbb393eb9,0xbacfd40b,0x3b0d38b4,0x3c114dd5,0x3c57040b, -0x3c960e45,0x3c6cb455,0x3c496cea,0x3c17a67d,0x3c2a91cd,0x3bf6137c,0x3b9ad9a1,0x3ac6a339,0x3a871790,0x3bdc8b6f,0xbc28b2f0,0xbc907059,0xbc74a668,0xbc1397ab,0xba7c1be9,0xba52999a,0x3bd22bc7,0x3bb238e7,0xbc0b912c,0xbbe66107,0xbbd94531,0xbbed40df,0xbcbcc53e,0xbc97b385,0x3c6725f8, -0x3c576c04,0x3c3219fc,0x3b15db96,0x3a072303,0xbac0b377,0xbb781f3d,0x3b192b67,0x3b1d4bf6,0xba458f73,0x3bb601a2,0x3c349fbf,0x3c978001,0x3c891f3c,0x3c674c4d,0x3c018c07,0x3bffe4ca,0x3bb5149a,0x3b660cab,0x3aafa4e6,0x3b058113,0x3c1a881e,0x39a39cdd,0x3b150ffd,0x3c8c35aa,0xbc5868f7, -0xbc81193b,0x3ac4d143,0x3c325e88,0x3c56d83c,0x3b354c7b,0x3a83d95c,0x3c15a4d3,0x3c4a142e,0x3bd9fa2f,0x3b330268,0xbc3561af,0xbc8066e3,0xbc636325,0xbbea82de,0xbbbb75a6,0xbb2e2dbb,0xbb0c4858,0xbaed4d22,0x3a1412a2,0x3b29ef90,0x3ba704c8,0x3b0c556b,0xba5fdf7e,0x3b53342d,0x3ba6ff12, -0x3c25dd79,0x3bbc148b,0x3a286848,0xbb5fafb9,0xbb842412,0xbb5a5d2f,0xbac6a279,0xbc2d5df5,0xbc543376,0xbbcb26b5,0xbc371260,0xbc46b5de,0xbc19fc95,0xbcaf53a5,0xbce19ffe,0xbcf32177,0xbbb171f5,0x3c2f7ad0,0x3c54f02f,0x38962fe8,0xbc012619,0xbc97310d,0xbc272147,0xbbb6fbd9,0xbc3ae760, -0xbbf32c87,0xbae4362e,0x3a806ac0,0x39c33ec1,0x3a95ff17,0x3b170c65,0x3b155ede,0x3a36383d,0xb92d68d9,0x3b8f867a,0x3b97522c,0x3c0e5c00,0x3a740119,0xbab555c8,0x3b4ce3e0,0xb8c0f367,0xb93836b9,0x3a989f7f,0xbb0efa48,0xbbc72606,0xbc248560,0xbc83c95c,0xbc6d557e,0xbb0ed523,0x3c2aa362, -0x3c7b8c70,0x3c4cf632,0x3bf51db5,0xbd948b7e,0xbd859bde,0xbd3c52f5,0xbd05bf30,0xbcc61dd5,0xbcbb97de,0xbc973b57,0xbc8a27dc,0xbc32d282,0xbbfaaa8d,0xbb7d9a8b,0xb8f2ce27,0x3a84ecc9,0xba5496ab,0xb975e71d,0xbb07e4a7,0xbb8f26bd,0xbb87f009,0xb9458308,0x3c431f8b,0x3b48bc0d,0xbaca056a, -0xbbce5c5f,0xbbcc643e,0xbbb3c253,0xbbb626a0,0xbb952f31,0xbb5f9476,0x37b0f23d,0xbc071cfa,0xbc585b1a,0xbbeef310,0xbcc1952e,0xbcf2fc5c,0xbcea9489,0xbd77206d,0x3cd059bf,0x3d399801,0x3d6c2e5c,0x3d5a4218,0x3d36c5b2,0x3d438f2c,0x3d144d91,0x3c69af1a,0x3c27f157,0x3b90b684,0x3ba6cb84, -0x3a01887f,0xbaec0d40,0xbb68a2f5,0x39db79b9,0x3a98ada1,0xbb66a792,0x3ba2c6e3,0x3b93f490,0x3b83ca23,0xba8a8501,0xbb81cc9d,0xbad2a6b0,0xbb80f63d,0xbc4726d0,0xbca5e3b6,0xbc7697aa,0xbc7c8aa3,0xbca75daf,0xbc9d3283,0xbca0012b,0xbc9d9b26,0xbd130fa7,0xbd296669,0xbd04c572,0x3a883b28, -0x3d1cdf5d,0x3d1637e9,0x3d11c131,0x3d0473dd,0x3cde06f4,0x3cc43e77,0x3cc55144,0x3cd98fe1,0x3ccd316e,0x3cba2e07,0x3caa6873,0x3c8a3235,0x3c697cb5,0x3c6012c6,0x3be89b77,0x3b540192,0xbacf453d,0xbb329e6c,0xbb9f95d8,0xbc09bf85,0xbc67fedb,0xbc8dbfa4,0xbca03eba,0xbcc7e51d,0xbcc07d61, -0xbc8172d9,0xbca43fe6,0xbcb794bb,0xbcd4b6b6,0xbcf63aad,0xbd0714a7,0xbd025df8,0xbc0dd11c,0x3c53bf44,0x3ce2b839,0x3d0de7cf,0x3d1b6694,0x3d08d638,0x3cfcadfb,0x3cec35a1,0x3cd2d617,0x3cc76e06,0x3cbc813e,0x3ca72c46,0x3c909a62,0x3c89874b,0x3c642131,0x3c6a14b9,0x3c6080c5,0x3c604320, -0x3c4c25e0,0x3c2d89b9,0x3c150a0c,0x3bac4405,0x3a9a7dac,0xbb05c0e4,0xbb1510a6,0xbb51e013,0xbb784c72,0xbb13fa63,0xbb146198,0xbb278469,0xbb165766,0xba86218b,0xba3846c7,0x3c707f85,0x3cf884ee,0x3d36aa55,0x3d3ab1c7,0x3d3c05b5,0x3d4ade22,0x3d2e6657,0x3d04bf8a,0x3d0a209c,0x3d07049a, -0x3d02c3d2,0x3cfc03fe,0x3cf531b0,0x3cef192e,0x3ce70885,0x3ce400ba,0x3cd9fb02,0x3ccfc5b9,0x3cc6a4c9,0x3cb9a89c,0x3caaf6a1,0x3ca0b751,0x3c95b0c0,0x3c8e8471,0x3c879f89,0x3c84b6b9,0x3c68eeec,0x3c824961,0x3c8e9dc8,0x3c97f398,0x3ca27147,0x3caefbad,0x3cbb86d4,0x3ccbcca0,0x3cda0264, -0x3cdd900b,0x3ce1e0c3,0x3cd6461d,0x3cde4fba,0x3ce0112e,0x3cec9e43,0x3cf4bf26,0x3cffa305,0x3ce56744,0x3cea360d,0x3ce73a44,0x3ce36edc,0x3cdbde74,0x3cde4f98,0x3cd83e86,0x3ccd4091,0x3cc90505,0x3cc50655,0x3cc2a2f3,0x3cbe9371,0x3cbc3d9b,0x3cbac87c,0x3cbdef8b,0x3cbb8bf9,0x3cb3cea1, -0x3cb38517,0x3cb16f07,0x3ca6415f,0x3caeebd5,0x3cb46818,0x3cbb13ef,0x3cc00dbb,0x3cc4cfb7,0x3cc9c868,0x3ccc41f6,0x3cd06f8d,0x3cd82d1d,0x3cd9c4bc,0x3cde9c18,0x3ce01aa1,0x3ce186b0,0x3ce11aab,0x3cdfa9ae,0x3ce3383d,0x3cec84f5,0x3b7475cb,0x3b17ac57,0x3aedcf85,0x3b293d19,0x3b4c96a7, -0x3b8aad43,0x3b67b754,0x3b33d94b,0x3b35a8e4,0x3b24f0bf,0x3b378dfe,0x3b82be50,0x3b34275a,0x3b223e7e,0x3b0d971d,0x3b4e8518,0x3b77e311,0x3b8160a4,0x3b922014,0x3b98ff38,0x3b940f56,0x3b8b2dd5,0x3b842370,0x3b75e814,0x3b68995f,0x3b5a79b7,0x3b7af7d7,0x3af74cca,0x3aad69cf,0x3a8a0397, -0x3b1caaff,0x3b482f25,0x3b52e22b,0x3b83d460,0x3b8338e0,0x3b375395,0x3b351608,0x3b0690a4,0x3aabff61,0x3b1ad562,0x3b9b619b,0x3c0b54c2,0x3b55b099,0x3b088d84,0x3b861d96,0x3b6954b1,0x3b873f22,0x3bd0668f,0x3b65e58e,0x3b34d0f1,0x3b22fcc9,0x3b81e38f,0x3badbcca,0x3bdc9bbf,0x3bfe7484, -0x3bf11d9e,0x3bd3ffab,0x3bd1edc3,0x3bb8bf9b,0x3b9a6535,0x3b87403e,0x3b57de42,0x3b85413b,0xbad12a43,0xbb4f697b,0xbb35821a,0x39f76ee9,0x3b303fbb,0x3b2dc0d1,0x3b9e9f42,0x3b8df862,0x3a7a95bc,0x3b0bca44,0xba90dec2,0xbb3e7e03,0x3a195765,0x3b9f96c6,0x3c552341,0x3b636c45,0x3ae0af71, -0x3ba93871,0x3b3cf4f2,0x3b95ad8e,0x3c190223,0x3b851257,0x3aca30a7,0x3b048aef,0x3b9b0440,0x3bfe4570,0x3c334e22,0x3c4de151,0x3c451636,0x3c185d46,0x3c12c3e0,0x3bee98de,0x3bb8f4fc,0x3b92afa1,0x3b59c3da,0x3bc17664,0xbbbd1322,0xbc113cb7,0xbc172e50,0xbadf7517,0x3b503096,0x3b218742, -0x3bf4c58a,0x3bdf32ce,0xb9a7ba20,0x395dcaaa,0x3a99751f,0xb892a508,0x3b8b8b52,0x3c169455,0x3c961d2e,0x3b14397c,0xb86cfeeb,0x3b923070,0x3ba7d742,0x3bd68c20,0x3bf04922,0xb99141e3,0xba9e1d14,0x3b03ce2f,0x3bf30b84,0x3c43c483,0x3c89a9d5,0x3c864f73,0x3c7a95ff,0x3c4452e1,0x3c510504, -0x3c21e7fc,0x3be753cc,0x3ba8f6e6,0x3b72abde,0x3bc61f05,0xbc4b97fa,0xbc9af046,0xbc8c261b,0xbb927376,0x3b7c66c4,0x3a0b12e4,0x3bdbfe04,0x3ba75246,0xbbd7c801,0xba76fe81,0xbbe3393d,0xbc4997df,0xbc8f5534,0xbc556c69,0x3bcfb287,0x3c448de2,0x3c5bd63b,0x3be83844,0x3b34dc30,0xb9a0b35d, -0xbb203640,0x3b4b1e0a,0x3b54bf59,0x39806d7c,0x3bc54734,0x3c2d9ae2,0x3c82b0ff,0x3c9f054b,0x3c94f4ef,0x3c0b70f3,0x3c038f7d,0x3bb700f1,0x3b39463a,0x3a6713ec,0x3ae9c7af,0x3bd4b7b4,0xba50b1f0,0xba972b1e,0x3b67e920,0xbc2abaa7,0xbbf8603d,0x3c363486,0x3c589d83,0x3c79fb91,0x3c1f5a88, -0x3b80d5c3,0x3c7fe2a1,0x3cfa7e33,0x3b4ba612,0xbb8d788a,0xbbee1394,0xbc2f98d7,0xbc3444c6,0xbc0c4374,0xbba61462,0xbad24e58,0xba90ab91,0xbb32704a,0xba509b9e,0x3afea78d,0x3bb284bd,0x3b704a2b,0x3b3fff28,0x3b2d89f4,0x3b8828a1,0x3c450039,0x3bee5c49,0x3b88a703,0x3af7cdf9,0xbb1cfa45, -0xbb978803,0xbbdc438c,0xbc167f0d,0xbbf68d35,0xba8b0b02,0xbb198bbc,0xbba5119c,0xba853da8,0xbcf8e059,0xbd17ae01,0xbcc49789,0xbbb33079,0xbaa1d660,0x3c1a5f12,0x3c1db368,0x3a20f05b,0xbc9e376c,0xbc178e84,0xbb9716f2,0xbc28b8bb,0xbc00283b,0xbb557774,0x3a110ac2,0x39c79f43,0x3b1084fc, -0x3b1a2952,0x3b3cf0ee,0x3b634ca0,0x3b8ded46,0x3b7e9548,0x3ba790d7,0x3c8e2a93,0x3bdd01f6,0x3b84e18e,0x3bcdf511,0x3be5df63,0x3ba6efc5,0xbb1dc69f,0xbb4e01be,0xbbca758d,0xbbe18995,0xbbec185a,0xbb890b26,0x3bb0b18f,0x3c90ff97,0x3c8dd06b,0x3b9bc3ec,0xba9c219c,0xbce7bded,0xbd662eb5, -0xbd613204,0xbd32ea25,0xbd0b59a2,0xbcac7b0b,0xbc4ec137,0xbc4ba2d0,0xbc1bd66f,0xbbcbadd1,0xba84320a,0xb7b0e197,0x3a842f99,0x39a5062e,0x3aa9e663,0xba351788,0xbb065894,0xbb820799,0xba5abd3a,0x3c58e3d6,0x3bbf3704,0x3aeed77e,0xbb889ac4,0xbbed932c,0xbc473b13,0xbc623713,0xbc292fbf, -0xbbd45072,0xba3d1167,0xbaf36a65,0xbc0a320b,0xbc7b221b,0xbca7f7cb,0xbcb818af,0xbcd04bb9,0xbc9c3eab,0xbc8c1e96,0x3c0b2cc8,0x3d052bef,0x3d121951,0x3d0a5cd0,0x3d09a4de,0x3cadee13,0x3b6165e8,0x3b56761b,0x39839cba,0x3aeb480c,0x3a8007fd,0xb9f16afd,0xbb7e6287,0x3acfbe25,0x3b457b1c, -0x3a8b0329,0x3a98eaf4,0x3ae4dae1,0x3bf3996a,0x3980e51c,0xbb9906a5,0xbbb9a9be,0xbc3b865b,0xbc528eda,0xbbecb2a1,0xbbea186c,0xbc18b626,0xbc324a28,0xbc7c3626,0xbc85eb1e,0xbc7f8c99,0xbc93440f,0xbcf2bd86,0xbd3a5041,0xbcf6268e,0x3d2c7a67,0x3d3b4a1b,0x3d34ca05,0x3d22e685,0x3d0e7c21, -0x3cdc68e7,0x3ce04d69,0x3d0c4d35,0x3ce77161,0x3cc1f383,0x3c9d2761,0x3c81b2bd,0x3c790a3d,0x3c89399a,0x3c2861c4,0x3b78fee4,0xbb81c584,0xbbd4f5f3,0xbc1f192d,0xbc152ee3,0xbc5cda3c,0xbc76b102,0xbc47e35a,0xbc8d91e8,0xbc827e75,0xbc5c3ba8,0xbc87d368,0xbc949fe2,0xbcbbbdfa,0xbcdd761e, -0xbd05e40d,0xbd1c3c47,0xbd01ed0e,0xbc555fd5,0x3c83d29d,0x3cfbf177,0x3cf6dcf4,0x3cf52e91,0x3cefcff3,0x3ce896fc,0x3cdbc8ed,0x3cdfc712,0x3cdcfa87,0x3cd54a36,0x3cb9d319,0x3cab81b6,0x3c912e81,0x3c75f9aa,0x3c45b828,0x3c0d6517,0x3c0a64c9,0x3bef2ce1,0x3bcde879,0x3bb12946,0x3b61849a, -0x3b0e334a,0xb96e51e7,0xbb57324a,0xbbccc891,0xbc0bebe2,0xbc375caf,0xbc66b166,0xbc6a6da9,0xbc729150,0xbc871c4c,0xbb51fb09,0x3c14e736,0x3cab1017,0x3cdf467e,0x3cff08b4,0x3d132ed3,0x3d0128c9,0x3ce3e6a7,0x3cf048ef,0x3d031fec,0x3cf0d5da,0x3cf56453,0x3cef473f,0x3cea423b,0x3ce95f15, -0x3cde3424,0x3cd44dd5,0x3ccd1a79,0x3cc0813c,0x3cb6364f,0x3ca91717,0x3c9c010f,0x3c80b0fb,0x3c631df6,0x3c3d0ac8,0x3c455763,0x3ba46c69,0x3bd9f7aa,0x3c15b9e2,0x3c3473ce,0x3c51ff29,0x3c6bb0d3,0x3c8095ce,0x3c8a901e,0x3c99aab5,0x3ca3d29a,0x3ca91437,0x3ca423c9,0x3ca83f8e,0x3cab6cc2, -0x3cb7a8a9,0x3cc54f40,0x3cd8ec34,0x3cd44b4c,0x3cd5b32b,0x3cdeb789,0x3ce16c10,0x3ce287f9,0x3cda86c2,0x3cdccdbc,0x3cdae3fa,0x3cd6e1b4,0x3cd281c1,0x3cce0e39,0x3ccaff8d,0x3cc82dda,0x3cc5ce1c,0x3cbbc739,0x3cb2ef4e,0x3cba6ca4,0x3cabd655,0x3ca3fe57,0x3c89ba2c,0x3c987d55,0x3c98d00d, -0x3c9be89a,0x3c9f2590,0x3ca37b23,0x3ca8ae0c,0x3caf20cc,0x3cb48559,0x3cbb9ce9,0x3cbea2ee,0x3cc52750,0x3ccae5d7,0x3ccd45b7,0x3cce5364,0x3ccdc21a,0x3ccfde0d,0x3cee5d3f,0x3b92885e,0x3b53e759,0x3b42b81a,0x3b53f3e1,0x3b796571,0x3bc098e4,0x3b8409bd,0x3b570cdf,0x3b7960bf,0x3b5086f4, -0x3b62dfda,0x3ba174c5,0x3b679dbd,0x3b4fb0ed,0x3b399912,0x3b716aac,0x3b8a471a,0x3b8d5eaf,0x3ba0d638,0x3ba9b5d6,0x3badd0ef,0x3b9f4533,0x3b97015b,0x3b8e1dc6,0x3b8bd636,0x3b80d10d,0x3b6ea8df,0x3b1838a7,0x3afbc1ef,0x3add2827,0x3b630aca,0x3b861e47,0x3b6a00ce,0x3b9eb4eb,0x3b9cb53c, -0x3b5db84e,0x3b6b9d9a,0x3b4dc5e7,0x3b27ac20,0x3b5168a2,0x3bc44579,0x3c352fc0,0x3b83d407,0x3b2725a7,0x3bacf65a,0x3b83f4d1,0x3b986363,0x3bf2f67d,0x3b8c3fb8,0x3b66a67a,0x3b50a3ff,0x3b92fc1e,0x3bb87662,0x3bd7ab31,0x3c063870,0x3c025038,0x3befb0a7,0x3be37de9,0x3bcafed3,0x3bb0cf7f, -0x3babcd74,0x3b7bdf9e,0x3b1ae85e,0xbadff15b,0xbb2d16b6,0xbb0f8372,0x3b204e7d,0x3b901c08,0x3b20c7e0,0x3bb1a568,0x3b9cecc7,0x3acd5698,0x3b34c916,0x3a89edb9,0xbac78b9e,0x3af9d93d,0x3bc46abd,0x3c8dd052,0x3b797d24,0x3afb9f1f,0x3bef5d28,0x3b62b94c,0x3b9ad970,0x3c361dc2,0x3b9b2bb6, -0x3b1588a1,0x3b35d21c,0x3ba61233,0x3bfbb7ed,0x3c20cded,0x3c4f2486,0x3c4fde2e,0x3c2d6dce,0x3c18fb61,0x3bf8638d,0x3bccbaf7,0x3bba9bd6,0x3b646d4a,0x3acf66e1,0xbbd3fb43,0xbc0f2785,0xbc123828,0x3abb8f5a,0x3bc17d72,0x3a82bd48,0x3c0e3881,0x3bf969e3,0x3a6124a3,0x3b179ad3,0x3b0a8822, -0xb99f9401,0x3b9d7ac2,0x3c353eca,0x3cd06ca4,0x3b6e50ef,0xbacff235,0x3bddee0b,0x3b8dcef8,0x3bdb10ac,0x3c42a6cd,0x3adea5a7,0xba8d9251,0x3b4c754d,0x3bf3c498,0x3c407d79,0x3c7c8c93,0x3c8d3b1d,0x3c8a9474,0x3c5da274,0x3c5341ac,0x3c27b6fb,0x3c0c4142,0x3bf28994,0x3b514ad8,0xbae6475c, -0xbc76c7d1,0xbc9d259e,0xbc8acc08,0x391b4eb7,0x3bc7fba8,0xbb20d39d,0x3bd277a6,0x3b8ecb39,0xbba48ada,0xb8d2dd9d,0xba691cae,0xbc02cc92,0xbc670bdc,0xbc3ae7ab,0xbb3d8250,0x3c12abd4,0x3c6fe553,0x3c3e5891,0x3b978048,0xb74a31f0,0xbb0a80dc,0x3b5c2653,0x3b8d207b,0x3b004032,0x3bea0346, -0x3c2cb4bd,0x3c6287ad,0x3caa9715,0x3c9f35cf,0x3c218ea7,0x3c2722b8,0x3bcb8189,0x3b11f20f,0x3ac50131,0x3b23b6e5,0x3b90e593,0x3b775047,0x3b2c9d92,0xbb43e948,0xbb8ea4cb,0x3a9182c8,0x3c87366b,0x3c76eefe,0x3c921bfe,0x3ca3ef45,0x3c0c01bc,0x3c26d03d,0x3d22e55b,0x3b71a78b,0xbbed67c8, -0xbb47218b,0xbb8f3bd0,0xbbbdd933,0xbbdd3d9a,0xbb21e9fd,0xb96bc909,0xba754656,0xbb28ea93,0xba58146d,0x3b30df7d,0x3bb34b65,0x3b9cac1e,0x3bb7282b,0x3b0a3eaf,0x3b454441,0x3c3178c7,0x3bd001ae,0x3b867d49,0x3b2e9a2e,0xbb8d628e,0xbbd20ebf,0xbb9b408c,0xbba71350,0xba98edf2,0x3b9124e4, -0x3b831bd5,0x37f0a995,0x3b2fcab6,0xbcf94d96,0xbd17300e,0xbc8c698e,0xbc2cf2ba,0xbbc01a52,0xba872d81,0x3bb198c5,0x39748c8d,0xbc993b6a,0xbc506aa0,0xbbeaf9e8,0xbc029190,0xbbf71d4d,0xbb8bdf72,0x39c22a92,0xb7a7569d,0x3b159cf8,0x3b09fc0d,0x3b413e48,0x3bae2b53,0x3c0a483f,0x3b4af3d0, -0x3bb63542,0x3cac650e,0x3c1fb5c1,0x3bb7ea6f,0x3b9d0fda,0x3979894f,0xba3161d7,0x3b1b02a3,0xbbf26ed0,0xbc2cbe68,0xbbe32b95,0xbb17814b,0x3b3680f8,0x3bcaf1cf,0x3c99e2fb,0x3c800ea2,0xba5ece23,0xbaf3fe76,0xb96bed9e,0xbce40deb,0xbd4852a1,0xbd36af6a,0xbd0e76a8,0xbc94c475,0xbc00bd0f, -0xbc092e17,0xbbecd5bf,0xbb7f1d94,0xb8b722ea,0xb96c0068,0x3a1d11d7,0x3b0a9e82,0x3b075909,0xb9a67111,0xb9a5781a,0xbb26d0d8,0x3a8faf74,0x3c4e0d8b,0x3bd6c298,0x3b376696,0xbb6026f0,0xbc113b39,0xbc55d570,0xbbf64cf7,0xbc1d7d63,0xbbdecc90,0xba422925,0xba0e9e52,0xbbb4e653,0xbc95f352, -0xbc99b2b6,0xbca46c44,0xbcb7958c,0x3a378192,0xbd628626,0xbcfb3923,0x3abe50ad,0x3c54d369,0x3c8bc153,0x3c58cb40,0x3b503856,0xbbc9d33e,0xbb82a01a,0xbb840161,0xba18d9e0,0x3b258bed,0x3ad5f314,0xbb25b2a4,0x3aaa86f0,0x3b519720,0x3bb5a182,0xbaafc99f,0xbafcb730,0x3bb297d9,0x3a6b637b, -0xbb0aa74b,0xbc025b15,0xbc0a7350,0xbbe7697c,0xbb9baf70,0xbc390aa5,0xbc30ccd7,0xbb6d4b9b,0xbc06d516,0xbc0f2d69,0xbc1656fb,0xbbeb0c81,0xbc941732,0xbd28679b,0xbd57fa58,0x3d224c7f,0x3d48ca44,0x3d4c789a,0x3d379c27,0x3d29b708,0x3d05b092,0x3cfd5988,0x3d11de36,0x3cf84f2f,0x3ccc4a99, -0x3c8b9828,0x3c70779c,0x3c63a2ef,0x3c5bf35d,0x3c1179ef,0x3b1c10a0,0xbb90082a,0xbbeeea55,0xbc078b80,0xbb930688,0xbc0e1764,0xbc25db28,0xbc053ef2,0xbc25867e,0xbc1cf85b,0xbc1c7dcb,0xbc19fb50,0xbc3ec33a,0xbc9714fb,0xbca4ef2f,0xbcd5ebd4,0xbd0cbefa,0xbd16bf72,0xbcda200b,0xba50b3e3, -0x3cb2ecc3,0x3cb78a66,0x3cdce984,0x3cdd5602,0x3ce411d9,0x3ce2ebf9,0x3ce8a6fc,0x3ceae902,0x3ceb72cd,0x3cd1fb99,0x3cbe6abb,0x3cab614f,0x3c88243b,0x3c4ae4c7,0x3c0460a5,0x3be95c5e,0x3bcdf62d,0x3ba43a1f,0x3b782682,0x3b0a2409,0xbb197077,0xbbd9a625,0xbc171681,0xbc519c02,0xbc7e495a, -0xbc939867,0xbcaa1860,0xbcb0d90b,0xbcbbec34,0xbccece34,0xbc951336,0xbc4b6444,0xbbde028b,0x3b9251f6,0x3c585b3c,0x3ca6ebe3,0x3ca7cecc,0x3cb177da,0x3cba289e,0x3cde3fe6,0x3cc33054,0x3cd0e8e6,0x3cd3686c,0x3cce9f82,0x3cd26946,0x3cbc0acb,0x3cae3744,0x3ca51282,0x3c91f716,0x3c84df99, -0x3c6ec7a8,0x3c5594f8,0x3c1b8036,0x3bd7d129,0x3b74b8dc,0x3b79c4cf,0xbac0d38c,0xb822b867,0x3a816aa2,0x3aed16bc,0x3b3897c4,0x3b6711b4,0x3b83c942,0x3bc7da70,0x3c0d43ba,0x3c34373e,0x3c50f62a,0x3c6a170d,0x3c7e5912,0x3c82a46e,0x3c879dbf,0x3c95da00,0x3ca692cb,0x3ca52070,0x3ca18350, -0x3cc0d74e,0x3ccecfd4,0x3ce0e988,0x3cb9cce2,0x3ccedcb7,0x3ce0a3c2,0x3cdb4c96,0x3cd6ef87,0x3cd095ae,0x3cce1ced,0x3ccb305e,0x3cc734c9,0x3ca8a5ae,0x3c925d65,0x3cb46b46,0x3c994e35,0x3c876c33,0x3c4f4530,0x3c632ec9,0x3c5f1192,0x3c60e5d1,0x3c6095f5,0x3c624147,0x3c605925,0x3c745ab7, -0x3c80c100,0x3c882fde,0x3c8d6d75,0x3c94284f,0x3c9d7ab2,0x3c9e54a1,0x3ca028ac,0x3c9f66ef,0x3ca0f00e,0x3cbd7843,0x3babdc6a,0x3b8737cc,0x3b8eea81,0x3b92228d,0x3b9fe01f,0x3be5da5c,0x3b9c952d,0x3b88ac37,0x3b9d759c,0x3b859f05,0x3b8c9959,0x3bb87f03,0x3b8f7711,0x3b83d38c,0x3b75cd5b, -0x3b939b12,0x3b9f4cfd,0x3b9de0aa,0x3bb77921,0x3bc20279,0x3bc83738,0x3bb5d806,0x3bacbe8f,0x3ba360f5,0x3ba0dea9,0x3b913e56,0x3b60674c,0x3b3d6706,0x3b30f2ad,0x3b2057ab,0x3b933888,0x3ba5b506,0x3b84b4f8,0x3bb3a3db,0x3bb2ba93,0x3b86ec1b,0x3b905d51,0x3b9045b8,0x3bb12ec1,0x3baa8b15, -0x3bfe45c6,0x3c4b838b,0x3ba461e4,0x3b5b9ae7,0x3bc89622,0x3b9ba398,0x3bb0b52f,0x3c001cf6,0x3baa095b,0x3b938e02,0x3b867c33,0x3ba7ab49,0x3bc319ce,0x3bd9daf5,0x3c0ca242,0x3c0d91e0,0x3c0c1ee6,0x3bf650b2,0x3bdc222b,0x3bc36580,0x3bbb356f,0x3b7ae45a,0x3a3212bb,0xbab4c753,0xbac6176a, -0xba97a4d6,0x3b8f341e,0x3bc79648,0x3b3dc381,0x3bcf3207,0x3bb6ead4,0x3b22904b,0x3b66a3f1,0x3b2bffb2,0x3b16c7e6,0x3b855bd1,0x3bffa8dd,0x3c99cb97,0x3b989c96,0x3b2cda8a,0x3c062402,0x3b8a933d,0x3ba2f4bf,0x3c35970a,0x3ba967d2,0x3b557070,0x3b664a07,0x3bb67b2b,0x3bf6a52d,0x3c0afe51, -0x3c4b291f,0x3c557794,0x3c42fa3d,0x3c226d71,0x3c0350cd,0x3bd57af7,0x3bc235c1,0x3b3089d6,0xbb3468b7,0xbbdc7cb9,0xbbf3a926,0xbbe3b71a,0x3b8bffc3,0x3c020d6c,0x3a7307d4,0x3c10068c,0x3c0780d6,0x3b020731,0x3b6f58cf,0x3b906603,0x3ba66d41,0x3bf730a4,0x3c6c77b2,0x3cebe78a,0x3ba0d048, -0xbac58ce3,0x3c096647,0x3b91ee2f,0x3bd970de,0x3c68ee32,0x3b4eece6,0xb9dc7100,0x3b85ee58,0x3c018e9c,0x3c35e0ac,0x3c5e07f3,0x3c8ef3d9,0x3c8fc5f8,0x3c766171,0x3c528f2c,0x3c289494,0x3c0eb82b,0x3be4ac52,0x39ff315c,0xbc1e6a7c,0xbc8a95a4,0xbc8bbf34,0xbc697b70,0x3b81f547,0x3c0f8152, -0xbb19cef7,0x3c02162e,0x3ba1fa41,0xbb8c9854,0xb853e429,0x3ae945cd,0xbb1d6539,0xbc3d80c9,0xbc460ddf,0xbc00de3d,0x3c018f6c,0x3c85c45e,0x3c6dcb46,0x3bd0e46e,0x398c35e5,0xbb05f953,0x3b5bc742,0x3ba64ffc,0x3b69c3dc,0x3c125f32,0x3c37609d,0x3c4e5b4f,0x3c9e4b86,0x3c9a6740,0x3c6a8b25, -0x3c27d5dc,0x3b9cff72,0x3ad24c03,0x3a919233,0x3b150c2c,0x3b72208b,0x3bb64d25,0x3ba3f873,0xbb37d606,0x3b8e4ace,0x3bf84684,0x3c3913d1,0x3c39ec22,0x3c93cd47,0x3cfcda8c,0x3c51ee0f,0x3b91f7d3,0x3d2a5bc3,0x3b61d123,0xbc0cd90e,0xb9f89135,0xbb1fed2b,0xbb2bc2fc,0xbb728175,0x3a7b137e, -0x3b3ccfe2,0x39537280,0xbac77f71,0xb8f99e6c,0x3b83bbb5,0x3ba44955,0x3bbd3bfa,0x3bf25e7d,0x3b583a0b,0x3b465ac8,0x3c12b44b,0x3b8ebb67,0x3b021883,0xbad3e803,0xbb8337b7,0xbb90e3b5,0xba9d5736,0x3ab71878,0x3bc04d2e,0x3c1f84a0,0x3bb1eddd,0x3ba20cf7,0x3c3a03e8,0xbca4cc12,0xbcf298f3, -0xbc80a825,0xbc725d03,0xbb899528,0xbba181b1,0xbb05b9ac,0xbb64beb7,0xbc86e4b1,0xbc7bc4e0,0xbc3d90e7,0xbbb17cfb,0xbbdbc6c3,0xbb9ff980,0xb981afd5,0x3a0f9d00,0x3b45575a,0x3ae58734,0x3b65d6b1,0x3bdc9a91,0x3c189800,0x3b1a8d18,0x3bbdd640,0x3c9c0b53,0x3c1ace04,0x3bc9714c,0x3ae04fdd, -0xb84d9289,0xb912bf68,0x3b3e9d4d,0xbbb34e50,0xbbd6fabb,0xb7ec27f7,0x3aec4d05,0x3bb166a0,0x3bea8c73,0x3c71a6c7,0x3c692af1,0x3a225aaa,0x3a02e3d8,0x3c200f0a,0xb9b8d531,0xbd04a224,0xbd1865df,0xbcf01d7f,0xbc7ca69f,0xbbabdaef,0xbb81f549,0xbb90f482,0xba3a0025,0x3a89088f,0xba0aa2e4, -0x388f45bd,0x3b8778fb,0x3b55eded,0x3ab67dec,0x3ab76089,0x3ae2c1f4,0x3b81aa30,0x3bf159b1,0x3b9418fc,0x3b2fa07c,0xbb27b6da,0xba85d8f3,0xbb3ca330,0xbb56e2eb,0xbc1ab542,0xbc09076a,0xbb1dcb2b,0xbbaf2127,0xbbf03809,0xbc5f01af,0xbc9eb441,0xbcaef7d9,0xbc85b414,0x3b1920b4,0xbd8cd0ef, -0xbd6d8f4f,0xbcce8a0a,0xbbed4139,0x3aba8cfc,0xbba21ca1,0xbc37f568,0xbc398dea,0xbc1cfaf4,0xbbff990a,0xbb0c12b1,0x3b6aa325,0x3b6536b4,0xb984c69f,0x3a4d1e97,0x3b19ff53,0x3be157fc,0xba65af63,0xbaec6945,0x3bb58d32,0x3bbfd8e6,0x3b635ec1,0xbbaf9ab3,0xbbdb7bc4,0xbc030897,0xbc0198e4, -0xbc31e739,0xbc027332,0xbb8ba7fc,0xbb7267c8,0xbb5e98c8,0xbba9295e,0xbbc43d20,0xbc66481e,0xbce857bd,0xbd630214,0x3cbca1ea,0x3d1e6f0d,0x3d372ab4,0x3d231a5f,0x3d2189be,0x3d0616e8,0x3cf42abc,0x3d055e53,0x3cefc4c8,0x3cca89d9,0x3c7ef3b3,0x3c57b314,0x3c3029eb,0x3c02dc14,0x3be2d26a, -0x3b3ad605,0xba7faa8f,0xbb90584e,0xbb90df43,0xbb20981e,0xbbb664c7,0xbbd25126,0xbbea8d73,0xbb9d104e,0xbbaa0abb,0xbb948632,0xbb9b2aaa,0xbbf5aab3,0xbc6be938,0xbc63900b,0xbc9b3023,0xbce9552d,0xbd043339,0xbcfb4082,0xbc9f8ff8,0x3b776453,0x3c8bba68,0x3ccee2b7,0x3cd8d4a1,0x3ceb9e29, -0x3cfed310,0x3cf3e559,0x3cedee3f,0x3ce5935c,0x3cd04dd2,0x3cb795fb,0x3cad4947,0x3c8ea852,0x3c75f183,0x3c41121f,0x3c1379cc,0x3bdd13b7,0x3b887559,0x397aefdc,0xbb8d4bd2,0xbc2dfd71,0xbc6d0ecb,0xbc8afa52,0xbca7d633,0xbcb1ac2c,0xbcbb228d,0xbcc5569b,0xbcd9b000,0xbcec3ee3,0xbd011ceb, -0xbceab40c,0xbcd975db,0xbccbbe72,0xbc4c5b5b,0xbaa2bbed,0x3bfef54a,0x3c548a02,0x3c62476b,0x3c7819b0,0x3cab6cb7,0x3c8917bf,0x3c9c1aa1,0x3ca57c3d,0x3ca05045,0x3ca8d941,0x3c894135,0x3c73863d,0x3c59541e,0x3c2323fc,0x3bf60e3e,0x3bb0438c,0x3bb0a2d5,0x3b7b3e17,0x3acddef1,0x3a0c6782, -0x3adc965c,0x3886dbb2,0x38ee81ce,0xba447af8,0xbabe1e27,0xbb0b3c97,0xbb47f5f1,0xbb85eaa9,0xbadf7054,0x3a22db77,0x3b2d3e0a,0x3b8ebfe0,0x3bc99cad,0x3be92f67,0x3c03e626,0x3c08cd2f,0x3c24a441,0x3c41202d,0x3c262e3d,0x3c1b320d,0x3c6db66d,0x3c8ded3f,0x3cb29cae,0x3c5a0d67,0x3c910248, -0x3cb8dae4,0x3cb057fa,0x3caa5ad5,0x3ca1ce16,0x3c9edc93,0x3c9ad4d4,0x3c936e9f,0x3c54fad0,0x3c19cc16,0x3c894f0f,0x3c48eeb6,0x3c1d3e24,0x3bc489c1,0x3bc5dc38,0x3bb486fd,0x3ba8d856,0x3b971a0f,0x3b8a2bd1,0x3b5ae391,0x3b915aa7,0x3ba48a12,0x3bbe05cb,0x3bcf79e1,0x3be34b1d,0x3bff3b62, -0x3c0764ee,0x3c1129e8,0x3c15cf7e,0x3c1ca67c,0x3c25098b,0x3bb83e1a,0x3b9f4641,0x3ba427b5,0x3baaa266,0x3bb43f74,0x3bf2a01d,0x3ba2eb44,0x3b96ba27,0x3bacd63c,0x3b99bef6,0x3b9d2c08,0x3bbd3323,0x3ba10e7c,0x3b988172,0x3b90729c,0x3b9d877a,0x3ba5c07a,0x3ba70316,0x3bbf4021,0x3bca7bb3, -0x3bd6bcce,0x3bc0fcd0,0x3bb6ed63,0x3bac80d7,0x3ba88a80,0x3b968a97,0x3b5ba845,0x3b54c971,0x3b536089,0x3b4a78a7,0x3b9fe8cd,0x3bb07c23,0x3b936214,0x3bbbadb2,0x3bbceebf,0x3b98a04a,0x3ba54c29,0x3bb592c1,0x3bde8e56,0x3bf0e6fa,0x3c12b3db,0x3c4c6482,0x3bb2020a,0x3b711508,0x3bc74034, -0x3bae85bd,0x3bc723a5,0x3bf4f5a0,0x3bc2e1de,0x3badadb0,0x3b964556,0x3bac0e38,0x3bbe0cb5,0x3bd54492,0x3c0b9d29,0x3c13e7f6,0x3c1d9a46,0x3c03b515,0x3be91443,0x3bcb2566,0x3bbe8d23,0x3b7f04da,0x39690027,0xba447a44,0xba13365c,0xb987742a,0x3ba19d71,0x3bcfcc3f,0x3b568957,0x3bceff17, -0x3bbc56bd,0x3b48cfad,0x3b8f326f,0x3bb0e6d9,0x3badcceb,0x3bee5f4e,0x3c189c26,0x3c953a1d,0x3b9f1eab,0x3b4431f4,0x3c028578,0x3ba372ef,0x3bb5c647,0x3c1f66b3,0x3bbc0826,0x3b8ddaf1,0x3b75ad8d,0x3bb51de8,0x3be2aad4,0x3beeab62,0x3c3f5911,0x3c50eb82,0x3c57cdb1,0x3c290b6f,0x3c0865c7, -0x3bd54af1,0x3bc08297,0x3b0ed689,0xbb88cfc3,0xbbc1ed06,0xbbbbdfa8,0xbb8bd142,0x3b9687f0,0x3bfd42c8,0x3b0fbf9d,0x3c052419,0x3c0ee3c7,0x3b5a5752,0x3bc25fb4,0x3c0991b1,0x3c2d2e1e,0x3c5c8c3b,0x3c9cbcd6,0x3cf5f4c4,0x3bc63816,0xbacbea80,0x3c0717a6,0x3ba23084,0x3be5827e,0x3c714f2c, -0x3b9132d8,0x3a599c61,0x3b900354,0x3c035d02,0x3c1ee09f,0x3c34e3a3,0x3c8a67fa,0x3c938b81,0x3c935407,0x3c667d58,0x3c35a466,0x3c0d1cb0,0x3bdb19d2,0x391fce02,0xbc39e8b1,0xbc81dc91,0xbc608e1d,0xbc2ab5f6,0x3b94b08e,0x3c0328ce,0xbaa844a5,0x3bf96aa9,0x3b971f34,0xbb6f2080,0x3b0a8b87, -0x3b1bc6b5,0xbae3f5cb,0xbc2f2b9c,0xbc690a7f,0xbc3f7654,0x3bead961,0x3c90f5ad,0x3c8b434c,0x3c0e865b,0x3a603e46,0xbb2b016f,0x3b4460ae,0x3bae797e,0x3b939eca,0x3c2a01dd,0x3c3f0fe7,0x3c4566fb,0x3c78e97f,0x3c808563,0x3c7eba9a,0x3be2e20a,0x3b38bffd,0x3b21093e,0x3a6e6c09,0x3a9355c8, -0x3a9ad42e,0x3c0032a1,0x3bdb0143,0xbc01ad72,0x3c057a41,0x3c379121,0x3ba9907c,0x3c159723,0x3ca30a13,0x3d1f7f63,0x3c9011c7,0x3a332caf,0x3d15939a,0x3bbf8bea,0xbbc0562d,0x3b665220,0xbba5b690,0xbba6d449,0xbb2061bd,0x3b05a2e9,0x3b9d6ab3,0x3b2bf22f,0xb860fabc,0x3a54465d,0x3b926b4e, -0x3b884286,0x3bd4e71e,0x3c0cd217,0x3bd32cbe,0x3bc14dc3,0x3c0f04fd,0x3bb08744,0x3b6e0ea1,0xba195010,0xba42c049,0x3a06a80e,0x3b927616,0x3ba35e91,0x3c16aff0,0x3c5d6334,0x3baae4c0,0x3bca749f,0x3c772b96,0xbc35fe87,0xbcb30a8f,0xbc904f8c,0xbc85bf4b,0xbbd4de9a,0xbb971e6f,0xbb8a9bb7, -0xbba556ac,0xbc45ff6a,0xbc61ec56,0xbc515c9b,0xbb4b883a,0xbbba6990,0xbb9c7800,0xba5921fe,0x3ae782d5,0x3b88eb8f,0x3ab5a3e3,0x3b8b7f12,0x3c00076d,0x3c01a4b7,0x3b37d582,0x3bc18124,0x3c58ba13,0x3c1d98b7,0x3c0f5574,0x3b7430dc,0x3b823a73,0x3b0f53e1,0x3abd7812,0xbbcad9a7,0xbbd890e5, -0x3b73db92,0x3b89482b,0x3bf769a1,0x3c371b30,0x3c15718c,0x3c0fe54e,0x393c12b3,0xbb15bfe2,0x3bf82163,0x3bd10277,0xbc83e233,0xbcd079c2,0xbcaa7c44,0xbc4c6b27,0xbb74e55e,0x3a8a59ea,0xbada723a,0x3b074578,0x3b3bf743,0xb9236393,0x39e8f280,0x3b9f4d6b,0x3b985ef6,0x3b96a26d,0x3ba12380, -0x3bde8071,0x3bccf1bd,0x3b911ab4,0x3bd7bbf8,0x3bd14635,0x3b3168dd,0x3b96f865,0x3b7ed959,0x3af0a622,0xbbdf0e1e,0xbbd63f0f,0x3a27fbc0,0xbbdd7833,0xbc135539,0xbc28092f,0xbc801b9c,0xbc75062f,0xbc025e66,0x3a4ef1aa,0xbd5d4474,0xbd80bf4b,0xbd20d9be,0xbca998de,0xbc264419,0xbc918b3e, -0xbca84e79,0xbc5580b1,0xbc522b39,0xbc2ba1ef,0xbb87a6f3,0x3b3999c9,0x3b8f7514,0x3b17fed7,0x3acee533,0x3b07f314,0x3bc58a7c,0x3a892c53,0x3aa5618d,0x3bd32a9d,0x3bef6fdd,0x3b8f9ee3,0xbb1091d4,0xbb930eee,0xbbd530ec,0xbbd719be,0xbb44804a,0xbaeaaf0b,0xbbe40264,0xbae57582,0xbb23d451, -0xbbe30bb0,0xbc4e9079,0xbc92b002,0xbcbde8d1,0xbd2b51ee,0xbb023d4d,0x3c80a99b,0x3cddad57,0x3ccb9308,0x3cdb9457,0x3ccc405c,0x3cc18b8e,0x3cda4bd2,0x3cc0354a,0x3ca605b3,0x3c5b3f88,0x3c37a86c,0x3bfdb8ed,0x3baedee5,0x3bd7df86,0x3ba7002c,0x3b799943,0xb9e870b6,0xbb022430,0xbb021286, -0xbb15d974,0xbb1214e5,0xbb518fb4,0xbb4cfc1f,0xbb9c475d,0xbbb2812c,0xbbd7e0c8,0xbc0d0099,0xbc510787,0xbc1788c8,0xbc30d896,0xbc85ea5f,0xbcaed3eb,0xbcd10aeb,0xbcd71647,0xbc6ea3ad,0x3c3d0cb1,0x3cb39474,0x3ccae303,0x3cdf230b,0x3d030dcc,0x3cef7008,0x3cde71f4,0x3ccdf33a,0x3cbc9955, -0x3ca51054,0x3c9b6923,0x3c881b50,0x3c8370ff,0x3c614691,0x3c2179ec,0x3bc0bdd3,0x3b075806,0xbb1077ff,0xbbfe1f8b,0xbc3f73b2,0xbc6f848a,0xbc954772,0xbcb02335,0xbcb8de72,0xbcc01f1f,0xbcc89027,0xbcd6c7db,0xbce30476,0xbcf11ba3,0xbcf85b1d,0xbd01855a,0xbd0999dd,0xbcbaf76e,0xbc4dfb6e, -0xbb85b117,0x3bac4202,0x3baab50b,0x3be2dd3e,0x3c53b8a4,0x3c0dea3b,0x3c35be4e,0x3c44282d,0x3c3f7151,0x3c5adf2b,0x3c205549,0x3c0afe9e,0x3be5562b,0x3b83fdc1,0x3ae3ba0a,0xb9437924,0x3a3fc426,0x3a64a6f0,0x3824ae72,0x399c9c1a,0x3b062a26,0x3a97303f,0xb9de8d27,0xbb0714af,0xbb76f25a, -0xbbb880ac,0xbbfe9c05,0xbc26f4e6,0xbc0d6dd0,0xbbf39d57,0xbbc960ce,0xbba12081,0xbb5505d1,0xbb331b71,0xba6be412,0xb8d99cb8,0x3ac87a6a,0x3b4d0008,0x3a932a2b,0x3a459be7,0x3b909e0d,0x3bdf528b,0x3c340d34,0x3b635cae,0x3bea1061,0x3c441942,0x3c33b381,0x3c26c8a1,0x3c16e75e,0x3c102aec, -0x3c063629,0x3bea9b2b,0x3b7c8445,0x3a958657,0x3bec69ad,0x3b6e07f8,0x3af20ecb,0xba533aac,0xbab1ffac,0xbb0b9176,0xbb3ccbf7,0xbb744384,0xbb8fd88b,0xbbb584eb,0xbb970053,0xbb8a4c9d,0xbb77c315,0xbb63db6d,0xbb520fae,0xbb3cdd6c,0xbb04f3fd,0xba9743ec,0xb9bfb5f6,0x399b9123,0xbab5908d, -0x3bb28a6c,0x3ba7d83a,0x3ba09639,0x3baf733e,0x3bb9ee84,0x3bef9aca,0x3b990835,0x3b99a00b,0x3bb1fc08,0x3baafe72,0x3bac9fc1,0x3bbcc7b1,0x3bb0baea,0x3baac04e,0x3b9e80ec,0x3b9d3087,0x3b9fa860,0x3bb0b89a,0x3bbefc3f,0x3bc4e5e2,0x3bcdc855,0x3bbaa31f,0x3bafe4d9,0x3ba5af4a,0x3ba17edd, -0x3b909b34,0x3b575714,0x3b57de10,0x3b596ba1,0x3b512ef9,0x3b95ff17,0x3ba2f89f,0x3b8f2a71,0x3babd343,0x3bb0cf32,0x3b9e6b7b,0x3baa68fd,0x3bc25030,0x3bcf7732,0x3c063559,0x3c0da588,0x3c364ed5,0x3baa2102,0x3b6c2f0b,0x3bb1816c,0x3bb5e92c,0x3bd450c4,0x3be1c4a5,0x3bd13c0e,0x3bb9e092, -0x3b93aed6,0x3ba2f947,0x3baf3f08,0x3bd2b146,0x3c02685a,0x3c150149,0x3c1e7ee9,0x3c00622d,0x3be0b1a6,0x3bbe4c0f,0x3baef5a0,0x3b6fb259,0x39cd54bd,0xb9441b5b,0xb7b41d7c,0x38bced51,0x3b91702b,0x3bba7666,0x3b72f6a5,0x3bbb1018,0x3bb06d56,0x3b83ffd3,0x3ba367ed,0x3be47c22,0x3bca61ee, -0x3c0c713d,0x3c1076f4,0x3c7c83e6,0x3b89c785,0x3b3a8f52,0x3be241d5,0x3bbf4e22,0x3bd2ec6f,0x3c08eb07,0x3bcfb008,0x3bae08d4,0x3b5bf05c,0x3ba359f8,0x3bc3da4e,0x3be664ba,0x3c2bb23c,0x3c43e78c,0x3c5d19c1,0x3c1faf12,0x3c0259da,0x3bc49ffa,0x3bb10333,0x3af6efcb,0xbb800d19,0xbb9713e0, -0xbb87f9a3,0xbb605605,0x3b5ed632,0x3bc6ae99,0x3b24a73a,0x3bc8bae1,0x3bf1773e,0x3bb1f5e1,0x3bfa853d,0x3c1182f5,0x3c2a13d0,0x3c74c2c6,0x3c9c507a,0x3cd66ef1,0x3bc1b1c7,0xbae2b1fa,0x3bdc5ff9,0x3bb4253d,0x3c01caf1,0x3c668514,0x3bb4d9bb,0x3b07588c,0x3b7d8ef5,0x3bf95868,0x3c08773f, -0x3c1dbb47,0x3c7c814e,0x3c946d95,0x3ca43044,0x3c657065,0x3c2c68b6,0x3bf63017,0x3bb42d79,0xb97fe4da,0xbc2f557c,0xbc62e462,0xbc3e5042,0xbc18f729,0x3b531da0,0x3bcebf0e,0x3a78f567,0x3bcc0b52,0x3b76f4a0,0x39c23cf4,0x3b8ce2a7,0x3beda346,0xb7e25e0a,0xbc045516,0xbc6c37e6,0xbc80dc3b, -0x3b97ff87,0x3c893879,0x3c993174,0x3c3cb97c,0x3b14fb0a,0xbb4d9614,0x3b236148,0x3ba5e4e6,0x3baa00be,0x3c346571,0x3c372085,0x3c342be5,0x3c2af207,0x3c33339a,0x3c458aa2,0x3b8655f2,0x3b3e7570,0x3b8b8532,0x3aea41e6,0x3b057f7f,0x3b0611ba,0x3c65b2d4,0x3c421351,0xbc27c791,0x3bcab39f, -0x3c06fc0d,0x3a6ad2c6,0x3b9e2d9b,0x3c9034a3,0x3d26269c,0x3caf2592,0xbc10c4b3,0x3cab6d79,0x3c172092,0x3ab6bbf8,0x3be4f8aa,0xbb736827,0xbbd8d851,0xbb63b559,0x3adb91c9,0x3ba7ca7f,0x3b9e5196,0x3ad6c0c6,0x3ae6c66d,0x3b927e10,0x3b6efd16,0x3be26c9d,0x3c1d9718,0x3c17e0ac,0x3c17dcc2, -0x3c074198,0x3be888e4,0x3bc3d011,0x3a2648db,0x3b0018dc,0x3b2fc919,0x3b87163a,0x3bfa960a,0x3c196fe8,0x3bc138d2,0x3ba3d735,0x3bc525fc,0x3c29fcca,0xbbbbcb3c,0xbc835126,0xbca574f7,0xbca00429,0xbbf96954,0xbb6b1bb1,0xbb6178b0,0xbb9db20a,0xbbeda7bc,0xbc304e58,0xbc3adfe7,0x390afe30, -0xbb878f8e,0xbb812d6b,0xb9e90c99,0x3b209a18,0x3b90d62f,0x3ac4855d,0x3b8d310c,0x3c05463f,0x3bd339a3,0x3b5946bd,0x3ba570d8,0x3bf0f745,0x3c2f0ed6,0x3c3a2d6e,0x3b9fc31a,0x3bb51113,0x3b3de89a,0x3a0f1934,0xbb83e275,0xbb8199b1,0x3b8a23c2,0x3bfb9133,0x3c3f534e,0x3c73e0a1,0x3be95e90, -0x3b8ed7ad,0xbb2a3e2e,0xbb8b78b3,0x3b2e4d80,0xbae8edfb,0xbbf0d814,0xbc5f5d60,0xbc53bd25,0xbc2d4a76,0xbb853be0,0x3bace82d,0x3a4bea65,0x3b75286f,0x3b84cb69,0x3a728e39,0x3aabd442,0x3ba21677,0x3bb9e5d6,0x3beb3f30,0x3c007b84,0x3c1d268d,0x3c0a5f18,0x3b9dc2a9,0x3c0e7a89,0x3c112aef, -0x3bb3058e,0x3c031315,0x3bfdbcdc,0x3b228d25,0x39aab6d1,0xb926757c,0xb9bdc02e,0xbbf44e37,0xbc2b2c35,0xbc4c00f9,0xbc0af3ec,0xbb9757da,0xbb5d42bd,0x3b1774e8,0xbcf0d554,0xbd3af82b,0xbd1f8530,0xbcddc4c1,0xbc8f90bd,0xbcbe323e,0xbcba67e5,0xbc56ae1b,0xbc601fd9,0xbc388565,0xbbc3d4d5, -0x3a24b5e9,0x3b72247a,0x3b8a480c,0x3b46412b,0x3b463106,0x3bc2630c,0x3b6171f1,0x3b851a00,0x3bbbf126,0x3bf6f24c,0x3bc66988,0x3b249784,0xba72b087,0xbb4e3be1,0xbbad237d,0xba9756aa,0xba487f1d,0xbbd28473,0x3ac0553f,0xbae4c182,0xbc4cc874,0xbc94c61a,0xbcb0a307,0xbcc0fd13,0xbcd06307, -0xbcb0064e,0xbbf4f952,0x3baf1689,0x3bfa6bf1,0x3c2dd5e8,0x3c71c9e8,0x3c811e84,0x3c8dc78b,0x3c63df16,0x3c44c160,0x3c116d31,0x3c1b077f,0x3bee373c,0x3bd0401c,0x3bd87b5c,0x3bc3814d,0x3bce1578,0x3a82ae18,0xbaaf77b0,0xba731726,0x3aac9737,0x3b062b3b,0x3b033688,0xbb3d87af,0xbba24c86, -0xbbfaf371,0xbbe85c9a,0xbc079f4c,0xbc3aebaf,0xbc03d1a7,0xbb9da39e,0xba1a6319,0xbc0222d5,0xbc7484a1,0xbcab81a2,0xbcc3ee33,0x3b4ebcb5,0x3c5a1788,0x3c947928,0x3ca45dda,0x3cd538fa,0x3cc3a0b6,0x3cb22712,0x3ca8dc71,0x3ca107bc,0x3c921ee0,0x3c8f1e21,0x3c742151,0x3c6be7c3,0x3c419f1a, -0x3c0b3129,0x3b8e93cc,0x3a7e58e2,0xbaec978a,0xbbb67c5e,0xbbdb9f9b,0xbc1f65ec,0xbc65b246,0xbc8df6f0,0xbc9a0807,0xbca40cf3,0xbcb27e84,0xbcaf9146,0xbcaf80ed,0xbcad5d58,0xbcc9b585,0xbcee7ce1,0xbd0bdc0c,0xbce24401,0xbca980c7,0xbc7158db,0xbb84edaa,0xba78978a,0x3a7a8a16,0x3bb7a998, -0x3b196cad,0x3b8fb8e6,0x3b9a1da4,0x3ba4e1d3,0x3bd8100b,0x3b8ea099,0x3b6f15ae,0x3b3dced3,0x3a87b472,0xb95d537c,0xbaa7c08e,0xba360394,0xba3fe53b,0xbaad1cad,0xbab8df21,0x38ae3b4d,0xbb3b129f,0xbb9cc5d2,0xbbc3bb14,0xbbfa330a,0xbc1a5772,0xbc3c12f4,0xbc623107,0xbc5a1002,0xbc582319, -0xbc4e5276,0xbc428dec,0xbc2579bd,0xbc1e13bb,0xbbe2ea25,0xbbb62500,0xbb88ad88,0xbb2d73e5,0xbb964197,0xbb940c37,0xbb2c88d7,0xba79f2ec,0x3ad9e1f7,0xbb376261,0xba0c737f,0x3b25c8eb,0x3af60b5c,0x3ab9199b,0x3a4b008f,0x3a2624c0,0x396e1060,0xb9b61077,0xbb14ebb0,0xbb8ab56f,0xb9b4faf8, -0xbb44aea7,0xbb8aff44,0xbbdbd544,0xbbe2b66d,0xbbfc9f7d,0xbc0a1176,0xbc168467,0xbc204e7d,0xbc2fdab2,0xbc2448ee,0xbc1f7509,0xbc1c3520,0xbc18880b,0xbc178d27,0xbc1726e3,0xbc08e744,0xbbf333fb,0xbbcdd2fa,0xbbb5b788,0xbc04b62a,0x3ba75194,0x3ba66673,0x3b977f39,0x3ba5e6f9,0x3baca2a6, -0x3bd39b2e,0x3b8e03b2,0x3b91bf59,0x3ba341df,0x3ba9f717,0x3bac4f73,0x3baf5c15,0x3baebc11,0x3ba9792e,0x3b96ccbd,0x3b927139,0x3b945061,0x3bad4857,0x3bb29a95,0x3bb596ef,0x3bb8945c,0x3bac9897,0x3ba34b26,0x3b99700d,0x3b985e7e,0x3b8b109f,0x3b5dde29,0x3b5bc482,0x3b5ad133,0x3b4dae8c, -0x3b88f140,0x3b933996,0x3b8812c7,0x3b9d996d,0x3ba34882,0x3b98108d,0x3ba71a7d,0x3bc4cf6e,0x3bb9222d,0x3bf7be7c,0x3bf4b54c,0x3c1292d9,0x3b9671b9,0x3b61697a,0x3b92ab4c,0x3bb49a33,0x3bd75a79,0x3bce4bea,0x3bd992fa,0x3bbf0f16,0x3b878b9e,0x3b92226d,0x3b9cd455,0x3bd2ef4a,0x3bea9f97, -0x3c0ad26d,0x3c0d40df,0x3be6fc20,0x3bcb6239,0x3ba623b5,0x3b9fc804,0x3b72a09c,0x3aa60c78,0x3a53f09d,0x3a539182,0x3a40ce39,0x3b82065e,0x3ba00047,0x3b79e5ab,0x3ba40e6c,0x3ba03a0e,0x3b8d36a1,0x3bb0ef22,0x3bf6a5e4,0x3bbd06a2,0x3c00bed1,0x3bee3947,0x3c4293c1,0x3b6b5312,0x3b31738f, -0x3bac6fa6,0x3bce44d8,0x3be98188,0x3bed92ad,0x3be4f555,0x3bc63ec0,0x3b2fc65e,0x3b8aef6c,0x3ba2d912,0x3befd922,0x3c146824,0x3c2e61a7,0x3c4627d4,0x3c0c5459,0x3bed5d4b,0x3ba5d4c6,0x3ba62d1a,0x3b1413de,0xbb1628ab,0xbb28947d,0xbb0ade4c,0xbb0b304f,0x3b30b7f7,0x3b997cf7,0x3b30dd3b, -0x3bb36130,0x3bd6e231,0x3bb849d1,0x3c097287,0x3c09b06c,0x3c03086a,0x3c51020d,0x3c82c670,0x3ca6cd5c,0x3ba98b84,0xba9efc74,0x3b9b975c,0x3bc20ffa,0x3c10ccc8,0x3c4eddc1,0x3bd84086,0x3b4f9e69,0x3b2694cf,0x3bdbb13b,0x3bea2f46,0x3c1d4a5b,0x3c5f3a1f,0x3c8b8332,0x3c9a88c7,0x3c4cd0f3, -0x3c14e7bf,0x3badec71,0x3b8caacf,0x395566cc,0xbc032542,0xbc25caab,0xbc0998d7,0xbbd61c5d,0x3b42de21,0x3b99b690,0x3b0600af,0x3ba0f382,0x3b52120a,0x3affd229,0x3bc19317,0x3c452b81,0x3b8aaa82,0xbb5c1204,0xbc3da94b,0xbc8c1af7,0x3ad4f60f,0x3c5d1af1,0x3c935574,0x3c6b639e,0x3b98b880, -0xbb49f5bf,0x3af6a657,0x3b92ad67,0x3bcfe786,0x3c379fa9,0x3c281abc,0x3c1955d8,0x3be92810,0x3be6f670,0x3be50f3c,0x3b2fefdf,0x3b70eeb7,0x3bb692d0,0x3b831f92,0x3b98492c,0x3b981e63,0x3c9c0664,0x3c863906,0xbbed36be,0x3b100062,0x3b610421,0x3b3c515e,0x3bae45b8,0x3c82c6f4,0x3d177e24, -0x3cb3ad3a,0xbc7b96c8,0x37becb49,0x3c4f0907,0x3c304cba,0x3bb8b994,0x3aa59c22,0xbb6cf596,0xbba2e1ef,0x3a9097cf,0x3bafc579,0x3bdd895a,0x3b444461,0x3b115b10,0x3b9972e4,0x3b88d410,0x3bfb5513,0x3c2103cb,0x3c226983,0x3c235dd7,0x3bd61c2b,0x3c1166d6,0x3c03533b,0x3aa6a4a5,0x3ad5f761, -0x3b0c8cc9,0x3b70a633,0x3c2c495c,0x3c2268ae,0xbb33561d,0x3b96630e,0x3b621960,0xbb93d833,0xbbeaeeab,0xbc56c0fe,0xbc9ea207,0xbc957a79,0xbbccb678,0xbb6da341,0xbb4b5d47,0xbb839606,0xbabe8bf9,0xbbf92395,0xbc2fc441,0x3b0e2a0f,0xbb0a36a2,0xbb379314,0x39d2753f,0x3b206dd0,0x3b785dd2, -0x3b0cefbd,0x3b73d5e4,0x3bf2dcb3,0x3b970ba6,0x3b30e0e9,0x3b60366a,0x3b850635,0x3c36e067,0x3c43660c,0x3b98bd68,0x3bf5ecad,0x3ba04834,0xba8f869b,0x38a65259,0x3b27ea8d,0x3ba39ef8,0x3c3f0c92,0x3c81c792,0x3c81d1ca,0x3bf0a6af,0x3af2621b,0xbb8479b5,0xbb9d983d,0x3a569b7a,0xbbfc6e7f, -0xbb3d953c,0xbb88d019,0xbbf169e7,0xbc00e62c,0xbb834e1d,0x3bc91478,0x3aea347f,0x3b87d9d6,0x3b8dbffd,0x3ad7d097,0x3afa497d,0x3ba8f932,0x3bc151fc,0x3c066dbe,0x3c103d99,0x3c21b9f5,0x3c1a20de,0x3bad1fd0,0x3c0ac768,0x3c180b7e,0x3bf67497,0x3c1440d8,0x3bfbb14f,0xb8830010,0x3b47931e, -0x3a8189db,0xbbdb2945,0xbc1a8639,0xbc3033f8,0xbc5417ee,0xbaecd998,0x3b445d1c,0xb9745924,0x3b79b757,0xbc3fe692,0xbcb71745,0xbcf01e3e,0xbcdce957,0xbcb552ac,0xbcb5cb83,0xbc9d34d9,0xbc49b2b2,0xbc49d70f,0xbc2a3d4d,0xbbe84e97,0xbaff4441,0x3afadf26,0x3bad8156,0x3b7d75db,0x3b85de1c, -0x3bcc8e5a,0x3bae5925,0x3bbe08e6,0x3b7a4ceb,0x3c020f0c,0x3c0525da,0x3b98b6d0,0x39236b5e,0xbaca1aa3,0xbaba02e7,0xbaab4c26,0xba87cc8d,0xbb26fd65,0x3b697537,0xba10efb6,0xbc64dac9,0xbc951cc0,0xbca3be21,0xbca69fe0,0xbc5edae1,0xbcf1075e,0xbcbbbe8c,0xbc5b6aff,0xbbeb2167,0xbaeec40b, -0x3bd9cef9,0x3c076bae,0x3bc2c53b,0x3b7ed457,0x3b61e681,0x3b63b8b9,0x3c034736,0x3c087669,0x3bf51d0f,0x3bbf66f2,0x3ba0264a,0x3bb29a86,0x3a4c9adf,0xba36e601,0x3a2bfcb5,0x3b99082f,0x3bb3baab,0x3b95596b,0x39894ffd,0xbb1136ba,0xbbadb55c,0xbbbe61de,0xbbe810b3,0xbc05b666,0xbc331a4e, -0xbbbd07e3,0x3be077e9,0x3b089068,0xbb8a4d76,0xbc5915de,0xbcc6e43a,0xbba926b8,0x3afdf46f,0x3bfee166,0x3c1c5aee,0x3c79fce2,0x3c6b3fa4,0x3c5bff0a,0x3c65b8b8,0x3c73b252,0x3c6c1c5d,0x3c81bfe6,0x3c458d2b,0x3c36f9d5,0x3c071849,0x3bd15c66,0x3b5ebe26,0x3abeeb4a,0xb90a34f3,0xbafdda61, -0xbb2ecea2,0xbbba2c00,0xbc14d9c9,0xbc42a474,0xbc5d9dc8,0xbc74e9f6,0xbc8b4734,0xbc81f8da,0xbc7d025e,0xbc6798c5,0xbc8c097b,0xbcaf5cc3,0xbcd89d51,0xbccbad09,0xbcb3e16a,0xbc9e0d28,0xbc31b994,0xbb77c03b,0xbade62f4,0x3aa7656f,0xba23c849,0x3a848e80,0x3a97b116,0x3aeed781,0x3b3e2aea, -0x3ad3955e,0x3a81fad7,0x3a5759dd,0xb99ab590,0xba4407ba,0xbaa08cf0,0xbae2dd84,0xbb3b6e02,0xbb87b3cf,0xbbac7667,0xbba8ac7a,0xbc130f40,0xbc2b7a24,0xbc39d2ce,0xbc4f5322,0xbc6813e7,0xbc812ef8,0xbc906b29,0xbc8c7457,0xbc8b8845,0xbc897797,0xbc849edc,0xbc6f913a,0xbc63f6f6,0xbc2ceead, -0xbc0b5dad,0xbbe3bcce,0xbbafbd22,0xbbf2f6d5,0xbbe28e27,0xbbca0189,0xbba6d925,0xbb7b7f81,0xbbbaec5a,0xbb921edf,0xbb3b0608,0xbb591f91,0xbb649b56,0xbb82bbc1,0xbb7e1b17,0xbb86f0eb,0xbb8c2f0a,0xbbbdd975,0xbbead735,0xbbac5210,0xbbebac20,0xbc05fde8,0xbc23532c,0xbc24ab55,0xbc3181b5, -0xbc3bc5e7,0xbc45a084,0xbc4ddd80,0xbc5b10a3,0xbc52bab4,0xbc4edc6e,0xbc4ab140,0xbc46b506,0xbc44f7cf,0xbc45a23c,0xbc38c87c,0xbc2aee33,0xbc1741f1,0xbc09da4a,0xbc38065e,0x3b9b09fa,0x3b9e1fdd,0x3b8b31ae,0x3b931dc4,0x3b961a1e,0x3bb08142,0x3b80b156,0x3b84efea,0x3b8cf95c,0x3b9e6392, -0x3ba2eb5b,0x3b9ec8c3,0x3ba61e5e,0x3ba146be,0x3b87ffd4,0x3b83b3bb,0x3b85a2da,0x3ba3e52d,0x3b9ef8b8,0x3b9ef723,0x3b9cf7cb,0x3b996973,0x3b936973,0x3b8c10e0,0x3b8ed8f9,0x3b86fb09,0x3b6a058b,0x3b656870,0x3b63ccb2,0x3b634f91,0x3b7c8d65,0x3b849025,0x3b828c6a,0x3b8f9a7b,0x3b939194, -0x3b876056,0x3b9d29c1,0x3bb769ae,0x3ba5dd93,0x3bda6232,0x3bcbcc8e,0x3bde3b6d,0x3b7ef102,0x3b4de590,0x3b601cd9,0x3ba8d00c,0x3bcd7d63,0x3bba9da2,0x3bde6c4d,0x3bc25ff6,0x3b729439,0x3b8010e3,0x3b89cf69,0x3bcc33c1,0x3bcc86f6,0x3bf034c2,0x3be079d7,0x3bc04680,0x3baecd15,0x3b9304f2, -0x3b9d430b,0x3b89727a,0x3b239fb3,0x3b0edb8c,0x3b0b9317,0x3b2617b1,0x3b80f179,0x3b89d009,0x3b7a2126,0x3b88d498,0x3b8773a1,0x3b675678,0x3ba62808,0x3bf9e6ef,0x3ba2cedf,0x3bd26c53,0x3bb60534,0x3c093bc5,0x3b457382,0x3b26c478,0x3b6db6e4,0x3bc6f266,0x3bed6ac1,0x3bce09d8,0x3bfd1bd2, -0x3bdf057f,0x3b0b95c5,0x3b6bb67b,0x3b865f27,0x3bf33dc4,0x3bf6d6a1,0x3c0f0ed0,0x3c15a96a,0x3bdbffaa,0x3bc89249,0x3b8b3704,0x3ba4e393,0x3b576ed7,0x3997e50e,0x3970802d,0x3a07ed5e,0x3aace2b3,0x3b2d54ed,0x3b736dda,0x3b522c2a,0x3b96c370,0x3bafbe8c,0x3b83fe73,0x3c013f16,0x3bfaf5aa, -0x3bd714bd,0x3c2fdc6a,0x3c527036,0x3c713544,0x3b7e2b86,0xba450967,0x3b2780ba,0x3bb8bc08,0x3c13cb46,0x3c318a62,0x3c006f2e,0x3b8c7871,0x3a4aa754,0x3bb29e71,0x3bc22ef5,0x3c1dacb6,0x3c3d970e,0x3c6d8d93,0x3c6ffe7d,0x3c1e0a4b,0x3beadeab,0x3b7563e6,0x3b94f213,0x3b2cf553,0xbb5ffba4, -0xbb8d4c84,0xbb486ec6,0x398f6d6a,0x3b94a70f,0x3b756231,0x3b302647,0x3b376395,0x3ae8f3fb,0x386b9cf4,0x3bb87570,0x3c6a87da,0x3bbed256,0xbb0407e0,0xbc272f46,0xbc765e9e,0xb9349241,0x3c2075e8,0x3c7b961e,0x3c88dd8b,0x3bfce04a,0xbb1db9c3,0x3a90b846,0x3b75b330,0x3c044e1b,0x3c3398ae, -0x3c1985a8,0x3c05c159,0x3ba432ab,0x3b828800,0x3b36a3c8,0x3b11bced,0x3b9cc68f,0x3be59f5b,0x3bc49573,0x3bc1098e,0x3bafc0d9,0x3c98074e,0x3c7c3fff,0xbbb68c08,0xbb425089,0xba85a2e9,0x3bc94207,0x3bee89af,0x3c7029bf,0x3cfa7ec8,0x3cad2b16,0xbc79d72f,0xbc8b41e3,0x3c8470d1,0x3ca0058d, -0x3adec7a2,0x3b94e65d,0x399ef79a,0xbbb1ef9f,0x3a189cb0,0x3bae5cab,0x3c0fcc77,0x3b7c5b2e,0x3b14c079,0x3b9eac2b,0x3bb5d088,0x3c165384,0x3c137911,0x3c10374a,0x3c0c0ea2,0x3b9301d9,0x3c1dbdd1,0x3c0bbe9b,0x3aa93eb2,0x3b05b776,0x3b8579ed,0x3bed026b,0x3c1af6f5,0x3bf34ca3,0xbbadea6e, -0x3bde5e13,0x3aedae96,0xbca946bb,0xbc4e2617,0xbc45ed83,0xbc88ab2b,0xbc65d2d2,0xbbb3d2e8,0xbb8958f0,0xbb723d94,0xbb486017,0x3b67dc95,0xbb0af829,0xbc003682,0x3b516fde,0xb8a413f8,0xbae76d77,0x3a9cf6d6,0x3b0a2fe5,0x3b5c97cb,0x3b4d8276,0x3b28c0dd,0x3bb37bcc,0x3b19f3b1,0x3a8add91, -0x3af88996,0x3b0521f0,0x3c1aa372,0x3c25435b,0x3b7b2596,0x3bc41a5d,0x3b4cebb2,0xba940cda,0x3b030b63,0x3bc07075,0x3b9ec213,0x3c3e1216,0x3c7c0a35,0x3c6c5c8e,0x3bd7ccf6,0x39a68429,0xba05751f,0xbb87e7d3,0x3a02fe77,0xbbc6383e,0x39a6656f,0x3aef1b05,0xbb7fc163,0xbb850877,0xbb2b5785, -0x3b863193,0x3aad2488,0x3b5ace46,0x3b7b7bf8,0x3aca7488,0x3b035b24,0x3b989434,0x3bb8334f,0x3c06b1d7,0x3bfa494e,0x3c037f13,0x3c091967,0x3b959293,0x3be32368,0x3c04b5b7,0x3bfb2756,0x3bd528e5,0x3baa3e57,0x3ae8dd21,0x3b3a39ac,0xbac2b267,0xbc397644,0xbc20d149,0xbc1a5bc5,0xbc170a43, -0x3ade0043,0x3bc661a8,0x3b89c496,0x3b4976be,0xbb951be1,0xbc093d60,0xbc9ff912,0xbcc5aa51,0xbccd038a,0xbca01772,0xbc778f95,0xbc38cc44,0xbc21f11c,0xbc0bdc19,0xbbe860ad,0xbb79a16a,0x3937ee5e,0x3bc1560c,0x3b7e81e4,0x3b8992aa,0x3bae7223,0x3bc88ebf,0x3bcbb744,0x3af8731f,0x3bd951eb, -0x3c026dac,0x3bc479ea,0x3b85be9e,0x3b184e07,0x3aae6b75,0x3ab400bc,0xb8836a69,0xbb4a1d7f,0xb91979fd,0xbb100386,0xbc23c3e7,0xbc65135a,0xbc76bfd8,0xbc61339d,0xbbeed9f6,0xbcec666a,0xbceb4658,0xbcc904f1,0xbc8aa1a8,0xbc1072a0,0x38dac5b6,0x3aa04368,0xbb6c5d7d,0xbb833ec3,0xbb460865, -0xba55a7a3,0x3bb83a63,0x3bf9c365,0x3bdb0fb0,0x3b8e8eed,0x3b549527,0x3b538ec0,0x3abbd7a1,0x3ab96036,0x3b1a081b,0x3be05634,0x3bed1b5b,0x3b8b0e52,0x3b35f9d6,0xb8a017e1,0xbaee92ff,0xbb89e394,0xbbb54837,0xbb8cfaf3,0xbc231fe7,0xbc048c0b,0x3a073a94,0x3b652a16,0x399a3b31,0xbc26d8e2, -0xbcae29b1,0xbc25e313,0xbbe7fa4b,0xbaf82a79,0xb937c825,0x3b8c00c1,0x3b899c43,0x3b96b7a5,0x3bccfe9e,0x3c112322,0x3c1f8df4,0x3c4fd777,0x3c0d03b1,0x3c00aadf,0x3bb34eed,0x3b8f8914,0x3b192c6d,0x3a8a62d5,0xb9109d37,0xba9aa579,0xbb2ead67,0xbb8f4f58,0xbbb7bcb2,0xbbd652ac,0xbc02bec2, -0xbc1b37cd,0xbc39a8e3,0xbc2ec4f9,0xbc2d3f7c,0xbc1f75e3,0xbc2f641e,0xbc44d969,0xbc6e885b,0xbc858958,0xbc89dffd,0xbc887dc3,0xbc4fcab1,0xbba8d550,0xbb544687,0xba619911,0xbae7ff11,0xb970567f,0x394cffeb,0x3a7c6726,0x3aeacfad,0x3a3a57f1,0xb91c442a,0xb98f9685,0xba8bb4cc,0xbaa73e1f, -0xbad19ef8,0xbb3e8cd1,0xbb8dfc22,0xbbc3b2fe,0xbbf318f3,0xbc13663d,0xbc2ee255,0xbc4103a0,0xbc56a397,0xbc6bf52a,0xbc820fc9,0xbc8bfc8b,0xbc99111f,0xbc910d39,0xbc8d9a9b,0xbc8c81ec,0xbc88d9d1,0xbc83a944,0xbc7bbdc1,0xbc4c2737,0xbc26146d,0xbc0a2d0f,0xbbdeda43,0xbc0fa303,0xbc05a6d1, -0xbc00b8a7,0xbbe99867,0xbbd2bd2f,0xbbea43ac,0xbbd168ef,0xbbaf918d,0xbbbdbe06,0xbbbffe8f,0xbbd02b0e,0xbbcc359f,0xbbd47ac8,0xbbd6274a,0xbbfd86ca,0xbc0a3364,0xbc050cb5,0xbc15f625,0xbc1fd917,0xbc266e36,0xbc2f1647,0xbc392a0c,0xbc424bd7,0xbc4a8a8a,0xbc52a3ac,0xbc5f2e11,0xbc5a190a, -0xbc57edc5,0xbc5303d6,0xbc4fa410,0xbc4c9681,0xbc4f0978,0xbc42d663,0xbc387d09,0xbc298cee,0xbc1d81e5,0xbc4d2ad6,0x3b8b94aa,0x3b906b2e,0x3b6efc40,0x3b832c5a,0x3b86d7bf,0x3b963e8a,0x3b6876fb,0x3b7ad7c3,0x3b804351,0x3b965609,0x3b9d42b5,0x3b964435,0x3ba5709a,0x3ba14d31,0x3b81b01d, -0x3b7a6f88,0x3b73fa8b,0x3b9eb72e,0x3b912da4,0x3b8b8116,0x3b7a8d71,0x3b81f5ce,0x3b7eed10,0x3b7d40cc,0x3b82d4e7,0x3b8097af,0x3b6fabb4,0x3b68a5f3,0x3b66bd5a,0x3b75816c,0x3b659519,0x3b696858,0x3b74a24f,0x3b7ad5d2,0x3b7c5f2c,0x3b63bf64,0x3b8cc5d8,0x3b955248,0x3b7b3382,0x3bb75eb8, -0x3b9da2b5,0x3ba650d5,0x3b5e50ca,0x3b3eda16,0x3b2ff6b0,0x3b96a42d,0x3bbaa72f,0x3bab79bb,0x3be0772b,0x3bc4c307,0x3b617ae9,0x3b67be15,0x3b761f61,0x3bc1fdb1,0x3baf996b,0x3bc988e1,0x3ba0bef0,0x3b90c5ef,0x3b8cbad2,0x3b8826db,0x3b9790e7,0x3b910f9a,0x3b61f8f8,0x3b5585ba,0x3b55f004, -0x3b8b5ca9,0x3b810ba1,0x3b6e03db,0x3b759a33,0x3b56785f,0x3b4df1a5,0x3b21e8ce,0x3b8a0d1d,0x3be6c225,0x3b81ec6d,0x3b9e342e,0x3b75dea3,0x3bae7489,0x3b17bebc,0x3b1ab910,0x3b2fed43,0x3bb58c3e,0x3be22c11,0x3bbc04e1,0x3c09a90d,0x3bfc4a8f,0x3b08e908,0x3b57ce1b,0x3b6702ab,0x3bf1a27a, -0x3bc88cf4,0x3bd9d486,0x3bbbbfed,0x3b9109a5,0x3b960f01,0x3b8157d3,0x3ba2ea81,0x3b8eaca9,0x3b33eb74,0x3b30e28f,0x3b2db83b,0x3b950eca,0x3b2cc7a5,0x3b3c28f1,0x3b7369ad,0x3b63ac85,0x3b66caa5,0x3b084073,0x3bdaef37,0x3ba7d476,0x3b88aab4,0x3bf811e2,0x3c13b00c,0x3c20bc07,0x3b338ed7, -0xb981c2f5,0x3a49c3b7,0x3b9d1de6,0x3c08553e,0x3c117b34,0x3c147080,0x3bb5b4ab,0xba1b0f82,0x3b8870ba,0x3ba6f018,0x3c22f897,0x3c1ae7e7,0x3c3533d8,0x3c12f560,0x3bb7cba7,0x3b99cee7,0x3b6b9ee7,0x3ba7bcae,0x3b997c08,0x3a5ca80c,0x3a59107b,0x3afa2ea7,0x3bde6a80,0x3bc0ebb6,0x3b50731f, -0x3b5c5965,0x3a5342c1,0xb9c66952,0xbb147826,0x3b7e7e49,0x3c827001,0x3bca33ea,0xbb552a90,0xbc3c604b,0xbc6b2a5a,0xbb006019,0x3bd8d6ce,0x3c41b751,0x3c91cfc0,0x3c2eb0ca,0xba5a8979,0x39d12582,0x3b4b83d3,0x3c21f985,0x3c25d835,0x3c06cd6c,0x3bf0bf6e,0x3b55810d,0x3adc4835,0x3a18e991, -0x3b2b6c8b,0x3bb46f93,0x3bf31262,0x3bcbe819,0x3bc9ec33,0x3bd968c0,0x3c6e188f,0x3c188900,0xbbf99c91,0xbbf0918f,0xbb78aec8,0x3c07f29a,0x3c06c257,0x3c50de95,0x3cc00aee,0x3ca0645e,0xbc74e23f,0xbce1a12f,0x3c9a6e25,0x3cd489e6,0x3865d1bb,0x3bd8412b,0x3b2b68f3,0xbb9afe8b,0x3a29a6b3, -0x3baafec0,0x3c26ddd1,0x3ba0e483,0x3b39727f,0x3b9fc7df,0x3be63a82,0x3c2e9a94,0x3bf6d095,0x3bf0fe77,0x3be2bece,0x3b77ccd6,0x3c1c6f24,0x3c0dcb7b,0x3b5d8f6f,0x3ba0e0bc,0x3bd67307,0x3c110463,0x3c021b54,0x3ba9a36a,0xbbbe8b8f,0x3c1ede81,0x3b24543a,0xbcd67083,0xbc685029,0xbc24db6b, -0xbc4f32a2,0xbc365295,0xbb48837d,0xbbcb387d,0xbbc482fe,0xbb942c7a,0x3b8e13e9,0x3b4ffd20,0xbad9c5eb,0x3b8b630c,0x3afb8e01,0xb9fdac0c,0x3b0143bd,0x3af81bcf,0x3b5b8f60,0x3b6d88c3,0x3abc1fb6,0x3b460127,0xb9c11859,0xba8142a5,0x39677024,0xb8cbf7d0,0x3bb75499,0x3bd7b5f5,0x3b4581f9, -0x3b211bf2,0xb930588d,0xba0123b4,0x3b5e7fce,0x3bf25fe1,0x3b8bb032,0x3c32e0b8,0x3c56aede,0x3c4446c4,0x3ba0a7d6,0x39071980,0x3bb7e11f,0xb960741f,0x3ac22572,0x3a1bb015,0x3b77d038,0x3babee8b,0xba9ad88f,0xba7a00f3,0xbad42d1b,0x39e7fcce,0x3929c203,0x3af165fe,0x3b4afa9b,0x3aa2d3db, -0x3af1b947,0x3b701c2d,0x3ba8cd7b,0x3bf30c97,0x3ba56806,0x3ba872e1,0x3bbd06ae,0x3b5b8944,0x3ba73b0a,0x3bc67719,0x3bc1a62f,0x3b9a900c,0x3b7fe006,0x3b3dcb0f,0x3b30a376,0xbb3994fe,0xbc6ae20b,0xbc1c8c62,0xbc0ab618,0xbbba19cd,0x3ae19b89,0x3bcb1729,0x3c0f856f,0x3b17d4fe,0xbb36bd9f, -0xbbb56cb1,0xbc6a828e,0xbcaf9933,0xbcd82b02,0xbc976c35,0xbc5b9db3,0xbc26a5bf,0xbbec5883,0xbbc61d22,0xbbbc5c87,0xbb956214,0xba71fefb,0x3bba4376,0x3b66227c,0x3b6ef7c8,0x3b47479f,0x3bc4522a,0x3bc39f28,0x3ae57543,0x3b9a547f,0x3bdafe59,0x3c0daf3f,0x3bee869c,0x3ba0c70f,0x3ad0100a, -0x3ae9b71c,0xba838277,0xbbc06a89,0xbb9cb662,0xbb92a568,0xbba224bd,0xbc0f4a83,0xbc23f0b8,0xbbebc1b0,0xbb66cb27,0xbcc30650,0xbcdce778,0xbcd93f4b,0xbca14960,0xbc2c3fe6,0xbba4383b,0xbb98d371,0xbc154f70,0xbc133870,0xbbecf7c9,0xbb6aff48,0x3af39857,0x3b917c57,0x3baa524b,0x3b393522, -0x3b0c9ccd,0x3b00f50c,0x3b40bc76,0x3b6e5288,0x3b676ba7,0x3bdace89,0x3bd8b777,0x3b90cbaf,0x3b4d13be,0x3a5f5de3,0xba26a272,0xbb4aa008,0xbb6adebe,0xbad6ce01,0xbba9a62b,0xbc0800a6,0xbc32dfb9,0xbb8aab69,0xbb722256,0xbc2e01aa,0xbc92fd1e,0xbc5cc532,0xbc5c15c3,0xbc13740a,0xbc000cfe, -0xbb96d5f0,0xbb7aee19,0xbb17e410,0xb984aa29,0x3b588d7a,0x3ba67bcd,0x3c0d678e,0x3bb76667,0x3bae1585,0x3b88d3ea,0x3b36d399,0x3a961d16,0xb9d44770,0xbad3ced0,0xbb2a060b,0xbb81bc12,0xbb3ac81c,0xbae64355,0xb9d6fcce,0xbae7a1a9,0xbb5ae773,0xbba8ad10,0xbbaa4619,0xbbbb8ba5,0xbbc59f91, -0xbbb0db3d,0xbb7b2f51,0xbb5cd500,0xbbe850cf,0xbc2eadea,0xbc5254c6,0xbc53d1ef,0xbbc63548,0xbb9107a0,0xbb1404ad,0xbb1b5a8c,0xba5bcfe6,0xb9981680,0x39e977e7,0x3abd2c8c,0x39bab0d5,0xb9d0b4ed,0xba1b1532,0xba76dd80,0xba784806,0xba894d67,0xbb2d69e6,0xbb6fbdcf,0xbb9ccde9,0xbbbe6a85, -0xbc043fd6,0xbbf7490a,0xbc0d1b56,0xbc27e4c1,0xbc3b164f,0xbc51e1ea,0xbc5fc77c,0xbc725f01,0xbc689b6b,0xbc670a62,0xbc6bba79,0xbc704b99,0xbc7e19a3,0xbc80270b,0xbc5fa7f1,0xbc380422,0xbc1b7852,0xbbfd4ed5,0xbc0a1db6,0xbc0045f9,0xbc06bbc1,0xbc0223cc,0xbc00c2f7,0xbbec3396,0xbbe9f2e6, -0xbbd87498,0xbbe36554,0xbbe52147,0xbbf40d4c,0xbbf4eff7,0xbc00440c,0xbc026d75,0xbc03c759,0xbbfe1eef,0xbc1a0726,0xbc161dd0,0xbc156904,0xbc06ec51,0xbc14b69e,0xbc1a04bc,0xbc216049,0xbc25e34b,0xbc2bca80,0xbc34b3f4,0xbc3521af,0xbc3682b4,0xbc351bd4,0xbc34c7fc,0xbc32d391,0xbc39aaca, -0xbc2c7188,0xbc25ffc0,0xbc1ca409,0xbc144f07,0xbc35334a,0x3b707b00,0x3b749022,0x3b486656,0x3b5f4e78,0x3b640eb1,0x3b77b35b,0x3b4eb02c,0x3b60e47e,0x3b6188e8,0x3b851339,0x3b8d6ad8,0x3b87f2bf,0x3b9c4317,0x3b98acaf,0x3b6ce29b,0x3b620c22,0x3b530214,0x3b8f5d80,0x3b77282d,0x3b695912, -0x3b46a42d,0x3b544f46,0x3b55c634,0x3b61ec96,0x3b6796d5,0x3b688422,0x3b61dbce,0x3b54afff,0x3b518559,0x3b6c47a7,0x3b4a2396,0x3b4946b3,0x3b5c5e4c,0x3b4eaec5,0x3b498628,0x3b2f307b,0x3b68bbb9,0x3b5f0ae5,0x3b211dd5,0x3b7928ab,0x3b5f353b,0x3b7c00b9,0x3b48ade4,0x3b37c064,0x3b183241, -0x3b8462a3,0x3ba319fe,0x3b9ac474,0x3bd85157,0x3bc0b1af,0x3b5777b0,0x3b519227,0x3b57a51f,0x3bab8cb9,0x3b9130af,0x3b9a7982,0x3b5882a7,0x3b4cc6af,0x3b563c36,0x3b77eb0f,0x3b86f50f,0x3b852df4,0x3b6b379e,0x3b554fec,0x3b5daa08,0x3b9fee4f,0x3b70bd54,0x3b4de30c,0x3b64c976,0x3b133286, -0x3af99f42,0x3aa1e49d,0x3b4ece2f,0x3bb80bad,0x3b403811,0x3b57b0d1,0x3b1dab21,0x3b5ea3e7,0x3b0a24db,0x3b268dfb,0x3b1f73df,0x3ba450e2,0x3bd32cce,0x3bb397d9,0x3c106dac,0x3c07a54a,0x3b26e53e,0x3b52e558,0x3b4a206f,0x3bdadd19,0x3b9e2916,0x3b9825a2,0x3b4b9956,0x3b2d1685,0x3b538aae, -0x3b82425b,0x3b9b2d16,0x3b9ba32c,0x3b7ee4e9,0x3b5dbc73,0x3b467b10,0x3bc6fbc6,0x3b300eaf,0x3b255ca9,0x3b81d99d,0x3b0ae2c2,0x3aca2246,0xb8c89d56,0x3b963bf0,0x3b202739,0x3aa38bf7,0x3b56e9a4,0x3bac044f,0x3bdb28d3,0x3b1e93c0,0x3a4872ae,0x38f29d61,0x3b86f5d5,0x3bebf0ce,0x3be2716f, -0x3c23246b,0x3bdcaa10,0xba61c357,0x3b543333,0x3b9d5856,0x3c2a4f07,0x3bf580a1,0x3bebcdbc,0x3b80a643,0x3b078c24,0x3b1d2055,0x3b6ed764,0x3ba2fcd2,0x3b9d2dcc,0x3b2379d0,0x3b1b86b8,0x3b80baf6,0x3c29fc65,0x3bce5614,0x3b4a6d64,0x3b70e30c,0xbabdb95f,0xbb5249de,0xbba07966,0x3ac63fec, -0x3c819690,0x3c091ff4,0xbb0b45ed,0xbc361fa9,0xbc79b55f,0xbb4765ee,0x3b97df76,0x3c01a449,0x3c90e44b,0x3c5668e7,0x3acc49c8,0x3901c848,0x3b35f9c3,0x3c363fa3,0x3c0f86f1,0x3bdae565,0x3bcedc75,0x3b0e93a3,0x3a164ed4,0x3a13f05b,0x3b8173cb,0x3bc302da,0x3bf9bb4c,0x3bd90ee5,0x3bfbdd34, -0x3c2f00e9,0x3c285d46,0x3b2348db,0xbc254cb7,0xbc1a7025,0xbb8978e7,0x3c1b9d31,0x3c2ad325,0x3c52495b,0x3c8e106f,0x3c81e13b,0xbc5346d4,0xbd082d68,0x3c8e1098,0x3ce18962,0xba439cf5,0x3c04b8e8,0x3b8ecb41,0xbb11b766,0x3a7c5c40,0x3b99273a,0x3c2ecfd1,0x3bcf5e0a,0x3b87040c,0x3ba30f48, -0x3c06c2b1,0x3c3753f4,0x3bb7e43e,0x3bc0acbe,0x3bc17e9c,0x3b87e77d,0x3c0bd902,0x3c0aead5,0x3bd9ae25,0x3bd7121a,0x3bf1f73d,0x3c09ad8e,0x3be85caa,0x3ba085ed,0xbb84d9e4,0x3c40d627,0x3ba99348,0xbc9efb9b,0xbc43e564,0xbc0fd1f8,0xbc08f6a7,0xbbe2fc35,0x3ae6716a,0xbc09c7c8,0xbc0d080d, -0xbbe34280,0x3b11ab31,0x3bb522f8,0x3b305ef7,0x3b6679c8,0x3b57cac6,0x3aa7abbe,0x3b28f345,0x3b024196,0x3b5e39bb,0x3b810b84,0x3a1dcea1,0x39e01c36,0xbb3e279c,0xbb253e4a,0xba9bbb3d,0xbae223fe,0x3b0baf1f,0x3b67eb06,0x3b5df2f9,0xb95334b0,0xbb27b5f8,0xbb309d99,0x3b840eef,0x3c118ad9, -0x3b8cd522,0x3c458fa2,0x3c3e3ecd,0x3bfc15d4,0x3b70aae7,0x3ad86a66,0x3c2b3bd0,0x3ba8387a,0x3b6dfdd9,0x3be4b657,0x3beb8bb2,0x3bd8fd17,0x39949eb6,0x3a372e1e,0xba8f4700,0xbb1eef44,0xba4095f9,0x3a30bcb5,0x3b19c39f,0x3ab2c4b2,0x3af22b36,0x3b37bcd4,0x3b950f87,0x3bc82932,0x3b35b31f, -0x3b35dc74,0x3b4df189,0x3b33c0dc,0x3b90cc6e,0x3baacd9f,0x3bc2a3be,0x3b77f75c,0x3b11e67f,0x3b1a48fd,0x3aa3d395,0xbb8c049d,0xbc6c152d,0xbc023d0f,0xbbd24c05,0xbb6e920a,0x3a553a8e,0x3bb3243b,0x3c2e7269,0x3b5b203f,0xbb5440f2,0xbc02122e,0xbc5007ef,0xbc9e5763,0xbcdd4b72,0xbca22fc2, -0xbc6a59b8,0xbc1e4c1d,0xbbb13563,0xbb77578c,0xbb73e885,0xbb8be9d6,0xbab4007a,0x3b8c9281,0x3b3eaee0,0x3b3d6f74,0x3a40bf6c,0x3b92160f,0x3ba193cf,0x3b1d20e5,0x3b0b0753,0x3b710a36,0x3c047236,0x3bcccde6,0x3b91087d,0x3a6ce525,0xba5a105d,0xbb3547b9,0xbbaabb4a,0xbbf0e67d,0xbbd04581, -0xbaabc4eb,0xbb9ed513,0xbbc80b97,0xbb8fc088,0xbafeeb34,0xbc9010c3,0xbcad737d,0xbcb83dcd,0xbc8d3f3d,0xbc08882d,0xbbefd610,0xbc06765f,0xbc3eed6e,0xbc3c55c0,0xbc1e9ba4,0xbbbd922a,0xbb2683d2,0x39a2e155,0x3b74dc4c,0x3ae901df,0x3afe560a,0x3ae6dfe7,0x3b8e3790,0x3ba18fb2,0x3b9059dc, -0x3bb010ea,0x3bb31d43,0x3bd305d4,0x3b64d9f6,0x3b042dc5,0xba22e390,0xbb170055,0xbb4c4e63,0xbb4c0bcc,0xbb56f56a,0xbc02c3ac,0xbc84c2a3,0xbc63e247,0xbc424715,0xbc3b6d57,0xbc7523b6,0xbc8898c1,0xbc9a3234,0xbc75a607,0xbc67c815,0xbc4121ec,0xbc205414,0xbbe43e82,0xbb89fd99,0xba385dae, -0x3ab5e21a,0x3b9d311c,0x3b648ce5,0x3b80a3b8,0x3b87e846,0x3b0d2df2,0x3a375fb2,0xba9722af,0xbaece960,0xbb2b759c,0xbb1b8c83,0x3a3f35dd,0x3b2f006e,0x3bb0928b,0x3b68f201,0x3b01acfd,0x39634e2c,0xb9fda6e5,0xbab4c636,0xbb259f60,0xbacf61a0,0x39dafe68,0x3b124e06,0xbaf97787,0xbbe4df49, -0xbc34890b,0xbc6613a0,0xbbd85d65,0xbbb889fe,0xbb6b6847,0xbb4d7f7c,0xbae0eecb,0xbaa9b590,0xba3ab31f,0x39d3109d,0xb98cb6a6,0xba073ebb,0xba048f38,0xb90ff4d3,0x399fdb50,0x3a52de72,0xba6ed6f3,0xbadb0b61,0xbb136447,0xbb472f70,0xbbaa57f5,0xbb9348a9,0xbbb0514c,0xbbd79066,0xbbeea7fc, -0xbc0503d9,0xbc0b1c0e,0xbc127130,0xbc14582d,0xbc1b5654,0xbc26370a,0xbc34ac27,0xbc4e316f,0xbc5d6be4,0xbc4ec901,0xbc2fa443,0xbc191db7,0xbc004c4f,0xbbce1048,0xbbc153f1,0xbbdd45ce,0xbbe3f69a,0xbbf8c10a,0xbbb606d0,0xbbc958c1,0xbbd019e5,0xbbd0e913,0xbbce5d0b,0xbbd5ee1f,0xbbd7e884, -0xbbe27fe4,0xbbe4cf60,0xbbc3001f,0xbba2bf67,0xbc069941,0xbbe4ef61,0xbbd374f0,0xbbab205b,0xbbbeca73,0xbbbfe3b5,0xbbc7f359,0xbbc74f3a,0xbbca9923,0xbbcfdab4,0xbbda9a70,0xbbe2a592,0xbbe77dcf,0xbbec6584,0xbbed3e90,0xbbfda85f,0xbbe8e85f,0xbbe53994,0xbbde4726,0xbbd8ddff,0xbbd8019e, -0x3b44301b,0x3b420d06,0x3b2e21d1,0x3b397141,0x3b3c5088,0x3b50a036,0x3b33910a,0x3b46aabc,0x3b466672,0x3b67d66d,0x3b783ea6,0x3b72b176,0x3b8eab1b,0x3b8bb81d,0x3b58627b,0x3b44b860,0x3b295efa,0x3b71f062,0x3b462881,0x3b3bd727,0x3b1f540f,0x3b2aa09a,0x3b2e854e,0x3b3ff040,0x3b3e81c2, -0x3b3c88e1,0x3b324fb0,0x3b2285b9,0x3b234e23,0x3b565918,0x3b2778fa,0x3b227701,0x3b341107,0x3b1b7341,0x3b12e185,0x3aefa1ef,0x3b30d550,0x3b253234,0x3afa3336,0x3b1b6b75,0x3b228680,0x3b47da10,0x3b3d1447,0x3b32fa75,0x3b0c738d,0x3b689209,0x3b8cb5c1,0x3b8a7192,0x3bc87932,0x3bb72a78, -0x3b5456f1,0x3b3dbbd7,0x3b335f9e,0x3b840231,0x3b610816,0x3b61ca1f,0x3b178fa6,0x3b187a4a,0x3b27234b,0x3b54a1e6,0x3b5513c2,0x3b3f54ce,0x3b1dad61,0x3aecff62,0x3b162df3,0x3b9e51f7,0x3b4d9301,0x3b2b5817,0x3b3d91b9,0x3a9c643a,0x3a36c182,0x3922ec86,0x3b0d84cc,0x3b8e3182,0x3b3bd64f, -0x3b26cac8,0x3b02ddea,0x3b24c530,0x3b206cdf,0x3b4bc5a0,0x3b29a553,0x3b9c224a,0x3bca7774,0x3bb3a6fe,0x3c14494f,0x3c0bdd64,0x3b5c33b7,0x3b5846d0,0x3b2954f7,0x3ba1886f,0x3b6c8daf,0x3b51dcc2,0x3af0751e,0x3aec0d79,0x3b22fb31,0x3b776700,0x3b7fc1bd,0x3b755d8c,0x3b2e75c1,0x3ad53691, -0x3acaab61,0x3bd661eb,0x3b1d9682,0x3b05e0bf,0x3b5a7d57,0x3a05f201,0xb9880adb,0xbb0b2ac7,0x3b27823a,0x3ad3160e,0x3a0f5cdf,0x3a2f59bf,0x3b441011,0x3ba0f778,0x3b294991,0x3af09890,0x39d70391,0x3b807c29,0x3bc9ed6a,0x3bb508af,0x3c2c8af9,0x3bfdaade,0x389a69fb,0x3b41512a,0x3b95d4a1, -0x3c1c55bb,0x3bb58c20,0x3b8247d0,0x3a71c2b8,0x39b3281c,0x3aaa0227,0x3b595806,0x3b746701,0x3b183371,0x38e746af,0xba1a0707,0x3b1aea4a,0x3c3d1a10,0x3bbb2fc5,0x3b3f8b88,0x3b513c23,0xbb6da150,0xbbbe338c,0xbbe276ce,0x387a3c28,0x3c44dab3,0x3c2997ac,0x3af4bb3d,0xbbe247bd,0xbc68050c, -0xbb1b657b,0x3b84bcda,0x3ba095d3,0x3c889bb1,0x3c749c5f,0x3b9631ec,0x3a0a7f87,0x3b32b122,0x3c3a84cf,0x3beb5cfd,0x3ba52e9f,0x3ba6a6c2,0x3b09997b,0x3aa93416,0x3b14a23d,0x3bb479d7,0x3bd6b374,0x3c026ccf,0x3bfcce89,0x3c20da5e,0x3c7af373,0x3bb58500,0xbb6d55a3,0xbc2f1ac6,0xbc1bb94c, -0xbb52f8ec,0x3c09cb4b,0x3c503c23,0x3c606ae7,0x3c4c1490,0x3c25e778,0xbbe6f512,0xbd0931d4,0x3c1b081c,0x3cb23fd1,0xba85dc83,0x3c01b86d,0x3bbda7a8,0x3ac8766d,0x3aa1ac87,0x3b5604e8,0x3c2bbc18,0x3bfbd869,0x3bb7b56f,0x3ba2c596,0x3c10febb,0x3c2e6056,0x3b85a054,0x3b8e9988,0x3b9a03b5, -0x3b86a6fc,0x3bd177cc,0x3bea287c,0x3c0ab1e8,0x3c041572,0x3c0a5d1e,0x3c0845ff,0x3bc16f17,0x3b855985,0xba80cfa9,0x3c4de922,0x3be9a731,0xbc486181,0xbc14b0b8,0xbbfdb6f6,0xbbcc7abf,0xba6e65e0,0x3bca8190,0xbbfdeca3,0xbc019c44,0xbbc73f71,0x3ad06ea2,0x3bee6295,0x3ba6bc7e,0x3ad48088, -0x3b732ac1,0x3b2c132f,0x3b3cafc7,0x3b10a0ab,0x3b610509,0x3b96e346,0x3997cc79,0xbae524af,0xbb8055cb,0xbb4e978d,0xbb11b9d7,0xbb378128,0xb9eec0c3,0x3ae1ba52,0x3bb569a5,0xbb0874f3,0xbb91e824,0xbb1491c0,0x3b71d0cc,0x3c07d2a4,0x3bb6a87a,0x3c392433,0x3c0cd273,0x3afd3975,0x3abfa5c5, -0x3b228cf9,0x3c3bc0aa,0x3c176bee,0x3bc3773b,0x3c1be173,0x3c0734f1,0x3bba4fad,0xba1f6ae5,0x39dea2b5,0xba95dede,0xbb58d167,0xb9f70564,0x3a1aa80b,0x3ae646e8,0x3af8c9b6,0x3b1411b8,0x3b1435d1,0x3b693fe3,0x3b8f1b4b,0x3aca10ef,0x3a85f9a3,0x3ac80bf5,0x3b49eb25,0x3b97a6f5,0x3b9fd249, -0x3bc44827,0x3ad994ee,0xb8fc73f4,0x3abf2fea,0xba828627,0xbb9c4d3d,0xbc2917ad,0xbb9fb0fb,0xbb4b7576,0xba659507,0x3b0f72ef,0x3b9f00de,0x3c029a59,0x3bad7b6b,0xbbbd4623,0xbc1733e3,0xbc54eaea,0xbc9625a4,0xbcd4067b,0xbcaf5225,0xbc835354,0xbc24104e,0xbba4ceb9,0xbb25312b,0xbb079ab9, -0xbb5245e3,0xbabf86eb,0x3b00e508,0x3b01e1af,0x3b16b4c8,0x38b6c752,0x3b156a68,0x3b34066c,0x3b0e12c8,0xb9028266,0x3a5a02a6,0x3ba7fefb,0x3b9eb37b,0x3b6f4982,0xb9539e5d,0xbb02a118,0xbb71a94e,0xbb8df572,0xbc1de37c,0xbc17d89f,0xbab2b322,0xbb2cc066,0xbb38c0cc,0xbb03ac80,0xbb55b9dc, -0xbc5370cb,0xbc79ceff,0xbc86de56,0xbc50fe2f,0xbbb613ce,0xbc01eea1,0xbc271d9c,0xbc521c68,0xbc4d0697,0xbc349cc6,0xbc02cc35,0xbbd7a359,0xbb5fd4fe,0x3afcbd73,0x3aa153d6,0x3b0e2eed,0x3b015814,0x3b96c778,0x3ba560dc,0x3b9bc8a6,0x3b73c9b2,0x3b868b89,0x3be6fc72,0x3b6fef06,0x3b0f45d6, -0xba69f9f8,0xbaedc8d9,0xbb600880,0xbbac0506,0xbbb748f2,0xbc148960,0xbc6d2e17,0xbc9811a1,0xbc92e590,0xbc5aba05,0xbc580d66,0xbc93dfd4,0xbcac6bbc,0xbc988cc3,0xbc914031,0xbc844a1a,0xbc569368,0xbc162118,0xbbba56bf,0xbb3be9eb,0xba99bd3c,0x3ae6c7f2,0x3adb3233,0x3b4b3eeb,0x3b8332d4, -0x3b069ede,0x3a545bb0,0xba3992bd,0xb929147e,0x3716d1c8,0x3ae6f4f6,0x3b91ce28,0x3bc07734,0x3c0870bc,0x3bd3d110,0x3ba6a7d6,0x3b6497a1,0x3b11f9b6,0x3a7915ff,0xba5c8f63,0xb983f4e5,0x3a1591ef,0x3af5b98d,0xbafe190c,0xbbdb1254,0xbc3bad12,0xbc798487,0xbbdfe78d,0xbbdbcfb9,0xbba7260c, -0xbb841c59,0xbb3e2729,0xbb1d8676,0xbb021a10,0xba82640c,0xba927de3,0xba689df2,0xb9eb4833,0x39acc631,0x3a8fb5f0,0x3b10dbd7,0x3a2b43ea,0xb8c7083e,0xba2bb81c,0xbac521bb,0xbb66c812,0xbb578cd8,0xbb6b6c0c,0xbb83e984,0xbb893ea4,0xbb8c5735,0xbb859c5c,0xbb76a264,0xbb8e3f92,0xbba30931, -0xbbbadc9a,0xbbdb7599,0xbc04b59c,0xbc165b56,0xbc191c79,0xbc0c787a,0xbc024412,0xbbecae0d,0xbb74c2e6,0xbb7343b8,0xbb8cc6a1,0xbb9865f6,0xbbb052fe,0xbb537d01,0xbb7a7875,0xbb8bd17c,0xbb813b42,0xbb6d5a07,0xbb69f5bf,0xbb609a19,0xbb67d111,0xbb5d4ff1,0xbb284b1e,0xbae10e5c,0xbb9b7286, -0xbb6a942e,0xbb4a9bf8,0xbb0d788f,0xbb1bc8b0,0xbb13ad38,0xbb15360c,0xbb0a1af9,0xbb07bff3,0xbb015d14,0xbb1c9bee,0xbb2d7931,0xbb3cc7ca,0xbb4bb041,0xbb54a56b,0xbb6d0c3c,0xbb5c8540,0xbb6407b3,0xbb6a9afb,0xbb74c28f,0xbaf47d85,0x3b141a77,0x3b102547,0x3b1bb7df,0x3b215516,0x3b22c118, -0x3b307637,0x3b194df6,0x3b304ee8,0x3b303e91,0x3b4caddf,0x3b5adfd6,0x3b58c770,0x3b80cf40,0x3b7d1fdc,0x3b492d89,0x3b28c926,0x3b003e85,0x3b3c1253,0x3b1c9d8c,0x3b17799c,0x3af553b7,0x3b06729b,0x3b089bbd,0x3b169536,0x3b0977ae,0x3afbf4c6,0x3ac7e538,0x3ab5dd80,0x3ac83304,0x3b2ff17c, -0x3afd82f1,0x3af52dbf,0x3b0ac4af,0x3ad4222c,0x3abd9a02,0x3a8f423b,0x3aefe8ad,0x3adad775,0x3afe88c6,0x3aebd2db,0x3b0632e3,0x3b26e73a,0x3b3e92be,0x3b335f8f,0x3b0343ce,0x3b4cd8e3,0x3b773544,0x3b7ea5ab,0x3bb7e06b,0x3bab4a1e,0x3b5850c5,0x3b27255b,0x3b050231,0x3b24d4e0,0x3b1f8d75, -0x3b291b56,0x3ae56b7d,0x3b031041,0x3b0f60af,0x3b2b0a2e,0x3b034fa5,0x3a927f51,0x3954e828,0xb9bd961f,0x3a21bfaa,0x3b88317d,0x3b206ff5,0x3b0b8ec9,0x3b111631,0x39876487,0xb9dfc705,0xba3108b6,0x3a8cd54d,0x3b5aef87,0x3b8068f0,0x3b39fa0e,0x3b176d4b,0x3b0c4bef,0x3b3a48ca,0x3b7474ae, -0x3b3bcb9e,0x3b9d6f25,0x3bc71e99,0x3bbd01f0,0x3c164a57,0x3c0e49a3,0x3b8d62b3,0x3b582018,0x3af70e50,0x3b2ba1be,0x3b295dfc,0x3b24ad89,0x3ac3e4ef,0x3aeb41da,0x3b176ea2,0x3b58c746,0x3b1ce4b2,0x3ab819d6,0xba2fa609,0xbad62074,0xba818b95,0x3bbde631,0x3af9a25d,0x3aed847c,0x3b371a7a, -0xba2a91ec,0xbae11f65,0xbb3bb112,0x3a651935,0x3ab2c28f,0x3acda082,0xb8fefbb2,0x3b096ff4,0x3b805c20,0x3b6200ed,0x3b46f384,0x3a996677,0x3b88ac05,0x3bb94ab1,0x3bad0bbb,0x3c36101f,0x3c10d4a0,0x3af2670b,0x3b4cfbec,0x3b81f3da,0x3be2a978,0x3b6d3380,0x3b0a990f,0xb7dfd1fb,0x3a1272a6, -0x3ace5a3b,0x3b47b6a3,0x3abe4a9b,0xbb032170,0xbba50d92,0xbbbbf2c7,0xba846426,0x3c2cb5b5,0x3b967d63,0x3b4466e3,0x3b305378,0xbbaab8b8,0xbc027745,0xbbedef4b,0xba7a2143,0x3bf520f8,0x3c3afa82,0x3bda7f1c,0xba89c145,0xbc40197e,0xbb10ce24,0x3b60e081,0x3b76b6c3,0x3c7163b7,0x3c802359, -0x3c01835a,0x3ac6ed93,0x3b300e8f,0x3c2e7cf5,0x3bb8bb5f,0x3b7d976c,0x3b922ee4,0x3b575d91,0x3b642286,0x3b8ee6fa,0x3bd3275f,0x3be12bf3,0x3c04f091,0x3c0a9e94,0x3c3397ee,0x3c8f2fb4,0x3a90b3fe,0xbc0b3816,0xbc319476,0xbbfe34b9,0xba60e895,0x3bc1b856,0x3c76d625,0x3c787377,0x3c02badb, -0x3b9caed6,0xbac0a2f5,0xbcf160d6,0xbb58f98c,0x3c202cd7,0x3b2dbebe,0x3bdb3083,0x3bc1f802,0x3ba65f3c,0x3af84cef,0x3b17a015,0x3c21c13d,0x3c146b63,0x3bebc067,0x3b9b8df2,0x3c0db5f4,0x3c173efa,0x3b57fb3f,0x3b3e40c7,0x3b479669,0x3b77a961,0x3b924c5e,0x3bc8b56d,0x3c2728ca,0x3c249f01, -0x3c1b8953,0x3c0dee69,0x3b8a6e47,0x3b3507f9,0x3b1538e9,0x3c3ed787,0x3be66d4f,0xbc047c8e,0xbbbcbb2d,0xbbb5e4a2,0xbbb659cc,0x3b8d03cb,0x3c1bceaa,0xbb475a3d,0xbb572b0f,0xbaffb27b,0x3b396320,0x3c09aa94,0x3bd6e56f,0x39c0d03e,0x3b615be3,0x3b52bc29,0x3b41d7fa,0x3b1cbfcd,0x3b60f6df, -0x3bace4df,0x39e5bb01,0xbb3c369d,0xbb501230,0xbb3e0d53,0xbb3a8b42,0xbb44d765,0xbb0c3980,0x3971c80b,0x3bbd9a2c,0xbb3caabd,0xbb833730,0x3795d491,0x3b7c16a3,0x3bdf8fd4,0x3bea5fae,0x3bd2b0f1,0x3b074ecc,0xbb5340d8,0xbb1dc40c,0x3acca4a5,0x3c2d058c,0x3c39a7b5,0x3bdf4460,0x3c0cc4aa, -0x3bc92d20,0x3b38dfef,0xbb359088,0xba9e85af,0xbb0a4280,0xbb6013b2,0x3a296ef3,0x3ac1660f,0x3ac2e321,0x3b3c44f8,0x3b4aca29,0x3b06476c,0x3b15cf46,0x3b20820e,0x3a844cbf,0xb995ec4a,0x3a2db76b,0x3b5f58a5,0x3b9dda76,0x3b9a1a9e,0x3bac7e89,0x3a4a499c,0xba968502,0xba8b9ad6,0xbb3e1e8b, -0xbb963f40,0xbb9df663,0xbaff2eaf,0x39e93b17,0x3b954e21,0x3bc9dca2,0x3bcd1d38,0x3bcf3b62,0x3bd9443b,0xbbec96d2,0xbc043f4f,0xbc5a78c0,0xbc8f94f9,0xbcb0c093,0xbcaba09f,0xbc87db32,0xbc2cab9d,0xbbb7d9d8,0xbb1a79ef,0xbab42ff7,0xbb08b3fd,0xbac638aa,0xba376868,0x3a65744f,0x3ae134c9, -0x398bf173,0x3a4a279c,0x3a815e1b,0x3b01532e,0xba08ee8c,0xb8e3d55b,0x3b1bfd38,0x3b5ead2a,0x3b443fbf,0x3944dc75,0xbaadc9b0,0xbb83f1c7,0xbb8ee07c,0xbc2bd8fb,0xbc356ece,0xbb8dbe6c,0xbb10d73d,0xb94c05e0,0x3a89dbed,0xbb88048f,0xbc2c9f42,0xbc3b6591,0xbc3fe68a,0xbc1a51e3,0xbba2c4f9, -0xbc1748b6,0xbc47d764,0xbc5cd01d,0xbc5135ea,0xbc3d232b,0xbc1bbfbd,0xbc19813f,0xbbcf0f72,0xba0d578e,0x3a709024,0x3b22a586,0x3b1733d9,0x3b837546,0x3b8ce125,0x3b8b06b9,0x3b110e4c,0x3b16d78f,0x3b8fc3c6,0x3b681cd0,0x3af7833f,0xba8922c6,0xbb053f52,0xbb5d470c,0xbb97765e,0xbbdcc8a6, -0xbc15fce4,0xbc3bdae4,0xbc827e25,0xbc8d3293,0xbc794403,0xbc4c6291,0xbc87fa95,0xbc9a69fd,0xbc92d54f,0xbc8a4cde,0xbc81e84a,0xbc504023,0xbc0ea5cd,0xbbae094a,0xbb73f803,0xbb55ddeb,0xbaa362f3,0xba31d859,0x3af51564,0x3b42ad32,0x3ae7186d,0x3a857433,0x3a10d017,0x3adaa627,0x3b30683e, -0x3b8f6eff,0x3bb33dce,0x3bcade27,0x3bef6f5c,0x3bd15ecd,0x3bc0658f,0x3bb478b6,0x3b6f0356,0x3ac7891b,0xba96b5fc,0xbad7f305,0xbb152656,0xbb2251f4,0xbbb89f15,0xbc130675,0xbc522cd2,0xbc7708c6,0xbbf6e47d,0xbc05119a,0xbbd72eea,0xbbb4c3f5,0xbb92ae7a,0xbb797f9c,0xbb697b01,0xbb2face0, -0xbb28c36f,0xbb03b556,0xbaa1b0ca,0xba0dc6b5,0x393f638b,0x3ac80ebc,0x3a343f04,0x39c0340c,0xb8e00b24,0xba368f45,0xbb15d2fc,0xbab741f5,0xba9ef263,0xbaa7b087,0xba95ffa0,0xba4c4fbc,0xb9b95e5b,0x398db597,0xba3cfd42,0xbaaf0212,0xbb0347e8,0xbb3ccc5c,0xbb83814c,0xbba349ac,0xbbc25277, -0xbbcf17eb,0xbbd81238,0xbbe5142f,0xbb213641,0xbb4099ab,0xbb24f4f2,0xbb2be4b9,0xbb365604,0xbafdce93,0xbaf811a6,0xbaf08b80,0xbaadf3d8,0xba613b71,0xba2bd0e9,0xb9a26967,0xb973ca3d,0x3803f313,0xb8d26a5f,0x395d60a3,0xbaa8fcdb,0xba2aa00b,0xb9e56fae,0x39509a3e,0x38befd94,0x3995f17e, -0x39cb1f19,0x3a0412df,0x3a08a1c5,0x3a38f4f1,0x399ac836,0x361d4b0e,0xb9aa538a,0xba2b7859,0xba6f47e2,0xba9f93b1,0xbaac42c7,0xbacf75b5,0xbaf92994,0xbb1198fd,0x39f7e3b7,0x3ac083e6,0x3ac235df,0x3b09eb95,0x3b0518a3,0x3b023dfa,0x3b06b755,0x3aef806c,0x3b0b2739,0x3b099e52,0x3b2582c8, -0x3b3125bc,0x3b31fc14,0x3b56828e,0x3b52e2d6,0x3b2d2109,0x3af55b32,0x3a9bae8e,0x3aeca875,0x3ad18932,0x3ad5507f,0x3aac93de,0x3ac934f2,0x3ac722ec,0x3ad257d2,0x3a975158,0x3a52fced,0x394863d4,0x395bdae0,0x39f661ac,0x3aef68ef,0x3a94620e,0x3a92fe66,0x3ab778ce,0x3a54cfaf,0x3a213a50, -0x39ad03e8,0x3a83e544,0x3a8633dd,0x3b0800b8,0x3ab9367f,0x3aea8a35,0x3b094b4d,0x3b414fc7,0x3b31a37f,0x3ad9ccd8,0x3b3181e6,0x3b5996e5,0x3b66fbd7,0x3ba3997c,0x3b9a0a3d,0x3b562021,0x3b0121f4,0x3a913c84,0x3a68f51f,0x3ab8e9db,0x3aee27ed,0x3aaec780,0x3af81a2c,0x3afb7a9c,0x3af214f4, -0x39ebafe6,0xba753ce5,0xbb09a9be,0xbb195553,0xba7b8986,0x3b41aaf2,0x3ac1df91,0x3aac7d9f,0x3aa9424f,0xba35707c,0xbab6f918,0xbabd55fc,0x39154ada,0x3b2fee5d,0x3bacca5d,0x3b6e93c8,0x3b449871,0x3b0ab11e,0x3b5ad7a7,0x3b8b9aef,0x3b3776f0,0x3ba00388,0x3bc42add,0x3bc4efec,0x3c13ed32, -0x3c0bdfe7,0x3ba55e37,0x3b40339d,0x3a73616a,0x3996febf,0x3ad5ca39,0x3b08f222,0x3ac2f83f,0x3b18eaee,0x3b20dff9,0x3b3049b9,0x39ae54cc,0xbad96e6e,0xbb93d497,0xbba1180c,0xbb646f8a,0x3b844db3,0x3a3b5d7c,0x3a67386d,0x3af9e73b,0xbafb82d5,0xbb4501e2,0xbb65a6eb,0xb9bca3ed,0x3aba8ed0, -0x3b5fc395,0xb8562dbb,0x3b059e67,0x3b71c1ae,0x3badfef1,0x3b99b2f4,0x3aed1970,0x3b9a19d5,0x3bbca8e6,0x3bc45eba,0x3c421eca,0x3c253c04,0x3b807e76,0x3b5efd82,0x3b3d3769,0x3b59bc2d,0x3afcbded,0x3ab84c9a,0x39860d5a,0x3af473ad,0x3b1bf1f7,0x3b22890d,0xbaebc084,0xbbe58439,0xbc292cae, -0xbc256a45,0xbb77efb4,0x3c07a937,0x3b3bef65,0x3b026ee8,0x3ac05ce5,0xbbd6106a,0xbc18e247,0xbbed2475,0xbaeecfd1,0x3b9deca6,0x3c5c6b38,0x3c43ed74,0x3b9a08a9,0xbc11d22d,0xbb65db48,0x3af3bd13,0x3b78299a,0x3c47425b,0x3c785179,0x3c3843c6,0x3b3730cf,0x3b219336,0x3c186714,0x3b8b82b3, -0x3b5e813e,0x3ba17f6d,0x3ba90f28,0x3bbe24a6,0x3bc0aca4,0x3bd4d103,0x3bdb6038,0x3c063302,0x3c135514,0x3c36db6a,0x3c8629e2,0xbb5b9014,0xbc54d373,0xbc5501d6,0xbbdc2481,0x3a3890da,0x3b18bb89,0x3c7bf634,0x3c7c224b,0x3b84e0e0,0x3aa38cfd,0x3acc250a,0xbcca3d1d,0xbc8ea14f,0xbb86f5d4, -0x3c16869e,0x3bc84072,0x3bab0d3a,0x3bf47c88,0x3b3ebd93,0x3b1cce16,0x3c1427cb,0x3c29ea01,0x3c0dc7af,0x3b8de5dd,0x3bf49aef,0x3be72444,0x3b3a4a61,0x3ae53b7a,0x3ada9d55,0x3b658e70,0x3b43a832,0x3bac22c0,0x3c2ffc0c,0x3c31379e,0x3c1a6fe9,0x3be79e1a,0x3b2e6e73,0x3b221b7b,0x3bbc8979, -0x3c0d75f3,0x3b962d4c,0xbbb4b58a,0xbb284e70,0xbb18c8a7,0xbba0f888,0x3bf085e5,0x3c611af1,0x3b92ce5f,0x3b8352c3,0x3b838771,0x3b99836e,0x3c07e715,0x3bd48ded,0xb9d49a15,0x3b4af101,0x3b713184,0x3b34b9b2,0x3b2729d9,0x3b5f670c,0x3bb74f16,0x3a61f344,0xbb3dbfa8,0xbacda1e1,0xbb0b5a12, -0xbb3aa2ed,0xbb1dbc8c,0xbb4cc8f0,0xba987b40,0x3b8c39ea,0xbabc2cce,0xbac31445,0x39f9dbfa,0x3b6e38d8,0x3b8bdda9,0x3bdc1fad,0xba1f6666,0xbbaf37d0,0xbbbb8c9a,0xbbbcf8e0,0x3a39421a,0x3c215dee,0x3c54c4f9,0x3bad60a3,0x3bac88c4,0x3b0a1789,0xba5c7918,0xbb927dfd,0xbb2424b4,0xbb401cc6, -0xbb6369b7,0x3ad44559,0x3b2dd8a1,0x3ae0687c,0x3b847775,0x3b78c254,0x3ad40497,0x3a671e7b,0x3a4074f8,0x3a75a8e4,0xba5fbdfe,0x39567e5d,0x3b7578f0,0x3bb1aea8,0x3bb3bec8,0x3bb2e9a8,0x3aa2b128,0xba6fa1ea,0xbb36e99f,0xbb8703c1,0xbb8691c0,0x3a844e4e,0x3965474a,0x3b7f04da,0x3c41a580, -0x3c2a89d1,0x3c0c6803,0x3bcf587c,0x3bcbda4c,0xbbc6476a,0xbbd2f029,0xbc4d9bf4,0xbc80d779,0xbc8272b3,0xbc968d0c,0xbc7b064b,0xbc2adb40,0xbbce5ae2,0xbb3d584c,0xbae68985,0xbadf3369,0xbae0ad14,0xbb3dc802,0x388c9eb1,0x3a8ee7df,0x3948bc02,0x38a40a43,0x399b5a34,0x3ae6a5c7,0xba23f2e2, -0xba5054ae,0x397ad572,0x3acac256,0x3aff09c1,0x3a5cb10d,0xba964b0a,0xbb6aa7e1,0xbb83d19f,0xbc1cc85c,0xbc37e3ae,0xbc105622,0xbb701a3a,0x39e77af1,0x3b2d941c,0xbb432df2,0xbc10b944,0xbc141e0b,0xbc134283,0xbc0a97a6,0xbbf571f4,0xbc41d8ac,0xbc6ac616,0xbc698d8d,0xbc539e66,0xbc3c3bcd, -0xbc232681,0xbc2be19c,0xbc04dc4a,0xbb4b7f81,0x39cb968e,0x3b232727,0x3b295ce9,0x3b64401e,0x3b6b4960,0x3b5c118c,0x3aa9326d,0x3a64d19e,0x3a9cde9d,0x3b425026,0x3b059ae5,0xb9667942,0xbb0c1b39,0xbb5e89e1,0xbb8e9f6d,0xbba454fa,0xbbcac351,0xbc12fda9,0xbc2da015,0xbc52252b,0xbc6d7a1f, -0xbc3568e4,0xbc5ce126,0xbc6e2260,0xbc699ba9,0xbc552a18,0xbc45695c,0xbc1f3de2,0xbbe000a8,0xbb8d1d71,0xbb8ea40b,0xbbb32477,0xbb9e7922,0xbb6fe893,0xb981beba,0x3a787e96,0x3a943eab,0x3ab2d09a,0x3b23bbc9,0x3b3f9ee6,0x3b6adc1d,0x3b887bc0,0x3b8609f5,0x3b8cb9ef,0x3b88c271,0x3b94659f, -0x3ba8a799,0x3bd4f9ff,0x3b75bbe4,0x3a681194,0xbb217129,0xbb88a4ac,0xbbc0b24d,0xbbea31d7,0xbc1426cf,0xbc2ed780,0xbc53112e,0xbc5a2f02,0xbc0f957d,0xbc250b11,0xbc0c19c1,0xbc0198a3,0xbbe1758e,0xbbc93be6,0xbbc2633e,0xbba3cddb,0xbb9bd279,0xbb78f370,0xbb3ab895,0xbb196096,0xbae99b75, -0xba11842d,0xb9956959,0x39436784,0x39a746de,0x3a08c78e,0x39127dc9,0x3b0648f2,0x3b16fcec,0x3b165323,0x3b226c26,0x3b3b0ad8,0x3b44b9c9,0x3b62938d,0x3b0ddf3f,0x3acb6a5c,0x3a650d14,0x389e1fd1,0xba6d4443,0xbaf515fa,0xbb650e8d,0xbba00088,0xbbc57ce5,0xbbf3fd10,0xbb3a44a5,0xbb73f6b9, -0xbb2ec528,0xbb209f0b,0xbaf9d1d1,0xbb1d431d,0xbaebc9eb,0xba8c1c2e,0xba12100e,0xb8f7064d,0x3910b8ff,0x3a0e2892,0x3a38f5c7,0x3a72afd8,0x39912f8a,0x3995776b,0x39acb589,0x3a1726bc,0x3a32a0a8,0x3a9fda18,0x3a891a58,0x3aa327d6,0x3ab1ba06,0x3ab62605,0x3ab8d62d,0x3ad3e326,0x3a998f3f, -0x3a4be9c5,0x39aa59a5,0xb8fd9a49,0xba093425,0xba5e29e0,0xba9bae89,0xbacc1522,0xbb03e918,0xbb201e90,0x3942cab4,0x3a2d135a,0x3a4e7fdd,0x3ae675ac,0x3ace6bb4,0x3ac8ab0a,0x3ac5afd1,0x3aa5582b,0x3acd44a7,0x3abd8089,0x3b00d053,0x3b0b0807,0x3b0afc00,0x3b2b2062,0x3b272991,0x3b0ec369, -0x3a94b758,0x39dcea63,0x3a5d064b,0x3a5c8600,0x3a6d50e2,0x3a3a8837,0x3a839391,0x3a72f05a,0x3a5ecafb,0x392c9ec2,0xb9a4be3f,0xba85398f,0xba52ca30,0xb9f1f452,0x3a5cba18,0x3995b754,0x39b042b8,0x3a412373,0xb79c67dd,0xb96be8c8,0xb9b9ae96,0x3965a116,0x39f6cc1f,0x3b141231,0x3ab3df4a, -0x3acc352c,0x3ad0bb97,0x3b3ab745,0x3b26bb10,0x3a8d5a54,0x3b154426,0x3b3c784e,0x3b4b5520,0x3b8b64c1,0x3b83576f,0x3b47e624,0x3aa53ffc,0x3922eec0,0xb9f8f617,0x39c36b07,0x3a95bb6e,0x3a722acb,0x3ae1dec5,0x3acd72c3,0x3a75709c,0xba932e02,0xbb351eb3,0xbb803fc9,0xbb6e69b8,0xbb0855f6, -0x3aba0a9e,0x39b63156,0x399b0b30,0x3a06e47c,0xbadae6ba,0xbb15a125,0xbb00947f,0xba2a78eb,0x3b08af54,0x3bdaad7b,0x3b96368a,0x3b72c25f,0x3b0de870,0x3b7adebe,0x3b962b38,0x3b1439ce,0x3ba12b76,0x3bbfd454,0x3bc44e9b,0x3c0acf86,0x3c030316,0x3bab9c23,0x3b15cf2a,0xb905c6c2,0xbaca7ed9, -0x3a10028d,0x3ac7c4ea,0x3ac4acad,0x3b3af5c4,0x3b28f72c,0x3ae3d593,0xbafa7557,0xbb9810fe,0xbbf912dc,0xbbe74040,0xbba62d9c,0x3adf3ffa,0xba236fbc,0xb9964761,0x3ab69a39,0xbb55a93d,0xbb897e4c,0xbb7a3e75,0xbab47861,0x3abdb3e0,0x3bc48f5d,0x3ab56780,0x3b2924db,0x3b66f4be,0x3be80874, -0x3bc98e22,0x3b097ce7,0x3baa899d,0x3bc66e1a,0x3bdea7ab,0x3c4dec6e,0x3c36c833,0x3bb7e308,0x3b61a082,0x3abd7034,0xb928c242,0x396a43c8,0x3a86c0f0,0x3a5d0da6,0x3b57e5b7,0x3b4cbb82,0x3aab78a2,0xbba9d682,0xbc36ad67,0xbc631912,0xbc46a41b,0xbbaa528e,0x3ba46e46,0x3a60a937,0x39c365d3, -0x3a5e062e,0xbbfcc80f,0xbc253864,0xbbd89b10,0xbb2601b6,0x3b601336,0x3c75e9e3,0x3c8b07a9,0x3c2341cc,0xbba46282,0xbba0db0c,0xb9c4cdfb,0x3b7de4ec,0x3c199af2,0x3c646bbb,0x3c6ff7f5,0x3b81ef18,0x3afd097e,0x3c006fa6,0x3b4d9901,0x3b5bc3ab,0x3bbe4fe2,0x3bdba2db,0x3bf092e3,0x3bcd1dfa, -0x3bbd052d,0x3bc9e8f9,0x3bfd58ff,0x3c11c870,0x3c22b6ce,0x3c3d0246,0xbbee4a60,0xbc83c153,0xbc830e74,0xbbcf2219,0x3abedeac,0xbaab165e,0x3c5f5d1a,0x3c5b7071,0xb9178767,0xba60cfa3,0x3ae67cd2,0xbca4968d,0xbcf0865f,0xbc845cef,0x3c7bbd82,0x3be558f3,0x3ba1ca85,0x3c03587c,0x3b71a54d, -0x3b32ba17,0x3c018c28,0x3c3522c1,0x3c1b946d,0x3b76396a,0x3bb9e795,0x3b972e52,0x3b22531b,0x3a9624dd,0x3a8cd636,0x3b51b97f,0x3acc4338,0x3b823146,0x3c21e41c,0x3c2db61c,0x3c0add51,0x3b94160e,0x3ac6cade,0x3b271926,0x3c0a1b6b,0x3b83f767,0xba17c107,0xbbebd071,0xb9a74aef,0x3ac35e8b, -0xbb40f748,0x3c027526,0x3c9014de,0x3c5d58be,0x3c499b92,0x3c2b84c2,0x3be559f8,0x3c052614,0x3bccfbef,0xb9e1da03,0x3b58eb60,0x3b8b3db3,0x3b1ce22b,0x3b2ed967,0x3b5d0863,0x3bb578e8,0x3ab2ecae,0xbb17dc47,0xb9340cba,0xbaa33b3c,0xbb0dacb6,0xbada9489,0xbb5452db,0xbae19cd6,0x3b2664ea, -0xba37a8e2,0x39d87cf8,0x3b097b49,0x3b65764d,0x3b0654ca,0x3bc2d066,0xbbbe6adb,0xbc208085,0xbbc19c39,0xbbb568ea,0x3af18fc3,0x3c1c9573,0x3c68f9f8,0x3b2bf60b,0x37d0e5e5,0xbb184e8c,0xbb74c985,0xbba330e8,0xbb186945,0xbb2f2171,0xbb42251e,0x3b015852,0x3b5e67ec,0x3b1114bd,0x3b9ccd0c, -0x3b80b0b8,0x3a393480,0xb954f222,0xb9b47f49,0x3a6e947a,0xba4d04bc,0x39a39319,0x3b831286,0x3bb788b8,0x3bc155ad,0x3bb14ef9,0x3b0a6a25,0x3940ed7c,0xbb40f453,0xbbb4f0ca,0xbb7fe91b,0x3bbf3f88,0x3ab34405,0x3bcd8f76,0x3c8df094,0x3c652188,0x3c32d282,0x3bc9bf3b,0x3bac3f6d,0xbb801cbe, -0xbbaadcb7,0xbc26f73f,0xbc4f33bb,0xbc3d58ab,0xbc6d5e44,0xbc4a4ec4,0xbc15692b,0xbbcdbf0e,0xbb66b790,0xbb3e5d59,0xbb1901da,0xbb17bcbf,0xbb8afeb7,0xb985e973,0x3a2ad351,0xb6abe4b4,0xb84df059,0x393ada64,0x3aa44f09,0xb9efb292,0xba897570,0xba820341,0x38152df5,0x3a2b4e7c,0x3a8cc67d, -0xb9e629cb,0xbaea1ce2,0xbb387e30,0xbbfa0b48,0xbc29c74d,0xbc4d60e0,0xbbb66e2c,0xb9f26e9f,0x3b025e37,0xbab2104e,0xbbe60cac,0xbbe2fd1a,0xbbe7608b,0xbc08ad32,0xbc331c83,0xbc6598b3,0xbc81364c,0xbc7dae61,0xbc5bccd6,0xbc3b94c4,0xbc235b90,0xbc29f211,0xbc0e6a4f,0xbba8c64d,0xba4afc89, -0x3aeaec72,0x3b4563c1,0x3b418ff6,0x3b399b35,0x3b24448d,0x3a523196,0x39328aa4,0xb9fd9657,0x3ad9a292,0x3b04177a,0x3aa2bcc9,0xbaaee944,0xbb3e9078,0xbb8e46e9,0xbb5d6507,0xbb538e19,0xbbbd56e4,0xbbd24425,0xbc098b5c,0xbc2222cd,0xbc0998f0,0xbc26fcf4,0xbc2e73e4,0xbc2dc2a7,0xbc172345, -0xbc062fa7,0xbbe64304,0xbbbc8109,0xbb8edb74,0xbbb7e064,0xbbfea237,0xbc093584,0xbbe0c630,0xbb5340e6,0xbb0d5958,0xb895a5f8,0x3ab17aff,0x3b8836ad,0x3b6d6515,0x3b61bcf6,0x3b54d49a,0x3b2a58da,0x3b1764f6,0x3ac8c99a,0x3b2bdb21,0x3b6f2e16,0x3bb48f97,0x3b194778,0xb9dc2022,0xbb6317da, -0xbbb54820,0xbbfc2f24,0xbc187f95,0xbc241fcd,0xbc29d21b,0xbc35fd07,0xbc2f82fd,0xbc17cade,0xbc339fc1,0xbc296b87,0xbc214461,0xbc1689c7,0xbc0d04ab,0xbc0968c3,0xbbf687dc,0xbbe434c2,0xbbb8ae4a,0xbb93a9c4,0xbb849769,0xbb669d54,0xbb25619a,0xbab57ebb,0xb9fef271,0x39cfcdf2,0x3aaf1366, -0x3b25096e,0x3b85aa63,0x3b85d084,0x3b87e3ae,0x3b89e979,0x3b8d42e7,0x3b8634e6,0x3b8c346e,0x3b445c37,0x3b1c5e67,0x3ae0b6fa,0x3a8939d2,0x39ba01db,0xb9f307d8,0xbb166937,0xbb886ad8,0xbbbf2970,0xbbfa8ffa,0xbb6b717c,0xbb91d584,0xbb6ee559,0xbb5e79da,0xbb356d94,0xbb5d9675,0xbb386c2f, -0xbb01c240,0xbac5bc92,0xba979abb,0xba670720,0xb9f7e1aa,0xb9822d33,0xb87e7cf1,0xba14c845,0xba147f19,0x399405f5,0x39ba1fbb,0x3a05cd25,0x3a588db2,0x3a32be73,0x3a4657ca,0x3a523b77,0x3a4d300a,0x3a52a9a6,0x3a779432,0x3a106019,0x3936570e,0xb984731f,0xba316c4f,0xba8fbfa3,0xbab05130, -0xbaf00fed,0xbb108afc,0xbb2d6ddc,0xbb4c6169,0xba6a21ff,0xb8612a6c,0x3916ce44,0x3aa924ea,0x3a8d97d6,0x3a861e83,0x3a5b1008,0x3a35f0cd,0x3a84871e,0x3a36b012,0x3ab3b724,0x3ac70a07,0x3abcb8b7,0x3af3d887,0x3ae908ec,0x3acd7789,0x39d47d0d,0xb9809d72,0xb68dd077,0x3904a9b0,0x396f74b5, -0x3921747f,0x3a00ce73,0x39bf161d,0x38d0dd77,0xba301b33,0xba9afeb7,0xbaf10546,0xbabbde74,0xba8d1063,0xb840dc35,0xb9d7ef4f,0xb9a898b9,0x3951f1a3,0xba41704e,0xba78caa0,0xba6ed0e4,0xb9fa94f6,0xb943974a,0x3b0aa4f0,0x3abbfb5f,0x3a9d7e15,0x3a581c40,0x3b25787a,0x3b15e6ff,0x39d51bd3, -0x3af68604,0x3b1fcd72,0x3b2bbe64,0x3b606cb9,0x3b50aa56,0x3b3029e9,0x39f8136e,0xba451cdd,0xbab8425d,0xba1fb552,0x39d3f498,0x3a0274fd,0x3abdd9b4,0x3a95bcb5,0xb8a0eaeb,0xbb19df8f,0xbb800517,0xbb9dc7b4,0xbb80adbd,0xbb1c69c5,0x392ab81b,0xba052bd1,0xba0bea82,0x384f09ae,0xbb1f0a1e, -0xbb4624ce,0xbb1cd941,0xbab71706,0x3a9d6198,0x3beb8697,0x3ba5bd91,0x3b78555a,0x3adae537,0x3b7e036a,0x3b95af2e,0x3ac3fd33,0x3b9fff56,0x3bbab2cd,0x3bb79f07,0x3bf534d3,0x3be4ceab,0x3ba1e927,0x3ab168c6,0xba9badeb,0xbb29dc79,0xba20723f,0x3a4115be,0x3ab65744,0x3b4ade64,0x3b23c626, -0x39f1b55a,0xbb6f68a2,0xbbd6eeef,0xbc1431bf,0xbbf2e5e8,0xbbacfc5f,0xb9991408,0xbac2966d,0xba9c17e2,0x3a9df655,0xbb8bdda3,0xbba9c91b,0xbb801c75,0xbb157b91,0x3a325621,0x3bea1fe9,0x3b3e816f,0x3b332355,0x3b2e05f4,0x3c056142,0x3bed69f9,0x3b143451,0x3bb7fad8,0x3bcdeb2f,0x3beb50ea, -0x3c538af0,0x3c3f9c47,0x3bd91923,0x3b448846,0xb955f550,0xbb343a69,0xbacdaece,0x39ab1eef,0x3a9b2f9f,0x3b8be585,0x3b63e896,0xb9ead596,0xbbfac580,0xbc573479,0xbc702549,0xbc387538,0xbb985218,0x3b213fd2,0xba048139,0xba6bf3d5,0x3a87c9c0,0xbc080fde,0xbc29d8c8,0xbbc49ffe,0xbb4d1213, -0x3b3cf134,0x3c772c3c,0x3ca513e7,0x3c66a8f5,0xbac50cf5,0xbbd0c1b3,0xbb539e8a,0x3b583ef5,0x3bd3f320,0x3c4648d6,0x3c905e0c,0x3b9c4515,0x3a90b33e,0x3bcdaf3a,0x3b13496b,0x3b5dfb07,0x3bc9dde0,0x3bf2a9d9,0x3c002a76,0x3bc2818a,0x3baf51d0,0x3bbbd7f0,0x3bd6ba9c,0x3c06b47c,0x3bfe964a, -0x3baaf8fa,0xbc1de708,0xbc8b8420,0xbc9227d8,0xbbb7f061,0x3adaa82e,0xbb9206ed,0x3c31fa07,0x3c2522f1,0xbba79cba,0xbb1e6aff,0xbabdad23,0xbc85633d,0xbd11d9d7,0xbcbf72f2,0x3c962917,0x3c0c44e2,0x3baf5380,0x3bdff187,0x3b81601d,0x3b4b670e,0x3bd31fca,0x3c334914,0x3c20a025,0x3b624ca5, -0x3b8749fb,0x3b340483,0x3b1bfe3a,0x3a9bf231,0x3a91b512,0x3b297791,0x39d966e3,0x3b36deae,0x3c062080,0x3c19ac73,0x3be7b545,0x3b5d2773,0x3a479e66,0x3b332448,0x3c2b3a67,0xba679a5c,0xbbc7893e,0xbc104fce,0x3ac6b48c,0x3b972367,0x39eed1c6,0x3bc3ac5c,0x3c9dae7a,0x3caad876,0x3c9f2454, -0x3c817721,0x3c10f189,0x3bfc8861,0x3bd5e9cd,0x3a8e2543,0x3b87cca6,0x3b993a45,0x3b0d11fc,0x3b2a547e,0x3b4a989c,0x3ba80632,0x3af40616,0xbabdd115,0x3a2dce71,0xba08e1be,0xbab77bba,0xbad935e5,0xbb44fb0e,0xbb01ad6f,0xb977ec6f,0x39e3b893,0x3b4b7efa,0x3ba47ffb,0x3b633dd3,0x39a3ad25, -0x3b85f2a2,0xbc1015bf,0xbc3aa98d,0xbbc52658,0xbac1b8fe,0x3bbb3173,0x3c25a7c8,0x3c71f6a4,0xb9c9bbe6,0xbba50c74,0xbbdc8929,0xbbb94962,0xbb7d6f8f,0xba97de99,0xbaf3922d,0xbae901d1,0x3ae4b736,0x3b58ae20,0x3b26726a,0x3b987b7e,0x3b5e7ec2,0xb97873c4,0xba55e792,0xba87bd38,0x3929487f, -0xba12dc3c,0x3a2331d9,0x3b62beb5,0x3b8a75df,0x3ba0b665,0x3b995995,0x3b594727,0x3ac9b30a,0xbb2ed0ee,0xbba93ec9,0xbb1176e7,0x3c0b9b51,0x3b8366eb,0x3c13052a,0x3c997ee9,0x3c857bfc,0x3c4e8d83,0x3bc6d9a5,0x3b85a30a,0xbb0afcf8,0xbb5621c1,0xbbeecdbf,0xbc186216,0xbc183923,0xbc2a6459, -0xbc0c346d,0xbbdfabfc,0xbbb2b711,0xbb76ec4e,0xbb862f02,0xbb6a3341,0xbb596c0b,0xbb991fcf,0xba35ba9e,0x395a483e,0x3997b81a,0x38dd4ffa,0x3981e980,0x3a825559,0x3a2e373a,0x36e74625,0xba560c33,0x37995793,0x39ec03bc,0x3ac7f38c,0x3a850d52,0xb82f6fa0,0xbafbee6e,0xbba69cea,0xbc04415f, -0xbc551a3e,0xbbcb7607,0xbac7371b,0x39a17a0b,0xba824f96,0xbb9eb27b,0xbbab0e10,0xbbafc1e1,0xbbfadecf,0xbc5969c4,0xbc796f7d,0xbc87f3b9,0xbc85ee12,0xbc62b4d1,0xbc3dcced,0xbc24a5d3,0xbc2076fa,0xbc0bfe84,0xbbd76522,0xbb1da545,0x39ed4940,0x3b57ca80,0x3b1c21c0,0x3b07e156,0x3aeb84ef, -0x3a1baf0c,0xb926465b,0xbab2c6d3,0x394c13e5,0x3aab4af0,0x3b1aa345,0x389573f4,0xbad16be2,0xbb51fd27,0xbb382dd1,0xbafcd80e,0xbaf2b99c,0xbb3c1689,0xbb8e85b5,0xbb88e86e,0xbba36cb3,0xbbe41f43,0xbbea2115,0xbbfab469,0xbbd2f397,0xbbb4164c,0xbbb7a3b2,0xbbc18a43,0xbbc0b76b,0xbbf3a69a, -0xbc1d34c8,0xbc31360b,0xbc1b6747,0xbbd7339b,0xbbc221a3,0xbb060013,0x39ffa08b,0x3b93e16d,0x3b6eaab5,0x3b5564cd,0x3b45a59f,0x3b0716e4,0x3ac501e9,0x3a23a82c,0x3aaa4c0d,0x3adf5e2e,0x3b2bdce4,0x399610a5,0xbab809f8,0xbb4bf7ea,0xbbad47c3,0xbbfe5582,0xbc206dd8,0xbc1ba701,0xbc10ac1f, -0xbc0addfc,0xbc010c28,0xbc066711,0xbc1ecc6a,0xbc2dc4c8,0xbc21db0e,0xbc23af5f,0xbc1e56ee,0xbc19e52a,0xbc12ec89,0xbc029a2a,0xbbdaf0ef,0xbbb5792b,0xbba51c9c,0xbb91da54,0xbb7635b3,0xbb208048,0xbae5c507,0xba21670e,0x39e4b317,0x3b222af0,0x3b31760e,0x3b213c4e,0x3b27071c,0x3b1f716a, -0x3b19f1c5,0x3b071589,0x3b0470cf,0x3a9fe65b,0x3a49212c,0x39b5abef,0x3888c6aa,0xb7b40d30,0xb9e53fec,0xbaf42ea8,0xbb6e6136,0xbbabdad3,0xbbdec727,0xbb7a3ec0,0xbb8d9391,0xbb843c44,0xbb81dcd3,0xbb73f625,0xbb7723b6,0xbb6845e0,0xbb4f0156,0xbb35c632,0xbb229920,0xbb0ecfa9,0xbaebe347, -0xbac7845d,0xbaa6dbe7,0xbac31546,0xbac5e53b,0xb9d43a02,0xb9ef1aa2,0xb99d9b68,0xb9ca2bd9,0xb9c4649e,0xb9e96d1a,0xb9f6edf0,0xba0e7f1d,0xba17a6cf,0xba134393,0xba4b99c3,0xba81e571,0xbaa3bc3b,0xbac64d33,0xbaed4a20,0xbaf33754,0xbb1c179a,0xbb2e82b6,0xbb42f1fe,0xbb5d11fd,0xbaecd268, -0xba2c333e,0xb9e8033b,0x3a39df37,0x39f41e2e,0x39cd1d49,0x37b64097,0x38be0798,0x39c6d73b,0xb89ec5b1,0x3a4294bb,0x3a668da0,0x3a3df57f,0x3a86b57d,0x3a71c964,0x3a66f54d,0xb9b4a8b6,0xba6692be,0xba3aa136,0xba191783,0xb9e81fd4,0xb9b018f7,0xb7be991e,0xb943773d,0xba27c84a,0xbaad62ad, -0xbae700e0,0xbb1545e8,0xbae16397,0xbab77c32,0xba3d9fae,0xba7ad194,0xba6531b1,0xb99bb884,0xbab0d4ae,0xbaca5143,0xbaadac27,0xba891dd0,0xba5b04e5,0x3ac4728a,0x3a8fa090,0x3a181ce6,0xb99431c3,0x3b01a2a6,0x3afceeae,0xb97ba3ad,0x3ac25881,0x3b00e1a5,0x3b0959b3,0x3b2202d4,0x3b11e964, -0x3b130466,0xb9b6aa90,0xbacddbee,0xbb059b14,0xbabdeba2,0xb9cd516c,0xb7095fbe,0x3a7d11a0,0x3a0405f8,0xba9d82f2,0xbb51fc11,0xbb904bba,0xbba16da8,0xbb5f9243,0xbb02f80f,0xba138215,0xba898418,0xba984034,0xb9b4244c,0xbb4398aa,0xbb67e895,0xbb2cf85b,0xbb02a97b,0x397e56dc,0x3bd096a4, -0x3b980d93,0x3b5563ff,0x3a109642,0x3b641d9e,0x3b89fe8b,0x3a278745,0x3b9ab545,0x3bb3b3df,0x3ba30d77,0x3bc7750b,0x3bb47b1b,0x3b921ea4,0x396e37c8,0xbb0e95cc,0xbb48f54c,0xbad9aca3,0xb913e304,0x3a88dcb7,0x3b3a3543,0x3afda1a2,0xba91fd3d,0xbb9ef35f,0xbbf0ba8c,0xbc13e434,0xbbd07dbb, -0xbb8e6e2a,0xbaada585,0xbaf956c4,0xbafae0e5,0x3a5375e9,0xbba766fe,0xbbc27d88,0xbb74d2b3,0xbb43d742,0xb9e8f5a1,0x3bc9c9af,0x3b405b5c,0x3aff3050,0x3a7973ac,0x3c0c8e94,0x3c04eac0,0x3b157a9d,0x3bc2bd1a,0x3bd2f5bf,0x3beaf2eb,0x3c4e1ddc,0x3c3cba72,0x3be612c9,0x3b06f3aa,0xbaee1347, -0xbb8a2091,0xbb4a717c,0xba3c8164,0x3a898805,0x3b8bfa43,0x3b3af7c8,0xbb33cc0e,0xbc1704cf,0xbc5a47da,0xbc5cc20b,0xbc074744,0xbb18a82d,0x3abf11e4,0xba8930df,0xbadf418b,0x3a8981df,0xbc0adcd2,0xbc2521e1,0xbba85b5f,0xbb6698ef,0x3b25d942,0x3c702825,0x3cb043f6,0x3c887b0e,0x3a7cc626, -0xbc07ca7e,0xbbdb0eee,0x3af62e18,0x3b75dc95,0x3c2270e9,0x3c9d3b25,0x3ba6fa84,0x398a039c,0x3b95cd19,0x3acd961d,0x3b54c2f4,0x3bb55b3c,0x3be574db,0x3bf19c3b,0x3bb72485,0x3ba7a9ea,0x3baac6b4,0x3ba4b972,0x3beb7be5,0x3bb1c374,0xb9db7055,0xbc3583aa,0xbc88552b,0xbc8eb4c2,0xbb97d57b, -0x3aa4b82c,0xbbe0e501,0x3be5fd49,0x3bb545b8,0xbc20b761,0xbb89fc4c,0xbbdee364,0xbc7a3e04,0xbd1634dd,0xbcd3f5c0,0x3c89d006,0x3c24a017,0x3bd75022,0x3bb1132b,0x3b790808,0x3b603699,0x3ba286bc,0x3c29596c,0x3c218074,0x3b73ad30,0x3b4f1eee,0x3ada2dc5,0x3b2f9c5c,0x3affef72,0x3ad3dcf6, -0x3ada31fd,0xb9efffc5,0x3abe617f,0x3bad9502,0x3bfaf360,0x3bc22cad,0x3b1e2a46,0x39cde925,0x3b3bfbd7,0x3c3ad294,0xbb8b9f46,0xbc13c0bc,0xbbfddc75,0x3b334102,0x3bd1adad,0x3b8a070c,0x3b30c119,0x3ca1df69,0x3cccdb4f,0x3cc4e846,0x3c9c1514,0x3c12b976,0x3bc9d985,0x3bd1a756,0x3b80d6cc, -0x3baad1a3,0x3b9fe531,0x3b09ffa5,0x3b14cd9d,0x3b252617,0x3b904436,0x3b1ab890,0xb9ca646c,0x3a5e1550,0xb99c6583,0xbac6ab71,0xbb1cbfc8,0xbb2e2a13,0xbafbe1a8,0xbae20a35,0x3b3f6c0b,0x3bcb0426,0x3be58acf,0x3b8d5ee6,0xb8e91bb2,0x39a0b7dd,0xbc238621,0xbc3a1f13,0xbc08eb9c,0x3b93b3ff, -0x3c39fde9,0x3c1b2112,0x3c700011,0xbb7670aa,0xbc079d61,0xbc2bebde,0xbbec8988,0xbb147b42,0xb9d93134,0xbab5fa3f,0xba1cf7a7,0x3a800280,0x3b1bdee9,0x3b17af38,0x3b68b534,0x3b116c4f,0xba62ecc8,0xbaa3dc7a,0xbae5c479,0xba91e84d,0xb9df8bb9,0x3a3f6c66,0x3b1cb836,0x3b1d282f,0x3b679916, -0x3b85bae7,0x3b8f72d7,0x3b2c8b9a,0xbaf4e021,0xbb33ea8a,0x3a5abd7a,0x3c11a423,0x3c03cf6e,0x3c43e827,0x3c815f9b,0x3c7ee73e,0x3c415184,0x3bb86e8c,0x3aeb141b,0xba72fd3f,0x3a00eab8,0xbb7cc5e5,0xbbbb09de,0xbbd18a95,0xbbd36b43,0xbb9f2e69,0xbb89c508,0xbb8316b6,0xbb561362,0xbb9436b5, -0xbb984537,0xbb8d1047,0xbb8dfee3,0xbad6dddf,0xba056436,0x3a88ac5c,0x395989d2,0x39688c3e,0x3a6dd3c2,0x3af72c6f,0x3ad51c9f,0x39e1dcf7,0x3a217630,0x3a4db289,0x3ae603fa,0x3ad37d91,0x39ce889d,0xbb1235ff,0xbb4346c0,0xbb99c1da,0xbc1b2bf2,0xbba590b1,0xbb17214e,0xba17faf6,0xbadca2e6, -0xbb48ebfb,0xbb9079fe,0xbba8d922,0xbbff0136,0xbc6dafcf,0xbc84c308,0xbc8b8035,0xbc85266d,0xbc623309,0xbc3e781d,0xbc248430,0xbc142fc9,0xbc03ec4f,0xbbee01df,0xbb7ffb3b,0xba93bdfb,0x3b2d49df,0x3b06c071,0x3b03a2d6,0x3acd573a,0x3a7ced53,0x388ba669,0xbaa74603,0xba093ce7,0x39f6be50, -0x3b458d1d,0x3ac23b6a,0x38f51335,0xbaa31a96,0xbb0f1bd4,0xbace323f,0x3a0b68e4,0xba04b39e,0xbab314a3,0xba2a640a,0xbb0d63aa,0xbb8a7e4d,0xbb856d83,0xbba2f8e6,0xbb8c89d8,0xbb67706f,0xbb9e6e86,0xbbd4899c,0xbc00c9cb,0xbc158dba,0xbc2ed9c2,0xbc43e2a1,0xbc3436ba,0xbc184739,0xbc12b72d, -0xbb8bf29b,0xba755c99,0x3b67c132,0x3b35008e,0x3b2db0b8,0x3b2e4055,0x3ad68e66,0x3a902124,0x39bc6f11,0x396eff9c,0xb9100166,0xb98d3c02,0xbab9f51c,0xbb04a657,0xbb23a53d,0xbb8eaa0e,0xbbd38841,0xbc091b51,0xbbfb052b,0xbbd88f29,0xbbc1ab1b,0xbbac1a03,0xbbcc3122,0xbbe6c474,0xbc111ab3, -0xbc061c17,0xbc122bb3,0xbc0fbacb,0xbc0a1bad,0xbc0badc2,0xbbf0cc79,0xbbd50f1e,0xbbb93d85,0xbbaa961c,0xbb99a0c6,0xbb8fcb32,0xbb6074d8,0xbb521cea,0xbb1e45d5,0xbad7f3da,0x39898357,0xb98f66c9,0xb9ecd25d,0xb9ad0a94,0xb9d4d480,0xb9d7272d,0xb9fa442c,0xba080bb9,0xba5abed1,0xba97753f, -0xbab823b1,0xbabf83f3,0xbaab7b8e,0xbad03bfb,0xbb16a2e0,0xbb64d1ef,0xbb93e6d4,0xbbb13fcf,0xbb80aa9e,0xbb84ec3c,0xbb835d3d,0xbb826444,0xbb80316a,0xbb7d63a6,0xbb7805f5,0xbb7497ed,0xbb67b74b,0xbb59e016,0xbb480cc0,0xbb378fe2,0xbb26e5e1,0xbb14e9ea,0xbb22f7d9,0xbb2e199f,0xbaad176b, -0xbad25ca8,0xbacfe9a2,0xbafef9c6,0xbae9722f,0xbaf52b70,0xbaf799ff,0xbafebb2f,0xbb01f5bf,0xbb010b64,0xbb0c82e4,0xbb156988,0xbb204bce,0xbb2c4c3b,0xbb3940af,0xbb37e4ea,0xbb4e589a,0xbb5627d7,0xbb5e9d56,0xbb6d5882,0xbb4dccaa,0xba8dcfd5,0xba6e3d87,0x390b46b2,0xb7c9961c,0xb8b690ac, -0xba2ecb5a,0xb9c2bd13,0xb8ca3abc,0xba2ba000,0x39897e0a,0x39cfea69,0x395c23f6,0x39a8bd75,0x39524667,0x39c14a85,0xba601274,0xbaac83e4,0xba9a6c74,0xba8abe64,0xba6e8529,0xba38860f,0xba01de75,0xba32ed3b,0xba9fdc92,0xbae5f2dd,0xbb072cb7,0xbb1ce6fb,0xbae14ae9,0xbabee388,0xba94448b, -0xbaa9be77,0xbaa1b6bd,0xba2949a3,0xbae00fd7,0xbaf83254,0xbacf24e4,0xbabc8b08,0xbab399e3,0x3a4b1c88,0x3a24c1ff,0xb89cb7bf,0xbab6eac4,0x3ab1b80e,0x3acb354e,0xba2ed40b,0x3a9b428b,0x3acf83d9,0x3ae3df13,0x3ac9da65,0x3aa8517d,0x3af78187,0xba80742b,0xbb0b657d,0xbb1f1266,0xbb027f1a, -0xba81a821,0xb9dcb27e,0x399c2f96,0xb9963734,0xbb0a7a47,0xbb72eb22,0xbb9187d4,0xbb94fb97,0xbb2141df,0xbaa048d0,0xba61e4d0,0xbab12904,0xbad4dd28,0xba3a7bda,0xbb533e4d,0xbb723eb3,0xbb3316aa,0xbb1d4109,0xba4e8bcb,0x3ba4569a,0x3b7eb275,0x3b2dabc7,0xba4b3810,0x3b3dd52b,0x3b6ea9b1, -0xb8ffdd13,0x3b93b826,0x3babe68e,0x3b9265ae,0x3b932e46,0x3b7b1a8e,0x3b873033,0xba4314ae,0xbb3bea88,0xbb55519e,0xbb195d55,0xba562855,0x3a2f9f29,0x3b051653,0x3a6462ea,0xbb224866,0xbbb766a9,0xbbf019f4,0xbc0495b4,0xbb93f667,0xbb326df6,0xbac8c976,0xbb010ced,0xbb16abc9,0x39fce196, -0xbbac2103,0xbbc64215,0xbb64737a,0xbb6b06aa,0xbae1aa89,0x3b9a6bb5,0x3b17f786,0x3a2cb5c8,0xbab57027,0x3c0637e3,0x3c0cba8a,0x3b1280b6,0x3bcf7628,0x3bdc27c1,0x3be4811e,0x3c3b63af,0x3c2c7916,0x3be7ca63,0x3a65c4ae,0xbb498f67,0xbb9a76cf,0xbb7ff190,0xbad5263d,0x3a51a559,0x3b5847a8, -0x3ab066af,0xbb9a6bc3,0xbc249957,0xbc4c6b02,0xbc3a559c,0xbb8e74f6,0x3a5b2edb,0x3abf33c4,0xba9b3122,0xbb1af648,0x3a101b39,0xbc027e47,0xbc144a48,0xbb8f4671,0xbb833fae,0x3ae134fc,0x3c59332b,0x3cb39498,0x3c96e039,0x3b571a9c,0xbc1f5cfb,0xbc24662c,0xb983c511,0x3ac6147c,0x3bfd3732, -0x3c99df45,0x3ba3fec1,0xb976215c,0x3b40bab9,0x3aa24cb1,0x3b4a1d7d,0x3b8916ea,0x3bbe904b,0x3bd3e816,0x3bb31a42,0x3b964e78,0x3b8e236d,0x3b6b8edf,0x3bc01f35,0x3b505679,0xbb946003,0xbc3e7d2b,0xbc7eef2e,0xbc7e0cc4,0xbb50e521,0x3acc1628,0xbbe03854,0x3b7d145e,0x3a9c4866,0xbc528ed3, -0xbbc53a9f,0xbc381f66,0xbc86ba0a,0xbd0f1d2e,0xbcd4347b,0x3c3790a1,0x3c3361cb,0x3c0bc004,0x3ba945ca,0x3b61ef87,0x3b5823b3,0x3b705f90,0x3c184827,0x3c1bd137,0x3b8e4dc5,0x3b2d9348,0x3a8ce5ab,0x3b440776,0x3b3dcbe5,0x3b0a098c,0x3a32d5a7,0xba480472,0x3a166c8a,0x3b2dbfba,0x3bc53b33, -0x3b9ea3a0,0x3ad616ee,0xb962efaf,0x3b298f86,0x3c425245,0xbbbe21a5,0xbc23db13,0xbbc5e534,0x3b2645b4,0x3be40c43,0x3c05dee1,0x39678519,0x3c9af500,0x3cd36f2d,0x3cd40d56,0x3ca442cd,0x3bf04454,0x3b506e50,0x3ba86eae,0x3be302b0,0x3bccb72e,0x3ba744be,0x3b031249,0x3af0f3cb,0x3af3433f, -0x3b57162b,0x3b39c6e2,0x3a56578c,0x3a2e51ba,0xb9fdce38,0xbb06e2f1,0xbb3323d2,0xbaf7402b,0xbac0e75c,0xbaec2ebf,0x3b94f1e8,0x3c003ec8,0x3c09ac08,0x3bbeec24,0x39e690f0,0xbb81ea9b,0xbc16beb0,0xbc15ac62,0xbc2035fd,0x3c34b203,0x3c82a9d8,0x3bbf92f1,0x3c543dde,0xbbde70fb,0xbc217905, -0xbc54c6a9,0xbc0d3ccd,0xba7a00ab,0xb9c488a5,0xbaae8bee,0xb689a897,0xb91a818f,0x3a79fc0a,0x3ac856e0,0x3ae61676,0x3a20063e,0xba9ac0b1,0xbae3315a,0xbb280ee0,0xbb160004,0xb9c7e78d,0x3a4155c6,0x3a92d202,0x3a80a177,0x3b26a1fc,0x3b68fa74,0x3b93802e,0x3b44931f,0x39dd032f,0x38fc4868, -0x3b785df3,0x3c10c60e,0x3c3b09cc,0x3c5cc5b3,0x3c21efad,0x3c38cc6b,0x3c0a4398,0x3b98c2e3,0xba60a9cc,0x3a789279,0x3b97db3f,0x3938ce2d,0xbac854f5,0xbb06f451,0xbb1b2676,0xbac36782,0xbae2ec98,0xbb18947c,0xbb1306bc,0xbb7677e8,0xbba300dc,0xbb9ef2e6,0xbb70f6a8,0xbb2ac07a,0xba9e058a, -0x3ac94ac6,0x39374776,0x3922b886,0x3a4f0b07,0x3b1fb42a,0x3b2e3e40,0x3ad38ebe,0x3aa39a54,0x3a896160,0x3a9b23f4,0x3ab3d4e6,0x3910c083,0xbb435c0b,0xbb0234e7,0xbadced32,0xbb5d2d74,0xbb225b4a,0xbb122b89,0xba2fee66,0xbab315c5,0xbb184614,0xbb8a0162,0xbbd0d02c,0xbc17f6b0,0xbc78c7e6, -0xbc8a1f08,0xbc8a2021,0xbc7672c8,0xbc582ee1,0xbc3976c3,0xbc1feaac,0xbc05e22a,0xbbeeb1c8,0xbbe8ddfb,0xbb9e4373,0xbb28d325,0x3a7d3af1,0x3afaa843,0x3b239d05,0x3ae25382,0x3ac863d5,0x3a399f09,0xb954da4b,0xba1f78e7,0x391b6df9,0x3b4f2eee,0x3b0ca441,0x3aa06991,0x39361e21,0xba888aa9, -0xba9936aa,0x3a43ca8d,0x39f7643c,0x3925e1d7,0xb83631c3,0xba69692e,0xbb1044c9,0xbb00d281,0xbb3e39d5,0xbb366a59,0xbb12524a,0xbb8ffa0a,0xbbe4749a,0xbc1abffe,0xbc28b7e6,0xbc35f344,0xbc48a5d4,0xbc3aebb3,0xbc2e4e64,0xbc27498e,0xbbbd4e8f,0xbb0ce19b,0x3b011c0b,0x3abec79c,0x3ad1df58, -0x3b05415e,0x3aa451f9,0x3a49ee20,0x3980e7f1,0xb979d3d0,0xba80b833,0xbad9424c,0xbb019451,0xbafc9916,0xbaec8259,0xbb47db12,0xbb8ba2bf,0xbbb628e4,0xbb9c1bed,0xbb7a6f5d,0xbb4cb5e0,0xbb3858ac,0xbb9ba277,0xbba3b7af,0xbbd24679,0xbbc9d8ea,0xbbe3a098,0xbbe1151c,0xbbd0d4cc,0xbbd8a5fc, -0xbbb7d4e1,0xbbac9e80,0xbb9ede68,0xbb95a504,0xbb8cc7b1,0xbb8f4f4a,0xbb807b76,0xbb854dea,0xbb736d80,0xbb50a825,0xbb02468b,0xbb0f9b50,0xbb0f64f4,0xbb03ba1e,0xbafdbdc0,0xbaeece27,0xbad9299c,0xbacecbe4,0xbae5787c,0xbb09b8fd,0xbb19d582,0xbb1f7b6a,0xbb20ab2c,0xbb38a77d,0xbb482526, -0xbb70fe10,0xbb874496,0xbb91e5ba,0xbb864853,0xbb853981,0xbb860259,0xbb8444b1,0xbb8264b7,0xbb834180,0xbb82eba6,0xbb860fa1,0xbb86f5a8,0xbb846a2d,0xbb7e2213,0xbb7a7394,0xbb710cc6,0xbb656373,0xbb6d031b,0xbb7305d6,0xbb2ec522,0xbb3f2997,0xbb3fe0af,0xbb4bc5d3,0xbb4286b8,0xbb4440bf, -0xbb42e285,0xbb42852e,0xbb423dd5,0xbb3bfd32,0xbb4b4c8e,0xbb53fd72,0xbb5e9424,0xbb6a4dde,0xbb7403be,0xbb76244a,0xbb7d05dc,0xbb7ce6fa,0xbb7e0826,0xbb816ffb,0xbb935055,0xbaa3c28c,0xba95de9e,0xb998d2f8,0xb9b0e116,0xb9e228e1,0xbaa6906c,0xba27a2f6,0xb9ebea06,0xba8dd8a2,0xb9251994, -0xb7830619,0xb91d3c15,0xb9a45958,0xb9e6452a,0xb7e9a6e1,0xba98c69c,0xbac77fd8,0xbaccb525,0xbab29d00,0xba996564,0xba5c3f11,0xba560bda,0xba8329e3,0xbac28cf5,0xbaf9c8e7,0xbb07da7b,0xbb117d6e,0xbabe747f,0xbaa29e24,0xba9fa881,0xbab1dd87,0xbaae6eb1,0xba510dad,0xbae9e231,0xbb01074f, -0xbadb11fe,0xbacf2c65,0xbad6663f,0x3896003d,0x3950d70f,0xba03dd25,0xbb1545b0,0x3a479fff,0x3aa17711,0xba4118d8,0x3a8bbdb7,0x3ab31cb8,0x3ad3325d,0x3a500645,0x3a089c31,0x3ada1437,0xbab2baa3,0xbb1de1ba,0xbb2f967f,0xbb122d4c,0xbab5e5d7,0xba192cd5,0xb9ab73c1,0xba814335,0xbb27198b, -0xbb7c4cb5,0xbb878cc1,0xbb7b540c,0xbaa81562,0xb9626afa,0xba49fd29,0xbab17341,0xbaf01a2c,0xba7e4e6e,0xbb4ed371,0xbb65d782,0xbb306c04,0xbb2392fe,0xbac2ddbc,0x3b5d8722,0x3b4fa981,0x3b0d9100,0xbb08d40e,0x3b0e31bb,0x3b4114f5,0xba045682,0x3b8bbb66,0x3ba57ad8,0x3b8b9833,0x3b4b1c9e, -0x3b14d720,0x3b832102,0xbabae322,0xbb522e8c,0xbb5ff3ed,0xbb2f530b,0xbaa43d6a,0x39e380b8,0x3a8110eb,0xb9a56c28,0xbb50ec84,0xbbbf8b27,0xbbdc29e5,0xbbd9e3b2,0xbb195f3b,0xba40bd2c,0xba994e7e,0xbad61afe,0xbb15ac60,0x392d3506,0xbba21953,0xbbbb0008,0xbb61dde7,0xbb7878b8,0xbb24a41b, -0x3b3ab549,0x3ae56d1b,0xba0b591d,0xbb7c9796,0x3be4f821,0x3c0dc605,0x3b207324,0x3bdff541,0x3bebea42,0x3be27737,0x3c1ecca7,0x3c11b1c3,0x3be6a532,0xb995e346,0xbb7f25f6,0xbb9b3e33,0xbb84832f,0xbb07282d,0x3a5e4ea2,0x3af962d4,0xb9dd4f99,0xbbbd0de3,0xbc26fcea,0xbc35116e,0xbc1220fe, -0xb9b3a957,0x3b887b8b,0x3afe6f95,0xba6cba0d,0xbb379b61,0xb9bed239,0xbbeb33ee,0xbbf9e211,0xbb841103,0xbb86b8f3,0x3a67ace7,0x3c30562a,0x3cad1dab,0x3c9d84b0,0x3bae89ce,0xbc23b274,0xbc4c67ee,0xbb39084c,0xb8756b65,0x3bbdea08,0x3c87179f,0x3b9c6ac2,0xb95f3f64,0x3ab7b150,0x3aa60158, -0x3b4bd8f3,0x3b2b03b1,0x3b8da57b,0x3baac919,0x3ba79036,0x3b6c57cb,0x3b5551ff,0x3b2dde45,0x3b9978fa,0x3ac4bd7e,0xbbdbd7c6,0xbc3d0896,0xbc68621d,0xbc4fc71a,0xbacaad28,0x3b181e4a,0xbb917ca3,0x3ac424c8,0xbb23a848,0xbc5eed3e,0xbbe66a48,0xbc5b065f,0xbc8ea5ff,0xbd0344e8,0xbccdb783, -0x3b4b2e3e,0x3c365a77,0x3c32f309,0x3bc30e40,0x3b38cd27,0x3b21ed86,0x3b23e4db,0x3bfe6007,0x3c0c9c6e,0x3ba1d4d2,0x3b1fdcca,0x3a46319f,0x3b40d636,0x3b5ae524,0x3b0ddadb,0x39460abc,0xb9f1be4c,0x392089ea,0x3a0d28d4,0x3b7ae214,0x3b551e92,0x3ad5e24f,0xb9ed0bc9,0x3b284e5d,0x3c43739e, -0xbbd02039,0xbc27314d,0xbb7f9702,0x3ae0f12a,0x3be7935f,0x3c4bed7b,0xba64bac5,0x3c856927,0x3ccada56,0x3cc90ffa,0x3c994624,0x3ba0421a,0xba603a0c,0x3b248be6,0x3c10f2a2,0x3be66d3d,0x3baf9b0f,0x3ad25986,0x3ab6a540,0x3a9d41bc,0x3b021d26,0x3b5424f3,0x3b01893b,0x39e87925,0xba340efe, -0xbb126c96,0xbb199872,0xbaab2786,0xbaa146af,0xbace2b73,0x3baa6bc1,0x3c0af476,0x3c1dc38a,0x3beb1d45,0x3aa35cb6,0xbbd64a61,0xbbd76b83,0xbb952e4c,0xbbddeb5b,0x3c6b4e05,0x3c80174f,0x39d84c17,0x3c0dcbe6,0xbc0e97ea,0xbc339773,0xbc5db853,0xbc160280,0xba05d586,0xb98abf20,0xba6999d8, -0x396ef015,0xba842a02,0xb9b16175,0x3a114186,0xb903d5fa,0xba807661,0xba9e7133,0xbb1776f4,0xbb5eccc1,0xbb50c3ed,0xba30ce61,0x396a282e,0xba27399f,0xb9a63a57,0x3ac30be6,0x3b291c20,0x3b80b949,0x3b3f8366,0x3b3c8239,0x3b3a4f38,0x3bce8edd,0x3c11bdff,0x3c5d45a8,0x3c57c079,0x3b713fa9, -0x3bb2b048,0x3b8aaa50,0x3b3f8791,0xbb388e33,0x3b8cd4ef,0x3bf88734,0x3b682810,0x3b04f58c,0x3aee3c80,0x3a933997,0x3a8dd845,0x39a473b2,0xba6f4c87,0xba9858de,0xbb08220c,0xbb92acfd,0xbb9feabb,0xbb587cda,0xbb4dda28,0xbac928ae,0x3ab273a8,0x397728ce,0x39adfdd8,0x3a474b20,0x3b2ac1db, -0x3b49ebfb,0x3b22005c,0x3ae004bd,0x3a8363c0,0x39e4e4b5,0x3a1ac938,0xba4676b6,0xbb61d2e6,0xba98c32f,0x3a79d8ae,0x3b56f2e8,0x3aace63c,0xb9646d6b,0x3a7f03af,0x3ac8ea91,0xbb4907d5,0xbb9882bd,0xbc01c1d5,0xbc3529dd,0xbc7f5fc2,0xbc8ae5c4,0xbc842437,0xbc58155f,0xbc46de0c,0xbc2f4765, -0xbc16969c,0xbbee9787,0xbbcdc638,0xbbcc75e6,0xbbac183d,0xbb79bf08,0xba89b795,0x3adb6626,0x3b3e2ace,0x3b018026,0x3afb7f5f,0x3ab9fafd,0x3aa6666f,0xb9a91e28,0x39b10db5,0x3b2ecdfb,0x3b1e5cbc,0x3b095b8a,0x3a7658e4,0x38e9a753,0xba1707dc,0x39af794d,0x39d28829,0x392fa8e1,0xba9c57c0, -0xbabefe2f,0xba21b8b4,0xba0a22da,0xbadf81d4,0xbb11b7f8,0xbb11cd80,0xbb93e9d8,0xbbf0d124,0xbc277cc7,0xbc2f89a2,0xbc32b35f,0xbc4329f5,0xbc337b71,0xbc2fb121,0xbc233f7e,0xbbcf14e8,0xbb3e6374,0x399f9329,0x39ba3c03,0x3a5a6a82,0x3b02cf16,0x3ad1ed62,0x3a97a3ec,0x3a75430d,0x39b7d0ff, -0xba0a14f3,0xbacb85b6,0xbaaeb061,0xba77b79a,0xba083e99,0xba9bc24a,0xbada5e5b,0xbb1b80ea,0xbade6387,0xba8b2280,0xb9f5d078,0xba3462a4,0xbb7e8132,0xbb81155b,0xbb9fef8e,0xbb9612dc,0xbba7dd46,0xbba5178f,0xbb908275,0xbb90f34f,0xbb7873de,0xbb75d982,0xbb70d70c,0xbb68db40,0xbb676aa8, -0xbb7da740,0xbb7a4571,0xbb860a03,0xbb7dc304,0xbb5e1424,0xbb3fae9f,0xbb1e5495,0xbb1f6546,0xbb143b15,0xbb0e1d06,0xbb05adfa,0xbae96478,0xbad26d4c,0xbaeb394a,0xbb0facf9,0xbb1f6c43,0xbb2a5ac9,0xbb35c95b,0xbb4e34fd,0xbb54f7c5,0xbb6a3c37,0xbb7635ed,0xbb7b4707,0xbb7228bc,0xbb6990b2, -0xbb7f8f58,0xbb82dc48,0xbb886bd7,0xbb73b345,0xbb8263d3,0xbb8b7261,0xbb9117af,0xbb92ed29,0xbb919b22,0xbb9552bc,0xbb9499bc,0xbb93ad6d,0xbb89f4af,0xbb803d27,0xbb7982c9,0xbb6f0c6c,0xbb63d604,0xbb517a1d,0xbb51bea5,0xbb4ffa4a,0xbb4df7cd,0xbb4bdd1e,0xbb4b0765,0xbb43e2ff,0xbb51a2fd, -0xbb57c063,0xbb613136,0xbb6a62fd,0xbb70f51d,0xbb75224f,0xbb73af76,0xbb70a2db,0xbb6f61df,0xbb6ebf81,0xbb972b7f,0xbaa2e73d,0xba9d86fd,0xba0f59d8,0xba03e45e,0xba1c1857,0xbacfe123,0xba467e88,0xba2c5f02,0xba9d783b,0xb9c4949d,0xb969f921,0xb9748f44,0xba344a37,0xba550172,0xb951537e, -0xbaa765c4,0xbacd4636,0xbae5a590,0xbac3b670,0xbaa8dfdd,0xba6296b4,0xba82ff9a,0xba9a0139,0xbacc88be,0xbaf7c1e8,0xbafdc1db,0xbafc7465,0xba8f6c76,0xba6da7b9,0xba8c7d94,0xbaa33307,0xbaa88cec,0xba6dc6ef,0xbadef17c,0xbaf3c000,0xbacf09e0,0xbaca7c42,0xbaddeb54,0xb9fd03f3,0xb9042be6, -0xba315d31,0xbb30e378,0x39a7b652,0x3a814c9d,0xb9fb2cdb,0x3a883efc,0x3aa54963,0x3add6a28,0x39a1927a,0x37251bb6,0x3ac2eaa0,0xbac5274c,0xbb216771,0xbb3c24af,0xbb154c22,0xbac9f3a5,0xba2c4bf8,0xba627ae1,0xbaccf189,0xbb33d5f7,0xbb799764,0xbb72d4a2,0xbb473ea3,0xb950ea3d,0x3a3c2c99, -0xb9d52d84,0xba9e586c,0xbafa60d0,0xbaa7ced9,0xbb40ce35,0xbb4b860f,0xbb1c5385,0xbb1a87d1,0xbae08bb6,0x3aefdb42,0x3b2499a6,0x3af7ff1c,0xbb3d4f85,0x3ac57d58,0x3b14fc86,0xb9c62641,0x3b84553f,0x3ba064a5,0x3b916c43,0x3b0bed1c,0x3a91e4e9,0x3b81306d,0xbaea1565,0xbb54a06d,0xbb6ea78d, -0xbb392aba,0xbac71ef6,0x394c1e75,0xb8fae97b,0xbabca0b8,0xbb6d5706,0xbbbf6c9d,0xbbc27618,0xbbac49b7,0xb9b90177,0x3a939692,0xb9be0033,0xba8a9385,0xbb0cba0d,0xba04f930,0xbb92d0f0,0xbba6abf9,0xbb4ba208,0xbb6acaf8,0xbb2bb2c3,0x3a757506,0x3a9dcef6,0xba9680fb,0xbbb2cd12,0x3bb4d157, -0x3c08fedf,0x3b437265,0x3bf00780,0x3c005e25,0x3bed7af8,0x3c00dd3b,0x3be93f59,0x3be4be4e,0xba9c7210,0xbb8c2641,0xbb99e198,0xbb7ab356,0xbb02fb93,0x3a73a024,0x399b50d0,0xbb132955,0xbbd45877,0xbc23951b,0xbc1c2852,0xbbd9d6cf,0x3b48b679,0x3be260b9,0x3b35664f,0xb9f8ebc4,0xbb502371, -0xbaeb80c4,0xbbd38c75,0xbbc5b847,0xbb57ef1a,0xbb71b1b0,0x37f9b02c,0x3c00a001,0x3c9ba7cb,0x3c9a1e98,0x3be47c3f,0xbc170066,0xbc5f9b4d,0xbba97e48,0xba73aa37,0x3b8b6374,0x3c524c9f,0x3b99d88c,0x39b0e2f4,0xb91a295c,0x3acbe66a,0x3b58d1d1,0x3a924762,0x3b335f7f,0x3b68421d,0x3b82e296, -0x3b0e5cb9,0x3b09c5d4,0x3b0879de,0x3b5d7ceb,0x38910a12,0xbbf30af5,0xbc3b0bfc,0xbc5158f3,0xbc0d9f48,0x393fdc32,0x3b48ba22,0xba826d72,0xb8e89681,0xbbae80cc,0xbc5443a2,0xbbef3580,0xbc60572a,0xbc88653c,0xbceb18c0,0xbcc4f792,0xbbb0a081,0x3c2f8695,0x3c5c2013,0x3bef5982,0x3b07e2e4, -0x3a8e6759,0x3aa18d27,0x3bc395e0,0x3bf20f6f,0x3bb106ad,0x3b27029e,0x3a3f13c7,0x3b2af2c3,0x3b48bbe0,0x3af01c22,0x39ade3f4,0xb8f94487,0xb9a67184,0xbaafbe91,0x3a9eb853,0x3aaea8d6,0x3a8b5711,0xb8696c31,0x3b3a0d93,0x3c2dec1f,0xbbc96ece,0xbc1655fa,0xba3dae02,0x3aa1bbcd,0x3befa370, -0x3c8ab3c2,0xba88b4ee,0x3c4dca14,0x3cc3edaa,0x3cab2657,0x3c790211,0x3b07ac0d,0xbba270b3,0xba5dee8f,0x3c14dc4f,0x3bf0a8a9,0x3bb46c7b,0x3a8f16db,0x3a68161a,0x3a04be12,0x3a6f2081,0x3b62633c,0x3b3bc15a,0x395c6593,0xba2f761a,0xbaf5e58d,0xbad8e022,0xbaad79ca,0xbaa3dff7,0xba45d490, -0x3bb515cb,0x3c0c0752,0x3c1b63b0,0x3bf4e300,0x3af8525a,0xbbe2b36f,0xbb6581f4,0x39815519,0xba2743ae,0x3c433d7e,0x3c10057d,0xbbbddd47,0x3b1877b5,0xbc1baa16,0xbc44a8df,0xbc4cd087,0xbc08ab16,0xba567561,0x39668b4b,0x38ffa8fb,0x3a228fcb,0xba948825,0xba950dbd,0xb987a049,0xbad0689c, -0xbb0f8047,0xba919b8d,0xbb40c19f,0xbb8664bc,0xbb73c6da,0xbab6f198,0xba7a7b06,0xbb1ecb0a,0xbabd8806,0x39904f4a,0x3ace8de8,0x3b361e50,0x3b21e048,0x3b959ce3,0x3bbc5596,0x3c099bc3,0x3c0a34f3,0x3c6a08a2,0x3c407a2a,0xb928b212,0x39a0f51a,0x398f6ef9,0x3a41970f,0xbb82442e,0x3c0712d4, -0x3c191552,0x3bc1ba5d,0x3b8c6308,0x3b7aa5a2,0x3b521398,0x3b2098b4,0x3ac4f261,0x38aca2ab,0xb95a2caa,0xb94f0d9e,0xbb5a39c1,0xbb900b24,0xbb5925d3,0xbb58662e,0xbadc085c,0x3a0503e2,0x39c322f5,0x3a466544,0x3a57a206,0x3b2f1808,0x3b490646,0x3b25e1ce,0x3ae2f0aa,0x3a531e3d,0xb9534d8d, -0xba7bce22,0xbb0d4723,0xbb5e3d60,0x386026c1,0x3b6a9bc3,0x3c10503e,0x3bab839d,0x3b5705cc,0x3b9bffcc,0x3bcbe798,0xbba3fada,0xbbbf8caa,0xbc1b32d9,0xbc4a5ac0,0xbc7bc25d,0xbc8485f9,0xbc724ab6,0xbc378cd6,0xbc31a6f4,0xbc207c2c,0xbc079cc6,0xbbd4617f,0xbbae829d,0xbba8e318,0xbbb2256a, -0xbb9a5b1a,0xbb2f020a,0x3a8f876d,0x3b33c8c6,0x3b0eba4b,0x3b117f25,0x3b0828ee,0x3b2279f1,0x39b36cd1,0x3a242c1e,0x3b02fcd4,0x3b30b433,0x3b4aed5b,0x3b0b52de,0x3aaae04f,0x394005b9,0x397c98eb,0xb96ea15d,0xba4e6252,0xbb370efb,0xbb5bc229,0x396decdd,0x3944f330,0xbaad202b,0xbb29095b, -0xbb60bc94,0xbbad30b5,0xbbfedc4e,0xbc29de3e,0xbc2bf67a,0xbc283c71,0xbc357094,0xbc2143ad,0xbc20829a,0xbc0c8ba1,0xbbc7e258,0xbb5d11b6,0xbab6abd9,0xb9f8a3f1,0x3a27e471,0x3b2fac5d,0x3b2206ae,0x3b0a0b76,0x3b0b38d3,0x3abf3f58,0x3a2f675e,0xb9d77e18,0x37d865ab,0x39f31e6f,0x3a890b3b, -0x3a4df1df,0x3a4d17ed,0x3a175c2a,0x3a47c301,0x3a5ce17f,0x3a90bed6,0x3a19cac7,0xbb47aa3f,0xbb449255,0xbb7b4f4d,0xbb59eda4,0xbb716fee,0xbb6f0701,0xbb4d3bf0,0xbb4389e4,0xbb317bcf,0xbb34e3db,0xbb3bfdc3,0xbb37a366,0xbb3e672b,0xbb5a75af,0xbb621229,0xbb6c60ff,0xbb5a02bc,0xbb377816, -0xbb36e9b9,0xbaf4745d,0xbb03e1ff,0xbaf864e5,0xbaf660a2,0xbae883b7,0xbacb97a0,0xbab52075,0xbace9d40,0xbb003e89,0xbb11a5c5,0xbb20f867,0xbb32d24f,0xbb499efa,0xbb49152a,0xbb4cfbf5,0xbb4ef2d9,0xbb4bf45c,0xbb2580db,0xbb1493ea,0xbb42fb3f,0xbb56c64c,0xbb75f4d5,0xbb39f068,0xbb5e3110, -0xbb79e633,0xbb831150,0xbb8740f2,0xbb88270f,0xbb8f1b05,0xbb90ab48,0xbb933631,0xbb79c68e,0xbb50fb0a,0xbb7d8167,0xbb5b3e90,0xbb4445c1,0xbb19f58d,0xbb21f683,0xbb1f7e5a,0xbb1e9670,0xbb1d690c,0xbb1dd512,0xbb190a6d,0xbb233e4d,0xbb26d7f1,0xbb2d9a0f,0xbb338c79,0xbb37c6c1,0xbb3dd44d, -0xbb366e0f,0xbb31831a,0xbb2d102b,0xbb278d58,0xbb5b9b02,0xba942b16,0xba940c35,0xba2dbcfb,0xba0445dd,0xba11e877,0xbacc7e79,0xba36a205,0xba2c63aa,0xba876f6a,0xb9cc735d,0xb9759197,0xb8aeee58,0xba4d2e99,0xba6f6ccb,0xb94f6ca7,0xba9ab99f,0xbabe53f2,0xbae7efd4,0xbabe9f5c,0xbaa6496a, -0xba5f4b31,0xba8b83aa,0xbaa174e6,0xbaca6fd3,0xbae81e7a,0xbae220fa,0xbad1298f,0xba472f72,0xba170111,0xba527d88,0xba868f97,0xba9594d9,0xba8243ec,0xbac8ccc2,0xbad7da00,0xbab46e6a,0xbab57b71,0xbac9024b,0xba3aee19,0xb967e797,0xba1f951a,0xbb2755cb,0x38f5b048,0x3a60d31d,0xb7d6d2be, -0x3a875162,0x3aa05351,0x3afcd3af,0x38c478d5,0xb98007ff,0x3aad5539,0xbabbec4c,0xbb19179b,0xbb431fd4,0xbb13b328,0xbacdcffa,0xba49de06,0xbaaaed63,0xbb01da4f,0xbb3a502e,0xbb6d5b81,0xbb521147,0xbb130fd4,0x3a1b5d40,0x3ab474ac,0x38c1079a,0xba734376,0xbaefc3a8,0xbad3b9df,0xbb2ee793, -0xbb2c7c10,0xbafeaff2,0xbb0602ad,0xbad13ab5,0x3a484a7a,0x3b052e7e,0x3af10ce4,0xbb4089d7,0x3a9b1642,0x3aef01ee,0x3907b80d,0x3b7a8cca,0x3b99931f,0x3ba277e5,0x3acf27ba,0x39e2d69c,0x3b7bfea7,0xbaf1f3d3,0xbb48bb72,0xbb80144b,0xbb429dea,0xbae8730a,0xb91c0e25,0xba92e031,0xbb19e50e, -0xbb82ad30,0xbbb8a644,0xbba73f4d,0xbb838d2c,0x3a9268f1,0x3b239ce2,0x3a1a548a,0xb9aa7f4b,0xbaef55cc,0xbab5ffc8,0xbb828593,0xbb8fede1,0xbb26325b,0xbb4abd7d,0xbb0f6cc7,0xb8e54486,0x3a899299,0xba8fb004,0xbbc14f0c,0x3b8a3afa,0x3bff1cbc,0x3b70f526,0x3bfa096e,0x3c0ad18f,0x3c03049d, -0x3bcda5be,0x3bb5b026,0x3be209ba,0xbae94ab9,0xbb8d9044,0xbb9929e9,0xbb6c7ed3,0xbaf953eb,0x3a1579d9,0xbab6c1e2,0xbb808434,0xbbe87d84,0xbc1ad547,0xbc0271ef,0xbb933f32,0x3bb409c2,0x3c0cff4c,0x3b740870,0x38fbd206,0xbb5628f7,0xbb61ee3b,0xbbc1011d,0xbb96982b,0xbb1970e6,0xbb439ffa, -0xba50452c,0x3ba07989,0x3c824fa1,0x3c8f662f,0x3c0a36f6,0xbbf56008,0xbc5bd55a,0xbbdb5eee,0xbaad46a6,0x3b4c0407,0x3c0d2469,0x3ba0fafc,0x3ab051dc,0xbac7a5b1,0x3b01b833,0x3b649e7b,0xb9399921,0x3a9aa996,0x3ada0801,0x3b1d5e9d,0x3a65588c,0x3a9e1587,0x3ad8b0fe,0x3afc678f,0xbaa26571, -0xbbedef8a,0xbc3aa4cb,0xbc3c81d2,0xbb8666a4,0x3afa2a74,0x3b80983a,0x3b2502b1,0xba8daaff,0xbbebb74b,0xbc3b8275,0xbbe4873b,0xbc4f97bc,0xbc621450,0xbcc8c8fe,0xbcb6aa31,0xbc4e6e9b,0x3c160fa9,0x3c793e54,0x3c1317e4,0x3ae0e68f,0xb9a02b2d,0xb95c873f,0x3b8716f6,0x3bc977c6,0x3bb76f71, -0x3b3c8118,0x3a79a7c7,0x3b13eecb,0x3b0fb0a8,0x3a97d11c,0x3a0cfb25,0xb8cfd0c5,0xba2c66c5,0xbb10c65f,0xba4446a3,0xb99483bf,0x38a214a9,0x3a202e66,0x3b4578c4,0x3c045b70,0xbbbf4b08,0xbbfe50e3,0x3b37c64f,0x3acaf6ea,0x3c055c7e,0x3caa318a,0xba1fb3bf,0x3c0fa574,0x3cc13090,0x3c8098fd, -0x3c20fabb,0xba0b41a1,0xbc0125b1,0xbb788089,0x3bf80cbc,0x3be6abdd,0x3bb479d4,0x3a33314e,0x399b133e,0xb95dba57,0x399c16bb,0x3b5c20a9,0x3b5e1656,0x38fcb777,0xb9768382,0xba80d245,0xba481952,0xbac039bf,0xba9a93b2,0x3a113df3,0x3bb06b23,0x3bfdf995,0x3c066582,0x3bdcad4b,0x3b0dfdfb, -0xbbb29ca2,0xba9faa0e,0x3b7f5da8,0x3c02592f,0x3bb60445,0xbb15dde5,0xbc42ff55,0xbb81ea6c,0xbc1ab585,0xbc4c95fb,0xbc29ef3d,0xbbd18efa,0xba97aed2,0x3a6ec8e3,0x3aa913a2,0x3a70428a,0xba2c2346,0xbabf20ec,0xba4c715a,0xbb205d03,0xbb3b8432,0xba940ccf,0xbb5e962c,0xbb9230ab,0xbb80c37e, -0xbb19b2f3,0xbb16fec5,0xbb6c100d,0xbb1c2589,0xba83de08,0x3a02c650,0x3a9e3fee,0x3b09581e,0x3bc16cc3,0x3c0a36ec,0x3c261e40,0x3c05b370,0x3c5d488d,0x3c1de619,0xba307ddc,0xbb494f97,0xbb314844,0xba983967,0xbb949650,0x3c3e497c,0x3c265a2d,0x3bedf1f4,0x3bae1d27,0x3b9c5c5b,0x3b80142b, -0x3b319d40,0x3ae082a1,0x3a1e7781,0x3a02fe69,0x3aadc122,0xbae3a611,0xbb5d27a6,0xbb60fa0e,0xbb586802,0xbafcf89b,0xba328b1c,0x39a61224,0x3a8e5116,0x3a7e29ef,0x3b2352e1,0x3b314327,0x3b08e4fa,0x3ac8b2e3,0x3a1b898e,0xba8b6493,0xbb2452d3,0xbb38251f,0xbb1b2d46,0x3b0e6905,0x3bcb3099, -0x3c41e9a1,0x3c06c582,0x3be97f50,0x3c1c5613,0x3c34c411,0xbbddc78d,0xbbdc87db,0xbc310000,0xbc587c87,0xbc712c2f,0xbc6cdd9c,0xbc4de0f5,0xbc163d8c,0xbc18e28d,0xbc0ce6b7,0xbbe8a5e5,0xbbbdb12b,0xbb983eb2,0xbb8d91a4,0xbbae7cbb,0xbba4fa1c,0xbb779893,0x390cca59,0x3b04726e,0x3b1c30a3, -0x3b250a24,0x3b2a5b59,0x3b4ae979,0x3ab9e1e1,0x3a9a2c94,0x3af29b7a,0x3b494ffa,0x3b76a62d,0x3b57949f,0x3b1e3273,0x3a983a11,0x3a128609,0xba16716e,0xbae7133b,0xbb8866dd,0xbbad72ee,0x39896174,0x38b7f1e5,0xbacdbc80,0xbb55814c,0xbb9f5f4e,0xbbccb805,0xbc07abac,0xbc295846,0xbc252a78, -0xbc1bd9c9,0xbc2381fe,0xbc090c1a,0xbc057955,0xbbd3ef72,0xbbaded3d,0xbb69195e,0xbb347138,0xba8b08fa,0x3a4791ce,0x3b536dd8,0x3b40d8e0,0x3b372a9e,0x3b3e416c,0x3b193b19,0x3af1df8e,0x3a9057df,0x3ac5768c,0x3af72dde,0x3b265486,0x3b1f117e,0x3b28aefe,0x3b27bfad,0x3b0c4aca,0x3adbf9f0, -0x3ac6123b,0x3a72a972,0xbb123a25,0xbb081391,0xbb3918ab,0xbb1d5b8f,0xbb2e1901,0xbb3319f8,0xbb207a18,0xbb1b2bd3,0xbb13d61a,0xbb152025,0xbb204467,0xbb18f22e,0xbb21f8ac,0xbb38d88a,0xbb3fcac0,0xbb38c343,0xbb220444,0xbaff71fd,0xbb0b9213,0xba87c50f,0xbaa5df43,0xbaa1dfd8,0xbaaaaa51, -0xbaa579b4,0xba99a14c,0xba910e6b,0xbaa7f2e7,0xbad59794,0xbb0176de,0xbb153253,0xbb298f14,0xbb3b7304,0xbb31b364,0xbb26afbc,0xbb20ddb1,0xbb1a6e6e,0xba934126,0xba50c6f4,0xbacf1479,0xbb012b04,0xbb2a68ec,0xbadb482a,0xbb1741a9,0xbb3959bc,0xbb40c056,0xbb48f987,0xbb4a0f30,0xbb58d92d, -0xbb5be4fe,0xbb61efe8,0xbb2a174f,0xbafca8c9,0xbb3c66b0,0xbb104283,0xbaef34db,0xba913f17,0xbaa99ea5,0xbaa7630b,0xbaa97064,0xbaaa7b79,0xbaadb881,0xbaa9ad2c,0xbabb3a54,0xbac1681b,0xbac91505,0xbacf40f6,0xbad6ba64,0xbae9ff65,0xbad32643,0xbac6683e,0xbab68987,0xbaa1e360,0xbace618a, -0xba75036d,0xba78f4d6,0xba231305,0xb9ec5788,0xba020244,0xbab79a47,0xba0b6e27,0xba1a0f84,0xba58e379,0xb9d22248,0xb97b71e2,0x38b24933,0xba4d3477,0xba731f64,0xb96055de,0xba8747de,0xbaa4c445,0xbae9d983,0xbab8a717,0xba9ef9fe,0xba4c84be,0xba86f541,0xba9a1678,0xbabad5e5,0xbacaa6bf, -0xbabbdc2c,0xba9c19f1,0xb9f0f30a,0xb992c518,0xba00c97d,0xba40b5b7,0xba6febfb,0xba8561e1,0xbaacd856,0xbab69d11,0xba9684c2,0xba956417,0xba931f2c,0xba205fa9,0xb914b651,0xb99d5625,0xbb04f8e1,0x3909ba69,0x3a601edb,0x39eae8ff,0x3a882bd9,0x3a9d5877,0x3b0bd911,0x388d26c6,0xb99834d4, -0x3a91a983,0xba9ffe4a,0xbb0804ea,0xbb480b68,0xbb13c9a6,0xbadeaf22,0xba7ad785,0xbad6aed6,0xbb11c8b0,0xbb386044,0xbb569da6,0xbb2ad0be,0xbab0a417,0x3a9556d3,0x3ae55356,0x3a0ed853,0xba0e2ae5,0xbacd06f8,0xbaf0578e,0xbb1c9eb2,0xbb0f3c76,0xbac42b9c,0xbacca56e,0xba99deaf,0x3962ae6b, -0x3adb0679,0x3af151d6,0xbb23ef76,0x3a9b9085,0x3ad68b22,0x3a41193d,0x3b687ae2,0x3b8f26ed,0x3bb423f2,0x3ab5f41f,0x393317d2,0x3b6a4e38,0xbad6d0a3,0xbb30652d,0xbb8b82a9,0xbb511753,0xbb0c0d75,0xba215a66,0xbafe5636,0xbb435c41,0xbb86f66e,0xbba8b89c,0xbb87f2eb,0xbb2954f2,0x3b05cb0a, -0x3b5598cd,0x3ab1615d,0x39e301d5,0xbab277a1,0xbb0dd39b,0xbb6cce2b,0xbb7bc984,0xbb073f27,0xbb1d4541,0xba905d30,0xb8ec4106,0x3abc5dc3,0xb9f471e9,0xbbb0dde7,0x3b5999ab,0x3beaea33,0x3b8f9204,0x3bfe6b7b,0x3c140ebb,0x3c123c5e,0x3ba5d74e,0x3b8de378,0x3bdbdf11,0xbafcd5b5,0xbb8479f2, -0xbb9f84f9,0xbb70c54e,0xbb12f033,0xb9c9ae0f,0xbb498b07,0xbbae2d60,0xbbf31538,0xbc0cf7d9,0xbbcc401b,0xbafed10e,0x3be74506,0x3c15a37b,0x3b8c610b,0x3a487afd,0xbb42572b,0xbb9a5187,0xbbb4022a,0xbb67f0ab,0xbabab959,0xbaf6e57e,0xbad538ee,0x3ae72780,0x3c428f22,0x3c7712cb,0x3c190be3, -0xbbaedec6,0xbc46234b,0xbbef6fcd,0xbad8aab0,0x3b10946f,0x3b9ced74,0x3bb304dd,0x3b32278f,0xbb21fb0f,0x3b199c61,0x3b6488d7,0xba84eacd,0xb8e7a6af,0x36c45964,0x3a826320,0x398342cd,0x3a7f60dd,0x3acfd166,0x3a882ca1,0xbb04baee,0xbbe8b9cc,0xbc3a7465,0xbc2722d0,0x398f1604,0x3b6a9770, -0x3b9ac56f,0x3ba4a754,0xbb0796d1,0xbc0e0d81,0xbc21f092,0xbbd4ff6a,0xbc321096,0xbc1b8fa2,0xbca0c3d4,0xbca1bf03,0xbc87f0b6,0x3bd1c4b2,0x3c77963a,0x3c2948fc,0x3afa5610,0xbaa12e63,0xbae08381,0x3b16e06b,0x3b9e3f12,0x3baf6b7d,0x3b4e937a,0x3a996321,0x3b028f10,0x3a723dee,0x38036686, -0xb704b835,0xba311a25,0xba9299c1,0xbb1b3ba5,0xbb19ca8e,0xbadca71f,0xba593dd4,0x3b06182b,0x3b7d8ffa,0x3bab8f42,0xbbbb64a5,0xbbda2251,0x3bacb890,0x3b30a0cb,0x3c1ef7ff,0x3cbeab18,0x39611477,0x3bb5e930,0x3cc04cf2,0x3c238fee,0x3b7bf876,0xbb11a981,0xbc10323b,0xbbaee185,0x3b9af203, -0x3bc3ab62,0x3bab2fa6,0x39f995e8,0xb995a8ab,0xba633de7,0x38b7c685,0x3b3cb94f,0x3b65cda4,0x39c0a83d,0x3a0b53e6,0x3947732e,0x39bfd478,0xba99f068,0xba41d50f,0x3b030ed2,0x3b9def72,0x3bd5d84a,0x3bdeaa7b,0x3bb21077,0x3b0aa880,0xbb2d87ff,0x3736a42a,0x3bca3119,0x3c88d288,0xbac4f797, -0xbc586df1,0xbc8d9628,0xbc12d47b,0xbc1418ba,0xbc4d1a02,0xbbfae654,0xbb7cec07,0xba9eaabf,0x3ab1c29c,0x3b02abb5,0x3a60e86a,0xb87a775d,0xbacc5a18,0xba906e11,0xbb33c7b6,0xbb422406,0xbaa0b430,0xbb62f72c,0xbb8f62c8,0xbb823faa,0xbb5594b6,0xbb6314ed,0xbb87fb8f,0xbb5b0dde,0xbb204363, -0xba74a970,0xb9802f83,0x3b116940,0x3bde9717,0x3c24f9f3,0x3c378eaa,0x3c0d0f77,0x3c3e60cd,0x3beda361,0x3a980825,0xbb8333b1,0xbb791bcd,0xbb2c3732,0xbb9c64ba,0x3c592d29,0x3c137c72,0x3bf38a8b,0x3bb2b1df,0x3bad0b00,0x3b8563f1,0x3b296eef,0x3aabef6c,0x3a335cb1,0x3a6ae6e3,0x3b13dd18, -0x386b0f41,0xbafe484e,0xbb61f44f,0xbb597c43,0xbb1dfd6a,0xbae8066e,0xb6db29d4,0x3a8efee8,0x3a9e8954,0x3b0da5f2,0x3b1857a1,0x3b006423,0x3aa88c35,0x3905205e,0xbb074912,0xbb3e3b5b,0xbb0770a6,0xb994da87,0x3b8e9e9d,0x3c00b72a,0x3c49b02f,0x3c223dd8,0x3c25057a,0x3c55255c,0x3c6af92a, -0xbbed05ca,0xbbe6ec5a,0xbc39b2bf,0xbc5b34ef,0xbc5eadf3,0xbc430896,0xbc1bfe5f,0xbbe624ff,0xbbf41096,0xbbe8015f,0xbbbdc75c,0xbbaa81d2,0xbb8ba1dc,0xbb7f8241,0xbb9cb16c,0xbb9c7445,0xbb94c5fa,0xba8ba89c,0x3a8193f0,0x3b1b1530,0x3b2a46db,0x3b3df234,0x3b56a06e,0x3b1f96be,0x3b02927c, -0x3b0882e5,0x3b545dd1,0x3b73f661,0x3b78dbda,0x3b409e99,0x3af4201d,0x3a80a873,0xb9ed4be6,0xbb052e98,0xbb984835,0xbbc1ed53,0xb9921905,0xba0a6f8c,0xbb14be9e,0xbb8535c9,0xbbcd27b0,0xbbed1580,0xbc101052,0xbc2817ea,0xbc1dcd56,0xbc0f0275,0xbc0f58ff,0xbbe1c0bf,0xbbcfda22,0xbb92b789, -0xbb8d6c6b,0xbb63cfac,0xbb62b2f8,0xbabf3c8a,0x3a1f0ebf,0x3b381a37,0x3b284176,0x3b369e1d,0x3b46396e,0x3b3a7414,0x3b3313ad,0x3b2182ff,0x3b2e1d36,0x3b3d3ad8,0x3b5ed899,0x3b5b2063,0x3b610cee,0x3b5afd40,0x3b1b1acd,0x3ac45299,0x3a81f7e3,0x39fc24d4,0xbac88f22,0xbaabd6ba,0xbaffc2c3, -0xbae9bf61,0xbb0109ca,0xbb0aa8b7,0xbb07f31c,0xbb0eb158,0xbb06d3c0,0xbb02b661,0xbb0c172f,0xbb00a0f0,0xbb084a72,0xbb141f0e,0xbb122cfb,0xbaeeea84,0xbabcff41,0xba7976a6,0xba8e1002,0x38e47aab,0xb913a204,0xb977363f,0xb9c47af3,0xb9f8fd25,0xba0e661e,0xba192a42,0xba55ed1f,0xba99bc2b, -0xbad328a0,0xbb02b337,0xbb182b49,0xbb22ea8d,0xbb0f6813,0xbaf5098e,0xbae1db7f,0xbad8968e,0xb912c5f0,0x393d9de6,0xb9dbd0d5,0xba4720a1,0xbaaa6f2c,0xba51c52e,0xbaaa48a3,0xbae91032,0xbaeadad6,0xbaf5cc9a,0xbaf0b52f,0xbb031b8c,0xbb02e796,0xbb058a3e,0xbaa901eb,0xba51a415,0xbac7342a, -0xba7463db,0xba2d4aa1,0xb8b151ae,0xb9a62bd9,0xb9adc6d7,0xb9c8a910,0xb9d6d4d3,0xb9ede466,0xb9f84215,0xba1ba696,0xba27cfc3,0xba2e1c43,0xba31cfc1,0xba41c449,0xba787fe2,0xba49d17f,0xba30dea9,0xba082d53,0xb9a0b949,0xb9adf3c7,0xba45e8f2,0xba45827d,0xba0ea698,0xb9c6faab,0xb9cb4a3e, -0xba8e9f3c,0xb9be6b3a,0xb9efe928,0xba1142e8,0xb9b28e9d,0xb937e254,0x398ba8f6,0xba2660c4,0xba4f4e74,0xb9460a90,0xba58575d,0xba87407b,0xbadfd9b5,0xbaac162e,0xba9664df,0xba455335,0xba829f57,0xba91b4af,0xbaa81dfe,0xbaacad3a,0xba970325,0xba4eb785,0xb9818ad2,0xb8b707cb,0xb98c3e2d, -0xb9fd6cdd,0xba398b91,0xba838489,0xba98e569,0xba9f10d9,0xba7d3c30,0xba6ef037,0xba2050ef,0xb9b0fbf0,0x390ee756,0x390207dc,0xbaa8ab31,0x399bf4bf,0x3a6fa2ba,0x3a644194,0x3a826a3b,0x3a8f0a69,0x3b0cbddd,0x38d1c61b,0xb972caa7,0x3a53b415,0xba69edee,0xbadf44af,0xbb4ae47e,0xbb158c98, -0xbaf3b92f,0xbaa4b5e1,0xbb0081ec,0xbb1da23c,0xbb31aa9e,0xbb3caf9c,0xbb03d2d8,0xb9ea7be0,0x3ac09676,0x3af34009,0x3a4942ed,0xb9642e33,0xbaa5470f,0xbafc668e,0xbb138f1e,0xbafcb987,0xba92e8cd,0xba88684a,0xba19f022,0x37996ea8,0x3abb519e,0x3af1ed85,0xbadf3f5b,0x3ab78209,0x3ad41bcc, -0x3ab25470,0x3b4fd8bf,0x3b7bcfac,0x3bbb5a26,0x3ab39330,0x3973ba40,0x3b473d19,0xba9b9d31,0xbb0b419e,0xbb960384,0xbb5d581f,0xbb26c815,0xbaa028f6,0xbb312479,0xbb63ae2c,0xbb845c4d,0xbb94e2f4,0xbb50efbb,0xba835a2a,0x3b2640c9,0x3b641eb9,0x3adbb027,0x3a87f493,0xba68cba4,0xbb2cccf2, -0xbb65db6c,0xbb6d14e8,0xbadd0c35,0xbad8fa25,0x39c4ce6a,0x3a1cdabe,0x3b149e44,0x3a2354c9,0xbb839b41,0x3b42279e,0x3bdbfbc2,0x3ba91a58,0x3bff1301,0x3c19dc95,0x3c1f22a3,0x3b8af48b,0x3b63ebb5,0x3bcd5ea4,0xbad25587,0xbb61af18,0xbbaf4c3d,0xbb849206,0xbb442943,0xbae6e15b,0xbb9bf31e, -0xbbd45b07,0xbbf2d107,0xbbf91868,0xbb92c0eb,0x3a685dd7,0x3c02c7ee,0x3c0efe1e,0x3b875a1c,0x3aa168a6,0xbb1cac73,0xbbaf4124,0xbbb1e43a,0xbb480095,0xba07780c,0xb9f5876a,0xbb37b818,0xbab9a242,0x3be6b623,0x3c39fde2,0x3c1c83bf,0xbb4c9fb8,0xbc25ff5c,0xbbf2cdf7,0xbb1468c5,0x3aad567b, -0x3afcff6c,0x3bcc2651,0x3b8be5e8,0xbb3f80d4,0x3b223edb,0x3b546193,0xba90d492,0xba7182f0,0xba8c252d,0x3860d3be,0x398f8719,0x3aaa50dc,0x3ad0ea78,0x3a3e9b36,0xbb15732f,0xbbedcefd,0xbc35571e,0xbc0d3c80,0x3b8044f7,0x3b9ce632,0x3ba5e2d6,0x3bcb4992,0xbb48b872,0xbc21015a,0xbc1b2051, -0xbbd4d34e,0xbc0b481b,0xbba22a6b,0xbc699ac2,0xbc87aa3d,0xbc903165,0x3b53f01e,0x3c57ac81,0x3c2dd09d,0x3b1e5d6e,0xbacb66db,0xbb4b3d14,0x3a160764,0x3b6360a6,0x3b9c06e8,0x3b51f480,0x3aa3760a,0x3aeeaeeb,0xba0c832d,0xbac4a551,0xbaac902a,0xbadac1a5,0xbaedf6be,0xbb2c601b,0xbb724fde, -0xbb3965ff,0xbafe8402,0x3b8be4e0,0x3bb66b30,0x3b2a87c1,0xbbb1ffab,0xbbb14673,0x3bdf319c,0x3b922414,0x3c3ac741,0x3cc3d904,0x3ab257a7,0x3abcd5de,0x3cb32e45,0x3b9abb51,0xbadd8918,0xbb266121,0xbc02c2f5,0xbbb2417f,0x3ab2716c,0x3b873acc,0x3b914d84,0x3a14deb1,0xba4937ab,0xbab531f2, -0x390770a4,0x3b0d79e0,0x3b5183aa,0x3a483837,0x3a9d6523,0x3a9e6ca4,0x3ac09895,0xba00d99c,0x38929dd6,0x3b572435,0x3b936ecb,0x3bb7b316,0x3bafa669,0x3b6c239c,0x3adce755,0x3a1f88c0,0x3a870f24,0x3be7c273,0x3cb01cbd,0xbbf049c9,0xbcac70ac,0xbca71e7c,0xbc51382c,0xbc0026af,0xbc3e9a67, -0xbba9bb8a,0xbac0f6cf,0xba09d944,0x3aa984f8,0x3af6d5ec,0x3a2e6527,0x39af575c,0xbadad517,0xbab9ecaf,0xbb294ff1,0xbb2752d9,0xbab0f475,0xbb4ef276,0xbb816fe3,0xbb81ac13,0xbb84d077,0xbb8fb85c,0xbb8e4510,0xbb8c3ae0,0xbb798b5e,0xbb20f4c3,0xbab175f7,0x3b20451d,0x3beb5f5b,0x3c2ce83a, -0x3c3be84a,0x3c1d9afe,0x3c1b4ad6,0x3ba54004,0x3b5efc26,0xbb3220ce,0xbb3cd11d,0xbb5a6143,0xbb8857d1,0x3c458754,0x3bb464d8,0x3bc78090,0x3b98ca15,0x3ba37bd6,0x3b8eba9d,0x3b386af1,0x3a80bb5d,0x3a25ba1e,0x3a8e234c,0x3b2cfa76,0x3ada4ff6,0xb9eb28e1,0xbb591bd9,0xbb5d04b6,0xbb48afff, -0xbb30b571,0xb9fc20eb,0x3a7aac37,0x3acbe525,0x3af9c825,0x3b0713a2,0x3b07da50,0x3aa65f45,0xb936d7a9,0xbb181b93,0xbb0bee60,0xb9ee3602,0x3b26a5b6,0x3bc377ba,0x3c0c73f4,0x3c3daee9,0x3c2d237e,0x3c3ecb76,0x3c641987,0x3c7260c8,0xbbc67d5b,0xbbe25866,0xbc2736ee,0xbc420793,0xbc3f3317, -0xbc10274f,0xbbcac332,0xbb9c6229,0xbba87eed,0xbbaa1653,0xbb8fe17b,0xbb9ac859,0xbb8749c1,0xbb7a332f,0xbb828262,0xbb88b244,0xbba1b91d,0xbb180e0a,0xb99cfc3c,0x3ae2e196,0x3b10332a,0x3b3734cf,0x3b427f3c,0x3b39c732,0x3b2a8df5,0x3b112479,0x3b3f283d,0x3b4a03c6,0x3b702b10,0x3b3ee368, -0x3b10ff69,0x3ab7fde5,0x38cd49b9,0xbab0247d,0xbb6db082,0xbb97f863,0xba923835,0xbaae294c,0xbb51fa26,0xbba4b912,0xbbf8299c,0xbc04d628,0xbc155e24,0xbc23a42e,0xbc142589,0xbc013d73,0xbbf335ac,0xbbb9e1de,0xbba0e603,0xbb582529,0xbb67e509,0xbb55fe77,0xbb64cdfc,0xbad461ae,0x39399321, -0x3aea12aa,0x3aed07ef,0x3b1cc311,0x3b3b5e18,0x3b45ad17,0x3b4f046b,0x3b542bb9,0x3b572d5e,0x3b5fdcef,0x3b755a79,0x3b66d7a2,0x3b5ab9c5,0x3b405c36,0x3ad6dbd7,0x3a1276ee,0xb905ff0f,0xba05fac4,0xba7a1093,0xba4992d7,0xbaa22a8a,0xbab21f75,0xbac2ee8c,0xbada5282,0xbaf5c8b8,0xbb0e3c61, -0xbb04c678,0xbaf6afed,0xbafc7489,0xbae6d3ff,0xbaee427d,0xbaedcbe9,0xbac70d59,0xba6a3773,0xb9f963f0,0x35cafc23,0x39249251,0x3a9f2799,0x3a7a5826,0x3a44b512,0x3a12c872,0x39b0268b,0x3921d6e7,0x37fd7c39,0xb9903f7d,0xba286c6c,0xba8d578f,0xbabec77a,0xbae0f37a,0xbae5b400,0xbab6b79b, -0xba897a3c,0xba728a6c,0xba7aaee9,0x38b793e8,0x39a03254,0x37a48663,0xb93b2ba4,0xb9ed855d,0xba203f17,0xba5efaeb,0xba950c5e,0xba8902cf,0xba8cb61c,0xba80b904,0xba867419,0xba7842e4,0xba723804,0xba0522fb,0xb997bef5,0xb9e09d78,0xb8eed164,0x368c94f0,0x39b075e5,0x38de92c1,0x387bd1b7, -0xb7cc8c04,0xb88a8320,0xb9052ff2,0xb9471aa7,0xb98e2ecf,0xb99cf71e,0xb99f140b,0xb9987eb6,0xb9b53808,0xba126cb5,0xb9f0c86c,0xb9da4b3f,0xb997f8c0,0xb8af8ecc,0xb8b27bc8,0xba0e23cf,0xba03980a,0xb9d7df07,0xb96abff2,0xb959e374,0xba3ee655,0xb92554ec,0xb992fdd3,0xb98e717e,0xb994d27f, -0xb9106796,0x39b0cf6d,0xb9f11048,0xba20d073,0xb95199ff,0xba127241,0xba3c2e66,0xbad094bd,0xba94019d,0xba831d67,0xba36cabe,0xba6f4e23,0xba81595b,0xba8e1df8,0xba87a469,0xba57fb35,0xb9b28ec7,0xb80b091a,0x38b8b0e9,0xb8a6529f,0xb968ef76,0xb9f78bce,0xba6dfc15,0xba856972,0xba88e403, -0xba4a1c1d,0xba294fcd,0x3842197e,0x3844a297,0x3a0afb04,0x3a1cd9b9,0xb9e7440d,0x3a07626f,0x3a811e53,0x3aa62fc1,0x3a6ec689,0x3a731f8b,0x3b00a03b,0x394c40e9,0xb897a2c3,0x3a05db5f,0xb9fbf7b7,0xbaa16309,0xbb421896,0xbb10b3a1,0xbb0112a6,0xbac59981,0xbb0dafe0,0xbb1fb05e,0xbb22fad0, -0xbb1a211a,0xbaad151d,0x3a06531d,0x3ae63269,0x3af748ff,0x3a625045,0x38ca18d5,0xba6ce85c,0xbaf2352e,0xbb0bd8cd,0xbae197c5,0xba3c0c7e,0xb9cb6fc0,0x3920e807,0xb74a7f4e,0x3abbfc0f,0x3aff4f31,0xba2b350b,0x3adaeff0,0x3ad2828c,0x3b0164a6,0x3b2e38fa,0x3b49e670,0x3bb17917,0x3ab882f8, -0x3a02cd9b,0x3b1b8022,0xba1add6d,0xbab41f55,0xbb9663b8,0xbb5aed23,0xbb38c1ed,0xbaeebdc0,0xbb542d73,0xbb733efc,0xbb785e1e,0xbb75e1a3,0xbb0ae62a,0x3a400a6e,0x3b3d38f7,0x3b6523f0,0x3ae37239,0x3accd94f,0xb9c7fe36,0xbb3878a5,0xbb663837,0xbb66b2b3,0xbab3b49b,0xba5deecf,0x3b0d614f, -0x3ac0c569,0x3b5829ea,0x3b003a5d,0xbb0d4963,0x3b40c3fb,0x3bcd6c23,0x3bc5d619,0x3bfb9cbe,0x3c1a09aa,0x3c25f44d,0x3b76738e,0x3b41923b,0x3bb75672,0xba751b5e,0xbb29f27a,0xbbbe4ead,0xbb9128c6,0xbb7875e2,0xbb4fcccc,0xbbc74f59,0xbbeb0009,0xbbe851e2,0xbbcef206,0xbb243a98,0x3b814538, -0x3c0e3ad7,0x3c032231,0x3b6db290,0x3ad694c8,0xbad743e7,0xbbb1b0b3,0xbbb058ba,0xbb349bbc,0x39d681a0,0x3aa45043,0xbb875be5,0xbb846323,0x3b21e95a,0x3bef38ab,0x3c16156f,0xba724781,0xbc010361,0xbbf039c6,0xbb530f29,0x39b8d64c,0x3908ffd7,0x3be723e3,0x3bbd56bf,0xbb44f901,0x3b1c2f45, -0x3b3cc31e,0xb9c56d7a,0xba88fb29,0xbab90627,0xb9a4004b,0x3a5746c1,0x3af9c440,0x3acfdf0c,0x3a3fbbfe,0xbb180858,0xbbff1907,0xbc2b239c,0xbbdbfffc,0x3bde35ef,0x3bafe841,0x3ba376e1,0x3bcf7749,0xbb87c405,0xbc2f6849,0xbc2376e0,0xbbe18b25,0xbba6f251,0xba7b35be,0xbc150755,0xbc5c47e2, -0xbc8eacd9,0x375b3081,0x3c279f48,0x3c1f5a81,0x3b517af0,0xba9d180f,0xbb89a314,0xba854fac,0x3b0dc6aa,0x3b84c28e,0x3b46c3e7,0x3aa02e1c,0x3ad3e983,0xbae64ce6,0xbb3c568d,0xbb3634b1,0xbb21ceff,0xbb118bb0,0xbb29c6a4,0xbb8c53d6,0xbb56737f,0xbb1ead5b,0x3bd55105,0x3be85f0d,0x3a20f77c, -0xbb9ef03d,0xbb891eb1,0x3beb8f99,0x3bd9a544,0x3c5572b4,0x3cb8d400,0x3b4897ff,0xbba04ea2,0x3c81c0cd,0xb6bf6f47,0xbbb9a18b,0xbafbce87,0xbbc4e588,0xbb94cbd0,0xbaf6751d,0x3aef25c8,0x3b4f6c9e,0x3a7d2b1d,0xba89c39e,0xbae12f71,0x395ba561,0x3ab0fdee,0x3b28d42d,0x3a8fa96e,0x3acaef48, -0x3af245b8,0x3b101081,0x39eff669,0x3aa7412b,0x3b90ee8b,0x3b9bdeb8,0x3ba8bbba,0x3b814377,0x3af7a710,0x3ab6760d,0x3b647c4e,0x3b37561d,0x3bf69eb2,0x3caec3d2,0xbc42d4ab,0xbcd0a5c2,0xbca42ca4,0xbc82b28c,0xbba2631e,0xbc11ba18,0xbb45c822,0x398a8176,0x3a6c4528,0x3a8da859,0x3ab09b10, -0x3a007ba7,0x3a0d2ff1,0xbae3e4df,0xbae4cc36,0xbb07d4fd,0xbaeaafab,0xbac02196,0xbb282a73,0xbb5aa144,0xbb81b2ed,0xbb9750cf,0xbba31dc2,0xbb8e1b04,0xbb9f9b1c,0xbb988617,0xbb65f7a8,0xbaeae7f2,0x3b2bc68b,0x3bea2e68,0x3c28096e,0x3c368c24,0x3c2eb458,0x3bff956c,0x3b5ff5dc,0x3b961c5f, -0xb9ab58a3,0xb9abb0d2,0xbb04785d,0xbb02efd3,0x3c063285,0x3a889596,0x3b5edb91,0x3b4c3cf8,0x3b838463,0x3b9648c5,0x3b5955a0,0x3a8fa1a5,0x3a5b194a,0x3aacda7c,0x3b2c7657,0x3b31f124,0x3a368909,0xbb42abfc,0xbb6090ab,0xbb7522a7,0xbb64d936,0xba8b652f,0x3a41bb88,0x3aef4971,0x3ae4c5f9, -0x3afc3a41,0x3b12325e,0x3ab9adcb,0x38a49fe6,0xbab6ac7e,0xba00925d,0x3ae7174b,0x3bb8dfc3,0x3bf42815,0x3c19f42e,0x3c37262c,0x3c31897f,0x3c3eed97,0x3c49ece4,0x3c4459fd,0xbb68b8ca,0xbbc5696a,0xbc005228,0xbc0f0f4a,0xbc0f558f,0xbbb23256,0xbb42b68c,0xbb2043b5,0xbb2caf48,0xbb49821c, -0xbb3ff09b,0xbb896a90,0xbb84df90,0xbb7bd9bc,0xbb5935df,0xbb69945d,0xbb9c86de,0xbb5e95b5,0xbadfff1c,0x3a11ffe3,0x3abd354c,0x3b19bbb8,0x3b1f326e,0x3b35ccbd,0x3b36572b,0x3b0f1b3a,0x3b15c068,0x3b12f1bf,0x3b4fb608,0x3b31c40c,0x3b1e47dc,0x3aee5839,0x3a7a2cda,0x39275898,0xba889ad4, -0xbaf119a2,0xbb0ea283,0xbb16a4ec,0xbb890453,0xbbc71ae9,0xbc0f4aa6,0xbc0fa839,0xbc15e287,0xbc1a7e32,0xbc07b773,0xbbe65fa0,0xbbc9235b,0xbb9ca8c2,0xbb848c9d,0xbb426d69,0xbb4cf763,0xbb4637e4,0xbb49dd76,0xbace9e88,0xb96bd434,0x3a3bf6e2,0x3a8a3a80,0x3afef431,0x3b2fcda0,0x3b3967dd, -0x3b43c3e6,0x3b51e692,0x3b575e65,0x3b62942a,0x3b743335,0x3b5525a0,0x3b34b481,0x3b049288,0x3a237680,0xba1e4a5f,0xbac57f03,0xbaece5cd,0xb9e95a2f,0xb9cb1b87,0xba4185a3,0xba8d8b8b,0xba9c973a,0xbabcec9a,0xbafa13ee,0xbb1bbc6c,0xbb138045,0xbb0714a6,0xbb030afa,0xbaf74c4a,0xbaf1d52a, -0xbadee385,0xba94605e,0xb9e69233,0x37e06842,0x39ff4183,0x3a82d874,0x3ada8c46,0x3abed684,0x3aa1c5ff,0x3a8d0fa6,0x3a6638e7,0x3a3f8bda,0x3a1bbbd1,0x39acfc97,0x37a5a02b,0xb99dd765,0xba1becea,0xba423018,0xba2e171f,0xb9d06751,0xb900fa12,0xb89133d1,0xb971c3de,0xb99711e2,0xb966c839, -0xb97d33a3,0xb9abbb93,0xb9cc2885,0xba84ff72,0xba8a97d5,0xba9a05a2,0xba8196e3,0xba7d291a,0xba5dfede,0xba4a23c3,0xba25b08b,0xba15d0aa,0xb9e8c299,0xb9dcd730,0xb7f72cea,0x3822c095,0x388652ac,0x392d2b0b,0x36c9cc48,0xb8651700,0xb91d9f25,0xb948efe1,0xb983a055,0xb9a44193,0xb9b86e40, -0xb9ba66cb,0xb9b5a51f,0xb99ba1c4,0xb9a70b57,0xb9f16ff1,0xba02e13c,0xba128a13,0xba0b68fa,0xb9d67a4b,0xba11f170,0xb9aa83b4,0xb9809741,0xb9829e40,0xb8a701c6,0xb864f920,0xb9c9eab9,0xb70b7257,0xb93037aa,0xb83731cd,0xb98eea5d,0xb92fc692,0x398d346d,0xb9a4cd24,0xb9e6bd14,0xb97312fe, -0xb9a51c7c,0xb9d03ffd,0xbab84ba9,0xba735956,0xba5d1cd9,0xba20a460,0xba4dfd67,0xba564e92,0xba65e247,0xba3d560b,0xb9f68945,0x38fae9bb,0x3934db69,0x39795c3f,0x38782b22,0x37b11e5e,0xb978c30f,0xba47512b,0xba65136f,0xba66aa7a,0xba0f8dae,0xb9c6495e,0x3a3e39a1,0x39e5150c,0x3a66ded9, -0x3a80528c,0x3990cf6f,0x3a2c3548,0x3a7ed8cd,0x3ac8b8d3,0x3a4400f1,0x3a31a364,0x3ac9b187,0x39903b69,0x39015553,0x39877afa,0xb84347e6,0xba3ab549,0xbb2cb601,0xbb04ea21,0xbb03fad7,0xbadc0824,0xbb111dfa,0xbb193a69,0xbb12319e,0xbae32f9f,0xba11bd65,0x3ac2bd9c,0x3b03b94a,0x3af4df4f, -0x3a5bad6f,0x39bbef9f,0xba0edc92,0xbad82f43,0xbb0395a5,0xbac8b90b,0xb980b659,0x39982258,0x3a57aebc,0x37978ab5,0x3ac31811,0x3b0401b0,0x39b00ad6,0x3ae809a9,0x3abab1f4,0x3b19e5b2,0x3afd4bd3,0x3b09efdb,0x3b937c60,0x3ab7e5bd,0x3a5cc929,0x3ae23dd3,0x387421ef,0xba0425f7,0xbb890d74, -0xbb48b884,0xbb4010c2,0xbb180cde,0xbb6355a5,0xbb7093f1,0xbb65e730,0xbb38938d,0xba7d4043,0x3b22ed21,0x3b4c3695,0x3b5c03d0,0x3ad0a298,0x3b01efe5,0x38f0e225,0xbb359b1e,0xbb6575a7,0xbb5e9f73,0xba72a8dc,0xb8c5aab5,0x3b7cd8e8,0x3b133999,0x3b851828,0x3b492300,0xb9c56200,0x3b3d5e1b, -0x3bb8248f,0x3bddbcb4,0x3bf0a15e,0x3c12ee64,0x3c233b31,0x3b64ed6f,0x3b31d018,0x3b9f7240,0xb7a7afce,0xbac9a3dd,0xbbc19559,0xbb9650da,0xbb902efa,0xbb8f4105,0xbbe0ca5f,0xbbf227ad,0xbbdc3bd2,0xbb9e446f,0xb9b798e8,0x3be4bf58,0x3c15ed0d,0x3beaf545,0x3b3cc412,0x3afa7231,0xba6940f7, -0xbba7d78e,0xbbab1cda,0xbb232f0f,0x3acc5003,0x3b4425ac,0xbbb77531,0xbbbebe7e,0xba7c50c7,0x3b8115cf,0x3c0646d4,0x3a8105e8,0xbbb88df5,0xbbeeb1c4,0xbb913b04,0xba31a609,0xba4f2a1c,0x3bfdf57c,0x3be4d027,0xbb403ad6,0x3b0b3488,0x3b23bb7b,0x3a6651cb,0xba0b6553,0xba92dca4,0xb97a557a, -0x3ade984d,0x3b2f5b8e,0x3af74b0f,0x3a4b125e,0xbb27f0ad,0xbc086c4d,0xbc220979,0xbba2656c,0x3c10b180,0x3bbc7170,0x3ba260d2,0x3bc6fae5,0xbba10f79,0xbc3480b9,0xbc2ee755,0xbbfcd4ff,0xba3e4fc2,0x3b0cc804,0xbbabeb91,0xbc36e7f8,0xbc87cf65,0xbb541db0,0x3bdcb42c,0x3c06d971,0x3b894c52, -0xb9550bf4,0xbb9d46bd,0xbb1a581d,0x3a800505,0x3b5ec2a3,0x3b2bc650,0x3a8300c0,0x3a98cd04,0xbb20285f,0xbb6b7311,0xbb821c1d,0xbb380fbf,0xbb169327,0xbb1ce344,0xbb958e39,0xbb54bb3f,0xbae5c7e9,0x3c0bac88,0x3c06675f,0xba2d2a91,0xbb8df279,0xbb4ef950,0x3bdb7a3d,0x3c0ff059,0x3c665d48, -0x3ca06428,0x3bac4bfa,0xbc3ef4dc,0x3bcbb1a0,0xbb62cab2,0xbbe334d2,0xbacd1b35,0xbb6f2e87,0xbb4e81a1,0xbb907aae,0xb9f46f39,0x3ad9f4c8,0x3abd7cef,0xba8ccd4d,0xbaf1c7e0,0x390e6d93,0x39fbd750,0x3ae6cc61,0x3aacf55b,0x3acc0265,0x3b03fb33,0x3b0e01e7,0x3abd4162,0x3b2b1f2d,0x3ba7a6b8, -0x3ba5c631,0x3b9a1111,0x3b24a1aa,0x3a49781e,0x3ad99833,0x3baf4cd3,0x3bb93b45,0x3c000b18,0x3c733456,0xbc7812e3,0xbcd485f3,0xbc8f0bbb,0xbc95bb3d,0xba8c3540,0xbb94cfce,0xba5d520f,0x3acf8817,0x3b2e3930,0x3a8c5786,0x3a48f369,0x39b7ea49,0x3a116247,0xbadcb4c6,0xbb026ca7,0xbabbf270, -0xba7a8874,0xbac3d388,0xbaec318d,0xbb2e5716,0xbb82aff0,0xbba022ab,0xbba895bf,0xbb8cd6b3,0xbba6a315,0xbba0dada,0xbb8123db,0xbad9755e,0x3b2d8901,0x3be5871c,0x3c19e506,0x3c25a5ea,0x3c2b1efe,0x3bc2a70d,0x3b0e6433,0x3b950a0a,0x3b0257d2,0x3b1bf2ff,0x3a46839d,0x3a5bbda2,0x3b2b8b08, -0xbb495b47,0x39d2e78d,0x3ab65bfe,0x3b34fae7,0x3b908f3f,0x3b73fcf3,0x3ac71f1d,0x3ab84dda,0x3ae6d20c,0x3b1d7bb7,0x3b4dac5c,0x3ab51d79,0xbb16dc7c,0xbb5fb4d8,0xbb8cd934,0xbb84dc1c,0xbaeeefbb,0x3963570b,0x3adcb357,0x3accb0e7,0x3aeef981,0x3afe7314,0x3ad9ca2a,0x3a6a7bf2,0x3849df6e, -0x3aebef41,0x3b8f58dc,0x3c070b49,0x3c10837b,0x3c274342,0x3c34c485,0x3c2f7ab4,0x3c267272,0x3c0826df,0x3bd436ce,0xb977d3a4,0xbb7f9e05,0xbba3beb9,0xbba3dd1a,0xbb9c8b5e,0xbaf79dd0,0x389d0a51,0xb902dae7,0xb95060f0,0xba7e03a4,0xbac00d1f,0xbb606cbb,0xbb7afa6c,0xbb7a831a,0xbb45f090, -0xbb52163a,0xbb898444,0xbb861ad0,0xbb3e9650,0xba50caec,0x3a15a806,0x3ae20e83,0x3ae8e1c0,0x3b2650e7,0x3b2bf7a3,0x3b024756,0x3ac60a3e,0x3aa64124,0x3b1609fd,0x3b130961,0x3b155ec7,0x3b056985,0x3af0e1cb,0x3b092000,0x3b1a3598,0x3ad651ad,0xbb557c5b,0xbb645f6f,0xbba6c504,0xbbe213ef, -0xbc1b18df,0xbc152b81,0xbc123ef8,0xbc0ee7fe,0xbbf71a50,0xbbcfb0bd,0xbbaa4068,0xbb8a437d,0xbb6be665,0xbb427b7d,0xbb3fa33d,0xbb38c075,0xbb2f363e,0xbad3b8e1,0xba310d03,0xb9b96637,0x398a6e68,0x3ab79835,0x3b1e6d81,0x3b183e1b,0x3b17c44a,0x3b25aba4,0x3b2e13b6,0x3b3bedcb,0x3b48f590, -0x3b2b3a73,0x3b07ff7b,0x3aa9bd0e,0xb7b44985,0xbaaddd76,0xbb1d03fc,0xbb3e1906,0xb926c5b6,0xb991342a,0xba0c0061,0xba8a5a22,0xba9bf27d,0xbac5617b,0xbb0de94c,0xbb36e2da,0xbb2f5ab9,0xbb21c3aa,0xbb1985d6,0xbb144a62,0xbb0bd03b,0xbafa9af1,0xba9c3e67,0xba0a8cc5,0xb819cf1f,0x39d45d58, -0x3a933726,0x3abbd816,0x3ab45397,0x3aa33577,0x3aa043db,0x3a9bd1ac,0x3aa1701d,0x3a9cefef,0x3a84c7a1,0x3a4c6639,0x3a14cbf9,0x39a7e802,0x394eb910,0x398f21df,0x39b10724,0x39ff3a3a,0x39f45de7,0x396d4b5d,0xba80d018,0xba8a942d,0xba7480ca,0xba7d017f,0xba6e28d4,0xbae533db,0xbadf743c, -0xbae3a5a2,0xbac2bc56,0xbabaa9c9,0xbaa943ae,0xba956c64,0xba7dde04,0xba690861,0xba6dfe27,0xba797487,0xb993fb2b,0xb9b4ec62,0xb9aa0e9c,0xb9aab3a6,0xb9cfdbfe,0xb9e9e1cc,0xba09ccf2,0xba0d2474,0xba16eb0a,0xba199df1,0xba21a429,0xba2026c2,0xba1be0cd,0xba0856f2,0xba02608f,0xba0d5a2a, -0xba3b7afe,0xba69e928,0xba838cca,0xba84cb27,0xbaae0886,0xb93c8c9b,0xb869e38b,0xb928071e,0x38255a66,0x38e15c79,0xb7bcc538,0x3887cc27,0xb8ab4dd5,0x39300392,0xb971dd6a,0xb933b351,0x3926bb78,0xb90577e8,0xb94f28ab,0xb9350d83,0xb85f00c1,0xb8e21ad0,0xba8b8495,0xba3233cb,0xba32edfc, -0xba17460b,0xba3278dc,0xba31ddb6,0xba3d8acb,0xb9f0e4c5,0xb9394517,0x3a0060f5,0x399941e6,0x3999bab2,0x38b156ba,0x392d77a0,0xb8a44c24,0xba273ef4,0xba486fbb,0xba444664,0xb9bc0d79,0xb93781ba,0x3aa3a326,0x3a398ff1,0x3a9a8e0d,0x3a9a7634,0x3a51a5a8,0x3a34a265,0x3a5c4f4a,0x3ad18175, -0x39fb4f23,0x39a6e545,0x3a7117d2,0x3998b860,0x399d44cf,0x38a0dff4,0x39cd65fb,0xb944f581,0xbb0ce40c,0xbaeba552,0xbaffbfcb,0xbaedeead,0xbb114b6f,0xbb105b13,0xbb02d147,0xba92213a,0x39298ac5,0x3b16a9b2,0x3b09f90d,0x3ade05aa,0x3a2312e0,0x39fe75fb,0xb9890a1d,0xbaba5a04,0xbaeeadf5, -0xbaacc43e,0x393f6b78,0x3a5d2aae,0x3aa84437,0x386deb67,0x3ac1096c,0x3b007b1e,0x3a9cc0cf,0x3ada263e,0x3a8a97d3,0x3b1a7311,0x3a86c8cc,0x3a7eb12e,0x3b496a77,0x3aa63fd5,0x3a9dc700,0x3a9ba410,0x3a42c47b,0x39d14152,0xbb5f973f,0xbb2bd57b,0xbb3db12a,0xbb2d32d4,0xbb66c2e7,0xbb6254a3, -0xbb525520,0xbaf3449d,0x390242c5,0x3b82da29,0x3b4be80d,0x3b43f657,0x3a9de2fa,0x3b0cde65,0x3a0518d1,0xbb29db94,0xbb58696c,0xbb4b2fa8,0xb9c3bd7a,0x3a0de29c,0x3ba8fdc9,0x3b39df44,0x3b920701,0x3b757907,0x3a9f2791,0x3b3090a5,0x3b9c25ef,0x3be82fbc,0x3bdb95de,0x3c03edb6,0x3c1309cf, -0x3b5add88,0x3b3468f8,0x3b896ee4,0x3a8e1013,0xb9a041f1,0xbbb3fd45,0xbb938390,0xbb9cabb2,0xbbac751b,0xbbee7352,0xbbefda7b,0xbbcd4bd8,0xbb528134,0x3ae9ddc0,0x3c1c29f5,0x3c15772b,0x3bc6e444,0x3ae95d4c,0x3afef65c,0xb974a4a2,0xbb9718e4,0xbb978853,0xbb004148,0x3b328de7,0x3b92eaff, -0xbbe75e8a,0xbbe1316c,0xbb5bdc87,0x3ab2e615,0x3be2dd86,0x3b1cb5a8,0xbb6c769c,0xbbef9504,0xbbb5c9cd,0xbac714eb,0xba83239f,0x3c04c05a,0x3bf949fd,0xbb2f2b04,0x3ade00b2,0x3b05e6c3,0x3b1707b9,0x3a09de8c,0xb96df67e,0x39a8b081,0x3b42abe5,0x3b71d3cd,0x3b1fac37,0x3a1a2a05,0xbb502637, -0xbc0c7eff,0xbc16f846,0xbb5b7783,0x3c26800e,0x3bc547be,0x3ba14702,0x3bc27c2b,0xbbb24e84,0xbc32c59f,0xbc33b93b,0xbc0e751d,0x3b6af1e5,0x3b929b60,0xbb15c3e2,0xbc1a14cd,0xbc7ee370,0xbbcecd8b,0x3b3f7918,0x3bd26239,0x3ba3db4d,0x3a83fcb5,0xbb9ffd52,0xbb60a3a1,0xb90c4d08,0x3b384928, -0x3b01f2e1,0x3a0dce13,0x39eaac63,0xbb28fe73,0xbb68768b,0xbb981073,0xbb38a6ec,0xbb1d4ffb,0xbb2da8f4,0xbb966ef2,0xbb376bc6,0xb9a30f1c,0x3c24458d,0x3c0f9729,0xbab69b24,0xbb825cf3,0xbb0fba45,0x3bc9f44c,0x3c2c9dc7,0x3c67ed68,0x3c785856,0x3be4dfc8,0xbc8f0d3c,0xbba18bbc,0xbbac18e1, -0xbbbd7125,0xbacf098c,0xba9eb6e6,0xbad506bf,0xbbc3cb42,0xbb172885,0x399ddb92,0x3ae21905,0xba41da22,0xbade1d8a,0xb955bb4b,0xb9c8a4a3,0x3a70343a,0x3ac460ca,0x3aa62cd4,0x3ad442e0,0x3aa49e77,0x3b06c73b,0x3b6e2a99,0x3baa209d,0x3ba50806,0x3b827932,0x3a9ed148,0xb8af6fb8,0x3aea69d2, -0x3bb52e1d,0x3c146a90,0x3c06135d,0x3b921ae9,0xbc8232fd,0xbcb744b9,0xbc6b90f3,0xbc9c8a1f,0x3b5791e6,0x3a52cfa4,0x3ac5a0f8,0x3b30face,0x3b8ee158,0x3a90095b,0x394df7b4,0x39c5c93e,0x39e06691,0xbac08a2c,0xbb07e322,0xba6d13cc,0xb9ad7178,0xbab3dbe1,0xba874834,0xbb062851,0xbb82eb0e, -0xbba2304f,0xbba46951,0xbb8fc8b9,0xbba56e14,0xbb9d7762,0xbb8549fb,0xbaa53c8a,0x3b2bd21a,0x3be3a81c,0x3c0a1351,0x3c1007a7,0x3c10ff45,0x3b56f17b,0x3a1e9604,0x3b5beee4,0x3b55a230,0x3b80f1bf,0x3b5b0f6c,0x3b708552,0xbb558f92,0xbbd48450,0xbb0d7c46,0xb79ed87f,0x3adb7ba1,0x3b7a64d4, -0x3b76d7e0,0x3b021004,0x3b0a0233,0x3b15cd2c,0x3b09d838,0x3b461c28,0x3ad74ccc,0xbaaf7556,0xbb5760c3,0xbb985e8a,0xbb8f37c2,0xbb337630,0xba3057a7,0x3a758a8e,0x3a958d7a,0x3adb268f,0x3ac7c911,0x3b04b68e,0x3af8eda9,0x3ae6ac75,0x3b883dc3,0x3bdae8ac,0x3c25d779,0x3c1f7faf,0x3c2b0505, -0x3c2831c5,0x3c298b23,0x3c04771d,0x3b3c5c80,0x37ff60fd,0x3b542a3d,0xba373879,0xbaf05433,0xbaaa766f,0xb9f2ded5,0x3ad7278b,0x3b3daa3e,0x3b0629ab,0x3b02c378,0x3a7675bc,0xb8f7a608,0xbb1f8b18,0xbb607677,0xbb7a02d1,0xbb47f052,0xbb49a1c3,0xbb651cf0,0xbb8d96c6,0xbb6eeba8,0xbb019427, -0xb99deb85,0x3a8101db,0x3a8dc422,0x3b0fb577,0x3b170d22,0x3ac7ac59,0x3a377c01,0x398ca8e3,0x3a8bb832,0x3ab6bbb9,0x3aeeda59,0x3b0bf9bc,0x3b2afc00,0x3b7de9b5,0x3bb416f9,0x3ba2c9e9,0xbb85a6cd,0xbb9843cb,0xbbbd33bf,0xbbee5f2d,0xbc1b771a,0xbc13284c,0xbc09eca6,0xbc020182,0xbbe15b4d, -0xbbbf7582,0xbb98de7c,0xbb829384,0xbb5eebfc,0xbb4acfad,0xbb3b2565,0xbb39e1a2,0xbb2f04cb,0xbb03225a,0xbab3599c,0xbac5a40b,0xba2f24aa,0x3a266566,0x3af48b87,0x3acda1bb,0x3ab812f4,0x3acdff19,0x3adb1627,0x3af0d7ef,0x3afa4c74,0x3adaf7e3,0x3aa4e7ff,0x3a3863c4,0xb964646e,0xbaade734, -0xbb1972cc,0xbb5ffb0f,0xb9695838,0xba11ae6b,0xba34caae,0xbab6e38d,0xbacb0d4e,0xbaf9800f,0xbb301494,0xbb5e343b,0xbb56ac57,0xbb467d79,0xbb392c32,0xbb356c01,0xbb2996c8,0xbb179038,0xbaccbda7,0xba809031,0xb9ff5014,0xb899ee66,0x3a3e7dc4,0x3a3bb6c4,0x3a5e936d,0x3a630bc6,0x3a84fadf, -0x3a99efcf,0x3abd48dd,0x3ad021c6,0x3ac2c294,0x3ab25df4,0x3aa4e22a,0x3a8c3af2,0x3a7b30c4,0x3a7d0462,0x3a3a4b42,0x3a230e0a,0x3a03b21b,0x397ce7c9,0xbae86781,0xbb0130e8,0xbae71c6b,0xbae68c11,0xbad7869f,0xbb279aa9,0xbb21e8e1,0xbb211637,0xbb0d7356,0xbb07f35d,0xbafe7039,0xbae3cc41, -0xbacaf782,0xbabec900,0xbac9ffb7,0xbad1d59e,0xba55afba,0xba778660,0xba6dec0e,0xba7e5eeb,0xba760595,0xba7ad175,0xba825e3b,0xba79cbcf,0xba78a934,0xba691ff4,0xba727e70,0xba709eae,0xba6b77ac,0xba574aa4,0xba488bcd,0xba34b4bd,0xba80aa15,0xbaa4b526,0xbac758c7,0xbadd0d10,0xbb0b0fe0, -0xb8860ff5,0x38d0b5ba,0xb8d59105,0x38eea4e5,0x39511e32,0x396349f2,0x38c0ad29,0xb8927452,0x3980321e,0xb995f0b3,0xb98dfab2,0xb8b69a7c,0xb8501a71,0xb83c8a24,0xb921ff05,0x391832f2,0x3912b8de,0xba44dfca,0xb9f8ebf6,0xba0da623,0xba09fe18,0xba160c66,0xba0cf375,0xba14a5cb,0xb95bcfce, -0x38bd84f7,0x3a500eb0,0x39c637d8,0x39a79b05,0x38918fd4,0x39947ca9,0x388fa687,0xba0a5436,0xba2405ce,0xba1a50d4,0xb93853a3,0x36cf59b5,0x3ad2fd24,0x3a595619,0x3aa9e2e0,0x3aa0d9b8,0x3a97c6f5,0x3a161494,0x3a19e8f7,0x3ac6f308,0x391669d3,0xb8f7a93e,0x393fc08e,0x39807d3f,0x39e6e96f, -0xb78bf399,0x3a47c801,0x399297f5,0xbacb7c4a,0xbacbbce9,0xbaf98662,0xbaf89c9e,0xbb0d2c59,0xbb026d48,0xbadbb5ae,0xb9ec0f31,0x3a637377,0x3b425af8,0x3b0aa727,0x3abedadb,0x39af1d59,0x3a1aa343,0x37db3aed,0xba9e03d2,0xbac55897,0xba816e52,0x3a188976,0x3aa9f1f5,0x3ad2c19a,0x37b03078, -0x3ab1a209,0x3aeb475f,0x3afcb86c,0x3ab3c8c6,0x3a08867c,0x3b0a3a66,0x370e9710,0xb9767e44,0x3aab9a9a,0x3a82a2ed,0x3ac1bb09,0x3a51289d,0x3ab256da,0x3a9ecff2,0xbb1b0a18,0xbb0af306,0xbb35aa19,0xbb362154,0xbb5ec548,0xbb49fbfa,0xbb364822,0xba5b144f,0x3a99a6c7,0x3ba9de24,0x3b441b1e, -0x3b2a177b,0x3a4e2c9e,0x3b14ebcc,0x3a79d8ab,0xbb1c863c,0xbb373fb5,0xbb23bc56,0x3944af65,0x3a91d2b9,0x3bc3c42a,0x3b44996e,0x3b92b57a,0x3b84082e,0x3b28a95d,0x3b152a9e,0x3b727a71,0x3be1effc,0x3bbc70e7,0x3bdb1fa5,0x3be87b45,0x3b517464,0x3b4535cc,0x3b6d6366,0x3b1053c5,0x3a809fc2, -0xbb95a885,0xbb8a5dcf,0xbba656b4,0xbbc227de,0xbbf2d6e7,0xbbe336b6,0xbbb3a05b,0xbab2de19,0x3b807306,0x3c3c9c1c,0x3c0f8656,0x3ba06c53,0x3a220ce6,0x3b02c760,0x39f19e1f,0xbb87064f,0xbb6ac145,0xba83c69f,0x3b74dd0b,0x3bb8be94,0xbc04ab36,0xbbee0f07,0xbba87142,0xba47b3c7,0x3bbcc663, -0x3b54fea1,0xbb003a8f,0xbbeed4ef,0xbbcbda9a,0xbb0203bb,0xba3d57ae,0x3c02a347,0x3bf5dddd,0xbb0dab6c,0x3a8f8d0d,0x3ac42e49,0x3b6c7225,0x3b020645,0x3aa35685,0x3ae75be8,0x3b9bfcef,0x3b9ddef1,0x3b3eab4f,0x3855d1be,0xbb88cdf8,0xbc0faecd,0xbc079d14,0xbacd7985,0x3c377a9f,0x3bce2d46, -0x3ba10317,0x3bc7c0a5,0xbbb3c2aa,0xbc28d20f,0xbc2d9a16,0xbc17c336,0x3be2c6eb,0x3bc695a4,0x3a0f0c17,0xbbf52e06,0xbc721c85,0xbc117771,0xba28bc10,0x3b908e2d,0x3babbe54,0x3af5a3bf,0xbb9700ad,0xbb8bb05e,0xba9abd9c,0x3b1572b5,0x3a9e0a00,0xb8816b81,0xb9cec550,0xbb1250d8,0xbb3e157a, -0xbb98e69d,0xbb248fab,0xbb1f1aa5,0xbb385415,0xbb89f93e,0xbaf8f681,0x3b013414,0x3c2fe9ca,0x3c086d01,0xbb11605f,0xbb778a0d,0xbaa8f7f7,0x3bb8195c,0x3c420493,0x3c5fc1ac,0x3c24cf5f,0x3bf9b005,0xbcb3838b,0xbc867598,0xbbcfbfbe,0xbb6a81fb,0xbb105301,0x3a9ae479,0xb805a675,0xbbda9e32, -0xbb647ac5,0xba460d8a,0x3ade089f,0xb8e91e59,0xbaa81b7a,0xba440d87,0xba8a1c84,0x39967703,0x3ade25e4,0x3a6189f4,0x3a53a8f8,0xb88f9a68,0x3b158d3d,0x3b85fa2d,0x3b99f32a,0x3b96a9e6,0x3b4b420e,0x399d76bd,0xba19d834,0x3ade7d44,0x3b91db77,0x3c4cb874,0x3c18fbd0,0xbb9e4af2,0xbc70c69c, -0xbc8d7b45,0xbc3fd995,0xbc9800a4,0x3c03d535,0x3bdf4791,0x3b8b1012,0x3b748f1a,0x3bb2e999,0x3a8c32d5,0xb960dfa8,0x3a1e54d4,0x39b80fe8,0xba8c8933,0xbb04c196,0xba20fd74,0xb800eeb0,0xba9044c2,0xb9e3b83a,0xbad31588,0xbb80195b,0xbba0a370,0xbb9eb4d6,0xbb94fb80,0xbb9dc83c,0xbb9188cf, -0xbb79d5ad,0xb9e2cf70,0x3b3b6528,0x3be0ab4f,0x3bf2bd17,0x3bed26cb,0x3bd495f0,0x39a69b14,0xbaad3322,0x3aaf1988,0x3b58982d,0x3b8e29e8,0x3ba19f18,0x3bd1183c,0xbc033d5f,0xbc1105e6,0xbb8a3f58,0xba833c2a,0x3a87e16d,0x3b46e631,0x3b5f365e,0x3b1e8d6d,0x3b2d4081,0x3b2f0b53,0x3ae9d63f, -0x3b22adb6,0x3ac7452b,0xb99dc421,0xbb49ff05,0xbb9d0df4,0xbb94af3e,0xbb6f93ec,0xbaee4c1e,0xb996cf3a,0x39ffcc8f,0x3ab73821,0x3aa4fcb0,0x3b100d54,0x3b34c17a,0x3b7e2052,0x3bc60040,0x3c065118,0x3c389f3c,0x3c2606d1,0x3c2806bc,0x3c16b84b,0x3c20f67e,0x3bcce09e,0xbad7d8b8,0xbbae808f, -0x3bcdf0d7,0x3b2c544b,0x3ac9322d,0x3b0c349e,0x3b5127e7,0x3b96729a,0x3ba85d1a,0x3b80dfba,0x3b7bee33,0x3b2965c1,0x3a8ffd4f,0xbaadea3a,0xbb3c5e17,0xbb7bfec3,0xbb54c2b5,0xbb49845e,0xbb3e5699,0xbb87517f,0xbb7c10b3,0xbb376996,0xba85e166,0x399a4aa2,0x3a1567a1,0x3add47fc,0x3ae576af, -0x3a3e5f52,0xb895cd69,0xb9e12816,0x38a58a20,0x3a345336,0x3abf30da,0x3b13895c,0x3b51b21f,0x3ba8111a,0x3bfc9e7b,0x3bf8e07f,0xbb8f2197,0xbbaef518,0xbbc7408e,0xbbebbbe4,0xbc12f8be,0xbc09682e,0xbbf7983e,0xbbe259bb,0xbbc906ee,0xbbaf216f,0xbb8f1cd1,0xbb813c5c,0xbb630889,0xbb64542f, -0xbb4a840d,0xbb51c7c5,0xbb4cad4b,0xbb30edd7,0xbb14e6b3,0xbb2681b7,0xbacba873,0xb987ad92,0x3a896f79,0x3a36084c,0x3a0db658,0x3a403505,0x3a3599f0,0x3a31f850,0x3a13fe9e,0x3a1d4825,0x39dbd2d2,0x39981e4d,0xb8a61255,0xba507191,0xbad218c9,0xbb598848,0xba21ec9f,0xba982a61,0xbaa39988, -0xbb054bcc,0xbb126f87,0xbb2af80f,0xbb610072,0xbb87d105,0xbb82cb42,0xbb724059,0xbb5fc7c2,0xbb5b9683,0xbb4cfb71,0xbb37e5ed,0xbb0ac0e7,0xbad6e8fd,0xba98f024,0xba4e94b1,0xb8019482,0xb97b2696,0x38002764,0x3942fb22,0x39f75733,0x3a546434,0x3aa336eb,0x3ace7b4b,0x3acde135,0x3ad2c592, -0x3ad63912,0x3aca2159,0x3abf3641,0x3ab68f17,0x3a4b5ed7,0x39ca20ca,0x3917cf72,0xb9021155,0xbb212f1a,0xbb33e47a,0xbb24b498,0xbb250526,0xbb1ea1d5,0xbb54b22a,0xbb50b2b7,0xbb522998,0xbb3c4d30,0xbb35e39a,0xbb2cfedb,0xbb1d9a76,0xbb108340,0xbb0936b8,0xbb0e9f66,0xbb106244,0xbac00255, -0xbad112b3,0xbac849c5,0xbad3f2f6,0xbac33f94,0xbabebae9,0xbabc2e5a,0xbab003e1,0xbaa92a6a,0xba99ad5f,0xba9e5df3,0xba9e1fe7,0xba9bc8ec,0xba93899e,0xba89e8c4,0xba64196f,0xbaa1a395,0xbacc7cf0,0xbaffa7b0,0xbb13c050,0xbb33f03c,0x389b9381,0x3985a7a2,0xb74829cb,0x390d57d1,0x396413b3, -0x39c7b11b,0x38b8078b,0xb9059019,0x397da9c3,0xb9d30def,0xb9e310b2,0xb9caf8e3,0xb86dde15,0x3805a4b1,0xb91f8842,0x398c2f7d,0x39b178df,0xb9efbfa0,0xb9a5deb2,0xb9db5401,0xb9da70bd,0xb9dd9837,0xb9ba227f,0xb9bbb40c,0x38868e1c,0x39c0a5ac,0x3a8b5ae8,0x3a038659,0x39ce8b46,0x38ab98e8, -0x39e5b45d,0x39858a80,0xb9d36c47,0xb9de5e69,0xb9bec31b,0x388163bc,0x3953087b,0x3af0f6af,0x3a62a72a,0x3a9e8902,0x3a97665c,0x3abb9742,0x39b64350,0x39786fd7,0x3ab02ee9,0xb9831b38,0xba1d1600,0xba0f8a44,0x391f3523,0x3a0cbc7f,0xb80a73d9,0x3a8794db,0x3a331164,0xba61f2e7,0xbaa79b31, -0xbaf4573f,0xbaf9087f,0xbb0243bf,0xbadad7f0,0xbaa04f65,0x39869682,0x3acd3bce,0x3b6537aa,0x3b0e2f2f,0x3aad35b8,0x38f24ab5,0x3a4aa9e0,0x39c20467,0xba823940,0xba899c91,0xba05a146,0x3a8981a0,0x3adad27f,0x3aec2e93,0xb87a16e8,0x3a8bdb7e,0x3ac5301b,0x3b263aa4,0x3a6d31bf,0xb923a583, -0x3adfeb96,0xba8cb779,0xbabcb7a0,0xba0b0a68,0x3a21d6a6,0x3ad1555c,0x3a091102,0x3af090ab,0x3af3cbc0,0xba921d47,0xbacf2908,0xbb286c22,0xbb36aa48,0xbb4a3834,0xbb283f50,0xbb0ef428,0x39691d7d,0x3b0e6253,0x3bc51b70,0x3b41ba6f,0x3b1c05b2,0x39ed8591,0x3b241621,0x3ac233bd,0xbb101eef, -0xbb05ca6a,0xbad6d413,0x3a6836d8,0x3acf374d,0x3bcdfdfd,0x3b374d6d,0x3b833bf1,0x3b8007fc,0x3b7371d2,0x3acf3ea6,0x3b1bdcec,0x3bca41e1,0x3b9106a7,0x3ba10b05,0x3b95eedb,0x3b456ef6,0x3b5c63d2,0x3b4e17e6,0x3b4e6949,0x3b10bf4c,0xbb4a3191,0xbb73406c,0xbbae3da9,0xbbd36947,0xbbed2528, -0xbbcbbd70,0xbb8f3f70,0x3a226531,0x3bc37768,0x3c51d82e,0x3c091258,0x3b8344f9,0xb9a03157,0x3b11cecb,0x3aa1beee,0xbb70e748,0xbb120b95,0x39a584f2,0x3b9d88ca,0x3bd19da1,0xbc0f2457,0xbbe89ac2,0xbbd349f1,0xbb2a7475,0x3b998160,0x3b671970,0xba451989,0xbbe29f46,0xbbcb4723,0xbb02c6b4, -0xb9a489f9,0x3beea75d,0x3bdb955b,0xbab1ec66,0x39d94ec1,0x3a644ad7,0x3b942e8d,0x3b647040,0x3b503373,0x3b8846ae,0x3bdca192,0x3bbe2401,0x3b550b11,0xba5cf3f3,0xbbb3cacd,0xbc11c909,0xbbed9766,0x397fa746,0x3c435795,0x3bd93aaa,0x3b9fb0fc,0x3bc714d3,0xbba5c011,0xbc16eef1,0xbc1f6b3d, -0xbc1a4545,0x3c10dee8,0x3be50cb0,0x3b588099,0xbba5edbb,0xbc641047,0xbc2d6592,0xbb5ed77f,0x3b234654,0x3b9db1e7,0x3b0d284b,0xbb828979,0xbb9a0ed2,0xbb0440f1,0x3af1ffed,0x39c38f3b,0xba37f98c,0xba9ea6d7,0xbac53aca,0xbaef22a9,0xbb860087,0xbb01a454,0xbb17a22c,0xbb2d72e8,0xbb6ed578, -0xba3d57fb,0x3ba1b688,0x3c2dad04,0x3be04b82,0xbb67dbe4,0xbb755837,0xb9a7aa02,0x3bb24f2b,0x3c5232b7,0x3c52e84f,0x3baf5608,0x3be69b63,0xbcc728d2,0xbcdb78a3,0xbbfa5c20,0xbadc5c01,0xbb69ae52,0x3b4d8ac5,0x3ac06068,0xbbd7bf6e,0xbb8353d7,0xbac07902,0x3abc049a,0x3a225d34,0xba47be4c, -0xbab443ee,0xbac1b8bb,0xb8a86af7,0x3af63e20,0x3a15d230,0x38107330,0xba8d73ae,0x3b0fa557,0x3b7ec089,0x3b7da814,0x3b7bcc37,0x3b081638,0xba00fb96,0xba876eee,0x3ab47f44,0x3b3b6041,0x3c759962,0x3c28ad5e,0xbc40ada4,0xbc57d71b,0xbc56ec62,0xbc20d313,0xbc89992e,0x3c47e79e,0x3c50ce67, -0x3bf68947,0x3ba1f1d0,0x3bb99b16,0x3a902e2f,0xb98cb7ee,0x3a656e39,0x39dc14ce,0xba050c71,0xbaee9fe6,0xba10f2a2,0xb7306555,0xba2c0c0f,0xb80c93f8,0xbaa8af60,0xbb6c0eab,0xbb99c9c0,0xbb99c89c,0xbb977dd0,0xbb90fadf,0xbb7c6d35,0xbb4a7f85,0x39edee4e,0x3b4fe5e0,0x3bdc502f,0x3bd1ea02, -0x3bb4a65a,0x3b6b51bd,0xbb092600,0xbb346459,0xb9c447b4,0x3b1f45d0,0x3b6a0be1,0x3bab8b8e,0x3c04d5ff,0xbc355b2a,0xbc21bfdd,0xbbb89d08,0xbada01ce,0x3a3b26ee,0x3b0a4143,0x3b2e1e2e,0x3b315218,0x3b3bc936,0x3b34994f,0x3ac0c906,0x3ade009d,0x3a8ffb21,0x39fa90ea,0xbb3ce07a,0xbb9c1939, -0xbb9b481c,0xbb90a459,0xbb429b7e,0xbae175b7,0xb9d6de77,0x3a5f5bf2,0x3a80f4bf,0x3b18a644,0x3b6b64e8,0x3bba3bd6,0x3bec1f32,0x3c11b93f,0x3c392128,0x3c264dfc,0x3c217316,0x3c03689d,0x3c0bc622,0x3b8e96af,0xbb8dea0c,0xbc10e828,0x3c0780fb,0x3bab0890,0x3b9627bf,0x3ba36b98,0x3bb8f977, -0x3bd46532,0x3bd3c45a,0x3bad465d,0x3ba90a9f,0x3b7f30af,0x3b114334,0xb93e4773,0xbb0f0ea5,0xbb778b8f,0xbb612c77,0xbb4c2364,0xbb24cb13,0xbb6dca86,0xbb6b4230,0xbb4f688d,0xbac163ed,0xb99b834a,0x39033161,0x3a8590ba,0x3a7d80e1,0xb91b8fa7,0xba3b90ff,0xba4dc7a2,0xb9d2dd70,0x39f51811, -0x3abfa115,0x3b20e0a0,0x3b72aa9a,0x3bbe2e04,0x3c0f0510,0x3c13ffac,0xbb8958bd,0xbbb28773,0xbbc2e8f6,0xbbdd4405,0xbc0546f2,0xbbf2bd7e,0xbbd0a422,0xbbb6dd2a,0xbbaa184d,0xbb99c946,0xbb863252,0xbb809cf2,0xbb73be02,0xbb84a114,0xbb6a4260,0xbb7428d0,0xbb73db73,0xbb5fa1b2,0xbb49c0c6, -0xbb508c0d,0xbb0fcfab,0xba8e3f27,0x39091ffa,0xb931295e,0xb95f5207,0x383cc34c,0xb938e3e6,0xb9d01dd8,0xba35709d,0xb9e01b83,0xb9aee4fe,0xb71f0345,0x390589d1,0xb910c871,0xba317440,0xbb394ed8,0xbaacd5e1,0xbb033383,0xbb0776c2,0xbb395254,0xbb49ada9,0xbb62e21c,0xbb8b83ff,0xbba14402, -0xbb9ab9b6,0xbb8fd07d,0xbb8506a6,0xbb81828e,0xbb7160d8,0xbb5b32fa,0xbb353432,0xbb1c352a,0xbb000304,0xbad24393,0xba7a005f,0xbaa18c29,0xba6c9df0,0xba289e9e,0xb993785a,0x394f028f,0x3a3f6b2c,0x3a9eafdb,0x3aa806cb,0x3abec04f,0x3ace55c0,0x3acde04f,0x3ac48508,0x3ab47c1f,0x39f4726c, -0xb95261c8,0xba12b930,0xba5b7259,0xbb43e768,0xbb5a12f4,0xbb4c5260,0xbb4e6203,0xbb4a5ba0,0xbb75cbef,0xbb75be90,0xbb7c0f5e,0xbb65332c,0xbb5e46da,0xbb54d7f3,0xbb454b3a,0xbb380844,0xbb2f3735,0xbb32e34f,0xbb3189b2,0xbb099396,0xbb10ce0b,0xbb0aca8d,0xbb0fcf48,0xbb025e0e,0xbaf84b6c, -0xbaedbb29,0xbadd521c,0xbad1bb82,0xbabcbf1a,0xbac245c6,0xbac37f13,0xbac26ee4,0xbabe5538,0xbab5e441,0xba97a230,0xbac8bd56,0xbaf30bf2,0xbb173d1e,0xbb30bbc2,0xbb4d9f2b,0x3987b5fa,0x39ded482,0x38dbe26e,0x395c088b,0x399f8bbb,0x3a2134e5,0x39123325,0xb8d26c2e,0x39a035f6,0xb9e2e06c, -0xba03c35c,0xba12cff5,0xb60fa8f8,0x392a4746,0xb86a0d87,0x39e97b9b,0x3a143916,0xb89005c4,0xb8957b83,0xb95e541b,0xb9858c59,0xb95cb42c,0xb8e62210,0xb8927a9b,0x39c8484e,0x3a3028b3,0x3aaa516c,0x3a35fd9f,0x3a11c19b,0x39339a21,0x3a2cb214,0x3a02a649,0xb976d5f1,0xb926d6b1,0xb89c42df, -0x39c2ba98,0x39dd50ac,0x3affcf6e,0x3a6620be,0x3a8addd5,0x3a84740e,0x3ae5394a,0x39158bbc,0xb8dfa8cd,0x3a97a1f3,0xba2c9dcf,0xba8b426b,0xba8e53ad,0x3865fed0,0x3a1c5f60,0x381ce5aa,0x3aa5e269,0x3a8c5374,0xb88d6523,0xba6eca10,0xbadc9608,0xbae70eed,0xbadd065f,0xba9e3a2c,0xba1e758e, -0x3a84f648,0x3b13337f,0x3b7c8642,0x3b167581,0x3aafa2bb,0x382eb3da,0x3a8dd0e9,0x3a56b6e6,0xba378fcb,0xb9f4a460,0x38b0edb8,0x3ad2f04e,0x3b01a2b6,0x3af438b2,0xb8f62144,0x3a2fd22a,0x3a92e538,0x3b4ba500,0x39c48eaf,0xba5bb7a5,0x3aa6e479,0xbb0ab822,0xbb29322d,0xbb0a60b3,0x38fcc9f4, -0x3ac9dbed,0x39a9d03e,0x3b0e9b83,0x3b19e161,0x396faaba,0xba7f7467,0xbb1289a5,0xbb2d6225,0xbb292a2f,0xbaf63ec1,0xbaafb8dd,0x3ab0035a,0x3b4e5ae8,0x3bd405cc,0x3b4b3ef0,0x3b20b639,0x39b7bcda,0x3b3fcdc3,0x3b0a8c02,0xbafd629d,0xba96830c,0xba27021b,0x3ae5cda6,0x3b02258f,0x3bcaa1a8, -0x3b215503,0x3b4c5842,0x3b5e3971,0x3b9ddff0,0x3a3c10c3,0x3a635b2a,0x3ba560e5,0x3b303b6d,0x3b36fdc6,0x3aece76d,0x3b3133bc,0x3b6cf36c,0x3b330adb,0x3b7b0249,0x3b58c669,0xba8d9ea7,0xbb40c5af,0xbbaf84f9,0xbbdb8bcd,0xbbda54ae,0xbba76abb,0xbb3a2ac5,0x3b33e0d5,0x3c00e513,0x3c5a8d4b, -0x3c0396de,0x3b65081c,0xba5a0f95,0x3b32529c,0x3b1095e7,0xbb45b73a,0xba2a35c6,0x3af0738f,0x3bc5567f,0x3be0c521,0xbc151c69,0xbbd8023f,0xbbefe365,0xbb85f066,0x3b671fed,0x3b5b5008,0x38f3d2bd,0xbbc20554,0xbbb38775,0xbad68f73,0xb776ec0c,0x3bc64c18,0x3bb08c05,0xb98906c9,0xb987f2a5, -0x391a001e,0x3b9e69a0,0x3b9a5d40,0x3bad8444,0x3be0fdca,0x3c093ab7,0x3bd5af5f,0x3b63f355,0xbafd13d1,0xbbde9b16,0xbc0f9d1b,0xbbc4ee6f,0x3b08d653,0x3c4d5755,0x3beca437,0x3b9f31de,0x3bb4197e,0xbb944b73,0xbc01c6c3,0xbc08f555,0xbc171aec,0x3c16503c,0x3bfb466d,0x3bcb3723,0xbafff241, -0xbc4fee57,0xbc3b3db1,0xbbb0a5f6,0x3a657955,0x3b80e092,0x3b00477c,0xbb4ffc54,0xbb99da2e,0xbb29e73d,0x3abe9f93,0xb9d95ccd,0xba9cfb28,0xbaf0296e,0xba12ab2b,0xba084a85,0xbb3f8382,0xbab3c796,0xbb0b73ea,0xbb0e5256,0xbb385eef,0x3a2c48ab,0x3c003fc0,0x3c1d257b,0x3b9330d6,0xbbaf7971, -0xbb7cfcfc,0x3a4156c1,0x3bbdbf25,0x3c615975,0x3c45ce90,0x3aa0b853,0x3bac1b93,0xbcc0a0fd,0xbd0cfe59,0xbc27abbf,0xbacebffa,0xbbaafd28,0x3b89d223,0x3b2a45a6,0xbbb70050,0xbb831076,0xbaf9bd9b,0x3a96fe52,0x3aa6201d,0xb980113d,0xbaffdb5a,0xbae023aa,0xb99f8bdd,0x3b01cd79,0x3a0bfa3e, -0xb99999f9,0xbaaf6136,0x3afd0d0c,0x3b584a4c,0x3b472721,0x3b39d658,0x3a6685ba,0xbaa4f337,0xbacdf74e,0x3a723167,0x3abf2e86,0x3c818955,0x3c258559,0xbc83246d,0xbc44fad1,0xbc2807a8,0xbc04d353,0xbc58d7ae,0x3c73ad87,0x3c92d772,0x3c369547,0x3bd5beb2,0x3ba533fd,0x3aa9e3b0,0x38f1cc4e, -0x3a88b32c,0x3a0c7253,0x38993ab2,0xbabf6c9d,0xba2e3984,0xb916b24b,0xb8c888d4,0x396e3925,0xba77291d,0xbb4232b5,0xbb89b8ca,0xbb9122c6,0xbb9160c2,0xbb7d83e6,0xbb497a07,0xbb016c49,0x3a9bde8a,0x3b67ae1f,0x3bd58d1b,0x3bb81489,0x3b7a542c,0x39489f7e,0xbb7356b5,0xbb5c2690,0xbaafdd76, -0x3a8a7fea,0x3af3a257,0x3b8e8235,0x3c06a4ad,0xbc485323,0xbc1d8ff6,0xbbd05454,0xbb097e46,0x39f969f9,0x3a92a6b8,0x3add310c,0x3b36a7c0,0x3b34c3d8,0x3b234143,0x3a960d97,0x3a698c05,0x3a117774,0x3a59f419,0xbb2fd83f,0xbb950ff8,0xbba3de68,0xbba15635,0xbb813067,0xbb4d4c89,0xbabf240c, -0x38e0a04c,0x3a336fba,0x3b1ace41,0x3b87bef4,0x3bdc9013,0x3bfc3f11,0x3c13ac4b,0x3c2ed2b7,0x3c1fefa6,0x3c12a8ed,0x3bd87e76,0x3bd328ef,0x3b154e6c,0xbbb3d025,0xbc29b67f,0x3c13c2bd,0x3be0cb9a,0x3bdbc6d4,0x3bdf8a6a,0x3be44068,0x3bee38e3,0x3bdfe06a,0x3bc1ced0,0x3bbed028,0x3b9d4886, -0x3b5097f2,0x3a7f2fca,0xbaac7a90,0xbb619e77,0xbb62b3b3,0xbb4af891,0xbb1353df,0xbb417875,0xbb45bd00,0xbb44b24a,0xbad8359e,0xba521ca2,0xb9ba41d1,0x39cee719,0x39845c06,0xba475287,0xba87f584,0xba5471d6,0xb9cd03c5,0x3a2357b9,0x3af2a0c4,0x3b4536a9,0x3b8a8ebb,0x3bc53818,0x3c0dd3d9, -0x3c16ce8b,0xbb78bf41,0xbba901b2,0xbbb2d2f7,0xbbc415f5,0xbbe5c20a,0xbbc7adbd,0xbb9f7be5,0xbb811aba,0xbb82790d,0xbb7a94f4,0xbb72eda9,0xbb75cf6e,0xbb804a3a,0xbb902555,0xbb82d8dc,0xbb86dd14,0xbb89388a,0xbb7f9ad7,0xbb698b03,0xbb607460,0xbb290eb6,0xbae1b94d,0xba430b80,0xba65fce9, -0xba4ab112,0xb9e799cb,0xba3ff729,0xba875fdd,0xbab6a0eb,0xba8beebb,0xba5ae316,0xb967d050,0x394bf203,0x3992f66b,0xb7f67e92,0xbb14da8b,0xbb139710,0xbb42d84e,0xbb435a5b,0xbb70477c,0xbb8125fb,0xbb8da384,0xbba589e7,0xbbb83bc6,0xbbafe8da,0xbba30aa5,0xbb970fa2,0xbb904af3,0xbb85d9ba, -0xbb7577cb,0xbb59c423,0xbb4681a1,0xbb2f3eec,0xbb1baeff,0xbaf57baf,0xbb0c70bc,0xbaecdeb3,0xbac3e04b,0xba91f370,0xba1ab03d,0xb840db16,0x3a041df4,0x3a15baf0,0x3a4b44cb,0x3a7024cd,0x3a80a5c9,0x3a76089f,0x3a52a9e6,0xb977be4a,0xba8d71bc,0xbac9de15,0xbaeeb170,0xbb5bc22e,0xbb73832b, -0xbb671083,0xbb69fadb,0xbb682e24,0xbb83d8ff,0xbb852427,0xbb8ad7fe,0xbb7ed2d5,0xbb77ed46,0xbb6e14cb,0xbb6061e5,0xbb53821d,0xbb49015b,0xbb492eb6,0xbb46d298,0xbb2a9e3a,0xbb2f7524,0xbb29eef9,0xbb2eaa09,0xbb1e1752,0xbb1507a4,0xbb0c97ee,0xbb031e33,0xbaf7a4bc,0xbadf6bc8,0xbae5fca3, -0xbae83580,0xbae9a49e,0xbaebc3e5,0xbae91fee,0xbace282b,0xbafa6793,0xbb0ed18c,0xbb2b3ecd,0xbb45fa9f,0xbb57985c,0x39f45bd9,0x3a1f5bf6,0x398660ec,0x399aa8b8,0x39c6c314,0x3a5cbe4a,0x39680312,0xb831084a,0x39c55f20,0xb9eae259,0xba1022ee,0xba27d9c1,0x3821d734,0x39877b88,0x384e096b, -0x3a1cd7ac,0x3a489fb9,0x39a30f01,0x3928cd12,0x372089e9,0xb841ac02,0x381e4297,0x39352041,0x3991da2f,0x3a3b37ec,0x3a7ec605,0x3ac19cae,0x3a6fca81,0x3a49eb2c,0x39b55f5f,0x3a6d2b92,0x3a4604b4,0xb7fe08b3,0x390b5a73,0x397a8ec5,0x3a3700a7,0x3a2d0db2,0x3b031940,0x3a67feab,0x3a54a972, -0x3a56eaee,0x3b05de25,0xb81f38bc,0xb9d3f6ed,0x3a801ef7,0xba884b53,0xbac1a7b9,0xbabab031,0xb8a6aa7b,0x3a185ca9,0x39141922,0x3abb2651,0x3ab6bc22,0x3a3451a8,0xba06d5a6,0xbababe3e,0xbac20d08,0xbaa55ea1,0xba251ea7,0x3926b8d7,0x3ae7abc5,0x3b39f288,0x3b826799,0x3b1cd19f,0x3ab985dc, -0x3906d3f2,0x3abada86,0x3aa7aa6e,0xb9aa4033,0x3918d956,0x3a327941,0x3b0bf750,0x3b114ae8,0x3aff1e20,0xb906ae70,0x395c4713,0x3a2eb295,0x3b6a056a,0xb90a3c7a,0xbaba2f64,0x3a6c91f9,0xbb47dba1,0xbb6b5fd4,0xbb576908,0xb9fe8210,0x3aa3d71f,0x392ed77e,0x3b18e852,0x3b2bcdf0,0x3ab95feb, -0xb9dfdacb,0xbaf5ca25,0xbb19a594,0xbafe86da,0xba8c4b7e,0xb988387c,0x3b201d12,0x3b837f26,0x3bd5db3b,0x3b58d660,0x3b3034bb,0x3a1aff0e,0x3b5df977,0x3b3030fc,0xbac96a01,0xb9879158,0x39b87798,0x3b2b146d,0x3b1df845,0x3bc1780f,0x3b0b373f,0x3b024b98,0x3b28514b,0x3bbcbbbe,0xb96934f4, -0xba385703,0x3b747392,0x3a37eb7e,0x39f61caa,0xba59aa27,0x3b0dd048,0x3b6abb0c,0x3b1e0bc4,0x3b8ae0ab,0x3b898d82,0x3a8e31c6,0xbb085df2,0xbba9291e,0xbbd4d941,0xbbba7a0f,0xbb6ef238,0xba59e3d1,0x3b9f3f76,0x3c1a1047,0x3c559458,0x3bf4fdd5,0x3b4ac186,0xba617a39,0x3b54c759,0x3b4c5197, -0xbb072049,0x3a70d43e,0x3b52ecf2,0x3be8d854,0x3be8b08c,0xbc13aa13,0xbbc394a0,0xbc0130b7,0xbba9e4c6,0x3b1aa94a,0x3b48f700,0x3a72772c,0xbb8df4d9,0xbb8ad038,0xba8ca405,0x38f21dd7,0x3b915cac,0x3b7b2252,0x3a774317,0xba7d52cb,0xba44b648,0x3b912a4d,0x3bb34b2d,0x3be763e4,0x3c120e36, -0x3c17c7fc,0x3bdc3c3e,0x3b57f582,0xbb478fbc,0xbbf94961,0xbc02f9e2,0xbb7bc081,0x3b94728f,0x3c5675d8,0x3c0517df,0x3ba16fbb,0x3b8b2e60,0xbb8797e2,0xbbd93a45,0xbbd8f21b,0xbc0c5741,0x3c055d69,0x3c070d0a,0x3c124968,0x3ab51e9f,0xbc343729,0xbc4078ba,0xbbe46d59,0xba042941,0x3b38b0d4, -0x3ac41ff3,0xbb1c5fb1,0xbb8bbb83,0xbb3f8441,0x3a782145,0xba89de96,0xbab35be3,0xbb08a485,0x39da046a,0x3a521a18,0xbaa97d2f,0xba53fdc0,0xbaf4a3e6,0xbab1187a,0xbadab93f,0x3b0c0fb5,0x3c23ff8c,0x3bfe0b58,0x3ac57f6f,0xbbf60cf9,0xbb85f3d4,0x3adc1712,0x3bd1c1b4,0x3c69dab4,0x3c34baeb, -0xbb282886,0x3b2df375,0xbca0e9bd,0xbd1be383,0xbc6d760f,0xbb8abafe,0xbbcd4c3c,0x3b870346,0x3b4579eb,0xbb7433fe,0xbb6ca143,0xbb09982a,0x3a6867e5,0x3adf0ef0,0x395b29a8,0xbb1a0811,0xbaea05d1,0xba04e4be,0x3af448e5,0x3a44c5da,0xb89c69a9,0xba6067a9,0x3ae61a4f,0x3b2aa9b4,0x3b0d8a93, -0x3ad17792,0xb9c77800,0xbaf0dee4,0xbb05f412,0x3a1bf4a2,0x3a997409,0x3c6dcca0,0x3c08d20d,0xbc8911be,0xbc351ceb,0xbc070c9a,0xbbcf4b04,0xbc019ab1,0x3c7e1296,0x3caf9c62,0x3c6f8e09,0x3c092307,0x3b89377c,0x3ae40111,0x3a7511fe,0x3a96c1c8,0x3a14414a,0x39f64231,0xba879d07,0xba5913a2, -0xb9ab40b0,0x39d9d33b,0x39cd04bf,0xba09fd7e,0xbb06b0c1,0xbb5f9889,0xbb81b025,0xbb818565,0xbb4fd15a,0xbb0e9d69,0xba2bfd12,0x3aed51e9,0x3b7da6e8,0x3bc52fed,0x3b9d39f8,0x3b0bf084,0xbb4045b6,0xbb9ce0d5,0xbb70893d,0xbb044178,0xb9de0dd5,0xb8b50ec7,0x3b2ccb70,0x3be5148b,0xbc3d89dc, -0xbc0b8432,0xbbd81cbe,0xbb222beb,0x38e5c5c9,0x390bbb26,0x3a315f07,0x3b2faa7d,0x3b19e4ed,0x3af44e49,0x3a331050,0x39399e87,0x37e5c83d,0x3a4a820c,0xbb1f940a,0xbb88070a,0xbbabe22f,0xbbab091f,0xbb9a0d74,0xbb8ca9e4,0xbb23cf99,0xba445333,0x39a83427,0x3b0b6bc4,0x3b8ac682,0x3bec92af, -0x3bfd3e98,0x3c0fa509,0x3c20e2d0,0x3c155ff6,0x3bfd20f9,0x3ba49577,0x3b8c82e0,0x3a1d27df,0xbbbac390,0xbc23cca2,0x3c0e1b82,0x3bf8259b,0x3bfa0053,0x3bf37a50,0x3bee329a,0x3be9f0d9,0x3bd21515,0x3bbb8d39,0x3bbd54dc,0x3ba9cbcb,0x3b7c0f38,0x3b07449f,0xb99febae,0xbb383cef,0xbb5531c8, -0xbb445992,0xbb094d9b,0xbb161a30,0xbb17cee0,0xbb1f8d6e,0xbacde527,0xba928c17,0xba5690cd,0xb72a5032,0xb9189ab8,0xba834f9c,0xba516c39,0xb9972332,0x398165cf,0x3a9d2d36,0x3b2ea410,0x3b85a1f8,0x3ba33057,0x3bc7e449,0x3c006f30,0x3c09a676,0xbb4c920a,0xbb91fba7,0xbb962838,0xbb9ad43b, -0xbbb0eefd,0xbb8f5705,0xbb48460f,0xbb06bdc9,0xbb262ebe,0xbb322a5b,0xbb4dff54,0xbb5a68bb,0xbb7c163c,0xbb8df242,0xbb86f474,0xbb8b3c36,0xbb91c24f,0xbb876e27,0xbb76fc4a,0xbb6156d2,0xbb37e9b6,0xbb105a8a,0xbac967cc,0xbab4fcac,0xba888173,0xba119fc7,0xba4e04f8,0xba876fd1,0xbaaa149b, -0xba960b24,0xba841a85,0xb9cca0a5,0x3853c2d4,0x39b0f89c,0x397de14c,0xbade049e,0xbb571cef,0xbb813eb9,0xbb819e80,0xbb91c6bb,0xbb9bb505,0xbba6befb,0xbbba51f9,0xbbc95e92,0xbbbdfd98,0xbbaf061c,0xbba1fea3,0xbb969aad,0xbb8ac001,0xbb7f204c,0xbb6ed17c,0xbb5f47b0,0xbb4dfa0b,0xbb3e6b96, -0xbb2a6892,0xbb34b58d,0xbb21fd25,0xbb0ee20f,0xbaf2612a,0xbab74270,0xba7c60f1,0xb9f2bc11,0xba000ba7,0xb9b87ecf,0xb986e6cd,0xb91d31e3,0xb90c71b4,0xb97bc742,0xba9dbb92,0xbb088635,0xbb2bc953,0xbb3fb7b7,0xbb67cb6a,0xbb7e2447,0xbb759df1,0xbb7a5148,0xbb7b33b2,0xbb854444,0xbb880ebe, -0xbb908b57,0xbb859962,0xbb822bea,0xbb79c6ba,0xbb6f0850,0xbb62c68b,0xbb566db1,0xbb52fce4,0xbb4fad5a,0xbb431f86,0xbb443dcb,0xbb3f6e4a,0xbb421f05,0xbb320149,0xbb278fd3,0xbb1d9b2c,0xbb140f93,0xbb0c3547,0xbb000db5,0xbb035e50,0xbb04d1ca,0xbb075045,0xbb0ba428,0xbb0ea6f5,0xbb066c08, -0xbb1860bf,0xbb24b0d8,0xbb3afa62,0xbb526115,0xbb54a852,0x3a26f898,0x3a481ba9,0x39d0ac59,0x39bd6cca,0x39e3b301,0x3a8a7ba6,0x399435f7,0x37f0411d,0x39f78fc7,0xb9db02a9,0xba0f2f3a,0xba1fd7c1,0x38ae9d8f,0x39af5c0e,0x39363720,0x3a388f94,0x3a689b43,0x3a2c0d27,0x39b7bd80,0x394af9a7, -0x3911617f,0x3985d475,0x39dc0f93,0x3a20be2c,0x3a81864d,0x3a9db566,0x3acea697,0x3a8eb8d9,0x3a78a9f0,0x3a0997d6,0x3a8da23d,0x3a7614dc,0x39297297,0x39c8f0a8,0x3a051d0b,0x3a7e0acb,0x3a61979b,0x3b029c1f,0x3a676215,0x3a14cd8a,0x3a240f19,0x3b127707,0xb93f65f1,0xba29c4bb,0x3a507826, -0xbab346b7,0xbaee0be1,0xbad18cad,0xb98d9e67,0x39f7b572,0x39662dd9,0x3ac636b5,0x3ad46d01,0x3aa67595,0xb91de72b,0xba90c0bf,0xba96227a,0xba56f6b5,0xb86d7fa3,0x3a76a460,0x3b1cda00,0x3b54bbd1,0x3b7f379c,0x3b1b7dd2,0x3abb3f65,0x398b810d,0x3ad84b8a,0x3ad17734,0x384cb3af,0x3a2f11c6, -0x3a9952f6,0x3b254dc5,0x3b1a7960,0x3b05b633,0xb8b9b664,0xb95a0ed5,0x395de229,0x3b799ca8,0xba14b0ec,0xbaf1f7df,0x3a1fc539,0xbb77d29f,0xbb8fd9a5,0xbb83680a,0xba955c6d,0x3a485c28,0x35c99aa7,0x3b17c8ba,0x3b2f1ba6,0x3b13b2be,0xb70fa5ec,0xbac670c9,0xbb012aab,0xbaaee933,0xb9a3bf61, -0x3a6a8bfd,0x3b5b8c41,0x3b97df92,0x3bce0edf,0x3b6096fc,0x3b3b9c44,0x3a7ac8ef,0x3b6c3b73,0x3b428a35,0xba8ecbc8,0x3a01d6ee,0x3a9c9276,0x3b57fd9e,0x3b3558be,0x3bb45747,0x3aee5b41,0x3a69c62a,0x3ad75854,0x3bce9cf4,0xba974aa2,0xbb0f2848,0x3b1b9273,0xbaa5f3c3,0xbaea0a4a,0xbb4675fe, -0x3ab39e0b,0x3b518432,0x3b1092aa,0x3b9056fb,0x3b9d6e40,0x3b428b82,0xbaa58d57,0xbb999f8e,0xbbc164b3,0xbb9547ac,0xbb06fa4b,0x3ab8005f,0x3bda4dfa,0x3c29c596,0x3c459dda,0x3bd6a09d,0x3b2512c7,0xba282991,0x3b6469ad,0x3b6fe8b5,0xba7eeb15,0x3b1530fa,0x3b8d29df,0x3c006ce8,0x3be885ba, -0xbc0a1e44,0xbbaea259,0xbc04f29c,0xbbc19569,0x3a9bdc7e,0x3b3d33f2,0x3af13b40,0xbb18a930,0xbb384599,0xba1af6a1,0xb7c79d52,0x3b2c7ed8,0x3b163482,0x3b035696,0xbae5aadf,0xbaf28dba,0x3b5cbc00,0x3bb69d8c,0x3c028a9d,0x3c20c196,0x3c14bc79,0x3bc75e26,0x3b1d10b7,0xbb844c8f,0xbbfb0086, -0xbbda0a18,0xb9ecc1d9,0x3bfe769b,0x3c59ddf0,0x3c10ede2,0x3b978a46,0x3b106141,0xbb890409,0xbbb9c396,0xbba48938,0xbbf61a0f,0x3bc8762a,0x3c095186,0x3c3ab2db,0x3b98eaef,0xbc119e13,0xbc407b35,0xbc0878a1,0xbaed0007,0x3acd5518,0x3a71cc93,0xbae493da,0xbb67499a,0xbb458641,0x399510b8, -0xbabc4f57,0xba97e2de,0xbafd3556,0x3aa89e59,0x3aff5f1a,0x39d9c09c,0xb9d99dbb,0xbac8d84f,0xb9a42dab,0xb9b661b9,0x3b659d7a,0x3c328119,0x3bb3202f,0xbac57a19,0xbc1f1540,0xbb8bebdc,0x3b20751c,0x3be21208,0x3c627507,0x3c1a9923,0xbbc2128b,0xb9374f97,0xbc6a5b9b,0xbd1e096b,0xbca24c82, -0xbc14eb5a,0xbbc89789,0x3b3bc784,0x3b1e4e92,0xbacee8da,0xbb3fbdaa,0xbb06e516,0x3a24bdad,0x3aed397e,0x3a04f5af,0xbb2abfcd,0xbae5d649,0xba445f09,0x3ac2484a,0x3a8e1dfe,0x3a0a6ab3,0x38f25832,0x3ae427d2,0x3af9b7ba,0x3a9fa252,0x39757e45,0xbade4d66,0xbb239936,0xbb2e4e01,0x398ba271, -0x3b0b8a4a,0x3c3a73ad,0x3ba8e703,0xbc73a502,0xbc1a887f,0xbbcefe92,0xbba2fd14,0xbb08fbed,0x3c64570d,0x3cb62470,0x3c8e20ad,0x3c284f96,0x3b71d606,0x3b20ed57,0x3b0c0581,0x3aac468b,0x39f40854,0x3a099a3c,0xba3399c7,0xba7f027c,0xb9ee1577,0x3a43d619,0x39fbb20c,0xb8732493,0xba7fd488, -0xbb1cfa47,0xbb579ca2,0xbb538adf,0xbb1eb1fc,0xbaa9736d,0x3a3013ec,0x3b0f3977,0x3b8070e3,0x3ba8abbd,0x3b7c603c,0x3a309f1c,0xbb9bd4ee,0xbbad16b2,0xbb7a7242,0xbb21f3a1,0xbae77ef0,0xbadefbd1,0x3a4a9862,0x3ba4cfe3,0xbc1d1b63,0xbbe6c77f,0xbbd45a98,0xbb3c9d93,0xb9da4f30,0xba33925f, -0xb952fe90,0x3b1f744b,0x3ae2fde1,0x3a7e79c2,0x38106c8c,0xb9d57da4,0xb9dad508,0x39cd0c0c,0xbb0a0a98,0xbb6d91d4,0xbbb1df7a,0xbbb09181,0xbbabece4,0xbba6858d,0xbb65e370,0xbade6877,0xb8364312,0x3ae23c1f,0x3b82fe69,0x3be7cc90,0x3bf28c27,0x3c07d6ff,0x3c0facd5,0x3c07df91,0x3bd2a349, -0x3b619a2b,0x3b1ead23,0xba03ce43,0xbbaba234,0xbc081b70,0x3bf18186,0x3bee33a1,0x3bf4d7c3,0x3be3ea7f,0x3bdadacf,0x3bcddb4a,0x3bb1a8aa,0x3ba11f3f,0x3ba6d717,0x3ba323ac,0x3b867ade,0x3b40894b,0x3a3bb0ef,0xbb00b9e7,0xbb3ab537,0xbb3a1aab,0xbb096cc9,0xbaeeaa47,0xbae013d8,0xbae5f616, -0xbab4b952,0xbaa54451,0xba9c73b9,0xb94da530,0xb93542b2,0xba4ec78d,0xb7c6c333,0x3a38d3cf,0x3ab2efb3,0x3b143d45,0x3b7f4c81,0x3bb3e2a0,0x3bbf0b26,0x3bc7dbd1,0x3bde03a3,0x3be520a0,0xbb080410,0xbb55fd9b,0xbb544b24,0xbb401f65,0xbb529889,0xbb1052bd,0xba6d8311,0x38aaa242,0xba51c8f7, -0xbaaaf73e,0xbb14c47e,0xbb2cc9c8,0xbb646855,0xbb82f420,0xbb81c617,0xbb874eae,0xbb91ef50,0xbb87018f,0xbb767fd8,0xbb5aa64b,0xbb3fd894,0xbb26d8f7,0xbb0fb133,0xbae10af2,0xba91e7dc,0xb9dad327,0xba081865,0xba2050c8,0xba2c38a2,0xba57e692,0xba7742fb,0xba12d1d8,0xb97b33f1,0x39115ff1, -0x3988accf,0xba85bc8c,0xbb876289,0xbb984415,0xbb9c31d2,0xbba2aeea,0xbbae1f1b,0xbbb6356e,0xbbc42439,0xbbcfb1ab,0xbbc19b80,0xbbb21efe,0xbba49478,0xbb959bca,0xbb890fb2,0xbb7ccf26,0xbb746228,0xbb679c70,0xbb5bdfd6,0xbb4fe839,0xbb45ec8f,0xbb4a785e,0xbb3c331e,0xbb2ca962,0xbb1c3ed1, -0xbb063cda,0xbae8d7df,0xbab716bd,0xbacc71c3,0xbacbff62,0xbacc7918,0xbabf7619,0xbab63120,0xbabfac4e,0xbb0ec3da,0xbb41c1dc,0xbb66a9c6,0xbb7cfc77,0xbb6751e3,0xbb78db4d,0xbb76daa6,0xbb7cdc3d,0xbb7fc76c,0xbb7e8c0b,0xbb82e00e,0xbb8d210a,0xbb837ca4,0xbb80422b,0xbb75d399,0xbb6e538f, -0xbb63160f,0xbb55ed2f,0xbb525b4b,0xbb4f38ee,0xbb4d50d6,0xbb4cdf78,0xbb49a10f,0xbb4afcd0,0xbb3c35b4,0xbb314dc2,0xbb26d12a,0xbb1e2892,0xbb16598c,0xbb0ac965,0xbb0ec4f3,0xbb1110dc,0xbb15e13e,0xbb1d0a21,0xbb24ad2e,0xbb23e497,0xbb30df01,0xbb379aa3,0xbb44c4dd,0xbb552168,0xbb4aef20, -0x3a4fd573,0x3a6def6d,0x3a0ce1e0,0x39f9e310,0x3a0aec2f,0x3a9ff2ce,0x39c2713e,0x39196f3a,0x3a182dc2,0xb9b0e614,0xb9fec3d4,0xba0111d3,0x390b31b1,0x39cbdbe4,0x3996b9bd,0x3a527445,0x3a81cfaf,0x3a7093f0,0x3a0e418c,0x39cd920f,0x399c9a85,0x39ebbd71,0x3a282c36,0x3a74abee,0x3aa0e21d, -0x3ab6dcf6,0x3ad65196,0x3aa14c04,0x3a906287,0x3a3e9c6f,0x3a9d7d60,0x3a8bf47b,0x39c107f7,0x3a22e83b,0x3a478f52,0x3a9f8307,0x3a8892f4,0x3b00a613,0x3a6b10d5,0x39e70d26,0x3a05df59,0x3b177179,0xb9897efe,0xba52c23f,0x3a226fa3,0xbad1afb4,0xbb044945,0xbacfed6e,0xb9ea0042,0x39aafa80, -0x398cdeb5,0x3aca86ac,0x3ae899d7,0x3adc9af1,0x396b5005,0xba36fec9,0xba4c62fe,0xb9c95bf4,0x3a0185f6,0x3adee334,0x3b406e66,0x3b691153,0x3b73a1b4,0x3b189076,0x3abd4365,0x3a0203e8,0x3ae77de5,0x3ae91d5d,0x39e206de,0x3a951baa,0x3ad3572b,0x3b39cc2b,0x3b20b581,0x3b0c4814,0xb61c2659, -0xb9d96b5f,0xb8d93250,0x3b78ded0,0xba6869b0,0xbb0959ff,0x39c0b490,0xbb8c5dd4,0xbba2700a,0xbb8ba45a,0xbae6dafd,0x3935a0ec,0xb9719bdd,0x3b0e2398,0x3b27e405,0x3b31bf7a,0x39b8db15,0xba8f2d9b,0xbad0cd89,0xba528bc5,0x39bdc60c,0x3b057441,0x3b86e1d2,0x3ba7055e,0x3bc1c3a4,0x3b667d74, -0x3b445b9c,0x3ac02e34,0x3b6a5a14,0x3b42994b,0xba0b5309,0x3a9bcd64,0x3b01edcc,0x3b7f1b9a,0x3b4a3c72,0x3ba4bf95,0x3ac51aae,0x3836b199,0x3a57fabd,0x3bd1169a,0xbb01b7c0,0xbb62fc04,0x3a90bb45,0xbb49852b,0xbb78201b,0xbb95048f,0x39cce143,0x3b24d147,0x3b052e7b,0x3b8e25c1,0x3ba74f04, -0x3b8ec00e,0xb9d03bfb,0xbb7bc33f,0xbba4cc9e,0xbb5bb9c5,0xb9e85fcb,0x3b70f6ee,0x3c06b7b7,0x3c33eab2,0x3c31fd0c,0x3bb97d47,0x3b050bc9,0xb8dbe687,0x3b6252b2,0x3b7ab2f6,0x39506bce,0x3b6492a3,0x3bace430,0x3c090047,0x3be49c3d,0xbbeb81ff,0xbb933a02,0xbbfd44a1,0xbbc688b6,0x39506c0d, -0x3b3a72f0,0x3b3aca47,0xb81b7b70,0xbabc7e5e,0xb9dbabc5,0xb9e964e6,0x3a5ad3a0,0x3a7ab594,0x3b395fda,0xbb267be9,0xbb4863b5,0x3aef093f,0x3b9d587a,0x3bfc9d33,0x3c1b4a76,0x3bfec16e,0x3b9827d0,0x3a606246,0xbb9dd859,0xbbeb1571,0xbbb2839e,0x3b58dd69,0x3c3533a2,0x3c54353f,0x3c15cafa, -0x3b80e304,0xb980f1b4,0xbb8f5dff,0xbba10a5e,0xbb7cf51d,0xbbc5614d,0x3b73f410,0x3bfd99ea,0x3c56f989,0x3bf24e18,0xbbd64c9e,0xbc3cd660,0xbc1bbde7,0xbb504d92,0x3988edbb,0x39ca5dc6,0xbaa341ee,0xbb2f8032,0xbb3fe5e9,0xb9e2593e,0xbac5cd22,0xba229dc5,0xbabb9667,0x3b03f291,0x3b3795d0, -0x3afda3a8,0xb8cefcb4,0xba87ac40,0x3a59d7cc,0x3aa33d05,0x3b9c8d2e,0x3c29cd65,0x3b44e412,0xbb8ac48a,0xbc3e8716,0xbb8e8230,0x3b4bfce2,0x3be80eb1,0x3c48d111,0x3be9cd81,0xbc0f45f2,0xbb2ecb8c,0xbc161bdc,0xbd16fea2,0xbccc6643,0xbc6c62d8,0xbb964227,0x3a619db0,0x3a6397cd,0x39a029b5, -0xbb08ba74,0xbae8355a,0x39ce0f2d,0x3ad464d5,0x3a1c84bc,0xbb3402bb,0xbadbfa36,0xba8c00e9,0x3a5f6fa7,0x3ab1a035,0x3aa4ee23,0x3aa25f95,0x3aed0e7e,0x3a9fc940,0x3935184f,0xba9e9e0c,0xbb41733c,0xbb4c8905,0xbb5351b4,0x3987ebbb,0x3b8933b6,0x3bf70b1f,0x3a93ba53,0xbc4c3f1c,0xbbda02b9, -0xbb66a3d1,0xbb79dcca,0x3b2b1630,0x3c2cb8a7,0x3ca3e822,0x3c9aaf24,0x3c470065,0x3b801ca9,0x3b5a4c35,0x3b618f79,0x3adcb0fb,0x398d87db,0x39a90dd7,0xb9f48c50,0xba874e94,0xba04c155,0x3a52618f,0x3a06397d,0x39e21359,0x392b6981,0xbaa5f319,0xbb1ef9ba,0xbb18425f,0xbad758bc,0xb9dd8e76, -0x3afd32f5,0x3b1f98e4,0x3b750a84,0x3b87adc5,0x3b403777,0xb9e10bbd,0xbbb26c99,0xbba441be,0xbb5db873,0xbb1c1692,0xbb3a3a04,0xbb354a79,0x3808ab89,0x3b3e2114,0xbbda1600,0xbbad0fde,0xbbc761af,0xbb5917ad,0xba8dffc7,0xba9d9aae,0xba49864e,0x3b0d959a,0x3a892022,0xb79be78a,0xba3bff2d, -0xba62ca58,0xba4723c6,0xb90c7752,0xbae0f139,0xbb480f70,0xbbb3b034,0xbbb2af1a,0xbbb70f10,0xbbb35d99,0xbb8e0eca,0xbb2aa2cc,0xb9f9bbc3,0x3aac9c5a,0x3b6ee852,0x3bcfc96e,0x3be07aa4,0x3bff15fa,0x3c00cf97,0x3bf36c53,0x3baa23d3,0x3b149ba3,0x3a876056,0xba882744,0xbb88d9f6,0xbbbf2af4, -0x3bae853d,0x3bc3d059,0x3bd280b1,0x3bbca819,0x3bb29ad5,0x3ba0b88c,0x3b857413,0x3b7636e2,0x3b82bd5d,0x3b8db22d,0x3b818b14,0x3b630890,0x3acfadc2,0xba883179,0xbb17d7a5,0xbb2cb737,0xbb118cdd,0xbad6b3b7,0xbab4cdeb,0xbaa2597d,0xba9b89ab,0xbaa2af1c,0xbab3a450,0xb91aa378,0x393ef1a5, -0xb7223fd0,0x3a9ffb20,0x3b04314b,0x3b3166b2,0x3b703b83,0x3bb0479b,0x3be5ed17,0x3bd71357,0x3bc3efc1,0x3bbc4a5d,0x3bac0791,0xba1ed104,0xbad11184,0xbac418d4,0xba53f96e,0xba39e15e,0x3973c576,0x3ab9078d,0x3b1b7c27,0x3a96dd96,0x39bc6b2f,0xba890d36,0xbada46f5,0xbb3caf6f,0xbb65e71b, -0xbb6beba4,0xbb78d5ba,0xbb8a9079,0xbb7f8968,0xbb6a8467,0xbb4de063,0xbb3f98d6,0xbb322832,0xbb2c2e3c,0xbafa9650,0xba94441e,0xb999f73e,0xb9486d21,0x362adbf3,0x39928345,0xb925687e,0xba0b9acc,0xb9e0e075,0xb9a0cfeb,0x3853c716,0x39b8226f,0xb8e32d6c,0xbb9527ce,0xbb9ea54a,0xbba77657, -0xbba38543,0xbbb09c3e,0xbbb51f06,0xbbbd64e2,0xbbc69f00,0xbbb82ab3,0xbbaaf456,0xbb9f0817,0xbb8f3e54,0xbb83c312,0xbb7745f9,0xbb721a2e,0xbb684185,0xbb616403,0xbb58ac32,0xbb541fc8,0xbb57e624,0xbb4c4e8b,0xbb3f1f24,0xbb32702a,0xbb22e554,0xbb19e896,0xbb08d0b8,0xbb1c65d3,0xbb277c55, -0xbb2fd32e,0xbb2ce24d,0xbb2617b5,0xbb297290,0xbb4178c9,0xbb65815f,0xbb836a7e,0xbb8f0c0b,0xbb5dd866,0xbb6885ff,0xbb6b68eb,0xbb713a9a,0xbb74fd34,0xbb67a71a,0xbb6d7102,0xbb812f1f,0xbb749c94,0xbb6fd3e0,0xbb66dd22,0xbb636fd5,0xbb5a55c3,0xbb4eab37,0xbb4cd892,0xbb4c0c98,0xbb4ba07f, -0xbb4c5a38,0xbb4be0e9,0xbb4f467c,0xbb414117,0xbb36cdfe,0xbb2c87bb,0xbb24fdd4,0xbb1d79c1,0xbb1259a9,0xbb17c05a,0xbb1ad4b9,0xbb21af3e,0xbb2a9943,0xbb35e0ca,0xbb3c9d4b,0xbb444a99,0xbb464c6d,0xbb49c58b,0xbb512421,0xbb451e27,0x3a7016b6,0x3a85e9c6,0x3a306eac,0x3a1b9901,0x3a206e7d, -0x3aa9811f,0x39e9ad27,0x397f3a70,0x3a28a17d,0xb988312a,0xb9da0362,0xb9b0a0f9,0x39286193,0x39d0ef1a,0x39b5c2ad,0x3a5e13cd,0x3a88a6b7,0x3a8c4fc2,0x3a341844,0x3a11a1d0,0x39de00b0,0x3a1de594,0x3a563b7f,0x3a9d18a5,0x3ab95c75,0x3ac895e0,0x3ad45f4b,0x3aac8d8f,0x3a9e78be,0x3a73feb2, -0x3aa504da,0x3a94ac11,0x3a12d780,0x3a58fc87,0x3a809823,0x3abc5824,0x3a9b9c01,0x3afa92c5,0x3a72910e,0x39ca34c7,0x39ef732b,0x3b0fe89d,0xb9a63b84,0xba6ca672,0x39d040aa,0xbae6c9e9,0xbb0adbde,0xbabf7d19,0xba200903,0x391769a0,0x3977d1d7,0x3ac60954,0x3af1cd5d,0x3af94cba,0x3a1c3d0c, -0xb988e5d0,0xb9dc8346,0x37e4dbdc,0x3a809769,0x3b1ac9b5,0x3b5d6df3,0x3b76df2a,0x3b614f7f,0x3b14f265,0x3ac20b93,0x3a56b151,0x3aea1bb7,0x3aef10c4,0x3a4a43a2,0x3ac96605,0x3b036341,0x3b4b6adc,0x3b2378a7,0x3b130615,0x39182f92,0xb9df4d85,0xb984dc48,0x3b659be9,0xba901c87,0xbb1109a1, -0x38946aea,0xbb978629,0xbbae9bc6,0xbb87f47b,0xbb174c98,0xb9ef4480,0xba169532,0x3afb22cc,0x3b190920,0x3b365999,0x3a300ad5,0xba2dec85,0xbaa69d95,0xb9bdf0d0,0x3a6e7e99,0x3b463806,0x3b9a3d05,0x3baff8b0,0x3bae40b9,0x3b68a3a7,0x3b49e041,0x3b082db7,0x3b5a64c2,0x3b33dbe5,0x3852dbb3, -0x3aec17d4,0x3b307fdf,0x3b928ac8,0x3b5b9361,0x3b9442ba,0x3aa5d232,0xba06f442,0x393271e3,0x3bc1bfb4,0xbb2ec8a6,0xbb93b32f,0xb8b4a64f,0xbb99f839,0xbbb4838c,0xbbad9744,0xba3ce499,0x3ace0ce0,0x3ae6b540,0x3b84d2e9,0x3ba7ae09,0x3ba9a0d7,0x3a1089e3,0xbb2eb09d,0xbb80cb71,0xbb09345b, -0x3a8e9390,0x3bbc9f7d,0x3c1b86ea,0x3c38e35f,0x3c1bdaf1,0x3ba48794,0x3af31d79,0x3a51d81f,0x3b54e1a0,0x3b701cf7,0x3aa76b0d,0x3b938538,0x3bc9b071,0x3c10d730,0x3bdda59f,0xbba978d9,0xbb5fc1e5,0xbbd9a157,0xbbb49453,0xb9d3fa53,0x3b451fdd,0x3b80afcb,0x3b1ace91,0xb95b2f13,0xba0ebcbb, -0xba858625,0xba3718ea,0xb88193d3,0x3b606988,0xbb53381a,0xbb8ac9fa,0xb6ba9be2,0x3b4b2510,0x3bc9af68,0x3bfd5853,0x3bb30445,0x3b2bf127,0xba8ac32e,0xbbb38ba7,0xbbd71e9d,0xbb9bdf11,0x3bcd1bee,0x3c59c7a0,0x3c40c2bc,0x3c1082b2,0x3b46f8a3,0xbb2a04c1,0xbb931ed9,0xbb8b7e79,0xbb4eda35, -0xbb869749,0x3ac32506,0x3bd3ed10,0x3c611365,0x3c154238,0xbb8ab770,0xbc37da4a,0xbc2ceed3,0xbb9665e4,0xba5c70d1,0x38b200c0,0xba6c3861,0xbaf3e52b,0xbb328d7f,0xba9ab64a,0xbaabf552,0x38f09090,0xba3d0148,0x3b293693,0x3b5c1555,0x3b523d4f,0x39ab6916,0xb9a4f55d,0x3b00b59b,0x3b5077db, -0x3bc4f6d7,0x3c0f75dd,0x3a035fc3,0xbbd78071,0xbc52f4d4,0xbb88fa52,0x3b6e179f,0x3bdd1dbf,0x3c2086df,0x3b8a94c4,0xbc3183a6,0xbb95ad50,0xbbbee090,0xbd0ab9d8,0xbcea75b3,0xbc98e22c,0xbafd293a,0xba9d1bba,0xba9654bd,0x3ac821a2,0xbaaf2baa,0xbab27ef5,0x397a82ba,0x3aa13ec4,0x3a0506f8, -0xbb32060f,0xbad83ee1,0xbac0f7c9,0x382bfb45,0x3ab4b3a3,0x3aecd0d9,0x3b0646a3,0x3ae262d8,0x39ff4369,0xba8b47f3,0xbb2f3355,0xbb84b340,0xbb6bc404,0xbb68d943,0x3a375a6e,0x3be3c1b5,0x3b7304fe,0xbb4c68ea,0xbc286b06,0xbb7f10e0,0xb9e4362c,0xbafe5a9a,0x3ba67318,0x3bcc3780,0x3c78f92f, -0x3c9a607f,0x3c5f1358,0x3ba34b77,0x3b83f43e,0x3b8fda24,0x3b193c52,0x39227690,0x38a40581,0xb99f294c,0xba8043e4,0xba028629,0x3a10b6f2,0x3a006270,0x3a6c4049,0x3a9efb20,0xb9101e44,0xbab8e3dd,0xbab7acb4,0xba6406af,0x39db3c49,0x3b432ce5,0x3b315f04,0x3b60b4f9,0x3b4c4291,0x3b0bc406, -0xba956719,0xbbb14671,0xbb893844,0xbb257608,0xbaf8c005,0xbb6852f0,0xbb4dd659,0x3a68a678,0x3a87fb26,0xbb618b20,0xbb5e67bd,0xbbb1c866,0xbb728d4f,0xbaf2af88,0xbaba1a08,0xba7b7b21,0x3af124a6,0x39e6be7d,0xba5d0d2f,0xbab9bf8b,0xba9d7019,0xba80baff,0xba22be04,0xbaa9d803,0xbb231372, -0xbbae51e3,0xbbb10855,0xbbbc02c6,0xbbb41a18,0xbb9e6da9,0xbb5b07eb,0xba85583f,0x3a7efe4f,0x3b57bc3a,0x3bb248a3,0x3bccf47c,0x3beec3b8,0x3becf828,0x3bd68506,0x3b84e188,0x3ad0d5ea,0x3944c98a,0xbaa3a838,0xbb460486,0xbb57f9ed,0x3b38abea,0x3b81f1d7,0x3b997f1f,0x3b889580,0x3b81e558, -0x3b5d7cb6,0x3b30ccb3,0x3b23d749,0x3b350520,0x3b5f1304,0x3b62957e,0x3b6bd487,0x3b0f8227,0xb9209f7c,0xbadf07b5,0xbb1a2d3d,0xbb1b8a26,0xbae1a4cf,0xbab4ffbc,0xba862e3c,0xba875bbd,0xba88c884,0xbaa687e0,0x3923195c,0x3a640b36,0x3aa11d30,0x3b36f0c9,0x3b6b29a2,0x3b8b67df,0x3ba9e6a9, -0x3bdfc21b,0x3c090e61,0x3bebc255,0x3bbedde7,0x3b96b3cf,0x3b569f26,0x3aa3db6f,0x39eb27bb,0x39f803d2,0x3aaebd1f,0x3add98b7,0x3b24d6fa,0x3b6419a8,0x3b8fdc72,0x3b44531f,0x3b063111,0x39e6f2a6,0xb9f05c6d,0xbb047db4,0xbb378922,0xbb479716,0xbb576612,0xbb7ce79d,0xbb67ff45,0xbb569d8e, -0xbb3c6692,0xbb36de4f,0xbb32a390,0xbb37f97a,0xbb026fca,0xba9aa816,0xb9b87427,0x3883e89c,0x3a2a68bd,0x3aaf3ae5,0x3a503f50,0x3994ab23,0x393f1399,0x3905875b,0x39e62b28,0x3a728cc7,0x3a9dbeb5,0xbb926106,0xbb93b76e,0xbba08bb5,0xbb923b5e,0xbba020d1,0xbba129da,0xbba40cdc,0xbbabaa39, -0xbba0b4f9,0xbb996e6b,0xbb92938a,0xbb858f94,0xbb7b7592,0xbb75a532,0xbb6fd370,0xbb671fe0,0xbb633c72,0xbb5c36da,0xbb5cb168,0xbb5d14eb,0xbb51ce7c,0xbb459cb8,0xbb3aa06a,0xbb30384f,0xbb2c3799,0xbb211fb5,0xbb3ab74f,0xbb506eb3,0xbb5fcff4,0xbb623c07,0xbb5b0797,0xbb5dc3d7,0xbb5e46e3, -0xbb6fbbe7,0xbb8474e9,0xbb8f560a,0xbb4efdce,0xbb51e8d9,0xbb5ad2b6,0xbb60ae21,0xbb640464,0xbb4d7468,0xbb51c11c,0xbb63bc59,0xbb5e93d6,0xbb5d1069,0xbb5812c8,0xbb59efc7,0xbb5493a5,0xbb4d7d73,0xbb4cf54f,0xbb4cecc3,0xbb4af342,0xbb4cf6a6,0xbb4d6bc7,0xbb4f897f,0xbb43f64c,0xbb3b02b2, -0xbb31f598,0xbb2b9a72,0xbb24e410,0xbb1a9624,0xbb2129bd,0xbb244b83,0xbb2bf456,0xbb347ccf,0xbb40c737,0xbb4c57f6,0xbb4f5510,0xbb4e34ac,0xbb49ee7f,0xbb488c91,0xbb46a730,0x3a783936,0x3a8af3a6,0x3a438d4c,0x3a322a6c,0x3a330b51,0x3aab0ae3,0x39f6e435,0x39a5c573,0x3a2e2f7b,0xb92cc2c6, -0xb9a6799c,0xb9261760,0x39503966,0x39d6032f,0x39ca2c21,0x3a5dc85e,0x3a84fc4a,0x3a97c51a,0x3a4cdab1,0x3a2ad875,0x39f1fc6d,0x3a2ec639,0x3a697445,0x3aae9a8a,0x3ac279f3,0x3acb3deb,0x3ac30195,0x3aaa8529,0x3aa005b3,0x3a8a7bf6,0x3a9d6150,0x3a8e0258,0x3a2badbb,0x3a765b6c,0x3a90e6b3, -0x3acbd11c,0x3aa28afc,0x3aea1300,0x3a73159e,0x39da88a7,0x39d2384d,0x3af3063f,0xb9bb21ba,0xba7c3371,0x388b84da,0xbaf62935,0xbb0cd92e,0xbaacc20d,0xba49a00d,0xb8a5ed59,0x38ad04f0,0x3ab85f53,0x3aee004d,0x3af93302,0x3a6b7255,0x393dde19,0xb8e2b5be,0x39c09207,0x3aaf283d,0x3b37a53c, -0x3b6cec68,0x3b784632,0x3b45958d,0x3b0d5da4,0x3ac27398,0x3a93625b,0x3ad9faa4,0x3addaf0c,0x3a7d1027,0x3aeb2bd7,0x3b151ec0,0x3b543ddb,0x3b1ef408,0x3b148e5b,0x39c3f4ee,0xb98a4d14,0xb98a6177,0x3b3fb2c4,0xba9a9744,0xbb0fb003,0xb9d09bdf,0xbb9d6f9a,0xbbb5ae67,0xbb7ff669,0xbb372d32, -0xba880c5f,0xba8aa875,0x3ad397ab,0x3b046caa,0x3b22a25c,0x3a6c643a,0xb9933848,0xba83e0d9,0xb84e86ca,0x3aa642e9,0x3b710ce4,0x3ba3a24e,0x3bafa1cb,0x3b92c825,0x3b63662a,0x3b48c95f,0x3b2b2feb,0x3b39e9cc,0x3b13ab61,0x39ed566d,0x3b13d041,0x3b53817b,0x3b9fcd3d,0x3b63b755,0x3b7dad7c, -0x3a9468a7,0xba4766d0,0xb9b4ce84,0x3b9ebb95,0xbb4e6a3f,0xbbac3e39,0xbaaad4a8,0xbbc76501,0xbbe277a3,0xbbb06b5b,0xbaf24b67,0x39e8d097,0x3aa5f3b8,0x3b6c8fe8,0x3b9f4d16,0x3bb01e6d,0x3abd2350,0xbaa87ce6,0xbb2d2691,0xba58c02c,0x3b1d787e,0x3bf0d3f2,0x3c281aa6,0x3c364e30,0x3c02b9f5, -0x3b957804,0x3afe1ebb,0x3af27bdd,0x3b3a18ee,0x3b4f36f9,0x3b0467f6,0x3baad9c8,0x3bdf6074,0x3c154ae0,0x3bcff997,0xbb230b71,0xbb0a0b8d,0xbb9b194c,0xbb86cd8b,0xba0bc0f4,0x3b60291d,0x3ba52a4e,0x3b99aead,0x3a649397,0xba53789d,0xbac91c67,0xbae862be,0xba435d7e,0x3b79a51c,0xbb729d61, -0xbbaadf3b,0xbafa8190,0x3a43eea1,0x3b672b0a,0x3b97c697,0x3b1da833,0x39579306,0xbb53d3f8,0xbbc9cd8b,0xbbc82e6b,0xbb946bb6,0x3c016135,0x3c6489bf,0x3c20e109,0x3bfec8a0,0x3afc557c,0xbb964797,0xbb92003b,0xbb6d78ba,0xbb38060a,0xbaf369df,0xb9e24f72,0x3b9d413b,0x3c58b54e,0x3c20ae54, -0xbb0a77f8,0xbc331ce4,0xbc3e1b28,0xbbc059d0,0xbacd3b2b,0x38d4b7c3,0xba278a5e,0xba9510a0,0xbb20e59e,0xbafa13b4,0xba7669f8,0x3a688ad6,0x38c63aa1,0x3b403519,0x3b716b2e,0x3b8c3910,0x3a81ee0e,0x3a32713c,0x3b48972e,0x3ba9701c,0x3be2b3c7,0x3bd0a90f,0xbaf2a0a1,0xbc08d5f9,0xbc58a6eb, -0xbb6b6cf7,0x3b854782,0x3bc69b67,0x3be02af0,0x3a89332d,0xbc426e98,0xbbbfb578,0xbb988c1e,0xbcf56b45,0xbcf6858a,0xbcab705e,0x3a24e4a9,0xbb39ad3b,0xbb46404f,0x3af09835,0xba5b13c8,0xba71743c,0x38e59c68,0x3a4d4f23,0x39ac1b09,0xbb24290e,0xbadf74b2,0xbafd88ff,0xba5a89bf,0x3a8a526c, -0x3afb58ad,0x3b08b4b5,0x3aa53834,0xb9a918f4,0xbb1c8a8f,0xbb8336ae,0xbba13476,0xbb849f41,0xbb6cfd50,0x3aae0742,0x3c1c533a,0x383213cc,0xbbe99d49,0xbc0e1fe6,0xbb12013f,0x3b088df5,0x3a88bad6,0x3ba6ba7b,0x3b1db7a9,0x3c125dde,0x3c8c4ddd,0x3c6a13ae,0x3bd7c0e6,0x3b8d239e,0x3b9a1c2d, -0x3b4cf6b7,0x3978728f,0xb7a049ba,0xb8dbf446,0xba50d67b,0xb9fe2270,0x38a1a4b6,0x39e1060f,0x3aaa6521,0x3b06ce9e,0x3a6789ca,0xb9b56808,0xba134a75,0xb8965cdc,0x3a9f4029,0x3b74e24b,0x3b47ed90,0x3b45ebb1,0x3b02bbf4,0x3ab76aad,0xbac13632,0xbb97b41e,0xbb4e03df,0xbada8d26,0xbac0e9fa, -0xbb552fdf,0xbb18341b,0x3b378f00,0x38f154ff,0xba0a187f,0xbacab0c2,0xbb915c5a,0xbb8066ba,0xbb2554bb,0xbab51b4d,0xba596028,0x3abaf715,0xb81a6633,0xbaae67a5,0xbaf4f2cd,0xbabae728,0xba8e7fd4,0xba6fb037,0xba64b264,0xbaff5139,0xbb9ebcc8,0xbbaa8cea,0xbbba2cc2,0xbbad4c61,0xbba3c331, -0xbb78a529,0xbac80e52,0x3a2a1107,0x3b3f4786,0x3b99c1e8,0x3bbc0688,0x3bdc61d9,0x3bd86cef,0x3bb62072,0x3b44474f,0x3a885f23,0xb9d4dfde,0xbabdc9bf,0xbb1192c0,0xba93eab6,0x39235d4d,0x3acfd3ba,0x3b278dac,0x3b1fb0c7,0x3b24c811,0x3b03233c,0x3ac85381,0x3ab4446c,0x3adacce7,0x3b1d168b, -0x3b2f3137,0x3b5ca575,0x3b22d560,0x3a1e7c2d,0xba89931f,0xbb00b158,0xbb205a4f,0xbb007bd4,0xbad662b4,0xba92fc12,0xba76c78c,0xba3a18d3,0xba72454d,0x3a40577d,0x3aeee066,0x3b2c0660,0x3b90db11,0x3bacdd96,0x3bc41d51,0x3bda19dc,0x3c02043b,0x3c14f7c9,0x3bf72204,0x3bb6d598,0x3b564d45, -0x3a9cf508,0x3b51920c,0x3b28c701,0x3b21716a,0x3b53acb4,0x3b7169af,0x3b8cfff3,0x3ba2abba,0x3bbb69d6,0x3b8f7de1,0x3b61e12b,0x3afe306c,0x3a53d33b,0xba77e28e,0xbaeedcdf,0xbb15004b,0xbb2c38c5,0xbb5f0090,0xbb4ade48,0xbb3cf365,0xbb2950d1,0xbb29dda2,0xbb2bac52,0xbb361b00,0xbb0246bc, -0xbaa4bbd6,0xba0d0a9c,0x3980b05b,0x3a9e5979,0x3b16b0a4,0x3aecd8c5,0x3aad8412,0x3a93adc2,0x3a80ff6c,0x3aa87294,0x3b01d2d8,0x3b359088,0xbb80d163,0xbb77f35d,0xbb89a890,0xbb6703d9,0xbb7ff6c5,0xbb7d1669,0xbb79bac1,0xbb8206ea,0xbb7d6a0d,0xbb8068b0,0xbb815ccb,0xbb7594c2,0xbb7202c3, -0xbb7a9c49,0xbb70d8f7,0xbb65a486,0xbb6046cc,0xbb587b1d,0xbb5d64c8,0xbb553405,0xbb493618,0xbb3dca91,0xbb33ed37,0xbb2d8956,0xbb2b8e99,0xbb2569cb,0xbb3f88b4,0xbb5a2d59,0xbb6bd8e2,0xbb72173d,0xbb6aa97d,0xbb6b0dae,0xbb5a9d38,0xbb5c3db1,0xbb6c4e7f,0xbb800011,0xbb36d654,0xbb33538e, -0xbb431ea3,0xbb4a043f,0xbb4eb04f,0xbb2eab2c,0xbb336266,0xbb413bd1,0xbb4628ee,0xbb48f262,0xbb49fbd6,0xbb519817,0xbb51b038,0xbb52772c,0xbb4f25c5,0xbb4c4e0a,0xbb4cfe3a,0xbb4c55cf,0xbb4a775f,0xbb4655dc,0xbb3f65a2,0xbb38a4e6,0xbb31ac00,0xbb2cce60,0xbb27a094,0xbb1f3fcf,0xbb2516dc, -0xbb270946,0xbb2d7ff6,0xbb32da08,0xbb3cad55,0xbb485e72,0xbb487e11,0xbb46261c,0xbb3dd7a4,0xbb35f6fb,0xbb449d03,0x3a6f02dc,0x3a87e605,0x3a4ae3aa,0x3a41b928,0x3a3d632d,0x3a9c58bf,0x39fc29fa,0x39bdd031,0x3a181ab6,0xb8e3f363,0xb98700ec,0xb890dd7a,0x393d2f7f,0x39bf6205,0x39b20636, -0x3a517295,0x3a76967b,0x3a92796f,0x3a549dd8,0x3a365a1d,0x39f12627,0x3a311067,0x3a6ae5c7,0x3ab1992f,0x3ac00f43,0x3ac3b6dd,0x3aab33de,0x3aa0edee,0x3a99f64e,0x3a93e662,0x3a8c3dce,0x3a7a9c61,0x3a2e1a7c,0x3a818114,0x3a9852ee,0x3acf3c5a,0x3a9f7a07,0x3acdc322,0x3a68f126,0x39f6a1d0, -0x39af1ef7,0x3aacd6d8,0xb9c505c3,0xba7cfd99,0xb9c14620,0xbafc63e8,0xbb089f5a,0xba9f21f3,0xba648015,0xb99afc78,0xb9333d64,0x3aa36342,0x3adf1820,0x3ae23292,0x3a90e416,0x3a122853,0x39479efd,0x3a303037,0x3ad196c3,0x3b468dee,0x3b71368e,0x3b710561,0x3b28ccda,0x3b04aba9,0x3ac1cde4, -0x3ab959ed,0x3abec928,0x3abcd810,0x3a82ccb1,0x3afe2f49,0x3b203b65,0x3b53708f,0x3b1358ad,0x3b0e1788,0x3a26b86e,0x35a33228,0xb934fc18,0x3b0af3cd,0xba90b3b6,0xbb046399,0xba89d947,0xbb9cfa88,0xbbb78891,0xbb76015f,0xbb509082,0xbac4aae9,0xbad63caa,0x3aab6824,0x3ad9b85a,0x3afae6a6, -0x3a860cb9,0x380e7df7,0xba3face9,0x3965e8ad,0x3ac5c1ad,0x3b82f938,0x3ba4d74f,0x3ba92f67,0x3b70b569,0x3b5c195b,0x3b453411,0x3b4976ce,0x3b1120c4,0x3ad50ad8,0x3a25a5e4,0x3b2b6e43,0x3b6dbf39,0x3ba5569f,0x3b609523,0x3b4342ce,0x3a773575,0xba5d3afe,0xba49d5c5,0x3b56480b,0xbb5c207d, -0xbbb89e89,0xbb29da64,0xbbebdabb,0xbc01fc00,0xbba795db,0xbb3a42a3,0xba3d5582,0x39fb864c,0x3b4b839e,0x3b908f18,0x3ba35c49,0x3b0d6e1e,0x38c72257,0xbaa2fe6c,0x39f53be3,0x3b676a4d,0x3c0978a3,0x3c2d6725,0x3c2ed332,0x3bd8f9ff,0x3b8c6b44,0x3b11ef6c,0x3b411d5f,0x3b1a1e4c,0x3b20cb42, -0x3b165397,0x3bb879eb,0x3bed8860,0x3c1423a9,0x3bba0112,0x3a32d918,0xb9dea8e7,0xbb0ddf60,0xbb026a24,0xb933584f,0x3b853330,0x3bc9c30b,0x3bdbd3cc,0x3af3d66c,0xba6b1856,0xbade2014,0xbb15709e,0xba96174d,0x3b81d52f,0xbb7f513a,0xbbbe954a,0xbb71bf2c,0xbae5e4a6,0x39bcffbd,0x3a531cfe, -0xba5e4c0f,0xbb18a03a,0xbbb562af,0xbbe039fe,0xbbbe9c9c,0xbb90c701,0x3c0aa9f6,0x3c5a4efc,0x3bf5edc7,0x3bcacaf2,0x3a52a606,0xbbbda78b,0xbb7f3a78,0xbb30fee9,0xbb2ba380,0x3a188a87,0xbb054a8a,0x3b403413,0x3c3e08d0,0x3c1c1b8b,0xb951b27e,0xbc2d76a2,0xbc4ee619,0xbbe18b47,0xbb036b65, -0x397617df,0xb9d4f1e1,0xba12ac2d,0xbb0c7ebb,0xbb22ea88,0xba0e3b01,0x3acb9727,0x3a68a93b,0x3b462081,0x3b7957a0,0x3ba948fc,0x3afe8c5f,0x3affcc8e,0x3b86db7f,0x3be26479,0x3bee2240,0x3b686d00,0xbb84833c,0xbc1d2d6e,0xbc4ea13b,0xbb209629,0x3b974cb3,0x3badb242,0x3b7523a2,0xbb0aee79, -0xbc43a599,0xbbd7b2b6,0xbb9f03c5,0xbccc7d52,0xbcec1c33,0xbcab73eb,0x3afe72df,0xbb72bda7,0xbb8a166f,0x3aa60cc0,0xba1af40c,0xba0a2748,0x38171117,0x39df7e33,0x39206c69,0xbb0b3f0a,0xbaf24409,0xbb1e3941,0xbad652b4,0x39e40a6c,0x3ac62014,0x3aa81f36,0x39e209f1,0xba978c3f,0xbb6b2dc2, -0xbba3864f,0xbbb127dd,0xbb8d62fc,0xbb4bc715,0x3b0cf34e,0x3c36d1f8,0xbb4bbc97,0xbc29ed81,0xbc01d932,0xba90aa8a,0x3b8d448a,0x3b997fb0,0x3b691ffd,0xb8ca4504,0x3b359881,0x3c675e5f,0x3c64fbe0,0x3c033d35,0x3b82ed9f,0x3b89573d,0x3b6e1fbb,0x39fd6750,0x3808de05,0x391e658f,0xba0e0f10, -0xba038248,0xb9ea4052,0x39ab8239,0x3acf7891,0x3b2dfc9a,0x3adf2f9e,0x3a292d58,0x3980f0d4,0x3a5d187a,0x3b04ac2c,0x3b8ac9dd,0x3b6359ef,0x3b2b32af,0x3a5cd923,0x3a27fe39,0xbad6de02,0xbb5d0954,0xbb1015b2,0xba8109ee,0xbaa99a24,0xbad69b33,0xb86ae73e,0x3ba814db,0x39b5f30e,0x3af5ad1c, -0x391b9753,0xbb516680,0xbb7c5020,0xbb3c93e6,0xba96a8a0,0xba09e69e,0x3a5e25ec,0xb9b4fc7b,0xbabc44f9,0xbafdad42,0xbac4d6bb,0xba8ca6ea,0xba7e0bd7,0xb9efe91b,0xbab75db8,0xbb8415f6,0xbb9dad3b,0xbbb21bcf,0xbba24651,0xbb9f217c,0xbb80c1e9,0xbaff8d41,0x39c0fe85,0x3b2995b0,0x3b864a0f, -0x3baccd3e,0x3bc6af0b,0x3bbe6b6f,0x3b91a5ef,0x3b024006,0x39a24cc0,0xba80d192,0xbae565ae,0xbaed443f,0x3a18d090,0xbb193712,0xba5f3262,0x39bf88df,0x3a50917d,0x3aa0c5ac,0x3a6a355c,0x3a2ca934,0x3a0abc4d,0x3a58e613,0x3abb9b86,0x3ae344c6,0x3b379fcf,0x3b2152f2,0x3a9e1262,0xb9d116ee, -0xbac17a52,0xbb1be195,0xbb12df5f,0xbb050bf9,0xbac2727d,0xba7942d0,0xb9b0d92e,0xb9c72c54,0x3ac7d755,0x3b3d7fda,0x3b7ec488,0x3bbf31da,0x3bde3a09,0x3bf6fbe6,0x3bff8419,0x3c0a46d3,0x3c1217b7,0x3bee52d5,0x3ba4e4d7,0x3af9cb84,0xba4d07d0,0x3b9fbabe,0x3b912cc4,0x3b8a0c1c,0x3b9a0ad8, -0x3ba7fae5,0x3bb39378,0x3bbdd2c3,0x3bce69eb,0x3ba9de4f,0x3b90b08e,0x3b51f17d,0x3b035ab8,0x39815249,0xba25a449,0xbab05421,0xbaf6daa4,0xbb3dfd8a,0xbb2b1fb2,0xbb210158,0xbb15a7aa,0xbb1a862c,0xbb212c8e,0xbb2dac78,0xbb00b036,0xbab0fa98,0xba496b0b,0x39ae5326,0x3aca9c03,0x3b3f67be, -0x3b2b5129,0x3b1875a9,0x3b0f2fa2,0x3b068456,0x3b1af7cf,0x3b54032d,0x3b8b87c7,0xbb47cb16,0xbb38f16c,0xbb543d74,0xbb20760b,0xbb33e418,0xbb2ec89a,0xbb2675d8,0xbb2a60f9,0xbb3759f5,0xbb4c0323,0xbb5e9da4,0xbb60e7cb,0xbb6a1965,0xbb802718,0xbb71c5da,0xbb620966,0xbb58019b,0xbb4ea08a, -0xbb5440e6,0xbb45867e,0xbb38d73e,0xbb2cf221,0xbb235b87,0xbb1ece43,0xbb1cc48c,0xbb1a2e11,0xbb2f6657,0xbb478abb,0xbb55a082,0xbb5bd7d7,0xbb53407a,0xbb4e9b8d,0xbb368b2d,0xbb2dc98f,0xbb35fbd3,0xbb47d0c1,0xbb13f63d,0xbb0be34e,0xbb206b6d,0xbb2850ae,0xbb2ff717,0xbb09a80b,0xbb0f6567, -0xbb184690,0xbb266a78,0xbb2e2998,0xbb35e006,0xbb430f3a,0xbb49a604,0xbb53c398,0xbb4849a9,0xbb41d56a,0xbb485a21,0xbb41ed6c,0xbb3cc5be,0xbb34d4d5,0xbb31e793,0xbb2d6503,0xbb28ae53,0xbb2566c5,0xbb21e9f4,0xbb1c0a2e,0xbb1eda83,0xbb1e5c00,0xbb21b93b,0xbb21f694,0xbb26a5e0,0xbb2e1d1c, -0xbb2d5c0b,0xbb2b506c,0xbb228be2,0xbb173516,0xbb3895b5,0x3a58e33f,0x3a7c0006,0x3a4ac054,0x3a3eda0b,0x3a33462c,0x3a7d1e37,0x39ee69b5,0x39b3ce11,0x39c672f7,0xb8f9fd6c,0xb98c1061,0xb8e10fe7,0x38b7413e,0x3986608d,0x3957db63,0x3a30f2a7,0x3a52a4f2,0x3a7bc342,0x3a431d8d,0x3a2d429f, -0x39ebabb6,0x3a297b90,0x3a5f66eb,0x3aa8afbd,0x3ab4d36e,0x3ab4fd93,0x3a914602,0x3a925aa1,0x3a8e9d89,0x3a983ee4,0x3a6bf3dd,0x3a4dce54,0x3a1ca80f,0x3a80ce75,0x3a982687,0x3ac81cd2,0x3a9433df,0x3aa8d88f,0x3a52a019,0x39ecc03e,0x39707665,0x3a2b4718,0xb9ce3eae,0xba750c67,0xba66aabb, -0xbaf724bb,0xbafc2fe7,0xba9d2d74,0xba6e291f,0xb9f818d9,0xba00f776,0x3a85f05d,0x3ac4649b,0x3ab9d3cb,0x3a9c3ec2,0x3a54bf5a,0x39f8f1b6,0x3a76e259,0x3ae8afb1,0x3b48bd7f,0x3b6c3430,0x3b6370d9,0x3b0e3f8b,0x3af5b91b,0x3abfbc89,0x3adde77e,0x3a9f2c12,0x3a929360,0x3a6377e5,0x3b01628b, -0x3b24bb5a,0x3b49b28b,0x3b01e91b,0x3b019b5d,0x3a6a5985,0x39715951,0xb875139d,0x3a9c357f,0xba729344,0xbae52cfa,0xbaf15abe,0xbb974e8e,0xbbb4f129,0xbb7a65b8,0xbb630508,0xbaf20336,0xbb127928,0x3a812dcd,0x3aa43310,0x3a9d68de,0x3a84f238,0x39837cbb,0xb9d93021,0x39f6633a,0x3ad899e2, -0x3b8346d2,0x3b9f98f9,0x3b9e7af7,0x3b44bad1,0x3b51efde,0x3b3eee63,0x3b643839,0x3ace1273,0x3a803ef6,0x3a19f110,0x3b3b7346,0x3b7e4613,0x3ba2c8c1,0x3b527b5a,0x3b01e7a4,0x3a3524f4,0xba778b2a,0xba990a2b,0x3ab6884a,0xbb58f844,0xbbb8cc4a,0xbb819534,0xbc01d843,0xbc0b3f3a,0xbb9bafdf, -0xbb6a9cb8,0xbae5fe3b,0xba119e4f,0x3b2935b9,0x3b79a680,0x3b877c84,0x3b2d8864,0x3aaab38d,0x39278e3e,0x3ae09395,0x3b914502,0x3c113426,0x3c2c65ed,0x3c240a91,0x3bb61a96,0x3b860685,0x3b2afe9c,0x3b84eb57,0x3af84f48,0x3ad65ac0,0x3b073c35,0x3bbbc6f9,0x3bf3b50b,0x3c0ca6be,0x3b9cdaae, -0x3b803cce,0x3acf28e1,0x3a2c9f88,0x39f24f68,0x3a2b2dc1,0x3b9dd34e,0x3beab40f,0x3c072dfb,0x3b3a13f8,0xba1f3a40,0xbab61101,0xbb101073,0xbaa298cc,0x3b7ed55e,0xbb75eb1e,0xbbc2f6bc,0xbbaad828,0xbb84690b,0xbb38660f,0xbb43f58a,0xbb7d4cc8,0xbb9af16f,0xbbfc9209,0xbbf42953,0xbbb8a750, -0xbb89ebbc,0x3c05f8e3,0x3c40558b,0x3ba734f3,0x3b8c8a38,0xb90daedb,0xbbc3c2f3,0xbb403f68,0xbad88a3f,0xbb1ad43c,0x3b41a858,0xbb55468b,0x3a8b9a61,0x3c154daa,0x3c09d3eb,0x3abd722a,0xbc24e78c,0xbc58bba8,0xbbf5d774,0xbb1a9c7b,0x3984ed3b,0xb9596e44,0xb92687b2,0xbaf525df,0xbb36dd2e, -0xb93bd624,0x3b01f580,0x3ac599b5,0x3b3b1e61,0x3b753841,0x3bbe9d7a,0x3b49587b,0x3b5cdb03,0x3ba5b594,0x3c05d473,0x3be6c414,0x3a56e91f,0xbbc34a63,0xbc29488c,0xbc36d662,0xba66a6f8,0x3ba85fd5,0x3b9192fc,0x3a492e67,0xbba0b9ab,0xbc38bf31,0xbbe06170,0xbbbd9c28,0xbc9ea0f4,0xbccd9e0d, -0xbc9be34b,0x3ac5f431,0xbb737b40,0xbb8e92bc,0x3893043b,0xba02ceb2,0xb94096a3,0xb89e766e,0x3973bf79,0x38e5264e,0xbad847c3,0xbb0275fc,0xbb39e769,0xbb14bba5,0xb9b1df3c,0x3a33fa80,0xb8aa7a01,0xba1b012c,0xbafec38a,0xbb946421,0xbbb620a8,0xbbb447ae,0xbb8f8155,0xbb040e4a,0x3b4934d7, -0x3c39bbc7,0xbbb4a3a3,0xbc474573,0xbbdbc8b3,0x38ba98c2,0x3bc81e6d,0x3c05b835,0x3ab88fbf,0xba27dd8c,0xbad95554,0x3c268eaf,0x3c489652,0x3c0b29c9,0x3b481948,0x3b3f1af4,0x3b674a98,0x3a3eac49,0x39089a49,0x39bb40da,0xb986d12b,0xba0d909e,0xba637c2b,0x396943d3,0x3ae24dcc,0x3b43e3bd, -0x3b1579f5,0x3ac2db91,0x3a86293c,0x3aec54ac,0x3b34a560,0x3b8f5169,0x3b78ca55,0x3b16ca4a,0xb9040779,0xb86dbb86,0xbae48844,0xbb08f678,0xbac9e626,0xba02e2fd,0xba908d8a,0x3a78a348,0x3b4deef0,0x3be50043,0x3ad9ad24,0x3b649c81,0x3ac5e9dc,0xbaed0729,0xbb5c9287,0xbb33629f,0xba4a8afa, -0xb91c0d7d,0x392f0af8,0xba062e91,0xbaa1a707,0xbad12b61,0xbab8e5b9,0xba831dc4,0xba5d85f5,0xb8a00568,0xba5e5413,0xbb421ab9,0xbb8967b7,0xbba37fd5,0xbb94db80,0xbb91cb5a,0xbb74d679,0xbb0dfa49,0x394aaaa6,0x3b16df9e,0x3b6b11e4,0x3b98cfaa,0x3ba8ba55,0x3b9e02f1,0x3b49bf9e,0x3a589a94, -0xba2fe0dd,0xbae42d80,0xbb123488,0xbad6e0d7,0x3ae2b72c,0xbb8f3f97,0xbb4a3f81,0xbada2aa8,0xba33dca6,0x38cf773e,0x3786952f,0x37d8d9d2,0xb7ee09ff,0x397503ba,0x3a19051f,0x3a4e092a,0x3b01b24d,0x3b0d6b3c,0x3ad56571,0x39366076,0xba7b2aca,0xbb0f1c33,0xbb230d3f,0xbb219d23,0xbb01c63c, -0xba91c87e,0xb8ef04a9,0x396bff41,0x3b158981,0x3b7a6987,0x3b9f8722,0x3be03c74,0x3c0067f3,0x3c0c317d,0x3c086e26,0x3c05f144,0x3bfee712,0x3bc8dc04,0x3b7f495c,0x3a0b811f,0xbb24a121,0x3bc0a312,0x3bb8ad09,0x3bb06ec0,0x3bb4fae0,0x3bbf8335,0x3bc3664b,0x3bc3167d,0x3bca9cdf,0x3bb1649a, -0x3ba1e3e7,0x3b87aa5b,0x3b47cc9d,0x3aba5296,0x3a20de71,0xb9d166f4,0xba97a3e5,0xbb1d92a8,0xbb0b54f9,0xbb052988,0xbafed468,0xbb06c3a3,0xbb12d103,0xbb214f43,0xbafc80ea,0xbabe3f7f,0xba886ae8,0x398548e3,0x3acdd7b0,0x3b48ff45,0x3b4868dd,0x3b4b123e,0x3b4fb5d6,0x3b4a6ef1,0x3b5d83d9, -0x3b8c40be,0x3bac46bf,0xbaeef1d2,0xbad09506,0xbb0b0553,0xbab11693,0xbad57ee0,0xbacf1a40,0xbabfdd95,0xbac24700,0xbafa0d6f,0xbb1ebcee,0xbb3eae33,0xbb4d0a66,0xbb5e752f,0xbb7c9007,0xbb6c64df,0xbb59ae23,0xbb4d2ae7,0xbb442c5d,0xbb48cb12,0xbb3aa45b,0xbb2d7512,0xbb200495,0xbb159f26, -0xbb113f94,0xbb0e0cd2,0xbb0d501a,0xbb184d61,0xbb27363f,0xbb2c6a86,0xbb2e71dc,0xbb2361b7,0xbb17581e,0xbafb89ad,0xbadb628a,0xbadaae21,0xbaf3aaad,0xbada2fe2,0xbabfe2ad,0xbaf1b7d0,0xbb0121af,0xbb0a4855,0xbaca589e,0xbad8f9d3,0xbae13753,0xbb050b45,0xbb1079db,0xbb1ccfe7,0xbb2de195, -0xbb3a03b0,0xbb4b2577,0xbb388573,0xbb3109e7,0xbb3a439a,0xbb3173b8,0xbb2b2caa,0xbb2406f9,0xbb23471b,0xbb21030f,0xbb1e6a95,0xbb1c8b55,0xbb1a6693,0xbb17384c,0xbb15725f,0xbb11c1c0,0xbb10d7a9,0xbb0b4928,0xbb0983d7,0xbb0a7501,0xbb091c54,0xbb075137,0xbaff5b5f,0xbae6889e,0xbb2a6c72, -0x3a37464d,0x3a5d239e,0x3a3ec1be,0x3a31cc44,0x3a2519f9,0x3a3f56ce,0x39d6fb0d,0x39a621a3,0x391fab66,0xb90085c8,0xb98e8f59,0xb958897a,0xb6881468,0x392820ad,0x389852ce,0x3a0d956a,0x3a269318,0x3a4e99cd,0x3a2b2260,0x3a1b0908,0x39d7c8b3,0x3a19037d,0x3a486d88,0x3a96295f,0x3aa2e22c, -0x3aa0f4c7,0x3a6b1b93,0x3a7f74b6,0x3a7cefd7,0x3a9543cf,0x3a39d405,0x3a1ab1bd,0x39f0d3b1,0x3a711e41,0x3a90268f,0x3ab78bc3,0x3a824cf9,0x3a803ba3,0x3a356107,0x39d0682b,0x3899eb6d,0xb72c68e2,0xb9cd982a,0xba659be5,0xbab61e18,0xbae63450,0xbadc34d9,0xbaa27fa1,0xba648d94,0xba1b1412, -0xba58586f,0x3a44cbb8,0x3aa0803a,0x3a8b7fb5,0x3a98ca12,0x3a810fbc,0x3a3d2b98,0x3a964944,0x3af49629,0x3b405ff9,0x3b601476,0x3b50d6d9,0x3ae8127e,0x3adbacb9,0x3ab79c15,0x3af87676,0x3a7da2c4,0x3a4a5e72,0x3a1da4d3,0x3af8be79,0x3b220a85,0x3b387103,0x3ada6ece,0x3ae27676,0x3a9627c7, -0x39cbcf1d,0x37bb134e,0x399ae75a,0xba32ffbd,0xbabadd78,0xbb2fb3aa,0xbb8d6cb9,0xbbae87d3,0xbb8771d0,0xbb6ec595,0xbb07f47b,0xbb361ef5,0x3a2a9f55,0x3a51569f,0x39fe5acf,0x3a6a3b0c,0x39ced1d0,0xb894e501,0x3a319ee5,0x3ae18601,0x3b77638f,0x3b96b024,0x3b91b868,0x3b1e54d8,0x3b428c64, -0x3b3405df,0x3b762d9c,0x3a838c43,0x39d8ccc4,0x39ae32a7,0x3b41fd36,0x3b81ffe1,0x3b991adf,0x3b3d7a7d,0x3a84d388,0x39fb6c0a,0xba8c39bd,0xbacd6cd9,0xba0e783a,0xbb488bab,0xbbade9a9,0xbbae22cb,0xbc056d36,0xbc0bd695,0xbb91fbb2,0xbb823811,0xbb2616d7,0xbae0a8b2,0x3b04b760,0x3b488829, -0x3b46d65f,0x3b3df213,0x3b13b129,0x3abc5778,0x3b369309,0x3ba728c4,0x3c10d959,0x3c271158,0x3c171208,0x3b969b98,0x3b77689e,0x3b3e7af5,0x3ba3e3f8,0x3ac96061,0x3a5e019b,0x3abb5463,0x3bb56069,0x3bf14ffc,0x3bffd062,0x3b79aa4b,0x3bdbd606,0x3b6e1ef2,0x3b598570,0x3b384d28,0x3aed76fc, -0x3bb62366,0x3c0147a3,0x3c1486f1,0x3b76f2c0,0x383d9f5c,0xba39d6ec,0xbad63b71,0xba8723d5,0x3b6b28ed,0xbb5397b1,0xbbb6ec22,0xbbd180f9,0xbbc17265,0xbbb5d274,0xbbc8eb8a,0xbbd0e788,0xbbdf8bc2,0xbc1bec00,0xbc0194ca,0xbbb3d94d,0xbb750f2c,0x3bec79b9,0x3c1b197c,0x3b35cb9c,0x3b188e8c, -0xba5871d7,0xbbacca17,0xbaec6fb4,0xba215437,0xbaf83758,0x3ba3ca22,0xbb85bc0c,0xba1e05dd,0x3bcb5060,0x3bdc2570,0x3b36a0c3,0xbc182b19,0xbc568894,0xbbf8fd80,0xbb2d8db5,0x3886b5e0,0xb8fef490,0x3851a22c,0xbad83c55,0xbb3aa70e,0x386663c7,0x3b0d0dfe,0x3af665aa,0x3b2456d2,0x3b68e665, -0x3bc8e4b0,0x3b8a5dea,0x3b9d5595,0x3bbfaacb,0x3c0d87ca,0x3bc9bbdf,0xbab8639f,0xbbf2bd9b,0xbc2d2b13,0xbc17d3e1,0x3a3da3d9,0x3bb0bc5b,0x3b66207e,0xbaee8e10,0xbbe79af5,0xbc274d99,0xbbddfd22,0xbbeafc15,0xbc64b02d,0xbca31bc0,0xbc8223db,0xb9ea8877,0xbb42f35c,0xbb603391,0xbaa769de, -0xb9d1ef6d,0x38b5ce27,0xb91b527d,0x3940eff6,0x395ed0b0,0xba90a929,0xbb04c888,0xbb4bb9d5,0xbb2f038a,0xba90578a,0xb9ac2e65,0xbad285d1,0xbad4e240,0xbb2da066,0xbbaabf4e,0xbbbc76c8,0xbbae4eb1,0xbb916c9e,0xba17f260,0x3b8102d9,0x3c2668d1,0xbbec8caa,0xbc4b7aa0,0xbb8de032,0x3ab4522f, -0x3bec153b,0x3c33d02b,0xba6645a3,0x3a867573,0xbb4e92ce,0x3bbc579f,0x3c10fac4,0x3bf893b1,0x3ae5d8c6,0x3aaca39e,0x3b3abdb7,0x3a514f46,0x39092f27,0x39c3c06f,0xb700cd84,0xba116bbb,0xba8b5578,0x39068349,0x3ae3b17a,0x3b4cae33,0x3b2c5fd6,0x3b0ceec6,0x3ae34e54,0x3b2d1eff,0x3b575d94, -0x3b883b29,0x3b7d4a18,0x3b0760ad,0xba5200a3,0xba1f3a2e,0xbaf30da5,0xba9d6265,0xbaa855aa,0xb94837fb,0xb9fbe61d,0x3b7b77dd,0x3bcda113,0x3c0105db,0x3b7ca826,0x3b89b961,0x3b1c1a56,0xb9d3812d,0xbb2047dd,0xbb051efe,0xb9b4a9ac,0x38e3547a,0xb9ee267d,0xba0735bd,0xba5baaeb,0xba80a858, -0xba965d56,0xba657601,0xba2561f5,0x3960e28d,0xb9ad05d5,0xbaea377b,0xbb5c4893,0xbb8df6f3,0xbb85f1e5,0xbb7c1d5e,0xbb56cb43,0xbb0bceb1,0x38425ae5,0x3afdc46b,0x3b4b1d42,0x3b77c461,0x3b7eeecb,0x3b67e5ce,0x3ac2b709,0xba056f74,0xbaeff0db,0xbb304456,0xbb3641f9,0xbace1826,0x3b1abc82, -0xbbb7e512,0xbb9ded71,0xbb57c72a,0xbaff965b,0xba6ac9f8,0xba307fb3,0xb9d833f4,0xb9c2a37b,0xb9331798,0xb8c71808,0xb830b06c,0x3a895f4b,0x3ad68d7c,0x3aede692,0x3a2633ad,0xb9ec96c0,0xbaf5fc69,0xbb2bea6f,0xbb39678f,0xbb20757a,0xbaba3363,0xb921c4a4,0x3a2f3c40,0x3b34480a,0x3b8f26d3, -0x3bb280ba,0x3bf0ea2d,0x3c08606f,0x3c11a692,0x3c0553a7,0x3bea8bca,0x3bbe5552,0x3b887082,0x3b0d662e,0xba6b8372,0xbb78079f,0x3bc0d566,0x3bc0da93,0x3bbbc701,0x3bb5b885,0x3bbc9a29,0x3bba928a,0x3bb19396,0x3bb0f223,0x3ba6a384,0x3ba3a240,0x3b9aa73c,0x3b7a2079,0x3b20bc74,0x3ae798ce, -0x39e67de0,0xba0d7b60,0xbb0038a0,0xbadb3a1f,0xbad2a09c,0xbacebdf5,0xbae1be1d,0xbb019b19,0xbb132b55,0xbaf48bbf,0xbac760d6,0xbaa862d8,0x3899a3e4,0x3ab4063a,0x3b3c1aa8,0x3b5048a1,0x3b6a8e33,0x3b80e18a,0x3b7c4f11,0x3b83c5c6,0x3b9ae76b,0x3bb22337,0xb9ad2f06,0xb8c9c4af,0xba4b219f, -0xb939be17,0xba0398f2,0xba0eb997,0xb9fb0e4e,0xba11c0a3,0xba8be334,0xbae244b2,0xbb195819,0xbb2f85b7,0xbb454387,0xbb64ed50,0xbb5841d9,0xbb465c1f,0xbb3cf5d9,0xbb38a036,0xbb3fb048,0xbb36d436,0xbb29a9c6,0xbb1b74c9,0xbb105460,0xbb0c1678,0xbb085440,0xbb08f44e,0xbb05d7f6,0xbb075f17, -0xbb00d272,0xbaf7810a,0xbad9ff90,0xbab04a7a,0xba7ba0cb,0xba1e74e5,0xb9e27ef7,0xb9ec4c10,0xba92e27f,0xba5c01fd,0xbaa35ee4,0xbab1cbab,0xbac5eee9,0xba874c9b,0xba98fbc0,0xbaa035df,0xbacf57b1,0xbae864ea,0xbb02651e,0xbb144322,0xbb236637,0xbb3777c4,0xbb221485,0xbb1d629f,0xbb278df3, -0xbb200741,0xbb1bf939,0xbb18b519,0xbb19272d,0xbb192b52,0xbb1891e6,0xbb180bd3,0xbb16ec38,0xbb16a642,0xbb0fb28b,0xbb08c1a3,0xbb034b49,0xbaf085c5,0xbae053d2,0xbad52618,0xbaced480,0xbac95781,0xbabc17d5,0xbaa3d199,0xbb203483,0x3a1e2b2b,0x3a442c12,0x3a3b84b9,0x3a22800d,0x3a0ee911, -0x39f1aa89,0x39cfa903,0x3991d4b3,0xb906c344,0xb93e7517,0xb9ae6e3d,0xb9d187ad,0xb91d32be,0x37750d16,0xb8e36272,0x39cc17df,0x39fec531,0x3a14cf86,0x3a0c576d,0x3a085c86,0x39dab063,0x3a107846,0x3a39e05c,0x3a8622b9,0x3a94a0ab,0x3a91a230,0x3a43bf83,0x3a6575d4,0x3a66b96c,0x3a9524a1, -0x3a172d5c,0x39ed0c3a,0x39b47538,0x3a648d12,0x3a89374d,0x3aa5b548,0x3a663ca1,0x3a3f2bb6,0x3a26606b,0x3991ba4f,0xb89d50f5,0xba120603,0xb9be6b19,0xba4866cd,0xbae97fdb,0xbac320a3,0xbaad8129,0xbaa7a58f,0xba3d7e8a,0xba1a98f7,0xba8cb0af,0x39eb6f18,0x3a6c9c3b,0x3a44f79e,0x3a8bc57f, -0x3a887dae,0x3a7c3748,0x3aafb46c,0x3aff5183,0x3b35cc7c,0x3b52f629,0x3b3eae28,0x3abd9d20,0x3ac290d6,0x3ab0fde2,0x3b097e31,0x3a555c67,0x3a090f97,0x39c22507,0x3aeebe01,0x3b1d662f,0x3b244f05,0x3ab59390,0x3ac48347,0x3ab784aa,0x39f3cbe4,0x387331c9,0xb9ee0b40,0xb9d6ca33,0xba8e6280, -0xbb63be38,0xbb824639,0xbba521f2,0xbb9894b5,0xbb71ee40,0xbb12c3f0,0xbb522896,0x39950996,0x39a81c3b,0xb8dcef13,0x3a334f46,0x39f1c9de,0x399b817b,0x3a6f74b7,0x3aedb131,0x3b64d385,0x3b8e0c73,0x3b86aad1,0x3b0270b7,0x3b33beee,0x3b2a90f7,0x3b83825e,0x3a26f442,0x386cd3f6,0x38bc5d19, -0x3b459c8e,0x3b81bc2e,0x3b8aec6c,0x3b27ba90,0x3974c3e0,0x39b2fec5,0xbaa2488c,0xbafd60a1,0xbb143b4f,0xbb2ffb1f,0xbb9b79ad,0xbbd424ae,0xbbfe25f6,0xbc02d8eb,0xbb8a5f30,0xbb8162ea,0xbb3ef734,0xbb363a78,0x3ab40e92,0x3b0dbde3,0x3af5560f,0x3b3de7dd,0x3b39ecaa,0x3b250ab2,0x3b722233, -0x3bb839a9,0x3c0c3257,0x3c1f8c1f,0x3c097767,0x3b74141f,0x3b58eb90,0x3b4bf603,0x3bbfe664,0x3ab8042c,0x3996e435,0x3a53a9ea,0x3bacc7be,0x3be9361c,0x3bdf9ea1,0x3b3d620e,0x3c11778c,0x3bb5b0a4,0x3bb2ff70,0x3b9b3ca8,0x3b488038,0x3bca92bc,0x3c06ae4b,0x3c13458a,0x3b92017c,0x3a583bef, -0x39270c53,0xba55c812,0xba1f7cf3,0x3b4923bf,0xbb183254,0xbb9ba218,0xbbeb14db,0xbbec7c11,0xbbf8978e,0xbc075d8a,0xbc058d8b,0xbc09a6ff,0xbc2e9719,0xbc03e96b,0xbba79a18,0xbb2b0368,0x3bc81206,0x3be759c5,0x3a53b129,0x3a20e874,0xba9afee2,0xbb7c10c4,0xba33ec73,0x39cd9eb4,0xba818303, -0x3bd94cb8,0xbb8ef952,0xbaf00e89,0x3b5a4917,0x3b9e0a5f,0x3b720a5e,0xbc05e93e,0xbc46d7a3,0xbbea6632,0xbb3585ee,0xb96220a7,0xb9778db1,0x3931fa42,0xbab4e275,0xbb31b50a,0x39133773,0x3b074232,0x3b01df72,0x3b07b005,0x3b535ddc,0x3bc6f3bc,0x3bac925b,0x3bc6eabd,0x3bd21390,0x3c076779, -0x3b9a92d5,0xbb46fd08,0xbc0a3f8c,0xbc2a3211,0xbbea20cf,0x3b12d9b1,0x3bb52d73,0x3b38343e,0xbb6da3cf,0xbc09e922,0xbc1364ae,0xbbd173ab,0xbc09ac01,0xbc16063e,0xbc6f7361,0xbc4cca6a,0xbb5c9f5d,0xbaeb4fbb,0xbaedfbd8,0xbb1406a5,0xb8e0de6c,0x39a39320,0xb8c5979f,0x38c5b9c6,0x39e00f8f, -0xba117ae4,0xbaf593ef,0xbb4ddcb3,0xbb3d75a2,0xbadcb045,0xbaa6c351,0xbb3c365b,0xbb20f06f,0xbb508a27,0xbbb2c7b7,0xbbb39d80,0xbb9c1af1,0xbb888800,0x3aa8084d,0x3ba094bb,0x3c0606c8,0xbc07b6a1,0xbc3f3f8b,0xbacc0475,0x3b30ac47,0x3c010b0a,0x3c57ab71,0xbb2dbbc7,0x3b8360c6,0xbac933b1, -0x3abf5f65,0x3b87b7ae,0x3baba0a2,0x39bf20ca,0xb84f805f,0x3aed452e,0x3a2e4e4a,0xb855899e,0x392784c9,0x38ff12ed,0xb9ef9094,0xba882b33,0x38a923e1,0x3ad601dd,0x3b4d5f0e,0x3b3a0d34,0x3b2ca24c,0x3b1c72bb,0x3b5a7422,0x3b6d12b0,0x3b73a91c,0x3b6be220,0x3af41d57,0xba8a5bd6,0xba80792e, -0xbaff5f1d,0xba2145d4,0xbaa2f34d,0x3959d7e3,0x3a82628c,0x3bd8a2db,0x3c0d4a97,0x3bf3dc35,0x3bc429e3,0x3b8fedd4,0x3b3c2212,0x3a74512a,0xba8f4aca,0xba551078,0x380ec5d7,0x392651f5,0xba6675ca,0xb9cb4880,0xb9b81612,0xb9a62256,0xba3ba2ee,0xba358a2a,0xb9d4ee7f,0x39d97e9f,0x3908bcc8, -0xba27100f,0xbb1a3c77,0xbb63c2cb,0xbb651a8c,0xbb4b6b96,0xbb2cdea0,0xbaebb458,0xb6ec65f7,0x3acb0261,0x3b2e33b3,0x3b385bee,0x3b262d1a,0x3b084d3b,0xb9002dad,0xbaf062d0,0xbb42d64f,0xbb69aad4,0xbb47ecfe,0xbaa9d7a6,0x3b3ddd1a,0xbbbf1996,0xbbbc519c,0xbb8ef489,0xbb3ec1aa,0xbae61432, -0xbaa17336,0xba407552,0xba1c6528,0xb9db13eb,0xba112153,0xba1fb1c1,0x3943aeb7,0x3a84ab2a,0x3ae27926,0x3a7b095a,0x3683fc55,0xbac2371e,0xbb2aa6f0,0xbb47007b,0xbb345220,0xbae1f0e3,0xb9bf0caf,0x3a5ff8a7,0x3b3f8984,0x3b950fbf,0x3bb8f7a4,0x3bf14783,0x3c068f43,0x3c0c194c,0x3bf05bc8, -0x3bb96ebb,0x3b642330,0x3af32650,0x3935d4e2,0xbb1132a2,0xbb906bd6,0x3ba19091,0x3ba8c1be,0x3ba9d700,0x3b9de6ce,0x3ba23707,0x3b9c4408,0x3b8d4849,0x3b856fd6,0x3b8b4444,0x3b95b914,0x3b9e0793,0x3b891698,0x3b511b94,0x3b314964,0x3a919316,0xb80248ff,0xbac4dd96,0xbaa35521,0xba9e51a9, -0xbaa460da,0xbab88a69,0xbadf2435,0xbb0404ca,0xbae6116a,0xbac4fa95,0xbab4e36a,0xb80d500c,0x3a9d3c3b,0x3b2d360e,0x3b4d66b0,0x3b76a88a,0x3b8d1439,0x3b87a919,0x3b8643f1,0x3b904fe0,0x3b9b80bb,0x3a9dfa20,0x3abf82ca,0x3a3696da,0x3a8b1cdb,0x3a33794f,0x3a0cdb3e,0x3a192e6b,0x39e36da0, -0xb887d3d7,0xba57218b,0xbac5da3a,0xbafb28b1,0xbb1673c6,0xbb348864,0xbb30fb70,0xbb232e51,0xbb20bcf0,0xbb24c468,0xbb345fde,0xbb2fbfaf,0xbb23619c,0xbb15f7e4,0xbb0ab2b5,0xbb06f13f,0xbb0373c9,0xbb05cacb,0xbae87770,0xbad0d7f9,0xbaacd71c,0xba91bfea,0xba536a33,0xb9b72b66,0x374750ba, -0x39ee0855,0x3a4ea7bf,0x3a803fc1,0xba23c7e3,0xb9978955,0xba356c98,0xba4fabec,0xba80d6e5,0xba0a7f00,0xba3c9986,0xba5f63fb,0xbaa062bc,0xbab81d09,0xbad408a5,0xbaf5771c,0xbb0ab9e6,0xbb1ea6fe,0xbb07a53d,0xbb04f8e3,0xbb17cb7f,0xbb0fe288,0xbb0ddae8,0xbb0ca0dc,0xbb0e7be0,0xbb10211f, -0xbb1122eb,0xbb11bc9b,0xbb113c51,0xbb13753c,0xbb07bc07,0xbafbe1de,0xbae8fe0b,0xbaca3b7c,0xbab05e86,0xba9aa78b,0xba8fce42,0xba86bbc5,0xba75048f,0xba49eefd,0xbb12bbdc,0x39ff208e,0x3a25aa5b,0x3a2cc8ba,0x3a0b384b,0x39efdd4f,0x3991eb93,0x39bb616b,0x3978d810,0xb9b80c7b,0xb94f27ea, -0xb9b46fad,0xba12c458,0xb9764e4c,0xb8961f8d,0xb96cc23b,0x397c4055,0x39a8090c,0x39df4882,0x39dd4f34,0x39e119cf,0x39cece82,0x3a02712b,0x3a25b45f,0x3a68705a,0x3a8302fe,0x3a7e4db0,0x3a1ca724,0x3a44b782,0x3a48c085,0x3a907f3e,0x39e5550d,0x39a092c2,0x39565b7e,0x3a4c0906,0x3a77b39f, -0x3a8cd0ae,0x3a411455,0x3a01897c,0x3a103c79,0x39174a61,0xb9818a3d,0xba777255,0xb9a4f258,0xba26093f,0xbb05060d,0xba9a0c02,0xba7c1ef3,0xbaac61e9,0xba116955,0xba0ddfd4,0xbaa1e256,0x3902b959,0x3a0c7bec,0x3a00af1c,0x3a69018b,0x3a862f88,0x3a92d100,0x3abdc630,0x3afff9d2,0x3b27bea9, -0x3b404e48,0x3b27a6e4,0x3a92afa8,0x3a9d45ef,0x3a9e0364,0x3b114e45,0x3a2a8bf6,0x39923b8c,0x39093f80,0x3adafb1e,0x3b11e668,0x3b0a326e,0x3a8f0b60,0x3aa5cc09,0x3acb0f5c,0x39e64f79,0x37ae34ab,0xba8325d6,0xb92bcba5,0xba4e027a,0xbb8883ce,0xbb6c77b8,0xbb98621d,0xbbaba12b,0xbb6cecfc, -0xbb18ad29,0xbb658a71,0xb9074faf,0xb9431421,0xba033e10,0x39d3f1b1,0x39ec4b21,0x3a241413,0x3a8eca07,0x3af49323,0x3b50b65f,0x3b8313b2,0x3b73da24,0x3ad37c92,0x3b1db869,0x3b19b83c,0x3b884853,0x39a536e9,0xb9846a62,0xb944b017,0x3b3ee21d,0x3b77516e,0x3b6e5ba5,0x3b104632,0xb9b92682, -0x39561bb7,0xbabfc39a,0xbb1585b7,0xbb6b7f27,0xbb1405ba,0xbb8468a5,0xbbebd580,0xbbe05558,0xbbe3789a,0xbb7d7df8,0xbb668d36,0xbb3c5fc6,0xbb67d2ac,0x3a21c0b4,0x3a94b3fc,0x3a55353a,0x3b2c9792,0x3b476aff,0x3b5b5771,0x3b8db3af,0x3bc1aff9,0x3c044d9b,0x3c1417cc,0x3bf19f42,0x3b37aa21, -0x3b25675b,0x3b45f921,0x3bd39487,0x3aa4a53b,0xb973c637,0x39584508,0x3b9f8d28,0x3bd84579,0x3bb7826e,0x3b04918e,0x3c27c7cd,0x3be7cbc9,0x3be36558,0x3bc81867,0x3b8ab8a8,0x3bd99bd1,0x3c035d74,0x3c04b745,0x3b9a15d3,0x3ac0082d,0x3a6ec553,0x37beaa18,0xb8d26007,0x3b1c9f58,0xba96255b, -0xbb64db3f,0xbbf675f4,0xbc021265,0xbc1044f9,0xbc1a123b,0xbc17e761,0xbc1ab23e,0xbc357af6,0xbc010b06,0xbb91543a,0xba465f25,0x3ba9219b,0x3b9e5198,0xba4c30df,0xba52eb7a,0xbab46e00,0xbb12de8f,0x381a0158,0x3a941ce7,0x39a1610b,0x3bff6c3c,0xbb8d99ab,0xbb28fd2c,0x3a5576e8,0x3b3f799f, -0x3b8824d9,0xbbdd6516,0xbc2c9d6d,0xbbcd3eb0,0xbb2a3e6b,0xb9f5bc93,0xb9fed013,0x38e47057,0xba7de46a,0xbb1d82a9,0x38666426,0x3ae6155b,0x3af31e33,0x3acd953b,0x3b349a68,0x3bb99ed2,0x3bc26e88,0x3be146e5,0x3bd79080,0x3be92636,0x3b3cf636,0xbb8aaee3,0xbc185164,0xbc2430a0,0xbba270f1, -0x3b650117,0x3bb3e537,0x3b1bc00d,0xbb9cc012,0xbc16c5bc,0xbc02176b,0xbbc32d95,0xbc127bfc,0xbba8c68f,0xbc27bf44,0xbc1dcb62,0xbbcd03c1,0xba292e23,0xb95119f4,0xbb25db38,0x39ed6783,0x39ebce26,0x38de77d6,0x382c70e7,0x3a0257b3,0xb7d639a1,0xbacaed4f,0xbb3f7149,0xbb4054ba,0xbb046ad6, -0xbafda89a,0xbb6e7217,0xbb488d6b,0xbb6a8122,0xbbae6ccf,0xbba2a8f9,0xbb844be2,0xbb6b80b4,0x3b543e86,0x3bbaa59e,0x3bb7eed0,0xbc1238ee,0xbc2dc3e7,0x3a2e62ee,0x3b6da660,0x3c04ec1a,0x3c6ce9ba,0xbb663329,0x3bd6c268,0x3b23377b,0xbb10292a,0xbaad731d,0x3ace358c,0xba62f969,0xba4fae7c, -0x3a433f89,0x39b3dbc4,0xb9a0cfdf,0xb82b6319,0x388c577b,0xb99275e9,0xba5a7a92,0x385d0398,0x3ab91986,0x3b49782e,0x3b41cab2,0x3b444298,0x3b416d3f,0x3b75ec27,0x3b6e4569,0x3b475246,0x3b3bd804,0x3abf934a,0xba915322,0xbab433ed,0xbb0df3ec,0xb9d45740,0xbaac4cbd,0x3a52d413,0x3b5545e7, -0x3c0d1bc5,0x3c165c51,0x3ba15c55,0x3bd4f811,0x3b86c770,0x3b46465a,0x3b16392b,0x3a35d2ab,0x3a37f44b,0x39b638bd,0x363e160a,0xba892566,0xb91eec19,0x384632f7,0x391908d1,0xb9807875,0xb9de6273,0xb962ca92,0x3a0e6f60,0x3a13eac4,0x39e09c23,0xbaa1a577,0xbb1f1f6a,0xbb33d533,0xbb188e5d, -0xbafabf92,0xba9d5cff,0x37c81877,0x3a932011,0x3b08b2a9,0x3ae57257,0x3a95f962,0x39f83478,0xbadecc98,0xbb4f6cb8,0xbb880446,0xbb8da67c,0xbb4286d4,0xba552f66,0x3b59e59a,0xbbac3502,0xbbc022c1,0xbb9d4647,0xbb68a813,0xbb1ee45b,0xbadb6dfc,0xba850951,0xba5b2fb5,0xba1c3d8b,0xba4d9034, -0xba6b9ef9,0xb9f86911,0x39be5dd0,0x3ab6e07d,0x3a931e40,0x39ba90ec,0xba8e13ac,0xbb1fba2f,0xbb473d37,0xbb3a3805,0xbb023ad9,0xba40ca32,0x3a300463,0x3b3429f8,0x3b8ed28d,0x3bb1fb66,0x3bdf3942,0x3bf34c0b,0x3bf5c696,0x3bc65a8d,0x3b817f48,0x3a9dc4cc,0xb9da71cb,0xbaea2ff9,0xbb57a374, -0xbb936c06,0x3b534aad,0x3b6dbeda,0x3b8079b8,0x3b68bab5,0x3b71b012,0x3b626d97,0x3b40c855,0x3b27cd2f,0x3b4f673c,0x3b78e9a7,0x3b9297e3,0x3b877ffc,0x3b6bfdf6,0x3b5d6ce9,0x3ad796d6,0x39e5c9f8,0xba7271ec,0xba502ede,0xba5daa29,0xba8bf80d,0xba99cc55,0xbaba4f50,0xbae33597,0xbacabbbc, -0xbab0dfce,0xbaa47eb1,0x36959a18,0x3a943c14,0x3b20c2d0,0x3b3f5537,0x3b690cef,0x3b86656a,0x3b787f62,0x3b648a81,0x3b579ae8,0x3b58bd2e,0x3b1f4b1f,0x3b313fc9,0x3b07bccd,0x3b0bd6de,0x3aea5a1c,0x3ace3b29,0x3ad39f05,0x3abf1fe5,0x3a822bb6,0x397a5ca8,0xb9e7994d,0xba69602e,0xbaac0885, -0xbae1b8ad,0xbaf22430,0xbae4ec16,0xbaf3e3ac,0xbb0804a3,0xbb20cae8,0xbb220aac,0xbb168074,0xbb0b9b72,0xbb00bb4c,0xbafb4043,0xbaf559f4,0xbafd5c07,0xbac4681e,0xba9991a3,0xba499a9d,0xb9ea5885,0xb873e3a1,0x3a0410ad,0x3a57dca6,0x3aaac79e,0x3ae3b2cc,0x3b0a4a1e,0xb967a6d9,0x38d80812, -0xb96c470b,0xb99340ca,0xb9f18912,0xb8ab5dd6,0xb9957595,0xb9f19088,0xba540d6d,0xba7f7410,0xba9a0292,0xbab5e34d,0xbad387ef,0xbaf6a399,0xbacdbfe7,0xbace54ef,0xbb0332c3,0xbaf7c7c8,0xbaf9c9b1,0xbafaaac2,0xbaffcd86,0xbb025752,0xbb043fdb,0xbb0575a6,0xbb0519fd,0xbb08c6b1,0xbaf3d797, -0xbadcb91f,0xbac5022e,0xbaa1cdac,0xba83694e,0xba4f86e1,0xba331423,0xba196d43,0xba005b8d,0xb9be4c96,0xbafe001f,0x39cce459,0x3a0c3ae6,0x3a2041ea,0x39eac92b,0x39c049c0,0x3900a0a3,0x39ae356a,0x394a0de9,0xba103eae,0xb96aeeb1,0xb9be1463,0xba3a7f4e,0xb9a7554a,0xb926cc08,0xb9ae1ddd, -0x38bd895e,0x3938c500,0x39a072fe,0x39a51df5,0x39b5b4ca,0x39c5e465,0x39ec2e89,0x3a14f796,0x3a4e548d,0x3a668108,0x3a5d165b,0x3a00747a,0x3a2549e1,0x3a2ac54c,0x3a8c108d,0x39aab44d,0x39494a5d,0x38c7e6ae,0x3a35b7f5,0x3a5efafd,0x3a6a6a60,0x3a2245b1,0x39a80783,0x3a013646,0xb5613001, -0xb9c408de,0xba97155d,0xb982fada,0xb9f402fe,0xbb090132,0xba58640e,0xba1b6efa,0xbaa9c57a,0xb9c318ab,0xb9f20f28,0xbaa4f21d,0xb93ad846,0x3927a8d9,0x39a81926,0x3a31d6b1,0x3a744f9e,0x3a9ef952,0x3ac2ca4d,0x3afac4aa,0x3b1b2892,0x3b2b4dcb,0x3b0e7b03,0x3a580433,0x3a5fb30c,0x3a81c831, -0x3b1597fc,0x3a04e2b5,0x38b671d3,0xb80bcc79,0x3ac9380d,0x3b058768,0x3ae06fab,0x3a5d0607,0x3a8f798e,0x3ad79a43,0x39c0cd3f,0xb8342fc4,0xbaae2e9e,0x38796e3f,0xba0c68fa,0xbb98d556,0xbb53c601,0xbb8925f1,0xbbbbf248,0xbb617e84,0xbb1b6b91,0xbb6c819f,0xba1cc812,0xba31e4e6,0xba2b4212, -0x38cbf356,0x39cb0ec9,0x3a6b09d7,0x3a9d20d8,0x3af8ac93,0x3b429d2f,0x3b6f1bae,0x3b59aec2,0x3aaca1e5,0x3b0261f6,0x3b02332f,0x3b8acf31,0x3865e078,0xb9f8a82c,0xb9c44981,0x3b365a68,0x3b692597,0x3b463eaa,0x3af9bc7d,0xba383662,0x3900540d,0xbad8095a,0xbb25c3ee,0xbb922fe5,0xbaefaada, -0xbb5629ef,0xbbef5d84,0xbbb5c3be,0xbbb5057a,0xbb551dc9,0xbb355ac5,0xbb22fe20,0xbb7b0884,0xb950be82,0x3838f4b3,0xb79a11f2,0x3b0d85a9,0x3b3ff660,0x3b7f8649,0x3b98a03f,0x3bc4b004,0x3bf8344e,0x3c05f601,0x3bcb71a7,0x3af09e48,0x3abe5d06,0x3b2c0857,0x3bdf6592,0x3a8e63e7,0xba2ce65f, -0xb93fdd3c,0x3b94943a,0x3bc56b73,0x3b8dbaf3,0x3aa75a12,0x3c344246,0x3c061696,0x3bfccd52,0x3be1ec4e,0x3bacd2e2,0x3be12c25,0x3bf0e08c,0x3bd7d282,0x3b8f7cf8,0x3ae05ee8,0x3aa765f9,0x3a1c4c7b,0x39c8f83b,0x3ad84a94,0x38bc3b27,0xbb008be1,0xbbf2a3da,0xbc03c3af,0xbc1701a8,0xbc1f05d7, -0xbc20a564,0xbc22e8a6,0xbc30a26d,0xbbeeb090,0xbb57d5c5,0x3ae2f888,0x3b9c131b,0x3b511070,0xbaf81bfc,0xbae32f8b,0xbaaf4d12,0xba29d451,0x39c796c9,0x3adb15e3,0x3b097cf9,0x3c0f1a02,0xbb828459,0xbb3a5f01,0xba938ff0,0x3aa572f0,0x3b89e7d7,0xbbad6534,0xbc0c6f0e,0xbba6ba44,0xbb0571aa, -0xba1ea685,0xba2c984d,0xb90f9fe4,0xba08d421,0xbb009e9a,0xb917f76d,0x3aadb98d,0x3ace1b06,0x3a85a02f,0x3b0bc07c,0x3ba4175f,0x3bc9ce75,0x3beb9488,0x3bd461a3,0x3bb5a6df,0x3a81564f,0xbba6396b,0xbc216323,0xbc1910bc,0xbb33938b,0x3b905b25,0x3baccc35,0x3b1725e1,0xbbb07950,0xbc1ad2b9, -0xbbe62ac7,0xbbb452d9,0xbc041231,0xbabf75a3,0xbbe4dd69,0xbbf1660d,0xbc06bfc8,0x3992b83b,0x3a730d0e,0xbb0457c8,0x3a8bab31,0x39a6592f,0x39b29287,0x386b6253,0x39d04dfa,0x39c1d723,0xba8df8e3,0xbb1f653f,0xbb37cdb7,0xbb04c01e,0xbb0c760f,0xbb77215e,0xbb5847fe,0xbb753c54,0xbb9e0cf9, -0xbb8b840d,0xbb4a50ff,0xbb21b90f,0x3baca9da,0x3bd17be8,0x3b3fbeb2,0xbc15f504,0xbc1840c1,0x3b311c16,0x3b978666,0x3c0ab556,0x3c789f18,0xbb47daaa,0x3bffd755,0x3bfe124a,0xbba014c4,0xbbda75e4,0xbb3fce8e,0xbae00a00,0xba68dadd,0xb8d37338,0x3825485a,0xb9df47a4,0xb93bfc57,0xb8d81290, -0xb91401c1,0xba10dfa9,0xb34afa6d,0x3a8e2064,0x3b3f14e8,0x3b46e5db,0x3b5402ca,0x3b6026de,0x3b81910d,0x3b61fe26,0x3b189792,0x3af9f885,0x3a768180,0xba7ed1d8,0xbad2b363,0xbb13cc46,0xb9d108d8,0xba8f9452,0x3af009a9,0x3bcb41bc,0x3c18d26b,0x3bfb1c0d,0x3a9716f7,0x3ba897e1,0x3b808089, -0x3b5cd68c,0x3b7cb92b,0x3b4210cb,0x3b179e04,0x3a1f8ce3,0xb94b3812,0xba74e375,0x38d9927b,0x399cac1f,0x39c4e513,0x3921345d,0xb8dd8da9,0xb89c15b8,0x3a26b6d3,0x3a77bd49,0x3ab2ef9c,0xb83ace8c,0xbaa2e148,0xbae84e77,0xbabf73ac,0xba91266b,0xb9e0363c,0x397b7634,0x3a63022b,0x3acb99a5, -0x3a52bd03,0xb7944331,0xba6256c9,0xbb40b968,0xbb8ae445,0xbba4393b,0xbb96a2d7,0xbb17e3f0,0x38975daa,0x3b7ae65a,0xbb82f5ec,0xbba8a5ca,0xbb9a1ed6,0xbb7efc1c,0xbb3c1d39,0xbb058ad2,0xbaa8993e,0xba8f48c5,0xba3d86fb,0xba60f5a2,0xba80be6f,0xba693b43,0xb95f02b3,0x3a691c44,0x3a8e9936, -0x3a13ab4f,0xba3a1562,0xbb0e1550,0xbb3c73b7,0xbb32b548,0xbb0bf7d1,0xba9524da,0x398af58c,0x3b195ed1,0x3b804016,0x3ba0a04a,0x3bc16774,0x3bcb32b5,0x3bc30060,0x3b969414,0x3b1f0f3e,0xba17909f,0xbb0ce814,0xbb54e8fe,0xbb7ac0ae,0xbb834f41,0x3aa0ba0c,0x3ae319c5,0x3b156b4f,0x3b08e096, -0x3b155f8a,0x3b083995,0x3ad3b1be,0x3a9af74a,0x3b07bf14,0x3b3e4585,0x3b7b0014,0x3b774029,0x3b713604,0x3b756274,0x3b066100,0x3a67d854,0xb989538b,0xb9a8d061,0xba0d6927,0xba8033b2,0xba751689,0xba8b5e15,0xbaaa1e4c,0xba92d767,0xba71376d,0xba49684e,0x39ad8245,0x3aabfd69,0x3b1fee57, -0x3b3217aa,0x3b4f33da,0x3b6955c4,0x3b46cada,0x3b1f0fe8,0x3ade180c,0x3ac4bd52,0x3b553015,0x3b663d92,0x3b465314,0x3b3c4a9d,0x3b295eef,0x3b1a295d,0x3b1e104a,0x3b180fa0,0x3afbbaba,0x3aa67983,0x3a30a4d0,0x398a3141,0xb9258b40,0xb9ff88ac,0xba59afe6,0xba6229e4,0xba93ef7e,0xbac38662, -0xbb05c37b,0xbb090adb,0xbafc3106,0xbaedfb45,0xbada148d,0xbad58837,0xbad132fa,0xbadb438b,0xba956a0f,0xba3f6ae6,0xb9829a89,0x392b8bb3,0x3a24518d,0x3aa37849,0x3ac4e59e,0x3b00abca,0x3b1dd344,0x3b3d2672,0x392b49b8,0x39e763fc,0x39316c34,0x390f004a,0xb8266328,0x39a8c520,0x38b54d7b, -0xb90453dd,0xb9d8869f,0xba10c948,0xba3d79bb,0xba67a179,0xba8c1962,0xbaa5b495,0xba8143b9,0xba8201d6,0xbad5b0b0,0xbac2e554,0xbac72b8c,0xbac3d49e,0xbacb4b7f,0xbacfc0fc,0xbad40cba,0xbad6af1b,0xbad59f81,0xbade515c,0xbabdd5de,0xbaa593bf,0xba8ca6a6,0xba52d8fd,0xba16c0be,0xb9b768d2, -0xb979289f,0xb901e11c,0xb7bf7db3,0x385a960b,0xbabbeeeb,0x396d43ab,0x39c5eac4,0x39f87210,0x39a88fcd,0x398d7802,0x3847b1f7,0x397b8dcd,0x390dd83b,0xba28c4fe,0xb94f6d37,0xb9a9afe1,0xba4b1850,0xb9b306db,0xb944005c,0xb9b5963c,0xb887fd73,0xb774739c,0x398c7981,0x3957b3f1,0x3969a92e, -0x398a1189,0x39ad153c,0x39e29e35,0x3a279846,0x3a337fd3,0x3a28713f,0x39b024f1,0x39e238bb,0x39ece23f,0x3a77eab4,0x391613fb,0x372425e8,0xb8a020b8,0x3a0a5b68,0x3a321ed6,0x3a2a1e84,0x39e6f87f,0x38ea32c9,0x39c2e3ea,0xb8f558af,0xba08e155,0xbaa3583a,0xb95fc46f,0xb9b3a46d,0xbb073a59, -0xba15a4e3,0xb9b7b73d,0xbaaa52b6,0xb99de01b,0xb9f690ec,0xbaa22393,0xb9fb799c,0xb964ed0c,0x39454be1,0x39d6f27e,0x3a4ddd5a,0x3a9479a6,0x3ab323b5,0x3ae3abae,0x3b09fa2b,0x3b0d8451,0x3ad9c14c,0x39f35489,0x39c73e73,0x3a24bcca,0x3b0edda4,0x3985123e,0xb9444b11,0xb9834af0,0x3aaab67e, -0x3ae37eda,0x3aa205a7,0x3a0dcbeb,0x3a63570d,0x3ad2741c,0x39801293,0xb92aa9ed,0xbac3e5ea,0x39521922,0xb9c4c43c,0xbba03a2f,0xbb394186,0xbb70886d,0xbbc3d54f,0xbb554fb8,0xbb1afe79,0xbb63dcb8,0xba931c41,0xba9d71d3,0xba233468,0xb9710cd7,0x39840f18,0x3a820e7b,0x3a96d7ad,0x3aedbfd3, -0x3b343cac,0x3b4f65e6,0x3b36ecd8,0x3a81b7ae,0x3abbc79b,0x3abde96f,0x3b867cf3,0xb9a3cc46,0xba4ea939,0xba239004,0x3b23d9fd,0x3b527d73,0x3b1aee8e,0x3ace4c05,0xba80b4f2,0x37bb6034,0xbae53ab4,0xbb313eab,0xbba12cb1,0xbabca8ef,0xbb2380fb,0xbbdcde89,0xbb864001,0xbb821748,0xbb18d75f, -0xbaea858b,0xbafa0375,0xbb6dced7,0xba75c049,0xba840e59,0xba1a6dd6,0x3ac78a4d,0x3b2728e9,0x3b84bd9b,0x3b974f8c,0x3bbe820c,0x3be4c1c4,0x3be698ef,0x3b9cf42b,0x3a3e730e,0x38f6a0fc,0x3af62793,0x3bdd871a,0x3a3920a7,0xba9bf3a3,0xba0fa95d,0x3b86e4cd,0x3bad54ef,0x3b434c13,0x3a0f84cc, -0x3c3607b0,0x3c0e572f,0x3bffceb5,0x3be76929,0x3bc79236,0x3bdef901,0x3bce61f2,0x3b99ac99,0x3b6d15f2,0x3ac4ac5a,0x3a9fe0b4,0x3a2e7d41,0x3a3f7d19,0x3a7c7f47,0x3a8ed43d,0xb9be7313,0xbbdf53a1,0xbbfb2083,0xbc12dea0,0xbc1a14fd,0xbc21ffaf,0xbc24040c,0xbc22e45b,0xbbd1f624,0xbaf20d7f, -0x3b90aa18,0x3ba2cd67,0x3b10dd47,0xbb34fa61,0xbb211306,0xbabb60b1,0x39d4e08a,0x38e6efe1,0x3aed6a6d,0x3b8529f2,0x3c195f97,0xbb6e71ad,0xbb314ebb,0xbb1b76ca,0xb8e33d51,0x3b7c8504,0xbb828bb0,0xbbd5c680,0xbb6f57b8,0xba9f788a,0xba3e98b7,0xba13dfa3,0xb9c43ed0,0xb988335f,0xbab648c2, -0xb9d79ba4,0x3a590ada,0x3aa5106f,0x39dedcf3,0x3ab72e11,0x3b84e856,0x3bbdd9ec,0x3be1e315,0x3bc3fc87,0x3b7265c6,0xba760023,0xbbc3777c,0xbc293911,0xbc0c505c,0xba35b30e,0x3b9a2873,0x3b95ebda,0x3b0aba79,0xbbc5735c,0xbc1e76f9,0xbbd4e62c,0xbbabe753,0xbbd026d6,0x3b06fc4c,0xbb8c4b96, -0xbbb7b429,0xbc0e298d,0x3a504288,0x3ab458c2,0xba779b21,0x3a9a67a1,0x39311b4b,0x39dc6748,0x392b4463,0x397629f8,0x3a0879cc,0xba0c511e,0xbaea7727,0xbb2125d4,0xbae1d4fe,0xbaf4a147,0xbb5b4ac0,0xbb561f59,0xbb78774e,0xbb8c4026,0xbb71d87e,0xbb10ab75,0xba817dc1,0x3be04d52,0x3bd7a2da, -0x39703b57,0xbc14ff38,0xbc00ff2e,0x3b90af10,0x3bb609af,0x3c0e8dff,0x3c6f3c0d,0xbb054df0,0x3bd85e20,0x3c43449d,0xbbd24ea5,0xbc38219d,0xbbf1bd41,0xbb146738,0xba336ce3,0xba081a6e,0xb8eba75f,0xb9d2e2d3,0xb95d13c6,0xb9633eb9,0xb91b27cf,0xb99d414e,0xb8c18b70,0x3a2dcab0,0x3b294187, -0x3b45de5a,0x3b5d601f,0x3b726289,0x3b7b8b75,0x3b440080,0x3ac4816d,0x3a384dc7,0x386a7cc3,0xba909582,0xbb00c83d,0xbb201deb,0xba5e1c32,0xba349811,0x3b431792,0x3c15061e,0x3c0611a0,0x3b83b0f0,0xbb5cb2aa,0x3aee680f,0x3b6e976e,0x3b820849,0x3bbb3bc1,0x3bb47a89,0x3b75aa80,0x3a61d5c4, -0xb9bca3de,0xba234448,0x399a503c,0x39b8686b,0x39d1fb03,0x39b0987f,0x39328cd8,0x3846b511,0x3a2d5fdd,0x3aa128c0,0x3b08f17d,0x3a948228,0x38768a2f,0xba3268a9,0xba20e152,0xb9c184f2,0x39896f9d,0x3a006283,0x3a2d6a82,0x3a81866a,0xb963e708,0xba9c1c6e,0xbb070d38,0xbb821e01,0xbba8c0e2, -0xbbb89661,0xbb95947a,0xbacc6341,0x3a548fe9,0x3b7e1b02,0xbb2dc732,0xbb85a6ae,0xbb8909b0,0xbb81f197,0xbb4cbae1,0xbb1764ee,0xbac7df6c,0xbaab3491,0xba4cf1cc,0xba516aa2,0xba77d941,0xba8807ff,0xba244b45,0x39a2a2eb,0x3a66d78b,0x3a275368,0xb9cfe1ed,0xbaf30256,0xbb296f29,0xbb24303f, -0xbb11a4a7,0xbac987fc,0xb9aba2b4,0x3ad67d0c,0x3b4ac242,0x3b818fb9,0x3b9734a8,0x3b98d86d,0x3b88af39,0x3b4e4f32,0x3a9f07c3,0xbae8108e,0xbb53e1b0,0xbb875498,0xbb809389,0xbb56ce41,0xba442397,0xb9472370,0x3a1cf353,0x3a2fdef1,0x3a827a04,0x3a60e601,0x3a089a5f,0x39007d78,0x3a98057a, -0x3b03e1da,0x3b483f39,0x3b4d4768,0x3b61fd09,0x3b733c8c,0x3b17025c,0x3aa21e39,0x39cb06dc,0x3906c4a0,0xb98be749,0xba71a865,0xba37213b,0xba2a2d58,0xba4279ae,0xba0898b1,0xb98e17bd,0xb70a1196,0x3a5d4693,0x3ad2358f,0x3b204046,0x3b1e56d5,0x3b253fe4,0x3b2ebcb4,0x3afc2b12,0x3a8aa518, -0xb90abd77,0xb9c855e4,0x3b6b3550,0x3b7978a0,0x3b69f696,0x3b50f468,0x3b44355a,0x3b358778,0x3b38b07c,0x3b37eb04,0x3b23accb,0x3b05d748,0x3ad7932a,0x3aad4c75,0x3a7d7149,0x3a447d73,0x3968f02d,0x38720e71,0xb9aecf13,0xba54d6d3,0xbabeaf87,0xbacdd5db,0xbab93132,0xbab34fb1,0xbaa33a8b, -0xbaa04d08,0xba9dea93,0xbaa7f95f,0xba3e1e33,0xb997cd92,0x39649827,0x3a34968f,0x3a9d6a78,0x3aee0988,0x3b0232e5,0x3b1bb792,0x3b341976,0x3b546955,0x3a005a5d,0x3a30cf0e,0x3a041c4c,0x3a07350b,0x39c91f95,0x3a24db5b,0x39ddf1ac,0x3973eb84,0x3831f914,0xb873ef4e,0xb94eade8,0xb99474eb, -0xb9d5b472,0xba0306eb,0xb9a3b4af,0xb9b47cf3,0xba8a4c26,0xba7102ac,0xba810e31,0xba7c0e4d,0xba855e02,0xba88763d,0xba8c01fc,0xba8e3740,0xba8cc7a8,0xba95ce6b,0xba6be6be,0xba3e0e91,0xba10a8eb,0xb9a5ed30,0xb9002df0,0x38befcec,0x3942eb98,0x399ceddb,0x39d38980,0x39dcc236,0xba588a8e, -0x3990816a,0x39e03a99,0x3a1a6b95,0x398623bb,0x38f53f63,0xb92ef601,0x39825200,0x381a2e15,0xba578f56,0xb9ab6772,0xb9e3a3c6,0xba6b82eb,0xba02b9f0,0xb9c10954,0xb9f92dc9,0xb9859ed0,0xb8f1d888,0x38a8331d,0x387a4565,0x3916c579,0x39ba6b34,0x39c5cd3b,0x39fc39f5,0x3a361506,0x3a3096be, -0x3a249d58,0x39cc6686,0x39e2af77,0x39eeec33,0x3a84f654,0x3944ab0d,0x3889bbae,0x370c19fa,0x3a1b907f,0x3a40c96d,0x3a255dd2,0x3a00f7fb,0x395763b4,0x39fedbb8,0xb99417b1,0xb9ee1c59,0xba9c1e24,0xb9104722,0xb910c42f,0xbaf3c70c,0xb97a2baa,0xb8a97fea,0xbaa6b881,0xb980bdc4,0xb9e33c01, -0xba880bfc,0xba36c439,0xb9fa477a,0x39414aa1,0x397c7af0,0x3a0e7421,0x3a9207b2,0x3ab242ef,0x3adcb9b3,0x3b051844,0x3af1c080,0x3aac11c5,0x39b0639f,0x3920be6c,0x3a04baef,0x3b13bc6f,0x3992d6e5,0xb90bf9a2,0xb8c2c1e4,0x3ab6e325,0x3ae34f25,0x3a8a8245,0x3a0e0458,0x3a82d465,0x3ae10528, -0x394c0f36,0xb9405aa3,0xbac7497a,0x39a704f6,0xb97ff3ba,0xbb9a6f40,0xbb1ec511,0xbb48bad8,0xbbbe3b4e,0xbb3f7afa,0xbb1acc4e,0xbb4908d8,0xbad6b0fb,0xbad92072,0xb9d9456a,0xb9f8f558,0x38eec54d,0x3a86f105,0x3a9dafe7,0x3af09586,0x3b34aba0,0x3b374080,0x3b1d3094,0x3a7063dd,0x3a962aab, -0x3a9b7f2f,0x3b87f3f1,0xb9a09f72,0xba2e9c78,0xb9b58693,0x3b2c133b,0x3b552bbc,0x3b0a51a9,0x3ad3729c,0xba41aff4,0x38e8f644,0xbadf6e44,0xbb2d81bc,0xbba0cdc4,0xba8d337a,0xbae55178,0xbbb7a87c,0xbb309761,0xbb215d2a,0xbaabd9af,0xba72f0c8,0xbaa02c8e,0xbb469659,0xbabfc0e1,0xbaf426fa, -0xba7620ce,0x3a62b015,0x3b0299ac,0x3b7df424,0x3b916215,0x3bb5d3c5,0x3bd502b7,0x3bbfb68f,0x3b5fe1d6,0xb902bf6e,0xba62c335,0x3ab5d0ee,0x3bdcc186,0x3a37be9a,0xba9604e8,0xb92eda46,0x3b8ccccd,0x3ba588db,0x3b0d0e95,0x39a58430,0x3c39084d,0x3c11a9ec,0x3bf5aaae,0x3be28109,0x3bd4d0a5, -0x3bd02730,0x3ba4eed1,0x3b3b7259,0x3b2d21f8,0x3a64b237,0x3a79523c,0x39ed1bf1,0x3a4eb523,0x39f0dbca,0x3adf3b0d,0x3a868338,0xbbbbd947,0xbbe184f1,0xbc06af97,0xbc0c15f0,0xbc18cd57,0xbc1a16c0,0xbc083339,0xbba011f3,0x395027b4,0x3bf06ecc,0x3bc67cba,0x3b168129,0xbb3cb983,0xbb1aace1, -0xba7a0678,0x3acdad95,0x392b52ad,0x3b1892cf,0x3bd397e7,0x3c277d30,0xbb314e06,0xbb07ad29,0xbb47d08a,0xba85e8b3,0x3b543174,0xbb3a48a3,0xbb972913,0xbb053adf,0xba34c934,0xba214811,0xb9c65580,0xb9cbd557,0xb9267134,0xba53c303,0xba228833,0x39adfb0d,0x3a81cf41,0xb8d80a52,0x3a17da22, -0x3b42c17c,0x3baab08b,0x3bd1bbfc,0x3bb741ea,0x3b1aa343,0xbb0cea15,0xbbd079a7,0xbc26b1cb,0xbbeb7811,0x3ae19ef7,0x3ba6796c,0x3b86aca4,0x3b19235f,0xbbc710e7,0xbc16fcf5,0xbbb5b095,0xbb9598d9,0xbb54a75d,0x3baf8f9f,0xbb0159b5,0xbb8313d3,0xbbff11ef,0x3a68828a,0x3aa5e30d,0x378d62c2, -0x3a3dd5b7,0x392a0551,0x39a6ed4d,0x394fba15,0x390aa4a1,0x39e3eafc,0xb876cfd9,0xba87388d,0xbaff8be3,0xba8f4103,0xba9bd49c,0xbb191cec,0xbb2ce955,0xbb5d8494,0xbb58383e,0xbb33a01c,0xba427a44,0x3ad00125,0x3c0d6ec6,0x3be4814b,0xbad12f4b,0xbc0359e1,0xbbb9abb8,0x3bd0c23d,0x3beb0d28, -0x3c1f3d85,0x3c64f2f6,0x38d0b398,0x3b8ad96a,0x3c5f2b2f,0xbbe468c8,0xbc663af1,0xbc3339fd,0xbb221a73,0xb9e9c113,0xba0abc25,0xb8db1a0a,0xb9a6b84c,0xb9512ce7,0xb972d5d1,0xb92d12d1,0xb93a536e,0xb94003f3,0x397a56d6,0x3b05c61e,0x3b43f2fd,0x3b5c5dfc,0x3b80ab6f,0x3b76ebd8,0x3b2db92b, -0x3a880c4e,0xb8beb6c4,0xba1285c7,0xba819ac4,0xbae9a5fd,0xbb008733,0xba6da51f,0x3a5432b2,0x3ba08ce1,0x3c411b9e,0x3bcc6430,0xb91760ea,0xbbe279ae,0xbae1e3e4,0x3b8b9985,0x3bbb2872,0x3c01cc6e,0x3c07117d,0x3ba15950,0x3a9be3c3,0xb9aefa2e,0xb98efa40,0x39c63e0b,0x399461df,0x39c1f6b1, -0x39c2796f,0x399892d1,0x39013152,0x3a288790,0x3ab37882,0x3b28843f,0x3b15c070,0x3aabdbc7,0x3a23e7a3,0x39ffd2f1,0x3a0a62a1,0x3a8c723b,0x3a8bd592,0x3a7bb70f,0x3a8982a5,0xba0f84cb,0xbacfdb1b,0xbb19a831,0xbb87c825,0xbbad526f,0xbbb2756c,0xbb76560b,0xb9b14bcb,0x3aff2d4f,0x3b8756cc, -0xba80323c,0xbb227da1,0xbb5fe3eb,0xbb6eb245,0xbb4e4227,0xbb1e9745,0xbacc84a7,0xbaabb72f,0xba30aa6e,0xba2a3a5d,0xba51fb26,0xba82be93,0xba4e79fc,0xb914c128,0x3a24a9f6,0x3a2c052f,0xb79d7e11,0xbabdad20,0xbb104136,0xbb09218a,0xbb005872,0xbad1a54d,0xba2f4e06,0x3a8ee0cf,0x3b19f153, -0x3b47dbdd,0x3b5fea96,0x3b59c12c,0x3b3500f6,0x3b0ff037,0x3a4027ee,0xbb001e0b,0xbb53835f,0xbb817a60,0xbb4fceda,0xbb05f879,0xbb018aff,0xbad1232e,0xba4a4f13,0xb9be9479,0x37ec290b,0xb7d300cd,0xb98518d7,0xba0e55ca,0x39ea2478,0x3aa92a46,0x3b10db52,0x3b1f79e6,0x3b3bced4,0x3b5757b9, -0x3b1708f6,0x3ac57cac,0x3a78d059,0x3a1319e3,0x3717df3c,0xba2dabbb,0xb939a5a7,0xb69cc334,0x38c164b9,0x39d65e8d,0x3a4ae9d3,0x3a9c8ab3,0x3aea56ad,0x3b16c5b1,0x3b3969ac,0x3b1f1c6d,0x3b0a5dd3,0x3afc4743,0x3a8c2ef7,0x387ff73d,0xbab5acb6,0xbad71842,0x3b719cba,0x3b7b58ec,0x3b67e533, -0x3b55b151,0x3b484538,0x3b3c5996,0x3b44979a,0x3b469d76,0x3b400bbb,0x3b2ecbd8,0x3b1fe9a0,0x3b18b3f9,0x3b0c30c4,0x3b0615f1,0x3aa9c57c,0x3a87cc4e,0x3a1a4bed,0x385b2ad0,0xba56e2bf,0xba3b438b,0xba11e211,0xba17a25c,0xb9ff2a05,0xb9fc3dce,0xb9fcb749,0xba105bad,0xb7a9991d,0x39d1ad58, -0x3a6aa971,0x3ab5b06c,0x3afb04b0,0x3b213aaf,0x3b251246,0x3b35afbd,0x3b45124f,0x3b5fb2b7,0x3a864f3d,0x3a986c11,0x3a630c54,0x3a4e00bd,0x3a161b76,0x3a86682f,0x3a2ff3b8,0x39bf5fb2,0x39902e3f,0x396f9d70,0x392b4216,0x38f9d5c7,0x3846d28a,0x389b59dd,0x39a83f81,0x39e8b4a7,0xba193573, -0xb9a0eb8a,0xb9908ebf,0xb74682aa,0xb906523b,0xb9017fed,0xb91144a4,0xb91bcb54,0xb90bffb7,0xb94fee38,0x379975e5,0x392de838,0x399dbbe1,0x39fc8f4a,0x3a235a6d,0x3a552c29,0x3a641777,0x3a7d01ed,0x3a8ab1db,0x3a85f58f,0x393279b9,0x395958d0,0x39c685d4,0x39f9be26,0x39c2cb16,0x39a30aa1, -0x3889d866,0x399d8684,0x3981efbd,0xba02c63e,0xb739c843,0xb8c690d6,0xba0baf6b,0xb93e56ca,0xb8e7b1bf,0xb9224d42,0xb8ff4631,0xb8d8683d,0x39afaf1f,0x3973242a,0x397f02d5,0x3971099d,0x39a37349,0x39d1ffa9,0x3a239709,0x3a0a95c0,0x39fc507e,0x39a62a87,0x39a84c5a,0x39b622ab,0x3a754535, -0x38ece41f,0x366b493d,0xb7c2d594,0x3a0b0407,0x3a2eab75,0x3a0666bb,0x39e0eb71,0x393afeaf,0x3a00f7f4,0xb6c7bc7e,0xb9c834f7,0xba75350b,0x3826e326,0x38295e8d,0xbacefd45,0xb84ec74b,0x38904cfb,0xbaa18e48,0xb9cae749,0xba01cb4e,0xba481ccf,0xba5261c3,0xba20b463,0x39a03631,0x390fbee3, -0x3a1a10df,0x3a71e8a5,0x3a965f09,0x3abd8a30,0x3ae8b33f,0x3aaf0bf6,0x3a4f99ae,0x38a65ad5,0xb8fcb64a,0x39a6c37b,0x3b0b5ba9,0x392e3c02,0xb960a5bf,0xb890cd2d,0x3aad8bf5,0x3aced674,0x3a4cbf92,0x39e9cb9c,0x3a798c41,0x3adffe51,0x39bcb419,0xb8e85506,0xbaaf5084,0x39edbbf8,0xb8894ee8, -0xbb85ef91,0xbaf96d50,0xbb20a4a4,0xbb9fada6,0xbb21888b,0xbb1383ef,0xbb2063be,0xbb0092e1,0xbb0524ff,0xb8bdb0bc,0xba128d24,0x38e004be,0x3a6872f3,0x3a85dc37,0x3ad9beba,0x3b2920e7,0x3b0fa387,0x3ae9d0fa,0x3a338fb5,0x3a53f5ae,0x3a64126e,0x3b802ea6,0xb9dde9b4,0xba33360e,0xb94d4f4d, -0x3b271735,0x3b4c28f7,0x3aebce0a,0x3ace5f41,0xba272232,0x3981ec8f,0xbaac2f65,0xbb1f784e,0xbb9339a6,0xba2f0a42,0xba8dc8eb,0xbb884adf,0xbacd1815,0xba9883e5,0xba351826,0xba0193ee,0xba1a3c27,0xbb10dfc8,0xbadefc67,0xbb1e9f8a,0xba8168a2,0x398ce409,0x3ac53120,0x3b5a1608,0x3b7d2fe2, -0x3ba160f9,0x3bbb6675,0x3b8c9fe5,0x3ae6bbb5,0xba899362,0xbad5eba0,0x3a7c4f7d,0x3bcf1ec8,0x3a066787,0xba9e629f,0x38cf9057,0x3b8b4c68,0x3b974e2a,0x3aaabaaa,0x38b11336,0x3c32847e,0x3c0b6745,0x3beb3383,0x3bd84379,0x3bd3ddb5,0x3bb7d7a7,0x3b6b1a4c,0x3acb8a30,0x3acca938,0x39a5771f, -0x3a2bbbf8,0x394417e5,0x3a2a8081,0x39218bf1,0x3af8beb0,0x3b00c56e,0xbb893497,0xbbc067cf,0xbbe8bc48,0xbbf3a6ab,0xbc0b9122,0xbc0a17ac,0xbbd4b2f0,0xbb4fe608,0x3b10f211,0x3c1d7010,0x3be09c9c,0x3b160e9a,0xbb406cbb,0xbb18988e,0xba4ad248,0x3b063f3a,0xb8cacabe,0x3b27c957,0x3c0939b5, -0x3c3082e6,0xbb043577,0xba89b6eb,0xbb369fe6,0xbab8cb32,0x3b21b0d0,0xbaf6ae1d,0xbb3c43fa,0xba3f2295,0xba07e62c,0xb9a8cf78,0xb97e63ae,0xb97d34a1,0xb92ff59e,0xb9bb70dc,0xba357524,0xb907fe24,0x3a65abf4,0xb9f33ebc,0xb858b310,0x3aeccd47,0x3b89a57e,0x3bb55827,0x3ba07a3a,0x3a9a370a, -0xbb4e85e5,0xbbe1178c,0xbc1f6fcb,0xbbb6ee17,0x3b807064,0x3ba6d38c,0x3b58d6a8,0x3b058e0a,0xbbd34bdc,0xbc136e99,0xbba3b3a5,0xbb858426,0xba2d6815,0x3c045509,0x3a5fe0e0,0xbb105e46,0xbbbbac63,0x3a222eb0,0x3a8852b7,0x3989ddff,0x39a281b0,0x39343240,0x392f3a43,0x3932552d,0x38d666c7, -0x39860946,0x397f63f8,0xb9af604d,0xbaa216f3,0xb99171e7,0xb9294a9d,0xba8830bb,0xbb063644,0xbb434070,0xbb273931,0xbb1257a4,0x397179e3,0x3b79f3d4,0x3c18534f,0x3bd2f851,0xbb5a164d,0xbbd79afc,0xbb5b6c68,0x3bfaa8cf,0x3c060535,0x3c228e24,0x3c3e58e6,0x3abb20d1,0xba4c4305,0x3c3c40af, -0xbbd2e2ef,0xbc73cbdd,0xbc4dcec8,0xbb256dbd,0xb986dc6b,0xb9b1b77c,0xb8ea76af,0xb94aa0bd,0xb91c626e,0xb941346a,0xb9235d61,0xb91554d9,0xb9806679,0xb8a45308,0x3abcc358,0x3b3be703,0x3b63c47b,0x3b8170d6,0x3b5ab2ed,0x3b09554b,0x39d8497a,0xba7f1d55,0xbac8eb28,0xbac4b4f0,0xbb076c65, -0xbaec6b43,0xbaae010c,0x3b223526,0x3bd67e5e,0x3c4ff061,0x3b3cc4a4,0xbba41e29,0xbc291274,0xbbcafd6a,0x3b8b6159,0x3bfa7076,0x3c2e7882,0x3c31d03e,0x3bb7c9ed,0x3adf60c5,0xb94305b6,0x389b4d26,0x3994ab76,0x39411361,0x3993ce12,0x39a5aa7f,0x39939ea0,0x39200c91,0x3a1845d7,0x3abc936e, -0x3b3b0892,0x3b5c963b,0x3b330a11,0x3aff172b,0x3ac15b2f,0x3aac68f6,0x3ad0ff25,0x3ac0f2ba,0x3a9386a9,0x3a6e0b84,0xba819c87,0xbb07ed71,0xbb3288e5,0xbb8a673f,0xbbab7d7b,0xbba5bd16,0xbb4271a2,0x39a2ee43,0x3b0d8178,0x3b5d1eda,0x38fc9f2c,0xba8a3cd7,0xbb09c957,0xbb35598a,0xbb2c2e5a, -0xbb0542b8,0xbaafc044,0xba8cbd59,0xb9e8ac4a,0xb9e29730,0xba1ba845,0xba4c2625,0xba3c9ce2,0xb9be9b52,0x39e5868c,0x3a3d05ec,0x39efdfa9,0xba5e8b13,0xbac8ff53,0xbacc3f8c,0xbad74d47,0xbac801d9,0xba839124,0x39c3c47c,0x3aaa47a4,0x3aec4fb0,0x3b05081d,0x3b034762,0x3ad5e25b,0x3ac6ffb1, -0x3a0f6f50,0xbae1e94f,0xbb2d44c9,0xbb514537,0xbb0f43ab,0xba750f5a,0xbb2f2453,0xbb1c0f63,0xbac530ac,0xba8964dc,0xba152556,0xba159fcf,0xba25d2c1,0xba4c5dfd,0x38e2c3aa,0x3a44a70d,0x3ad00057,0x3ae1c7fd,0x3b14e9ac,0x3b306842,0x3b1555be,0x3aed06e4,0x3ad17d97,0x3a92dbac,0x3a12c96f, -0xb9515580,0x39c239d4,0x3a3a3b94,0x3a7b653c,0x3ab766ec,0x3af5aff6,0x3b1fb49e,0x3b2f76f6,0x3b3ad0d9,0x3b43ea48,0x3b13c464,0x3ace4aad,0x3a8cd4d7,0x398b8e2c,0xba356fbc,0xbb0bc76c,0xbb182613,0x3b5bde54,0x3b626a22,0x3b6937d4,0x3b4d397a,0x3b4c0111,0x3b41fe33,0x3b48ae69,0x3b4d25d5, -0x3b4ff427,0x3b4f71e2,0x3b529e7c,0x3b5429fe,0x3b5168ee,0x3b554159,0x3b2117a4,0x3b09099f,0x3ad69911,0x3a8db7c3,0x3992c148,0x39b68673,0x39fb46a8,0x39e5e9f7,0x3a00cb93,0x3a01a057,0x39f965bf,0x39e7817b,0x3a5848f7,0x3a971d26,0x3acb3061,0x3b014739,0x3b1e8c61,0x3b3720be,0x3b343665, -0x3b3ab81c,0x3b3f8c80,0x3b52339f,0x3ac7f65b,0x3ac6c5a1,0x3ac4f319,0x3ac11c9d,0x3aa23c36,0x3ad04076,0x3ab2ddbf,0x3a89827a,0x3a8a89ba,0x3a8a8770,0x3a84eff9,0x3a898146,0x3a87e6c0,0x3a966d22,0x3ab25a56,0x3abd74f0,0x3a000e28,0x3a5528e1,0x3a57cc1d,0x3a7321d1,0x3a5db03f,0x3a63fcdd, -0x3a647830,0x3a650934,0x3a6a4ada,0x3a5efbbc,0x3a83be2f,0x3a9035e6,0x3a9969c2,0x3aa63b7d,0x3aaf3632,0x3ac0f49f,0x3ac3fd51,0x3accfed8,0x3ad6785f,0x3accd0c1,0x3a9bf367,0xb94bd8d0,0x37a56fb6,0x38e34199,0xb7a08121,0xb8193430,0xb8b5df24,0xb8e00b04,0xb883d3f3,0xba118589,0xb8e072c2, -0xb91581fe,0xb9fdf643,0xb97e6b35,0xb96d475a,0xb9360e83,0xb9fbf56f,0xba08afc7,0x397e5f1b,0xb8bdf257,0xb90e0536,0xb929a44a,0xb864a888,0x37458634,0x39764b32,0x3874064d,0x37191010,0xb8a62b56,0xb8c9d975,0xb88fead8,0x3a035237,0xb9953b2d,0xb9c89f94,0xb9c7b32b,0x39098fef,0x3987bd40, -0x3885aa30,0x3849f051,0xb92f3818,0x38efc7a3,0xb979468b,0xba25cd95,0xba8e290c,0xb93e707a,0xb92d6a97,0xbacb8aff,0xb96a30c3,0xb97f66ec,0xbac96daa,0xba79c59e,0xba79b45f,0xba46b58f,0xba9ae364,0xba85e2c3,0x38b6adf8,0xb97a39c1,0x3972b0db,0x39be9b37,0x3a246e30,0x3a5db9a8,0x3a957ca1, -0x39e11825,0xb8e13b9b,0xba0a7244,0xba2effb9,0xb9396739,0x3ac8dd48,0xb9b00861,0xba32e55c,0xb9f16f8c,0x3a519c2c,0x3a7f21a7,0x38ccf763,0xb7e478cc,0x3a2177e6,0x3aac91c2,0x38889ba3,0xb9da40f1,0xbabfbad3,0x39752c4c,0xb93b532d,0xbb61aa83,0xbad55be3,0xbafe8f00,0xbb7bfece,0xbb103848, -0xbb12b73f,0xbafe8313,0xbb19da2a,0xbb23b4c9,0xb7678c55,0xba5350aa,0xb9582f28,0x39b91899,0x3a137459,0x3a907810,0x3b03016e,0x3a921bd5,0x3a39b664,0x38560cc2,0x392f2fdd,0x39839bac,0x3b4a2da4,0xba7b1670,0xba97bca1,0xba0bd723,0x3afc4eef,0x3b1ea016,0x3a84d7e2,0x3a931635,0xba45999b, -0x37e45c71,0xbaa5acdf,0xbb1b717a,0xbb8419cd,0xba015ab3,0xba2ebed1,0xbb325861,0xba31abf2,0xb9e1a7da,0xb91874e4,0xb91a35d5,0xb96d31aa,0xbaa5e3b1,0xbadc687c,0xbb2ff095,0xba742dfd,0xb995249b,0x3a61168e,0x3b1c3ff1,0x3b428bdb,0x3b7dedee,0x3b929c5b,0x3b0ea2e7,0xb9bd9407,0xbb12506d, -0xbb1d9375,0x39b1c144,0x3baa692c,0xb91fd083,0xbae0fbd3,0xb9667c16,0x3b634658,0x3b63ecfd,0xb7f2eb54,0xba08c706,0x3c230946,0x3bed43d2,0x3bc712c8,0x3bba0bc8,0x3bb60ea8,0x3b8dd79f,0x3b0b8046,0x3a335a0c,0x3a254414,0x390eac6a,0x399b05fb,0x380fbf55,0x39e16f13,0x369bd1bc,0x3ad9e31e, -0x3b161c90,0xbb2a80a7,0xbb9d9aff,0xbbcac76d,0xbbd69b1c,0xbc00f0a4,0xbbfbad6b,0xbba8fb3f,0xbaee6edb,0x3b6a2ce6,0x3c2aac9b,0x3bd844ae,0x3ac4a95e,0xbb5d6423,0xbb4709ca,0xbac3ea73,0x3ac68b92,0xba734279,0x3b0b77f3,0x3c14c321,0x3c2b6df6,0xbaf90f47,0xba05ca9b,0xbb38a8a7,0xbaef8394, -0x3aacb65e,0xba9e7c4d,0xbab979ec,0xb9520d1b,0xb994693f,0xb9034ab8,0xb9012fc9,0xb8d8a503,0xb90dfdb1,0xb92464a0,0xba20c402,0xba07c98a,0x3a1e66b5,0xba6400c1,0xba64ddc4,0x39c4babb,0x3b357c72,0x3b87c58f,0x3b6f86c8,0xb99a57d5,0xbb980f88,0xbc088c97,0xbc25a5a3,0xbba5e960,0x3b98854f, -0x3b7188c1,0x3aa1ec4c,0x39d554bd,0xbbfdfbae,0xbc1ceb4e,0xbbb04d5d,0xbb8f69ec,0x3aa32b59,0x3c14ff19,0x3b30da3d,0xba5bc9aa,0xbb87950b,0x396e4360,0x3a2f860f,0x38e4702f,0x39213133,0x38bd8159,0x38ab34ee,0x38cb48b0,0x38a49604,0x390f57c9,0x398c1a92,0x390a0e0b,0xba430e57,0x3990c199, -0x3a0950e0,0xb7dc651d,0xbacef818,0xbb38a723,0xbb184497,0xbb0df01f,0x3a462c52,0x3bb4653e,0x3c0d3c09,0x3b9216f3,0xbbc34262,0xbbc7ec41,0xbafedbee,0x3bf7000a,0x3c0c844d,0x3c1dc538,0x3c0e699f,0x3afeb00f,0xbbbc1c57,0x3bb5b486,0xbbd9c4c3,0xbc6480ef,0xbc4f052b,0xbb24f74b,0xb9315329, -0xb91b7465,0xb8c7baab,0xb8d08396,0xb8c58165,0xb8fe76ea,0xb8f12d65,0xb8a68732,0xb994b4b8,0xb9a37da1,0x3a120183,0x3b144b36,0x3b49c459,0x3b5e4ff5,0x3b253fdb,0x3a9bf319,0xba0a3d52,0xbb0e6adb,0xbb47d42b,0xbb3af364,0xbb4ea006,0xbb1a7123,0xbb18ea22,0x3b6b9718,0x3be821da,0x3c318ce1, -0xbaaa1eba,0xbc16fcb0,0xbc438b66,0xbc1d9508,0x3b7e6d28,0x3c167e1c,0x3c483376,0x3c477450,0x3baed35e,0x3b025905,0xb88697a2,0x39388161,0x393da02e,0x38f49b02,0x393cfed1,0x395d7d96,0x396fed00,0x38e7359d,0x39bcbb63,0x3aa06b9e,0x3b28dbf7,0x3b7c501c,0x3b69ac15,0x3b2e1276,0x3b00b17f, -0x3acbc061,0x3ad30985,0x3ab41f8b,0x3a5a4970,0x3962790d,0xbaf7f01b,0xbb49aa84,0xbb732d5c,0xbba55d1f,0xbbc08543,0xbbaeb23f,0xbb473fae,0xb97ffeef,0x3ab53fd0,0x3accc3a4,0x39d4bd14,0xb9c333f6,0xbad14d69,0xbb102ce8,0xbb11a466,0xbae59936,0xba98ca8f,0xba4e1ccd,0xb98618dd,0xb967db4e, -0xb9c4fd38,0xb9eed03a,0xba0b231f,0xb9e7af96,0x39388412,0x3a00f442,0x3a07caf8,0xba19e8e9,0xbaa6dfc8,0xbac8eb11,0xbae86f68,0xbaefadc8,0xbad0c1ed,0xba36943c,0xb969578b,0xb8a909e9,0x384360c6,0x37dae7f6,0xb97c2ebd,0xb81836f0,0xba0b1638,0xbb11ce33,0xbb2b2400,0xbb3bcb3d,0xbadf6d07, -0xba106b78,0xbb65f5ea,0xbb5e8634,0xbb210ef8,0xbb06775a,0xbac219bd,0xbab2a059,0xba9e2d73,0xba93c7ab,0xb9b0965e,0x38831e1d,0x3a57b76c,0x3a47e0ce,0x3abe39e3,0x3adf5305,0x3aefbda8,0x3ad25c5a,0x3adf382c,0x3a996113,0x3a24b53e,0xb912ebec,0x39e582b1,0x3a631590,0x3a9d3f79,0x3adf22cf, -0x3b12fb5b,0x3b3c6cc6,0x3b3171a7,0x3b23c7cd,0x3b11a1a3,0x3aa23a77,0x39971a36,0xb9f48b08,0xba8d079d,0xbaef8be8,0xbb450454,0xbb503f18,0x3b093ada,0x3b07aaae,0x3b387fb5,0x3b0dd9da,0x3b1f7540,0x3b1bce13,0x3b1f800d,0x3b294ce3,0x3b2e2274,0x3b3a8a0a,0x3b4ec248,0x3b5486f7,0x3b5d7969, -0x3b69fd84,0x3b41c942,0x3b24a33d,0x3b05820c,0x3acf83fc,0x3a8cde28,0x3a60875a,0x3a8034e5,0x3a6f361a,0x3a727401,0x3a6d31de,0x3a5d01d0,0x3a59d6b2,0x3a8337e5,0x3a9bd3f8,0x3abbe7dd,0x3ae1990b,0x3b040bf7,0x3b0d7126,0x3b055f8f,0x3b01c0e7,0x3afadc76,0x3b06965c,0x3ab1c80f,0x3a9afc72, -0x3ab8654f,0x3ac8e938,0x3ad69d3b,0x3ab85f07,0x3abe83a5,0x3ac1e0a8,0x3acec8f3,0x3ad4ad55,0x3ad20a5c,0x3ae0b4d6,0x3ae4e7ec,0x3afa5f5d,0x3ae230e0,0x3adb46d6,0x3ab3a30e,0x3ab0500a,0x3aa51900,0x3aa360d4,0x3aa20542,0x3aa451b3,0x3aa69e70,0x3aa85b20,0x3aabdc11,0x3aa9b97d,0x3ab30f5a, -0x3ab65bf4,0x3ab513fe,0x3ab53ad4,0x3ab3a5e6,0x3abb915c,0x3abaefe6,0x3abfa76b,0x3ac5112e,0x3ab7c4b8,0x3ac1b321,0xb9908019,0xb7b7fb7d,0x38c372de,0xb8f1479e,0xb96e194e,0xb9da8ec9,0xb93e275d,0xb95d27c7,0xba3e1c7d,0xb9ba8d56,0xb9b897ec,0xba1c2a99,0xba04ea3d,0xba0d03d3,0xb9c78937, -0xba2fa024,0xba23fde4,0xb8a3d6ba,0xb996b336,0xb9901ddd,0xb989454d,0xb92b2582,0xb8cce1c7,0x38fdd712,0xb90e0af5,0xb93c50ee,0xb9401687,0xb948def8,0xb9270a32,0x39b007c6,0xb9b7b089,0xb9d86352,0xb9b2d1cc,0x38dbdd55,0x3961a252,0xb80bd2cd,0x376e22df,0xb8c24cb6,0x391fcdb6,0xb9c3e191, -0xba100496,0xba87bcdc,0xb9966908,0xb95bf3f5,0xbaa9a506,0xb94e1fdb,0xb9c3bc4c,0xbad0b17c,0xbaad34b0,0xbaa5ffc2,0xba164c19,0xbabbe2ee,0xbaa5759d,0x387eea19,0xb9dfa856,0xb8e0b1db,0x38629fde,0x39b63bf0,0x3a038220,0x3a46ff76,0xb960efb5,0xba3a1539,0xba514f93,0xba4da315,0xb9851a77, -0x3a9cc39e,0xb9e25597,0xba2d9844,0xb98836ec,0x3a57059f,0x3a6d9679,0xb8a4d591,0xb79993a3,0x3a461ac7,0x3aace01c,0x38e61fb4,0xb9e123d1,0xbabaa7cb,0x388be9e2,0xb9584ac7,0xbb26820b,0xbaa94ea9,0xbab1bb4a,0xbb34421a,0xbaf2fe5a,0xbb0c5ac8,0xbab1cb9c,0xbb25a6c7,0xbb3428a5,0x384d41a0, -0xba8141c3,0xb9e29418,0xb8c97c20,0x3994780d,0x3a3f8610,0x3ad5ba9c,0x397bb903,0xb8fa653a,0xb97899ce,0xb6a88872,0x38e8cf7e,0x3b1f990a,0xba83b2bd,0xba80d444,0x363f85d1,0x3b07da3e,0x3b20f748,0x3a5aa9c0,0x3a9e6a6e,0xb9c13db6,0x393919f1,0xba79b09e,0xbb038487,0xbb562ae2,0xb9a548ee, -0xb9ba9e72,0xbabbfffa,0xb8a6cfae,0xb88da14f,0x39eabc5b,0x3952e449,0xb87122c7,0xb9f1bad5,0xbab541c6,0xbb2ba027,0xba5fe1d8,0xba456b71,0x395e73db,0x3ab85257,0x3b0b71fa,0x3b3d1c81,0x3b592adf,0x390b7752,0xbb149943,0xbb43665a,0xbb253e9f,0x39759e10,0x3b862a50,0xb9c85aa4,0xbaba6897, -0x3a1ca389,0x3b700ac8,0x3b574c2e,0xba0a897e,0xb9f3ac5c,0x3c21bb76,0x3bd8ec2a,0x3bb86253,0x3ba03b33,0x3b93ba69,0x3b4874eb,0x3a8bdb3a,0x393d6011,0x39902745,0xb7af64af,0xb86f2b0c,0xb8ed0593,0x396e8676,0xb7f228b4,0x3a9545f8,0x3b0cc6d6,0xba92bf23,0xbb6f5132,0xbbaea318,0xbbb788f8, -0xbbe024a2,0xbbd1dcdd,0xbb565db5,0x39a60799,0x3bb5aeb6,0x3c392e7d,0x3bdd6a1f,0x3aae095c,0xbb48d9f7,0xbb2a7760,0xba8257bb,0x3b0ed591,0xb99bcb9e,0x3b446cf7,0x3c2c8058,0x3c33cb97,0xb8faa67f,0x3a61fde7,0xbb122336,0xbacf8c5f,0x3a320321,0xba1a1fb7,0xba0f29c6,0xb884115f,0xb9099fc3, -0xb784c6b5,0x380880cd,0x36edb6ee,0xb899d6d4,0xb89c2977,0xb9e24319,0xba350ff9,0x39ccecec,0xba790407,0xbaba1ba3,0xba1fc62f,0x3af5f241,0x3b5a1b14,0x3b4e6053,0xba21db20,0xbb9ef27e,0xbc0a9be9,0xbc13f7c3,0xbb5c1123,0x3bc8a7e6,0x3b6b91e4,0x3a2c86a6,0xb534c936,0xbbfc1924,0xbc0ec650, -0xbb89943a,0xbb371c85,0x3b80be52,0x3c2f078f,0x3ba1dff4,0x3a24817f,0xbb3bd656,0x3937a71b,0x39cb0808,0x362e3d14,0x38ae7b65,0x372a76e6,0xb6ddae2f,0x379ebe0c,0x384002e7,0x38908ceb,0x396680f0,0x39c0345f,0xb99ebe3b,0x3a3cb321,0x3aa225cf,0x3a8a8fe7,0xba2806cd,0xbaf82377,0xbaa49999, -0xba85346d,0x3b1e247e,0x3c0529c6,0x3c0f60d5,0x3b6b0bc9,0xbbdeb5a2,0xbb8c2e8e,0x3a04b89c,0x3c01bc12,0x3c1ae550,0x3c1d0d8f,0x3bbb0610,0x3b3c0cac,0xbc1ca219,0xbae2614a,0xbbc6d71f,0xbc3504d1,0xbc344bed,0xbb093446,0xb7237739,0xb8a813f2,0xb84d5ba9,0xb7676415,0xb75ea6b1,0xb81d1224, -0xb8a0d7d6,0xb847d711,0xb9329689,0xb9c5ac8e,0xb92c6cdf,0x3acea605,0x3b297218,0x3b3b33f4,0x3b013b21,0x3a46b202,0xba4bd0bb,0xbb14f39f,0xbb58bde2,0xbb4955e4,0xbb42955a,0xbacee27e,0xbaf39247,0x3bbedd9f,0x3c05071a,0x3c075482,0xbb9ac2a2,0xbc439dc5,0xbc4ff555,0xbc357b52,0x3b5d1c9a, -0x3c3215ee,0x3c6039aa,0x3c4eb5df,0x3b9e8627,0x3b0f98f0,0xb710beca,0x3920a61f,0x3828ed22,0x378c04db,0x381e8dbf,0x38ae5012,0x390bfae6,0x38d91f8e,0x38e3d483,0x3a5cc721,0x3b0a2cef,0x3b8017e3,0x3b841ec1,0x3b607136,0x3b39e9b0,0x3b15626d,0x3b0b236b,0x3aec8990,0x3aa38777,0x3a0cb0c7, -0xbad4b7d8,0xbb3a2d42,0xbb622357,0xbb99d760,0xbbb16af3,0xbb9652bf,0xbb3ab3e0,0xba850bad,0x39292a52,0xb9b1fddb,0x3a8022d5,0x3a1c0da0,0xba500d35,0xbaa2e181,0xbacc64b6,0xba98383a,0xba43f510,0xb9aea3ab,0x36b6117f,0xb7094e26,0xb895287e,0xb9394a4d,0xb98a097c,0xb9b77668,0x379ff5de, -0x39b92684,0x3a27dbf8,0xb9541d56,0xba7a5db7,0xba9d3070,0xbab47bba,0xbacfb30a,0xbac8b0cb,0xba913089,0xba839f40,0xba903c16,0xba5a2ba8,0xba3a8734,0xba653542,0xba094670,0xba43b60d,0xbb05093d,0xbb01e0a3,0xbafecd8d,0xba5f82ad,0x3980ec7a,0xbb6ace3d,0xbb758ee1,0xbb4a5e06,0xbb356d41, -0xbb198d1e,0xbb07da8a,0xbae448d9,0xbac0d989,0xba5cb19f,0xb9fbea4b,0x38b7fa5e,0x384e9006,0x3a10a7ee,0x3a4d832c,0x3a951f4e,0x3aa014fc,0x3acab335,0x3a9801fd,0x3a3a6ce8,0x398629a7,0x3a637f9a,0x3aa04512,0x3ad07657,0x3b0e5e99,0x3b374007,0x3b630eaa,0x3b430ad5,0x3b21314e,0x3af68507, -0x3a544de3,0xb9703abf,0xba8fc567,0xbaca58b7,0xbb0ce6e7,0xbb4c3ee3,0xbb5a0621,0x3a809437,0x3a5dc7bd,0x3ac18a4f,0x3aa59203,0x3acf8451,0x3ad4725d,0x3ae7188c,0x3b001094,0x3b0c3c9c,0x3b1dd281,0x3b3632a4,0x3b45cf13,0x3b57aa38,0x3b6b0c8f,0x3b4c6e8a,0x3b34e704,0x3b1c6747,0x3b0383f0, -0x3abdbb27,0x3ac37349,0x3acd1126,0x3ac2922c,0x3abf11c2,0x3ab8c32c,0x3aab3e31,0x3aad1a9f,0x3aac582a,0x3ab5ee4c,0x3ac3f6ef,0x3ad5015d,0x3ae40fe7,0x3adba1dc,0x3abefd3b,0x3aa5b811,0x3a8ed56c,0x3a8bfda0,0x3ab69b4b,0x3a9e2f6e,0x3aad2507,0x3aaf65de,0x3aaed572,0x3abb9f76,0x3ab66197, -0x3ab02a0f,0x3ac37810,0x3acf9103,0x3ad45fed,0x3ae44bda,0x3aeb56ac,0x3b015365,0x3af61be7,0x3b00ad6d,0x3ac27c53,0x3ad5a610,0x3adbe623,0x3af1e2b4,0x3aea4b83,0x3aeeb26f,0x3af1bf57,0x3af3c2a8,0x3af6a822,0x3af5afed,0x3af55f1a,0x3af0669e,0x3ae66aea,0x3add9b39,0x3ad50a09,0x3ad579e0, -0x3ad1a699,0x3ad17673,0x3ad0eea6,0x3ac16f1d,0x3b04bf23,0xb9f03bbb,0xb92c2200,0xb8ddb08a,0xb9749828,0xb99a7456,0xb9d3c3d0,0xb9bc7ef2,0xb99a624e,0xba1a1a6c,0xb99beb92,0xb99446f0,0xb9f518c6,0xba02c71b,0xba0f03eb,0xb99260ee,0xba4cfdb7,0xba4ee188,0xb89cdaeb,0xb9c80c44,0xb9da1692, -0xba027c5e,0xb9bc34da,0xb9a2fa4c,0xb8e9aae2,0xb9e02ed5,0xb9ed4631,0xb9bcb2ba,0xb9a93e6e,0xb9964bb1,0x3894043c,0xb9fca942,0xba089ffd,0xb9d531f5,0xb849ce79,0x381cadf7,0xb981d171,0xb9160d03,0xb9462895,0x36812710,0xb999df8f,0xba21f068,0xba80ca35,0xb9cf902f,0xb99d6bb5,0xba81063f, -0xb994d68d,0xba0fa3b7,0xbaca2c74,0xbadeb072,0xbad2dda8,0xb9ee2f07,0xbacc5b3d,0xbabb52f7,0xb7c369c9,0xba22c64c,0xb99fbd63,0xb9bb4785,0xb81b9dcf,0x380bdd6a,0x395cd93f,0xba7efa65,0xbab49085,0xba8fdb79,0xba5839b5,0xb990357f,0x3a420ea1,0xba12a5b0,0xba3798ef,0xb9502575,0x3a23b29e, -0x3a1eb1ef,0xb9e12287,0xb9409557,0x3a2495c1,0x3a929778,0x3896f7bb,0xba0bde9a,0xbaa71fe8,0xb8d0a6e6,0xb9727a09,0xbad98ed5,0xba6bbe28,0xba612c5c,0xbae0d796,0xbac2b399,0xbaf6f516,0xba5f13eb,0xbb24145b,0xbb38b991,0x389030c1,0xba92393e,0xba31df9c,0xba20a9ca,0xb8e8a35e,0x39665b8c, -0x3a88ec7a,0xba46dbd9,0xba80af1d,0xb9edd25b,0x38844164,0x396c3f7c,0x3adf8430,0xba78d38d,0xba54c53d,0x39bee136,0x3afa01dc,0x3b0c13fe,0x39d4ca88,0x3a89f30f,0xb9a6feef,0x3942bb58,0xba355b7d,0xbae22434,0xbb23f84c,0xb9657258,0xb93ea383,0xb9e3ffd9,0x39208d09,0x395a9e24,0x39eae362, -0x3a06667b,0x392acfeb,0x3785ac88,0xba571e76,0xbb1698c8,0xba3ff582,0xba8e7dac,0xb9d1da69,0x39be7e3b,0x3a9a0a01,0x3ade8c8b,0x3aef4a2b,0xbb099f4b,0xbb88d31e,0xbb684b26,0xbb0f45f0,0x39e4732f,0x3b398dc2,0xba05dff3,0xba8ae5b7,0x3a9c825d,0x3b5d5d28,0x3b2a91b9,0xbaa923dc,0xba2ba526, -0x3c0cca10,0x3ba93ce5,0x3ba0f019,0x3b7a6c2a,0x3b4fc8f4,0x3af4f2f5,0x399c8210,0x387d3ae8,0x383562fd,0xb8f7b9ed,0xb9220214,0xb9605016,0xb6c1122b,0xb820bcc0,0x3a1260c0,0x3ad8fada,0x387c8453,0xbb1f4323,0xbb8f7949,0xbb9a40d5,0xbbbf0e04,0xbba70b1c,0xbabc0d0a,0x3b30d37f,0x3bfdb15c, -0x3c47e35b,0x3bf08b59,0x3af5a166,0xbaea55f9,0xbaf0a7e6,0xba1f2ccf,0x3b16d236,0xb8f39fb9,0x3b4c3995,0x3c2e5bfc,0x3c294df2,0xb917f608,0x3aceeb6e,0xbaa6de7e,0xba8f43e7,0x39a4c910,0xb91aaa3c,0xb9a488af,0x37ad2bd7,0xb8001787,0x38782672,0x38a94beb,0x38aebbd4,0x37acc746,0xb7bde1a1, -0xb98b5540,0xba20ec23,0x393ff9a9,0xba3c102b,0xbabed3fb,0xbaa927d6,0x3a8e8094,0x3b21abd0,0x3b182b74,0xbaa20b5d,0xbbaff0b3,0xbc0ea215,0xbc004061,0xbadba7d1,0x3bee1d30,0x3b626dcb,0xb8c8c8d8,0xbaaab276,0xbc059563,0xbc0c8a9b,0xbb8d0d55,0xbb2f89bd,0x3b9018de,0x3c2c2f59,0x3bdb0e89, -0x3aae29db,0xbb0b3cc5,0x39dec94a,0x393430b3,0xb7d0e35a,0x3759c10d,0xb832f4ea,0xb8432ce2,0xb82586df,0xb74bc2fb,0x37fb1284,0x38e923b1,0x39b69890,0x388d1c8e,0x3a64f879,0x3ad545fe,0x3adf1f37,0xb911f9b9,0xbaacd1ab,0xba54aea3,0xb98c3009,0x3b616d57,0x3c1a7c0a,0x3bf633f4,0x3ad244ee, -0xbc030668,0xbb488a32,0x3b161fa1,0x3bf1562e,0x3c1e172c,0x3c0f4b54,0x3b09f665,0x3b1218cc,0xbc45bc42,0xbc2ef2b5,0xbbd53648,0xbbfd9c0b,0xbc0a00c4,0xbaa3f043,0x38af2055,0xb82fa960,0x382040ef,0x382a1799,0x38297deb,0x38003780,0xb70d89bb,0xb707630e,0xb8ba2e6f,0xb9727c25,0xba193902, -0x3a4607f4,0x3afd3add,0x3afe06b8,0x3a6f64d4,0xb8da54d7,0xbac740bd,0xbb394dae,0xbb84fe89,0xbb81977e,0xbb6ed05f,0xbacda417,0xbac36ead,0x3beb9e24,0x3c035c9e,0x3b84e149,0xbbef3017,0xbc4e6a26,0xbc3ef829,0xbc2dd8da,0x3b224257,0x3c348188,0x3c5ad685,0x3c37f0d6,0x3b803567,0x3b031431, -0xb939201c,0x3861b601,0xb8b230aa,0xb8a2505f,0xb873d88f,0xb8038384,0x36b47202,0x388f625e,0xb8237673,0x39fa36a3,0x3acf4b04,0x3b721c15,0x3b914ce1,0x3b8076f6,0x3b5b195a,0x3b2b048a,0x3b07b23f,0x3ac8720f,0x3a67b805,0x39168d66,0xbaffcb4e,0xbb4fb7dd,0xbb74e0e8,0xbb9622c0,0xbb9db28b, -0xbb6e0f19,0xbb26fd8d,0xbaf32ed4,0xba96b658,0xbb11e903,0x3ac931a5,0x3ab098c0,0xb6f37814,0xb97c1071,0xba4c9fac,0xb9d9e9e7,0xb96ab509,0x38b8cf39,0x395bc6e4,0x395eff5c,0x38ed17c9,0x38bf183c,0xb7c29da7,0xb903340a,0xb7d7fdb3,0x399ddfed,0x3a56c64e,0x39a053a8,0xb9c5cc38,0xba470706, -0xba89e385,0xbabb6a3b,0xbae1caa5,0xbaed891a,0xbb085917,0xbb19d160,0xbafc4763,0xbad3b07b,0xbacfe3f2,0xba9d1ce3,0xba9a184a,0xbaebad27,0xbaa0a285,0xba4fc66c,0x399b4b02,0x3a9ada3e,0xbb52899a,0xbb6a8852,0xbb533e47,0xbb47d7f1,0xbb3578cb,0xbb1f558f,0xbb0057cb,0xbacb014b,0xba85bb2e, -0xba4a53f1,0xb9b717e4,0xb9e52085,0xb7f03857,0x38d471d6,0x3a19c288,0x3a550fd7,0x3aa73f76,0x3a9134cf,0x3a68a9ed,0x3a280333,0x3a85f9bc,0x3aa62310,0x3ac8b23c,0x3b07276a,0x3b2ad572,0x3b4e2cca,0x3b1fabb2,0x3adf993b,0x3a735866,0x38690168,0xba4dbf63,0xbac75fa7,0xbae14d48,0xbb07fb05, -0xbb31093f,0xbb44be81,0x38e6b257,0xb91d6e6e,0x3a031cac,0x39fcdeca,0x3a66b8ab,0x3a8376be,0x3a927d0f,0x3aacfcc9,0x3ac0dfc7,0x3aea980e,0x3b11bea8,0x3b238130,0x3b3a11e0,0x3b52304b,0x3b46507a,0x3b388103,0x3b2b51ee,0x3b1bb2da,0x3b01e030,0x3b073c87,0x3b0afe1b,0x3b088778,0x3b069963, -0x3b04cf9f,0x3afe1baf,0x3b03df3b,0x3af36b5c,0x3af10596,0x3aee7847,0x3aeb2a48,0x3ae14d00,0x3ac2c353,0x3a96ab81,0x3a55ae48,0x3a0d60c3,0x39b85149,0x3ac65ae5,0x3aa7dee1,0x3abdc6e0,0x3ac049af,0x3abf75a0,0x3ace2eea,0x3ad1a5bd,0x3ad6b023,0x3af09be0,0x3b003214,0x3b03e23b,0x3b0d2b42, -0x3b11bad8,0x3b1b921a,0x3b12106a,0x3b16f2a9,0x3b00b858,0x3b0a0333,0x3b0f013e,0x3b18bb02,0x3b16ee17,0x3b19ad23,0x3b1c313d,0x3b1dd297,0x3b1f6170,0x3b2070d2,0x3b1bec8d,0x3b161dd8,0x3b0e194c,0x3b064318,0x3aff4393,0x3afa02cd,0x3af24671,0x3aec9128,0x3ae44c3e,0x3ad36fa3,0x3b276ce1, -0xba2f697c,0xb9b5c826,0xb9a2fe3d,0xb9de2081,0xba006693,0xba164cd9,0xba156cce,0xb9f785d6,0xba1c4daf,0xb9d99b72,0xb9d7c086,0xba0650e2,0xba2fa20f,0xba3d971a,0xb9b74941,0xba7b7942,0xba80556e,0xb97fa770,0xba1648b9,0xba21ee1b,0xba418795,0xba1750a8,0xba0f7e08,0xb9d01658,0xba43d1ed, -0xba450df8,0xba170a5c,0xb9f85ee1,0xb9e44221,0xb987cdad,0xba26e67a,0xba273240,0xb9ee8303,0xb95532b0,0xb927474b,0xba050047,0xb9af61ec,0xb9ac20fd,0xb956ae41,0xb9eb6d0e,0xba406841,0xba87dde0,0xba24b35a,0xb9fbeaf1,0xba43cd14,0xb9d016c0,0xba34ce36,0xbac93800,0xbb05cf76,0xbafc1e16, -0xba00ba40,0xbae118d2,0xbad15e60,0xb93b338c,0xba5d5c5c,0xba199450,0xba46c33f,0xb9d65425,0xb9e57fd2,0xb9d65126,0xbae15d39,0xbb040c9d,0xbab8acb6,0xba5d949f,0xb9a31ade,0x392e2648,0xba3aee0b,0xba3dcbb9,0xb8a82f4a,0x39ec8423,0x39a642e5,0xba545e2d,0xb9c6fea3,0x3a0618e3,0x3a5eec3d, -0xb8b9ec3c,0xba37aea7,0xbaa4f040,0xb9c29a05,0xb9a113fa,0xba5a89cf,0xba0c60ba,0xb9e032b0,0xba52f923,0xba6b22b9,0xbac41dea,0xb9e1bd99,0xbb1765c9,0xbb34a27a,0xb883a939,0xbaa55d71,0xba7fb3dc,0xba93172e,0xb9fcaf9f,0xb9a57cec,0x399c4d71,0xbae92003,0xbaf23f22,0xba4048bc,0x39218145, -0x39bd5093,0x3a51aad3,0xba6e4afa,0xba1b5a8f,0x3a66c9b7,0x3aeff984,0x3af1ccbd,0xb9008102,0x3a5e4e48,0xb953f861,0x38c1ee88,0xba289c9d,0xbabf1acb,0xbaf57c47,0xb950f85d,0xb855f349,0x37a19a3d,0x392e8a8f,0x3924c91d,0x3998211b,0x39dd7cdf,0x399a6533,0x39628bd2,0xb973e0b0,0xbae41986, -0xba2b63db,0xbaabe86b,0xba79e6f1,0xba158cfc,0x39ad4295,0x3a0dfd25,0x3947119e,0xbb8a2e93,0xbbbfb340,0xbb81af3e,0xbad661b8,0x3a36e4d8,0x3ab0b064,0xba2e1cae,0xba1fb8f3,0x3afe7ebf,0x3b4cdb29,0x3afda2b5,0xbb06ee0d,0xba518d71,0x3bfcc46e,0x3b824b9d,0x3b7ba4c7,0x3b2c0397,0x3af47748, -0x3a5712c5,0xb8647e13,0x37fcb1b9,0xb892bc0f,0xb89206bf,0xb911e19d,0xb9407640,0xb8ec00d4,0xb8a81801,0x393b2dad,0x3a78a47e,0x3a59e57d,0xbab9ae12,0xbb670a39,0xbb842f64,0xbba319b6,0xbb839e97,0xb9025432,0x3b960d9b,0x3c164587,0x3c45094d,0x3beda46a,0x3b08272b,0xba436de1,0xba9d84ea, -0xb8626875,0x3b431480,0x3a86279c,0x3b847de6,0x3c325d97,0x3c1e44b1,0x3aa8856e,0x3b0b44b8,0xba58e6a6,0xba0d8ea7,0x397b24e6,0xb8c5094e,0xb926c3d8,0x38b9b89c,0xb68a6322,0x3881c93a,0x388d3000,0x38c0e57e,0x3877bd81,0x3806d514,0xb8ac5032,0xb9f8a173,0xb8001907,0xb9e48148,0xbaa31f96, -0xbad23bae,0x3a23a683,0x3ae73ed7,0x3abf8923,0xbb00ffc4,0xbbc339ac,0xbc10d7ea,0xbbdb68f2,0xba086460,0x3befaf53,0x3b42c6d2,0xba5fe37d,0xbb1f30b9,0xbc006ded,0xbbee40a5,0xbb3278bc,0xba80687d,0x3bcf8373,0x3c32725e,0x3bfca7bb,0x3ade51cf,0xbaf2df4d,0x3a441359,0xb8dc4396,0x37505023, -0xb84f1fef,0xb80edbe9,0xb86d9a78,0xb8605428,0xb81effd7,0xb7a46e91,0x38646cde,0x3957dcf4,0x394cbbcf,0x3a3dfe0c,0x3acca266,0x3b02a6ff,0x39c76467,0xba108f1e,0xb92f9278,0x3a6696b9,0x3b95d873,0x3c249603,0x3bc3d76e,0xb9b1a6dc,0xbc0fb225,0xbae22247,0x3b8cfa0c,0x3bf96520,0x3c2b8279, -0x3c0a0988,0xb997dd02,0x3b2e97df,0xbc441e9f,0xbc8d82ef,0xbbdab781,0xbb8f9553,0xbbb55d60,0xb97e24b8,0xb7d67c3d,0x38abd1a5,0x38149801,0x389be003,0x385ef7a7,0x3880361b,0x38083a54,0x37bad230,0xb7fa5a97,0xb828d21d,0xba37472d,0xb7ecd341,0x3a81d4be,0x3a5e53e5,0xb9250442,0xba6e86ca, -0xbb0ad41d,0xbb53ec83,0xbb901709,0xbb8855b7,0xbb6e3b46,0xba515b16,0x38af7be5,0x3c0e2681,0x3bfef1e0,0x34b6b3cb,0xbc0583d0,0xbc3776a8,0xbc1fd537,0xbc05347c,0x3ad303bf,0x3c2d0db6,0x3c441f5d,0x3c13b2ac,0x3b52a754,0x3ab6cd57,0xb9c31a12,0x378c7a6b,0xb936a5c9,0xb8c97d59,0xb8ef45ad, -0xb8ab7cba,0xb89f3192,0x370721c7,0xb888c104,0x38e6ad63,0x3a7e8627,0x3b4788a8,0x3b8ce1aa,0x3b843325,0x3b68383f,0x3b399822,0x3b10a8b9,0x3ac6c447,0x3a6a6973,0x3952df29,0xbad0c4d8,0xbb38afd6,0xbb65c2dd,0xbb8b99c2,0xbb872b22,0xbb2d34c2,0xbb1bf141,0xbb2dee5c,0xbb1b0b7d,0xbb62bba7, -0x3b14b17a,0x3b191dcf,0x3a76b75f,0x3a33e5b1,0xb79aad58,0x398079df,0x3901c3b2,0x39a0f0bc,0x399878e1,0x398df532,0x3956b576,0x3957b3a1,0x3909536a,0x388ad341,0xb77bf076,0x39860498,0x3a5a8d6e,0x3a33d259,0x38f26353,0xb9d969a4,0xba3fdad1,0xba9ec3be,0xbad471c0,0xbb05ca4d,0xbb27f843, -0xbb466ee5,0xbb21cc67,0xbb0a3ae5,0xbb07bb25,0xbae843ef,0xbad7b846,0xbae1454c,0xba3cac98,0x3971368c,0x3abd100c,0x3b1376b1,0xbb2c2ebd,0xbb481e5e,0xbb3edef9,0xbb36ea73,0xbb2e0046,0xbb178654,0xbae7587d,0xbaab3754,0xba7909a0,0xba44c8b3,0xba013e8d,0xba1e25be,0xb9cb5019,0xb9aa05f2, -0x38b8ec85,0x39c22508,0x3a61222f,0x3a71d886,0x3a740540,0x3a8ab55d,0x3aaaad77,0x3ab77a8b,0x3acc03ad,0x3b0288c4,0x3b208e84,0x3b3b95d7,0x3b06db61,0x3aa3c776,0x39dec31a,0xb981fc3b,0xba6578c6,0xbac28711,0xbacb77a8,0xbaec54e4,0xbb123f5b,0xbb25fc81,0xba2fad44,0xba8a1bde,0xb9d22ce6, -0xb9c245f5,0x38a28055,0x397cb685,0x3997a5eb,0x39fa9357,0x3a1e3a82,0x3a7256bd,0x3aae8658,0x3ad7ef3b,0x3b057be2,0x3b1f5c41,0x3b269a4e,0x3b26b008,0x3b26bbb7,0x3b24c7f2,0x3b18ddb0,0x3b207906,0x3b22357b,0x3b2287bc,0x3b21b749,0x3b20eaf7,0x3b1bad40,0x3b22af9f,0x3b111b21,0x3b0a3ca6, -0x3b018afe,0x3aed158d,0x3ace1c13,0x3aa0821b,0x3a523ebf,0x39cca331,0x386e7573,0xb98fe99d,0x3abe7ed2,0x3a9a065f,0x3ac1114c,0x3ac83b10,0x3ad074cc,0x3acb605e,0x3adcf8d7,0x3af02142,0x3b06dbeb,0x3b0ff059,0x3b15e875,0x3b1eb0cb,0x3b23fd51,0x3b2bda04,0x3b1f0a6a,0x3b20566c,0x3b1aca8f, -0x3b1e9efd,0x3b22ebc4,0x3b277d2f,0x3b280de2,0x3b2b468b,0x3b2e496b,0x3b30c637,0x3b33065c,0x3b35fec4,0x3b2d3025,0x3b244f46,0x3b19b3d0,0x3b0f83bc,0x3b07148e,0x3b01ba68,0x3af88aa8,0x3aed575c,0x3addf957,0x3acc2778,0x3b35423d,0xba5d6927,0xb9ec0198,0xb9e9dd5c,0xba1b06c9,0xba318cd8, -0xba454c8e,0xba4756a9,0xba2c55de,0xba192e98,0xba09dc72,0xba10c195,0xba219f6c,0xba5fac4f,0xba6544c7,0xb9e40eb1,0xba9101cd,0xba95ba08,0xb9eff0a9,0xba4eba32,0xba597963,0xba74e25a,0xba48bcb2,0xba456f40,0xba2fe91c,0xba84fe53,0xba83063e,0xba4986fe,0xba1dc1d2,0xba174f45,0xba224c58, -0xba52712c,0xba4728a9,0xba02c128,0xb9b99c2d,0xb9ac7137,0xba313906,0xb9e84002,0xb9a3f833,0xb99df45b,0xba1840e0,0xba525072,0xba8657b1,0xba4fc95b,0xba1f4aad,0xb9facd83,0xb9ea1b98,0xba3e332b,0xbaae7f31,0xbb0c89cc,0xbb0b32b4,0xba1d0c74,0xbaed37d9,0xbada674b,0xb9b4031f,0xba85fabd, -0xba618642,0xba91ae54,0xba42e208,0xba665523,0xba879f29,0xbb193a37,0xbb242cf7,0xbadada0d,0xba5cc0f2,0xb9cbb2aa,0xba0c3396,0xba7e1237,0xba5ccd6a,0xb7c39047,0x395d3108,0x381b68b9,0xba8503ed,0xb9da192f,0x3a31c3c9,0x3a432e79,0xb8e85501,0xba315782,0xba935b5a,0xba11526b,0xb9a77588, -0xb95d5a45,0xb9809a79,0xb8f218f6,0xb99a61be,0xb9ba638f,0xba673a69,0xb915673a,0xbafa3c56,0xbb262899,0xb986b6e4,0xbab33292,0xbaa41ac8,0xbad09f3a,0xba5800ce,0xba5a12f9,0xba08c81c,0xbb2d3f3d,0xbb279c68,0xba8966cd,0x39360655,0x39a71197,0xb9dcf305,0xba9186ae,0xba1c1fbe,0x3aa35a3e, -0x3acf9d0e,0x3ac9984b,0xb9b4ad54,0x3a6f011f,0x3968b73d,0x395b378c,0xb9f63d94,0xba91e709,0xbaa81bd8,0xb91fca2e,0x386c3e40,0x388d7091,0x389a0f4d,0x38ce40ea,0x391577e0,0x39933abb,0x3989e470,0x394cd13b,0x397784ee,0xba8b5c58,0xba20e1a2,0xbab77427,0xbab351cf,0xbab8d64b,0xb9f734b8, -0xba224e4a,0xbaccff33,0xbbc57232,0xbbe98ae8,0xbb8c7c34,0xba95fe8b,0x3a2e90f1,0xba1b0067,0xbaa6d16d,0xba1412a1,0x3b1ca77d,0x3b28aaca,0x3aa072b7,0xbb1adf1b,0xba15520f,0x3be3861b,0x3b61916f,0x3b5d356e,0x3af61d6a,0x3a847fa3,0x398398b9,0xb8762e40,0xb7d4d02d,0xb82c3f9c,0xb857d05c, -0xb89d82f1,0xb9185a5c,0xb8d79d44,0xb9140506,0x385490a7,0x39ca85a6,0x3a8981fd,0xba2a6c4d,0xbb37b4ac,0xbb67d35a,0xbb8712a8,0xbb3c0e9e,0x3a8c3ef4,0x3bcf3b70,0x3c26cb40,0x3c35fa58,0x3bd47081,0x3aec01cd,0xb8f37d89,0xba2c60c0,0x39cdebf9,0x3b5a8465,0x3b020018,0x3b9ff4fd,0x3c365d3b, -0x3c14fb9c,0x3affd1c0,0x3b37cca3,0x39ac7106,0x39683904,0x397ecc88,0xb9019ef4,0xb7e61331,0x3881e905,0x371b8fb2,0x383597b7,0x383a4032,0x389909e8,0x388aed12,0x3863944c,0xb6ea91c6,0xb9878e11,0xb93d48ef,0xb92b1196,0xba4c75bf,0xbacf251b,0x396962a4,0x3a71e868,0x39905154,0xbb45c970, -0xbbd8e1e1,0xbc0ea02b,0xbbb096c7,0x3a11f2b2,0x3be4daad,0x3b3a3b1c,0xba7bca05,0xbb4444ee,0xbbede27c,0xbbcb1552,0xbaf5eb30,0x3926d6b0,0x3bbfc01f,0x3c2ce793,0x3c0d73fc,0x3ace9524,0xba9b48b5,0x3a2a20d4,0xb97a204a,0x384f6eb9,0xb890aaa8,0xb7a1cf8e,0xb84fb974,0xb83e8599,0xb856812e, -0xb8076fbd,0xb695bc3d,0x38c6528e,0x39608ddf,0x39cfc1ad,0x3a96aad0,0x3af45e42,0x3a4618ac,0x39989330,0x3a36ae4a,0x3b254af1,0x3bc26b38,0x3c25d2b6,0x3b944f85,0xbae49de0,0xbc0cdf82,0xb8ac9879,0x3bcbb000,0x3bf963f0,0x3c2ca633,0x3beb0212,0xbb59f74e,0x3ab6e65f,0xbc40cb87,0xbcb92fdd, -0xbbe9166a,0xbb12e02b,0xbb313e86,0x39743d83,0xb885afe3,0x39065f06,0x37c33f14,0x389ee03e,0x3841ad4c,0x3889da1d,0x38468fc6,0x38673317,0xb7b8111e,0x38a34e28,0xba073cbd,0xba2591b8,0xb7a93bae,0xb98bfd8a,0xba8d5f64,0xbacecd9f,0xbb2a76eb,0xbb6420b1,0xbb91db56,0xbb83f075,0xbb6cb4bd, -0xb919a5b1,0x3b07e3f8,0x3c172a00,0x3bd66221,0xbb87b1ee,0xbc0af1cb,0xbc15f3bf,0xbbf6001b,0xbbbb44dd,0x3858f197,0x3bfbc562,0x3c0bde1e,0x3bbe08ab,0x3b1a4169,0x39e3a819,0xb9b865a8,0xb80a84b3,0xb925b055,0xb8c3f22f,0xb8e5eb8e,0xb8cd3fe3,0xb8cc3eea,0xb884e408,0xb83a9500,0xb8939941, -0x39e758a4,0x3b1586de,0x3b746791,0x3b80b7eb,0x3b71d283,0x3b4a9d74,0x3b21df62,0x3abfda87,0x3a380de9,0xb86166a7,0xbace782b,0xbb39af28,0xbb6d1b84,0xbb8525d7,0xbb620458,0xbaec8d93,0xbb1f4f3b,0xbb6e25b1,0xbb7eaffb,0xbb95ab7b,0x3b2cfcba,0x3b3b3139,0x3add4de0,0x3aaa3f17,0x3a1f37bc, -0x3a2683df,0x39899ed5,0x39a76d9a,0x397eab5c,0x397dd62b,0x394d9721,0x3969ab7e,0x393ab68b,0x39353699,0x38728fc5,0x39469af9,0x3a42822d,0x3a7ef8a1,0x3a210339,0x38e0cb0e,0xb9a045e5,0xba619902,0xbab24493,0xbb015462,0xbb2f8af1,0xbb5fadaa,0xbb39803b,0xbb23cf32,0xbb24157a,0xbb16facd, -0xbb0ba550,0xbad492d1,0xb9e528b3,0x3a5b247b,0x3b025c1d,0x3b3a17ef,0xbb10f81d,0xbb28c831,0xbb263c29,0xbb208664,0xbb1e66d6,0xbb02eb0c,0xbab64a37,0xba6a3632,0xba2630a2,0xba05978f,0xb9dba426,0xba088160,0xb9e58497,0xba00c0fc,0xb9838339,0x377b6099,0x39f60e2b,0x3a342234,0x3a7a1ea5, -0x3aa61e5f,0x3aa0cefe,0x3aa0fdaf,0x3aa01b49,0x3ac4e093,0x3aeb8993,0x3b05bf9b,0x3aa49b3a,0x39fb1389,0xb99217a1,0xba343270,0xba8a7732,0xbac553e9,0xbac3cb30,0xbadb7596,0xbb01c6fe,0xbb125e3b,0xbab04251,0xbaee2fd3,0xba9e7c63,0xba97f6af,0xba39d51a,0xba0cbec4,0xba105a59,0xb9cc5c54, -0xb99eeb45,0x35e63960,0x39cd92ee,0x3a3226b7,0x3a8abae1,0x3abe9d5b,0x3aef71af,0x3b017aca,0x3b0c2072,0x3b169284,0x3b21a25a,0x3b22b047,0x3b22043e,0x3b248b09,0x3b23fc73,0x3b245ea0,0x3b204bef,0x3b282016,0x3b0ff806,0x3b03e751,0x3ae9e4dc,0x3ac3fab9,0x3a94819b,0x3a3c7b7f,0x399095b2, -0xb9159bba,0xb9f5ff26,0xba649bf9,0x3a922bd4,0x3a5aa41e,0x3a9b938f,0x3aa95762,0x3ac24d4f,0x3a9c6d48,0x3abe02ba,0x3ae19234,0x3b0011fa,0x3b0961ba,0x3b104ebb,0x3b197695,0x3b2039cc,0x3b267400,0x3b134b4d,0x3b0dcb50,0x3b23c2e0,0x3b1bd42c,0x3b1c30d4,0x3b18bbc0,0x3b1c9e2b,0x3b1ea129, -0x3b21475a,0x3b235cf7,0x3b2502f8,0x3b288eb0,0x3b1d7138,0x3b131e87,0x3b0791a5,0x3af99e7f,0x3ae839eb,0x3ada69b9,0x3acf5429,0x3ac16ebe,0x3aae7f08,0x3a9dad66,0x3b242c1e,0xba72db93,0xba0c00f8,0xba17f5de,0xba2e64e7,0xba43caf1,0xba5aaee6,0xba5b3c34,0xba3f226a,0xba0f46d5,0xba2022a6, -0xba2fab8f,0xba38e0c8,0xba85f3b0,0xba84ce9e,0xba08e424,0xba9001b0,0xba95c18f,0xba24768a,0xba6843ce,0xba6f6e4e,0xba86c13e,0xba64605e,0xba645c26,0xba610336,0xba96bbcb,0xba91a555,0xba5e6f47,0xba242326,0xba20088b,0xba5dbdb1,0xba59ac36,0xba4430a0,0xb9de08c2,0xb9e189bd,0xb9eda1e4, -0xba5632ab,0xba0d7a8d,0xb9d4cd43,0xb9ec89b6,0xba195219,0xba5a61ed,0xba73c6e9,0xba6b2998,0xba319f77,0xb945747e,0xb9cad4e9,0xba1f865a,0xba8790eb,0xbafa0e4e,0xbb024d13,0xba332da8,0xbaf1f8c5,0xbad99cea,0xb9eb4460,0xba8d3000,0xba86854b,0xbaac2c6e,0xba7fb0c8,0xba9caa9b,0xbac64892, -0xbb2e5e2c,0xbb2fa01c,0xbae0969b,0xba37a183,0xb9b3104c,0xba8552bf,0xba7dc90e,0xba3913a6,0x396ebfb4,0x388e4a0f,0xb968377b,0xbaa25ade,0xba0c01fa,0x39fb6c9f,0x39e2a43d,0xb919f789,0xba337418,0xba802424,0xba263c21,0xb97930f3,0x38f8908e,0xb8c1eff3,0x384b8e88,0x37f6bf4d,0x38f9c9c7, -0xb9c1e224,0x38f9d075,0xbaa6e455,0xbb07d02a,0xb9eee6f2,0xbab3782e,0xbab7ebe0,0xbaf58baa,0xba8b0778,0xbaa04bd8,0xba9e8333,0xbb4bdf05,0xbb3ae961,0xba9217fe,0x39b6aabb,0x39eb69a3,0xbaa701f0,0xba720584,0xb97ad7f1,0x3af2fdb3,0x3ab4e355,0x3a90f37e,0xba4ec928,0x3a28ee54,0x38af8aa8, -0x37a1c845,0xb9c8d522,0xba6add8d,0xba58a199,0xb7974d10,0x38b10969,0xb7b92cd6,0x37d950a0,0x379d8eb7,0xb7a1143c,0x38412d11,0x391cb812,0x384548d8,0x39e6bf5f,0xb9d7c4ea,0xba06fde8,0xbab3c98e,0xbad88a93,0xbb035eda,0xba8e857b,0xbad01680,0xbb4729bb,0xbbe7c3b9,0xbbf7a2fa,0xbb87b587, -0xba03f322,0x3a3b11a4,0xbb089642,0xbaaf7d80,0x37fffa14,0x3b52ce74,0x3b0c73ad,0x39e29d45,0xbb3c1963,0xba3f9272,0x3ba7cbad,0x3b1efd53,0x3b293cc9,0x3a9c1f90,0x39c1e427,0x35c2f5a6,0xb7cc6bae,0xb722ee6c,0xb6ca311e,0xb78472a2,0x37129b71,0xb83c2ecb,0xb82dd121,0xb8cf4093,0xb872e668, -0x37eec41d,0x3a6c2e49,0xb787b22f,0xbb09d4e4,0xbb46f645,0xbb52b21a,0xbae0f673,0x3b0abc18,0x3bfb7a53,0x3c2f4eb5,0x3c2250cb,0x3bc0613b,0x3b07f982,0x3a9adbda,0x3a0159b7,0x3a9ec95c,0x3b6dc075,0x3b326ed0,0x3ba7d262,0x3c263f6b,0x3bed9dfc,0x3b169636,0x3b265e8f,0x3a43316d,0x3a2db38f, -0x38ad203c,0xb8bcd9be,0x384528a7,0x37868a15,0x36df172b,0x37552205,0x367fdafd,0x37b9a65b,0x381542c8,0x3826d428,0x3889dcb3,0xb8ce02d0,0xb98efd07,0x38088807,0xb99d7a92,0xba98927c,0x38f4865c,0x399cab6a,0xba2cce16,0xbb6c482d,0xbbd17d05,0xbbf02e69,0xbb52d281,0x3b082eb0,0x3bdf071b, -0x3b3f7393,0xba60288d,0xbb624ed7,0xbbc9dc8a,0xbb961b1c,0xb9d7d4ca,0x3aabdcaf,0x3bc7b8a9,0x3c1f0da5,0x3c0285d5,0x3a964ce9,0xba4519b8,0x39cb1788,0xb94ecf58,0x383ca00e,0xb8417dc3,0xb65283fd,0xb78fa5d0,0xb79b5efd,0xb80059df,0xb812fa5d,0xb7f7bab8,0x379b5896,0x3935d778,0x391ea3b9, -0x3a315c06,0x3ae14ea4,0x3ab25bc1,0x3ab90edb,0x3af834ae,0x3b8ed063,0x3be86d60,0x3c1a58a3,0x3b451504,0xbb3a405e,0xbc0210ed,0x3a73ff05,0x3be1e62f,0x3bde2811,0x3c211f9a,0x3bc2715c,0xbb8b570e,0x3a9b04b1,0xbc195f41,0xbcc27b5d,0xbbf5d673,0xba60e886,0xba646ab7,0x3947f724,0x37ab2505, -0x388ad054,0x37df4df0,0x380ffeae,0x37ac8704,0x380dea1d,0x38255ef1,0x385a3c56,0x37ae352f,0x38980b9b,0xb943538b,0xba5e3214,0xba5097f1,0xba960321,0xbaeff803,0xbb0c85e6,0xbb424566,0xbb7412ca,0xbb92e589,0xbb7e08e0,0xbb6b6a67,0x392df30a,0x3b69ada5,0x3c08279f,0x3b8dfdb5,0xbbeca200, -0xbbfa072d,0xbbcbbf2a,0xbb955093,0xbb2bcef5,0xba7dfce8,0x3b82e912,0x3b8f921a,0x3b376717,0x3ac4f5bb,0xb9c2f1f9,0xb8c13ce1,0xb8c3a52a,0xb8ae6836,0xb864ddeb,0xb849440e,0xb87f76b6,0xb89e8906,0xb8be5a3c,0xb8397edd,0xb9070e17,0x3892e92d,0x3ad31e40,0x3b508107,0x3b77cb6e,0x3b6e0d0e, -0x3b4b83bc,0x3b1c7128,0x3a96c978,0x398968c1,0xba06d2c0,0xbadfb950,0xbb3f679e,0xbb7273e1,0xbb8156ed,0xbb41c775,0xbaa050a1,0xbb13804c,0xbb7a3089,0xbb9159e0,0xbb912e3f,0x3b4e9f0f,0x3b6583df,0x3b114747,0x3acd5ce8,0x3a78ed7d,0x3a16e864,0x3974d69a,0x3966ed2f,0x392be593,0x38f10df8, -0x38bc02d4,0x3905e182,0x39227cd8,0x3948c64b,0x3907e1d5,0x3929bfd9,0x3a1ac538,0x3a943487,0x3a8ac1d2,0x3a1fd523,0x388a557e,0xba18a201,0xbaa4aa8d,0xbaf64330,0xbb2d6efc,0xbb6a60c6,0xbb451184,0xbb351482,0xbb3b8c6a,0xbb2d8ee9,0xbb1b86c9,0xbabb762a,0xb98d8bc0,0x3aa0a907,0x3b1edbf6, -0x3b5cb72b,0xbaddf19b,0xbb023443,0xbb04e988,0xbafa2fbb,0xbb01195c,0xbabffca1,0xba75719e,0xb9e96f3d,0xb9ade297,0xb9474951,0xb9262341,0xb97e7698,0xb9b7e02a,0xb9e260bd,0xb9faf40e,0xb9b19e13,0xb7b98a2a,0x394ab091,0x3a130dd2,0x3a7f8b04,0x3a4779c0,0x3a3828d2,0x3a1cf562,0x3a3663b3, -0x3a51fcc8,0x3a5deae6,0x399bc8c6,0xb9851a21,0xba45c4be,0xba756f6d,0xba8fad61,0xbab77391,0xbaab38c7,0xbaba8b65,0xbad5302e,0xbaee5842,0xbad0d330,0xbb08287f,0xbae894c8,0xbacfb8e6,0xbaa4c00a,0xba925f10,0xba921499,0xba80cb8b,0xba600950,0xba1b43f3,0xb9a25bef,0xb82e523d,0x39904fa2, -0x3a1fd11a,0x3a8d5c75,0x3ab0bea4,0x3ad4a055,0x3afaf8cc,0x3b14ace0,0x3b191d10,0x3b150734,0x3b15b812,0x3b138732,0x3b12866f,0x3b0eaabd,0x3b13e6de,0x3af8a28d,0x3add1a71,0x3abca140,0x3a91b112,0x3a405a6f,0x39b4be0b,0xb890c746,0xb9e73dc1,0xba3b5394,0xba92e99d,0x3a3eaf6b,0x3a06ff20, -0x3a55a4d2,0x3a693a7b,0x3a8c59e4,0x3a4fbaf3,0x3a864ca6,0x3aa469f5,0x3abe3676,0x3acf1d79,0x3ae00acb,0x3af1652a,0x3b011360,0x3b0759e8,0x3aeee078,0x3ae116ba,0x3b0ea85d,0x3b044938,0x3b03afe7,0x3afe6fcb,0x3b02b971,0x3b03ad4c,0x3b0534aa,0x3b06540b,0x3b06c66c,0x3b093df6,0x3afc27c7, -0x3ae806dc,0x3ad27a71,0x3abffd9b,0x3ab0fa46,0x3aa3fec2,0x3a99b080,0x3a8b4798,0x3a6f03a8,0x3a52813b,0x3b041b99,0xba7707eb,0xba1753cb,0xba2989ca,0xba46e961,0xba5dbc57,0xba6d6730,0xba68baa8,0xba52c54a,0xba02ceca,0xba2ea9ac,0xba411a7d,0xba46b697,0xba92544b,0xba91be24,0xba21c8db, -0xba8c6f6c,0xba8f1cb1,0xba45c7cd,0xba7ccb69,0xba7ce18e,0xba851d22,0xba6bd960,0xba6eb16d,0xba7d1608,0xba9934ab,0xba91a57d,0xba5fc116,0xba1f98fb,0xba20bfc4,0xba83ec0d,0xba592983,0xba3b6f82,0xb9b0dd2b,0xb9f71762,0xba0a2417,0xba64be02,0xba186bae,0xb9ecdeb5,0xba1e2012,0xba3f1992, -0xba5f0f46,0xba652632,0xba7c830d,0xba314cac,0x385073f6,0xb9924b4a,0xb9f8b3d6,0xba410f75,0xbac41555,0xbad711ee,0xba34a979,0xbae6efbb,0xbad18523,0xba0c9c3e,0xba863dbb,0xba907c10,0xbab2ab62,0xba8e2b7e,0xbab4abaa,0xbaef826c,0xbb30efd1,0xbb299124,0xbad52ae4,0xba100c33,0xb9aaa7b0, -0xbabab686,0xba8178c1,0xba21bde5,0x39d4eadf,0xb863a434,0xb9d4dcd4,0xbaac857e,0xba1ba8e4,0x39c61085,0x3856ea81,0xb9a87c79,0xba385733,0xba6f93b0,0xba2844ef,0xb91e7d6e,0x39289ec3,0xb7cf7d3b,0x38fc1633,0x390e6e25,0x39972987,0x389f9fa3,0x3965c0bf,0xba1b7563,0xbabd9d47,0xba1a2959, -0xbaa4c473,0xbab68f8e,0xbaf973f4,0xba949029,0xbabb5ccb,0xbadfae88,0xbb4eca22,0xbb346f36,0xba882e42,0x3a038974,0x39fb92e8,0xbb01ba73,0xba578651,0xb856a51c,0x3b118985,0x3a91a347,0x3a4148d7,0xba8333e2,0x39e8fa8b,0x38b7e169,0xb9b39bf4,0xba115ccb,0xba44e92a,0xba0c971d,0x390a9f3d, -0x38af2388,0xb83ae6eb,0xb6a05954,0xb7ce2d41,0xb8524d7b,0xb88a7fb6,0xb70f1c16,0xb87a3738,0x39c38c6e,0x381090f9,0xb9ba651b,0xba9a14a2,0xbadec164,0xbb121e9b,0xbabe1bf0,0xbb156920,0xbb870c62,0xbbef424c,0xbbec716c,0xbb738737,0x380d056e,0x3a1b59e1,0xbb5ac327,0xbac831c5,0x39a2a0eb, -0x3b6e9129,0x3adad2b4,0xb95975b8,0xbb44c593,0xba4ce8ca,0x3b84224c,0x3b073e51,0x3afd6904,0x3a3fef9d,0x3858bd68,0x381877b8,0xb887c51f,0x377fa55d,0x3676e874,0x36e50fc9,0x37d37c63,0x37645478,0x37a39dcd,0xb7cea64b,0xb8de3246,0xb8b1a318,0x39fd8823,0x39d3ba70,0xbab6d148,0xbb1bb8c1, -0xbb0a981c,0xb9ea61cd,0x3b4b1ed0,0x3c0be37a,0x3c2fc9e1,0x3c0e8db7,0x3baeff3f,0x3b219244,0x3b0f2402,0x3acddf5e,0x3af92b44,0x3b5dc297,0x3b577e0d,0x3bb26983,0x3c1c797b,0x3bc24de2,0x3b3c9e81,0x3b22341a,0x3a906ee1,0x3a3b0a45,0xb8c3227c,0x37a73d91,0x376a5ee0,0x375a4d3e,0xb715a0de, -0x35507a1f,0xb73c9244,0xb6a1dabb,0xb699df6e,0x3795c11b,0x385f9893,0x382582c7,0xb9850aa6,0x38bac68b,0x395b0871,0xba1dba70,0xb8407fb9,0xb9e6bb1d,0xbae836e0,0xbb91d6b1,0xbbd0f853,0xbbcc12ee,0xbaf17413,0x3b233f0c,0x3bae2830,0x3b186c67,0xba6c4372,0xbb6551ea,0xbba0f4fd,0xbb49ccd7, -0x3a66e334,0x3b2426a7,0x3ba463eb,0x3c11cf08,0x3befa875,0x3a521f7c,0xb9c98377,0x39310662,0xb8ed5a66,0x37de1e6d,0xb786a026,0x36dfbc15,0xb48d6f9d,0x3329d134,0xb62a36f1,0xb7c48afc,0xb7dd952c,0xb86d6958,0x392d20a9,0xb6b9af98,0x39995353,0x3ab39782,0x3ace4569,0x3b093c8a,0x3b28f645, -0x3bada9b7,0x3be65723,0x3bf0029a,0x3a724a5b,0xbb83b608,0xbbec2b3e,0x3ab10e64,0x3bdbac78,0x3bbda0ef,0x3c057aa5,0x3b7d1b2c,0xbbb70270,0x38c2043d,0xbbfa30ff,0xbcb716a6,0xbbeaffc8,0xb9213e24,0xb8794e7a,0x388c2d99,0x385992da,0x378abc72,0x37056857,0x34b0aa74,0x36808cb3,0x36ca0eb8, -0x377354a6,0x37e7946b,0x384731dc,0x37a796b8,0x38b0ce0c,0xba4e4a58,0xbaacf81f,0xbb001836,0xbb24fce3,0xbb31a8e3,0xbb5f2d70,0xbb80da97,0xbb9025d5,0xbb6fe8fd,0xbb54262d,0x3a353618,0x3ba8a97e,0x3be0e16d,0x3b0b178b,0xbc0ac4c3,0xbbc8273f,0xbb670eb3,0xbb1e67f1,0xba56a412,0xbacc66fd, -0xb9ed23f3,0x39af33ec,0x39fbb9ff,0x3a29ae8a,0xb9e18728,0x37b96d97,0xb8bec95c,0x37288406,0xb75f46c1,0xb65f3459,0xb7aa5165,0xb7d08b6e,0xb87e46e5,0xb8961f1a,0xb894cf2f,0xb92d66e4,0x3a7e472c,0x3b247c4b,0x3b564f40,0x3b511d53,0x3b379d2c,0x3b0dc758,0x3a6e9ae2,0x379c84fd,0xba3bbd5e, -0xbac2dc0d,0xbb2879eb,0xbb523e83,0xbb537bad,0xbb0753a8,0xba1f7d7d,0xbae23d7c,0xbb5922c4,0xbb8c7ef2,0xbb5cf4b9,0x3b5459eb,0x3b6e7ce3,0x3b29cdf3,0x3ad9a140,0x3a7fa478,0x3994a91f,0x39613786,0x3883efac,0x37a5315b,0xb681ebcd,0x372a7a03,0x380af02e,0x38564b89,0x38e4a05d,0x3933f877, -0x39159261,0x39be8cf1,0x3a9309e3,0x3aa77bbb,0x3a8587b9,0x39e29a1f,0xb9723bde,0xba71fe83,0xbab8c57b,0xbb0c08be,0xbb505744,0xbb362a51,0xbb2e914d,0xbb38d5ea,0xbb2c36da,0xbb185eee,0xba9683b4,0xb93de3f1,0x3aace113,0x3b1c9332,0x3b5cf335,0xba9f8381,0xbaba4fef,0xbac60524,0xbab5147b, -0xbab54f69,0xba6c2f5d,0xb9fb269c,0xb80bb366,0x378f1705,0x38b85dc3,0x381b0d01,0xb797f497,0xb8aa7cfa,0xb93a8095,0xb9e74f9b,0xb9f639b0,0xb990a54a,0xb92292c5,0x392c2ed8,0x3a25d055,0x39b40f7b,0x3977d321,0x38873a2f,0x376ac97a,0xb7ac517a,0xb8d8dfdd,0xb9cd3e8f,0xba37dac4,0xba771699, -0xba7787bb,0xba76d2a0,0xba9155d5,0xba83f2d6,0xba8f7e48,0xba9ff8dc,0xbab141c9,0xbaca1556,0xbb016a85,0xbaf3dba7,0xbad72e6f,0xbac00ad5,0xbab1cb6a,0xbaaef10b,0xba9fedd7,0xba8dd2d5,0xba669e1a,0xba2f2902,0xb9f614bf,0xb9904b05,0xb8151a71,0x39e29ae0,0x3a4c8364,0x3a9184e8,0x3ac381b4, -0x3b022532,0x3b09d730,0x3b0216a8,0x3b008874,0x3af983f4,0x3af2e9f5,0x3ae91406,0x3aea5bfd,0x3ac154d7,0x3aa66c61,0x3a87a03c,0x3a3d54fe,0x39c7997d,0x3869eae0,0xb9937a9d,0xba159805,0xba4c4986,0xba94eed2,0x39b5e5a3,0x394ea9e7,0x39daf5ca,0x39f9e6f5,0x3a2c916f,0x39c53643,0x3a15df84, -0x3a4417c8,0x3a6b81f7,0x3a84955d,0x3a94e212,0x3aa556ea,0x3ab85b7b,0x3ac56f82,0x3aacb393,0x3a9ddcf0,0x3ae3252c,0x3acc190f,0x3ac94788,0x3ac01468,0x3ac45a05,0x3ac3e1c7,0x3ac3dc89,0x3ac3ee41,0x3ac2c168,0x3ac4ff22,0x3ab16da9,0x3a9fcd4e,0x3a8dc32d,0x3a7e89fb,0x3a66dbc7,0x3a50cb64, -0x3a3ee903,0x3a2441f5,0x3a00a99c,0x39d4e3e5,0x3ab743d4,0xba63a6c1,0xba0bc567,0xba2794c2,0xba34284d,0xba4bb47b,0xba5f1d66,0xba4cfc61,0xba3eee7c,0xb9c3f932,0xba20385d,0xba396615,0xba42fc08,0xba93d617,0xba936811,0xba32058f,0xba784fe5,0xba6dbafe,0xba4569e9,0xba667ce1,0xba61619b, -0xba733ba8,0xba5ea578,0xba64fd63,0xba811763,0xba8e464a,0xba85692f,0xba50a7cb,0xba133195,0xba194e70,0xba8b22a3,0xba49860c,0xba252428,0xb9682b9c,0xb9eb2719,0xba07753f,0xba50efed,0xba0b53a0,0xb9c6baf9,0xba1d8113,0xba32a584,0xba4295af,0xba3f53e9,0xba75e031,0xba180f47,0x396f27ea, -0xb920b06a,0xb985f344,0xb9c15527,0xba63dd1d,0xba89e75b,0xba058bd8,0xbac1ca06,0xbac1d35d,0xba17aba9,0xba603068,0xba820c48,0xbaa81337,0xba92d403,0xbabe9057,0xbb021e25,0xbb2517be,0xbb17595a,0xbac00f5b,0xb9e7cfac,0xb9b32076,0xbad85a57,0xba77ae9e,0xba024f22,0x3a146cea,0xb8bcc360, -0xb9e6d78b,0xba95724f,0xba0017c0,0x39c7304a,0xb9210b2f,0xb994d7e7,0xba17f9eb,0xba452413,0xb9cc6e76,0x3728566a,0x38b670ad,0xb721f164,0x38d1dc03,0x38e0165c,0x3994ae0b,0x3924147a,0x395ea5bf,0xb7cba6be,0xba3445ec,0xba206846,0xba8a5c12,0xba9c9794,0xbae5b7ae,0xba98be14,0xbacabf01, -0xbb077783,0xbb412d7d,0xbb220f51,0xba82daa9,0x39e62101,0x3997f0e1,0xbb218d69,0xba487cec,0x3886aa6c,0x3b1d485d,0x3a625f32,0x3a02321b,0xba5cc12a,0x39db8610,0x397a85aa,0xb9e94836,0xb9f06232,0xba112c17,0xb9251172,0x393f765e,0x37428600,0xb833518a,0xb638f1b0,0xb8032bc3,0xb8812492, -0xb8de72ff,0xb85869f1,0xb8c31c50,0x38c744ce,0x396ce49a,0xb9055fd0,0xba64ccec,0xbac6aade,0xbb127efc,0xbae50a9b,0xbb374be3,0xbb9e5e04,0xbbe262b4,0xbbd0fc00,0xbb53e651,0x398458f7,0x3989a738,0xbb86bd59,0xbad5937c,0x39fd3f17,0x3b7b789c,0x3aaf9636,0xb9e4090f,0xbb1f3959,0xb9e77436, -0x3b273391,0x3adfab83,0x3acb3dcb,0x39f08a14,0x36cd6995,0xb85ea761,0xb7f1e4fc,0x37db5fb3,0x3612876b,0x377b944c,0x380918f1,0x3837f707,0x37f66c7b,0x3808643a,0xb8446b0c,0xb8f63a87,0x3912cd5b,0x3a0728e9,0xba37607f,0xbad8bd38,0xba96b0ee,0x3a0b5d6e,0x3b65331a,0x3c07c28b,0x3c1ca5a1, -0x3bdb0f96,0x3b83a2d0,0x3b0700ed,0x3b11e2ee,0x3b07594f,0x3b0b5ddf,0x3b2952c4,0x3b4cfb1b,0x3ba0c7ec,0x3c035ddd,0x3b892522,0x3b1891fe,0x3af19f39,0x3aa226e8,0x39d1f039,0xb91b350b,0x38a9c909,0xb6eade05,0x36407d7a,0xb74a8e6c,0xb6aecc07,0xb7a8d52c,0xb7a2c8c1,0xb793e443,0xb6dc1d1b, -0x378fe2ce,0x38b0adec,0xb92bef6d,0x37dc50d3,0x39dc9345,0xb993c826,0xba0b194e,0xbabb3f50,0xbb425d20,0xbbadf776,0xbbcd8736,0xbba67c64,0xba552102,0x3b29bb8f,0x3b82bc7b,0x3af2eb64,0xba40e002,0xbb52a3aa,0xbb6de959,0xbaedf654,0x3ac9c84a,0x3b2e8430,0x3b87b5b9,0x3bed8022,0x3bb8d969, -0x399661ef,0xb990d4ef,0x38c6d82d,0xb8873ee2,0x3801e652,0xb6373a6a,0x3753842d,0x37446fb3,0x374921f3,0x37323386,0xb6a863bf,0xb6bc811c,0xb888240b,0x38b43a57,0xb7923031,0xb8c27d81,0x3a8195e7,0x3aec03b6,0x3b3533dc,0x3b650cc4,0x3bcd58bc,0x3be75c91,0x3bb9cf19,0xb822c843,0xbb7df4e6, -0xbbb0964e,0x3b0361c6,0x3bcddbb5,0x3ba0f547,0x3bd19f0a,0x3b18a7f8,0xbba9fbd9,0xb90be1ba,0xbbbd48c4,0xbc98d91a,0xbbd39a86,0x39982844,0x3877d88d,0x380caa6a,0x37b273dc,0xb76be452,0xb7295673,0xb770c385,0xb7751894,0xb75b132e,0xb5dee4cc,0xb5812f23,0x382d9e76,0xb65aa7a8,0x3919853f, -0xb9eab522,0xbad001ec,0xbb1838d9,0xbb2b23d1,0xbb331737,0xbb56123e,0xbb65de42,0xbb6f7380,0xbb3c45d9,0xbb0993ff,0x3ad1a653,0x3bce4c7f,0x3ba7a23f,0x394629d1,0xbc05c28b,0xbb8b7c32,0xba9d14b2,0xb9844530,0x3822de4c,0xba8e76e0,0xbb828ce7,0xbb28dfbb,0xba4f79d2,0x394a0481,0xb98a9492, -0x387cf1f3,0xb767020f,0x3826318e,0x379a9ff5,0x3801eaf3,0x378e586d,0x362bbb57,0xb7253503,0xb8681eff,0xb7f79b45,0xb9701bb1,0x39f73842,0x3af4ae99,0x3b3ab1cf,0x3b37e87a,0x3b24c7ff,0x3b021b49,0x3a5ecd76,0xb72f46d8,0xba5100d4,0xbaa7a40b,0xbb145b68,0xbb34273f,0xbb317a4c,0xbac5496c, -0xb99ff941,0xba815235,0xbb05d4ee,0xbb360a8c,0xba9c0506,0x3b4539d6,0x3b68b728,0x3b2fdf76,0x3acc4330,0x3a2d4334,0x382bda93,0x38d18dcb,0xb8b8f9d2,0xb817e02c,0xb88a3bf6,0xb868fd92,0xb82921b0,0xb6982145,0x37ba3d29,0x38b7165a,0x3910f6eb,0x3947c4c2,0x3a89789d,0x3abf4c3a,0x3ab73225, -0x3a580229,0x394f93aa,0xba0aee61,0xba72b2f6,0xbad19bcc,0xbb2e6519,0xbb2203c3,0xbb227ebc,0xbb2e6351,0xbb20875f,0xbb0902b7,0xba5a1643,0xb9265076,0x3a970591,0x3b055142,0x3b40d2d2,0xba3c28b6,0xba5a896c,0xba823941,0xba53d66f,0xba3aa3d0,0xb9c79ed7,0xb8963420,0x397cf5e9,0x390a581f, -0x394011a0,0x39110a4e,0x38f5e16b,0x37fc3504,0xb699a0f2,0xb93cc7f2,0xb9d04889,0xb9bbf030,0xb9c5ecc6,0xb932d58f,0x3966b3d6,0xb8dc3fab,0xb960adfb,0xb9d6f674,0xba0fe5c8,0xba339e13,0xba615c75,0xba6a3d9b,0xba802a5c,0xba8256c2,0xba65caec,0xba4d22b0,0xba5eb9aa,0xba41e95d,0xba4eb5f9, -0xba5e65b1,0xba64975e,0xbaacbdc3,0xbad874dc,0xbadf0222,0xbac3e907,0xbabf8317,0xbaafc2d4,0xbaa5d5ad,0xba90c4b5,0xba754b5a,0xba47aab3,0xba26c953,0xba039ee1,0xb9de54da,0xb9a8cc83,0xb826321f,0x398fa52b,0x3a266b65,0x3a877b85,0x3ad4df09,0x3ae31458,0x3ace5e90,0x3ac6da2e,0x3abbb2a6, -0x3ab044be,0x3aa4b384,0x3a9d86fe,0x3a7d8298,0x3a4fefc6,0x3a1def72,0x39b4c7af,0x38a505a7,0xb92dceea,0xb9d5d712,0xba1eddd3,0xba449bd7,0xba85de4c,0x373b85c3,0xb897dea4,0x389e0aad,0x38ed5b1a,0x39896066,0x36833f44,0x3900f87b,0x39532c6c,0x399b464e,0x39c1a937,0x39fa82da,0x3a1a7701, -0x3a4374f8,0x3a62fbf8,0x3a4ffdba,0x3a3a3d35,0x3aa0f2c7,0x3a8af0e6,0x3a866f3d,0x3a75364f,0x3a792e95,0x3a72dde4,0x3a6d2f24,0x3a68f410,0x3a623c90,0x3a5fc13a,0x3a41f389,0x3a26a844,0x3a0c0db8,0x39f11df8,0x39d1dd59,0x39b40b8d,0x399a95fb,0x39639d9a,0x38f37ed6,0x386d541a,0x3a482228, -0xba5f4d9b,0xba1521df,0xba3817ff,0xba375526,0xba43ba94,0xba45a8ce,0xba44f6a0,0xba344eb9,0xb981ee0a,0xba0a448b,0xba249a91,0xba2960a7,0xba81084e,0xba886a70,0xba3b5675,0xba6b1731,0xba593ae6,0xba3b0f52,0xba55800f,0xba53b304,0xba623ff6,0xba5b01ff,0xba6475eb,0xba845c40,0xba852e54, -0xba7882dc,0xba4d5b63,0xba19cffd,0xba243a2a,0xba91e2f5,0xba4c0fa0,0xba2744fe,0xb97dec3c,0xba083e4b,0xba1a3971,0xba4e4777,0xba151325,0xb9f208a4,0xba3e004f,0xba2652b2,0xba2fdc7b,0xba2f44ac,0xba5c2078,0xb9e2ec61,0x395599c1,0xb8b68118,0xb9184a9d,0xb941272c,0xb9fedaee,0xba119ae1, -0xb996889a,0xba8743d8,0xba9e2a31,0xba330a9e,0xba34ce18,0xba614017,0xba9aff40,0xba96103f,0xbac3b58c,0xbb042289,0xbb11bbb4,0xbb008e83,0xbaac33b9,0xb9e97251,0xb9f22908,0xbaeb83ca,0xba83c69c,0xba115b93,0x39ed8355,0xb994a44a,0xba1de535,0xba8de3f5,0xba1178a6,0x38e920b0,0xba05cb86, -0xb9aead4b,0xba09490e,0xba091261,0xb90b33d5,0x38aa2388,0x36b31ccf,0x367c120c,0x38a04404,0x38bd6dd7,0x39586d44,0x392fd217,0x392fa05b,0x394034ed,0xb8d72d3b,0xb9eeb31f,0xba56eded,0xba784769,0xbac51db9,0xba987677,0xbad12cb7,0xbb11136a,0xbb26f031,0xbb075055,0xba808cbf,0x39538c3b, -0xb89b6fd5,0xbb347bad,0xba6a2529,0xb8f5ae47,0x3b09137e,0x39c13210,0x3870c69f,0xba5f7850,0x39004cb1,0xb850c409,0xba51f9fb,0xb9e9bc53,0xb9beae8d,0x387f3736,0x38e5ee32,0xb7c6bce3,0xb6e5f55f,0xb635cd85,0xb7f7397a,0xb83b2271,0xb8ad0561,0xb89ebed0,0xb89af80e,0xb857bc9a,0x38f0ecb1, -0x38849703,0xba04b5a4,0xba9d3589,0xbb051a1b,0xbaf67d97,0xbb475f29,0xbba2c75b,0xbbc2e8cf,0xbba8d24c,0xbb2fa938,0x3965513c,0xb9763425,0xbb94bb8b,0xbafd7fb4,0x393435db,0x3b595828,0x3a314fb5,0xba66326d,0xbb0c3a12,0xba0f15c8,0x3aa48bef,0x3a959b9a,0x3a88ad07,0x39378bd7,0xb837ac37, -0xb7dfd819,0xb69b3d12,0x3728278b,0x35da3ce1,0x377946fa,0x37c4b218,0x38211659,0x3812bc2b,0x3826fdd7,0x37122102,0xb82d39f9,0xb80af075,0x39c6e2e5,0xb931ca31,0xba824d91,0xb9982d23,0x3aa16e72,0x3b6692a5,0x3bee9587,0x3bfded7d,0x3b9586c2,0x3b221568,0x3ab3b695,0x3b01470d,0x3b196949, -0x3b0dff54,0x3ac99e0a,0x3b2fc67c,0x3b86a0e3,0x3bce39e0,0x3b241a48,0x3b15c34d,0x3aa69614,0x3a7c225f,0xb89a70cb,0x380cf613,0x37a87b34,0xb6896a33,0xb6679d5a,0xb6f63087,0xb70b87c3,0xb782d4a7,0xb79d6118,0xb7b1c569,0xb778357c,0xb75ed1dc,0x384ef1f5,0xb809f304,0xb8d7320b,0x39acc39f, -0xb92a1014,0xba76a887,0xbb092ada,0xbb67a745,0xbbaf2bac,0xbbafdcc2,0xbb5e539b,0x3a06d7ee,0x3b41e021,0x3b47a5b9,0x3ac8cc07,0xba0832d8,0xbb32fcdb,0xbb15be06,0xba061256,0x3b1c6da3,0x3b495241,0x3b54e559,0x3bc0b225,0x3b848bc9,0xb981908b,0xb8a5e6c9,0x38104f25,0xb79535aa,0x379564e3, -0x36db7a3b,0x3749ed39,0x37571d4a,0x37652e4e,0x37760e58,0x36f9f538,0x36f60b16,0xb81287ad,0x377fde97,0x386e525d,0xb93fb727,0x3a4a347a,0x3b01c127,0x3b52ab3f,0x3b88164a,0x3bd4b940,0x3bd0cc60,0x3b78f1d7,0xba81a7da,0xbb728d5c,0xbb7cbaed,0x3b0d7a56,0x3bae3aec,0x3b8387f2,0x3b8f0497, -0x3a304c15,0xbb9f36ba,0xb9d7eb58,0xbb9e16bf,0xbc661e03,0xbba137c3,0x3a314e6a,0x3790a210,0xb6fe819f,0x367050f6,0xb7bf358f,0xb7928551,0xb7a10c9f,0xb79955f6,0xb7919946,0xb75afe0c,0xb759020c,0x374e27d2,0xb6908e71,0x38d0c0e1,0xb8da920e,0xbab73495,0xbb17c8e8,0xbb210cf4,0xbb2b488a, -0xbb49652a,0xbb492144,0xbb450bc3,0xbb18ff4b,0xba926b02,0x3b06fa5c,0x3bcca174,0x3b41fb78,0xbac1d48a,0xbbe00850,0xbb3683b9,0x3934aea7,0x3a93d0d4,0xb990e021,0xb9390f91,0xbbc9aee5,0xbb811791,0xba839aa0,0x3925f59b,0xb8bdaaf5,0x384a4ffe,0x37c56230,0x384510fc,0x380ac8ac,0x3817c483, -0x3800b440,0x379ba177,0x37d83477,0xb80620a0,0x379b1aaf,0xb9479d6d,0x38e56987,0x3abe846e,0x3b20236b,0x3b17cad7,0x3b05fb37,0x3ac73efc,0x3a14f804,0xb9667b9d,0xba86b097,0xbaadcd53,0xbb08fb1f,0xbb0da081,0xbb0be287,0xba8084ea,0x3887905c,0x38560eec,0xb9b9a1d0,0xba4e5cb4,0x3a85992f, -0x3b13ca21,0x3b43b95b,0x3b287010,0x3aa02704,0x391b88b9,0xb745f2eb,0xb76708e8,0xb8d66ee1,0xb8a2f0d1,0xb8a7bdd5,0xb89b154e,0xb87fa848,0xb8469e08,0xb7e5d880,0xb684bff6,0x38fe1513,0x37a287c2,0x3a54201a,0x3abd6cd7,0x3ac7e7ce,0x3a8862cc,0x3a0cce22,0xb8fd1732,0xb9e17762,0xba8884fa, -0xbb075cee,0xbb082c18,0xbb0d94a3,0xbb173181,0xbb07273d,0xbae1cf95,0xba2b7cd1,0xb9a26964,0x3a3686db,0x3aaecb84,0x3b018b72,0xb9642ced,0xb96a7644,0xba01f529,0xb987b979,0xb93934b9,0xb86a037c,0x392b398c,0x396e00de,0x39456e01,0x3942cca8,0x3938213e,0x391b3147,0x38db1231,0x38b5f3fe, -0x379ae694,0xb93e2d51,0xb9a8c7a7,0xb9fb824c,0xb9ed48b2,0xb9539b3b,0xb9f793cc,0xba0df065,0xba368ef3,0xba659aa2,0xba899f9e,0xbaa390d9,0xba96122d,0xba91b2ee,0xba8752ca,0xba5836cd,0xba2cc55e,0xba1eac22,0xba03563d,0xba05a1b2,0xb9fe8f4c,0xb9c64419,0xba8908dd,0xbaa44ea2,0xbab4a011, -0xba9ebe8e,0xbaa00099,0xba8c3b66,0xba6f87ac,0xba40d5a1,0xba114582,0xba0dcfea,0xb9fc7705,0xb9dda5a9,0xb9b84a82,0xb9a65d21,0xb98664b6,0xb8c8c636,0x3959620f,0x3a15086a,0x3a989bd3,0x3a9fda20,0x3a89a880,0x3a7eba3f,0x3a658c56,0x3a4b0e31,0x3a33ef67,0x3a1c6fd8,0x39ea6949,0x39abc925, -0x394edec3,0x378a8d48,0xb92f0c2b,0xb9ae03c4,0xb9fafbfd,0xba1a62ce,0xba34ef82,0xba6257fe,0xb96d9a77,0xb988fd4d,0xb95121a0,0xb94190f1,0xb8d2e59d,0xb9978518,0xb988a8a8,0xb989404f,0xb969cb3a,0xb906abbb,0xb80b5bbd,0x386455c9,0x39224f82,0x398521a9,0x39951101,0x398b26b3,0x3a38b32a, -0x3a11e831,0x3a06fd5f,0x39e235c8,0x39e421bf,0x39d169c6,0x39bf5914,0x39b1bee2,0x399f9c57,0x399073ae,0x39591a57,0x3913918b,0x38aa5237,0x382b665b,0x374f04c0,0xb774b271,0xb83c9668,0xb8c83818,0xb92134a7,0xb94a2a12,0x396dde0a,0xba3ff72d,0xba0934d3,0xba294198,0xba2b70b6,0xba3740f5, -0xba3b1119,0xba2eb11a,0xba298e8b,0xb9734cb2,0xba00e0dc,0xba19ee65,0xba1cc002,0xba63038f,0xba743795,0xba3edd13,0xba5ea09b,0xba40f546,0xba3d0722,0xba3764e6,0xba336642,0xba35396d,0xba3cc84b,0xba46af25,0xba6a6f21,0xba5a040a,0xba4a044e,0xba2fc4e8,0xba08f5bc,0xba14ed3d,0xba826630, -0xba30ef34,0xba0eed90,0xb947cdf2,0xb9f860e2,0xba0cc118,0xba2ec2e3,0xba065a23,0xb9f0443a,0xba3fabb7,0xba2545ce,0xba11dc03,0xba272cf5,0xba2c52f8,0xb97d2fa2,0x39326356,0xb7b810a7,0xb6b88559,0x35e843c5,0xb8de04a6,0xb90f426b,0xb8271522,0xba01ee99,0xba4b755e,0xba3c97e2,0xba070613, -0xba325a24,0xba7a5893,0xba87f352,0xbab2a70d,0xbaecb6cc,0xbae702ae,0xbac468bd,0xba8d1d78,0xb9d6a4a0,0xba006c60,0xbad8e721,0xba6c2eff,0xb9fe1d6a,0x39d14634,0xb99e21a2,0xba15ab64,0xba65c585,0xba069dc7,0xb866826a,0xba41150b,0xb9d31061,0xb9f7b7cd,0xb97c2214,0x38f0a9a1,0x38e048f8, -0xb7e3b195,0x3638def3,0x37c6589f,0x37241036,0x387deaa2,0x3885103d,0x3894154a,0x39251da7,0x394be044,0xb90b3db0,0xba0fe77d,0xba26a700,0xba9226ed,0xba869278,0xbabcfcd5,0xbb04a211,0xbafc5313,0xbac2c471,0xba58773f,0x385e22d1,0xb992199a,0xbb25dccb,0xba4ff8d4,0xb9010242,0x3aeb4d5d, -0x39098bd4,0xb8dddf3d,0xba2d41dc,0xb83818df,0xb954ea80,0xba88f4ff,0xb9f79f6f,0xb8fc7e04,0x3919fe35,0xb7e11c57,0xb850ac74,0x3671912c,0x33fab8c4,0xb7459ec0,0xb7367b99,0xb7efa78f,0xb80475b0,0xb8195a30,0xb8a081b9,0xb84fba15,0x38d4be39,0xb91e6463,0xba504bf7,0xbad4e0ee,0xbaf084c8, -0xbb41687d,0xbb949714,0xbb97b42f,0xbb760f04,0xbb08101e,0x38dd1f90,0xba0f8996,0xbb898da3,0xbaee97f2,0x389bf683,0x3b381000,0x39c90355,0xba65be2f,0xbacddc82,0xba03892e,0x3a1ad0ab,0x3a79a95f,0x3a223afc,0x386e6014,0xb8734edc,0xb74c1542,0x37f7e310,0xb5e6ce70,0x36271194,0x36aef186, -0x36fd8a53,0x3768b012,0x3780eb1c,0x37af14f5,0x380ca366,0x379121ef,0xb889d03b,0x39479b68,0x390d1fc2,0xb98c8ee9,0x3a0b1477,0x3af5ac5b,0x3b680318,0x3bc86f5e,0x3bc5162d,0x3b4910b5,0x3ac33d88,0x3a827b84,0x3adf5fe8,0x3b24aac5,0x3b0d05c0,0x3a1e7210,0x3b0b7743,0x3b53d20f,0x3b991080, -0x3ac29647,0x3aea8d9c,0x3a87a316,0x3a1c3490,0xb979df93,0x390e7f0f,0xb86b6282,0x375d3f0a,0xb7815207,0x3620658c,0xb6d308f3,0xb695af99,0xb7020425,0xb71ba341,0xb72937a2,0xb7a7a49d,0xb53575b7,0x37a6516d,0xb8cf65af,0x390f6109,0xb96a3a83,0xbaacb75d,0xbb2590d8,0xbb77eb53,0xbba24fe7, -0xbb8e0c57,0xbb0a235b,0x3a9a59d5,0x3b37965e,0x3b08fbca,0x3a8090e7,0xba013112,0xbb0fbd8c,0xbaa9a8e4,0x3976045e,0x3b1e44e7,0x3b359066,0x3b107471,0x3b88d74c,0x3b1d18b9,0xba051704,0x389b5c7c,0xb7397744,0x376a3bbe,0x36eb3c89,0x36b7dcda,0x36ac5d86,0x36b44609,0x36d7eb1d,0x36c65283, -0x37279ac5,0x36d56f81,0x373f3d29,0xb84199d1,0x38be6e6c,0xb9040621,0x3a205f15,0x3b00a630,0x3b53e354,0x3b8a0eef,0x3bbf74d8,0x3ba6f017,0x3b0cd61b,0xbad1c4aa,0xbb57a51b,0xbb1ff837,0x3b034c8b,0x3b85d4ce,0x3b4273d7,0x3b1a21ac,0xba2177e5,0xbb82b518,0xba01a983,0xbb78dcae,0xbc1d7a4d, -0xbb4d4997,0x3a7a031a,0xb96a4ab5,0x387819af,0xb82aeb6f,0xb6bd5c11,0xb7777f1d,0xb6f9b6bc,0xb71f9ae2,0xb6f85571,0xb719772f,0xb70724a5,0xb74cf13c,0x36bea020,0x367e1a53,0x39069e47,0xba7de640,0xbb05419b,0xbb06e9ae,0xbb145581,0xbb2cae01,0xbb1ebb89,0xbb10176a,0xbadc9030,0xb774912f, -0x3b218269,0x3bb65527,0x3aa26f4d,0xbb1a2012,0xbba2640a,0xbae01ed1,0x3a64a012,0x3b1973b7,0xba1f8aac,0x3a93c1c1,0xbbd1eddc,0xbb78acf2,0xb97b0ea8,0x38185081,0x37923621,0x37ff7f31,0x380bfd23,0x37ab539e,0x37a3d651,0x37812ff0,0x378710b6,0x374530ff,0x37b01626,0x36ab1102,0x378f2c25, -0xb88db805,0xb913993a,0x3a83a03d,0x3b02e465,0x3ae8e5c6,0x3ac8159a,0x3a87cc69,0x39b93d30,0xb99c49ad,0xba8e3114,0xbaa4bdcd,0xbaf08608,0xbad8361c,0xbad5d50c,0xba1408a9,0x39ee10f2,0x3a87f4ae,0x3aa389a0,0x3aabf617,0x3b410cd9,0x3ab17d16,0x3b1601f8,0x3b0cd2fd,0x3a18cc07,0xb8e81129, -0xb817d971,0xb8a4c1a0,0xb877cf88,0xb849c9db,0xb819115a,0xb811a0d7,0xb7ec5296,0xb8021fee,0xb7d67beb,0xb83f62be,0x37e982d5,0xb6c4c090,0x39ec71bf,0x3aa3f99f,0x3abd4887,0x3a8d0d60,0x3a3e2ba0,0x394f2b63,0xb7c7a9e5,0xba0b21ec,0xbab686f6,0xbacc4f7e,0xbadc00be,0xbaeae7e6,0xbacc0ab8, -0xbaab272a,0xba1763ff,0xba16e620,0x38238695,0x39ebf988,0x3a641e90,0x396bb608,0x3989dfc9,0xb87c574d,0x38f8a21e,0x38a411a7,0x39184b46,0x39348da6,0x390473ad,0x38d32a04,0x38a1546c,0x3894aa15,0x38837150,0x3872436b,0x388f8537,0x388920a1,0x381aa407,0xb91b3e23,0xb9f05d05,0xba1fe95f, -0xba08abb0,0xba3613da,0xba41f11b,0xba5d4060,0xba841c3e,0xba98d4bb,0xbaafba51,0xba9c8123,0xba926157,0xba852210,0xba46184d,0xba0d3a32,0xb9c27e05,0xb9818926,0xb94f53d9,0xb8ceefe4,0x38b487fe,0xba56e866,0xba6f7c4e,0xba88e99b,0xba69f4a5,0xba63cb88,0xba3b0238,0xb9f48feb,0xb9a5ff50, -0xb93d8234,0xb950a4a9,0xb9353940,0xb92d5352,0xb90c17be,0xb9244eeb,0xb9677901,0xb98784b3,0xb90ac2e2,0x3911b448,0x3a29a2d8,0x3a2f73b1,0x3a065a3f,0x39e10518,0x39b20c96,0x3979f2c0,0x392605b5,0x38833741,0xb682ce98,0xb87d43ec,0xb90704e2,0xb975c2fb,0xb9b69605,0xb9edfef6,0xba0b48a1, -0xba1833ff,0xba2acdf6,0xba42070b,0xb9bebb32,0xb9c234ac,0xb9b5bb3a,0xb9bc2dab,0xb9afd2d5,0xb9f31704,0xba00e725,0xba05d50a,0xba0251cf,0xb9e2e690,0xb9c19429,0xb9a2e82b,0xb9820a12,0xb933cf6e,0xb8ee2aba,0xb8b16059,0x398d3146,0x392e8e03,0x390183f5,0x3826a7f3,0x38104e09,0xb6528801, -0xb82eca0d,0xb8911033,0xb8d9e232,0xb915f406,0xb93720a3,0xb95cb13f,0xb97789ba,0xb98376e3,0xb984faea,0xb9852749,0xb98c8ea2,0xb999e099,0xb9a5578f,0xb9b12878,0xb921d782,0xba1dc4e2,0xb9ec0582,0xba13d32e,0xba0f312f,0xba0f34e7,0xba1e1af4,0xba1068f0,0xb9fc83bd,0xb9067660,0xb9ae7d82, -0xb9d2413e,0xb9d25b94,0xba15e259,0xba23e326,0xba0938c9,0xba2090a8,0xba1c57a0,0xba2dec2c,0xba0374e1,0xba06870e,0xba0d9852,0xba19b429,0xba243294,0xba431a93,0xba2a3247,0xba1dc839,0xba11a6c5,0xb9f1b58f,0xba044c17,0xba591fca,0xba16720b,0xb9f57369,0xb93bc53e,0xb9dd0271,0xb9f34858, -0xba077df9,0xb9e2e528,0xb9cc8132,0xba299fbb,0xba06c924,0xb9eac2e8,0xb9f0aa84,0xb99534b9,0xb80d1ca5,0x389fcb27,0x37709b62,0x37f2d8b1,0x381eb1e3,0x37a2869b,0x37007869,0x3874d68f,0xb8d5d537,0xb9830bef,0xba03854a,0xb9c945a7,0xb9e5c3e7,0xba3bc06e,0xba66fce7,0xba977183,0xbac3b743, -0xbaab8468,0xba8dcc3a,0xba5f3a90,0xb9d27899,0xba04dbfc,0xbab641b8,0xba514503,0xb9f00f73,0x3987fa4e,0xb9a0d8ba,0xb9ff9f9e,0xba1e9e57,0xb9d4bd5b,0xb9027be7,0xba4b207f,0xb9c28654,0xb972df7d,0x381b1391,0x38c955c3,0x38012e03,0xb7e6f2aa,0x362e5e3d,0x36782f6a,0x366b9dd4,0x37a733d2, -0x378bce5a,0x369138b8,0x382f6dec,0x38ec716d,0x38bc6e9f,0xb936c073,0xb9b4d75d,0xba3efe70,0xba5f1f47,0xba9d693e,0xbade6a7e,0xbab14533,0xba8350a5,0xba356a11,0xb90c8e38,0xb9f20d1b,0xbb0a322f,0xba456fac,0xb974d340,0x3aaac356,0xb8972824,0xb94141b7,0xb9bfb01a,0xb8ca9632,0xb9441faf, -0xba85a1e2,0xb99a3d2e,0x38361f1f,0x379401f8,0xb84c63b8,0xb738537d,0x3727609d,0x3539265d,0xb6777588,0xb607fd36,0xb7372e66,0xb7244b01,0xb6ba29cd,0xb782acea,0xb86e0321,0xb72b6c32,0x38198dcb,0xb9c1e255,0xba978602,0xbad6fc78,0xbb299f87,0xbb76cfc8,0xbb5955c1,0xbb2496ab,0xbac92831, -0xb8cb9d34,0xba490eea,0xbb64ab04,0xbadd21a4,0xb92bdd21,0x3b06b5f9,0x3919b073,0xba36c42e,0xba5b6b5f,0xb9971397,0xb8832472,0x3a22ea72,0x39c7e6aa,0xb8cf0897,0x3785ad0c,0x376da19a,0x374a87de,0xb6ebb991,0x35e8110e,0x35820761,0x362a92f1,0x36a3155b,0x36c29b1d,0x362d0eb8,0x3726f200, -0x37dd4705,0x35d4c50f,0xb775aecf,0x3981eef5,0x39a438ce,0x3a83da0f,0x3b088544,0x3b50f98d,0x3b96d844,0x3b882b42,0x3aedcd6a,0x3a33f6e5,0x3a1fa003,0x3aac4670,0x3b18b881,0x3af2b004,0xb955a554,0x3ab72c81,0x3b0ccce1,0x3b425858,0x3a0b571a,0x3aae64ae,0x3a4e3e63,0x39176c32,0xb92d62ca, -0x38eb9d1e,0xb88c3030,0x37b63afa,0xb73e7c8d,0x36a3ee0e,0xb688575a,0xb5475040,0xb675139f,0xb632249c,0xb64edf7b,0xb6418082,0xb7af4610,0x37e1fca2,0xb854f4ce,0xb6953a2d,0xb9dbcb7b,0xbacd61c9,0xbb2e3768,0xbb6efb3a,0xbb8a803c,0xbb57a714,0xba9e8141,0x3ab55a0b,0x3b1c40ee,0x3aaf10ee, -0x3a1ad76c,0xb9cbb115,0xbad4c965,0xb9da4368,0x3a57f118,0x3b143ee9,0x3b1af708,0x3aad3729,0x3b2f095e,0x3a8375f3,0xb9c60bbc,0x3902c5a9,0xb7e641e4,0x3785f871,0xb61f6b42,0x3643055c,0x36012b8e,0x3623a5ed,0x36513d89,0x35f3cd67,0x3687c1f2,0xb4fe1197,0x379e226e,0xb7c8ba77,0x3804ab4e, -0x36ac5e0a,0x3a01fa15,0x3ae8c4e0,0x3b3d4c84,0x3b794489,0x3b97fb13,0x3b6a6c1a,0x3a62352e,0xbaf016e2,0xbb307fb8,0xbaac3be3,0x3adeb22f,0x3b3ce684,0x3b046045,0x3a4ffaf9,0xbab9023d,0xbb48f65a,0xba0baafd,0xbb490970,0xbbc8c4da,0xba977548,0x3a2cb510,0xb98bd072,0x38bd77ff,0xb849df7c, -0x3763b3ae,0xb73eec58,0xb56c8a08,0xb6c88a94,0xb6521638,0xb69f8866,0xb59df186,0xb715e028,0x363e5072,0xb8073eef,0x3917284d,0xb9ea4964,0xbaccb183,0xbac99216,0xbae7888b,0xbb053cb0,0xbae50f16,0xbabb3972,0xba854808,0x3a5d6761,0x3b242702,0x3b8a2845,0xb8a35c58,0xbb2cc6cc,0xbb53a787, -0xba850d68,0x3a871c2a,0x3b35fa0e,0xba7f3b8c,0x3b0d6206,0xbba986f7,0xbb17b4d7,0x39bfc596,0xb8d43f9d,0x38b64c3a,0xb7a9317c,0x37ccbceb,0x343812d7,0x37507609,0x36e2d9d3,0x370fbe11,0x36dc710f,0x36aa21ba,0x37278165,0x36571cac,0x38335c6f,0xb96736dd,0x3a154c19,0x3ac8ae9f,0x3aa18809, -0x3a83b397,0x3a0e096e,0x38e5b7c4,0xb9c62711,0xba88af8c,0xba9b19fe,0xbacb54a1,0xba96e302,0xba90de7b,0xb9228cdb,0x3a5a6dad,0x3aed9b9b,0x3b1d5e86,0x3b3bdcb4,0x3b800b94,0x39e30876,0x3ac08cba,0x3ac5c1a4,0xb8498a82,0xb8d4e47f,0xb71088cc,0xb8328273,0xb6fa494e,0xb7ac8885,0xb7816650, -0xb797e560,0xb77e7b6d,0xb75a9b8d,0xb740689b,0xb762cc84,0xb7c39c20,0xb7d0b5b0,0x38fc463c,0x3a687b71,0x3aa0e498,0x3a806664,0x3a4eba2c,0x39cc6a89,0x395de274,0xb951daf3,0xba5c35d5,0xba8c3ad7,0xba994d23,0xbaa07fb0,0xba8c9e97,0xba81216a,0xba34036c,0xba666da4,0xba1a4eb2,0xb9b422ec, -0xb90a9e58,0x3a0f9489,0x3a2371d2,0x399006bb,0x397bb810,0x38c04006,0x38e04c03,0x386f46ab,0x37f4df10,0x38003e03,0x38054e77,0x380ad659,0x37f07829,0x37c6458d,0x37a66efd,0x38004fa1,0x386017d8,0x3882bda9,0xb987cb69,0xba1589b5,0xba24c6e6,0xba3a89ae,0xba44b3c2,0xba53e82d,0xba753968, -0xba8a83f1,0xba9c87fd,0xba8d9b9a,0xba870ab9,0xba7f21fe,0xba38e439,0xb9f5808d,0xb97b3fea,0xb8917d74,0x38501295,0x39693de6,0x39e7983d,0xba26115b,0xba2762b5,0xba47b207,0xba08e5d3,0xb9f2ce07,0xb9a2e915,0xb8b98a70,0xb8069224,0xb7b7c7f6,0xb7b66642,0xb7a98de6,0xb7ac33ed,0xb7979fab, -0xb7a0134c,0xb878ef82,0xb91f1987,0xb97a6112,0xb9288896,0x3944ea78,0x3935bae7,0x385effb9,0xb7e7d91c,0xb8d5aee3,0xb94994e0,0xb98798db,0xb9b301b8,0xb9b5e6e4,0xb9b89ffb,0xb9c4b217,0xb9dec596,0xba0089ae,0xba1193c9,0xba1724e0,0xba17fa33,0xba21e406,0xba2750ff,0xb9d7b0eb,0xb9cd6da4, -0xb9d90788,0xb9f15eba,0xb9fcc5ce,0xba032be5,0xba086f39,0xba08321d,0xba049ca6,0xb9f7ef77,0xb9e8f631,0xb9d80406,0xb9c8162c,0xb9b25bc6,0xb9a572d3,0xb9a484ed,0xb8c4da25,0xb8fbff0f,0xb92f00ff,0xb974c27f,0xb9817892,0xb9929745,0xb9a53ef0,0xb9b23c7d,0xb9c22007,0xb9d7cee1,0xb9da0b38, -0xb9e04361,0xb9dfbda9,0xb9ddf76a,0xb9d61a56,0xb9cdb412,0xb9ccb751,0xb9cefdb7,0xb9cc2c3b,0xb9cf2726,0xb9cb9f44,0xb9ea8fc2,0xb9b782bf,0xb9e463f2,0xb9d81633,0xb9e2b901,0xba0ac772,0xb9d1eec6,0xb9adf22f,0xb8f10cbe,0xb96c10ea,0xb987d6d2,0xb9853a2b,0xb9ab9174,0xb9b82fbe,0xb9a57a1a, -0xb9cb03ae,0xb9d15135,0xba1e7569,0xb9c8264e,0xb9b87261,0xb9c52e62,0xb9df9de9,0xb9f02fed,0xba0ebfe4,0xb9ee35a8,0xb9dddfbd,0xb9d79337,0xb9bddaa0,0xb9cef224,0xba1ced57,0xb9e159f6,0xb9bb0817,0xb923aed9,0xb9ad31f1,0xb9b9efe9,0xb9bdf2fd,0xb9aceee7,0xb9ab39ad,0xba047684,0xb9dca25c, -0xb9a3f8db,0xb9522e2a,0xb72247b0,0x387cb424,0x38979309,0x3868dd66,0x38a1da69,0x38a418ae,0x38b701ed,0x38ad3b03,0x38dc41ba,0x38a7db04,0x37b045e9,0xb94a4bc5,0xb9711e03,0xb99aa293,0xb9f7398b,0xba2b62c1,0xba5f34ae,0xba8c0b98,0xba612dcd,0xba36856d,0xba1d4448,0xb9b556d0,0xb9e5c7ad, -0xba831eb7,0xba20725e,0xb9c56e91,0x38f5eefc,0xb98df020,0xb9c62bc1,0xb9ce1125,0xb9a68756,0xb93c0c51,0xba36a44a,0xb9987705,0xb7521607,0x38d5c0bd,0x37f23936,0xb6e9093e,0xb7c1170e,0xb7924242,0xb7b1405d,0xb7eb4d85,0xb7d32cd7,0xb7dfe3f7,0xb7e6736c,0xb7a5cd4e,0x38033653,0x38a23ced, -0x37fb6574,0xb911dd45,0xb9daab17,0xba1def52,0xba60cb21,0xba9f6445,0xba596a59,0xba1b4b51,0xba054685,0xb96a14a0,0xb9fa8d1f,0xbac1bc96,0xba1af950,0xb97e92bf,0x3a51ede0,0xb9275c0f,0xb94ac28b,0xb93a833b,0xb9184771,0xb98a5d96,0xba6d4aa4,0xb8abd126,0x3886baf0,0xb81d760b,0xb790682c, -0x353896e2,0x372d8a6f,0x3701d4f0,0x3716e18a,0x373e866d,0x373441a8,0x373c13ae,0x37530f85,0x36761202,0xb72ae77a,0xb832c53e,0x3849a8cc,0xb8e9d825,0xba352fe7,0xbaa48147,0xbafc9b20,0xbb2f6a14,0xbb06ef60,0xbabddd9e,0xba832a61,0xb96681e3,0xba433af6,0xbb209ba0,0xbaaabaa4,0xb98c0479, -0x3aa4a9a0,0xb80255bb,0xba092408,0xb9d6f4b9,0xb982e8c2,0xb96f169d,0x39a9c7af,0x38b1d137,0xb6ca6261,0xb5ea1e96,0x374d7cf9,0xb64c7a41,0xb65ded70,0xb69385e0,0xb68ad412,0xb6b4927c,0xb6aac9cd,0xb6b8f4dd,0xb6b8f482,0xb5f89ac4,0x36bd98be,0x37934eaf,0xb79f94c3,0x38a4da4a,0x3a1db328, -0x3a92e1cd,0x3af40bb3,0x3b244de6,0x3b422323,0x3b1e8bda,0x3a6b1f57,0x3947d3d8,0x39a2e474,0x3a62658f,0x3aef7da4,0x3abacb04,0xb9f442ff,0x3a6df650,0x3ab01561,0x3add212d,0x38e17091,0x3a75e00d,0x3a230567,0xb90b4b67,0x38093111,0xb654227a,0xb74033a6,0x3699e0bf,0x307deb50,0x36642d65, -0x3602e7e2,0x364ebce6,0x3638749f,0x364f26a4,0x362e4ceb,0x35eef6c8,0xb6c83d0e,0xb6b36f68,0x371111ef,0xb78df03c,0xba0ff3fb,0xbabf0c13,0xbb13cdeb,0xbb3b1677,0xbb445a6b,0xbb09abba,0xba0a15e1,0x3aa2a42a,0x3ae8c913,0x3a53b31b,0x398ec3a6,0xb9aa5b98,0xba8ef1b7,0x38b2541c,0x3a7b2fad, -0x3ae73b6b,0x3adf6d40,0x3a312532,0x3ab35b64,0x391f112c,0xb9062932,0x3867c149,0xb76a3f7a,0x36bb1845,0xb66c3266,0xb5bd2628,0xb6063e12,0xb61a8a46,0xb5f5628c,0xb641d647,0xb5004a45,0xb687e280,0x371f27f5,0xb6c19dd7,0x34a62939,0x3791ce82,0x39da3c33,0x3aba14ec,0x3b114c7e,0x3b3d0d35, -0x3b4e21c4,0x3b0e4cf0,0x3946c576,0xbacab208,0xbaf6003d,0xba04e0d3,0x3aa0a56e,0x3ae955e1,0x3aa03271,0xb9347e59,0xbacf3b23,0xbb044e88,0xb9e7961b,0xbb0cab8c,0xbb638a86,0x387e9e00,0x391a4760,0xb8b82bf6,0x3818217d,0xb790ee60,0x37294a28,0xb57d9a8f,0x3688a1f2,0x36097dca,0x364dd043, -0x36101786,0x36642aec,0xb5dfc36d,0x36a59637,0xb801ac5e,0x389f12dd,0xb8dfc65f,0xba77d71e,0xba7cf3bd,0xba95ee07,0xbaa9e6d5,0xba8a4d30,0xba3e7cc9,0xb9c10792,0x3aa46335,0x3b0d79a0,0x3b323a91,0xba295405,0xbb0f52b3,0xbae35a96,0xb9de4133,0x3a80730d,0x3b22b8fd,0xba6deb6b,0x3b1f2575, -0xbb4540b5,0xba1f88f4,0x3984abe6,0xb8bdc3f2,0x384418ed,0xb798f2bc,0x365161c0,0xb702c3d7,0xb6522398,0xb6b7ba62,0xb6a47fab,0xb65fd934,0xb6f3b731,0x36a6daab,0xb74e614a,0x385ac615,0xb8e36efc,0x38f69c62,0x3a8b49f9,0x3a440e59,0x3a1b667b,0x3957d6e2,0xb8537a79,0xb9c71aac,0xba6421da, -0xba799600,0xba9536b0,0xba3f5732,0xba228d3d,0x3935249c,0x3a8df8f2,0x3b05389e,0x3b2f244d,0x3b589801,0x3b6fab29,0xb95655f4,0x3a4bab16,0x3a20efc5,0xb95189bb,0x37d6d343,0xb8104a7a,0x371d7aa5,0x370a558d,0x37216389,0x371c2699,0x373972fa,0x3715f247,0x37347019,0x36cbb855,0x3744993f, -0xb7c9f687,0x36ba5269,0xb8730eb7,0x39dabbd9,0x3a76c253,0x3a43d30f,0x3a398a40,0x39e65e31,0x399a0476,0xb6fc5134,0xb9dbfd3c,0xba23f8d0,0xba375d28,0xba3ef0e0,0xba31ccd0,0xba39546e,0xba2f65e3,0xba77063e,0xba68217d,0xba48b6b4,0xba31f91f,0x3a23a372,0x3a46b43e,0x39b5cda4,0x386e956b, -0x38adc680,0x37c8d3a7,0xb741646e,0xb7e577fa,0xb7a4aa31,0xb7cacb5f,0xb7d72871,0xb7c90229,0xb7b0f809,0xb7cf3aeb,0xb76eff44,0x371547cd,0x388908c7,0x377dbf50,0xb9c44658,0xba0d2849,0xba108928,0xba1a82b3,0xba21dc55,0xba3926e9,0xba4efde7,0xba686f62,0xba57c3e4,0xba52eb30,0xba4e0d7b, -0xba12534e,0xb9b5fc83,0xb903314c,0x384ebf6a,0x394fd18d,0x39c4b620,0x3a180af7,0xb9e0aee4,0xb9dac8fc,0xb9e71836,0xb943853e,0xb92e67a7,0xb7936110,0x389ee485,0x38c50bbd,0x3892f39a,0x38a2a69d,0x3896eb4a,0x389cec2c,0x3890b423,0x38a405da,0x38981a68,0x3591657f,0xb8e0ee59,0xb983155e, -0xb9166e81,0xb901da8d,0xb952f898,0xb989f66b,0xb9a2b698,0xb9c3bb74,0xb9d9da45,0xb9f67385,0xb9e72640,0xb9da1c4f,0xb9d7b029,0xb9de33a7,0xb9eea700,0xba0021b1,0xb9fd7e4a,0xb9f5f84a,0xb9fe36b0,0xb9f8abda,0xb9b6e6d3,0xb9a66ac3,0xb9caaa45,0xb9e6cfd6,0xb9f9cd17,0xb9c99f45,0xb9c243bd, -0xb9b66386,0xb9b55445,0xb9aef42a,0xb9ab3757,0xb9a6599a,0xb9a2d3d9,0xb99b0b04,0xb9a396d9,0xb9b358bd,0xb9ab4165,0xb99390db,0xb9902c06,0xb9a9ec13,0xb9b40bd6,0xb9bd9fc3,0xb9cb35c1,0xb9d3ed7f,0xb9deacc9,0xb9efae42,0xb9eaae7d,0xb9e995b2,0xb9e209a2,0xb9dbd72b,0xb9d070f5,0xb9c4deaa, -0xb9c092d6,0xb9bd8742,0xb9b4e62d,0xb9b3a474,0xb9e4b2e6,0xb9a25a18,0xb987c35c,0xb99c09ba,0xb99b0890,0xb9a743e4,0xb9b5dbc9,0xb874b8d1,0xb87dc95a,0x3543cce8,0xb809d84f,0xb82cd3a5,0xb82a2f81,0xb8788e07,0xb88ed88d,0xb86ee9e3,0xb88660c9,0xb831530f,0xb9c9bca4,0xb98ab15a,0xb976bf5f, -0xb982a853,0xb99873d2,0xb9a26e03,0xb9bc90bb,0xb99d5984,0xb995491d,0xb996d288,0xb98ebfff,0xb998df67,0xb9cc64db,0xb9a038a2,0xb98b8702,0xb922c916,0xb983801a,0xb986fb06,0xb978d3fb,0xb978d6b5,0xb9724e54,0xb9be706a,0xb9a7f859,0x3607cff0,0x3876688f,0x388223ba,0x368e657d,0x367356b2, -0x35b399f0,0x3737514d,0x372d5789,0x37adb739,0x37b257aa,0x37e97683,0xb58c5275,0x38871bf6,0x38535740,0x380f8dbb,0xb934d0ba,0xb99904d0,0xb9e0c2cf,0xba101aae,0xba2c2d89,0xba0541ae,0xb9db1c11,0xb9cdcefa,0xb998e8d8,0xb9b8e8a2,0xba2407c8,0xb9e386d8,0xb99ed109,0xb7f02c42,0xb96f96b9, -0xb98b9eb4,0xb960cc3c,0xb9695917,0xb91815f3,0xba15e2ca,0x36dffc64,0x388dcc67,0xb822c0ed,0xb7c9a9a2,0xb71e65fc,0xb5bf64af,0xb5cba8dc,0xb673575d,0xb6481796,0xb6babfd2,0xb7103640,0xb71789e8,0xb702dea2,0xb7d0c2de,0xb7c9c85f,0x37b67750,0x3843f797,0xb971212e,0xb9c8b8a0,0xba0bda58, -0xba41d4f3,0xb9f22793,0xb9b16875,0xb9b8ff5a,0xb98c23bc,0xb9dd5726,0xba674c27,0xb9ea5c62,0xb98857b0,0x39a0c4d8,0xb95717d1,0xb93cf2a7,0xb8523865,0xb919337b,0xb950b80d,0xba25a985,0x38fb194b,0xb86deea0,0x375185f5,0x372ab272,0x36c616cd,0x35947c44,0x359e4422,0x35d7e17e,0x36034362, -0x36345d22,0x36853edf,0x368aaab2,0x36b870c9,0x374ddba2,0x3617b277,0xb766e349,0x37c590c4,0xb9af81ca,0xba568654,0xba9d7cd0,0xbacedc35,0xba90189f,0xba41484e,0xba1bed03,0xb9a169f6,0xba23b5fa,0xbabd1f3b,0xba69a8ba,0xb9a6a564,0x3a0a613f,0xb908e254,0xb9a22b23,0xb89cabba,0xb901834e, -0xb97b8023,0x3918c48c,0x37d6495c,0xb7f0e949,0x377035ff,0xb72b7fd4,0xb5a0684e,0xb5c24a79,0xb4f90a43,0xb584c222,0xb588e899,0xb5c9c8d7,0xb5f47d91,0xb6197ae1,0xb62c2295,0xb6eb9e8f,0x367aeed9,0xb6625261,0xb813798d,0x3a05dc77,0x3a621021,0x3aa67635,0x3ad2ddae,0x3ac89d2e,0x3a904a52, -0x39bbacab,0xb81a2bfa,0x38cd8a2a,0x39e34bb8,0x3a8a5378,0x3a4641f1,0xba19f5af,0x39ba3b9f,0x3a120f99,0x3a2186eb,0xb8d67470,0x3a170913,0x39c20dfc,0xb90a81c2,0x381ec4ef,0xb7807f39,0x3703bc76,0x33f46d37,0x35a1b633,0x35044e7e,0x3532067f,0x355ab937,0x354c90d9,0x35c78868,0x35035efb, -0x36611f73,0xb365566c,0x36ba1282,0xb7696352,0x386658f3,0xb9f12b97,0xba8e9fd4,0xbac80b96,0xbaef6dfa,0xbadec0e3,0xba88e7da,0xb8bfde77,0x3a72071c,0x3a95aacc,0x39eee112,0x38c73fdd,0xb9632130,0xba1dadce,0x39989907,0x3a50b019,0x3a91be56,0x3a825cf2,0x39880706,0x39ea70c0,0xb6f3657e, -0xb7920162,0x375d4108,0xb6f30171,0x355247da,0xb6033200,0xb4d54d2e,0xb58dc141,0xb52f9372,0xb58eb39a,0xb54bc408,0xb5da3095,0xb4107da7,0xb6b6c110,0x371b412d,0xb7951653,0x36648323,0x3993e9a3,0x3a6893fe,0x3ab0f90e,0x3ae0a89f,0x3ad414ee,0x3a70554b,0xb96c81f0,0xba980d9e,0xba9b6882, -0xb91549a0,0x3a2763ab,0x3a5786e0,0x3a14f672,0xba0e81eb,0xbaa5823d,0xba93d63f,0xb99bb40a,0xbab1ef27,0xbab92d3d,0x398fefb4,0xb8a28ee1,0x37fb087f,0xb7167d0f,0x36ecd88e,0xb527c2c2,0x3634735c,0x3575ac6d,0x35d2f18a,0x35a773ed,0x35d40176,0x35cb1d6c,0x35c83787,0x368312ca,0xb6957019, -0x36ae38b6,0x37a3358b,0xb9cdf494,0xba076d73,0xba221f1e,0xba2f5292,0xba0e0627,0xb98fca80,0x3837c71c,0x3a91d0c7,0x3abce299,0x3aab2b88,0xba2e436a,0xbab43dd1,0xba43b84d,0xb901da4d,0x3a259316,0x3ac0c5fe,0xba27f182,0x3ae6c35f,0xba57031d,0x38b0e930,0xb7c3f5e8,0x376928b4,0xb74e6c78, -0x3554cba7,0xb6bc8916,0xb612e1fc,0xb661be34,0xb61a2908,0xb63bf584,0xb6337203,0xb650eb85,0xb61c7c1c,0xb6d15348,0x36427698,0x3684ca96,0xb8930f89,0x3a0b2eb0,0x39b764d7,0x3982be79,0xb5f98274,0xb9111570,0xb9a8636d,0xba1dac31,0xba2d179c,0xba3c080b,0xb9dd9676,0xb9843ee2,0x39a0af37, -0x3a7ee623,0x3ad2715e,0x3b07308d,0x3b26b936,0x3b22941f,0xb9f1063a,0x3985cd0c,0x386bd385,0xb8a62407,0x380fc926,0xb5ec04cb,0x3746a022,0x36a473b5,0x37074f5d,0x36b39c4f,0x36bc25d4,0x36b2b83e,0x36c7a149,0x36c39104,0x36c8f2e7,0x370cfa19,0x36cf7b41,0xb808be37,0x37b1e046,0x3a107c67, -0x39ee8788,0x39f0fbf8,0x39ae2965,0x39720574,0x38793969,0xb917cb4b,0xb9937d76,0xb9abab6f,0xb9b5bd05,0xb9c3ba89,0xb9f928af,0xba19030a,0xba56830b,0xba629a7c,0xba54af36,0xba48d071,0x39fac0f7,0x3a2a02b8,0x38ed7e4d,0xb776fa2f,0xb6fd11a3,0xb7e07615,0xb709ba40,0xb791127a,0xb77bec02, -0xb75e3168,0xb7458f38,0xb74a05fc,0xb75d1c12,0xb75938b3,0xb74dd635,0xb7863d3c,0xb7f973f1,0x3885f3cb,0xb8395f8e,0xb9b7cdf3,0xb9a794c5,0xb9b8408a,0xb9bc2836,0xb9d88779,0xb9f0a08b,0xba070acb,0xba024d65,0xba03cd33,0xba056b38,0xb9c204a8,0xb9748a54,0xb8b53de9,0x38786d3b,0x3947bb4f, -0x39a9df17,0x39f91eaa,0xb9881e50,0xb9639809,0xb921d63b,0x3818f792,0x382210d0,0x385c4ae6,0x37998fca,0x3835062d,0x382158d7,0x3821655c,0x381913a6,0x3815bba0,0x380525ef,0x381a974d,0x37845f4b,0x385a0b22,0x38685f6f,0xb71e104b,0xb9747042,0xb98ade96,0xb988aab3,0xb9a0b4bb,0xb9a87e1b, -0xb9b8bc04,0xb9c16c21,0xb9cdb497,0xb9be6a6a,0xb9b1c5fc,0xb9ad9b38,0xb9ad9191,0xb9b4e79b,0xb9be0caf,0xb9b49134,0xb9a94cd7,0xb9a87afc,0xb99a3c01,0xb97aa3ca,0xb96ab81d,0xb99c615d,0xb9a05823,0xb9aab609,0xb8684afb,0xb8afca36,0xb8ac782b,0xb8b3f11b,0xb8ae9846,0xb8adb151,0xb8a8fee8, -0xb8a8e52d,0xb89d9a1d,0xb8a5f29e,0xb885a989,0xb9a6bd4f,0xb9a3ddb8,0xb99ea475,0xb9932909,0xb9a2f025,0xb9a554bf,0xb9abe7a7,0xb9affca9,0xb9b4c18c,0xb9bd9fb2,0xb9b886f6,0xb9b547ac,0xb9ad7b32,0xb9a7b2a9,0xb99eaa1d,0xb9964c00,0xb990d258,0xb98c3f60,0xb983e3a2,0xb9807b76,0xb9b9c6db, -0xb85c765a,0xb846e7ed,0xb823b443,0xb8af66fa,0xb8c5e684,0xb8e2d3aa,0x37002bde,0xb42b1a03,0x37e191a1,0x37e7bbaa,0x37e726d4,0x37ee68ae,0x37fdb67d,0x380914ff,0x380f7df6,0x355bb068,0x37090d64,0xb8edc93d,0xb8aa6c74,0xb87f2203,0xb7f8cebf,0xb85267d6,0xb8557b64,0xb87d163e,0xb846b846, -0xb83c2f17,0xb8485004,0xb8440b69,0xb853b7ba,0xb88bd308,0xb856003c,0xb83548cd,0xb7b4ae9c,0xb82ded42,0xb8367374,0xb82670e8,0xb8285e65,0xb8171cf8,0xb8973992,0xb8b3e774,0x37f5f2b8,0x380ca25b,0x370b42a1,0xb50d0a2a,0x35d919a4,0xb66bb543,0xb6023b00,0xb5f7e838,0xb67f24c5,0xb6ebb6e3, -0xb6782944,0x368cdcd6,0x3728073c,0x37f7252b,0x37f2a79c,0xb884ea15,0xb835c327,0xb898bdf9,0xb8cbaf3f,0xb8eb1858,0xb8a3eca2,0xb8804a72,0xb883e77d,0xb854b9b1,0xb8867f21,0xb8e658a7,0xb89c7c66,0xb84f9c2e,0x35ed6fac,0xb8262dae,0xb84c23a8,0xb8197ffb,0xb82f616f,0xb7bb5193,0xb8f48699, -0x37c8b07a,0xb7149395,0xb6266cd9,0x3575d349,0x367c9565,0x35a38225,0x35dc89d7,0x35ca215d,0x35623d63,0x35ef0bfe,0x3658d221,0x364e0eff,0x363a938c,0x3616e084,0xb70d3ba1,0x3597ae1b,0xb5faeb1e,0xb7ea1b0b,0xb865e578,0xb8afa1be,0xb8fa024d,0xb8679dfd,0xb80cfc30,0xb8583ace,0xb846d9c3, -0xb8a427db,0xb91c7aa7,0xb8918bbc,0xb80ce30b,0x38968a71,0xb81380f2,0xb8095aa3,0xb585c577,0xb7eefe94,0xb83386da,0xb8f10db9,0x37d8e576,0xb63ba20f,0x373a44ea,0xb6083e1b,0xb57f7b91,0xb5816e89,0xb50fe62d,0xb5426a9a,0xb50be0dd,0xb5500ce1,0xb5b56f85,0xb5749d23,0xb61d9248,0x3658c982, -0x3607a5e3,0x372ad5c1,0xb6c09250,0xb8458431,0xb918bbe6,0xb96c7a58,0xb9903c27,0xb928f7b1,0xb8b6c8fc,0xb8b40c93,0xb8727f17,0xb9015939,0xb986ecc5,0xb926b64c,0xb85a1e20,0x38d756c3,0xb81ae89d,0xb895ee7f,0xb73052ab,0xb7e740c3,0xb78fc033,0x377615dc,0xb728f63a,0x37920aec,0xb73b5ac2, -0x360f6a32,0xb4c74ac7,0x3584bf34,0x3383f38c,0x350734f1,0x3454d2f6,0x3517032a,0x34aefae3,0x359667bc,0xb459e42a,0x359c12a9,0xb708e7c9,0x378c7d46,0xb81a6b33,0x3900c1cc,0x3990db63,0x39ade150,0x39d62d02,0x399e5642,0x3949ee9b,0x3894c76c,0x37439837,0x38807787,0x3911533d,0x39921598, -0x3963a9f9,0xb8aca7ac,0x39049e5f,0x3919c199,0x38fd9744,0xb75762b1,0x39263859,0x38a83147,0xb83b28ef,0x37def7a9,0xb71c87dd,0x36a56d3e,0xb6249050,0x350d9f40,0xb52d276b,0xb3995728,0xb4b12894,0xb44fbc1d,0xb4f8cc43,0xb44676df,0xb56be68b,0x35bddb9d,0x337211a1,0xb531d842,0x37ca0d31, -0xb8eb3708,0xb97ed7f3,0xb9ab0e56,0xb9bbcd84,0xb9a40b5b,0xb932f144,0x3752800f,0x395e6f00,0x397c23cc,0x38b042aa,0x3725f178,0xb848dfc7,0xb9049817,0x38dea771,0x395de5f4,0x3980f9d0,0x39594f41,0x37f6d837,0x37af9f29,0xb5308bb0,0xb681d1fb,0x35329243,0xb5704ad7,0x3521539e,0x34c3e5d6, -0x34b7a24d,0x34a45ca2,0x34822264,0x34b1ac8d,0x34865633,0x350e466d,0x33d7f9e1,0x3444b480,0xb62dd5ef,0x36ab3195,0xb78e2731,0x3887980b,0x395eb17c,0x3996e06b,0x39bba755,0x39a63ec9,0x39353145,0xb83fc098,0xb96b5c09,0xb9587e60,0x3818dec9,0x3936823d,0x395963ab,0x392bf715,0xb8f78910, -0xb98b55df,0xb944fc53,0xb870cc02,0xb992d61d,0xb93ccd18,0x3877cab4,0xb78eb476,0x374257aa,0xb6443c9f,0x353e7a04,0xb5ac38fd,0xb4c3a333,0xb5208d50,0xb4e9cf4c,0xb4d64bf4,0xb533fcec,0xb45d144c,0xb5ae3b5b,0x35ed35aa,0xb57fbfc4,0x36756bd2,0x36ab9e43,0xb858590d,0xb8a34073,0xb8ca4060, -0xb8bb84f0,0xb899a1e1,0xb6ee440f,0x38a5bfb4,0x39a21c3a,0x39b151a6,0x396f0f34,0xb93d814a,0xb99a7f94,0xb8c237cb,0x3827614a,0x3952ea8c,0x39c3c6bc,0xb8e54cb7,0x39f3e176,0x36e975a9,0x35585022,0xb43fb043,0xb6d68b55,0x349aa3be,0x357b4024,0x35d2ad99,0x35962cb8,0x35934620,0x354ced34, -0x358da6c3,0x3535def1,0x35deed54,0xb46b01dd,0x362f048c,0xb727d4c8,0x376ede07,0xb7f870a9,0x38a1f446,0x388d925c,0x38008d9b,0xb71e1b0a,0xb83b4d6b,0xb8a3378c,0xb906df2d,0xb9100ac4,0xb911c117,0xb8939ee3,0xb6a2bb58,0x39112004,0x39a4f07c,0x39ec332a,0x3a0fd778,0x3a2e546f,0x3a1bae4e, -0xb8f78811,0x365a6fab,0xb7e68073,0x380372c3,0xb6df122f,0x3678a531,0xb698be79,0xb60a91cf,0xb64983a3,0xb60663a0,0xb5f87b17,0xb5f25613,0xb618609a,0xb5e10ff8,0xb6596428,0x360b2cbd,0x35aa99df,0x378cd2af,0xb8279428,0x38d6166c,0x38ec4f84,0x38eaf4e7,0x38c81dff,0x38904c6c,0x380babaa, -0xb6d28bfb,0xb811f6a1,0xb847ea51,0xb8774bb6,0xb89740b5,0xb8cd485e,0xb8f87546,0xb940fff1,0xb95f6f11,0xb95aa3a9,0xb9596098,0x390c3bc0,0x3931f890,0xb83aa357,0x371c9f1d,0xb6fcc059,0x36b58e7b,0x36a37a3f,0x36e921db,0x36ce6870,0x36abc2ce,0x3680482c,0x36987efd,0x369bad2f,0x36a967ad, -0x3681208b,0x35baa906,0xb741fd90,0xb71c92e1,0x37db224d,0xb88a06be,0xb86b7acd,0xb88c3c86,0xb88de519,0xb8a76016,0xb8b9d2df,0xb8d41378,0xb8cf8f46,0xb8d50044,0xb8da61fe,0xb891e501,0xb81792de,0x350889bb,0x380e3d07,0x388aac63,0x38cdea0a,0x39073bbe,0xb85577b4,0xb7afda8b,0xb7da4796, -0x37eaf0ff,0x37eecacc,0xb56f12b2,0xb728d325,0xb74b2f0e,0xb78a4582,0xb76d4239,0xb76fd127,0xb75ea834,0xb773d055,0xb73aed53,0xb71d0657,0xb540ccde,0x37cba90a,0x383db4d4,0xb87f00c0,0xb8c32151,0xb89dca7d,0xb8b8043d,0xb8b7adfe,0xb8c301df,0xb8c680e9,0xb8cd3c75,0xb8b49ce9,0xb89f1fcc, -0xb892db74,0xb88af9a7,0xb88a6cbe,0xb88a41a2,0xb8827f14,0xb873571b,0xb876e7d2,0xb854fb48,0xb83c0222,0xb835053a,0xb8970a07,0xb89728c6,0xb8b6afe9,0x3804ec84,0x37ad7180,0x3813e900,0x38191b72,0x3817282a,0x38186b27,0x3817a41a,0x381b07dc,0x381b744b,0x37991c1f,0x38095eed,0xb8cf5366, -0xb8bc0110,0xb8d19251,0xb87aec31,0xb89b795a,0xb89af234,0xb89ebc16,0xb8a175f3,0xb8a3ff76,0xb8ab6f04,0xb8a32bc6,0xb89d5000,0xb892c0d3,0xb88a5152,0xb87e46a7,0xb8674c9c,0xb8618dd6,0xb858a586,0xb84b003f,0xb841aeb8,0xb89d064e, -}; - -const uint32_t defaultHRIR_rom_AlphaL16[470 * 43] = { -0x3f02f1b3,0x3ec3e963,0x3f0343ed,0x3ef2dac6,0x3eff8398,0x3f023dbb,0x3f078879,0x3f09fffd,0x3f0c6e63,0x3f090014,0x3f06f396,0x3f04a772,0x3f021691,0x3eff5d28,0x3efa86c7,0x3ef74421,0x3ef3d11a,0x3ef0de30,0x3eed6bc2,0x3ee3fddf,0x3ef71731,0x3eb8463c,0x3e90d6d9,0x3de91660,0x3ec643bd, -0x3e919f12,0x3e00e9a6,0x3e01de92,0x3e06274f,0x3e1c7ed6,0x3e0fd8b6,0x3e0f8e8d,0x3e16fa82,0x3e95c316,0x3ed5430b,0x3e11d349,0x3e95147a,0x3e8b6668,0x3f0b505d,0x3f0e4dfc,0x3f173148,0x3f2122f9,0x3f31903f,0x3f39e03d,0x3f3c3061,0x3f3306d3,0x3f2ab4d0,0x3f22cbf3,0x3f1b0fb1,0x3f1419bf, -0x3f0da064,0x3f08a941,0x3f03c152,0x3f00959e,0x3ef3d58f,0x3eebf556,0x3ee35f23,0x3e6ca878,0x3eb3e62e,0x3eaf074b,0x3e9fc344,0x3e8fd97e,0x3eaa0eb0,0x3eabfe1d,0x3eae3201,0x3e9a635d,0x3eb20801,0x3ec018e8,0x3ead357a,0x3ebb77de,0x3ea9329c,0x3ead2db0,0x3ee3931d,0x3eb4dbb1,0x3eff8a54, -0x3f176afd,0x3f24be97,0x3f3b6443,0x3f5bc63c,0x3f6a7cca,0x3f70f95b,0x3f624afc,0x3f5492cc,0x3f478f06,0x3f38c77a,0x3f2ba723,0x3f1e738a,0x3f14614d,0x3f099f01,0x3f02d0f0,0x3ee6b887,0x3edc678b,0x3ead07a3,0x3e812a3a,0x3e66fc19,0x3e6de299,0x3e5b5450,0x3e1a818c,0x3e50f8bc,0x3e0b2a3a, -0x3e6964ae,0x3e0f9eb9,0x3e5b122d,0x3e27486d,0x3e56e18a,0x3e6a7e4a,0x3e8130cf,0x3e82f2f3,0x3eb56504,0x3e904be1,0x3f011938,0x3f1fbfae,0x3f341d2b,0x3f5a3682,0x3f888e01,0x3f95995c,0x3f977341,0x3f87be6e,0x3f7379de,0x3f5b9668,0x3f442825,0x3f2f05ad,0x3f1c8ac8,0x3f0e01aa,0x3f0033f2, -0x3eeed46e,0x3ec9aabb,0x3eb24ee1,0x3e833e6d,0x3ded9e37,0x3e23f821,0x3d7f1cf4,0x3d9f9154,0x3d6b7f03,0x3d47119c,0x3d009fd3,0x3c9be5ac,0x3d7a078e,0x3d2c90ac,0x3daaab70,0x3de25ede,0x3e16f41a,0x3e2cb483,0x3e3c5e6c,0x3e91dfa8,0x3ec49ae9,0x3f0b7a24,0x3f397b0b,0x3f5badf8,0x3f80520f, -0x3f8a1e16,0x3f964bc4,0x3fa1965a,0x3fb0d377,0x3fb2f653,0x3fa58f9c,0x3fa1d1ec,0x3f987f64,0x3f8da962,0x3f7ea6f1,0x3f61511b,0x3f4877e7,0x3f225993,0x3f088f8c,0x3ec28018,0x3e41bf74,0x3e4e4eae,0x3e032ec2,0x3dc60ba0,0x3d6e5e69,0x3d34e8c6,0x3d35f340,0x3d6649ce,0x3dac4fc9,0x3d927d54, -0x3dcd5be6,0x3ddb5817,0x3e23efc0,0x3e2cbfa1,0x3e6d49c0,0x3ea2b6c3,0x3ecdf198,0x3f1d0b33,0x3f5f5459,0x3f7a631d,0x3f9399e7,0x3fa0a0ae,0x3fa9cbbb,0x3fa6b653,0x3fafb320,0x3faa5efd,0x3f9c21ea,0x3f974db2,0x3f8e2d9b,0x3f832e17,0x3f68080d,0x3f4d93ad,0x3f3b6dcf,0x3f1e3000,0x3f0fe18d, -0x3ecd6516,0x3e914079,0x3e7796fd,0x3e3c539f,0x3e20b7ae,0x3deaed54,0x3d9b0be5,0x3d8a56aa,0x3d805a8e,0x3d62cd20,0x3d99e108,0x3da685d1,0x3e2650cc,0x3e33264d,0x3e979b5d,0x3ea2f75f,0x3edf0e5f,0x3ee4ea0c,0x3f4ce39b,0x3f9085fa,0x3f9d2c5f,0x3faad883,0x3fa39c58,0x3f9d4148,0x3f9a1ae5, -0x3f9b81c1,0x3fa08ee2,0x3fa5243b,0x3f9ba1da,0x3f8e373e,0x3f7cbf74,0x3f572bc2,0x3f37c950,0x3f25c397,0x3f04e9b7,0x3ef080bd,0x3eae71cd,0x3e90fe7f,0x3e84aaef,0x3e64ca39,0x3e36785a,0x3e1bb482,0x3dfcecc0,0x3db35f26,0x3dbefe63,0x3e069d25,0x3db8d599,0x3dc4fa9e,0x3df96591,0x3e02b2ae, -0x3e9dd194,0x3e8e1df5,0x3ee85484,0x3f08b626,0x3f70146a,0x3f964666,0x3f9d9511,0x3f99194f,0x3f9ecfe5,0x3fa99cd2,0x3fb63ead,0x3fb359c2,0x3fabea6d,0x3f9cd7d0,0x3f955ab7,0x3f89db88,0x3f72f4ec,0x3f5d6e56,0x3f3e9432,0x3f1675c3,0x3ef47116,0x3edb7fcb,0x3ebd44da,0x3e640758,0x3e8a5ee4, -0x3e770ec1,0x3e3bc748,0x3e1d8020,0x3dd1c8b0,0x3de98389,0x3db6002d,0x3e72e277,0x3e148bb6,0x3dd9fffc,0x3e3c0cde,0x3e18ec8c,0x3ea3c517,0x3e8620c4,0x3ee70ac9,0x3f1a4e3b,0x3f7a5b43,0x3f9d8cf5,0x3fa60e1f,0x3fa4cf54,0x3fa6fa32,0x3fa8ceee,0x3fafdc20,0x3fa61752,0x3fa2b16e,0x3f9fec2e, -0x3f9138d7,0x3f81910b,0x3f64d6f5,0x3f3896b3,0x3f181cdf,0x3efe528d,0x3f07d297,0x3f0ff0ad,0x3f0628d6,0x3e9bb5db,0x3ebcaecd,0x3e668264,0x3e59b1ca,0x3e701d98,0x3e390fc7,0x3deabc40,0x3e1e2c9c,0x3dcfa375,0x3e2fdb94,0x3e462bea,0x3e885182,0x3e89c6dc,0x3e874c9b,0x3ea13b10,0x3f1a51c4, -0x3ef2773d,0x3f6411c7,0x3f8a04b9,0x3f896d9f,0x3f8d04c6,0x3f93c7f3,0x3f964f7a,0x3f952f02,0x3f8f086b,0x3f8723f3,0x3f7f3f87,0x3f6b924e,0x3f57b23d,0x3f429bcc,0x3f2cc7af,0x3f1b90ab,0x3f10b436,0x3f1d118e,0x3f2c3755,0x3f02aaf5,0x3eb3fc54,0x3ede750d,0x3ea45125,0x3e98af99,0x3e6b9392, -0x3e29c827,0x3e1bb41d,0x3e0093b7,0x3e9ad3a7,0x3e5bd7e4,0x3e609a29,0x3e87f276,0x3e9132d2,0x3ec5615b,0x3ecfaf25,0x3f182cbe,0x3f149f02,0x3f4a68c9,0x3f6ef967,0x3f7354da,0x3f853b77,0x3f8534c5,0x3f867161,0x3f87ba3b,0x3f80da3e,0x3f752e5c,0x3f678e52,0x3f5644fa,0x3f448693,0x3f2def11, -0x3f2aa476,0x3f2305af,0x3f1b7b3f,0x3f1398aa,0x3f20d27e,0x3f0b00df,0x3ebe246a,0x3eb51a89,0x3eab690f,0x3ea6a01c,0x3e4ac166,0x3e9f19a2,0x3e2dbd83,0x3ec0d2c8,0x3e2a1d74,0x3e9b4bd1,0x3e472eee,0x3e79a839,0x3ea12087,0x3eb45e43,0x3ec0d6a2,0x3f0f4661,0x3e959f2e,0x3f4c56a5,0x3f4da09a, -0x3f50c066,0x3f58059e,0x3f5d586d,0x3f64d859,0x3f6dcbdf,0x3f660ad7,0x3f60421d,0x3f5a31be,0x3f522c16,0x3f4a7365,0x3f3ef3e5,0x3f3bd59c,0x3f36e2f8,0x3f349fdb,0x3f300593,0x3f2e9917,0x3f29e283,0x3e84db4c,0x3f076fbb,0x3f0715fa,0x3eff7902,0x3ee21ab0,0x3f0a0619,0x3f0ef752,0x3f0fc764, -0x3ef4c71f,0x3f13c509,0x3f1bd1a5,0x3f04083e,0x3f1022fe,0x3eff9bb1,0x3f0349db,0x3f2ea9aa,0x3f169c67,0x3f56e463,0x3f3fcc3e,0x3f47e620,0x3f484c5d,0x3f4b084f,0x3f4caa25,0x3f501fa8,0x3f4bd8ac,0x3f493e57,0x3f464745,0x3f43f73d,0x3f41de65,0x3f3f6777,0x3f3f6b8c,0x3f3eae2c,0x3f3d9b87, -0x3f3ce59f,0x3f3667c8,0x3f4c933e,0x3f0c0e63,0x3ece60b1,0x3da63278,0x3f1c8ed9,0x3ed318d6,0x3df32d24,0x3deee4e9,0x3dfbb720,0x3e2a846e,0x3e091330,0x3e0c0351,0x3e1accd1,0x3ed727bb,0x3f298456,0x3e04a2ad,0x3ed21b3a,0x3f590b58,0x3e9c6bc8,0x3ebf4443,0x3e87958d,0x3e9ae968,0x3e95cf54, -0x3e960ce8,0x3e931735,0x3e901ea5,0x3e88d968,0x3e8a249c,0x3e899355,0x3e8a69d3,0x3e8b005b,0x3e8b60e0,0x3e8be859,0x3e89f584,0x3e89fffb,0x3e8aaec1,0x3e8cb6d8,0x3e919727,0x3e807a91,0x3eb894b2,0x3ed43b4e,0x3f05649b,0x3ea4342e,0x3eccf09f,0x3effbb51,0x3f006946,0x3efe526b,0x3ef8686b, -0x3efc0cbf,0x3efe6ccd,0x3efde50e,0x3ece6d22,0x3e9f023b,0x3f0485f7,0x3edd4a26,0x3f05443c,0x3eb4af25,0x3eb2eed0,0x3eb35ce6,0x3ead8285,0x3ea24231,0x3e95bc62,0x3e8621fd,0x3e8d35e0,0x3e9287fb,0x3e9a16a9,0x3e9d882e,0x3e9e928b,0x3e9e63e3,0x3e975071,0x3e95d99f,0x3e960bbe,0x3e9cec14, -0x3e9cb32d,0x3e9ec4ce,0x3ee5601c,0x3eab5cd0,0x3ea5b5f6,0x3ea9953d,0x3eae619f,0x3e938c44,0x3e93f893,0x3e9565df,0x3ea68386,0x3e9079fe,0x3e8680c1,0x3ea1b17b,0x3ea2dce7,0x3ebd0964,0x3ec2a8f6,0x3eadebba,0x3ef25d3f,0x3eec6175,0x3ed46eee,0x3edca405,0x3ecc217c,0x3eb0e4b1,0x3e9b8618, -0x3e716264,0x3e83f43b,0x3e87986d,0x3e8fad60,0x3e93baf1,0x3e946e3e,0x3e94d080,0x3e897f52,0x3e89a966,0x3e8c8817,0x3e9c5b11,0x3e992b90,0x3eacba95,0x3eb56c95,0x3ea9e299,0x3e98dd5b,0x3e911adb,0x3e96efa7,0x3e784db0,0x3e9342e5,0x3e763565,0x3e990c3e,0x3e6fbfcc,0x3e8bed7a,0x3e8f1777, -0x3ea051bc,0x3eb0ec9e,0x3ec134a0,0x3ec7e04b,0x3f0a6d60,0x3f096828,0x3ef70128,0x3efb194a,0x3ed9bff4,0x3e9fbe83,0x3e677463,0x3e11881f,0x3e623999,0x3e904499,0x3eabe90f,0x3eb920bc,0x3ebbe7a9,0x3eb6f35e,0x3ea04b3f,0x3e988a1a,0x3e96ab5e,0x3ea4498b,0x3ea52f11,0x3eab13ff,0x3ea879c9, -0x3e801fec,0x3e7047e9,0x3e43e2cc,0x3e286d33,0x3e07c088,0x3e081579,0x3e06caa0,0x3e15c812,0x3e0df302,0x3e1bab0e,0x3e4cade5,0x3e80fea5,0x3e9bd2c7,0x3eada948,0x3ed5a4bd,0x3f1f66a6,0x3f23b36b,0x3f26e13c,0x3f27da99,0x3f2370d0,0x3f1f54ac,0x3f0f6be0,0x3eee0f5a,0x3e865630,0x3e0b9c53, -0x3df785a0,0x3d122880,0x3c82e31f,0x3d1b0bdb,0x3d5d2083,0x3de50518,0x3e358ca3,0x3e8c9000,0x3e96bde1,0x3ea21ad4,0x3eba362b,0x3e930468,0x3e84a049,0x3e4bf891,0x3e2c02bc,0x3e1231db,0x3e1cd19d,0x3e1cc444,0x3e21cab5,0x3e10b35d,0x3e3470eb,0x3e77f241,0x3e9ec585,0x3ec83d0e,0x3ee23383, -0x3f0aa0c1,0x3f3e330b,0x3f35d992,0x3f19ef09,0x3f24a909,0x3f2a7584,0x3f21ea93,0x3f15d383,0x3f16e7fe,0x3ee7c500,0x3ecaff5e,0x3ec87e9f,0x3ea18754,0x3e894d3e,0x3e79bc93,0x3e8b420e,0x3e97cdf7,0x3e9b4520,0x3ec2f3ca,0x3ec59f69,0x3ed80e1f,0x3ec54118,0x3e9abf6b,0x3e8029ea,0x3e45989f, -0x3e1fdf75,0x3dfe4446,0x3e03c9e4,0x3e22ca2a,0x3e788d94,0x3e6f4197,0x3e8d6f1a,0x3eac6808,0x3ec2b955,0x3ed9d2bd,0x3f0a6e9e,0x3f1b8004,0x3f47ede2,0x3f2c71a8,0x3efcb323,0x3f05f045,0x3eff6c84,0x3f334692,0x3f528118,0x3f4a2d6b,0x3f3bc09e,0x3f120564,0x3eaf8c68,0x3e768e27,0x3e4d3ca8, -0x3e65eceb,0x3e969e3a,0x3eb4033d,0x3ebd66b2,0x3ee43c67,0x3ee890ce,0x3ef71c5b,0x3ee4da01,0x3ece74d5,0x3eb55e00,0x3e8f5de6,0x3e7a8492,0x3e828da9,0x3e952176,0x3e9ccfb0,0x3edc45ff,0x3e92246d,0x3e9495b3,0x3ea9cce8,0x3edd4663,0x3edd14e3,0x3f1407ce,0x3f143095,0x3f4451bc,0x3f0849cf, -0x3eb3c957,0x3efdcf5f,0x3f49e5f4,0x3f3bca87,0x3f210903,0x3efb413d,0x3ee3cb71,0x3ebe1fa0,0x3ea76193,0x3e88c40c,0x3e795709,0x3e8b5771,0x3e8a94de,0x3ea34bd0,0x3ed008c9,0x3eed9446,0x3ef6aad7,0x3efad608,0x3f0739c3,0x3ef1e1d0,0x3ee13976,0x3ec754d5,0x3eacf5bd,0x3ea25180,0x3e5e72ef, -0x3e9898af,0x3f1a7377,0x3eb22b11,0x3ea3d715,0x3eb2f6ee,0x3edb0892,0x3ed9fb12,0x3f1536d1,0x3f201b25,0x3f1ed4bd,0x3e9e586e,0x3e7778c7,0x3eb9be83,0x3ef58878,0x3f09e22d,0x3f061cc0,0x3ec14584,0x3ea6fa61,0x3e731686,0x3e3fecb0,0x3e52c813,0x3e801570,0x3e9a15c6,0x3ecfb2ca,0x3ef63fbf, -0x3f087789,0x3ef396e2,0x3ed85868,0x3ee393ee,0x3f0d0096,0x3ee7628c,0x3ef233d8,0x3ed6e46e,0x3eb4069f,0x3eb0462e,0x3eb6c5fa,0x3ebc2cb1,0x3efc2568,0x3ec46a2a,0x3ec09c9d,0x3ea94656,0x3ed862d8,0x3f0154a5,0x3f11a2e3,0x3ee3ab35,0x3f406a53,0x3ebc552e,0x3e80760c,0x3ecb248b,0x3ef280ad, -0x3f039ed1,0x3f015586,0x3ee6a208,0x3eeae36d,0x3eed4ec2,0x3eecd5e1,0x3eddff4f,0x3ee026a0,0x3eee85c3,0x3f022784,0x3f084bf3,0x3f06bea9,0x3ef3b76d,0x3ec0b877,0x3eea3afd,0x3f151446,0x3edc5c2f,0x3eeda52e,0x3ed43d97,0x3ed03924,0x3ed11fc5,0x3ed78523,0x3ee37ab5,0x3ea7f7d6,0x3ed5d624, -0x3ed72fe5,0x3ec83708,0x3ed7a6e7,0x3ed01d69,0x3efd2aad,0x3ee48d7f,0x3f1b1d9b,0x3ee42415,0x3eb55ea2,0x3ede88ba,0x3ed6ee5e,0x3ed6a58d,0x3ed7c153,0x3ee0958d,0x3eeec698,0x3efb4c2c,0x3f057894,0x3f0e8702,0x3f17032e,0x3f22c49d,0x3f1babbe,0x3f19fed8,0x3f1739dd,0x3f0e5092,0x3ede9639, -0x3eee4e42,0x3f15e246,0x3f0ac3ed,0x3f02045b,0x3ef4cd77,0x3f0d2e8c,0x3edba031,0x3f09457c,0x3eb97330,0x3f0a1b73,0x3ed96408,0x3f0ba1a0,0x3f00933b,0x3f0a5461,0x3f144f61,0x3f25ed2b,0x3f0a1d0f,0x3f5ccb17,0x3eafd0ad,0x3eb10a9a,0x3eb91d47,0x3eb6c80b,0x3ebbac1f,0x3ebb3f32,0x3eb9db12, -0x3ec29c8a,0x3ecb9fb0,0x3ed3ba74,0x3ee0c151,0x3eeda4fc,0x3f022f39,0x3ef84ae0,0x3ef052b2,0x3ee3fd49,0x3edd04b6,0x3ecc906e,0x3ecb5614,0x3f4a6b17,0x3ef4354d,0x3eee5c7d,0x3eef401d,0x3efd5703,0x3eb8213c,0x3eb4867a,0x3ebd4c3a,0x3ee92874,0x3eb9f6e4,0x3ea28d7d,0x3ed336da,0x3ed1e0a4, -0x3f037127,0x3f098f95,0x3ec62dc3,0x3eff80e8,0x3e341eb8,0x3e9414f2,0x3e882d92,0x3e8a4e4b,0x3e8aacff,0x3e8bd678,0x3e8c01a7,0x3e9205a1,0x3e96ed8f,0x3e9c2ced,0x3ea03fe4,0x3ea35130,0x3ea97ab2,0x3ea0de9d,0x3e9c7086,0x3e9781b0,0x3e93da8a,0x3e9a7429,0x3e450b38,0x3f03e45e,0x3f29c2e6, -0x3f73d949,0x3ed11328,0x3f208fcd,0x3f62e8fa,0x3f650e97,0x3f622396,0x3f57ff13,0x3f613d99,0x3f62abf9,0x3f5e585a,0x3f21da80,0x3ebe28e7,0x3f6eea8f,0x3f2ec6ba,0x3e8a97d1,0x3e141a1a,0x3deacee8,0x3df88264,0x3defdd9b,0x3de9b8ee,0x3de402ba,0x3de658c6,0x3defce6e,0x3e044230,0x3e0ac188, -0x3e0fb2a8,0x3e117bbd,0x3e10baf1,0x3e11c618,0x3e1445db,0x3e158953,0x3e14f90e,0x3e137275,0x3e0f11d3,0x3e0c16b6,0x3e0b8a14,0x3dfcad72,0x3dea58af,0x3dd5612a,0x3e004cb1,0x3de4957e,0x3dcd0fbd,0x3dd6727f,0x3ddaa37d,0x3de22fb9,0x3dccc24e,0x3dc5f7ef,0x3dc70ac4,0x3ddde30b,0x3df709dc, -0x3dd86738,0x3de1d3dc,0x3dea78ca,0x3dcd5b42,0x3dc7471e,0x3db5cf26,0x3daabf5c,0x3dae2294,0x3dd3cba4,0x3e0fc7bb,0x3e229ded,0x3e2ce54d,0x3e29757d,0x3e25d7ec,0x3e26fe9c,0x3e2eeee7,0x3e35be3d,0x3e36d5e6,0x3e3240fc,0x3e275ecd,0x3e200af5,0x3e190b3e,0x3e13126c,0x3e1a542b,0x3e17f093, -0x3e1050b7,0x3e0e4272,0x3e0b0e46,0x3e18bd9b,0x3e197e54,0x3e1a4eb8,0x3e0cdecd,0x3e06bb53,0x3dfc8b45,0x3deeb4f6,0x3defccd3,0x3e091909,0x3e00ec1f,0x3df0c72c,0x3d8aa7b7,0x3d26e703,0x3cb65dd1,0x3c1fafd5,0x3ca1cba1,0x3d498197,0x3e01ff82,0x3e262a9f,0x3e40f524,0x3e41ef75,0x3e407cbf, -0x3e464a54,0x3e5665c1,0x3e5fffa0,0x3e5faae7,0x3e526bde,0x3e3ff147,0x3e3065d6,0x3e2619aa,0x3e310166,0x3e2943b5,0x3e235858,0x3e19d4e6,0x3e1475d0,0x3e00ed9b,0x3e1e36d1,0x3e2919ce,0x3e2d0baf,0x3e076fd1,0x3de91dcd,0x3df3638e,0x3de419b6,0x3df12f8b,0x3e12a460,0x3e0242be,0x3dbea3ac, -0x3c9c1149,0xbc895fde,0xbd143b04,0xbd39d95a,0xbc44c70f,0x3d63e6af,0x3e335bce,0x3e5dadc8,0x3e6bb5cd,0x3e563ffc,0x3e44a8d1,0x3e473a3a,0x3e622d40,0x3e798ccc,0x3e7d475c,0x3e6edc86,0x3e55f40d,0x3e4365dc,0x3e3ca109,0x3e58218f,0x3e4753dd,0x3e3c530e,0x3e2cd2a4,0x3e241160,0x3e09c354, -0x3e1ee07f,0x3e1b9ee4,0x3e2f2af1,0x3ddf91bb,0x3db267fe,0x3dbc5405,0x3d9d7921,0x3dcea0ec,0x3e102f9f,0x3dc607b6,0x3e75695c,0x3dc81584,0xbd9da3b7,0xbe26d4e2,0xbe91258c,0xbebc200b,0xbec4139f,0xbe9a404f,0xbe0cdd91,0x3c7e45d1,0x3dd7fe0d,0x3e4f1e4a,0x3e841911,0x3e9117f6,0x3e957877, -0x3e91f683,0x3e9006a6,0x3e6210fe,0x3e51450c,0x3e60a94f,0x3e57f2fb,0x3e529e94,0x3e469c21,0x3e30187b,0x3e182539,0x3dcc1d72,0x3e1b4cd3,0x3e28feca,0x3e2a09f2,0x3e1b96c5,0x3e2c3d03,0x3e5ced7b,0x3e5b0c72,0x3e7687f4,0x3e7d011a,0x3e7a6d4b,0x3ba3f569,0xbe1bb3f0,0xbe96bcf6,0xbebc7e52, -0xbf15081a,0xbf15b191,0xbf15f4a1,0xbf1359be,0xbef801b6,0xbec5667d,0xbe927970,0xbe1f9ce3,0xbca49615,0x3dec9f42,0x3e44f743,0x3e7684ef,0x3e86146e,0x3e63b72b,0x3e514d6d,0x3e64d663,0x3e682c88,0x3e522c22,0x3e3cbd37,0x3e30ce14,0x3e2024ef,0x3dede73f,0x3e26d7bb,0x3e311257,0x3e645c1a, -0x3e39312d,0x3e32ed13,0x3dec9c44,0x3e006954,0x3d70fb44,0x3d2ae870,0xbd2be125,0xbe351e05,0xbea7b4f4,0xbf00652b,0xbf17029e,0xbf395c8d,0xbf54d5ce,0xbf6eba99,0xbf6ebecd,0xbf5b8ee6,0xbf335038,0xbef0fbfe,0xbe96f425,0xbe152cdb,0xbd16b16d,0x3c8ba9af,0x3dbe6335,0x3e3e48a4,0x3e73f6cf, -0x3e7cac9a,0x3e8afb16,0x3e92be79,0x3e825d3b,0x3e5f436e,0x3e588883,0x3e396a35,0x3dd774a3,0x3dd7741c,0x3e13ee40,0x3e941ac3,0x3e270cf6,0x3e036950,0x3dfe80e9,0x3dd40c7d,0xbc3607c3,0xbc9c94bc,0xbe0c5911,0xbea607d4,0xbeef6f17,0xbf0f522c,0xbf35d4d8,0xbf6c6404,0xbf59cf8f,0xbf489a1c, -0xbf3440fe,0xbf23b8e2,0xbf07f1f6,0xbecfb9dd,0xbe8afb5a,0xbe172651,0xbd5f194a,0x3d996cad,0x3e1c429a,0x3e3a7a5c,0x3e67897c,0x3e5e7482,0x3e507876,0x3e4aa7ec,0x3ded7846,0x3dd3798d,0x3df4b297,0x3e0016c9,0x3df267dd,0x3e553cfc,0x3e4cd550,0x3d4047e0,0x3e12bbcc,0x3e1be8e0,0x3d4d89d1, -0x3da0a464,0xbc795320,0xbd601904,0xbe4d3b11,0xbeb2df76,0xbebed268,0xbf0762f0,0xbf2cfbce,0xbf3cb11b,0xbf321d01,0xbf1aa42e,0xbedad717,0xbe9ae2c9,0xbe35c324,0xbdabbd32,0xbc640378,0x3d1d5e6d,0x3dac4ad0,0x3da6bb00,0x3dbc28c3,0x3de68969,0x3e0500c8,0x3dcfabf8,0x3d102dad,0x3d5232ff, -0x3cca36c2,0x3d6cf3f5,0x3d7940ea,0x3d89d72f,0x3d97b122,0x3e0e2385,0x3deaeff2,0x3d238ff9,0x3d258270,0x3ccbd347,0x3c49e75c,0xbd3b405e,0xbd9b4a33,0xbe0ae3e4,0xbe556f9c,0xbec1ffdc,0xbeba5ac5,0xbed4cd95,0xbf05a577,0xbf110ace,0xbf0e9f83,0xbeff61b9,0xbec8b24f,0xbe9a630c,0xbe54e3bf, -0xbde51f0d,0xbd2c2d97,0x3bce5f9d,0x3d424de2,0x3c9498b6,0x3b909b26,0xbbd43ff3,0xbd019fd6,0xbd04032c,0xbd6b1896,0xbdace506,0xbd49edb2,0xbd33e629,0xbd01abf8,0x3bbc470e,0x3d57f3eb,0x3d0be673,0x3c8f8d1b,0xbcaaea01,0xbc6d3ef1,0xbb62a8f1,0x3bb9bc5c,0xbd307705,0xbdc9dd34,0xbe2a337c, -0xbe6ca452,0xbeb2633b,0xbeb9267e,0xbeb481a2,0xbed02c33,0xbee0e380,0xbed2147b,0xbec93d3e,0xbec7c078,0xbeb65cc7,0xbea6b09f,0xbe95f846,0xbe935c11,0xbe8d4999,0xbe846856,0xbe822e42,0xbe81e187,0xbe8172e5,0xbe72a966,0xbe498bf7,0xbe49b22e,0xbe44483b,0xbe227145,0xbe03982d,0xbdc08ff3, -0xbd9ed0c3,0xbd5de9cc,0xbd6a7c79,0xbd4b9d7d,0xbd8e0bf0,0xbd669e24,0xbda7e25d,0xbd92a237,0xbe0a353f,0xbe306231,0xbe72bf58,0xbe8d4746,0xbeb19fd5,0xbe74f728,0xbe73b38a,0xbe83b1de,0xbe88fe3f,0xbe927812,0xbe9ad75f,0xbea36319,0xbea2b256,0xbea447a4,0xbea43a99,0xbea5cca3,0xbea768fd, -0xbeac5914,0xbea1e3e8,0xbe97fee3,0xbe8d0a42,0xbe83b7fd,0xbe6b0f6b,0xbe66ef82,0xbe9a980f,0xbe510f2d,0xbe4ab83e,0xbe3dc3b7,0xbe30f53a,0xbdfb9070,0xbdfb95df,0xbe0df8c3,0xbe1e490f,0xbe0afecc,0xbde8d815,0xbe0afc71,0xbe23e069,0xbe55503e,0xbe69307f,0xbe523099,0xbe936f3e,0xbe238fe1, -0xbe495aaf,0xbe49657e,0xbe4c15bd,0xbe52dd91,0xbe57bc4d,0xbe5f11f9,0xbe60bb0e,0xbe641111,0xbe67c3c0,0xbe695b6b,0xbe6a4470,0xbe6efe23,0xbe61a630,0xbe591dff,0xbe4f6ef2,0xbe490ce7,0xbe448fbb,0xbe1e6f1c,0xbe906f36,0xbea599bf,0xbeb823b8,0xbe6a9668,0xbe98d946,0xbea9e1d0,0xbeac067a, -0xbea809af,0xbea4518b,0xbea9249e,0xbeac3343,0xbea89262,0xbe9966be,0xbe6441e7,0xbebb317c,0xbeabc3d7,0xbe427c55,0xbd037788,0x3ca3df8b,0xbd4f58e4,0xbcdfad17,0xbd0b4bce,0xbd083da6,0xbd4ae40b,0xbd6a2aa6,0xbd87a73f,0xbd6ee7e1,0xbd576503,0xbd37bfa7,0xbd210f3c,0xbd1366ac,0xbd0f404e, -0xbd11ce80,0xbd12d2bc,0xbd1418b0,0xbd179a14,0xbcf56daa,0xbd4b5221,0x3c9b2d89,0x3d647e1a,0x3e066c9a,0x3b1faf91,0x3d616890,0x3dfcfc3c,0x3e046c13,0x3e04aa99,0x3df5a837,0x3e00a636,0x3e00587f,0x3df9905e,0x3d68c8e1,0xbab51069,0x3df598e8,0x3d75dfbf,0x3da0ebdc,0xbd1261a1,0xbcc3133e, -0xbce2641b,0xbcff7377,0xbd97cce3,0xbdce98de,0xbdfced30,0xbdeff27b,0xbdd01695,0xbd990f99,0xbd5bc3b0,0xbd2867f0,0xbd22291d,0xbd254b6b,0xbd2c3d64,0xbd35c568,0xbd35ee33,0xbd3521f7,0xbd046632,0x3d951b81,0x3c250d4b,0x3c926565,0x3cd7ee86,0x3d31b065,0x3ca80bbd,0x3d00f793,0x3d1c75de, -0x3d6c544f,0x3d12fff2,0x3ca83855,0x3d16deeb,0x3ca6f748,0x3d1c0cf9,0x3d23c14f,0x3babbdc2,0x3cec9fe9,0xbd206e27,0xbccada72,0xbcee6496,0xbd161562,0xbe00fe32,0xbe2d0c58,0xbe5b8e37,0xbe488ad6,0xbe2465f0,0xbde8bcf0,0xbd9dbc9b,0xbd652f45,0xbd616560,0xbd629451,0xbd714292,0xbd73c02b, -0xbd6c5ed7,0xbd77f08e,0xbc438ff4,0x3cd4adee,0x3d1fc166,0x3cdab396,0x3d012afa,0x3d89628f,0x3d2681a2,0x3dd4d60d,0x3d94ccfc,0x3dfc86fe,0x3daf19ab,0x3de07842,0x3db84e2f,0x3d7f1cb5,0x3d578c00,0x3d7b480d,0x3d10cc09,0x3dab0f78,0xbb6f2929,0x3cdf4273,0x3cf883a0,0x3c35e36a,0xbe0e3f85, -0xbe73aa1f,0xbe9f2301,0xbe9a5f63,0xbe737f69,0xbe12f92f,0xbd99d344,0xbd18a7d8,0xbd114ec6,0xbd380ed1,0xbd4a8545,0xbd57eba1,0xbd7696a1,0xbd76391e,0xbbd1704f,0x3d8dda57,0x3d20823f,0x3dcca2dc,0x3d9cbe56,0x3da44c60,0x3d85505b,0x3df7b794,0x3e1cb258,0x3e169adb,0x3df95e94,0x3ddc2886, -0x3de1e75e,0x3d8bd038,0x3d8dccce,0x3dbeffa6,0x3db56eb7,0xbe8d077d,0xbeb37e1c,0xbe9a4c3c,0xbe9604ed,0xbe8328ba,0xbe369711,0xbdf43323,0xbdda86f1,0xbe294a5e,0xbe67486e,0xbe684231,0xbe70233f,0xbe5fbba9,0xbe35fd6c,0xbe23ca21,0xbe184d3e,0xbe2619bf,0xbdbd400c,0xbda54834,0xbd2fe16b, -0x3d714375,0x3cc2cd03,0x3d90c43d,0x3da5f162,0x3de9ffdd,0x3de2a876,0x3e12f2d6,0x3e108baa,0x3e05d2c2,0x3e009906,0x3dd2cf89,0x3d98b8a7,0x3cecaffa,0xbc7939f8,0xbdd0eded,0xbe4a6b12,0xbe8ae815,0xbe8fbe4f,0xbe71e928,0xbe3d464c,0xbd093f31,0xbd94ad2d,0xbd643f4a,0x3c10989e,0x3d4f4353, -0x3da2bd7b,0x3dab8287,0x3dbfcdb1,0x3d961356,0x3cca4f22,0x3cc1bfe4,0x3c81ed23,0xbbbec7df,0xbc32dd43,0xbd3ce8c1,0xbce89ef2,0x3cea881f,0x3d6098b6,0x3d9f4174,0x3da70074,0x3dd9c8dc,0x3de7a31c,0x3e22d6a5,0x3e2e88dc,0x3e1f30e0,0x3db202bc,0x3d0befba,0xbc8f24e1,0xbd2572b8,0xbdb52715, -0xbe0845cc,0xbe467ad0,0xbe462162,0xbe3f250f,0xbd5c85db,0xba9ec738,0x3dbf1643,0x3e48bec6,0x3ea3389c,0x3eeb23d5,0x3eff43e1,0x3f029562,0x3eefe288,0x3edb59ce,0x3ec103dd,0x3ea36bf7,0x3ea1c614,0x3e871608,0x3e370827,0x3d60de5c,0xbd04a521,0xbd2dd042,0xbd86210b,0xbd9bbc25,0xbcbb8396, -0x3c452903,0x3d654e26,0x3d4b6293,0x3e2e71e2,0x3e36ffeb,0x3d895bb8,0x3de56677,0x3dbaa1eb,0x3c2eeb88,0xbb873ba2,0xbce2d527,0xbdae88ec,0xbdf01d42,0xbd213be6,0x3ce7d338,0x3e17b7ac,0x3e509b55,0x3e5dc68d,0x3e779e95,0x3ea22f06,0x3eefeb68,0x3f074be6,0x3f14c3fc,0x3f140797,0x3f0b4953, -0x3ef870cf,0x3ed613a6,0x3e9c574f,0x3e57af4d,0x3e18eac0,0x3d91b6c1,0x3b587a4e,0xbcfd8b3e,0x3bc28491,0x3a7b4a79,0x3b638162,0x3c68bfee,0x3d01a290,0x3c96649b,0x3e1842b6,0x3e322603,0x3d0b261f,0x3e0e52d9,0x3dd83fd0,0x3b7a3c24,0x3ace9cee,0xbbd7a553,0xbd29ce1e,0xbd3230e7,0x3e0403ff, -0x3e3fce35,0x3e88e62c,0x3e95d3f1,0x3e74addf,0x3e549f3a,0x3e4af624,0x3e5b4771,0x3e7825e8,0x3e8b7760,0x3e93b5d8,0x3e9c3d9e,0x3e982519,0x3e87fb34,0x3e7c478a,0x3e48491c,0x3df35921,0x3d2ec544,0x3b157ccc,0x3ce38cb4,0x3d803b5a,0x3d5d32d2,0x3d9a0b54,0x3da4df73,0x3dc09cf1,0x3de3d843, -0x3dfd2607,0x3e0bdb91,0x3e1ae3c4,0x3e121015,0x3dfce2a4,0x3dd8a409,0x3db391eb,0x3d649679,0x3d47dfdf,0x3d9ffacb,0x3e3e4706,0x3e46d373,0x3e5aa639,0x3e699941,0x3e5735ef,0x3e41c477,0x3e28b12d,0x3e0cc24c,0x3df12555,0x3dd03095,0x3da9b02a,0x3d7bffff,0x3d49912b,0x3d2ae348,0x3d6283a4, -0x3d826423,0x3da60e41,0x3dcd0f2d,0x3dcdbacc,0x3e051345,0x3e29f561,0x3e1763bc,0x3e1d60f5,0x3e2836f5,0x3e209914,0x3e0c7360,0x3e09c730,0x3e02fcbb,0x3e13d715,0x3dec5430,0x3dc00e09,0x3d8cf9b5,0x3dd58907,0x3e081fc5,0x3e12c10d,0x3e2b1b0a,0x3e327a47,0x3e3cb0cf,0x3e3b6f27,0x3e4bba9d, -0x3e5ac15d,0x3e4aa899,0x3e3ee5f4,0x3e37c0ef,0x3e2c94ca,0x3e244252,0x3e1f0bf0,0x3e26d3eb,0x3e2aa654,0x3e288c6b,0x3e3b222f,0x3e4f964c,0x3e645864,0x3e6f94b6,0x3e6df3a7,0x3e76e88c,0x3e71fa0a,0x3e6af8ab,0x3e608edc,0x3e43ed77,0x3e2ece5a,0x3e1abac9,0x3e127cc6,0x3e09c93f,0x3e075ea6, -0x3de563a8,0x3ddf14af,0x3db2b411,0x3de0495c,0x3df19201,0x3e12b8ea,0x3e202fdd,0x3e6d5bfa,0x3e5528b0,0x3e4fa6be,0x3e59a331,0x3e5d6aec,0x3e6646a3,0x3e6f992f,0x3e77f8c6,0x3e7cd428,0x3e80a2ea,0x3e818c62,0x3e8379c4,0x3e85d3fe,0x3e88eeb5,0x3e8973c7,0x3e88e09b,0x3e877b52,0x3e866ec4, -0x3e8376ba,0x3e89a5b3,0x3e88424d,0x3e6f770a,0x3e6d65ab,0x3e61fc3e,0x3e581e63,0x3e46f910,0x3e3dbdf2,0x3e43897b,0x3e45b3aa,0x3e37f989,0x3e247cc1,0x3e2c6b49,0x3e33d075,0x3e47db64,0x3e4dbad0,0x3e442375,0x3e7eb820,0x3e3cb80a,0x3e4a6621,0x3e4cc223,0x3e4dd147,0x3e513477,0x3e5330de, -0x3e55f2db,0x3e58e1ee,0x3e5c9955,0x3e60fd73,0x3e63e2aa,0x3e66644e,0x3e6a136b,0x3e654c30,0x3e62adf0,0x3e60178d,0x3e60229b,0x3e5d5397,0x3e53b4d6,0x3e87b9ee,0x3e8dcc80,0x3e856a5d,0x3e752b38,0x3e869aa4,0x3e8249a5,0x3e83048a,0x3e808945,0x3e7b8b53,0x3e800296,0x3e8142c9,0x3e7c9652, -0x3e7e689b,0x3e60c7db,0x3e8039a5,0x3e8647cb,0x3e61b738,0x3d0fbcf6,0xbc809864,0x3d385d07,0x3cf0b8aa,0x3d09e14b,0x3cde3d94,0x3d13c30d,0x3d28cad7,0x3d5e539f,0x3d2f9b5a,0x3d2147e8,0x3d13c908,0x3d172e9b,0x3d1972a9,0x3d2465f7,0x3d1d4d90,0x3d173bfe,0x3d09becc,0x3d069fe3,0x3cdad200, -0x3d34dfde,0xbc99540e,0xbd4ca008,0xbddc3dda,0xbafb6c17,0xbd311998,0xbdb66c07,0xbdb7b552,0xbdb02b06,0xbda652e3,0xbda69fb3,0xbdaa4b6c,0xbdb36019,0xbd242c47,0x3c275cc4,0xbdb8e30b,0xbd416774,0xbd6b8942,0x3cad2210,0x3ccd3896,0x3c910538,0x3b799ff8,0x3cc67d95,0x3d2b60ed,0x3da13e06, -0x3d6ac9ef,0x3d469de1,0x3d197670,0x3d1a8f81,0x3d26a899,0x3d48fe40,0x3d44a9e4,0x3d334e31,0x3d10661d,0x3cfc28d5,0x3cf19540,0x3cb013b0,0xbd7ad18f,0xbbae022c,0xbbe12692,0xbc508df7,0xbc69adb0,0x3cdc50a3,0x3ce477c3,0x3cf543c3,0x3c07a0a3,0x3d276452,0x3d40071c,0x3bf98d87,0x3c863bf0, -0xbb858acd,0xba4a40f8,0x3cb6d483,0xbc95f3eb,0xbbd08bee,0x3cced6c1,0x3c86fd62,0xbb54e445,0x3d5ba00e,0x3dae49dc,0x3e27250a,0x3dcd2d6d,0x3d914d76,0x3d3dcee9,0x3d3dbfb7,0x3d545d05,0x3d8d6a71,0x3d80ee33,0x3d63ff9b,0x3d15c48b,0x3cdbf585,0x3cc20e23,0xbbe89f05,0xbcf0a3ba,0xbcfa5d42, -0xbcb6f4cf,0xbcb49a2a,0xbcaaaeae,0x3d1ac1f8,0x3c684020,0x3d2c5a25,0x3bcd8b32,0x3d59be27,0x3d01e80b,0xbb0dce13,0x3b85a43c,0x3b993bd4,0x3bae8532,0x3a20e801,0xbcdc234f,0xbd17b123,0xbc8f6a62,0xbd521ef2,0xbdb95e70,0xbc55cfb2,0x3d7aa25e,0x3e3e1c81,0x3ddf3fa6,0x3d586ec9,0x3bb6636a, -0x3bb1fa96,0x3cc1982c,0x3d7e8041,0x3d88a82e,0x3d5f55f2,0x3ceaa960,0x3cc007a5,0x3c8a6d07,0xbc294ff3,0xbd1d08be,0xbc71c79b,0xbd12f9d2,0xbc608099,0x3c3e943d,0x3d3aa46d,0x3d8cf837,0x3dc4e65b,0x3daec931,0x3dd65df0,0x3dc943a0,0x3d305215,0x3d3cbd89,0x3d21363f,0x3d24dd09,0x3c8f3d64, -0xbc5167e5,0x3d9d50d2,0x3dd10f18,0x3e23a542,0x3e90503e,0x3ea0e62b,0x3ea3fb4a,0x3e9e6294,0x3e9ebddd,0x3ea53728,0x3e97cf04,0x3e9672d2,0x3e83fd4f,0x3e4ae4e2,0x3e1d7f3d,0x3df1bad0,0x3dad3432,0x3ca2a91f,0xb9a9cae5,0xbcc0ebfb,0xbd864617,0xbc7be460,0xbb98d89c,0x3c720419,0x3d379fbd, -0x3dad8990,0x3de36cfe,0x3dda0325,0x3d83ca90,0x3d89d527,0x3d1dd2c8,0xbc2266dd,0xbc3da6c3,0xbce641bf,0xbcc67b6c,0xbc9b717f,0xbcc7f224,0x3bb72570,0x3d3bc90f,0x3c810554,0xbc40ad5b,0x3d2d94ed,0x3dd15c31,0x3e08919f,0x3e2f8208,0x3e5696fa,0x3e7f3102,0x3e82c0fe,0x3e81a752,0x3e844654, -0x3e1eedc5,0x3d78fa23,0xbd234c4e,0xbd66918d,0xbd091603,0xbb8a0d8d,0xbcd95a92,0xbca2abc5,0xba10cd34,0x3cb47558,0x3d6c3300,0x3d80163a,0x3def37f2,0x3e04286c,0x3d91ddf2,0x3d60e9f4,0x3d00b5fd,0x3c9b4ec0,0x3ca91b3c,0x3ce0f6bc,0x3be332b3,0x3c50ca6f,0x3ca26521,0x3cb17f6f,0xbc9d56f0, -0xbd137df8,0x3c8537bc,0xbe077c65,0xbe381852,0xbe45c2a6,0xbe36e2b4,0xbe280226,0xbe16fd2b,0xbdf76666,0xbda4d8f9,0xbc796539,0xbd27a2bd,0xbd4cf680,0xbd92b7ed,0xbd87fa1f,0xbd8653cc,0xbd51671e,0xbd43595c,0xbd1f2153,0xbd691c43,0xbd38404d,0xbd0da5e0,0xbd3f273e,0x3d9f60e5,0x3def35b0, -0xbd4c9a64,0x3e0efbbc,0x3df2890d,0xbc833245,0x3c45c2e2,0x3cb9f733,0x3c4599a4,0x3cc8e750,0xbd04a32d,0xbda3cee1,0xbde6960d,0xbe01887d,0xbd909122,0xbe606a71,0xbe9ea15f,0xbed2cd80,0xbecfa26a,0xbecebcea,0xbec9508d,0xbebaefdb,0xbeb0ed1f,0xbea728c6,0xbe920b5d,0xbe70e9fe,0xbe3f6753, -0xbe21331c,0xbdfe564d,0xbd9b4aa1,0xbd9f9993,0xbd93f623,0xbd4644d0,0xbd039962,0x3bff2939,0x3d262843,0x3d84d9b4,0x3d8d92c2,0xbd5f3ee9,0x3d8b1023,0x3da05516,0x3d43fa79,0x3d35bea1,0x3c3d066d,0x3b963054,0xbb945bd5,0xbdff13c8,0xbe3c2a6e,0xbe251b99,0xbe11c8b9,0xbde7bf4d,0xbe461a80, -0xbe7f2ddc,0xbe9c6887,0xbe9c8a55,0xbea2ce24,0xbeabc49e,0xbeb5b0ad,0xbeb4cf45,0xbea8ea6e,0xbe9996b3,0xbe7d04c5,0xbe40160b,0xbe1909f3,0xbde190a6,0xbdc1acae,0xbd92afe2,0xbd7793bb,0xbd3d2a48,0xbd18e33a,0xbd0cd5a0,0xbca6f771,0xbc347e2c,0xbb86eab2,0x3cc7c9f7,0x3d5e32d8,0x3d408ad1, -0x3c2ee006,0xbb45db51,0xbc85f7b1,0xbd065337,0xbdc98b1d,0xbdd1fc2c,0xbdebb75d,0xbddfeb5b,0xbe035566,0xbe24e30f,0xbe3dd847,0xbe4aa6db,0xbe4a473e,0xbe44f7a0,0xbe3c7a59,0xbe2b0306,0xbe203f95,0xbe1ba8c7,0xbe1ab0ba,0xbe2241bf,0xbe22fbd6,0xbe2e0d7c,0xbe2d9df3,0xbe26125c,0xbe14f601, -0xbe102621,0xbe0592a8,0xbdcbaa33,0xbdb875ec,0xbd6fe907,0xbc8e2d39,0x3c60e1c6,0x3cf16206,0xbc7d07eb,0x3c889685,0x3ca1cfe9,0x3c10e71c,0xbd3bc909,0xbdaefa61,0xbdae33c7,0xbde4e701,0xbdb53167,0xbdcd1423,0xbe0394c3,0xbe259ea0,0xbe4501e2,0xbe40e1a7,0xbe42bdb0,0xbe47bc9f,0xbe433823, -0xbe4013ba,0xbe3e4cde,0xbe387220,0xbe2e64ed,0xbe1b9f05,0xbe244e99,0xbe2c9ce0,0xbe385e19,0xbe3a250e,0xbe459dae,0xbe398f1a,0xbe0da855,0xbe0478e3,0xbdec9fb3,0xbdbdea20,0xbd6369c0,0xbd81f560,0xbcffd298,0xbd3842f1,0xbbe25435,0xbc5950cb,0xbbd04146,0x3a3a6d29,0xbc78f23b,0xbcd1e27a, -0xbd380052,0xbd8c937e,0xbe156315,0xbe3569a7,0xbe2ffb36,0xbe3414df,0xbe36e09b,0xbe3d4957,0xbe43f97c,0xbe4a89ae,0xbe4cb105,0xbe4eb122,0xbe4fb27f,0xbe50a92e,0xbe53b60a,0xbe553e01,0xbe563df3,0xbe53f985,0xbe516853,0xbe4c5099,0xbe477619,0xbe4c8573,0xbe00d851,0xbe1b3c25,0xbe1a5ec0, -0xbe109089,0xbdfc7816,0xbe013811,0xbdfe93ca,0xbe0783cc,0xbe003f8a,0xbe075e28,0xbdf93d60,0xbdf71c8e,0xbe0555ce,0xbe0c05d7,0xbe15204b,0xbe1ef6cb,0xbe2f99ac,0xbe26da0a,0xbe25210f,0xbe290bbc,0xbe2990db,0xbe2c6279,0xbe2e3b69,0xbe309b36,0xbe32c50a,0xbe35577d,0xbe38017a,0xbe3a84fc, -0xbe3c5ecd,0xbe3f172f,0xbe3a8b55,0xbe37ba89,0xbe352f39,0xbe354f0a,0xbe2f5de1,0xbe38c242,0xbe36dc4b,0xbe295e01,0xbdd7ce5d,0xbe2e5a32,0xbe21ca1f,0xbde0b883,0xbde6a042,0xbde5bdde,0xbdedca1f,0xbdee66f4,0xbdf64e2a,0xbdf4fbe1,0xbe1d2e68,0xbe2783c9,0xbdf27352,0xbe24d964,0xbe391d4b, -0x3cca6cc8,0x3d8b0fd9,0x3c7786bf,0x3d058331,0x3d00aab1,0x3d25698c,0x3ce20e99,0x3cc5036b,0x3cc2ab59,0x3cb72935,0x3cac447e,0x3ca04de3,0x3c895804,0x3c6ca288,0x3c35408d,0x3c356644,0x3c35dbef,0x3c4bd56c,0x3c60f584,0x3c96cdd4,0x3ac3c89f,0x3d759e86,0x3db17ef9,0x3e052662,0x3d46bbaa, -0x3db30d5e,0x3e081295,0x3e045a0f,0x3e00f3d1,0x3dee58c0,0x3e02c473,0x3e034c95,0x3df185a5,0x3dae14fe,0x3d2c1d58,0x3dfdc9f4,0x3dbd21a7,0x3dc8faea,0x3d062e03,0x3d129b10,0x3d408b21,0x3d8df3fb,0x3d373f85,0x3d1bfd48,0x3d0cf55f,0x3d080027,0x3ce81e47,0x3cb3e70b,0x3c510ac3,0x3b5f5c69, -0xbbd150c5,0xbc08f8f5,0xbbd5103b,0xbb311cb0,0x3b39855c,0x3b2cd477,0x3bbc68d5,0x3da4174b,0x3d0a9903,0x3d25c241,0x3d39faf8,0x3d6cb048,0x3d6dd712,0x3d457a88,0x3d4e74c4,0x3d6af7ec,0x3d54f165,0x3d1eeecf,0x3d13446d,0x3d287bb5,0x3d5f717c,0x3d42ddb3,0x3ce95b33,0x3d9a5d80,0x3d98a671, -0x3d8b34b0,0x3daea46b,0x3dff9515,0x3d71670b,0x3d1ed9f4,0x3cae3e81,0x3ce261b8,0x3ce4444c,0x3ca6930e,0x3b363594,0xbc74342f,0xbd097098,0xbd1cff5a,0xbd1c249e,0xbcfc6484,0xbc9e7197,0xbc9e021a,0xbb3ba83f,0x3cdab8a9,0x3cedf555,0x3cea22fe,0x3ce74cc4,0x3d54e62d,0x3d950af4,0x3d8d914b, -0x3d336d48,0x3d63fed1,0x3d7718b4,0x3d92d53c,0x3cabd6a2,0x3d34a942,0x3d34888b,0x3d2f9085,0x3d4fbf7f,0x3d3f944f,0x3d6584ba,0x3d7a9bd1,0x3dcc94bb,0x3e2bfbcb,0x3db3f45b,0x3d71f5e7,0x3d0ab965,0x3d603aee,0x3d5d5c95,0x3d2cb903,0x3c34201a,0xbcbeb736,0xbd714f17,0xbd8b1919,0xbd7f622f, -0xbd57c25d,0xbd286cc5,0xbd1fe3ac,0xbd070868,0x3bf147c4,0xbc836b2d,0x3c18c538,0xbc7c9b17,0x3ac40a19,0x3d532119,0x3d556f4a,0x3d84e511,0x3d043822,0x3da84ff1,0x3d704eef,0xbc6ec4ba,0x3c613a06,0x3c93aefb,0xb9b26e55,0x3c5cc1ed,0x3e4668b2,0x3e242a36,0x3e300272,0x3e1d92a2,0x3de6f857, -0x3dbfa966,0x3d53818f,0xbd5a7d9e,0xbd723925,0xbda162f4,0xbd9a22f8,0xbdcdb11e,0xbdeef98e,0xbe035195,0xbe0adfde,0xbe1138ee,0xbe0d81d5,0xbdc38889,0xbd9ec33e,0xbd36d58f,0x3c97f28c,0xbbe696e5,0x3c59d145,0x3c5742a7,0x3d227d27,0x3db095ea,0x3d7d9830,0x3d7e2f0a,0x3d670596,0x3d6abfc0, -0x3d6cbc29,0x3d90ee19,0x3da525b3,0x3dc80f0d,0x3e040677,0x3e3be3d3,0x3c071d1d,0x3c1e88d2,0xbd93e540,0xbd3a8631,0x3d691fe4,0x3da5c951,0x3d9e8f93,0x3c0f9f52,0xbc5b9b58,0xbdaef0c0,0xbe109c8c,0xbe57bcd8,0xbe8e8a10,0xbeb6841e,0xbeb36a92,0xbe9a9145,0xbe50278f,0xbe31ad4c,0xbe1bc712, -0xbddd6bce,0xbd412940,0xbcb89c5b,0xbc041196,0xbbc0f0e7,0x3c847b05,0x3d9a625d,0x3d909750,0x3dbc7a4d,0x3d9179b8,0x3dfc22a1,0x3e03ac4f,0x3ddfe1f0,0x3d886d6c,0x3d2ee412,0x3d1faf49,0x3c9632d8,0x3c9550b6,0x3c631120,0xbc332c1a,0x3b9f5a48,0x3c432158,0x3dbc2a93,0x3d79298b,0xbdafcaae, -0xbd52b9c4,0xbd245ddd,0xbbbf0c2e,0xbc7c1327,0xbd2bd75c,0xbdc3ea70,0xbdf222d1,0xbe033687,0xbddb172a,0xbda8f6ad,0xbd6e6d58,0xbd27f34f,0xbb7cbfae,0x3c81a0d5,0x3d4f23e2,0x3d2d2145,0x3d904275,0x3e196e25,0x3dc6606e,0x3dad7243,0x3c1a048f,0x3dcc5285,0x3da5ee63,0x3d4eda50,0x3d514b2d, -0x3d1b7c92,0x3d389ea6,0x3d278eae,0x3d04ab95,0x3d907a8f,0x3c80e146,0x3cac5286,0x3dad40fc,0x3e3df5e1,0x3e5b30f1,0x3e214132,0x3de80111,0x3d794068,0x3d855c3c,0x3c56a525,0xbaafe5b8,0xb7747c21,0xbb54120a,0xbc6a8993,0xbceda9fc,0xbd4f9b71,0xbd52fce2,0xbd499254,0xbd27fa05,0xbba198d4, -0x3c0c94ec,0x3b4f657f,0x3cbdfb93,0x3d9515ab,0x3cec6062,0x3c921453,0xbc82ad5d,0x3d312dd0,0x3d805310,0x3dc8ae1c,0x3d3e559a,0x3d0690de,0x3d0764ce,0x3d13ae53,0x3d7ba746,0x3db55392,0x3d4cea52,0x3d7463b2,0x3e0f6df9,0x3e36af56,0x3e317a79,0x3df0ec7c,0x3d86add5,0x3d4122fb,0x3d949d92, -0x3d617ed5,0x3d37aab0,0x3cc92e44,0x3c3588c3,0xbc13ab18,0xbc3a0e76,0x3b1f7489,0x3ca2bdc8,0x3d03b45d,0x3b29b748,0x3c627064,0xbbb48934,0x3cbc2a9e,0x3d52ff6f,0x3d994d74,0x3d3600b9,0x3d1d8fe8,0xbbada7f8,0x3d0bcd46,0x3d43ca3b,0x3d9a450f,0x3d690d6e,0x3d40842b,0x3d2769b7,0x3d9b8647, -0x3bef60c2,0x3c73f7ac,0x3d6d6ab3,0x3dd96545,0x3e1d90d7,0x3e01a2fb,0x3dd7c358,0x3d9d2556,0x3cf4b52c,0xbc33a0ae,0xbd2aa00e,0xbd3b2fc2,0xbd3706c2,0xbd415fe2,0xbce957b0,0xbc0d1817,0x3d090a79,0x3d72a01d,0x3d9cf17b,0x3d5cbd1f,0x3d497d0e,0x3d9d5021,0x3d7e20a3,0x3d6747ea,0x3d19fc50, -0x3ceab1e5,0x3c956324,0x3c97feb7,0x3d65a9f3,0x3d2c4d81,0x3d333e96,0x3d2e9fe4,0x3d6fb4e0,0x3d779a66,0x3cdb78e0,0x3ccc45b2,0x3db5423f,0x3dc8c978,0x3ddb0a4c,0x3df1518c,0x3e0778db,0x3dd76bba,0x3dac52b3,0x3d824923,0x3d6c8840,0x3d530822,0x3d2783f5,0x3d0d4abe,0x3cc07e43,0x3b5cb0d2, -0x3cdb6b32,0x3d357f4e,0x3d8422eb,0x3d9c7d8a,0x3ddfcd92,0x3ddec01a,0x3d7b602c,0x3d741938,0x3d5995c4,0x3d6fec58,0x3d2fb2de,0x3d9cf11d,0x3d4a84d1,0x3da486e5,0x3d4f2f0c,0x3d6d333f,0x3d2a8d7a,0x3d2b5bc1,0x3d1d90e1,0x3d1aac62,0x3d172864,0x3d85fc66,0x3d5dd005,0x3dd92cde,0x3dc4319b, -0x3dbabd63,0x3db2dcc6,0x3dad8e2d,0x3daba7f1,0x3da30810,0x3da34fd2,0x3d9e6107,0x3d9bca8d,0x3d960b29,0x3d94674c,0x3d89fe68,0x3d9ac455,0x3da36d7d,0x3dafeb8a,0x3db539f5,0x3dbbd635,0x3dcc50c0,0x3cac8942,0x3d933591,0x3d9b42ce,0x3d9a7455,0x3d7b1751,0x3d9ed672,0x3da4450b,0x3db0c47b, -0x3d9bad34,0x3dbc2733,0x3dbe6ab9,0x3db06605,0x3db9a82d,0x3daac888,0x3dab148b,0x3dc4c117,0x3dabf504,0x3dcba822,0x3db40ee1,0x3db5c92c,0x3daf2589,0x3dadd007,0x3dab66ff,0x3da92062,0x3dacc125,0x3dafa10e,0x3db29147,0x3db4a3e1,0x3db67fa5,0x3db6de0f,0x3db7561f,0x3db72e51,0x3db77d34, -0x3dbc0b98,0x3db5504c,0x3dd7e36a,0x3da80f50,0x3d835bd3,0x3bab5d9d,0x3db3bed9,0x3d88563f,0x3c8482a5,0x3c93bfdb,0x3ca58770,0x3ce38eff,0x3cdc2a5c,0x3cf5a6fe,0x3d0dae17,0x3d945d90,0x3dc1a0b8,0x3cd41f72,0x3d8c1f5c,0x3dc32099,0xbd6c00ee,0xbda1d8cb,0xbd67d6dc,0xbd879527,0xbd8be1c4, -0xbd92dc75,0xbd848b44,0xbd819696,0xbd8d3349,0xbd78c5ea,0xbd6e59db,0xbd631315,0xbd683b19,0xbd66f77f,0xbd6a59f0,0xbd536147,0xbd46efad,0xbd33d10f,0xbd408b8a,0xbd484c13,0xbd1a28c0,0xbd90daf9,0xbda8d2a5,0xbdc4879a,0xbd6acdd7,0xbd93d0fc,0xbda6649c,0xbdb0cc4b,0xbdb12e0e,0xbdab096e, -0xbdb2264b,0xbdb784b4,0xbdba9460,0xbda15007,0xbd7ba470,0xbdc256ab,0xbdb1391d,0xbdc92e94,0xbdbdb2e6,0xbdd173b3,0xbddcd887,0xbde4ab8d,0xbdbdb794,0xbdb74285,0xbdd48732,0xbda8fab3,0xbd9a1156,0xbd8e3a16,0xbd96c7e8,0xbd94f583,0xbd943bb4,0xbd69ac2f,0xbd4209bc,0xbd0eb86f,0xbd3066e0, -0xbd2a08fa,0xbd25ddaf,0xbda83234,0xbd57f4d6,0xbd60ddeb,0xbd2bd08c,0xbd1ee2fa,0xbcb04d0a,0xbcfabe83,0xbd12cca5,0xbd21c248,0xbd16eb44,0xbd0c520b,0xbd479773,0xbd54c770,0xbd82eb83,0xbd8ad4ec,0xbd89b587,0xbdb1be20,0xbde15459,0xbe12091c,0xbe1f7448,0xbe339624,0xbe0f2e04,0xbe0571b8, -0xbe20ff2a,0xbde065f8,0xbdcd6057,0xbdb19cfd,0xbdb84f63,0xbdb2ac80,0xbdb2a828,0xbd609216,0xbd154677,0xbc63e3d8,0xbcfa9c09,0xbcdd4854,0xbd026870,0xbd5b09bd,0xbd3ebfd4,0xbd0d3c92,0xbc0b1f5b,0x3a373e9b,0x3d0074cc,0xbb0eeeb6,0x3aad1266,0xbc15f0e9,0xb9c54a9a,0xbc78b3ba,0xbcd552e1, -0xbd02ecfe,0xbd3dc90a,0xbd63d179,0xbd8e470d,0xbdebfb5f,0xbe31f419,0xbe6712c3,0xbe758b28,0xbe8241a7,0xbe400595,0xbe33491f,0xbe5e5252,0xbe168ebd,0xbe00e63d,0xbdee5b26,0xbdfef198,0xbdf85909,0xbded9fe8,0xbd7de6e6,0xbce1c0cb,0x3c0a7c8a,0xbc76b39f,0xbc8c72ce,0xbcb493b5,0xbd73078e, -0xbcf94e74,0xbd168007,0x3a828869,0x3ccba7a6,0x3d910803,0x3d397cd7,0x3d19d52e,0x3d0793ef,0x3d3ea1fb,0x3cb4d414,0xbc945ce6,0xbcd379d4,0xbd247c59,0xbd6e38e5,0xbda91644,0x3dfa71db,0x3e112fb0,0x3dcd9baa,0x3d3d742e,0xbd915444,0xbe009119,0xbe23c41c,0xbdef7e45,0xbe028ee1,0xbdd8c02c, -0xbd74ffb9,0xbd5add9c,0xbd290391,0xbd525e55,0xbd16d74d,0xbd000e67,0xbbccf2a8,0xbccb45b2,0xbc1f530c,0xbcc702bf,0xbd7bc49b,0xbc8fc170,0xbd00427c,0x3ba9142d,0x3c8a5e12,0x3d79ebb0,0x3c6d2673,0x3cda985c,0x3d932873,0x3d83bfcc,0x3d95e7b1,0x3da05ae2,0x3d5453e7,0x3d4a9abb,0x3d907407, -0x3dc60b04,0x3dab2090,0x3ddcbd7f,0x3e26ebeb,0x3e24e797,0x3d83f774,0x3e4c40cc,0x3e58834e,0x3e49a2f0,0x3d8ffa92,0x3ca31d5d,0x3c94d329,0x3b95667b,0x3c87a214,0x3ce5988a,0x3d77ae33,0x3d4c75e8,0x3ca8d1c1,0x3c81d73b,0x3cf2c343,0x3b3cbc42,0xbcb19379,0xbc69f127,0xbc2c599b,0x3cacb3c4, -0x3d1b9408,0x3dd75e19,0x3d76564c,0x3d4b55db,0x3ce7e498,0x3dd1b03a,0x3dcd9e1a,0x3d85b100,0x3dc31023,0x3ddf0ac5,0x3db60b4d,0x3db6da41,0x3d79498e,0x3d7bb00c,0x3d223e23,0xbc891ac9,0xbe06b5eb,0xbd952710,0xbc3822e4,0x3e04970c,0x3d291084,0x3c86597a,0x3c670646,0x3bed1268,0x3c091b7b, -0x3b9ca3fd,0x3c514bff,0x3bf7f2bb,0xbc2cd223,0x3cd687f9,0x3d2c225f,0x3c999e4c,0x3c405a61,0x3c0bcc68,0x3950f295,0xbbaf0e5e,0x3ccb4177,0x3e305c56,0xbb04fe88,0xbd14dd90,0x3b3b5490,0x3d2d3461,0x3d90b2ad,0x3e25520b,0x3d0b5fcd,0x3bc5149c,0x3d51b7ee,0x3d4c9c47,0x3d03e58b,0x3c475271, -0x3ca17b7b,0xbca75b53,0xbe2d67cd,0xbdfc122a,0xbe07ec25,0xbde64e4c,0xbe327e27,0xbe462a66,0xbe4b43a2,0xbdee7dbc,0xbd23f523,0x3cb0a821,0x3d4f2702,0x3d6b39cb,0x3d2c6cc0,0x3d76527f,0x3d8face5,0x3d8931d8,0x3d5e5808,0x3d3cde88,0x3d49ca9d,0x3d4261d9,0x3d87a23f,0x3e211072,0x3d3054c7, -0x3c4f5862,0x3d1ca7db,0xb96e3663,0x3caf65fd,0x3dcdffe5,0x3d30fb79,0x3cd24325,0x3cbba245,0x3cae8ad6,0xbb4feb91,0xbcc7b103,0xbd61f7b4,0xbdce1b43,0xbe4d2947,0xbdea49de,0xbdc070eb,0xbdc4cd72,0xbdf414e2,0xbe1ba39f,0xbe43c1e6,0xbe2b9ad3,0xbe06d27a,0xbd9b9c11,0xbcf3ed78,0x3bf87abf, -0x3cd64ff1,0x3d00e0d2,0x3d0208e4,0x3d10ee8f,0x3d226a77,0x3d2cfe27,0x3d550589,0x3d27d565,0x3cf3766c,0x3d08d8d5,0x3d4a8cc2,0x3d38fa15,0x3d217db5,0x3cf32e89,0x3cc56df9,0x3cc4a228,0x3cae1a8a,0x3cd2ff28,0x3c98b833,0x3a9280bb,0xbc47a4fd,0xbd0dce80,0xbdc9393b,0xbe0841e3,0xbe0676c4, -0xbda81285,0xbd82af65,0xbd90289e,0xbd61c055,0xbd351c97,0xbcfcfcfc,0xbce13197,0xbc894f95,0x39ad3070,0x3cf57e76,0x3d131fb5,0x3b86d3b7,0xbc815243,0xbcace62a,0x3c2e43df,0x3ca151e1,0x3bf33d25,0x3c88c03d,0x3cd67aad,0x3d0c5418,0x3cfa7a32,0x3d158a27,0x3d2a98b8,0x3cd960ee,0x3d54855b, -0x3d5b98ec,0x3d3a506a,0x3d245364,0x3d01e890,0x3d103f16,0x3c787d02,0xbd82a73a,0xbdb19261,0xbd938ecc,0xbd78d8a4,0xbd65db7c,0xbd565d08,0xbd377cca,0xbd1992a7,0xbcee6408,0xbcc7598c,0xbc94b792,0xbc130e9f,0x3b33702b,0x3c8b45a4,0x3bbcc47b,0xb9b1136a,0xbb8f1686,0xbc4b2cb7,0xbd201d8f, -0xbd2131df,0x3b8df0f0,0x3bd329c9,0x3c844c32,0x3ca5d09a,0x3d1ad3b9,0x3cf098a1,0x3d24a700,0x3c7c9bf5,0x3d03fd71,0x3c26b014,0x3c202f82,0xbb59583e,0xbc09bd71,0xbc8b1d9d,0xbcb4c7ed,0xbd37105b,0x3cfb9c46,0xbb9f47e1,0xbc136e26,0xbc9046af,0xbcbfb614,0xbce8eece,0xbd0bf9f6,0xbd23cbec, -0xbd1b8f85,0xbd0bc5c3,0xbcf7dfdb,0xbcd1992e,0xbcb97a31,0xbc8148ec,0xbca03b9f,0xbcac6142,0xbcc3491b,0xbcc09de2,0xbcba2b67,0xbccfafcd,0x3cff504a,0x3bd55d41,0x3c46c3ca,0x3c7a74b2,0x3cebcba0,0x3cd020e7,0x3cbecca8,0x3cb023ec,0x3cf0d131,0x3cb6f785,0x3cc6875d,0x3d057507,0x3ccb2cc5, -0x3cd0a032,0x3cbb2f2e,0x3c237550,0xbc37ed6b,0xbc7d7135,0xbc4ba31e,0xbc74c35f,0xbc810c15,0xbc8ebad2,0xbc99c05b,0xbcaeb64b,0xbca577be,0xbca8a174,0xbcab574a,0xbcad697e,0xbcad172e,0xbca843fe,0xbca33faf,0xbc9be73e,0xbc988509,0xbc9d3dba,0xbc868393,0xbcd796cd,0xbc5dc402,0xbb5a3316, -0x3ce035bb,0xbc1f4d30,0x3a9f1369,0x3ce07218,0x3cda1d97,0x3cd41cfa,0x3cac51f8,0x3cb7fab0,0x3ca6da1c,0x3c92447a,0xbb4ab22a,0xbc5a698c,0x3c8eeeaa,0xbb58511d,0xbc4c4843,0x3c50849b,0x3c9610d9,0x3ba3964c,0x3c078f49,0x3c1311d7,0x3c172684,0x3c092cf3,0x3c06d7c7,0x3be602a8,0x3c2a917a, -0x3c23da7d,0x3ba6ef0e,0x3c01d397,0x3c0482cd,0x3c03c04e,0x3c0a971c,0x3c15c05c,0x3c1c1cf3,0x3c3859cc,0x3c4f1db6,0x3be7d42c,0x3cd32a97,0x3d03e7bc,0x3d0ee0fe,0x3cd30af3,0x3d0e8c00,0x3d239fca,0x3d18e919,0x3d11a08e,0x3d0a36f1,0x3d0fdc52,0x3d11622a,0x3d1970a4,0x3d00baec,0x3cb0a6a0, -0x3cf60196,0x3cc5099e,0x3bb0c5ed,0x3b8f9612,0x3c0aedcf,0x3c3a20cf,0x3c19c3e5,0x3b74ea6a,0x3aa921de,0xba6ac1ce,0x3c17a51f,0x3c2d6d60,0xbaaa58fc,0x3bf4477f,0x3c0e9a4f,0x3c01d78c,0x3be8162a,0x3bfd4d5d,0x3c013c14,0x3c62bc9b,0x3c587cd9,0x3c5ac28b,0x3d0790c0,0x3ca92f59,0x3cb136e3, -0x3d019d63,0x3d15ab77,0x3d06f07a,0x3cdf25cc,0x3cca3410,0x3cddc241,0x3ca25896,0x3c9fce70,0x3cfcc006,0x3cedffd6,0x3ceb6046,0x3cbbe948,0x3c02bfac,0xbcc0b59f,0xbc8f4418,0xb9c028c3,0xba359ba7,0xba69606f,0xbc14ce45,0xbc2ca4d3,0xbca43bd7,0x3bab5386,0x3bd15d7b,0xbc97dc85,0xbb6437f3, -0xbb5f3302,0xbb94f6e7,0xbb91ac98,0xbaf23608,0x3b63b918,0x3c55e548,0x3c737262,0x3c99bb4e,0x3cf2949c,0x3cf0a4d3,0x3cb4afee,0x3d33e0a7,0x3d571bba,0x3d3dbd26,0x3d318f80,0x3d01fee5,0x3d0f9a17,0x3cd3a741,0x3d023581,0x3d265dc7,0x3d0f1652,0x3cbe73fb,0x3c7013c2,0xbbe3895d,0xbd528996, -0xbd1f9b71,0xbb4cafb9,0x3c0341bf,0x3bb21e7a,0xbb08f8ff,0xbca72b1f,0xbd1dd2f0,0x3a761408,0x3c98ad03,0xbc8402c2,0x3c1cc56d,0x3c178d97,0x3a9505e9,0xbc074139,0xbbb5173e,0x3b272247,0x3c88da70,0x3c68e069,0x3c8bcfb8,0x3ce52cde,0x3ca9379d,0x3c9e0b1e,0x3d38ead2,0x3d725ee5,0x3d9d2e70, -0x3d47dc56,0x3cfa93bb,0x3cfbb03e,0x3d0a7e29,0x3cf41dad,0x3d240a1b,0x3d39a91a,0x3d059475,0x3cbc72c5,0xbc8d1083,0xbcb4a8f0,0xbcd8c345,0xbcace1cc,0xbd711924,0xbdb34439,0xbe1dcfff,0xbdff3e02,0xbb661986,0xbd82bfa4,0xbdbebc77,0xbe04bcbf,0xbdce8b09,0xbd9b8225,0xbd3551d3,0xbc6cc888, -0xbc169aef,0xbd2fea6e,0x3be5936c,0x3cbf8e77,0x3d650785,0x3d5e3053,0x3cf8027e,0x3d138c3a,0x3d2e0364,0x3d3b559c,0x3d8e25aa,0x3d486042,0x3d3f0b79,0x3d6b2cc2,0x3d89912f,0x3d70c914,0x3ca63878,0xbc59f4b1,0xbcedcb27,0xbce9be65,0xbd1a5cb7,0x3e2de668,0x3e1aa4c3,0x3e42dec4,0x3e3f3e2e, -0x3e396d0e,0xbcfabe57,0xbdea79d2,0xbd4c48d8,0xbd9a60af,0xbd9c5fa2,0xbe0291da,0xbe0336e7,0xbe00dc86,0xbddc5ff7,0xbdab3709,0xbd64575f,0xbd269907,0xbccb71da,0xbd1dc9c7,0xbc4307ee,0x3cc0ede9,0x3cc68b6a,0x3c8caa7a,0x3d073b3c,0x3d1c54c5,0x3da33736,0x3d224595,0x3cefa7e1,0x3cd56b23, -0x3d812e1f,0x3d8de2b8,0x3dd89fbf,0x3dc252bf,0x3dd6b2a3,0x3e112f09,0x3e1dd2c8,0xbb9ea143,0xbc8e3663,0x3ce8382d,0x3c9c8775,0xbc6a34b3,0xbcf8f82b,0xbb87694e,0x3d82b377,0x3da2f19e,0x3d715aa4,0xbcc90b70,0xbd4884bf,0xbdb0951a,0xbdf996b1,0xbe0aa8ed,0xbe121a7b,0xbe12dec0,0xbde6ca58, -0xbda193d4,0xbd1b6180,0xbb8d372d,0x3c59706a,0x3d21c7b3,0x3d4d8af2,0x3d93c69e,0x3e1d3552,0x3d5a5a69,0x3ba2cc5d,0x3cd574d2,0x3ba12c50,0x3d3758f9,0x3e209c82,0x3d8c7ae7,0x3d0a09c9,0xbc9f0454,0xbcaef174,0x3c47d1c7,0x3c03f293,0x3c8274aa,0x3d0c317c,0x3d88a059,0xbc86e5d9,0xbcd75f20, -0x3ce776d9,0x3d8e8095,0x3e06b6a4,0x3e35e34b,0x3e2bd344,0x3e0eb42a,0x3dd284c2,0x3da17aa4,0x3d75e822,0x3cf500c2,0x3d2ab722,0x3ce4ba74,0x3c079b67,0x3cc742fb,0x3c9b5acd,0x3ca6f530,0x3d43e3f2,0x3d3bda78,0x3d8ec1db,0x3cbb35ac,0x3c135043,0x3d7f4725,0x3ccfef51,0x3cee3ea6,0x3d596a06, -0x3d0fc7de,0x3d3c4bd5,0x3cf28205,0x3cbfe022,0x3c99c9ce,0x3cf3870d,0x3d0aa179,0x3ce17787,0x3cda8b7e,0xbd068973,0xbc65cc51,0x3d9f1b50,0x3da41cc8,0x3dcdbf19,0x3e01b543,0x3de59c96,0x3dc0d1db,0x3d891ed0,0x3d58529c,0x3d0749b8,0xbb88c602,0x3c8b120e,0x3b94ba71,0xbc8c21c1,0xbbfef420, -0xbc52ae63,0xbb99472c,0x3c8df234,0x3cfcffe9,0x3d2c3098,0x3d18921a,0x3cd55591,0x3c3c45ef,0x3cac96c4,0x3d2ae8a4,0x3d94a7ac,0x3d30216d,0x3cd0514a,0x3cb306e7,0x3cab92d1,0x3d4edfe6,0x3d4b81b7,0x3d73cad6,0x3d4354e6,0x3be5a5c6,0x3c3d553a,0x3cb508fb,0x3d88bd7b,0x3d424aa2,0x3d4eef05, -0x3d581803,0x3d81d9aa,0x3d6a5045,0x3d217050,0x3c0365b9,0xba9b84a0,0x3c73e4f4,0x3d01e024,0x3d19dd5a,0x3cdb7244,0x3c9a943e,0x3cd199e2,0x3ce3fc85,0x3cfbb446,0x3d0a38c3,0x3d15c84e,0x3ccd6ce2,0x3cc0d70c,0x3cd4efbe,0x3c968451,0x3c89fc61,0x3cee7e4b,0x3c9f6c52,0x3cd39524,0x3d0842e2, -0x3d32b468,0x3d399cde,0x3d4dccc1,0x3d18909e,0x3cb5327e,0x3c1d1b5a,0x3d062579,0x3d4259b9,0x3d89e769,0x3d3eea98,0x3d029d71,0x3c55788a,0x3c1e05fd,0x3bc11fcb,0x3b98f522,0x3b451610,0xbb0a377f,0xbc1199b5,0x3b2eeba9,0x3ce16fdc,0x3d0233dd,0x3c25b017,0x3cc07fe7,0x3cd85726,0x3cd6438d, -0x3cb1ef50,0x3ce3b7a1,0x3cc10bcc,0x3ced5364,0x3cb046ba,0x3d215611,0x3d47fab6,0x3d7db6be,0x3d7a128c,0x3d76deae,0x3d76bef7,0x3d5cbc22,0x3c401a50,0x3cca3854,0x3d0ab704,0x3d3e0f09,0x3d60beca,0x3d7e3291,0x3d8a2dbd,0x3d9deb91,0x3d89d553,0x3d78660b,0x3d547ce7,0x3d2e3c43,0x3d02e8f7, -0x3c9f6e2c,0x3cc58135,0x3ce95f1f,0x3d02a35f,0x3d07b684,0x3d08f6fc,0x3d1107bc,0x3b87fa4b,0x3cb3356a,0x3cac781c,0x3cbdb382,0x3ca4cb3f,0x3cce0938,0x3ca7e2be,0x3c9ca7d4,0x3c643bd8,0x3c27932b,0x3a9c3e38,0xbb0d4df2,0xba5f680b,0x3b6f78ca,0x3c025cf5,0x3c61fb07,0x3d50cb5c,0x3d43fdea, -0x3d4e9472,0x3d5b4bdc,0x3d68d6a5,0x3d736ad8,0x3d7e08f6,0x3d888b29,0x3d7f59df,0x3d7696a8,0x3d6e17af,0x3d632cef,0x3d5a6b2c,0x3d498636,0x3d501ea4,0x3d4ef8bc,0x3d521f9b,0x3d54748e,0x3d4f656a,0x3d685073,0x3d544810,0x3d41a1d5,0x3d0448e2,0x3d55ae61,0x3d44e4ad,0x3d24686f,0x3d1fecc7, -0x3d1c8b34,0x3d1cdc80,0x3d193014,0x3d1bc9b9,0x3d123e39,0x3d326036,0x3d3faa0d,0x3d15b9b5,0x3d3f5cd0,0x3d888d7e,0xbd1b71ac,0xbd3666c1,0xbd131e17,0xbd1d906d,0xbd29e136,0xbd496f3c,0xbd40ba98,0xbd43bf7a,0xbd5bf0f0,0xbd2be294,0xbd1f96c2,0xbd267b71,0xbd20a6c7,0xbd17dd8f,0xbcfd5ca8, -0xbd084d15,0xbd074db6,0xbd08867a,0xbd028bd1,0xbd02a11e,0xbcee1ad6,0xbd278fe0,0xbd307542,0xbd2bd243,0xbd08ba71,0xbd1c6aa9,0xbd241d06,0xbd1dc1fd,0xbd1c08dd,0xbd1d8cf5,0xbd27bba5,0xbd27b85b,0xbd17c532,0xbd1c9966,0xbd0e5836,0xbd1fa06e,0xbd368fab,0xbd2cfc36,0xbd20213d,0xbd271129, -0xbd51df66,0xbd95e5b9,0xbd977dd0,0xbd9ddfe1,0xbdb5922f,0xbd75b59e,0xbd51da42,0xbd66e131,0xbd60bf50,0xbd4a1dd6,0xbd036368,0xbd132e9e,0xbd0e87bb,0xbd0f5a7d,0xbcf8c985,0xbce20667,0xbce0ddb4,0xbd242f3a,0xbcfc35fd,0xbcd62efc,0xbc8fe691,0xbc744b09,0xbca6bab9,0xbc7a4e7e,0xbc9c7942, -0xbcc6b002,0xbcd1e96a,0xbcb763a0,0xbc7253bb,0xbc89d854,0xbc9fef24,0xbc9adf0a,0xbd08331e,0xbd3b8e39,0xbd477684,0xbd60b7f3,0xbd8cc602,0xbde36e35,0xbdda392a,0xbde36eef,0xbe0a25dd,0xbdab60f3,0xbd8855c3,0xbd96ec1a,0xbd8aa287,0xbd67ce01,0xbcbbfd62,0xbd00e35b,0xbcd9d8b4,0xbcecb57e, -0xbca0d97a,0xbc8e3424,0xbc93b934,0xbcef3a04,0xbcbc5724,0xbc2b3431,0x3bd113e7,0x3c0f0834,0xbb5f8085,0x3c29444e,0x3c0895f9,0x3a4a69e5,0xbbf32c0d,0xbc0b323e,0x3bfb0871,0x3af83625,0xbb03b49b,0xbb837592,0xbd1cd1b4,0xbcc28237,0xbcdeeb42,0xbd08817a,0xbd88f723,0xbe117a01,0xbe17a83b, -0xbe1df7af,0xbe3c6383,0xbde8cbea,0xbdb4f99e,0xbdcc0ebe,0xbdc8d508,0xbd9962ff,0xbcb83d7f,0xbceeaea4,0xbcdc4a6f,0xbce7deec,0xbc2f519f,0xba7b95b3,0x3b4277b6,0xbc286ac5,0xbacffdea,0x3bd31f3d,0x3d230acb,0x3d637d0d,0x3d4a64c9,0x3d545789,0x3d1a51b7,0x3d0c46cb,0x3c9a385d,0x3c9998af, -0x3d2e1c50,0x3d40820d,0x3d1e9e78,0x3d26599b,0xbba9aab3,0xbdf9d9d7,0xbd93c589,0xbdfabb7c,0xbde8bba2,0xbd91ca49,0xbde00781,0xbdf5e695,0xbe22bb08,0xbdc94e79,0xbd96db06,0xbd84a617,0xbd78ca77,0xbd7d5633,0xbd3f00a3,0xbd217873,0xbc4ddf27,0x3c203a56,0xbbda0ce1,0xbc8cbf62,0xbcf1345d, -0xbd0d4604,0xbc8c6b28,0xbac138cd,0x3d08d068,0x3d05f09c,0x3c51d189,0x3d5b2a5b,0x3d6b9b07,0x3ccc1258,0x3d71fff8,0x3d18a2c4,0xbcc2eeba,0xbb87dbc2,0xbc8ca431,0xbd6988fc,0xbdef69d0,0x3e0ee92b,0x3e1331f3,0x3db8369b,0x3cbfa810,0xbcacd776,0xbe0063db,0xbe315b18,0xbe732395,0xbda6f0cc, -0xbc7f07b1,0xbcab5a09,0x3b00b2b2,0x3c28f6fc,0x3cf16e98,0xbb84c1d1,0xbcc0c9b5,0xbd3970ad,0xbce33d47,0xbc5d6db9,0xbd1dd54b,0xbd51d382,0xbcdbfc39,0xbc45c9dd,0x3d13ff18,0x3d5414fc,0x3d621162,0x3ce0cd71,0xb989e1fb,0x3c11a1f4,0x3c3ffe9c,0x3d1aecd5,0x3dce7cfa,0x3d177fd8,0x3cf9ead6, -0x3d903d7c,0x3ddeab57,0xbd43b945,0x3b625e21,0x3ce038bc,0x3deb3be3,0x3e9459ed,0x3e60bc5f,0x3e470199,0x3e0759e9,0x3dcc9906,0x3d5c2845,0x3b9da764,0xbd056753,0xbd6204a0,0xbd307e97,0xbd2f0672,0xbcd8f577,0xbc5ac6b0,0xbd1df46b,0xbd4aadc0,0xbd14aef9,0xbd099823,0xbca9eabf,0xbd433faf, -0x3d6d3404,0x3d553184,0xbd339050,0x3be5fbac,0xbbcdff34,0x3bf1922c,0xbcba9c19,0x3c3d3595,0x3d96f75a,0x3de10cf9,0x3dec1011,0x3c8de146,0xbcbd2322,0x3cbd1c8a,0x3cc1b6fd,0x3c6740a4,0xbc818fff,0xbc629523,0xbd1cb5aa,0x3c11f77c,0x3dc2c747,0x3e261875,0x3e3033a1,0x3dc46d19,0x3d9c29b2, -0x3d0b2408,0x3b04059d,0xbd39bd06,0xbd60fc5a,0xbd01dce2,0xbd2b9046,0xbd14de64,0xbc97544d,0xbcbc72ea,0xbbd40091,0xba676c75,0x3d8f2f93,0x3d8d1880,0x3c46b0d5,0x3d2ea648,0x3d0b3b2a,0x3d1f9730,0x3d60e412,0x3d752c9c,0x3c90301d,0x3cd28d10,0x3cd8c309,0x3c896168,0x3ce6c531,0x3c1a5a49, -0x3bf99c3e,0x3c90a2b4,0x3ca41469,0x3ca4244b,0xbc2f204b,0xbc91d14d,0xbca274e9,0xb96255d6,0x3bd8ea03,0xbcc37de2,0x3ca131d3,0x3d1a8ad2,0x3d8079b2,0x3d13fb0e,0x3ce523ea,0x3ce5dd81,0xbc21a970,0xbc818a4c,0xbc1e0903,0x398fe12a,0x3c4a328c,0x3c1c7eb3,0x3b972157,0x3bf80611,0x3ca97b81, -0x3c031636,0x3b9010ea,0x3c9e3de5,0x3c354f74,0x3ca8e618,0x3cdbd141,0x3d4c62fb,0x3d456843,0x3c93caf5,0x3c385621,0x3a303a2e,0x3b5033df,0x3ae646d6,0xbbee3f38,0xbc56a088,0xbd4765b9,0xbd4e17d0,0xbd187bdc,0x3c55cc8d,0x3ca1d009,0xbc85a0bd,0xbcba07ac,0xbc9205f7,0x3ba71fe2,0x3cc72c71, -0x3cae7abf,0xbc133487,0xbbad2edb,0xbc171e94,0xbc202d76,0x3b408769,0xbb1d3624,0x3b20641c,0x3beb1a31,0x3c6eacc4,0x3cef56fe,0x3ccdb125,0x3c93c149,0x3b9d8b53,0x3c1b2532,0x3c3a1e5e,0x3c4eede8,0x3c08bb92,0x3b2ddfdb,0xbbfa8e5a,0x398aca24,0x3c235e0d,0x3c0ff58b,0xbb0400bb,0xbc2d377f, -0xbc8f02dd,0xbca48b3c,0xbccdf472,0xbd1f14f3,0xbcc62246,0xbbfb5cc9,0x3c8796f0,0x3b77797a,0xbc28e2d5,0xbce07907,0xbc97eeb5,0xbbaeddef,0x3bff5334,0x3c1b93fc,0x38ebac6e,0x3bfc407a,0x3cbaa807,0x3c79b0ab,0x3c5a2e3f,0x3c0137a9,0x3bfbcc84,0xbb066e1e,0x3c5b7ef2,0x3c9ee867,0x3d100dce, -0x3cca76f8,0x3ca263bf,0x3c47ed67,0x3c3acd9a,0x3c6d9d5e,0x3c74759a,0x3c32fbbc,0xbbf281e6,0xbc85353d,0xbc67a01f,0xbc5c9ca4,0xbc66bd9d,0xbc6bc20e,0xbc5fc32a,0xbc5ac530,0xbb214c34,0x3b501f57,0x3c359533,0x3c93b867,0x3cf2933d,0x3d20a2a3,0x3d15640e,0x3cfd81bf,0x3cdfbe3e,0x3cc447fd, -0x3cba4803,0x3ca07914,0x3cfc7455,0x3c3a72a6,0x3bdfdda2,0x3b8b5c26,0x3af5ec1e,0xbc0b7ee7,0xbc18e629,0xbc5daa31,0xbc503950,0xbc7d3395,0xbc40f078,0xbc6e967a,0xbc2cb815,0xbc4408a8,0xbc692486,0xbc7a8ee0,0xbcace12d,0xbceccf82,0xbcdc7ef4,0xbce2ff59,0xbce0bada,0xbce4e46f,0xbce82c6a, -0xbcf81213,0xbce0ccec,0xbcce9048,0xbcbf734e,0xbc9ec538,0xbc892093,0xbc44e6a4,0xbc6e4d04,0xbc7242cc,0xbc8168e5,0xbc866ca6,0xbc858c1e,0xbcabe799,0xbc4b6dd0,0xbbc15f09,0x3c30ef41,0xbcab63aa,0xbc4d2951,0x3acd014e,0x3a4282e3,0xb7dbbd9f,0xbadf24b9,0xbae33f47,0xbb484511,0xbb10bee0, -0xbc48534a,0xbcb219a1,0x3a3b455a,0xbc62be8d,0xbd2436a0,0x3c2e441d,0x3bdb65c1,0x3bf6326d,0x3c29eb50,0x3c531f6f,0x3c631051,0x3c4f9f3a,0x3c380003,0x3c3b276f,0x3be8a7bd,0x3c007826,0x3c6e2107,0x3c3b5fd8,0x3c2f8401,0x3c056feb,0x3c0c409a,0x3c033fab,0x3bd8d42e,0x3c0ec372,0x3c0f460a, -0x3bc36736,0x3c3762df,0x3c4a6338,0x3c241243,0x3c67b870,0x3c5a2dab,0x3be65c93,0x3c1b7ff0,0x3c15d8b1,0x3bd82386,0x3bf6ebbc,0x3c04907a,0x3c3d5a02,0x3c346349,0x3c10c72c,0x3bd72b41,0x3bbfea8d,0xbb99d68d,0x3c25afe7,0x3c881248,0x3caa20a4,0x3ca51dba,0x3c99b4a8,0x3c858a85,0x3c92ce5f, -0x3b578a34,0x3bb4355d,0x3cd1d1db,0x3ca5ad6d,0x3c89ff7c,0x3bfa619f,0x3bf25a16,0x3bcb8609,0x3b49f2cb,0x3c09ed0e,0x3c03c2c9,0x3b5425cb,0x3c254bb7,0x3c4c66fb,0x3c9df194,0x3c9c8cb8,0x3c9075f0,0x3c2924cf,0x3c727996,0x3c694820,0x3c114ff3,0x3c18884e,0x3c313b8c,0x3c94ef47,0x3c2c285d, -0x3bcc73f3,0x3bd29d34,0xbb51b5e6,0xbcb69b70,0xbbb7b8d8,0x3c5d23c9,0x3cbfdb9e,0x3cfa3e28,0x3d163c33,0x3cd404e2,0x3cf639b1,0xbbe2f276,0xbac2c719,0x3d175a0c,0x3cc324fd,0x3ca86e56,0x3b805050,0x3b5de0a4,0xba27236d,0xbbe93324,0x3b856a70,0x3b7eb02f,0xbbc697f1,0x3bd03ce8,0x3c3c2765, -0x3cc3eda3,0x3cc4d167,0x3cb485e7,0x3bb90a84,0x3ca06d3c,0x3c6f1499,0x3bdab34a,0x3ba4b994,0x3bf08d2d,0x3cd67b82,0x3bb58160,0xbb381b45,0xbaff2ffd,0xbca1e894,0xbd02047d,0x3bb672cd,0x3ce25959,0x3d1d0be2,0x3d3c8639,0x3d3f3da9,0x3d36dd8e,0x3d586c80,0xbbd06c16,0xbb3fa593,0x3d82790d, -0x3d41be58,0x3d0b501c,0x3b72fa76,0x3a960207,0xbb1f7eb6,0xbc64b8d8,0x3b0bc1c4,0x3b03760a,0xbc50f805,0x3bc8ed57,0x3c6656f3,0x3d03371a,0x3d28c7f8,0x3d19df4a,0x3c49b1fb,0x3d2d922a,0x3d1ed288,0x3c84aaef,0x3c56c405,0x3c655c29,0x3d2cd501,0x3c86a724,0x3ae39df2,0x3bcfad40,0xbd039677, -0xbdad11b9,0xbdba06aa,0xbdedaa28,0xbdb49f0c,0xbd0d2580,0x3ca0ae60,0x3b8e9590,0xbd8c0bc9,0xbd4c0a88,0xbd2c224b,0x3b7e4f32,0xbbd8350c,0x3a80bda3,0x3b4d2a6c,0xbcb50fe4,0xbd0b0326,0xbce18567,0xbca159a0,0xbca8ddfa,0xbca5f2ed,0xbc00a300,0xbc13d786,0xbb34feec,0x3c8e51f2,0x3cf9797a, -0x3ca9ebe9,0x3d1df30c,0x3d282d92,0x3c99b848,0x3d2239fe,0x3c56b2c7,0xbc88fffd,0xbca53540,0xbcd584bc,0xbd46cd4f,0xbd8bee96,0x3c5c1b2e,0xbc126e09,0xbdbd6a52,0xbe01f978,0xbe36b02c,0xbdce5b8d,0xbd993f57,0xbdfc1d46,0xbe00232d,0xbe009094,0xbd55ced6,0xbda44e38,0xbdb8f058,0xbdba0483, -0xbdbfdba5,0xbd79f239,0xbb8c60de,0xbc9b6e19,0xbc6df048,0x3c6dc147,0x3c68062b,0x3cbbf3b8,0x3cfb988e,0x3d433630,0x3d3bf4e5,0x3cd5ae43,0x3c8cb57c,0xbab98e2d,0x3c278f20,0xbbe2548c,0x3cb1b1ba,0x3d53aefd,0x3d20eaa1,0x3bf7a9cd,0xbd3c3fcb,0xbc1e63cf,0x3d8610e6,0x3dfeaa49,0x3e3b7c49, -0x3e508703,0x3e212e46,0x3e3058a6,0x3d7d51b7,0xbe11b533,0xbdb7b98f,0xbda3a84b,0xbd4932d6,0xbd73d5bd,0xbd46e3f4,0xbcb5ca75,0xbd1aea70,0xbd1b6904,0xbcc315e1,0xbd004b6a,0xbd10a47b,0xbd048af3,0xbd002ee2,0xbc0ab8c5,0x3bccb24f,0x3da854ce,0x3d9024f1,0xbcf36f07,0x3ca1630d,0x3c093ade, -0x3c0946e9,0x3b369f42,0x3c8a5b8d,0xbc691ea0,0x3dbc1060,0x3e0b01dd,0x3def84e1,0x3daedf72,0x3bce8265,0x3b670b70,0x3c431a86,0x3cd22dc3,0x3cfed851,0x3dbfcb43,0x3dd082ca,0x3c886ba1,0x3d892718,0x3cfa4491,0xbc58ec6d,0xbdc12106,0xbe136ce9,0xbe203894,0xbe1457d4,0xbe024def,0xbdcdf9c5, -0xbda39ac6,0xbd77f645,0xbd1d64cd,0xbc666fa8,0x3be03a0a,0x3a7788bf,0x3d23b262,0x3d197654,0xbc8e46d8,0x3ce40752,0x3ce5a7e3,0x3c1ac869,0x3d278608,0x3d7447b2,0x3d4f24db,0x3d64b933,0x3d19e3f2,0x3b2d3e30,0x3be3944a,0x3cf8aaee,0x3d0354e2,0x3cfbbfec,0x3d354c11,0x3d91973e,0x3d619dc5, -0x3c998b8a,0xbd53d1ac,0x3ca6cf84,0x3d8651c3,0x3dffa7ed,0x3dd175c6,0x3db34276,0x3d757e15,0x3d515aca,0x3d102a51,0x3d074cd7,0x3d042866,0x3d086141,0x3d0707bc,0x3cb9f13e,0x3cdbcb38,0x3cb7d69e,0x3d47c059,0x3d55e569,0x3cf496c2,0x3c59a280,0x3bcdff1e,0x3950c6f8,0x3c48e117,0x3c61aaad, -0x3c69c78f,0x3d1ace9b,0x3d43ceee,0x3d1e39c1,0x3d1c31f4,0x3ceadf01,0x3d18065d,0x3d5ebfa9,0x3d873ed1,0x3d8523af,0x3d3f5301,0x3cc269e4,0xbc821554,0xbcd80464,0xbcaad6f0,0x3cc4c13b,0x3b55396f,0xbc8b1027,0xbd3d1fbb,0xbd7f590d,0xbd4ddc6d,0xbc06af2c,0xbb39011e,0x3bbdbd13,0x3b012bd3, -0xbc137fca,0x3afb9029,0x3bf7110d,0x3c826c44,0x3c945304,0x3c8de9f9,0x3cc21f75,0x3ccc19c7,0x3cf82827,0x3d1ceedd,0x3d38b0fc,0x3d30ff83,0x3d2ec8f2,0x3d108d56,0x3ccff30a,0x3cc62a97,0x3d0f4789,0x3d2c6c41,0x3d1ec8bb,0x3d12d560,0x3d0bd008,0x3ca2f3cc,0x3c001345,0xbb650d94,0x3bbcc703, -0x3c2b6e04,0x3c786721,0x3cc8d4a6,0x3d15c6a2,0x3d3e2854,0x3d31732d,0x3d0b788f,0x3cbf1306,0x3ca5f279,0x3ce0ddf2,0x3cb3822e,0x3c638850,0x3cc31b8d,0x3cfac658,0x3cf7715f,0x3ccdf37f,0x3cf42c43,0x3cb060ce,0x3cd8e1d5,0x3c95ed36,0x3c996cd9,0x3c57ddf4,0x3c64a57e,0x3c893126,0x3c9b4c6e, -0x3ca0d552,0x3ce5efe9,0x3beb2b2b,0x3c711e47,0x3bf34300,0x3ad4f923,0xbb432d7c,0xbc008b07,0xbc36260c,0xbc913ec0,0xbc8afaa1,0xbc8dfbf6,0xbc90b952,0xbc82affa,0xbc80e418,0xbc581944,0xbc389485,0xbbcbfc23,0xbad6bdae,0x3b14b53c,0x3b5ac35c,0x3bf3c6ea,0x3b961900,0x3c35cb65,0x3c385a5b, -0x3c245b6f,0x3c33b62b,0x3c83e598,0x3ca418f5,0x3cb9e389,0x3cbcf01c,0x3cf9a365,0x3d101fd8,0x3d16c09e,0x3d010336,0x3ccbb645,0x3cb7936b,0x3cb3ad4d,0x3bd2c2ca,0x3c743309,0x3c35b8b7,0x3c2a777b,0x3c09cc5b,0x3be94f39,0x3bb5e3f8,0x3b7127f1,0x3b942ebf,0x3ba55c23,0x3bc2858c,0x3bbaaf29, -0x3bbc316f,0x3bb57226,0x3bd76ded,0x3be4cb73,0x3bf71884,0x3c054f3e,0x3c0e1690,0x3c41a608,0x3b9fd076,0xba91149c,0xbc5e0aac,0x3c1d561a,0x3a8ac187,0xbc643f26,0xbc4042ed,0xbc20b85b,0xbbe5fc85,0xbbdf2a77,0xbbc13665,0xbb66af86,0x3bb719c9,0x3c6dc4ac,0xbc13355d,0x3ab2a86c,0x3c738c33, -0xbc287737,0xbc457dbe,0xbc3e7b35,0xbc59376f,0xbc616d11,0xbc3d4ea3,0xbc328e76,0xbc33cff8,0xbc493766,0xbc803245,0xbc7d9a5e,0xbc3772cf,0xbc2c3dae,0xbc22e924,0xbc34c217,0xbc2f31a5,0xbc20052e,0xbbce7bac,0xbc0dcd64,0xbc08ef1f,0xbb86026f,0xbbf0703a,0xbbee911f,0xbba0a466,0xbbcf0eac, -0xbbef04f7,0xbbeb8ba0,0xbc0b0387,0xbc14a081,0xbc1e704e,0xbc1d0a99,0xbc0df0be,0xbba11278,0xbc184eb1,0xbc298f85,0xbc45db6d,0xbc43a73d,0xbc97369b,0xbcb3c8d3,0xbcc9529c,0xbcb20b67,0xbc686443,0xbc343cee,0xbc5bbce3,0xbca75b30,0xbd04e22c,0xbd045620,0xbc9fe638,0xbc7eeac9,0xbc52c752, -0xbc750693,0xbc630876,0xbc42b847,0xbb097d37,0xbc1003f4,0xbbb8407f,0x3a9c2176,0xbb622cee,0x3b59ef84,0x3b821ac3,0x3b1ab490,0x399ba1a0,0x3a2d4dd2,0xbba597b8,0xbbec9506,0xbbf799e0,0xbbeff202,0xbb8f60ac,0x3b351de9,0xbb6790d2,0xbc1adfe6,0xbc9e9e9d,0xbc9f89f4,0xbc8c0be6,0xbcad3430, -0xbd1629e7,0xbd10d7dc,0xbcafcc2d,0xbc9dd829,0xbc8be666,0xbcc8119c,0xbd3f053b,0xbd47cb9c,0xbccfe450,0xbcae3ab1,0xbc6f8096,0xbc993d58,0xbc84c481,0xbc45f635,0x3bc9c344,0xbbefd3e4,0xbafe22d3,0x3beab419,0x3bc61199,0x3c78b13c,0x3cb001de,0x3c84a660,0x3c49a5c6,0x3c951b3f,0x3b92a94c, -0xbb12f952,0xbb102646,0xbb5ebd77,0x3b07f4f5,0x3ca25897,0x3b4d2bf5,0xbbf1029a,0xbcb8ebbc,0xbc96032b,0xbd0f88a8,0xbd08aa91,0xbd39353b,0xbd11d509,0xbc445af3,0xbc364129,0xbc930052,0xbd14cf4b,0xbd9f061a,0xbd9f1433,0xbd1d66d7,0xbcd90358,0xbca53c36,0xbc9cbb94,0xbc8e8626,0xbc39e95a, -0x3c7eab9e,0xbb99df41,0x3ba13502,0x3c930967,0x3c125590,0x3cc80d25,0x3d03e32c,0x3cfd6a0e,0x3cb5c4a0,0x3ca66b85,0x3cb89dcf,0x3cd17ae3,0x3c0ce8ef,0x3bf5f43a,0x3c27703f,0x3d21fb83,0x3c637dea,0xbbac7e84,0xbd08574b,0xbd240ae6,0xbc1e8588,0xbd52c044,0xbda7b1f0,0xbdc347cd,0xbdf8aba8, -0xbd83e796,0xbd0f4588,0xbcad32e1,0xbce27dd2,0xbd3f6476,0xbdc2806b,0xbd6ce678,0xbd307bce,0xbd3920ab,0xbd053535,0xbcba9d71,0x3b3b35a4,0xbc147e44,0xbc2a8ae0,0xbccaae8e,0xbc78e5cc,0x3c68520e,0x3d03cfe1,0x3c8e68b0,0x3cc1b214,0x3d5d83a9,0x3d02f5a4,0x3c97ae05,0x3c5e577f,0x3c8ea820, -0x3b5908f4,0x3bb05271,0xbcc7f12b,0xbd00fc11,0xbcafabf7,0xb9646bdb,0xbdb1ddac,0xbda800a4,0xbde5c275,0xbdb404ad,0xbcf27eaa,0x3c7a2093,0x3c8c9010,0x3cd77564,0xbdb7a2aa,0xbdd876d4,0xbd610f1d,0xbc25cdd8,0x3c5dc073,0xbb3bef57,0x3c564f53,0xbafbbd94,0xbc712ed0,0xbc0de2f6,0xbb99fed3, -0xbc5bcb14,0xbc4284f1,0xbbb02657,0x3c635c36,0x3d3cd19b,0x3d2cf732,0xbc51f7d3,0xbb5210a0,0xbacc2bf9,0x3bde3b73,0xbc0fe212,0xb9652cce,0xbc8eb563,0x3d20dba8,0x3d0e7cf1,0xbc8433f5,0xbd7c3d61,0x3e347827,0x3e56fe62,0x3e2b9a5f,0x3ddfea80,0x3cee68bd,0xbd8aa4ac,0xbdbcd06d,0xbc9fa228, -0xbdecea5b,0xbde39846,0xbd03dd8a,0xbcb091d0,0xbcc7029f,0xbda212d3,0xbd8b3ea2,0xbd7b21fa,0xbd11b453,0xbc85823c,0xbbc80a11,0xbc6ecfeb,0xbc5c64bd,0x3bcaf81e,0x3d411e34,0x3caa03e0,0x3c46aafa,0xbb8f261e,0x3ba55a88,0x3b4837c3,0x3b0109a9,0x3bffd859,0x3c8e1408,0xbc00cfc5,0x3d3e3288, -0x3dae8ee4,0x3e20571b,0x3e225508,0x3b620ec7,0x3a44a4ae,0xbc7f7dd4,0x3cfe56ed,0x3de67120,0x3e2585d6,0x3e118606,0x3dc80803,0xbd56aba0,0xbdd40561,0xbd6a2124,0xbd7d9c0c,0xbd2b3706,0xbd63385a,0xbd4face1,0xbd7179dc,0xbd5dfccb,0xbd57a51b,0xbd1388ce,0xbc8f9c1e,0xbc1f5d27,0x3c0ebdcc, -0x3d4ac344,0x3ca86bd0,0x3c6a70f3,0x3bfbc3ce,0x3ba6bc10,0x3c173e6e,0x3c0d9fcc,0xba64473a,0x3c726177,0x3d6b5c20,0x3d8d9299,0x3d847f5e,0x3d3a89c7,0x3cd7edcc,0x3d0e031d,0x3d10cb10,0x3cba2d46,0x3a7e919c,0xbcacb3c4,0xbb323543,0x3c97f7f3,0x3d996824,0x3d09db28,0x3d1f54cf,0x3d979cb2, -0x3d4dd4b6,0x3ced2224,0xbc06927c,0xbc878550,0xbc6f0d2b,0x3aca9f95,0x3b3e2fea,0x3b9518e3,0x3c54a704,0x3c724aa8,0x3c812d6a,0x3d0076d6,0x3d39ffd0,0x3d3dd154,0x3cd47b0e,0x3d0539cc,0x3d18c266,0x3d69db45,0x3d22ecc2,0x3cf02b93,0x3cb41a83,0x3cfdf1e8,0x3d238c3c,0x3d3588f0,0x3d23160e, -0xbb8c9adb,0xbc9b2da0,0xbcf28d2e,0xbcac15dc,0x3b9ca0a3,0x3c9bbc9e,0x3c9d2ef4,0x3c6f7ad1,0xbc829e1d,0xbcacfd46,0xbc4291ac,0x3cddabb9,0x3d7375cd,0x3d9ad70b,0x3d9fbfc8,0x3d83a0b5,0x3d34358f,0x3d085298,0x3cd7167b,0x3cd39248,0x3d0840be,0x3d1ab743,0x3d1f108f,0x3cd20faa,0x3c955e32, -0x3c99ff99,0x3cd4fb1a,0x3d02cdfd,0x3d1a4b56,0x3d2498db,0x3d2eb875,0x3d123f65,0x3d348305,0x3d1b759d,0x3cd91929,0x3c0eecd7,0x3c4dc65e,0x3bdcd84f,0x3c84a289,0x3cccab26,0x3cfbc20c,0x3ccf6756,0x3ccafae3,0x3cdc7625,0x3ca9c82e,0x3c50fd8c,0xba95bc7c,0x3baa8974,0x3c168fe8,0x3c94b561, -0x3ca7af36,0x3cdfdf18,0x3d0e9923,0x3d1106fa,0x3cf50d15,0x3d088a6b,0x3d09679b,0x3c8d9887,0x3bc3513a,0x3ca8419c,0x3d0d8e80,0x3d379268,0x3d154986,0x3cdea2ab,0x3caea24b,0x3ca2e647,0x3ca9100f,0x3caf90de,0x3c8059f0,0x3c3fa675,0x3c139aea,0x3c368f77,0x3cdf6db4,0x3ce4fb44,0x3cce4681, -0x3cacbca4,0x3c9e419f,0x3c946b39,0x3c7e1a7d,0x3c4a8306,0x3c054430,0x3bc47a94,0x3b728317,0x3a95a0ea,0xbb2400c4,0xbbd11c9b,0xbbca92e4,0xbbe58095,0xbc0169d9,0xbbe72e6a,0xbbb191c9,0xbb9c0862,0x3b8aafc4,0x3c48db5e,0x3c9c21ea,0x3cc6fe46,0x3ce2384d,0x3d0922b3,0x3d092eb3,0x3d12c75c, -0x3d16f991,0x3d18b5bc,0x3d18319c,0x3d1d5f1a,0x3d1461f5,0x3d0f4d3d,0x3d0196e1,0x3cf3469f,0x3cbea57f,0x3cc88ec0,0x3cba3bf3,0x3cb24177,0x3ca64dbf,0x3c9d27f3,0x3c9777a5,0x3c94ceaf,0x3c94c4e3,0x3c90ec8e,0x3c8d0fbf,0x3c80e2a7,0x3c6d57d9,0x3c4ab1dd,0x3c5c50b3,0x3c65cbdf,0x3c6cd9b9, -0x3c6f0ae6,0x3c741c4b,0x3c5a8c7e,0x3c84eb5d,0x3c9c023e,0x3cbdc0f0,0x3cb1b750,0x3ccdab7e,0x3cecb83f,0x3ce49c84,0x3ce21b98,0x3cdee2ef,0x3cdd645a,0x3cda07f6,0x3cd923ca,0x3cc8eaab,0x3cc1bf42,0x3cd16c57,0x3cc8667c,0x3cb7a90f,0x3bac9041,0x3b395121,0x3b975ee6,0xba951202,0xba91a54d, -0x3b26098d,0x3b20acec,0x3b8d6d20,0x3c2bfe92,0x3b9625eb,0x3b6b2fb8,0x3bba5a6a,0x3b069921,0x3ad038bb,0x3b0bed52,0x3b8dc88e,0x3ba621fa,0x3b9534a8,0x3ba7186a,0x3bc6142f,0x3beb5d65,0x3c1d0c4c,0x3c2114fc,0x3c022b96,0x3c10b48d,0x3c0673fa,0x3c02bf08,0x3b85c6ce,0x3b39806c,0x3b04f05c, -0x3b83521e,0x3babd6ee,0x3bede395,0x3be677eb,0x3bcedaf1,0xb9a01418,0x3b38f607,0xbc12a2c6,0x3a76fb1f,0xbc2bbcd7,0xbc2541ca,0x3afe8ddb,0x3b6b35ad,0x3c11eff4,0x3caf97c6,0x3c003542,0x3b62ace7,0x3c049248,0x3920d2fc,0xbaccdc33,0xbaacefc4,0x3b700e8c,0x3bb51827,0x3b806b65,0x3bd28bcc, -0x3c0ea3c8,0x3c68344a,0x3c9f55b0,0x3c9b1755,0x3c8d22db,0x3c7fa1ae,0x3c590819,0x3c668893,0x3ba22526,0x3ae6609d,0x3aa9cb1a,0x3b924fe4,0x3c05a02b,0x3c4d4431,0x3c418145,0x3bd2db6c,0xbc203229,0xbba0a541,0xbc79574f,0xbb97eab6,0xbcf7609c,0xbd0c9ce9,0xbc323af7,0xbc0aa9bd,0x3ab2dc74, -0x3d0c9817,0x3c0724bb,0x3a567176,0x3c2eb720,0xbc3219dc,0xbc5a36bc,0xbc101303,0x3b10ea2b,0x3bb9f5e5,0x3b57c0f5,0x3bcc5a4d,0x3c390a03,0x3cba7d21,0x3d002f82,0x3d00cfb9,0x3cd9b8bb,0x3ccb4ad0,0x3cb707d7,0x3cbf3b56,0x3ba11800,0xbb4e38d4,0xbb6899dc,0x3afabaed,0x3c32e943,0x3c9e6794, -0x3c814f33,0x3bd811e5,0xbc927960,0xbbe3af68,0xbd14eae4,0xbc50d9df,0xbd3ff8ef,0xbd49f5ae,0xbba0daeb,0x39832703,0x3c920621,0x3d6af87c,0x3c74cffd,0xbb2cf209,0x3c8c99f0,0xbba9328a,0xbc62cdb4,0xbc4ade8c,0xb9f8a859,0x3ba026c3,0x3af6d5d8,0x3c281648,0x3c86b2e2,0x3d0c51c6,0x3d4e50e6, -0x3d52b0ad,0x3d40da4b,0x3d0f1f47,0x3ced4741,0x3d33196b,0x3c9dcdbd,0x3c292120,0xbadd32d0,0x3b846c5e,0x3c6b2de6,0x3d02418b,0x3cc81cde,0x3c107291,0xbd27e159,0xbd105855,0x3ce05fda,0xbda290f1,0xbd85669c,0xbda50856,0xbdbe2179,0xbd7977a4,0xbd11e79c,0xbccfa0ca,0x3d67833b,0x3d694359, -0xbcfa0ee9,0xbd59d674,0xbd7a89d6,0xbd1619f8,0xbae75925,0x3ac91f08,0xbce2f5b0,0xbc7a0d61,0xbb938a7c,0x3c5e141e,0x3c7670d8,0x3c853d9c,0x3cd3d435,0x3cad42b4,0x3cc6f233,0x3d17d5f2,0x3c45f178,0x3add68d9,0x3c3ebdf4,0xbad053ba,0xbbfa428d,0x3c4b8ab4,0xbc0915b1,0xbc6245b4,0xbcad977f, -0x3d2c7ff6,0xbdb4aa66,0xbdc34c1f,0xbd0d6d45,0x3c5c43cc,0x3cc37eeb,0x3b4ca212,0xbb70fee4,0x3c78479b,0xbcb9fa80,0xbd5ed677,0xbde13f9c,0xbd90c7f5,0xbd5627aa,0xbcc52647,0xbcd6958d,0xbc80fcbf,0x3c021806,0x3aa2a859,0xbb18fddd,0x3b092fb9,0x3cc25a5c,0x3d0a9e01,0x3d532426,0x3cf1ca74, -0x3cc95a9f,0x3c4625f0,0xbaafeb0b,0x3a97d5ae,0x3b80c016,0xbb825154,0xbb227d75,0xbc908f46,0x3c173ae5,0x3c0e2ff6,0x3c4c4fb8,0xbd7503ae,0x3e056027,0x3d485dd3,0xbcc9b3b9,0xbde417dc,0xbe60b354,0xbe473091,0xbe1fb2c3,0xbd9a9310,0xbda7bd44,0xbd9cd998,0xbdf499e2,0xbd86b9ed,0xbd114c76, -0xbc051c4d,0x3c182822,0x3b42f043,0xbc87b04f,0xbc4adf30,0xbb9ea4a4,0xbbef0e3b,0x3ba82573,0x3ce094a1,0x3da956ed,0xbb3cc85f,0xbcb9168b,0x3bf30266,0xbc2572af,0x3bf61908,0x3b0e25e7,0xbb432942,0xbaba7854,0xbb008802,0xb9e75435,0x3c95df3b,0x3dd741e3,0x3de6d3e5,0x3d742798,0x3db3fc65, -0x3e228f4a,0x3e39b27f,0x3e254bdf,0x3dceb03c,0x3cf25dbb,0xbcdc57d7,0xbdb8fc14,0xbdbdd8d9,0xbdb7dbcc,0xbc5eea1d,0x3bd47ab6,0xbba32afc,0xbc938526,0xbccc9dce,0xbcdab9fc,0xbd08b897,0xbd137f06,0xbccd2c6b,0xbcbfba41,0xbbaea719,0x3d5bcff1,0x3c19d999,0x3bf459d9,0x3cc9e8fb,0x396650aa, -0xb890ed44,0x3b3eae46,0xba49555d,0x3be6acb7,0x3d1afae5,0x3d68a0fe,0x3d9396e1,0x3db0b606,0x3d791759,0x3cef2d9d,0x3cc83b12,0x3c756ecd,0x3c6988f6,0x3c5e79a4,0x3d86dcd4,0x3deaf305,0x3e161615,0x3de53e4f,0x3d68229e,0xbd021901,0xbd46b9c1,0xbd6d207d,0xbd2df728,0xbd4be246,0xbd52d32a, -0xbd6a07e3,0xbd1a53eb,0xbcbae87d,0xbc5a396f,0x3a49a7ea,0x3c87c125,0x3d166581,0x3cb80c35,0x3c896e3d,0x3c44c4f8,0x3cfaa922,0x3d1f10b1,0x3d33c09b,0x3d38ffa8,0x3d40d42d,0x3d45b89b,0x3d11142f,0x3d05f249,0x3d3380cb,0x3d06cfd7,0x3cc1663d,0x3ccc7dc0,0x3ce59ba1,0x3cc320ad,0x3c81fc13, -0x3ca69292,0x3ccdc2c6,0x3d31c324,0x3d6523e2,0x3d84af97,0x3d8370dc,0x3d857026,0x3d85c994,0x3da2b11b,0x3d982fb4,0x3d92492b,0x3d7136a7,0x3d3bf913,0x3d1604e1,0x3d0030d7,0x3cdff75a,0x3cc22dbb,0x3ca526ef,0x3d063fba,0x3d14e7a5,0x3ce143f8,0x3ca3728d,0x3c8cf574,0x3c880b95,0x3c2921b6, -0x3c5f1052,0x3cedb5a5,0x3d0dacf9,0x3d256ebe,0x3d3d292c,0x3d169bf0,0x3c3ee585,0x3b9af7d6,0x3b7517bf,0x3a8c4689,0x3b056239,0x3c15200a,0x3c84cf41,0x3cae3e9b,0x3c979678,0x3c622223,0x3c0ddda3,0xba826367,0xbc11f134,0xbc876963,0xbc8f3343,0xbc97a009,0xbc96ecc8,0xbc88d98b,0xbc54b6d7, -0xbc68f6b7,0xbc077bfe,0x3b1a44b2,0x3c337ad9,0x3c41f7de,0x3c7d1d72,0x3ca6b359,0x3cb54097,0x3ca12b99,0x3caf0ec2,0x3cd05429,0x3ce8c41f,0x3cfd2394,0x3cdd7b9c,0x3cc19a6c,0x3cb7f7ea,0x3c8ece20,0x3cfe9360,0x3cfcfc32,0x3cf29a6f,0x3cf0185e,0x3cda8f5e,0x3cc2eebd,0x3ca46495,0x3c909269, -0x3c8eb822,0x3c9cc8ef,0x3cb31445,0x3cc0d3a2,0x3ccc469e,0x3ccdc154,0x3cc8f3ab,0x3cbdfe29,0x3cb1e6da,0x3c9dd147,0x3c8d29a4,0x3c6cac37,0x3c5c1c2d,0x3c82b87f,0x3c9447e6,0x3c9ec369,0x3cae9be2,0x3cbed83a,0x3cb75269,0x3cbb6734,0x3cbd3b1b,0x3cb386e0,0x3ca7ed3c,0x3cb2bf8e,0x3cb9538e, -0x3cd0a150,0x3ce69952,0x3ce5f3fa,0x3cde086b,0x3ce8c845,0x3cddf904,0x3cd5adf7,0x3cd3015a,0x3cd06bb4,0x3cd01e3a,0x3ccc3f08,0x3ccd1baa,0x3cc5b655,0x3cbb683b,0x3cb7843c,0x3cb6f0d0,0x3cbc08d2,0x3cb57bb9,0x3cb21208,0x3cb074c2,0x3cb04216,0x3cafed4b,0x3cb4826e,0x3ca6bcb3,0x3ca070e0, -0x3c924996,0x3cbce36a,0x3cb3d294,0x3cbb3998,0x3cbb3261,0x3cbbd367,0x3cb9b07f,0x3cbb3043,0x3cbd4117,0x3cb52db8,0x3cbced6d,0x3cca5c6b,0x3cbbc9c7,0x3ccedb7c,0x3d04df7d,0xbb84a1cc,0xbb5d29d7,0xbb1ce31c,0xbbd3cacf,0xbbf7c169,0xbbb67cb9,0xbbffec57,0xbbf04a60,0xbbc3990c,0xbb92460b, -0xbb770c4f,0xbb8d54ff,0xbb5b6172,0xbb82cc03,0xbbd1118e,0xbba83b59,0xbba549cf,0xbbae1e3d,0xbb9a6759,0xbb742b57,0xbb095efd,0xbb0e71b2,0xba954b6b,0x3a94136d,0xb9065ff7,0xba81f91c,0xbb005a3a,0xbb7874e7,0xbb8f4570,0xbb9a8d4f,0xbb2c085e,0xbaac40b1,0xba1ab462,0xba1e7d5b,0xba5d708b, -0xbba3b3fd,0xbb55a150,0xbb183fed,0xbb0b6eab,0xbc2e0605,0xbc5482c9,0xbc032499,0xbc7b9d9b,0xbc821458,0xbc60d6d3,0xbc1b5aaf,0xbc021ea0,0xbc2bfd5e,0xbbc9ab63,0xbbcf4de5,0xbc3c8141,0xbbf58687,0xbbed6697,0xbbfe1fff,0xbbeab60d,0xbb91a6c2,0x3a724b2f,0x3b7b8d60,0x3bc997b7,0x3bf44cc0, -0x3c09ddbe,0x3bb45ec7,0xb93a95fa,0xbb8643ee,0xbbd54582,0xbbc62bcf,0xbaab5f3c,0x3b31552f,0x3b90a4aa,0x3c0c501d,0x3bb1bc2b,0xbc18f0e1,0xbb02a86b,0x39937628,0x3b54ee97,0xbc90755e,0xbcb3c639,0xbc509cc0,0xbcf44c50,0xbcd9e437,0xbcb58e05,0xbc2aa048,0xbbbc61e7,0xbc36f476,0xbaffef13, -0xbbca624d,0xbca178a8,0xbc48129d,0xbc3637a1,0xbc3235ad,0xbc13800f,0xbb895a4a,0x3c0e3e8a,0x3c413d10,0x3c880dc0,0x3ca2f290,0x3cb526a8,0x3c965372,0x3be37bbd,0xbb9c298c,0xbc261317,0xbc0ec77d,0x3a9248a9,0x3c303473,0x3c4a4bcc,0x3c9e6a15,0x3c6a0127,0xbc3154b2,0x3acf4949,0x3b875469, -0x3c5c7459,0xbc3880ae,0xbc914b99,0xbbcec20f,0xbd0bc3c7,0xbd250e27,0xbd1e651e,0xbcc1381d,0xbc9bbcf5,0xbcf5b3fe,0xbc27d4eb,0xbc265ab3,0xbce7e3f0,0xbc6b82f3,0xbc5f57b1,0xbc5b9561,0xbc599069,0xbb64b80d,0x3c9d557d,0x3cdfdc46,0x3d155cf1,0x3d1df6e9,0x3d0c9e83,0x3ce8c1a3,0x3cea3c57, -0x3c13ffbc,0xbaf07025,0xbb8912a4,0x3b7e8c71,0x3ca29a72,0x3ce93b63,0x3d0299e0,0x3cbc47e3,0xbcc289c7,0xbb569afa,0xbb9335b3,0xbdb03218,0xbd8e9d34,0xbda504d7,0xbdc1d510,0xbda0e8b9,0xbd52770b,0xbcb2b86d,0x3c3c5478,0x3cef5134,0x3cc1b887,0x3bba7445,0xbc4f1f09,0xbd226c76,0xbcc619c8, -0xbc25cbf6,0x3baaafc2,0x3b08ef3d,0x3bcace55,0x3c281937,0x3c883483,0x3ca2b799,0x3c88b1c0,0x3d16af78,0x3d1a1736,0x3cc530ee,0x3b6d6f08,0xbbcd2b53,0x3b489f8a,0xbc9921b4,0xbc57f7c2,0x3ca3762a,0x3c74d347,0x3c3e1ed8,0xbb794ff1,0x3ce97a67,0xbd4db202,0xbd58736b,0x3bf64d77,0x3ca17eff, -0x3ce70841,0x39160f39,0xbc96b182,0xbd11c637,0x3c0f43b2,0x3c29b344,0xbc74f1ac,0xbd3d8cff,0xbd505fc0,0xbd1654e6,0x39d6bf83,0x3c6638fc,0x38ecd28f,0x3b42c671,0x3ba2659f,0xba01cdc3,0x3bcf2341,0x3c9eabc7,0x3d439173,0x3b2cedb0,0xbc284120,0xbad276bf,0xb9ffd18d,0x3a8fe5a4,0xbc52ee08, -0xbc6de1f7,0xbc98e383,0xbcf34c11,0xbcfb4eaf,0xbc2b0375,0x3ce4a4d0,0xbcca08fa,0xbcfe2e28,0xbe095935,0xbe5cdbc0,0xbe625902,0xbe212054,0xbdc936ae,0xbd2518d0,0xbd39d9cb,0x3c10307a,0x3ae5a4fc,0xbce1de2f,0xbd27dc83,0xbd1957a9,0xba986c8b,0x3a87781e,0x3c337abf,0x3c02e8f2,0x3c359fa3, -0x3c291a7e,0x3c402b6d,0x3cd63136,0x3ce006bc,0x3d104ab7,0x3a27eba7,0xbc18bd30,0x3b4ffe2d,0xbc298be4,0x3991cfb3,0xbb939305,0x3b5c0fbd,0x3b5b8eca,0x3bd1fb31,0xbc77b55d,0xbce3d89b,0xbc8be548,0xbc15992a,0x3e19b3fc,0x3e3f92ee,0x3e525d7c,0x3e2a2d45,0x3db93de9,0xbcda64b2,0xbd9c2bcc, -0xbd929a45,0xbc5adfdb,0xbc5bf572,0xbd62bacb,0xbdb57b95,0xbda857b7,0xbca44358,0xbb5c85c1,0x3c2fe2b9,0xbc0c5c47,0x3ab25460,0xb7853e61,0xbc2ce6ae,0x3becf84e,0x3c99991d,0x3cdf7f29,0x3c3c8f08,0x3c0147bf,0x3c2a5adb,0xba21b24e,0x3a91ae5b,0xbb0d72d5,0x3c251fd7,0x3c937ea2,0x3c9e702e, -0x3d4baceb,0x3da64e70,0x3de55d17,0x3dfafc51,0x3cc3d1e7,0x3c8618de,0x3ca1a9af,0x3d483c54,0x3de2a56c,0x3e00001b,0x3df5e598,0x3dac3b58,0x3cd5f3fb,0xbcf415ab,0xbd87a342,0xbdd6b5a9,0xbde86c24,0xbdb2b920,0xbd88d344,0xbd31eb9a,0xbd0321f8,0xbcb0eb2e,0xbc88a481,0xbc18577a,0x3bee2b2e, -0x3c76d99b,0x3d037498,0x3c155786,0x3b8f872b,0x3c31a67d,0x3cf5efa7,0x3d183618,0x3cda4ecd,0x3d14a48a,0x3d3062a2,0x3d58e514,0x3d35ddf2,0x3d28546c,0x3d47afa6,0x3d12ea98,0x3d4fc2e7,0x3d2b6d9d,0x3d166813,0x3cdc0dff,0x3c6a706f,0x3c45d1d6,0x3cf610b5,0x3d867bcc,0x3db000fa,0x3dc6441b, -0x3dc3078e,0x3d993ef4,0x3d480481,0x3c347c19,0x3c2f73eb,0x3aa7fcd4,0xbc2cd425,0xba00ec87,0x3bae4657,0x3c471474,0x3c8d4a7a,0x3c8b7c6d,0x3cfbb9a4,0x3ced1f74,0x3d04bf7b,0x3cf732f3,0x3cb5fe68,0x3c4ee87f,0x3bb45a8d,0x3c22ffda,0x3c57e517,0x3ca7b239,0x3cbbca28,0x3cfde1d5,0x3d273419, -0x3d498f2d,0x3caba799,0x3c91b070,0x3c4bd73a,0x3bd5705b,0x3b05f6c0,0x3bf5981c,0x3bd8c2bb,0x3b26489e,0x3c088e8c,0x3c86c5e6,0x3ce2856b,0x3cdbdc25,0x3cf2bc49,0x3cf4d992,0x3d1065f2,0x3d1e41ec,0x3d2e91e5,0x3d26f3b0,0x3d1b54db,0x3d069518,0x3d05ed21,0x3d1ba81a,0x3d24e46f,0x3d033f4f, -0x3cba74fd,0x3c91a4a6,0x3cb7a5ac,0x3d00b32a,0x3d0e7db3,0x3d18cb21,0x3d19ff5c,0x3d1c7034,0x3d175c4a,0x3d145636,0x3d1397c4,0x3ce888f9,0x3c97ab74,0x3c8d1769,0x3ca40c18,0x3cb7b426,0x3cc10d70,0x3cc739de,0x3cda4328,0x3cf34b82,0x3cf30b0b,0x3cdd71db,0x3cc718d8,0x3cac52e7,0x3c934c8e, -0x3c69f4d6,0x3c817371,0x3c8f0933,0x3ca79a08,0x3cb9ca89,0x3ce60c0c,0x3d018b38,0x3ca9dd84,0x3caa4aca,0x3c97f5b1,0x3ca3911c,0x3c9acbae,0x3c8e6912,0x3c84c189,0x3c672674,0x3c4f948e,0x3c46ec56,0x3c3f7870,0x3c450a81,0x3c5cc49b,0x3c6e94d4,0x3c70f872,0x3c7600e4,0x3ca2e827,0x3c6a28e1, -0x3c820808,0x3c86d0b8,0x3c904d5c,0x3c95e3d7,0x3c98c165,0x3c9e0f79,0x3c8d5c98,0x3c869e09,0x3c806b32,0x3c800801,0x3c7d8025,0x3c6cef9a,0x3c8c0b72,0x3c98af86,0x3ca35b5c,0x3cb1e053,0x3cb6f9bf,0x3cd0cb0d,0x3cca3496,0x3cd39943,0x3cdbd0e6,0x3cac4961,0x3cbb5e5e,0x3cd32bdc,0x3cd287f5, -0x3cd2f233,0x3cd5a12f,0x3cd4e523,0x3cd5039f,0x3cd3bbc3,0x3cb92e4d,0x3c960225,0x3cd4f076,0x3cb6292f,0x3c964c8c,0x3be15940,0x3bb0fd47,0x3bb95748,0x3bb174fd,0x3bb96635,0x3bc635ce,0x3b98dc51,0x3b9188b1,0x3bd24d90,0x3b5d0ef2,0x3b74529e,0x3baaced7,0x3c094ef9,0x3c0dd937,0x3bbc4f27, -0x3bc244d5,0x3bacb5c3,0x3b82f38e,0x3bb09b8e,0x3bb8d814,0x3ba2c2a1,0x3bbc5805,0x3bcaafae,0x3bc1637e,0x3c0f709d,0x3bd5daf2,0x3afddfdd,0x3a9fe1f2,0x3a560414,0x39a9c22c,0x3b675fca,0x3b9a6457,0x3b67dae6,0x3bf118d6,0x3c015df4,0xb9b522ab,0x3b94b24d,0x3c12a66e,0x3c0f0a73,0x3be61d6c, -0x3bdd4b40,0x3c1f4a94,0x3c0d5f47,0x3c060434,0x3c4fc18b,0x3b062b92,0x3adb98e4,0x3bb21a29,0x3c5af8f5,0x3c6d50de,0x3bb4e7d2,0x3bb18933,0x3b5146cb,0x3a054dfa,0x3b7034fc,0x3b88a927,0x3b3a9cfa,0x3bc7bf89,0x3c25ab8f,0x3c74a46a,0x3c7b210d,0x3c4b6287,0x3b96ba1e,0x3b279647,0x3a915796, -0xb8ece05f,0x3c0be964,0x3c41e048,0x3c0afc13,0x3c69b6ca,0x3c3c025d,0xba37610b,0x3c22e8c7,0x3bda0c72,0x3ad0cf94,0x3b5e0fd1,0x3b8e036f,0x3bcc0b40,0x3b43a2d8,0x3a566ed0,0x3c21e93d,0xbc3050a1,0xbbf5b753,0x3a8643e2,0x3ca08df6,0x3cb2acfb,0x3b3d7d0f,0x3b8978a8,0x38922b70,0xbbcf5a19, -0x3aa2babb,0x3b366a14,0x3a62151a,0x3c199bda,0x3c6f497d,0x3cc16260,0x3cd18b13,0x3ca6b3f2,0x3af25261,0xbb3a24ba,0xbbbfc2a9,0xbc1a12d5,0x3c18c0ca,0x3c84bad9,0x3c099fae,0x3cb22159,0x3c9cd2e2,0xbc428fa0,0x3c043884,0x3ce65b71,0x3c6eeae1,0x3bddaf61,0x3be48d30,0x3c952fb8,0x3caf14aa, -0x3ca729c8,0x3cf17d9a,0xbbc7aa45,0xbc2fd073,0xbb0717e9,0x3ccca355,0x3d0179ed,0x3a8a5f83,0x3b15ff06,0xbb7a1806,0xbc672dba,0xbb2f18a4,0xbacd97eb,0xbb428c39,0x3c60847c,0x3cc05fb4,0x3d06eef6,0x3d29b692,0x3d168ee1,0x3c79e34a,0x3b070d87,0xbc2b2798,0xbc54e315,0x3c2b99e3,0x3cf10a22, -0x3cb1779b,0x3d145731,0x3cbb8d9b,0xbc957e81,0x3c9e8b4f,0xbd9d9e37,0xbd686a57,0xbcadf070,0xbc5d9f8e,0xbcbe34b1,0xbd52b933,0xbd7379c1,0xbd072b82,0xbd348862,0xbc5c306a,0x3d373ca1,0x3ccca492,0x3c6d9dfa,0xba4d9e21,0xbc2e6ea1,0xbc5b3364,0xbc23772c,0xbbe4bcbb,0x3b389638,0x3cb45cc1, -0x3cb31a3b,0x3cc8be46,0x3cc96a1c,0x3d19f51f,0x3d053dc5,0x3c4798a2,0x3b16d441,0xbc05f830,0xbc1df1ce,0xbca795d5,0xbc664e18,0x39dd159c,0x3c8cf3f2,0x3cc231a1,0x3c9d01f8,0xbd29cd27,0x3c346ae7,0xbb8be9fe,0xbcaec955,0xbcd9aa40,0xbae446e0,0x3cbab571,0x3d082444,0x3c9e2a64,0x3ca6a6ff, -0x3c526782,0x3c83441c,0xbc816863,0xbcdd9eeb,0xbd15ffdb,0xbd0d2126,0xbce20041,0xbcbeba54,0xbc80509e,0xbbd2871c,0x3c0f161e,0x3cda409e,0x3cdd6b13,0x3c7b5472,0xba94cb17,0xbb9c5583,0xba82fab2,0x3b7c5426,0x3b462e9d,0xbc86dc15,0xbc5d905e,0xbc898efb,0xbc9fcbfb,0xbcf75f0b,0xbd121185, -0xbcd4665b,0x3b9753ef,0xbde3a0e7,0xbe089292,0xbdaa5462,0xbd4b6c37,0xbc1f7161,0xbd227eb3,0xbd8e13ef,0xbd8764b0,0xbd5ab527,0xbd080c3d,0xbc47820e,0xbcf78d49,0xbd253ebb,0xbd69c186,0xbd1e63af,0xbce350d9,0xbcc0687d,0xbca5de4f,0xbc36147a,0xbaff997f,0x3cbfab4b,0x3c887fe3,0xbc842014, -0xbbdd2be5,0x3ae27177,0xbba8f5f7,0xbb477496,0xba922430,0xbbc5560b,0x3b83533e,0xbb71f800,0xbc05a559,0xbc013a83,0xbcae6145,0xbd3f5f98,0xbd9ca855,0x3e1af039,0x3dda7c36,0x3d42ba8d,0xbca7781a,0xbd9e112d,0xbdd279d4,0xbdb727f3,0xbd407ca1,0xbd61e1b7,0xbd65ec8d,0xbd3dabcd,0xbd1df52f, -0xbd28b5d0,0xbd82a7b9,0xbd1c4136,0xbccbd8fd,0xbbb4d951,0xbb60c840,0x3ab3ca68,0xbc14f054,0x3cf8b4d1,0x3cf3134d,0xbbd40428,0x371e88f4,0xbb6f43b9,0xbc0c0d3a,0xb9f6a297,0x3b1515ef,0xbb703375,0x3ac56f4a,0x3c166ece,0x3b0e8457,0x3d0851d2,0x3d79e2da,0x3dd60325,0x3e04d04a,0x3d9d4c32, -0x3dcd01b8,0x3e0b239c,0x3e137f8a,0x3e09b3bd,0x3db2e8da,0x3c94cf89,0xbd843dbb,0xbda0b36e,0xbd9e0f7f,0xbd947554,0xbce7ae79,0xbcaaa772,0xbd5d54a2,0xbd47965e,0xbd6e5d9a,0xbd7208a9,0xbd734c1e,0xbd441c9d,0xbd082af0,0xbbefb1d6,0x38b44206,0x3af473a5,0x3b64cbfd,0x3c1a51ab,0x3cdcd93a, -0x3c1857e9,0x3b87adc3,0x3c1c2553,0x3ccf62c3,0x3d139cd4,0x3d260550,0x3d3d1e6e,0x3d55e653,0x3d64009f,0x3d90b71c,0x3cefb465,0x3cf857ee,0x3d02772f,0x3d19adee,0x3d484a9f,0x3d933800,0x3db116c3,0x3dabb057,0x3d9a9454,0x3d4b5a06,0x3c5d0e84,0xbb8d09dc,0xbcae46e8,0xbd12cfea,0xbd3a2d0b, -0xbd2abe26,0xbcd6b052,0xbcbab220,0xbc85579d,0xbc012758,0x3bee06a3,0x3c9ed194,0x3ced7e84,0x3ce15458,0x3cb5093a,0x3c7c046d,0x3c91d8df,0x3cc240c8,0x3cfe418a,0x3d083d5f,0x3d0465e2,0x3cec9e2a,0x3ce02d6c,0x3cdc82b2,0x3ccdcde6,0x3cffc589,0x3d1b4a92,0x3d22a373,0x3d17f6d9,0x3d098a56, -0x3cdcf545,0x3cf00701,0x3cf5e4b4,0x3d0880ef,0x3d265763,0x3d59516d,0x3d8bf163,0x3d88efc1,0x3d847e77,0x3d815e13,0x3d6e2b35,0x3d57329b,0x3d3f84e3,0x3d31ee5e,0x3d29eed2,0x3d1d58b3,0x3d08bddb,0x3cef26a8,0x3cd0efcd,0x3cd78b37,0x3ceff244,0x3ce8e0d3,0x3d0239c8,0x3cf91437,0x3d006b48, -0x3cdfdc0e,0x3cda829f,0x3cc5ecaf,0x3cf52760,0x3d13da94,0x3d2b2732,0x3d1e1e82,0x3c3a8627,0x3c64ff16,0x3c6508e4,0x3c69dc16,0x3c7c2aba,0x3c88b1ac,0x3c966559,0x3c9d1a7d,0x3cb84bb5,0x3cbc39b4,0x3cc5dc6a,0x3cd08db6,0x3cec6ece,0x3d044ad9,0x3d0eb346,0x3d19c21d,0x3d212fb9,0x3d2b39dc, -0x3d2e4233,0x3d3a806f,0x3d374c80,0x3d26278d,0x3d15cd4a,0x3d002a63,0x3cd91f46,0x3cb54d6e,0x3ca50883,0x3c95eb24,0x3c8eb01e,0x3c87ce37,0x3c83da3c,0x3c656b0d,0x3c65bd5d,0x3c4addda,0x3c564bbd,0x3c6808bf,0x3c149064,0x3c565702,0x3c5515a0,0x3c6015b4,0x3c659b97,0x3c5f4f29,0x3c576c5a, -0x3c485691,0x3c5d53ce,0x3c756dd2,0x3c8636a3,0x3c98acb0,0x3ca51dfb,0x3cb1d1a5,0x3cabfaec,0x3caa0e60,0x3caa2dcd,0x3ca87c47,0x3ca7e278,0x3ca9ce9e,0x3c9385ad,0x3c7e9618,0x3c5654a0,0x3c78d66b,0x3c464a8f,0x3c02aaf5,0x3c0990fc,0x3c096c07,0x3c00f5c5,0x3bf8bb41,0x3beb7c19,0x3be671e1, -0x3c08b0ad,0x3c31cd8f,0x3bb978bb,0x3befe12b,0x3c5866e9,0x3b8698c0,0x3b51bd34,0x3939e2f1,0x3b3a42db,0x3b689580,0x3baaaf6b,0x3b86fef8,0x3b662106,0x3b5f0dbf,0x3abc1d8c,0x3a2e9e98,0xbaef0ea1,0x3b4b62c6,0x3b96f002,0x3bcf80ad,0x3b5ffb91,0x3b3bce89,0x3b532a09,0x3b74f304,0x3b85eb20, -0x3b92d6b0,0x3bb958e6,0x3bdaf29c,0x3c1a92fe,0x3bbe9d47,0x3b9f18d2,0x3b665c30,0x3b6fcb20,0x3b72b1c6,0x3b8693c0,0x3bba54db,0x3bc821f5,0x3b92bc8c,0x3bb7527a,0x3bab51ac,0x3b1b18ef,0x3b839948,0x3c0b05ea,0xbab2a2ec,0x3ab36f76,0x3b64a45b,0x3be2d15b,0x3bc7bbd7,0x3baf9e16,0x3b9f1f64, -0xbb1121bc,0xbbca2c8e,0xbc3788b5,0xba27c20f,0x3ba5b34e,0x3c283039,0x3b3d62f1,0x3a57d3bc,0x3b291fbb,0x3b4fbc8d,0x3ba0ecb9,0x3bb28697,0x3bf1f35e,0x3c367f7a,0x3c7c74f3,0x3c3124d1,0x3c00e89c,0x3b2fc3c7,0x3a9bd67d,0x3a93f114,0x3b5290d2,0x3be5ab1a,0x3c012b86,0x3ba7073c,0x3bff5ed3, -0x3bdea606,0x3aa52d56,0x3bf2eaad,0x3b00d67c,0xbc1b967c,0xbaa0b8f4,0x3b87ec07,0x3c428313,0x3c062c57,0x3bddfb49,0x3b06f18e,0xbc21d961,0xbc721328,0xbcd4cca5,0xba0dbe77,0x3c052346,0x3c89a980,0x3b0246c6,0xbb015b66,0x3a997c2a,0x3b4087b6,0x3bd8f268,0x3bb343c0,0x3c340a7c,0x3c99feea, -0x3ce53695,0x3c9a6c4a,0x3c312a2d,0x3a210cf2,0xbb272be6,0xbac5dd33,0xb9cb06a1,0x3c1b8eea,0x3c385bbc,0x3b3d2389,0x3c5d1b99,0x3c62b29f,0xbbe8099d,0x3b685563,0x3cbad73d,0xbc07746c,0xbb100962,0x3bee67b8,0x3c80d319,0x3c906577,0x3c69958c,0x3c37bcef,0xbc168faf,0xbcde4106,0xbd43517f, -0xbc85d586,0x3bef38af,0x3cc56dfe,0x3ae32cd7,0xbbcc0081,0xbb19b069,0xba28ca4c,0x3b9c4f8d,0x3b8414ce,0x3c26b41e,0x3cbe5272,0x3d1ac8ea,0x3d067956,0x3cd2f89b,0x3bce0372,0xbb82a0ff,0xbc43ea20,0xbc20a302,0x3c7535b5,0x3cceb73e,0x3c34f712,0x3cc8747e,0x3c35c822,0xbc60e7c4,0x3c9b8419, -0xbdac458d,0xbcb46624,0xbb93714d,0x3ad4caad,0xbca14c19,0xbca4aed9,0xbcdeada6,0xbcef5967,0xbd8bfcad,0xbd4a51c1,0x3d058081,0x3cc12a57,0x3ca6a6cb,0x3c74379a,0xbbb90c31,0xbbdfc82e,0x3c07bb83,0x3c68e19c,0x3c8953c2,0x3c81fb65,0x3c826ab0,0x3cd34959,0x3d401a71,0x3cda2723,0x3c70ab3f, -0x3b24da56,0x3bb2128b,0xba8125a5,0xbc48aa8b,0xbc8c5dfd,0xbc37ca93,0x3b090c7d,0x3c2695a3,0x3cade819,0x3d2f59f7,0xbd713b0c,0x3d07b66a,0xbbeaba54,0xbc89e249,0xbcbc4cfc,0xbd10a41a,0xbb734818,0xba0354ce,0xbcef9f5f,0xbc32d6c7,0xbbda75bf,0xbbc4589c,0xbb5adf43,0xbaee1d59,0xbc7ce151, -0xbc2a204e,0xbc56d23d,0xbc9c09d9,0xbc668eb1,0xbb39caa6,0x3b3ee54e,0x3c8ff976,0x3c4a69fb,0xbc77fa38,0xbbb4423a,0xba034194,0xbb31553b,0x3a90ae28,0xbb1a2a15,0xbc4eb7b8,0xbc2102d8,0xbc930715,0xbcb75bc2,0xbd33e7fc,0xbd4c82cb,0xbd2a1ea5,0x3c9d7e07,0xbd5f2f8c,0xbca2c8e3,0x3d267f84, -0x3d4fae05,0x3bcf1fa9,0x3a8c3c8f,0xbc9f115a,0xbd8565c2,0xbd41f4e4,0xbd3c8259,0xbd2fa8c8,0xbc80c62b,0xbc29afa6,0xbcc06e9f,0xbd0d6666,0xbd1d9525,0xbcef58f3,0xbcce1c22,0xbc6b79a1,0xbbf5bc16,0x3c808f0b,0x3c6b7243,0xbcb5b909,0xbb185292,0x3c3abb11,0x3b0d89ea,0x3adab254,0x3a9d8c5f, -0x3b069c93,0x3af969e8,0xbc006e0b,0xbbe024be,0x3a922ec8,0xbc8550d3,0xbd1c2eda,0xbd572398,0x3ccb3caf,0xbd564f4d,0xbe1b8f09,0xbe2b5e94,0xbe136508,0xbd67cef6,0xbcbe3f3e,0xbd5e17f4,0xbcb1e735,0xbc7e3973,0xbc895335,0xbc90b524,0xbc90eaae,0xbc952962,0xbc831bb7,0xbc96340d,0xbc95a936, -0xbcc86077,0xbc67859e,0x3a8b5ea0,0x3c5765fe,0x3c357399,0xbc8eaf30,0xbc3f1a8e,0xbc3c52ce,0xbc65a7b1,0xbb5d461f,0xbb87d2ab,0xbc66151c,0xbc1aa809,0xbc1b8bfa,0xbccf322e,0xbc87b07c,0xbb6e74ce,0x3d173638,0x3d25ea58,0x3e03a509,0x3e20a699,0x3e0f7f01,0x3dcd589b,0x3d2c974b,0xbd157f09, -0xbdaccc1d,0xbdbf1a1f,0xbd794a08,0xbd27b65f,0xbcbd65f4,0xbce21870,0xbc9996af,0x39c5f971,0xbc1d557a,0xbc7f2c4e,0xbc9835bd,0xbc983f16,0xbc7f8eb0,0xbc903490,0xbc3b53c1,0xbbd6f0c1,0xbc320c22,0x3b79a9fe,0x3c01b600,0x3c26bdbd,0x3b8c9cf4,0x3a791730,0x3b8183e3,0x3c8d2066,0x3d052bd1, -0x3d50e146,0x3d9b2f89,0x3dace5a7,0x3da1277f,0x3dda731f,0x3d427899,0x3d5287ac,0x3d8e7212,0x3db11e57,0x3dda57b2,0x3df2c3a9,0x3dd1e1b3,0x3d64039a,0x3b8da343,0xbd0df563,0xbd5d7ab6,0xbda7cdac,0xbdb1a455,0xbd964acc,0xbd7b4d4b,0xbd465025,0xbd12bee9,0xbcd7e12a,0xbc7d0855,0xbb8ae9b1, -0x3c2c1321,0x3c507384,0x3b59cb51,0xbb38a6ea,0xba8b4d22,0x3c2b6327,0x3ce2514c,0x3d19cf93,0x3d1c729e,0x3d2646f4,0x3d25e778,0x3d12c740,0x3d2dc46d,0x3d3c9efe,0x3d2ed921,0x3d4f626c,0x3d33c663,0x3d54552f,0x3d7eb1c9,0x3d8a5933,0x3d9437ac,0x3d96d8e8,0x3da2f74c,0x3dbd42cf,0x3db25338, -0x3da8b8e0,0x3da047c7,0x3d8b795e,0x3d67c459,0x3d2f9cc7,0x3d118dac,0x3ce3d6e3,0x3c9ebdfb,0x3cad9c08,0x3ca6422d,0x3cc3786a,0x3ce70c99,0x3cc389e1,0x3cd01827,0x3cd6d5df,0x3cd56363,0x3cc60978,0x3cace318,0x3ca54a25,0x3c944db5,0x3c9588a0,0x3c87ca7f,0x3c861961,0x3cb8c479,0x3ce21a6d, -0x3d05b64c,0x3d1e199b,0x3d02dd89,0x3d389e1b,0x3d3dc1ee,0x3d4416de,0x3d537d86,0x3d6054e4,0x3d671ac0,0x3d6cb400,0x3d56aa2d,0x3d4a6c77,0x3d3e02ad,0x3d38ca96,0x3d367abe,0x3d361074,0x3d25b7ae,0x3d16525c,0x3d03ce5e,0x3ce95d57,0x3cbf9cb2,0x3c9712ce,0x3cbdb887,0x3cd1cb2d,0x3ce32219, -0x3ce119ee,0x3cf2bc3c,0x3d0633eb,0x3d0db48e,0x3d1369d4,0x3d14dd97,0x3d1c6d18,0x3d286810,0x3d1f70cb,0x3d24bab9,0x3d1ab643,0x3d1a0033,0x3d2d5e92,0x3d1e3277,0x3d3b8b54,0x3d35d8d4,0x3d3af3e2,0x3d3adaa3,0x3d3cd253,0x3d3f59b7,0x3d457cef,0x3d4490e7,0x3d44e6b2,0x3d43d1fc,0x3d41d75e, -0x3d3f2f4e,0x3d3f92a6,0x3d35c116,0x3d2e8cb1,0x3d27e24d,0x3d1dae2d,0x3d16cbd7,0x3d0a3598,0x3d02dc23,0x3cfa7287,0x3cdf2bde,0x3d1100e9,0x3d06530e,0x3ceb40a8,0x3ce93f71,0x3ce8088d,0x3ce9fcd3,0x3ce7181f,0x3ce42d38,0x3ce9e075,0x3d0f6946,0x3d270a2f,0x3ce56427,0x3d0e1b3d,0x3d428da5, -0x3bc9f54f,0x3b67deff,0x3b12c49b,0x3b529652,0x3b83fa39,0x3b82ef5e,0x3bdc681b,0x3be392d7,0x3bb49898,0x3b8e92d6,0x3b544b0d,0x3b02d235,0x3b1fe420,0x3b730153,0x3c024348,0x3bba3ff0,0x3bbd2c1e,0x3bd28cb4,0x3be4b8b6,0x3bf0863b,0x3bfb4123,0x3c0440c8,0x3c000160,0x3bf82c79,0x3bd6fb9d, -0x3baab238,0x3b62c150,0x3b686756,0x3b7d61e2,0x3bc32286,0x3b97d629,0x3b8a671e,0x3b7988e8,0x3b96f732,0x3bc11ed3,0x3ba76514,0x3b922340,0x3b25a8e4,0x38023b55,0x3a35aa5a,0x3aa00149,0x39f6a712,0x3c053af7,0x3c139ba1,0x3b96f77c,0x3aecff66,0xbb1093fa,0xbb8b8295,0xbbbb5390,0xbb0525cb, -0x3c220b51,0x3bad0980,0x3bc9dbff,0x3c05430e,0x3c251563,0x3c405789,0x3c3c8748,0x3c589029,0x3c6bb36e,0x3c6639ba,0x3c2b091a,0x3bf8cd53,0x3b933b7b,0x3b801259,0x3b9ded0d,0x3c1735e2,0x3bf192b7,0x3bdd69f3,0x3bc3ca2b,0x3b8793ff,0x3baba971,0x3c293f8d,0x3bec958a,0xbb47246a,0xbc5163fa, -0xbbfb10be,0xbba1021d,0xbb977006,0x3c5a1549,0x3c79f41d,0x3ba44b81,0x38fb2839,0xbc065dfe,0xbc6b893f,0xbc64b5d8,0xbbed5ab8,0x3c8c387e,0x3bbdcbe8,0x3bd22c88,0x3c2038e1,0x3c5b74d9,0x3c8786e6,0x3c7f15a4,0x3cb1b0b5,0x3cc2b3be,0x3cc36e79,0x3c8317d9,0x3c1a4a9b,0x3b64aaec,0x3a9d4596, -0x3baeeecf,0x3c49143d,0x3c1451dd,0x3bc5c87f,0x3bb104c9,0x3b917184,0x3bf31329,0x3c4d05bf,0x3bac6c4d,0x3afce978,0xbc6ce469,0xbc58941f,0xbc44098a,0xbc742f8c,0x3c425ba5,0x3c83f511,0x3b37826d,0xba06bb9b,0xbc943b08,0xbcf594da,0xbd105f20,0xbc97acbb,0x3c9843a7,0x3bae7526,0x3bb2bc38, -0x3c30119c,0x3c9253b5,0x3cbebf04,0x3ca67d2c,0x3cd9e8da,0x3cf4aaae,0x3d165ad6,0x3cdd31d9,0x3c948c7c,0x3bb2daa7,0xbb5f21dd,0xbbcbf69c,0x3b8dff51,0x3c568a7a,0x3c64223b,0x3bc4c8c2,0x3bcc26c0,0x3b6821bc,0x3c7275c3,0x3c5853dd,0xbd4fe188,0xbc6420f8,0xbc55cc3a,0x3a80bcdb,0x3c304a18, -0x3cf0aa66,0x3cc32e67,0x3c1389d7,0xbcf178e2,0xbccf837d,0x3d0c41ac,0x3c136527,0x3b7d5ba7,0x3c8a2857,0x3c05da65,0x3be0ed3a,0x3bd1601b,0x3c2b47d0,0x3c555c68,0x3c460fd0,0x3cda600d,0x3d08a43f,0x3d15c5d6,0x3cb392af,0x3c2e0e42,0xbaf1cc1d,0x3ba3bc3b,0x3b930241,0xbc064c68,0xbb58a1b6, -0x3acdc1f8,0x3b8ff166,0x3cb45c63,0x3ccbe61e,0x3ccda9b7,0xbd2aad46,0x3c805f1c,0x3ce35fa6,0x3cab6038,0xbc326da0,0xbd84e014,0xbd6075a2,0xbd27c096,0xbca2a769,0xbcc08114,0xbcc1a803,0xbca20489,0xbccaa720,0xbc99e8ef,0xbb831f1f,0xbc0bcf3f,0xbc15720e,0xba8de8a5,0x3b983dca,0x3c5f91c0, -0x3cb86761,0x3c533540,0x3c066b87,0xba72958e,0x3ba3b770,0x3c33fc7d,0x3bb68c04,0x3a921678,0xbb86d1a8,0xbb93645b,0xbbb6cafb,0xbc54dddb,0xbc7fd3a9,0xbce0f29a,0xbcedd64d,0xbca2dbff,0x3bd72f82,0x3b45b734,0x3ce430a4,0x3c81b47a,0x3c4da419,0x3cde3425,0x3cf40fe0,0x3ca265ac,0xbb6f304a, -0xbcedd0cf,0xbcfe53ba,0xbc8eace3,0xbc41763d,0xbbebd492,0xbb381c70,0x3b2338ff,0x3b9d990c,0x3c01eab5,0xbb27898f,0x3abd2075,0x3c876127,0x3bf3e874,0x3bffbcf0,0xba10faf9,0xb9a27b28,0x3b7c3b11,0x3b3e6b9b,0x3a2a57b3,0xb9a6c095,0x3affeae6,0xbb95be54,0xbc80c00a,0xbcb56510,0xbc293402, -0xbc9976fa,0xbd0c860a,0xbc7e4193,0xbdb9ca1e,0xbe061fbe,0xbe169970,0xbdff0af0,0xbd72e269,0xbd840ac4,0xbd4f20e8,0xbc62388e,0xbcee637b,0xbca27b69,0xbb87daaa,0xbc176094,0xbc229b67,0xbc4b27c1,0xbc69e832,0xbc6103bd,0xbc1b82d7,0x3a29c1a0,0x3c204f7c,0x3cd9bf00,0xb95537bc,0xbbfc5597, -0xbbc940ff,0xbb62a7a1,0xba4bb8f5,0xbad0cc97,0x3b50f8b4,0xb9a85099,0xbc0483f4,0xbc8147e6,0xbcb73c29,0xbd1236f0,0xbd13b96e,0xbd372503,0xbd41385b,0xbd76e0cf,0x3de6513a,0x3dbda0a9,0x3d50adda,0x3af8eba8,0xbd7bac80,0xbda942b6,0xbd93fd76,0xbd192ee0,0xbd213ff0,0xbd1f5e5f,0xbd2b71b2, -0xbd106408,0xbd00a6ef,0xbd0ee2b7,0xbcae7cad,0xbc1c2420,0xbb40b19b,0xbc1ea1e9,0xbbbc743a,0x3bfd41a7,0x3c039949,0x3c0a57bc,0xbbf057c2,0x3ac7cbc9,0x3a96371a,0xbbf535e6,0xbb841d62,0x3a066796,0x3c26fdcd,0x3c1a2d83,0x3c9d057c,0x3cf0337b,0x3d95b68d,0x3dc06b6f,0x3dbb5da1,0x3dce77e7, -0x3d94ea7f,0x3d97455c,0x3d9bcee1,0x3d8d1f35,0x3d673eee,0x3ccb621a,0xbc9056e1,0xbd801463,0xbd879815,0xbd7cb011,0xbd5df08e,0xbd407b7a,0xbd2c1391,0xbd090eb9,0xbd3a563a,0xbd3f7c97,0xbd22a197,0xbd13e550,0xbced7f03,0xbc824180,0xbc1e1810,0xbbc12a27,0xbb145793,0x3bb51266,0x3c5d46d8, -0x3ccb6050,0x3ce0dbe1,0x3d067cc2,0x3d2e72d7,0x3d3717db,0x3d487403,0x3d5a71e0,0x3d46be42,0x3d483360,0x3d643782,0x3d898daa,0x3d771c07,0x3d895bc5,0x3d9c905f,0x3dae5052,0x3dc9c6fd,0x3dba775f,0x3db8962d,0x3db4183c,0x3d7c5258,0x3d049a97,0x3b55ffbf,0x3a8b1e25,0xbb4a8b24,0xbbc8f014, -0xbbc6c09d,0xbbcba6b9,0xbc186331,0xbbf3c978,0xbbc78f8d,0xbbad6127,0x3b1befb1,0x3c1617f2,0x3c82939c,0x3ca51eb8,0x3cc68bd7,0x3ce4c6db,0x3cdd4d21,0x3ceca27f,0x3ce12950,0x3d0ab4b5,0x3d115ab3,0x3d27da5e,0x3d3a2c97,0x3d42c2e1,0x3d48d9bf,0x3d641649,0x3d848f14,0x3d89a68e,0x3d841de1, -0x3d7f0bbe,0x3d74e293,0x3d6d3cf7,0x3d616d95,0x3d5f7aac,0x3d5646a6,0x3d5f8131,0x3d5b296e,0x3d56b713,0x3d49e480,0x3d3c0a27,0x3d2f0c4a,0x3d2157e0,0x3d161f8b,0x3d0a0924,0x3cf7c66b,0x3cd8e4dc,0x3cf987d1,0x3d027494,0x3d0c230c,0x3d1291a8,0x3d1d4ea6,0x3d28991b,0x3d385f68,0x3d45e645, -0x3d4e194e,0x3d59939a,0x3d6293c1,0x3d67ea16,0x3d6df1a8,0x3d74523c,0x3d7b8d7d,0x3d833fe0,0x3d656b32,0x3d6d1719,0x3d676fe6,0x3d655b6b,0x3d61d9ae,0x3d635064,0x3d63de28,0x3d630c81,0x3d60a186,0x3d5b4cb8,0x3d58c0ff,0x3d510a8c,0x3d4c27c2,0x3d48ae3d,0x3d43d417,0x3d3f4d1b,0x3d3a68e0, -0x3d348548,0x3d300550,0x3d27c781,0x3d2f9693,0x3d30305b,0x3d2e12c3,0x3d3aac96,0x3d3b0c38,0x3d35bf0e,0x3d37b6f9,0x3d3a6bb0,0x3d3faa01,0x3d424896,0x3d470bdc,0x3d4b7ac2,0x3d56bc6f,0x3d5f4a98,0x3d56d2ac,0x3d5fe2be,0x3d7023a7,0x3c129b9e,0x3be1f6ab,0x3bc61187,0x3bd2e9ac,0x3beb0864, -0x3be4b2ec,0x3c1b5267,0x3c1b7216,0x3be6c25a,0x3c052cc9,0x3be07183,0x3b4a6f8c,0x3b76ae77,0x3b95c394,0x3be85331,0x3bfe6c5e,0x3c0acd7b,0x3c0dc834,0x3c16c139,0x3c1ef449,0x3c2d35f3,0x3c2ca0d6,0x3c24e262,0x3c113d87,0x3c0c77c0,0x3bf913c4,0x3bbfdf75,0x3bd95f88,0x3bf14234,0x3c251591, -0x3bec18e0,0x3bd8d3ce,0x3c004534,0x3bdee375,0x3c082606,0x3c431468,0x3c033d56,0x3bf01cff,0x3bced6f2,0x3bdfbe10,0x3bc6fe62,0x3b6827af,0x3c1bd971,0x3c2ea8cf,0x3b9f89fd,0x3c130a7a,0x3ba4cb55,0xbb9d368d,0xbbaaa5e8,0xbb6038cb,0x3b91f59c,0x3bf0fafe,0x3c2637ea,0x3c2e28d4,0x3c463ea2, -0x3c5f34bb,0x3c6ed6e9,0x3c822733,0x3c86ab1f,0x3c589ff5,0x3c38e6b6,0x3c135554,0x3bccfbc4,0x3be93c3d,0x3c0e0add,0x3c741f0a,0x3c183a03,0x3c049358,0x3c2f2832,0x3baa4d4a,0x3c05833b,0x3cb4f8c9,0x3c4ab391,0x3b90c825,0xbaa89ea6,0x3b10349b,0x3b901a45,0x3b0c7112,0x3c71d2d2,0x3c842107, -0x3ae2b9ac,0x3c3f55a5,0x3b3b9115,0xbc9a24ea,0xbc9162e3,0xbc5cc41d,0x3b1643e7,0x3bcd1519,0x3c2f1a87,0x3c47ab59,0x3c73de4c,0x3c97be19,0x3cabbe8d,0x3ccf3164,0x3ccfa69a,0x3ca1619e,0x3c797fd8,0x3c25f847,0x3bacc838,0x3b9a5f61,0x3c1ebc5a,0x3cb659e0,0x3c1b7458,0x3bde57f3,0x3c6c324e, -0x3b836e8f,0x3c02387d,0x3d0e373e,0x3c503418,0x3c2b4f1a,0x3b903046,0x3bed9bdb,0x3a935a49,0xbc288431,0x3c128cfc,0x3c49909c,0xbb9e4ae7,0x3c561870,0x3a3ee6d3,0xbd0e2295,0xbd1abf22,0xbcfb1a21,0xbb97b3b7,0x3ba4c551,0x3c5baf8f,0x3c857fde,0x3c9ec4a2,0x3ccab5b4,0x3cd840ab,0x3d060c70, -0x3d0dc137,0x3cfa671d,0x3cbf352e,0x3c6c617f,0x3bb1d8cc,0xbb05fec4,0x3b5f71b6,0x3cc00a19,0x3c5498ca,0x3c0f855e,0x3c6451e4,0xbb50dde4,0x3bdd1acc,0x3d4e705b,0x3cba8471,0xbcd731d7,0xbc90145d,0xbb9c8957,0x3c8aaeea,0x3d1778fc,0x3d05c05f,0x3cde3535,0x3cee4346,0x3a786ea8,0xbc0a71eb, -0xbbb378f3,0x3ada6553,0x3b8a36f1,0x3c2147bf,0x3b213317,0x39d2bb1e,0x3b9c153c,0x3c4e479b,0x3cadcaef,0x3cbe032b,0x3d22d9ec,0x3d2ac157,0x3ce4637c,0x3cad1674,0x3c6c6aaf,0x3b9764b0,0x3c0dacb2,0x3be0c542,0xbb61f39e,0xb8b516aa,0x3c1767e9,0x3cbc0092,0x3cf5d54d,0x3c9a33ba,0xbb739d93, -0xbca6719b,0x3bbe9991,0x3da40c0e,0x3cb02e2b,0xbca1a747,0xbd03fd86,0xbd97073e,0xbd799178,0x3c0bffdf,0x3a912cf8,0x3c0f8430,0x3c4fd3d0,0xbad5febe,0xbc2c792b,0xbc33f8ba,0xbc39486f,0xbbed9653,0x3ad0a33d,0x3bcc6169,0x3c37d5c3,0x3ca7d71a,0x3b9c77b9,0x3b6d3b8a,0x3c36632f,0x3c1dcbb6, -0x3c2e6658,0x3b977138,0xbaf817b3,0xbbaa1167,0xbad5574d,0x3a551c4a,0xbb9e150b,0xbc51f3c5,0xbc570961,0xbc2d8023,0xbbffa933,0xbc86da87,0x3c2501d1,0xba0f6be1,0xbc125818,0xbb1e2bcb,0xbb240a21,0x3d063185,0x3d1c5646,0x3c40f6bf,0x3bbc4af3,0xbb5ff87d,0xbc3e9f15,0xbc8a4fb7,0xbc2e1bbf, -0x3b685c85,0x3ad03361,0x3b35e338,0x3c06298d,0x3c385024,0x3c9d6310,0x3d301b78,0x3c439152,0x3bd73ac0,0x3c83845f,0x3c31522b,0x3bde7dd4,0x3ba5d674,0x3bb8ab1d,0x3a644464,0x3a2efd28,0xbc0d88d9,0xbc6d4dcc,0xbc877903,0xbc6cdfa2,0xbccb2c82,0xbd1f7547,0xb8d48c87,0xbdc2b834,0xbd63313c, -0x3b697638,0x3baa4c39,0xbd3a93ef,0xbd1b0e4b,0xbd118644,0xbd18d479,0xbc207fe8,0x395286f4,0xbad3223a,0xbc77b7cf,0xbcb40281,0xbc9c0370,0xbcbcc16d,0xbc6a1e87,0xbc08dbf2,0x3b519b63,0x3c24fc2a,0x3cb4e3f4,0x3b0443bd,0xbba63b8d,0xbaf8a064,0xb9b6969e,0x3b88f912,0x3b8bed5f,0x3a18cfad, -0xba50572c,0x3a114ff4,0xbbf15c9a,0xbc59b402,0xbc85a58c,0xbc7e2020,0xbd16b63b,0xbd9015ef,0xbdb2de88,0xb9bb523f,0xbd806e28,0xbde25c02,0xbdd6b821,0xbda9a159,0xbd119520,0xbc585280,0xbca47fab,0xbc9677c3,0xbc8a4c98,0xbbced91a,0xbc848dd0,0xbc904982,0xbc0fd906,0xbc98fee1,0xbca0e8b3, -0xbc829909,0xbb2ff782,0x3bb1a6d0,0x3c4f2896,0xbb727649,0xbb15950c,0x3c2a9f09,0x3bde7be7,0x3b42858c,0xbb994600,0x3b5becfe,0x3babd999,0xbacc6368,0xbbfde5d8,0xbc198210,0xbc1e7003,0x3c09e315,0x3cd033de,0x3d2552ad,0x3c8a1b89,0x3dd15eda,0x3dc968eb,0x3da1a3db,0x3d31d820,0xbb23b276, -0xbd5c33c2,0xbd99189d,0xbd902638,0xbd592b77,0xbd263b7c,0xbd126c29,0xbcc33f0c,0xbca3c7d8,0xbc963aa2,0xbc9f0e21,0xbca717b9,0xbc82fc6d,0xbca49ab5,0xbc937bb5,0xbc3131d2,0xbc8c0c4d,0xbc675b0d,0xbc183a82,0x3bb44cae,0x3c9678c4,0x3ce818f7,0x3ce9c063,0x3cf550a3,0x3d09c735,0x3d4df316, -0x3d7c086c,0x3d914661,0x3d7ade2c,0x3d808b7a,0x3da67f57,0x3db5d74d,0x3d5a8532,0x3d59cfc7,0x3d367433,0x3d2801bc,0x3d282f8f,0x3cdce2ab,0x3c236f41,0xbc40d577,0xbccce89d,0xbd1da8b1,0xbd5ee748,0xbd473599,0xbd3721a9,0xbd2a23b3,0xbd128e07,0xbcfaae2a,0xbcccde65,0xbc907af8,0xbc3c5b56, -0xbb533a5a,0x3b84107c,0x3c0859af,0x3c367167,0x3c55dca1,0x3c70ba89,0x3c80801c,0x3ccc2c4f,0x3d054e20,0x3d2ab81c,0x3d3bf34f,0x3d507556,0x3d6afc11,0x3d6c9b7a,0x3d6e79f8,0x3d6af5a4,0x3d6776e2,0x3d641e25,0x3d3b7cbb,0x3d3032c1,0x3d23f9b6,0x3d11bd23,0x3d02e1c5,0x3cf9a351,0x3cf17cbc, -0x3ce1bb42,0x3ccf92b1,0x3cb5f15c,0x3c92786c,0x3c52d689,0x3c118098,0x3c031102,0x3bdcd402,0x3b9a3bdd,0x3b466fe6,0x3a3a5b6a,0xbaee6b2d,0x3c20c51f,0x3c0d9c2a,0x3c608537,0x3c9e4691,0x3cd8ab40,0x3cee8f19,0x3d052126,0x3d12784f,0x3d26bcad,0x3d2f906f,0x3d3da5d5,0x3d530b75,0x3d4f7dd5, -0x3d5316aa,0x3d510336,0x3d43fbea,0x3d3ca02b,0x3d1d90a7,0x3d21c29e,0x3d1d4c27,0x3d1b8068,0x3d1bbe5e,0x3d19668c,0x3d178f1d,0x3d0ef1bd,0x3d0851cc,0x3d03cbbd,0x3cf8e86f,0x3cecf37a,0x3cda8330,0x3cdb4e5a,0x3cd92180,0x3cd9a3a9,0x3cd81f5e,0x3cdc7f3d,0x3cc722e6,0x3d053d2f,0x3d17404d, -0x3d34dc61,0x3d0f7e3b,0x3d25ed52,0x3d455423,0x3d496ef2,0x3d4c67ae,0x3d4e6439,0x3d54f168,0x3d5958b0,0x3d5f1b70,0x3d4cb38c,0x3d375028,0x3d5ffa40,0x3d4bef8c,0x3d393429,0x3c3763f7,0x3c27b9d9,0x3c22e293,0x3c1e2a66,0x3c241bb8,0x3c16516c,0x3c3b6b87,0x3c3ae02a,0x3c11c37e,0x3c2fb871, -0x3c1fadad,0x3bcb77b0,0x3bd2dfc5,0x3bd4a66c,0x3bdccdda,0x3c16e0a1,0x3c288e15,0x3c2c7d1d,0x3c3679ae,0x3c408c40,0x3c55c5f0,0x3c4a3ea8,0x3c3fc88a,0x3c27392b,0x3c24f265,0x3c1d4323,0x3c10c31a,0x3c185115,0x3c211b96,0x3c3d73ae,0x3c1d4094,0x3c1998e1,0x3c2cbf68,0x3c1651e9,0x3c2100eb, -0x3c724f77,0x3c32693c,0x3c66b5a5,0x3c56de3a,0x3c2e28c6,0x3c090066,0x3bcbbc54,0x3c3d5456,0x3c51bd28,0x3bda0030,0x3c4ff6cd,0x3c207b74,0xb9e9e454,0xbaa20bd6,0xbad5cbba,0x39ad5b80,0x3bfc6390,0x3c3e95c9,0x3c4bc485,0x3c699d51,0x3c83d963,0x3c9d8466,0x3c949ef9,0x3c8aa681,0x3c55c25f, -0x3c3fe58e,0x3c2d1cff,0x3c179c4c,0x3c2c2a36,0x3c40ab5a,0x3c753890,0x3c468fd1,0x3c2ea236,0x3c478af2,0x3bf0b840,0x3c3243d1,0x3ccc894d,0x3c8fd60a,0x3c6014a9,0x3c1c89bd,0x3c2778bd,0x3c3dd58a,0x3bdf0a3c,0x3c8be065,0x3c86220d,0x3b858be0,0x3c7dc8a0,0x3c1788bd,0xbc0da66f,0xbc3b7948, -0xbc40fda6,0xbc07afaf,0x3b953c53,0x3c44232c,0x3c585e81,0x3c88e350,0x3ca8a4be,0x3cd847f3,0x3cd219e5,0x3cc04347,0x3c718b7c,0x3c61ea37,0x3c35ec57,0x3bfa3a93,0x3c0cd51b,0x3c3a7451,0x3ca010dd,0x3c36c39a,0x3c24c4a4,0x3c82c06b,0x3bc210ee,0x3c1b308f,0x3d12db5e,0x3c938073,0x3ccd4b5e, -0x3c9720b2,0x3c609b6c,0x3b4c64b4,0xbbbf76a2,0x3c1697a4,0x3c819a92,0xbb0d87e5,0x3c8429c8,0x3c0e9502,0xbcb0b7ac,0xbce7f81f,0xbd0365a2,0xbcbf938e,0xb884ab1e,0x3c5cd5ce,0x3c8f9f4a,0x3cb647d0,0x3ce6478b,0x3d147740,0x3d15848f,0x3d08ca71,0x3cb6f9e3,0x3ca497da,0x3c852b60,0x3c1893e9, -0x3ac4c454,0x3c0c2831,0x3cf29106,0x3c65fa33,0x3c22d2d8,0x3c877540,0xbb4c993d,0x3c477e88,0x3d74e2c5,0x3d15e51b,0xbcb20cdd,0xb9eea6cb,0x3bf6349c,0x3d103d16,0x3da1dc1b,0x3d21c2f4,0x3c8ffa4e,0x3c346893,0x3cb4e425,0x3c871fd2,0xbc60df03,0x3c857c90,0x3c95f62e,0x3b6a43e4,0x3b91a1cc, -0x3b5aa262,0x3b9c8010,0x3bc01638,0x3c659738,0x3ced7e06,0x3d00ea85,0x3cf38fa8,0x3cc1a242,0x3cbc68d7,0x3ca77202,0x3c155387,0x3c2ee800,0x3bc24052,0xbbb658c0,0x3ad30ab5,0x3c914f13,0x3d0a8d2d,0x3d0fe9c2,0x3c54f720,0xbcd331ae,0xbcf2a118,0x3c44f7b3,0x3d91a451,0xbb108be7,0xbd114f6e, -0xbd176ec9,0xbd3099d1,0xbca7093f,0x3cf84b3c,0x3c4ed94c,0x3c1ef2c7,0x3cb29cae,0x3c954ae9,0x3c352e1c,0x3beca3ca,0xba375010,0xbb2375d6,0xba6548ce,0x3bf23351,0x3c33adbc,0x3c916df1,0x3c4a7a5f,0x3c567382,0x3c909bef,0x3c566cea,0x3c0e7bf7,0x3c17824c,0x3b00f13f,0x38d0c5fd,0x3b9e4348, -0x3c1f31fa,0x3b7c5f17,0xbb9a9f69,0xbc11104f,0xbbe1afcc,0x3bfc00aa,0xbc201edc,0xbc16eeb7,0xbc233ced,0xbc524515,0xbb657b4a,0x3ae61d3f,0x3c94cbf6,0x3c97e41a,0x3cb987a1,0x3c793d6c,0x3c0b6751,0x3be532d4,0xbc54797c,0xbc4e5f6b,0x3b589e29,0x3b2775ec,0x3bbc3727,0x3bdc2ca5,0x3c8b3e83, -0x3c9d54be,0x3cd32053,0x3c3b3501,0x3baee2ed,0x3c865a25,0x3c72f8d0,0x3bfeb8f8,0x3b0f32d6,0x3bf1c0f6,0x3b488733,0xbac11f7a,0xbc2763f5,0xbc390c08,0xbbd7b561,0xbcd10534,0xbcebad77,0xbcc5c743,0xbc30137d,0xbd047138,0x3c6d85d4,0x3c48d3b1,0xba2f6095,0xbc856bb4,0xbd046402,0xbd07b348, -0xbca713a3,0xbca02279,0xbc803f96,0xba218f39,0xbc36149d,0xbc31d2b0,0x3b879990,0x3c075d8e,0x3c139edf,0x3b933379,0x3c53342c,0x3c638bc1,0x3c27045e,0x3c53e537,0x3c4fe9bc,0x3c2bb3a6,0x3c17571f,0x3c18c7cf,0x3c223d8c,0x3abd06a4,0xb99eb0b3,0x3bb4302a,0x3b719e7c,0xbb29b7de,0x3aea2508, -0xbc05fac3,0xbcd1c8d1,0xbd2c2073,0xbd4f039d,0xbda10ac6,0xbdfeabbc,0xbdded8ef,0xbdacc1ec,0xbd39b8c0,0xbd12eadb,0xbcd05bcb,0xbc55b4fd,0xbb6d4226,0xbb1b181d,0xbc6e23dd,0xbc0b24f0,0xbc454b2b,0xbc846d6f,0xbc3e7b01,0xbbf1ab97,0xbb3deb0d,0x3c1e307e,0x3c605eec,0x3c427582,0x3b353648, -0x3b3bd443,0x3c48dbb1,0x3b8148f6,0x3b444096,0x3b982d27,0x3c0b8bfd,0x3bb2da98,0xbbf846c6,0xbca95882,0xbcd9f235,0xbcd4d392,0xbd2702e9,0xbd141bc9,0xbc88ba8b,0xbd3a0cd8,0x3d6be3fc,0x3d0715f1,0xbb7160e6,0xbcea736b,0xbd56c4c3,0xbd511504,0xbd2caa9b,0xbd0138b1,0xbcab3f13,0xbc950880, -0xbcd4f216,0xbc7a49b8,0xbc2f5eaf,0xbc2a5912,0xbc1293fe,0xbbcce616,0xbbe25980,0xbba242fb,0xbb935a9e,0xbb4dd659,0xbb7f2d5f,0xba6ee7b3,0x3bd94c8c,0x3c1fb08a,0x3c4b6615,0x3c251f0f,0x3c7823a0,0x3cb63dc0,0x3cdae611,0x3d255e1a,0x3d446076,0x3d50646b,0x3d4abb5c,0x3d434050,0x3d504654, -0x3d3d8bcd,0x3d45d12d,0x3d307c1d,0x3cbcc718,0x3c286438,0xbc0a5b9a,0xbcd25f1b,0xbd3e577b,0xbd8b5660,0xbd8142f7,0xbd73555f,0xbd68856a,0xbd5d4401,0xbd53502b,0xbd479289,0xbd406510,0xbd3a7460,0xbd33acef,0xbd18d6f5,0xbcfcfbb2,0xbcca48c7,0xbc7ead41,0xbba0edc8,0x3b8ff8bc,0x3c41d660, -0x3ca11096,0x3ce545db,0x3d04155a,0x3d0ac8af,0x3d1e099f,0x3d2667d1,0x3d3d8151,0x3d5093e3,0x3d5cbbe9,0x3d72506e,0x3d850f04,0x3d6411df,0x3cd3fa73,0x3c6d753d,0x3c309d91,0x3bde0231,0x3b7975bb,0x3a41e0c1,0xba17ea77,0xbb887971,0xbbb04b1b,0xbc14c261,0xbc3dcead,0xbc695688,0xbc880bd1, -0xbca1d776,0xbc79a520,0xbc36a5a2,0xbbf613c6,0xbb888180,0xba4de92f,0x3b00b1c3,0x3b516a42,0xb8665ea0,0xba0b0bd4,0x3ac5cb6c,0x3aab820b,0xb9f4165c,0x3b5bf59e,0x3c01ec22,0x3c61729c,0x3c8a8477,0x3c9ef855,0x3cd974c2,0x3cbf3c47,0x3cbef103,0x3caa3d89,0x3c8656a6,0x3c177a11,0x3acf864a, -0x3b266859,0x3a8125e4,0xb9a222ce,0xbaefd096,0xbb6740bf,0xbba6b70f,0xbbbecff2,0xbbd0e90b,0xbbe7f626,0xbc027e75,0xbc0fcde7,0xbc2e618b,0xbc080207,0xbbe4bee2,0xbbaf311a,0xbb80f2a0,0xbb211d6d,0xbaaca980,0x3b85908b,0x3c023579,0x3c7a5a31,0x3b2f4453,0x3c09bcaf,0x3c7c88b6,0x3c8e7d6f, -0x3c97e369,0x3c9e9386,0x3caddff2,0x3cbae057,0x3ccb2438,0x3c772501,0x3bfd2518,0x3cbf78a3,0x3c70cc8e,0xbb25a8c1,0x3c27de4c,0x3c275b4a,0x3c17b5db,0x3c271c3e,0x3c27a255,0x3c199cff,0x3c236f1f,0x3c1d1471,0x3c0919b8,0x3c13077e,0x3c08d8c5,0x3bd1240d,0x3bdbd291,0x3bdbe724,0x3bdcff0c, -0x3c0ac9ce,0x3c181ed8,0x3c192edb,0x3c235e42,0x3c2cbdd2,0x3c3914cd,0x3c35b827,0x3c3341de,0x3c2e5707,0x3c13d1e1,0x3c128f87,0x3c1813e7,0x3c2b2478,0x3c302036,0x3c30122c,0x3c2d42b0,0x3c2b4eff,0x3c24877a,0x3c123cb6,0x3c0d6d89,0x3c54d6e1,0x3c2e6c13,0x3c808b19,0x3c3d9e28,0x3c47f53a, -0x3c3303ac,0x3c0cb700,0x3c1efda3,0x3c2200c4,0x3bfcb22e,0x3c207f0d,0x3c037146,0x3adc4825,0x3ae247f5,0x3aded8fd,0x3b28d471,0x3bf6051e,0x3c2128c0,0x3c2665ec,0x3c4b74fa,0x3c6764a8,0x3c8d5c45,0x3c8a6ba3,0x3c693abe,0x3c516fe1,0x3c1cf59e,0x3c115a4c,0x3c06405b,0x3c3f90ec,0x3c5a4747, -0x3c4e3a07,0x3c5785c2,0x3c33fa89,0x3c10b3d1,0x3bdef1fd,0x3c1754bf,0x3c937c4b,0x3c77a032,0x3c8565cc,0x3c46893c,0x3c7d6e3d,0x3c89ba7b,0x3c3a234b,0x3c547f52,0x3c29aec5,0x3bb9e5dc,0x3c173b29,0x3bac874c,0xbb7dd627,0xbb89b2b2,0xbba8ad1f,0xbb961945,0x3b90bd19,0x3c2410e7,0x3c23af93, -0x3c6cb293,0x3c8beb10,0x3cc64365,0x3cadb760,0x3c95b3dc,0x3c6d1665,0x3c1fe680,0x3c0aeae5,0x3bac12a8,0x3c47e2b1,0x3c677bd8,0x3c6acdf6,0x3c69790b,0x3c4d2497,0x3c2df68a,0x3bb076d5,0x3be936af,0x3cc25c24,0x3c7807c8,0x3ce14320,0x3c9099ad,0x3c97de03,0x3c48b595,0x3b57440d,0x3bca31ad, -0x3c168268,0x3b8e7a6c,0x3c1b974d,0x3bcbe507,0xbc49a9c1,0xbc846f60,0xbca21aa5,0xbc7f45f5,0x3a7f53bc,0x3c105862,0x3c2e3e59,0x3c949629,0x3cce2d26,0x3d1a0ffe,0x3d0a8c96,0x3cdbb3b0,0x3c99884f,0x3c695ccf,0x3c55c93b,0x3b9ccfdd,0x3bcf3ae7,0x3c594301,0x3cced204,0x3c8fc571,0x3c41b493, -0x3c12f7bc,0xbb27a081,0x3c24a582,0x3d2a0dc5,0x3d043d36,0xbbf987dd,0x3bc2eb58,0x3cb592a8,0x3d35bb78,0x3d95fa95,0x3d019bc3,0x3c2541a4,0x3b8963b8,0x3bddb208,0x3b7168d7,0xbc860b72,0x3cfb25ff,0x3d13d3ed,0x3c0093a4,0x3bf46759,0x3be2f5e0,0x3c3dd8b3,0x3beed9b3,0x3bb304df,0x3c6a18ed, -0x3c791d18,0x3c66ac02,0x3c98af2f,0x3caa1d72,0x3cb86da3,0x3c54287f,0x3c1243b8,0x3b73cc9c,0xbbc5c26a,0x3c185a25,0x3cebd9c4,0x3d14d33c,0x3cdd6480,0x3b7b4687,0xbd063ed5,0xbcb8d14c,0x3cc7c6b5,0x3a708524,0xbce4b00c,0xbd11e7d6,0xbd1d6039,0xbcdb7721,0xbc8057a2,0xbc181c9a,0x3bf03560, -0x3c2ca29b,0xbb06c8ae,0x3c9736ae,0x3c9ccd26,0x3c1599e3,0x3bd16d98,0x3b95983c,0x3b0a8905,0x3c7faa6d,0x3c8fc12c,0x3c52b3f1,0x3c9ecc35,0x3ca371b1,0x3ca0537b,0x3c7e2a5f,0x3c049fbc,0x3c113035,0x3b88d00d,0x3bbdc896,0x3c63f2c9,0x3c3260bd,0x3ad26d74,0xbc1cd666,0xbc1871c6,0x3a9bb088, -0x3c1c0631,0x3cb543d3,0xbb9a68ad,0xbbde2b31,0xbc5ca039,0xbc2f5d70,0xbc0ed848,0x3b3fdeba,0x3c655e58,0x3d00e99c,0x3cf9f16f,0x3cb3c79f,0x3c1a9c77,0x3b612d11,0xb9c19620,0xbaa49ac2,0x3c1a1f38,0x3c75e20c,0x3c2223e3,0x3cc76ba0,0x3cb845f5,0x3c0452c9,0x3bf04954,0x3bbc76bc,0x3c121c91, -0x3c778b58,0x3bfddd22,0x3b9c1d1e,0x3c0681ea,0x3baa856c,0x3a23dfa5,0xbbc266c4,0xbb84ea63,0x3b8171e5,0xbcadba8b,0xbc65ccdf,0xbb3fc8af,0xbbda7c72,0xbbcfa32e,0xbc86a7ca,0x3b2f32c2,0x3c19e9ed,0xba072d6e,0x3bfe6a47,0xbb12a925,0xbcd7371b,0xbca6b0a6,0xbc89b619,0xbc38aff5,0x3ad334c4, -0x3bae79a3,0x3a84fc98,0x3c71478e,0x3c8ce4f5,0x3c73f89e,0x3c96784c,0x3c895f94,0x3c2277e8,0x3c96daa4,0x3ca2fba2,0x3c8eac2d,0x3c8823e5,0x3c42518f,0x3c221cb8,0x3b6788d8,0x3b4ed891,0x3c14da22,0x3c0a4e39,0x3b8571b4,0x3c56bffc,0xbc0023ce,0xbc7e6d2f,0xbc786818,0xbc1a1de4,0xbd6ca61c, -0xbd3ac400,0xbcbce782,0xbcdc8e66,0xbd2b96a2,0xbd23b03b,0xbd147917,0xbcec008c,0xbb3896bc,0x3badb82e,0xbbce53df,0x3a75fe7b,0x3ae85249,0xbaf6f9c0,0xbb13cdd7,0x3aa29f4c,0x3c104098,0x3c7bde3b,0x3c829cf7,0x3c029c5d,0x3c3eba90,0x3c2e39c8,0x3c479b5c,0x3c080c38,0x3c05bd6b,0x3c2f8930, -0x3b8e9f87,0xbb8b66ab,0xbc6ac041,0xbcaec042,0xbccc0daf,0xbcc95356,0xbd1f8c8e,0xbd3494b7,0xbd330563,0xbd5b0ba7,0xbcdc996d,0xbd3d4eea,0xbd74bbf6,0xbd48e894,0xbcdaed47,0xbc09b820,0x3b82716b,0x3c5173bb,0xbc3741a8,0xbcab4df0,0xbc83b7e4,0xbc78d0ea,0xbc57977a,0xbc4082e7,0xbbbd8ef2, -0xb9c7118c,0x3c17233a,0x3c38edc5,0x3c1bca87,0x3a2b577e,0xbacab25c,0x3b00ea25,0x3c3885db,0x3c28213c,0x3c45d8d9,0x3c7701aa,0x3c890e8e,0x3c8314bb,0x3be2a4db,0x3bed37e8,0x3c18b742,0x3c31940e,0x3c8cb8ca,0x3c281fb5,0xbbced4ce,0xbc95bee2,0x3c8377a5,0x3b8d6d59,0xbc1fcd8c,0xbcaf276c, -0xbd1cb6bf,0xbd32ee75,0xbd4aa08e,0xbd58794e,0xbd304a0e,0xbd0ee22b,0xbcef3af8,0xbd00cc63,0xbd03c2ef,0xbd0c86ee,0xbcf4fdc1,0xbcdb5726,0xbcbdea4b,0xbc90d54e,0xbc2ac9b3,0xbb8c17fc,0xbb77fd2a,0xb9801d89,0x3b1d948e,0x3bd2a080,0x3c4fa594,0x3c844835,0x3cb56447,0x3cc21123,0x3d0011d9, -0x3ce818b0,0x3cefa91b,0x3ce66abf,0x3cdba523,0x3cf44faf,0x3d04f2fc,0x3caba70a,0x3b23e014,0xbb730f2c,0xbc03a865,0xbc36fd6b,0xbc6beac5,0xbc8f8ee1,0xbcb13700,0xbce72fc5,0xbcf27a57,0xbd056648,0xbd0a19c3,0xbd0c32df,0xbd0cd9b0,0xbd10a088,0xbd00b82c,0xbce6e72b,0xbcce4797,0xbcb7d35b, -0xbca9a095,0xbc90184c,0xbc1f6baf,0xbc239afe,0xbc006e0b,0xbbb39117,0xbb5d3928,0xbb22b427,0xbac00f4f,0xba1aa269,0x3adfc009,0x3b0d269d,0x3b5b47b4,0x3bbb6623,0x3b6a31fb,0x3aeae425,0x3a8ee879,0xbb0fc3a6,0xbc4f646f,0xbc68f8c1,0xbc77e4e9,0xbc8c6385,0xbc99b9fd,0xbcad5608,0xbcbb598d, -0xbcc8b75a,0xbcc77e2a,0xbcc900f5,0xbccc9c79,0xbcd089fe,0xbcd460d5,0xbcdcda05,0xbccff8e5,0xbcc78df8,0xbcbd4c19,0xbcb2ef7d,0xbca61d85,0xbca4d6b6,0xbc876d64,0xbc713027,0xbc325062,0xbc6f76d7,0xbc43f007,0xbc14ac20,0xbc0f7942,0xbc072f38,0xbc0b79c9,0xbbf7ea45,0xbbeb4a58,0xbbcccc53, -0xbc19d1f9,0xbc3f122d,0xbbfd7c71,0xbc290755,0xbcbab2f7,0x3c0b36c3,0x3c014da9,0x3bf0b990,0x3c0f8349,0x3c0be8fc,0x3be0876c,0x3bfc7d2f,0x3bfbe9c0,0x3bf41ef8,0x3bea3e52,0x3be5d63d,0x3bf253ce,0x3be58d0e,0x3be844b9,0x3bf0775c,0x3c00c645,0x3c030fe2,0x3bfdf2fb,0x3bff1389,0x3c01f769, -0x3bfbe653,0x3c0a37a7,0x3c0f0b54,0x3c1c5886,0x3bf15143,0x3bf5c706,0x3bfd96b4,0x3c1dedd6,0x3c2258eb,0x3c13a088,0x3c1a3e96,0x3c13a196,0x3bfba88c,0x3bf667e4,0x3be6d9c5,0x3c1340ec,0x3c03b4af,0x3c2dc524,0x3bf5a9bb,0x3c144865,0x3c08dcac,0x3b9d63d9,0x3bcdeb80,0x3bd73dfe,0x3bf24ecb, -0x3becff28,0x3bffeba0,0x3c07d13e,0x3bd37a9e,0x3bd47f97,0x3be2259c,0x3c10a44d,0x3c16fb2c,0x3c07747a,0x3c0c51bc,0x3c10974e,0x3c1fa666,0x3c46fc79,0x3c2e2070,0x3c41d146,0x3bf6a879,0x3be5bdf6,0x3be16e42,0x3c436ee4,0x3c5e7571,0x3c2afa0b,0x3c3a4a52,0x3c15eb4f,0x3bade8f3,0x3bbfce59, -0x3bdf9d7f,0x3c25f157,0x3c1ad2f8,0x3c188f35,0x3bfcb45d,0x3c60c7cf,0x3c56da90,0x3b7cc985,0x3beb6f94,0x3bee6ddb,0x3bef8a8e,0x3bc2f9fc,0x3bb24252,0x3c112bdf,0x3babefc8,0x3bb09691,0x3bb57349,0x3c0fe4e1,0x3c24a001,0x3c031890,0x3c171915,0x3c120bb3,0x3c3dc9c9,0x3c5902de,0x3c4adaa7, -0x3c725e38,0x3be573a7,0x3bd92901,0x3b89c725,0x3c7a1c0d,0x3c891d35,0x3c3bacba,0x3c622a3c,0x3c37199b,0x3bb295e4,0x3b9d2015,0x3b997245,0x3c2dbec8,0x3bf462d6,0x3c69e1fe,0x3be10e01,0x3c1ef09b,0x3beecd73,0xbb99d940,0xba4b467d,0x3adf7d96,0x3bcfbb36,0x3bcec8e3,0x3c3fe4c4,0x3c57549d, -0x3b679da0,0x3ac3d9bf,0x3abb1c48,0x3c15cbc4,0x3c24f6cd,0x3be7f6a0,0x3c17d0cd,0x3c3aea96,0x3c8fcd0a,0x3cb71bf7,0x3c9811c8,0x3ca6b7bc,0x3c2ca94c,0x3c06e281,0xba6b209f,0x3c335990,0x3c92b784,0x3c91e99f,0x3c890c77,0x3c1df760,0x3aab5643,0xb81196fd,0x3bc10fca,0x3ca44d4d,0x3c8da8e8, -0xbbabff1f,0x3c6ed2be,0x3d06b1a9,0x3d1e3c51,0x3d42515e,0x3cd80dcb,0x3c8fddc9,0x3c933342,0xbbf232fd,0xbc6a92dc,0xbc60ab26,0x3ca47c44,0x3cf8e3fb,0x3c6ab923,0x3c61d3c9,0x3c5dd10c,0x3c74b2b2,0x3c33dc30,0x3bb75200,0x39ba7b83,0x3b6d7a39,0x3bd69439,0x3c6a6cfd,0x3c87b8e0,0x3ca6c8ad, -0x3ca27b33,0x3bcfe73c,0x3a2dbe86,0xbad3926a,0x3cae9191,0x3d11d9b0,0x3cc135b6,0x3c5194d4,0xbb94f20a,0xbcf30d1d,0xbcb94dc5,0x3d17af9a,0xbd68ca6c,0xbcf87e5e,0xbcb55020,0xbcce2db7,0xbca76fe8,0xbce5212c,0xbd54a1f0,0x3ba39520,0x3c97d364,0xbc4ef161,0x3c39873e,0x3c89239f,0x3c8baba2, -0x3c3d0692,0x3c0456ad,0x3bdf74bf,0x3c8f5926,0x3c9dc7bd,0x3bfa6fa0,0x3c5fc73f,0x3c7400f5,0x3c7082e3,0x3cad8d20,0x3c6432f7,0x3c22fa77,0x3bbe19a0,0x3c232d43,0x3ca4f90a,0x3c3050a6,0x3a9c6ef0,0xbc162811,0x3bc6ea94,0x3c78883f,0xb993ac31,0x3d588d05,0xbc5298fb,0xbc572ddc,0xbba9d0ed, -0xb91a75af,0x3c3db9fb,0x3a80bb31,0x3c2dd410,0x3cc3fff9,0x3cdf362f,0x3cbc653c,0x3c123997,0x3c82fde0,0x3bdd8efa,0xbb3bc21a,0xb8d1eb4a,0x3ba87a1d,0x3bbc8211,0x3c558d08,0x3c3bd3f7,0x37650d23,0x380e6077,0xbb0c64e2,0xba26c823,0x3bcfb5ab,0x3b2f47ee,0x3be9474b,0x3bce31e5,0x3b6f51fe, -0x3b82350e,0xba755204,0x3b7c94f5,0x3c0721a5,0xbbb3fb82,0x3b99bc92,0x3c0d5488,0xbc1c0980,0x3c03413d,0x3b411b38,0x3ae304e7,0x3b67bad0,0x3c8f890a,0x3c3755b3,0x3b1d0c32,0xbc344e9f,0xbc8d367b,0xbca5ccd1,0xbcf29148,0xbbd4e6ef,0x3ba81151,0x3bc06c35,0x3bfb76ad,0x3c205c97,0x3c523a53, -0x3c508578,0x3c2e1257,0x3be6f87d,0x3c3fec22,0x3c32230d,0x3c266269,0x3c6c02b2,0x3c297d21,0x3bf22262,0x3b719520,0x3b29c9e4,0x3bc39797,0x3b723b47,0xb9028689,0x39ae893f,0xbb61eec4,0xbb02f871,0xbb0db375,0x3c1f5313,0xbce22ba8,0xbc331e6e,0xbbbef491,0xbbeb4834,0xbc6ac394,0xbca46123, -0xbc90d53d,0xbc12344f,0xbc01d5e2,0xbc0baa37,0xbc258351,0xbb5f88a2,0x3a576ca7,0x3b32b3b2,0x3c156732,0x3c5cb863,0x3c873e78,0x3c5960ca,0x3c13f13f,0x3b4ac5ea,0x3c436c71,0x3c3a86fd,0x3bd5a6c9,0x3bec3ba6,0x3bd95a8b,0x3c351916,0xbae86b8c,0xbc1655c4,0xbc39174f,0xbc48ed8b,0xbc67e96e, -0xbca8dee8,0xbcd7eb85,0xbd16b512,0xbd59d5f8,0xbd29b81d,0xbd5a2f68,0xbd5ad650,0xbd40356c,0xbd112afb,0xbca9d9ac,0xbbf2fed0,0xbc06bbad,0xbcaa2258,0xbc8ac8d4,0xbc3c0a70,0xbb8e258a,0xbbe6cb61,0xbba9d98e,0xb9204548,0x3b40c9e0,0x3bed9931,0x3c144437,0x3c5baac9,0x3c5f1a45,0x3bf32c55, -0x3bf5e4e0,0x3bc4598d,0x3b8028d3,0x3b861d48,0x3bb0db86,0x3c293723,0x3c1162d7,0x3b85d682,0xbbf06dba,0xbc6979d0,0xbc8fbe9b,0xbc9f8f5a,0xbc07b1a8,0xbc235844,0xbca950ef,0xbd20541e,0xbc983c89,0xbce2a490,0xbce075fe,0xbcd4c466,0xbcd0a639,0xbcad0e1a,0xbc685dad,0xbbe28e29,0xbbfa3cbc, -0xbc2a7782,0xbc3ca91c,0xbc37128f,0xbc27f957,0xbc25105b,0xbbdde32e,0xbb7c83b5,0xbaa00cab,0xbb80bb18,0xbbccef06,0xbc08b626,0xbba8c241,0xbb4ae364,0xb9d4185f,0x3b2fe2eb,0x3bbe5a95,0x3c0f097e,0x3c310386,0x3c3aa7b8,0x3c8efa4b,0x3c264980,0x3bd7d795,0xb985203a,0xbba1fe00,0xbc00f190, -0xbc1f9d8d,0xbc853a27,0xbb9786ef,0xbc0fc163,0xbc41e08b,0xbc7852e3,0xbc97fd4d,0xbcb40aab,0xbcdaa1f0,0xbcfadbc8,0xbcf9cdef,0xbcee0947,0xbcea920c,0xbce65bc7,0xbce908da,0xbcf47961,0xbce22762,0xbcd42b1e,0xbcbd891b,0xbcaa9da5,0xbc8fde74,0xbc7f4dbc,0xbc88b35d,0xbc452374,0xbc213360, -0xbbf4a73d,0xbbaf06e7,0xbb057f57,0xbaf53a42,0xbaf2a256,0xbaa1ff5f,0xba4db114,0x3a2b0793,0x3b32fca5,0x3a58ebfd,0xba3876c1,0xbaeb0abf,0xbb9ad722,0xbc83e83f,0xbc7ce5f9,0xbc884092,0xbc922cf3,0xbc9a5f04,0xbca361f3,0xbca97e6b,0xbcb5f533,0xbcafe437,0xbcb20bda,0xbcb2c9eb,0xbcb4ae24, -0xbcb37502,0xbcb30e8f,0xbca9e50c,0xbca4265e,0xbc9fccfa,0xbc98907a,0xbc933e00,0xbc8558dc,0xbc93ac7f,0xbc93d2e3,0xbc97b938,0xbc79f7b7,0xbc80f909,0xbc7db77d,0xbc79d758,0xbc6e9085,0xbc6d8a94,0xbc5ef3f1,0xbc5cef9f,0xbc51bb68,0xbc634951,0xbc668037,0xbc7a8e63,0xbc7e38fc,0xbcb29dbb, -0x3bc5296e,0x3bbde8d3,0x3bad9193,0x3bc340bf,0x3bb1c319,0x3b7681e7,0x3b93f5df,0x3b9c52ff,0x3bb6fac5,0x3ba3e82e,0x3ba895cb,0x3bd79641,0x3ba46443,0x3ba35c58,0x3bb2650b,0x3bbd0b48,0x3bbee41b,0x3bc008d1,0x3baec4ee,0x3bab3439,0x3b9ee6ad,0x3bbf5c7c,0x3bcb0447,0x3bf513d0,0x3bac1fae, -0x3bc8814d,0x3bdb7664,0x3c0dc058,0x3c10dbbc,0x3bf5dd46,0x3bfbf923,0x3bebb39a,0x3bca15c3,0x3bc9e432,0x3bb50d6a,0x3bd2adcb,0x3bc14d94,0x3ba5d69a,0x3b7681ca,0x3ba38bd2,0x3b8d4db5,0x39d2ad7a,0x3ab51d2c,0x3b1f5df9,0x3bc3cc14,0x3baf7113,0x3bd0c32c,0x3c1f5ff7,0x3b99bcd0,0x3b72f18e, -0x3b9e5751,0x3bc04daa,0x3bd62a22,0x3bd627c6,0x3ba8f41c,0x3b99102e,0x3b97bee4,0x3be55953,0x3be09264,0x3c04347c,0x3bb47e54,0x3bbe4b67,0x3bd6626d,0x3c38c818,0x3c49be19,0x3c0b71cf,0x3c0d6b40,0x3be8ce96,0x3b8d4745,0x3bb3d2a7,0x3bbece0c,0x3bc8c11e,0x3ba54690,0x3baec346,0x3bc2ddc9, -0x3c0f7a60,0x3ba91610,0xbb752397,0xba15abb0,0x3a897801,0x3be715b4,0x3b8bfe6c,0x3b9f35f1,0x3c570c7a,0x3b4c6eda,0x3b5980ee,0x3baebe71,0x3bf63ee8,0x3bff7d4e,0x3bf6a990,0x3ba1fffe,0x3b6941ee,0x3b7164e5,0x3bd2d81d,0x3bf129ef,0x3c233156,0x3ba6df10,0x3bda143d,0x3bd9b1fe,0x3c8c8614, -0x3c95646b,0x3c344ee8,0x3c4aa3ed,0x3c1c83cd,0x3bac58c3,0x3bc9332a,0x3b99af81,0x3ba27395,0x3b82b810,0x3ad55d63,0x3a9c6755,0x3b59e0c0,0x39615e8d,0xbc5d6c1b,0xbc3f4a2f,0xbbeb2976,0x3be594c6,0x3bcc3402,0x3c3e438d,0x3cbe39aa,0x3ba2996d,0xba7050ab,0x39e3294f,0x3ba004ca,0x3bf9b44c, -0x3be04353,0x3b2f04e9,0x3a486e42,0x3adf7a8c,0x3c055a70,0x3c3083e9,0x3c99b12b,0x3c16fb3f,0x3bb77784,0x3987a6d3,0x3c802106,0x3cac3f63,0x3c35a6a8,0x3c493634,0x3bfebb9c,0x3a489aec,0x3b6344e0,0x3ba790b2,0x3c1cd209,0x3bca8e78,0x3b3ebaaf,0x3ca0ed19,0x3cc2d702,0x3caa7424,0x3cc880c2, -0x3cdff280,0x3cce6db9,0x3c867d00,0xbbcbfef9,0xbc9a7b22,0xbcb6900d,0xbc01e55d,0x3c2d8701,0x3cf6599c,0x3c98b6a2,0x3c6f1aa0,0x3c80a50d,0x3c54f53c,0x3c3195d3,0x3b9fef59,0x3b28f0df,0x3b8d5724,0x3c22c680,0x3c2b58f4,0x3c6ebbe8,0x3cb7dd92,0x3bb2d350,0x3a766d7c,0x3c1b6633,0x3cf3d309, -0x3d07b8af,0x3c26cebc,0x3c05a997,0xbba03b17,0xbce5d8e0,0xbc6c6fb9,0x3c9c8f78,0xbd8787cb,0xbc69576e,0xbb0fbcbc,0xbc494384,0xbc7930e3,0xbc91f252,0xbcc4f0b9,0x3c6fe4da,0x3cd1b947,0xbac50236,0x3bfe630b,0x3c3afa2f,0x3c8c6efe,0x3c906804,0x3c8d8ccb,0x3c9024e1,0x3c7026c8,0x3c54423a, -0x3c09b1ec,0x3c1856e9,0x3c12dbea,0x3c064ad3,0x3cad0abf,0x3c8f4b45,0x3c232269,0x3c382267,0x3c7d14ce,0x3cab4206,0x3bd963e5,0x3b1fcffb,0x3b3b8c70,0x3c2d6268,0x3c74d0cf,0xba590ff9,0x3d2bcd24,0xbc80fc99,0xbc76a988,0x3c3e55b6,0x3c94ece1,0x3cbc8a20,0x3b913171,0x3b178c19,0x3b7dda4c, -0x3c85fed1,0x3cb2a4da,0x3c33db76,0x3c864049,0x3bff85ae,0xbb7d11fe,0xbc091ac1,0xbb862e27,0x3c2b9c16,0x3b5dcdf7,0xba8377f1,0xbbbdad2d,0xbb94b336,0xbbcb981d,0xbc01ae98,0xbb417767,0x3a521d03,0x3c14f90c,0x3be502d3,0x3b962d0f,0x3bbf093c,0x3ba62c5f,0x3bf4911d,0x3b787b52,0x3c35f415, -0x3c768996,0x3b382311,0xbc3fefee,0x3c86c013,0x3c978556,0x3c49c6ad,0x3c3a3c3b,0x3c8a7e36,0x3c309f4e,0x3ba1e5e9,0xbb025166,0xbbc83a5e,0xbc15c302,0xbca91e7e,0xbc1347bb,0xbacf0c6b,0x3b05f621,0x395ec1f6,0x3b7d7cf1,0x3c3a146b,0x3c1958b9,0x3c1126cb,0x3bbbf8d9,0x3b400658,0x3b124abd, -0x3b32ee3d,0x3c0cb7d6,0x3bed36a0,0x3b913caf,0x3b99fb9d,0x3b6be523,0x3b6d7e4b,0x3aa2ba76,0xba49484f,0xbbd732de,0xbb161ba3,0x3a4d3836,0xba883b1c,0x3c358121,0xbcd8287a,0xbc97891c,0xbc309999,0xbbc31bd3,0xbb874040,0xbbb4ce36,0xbba85252,0xbb4739cd,0xbc98bea1,0xbc9f463c,0xbc1ccd99, -0xbbe1bb8b,0xbb284913,0x39b3a6eb,0x3bf41f33,0x3c219b2c,0x3c31dc51,0x3b03b78d,0x39b303a3,0x3ba26751,0x3bb19bb1,0x3b8f1c9f,0x394679ff,0x3b97b1b8,0x3b7573bf,0x3b6da8c0,0xbb3a7f0e,0xbbd1796d,0xbb8e6e49,0xbba73237,0xbc25deba,0xbca235ee,0xbd035406,0xbd2fcfe0,0xbd53aaf5,0xbd15af20, -0xbd099e8c,0xbcffce1f,0xbcd6edf7,0xbcdbaa00,0xbcdc50e9,0xbd109bd9,0xbd1727c0,0xbcf5d1a4,0xbc908f1f,0xbc22a00b,0xbc18ee5c,0xbbddf74f,0xbb8fd274,0xbb2cdde1,0x3b75dfd1,0x3be045e8,0x3c608439,0x3c02203a,0x3bec99bd,0x3c15e5f9,0x3c22ff25,0x3c18367a,0x3b858e62,0x3b939a31,0x3b340d25, -0x3b89f456,0xbbe9e97f,0xbc550779,0xbc8318d6,0xbcb3949e,0xbccbb450,0xbccf7ba7,0xbcaaea78,0xbc8876dc,0xbc34d79c,0xbcc90c3d,0xbd150429,0xbd28fe38,0xbd12b303,0xbcf8cfdb,0xbcbe3015,0xbc617ca9,0xbb858b6a,0x3b72bf95,0x3a8a80ed,0xba45e6fb,0xbaebda64,0x3b001b64,0x3b97b509,0x3be55432, -0x3c275a2f,0x3c55bbef,0x3c8a51bc,0x3c443c9e,0x3c156a92,0x3b69752a,0xb96d383f,0xba29aa6c,0xbaf06d13,0x3aa8c61a,0x3b790996,0x3bfb838c,0x3bc6d334,0x3b4af2e9,0x3b5d76f5,0xbb207441,0xbbbd1ca1,0xbc39e626,0xbc93c2d1,0xbcd25515,0xbd0291dd,0xbd10b081,0xbc242f56,0xbc5d5a4b,0xbc627f29, -0xbc700745,0xbc84a76a,0xbc8f67b7,0xbc9d739b,0xbc9b9e58,0xbc88ad80,0xbc5ffa87,0xbc3dccd5,0xbc24f827,0xbc0e55c3,0xbbf0224a,0xbc0111d9,0xbc07825d,0xbc049a6d,0xbbfdb282,0xbbdf99b0,0xbbc71f2d,0xbbd7a725,0xbb2d18de,0xba8b858d,0xb8c4d961,0x3aac9dea,0x3b8e8fb0,0x3b0b2e89,0x3a20ecc2, -0xba72010c,0xbae835a7,0xbb1167fc,0xbaff7650,0xbb820b81,0xbb9d35ec,0xbbb5be38,0xbbff9de8,0xbc0e6861,0xbbf62020,0xbbf8a3ed,0xbbfa35f2,0xbbf0fcb5,0xbbeba344,0xbbe4c78a,0xbbf7de34,0xbbdca7eb,0xbbd2c21f,0xbbc20933,0xbbb06c64,0xbb9e5194,0xbb82627d,0xbb8a088e,0xbb8c173f,0xbb969174, -0xbb94abe0,0xbb9d78a2,0xbb8f7b89,0xbbcd83db,0xbbf0045d,0xbc1fa06a,0xbb6a201f,0xbbb01efb,0xbbea1647,0xbbf2db58,0xbbea81e1,0xbbf33adb,0xbbf61b75,0xbc054bca,0xbc0fbc3a,0xbc008db8,0xbbd8e928,0xbc349187,0xbc1bf4bf,0xbb801781,0x3b3f878c,0x3b845fbb,0x3b8a5417,0x3b40b2a4,0x3b02b83e, -0x3a266e69,0x3aa0445d,0x3ad430e1,0x3b366ef6,0x3b13121e,0x3b14c582,0x3b6f0bd5,0x3a7185d7,0x39d07b4c,0x39c0abc2,0x3ad09433,0x3b164022,0x3b51fbf1,0x3b4650f8,0x3b488c1b,0x3b2be1f4,0x3b54ee60,0x3b537fab,0x3b6f4bdc,0x3b1aebfd,0x3b761e26,0x3bad507c,0x3bd29437,0x3bd7265e,0x3bb38ba6, -0x3bb23dae,0x3ba623ef,0x3b89bf98,0x3b8bfb89,0x3b70b294,0x3b8966d2,0x3b829cc8,0x3b3884d0,0x3b8ddc40,0x3b0824d3,0x39951049,0xbb3b79a3,0xbb3747cc,0xbab7bf31,0x3b2701f6,0x3b2974b7,0x3b3db2fb,0x3bbdae36,0xbb0461d8,0xbb9c92f9,0xbb8c14f3,0xbafa424d,0x3a674df9,0x3b707ce6,0x3b7996c4, -0x3b75cf03,0x3b2fcbaf,0x3b6f34dc,0x3b341602,0x3ae1d443,0x3b1576c6,0x3b82247a,0x3bd6f702,0x3c1a36cc,0x3c228882,0x3be5c5a2,0x3bd8eb29,0x3bb1d8dd,0x3b5a095a,0x3bb1d224,0x3bc03dd2,0x3b88904d,0x3b6ab3c7,0x3bee3340,0x3c2cbc7a,0x3baf162e,0xba4da5f8,0xbbe8404b,0xbbc3424f,0xbb7833aa, -0x3b77d60b,0x3af04edc,0x3ac2590d,0x3c038980,0xbbe69d44,0xbc228fca,0xbc14cbc4,0xbb5e1ac2,0x3a228c8f,0x3bb05eb0,0x3ba09340,0x3b98a606,0x3b452ec8,0x3b871416,0x3b590cbb,0x3a2d0ef9,0x3ae86827,0x3bc2b5c2,0x3c23ff68,0x3c8af18e,0x3c940c5c,0x3c46438d,0x3c44de19,0x3c2011fc,0x3bb4afe5, -0x3c0bef80,0x3bdfeedc,0x3b920968,0x3bc5d545,0xb7de5d25,0x3bf34223,0x3b315beb,0xbb690361,0xbc6ccf65,0xbc985e04,0xbc569778,0x3b3c5654,0x3b7da318,0x3bb8230b,0x3c849d42,0xbc01693c,0xbca75a81,0xbcabb8d6,0xbc6851b8,0xbb711c1c,0x3b9de5e8,0x3b9ba231,0x3b711419,0x3a062391,0x3b3cc288, -0x3b721863,0x3bd11787,0x3bcc3d2e,0x3bd9ce7b,0x3c04f975,0x3ca563f8,0x3cc07c6b,0x3c426cce,0x3c3b7435,0x3c1b39ba,0x3b6ffb0d,0x3c1a5eb2,0x3c2d57f7,0x3be71fe8,0x3b8ce1af,0x3cc8eb2d,0x3ce2cff1,0x3c17159e,0x3b0fa74a,0x3c0939e6,0x3cfbcb8d,0x3cfe0270,0x3ba9372b,0x3aca0ecb,0xbc5a16e6, -0xbccee522,0xbccf12fc,0xbbd03800,0x3d071308,0x3cb9ca5b,0x3c96c72c,0x3c86d2c6,0x3c5daa74,0x3c535978,0x3c42303c,0x3c37928c,0x3c2c7543,0x3c1e7de7,0x3be428f7,0x3c0d1bf9,0x3c965e43,0x3ba1b907,0x3bb5c452,0x3cba6ec8,0x3cf9ea87,0x3cc661fa,0x3bf80fb6,0x3b6635b5,0xbbd68075,0xbc87f9bd, -0x3c218c57,0xbd0e399b,0xbd4cc9c1,0x3b7a7e07,0x3c796637,0xbc228081,0xbb99f977,0xbbb72c31,0xbc54a13f,0x3c0d8981,0x3c8b46d4,0x3c36631b,0x3ba14c03,0x3bb40773,0x3c65fe9d,0x3c97b428,0x3cae4f84,0x3cad0f92,0x3c277367,0x3bbcb6b3,0x3bdfde6e,0x3b5b19e0,0x3b6185ff,0x3bb9b5c0,0x3c5e8374, -0x3c731a96,0x3c120254,0x3c8cbbe3,0x3caa1808,0x3c92811d,0x3b965a57,0x3bbcae03,0x3c781979,0x3c368c42,0x3c5483bc,0x3c933b8d,0xbc282180,0x3c03fe14,0x3c1e7492,0x3ce0951d,0x3cd5e532,0x3c9d1e6f,0x3af7bf9d,0xbc2f304e,0xbc3a3184,0xbc1f6e3b,0xb9b75d89,0x3c69321b,0x3c125dce,0x3befc7c8, -0x3ad46545,0xbb80689b,0xbb77672a,0x3c14ff98,0xbb07235c,0xbbc5bc12,0xbb96c271,0xbbb9e739,0xbb902e0f,0xbb49a92b,0xbbba4c03,0x3ae2580c,0x3c3640ee,0x3bdc78b7,0x3ba6fcf5,0x3bb544b4,0x3bf19e56,0x3bcc76f1,0xbaa1e9a9,0x3c4f8ce9,0x3c866a05,0x3c1c1a14,0x3c0f6263,0x3b8a5688,0x3c28c689, -0x3c2c8778,0x3c47bc52,0x3c3f67cd,0x3c8766b5,0x3ca85a02,0x3cc15fb0,0x3bf17328,0xb979a43b,0x3b0afa02,0xbc1139d6,0xbc12d26a,0xbba2aea2,0xbb05351f,0x3b0491f3,0x3c318c1f,0x3c3520dc,0x3c34b60d,0x3bffb330,0x3a3975c4,0xbad53ce5,0x3b001287,0x3aaf7971,0x3ae4187a,0x3b4c600b,0x3bfb9e61, -0x3c027d59,0x3b5cc674,0x3bacedbd,0x3b5454ae,0xbbdcbd7c,0xbbc034eb,0xbb9d6d1a,0xbc15c3c7,0xbadccf05,0xbccaf91b,0xbc520cc2,0xbc5150e0,0xbbd4663f,0x3bb0ccb6,0x3a6f678a,0xbbf170c1,0xbc8fd658,0xbcb9f94a,0xbc9d72e4,0xbbf42908,0xbbebf187,0xbb312b20,0x3aa09632,0x3b7566de,0x3b4b9ae0, -0x39016ee3,0xbad74cbe,0xbac3015b,0x3b46be66,0x39a2a45a,0xb8076981,0x3a2ff509,0x3b1312d8,0xb88de2db,0xbbc74d15,0xbb5b76f9,0xbb5fde4f,0xbb625d7a,0xbbbbbab9,0xbc4fa0b7,0xbcabe92e,0xbcfbb501,0xbd156c84,0xbd06bd21,0xbcf7e1ec,0xbc93ae92,0xbc90d5b1,0xbc8e20ae,0xbcb33f30,0xbcead4d6, -0xbcd5789c,0xbcaf88c6,0xbc8d5346,0xbc57d192,0xbc380af3,0xbc164532,0xbbde91f5,0xbb7d2d68,0xb787cf35,0x3b8ca752,0x3bc75e82,0x3b2c86b4,0x3afa70b8,0x3b2a763a,0x3be6d345,0x3bee9c8e,0x3bdccdfc,0x3ba37291,0x3b9f054e,0x3a258fc7,0xbbc05b5f,0xbc854d55,0xbcaa60ca,0xbca500bf,0xbcbc5447, -0xbcd3f573,0xbceca2cd,0xbce66f4c,0xbcbd116a,0xbc728cf9,0xbc85be27,0xbcee1768,0xbcf2448f,0xbcdf02ab,0xbcdaa98e,0xbcd11f59,0xbcacb730,0xbc927c06,0xbc65d8bc,0xbc3ca403,0xbc048bcd,0xbba1ecb2,0x3ad7b8a5,0x3bef956a,0x3c5336ca,0x3c28b63a,0x3c144ce6,0x3c06214d,0x3c0ace2d,0x3c05810c, -0x3c09f547,0x3bf21154,0x3bc98749,0x3bad8574,0x3b40580c,0x3b1c4dc4,0x3af59d7d,0xb9c28e52,0xbbee3587,0xbc1ca9c8,0xbc330afd,0xbc0f6389,0xbc0eb8a5,0xbc65d4f2,0xbca2f38b,0xbcca306b,0xbcdac589,0xbc8d6edc,0xbca4cb96,0xbc8e4e04,0xbc714f3e,0xbc42550c,0xbc1bdf41,0xbbda222a,0xbb5e12f5, -0xbad312bd,0x395d79fe,0x3ae38397,0x3b4802e9,0x3b899c0f,0x3bdabe42,0x3bba2a30,0x3baf88e8,0x3b97e579,0x3b8b976b,0x3b8a5519,0x3b6faecd,0xb78ff27e,0x3a47633d,0x39e81494,0x399bc5fd,0xb9f73fc7,0xba725dc2,0xbb638f68,0xbb96742d,0xbbb75bfe,0xbbf7c634,0xbc1b84a5,0xbc23da7e,0xbc41faad, -0xbc493554,0xbc61e82d,0xbc80cab4,0xbba95253,0xbbed485f,0xbbb50758,0xbb9a0dec,0xbb7a9deb,0xbb3e4b91,0xbb0d5102,0xbab97220,0xba5cd539,0xb8a6ac66,0x3a470ae6,0x3ad0afa7,0x3b189c20,0x3b502825,0x3b3826ab,0x3b365e67,0x3b31c518,0x3b231ed4,0x3b0b30cf,0x3b2168e7,0x3abbdef0,0x3aa94f6b, -0x3a60b1c5,0x3a3e9362,0x3a4373ab,0x3b0c4d5b,0x3add2c9c,0x3aaf1d6a,0x39ff0cec,0xb7c1d38b,0xba70f1d5,0xbb00b153,0xbb5ecf32,0xbb966021,0xbb72d19a,0xbb9c4e42,0x3a20dab3,0xb8f7be4b,0x3b0b9179,0x3b26da79,0x39984b7b,0xba787559,0xbaed5f56,0xbafc4d02,0xbac70b0d,0x39bcfca1,0xba3260f2, -0xba5ed96b,0xb8bcb007,0xbb0dd5fb,0xbb3c9509,0xbb717039,0xbb1ba2b7,0xbab1d4a2,0x3938d10b,0x3a3c368e,0x3a7f3a8b,0x39953731,0x39dff24d,0x3984ef7d,0x3718916a,0xba0dd072,0x3a486af4,0x3b4dab5f,0x3b69677f,0x3b749fb3,0x3b3d170b,0x3b46fd71,0x3b3419f5,0x3ab7daf2,0x3b00ec23,0x3ab0881a, -0x3ada4ba9,0x3b0546ea,0x3b38a6af,0x3b87993c,0xb9c04654,0xbb35960d,0xbb9b8cae,0xbbc62c8b,0xbb9fcc28,0x38959db3,0xba8f223d,0xba86a9df,0x39bcfa24,0xbb9ad9a5,0xbc000da3,0xbc1da75c,0xbc00402f,0xbb9adae4,0xb9568d29,0x3b14b872,0x3b3dbcc5,0x3a7addf0,0x3a54b9af,0xbaa82ec4,0xbb3c9de8, -0xbac3121a,0x3a71f705,0x3bb0221e,0x3bd1888d,0x3be07459,0x3baaedf0,0x3b9f0915,0x3b73d851,0x3a5473a5,0x3b96786c,0x3ba5fc7c,0x3ad36550,0x3b1a81a1,0x3c24d5b8,0x3c68e073,0x3b26903d,0xbb92f413,0xbbfc8009,0xbc2b6f53,0xbc0f4b71,0x3b141bb7,0xbb24a1c5,0xbb488b31,0xb9fb13d8,0xbc2d0aa9, -0xbc72ad17,0xbc940fe0,0xbc571595,0xbbf0a3b4,0x3a62ac57,0x3ba2810a,0x3bca7e3f,0x3b318f31,0x3abe325d,0xba921730,0xbba761b6,0xbb26389d,0x3b2f27c2,0x3c214617,0x3c649cdc,0x3c75b6fe,0x3c37e90b,0x3c3a94ee,0x3c2000cd,0x3b45c280,0x3c1419c8,0x3bfb8398,0x3b5cfd64,0x3bf861b0,0x3bb5a9fd, -0x3c6764d7,0x3abbfe04,0xbbc91228,0xbc4271b4,0xbca97bd8,0xbc88a4e4,0x3b044f5c,0xbaeff09d,0xba807a19,0x3baa1254,0xbc14a542,0xbcb71491,0xbcefe42b,0xbcd71411,0xbc7b656d,0xba844847,0x3be28ee3,0x3c0bcd2b,0x3b15ffe0,0x3a43be3c,0xbb5a84da,0xbbbef077,0xb8dc6ca3,0x3bbdee05,0x3c5b2864, -0x3cc0a4a7,0x3cd40de1,0x3c6b9b6e,0x3c4dd0fe,0x3c37082a,0x3b9202db,0x3c70f148,0x3c86e087,0x3bae088a,0x3bb1fe74,0x3d22c310,0x3cfa647b,0x3bbc0e9a,0xbb998840,0xbc279c18,0x3ca2541f,0x3cad5707,0xbc1b7751,0x3b47b010,0xbc3bed39,0xbd13b9ea,0xbd0d6fd1,0xbca12f28,0x3c2b9854,0x3c7b168f, -0x3c84f487,0x3c5600ab,0x3c39c38f,0x3c2d7eb8,0x3c4330e5,0x3c7fd182,0x3c71bdf8,0x3c49dbb3,0x3be2c98c,0x3b92b3e2,0x3c46b7fa,0x3b0b77d2,0x3c1c85a0,0x3d106a12,0x3cc74d6b,0x3c4fcde5,0x3be0d4a6,0xbbe6855a,0xbc56fb0d,0xbb3db9ea,0x3ce2e5c8,0xbd90ccaa,0xbd064f02,0xbb512384,0x3c3fbb36, -0x3a4eaffe,0x3c17c8d9,0x3b5c4d71,0xbc85529b,0xbc3c823e,0xbac1a861,0x3cab4742,0x3bb6d969,0x3acdd4ae,0x3bccddf2,0x3c6c082c,0x3c9b75c4,0x3c84da64,0x3bb4fcc3,0x3a60128c,0x3bae10f5,0x3b19f231,0x3b20b188,0x3ba110b7,0x3bac6a40,0x3c086500,0x3be8f492,0x3ca13c9c,0x3cb47392,0x3c5304c5, -0x3bcc3526,0x3c022c14,0x3c5fd404,0x3c2b2c87,0x3c8bb35e,0x3d16750b,0xbd413dbd,0x3d20ae67,0x3d2c5ac7,0x3d1e441a,0x3cf38a13,0x3ca7e75f,0x3c36f29e,0xbb76cffa,0xbc4e279d,0xbcc0d3f5,0xbc93fc02,0x3bf89ad3,0x3a1b5190,0x3be6124c,0x3c159384,0x3bdbe62d,0x3adec1f3,0xb98a040d,0xbb84e6f8, -0xbbcbb6e0,0xbb663d46,0xbb3e494f,0xba8f44b4,0x3aaaa6c4,0xbb336507,0x3b72ded2,0x3c28a55b,0x3bcf31fa,0x3ba790a9,0x3b8e1cea,0x3c1947d9,0x3c085429,0x3af8cb8b,0x3c585feb,0x3c7aa3e5,0x3c8e0985,0x3d0213f6,0xbc641f60,0xbc28372c,0xba6119f3,0x3c0201e9,0x3c4da2ed,0x3ccecf46,0x3d051eac, -0x3d1a9d53,0x3c950492,0x3c09c782,0x3c89b2c7,0xbb8490f5,0xbc20b949,0xbbbb9489,0x3b527bce,0x3be24584,0x3c1d1e08,0x3c2384b8,0x3c0cc372,0x3bdfe49e,0x3a889ccb,0xba92dd10,0x3941f6b7,0xbb0c660a,0xbad9be81,0xba0bfc80,0x3bd78685,0x3c1ba3f7,0x3baa456a,0x3bd3fd12,0x3b6fd128,0xbb49674b, -0xbb8ab22c,0xbb0f88ae,0xbc031a55,0xbc3daaf6,0xbc6bb63f,0xbbd24254,0xbb80d521,0xbaedd380,0x3a482c58,0xbb596eb0,0xbc4d6cce,0xbcd5f9ef,0xbc82778e,0xbc26a044,0xbb8cd998,0xb939a203,0x3b0038e9,0x3b55d8d4,0x3a5c8b74,0xb93526ed,0xbab6a271,0xb886a589,0x3aaf8472,0x3b11170e,0x3a26a074, -0x398e7464,0x39ffad4e,0x3991a1a0,0xbad13cf5,0xbc18aeb0,0xbbd3aadd,0xbbf006f2,0xbc0529f3,0xbbf6c49d,0xbc304ce8,0xbc6786aa,0xbc91153c,0xbca824f5,0xbc9d2cc3,0xbc8ec343,0xbc3d2ca3,0xbc32692c,0xbc22f071,0xbc276c15,0xbc0d970c,0xbc0e6fda,0xbbc28ed1,0xbb91c139,0xbb579816,0xbb9c3091, -0xbbcbb097,0xbb4f9109,0xb885b84b,0x3b956f84,0x3b21e0c9,0x39b7ffd8,0xbb32f7fe,0xb9b928c3,0x3a9ea05f,0x3b677610,0x3b8a918a,0x3b9e76e4,0x3bdb64cd,0x3a9cfab7,0xbb9da20e,0xbc53dcc6,0xbc8e3f98,0xbca050bb,0xbca3a017,0xbcbd1913,0xbce2354e,0xbd047890,0xbd0904b4,0xbcfcbfc0,0xbcdb9371, -0xbc7d06f6,0xbc6faf14,0xbc63c2fa,0xbc633c62,0xbc8116d8,0xbc8ccd7b,0xbc91ab9f,0xbc9b6a6c,0xbc9f8e97,0xbc8007cd,0xbc31a245,0xbbd451fa,0xbb3d8146,0x3a21d071,0x3bb035e4,0x3b5bd844,0x3b21c08d,0x3a983f07,0x3b3f5ff4,0x3b825dac,0x3bbc28c5,0x3bcb8c12,0x3be7633e,0x3c1005ef,0x3a4a9065, -0xbb899a5a,0xbc42c3ff,0xbc571ee6,0xbc9b6c18,0xbcb1e842,0xbc9d4e43,0xbc72d9df,0xbc3f807a,0xbc3df9ba,0xbc324a13,0xbc2ce905,0xbc4dcd4a,0xbcacd54a,0xbc9f176c,0xbc86e43d,0xbc6097a2,0xbc2ea941,0xbbf66057,0xbb859942,0xbaa530fa,0xb96f6c10,0x391ce1a3,0x3a5c9897,0x3ae88d18,0x3b34bfec, -0x3b926831,0x3b95a9cc,0x3ba914c0,0x3bad68d4,0x3bb365bc,0x3bade3be,0x3bbeb837,0x3baaa840,0x3a88ba35,0xba917968,0xbb60e55c,0xbba27eb5,0xbbfa7f59,0xbc13f747,0xbc2723a3,0xbc372bbc,0xbc5bdd04,0xbc82ee62,0xbc92b49f,0xbc99c7e5,0xbc9e157d,0xbca32791,0xbca1be27,0xbc067c6c,0xbc1077b7, -0xbc002635,0xbbe42016,0xbbca77fd,0xbbb6cb99,0xbba4f3aa,0xbb850d2f,0xbb7e1d94,0xbb54028e,0xbb2d3d1c,0xbb068f5a,0xbacbc7df,0xba89363b,0xba953291,0xba90559f,0xba7fd339,0xba746f14,0xba58758e,0xba62b845,0xba396520,0xba864f68,0xba6e5c66,0xbb53d2af,0xbb5077ae,0xbb34a1bc,0xbb52a707, -0xbb74f585,0xbb9258c1,0xbba5e1bb,0xbbb894e0,0xbbd16d42,0xbbedcf31,0xbbfe4cab,0xbbf4b7e1,0xbc03bd6f,0xbb8094b5,0xbb0c8dc3,0xb84e86ea,0x399c9e1d,0xbaebe789,0xbb3be712,0xbb503769,0xbb779738,0xbb5f0316,0xbaa5eb5b,0xbb1f70dc,0xbb2787e3,0xbb139ea2,0xbb3d8e08,0xbb5fc5f2,0xbb9c0425, -0xbb865d81,0xbb642dcd,0xbb1d7aaf,0xbab05058,0xba7fb3fc,0xbab348cd,0xbaeedbef,0xbb0c7041,0xbb1dda83,0xbb2d4b5f,0xbae3f46b,0x3a34ebcc,0x39aee146,0x3a161320,0x39c199c0,0x3a4326da,0x39f9e7be,0xbab2e046,0xb9659426,0xba44355c,0xbab5b146,0xb95bc388,0x3aa42b9c,0x3acb3eab,0xbb3257b2, -0xbb9ce2b1,0xbbb4a5ba,0xbbf21fc2,0xbbd236c8,0xbab18ec4,0xbb519d69,0xbb2efa96,0xbae533b6,0xbb20c43c,0xbba1707b,0xbc14bc35,0xbc11132f,0xbbf1b3fc,0xbb88b6f9,0xba0b16eb,0x3a255ea9,0xba5330e1,0xbb04cc7e,0xbb839f24,0xbb9f1986,0xbb89d7d4,0xbaffa6ef,0x3b76f70b,0x3b29afc9,0x3b4c3375, -0x3b645ade,0x3b50dc7b,0x3b1c0d55,0xbaaee39f,0x3b4cdf92,0x3b324243,0xbb371bf5,0xb90a8000,0x3bff3a52,0x3c24ac60,0xbad12e87,0xbbea74bb,0xbbe9fee6,0xbc46b800,0xbc2bfb43,0x3a83e441,0xbb930a7e,0xbb7c414a,0xbb4dfe3d,0xbbb22858,0xbc13e5c1,0xbc8404b1,0xbc6f444c,0xbc364200,0xbb9ec226, -0x3ae9f2a4,0x3b85d5f7,0x3aba9461,0xbada7711,0xbb98d6bc,0xbbd5b277,0xbbbecbf3,0xbac1b20b,0x3c0742bb,0x3bf9ef38,0x3c123ae1,0x3c123e88,0x3c2bcdeb,0x3c144035,0xb9808a6e,0x3bedb3b9,0x3bbc4590,0xbad73778,0x3bad7482,0x3b9eaf66,0x3c1667b4,0xbb5cdeff,0xbc02c4af,0xbc12e50b,0xbc94aba0, -0xbc82492a,0x3aa62a63,0xbb9829b0,0xbb1784ec,0x3b329d1f,0x3ac79410,0xbc0fefe2,0xbcba63f2,0xbccc057b,0xbca42057,0xbc18c298,0x3b36ff05,0x3bdbd86c,0x3ad41187,0xbb5752be,0xbc01e263,0xbc1b0717,0xbbc0ad59,0x3add5715,0x3c68d8e4,0x3cabd136,0x3cbce668,0x3c635145,0x3c5e089d,0x3c4ea83e, -0x3b9309b0,0x3c8d831e,0x3c8559e8,0xbb343add,0x3a976e6d,0x3d330e38,0x3cd7d093,0x3b66107c,0xbc460d67,0xbcd0fba2,0x3b18c090,0x3bff41e4,0xbc5db6b3,0x3b52d2ce,0xbbcdbb7b,0xbcfc891c,0xbcfc3798,0xbcbc0b59,0xbc12b113,0x3bd8783d,0x3c448592,0x3bef2b8c,0x3c1053dd,0x3c19b7d4,0x3c307ed7, -0x3c58aecf,0x3c3cec45,0x3c0500eb,0x3bcb0404,0x3b1f9da0,0x3bba740b,0xba12b170,0x3c24f74a,0x3d196b51,0x3c802442,0x3b3baeeb,0xb9ebc8c8,0xbca7158c,0xbc9e2269,0x3bdc0078,0x3d179e4d,0xbd8ec1e3,0xbd063134,0xbcb65775,0x3a054a6b,0x3c868d3a,0x3c631c16,0x3ba2dfb7,0xbc50c9db,0xbca864ad, -0xbc42b540,0x3cc2e25a,0x3bb0dae8,0xb94b5c80,0x3b79bcb3,0x3c1ab747,0x3c3fc1df,0x3bacaa0e,0x3a8e22c3,0xbac9d972,0x3aa2a35e,0x3b844dd8,0x3bbb81ad,0x3bc408f0,0x3b0322ad,0x3baed70c,0x3c0e8e20,0x3c9af4e6,0x3c974939,0x3bf217d6,0x3bcafe9e,0x3be39809,0x3c27283a,0x3c8ea9ae,0x3caf557a, -0x3cb947be,0xbd534f08,0x3d5424ec,0x3d532e34,0x3d1af94e,0x3cd38ca9,0x3c402f84,0x3d0306d5,0x3cb78f2a,0xbc9c0ed9,0xbc90973b,0xbc93872a,0xbbf63d1f,0x3a6a4ef3,0x3c3e803d,0x3c8fd0ed,0x3c7fbd80,0x3c0fbbd2,0xbb7f1c41,0xbb431ab1,0xbb71fb84,0xbbb05786,0xbb843318,0xba74c510,0x3ab816a9, -0x3ada3be6,0x3bb7eb19,0x3bd95359,0x3b7b3b79,0x3b69be37,0x3b8045cc,0x3c2b9943,0x3c4e8c5b,0x3c5957b6,0x3c2b2af5,0x3bd2f9c2,0x3c7a9c4c,0x3d2482e2,0xbcd6502b,0xbca2e9d3,0xbc5dc29b,0xbad6ca1b,0x3c11b091,0x3c8b3890,0x3cba9447,0x3ca07a89,0x3cdbf474,0x3cba38c6,0x3c91a167,0x3bf62ddc, -0x37e0327b,0x3a52a74c,0x3bc58f41,0x3c12aa90,0x3bded9b5,0x3b9d58fb,0x3ae4b939,0x3b09052f,0x3ac3d148,0xba364c3b,0xbb9964bf,0xbba91a1a,0xbb66cdd7,0xbb15e64a,0x3a6b716b,0x3b772546,0x3b442217,0x3ae66a20,0xb98c72e2,0x39b1543a,0xbb338a48,0xb9de7b69,0xbb0d693c,0xbc8f72dc,0x3a0b18a3, -0x3c143faa,0x3ad4fe76,0xbb3e56eb,0xbac09634,0xbb8ab591,0xbb9d5c27,0xbbdfceeb,0xbb61328d,0xbb7b5137,0xbbb87378,0x3998cf9a,0x3b3efc77,0x3b1e9cbe,0x3b0aef1f,0x3b2f6752,0x3b570c5d,0x3bb463d6,0x3ba4103a,0x3ac19578,0x3992ea18,0x3989eeb6,0x3b57d23e,0xbb1cdc5e,0xbbae3abc,0xbbf0269b, -0xbc1f51c2,0xbc22863f,0xbbf6a1e0,0xbb986a5d,0xbb8f68fc,0xbb81f379,0xbb5069a4,0xbb93ecb6,0xbbb685da,0xbadedcf2,0xbc4f8485,0xbc073181,0xbb92d55a,0xbad3e55b,0x38c4ea9a,0x399e48a3,0x3a905a8b,0x3b08bdde,0xbb3ab7a5,0xbb39b56b,0x391a37d3,0x3b220ac3,0x3b911282,0x3bd00532,0x39c382f9, -0xba9ded63,0xb9d37707,0x3ab9cb30,0x3b464397,0x3b637be6,0x3ba20e3a,0x3b6e87d2,0x3b182368,0xbba92bb1,0xbc1f2f24,0xbc68b1c5,0xbc6d05d1,0xbc86506b,0xbca0c140,0xbcb9f8ef,0xbcda09ee,0xbcf406d7,0xbd09e6da,0xbd07bd3c,0xbcf4bc44,0xbc9893dd,0xbbc41d5f,0xbb83235a,0xbb8f80e5,0xbbb88a74, -0xbbc9ae93,0xbbfa5a20,0xbc1e7712,0xbc398828,0xbc0b8b0f,0xbbc1c506,0xbb609ca2,0xbb7a6553,0xbb84126f,0xbb6709fb,0xbaff2bd1,0xb9b9691c,0x3a2a36b3,0x3adbcfb6,0x3b2edfe6,0x3b8cf113,0x3b61b752,0x3b4a444e,0x3b7d4ac9,0xbb8da9b4,0xbc3cedc5,0xbca87556,0xbcaec18e,0xbcbae7d4,0xbcc82158, -0xbcb57682,0xbca8c1af,0xbc9c5867,0xbc676e6c,0xbc169edb,0xbba2a3aa,0xbbbb6af1,0xbc5810f9,0xbc23d03c,0xbc1a522a,0xbc101e99,0xbc04a882,0xbbe9f98a,0xbbbe4dac,0xbbae4d6c,0xbb9bc066,0xbba087ee,0xbb9e0bcd,0xbb9101b5,0xbb787ed8,0xbb679848,0xbb737585,0xbb853859,0xbb8bcfa2,0xbb8f1114, -0xbb9a6cdd,0xbb9a13d4,0xbb886f2a,0xbbd47c1e,0xbbf26a63,0xbc04f074,0xbbff11cc,0xbc0d5dec,0xbc0b2c12,0xbc146d92,0xbc1d7b2e,0xbc2c2d8f,0xbc370658,0xbc57b547,0xbc503adf,0xbc60020a,0xbc637689,0xbc4aac74,0xbc032060,0xbc01aa02,0xbc0386c8,0xbbfc7ae6,0xbbf74dd2,0xbbf5c74d,0xbbf58bdd, -0xbbec9de6,0xbbecc23e,0xbbe4334d,0xbbda45ac,0xbbd17674,0xbbcaba7a,0xbbbdde07,0xbbc254c4,0xbbc18fd8,0xbbc1647f,0xbbc28408,0xbbc00f47,0xbbc94cb2,0xbbbc5631,0xbbbc0793,0xbbacd8c2,0xbbee47c4,0xbbe79efa,0xbbdf6c08,0xbbebf8ec,0xbbf614ae,0xbbfaca4a,0xbc02cd15,0xbc05cc65,0xbc05475d, -0xbc00f702,0xbc00a428,0xbc02f112,0xbc028d7b,0xbc0eea5f,0xbb22abf2,0xba7cefdc,0xba8ed250,0xbb1cfecf,0xbb49b27d,0xbb4e0b47,0xbb73575f,0xbb5eaed1,0xbaed6233,0xbb282885,0xbb22f69d,0xbb0bd75c,0xbaed0b55,0xbb0f270a,0xbb7c865e,0xbb7db7e5,0xbb77ce2e,0xbb4d0fd3,0xbb1a0567,0xbb02dbba, -0xbae33976,0xbb26ebf1,0xbb4150a5,0xbb65033e,0xbb4c66be,0xbb25a1c2,0xb9c5a192,0xbad2d190,0xbab387b4,0xb9f1f8ba,0xb9e3001a,0xba3fcec1,0xbb1bc362,0xbaa8a667,0xbac358ec,0xbb4e290f,0xba96d039,0xb989d9f4,0xba7f941c,0xbb5d2401,0xbb9a5719,0xbb9be811,0xbbcad010,0xbbc05005,0xbb2896eb, -0xbb7a7274,0xbb1daed9,0xba4b3117,0x3abd486a,0xb9d1f310,0xbbc76d91,0xbbf29f6f,0xbbf96dc0,0xbbb42bca,0xbb4caaa3,0xbae1e098,0xbaadc41a,0xbb489ff1,0xbb94f242,0xbbbb29fa,0xbba0b67a,0xbb44c619,0x3b431ba6,0x38298d3d,0x3a31ee46,0x3b60688c,0x3b265db6,0x3b07d787,0xba753ffc,0x3b014c7a, -0x3a28bb3a,0xbbaf6423,0xbab290a7,0x3ba71d2b,0x3b767be7,0xbb61791d,0xbbea9d2c,0xbbc9a614,0xbc2662e1,0xbc12a1e0,0xba86210c,0xbb8c1b9e,0xbb0a211f,0xba2e27cb,0x3b15e33f,0xba3237b1,0xbc2c91d0,0xbc429e7b,0xbc3f9e78,0xbbeee705,0xbb3d4992,0xb982a48b,0x39c7f846,0xbb4521a6,0xbbb7cd15, -0xbbee0922,0xbbd608e9,0xbb6b051c,0x3c0222b7,0x3b12929e,0x3b88cf2d,0x3c11ce50,0x3c1f9df7,0x3c046295,0xba474980,0x3b94f3f6,0x3b487688,0xbbbb4871,0x3b7bc0c5,0x3b1a4775,0x3af799a7,0xbbab27cf,0xbbf65b14,0xbbd696cd,0xbc44ef33,0xbc52c474,0xbb6ff500,0xbbd04430,0xba6cbfd4,0x3bbb6d16, -0x3c63a34d,0x3bc9d029,0xbc5a42a2,0xbc9be363,0xbca388de,0xbc549693,0xbb93a9a2,0x3a211d8d,0x3aead02e,0xbb82debc,0xbbfa259d,0xbc19006b,0xbc0b3bbb,0xbb1f11ae,0x3c64252e,0x3c694506,0x3c82fc42,0x3c6db8f7,0x3c813b8a,0x3c6eb061,0x3bc4fa75,0x3c88c88f,0x3c348f5d,0xbc30e81f,0xbb177f79, -0x3d1bb376,0x3c7eb9c7,0x394e13bf,0xbc6ee2dd,0xbcd35423,0xbc2d9a78,0xb9426f71,0xbb0225fe,0x3bccf886,0x39a4d0cc,0xbc8f3a5d,0xbcd2d325,0xbcbbc9cd,0xbc745eaa,0xb688d50c,0x3bd75365,0x3b8684f4,0x3b857fa0,0x3b8fdc8a,0x3c005f9f,0x3bf3eeef,0x3bacf36f,0x3b04ab0d,0x3bd85303,0x3b490417, -0xb9d03563,0x3a1324aa,0x3c1b1f5e,0x3ccf5b66,0x3c0becda,0xbaf5aee0,0xbc283eff,0xbce0244f,0xbc9650eb,0x3c670a62,0x3d19dce2,0xbd6aa958,0xbd08185b,0xbce09786,0xbb0a2e3a,0x3d0a7445,0x3c708858,0x3b254ede,0xba95d9d2,0xbc956755,0xbc4753e8,0x3cad9296,0x3bb13ca4,0xb9b5ebb4,0x3b03c2f4, -0x3b40190d,0x3b3a1b88,0xbb1a6e92,0xb9ed8426,0xb9196fcc,0x3a4c9e48,0x3b69d70e,0x3bcff4db,0x3bac90d9,0x3ac7bc52,0x3ba9008f,0x3c321331,0x3c73881d,0x3c438127,0x3b2b7a29,0x3af1c404,0x3b90b1ce,0x3c6f09f9,0x3cde4f49,0x3ca7917f,0xbc2847f6,0xbd448e98,0x3d2aa723,0x3d41aadf,0x3ccd772b, -0x3b993da5,0xbc3b894f,0x3c8dcc97,0x3cc205e9,0xbaa1a626,0x399b4d11,0xbbea2630,0xbc668b76,0x3b7a1e40,0x3c756f19,0x3c99294c,0x3c8b637d,0x3c372625,0xbaaa4dce,0xbb1ff6ee,0xbb2ca9d4,0xbb56730c,0xbb76b1a3,0xbab49eeb,0x39b2e180,0x3bbf1c25,0x3be2af41,0x3af37d5b,0x3a96173a,0x3adaf2cb, -0x3b10910b,0x3c38fe38,0x3c70ca24,0x3c935715,0xbaa8b5bd,0xbc20dcc7,0x3b8c9d99,0x3cf7e6e5,0xbccdd9a1,0xbcc16fc8,0xbc9b5d8c,0xbc0204b1,0x3b048157,0x39eaf3be,0x39d050df,0xb984391e,0x3cc10c8d,0x3ce9d6ee,0x3c8b0c64,0x3c8a5fad,0x3c3ec27a,0x3c196d12,0x3ba307db,0x3bb71179,0x3b5bd71d, -0x3a48a20b,0xbb2e6d3a,0xbb9e07cc,0xbafdb600,0xbb2ec1f6,0xbbf4e5e3,0xbc07018d,0xbbc301c1,0xbb13e43a,0xbb93de7d,0xbb4a551b,0xba1a9cea,0xbb1a8820,0xbb14be20,0x3ab0f36f,0xb6d3b1f9,0x3a0687f5,0xbad3e117,0xbc8d595f,0x3c44c504,0x3c9aa0b8,0x3c87c524,0x3c4ce62c,0x3c1d4012,0x3bd259b8, -0x3c2a4d3a,0x3c91b0c8,0x3bf20d18,0x39788988,0xbbe2822b,0xbb899ecd,0xbb03ca34,0xba01a87e,0x3adcdeac,0x3b6160ee,0x3ba5736c,0x3bc4f40c,0x3bac35da,0x3ade3508,0x3ad5cb2f,0x3a18e19c,0x3a900319,0xbb5f6c11,0xbbdaa304,0xbbd4fad3,0xbc123eae,0xbbd5015a,0xb9fef3ef,0xb9e1acde,0x39f2f891, -0x3b311d27,0x3b9b03e2,0x3bd1b7c6,0x3bf893ab,0x3c184596,0xbc9dcf1c,0xbc3f0de7,0xbc25463e,0xbbe03fac,0xbbbd594e,0xbad0b0f4,0xba0dfe02,0x3890645d,0x3a418e02,0x3b4c03d0,0x3b8b5ef7,0x3bc8fa52,0x3baef64d,0x3b86b476,0x3aa86b71,0x3a42c3dc,0x3ba266f5,0x3b889531,0x3b934f85,0x3b8f355e, -0x3bb4c1e2,0x3b0acea5,0xbba25c72,0xbc19f6c3,0xbc3146aa,0xbc2a94d9,0xbc2e73f6,0xbc55ffa8,0xbc86510d,0xbca0cee6,0xbcb3d15b,0xbcb414ac,0xbcf48340,0xbd03da4d,0xbcfb8c3d,0xbccf608e,0xbb1ed68b,0x39bcf784,0x39dae0a1,0x3a9b088a,0x3b0fcfc1,0x3ae07369,0x3ad2a805,0x3a9e8d58,0x3aca2b75, -0x3abf0c1e,0x3b02e464,0x3a6c701a,0x38753a38,0xba465c1b,0x3aa4afec,0x3b35b49a,0x3b853404,0x3b84e1dc,0x3b9c626a,0x3ba8f979,0x3a97c717,0xba86f57c,0xbb41a1dd,0xbbde06fd,0xbc47755f,0xbc8b69ff,0xbca024ec,0xbca10c64,0xbcb6384d,0xbca8516c,0xbcabc25e,0xbcaa5119,0xbc7ccad8,0xbc2c1ac0, -0xbbd98fd0,0xbb9e6d84,0xbbf86341,0xbbc7f62b,0xbbcba560,0xbbd03fd1,0xbbd393dc,0xbbd253f5,0xbbcf2443,0xbbceae8b,0xbbb55f1d,0xbba04089,0xbb8ed6e8,0xbb7773a4,0xbb42a9bf,0xbb2623f5,0xbb3b3c18,0xbb574674,0xbb65b6c4,0xbb69b7b7,0xbb79495b,0xbb669bf7,0xbbb5525d,0xbbb581e9,0xbbd71bed, -0xbbeb80f8,0xbbe46f42,0xbbdd582a,0xbbc0d591,0xbbb95d8e,0xbbbda90d,0xbbb64531,0xbbb2594e,0xbbc2d395,0xbbcd438e,0xbbed914b,0xbbf019e5,0xbbddf20e,0xbbc6a2a8,0xbb9ab6c8,0xbbaa65a6,0xbbacbeae,0xbbb23b8a,0xbbb6884e,0xbbbb79dd,0xbbc3d5f2,0xbbbc6c42,0xbbb77e54,0xbbb0b296,0xbba8e75c, -0xbba425f4,0xbb987439,0xbb9e4c7e,0xbb9e7e47,0xbba0001b,0xbba0fe19,0xbba3f0fd,0xbb9b887e,0xbbc67a38,0xbbde3c3e,0xbc012247,0xbbd51b8e,0xbbfdcb3b,0xbc161080,0xbc133ab3,0xbc11715b,0xbc0a183a,0xbc090444,0xbc04c68e,0xbbfd2413,0xbbe23d5c,0xbbbf853d,0xbbf7f6df,0xbbd94063,0xbbe1e8bf, -0xbaf84b17,0xba702d5e,0xbaa6350f,0xbafc28d5,0xbb17192d,0xbb17cb53,0xbb3878ae,0xbb2e9b61,0xbb067d57,0xbaf2f1fa,0xbac3e213,0xba8457bc,0xba17fe27,0xba75d13d,0xbb1daf39,0xbb3d9200,0xbb4c535c,0xbb3c0a90,0xbb1be0fd,0xbb088b40,0xbacfe6b3,0xbb1f6548,0xbb37a65d,0xbb673506,0xbb25b8bb, -0xbb06636a,0xb9cae2dc,0xbaedebfe,0xbac8e876,0x394efc03,0xb9e814ff,0xba4af879,0xbad69a9f,0xba98da2a,0xba8cbd12,0xbb355126,0xba810bfe,0xb9878f36,0xbaa33960,0xbb1570b6,0xbb4f9dfd,0xbb45b571,0xbb908e78,0xbb9dbeb1,0xbb709f43,0xbb4ed796,0xba92c9fa,0x3a892c72,0x3b626b98,0x3b125744, -0xbb338dea,0xbbac089a,0xbbd7a8f5,0xbbb8f550,0xbb92c10c,0xbb58be2b,0xbaff4e23,0xbb5e7a0b,0xbb952ad1,0xbbc90d06,0xbb87ef97,0xbb1fb085,0x3b0f6bf0,0xba1c5b34,0x390b674e,0x3b8ba163,0x3b1c822c,0x3b08a130,0x3a6f73ae,0x3adee32a,0x397bb802,0xbb85e063,0xba1f5440,0x3b58e786,0x39d9015a, -0xbb1bf3f7,0xbb9d3730,0xbb87403c,0xbbfd7b93,0xbbee0604,0xbb8d60bc,0xbb337878,0x3a5d707e,0x3b2d0bf5,0x3bd4ef7c,0x3b856099,0xbbaa74fd,0xbc0899d5,0xbc293ffb,0xbc070cee,0xbbc46b2c,0xbb81377b,0xba9e0f07,0xbb8c8939,0xbbd06c3e,0xbc0beecd,0xbbb024b4,0xbb5559d2,0x3bea3feb,0x39bc69ec, -0x3b339331,0x3c33d611,0x3c0eee83,0x3be8446b,0x3abb467a,0x3b57e12e,0x3b1cc813,0xbba2f117,0x3b6e30d5,0x3b3bde1a,0xb978d7ac,0xbb101e3c,0xbb76ca6b,0xbb399a6a,0xbbea337b,0xbc34d0af,0xbc19bc50,0xbbc2362d,0x3ac22436,0x3c0a91c2,0x3c9482bf,0x3c656ec7,0xbb826b88,0xbc4d25e4,0xbc8d6786, -0xbc72bfd6,0xbc2f5350,0xbbc9ddf4,0xba58e321,0xbb930486,0xbbf63974,0xbc1fd558,0xbc04878c,0xbb798686,0x3c5a9412,0x3c0d484e,0x3c27775d,0x3c91cb26,0x3c94a649,0x3c7e7974,0x3c12672b,0x3c6a3279,0x3bd867b6,0xbc31d88f,0xba614399,0x3cc18d93,0x3b449bab,0xbb4f7c5b,0xbc578426,0xbca31990, -0xbc8e159f,0xbb85a2ad,0x3c25f15d,0x3c1963b3,0x3beb4ded,0x3a1e909b,0xbca5c6da,0xbcb8f095,0xbc683cc1,0xbb81cf19,0x3b0ab867,0x3b4f31bc,0x3b00a97e,0x3a1e1796,0x3add8f1d,0x39b9888a,0xb9a08ae4,0xbb113884,0x3be44b14,0x3b97f56d,0xbba010ef,0x3bb01cb2,0x3c34538a,0x3c1abfd3,0x3b8f645d, -0xbb594456,0xbc71f392,0xbcc5003a,0xbc2b67c3,0x3c993e72,0x3cf64da2,0xbd20d95c,0xbc978f8e,0xbcb4c29d,0x39b9d271,0x3d3eb787,0x3c9e7d06,0x3bb00b47,0x3c2ef73c,0xbc594050,0xbc3a94d3,0x3c2aa0a7,0x3c028cd2,0x3b8c4701,0xbaece084,0xbb661d1f,0xbba217e7,0xbba5c135,0xbb1e3c3f,0xbab9e017, -0xb7d130f2,0xb9863dcf,0x3b01bf00,0x3b81fd96,0x3b19b2a8,0x3bce92f9,0x3c2f55ab,0x3c1d82e1,0x3b946e9c,0xbb5e050f,0xbb37216f,0x3b826621,0x3ca6a394,0x3cfa812d,0x3c4db1e1,0xbd073aca,0xbd207982,0x3ca3a241,0x3d418858,0x3c34118c,0xbc92c4e9,0xbd0dd668,0xbcd63096,0xbb3af142,0x3d080e62, -0x3c4a6322,0x39383130,0xbbaa3a40,0x3b8715d7,0x3c2f0942,0x3c60eff6,0x3c5748f7,0x3c1df2d9,0x3b7fd4d2,0xbac8e090,0xbb206757,0x3a42e638,0x39dfa462,0x3a7c5cb9,0x3a3a82ad,0x3be54315,0x3bbc4059,0x3942d092,0xbadb44e6,0xba270a96,0x3a7fc4e2,0x3c2e460d,0x3c40d629,0x3c200ccf,0xbc2e70dd, -0xbc903a3e,0xbb84ccd8,0x3bf6ebfa,0xbc7b57e2,0xbccdf0fd,0xbc93146b,0xbc1a1695,0xbbb94198,0xbbf6976f,0xbc0019d9,0x3b0daf14,0x3c6c7aae,0x3cbe0f6c,0x3c8c6ee5,0x3cb73d91,0x3ca4a283,0x3c5cd4cd,0x3b8e4b98,0xba10ecb4,0xbb00d461,0xbba4e9fe,0xbbde729b,0xbc0a10e3,0xbbe3fa87,0xbbd3ac39, -0xbc030f2d,0xbc0f84aa,0xbbe1e2b9,0xbb213bf9,0xbbbf7dda,0xbbb501de,0xbb17a71c,0xbb4b0ced,0xb98bd94f,0x3aefc024,0x3b83555f,0x3b3112e4,0xbb1d4ff6,0xbc0161d9,0x3c706035,0x3c90eb1e,0x3cd7bc60,0x3ceaa325,0x3cd454f7,0x3ca72248,0x3ca351e2,0x3cc98780,0x3c7ee752,0x3c0ccf75,0xb9ee71d8, -0xbb8bf647,0xbbbd5053,0xbb82a2ec,0x3989be1d,0x3b2c5c26,0x3b7cc620,0x3b9aff14,0x3b90a1cb,0x3b1c1846,0x3b0ec83a,0xb950fc76,0xbb592974,0xbb9c9983,0xbbdb1320,0xbbde19ad,0xbb87693f,0x39a6ab37,0x3b90d5f0,0x3ae84f8f,0x3ac85832,0x3b29452d,0x3ba85660,0x3c056d67,0x3c24ab2b,0x3c318761, -0xbcb75757,0xbc677dd1,0xbc6d2a29,0xbc411982,0xbc16c056,0xbb86df3e,0xba6bbd3d,0x3b141ab0,0x3b65bc7d,0x3bb70e37,0x3bfaf3d3,0x3bf622d5,0x3bd5703d,0x3b85bf6a,0x3b819777,0x3b9de9d7,0x3bd523b1,0x3bbe08a3,0x3ba7cd67,0x3b9bd0b4,0x3b005e37,0xbb1a5281,0xbc10b917,0xbc1ef962,0xbc1c0acd, -0xbc00bd6a,0xbc0aa1d6,0xbc2c10a3,0xbc3e38e9,0xbc69b649,0xbc797570,0xbc61d973,0xbc9e37d5,0xbcbd2057,0xbcdb9292,0xbcd868af,0xbb9a1192,0xba8fba09,0xba152602,0x3a6f02d9,0x3aff27bb,0x3b3f31e6,0x3b96bc9d,0x3bd5d286,0x3bdebe75,0x3bdc1709,0x3be1b19b,0x3bbe1104,0x3bae0edc,0x3b9f91ba, -0x3bb4535e,0x3bbd4b6c,0x3bcaf1c8,0x3bbae64e,0x3baddbf7,0x3bbd25ce,0x3aac36cb,0xbb388239,0xbbe5f2ed,0xbbe46506,0xbc0de3c2,0xbc146639,0xbc507fd3,0xbc62026e,0xbc8ef946,0xbc8e6cdd,0xbc9d499c,0xbca8cf92,0xbc906b8d,0xbc730815,0xbc5315b6,0xbc086f51,0xbb81f58e,0xbb295a9d,0xbb4622d8, -0xbb55c7ff,0xbb5ed995,0xbb7166a1,0xbb8cfdc7,0xbba0e89b,0xbb97bf6c,0xbb84eda1,0xbb5bad74,0xbb24e75e,0xbaf03495,0xbab75447,0xbaabfe3e,0xba9a0f54,0xba7dee4a,0xba2e8bd9,0xb9f8c40e,0x388913b4,0xbb102cb0,0xbb008c9e,0xbb3c3561,0xbb6f2249,0xbb91587e,0xbb930399,0xbb87f0b3,0xbb809b18, -0xbb8bef28,0xbb849867,0xbb8850dc,0xbb8f6de6,0xbb8840a5,0xbb87021f,0xbb7bf017,0xbb66ea80,0xba4ee00f,0x39dfb298,0xb96d6cc9,0xba10c43e,0xba7fe717,0xbaa89440,0xbac1713f,0xbaedc0bf,0xbabb1d16,0xbaac98a4,0xbaaa88d2,0xbaa69055,0xba9d6365,0xba820e7a,0xba748d14,0xba5a4854,0xba49ce6c, -0xba2db244,0xba239f6f,0xb93ce16d,0xbaa8d20c,0xbaedbc39,0xbb42124a,0xbacc2530,0xbb243a63,0xbb819151,0xbb7e94d9,0xbb800e8d,0xbb6bbab7,0xbb707876,0xbb66b968,0xbb661a25,0xbb28284b,0xbad12980,0xbb2c1b05,0xbac3a141,0xba174c3e,0xba8d036e,0xb9f58d73,0xba551fa5,0xba8342e8,0xbaa846e7, -0xbac8648e,0xbb088ff6,0xbb050585,0xbaed0141,0xba74c667,0xb9e435f4,0xb91b7e16,0x39452ecb,0xb861b3f9,0xba2f71db,0xbad69e3b,0xbb0704d5,0xbb0dffed,0xbb00cab2,0xbaedea50,0xbab5070f,0xbb03e137,0xbb151d35,0xbb50c52b,0xbabc4209,0xba94758d,0xb9d4e912,0xbaa1f734,0xba74f784,0x3a2bba33, -0xb99c6654,0xba1a576b,0xba13bb83,0xba1910d0,0xb9a702c1,0xbabf98fd,0xb9e62297,0x3a89a307,0x38ee63e4,0x38eda414,0xba4a3c58,0xbab8d3cd,0xbb6106fa,0xbb8be66c,0xbb7309f1,0xbaec1b94,0x395fc2e8,0x3ae5eb81,0x3b78a458,0x3b677555,0x3a8a16fc,0xbb2bdfce,0xbb99e368,0xbba330e1,0xbb9f7960, -0xbb8d6e7c,0xbb468cfe,0xbb81b90a,0xbb90cede,0xbbc29da9,0xbb236bc1,0xba807411,0x3a84ce9d,0xb9231251,0x39cb2c2c,0x3b811086,0x3af41b60,0x3aef143c,0x3b26d91f,0x3b005d30,0x3a8463c1,0xba6f8278,0x3a9cca51,0x3b39e99d,0xb7eacf30,0x39920561,0xbadf2dcb,0xbb31762d,0xbbe6e467,0xbbe6ac7f, -0xbbb87062,0xba456332,0x3b4e0a13,0x3b64fb94,0x3be60c8f,0x3bbe3257,0x3ac2b619,0xbb8a4dc2,0xbbf57a8a,0xbbf9481f,0xbbf2f4e3,0xbbd383f7,0xbb6edff5,0xbbb90630,0xbbda6d49,0xbc15f7da,0xbb3107b9,0xba9cc596,0x3b9cdf98,0x3a84cfbb,0x3b396c5c,0x3c30ffd0,0x3bc92c54,0x3bad69b3,0x3b7e010e, -0x3b52bf44,0x3b5a959d,0xbaaba122,0x3b7d7799,0x3bd5913f,0x3b48a666,0x3b8c8004,0x3b216783,0x3a67ed14,0xbbb4a927,0xbc30a467,0xbc330f22,0xbb57884e,0x3b57d160,0x3bf0edbf,0x3c8399ad,0x3c8e8469,0x3c028c19,0xbba322a6,0xbc4f3b1e,0xbc68cd13,0xbc6b5927,0xbc469b4b,0xbbd3fb04,0xbbf7a629, -0xbc11bc3f,0xbc3dac95,0xbbafd114,0xbaf183d6,0x3c364dd5,0x3bc10122,0x3bf67f4c,0x3ca63c2f,0x3c9a9b25,0x3c7b43db,0x3c47853c,0x3c4b4d8f,0x3bc091c6,0xbb93f8d0,0x3b81f61c,0x3ba6c029,0xbc093746,0xbc04dfec,0xbc627b55,0xbca2f3c9,0xbcaed35a,0xbc06b5a3,0x3c4fb9e7,0x3c250860,0x3c31403c, -0x3c5be2d5,0xbc5e21a5,0xbcac14b4,0xbc807cc2,0xbb99aa76,0x3abde91e,0x3b540f6b,0x3b76df7a,0x3ad7ad4c,0xba1feab0,0xbb35eae1,0xbb0877c7,0xba3cc2d4,0x3bbec11a,0x3b9dc1c1,0xbbc321b1,0x3c3dacfc,0x3c6813bd,0x3912fe06,0x3a2ba84d,0xbbd6b4b2,0xbc711936,0xbc7f9a70,0xbaefa868,0x3c956357, -0x3c7069ac,0xbc96f6b8,0xbadf83c2,0xbc289790,0x3bcb4073,0x3d392ccb,0x3cd660eb,0x3c59b77c,0x3c6b6c21,0xbc0aadcc,0xbc1f9d00,0x3aa2da05,0x3c672d10,0x3c548b7f,0xbb9a9c6d,0xbbd5ae0c,0xbc0c5234,0xbba40f19,0xbb8edc74,0xbba01e66,0xbbb86654,0xbbbece5c,0xbb5da114,0x3b52122e,0x3b1bdf44, -0x3bc61751,0x3c063a4c,0x3b8d68c9,0xbb043f80,0xbc08ced2,0xbb1d3815,0x3bdd820d,0x3c9e513f,0x3caafc0b,0xb8ff26a3,0xbd0ed87c,0xbcda921e,0xb9434587,0x3d007104,0xbc1b1fa6,0xbd029eaf,0xbd24ffde,0xbd50b66f,0xbcc47d7b,0x3d2e33d5,0x3c738534,0x3bb6a6d7,0x3be3b49c,0x3b4183ee,0x3b7ff2d6, -0x3bfedb86,0x3c26a9a1,0x3c1a7e8f,0x3c113de7,0x3b279ed0,0x3a7913e6,0x3b91cd99,0x3b73518b,0x3b497a64,0x3b1208e8,0x3baaa687,0x3b2c2e3e,0x39d2a96d,0xbb611542,0xbb0e8955,0x3b026ae9,0x3bd39b62,0x3b5c7499,0xbb541bfe,0xbc16bc77,0xbc45da55,0xbb85fedd,0xbc37e421,0xbbbe7dee,0xbc909ad1, -0xbc24d044,0xbb8a0a57,0xbb7b929f,0xba398062,0xba41b81c,0x3c1a6fcf,0x3be2a90e,0x3c7f3263,0x3caddda7,0x3cb5c066,0x3ca78254,0x3c6c89e9,0x3bacfb01,0xbb69b769,0xbbe30a19,0xbc176bd9,0xbc1eedac,0xbc0d666b,0xbc222a14,0xbc157f81,0xbc027b0e,0xbbda4d22,0xbba44703,0xbb42aa00,0xbb61a971, -0xbb8979f8,0xbb68f2f9,0xbb5e0399,0x3a5c266e,0x3a6604eb,0x3b367e3b,0x3b0e9d13,0x3ae137a0,0x3a2f5dda,0x3bd8ff12,0x3b111ed1,0x3c86d323,0x3cc4451b,0x3cc9dcb9,0x3cbd2608,0x3cb0064a,0x3cb79342,0x3c9a356c,0x3c74fc46,0x3c3679f1,0x3b71247e,0xba72058f,0xbb478df0,0x39512664,0x3b3947c8, -0x3b8fa7a5,0x3b791bc0,0x3b61337e,0x3b6e0a23,0x3ab434ef,0xbb17195f,0xbbe116ef,0xbbf5d3ac,0xbbe348c6,0xbbbc76ee,0x3aa1e661,0x3bb6ee9a,0x3baa9bdc,0x3b2efc37,0x3b01a0fc,0x3b04131c,0x3bd42e97,0x3c165d7c,0x3c054e2b,0x3bc1e4e1,0xbc82908c,0xbc454b11,0xbbe9b45e,0xbb76c2a2,0xbb0fb35b, -0x39bc29ad,0x3af7710a,0x3b60179b,0x3ba19a76,0x3bb770a8,0x3bce093a,0x3b907a4a,0x3b952030,0x3b918400,0x3bb7aa6a,0x3bb7aa61,0x3b9f35ad,0x3b9ba2ce,0x3b3d877c,0x3aa52823,0xbb564ae0,0xbbe16aea,0xbc1c8b5f,0xbbebe229,0xbbd8394d,0xbbfd4bd0,0xbc04ffc8,0xbc098270,0xbbbed4c7,0xbbcbd052, -0xbbbb2fb0,0xbb914388,0xbbcf07b4,0xbc27e115,0xbc8b583c,0xbc8b8b5b,0xbc08ede4,0xbb975553,0xbb901fdf,0xbb6c4fc4,0xbb452acc,0xba9bd7ba,0x3aac71ab,0x3b880d05,0x3bb5dd19,0x3bd2f764,0x3befcfed,0x3be07a8f,0x3bd688e5,0x3bd366ed,0x3bc319cd,0x3bb801c5,0x3bacd305,0x3b7836d1,0x3b02defb, -0x3aa2088c,0xba148516,0xbb4e9ddd,0xbbc925d5,0xbbc495d3,0xbbcc47ad,0xbbbf6653,0xbc041b14,0xbc1ca6a2,0xbc4a2833,0xbc66277a,0xbc87744d,0xbc9b4e3b,0xbc9587e8,0xbc916bc8,0xbc915653,0xbc4a7a27,0xbabbd0cf,0xba630eae,0xba7e89b8,0xba14117d,0xb9823b66,0xb9bf5a7f,0xba7579db,0xbac170ef, -0xbacf02ea,0xba9dd36e,0xba12337d,0x390f20f9,0x3a50eed1,0x3ab353e9,0x3ad615c6,0x3afbc124,0x3b17d53e,0x3b2b49cb,0x3b486a29,0x3b64928d,0x3b02dd3b,0x3a7c6aa3,0x37e22f5d,0xba6cbdd0,0xbb17f007,0xbb622b0d,0xbb7488a1,0xbb789147,0xbb84203c,0xbb885cd2,0xbb93df80,0xbb9b211e,0xbb790546, -0xbb34ce81,0xbb0f87eb,0xbb0663a1,0xba174361,0xba09cd38,0xba2c2573,0xba6d0ee8,0xba972281,0xba9ec8b2,0xba8f5add,0xba8757a5,0xba3ca350,0xba2eb4f2,0xba44e25c,0xba4654f4,0xba3fc5ca,0xba2441d3,0xba072a4d,0xb9d264e9,0xb9aa2f29,0xb90b696c,0xb7b5c41a,0x39a22004,0x389016d2,0x37bc7168, -0xb907bcab,0xba6d1ba1,0xba7c5935,0xbaa1f328,0xbab0d509,0xbad49dd2,0xbae5c1a7,0xbb01d7d4,0xbb052fb8,0xbb1d2b9c,0xbb0fbbbe,0xbb0dfe15,0xba6c06e5,0xba4d9939,0xba9fe2e5,0xb9bd89be,0x38985102,0xb9a88def,0xb8e98215,0xb9b750f6,0xba3e2e10,0xbac4e1d5,0xbac8c17c,0xbaa71c57,0xb923cdfe, -0x39acde17,0x3932a4ba,0x3a1a1659,0x3a18c956,0x3a7f2e80,0xb9bb22eb,0xba713343,0xbabd45ce,0xbab219e7,0xbab2b4b5,0xba96b339,0xbab4647a,0xbab5f96e,0xbb0da0f2,0xb953cd62,0xb8edcdc6,0xb9c49bc7,0xb9dbf00d,0xb9950d2c,0x398f4f31,0xb9c5fb82,0xb9fdc933,0x39a34f88,0xb93371b1,0x390c9c07, -0xb89c45df,0x394f1958,0x3b1a102a,0x3ab7fbd3,0x3b2444c2,0x3ade4171,0x39b57b3b,0xbb2cf655,0xbb6f083b,0xbb3ab99e,0xba08e0f2,0x3a7f8c73,0x3aa3b627,0x3b5d26ad,0x3b899f8d,0x3b96b394,0x39aabb10,0xbb11cece,0xbb822f01,0xbb903880,0xbb9175b7,0xbb6dccff,0xbb808a43,0xbb6adde2,0xbb8d8fc8, -0xb9e281c7,0x3a48a75d,0x391757f9,0x3a19325b,0x3a164797,0x3af44b6e,0x3a2b2341,0x3a77f040,0x3b51e673,0x3adb7c52,0x3ab22579,0x3ad02cf3,0x3b1b0172,0x3b415316,0x38c93e4a,0x3b2a0c8e,0x3a916248,0xba50706d,0xbbcbc6ce,0xbbd8e645,0xbba97f99,0x3a864495,0x3b8d1ef0,0x3b1f04cb,0x3bc483e0, -0x3bcbfe28,0x3c026202,0x3980b809,0xbb72dc33,0xbbd1d8a3,0xbbe257ba,0xbbe6b88e,0xbbacdd0f,0xbbbe898e,0xbbadedd9,0xbbe05178,0x3a68a758,0x3ac1e30e,0x3b1c706e,0x3b1e61c7,0x3b274849,0x3bc6efd2,0x3af9e2e0,0x3b0997d2,0x3b9b3419,0x3b0c2be6,0x3b5b5c85,0x3b1ddda2,0x3b805e46,0x3c13242b, -0x3bb7fd46,0x3c29fd03,0x3c13a78d,0x3bafe42a,0xbb806f26,0xbc17bf51,0xbc17a2d5,0xb9eb9ae9,0x3b7eeda8,0x3b6ab813,0x3c4645b3,0x3c950fb2,0x3c9c8078,0x3b697c78,0xbbd1c821,0xbc4c0aec,0xbc6fb325,0xbc6ea31c,0xbc2c5e3b,0xbc1c9f39,0xbc134b44,0xbc33f01d,0xba6a213d,0x3b134fce,0x3c08094e, -0x3bb3e566,0x3bd94766,0x3c935975,0x3c84d6eb,0x3c5afe85,0x3c68d13c,0x3c1bcc58,0x3bb092e3,0x3b1e0a45,0x3bf7aaf2,0xbbded065,0xbc640e69,0xbc656d64,0xbc8de2df,0xbcb43a50,0xbcb2a1f6,0xbc31e803,0x3c43f8da,0x3c207585,0x3c456db2,0x3ca7047a,0xbbd46fc7,0xbc9557f7,0xbc8d1517,0xbbce35b7, -0x3a9b5fa5,0x3b9c3292,0x3bf356ee,0x3bc2a4bb,0x3a40fab0,0xba3f3c01,0x3aa182f9,0x3b9d8cde,0x3b87297d,0x3b632468,0xbbae692d,0x3c7a305c,0x3c8533d8,0xbb0271a1,0xbb46a821,0xbc375b53,0xbc71a2d7,0xbbe5f449,0x3b9cf9cd,0x3c62095c,0x3b3073d1,0xbb90133c,0x3c151a50,0x3be82c24,0x3c63a27b, -0x3cf81933,0x3ce81fd1,0x3cac8dc6,0x3c492c22,0xbb90f0fa,0xbc01affd,0xbb37d7c1,0x3c8eac78,0x3ca3c275,0xba26a71c,0xbbb5f4e2,0xbc154d2c,0xbbacdf38,0xbb9cdb92,0xbbb81562,0xbc1801c6,0xbbe4e05e,0xbbacdda9,0x3a67b1b7,0x3a7a64a6,0x3b80e757,0x3bba0c0e,0xb9c91cd4,0xbbe233cb,0xbc208ae3, -0x3b04883d,0x3c26740b,0x3c4d0d1b,0x3bce3271,0xbc4ee006,0xbd00aecb,0xbc987a90,0xbc3012aa,0xbc2a6234,0xbd0f6b15,0xbd1d0d01,0xbcea005e,0xbd379a1e,0xbd0203e4,0x3c1d52fa,0x3c87fae8,0x3c94fc0e,0x3c37119c,0x3b6ace07,0xb9023a82,0x3b252424,0x3c041a35,0x3c25c91d,0x3c299cc0,0x3bedfa0d, -0x3b871dd2,0x3b1f7f73,0x3b4b8c78,0x3b26430b,0x3b46cf45,0x3afcbfbe,0xba56de11,0xb9c58bf8,0xbb5bc31b,0xbac37e88,0x3b61c6e4,0x3a214cfb,0xbb9df0d4,0xbc3e1004,0xbb600a7c,0xbb1b5578,0xbb4bf865,0xbc3ce792,0x3b4b2715,0x3af5d956,0x3bdcac5a,0x3bfa667d,0x3bd947a9,0x3c04936c,0x3bd86de2, -0x3bd5389e,0x3a8af283,0x3bd88ec1,0x3c922019,0x3c900d46,0x3c89d5a0,0x3c620801,0x3bad6312,0xbb1ee29f,0xbc04d968,0xbc1e1a01,0xbc25a3af,0xbc101e4f,0xbc23fd08,0xbc217070,0xbc041149,0xbb86e5d2,0xbb00e840,0xbb36879a,0xba19a0bd,0xbaf0b69b,0xbb8805a6,0xbb3cb8e8,0x3a454a92,0x3a64a0d8, -0x39d8e2a3,0x3b0e02e7,0x3c0ec85e,0x3bb129dd,0xbb94f671,0xbc55501a,0xbbd377dc,0x3963f7e5,0x3bc2081d,0x3c863158,0x3caade03,0x3ca92344,0x3cab716a,0x3c9f83d1,0x3ca6ff4b,0x3c59a208,0x3c0835c1,0x3b77eb73,0x3b758107,0x3b820eb2,0x3b4b9610,0x3b5d6610,0x3b19ee82,0x3af07166,0xbac747b1, -0xbbb65c8c,0xbc0e4711,0xbc17eca7,0xbbd76576,0xbb25d97f,0x3b51ee2f,0x3bc6d6de,0x3b87c97a,0x3b951c71,0x3b925075,0x3b7eaa23,0x3bf7ed64,0x3bfbce97,0x3b4ca03f,0xb9a06548,0xbb76232b,0xbace3c9e,0x3bd68fae,0x3c234bcb,0x3c3598f0,0x3bfe761e,0x3baca443,0x3b91e126,0x3b6eeb9d,0x3b35e4ec, -0x3b149b93,0x3a2d3134,0x3abcbfef,0x3b430049,0x3b95e589,0x3b8f3290,0x3b10adb0,0x3b03914a,0xba2b90c2,0xbb7de9f3,0xbbebffb7,0xbc0e408b,0xbbe6cb26,0xbbc9444e,0xbbc8e170,0xbbfb4191,0xbbe136a4,0xbba0c83f,0xb9894bea,0x3aee5a8a,0x3b6dbaf9,0x3b9203a2,0x3bb1cffb,0x3b80e93f,0xb9a70eb6, -0xbadfb8dc,0xbc3d5bcc,0xbc16ca4b,0xbc05b688,0xbbe09782,0xbb9afa24,0xbb301524,0xb9f31342,0x3ab68bdb,0x3b269f74,0x3b604a91,0x3b8192b2,0x3b76618a,0x3b5fdf8b,0x3b50bbf8,0x3b3bc7d0,0x3b50f7c5,0x3b7a0319,0x3ab1188d,0xba9fdb41,0xbb4132be,0xbb33deb1,0xbb822556,0xbbaecf98,0xbbbb490b, -0xbbbc697f,0xbbcd4370,0xbbdfea85,0xbc02c3e9,0xbc18c4b3,0xbc3e79cd,0xbc606470,0xbc82a4b2,0xbc89cdda,0xbc95a66b,0xbc9f67c3,0xbc74c2aa,0xbabd8b4d,0xba937a09,0xb9d21fea,0x3a0d5cd2,0x3a8c48f4,0x3aad51d5,0x3ac55cde,0x3b0401e5,0x3b013235,0x3b0cf968,0x3b2347c5,0x3b2ece80,0x3b3d2bf6, -0x3b4863f1,0x3b36478d,0x3b138752,0x3afcd42f,0x3ad75573,0x3ad3598a,0x3ab678fb,0x3ac12b9b,0xb9265d01,0xba819880,0xbb00e190,0xbb4c12cb,0xbb9751a7,0xbba9bcfd,0xbbb5df0d,0xbbb9c2b9,0xbbc889fc,0xbbd81131,0xbbdf1dd6,0xbbb0f581,0xbb728c87,0xbb3c2935,0xbb2a817d,0xbb65d6a6,0xbb7d9766, -0xbb6571e6,0xbb59dd4e,0xbb43d4c5,0xbb213d6d,0xbafa1f2e,0xbaac3431,0xbac25613,0xbad212bf,0xbae7835e,0xbaeda78c,0xbaf0a049,0xbae95c9f,0xbaf7df1b,0xbaf8a950,0xbb016fc0,0xbaf89c4a,0xbaf3dad3,0xbafe455e,0xbaedad04,0xbaf7224b,0xbad6112a,0xbb501634,0xbb49627d,0xbb3eb6bf,0xbb4b3608, -0xbb64982f,0xbb7f9539,0xbb885c88,0xbb8e6016,0xbba26464,0xbba27845,0xbba89165,0xbb619da5,0xbb6bd02e,0xbb88edd1,0x391e9e0d,0x3999ea78,0xb7d8a9e6,0x3a04a6d6,0x39d10cd0,0x390a86db,0xba3e3b57,0xba5d6878,0xba513c8d,0x3a064cdf,0x3a656298,0x392a76b3,0x3a4f7296,0x3a83d7de,0x3b0b57f3, -0x3a41a6ac,0x390bc55b,0xba3be91a,0xba392255,0xba5c3ecb,0xba5bfbbc,0xba5642d3,0xba221ad2,0xba69bb7d,0x3a3ad434,0x3a1723ab,0xb9913134,0x38cd79cd,0xb8b75a93,0xba49b5e6,0xba5d5714,0xba469d7d,0x3a086d5e,0xb9671fed,0x394d449c,0x3a4e4937,0x39f3d699,0x3b2054d3,0x3ae24396,0x3b70a1fc, -0x3b5af80c,0x3b0a9834,0xba839002,0xbb08c34d,0xbb020e60,0x3a4615ee,0x3acd2d07,0x3980487e,0x3b2e1769,0x3b8ec91f,0x3be5eedf,0x3b4e4f8d,0x3a0929f3,0xbb2046fc,0xbb5aa10b,0xbb826c04,0xbb78e97e,0xbb71d6eb,0xbb230d9c,0xbadd236c,0x3aaece0f,0x3b079e72,0xb87aa0b7,0x3a8cc04d,0x39a96643, -0xba85ab37,0xba98b4bf,0xba1095e1,0x3b2e02ca,0x39f9be91,0x3a385275,0x3b3c6d8f,0x3b17cebe,0x3b0b6b96,0xb89abf00,0x3b685254,0x3b4d8bef,0x3aee4dd4,0xbb568737,0xbb857982,0xbb8eca79,0x3b42af69,0x3ba4360d,0x3a6b3022,0x3b9c68bf,0x3bc24b8a,0x3c451baf,0x3b8f201b,0x39f46bff,0xbb8f3301, -0xbba7f2db,0xbbc9a3ff,0xbbb72e89,0xbba7b2da,0xbb53863f,0xbb139c95,0x3b7b591d,0x3b71734d,0x3a8bae4a,0x3b529e6e,0x3aa14494,0xba930ea3,0xbb4109cd,0xbb070e24,0x3b611dbc,0xb99e7aff,0x3af103b6,0x3ba606a1,0x3b44e68b,0x3c038148,0x3bb5afde,0x3c4e6590,0x3c5164ec,0x3c1e73f2,0x3a31dc8e, -0xbb905173,0xbbf19207,0x3b250c6d,0x3b926ec9,0xba1c3445,0x3c0433cf,0x3c896de0,0x3cd2c910,0x3c440f9f,0x3aa6d8af,0xbc0f4a78,0xbc4b9806,0xbc6d89e2,0xbc53872d,0xbc2db5ee,0xbbec9046,0xbbc4d703,0x3b8719fa,0x3bd0a5f1,0x3bcb8538,0x3bdcd337,0x3bc58f0a,0x3c184485,0x3c23b556,0x3c0e67d3, -0x3c47cb30,0x3b9d00bf,0x3b49b525,0x3bf58236,0x3bfe7459,0xbc516cd5,0xbc689f5d,0xbc8f8416,0xbc9ac3b4,0xbc9f8702,0xbc96ca9e,0xbc2594bc,0x3c481118,0x3c1fa4a5,0x3c59d980,0x3cc29fd1,0x39ba6f27,0xbc6f6c2a,0xbc92b833,0xbc346800,0xbadb1ccc,0x3bd63c89,0x3c3fb3a7,0x3c5a7854,0x3c0da374, -0x3bc25e4d,0x3be7e484,0x3c163361,0x3aed343b,0x3a8174cb,0xbb31f243,0x3c5d1f91,0x3c6ef683,0xba393033,0xbb833b68,0xbc4bba4c,0xbc6229ad,0xbabf10f3,0x3be336dc,0x3c164286,0xbba694f0,0x3bd6ca5f,0x3c65f35c,0x3c90cedf,0x3c666516,0x3c2fddf0,0x3cd2b165,0x3cd225a0,0x3c33256b,0xba24810c, -0xbbf63e33,0xbbe5c0e5,0x3c5feec5,0x3cad42ce,0x3c215753,0xbabb58f7,0xbbedd7ce,0xbbaf070a,0xbb976421,0xbb8294c0,0xbc068b2b,0xbb5bd5a3,0xbb4ffa74,0xbb1f286d,0xbacfab7c,0x3a3a4ea9,0x3b7736f0,0xbb8715b6,0xbc1a14f1,0xbc019742,0x3b8f2a75,0x3c1f7ea1,0x3ba15c17,0xbbd7b1fc,0xbcacf3ba, -0xbce4b27e,0xbc2148d9,0xbc7b8e44,0xbd5cfd76,0xbd453277,0xbd096c5c,0xbca0dccd,0xbcd4b1c1,0xbcd66356,0xbcc5a329,0x3ca7f6d4,0x3cf50f3d,0x3bb7fe59,0x3b357717,0xbb06fb56,0xba89374d,0x3b8593bc,0x3bfaa779,0x3bfeae49,0x3bfec5bf,0x3b9068b0,0xbb0fa2cd,0xb6b479f4,0x3a9a06bc,0x3b7a673e, -0xb8ea9198,0xbb4709c8,0xbb332e8b,0xbac48038,0x3aa417ae,0x3b3b1fde,0xbb401a62,0xbc03eddc,0xbc559c12,0x3b3747df,0x3bce8760,0xbbee1107,0xbb4c2a21,0x3c797b64,0x3cd429c5,0x3cc582f0,0x3c83cb15,0x3c2ca8d1,0x3be5b5e3,0x3b9e4551,0xba11468c,0xbbafae77,0xbb8983a0,0x3be59de6,0x3c3539f5, -0x3c531193,0x3c5e53b9,0x3bd03b8e,0x3a5ecd1d,0xbbc993f6,0xbbfc43f9,0xbc10a9dc,0xbc171d65,0xbc17ddd8,0xbc198b7b,0xbbec8bf9,0xbb2838f0,0xb67ebb85,0xbaaa5c85,0xb83ca35d,0xba939a83,0xbb6aa791,0xba84fdc9,0x3a56917a,0x3ae14293,0xba1e4601,0x3b0cd876,0x3c3b3253,0x3c1f0ee7,0xbc36901e, -0xbca0fb27,0xbcb56a44,0xbc913c74,0xbc0ef183,0x3c0c0227,0x3c8aa047,0x3c82bd0d,0x3ca05b7f,0x3ca60260,0x3cb93bc1,0x3c924cf7,0x3c6c376e,0x3c374690,0x3beb5b86,0x3b99ee23,0x3b00cbf3,0x3adc744b,0xba584bf1,0xbb67930c,0xbbc89939,0xbc116937,0xbc1b2de4,0xbc1bd5c0,0xbbbc55e0,0x3a8492c8, -0x3b136191,0x3b5d6d3e,0x3b40d8cc,0x3bb620e0,0x3bbe7c50,0x3bb0083f,0x3bb0f0b7,0x3b896066,0x3abe40d7,0xbb53c048,0x3c10f17e,0x3c2a75bd,0x3c881936,0x3c93b1ec,0x3c8ecc59,0x3c3df436,0x3bf1ab5e,0x3b9ebd64,0x3b3e94dd,0x3a6ba7f0,0xba72045c,0xbad8fad8,0xbabbd759,0xb962d742,0x3b0272c7, -0x3b07f634,0x3961ef70,0xba20490a,0xbb427be5,0xbbcd21d4,0xbbe80e96,0xbbebeab9,0xbba75b27,0xbbcb9e27,0xbbe21b30,0xbbf7b927,0xbb8fdb69,0xb9c721e2,0x3b921eca,0x3bfd7b24,0x3c25e58a,0x3c306907,0x3c50dc6e,0x3c584c9f,0x3c3d616d,0x3c2af1c2,0xbc423fcd,0xbc327561,0xbc0a94aa,0xbbb95941, -0xbaae36f1,0xb97e1b98,0x399d817d,0x3815c10f,0xba294d03,0xba61fd83,0xbabaffb9,0xba554988,0xb9c81169,0x389777e4,0xb9e9a4e3,0xb9b64bfa,0x396e02d4,0xbb108f13,0xbb91b449,0xbbd36863,0xbbcb8e74,0xbbe07534,0xbbf29d46,0xbbf33a5e,0xbbe929b5,0xbc03b313,0xbbf3121f,0xbc008f79,0xbc06b8a7, -0xbc19a483,0xbc29d81b,0xbc37878e,0xbc504a1d,0xbc740812,0xbc8688b3,0xbc60eae7,0xbb86a872,0xbb851bf2,0xbb2d7c60,0xbadf6fef,0xba988429,0xb9ea37a6,0x3a676dab,0x3b315295,0x3b4231f1,0x3b4cc50c,0x3b4e458d,0x3b3fd5e5,0x3b2a9b2c,0x3b22961f,0x3ac5be5b,0x39e349d0,0xba084bd5,0xbaa5261a, -0xbaea117c,0xbb20c21a,0xbaf9aeb3,0xbb530e11,0xbb80f408,0xbb9cb143,0xbbb5b4c7,0xbbdb7887,0xbbf194df,0xbc0172b8,0xbc04f9c3,0xbc1010c5,0xbc1aee1c,0xbc2125c8,0xbc0b8a53,0xbbe13b83,0xbbc59e22,0xbbb5c7c7,0xbbccca11,0xbbdafe69,0xbbc522ee,0xbbb21481,0xbb9877be,0xbb75a033,0xbb4b64fe, -0xbb1a93fa,0xbb3827dc,0xbb402bb1,0xbb43cb72,0xbb4493fc,0xbb432135,0xbb3cf467,0xbb5267df,0xbb5e48f3,0xbb6f2fcf,0xbb79d0e8,0xbb83273f,0xbb90c509,0xbb8b68af,0xbb90cbfe,0xbb892c27,0xbbb1e06c,0xbbb2adde,0xbbaf0d1c,0xbbb7cb9c,0xbbc50351,0xbbd4571a,0xbbdd7677,0xbbe46267,0xbbfb360e, -0xbbf5a0ec,0xbbf72e15,0xbbcb21d5,0xbbcfb365,0xbbcf4658,0x3a70f12f,0x3a170e5a,0x3a053c92,0x3a9e35cb,0x3aab2a9a,0x3ab4dcd3,0x39f22dd9,0x3983ebf6,0xb8985a5c,0x3ac3da13,0x3aea8358,0x3a2fc99e,0x3ac8119b,0x3aee01ab,0x3b40c761,0x3afc8e40,0x3ab90d1d,0x3a0e54c1,0x39adc60f,0x3883c9ac, -0xb8db36e8,0xb682d404,0x3997b374,0x3a1f95e7,0x3ac7625e,0x3a9c8ca7,0x38dd4de4,0x3a07626f,0x38889f80,0xbaaadde8,0xba911925,0xba64e2d4,0x3a4a5d54,0xb8b84f85,0x39e216e3,0x3adcddd2,0x3a434efb,0x3ad4cebf,0x3ae5262d,0x3b83056c,0x3b911f5e,0x3b8b2059,0x3aafed8c,0x398c0ab8,0xba328e48, -0x3b26831d,0x3b3a16ce,0x397d458b,0x3b38649f,0x3b9c58ac,0x3c0255e7,0x3bb919fa,0x3b65c2af,0x39a16942,0xbaa76b01,0xbb268ab1,0xbb42ae88,0xbb3b1b01,0xba829004,0x3ab59757,0x3b34535d,0x3b39d958,0x398a49af,0x3a970e34,0xb91c6ad9,0xbb38a35e,0xbb4087f5,0xbb0c8ee3,0x3afae7d0,0xba58568f, -0xb8cc8bb2,0x3b859300,0x3ad71828,0x39d5f743,0xb96aadf5,0x3b7e0fa5,0x3b9d098e,0x3ba9d731,0x3a2f61c2,0xba0ec161,0xbb4a74ea,0x3baee0a1,0x3bdcb9f3,0x3a93a2e7,0x3baf7f6c,0x3bd81187,0x3c55518a,0x3c02e0c2,0x3b9ec6e0,0xba0eedcc,0xbb0e0ec4,0xbb7f4aca,0xbb9a78a4,0xbb76b5c1,0xba7ea4cc, -0x3b342145,0x3bad775e,0x3b98db52,0x39b92194,0x3b235ffb,0xba84c261,0xbbda9324,0xbbed63be,0xbbc432e6,0x3af42da3,0xbb3a083e,0xb97019f0,0x3be8e8f8,0x3aad64be,0x3b853c82,0x3b86a9b2,0x3c427652,0x3c681eb7,0x3c680a13,0x3bd1cdbc,0x3aecd726,0xbb8a191d,0x3bcbabb3,0x3bd35048,0xbae75b6b, -0x3bc993fc,0x3c73fc18,0x3cd5aec5,0x3c9964ae,0x3c1e4c0f,0xbadb3878,0xbbef5d85,0xbc3b8535,0xbc5439f2,0xbc29f2c2,0xbb83e481,0x3b15c035,0x3c060efd,0x3c0ba036,0x3b9bc3a2,0x3beacb1a,0x3b903fa3,0xbacc421f,0x3a93dce4,0x3aa3c956,0x3bef4cf1,0xbab0bbe3,0xba182025,0x3c3d9762,0x3ba7a1d7, -0xbc8118eb,0xbc443554,0xbc93dc17,0xbc8c6d8d,0xbc5a96ae,0xbc5981a7,0xbc08099a,0x3c0aca78,0x3c1f9baa,0x3c849514,0x3cd5f95b,0x3c163a2d,0xbbf7ce5a,0xbc82fbca,0xbc78b8b7,0xbbc8035f,0x3bd41d09,0x3c5c4669,0x3c97036c,0x3c93b677,0x3c624e61,0x3c3440a8,0x3c101415,0xbabb30b0,0xbaef68fa, -0x3aed50ef,0x3bfd9c5e,0x3c1171d8,0x392d2bda,0xbb0eeb28,0xbc0a18f7,0xbc0e5c18,0x3af81765,0x3bc91422,0x3b9529d8,0xbc2a1e68,0x3c9195bc,0x3c885686,0x3c84b093,0x3bae7dd3,0xbba47a96,0x3cb45b16,0x3ce94e07,0x3c5220e3,0x3b5cd510,0xbc051799,0xbc75cadf,0x3b46e323,0x3c7df855,0x3ca49d44, -0x3b8a5b75,0xbb5d2b36,0xbb2ff693,0xbb72a7b5,0xbad9711f,0xbb27790f,0x3af088f7,0x3a348f9f,0xbb869666,0xbb3a54f0,0xbb0b4152,0x3af8de42,0xbbc1a4fa,0xbc0b821c,0xbb9c22fd,0x3b434ebc,0x3bb7a61a,0xba8d2769,0xbc631e12,0xbcbf1e74,0xbcb655e8,0x3b555791,0xbcf01f09,0xbd9ca6f9,0xbd214f11, -0xbc82a10a,0xbc4f6526,0xbc892c87,0xbcb5ccf6,0xbd08c893,0x3c894ede,0x3cec98d4,0x3b1be7c0,0x3a8fe064,0xbb880747,0xbb748da4,0xba43c5ef,0x3b5431b2,0x3b8ca7d3,0x3baa13b1,0x3b651e7b,0xbae4b930,0xb8dea928,0x3abf8619,0x3b7629bd,0xba8547fa,0xbb6a3639,0xbb993568,0x39eb9269,0x3b5f6e55, -0x3ae45e65,0xbb8a54ed,0xbbea3b32,0xbbfa7ff6,0x3bc88bec,0x3c06efd5,0xbc4d424a,0xbc0dc58a,0x3cf0da09,0x3d308451,0x3cfdc681,0x3c683f31,0x3ba90d57,0xb80b97e9,0xba41c162,0xbb878dcb,0xbbf1c445,0xbc1bd6b9,0xbbb7e996,0x3b8c73e0,0x3c1c5b8d,0x3c4464b9,0x3bfbf26f,0x3b6d0cd4,0xbaab21bc, -0xbb8f7aae,0xbbd09c60,0xbc01a979,0xbc011997,0xbbe33a23,0xbb85e4f4,0xba883447,0x3a4d88ca,0x3a5a597b,0xba34c397,0xbad80f50,0xbb06866e,0x3a6919d2,0x3aa1bf2f,0x3b17dcbe,0x3ae77ad5,0x3b62df64,0x3c0c7fae,0x3c863dd7,0xbc57a5f4,0xbc8be09b,0xbcbe14d7,0xbca39c08,0xbc3943d5,0x3aa24cde, -0x3c0cdca0,0x3c253777,0x3c7e9be8,0x3c9570d8,0x3ca01a52,0x3c8f58aa,0x3c7d1ec8,0x3c6e423a,0x3c0aec70,0x3b8b0de8,0x3a30fc84,0xbac79b40,0xbba35c89,0xbc0d1e79,0xbc1b42bd,0xbc2a37e7,0xbc2d06f7,0xbc076a79,0xbb9d11be,0x3abf2466,0x3906864a,0x398946d2,0x3ab90e49,0x3b78143b,0x3b946e8d, -0x3bb43d9a,0x3abf1bcf,0x395eb823,0x39a574de,0xbba29e9a,0x3c7abcfc,0x3c76e6f8,0x3c8e6c62,0x3c89d24b,0x3c80d7fe,0x3c47f5ec,0x3c23696b,0x3c061788,0x3baffba9,0x3b226b00,0x3a1a2afa,0xba0832bb,0xbad17378,0xbb065ad2,0xb9a94af1,0xb843d6bf,0xbad55fc5,0xbb127bae,0xbb4dc398,0xbba0871d, -0xbb979cc0,0xbb943208,0xbb8ac681,0xbbc52f3b,0xbbd5aa04,0xbbb9bc44,0xba1bc5d0,0x3b84c5c7,0x3bfcc32f,0x3c28bbdc,0x3c3e4f38,0x3c3a43f6,0x3c525f3d,0x3c67dea6,0x3c6c7307,0x3c75c269,0xbc155cf0,0xbc10c68e,0xbbcbb985,0xbb5caa1d,0x39fde602,0x3a2e67a6,0x38998a7e,0xba592a1a,0xbb058698, -0xbb1696ef,0xbb28fe5e,0xbb06ca07,0xbacb69c3,0xba8eba92,0xbb076782,0xbb341d42,0xbb472d98,0xbb8f5284,0xbbb69bad,0xbbdf9078,0xbbf68e79,0xbc079338,0xbc11628b,0xbc0b4e43,0xbc075374,0xbc0ebe78,0xbbfd23a2,0xbbda6617,0xbbcdf660,0xbbb1b71a,0xbba67b64,0xbb866b6c,0xbbc82e6c,0xbc0e8d4b, -0xbc306e98,0xbc1b1913,0xbc01ec34,0xbc011d8e,0xbbd627a8,0xbbbe8155,0xbbaa48b5,0xbb86cb7c,0xbb199ea3,0xb9d64023,0xb955567b,0xb97e629a,0xb9f3254d,0xba2e66ee,0xba7a384c,0xba711fc1,0xbafb0ab5,0xbb3693f2,0xbb726946,0xbb8ea14a,0xbba1b13a,0xbbb431cf,0xbba8defb,0xbbbd2f9c,0xbbcd8c67, -0xbbdf4f10,0xbbeeb492,0xbbff70cd,0xbc0ad3b7,0xbc16d345,0xbc220016,0xbc2f0d2e,0xbc3ddbdc,0xbc493c99,0xbc3a498b,0xbc271257,0xbc1bdbf6,0xbc115e54,0xbbf4ae61,0xbbfc83dd,0xbbe67018,0xbbd0fc68,0xbbb98573,0xbba32db6,0xbb96d361,0xbb84bef6,0xbb8d28b3,0xbb8a452e,0xbb861773,0xbb83a0f9, -0xbb822b80,0xbb7de631,0xbb8b0af6,0xbb92d5bf,0xbb9c3e07,0xbba64320,0xbbb0c62a,0xbbc10ccf,0xbbbea9df,0xbbc3c3bf,0xbbc2b7cc,0xbbcebfb4,0xbbd27e71,0xbbd60a00,0xbbe2516f,0xbbee9355,0xbbf975bd,0xbc0208f7,0xbc057aea,0xbc1075cd,0xbc07b177,0xbc0488ec,0xbbfb18ff,0xbbf9d312,0xbbd2bc13, -0x3acf1568,0x3a75cfd7,0x3a8cb89b,0x3aecdcc3,0x3b081934,0x3b1f8f72,0x3ac6d8f6,0x3aa24965,0x3a404da7,0x3b0ba000,0x3b1d0937,0x3abe402d,0x3b0fe4b1,0x3b209a1d,0x3b556141,0x3b3679de,0x3b20a930,0x3af402c6,0x3aa7c8fa,0x3a6a6bec,0x3a1bebe0,0x3a4944a9,0x3a8aa0b1,0x3aee3061,0x3b00b44f, -0x3ad0b6ad,0x3a155be7,0x3a4821b5,0x397c6150,0xba841bb6,0xba817caf,0xba3049ea,0x3a981e2e,0x399278bd,0x3a3ff14f,0x3b1f49f5,0x3a88358c,0x3a5f6cd7,0x3ae95839,0x3b806853,0x3ba089e1,0x3bb9fa1c,0x3b531e94,0x3b148f49,0x3a5d7860,0x3b690ef1,0x3b67c4ba,0x3a838465,0x3b3d03bb,0x3b9868ed, -0x3bf3548f,0x3be91fda,0x3bc087a7,0x3b5eb055,0x3a80a87a,0xba4928cd,0xbacc919d,0xbab88e4f,0x39f82bed,0x3b5e4845,0x3b686f76,0x3b496eb1,0x3a0687f4,0x3a29acad,0xba63abeb,0xbb4e043a,0xbb843f20,0xbb557d84,0x3a9d48b6,0xbad54b6f,0xba0fc104,0x3b9730b4,0x3a844413,0xba62ce16,0x368ae4a9, -0x3b8bf3d3,0x3bc9fb0a,0x3c001c00,0x3b81b884,0x3b1b06c0,0xba89845b,0x3bc269cf,0x3bea3a2f,0x3b40edee,0x3bc3efb8,0x3be5b1e6,0x3c4113cd,0x3c26f5cd,0x3c06fdf5,0x3b855580,0x3a3f94a7,0xbad1fb07,0xbb51ec87,0xbb0f0e77,0x3a2ba313,0x3bafccc6,0x3ba7a1f6,0x3b8df70c,0xb9e41717,0x39ab29af, -0xbb6c0c33,0xbc0c4817,0xbc2350f8,0xbc0b4e20,0x3a480be9,0xbb8994d6,0xbae5ef6c,0x3bf7db90,0xb95b6b60,0x38d530f1,0x3b4187d2,0x3c2599db,0x3c64963f,0x3c895d1b,0x3c2ce2b6,0x3be472e8,0x39b18868,0x3bfb05c4,0x3be2137c,0xb939b16f,0x3b85fa62,0x3c39ae2a,0x3cb2260e,0x3cb3f94d,0x3c86eb6b, -0x3bf112f1,0xba68c00b,0xbbdbf6bd,0xbc23b99b,0xbbfe01ff,0xba2b680d,0x3c1121a6,0x3c26f18f,0x3c0def5e,0x3b837f61,0x3ba46501,0x3a754489,0xbc138cca,0xbbf4a68f,0xbbcf4488,0x3b0a04fd,0xbbe271ca,0xbb85ad06,0x3c52d563,0x3acbe929,0xbc7c653f,0xbc11f7d6,0xbc6c75e8,0xbc45bbe0,0xbbfc6f53, -0xbc211ec8,0xbc0f1a71,0xb9f59568,0x3c01f463,0x3c95f9bc,0x3cd3cf95,0x3cb3ffd2,0x3bd40fd7,0xbc340a7a,0xbc6bbdee,0xbc1e3aa9,0x3ae3a383,0x3c18815b,0x3c7ef4ae,0x3c9a559f,0x3c7e7c81,0x3c1b2187,0x3b598b3e,0xbbc4394e,0xbba39d71,0x3bb63a3d,0x3b005877,0x3ad846d1,0xba8391f9,0xba5b8937, -0xbb368932,0xb8c47188,0x3bbc39cb,0x3bba5342,0x39b5269f,0xbc462dc1,0x3cd47ff6,0x3c7ff146,0x3bf2c388,0xbbae9e0f,0xbc8fb380,0x3c68953c,0x3cc85676,0x3c683bb7,0x3bca36eb,0xbc0f415d,0xbcbe6ea9,0xbc0b9f5d,0x3bc26244,0x3caa9da9,0x3c1d000c,0x3b261110,0x3ad578b6,0xbb09c203,0xb978971d, -0x3b80c4e1,0x3bb771de,0x3b840748,0xbb36e3dc,0xbaa6e81e,0xbb466b71,0xba5d14c2,0xbbc1400b,0xbbafcaeb,0xbb20596e,0x3a3d0b80,0x3a0a3d08,0xbbd07ce9,0xbc9bbd8f,0xbcbb8367,0xbc5b13f0,0x3c774d37,0xbd4d32cd,0xbd96d0dc,0xbc948203,0x3baed2af,0xbbf9bd27,0xbbe53c4d,0xbc5a133e,0xbcccd48e, -0x3b13997e,0x3c766788,0x3c09629e,0x3a1422a8,0xbbd1d3f9,0xbbcb849d,0xbbc291c4,0xbb210cf5,0x39a3c389,0x3b20ec86,0x3b6bdebb,0x3b248d48,0x3b2dd801,0x3b2d2fbf,0x3add9b83,0xbb0f0a50,0xbb5c394b,0xbbb278bf,0x3a9fe9c4,0x3b555815,0x3a4cf777,0xbb6927ae,0xbb84f9ba,0x39e9894e,0x3b08219f, -0x3ad9c7e6,0xbc151c4c,0xbced5c72,0x3d1a808d,0x3d238c96,0x3cac2577,0x3bb82115,0x3895177e,0xbbba68f3,0xbbbdca9f,0xbb9ba584,0xbbdd0f24,0xbc2547fe,0xbc353d1a,0xba69652a,0x3bc05dcb,0x3c08c6ef,0x3bf5a8aa,0x3b9f977b,0x3b7a338d,0xba5cbee0,0xbb591062,0xbb972940,0xbb9dbff7,0xbb2d0f0e, -0x39d0b6dd,0x3a6f6214,0x3a82c4ba,0x3acf1f41,0xba8c2dee,0xbb04eb85,0xba72f091,0x3a176e13,0x3a2737f7,0x3b5c61c5,0x3bda81f1,0x3bda227f,0x3bff3b44,0x3cc65875,0xbc465454,0xbc2c0880,0xbc5ad6b1,0xbc407be3,0xbc0a2ca4,0xbb0bb49c,0x3b06b193,0x3b937a74,0x3c28c5c3,0x3c72efd8,0x3c8134a5, -0x3c7f23c3,0x3c60135c,0x3c4f9607,0x3bee1727,0x3b2cf5e1,0xba813bc8,0xbbaabc2e,0xbc0df76c,0xbc3383e5,0xbc37d0ce,0xbc319602,0xbc357a24,0xbbc77679,0xbb59d07d,0xb9c3d8aa,0xbab8f8f9,0xbaef568a,0xbaae513c,0x380da27a,0x3af3fe2c,0x3b922032,0xbac4d623,0xbb1deaa2,0xbb006b89,0xbbdbb255, -0x3c5310bc,0x3c44830e,0x3c2e1d3b,0x3c2b79db,0x3c3b08fb,0x3c43d99e,0x3c572fc1,0x3c662bed,0x3c2fb2bc,0x3bee411f,0x3baffc80,0x3b838e7a,0x3b20c10f,0xb629a5cd,0x39c3db7f,0xb99a92ae,0xbb33c0d5,0xbb23f946,0xbb1bae07,0xbb22f27d,0xbb3621a9,0xbb579273,0xbb913826,0xbbaf007b,0xbb9764a8, -0xbb0d2304,0x3b53b539,0x3be11359,0x3c01e7df,0x3c0d5b7f,0x3c056c3e,0x3bef0735,0x3c07f291,0x3c1bbba5,0x3c2ea1b7,0x3c37400c,0xbb473711,0xbb539baf,0xba9eafcb,0xb960138c,0x3a3e914a,0x39007196,0xba1b77ab,0xba5bfdd5,0xba89fae9,0xb9a1de9f,0x3a0f322b,0xb6b9f3ef,0xb9d22bd6,0xba1f8355, -0xbb1531c3,0xbb7b6caf,0xbbad161f,0xbbb2e5f1,0xbbc07077,0xbbceb110,0xbbeaf2ae,0xbc001d29,0xbc0ad6cd,0xbbf833aa,0xbbeb635e,0xbbe3ead0,0xbbbc9982,0xbb58504b,0xbb091fb2,0x3a37160c,0x3b144032,0x3b9c66ee,0x3b36e8a7,0x3a157aae,0xbaa7063b,0xbac62905,0xbc2780ad,0xbc1ea323,0xbc157e6d, -0xbc0f8e63,0xbc041831,0xbbe72479,0xbbc34b8f,0xbbab84ae,0xbba803a7,0xbbaea61b,0xbbb153af,0xbba8c37d,0xbb9d5a7a,0xbb896ee5,0xbb9a999d,0xbba38397,0xbbb2c1ec,0xbbbf9d5c,0xbbccc926,0xbbd8bd57,0xbbd5a6fb,0xbbd976af,0xbbe23e05,0xbbe8d645,0xbbf2ae4c,0xbbf7a245,0xbc03d14b,0xbc0f78cb, -0xbc1f5e9f,0xbc2b0680,0xbc3872a3,0xbc47485e,0xbc3de0fe,0xbc367f3f,0xbc329dc1,0xbc24daae,0xbbecc330,0xbbe9edde,0xbbdf2747,0xbbd27eda,0xbbcb31a3,0xbbc7c66a,0xbbc5d9e1,0xbbbe4f03,0xbbb771ba,0xbbac194c,0xbba31e35,0xbb9c3672,0xbb9919be,0xbb939df1,0xbb9ec350,0xbba65348,0xbbadf19e, -0xbbb82a70,0xbbc286ed,0xbbd0490a,0xbbcd2d15,0xbbcd88d3,0xbbcc2226,0xbbcd3641,0xbbcdba8e,0xbbcefdf5,0xbbdae281,0xbbe3f788,0xbbe75e35,0xbbf09ab1,0xbbf53e56,0xbc017367,0xbbee61d3,0xbbe837a0,0xbbf3ea10,0xbbf188b8,0xbbc70474,0x3afacbb5,0x3ab50fa2,0x3ac5a6df,0x3b0c259e,0x3b23ad1b, -0x3b4cd9b8,0x3b1241d6,0x3af94a84,0x3aae8ef9,0x3b0f4e80,0x3b1ea86f,0x3b0bc13f,0x3b217056,0x3b2bf767,0x3b44b164,0x3b4c8c45,0x3b43b11e,0x3b2ff2f0,0x3aec2946,0x3ab0cfd2,0x3a76fdf4,0x3aadd116,0x3ace5724,0x3b162e65,0x3b05aa38,0x3adf4b86,0x3a49af96,0x3a52df63,0x39c4fa26,0xb9afecdc, -0xba27ce04,0xb9a87f87,0x3aaf1128,0x3a2ac447,0x3a7d66e8,0x3b2a6395,0x3ab4f7e6,0x3a5e6eed,0x3af59b45,0x3b6ab92f,0x3b9fa980,0x3bd4b26d,0x3b95ef62,0x3b6ce00f,0x3aff8cf9,0x3b5f5d15,0x3b5b9898,0x3b14c2a3,0x3b4483a7,0x3b8e93f5,0x3bc6f18b,0x3bf91af1,0x3bed92c7,0x3bb844a1,0x3b30250f, -0x3a469da4,0xb951a076,0x39b8c45e,0x3aec1f1b,0x3b7b507e,0x3b7071d4,0x3b38d497,0x39239257,0xb912c097,0xbac37b37,0xbb2b50f7,0xbb8c1d05,0xbb770667,0x39004bed,0xbafb2a9a,0xba399347,0x3b742370,0x3a551f1a,0xba052c0c,0x3a43d0c8,0x3b951a6e,0x3be3f7ad,0x3c1ff71c,0x3bd4a09d,0x3b952566, -0x3a779373,0x3b94724e,0x3bbaff30,0x3babf402,0x3bca28c8,0x3be4cddd,0x3c13cba3,0x3c3020c3,0x3c23fdbc,0x3bf1de28,0x3b287ea9,0xb8b7d48d,0xbb038981,0xba0a9c53,0x3aed7eaa,0x3ba1a350,0x3b831039,0x3b545d8f,0xbb08289d,0xbb07e149,0xbbb8d5be,0xbc00370c,0xbc35caa8,0xbc1c4e85,0xba42cfd1, -0xbb8f04f2,0xbb18371f,0x3bbf2f6e,0xb9fdfe1a,0xbabfa44c,0x3b115ab2,0x3bfd1fd4,0x3c506d3d,0x3c9545ea,0x3c5fe8fd,0x3c2b95b0,0x3b849848,0x3bd0da40,0x3bbae160,0x3b73562f,0x3b807080,0x3c168d6d,0x3c8364da,0x3cb69f94,0x3ca847f3,0x3c711b57,0x3b9dbe6e,0xbad78ecb,0xbbab54cf,0xbb2ff5fb, -0x3b3d70d3,0x3c30cfd3,0x3c211a2d,0x3beba5f9,0x3b2267b4,0x3a635b7d,0xbb67ac22,0xbc30d022,0xbc61511a,0xbc48db43,0xbb305dbb,0xbc2bc257,0xbbd0b184,0x3c200042,0xba47848d,0xbc1af9bc,0xbb81e32d,0xbba53499,0xbb6f7ca4,0xbbb900f8,0xbbeae2a2,0xbc108120,0xbc16bba1,0x3b7d790a,0x3c7f0ef9, -0x3ca1d3ed,0x3ce54fbb,0x3c823e33,0xbc14461b,0xbc47229a,0xbc49aaaf,0xbbd37fff,0x39bf87e3,0x3ba3ddc4,0x3c1276f4,0x3bf8dd55,0x3aacf574,0xbb8945ca,0xbc293078,0xbbf1cc16,0x3bf631a6,0xbac78b14,0xbb69add3,0xbb4d1348,0xbad61135,0x3aee33b3,0x3c17df3d,0x3c269af5,0x3be20ce5,0xba7763ff, -0xbc072c32,0x3cd7aebc,0x3c1c8174,0xba68f322,0xbc3f333e,0xbcc21023,0x3b07d12c,0x3c5fe790,0x3c48c3ac,0x3c06a26a,0xbbe9eb24,0xbcd8a523,0xbc887a45,0xbb72274d,0x3c510e83,0x3c620d12,0x3c28f206,0x3bc9ffce,0x3ab2135b,0x3b0299ac,0x3c0d3200,0x3bea71c0,0x3bc3b269,0x399347f2,0x3aee7f26, -0xbaf8e752,0xbb792834,0xbba07675,0xbb143501,0xbaa522a4,0x394df402,0xbb51f81c,0xbc3fd324,0xbcbeca85,0xbcb1974d,0xbb93f032,0x3ca2579f,0xbd766a8a,0xbd74ebab,0xbc172445,0x3c2734fb,0x3b065d5b,0x3b8bc30b,0xbb8e5897,0xbc9003c3,0xbc69b3f2,0x391aa8a1,0x3c9cc5df,0x3b30d216,0xbbeab4d4, -0xbc044a5f,0xbc205286,0xbc0264d3,0xbb9bcf15,0xba244f9e,0x3b249351,0x3b8983f7,0x3b80bf0d,0x3b081b0f,0xbae1e116,0xbb7e62e4,0xbb5e2bbc,0xbba35fc5,0x3a2bf7a7,0x3acb9af7,0x3971763d,0xbaf55a84,0xbad012f7,0x3b6bef19,0xbbbe6583,0xbbbd3015,0x3aa08604,0xbd2bab42,0x3d0b6e99,0x3c8ef7a0, -0x3ba21f66,0x394c3890,0x3bb9ab10,0xbb940028,0xbbd0802d,0xbb404d32,0xbb55c931,0xbbcc0dcb,0xbc15c941,0xbb40e065,0x3b361270,0x3b82c90c,0x3bc5c0aa,0x3bc8d128,0x3bf57ad9,0x3b20f947,0xb9122f39,0xba8be60f,0xba40c36b,0x3ade606a,0x3b8a3bcb,0x3b2dde8e,0x3a562a76,0x38e28c5a,0xba7d5961, -0xbad2c208,0xb953bfa9,0xb8aec959,0x3a0fa495,0x3bcc7fde,0x3c19f6c3,0x3c0e3f2f,0x3c5500d8,0x3cec344b,0xbc102ad0,0xbb44e5ef,0xba7b4eec,0xbb0d1098,0xbb8dca33,0xbb390693,0xba46ca64,0x3b0bb4f7,0x3bc7c26a,0x3c37494f,0x3c5851dd,0x3c5d038b,0x3c3c6eec,0x3c1a4cfa,0x3bbffa55,0x3aab46e0, -0xbb479b05,0xbbf8b968,0xbc240c61,0xbc2c9870,0xbc397c51,0xbc284504,0xbc21b628,0xbb7f2c86,0xbad38ecc,0xbaf8181e,0xbb0aa84a,0xbb3e2a73,0xbb72a6bb,0xbb2d9640,0xb9429003,0x3b41441d,0xbadcf381,0xbb3005c2,0xbba0b2b7,0xbc01d214,0x3bae7f88,0x3b52ba7d,0x399ccb42,0x3b21b651,0x3bd94dad, -0x3c37a78f,0x3c778e12,0x3c956af6,0x3c82762c,0x3c5b282d,0x3c44c1e1,0x3c2d2850,0x3c10ec20,0x3babc8f4,0x3b6f929e,0x3ac1f628,0xbaeeda99,0xbab681cb,0xbaf48956,0xbb12d12f,0xbb570209,0xbb81202e,0xbba03d51,0xbb829723,0xbb07594d,0x3a917c40,0x3ba5434c,0x3bdb8cca,0x3bb00a24,0x3b9dca98, -0x3b6490d7,0x3b298f19,0x3b51f109,0x3b74f965,0x3b9db02d,0x3b95990a,0x3ba1728a,0x3ba920a2,0x3bd3ce12,0x3bb670a0,0x3b8255c2,0x3b295789,0x3b01be11,0x3b1379d6,0x3b2e33a4,0x3b6dea07,0x3b97a44a,0x3b2038ad,0x3a08febf,0xba88dac6,0xbb239ed4,0xbb81fd95,0xbbb5de64,0xbbab40bf,0xbba93b9e, -0xbba8a8e8,0xbbbc2220,0xbbca1634,0xbbdddeaf,0xbbab62ae,0xbb9538c2,0xbb6eacd2,0xbafcd35a,0x3ad35c23,0x3b7d5720,0x3be1698d,0x3c0f7086,0x3c3c7e7c,0x3c22ec82,0x3c0f0c0b,0x3bf6ffa3,0x3bd9a8d5,0xbc093953,0xbbf6a16e,0xbc00a88d,0xbbfeede7,0xbbeac35d,0xbbda7d24,0xbbd88fb7,0xbbe8a159, -0xbbe86cc3,0xbbf002eb,0xbbe9e8f7,0xbbd85201,0xbbbdd07b,0xbba3c859,0xbba9eb37,0xbbabf4b5,0xbbb299d9,0xbbbc880a,0xbbc822d9,0xbbd3f75f,0xbbdbf130,0xbbd78080,0xbbdf9382,0xbbe55bff,0xbbf081ba,0xbbfa916f,0xbbf13cee,0xbbf4d475,0xbc00ea04,0xbbff51b6,0xbbfc6ea1,0xbc019489,0xbbf8ed12, -0xbbfdc4b5,0xbc010f5f,0xbbe8e6a9,0xbbc16ab1,0xbbb248cd,0xbbb53ba5,0xbbb45011,0xbbbc3ab3,0xbbc46d1f,0xbbc6b725,0xbbc67c7a,0xbbbad59e,0xbbb0fd84,0xbbaba8b7,0xbba538d5,0xbba34a62,0xbb9d7c7f,0xbba5ef4e,0xbbab260e,0xbbb0019b,0xbbb70752,0xbbbde32a,0xbbc50be7,0xbbc8a1cd,0xbbcaa874, -0xbbcbf2f2,0xbbca7f1d,0xbbcd90e8,0xbbd1c393,0xbbd0ee97,0xbbd0bcde,0xbbc90a05,0xbbc806f2,0xbbc4ea2b,0xbbbfdb35,0xbbb185ca,0xbbac3237,0xbbcc5a12,0xbbc75e25,0xbbc29e48,0x3ad515b8,0x3abcdf41,0x3ac6dc74,0x3af926c6,0x3b12a4c7,0x3b4696de,0x3b165f7a,0x3afdd67d,0x3a989bf0,0x3aca19c3, -0x3ae84f78,0x3b163309,0x3b0c9dec,0x3b105fb3,0x3b0f36bf,0x3b33403a,0x3b331ec1,0x3b26ffee,0x3adc062f,0x3aa5ddc4,0x3a6382f5,0x3aabea6d,0x3ac3c865,0x3afcacdf,0x3ace825f,0x3aafc1a5,0x39df65c9,0x3a0922b7,0x393aeaa9,0xb95a732a,0xba0a01ab,0xb96f83e5,0x3a4a3211,0x3a332e67,0x3a688e1a, -0x3afdf9dc,0x3ab324ba,0x3a6af8f3,0x3ad01bae,0x3b26db51,0x3b812034,0x3bc8faa8,0x3ba3a3fb,0x3b801d80,0x3addb95c,0x3b102b38,0x3b1c9b43,0x3b5ad1d4,0x3b3d7144,0x3b7387c7,0x3b8cd06e,0x3be27a21,0x3beb5afd,0x3bc7a9da,0x3b665bf3,0x3af3a0f8,0x3a72e452,0x3ad3515c,0x3b19749e,0x3b393a23, -0x3b45c89e,0x3b059583,0xba863806,0xba80ee14,0xbaefbef9,0xbb1e1c1a,0xbb7e1f31,0xbb7960a9,0xbaece400,0xbaf8a93a,0xba5195e8,0x3aa94c62,0x39dd8617,0x39e8dd8a,0x3ae8952f,0x3b8181db,0x3bd1d849,0x3c228dbd,0x3bfd3197,0x3bba0c1f,0x3a932f1e,0x3afb5161,0x3b4b9da2,0x3be2910c,0x3bbd3982, -0x3bd02e86,0x3bc2d6d1,0x3c1dfe65,0x3c1f3c3e,0x3c02d414,0x3b576c3e,0x3a6ad76d,0xba5f8f1a,0x3a05bf60,0x3b072888,0x3b1c9003,0x3b1f1cdd,0x3b006265,0xbb91cb9d,0xbb70d665,0xbbe4d3ce,0xbbfa1a9a,0xbc3505c3,0xbc175434,0xbb6e9830,0xbb65e0af,0xbaf3e190,0x3b1b413c,0xb8e4d8ae,0xbaf43366, -0x3ab6febd,0x3b8088e1,0x3c1caef1,0x3c8c8d0b,0x3c730ed1,0x3c3aedb4,0x3b847e73,0x3b53a7ae,0x3b747a64,0x3c03ee57,0x3ba97ba9,0x3c058f1c,0x3c34b595,0x3ca3d996,0x3cac4757,0x3c90e9bf,0x3c106e3b,0x3b5ea544,0x39bc3d91,0x3b2648d2,0x3bab779e,0x3c07862a,0x3bff26e7,0x3ba84f75,0xba9685f1, -0xbb6c7477,0xbbe7f69d,0xbc1bf059,0xbc8bb290,0xbc81dd49,0xbc041858,0xbc389e12,0xbbda62a1,0x3b3794d7,0xbb1f512c,0x3aaa81ef,0x3b603406,0x3bfbe0bb,0x3bc3175c,0xbb9bf2fe,0xbb5d66ab,0xbbc2a2a7,0xbc457de1,0xb9930d15,0x3c0ba184,0x3c26a272,0x3cbea2e6,0x3c846ae4,0xbc0c755a,0xbc39a520, -0xbc7550e2,0xbc7c6833,0xbc1c6ca3,0xbbf9cc1c,0xbbd2cb4c,0xbba7b08a,0xbc078f59,0xbc2f9952,0xbc42f038,0xbbf70076,0x3bfc8460,0xbb2223f7,0xbb903ec4,0xbb36d3b6,0xbaa1bd8f,0x3bbd577f,0x3c865fa9,0x3c6cab6b,0x3c1f9043,0x3acc7dd9,0x3a6149cc,0x3c94dc41,0x3b033514,0xbbd5a6d8,0xbc60f684, -0xbcb9137f,0xbc21628c,0x3abfd3ae,0x3c114b82,0x3c2665c1,0xbaf63248,0xbcb78b91,0xbca9459e,0xbc42e776,0x3ad6e703,0x3c663ed1,0x3c858167,0x3c25d85b,0x3bdb2add,0x3bc8cb3e,0x3c3f36cd,0x3beccd5b,0x3bbefc65,0x3b47ab16,0x3b845eca,0xb9bfb034,0xbbb7294d,0xbb74b34c,0xb9bd7218,0xb9d5d179, -0x3a0f97af,0xbb9b008a,0xbc751e78,0xbcda4b4d,0xbca47ba9,0x3b3389fe,0x3c895687,0xbd4c968f,0xbd1dbca2,0xbc3fb72a,0x3b34b000,0x3c85b029,0x3c45d675,0x381fffd1,0xbc589686,0xbcc75509,0xbc3533bb,0x3cb96cb9,0x3bc721eb,0xbb85d5fd,0xbc1134c8,0xbc34ec94,0xbc36f385,0xbc151d4c,0xbb7ee68f, -0xba9d01bc,0xb9515bac,0x3ab4a377,0xba33bf25,0xbb971224,0xbbba2798,0xbb8253d9,0xbb57c43c,0x3935bd1f,0x3a0b0254,0xb9243195,0xb9ea2e6c,0xba8228de,0x39c640e6,0xbc0f4d79,0xbbf3d483,0x3b4b3571,0xbd1c2243,0x3ca49a92,0xbb684e03,0xba91e5fb,0x3b562e3a,0x3c656891,0x3bc8ce36,0x3ae718dd, -0xbb154cb2,0xba8d1b19,0xbb4ff025,0xbb8d5a04,0xbb65a423,0xb8dd7747,0xb9954d61,0x3b9674f6,0x3bf84daa,0x3c0e85e4,0x3bb3b538,0x3b69486f,0x3b0665b4,0x3b3ef239,0x3b937fd7,0x3bc66b8d,0x3b650b05,0x39d6ac63,0xbae3a2e0,0xba8c0689,0xba12bce3,0x3a3739c1,0x39b5e4e5,0x3ab6060f,0x3be1b2fe, -0x3bc5f318,0x3bc6bf83,0x3c8a943d,0x3cca85e3,0xbb67f300,0x3b4397a9,0x3be2c7e0,0x3b5ba994,0xbb5dc3b2,0xbb94901f,0xbb66bb48,0xbab6b258,0x3ad02823,0x3bc83a1a,0x3c1dae59,0x3c27a5b6,0x3c17d648,0x3bea9d3f,0x3b9527d8,0x39ba3e58,0xbb8e4c40,0xbbf4cc57,0xbc124cae,0xbc14c27d,0xbc228e0f, -0xbc06abed,0xbbc9a15b,0xbae1e523,0xb8690853,0xbade2b3b,0xbb02b415,0xbb380bba,0xbb5338d9,0xbb23620e,0xba81dd20,0x39ca1a09,0xb98cf098,0xbac93076,0xbbb39972,0xbbda1bb5,0xbb5615fe,0xbbc86daf,0xbc105dd3,0xbba5b889,0x3a7fd96d,0x3bfdca9d,0x3c480287,0x3c7e18f0,0x3c85723a,0x3c87ec32, -0x3c8bed6c,0x3c803d4c,0x3c6009eb,0x3c1f12e9,0x3bf97e92,0x3b947861,0x39e1c36d,0xb98bba16,0xbb142740,0xbb821ace,0xbba35777,0xbba3e54b,0xbb930497,0xbb00fe96,0x39ba608d,0x3b4f09d0,0x3b8f481e,0x3b82353c,0x3acdcb0f,0x3a9d2773,0x3a0bde24,0xb9396b96,0x390c6d71,0xb8ec6979,0x38b7eb8f, -0xbae61dda,0x3c2f5a9c,0x3c371dd2,0x3c3fed4b,0x3c2b85cd,0x3c0bb1cb,0x3bdcb4e0,0x3bc9fb40,0x3bcfa322,0x3bcad2d7,0x3bc7e8d6,0x3bc8313a,0x3b4c0320,0x39fd169f,0xbb0a1723,0xbb3f66aa,0xbb7d8134,0xbba1ff64,0xbb938060,0xbb87c78a,0xbb805f2c,0xbb858681,0xbb8c0337,0xbb9d18cd,0xbb17af16, -0xba51e749,0x3aa6cfbd,0x3b3a3ade,0x3bc76be9,0x3c07e8ec,0x3c215516,0x3c30ef32,0x3c4a5f98,0x3c424eab,0x3c438270,0x3c4046a0,0x3c366c3a,0xbb8ad54a,0xbb4fe8c4,0xbb70ae62,0xbb75dcab,0xbb5d7e69,0xbb5f050b,0xbb7fd7e7,0xbb99ca73,0xbba5d940,0xbbb0dae1,0xbbaecdc1,0xbba98ce1,0xbb9aaccd, -0xbb8faf9e,0xbb9051c0,0xbb93507e,0xbb9756ad,0xbba1a627,0xbbaed83a,0xbbbc224a,0xbbca71a1,0xbbc5a6bb,0xbbcf1ec8,0xbbdac998,0xbbed1c35,0xbbfd9763,0xbbdf087b,0xbbcd862d,0xbbbf469b,0xbb9f3e0a,0xbb7b75f6,0xbb44ca3f,0xbb417d3b,0xbb521041,0xbb5ab6ec,0xbb369dcd,0xbb74b6d2,0xbb437146, -0xbb5d3e96,0xbb69bab0,0xbb81664d,0xbb8914b1,0xbb8af566,0xbb8c75bb,0xbb8b7a01,0xbb8d442d,0xbb92d3bb,0xbb93c204,0xbb977179,0xbb993f0b,0xbb9c4e6a,0xbb9e68d6,0xbba04399,0xbba2c5b1,0xbba4e84a,0xbba576de,0xbbacc9b0,0xbbb2b0c2,0xbbbad38e,0xbbb26c83,0xbbb9aed4,0xbbcb9dcb,0xbbbac8c6, -0xbbaed60d,0xbb9dea60,0xbb91a802,0xbb863b98,0xbb637d73,0xbb5b6e4f,0xbb4cb487,0xbb8a4e6c,0xbb8195d8,0xbbac783f,0x3a9fdf44,0x3aa5535e,0x3abbe236,0x3ac62647,0x3ae7e0b5,0x3b267357,0x3b0a191c,0x3ae67958,0x3a385118,0x3a70ed8f,0x3a995333,0x3b1661d8,0x3ae8998c,0x3ae73eda,0x3ac5e81b, -0x3b126802,0x3b154d8f,0x3b06e8e1,0x3abb6e2f,0x3a91ea5f,0x3a5c51f3,0x3a8bdeba,0x3a9231ef,0x3a9adfe9,0x3a7ff429,0x3a52609a,0xb931646a,0x38a5d990,0xb981482d,0xba43d7d9,0xba225f32,0xb9a79ae6,0xb955d7f4,0x3a1a9ee2,0x3a5258bc,0x3a7dbb1c,0x3a938ea3,0x3a1c2228,0x3aa678d8,0x3abfa9e0, -0x3b368419,0x3ba4be66,0x3b9dd596,0x3b6f8591,0x3a457476,0x3a8abcbf,0x3ad7271c,0x3b8a036b,0x3b32a9c1,0x3b443600,0x3b3f2690,0x3bbf0c9b,0x3bd331ab,0x3bb5f96a,0x3b7f8328,0x3b304c0c,0x3afda28e,0x3b09fa6b,0x3b0a9e50,0x3ac66db4,0x3af3b726,0x3a739c8f,0xbb0c86ff,0xba9a6962,0xbabe9386, -0xbb28c52b,0xbb2d3239,0xbb41d0d2,0xbb6a1509,0xbac70219,0xba3672b1,0xba8f128f,0xb91582df,0x3a771673,0x3b36eebf,0x3b461b5c,0x3ba850d4,0x3c0b1282,0x3c021e43,0x3bc6774f,0x3958304d,0x390f6032,0x3aaa941e,0x3c043339,0x3bab8ebe,0x3bb4c08d,0x3b840a4a,0x3c06d922,0x3c0e1796,0x3be51527, -0x3b6e8bd5,0x3aef84e7,0x3a1d7529,0x3a7821fb,0x3abc34b4,0xb9408ce2,0x3a1807f1,0x3a15b07d,0xbbd1cd35,0xbb91d38c,0xbbf0ce29,0xbc179c0b,0xbc24a788,0xbc028a16,0xbbe1756e,0xbb0decbc,0xba578164,0xba693083,0x3910568f,0xbb21654a,0x3a2a5b57,0x39ef5226,0x3bbe1d49,0x3c5fdba3,0x3c696b70, -0x3c2d11cb,0x3ad42783,0x3a1df6b4,0x3b399332,0x3c4079e0,0x3bcd45b8,0x3bdb27d4,0x3bf58cd1,0x3c899617,0x3c9f72bb,0x3c8c1239,0x3c37dbe1,0x3bf1dd18,0x3ba5f1a1,0x3bb8b8c8,0x3bbacad9,0x3b70c948,0x3b94478e,0x3b340d01,0xbbb66bcc,0xbbbfdeef,0xbc022b97,0xbc0bc037,0xbc83749a,0xbc7d0306, -0xbc562379,0xbc1af283,0xbbaf2c2a,0xbb942eb4,0xbb7e4535,0x3c33a3f9,0x3c38fa13,0x3c90e3b5,0x3c5a5220,0xbb035244,0x3a4f39fb,0xbab16887,0xbbfcc9eb,0xbb182b8e,0x3aa58c76,0x3ae47c3b,0x3c688d9c,0x3c49735a,0xbba8d9cf,0xbc269c07,0xbc83c034,0xbcadfe5c,0xbc89a9ab,0xbc8491ff,0xbc88d556, -0xbc72e0d3,0xbc6dea86,0xbc6c294c,0xbc1d9429,0xbb9b6219,0x3bc82da1,0xbaa3e0e9,0xbad35af1,0x39e5169e,0x3ad36f34,0x3c12d4be,0x3c934d93,0x3c873046,0x3c4cbf23,0x3bce7c1c,0x3c19de95,0x3bdc7cad,0xbb78c6d2,0xbc0ebd53,0xbc513389,0xbc9345f1,0xbc89b39f,0xbbeca546,0x3bba762d,0x3c368dd0, -0x3b954beb,0xbc69420b,0xbca9dcee,0xbc89ff7e,0xbbc72327,0x3c1af6c9,0x3c876b63,0x3c520b36,0x3c4682f6,0x3c2cd35f,0x3c47286e,0x3bce11f9,0x3b8b839a,0x3b81d6c1,0x3b89fdfe,0x39a220dc,0xbbb1cfe1,0xbb31177a,0x39b49009,0xba0e62ea,0xb9c59afb,0xbbbb7f25,0xbc67f4b0,0xbcc9fb9e,0xbc854271, -0x3bf3f81f,0x3c1c4dd4,0xbced7f76,0xbc943380,0xbc8b1e99,0xbbad47f1,0x3cd70218,0x3c811332,0x3bb02858,0xbb53b059,0xbcbf24de,0xbc86a88b,0x3c861d6d,0x3c20258d,0x3b27811c,0xbc091cda,0xbc1c2246,0xbc33b89a,0xbc325d7f,0xbbd0702d,0xbba0d4b2,0xbbbc4e69,0xbb2680c5,0xbb5b7af3,0xbbbe6039, -0xbbcedd4d,0xbb76b093,0xba95959f,0x3a46b978,0x396c9ac6,0xb94df612,0x3a320362,0xb9777148,0xbb8f6243,0xbb7ee563,0xbb676d52,0xbbdbb5f6,0xbcceb151,0x3b4a1fd6,0xbb4ea29f,0x3c01b849,0x3c42f85f,0x3c715ca1,0x3c8d900b,0x3c59eb95,0x3b02c57a,0x39f89518,0xbb1ff8b9,0xba999364,0xbb7ed667, -0xbb00dd0e,0xbb0bd6af,0x3b736e4b,0x3beb4fc2,0x3bf2e357,0x3beccc97,0x3bd9e5d1,0x3b9dcd4d,0x3bab1520,0x3bb87cc6,0x3bd07403,0x3b57dfaa,0x390bc8ca,0xbb051cc2,0xba5ef4ee,0x39660b16,0x39a6543a,0xb87e0447,0x3a9fc707,0x3b622c55,0x38cf54c5,0x3a27dd00,0x3c2eb06c,0x3c0c571f,0x3b01d051, -0x3bba6a51,0x3c10dafe,0x3bbf7362,0xbb261a8a,0xbbc5fd00,0xbbe8101f,0xbbc24ee8,0xbb6c220e,0xb94c0704,0x3b892f56,0x3ba7606d,0x3bb92539,0x3bae92ba,0x3b4bfbb4,0x36443641,0xbb6a28e3,0xbbac60ff,0xbbcc2623,0xbbe31af1,0xbbde8323,0xbb929116,0xbabf0139,0x398c34d0,0x3a6ee102,0xba53c19d, -0xbabc0248,0xbab610e7,0xba2de322,0xba462888,0xba3f3fb0,0xbae6630a,0x39ce44cb,0x3886d6fd,0xbae22274,0xbaf99470,0xbc0d8d59,0xbc3b4152,0xbc3f4449,0xbc0fd60e,0xbb8e8362,0x39c96691,0x3b75a72b,0x3be5ce07,0x3c3a60d8,0x3c712516,0x3c8c696a,0x3c8682ad,0x3c711d84,0x3c3941cf,0x3c15422e, -0x3bbfd0d5,0x3ae1d982,0xba3b7ede,0xbb5f8fc7,0xbbb46c57,0xbbc7f691,0xbba8435d,0xbb4bd30f,0x380f50c7,0x3afc5a19,0x3b61cec0,0x3b05c1f6,0x39d4e191,0xbaa03799,0xba8b51c8,0xba482a1b,0xbaa3ec48,0xbab83d40,0xbb2410d1,0xbb67bf54,0xbbc2affa,0x3c2adb2c,0x3c297559,0x3c22b788,0x3c1c80e1, -0x3c112b02,0x3c06eed7,0x3c081733,0x3c0d3f0b,0x3bf70eaf,0x3bcdd493,0x3badf6bb,0x3b1ee58d,0xb81fe5b4,0xbb331c76,0xbb434042,0xbb6436c3,0xbb8310b5,0xbb5cfea7,0xbb36dc35,0xbb2140eb,0xbb1adfa1,0xbb212758,0xbb3dcbf1,0xb7a3ac91,0x3b12adbf,0x3bb1f9c9,0x3bd137e1,0x3c093635,0x3c1e3d4b, -0x3c15ffde,0x3c0bceba,0x3c06ab82,0x3c0e3242,0x3c1d6c28,0x3c23e64f,0x3c1febee,0x3abc17b4,0x3b41f905,0x3b1f98c5,0x3b025444,0x3ad3f1a7,0x3a7a4637,0x38a2fd4c,0xba27a01a,0xbacb0e92,0xbb0d6c37,0xbb28a873,0xbb4c6717,0xbb63ec6e,0xbb8368cd,0xbb813bdc,0xbb84ea02,0xbb88ea93,0xbb9458ed, -0xbba1f11a,0xbbaec248,0xbbb2d242,0xbba3a672,0xbba08356,0xbba27577,0xbbafd0c5,0xbbb3a9b4,0xbb953f8c,0xbb7865c8,0xbb432c87,0xbad197a1,0xb8d56847,0x3a6a950b,0x3a9c59c0,0x3a909cfb,0x3ab40342,0x3b0a5e24,0xbaacd5f6,0xba0df8a2,0xba9d7d5d,0xbac37078,0xbaee97d4,0xbb037537,0xbb0c73eb, -0xbb172919,0xbb2cd9da,0xbb469bac,0xbb652f09,0xbb780ab0,0xbb85c9c9,0xbb9170cb,0xbb8f5bdf,0xbb8fee37,0xbb8f630d,0xbb8e785c,0xbb8ce0ee,0xbb8b2979,0xbb8bbb25,0xbb8d7e19,0xbb953256,0xbb82d2fb,0xbb856540,0xbb9c790d,0xbb888a91,0xbb712b07,0xbb4f9973,0xbb338089,0xbb1b575b,0xbad50427, -0xbab317d7,0xba8297b6,0xbaf61504,0xbac42c6f,0xbb90d6b2,0x3a396d16,0x3a57dc00,0x3a977c51,0x3a839ad4,0x3a990e71,0x3ae0f30c,0x3ad54000,0x3aabd1af,0x38e9964b,0x39a0aedd,0x3a171174,0x3b074b56,0x3aa0f24f,0x3a9bb79b,0x3a6ebf79,0x3ad42d1d,0x3add9bbc,0x3ac5858b,0x3a8c470c,0x3a5b3ffe, -0x3a33a1c0,0x3a24125c,0x3a18f2a3,0x3a1bdd74,0x398fdaa5,0x38f8e652,0xba348121,0xb9b30a30,0xba2d1876,0xbabcf41b,0xba452bae,0xb9ffea5f,0xba9460ba,0x39ab1172,0x3a1a7447,0x396719cb,0x3a311668,0xb8554ac1,0x3a6ed6c3,0x3a1362d6,0x3ad1b610,0x3b5ab7e2,0x3b822e3d,0x3b42055a,0xb939d1c5, -0x3889fe05,0x3a6dd5ba,0x3b9209bc,0x3af7b7d0,0x3ad45e5c,0x3acc9d12,0x3b8bf889,0x3ba8f8f1,0x3b98c1cc,0x3b761c8c,0x3b3e6b6e,0x3b1a8ced,0x3aee4f6e,0x3aa75cb5,0x3a170b3e,0x399d5a6c,0xb9cd2e7e,0xbb28a5d5,0xba81be34,0xba555855,0xbb2ef033,0xbaa57168,0xbadc859b,0xbb8acff0,0xba814802, -0xba0ed250,0xbb1aeaec,0xba54fbf9,0x3a30fa13,0x3b53cd76,0x3b0a95b9,0x3b741cf4,0x3bc30849,0x3be57448,0x3bb2607d,0xba68f31c,0xba8d4337,0xb793af68,0x3c09085e,0x3b7c682e,0x3b7db8f4,0x3b26d992,0x3bd72ad9,0x3becbb5c,0x3bc05efe,0x3b749334,0x3b1924c7,0x3ae2d395,0x3a3d2087,0x394ebc94, -0xbaacd3f8,0xbabe9910,0xbaa216af,0xbbedc0da,0xbb9b7fb1,0xbbe293eb,0xbc3c21ab,0xbc0930d0,0xbbd6b793,0xbc193eb7,0xba936d62,0x38638ae4,0xbb2fd6b4,0xb9204c93,0xbb5af2d4,0x394493ec,0xbac578c5,0x3b1fe79e,0x3c0c2be4,0x3c42ae9f,0x3c11ac56,0xba124b6d,0xbac237bf,0x3b046c5d,0x3c5d10b7, -0x3ba7af8b,0x3b379c3a,0x3b67926b,0x3c4a46d2,0x3c85776d,0x3c7708a7,0x3c43b462,0x3c17c14f,0x3bfe29a9,0x3bbfa95a,0x3b8a474a,0xb8fa8369,0x39861874,0xb9d70b0b,0xbbf923aa,0xbba4aea3,0xbbb60e07,0xbbd42726,0xbc377777,0xbc33d0e4,0xbc7001a2,0xbbd62012,0xbb6e4ceb,0xbc13727a,0xbba63ffb, -0x3c7c6de0,0x3c85de8e,0x3cb37f50,0x3c8e84ef,0x3b85ae34,0x3b512b72,0x3a15e3ed,0xbac17667,0xbb3c34c1,0xbb70bd02,0xbb81afef,0x3bc9c514,0x3c18817f,0x3b58d6f8,0xbbdccb0b,0xbc70e008,0xbcb13edd,0xbca3b6c3,0xbca13182,0xbc9fdeb9,0xbc96f47c,0xbc841ab7,0xbc718765,0xbb86480d,0x3804baa4, -0x3b5946cd,0x3a4c1576,0x3a986900,0x3b265998,0x3b634986,0x3c0f50ce,0x3c5839b9,0x3c701291,0x3c6261e7,0x3c2de580,0x3c5f72c3,0xbb12c736,0xbbbce320,0xbc036b1d,0xbc35dfb7,0xbc695c58,0xbc9c1802,0xbc334fc9,0x3b91e99a,0x3c296d4e,0x3c0cc7b0,0xbbba6bb3,0xbc9a2a83,0xbca24ab8,0xbc294a65, -0x3af0ae5d,0x3c33b1f3,0x3c5265f6,0x3c6a3512,0x3c48f687,0x3c22bd0c,0x3b8769ce,0x3b074db6,0x3b497b3e,0x3b3272f9,0xb97b9de8,0xbb820a9c,0xba86f505,0xb99b28ed,0xbaa97b25,0xbaa2d7e5,0xbb85a6ca,0xbc254990,0xbc8efca5,0xbc2da9fe,0x3c0b5463,0x3b1a08bb,0xbc6220e1,0xbb32bd56,0xbc87b1f6, -0xbbd0ad2e,0x3cf6ac65,0x3c88e9fa,0x3c13d853,0x3badf042,0xbc99a83f,0xbc971fd1,0x3bbb3c6f,0x3c4e5802,0x3c29b70f,0xbba671a0,0xbbcd88d9,0xbc0d07bc,0xbc1f71b9,0xbbf711eb,0xbbd9e988,0xbbf8e287,0xbb8bfcce,0xbb85fbb6,0xbbb8af1d,0xbba1a451,0xbb0ef462,0x3a3c04d1,0x3a45db61,0x39192351, -0x3a2e665c,0x3a29bc26,0x3b08c53d,0xbb85953a,0x3ae1f28a,0x3a2ec5cc,0xbc878595,0xbc7552c7,0xbc1c9948,0x3c7f081b,0x3c7b53a1,0x3c272850,0x3b0eea8e,0x3c76f61f,0x3c963590,0x3c48b699,0x3b5ea429,0xbb1f1a75,0xba864d97,0xbb998369,0xbb5c38b4,0xbb08d180,0x3ae6a42a,0x3b7364ed,0x3b95b101, -0x3be03acc,0x3c00755e,0x3bded0a6,0x3bd0cdf0,0x3bc2a1d7,0x3bbff02f,0x3b0d4c47,0xb803d43b,0xba871095,0xb99776bc,0xb9479f55,0xb9bc9c00,0xba60276b,0x38b517ac,0xb94a7ad2,0xbae62f73,0xbb6a0dd9,0xbbb3c93d,0xbc5acecd,0x3bfe2fb1,0x3bd2dff1,0x3bfa8c68,0x3bf1f44d,0xb916968a,0xbb9f8e2c, -0xbc19f3e9,0xbc27a29b,0xbc0e1c37,0xbbc6f370,0xbafb7888,0xb9754909,0x3abbad2a,0x3b4460a0,0x3ad428a4,0x39d0f622,0xba72197b,0xbb1533ff,0xbb459895,0xbb69e987,0xbb1a25a8,0x387c43eb,0x3b26a698,0x3af4acc8,0x3aa742aa,0xb9111700,0xb979f013,0x39a4e489,0x3a4180cf,0x3a1981ad,0x39717391, -0xbafa46e2,0xb9b9c0ae,0x3a95c2a9,0x3b8d6701,0x3bd0ced9,0xbc1e14c1,0xbc2af454,0xbc053db0,0xbc060680,0xbc007b5e,0xbbda5945,0xbb91cbb9,0xbaaebfed,0x3b9a5f99,0x3c1432f9,0x3c413fa1,0x3c49817c,0x3c3fbbd5,0x3c1edc15,0x3bfd3a34,0x3b968859,0x39f1d482,0xbb1b67e0,0xbb8e08e3,0xbbb7453f, -0xbbc17051,0xbb8d8c8e,0xbad91bea,0x3a948b6d,0x3b0adc9e,0x3aeb4f6f,0xb9edb526,0xbae3712d,0xbb01e87f,0xbaded3db,0xbab93a0a,0xbb127b3b,0xbb29a543,0xbb873518,0xbbbde0e5,0xbc011595,0x3b93f554,0x3b5a7e01,0x3b157434,0x3b3a75b9,0x3b532d2e,0x3b99f3e3,0x3bc1db15,0x3be4eecb,0x3bcaaf2f, -0x3badbc5a,0x3b9bde8d,0x3b24231b,0x3a11ea1d,0xbad6544b,0xbafd2c1d,0xbb18b885,0xbb2fd9e7,0xbb10d8dc,0xbb01454c,0xbb0354ff,0xba924006,0xba3e761c,0xba0ae556,0x3ae02c4b,0x3b856ab7,0x3bf424ef,0x3bf0fa97,0x3bf55813,0x3bfa9cf1,0x3bbc8470,0x3b862b22,0x3b1721c6,0x3b4f08d6,0x3b85aba1, -0x3b92c589,0x3b859645,0x3bc4089c,0x3be26fa3,0x3bd1fac2,0x3bb986e9,0x3b99f6b2,0x3b793f2d,0x3b3c476d,0x3b1a3327,0x3a923ce9,0x3947c9b5,0xba272d47,0xbad12d8f,0xbb1e4a89,0xbb63d14f,0xbb598f83,0xbb5d7898,0xbb61a599,0xbb750dd0,0xbb816b1e,0xbb8cf75e,0xbb87bd09,0xbb490066,0xbb1b41bc, -0xbaed0298,0xbae2824b,0xba8bcc73,0xb9d6ed4f,0x39e3dd81,0x3aa66a75,0x3b207547,0x3b7604fe,0x3b9562c8,0x3b9b662d,0x3b97ce6e,0x3ba6fa80,0x3bb917d8,0x397b3e79,0x3a47a12f,0x3958fba8,0xb7a353f0,0xb93116af,0xb9c3f246,0xba1de24a,0xba5940d7,0xbaa79cf7,0xbae3b6d8,0xbb14fd6b,0xbb2df621, -0xbb463f2b,0xbb66d36f,0xbb5de367,0xbb5ecb9d,0xbb5c03b8,0xbb57ac0a,0xbb52b9e0,0xbb4b5257,0xbb4db0d8,0xbb48067e,0xbb56cb45,0xbb096131,0xbb070ecb,0xbb27b638,0xbb0e358a,0xbaec33e0,0xbac338f0,0xba961b48,0xba63ec42,0xb99b9d0c,0x38b3082e,0x3a0912d0,0xb8f111d3,0x394a6b6b,0xbb45279e, -0x3a076e77,0x3a263311,0x3a8d5c9c,0x3a5791ce,0x3a76d6bd,0x3aa0b2e0,0x3abb8f40,0x3a964750,0xb7dea1d7,0x38c49465,0x39b3739d,0x3b03178d,0x3a666cfe,0x3a5a49d8,0x3a444014,0x3aa06fa4,0x3aac3544,0x3ab17175,0x3a72e236,0x3a3ee6c8,0x3a25c19a,0x39d8e0f3,0x39a8b348,0x39df60b6,0xb91d6568, -0xb9a7640a,0xba3889f7,0xb9fae6a3,0xba3e18d5,0xbac9fadc,0xba1e1ccb,0xb9d0cfcf,0xbab61b64,0x3989cbdf,0x3a104c8a,0xb88ee23b,0x39ec6b4f,0xb9a96458,0x3a73be50,0x39b3dfaf,0x3a8732af,0x3b079e47,0x3b5f4eef,0x3b3287c8,0xb983934e,0xb9a7fddb,0x3a076948,0x3b927124,0x3a825384,0x399635a7, -0x3a280e7e,0x3b29db26,0x3b6f886a,0x3b83a6b5,0x3b5a72ad,0x3b2ef7a2,0x3b10f353,0x3aa77594,0x3a0725b4,0x39e44ffb,0xba680ffd,0xbaabf6b6,0xbb04b581,0xba5a2a9a,0xba0137e2,0xbb24ca55,0xb91512b6,0xb9ede997,0xbb6f5484,0xb96f93d2,0xb9371389,0xbb15368f,0xba6fcb8b,0x3a01897a,0x3b5e4dc8, -0x3af83cb6,0x3b500f02,0x3b8877bd,0x3bd3176a,0x3ba9d008,0xba4ae1f1,0xbab526c0,0xba28d4b8,0x3c07fcc7,0x3b1a4946,0x3b157f28,0x3aef6b08,0x3b9c971b,0x3bb65e6d,0x3bb37aea,0x3b6eb26a,0x3b1a24bc,0x3b084796,0x39a303b6,0xba61bbee,0xba45ecb7,0xbb57b536,0xbb520ba3,0xbbc90102,0xbb997bfb, -0xbbbd68ff,0xbc3b54c2,0xbbc82758,0xbb9e0dd6,0xbc1a307b,0xb9e525fb,0x3a319568,0xbb406bdc,0xb9a41a3b,0xbb58fa2f,0x39809601,0xbad4f7ef,0x3a1183ec,0x3b8b1a36,0x3c23ba1f,0x3c0adbee,0xb9efa782,0xbb1a9b3f,0x3ab3f96a,0x3c5cb067,0x3b36f495,0xbade9de1,0xb992a39c,0x3bdf36d8,0x3c3f52d9, -0x3c53eb33,0x3c352cf3,0x3c106de8,0x3bfd828d,0x3b864ac2,0x3adf5416,0xbaf6cfef,0xbb6f176f,0xbb3f112e,0xbbc56a2d,0xbb1a9d02,0xbb03a8b0,0xbb380f6a,0xbba297fe,0xbbaed792,0xbc35ac42,0xbb6485d8,0xbb0485c6,0xbc20d29b,0xbbac64de,0x3c77ece8,0x3c90926e,0x3cb78c18,0x3ca6dcc6,0x3c517d3b, -0x3b953f63,0x3956db36,0x3b454e0d,0xbb024578,0xbb9bcfb6,0xbbbada78,0x3b96f451,0x3c4669a4,0x3c72995b,0x39d1260a,0xbc1ff5a0,0xbc8812e6,0xbc99c0ac,0xbc9927ac,0xbc8abdbf,0xbc86cf5d,0xbc6011aa,0xbc37964a,0x3b003890,0x3b5b3a0c,0x3a74e283,0x3aca7f61,0x3a75a1d8,0x3afa9e7d,0x3af0ff5d, -0x3ba7ca47,0x3bc125c9,0x3c229667,0x3c50a022,0x3c551d6b,0x3c63d9bf,0xbbbf5692,0xbb855e8a,0xbbb99a88,0xbc17cf2c,0xbc390d1e,0xbc97d87e,0xbc48ccec,0x3b95f01a,0x3c06262d,0x3c26c961,0x3b61d9ab,0xbc69fc0e,0xbca628cf,0xbc51de9c,0xbb8f7a6d,0x3b97f2dc,0x3c355966,0x3c51528d,0x3c2a2660, -0x3bc27b1a,0x3aa6b914,0xb90be954,0x3b020f28,0x3a365429,0xba9d6e65,0xbad6c919,0xb99ec953,0xba4f8492,0xba4fae3e,0xba9c530d,0xbac094e8,0xbb8168fb,0xbc1ab8bc,0xbbb82e24,0x3bd97370,0xbb08657a,0xbb5f3b43,0x3c32d4bf,0xbbe532a1,0xb8d7dc85,0x3ce12b9e,0x3c9cdb73,0x3c67394b,0x3c4fe0ed, -0xbc3a95ec,0xbc8315f7,0xbb58bc3b,0x3c6025d6,0x3c8a94c9,0x3b38a8a3,0xbaea4169,0xbbbb48ca,0xbbdce500,0xbbe0f988,0xbbb1ec9a,0xbb977581,0xbb100ef0,0xbb0d9bb0,0xbb78a5d4,0xbb0ad123,0xb8dda2c7,0x3a6090e2,0x39897688,0x39d3f22f,0x3a2a8a5b,0x399c742a,0x3acb7f67,0xb9752369,0x3b294a68, -0x3af277fa,0xbc7f164c,0xbc00c217,0xbc605cdb,0x3cdf4665,0x3bfeae0e,0xbb7bfb50,0xbc6956f9,0xb9f4d534,0x3c4a1388,0x3cc14054,0x3c1ec42a,0x3ac7120c,0xbafd18be,0xbb8634fb,0xbb76c6de,0xbb0d2076,0xbaa811a7,0xb9a70f68,0x3afe5dd4,0x3bab1bf0,0x3bf2a182,0x3c012a63,0x3bdec1d9,0x3bc3040c, -0x3b88ba13,0x3a01a283,0xb9ce5cd4,0xb9b17a33,0xb9ab55cf,0xb9f893af,0xb9ca9b76,0xba23e794,0xb97fef1e,0xba818abf,0xba68a7a9,0xbba07160,0xbcb03b76,0xbce7985b,0x3c8625b5,0x3c380817,0x3c07d64b,0x3c05608d,0x3b785af2,0xba2bce28,0xbbf4b2bf,0xbc323232,0xbc2c9dce,0xbc07ee05,0xbb9e1118, -0xbb56aabb,0xba9f6284,0x3b006121,0x3aedd06d,0x3b06e5d6,0x3b06d885,0x3a87c4e4,0x3a6bc613,0x3ab28fd9,0x3b43e7e9,0x3b9dc99a,0x3ba92d5d,0x3b37d40e,0x3aacf813,0x3981034d,0x3a161247,0x3a45de9b,0x3a3cb346,0x3a176d10,0x3a3cb65d,0xba0afc1b,0xba43fae5,0x3b24c8de,0x3c1bce01,0x3c8e1b8b, -0xbbe03762,0xbba3f737,0xbb024ed9,0xbb84f452,0xbbcd1847,0xbbffc3c4,0xbbcff264,0xbb7c5764,0x3acbb20c,0x3b92b2ad,0x3bb7ac29,0x3bd9ee71,0x3bde81b7,0x3bc6227a,0x3b974937,0x3b0a02fe,0xbab3eca5,0xbb51b9eb,0xbb7df029,0xbb8960c4,0xbb8e5c5b,0xbb2fd0ee,0xb8fda0c9,0x3abe51cb,0x3aa4d3c1, -0xb957c091,0xbad1cce4,0xbb010429,0xbad27b77,0xbaa7cd66,0xbab0bbb6,0xbb26dee4,0xbb4a71a0,0xbb95ae11,0xbbc662fd,0xbbe2b5d2,0xbaa00702,0xbb435437,0xbb7f6853,0xbb4f368c,0xbb2fad8f,0x394dd00b,0x3b0f84f5,0x3b7f79d2,0x3b8b1770,0x3b9f0d62,0x3bb8d16e,0x3b96c8a9,0x3b6ba3c3,0x3b1ee952, -0x3ad0cf51,0x3a651d40,0x39778ef5,0x3877ef39,0xb9b0dfa6,0xba9bd08c,0x396fe777,0x3aa3c363,0x3b0a5181,0x3b4d7cf2,0x3b9b8aef,0x3bda1d0d,0x3bbfda1e,0x3ba1371a,0x3b94c44f,0x3b2e3c0a,0x3a87ee8d,0xba7c2945,0xb9bb96be,0x381c3e72,0x393460f2,0xba2f2823,0x3befd425,0x3bfd2689,0x3bf44149, -0x3be29fc7,0x3bc7cad6,0x3bb8c17d,0x3ba821a0,0x3ba439ef,0x3b80e64c,0x3b3d6ce2,0x3afafb68,0x3a7590ff,0x38dcd7f3,0xba750ab3,0xba54c151,0xba56a7d5,0xba5d8138,0xba870997,0xba845b88,0xbab01f19,0xbab99a88,0x397691fa,0x3aaa1dec,0x3b102eb8,0x3b33cbf1,0x3b89e337,0x3b8f8260,0x3b9cf709, -0x3ba59c03,0x3bb2a70a,0x3bc29373,0x3bca8cf3,0x3bc8784a,0x3bc2e071,0x3bcfec47,0x3bda9177,0x3b029522,0x3b1b885e,0x3b0b90db,0x3b0ab5d6,0x3b0f7e45,0x3b0336ff,0x3aed968f,0x3adeb1ef,0x3aad86d2,0x3a88e7d3,0x3a349511,0x39dd09ad,0x39075419,0xb99c9323,0xb9394849,0xb95bcd4e,0xb94a93b1, -0xb92f7ad5,0xb93550d7,0x37ad8cf4,0xb99d8947,0xb99f21b8,0xba5a9a92,0x3a901f92,0x3a784aa6,0x39f9d80c,0x39e33248,0x3a1549da,0x3a26ee90,0x3a5097cf,0x3a6ab947,0x3a8c4100,0x3ad82666,0x3b11e292,0x3abe0618,0x3af63bec,0x39dcd2d0,0xb93e7c49,0x3923a240,0x39e89116,0x397ea32d,0x39a60aa5, -0x39b785e4,0x3a43e6bf,0x3a0128a7,0xba0ad172,0xba108066,0xb9bed6d7,0x3a9d07f9,0x3861b17f,0xb6452986,0x380a2cd0,0x395bc96c,0x39a17674,0x3a2dd1c5,0x395d8d49,0x3888ed66,0xb9066a19,0xb8e76951,0xb8aed838,0x39cde7f8,0xba5dbd3c,0xba5dab33,0xb9e283d7,0xba0b55f3,0xba12a7fe,0xba871248, -0xb9b583c4,0xb9939ef5,0xba99248e,0xb73ac041,0xb4b63c80,0xb981738e,0x3832153f,0xb9d0f40b,0x3a02852b,0xb89aba91,0x3974f5cb,0x3a02a54e,0x3b147692,0x3afb2d1c,0xba1d315c,0xba900370,0xb9e690a3,0x3b5600cd,0xb917d124,0xba94613a,0xba5fbb31,0xb7090f45,0x3a8bbb16,0x3b22e866,0x3af71bc4, -0x3abaeeaf,0x3a6cd443,0x3a033aac,0xb9bae0e0,0x399dde88,0xbaff4416,0xbb15d95d,0xbab4b44a,0xbae6fa17,0xbae4b8f2,0xbb408ec9,0xb9aa6a07,0xb9867215,0xbb416eb7,0xb93a4320,0xb9784bde,0xbb042668,0xba89ede6,0x39bce809,0x3b3de6ca,0x3ac7fcdd,0x3b294655,0x3b1cfaaa,0x3bacfe73,0x3b8caa03, -0xba24ed05,0xbb01e0fd,0xbadaf8b9,0x3bd11221,0x3a31f0f4,0x3a089874,0x399fcca0,0x3ad4c4d2,0x3b1f9da5,0x3b8a3a18,0x3b1bd2bf,0x3aa70d00,0x3a584675,0xb9b1f3b5,0xbacd78cb,0x38408728,0xbba135f1,0xbb9890bd,0xbb7b55f6,0xbb927349,0xbb8e5f8a,0xbbfc66fb,0xbb7ac344,0xbb54f8b7,0xbbe0d5af, -0xb994e0ba,0x3a0bb824,0xbb393be4,0xba270122,0xbb1b7ac2,0x39a0720e,0xba9eb261,0xba344f04,0x39d7bfa5,0x3bf5417f,0x3bf54871,0x38f2e0e2,0xbb490c69,0xb883da2c,0x3c2d1023,0x3a5bb113,0xbb9852e4,0xbb8d2eb8,0xba0a9109,0x3b9538b3,0x3c159565,0x3c017dda,0x3bc66f96,0x3b9ccb80,0x3ae86057, -0xba1aabc5,0xbaf866a3,0xbbb0c070,0xbb5bf397,0xbb23cae4,0xb9e86dbb,0xb99104e3,0xb90594f2,0xba65a4c6,0xbaad3895,0xbbac936b,0xbaae2d49,0xba5fb290,0xbc01eb39,0xbb968c38,0x3c4e04fa,0x3c73f7a4,0x3ca85b69,0x3cb0a831,0x3c9a6597,0x3ba276a8,0xba9c01c0,0x3b737ef5,0xbb1b21eb,0xbbb6459c, -0xbbd6a73d,0x3b5679d0,0x3c5caa11,0x3caddec6,0x3bf3fb2c,0xbb5907de,0xbc2375f8,0xbc77bd54,0xbc7fa0fa,0xbc5391fb,0xbc4d4af8,0xbc1b8b1a,0xbba452c8,0x3b97fc7f,0x3b59a0c3,0xb58a486d,0x3a65a4a6,0x378d5265,0x3a108af5,0x393e0052,0x3ab3aa74,0x3ab3991d,0x3b8b4f4c,0x3c0cf0ea,0x3c35ef9b, -0x3c3f4f20,0xbbaf705a,0xb9fa01ef,0xbb408a2c,0xbbff697e,0xbc2342f6,0xbc96a62f,0xbc718199,0x3adea4a0,0x3b589fe8,0x3c05e9a4,0x3c236a94,0xbc1a17fd,0xbc9f8960,0xbc82c790,0xbc0d3a1e,0xb80eb90b,0x3bfcb3a0,0x3c0d1f01,0x3bbe744d,0x3a5e4193,0xbadfce3a,0xbadfab3a,0x3a9eac0f,0xba8ac6e8, -0xbaa0e820,0xb99da1e1,0xb9994640,0xb940da91,0xb958f7db,0xb97e54b5,0xba20eee1,0xb9b79d42,0xbb3dac0b,0xbb181fb6,0x3b3fb539,0xbb6b02d4,0x3bc4c749,0x3c9b4c23,0x3b48f853,0x3b8fa4e3,0x3c90650b,0x3ca09d94,0x3c8f8ad0,0x3c8088c4,0xbb55250c,0xbc3a980c,0xbc34303d,0x3c20e15f,0x3c93e109, -0x3c4134a0,0x3b0ea20e,0xbb7512cb,0xbb86887d,0xbbabad8f,0xbb3c0a34,0x3919c5d2,0x3a9fcfce,0x3a23f8fe,0xbab9a336,0x399c7811,0x3a171909,0x39856f0d,0x39345365,0x39438bca,0x390959b1,0x395aa26a,0x3974c0cb,0x399bc113,0x3ab3b137,0x39f64aac,0xbc068114,0xbaa62970,0xbc574245,0x3c3a7485, -0xbc38b4c1,0xbc9cc13b,0xbcc54c0e,0xbc96f31e,0xbb1d005e,0x3cb6bb51,0x3c706c6c,0x3bfebcec,0xbb85e8d7,0xbb8479e7,0xbbb7f6d2,0xbba53fb8,0xbbb39885,0xbb79a184,0xba2781ac,0x3b31e334,0x3bae7f26,0x3be4d1ae,0x3bcac3e2,0x3b9834ac,0x3a934fdb,0xba2f90da,0xba02cb52,0xb9411a15,0xb9797d69, -0xb96bcdd8,0xb93d2e16,0xb94e845f,0xb937a9fd,0xb9a5a65a,0xb9987c13,0xbba2fc6e,0xbccea084,0xbce3c3d3,0x3cccc09a,0x3c9968fb,0x3c00b88c,0x3b5548cd,0x3b38a877,0xb9ae80db,0xbbbf5bec,0xbc27dcdc,0xbc38d841,0xbc1c091d,0xbbdfd831,0xbbb6b1b5,0xbb53e84b,0x3a823c63,0x3b09b788,0x3b4d55a0, -0x3b6a9f16,0x3b62ce9e,0x3b8aca4f,0x3bb5ab14,0x3bec8c52,0x3bfcffd7,0x3bacd355,0x3b20cf75,0x3a2cf565,0x3987b984,0x39e8e484,0x39dae6b5,0x39b58f29,0x39608963,0x39b6f4bf,0x39bd975c,0xb8e64a1f,0x3b85bc07,0x3c2e64e6,0x3ccc9799,0xbb4f5c3f,0xba07f689,0x3a8fa017,0xba5f50ca,0xbb545f21, -0xbbb32922,0xbba042f4,0xbb84a3b2,0xba0d8bfb,0x39fa5360,0x38b20078,0x3a1d4aea,0x3a1a9dca,0x39903afa,0xb8883545,0xba8ac96d,0xbb3c2dd5,0xbb5e27f9,0xbb541a12,0xbb4041d0,0xbb269854,0xba8889be,0x3a8c9e48,0x3a8eae8f,0x39c28333,0xba5e5734,0xba89ea7e,0xba7583ed,0xba388c61,0xb9e13fe4, -0xba0130ec,0xbabde9c3,0xbb180207,0xbb598058,0xbb8d0fd6,0xbb858e72,0xbb9d9b42,0xbbd830b6,0xbbdf74e6,0xbbca544c,0xbbbef8bf,0xbb5e5c3c,0xbaf0206e,0xba1226cc,0x3a7aa9c7,0x3b3c1990,0x3b9efa50,0x3bb016d5,0x3bbd1148,0x3bc6ed38,0x3b9c9a9b,0x3b6faa88,0x3b2b3de5,0x3afcb907,0x3a8fddc2, -0xb8ba6e97,0x3aae776d,0x3b1c1716,0x3b60f480,0x3b53dfc6,0x3b6c76c3,0x3b611ca5,0x3b3ad40b,0x3ad4c3e1,0x3ad56b3b,0x39332bb1,0xba3d0d13,0xbb164fae,0xbb1e4818,0xbb33e512,0xbb464f8d,0xbb85ce04,0x3bb22f30,0x3b8d7211,0x3b8f3b2e,0x3b8c933d,0x3b835ea2,0x3b878bc9,0x3b8b0123,0x3b932747, -0x3b895e6d,0x3b6b94ce,0x3b4562c6,0x3b244aaf,0x3b0ab15c,0x3ae61307,0x3ae98f14,0x3afa5439,0x3b003eb8,0x3afe69e2,0x3b0859a9,0x3af159f7,0x3b02eeaa,0x3b53f85c,0x3b88d13e,0x3ba72e75,0x3bc377b8,0x3beeadef,0x3be20c7e,0x3bd90140,0x3bd124f1,0x3bbefe14,0x3bb3ca9d,0x3bac39e9,0x3ba310c3, -0x3b9d1022,0x3ba1cb3a,0x3b93b35f,0x3b3d5236,0x3b2bbe9c,0x3b3d2c94,0x3b446494,0x3b51afd7,0x3b4c35e1,0x3b476a81,0x3b48017e,0x3b3f68fa,0x3b4061ad,0x3b3f8e77,0x3b408057,0x3b3cdeb7,0x3b32f5ba,0x3b35e2dd,0x3b32dbe5,0x3b3182f4,0x3b2f8169,0x3b2c7bfd,0x3b32940a,0x3b296476,0x3b2c9176, -0x3b1d52c2,0x3b633de2,0x3b5faf10,0x3b66b237,0x3b512541,0x3b4d5238,0x3b4047d7,0x3b418330,0x3b3b0b1f,0x3b2f0507,0x3b3bbcaf,0x3b4255f9,0x3b4056c3,0x3b432fbf,0x3b503da8,0xba7e0473,0xba0f3876,0xb97f70a5,0xb9ca86f8,0xb9b223f7,0xba111491,0x380fb03a,0xb90a822f,0xba5f8b9b,0xba8f20af, -0xba8555ba,0x38b6af34,0xba25c426,0xba38d6ad,0xba4ba1b9,0xba7b59b4,0xba6d5376,0xb98e126f,0xba2e87e4,0xba476195,0xba86dc00,0xba6be2d0,0xba5f10bf,0xb9846df4,0xbad50998,0xbad6e2f0,0xba2ecdf5,0xba9de59d,0xba908a71,0xba867331,0xba320747,0xba3beeb5,0xbaa9c4e1,0xba317dd2,0xba4c5c83, -0xba7705d6,0xba37c79d,0xba46939d,0xb86cf88e,0xb9e4e090,0xb9e0c642,0xba713c91,0x3a9ac52b,0x3aa0085c,0xb9e2eb72,0xbabf53c0,0xba9c1ba8,0x3ab8255e,0xba24f38f,0xbae29823,0xbb148f6e,0xbb38980e,0xbb030363,0x39c1018f,0x38059f43,0xb8db22f1,0xba44e74b,0xba31b62a,0xbaa83630,0xb8bce561, -0xbb40e164,0xbb517ed4,0xba7d054b,0xbb55f9b5,0xbb6364b5,0xbb51412c,0xba971580,0xba1f2c98,0xbb0501f1,0xba2ea63c,0xba626ce8,0xbb05c79f,0xbaa8ae1e,0x38133095,0x3b0e2506,0x3aa0b863,0x3b061394,0x3a3e1735,0x3b8c2315,0x3b7b42cd,0x3a38bae5,0xbadd14d5,0xbb0246c5,0x3b5b0ade,0x39b98603, -0x37eb2415,0xba835d62,0xbb05e49c,0xbacf8903,0x3b05a975,0x39d33db9,0xb9791c20,0xbaa2423a,0xbab76353,0xbb14a251,0x38b5cbb5,0xbbb898c6,0xbba4de74,0xbae2c8be,0xbb799ac1,0xbb40ced9,0xbb5f2f20,0xbae1892b,0xbaf0b698,0xbb5c2abe,0xba098891,0xb9a0d827,0xbb30afc2,0xba953d24,0xbac62297, -0x3996e1f9,0xba226d9d,0xbab1e2b9,0xbb2d1c7e,0x3baa0025,0x3bdd4dd0,0x3b1b4eaa,0xbb0f45ba,0xba8df45c,0x3bb7d40d,0x3a51e23a,0xbb91c321,0xbbeac7ae,0xbc09a34f,0xbb8a7be9,0x3b6c03e9,0x3b5f2470,0x3b1bea2d,0x3a37f02c,0xba466303,0xbb0f7e2f,0xbabeb023,0xbb999f00,0xbad90664,0x385fbe86, -0x399e8fdd,0x3a6eb81d,0x3a75fc15,0x399a2fa8,0x3995ebf0,0xba5b6865,0xb9cc8756,0xb9d7fbba,0xbba46311,0xbb65839b,0x3c1cf999,0x3c28d2df,0x3c8fde03,0x3caa6871,0x3cafe3f8,0x3bd728a3,0x386a8ac6,0x3b9ad3a2,0xbaade528,0xbb81769d,0xbb7fd013,0x3b624a22,0x3c6b346b,0x3cc5a13c,0x3c77fcd1, -0x3ba7c4af,0xbb4a892d,0xbc295e50,0xbc414b26,0xbc1933ad,0xbc133237,0xbb9cad92,0x396d6312,0x3b5a177c,0x3a9d855d,0xb8ff27ae,0x37c786b7,0xb9cef8bf,0xb9b218e3,0xb9180b03,0x386f3a6a,0x39011162,0x3a116ac6,0x3b6437a4,0x3bc7902d,0x3bf97165,0xbb3c96a3,0x3b51c6b1,0x39e6b82a,0xbb991512, -0xbc02c102,0xbc898232,0xbc84873d,0xbb2da72b,0xba027100,0x3bd4c89c,0x3c65272b,0xbb78e738,0xbc8323e6,0xbc914852,0xbc32eb17,0xbb296cd1,0x3b952208,0x3ba0b5c3,0x3b0d1681,0xbb2e0bcc,0xbb3c9de7,0xbacef980,0x39a90a8f,0xbaaa99d4,0xba090c3e,0xb842fc3f,0x380e9ed2,0x3917787a,0x392ce94c, -0x38c5f077,0xb85fc4b9,0xb7715ab2,0xba087174,0xb9a73d64,0x3a28d960,0xbb1907c5,0x3c5a4722,0x3cb0204e,0x3c20b9bd,0x3ba8c276,0x3b987691,0x3c91d955,0x3ca06ff4,0x3c76f35b,0x3b970df7,0xbbcb468b,0xbc8485a8,0x3b4bd71c,0x3c7464be,0x3c9a27c5,0x3bde5fd1,0xba1b5eb9,0xbad44b72,0xbb2d5b4c, -0xb98c3094,0x3b5ed8b1,0x3b4d46f0,0x3ae55789,0x38a8a689,0x3a380646,0x39736f1a,0x38645edc,0xb798e2d8,0xb890dacf,0xb8b2e62c,0xb8c42ae7,0x3892f2ed,0xb88e6dec,0x398c3033,0x3a5bd0a6,0xbb92cfd8,0x3b3f3006,0xbc574a1a,0xbcacd600,0xbcc12d0b,0xbcad29fe,0xbcbff7fe,0xbccd55b1,0xbc6b42ea, -0x3c08e5f2,0x3c85242d,0x3c6f8b38,0xbb31bdfc,0xbb398d3a,0xbbe660fb,0xbbfe1abd,0xbc03f8bf,0xbbb90edc,0xbb44e375,0xb957939e,0x3af10edb,0x3b7902b8,0x3b7782da,0x3aca263a,0xbaa26212,0xba02b15a,0xb9254eeb,0xb78e6e2f,0xb7cddea1,0x38594d13,0x38a87f39,0x38be9d2b,0x37ef3913,0xb7f06131, -0x387ceaa2,0xbb1a5470,0xbc8cbce9,0xbc79b120,0x3cdc4591,0x3cb8b017,0x3ba52dff,0xbb8ef54a,0xbb131d7b,0xbb75edee,0xbbab0f8a,0xbbf26f8c,0xbc1f662f,0xbc15bc66,0xbbee8188,0xbbc6140a,0xbb6b8504,0x3a08bef7,0x3b039a47,0x3b531bba,0x3b8a4e6d,0x3ba9131a,0x3bd7424f,0x3bfd5cbe,0x3c0f2f4e, -0x3beac395,0x3b52cd7a,0x3a6fe31e,0xb8ed81cb,0x391b3872,0x37a0f08e,0xb859af73,0xb90c3942,0xb90544e6,0xb9406d97,0x391a60c0,0xb9d09ff1,0x3b83c01f,0x3c03fa2f,0x3cb5f5a9,0xb62ef396,0x3b32291c,0x3b4871f2,0x3b1916d4,0x3a08d297,0xbae01ae3,0xbb2c1ceb,0xbb7870ad,0xbb211793,0xbb220377, -0xbb526ce3,0xbb51b456,0xbb76b347,0xbb96c686,0xbb845d38,0xbb66acf1,0xbb5cc979,0xbb3eaf65,0xbb0d9caf,0xbadeb663,0xba6af318,0x3a1c2b87,0x3ac98087,0x3a18263c,0xb89b42a4,0xb9905cf3,0xb84c9c93,0x392fbac1,0x3975b8fc,0x39cdb3d6,0x39c58514,0x3935e280,0xba0b8dfb,0xba4b5d7e,0xbac504ab, -0xb9957e1c,0xbbd36534,0xbbeaff43,0xbbd45371,0xbbc74748,0xbbb46c68,0xbb8a413a,0xbb62fa3c,0xbb468aa9,0xbac5ce9e,0x396c846a,0x3b051ab9,0x3b6b7d4b,0x3ba5d89e,0x3bd4c6c3,0x3bb03b53,0x3b8b509e,0x3b4ff902,0x3b2bcf8c,0x3b0c3ab3,0x3aaba43a,0x3adf76e1,0x3b0da7da,0x3b24c3db,0x3acf101c, -0x3a95f222,0x393e8c39,0xb8c01c19,0xba6ac623,0xba3afd67,0xbacae835,0xbb06d10f,0xbb49af29,0xbb7e8c23,0xbb9f7c79,0xbbb5c081,0xbbca1332,0x3a7ab9bb,0xb9e879a3,0x38c64b19,0x3a192daa,0x3a7b85a6,0x3ac5bb07,0x3b0dfff4,0x3b39724f,0x3b586d7e,0x3b626a21,0x3b661499,0x3b691907,0x3b6c1d4c, -0x3b806e09,0x3b7809bd,0x3b82602f,0x3b848db2,0x3b866d12,0x3b8914c3,0x3b853c36,0x3b806a9f,0x3b9a7e70,0x3ba980c6,0x3bb6c8cc,0x3bc3fa40,0x3bcf7151,0x3bb785db,0x3ba0c5ae,0x3b8e6060,0x3b6486ff,0x3b3a99e1,0x3b269c78,0x3b0b5b14,0x3afcd48c,0x3adf750c,0x3a69d1d3,0x3b383216,0x3b203150, -0x3b3fa5a1,0x3b4c6181,0x3b5d7182,0x3b65aeea,0x3b6b89f1,0x3b73476c,0x3b791a6c,0x3b83680c,0x3b8b6eb4,0x3b93b8c9,0x3b99c7ac,0x3b9e950f,0x3b9d5bb8,0x3b9b9629,0x3b99d6bc,0x3b975b43,0x3b949e19,0x3b967f9e,0x3b8d0f74,0x3b884e9f,0x3b809ff9,0x3b94a4d4,0x3b9070d7,0x3b9b39e7,0x3b913a7c, -0x3b8ca739,0x3b839d15,0x3b7f62a9,0x3b6f9ead,0x3b55c259,0x3b4dd243,0x3b47946b,0x3b3eaf94,0x3b3b68c0,0x3ba3bdb1,0xbad9340b,0xba94f4ee,0xba6ceb2a,0xba6c0daa,0xba6a16e0,0xbab21f38,0xba27afde,0xba308f3b,0xba784a1c,0xbabf1f8c,0xbac9c60a,0xba9a1199,0xba9009c4,0xba975ab7,0xbac3fbdd, -0xbb009411,0xbb02b04a,0xbaab45c9,0xbac1cd9e,0xbac555b1,0xbaf1bb9d,0xbad24e60,0xbac6baad,0xba608f87,0xbb12249b,0xbb0d3c60,0xba5ac2db,0xbae19530,0xbadb4fdf,0xba9c0db9,0xba8c1bca,0xba84c4ce,0xba93fc80,0xbaa48ad2,0xbac1cef6,0xbabb897f,0xbaa8b4e5,0xba8aefa4,0xba2637d6,0xba349e8b, -0xba69dd73,0xbb08b41c,0x389b945e,0x39f86288,0x38752054,0xbacb49ed,0xbaec28ac,0xba7919fc,0xba34c657,0xbad38992,0xbb565e02,0xbba23ff3,0xbb978c32,0xbb044c5b,0xbae1503e,0xbabf47bf,0xbb0fbf9a,0xbadbb391,0xbb032d51,0xba308a6a,0xbb59e1f9,0xbb6c1be9,0xba9965cc,0xbb894839,0xbb8b6448, -0xbb2dc92d,0xbab93ea1,0xba641f6e,0xba75ab9e,0xba9d2a7b,0xbacd7d46,0xbb042080,0xbacf93d0,0xb9643fec,0x3ab90e03,0x3a972ed2,0x3ad8852e,0xba610ef3,0x3b4745cc,0x3b5494b0,0x3b2d39b3,0xba7d19d5,0xbb01fc3a,0xba26a932,0x3a547a79,0x39fb624c,0xbb023c32,0xbba4fd26,0xbbab1154,0xba7e04d7, -0xbad65c17,0xbad57b4e,0xbb4e5ead,0xbb2320de,0xbb338b23,0xb9fad425,0xbba41032,0xbb78c6c7,0xb9758719,0xbaecee21,0xba2f7e94,0xba0c3d50,0xb97762a5,0xb9ff2f7d,0xb9d7fdb9,0xba1fbd87,0xba8ea15b,0xbb11d204,0xbab99ba9,0xba79df70,0x399d4254,0x391df655,0xbab661e0,0xbba282d8,0x3b1c6bb7, -0x3babb890,0x3ba5b79b,0xba4ed0f7,0xbb104dcc,0xba755ad2,0x3ac37e9f,0xbb0e88a9,0xbc0a481a,0xbc67c944,0xbc43e042,0xbb475414,0xba9a5387,0xba69aa75,0xbb39f477,0xbb32a693,0xbb362146,0xba9be2c4,0xbb11b6fe,0x3a0514ee,0x39ba984a,0x3a1160f0,0x3a0c675a,0x39620357,0x3954c2b7,0x391f808d, -0x39188b88,0x38bc6622,0xb98df5f6,0xbb27491b,0xbb1267bc,0x3bd4b68e,0x3bd0c646,0x3c5c607f,0x3c90d13a,0x3cb2824e,0x3c1d40a1,0x3b824465,0x3bdfd95c,0x3a8484b9,0xba8029ee,0x398f210b,0x3b84375b,0x3c5a1336,0x3cb81ef2,0x3ca7bb84,0x3c505c97,0x3b0f8a01,0xbbbc5baa,0xbc07b474,0xbbe4d925, -0xbbbbc4b8,0xba9acbce,0x3b0d0ecd,0x3a48bd04,0x38924c1f,0xb989f679,0xb9655d07,0xb997266f,0xb8f8e593,0xb8fcdde9,0xb8a68c8e,0xb7600da6,0xb8f0661a,0x39e60a6a,0x3af0496c,0x3b7041cf,0x39e3ad9e,0x3bad867f,0x3b79cae4,0x39be0525,0xbb64c4ae,0xbc479784,0xbc6c231d,0xbbc888ad,0xbaf3dfd6, -0x3bc265be,0x3c6cce99,0x3ad1c333,0xbc27f841,0xbc8ac31e,0xbc514734,0xbbb96215,0x3a51b906,0x3b0771c4,0x3a1e3c3d,0xbb49a210,0xbabe930c,0xb9bc668c,0xb9bb2252,0xba0acc52,0x36c630aa,0x38eb9891,0x3903333e,0x391da9a2,0x38a91d80,0x38b859eb,0x359b40ff,0x391ecafd,0xb8c11ec3,0xb9760ebd, -0x3a00152a,0x39f2ca06,0x3c89bcbf,0x3cac6d50,0x3c4b42a5,0x3b6141b1,0xbbc10357,0x3c6ee1b3,0x3cacad9c,0x3c75f72f,0x3c478142,0xb9b5c476,0xbc8d68e6,0xbb652eff,0x3c144281,0x3ca6aa64,0x3c43012f,0x3ba728b1,0x3ac52fb4,0x3a3501de,0x3ad9c538,0x3b7c169d,0x3b1396f1,0x3a6b6283,0x39dba4d3, -0x3952a8af,0xb600370a,0xb89bd3e5,0xb8c50d17,0xb8bda82c,0xb8ce8dbe,0xb7d533ab,0xb9296654,0x38e1c7b9,0xb9e7a9f2,0x3aad658c,0xbb20f170,0x3b44fecd,0xbc6bc19c,0xbd3830a7,0xbcb8dbbf,0xbc33a525,0xbc708b8e,0xbc93f6f9,0xbc894f2a,0xbc07c548,0x3c54da31,0x3c95379c,0x3b7b5288,0xba0546b8, -0xbbf1b876,0xbc0664b4,0xbc13883d,0xbbe5e2da,0xbbaa01ad,0xbb4fe042,0xbb0b9fcf,0xba03ceeb,0x38c44576,0xba977af0,0xba8495ab,0x39170112,0xb7a82d3d,0x38ccf330,0x38cea57c,0x3907e88b,0x38baab91,0x3912e61a,0x389722bb,0x396ed4c3,0xb88cfd6c,0x39f3f4f0,0xbbbc039e,0xbb80fdb0,0x3c887727, -0x3c815ae1,0x397728b7,0xbc12c12d,0xbbf6fc0c,0xbbe7f486,0xbb9b6f2b,0xbb6a716e,0xbbe3d6e7,0xbc061da3,0xbbedd5d8,0xbbbb495c,0xbb534330,0xb948ad9d,0x3aa75822,0x3b367a5c,0x3b9ce570,0x3bc93e95,0x3bf2e2a0,0x3c0255bd,0x3bf7bcaf,0x3b92d891,0x3a836e4d,0xb90dffcd,0xb8bff196,0xb8f8fc6d, -0xb9593793,0xb948abf2,0xb95a1806,0xb946bed4,0xb9aa6655,0xb8ad24f7,0xba2ec491,0x3a4ce4f2,0x3ba98bde,0x3c2f7595,0x3b710dc7,0x3bc21921,0x3bb389f5,0x3bc14989,0x3b898648,0x3aedbc82,0xba4a1338,0xbb4e392e,0xbb882501,0xbb94be24,0xbba35f24,0xbba3a53d,0xbbba307a,0xbbe1f3e2,0xbbb31059, -0xbb854ea8,0xbb3a7162,0xbae87007,0xba23e65a,0x3951360b,0x3aaaf9a5,0x3b03a4d1,0x3ad01ac7,0x39d10510,0x390c4aa8,0x39bfb438,0x39c2ab75,0x39e33f73,0x39c4732f,0x39f90d76,0x3a083b93,0x3a2c9903,0x3a12eeb2,0x3a9bc8d4,0x3aa15514,0x3b314cae,0xbba751cd,0xbba5fa16,0xbb8c094c,0xbb8e62a2, -0xbb7a2f98,0xbb536281,0xbb3caf16,0xbb3fe1b2,0xbb05e64f,0xbaabee11,0xba03d870,0x3a7f990b,0x3b230fbe,0x3b837d66,0x3b683efa,0x3b422270,0x3b1de3cd,0x3b1d6873,0x3b1d4cf6,0x3b20fbf5,0x3aed7ad7,0x3aa6b932,0x3a5f731f,0x373a20ca,0xba0bcc62,0xba7dcf0d,0xba6a1403,0xba82511a,0xba4e273e, -0xba836d68,0xbaa971ae,0xbaeb1c21,0xbb35dc8b,0xbb800f64,0xbb9d4b2d,0xbb9e64a7,0xbb190f46,0xbb6350d5,0xbb27f30a,0xbad1d61a,0xba500e4a,0xb911465c,0x3a38d314,0x3ad1f71e,0x3b1e1bf9,0x3b4c4ac9,0x3b713e4d,0x3b86e519,0x3b926e5c,0x3ba9978d,0x3ba1d34c,0x3ba5c823,0x3ba583a3,0x3ba630e3, -0x3ba400cf,0x3ba495f1,0x3ba0d793,0x3b98c338,0x3b8e3752,0x3b82fdd6,0x3b720c93,0x3b439aff,0x3b101e0f,0x3abbe6bc,0x3a5be25a,0x38c95aa0,0xba0229a2,0xba37ba59,0xba850e02,0xba872605,0xbaafbbe1,0xbb0f85ac,0x3b20b02b,0x3ae8f7ac,0x3b18f8f0,0x3b24de2e,0x3b35a119,0x3b48de80,0x3b56d9f2, -0x3b623829,0x3b6f9218,0x3b805bf3,0x3b8aed0b,0x3b96619e,0x3ba09e1a,0x3bab9cbe,0x3ba824d3,0x3ba677df,0x3ba452a3,0x3ba19f20,0x3b9f5d11,0x3b9c1985,0x3b9e0478,0x3b9ca4d5,0x3ba1fbf8,0x3b90faed,0x3b94fe4c,0x3ba5b5e1,0x3b9f748f,0x3b98dff2,0x3b8ff6b1,0x3b88aede,0x3b7e9083,0x3b607c5b, -0x3b41ba46,0x3b246364,0x3b40b769,0x3b2c6716,0x3ba7dbaa,0xbaf6bef8,0xbac09a0c,0xbaa7d763,0xba94ac00,0xba95aafd,0xbae17827,0xba88855c,0xba75bc79,0xba30813c,0xbabbee32,0xbada4fcb,0xbb04e31b,0xbaa2555f,0xbaa115ca,0xbae1844f,0xbb127187,0xbb19db83,0xbafe74a9,0xbaef8a32,0xbaec5adb, -0xbb05e76f,0xbaf99ac6,0xbafaa00b,0xbac7acb4,0xbb0d1dad,0xbb0aa873,0xbaa29b57,0xbb12455d,0xbb142b53,0xbac91ae0,0xbac1ee7b,0xbaae2e5d,0xba829fe1,0xbace8ec8,0xbae43bf7,0xbaee37ca,0xbad92084,0xbab7c6fe,0xba95e8df,0xba5d4461,0xba924215,0xbb27d9d4,0xba4c673e,0xb8c33fae,0x3a59bbe5, -0xbaa2b514,0xbb02ac7d,0xbb3bad57,0xba33e69b,0xba9533a7,0xbb577685,0xbbaaa0eb,0xbbb201b3,0xbb71cfe8,0xbb35eda4,0xbb0f7962,0xbb334fea,0xbb0f1c9c,0xbb056ad5,0xba876f43,0xbb52de63,0xbb679ba9,0xbab34d7a,0xbb559860,0xbb406e97,0xbabba55e,0xba718685,0xba11f901,0x38e7abdb,0xbab10455, -0xbafa295b,0xbadeb594,0xbada955b,0xba0c02b9,0x3960c93a,0x3a5cc4d7,0x3a8350d4,0xbaf5ef95,0x3ac7ec7c,0x3b12e9ed,0x3b918615,0xb908728d,0xbadf2c43,0xbb84c605,0x3a6559ee,0x3a7044eb,0xbb0e3bfb,0xbbb70b15,0xbbd0f12a,0xbb640ae6,0xbb3e5cb1,0xbb174418,0xbb7b2b8e,0xbb3625ec,0xbb260f37, -0xbaa0a88d,0xbb3cc3ff,0xba9979a7,0x39df0f77,0x38a7e3c4,0x3a1a9a22,0x397ff092,0x396ba181,0xb8868939,0x39a95f92,0xb993e595,0xbaa39e9d,0xbaebbe3e,0xbaae7635,0xba7a7b09,0xba08b443,0x39ad9813,0xbab06cc6,0xbbbcf4ab,0xb99f3e59,0x3b5d31ce,0x3bf10073,0x3a1b3d25,0xbb4afa86,0xbbdcc2d3, -0x3a8e8151,0xb8723bf9,0xbbf6afc2,0xbc6e08d6,0xbc70c7f4,0xbc08e9a8,0xbb973a1a,0xbb42a5e5,0xbb936101,0xbb5d9046,0xbb16fdd2,0xba375d7f,0x38d0f508,0x3a36b1c7,0xb8f43471,0xb6b9c3ae,0xb9239a28,0xb8d70477,0xb88905c4,0xb6e19ac2,0xb907beee,0x391a7d78,0x39896f36,0xba880f55,0xbabb210c, -0x3b82b4a3,0x3b8464e3,0x3c01204d,0x3c3f261e,0x3c9a54a4,0x3c2f3026,0x3bd2bdfb,0x3bdaed0f,0x3b6e3feb,0x3b3dff12,0x3b82f9f3,0x3b94caba,0x3c28a314,0x3c8ba13a,0x3cad91c3,0x3c8a6c4e,0x3bc65974,0xba80fa04,0xbb8f0f7d,0xbb99a10c,0xbb40e467,0x3a4e8f6c,0x3a7867e8,0xb960863d,0xb93282ef, -0xb86e4ab6,0x38126347,0x38143ddf,0x386074bb,0x37f99d7d,0x37a3d941,0x37cc46e9,0xb89f863e,0xb731d28c,0x3909dc9d,0x3ac4b78a,0x3b16a883,0x3b9b9a64,0x3baebb23,0x3b98c40f,0x3aca4017,0xbbcbeb51,0xbc211d60,0xbbe5b6f6,0xbadf7625,0x3b9c39f6,0x3c3099e5,0x3ba243f8,0xbb77d642,0xbc4eaa1f, -0xbc539ecf,0xbc14efca,0xbb74c1d1,0xba8935fc,0xb9855160,0xbaa87d5b,0x39f101ea,0x3914f524,0xba050536,0x389de1e3,0x38e60803,0x37d090db,0x35f558a7,0xb792c075,0xb7c60c04,0xb6f9632d,0xb6d7e6a1,0xb79ed4f4,0x38a47d69,0x3743f1a4,0xb92010de,0x3abb33ef,0x3c685192,0x3c8f14c2,0x3c27ab07, -0x39f99fe5,0xbc2ecfda,0x3c0285ce,0x3c8704f2,0x3c3f93b5,0x3c5f7ee8,0x3b443ca6,0xbc65f876,0xbbf83a63,0x3b17c912,0x3c77d050,0x3c6d22c3,0x3c335dbc,0x3bb16a2d,0x3b8d190a,0x3b5442b5,0x3b30c67e,0x39d94664,0xb79ed928,0x39976cda,0xb8d57edf,0xb868cb70,0xb824757a,0xb72c7ff9,0x36433278, -0x36e1aec1,0x36f5d6c7,0xb7447c1e,0x3869fefe,0xb9838a72,0x39afd42c,0xba5563c5,0x3ac04519,0xbc69b0da,0xbd372007,0xbc76bc40,0xbad2095e,0xbb971180,0xbbe53a3c,0xbc47eedf,0xbc8c3f26,0x3b8b711c,0x3c6183f4,0x3c2a5c14,0x3ace7502,0xbbcbddbc,0xbbe81c9e,0xbc0c7c5d,0xbbfb7c58,0xbbd89529, -0xbbacc9f8,0xbb9f9971,0xbb7f725a,0xbb2d48cb,0xbaca7ee5,0x3911d1cf,0x38426a75,0x38ba1d90,0x38784471,0x3802a1aa,0x370233f3,0x36ad6d50,0x36015f5c,0x375e597a,0x37c4de95,0x38e0de5a,0x38b8b510,0xb8e47230,0xb954c1a6,0x39b64461,0xba526c1e,0xbb44a4ee,0xbbd84edf,0xbc09c312,0xbbd934c8, -0xbb67eb66,0xbaafb8d4,0xbb8e1c9d,0xbbdb0f7c,0xbbd851f4,0xbbac69ce,0xbb46d694,0xbabe7aaf,0x38d28628,0x3afac17a,0x3b91a417,0x3bbb1001,0x3bd503f3,0x3bd81d71,0x3b9f3a97,0x3af682ba,0xb9a2097b,0xb92eb219,0xb9067b22,0xb9065596,0xb8588e5f,0xb81c7758,0x33514a79,0xb7e217ed,0x3779034c, -0xb93e2fb9,0x38cb728f,0xba8485b9,0x3ad93d9a,0x3914e524,0x3baeb301,0x3bf0eb9e,0x3bd2b930,0x3bdb93a6,0x3b9a1584,0x3b280eac,0xb9e32442,0xbb1a6c85,0xbb9b4a1f,0xbbaf7200,0xbbbc5e1a,0xbbb1690c,0xbbb89de3,0xbbd32bcb,0xbb8e0462,0xbb3b4bde,0xbaf1d239,0xb9de0d53,0x3a6b3ce5,0x3b09ba54, -0x3b2a65a8,0x3b136235,0x3a51792c,0x3989ea38,0x39a8d916,0x39657714,0x390331fe,0x386c4c33,0x36dc5ec2,0xb781fc98,0x3881ebbb,0x38a5b951,0x39d46274,0x3a00ac73,0x3af3c4bf,0x3b598700,0xbb4d38a4,0xbb3de940,0xbb213005,0xbb353c81,0xbb254791,0xbb146b3f,0xbb093c32,0xbb179e8f,0xbb003e02, -0xbaff83ce,0xbafe5b7f,0xbabf50f3,0xba5da6f8,0xb98f148f,0xb8cddc92,0xb7a5c5bf,0x38a65d89,0x39e1a7df,0x3a2779c2,0x3aa267f2,0x39b29254,0xb99c86ae,0xba1a6a95,0xba7bca1f,0xba5ec570,0xb9d2d727,0xb96b89fa,0xb8000db8,0x389f2e3c,0x391ee167,0xb7c5c48d,0xb84b6cc0,0xba7a9278,0xbae97ec6, -0xbb32f1aa,0xbb37c36b,0xbb7539d6,0xbb82d781,0xbb4e761f,0xbb19a129,0xbad63443,0xbaa0a9f8,0xba2aa797,0x379de3d8,0x3a3039c5,0x3ab1f219,0x3b02683b,0x3b21485d,0x3b3c8af8,0x3b65dd8f,0x3b64a970,0x3b6e9145,0x3b756a2d,0x3b7d559c,0x3b804ae9,0x3b8836d4,0x3b818d46,0x3b4094cc,0x3b1106ca, -0x3ac8f691,0x3a5aecd7,0xb8a7d759,0xba0f9456,0xba740925,0xbaaf6925,0xbae57dbe,0xbb0fb6f3,0xbb220b73,0xbb32a383,0xbb36166c,0xbb45cad8,0xbb5a7821,0x3a47ed92,0x39aafd44,0x3a258c06,0x3a440e4e,0x3a6fc87b,0x3a9b1576,0x3ab53b64,0x3ac6625f,0x3adc6b1a,0x3af3ea2a,0x3b0855f9,0x3b1a7400, -0x3b2c1ecd,0x3b3fbcc1,0x3b3db8ac,0x3b3f1d76,0x3b3f36a7,0x3b3f54de,0x3b401e59,0x3b3b5ae5,0x3b4618d2,0x3b4937ab,0x3b615bbd,0x3b19ef06,0x3b2a068d,0x3b42fd77,0x3b35373f,0x3b217a5a,0x3b10f616,0x3b00b2f8,0x3ae5f58c,0x3abe925b,0x3a8fbd02,0x3a3762c6,0x3aa98549,0x3a6b3a99,0x3b328e12, -0xbad72ac8,0xbab29921,0xbaafaf8b,0xba8ef203,0xba8e137f,0xbac72054,0xba916355,0xba7df7a5,0xb9d9a933,0xba9dd51b,0xbac2bd47,0xbb0d73b3,0xba9b4e4a,0xba910dec,0xbac53252,0xbaf0641a,0xbb012558,0xbb004928,0xbadcbb65,0xbad3d3e5,0xbada4eca,0xbaceb3b5,0xbad2314d,0xbaba7298,0xbad4ba78, -0xbaeb4729,0xbabd7763,0xbb0a1c00,0xbb03d50f,0xbaad7162,0xbaa73f1d,0xba8c6b54,0xba085bbc,0xbab3a972,0xbabef992,0xbac64762,0xbac1e97c,0xbaa9e663,0xbab7c6da,0xba633564,0xba895d98,0xbb09956b,0xba91777f,0xb9f0c5ca,0x3a84e8b7,0xba8330d5,0xbafa1579,0xbb64bc75,0xba5f5230,0xba596870, -0xbb282032,0xbb7ce8ca,0xbb8f8cf4,0xbb81adc9,0xbb3f39e8,0xbb120349,0xbb170c20,0xbade66a3,0xbaafe638,0xbab50a9c,0xbb1e20f4,0xbb05b946,0xba0f7385,0xba8b6d49,0xba67adf4,0xb9a55d6d,0xb9817a48,0xb924edd7,0x39eb30b5,0xba61b4dd,0xbae03c87,0xbab31337,0xbaab53b8,0xba2eda5e,0xba7faed3, -0x3992a439,0x39a31825,0xbad6179f,0x397d2003,0x3a672fc9,0x3b8d3e6c,0xb898082f,0xbad43044,0xbbafd1a1,0xb6c77d3a,0x3a09a2aa,0xbaf4833b,0xbb84618b,0xbba40c63,0xbb8e2dc0,0xbb4c82a9,0xbb14839a,0xbb420d0c,0xbaf4a43c,0xbadb615d,0xba617802,0xb93e763f,0x39c9dc22,0x39a8d22b,0x39a1ac46, -0x39c57446,0x3921ee2c,0x3916c91d,0x374d0744,0x373415d6,0x394566f4,0xb960dc38,0xba899beb,0xba90b854,0xba83ad06,0xbacde037,0x37225186,0xba833837,0xbb891253,0xbacf6601,0x3acb8139,0x3be0b9a5,0x3a134309,0xbb6ddfd6,0xbc11786c,0xb9b74a3a,0x3a023373,0xbbad4264,0xbc27c652,0xbc41aa74, -0xbc2123ae,0xbbc48e18,0xbb734c98,0xbb82c1c1,0xbb1e30ff,0xba722a1e,0x38e19740,0x3969b839,0xb8efd27f,0xb9228fce,0xb907766a,0xb91fc3c6,0xb8be82f2,0xb83d645c,0xb6f402ba,0xb7549de5,0xb883434c,0x3959a1b3,0x39019b1f,0xba3429ca,0x3b0aaaac,0x3b1e930a,0x3b342d17,0x3baad822,0x3c505a19, -0x3c07f797,0x3bb1fb97,0x3b4e07fe,0x3b90e02a,0x3b9cbe1b,0x3b865d6b,0x3b477bff,0x3bad8e47,0x3c1a80d5,0x3c80d079,0x3c715240,0x3beaa8c4,0x3b272639,0xba142400,0xbaf62305,0xb9c9fa6d,0x3a491bef,0xb8bdf4bd,0xb89ccc18,0x36d9e8ab,0x38b66889,0x3868f77b,0x38905ad0,0x384d7dd4,0x379fbb81, -0x3648e291,0x381b55d8,0xb735aedf,0xb8645bd1,0xb8c35eb8,0x39deb82c,0x3b025e18,0x3b2a4857,0x3b907185,0x3bc15b86,0x3b942958,0xba9d67b7,0xbb99181e,0xbbb40fa5,0xba9280c2,0x3b3e92e9,0x3bc24e22,0x3bb9bf99,0x3a4e7c43,0xbbe43513,0xbc311552,0xbc2f67e5,0xbbe79c71,0xbb874f0f,0xbaf00f3a, -0xb9881460,0x3a377355,0xb90f4b3d,0xb8a1d1ec,0x38dd7349,0xb7e9282d,0xb7d800e5,0xb828ab26,0xb7f28e76,0xb7f9a5b4,0xb75b9fc3,0xb7b66260,0x370e04ba,0xb7da6f42,0x384f32fd,0x38a1da54,0xb969954f,0x3c02e24a,0x3c3d387b,0x3bd200a5,0xba4f324e,0xbc1cad38,0x3ab7e5e9,0x3c0ea8d3,0x3c0266ce, -0x3c2d09a7,0x3b8a7f9b,0xbbfdaed4,0xbbf2a019,0xbb03408a,0x3bf6c812,0x3c4e4405,0x3c51b800,0x3c052ef6,0x3bcea2b7,0x3b7e29a5,0x3ac42805,0xb9bbd499,0x38bbea39,0x38109944,0xb89625ad,0x37a1f3b9,0x37622d2a,0x37ee93ad,0x37c34250,0x37b0e63a,0x37f103c3,0x35ecf13e,0x382f6479,0xb7b88161, -0x389da41c,0xb93021e8,0xb9ce5b45,0xbc20e666,0xbce36d47,0xbc1b2bf7,0xb99163ac,0x3b1a55ee,0x39d0785f,0xbbb40ddc,0xbc5ed1fc,0xbb3594e6,0x3bc7c07d,0x3c4ea5bb,0x3b89383a,0xbb0fa385,0xbb98e3dc,0xbbc3c44f,0xbbc8346a,0xbbc8f401,0xbbab510e,0xbba150b9,0xbb9855a9,0xbb35dfe6,0xb9324318, -0x3948fec2,0xb6160ea1,0x37d48964,0xb7f57263,0xb7bfe85a,0xb7fd259a,0xb81153c5,0xb818c7c1,0xb8021ff5,0xb8382258,0xb70db2ea,0x381682c9,0xb87ab884,0x3aa486fb,0xbc02af7d,0xbc4a0bd6,0xb98fb7a2,0x3b09e158,0xbad5ac97,0xba461868,0x3850ce52,0x390a6382,0xbafddbe9,0xbb8a7cff,0xbb8c4dd6, -0xbb851bfe,0xbb24090d,0xbaff2b59,0xb9b4d098,0x3a9cf8a3,0x3b48838a,0x3b8570d4,0x3b971efc,0x3b9e0dc2,0x3b3a4c2a,0x3932909a,0xb9b66ce5,0x37e6f847,0xb8551c7f,0x384d4726,0x38094a77,0x386d97c4,0x388f92cf,0x387581f5,0x38b3e8f8,0x385b9958,0x38b8e7f6,0xb9081b52,0x3951a074,0xbadd1347, -0x3bab1822,0x3bc6ff7d,0x3b9745ca,0x3b84c906,0x3b32ffc0,0x3abe7827,0xba108e2c,0xba9ff416,0xbb5d805a,0xbb850450,0xbb952bdf,0xbb8b47da,0xbb85d3a7,0xbb85200d,0xbb06323e,0xba5fe39d,0xb98836ac,0x3a89c7e5,0x3b071338,0x3b480d19,0x3b406362,0x3acfe98c,0x39087ccf,0x395e4190,0x36c2c434, -0xb85d1f7b,0xb8b66927,0xb8f30037,0xb910e676,0xb91cf4ca,0xb9163afd,0xb95bb068,0xb7b7baef,0xb830bf84,0x399dbf74,0x3b15d113,0xba83299f,0xba00530a,0xb9de3d54,0xba3fb717,0xba719c4f,0xba7bd418,0xba75a082,0xba95e977,0xbaa3f2c3,0xbacf72d6,0xbb02f906,0xbb0e439c,0xbb139d86,0xbb21ade1, -0xbb081dca,0xbae359c8,0xbab557ff,0xba8be0e9,0xba6f57ad,0xb9cd0db8,0xba6d8c75,0xba7fb4f9,0xba2217f2,0xb9ac458f,0x3824314a,0x39475237,0x395603a7,0x3992f950,0x39a62605,0x39ba895c,0x39baf3b9,0x39ffcf2c,0x39a7d6f8,0xb8743287,0xb9ac6dd2,0xb9e1e9e1,0xbb321e41,0xbb20891b,0xbb0629a1, -0xbadc289c,0xbaae05c7,0xba9321cf,0xba6aedd7,0xba1bcb25,0xb98bd39e,0x38ce03f3,0x39f0b00f,0x3a3b933f,0x3a798675,0x3aa328b9,0x3abad915,0x3ad2262c,0x3aecdd06,0x3b02cb1a,0x3b0ce4d8,0x3b237c06,0x3b1a9a53,0x3a9963fb,0x39d8b614,0xb940ea1b,0xba01dad4,0xba22a644,0xba2e1432,0xba497e99, -0xba681df6,0xba846c49,0xba8eae0b,0xbabde920,0xbaec11d7,0xbb0c2a76,0xbb1f8d38,0xbb1f0e66,0xb9b0576b,0xba000a17,0xb9d716eb,0xb9b18247,0xb98876b2,0xb91382aa,0xb81f310b,0x37d064b8,0x38a51918,0x390f5787,0x39646215,0x39b1ed2e,0x39f8c434,0x3a20f25a,0x3a2fb8a1,0x3a414e43,0x3a4e8122, -0x3a609473,0x3a72b3f8,0x3a71275c,0x3a8e984d,0x3a9a09fa,0x3abf6b20,0x3a194fad,0x3a1ff821,0x3a0f1122,0x39b17a57,0x38fd1b42,0xb864d42b,0xb97a11c5,0xb9d2a0a5,0xb9fe9042,0xb9fc8f91,0xba0a4abc,0xb911a31a,0xb99c023e,0x3a05fe63,0xbaa25994,0xba9397d8,0xba9866b2,0xba749580,0xba6b705d, -0xba8c0337,0xba7bc7bf,0xba655af2,0xb9ca3e29,0xba7ceaa7,0xba9a51ee,0xbaddb853,0xba88342b,0xba7947e0,0xba95a872,0xbaa1aa20,0xbaae2262,0xbac770f6,0xbaa8279c,0xba9db7cd,0xba90d02c,0xba8b3447,0xba8c317b,0xbab622ff,0xbaa02765,0xbaa8f9f4,0xba9068a0,0xbaaa6509,0xba9c2e20,0xba60aca8, -0xba613b57,0xba3d8793,0xb9a8b2d4,0xba8579fb,0xba95723d,0xbaa649aa,0xba97230d,0xba8d5347,0xbaaee16d,0xba5b0fef,0xba64244c,0xbaa6a9e9,0xba86967b,0xba2c052e,0x3a006343,0xba79d0b7,0xbad69043,0xbb38dfcd,0xba89e011,0xba5b8929,0xbae3ae8b,0xbb0fe026,0xbb2dcbb2,0xbb465021,0xbb1a0777, -0xbaeb5a50,0xbabeb5d2,0xba742636,0xba4aa34b,0xba84a9d3,0xba1084a9,0xb9551dfb,0x391625f1,0x3855d3c9,0x3881e0c8,0x38da5635,0x38b5705c,0x382b1664,0x393ad8cf,0xb8b439d6,0xba1acb16,0xba705812,0xba7135e3,0xba4a44db,0xbad41878,0xb9a67999,0xb989c9cd,0xba522b90,0xb9ddf663,0xb94a4dfc, -0x3b28e9c4,0xba028776,0xbaca263d,0xbb8c7c29,0xba7d0d08,0xb9a0a154,0xbabae23c,0xbb056bf3,0xbb336914,0xbb618f00,0xbb1ff0af,0xbae20b80,0xbac42d3e,0xba37031a,0xb9cb28c4,0x3908bad6,0x398d874b,0x389dfb4f,0x36286e25,0x374b37c5,0x37653bc8,0xb7bc28c0,0xb69d5dd1,0xb7029b28,0xb880eaad, -0x38a1eb6e,0x3960dfca,0x3812f192,0xb9f22ae0,0xba187354,0xbb0be917,0xba05c6a3,0xba3c472b,0xbaeecdc1,0xbac4a944,0x3959b037,0x3b85ff81,0xb9cb4278,0xbb61537b,0xbbe7a433,0xbad1327b,0xb9827da6,0xbb4babea,0xbba5b1d4,0xbbdabcc0,0xbbf8ca1a,0xbbab4c66,0xbb5a9994,0xbb16b09f,0xba4cc3ce, -0x386c0662,0x37605657,0xb9107bbd,0xb84dde63,0xb7055e29,0xb7986c29,0xb74d4d35,0x3774151f,0xb68bc6da,0x37195414,0x3732d5df,0xb812554d,0xb8e0f995,0x389dcbde,0x386d295f,0x3a2d6e31,0x3a9d6934,0xb8532bcd,0x3a91db11,0x3bc5811f,0x3b8fd3f2,0x3b3d0221,0xb9d15bf5,0x3b75c211,0x3b9873f4, -0x3b2693b0,0x3a909339,0x3aa4c3f8,0x3b679407,0x3c075998,0x3c16b7a0,0x3bd1fe22,0x3b89c78b,0x3b047fe1,0x3a2c3ffc,0x39d683ef,0x3594f8bf,0xb747344a,0x385bf16b,0x382bf0f2,0xb64d2c9a,0x374e4f60,0x36e747a7,0xb594cafe,0x36be1c5f,0x366ca829,0xb7b256e7,0x381f3b49,0x37bdbf10,0xb7b2c56a, -0xb89120d3,0x3991f2e4,0x3ad0450a,0x3b358407,0x3b9bc8f5,0x3b967607,0x3ad81a37,0xba5c7308,0xbb584d0c,0xba51788b,0x3a9ce03e,0x3b36a0bf,0x3ba04e81,0x3b3d462c,0xbb1818ec,0xbbd5a70f,0xbc0a2f79,0xbbeee33b,0xbbafb5e5,0xbb4fe1e9,0xba6c49ba,0xb8049207,0xb8ea29a0,0x3841a679,0xb837280a, -0xb7299bce,0xb6f193dd,0x33da4844,0xb6c43719,0x3602a002,0xb70bb1d9,0x3783d240,0xb8070a54,0x38723ca0,0xb905386e,0x3967fb33,0xb9b5da58,0x3b010c5c,0x3bac5348,0x3b321451,0xba8bb13c,0xbbc9d2f3,0xbb3e696f,0x3ac7e465,0x3b85a40b,0x3bbdd3a1,0x3b5fa243,0xbb2b9ea8,0xbbb01427,0xbb6d92c7, -0x3aed5808,0x3bee48ad,0x3c1a1f44,0x3bfcc501,0x3bc09b3d,0x3b6dd865,0x3a865e62,0xb78fcbb3,0x38a397da,0xb893783a,0x38411f10,0xb6257a2a,0x3757e535,0xb3a4b318,0x3674b8ec,0x369695ad,0xb59a34f8,0x377ff2bc,0xb7591e1d,0x381ac952,0xb89a4208,0x39823455,0xba40e233,0xbb14498d,0xbc44cff3, -0xbbce3ffa,0xbb002b19,0x3bb76679,0x3b0a0da2,0xbb040829,0xbbd441e8,0xbbae6b61,0xb94119da,0x3c0ae47a,0x3ba6029f,0x3ae542c9,0xbb04071a,0xbb3a88d4,0xbb653dac,0xbb853b69,0xbb66ddec,0xbb49c2fd,0xbb48a106,0xba6c42a2,0x39a09801,0xb8a78ebb,0x37327ec0,0xb7cfe3dc,0x3585eace,0xb6f5e694, -0xb66d2dfd,0xb6e99a95,0xb50175df,0xb79eace9,0x3774dae7,0xb8a3e68e,0x38d7c901,0xb9cc2728,0x3a8cc37b,0xbb8cc4d9,0xbc29cab6,0x3b90c716,0x3c01ae97,0x3bbf5173,0x3ba0215c,0x3b7156d8,0x3ae199fc,0xb9ae8cfe,0xbb15412d,0xbb1b5fed,0xbb503bde,0xbb1f887d,0xbb0e3e01,0xba4fc635,0x395934f3, -0x3a903890,0x3b067610,0x3b241433,0x3b4b57c0,0x3a8484e2,0xb9d3ceb3,0x389ccffd,0x36085ed5,0x37cedc4e,0x36e1100f,0x3740488d,0x37403f06,0x37003f7f,0x37a57235,0x359adfd6,0x3825e89b,0xb75597c0,0x3903dae2,0xb92aadb8,0x3a3bd168,0x3b3960a2,0x3b408643,0x3a50b90d,0xb9b876de,0xba488964, -0xbaa39bea,0xbaedf629,0xbab779d5,0xbb0449ab,0xbb0fe0d2,0xbb24324c,0xbb1bcf8a,0xbb0dedfa,0xbadf8b1f,0xb9d0096e,0x39e70650,0x3a5264ed,0x3ad34aba,0x3aff1459,0x3b268bea,0x3ae97d9b,0x393f8773,0xb7e04c19,0xb8579cd2,0xb81b23d0,0xb7a74ccc,0xb7a0b8a0,0xb7a2c742,0xb7c93a7c,0xb7bf3f14, -0xb81e0cf4,0xb7a4145d,0xb8dccdda,0xb8430184,0xb948bc75,0xb900011b,0x3a137385,0x3aa7b078,0x3a8dc7c8,0x3a68366f,0x39dea03a,0x38aeb50c,0xb9241a3b,0xba01f920,0xba7b72a0,0xbabc8095,0xbb01d327,0xbb0942fe,0xbb0fe4e4,0xbb1e8f65,0xbb0c76db,0xbaf8758b,0xbad670c9,0xbac782f9,0xbabd7a8d, -0xbaab74b3,0xba989277,0xb9f15740,0x387829dd,0x38ff52e2,0x386b4349,0x37c105dd,0x37d4b14f,0x37d75197,0x381222d5,0x37edc392,0x3840fd79,0x37ea0582,0x39058e1d,0x395802d5,0x395fa5e9,0x39e21549,0xbac82c3a,0xbaaccec7,0xbaa82917,0xbaaa706d,0xbaa4bd07,0xba9a8191,0xba99b19d,0xba940b76, -0xba830e14,0xba63c815,0xba49cd81,0xba3e1498,0xba3ba888,0xba39365c,0xba0e16e0,0xb9d7b42f,0xb9737541,0xb8b2c659,0x389ee060,0x39af6d3a,0x39b07704,0xb9bba9db,0xb9eebb75,0xb9a7a8d8,0xb8f27d16,0xb7486590,0xb58a2da5,0xb7bcde1a,0xb789ff83,0xb7b5bd6c,0x369a5a49,0xb85bba0f,0xb94b4736, -0xba2146b9,0xba7a5f3a,0xba8c7513,0xba60b1c2,0xba52d8b2,0xba5e2027,0xba55bbcd,0xba524f80,0xba5597c1,0xba53561c,0xba544ecb,0xba5d05d8,0xba6528a8,0xba6724e1,0xba67d2ac,0xba61c214,0xba5fb671,0xba49fca2,0xba3a0c21,0xba2d1f62,0xba1a30cf,0xba099da2,0xba04013d,0xb9ba25c1,0xb9952592, -0xb9717fbb,0xba2d8b27,0xba2e1a2e,0xba39fe10,0xba4f8565,0xba5d71a4,0xba6dccb4,0xba7dc6e4,0xba88b4c8,0xba8ab896,0xba8b8a97,0xba879637,0xba811f4e,0xba77c0b2,0xba557260,0xba0a6c6d,0xba07e667,0xba057951,0xb9e4a186,0xb9d0b985,0xb9d3dfb0,0xb9e1ce98,0xb9d9622c,0xb9749587,0xb9e784fd, -0xba075f3d,0xba31cf09,0xba00905e,0xb9ee69ad,0xb9ff8b4a,0xb9fd7dbf,0xba069014,0xba23a95e,0xba0b224e,0xba0242f1,0xb9dc3a94,0xb9d4f61d,0xb9f4c46d,0xba42247f,0xb946f3c5,0xb94a603a,0xb90f9050,0xb9262cc8,0xb91a90fe,0xb8e70531,0xb8ed3f2c,0xb8c82675,0xb7dbdd14,0xb93ff7e9,0xb963793a, -0xba2c7e45,0xba122474,0xba10fd40,0xba21643a,0xb9cc487c,0xb9c3f9f8,0xb9c55b41,0xb9ea16c1,0xb9be2e45,0x37b59739,0xba017dc8,0xba420065,0xba90dec4,0xba1a38ee,0xb9fa8581,0xba31b295,0xba3f4a80,0xba6bc6cf,0xba99c95d,0xba7e51d4,0xba449a1e,0xba0287b2,0xb9a67f05,0xb8152e57,0x385d6880, -0x39196949,0x388e47e1,0x38a71600,0x3881c854,0x38963205,0x385a0ae4,0x386deb43,0x3825039e,0x383260ea,0x387c824c,0x390b944f,0x381f6ed8,0xb8e55058,0xb8eba5d5,0xba7e3d11,0xb978f187,0xb96a170f,0xb8a8efd8,0xb98fadfd,0xb99d6498,0x3a30f0d2,0xb9cb3f57,0xba417438,0xbacebc61,0xba35514c, -0xb9d5e35f,0xba1b402c,0xba16d67d,0xba548f6d,0xbaadd32a,0xba764ab6,0xba2dbe6f,0xb9ce19db,0x37935196,0x38c5ae89,0x36cbd90f,0xb84be8c4,0xb7c24026,0xb7ccdfec,0xb7c762b8,0xb7985c7d,0xb7718d5f,0xb74addcb,0xb70edcd0,0xb748aaee,0xb7b735bf,0xb827a1a5,0x37d43bcd,0x38ee2be5,0x39269a2d, -0xba8f023b,0xb9b229ed,0xb961d0f2,0xb9321532,0xba0d9bdf,0xb9293608,0x3a918f5c,0xb9fba129,0xbaca7b59,0xbb2abb1d,0xba896bb7,0xb9f5ff56,0xba88f04d,0xbaae5088,0xbb03779b,0xbb3c9402,0xbb0e5aa6,0xbabf735c,0xba1de97a,0x37b319b3,0x370419c9,0xb8275453,0x3808f801,0x3716ca6e,0x3741012d, -0x3780f08d,0x375e079b,0x3700a8ae,0x37885343,0x372e6a67,0x37586691,0x378c2a6b,0x37b7dbe7,0xb803fe20,0xb7f66c72,0x37847f43,0x398df138,0xb9d0f66f,0xb90a307e,0x3aac4168,0x3a98cb3f,0x3a5103ac,0xba724c2a,0x3ac9f90c,0x3b078401,0x3a6d9f7e,0x399bdf40,0x384e98f9,0x3a45d437,0x3b0da012, -0x3b40028b,0x3b45578a,0x3b1b84a6,0x3ad49cd2,0x3a77733c,0xb8374ea8,0x359d9718,0x37748945,0xb68fd01a,0xb74ac227,0xb692eca5,0xb701a406,0xb6810a59,0xb5ee5c53,0xb6ce5f38,0xb6ec09b2,0xb5aa380d,0xb7a5a76a,0xb66875a8,0x37a88f22,0xb78f764e,0xb994c357,0x3a326f87,0x3a8c7ede,0x3af13caa, -0x3b068133,0x3abadedd,0x3a006d63,0xba95bab6,0xb9d20192,0x3930eb94,0x3a518406,0x3b04693f,0x3acffb58,0xb9952c05,0xbb0525a6,0xbb518f36,0xbb5b2333,0xbb368617,0xbaff6a9b,0xba584f2d,0x38a1037e,0x371a3d34,0xb6cee89a,0x36ae953a,0x36c28e54,0x36c79c23,0x3672164e,0x368f2860,0x36130c05, -0x3687f8fb,0xb53bffff,0x379b4d3b,0xb6fcef09,0x3821bbe4,0xb88d6041,0x39094999,0xb8bbff2d,0x3a6a2ca0,0x3a0575b2,0xba0d8f0c,0xbb07004a,0xbb11e268,0xba6035c8,0x3a97330a,0x3ad83f24,0x3aa60c48,0xb98486c8,0xbb0a5705,0xbb048a63,0xb99c07e9,0x3aeecac9,0x3b49a154,0x3b5010f7,0x3b235cbb, -0x3ad7b83e,0x3a060efa,0x3715ef7d,0xb7f10083,0x37c10466,0xb6f91a00,0x34a15708,0xb64a6a7f,0xb5f28b58,0xb62b413c,0xb6595d68,0xb40e3fd4,0xb6e0d05d,0xb54e6c2d,0x36827a76,0x3672d90b,0x36b16314,0x37c0a855,0x3a31ae75,0xbb3374f1,0xbb22a209,0xba91d87a,0x3b3c3e08,0x3aa35c97,0xb94a0431, -0xbab641c2,0xbb263ff4,0xba99190e,0x3b2670e9,0x3b2f7ca0,0x3b03fbcb,0x37dc7612,0xba075965,0xba826bb8,0xbaa2b643,0xba9590d8,0xba7aa01d,0xba4a30a8,0x38497aa2,0x3791758f,0xb76e6305,0x36c42b91,0x36a80505,0x36283073,0x367a0ee0,0x367c62ea,0x363da13f,0x3647eb63,0x369a0e11,0x35ae0529, -0x3664b3cd,0x36a24162,0x37604b8e,0xb9437683,0x3917ae41,0xbaf22664,0x3b5a44ca,0x3b985c69,0x3b99f74f,0x3b79a9c5,0x3b4219bf,0x3ae8e26d,0x3a14c5df,0xb9eb9531,0xba401ec3,0xbaa70d75,0xba977b23,0xba8b375f,0xba0f9d28,0xb9635e38,0x3809d641,0x39fe515d,0x3a32f6d6,0x3a82fb20,0xb90b75b0, -0xb463035d,0x37f579b0,0xb74befff,0xb654ef15,0xb6c7ea4a,0xb6b09b0c,0xb6a6eb12,0xb67ec714,0xb6c7c021,0xb6df3e24,0xb6c3c64e,0xb7961564,0x37e4e2a0,0xb85e90bf,0x389e7176,0x39515c8b,0x3a0ad2f0,0xba3f85d0,0xbaabd1f6,0xbab51684,0xbac25aa5,0xbab8fbab,0xba822b5f,0xba5baa00,0xba31b19e, -0xba28d577,0xba201a93,0xba0a97c8,0xb991d03b,0x38dfcf69,0x39e20229,0x3a211571,0x3a652119,0x3a5e0ecd,0x3a8c2297,0x391d4996,0xb8c136d8,0x37efc684,0x35cd55d7,0x37ca4ffd,0x371bda34,0x3745165e,0x370c4b95,0x374adb75,0x3739b9b3,0x379236b7,0x371fc4dd,0x38275750,0xb7b5576b,0x38bcec8c, -0xb943a084,0x398fc33f,0x3a9810eb,0x3a6b213c,0x3a67890d,0x3a226e3c,0x39c433d4,0x39137461,0xb8f7838c,0xb9cfeda5,0xba2bf147,0xba71d72a,0xba703378,0xba6ecee6,0xba7978dd,0xba5de5d5,0xba476244,0xba2dbc51,0xba28ea58,0xba17c7b1,0xba27cf42,0xb93d0149,0x390d4676,0x37689aef,0xb80a70d1, -0xb7be6384,0xb7c50db2,0xb7bd9cfa,0xb7cb6839,0xb7f2b42d,0xb7ddc13b,0xb8010179,0xb7f6c7ca,0xb8120276,0xb8235058,0x376eb8ad,0xb7dc6463,0xb9a9961a,0xb9c90705,0xb9ee5fcc,0xba07ff70,0xba1307af,0xba12496f,0xba1afc74,0xba21ea46,0xba1a798f,0xba145b9a,0xba15364d,0xba1a3ced,0xba272ba8, -0xba36a899,0xba2a042f,0xba20e0e1,0xba109a07,0xba081afe,0xb9e556b8,0xb9d8cc19,0xb9c94c5a,0xb8e07fe2,0x3884ebb2,0x38eb2ca7,0x38b468b6,0x38bd44af,0x3898be26,0x38bbdfc9,0x38aed516,0x38bc22eb,0x3892db4d,0x38df9206,0x38bb94a4,0x38eaae3d,0x383c8c45,0x383afdc9,0xba06e40c,0xb9c69e2d, -0xb9d8ab46,0xb9db5201,0xb9e10bd3,0xb9ef6ec4,0xb9f70499,0xb9ff83fd,0xba0800ec,0xba1082ef,0xba15f846,0xba1d3642,0xba2026ab,0xba2525a3,0xba1c59b1,0xba17a469,0xba13b072,0xba0d0e91,0xba0a91fb,0xb9fbcc9d,0xba04ede4,0xba087b18,0xba175e18,0xb9546163,0xb952b1aa,0xb9328656,0xb93b913a, -0xb93eb78b,0xb941b427,0xb9403fd5,0xb9409deb,0xb9402fcf,0xb9596b41,0xb9444e20,0xba1f51db,0xba114a6a,0xba1f5bf4, -}; - -const uint32_t defaultHRIR_rom_AlphaR16[470 * 43] = { -0x3f02f158,0x3ef2f693,0x3f03a369,0x3ec46d8a,0x3e94ac59,0x3e106c69,0x3ed4ccf7,0x3e95d249,0x3e17dce4,0x3e106b8e,0x3e0f8ab1,0x3e1bc099,0x3e05c345,0x3e01bb92,0x3e0157b1,0x3e91a887,0x3ec5ea15,0x3dea0cd2,0x3e9187c9,0x3eb88fb2,0x3ef73bfd,0x3ee40a66,0x3eed60de,0x3ef0e226,0x3ef3d05a, -0x3ef74404,0x3efa8691,0x3eff5d6a,0x3f0216ea,0x3f04a754,0x3f06f285,0x3f09006f,0x3f0c7088,0x3f09ff62,0x3f0785cd,0x3f02431d,0x3eff646c,0x3f0e5dd7,0x3f0a461e,0x3e8a473c,0x3ee48418,0x3eaee79f,0x3eaa364f,0x3ebb5a4d,0x3eac3241,0x3ebef4cd,0x3eb29698,0x3e9b3322,0x3eae9f33,0x3eac2b9c, -0x3ea99e00,0x3e8f7afa,0x3ea0f40f,0x3eae7384,0x3eb1fd9d,0x3e6c1572,0x3ee2d1e7,0x3eebfaae,0x3ef3e85f,0x3f008f6e,0x3f03c4b5,0x3f08a7d1,0x3f0da213,0x3f1418d9,0x3f1b0f90,0x3f22cbde,0x3f2ab812,0x3f3305f5,0x3f3c2bd0,0x3f39df3b,0x3f319c7b,0x3f211227,0x3f174a30,0x3f16cac8,0x3f01f13d, -0x3eb60a85,0x3eb45d99,0x3e7f50dc,0x3e7fde43,0x3e6a6019,0x3e5a4afd,0x3e2b40c4,0x3e5861f5,0x3e0d9e1c,0x3e67afe5,0x3e0b0c1d,0x3e519148,0x3e1d2405,0x3e5610d7,0x3e6fb5c4,0x3e6e6366,0x3e80bef5,0x3eae9574,0x3edbe0fc,0x3ee6d92e,0x3f02ce3b,0x3f099d87,0x3f146338,0x3f1e6fc4,0x3f2ba9b3, -0x3f38c6f2,0x3f478f5b,0x3f548de2,0x3f624b22,0x3f7103ac,0x3f6a7af5,0x3f5bb96e,0x3f3b67ae,0x3f24d951,0x3f22da2d,0x3ef5d3c7,0x3e911072,0x3e90b162,0x3e509d18,0x3e2d1d26,0x3e1b9998,0x3dcdfa56,0x3d9efd38,0x3d4a9737,0x3d7ffc9a,0x3ccae5f5,0x3ceb4b18,0x3d52d97a,0x3d432932,0x3dbba5b3, -0x3d72d4bb,0x3e12141c,0x3df87909,0x3e7cac26,0x3eb4ec56,0x3ec86433,0x3eef74e8,0x3f000f09,0x3f0e117f,0x3f1c8946,0x3f2f0628,0x3f44221d,0x3f5ba1e9,0x3f7372c2,0x3f87c82a,0x3f975764,0x3f95b6c8,0x3f886c93,0x3f5ad9f4,0x3f32b58a,0x3f3dfa3e,0x3f0391e1,0x3ec81751,0x3e9e01ac,0x3e4d7b3b, -0x3e1a8ae6,0x3e1e8db8,0x3de07740,0x3dc313c6,0x3d96efd4,0x3d9c6940,0x3d6aa789,0x3d35a2d8,0x3cfadc47,0x3d8ba1dc,0x3de1dfe1,0x3ddb92b9,0x3e490127,0x3e5f5f87,0x3eb75172,0x3f0b119a,0x3f2141d1,0x3f48fa38,0x3f6115be,0x3f7ec370,0x3f8d9fe9,0x3f9883c0,0x3fa1d3ab,0x3fa5879f,0x3fb2f607, -0x3fb0d4c8,0x3fa18bce,0x3f9664f3,0x3f89e2c0,0x3f80d036,0x3f598969,0x3f61d9ad,0x3f17be4c,0x3ed4ab3c,0x3ed1e42c,0x3ebe9d12,0x3e7f8e64,0x3e6039d2,0x3e09276a,0x3dcd046e,0x3d5912af,0x3d850757,0x3d818344,0x3d745ca3,0x3db57ff4,0x3dd2cc72,0x3e0c5d3f,0x3e35c554,0x3e85f764,0x3e8528d7, -0x3ecbd22b,0x3f10c139,0x3f1db223,0x3f3baae8,0x3f4d762d,0x3f681748,0x3f8328ee,0x3f8e30b2,0x3f974dfd,0x3f9c21c7,0x3faa6428,0x3fafb467,0x3fa6b492,0x3fa9e2a1,0x3fa07cde,0x3f93e899,0x3f792afb,0x3f9227a0,0x3f48d628,0x3ecf12b9,0x3edb0189,0x3e925017,0x3ea44a1c,0x3e0ce791,0x3e25b96b, -0x3da7c38c,0x3e012d49,0x3df00c56,0x3da4598b,0x3dcf92d7,0x3e0908b7,0x3e178cc3,0x3e5ed6e5,0x3e65a38d,0x3e82e07d,0x3e86287e,0x3ead1021,0x3ef151bc,0x3f04c31e,0x3f25d26b,0x3f37bee8,0x3f5731b6,0x3f7cb915,0x3f8e3934,0x3f9ba0e8,0x3fa52750,0x3fa084a8,0x3f9b8008,0x3f9a18ae,0x3f9d5902, -0x3fa358aa,0x3fab5b7b,0x3f9c3307,0x3f99df51,0x3f61b04c,0x3f095444,0x3f07c2ab,0x3e81491f,0x3e9fb37f,0x3e3d31a2,0x3e0bddda,0x3db68830,0x3e09ec63,0x3e638e4b,0x3e04a312,0x3da795df,0x3dc0c023,0x3e23380e,0x3e2af1b6,0x3e630175,0x3e9ea686,0x3e6d015e,0x3eb8ad0b,0x3ede7a7d,0x3ef312cf, -0x3f16b499,0x3f3e78bd,0x3f5d7823,0x3f72fb3d,0x3f89dca5,0x3f955c13,0x3f9cd636,0x3fabec80,0x3fb35f7e,0x3fb62d48,0x3fa9ba8e,0x3f9e79a5,0x3f99d50a,0x3f9bf342,0x3f9d8036,0x3f7b27b7,0x3f120fec,0x3ef39e5a,0x3ed3a892,0x3e744f51,0x3e938ada,0x3e9a8a32,0x3e27623f,0x3e3325a0,0x3e08d31e, -0x3e02315f,0x3e104d9a,0x3e286484,0x3e4cf10c,0x3e5317c6,0x3e8a664a,0x3ea13a90,0x3e8dbde7,0x3f029ed9,0x3f11387a,0x3f077f97,0x3efe0b88,0x3f182f26,0x3f388c07,0x3f64d786,0x3f818f20,0x3f913a67,0x3f9fead6,0x3fa2b14c,0x3fa61c85,0x3fafd010,0x3fa8d2b4,0x3fa6dfe9,0x3fa4f0fa,0x3fa5e8a6, -0x3f88db94,0x3f686433,0x3f0919de,0x3f03d70b,0x3eaf9d46,0x3ea340c0,0x3e9fb812,0x3e63e9b7,0x3e7ebdb2,0x3e651225,0x3e91e9e2,0x3e0d395a,0x3e10354d,0x3e3ca0b7,0x3e741f13,0x3e9999b4,0x3ec89949,0x3ec9b19e,0x3ec2b8cd,0x3f09edae,0x3f291acb,0x3f1e35de,0x3f1025d7,0x3f1bc9a6,0x3f2cae3f, -0x3f42aba9,0x3f57ad1b,0x3f6b9514,0x3f7f3ef7,0x3f872429,0x3f8f06f0,0x3f952f7c,0x3f964b17,0x3f93df5b,0x3f8cd093,0x3f89ea86,0x3f702237,0x3f4721d2,0x3f0f49e5,0x3f17b81b,0x3ed3bd0f,0x3ec157f2,0x3e9fff21,0x3e814cdd,0x3e43a1eb,0x3e98cff5,0x3e2f23e9,0x3ec02f52,0x3e2ee8fe,0x3e9b9aed, -0x3e47f25e,0x3ea2d73c,0x3e9e5c05,0x3eba495e,0x3eb9cb24,0x3f077407,0x3f21b340,0x3f1383ca,0x3f1b7dd6,0x3f230ce8,0x3f2a9f48,0x3f2df058,0x3f448499,0x3f5645ce,0x3f678d82,0x3f752f22,0x3f80d9c6,0x3f87bc36,0x3f866eea,0x3f853348,0x3f854358,0x3f7308d2,0x3f4d2c56,0x3f4ea2af,0x3e9a2e94, -0x3f2a2912,0x3ef9d048,0x3ef8556c,0x3f0f942c,0x3f03625b,0x3f1bdbdf,0x3f146367,0x3ef3f276,0x3f0f9cd6,0x3f0f2170,0x3f0ae089,0x3ee30b6e,0x3f018335,0x3f0a1df4,0x3f06f231,0x3e86b6f2,0x3f2be77a,0x3f2e736a,0x3f2fdebd,0x3f34b027,0x3f36d94e,0x3f3bd98b,0x3f3ef341,0x3f4a742d,0x3f522be7, -0x3f5a31cc,0x3f6041f3,0x3f660b0b,0x3f6dc950,0x3f64dd6e,0x3f5d51d7,0x3f581315,0x3f50bc23,0x3f3fd5e2,0x3f55e79f,0x3f15f3af,0x3ed5967c,0x3e0fb9dc,0x3f2b167c,0x3ed80bb7,0x3e1b698f,0x3e0c3391,0x3e085da6,0x3e2ad1c4,0x3dfcd47b,0x3dedc007,0x3df0df70,0x3ed28c36,0x3f1bac8d,0x3d9e0ae7, -0x3ece2576,0x3f0bb930,0x3f4bd542,0x3f365100,0x3f3d0202,0x3f3d955d,0x3f3eb02e,0x3f3f6bbf,0x3f3f6722,0x3f41dea4,0x3f43f75c,0x3f464796,0x3f493e71,0x3f4bd93c,0x3f502016,0x3f4ca965,0x3f4b0aea,0x3f484248,0x3f47fbe1,0x3f590a70,0x3e9c6ca6,0x3e9ad2da,0x3e871018,0x3ebefe1d,0x3edd8526, -0x3f049b89,0x3e9f02c8,0x3ece5921,0x3efdc856,0x3efe4ac2,0x3efc0128,0x3ef8635f,0x3efe4547,0x3f006c81,0x3effc3fc,0x3ecce7ef,0x3ea4300c,0x3f055237,0x3ed3fc8f,0x3eb876fb,0x3e806ea3,0x3e91962e,0x3e8cba92,0x3e8aad79,0x3e8a0054,0x3e89f58f,0x3e8be899,0x3e8b6019,0x3e8aff7d,0x3e8a6a05, -0x3e89950a,0x3e8a23e8,0x3e88d533,0x3e901c5a,0x3e931819,0x3e9605eb,0x3e95e4c1,0x3eb2e04d,0x3eb624e9,0x3f05915a,0x3ead4114,0x3ec256d4,0x3ebd0479,0x3ea30d7b,0x3ea1edeb,0x3e86d1c3,0x3e908e56,0x3ea686dd,0x3e9590cf,0x3e93e423,0x3e936cd1,0x3eae8724,0x3ea99052,0x3ea5ff39,0x3eac086a, -0x3ee58772,0x3e9ef081,0x3e9ca8af,0x3e9ce755,0x3e960e19,0x3e95d75d,0x3e975132,0x3e9e6157,0x3e9e9506,0x3e9d8927,0x3e9a1638,0x3e928287,0x3e8d376e,0x3e862a7e,0x3e95c4eb,0x3ea23831,0x3ead97b5,0x3eb339f2,0x3ed53073,0x3ee9718e,0x3ef19cbe,0x3ec90a1c,0x3ec1a0d6,0x3eb0f858,0x3ea0049f, -0x3e8eb873,0x3e8b7649,0x3e6f897a,0x3e9916dc,0x3e757cf1,0x3e936b48,0x3e78db6b,0x3e9695b1,0x3e9131f1,0x3e988cc2,0x3ea88f84,0x3eb57676,0x3eac3f15,0x3e9967ba,0x3e9c49b5,0x3e8c9019,0x3e89a89d,0x3e897e99,0x3e94d665,0x3e946887,0x3e93ba17,0x3e8faeac,0x3e87a14e,0x3e83f322,0x3e7141d9, -0x3e9b7ba0,0x3eb0ed75,0x3ecc1bf3,0x3edc8a25,0x3ef36135,0x3f0d3ea6,0x3f0ab587,0x3ed3b7ee,0x3eac8dc2,0x3e9c0ed1,0x3e8130ff,0x3e4f1509,0x3e1c319e,0x3e0e99b9,0x3e1542d9,0x3e08b693,0x3e074efb,0x3e064b40,0x3e2a42d9,0x3e4391ff,0x3e709b36,0x3e836249,0x3ea7db20,0x3eac87cb,0x3ea43c34, -0x3ea4c62b,0x3e9663c7,0x3e98aa67,0x3ea03e75,0x3eb6ecc5,0x3ebbeec1,0x3eb92dea,0x3eabcfe3,0x3e904807,0x3e620931,0x3e121e76,0x3e67202a,0x3ea01560,0x3ed9082a,0x3efcacc8,0x3f24ee48,0x3f269f3a,0x3f1ee8dc,0x3f0bfb37,0x3ee57180,0x3ec703f2,0x3e9ef47e,0x3e77c957,0x3e344063,0x3e105a22, -0x3e21c107,0x3e1d2a59,0x3e1c4cfd,0x3e13437f,0x3e2963a9,0x3e490193,0x3e85d1d4,0x3e950275,0x3eb3ece2,0x3ea78e67,0x3e944ad0,0x3e8d8775,0x3e34a459,0x3de5f68c,0x3d5c05ff,0x3d1be8e6,0x3c816a86,0x3d117860,0x3df8487d,0x3e0b91dc,0x3e8671da,0x3eede233,0x3f0f667c,0x3f1f8d32,0x3f22fd7a, -0x3f28ce6c,0x3f18e2f6,0x3f387b04,0x3f3c614c,0x3f1cbba5,0x3f04ce43,0x3ee80aa5,0x3eba22de,0x3eb0c18d,0x3e8bdbe4,0x3e6fe976,0x3e760e43,0x3e21a46a,0x3e05faed,0x3df67d4c,0x3e24eaa6,0x3e4b0d7c,0x3e83986d,0x3e951f78,0x3ecab6cb,0x3ed896e5,0x3ec4bebd,0x3ec3684f,0x3e9af55e,0x3e97f6a2, -0x3e8b2131,0x3e7a2636,0x3e8934f3,0x3ea1829c,0x3ec8856b,0x3ecadb1e,0x3ee7d594,0x3f16c925,0x3f15ce6e,0x3f220439,0x3f2a3540,0x3f252969,0x3ef80c10,0x3f2ea352,0x3f5141ae,0x3f1a6af3,0x3f11704d,0x3ed93a1d,0x3ed8455a,0x3ea4598b,0x3e9543eb,0x3e918a29,0x3ede134b,0x3e9f02a7,0x3e940757, -0x3e80155c,0x3e7bddac,0x3e882340,0x3eb36e7f,0x3ed0ef12,0x3ee8e6d4,0x3ef712bd,0x3ee8bc86,0x3ee426d9,0x3ebd518b,0x3eb41846,0x3e96844c,0x3e66501d,0x3e4cf29a,0x3e768da1,0x3eaf79a9,0x3f122060,0x3f3bcfc5,0x3f4a1356,0x3f5276b3,0x3f33c5f8,0x3efdb8e3,0x3f076ec2,0x3ea4f1ca,0x3f16cd82, -0x3f44dd18,0x3f0c3dd2,0x3f19180b,0x3edcb305,0x3ed462ed,0x3ebf64c4,0x3ea340d5,0x3eb33706,0x3f1a7d7e,0x3e92e4f9,0x3e66540a,0x3ea41c27,0x3eab53e0,0x3eca520e,0x3ee72a1f,0x3ee77d1a,0x3f05d2d4,0x3efb3df6,0x3ef5c538,0x3eee2197,0x3ecfb6e6,0x3ea37542,0x3e8a78c1,0x3e8b6ed4,0x3e79287c, -0x3e88b97b,0x3ea76d63,0x3ebe111f,0x3ee3b88d,0x3efb6524,0x3f20d6ae,0x3f3c7cc7,0x3f4855e6,0x3f02628a,0x3e749da3,0x3e9fea62,0x3f2a25c0,0x3f0f93aa,0x3ef8cf0f,0x3f06834b,0x3ecc7fb6,0x3e9c50d4,0x3ecb958d,0x3ec3cad5,0x3ef639c3,0x3ec15db6,0x3eb2b0c2,0x3eb3b429,0x3ebb8d80,0x3eda641d, -0x3ee428ca,0x3ef6e643,0x3f12fbd3,0x3ee8cfbb,0x3ed6918c,0x3ef3f2f4,0x3f089ca3,0x3ef6215d,0x3ecfb9a3,0x3e9a31c5,0x3e800990,0x3e52b1f7,0x3e400056,0x3e7311b2,0x3ea70060,0x3ec13f22,0x3f062e5b,0x3f0a3387,0x3ef4b415,0x3ebae9c9,0x3e860762,0x3eb0eb9b,0x3f2cd7b5,0x3f08ce73,0x3f0c03bc, -0x3ef176e4,0x3ecbd8ed,0x3ed7c11d,0x3ecc074d,0x3ed31547,0x3eab88eb,0x3ee16e9d,0x3ed9b4d0,0x3ecd1fb7,0x3ece60be,0x3ed363e3,0x3ecbe3ca,0x3ef02cf6,0x3f0ea606,0x3edeb92f,0x3ec597d9,0x3ef1e645,0x3f072f02,0x3f081f12,0x3f0239e2,0x3eee795b,0x3ee02178,0x3eddf796,0x3eecd3c0,0x3eed4cf2, -0x3eeaec8f,0x3ee68cb8,0x3f016dd3,0x3f037710,0x3ef357a5,0x3ec8f8d8,0x3eb2b6db,0x3eec3586,0x3f21c9ec,0x3f01479f,0x3f1d4f10,0x3f0e07d9,0x3f0ab10a,0x3efe6a2a,0x3f0c3ca1,0x3edb46c1,0x3f099028,0x3eb98f9a,0x3f091b93,0x3edd5c11,0x3f0d324a,0x3ef85225,0x3f07fc28,0x3f085847,0x3f17a2f8, -0x3ef42aa0,0x3edd23ba,0x3f0e65e5,0x3f17363b,0x3f19fa0c,0x3f1baf9e,0x3f22c1c4,0x3f170699,0x3f0e88ef,0x3f0576a4,0x3efb4e02,0x3eeec8e4,0x3ee0939e,0x3ed7bfa5,0x3ed69ea1,0x3ed6d69f,0x3edf24a3,0x3eb20d84,0x3eaa3757,0x3f59db00,0x3ecf1f9f,0x3f0f9845,0x3f06eba5,0x3ed2f89c,0x3ed3d2c9, -0x3ea285cf,0x3eb8f1b3,0x3ee97699,0x3ebd8ea4,0x3eb46803,0x3eb752cd,0x3efd42de,0x3eec0d38,0x3ee8d0d0,0x3ef52928,0x3f49b9ce,0x3ec7f958,0x3eccd042,0x3edd3ff7,0x3ee3e34b,0x3ef061d4,0x3ef844e8,0x3f0230a3,0x3eeda1ab,0x3ee0bee0,0x3ed3bd46,0x3ecb9ec5,0x3ec29a5c,0x3eb9de44,0x3ebb3b1a, -0x3ebbc1f5,0x3eb6a505,0x3eb93181,0x3e940553,0x3e38eb6f,0x3f00a67b,0x3f2d1fe4,0x3f6c3ffd,0x3ebb2b20,0x3f2173d5,0x3f5e49d8,0x3f62a5f0,0x3f6165a5,0x3f57fd9d,0x3f620d21,0x3f651f00,0x3f630535,0x3f20a80c,0x3ed2a04a,0x3f74c910,0x3f29d9ce,0x3f042130,0x3e47810b,0x3e9a9a8f,0x3e93acab, -0x3e978c22,0x3e9c6d31,0x3ea0de06,0x3ea97aa5,0x3ea3518e,0x3ea04087,0x3e9c2b76,0x3e96ed9e,0x3e92059e,0x3e8c0140,0x3e8bd550,0x3e8aa4e6,0x3e8a65c4,0x3e87f7f3,0x3e8a997d,0x3e1419a2,0x3deff26a,0x3df7d8cc,0x3dea21ec,0x3de279f2,0x3dd9f661,0x3df852d1,0x3dde09a3,0x3dc6cddb,0x3dc5df4e, -0x3dcce799,0x3de25732,0x3ddaa345,0x3dd661ff,0x3dcce548,0x3de47c5d,0x3e005299,0x3dd53721,0x3dea0d47,0x3dfc8f69,0x3e0b812d,0x3e0c114d,0x3e0f145b,0x3e13712b,0x3e14f8d4,0x3e15897f,0x3e144624,0x3e11c859,0x3e10bc52,0x3e1179bc,0x3e0fb38b,0x3e0ac413,0x3e0444f3,0x3defd785,0x3de667a7, -0x3de3f2b4,0x3de9cdf0,0x3dc6a075,0x3dcf2c19,0x3dec0ebe,0x3e0040a7,0x3e072ebf,0x3decbd22,0x3deea26c,0x3dfd061a,0x3e06e5fe,0x3e0ca8a0,0x3e1a25f2,0x3e198083,0x3e18cf8d,0x3e0b3b3f,0x3e0e6e8f,0x3e102d3b,0x3e18248d,0x3e1ab9cf,0x3e1320b4,0x3e192be1,0x3e201302,0x3e275714,0x3e324793, -0x3e36d452,0x3e35bf1d,0x3e2eee87,0x3e26f9f1,0x3e25d338,0x3e297ca9,0x3e2ce2d1,0x3e2299e6,0x3e0fc0a9,0x3dd3bb44,0x3dadfdaf,0x3daad77d,0x3db5dcff,0x3d2b66b7,0x3d86d85a,0x3deedef8,0x3e02d9e3,0x3e1626ce,0x3df5ec7d,0x3de3eba0,0x3df2c7f1,0x3de84b11,0x3e07e361,0x3e2d3321,0x3e29233e, -0x3e1e0cf5,0x3e00bf17,0x3e14063b,0x3e1a3cc1,0x3e22ff66,0x3e2882df,0x3e311cf1,0x3e25bf0d,0x3e306fc1,0x3e3ff7e0,0x3e525fd9,0x3e5fb04c,0x3e5ffc44,0x3e5666c7,0x3e4650dd,0x3e4086ba,0x3e41e242,0x3e40f6af,0x3e263085,0x3e020625,0x3d49e086,0x3ca1f066,0x3c21dd9b,0x3cb2b0cb,0xbca913c8, -0x3cc56107,0x3dbe4f51,0x3dc9d549,0x3e05ea12,0x3dc76e5f,0x3d9c7a94,0x3dbe25f3,0x3db48145,0x3ddd83db,0x3e2f42f9,0x3e1b3c50,0x3e1f8600,0x3e09b2f2,0x3e257f93,0x3e2b7c8d,0x3e3d1045,0x3e492c2d,0x3e575162,0x3e3deb28,0x3e42e98a,0x3e561a62,0x3e6ede1f,0x3e7d4522,0x3e798dcb,0x3e623365, -0x3e472335,0x3e44a070,0x3e5640c8,0x3e6bdf01,0x3e5d9584,0x3e33719d,0x3d61fe60,0xbc3c9cc3,0xbd3e92d9,0xbd0b012a,0xbdbb91a2,0x3e01ff21,0x3e71a525,0x3e783b4d,0x3e8a074b,0x3e81956f,0x3e5df53e,0x3e5d0c6d,0x3e2d1dc6,0x3e1be59e,0x3e2a3570,0x3e29a95d,0x3e1b054c,0x3dcacf07,0x3e16ec3b, -0x3e2eca1e,0x3e471f67,0x3e530ea3,0x3e5788e0,0x3e60300c,0x3e517013,0x3e621c06,0x3e901f8e,0x3e91e841,0x3e95870e,0x3e91013f,0x3e842a63,0x3e4f4027,0x3dd781ca,0x3c802b21,0xbe0d4878,0xbe99d45c,0xbec499d9,0xbebb8df0,0xbe929583,0xbe20204a,0xbe9b0984,0xbe0d5c29,0xbb0b2b4d,0xbc4ff6e3, -0x3bb6b329,0x3db0274a,0x3dc8816f,0x3e061450,0x3e29985f,0x3e419241,0x3e611beb,0x3e305c1f,0x3e273a1a,0x3def2e0f,0x3e2367b7,0x3e31ca56,0x3e3dd0fa,0x3e537d34,0x3e66cc67,0x3e6544cd,0x3e5146e4,0x3e63a452,0x3e864462,0x3e764b43,0x3e4530a1,0x3debd8bc,0xbca3a776,0xbe1fa2ed,0xbe928113, -0xbec5487f,0xbef82650,0xbf1327fc,0xbf1628b5,0xbf15665f,0xbf159511,0xbeba5b4c,0xbf020ba8,0xbea204dc,0xbe238464,0xbe0da3b8,0xbcaa1f9e,0xbc8506ed,0x3dcfec1f,0x3dd4f4c1,0x3e0a968f,0x3e15cb8b,0x3e9786d7,0x3e16e256,0x3dd27a26,0x3dd31949,0x3e368f12,0x3e509a18,0x3e604d1c,0x3e804b80, -0x3e982808,0x3e8b5047,0x3e7b994f,0x3e7418ab,0x3e3ead5a,0x3dbe0371,0x3c8d1050,0xbd17f58a,0xbe14fc87,0xbe96f7e5,0xbef0f06b,0xbf3357ef,0xbf5ba2fb,0xbf6e8c4c,0xbf6ee8e7,0xbf54b096,0xbf39b762,0xbf163625,0xbf0fe9a6,0xbeec7d41,0xbea783d1,0xbe516f6d,0xbd71a373,0xbc54ea0c,0x3d714b64, -0x3d87de0e,0x3e27c6f4,0x3e16e5b5,0x3d678d9a,0x3e3d293b,0x3e5ea353,0x3df7b40d,0x3e026ba1,0x3e00832a,0x3ddcad53,0x3dd7b9af,0x3e49a16f,0x3e550210,0x3e5c4952,0x3e681108,0x3e3aa1e1,0x3e1c226d,0x3d99af6d,0xbd5f7d64,0xbe170ba1,0xbe8af5fa,0xbecfc5b6,0xbf07ebe6,0xbf23bb34,0xbf343466, -0xbf48a835,0xbf59beee,0xbf6c7b30,0xbf35a2b8,0xbf069513,0xbec278cb,0xbeb8e06f,0xbe4f6cfe,0xbe166dff,0xbd91c4b7,0xbd29436e,0x3c1edbe1,0x3cdd21ae,0x3d2589fe,0x3cde3c93,0x3dfc86d8,0x3e066ef0,0x3d9dd2a0,0x3d9baaa7,0x3d70860b,0x3d4912b0,0x3d1419ce,0x3d56ab9e,0x3d14e062,0x3dce1642, -0x3e053d3f,0x3de68a34,0x3dbc100a,0x3da6ffba,0x3dab90c4,0x3d1e022f,0xbc63ca7e,0xbdabc1ae,0xbe35bd99,0xbe9aef74,0xbedacc64,0xbf1aba00,0xbf32313d,0xbf3c98c9,0xbf2d32e6,0xbed5e1cb,0xbeb70207,0xbeb8c780,0xbe7cd1f9,0xbe259546,0xbdd71a6c,0xbd37732d,0x3c44400e,0xbbe5ff14,0xbc86909b, -0xbc70f8e9,0x3c4f0b19,0x3d172908,0x3d44dfa3,0x3b697e22,0xbcf71d6d,0xbd0643ba,0xbd65d861,0xbdaa6c73,0xbd6d45b2,0xbd02fc6f,0xbd01e4dc,0xbbd3ea8d,0x3b8f8ed7,0x3c95462f,0x3d414187,0x3bd22a8e,0xbd2c08a8,0xbde539be,0xbe54dbfc,0xbe9a68c0,0xbec89d0e,0xbeff7800,0xbf0ea1bb,0xbf111220, -0xbf05801a,0xbeb411a1,0xbebb2503,0xbeb596d1,0xbe8b0dd2,0xbe72644d,0xbe2e43de,0xbe099123,0xbd96ce45,0xbda69f83,0xbd64824e,0xbd9199c8,0xbd4866e1,0xbd6a2d16,0xbd5813d8,0xbd9bb13d,0xbdc3d6e0,0xbe076e0b,0xbe20e1f6,0xbe43e7bb,0xbe49e4fb,0xbe497582,0xbe72b94d,0xbe816de7,0xbe81e36e, -0xbe822efc,0xbe845c35,0xbe8d4e2a,0xbe935dca,0xbe95fb14,0xbea6b086,0xbeb65e01,0xbec7c607,0xbec936d0,0xbed20b4e,0xbee0e904,0xbed03833,0xbe73f5e6,0xbe724e04,0xbeb01da1,0xbe53aacd,0xbe6a4850,0xbe564c26,0xbe2430ee,0xbe0a10af,0xbde90080,0xbe0b2599,0xbe1d961a,0xbe0e0bd6,0xbdfc52f6, -0xbdfd2d0f,0xbe31df1c,0xbe3c98d6,0xbe48de39,0xbe517165,0xbe9ad3ba,0xbe66c8c8,0xbe6b1904,0xbe83b57e,0xbe8d0b9b,0xbe97fe2c,0xbea1e48e,0xbeac5e97,0xbea767de,0xbea5cacc,0xbea4385b,0xbea4477c,0xbea2b0d2,0xbea360e9,0xbe9ada4e,0xbe927f4c,0xbe88f4bd,0xbe83be54,0xbe49671c,0xbe24aed2, -0xbe93f588,0xbeab9df8,0xbebadec1,0xbe63df85,0xbe995c7e,0xbea8b458,0xbeac3ac5,0xbea9231e,0xbea46ab4,0xbea81047,0xbeabec25,0xbea9b32d,0xbe98b23c,0xbe6b1331,0xbeb87858,0xbea597f2,0xbe905317,0xbe1e774f,0xbe449235,0xbe490c05,0xbe4f6f87,0xbe591e55,0xbe61a52e,0xbe6efae2,0xbe6a4491, -0xbe695da1,0xbe67c5e4,0xbe6411cf,0xbe60bca9,0xbe5f13bc,0xbe57b96a,0xbe52d938,0xbe4c1edb,0xbe494c5a,0xbe427b7b,0xbd03754a,0xbcdfef6f,0xbd502fa9,0x3ca226ac,0x3d76112e,0x3df6634b,0xba780d5b,0x3d693d6d,0x3df9466b,0x3e003669,0x3e00ca4a,0x3df61dc0,0x3e04cbae,0x3e047818,0x3dfc6bd0, -0x3d616db7,0x3b44c5d1,0x3e061c9d,0x3d605065,0x3c97aeb2,0xbd4bfbb1,0xbcf5eae4,0xbd17725e,0xbd14304a,0xbd12cf59,0xbd11cc68,0xbd0f3d80,0xbd137194,0xbd211c5b,0xbd37c1fe,0xbd5766fb,0xbd6ef66c,0xbd87b02e,0xbd6a273e,0xbd4ad59a,0xbd084b4f,0xbd0b2303,0xbcc351fe,0xbd1001af,0x3da1be7f, -0x3bac65a7,0x3d1f9a06,0x3d17f193,0x3ca4ef2e,0x3d184c1c,0x3cab245c,0x3d1162e4,0x3d6a49b9,0x3d1b5c68,0x3d006ad0,0x3cac87c0,0x3d335f7a,0x3cc8b0d4,0x3c9873b7,0x3c52f20d,0x3d961b7f,0xbd01d18f,0xbd353651,0xbd362449,0xbd35843c,0xbd2c5bf0,0xbd253dfd,0xbd2242f0,0xbd284482,0xbd5ba8a3, -0xbd990f1f,0xbdd01789,0xbdefe353,0xbdfcd752,0xbdce9a2e,0xbd97ea33,0xbcff0526,0xbce3039b,0xbcc7b181,0xbd25c176,0x3cea7bae,0x3d0ed5e7,0x3d81d3f2,0x3d5d646b,0x3d80930a,0x3db6fa3c,0x3ddf2b7c,0x3db0c44f,0x3dfdc6e5,0x3d9602aa,0x3dd4bfec,0x3d253287,0x3d85da27,0x3d11c272,0x3cd0b941, -0x3d09d7fc,0x3cd798a5,0xbc6143ec,0xbd756266,0xbd6d4a27,0xbd739fba,0xbd713c96,0xbd62aa3d,0xbd6126fe,0xbd657a28,0xbd9dd031,0xbde8b8c0,0xbe246323,0xbe489351,0xbe5ba44f,0xbe2d08df,0xbe00e6ef,0xbd16463f,0xbceea5fb,0x3cce4a6a,0x39b8ad87,0x3da8fb45,0x3dbaff62,0x3db250f1,0x3d89d17a, -0x3d87c7ee,0x3de6325f,0x3dde0700,0x3df4f387,0x3e166394,0x3e1a3733,0x3dfb6f91,0x3d81420e,0x3db26e9d,0x3d86a899,0x3dd161a3,0x3d5425ed,0x3d87b26a,0xba34ddb9,0xbd816a87,0xbd6fbb6e,0xbd5b149d,0xbd490a2c,0xbd3893c2,0xbd118f5b,0xbd18291d,0xbd99920c,0xbe131769,0xbe73841d,0xbe9a681d, -0xbe9ef795,0xbe73df0e,0xbe0e3446,0x3c309707,0x3cffa143,0xbe9b0a85,0xbeb21085,0xbe8da6de,0xbe4a0b93,0xbdbbfa26,0xbbaf2230,0x3d04d1c6,0x3d955b74,0x3dd7c8f6,0x3dfe6dde,0x3e09444e,0x3e0f8c48,0x3e128964,0x3dee26b1,0x3dddfb65,0x3d96667f,0x3daf08bb,0x3ce048fd,0x3d1d0b5f,0xbce9244e, -0xbdb27dc8,0xbdb7a63d,0xbe278e07,0xbe17b599,0xbe23ff7a,0xbe360958,0xbe5fc9f4,0xbe703722,0xbe681766,0xbe67517a,0xbe293815,0xbddae12a,0xbdf40731,0xbe3652f6,0xbe835348,0xbe95bcfa,0xbe707914,0xbe913088,0xbe8ad6f7,0xbe457692,0xbe097f60,0xbdbf238a,0xbd343791,0xbc779785,0x3d0372d8, -0x3dbdaad3,0x3e1e0aec,0x3e2dc8b7,0x3e2725d7,0x3dd63489,0x3de9507b,0x3dbb2cda,0x3da69d5c,0x3d2b283f,0x3d3d77d6,0xbce27516,0xbd43cc90,0xbc20d240,0xbbcf3e7c,0x3c83eeb1,0x3cc0e6dc,0x3ccac06f,0x3d9637c1,0x3dbffc0e,0x3dab6817,0x3da2b6ec,0x3d4f7609,0x3c0ebd9e,0xbd6433d5,0xbd952fb9, -0xbd086910,0xbe3d98ec,0xbd4ef52f,0xbe438824,0xbe4fa76b,0xbdf9ff3b,0xbda91521,0xbcca0bbb,0xbb837513,0x3c160aa3,0x3db9fe69,0x3ddb6a31,0x3d8dff4f,0x3e374bac,0x3e2b4076,0x3d3d9da4,0x3d75233b,0xbbdb3d0f,0xbcb01561,0xbd98935f,0xbd741f73,0xbd260bad,0xbd07f9ed,0x3d629a47,0x3e370f6a, -0x3e871365,0x3ea1ca3a,0x3ea36da1,0x3ec106c7,0x3edb6218,0x3eefdcba,0x3f029386,0x3eff4cf3,0x3eeaee16,0x3ea35a7c,0x3e48374b,0x3dc1172e,0xbb4c84da,0x3e1ce83b,0x3c8c67d9,0xbd2a6296,0xbd003a82,0xbd2ce052,0xbc081838,0x3beed6d2,0x3a88e8d0,0x3ddaeebd,0x3e0d437b,0x3d0b6fff,0x3e316cff, -0x3e1b0653,0x3cb22296,0x3cdd861a,0x3c95fa60,0x3bc3552b,0xbc0ab19a,0x3bbbf1c5,0xbce99e52,0x3af3d86a,0x3d933c4c,0x3e18b3a8,0x3e57be07,0x3e9c62b5,0x3ed5e330,0x3ef88994,0x3f0b4ef9,0x3f14046f,0x3f14c692,0x3f0750f3,0x3eefbde4,0x3ea23bc6,0x3e76e7d5,0x3e5ef8de,0x3e4e29bd,0x3e8820ab, -0x3e43ba0e,0x3e077de0,0x3d890566,0x3d6e1bbf,0x3d5fa24b,0x3dadb376,0x3dd78c65,0x3df4c2f8,0x3e12c561,0x3e1e355e,0x3e0a8622,0x3dfa9a5a,0x3de5b3c3,0x3dc856fb,0x3da82130,0x3d93557f,0x3d74edaa,0x3d89717c,0x3cf24344,0x3ac40a93,0x3d30d0d4,0x3df2fe62,0x3e484c51,0x3e7c5bf1,0x3e87e573, -0x3e983972,0x3e9c4922,0x3e93b217,0x3e8b779b,0x3e7817d7,0x3e5b61db,0x3e4af71e,0x3e547a72,0x3e74d95a,0x3e95d3af,0x3e5a35e8,0x3e466e84,0x3e3b5bb9,0x3e29883c,0x3e0dd2a4,0x3e095314,0x3dd918c1,0x3d886059,0x3dc5d853,0x3deee254,0x3e1211e1,0x3e04bf08,0x3e0a124b,0x3e0cfa90,0x3e1eb34a, -0x3e270423,0x3e1046d8,0x3e1cae49,0x3e2509ed,0x3e029d34,0x3dcfc769,0x3dcc455d,0x3da665eb,0x3d824dc6,0x3d627c47,0x3d2b3acf,0x3d49640f,0x3d7c00d1,0x3da9a19b,0x3dd0406a,0x3df1255e,0x3e0cbbd6,0x3e28ad2b,0x3e41d971,0x3e570c0b,0x3e69e7f2,0x3e3b9daf,0x3e3cdd51,0x3e339b80,0x3e21bfd2, -0x3e148836,0x3df0e537,0x3ddf37b2,0x3db3a313,0x3ddde0f7,0x3de44c8b,0x3e07c4ce,0x3e095514,0x3e12126d,0x3e1ac8d5,0x3e2f3139,0x3e45c28b,0x3e6551ba,0x3e6a2b08,0x3e73479a,0x3e7869a7,0x3e6d90c8,0x3e6fa621,0x3e64553f,0x3e4f940b,0x3e3b240f,0x3e288436,0x3e2aa886,0x3e26d66d,0x3e1f0b26, -0x3e244177,0x3e2c956a,0x3e37c42e,0x3e3ee4dc,0x3e4aa663,0x3e5ac849,0x3e4ba56f,0x3e4f928c,0x3e550017,0x3e6cb542,0x3e42fe57,0x3e4cc4b1,0x3e47f121,0x3e34116b,0x3e2c4f10,0x3e24b2ca,0x3e384140,0x3e459ba7,0x3e43b905,0x3e3e05eb,0x3e46ed8c,0x3e57ea07,0x3e607896,0x3e6b0c02,0x3e6f4629, -0x3e87fe86,0x3e8930d1,0x3e8381bf,0x3e867425,0x3e87781b,0x3e88e252,0x3e89735a,0x3e88f087,0x3e85d3bd,0x3e8378c7,0x3e818cbc,0x3e80a2f6,0x3e7cd339,0x3e77f6e9,0x3e6f9a29,0x3e664589,0x3e5d6bd0,0x3e59a727,0x3e4a6d8c,0x3e3ccddb,0x3e7f0182,0x3e868a15,0x3e8069ed,0x3e60ca02,0x3e7e52df, -0x3e7c9655,0x3e813bad,0x3e7fed00,0x3e7b8a67,0x3e808169,0x3e82f72b,0x3e8248d2,0x3e86ac21,0x3e75e1e5,0x3e85d813,0x3e8def16,0x3e87d2dd,0x3e540cb3,0x3e5d5cac,0x3e60184a,0x3e601b5a,0x3e62adb0,0x3e654c3c,0x3e6a1302,0x3e6664bb,0x3e63e3f0,0x3e60fdbb,0x3e5c99c8,0x3e58e301,0x3e55f3e3, -0x3e53313a,0x3e513578,0x3e4dd0a0,0x3e4cc2ea,0x3e61b51f,0x3d0fbb2f,0x3cf095e5,0x3d397084,0xbc7d6ba8,0xbd420135,0xbdb9af21,0x3c21e012,0xbd24af87,0xbdb3b995,0xbdaa9bb9,0xbda684ab,0xbda60235,0xbdafe4e6,0xbdb7a3d8,0xbdb663ec,0xbd30f664,0xbb00568e,0xbddbc57b,0xbd4ab077,0xbc97352e, -0x3d354821,0x3cdaf0f5,0x3d068d7d,0x3d09d035,0x3d173afc,0x3d1d506d,0x3d24706a,0x3d197d5e,0x3d1733ee,0x3d13d289,0x3d213baf,0x3d2fa2f3,0x3d5e7b4e,0x3d28e458,0x3d13b813,0x3cde74f8,0x3d09ca57,0x3ccf0028,0x3ca74573,0xbd6dbf23,0x3cb9b5e6,0x39049959,0xbb520ead,0x3c872edc,0x3c0485c5, -0x3d41858d,0x3d26b60a,0x3c023e7a,0x3cf28b67,0x3ce3f7d6,0x3cdc726e,0xbc6c7b43,0xbc4d92a3,0xbbef79b6,0xbbd866bd,0xbd7c74ba,0x3cad60f5,0x3cf1f2c8,0x3cfc5116,0x3d1038e8,0x3d335cb9,0x3d449e4a,0x3d48ec56,0x3d268910,0x3d1a8f58,0x3d1958e1,0x3d46c40e,0x3d6abd41,0x3da10b4d,0x3d2b2808, -0x3cc6bd64,0x3b774c42,0x3c90ac73,0x3cc8abbb,0xbba32fb4,0xbc8f8404,0x38c3784d,0x3b7f86a8,0x3b47e9cf,0x3b8c2f6e,0xbb4dc819,0x3cff7915,0x3d5b200b,0x3bdcab5f,0x3d2eb5da,0x3c698e70,0x3d1a4474,0xbca74bf3,0xbcb778d5,0xbcb3ba16,0xbce55952,0xbcefaec0,0xbbcbb2cc,0x3cbf20a8,0x3cdcf76b, -0x3d15c97f,0x3d63fed1,0x3d80f2c0,0x3d8d7883,0x3d5495df,0x3d3db8b1,0x3d3df285,0x3d91340f,0x3dcd29a0,0x3e2759d6,0x3dae5abb,0x3d5bbae3,0xbb5b8f2b,0x3c89f04b,0xbc78564d,0xbd23d455,0xbce63197,0x3c9332ac,0x3d3321b1,0x3d310ee4,0x3d3790e1,0x3d3af4c7,0x3dcaeb37,0x3dd47d7a,0x3dad524a, -0x3dc22df8,0x3d8cce6a,0x3d3c1f57,0x3c2e7aca,0xbc587f2e,0xbd11d4c1,0xbcadce20,0xbd194ae3,0xbc559ce5,0x3c976987,0x3cb918f8,0x3ced7b35,0x3d5e816a,0x3d88e4f2,0x3d7ddfb0,0x3cc177ee,0x3bada19a,0x3bbd835d,0x3d57e82d,0x3ddfa1d0,0x3e3d74c9,0x3d7b92be,0xbc5d1504,0xbdb7baff,0xbd587598, -0x3de2ce9a,0x3d74247b,0xbc2dc91e,0xbc84c974,0xbd1be6a2,0xbd0e917d,0xbc51cdcd,0xbc2b2fab,0x3d1d1cfb,0x3d881dd0,0x3d87d178,0x3dd9628b,0x3de414da,0x3dacf197,0x3d3f350d,0x3c7fb316,0xbbf4f13a,0xbc957f83,0xbd5d4244,0xbd02a1ba,0x3b5dfb23,0x3c96b25a,0x3daea1bb,0x3df1236a,0x3e1da56a, -0x3e4add91,0x3e840ef4,0x3e968016,0x3e97affe,0x3ea53796,0x3e9ed029,0x3e9e38ab,0x3ea43d6b,0x3ea08e3b,0x3e9116c0,0x3e2021da,0x3d4776ff,0x3ab5ceb2,0xbcad45ab,0xbb169237,0x3cb0fd6a,0x3c9904ae,0x3d020784,0x3c6341ea,0x3d090cf1,0x3d617a99,0x3d8f0721,0x3e046b40,0x3dede064,0x3d856450, -0x3d5a6431,0x3cb1dca9,0xbb85ee6d,0xbc5e95f6,0xbd14abe4,0xbb945054,0xbd05535b,0xbd67fc45,0xbd24135e,0x3d78cc37,0x3e1f19a8,0x3e840345,0x3e81bd3d,0x3e82c289,0x3e7f3b60,0x3e568ebd,0x3e2f800a,0x3e087e37,0x3dd1c494,0x3d2be3e8,0xbc31a341,0x3c64101a,0xbc9619fb,0x3c9f4f4d,0x3c89ef08, -0x3cf6409d,0x3c487a8a,0x3cb29925,0x3c6bb4f2,0xbc68cae0,0x3df7c3aa,0x3e0a9cab,0xbd40e1e7,0x3df1e5fe,0x3d9b8daf,0xbd399970,0xbd113f84,0xbd1b4e30,0xbd6b80e8,0xbd1fb1d0,0xbd4c3f0c,0xbd52f84d,0xbd861089,0xbd87955a,0xbd93538d,0xbd4c880a,0xbd277cb6,0xbc7d98c7,0xbda4b948,0xbdf77d8a, -0xbe1706a9,0xbe27db79,0xbe36e9c5,0xbe4587cd,0xbe3849f1,0xbe07aa47,0x3c8604c0,0xbd13f58f,0xbde92d3a,0xbd9d21b2,0xbcf79ff5,0xbc32b48e,0x3ba1e08f,0x3c5283f4,0x3d302e9e,0x3d42cf1d,0x3d9b7973,0x3d95cb16,0xbd5d64dc,0x3d79525e,0x3d945a5c,0x3d17aaf7,0x3c1a06a0,0xbd0668fe,0xbd40378f, -0xbd901d23,0xbda2abab,0xbd9a3b4b,0xbdfec844,0xbe20f8e9,0xbe3f9d16,0xbe70cc6d,0xbe921ada,0xbea70c44,0xbeb0f8d1,0xbebaef84,0xbec95230,0xbecebaad,0xbecfbc8e,0xbed28920,0xbe9ec196,0xbe605307,0xbd912407,0xbe00db8e,0xbe24cbf1,0xbe3cf599,0xbe015ac9,0xbdb8847a,0xbd205821,0xbc879134, -0xba7ed727,0x3c18bf0c,0x3d5b5678,0x3d572f5c,0x3c8576c2,0x3b6aa481,0xbc9002cf,0xbc8abec9,0xbcfd9dd0,0xbd19c7cc,0xbd52e855,0xbd67b76a,0xbd92f395,0xbdc04117,0xbde1d2f2,0xbe1929f7,0xbe3fef39,0xbe7d05c0,0xbe99a0a7,0xbea8d225,0xbeb4e078,0xbeb5b5ad,0xbeabc22f,0xbea2c7c7,0xbe9c963d, -0xbe9c4952,0xbe7f4f73,0xbe4620b4,0xbde7b84b,0xbe11d459,0xbddea797,0xbdedcba5,0xbdd477b4,0xbdd63fd9,0xbd9fb6be,0xbda5fea9,0xbd47fafe,0x3c40370b,0x3c849635,0x3c68aca3,0xbc2d3519,0x3ccd06bd,0x3c870ff1,0xbcb344a0,0xbd6eb46f,0xbdb8a775,0xbdd094b4,0xbe0235ed,0xbe10dde7,0xbe17e284, -0xbe24c868,0xbe2e172f,0xbe2dde90,0xbe231584,0xbe2231bf,0xbe1ac993,0xbe1b9dca,0xbe203e34,0xbe2b029d,0xbe3c7c47,0xbe44fbee,0xbe4a3ab9,0xbe4aad5b,0xbe3deefb,0xbe24b709,0xbe03b41d,0xbe03d673,0xbdcba50f,0xbdb4d23e,0xbd9369cd,0xbd472c4c,0xbce03d0c,0xbc701ae8,0x39a8dae7,0xbbb856f7, -0xbc4cdd5c,0xbc046af0,0xbd355941,0xbcfffdab,0xbd7e908f,0xbd62799a,0xbdbdb34d,0xbdeacde6,0xbe05cd04,0xbe0d6537,0xbe385f68,0xbe45e787,0xbe3a21f6,0xbe38578e,0xbe2ca040,0xbe244c5c,0xbe1b9a1c,0xbe2e65a6,0xbe387491,0xbe3e4ce8,0xbe40141f,0xbe433753,0xbe47c2a1,0xbe42b804,0xbe40de1c, -0xbe45084c,0xbe258576,0xbe2fe818,0xbe35dc0e,0xbe154d32,0xbe1cefe9,0xbe12b4eb,0xbe0af3a8,0xbe05683f,0xbdf71ff3,0xbdf9d118,0xbe07a9e1,0xbdffbd63,0xbe07972c,0xbdff3781,0xbe01d24c,0xbdfcf37b,0xbe10bb23,0xbe1ab3c9,0xbe1aa6d6,0xbe00f07d,0xbe4d24c1,0xbe476e40,0xbe4c40f5,0xbe51716f, -0xbe53f647,0xbe563fe1,0xbe55403f,0xbe53b606,0xbe50a7ad,0xbe4fb208,0xbe4eb0fc,0xbe4cb07b,0xbe4a86f0,0xbe43fcd5,0xbe3d490b,0xbe36e3d8,0xbe34158f,0xbe251f9d,0xbe26ade3,0xbe2fb562,0xbe25b0ef,0xbdf48341,0xbe27fef3,0xbe1d37f0,0xbdf4def1,0xbdf61fdf,0xbdee401c,0xbdedf2cc,0xbde5cd6d, -0xbde63ff6,0xbde04905,0xbe21aa89,0xbe2e3f52,0xbdd7adf2,0xbe29888b,0xbe36d677,0xbe388a48,0xbe2f5515,0xbe3558cc,0xbe352c85,0xbe37baf3,0xbe3a8b3c,0xbe3f1664,0xbe3c5efe,0xbe3a85c1,0xbe380201,0xbe3557bd,0xbe32c5d1,0xbe309c07,0xbe2e3ac8,0xbe2c62a0,0xbe298e8d,0xbe291020,0xbe391c66, -0x3cca7489,0x3d0557c5,0x3c73fe38,0x3d8aa5a5,0x3dbcff7f,0x3dfdc035,0x3d2bf2ae,0x3dadf2d7,0x3df156c8,0x3e032977,0x3e02be96,0x3dee8527,0x3e010aef,0x3e046823,0x3e080156,0x3db313d8,0x3d477316,0x3e04faa2,0x3db088d5,0x3d749307,0x3ab6cc4c,0x3c96a928,0x3c61522b,0x3c4ba39f,0x3c35df02, -0x3c35564c,0x3c351bc9,0x3c6c85d0,0x3c8956aa,0x3ca046c7,0x3cac53de,0x3cb72b00,0x3cc296b5,0x3cc50b48,0x3ce225e6,0x3d255bb2,0x3d00c49f,0x3d1295af,0x3d089622,0x3dc9d5a0,0x3ceaad4b,0x3d42e218,0x3d5fe392,0x3d291b10,0x3d13f060,0x3d205c7c,0x3d54e577,0x3d6a3bb4,0x3d4d9a00,0x3d44ea60, -0x3d6e6e4c,0x3d6cfb20,0x3d37c4b6,0x3d27180b,0x3d0fdee3,0x3da4e1c5,0x3bc72d81,0x3b2a79a5,0x3b374766,0xbb2f0b63,0xbbd57d8f,0xbc08c8d1,0xbbd0d141,0x3b608e47,0x3c50ee00,0x3cb3fb08,0x3ce7f06d,0x3d07fc41,0x3d0d0f05,0x3d1bf582,0x3d37134a,0x3d8e0918,0x3d4063f1,0x3d8bcb6e,0x3d9632a8, -0x3d996bb1,0x3d4e2a6f,0x3d301982,0x3d337d08,0x3d33bd0b,0x3caa302f,0x3d919405,0x3d77f090,0x3d64ae3d,0x3d35207d,0x3d8de4ae,0x3d94c2e7,0x3d5397d9,0x3cefb90b,0x3ce7a379,0x3cd93302,0x3cd9e764,0xbb754712,0xbc9b4190,0xbc9f3099,0xbcfc4cd1,0xbd1c2712,0xbd1d05f4,0xbd098e7b,0xbc74af64, -0x3b37162e,0x3ca68641,0x3ce47dc0,0x3ce27807,0x3cadd28b,0x3d1ef236,0x3d71a30b,0x3dff8b06,0x3dae7ce3,0x3d7469e0,0x3d72b01f,0x3d404084,0x3c74aa8b,0xba9f1e85,0x3c9c2829,0x3c64016c,0xbc64ed0f,0x3d73eee3,0x3da5e6ec,0x3d056639,0x3d8215b9,0x3d561044,0x3d5202b9,0x3b30f3e0,0xbc904643, -0x3c1515de,0xbc1f68c6,0x3bd25a73,0xbcf7cca4,0xbd263377,0xbd254811,0xbd5941a1,0xbd7e8857,0xbd8b5861,0xbd70acf3,0xbcbeea77,0x3c356963,0x3d2c0292,0x3d5dbeaa,0x3d5fe828,0x3d0b79ef,0x3d7144db,0x3db4163c,0x3e2bacf7,0x3dce27fc,0x3e2ee7d7,0x3e25c4e2,0x3e45461a,0x3e3ac366,0x3e027ccf, -0x3dc56dcc,0x3da26614,0x3d92239c,0x3d6bf3db,0x3d6cebde,0x3d6687f2,0x3d7ccd23,0x3d7e50e2,0x3db6aae6,0x3d1bbe4c,0x3c3a3e3f,0x3c969394,0xbb8e5ca3,0x3bffeb56,0xbd18b963,0xbda59ad9,0xbdc085a4,0xbe0e5cc9,0xbe10d9c3,0xbe0b1313,0xbe033bb6,0xbdef2315,0xbdcdbdab,0xbd99ade2,0xbda1726a, -0xbd729beb,0xbd593942,0x3d5367bf,0x3dc02c54,0x3de665b2,0x3e1dfe68,0xbd940f00,0x3c25a75a,0x3c0bc970,0x3cb48d46,0x3d1df548,0x3d342e04,0x3d882c6d,0x3ddf742d,0x3e02c7f0,0x3df9c730,0x3d928a02,0x3dbfaa63,0x3d8f9e3a,0x3d9787e9,0x3c8d2d6b,0xbb873562,0xbbc4db71,0xbcf2f9e1,0xbd16290f, -0xbddb94ad,0xbe1cdf4b,0xbe311001,0xbe5056cf,0xbe9a729e,0xbeb38d21,0xbeb63fcb,0xbe8e9c33,0xbe57a99a,0xbe10b6ad,0xbdaed06f,0xbc5c05e2,0x3c106703,0x3d9ea808,0x3da665af,0x3d679873,0xbd383e96,0xbc31acc5,0x3c6cf7ee,0x3c8f0276,0x3d17b0f3,0x3d374743,0x3d1c341f,0x3d4cbe88,0x3d5c928a, -0x3da6695f,0x3dd0a774,0x3be165aa,0x3dacfc0d,0x3dc98f40,0x3e1ad9dc,0x3d944f18,0x3d20f69a,0x3d51c73e,0x3c90231d,0xbbbd5f1c,0xbd27b2f7,0xbd6e3b75,0xbda90069,0xbddb4790,0xbe032786,0xbdf24ffe,0xbdc3b02a,0xbd2be65a,0xbc7a5b78,0xbbc01dde,0xbd248fa1,0xbd5324ca,0xbdaf1892,0x3d79d3c1, -0x3dbcc352,0x3c41160f,0x3b9f52b3,0x3c95b416,0x3d85fb85,0x3d019925,0x3d35b7ab,0x3d031adc,0x3d03c0d9,0x3d476aee,0x3dc45525,0x3d833231,0x3d220983,0xbc737b5f,0x3ca97c90,0x3cd4ce49,0x3d917796,0x3cb66ee0,0x3b49bd50,0x3ba490a8,0xbb0cca45,0xbd205577,0xbd4d524a,0xbd501ffa,0xbd50df62, -0xbcec8080,0xbc6b1791,0xbb542c77,0x381f6acb,0xbab8425e,0x3c558a3b,0x3d85796b,0x3d79171f,0x3de8317f,0x3e21159b,0x3e5b798e,0x3e3e148b,0x3dad99b4,0x3ca60b7a,0x3d4cf070,0x3db6af2c,0x3d74bd2e,0x3d7f4774,0x3d4fb979,0x3d3ac676,0x3d69b307,0x3d9afcf4,0x3d3caa00,0x3d0e5800,0xb9fb3638, -0x3d087944,0x3d4d5a76,0x3d924d91,0x3d3e7397,0x3cb0ec65,0x3b516853,0x3bc62781,0xba99752a,0x3cf41c19,0x3ca90b6e,0x3b18b967,0xbc3d34cf,0xbc12284a,0x3c345c8b,0x3cc9dfbd,0x3d378e25,0x3d618981,0x3d94a4e7,0x3d40e688,0x3d86eb9a,0x3df09824,0x3e31afa4,0x3e36cfcf,0x3e0f4c53,0x3d752370, -0x3d6b0712,0x3c7eaabd,0x3c2d509d,0x3c988cb3,0x3c97ebd3,0x3d587c70,0x3d7e0817,0x3d23943e,0x3d3c3d5b,0x3d327571,0x3d58e07f,0x3cb0eb09,0x3c7bdaaf,0x3d078213,0x3d1c604e,0x3d68cbd1,0x3d9509a1,0x3d8d018e,0x3d5b10b5,0x3d738f79,0x3d98099a,0x3d761d5f,0x3d07928f,0xbc0a1222,0xbcea5575, -0xbd40acc4,0xbd373e99,0xbd3b3bde,0xbd2a807d,0xbc340e41,0x3cf4cf58,0x3d9d0f7e,0x3dd7c0c4,0x3e01af21,0x3e1d6bc7,0x3dda03b1,0x3ddba8c6,0x3dc76457,0x3db3413d,0x3d8c0ef1,0x3d28f22a,0x3d277cc4,0x3d1af916,0x3d2cd690,0x3d295128,0x3d6b4751,0x3d523a67,0x3da3a45f,0x3d4be653,0x3d99e3fb, -0x3d2e7e3f,0x3d6b7a3d,0x3d49f62e,0x3d7db9ec,0x3d763684,0x3dd971ef,0x3de11ab5,0x3d9c6792,0x3d841572,0x3d3592c9,0x3cdb5cf2,0x3b59e6f3,0x3cc08a62,0x3d0d4aaa,0x3d27a2b5,0x3d53001e,0x3d6c8204,0x3d8254e6,0x3dac4f18,0x3dd76a24,0x3e0780f9,0x3df11c5a,0x3dc3f13e,0x3dda2fe2,0x3d5f3384, -0x3dc12c87,0x3da556ab,0x3da72200,0x3db9ad6c,0x3db0732d,0x3dbe88c8,0x3dbc7ea7,0x3d9b3a09,0x3db0b944,0x3da47f1b,0x3da03ad9,0x3d7c31bc,0x3d9c8bad,0x3d9ebe2b,0x3d91bb99,0x3cb0ba1e,0x3dcf4503,0x3dbba3d4,0x3db4fb72,0x3db00c8d,0x3da36027,0x3d9acac1,0x3d8a081b,0x3d9468e1,0x3d960942, -0x3d9bbfc0,0x3d9e6343,0x3da351a1,0x3da301ae,0x3dabaab4,0x3dad8a10,0x3db2e0e1,0x3dbac1ca,0x3db41674,0x3dcb3881,0x3dabd6d1,0x3d8da06d,0x3cddf1b9,0x3dc328ce,0x3d949240,0x3d0d72f2,0x3cf5911f,0x3cdbe2f9,0x3ce3e9d9,0x3ca60165,0x3c92cf09,0x3c82b3f0,0x3d87fad5,0x3db2b316,0x3b99bdd9, -0x3d838837,0x3da7b534,0x3dd6d094,0x3db52c6d,0x3dbc360b,0x3db77178,0x3db7301d,0x3db75533,0x3db6da08,0x3db67e80,0x3db4a57d,0x3db295a4,0x3dafa0ba,0x3dacc0c1,0x3da92240,0x3dab66eb,0x3dadd1dc,0x3daf20cd,0x3db5d24c,0x3dc3201c,0xbd6c02eb,0xbd87a3ca,0xbd688454,0xbda21346,0xbdb11fea, -0xbdc21d51,0xbd7b38a0,0xbda12b78,0xbdba7e21,0xbdb78010,0xbdb22568,0xbdab03c4,0xbdb1258a,0xbdb0ca2e,0xbda63e81,0xbd93d425,0xbd6ba453,0xbdc447ba,0xbda7e37f,0xbd905d81,0xbd19d319,0xbd484054,0xbd40a5a3,0xbd33d1d3,0xbd46f365,0xbd53626e,0xbd6a6258,0xbd66f5c0,0xbd683829,0xbd631b57, -0xbd6e5335,0xbd78c33e,0xbd8d3e2c,0xbd81a330,0xbd849078,0xbd92e394,0xbd8bd3e0,0xbdd180e0,0xbdbcb936,0xbdc8b6d2,0xbd89f1e6,0xbd8b59cd,0xbd836d54,0xbd5553ff,0xbd481576,0xbd0c48e9,0xbd17027d,0xbd21cc20,0xbd12feb2,0xbcfacba0,0xbcb13cce,0xbd1f78c8,0xbd29288c,0xbd61dc46,0xbd5d14e9, -0xbda8f0b5,0xbd270092,0xbd29dced,0xbd30422a,0xbd0eb257,0xbd41fc86,0xbd69b22d,0xbd942bfc,0xbd94f999,0xbd96cd4c,0xbd8e2bb0,0xbd9a1ab2,0xbda8fea5,0xbdd46c0c,0xbdb72326,0xbdbdaefc,0xbde49a20,0xbddceac1,0xbe11bb55,0xbde36694,0xbdb2363e,0xbd8e0041,0xbd620bc2,0xbd3c0cfc,0xbd024fb6, -0xbcd33437,0xbc7a28b0,0xb9953a75,0xbc1619a5,0x3ab4f494,0xbb093184,0x3d005b53,0x3aa8ff4f,0xbc211eb7,0xbd0c18f9,0xbd34e499,0xbd5a8142,0xbcfeb3f8,0xbcdfd79c,0xbcf9e790,0xbc653492,0xbd153c8d,0xbd6088f5,0xbdb2c7b5,0xbdb2a1a3,0xbdb844a0,0xbdb1b68b,0xbdcd52bf,0xbde05b46,0xbe2118a7, -0xbe058680,0xbe0f3c1f,0xbe3392ec,0xbe1f8a1c,0xbe68930e,0xbe2f0943,0xbdec1934,0xbda90815,0xbd72e932,0xbd286fee,0xbcd50ebf,0xbc99e73c,0x3cb7b15f,0x3d3d3986,0x3d07a690,0x3d1a1ec8,0x3d36e002,0x3d92d478,0x3cb92488,0x3b8e834a,0xbd175fc5,0xbd13e467,0xbd70bcab,0xbcc6ad00,0xbc818f80, -0xbc80f4ad,0x3c126100,0xbce35dad,0xbd7db443,0xbded6155,0xbdf87bf1,0xbdfef699,0xbdee5260,0xbe00da64,0xbe16a77b,0xbe5e0707,0xbe33438d,0xbe3fab60,0xbe8277fa,0xbe74bed8,0x3dca8f65,0x3e145ef3,0x3dfb9a9f,0x3dc3e991,0x3d9a76b2,0x3d54202f,0x3d5d6170,0x3d9dd14b,0x3d97374b,0x3d83b7c8, -0x3d9283c4,0x3cdb4426,0x3c7342fb,0x3d735cb7,0x3c98890c,0x3bffec3d,0xbd124433,0xbca5541f,0xbd520450,0xbd008756,0xbbd3c6c2,0xbcd6e3fd,0xbbb47b30,0xbd014975,0xbd167bdd,0xbd520560,0xbd290fc7,0xbd5ab3b7,0xbd757c52,0xbdd8bde3,0xbe028311,0xbdef8702,0xbe23f6b5,0xbe00a5af,0xbd919729, -0x3d3f7545,0x3e286294,0x3dd59a55,0x3dab4c07,0x3dad13e4,0x3db9133c,0x3dd6c26d,0x3dc7012f,0x3d854a24,0x3dcd0953,0x3dd4249d,0x3ce7dda8,0x3d4ddd2b,0x3d72160a,0x3ddd4823,0x3d133750,0x3c92cc6a,0xbc577f8f,0xbbd45080,0xbd03ff7c,0x3ad23cb5,0x3cfcde8c,0x3c7871ad,0x3caafd7e,0x3d4bc9f5, -0x3d780819,0x3ce56552,0x3c879cfb,0x3b93f6e9,0x3c95a691,0x3ca1e362,0x3d90816a,0x3e4900de,0x3e58fc38,0x3e4c3e55,0x3d84a734,0x3e24053f,0x3d240cec,0x3d782bbf,0x3d75024e,0x3d5be874,0x3d5556ec,0x3bcfb2b2,0x3d120fe3,0x3e25be40,0x3d9134e4,0x3d24ae4f,0x3b2aa9bd,0xbd10df4a,0xbb411a2c, -0x3e3218f0,0x3cb9f142,0x39b0d018,0xb9e06324,0x3be50828,0x3c347005,0x3c97ae0d,0x3d2ccf01,0x3cd4a80d,0xbc2c0486,0x3bf67e19,0x3c51f9c3,0x3b9c70f8,0x3c09a954,0x3becbd91,0x3c66cb26,0x3c85abe7,0x3d2a7a3d,0x3e03be47,0xbc33fa33,0xbd95a353,0xbe066cef,0xbc8cb8f8,0x3c93a642,0x3c7be962, -0x3d060b0f,0x3c82c58a,0x3cb9387c,0x3cd64f11,0x3d2970cc,0x3dd26b19,0x3cb3c090,0x3a7ec320,0x3d1bdd9a,0x3c404bb7,0x3d37c47c,0x3e212b66,0x3d883c80,0x3d3a613b,0x3d4ed71f,0x3d419996,0x3d5c81e1,0x3d862fa5,0x3d90b4e0,0x3d7580ba,0x3d2c8ada,0x3d6af36e,0x3d4f890d,0x3caf05b3,0xbd23943e, -0xbdee9444,0xbe4b2dc6,0xbe4645fa,0xbe325520,0xbde700ef,0xbe07c717,0xbdfc0212,0xbe2d8093,0xbca45770,0xbd61c22a,0xbccc3405,0xbb045163,0x3c1bc766,0x3c5adafc,0x3cdd67cb,0x3caba67d,0x3cbf8eae,0x3cd3b3ad,0x3cecb5f5,0x3d1b2835,0x3d43a53f,0x3d3c5677,0x3d144227,0x3cff308f,0x3d2d02d7, -0x3d480057,0x3d341898,0x3d28eb73,0x3d14c812,0x3d017a47,0x3d006887,0x3cd8971e,0x3bf45516,0xbcf3594b,0xbd9ba7e0,0xbe06dec8,0xbe2bb8c7,0xbe43bbbb,0xbe1baefd,0xbdf3eddc,0xbdc52e45,0xbdc01f0a,0xbde9f5d4,0xbe4d3b2c,0xbdce328a,0xbdc8e00c,0xbd0d1f3d,0xbc50ae16,0x3c79284c,0x3d1b4aa6, -0x3d11073f,0x3d1e1fce,0x3d3ecf1b,0x3d569f46,0x3d514156,0x3ce40940,0x3d23f4dd,0x3d1c3364,0x3ce6abe3,0x3d0b797a,0x3cd68a0c,0x3c1d17a8,0x3c55782f,0x3c90574b,0x3bfdb67c,0xbca2b02b,0xbc84ad5b,0x3b8d44cd,0x3d12a5a7,0x3cf60a32,0x39977538,0xbc8942b1,0xbce16cd4,0xbcfc881f,0xbd35334b, -0xbd61ad2a,0xbd902455,0xbd8295c3,0xbda7f731,0xbe067e05,0xbe083c6e,0xbd93c93f,0xbdb17fec,0xbd823ab7,0xbd380daf,0xbcbf80ea,0xbc97a45a,0xbc05d757,0xbb5d895f,0x3c22f717,0x3c2a9cb0,0x3d03103e,0x3c80625f,0x3d23b9b9,0x3cf739ce,0x3d1b20a2,0x3caae06f,0x3c984446,0x3b9cd77d,0x3b9cae21, -0xbd1b8532,0xbd218a5c,0xbc4af245,0xbb8ef840,0xb9b06f6d,0x3bbcc384,0x3c8b4746,0x3b34224a,0xbc12f976,0xbc94e166,0xbcc75358,0xbcee6e15,0xbd199762,0xbd379964,0xbd5675de,0xbd65d496,0xbd78dc6d,0xbc126b5c,0xbba0ac2e,0x3cfabf1c,0x3c26e5fd,0x3cc1f652,0x3cd783a4,0x3ccb7263,0x3d052a12, -0x3cc63441,0x3cb637be,0x3cf1075a,0x3cb00706,0x3cbe80cf,0x3ccd2f87,0x3ceb0979,0x3c7070ca,0x3c355679,0x3be77ada,0x3cfe7055,0xbcd5f6da,0xbcb9b8f5,0xbcc00b20,0xbcc38587,0xbcac4fed,0xbca042f6,0xbc8147bb,0xbcb98a10,0xbcd19ba4,0xbcf7cc68,0xbd0bc45a,0xbd1b8e73,0xbd23c6fc,0xbd0be8cb, -0xbce8cfe3,0xbcbfbf6a,0xbc903109,0xbc4bf9fb,0xbc7d1404,0xbc375583,0xbb5fc0a6,0x3c8c0dfa,0xbc5fd93b,0xbb4ede71,0x3c92a7cb,0x3ca6f270,0x3cb82dc0,0x3cac66ad,0x3cd3f9cd,0x3cda9192,0x3ce157c7,0x3aa943db,0xbc1a4155,0x3ce2e8f6,0xbb608bee,0xbc5d71d4,0xbcd55f7e,0xbc8633c1,0xbc9d9f42, -0xbc986e49,0xbc9be76c,0xbca3403b,0xbca841a0,0xbcad1150,0xbcad6895,0xbcab5d8c,0xbca8a3ef,0xbca577ca,0xbcaebb52,0xbc99cea1,0xbc8ec6be,0xbc810893,0xbc74e4fe,0xbc4c4b2a,0x3c507f68,0x3c08be63,0x3bab5fbe,0x3c97ad50,0x3cc58333,0x3cf6c10d,0x3cb1cefe,0x3d011586,0x3d19a79f,0x3d1191c6, -0x3d1004cd,0x3d0a4bd5,0x3d118b4e,0x3d18dbcf,0x3d23a8ba,0x3d0e8596,0x3cd2fe76,0x3d0e790e,0x3d03120c,0x3cd228b2,0x3be6c335,0x3c4f2f4b,0x3c38725c,0x3c1c0d2b,0x3c15c171,0x3c0a96db,0x3c03bff3,0x3c0472d8,0x3c01cf9c,0x3ba73ba4,0x3c241f10,0x3c2a9fb4,0x3be5a34b,0x3c06b55e,0x3c093b25, -0x3c1740fa,0x3c1270e2,0x3c097319,0x3b752b29,0x3ba31670,0x3c00e939,0x3cba7a72,0x3ce82969,0x3cece69f,0x3cfb8e0b,0x3c9f1146,0x3ca19af1,0x3cdd49e5,0x3ccab7ff,0x3cdf6981,0x3d06cb7b,0x3d15c54b,0x3d01afde,0x3cb298ff,0x3cadb065,0x3d087ef1,0x3c5c525b,0x3c57f384,0x3c62b5db,0x3c015b83, -0x3bfd464e,0x3be82ba4,0x3c01cf49,0x3c0ecb9a,0x3bf46201,0xbaacc911,0x3c2ce213,0x3c177c5d,0xba6113a1,0x3aaa475b,0x3b757a4f,0x3c1921c5,0x3c3bbc50,0xb9f58778,0xbc84930e,0xbcbcb9e3,0xbbdb5dd2,0x3c723497,0x3cc5445f,0x3d0f2be6,0x3d27c169,0x3d0290d6,0x3cd50799,0x3d1009ba,0x3d0179ed, -0x3d315d13,0x3d3e0354,0x3d5707ce,0x3d33795e,0x3cb3e716,0x3ce7e813,0x3cf0de0b,0x3c97c571,0x3c75a803,0x3c5513bf,0x3b649b70,0xbaf393cf,0xbb91aeed,0xbb94d40a,0xbb6089ff,0xbb64b34e,0xbc97a0bd,0x3bd26a2d,0x3bac140e,0xbca4e2ef,0xbc2c906f,0xbc1542cf,0xba59c7c5,0xba4b7dbe,0xbaedef52, -0xbd2f850d,0xbd534d87,0xbc94e863,0x3cbe55dd,0x3cf750fe,0x3d3bf17a,0x3d1fd8d6,0x3cf3826b,0x3d08b566,0x3cf98d78,0x3cfd40b8,0x3d481ce8,0x3d9cf36b,0x3d71ce45,0x3d3b303b,0x3c9b8855,0x3cbdf34c,0x3ce70167,0x3c90ee4a,0x3c61523d,0x3c8aef06,0x3b1f4aa4,0xbbb27c74,0xbc07cd47,0x3a963628, -0x3c1810dc,0x3c1d32ff,0xbc846001,0x3c99270d,0x3a71b1a6,0xbd1d2b23,0xbca6e868,0xbb0c7480,0x3bb6ea3a,0x3bf8ec5b,0xbcbe5c48,0xbcae8f64,0xbcb75dea,0xbd1eae1d,0xbcc4325c,0xbcdbe014,0xbc50c61c,0x3ca41ffa,0x3d74f54f,0x3d8a0817,0x3d6ca6e6,0x3d3eb425,0x3d47be01,0x3d90e5a7,0x3d3a4eda, -0x3d2c7371,0x3d13463d,0x3d035cb6,0x3d47ff43,0x3d72b206,0x3cb2dc70,0x3bfb3baa,0xbd3200e4,0xbc141199,0xbc6d47fb,0xbd35899d,0xbd9b7a11,0xbdcea03a,0xbe049c5e,0xbdbece77,0xbd829530,0xbb80f045,0xbdffa35f,0xbe1e0c87,0xbdb356a6,0xbd6f0810,0x3e42518c,0x3e1a8ad0,0x3e2d884c,0x3e206b0b, -0x3e0dfd32,0x3ddadefd,0x3db9899b,0x3ddd3953,0x3d89d83b,0x3d83fce6,0x3cd76611,0x3ceb3fc4,0x3d29958d,0x3d9fa67a,0x3d1c3900,0x3d0b9a7c,0x3ca87fee,0x3c98eb87,0x3cf864cb,0xbc3433ed,0xbd212765,0xbcc7d360,0xbd272e1e,0xbd63de71,0xbdab67f2,0xbddc0f41,0xbe00f9d3,0xbe034a77,0xbe028ed2, -0xbd9c625b,0xbd9a6230,0xbd4c2758,0xbdeb17e4,0xbcfd9186,0x3e397958,0x3e3f8451,0x3ce1611b,0xbc7db79d,0xbb302d15,0xbcb93884,0xbca601a8,0x3d0d3e6f,0x3d8ee2cd,0x3e1e89fb,0x3d3b1699,0x3b959c4c,0x3cce8b38,0x3bb781eb,0x3d546a94,0x3e1a569f,0x3d9970a3,0x3d3df7a6,0x3d2228c4,0x3c67ef13, -0xbafb337b,0xbd1a0c94,0xbda24018,0xbde65a02,0xbe13169f,0xbe1202bf,0xbe0abb0c,0xbdf95f64,0xbdb0aad9,0xbd488789,0xbcc8c5ad,0x3d71870e,0x3da2c2c4,0x3d82a675,0xbb8d081d,0xbcfa0a84,0xbc690402,0x3c9ce736,0x3c844e36,0x3bf020c6,0x3c4283e0,0x3cd15fa8,0x3cf71194,0x3d3b2b7d,0x3d0f5520, -0x3d5c028f,0x3cf5895e,0x3cca80a9,0x3d7df4aa,0x3c27a6aa,0x3cb867a4,0x3d9673c3,0x3d3ac473,0x3d4b3f7f,0x3ca820eb,0x3c840cc4,0x3cc2783b,0x3c214291,0x3cdec327,0x3d2bd33f,0x3cf3ac17,0x3d76370d,0x3da17258,0x3dd26eaa,0x3e0ec1dd,0x3e2beadd,0x3e35cedf,0x3e06bfbc,0x3d8e5bba,0x3ce90593, -0xbcd90ce7,0xbc8894df,0x3d88d86b,0x3d0c1bf7,0x3d0b0f41,0x3cf30e9b,0x3c965f71,0x3c900abb,0x3cc1f38a,0x3cca9210,0x3d3110a3,0x3d95ff5b,0x3d25fb4c,0x3caf784f,0x3c4830f1,0x3cceb430,0x3d1ad491,0x3d27a4b4,0x3cfe1319,0x3c88637d,0xbbb15da3,0xbc2fd7e0,0xbbdf648c,0xbc89a5d9,0x3b87f8e4, -0x3c8cbcd0,0xbb935e71,0x3d07afe5,0x3d584017,0x3d891239,0x3dc0e47d,0x3de5b46e,0x3e01b04a,0x3dcdccd4,0x3da42a91,0x3d9ee08f,0xbc685fce,0xbd078730,0x3cdbe276,0x3ce05dfb,0x3d73043f,0x3d4c83a1,0x3d4fdb3e,0x3d32c82e,0x3d0a4021,0x3cd174c8,0x3c9e4332,0x3cf2003b,0x3c87e286,0x3c98a0e8, -0x3ccef85e,0x3cc77061,0x3cc7ac7e,0x3d1af4b7,0x3d09ea3e,0x3cfaa26d,0x3cf8d5e3,0x3cba6e02,0x3c9a7b75,0x3ce29dd5,0x3d183ce7,0x3d027cdc,0x3c720da8,0xba91dffd,0x3c02d547,0x3d215d59,0x3d6a7c5e,0x3d81eeab,0x3d5801aa,0x3d4ed2d1,0x3d426f95,0x3d8872fa,0x3cb52ff8,0x3c3c6c52,0x3be7526c, -0x3d433235,0x3d18e4f2,0x3d4d3509,0x3d3932c1,0x3d5cc40b,0x3d75d001,0x3d77570b,0x3d7a2b02,0x3d7d4235,0x3d47e19e,0x3d214b11,0x3cb199ca,0x3cec26a4,0x3cc1b8eb,0x3ce061f8,0x3cb1d807,0x3cd4ec84,0x3cd1ee59,0x3cc81adc,0x3c28b9c8,0x3d008b40,0x3ce255a6,0x3b2e5916,0xbc114dd0,0xbb0b01a5, -0x3b456963,0x3b995365,0x3bc07646,0x3c1daac5,0x3c55cc9c,0x3d029924,0x3d3ee206,0x3d8a04c5,0x3d4264de,0x3d063840,0x3c1ccb9d,0x3cb562b1,0x3d0a9450,0x3ccae745,0x3c410859,0x3c624f6a,0x3c04146c,0x3b6cd818,0xba638ebf,0xbb09ea05,0x3aa1dd28,0x3c274163,0x3c636e26,0x3c9cd05c,0x3ca8270b, -0x3ccf8015,0x3ca51bb1,0x3cbf354f,0x3caeec7c,0x3caff6c6,0x3b826b11,0x3d11df09,0x3d08e964,0x3d079e34,0x3d02a4dd,0x3ce960c7,0x3cc57f6c,0x3c9f620c,0x3d02f5a9,0x3d2e4850,0x3d547217,0x3d786a73,0x3d89d584,0x3d9ddd18,0x3d8a2642,0x3d7e2bc7,0x3d60c7d8,0x3d3df99b,0x3d4e9b8d,0x3d43ddb5, -0x3d50b1f9,0x3d3f4a2e,0x3d159872,0x3d3fb05b,0x3d3267f9,0x3d1229f5,0x3d1bb3c6,0x3d1939d0,0x3d1cea64,0x3d1c8ea0,0x3d1fcaa6,0x3d242ddb,0x3d44c22a,0x3d554a0b,0x3d03f98a,0x3d421d5b,0x3d549ae1,0x3d680f12,0x3d4f5627,0x3d5484e0,0x3d521e53,0x3d4ef83c,0x3d501f6d,0x3d498769,0x3d5a6624, -0x3d6328af,0x3d6e1a76,0x3d769512,0x3d7f5af3,0x3d88903a,0x3d7e113d,0x3d736c49,0x3d68d45d,0x3d5b56be,0x3d888dca,0xbd1b725e,0xbd1d90c2,0xbd135148,0xbd368052,0xbd367e5d,0xbd1f8cc6,0xbd0e4446,0xbd1cb38d,0xbd180af6,0xbd27e820,0xbd27929d,0xbd1d5aa5,0xbd1c0cc3,0xbd1dd3a9,0xbd240ab0, -0xbd1c44f1,0xbd08ad14,0xbd2b9275,0xbd2ffa63,0xbd274fc3,0xbcedfe58,0xbd029cdf,0xbd028991,0xbd088127,0xbd074cb0,0xbd08499d,0xbcfd4728,0xbd17d060,0xbd20a1b6,0xbd267ccb,0xbd1f8b4a,0xbd2bde43,0xbd5c022b,0xbd43c7cc,0xbd40bb60,0xbd4971fe,0xbd29c96f,0xbd27325b,0xbd1f7c98,0xbd2cdc8a, -0xbd085188,0xbc9b3e5f,0xbca056f4,0xbc895fbd,0xbc6fcf5f,0xbcb65c99,0xbcd2e051,0xbcc79105,0xbc9c5b2e,0xbc798c13,0xbca70bdb,0xbc75ef10,0xbc8ffc6a,0xbcd72b4a,0xbcfebfcb,0xbd24a083,0xbce12e63,0xbce20b58,0xbcf8d54f,0xbd0f6842,0xbd0e8804,0xbd13340e,0xbd037dee,0xbd4a3a1c,0xbd60ce08, -0xbd66d64f,0xbd51f2b0,0xbd75c4d5,0xbdb5784a,0xbd9dd927,0xbd977e73,0xbd95de6b,0xbd5212c0,0xbd60160a,0xbd490113,0xbd3b5788,0xbd1ce7f9,0xbb7f26ca,0xbaff8fce,0x3aee1cf3,0x3bf2e280,0xbc0eebd5,0xbbeb4624,0x3a7138ac,0x3c0842b5,0x3c27cbe6,0xbb5b4c61,0x3c11ffc9,0x3bd11dbe,0xbc28dd90, -0xbcb79e6e,0xbcee750a,0xbc92e8cb,0xbc8e6b36,0xbca0a866,0xbcec9464,0xbcd9d15d,0xbd00e371,0xbcbb9836,0xbd67a8ba,0xbd8a9321,0xbd96f92d,0xbd884a92,0xbdab4ee8,0xbe0a40bc,0xbde36edf,0xbdda3df5,0xbde372ce,0xbd8cb47b,0xbd0b5b8b,0xbcd52665,0xbcc6c7a2,0xbb9b94ef,0x3d23ee10,0x3d1f1595, -0x3d4071bd,0x3d30c63a,0x3c9c8174,0x3c95a4c0,0x3d0b5ea5,0x3d1a58d2,0x3d554dc6,0x3d499b51,0x3d61eedb,0x3d22f576,0x3bcc5afe,0xbb3cc17c,0xbc2986ec,0x3b2f65e1,0xba57276d,0xbc30f86a,0xbce7eb7f,0xbcdc8984,0xbcee68cb,0xbcb94c90,0xbd997c86,0xbdc8f78d,0xbdcbfa0e,0xbdb4ccd3,0xbde8eedf, -0xbe3c2309,0xbe1e09bf,0xbe178def,0xbe11953c,0xbd88a482,0xbdfc7ba1,0xbd90181d,0xbdfb2b21,0xbdeeebae,0xbd675844,0xbc860e10,0xbba6ebad,0xbcc130f4,0x3d1a9066,0x3d72013a,0x3cd11c07,0x3d6a0ff3,0x3d5c9d84,0x3c68c768,0x3d08bb28,0x3d09b555,0xba2bf7aa,0xbc912b26,0xbd06d5eb,0xbcf6a7bd, -0xbc89eee3,0xbbe0e938,0x3c249c1f,0xbc4f2d9b,0xbd215adc,0xbd3eda1a,0xbd7d7239,0xbd78c19a,0xbd84e4bf,0xbd96a528,0xbdc9c39d,0xbe223e8a,0xbdf66c06,0xbddfb1be,0xbd926461,0xbde77527,0x3db71a65,0x3e1447ec,0x3e0e969c,0x3de5cca2,0x3d895532,0x3d0835a5,0x3d122768,0x3dd12396,0x3d1683d7, -0x3c5c61ca,0x3c072587,0x388b1bfb,0x3ce042b1,0x3d627ca6,0x3d4ef3c9,0x3d0e0e99,0xbc64f46e,0xbcc0f4a0,0xbd6096a1,0xbd20285c,0xbc56b429,0xbce52bf7,0xbd3993c1,0xbcc12940,0xbb8263e5,0x3cef906b,0x3c29b1a5,0x3b01b454,0xbcaba0ae,0xbc7c6d67,0xbda796f5,0xbe7253b1,0xbe31aecb,0xbe004fe9, -0xbcadd96d,0x3cc14fde,0x3ce53de8,0x3b21564f,0xbd470863,0xbcc5302a,0x3c97e1ea,0x3deb70c9,0x3de1902c,0x3d90697c,0x3c4535f7,0xbcc90946,0x3c00a0ab,0xbbac0aab,0x3bbe3f8b,0xbd39b2af,0x3d55bcd3,0x3d7622e4,0xbd3ffca1,0xbcb63c4f,0xbd0a8fef,0xbd156e5d,0xbd4a0140,0xbd1e0bca,0xbc594b58, -0xbcd90717,0xbd2f127a,0xbd3046f7,0xbd624a08,0xbd05953b,0x3b9cf394,0x3d5c63d3,0x3dcc706b,0x3e078221,0x3e46f0cf,0x3e60bc25,0x3e94561a,0x3deb4c3d,0x3c6a3d86,0x3cbfb120,0x3cbbe109,0x3ce4a033,0x3c82f439,0x3cdf3565,0x3cd054a0,0x3c9b2332,0x3d7752fa,0x3d651be0,0x3d20a68f,0x3d05ce2e, -0x3d3393d5,0x3c4c635d,0x3d8e8117,0x3d8c528e,0xba5b2de1,0xbbbb1926,0xbcb79ff7,0xbc97dfec,0xbd14e3b6,0xbd2b6762,0xbd01f68a,0xbd60ee42,0xbd39ce15,0x3b037ca4,0x3d0b3413,0x3d9c3a52,0x3dc4602f,0x3e304608,0x3e2608c4,0x3dc2aa63,0x3c103c0e,0xbd1d51d1,0xbc60ee16,0xbc82a814,0x3c8fdf5a, -0x3c003c78,0x3c189759,0x3c416b46,0x3c90bb11,0x3d44e0c6,0x3d4a321d,0x3ccee1d6,0x3cad1bf7,0x3c2c33df,0x3c920f7d,0x3bcce1dd,0x3bba4bf4,0x3cb8dab5,0x3be7b231,0x3baab59f,0x3c2bab64,0x3c348e3d,0xba75a929,0xbc1ede4c,0xbc7fd6df,0xbc228096,0x3ce707e1,0x3ce4b319,0x3d14483c,0x3d800402, -0x3d1ae9ff,0x3ca1576f,0xbcc3f321,0x3bda97ec,0xb9a039cb,0xbca0ddb0,0xbc92cc6e,0xbc30537d,0x3ca49f2e,0x3ca3f0ee,0x3aed1239,0x3b48f094,0x3a64910b,0x3a93eca1,0xbbecd069,0x3b302783,0x3c0c29b4,0x3c58a6ef,0x3c3dae3a,0x3c199d9e,0x3bbc76d3,0x3c8c0e52,0x3cd5ad2f,0x3ce4927e,0x3c7280d8, -0x3bf031c9,0xba320f4e,0x39878c0b,0x3b37d2e2,0xbc30d245,0xbc0fe637,0xbbb3b836,0xbc124f70,0x3cadf88e,0x3cc78e29,0x3ba6bc64,0xbc924d0b,0xbcba5b92,0xbc85a819,0x3ca263a4,0x3c54c138,0xbd17fecd,0xbd4e7491,0xbd4795f4,0xbc5630db,0xbbef3b51,0xbb04e0a2,0x3c111a9d,0x3c21376e,0x3c2c6f64, -0x3c70c561,0x3c6d1d5d,0x3c38e4c9,0x3c43e807,0x3ca187f7,0x3cca0237,0x3d0f02a3,0x3ca00581,0x3c595d67,0xbada369d,0x3bf9bb1d,0x3c042042,0x3c6b1728,0x3c6c5fec,0x3cb9a55c,0x3c05d198,0xb6b18660,0x3c1c0337,0x3bffbbe4,0xbbae9b15,0xbc980499,0xbce07035,0xbc28a09c,0x3b790252,0x3c87829f, -0xbbfaac7c,0xbcc5d2a7,0xbd1f4c5b,0xbccda98c,0xbca4592d,0xbc8f0f76,0xbc2d26a6,0xbc67aaad,0xbc857dc3,0xbbef7894,0xbc76b449,0xbc66b4c5,0xbc43809b,0xbc2b6df0,0xbc6c4f2a,0xbc3fc781,0xbc7c1dba,0xbc4e954a,0xbc5d9bfa,0xbc193523,0xbc0e07e3,0x3af6ad22,0x3b8498ce,0x3bd1919f,0x3c3f839e, -0x3cfd83df,0x3c9e7fab,0x3cba5e7d,0x3cc465ae,0x3cdf95d5,0x3cfd81e1,0x3d156760,0x3d20a0fc,0x3cf27bd0,0x3c939efc,0x3c35a400,0x3b4ea611,0xbb228f63,0xbc5a687d,0xbc5fff92,0xbc6c0613,0xbc66bc22,0xbc5c8e97,0xbcdc74cf,0xbcecbbba,0xbcad3c09,0xbc644f5b,0x3a29dfff,0xbcb245a5,0xbc48e985, -0xbb144e7f,0xbb4a9dc0,0xbae7a284,0xbae3849c,0xb8343636,0x3a49ef13,0x3ad2a2dd,0xbc4ce8d0,0xbcaa7e3f,0x3c330800,0xbbc3e1b9,0xbc4c688c,0xbcab494b,0xbc856681,0xbc868608,0xbc8158b1,0xbc723f2c,0xbc6e5366,0xbc44e2d6,0xbc891640,0xbc9ebce9,0xbcbf7213,0xbcce7a0e,0xbce0beda,0xbcf81d97, -0xbce824ed,0xbce4d59f,0xbce0b948,0xbce3052c,0xbd24365a,0x3c2e4442,0x3c2a0e63,0x3bf8b9f3,0x3bdc5292,0x3bbf8551,0x3bd7bd67,0x3c10cbdd,0x3c346c3f,0x3c3ddbfe,0x3c04b92e,0x3bf74acb,0x3bd97912,0x3c167a6b,0x3c1b1bb6,0x3be37569,0x3c591df8,0x3c67ee12,0x3c245760,0x3c49e354,0x3c36b6c9, -0x3bc27138,0x3c0f4508,0x3c0eef98,0x3bd8e684,0x3c0345dc,0x3c0c36b1,0x3c055a74,0x3c2f6c71,0x3c3b56d8,0x3c6dfe88,0x3c0035a4,0x3be868af,0x3c3b5dd2,0x3c38241f,0x3c4f9867,0x3c633298,0x3c52f692,0x3c8853d0,0x3c21f539,0xbb9bc05f,0xbb4d15de,0x3bcfaa88,0x3bcd572e,0x3c2c1fc2,0x3c9429f4, -0x3c313f6b,0x3c18020d,0x3c0ff1b6,0x3c6776c3,0x3c7386ff,0x3c2c7a2e,0x3c91d156,0x3c9c2a25,0x3c9d835d,0x3c4df099,0x3c2685ab,0x3b59d3ff,0x3c037b17,0x3c099dc5,0x3b49a22e,0x3bcb6070,0x3bf28ec7,0x3bfabacb,0x3c8a1ed7,0x3ca5b2f9,0x3cd1f124,0x3bb52ec9,0x3b58f2f8,0x3c927f3d,0x3c85636b, -0x3c99c557,0x3ca4f6b9,0x3caa2a11,0x3c5a71ff,0xbba8e7b5,0xbcb5cf5e,0xbca3b34d,0xbadbbdce,0xbb40a85f,0x3bb63432,0x3cd7fe55,0x3beec09f,0x3ba76a51,0x3bdd9f48,0x3c7302f2,0x3c9f39ab,0x3baf54d3,0x3cb20e07,0x3cc59f6e,0x3cc4e6e2,0x3c38bc92,0x3bce4619,0xbbcd05f0,0x3b8202d1,0x3b856b2e, -0xbbe881a7,0xba26f85a,0x3b5d6f23,0x3b7f75fe,0x3ca83a5f,0x3cc31dc1,0x3d174dd8,0xbac5c4f5,0xbbe44fbd,0x3cf6dc9d,0x3cd42775,0x3d163c91,0x3cfa3c8c,0x3cc05a1b,0x3ce72f94,0x3b958a3e,0xbd038ffe,0xbd0009b0,0x3baed599,0x3b198dfb,0x3c84df04,0x3d2b45c7,0x3c68f93e,0x3c52e92a,0x3c84401a, -0x3d1bf9f8,0x3d2f9535,0x3c515c71,0x3d1cdc98,0x3d27f3db,0x3d01ca50,0x3c6fc3fd,0x3bc872f4,0xbc480c42,0x3adc7378,0x3b1357f7,0xbc6699ba,0xbb1c5d57,0x3a92e48a,0x3b779083,0x3d0b6275,0x3d41f5af,0x3d824845,0xbb44b1f0,0xbbcf1ba3,0x3d57b76f,0x3d36e3fa,0x3d3ee5dd,0x3d3d1b7b,0x3d1ba79a, -0xbdeca754,0xbdbccb86,0xbdac02fd,0xbd8be47e,0xbd4b84ca,0xbcce8538,0xbca07909,0xbc87b016,0x3c5c8b44,0x3d207395,0x3c9e2b2e,0x3d2835ad,0x3d1ca006,0x3ca6f31e,0x3ceeafb1,0x3c84cb16,0xbb0b7ad0,0xbc14f837,0xbc16db8d,0xbc9ce9a6,0xbcad4b72,0xbc9f942c,0xbce29d64,0xbd0ad135,0xbcb50ce0, -0x3b44a32f,0x3a876a48,0xbbd8662f,0x3b831ae2,0xbd2c42df,0xbd4bfeb5,0xbd8bbcca,0x3b94d6e0,0x3ca2cbb9,0xbd0de143,0xbdb46708,0xbdc03151,0xbbb274c5,0x3c519786,0xbbb97d07,0xbd433af0,0x3c0ddd9e,0x3d1a2391,0x3d56e637,0x3cae08eb,0xbbc432f9,0x3c25f0d2,0xbadcdb71,0x3c94d12b,0x3ccf146f, -0x3d4078a6,0x3d4ae133,0x3cfcb311,0x3cae3ef5,0x3c858b2a,0x3c6dfec0,0xbc6f5b76,0xbc9ab89b,0xbb87e34d,0xbd79f8b2,0xbdbfe9fb,0xbdb9d8dc,0xbdb90482,0xbda45eb7,0xbd55e54b,0xbe00998c,0xbe002634,0xbdfbee32,0xbd9936e1,0xbdcdb558,0xbe370a27,0xbe015ed7,0x3e3c0521,0x3dfb2e96,0x3d825ecf, -0x3daaf9c8,0x3df0d9f9,0x3e0b23e2,0x3db961d7,0xbc7a0cd4,0x3c8750bc,0x3b2505ca,0x3c08f912,0x3c074158,0x3ca154e9,0xbcf40fdf,0x3d8e35c6,0x3da4f229,0x3bdcc637,0xbc017579,0xbd0199f1,0xbd04b918,0xbd1086bb,0xbd003607,0xbcc320a9,0xbd1b5be2,0xbd1b0612,0xbcb600ee,0xbd472bef,0xbd741007, -0xbd48e3e7,0xbda39d4d,0xbdb8098a,0xbe11194f,0x3d7db030,0x3e30abbd,0x3e2116d6,0x3e5056e0,0x3c48507c,0x3b4ea15b,0x3bdcbcde,0x3bf9384a,0x3b532f5b,0x3d168c48,0x3d6b36d4,0x3d4b43b4,0x3d7816bc,0x3d265a89,0x3c27ecee,0x3ce1eb99,0x3ce69b19,0xbc8ce6cc,0x3d1bf9a0,0x3d25b205,0x3a4699df, -0x3bef184a,0xbc66c714,0xbd1ce73f,0xbd77cf6f,0xbda3a6a6,0xbdcdf63a,0xbe0243e2,0xbe146da4,0xbe1ffc5f,0xbe139895,0xbdc14057,0xbc598599,0x3cfae64f,0x3d88d5ac,0x3c8ad58c,0x3dd08413,0x3dc02ffc,0x3cfea91f,0x3cd0cfbe,0x3cfacaec,0x3d03fe6f,0x3cf92b53,0x3d159311,0x3d24efb7,0x3d42a34a, -0x3d1b5b69,0x3c70a0db,0x3c5157a9,0x3c4f57fb,0x3a6552fa,0x3b979644,0x3c7b4712,0x3ce91eec,0x3d50e86d,0x3d44b9b3,0x3cc18a7a,0x3cd5756d,0x3cb8c236,0x3d043334,0x3d093348,0x3d0405cd,0x3d0717bd,0x3d104ff4,0x3d512486,0x3d75e0ce,0x3db33b0c,0x3dd19364,0x3dffbe70,0x3d866b2c,0x3ca5a947, -0xbd51e8c9,0x3c98e6a8,0x3d621b5e,0x3d915d61,0x3d35f1a4,0x3d5ec56c,0x3d178573,0x3cea283f,0x3cc02484,0x3cc16795,0x3d0ab26c,0x3d3161d8,0x3d2d65a5,0x3d3c3f0d,0x3d1e6af0,0x3cf39998,0x3cd2c74c,0x3cbcc600,0x3c9469d0,0x3c9693a3,0x3c81e4e8,0x3c38a1aa,0xba03e2cf,0xbc03c1a3,0x3b511330, -0x3bad530c,0xbb2e1a9b,0xbc0731a1,0xbd4dab0b,0xbd7f8b0b,0xbd3cd921,0xbc8b305a,0x3b5872da,0x3cc40bc9,0xbcaac8fe,0xbcd85808,0xbc8140d9,0x3cc22daf,0x3d3f8860,0x3d8518a6,0x3d873406,0x3d1ed456,0x3d2c829b,0x3d0f9dcd,0x3ce95dc1,0x3ca80523,0x3ca02e64,0x3c88b177,0x3c66fdff,0x3c5588f5, -0x3c983b0f,0x3c96b0d5,0x3cd78bc4,0x3cb121c5,0x3cf1ed5b,0x3ccda781,0x3cf4e850,0x3cf016b7,0x3cc86ae3,0x3c603575,0x3cae9eaa,0x3ce20716,0x3ca5de68,0x3cbee3de,0x3d0b7808,0x3d31777d,0x3d3e17d7,0x3d15b9fc,0x3cc8da2f,0x3c781ea9,0x3c2b3a81,0x3bbc4844,0xbb670675,0x3c0002cc,0x3ca2d4a6, -0x3d0bd74a,0x3d12db7f,0x3bf3015f,0x3c70fab0,0x3be9045e,0x3cb14de1,0x3cb33092,0x3cc8d0dc,0x3d00dbe5,0x3d16a8f7,0x3d10473f,0x3cfa36cc,0x3cbcec09,0x3cba2b9c,0x3ca43973,0x3c84e1d5,0x3c341db2,0x3c297efd,0x3c420a65,0x3c32e99e,0x3b97adf7,0x3bfeaa2c,0x3b596dd8,0x3b130fd1,0xbad3bcca, -0xbbcc0ef9,0xbc389385,0xbc57f808,0xbc80d316,0xbc82b2da,0xbc90954b,0xbc8de158,0xbc8adb15,0xbc911f88,0xbc3607ee,0xbc007204,0xbb4350ee,0x3ad4629e,0x3c35c5d8,0x3c74408f,0x3bd3e517,0x3ac46769,0xbc0f92d8,0x3c70404e,0x3bb84632,0xbb66dc6f,0xbbc17bd1,0xbbdff003,0xbbe65cde,0xbc20c25b, -0xbc40a62b,0xbc64ceca,0x3a877333,0x3c1abc09,0xbc613461,0xba8fac6d,0x3b9f73f4,0x3c3fbc0e,0x3c0dcbd8,0x3c05981a,0x3bf6d175,0x3be4c432,0x3bd76f05,0x3bb554c5,0x3bbc191e,0x3bbaa7d1,0x3bc24560,0x3ba51d9b,0x3b93f11f,0x3b70c3d3,0x3bb5c215,0x3be93e94,0x3c09cde9,0x3c2a8104,0x3c738ccb, -0xbc287831,0xbc599bf0,0xbc3fe495,0xbc46c77c,0xbc443be1,0xbc463a91,0xbc29a1d2,0xbc185824,0xbba2084d,0xbc0e0462,0xbc1c87fc,0xbc1defe6,0xbc13dd5e,0xbc0a2d1e,0xbbea9391,0xbbefc5f6,0xbbd129a9,0xbb9ec63c,0xbbe9b3dd,0xbbeda3c2,0xbb84a672,0xbc08d170,0xbc0e134f,0xbbce9102,0xbc200d36, -0xbc2f2c05,0xbc34bff1,0xbc22f1c6,0xbc2c4d31,0xbc378bc7,0xbc7dddf7,0xbc804739,0xbc492bdb,0xbc33d6dc,0xbc329ee5,0xbc3d5a20,0xbc61470a,0xbcc918b4,0xbcb1f133,0xbc95c027,0xbc9f0a58,0xbc9e0fd3,0xbc1ace46,0xbb681a7f,0x3b3aa439,0xbb8ef739,0xbbf2b1bb,0xbbf963f3,0xbbf034e3,0xbba98eed, -0x3a1e31c5,0x39a949dc,0x3b27045e,0x3b7cb7e2,0x3b3f275a,0xbb6a7535,0x3a8a24b0,0xbbb7dd87,0xbc0f78e1,0xbb09455c,0xbc429967,0xbc632031,0xbc750520,0xbc52b8e3,0xbc7ebeed,0xbc9fd1c3,0xbd04323d,0xbd04c89a,0xbca77836,0xbc5b9114,0xbc342b0f,0xbc68379d,0xbcb23355,0xbd160ad9,0xbcb0aa6e, -0xbc8e4290,0xbc9678d3,0xbcba23f5,0xbbf09d4e,0x3b4f28e4,0x3ca10bc8,0x3b065e81,0xbb54dddb,0xbb0c25fa,0xbb071d0c,0x3b994463,0x3c95a50a,0x3c49b837,0x3c81e7b5,0x3cb0d497,0x3c8314c2,0x3bc65ea0,0x3bf6977e,0xbb0772a5,0xbbefc0a8,0x3bc8d2ac,0xbc45fca9,0xbc84b7be,0xbc993ca3,0xbc6f94a8, -0xbcae5f3c,0xbccfff80,0xbd47f1bd,0xbd3f2f7a,0xbcc7c97c,0xbc8c2097,0xbc9ddc59,0xbcafe47b,0xbd10d3ee,0xbd3aa1c5,0xbd04231c,0xbd0d8494,0xbd241be1,0xbd0655e7,0xbbb05d4f,0x3c62996c,0x3d23680b,0x3c28790a,0x3bec9a8a,0x3c0b0eef,0x3cce83bf,0x3cb51be8,0x3ca5b105,0x3cb54a4d,0x3d012e2d, -0x3d04a3d9,0x3cb650a9,0x3c1a7a70,0x3c895a7e,0x3bb63ec6,0xbba2407a,0x3c80fee2,0xbc3b47e8,0xbc8e387a,0xbc9cfecc,0xbca4fa68,0xbcd8ef0e,0xbd1d2fd6,0xbd9f3500,0xbd9ef01f,0xbd1505eb,0xbc92a76b,0xbc35a26b,0xbc455563,0xbd112ffe,0xbda68322,0xbd58e6fa,0xbc194c74,0xb9294eac,0xbcbd1fc6, -0xbd02de7b,0xbcc757a3,0x3baf1cea,0x3b6c82e6,0x3c8e6ce5,0x3c632ef8,0x3c976242,0x3d035ab7,0x3d5f1a3a,0x3cbda8fa,0x3c906acd,0x3cf9c0ad,0x3c5aeb5a,0xbc4676c4,0xbcda54e2,0xbc1c344f,0xbc1b1f6a,0x3b4f747b,0xbcbb9191,0xbd04fbee,0xbd393f95,0xbd3039d7,0xbd6cb36f,0xbdc2bf17,0xbd3f78bc, -0xbce24c0d,0xbcaea2b7,0xbd0ec3ab,0xbd83c25b,0xbdf8b737,0xbdc38378,0xbde60678,0xbda67d4a,0xbdb2289f,0xbd7be0d0,0xbc67dc2e,0x3d09d972,0x3d2269bd,0xbc8c01d7,0xba557ac8,0xbc0ad468,0x3bd8944a,0xbaa0fb49,0xbb5e918f,0xbc56028e,0x3d317b3c,0x3d3d4d6b,0x3c4daca5,0xbb3f1e97,0xbc71ff43, -0xbc57c410,0xbb9857a9,0xbc0f617b,0xbc716e5f,0xbaff55b5,0x3c56cfe6,0xbb3df327,0x3c5f78f6,0xbc244ab7,0xbd60f876,0xbdd89da1,0xbdb734d7,0x3cd3e8f5,0x3c8e2d28,0x3c7a33ca,0xbcf2bc56,0xbdb3c96b,0x3e2bbac1,0x3e569bc7,0x3e3428d3,0x3e214c00,0x3e20299d,0x3daf2f44,0x3d3793ae,0xbc132561, -0x3c936c0c,0x3bee76a3,0x3aeada38,0x3b5d6f88,0x3b919583,0xbb6d6bb7,0x3c2ea109,0x3cad1345,0x3d4146e2,0x3baab617,0xbc597b17,0xbc6f7246,0xbbc8c82c,0xbc85d6e7,0xbd117a5a,0xbd7b204b,0xbd8b4b1f,0xbda1dbf9,0xbcc660f2,0xbcaf9bbc,0xbd04319f,0xbde3cbe0,0xbdec801b,0xbca2dd5d,0xbdbcd0c8, -0xbd8b23d4,0x3cef754e,0x3ddfa92f,0xbc751c71,0xb970bbd2,0x3b5b328d,0x3ce05347,0x3d3ca0c4,0x3d842970,0x3d8c1cd2,0x3d70790f,0x3c859657,0xbae30ede,0x3c14b66a,0x3c14dfca,0x3bb47c88,0x3bf0adbd,0x3c5f4cee,0x3ca1e87e,0x3d4b571f,0x3c1ad49f,0xbc26caf7,0xbc91709a,0xbd132f28,0xbd57bc88, -0xbd5df271,0xbd7176d7,0xbd4fc845,0xbd62f465,0xbd2b4430,0xbd7da035,0xbd69dcee,0xbdd44dd0,0xbd559b10,0x3dc7022d,0x3e11ea4c,0x3e259f48,0x3de666d8,0x3cfdd291,0x3cba2d21,0x3d1150ae,0x3d0cda1a,0x3d220960,0x3d353a33,0x3d249700,0x3cfc973e,0x3cb62ceb,0x3ceb0785,0x3d24e036,0x3d6ca754, -0x3d17df29,0x3d03e27d,0x3cd5cfe5,0x3d45de28,0x3d3dc495,0x3cfae855,0x3c805955,0x3c7fbc85,0x3c5f4597,0x3b8bc2ec,0x3b446252,0x3ad13395,0xbc6f130b,0xbc879f61,0xbc05a074,0x3ced6694,0x3d4deb05,0x3d97aeba,0x3d1ef344,0x3d0a80e8,0x3d98a03c,0x3c989d04,0xbb37a8f1,0xbcac6411,0x3a6e1319, -0xbcf1ab4d,0xbc9cfff3,0xbb9266a2,0x3c1e8a78,0x3cd6c5e5,0x3d1d1dee,0x3d3330d5,0x3d13ede9,0x3d2cf0c1,0x3d237d4e,0x3d1a3955,0x3d010ac0,0x3cd8cda7,0x3c959449,0x3c90e175,0x3ccdedf4,0x3d1df7a1,0x3d1bc9d9,0x3d064778,0x3cd0e271,0x3cd800c1,0x3d084813,0x3d342e7a,0x3d8397de,0x3d9fd14d, -0x3d9aa575,0x3d73a820,0x3cdd88dd,0xbc41f612,0xbcad558e,0xbc824d8c,0x3c6e91f8,0x3c9da4ac,0x3c9bcf8e,0x3b9c6df7,0xbcabdb3f,0x3c84422f,0x3be10936,0x3c4deb98,0x3c3151f1,0x3c138199,0x3c3e776c,0x3c80936c,0x3caf0ca6,0x3ca9b4a0,0x3ca3be9f,0x3caf4e89,0x3cdf9a8a,0x3d14d72b,0x3d385413, -0x3d0ebee3,0x3caa4f2b,0x3bc6f117,0x3c8d136f,0x3d0a22ab,0x3d092f2b,0x3cf4d3bf,0x3d10fb64,0x3d0ea425,0x3cdfdde0,0x3ca7acd2,0x3c94ec0e,0x3c16862b,0x3ba9d65a,0xba8fd3ab,0x3c50ad83,0x3ca9a5e6,0x3cdca7fd,0x3ccad0dd,0x3ccf591c,0x3cfbc6a7,0x3ccc87a8,0x3cce65b6,0x3ce464a2,0x3cdf9177, -0x3cf483bb,0x3d01ca60,0x3d0f5d61,0x3d146df8,0x3d1d69e5,0x3d181835,0x3d1878d2,0x3d16af2d,0x3d12983b,0x3d0949f4,0x3d08bf9f,0x3ce0ae4e,0x3cc5acbf,0x3c9ba15b,0x3c4905f7,0x3b87aa56,0xbb9f2564,0xbbb172e0,0xbbe6d05c,0xbc0184a1,0xbbe57ba6,0xbbcaa55c,0xbbd18817,0xbb23efc2,0x3a96dc70, -0x3b70a806,0x3bc4db57,0x3c056f6c,0x3c4a56ef,0x3c7e3b9b,0x3c9477c2,0x3c9e3dc9,0x3cacddc6,0x3cba3b93,0x3cc8c288,0x3cbe8d91,0x3cc7f7b8,0x3cd12c9d,0x3cc1b6fe,0x3cc8dabd,0x3cd922f6,0x3cda16d1,0x3cdd96aa,0x3cdf297b,0x3ce238ce,0x3ce49cc1,0x3ced0793,0x3cce5543,0x3cb24ba4,0x3cbdf724, -0x3c9c0d58,0x3c85342c,0x3c5b2e47,0x3c742c77,0x3c6ef478,0x3c6ce1c5,0x3c65cdc4,0x3c5c580d,0x3c4ac577,0x3c6d554f,0x3c80e06d,0x3c8d23ef,0x3c90e64e,0x3c94bbf6,0x3c94d4ac,0x3c9773c9,0x3c9d22e2,0x3ca64e04,0x3cb230f3,0x3cb7a7a3,0x3bac8ce9,0xba945f87,0x3b9a5e23,0x3b3e0ef6,0x3b3970cc, -0xb9a6019e,0x3bce8dea,0x3be6a3a1,0x3bee1bdf,0x3bac44b1,0x3b83d080,0x3b062928,0x3b3bc7f7,0x3b8635c1,0x3c0277f6,0x3c066727,0x3c1107ee,0x3c022de0,0x3c20912e,0x3c1c8ef6,0x3beaebf3,0x3bc5fc38,0x3ba71922,0x3b9533c4,0x3ba629e8,0x3b8dbb74,0x3b0bc70b,0x3ad093d0,0x3b06d916,0x3bba22e5, -0x3b6a3b90,0x3b960c1c,0x3c2c40f7,0x3b8dccc2,0x3b20e67b,0x3b265219,0xba955888,0xbc2b2f14,0x3a32bc6a,0xbc150da5,0xbba12170,0xbc1fb357,0x3bd3aa34,0x3c413855,0x3c4d0d6f,0x3c0534b7,0x3b910e0c,0x3aa5dfc0,0x3ad9fcf2,0x3ba14615,0x3c6744f1,0x3c592984,0x3c7ed3e3,0x3c8d0cbe,0x3c9bca44, -0x3c9fd80f,0x3c68c3de,0x3c0ea9a0,0x3bd2a2c4,0x3b806536,0x3bb50c91,0x3b703644,0xbaabe2c6,0xbacdca15,0x3916385d,0x3c04cd5a,0x3b64adcb,0x3c006512,0x3caf3c7c,0x3c11868e,0x3b6b3213,0x3afbec5f,0xbc24434b,0xbcf8db43,0xbb8628bd,0xbc76b00e,0xbbe1e569,0xbc931e6f,0x3bd70f39,0x3c8186ee, -0x3c9ea2a5,0x3c333e84,0x3b02333d,0xbb67363a,0xbb424765,0x3ba1f99a,0x3cbea421,0x3cb6eff8,0x3ccbe16a,0x3cda19d8,0x3d001fd9,0x3cffc02d,0x3cb9e939,0x3c394f41,0x3bcbc935,0x3b5861de,0x3bb9d22b,0x3b111ba7,0xbc10663a,0xbc59f860,0xbc31d39c,0x3c2e675f,0x3a4deaff,0x3c06ab48,0x3d0cf379, -0x3ab6a52e,0xbc0a9c7f,0xbc31dfeb,0xbd0ccc88,0xbd3cb972,0xbc68e825,0xbd155d5a,0xbd117b31,0xbd267e85,0x3c1033c2,0x3cc82994,0x3d01af8d,0x3c6c3fc7,0x3b7eeab3,0xbae1dca2,0x3c221467,0x3c9dc5e9,0x3d3380ba,0x3ced62a0,0x3d0ecb4c,0x3d3ff72c,0x3d5469d9,0x3d4eba61,0x3d0d1d37,0x3c85eb88, -0x3c2974f5,0x3aefdaa4,0x3ba16edb,0xba057c52,0xbc49cf37,0xbc6392ee,0xbba9c43b,0x3c8c9a3a,0xbb2f00ae,0x3c7611ea,0x3d6a0455,0x3c921396,0x392fac1d,0xbb9e1221,0xbd4aa131,0xbd84bed8,0xbda3bc7a,0x3ceb4d87,0x3d2c809b,0xbcb20706,0xbc6e2287,0xbc0ace7c,0x3c52e8bb,0xbbf9d5e1,0xbae8b1c6, -0x3c43fc6e,0x3ad9db6c,0x3c475828,0x3d1c27c9,0x3cc3fd0d,0x3cac3364,0x3cd9e2f9,0x3c89e179,0x3c68fac5,0x3c6273ff,0xbb979f0b,0xbc78489a,0xbce479ec,0x3ace8b7d,0xbaeb0e46,0xbd15b0d3,0xbd7afc0f,0xbd5a3c15,0xbcf96839,0x3d693400,0x3d66f2d4,0xbccdf160,0xbd11e9e5,0xbd798014,0xbdbdee7b, -0xbda58b63,0xbd0ee0a0,0xbdc2edf9,0xbdb55a22,0xbd788f40,0x3c50e883,0x3c28fdac,0x3bdcfb6c,0xbc8a04b7,0xbb422b03,0xbb595356,0x3b7a671f,0x3a751a1b,0xba766e21,0x3c36de65,0x3ccb2ab6,0x3cfffec4,0x3d514042,0x3d07fdec,0x3cc81389,0x3b0f4277,0xbb1d1c65,0x3aa71bf5,0x3c03ce3c,0xbc811667, -0xbcd6767d,0xbcc5c37b,0xbd5604fe,0xbd90ce9e,0xbde14843,0xbd5eb279,0xbcb97770,0x3c753980,0xbb73a340,0x3b49477b,0x3cc321b4,0x3c5f2ee8,0xbcd4e56e,0x3d53e6d2,0x3e081d18,0x3de5940a,0x3dd36dc7,0x3c96741d,0xbaeacfd5,0xbae0987b,0xbacae574,0xbb573eeb,0x3b1b42ce,0x3bf6e9b8,0xbc277b39, -0x3c01a707,0xbcb5d433,0xbb68c76b,0x3da74e4c,0x3ce93042,0x3b8bee1e,0xbbedfdf7,0xbb9f18ff,0xbc4b17ad,0xbc880b57,0x3b4114c0,0x3c192376,0xbc06e8d9,0xbd110e1c,0xbd86c8ca,0xbdf4877f,0xbd9cf46d,0xbda7c62c,0xbd9adc1b,0xbe1fc419,0xbe4739c9,0xbe60c875,0xbde35375,0x3e233349,0x3db051d5, -0x3d6e1d32,0x3d811d3d,0x3db1dc47,0x3d926ab6,0x3d67b9e7,0x3d1adaef,0x3bcc1afb,0x39524376,0x3b2c469f,0xb9e80c18,0x3984ed96,0x3ccbb5a8,0x3be74695,0x3c21aa1d,0x3d5b9c05,0xbbb519fa,0xbcc173d0,0xbccafcd0,0xbd13d36a,0xbd0852a8,0xbcdadbbe,0xbccc8c86,0xbc9347a5,0xbba68461,0x3bd956c3, -0xbc5d938b,0xbdb7ee30,0xbdbdd523,0xbdb8d34f,0xbcdc6052,0x3cf2b47b,0x3dce785b,0x3e2577f5,0x3e3952df,0x3c7958e5,0x3cc6dd11,0x3cf18de0,0x3d04db22,0x3d347478,0x3d06fc08,0x3d12143a,0x3d495c0b,0x3d4026b9,0x3d38dc2d,0x3d2f6827,0x3d208641,0x3cfc3f34,0x3c44d75f,0x3c8fbe20,0x3cb9b3a6, -0x3d14a51b,0x3c8a2260,0x3a3e487e,0xbc5b4f51,0xbcbae7ee,0xbd1a5122,0xbd6a8518,0xbd52b459,0xbd4be373,0xbd2e157e,0xbd6d5c12,0xbd470bdc,0xbd020df6,0x3d67f650,0x3de54d6f,0x3e15be0a,0x3deb312b,0x3d86d456,0x3c5f946d,0x3c6760d8,0x3ce2fc86,0x3cd10268,0x3cca9a49,0x3d0b4594,0x3d3ad3dc, -0x3d235fc4,0x3d0ddfe7,0x3ceb0ca8,0x3c5d371f,0x3c24cd5c,0x3c89de7c,0x3c906599,0x3c9f1f9b,0x3ce4f722,0x3d12efa2,0x3d069895,0x3ca210f0,0x3cc4abe2,0x3ce03e0c,0x3d000a66,0x3d162720,0x3d3c09a0,0x3d712c0d,0x3d924cae,0x3d9832a1,0x3da29d11,0x3d85cf31,0x3d856a0b,0x3d8382ef,0x3d84b0d3, -0x3d6551af,0x3d31b9aa,0x3ccdb5bf,0x3ca6643a,0x3c81bcdd,0x3cc410b1,0x3b7e0b67,0x3b8f4675,0x3c39cdbc,0x3c97a017,0x3cbbfeeb,0x3cc2e7b5,0x3cddd83a,0x3cfe168d,0x3ce91b70,0x3cd12f54,0x3cae5055,0x3c9fea01,0x3cb660dc,0x3ca60402,0x3c7ee481,0x3c42dd8f,0x3c354a85,0x3b1413c5,0xbc083291, -0xbc689452,0xbc54f77e,0xbc88e925,0xbc96e140,0xbc97a830,0xbc8f324a,0xbc874b11,0xbc11f095,0xba81a36b,0x3c0d7e30,0x3c62468f,0x3c977e89,0x3cae469f,0x3c84d5a8,0x3c155e69,0x3b056b1f,0x3a88a430,0x3cf23537,0x3cfedc36,0x3cff522a,0x3ce17767,0x3ce37842,0x3ccfe5cb,0x3cb8f161,0x3cb2472e, -0x3ca7a226,0x3cb32165,0x3cbda77a,0x3cbbfb4a,0x3cb6ffd4,0x3cbee57c,0x3cae548e,0x3c9e44e2,0x3c93e965,0x3c830b22,0x3c5ca4da,0x3c6c8047,0x3c8d362d,0x3c9ddc5f,0x3cb1e110,0x3cbe020c,0x3cc8f07a,0x3ccdb2f8,0x3ccc3fc5,0x3cc0d303,0x3cb32ad3,0x3c9cc2bf,0x3c8ebd05,0x3c90912c,0x3ca45e25, -0x3cc2d8fa,0x3cda9f2f,0x3cf00b50,0x3cddfdd8,0x3ce80b30,0x3cddf515,0x3cd07d98,0x3cbd40e5,0x3ccabfe4,0x3cbd1a7d,0x3cb55d9b,0x3cbd68f9,0x3cbb4f15,0x3cb98889,0x3cbba1ce,0x3cbb3deb,0x3cbb480b,0x3cb3e8f1,0x3cbd1ff9,0x3c9269c3,0x3ca0571b,0x3ca6a02c,0x3cb4862e,0x3cafebd5,0x3cb03d9c, -0x3cb07684,0x3cb211d2,0x3cb57de9,0x3cbc0e89,0x3cb6f594,0x3cb78315,0x3cbb61af,0x3cc5b74c,0x3ccd1c93,0x3ccc3f04,0x3cd02327,0x3cd07386,0x3cd2f94c,0x3cd5c4c6,0x3d04de72,0xbb849fc7,0xbbd39586,0xbb1d0273,0xbb5d93ee,0xbb5662ea,0xbba48f3c,0xba632867,0xba21d203,0xba1fd355,0xbaab6123, -0xbb2acb8a,0xbb99df58,0xbb8e664e,0xbb78e68d,0xbb0111a5,0xba8072a6,0xb912f00b,0x3a8eb835,0xba980d5e,0xbb0e0906,0xbb08ef6a,0xbb74a548,0xbb9a741b,0xbbae13d0,0xbba540e6,0xbba84434,0xbbd137e1,0xbb82fa06,0xbb5b8f27,0xbb8d39d6,0xbb76bbc8,0xbb924028,0xbbc3aeca,0xbbf03d12,0xbbffba69, -0xbbb687e2,0xbbf8083f,0xbc2e5b4e,0xbb0bb038,0xbb163bfc,0xbb025b7e,0xbc17ad15,0x3bb34012,0x3c0ca1dc,0x3b928eae,0x3b2ffc3d,0xbab17b15,0xbbc74fd8,0xbbd7ed1b,0xbb856f6b,0xb912089a,0x3bb2b364,0x3c0a733a,0x3bf769c9,0x3bcb6331,0x3b79ba35,0x3a6ed191,0xbb90ef24,0xbbeabf17,0xbbfe2ad4, -0xbbed8224,0xbbf57993,0xbc3c5138,0xbbcef035,0xbbc96792,0xbc2c21da,0xbc024304,0xbc1b68a9,0xbc60af44,0xbc822113,0xbc7bd02b,0xbc03327a,0xbc540535,0xbc904763,0x3b5856e2,0x39302f6c,0x3ad7b6c8,0xbc3448eb,0x3c6930d3,0x3c9e3008,0x3c48914d,0x3c30b654,0x3a9d2521,0xbc0e43d8,0xbc236835, -0xbb9ddad9,0x3be057cc,0x3c97782a,0x3cb4673d,0x3ca1e2f4,0x3c871219,0x3c42acc2,0x3c0e4149,0xbb8a72e5,0xbc136b5d,0xbc32322c,0xbc362152,0xbc481266,0xbca1a5c0,0xbbcad055,0xbb0126d6,0xbc36ae84,0xbbbc427a,0xbc2a713e,0xbcb5c1ab,0xbcd9bec6,0xbcf4336c,0xbc505804,0xbcb43f34,0xbc368992, -0x3c55cd62,0x3b99da4d,0xbb73779b,0xbcbd6f7d,0x3cbc1ec2,0x3d03330c,0x3cea796d,0x3ca2d52b,0x3b72830d,0xbb8b0faf,0xbb105682,0x3c1558a0,0x3cecde15,0x3ce4c806,0x3d0deeb6,0x3d1e8a0c,0x3d171469,0x3cdc9b14,0x3c9e84d4,0xbb650401,0xbc5929af,0xbc5bfcb3,0xbc5f4859,0xbc6bb926,0xbce7766c, -0xbc261bcb,0xbc272146,0xbcf5dc5d,0xbc9b776b,0xbcc16b91,0xbd1e23c2,0xbd253d6a,0xbd0bdb66,0xbbcf613c,0xbc90d304,0xbd8f69f9,0xbdadddab,0xbbc2ace6,0x3ceaef56,0xbb7d0449,0x3c296a60,0x3c6991e5,0x3ca66060,0xbc5b86fe,0xbc994361,0x3b63e46b,0xbbd08d94,0x3b7a1d55,0x3cc69749,0x3d1b3556, -0x3d1a3d30,0x3c813569,0x3ca09d2d,0x3c905c80,0x3c1f467a,0x3bd251bb,0x3b03ae08,0x3badb45c,0xbc25d72a,0xbcc68584,0xbd21bdae,0xbc4fe916,0x3bbc1c38,0x3cc1584a,0x3cefb64f,0x3c3b75b8,0xbcb2245a,0xbd52ce62,0xbda0f06e,0xbdc1cdc7,0xbda4efd5,0x3bfb39f2,0xbd5cac26,0xbd4b9ced,0xbcc8ec44, -0x3cde72d1,0xbc14af1a,0xbcfb96e8,0xbcf00047,0xbc9a60c8,0xbc620607,0xbc55e88b,0x3a8d4d36,0xb9c7f241,0xbae6b9dd,0xbc2aaf7d,0x3b196287,0x3d459a92,0x3ca256c7,0x3bb6614e,0xba0c8c15,0x3ba445b0,0x3b40e323,0x38be6382,0x3c66237f,0x39c98e16,0xbd15dbfe,0xbd50d6c6,0xbd3dc667,0xbc74a4be, -0x3c29f952,0x3c0db684,0xbd10eb36,0xbc975f98,0x391fe3e9,0x3ce6ddf2,0x3ca12e52,0xbe5d838e,0xbe07656d,0xbced80ba,0xbc21510e,0xbc96f593,0xbce419de,0xbc7cfad1,0x3bb8e434,0x3b535061,0x3b34147b,0xbb8cdc6d,0x39cafe5e,0xbc2d63a6,0x3b328324,0xbc104d2d,0xb7034fef,0x3d0be219,0x3ce5a51a, -0x3cd0f035,0x3c421f52,0x3c290dee,0x3c35bc88,0x3c02d6bb,0x3c339cfe,0x3a872570,0xba9a9c32,0xbd1995c7,0xbd28242b,0xbce18f74,0x3af0ad68,0x3c0f30d6,0xbd39569e,0xbd253d2d,0xbdc8eb67,0xbe21530c,0xbe61e48e,0x3e529487,0x3e3e8c13,0x3e1988a8,0x3e00792a,0x3de5d2e5,0x3da5fed0,0x3d4ae851, -0x3ca6cb70,0x3c98de85,0x3c23a496,0xbb062811,0x3a64c59f,0xb9818f53,0x3c32f8ee,0x3bfccc0e,0x3c47554a,0x3ce2d6a6,0x3c966395,0x3bf701eb,0xbc35c37d,0x39206fb7,0x3aaa87bf,0xbc0d9986,0x3c2ffbad,0xbb5c21e2,0xbca491fd,0xbda893e5,0xbdb5c874,0xbd6277f3,0xbc5bf037,0xbc5cff6b,0xbd91f209, -0xbd9ca86c,0xbcdbc868,0x3db981a9,0x3e29f1dd,0x3ca322fe,0x3c86addf,0x3cb88b4d,0x3d067568,0x3d4a2537,0x3d285176,0x3d34c96b,0x3d560a7e,0x3d30dcc3,0x3d138058,0x3cd9e0e7,0x3d1a840e,0x3ceeaaa5,0x3c30d2f4,0x3ba03659,0x3c1323e4,0x3cff39d6,0x3c7ae580,0x3bf3c962,0xbc140674,0xbc892aa9, -0xbcb0ded2,0xbd030926,0xbd31dd4c,0xbd88ea26,0xbdb28022,0xbde8aed7,0xbdd6e90a,0xbd877d12,0xbcf43d6c,0x3cd68d0b,0x3dabd9e8,0x3df63594,0x3e0011af,0x3de29c4d,0x3d485156,0x3d160fab,0x3d2ba256,0x3d51df7c,0x3d4ea442,0x3d2b4fdf,0x3d00d970,0x3cbb2ef4,0x3caac52c,0x3c5b3e05,0x3c2709a3, -0x3bb9a9e7,0x3c478059,0x3cb9c433,0x3cf4ec31,0x3d04bf7a,0x3cecd4bf,0x3cffc9e1,0x3c8d3fa1,0x3c8907a4,0x3c40c01d,0x3bb2bc97,0xba104612,0xbc2ce532,0x3aa7d04d,0x3c2f3192,0x3c35bca5,0x3d480bb7,0x3d995d65,0x3dc2ec54,0x3dc6480d,0x3db00576,0x3d866568,0x3cf5d1cb,0x3c450e52,0x3c6a616b, -0x3cdc37d3,0x3c4c70d8,0x3c916131,0x3ca9793d,0x3ce42d0a,0x3d115739,0x3d137731,0x3d17513d,0x3d1bcf21,0x3d19be69,0x3d185cf1,0x3d0e3260,0x3d013a42,0x3cb6c53c,0x3c921ff4,0x3cbacc80,0x3d0320a4,0x3d242002,0x3d1b32da,0x3d06ed6b,0x3d07498b,0x3d1b36c7,0x3d26f9fb,0x3d2e9cf4,0x3d1e4293, -0x3d10673a,0x3cf49e76,0x3cf29656,0x3cdbd864,0x3ce2462f,0x3c86f783,0x3c088b7a,0x3b27a08c,0x3bd943f9,0x3bf635b6,0x3b063458,0x3bd5385d,0x3ca3e4d8,0x3c8d5938,0x3c9917cb,0x3c7b5d98,0x3c76a365,0x3c70e491,0x3c5d40bb,0x3c464f52,0x3c402f73,0x3c47eeb6,0x3c502179,0x3c667263,0x3c84f9bb, -0x3c8e4b97,0x3c9a8537,0x3ca3ce75,0x3c98d7e9,0x3caac06c,0x3ca8c514,0x3d011b29,0x3ce61225,0x3cb9d0f4,0x3ca789d6,0x3c8f066d,0x3c817769,0x3c6a3722,0x3c9364f2,0x3cac59a7,0x3cc74311,0x3cdd59d4,0x3cf2ff4c,0x3cf336b6,0x3cda2b51,0x3cc72404,0x3cc10947,0x3cb7b50d,0x3c821461,0x3c69e049, -0x3ca244b3,0x3cb4ff95,0x3cd3bd08,0x3c957522,0x3cb90296,0x3cd38222,0x3cd4d436,0x3cd4b0ea,0x3cd58844,0x3cd3032b,0x3cd2832c,0x3cd33106,0x3cbb7967,0x3cac2a54,0x3cdb73eb,0x3cd373a0,0x3cca9b69,0x3cd12a74,0x3cb7026c,0x3cb1d9c7,0x3ca36106,0x3c98b16f,0x3c8c071d,0x3c6cd474,0x3c7d6afd, -0x3c8000c8,0x3c805b9f,0x3c86a367,0x3c8d64e1,0x3c9e16cc,0x3c98cbc0,0x3c95ec1f,0x3c904e59,0x3c86d31e,0x3c964f13,0x3be15bcb,0x3bb17c71,0x3bb9b646,0x3bb14504,0x3b9494b2,0xb9b4e5d2,0x3c01871d,0x3bf10123,0x3b66e162,0x3b9a17f1,0x3b672f39,0x39aa7b4a,0x3a5806ad,0x3a9ec096,0x3afb12e9, -0x3bd56205,0x3c0f66af,0x3bc0ecdb,0x3bc9c9f3,0x3bbba0ef,0x3ba23a17,0x3bb8bd89,0x3bb0da34,0x3b830afb,0x3bacc068,0x3bc23bcf,0x3bbc2b29,0x3c0dae77,0x3c0936e1,0x3bab0b3e,0x3b742cab,0x3b5cee29,0x3bd288c7,0x3b919b0f,0x3b98d8ec,0x3bc631bd,0x3bb93b8d,0x3be6269b,0x3c0e893a,0x3c124ea6, -0x3c2325a2,0xba38bbad,0x3c3bb218,0x3c69a82d,0x3c0bbafb,0x3c4221a0,0x3c0bf700,0xb8e6c38d,0x3a8d34f1,0x3b2981ee,0x3b98274c,0x3c4bfcfb,0x3c7b2fae,0x3c750412,0x3c26f4ce,0x3bc8d19c,0x3b3df716,0x3b88987e,0x3b6f2706,0x3a03c56d,0x3b510b97,0x3bb19f75,0x3bb52fec,0x3c6daef7,0x3c5b4890, -0x3bb14e7d,0x3adca701,0x3b0683fa,0x3c4f6789,0x3c05fd99,0x3c0d631f,0x3c1f4478,0x3bddbadb,0x3b5d490d,0x3ad8d651,0x3bdb20fa,0x3c039346,0xbc421661,0x3c9cd990,0x3cb27d58,0x3c07de7c,0x3c84a9a2,0x3c18c47c,0xbc1a5862,0xbbbd1541,0xbb3f0487,0x3aebf3b5,0x3ca629b1,0x3cd16b5a,0x3cc15f6d, -0x3c6c7210,0x3c19a4cc,0x3a406442,0x3b38f815,0x3aa3c69c,0xbbcec5b8,0x3893bf6d,0x3b896d2d,0x3b3c8bf9,0x3cb26a49,0x3ca03abd,0x3a8c400a,0xbbf61eb0,0xbc3073b2,0x3c229a19,0x3a5518f0,0x3b43a4eb,0x3bcc2e00,0x3b8d5784,0x3be078cf,0x3c6b9c12,0x3ce62def,0x3c9f872d,0xbc96cb27,0x3cbccd1d, -0x3d132fad,0x3cb47766,0x3cf09a8a,0x3c2b7ac0,0xbc54ad47,0xbc2efb32,0x3b163eb5,0x3c7a1d80,0x3d172ac5,0x3d2a36dc,0x3d065c6f,0x3cc49f2a,0x3c5dac05,0xbb26c8e7,0xbaea033e,0xbb2a64a9,0xbc689ed5,0xbb782039,0x3b15273b,0x3a8e3d01,0x3d01c386,0x3ccd23f3,0xbb08d217,0xbc309b75,0xbbc760d3, -0x3cf0b905,0x3ca76645,0x3caf02ae,0x3c953035,0x3be51abe,0xbcafda78,0xbd6678ae,0xbd9f5200,0xbd28afa2,0x3c9dbf64,0x3cbfb8bf,0x3c910a33,0x397e4f5b,0xbc6642cc,0xbca8493d,0xbc1c7247,0xbc03a7fa,0x3b118ea0,0x3c531b58,0x3d0341ae,0x3d16c9c1,0x3cc9d264,0x3cc8f71c,0x3cad4f03,0x3cb70a5c, -0x3b2fcc08,0xbbe0e2cb,0xbc24d52b,0xbc5a7420,0xbc2ef406,0xba44ecab,0x3c6d64dd,0x3cccac22,0x3d377194,0xbc5c64a8,0xbd34237d,0xbd079a2f,0xbd739518,0xbd532615,0xbcbdae5b,0xbc5e59b5,0xbca9a2e4,0xbbaf1c7d,0x3c3bfd14,0x3b803bf5,0xbcdbc01c,0xbd0b2274,0xbd01a699,0xbc9ae15c,0xbc8ad740, -0xbc5c4fbd,0xbc87923d,0x3b380c57,0x3b83038c,0xbaa9bf8e,0xbb959df2,0xb987b11e,0x3c855c13,0x3cd8288d,0x3cddf686,0x3c0e37de,0xbbd315ce,0xbc800075,0xbcbf24bd,0xbce1bb74,0xbd0d4622,0xbd15c0af,0xbcddfb9c,0xbc817d16,0x3c83446b,0x3c5227d2,0x3ca67fdc,0x3c9e66b7,0x3d085bf9,0x3cbae156, -0xbaddccaa,0xbcdb004e,0xbda9f560,0xbe093198,0xbde58c72,0xbd9a385d,0xbd4097d9,0xbcb28c6e,0xbbee77d8,0xbc0fc41c,0xbb65fd0b,0x3b772b3e,0xbbbd7ce4,0xba8c502a,0xbb456bfe,0xbbac6fa3,0x3ae871cb,0xbc093c89,0xbc86ea04,0x3c8d24da,0x3cc08cfa,0xbaf16f8e,0xbc369076,0xbca58472,0xbcc0b120, -0xbce3283d,0xbd1e8c38,0xbd694dde,0xbd25638f,0xbcf74416,0xbc4808a9,0xbd080775,0xbd5ac4b7,0xbd874490,0xbd8e2616,0xbd229a32,0xbc1f2971,0xbd4bab57,0x3d3e2702,0x3ddf6e27,0x3e1cf025,0x3e03dbe2,0x3dd52e0e,0x3d7c2229,0x3d010bb1,0x3b404320,0x3c2003c3,0x3ae4782a,0xbb6e3a87,0x3ad0ba50, -0xb77fe252,0xbc096741,0xbb630c1b,0x3a7a34d8,0xbbc2a077,0x3ceafbca,0x3cf96fa0,0xbc1463b7,0x3aac2e80,0xbb61452d,0xbbb322e5,0xbccbdc94,0xbd1c5b13,0xbd8276a3,0xbd28af32,0xbd1da82a,0xbd3dd32b,0xbd65cca6,0xbd620d42,0xbd406ec9,0xbdb78938,0xbdd290a3,0xbd9e4ab7,0xbca42366,0x3e0b0d14, -0x3dcc3658,0x3d99d1a0,0x3d8ae7a3,0x3d69d6ec,0x3d544eee,0x3d3fde3a,0x3d2789da,0x3d133490,0x3ccee026,0x3c10cedc,0x3b9c292b,0x3c13fb89,0x3cdce4fa,0x3c18caba,0x3b5087ca,0x3a60ad62,0x3ac81a7a,0xbbdda6c5,0xbd07b9a9,0xbd4430e4,0xbd7319b1,0xbd722896,0xbd6e53e6,0xbd479efe,0xbd5d31b3, -0xbca9ea83,0xbce69617,0xbd94b0ce,0xbd9df45b,0xbda0cb3a,0xbd83bcc1,0x3c950a74,0x3db31aa3,0x3e09a322,0x3e138a21,0x3d025b26,0x3cfaf4fa,0x3cfb267c,0x3cfe492b,0x3ccb1c74,0x3cd2ed3c,0x3ce3b160,0x3ce69b23,0x3d05fd1c,0x3d08a737,0x3cffb1d3,0x3cc23925,0x3c929999,0x3c7932ef,0x3cb5eba0, -0x3ce189ba,0x3cde9276,0x3ca18a4b,0x3bdf7dd2,0xbc03e34b,0xbc84c9a4,0xbcbabdae,0xbcd6de4a,0xbd2aa7fd,0xbd3a45db,0xbd12a77b,0xbcae8f14,0xbb8d1f00,0x3c5cf7b5,0x3d4b7278,0x3d9a8bf0,0x3dab895d,0x3db11fe6,0x3d934af6,0x3d48337f,0x3d19c221,0x3d1806cf,0x3d21bf96,0x3d191825,0x3d1e21c9, -0x3d2c3172,0x3d15a320,0x3cf4e06c,0x3cc77f55,0x3cda1fd8,0x3cdf0a7d,0x3d002e02,0x3cf8ba6c,0x3d023113,0x3ce96df6,0x3cef531a,0x3cd8a1f2,0x3cd6c594,0x3cef3de5,0x3d09325c,0x3d1dd444,0x3d29cb50,0x3d31efaf,0x3d3f8cfa,0x3d572e77,0x3d6e2eb2,0x3d8158bd,0x3d8482a0,0x3d88f21e,0x3d8bf277, -0x3d5954bf,0x3d266bf0,0x3d0898ca,0x3cf5dc82,0x3cefe2d4,0x3cdd0210,0x3d0985bc,0x3c650476,0x3c679b0f,0x3c3f2315,0x3c689bba,0x3c5333b8,0x3c4739fa,0x3c64f935,0x3c64481c,0x3c83d40d,0x3c885af2,0x3c8f0065,0x3c962ec5,0x3ca4ff76,0x3cb51351,0x3cd9755f,0x3cff38b7,0x3d14522d,0x3d25ce9c, -0x3d372039,0x3d3a3323,0x3d2e4d0b,0x3d2b3e29,0x3d212a6e,0x3d19c2d9,0x3d0eb3ad,0x3d044e75,0x3cec6953,0x3cd085ee,0x3cc5d9a0,0x3cbc2e48,0x3cb82e5c,0x3c9d016e,0x3c966970,0x3c88c368,0x3c7c2b64,0x3c69cf59,0x3c54fd0e,0x3c5524dc,0x3c12d077,0x3bef2f76,0x3bbc2edd,0x3c333854,0x3c094ab2, -0x3be72042,0x3beba4ad,0x3bf7e613,0x3c00a246,0x3c093474,0x3c09a1f4,0x3c02bfec,0x3c462575,0x3c79fc63,0x3c587e3f,0x3c7f8897,0x3c93a8f1,0x3caa070e,0x3ca7e625,0x3ca874fd,0x3caa3248,0x3caa0f4b,0x3cabf9ad,0x3cb1d045,0x3ca51fc3,0x3c98b051,0x3c8638c6,0x3c757bc5,0x3c5d6edd,0x3c486a79, -0x3c576a6e,0x3c5f436d,0x3c6596e2,0x3c6026c8,0x3c586404,0x3b869b97,0x3b397a71,0x38fc67f7,0x3b4fd6e0,0x3b840728,0x3b199e14,0x3baa07b6,0x3bb6de9e,0x3b91fee0,0x3bc6fc48,0x3bb9a339,0x3b85f4fc,0x3b71e05d,0x3b6f9134,0x3b664f18,0x3b9f3d56,0x3bbf075d,0x3c1afc43,0x3bdbb26b,0x3bb9e0dc, -0x3b9349b3,0x3b860d4c,0x3b74c724,0x3b534577,0x3b3bbe81,0x3b6029a6,0x3bcfbbca,0x3b96e6e6,0x3b4b3f9c,0xbaed38a2,0x3a2ffe5f,0x3abc63d0,0x3b5f4695,0x3b661348,0x3b86ed95,0x3baa9c67,0x3b6928ee,0x3ab40a8c,0xba9e948c,0x3c0c384d,0x3bf0f50e,0x3aad6994,0x3be21cc7,0x3bff8a7e,0x3ba9244d, -0x3c026d7b,0x3be6ed34,0x3b559911,0x3a9740c1,0x3a9d10db,0x3b2f9996,0x3c00d737,0x3c309a1e,0x3c7b9d4c,0x3c357ee5,0x3bf12602,0x3bb120b6,0x3ba0d742,0x3b502684,0x3b28a935,0x3a58f6a1,0x3b3d0e43,0x3c27dc50,0x3ba5c75d,0xba2494cd,0xbc38290f,0xbbca5c54,0xbb117e81,0x3b9ec613,0x3bafcc5e, -0x3bc7c48f,0x3be316ca,0x3b637e92,0xba9aadaf,0xbc2048a9,0x3af0cd94,0x3b71e164,0xbbebe001,0x3c5f5ad5,0x3c5e072c,0x3b336499,0x3c36d87a,0x3c1ac555,0xb9f2d3a8,0xbac9bf74,0xbb28f7a2,0x3a27ae39,0x3c30d3af,0x3c9b10f6,0x3ce59a2b,0x3c9b16c0,0x3c33f87b,0x3bb6b8ff,0x3bd82f73,0x3b408b38, -0x3a9ac3f8,0xbb01c43d,0x3b026bc1,0x3c89fe24,0x3c0505f7,0xba14676b,0xbcd4543d,0xbc720e43,0xbc21b249,0x3b0858cc,0x3bdd7f61,0x3c0631d4,0x3c425b71,0x3b8827e2,0xbb2170b4,0xbbf82f22,0x3cbd85ef,0x3c98030f,0xbc5c3e1e,0x3c3e83ec,0x3cc5b7f2,0x3c3d83f3,0x3cce8dfc,0x3c769e82,0xbc1ec5b1, -0xbc4348b5,0xbb7e0574,0x3bc8e515,0x3cd45ae3,0x3d054c13,0x3d1b124a,0x3cbae42d,0x3c295f57,0x3b70d55e,0x3ba19617,0xba3a4752,0xbb188e0f,0xbbcc9b42,0x3ae8277d,0x3cc4542e,0x3bf19f16,0xbc860677,0xbd431f1d,0xbcdea310,0xbc167e3e,0x3c36ca98,0x3c6a342d,0x3c90796e,0x3c80993a,0x3bf1532c, -0xbb8f7431,0xbcb8f8be,0xbdad5b69,0xbd6f3ff9,0x3d2d88e1,0x3caa627c,0x3c26aad3,0x3af9ac91,0xbc38fdcc,0xbc8b6e1c,0xbc4b47a9,0xba868a4d,0x3bb4634d,0x3b3a2122,0x3c7103df,0x3cd809ac,0x3d3ea30c,0x3cd033e5,0x3c86831b,0x3c8046e3,0x3c8a0c50,0x3c67b0c5,0x3c08a06f,0xbbe02b10,0xbbb89f9b, -0x3c735b9c,0x3ca6ce7a,0x3cc12018,0x3d05a638,0xbd4a6af0,0xbd8bafb7,0xbcf0b889,0xbcde2198,0xbca4cadd,0xbca10c0b,0x3ac902e3,0xbc879fb0,0xbbee1ae8,0x3d08d8e7,0x3c9356db,0xbd285b9f,0xbd4db3ed,0xbd30e473,0xbcb5da05,0xbc93314f,0xbc24110a,0xbc4eee82,0xbb0ffed6,0x3a6bbc54,0xbb30430a, -0xba1be491,0xbbbb977c,0xbc77390c,0x3c4ed1ca,0x3c8fd53e,0x3b3b69c4,0xbb366f96,0xbc669c09,0xbc9c5bce,0xbc56bb33,0xbc2a332c,0xbc7c3717,0xbaeb832c,0xbb58d0f5,0xbbc57abd,0xbbdaaab4,0xbc33dbac,0xbcee9472,0xb9e0522b,0xbb7027e8,0xbd10545b,0xbcbde19c,0x3d27ed6c,0xbcae5cc0,0xbd636637, -0xbd4de776,0xbd19d125,0xbc8b9e00,0x3a86d51e,0xbc07172e,0xbbf7cd8c,0x3adf5bb5,0x3b05c92c,0x3a9ae42c,0x3aeca114,0x3b09ac0a,0x3c3c55c2,0xbb124fbd,0xbcb1d89a,0x3c637d92,0x3c8510e2,0xbbfc036d,0xbc6a1442,0xbcce5628,0xbcef41fd,0xbd1d98b2,0xbd0d5c9e,0xbcc0d53a,0xbc28e3ea,0xbc805f8a, -0xbd2fb873,0xbd3c4679,0xbd420e1d,0xbd852011,0xbc9f3f11,0x3a95683c,0x3bce94a4,0x3d4f1b6e,0xbe1cf920,0xbd485588,0x3cd9c25e,0x3d188107,0x3d11610e,0xbb401330,0xbc99b250,0xbcc1e7b5,0xbc05ca76,0xbc25ac89,0xbc5d9f49,0xbb8e31ba,0xbb50891e,0xbc6cf3cd,0xbc3d7b85,0xbc3f3188,0xbc8e34e1, -0x3c34893e,0x3c5d6ff5,0x3a5a1073,0xbc64eebd,0xbcc8b39a,0xbc954431,0xbc9662bf,0xbc82f4ed,0xbc952ddc,0xbc90cc51,0xbc909ff7,0xbc8996c0,0xbc7de9d5,0xbcb27d18,0xbd5d99c9,0xbcbdc77b,0xbd6665bc,0xbe13d073,0xbe2a8d80,0x3e0f3b9f,0x3e2075f5,0x3e035ec9,0x3dd6cc36,0x3da5862d,0x3dac796e, -0x3d9be87e,0x3d507017,0x3d05143e,0x3c8d72ee,0x3b8786fb,0x3a6ab117,0x3b7b2d59,0x3c368359,0x3c0ae627,0x3b7c840f,0xbc36bb4b,0xbbcf80a4,0xbc4bb724,0xbc91e0ad,0xbc7d86e7,0xbc989a7f,0xbc986f04,0xbc7f1b7c,0xbc1d41dc,0x39a74fc6,0xbc99dc00,0xbce28047,0xbcbd186e,0xbd27a379,0xbd79878a, -0xbdbe9789,0xbdad3508,0xbd15ae50,0x3d2c5c31,0x3dcd902a,0x3d8e7c69,0x3d535550,0x3d464387,0x3d49adac,0x3d2925ad,0x3d3603ed,0x3d3080fb,0x3d108e85,0x3d27075f,0x3d264ec0,0x3d1c25da,0x3d199891,0x3ce4e654,0x3c2043af,0xba8a3c76,0xbb42779d,0x3b30e334,0x3c55688b,0x3c317e5d,0xbb866235, -0xbc7de083,0xbcd7cb87,0xbd129654,0xbd4652fc,0xbd7b5aa1,0xbd962b79,0xbdb1bffc,0xbda7eb87,0xbd5d5d5e,0xbd0e14aa,0x3b8e1ab2,0x3d63baa5,0x3dd215af,0x3df2eb14,0x3dda54a8,0x3db113e5,0x3d7eb65c,0x3d53ae01,0x3d32919c,0x3d20636e,0x3d08ee75,0x3ce77df9,0x3cb7b1b2,0x3c8710ad,0x3c879b79, -0x3c9516df,0x3c94d5e7,0x3ca51b87,0x3cac6b32,0x3cc7e15b,0x3cd5bf7c,0x3cd79567,0x3cd22c7f,0x3cc2b231,0x3ce5b76f,0x3cc2f45f,0x3ca65d7d,0x3cad9bbb,0x3c9e97d0,0x3ce3da23,0x3d118e81,0x3d2f8723,0x3d67de03,0x3d8b83bc,0x3da04c9f,0x3da8b213,0x3db25270,0x3dbd4ccb,0x3da2e3f5,0x3d96c520, -0x3d943840,0x3d8a5ca3,0x3d3dc28f,0x3d391ce9,0x3d035794,0x3d2c20b8,0x3d17d96a,0x3d1938a7,0x3d24b92c,0x3d1f5728,0x3d285e2d,0x3d1c8ecc,0x3d14bb58,0x3d137ce7,0x3d0dbab0,0x3d05c68d,0x3cf25819,0x3ce08606,0x3ce21647,0x3cd22091,0x3cbe907f,0x3c9767de,0x3cbf9529,0x3ce95bab,0x3d03d880, -0x3d16522c,0x3d25b99b,0x3d36189f,0x3d366e51,0x3d38bc7b,0x3d3dfb01,0x3d4a771d,0x3d56aa6c,0x3d6cacf0,0x3d672f29,0x3d606c91,0x3d537fa7,0x3d441046,0x3d35d36d,0x3d3b52d3,0x3d1e12a6,0x3d0e9c12,0x3ce74120,0x3d27a73d,0x3d0f8270,0x3ce9e393,0x3ce43866,0x3ce707f7,0x3cea0c6a,0x3ce7fd36, -0x3ce94a50,0x3ceb89e2,0x3d066fa2,0x3d11264b,0x3cdf891c,0x3cfa5cc1,0x3d02afd1,0x3d0a2181,0x3d16cc4d,0x3d1daec3,0x3d27df3c,0x3d2e8c5b,0x3d35c000,0x3d3f910e,0x3d3f33ca,0x3d41de39,0x3d43d547,0x3d44e2ea,0x3d4490eb,0x3d457e7d,0x3d3f524c,0x3d3cc90d,0x3d3ad8a3,0x3d3af8e4,0x3d428c64, -0x3bc9f4c9,0x3b528105,0x3b13c070,0x3b6a83a4,0x3b93b5f1,0x3ba74b7f,0x3bbfce3b,0x3b967c46,0x3b799f08,0x3b8a0afd,0x3b96f36e,0x3bc20ecf,0x3b7b9c79,0x3b676201,0x3b6244cc,0x3baaf3fe,0x3bd7aa3e,0x3bf8c0f1,0x3c003705,0x3c046e9b,0x3bfb8005,0x3bf09afd,0x3be4b7d0,0x3bd293b6,0x3bbd22e8, -0x3bba557a,0x3c02646a,0x3b737ae0,0x3b202b0d,0x3b0338dd,0x3b548396,0x3b8ea70d,0x3bb49915,0x3be360a3,0x3bdc34ca,0x3b82f9bc,0x3b83f164,0x3a3883e3,0xb710387f,0x3b2076b3,0x3be84f85,0x3c29773e,0x3baf27fe,0x3b884e36,0x3bc3bc1d,0x3bde0a79,0x3bf3b3c5,0x3c1863bf,0x3ba001b0,0x3b812b4f, -0x3b93bab2,0x3bf87ca8,0x3c2a0c6d,0x3c65bd6a,0x3c6b1d11,0x3c583edd,0x3c3c2d6a,0x3c404e4b,0x3c2514e4,0x3c05369d,0x3bc9fc37,0x3bace16f,0x3c21b864,0xbb0634a8,0xbbbb9741,0xbb8bf7fc,0xbb10f983,0x3aec4ef2,0x3b96e92c,0x3c13d84d,0x3c057e17,0x39f4147f,0x3a9ff9eb,0xbbfc5db9,0xbc5004ce, -0xbb415fdc,0x3bb4a069,0x3c4c66d8,0x3becdfa2,0x3b910882,0x3bb0b5e4,0x3bc57c57,0x3c1276d6,0x3c4766f1,0x3bab85b0,0x3a964785,0x3b63f985,0x3c1a0b8e,0x3c8432f1,0x3cc3833c,0x3cc365ca,0x3cb1c142,0x3c7fee69,0x3c8770f1,0x3c5b9195,0x3c204280,0x3bd20360,0x3bbde410,0x3c8c85ed,0xbbeca8af, -0xbc64799d,0xbc6b461b,0xbc063846,0x39038eaa,0x3ba4873f,0x3c7987f4,0x3c59ab9a,0xbb973db0,0xbba09b5a,0xbc5678b4,0xbc704549,0x3af1dc28,0x3c4e44be,0x3c748b52,0x3b80fe45,0x3bcc17ce,0x3bc6c72f,0x3c630e8c,0x3c5aa9d0,0x3b937be4,0xbbc4d21e,0xbb56d74b,0x3bb180e2,0x3c95c74b,0x3cd9cb8d, -0x3d16c5ef,0x3cf26c8d,0x3cda5b14,0x3ca5237b,0x3cbf5a06,0x3c91ec92,0x3c30639e,0x3bb264be,0x3baf2ec1,0x3c9763d2,0xbc97b8b9,0xbd10a61f,0xbcf5492f,0xbc948531,0xba03f519,0x3b354258,0x3c847eac,0x3c42fa85,0xbc741c21,0xbc4506df,0xbc4f6e1b,0xbc7165d2,0xbd4c9759,0xbd2962aa,0x3cd0372e, -0x3ccdea68,0x3cae3755,0x3b959ddc,0x3aae3eee,0xbb4e57df,0xbc0bc205,0x3b9303f1,0x3ba158fb,0xbb03451b,0x3c2f32d9,0x3cb310ca,0x3d1851e2,0x3d07d74e,0x3cdfec38,0x3c40bd8e,0x3c57a54d,0x3c2a3a46,0x3bd1acdb,0x3be0a7b3,0x3c060bb8,0x3c89ff4e,0x3b7b4c2f,0x3c121729,0x3d0cb448,0xbcd00cfc, -0xbcf0742c,0x3c116446,0x3cc42f35,0x3cf0b058,0x3c311cce,0x3a5cd73f,0x3cade501,0x3ce03e1d,0x3c747abf,0x3bd0799c,0xbca713ff,0xbcefec0c,0xbcd818ba,0xbc82e596,0xbc505fa8,0xbbc70041,0xbb8ed273,0xbb856380,0x3a897ffe,0x3bbb8541,0x3c30cc23,0x3b9aa6be,0xbaa4d2db,0x3c064aee,0x3c5228d5, -0x3cb6ba4d,0x3c61bde1,0x3b960b6c,0xba8a2080,0xbc15a311,0xbc0bb009,0xbb845155,0xbc99f0ac,0xbccaec31,0xbca1ee36,0xbcc1d86b,0xbcc0387d,0xbca37a4c,0xbd27a322,0xbd60be91,0xbd84974b,0xbc36d88f,0x3c83569a,0x3cdf50b3,0x3b5c92ee,0xbc603cff,0xbd09e84b,0xbc9e3d12,0xbc252637,0xbcb8c432, -0xbc7f3fa0,0xbb8e0b1d,0x3af5bd69,0xb9f72199,0x3a55358c,0x3b47bb83,0x3b799d94,0x39eb6dff,0xb9a35a34,0x3bfa4b7e,0x3bf78014,0x3c846cb3,0x3ad86a11,0xbb2b17ae,0x3c02bd26,0x3b9d137c,0x3b23b498,0xbb37b12d,0xbbebc572,0xbc41b87c,0xbc8e6e3b,0xbcfeb3bf,0xbcedbd88,0xbb6dd164,0x3ca29090, -0x3cf444f8,0x3cddf55d,0x3c4dc250,0xbe176c6d,0xbe042875,0xbdbae0e0,0xbd83e56d,0xbd4358b9,0xbd35db64,0xbd13b62a,0xbd10045b,0xbcb60f68,0xbc82d898,0xbc043d20,0xb8f95e44,0x3b457284,0xbaf5a974,0xba3f64cf,0xbb7e980e,0xbbcf61f2,0xbbfa0ba4,0xb990a84f,0x3cd818c7,0x3c225ef4,0x3a1f8e7e, -0xbc1bd41a,0xbc60f8a7,0xbc6a1355,0xbc4af0cd,0xbc22fcbe,0xbc1794ad,0xbb875edb,0xbca29c21,0xbcede66c,0xbc64feed,0xbd4f2645,0xbd83f8db,0xbd73a705,0xbdfe102f,0x3d5017c3,0x3dbd968f,0x3deb9e5f,0x3dd9ebdc,0x3db5fcad,0x3dc29b2c,0x3d931179,0x3ce26e90,0x3ca5cb48,0x3c13042d,0x3c27799a, -0x3a21fb11,0xbb85967d,0xbbef92ee,0x3a23b21d,0x3ade1e50,0xbbe109ef,0x3c08cf8d,0x3c061fc5,0x3bf71c98,0xbbb820d6,0xbc1f2443,0xbb3ca901,0xbc1c63d7,0xbcae8453,0xbd0ea997,0xbd00a11e,0xbd104d1f,0xbd2b8ef3,0xbd1f53d7,0xbd21560d,0xbd1916ab,0xbd944550,0xbda96e99,0xbd7b9020,0x3af9526c, -0x3d9bff73,0x3d9707ab,0x3d926afc,0x3d865f36,0x3d636611,0x3d48c242,0x3d48eff3,0x3d59fc48,0x3d49c73e,0x3d373b93,0x3d2e5dc7,0x3d06e386,0x3cdd4911,0x3cd14df4,0x3c580939,0x3bc80961,0xbb4bfb2e,0xbba89bf8,0xbc1fb72b,0xbc84c38d,0xbcec3c19,0xbd1413d8,0xbd22b2aa,0xbd3f7ced,0xbd3a4e60, -0xbd094def,0xbd2c0c6c,0xbd408c22,0xbd5dd0e1,0xbd7cb618,0xbd87a67a,0xbd7fa452,0xbc90467a,0x3ccb7c29,0x3d675d25,0x3d8cfd63,0x3d9c7a6f,0x3d899244,0x3d797290,0x3d6684d4,0x3d49d441,0x3d422a93,0x3d397a72,0x3d27cf1c,0x3d110eed,0x3d0aa7b3,0x3ce10192,0x3ceccd61,0x3cde0b1c,0x3ce31edf, -0x3cc67527,0x3ca452a9,0x3c844039,0x3c12bd8f,0x3b1a3877,0xbba87144,0xbbc93401,0xbbf3a3e9,0xbc182788,0xbbcbc2a4,0xbbc6a61b,0xbbc847f3,0xbb4a1a17,0x3a8a7a87,0x3b5694d0,0x3d048f3c,0x3d7c5196,0x3db3ff1e,0x3db89031,0x3dba7529,0x3dc9c259,0x3dae5bd3,0x3d84290c,0x3d897686,0x3d83dcd9, -0x3d828644,0x3d7ae126,0x3d74ab3f,0x3d6e5485,0x3d680514,0x3d62ad88,0x3d59a008,0x3d4e273c,0x3d45c9ab,0x3d384a69,0x3d28ed57,0x3d1d870f,0x3d129911,0x3d0be3f6,0x3d02c4e2,0x3cf9c339,0x3cd8454a,0x3cf7dc33,0x3d0a0fc5,0x3d1614b2,0x3d21597f,0x3d2f08f2,0x3d3bfec6,0x3d49df54,0x3d56b941, -0x3d5b235a,0x3d5f86b1,0x3d564e91,0x3d5f9361,0x3d6178b8,0x3d6d4058,0x3d74e428,0x3d7f04ee,0x3d676a52,0x3d6d4a9a,0x3d65fe6d,0x3d608088,0x3d571df9,0x3d5f2c6c,0x3d5692d8,0x3d4b6a62,0x3d47052e,0x3d4241b5,0x3d3fa61e,0x3d3a789f,0x3d37b8e7,0x3d35a392,0x3d3aed9b,0x3d3ab1ff,0x3d2e1e54, -0x3d301a19,0x3d2f8ab9,0x3d27e044,0x3d3008ab,0x3d3480bc,0x3d3a6cc6,0x3d3f4d9e,0x3d43d5c1,0x3d48b2da,0x3d4c2a22,0x3d510a9c,0x3d58c31c,0x3d5b4b36,0x3d609c42,0x3d6303c2,0x3d63d893,0x3d634ea8,0x3d61daad,0x3d655b06,0x3d702300,0x3c129a73,0x3bd326df,0x3bc6ecb9,0x3be2e62d,0x3c03a5e9, -0x3c433598,0x3c07e649,0x3bdeeed2,0x3c00b143,0x3bd95179,0x3bebb059,0x3c24d097,0x3bf0b7c2,0x3bd91faa,0x3bbff7a6,0x3bf95dba,0x3c0c9b99,0x3c1147a1,0x3c24e0fe,0x3c2cb0f5,0x3c2d4d76,0x3c1ef8ab,0x3c16ba1f,0x3c0dca3d,0x3c0acc7a,0x3bfe6cba,0x3be86821,0x3b95eb55,0x3b76f251,0x3b4ad97a, -0x3be0b62b,0x3c053fcd,0x3be69aa2,0x3c1b555b,0x3c1b41de,0x3be4bd5d,0x3beaeea7,0x3bdf9932,0x3bcc5c6d,0x3bee772d,0x3c49a0d9,0x3cb4d2e8,0x3c062b0a,0x3baa64d1,0x3c2e092e,0x3c03fa4e,0x3c18e2f2,0x3c749b79,0x3c0ec767,0x3be9aecd,0x3bccc926,0x3c130c3f,0x3c387a21,0x3c58a835,0x3c86a317, -0x3c821f01,0x3c6e8b04,0x3c5f3b35,0x3c464d11,0x3c2e2257,0x3c263cc2,0x3bf0fb7e,0x3b91cdcb,0xbb610059,0xbbaaead4,0xbb9d9d29,0x3ba44bfb,0x3c12d7b9,0x3ba0028b,0x3c2ee067,0x3c1c0d06,0x3b67c135,0x3bc73162,0x3b0e045b,0xba92624e,0x3b91c1aa,0x3c52717b,0x3d0e4580,0x3c014fd4,0x3b828b53, -0x3c6e5de0,0x3be03016,0x3c1a0f9f,0x3cb61af0,0x3c1d4b5e,0x3b9a00f4,0x3bad0e36,0x3c263f14,0x3c7a874f,0x3ca124cd,0x3ccfe144,0x3ccf14a2,0x3cac219f,0x3c979b1e,0x3c73e41b,0x3c47aa21,0x3c2f178f,0x3bcd0df4,0x3b16af98,0xbc5c70ca,0xbc9146aa,0xbc9a0c4d,0x3b3c74a0,0x3c3fad65,0x3adf09fb, -0x3c83fea1,0x3c717507,0x3b0cf5b2,0x3b90502e,0x3bf4db24,0x3b7e119a,0x3c2d7340,0x3cb7282f,0x3d4ea8c5,0x3bdd797b,0xbb4485b9,0x3c5de50b,0x3c0eca77,0x3c57b7b8,0x3cc091d2,0x3b6ca029,0xbb059523,0x3bb161e1,0x3c6c9cfb,0x3cbd6536,0x3cfbc385,0x3d0d2135,0x3d0677fc,0x3cd6f187,0x3ccb6d52, -0x3c9e7503,0x3c85afa6,0x3c5b79ea,0x3ba52bcc,0xbb9858a7,0xbcfb51d1,0xbd1afa4b,0xbd0df057,0x3a43542c,0x3c55fa0d,0xbb9cf804,0x3c4a4877,0x3c12fb6b,0xbc281bb6,0x3a861a48,0xbb965f37,0xbc9247e8,0xbcd7d3ae,0xbca5c6db,0xbb469a24,0x3c9c92b9,0x3cf30838,0x3cbdb266,0x3c12b9f7,0x36d27571, -0xbb65bfc2,0x3be0388c,0x3c0c8d5b,0x3b8a05c9,0x3c6f517e,0x3caebe1b,0x3ce38f3c,0x3d2b4020,0x3d240d2a,0x3cbbaad8,0x3caec579,0x3c4d70b7,0x3b9bf938,0x39d27144,0x3b21ae53,0x3c208744,0x3b8ae161,0x3ada9b99,0xbbb3cc4a,0xbc0aa81e,0x3a82b052,0x3ced7712,0x3cde887d,0x3d058867,0x3d17c44c, -0x3c89bdd9,0x3cb1ae2e,0x3da3af6a,0x3bae694a,0xbc8564aa,0xbc06e1b2,0xbc30dcb1,0xbc4d5447,0xbc578bfc,0xbb92c242,0x39d677d7,0xbad372c8,0xbba8f72d,0xbb0023c8,0x3b9dc774,0x3c2bb132,0x3c198f2d,0x3c33cdcc,0x3b6ce084,0x3b99c705,0x3ca874e3,0x3c37bf06,0x3bcc5b2c,0x3ad1d019,0xbbed5c90, -0xbc398ef0,0xbc331d42,0xbc2d0bda,0xbad99291,0x3c50475d,0x3c0f060d,0x3a96caad,0x3c0944e5,0xbd79e968,0xbd975e0b,0xbd03ac72,0xbca20346,0xbc102574,0xba2c54a3,0x3c3374bf,0x3a2de65e,0xbd1e79fc,0xbccc6d12,0xbc706cb6,0xbc82f254,0xbc6feea9,0xbc07baf2,0x3a2c0931,0x3a607623,0x3bbadc90, -0x3ba4aec6,0x3bdeb786,0x3c3a29d4,0x3c844c12,0x3bd65f7d,0x3c42d2cd,0x3d2fc5c6,0x3c9d9c06,0x3c38c8ea,0x3c05b358,0x3b372319,0x3ace4150,0x3b67c8ab,0xbc2e7fd6,0xbc8a8ee7,0xbc3e1cba,0xbb602eec,0x3bbcd143,0x3c40fc3d,0x3d1ca669,0x3d064fe6,0xbb2161f4,0xbb23dece,0x3b7c30a7,0xbd669411, -0xbdc7c806,0xbdb73795,0xbd8f69de,0xbd153d94,0xbc7ff759,0xbc80a1e9,0xbc65da64,0xbbecb6a1,0x39d72947,0xba409e31,0x3a04d4b9,0x3b87dfaf,0x3b8ac2ff,0xba23e4e9,0xbb08aee5,0xbb9d8f01,0x3ae7e0bc,0x3cb63314,0x3c241418,0x3b535d34,0xbc098d60,0xbc69bb77,0xbcbce9e5,0xbc9bbc53,0xbcb43b28, -0xbc780a6c,0xbad2956d,0x3950a4b1,0xbc20ccaf,0xbd18ad55,0xbd117b55,0xbd1b29c7,0xbd3a221a,0x3ba0f2fb,0xbde23bc7,0xbd7fb8ec,0x3b358153,0x3cd43ef9,0x3d0d644d,0x3cde0154,0x3be7034d,0xbc3d33db,0xbc002518,0xbc0718dc,0xbad07887,0x3ba857ff,0x3b6d6e30,0xbba1c87c,0x3b4603b9,0x3be2f73b, -0x3c2fdf78,0xbb201672,0xbb660e99,0x3c4e83ba,0x3bb0d2f5,0xbb2ff775,0xbc82e0ac,0xbca0cd41,0xbc98fff0,0xbc1088ff,0xbc906110,0xbc84bded,0xbbce0b33,0xbc8a4a46,0xbc966a20,0xbca48ff2,0xbc5769df,0xbd1143c3,0xbda9b923,0xbdd68e9f,0x3da1e6c6,0x3dc889c2,0x3dcbabc1,0x3db5eec8,0x3da882b3, -0x3d8333aa,0x3d79e075,0x3d934179,0x3d7a432e,0x3d4e04e3,0x3d0a3b47,0x3cf4ad17,0x3ceb77d9,0x3ce54282,0x3c98736a,0x3ba92d9f,0xbc0fc99f,0xbc6cfd3d,0xbc8ae243,0xbc2ed733,0xbc93daaa,0xbca45f79,0xbc82c8c7,0xbca7206b,0xbc9f015a,0xbc965146,0xbca39b67,0xbcc331d0,0xbd126afe,0xbd26346c, -0xbd594d24,0xbd8fed23,0xbd994d01,0xbd5c873b,0xbb200469,0x3d316ea4,0x3d362840,0x3d5b4149,0x3d5f1330,0x3d675503,0x3d691f4b,0x3d6c28cf,0x3d6c663b,0x3d69ea66,0x3d5097df,0x3d3c22c6,0x3d2a7d46,0x3d0551c8,0x3ccbcfdc,0x3c813bc8,0x3c70607d,0x3c56b34c,0x3c3414d5,0x3c09a83e,0x3b83220a, -0xbb5842b3,0xbc3c2218,0xbc908da0,0xbcccf7f7,0xbcfaaea3,0xbd128e9a,0xbd2a20d4,0xbd37290e,0xbd473c94,0xbd5eddcb,0xbd1da535,0xbcccded5,0xbc416ef6,0x3c240fca,0x3cdd2949,0x3d2824da,0x3d282342,0x3d305402,0x3d3a550a,0x3d61c04f,0x3d43d299,0x3d523eda,0x3d545dda,0x3d4feae5,0x3d53780d, -0x3d3dbb28,0x3d2f707e,0x3d26d6a7,0x3d128699,0x3d05280a,0x3cee4fb4,0x3cd88bf8,0x3c9e4d2b,0x3c615e3e,0x3c0d4e0d,0x3c20e47d,0xbae8b8da,0x3a3a5105,0x3b46945c,0x3b9a7dd4,0x3bdcdcc8,0x3c030f50,0x3c117d29,0x3c52e73b,0x3c927fd6,0x3cb5e561,0x3ccf8808,0x3ce1c078,0x3cf19af2,0x3cf97bf4, -0x3d02ce5a,0x3d11b974,0x3d23f492,0x3d21c1ca,0x3d1e1ed1,0x3d3d7f87,0x3d4c12f5,0x3d5f739f,0x3d36ca2b,0x3d4c71fe,0x3d5ef7b3,0x3d59496d,0x3d54faee,0x3d4e5ddc,0x3d4c5e03,0x3d496fba,0x3d455d89,0x3d25f7f0,0x3d0f7694,0x3d34cdd5,0x3d174143,0x3d053a6b,0x3cc702e2,0x3cdc77fc,0x3cd81f29, -0x3cd99d27,0x3cd91f93,0x3cdb4f2c,0x3cda8345,0x3cecf022,0x3cf8e5e9,0x3d03ce36,0x3d08548c,0x3d0eef50,0x3d178b6a,0x3d196d20,0x3d1bc611,0x3d1b8589,0x3d1d468b,0x3d393432,0x3c376383,0x3c1e3486,0x3c235c2b,0x3c27e723,0x3c325055,0x3c72ad57,0x3c2154e3,0x3c163edb,0x3c2cbf96,0x3c19b951, -0x3c1d5352,0x3c3d85bb,0x3c20ff26,0x3c183bee,0x3c10c30b,0x3c1d6be8,0x3c2543c4,0x3c270e83,0x3c3f2f85,0x3c49fd65,0x3c55cbd4,0x3c409182,0x3c367501,0x3c2c7ce1,0x3c2891f5,0x3c16da08,0x3bdcbe60,0x3bd4bacb,0x3bd2fafe,0x3bcb8508,0x3c1fbf81,0x3c2fc484,0x3c11ae6b,0x3c3ac740,0x3c3b5a93, -0x3c1656be,0x3c240c89,0x3c2e5966,0x3c558518,0x3c6641fc,0x3c902433,0x3ccbf161,0x3c319190,0x3bf1436f,0x3c4789bc,0x3c2e43ad,0x3c468bdc,0x3c74ee9b,0x3c41118f,0x3c2c4c6f,0x3c179613,0x3c2ce7ba,0x3c3ef0de,0x3c562593,0x3c8b6f31,0x3c94da63,0x3c9d7bb6,0x3c83d2e4,0x3c69ad54,0x3c4bc2d4, -0x3c3e8cb9,0x3bfc7b13,0x39b0ef3f,0xbad6c71b,0xbaa30fb8,0xb9ea9e38,0x3c205ebe,0x3c4fd0eb,0x3bda80c9,0x3c51e90e,0x3c3d87f8,0x3bcb97f1,0x3c090c57,0x3c2699a1,0x3c1f1626,0x3c6100b6,0x3c92973d,0x3d138afa,0x3c1bf360,0x3bc136af,0x3c82b718,0x3c2587e7,0x3c367196,0x3ca066f8,0x3c398a3d, -0x3c0cbc22,0x3bfa7d40,0x3c35e2eb,0x3c63e290,0x3c70e14a,0x3cbee23c,0x3cd1d4a6,0x3cd85600,0x3ca8b267,0x3c88cff6,0x3c586c56,0x3c442884,0x3b95394e,0xbc07f8ef,0xbc40b53f,0xbc3b48f0,0xbc0dab8e,0x3c178a80,0x3c7e14cc,0x3b848a43,0x3c860c09,0x3c8bafbb,0x3bdf2d5a,0x3c3e0bfb,0x3c639e26, -0x3c945258,0x3ccbe094,0x3d176755,0x3d72d175,0x3c4724f1,0xbb49ee54,0x3c877b50,0x3c21a3d3,0x3c66e91a,0x3cf24ac2,0x3c0e0ab7,0x3ac6e4c4,0x3c17df82,0x3c85cb61,0x3ca1ef7e,0x3cb7d443,0x3d0a2b7c,0x3d15de70,0x3d144e16,0x3ce641ae,0x3cb66eb0,0x3c8f86e8,0x3c5cedaf,0xb8a1889b,0xbcbf2197, -0xbd039a42,0xbce82f5e,0xbcb07c3c,0x3c0f6a9c,0x3c840cfd,0xbb0a4a67,0x3c81cc50,0x3c174dea,0xbbbf0e7d,0x3b472b16,0x3bfcd15e,0xba594df1,0xbcb18d6f,0xbcf32523,0xbccf8d9c,0x3c5a9fd9,0x3d0f78bb,0x3d0b485c,0x3c8f5ff6,0x3ae0524c,0xbbb5fc9f,0x3bc2bd9c,0x3c2e8b48,0x3c112dbe,0x3ca85b26, -0x3cbd2fe9,0x3cc3a880,0x3cf7a301,0x3cfa4e25,0x3cf085ff,0x3c63a24b,0x3bc2ba53,0x3b9b09a9,0x3b5bf32b,0x3b915a5b,0x3b6af4dd,0x3c967255,0x3c861a03,0xbc625dac,0x3c87540d,0x3cb42dc9,0x3c36bc69,0x3c8f59b6,0x3d21793e,0x3da1efd8,0x3d10158a,0xbb1566d6,0x3d92664c,0x3c46f83a,0xbc2f0434, -0x3c0ab410,0xbbf5b532,0xbc105877,0xbba6b4b1,0x3b889af1,0x3c17058e,0x3b9e5b6d,0x38380713,0x3afc5d2c,0x3c198366,0x3c0c796f,0x3c552591,0x3c8ed2f2,0x3c56d877,0x3c4bf9fe,0x3c91c64a,0x3c329384,0x3bf3647a,0xba71c5ac,0xbb221bc7,0xba3890cf,0x3bebe0ac,0x3c35235e,0x3c954555,0x3cb2d8bc, -0x3c1ed564,0x3c4fec30,0x3cf6da4d,0xbca74f26,0xbd30d1d0,0xbd1785fc,0xbd10dd79,0xbc528be9,0xbc225b9a,0xbc18b633,0xbc31abe3,0xbcc528d7,0xbcea4024,0xbcd1496a,0xbbbc1796,0xbc3d0cd8,0xbc1e0443,0xbabf1615,0x3b3f9a2f,0x3bf61d0b,0x3b1158c8,0x3c007480,0x3c781fc8,0x3c870aee,0x3bac3d06, -0x3c37288f,0x3cd5020a,0x3c9c77d3,0x3c8b9889,0x3bdb125b,0x3bbcb9d5,0x3b27007e,0x3b58e97f,0xbc4ecb7b,0xbc5540ce,0x3be5dc6a,0x3c0aadda,0x3c79b506,0x3cb8e993,0x3c98732f,0x3c94f244,0x3ae60d6f,0xbb65ff34,0x3c4d4e12,0x3c63f323,0xbd060add,0xbd4fe854,0xbd2952c7,0xbcd0b42c,0xbc061134, -0x3abd721b,0xbb652274,0x3b79c2b1,0x3ba9cf44,0xb8490ebc,0x3a9d866d,0x3c222b02,0x3c17e70e,0x3c13b81e,0x3c2896cd,0x3c58906d,0x3c564bef,0x3c28b79e,0x3c624068,0x3c537899,0x3b91ffd2,0x3c13cd2f,0x3c075cba,0x3b86cd31,0xbc323a73,0xbc368ace,0xba17f3b8,0xbc804aec,0xbc9ffca5,0xbca70472, -0xbd07e3bb,0xbd04ba34,0xbc84bc69,0xba5534d1,0xbdde8e25,0xbdfeca1e,0xbda08802,0xbd2a1d29,0xbca7447e,0xbd122b3c,0xbd284571,0xbcd91176,0xbcd2b736,0xbca97f55,0xbbfd3924,0x3bba1fe4,0x3c0aa183,0x3b9192f4,0x3b3612d4,0x3b7c6073,0x3c4c6e0f,0x3b0fc882,0x3b12cdcc,0x3c4278c6,0x3c601eff, -0x3c1e1119,0xbb3f1a5a,0xbbf14b0a,0xbc3ea6a2,0xbc84267e,0xbc452af6,0xbc0add36,0xbc6ea21a,0xbb1b59b5,0xbb6e28d9,0xbc56833a,0xbcd00888,0xbd12f400,0xbd399b63,0xbdacda62,0xbb5a2ef8,0x3d041f5e,0x3d6153f4,0x3d5004bb,0x3d5e30c7,0x3d50a858,0x3d447296,0x3d575d22,0x3d3ed60e,0x3d24ce49, -0x3cdb6943,0x3cb57b09,0x3c777f86,0x3c26cb2c,0x3c4c9718,0x3c1f27e6,0x3bfa2c7f,0xbaa535d6,0xbb7026e9,0xbb432c4e,0xbb95ba69,0xbba129ee,0xbbe38b4d,0xbbcc8946,0xbc12a3f5,0xbc2a7c51,0xbc2f3fde,0xbc7a21ec,0xbcd4e9b9,0xbc94e33f,0xbcab34a8,0xbd012e2b,0xbd2cbc16,0xbd51388a,0xbd568eb9, -0xbceb7bbc,0x3cbb524f,0x3d32b3d7,0x3d492312,0x3d5c85fa,0x3d80f8ee,0x3d6d28eb,0x3d5d97bc,0x3d4f4f80,0x3d3e395e,0x3d272106,0x3d1de557,0x3d0aeddc,0x3d042b91,0x3ce4d786,0x3ca109fd,0x3c4089f7,0x3b83f838,0xbb9f10bf,0xbc7f6110,0xbccb0fc6,0xbcfcc69e,0xbd18dbf5,0xbd33a2f8,0xbd3a74db, -0xbd4064cc,0xbd478f2e,0xbd53537a,0xbd5d4a88,0xbd68807b,0xbd7355d7,0xbd81422a,0xbd8b5988,0xbd3e4c03,0xbcd25077,0xbc0a76b9,0x3c28f9a3,0x3c31c135,0x3c673725,0x3cd17552,0x3c8e8147,0x3cb532ef,0x3cc4c6ad,0x3cbf91b9,0x3cd9f614,0x3c9ed7a2,0x3c8997e1,0x3c617df4,0x3c01b8a2,0x3b5b33ca, -0xb9e5d10f,0x3aabad11,0x3ad07b56,0xb9b8aa3d,0xb8353f99,0x3b52249e,0x3b04460d,0xba4f0f22,0xbb88a040,0xbbf62579,0xbc36aadc,0xbc79a39c,0xbca1da5b,0xbc8806f6,0xbc694834,0xbc3dda33,0xbc14ca95,0xbbb04e61,0xbb886268,0xba19a4ef,0x3a41dda2,0x3b78e506,0x3bde44ad,0x3b261a4b,0x3ae4c632, -0x3c18a4a8,0x3c6a5e8f,0x3cbab85b,0x3bf2ff2b,0x3c76310f,0x3ccb18a1,0x3cbad868,0x3cae2f60,0x3c9ea61e,0x3c97e5c9,0x3c8e8284,0x3c7c672e,0x3c09a629,0x3b2c7efa,0x3c794f29,0x3c01e840,0x3b856a1e,0xbaaf3e81,0xbb215858,0xbb80dcb2,0xbbaf335c,0xbbe4bfd0,0xbc0804c4,0xbc2e6360,0xbc0fd4ee, -0xbc02865e,0xbbe7f37b,0xbbd0e335,0xbbbed697,0xbba6bfa9,0xbb672db4,0xbaefdcaa,0xb99f34fc,0x3a7e1397,0xbb2576df,0x3c27df18,0x3c270925,0x3c17902f,0x3c26fad7,0x3c2e1113,0x3c551fb7,0x3c0df1ab,0x3c123326,0x3c243606,0x3c2b184f,0x3c2d48a9,0x3c302a3b,0x3c3004c1,0x3c2b026c,0x3c17f3eb, -0x3c1290b4,0x3c141f9e,0x3c2e5012,0x3c32ce50,0x3c357919,0x3c3903be,0x3c2cbd11,0x3c236369,0x3c193073,0x3c182381,0x3c0ac4de,0x3bdcf6d9,0x3bdbf69d,0x3bdbe18b,0x3bd12756,0x3c08e0e3,0x3c131048,0x3c091223,0x3c1d0d3d,0x3c236838,0x3c199bad,0x3c27b37c,0x3c481fcb,0x3c3e0912,0x3c80daea, -0x3c78d9bb,0x3c930022,0x3c162906,0x3bdf1471,0x3c118ee3,0x3c34626b,0x3c578280,0x3c4dec64,0x3c5a9d10,0x3c3fdaf1,0x3c0675ff,0x3c118b7e,0x3c1c0b4e,0x3c5171c8,0x3c6a8254,0x3c8a9b01,0x3c8d7ab5,0x3c67545e,0x3c4b708b,0x3c26608e,0x3c211b6e,0x3bf61b6f,0x3b290e58,0x3ade1902,0x3ae1b414, -0x3adc5413,0x3c036424,0x3c2064d6,0x3bfce20b,0x3c220f08,0x3c1f0815,0x3c0cc857,0x3c32c934,0x3c7d7131,0x3c4552cf,0x3c855cb6,0x3c74e36d,0x3cc3a78f,0x3bebe42a,0x3bb11b84,0x3c2c1bba,0x3c4cdc93,0x3c694c6d,0x3c6b6bae,0x3c66d0a0,0x3c476721,0x3babdcdb,0x3c0a2a4d,0x3c21be0f,0x3c6d3710, -0x3c946f4f,0x3cada940,0x3cc5ebce,0x3c8c18dd,0x3c6c8fce,0x3c23cf61,0x3c241a8c,0x3b90afe6,0xbb9669ae,0xbba84104,0xbb8979d2,0xbb7e08cd,0x3bac89bb,0x3c176c0e,0x3bb98456,0x3c299d52,0x3c5470c5,0x3c39ffab,0x3c89e57f,0x3c96e74f,0x3c934acb,0x3cdf71e6,0x3d06e4c5,0x3d27b7ad,0x3c24b39a, -0xbb34453c,0x3c18e1db,0x3c40e4cd,0x3c9022f3,0x3cce79bc,0x3c5a6c55,0x3bd20406,0x3b9bb6a8,0x3c588e3e,0x3c64c17b,0x3c992a6e,0x3cdecdc5,0x3d0a6232,0x3d1a923a,0x3ccd75f2,0x3c950209,0x3c2d90ff,0x3c10903c,0x3a7c249c,0xbc7eb47a,0xbca26ddd,0xbc849378,0xbc494689,0x3bcc9fbf,0x3c1b5ef4, -0x3b8f2afd,0x3c1693fe,0x3bcae8b6,0x3b56aed3,0x3c48efee,0x3cb65f92,0x3bb8216d,0xbbf61de7,0xbcbb8907,0xbd056ee7,0x3b87f52e,0x3ce0783c,0x3d143229,0x3ceb0dc0,0x3c18bb5a,0xbbc5d319,0x3b754342,0x3c11d587,0x3c506fa6,0x3cb83b60,0x3ca95c18,0x3c9b5c67,0x3c6972e4,0x3c6c4d70,0x3c73bd15, -0x3bab3591,0x3bf2c5a7,0x3c3d7b18,0x3be3877e,0x3bf42642,0x3c00dd35,0x3d143889,0x3cfc28c5,0xbc870f33,0x3b7561f1,0x3bdbde7e,0x3b8c5ca4,0x3c23e313,0x3d0162a9,0x3d9600a0,0x3d35c4dd,0xbce77996,0x3ad1bac4,0x3ccc9c43,0x3ca94a75,0x3c2c342a,0x39075247,0xbc0d8ce0,0xbc2277ea,0x3afb4b47, -0x3c2d9b10,0x3c63423f,0x3bbe5c60,0x3b88dbe4,0x3c1323f7,0x3c0638c5,0x3c7c9302,0x3ca0888a,0x3ca22309,0x3ca1c088,0x3c52f51e,0x3c8f14be,0x3c7fedf3,0x3b07074e,0x3b961581,0x3bd176d8,0x3c154250,0x3c9d01f0,0x3c9786a8,0xbb077f31,0x3c2d0db6,0x3bef3812,0xbc176667,0xbc807656,0xbcdb0c94, -0xbd1db471,0xbd113983,0xbc5eeea1,0xbbd3e840,0xbba79e81,0xbbe38d57,0xbb33fe85,0xbc60fb48,0xbca9d584,0x3b899104,0xbb8a80b7,0xbbb97eb2,0x3a2bd7be,0x3babb214,0x3c05e62d,0x3b99b152,0x3bfd54e8,0x3c75d6b0,0x3c1360d9,0x3bbb4f45,0x3bf1bc77,0x3c05a05d,0x3cb7df67,0x3cc737f5,0x3c21dfdd, -0x3c75ebaf,0x3c1a0c17,0xbaa0fb1e,0xb9c58433,0x3b617829,0x3c1a4060,0x3cb3d514,0x3cfa1d69,0x3d008739,0x3c659cf5,0x3b41820a,0xbc0fb3ad,0xbc2db388,0x3b3b2a14,0xbc8ac65a,0xbbbf2ad8,0xbc0c6de3,0xbc75d864,0xbc7c95da,0xbbf4a314,0x3c54c33f,0x3b77156f,0x3c0aca6f,0x3c124e5e,0x3b4ace2a, -0x3b6f0f3d,0x3c23687b,0x3c41fdad,0x3c8813d2,0x3c8e4211,0x3ca2abfd,0x3c979fb5,0x3c21e018,0x3c89594d,0x3c9652a9,0x3c742fd3,0x3c8cd7fd,0x3c7141ea,0x3a88f1e6,0x3baeb96a,0x3ad687a5,0xbc38c8eb,0xbc89a274,0xbca6e0d3,0xbcd66a8f,0xbb118f75,0x3bfee91f,0xb9f64f84,0x3c17c371,0xbcbc6bea, -0xbd3b0619,0xbd71bebd,0xbd5dcb60,0xbd3508ce,0xbd369873,0xbd1eb90c,0xbcc8c6f0,0xbcca9f52,0xbcac2085,0xbc6f4415,0xbb7ff239,0x3b83f219,0x3c309d99,0x3c02fdc6,0x3c089bec,0x3c4909a6,0x3c2cf8d1,0x3c3da27d,0x3c038df5,0x3c823dba,0x3c7b960b,0x3c1071f9,0x3aa24b8e,0xbb1428ca,0xbaf5baa6, -0x3ae8d2bf,0x3a7958c3,0xbbcf01e7,0x3bae211e,0xbb3adb2b,0xbceba969,0xbd148742,0xbd23c931,0xbd2b5f9d,0xbcdd649a,0xbd7427d0,0xbd3e45a6,0xbce04a24,0xbc7739a8,0xbb901bd5,0x3c48a0ce,0x3c823ea2,0x3c4ce1bd,0x3c0204fc,0x3be59302,0x3be31a93,0x3c835d9c,0x3c886745,0x3c78e6c0,0x3c46e8fe, -0x3c25eeb1,0x3c329bfd,0x3af91d85,0xbabfb1f3,0x3a51a610,0x3c1a8765,0x3c38f91e,0x3c17c929,0xb9cafa0b,0xbbbda5ed,0xbc4027d9,0xbc57b08b,0xbc78dd38,0xbc83a156,0xbcab7494,0xbc369b22,0x3c4fa7e7,0x3b83d5ca,0xbc09967c,0xbcdaf85e,0xbd48e6cc,0xbc21250f,0x3b93bd76,0x3c838650,0x3ca10a50, -0x3cffe705,0x3ceec4cd,0x3cdd18f2,0x3ce39668,0x3cf16bf6,0x3ce9e049,0x3d000903,0x3cc1ef49,0x3cb5a396,0x3c83e530,0x3c4f223f,0x3bd52935,0x3b27f330,0xb94a878d,0xbb7b2fd4,0xbb8e0761,0xbc2a6a42,0xbc90caae,0xbcbe11bc,0xbcdb538c,0xbcf4fc57,0xbd0c9068,0xbd03c0cf,0xbd00cd75,0xbcef394a, -0xbd0eee5c,0xbd305666,0xbd584f0b,0xbd4aaa9a,0xbd32f6bc,0xbd1cb4ac,0xbcaf27db,0xbc0320ce,0xbb7b1d31,0x3b292030,0xbabfa91b,0x3afab544,0x3b0dd515,0x3b6b49a2,0x3bbe8c1f,0x3b589d14,0x3b03eeeb,0x3ade8d00,0xba17b52a,0xbac1a24f,0xbb2116d4,0xbb5c11ed,0xbbb53f1d,0xbc01edbc,0xbc243585, -0xbc1eecbc,0xbc8fd4a8,0xbca9aff8,0xbcb7dca8,0xbcce3297,0xbce6e5a5,0xbd00b80c,0xbd109bdc,0xbd0cd977,0xbd0c32b9,0xbd0a19c3,0xbd055af2,0xbcf27308,0xbce75569,0xbcb1359f,0xbc8f7f56,0xbc6bfc45,0xbc36ce9d,0xbc77f275,0xbc683cad,0xbc505ecd,0xbc2dee3f,0xbc049643,0xbc41c407,0xbc1a6480, -0xbbcd715f,0xbbeb2287,0xbbf63a84,0xbc0b4511,0xbc07476c,0xbc0f71a2,0xbc14d35d,0xbc440a5d,0xbc6f1b0d,0xbc31b684,0xbc70ec22,0xbc8786a6,0xbca4f245,0xbca61c74,0xbcb2ec6e,0xbcbd53e4,0xbcc79123,0xbccffa4c,0xbcdcde09,0xbcd462f6,0xbcd08a63,0xbccc9ed6,0xbcc90bf1,0xbcc78066,0xbcc8ac54, -0xbcbb58da,0xbcad5ce5,0xbc99b75e,0xbc8c7741,0xbcbaaee4,0x3c0b381d,0x3c0f76e1,0x3bf0221c,0x3c00fd10,0x3c038cc3,0x3c137615,0x3be7a623,0x3bf64a8d,0x3bfab850,0x3c133615,0x3c1a3cca,0x3c13bb06,0x3c223bc6,0x3c1ddefa,0x3bfd829b,0x3bf5a3ed,0x3bf19369,0x3c1c3be6,0x3c0ea81d,0x3c09f4bb, -0x3bfb793e,0x3c01e3a2,0x3bff2f91,0x3bfdef67,0x3c031249,0x3c00c35c,0x3bf06ef6,0x3be85098,0x3be59400,0x3bf23ccb,0x3be5cdce,0x3bea3ee8,0x3bf41adf,0x3bfbe384,0x3bfc7575,0x3be07eb9,0x3c0c035d,0x3c143fa0,0x3bf77142,0x3c2e4a95,0x3c1b5e62,0x3c255f3e,0x3bdda174,0x3bc00799,0x3bb03f2d, -0x3c16ddad,0x3c3a403a,0x3c2aa64c,0x3c5ed59d,0x3c438bf2,0x3be15ea5,0x3be678d4,0x3bf5b6b7,0x3c41ffa6,0x3c2f43c6,0x3c474b9a,0x3c205999,0x3c10a40f,0x3c0c3213,0x3c077fac,0x3c16edbc,0x3c10acef,0x3be23c0c,0x3bd46010,0x3bd35c5f,0x3c07f1ec,0x3bffec90,0x3bed02d3,0x3bf24f37,0x3bd758b6, -0x3bcde5da,0x3b9d949e,0x3c089bbe,0x3c615caa,0x3bf876cb,0x3c18729e,0x3bf15a05,0x3c2f18b2,0x3b9c4e5c,0x3b9d42fb,0x3bae37a9,0x3c35d377,0x3c623e57,0x3c3c5280,0x3c88bbac,0x3c79e6c1,0x3b8a72b4,0x3bd728b8,0x3be7750d,0x3c725ccc,0x3c485fff,0x3c5956c9,0x3c3bfbe6,0x3c1275d8,0x3c171525, -0x3c031853,0x3c24b1e9,0x3c0fda74,0x3bb54206,0x3bb0d0dd,0x3bac3263,0x3c10f222,0x3bb26659,0x3bc2e1b9,0x3bef9c15,0x3bee2af5,0x3beb8e78,0x3b7c2e9f,0x3c5714df,0x3c1b83e9,0x3bef30d1,0x3c6759f4,0x3c907deb,0x3ca1d796,0x3bbe256a,0xb919ca59,0x3add1ead,0x3c1edcfe,0x3c88fe4c,0x3c915ae2, -0x3c937d5c,0x3c3421b1,0xba81aefe,0x3c09eea2,0x3c2a646f,0x3ca61ac9,0x3c9ba1b1,0x3cb58873,0x3c92cb93,0x3c382de2,0x3c190182,0x3be6a5ca,0x3c253251,0x3c159d36,0x3abe91a6,0x3ac01091,0x3b673096,0x3c5763da,0x3c3fbaec,0x3bcec3c3,0x3bcfde46,0x3ae0c759,0xba492421,0xbb9a5c6e,0x3bf059f1, -0x3d0674bf,0x3c6fd62c,0xbbb299d7,0xbcb9cd05,0xbcf1a284,0xbb8e0959,0x3c543a74,0x3cbf5098,0x3d1204ef,0x3cae8351,0xbae90393,0x3a4babdc,0x3bcc81a3,0x3ca20c54,0x3ca58a78,0x3c863218,0x3c6e5b2b,0x3bd96c55,0x3b4e5997,0x3a2f2f37,0x3bb26a49,0x3c34f6f8,0x3c748d88,0x3c5df03b,0x3c61d263, -0x3c6ad351,0x3cf96d32,0x3ca51ac1,0xbc61bc54,0xbc6a018e,0xbbf16e46,0x3c928835,0x3c8fa843,0x3cd7d3fe,0x3d424c96,0x3d1e60bb,0xbcfa56a4,0xbd67f0c6,0x3d1a1650,0x3d56ad85,0xb8f0098b,0x3c7146ef,0x3bd1d426,0xbc1857a1,0x3ab82c53,0x3c2c7cfe,0x3ca54880,0x3c22e933,0x3bbe3366,0x3c23d35d, -0x3c678409,0x3cad7d2d,0x3c74d787,0x3c6f8208,0x3c64fe2f,0x3bf9d681,0x3c9d823a,0x3c8f2c98,0x3bdeb213,0x3c046543,0x3c3d2ab7,0x3c8b4ff9,0x3c895859,0x3c3a08ef,0xbc4f7440,0x3c9850de,0x3ba011c9,0xbd5393fe,0xbce566c6,0xbca6e3b1,0xbcce9195,0xbcb4c24f,0xbbabe8ed,0xbc535fa9,0xbc5188ab, -0xbc1f09dc,0x3c0befb7,0x3ba0ceb1,0xbb9d92ce,0x3c03d103,0x3b79165a,0xba4c701b,0x3b82cdae,0x3b6bc4b8,0x3bcec227,0x3be95171,0x3b2d86f0,0x3bbf4357,0xba2ff3f0,0xbb0c19e5,0x398aeb61,0x387267fe,0x3c3b05ab,0x3c554828,0x3bbc9192,0x3ba86f3d,0xb8d3e4d5,0xbb3a4555,0x3bddf581,0x3c833541, -0x3c11ad90,0x3cbc99cb,0x3cdef1f6,0x3cc409e3,0x3c2ce0d7,0x3a7ba94f,0x3c3da5a2,0xb8e91adf,0x3b06531d,0x3b13620b,0x3c007467,0x3c2e4442,0xbb116e55,0xbaf9f43e,0xbb5a2a7f,0x39f7e797,0x38a55541,0x3b68e44b,0x3bc3d3ea,0x3b2aa8ed,0x3b758a5b,0x3bf66f86,0x3c2798c3,0x3c7108fa,0x3c29a2d2, -0x3c2a2546,0x3c4104d5,0x3be9bbcc,0x3c2d62bc,0x3c508dd9,0x3c52814e,0x3c203b1d,0x3bfba29c,0x3bbfe783,0x3ba8b866,0xbbd46c41,0xbcf29fca,0xbca5c4a5,0xbc8d3a2e,0xbc34128b,0x3b1f4b60,0x3c3742ed,0x3c8fdbc8,0x3b607abc,0xbbc106be,0xbc2f2a76,0xbce5fc43,0xbd2dc198,0xbd593d6b,0xbd174897, -0xbcd9d2a6,0xbca75db8,0xbc6bd938,0xbc4444ea,0xbc3843f7,0xbc154aaf,0xbaff5370,0x3c3822b0,0x3be0ce0d,0x3be9f2d3,0x3bc8834f,0x3c41d316,0x3c437d43,0x3b4bc1a5,0x3c13a44d,0x3c59753e,0x3c876467,0x3c5ca125,0x3c156de6,0x3b336f33,0x3a586d59,0xbb5f319a,0xbc25a15d,0xbc0b862e,0xbc01d213, -0xbc124708,0xbc91196e,0xbca49faa,0xbc6a7b75,0xbbeb9eb3,0xbd407ce2,0xbd5a981b,0xbd587194,0xbd204eb4,0xbca7a5ff,0xbc14c730,0xbc0f74ec,0xbc9a0abe,0xbc93ea72,0xbc6cd255,0xbbebce07,0x3b77e562,0x3c132180,0x3c2701a7,0x3baf23c7,0x3b85a346,0x3b792dbb,0x3bbe2268,0x3bf4dd01,0x3bf6ae2f, -0x3c5e354e,0x3c5bc431,0x3c140a18,0x3bedb786,0x3b4087ee,0xb91c2503,0xbbaa451e,0xbbe71244,0xbb8deece,0xbc3c29e9,0xbc8acc01,0xbcaa04fa,0xbc061d51,0xbbf16509,0xbcaa2b3c,0xbd10f061,0xbce039cd,0xbce30f1b,0xbc99ac2e,0xbc852f4e,0xbc225d0e,0xbc05f785,0xbba03178,0xb9d55b74,0x3bdaf95d, -0x3c280d2b,0x3c8edf5e,0x3c3c1d93,0x3c3106bc,0x3c0f9f6f,0x3bbf8123,0x3b308740,0xb9b0b852,0xbb45a19c,0xbba84299,0xbc095e4c,0xbbcc7f58,0xbb808bf8,0xba9fc9d8,0xbb7c6f4b,0xbbdde3d6,0xbc251100,0xbc27e590,0xbc36f97d,0xbc3cd0b3,0xbc2a69b3,0xbbfa3fca,0xbbe2c2ba,0xbc68b5f3,0xbcad30ea, -0xbcd097bc,0xbcd4e40d,0xbc421795,0xbc0f12ac,0xbb94a42d,0xbb9a4bcb,0xbadbe5e4,0xba105f1d,0x3a5f302c,0x3b35f97b,0x3a24571a,0xba5e2151,0xbaa3de59,0xbaf7621b,0xbaf75245,0xbb0693d9,0xbbafbc64,0xbbf50a99,0xbc21e57a,0xbc45ec7a,0xbc88c649,0xbc7f0025,0xbc8fe3b3,0xbcaaaa19,0xbcbd8a5c, -0xbcd42d3a,0xbce22702,0xbcf479a3,0xbce90f77,0xbce66145,0xbcea8757,0xbcee0a4c,0xbcf9ce5d,0xbcfad1c9,0xbcda8655,0xbcb3f922,0xbc97fc0b,0xbc784579,0xbc883aed,0xbc7d3ae7,0xbc842834,0xbc7e80db,0xbc7b5f20,0xbc677147,0xbc63af4c,0xbc51e433,0xbc5cd7d2,0xbc5e92b5,0xbc6d53f4,0xbc6e61c3, -0xbc79adf2,0xbc7d9ab6,0xbc80e7b9,0xbc79d745,0xbc979385,0xbc93a9c0,0xbc93a3c8,0xbc856542,0xbc933f1c,0xbc988acb,0xbc9fcc04,0xbca425e0,0xbca9e533,0xbcb30e57,0xbcb37237,0xbcb4acd4,0xbcb2cd90,0xbcb20c9b,0xbcafe404,0xbcb5fa70,0xbca989c1,0xbca3691b,0xbc9a626b,0xbc922b35,0xbcb29d41, -0x3bc52a59,0x3bc34434,0x3bad44ac,0x3bbda9ba,0x3bc14bd6,0x3bd2a2fa,0x3bb51545,0x3bc9f4eb,0x3bca04bc,0x3beb9f8a,0x3bfbf344,0x3bf5a9fd,0x3c10bf35,0x3c0dec53,0x3bdbc99e,0x3bc889ed,0x3bac43f3,0x3bf4b8e2,0x3bca7032,0x3bbf3fac,0x3b9ed2a1,0x3bab14e7,0x3baec79e,0x3bc00090,0x3bbee394, -0x3bbd02dd,0x3bb2554a,0x3ba36ae6,0x3ba4702d,0x3bd76570,0x3ba88034,0x3ba3e994,0x3bb709ae,0x3b9c6691,0x3b93fbdc,0x3b76884f,0x3bb1e21b,0x3ba36b97,0x3b781259,0x3ba67b21,0x3ba513aa,0x3bc91194,0x3bbe97f4,0x3bb3b47d,0x3b8d6e4c,0x3be8fe4e,0x3c0d6fc9,0x3c0b9e5b,0x3c4a2068,0x3c3851b4, -0x3bd56710,0x3bbeb256,0x3bb3b867,0x3c04aa71,0x3be22c33,0x3be535b4,0x3b98224a,0x3b994b33,0x3ba8df4b,0x3bd64bfc,0x3bd61d96,0x3bc06131,0x3b9e8389,0x3b72b499,0x3b9982a4,0x3c1fa4c2,0x3bd0d0c7,0x3baf7c97,0x3bc39fb1,0x3b1f1058,0x3ab4bc86,0x39d35ede,0x3b8cfd2b,0x3c0fa825,0x3bc17ce7, -0x3bad870f,0x3b838d00,0x3ba15684,0x3b9a7d5b,0x3bc92674,0x3bac31b4,0x3c1c5d77,0x3c4a9787,0x3c3428dd,0x3c94fd4d,0x3c8ce682,0x3bdbf7c1,0x3bd84256,0x3ba91836,0x3c2258af,0x3bee0b6f,0x3bd40438,0x3b6ecba0,0x3b693387,0x3ba21378,0x3bf661bb,0x3bffa328,0x3bf61f7a,0x3bae6bb1,0x3b59cfc2, -0x3b4d8172,0x3c569790,0x3b9f6f7f,0x3b8bc2d2,0x3be77cc7,0x3a89f591,0xba1361da,0xbb759bbf,0x3ba9a5f6,0x3b56f9c6,0x3aaae89c,0x3ae07d54,0x3bc7bc4d,0x3c1eeb58,0x3ba451d5,0x3b6577b2,0x3a4801b2,0x3bff29c1,0x3c4974ac,0x3c35a8ad,0x3cad2d08,0x3c7f16fb,0x380e473f,0x3bbec766,0x3c138921, -0x3c9a953d,0x3c349ccd,0x3c02967b,0x3af4e6fd,0x3a3abfa7,0x3b306b4b,0x3be07547,0x3bf99e27,0x3b9fe933,0x39f70e16,0xba771e4b,0x3ba239ee,0x3cbe32ad,0x3c3dee48,0x3bcc75ea,0x3be4d952,0xbbeb4889,0xbc3fb88e,0xbc5d0a54,0x393f9538,0x3cc402a5,0x3c9e56fe,0x3b392472,0xbc6a86af,0xbce807d9, -0xbb9ee8f7,0x3c058a31,0x3c24f44a,0x3d0830d8,0x3cf3d731,0x3c170089,0x3a89a947,0x3bb0e4f1,0x3cb9ff0b,0x3c6b7bb4,0x3c264483,0x3c288a2e,0x3b8906bd,0x3b324526,0x3b9c3869,0x3c323689,0x3c54a850,0x3c80ca5d,0x3c6eee44,0x3c98ea22,0x3cf58707,0x3c2dc4f1,0xbc024e71,0xbcb68053,0xbc9a7730, -0xbbcaa289,0x3c85c7dd,0x3ccecb83,0x3ce003ee,0x3cc89753,0x3caa29d2,0xbc6c0259,0xbd8712a6,0x3c9cd56f,0x3d314744,0xbaa947c6,0x3c756b1c,0x3c2e7beb,0x3b39ab79,0x3b216a9e,0x3bda21a4,0x3cac5a4a,0x3c7bd539,0x3c37db48,0x3c20ef2d,0x3c90dedb,0x3caf5c4a,0x3c074555,0x3c104cca,0x3c195a92, -0x3c091da0,0x3c549c9c,0x3c6fb6bb,0x3c905aa5,0x3c8d6b7a,0x3c908346,0x3c8c5f5b,0x3c3b2e34,0x3bfe9d4f,0xbac72f67,0x3cd1fc16,0x3c6eae43,0xbcc3b3a0,0xbc92411e,0xbc7947ae,0xbc48d416,0xbb126b34,0x3c3f01fc,0xbc7a45e8,0xbc7ef688,0xbc474939,0x3b3d2663,0x3c76f113,0x3c37af16,0x3b77945a, -0x3bf3a4dd,0x3ba71bae,0x3bbd3d20,0x3b93d388,0x3be748ce,0x3c17138a,0x3a31a9d6,0xbb5ce8fa,0xbc0176a3,0xbbca3746,0xbb8edc3e,0xbbbc7280,0xba864c30,0x3b5d07bb,0x3c2c9a39,0xbb869699,0xbc092b04,0xbb7c37b2,0x3bffc0eb,0x3c867ff6,0x3c3352cb,0x3cb2fb33,0x3c85bb94,0x3b80c053,0x3b14338d, -0x3b8fe372,0x3cbcdd01,0x3c9480b4,0x3c4add01,0x3c9765e5,0x3c853bcb,0x3c393e0a,0xba98ee71,0x3a47cd3f,0xbb2078bd,0xbbd66134,0xba57bbe0,0x3aa04748,0x3b6df54d,0x3b765731,0x3b948916,0x3b935a1e,0x3bec0b34,0x3c103639,0x3b395e85,0x3aff229c,0x3b398634,0x3bbbf681,0x3c11345d,0x3c192291, -0x3c3a692e,0x3b7ced87,0x3962cc1b,0x3b05563f,0xbacdb7f7,0xbc133825,0xbca92800,0xbc15ce32,0xbbc88303,0xbb031c5b,0x3ba28495,0x3c3097b0,0x3c8a8dda,0x3c39ef0a,0xbc30d200,0xbc980828,0xbcd77521,0xbd172232,0xbd528831,0xbd2f1c80,0xbd03bcc7,0xbca34b33,0xbc24957c,0xbba66b94,0xbb8bb9df, -0xbbd35ad7,0xbb3e4581,0x3b8211a0,0x3b8312a3,0x3b974009,0xb2cdc66b,0x3b9c1086,0x3bbbf909,0x3ba1b346,0x39bf0c4c,0x3b03fef8,0x3c328668,0x3c214fbb,0x3bf46ab1,0x39b313fb,0xbb283957,0xbbe1b6f0,0xbc1cbeda,0xbc9f40db,0xbc9878ed,0xbb49b5c6,0xbba867fa,0xbbb55f72,0xbb86ef9c,0xbbc35873, -0xbcd7a45c,0xbcfe3197,0xbd07c10c,0xbcd2155b,0xbc3ae992,0xbc87ed85,0xbcab28bd,0xbcce683d,0xbccc5a61,0xbcb4b9c2,0xbc81feb8,0xbc58eef9,0xbbe530f3,0x3b815ee4,0x3b2eafe7,0x3b944b1f,0x3b86709a,0x3c17b22b,0x3c219b97,0x3c153a29,0x3bed7769,0x3c01f397,0x3c613104,0x3bdfdfd8,0x3b75fd3e, -0xbb2c185c,0xbb8fd85c,0xbbddeb63,0xbc18f1f3,0xbc229d98,0xbc90b189,0xbcf591ac,0xbd173d1d,0xbd10a864,0xbcdc5638,0xbcdb721f,0xbd128bd3,0xbd298435,0xbd1588b4,0xbd0edda8,0xbd01a254,0xbcd286fa,0xbc93cb7d,0xbc3a88e1,0xbbbc65d0,0xbb1da3b3,0x3b5d085f,0x3b4edd1b,0x3bc66b36,0x3bfe47cc, -0x3b7cc7af,0x3aa7145b,0xbaf15242,0xba27412a,0xb9484d68,0x3b6ac2a0,0x3c154a68,0x3c443551,0x3c8a3348,0x3c55c2ba,0x3c275bcb,0x3be52703,0x3b97afdc,0x3b001e02,0xbaebef5f,0xba43a41a,0x3a8b732f,0x3b720912,0xbb855397,0xbc615834,0xbcbe356f,0xbcf8db0c,0xbc62b42b,0xbc5bf541,0xbc239c43, -0xbc039bb9,0xbbbaf83b,0xbb9d20a3,0xbb81a3ea,0xbafd786f,0xbb11ff3e,0xbaeadf7f,0xba7510cc,0x3a1b4cf2,0x3b0a8688,0x3b8d2fd1,0x3aa7b643,0xb8bbdf17,0xba8ae042,0xbb2d8682,0xbbd84d21,0xbbc786e4,0xbbdf8664,0xbbfd9318,0xbc047e67,0xbc077faa,0xbc011387,0xbbf00a47,0xbc0e52bf,0xbc24f82e, -0xbc3dcdd1,0xbc601665,0xbc88b552,0xbc9b94fc,0xbc9d7962,0xbc8f7446,0xbc84a0d5,0xbc70136e,0xbbf8a874,0xbbf74213,0xbc0e6f68,0xbc1a8eb9,0xbc33656e,0xbbd8b6a2,0xbc00b143,0xbc0fcd32,0xbc054053,0xbbf5dacb,0xbbf2f615,0xbbea4aea,0xbbf29560,0xbbe98d3a,0xbbaf9db8,0xbb6a18f9,0xbc1faa45, -0xbbefe8d6,0xbbcd418f,0xbb8f4e1e,0xbb9d79a3,0xbb94bdd1,0xbb96a401,0xbb8c1bd5,0xbb8a0761,0xbb8269a2,0xbb9e5473,0xbbb06c51,0xbbc203ff,0xbbd2a935,0xbbdc9b12,0xbbf7e74e,0xbbe4be7b,0xbbeb8fd7,0xbbf1069c,0xbbfa1758,0xbb801b6d,0x3b3f882f,0x3b40f432,0x3b8acfec,0x3b84b6fc,0x3b8277a8, -0x3b88d613,0x3b701d93,0x3b8c3e82,0x3b8a06f5,0x3ba63c79,0x3bb20c24,0x3bb30078,0x3bd6d6b1,0x3bd2ffd1,0x3badba2a,0x3b76bef4,0x3b1b6a8d,0x3b6e0648,0x3b51f07b,0x3b55070a,0x3b2c3c0e,0x3b487e55,0x3b4643c5,0x3b51e2a2,0x3b163736,0x3ad063d1,0x39beee2f,0x39d13877,0x3a72018e,0x3b6e8b4b, -0x3b148ddd,0x3b131792,0x3b369c30,0x3ad4b8f5,0x3aa081ea,0x3a26f5c4,0x3b0297d6,0x3b081dcb,0x3b8c684e,0x3b377756,0x3b6acdba,0x3b8a3404,0x3bc0d63b,0x3bb11801,0x3b58e4d2,0x3bb19511,0x3bd96271,0x3be6f826,0x3c23016b,0x3c19a05e,0x3bd5e305,0x3b81e29d,0x3b130766,0x3ae94d96,0x3b37e92d, -0x3b6e61f7,0x3b2f1b8c,0x3b76118c,0x3b798849,0x3b70de11,0x3a674613,0xbaf9f17e,0xbb8bc44a,0xbb9caae3,0xbb04f8ac,0x3bbe6274,0x3b3de5d6,0x3b298957,0x3b2691f8,0xbab919fc,0xbb377807,0xbb3bcde1,0x39964390,0x3bae2c48,0x3c2e6aa8,0x3bee119c,0x3bc6b75e,0x3b8e6c8b,0x3bdf6a37,0x3c0c8caf, -0x3bb5796f,0x3c2057eb,0x3c446840,0x3c457070,0x3c93936b,0x3c8b729b,0x3c252cae,0x3bc1be6f,0x3af6ca95,0x3a0c36cd,0x3b532c46,0x3b8826c3,0x3b4602e1,0x3b98543a,0x3ba0d000,0x3bafe1f6,0x3a237c57,0xbb5e489a,0xbc1519bb,0xbc227f9d,0xbbe5f1b8,0x3c02f4a5,0x3ac2e50c,0x3aef5292,0x3b78bf23, -0xbb773a25,0xbbc3050b,0xbbe83baf,0xba4a8cb2,0x3b3b83c0,0x3be95454,0x389d46a9,0x3b881329,0x3bf238c5,0x3c2cf319,0x3c1932e6,0x3b6d335e,0x3c1a837e,0x3c3ce07d,0x3c438d3b,0x3cc19da0,0x3ca4806c,0x3c010661,0x3be0a0ce,0x3bbfd701,0x3bdd2030,0x3b7c2b3c,0x3b36785a,0x3a046f62,0x3b7273ac, -0x3b9acaa0,0x3b9f439b,0xbb71d8d5,0xbc68687e,0xbcab373b,0xbca79879,0xbc019181,0x3c848c13,0x3bb809dd,0x3b7ea626,0x3b3a085a,0xbc56e58a,0xbc98b553,0xbc6c1083,0xbb6f53c6,0x3c1aa1e6,0x3cdfe640,0x3cc8e7e2,0x3c2252e4,0xbc8dd9aa,0xbbd97c83,0x3b79a81b,0x3bf353ec,0x3cc7f88e,0x3cf94ccc, -0x3cb87662,0x3bb72b85,0x3ba2a46f,0x3c98f241,0x3c0bc92a,0x3bdd22a6,0x3c1fc503,0x3c28fe0c,0x3c3e0335,0x3c3e1ca0,0x3c54ff7e,0x3c5cf51c,0x3c86ff4e,0x3c96a033,0x3cba106c,0x3d0683c7,0xbbd10d71,0xbccfbdb5,0xbcce940b,0xbc5a773e,0x3ac94174,0x3ba9a6d8,0x3cfe9183,0x3cfc559d,0x3c08df7c, -0x3b0f1b6c,0x3b6f402e,0xbd4b87c7,0xbd102396,0xbc086a15,0x3c92a0e9,0x3c509d6f,0x3c3573cd,0x3c776c64,0x3bbd8b7a,0x3b958a82,0x3c93a317,0x3ca9521a,0x3c8d1010,0x3c0e2f46,0x3c73f2c9,0x3c651ac5,0x3bb7c376,0x3b5fda47,0x3b59716c,0x3be0ae08,0x3bbd5a60,0x3c276ee0,0x3cad5d9f,0x3cae2862, -0x3c97cfa3,0x3c661f56,0x3bb3fefa,0x3ba0d115,0x3c368129,0x3c8b734b,0x3c0d18fc,0xbc534f07,0xbbb7dc25,0xbb9a56d5,0xbc21b056,0x3c77cf88,0x3ce24892,0x3c150631,0x3c023540,0x3c04ff98,0x3c1efb29,0x3c875c6f,0x3c4df722,0xba93ed4a,0x3bcb6a65,0x3bf40d88,0x3bb40412,0x3ba5b676,0x3bdcf893, -0x3c37b32c,0x3adbbded,0xbbc0d417,0xbb4d3e18,0xbb8e367c,0xbbb9fb1c,0xbb976dba,0xbbc50df4,0xbb073717,0x3c15f32f,0xbb78366c,0xbb80a472,0x3ad649f4,0x3bef4024,0x3c126434,0x3c69145b,0xb9bc6b7a,0xbc1fa275,0xbc398aab,0xbc2f6d9f,0x3af20464,0x3c9dad51,0x3cd4e9a9,0x3c2b891d,0x3c2ccdf2, -0x3b8d984a,0xbad6145d,0xbc165abd,0xbba37f41,0xbbbcc06a,0xbbe40910,0x3b4f8785,0x3bacd86f,0x3b5a3628,0x3c0424cf,0x3bf81cf4,0x3b528aaa,0x3ae3685c,0x3abfdc4a,0x3b057f98,0xbada431b,0x3a2d4f93,0x3bffca31,0x3c34a2c5,0x3c34ccca,0x3c321996,0x3b03f8ba,0xbb0537cd,0xbba25a4e,0xbc12eb43, -0xbc114fc2,0x3b0bb757,0xb9815729,0x3bf24533,0x3cc0ca7b,0x3ca87a9f,0x3c875bb6,0x3c3f6de7,0x3c47d297,0xbc51a12c,0xbc52d433,0xbcca9482,0xbcff7475,0xbd032458,0xbd161843,0xbcf9a101,0xbcab1297,0xbc4e3db7,0xbbbd7def,0xbb63972c,0xbb5d9c91,0xbb625b24,0xbbbfd891,0x39230864,0x3b125506, -0x3a0aacbe,0x38101cf9,0x39b7bf5b,0x3b48ddf9,0xbac32a27,0xbad5d61c,0x38fdbc51,0x3b4b57c9,0x3b75cf12,0x3a9f1705,0xbb312ba9,0xbbec19f2,0xbbf432be,0xbc9d865f,0xbcb9e2b9,0xbc8fb42e,0xbbf0e548,0x3a73d909,0x3baffdf3,0xbbd302be,0xbc8e5547,0xbc902771,0xbc90f895,0xbc892870,0xbc703c5b, -0xbcbc593c,0xbce73ae0,0xbcec7cb6,0xbcd47dc0,0xbcbc8dcd,0xbca4629e,0xbcab6f74,0xbc8378e9,0xbbcc79f9,0x3a23cd45,0x3b9d7df6,0x3ba64057,0x3bdef79d,0x3bec73bb,0x3be3d143,0x3b2d2d34,0x3af9a6b3,0x3b2c2124,0x3bc7552e,0x3b8cc8c6,0xb7be22f9,0xbb7d1d4c,0xbbdeba3d,0xbc16277b,0xbc380597, -0xbc57f194,0xbc8d3b61,0xbcafafc4,0xbcd57ef7,0xbcead215,0xbcb34536,0xbcdee2b8,0xbcf2c867,0xbceef94a,0xbcd988ad,0xbcca8ade,0xbca352b8,0xbc655055,0xbc0ea109,0xbc0f2254,0xbc3309ea,0xbc1cb0e9,0xbbedc45f,0xb9d91655,0x3b029a7c,0x3b1f1781,0x3b407b90,0x3bac8add,0x3bc86259,0x3bf31f29, -0x3c0a9502,0x3c055472,0x3c0ac35a,0x3c06360a,0x3c144b6e,0x3c28b2c8,0x3c533edf,0x3bef9f89,0x3ad7b738,0xbba1e44e,0xbc048e57,0xbc3c993e,0xbc65e788,0xbc926dcd,0xbcacb222,0xbcd11fc0,0xbcdaa7d3,0xbc8e5b54,0xbca46b1e,0xbc8d1730,0xbc814d99,0xbc61c14c,0xbc48bbc0,0xbc423187,0xbc23ffe4, -0xbc1b9a3b,0xbbf7c082,0xbbb7869d,0xbb965402,0xbb632faf,0xba805e9e,0xba055571,0x399c9208,0x39f18fb4,0x3a4c47a7,0xb811252c,0x3b6e4429,0x3b8a6b6b,0x3b8bb042,0x3b97cd53,0x3baf8849,0x3bba2d5e,0x3bdab5ad,0x3b8994f2,0x3b480341,0x3ae36438,0x395d35d8,0xbad327f9,0xbb5e0560,0xbbda3b6d, -0xbc1be86b,0xbc42528c,0xbc715939,0xbbb507c4,0xbbeded8b,0xbba9afa3,0xbb9bc020,0xbb72c65d,0xbb96bc81,0xbb5ea107,0xbb005719,0xba70a767,0xb7bf4ca7,0x3a001f7d,0x3aaeb1ad,0x3add7e24,0x3b0d9009,0x3a47fde4,0x3a3e9242,0x3a5e888c,0x3aa87a30,0x3abcb070,0x3b21f856,0x3b0b34d8,0x3b2306c5, -0x3b31d47c,0x3b3662cf,0x3b3824a7,0x3b502ee8,0x3b18a250,0x3ad0b2a2,0x3a47273d,0xb8a60ffe,0xba5cd156,0xbab970e4,0xbb0d3f98,0xbb3e3a9d,0xbb7aa308,0xbb99fc4d,0x3a20d630,0xb8f7bb9f,0x3997f5bc,0x3b272a61,0x3b0bb904,0x3b04dccd,0x3ad94000,0x3ab1104b,0x3b01a5a9,0x3ab82ccb,0x3b33c52e, -0x3b46ba3e,0x3b3cb823,0x3b7491e5,0x3b6a0beb,0x3b4e0234,0x3a4ae6bc,0xba0a0545,0xb63aa3ee,0x39718859,0x39de7491,0x3996cea1,0x3a7f9d69,0x3a3c9156,0x393749fb,0xbab1eb23,0xbb1bb1c9,0xbb719f29,0xbb3c9ad2,0xbb0dd0ff,0xb8c8162b,0xba5fd337,0xba3264f4,0x39bf4fe6,0xbac63c4a,0xbafbe28a, -0xbaed334c,0xba78e3ec,0xb9bd9207,0x3b87223a,0x3b384d0b,0x3b1b6532,0x3ad660c9,0x3ba5a5d1,0x3b957e79,0x3a5397f8,0x3b74b749,0x3b9f3fed,0x3bab62f8,0x3be09c04,0x3bd0ab9e,0x3bafb13a,0x3a6f3e31,0xbac9ae9f,0xbb3a48d6,0xbaa05607,0x3a53ed62,0x3a79e8c2,0x3b3d82a6,0x3b146646,0xb9509a6b, -0xbb9ad757,0xbc003b05,0xbc1d863a,0xbc000a11,0xbb9af540,0x39c4678a,0xba85df2e,0xba8ee410,0x387c5ea2,0xbba04637,0xbbc66571,0xbb9ba29b,0xbb356e8c,0x3b255ba7,0x3c69614c,0x3c24eeb5,0x3bf7d141,0x3b5a01d5,0x3bfc1b98,0x3c150634,0x3b45b01a,0x3c1fa409,0x3c3a7bf3,0x3c3780c0,0x3c75937a, -0x3c654694,0x3c21dff6,0x3b2e047c,0xbb1e451f,0xbba9fb7d,0xba9f4e6d,0x3ac0fb8f,0x3b31629c,0x3bcabd12,0x3ba2d7ad,0x3a5f33a3,0xbbf0967f,0xbc5717c1,0xbc94301f,0xbc72b10f,0xbc2ce8a0,0xba03549b,0xbb48ce33,0xbb251e92,0x3b158160,0xbc0ef191,0xbc2b39b1,0xbbfc8181,0xbb92d9f2,0x3ac4d423, -0x3c662452,0x3bb528ff,0x3bb2db5b,0x3bb20587,0x3c869525,0x3c6e6274,0x3b932fe8,0x3c378737,0x3c4df5ad,0x3c6c993c,0x3cd41070,0x3cc0420c,0x3c588290,0x3bc31755,0xb9f99652,0xbbb723ca,0xbb4da6b8,0x3a30a6c4,0x3b17b3c7,0x3c0b6f60,0x3be1c08c,0xba7f8835,0xbc7b7b28,0xbcd72509,0xbcef7ed6, -0xbcb73190,0xbc149041,0x3ba9e844,0xba7f6591,0xbaed6d08,0x3b00d367,0xbc88ed3f,0xbca9d550,0xbc420cc5,0xbbca3fba,0x3bc1156c,0x3cf82a94,0x3d23a82a,0x3ce2d629,0xbb5b5dce,0xbc5670ad,0xbbd6fa28,0x3bdaf49d,0x3c53bb09,0x3cc5e31e,0x3d101469,0x3c1c7d14,0x3b0ff649,0x3c4c37ec,0x3b92890a, -0x3bde5975,0x3c4b00b4,0x3c71f327,0x3c7fb8ee,0x3c43bab2,0x3c2d4acd,0x3c39d46b,0x3c561489,0x3c84dcf2,0x3c7b618b,0x3c2a731b,0xbca164e1,0xbd0da4c8,0xbd13b45d,0xbc3c215c,0x3b44aada,0xbc1a328b,0x3cadd9ae,0x3ca32174,0xbc2852c8,0xbb993307,0xbb572bfc,0xbd0595db,0xbd919dd4,0xbd3f3c9b, -0x3d172ef7,0x3c8a78f9,0x3c2a8741,0x3c5f1744,0x3c01f82e,0x3bd0ad60,0x3c5406f9,0x3cb413c8,0x3ca18d97,0x3be34330,0x3c079013,0x3bb639ee,0x3b9df6bd,0x3b229ea0,0x3b17b8c2,0x3bae6b94,0x3a625724,0x3bb5c7fb,0x3c84faa8,0x3c9b665b,0x3c6c1a06,0x3bcd9345,0x3acb6098,0x3bb62af1,0x3cab75a5, -0xbac108a2,0xbc3c6aef,0xbc84e9fd,0x3b5cb264,0x3c182701,0x3a5214ef,0x3c3ed3e7,0x3d1ec5e8,0x3d2b0b6e,0x3d1f2b2d,0x3d00ffad,0x3c8dd820,0x3c7c1637,0x3c57df7a,0x3b181bfc,0x3c070c31,0x3c182516,0x3b8e00d0,0x3baa5ec3,0x3bcbe611,0x3c281c94,0x3b772575,0xbb39d039,0x3aa3040d,0xba8a2de5, -0xbb40fbe9,0xbb65761b,0xbbcba778,0xbb84a728,0xb986e1aa,0x3ade8338,0x3bdbc52a,0x3c15914a,0x3be59edc,0x3a17595e,0x3bf90fdc,0xbc9450f1,0xbcc0c296,0xbc4e0938,0xbb759c7b,0x3c36d0d0,0x3ca821b5,0x3cf30531,0xba76d12b,0xbc24d807,0xbc5dfadf,0xbc3b7f04,0xbbff618a,0xbb20e08c,0xbb7ac7f0, -0xbb6b3b78,0x3b665bde,0x3bd90586,0x3ba83fe1,0x3c18d9c0,0x3bdeb97c,0xb9fbb039,0xbad8093c,0xbb08cd30,0x3981816b,0xba95fedd,0x3a88b9b3,0x3be069ac,0x3c0c8f30,0x3c237070,0x3c1d7b5e,0x3be222ed,0x3b5224ec,0xbbba7a29,0xbc213b30,0xbb855e4c,0x3c89e44c,0x3c099178,0x3c955fd5,0x3d1a3ab1, -0x3d0539fb,0x3ccedb58,0x3c4d78e0,0x3c02589b,0xbb81be12,0xbbd266e6,0xbc7169a5,0xbc997a27,0xbc954b1e,0xbcab7723,0xbc8dc8e9,0xbc606610,0xbc32b0b7,0xbbf5f7ed,0xbc06dd45,0xbbeb4c4c,0xbbd91ef7,0xbc184677,0xbabe4d89,0x39a53db2,0x39eca379,0x398ae772,0x3a2ac9c3,0x3b11cedd,0x3aaf0fb7, -0xb884a8fd,0xbab867d9,0xb9332b75,0x3a5d7049,0x3b548b0a,0x3b00e953,0xb9379ece,0xbb8d00bc,0xbc26c36f,0xbc82a643,0xbcd56804,0xbc4d55db,0xbb57a02a,0x3a416007,0xbae92fc7,0xbc2356e2,0xbc312e4e,0xbc35ebb9,0xbc801dce,0xbcdb9f1f,0xbcfde0f5,0xbd0926a5,0xbd052464,0xbce23e58,0xbcbd4ebe, -0xbca34c0a,0xbca0943b,0xbc8d1d8a,0xbc574ffc,0xbb9b34b6,0x3a84984a,0x3bd89f7d,0x3ba0d821,0x3b89d457,0x3b64a8d7,0x3aa1046b,0xb9bb0c78,0xbb3365bb,0x39b7a99e,0x3b225fee,0x3b94ba54,0xb8791823,0xbb4fe028,0xbbcb986e,0xbb9bdc8d,0xbb57eb6f,0xbb91898a,0xbbc31ef7,0xbc0e707f,0xbc0da326, -0xbc27578b,0xbc62f419,0xbc64d1df,0xbc726139,0xbc4cb112,0xbc2c9176,0xbc316dc1,0xbc3d69e3,0xbc3e9d37,0xbc72a383,0xbc9d57a5,0xbcb1e64b,0xbc9b8c20,0xbc5787f4,0xbc41c7ab,0xbb898e40,0x3a5c8500,0x3c10ce11,0x3be67247,0x3bcbc7b7,0x3bbcc642,0x3b823595,0x3b3f57a2,0x3a98d278,0x3b21b18b, -0x3b5bc475,0x3bb07689,0x3a220a38,0xbb3d922f,0xbbd42a0e,0xbc31bb6a,0xbc80051a,0xbc9f93a2,0xbc9b5cda,0xbc91a93d,0xbc8ccafc,0xbc811cd9,0xbc86f4e5,0xbc9eaeea,0xbcac2f03,0xbca1e9ff,0xbca35d32,0xbc9e4cd4,0xbc9a030f,0xbc92ef08,0xbc83043e,0xbc5bcde1,0xbc373170,0xbc26e905,0xbc13e2cb, -0xbbfb4a11,0xbba2f54a,0xbb634a78,0xba9537bc,0x3a8a3912,0x3baa9a8b,0x3bbe5ef0,0x3badec6b,0x3bb36c92,0x3bad53c8,0x3ba918a1,0x3b95a987,0x3b9247c1,0x3b34ae6b,0x3ae89680,0x3a5be85c,0x391f7178,0xb96ecbca,0xbaa528ac,0xbb85b083,0xbbf66ee8,0xbc2ea78a,0xbc609a86,0xbc00231e,0xbc10d71e, -0xbc06efc1,0xbc03b1b0,0xbbf446cc,0xbbfdef8d,0xbbed6137,0xbbd10f45,0xbbb86e26,0xbba5e741,0xbb925d97,0xbb7554b9,0xbb52aa93,0xbb34240d,0xbb4fda25,0xbb52ddc7,0xba6b713a,0xba86961e,0xba396de8,0xba61af93,0xba585d0b,0xba7488d6,0xba7f99c2,0xba905604,0xba952a15,0xba8907cc,0xbacbb3d4, -0xbb068cbb,0xbb2d2f2d,0xbb540c0d,0xbb7e2715,0xbb850b9f,0xbba4eb76,0xbbb6c3eb,0xbbca7bb5,0xbbe41240,0xbb8095b3,0xbb0c8f28,0xbaec461f,0x39985b5a,0xb8774fd1,0xb9605a33,0xbab502b1,0xba411ebd,0xb95e52cc,0xbab31bed,0x39f769d8,0x3a4386bd,0x39c6094d,0x3a19d6db,0x39b34083,0x3a33f001, -0xbae33c40,0xbb2c47ee,0xbb1dbf5b,0xbb0d064a,0xbaef447f,0xbab36f9a,0xba7f341e,0xbaafede8,0xbb1d7e31,0xbb6431d8,0xbb866116,0xbb9c1658,0xbb5feeac,0xbb3da756,0xbb13c129,0xbb27b5ef,0xbb1f7747,0xbaa5549e,0xbb5ea0c4,0xbb775f33,0xbb5035c5,0xbb3be8cc,0xbb3221d4,0x3ace317b,0x3aa695ee, -0xb8f6efd3,0xbb381256,0x3b308995,0x3b4bba50,0xbaae4a15,0x3b1d041f,0x3b5054be,0x3b6371b0,0x3b49b53a,0x3b287dcd,0x3b77a951,0xbb005729,0xbb8b4e95,0xbb9f1aad,0xbb82d0f9,0xbb04aa77,0xba518123,0x3a23bac3,0xba0cf8b0,0xbb88a7b0,0xbbf1b202,0xbc1111c3,0xbc14a44d,0xbba1435f,0xbb208b0c, -0xbae4a9f9,0xbb2e9965,0xbb517aac,0xbab31366,0xbbd2a31c,0xbbf264b3,0xbbb49ff0,0xbb9cdb7d,0xbad05a61,0x3c23db4b,0x3bfecf79,0x3bac3089,0xbad2924f,0x3bbd605e,0x3beed6b7,0xb984e8ca,0x3c13b7f6,0x3c2c436d,0x3c12526d,0x3c137f74,0x3bfa86c5,0x3c071aa3,0xbac2427c,0xbbbbc4f3,0xbbd602a2, -0xbb9a4431,0xbad9a34d,0x3ab818ba,0x3b865876,0x3aeb4ca4,0xbb9ee383,0xbc364407,0xbc6f3ec4,0xbc841bc1,0xbc1403c0,0xbbb25c9c,0xbb4e49c3,0xbb7cb5ae,0xbb9339b1,0x3a86abb8,0xbc2bab8d,0xbc467df8,0xbbea050e,0xbbeaa89f,0xbb60942e,0x3c18fe30,0x3b9d0b4a,0x3aaab52e,0xbb3ca960,0x3c85333d, -0x3c8c86a6,0x3b943ef0,0x3c4ff7d3,0x3c5c50f1,0x3c640dd0,0x3cbb1775,0x3cabfb61,0x3c682e7d,0x3ae77e45,0xbbc90aaf,0xbc1a2cd4,0xbc008e58,0xbb58b13e,0x3adb11ce,0x3bda630c,0x3b35fa93,0xbc18a323,0xbca4177b,0xbccc1ad3,0xbcba23de,0xbc0fd52f,0x3aca6d97,0x3b323f06,0xbb1753be,0xbb97bdaf, -0x3a9fdd2e,0xbc829718,0xbc94e779,0xbc12fcb2,0xbc0230ad,0x3b64889f,0x3cd85aef,0x3d33df8c,0x3d17a031,0x3bd898ab,0xbc9dc0fb,0xbca3d59f,0xba1b9c08,0x3b46826d,0x3c7dbb26,0x3d1a2908,0x3c243c47,0xb9ef1694,0x3bc221d8,0x3b220048,0x3bc9b87b,0x3c08ac3f,0x3c3f75b8,0x3c5455e3,0x3c32a229, -0x3c18cf1f,0x3c10b1a7,0x3beeb16a,0x3c4486c3,0x3bd86567,0xbc128739,0xbcbc3f84,0xbcfc5a06,0xbcfca7ef,0xbbcd976c,0x3b50007e,0xbc5c8407,0x3c004f90,0x3b1ed34d,0xbcd1758c,0xbc453051,0xbcb6b794,0xbd0601f2,0xbd8f115b,0xbd5426f0,0x3cb6a1a0,0x3cb416ba,0x3c8c9611,0x3c285406,0x3be07e43, -0x3bd55b09,0x3bef84a9,0x3c978371,0x3c9adf87,0x3c0d8cf6,0x3bad1ba7,0x3b09a236,0x3bc1b839,0x3bba8726,0x3b86940e,0x3aa4d5c6,0xbacadaad,0x3a91dc86,0x3bac4644,0x3c3fcd1f,0x3c1ab763,0x3b7a9574,0xb969ae2f,0x3bb00aa7,0x3cc310f5,0xbc42f707,0xbca83f56,0xbc5087b4,0x3ba3073b,0x3c63b6d3, -0x3c863c53,0x3a0f891e,0x3d1ab3e9,0x3d53d956,0x3d539f0d,0x3d24983a,0x3c75b8e1,0x3bd177c4,0x3c271cb6,0x3c6181ed,0x3c4d0aeb,0x3c278f3f,0x3b81c0d1,0x3b718404,0x3b726f5c,0x3bd75202,0x3bb92855,0x3ad28330,0x3ab9c8aa,0xba76719b,0xbb8354fd,0xbbaffc61,0xbb72edd0,0xbb429870,0xbb80a6bc, -0x3c0fcca0,0x3c7fe461,0x3c8f8211,0x3c3ec650,0x3a681b57,0xbbf5a832,0xbc939e6d,0xbc90b7e6,0xbc9b6bf9,0x3cb7ebe6,0x3d036910,0x3c3f3fda,0x3cd3ec8b,0xbc5da93e,0xbca34b0e,0xbcd468a1,0xbc8cc7fd,0xbb028a3c,0xba2e518f,0xbb285323,0x37d2e973,0xb99dbfac,0x3afb711d,0x3b472b64,0x3b6580ce, -0x3aa10370,0xbb186dfd,0xbb616986,0xbba813d2,0xbb96bb68,0xba4f6383,0x3ac82753,0x3b0cec81,0x3ae16531,0x3b9df199,0x3bdee949,0x3c12aa63,0x3bc57aef,0x3a57bd34,0x35f680a0,0x3bf598e8,0x3c91a8c5,0x3cba4b95,0x3cdbe279,0x3ca0a44f,0x3cba9cac,0x3c8b797a,0x3c114613,0xbad401ac,0x3ad9e6ab, -0x3c13bdf4,0x395c3f6d,0xbb5068b5,0xbb937149,0xbb9b71c3,0xbb3f6bbc,0xbb61aea2,0xbb9ad229,0xbb956d11,0xbbf64bba,0xbc22eef7,0xbc1f5ea5,0xbbf322d7,0xbba954c4,0xbb17e6a0,0x3b514ebd,0x39afd71e,0x396482b8,0x3ac392ca,0x3ba3766a,0x3bb44748,0x3b56a894,0x3b2f94b6,0x3b0ad838,0x3b1e8403, -0x3b3fc87a,0x399e4077,0xbbb893e2,0xbb7b49f0,0xbb61de6b,0xbbdf4bcb,0xbb9da8ec,0xbb8ac29a,0xbac0f5df,0xbb3df7bb,0xbb935423,0xbc06dee3,0xbc4b30ab,0xbc958775,0xbcf7a6b4,0xbd08d643,0xbd097746,0xbcf7632d,0xbcd84cfc,0xbcb9e78e,0xbca107de,0xbc85e106,0xbc6cf6ef,0xbc68d736,0xbc1f20fb, -0xbbac2cbb,0x3af8627d,0x3b73a691,0x3ba1f1b4,0x3b653690,0x3b4585db,0x3abaa0de,0xb9d9d314,0xba9d68bc,0x39c50b27,0x3bcf4c64,0x3b913c21,0x3b21fa1d,0x3918a1d6,0xbb39d7ee,0xbb3a559e,0x3b07b16e,0x3a9126c0,0x399e790f,0x38c98bb1,0xbad4adb4,0xbb8f3bb0,0xbb839fb1,0xbbc8c47f,0xbbbf4db3, -0xbb9e9785,0xbc148c4c,0xbc675aa6,0xbc9b64d3,0xbca8f63a,0xbcb5aa79,0xbcc80885,0xbcbb10f6,0xbcaecb95,0xbca8650f,0xbc3d115c,0xbb8b5abb,0x3b844962,0x3b4a39da,0x3b60a4a5,0x3b8cd210,0x3b2edc36,0x3adbed0c,0x3a2b2774,0xb9b9f451,0xbaff2fb4,0xbb667bda,0xbb841461,0xbb7a7e23,0xbb60698e, -0xbbc1f7d8,0xbc0b99a3,0xbc396d31,0xbc1e7c8c,0xbbfa6498,0xbbc9b063,0xbbb87612,0xbc1a6c35,0xbc238a8b,0xbc56a32e,0xbc49b794,0xbc647d53,0xbc613a84,0xbc50a5a5,0xbc587d5d,0xbc371592,0xbc2be519,0xbc1d85d0,0xbc144978,0xbc0b1d03,0xbc0d6a79,0xbbfefd6a,0xbc05cb27,0xbbf56a83,0xbbd4f828, -0xbb87f940,0xbb9a065b,0xbb9a674b,0xbb8f1a37,0xbb8bde3b,0xbb853501,0xbb738031,0xbb67df72,0xbb7887b4,0xbb90fbb3,0xbb9e1677,0xbba063d6,0xbb9bae3a,0xbbae66fa,0xbbbe4dae,0xbbe9f07e,0xbc04a8e9,0xbc1024ac,0xbc037b83,0xbc01d5b5,0xbc03b589,0xbc02e40e,0xbc029454,0xbc002236,0xbc00aea7, -0xbc050839,0xbc05b72d,0xbc02e678,0xbbfad528,0xbbf62841,0xbbec055c,0xbbdf6bea,0xbbe79233,0xbbed7e85,0xbbabb4f5,0xbbbbaf6e,0xbbbc8582,0xbbc958e6,0xbbc00ee9,0xbbc28000,0xbbc15ecb,0xbbc18ffd,0xbbc2503f,0xbbbdd148,0xbbcab6aa,0xbbd17702,0xbbda4454,0xbbe44171,0xbbecc9a6,0xbbec9591, -0xbbf589b2,0xbbf5ca94,0xbbf74de8,0xbbfc72d1,0xbc0eeb32,0xbb22ac7a,0xbb1d110d,0xba8fff3c,0xba7f540a,0xba96e82c,0xbb4e1bf7,0xbac3ad04,0xbaa8ac66,0xbb1b83ab,0xba3ef522,0xb9e164c4,0xb9ed01ad,0xbab18067,0xbad228dc,0xb9c8b4f8,0xbb258d84,0xbb4be2a0,0xbb64ce6c,0xbb418306,0xbb272053, -0xbae3792b,0xbb02c15f,0xbb19e712,0xbb4d0c16,0xbb77cac3,0xbb7dbcd8,0xbb7caceb,0xbb0f714e,0xbaed74f1,0xbb0bdd98,0xbb2311af,0xbb283b45,0xbaed1559,0xbb5e78de,0xbb733084,0xbb4e1279,0xbb49b3e1,0xbb5d4ad8,0xba794988,0xb97e1e0a,0xbab26d94,0xbbaf85a1,0x3a2afc30,0x3b015717,0xba78358b, -0x3b079093,0x3b25b7fc,0x3b5f582e,0x3a26c379,0x3803dc81,0x3b443109,0xbb44ff82,0xbba15e07,0xbbbb68b6,0xbb94a929,0xbb483e6e,0xbaacf21b,0xbae29bb5,0xbb4ce355,0xbbb4308d,0xbbf96f20,0xbbf29eff,0xbbc740ab,0xb9ccaec5,0x3abe5f20,0xba4b6ca8,0xbb1d6de9,0xbb7a3e84,0xbb28fe53,0xbbc088d8, -0xbbcb0186,0xbb9bdf7d,0xbb9a4360,0xbb607275,0x3b7360e4,0x3ba63836,0x3b7b7433,0xbbbade97,0x3b4722bd,0x3b94e5a0,0xba409e49,0x3c044e5c,0x3c20179f,0x3c11f398,0x3b8ba2df,0x3b12d549,0x3c01b37f,0xbb6ab889,0xbbd4e215,0xbbed9f4b,0xbbb85812,0xbb4594b3,0x39c0b6ac,0xb9771562,0xbb3d225a, -0xbbeed0c1,0xbc3fa538,0xbc42958d,0xbc2cba55,0xba36037f,0x3b14da22,0xba2cfc72,0xbb0a7fbe,0xbb8c4575,0xba84b921,0xbc1276b6,0xbc263cf9,0xbbc99e32,0xbbeaf9c6,0xbbad37b7,0x3b03927b,0x3b1c29d5,0xbb15a78f,0xbc31b26c,0x3c35b29f,0x3c88c943,0x3bc28ffd,0x3c6f838f,0x3c804e82,0x3c6e3c4d, -0x3c8113bf,0x3c69cbc9,0x3c64b82a,0xbb1ef6e1,0xbc0c9d12,0xbc196f93,0xbbf94c6e,0xbb81f7c4,0x3aedf2b9,0x3a189a6e,0xbb939b91,0xbc54c687,0xbca3739e,0xbc9bfb4d,0xbc59e121,0x3bcaa3b4,0x3c643e50,0x3bbb1771,0xba6cf2b1,0xbbd01c8d,0xbb712cb2,0xbc532b9a,0xbc4526f9,0xbbd70be2,0xbbf4dc27, -0x38b15259,0x3c818dae,0x3d1c0004,0x3d1a2f58,0x3c651458,0xbc976d84,0xbcdfc30a,0xbc284e7c,0xbaf18b15,0x3c0b647a,0x3cd1bb16,0x3c19b3bf,0x3a3073f8,0xb9a06203,0x3b4cc4e9,0x3bd91568,0x3b12d5cd,0x3bb26673,0x3be82730,0x3c03f910,0x3b8d0659,0x3b86d650,0x3b8615bc,0x3bd78cfa,0xb7916ba7, -0xbc73b1c6,0xbcbc16b1,0xbcd2f30f,0xbc8f4edd,0x39a7b8d2,0x3bcc57a0,0xbb0111f5,0xb9306223,0xbc2cd10e,0xbcd3a655,0xbc6dfabf,0xbcdff56b,0xbd08dab8,0xbd6aca35,0xbd44cf86,0xbc3264c2,0x3caeb39a,0x3cdc56fd,0x3c714659,0x3b8ade1c,0x3b13c873,0x3b23ef11,0x3c44844c,0x3c734b07,0x3c31cd6a, -0x3ba7c52a,0x3ac6061e,0x3bacbb0d,0x3bcb26b4,0x3b74c79d,0x3a423638,0xb9163bf4,0xb9e83cd7,0xbb1bf6ec,0x3b3a8af9,0x3b3ff4a7,0x3b040cdd,0xb9c20697,0x3bb08fff,0x3cadbb37,0xbc47d7c1,0xbc952b2b,0xba986261,0x3b248d97,0x3c7050e5,0x3d0a5e02,0xbb078519,0x3ccd15ad,0x3d428834,0x3d2b1642, -0x3cf84876,0x3b81d849,0xbc22b249,0xbada6d81,0x3c952a5a,0x3c70a135,0x3c347ba8,0x3b115c8f,0x3ae74916,0x3a85f48c,0x3aee8557,0x3be2dada,0x3bbd1727,0x39cb8022,0xbab02317,0xbb789b6e,0xbb58fff8,0xbb2b7dc6,0xbb1fdaf4,0xbaae4da4,0x3c37337b,0x3c8b8060,0x3c98cb79,0x3c76055c,0x3b7a637a, -0xbc66504d,0xbbe9cf42,0x39964eeb,0xba9deacd,0x3cc257d3,0x3c8e7252,0xbc3c4cb1,0x3b9a770d,0xbc9b3cfd,0xbcc24ed2,0xbccd1715,0xbc8994c1,0xbacd2947,0x39cf7ef7,0x394a9bc9,0x3a96c566,0xbb14a71d,0xbb14cc38,0xba040bbd,0xbb4fd666,0xbb8fa1f3,0xbb142683,0xbbc0d746,0xbc063718,0xbbf2b972, -0xbb35e02b,0xbafa4ec4,0xbb9b798d,0xbb30d623,0x3a4cf023,0x3b5b62a7,0x3bb71665,0x3ba31e96,0x3c194f29,0x3c3eaf5d,0x3c8a58c8,0x3c8af44e,0x3ce9f6bc,0x3cc0c4a5,0xb932a194,0x39c76fb8,0x39f04d7f,0x3b03d6d4,0xbc01de89,0x3c87f109,0x3c9aadfd,0x3c41a61e,0x3c0cb0c2,0x3c02d868,0x3bd051a7, -0x3b9d746b,0x3b42c062,0x39493c7a,0xb9ca8bd0,0xb9cc66f9,0xbbda63c7,0xbc0fcd40,0xbbd7bd2c,0xbbd944e5,0xbb60310a,0x3a719c2c,0x3a41a1f3,0x3acd8cb3,0x3ae0c161,0x3babb206,0x3bc4cfac,0x3ba5ccee,0x3b612e60,0x3adcaf6a,0xb9feae49,0xbb03c9f4,0xbb898895,0xbbe27e26,0x397d99a5,0x3bf27ba7, -0x3c91364e,0x3c2a228d,0x3bd174f8,0x3c1d95b4,0x3c4c872c,0xbc253e7f,0xbc3f5a23,0xbc9d64c4,0xbccca16b,0xbcfd422a,0xbd056bfd,0xbcf2fad9,0xbcb6f0a8,0xbcb1c0c2,0xbca0476b,0xbc86fad5,0xbc54521d,0xbc2faee3,0xbc29129d,0xbc31aed0,0xbc193e02,0xbbaeca4a,0x3b13aae6,0x3bb501b1,0x3b8f2e91, -0x3b936e2b,0x3b887ceb,0x3ba2c6f3,0x3a422527,0x3aa8a804,0x3b8666ce,0x3baf2752,0x3bc91ec2,0x3b8b40fb,0x3b4bad79,0x3a42d718,0x3885a88b,0xba09425b,0xbad019d1,0xbbbd535b,0xbbe05c4e,0x39db093d,0x39c26a01,0xbb21c408,0xbba258f9,0xbbd6b93f,0xbc29a042,0xbc7d08dd,0xbca9a58c,0xbcac1778, -0xbca8a45f,0xbcb61a24,0xbca1328f,0xbca019ab,0xbc8b8f22,0xbc47ba2d,0xbbdd5048,0xbb38973c,0xba8a5312,0x3a94c94e,0x3ba92c8c,0x3b9c497e,0x3b84e926,0x3b850f0c,0x3b35b031,0x3aa4c26b,0xba458edd,0x386c8268,0x3a6bed6d,0x3b02ec91,0x3abf33ff,0x3ac9f034,0x3a9ec8e3,0x3ad1b7dc,0x3ae00dbb, -0x3b0fcf14,0x3a9b2b37,0xbbcbb387,0xbbc81d28,0xbbf73c1d,0xbbdc1433,0xbbf1a4aa,0xbbf0390c,0xbbcdd512,0xbbc3b2a3,0xbbb21ed5,0xbbb57d25,0xbbbdadb1,0xbbb94039,0xbbc0ba63,0xbbdd1e49,0xbbe3f8b4,0xbbec5e80,0xbbd94eb0,0xbbb57dcc,0xbbb4ba75,0xbb66c87d,0xbb794021,0xbb69aea5,0xbb659724, -0xbb573993,0xbb3b4a57,0xbb2639ff,0xbb429ae5,0xbb775eff,0xbb8ed7ed,0xbba0427a,0xbbb55b41,0xbbceafe1,0xbbcf06c3,0xbbd24028,0xbbd39512,0xbbd040d6,0xbbaa58ed,0xbb9ab392,0xbbc72ec2,0xbbd9da5c,0xbbf765e4,0xbbbe7e78,0xbbe1c530,0xbbfcecc0,0xbc04c6e4,0xbc09284d,0xbc0a221e,0xbc1171a0, -0xbc134375,0xbc161eae,0xbbfdf4a3,0xbbd4a947,0xbc00beb5,0xbbde1cf7,0xbbc6b851,0xbb9b8a63,0xbba3ece2,0xbba102a7,0xbba0052f,0xbb9e8169,0xbb9e48da,0xbb987063,0xbba42828,0xbba8eb3d,0xbbb0b2bb,0xbbb77e13,0xbbbc6c6b,0xbbc3d795,0xbbbb8445,0xbbb69106,0xbbb23b6a,0xbbacbf13,0xbbe1e9aa, -0xbaf8492f,0xbafbed59,0xbaa629da,0xba6fd262,0xba810c37,0xbb35c044,0xba8dfc3c,0xba98faea,0xbad586ae,0xba491d4b,0xb9e6b3c9,0x39547b06,0xbac8241e,0xbaee0c8c,0xb9cddfd9,0xbb0688ef,0xbb25b35e,0xbb6782b3,0xbb38250b,0xbb1fbc43,0xbad0605f,0xbb08938f,0xbb1bcb8f,0xbb3c033e,0xbb4c4cae, -0xbb3d9335,0xbb1dce68,0xba7704b6,0xba18e4c9,0xba845156,0xbac3e11d,0xbaf3222f,0xbb06872b,0xbb2e8f0d,0xbb385d3e,0xbb17d38d,0xbb172c54,0xbb15e183,0xbaa32ed3,0xb988f314,0xba201b79,0xbb855017,0x39895b65,0x3adf7d2a,0x3a6967ab,0x3b07b054,0x3b1c1895,0x3b8b4ae0,0x38f48b9d,0xba1b83c2, -0x3b10672b,0xbb1f7339,0xbb87f8ce,0xbbc8c306,0xbb947ed3,0xbb5dee92,0xbafdd526,0xbb58d3b2,0xbb92d260,0xbbb90143,0xbbd7ae4e,0xbbac096f,0xbb335109,0x3b130e7f,0x3b62fea6,0x3a88ebf4,0xba92cda3,0xbb4e9fc4,0xbb7086a2,0xbb9dccff,0xbb90b034,0xbb45b0cc,0xbb4f47a1,0xbb1b0382,0x39d91a98, -0x3b58eb3d,0x3b6f16bb,0xbba41add,0x3b1ad4cc,0x3b56c627,0x3ac1abfe,0x3be8b8b6,0x3c0f34a4,0x3c33f999,0x3b35c815,0x39b82a67,0x3be95ac0,0xbb5568f5,0xbbb033b7,0xbc0c07a6,0xbbd1cfb8,0xbb8ca166,0xbaa19d18,0xbb80e190,0xbbc47ad3,0xbc06f559,0xbc294562,0xbc089336,0xbbaaa272,0x3b84cfe3, -0x3bd46809,0x3b2d7150,0x3a5d5ad7,0xbb33b9a6,0xbb8d81b1,0xbbede552,0xbbfd4ecd,0xbb872c87,0xbb9da5aa,0xbb1152c6,0xb98cad36,0x3b3dbe0a,0xba7325d5,0xbc3005b5,0x3bd9904b,0x3c6b6e31,0x3c100dd6,0x3c7ea152,0x3c94048a,0x3c91f55c,0x3c25e072,0x3c0dbe57,0x3c5ba680,0xbb7ab9a3,0xbc041e1b, -0xbc203760,0xbbf27c99,0xbb93877a,0xba448a0e,0xbbcb5b68,0xbc2ef052,0xbc733051,0xbc8d4aef,0xbc4d4f04,0xbb820898,0x3c65fc7c,0x3c94d587,0x3c0a448a,0x3ac21d12,0xbbc24dc1,0xbc196cde,0xbc350f5c,0xbbea6655,0xbb3a3aee,0xbb74d990,0xbb5b1b0b,0x3b610d81,0x3cc1a5cc,0x3cf6564e,0x3c98baf8, -0xbc2e90f8,0xbcc60d85,0xbc7082e0,0xbb586173,0x3b914e4c,0x3c1dd11a,0x3c3306c2,0x3bb1ea3d,0xbba1570c,0x3b98dbb6,0x3be38549,0xbb05a647,0xb95e8119,0x379a6c34,0x3afa3d48,0x3a0588da,0x3b035a26,0x3b4ef5e8,0x3b0b45a8,0xbb8260a3,0xbc6780f5,0xbcb96ca3,0xbca615d3,0x3a246b1f,0x3beb1786, -0x3c197c40,0x3c2544b5,0xbb85b6f4,0xbc8e09c4,0xbca34108,0xbc56af86,0xbcb2f166,0xbc9b36d8,0xbd208aec,0xbd21899b,0xbd07b6f2,0x3c545da2,0x3cf78beb,0x3ca85c2c,0x3b7451e7,0xbb2586e4,0xbb618cb4,0x3b9608b2,0x3c1d97cb,0x3c2f0a16,0x3bce3f79,0x3b18120d,0x3b823d57,0x3ae9127a,0xb6e6dbad, -0xb82d403b,0xbabb5f65,0xbb1de8ed,0xbba629f1,0xbba1e52a,0xbb667e07,0xbaeb4a73,0x3b8c85f8,0x3c02a330,0x3c2aba1b,0xbc3b1d12,0xbc588c6f,0x3c2e1531,0x3bafe150,0x3c9e005a,0x3d3ec50e,0x39bdb846,0x3c3553c3,0x3d41c467,0x3ca472c8,0x3bfb692b,0xbb8b4497,0xbc905215,0xbc2f83f2,0x3c1b48f6, -0x3c439e86,0x3c2aed8a,0x3a74f711,0xba13ba0b,0xbae2b6be,0x3944f72d,0x3bbca418,0x3be4aa42,0x3a4113bc,0x3a8717ee,0x39c4bf24,0x3a3631d4,0xbb1e3aad,0xbac7f4a7,0x3b7ef950,0x3c1df5bd,0x3c577394,0x3c606a41,0x3c2f5ea5,0x3b870e61,0xbba9be6f,0x392a9b78,0x3c4b0b5c,0x3d077693,0xbb3a8df4, -0xbcd69138,0xbd0db432,0xbc930ce8,0xbc932e72,0xbcce6ce8,0xbc7b833c,0xbbf9c79e,0xbb1cb3c1,0x3b31c9ba,0x3b82c063,0x3af25fe4,0xb8f47ff1,0xbb4d0085,0xbb10ed40,0xbbb3f4d2,0xbbc21260,0xbb1f185b,0xbbe2ff9d,0xbc0f6ae3,0xbc024ab7,0xbbd6bc30,0xbbe42211,0xbc096abd,0xbbdf039f,0xbba4a348, -0xbb00f01b,0xba10fad0,0x3b8e75a2,0x3c5c89dd,0x3ca4ceb7,0x3cb75b9d,0x3c8c5475,0x3cbe18f3,0x3c6c7868,0x3b0e9908,0xbc0027dd,0xbbf7657d,0xbbb8bd6c,0xbc1a2858,0x3cd7977a,0x3c9135f6,0x3c71ba05,0x3c30747b,0x3c26a0d2,0x3c053a28,0x3baad755,0x3b2c4a9e,0x3aaebb40,0x3ae64971,0x3b937a8e, -0x38e57dbc,0xbb7ed6b8,0xbbe2e669,0xbbd8a609,0xbb9ca9ed,0xbb6547d9,0xb5e13e3c,0x3b0f000e,0x3b1ccd50,0x3b906ef8,0x3b9abe62,0x3b7d3c6a,0x3b2c3f82,0x39877dab,0xbb82051a,0xbbbdcf55,0xbb8c2daa,0xb9ec1294,0x3c0ccd51,0x3c7efe59,0x3cc9275b,0x3ca34af5,0x3ca6ecdb,0x3cd484fe,0x3cea6779, -0xbc6cf5bd,0xbc680aae,0xbcb7a4c4,0xbcd909a7,0xbcddd06c,0xbcc204e9,0xbc9be954,0xbc676c9d,0xbc7436c3,0xbc6880a1,0xbc3ee3d1,0xbc2b10e3,0xbc0b57b7,0xbbffad1f,0xbc1cf383,0xbc1d017b,0xbc14c89a,0xbb0ece9f,0x3afc6798,0x3b99d29b,0x3ba8c1c7,0x3bbda0e0,0x3bd57786,0x3b9dd7c3,0x3b818eba, -0x3b85d6b5,0x3bd58cc1,0x3bf65887,0x3bfad007,0x3bb6fe6a,0x3b662e82,0x3b13c671,0xba697adf,0xbb86dcf3,0xbc16c008,0xbc410eae,0xba15766e,0xba8e31bb,0xbb995e5e,0xbc07d888,0xbc504f28,0xbc6f6b3d,0xbc90b012,0xbca84f4f,0xbc9dbe93,0xbc8ed570,0xbc8ef295,0xbc621ee2,0xbc509102,0xbc146eae, -0xbc0df3a8,0xbbe4efb7,0xbbe37645,0xbb3bbc46,0x3aabd9bd,0x3bbe2a94,0x3bad9152,0x3bbaf3e1,0x3bcadfae,0x3bbd48a5,0x3bb45b16,0x3b9f8504,0x3badfbd8,0x3bbe08c9,0x3be197e6,0x3bdc26de,0x3bdea7d9,0x3bd5e362,0x3b96a2e7,0x3b3f2761,0x3aff34a3,0x3a6e3a24,0xbb4623ea,0xbb29d616,0xbb825b9f, -0xbb68d60f,0xbb81a4dd,0xbb8ad00e,0xbb88b367,0xbb8fc98b,0xbb87d988,0xbb8390fd,0xbb8bcf2e,0xbb8098d6,0xbb87c22e,0xbb93100e,0xbb9113d8,0xbb6f4eb9,0xbb3e26d8,0xbafefa45,0xbb0fc26c,0x384ccaf8,0xb9f80c0f,0xba2e35f9,0xba7dda1f,0xba99fdba,0xbaac1064,0xbab7345b,0xbaf00a45,0xbb24d9ca, -0xbb5b8b7e,0xbb84f16d,0xbb97b944,0xbba0ec79,0xbb8cf35c,0xbb715d2d,0xbb5eda65,0xbb55a974,0xb96d0ab7,0x39e169e7,0xba4da264,0xbac16d14,0xbb28f6f3,0xbacb2fc6,0xbb273b68,0xbb6617f4,0xbb66f46b,0xbb713bdb,0xbb6bf9ff,0xbb800bb3,0xbb7eb588,0xbb819201,0xbb247321,0xbacbaa8c,0xbb418833, -0xbaee26be,0xbaa93468,0xb9374bc1,0xba2357af,0xba2df680,0xba49cda0,0xba5a4e48,0xba74822e,0xba82182d,0xba9d7227,0xbaa69e55,0xbaaaa0a8,0xbaac9922,0xbabb1ca0,0xbaedbf80,0xbac17b6b,0xbaa89aa1,0xba7feaa3,0xba10ef2c,0xba175f18,0xba8d01c0,0xba82e59a,0xba540d15,0xb9f262c1,0xb9e5501f, -0xbac047ed,0xb9aac8f5,0xba19138d,0xba11c3be,0xba190e99,0xb99a648f,0x3a2d74c3,0xba7524d8,0xbaa2bb34,0xb9d738b1,0xba953120,0xbabd84a4,0xbb514a42,0xbb1542bf,0xbb04052c,0xbab57564,0xbaee270b,0xbb00c2ec,0xbb0df7f3,0xbb07022c,0xbad68685,0xba2f5e8c,0xb86c3feb,0x3942b03a,0xb91a9cb4, -0xb9e37a1c,0xba7511c0,0xbaed4364,0xbb04ff8b,0xbb087203,0xbac87192,0xbaa865ea,0x38ddd2ba,0x38db8575,0x3a87d706,0x3a9bfbd4,0xba6b90a8,0x3a864ef7,0x3b00a00d,0x3b2563b6,0x3aede24b,0x3af30732,0x3b8082b6,0x39ccc702,0xb9152f10,0x3a864a30,0xba7ea6a8,0xbb21b839,0xbbc21577,0xbb90a233, -0xbb819da6,0xbb45ee92,0xbb8d5663,0xbb9f7f20,0xbba33e88,0xbb99e338,0xbb2bf681,0x3a89d30f,0x3b67e5bb,0x3b790aac,0x3ae58b64,0x395c9eb7,0xbaebd08a,0xbb72a9f9,0xbb8bf2d5,0xbb615161,0xbab8bfbe,0xba493ee4,0x3997f481,0xb7278977,0x3b3af426,0x3b7ece9a,0xbab05820,0x3b59c326,0x3b517059, -0x3b8097cc,0x3badaaef,0x3bc9b789,0x3c316a25,0x3b38f49c,0x3a8274e4,0x3b9c0d47,0xba9ccfeb,0xbb3497fc,0xbc163ac4,0xbbdae7f4,0xbbb8f40d,0xbb7052fd,0xbbd37b8e,0xbbf30842,0xbbf91cce,0xbbf586fa,0xbb8a4049,0x3ac379d2,0x3bbdc9c2,0x3be5b0dd,0x3b656ab7,0x3b4e3714,0xba45cc5c,0xbbb8d876, -0xbbe686cd,0xbbe6ad61,0xbb3178dd,0xbae03730,0x3b8c9d5c,0x3b4357b2,0x3bd5f680,0x3b7d9d07,0xbb8fd448,0x3bbfe199,0x3c4cd439,0x3c454234,0x3c7b43f2,0x3c9a0602,0x3ca62a41,0x3bf6a653,0x3bc1f4ac,0x3c37a3c0,0xbaf7e90a,0xbbaa7a1c,0xbc3ddb0a,0xbc10adf7,0xbbf8d183,0xbbd18f3a,0xbc4709cc, -0xbc6afb4b,0xbc692ec9,0xbc4f120a,0xbba33709,0x3c023a96,0x3c8ec605,0x3c83d047,0x3bf04d2d,0x3b583b4b,0xbb57de38,0xbc3275e1,0xbc30e3c4,0xbbb50fc3,0x3a68e636,0x3b21dc68,0xbc076639,0xbc03358d,0x3ba60872,0x3c70b7f2,0x3c95c4e0,0xbafabd57,0xbc814734,0xbc6f7fac,0xbbd35f35,0x3a351759, -0x3965919c,0x3c671fe9,0x3c3d751e,0xbbc57b66,0x3b9cb451,0x3bbd215e,0xba4a231d,0xbb0ba12a,0xbb3a183c,0xba134a72,0x3ad33b65,0x3b773a0f,0x3b549dc6,0x3abe5358,0xbb9a382c,0xbc80023f,0xbcac9f2b,0xbc5ed882,0x3c5c9f58,0x3c30ec40,0x3c2535a4,0x3c4ed659,0xbc06f70b,0xbcaef3e8,0xbca2f875, -0xbc620a96,0xbc25dd65,0xbb054ad3,0xbc9696a6,0xbcdcfb16,0xbd0e13a0,0xb8929b4a,0x3ca78f1a,0x3ca06958,0x3bd424ec,0xbb18c408,0xbc08e5a5,0xbb0294c4,0x3b8f113f,0x3c053942,0x3bc6b637,0x3b1fe188,0x3b533d31,0xbb63144c,0xbbbadcd0,0xbbb72a27,0xbba0d2ca,0xbb8ed85a,0xbba3da6f,0xbc0c48be, -0xbbd5fc53,0xbb99d52e,0x3c552727,0x3c67d413,0x3aa0beb6,0xbc1fe13f,0xbc09f720,0x3c6a685c,0x3c5a00f0,0x3cd612c1,0x3d3929d4,0x3bcc5c80,0xbc1ba6d7,0x3d01715c,0xb7f11daf,0xbc37bd82,0xbb85a601,0xbc4544a3,0xbc144294,0xbb75bfee,0x3b6fa4b9,0x3bcf95db,0x3afe50e1,0xbb0ad6ca,0xbb620a0c, -0x39d6f551,0x3b2ffb2a,0x3ba91000,0x3b0fedb7,0x3b4c718b,0x3b732287,0x3b90ca34,0x3a7edde6,0x3b285204,0x3c114d00,0x3c1a7a29,0x3c26b5e1,0x3bfeb890,0x3b7f822c,0x3b40c2ef,0x3be4371b,0x3bb5a319,0x3c7466a7,0x3d2d6542,0xbcc4c540,0xbd512509,0xbd24d3d5,0xbd0298cf,0xbc25346b,0xbc90e538, -0xbbc150a1,0x3a1b800b,0x3aea99f3,0x3b111353,0x3b31e646,0x3a65f2b6,0x3a8ca4d8,0xbb631012,0xbb644f42,0xbb87ddf0,0xbb6ac697,0xbb404963,0xbba7eb88,0xbbda4bac,0xbc01915e,0xbc16c77d,0xbc22870a,0xbc0d6d36,0xbc1ee23e,0xbc174ee7,0xbbe3630b,0xbb6981a6,0x3bad1795,0x3c6c3018,0x3ca7aec9, -0x3cb5d83e,0x3cadd996,0x3c7f0ec8,0x3be39c62,0x3c19c464,0xba3dff8d,0xba4034b4,0xbb7a8966,0xbb8a1340,0x3c86a5ba,0x3b12650a,0x3be1280f,0x3bcd52ac,0x3c066f27,0x3c1558f8,0x3bd74042,0x3b0d596f,0x3adcf44d,0x3b2e6770,0x3bac835b,0x3bb256cd,0x3ab88555,0xbbc1d5e2,0xbbe15009,0xbbf62ba4, -0xbbe56cac,0xbb0d20d5,0x3abd39d4,0x3b6ed073,0x3b6148ec,0x3b78c622,0x3b8ffcaa,0x3b392b4b,0x394bb76b,0xbb45f794,0xba75b539,0x3b70ddf9,0x3c3685a7,0x3c74e62d,0x3c9a3541,0x3cb76559,0x3cb019db,0x3cbd176c,0x3cc9f58b,0x3cc419ca,0xbbea44f8,0xbc452e6c,0xbc82575d,0xbc9113cb,0xbc8fbab0, -0xbc33ba16,0xbbc3cac5,0xbba00971,0xbbadcaff,0xbbc9e37d,0xbbbf20b3,0xbc09354a,0xbc0529f2,0xbbfc00a5,0xbbd95a93,0xbbe98ae2,0xbc1cdfd7,0xbbdd5be2,0xbb5c09bb,0x3a96f935,0x3b4099cb,0x3b9ad860,0x3b9fa611,0x3bb77f93,0x3bb7a962,0x3b91a9a5,0x3b94ff20,0x3b907938,0x3bcdfe53,0x3bb780db, -0x3ba1bd90,0x3b604975,0x3af74f9e,0x39bacfd9,0xbb0fae42,0xbb766b3a,0xbb8faf11,0xbb980156,0xbc086ac5,0xbc45ef1d,0xbc8e9284,0xbc8f4098,0xbc95d322,0xbc9a9e41,0xbc880194,0xbc671846,0xbc4a2370,0xbc1ca6b5,0xbc043bce,0xbbbf931b,0xbbcc3eeb,0xbbc53402,0xbbc96444,0xbb518744,0xba0bf7f4, -0x3aa86d77,0x3b021ff0,0x3b786d11,0x3bacc649,0x3bb80160,0x3bc321a2,0x3bd35389,0x3bd6941d,0x3be088fa,0x3befb3b8,0x3bd3045a,0x3bb5ce35,0x3b880430,0x3aac7dee,0xba9bac7a,0xbb452d15,0xbb6c80c2,0xba80014e,0xba5fb213,0xbac055e3,0xbb111475,0xbb1e5862,0xbb3e5612,0xbb7a2856,0xbb9bbbe4, -0xbb935dfa,0xbb871ef2,0xbb8402a3,0xbb78afab,0xbb7420ed,0xbb621270,0xbb17c0e8,0xba6ac91c,0x3820178d,0x3a80d340,0x3b01c8a9,0x3b62c709,0x3b487e85,0x3b2b5d44,0x3b17cd25,0x3afbce58,0x3ad6062c,0x3ab377f1,0x3a50bc26,0x390e3525,0xba11b2bc,0xba9de9d3,0xbaceef61,0xbac15a4b,0xba7589d3, -0xb9bfe1db,0xb981d287,0xba14250a,0xba2beec0,0xba0aca79,0xba124028,0xba3b42bd,0xba525cac,0xbb09fc2c,0xbb0ea4ed,0xbb1d04ea,0xbb0564e9,0xbb02c3d2,0xbae6401f,0xbad477cb,0xbab11eca,0xbaa20b07,0xba7cb956,0xba6dc8a1,0xb90e3391,0x378930f6,0x389ceb35,0x39a7ab9e,0xb7a863c4,0xb90c7ade, -0xb9a9f788,0xb9d25a3d,0xba072025,0xba244a9e,0xba3faa99,0xba463cac,0xba450225,0xba2ea705,0xba3ca064,0xba875d22,0xba8f51b8,0xba9eb7d4,0xba972cb3,0xba6cc73d,0xba9ff677,0xb9bd8878,0xb8e52ab6,0xb9a7f9cc,0x389ec7b4,0x395127ac,0xb8a00a5a,0x3908ac67,0xb935b0d6,0x39a1c5d1,0xba008c04, -0xb9c25f06,0x3996db3f,0xb99536ab,0xb9df224c,0xb9c582ff,0xb8fea97d,0xb964eb99,0xbb0de09e,0xbab4c0e2,0xbab3fb90,0xba96d5df,0xbab2ead0,0xbab21ce2,0xbabd261e,0xba71337f,0xb9ba64cf,0x3a7fe15c,0x3a18cb2d,0x3a19d9f5,0x3934d832,0x39ae5f3e,0xb924053e,0xbaa76b78,0xbac8ada8,0xbac4a243, -0xba3e439a,0xb9b6ec5e,0x3b23dd99,0x3ab7e44c,0x3b19885f,0x3b1aab7f,0x3ad0d129,0x3ab3317b,0x3adc58ab,0x3b52109b,0x3a7d023f,0x3a264ce1,0x3aef7e78,0x3a17b98f,0x3a1cb425,0x391c4891,0x3a4bb8d2,0xb9ca09c3,0xbb8d5de5,0xbb6c87e8,0xbb80acdd,0xbb6db389,0xbb9150ca,0xbb9036f3,0xbb82483b, -0xbb11c32e,0x39a96f25,0x3b967043,0x3b89a8e7,0x3b5d55a1,0x3aa3036e,0x3a7e0a58,0xba08ed50,0xbb3a3e15,0xbb6f2e2d,0xbb2d4dbd,0x39b67e7b,0x3ade0f99,0x3b2ad70e,0x38c6510f,0x3b4238e8,0x3b80b522,0x3b1d2cf8,0x3b5ac2a6,0x3b0b2111,0x3b9b58be,0x3b072424,0x3afec13f,0x3bc8dfd3,0x3b261fa7, -0x3b1d687e,0x3b1b5266,0x3ac22468,0x3a4f145b,0xbbe043de,0xbbac8ec6,0xbbbe694b,0xbbaceb6e,0xbbe6f9ef,0xbbe25bb0,0xbbd1a5f6,0xbb72f719,0x398175d0,0x3c02aaa2,0x3bcbd401,0x3bc45a3b,0x3b1f9ce6,0x3b8d4c65,0x3a869554,0xbbaa0483,0xbbd8b56d,0xbbcb7bb1,0xba51a3e7,0x3a9199d4,0x3c299ee8, -0x3bb7db2f,0x3c12cf9d,0x3bf6923f,0x3b1fe9d5,0x3bb0e26b,0x3c1c7f49,0x3c68a364,0x3c5bec26,0x3c83e1b3,0x3c92bf01,0x3bda977c,0x3bb445b0,0x3c094c0b,0x3b0e62ab,0xba213c30,0xbc34c12b,0xbc1441bb,0xbc1d133f,0xbc2c109f,0xbc6e833a,0xbc6f94aa,0xbc4c531e,0xbbd1af82,0x3b69f436,0x3c9c1367, -0x3c9542f5,0x3c466204,0x3b69d41f,0x3b7f7ca1,0xb9ef5efa,0xbc16f7b4,0xbc18028f,0xbb810737,0x3bb04c78,0x3c139604,0xbc665e62,0xbc61aab8,0xbbdeb246,0x3b2f3144,0x3c63e6bc,0x3b9e9af1,0xbbebe1bd,0xbc704e95,0xbc35be2d,0xbb46293d,0xbafefbf8,0x3c84d175,0x3c7928eb,0xbbaee374,0x3b5c4d5a, -0x3b854748,0x3b9730e4,0x3a8dd9da,0xb9f31d90,0x3a1cffbe,0x3bc40691,0x3bf22b6b,0x3b9cfbe7,0x3a9adeef,0xbbcea380,0xbc8c8ed7,0xbc95ce11,0xbbd5b90b,0x3ca77c67,0x3c450b95,0x3c20bea3,0x3c42ff0d,0xbc32411a,0xbcb2e4a8,0xbcb41a99,0xbc8dedf4,0x3be9cd65,0x3c12dfbc,0xbb9189a9,0xbc999637, -0xbd0011a3,0xbc4e3e51,0x3bbf968a,0x3c50c5aa,0x3c231c24,0x3b00ef6b,0xbc20d841,0xbbe19e4a,0xb99a91ce,0x3bb74500,0x3b822954,0x3a901f22,0x3a6dae8c,0xbba9d38d,0xbbe95f9e,0xbc1766c9,0xbbb859ac,0xbb9d3cd2,0xbbac5d69,0xbc155569,0xbbb62fca,0xba22dbad,0x3ca42821,0x3c8f205e,0xbb3a1058, -0xbc01c810,0xbb90382c,0x3c488a30,0x3cacd8d8,0x3ce840fe,0x3cf7e477,0x3c644f54,0xbd101f39,0xbc22f1a6,0xbc2e676e,0xbc40183e,0xbb45f5c6,0xbb1b6d58,0xbb541433,0xbc43e44a,0xbb972ffb,0x3a1be544,0x3b61f476,0xbac0bf1f,0xbb5cf5b4,0xb9cc731d,0xba42af01,0x3af048b2,0x3b433fc6,0x3b24f9e2, -0x3b5254b8,0x3b21d2b8,0x3b8660e1,0x3bee467c,0x3c29bf3b,0x3c25c145,0x3c04199f,0x3b260327,0xb915b09a,0x3b6a4951,0x3c3718fe,0x3c9513d2,0x3c880991,0x3c1c87e7,0xbd023f5d,0xbd37db3a,0xbcea068a,0xbd1cba8a,0x3bdf5aa8,0x3ad6e8d7,0x3b43cf00,0x3bb083cb,0x3c0f935d,0x3b0fcb38,0x39d45f20, -0x3a5b2dc0,0x3a671e93,0xbb40cd9f,0xbb88665d,0xbaec2ee5,0xba2ba4e0,0xbb34eea6,0xbb08695d,0xbb86bdb9,0xbc031bdc,0xbc22998d,0xbc250a70,0xbc103096,0xbc25a647,0xbc1de0f1,0xbc05378a,0xbb1e66f5,0x3bad61c1,0x3c61ba41,0x3c89e852,0x3c90124a,0x3c9226d2,0x3bd81bc1,0x3a8d1adc,0x3bd45bdc, -0x3bd8e0d8,0x3c047a7c,0x3bd9aae8,0x3bf9740c,0xbbd324ec,0xbc555c7b,0xbb917c33,0xb8d81895,0x3b533ec7,0x3bfb3d9d,0x3bf81c73,0x3b839fa8,0x3b89b96e,0x3b956124,0x3b89599c,0x3bc54f69,0x3b55ee5e,0xbb305155,0xbbd6d98f,0xbc181461,0xbc0f2013,0xbbb306cf,0xbaaf4679,0x3af60b1e,0x3b18be3f, -0x3b5d971d,0x3b4b8acc,0x3b821f75,0x3b75403f,0x3b790513,0x3c081a07,0x3c599be4,0x3ca70266,0x3c9f7acf,0x3cab7f0d,0x3ca90190,0x3cab18a7,0x3c8656d1,0x3bc1e554,0x395bd5bb,0x3bd49200,0xbac2a9e0,0xbb696ff3,0xbb222967,0xba7d3d3d,0x3b571035,0x3bbc849f,0x3b84c9b5,0x3b826164,0x3af36a2d, -0xb98f9384,0xbba0760f,0xbbe0ae97,0xbbfa6cbd,0xbbc83deb,0xbbc9bd33,0xbbe43f84,0xbc0de0d7,0xbbefe1bc,0xbb824f6e,0xba211cd2,0x3b023073,0x3b111ea9,0x3b8f1706,0x3b95e0fb,0x3b43417c,0x3abbfcd1,0x3a2c4963,0x3b14bd44,0x3b35dd18,0x3b6f1187,0x3b91d277,0x3bac77f5,0x3bfe4b7c,0x3c3586dc, -0x3c239762,0xbc0540b5,0xbc17d275,0xbc3dfa8f,0xbc6f898e,0xbc9c414f,0xbc93a4b8,0xbc8a242a,0xbc8206e2,0xbc614dfb,0xbc3f41b7,0xbc18a64b,0xbc02d24b,0xbbe04175,0xbbcd9cb2,0xbbbca585,0xbbbb488e,0xbbafdfef,0xbb828150,0xbb306188,0xbb3e37ce,0xbaa0fe50,0x3ab17a6a,0x3b7a0fcc,0x3b50f501, -0x3b3bd4e9,0x3b509d10,0x3b600a48,0x3b768501,0x3b81818f,0x3b6066e8,0x3b269e73,0x3ab6a5ac,0xb9f1ef68,0xbb2fe287,0xbb9af940,0xbbe0bcd6,0xb9d7b091,0xba8e339f,0xbabd5f73,0xbb368de9,0xbb4cbae4,0xbb7ba900,0xbbb14a07,0xbbdfa76c,0xbbd7af9b,0xbbc782a4,0xbbb9c5dc,0xbbb5db8e,0xbba98165, -0xbb971a53,0xbb4bd92e,0xbb00aad9,0xba7e8118,0xb9211bd4,0x3abd26ea,0x3ab2f7fa,0x3ad36c60,0x3ad76923,0x3afca561,0x3b1389d4,0x3b3642fd,0x3b486f4f,0x3b3d1471,0x3b2eba53,0x3b23569f,0x3b0cea02,0x3b012abe,0x3b03f995,0x3ac5305a,0x3aad0671,0x3a8c7730,0x3a0ce66a,0xbb655dc6,0xbb7e9cc9, -0xbb656932,0xbb66c9f1,0xbb5a81d8,0xbba69793,0xbba20cc3,0xbba2555f,0xbb8e70d3,0xbb88bbad,0xbb7fb96e,0xbb648f85,0xbb4b677c,0xbb3ee4a3,0xbb497601,0xbb503e1e,0xbad6f329,0xbaf744be,0xbaec17bb,0xbafcce7c,0xbaf3a8f3,0xbaf8affa,0xbb016396,0xbaf8a1cb,0xbaf7dbbe,0xbae95b2b,0xbaf08a66, -0xbaed9437,0xbae784eb,0xbad20493,0xbac246a6,0xbaac28aa,0xbafa0434,0xbb212d84,0xbb43de88,0xbb59b49c,0xbb88f2d7,0x391e96fb,0x3a04e930,0xb7f4ec8e,0x3999a231,0x39f54884,0x3a4e1725,0x39494ef4,0xb96c1a91,0x3a04dd1c,0xba4b503e,0xba5afec9,0xba441521,0xb8adbb4d,0x38c585a7,0xb991fd37, -0x3a14b105,0x3a36d084,0xba6845b4,0xba1cdded,0xba548e6d,0xba5c0ccb,0xba5c9ed7,0xba392aa8,0xba3b8ab8,0x390bc0a1,0x3a4219a3,0x3b0b9a9b,0x3a8413fd,0x3a4f8418,0x392dd10d,0x3a66786c,0x3a0676fc,0xba520e48,0xba5d8379,0xba3de777,0x390a11ea,0x39d235f0,0x3b704cef,0x3ae3cddc,0x3b2048c8, -0x3b176721,0x3b3c6ef5,0x3a3b4977,0x39fdf846,0x3b2fe04d,0xba03a58f,0xba9c5ff1,0xba8c7f62,0x39a65edd,0x3a8ddc4e,0xb86811a7,0x3b088d3a,0x3ab4f412,0xbadf4b64,0xbb267d13,0xbb726002,0xbb790ae0,0xbb8240e2,0xbb5aa217,0xbb208c54,0x3a0962a4,0x3b4e1f42,0x3be5919a,0x3b8eafae,0x3b2e1c5f, -0x3978beb2,0x3acc1ccc,0x3a457052,0xbb016cfd,0xbb08c3bb,0xba8416a9,0x3b0ac883,0x3b5a9ec8,0x3b6963af,0xb8d7ec56,0x3b0bfdd1,0x3b453a0f,0x3ba6444c,0x3aed954f,0xb9a13cc4,0x3b5e4b6e,0xbb0cc593,0xbb3d12fd,0xba885205,0x3aa1615b,0x3b521975,0x3a8973d3,0x3b71669c,0x3b74a63c,0xbb112269, -0xbb4d9c39,0xbba7a0f8,0xbbb6e156,0xbbca11ae,0xbba7e037,0xbb8efa95,0x39f3d362,0x3b8f288e,0x3c457bc4,0x3bc255d9,0x3b9c6338,0x3a6e1651,0x3ba47714,0x3b431b63,0xbb8f73d9,0xbb856301,0xbb5612c5,0x3aed87f6,0x3b4df23b,0x3c4d6198,0x3bb8ad56,0x3c02c453,0x3bfef633,0x3bf3b5e4,0x3b4fe5e5, -0x3b9bdc00,0x3c49dcb6,0x3c108af2,0x3c20e802,0x3c1623be,0x3bc5cac2,0x3bdcb97e,0x3bce1a68,0x3bce3e69,0x3b90dd39,0xbbc8f302,0xbbf20f59,0xbc2ddfd0,0xbc53c291,0xbc6d102d,0xbc4bb223,0xbc0f80ca,0x3aa67b61,0x3c444757,0x3cd23a5e,0x3c898f94,0x3c041157,0xba1dbadf,0x3b92ba69,0x3b2451b6, -0xbbeff9ff,0xbb90af03,0x3a2f40c1,0x3c1e919c,0x3c517140,0xbc8f905f,0xbc67eab5,0xbc51c817,0xbba7d625,0x3c18e38b,0x3be50d96,0xbac9aaa3,0xbc620348,0xbc4b5886,0xbb82ee52,0xba291396,0x3c6e7e7c,0x3c5b966a,0xbb313302,0x3a5d00d1,0x3ae4a39e,0x3c13e437,0x3be35d9c,0x3bd0a6c0,0x3c08c670, -0x3c5c5367,0x3c3e99dc,0x3bd781da,0xbadc4556,0xbc348c7b,0xbc923cd2,0xbc700c07,0x39aa8cf1,0x3cc314e9,0x3c59888e,0x3c200d3f,0x3c46fd89,0xbc25fb3f,0xbc972054,0xbc9f5f72,0xbc9ad4a8,0x3c90db06,0x3c647de3,0x3bd74533,0xbc25d9b3,0xbce34c54,0xbcad7829,0xbbdf3a3b,0x3ba5613b,0x3c1e4219, -0x3b8e09a3,0xbc021f4b,0xbc19ed16,0xbb83ca95,0x3b73a27c,0x3a437c45,0xbab97fc5,0xbb1fb600,0xbb449082,0xbb6eb6cd,0xbc065462,0xbb820ccd,0xbb982ea6,0xbbae99af,0xbbee0574,0xbabaf687,0x3c20ed3c,0x3cada189,0x3c609ea5,0xbbe6dd75,0xbbf67604,0xba24250b,0x3c32e43b,0x3cd28178,0x3cd320c9, -0x3c2f5826,0x3c66b7d9,0xbd460761,0xbd5b404d,0xbc795970,0xbb5436f1,0xbbeb8ac0,0x3bcd3234,0x3b40beb6,0xbc575e70,0xbc031a88,0xbb3fe856,0x3b3d59ae,0x3aa28232,0xbac929ef,0xbb353c60,0xbb435b75,0xb9399965,0x3b76fe2e,0x3a964668,0x38a920ee,0xbb0c630c,0x3b8f2f54,0x3bfed0c2,0x3bfef3dd, -0x3bfa8b2c,0x3b85af9f,0xba87e51f,0xbb07a884,0x3b3586d6,0x3bb799cd,0x3cf594be,0x3ca79eaf,0xbcc4b44c,0xbcd6bdf4,0xbcd499e7,0xbca12298,0xbd09128f,0x3cc6e59b,0x3cd109a7,0x3c76d899,0x3c22be18,0x3c390211,0x3b103a0d,0xba1163fa,0x3add7614,0x3a55ccca,0xba852e59,0xbb6e0739,0xba923caf, -0xb7c711e3,0xbaaafc91,0xb87db562,0xbb28194a,0xbbeb968e,0xbc198eba,0xbc1946b1,0xbc1705fb,0xbc10c0ac,0xbbfbd077,0xbbca6963,0x3a606b9b,0x3bd04af6,0x3c5df5bc,0x3c53288d,0x3c353a06,0x3be58c0e,0xbb89f5ab,0xbbaffb6a,0xba0f65b2,0x3b9df3fb,0x3be59e1b,0x3c2cf4d3,0x3c834b79,0xbcb527c4, -0xbca1007c,0xbc36d1cc,0xbb556c6c,0x3ac780eb,0x3b8aaef3,0x3bae66a0,0x3bb0b58c,0x3bbc6684,0x3bb5447d,0x3b420d62,0x3b5f6200,0x3b10cd57,0x3a7c066f,0xbbbd4280,0xbc1c4344,0xbc1b50dd,0xbc10da98,0xbbc33a3b,0xbb6361b7,0xba61636d,0x3addb2cf,0x3b0042a6,0x3b9a0adc,0x3beb6379,0x3c373878, -0x3c6c3ec6,0x3c924753,0x3cb948b7,0x3ca60541,0x3ca06d93,0x3c82b887,0x3c8ae888,0x3c0c83bb,0xbc0f2789,0xbc9139b3,0x3c87924b,0x3c2c02c0,0x3c1471a3,0x3c218608,0x3c393e4d,0x3c53f83c,0x3c53a59c,0x3c2d2e20,0x3c28c927,0x3bff11f2,0x3b9163d3,0xb9bdb4e7,0xbb8f428d,0xbbf787d6,0xbbe128af, -0xbbcc1e40,0xbba53b3e,0xbbed8030,0xbbeab468,0xbbcea0fd,0xbb418e8c,0xba22b927,0x39681daa,0x3b07c33c,0x3b027563,0xb95e4327,0xbabc4b08,0xbad96ea2,0xba719b6b,0x3a6aae47,0x3b3e87d3,0x3b9e8748,0x3bf174ac,0x3c3de468,0x3c8ebcea,0x3c93df0a,0xbc0a1e79,0xbc338620,0xbc431f51,0xbc5d2f20, -0xbc8519c1,0xbc729ecf,0xbc50ace2,0xbc36f141,0xbc2a5394,0xbc1a357e,0xbc069bc4,0xbc00ae2f,0xbbf353ba,0xbc03cc4d,0xbbe96c41,0xbbf348d1,0xbbf35573,0xbbdfdd35,0xbbca4a72,0xbbd2bd74,0xbb91c53e,0xbb107b89,0x396d4aec,0xb9b61d8f,0xb9e98d69,0x38938a16,0xb9c7328d,0xba5501cd,0xbabad116, -0xba617e61,0xba28d4a3,0x3820755a,0x399eed22,0xb97b81c4,0xbaae1215,0xbbb9864c,0xbb2e2989,0xbb83bf3e,0xbb8638eb,0xbbb9c919,0xbbc9a1df,0xbbe2c4d1,0xbc0b8ebd,0xbc214741,0xbc1acc81,0xbc0fbadb,0xbc04f996,0xbc01677f,0xbbf168be,0xbbdb5327,0xbbb59811,0xbb9c8c78,0xbb80a384,0xbb53b0ce, -0xbafcc132,0xbb2198f7,0xbaea2273,0xbaa51f2b,0xba08518c,0x39e33ffb,0x3ac5bf5b,0x3b22a2e8,0x3b2a8ead,0x3b3fc86b,0x3b4e3193,0x3b4caece,0x3b421a8e,0x3b3137bd,0x3a670485,0xb9eb4e27,0xba986082,0xbadfa03a,0xbbc51b1e,0xbbdb86d6,0xbbccc898,0xbbce258b,0xbbc95b55,0xbbf67b3c,0xbbf58329, -0xbbfb2dd0,0xbbe474a8,0xbbddb380,0xbbd46608,0xbbc507eb,0xbbb7dead,0xbbaf1dab,0xbbb2b870,0xbbb1f64a,0xbb894431,0xbb90aa72,0xbb8b1849,0xbb909429,0xbb832056,0xbb79d441,0xbb6f2d46,0xbb5e4739,0xbb526836,0xbb3cf670,0xbb431c87,0xbb448c1d,0xbb43c0cc,0xbb40203f,0xbb381b72,0xbb1a87d6, -0xbb4b56e9,0xbb759204,0xbb987cc3,0xbbb2017a,0xbbcf48ac,0x3a70ecb8,0x3a9e397d,0x3a0427c2,0x3a16e3f6,0x3a446855,0x3adce75c,0x39dfd4ab,0xb8c46031,0x3a45ea6a,0xba6aa32f,0xba903170,0xbaa7fad0,0x389febdc,0x3a077831,0x38d67759,0x3a9b8e6b,0x3ac67346,0x3a22cd1d,0x39a28f5a,0x3618e608, -0xb8d9fb48,0x3882fd55,0x39ad96bb,0x3a0ea200,0x3ab90f7e,0x3afcbde6,0x3b410260,0x3aee475f,0x3ac82b97,0x3a30b93e,0x3aeb2145,0x3ac40140,0xb89fc339,0x39833faf,0x39f284ba,0x3ab4cd2f,0x3aab781d,0x3b82eb83,0x3ae6fbaf,0x3ad4b095,0x3ad5f022,0x3b8573d6,0xb8ae6c26,0xba560d1a,0x3affad6a, -0xbb08a11e,0xbb423538,0xbb3bf460,0xb935e446,0x3a970c01,0x398f2855,0x3b3aa2ba,0x3b360569,0x3ab16b8d,0xba8988b4,0xbb3b8bce,0xbb42fb58,0xbb265d17,0xbaa74fea,0x399f8af8,0x3b65cc6b,0x3bb905eb,0x3c022e09,0x3b9c35fa,0x3b385753,0x3974cde1,0x3b397e73,0x3b264028,0xba2fb851,0x398d0af0, -0x3aaf9ad3,0x3b8b3833,0x3b90efa5,0x3b7f08a5,0xb987fe9d,0x39dc4196,0x3aae224e,0x3be980bc,0xb98addb9,0xbb3a332e,0x3aece355,0xbbc7b870,0xbbeb5938,0xbbd82407,0xba7f6ee5,0x3b236c7c,0x39ad6081,0x3b98c0f5,0x3bab67a5,0x3b3813e2,0xba66753e,0xbb76edee,0xbb99f11d,0xbb7ffa35,0xbb0dfd90, -0xba0d71cb,0x3b9ec10e,0x3c02e48c,0x3c55a157,0x3bd8349a,0x3baf85ba,0x3a95276a,0x3bdcffcd,0x3baf2f83,0xbb4bf107,0xba0eb356,0x3a305c98,0x3ba9add7,0x3b9d3adc,0x3c41498d,0x3b8aa62b,0x3b830018,0x3ba8a0fd,0x3c3c0dd2,0xb9ec7cfa,0xbab77a99,0x3bf44a98,0x3abb0c23,0x3a787add,0xbadc96e5, -0x3b8d8835,0x3bea9dc0,0x3b9e3158,0x3c0add81,0x3c094e27,0x3b0b1519,0xbb89fca1,0xbc299597,0xbc54fcea,0xbc3af277,0xbbefaee5,0xbadc38da,0x3c1e3770,0x3c997e35,0x3cd53723,0x3c7419b1,0x3bc92ed0,0xbae7999a,0x3bd3acfb,0x3bcb2684,0xbb885abe,0x3aebc617,0x3bd1ce77,0x3c68084f,0x3c684c67, -0xbc93b768,0xbc441de9,0xbc81674f,0xbc2a5e5e,0x3b9b232c,0x3bca0068,0x3af35512,0xbc0ea8cf,0xbc0b2242,0xbb0cff2a,0x3982f1cb,0x3c1186ab,0x3bfaea15,0x3af4a559,0xbb002053,0xbac66f62,0x3c113a8d,0x3c338c08,0x3c673940,0x3c91f28e,0x3c97b896,0x3c5b5d50,0x3bd55966,0xbbc840fe,0xbc78d5e7, -0xbc82923b,0xbbf8548d,0x3c160055,0x3cd64dc2,0x3c848232,0x3c1ff47b,0x3c0a2025,0xbc0873d7,0xbc5a115e,0xbc5a67b7,0xbc8c6d1a,0x3c852022,0x3c870c07,0x3c92c9e1,0x3b3748dd,0xbcb48a74,0xbcc04cf7,0xbc64351e,0xba86988c,0x3bb7fa6a,0x3b43012f,0xbb9d2cb1,0xbc0b98cd,0xbbbf4408,0x3af56dfe, -0xbb0a1b52,0xbb337996,0xbb888143,0x3a56fbb9,0x3ad19ed1,0xbb299bc4,0xbad4b433,0xbb7405cd,0xbb2f7ea1,0xbb5d91ab,0x3b8ad064,0x3ca4041a,0x3c7e86c6,0x3b47a341,0xbc761546,0xbc0541a4,0x3b5c7bd7,0x3c51da24,0x3ce9bd97,0x3cb4df2f,0xbba52b36,0x3bae0252,0xbd21e1e7,0xbd9c461f,0xbcedbddc, -0xbc0bd070,0xbc4d7fb3,0x3c06de6d,0x3bc5773c,0xbbf5c876,0xbbec8404,0xbb898bf5,0x3ae6fb6b,0x3b5dfc60,0x39dbbbbd,0xbb9a2431,0xbb691b61,0xba83ca3b,0x3b73f24e,0x3ac3999b,0xb92c0c57,0xbae3639b,0x3b6491dd,0x3ba9c0db,0x3b8cfcb2,0x3b53c6e4,0xba41cc62,0xbb744b0f,0xbb882056,0x3a905e01, -0x3b1ab3bc,0x3ced3372,0x3c88e860,0xbd08297d,0xbcb60d81,0xbc890472,0xbc4f883f,0xbc828321,0x3cfeddcc,0x3d2f762b,0x3cef531f,0x3c88aa1b,0x3c09a636,0x3b64de6e,0x3af92c62,0x3b18c14f,0x3a96f53a,0x3a7254cd,0xbb087821,0xbad93625,0xba291812,0x3a58431c,0x3a49e4f0,0xba8c1fa9,0xbb8713cc, -0xbbe001c7,0xbc023555,0xbc01e3b6,0xbbd05ad4,0xbb8f674f,0xbaac0dcf,0x3b6cf976,0x3bfc2675,0x3c43fb2a,0x3c1c9342,0x3b8cafe0,0xbbb83f91,0xbc1bf402,0xbbf28847,0xbb86df2b,0xba47c610,0xb8283455,0x3ba9b0b9,0x3c67666b,0xbcbdc7e9,0xbc8bef5b,0xbc586d1d,0xbba2717e,0x39540649,0x3996be2a, -0x3ab21008,0x3bb026ae,0x3b99e629,0x3b7474ef,0x3ab278c7,0x39b3c3b3,0x38284fc8,0x3ac80e68,0xbb9f7f3d,0xbc08027f,0xbc2c0cc1,0xbc2b064f,0xbc19d64f,0xbc0c7bca,0xbba41f62,0xbac6903b,0x3a2f3f55,0x3b8b1420,0x3c0b0771,0x3c6ded98,0x3c7d358e,0x3c8f4b33,0x3ca0339c,0x3c957b3c,0x3c7ebaba, -0x3c25455c,0x3c0d2ba5,0x3aa4d4c2,0xbc397823,0xbca387bc,0x3c8e29e2,0x3c77a49d,0x3c7b94f2,0x3c74c801,0x3c6dc85a,0x3c69e216,0x3c51e837,0x3c3baea6,0x3c3d5228,0x3c299101,0x3bfbb109,0x3b86bba0,0xba22c390,0xbbb894f9,0xbbd56ee7,0xbbc487b7,0xbb8931c5,0xbb962e4c,0xbb980c70,0xbba0247f, -0xbb4e5c54,0xbb124a63,0xbad59264,0xb8441ea8,0xb9a9bcfe,0xbb05f4a7,0xbad18d6d,0xba087414,0x3a1998a6,0x3b2210ca,0x3baff024,0x3c05f01f,0x3c2360db,0x3c47f3a2,0x3c80cf2f,0x3c89e65e,0xbbcb62a3,0xbc11248c,0xbc15aa80,0xbc1ac574,0xbc310ae7,0xbc0f6868,0xbbc849d9,0xbb871d4f,0xbba63d9f, -0xbbb20a72,0xbbcde4f4,0xbbdaff1c,0xbbfd01f7,0xbc0ef16c,0xbc0769c6,0xbc0b8070,0xbc11af25,0xbc073138,0xbbf64936,0xbbdfbbe2,0xbbb681c3,0xbb8f54c5,0xbb472bf5,0xbb34145d,0xbb076cad,0xba8eff3e,0xbacb6b8a,0xbb06c3d0,0xbb28d3ca,0xbb167e79,0xbb056f32,0xba582a72,0x389bc3e9,0x3a2e8d07, -0x39fe2ac3,0xbb5cbdd5,0xbbd643d6,0xbc00e763,0xbc01c7da,0xbc117999,0xbc1b8299,0xbc26964d,0xbc3a253b,0xbc491e28,0xbc3dd60d,0xbc2f045b,0xbc21f333,0xbc16b4a3,0xbc0acdf5,0xbbff446c,0xbbee8e43,0xbbdf073e,0xbbcd4873,0xbbbd8b25,0xbba91322,0xbbb41e5b,0xbba1b933,0xbb8ea464,0xbb726761, -0xbb369a3e,0xbafafe1a,0xba70dd4f,0xba7a25b3,0xba2e832b,0xb9f3ff11,0xb97f4a42,0xb9567e7b,0xb9d75460,0xbb19ac7a,0xbb86cf67,0xbbaa4612,0xbbbe8a2b,0xbbe66ddf,0xbbfcad3d,0xbbf4c6b4,0xbbf9cf08,0xbbfb5f39,0xbc04bad7,0xbc07c880,0xbc107ed8,0xbc058167,0xbc020b30,0xbbf9867e,0xbbeea78e, -0xbbe25dfb,0xbbd6193f,0xbbd29278,0xbbcee105,0xbbc2cc2b,0xbbc3a6b2,0xbbbe9213,0xbbc11105,0xbbb0c607,0xbba640f3,0xbb9c3e78,0xbb92d506,0xbb8b0c9f,0xbb7decb7,0xbb822d27,0xbb839f11,0xbb86122d,0xbb8a41e6,0xbb8d2459,0xbb84b8a8,0xbb96cfc5,0xbba32c9d,0xbbb98717,0xbbd0f4f3,0xbbd2bb30, -0x3acf1324,0x3aecd89c,0x3a8c84e7,0x3a7586be,0x3a8860fb,0x3b1f56ff,0x3a3f147d,0x398facba,0x3a966084,0xba34a6d6,0xba8109c6,0xba81f96d,0x3985dcaf,0x3a491d3f,0x3a13e39a,0x3ad03420,0x3b00f029,0x3aefdad2,0x3a8c1286,0x3a49bbf3,0x3a1bfc88,0x3a6aa383,0x3aa7a677,0x3af3fe29,0x3b20a9df, -0x3b36887b,0x3b558921,0x3b20bd57,0x3b0ff7e0,0x3abe9078,0x3b1d40c0,0x3b0bb0fe,0x3a3f9452,0x3aa2209d,0x3ac6dfe8,0x3b1f8bc7,0x3b0830fd,0x3b806525,0x3aea1002,0x3a5f9748,0x3a843a05,0x3b96fac9,0xba0c9e14,0xbad41ca0,0x3aa0f85d,0xbb527d60,0xbb84c438,0xbb504768,0xba6d3eef,0x3a27c005, -0x3a0a8a36,0x3b49e8ef,0x3b681b7a,0x3b5c385b,0x39e9af13,0xbab86eac,0xbaccef90,0xba499e29,0x3a811c2b,0x3b5ea64a,0x3bc08a80,0x3be91316,0x3bf32228,0x3b9840fb,0x3b3ce28b,0x3a82d5dc,0x3b675d13,0x3b68d23a,0x3a5fbb64,0x3b14ad0a,0x3b530e85,0x3bba0920,0x3ba06739,0x3b8c204d,0xb7520a9c, -0xba60b869,0xb9665f70,0x3bf8aa2a,0xbaea103b,0xbb89c921,0x3a3d4e02,0xbc0cb139,0xbc229777,0xbc0b8e0f,0xbb67a8fe,0x39aed318,0xb9f259b9,0x3b8db87a,0x3ba7a939,0x3bb192c9,0x3a389b06,0xbb0fef47,0xbb511e8f,0xbad208b8,0x3a3e1ba8,0x3b8564d9,0x3c06faf6,0x3c26fa77,0x3c41426d,0x3be5eca6, -0x3bc40515,0x3b41693b,0x3bea6286,0x3bc2b321,0xba8beb75,0x3b1b08ac,0x3b81c1d5,0x3c000d53,0x3bca2ba7,0x3c24f8d2,0x3b4634d7,0x3846f9b6,0x3ad46629,0x3c511cac,0xbb8201db,0xbbe3402a,0x3b10ae19,0xbbca39cd,0xbbf8e8d5,0xbc14b92c,0x3a4b7ab8,0x3ba479b9,0x3b8550f3,0x3c0e0635,0x3c274c26, -0x3c0f0ff3,0xba4acbe2,0xbbfbc29e,0xbc24b285,0xbbdb4124,0xba6812c9,0x3bf115ee,0x3c86e443,0x3cb4061e,0x3cb1e14f,0x3c399102,0x3b859359,0xb938fcd9,0x3be279fa,0x3bfa7eab,0x39c7afb3,0x3be43c59,0x3c2cf16a,0x3c895e51,0x3c649ea2,0xbc6bb0ea,0xbc131a0b,0xbc7d4af6,0xbc462445,0x39e002db, -0x3bba2883,0x3bba6fda,0xb88d23d2,0xbb3c69e1,0xba58ce8a,0xba69df85,0x3adbd522,0x3afc1abd,0x3bb96f79,0xbba65b0e,0xbbc8699a,0x3b6d9642,0x3c1cda7a,0x3c7c4fb7,0x3c9b0826,0x3c7e6532,0x3c186e06,0x3ae4b83a,0xbc1e2f32,0xbc6be42c,0xbc3344ef,0x3bd4970b,0x3cb42ee9,0x3cd3d887,0x3c9602d0, -0x3c020076,0xb9efb38d,0xbc0f82dc,0xbc2173e6,0xbbfc474b,0xbc45c0df,0x3bf4a485,0x3c7e4827,0x3cd62e8b,0x3c709441,0xbc564e55,0xbcbd106a,0xbc9baab6,0xbbcffa4c,0x3a10b66c,0x3a4af4f1,0xbb23886c,0xbbb01026,0xbbc00dc9,0xba62002a,0xbb4629ed,0xbaa4053d,0xbb3cb07e,0x3b83ff38,0x3bb772f0, -0x3b7dbd98,0xb959c4bf,0xbb097234,0x3ad5063a,0x3b260120,0x3c1d4026,0x3ca9ec2f,0x3bc2f52b,0xbc0bcf91,0xbcbe6af9,0xbc0f536d,0x3bca3e8b,0x3c6794c5,0x3cc8ccbc,0x3c697da0,0xbc8fcbe7,0xbbaf5e10,0xbc9575f0,0xbd96cc26,0xbd4c2416,0xbcec08ae,0xbc154896,0x3ae3c2ab,0x3ae4c533,0x3a2b7f9a, -0xbb88ce7a,0xbb6942f3,0x3a51914b,0x3b552f84,0x3a9c04a2,0xbbb3b1b0,0xbb5cc14e,0xbb0c84cb,0x3adf654a,0x3b31ab78,0x3b2529f7,0x3b2304c9,0x3b6d410a,0x3b1fc56a,0x39a88df6,0xbb217b58,0xbbc2621b,0xbbcb3df9,0xbbd21069,0x3a1410ed,0x3c0911fa,0x3c76f664,0x3b11f9e5,0xbccc08f5,0xbc5a4120, -0xbbe4ee70,0xbbf94022,0x3bad8052,0x3cabe2cb,0x3d240bf9,0x3d1a9aed,0x3cc6c922,0x3bffaa4c,0x3bd90abf,0x3be03791,0x3b5b88e1,0x3a0c082a,0x3a2b4b11,0xba72384b,0xbb07b8fa,0xba85ffe4,0x3ad2179b,0x3a85c184,0x3a61aadc,0x39a7ea28,0xbb25e4e2,0xbb9e6a6b,0xbb984a79,0xbb57d177,0xba5e4377, -0x3b7b3706,0x3b9f5edf,0x3bf5e307,0x3c086eba,0x3bc0e3cf,0xba66a190,0xbc355fef,0xbc253b66,0xbbddbf15,0xbb9b0220,0xbbbebc22,0xbbba8b05,0x388a2282,0x3bb8feb9,0xbc5a7d3b,0xbc2ca7c0,0xbc46e0df,0xbbd7e444,0xbb0c4c82,0xbb1d8f92,0xbac7ab99,0x3b8d2ed3,0x3b09fdd1,0xb7e74ec6,0xbabb88ac, -0xbae16d50,0xbac5e5ec,0xb98d083d,0xbb616f2c,0xbbc83061,0xbc339d62,0xbc32d690,0xbc3770c3,0xbc337dd2,0xbc0df130,0xbbaaa0ba,0xba819fdb,0x3b2ccf5f,0x3bee6176,0x3c4f32f4,0x3c603924,0x3c7f1875,0x3c8144d2,0x3c7302f9,0x3c28d2d4,0x3b93ae03,0x3b06d826,0xbb0b16f7,0xbc0a5c7a,0xbc404b27, -0x3c2e5a57,0x3c444a15,0x3c516076,0x3c3ba53a,0x3c32d6c4,0x3c20c78c,0x3c059b91,0x3bf5d9e0,0x3c02a34e,0x3c0db5f8,0x3c01a180,0x3be31e95,0x3b4f9857,0xbb083826,0xbb97f697,0xbbacf969,0xbb920da1,0xbb578386,0xbb3574b7,0xbb2225c1,0xbb1c27a9,0xbb23b26c,0xbb3436d5,0xb999af06,0x39c330df, -0x368a6fa8,0x3b20cbd5,0x3b839c41,0x3bafd961,0x3bee23a1,0x3c2fb5c1,0x3c65f025,0x3c573f31,0x3c43d7c3,0x3c3b13ef,0x3c2b5ed1,0xbaa00262,0xbb526073,0xbb457bd3,0xbad4b624,0xbabade90,0x39ee381a,0x3b37d6b7,0x3b9afcc7,0x3b15ed8c,0x3a3a5a4f,0xbb096dc4,0xbb597236,0xbbbc1f33,0xbbe4a239, -0xbbeb8a63,0xbbf8cd23,0xbc0ad054,0xbc000810,0xbbeb2f26,0xbbced5bf,0xbbc0645a,0xbbb2e812,0xbbad0555,0xbb7b6638,0xbb153ada,0xba200dc8,0xb9d2c662,0xb6c2a5e2,0x3a0fb431,0xb9a1c23e,0xba89f441,0xba5a9062,0xba1b9374,0x38ff20e0,0x3a3e7270,0xb95d299c,0xbc156ad1,0xbc1edd85,0xbc279d66, -0xbc23d00e,0xbc30f9e5,0xbc3571c4,0xbc3dbc82,0xbc47174b,0xbc3881a6,0xbc2b3591,0xbc1f4a33,0xbc0f5cc0,0xbc03dd85,0xbbf75cd6,0xbbf2705b,0xbbe891d7,0xbbe23359,0xbbd99094,0xbbd585f8,0xbbd8a61b,0xbbcccbf8,0xbbbfa00e,0xbbb2c92a,0xbba3876b,0xbb9a94e1,0xbb8965b7,0xbb9d52d1,0xbba8c389, -0xbbb15c0d,0xbbaea555,0xbba807f5,0xbbab9aa0,0xbbc34e89,0xbbe71c72,0xbc0419ee,0xbc0f8f26,0xbbdf2ee1,0xbbe9bcf6,0xbbecc35e,0xbbf26890,0xbbf55288,0xbbe91bde,0xbbeea3a6,0xbc017dc3,0xbbf53f3d,0xbbf0784c,0xbbe76b78,0xbbe40b22,0xbbdae49e,0xbbcf135b,0xbbcddc5c,0xbbcd5019,0xbbcc2963, -0xbbcd81f9,0xbbcd3834,0xbbd05437,0xbbc28798,0xbbb828e0,0xbbadef8f,0xbba6521c,0xbb9ec5f5,0xbb93a24b,0xbb991db5,0xbb9c369a,0xbba31bff,0xbbac1a05,0xbbb76f8d,0xbbbe47db,0xbbc5d83a,0xbbc7ca3d,0xbbcb2fa1,0xbbd28422,0xbbc70228,0x3afacc1a,0x3b0c14da,0x3ac5cd44,0x3ab4f059,0x3ab4a46d, -0x3b2a5f99,0x3a7cfc1e,0x3a29756b,0x3aad9d2e,0xb9aea753,0xba27fc2d,0xb9abd1e1,0x39cb0dfb,0x3a5363cc,0x3a478967,0x3adf3fa0,0x3b06627e,0x3b16c509,0x3ace2d53,0x3aad57a3,0x3a76e2a2,0x3ab10645,0x3aebedd5,0x3b2fdb09,0x3b43b0f8,0x3b4c90d5,0x3b44c1b7,0x3b2c135d,0x3b2181ff,0x3b0bc6ec, -0x3b1eb588,0x3b0f51f2,0x3aae5a2c,0x3af93059,0x3b123f5d,0x3b4cdb86,0x3b23b05b,0x3b6b008e,0x3af524d4,0x3a5e9c52,0x3a579d2b,0x3b73e09e,0xba37ca22,0xbafa06f5,0x391ad925,0xbb750aac,0xbb8c3744,0xbb2c379e,0xbac7aceb,0xb915eeaf,0x3939ff27,0x3b38ef7d,0x3b6ea60f,0x3b79e242,0x3aeca838, -0x39be1b3c,0xb951d7bb,0x3a453c45,0x3b308b4e,0x3bb8584f,0x3bed93a9,0x3bf915de,0x3bc6e083,0x3b8e7063,0x3b445c9e,0x3b14ba07,0x3b5b8430,0x3b5f4396,0x3b001981,0x3b6cf184,0x3b95f0e1,0x3bd4b7c2,0x3b9f974f,0x3b94d128,0x3a44e4ea,0xba03c767,0xba05e390,0x3bbfd0f1,0xbb199a0c,0xbb8f3935, -0xba4d7d97,0xbc1d2e67,0xbc358715,0xbc000c38,0xbbb6b943,0xbb080973,0xbb0a5e90,0x3b53f3e8,0x3b84a443,0x3ba2c897,0x3aecd7fb,0xba10c5f0,0xbb03279d,0xb8a5723b,0x3b27ad55,0x3bf1ced7,0x3c23fa43,0x3c302635,0x3c13d6aa,0x3be50ed8,0x3bca43de,0x3babfade,0x3bbafc32,0x3b949b04,0x3a74c98b, -0x3b952600,0x3bd49f67,0x3c1febc0,0x3be42bcb,0x3bfd60bb,0x3b12595f,0xbac4db46,0xba2f98bd,0x3c1eaf07,0xbbce06ed,0xbc2c01ad,0xbb2a08e5,0xbc474477,0xbc621817,0xbc30d9a4,0xbb7286e6,0x3a6bbca8,0x3b25c750,0x3becb021,0x3c1f4122,0x3c2fb63b,0x3b3c1d6f,0xbb292f39,0xbbad4381,0xbad6e72b, -0x3b9e56ac,0x3c7135ff,0x3ca846cd,0x3cb69dff,0x3c835637,0x3c164465,0x3b802e84,0x3b7361c1,0x3bbb3487,0x3bd06e2b,0x3b856b9b,0x3c2b850a,0x3c5ff1ac,0x3c9550f5,0x3c50402d,0xbba1fa07,0xbb896f5d,0xbc1b0393,0xbc06b66f,0xba8b43fc,0x3be08a7f,0x3c25276d,0x3c193d2d,0x3ae16f30,0xbad5ea5a, -0xbb47d471,0xbb687a5c,0xbac5e8b3,0x3bf8fba4,0xbbf2a63f,0xbc2ac4bf,0xbb79a44e,0x3ac722e1,0x3be7b804,0x3c1883a7,0x3b9eebc9,0x39d7dc66,0xbbd46b1d,0xbc496cf0,0xbc476029,0xbc1365a6,0x3c828d5a,0x3ce5c555,0x3ca19266,0x3c7f4df2,0x3b7c7f1b,0xbc15dd83,0xbc10c366,0xbbeb1bd7,0xbbb894e6, -0xbb71d126,0xba64d45a,0x3c1d3b60,0x3cd8da50,0x3ca0de2b,0xbb8aab27,0xbcb2e5c4,0xbcbe4bbd,0xbc404478,0xbb4f7b30,0x394a8151,0xbaaa1af3,0xbb145448,0xbba08097,0xbb79f437,0xbaf829f1,0x3ae8af3a,0x39536514,0x3bc04941,0x3bf14d8a,0x3c0c255a,0x3b033e1f,0x3ab611f2,0x3bc970c1,0x3c290c38, -0x3c622b8c,0x3c502a09,0xbb7243bb,0xbc88a2ea,0xbcd886a0,0xbbe9b79c,0x3c06b6f7,0x3c47e84f,0x3c60998b,0x3b0a14a3,0xbcc2198b,0xbc3f6bf8,0xbc187340,0xbd75423f,0xbd766b15,0xbd2b737b,0x3a9ed42d,0xbbba1da7,0xbbc6e140,0x3b6f1efa,0xbadb11c1,0xbaef1703,0x39787966,0x3acade2e,0x3a2a8e1c, -0xbba46401,0xbb5f2ff9,0xbb7cefab,0xbad9b5ba,0x3b0afc7b,0x3b7bb1fe,0x3b891720,0x3b25f3f0,0xba28a19b,0xbb9bbbca,0xbc026cc3,0xbc205a1d,0xbc03f4af,0xbbeb4f50,0x3b3097cf,0x3c9c9a42,0x390f0837,0xbc69ab9a,0xbc8fc10d,0xbb8dec75,0x3b8c264c,0x3b06e1a6,0x3c269e35,0x3b9d2dcc,0x3c91f963, -0x3d0c817d,0x3cea85eb,0x3c57e091,0x3c0d8dba,0x3c1a707e,0x3bcd32a2,0x39faba2a,0xb875e40f,0xb9640012,0xbad20324,0xba7c1d75,0x3920f06c,0x3a5ed75e,0x3b2a2284,0x3b871eec,0x3ae7ddd0,0xba387ae4,0xba90e79f,0xb8ff6d29,0x3b20a926,0x3bf63b12,0x3bc89a72,0x3bc5d80e,0x3b828490,0x3b36aff1, -0xbb406b09,0xbc15c0bd,0xbbcbb427,0xbb569259,0xbb3f8dca,0xbbd16a9b,0xbb942656,0x3bb8d2f1,0x3992dcba,0xba7b5a56,0xbb485055,0xbc1147e9,0xbc004fab,0xbba49b4c,0xbb333c52,0xbad9aa81,0x3b3b9c0a,0xb890f2d5,0xbb2e6ccc,0xbb74ec9f,0xbb3a7cf8,0xbb0e739d,0xbaf01839,0xbae42bc7,0xbb7f00d0, -0xbc1eb646,0xbc2a5527,0xbc39eee9,0xbc2d02a9,0xbc23b4d2,0xbbf8bf3e,0xbb47bc45,0x3aaadb27,0x3bc03b3f,0x3c1a06aa,0x3c3c9374,0x3c5d0bc9,0x3c584b29,0x3c3748b1,0x3bc7cbd0,0x3b0bd985,0xba47d682,0xbb38b816,0xbb8e0e43,0xbb0c9a56,0x39b346c8,0x3b4fa167,0x3ba98fca,0x3ba1bdb0,0x3ba439d0, -0x3b832cf8,0x3b48e254,0x3b35a5c7,0x3b5bb7d9,0x3b9d6419,0x3baf8a0c,0x3bdca0a4,0x3ba2e356,0x3a9e6c31,0xbb0913da,0xbb806a8c,0xbb9fed7f,0xbb8030ce,0xbb55d571,0xbb1339db,0xbaf468de,0xbab66693,0xbaf0349d,0x3ac25b2c,0x3b6f7849,0x3babf227,0x3c10f16d,0x3c2d3736,0x3c44b3e4,0x3c5b297a, -0x3c827c2b,0x3c954a13,0x3c77aaf7,0x3c37a238,0x3bd97dd1,0x3b20dcf2,0x3bd31de1,0x3baa5b9f,0x3ba2c95d,0x3bd4dc34,0x3bf29d32,0x3c0d8912,0x3c232c76,0x3c3bdb78,0x3c0fbde4,0x3be21eac,0x3b7d602b,0x3ad2c813,0xbafa7727,0xbb709f85,0xbb954ca2,0xbbac12e1,0xbbde65f3,0xbbca5b30,0xbbbc6fcc, -0xbba894db,0xbba93f10,0xbbab3e31,0xbbb5be0c,0xbb81fe7f,0xbb23a5b1,0xba89080e,0x3a08940e,0x3b202cd5,0x3b97a317,0x3b6de04f,0x3b2e29a0,0x3b13d8d3,0x3b01a93f,0x3b294209,0x3b825080,0x3bb68d6e,0xbc008343,0xbbf77338,0xbc096be5,0xbbe65216,0xbbff1045,0xbbfc2516,0xbbf8bb49,0xbc0164ef, -0xbbfc802a,0xbbffcce2,0xbc00eb8c,0xbbf4d88b,0xbbf1655d,0xbbfa2ee4,0xbbf04795,0xbbe50456,0xbbdf30c8,0xbbd7531c,0xbbdbc847,0xbbd3fa63,0xbbc82438,0xbbbc8afe,0xbbb2aa08,0xbbabf788,0xbba9e702,0xbba3c1f3,0xbbbdc78c,0xbbd84e7f,0xbbe9e609,0xbbeffdad,0xbbe86e6b,0xbbe8b6a2,0xbbd89017, -0xbbda70bf,0xbbeacab0,0xbbfee574,0xbbb54949,0xbbb1f52e,0xbbc160b4,0xbbc861f2,0xbbcdb319,0xbbace48d,0xbbb1b728,0xbbbff26d,0xbbc4eb71,0xbbc7db1b,0xbbc90116,0xbbd0b84f,0xbbd0ea63,0xbbd1e13e,0xbbcdb3fa,0xbbcaa3aa,0xbbcc1df0,0xbbcac059,0xbbc8b0a6,0xbbc50e67,0xbbbde224,0xbbb705ce, -0xbbaffc7d,0xbbab2479,0xbba5f1ce,0xbb9d7fef,0xbba34e89,0xbba53b11,0xbbabab08,0xbbb1007b,0xbbbad443,0xbbc675d6,0xbbc6b6a4,0xbbc4726e,0xbbbc36dd,0xbbb45d6f,0xbbc29c1a,0x3ad51937,0x3af8d678,0x3ac6ec2b,0x3abcb597,0x3ab2a18e,0x3afde28f,0x3a68d425,0x3a31ce36,0x3a4755ae,0xb975082a, -0xba0a5f9f,0xb95b9064,0x393d59a9,0x3a084603,0x39db3cea,0x3ab03ae2,0x3ad032ff,0x3afcf346,0x3ac2749f,0x3aab3795,0x3a6395c0,0x3aa60b20,0x3adbc39d,0x3b26e2d2,0x3b331df3,0x3b333cad,0x3b0f3327,0x3b107084,0x3b0ca951,0x3b1617b7,0x3ae81f1a,0x3ac9fe74,0x3a98784a,0x3afdb7eb,0x3b165636, -0x3b469986,0x3b129970,0x3b275f93,0x3acfc6b2,0x3a6b691c,0x39e3b1cb,0x3aa9404f,0xba520e05,0xbaf77cb8,0xbae8fe45,0xbb78c657,0xbb7df09f,0xbb1db7b1,0xbaf113fd,0xba7f8d70,0xba839928,0x3b0524a9,0x3b437e69,0x3b38f03a,0x3b1b33d8,0x3ad4c166,0x3a729cc4,0x3af30386,0x3b66c5d3,0x3bc7c597, -0x3beb5a7c,0x3be27bc3,0x3b8cd954,0x3b735858,0x3b3d4d98,0x3b5b150f,0x3b1ccad3,0x3b103ec6,0x3ade17b8,0x3b802c30,0x3ba3adf1,0x3bc8fad8,0x3b811e67,0x3b80fae0,0x3ae92d9a,0x39e99999,0xb90df2af,0x3b1bb936,0xbaf44979,0xbb66316c,0xbb7266cd,0xbc17748a,0xbc351e54,0xbbfaa721,0xbbe3f182, -0xbb72263d,0xbb92c57c,0x3b00a3d1,0x3b237ee5,0x3b1ccf96,0x3b043e0a,0x3a00ebd5,0xba5e6eb0,0x3a6d357b,0x3b569103,0x3c02c55e,0x3c1f3a04,0x3c1e01e1,0x3bc2baf5,0x3bd060f5,0x3bbd5650,0x3be262bb,0x3b4b5d83,0x3afb4e74,0x3a92742d,0x3bb9fa75,0x3bfd24a0,0x3c2287cc,0x3bd1f700,0x3b8174d5, -0x3ab813d9,0xbaf713b5,0xbb1a3c77,0x3b357eac,0xbbd95f05,0xbc38e07b,0xbc01c072,0xbc81dfbc,0xbc8b6b5d,0xbc1b2c98,0xbbeaad9d,0xbb683db4,0xba918c6f,0x3ba906be,0x3bf978e4,0x3c07b15a,0x3bad9e33,0x3b2b6c74,0x39a3ba3f,0x3b5e97aa,0x3c10ca48,0x3c90fbf0,0x3cac4905,0x3ca3d0ab,0x3c34e411, -0x3c053b46,0x3ba96a45,0x3c03e592,0x3b74dd7c,0x3b531294,0x3b850654,0x3c3aee64,0x3c732205,0x3c8c9262,0x3c1c8ee5,0x3bff5a95,0x3b4c516a,0x3aab177a,0x3a713570,0x3aaddda7,0x3c1de207,0x3c6a9a4b,0x3c871b84,0x3bba2428,0xba9e9a57,0xbb38d4c3,0xbb8fffb3,0xbb20f2f8,0x3bfed4f7,0xbbf5f551, -0xbc42f12e,0xbc2b1680,0xbc04d5e5,0xbbb94513,0xbbc5d678,0xbbff2f06,0xbc1b8b8a,0xbc7d269d,0xbc7501a2,0xbc39e82c,0xbc0bacd6,0x3c84beba,0x3cbf27d5,0x3c25e9ee,0x3c0be445,0xb99e897a,0xbc4477ea,0xbbc2b848,0xbb5d1d81,0xbb9b43bf,0x3bc101c2,0xbbd62d67,0x3b0c90b1,0x3c954dba,0x3c899f25, -0x3b3c8e1f,0xbca5441f,0xbcd8a8ac,0xbc7613c7,0xbb98e2b6,0x3a026a0f,0xb9d37b90,0xb9bcd9c4,0xbb768803,0xbbb75369,0xb9bf71f3,0x3b820b90,0x3b450ae2,0x3bbabfaa,0x3bf5155f,0x3c3e6f7f,0x3bc89dbb,0x3bdc53f4,0x3c257f3d,0x3c85934d,0x3c6636d8,0x3ad5c016,0xbc433ff1,0xbca9731f,0xbcb764bd, -0xbaf4338a,0x3c267882,0x3c108a6f,0x3ac1e57d,0xbc2150c8,0xbcb90686,0xbc61178f,0xbc3eb64e,0xbd1ebf02,0xbd4db1fd,0xbd1bccec,0x3b47f68f,0xbbf37215,0xbc0e81b2,0x392c710e,0xba83050c,0xb9d5fa59,0xb91b4f1d,0x3a01968d,0x39572095,0xbb578814,0xbb82a6d3,0xbbb9f2ce,0xbb94a259,0xba346d76, -0x3ab3f131,0xb93d4293,0xba9cf257,0xbb7f8db5,0xbc1533f6,0xbc36e4e4,0xbc351083,0xbc10c1e6,0xbb866dea,0x3bc737b6,0x3cb94250,0xbc35d4e6,0xbcc73971,0xbc58a93c,0x387d4c98,0x3c45ffcd,0x3c85acb5,0x3b332bda,0xbaa0c864,0xbb55f6c8,0x3ca62c73,0x3cc81e63,0x3c8b10f6,0x3bc82f70,0x3bbf3805, -0x3be79f2f,0x3abe2997,0x39916c12,0x3a3b6a8f,0xba0687cf,0xba90716a,0xbae24be5,0x39e68471,0x3b621386,0x3bc37f22,0x3b94f726,0x3b42bde8,0x3b04440c,0x3b69fe9c,0x3bb39de1,0x3c0ecaef,0x3bf830a7,0x3b965f20,0xb98f5736,0xb8e414cb,0xbb659f8a,0xbb8d0aba,0xbb4ef7b9,0xba8dc6eb,0xbb142cf1, -0x3ae5d67a,0x3bc8f790,0x3c6508ec,0x3b5a37df,0x3be1c1d0,0x3b4386f2,0xbb6cdf19,0xbbdc470f,0xbbb392cc,0xbacb6bd4,0xb9988285,0x39b2fdd0,0xba84033c,0xbb21628e,0xbb50e360,0xbb392310,0xbb025110,0xbadcd6b8,0xb92f47e8,0xbadfbc12,0xbbc27115,0xbc09a760,0xbc23bcdd,0xbc154cfe,0xbc11e38f, -0xbbf4e6f2,0xbb8e776d,0x39b973a6,0x3b955170,0x3bea3922,0x3c17f2e3,0x3c27baac,0x3c1d8a6b,0x3bc81878,0x3acf81e5,0xbab57ebd,0xbb674d33,0xbb947e65,0xbb5defb2,0x3b5bba91,0xbc0f95e4,0xbbca8b5b,0xbb5d6b45,0xbabaf56b,0x3956f32f,0x38266919,0x38810972,0xb87e7366,0x39f2dbe4,0x3a98e2ed, -0x3acd13b9,0x3b81f9cf,0x3b8d5cc8,0x3b551110,0x39b138ed,0xbafd233e,0xbb8fd6b3,0xbba3bc4b,0xbba251f9,0xbb824c5d,0xbb141da7,0xb98b8abe,0x39dd2921,0x3b948c13,0x3bf97ad8,0x3c1f1f36,0x3c6011ef,0x3c804872,0x3c8be663,0x3c87f6bc,0x3c8576d4,0x3c7df457,0x3c481bb0,0x3bfdd21c,0x3a8048bd, -0xbba5fb46,0x3c3f986b,0x3c37c377,0x3c2fd5bc,0x3c344edb,0x3c3ecfde,0x3c42b461,0x3c425be3,0x3c49f631,0x3c310f81,0x3c21a9c2,0x3c07f599,0x3bc7bf54,0x3b3b4655,0x3aa2ca06,0xba51e8bf,0xbb18defb,0xbb9ea018,0xbb8c38a8,0xbb85d62d,0xbb80610f,0xbb87c202,0xbb937fa8,0xbba1e1cf,0xbb7d83ef, -0xbb3f711f,0xbb0a20ca,0x39fbf9f8,0x3b4bf780,0x3bc818e3,0x3bc7e51f,0x3bcacde4,0x3bcfbaf3,0x3bc9eeae,0x3bdca6bc,0x3c0bb338,0x3c2b87df,0xbb702819,0xbb518118,0xbb8b157b,0xbb322226,0xbb567d13,0xbb505275,0xbb411537,0xbb4437da,0xbb7b7b5d,0xbb9f9f1f,0xbbbf65ae,0xbbcdc568,0xbbdf340d, -0xbbfd2947,0xbbecf9f9,0xbbda60e7,0xbbce4504,0xbbc56475,0xbbca521a,0xbbbc1744,0xbbaedd0f,0xbba1a917,0xbb976536,0xbb935268,0xbb904daf,0xbb8fab90,0xbb9aa2f4,0xbba98741,0xbbaebc4b,0xbbb0d72e,0xbba5da3e,0xbb99d3a4,0xbb7fd02d,0xbb5eed91,0xbb5d8f4c,0xbb75b307,0xbb5d54ab,0xbb42d570, -0xbb74b574,0xbb8271c4,0xbb8b41b7,0xbb4d7ed2,0xbb5bb44b,0xbb63ab09,0xbb863dc9,0xbb9186d1,0xbb9dd4a0,0xbbaebb1f,0xbbbac0a8,0xbbcbbeca,0xbbb9c880,0xbbb29f06,0xbbbb2717,0xbbb2d88b,0xbbacd4a3,0xbba57d1e,0xbba4e770,0xbba2c372,0xbba03f29,0xbb9e67a2,0xbb9c5088,0xbb9941cb,0xbb977562, -0xbb93c621,0xbb92db47,0xbb8d46fb,0xbb8b7901,0xbb8c7363,0xbb8af745,0xbb891921,0xbb816347,0xbb69dc0e,0xbbac7679,0x3a9fe276,0x3ac5c9c0,0x3abbcc34,0x3aa558a0,0x3a936475,0x3a7dc11e,0x3a532b7d,0x3a19d978,0xb95cde03,0xb9a6007c,0xba226a00,0xba45fc16,0xb9841431,0x389cceca,0xb93484fc, -0x3a543ba2,0x3a81963b,0x3a9ab02f,0x3a909ab5,0x3a8b50e9,0x3a5c92e2,0x3a91fbd7,0x3abb3c57,0x3b06d58d,0x3b154d19,0x3b125ec5,0x3ac5c94e,0x3ae7556d,0x3ae8ab2b,0x3b16309f,0x3a98fedc,0x3a708cfc,0x3a37f7f8,0x3ae64054,0x3b0a079e,0x3b267344,0x3ae7bdf5,0x3ac0aac6,0x3aa69780,0x3a1be65f, -0xb912138b,0xba8eefe8,0xba38a618,0xbac68657,0xbb6890b6,0xbb42b8ee,0xbb2cfa7c,0xbb276a4d,0xbabd49dc,0xba990f47,0xbb0c0e7a,0x3a700827,0x3aef283b,0x3ac71d15,0x3b0cb0d6,0x3b0a6db8,0x3afd5704,0x3b302c52,0x3b7fca3d,0x3bb60d6e,0x3bd33021,0x3bbf1404,0x3b3f55e8,0x3b44166b,0x3b328100, -0x3b8a4124,0x3ad7ba6a,0x3a8b2150,0x3a463315,0x3b6fc78a,0x3b9de9e1,0x3ba4bc2f,0x3b369d61,0x3b452e50,0x3b36daad,0x3a77bf72,0x39096c70,0xba69e5ea,0xba5465e9,0xbb0db113,0xbbe338be,0xbc01f25b,0xbc24ef13,0xbc18248b,0xbbf13309,0xbb927228,0xbbd21086,0x3a18f3e5,0x3a2a7395,0xb95076c7, -0x3ab53f34,0x3a7603d2,0x3a1e88d2,0x3af007fc,0x3b6e006c,0x3be4fbd5,0x3c0e17b0,0x3c06d857,0x3b83d540,0x3bb4e37d,0x3babb764,0x3c040613,0x3aaa0c21,0x390b6901,0x39535ac0,0x3bc6447c,0x3c020d8f,0x3c0b1545,0x3ba8488a,0x39fcbe91,0x3a2da2d8,0xbb2218eb,0xbb7d0cca,0xbb93ce27,0xbbafb472, -0xbc1b6041,0xbc53e637,0xbc7e65b5,0xbc82bd3d,0xbc0ae4be,0xbc01d0eb,0xbbbe55b5,0xbbb68abb,0x3b34abff,0x3b8de718,0x3b74e8ad,0x3bbdb97f,0x3bb9e595,0x3ba50641,0x3bf1eba8,0x3c38171a,0x3c8c21f4,0x3c9f7440,0x3c898c80,0x3bf63c70,0x3bda8651,0x3bcd44bf,0x3c4067d6,0x3b39b3f2,0x3a1c9eb2, -0x3ad64e23,0x3c2d2d2d,0x3c699dab,0x3c5fc3f0,0x3bbe443d,0x3c915593,0x3c3599c7,0x3c333133,0x3c1b6472,0x3bc88981,0x3c4ae20b,0x3c86954d,0x3c936fb6,0x3c11da66,0x3ad620a2,0x39b03083,0xbad34f83,0xbaa20104,0x3bc907ed,0xbb982aab,0xbc1b8af0,0xbc6ad395,0xbc6c56a4,0xbc782440,0xbc870bc8, -0xbc85548f,0xbc896a68,0xbcae5ada,0xbc83a163,0xbc26c385,0xbba82e38,0x3c49fad6,0x3c695211,0x3adfce3c,0x3aa6bca7,0xbb194ad3,0xbbfb77a0,0xbab0ea82,0x3a50c231,0xbb01e9ba,0x3c595269,0xbc0f31dc,0xbb6f7c06,0x3bdbd74f,0x3c1e5c61,0x3bf208f8,0xbc85ae5c,0xbcc70b10,0xbc69da51,0xbbb7d6bf, -0xb9db8c63,0xba03eab8,0x39b18e52,0xbb33fe92,0xbbb1360c,0x398ffbe1,0x3b8711cd,0x3b82473b,0x3b8807f1,0x3bd406ef,0x3c4707d9,0x3c2c8d5d,0x3c46d88c,0x3c51e4ca,0x3c877562,0x3c1addc8,0xbbc67f80,0xbc8a463b,0xbcaa109b,0xbc68fbc3,0x3b95df0b,0x3c369970,0x3bb97d2e,0xbbece36e,0xbc89d9df, -0xbc932bf1,0xbc51431c,0xbc89d435,0xbc968ffb,0xbcef7831,0xbccd1a92,0xbbdc9997,0xbb6d15ea,0xbb6f23f1,0xbb957ed3,0xb967fe47,0x3a2f54c2,0xb946a273,0x394906a1,0x3a597cd9,0xba91bc16,0xbb75eb24,0xbbce026a,0xbbbce729,0xbb5c4a0a,0xbb26288f,0xbbbb99b2,0xbba11d87,0xbbd09c03,0xbc3283b0, -0xbc33a3d3,0xbc1c4c71,0xbc08a77f,0x3b276309,0x3c2067ba,0x3c85fe63,0xbc8706d3,0xbcbf049e,0xbb55438f,0x3bb0b308,0x3c811119,0x3cd6f304,0xbbad5245,0x3c01baa5,0xbb4cd63e,0x3b42b229,0x3c081e3a,0x3c2b9bdc,0x3a423854,0xb8d43dbb,0x3b6dc368,0x3aab8624,0xb8fb1d9a,0x39b6483c,0x3971e9f1, -0xba6b8b9d,0xbb08666a,0x392a6715,0x3b56623b,0x3bcddd86,0x3bba6c8d,0x3bad2efc,0x3b9cf78a,0x3bda279b,0x3bec9670,0x3bf32730,0x3beb423b,0x3b73319b,0xbb0aaabb,0xbb01724b,0xbb7f0f33,0xba986799,0xbb1f4474,0x39fb27ec,0x3b03667e,0x3c5a403b,0x3c8db582,0x3c714e80,0x3c42c94a,0x3c100bfa, -0x3bbc91a8,0x3afb31a2,0xbb0e0007,0xbad234e7,0x38deb8dc,0x39a2efea,0xbae63eaa,0xba4ae77c,0xba3b755c,0xba284a2f,0xbabb75ad,0xbab5ee3a,0xba54beb4,0x3a5c3948,0x3990f02a,0xbaa4e5ad,0xbb99947b,0xbbe2b0e8,0xbbe459a2,0xbbcb66bc,0xbbac8a9e,0xbb6a738b,0x3615b71e,0x3b4c31ad,0x3bae3a4c, -0x3bb9407e,0x3ba770ef,0x3b88fb42,0xb951edc5,0xbb6cab69,0xbbc1cd27,0xbbe87a94,0xbbc62bf2,0xbb25bcc7,0x3bbf5626,0xbc3ee17a,0xbc3c05b0,0xbc0da638,0xbbbc74ad,0xbb63f35d,0xbb1ee82f,0xbabc6d02,0xba99d13a,0xba56e4d3,0xba8e794e,0xba9e07d2,0x39c5000b,0x3b04e120,0x3b63886c,0x3afd5b85, -0x37edd23d,0xbb40ea7c,0xbba9c6b2,0xbbc5eaa8,0xbbb37e94,0xbb605fec,0xba39ca84,0x3ae0fb97,0x3bbfde0c,0x3c1545c7,0x3c393f76,0x3c712bcd,0x3c869072,0x3c8c5eb9,0x3c7145f9,0x3c3a5a1b,0x3be5f116,0x3b759aa7,0x39ca3720,0xbb8e8b27,0xbc0fd318,0x3c229607,0x3c29d02e,0x3c2ac29d,0x3c1eaba3, -0x3c23161b,0x3c1d08bf,0x3c0e2688,0x3c0664a2,0x3c0bf743,0x3c163179,0x3c1e2e28,0x3c096bdd,0x3bd16999,0x3bb18f9b,0x3b12c63f,0xb80533e1,0xbb420560,0xbb20c91f,0xbb1c0428,0xbb2261ce,0xbb3693d5,0xbb5d1257,0xbb830148,0xbb643526,0xbb434ecb,0xbb330fd6,0xb82b9dc5,0x3b1edc60,0x3badd21c, -0x3bcdd89d,0x3bf70f44,0x3c0d37f9,0x3c08177d,0x3c06ecf6,0x3c112d95,0x3c1c7880,0x3b1fbfc7,0x3b413af5,0x3abd03a9,0x3b0d282e,0x3ab8b3c8,0x3a9257f7,0x3a9d1c8e,0x3a6c2c9d,0xb8db02d1,0xbad269e4,0xbb4332a9,0xbb78d55e,0xbb9558f4,0xbbb37560,0xbbafd675,0xbba20835,0xbb9f777c,0xbba37e15, -0xbbb295b6,0xbbae6887,0xbba1f89c,0xbb945c74,0xbb88ef26,0xbb84ebdf,0xbb8138b5,0xbb836918,0xbb63d6a0,0xbb4c59e5,0xbb2875ae,0xbb0d71a6,0xbacb12d6,0xba2760ff,0x38a34ccb,0x3a7a5155,0x3ad3e2e4,0x3b027b31,0xba9d7e2b,0xba0cffb7,0xbaad5f08,0xbac66640,0xbaf832c1,0xba836af2,0xbab38115, -0xbad542fb,0xbb1b4dc5,0xbb335d79,0xbb4f8779,0xbb710337,0xbb88831e,0xbb9c87ac,0xbb856a06,0xbb830c13,0xbb959246,0xbb8da368,0xbb8bd18d,0xbb8b4be9,0xbb8ce4fd,0xbb8e7444,0xbb8f625b,0xbb8fedc2,0xbb8f5ce4,0xbb91724b,0xbb85cd5f,0xbb781546,0xbb654338,0xbb469c93,0xbb2cd902,0xbb172f69, -0xbb0c7739,0xbb037572,0xbaee96b7,0xbac39aff,0xbb90d53a,0x3a396f82,0x3a835834,0x3a974f9e,0x3a5805dc,0x3a31304c,0x39674e20,0x3a1b63cc,0x39ac2f88,0xba93f7e1,0xb9fa7b29,0xba454650,0xbabe8c01,0xba2f16c5,0xb9b3be9b,0xba33d1a4,0x3904d3ad,0x3994bd20,0x3a1b1f88,0x3a16547e,0x3a2395ba, -0x3a33fcd1,0x3a5b2bea,0x3a8c2b14,0x3ac5709f,0x3add994b,0x3ad412c7,0x3a6e6a27,0x3a9bd183,0x3aa10909,0x3b070b6a,0x3a164bef,0x399fd66d,0x38e62e78,0x3aab7f8f,0x3ad50d67,0x3ae0ebda,0x3a98efd1,0x3a149820,0x3a6faf84,0xb85ac58b,0xba559596,0xbb1ac051,0xba117c92,0xba820f4e,0xbb8adbb2, -0xbae07b80,0xbaa4bf80,0xbb2d12b3,0xba50f3c2,0xba8157e3,0xbb291d14,0xb9d4f13f,0x398ed8d5,0x3a19744e,0x3aaacee3,0x3aee669d,0x3b1a6175,0x3b3e7924,0x3b76398f,0x3b98d095,0x3ba8f702,0x3b8c04f9,0x3acd1a4e,0x3ad42067,0x3af74525,0x3b925d3b,0x3a6f0d3c,0x3891f021,0xb9367e7b,0x3b426921, -0x3b824cb8,0x3b5ab240,0x3ad20325,0x3b0a19dc,0x3b537b95,0x3a311877,0xb9186d21,0xbb3088e8,0x389a68fa,0xba91c552,0xbc19661e,0xbbd4c4b4,0xbc0990d0,0xbc3cc74b,0xbbe37ee9,0xbb9bac19,0xbbed390b,0xbaa06e30,0xbab6d487,0xbaafd560,0x391f95e7,0x3a3e568d,0x3ae321f9,0x3b1914e6,0x3b746766, -0x3bc042a7,0x3becc243,0x3bd71e62,0x3b2658be,0x3b7df289,0x3b7ce7bb,0x3c08c777,0xb7aa281f,0xba8e0bc4,0xba6a18c2,0x3bb20fd2,0x3be53dd9,0x3bc31bc3,0x3b73d306,0xbac391a7,0x394e2437,0xbb5a7a0e,0xbba72ed6,0xbc12b4b6,0xbb71b5aa,0xbbd6ea21,0xbc6f8f20,0xbc35af91,0xbc35bada,0xbbd2fbed, -0xbbb3858c,0xbba479ba,0xbbfabcc4,0xb9d21cd9,0x38ac2692,0xb81a19fc,0x3b8d0c07,0x3bbf344d,0x3bfe0d3f,0x3c17ca3f,0x3c43c6ab,0x3c772c87,0x3c85759b,0x3c4a39f3,0x3b69500a,0x3b365d3e,0x3ba797ee,0x3c5d0227,0x3b04419f,0xbac26cfd,0xba0dde05,0x3c11e3e5,0x3c42ffbf,0x3c0bf8bd,0x3b20ca70, -0x3cb374a3,0x3c8571f6,0x3c7b7f15,0x3c6098cd,0x3c2ca287,0x3c6113de,0x3c70febb,0x3c56f83e,0x3c0fdbf3,0x3b61ed79,0x3b245607,0x3a967456,0x3a5160da,0x3b57e2e9,0x3929ec96,0xbb809182,0xbc731494,0xbc840f8c,0xbc977353,0xbc9fa51a,0xbca14dd3,0xbca3a7f7,0xbcb1824b,0xbc70c4ba,0xbbdcb16b, -0x3b571783,0x3c18ee3f,0x3bca75ec,0xbb8265e9,0xbb70ab99,0xbb3ca6c6,0xbac07864,0x3a159845,0x3b50b2a2,0x3b8656ef,0x3c8e313c,0xbc0393ce,0xbbbaf50e,0xbb14a3f0,0x3b22af6c,0x3c08f2ea,0xbc2e3388,0xbc8c5845,0xbc276eb8,0xbb822517,0xbaa80857,0xbaa672e5,0xb996cb05,0xba8daf6c,0xbb80c92f, -0xb99cf33c,0x3b2d10e8,0x3b4cb91f,0x3b0315b0,0x3b8a848f,0x3c232fa6,0x3c489bf2,0x3c6a34cc,0x3c529a02,0x3c33a9ce,0x3af0074c,0xbc28d5b0,0xbca29bd9,0xbc9a6842,0xbbb9e2fa,0x3c0cfab5,0x3c297c6d,0x3b913add,0xbc33961e,0xbc9c569d,0xbc690f3e,0xbc3609dc,0xbc861da5,0xbb43c00a,0xbc650811, -0xbc724c66,0xbc86dab6,0x3a0fe2d6,0x3af31c98,0xbb82494d,0x3b089614,0x3a271da3,0x3a30261a,0x390917f5,0x3a52d0b6,0x3a41727d,0xbb0dd14b,0xbba00fc2,0xbbb85ebc,0xbb85eaaf,0xbb8d6f7d,0xbbf8de7a,0xbbd9fbde,0xbbf7287e,0xbc1f9013,0xbc0cfc4e,0xbbcdc1a4,0xbba5ca08,0x3c2a0b18,0x3c4ecdc0, -0x3bbaf170,0xbc977160,0xbc998504,0x3baccc5d,0x3c13fb58,0x3c88c4bf,0x3cf6ab8d,0xbbd09ed4,0x3c7d12b1,0x3c7c5ddc,0xbc20d9d0,0xbc5bcac4,0xbbbf6cb3,0xbb64dd0f,0xbaea56ed,0xb94ed0e1,0x38c240d1,0xba600265,0xb9bd4fe0,0xb9448a9e,0xb9a3ea42,0xba8f1c33,0x34c0fcb9,0x3b0d0f6b,0x3bbe2995, -0x3bc52ebe,0x3bd302f3,0x3bde336f,0x3c009a1b,0x3bdfdd30,0x3b95cc78,0x3b735113,0x3ae69c8e,0xbb0866f1,0xbb5c96d1,0xbb99a9d1,0xba8599c1,0xbb1f0ab7,0x3b6001ad,0x3c482af6,0x3c96890b,0x3c7741eb,0x3b0fba8b,0x3c2633c5,0x3bf8c522,0x3bd6492e,0x3bf908ea,0x3bbf816d,0x3b95ad2a,0x3a9908aa, -0xb9d30a83,0xbaf5eca7,0x3964c5b9,0x3a1c0c16,0x3a42a77e,0x3997b1aa,0xb94eadf1,0xb911ffd3,0x3aa317b5,0x3af4db59,0x3b2ffc52,0xb913d4bf,0xbb258ec0,0xbb6d2b8d,0xbb43f859,0xbb1599f8,0xba719734,0x39cffeae,0x3ad495c4,0x3b43ad56,0x3abbfb8d,0xb977aa94,0xbafb5afa,0xbbc72c3d,0xbc0e3330, -0xbc27637e,0xbc1a1c8b,0xbb9fe63c,0xb90d09ff,0x3bf1df6e,0xbc056bcd,0xbc2af6a8,0xbc1b6e04,0xbc00e610,0xbbbd6614,0xbb86914d,0xbb2a91da,0xbb101751,0xbabe9c9d,0xbadfe45b,0xbb00b028,0xbae7136f,0xb9e0f636,0x3ae5e2b8,0x3b0d16e5,0x3a8ee6f2,0xbac26422,0xbb90092b,0xbbbe70f7,0xbbb524d3, -0xbb8edfba,0xbb1a9227,0x39ed7b9f,0x3b96943b,0x3bfd494e,0x3c1ecb67,0x3c3fcd05,0x3c499aa2,0x3c412411,0x3c14570d,0x3b9a2f7e,0xbaacdcef,0xbb92134d,0xbbda50ab,0xbc00882f,0xbc05e6a9,0x3b1601ea,0x3b59b5cd,0x3b91e2ef,0x3b8546eb,0x3b925983,0x3b8581ab,0x3b4f0916,0x3b169dfc,0x3b867a7c, -0x3bbca02e,0x3bfa7c99,0x3bf58df9,0x3bf0e4a1,0x3bf4681b,0x3b856a3e,0x3adfc3a9,0xba1a52a7,0xba3afce0,0xba95e9b4,0xbb0589a1,0xbb00cc70,0xbb10f879,0xbb2fc202,0xbb18b00a,0xbafd514f,0xbad610fe,0x3a112e33,0x3b241dd5,0x3b9bbfb4,0x3badc5ad,0x3bcab7fc,0x3be4c440,0x3bc1ee3c,0x3b99fd54, -0x3b533293,0x3b3a3fb6,0x3bd1d269,0x3be2d2a5,0x3bc5188c,0x3bb9764a,0x3ba7369b,0x3b97e9a3,0x3b9b7239,0x3b9576ae,0x3b75cd67,0x3b205567,0x3aa68402,0x39e2dd10,0xb9d757b5,0xba8c1b30,0xbae2f79f,0xbaebc2cc,0xbb198561,0xbb48e2b3,0xbb874e82,0xbb8c520d,0xbb81721a,0xbb751bbb,0xbb61a65a, -0xbb5d7fcc,0xbb598a02,0xbb63db5c,0xbb1e374d,0xbad117bd,0xba267db4,0x3946bc9f,0x3a92343a,0x3b1a599f,0x3b3c3d19,0x3b792ab3,0x3b99fa76,0x3bb98e9a,0x395a5803,0x3a4609df,0x396eb5cd,0x39438c23,0xb8f73429,0x3a08abf5,0x38b0fef9,0xb99bda74,0xba63b7cd,0xba960275,0xbac337cd,0xbaec258d, -0xbb0e2b74,0xbb27a6b3,0xbb06f6da,0xbb09bcd6,0xbb5760c8,0xbb4840b5,0xbb4e06c2,0xbb4bd019,0xbb52cc63,0xbb579e5a,0xbb5c0528,0xbb5eca3d,0xbb5de3a6,0xbb66d352,0xbb46445a,0xbb2dff94,0xbb150e39,0xbae3ad98,0xbaa79c6c,0xba5973b4,0xba1ddeed,0xb9c3aad3,0xb9317c1f,0xb7a21b46,0xbb45255c, -0x3a076c64,0x3a5761e1,0x3a8d5d41,0x3a263c93,0x39ebeccb,0xb88e4843,0x3a1138b2,0x398d13a7,0xbab47e7d,0xb9c9a87f,0xba1e646d,0xbacb3711,0xba3ed69a,0xb9f8f07d,0xba36f32e,0xb9a50b6a,0xb91b73dc,0x39dde571,0x39a6c8b4,0x39d912a4,0x3a25ea8b,0x3a3eb480,0x3a72c656,0x3ab15bd9,0x3aac2c1d, -0x3aa0555f,0x3a43f164,0x3a5a9263,0x3a66a6fc,0x3b02cfa5,0x39b1d726,0x38c19822,0xb7eb2161,0x3a95ea47,0x3abb5029,0x3aa0a9d0,0x3a769f17,0x39b4cc5c,0x3a739d50,0xb9a96d86,0xba6f614c,0xbb151fdb,0xb941f086,0xb97bf4a3,0xbb7124d3,0xba0015dc,0xb90d876c,0xbb23668b,0xb9ff1251,0xba5c6b0e, -0xbb05b703,0xbaad0303,0xba69d8cd,0x39e89987,0x3a09b542,0x3aa70b40,0x3b10e9e0,0x3b2f1a91,0x3b5a74be,0x3b83bac3,0x3b6f8879,0x3b29f6b1,0x3a28f7ed,0x3995001a,0x3a81c512,0x3b92d165,0x3a089929,0xb9a61546,0xb9823183,0x3b32fb06,0x3b5f9e32,0x3b0794e6,0x3a878974,0x3af7c295,0x3b5e7ed5, -0x3a00f0f3,0xb9a38dc8,0xbb40f8eb,0x3a37bba3,0xb9decc96,0xbc197625,0xbb9c1dae,0xbbc8ec1b,0xbc3bc482,0xbbbdd827,0xbb990428,0xbbc818a1,0xbb519dd3,0xbb568a5a,0xba4a91f0,0xba664f69,0x39a84125,0x3b082759,0x3b19f0cf,0x3b6ec7c7,0x3bb34aa9,0x3bb66a3a,0x3b9c8311,0x3aee84a0,0x3b15b8dd, -0x3b1aee97,0x3c07af39,0xba292ee9,0xbab601e9,0xba4ba1c9,0x3ba96fda,0x3bd2cfd5,0x3b8892f6,0x3b4fb6d1,0xbad31514,0x396e1ad0,0xbb57d036,0xbbacfcb9,0xbc202837,0xbb0999f2,0xbb6441f3,0xbc377b5c,0xbbb210b1,0xbb9f8dbd,0xbb37dcf9,0xbb000ff3,0xbb1d4871,0xbbc7681d,0xbb3ed997,0xbb7317cb, -0xbaef62a2,0x3ae4934c,0x3b8507c3,0x3bfe21b3,0x3c106c47,0x3c352067,0x3c542959,0x3c3f43ba,0x3bdf3262,0xb9851fc6,0xbae1124b,0x3b368479,0x3c5caa63,0x3ab31174,0xbb1a9392,0xb9e8e577,0x3c0b28e8,0x3c241da7,0x3b8aa7de,0x3a14bfba,0x3cb737c9,0x3c9102bb,0x3c7756aa,0x3c63347f,0x3c55c2d7, -0x3c513655,0x3c247f11,0x3bbe449c,0x3baaeaa1,0x3ae7d266,0x3afeab6a,0x3a7097b9,0x3acdfd2d,0x3a70b42d,0x3b6052ca,0x3b063daa,0xbc3aeb4a,0xbc611485,0xbc85c3cf,0xbc8b965c,0xbc98cd1e,0xbc99cc9b,0xbc88387b,0xbc1ffa96,0x39d8d309,0x3c717747,0x3c46de98,0x3b972c3b,0xbbbb65f9,0xbb9bcf10, -0xbb02481e,0x3b44b05c,0x3949599a,0x3b9465fc,0x3c51d5d4,0x3ca6b15d,0xbbb8f513,0xbb86348a,0xbbbf8e04,0xbaff7e97,0x3bd63ab4,0xbbba0b7c,0xbc177bbc,0xbb84c11a,0xbabd1151,0xba9bd16c,0xba505cb3,0xba4e4395,0xb9a9c484,0xbad2d7b9,0xbaa2d5b6,0x3a2f2400,0x3b05a54c,0xb91c747b,0x3aa90391, -0x3bc41410,0x3c29ce11,0x3c5118f4,0x3c35d7d1,0x3b97b74f,0xbb8f95e5,0xbc51577b,0xbca678bb,0xbc6a7c57,0x3b62ecb8,0x3c26d19d,0x3c0644f4,0x3b952b12,0xbc4917db,0xbc982384,0xbc38ab19,0xbc181e76,0xbbdfcec4,0x3c2f92d2,0xbb705788,0xbc01a0f5,0xbc7c4d45,0x3aeaa3dc,0x3b29ca1c,0xb8a29aa9, -0x3ac837e5,0x399c0ed1,0x3a2a2a26,0x39d5b800,0x39873f74,0x3a634878,0xb8e882a3,0xbb07a8dc,0xbb7a6b28,0xbb0c84bb,0xbb15cc0d,0xbb984b8f,0xbbb19ae1,0xbbe0fef4,0xbbdd0a80,0xbbbb456a,0xbaea6fad,0x3b389ead,0x3c8adccc,0x3c609e78,0xbb58bbe8,0xbc835617,0xbc3a364c,0x3c4f08ea,0x3c6777de, -0x3c9caf2c,0x3ce135cc,0xb8de9bc1,0x3c00e6b3,0x3cde6fe0,0xbc603036,0xbce63688,0xbcb22c51,0xbba0a618,0xba6820b3,0xba8a94b0,0xb98157ed,0xba21a1f6,0xb9cb6893,0xb9f89bbe,0xb9a8dade,0xb9bc3e49,0xb9c17b64,0x3a05bcfc,0x3b886364,0x3bc59202,0x3be1214e,0x3c00def6,0x3bf31248,0x3baaaf13, -0x3afe716a,0xb9a77a59,0xbaa7986b,0xbb0da00f,0xbb768f4c,0xbb864be8,0xbafd1994,0x3ac648fa,0x3c1f52be,0x3cc083f7,0x3c4a978c,0xb9f54fad,0xbc692896,0xbb7e499b,0x3c074d2e,0x3c3901c8,0x3c83d0db,0x3c87c99b,0x3c2211d0,0x3b21c30e,0xba35785a,0xba0270e2,0x3a3c876e,0x3a14ddbb,0x3a3e3f9e, -0x3a4499f8,0x3a180a68,0x39832598,0x3aad37b2,0x3b37538c,0x3bab20b9,0x3b988079,0x3b37a35c,0x3aaae2fa,0x3a729d21,0x3a871f33,0x3b0733f1,0x3b06bcc9,0x3aee333e,0x3aff8d03,0xba9f6c49,0xbb5726e7,0xbb9dbc23,0xbc08115c,0xbc2ca162,0xbc31f367,0xbbf4c47e,0xba2d65ec,0x3b7889df,0x3c057af1, -0xbb046b2d,0xbba24706,0xbbd62ebe,0xbbe8af3c,0xbbc897bd,0xbb99471f,0xbb482a6e,0xbb29fa4a,0xbaae6ddf,0xbaa7c982,0xbad1f7c8,0xbb01a7d2,0xbacddb1a,0xb986df6a,0x3aa9aab5,0x3ab671c8,0x387458db,0xbb36570d,0xbb8aef25,0xbb8645e7,0xbb803185,0xbb509aef,0xbab57af4,0x3b0a2aee,0x3b9755d7, -0x3bc5faa7,0x3bdea3ce,0x3bda1387,0x3bb76fbd,0x3b92f646,0x3acaaca6,0xbb7b4ba0,0xbbd05fbe,0xbbffc3ed,0xbbcd33b4,0xbb84a558,0xbb7e3528,0xbb466157,0xbaae59e8,0xba1d9537,0x3967617e,0x38a2169d,0xb9bc6151,0xba7940e8,0x3a87bdea,0x3b2dea65,0x3b94d734,0x3ba12b4d,0x3bbfb318,0x3bda7a27, -0x3b9b90a3,0x3b4da099,0x3b06a522,0x3aa664ee,0x394d4782,0xbaa1da54,0xb9abd3d8,0x38705706,0x39798454,0x3a654c35,0x3ad0a8c1,0x3b1f0f57,0x3b6b7b6d,0x3b96c731,0x3bb8c58f,0x3b9f160b,0x3b8b2785,0x3b7f1de2,0x3b0fc6f9,0x394fd251,0xbb2fab96,0xbb4f6b2c,0x3bf3fba2,0x3bfe4c09,0x3bf1842a, -0x3bd9a861,0x3bceaf5a,0x3bc23253,0x3bc85335,0x3bca6e62,0x3bc28f56,0x3bb2c11d,0x3ba5923c,0x3b9d03e7,0x3b8f88f3,0x3b89c335,0x3b337d4f,0x3b10a46f,0x3aad2f66,0x39754131,0xbab7799e,0xbaacb05e,0xba847776,0xba873f18,0xba5d84c6,0xba56d3ec,0xba54a990,0xba753f1b,0x38ded5d4,0x3a75aa26, -0x3afb241d,0x3b3d57ce,0x3b80e1dc,0x3ba44c9c,0x3ba8161e,0x3bb8b154,0x3bc7d303,0x3be29abd,0x3b0ba6d4,0x3b1a80fd,0x3b017163,0x3af7470e,0x3ac04a5e,0x3b1276e4,0x3ad887c5,0x3a8c66cd,0x3a6ac6d8,0x3a5056af,0x3a26f1ff,0x3a15279a,0x39e31f86,0x39fa96cf,0x3a78da08,0x3a8f8a03,0xba5c8590, -0xb9a06cda,0xb9a0e539,0x373613f0,0xb936eaac,0xb92e2820,0xb94a9dc9,0xb95ba033,0xb93940b4,0xb99c8684,0x390719ad,0x39dcdc19,0x3a34778d,0x3a88f8f6,0x3aad89f2,0x3ade9c5e,0x3aeda2ee,0x3b0344c6,0x3b0f7450,0x3b0accc5,0x39dcd94d,0xb93e8a89,0x397e8e18,0x39e86223,0x3921f3c7,0x382ef107, -0xb97f6d18,0x3697c16a,0xb683126b,0xba976d61,0xb98daeab,0xb9b4d394,0xba874895,0xba12641a,0xba0a3a89,0xb9dff8f2,0xba5d9eeb,0xba5eb6a3,0x39cc50c9,0xb8af0503,0xb8e6a264,0xb9073acc,0x38876061,0x395d73cc,0x3a2d8e01,0x39a13132,0x395b3102,0x38063de5,0xb61317b4,0x3863e75a,0x3a9c85fe, -0xb9c041a0,0xba10c488,0xba0b111c,0x3a007c44,0x3a4361a3,0x39b75a8e,0x39a5d3ad,0xb89aca5c,0x3a029fee,0xb9cefbf5,0xba899269,0xbb04ae2d,0xb982c1de,0xb94746b7,0xbb439ad6,0xb993c677,0xb9aa7730,0xbb406256,0xbae4e998,0xbae84075,0xbab64eb0,0xbb15d749,0xbafe10cd,0x39a1966e,0xb9baa36e, -0x3a02a474,0x3a6da2a9,0x3abb2318,0x3af702df,0x3b23247b,0x3a8bc83e,0xb6e68196,0xba5f0788,0xba948eae,0xb91b3bc7,0x3b56ae32,0xb9e48ab3,0xba8fa3b1,0xba1ce199,0x3afc0965,0x3b14ca26,0x3a0289fb,0x3976d656,0x3ac80939,0x3b3deebb,0x39b99933,0xba2853b7,0xbb3871e1,0x3a129384,0xb99080b3, -0xbbdecaa5,0xbb52b83b,0xbb7b0828,0xbbfc6b51,0xbb8e63e2,0xbb91eb61,0xbb79fa68,0xbb989753,0xbba1bb3f,0x38147fd2,0xbacde822,0xb9ad8912,0x3a55e197,0x3aa6ec9e,0x3b1bfee4,0x3b89f543,0x3b1fb3e1,0x3ad474cf,0x399d3976,0x3a08f782,0x3a3417dd,0x3bd085bd,0xbadb0775,0xbb0240d4,0xba24f039, -0x3b8c4ab7,0x3bacb306,0x3b1d308c,0x3b28f7c9,0xba9e57f4,0x399b880c,0xbb1a7079,0xbb963f12,0xbc0241e4,0xba757a5b,0xbaaae4a9,0xbbb23200,0xbab042d0,0xba61db59,0xb91711f1,0xb989bd26,0xb9fca248,0xbb2689ca,0xbb5be853,0xbbaf7f30,0xbaf6115c,0xba140808,0x3ae2a13d,0x3b9e2bff,0x3bc612a9, -0x3c016e4e,0x3c15e8f2,0x3b95124f,0xba0a49e8,0xbb8c8757,0xbb98b9d1,0x3a5a5d78,0x3c2d0af1,0xb89804bb,0xbb48f9ea,0x38fde3fa,0x3bf5ece9,0x3bf612f7,0x39d0110c,0xba30c320,0x3ca7cdce,0x3c75deeb,0x3c4e006f,0x3c3d9e78,0x3c38d0fb,0x3c0f8fba,0x3b8ecef0,0x3aae3044,0x3ab8cb20,0x392b0779, -0x3a11a7d6,0x379aca7d,0x3a655841,0x37d1770f,0x3b591207,0x3b972e6d,0xbbaa41ca,0xbc1d6fbe,0xbc4ab0f1,0xbc55601c,0xbc7ed65a,0xbc77c01d,0xbc23a45b,0xbb594e04,0x3bf4964c,0x3cad2ecf,0x3c5d118e,0x3b56724a,0xbbd71f3e,0xbbb6296c,0xbb1af0a8,0x3b72be58,0xba9ebbc6,0x3ba14d69,0x3c9a8e1c, -0x3cb09f9e,0xbb3e7d97,0xba09ec75,0xbbb0077b,0xbb6149e0,0x3b38cf89,0xbb1acff0,0xbb3bd80d,0xb9bfe8c1,0xba206a2b,0xb9807a93,0xb9564e9e,0xb9440ce2,0xb9987a01,0xb99fe130,0xbaa0ab91,0xba863053,0x3aa4b2b3,0xbadc3068,0xbae1bc84,0x3a6bc552,0x3bbdcd3e,0x3c0cddf6,0x3bfdd5da,0xb82fe3c1, -0xbc0d4a1d,0xbc826ff2,0xbc9fcf00,0xbc1a8165,0x3c23a59c,0x3c05ca1d,0x3b593ccf,0x3adb9f2d,0xbc71d41f,0xbc96f2f9,0xbc22e3d8,0xbc0005df,0x3b4d9be5,0x3c9aa72f,0x3bbc95a5,0xbac303fc,0xbc04ad4c,0x39faf2de,0x3ab4fc02,0x399a48f1,0x39725a70,0x395d8034,0x390772a3,0x39462cc9,0x3932beff, -0x39898448,0x3a14ba1c,0x39982f3f,0xbabe74a6,0x3a248c1d,0x3a9a9f7d,0x38f3921e,0xbb3b3de2,0xbbab925d,0xbb86b415,0xbb750c9e,0x3b0ee193,0x3c40b563,0x3c942bf2,0x3c2129c3,0xbc3403b2,0xbc3aeda7,0xbb53a339,0x3c801080,0x3c8fc0a2,0x3ca09990,0x3c9055b0,0x3b901950,0xbc39c708,0x3c3daaf8, -0xbc512744,0xbce2abce,0xbcce0a46,0xbba4e49f,0xb990c6a1,0xb9a7d046,0xb937921d,0xb94eadce,0xb93d864a,0xb96c213f,0xb97c24ab,0xb93d9ee0,0xba0787b6,0xba24e8cd,0x3a98d588,0x3b978d7e,0x3bcc81a0,0x3be4d96c,0x3baea15f,0x3b318186,0xba283154,0xbb799a1c,0xbbb37258,0xbba58864,0xbbb7ae4d, -0xbb847cb9,0xbb8620da,0x3bfeaa69,0x3c70db32,0x3cb5f3bd,0xbb1d0cfe,0xbc97181b,0xbcc5605b,0xbc9c6b42,0x3c00e913,0x3c992c4d,0x3ccb0d02,0x3cc96ce6,0x3c316d58,0x3b836688,0xb88c65bc,0x39bccfbf,0x39ba4e50,0x395c5b5b,0x39b6a83e,0x39d8e31d,0x39ebaedd,0x39827efd,0x3a3c4f3b,0x3b205022, -0x3baa6390,0x3bfd3961,0x3be949e2,0x3bb496bf,0x3b8b3a69,0x3b62c977,0x3b6acfdc,0x3b4d4168,0x3b09c766,0x3a817744,0xbb5430cd,0xbbb70021,0xbbdf5a7e,0xbc1c2747,0xbc38d20d,0xbc279f36,0xbbbf4f39,0xb9ac2617,0x3b37fa4f,0x3b56b01d,0x3a8d5564,0xb9f7299b,0xbb42dc72,0xbb8affae,0xbb8f4a62, -0xbb607c8e,0xbb149571,0xbac6632a,0xb9f104d1,0xb9e42c2d,0xba382c14,0xba7511b7,0xba888673,0xba6551f2,0x39c8362a,0x3a89084d,0x3a93ba88,0xba8fca91,0xbb239d61,0xbb3c6798,0xbb559433,0xbb5d7956,0xbb3cbc1f,0xba8a8dad,0xb8863d49,0x398f375f,0x3a1b70a5,0x3a1df992,0x38a44da1,0x39fd48a7, -0xba0f4a9d,0xbb844513,0xbba09b96,0xbbb32ef9,0xbb545f85,0xba5f7b51,0xbbdf286b,0xbbd958a1,0xbb9fb44a,0xbb83be9f,0xbb42ed95,0xbb317e28,0xbb1eb48b,0xbb154d40,0xba3e22a5,0x392fa9b1,0x3ad5b554,0x3ad4539c,0x3b3ac0c5,0x3b619668,0x3b6c9caa,0x3b548177,0x3b603d31,0x3b1cf922,0x3aac8663, -0xb8f200da,0x3a9084d1,0x3afc9f21,0x3b2b576d,0x3b6fb20f,0x3b9c937c,0x3bc6f5c8,0x3bbd0268,0x3bb016d8,0x3b9efe0f,0x3b3c23c2,0x3a7b2671,0xba132cd8,0xbaefadeb,0xbb5e47b7,0xbbbefa16,0xbbca4f64,0x3b8f1da5,0x3b8e449c,0x3bb31fe7,0x3b92b934,0x3ba08abe,0x3b9c70be,0x3ba2fed5,0x3bac1032, -0x3bb3c88e,0x3bbf14ac,0x3bd11ca9,0x3bd91115,0x3be20c95,0x3bee938f,0x3bc359ff,0x3ba71828,0x3b88e1c9,0x3b53b6ec,0x3b037173,0x3af33f91,0x3b0859bb,0x3afe445c,0x3b003a0b,0x3afa456d,0x3ae99a07,0x3ae609a8,0x3b0abe8b,0x3b244b96,0x3b456319,0x3b6b841a,0x3b8959d3,0x3b9333aa,0x3b8af662, -0x3b8781b7,0x3b83624c,0x3b8c860b,0x3b3d2d90,0x3b2b07de,0x3b3cb828,0x3b43dd49,0x3b41761b,0x3b42deea,0x3b3be175,0x3b2f1b7d,0x3b3b12b3,0x3b417411,0x3b4047ce,0x3b4d4987,0x3b5125da,0x3b66c684,0x3b5fcd10,0x3b634802,0x3b1d56b5,0x3b2c9a71,0x3b292f7b,0x3b323a52,0x3b2c6b21,0x3b2f8e87, -0x3b3184d1,0x3b32de3b,0x3b35e29c,0x3b32f584,0x3b3cdb60,0x3b407ed6,0x3b3f8ed7,0x3b4069e2,0x3b3f6b05,0x3b47fb7a,0x3b4770b1,0x3b4c3ee6,0x3b51ace0,0x3b447905,0x3b503cff,0xba7e0424,0xb9ca62b5,0xb97f3445,0xba0f5c6d,0xba378b1e,0xba75daf2,0xba4b2f1c,0xba308f1f,0xbaa92613,0xba3b1d58, -0xba321e87,0xba867c62,0xba909212,0xba9de882,0xba2e90cb,0xbad73bf5,0xbad5f4c3,0xb9860dd3,0xba5e4e7a,0xba6b9884,0xba86fc80,0xba477ea2,0xba2e82e0,0xb98eb83f,0xba6d8638,0xba7b670c,0xba4bcad6,0xba38ed73,0xba25da35,0x38b1ff4a,0xba859472,0xba8f340a,0xba5f8ef9,0xb90c8774,0x3807dde0, -0xba112616,0xb9b232e9,0xb9e547fe,0xb87049e1,0xba4643ad,0xbaa8c9ac,0xbb068775,0xba654ea9,0xba30276e,0xbb05dc07,0xba20c49d,0xba96db0d,0xbb5140f0,0xbb635a7a,0xbb55ef60,0xba7dabda,0xbb513879,0xbb3f9fc9,0xb8afa583,0xbaa93432,0xba327879,0xba440693,0xb8d98cc8,0x38008d70,0x39c32ad5, -0xbb02f2ac,0xbb388ff5,0xbb1476e0,0xbae2713c,0xba2507b7,0x3ab8e0db,0xba9bbb3f,0xbabf1636,0xb9e37fa7,0x3aa0b648,0x3a9b6149,0xba71571a,0xb9e04bf0,0x3aa0ec94,0x3b0e406d,0x380db863,0xba9561e1,0xbb2f5d91,0xb9963dfe,0xba08debd,0xbb5a6211,0xbaf01d50,0xbae1ef94,0xbb5f21fc,0xbb40e85a, -0xbb79a544,0xbae270cb,0xbba4e63e,0xbbb9db95,0x38aa3b13,0xbb13fc1d,0xbab65086,0xbaa378ce,0xb978d345,0x39d51ec1,0x3b050de2,0xbacf7a36,0xbb05fc85,0xba83a463,0x37d42fa1,0x39baac68,0x3b5a77c2,0xbb025070,0xbadd9fae,0x3a39c8df,0x3b7aa1eb,0x3b8bde84,0x3a3ecdb3,0x3b05e1cd,0xba228667, -0x399293fe,0xbac60c70,0xbb64f1ee,0xbba6016d,0xb9f54e93,0xb9c2a0f5,0xba7157be,0x39a0ae38,0x399ab9fd,0x3a75939a,0x3a700d95,0x399d1f0c,0x386eb32f,0xbadb7ad1,0xbb960e02,0xbac03674,0xbb0f2221,0xba5259ea,0x3a435405,0x3b1afdee,0x3b5ebc7e,0x3b6d86f3,0xbb8a9f8b,0xbc099abc,0xbbea7ac3, -0xbb91b663,0x3a523f1e,0x3bb7c885,0xba8f587b,0xbb0f1a4c,0x3b1adb29,0x3bddeda4,0x3baab19b,0xbb2de160,0xbab0aed3,0x3c8f48e4,0x3c2ad011,0x3c1d4ff6,0x3bf6fece,0x3bcdf56f,0x3b6f45cd,0x3a1bcd52,0x38ed427f,0x3880c43b,0xb91ddf0a,0xb9b12e96,0xb9cc0ccd,0x36dd46b4,0xb8ac5a6c,0x3a94cff5, -0x3b5554da,0x3904fff6,0xbba0c480,0xbc102c3c,0xbc1af1ab,0xbc407ace,0xbc29558a,0xbb4b070a,0x3ba791c0,0x3c7845ee,0x3cc50768,0x3c6b7065,0x3b61ea5e,0xbb8034a1,0xbb8148c0,0xbaad2f81,0x3b9a75db,0x3817be0f,0x3bd5ff4f,0x3cb008cd,0x3caa6c49,0x39f84809,0x3b4e7936,0xbb3f149d,0xbb15de57, -0x3a1f4882,0xb9c75455,0xba0f186a,0xb696c205,0xb862049c,0x38cb80d7,0x392af187,0x39191d37,0x380baa80,0xb85b9094,0xba04cbb5,0xbaa5ec6c,0x39b15908,0xbac43917,0xbb430078,0xbb2c02db,0x3b0c9492,0x3ba02c01,0x3b962c02,0xbb29def0,0xbc33008b,0xbc90e079,0xbc835844,0xbb79e768,0x3c65484e, -0x3bd46d65,0xba00c636,0xbb2e5467,0xbc84b68d,0xbc89c983,0xbc026767,0xbb99c625,0x3c21115f,0x3cafd818,0x3c581a39,0x3b34d3e0,0xbb91503d,0x3a692884,0x398f1255,0xb8903f15,0x3895661c,0xb8c937a4,0xb8b114fa,0xb8920b50,0xb79daa65,0x38677340,0x39728c90,0x3a31ca55,0x389db8d4,0x3adf94ed, -0x3b50d830,0x3b5d8846,0xb989d2fd,0xbb2cdc8d,0xbad5963b,0xba1af700,0x3bdea06c,0x3c99b4bd,0x3c74db16,0x3b4be511,0xbc8459db,0xbbcb992b,0x3b976d6f,0x3c76530f,0x3ca0ad6e,0x3c920603,0x3b97f9bc,0x3ba94813,0xbcc2b25a,0xbca9e46e,0xbc50f1c8,0xbc7b747e,0xbc8a8961,0xbb1f659c,0x38bca0ff, -0xb81f6f96,0x38091293,0x38bdcc94,0x38aa5602,0x3859cf8a,0xb7d22b1c,0xb749e741,0xb938f855,0xb9f6afa2,0xba9e20ce,0x3ac27a3a,0x3b77f3aa,0x3b7b0d94,0x3aefb371,0xb9547615,0xbb45373e,0xbbb90174,0xbc03ec4f,0xbbfe153f,0xbbe62f77,0xbb398cf5,0xbb328c6b,0x3c6fad5b,0x3c8525a8,0x3c0852c7, -0xbc6baf99,0xbccd818f,0xbcc014ec,0xbcaca799,0x3ba74a9b,0x3cb7a215,0x3cdd4344,0x3cb952c6,0x3c01bab0,0x3b8474b8,0xb9cd7780,0x390feddc,0xb93c0ba1,0xb90b259d,0xb908b4a0,0xb8649c04,0x37d1bca6,0x390b4ded,0xb8a02d22,0x3a6f2d7a,0x3b4b6071,0x3beec051,0x3c0efdd0,0x3bfcea95,0x3bd745ec, -0x3ba92b46,0x3b8a4afd,0x3b532a4e,0x3b0376ae,0x3a085a9a,0xbb6c0147,0xbbc64eb9,0xbbee1461,0xbc15c53c,0xbc1f5b5d,0xbbf23f6d,0xbbab1b5c,0xbb757852,0xbb140c47,0xbb8e2b88,0x3b480e97,0x3b35381b,0xb726bbae,0xba027566,0xbacf20f1,0xba6397af,0xba0274b6,0x390ed0d6,0x39cf5fd2,0x39cb91cc, -0x397785c2,0x392e65a8,0xb853b348,0xb98ec48d,0xb8a0c169,0x3a145c9f,0x3acb3d37,0x3a0a5bc1,0xba662b0c,0xbad8c631,0xbb0ec33b,0xbb3e350a,0xbb5d1ad7,0xbb669365,0xbb845d14,0xbb96b702,0xbb768554,0xbb519644,0xbb52ba07,0xbb21ec66,0xbb2152f0,0xbb78022b,0xbb2c58eb,0xbae01aa2,0x3a095ace, -0x3b1889fa,0xbbd45d17,0xbbeb9f60,0xbbd2f8f1,0xbbc76041,0xbbb3c28b,0xbb9e7e12,0xbb7ea868,0xbb493e50,0xbb06cfb2,0xbacb1106,0xba3adaaa,0xba6aba07,0xb8be89d5,0x393d2ee4,0x3a963935,0x3acf7864,0x3b24fc4c,0x3b0f27bf,0x3adec735,0x3aa91b9d,0x3b0c78bc,0x3b2bca9c,0x3b50016b,0x3b8b52cc, -0x3bb036b6,0x3bd4c20c,0x3ba5cbfa,0x3b6b76ca,0x3b053784,0x396cc1a2,0xbac5b6d2,0xbb46b006,0xbb62eb63,0xbb8a4075,0xbbb47138,0xbbc721ad,0x38caf0e8,0xb9e3460c,0x3a77b82b,0x3a5db800,0x3ad9dd4d,0x3afa901c,0x3b0b30ab,0x3b267b69,0x3b3a8023,0x3b649598,0x3b8e5e89,0x3ba0c32c,0x3bb78448, -0x3bcf74d2,0x3bc3ef93,0x3bb6be62,0x3ba95800,0x3b9a225b,0x3b807d6a,0x3b8591e2,0x3b891503,0x3b866532,0x3b848e6f,0x3b825dd9,0x3b780f3b,0x3b807173,0x3b6c2c03,0x3b691af9,0x3b660650,0x3b626217,0x3b586cb1,0x3b3981ac,0x3b0dfc58,0x3ac5b97a,0x3a7b82a9,0x3a187c11,0x3b3f8d53,0x3b1ffaf1, -0x3b389507,0x3b3ca2c1,0x3b3fee0c,0x3b4819a8,0x3b4df043,0x3b55ccfa,0x3b6fab9a,0x3b7f5fe1,0x3b839d2c,0x3b8ca912,0x3b913aab,0x3b9b3a14,0x3b907483,0x3b94a9f0,0x3b80b705,0x3b886e7f,0x3b8d09bb,0x3b966119,0x3b94980d,0x3b976065,0x3b99d6e8,0x3b9b96ec,0x3b9d5b34,0x3b9e9368,0x3b99c525, -0x3b93b8bf,0x3b8b7198,0x3b836a8a,0x3b7919df,0x3b734370,0x3b6b8a75,0x3b65af3b,0x3b5d75cf,0x3b4c721e,0x3ba3bc9c,0xbad933b4,0xba6bee85,0xba6d0d15,0xba94df41,0xbaa86491,0xbabb3ae6,0xbac19524,0xbaa48267,0xba941783,0xba84d1b4,0xba8c1c09,0xba9c0af3,0xbadb4d02,0xbae18fab,0xba5a9648, -0xbb0d6574,0xbb128454,0xba60e647,0xbac638d9,0xbad22344,0xbaf1d4c6,0xbac551e0,0xbac1bf40,0xbaab65a6,0xbb02bcf7,0xbb009173,0xbac405a7,0xba9793d7,0xba90349a,0xba9a0874,0xbac9e0fa,0xbabf2625,0xba7802a0,0xba30ca93,0xba28121c,0xbab22556,0xba69f6da,0xba3519b6,0xba25bdca,0xba8b1a83, -0xbad06221,0xbb047194,0xbace1649,0xba9d329e,0xba751f73,0xba63f455,0xbab93ff8,0xbb2dca81,0xbb8b67df,0xbb894803,0xba99a269,0xbb6bd8b1,0xbb58d946,0xba2fefa9,0xbb03d8b3,0xbadc0cf2,0xbb0f9434,0xbabf5acd,0xbae18aad,0xbb041836,0xbb9780de,0xbba242c6,0xbb565932,0xbad2fdb6,0xba33e071, -0xba7982b9,0xbaebe8e5,0xbacb2be5,0x3865022e,0x39f9e9c3,0x38a31c70,0xbb08b7ce,0xba69ff85,0x3a97c0ad,0x3ab88f0d,0xb962b5e2,0xbab8253c,0xbb1166eb,0xba8d7711,0xba1fed65,0xb9d9c631,0xb9ff82ec,0xb9773a1c,0xba0c3cda,0xba2f4a8c,0xbaecec5f,0xb973afac,0xbb78e21d,0xbba51877,0xb9faffbe, -0xbb327f2a,0xbb22c1b0,0xbb4ed029,0xbad537ee,0xbad5d418,0xba7fd883,0xbbab185c,0xbba4fda7,0xbb0235a0,0x39f79b6b,0x3a52ef8f,0xba25d402,0xbb021944,0xba7dbd35,0x3b2dcb5c,0x3b5428fc,0x3b46e0f0,0xba609a80,0x3ad86e9c,0x3914f0ee,0x399fd7c9,0xba79fbdb,0xbb141dc3,0xbb281962,0xb99a78a5, -0x38c81a29,0x391f21e5,0x391f180d,0x3954822a,0x39614f4c,0x3a0c6ed1,0x3a105fbb,0x39bd0124,0x3a01664a,0xbb0c10d0,0xba9e1b24,0xbb373f17,0xbb34a05a,0xbb37f276,0xba6d2ad6,0xba9b6df8,0xbb461f76,0xbc43e7eb,0xbc67c104,0xbc0a513b,0xbb0d669f,0x3ac4b2dd,0xba75827d,0xbb10f7cf,0xba4d699b, -0x3ba505c2,0x3bac4210,0x3b1d4f46,0xbba2bd79,0xbab5da84,0x3c5b707a,0x3bd3f889,0x3bd5f1d7,0x3b6fa803,0x3afe56ce,0x3a03d930,0xb9102b54,0xb644e408,0xb8b0cb7d,0xb8f637c4,0xb9000433,0xb9959af1,0xb96a9734,0xb982fc52,0x38289afa,0x3a49f3a7,0x3b0b546f,0xbaa48cd1,0xbbb6af4e,0xbbe790ce, -0xbc07020a,0xbbbc32b4,0x3b0ef1e1,0x3c5043fb,0x3ca7d68f,0x3cb7bfb8,0x3c5a1857,0x3b83e666,0x398ea505,0xba7f12ef,0x3a856e4f,0x3bdf7899,0x3b81d295,0x3c1cccf4,0x3cb29ade,0x3c90e112,0x3b7ab9e6,0x3bacb6bf,0x39c540cd,0x39d591b1,0x3a00b127,0xb96cf437,0xb8d8dbf3,0x3924aa6a,0xb63e4eb9, -0x38bb457a,0x38a84878,0x391dbb29,0x3903c5c2,0x38e752b1,0x376830ed,0xba0aa3ab,0xb9bc3117,0xb997e460,0xbace53f3,0xbb499c14,0x3a1f72ca,0x3b06699c,0x3a57f338,0xbbb981b2,0xbc516257,0xbc8a61c4,0xbc283362,0x3ad1554a,0x3c6ccafb,0x3bc2202e,0xbaf3f426,0xbbc82dc4,0xbc6c8630,0xbc480380, -0xbb63bd6f,0x39b58f7d,0x3c4b4d29,0x3cac5a31,0x3c8a3725,0x3b49d96b,0xbb218873,0x3aaed5c9,0xb9e7fe04,0x38e2b6ef,0xb92b86c1,0xb7c5869a,0xb8d024f0,0xb8bd7bb0,0xb8c2a365,0xb89e2129,0xb51bb1b7,0x3945c24b,0x39e4fc20,0x3a5dca3b,0x3b1aebae,0x3b7c1f5f,0x3ad8f768,0x3a37ac37,0x3ac32f58, -0x3ba73cb7,0x3c4325b7,0x3ca6332d,0x3c148544,0xbb6600ad,0xbc8d306a,0xb9b57eef,0x3c4774da,0x3c75bf86,0x3cacde0e,0x3c6f7412,0xbbc18b1e,0x3b61f176,0xbcba7d6e,0xbd36f8f6,0xbc6a8d74,0xbb8dba62,0xbbb412d7,0x39eae21b,0xb8b50c00,0x39775085,0x3891a917,0x3913654c,0x38b9b277,0x3907f71d, -0x38ccd891,0x38cf96a6,0xb7ba1f79,0x39234b17,0xba8385ce,0xba9e77f3,0x383d4879,0xb9ea8be8,0xbb0d31d0,0xbb4f273e,0xbbaa3ac0,0xbbe5c75e,0xbc1388b2,0xbc064285,0xbbf1d9b8,0xba06478c,0x3b7a86e4,0x3c9553ca,0x3c5477e0,0xbc0709a6,0xbc898b3c,0xbc94070c,0xbc70a76a,0xbc331664,0x399eed47, -0x3c805ca4,0x3c8c73d4,0x3c4024b3,0x3b9ba3e1,0x3a5a8a7c,0xba2b9b7e,0xb8b5ac47,0xb9a997d6,0xb9461e7e,0xb95a8c3e,0xb948f236,0xb9588b92,0xb8fd15e1,0xb8b6e857,0xb9157955,0x3a70522f,0x3b9782c1,0x3bfa1008,0x3c027e2f,0x3bf27ce4,0x3bc960db,0x3b9ce951,0x3b369744,0x3aa6c959,0xb9459b5c, -0xbb53b60d,0xbbbb5a65,0xbbeda124,0xbc060f15,0xbbe3b370,0xbb6b3e1a,0xbb9b91fb,0xbbe7e1d7,0xbbf73828,0xbc128aa8,0x3bb400f1,0x3bc1fb1b,0x3b5fdb87,0x3b2a2328,0x3a9dfa34,0x3aa480da,0x3a0ae2bf,0x3a2fff1d,0x3a06b2e1,0x39fa299a,0x39c3e14e,0x39e3d579,0x39c2445d,0x39c16b65,0x39044d41, -0x39d8d837,0x3ac8f5ef,0x3b01c4f4,0x3aa95eeb,0x39604959,0xba25360b,0xbae826f3,0xbb3a872c,0xbb85493f,0xbbb314bb,0xbbe1c9de,0xbbba21ec,0xbba39c1a,0xbba36e77,0xbb94d905,0xbb88206b,0xbb4e1085,0xba491992,0x3aed967b,0x3b89affc,0x3bc0c83d,0xbb8c70f2,0xbba54309,0xbba3eac4,0xbb9cd225, -0xbb9cb882,0xbb80e76d,0xbb357633,0xbaeb2c32,0xbaa98351,0xba835ba2,0xba4e4065,0xba824a6b,0xba6a405f,0xba7dbaf2,0xba0bbd46,0x3721431a,0x3a6597db,0x3aa8b894,0x3aedceb6,0x3b20b680,0x3b1d5268,0x3b1d6b4c,0x3b1de275,0x3b42252d,0x3b683a65,0x3b836ce0,0x3b22ff71,0x3a7f5cfb,0xba032cea, -0xbaabf009,0xbb05f4a0,0xbb3fedbc,0xbb3cc9b1,0xbb536846,0xbb7a40b9,0xbb8e290c,0xbb2783fd,0xbb649f1d,0xbb1cbbd1,0xbb11be0d,0xbab0ebe9,0xba85b5ff,0xba8501ae,0xba3822a4,0xba01ec7f,0x38c883a0,0x3a5bed27,0x3abbe521,0x3b102471,0x3b4393c5,0x3b72196c,0x3b82f175,0x3b8dcb75,0x3b986dac, -0x3ba0cd1f,0x3ba4a558,0x3ba403a2,0x3ba62e4c,0x3ba58461,0x3ba5c6ea,0x3ba1d5fb,0x3ba99ffd,0x3b927547,0x3b86e770,0x3b712554,0x3b4c4be4,0x3b1e26fb,0x3ad2076a,0x3a390517,0xb91076e9,0xba5037f7,0xbad220fe,0x3b18dde6,0x3aea499b,0x3b221d6b,0x3b2d6ea4,0x3b40f629,0x3b242d33,0x3b41a7b6, -0x3b608a57,0x3b7e8cdd,0x3b88af4c,0x3b8ff735,0x3b98dfad,0x3b9f7445,0x3ba5b6f4,0x3b94fb2b,0x3b910632,0x3ba2266d,0x3b9cca42,0x3b9e0aa1,0x3b9c1448,0x3b9f5b4a,0x3ba1a061,0x3ba452ec,0x3ba67865,0x3ba823bd,0x3bab99b7,0x3ba09af4,0x3b9661c0,0x3b8af1ba,0x3b805c53,0x3b6f8d60,0x3b6234f9, -0x3b56d545,0x3b48d852,0x3b35ac2c,0x3b24de7f,0x3ba7da91,0xbaf6c019,0xba948e2e,0xbaa80106,0xbac090c8,0xbad8d316,0xbaee3b48,0xbae45f39,0xbace8453,0xba82938e,0xbaae284a,0xbac1edbf,0xbac91c82,0xbb142c8c,0xbb124756,0xbaa2997b,0xbb0aaa23,0xbb0d208c,0xbac74610,0xbaf9eaf5,0xbaf952d8, -0xbb05e6e1,0xbaec478a,0xbaef7377,0xbafe78ab,0xbb19e2f7,0xbb126c6a,0xbae185e3,0xbaa16644,0xbaa28c79,0xbb04bad8,0xbada50f8,0xbabbec0f,0xba2ff5df,0xba75a22b,0xba889f71,0xbae17ab7,0xba958bf8,0xba5e1e88,0xba956910,0xbab7bf7e,0xbadb8f30,0xbade792a,0xbaf9db56,0xbab12876,0x38e65dda, -0xba12187f,0xba718258,0xbabba232,0xbb406b7c,0xbb559389,0xbab34d76,0xbb679e31,0xbb52ccbd,0xba883e2a,0xbb065da6,0xbb0f5644,0xbb335048,0xbb0f8e56,0xbb360d80,0xbb71c678,0xbbb1f7fd,0xbbaaa6d7,0xbb577dc2,0xba947a5b,0xba327108,0xbb3c2af5,0xbb0293dd,0xbaa2ae92,0x3a581feb,0xb8c3484b, -0xba4be5e2,0xbb27db58,0xba927536,0x3a5ea0fa,0x3959aa54,0xba0cc893,0xbaac43f8,0xbaeca538,0xbaa3e930,0xb99311c3,0x39a9e0d1,0xb8850ac3,0x396b5a2b,0x397fe288,0x3a1a8270,0x38a7111b,0x39def415,0xba9962e8,0xbb3ce4ab,0xba9fb503,0xbb2441e9,0xbb36044d,0xbb7b1c33,0xbb1730aa,0xbb3e1600, -0xbb642a6f,0xbbd0fe77,0xbbb703db,0xbb0e20f1,0x3a6dfc0d,0x3a626e75,0xbb84599c,0xbadfa150,0xb9097ccb,0x3b91ed61,0x3b12c9e4,0x3ac78935,0xbaf5d6fc,0x3a837774,0x39a5cdbf,0xba065082,0xba763e66,0xbac173c0,0xba84abd3,0x39882ecd,0x391a6b2d,0xb90bc30f,0xb6db0223,0xb88829fe,0xb8d6b709, -0xb922d734,0xb6a1c5e3,0xb8f2e33f,0x3a364529,0x38d6bc88,0xba398d4a,0xbb1b40f1,0xbb5d8a64,0xbb9370bf,0xbb42b5f0,0xbb97a297,0xbc08c78c,0xbc70c719,0xbc6e0164,0xbbf6fd19,0xb807eacb,0x3a901ec6,0xbbdcb435,0xbb4b7d8b,0x3a1d5711,0x3befecc1,0x3b5de198,0xb99d1cca,0xbbbd0141,0xbab09b01, -0x3c008956,0x3b86f979,0x3b8349ae,0x3ac70e7c,0x392831a9,0xb7c35b31,0xb89a6f10,0x37c82101,0x37a5773e,0x37f5a3f8,0x38645a82,0x38138f21,0x38110625,0xb86e8658,0xb931734a,0xb95a5b06,0x3a805e73,0x3a4834c4,0xbb38692a,0xbb9c9711,0xbb8d88ba,0xba81278d,0x3bc62058,0x3c8a60bd,0x3cada201, -0x3c8b8295,0x3c2882b5,0x3b9474a5,0x3b832613,0x3b3e2f85,0x3b6e6c5b,0x3bdadde4,0x3bd27515,0x3c2ef447,0x3c9a56ab,0x3c3f7085,0x3badec34,0x3b9c4a82,0x3b133615,0x3abcbbf5,0xb95104d9,0x38051592,0x38990987,0xb792559d,0xb6cef8e0,0xb6f14fd3,0xb7c91296,0xb7901083,0x35c4243f,0x37cfd7c7, -0x38e6458a,0x389620c0,0xba076cfe,0x39291657,0x39c3ee0a,0xbaaa5b1a,0xb97ff850,0xba8ad8f5,0xbb73ea2d,0xbc14f18b,0xbc53b896,0xbc4e2b24,0xbb7803f7,0x3ba27d49,0x3c30788a,0x3b9c2510,0xbae06e5f,0xbbe4dd51,0xbc2179a4,0xbbcc5509,0x3acabccf,0x3b98cef9,0x3c27722c,0x3c8f8ca4,0x3c6abb74, -0x3acb7dd9,0xba593d94,0x39ab6563,0xb9833309,0x3870e374,0xb746cc40,0x36ead915,0x36e4d897,0x364184f7,0xb7337424,0xb823e8e4,0xb869d5e3,0xb8cf7633,0x3997d295,0xb7d6e435,0x39fcb73b,0x3b31af7e,0x3b539185,0x3b8d5bf0,0x3bb0f6a3,0x3c336384,0x3c6d3da8,0x3c773cfc,0x3b17f56a,0xbbf8cd10, -0xbc659109,0x3b44c255,0x3c5f56c9,0x3c3f9c9e,0x3c871e52,0x3c03058f,0xbc2eff96,0x39fc8745,0xbc77d2da,0xbd372495,0xbc6cf70b,0xb9d39916,0xb8a2e165,0x38ff0103,0x38cae8b6,0x37ed64f2,0x3732c6ff,0x366b87c9,0x3698cda9,0x370962a3,0x38035a12,0x387817d9,0x38b90444,0x383a253d,0x39178838, -0xbacbfc75,0xbb30f1a3,0xbb7cc7cd,0xbba03c3a,0xbbac780e,0xbbd8c44d,0xbbfb5d53,0xbc0c8961,0xbbe7bbb3,0xbbcc4b3f,0x3acd8193,0x3c2a427a,0x3c61a590,0x3b8a892f,0xbc8b9719,0xbc482d35,0xbbe522ba,0xbb96ce5d,0xbad48058,0xbb43ac21,0xba541b27,0x3a424c19,0x3a62e15a,0x3aaf2d18,0xba7b79c7, -0x388d0e9a,0xb92fa133,0x37039cce,0xb7cb0257,0xb5a59229,0xb8185d6c,0xb85ba9f6,0xb905738c,0xb9076cc8,0xb9296a77,0xb9acf55c,0x3aff78b9,0x3ba1e054,0x3bd8c5af,0x3bd48ab1,0x3bbb219a,0x3b91c03b,0x3afaeeb7,0x38c8da14,0xbabda961,0xbb471b2c,0xbbac57cf,0xbbd85892,0xbbdadd6e,0xbb8dfd9a, -0xbab26958,0xbb6818c3,0xbbd9594e,0xbc09a646,0xbbd89b99,0x3bd3511e,0x3bef6ab1,0x3ba6ca71,0x3b582b0e,0x3afe13f9,0x3a145dd4,0x39c55018,0x38bcaac7,0x387171d0,0xb75f2e8a,0x36b5ca05,0x386f21dc,0x3901924f,0x39682b85,0x39a566b2,0x3993e277,0x3a3ea19a,0x3b14013b,0x3b293d4e,0x3b0920c3, -0x3a6c5594,0xb9deb010,0xbaf1ec71,0xbb3b4ae4,0xbb8e0a85,0xbbd2f769,0xbbb89dff,0xbbb1684f,0xbbbc5894,0xbbaf9b7c,0xbb9b311f,0xbb1a793d,0xb9e02992,0x3b27e1e2,0x3b9a3b98,0x3bdb3b1e,0xbb21c2c6,0xbb3ba212,0xbb46f2b7,0xbb373f9f,0xbb353337,0xbaedf3f9,0xba78b34a,0xb84e7ee4,0xb7c7dbdf, -0x391f32b8,0x389ea203,0xb7fc9842,0xb96be4a1,0xb9d262e9,0xba5f1366,0xba7c0cd9,0xba139a84,0xb99b1f0e,0x39b43f62,0x3aa326bc,0x3a270d0c,0x39e1d302,0x38a717ae,0xb7a42fb8,0xb8ce23c9,0xb9906bb1,0xba5dad6c,0xbabf726b,0xbafdfd7d,0xbaff8ffe,0xbb00579d,0xbb179776,0xbb095d1c,0xbb146a47, -0xbb255044,0xbb3507c3,0xbb4e3cf1,0xbb83b20f,0xbb789022,0xbb5b07ec,0xbb445f9e,0xbb34d71a,0xbb32af7a,0xbb2221c4,0xbb0fab00,0xbae5887c,0xbaaf652c,0xba741502,0xba0f8c3a,0xb8a92ec2,0x3a5b56ee,0x3ac8a98d,0x3b1032c2,0x3b404bad,0x3b818323,0x3b881bf7,0x3b804da2,0x3b7d5782,0x3b756542, -0x3b6e8e41,0x3b64af1c,0x3b65f1bf,0x3b3c92ec,0x3b214cc4,0x3b024b07,0x3ab1ff61,0x3a3077c8,0x379dd27d,0xba2a71ff,0xbaa09974,0xbad6475d,0xbb19a5a3,0x3a25834f,0x39b1629b,0x3a4cf6ac,0x3a6c7d2d,0x3aa85dde,0x3a355bdd,0x3a8fa2cc,0x3abeaf86,0x3ae5ee32,0x3b00b3ca,0x3b10f6e9,0x3b217a86, -0x3b3538ba,0x3b42ff57,0x3b29fc60,0x3b1a0b2f,0x3b61a747,0x3b4961db,0x3b462343,0x3b3b6d33,0x3b402126,0x3b3f52d3,0x3b3f3925,0x3b3f1f1d,0x3b3db583,0x3b3fb5f8,0x3b2c19a6,0x3b1a74fc,0x3b086096,0x3af3e66a,0x3adc5e91,0x3ac6601f,0x3ab532ec,0x3a9b0d19,0x3a6fe619,0x3a43e990,0x3b328cf8, -0xbad72ba8,0xba8ec8f5,0xbaafdbd0,0xbab2ddc8,0xbac1e3a4,0xbac6388c,0xbabf00e9,0xbab3ac1f,0xba0865e0,0xba8c6f2b,0xbaa73ec9,0xbaad7062,0xbb03d3e9,0xbb0a1b1d,0xbabd751b,0xbaeb4907,0xbad4c791,0xbaba35ce,0xbad1c383,0xbace8084,0xbada3b53,0xbad3bff2,0xbadca7ec,0xbb003f16,0xbb0125f3, -0xbaf05d5f,0xbac53214,0xba915529,0xba9b7b11,0xbb0d431c,0xbac2b8aa,0xba9dd240,0xb9d87813,0xba7da834,0xba91674b,0xbac72085,0xba8df717,0xba64340c,0xbab75cbb,0xbaa9202d,0xbaab8d64,0xbab3252c,0xbae029e1,0xba61b174,0x39eb7018,0xb924b22b,0xb9817dbd,0xb9a563d1,0xba67b5d5,0xba8b739f, -0xba0f70a0,0xbb05bd11,0xbb1e0adf,0xbab57a38,0xbab121ff,0xbadea164,0xbb172ecd,0xbb121293,0xbb3f505e,0xbb81bbaf,0xbb8f88bd,0xbb7cf0d8,0xbb282840,0xba582cbe,0xba5dfbf8,0xbb654f3c,0xbaf9e4e9,0xba833117,0x3a841558,0xb9f1dc53,0xba916b3f,0xbb09966e,0xba898d63,0x39967e45,0xba806adc, -0xba320cd6,0xba8ff3a2,0xba89b8e8,0xb9612e65,0x39453e01,0x37260bfd,0x3748ee6c,0x3916d830,0x39220331,0x39c58580,0x39a1e28a,0x39a8b61b,0x39ca145c,0xb9401071,0xba60f0b0,0xbad8b7ce,0xbaf4f175,0xbb41a29d,0xbb148d54,0xbb4c5178,0xbb8e16f9,0xbba41798,0xbb845aab,0xbaf4551e,0x3a07ce98, -0xb78cd524,0xbbaf549f,0xbad4c395,0xb898b01f,0x3b8da340,0x3a67a5f1,0x397cc591,0xbad6120b,0x39a3d6c8,0xb6ac593b,0xbacd8c2a,0xba7e8a7a,0xba3976be,0x3909668b,0x3957387f,0xb88039d9,0xb73bc11a,0xb6ee7a15,0xb83edc8f,0xb8be5fa1,0xb9205a74,0xb907ba89,0xb92366aa,0xb8ebf2c9,0x3966d160, -0x38f5076f,0xba80eb2d,0xbb1cda24,0xbb8382b1,0xbb72b96b,0xbbc4e834,0xbc213015,0xbc41a4cf,0xbc27c03c,0xbbad8fd2,0x3a080d4f,0xb9b1f87d,0xbc116c17,0xbb6e27ce,0x3a15662c,0x3bdfa443,0x3acbf07b,0xbacfbd9f,0xbb8904e4,0xba83a7bb,0x3b32eaf9,0x3b22e910,0x3b0a3780,0x39cf85a9,0xb8ab8eca, -0xb8697254,0xb72ec590,0x381b7543,0x36456639,0x37a20318,0x384b0712,0x389054d3,0x386b2ebf,0x38b51d35,0x36f89082,0xb8ac7def,0xb8b36559,0x3a4e3cd4,0xb9a8488f,0xbaffa9a3,0xba0a8fce,0x3b26dfce,0x3bea8dc6,0x3c71439d,0x3c80d776,0x3c1a8d3e,0x3bad3eb5,0x3b46f793,0x3b8695e9,0x3b9ccc7e, -0x3b90aeb9,0x3b4f0881,0x3bb1ca95,0x3c07f563,0x3c5037bd,0x3bab9bb0,0x3b8f2146,0x3b2c594b,0x3b01c0c5,0xb8df9951,0x38392337,0x387ceb51,0xb800a19f,0x373220f1,0xb7c3065c,0xb7539252,0xb7f9c385,0xb7f3a8a4,0xb8277f9d,0xb7d9de0a,0xb7e405d9,0x38df16ef,0xb89c6502,0xb9280d16,0x3a358ae7, -0xb987e7f5,0xbaefe8da,0xbb876e60,0xbbe78d7b,0xbc2f5e3d,0xbc31286f,0xbbe3d043,0x3a4fd321,0x3bba1e23,0x3bc1fa25,0x3b3eb664,0xba93b038,0xbbb33320,0xbb99a3b9,0xba9db680,0x3b940134,0x3bc1cb93,0x3bd13c7c,0x3c3ede93,0x3c04c026,0xb9f3efdd,0xb939b1d3,0x38bd04f1,0xb7f93393,0x383c331a, -0xb4a126ac,0x37fb4cd7,0x37ac0083,0x37c579d8,0x37efe291,0x376369fb,0x379da6b3,0xb894cca5,0x37f8072c,0x38efd37f,0xb9bb1e2d,0x3ac5f7f2,0x3b7dae5c,0x3bcec053,0x3c05192b,0x3c51b64b,0x3c4e4ea8,0x3bf67b02,0xbb03b2ca,0xbbf31fa1,0xbbfd2253,0x3b8ac5fc,0x3c2cf1dc,0x3c026279,0x3c0ebfb0, -0x3ab9ba88,0xbc1cb628,0xba4f9e1a,0xbc19cda3,0xbce599ca,0xbc2376af,0x3abf9b82,0xb8f9bb74,0x3859a321,0xb79f1ff3,0xb824087d,0xb80a1697,0xb815a9a1,0xb813233f,0xb7fc2938,0xb7c1db79,0xb7f74fd1,0x37e2cbd1,0xb6b1b36f,0x394f5b00,0xb9413882,0xbb37b8eb,0xbb9857ee,0xbba15f70,0xbbab400b, -0xbbc91458,0xbbc81d9a,0xbbc3ea59,0xbb987107,0xbb10772b,0x3b891389,0x3c4ea26c,0x3bc7b730,0xbb36831f,0xbc5de665,0xbbb41bde,0x39d0cebe,0x3b1b6de1,0xb9a9acc9,0xb9a442d0,0xbc48949f,0xbc0305ae,0xbaea7087,0x39599932,0xb8f9393f,0x38b7d54a,0x385da32b,0x38b3af6f,0x38778083,0x388eadf2, -0x386f2d14,0x38059174,0x3855901e,0xb867e13e,0x381223f1,0xb9bace30,0x3954807e,0x3b3e7fb6,0x3b9e8d35,0x3b96de60,0x3b856bbd,0x3b48bbaf,0x3a9d1883,0xb9b6b2fa,0xbafe51c2,0xbb242f93,0xbb850211,0xbb8c6ce9,0xbb8a5516,0xbafdb671,0x38fce319,0x3853dc5d,0xba47d1f9,0xbad3ad82,0x3b084af2, -0x3b9761c2,0x3bc5e240,0x3ba9aff6,0x3b1db451,0x39b1dc44,0xb881d2b2,0xb79810b9,0xb95c47d6,0xb9165aa4,0xb91ce944,0xb91116b9,0xb8f1cbc4,0xb8b83393,0xb8534be5,0x34f79bdb,0x396c605d,0x38ba33b1,0x3ad4d57f,0x3b3ead2c,0x3b46814a,0x3b07b6b4,0x3a894a3f,0xb9883d36,0xba6002d2,0xbb063b23, -0xbb84f55c,0xbb85e030,0xbb8b51a2,0xbb951b1b,0xbb8523f0,0xbb5d5241,0xbaa05b5b,0xba0fc559,0x3abe3597,0x3b32fd22,0x3b84e8f1,0xb9dda3a0,0xb9f832a8,0xba81a91f,0xb9f9e0d0,0xb9b97ffd,0xb851c527,0x39a7b30e,0x39ff9ca8,0x39bb0c29,0x39ba8468,0x39a61e9e,0x3993021c,0x3955ac57,0x3947bbd8, -0x3821fd25,0xb9ac9b3d,0xba1ef3c5,0xba81398f,0xba6ba466,0xb9c6e81e,0xba70118c,0xba8bcf1c,0xbab5457c,0xbae354b8,0xbb081e4c,0xbb21d189,0xbb1391f3,0xbb0e4ad7,0xbb02d6e3,0xbacf81c2,0xbaa413e6,0xba95bee0,0xba75dcf7,0xba7bacfc,0xba718e80,0xba40583f,0xbb064455,0xbb2132fc,0xbb3250f2, -0xbb1d7f9e,0xbb1e7439,0xbb0c5cea,0xbaec3556,0xbabdd56f,0xba8eb3a3,0xba846ad9,0xba681ce6,0xba497eef,0xba2e0817,0xba22bd2b,0xba019e05,0xb94270af,0x39d66e97,0x3a99d2e3,0x3b1a66cd,0x3b230bf4,0x3b0cebc0,0x3b02cfeb,0x3aeccc12,0x3ad221a4,0x3abae1c7,0x3aa34862,0x3a79846f,0x3a3b9290, -0x39effc3c,0x38cedbbc,0xb98b8d2a,0xba1bef16,0xba6adc08,0xba932972,0xbaae0642,0xbadbf817,0xb9d68351,0xb9fded40,0xb9b04fb0,0xb9a09f97,0xb9193d73,0xba0a39e1,0xb9fc1c96,0xb9feb3f6,0xb9d29ed2,0xb97a1055,0xb864dfb0,0x38fd0ac4,0x39b17913,0x3a0f12de,0x3a1fe2af,0x3a198e1d,0x3abf8f9c, -0x3a99f7ec,0x3a8ebc11,0x3a71ccf8,0x3a72c9e3,0x3a60824a,0x3a4e8f06,0x3a4153cc,0x3a2fac9d,0x3a20de22,0x39f8b528,0x39b1fea7,0x3964e40e,0x390f347a,0x38a4ac46,0x37d178dc,0xb81f4634,0xb913719b,0xb988807c,0xb9b1ced2,0x3a05ff4d,0xbaa25a11,0xba745943,0xba984418,0xba939b51,0xba9742cb, -0xbaa65618,0xba956d06,0xba85776a,0xb9a8a575,0xba3d8146,0xba613b36,0xba60ae12,0xba9c2f51,0xbaaa6692,0xba906861,0xbaa8f933,0xbaa02687,0xbab6222a,0xba8c4b07,0xba8b3bb3,0xba90acc0,0xba9da9b2,0xbaa821ea,0xbac7572c,0xbaae1b53,0xbaa1a8dc,0xba95a989,0xba799b9c,0xba884c3e,0xbadd77a4, -0xba9a5401,0xba7cebf7,0xb9c95e5a,0xba650a73,0xba7bb9db,0xba8bffc2,0xba6b5bcc,0xba5b91ac,0xbaaf3c9b,0xba8d4af0,0xba708813,0xba702f81,0xba1ae72a,0xb8b45989,0x393a8ce3,0x382a4c3f,0x38b58053,0x38da6b61,0x38821591,0x385642d2,0x39162df9,0xb955435c,0xba107d21,0xba84b386,0xba4a3407, -0xba73c526,0xbabf31dc,0xbaeb6035,0xbb1a0c50,0xbb4675bc,0xbb2dcd20,0xbb0fe1ae,0xbae3b4b2,0xba5ad4fa,0xba897af0,0xbb3941c0,0xbad66222,0xba79c8b1,0x39fe6ffe,0xba2ca920,0xba86a3a3,0xbaa6b02c,0xba6450c1,0xb9a51763,0xbad36f62,0xba4a5b00,0xb9f4bd48,0x381192b6,0x396184bf,0x38a1d459, -0xb87f6e7c,0xb6fe0f36,0xb6a01b39,0xb7bc6a42,0x37621563,0x3749047f,0x3620e3c5,0x389ea142,0x398d6b59,0x3909054a,0xb9cbee43,0xba3857d4,0xbac2f98a,0xbae24fd5,0xbb1fe0f8,0xbb6149cf,0xbb337261,0xbb0566e8,0xbabad031,0xb9a29c10,0xba7ecd83,0xbb8c2887,0xbacaa18d,0xba029b18,0x3b2974dd, -0xb9473009,0xb9dd7c1b,0xba523291,0xb9891b0f,0xba06b506,0xbb0cc3d4,0xba186a9b,0x389060e0,0x389a839d,0xb8e1f92a,0xb811dafd,0x371a0782,0x371a2df4,0xb6861b5c,0x37756b52,0xb747c914,0xb7950d1a,0xb7065d8f,0xb84dd01f,0xb911a8b2,0x37848902,0x385ecdf8,0xba476cc2,0xbb1893e5,0xbb59ce84, -0xbbab79e4,0xbbf90b8f,0xbbdab330,0xbba5a8df,0xbb4c02bb,0xb97762db,0xbad0788a,0xbbe78ff9,0xbb617020,0xb9c8383e,0x3b853e44,0x39587b48,0xbac5519f,0xbaee64da,0xba3d92cd,0xb85d3e4f,0x3aa16ba0,0x3a31117c,0xb8cbc6c5,0xb7756dc0,0x37a2c386,0x3824c195,0xb7b88c12,0x36838fde,0x36b2c251, -0xb540c60c,0x36e4299a,0x374b711b,0xb64da25d,0x382c956d,0x386a851f,0xb7721f28,0x361cc678,0x39d3fb07,0x3a24f1bd,0x3b057ec0,0x3b89b1b4,0x3bd20e76,0x3c16b153,0x3c075beb,0x3b67ffb2,0x3aa3c66a,0x3a8fe338,0x3b26e104,0x3b988104,0x3b750a76,0xb9c46485,0x3b3cc99d,0x3b900d03,0x3bc53482, -0x3a93f469,0x3b3354e6,0x3ad40a4f,0x398d7f25,0xb9a80f0c,0x39689626,0xb9087af5,0x3879d474,0xb80a38e4,0x3788ba86,0xb70d9810,0x35f94b5b,0xb6be6a4b,0xb460cc26,0xb6e4c19e,0xb737aafa,0xb836573b,0x383c7aa1,0xb8e907ed,0xb7abb3bb,0xba69f275,0xbb503076,0xbbafa363,0xbbef1141,0xbc0a23d3, -0xbbd5ba7c,0xbb17fe97,0x3b3dc5cc,0x3ba0a56d,0x3b362009,0x3a9d50eb,0xba533b0f,0xbb571751,0xba5ef69f,0x3ad883e1,0x3b963865,0x3b9c46c5,0x3b3019b4,0x3baf9eb4,0x3b041045,0xba4ae1c0,0x397fe512,0xb88cf947,0x38080ffa,0xb72a1439,0x37702272,0xb5657fbb,0x3692a8f6,0x36758404,0xb421f2c8, -0x3755d118,0xb607109a,0x3841188d,0xb893ec8a,0x38ab7282,0xb80c4de8,0x3a86ef7e,0x3b6ddedc,0x3bc08e5e,0x3bfce6e1,0x3c1a183a,0x3bee48a6,0x3aedd34c,0xbb6e3b24,0xbbb06bd4,0xbb2b17c9,0x3b5ffa57,0x3bbdcfc6,0x3b856f8b,0x3ac8156c,0xbb3e573c,0xbbc9c2d7,0xba8bd2ba,0xbbca5009,0xbc493d80, -0xbb1abeef,0x3aa55571,0xb9ef205b,0x3906dd98,0xb8b2ae56,0x37900db6,0xb7a8ac2f,0x33f19116,0xb6f0df17,0xb6642b80,0xb6f16203,0x353ab47f,0xb7cdbf00,0x37130eee,0xb89c4b68,0x399a3f4b,0xba6df118,0xbb4abf40,0xbb48fdfd,0xbb671b1f,0xbb854cec,0xbb652a5e,0xbb3ac417,0xbb034641,0x3ae4bb5e, -0x3ba613f0,0x3c0ae621,0xb9467d1a,0xbbae7718,0xbbd3a76c,0xbb03f653,0x3b09a3b5,0x3bb7dc02,0xbb027de3,0x3b8faa25,0xbc28b98d,0xbb945430,0x3a14adee,0xb8f18bed,0x38de595a,0xb71986ab,0x3821bc02,0x35a354a9,0x37a3fa1b,0x3701da56,0x3741d36e,0x373d6294,0x36ed30a6,0x37c9afba,0x36974117, -0x388f2d50,0xb9d2bd7a,0x3a8df6c5,0x3b4c9881,0x3b23b0d7,0x3b066a97,0x3a905673,0x395a1137,0xba505973,0xbb0defdd,0xbb1fb201,0xbb5025d8,0xbb1b9268,0xbb151a74,0xb9ae80c8,0x3ae16275,0x3b718aa7,0x3b9ff62a,0x3bbfc67d,0x3c014668,0x3a4f04b2,0x3b4086a4,0x3b3cf68c,0xb7c52523,0xb96173b0, -0xb826ca93,0xb8db10f8,0xb7ae5f80,0xb81a9efc,0xb7c13e68,0xb7c8fd13,0xb7a20c86,0xb7a5c4ea,0xb79d8166,0xb826fdf5,0xb83c5c5c,0xb82a96a9,0x3971abaf,0x3ae42f45,0x3b23aca4,0x3b00afe3,0x3ad2604d,0x3a530850,0x39e66617,0xb9d00e37,0xbadf2ca8,0xbb0e0726,0xbb1be91e,0xbb240d45,0xbb0fffb4, -0xbb043708,0xbab7d589,0xbaedfb82,0xbaa3bda0,0xba493bf0,0xb9b328b0,0x3a8e5898,0x3aa729de,0x3a0ca378,0x39ce48b6,0x39607555,0x395a3cf5,0x39030237,0x37f38cc0,0x383f21d7,0x37ef0b3c,0x3811c77a,0x37d87e5b,0x37d3bbb9,0x37c371ed,0x3869bf17,0x38ffbeea,0x387ae062,0xb9f99db4,0xba96a583, -0xbaa8d796,0xbabe084f,0xbac77182,0xbad6667b,0xbaf877bb,0xbb0c74ae,0xbb1ea503,0xbb0fd774,0xbb0940f4,0xbb01c862,0xbabc8026,0xba7b74a8,0xba01b12f,0xb923ea07,0x38b0717f,0x39dec800,0x3a6736fa,0xbaa86f18,0xbaac5c7f,0xbac5f8ae,0xba89ccff,0xba79926b,0xba21d7fe,0xb949eabb,0xb85d11cb, -0x369ac197,0xb7b562f3,0xb78a2d91,0xb7bd1fe8,0xb58611b0,0xb74b5fb6,0xb8f1a52a,0xb9a81b79,0xb9edcb74,0xb9b8354d,0x39ac8d9e,0x39a980b2,0x389fc913,0xb8b14033,0xb973ffcd,0xb9d7aae3,0xba0e11d2,0xba391195,0xba3bba6a,0xba3e2085,0xba49f0ef,0xba63c60b,0xba8310c2,0xba941dd9,0xba99b8ac, -0xba9a95f9,0xbaa4b18a,0xbaaa4073,0xba5df681,0xba535832,0xba6298cc,0xba79d127,0xba816ac4,0xba877a6d,0xba8b938d,0xba8abb06,0xba88b263,0xba7dca1a,0xba6dcc10,0xba5d7240,0xba4f8451,0xba39fe6c,0xba2e1f2b,0xba2d74a7,0xb972d47d,0xb9961bb3,0xb9b8b709,0xba02de50,0xba097737,0xba1a53fc, -0xba2d12bf,0xba3a0ade,0xba4a03f4,0xba5fc0cf,0xba61c02c,0xba67ca7a,0xba6716d0,0xba652869,0xba5d0272,0xba5442bb,0xba534c1f,0xba5588af,0xba5261b5,0xba55d02b,0xba557042,0xba0a6db1,0xb9e46d28,0xba04f393,0xba07613f,0xba120926,0xba2c8772,0xb963739c,0xb9400263,0xb7dc5f1a,0xb8c83c20, -0xb8ed3c75,0xb8e6fb7d,0xb91a8a62,0xb926237b,0xb90f8b3d,0xb94a699c,0xb946eb07,0xba422549,0xb9f4c830,0xb9d49d97,0xb9dbc077,0xba023900,0xba0b2348,0xba239201,0xba068638,0xb9fd7f6e,0xb9ff8cba,0xb9ee95c1,0xba009b95,0xba31a8bd,0xba076580,0xb9e78a28,0xb973f88e,0xb9d91e0b,0xb9e1baac, -0xb9d3d09b,0xb9d0c8b9,0xb9cc685d,0xba22b304,0xba12407c,0xb8e62215,0x38206717,0x390b82e1,0x387d05e6,0x3832f9d1,0x3825778d,0x386dd2d5,0x3859f711,0x389615c6,0x3881a809,0x38a6f995,0x388e7ffa,0x391965f5,0x385ce02f,0xb813c1db,0xb9a7451e,0xba032def,0xba44980f,0xba7e49d2,0xba99ebe6, -0xba6bd2e4,0xba3f46de,0xba31b5bf,0xb9fa2726,0xba1a031a,0xba91193c,0xba41d7f8,0xba017692,0x37a8f769,0xb9bec3eb,0xb9ea396b,0xb9c57b13,0xb9c3ecf2,0xb97a0e60,0xba7bee6e,0xb8dad387,0x38ed4cbb,0x37d48f11,0xb827cf5d,0xb7b83ff7,0xb74d5283,0xb71131e0,0xb749d7a8,0xb7716eae,0xb7979d25, -0xb7c69c1d,0xb7cc451f,0xb7c32374,0xb84cb7d7,0x36df4615,0x38c3a5fd,0x37a5454c,0xb9cb9574,0xba2df837,0xba765724,0xbaad8f27,0xba549239,0xba16d80a,0xba1b378f,0xb9d6634f,0xba35cdeb,0xbace5789,0xba41d186,0xb9cb571c,0x3a31a8be,0xb99c99cd,0xb98f6220,0xb8a8fb35,0xb969755d,0xb9aef9b1, -0xba91aa5f,0x3914a1c5,0xb7d88cce,0xb80b3299,0x37c0ac45,0x3788c8cd,0x376a3679,0x372ba13d,0x3787efeb,0x36fed551,0x375c4898,0x377cbe75,0x3742223b,0x3713788d,0x380e0e52,0xb83097a1,0x3731805f,0x3797ecbd,0xba213c41,0xbabede7e,0xbb0e6027,0xbb3ce1e7,0xbb036e7f,0xbaae43cd,0xba891f6b, -0xb9f4289b,0xba893e45,0xbb2aaef6,0xbaca880d,0xb9fa9950,0x3a908c96,0xb92a7fa5,0xba0e5fd7,0xb92f8a9e,0xb9666a4c,0xb9cf7e75,0x398fc47b,0x37f7a132,0xb782049b,0x37a3ea7a,0xb629831d,0xb7a7c8b6,0xb59ecd98,0xb6ec622d,0xb6ca9b66,0xb605d609,0xb67f7c03,0xb70032be,0xb69387eb,0xb74d4fec, -0xb6d1e84b,0x378338a4,0x3502cda4,0xb83901fa,0x3a7a7d19,0x3ad427c4,0x3b1b9ab0,0x3b45813c,0x3b3fff3a,0x3b0d9c87,0x3a466474,0x3843dd66,0x399aeacf,0x3a6e0d96,0x3b079221,0x3ac93333,0xba6edfcc,0x3a50c775,0x3a996145,0x3aabc2d7,0xb90573b7,0x3a8a6572,0x3a3845b2,0xb9970e02,0x38f790d0, -0xb87fddbc,0x3815a4bb,0xb6d50ff9,0x3797303e,0xb5414f58,0x3685d3d9,0x361a04b1,0x368bfb54,0x367bf01c,0x36c38510,0x36cea65e,0x36ae7440,0xb6b8ae3f,0x37158c75,0x389922e4,0xba59b66c,0xbaff5808,0xbb367510,0xbb5b60aa,0xbb517df4,0xbb052d93,0xb99587dd,0x3ad077bc,0x3b04b130,0x3a50c349, -0x3932987a,0xb9d34c79,0xba94c939,0x39ff86c8,0x3abb4929,0x3b063831,0x3af24698,0x3a01b433,0x3a73f53c,0xb887b5d0,0x378c1f82,0x3703f97c,0x3685f94f,0x367e318e,0xb5632f01,0xb6e589c9,0x32afd697,0xb65f0a69,0xb627b005,0xb5f02ec8,0xb642c65c,0xb3cc996f,0xb6e7a7c9,0x37b78557,0xb7ed95f4, -0x376def15,0x3a06baea,0x3ad7f123,0x3b23383c,0x3b505586,0x3b498f9b,0x3aeebef0,0xb99a6ba4,0xbb04deb7,0xbb0a99b4,0xb9837d9c,0x3aa63bb4,0x3ad8580e,0x3a96a9e1,0xba606818,0xbb1204eb,0xbb06ee9d,0xba0d5212,0xbb1f4c5f,0xbb39d1af,0x3a18cfb4,0xb923c8e2,0xb4e4f6e4,0x3712bfc8,0x347dd838, -0x3633a5b4,0x36870302,0x3655ab36,0x363649f1,0x367d788c,0x3675d4fc,0x3625e570,0x36b5362f,0x36beecb5,0xb77a7bbf,0x37ba6eb6,0x38216d1c,0xba4f0183,0xba793d21,0xba95b217,0xbaa2d89d,0xba825de7,0xba07a469,0x37f9b120,0x3b041239,0x3b2fae0b,0x3b266f10,0xba997021,0xbb262347,0xbab625d4, -0xb9488a9c,0x3aa2dfc2,0x3b3c9707,0xba9376d0,0x3b5ac2bf,0xbaf568a7,0x3930e42a,0x38cbed81,0xb87d465d,0x3811dbc3,0xb7a2d540,0xb6a5b29f,0xb6eb24ab,0xb6be8c9d,0xb6847acc,0xb6a55b67,0xb6b337a4,0xb6c278c3,0xb66fa0fe,0xb751b168,0x3809d1eb,0xb73d4d39,0xb8defc77,0x3a864794,0x3a30d525, -0x39ff3855,0x38059bad,0xb962ac94,0xba0fd068,0xba8b049d,0xba97a597,0xbaa70a8f,0xba407055,0xb9eb4ec0,0x3a14d5c1,0x3ae8dc3e,0x3b423d4a,0x3b79796a,0x3b9a3239,0x3b97e439,0xba3f3c22,0x3a0b483a,0x3945f186,0xb94f715c,0x38c4dfe9,0xb7d44600,0x38276652,0x3724e098,0x378fe3d7,0x373c17b5, -0x37495976,0x370e91b7,0x37442867,0x3720dc51,0x37c48da8,0x366ae7b1,0x37b737e7,0xb8a54f55,0x38f8b2e7,0x3a87b351,0x3a616610,0x3a63da04,0x3a21a2f4,0x39e19a08,0x38dff560,0xb9916005,0xba0abd50,0xba204614,0xba288de8,0xba31d67d,0xba5b9958,0xba824c6c,0xbab9060b,0xbac2792b,0xbab51603, -0xbaab9647,0x3a6af123,0x3a9807f6,0x39924eca,0xb7b5b0fc,0x3766093d,0xb81fcfd0,0xb8101eed,0xb7f8f181,0xb8008fee,0xb7de18c4,0xb7f2b90e,0xb7cb64c4,0xb7be7351,0xb7c3ff4c,0xb7c0a5cd,0xb808f166,0x3776c3b7,0x390a2c76,0xb92e9601,0xba23f831,0xba187c0b,0xba28e363,0xba2db186,0xba476d9f, -0xba5ddbab,0xba799664,0xba6eb912,0xba7028df,0xba71e16c,0xba2be664,0xb9cfd9a3,0xb8f6d6cb,0x3913b75a,0x39c46f3e,0x3a226336,0x3a67617f,0xb9ee1919,0xb9c91c8b,0xb9ab10b7,0x382ff4b1,0x383bbc64,0x38ea23d8,0x38bad8d4,0x38dfcf74,0x3892d193,0x38bc2350,0x38aed874,0x38bbe393,0x3898d1de, -0x38bd2851,0x38b4ce6e,0x38ea2bc8,0x38857400,0xb8dfde91,0xb9cd73ba,0xb9dd2991,0xb9e54603,0xba07f033,0xba10aeac,0xba20d8e8,0xba2a0625,0xba369cbe,0xba273521,0xba1a4377,0xba1534e8,0xba14610d,0xba1a83a6,0xba21f5ab,0xba1b0a0b,0xba12598c,0xba13009e,0xba07e992,0xb9d8ca18,0xb9c683d8, -0xba0697fc,0xba1102aa,0xba1f4119,0xb9443bb0,0xb9594495,0xb9403233,0xb9409feb,0xb9403ca5,0xb941b375,0xb93eb877,0xb93b8f84,0xb9328856,0xb952b729,0xb9542e9d,0xba176ef7,0xba08614e,0xba041846,0xb9fa1149,0xba0a7366,0xba0d2864,0xba13a976,0xba17a447,0xba1c5b4b,0xba2527bc,0xba2023da, -0xba1d32f8,0xba15f751,0xba108050,0xba07fbb1,0xb9ff7999,0xb9f6f6a1,0xb9ef625e,0xb9e11009,0xb9db64bd,0xba1f5d84, -}; -#endif - -#ifdef IVAS_FLOAT_FIXED const UWord32 defaultHRIR_rom_EL48_fx[HRTF_MODEL_N_SECTIONS * 470] /*Q28*/ = { 0x047ee788,0x04713840,0x0529a410,0x03f0b798,0x047f3c18,0x04837bb8,0x04e6ef58,0x050a0848,0x0526d1d8,0x04dde4d0,0x04b03170,0x047a5f98,0x04557be8,0x0435aef8,0x04219f28,0x0409e930,0x03f53628,0x03e081f4,0x03d08964,0x0369480c,0x0461f8f8,0x03f57950,0x04942f18,0x079476f0,0x03dd0b88, 0x04674460,0x06ce48b8,0x06f8dec8,0x06d02058,0x05eebea0,0x06d4bdf8,0x070a0ab0,0x06c2bbc8,0x04869fb8,0x043c8778,0x07602090,0x05466bc8,0x06734928,0x0623ed08,0x05ecd400,0x06cb3718,0x073ef9f8,0x08a6b430,0x0950db10,0x0967f000,0x08730820,0x0790aa90,0x06a725e0,0x06043808,0x05971410, @@ -19841,410 +10139,7 @@ const UWord32 defaultHRIR_rom_ITD_W_fx[658] /*Q25*/ = { const Word32 defaultHRIR_rom_ITD_azimBsShape_fx[84]/*Q30*/ = { 1073741824,782757760,549755840,368293440,231928240,134217728,68719480,28991030,8589935,1073741,0,0,275683200,466003936,582236480,635655168,637534208,599147968,531770624,446676608,355140096,268435456,195689440,137438960,92073360,57982060,33554432,17179870,7247757,2147483,268435,0,0,15121864,56550404,118380040,194705184,279620256,367219712,451597920,526849312,587068352,626349376,640397504,631360192,602995520,559061568,503316480,439518304,371425184,302795200,237386416,178956976,130459632,91625968,61382240,38654704,22369622,11453246,4831838,1431655,178956,0,0,178956,1431655,4831838,11453246,22369622,38654704,61382240,91625968,130459632,178956976,237475904,303511008,373841120,445244928,514501280,578388928,633686656,677173184,705627328,715827904 }; -#else -const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470] = { -0x3e8fdcf1,0x3e8e2708,0x3ea53482,0x3e7c2de6,0x3e8fe783,0x3e906f77,0x3e9cddeb,0x3ea14109,0x3ea4da3b,0x3e9bbc9a,0x3e96062e,0x3e8f4bf3,0x3e8aaf7d,0x3e86b5df,0x3e8433e5,0x3e813d26,0x3e7d4d8a,0x3e78207d,0x3e742259,0x3e5a5203,0x3e8c3f1f,0x3e7d5e54,0x3e9285e3,0x3ef28ede,0x3e7742e2, -0x3e8ce88c,0x3ed9c917,0x3edf1bd9,0x3eda040b,0x3ebdd7d4,0x3eda97bf,0x3ee14156,0x3ed85779,0x3e90d3f7,0x3e8790ef,0x3eec0412,0x3ea8cd79,0x3ece6925,0x3ec47da1,0x3ebd9a80,0x3ed966e3,0x3ee7df3f,0x3f0a6b43,0x3f150db1,0x3f167f00,0x3f073082,0x3ef21552,0x3ed4e4bc,0x3ec08701,0x3eb2e282, -0x3eabf3c8,0x3ea35e5b,0x3e9b604e,0x3e951978,0x3e88e34a,0x3e799760,0x3e7556b2,0x3e7c70c3,0x3e18ad46,0x3e2aa56b,0x3e03b4c9,0x3e010068,0x3e14601a,0x3e1318de,0x3e2b1b01,0x3e22f5da,0x3e291c0d,0x3e27ed4b,0x3e0ebece,0x3e26bb84,0x3e2ae4c7,0x3e45e480,0x3e731040,0x3e96dc2e,0x3ebbe576, -0x3f0df63b,0x3f185058,0x3f2f4f39,0x3f5f633e,0x3f770181,0x3f80938f,0x3f5f3a68,0x3f419c66,0x3f23635f,0x3f0bb291,0x3ef3b0d2,0x3edf117f,0x3ec653ea,0x3eb1554c,0x3ea3754f,0x3e819f11,0x3e7536cf,0x3e15b0af,0x3e0be51a,0x3dc6f788,0x3dba046c,0x3d9e30bd,0x3d97db1f,0x3d88cc62,0x3d8ff480, -0x3da08fc8,0x3db705ed,0x3d81e369,0x3da1e8fb,0x3da2c5dc,0x3dc265af,0x3de656e6,0x3e256d3a,0x3e598bb7,0x3eaef2c2,0x3efee21b,0x3f444555,0x3f6438ad,0x3f8c4747,0x3fb8e107,0x3fd6d06a,0x3fdb249e,0x3fb0c966,0x3f8b3bda,0x3f4cb436,0x3f1ca18e,0x3f030e80,0x3ef1874c,0x3ed4119f,0x3eb9a223, -0x3ea9d5bf,0x3e8296f9,0x3e4eb3e6,0x3df4d90d,0x3db0650b,0x3d6f6077,0x3d44b0ec,0x3d05342e,0x3cd8c1a9,0x3cbf119a,0x3cd12ebf,0x3ce83eac,0x3d049cbf,0x3cc6af7a,0x3ccb3b17,0x3d06da74,0x3d4e2e2c,0x3dc31338,0x3de90336,0x3e3e4014,0x3f47f649,0x3fa1245a,0x3fd3acac,0x3fde77f6,0x3fec2853, -0x3fe593de,0x3fe96050,0x3ffa4582,0x3ffd2d34,0x40041b8b,0x400541c7,0x4001e8bd,0x3fed6164,0x3fcee5df,0x3fa4929d,0x3f7b4813,0x3f3f3f70,0x3eeb8e5d,0x3ea84661,0x3e54eea5,0x3e126301,0x3da32fb1,0x3d661c88,0x3d17185e,0x3cf9cc3a,0x3ccfa3dd,0x3d03dfbc,0x3d080ea1,0x3d0bfb8e,0x3d0e3e9b, -0x3d3a2b8b,0x3d97d3d2,0x3ddf9f5f,0x3e2cbfe3,0x3e6b3c91,0x3ee1cf1c,0x3f4a2014,0x3f7890ed,0x4024d50d,0x402f3e01,0x402ce8fa,0x40102e20,0x4011227a,0x401651ff,0x400d2f17,0x400900d8,0x4008f280,0x40068f8f,0x400126da,0x3ff0457b,0x3fb996c6,0x3f8b9e2b,0x3f6068b5,0x3f0be8a0,0x3ed5acad, -0x3e68eec9,0x3e45b6ba,0x3de819c5,0x3da1edf5,0x3d4288a4,0x3d151188,0x3cf527fa,0x3d104a92,0x3d26fca8,0x3d4f20b7,0x3d409322,0x3d59f3cc,0x3d96abf0,0x3dc8860a,0x3e1553b6,0x3e6dc06e,0x3ec4a74c,0x3f8aa8eb,0x3ff8b3b7,0x40808960,0x40768ef2,0x409c2f8a,0x40479ce8,0x402a7e54,0x401d47c0, -0x4002cb90,0x4004c608,0x4014c7d7,0x4019a72a,0x40194d70,0x400d24a1,0x3fdbc40b,0x3f9d47d1,0x3f5db62b,0x3f0b1d4b,0x3edaced4,0x3e6bca5e,0x3e48d1e9,0x3e0bff65,0x3e08773c,0x3da209bc,0x3d773fcb,0x3d8e5bdf,0x3d6759bc,0x3d7f6a8d,0x3dd2459a,0x3d67597f,0x3d670b0f,0x3d9e4691,0x3e2b93b2, -0x3e3c39bc,0x3ef6ec2c,0x3ebeb9b8,0x3f9c6287,0x4022ef5e,0x408c4efa,0x407affd6,0x409ec200,0x4039eecc,0x4011e38c,0x400348e9,0x40104faf,0x401ad488,0x4018d5ac,0x400ba5a3,0x3ff9e422,0x3fd0076d,0x3f9f0267,0x3f67bd92,0x3f22bc44,0x3ee99177,0x3ec15245,0x3e814c70,0x3e60c204,0x3e13ed43, -0x3e0522d9,0x3db7be71,0x3d8f5bf4,0x3d7b9b42,0x3d509e3a,0x3d813dc6,0x3e26950d,0x3d9266e3,0x3d7c2af0,0x3da3d63c,0x3dc0eabb,0x3e1be4ed,0x3e63f33b,0x3ebcfd2c,0x3f8167b3,0x3fd3d3d7,0x40306659,0x401bf675,0x401a8567,0x3ff122f5,0x3fdd583c,0x3fdb1405,0x3fcc073d,0x3fd2c5ff,0x3ff30b8a, -0x3fda4516,0x3fbd082e,0x3f95da01,0x3f5828c3,0x3f1eb26d,0x3efe3c4c,0x3ed82cb1,0x3ec62e2e,0x3ea595ff,0x3e7e3104,0x3e3abf3c,0x3e083f7b,0x3ddf0610,0x3dbb6549,0x3d916c99,0x3d857484,0x3d92353e,0x3de1cf37,0x3da3bc9b,0x3db1894f,0x3de51728,0x3e159f1a,0x3e3b3975,0x3e8cd940,0x3f43a2e9, -0x3f728996,0x3f63e8c9,0x3f8fe834,0x3f847337,0x3f88c014,0x3f8e14e8,0x3f901ddb,0x3f9041ac,0x3f896366,0x3f8651af,0x3f7d258b,0x3f5d5741,0x3f43b171,0x3f31f896,0x3f22f711,0x3f0866af,0x3ed8aaea,0x3ebeedb5,0x3eccb109,0x3e907436,0x3e914693,0x3e5a36c3,0x3e4fc7c9,0x3e10dfe3,0x3dcc7c4c, -0x3da9d110,0x3da9eedd,0x3db6a647,0x3dcf2d21,0x3dca4324,0x3dcb20f8,0x3dd76acd,0x3e06e7b1,0x3e3bb953,0x3e6b5484,0x3ec62bb2,0x3ee86498,0x3f0fc5a6,0x3f2f9c4f,0x3f424b8a,0x3f6698b4,0x3f6373a8,0x3f6840c3,0x3f72a08d,0x3f630906,0x3f5a68af,0x3f55591c,0x3f3b8780,0x3f27ffaf,0x3f17a470, -0x3f07f863,0x3ef183ff,0x3ed8fb7a,0x3ec40efc,0x3ec703f3,0x3ea8e717,0x3e9619a0,0x3e752095,0x3e56078a,0x3e3433dd,0x3e309aaf,0x3e1405ea,0x3e1f31a3,0x3e13bc36,0x3e2bd85e,0x3dfc021a,0x3e21b187,0x3e0a6b1d,0x3e3e168b,0x3e6fb306,0x3ea4d703,0x3ebbdecc,0x3f270a8c,0x3f0d26d4,0x3f06397f, -0x3f0e37d9,0x3f15e375,0x3f1ebe39,0x3f2a105e,0x3f388839,0x3f2c28de,0x3f240c2e,0x3f1c30e8,0x3f13f64f,0x3f0d419a,0x3f069127,0x3efe9e31,0x3eeef2d6,0x3ee32051,0x3ed8b094,0x3ecb5a16,0x3ecc8c97,0x3eddab26,0x3e9b86fe,0x3ea60bd0,0x3e9561d3,0x3e8b4715,0x3e989beb,0x3e9aa292,0x3eabb617, -0x3e9c3485,0x3eab1f31,0x3ea563f2,0x3e9045ef,0x3ea3a972,0x3eab5e10,0x3ebc5116,0x3ed778da,0x3eff9a16,0x3f0eb71f,0x3ee81f7d,0x3efbab4a,0x3efbde31,0x3f01c977,0x3f03f32b,0x3f08e4a8,0x3f02f0f5,0x3eff85a1,0x3ef8b9d7,0x3ef3688d,0x3eeea72a,0x3eea1308,0x3ee7d149,0x3ee53e6b,0x3ee1a0fd, -0x3ee018a4,0x3ed18af7,0x3efb74c2,0x3eeb1c8a,0x3f049b81,0x3f478aed,0x3ee67f59,0x3efe4636,0x3f3a7d68,0x3f3fe284,0x3f38520c,0x3f23fc6b,0x3f373f8c,0x3f3a3581,0x3f30c2ac,0x3f020321,0x3ef9539a,0x3f467e18,0x3f0feb90,0x3f144908,0x3adf8add,0x3b0df1fd,0x3b242786,0x3a996c3e,0x3ac23067, -0x3a9f1176,0x3af4e431,0x3b079d6b,0x3b04462f,0x3b026b94,0x3af8da75,0x3ae44ab9,0x3ade9a37,0x3addaed7,0x3ae703d0,0x3aebd63c,0x3aed1c62,0x3ae9c5ff,0x3ae7c60b,0x3ab3c12b,0x3b21ac9d,0x3b0f8df5,0x3b2d6e65,0x3bbf978f,0x3b10cf84,0x3b2344be,0x3ba58e0b,0x3ba90e55,0x3ba64f4e,0x3b89e7dd, -0x3b9f9cf5,0x3ba08754,0x3b93581e,0x3b1dca11,0x3b1aee86,0x3bac3280,0x3b447be1,0x3b3ed8b0,0x3b1c6428,0x3aaadfc6,0x3ab0e467,0x3a81afdb,0x3b362557,0x3b6e5511,0x3b5d5484,0x3b63bb6b,0x3b4f42d5,0x3b355d5a,0x3b25727a,0x3b2575b6,0x3b367edd,0x3b459896,0x3b4bd8a6,0x3b4707cc,0x3b2de5e0, -0x3b160e6a,0x3b17a54d,0x3b1b2369,0x3a758974,0x3aad5fd5,0x3a0f563b,0x3a01c2c5,0x3a6d646f,0x3a74d4fd,0x3abcf1bf,0x3aab9fb4,0x3aaec751,0x3a8cb4ec,0x3a139f23,0x3a38fa3b,0x3a103208,0x3aa0da30,0x3ac86e2b,0x3acb17cd,0x3aceceee,0x3adb66c3,0x3abcf759,0x3a4dd7c9,0x3b9425be,0x3be026a1, -0x3bc6d563,0x3bccb327,0x3bafcd62,0x3b990632,0x3b8577a0,0x3b7f7f61,0x3b91ad64,0x3b93fe92,0x3b94f072,0x3b8fa547,0x3b578dd4,0x3b611530,0x3ac8d399,0x3adba22d,0x3aa82c6c,0x3a919c39,0x3a3cf3e6,0x3a106132,0x39f10c75,0x3a2540a0,0x3a7caf8e,0x3a8d8cf0,0x3a21aa85,0x3a19732f,0x39ce2b41, -0x39b9ca20,0x39e47471,0x3ac44a56,0x3a850aa0,0x3adc8952,0x3ad8c679,0x3a9bdeff,0x3a42023b,0x3a1faf79,0x3bc64b41,0x3c312e95,0x3c1ca5a7,0x3c2150a4,0x3c0ed834,0x3c01b2ba,0x3be50893,0x3be7eaab,0x3c0367e0,0x3c0e4bc3,0x3c109d50,0x3c04c954,0x3bbb500d,0x3b8d8578,0x3b2216bb,0x3b0e65a4, -0x3b040988,0x3b025518,0x3a956c1b,0x3a1e774f,0x39efd82b,0x3a44cdb6,0x3a93a437,0x3ac795ba,0x3a87d769,0x3a4e9efb,0x39d02788,0x3a238e82,0x3a14ad59,0x3b44521b,0x3afa0569,0x3be5f2ca,0x3b9ad9d1,0x3bdd7bc7,0x3bf88636,0x3c2c8b6e,0x3c2370a0,0x3c249cee,0x3c32cceb,0x3c11b00e,0x3be41df7, -0x3bf380ab,0x3bca6f6f,0x3b93a3cb,0x3b1830f5,0x3a9c6add,0x3a9b2d49,0x3b51b41a,0x3b2f2bac,0x3b8e1284,0x3b2dd734,0x3b1f44d4,0x3b054659,0x3af7633a,0x3a8c1489,0x3a474430,0x3a1b5e68,0x3990307f,0x39b3fd94,0x3ab98879,0x3a987feb,0x3ac9a139,0x3acca43b,0x3b017a5e,0x3a92385a,0x3b296a69, -0x3ba4ebd2,0x3bf63ab1,0x3c22552b,0x3b5a90c2,0x3af05a26,0x3bb6ff4e,0x3bbf844d,0x3b8b34c6,0x3b3844b8,0x3aa4b11e,0x3aa5853f,0x3a996349,0x3a55f0ae,0x3a5bb963,0x3a78edce,0x3b0fd64b,0x3b993283,0x3c0ffc2f,0x3b97fad8,0x3b3b1856,0x3a806153,0x3a28ab98,0x39e9389c,0x3a0f5531,0x3a2cd692, -0x3a0aba11,0x39a8fec2,0x3a08c606,0x3a257007,0x3a25a420,0x39585c2d,0x398697bd,0x3a6c78fc,0x3adaa965,0x3ad7d81f,0x3b25c570,0x3bc24f21,0x3b3be107,0x3b7fb4b8,0x3b3b4290,0x3b9caac9,0x3ca133be,0x3cd8f2bd,0x3cf0a1a3,0x3cd4bcef,0x3c713c1d,0x3c0ba29e,0x3ba4f416,0x3c2080f5,0x3c53f18b, -0x3c42bf30,0x3bfd78b8,0x3b3def18,0x3a00c6f0,0x3a2411ff,0x3a974352,0x3ac8bb64,0x3a39fdbf,0x39a58d10,0x39c7fb39,0x39b2934f,0x39280ab9,0x39276ce3,0x390d43da,0x388cb423,0x3866c37a,0x398de43d,0x39f3b8ae,0x3a18b780,0x3a541994,0x3a9aef00,0x3ae15440,0x3b028573,0x3be18185,0x3c109bc0, -0x3c97d1a5,0x3cd29664,0x3d260355,0x3cd3037a,0x3c5c7f29,0x3b7e69dc,0x3b2cd4aa,0x3b2dc174,0x3b37434e,0x3b0c2985,0x3ae8943a,0x3a8fb5e5,0x3af902bd,0x3b35a6a0,0x3b44fd52,0x3b20c312,0x3ab9787e,0x3a41ebfd,0x3a105574,0x39d1485a,0x39b73f2e,0x39afe277,0x395f0f68,0x391e3c36,0x38aa089e, -0x38c97a79,0x39243a6f,0x3950ef5b,0x39946f04,0x3a6495f6,0x3a37f9ac,0x3acff89b,0x3b5759a8,0x3ba8f9eb,0x3c69049c,0x3cb29a4f,0x3d07c3ae,0x3cd9f349,0x3cada2a1,0x3c99043c,0x3c87d23b,0x3c37c0e6,0x3be53cfb,0x3bb73678,0x3be936ef,0x3b8f7ae5,0x3b4f26f3,0x3b290603,0x3a5e8877,0x39cc0e47, -0x39aa8749,0x399b8ca5,0x39ad7219,0x39e2ddb5,0x39b2aa6a,0x399368ae,0x3983753c,0x390dc29e,0x390f4f58,0x39853774,0x390f9ef8,0x3936fd34,0x3996cd39,0x3a153968,0x3a92f1cd,0x3b018bb5,0x3bb236b0,0x3c016b86,0x3c0683e0,0x3c3178d4,0x3c337207,0x3c23f63f,0x3c2b3e18,0x3c0123ec,0x3bfa085c, -0x3c01334f,0x3c002cc5,0x3c0bb60c,0x3b757b86,0x3b3795de,0x3b31258d,0x3b369a5c,0x3b337918,0x3b0f18c8,0x3b1c4d77,0x3b108d32,0x3ad94757,0x3ab1f016,0x3a4ce0bd,0x3976c291,0x3991178f,0x397edc51,0x39ca9593,0x399fb628,0x39ecd2cd,0x3a69644b,0x3aa6eaa5,0x3aea0d7e,0x3b14ce05,0x3b618fd6, -0x3b94fe84,0x3bb0b521,0x3ba59f21,0x3baa10f4,0x3bcab647,0x3c008117,0x3ba7a249,0x3bb2da45,0x3bb807e8,0x3bc50cb4,0x3bf3fe09,0x3be53dde,0x3bfbf659,0x3c1b7cb9,0x3be8ee40,0x3bbb81e5,0x3ba314af,0x3b782bfd,0x3b3a7e95,0x3b1349a5,0x3aef2f51,0x3ac83d4b,0x3aad255b,0x3a7ae801,0x3a604e5a, -0x3a2d2b8e,0x3a061bc1,0x398774bb,0x39bf6946,0x3a003caa,0x3a4fe8f8,0x3aa25c21,0x3aceadd6,0x3affb99e,0x3b2ece7c,0x3b31d30e,0x3b4a9e02,0x3b6cd85a,0x3b7f8997,0x3b931030,0x3baa00a9,0x3ba0b636,0x3b81d247,0x3b658f62,0x3b581b6d,0x3b5a4727,0x3b604eef,0x3b707689,0x3b8230ff,0x3b931031, -0x3b6ef734,0x3b538d10,0x3b39f568,0x3b25783c,0x3b138934,0x3b0a6f5f,0x3ae67710,0x3abfce0b,0x3a9d3925,0x3a8036c8,0x3a499525,0x3a2607be,0x3a42a83c,0x3a473519,0x3a88bfd9,0x3a7310d7,0x3aa1e757,0x3ad6e7ab,0x3aef8e86,0x3b0ea2f1,0x3b16b669,0x3b27f990,0x3b3544cb,0x3b426da1,0x3b43ea59, -0x3b432986,0x3b4943d1,0x3b535e9e,0x3b4a0cf7,0x3b43e080,0x3b31bd34,0x3b3ada6d,0x3b3bfd95,0x3b4494a5,0x3b4ae122,0x3b5a71df,0x3b480aa8,0x3b3d2e02,0x3b33531e,0x3b2703e6,0x3b1cf428,0x3b13aed1,0x3b0c20ee,0x3b051fd4,0x3afce0ce,0x3aef8aa5,0x3adfcaf0,0x3adb0b48,0x3b040bc5,0x3b1999ed, -0x3b62ae49,0x3b1a19f9,0x3b2ecd28,0x3b82ea06,0x3b84075b,0x3b7decc5,0x3b69ba7d,0x3b7a5085,0x3b7ad997,0x3b771abc,0x3b4ce05d,0x3b480ef9,0x3b857ecb,0x3b57becc,0x3b5c1fa0,0x38937617,0x38d11696,0x38ebd0f0,0x3850d925,0x38851f46,0x3872f703,0x389c6893,0x38a90179,0x38a4af1a,0x38aef351, -0x38af4dd8,0x38ac23e9,0x38a05f56,0x38a11b3b,0x38b0f2a4,0x38b555e3,0x38b25fa7,0x38a5acdc,0x389811a1,0x3860d2d9,0x38d76364,0x38cbed44,0x39137c0e,0x3988acff,0x38c8dde1,0x390f871e,0x396c079c,0x3976a1bf,0x397226e0,0x394792cf,0x396d9f51,0x397089cc,0x395c9f37,0x3904d53f,0x38c42611, -0x3977b66b,0x392ae240,0x391e0c5b,0x38d878de,0x389e1992,0x38b27ed0,0x38cabc57,0x390be006,0x391d494b,0x39086227,0x391a093b,0x39165b79,0x391b7efa,0x38fc5a9d,0x3914969d,0x3951c1ee,0x3975846e,0x396d585a,0x393de218,0x39041039,0x38cd83ee,0x38bd3a58,0x38fba505,0x37ed92bb,0x385314f0, -0x382ef89d,0x382df2bf,0x381db46e,0x38368261,0x3880329d,0x388f6829,0x38849db4,0x385bd20a,0x3826c263,0x37ecf15b,0x37ba6b5b,0x387c9e9b,0x3867462c,0x388a0556,0x38972e27,0x38dcd0a5,0x38fac2c6,0x3928e615,0x3985a97f,0x39a0d159,0x3986d7a4,0x399375ce,0x39918a68,0x39a356f5,0x396989ea, -0x39781a7c,0x39bcf000,0x39cb2cc0,0x39bf17af,0x398f8f78,0x391e5fcb,0x391241df,0x38830d8e,0x386ff454,0x37e9a318,0x38082609,0x389c19b1,0x387fe20a,0x388cc972,0x385ca90a,0x38d675a1,0x3975d207,0x395ffab3,0x39214fac,0x38e16931,0x37e9a00d,0x3778aa5d,0x38b5d45e,0x380ca163,0x38a024de, -0x38a4cc41,0x3950fed7,0x3997f04b,0x3a073f96,0x3a11cf44,0x3a1f0c50,0x39dcc157,0x39e16ed8,0x39d3b88b,0x3a11040f,0x399bf1d3,0x3a05e3cf,0x3a8cb71f,0x3aafe033,0x3a9feeb3,0x3a606a51,0x39efa427,0x39aa4bda,0x397c047b,0x391e151f,0x38823d30,0x38e8d1c0,0x391cb2f5,0x38d148b0,0x38948f1b, -0x3886b39e,0x388f2e6e,0x39243d12,0x39aeac30,0x399a384c,0x39853461,0x391d5932,0x3867a3ae,0x3981b18c,0x38b4fb80,0x3a33cfca,0x3a1fbd59,0x3aa357e5,0x3a9b3961,0x3a82c651,0x3a13e4ec,0x39f9d2dc,0x3a359362,0x39fb3820,0x3a375bc5,0x3a8e76cb,0x3a79367f,0x3a3f38a4,0x3a8680a5,0x3a5ba666, -0x3a2dc196,0x3a49b2f0,0x3a459777,0x3a7902e9,0x3a4e9a81,0x3a1ce41c,0x39c8d9ff,0x39990740,0x3919aea1,0x3883cb29,0x388de655,0x388668a4,0x38b1abcf,0x3725564b,0x3758d74d,0x390b9743,0x39bec48b,0x39a7239c,0x3996f9df,0x394ef357,0x39db92ff,0x3a48ec4d,0x39be55d1,0x39d0d72d,0x39c1a218, -0x3a4b8ac2,0x3a890a71,0x3a920fcb,0x39a53b53,0x3948bc77,0x395bdd9b,0x3a7f2a78,0x3a35009b,0x3a616c25,0x3a5c2bb8,0x3a015c54,0x3a0ca2b8,0x3a1ee76e,0x39d909d3,0x39828a49,0x39570aa1,0x38a914b7,0x382c549d,0x37e88f1b,0x37c5dab6,0x37303e41,0x3816a114,0x3833f74d,0x386922f6,0x37c4b1f4, -0x371a6492,0x3875ee13,0x39808dc3,0x3a7943ee,0x3a689a1f,0x39f5480d,0x39c6facf,0x3b7a8010,0x3be25576,0x3acca749,0x39efa2fd,0x3af2b9d2,0x3aeae770,0x3b0494e6,0x3b0f6390,0x3ad0e7d1,0x3ab0a999,0x3a764a5a,0x3a2f0e5d,0x3a728ff8,0x3a7e99aa,0x3a2a868f,0x39d5def9,0x395c1f3a,0x3904d0f0, -0x38d0039c,0x38a8e5b4,0x38314856,0x37cec308,0x384b0566,0x38361022,0x37dbe86a,0x3805ab8b,0x35cf492f,0x371c3af2,0x3663de85,0x3769f9d8,0x382a3610,0x3899c7c2,0x388794a8,0x389454ec,0x39aa4bff,0x3add6079,0x3ae241d8,0x3b6c3eab,0x3abfc499,0x3a95d971,0x3b11d438,0x3ad46890,0x3a794529, -0x3a3c7553,0x39bcecf6,0x39dd805e,0x39958b30,0x390c973e,0x394b80ad,0x396d7f89,0x39748c62,0x39730945,0x3974f672,0x3939b277,0x3923b2fb,0x390a1b34,0x3901fec7,0x38bab5ee,0x388c3d4a,0x376d4c45,0x35b0e11a,0x368d86f7,0x35e2f3e2,0x367dd653,0x3698e696,0x357472b9,0x361eac89,0x3830958b, -0x3876c8aa,0x38b00358,0x3a43f3db,0x3ac22e8f,0x3a77434e,0x3a7274ae,0x3a936dc0,0x3a85ee76,0x3a44ce73,0x3a31b921,0x3a3c5509,0x3a2062b7,0x3a1ff9c0,0x3a2c0811,0x3a46adc8,0x3a145bdf,0x39d05eac,0x399ca51a,0x38d39ab4,0x37f725f0,0x38430725,0x38d79fb6,0x39364ee5,0x397a9d98,0x39895375, -0x39607653,0x39301508,0x388c3cb2,0x37ad8736,0x368a5365,0x36b69e60,0x372c9107,0x37559c63,0x379676d2,0x3796109a,0x380574d2,0x372daca0,0x37d2f509,0x390d941b,0x3a2558b1,0x39b76f89,0x39bf6fd6,0x39ec7ccf,0x39c763b0,0x39bd17b9,0x39b04d35,0x39c8666e,0x3a0267a5,0x39ae1624,0x39a2ec1c, -0x39b56c6c,0x39a57ea7,0x39900da1,0x394ed374,0x390cc00e,0x3899cbcf,0x38243f3e,0x381ed510,0x3829cb3e,0x3886304b,0x38966963,0x386ca2c1,0x38466f7c,0x382cb33f,0x381adc45,0x380ca3d2,0x37d06046,0x3839f05c,0x3881e193,0x38b71391,0x38d1a54c,0x38d043a8,0x390796d6,0x3932241c,0x3947161f, -0x397d2445,0x3958bd2b,0x3954f857,0x394604e7,0x391cb254,0x39007fdb,0x38d7b4fa,0x38e49ccf,0x391275b5,0x38f2b5cf,0x38e4d920,0x38d55e2e,0x38724b02,0x382795a8,0x3841f740,0x382c7ff6,0x3832cd8f,0x3858dba9,0x384f5856,0x387f981e,0x388d6bb3,0x38a1d874,0x38aca2f4,0x38cbae60,0x389f110d, -0x38a76c60,0x38e3bdb1,0x38c8b00f,0x38cb2fe8,0x38fd87bc,0x38f790ad,0x390ab117,0x392ba8d0,0x393132ce,0x3958ad2f,0x39815e0b,0x395521b8,0x393373f6,0x39159da4,0x39047a70,0x38f73380,0x38dd4e0f,0x38d39bd7,0x38d68fdc,0x38fad4c9,0x38cb68c6,0x38b05016,0x389ba7ca,0x3886568c,0x3867229c, -0x385e50ac,0x3862e429,0x3875b922,0x38885ec7,0x38996117,0x38ad7d98,0x38c667ca,0x38c75949,0x38c12945,0x38db9eef,0x38e3d4f8,0x3906f7c2,0x392035d7,0x39175bb6,0x391e9a3c,0x3925e0c4,0x39279e50,0x39323a34,0x393fbc13,0x392bfe8c,0x39191bf6,0x3917d594,0x390cacf3,0x38cac022,0x38b62dbd, -0x389d7267,0x389de131,0x389e2cb4,0x389f6dd1,0x38a21bb4,0x38ac00d2,0x389e085b,0x3897e902,0x3894b69f,0x3892f89a,0x38946ee5,0x3893c439,0x389ab7a2,0x389ec733,0x38a2f3f8,0x38aa446e,0x38ad0f46,0x38c4c4fb,0x38d02c92,0x38fd88a7,0x392bd6c4,0x38e0d499,0x390b604f,0x394a1f13,0x3945e3d7, -0x393ba035,0x39265531,0x39300c40,0x392affa7,0x3924e62e,0x38fb1c52,0x38cecb3d,0x391e3e35,0x38fc97bb,0x38e06fa8, -}; -const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470] = { -0x3e8fdc9b,0x3e7ca02e,0x3ea70d73,0x3e8e5fb4,0x3ea8dd68,0x3eededaf,0x3e8704a5,0x3e911540,0x3ed7aa69,0x3ee09a85,0x3edac0ad,0x3ebe2af7,0x3eda1252,0x3edf2449,0x3ed991d3,0x3e8cd8c0,0x3e76d9f1,0x3ef24872,0x3e91d7e9,0x3e7d0776,0x3e8caed0,0x3e5a8728,0x3e73f78b,0x3e782e9a,0x3e7d49d8, -0x3e813d42,0x3e8434cc,0x3e86b742,0x3e8ab0d0,0x3e8f4bf5,0x3e9603b8,0x3e9bbd29,0x3ea4df8c,0x3ea13dfd,0x3e9cd544,0x3e908184,0x3e8fac91,0x3ebda893,0x3ebff1ca,0x3ed08eb6,0x3e75dd83,0x3e48076c,0x3e298b90,0x3e265455,0x3e0dd3f4,0x3e2649fe,0x3e29dffc,0x3e22f191,0x3e2b4f56,0x3e132cb8, -0x3e141183,0x3e011f6c,0x3e047caf,0x3e2b312c,0x3e18a7c1,0x3e7d6b64,0x3e72cc02,0x3e799f9d,0x3e890a3c,0x3e94ff71,0x3e9b6fa8,0x3ea356e4,0x3eabf5ee,0x3eb2dc43,0x3ec08559,0x3ed4e36e,0x3ef21e5c,0x3f072dea,0x3f167786,0x3f150aa8,0x3f0a8a57,0x3ee78bfa,0x3ed9f2a1,0x3f0c0392,0x3ec3ec96, -0x3e97a643,0x3e584ee5,0x3e233944,0x3decf373,0x3dc1d6df,0x3da46f61,0x3da03234,0x3d801071,0x3db85e01,0x3d9f8cec,0x3d9025c9,0x3d89119a,0x3d969e3b,0x3d9bd814,0x3db8f494,0x3dc41817,0x3e0ae675,0x3e19a385,0x3e731ee0,0x3e81da6b,0x3ea36954,0x3eb14c98,0x3ec65e06,0x3edf0a9d,0x3ef3bee1, -0x3f0bb3ec,0x3f2364c0,0x3f419438,0x3f5f3e01,0x3f80a0ee,0x3f76fd7b,0x3f5f37fb,0x3f2f6e3c,0x3f1873b3,0x3f51b86e,0x3ee75e89,0x3ead2b54,0x3e39d346,0x3df6dfcf,0x3dab5c4b,0x3d54a4b0,0x3d030473,0x3cc6d7ec,0x3cc6604e,0x3d049c4b,0x3ce6236d,0x3cd11bb5,0x3cbfb7fc,0x3cd7a13c,0x3d0ca67b, -0x3d497bcf,0x3d65b1df,0x3db025a4,0x3ddf14f3,0x3e58c138,0x3e7fcb8c,0x3eab70d2,0x3eb8e4fc,0x3ed46c53,0x3ef153a9,0x3f031084,0x3f1c91de,0x3f4cc12f,0x3f8b3923,0x3fb0eb50,0x3fdab500,0x3fd75cb2,0x3fb83ee0,0x3f8d533f,0x3f5f8790,0x3fe8eb11,0x3f8b33f6,0x3f4e2871,0x3ebdf86e,0x3e6a77e4, -0x3e20c17d,0x3de7fd4a,0x3d93dc32,0x3d3ce37f,0x3d0d3a24,0x3d0bafb0,0x3d082a4d,0x3d0337ce,0x3cd82a6a,0x3cecf468,0x3d1889b4,0x3d5bb356,0x3da8621b,0x3e0a5d7a,0x3e3d3901,0x3eb28e81,0x3ee74840,0x3f40ae07,0x3f7a8f2b,0x3fa4c7e1,0x3fcead90,0x3fed8346,0x4001efcc,0x40053cd3,0x40041b5c, -0x3ffd3d13,0x3ff9ca11,0x3fea2e3c,0x3fe3e80b,0x3fefe08e,0x3fd67831,0x402e0c8b,0x3f5c91d0,0x3f4adfcb,0x3eadb767,0x3e85b027,0x3e15b595,0x3db63148,0x3d98df04,0x3d54401d,0x3d4230d7,0x3d4c882f,0x3d265086,0x3d114869,0x3cf8fc2b,0x3d11032f,0x3d3abdd2,0x3daba352,0x3de975d6,0x3e461edb, -0x3e607964,0x3eda9a95,0x3f0a4d2e,0x3f61a1c0,0x3f8b505e,0x3fb9cdc1,0x3fefeee9,0x40013855,0x4006970a,0x4008f829,0x4009086c,0x400d3534,0x40161a61,0x40117a76,0x400f6a21,0x402f2616,0x402a4989,0x40888df1,0x3fdb870c,0x3f9d6fd4,0x3ecb7292,0x3ee60c52,0x3e437028,0x3e1de373,0x3d9d3e0a, -0x3d6854e6,0x3d6edb3c,0x3dd40ec2,0x3d812f7e,0x3d648a50,0x3d8d2b66,0x3d712947,0x3dab40bb,0x3e03d116,0x3e0b1212,0x3e4b1120,0x3e638df6,0x3edf6726,0x3f09c583,0x3f5e9cf3,0x3f9cf95b,0x3fdc0b64,0x400ced44,0x40196fd0,0x4019a822,0x4014c6dc,0x4004bc5c,0x4002d52e,0x401d0848,0x402aeae6, -0x4046714f,0x409dec17,0x406f0012,0x409c8644,0x400535d2,0x3f9fffd2,0x3ee0a481,0x3e7dff42,0x3e20636b,0x3db79ce1,0x3d9c95a3,0x3d7ca113,0x3d8f69dc,0x3e238006,0x3d7f39be,0x3d4fbdfb,0x3d820744,0x3d928c8d,0x3db74338,0x3e084369,0x3e1a7c3c,0x3e61f848,0x3e6f28b0,0x3ec8e36c,0x3ee55368, -0x3f23ffc3,0x3f6707f2,0x3f9f3d4b,0x3fcfc8e8,0x3ffa0a61,0x400babe5,0x4018cf0a,0x401ae020,0x40105111,0x40033e17,0x40124cc5,0x403878b0,0x40a104ac,0x406f81c0,0x40313467,0x3fe0c5bf,0x3f9ba913,0x3f044192,0x3e9b366c,0x3e477d38,0x3dff22ab,0x3def3942,0x3db634c5,0x3da56350,0x3ddb55e8, -0x3d9157f8,0x3d85d798,0x3d8f661c,0x3db086dd,0x3de3e7d0,0x3e07676e,0x3e2aea92,0x3e8e3af0,0x3e9f053c,0x3ecac326,0x3ed6ca51,0x3efec778,0x3f1e961a,0x3f584336,0x3f95bc40,0x3fbd1d61,0x3fda57ff,0x3ff30463,0x3fd2caa7,0x3fcc08fa,0x3fdafede,0x3fdd798e,0x3ff0972a,0x401b4405,0x401b0df8, -0x3f8b0183,0x3f6d1014,0x3f3193f1,0x3ec0cbb9,0x3e7a5b8c,0x3e4e8287,0x3e07d544,0x3dd60954,0x3dcb4366,0x3dcad917,0x3dc52138,0x3db68a3e,0x3da9b1d2,0x3dacaa72,0x3dceb074,0x3e0df1ed,0x3e449247,0x3e56db84,0x3e89a3d0,0x3e99d0cb,0x3ec42372,0x3ec1cbe9,0x3ed75acf,0x3f08afa4,0x3f22da5c, -0x3f31fdda,0x3f43aeb3,0x3f5d6499,0x3f7d1a65,0x3f865902,0x3f895cfc,0x3f903a28,0x3f901701,0x3f8e4ba8,0x3f8821da,0x3f860fed,0x3f31853d,0x3f0ea396,0x3eeea3ca,0x3ec3e6e3,0x3ea02bbf,0x3e6a9317,0x3e3cd015,0x3e0a0fe8,0x3e228436,0x3dfb3608,0x3e2b2ed6,0x3e131e54,0x3e1ec661,0x3e12331b, -0x3e3038c3,0x3e362ae3,0x3e5e262b,0x3e745687,0x3e96e633,0x3ea4751f,0x3ec8b008,0x3ec3f612,0x3ed8f3f7,0x3ef19440,0x3f07f20a,0x3f17a5df,0x3f27fb09,0x3f3b86eb,0x3f555bb9,0x3f5a6917,0x3f63088f,0x3f72a3ce,0x3f683a4d,0x3f636ae4,0x3f66bcdc,0x3f41cc90,0x3f05afeb,0x3f0f3c7c,0x3f1f0b3f, -0x3ed1f7d4,0x3ebfddc6,0x3ead81d2,0x3ea3e0c3,0x3e8fbb42,0x3ea56a13,0x3eabd6e7,0x3e9bce38,0x3eab80d3,0x3e9ade8d,0x3e9a0902,0x3e8be32b,0x3e950624,0x3ea63a6a,0x3e9af2b1,0x3edb6d6c,0x3eceb570,0x3ecb3beb,0x3ed8816c,0x3ee32ea2,0x3eeee883,0x3efea2d1,0x3f06925b,0x3f0d41c2,0x3f13f536, -0x3f1c3197,0x3f240c6a,0x3f2c29b3,0x3f3881f3,0x3f2a187c,0x3f1eb4c7,0x3f15f462,0x3f0e38b1,0x3ee835d3,0x3f0d0130,0x3f009d1a,0x3f0ea2c2,0x3f4014ed,0x3efac86d,0x3f0187ec,0x3f30834f,0x3f3a07ea,0x3f378632,0x3f23fb37,0x3f3821d3,0x3f3ff4b4,0x3f3aaff2,0x3efe2f9a,0x3ee65736,0x3f49eee7, -0x3f04f1da,0x3eeb3269,0x3ef99036,0x3ed15f27,0x3ee050b1,0x3ee19682,0x3ee54292,0x3ee7d1e9,0x3eea1293,0x3eeea811,0x3ef36958,0x3ef8bb3a,0x3eff85be,0x3f02f19f,0x3f08e5aa,0x3f03f230,0x3f01cd6f,0x3efbc38f,0x3efbe1ab,0x3f14475d,0x3adf8b9a,0x3a99be79,0x3b26bab8,0x3b0df725,0x3b441723, -0x3bad7446,0x3b198e66,0x3b1ded00,0x3b930486,0x3ba05f87,0x3b9fb7f9,0x3b89edff,0x3ba62e13,0x3ba8ebbc,0x3ba535c8,0x3b235c47,0x3b10fb92,0x3bbfe50e,0x3b2a8b67,0x3b0eb5d9,0x3b233d68,0x3ab45d2c,0x3ae730de,0x3ae9f357,0x3aed0d65,0x3aebd75a,0x3ae70a57,0x3addb643,0x3adea313,0x3ae44e24, -0x3af8e178,0x3b026f92,0x3b04487b,0x3b079362,0x3af4b8df,0x3a9f4492,0x3ac1a6fa,0x3aac02ee,0x3b16a5de,0x3b420b7a,0x3acc506f,0x3aa68190,0x3a10d7da,0x3a38df88,0x3a13e2de,0x3a8cdf32,0x3aaec4da,0x3aaa14cc,0x3abbe453,0x3a74809d,0x3a6ef45f,0x3a029431,0x3a0ce49b,0x3ab0cf35,0x3a7f8733, -0x3b1c8366,0x3b12b207,0x3b163b31,0x3b2e7499,0x3b46ad77,0x3b4c120a,0x3b457d43,0x3b3680aa,0x3b2567ad,0x3b256df5,0x3b355bae,0x3b4f4028,0x3b63aaad,0x3b5d5497,0x3b6e6a0f,0x3b367ecc,0x3a814a93,0x3ab16750,0x3ad25d6f,0x3ae2a12f,0x3acca974,0x3a81a619,0x3abec594,0x39e2ca55,0x39b89d03, -0x39ce1368,0x3a167e65,0x3a208796,0x3a8eb215,0x3a7cf0d1,0x3a245b0d,0x39f01327,0x3a0ba79d,0x3a3fbd69,0x3a8e81f2,0x3a9eb51b,0x3ad84006,0x3ad7c4b6,0x3b5cf1d6,0x3b5878d7,0x3b8f8903,0x3b94de4e,0x3b941289,0x3b91af40,0x3b7f9d5a,0x3b85740c,0x3b990681,0x3bafca24,0x3bccbf5e,0x3bc6e4ce, -0x3bdff38b,0x3b93edbe,0x3a4d7d2c,0x3abe9fd9,0x3ac0862f,0x3aa57e95,0x3ad7f39b,0x3af835e7,0x3b46f081,0x3a154dfb,0x3a22738d,0x39cf705e,0x3a4d6787,0x3a87c619,0x3ac72151,0x3a940a3a,0x3a42ddc5,0x39f11fe8,0x3a1d6a21,0x3a98b544,0x3b059756,0x3b001dc8,0x3b0ea00b,0x3b0c2ab6,0x3b987fa8, -0x3bb521e3,0x3c06c242,0x3c0fb370,0x3c0eb8ad,0x3c031606,0x3be81aed,0x3be50272,0x3c01b23b,0x3c0ec9fd,0x3c218b73,0x3c1c21ee,0x3c31f551,0x3bc607e8,0x3a1f3eff,0x3a3772bb,0x3c057b16,0x3b6a3ca4,0x3bdfc2e9,0x3b90c8e7,0x3b2b8482,0x3a8f6640,0x3b01d491,0x3acb6d14,0x3aca4b63,0x3a978e60, -0x3aba1dca,0x39b2f4d4,0x398f0ae0,0x3a1f1cd3,0x3a41b751,0x3a8b337f,0x3af44c58,0x3b0cf164,0x3b0e1ab0,0x3b03ed5a,0x3ba277c3,0x3b21f3db,0x3b57e1f8,0x3a980f5d,0x3a9d9839,0x3b17a028,0x3b940998,0x3bcabb99,0x3bf3e253,0x3be3ed58,0x3c11da50,0x3c31e4d6,0x3c25c4bd,0x3c21640f,0x3c306d12, -0x3be70b04,0x3b6a5907,0x3c1aedb6,0x3c010992,0x3bb90e6e,0x3b3ebc86,0x3ad2982c,0x3ad5aa6f,0x3a6acd3e,0x39862e6a,0x394fcac5,0x3a26b702,0x3a24f0d8,0x3a08bd73,0x39ad4c3a,0x3a040f7e,0x3a2ad0f9,0x3a16b81c,0x39e0989f,0x3a46000a,0x3a6577e6,0x3b44cb7e,0x3b93e9bc,0x3c1203c8,0x3b97f6ba, -0x3b1096df,0x3a77e9d3,0x3a5c700a,0x3a566b41,0x3a99b435,0x3aa5c682,0x3aa4e30c,0x3b36cca7,0x3b8bc9e3,0x3bbfa422,0x3bb6ec1c,0x3ae70d23,0x3b3ee641,0x3b7d96c5,0x3b4252c3,0x3b013a2f,0x3ad961ea,0x3a9d60e6,0x3a4ba4cb,0x3a19a6b6,0x39f66055,0x398b8df3,0x38661a2e,0x388bb7ce,0x390e6331, -0x3927e145,0x3927ada2,0x39bd2fff,0x39ba4e36,0x39b3587a,0x3a3bb6b8,0x3ab693e0,0x3a9c520f,0x3a224228,0x3a01870e,0x3b3d1f65,0x3bfe0ddf,0x3c423803,0x3c544ddc,0x3c2082e2,0x3ba53453,0x3c0b90ee,0x3c71671a,0x3cd428b5,0x3cf12de9,0x3cd8ad6c,0x3ca1e001,0x3b9a9ae5,0x3c9d1877,0x3c0be08a, -0x3be6c6a5,0x3bbb06b7,0x3b549f2e,0x3ace11f2,0x3a3f3bbc,0x3a4ecc0b,0x39913dda,0x39557f4f,0x391cdabf,0x38c3fd62,0x38a418cc,0x392576b4,0x3962b676,0x39b4b585,0x39bb710b,0x39d62900,0x3a0dbf7c,0x3a3234fa,0x3ac4e97d,0x3b1c7537,0x3b479898,0x3b34a13f,0x3af9bfde,0x3a8f8d35,0x3ae9040f, -0x3b0c411c,0x3b37205d,0x3b2dfb5e,0x3b2cc830,0x3b7e2ab6,0x3c5d0c96,0x3cd2601a,0x3d270f35,0x3ccf0c62,0x3d080f67,0x3cb398b4,0x3c7c0756,0x3c28d089,0x3c03fdcf,0x3c036242,0x3badfd7c,0x3afe0b91,0x3a93a695,0x3a15f4c3,0x3994ad57,0x39308a5c,0x390df0d9,0x3987c902,0x390a3356,0x390cc452, -0x3989f6e2,0x39678d04,0x39ee47b1,0x39cfcac0,0x39b1a0a6,0x399bfdd1,0x39abab56,0x39cba4be,0x3a5edbdc,0x3b288e90,0x3b4f2a68,0x3b8f6980,0x3be979bb,0x3bb71a43,0x3be56dec,0x3c376ad8,0x3c8815dd,0x3c98ee4b,0x3cae013c,0x3cd958aa,0x3c27def3,0x3c27d401,0x3c1e0b82,0x3bf921f1,0x3bd237e0, -0x3bafb731,0x3ba54192,0x3bb370b0,0x3b93bcfc,0x3b61072c,0x3b148f0a,0x3ae976e8,0x3aa5e6f2,0x3a6c4e57,0x39f11b68,0x3992bc53,0x39ae30c5,0x3981b2fa,0x398f5f96,0x3970427c,0x3a478654,0x3ab32a81,0x3ad8e584,0x3b10a690,0x3b1c4d93,0x3b0f0de7,0x3b339b6f,0x3b36be57,0x3b310412,0x3b379588, -0x3b75cde9,0x3c0b327f,0x3c005588,0x3c017465,0x3bf9268d,0x3c0237c7,0x3bb97879,0x3bb00933,0x3ba8ac5d,0x3ba24887,0x3ba3adaf,0x3b8f389f,0x3b7f4539,0x3b6b2b6a,0x3b4b9b42,0x3b32ab50,0x3b2e53e3,0x3b000dc5,0x3acec534,0x3aa1e9b2,0x3a5057f9,0x3a00b355,0x39c4ce51,0x398697dc,0x3a08e763, -0x3a286bd8,0x3a62090f,0x3a7ae3bf,0x3aad1e54,0x3ac84246,0x3aef2bb7,0x3b134687,0x3b3a87cc,0x3b7832a2,0x3ba326e9,0x3bbb758e,0x3be8e45b,0x3c1b8677,0x3bfbe247,0x3be53e3d,0x3bf4007b,0x3bc4cb92,0x3b5789be,0x3b693d71,0x3b79253a,0x3b4e4c0b,0x3b4a10db,0x3b4571a1,0x3b44a34d,0x3b429034, -0x3b351910,0x3b27ef94,0x3b16c8e7,0x3b0e8924,0x3aef5b33,0x3ad7800f,0x3aa1b431,0x3a71a190,0x3a897bc0,0x3a481a51,0x3a41a417,0x3a283619,0x3a49828d,0x3a803161,0x3a9d35f4,0x3abfcc8d,0x3ae675f3,0x3b0a69cf,0x3b13842a,0x3b25776a,0x3b39df8b,0x3b53972d,0x3b6f00d9,0x3b93050f,0x3b8235d4, -0x3b705d7d,0x3b607fd9,0x3b5a1ab9,0x3b31b7a9,0x3b412822,0x3b4a1827,0x3b57248d,0x3b8157ab,0x3b4882e0,0x3b4c0571,0x3b769328,0x3b7a8079,0x3b7a8d72,0x3b69a47b,0x3b7db56f,0x3b8419d0,0x3b831f72,0x3b2f0e02,0x3b1a5bed,0x3b64c8b6,0x3b1a16cf,0x3b0404f7,0x3ada2ee2,0x3adfb5a9,0x3aefa2ab, -0x3afcdd46,0x3b0520ef,0x3b0c2234,0x3b13b1bb,0x3b1cf5e3,0x3b27061f,0x3b335c72,0x3b3d2c24,0x3b48074a,0x3b5a73a5,0x3b4ae2bd,0x3b449b8d,0x3b3be592,0x3b3b1887,0x3b5c1ced,0x38937569,0x38515f3a,0x38effc4a,0x38d0a365,0x392a9779,0x397908db,0x38c2a9d1,0x3904f8db,0x395c1fd1,0x39706056, -0x396dba2e,0x39479cf1,0x39720f86,0x39767a78,0x396b79ca,0x390fa37f,0x38c969f1,0x3988c792,0x39110d85,0x38ca877c,0x38d95f9c,0x38618d0c,0x3897ae73,0x38a5c6b0,0x38b256d1,0x38b5589b,0x38b0ff9a,0x38a12a14,0x38a06a81,0x38ac194b,0x38af5911,0x38aef835,0x38a4afca,0x38a8f3fe,0x389c4e95, -0x3873433c,0x3884b2b5,0x389efea9,0x38cfb9b1,0x3920e783,0x386bfc6f,0x3882254c,0x37b9d39b,0x37ec8492,0x3827b726,0x385b1a49,0x3884ba23,0x388eb1cb,0x387f7b1e,0x383671ed,0x381eeaac,0x382e9da6,0x382c51e9,0x3856d8cd,0x37fb563e,0x38fe489e,0x38b73676,0x38cdcc75,0x390474d3,0x393db620, -0x396d7bd1,0x39756ee0,0x3951a6cd,0x391477d3,0x38fc3f12,0x391ba411,0x39164df2,0x3919fa37,0x39086290,0x391d5f3c,0x390c1daa,0x38ca785a,0x38b2dffc,0x38d5250b,0x38a63c00,0x388a9928,0x380870de,0x38b184da,0x377b783d,0x37e8b8a6,0x38e0bbf2,0x39219644,0x395f7023,0x397637f5,0x38d5f936, -0x385bfa20,0x388c7643,0x387c84c5,0x389c945f,0x38067b44,0x37ccfe24,0x386bf2dc,0x388b71ee,0x390f99eb,0x391ee1fe,0x398f6b51,0x39bf0dd2,0x39cb3b18,0x39bd18c9,0x39785a32,0x3969a5e3,0x39a321de,0x399194f5,0x39938c33,0x3986f62a,0x39a09f03,0x39857609,0x3928cd2b,0x38fc00c5,0x3961a654, -0x3877899f,0x389c2924,0x38b3335a,0x39821342,0x3866da62,0x391d90cb,0x398589a4,0x399aa791,0x39adafe3,0x392342dc,0x388f629e,0x38854d13,0x3897cb21,0x38ce26c0,0x391f8264,0x38e9631c,0x387cf929,0x391c9a56,0x3971ae74,0x39b0b5b8,0x39ec1cad,0x3a61d981,0x3a9f9c7c,0x3ab009bb,0x3a8c5ccb, -0x3a05ddba,0x399bba0d,0x3a110474,0x39d3be42,0x39e19a28,0x39dbdad5,0x3a1f926a,0x3a11f6da,0x3a0751d6,0x39969f42,0x3aaa7c0e,0x3a171eeb,0x3a30e4a8,0x39c8fa13,0x395352c9,0x3995f17f,0x39a6f697,0x39bee4fe,0x390c34b6,0x3754544f,0x3721dba3,0x38b16b75,0x388439d3,0x389143ea,0x3882fb79, -0x391a3128,0x39979b1b,0x39ca436a,0x3a195517,0x3a478092,0x3a8069c2,0x3a429ae6,0x3a4b9176,0x3a2d4e40,0x3a5c036b,0x3a85ba74,0x3a3fd040,0x3a79ecc7,0x3a8e9f8e,0x3a3746c7,0x39fbd4f4,0x3a347191,0x39fb5c3a,0x3a12ab9a,0x3a8400fd,0x3a985e91,0x39d859c0,0x39b14bfd,0x3a4e4995,0x39c092aa, -0x39f1d8a4,0x3a6bf26e,0x3a756d42,0x398176fd,0x3873326a,0x3713f69e,0x37c686e6,0x386906d2,0x383241f9,0x3817ed32,0x371d3d2e,0x37b8f6f9,0x37f52280,0x3822be85,0x38bc9594,0x39521d37,0x39851ced,0x39d690e6,0x3a20486b,0x3a0c4c80,0x3a01909b,0x3a5ac89c,0x3a624592,0x3a358d87,0x3a7f0f11, -0x395be744,0x39490e4c,0x39a43404,0x3a92a89d,0x3a898b2c,0x3a4b717b,0x39c01136,0x3acd4150,0x3be21f59,0x3b7ae6e9,0x3adbdcea,0x39a74675,0x38945c05,0x38851770,0x389727ef,0x382d653e,0x3767dd5e,0x36675cb6,0x371a29a7,0x35d691e7,0x38071a03,0x37dbd1d3,0x383602d3,0x384378b7,0x37d9adc3, -0x3836fc89,0x389d1dfd,0x38d39ca6,0x39047163,0x395c63ec,0x39d58f55,0x3a2acd59,0x3a7d99fc,0x3a7330f4,0x3a2f4e75,0x3a75e371,0x3ab1414e,0x3ad0aeb9,0x3b0eb6a8,0x3b04e133,0x3aeab5cd,0x3af31c34,0x39ee144d,0x3ac3c179,0x3b6b0714,0x3ae26a3d,0x3ac257b3,0x3a4381ff,0x38b09aac,0x38792dff, -0x382fa16f,0x36148bf7,0x357d54c7,0x36a1b134,0x3679d2bc,0x35d76dfc,0x3696cc47,0x35c068c1,0x37707d9b,0x388b233a,0x38ba3585,0x3902add0,0x3908430d,0x39274307,0x3936ccc3,0x39770c8b,0x39724357,0x3974dac0,0x396cd685,0x394bd501,0x390ca48e,0x39957ee2,0x39ddb67c,0x39bd32aa,0x3a3b18ea, -0x3a7a14f7,0x3ad431b3,0x3b126abf,0x3a93d587,0x3a939df8,0x3a7472e8,0x3a822be3,0x3a1d9f93,0x390e96b2,0x37d92312,0x371224eb,0x37fefa43,0x379f3922,0x3796f140,0x375384a3,0x3725ba71,0x36bc8082,0x3685dc55,0x37b4abc3,0x388d2fd5,0x392c2801,0x3963e493,0x398d6094,0x39799f84,0x393642f1, -0x38d7ccab,0x38439256,0x37f6f008,0x38d3fca7,0x399c32e0,0x39d087d7,0x3a1453f5,0x3a46c512,0x3a2c0b23,0x3a2013b2,0x3a202bd7,0x3a3cada3,0x3a31a19e,0x3a4550e1,0x3a859525,0x39e77d9e,0x39c58650,0x399f95f5,0x39727958,0x394c505e,0x3933a305,0x39093e7d,0x38ce5236,0x38d283cb,0x38b80725, -0x38806d10,0x383c3baa,0x37cb199c,0x380c88bb,0x381b6553,0x38271215,0x382f9a49,0x387305ac,0x389352ac,0x38833fe1,0x38285711,0x381fce26,0x3823e1fa,0x3899f42e,0x390cc533,0x394eaf34,0x399021ec,0x39a59b86,0x39b55139,0x39a30556,0x39ae2624,0x3a020e5d,0x39c88cae,0x39b05f65,0x39bca508, -0x39c8ce75,0x39475954,0x39527dc3,0x395a0834,0x3952b180,0x39788102,0x39542b0e,0x393165d2,0x392a8e58,0x390b49fa,0x38f8a746,0x38fd1398,0x38cbc01a,0x38c8712f,0x38e46de7,0x38a7bbff,0x389ffca5,0x38ce70d6,0x38ac47c5,0x38a34736,0x388c6f3a,0x38805a05,0x384f53d4,0x3858aaa5,0x3832d2dd, -0x382c7c86,0x3841ff2a,0x382776df,0x3872315e,0x38d56bf0,0x38e4cb4f,0x38f2a3da,0x3912a7a7,0x38e4990e,0x38d7c39e,0x39008a37,0x391c50a0,0x3903eb7c,0x3918ab35,0x392ea8c6,0x3909afcf,0x39170954,0x3918f8b8,0x392be2e9,0x393f7101,0x39321aef,0x3927c75f,0x3925db2a,0x391e902d,0x3917623a, -0x39200381,0x3906bcad,0x38e2a7e8,0x38dae10d,0x38c11ee9,0x38c69c3a,0x38c71530,0x38ad75ae,0x38995a4f,0x38886d62,0x3875b932,0x3862e11c,0x385e5412,0x3867192b,0x3886552b,0x389b8ded,0x38b05133,0x38cb6c13,0x38fab3e2,0x38d68e43,0x38d36ce6,0x38dd8f61,0x38f70342,0x389d7493,0x38b2a26a, -0x38ca9b7d,0x38fb0f7e,0x3919204c,0x38cf72e8,0x38fa541e,0x3924b472,0x392ad504,0x39303291,0x39265637,0x393b832d,0x3945fe56,0x394a75e5,0x390ba1fc,0x38e199de,0x392d9ff5,0x38fe9a6e,0x38d04d5c,0x38c42f0a,0x38ad01e4,0x38aa5505,0x38a2ed46,0x389ec71c,0x389ab991,0x3893c5df,0x38947021, -0x3892faf6,0x3894c0cf,0x3897e86f,0x389e06e0,0x38ac05a5,0x38a21fa7,0x389f77cb,0x389e0f16,0x389e2dea,0x38e06be1, -}; -const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470] = { -0x3ea949d7,0x3e9e9e1b,0x3eaad36e,0x3e968ec6,0x3ea57d26,0x3eab1dcf,0x3eb44268,0x3eb925e2,0x3ec125cc,0x3eb46cfb,0x3eaddeaf,0x3ea72cfe,0x3ea16e08,0x3e9c9033,0x3e98340f,0x3e95698b,0x3e924505,0x3e8f2d4d,0x3e8bb504,0x3e81927f,0x3e916ed6,0x3e8d691a,0x3e952461,0x3ecc76c5,0x3e88ca6b, -0x3e8f4874,0x3eb998a6,0x3ebc79c9,0x3eb7e9c5,0x3ea883fd,0x3eb92f39,0x3ebfaee3,0x3ebbeebc,0x3e949d90,0x3e9323ca,0x3ecc82e4,0x3ea7e5e5,0x3ed6e55e,0x3ede2341,0x3edfd603,0x3f00029f,0x3f0c5c00,0x3f1cc904,0x3f2736fb,0x3f2fda5f,0x3f1a82a9,0x3f0b5757,0x3ef97e3f,0x3ee19c7b,0x3ecf3dd5, -0x3ec1cbb8,0x3eb7d5a0,0x3eaddcb3,0x3ea565ec,0x3e97b659,0x3e8a2c09,0x3e884bb5,0x3e87446c,0x3e4c2da2,0x3e541451,0x3e348361,0x3e2de453,0x3e37f8b2,0x3e3745ed,0x3e4880c2,0x3e43aa36,0x3e47e138,0x3e488bce,0x3e3ef5ad,0x3e581338,0x3e64b2ea,0x3e8074ba,0x3e950746,0x3ebb764d,0x3ee9a40e, -0x3f1ef55e,0x3f3304cf,0x3f5769b9,0x3f7a6d70,0x3f88afa7,0x3f98ca8a,0x3f7fed69,0x3f5fc85f,0x3f411510,0x3f244f51,0x3f0e9f1b,0x3ef90951,0x3edf5c20,0x3ec5c55d,0x3eb195d5,0x3e8f0457,0x3e782c46,0x3e3bd2f3,0x3e2e50ce,0x3e084f2d,0x3e002303,0x3dd5bccb,0x3dc4fb4e,0x3db5233e,0x3dbeaae2, -0x3dc73daa,0x3ddf8b77,0x3db408d0,0x3dcbf93d,0x3ddebb04,0x3e042790,0x3e1cd871,0x3e558dc8,0x3e8d329d,0x3edc55ee,0x3f1f91ae,0x3f646bf6,0x3f89309d,0x3fadfa07,0x3fc8ed30,0x3fe628f0,0x3fffd1cf,0x3fc60734,0x3f9d08ce,0x3f6f0bdf,0x3f36e826,0x3f11c33a,0x3ef5f55e,0x3ed646e6,0x3eb7bc22, -0x3ea1aa6a,0x3e71f591,0x3e4154d0,0x3e0ea292,0x3de6b8f5,0x3d9d7d15,0x3d8a95ba,0x3d3beaa6,0x3d1b0ff8,0x3d0732a8,0x3d1a9b9d,0x3d2d4ff1,0x3d39e2bc,0x3d12e9a6,0x3d12b4e1,0x3d46d7ac,0x3d964747,0x3e0829b0,0x3e27443c,0x3e81049e,0x3f7d4c5e,0x3fd0c51c,0x4006822e,0x4012dcdf,0x40227e01, -0x4014db00,0x400f1b9e,0x401058a5,0x401a9143,0x40265aa7,0x40296650,0x40283a34,0x401c3707,0x400b8f28,0x3fd472d2,0x3fa2ce4b,0x3f832cc2,0x3f214ea0,0x3ed1c5db,0x3e809b4c,0x3e3cb9a3,0x3de0ce40,0x3da06a01,0x3d5b46af,0x3d361b10,0x3d1b1c49,0x3d44ecec,0x3d4b25c2,0x3d50f054,0x3d4e4c6b, -0x3d85ffac,0x3dd6bd4e,0x3e1d6b3e,0x3e66df58,0x3ea102fa,0x3f0f5aed,0x3f91f2c1,0x3fb40b5b,0x40646f0a,0x406b6f6c,0x40672898,0x4031f271,0x402604e6,0x4034385c,0x40398cd0,0x403eaf95,0x4043f6aa,0x40409b5d,0x40371f04,0x40275acc,0x3fff1879,0x3fb754c4,0x3f82bbec,0x3f2349a1,0x3ef9b368, -0x3e9f2346,0x3e892203,0x3e2898a2,0x3de47af7,0x3d89c034,0x3d5239db,0x3d3551bc,0x3d5746cb,0x3d7960c6,0x3d9abc0e,0x3d8e70ad,0x3da2004c,0x3ddcacb4,0x3e123f7c,0x3e4fd66c,0x3ead1b84,0x3f0dad32,0x3fb0fc41,0x401aebec,0x409a1704,0x408302a2,0x407ffff7,0x4025a20b,0x401cb702,0x4033d5f0, -0x402df25c,0x40376abc,0x404be08d,0x4045547d,0x4034bcd0,0x401a93a0,0x3ffea26d,0x3fc1f714,0x3f9073d1,0x3f3270b0,0x3f0aa60e,0x3ea59cb8,0x3e8d782b,0x3e4ced45,0x3e44e9ab,0x3dea46c6,0x3db65f72,0x3dd4cc8c,0x3dad44af,0x3dbeda43,0x3e1d73c8,0x3dad1f32,0x3dac30ee,0x3de91bae,0x3e6fd667, -0x3e87c367,0x3f216d28,0x3f065daa,0x3f94dce2,0x40304987,0x403a6f75,0x400d291a,0x40124812,0x3ffa42b0,0x40085520,0x40265cd9,0x4025bf7c,0x4028e41a,0x402029d2,0x401d1e11,0x400ff35d,0x3feb809b,0x3fbef783,0x3f8d9515,0x3f44a251,0x3f122074,0x3ef40a2a,0x3eb24039,0x3e911f85,0x3e523550, -0x3e40fc56,0x3e06df0d,0x3dd22833,0x3db95d5b,0x3d9b735b,0x3dbf0be1,0x3e76a1a0,0x3dd8714d,0x3db897d0,0x3de74109,0x3e093df2,0x3e535ddd,0x3e956a4d,0x3ef7a465,0x3f6f4708,0x3fb9717b,0x3fd358a4,0x3fe93e16,0x3fed3332,0x3fea705b,0x3fed71a0,0x40043ac1,0x3ff8a755,0x3ffe9b92,0x40051e7d, -0x3ff4d6ce,0x3fd80510,0x3fb1ed3a,0x3f83ad3c,0x3f469a6a,0x3f26cb49,0x3f0e1467,0x3f03b4b8,0x3ee38399,0x3eb44ba0,0x3e87aec0,0x3e4804e6,0x3e24c82c,0x3e0a4c24,0x3dd6c9d8,0x3dc674f0,0x3dd92d96,0x3e26bb9d,0x3df1a7e0,0x3dfe6a19,0x3e162a57,0x3e3f12a2,0x3e6b8a0b,0x3ea31714,0x3f47cb50, -0x3f6030c7,0x3f7b63d5,0x3f9afb36,0x3fa70a58,0x3fb1bc0a,0x3fc22372,0x3fc7b6e4,0x3fc68875,0x3fc48fc6,0x3fbe5d2a,0x3fb2517a,0x3f9b6e1a,0x3f85b6a5,0x3f646e2c,0x3f46d593,0x3f28364a,0x3f1105b1,0x3f063f28,0x3f10ae9c,0x3ed36154,0x3ecc7964,0x3e9bc7af,0x3e8d477f,0x3e4b4da5,0x3e16a635, -0x3dfd081d,0x3dfc87a6,0x3e0843b5,0x3e174652,0x3e1615be,0x3e16208b,0x3e19f4e4,0x3e42b577,0x3e84dfbe,0x3ea59da7,0x3f03c265,0x3f216eba,0x3f4de3fe,0x3f74c17c,0x3f87e1f0,0x3f9d2063,0x3f9b7831,0x3f9ea498,0x3fa5cc27,0x3f99a529,0x3f91e490,0x3f8dc4ac,0x3f800406,0x3f6aa891,0x3f55b3ef, -0x3f40979b,0x3f2c61c9,0x3f1cac17,0x3f0e3177,0x3f0f195d,0x3ef46e30,0x3ed82e3d,0x3eb27154,0x3e9c78f3,0x3e84e650,0x3e8048c3,0x3e59f560,0x3e64601e,0x3e56c4ae,0x3e6d39b2,0x3e39ec71,0x3e68b45d,0x3e4c4839,0x3e89b44d,0x3ea8a2ad,0x3ee0156f,0x3f04383b,0x3f57de18,0x3f4817c8,0x3f3d8a6e, -0x3f484be1,0x3f51b3bb,0x3f5cf774,0x3f6a830e,0x3f7c74e3,0x3f70aecf,0x3f6a4c6d,0x3f6257b9,0x3f594409,0x3f510224,0x3f48ad3e,0x3f3d782f,0x3f318cb9,0x3f2881dc,0x3f208b2c,0x3f16a0bb,0x3f165428,0x3f1e0145,0x3ee3e1d6,0x3eeca79e,0x3ed863d6,0x3ec6d3a2,0x3ed1eac1,0x3ed5a321,0x3eea8fbf, -0x3ed8c5c7,0x3eee18ad,0x3ee8c70f,0x3ed160b3,0x3eecff85,0x3efa86bd,0x3f088bc4,0x3f1bb6ce,0x3f2e2455,0x3f408a4e,0x3f23cf8b,0x3f2f482b,0x3f2f3548,0x3f33c546,0x3f363d85,0x3f3b7bc3,0x3f35a8ea,0x3f326b69,0x3f2f0360,0x3f2c425e,0x3f29e130,0x3f27fac2,0x3f25d20a,0x3f23f612,0x3f21349e, -0x3f1fbc33,0x3f15cbbd,0x3f2fa0fa,0x3f224010,0x3f2e20b6,0x3f78668a,0x3f1cb390,0x3f249834,0x3f5eafd1,0x3f653827,0x3f5ea74f,0x3f4ab775,0x3f5f939e,0x3f64bad6,0x3f5b7d64,0x3f299928,0x3f28bd1b,0x3f774df7,0x3f3c07e0,0x3f4e1208,0x3981d91f,0x394eea09,0x3930056d,0x394cbf08,0x395a29b7, -0x3938ab32,0x39854dfd,0x3981ea72,0x3936a35a,0x39480faa,0x392789ab,0x38e0dc4c,0x38d83cb3,0x38faf815,0x39481e83,0x3954a164,0x396c3ff6,0x397085e7,0x397eff50,0x398a10f7,0x3999aa24,0x39a1755c,0x399f428a,0x39a323b3,0x39666283,0x395117f5,0x393e677a,0x3980910d,0x398acdb3,0x3996e2b4, -0x397f7c8a,0x396cfa3c,0x39607e98,0x3944d1cb,0x394fc9df,0x39bd72c7,0x396b4714,0x39b90f06,0x3972b76a,0x396b9bbf,0x394be8cd,0x39142134,0x39a73ba6,0x39b518b9,0x39253585,0x39766e4b,0x39336d08,0x392ec619,0x38d2ae74,0x38f4df18,0x398f360e,0x3990920e,0x39b90bbe,0x39b38935,0x39d27b4d, -0x39ff87d9,0x3a1c0fdf,0x3a31644a,0x3a2d97ff,0x3a2404b2,0x39bb0a95,0x3981cfdc,0x3957505a,0x39bce4d9,0x39edc5fb,0x3a056709,0x39d0c26c,0x399a548b,0x397797ce,0x392b6ce7,0x397e7e97,0x3a66ab6c,0x39f2bd88,0x39e1bd0b,0x3a042d10,0x39c145a9,0x39dac6e7,0x3998594c,0x3a46514d,0x3a384a10, -0x3914fcbc,0x39a2bc4f,0x3968e759,0x3a3c6d73,0x3a050a1a,0x39fbc953,0x3a4e6e95,0x39e62b07,0x3a091eab,0x39ed49d3,0x3a1c5cea,0x3a56c771,0x3a8ff64a,0x3aad9a95,0x3ab4cb54,0x3aaaaf29,0x3a21c6fe,0x39a50b01,0x399c2d49,0x3a2e2f6a,0x3a6349f7,0x3a8f2c65,0x3a458f27,0x3a0ba3b6,0x39c2a4a4, -0x398dc0ea,0x39a093a1,0x3ae313e2,0x3a02c621,0x3a99831b,0x3a43f6fc,0x3a0d254a,0x39a94928,0x3a2debf9,0x3a8afff1,0x3a908b75,0x39a33ebc,0x39ca504a,0x3a2c41aa,0x3b343e5f,0x3b273a16,0x3b14b786,0x3b0706aa,0x3a92c416,0x3a8f30fa,0x3a615687,0x3a8dfbe4,0x3ad1d135,0x3b0ce35a,0x3b273a48, -0x3b28f3c7,0x3b36b9cd,0x3acb10c9,0x3a59bbd0,0x3a1e19ff,0x3a8e4b85,0x3add4b28,0x3b0d831b,0x3ac87948,0x3a977915,0x3a15283c,0x3a6d3f79,0x3a30b647,0x3b92e1bb,0x3afd13ea,0x3bfbf38e,0x3b0e5c95,0x3ab5a938,0x3b514f67,0x3c1954cc,0x3b8c5113,0x3b16de45,0x3ab30305,0x3b27c65f,0x3b044fce, -0x3b69464e,0x3b52935d,0x3b3d27d9,0x3b00c622,0x3a487988,0x3a28cc87,0x3a2a02a2,0x3a242879,0x3a4e4f04,0x3a99c9dc,0x3b0dba8a,0x3b2356fe,0x3b2e3e2a,0x3ac80ff1,0x3a8e9653,0x3a68393a,0x39c574e8,0x39f8fed0,0x3b0b8895,0x3ae4e609,0x3b15de8a,0x3b12b86e,0x3b3c946e,0x3aaa5dfd,0x3b5c9aca, -0x3bc2f373,0x3c225987,0x3c55d372,0x3b1bc057,0x3b115b72,0x3c098e24,0x3be33234,0x3b7f074e,0x3b5ae9db,0x3a9f7a67,0x3abc817b,0x3aca6dd5,0x3a8c65d2,0x3a7b8a5e,0x3a38a694,0x3a4c96b2,0x3a71f526,0x3a3543da,0x3a15f49e,0x3a305644,0x3a5e0da5,0x3a362cf8,0x3a1fb89c,0x3a377fa2,0x3a5a97d6, -0x3a2af5af,0x39f768b1,0x3a4c7972,0x3a761847,0x3a7811da,0x399b3d29,0x39ca2c9a,0x3aaf859f,0x3b2b7302,0x3b1a019f,0x3b6ba0f9,0x3bff8aa9,0x3b8e4277,0x3bb880e2,0x3b70c6f0,0x3b66149c,0x3b446adb,0x3b8e421c,0x3b2c3d78,0x3b8c3ed7,0x3b4c9b45,0x3b261d0a,0x3ab0c73b,0x3a383925,0x3a117dfb, -0x3a5031be,0x3a61f118,0x3a49f2d7,0x3a157baa,0x3a60c720,0x3a5904c7,0x3ac7b4ef,0x39a26a2e,0x394315a6,0x3a02d95a,0x39cc1712,0x39527f5a,0x39793c37,0x3941eafb,0x389aa36f,0x3897aad6,0x39d00f4a,0x3a342dfb,0x3a584855,0x3a924077,0x3ae9c146,0x3b2422ac,0x3b4cbdb3,0x3c289d12,0x3c56a865, -0x3cb67aee,0x3ca5fa21,0x3c2b7d6b,0x3bb4e6ab,0x3b74d661,0x3b6856b1,0x3b0fdf91,0x3afcc6b9,0x3aea86ec,0x3aa16cc3,0x3a97a74f,0x3a5015e9,0x3a3941d6,0x3a2a5c8f,0x3a28a0bf,0x3a42cb64,0x3a2eda97,0x3a6c76a4,0x3a0390e2,0x3a0a6a4e,0x3a01a091,0x3a01d53e,0x39a575ab,0x3975264c,0x38f1522f, -0x390e4bc1,0x3979b0d4,0x399c04bc,0x39d9b601,0x3aa04462,0x3a8a0957,0x3b10323e,0x3ba3cbee,0x3c004420,0x3c9b3b0b,0x3ccec1a6,0x3caf4452,0x3c5db7a4,0x3c0ce6b4,0x3bea9c76,0x3bfb5430,0x3bb9e008,0x3b587371,0x3b165df8,0x3ad54c8a,0x3ab88cb1,0x3a8c6e39,0x3a5d5732,0x3a1c813c,0x3a0c6a2c, -0x39f02544,0x39f387ba,0x39e72622,0x39b6eb7e,0x397745fc,0x3956ff08,0x39bf8561,0x3943794e,0x39451aa8,0x39b73271,0x3949b35b,0x3974f61f,0x39be2d3b,0x3a4c47c3,0x3ad02c9b,0x3b38b4bc,0x3c05ca00,0x3c426eac,0x3c47c442,0x3c6d5392,0x3c600404,0x3c4f06d5,0x3c3c3463,0x3c1519e3,0x3c0c5f1a, -0x3c1459fe,0x3c064779,0x3bd6162f,0x3b8d0eb8,0x3b828365,0x3b82e3d0,0x3b8ccf65,0x3b846906,0x3b370ea2,0x3b2f7e89,0x3b16bfc9,0x3aea1977,0x3ab8d38a,0x3a6aafe5,0x39af6b7e,0x39d59d75,0x39acedbc,0x399f2e58,0x39a390a0,0x3a263ed5,0x3aac59f6,0x3af7fe6b,0x3b3098b9,0x3b5f4e3d,0x3ba93fc2, -0x3bdef662,0x3c038266,0x3bf84924,0x3bf701ea,0x3c14aff4,0x3c306430,0x3bdec784,0x3bf757ba,0x3bf2503a,0x3c036e81,0x3c2165e7,0x3c10c79d,0x3c1ceb3b,0x3c3db0d4,0x3c0ab8af,0x3bd35687,0x3bc1c364,0x3b9f60b7,0x3b83969e,0x3b5d64f1,0x3b309acc,0x3b127b2e,0x3af67965,0x3aa8209b,0x3a5790ea, -0x3a143a1c,0x39dac4ac,0x39a25e33,0x3a0bd002,0x3a3e4214,0x3a9aa49b,0x3af3758c,0x3b186f23,0x3b3b7056,0x3b7bf7a0,0x3b8478da,0x3b94e9e0,0x3baf481e,0x3bbaf049,0x3bd2781b,0x3beca121,0x3be2e10d,0x3ba35c28,0x3ba00dd2,0x3b94a348,0x3b8c7260,0x3b87f07d,0x3b87495e,0x3b88d3bc,0x3b91da47, -0x3b834caa,0x3b8227f4,0x3b753ee4,0x3b69602d,0x3b5a3e43,0x3b54a725,0x3b2f99b9,0x3b11258f,0x3aea9cde,0x3abd7cd6,0x3a92710d,0x3a58d503,0x3a7a6872,0x3a78c541,0x3a8fc9cf,0x3aa1289c,0x3ac6e716,0x3aec26a3,0x3b0c171c,0x3b23c16a,0x3b3d2853,0x3b57a615,0x3b7707a1,0x3b8cb56a,0x3b8d4236, -0x3b906460,0x3b91e22f,0x3b95ab23,0x3b6f66e2,0x3b6eae15,0x3b69e8ae,0x3b6ab44a,0x3b68a86f,0x3b6f87ea,0x3b739746,0x3b7abc1b,0x3b70e9d2,0x3b68ae3f,0x3b6396d8,0x3b58e56e,0x3b50e28a,0x3b4c4992,0x3b3e2880,0x3b337a29,0x3b296287,0x3b1c8612,0x3b13cf2e,0x3b02e502,0x3b129c94,0x3b1b9135, -0x3b2cd589,0x3b20afff,0x3b2bd018,0x3b3d45d3,0x3b439764,0x3b484b0e,0x3b4fc9f2,0x3b584ca0,0x3b61f60b,0x3b6e853a,0x3b679204,0x3b650736,0x3b7a30bf,0x3b719024,0x3b8a967a,0x37478792,0x36fed3eb,0x370c8bbc,0x37367266,0x37656ba7,0x37c3a48d,0x375faf10,0x37200468,0x36796731,0x37450488, -0x3780b49c,0x37ab8ff5,0x37793cde,0x3789c61a,0x37d1fa89,0x37dfa813,0x37d4381b,0x37a25090,0x37410619,0x3713c88a,0x370e1c41,0x370f7e39,0x371bad78,0x37404e70,0x378453ff,0x3764b25d,0x368e1899,0x3717c2b6,0x3708d730,0x370dd7ef,0x36bbdfa7,0x367c5c59,0x36e42e54,0x3698de59,0x36dcc3f8, -0x37844a23,0x3708fd32,0x370c5e47,0x374960ca,0x380c16c3,0x3861c57e,0x38ca380f,0x387934f1,0x38173631,0x36e9a106,0x37c52485,0x37f83430,0x3877e619,0x37e42875,0x386d271e,0x3908eaaa,0x392fe310,0x3925b2be,0x38d51552,0x3850d429,0x38044fcd,0x37f54dfb,0x37bab5d2,0x378a34d9,0x37bd25cd, -0x383a289e,0x3829e169,0x37421f6f,0x37d0ec5e,0x37da2e40,0x38270e61,0x3817ed84,0x37f14c77,0x3815ee57,0x371b50ad,0x36d66634,0x383cf40c,0x372d67a0,0x367ef215,0x37dfa438,0x3857a96f,0x38eaa0ea,0x395e1c85,0x393025c8,0x38dead0f,0x382b20dc,0x38605dff,0x38bc91fa,0x3956117f,0x38d5dac7, -0x3908a8ed,0x3997d82f,0x39a00e1a,0x39915cec,0x392c5645,0x3870efe9,0x38242a95,0x385eac56,0x37fb6f3e,0x37b55ed6,0x381a9279,0x38c86801,0x3893dcbc,0x38b6cd3c,0x388c78f2,0x3907b40f,0x39ac9065,0x39a563dd,0x3962a26f,0x392189f2,0x380691d5,0x371a4d3c,0x38dbca08,0x37016452,0x3860d533, -0x3805d7be,0x3969c184,0x39d7ba1d,0x3a4ac4a9,0x3a0fd11a,0x39b9ac58,0x38ff66ad,0x38bb9574,0x38dae1c3,0x39ee6b45,0x38eb2cf4,0x39d47578,0x3a99afb8,0x3ac0f562,0x3aaa405b,0x3a59fd07,0x39d742b4,0x39a87c1b,0x39a848a1,0x39466759,0x38a92648,0x39254ddc,0x396371c7,0x39181eed,0x38d70069, -0x38c86f00,0x38daa8b0,0x39744f0a,0x3a046c6a,0x39e74760,0x39ca8ae0,0x3969fa5a,0x38a21637,0x39c2f7ee,0x38c5e45a,0x3a52ea76,0x3a445989,0x3acd17ee,0x3ac624fa,0x3aa9f06f,0x39fed80f,0x3961ef41,0x39a3542e,0x39278124,0x3a1c0311,0x3a9f0369,0x3a91b0c0,0x3a72417a,0x3ac1e6d8,0x3a9f75ba, -0x3a7594a7,0x3a6c8108,0x3a7919c7,0x3a95f3b4,0x3a8ca76b,0x3a595fac,0x3a0fd900,0x39e3b1d1,0x3963bb0a,0x38c32225,0x38d5ba68,0x38d89754,0x390e09d7,0x3778268d,0x37a50bf2,0x3958e215,0x3a10a129,0x39f9da64,0x39dd1ab3,0x3994dc0e,0x3a06a240,0x3a8f58c1,0x39ed344f,0x39e17f33,0x3a0adab7, -0x3a99c873,0x3ac97dc8,0x3ad3beaf,0x39eabd59,0x398d2b10,0x39a11f77,0x3abf76c0,0x3a891348,0x3aab6780,0x3aa1e1d6,0x3a2a3a1d,0x3a182764,0x39da2cb6,0x39c52c08,0x397c0f78,0x3998796e,0x38e3814b,0x387d050a,0x3813cf28,0x37fda665,0x372ed78e,0x38622626,0x3888b9c4,0x38b77080,0x38217086, -0x3763ae74,0x38c02b3e,0x39c07582,0x3abb34e2,0x3ab0ff77,0x3a3ee17c,0x3a0f45dd,0x3bbc1d71,0x3c2bcaf6,0x3b207bf1,0x3a2e1eae,0x3af474b8,0x3abaa6bc,0x3ac354bf,0x3afc333d,0x3ac1514c,0x3ac2210b,0x3a9249fe,0x39c69260,0x3a1bd13e,0x3a447380,0x3a050bb6,0x39eaa96b,0x39a0604d,0x394281fd, -0x38cf44f0,0x38bda8f3,0x38145197,0x37d90894,0x388d470e,0x3880791f,0x3823a6a6,0x3849d7e6,0x361d75bb,0x37618d3e,0x36acf63a,0x37b2d32e,0x3885c9cf,0x38f39c8f,0x38c3bf01,0x38dff582,0x39f95652,0x3b264077,0x3b2a60e7,0x3bb1e2b3,0x3afa805e,0x3a58314a,0x3a8e6125,0x3a82fcd6,0x3a3c09fa, -0x3a7c4686,0x39f99dee,0x3a114635,0x39b093ab,0x39052509,0x3974ea84,0x399f7927,0x3987749f,0x3953b8c9,0x394c25d3,0x3923066f,0x39453539,0x394f27f6,0x39327374,0x390f1dc5,0x38d6b5bf,0x37b0f9e8,0x35c5aedd,0x36d18bdf,0x361c4a46,0x36b97c65,0x36fd7cd6,0x35c33bf9,0x365475a1,0x3878a575, -0x38b917fc,0x38fb697a,0x3a93f343,0x3b11e344,0x3aa74282,0x3a95eedf,0x3a43978c,0x3a1ea414,0x3986f63c,0x39178ab8,0x399e5793,0x39c4391f,0x3a185289,0x3a3c3a99,0x3a49fb2b,0x3a267925,0x39eb542a,0x39af9264,0x39022459,0x382a9088,0x388cc16c,0x3921cd09,0x39874a15,0x39b5d044,0x39c553cf, -0x39a74d8d,0x39866069,0x38db0d2e,0x3809264f,0x36b3c9e1,0x37093776,0x37789cb8,0x379561d5,0x37d9154c,0x37d84530,0x38394589,0x376c948c,0x38106fb3,0x394728cd,0x3a67b2c8,0x39d54121,0x39f0d8a0,0x3a0608eb,0x39f67ef1,0x39dae3f4,0x39c091f1,0x39d282ec,0x39fedef7,0x39e8229f,0x39ee825c, -0x3a06850d,0x39f3c714,0x39cb7bb1,0x3986fc79,0x392118ef,0x38829b34,0x37d5e3f0,0x37f2c744,0x38555121,0x38ca3338,0x38e5f4c0,0x38b605f8,0x387a56eb,0x3878bec0,0x386fc69d,0x385e9056,0x381fc05c,0x388ad231,0x38bca311,0x3908cc87,0x391e1f24,0x391bfa16,0x39500643,0x39839a54,0x39943554, -0x39abc85f,0x3994d7ba,0x399a142b,0x39848a28,0x394b4f2f,0x390f295c,0x38c5b290,0x38bcfdc6,0x38dc4467,0x38bb0db1,0x38af2593,0x38c8e072,0x38655ae1,0x38442442,0x3889e43c,0x386ef822,0x3879fba1,0x389682f6,0x38907dc0,0x389fb45c,0x38c076ff,0x38d7d68b,0x39004d94,0x391adb3e,0x38f3bbe8, -0x38fc349d,0x392e20f8,0x391552ad,0x391ad829,0x3938e525,0x393ea547,0x394fb01d,0x39839f3e,0x398655b2,0x39a0373e,0x39b6e344,0x399c4950,0x395d2456,0x39560cd9,0x3938a4ac,0x391f613e,0x38fe53aa,0x38cbf61e,0x38a94caa,0x38b1971c,0x38ac21a1,0x38b13b92,0x38aedf5b,0x38a78f99,0x389d16c9, -0x38a349fc,0x38a53854,0x38b2d699,0x38c5a968,0x38e00a4a,0x38fc80d7,0x390ee5ce,0x390d955d,0x390b1e30,0x39163d03,0x3926b467,0x393f0e87,0x395dd5a7,0x395418d5,0x39598456,0x3966741b,0x396fb66a,0x3982fc2c,0x399012a2,0x3980a2e1,0x39647081,0x395f6873,0x394bf9d4,0x38e43c83,0x38d9f2b9, -0x38cde27d,0x38be700a,0x38b81225,0x38b0ce50,0x38ac59c0,0x38a4cc5c,0x38a565f1,0x38a5f118,0x38ac6bbb,0x38b2b675,0x38bc47c6,0x38c4d8d9,0x38cd60a1,0x38d45c3b,0x38db9bd1,0x38e43244,0x38ed722d,0x38fcf893,0x38fc59d5,0x3900b7c9,0x39043ca1,0x3903508c,0x3906c8ca,0x391561bc,0x39103a9f, -0x390f5efc,0x390abf30,0x390b73d6,0x39096d39,0x390d880e,0x38fbee8d,0x38f109a0,0x38f7ba96,0x38f04951,0x390e1d14, -}; -const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470] = { -0x3ea94952,0x3e96b3de,0x3eac0098,0x3e9ec499,0x3ea82449,0x3ece0959,0x3e92fb80,0x3e94d96e,0x3ebb6806,0x3ebf2c5a,0x3eb94743,0x3ea8ba76,0x3eb7f274,0x3ebc8a4a,0x3eb985ae,0x3e8f3492,0x3e887542,0x3ecc104d,0x3e94f3ad,0x3e8d6ef0,0x3e919f3e,0x3e81a12c,0x3e8ba934,0x3e8f3162,0x3e92443b, -0x3e956946,0x3e9833cc,0x3e9c90fc,0x3ea16eac,0x3ea72c23,0x3eadda5d,0x3eb46de7,0x3ec12deb,0x3eb9255c,0x3eb43e2b,0x3eab26c8,0x3ea559b8,0x3edfbfe1,0x3edb5589,0x3ed8a3c0,0x3e95cf33,0x3e80cd54,0x3e62c244,0x3e577b07,0x3e3e0c11,0x3e4710c1,0x3e48be20,0x3e44185a,0x3e490da3,0x3e376856, -0x3e376849,0x3e2dea5f,0x3e35e973,0x3e540232,0x3e4af4c1,0x3e879a69,0x3e87aff5,0x3e8a2d54,0x3e97cb79,0x3ea557d0,0x3eade49b,0x3eb7d211,0x3ec1cfef,0x3ecf39a9,0x3ee19c3f,0x3ef97f9f,0x3f0b5d8f,0x3f1a80d7,0x3f2fcb9c,0x3f2733f1,0x3f1cdcf0,0x3f0c3d91,0x3f003aa6,0x3f1db3c8,0x3eeec08f, -0x3ebc39c9,0x3e8d7016,0x3e55103a,0x3e212045,0x3e041073,0x3de06a68,0x3dcaee14,0x3db21b35,0x3de025f2,0x3dc5b1d3,0x3dbf13a0,0x3db5a917,0x3dc48155,0x3dd212b5,0x3e000fef,0x3e0845c3,0x3e2d8de1,0x3e3dff7b,0x3e771d7b,0x3e8f28dc,0x3eb18a83,0x3ec5c3b9,0x3edf6074,0x3ef8fe68,0x3f0ea3c8, -0x3f24508d,0x3f4113cc,0x3f5fbffa,0x3f7fedc5,0x3f98e082,0x3f88af16,0x3f7a4b75,0x3f579368,0x3f32fd61,0x3f6ee325,0x3f16b6e8,0x3edb45ae,0x3e7b6fc1,0x3e2c28b1,0x3df2985a,0x3d99338c,0x3d410c60,0x3d1101d6,0x3d13217b,0x3d39c9bb,0x3d2bc320,0x3d1b0c6e,0x3d06a87e,0x3d1d1fa1,0x3d3f43c2, -0x3d8c5283,0x3d9d3131,0x3de71ae8,0x3e09a006,0x3e45cbd3,0x3e6f6616,0x3ea2888e,0x3eb75081,0x3ed6788c,0x3ef5eb98,0x3f11c219,0x3f36df6c,0x3f6f13d7,0x3f9d08c4,0x3fc621d4,0x3fff5b3d,0x3fe687d9,0x3fc87e03,0x3faebae2,0x3f87681d,0x40111ab0,0x3fb99833,0x3f83ae3b,0x3f0030e2,0x3e9f539f, -0x3e55721e,0x3e226067,0x3dd144c5,0x3d8753ba,0x3d4c95ee,0x3d509c62,0x3d4b16e2,0x3d44135e,0x3d1f6925,0x3d2ecedb,0x3d5b63db,0x3d9b2164,0x3de57bae,0x3e38e02a,0x3e71eafd,0x3ed98e76,0x3f1f30d1,0x3f83f206,0x3fa27000,0x3fd4af4a,0x400b63fa,0x401c4dc6,0x402843ac,0x40295bbd,0x402662f0, -0x401a91a2,0x4010244d,0x400f9138,0x4013dfb8,0x4024a4f4,0x400eaabc,0x4070f4c2,0x3fa0eb2b,0x3f92314b,0x3efc170f,0x3eb96b6b,0x3e548e04,0x3e044991,0x3de32f8d,0x3d9dd8bc,0x3d8fe1c4,0x3d98a21c,0x3d785e8f,0x3d586f0e,0x3d376712,0x3d508001,0x3d85da29,0x3df0440c,0x3e2a1c76,0x3e86773b, -0x3e9be714,0x3efdd2cc,0x3f220612,0x3f83331d,0x3fb70894,0x3fff58cf,0x40272268,0x4037365b,0x4040a7d2,0x4043fd16,0x403ebb9d,0x40398690,0x40340a76,0x40265f59,0x4030dc56,0x406a2bf7,0x4064d3b9,0x40a37d56,0x400ac9ff,0x3fc4d80f,0x3f0e722e,0x3f1757a1,0x3e8c749b,0x3e5d8653,0x3de8d03b, -0x3dacae87,0x3db0f0d2,0x3e1ec313,0x3dc14d08,0x3daadb0a,0x3dd34d53,0x3db22a32,0x3df43908,0x3e3f6e32,0x3e4b14e0,0x3e8e68fa,0x3ea199fe,0x3f0cf9b6,0x3f311aaf,0x3f90eee9,0x3fc1a8ba,0x3ffee1f8,0x401a6e0d,0x4034d8c9,0x40455a4c,0x404bd922,0x40376165,0x402dfd56,0x40339d70,0x401d0d70, -0x40247f69,0x4081affb,0x407dd802,0x404ebf41,0x401378ae,0x3f988ed0,0x3f1184de,0x3ea141ae,0x3e58b307,0x3e062161,0x3ddfec30,0x3db8240d,0x3dd4d9d7,0x3e720891,0x3dbd5abc,0x3d9b1014,0x3dbdc353,0x3dd6b6d2,0x3e061032,0x3e440faf,0x3e5b3220,0x3e91b85b,0x3ea84532,0x3efb9aae,0x3f1008f7, -0x3f45dab1,0x3f8d3b93,0x3fbf316d,0x3feb48ba,0x401009c7,0x401d29ec,0x4020228b,0x4028ec93,0x4025c7cb,0x402635bf,0x400889ee,0x3ff8f714,0x4013efc7,0x4007409c,0x3fd0e908,0x3fc45007,0x3f813935,0x3f104b59,0x3ebbaaf3,0x3e6e18ce,0x3e2eabae,0x3e1d3709,0x3e0117b9,0x3df34882,0x3e22e52a, -0x3dd86c83,0x3dc72027,0x3dd41b7e,0x3e02d26b,0x3e27dd72,0x3e486285,0x3e7bf17f,0x3ec497eb,0x3edcde42,0x3f060b23,0x3f0d4e99,0x3f27189c,0x3f468167,0x3f83b8f5,0x3fb1cc02,0x3fd81858,0x3ff4ea13,0x4005176b,0x3ffea363,0x3ff8a889,0x40042bf8,0x3fed6e4e,0x3fea6a40,0x3fed65d2,0x3fe9b038, -0x3f98c734,0x3f7ead0b,0x3f434b58,0x3f002103,0x3ea802a5,0x3e8c1097,0x3e440883,0x3e17bddd,0x3e14ca6c,0x3e16c2c1,0x3e105658,0x3e084b9c,0x3dfc6b42,0x3e00527a,0x3e17818d,0x3e49bd0a,0x3e878869,0x3e997e8a,0x3ec503c5,0x3edfc4dc,0x3f0b5b15,0x3f08001a,0x3f104318,0x3f28879c,0x3f46b041, -0x3f6481b6,0x3f85b333,0x3f9b7624,0x3fb24b60,0x3fbe64ca,0x3fc488dd,0x3fc68498,0x3fc7b7f6,0x3fc24730,0x3fb1653c,0x3fa7d227,0x3f75c923,0x3f4dd03e,0x3f266662,0x3f064de3,0x3edc4ef3,0x3ea5812e,0x3e89474e,0x3e4b5b92,0x3e699005,0x3e3960aa,0x3e6cda0a,0x3e55d9a7,0x3e63f68d,0x3e572ff0, -0x3e7fe216,0x3e860046,0x3ea01815,0x3eb274be,0x3ed8c43d,0x3eeec9ab,0x3f1028c9,0x3f0e2013,0x3f1ca75c,0x3f2c6cf0,0x3f408ee7,0x3f55b64e,0x3f6aa2f5,0x3f800495,0x3f8dc2cd,0x3f91e6bf,0x3f99a696,0x3fa5cbee,0x3f9ea220,0x3f9b71e3,0x3f9d2c75,0x3f87c29c,0x3f3d50ab,0x3f48b831,0x3f52e198, -0x3f194a00,0x3f0a2718,0x3efc51bf,0x3eed3028,0x3ed0b5f6,0x3ee906fa,0x3eef02fb,0x3ed83025,0x3eea4bb2,0x3ed604ee,0x3ed3c857,0x3ec7b905,0x3ed8510e,0x3eed0ac2,0x3ee33cfe,0x3f1ca039,0x3f17b3c1,0x3f168da9,0x3f206c5d,0x3f2889ed,0x3f31863b,0x3f3d7b3f,0x3f48af5b,0x3f51025a,0x3f594208, -0x3f625c84,0x3f6a4abc,0x3f70ad48,0x3f7c7153,0x3f6a88f3,0x3f5cf60b,0x3f51b8bc,0x3f484f7b,0x3f23d3cf,0x3f3fc3ea,0x3f2f0ec0,0x3f3ab4a3,0x3f71ee8e,0x3f296937,0x3f294405,0x3f5b5c34,0x3f649c54,0x3f5fdb34,0x3f4abe09,0x3f5e78ff,0x3f6544d9,0x3f5ed998,0x3f247814,0x3f1c793a,0x3f7adfa2, -0x3f2e67ef,0x3f225526,0x3f2e8d0a,0x3f15b342,0x3f1fdc38,0x3f212f5a,0x3f23f893,0x3f25d228,0x3f27fa0c,0x3f29e19c,0x3f2c42c1,0x3f2f0299,0x3f326c20,0x3f35aa75,0x3f3b7c95,0x3f363c76,0x3f33c6c4,0x3f2f2f84,0x3f2f545a,0x3f4e103a,0x3981d983,0x394cb64d,0x39305111,0x394eed56,0x396b5a84, -0x39bdc9ae,0x394ff124,0x3944acc5,0x39602b8e,0x396c84b7,0x397f2b72,0x3996ad53,0x398a7bda,0x398087d5,0x393e7438,0x395155b7,0x39671586,0x39a32141,0x399ec789,0x39a14c76,0x3999b19e,0x398a10c8,0x397efcb4,0x397085a7,0x396c42fc,0x39549e75,0x39483ed7,0x38fb38ce,0x38d86761,0x38e0c350, -0x3927a8e4,0x39482d3d,0x39369036,0x3981cbec,0x3985347a,0x3938ac93,0x395a4256,0x396bcebd,0x39714884,0x39b93a3a,0x39f2b45a,0x3a65db16,0x397e314e,0x392b7613,0x3977f351,0x399ad1c2,0x39d1502e,0x3a059538,0x39eeda0b,0x39bcc267,0x39570f8b,0x3981c7da,0x39b9b658,0x3a23ef16,0x3a2e5494, -0x3a318aa2,0x3a1c0487,0x39ff7ddc,0x39d280a4,0x39b38b3f,0x39b9046c,0x399094e0,0x398ee61c,0x38f50049,0x38d2f0fe,0x392f8a4b,0x393344e8,0x39761aed,0x3925501b,0x39b5792b,0x39a78bf5,0x3914396f,0x394b89ce,0x39c149f3,0x3a04ab01,0x39e1d8f0,0x3a024208,0x3ae46bc5,0x399faa6b,0x398e61d8, -0x39c29123,0x3a0b427c,0x3a4506ce,0x3a8f1fce,0x3a62257c,0x3a2eab94,0x399cbbbe,0x39a4370d,0x3a23985a,0x3aaab07d,0x3ab423fc,0x3aad873f,0x3a8ffe15,0x3a56d208,0x3a1c5afe,0x39ed397b,0x3a092715,0x39e61ec8,0x3a4f06c0,0x39fb63b8,0x3a04ccef,0x3a3be531,0x39690103,0x39a30de0,0x3915398e, -0x3a37d817,0x3a45e380,0x39983d28,0x39db449b,0x3a0d5983,0x3a425ce1,0x3a9856c9,0x3aff268f,0x3b91273b,0x3a318d59,0x3a6b32e1,0x3a154c58,0x3a977867,0x3ac8c67e,0x3b0d850d,0x3add282b,0x3a8ded7e,0x3a1d3810,0x3a5d9da6,0x3ac62dce,0x3b37997c,0x3b29bd95,0x3b2766f5,0x3b0ce320,0x3ad1f13b, -0x3a8de1b9,0x3a6194d4,0x3a8f2288,0x3a92e7d3,0x3b064730,0x3b151b91,0x3b27bb9a,0x3b33d518,0x3a2cc123,0x39ca126b,0x39a222bc,0x3a912b8e,0x3a8b93af,0x3a2d53f4,0x39aa33b7,0x3ab65196,0x3b0e87a1,0x3bfc207e,0x3bc1ff30,0x3b5c59f0,0x3aac8796,0x3b3b14b2,0x3b1249f4,0x3b1608e7,0x3ae3892f, -0x3b0c2f90,0x39f75d68,0x39c42bea,0x3a6af381,0x3a8e523a,0x3ac689b1,0x3b30f1f9,0x3b240d4b,0x3b0d1e07,0x3a9aec3c,0x3a4ed0be,0x3a241c08,0x3a2a13f6,0x3a28b09c,0x3a48ec00,0x3affee5f,0x3b3df8d4,0x3b5360d3,0x3b69ec4b,0x3b047eb7,0x3b26d9e4,0x3ab25465,0x3b173aaa,0x3b8c41bb,0x3c197d2d, -0x3b50fc1f,0x3b1cf7b0,0x3c554ec1,0x3c23b4fe,0x3bfed11e,0x3b6c8713,0x3b1dedab,0x3b241596,0x3ab38d3f,0x39c4deed,0x3999b725,0x3a7952a8,0x3a752ece,0x3a4cb7b4,0x39f67669,0x3a2b686a,0x3a5c990b,0x3a374828,0x3a1d91d6,0x3a3a140f,0x3a5d5e21,0x3a302c36,0x3a15e46c,0x3a35a7c2,0x3a71c1f7, -0x3a4cd8ba,0x3a380135,0x3a7c4451,0x3a8cc7ff,0x3acadce4,0x3abd0714,0x3a9f05fe,0x3b58ff9f,0x3b7f8258,0x3be3a92d,0x3c095e28,0x3b110d68,0x3b726fc1,0x3bb864e6,0x3b8eeccf,0x3b45b9f0,0x3b204c57,0x3aec7ef4,0x3a903db5,0x3a5cb450,0x3a34878e,0x39c5ac2b,0x38965f94,0x389a76a3,0x3942b2ae, -0x397abc43,0x3953a8e4,0x39d01e63,0x3a01bd05,0x393b54ce,0x39a42f3f,0x3ac77c9e,0x3a57e486,0x3a6112b6,0x3a15a9fe,0x3a4a1a32,0x3a61fe0f,0x3a4fad96,0x3a11ca30,0x3a38b44b,0x3ab09985,0x3b263a9d,0x3b4cbcb8,0x3b8b6764,0x3b2cce4e,0x3b8ec447,0x3b445b90,0x3b656f56,0x3cb8ec5b,0x3c50d20f, -0x3c2d73a0,0x3c064382,0x3ba1aff4,0x3b0e0087,0x3a8df092,0x3a98125f,0x39d7d649,0x39a1323b,0x396f6c1b,0x390cd81b,0x38f27bd7,0x397cf70b,0x39a5441f,0x3a035ee0,0x3a0151aa,0x3a0a4139,0x3a05a988,0x3a6c0284,0x3a2e48cb,0x3a42dc3d,0x3a28f965,0x3a2a4c82,0x3a395faa,0x3a4f61cb,0x3a97f7f5, -0x3aa192f0,0x3aea9da2,0x3afcd3db,0x3b0fe219,0x3b67c038,0x3b74ed68,0x3bb471c7,0x3c2c4a00,0x3ca4886b,0x3caed00b,0x3cce83a0,0x3c9e2463,0x3c777686,0x3c42b913,0x3c44e72e,0x3c044f60,0x3b36c217,0x3acda9b2,0x3a49c521,0x39c225c8,0x397310f6,0x394836af,0x39bc9f4f,0x394547ae,0x39443a5a, -0x39c1a0f9,0x3959f090,0x39802342,0x39b6e31d,0x39e573d2,0x39f3b368,0x39f0b76a,0x3a0c54e9,0x3a1c92b8,0x3a5c8ae2,0x3a8ca06d,0x3ab8c447,0x3ad560a0,0x3b16521e,0x3b58a91c,0x3bb930ec,0x3bfc21ae,0x3beadf4b,0x3c0cded3,0x3c5dc7c1,0x3c3c7418,0x3c4de89b,0x3c57653e,0x3c314bc5,0x3c187099, -0x3bff673e,0x3bf5f0a0,0x3c0657d8,0x3bdc4000,0x3ba947b6,0x3b5f3e7c,0x3b309608,0x3af6c78b,0x3aada3ab,0x3a26f946,0x39a1d239,0x39a079c1,0x39ae29c9,0x39d54338,0x39b06663,0x3a69cf5d,0x3ab8de2a,0x3aea3fc0,0x3b16be3e,0x3b2f8078,0x3b370298,0x3b847c21,0x3b8cf18d,0x3b82c712,0x3b828cfa, -0x3b8d2a8d,0x3bd56b85,0x3c068d0c,0x3c1490f6,0x3c0c5d3b,0x3c14f158,0x3bf1e4d0,0x3bf920cb,0x3be35dd9,0x3bdf64e0,0x3be6ab5d,0x3bce2eea,0x3bbb1298,0x3badba82,0x3b957ddb,0x3b8515f3,0x3b7ba9fa,0x3b3baff9,0x3b18977f,0x3af33933,0x3a9ac960,0x3a3de3cc,0x3a0ccbaf,0x39a0713e,0x39d9da67, -0x3a152029,0x3a573854,0x3aa826d8,0x3af67512,0x3b127bee,0x3b309a7b,0x3b5d5c52,0x3b83a0d9,0x3b9f6cf4,0x3bc1c278,0x3bd34f0b,0x3c0ab893,0x3c3d9e5c,0x3c1cddef,0x3c10c180,0x3c215ff0,0x3c0381f6,0x3b94c4c8,0x3b9f4368,0x3ba14431,0x3b95295e,0x3b92b242,0x3b916f03,0x3b8db043,0x3b8d0b88, -0x3b7723d8,0x3b577aac,0x3b3d3797,0x3b23b06d,0x3b0c0901,0x3aec3346,0x3ac6fbfc,0x3aa13b58,0x3a8fa927,0x3a79ddc7,0x3a7b07d2,0x3a583fbc,0x3a927f5d,0x3abd8ab2,0x3aea8d17,0x3b112675,0x3b2f9865,0x3b54a014,0x3b5a34a8,0x3b695bb1,0x3b7530d2,0x3b822b00,0x3b8350d0,0x3b91e93c,0x3b88d94f, -0x3b874ce9,0x3b87f07e,0x3b8c6b1d,0x3b69df89,0x3b6f2635,0x3b70b068,0x3b72358c,0x3b79891e,0x3b64ccd6,0x3b6739cd,0x3b6e5686,0x3b61e0ea,0x3b585090,0x3b4fc2cc,0x3b484b27,0x3b439937,0x3b3d4189,0x3b2bc80d,0x3b20abc2,0x3b2cb917,0x3b1b6d77,0x3b128402,0x3b02ecb5,0x3b13d053,0x3b1c81eb, -0x3b2964b6,0x3b337aea,0x3b3e29ae,0x3b4c4d62,0x3b50e649,0x3b58e8ae,0x3b639cd9,0x3b68adec,0x3b70e3b2,0x3b7ab15a,0x3b7392eb,0x3b6f8773,0x3b68abb2,0x3b6ab427,0x3b8a9578,0x374788b9,0x3736296e,0x370c82fb,0x36feb9d9,0x3708cb0d,0x378439de,0x36dcab14,0x36988db6,0x36e0ead7,0x367e65a8, -0x36bb60eb,0x370d7ff0,0x370921ba,0x3717be87,0x368d5d47,0x3764b17b,0x3784f10b,0x3740fb00,0x371ad03b,0x370eff93,0x370e25c3,0x3713d477,0x3740c80e,0x37a23231,0x37d43d06,0x37dfabc8,0x37d22fca,0x378a040f,0x377983fe,0x37ab3a92,0x3780d965,0x3745107f,0x3678dede,0x371fba0f,0x375f894d, -0x37c3a2af,0x376568c1,0x380c38cb,0x374a0bd7,0x370c4421,0x372d86c4,0x383cd943,0x36d720d2,0x371a9a39,0x381707b3,0x37ee8862,0x3818916c,0x38279fb4,0x37dac821,0x37d0ec29,0x3742f39c,0x382a1410,0x3838e794,0x37bb7f9a,0x378d771b,0x37bb7585,0x37f57256,0x380437df,0x385125b0,0x38d542f7, -0x3925af23,0x392fdf89,0x3908bb9d,0x386cb03f,0x37e3b9eb,0x3878ecb7,0x37f7b725,0x37c4de39,0x36e93381,0x38179574,0x387975f5,0x38ca47b4,0x386188fc,0x38578979,0x37dfa580,0x3680114a,0x37015d1f,0x38dcbaae,0x371be863,0x3806c609,0x39210a4c,0x3963ba92,0x39a50f93,0x39aca292,0x3907398c, -0x388c8d2a,0x38b68a2a,0x3893b313,0x38c898af,0x381d2cc9,0x37b06026,0x37fb883d,0x385dea79,0x38249a88,0x3870515c,0x392c20cf,0x39915f0e,0x39a00fb3,0x39981f4b,0x3908e0a2,0x38d62351,0x39555b13,0x38bcd69f,0x38611b43,0x382c63a9,0x38de18db,0x392fe078,0x395e0b9c,0x38ead151,0x3967f6c3, -0x380ae6e6,0x385e47cb,0x38c69e13,0x39c0d138,0x38a1141b,0x396ad094,0x39cb2c3d,0x39e86036,0x3a0388db,0x39732d1a,0x38daa5ac,0x38c781e2,0x38dafa48,0x3917c512,0x3962496a,0x3923cff0,0x38affced,0x394587f5,0x39a94ed2,0x39a7f395,0x39d7a10c,0x3a5a425f,0x3aaa3b34,0x3ac0fb59,0x3a9941ec, -0x39d455e9,0x38eaab38,0x39ee5033,0x38db96dc,0x38bad133,0x38fd549d,0x39ba070e,0x3a101b26,0x3a4ac561,0x39d7c154,0x3acc8401,0x3a44e3b5,0x3a5308f2,0x3a0687b1,0x3996d101,0x39dca29d,0x39f8ed64,0x3a10ea4c,0x395921af,0x37a27ef8,0x377289ed,0x390db105,0x38d52118,0x38d9b32e,0x38c3a975, -0x39637fae,0x39e3900a,0x3a0fcfde,0x3a5a012c,0x3a8c5894,0x3a9633ad,0x3a787235,0x3a6d613e,0x3a755151,0x3a9faca2,0x3ac0b9f8,0x3a731bac,0x3a9239af,0x3a9f327a,0x3a1c0a12,0x3927df33,0x39a1eabd,0x39629840,0x39ff01d6,0x3aaa0269,0x3ac5eec5,0x39e22b1e,0x39ea73e9,0x3a9108a3,0x3a0d377b, -0x3a3abe83,0x3ab31873,0x3ab87198,0x39c2f851,0x38bc3373,0x3762cfec,0x38235a48,0x38b77efc,0x388752f5,0x38608544,0x372ec65e,0x37f05574,0x3816ff26,0x3872f1ec,0x38ef6e1e,0x39980523,0x397b1b74,0x39c55053,0x39da630e,0x3a183961,0x3a2a5e6d,0x3aa0dc78,0x3aac0d1e,0x3a89800e,0x3abf62fe, -0x39a12dfb,0x398d4dd0,0x39e9485e,0x3ad48c09,0x3aca5615,0x3a99a0a2,0x3a0b2c06,0x3b2106e8,0x3c2b901f,0x3bbc2bf8,0x3b25172d,0x39f69d6a,0x38decd57,0x38c2f26d,0x38f45ab6,0x388796e0,0x37b0e79c,0x36b10422,0x375f4c18,0x3622f097,0x384c1ed2,0x38230584,0x387de3f7,0x388b7eb7,0x37da909f, -0x3814b414,0x38bd2a12,0x38cf0621,0x3942891a,0x39a0850b,0x39ea983a,0x3a052e32,0x3a4369cc,0x3a1c6e9a,0x39c753f5,0x3a91eb56,0x3ac309c3,0x3ac0e95a,0x3afa855e,0x3ac3d1bf,0x3abaa3a6,0x3af4835c,0x3a2d640e,0x3afccf5a,0x3bb12d20,0x3b2a8220,0x3b1129f9,0x3a93b3df,0x38fbc0e0,0x38ba287b, -0x38809e38,0x365481e4,0x35ca5f78,0x37028846,0x36bb855a,0x361c4724,0x36d842f9,0x35cd5e59,0x37ad5587,0x38d2f30a,0x390f9a1a,0x3935d795,0x394f045a,0x394584e6,0x39229b9e,0x394cdfb7,0x395383b4,0x398783e0,0x399ef687,0x39754dde,0x39052ff5,0x39b09493,0x3a116044,0x39fa0da3,0x3a7a3b46, -0x3a3cc203,0x3a833239,0x3a8e6d4a,0x3a571ea6,0x3a42dc5e,0x3a95556b,0x3aa7c661,0x3a664d31,0x394b45af,0x381081e2,0x37639ca2,0x38325652,0x37e1688c,0x37d5bd6d,0x379651c9,0x377611de,0x370b0abd,0x36b097bc,0x380d8246,0x38dc3983,0x39838ede,0x39aa687d,0x39c58155,0x39b60f3c,0x3986f03b, -0x3921e5e2,0x388ceb8f,0x382a96aa,0x39025ced,0x39af08a4,0x39eb978e,0x3a267881,0x3a4a006d,0x3a3c4c6c,0x3a18648b,0x39c3f623,0x399ecaae,0x3917c160,0x39873365,0x3a1e7172,0x3a05a013,0x39f19028,0x39d2316b,0x39ab9fc4,0x399620f4,0x3985da9c,0x394f4dc4,0x391db1c9,0x391ccd90,0x3909cede, -0x38bb5338,0x388cc02b,0x381bc686,0x385ee11d,0x387015ed,0x38750218,0x38735844,0x38b8c72e,0x38e2cccc,0x38c79549,0x385763d7,0x37f14468,0x37d69d66,0x3882a6c4,0x39211ffe,0x3986e93a,0x39cb9156,0x39f3f4f8,0x3a066f64,0x39eeaf6b,0x39e82374,0x39fe6dfe,0x39d2b0cc,0x39c08986,0x39dae432, -0x39f68e25,0x39842c03,0x399affda,0x3994f834,0x3998f361,0x39b4a156,0x399f1f9f,0x39868e61,0x3982eb2f,0x39504de3,0x393f6f17,0x3938d2d9,0x391b4932,0x39153ea7,0x392e9a60,0x38fc8373,0x38f4ab99,0x391b9413,0x3900282d,0x38d7aeab,0x38c09a0d,0x389fa5d9,0x38907fa7,0x389664c3,0x3879fbf6, -0x386ef742,0x3889e9e9,0x3843fda0,0x386551a0,0x38c8b4e6,0x38af296d,0x38bb1444,0x38dc2eae,0x38bd0456,0x38c5a9b7,0x390f2d58,0x394b440d,0x3938690c,0x3956dfd9,0x395e51b1,0x394aeb6f,0x395d14e4,0x3962d06e,0x39807c1b,0x398fe63d,0x3982f72f,0x396fe621,0x396662a9,0x39597710,0x39542c20, -0x395d6e3f,0x393ed611,0x39264c81,0x3915950f,0x390afc7e,0x390d7452,0x390ebff6,0x38fc8de6,0x38e00ddd,0x38c5b632,0x38b2d973,0x38a5351e,0x38a34c32,0x389d0efc,0x38a78b3f,0x38aecf8a,0x38b13208,0x38ac2155,0x38b1b81f,0x38a945bd,0x38cbe182,0x38fe5e89,0x391f5e7b,0x38cde6be,0x38d9d030, -0x38e456f6,0x38f13cb6,0x38f93093,0x38f1df73,0x38fc3f64,0x390d9bf8,0x390974c0,0x390b6654,0x390ac2b6,0x390f607c,0x39103cc6,0x39157b31,0x3906e262,0x39037cce,0x390482cb,0x3900cd5b,0x38fc5ad3,0x38fcfc22,0x38ed700b,0x38e4304d,0x38db986f,0x38d45b1c,0x38cd62e3,0x38c4db2a,0x38bc4a79, -0x38b2b94a,0x38ac71da,0x38a5f2eb,0x38a56181,0x38a4c2c7,0x38ac57c3,0x38b0d245,0x38b811a9,0x38be7912,0x390e1b4a, -}; -const uint32_t defaultHRIR_rom_EL16[HRTF_MODEL_N_SECTIONS * 470] = { -0x3ec4945b,0x3ea05421,0x3eb6f2e5,0x3eada84f,0x3eb73773,0x3ebcb8b4,0x3ec60c24,0x3eca9fef,0x3ecf62e5,0x3ec74384,0x3ec27f09,0x3ebdc130,0x3eb867d1,0x3eb3a7c3,0x3eaf61f2,0x3eab0f53,0x3ea77972,0x3ea47e0d,0x3ea1ee89,0x3e9b6e8f,0x3ea47e2c,0x3e92c354,0x3e937bb6,0x3eb4f08f,0x3e8d70bc, -0x3e8c6f85,0x3ea70010,0x3ea94bb2,0x3ea6c605,0x3ea165bc,0x3ea492f1,0x3ea6fabb,0x3ea64cbd,0x3e8fc7b7,0x3e95863e,0x3eb2a9ea,0x3e9de05b,0x3ec74c44,0x3ee37536,0x3ee9aa20,0x3eff1aa6,0x3f0ad8a4,0x3f1c936d,0x3f26c9e4,0x3f2be03a,0x3f1ec2c9,0x3f13fda6,0x3f09fee2,0x3f005d11,0x3ef00d14, -0x3ee227c6,0x3ed351fc,0x3ec7a49a,0x3ebfa224,0x3eb509ec,0x3eac1e37,0x3ea3db64,0x3e99af8b,0x3e8742f1,0x3e8046e4,0x3e6f3686,0x3e64993a,0x3e5fd649,0x3e664ea7,0x3e6c5c17,0x3e6aa54d,0x3e692716,0x3e6f15cc,0x3e71d22d,0x3e82bfdd,0x3e89d0bb,0x3e92da01,0x3eac28d1,0x3ec2ef15,0x3efa8037, -0x3f0e3d41,0x3f242323,0x3f41ae36,0x3f69a364,0x3f804455,0x3f89e4dc,0x3f71d94d,0x3f57fb68,0x3f40d7f9,0x3f2957c0,0x3f16bf46,0x3f0781eb,0x3ef00d94,0x3ed6b619,0x3ec583b2,0x3eacd550,0x3e9ef948,0x3e838948,0x3e68913d,0x3e4982b6,0x3e32b0c6,0x3e1ebfb7,0x3e120ec7,0x3e03dc69,0x3e12b9ed, -0x3e16f1f5,0x3e212727,0x3e07cd37,0x3e095183,0x3e185eea,0x3e2fc2cc,0x3e5197af,0x3e73f036,0x3e9c2e16,0x3ed22368,0x3f14cc25,0x3f2f33e5,0x3f516128,0x3f8442f9,0x3fa96495,0x3fc58523,0x3fd653f7,0x3faf0a6e,0x3f9096c0,0x3f71f4ef,0x3f49ef5c,0x3f2a2a6b,0x3f130452,0x3ef682de,0x3ed2e3fd, -0x3ebba23b,0x3e9dfa53,0x3e8938f1,0x3e5c80fd,0x3e38bfa1,0x3e098303,0x3de4a9d7,0x3db05a2c,0x3d963c68,0x3d8259a8,0x3d98f0fe,0x3dab64de,0x3db409e4,0x3d8e10a5,0x3d84f816,0x3dab8c70,0x3dd73d86,0x3e1227b4,0x3e407e17,0x3e9168e9,0x3f3e9798,0x3f6b9f95,0x3f921891,0x3fb029ea,0x3fd9dcaf, -0x3ff22a1c,0x40013d92,0x400390e3,0x400a3886,0x400ac5e1,0x3ff07e4a,0x3fe84c2e,0x3fd0c77f,0x3fb3eb8d,0x3f93445d,0x3f6d76a6,0x3f47a60b,0x3f0bb6c1,0x3edaa722,0x3e9b1f7c,0x3e6ade6e,0x3e2cb4e4,0x3e05bac2,0x3dba2ea2,0x3d9e383b,0x3d95cbd0,0x3dbf1e35,0x3dc71603,0x3dc00f63,0x3db06066, -0x3dc37332,0x3e0a8816,0x3e378052,0x3e82d33a,0x3eb321a8,0x3f0f1009,0x3f5c8572,0x3f874436,0x3faecec5,0x3fd0669f,0x400c0747,0x40196bbf,0x4023c59b,0x402083fe,0x40196f04,0x400af946,0x3fec718d,0x3fd5b50e,0x3fbdd2d1,0x3faba53f,0x3f8cd43b,0x3f65695f,0x3f3e73ad,0x3f1c9ad3,0x3f092ce6, -0x3ece9576,0x3e93cafd,0x3e4c386e,0x3e12a0fb,0x3ddb1058,0x3db24f95,0x3da0b7f0,0x3dc85e64,0x3deecfb6,0x3e17710b,0x3e08d42b,0x3e18db87,0x3e483489,0x3e6254e0,0x3e9d9422,0x3ee6eaf4,0x3f2673ea,0x3f704499,0x3fa91a67,0x3ff14ef7,0x401098c5,0x4030e1a2,0x40410530,0x40513675,0x4050f949, -0x40450a80,0x402d65f4,0x4010e8e5,0x3feae650,0x3fbb2ea8,0x3f94a6c5,0x3f6f6c04,0x3f433c29,0x3f298678,0x3f0e3fa2,0x3f0229e9,0x3edde1a2,0x3ebe64ec,0x3e9bda6e,0x3e7945e1,0x3e300d32,0x3e0e9f66,0x3e32bde5,0x3e1b3139,0x3e35e813,0x3e968330,0x3e248103,0x3e1613e4,0x3e4c60b9,0x3e7b349b, -0x3ea6b0e0,0x3ef2b6cf,0x3f1fdeb8,0x3f8145a2,0x3fb7f921,0x3ff593bb,0x4018d173,0x4042e9ab,0x404051c3,0x40440ed3,0x404dcff7,0x4046a75a,0x4035501e,0x40171824,0x4000470d,0x3fd2dc5f,0x3fa62a3c,0x3f84a7f2,0x3f4f38b1,0x3f1e890f,0x3f0b4e8e,0x3efd2994,0x3ede8c5e,0x3ec2d470,0x3ea2c997, -0x3e8c259e,0x3e597b4d,0x3e2c03e0,0x3e270715,0x3e0af510,0x3e328e1f,0x3ede2639,0x3e468ee1,0x3e2b2a40,0x3e43d377,0x3e6e8b3a,0x3e9ca0cb,0x3ee03986,0x3f28cf27,0x3f6903b4,0x3fa2db49,0x3ffad701,0x40196068,0x40251bb1,0x4028095e,0x40230cce,0x401ac5b9,0x4004b480,0x3ff64886,0x3ff120cb, -0x3fcf4260,0x3fad9375,0x3f8d4ec5,0x3f5b51b3,0x3f333bb5,0x3f1991cf,0x3f0d9d61,0x3f054d4d,0x3ef98662,0x3ed1e7b4,0x3eb3b440,0x3e95a893,0x3e764228,0x3e4fc436,0x3e3889c5,0x3e3c9a38,0x3e4c165b,0x3e925c5e,0x3e564e44,0x3e542cfa,0x3e56bdfe,0x3e8c85c1,0x3eb17e65,0x3ee913fb,0x3f21d012, -0x3f7c0a7b,0x3f8f6a6a,0x3fbd3d7b,0x3fd8239c,0x3ff00159,0x40006621,0x3ffc2816,0x3fe5ea32,0x3fcf3340,0x3fb7dc39,0x3fa333de,0x3f8a9879,0x3f71885f,0x3f56fe51,0x3f42ae5d,0x3f321a6b,0x3f239a85,0x3f269bb6,0x3f243e19,0x3f044c79,0x3f05c8a7,0x3ed932ca,0x3eb93044,0x3e9bef7d,0x3e81b70b, -0x3e63d161,0x3e663786,0x3e716a60,0x3e693e1b,0x3e7852f5,0x3e793387,0x3e7343d5,0x3e91376f,0x3eb7e0be,0x3ef20658,0x3f2753ef,0x3f6139e2,0x3f829a4c,0x3f9877d5,0x3fabfa13,0x3fc77964,0x3fc254d6,0x3fc27310,0x3fc6a5f7,0x3fb7136f,0x3faa41a1,0x3f9e7520,0x3f93d950,0x3f89622f,0x3f7cd823, -0x3f715d43,0x3f682fa5,0x3f5f43f0,0x3f4b8ad6,0x3f3b2a1d,0x3f289759,0x3f196b11,0x3f052ad8,0x3ee8c797,0x3eca938d,0x3ec6a3d1,0x3ea49b5c,0x3eb27d3f,0x3e9cd9c1,0x3eb28c3b,0x3e97d83f,0x3eb907b3,0x3eaa9f7e,0x3edbe5a4,0x3f030b9d,0x3f260f2b,0x3f388f82,0x3f83f138,0x3f66c042,0x3f6794df, -0x3f735fe2,0x3f805b06,0x3f87f36e,0x3f90a701,0x3f9adee9,0x3f957843,0x3f928399,0x3f8ee6d0,0x3f8b5260,0x3f88a98d,0x3f868563,0x3f7f9567,0x3f71516a,0x3f64fd8d,0x3f585513,0x3f4b04c1,0x3f464f80,0x3f5f9691,0x3f222e4c,0x3f1e4eea,0x3f1407da,0x3f0940b4,0x3eff2bbd,0x3f02c6ab,0x3f094bb0, -0x3f05ba73,0x3f0ba72d,0x3f099078,0x3f027902,0x3f1204a2,0x3f1f9e44,0x3f2ceb06,0x3f3af9b2,0x3f4802c4,0x3f5630f7,0x3f42f06e,0x3f4cb6be,0x3f4e416a,0x3f53fc00,0x3f57ce63,0x3f5edbf9,0x3f5a3264,0x3f58706e,0x3f567961,0x3f54cece,0x3f53152d,0x3f526f6f,0x3f4d4b0c,0x3f495853,0x3f44ccae, -0x3f42360d,0x3f39495a,0x3f4ab1b7,0x3f41ef33,0x3f519612,0x3f901f38,0x3f31295f,0x3f414e48,0x3f7dd138,0x3f814463,0x3f7bbbb3,0x3f6bcdd9,0x3f7b5a5e,0x3f7fad13,0x3f77264e,0x3f42a650,0x3f36ec96,0x3f8d1c06,0x3f59bd9c,0x3f6d4476,0x3a027555,0x39d0c1bf,0x39b02e15,0x39cd5d27,0x39dab665, -0x39bad508,0x3a05197f,0x3a016d50,0x39b6451f,0x39c7c806,0x39a7657e,0x3964b203,0x395a0e0a,0x397fb326,0x39ca12d9,0x39d55726,0x39ec54c7,0x39f01fcb,0x39ff0206,0x3a0a2c72,0x3a19f93d,0x3a225b82,0x3a213ed8,0x3a28a2a8,0x39e9d8b8,0x39d3c61f,0x39c01195,0x3a01b437,0x3a0bf8c5,0x3a17f713, -0x3a025ace,0x39f34a60,0x39e4138e,0x39c8a08a,0x39d29b8e,0x3a3e1029,0x39ee1012,0x3a403f3a,0x39f087ac,0x39e9ef40,0x39cd5f21,0x3998a87a,0x3a2585eb,0x3a31780b,0x399fcf1d,0x39f7d320,0x39b97a16,0x39c453b9,0x39466c1d,0x396faa48,0x3a0d7a9f,0x3a106fca,0x3a380c2c,0x3a304b5e,0x3a4ecba2, -0x3a7bf441,0x3a9aec6c,0x3ab09d17,0x3aaf2ec1,0x3aa8eb26,0x3a4274e7,0x3a05b0fb,0x39d713b7,0x3a3ce21f,0x3a6dc9bd,0x3a8510f4,0x3a537588,0x3a1dffb4,0x39f6d0b9,0x39b27baa,0x3a014753,0x3ae669de,0x3a74c0d5,0x3a615f57,0x3a854124,0x3a3f0fe6,0x3a5858be,0x3a1bb79c,0x3ac1cb2c,0x3ab128df, -0x39864575,0x3a2f5ab5,0x3a03803a,0x3adaeb91,0x3a80e423,0x3a7a7456,0x3ac9a2f5,0x3a65a698,0x3a889d0a,0x3a64be58,0x3a97ca19,0x3ad1fed7,0x3b0e95f7,0x3b2cc7e4,0x3b37b822,0x3b351afb,0x3aadcd4b,0x3a2d50d7,0x3a1ac5fa,0x3aadea04,0x3ae2d5c2,0x3b0d2e73,0x3ac80008,0x3a90193f,0x3a3eafa7, -0x3a1b244b,0x3a2cb1f6,0x3b64c496,0x3a81f57f,0x3b18fa21,0x3ab0d4e8,0x3a76754b,0x3a1d920f,0x3aab444d,0x3b0af2e2,0x3b0a3e15,0x3a04489a,0x3a548d61,0x3ac4e6b5,0x3bc9dbdf,0x3ba2a617,0x3b8c938d,0x3b79c280,0x3b117244,0x3b0e7748,0x3ad25c77,0x3b0522d6,0x3b47c470,0x3b8a447c,0x3ba511b9, -0x3baa98aa,0x3bbe464b,0x3b5e6fd5,0x3af0f1ff,0x3a96f601,0x3b0cf1df,0x3b5d3d65,0x3b8647ee,0x3b3e76c5,0x3b1ac587,0x3a867edc,0x3afb3629,0x3aaf7d8a,0x3c14c3e3,0x3b7bdb76,0x3c8b7f7d,0x3b8e2459,0x3b2b541e,0x3bca4d14,0x3c987a46,0x3c0c0fcf,0x3ba23780,0x3b49c91a,0x3bd255ad,0x3b93fad7, -0x3bde30fd,0x3bcff236,0x3bb5df51,0x3b74b911,0x3acaea15,0x3ab04e09,0x3aa93535,0x3aa68b64,0x3ada2e0a,0x3b21b671,0x3b8ffa25,0x3ba8de1a,0x3bbf812d,0x3b5465a9,0x3b12f7ec,0x3ae60373,0x3a19754b,0x3a45789a,0x3b8c57c2,0x3b6b7e9b,0x3b94a304,0x3b8d88fe,0x3bbbd20a,0x3b30485b,0x3be87027, -0x3c4c9d7b,0x3ca47fc8,0x3cd503e2,0x3ba25f96,0x3b927cb9,0x3c81ce65,0x3c592d65,0x3bf3774d,0x3bd5954d,0x3b1900fb,0x3b303c0d,0x3b3f0ece,0x3af43f31,0x3acfd637,0x3ab44107,0x3ac43040,0x3ae5f0fe,0x3ac760c5,0x3aa261d4,0x3ab0dba3,0x3ad8b241,0x3ab4c156,0x3a9eb407,0x3ac19766,0x3adccc29, -0x3aa9e47e,0x3a731544,0x3acc6c20,0x3af1d7f7,0x3af51784,0x3a2192d3,0x3a486a62,0x3b2cb424,0x3bbe7b0d,0x3bb25ead,0x3be2fe11,0x3c7bbef4,0x3c242edd,0x3c3f8412,0x3be5949e,0x3bde4a13,0x3bb10db2,0x3be717fd,0x3b98aed7,0x3c24a722,0x3bd90ffd,0x3bb0748b,0x3b5219ff,0x3ac43945,0x3a93ff75, -0x3ad1cacc,0x3b127c75,0x3b110cd4,0x3abfbed8,0x3af58c2e,0x3add3129,0x3b46dc71,0x3a4071be,0x39eb6b1d,0x3a9ab814,0x3a4a7b3d,0x39ee920f,0x39fa052d,0x39bd509a,0x3918f04c,0x390de729,0x3a5182f6,0x3ab302f4,0x3accc9f9,0x3b112782,0x3b6bf877,0x3bb421c4,0x3beb6a28,0x3cacde3b,0x3cd43fce, -0x3d3cdda5,0x3d34dd2b,0x3ce208db,0x3c3ab59b,0x3bf76bb4,0x3c0691f7,0x3b923b76,0x3b7b8bb6,0x3b5ca3c4,0x3b170551,0x3b1065f7,0x3abcd47c,0x3abefff3,0x3ab69178,0x3ab0ada7,0x3ae13848,0x3ab88eb0,0x3ae6c9be,0x3a80da1c,0x3a863f84,0x3a8d3968,0x3a84c461,0x3a2deeb1,0x3a09038e,0x397d4667, -0x398f398d,0x3a007b3e,0x3a1b294c,0x3a5729bf,0x3b212b4e,0x3b05fc82,0x3b8d2c55,0x3c2f5bb4,0x3c87b4f0,0x3d297d16,0x3d65b8ad,0x3d46361b,0x3cfa8570,0x3c92349a,0x3c617dbb,0x3c8334ec,0x3c665681,0x3bf445d0,0x3b9b7a81,0x3b47cb45,0x3b23d242,0x3af400af,0x3ad305cb,0x3a9cbb72,0x3a8fd9eb, -0x3a979b07,0x3a8b3020,0x3a706d08,0x3a534d34,0x3a0be25d,0x39cf476a,0x3a3589ec,0x39a90d88,0x39c462e6,0x3a451e3b,0x39cecc79,0x39e617cc,0x3a3ad2f4,0x3ad5194e,0x3b61cb99,0x3bcf3691,0x3c8eaf54,0x3ccce5d6,0x3cd196bf,0x3d000c36,0x3ce34aa1,0x3cd35f83,0x3cc5846a,0x3ca4a5de,0x3ca5719b, -0x3cb6c2c4,0x3ca4da51,0x3c725ed9,0x3c0cf553,0x3c012252,0x3c09e700,0x3c2786c8,0x3c26453c,0x3bec37f5,0x3bd261a7,0x3ba9ad89,0x3b6d7343,0x3b3c7c04,0x3aef029c,0x3a2b8372,0x3a540832,0x3a2da028,0x3a16851c,0x3a1b30fe,0x3aa0cc98,0x3b2b6099,0x3b82f363,0x3bbca790,0x3be8c2df,0x3c30097f, -0x3c65b445,0x3c85eb50,0x3c7dfa76,0x3c7d4ed2,0x3c977a93,0x3cb4a030,0x3c63238e,0x3c7d5735,0x3c7b1e32,0x3c8875fa,0x3ca6c1f8,0x3c975ddd,0x3ca54c59,0x3cca0541,0x3c96f2d5,0x3c6d368c,0x3c5d0b57,0x3c36a273,0x3c164fc7,0x3bf841a6,0x3bc53b52,0x3ba004dd,0x3b82a6ec,0x3b393101,0x3afa5a3a, -0x3ac4dae5,0x3a9e602a,0x3a64eb21,0x3aa62e40,0x3ad3695e,0x3b238c5f,0x3b769cf3,0x3b9a8f2d,0x3bbc71df,0x3bfcc7a2,0x3c03dd0c,0x3c13732b,0x3c2cc33d,0x3c391790,0x3c512c54,0x3c6c32ec,0x3c652126,0x3c258276,0x3c24b98a,0x3c19b0ae,0x3c122639,0x3c0eab86,0x3c0ef4a3,0x3c10eae4,0x3c1a1821, -0x3c0a3609,0x3c080582,0x3bff49dc,0x3bf3357b,0x3be490eb,0x3bdfd4d8,0x3bb92967,0x3b99aaad,0x3b77a11f,0x3b486b37,0x3b194a5f,0x3ae2ece0,0x3b07ba2f,0x3b080695,0x3b1ce894,0x3b2d0994,0x3b55502a,0x3b7cc064,0x3b94848c,0x3babd921,0x3bc54cc0,0x3bdf9b60,0x3c0033eb,0x3c101a89,0x3c111ec6, -0x3c136ba2,0x3c153e04,0x3c19f7d1,0x3bf69c12,0x3bfa6719,0x3bf4fda1,0x3bf68994,0x3bf4a323,0x3bfbb322,0x3c00084e,0x3c03f4d7,0x3bfe74b4,0x3bf6df93,0x3bf226e4,0x3be7b165,0x3bdfa566,0x3bdb932b,0x3bcb3689,0x3bbf0857,0x3bb3db86,0x3ba56380,0x3b9bcf81,0x3b887d1d,0x3b983233,0x3ba051e9, -0x3bb08f1c,0x3ba83513,0x3bb19b5a,0x3bc0d65c,0x3bc6e945,0x3bcb6c7b,0x3bd275b7,0x3bdab4f3,0x3be3e244,0x3bf04c43,0x3beccf6f,0x3bede248,0x3bfbd02d,0x3bf67969,0x3c11be46,0x37c468e8,0x37792a2d,0x378997c3,0x37b45bc4,0x37e354ac,0x38428da1,0x37df600e,0x37a036ed,0x36fb89fb,0x37c29d46, -0x37ff4b28,0x382950a4,0x37f78500,0x380952ba,0x3854364c,0x385e70af,0x3852b17e,0x38214934,0x37bfbb4e,0x37934f23,0x378e0817,0x378f3dec,0x379a3721,0x37bd87d0,0x3803f9f0,0x37e3db8c,0x370c29e4,0x37967e13,0x3787a948,0x378d4fdd,0x373bcc72,0x36fb9ee9,0x37630264,0x3716b68f,0x375a85d4, -0x38024ed4,0x3785ecda,0x3796f9dc,0x37cb72f1,0x3891d63e,0x38e5c659,0x394a9307,0x38f9bbfb,0x389a21f9,0x377acce6,0x38433f07,0x3877079a,0x38f51dc3,0x386a279d,0x38f61e26,0x398e4014,0x39b04800,0x39a524b2,0x3955d081,0x38d5d9a7,0x388c41a0,0x3881ca6f,0x3848d2d0,0x3812143d,0x38425198, -0x38ba4249,0x38ab6b4e,0x37c1f916,0x3851ceb4,0x385a5790,0x38a6f5f2,0x389821ac,0x38713b73,0x3899fe2e,0x379c6473,0x375902b2,0x38c00ae6,0x37b8e615,0x3716cd9d,0x385b0132,0x38dd0ec2,0x396c3f35,0x39de275a,0x39b25f98,0x3964b177,0x38b47149,0x38e203ab,0x3941725f,0x39d4cfd0,0x395b870c, -0x398d26ab,0x3a2037a1,0x3a20a524,0x3a1119ce,0x39aeb2c6,0x38ffd01f,0x38b9a415,0x38ef1065,0x388cd065,0x3843a6dd,0x389ffe32,0x394ae3e2,0x391677c0,0x39375d3d,0x390f335d,0x39883550,0x3a2c8233,0x3a25a36b,0x39e2cb1e,0x39a36ad3,0x38867b10,0x37a5680e,0x39609fdd,0x3797fe9c,0x3903f588, -0x389587ac,0x39fdd585,0x3a61502a,0x3acd2dba,0x3a8fce77,0x3a3bd5cc,0x3986d0f8,0x393b2315,0x395c68ea,0x3a6c6357,0x397e3444,0x3a67d8d9,0x3b23bcad,0x3b427050,0x3b29ed8e,0x3adc2881,0x3a618bf8,0x3a36476f,0x3a3258d2,0x39d49efa,0x39394e43,0x39acab0f,0x39e415f0,0x399bdeae,0x3962bfdf, -0x395333d6,0x39651723,0x3a033293,0x3a88ff04,0x3a6e0446,0x3a55cb34,0x39eee4ed,0x39261bd7,0x3a4535ea,0x3956ace1,0x3ad6e9fd,0x3acb2517,0x3b51d56d,0x3b4c2738,0x3b30e5f2,0x3a8c09c9,0x39f0abd7,0x3a2cd23a,0x39b29201,0x3aa0d3bf,0x3b279cfd,0x3b11aaeb,0x3afa86ff,0x3b47282f,0x3b20b1c9, -0x3af47798,0x3aec8b9c,0x3afc17f5,0x3b17cb2e,0x3b0d032e,0x3ad9add7,0x3a90c563,0x3a684f96,0x39e4725d,0x3943c43f,0x3958baf5,0x39882890,0x39adc2a9,0x37fa4a95,0x38379217,0x39ee93d5,0x3a97693f,0x3a7a4419,0x3a606910,0x3a1b9d0d,0x3a868d00,0x3b0f4166,0x3a7875b4,0x3a7247d6,0x3a91e8d4, -0x3b1cca67,0x3b54f50e,0x3b5dc9a9,0x3a725981,0x3a0d0c7d,0x3a24bb6f,0x3b3fc2e4,0x3b0cb8d7,0x3b32e1a6,0x3b2256f0,0x3aa9a98a,0x3a98a3ec,0x3a5930ca,0x3a449118,0x39fcba7e,0x3a1da065,0x39686628,0x39027462,0x3894d598,0x387e2380,0x37b2cf44,0x38eb5d70,0x390ba593,0x394d6608,0x38c8a731, -0x3806454d,0x395d42d6,0x3a433b48,0x3b3b6c25,0x3b379432,0x3ad9e974,0x3a9434a9,0x3c3cd8ef,0x3caf8910,0x3bb2627a,0x3ad80898,0x3b7b6188,0x3b47da2d,0x3b4f97ff,0x3b807dff,0x3b472cd4,0x3b4e7f3d,0x3b12f084,0x3a45b0fd,0x3a9b16ed,0x3ac43607,0x3a8545d0,0x3a6ca2d4,0x3a2271eb,0x39c7d81c, -0x39519d0d,0x393d9cf9,0x38940a98,0x385ac61b,0x3910af85,0x39006a01,0x38a79e7f,0x38cc1a75,0x36bd9e2c,0x37e087e3,0x375705a0,0x3837b320,0x3915c15c,0x3991921b,0x3943e9f8,0x3964c01d,0x3a7b6328,0x3ba667aa,0x3bab4a47,0x3c33532e,0x3b804aae,0x3adf1cb0,0x3b0fbd8c,0x3b03edd3,0x3abd0b75, -0x3afbb5dc,0x3a78a769,0x3a90e611,0x3a34a71c,0x399642e3,0x3a05d321,0x3a2bf2df,0x3a09a4ab,0x39d2caff,0x39d18b18,0x39ab3af0,0x39cfd1f1,0x39d9dc11,0x39bdfac8,0x399b4e84,0x39662a26,0x383977c9,0x3642c435,0x375e6f6d,0x369cfde8,0x373ee454,0x379e1f37,0x36693371,0x36d768df,0x38f9c59d, -0x393953fa,0x397c7054,0x3b1623d4,0x3b925827,0x3b28a8fa,0x3b1b998f,0x3aceb9d1,0x3aa2dc0c,0x3a03f15d,0x399dcae2,0x3a32af44,0x3a56944d,0x3aa57f12,0x3ac9ea5a,0x3adb5213,0x3ab06423,0x3a7708b8,0x3a34eeb1,0x398723e0,0x38b51891,0x390dba2a,0x39a23096,0x3a070b42,0x3a35a7b0,0x3a46e331, -0x3a2bc0b8,0x3a0bf19a,0x3973938d,0x389be7d6,0x3731d2ce,0x3798b8a5,0x380e5c67,0x38203ffb,0x387ad670,0x387c59ea,0x38c75aaa,0x381f10d2,0x389d88b7,0x39c73267,0x3ae7a904,0x3a56c272,0x3a74ca60,0x3a8d737a,0x3a84aaf5,0x3a6d22e5,0x3a4834b8,0x3a55207d,0x3a7ff941,0x3a687b31,0x3a6e676e, -0x3a866c3f,0x3a73ad7d,0x3a4b4422,0x3a06c92b,0x39a1f21e,0x39043187,0x38543682,0x386f138e,0x38d76782,0x3952d23e,0x3974b64d,0x394623be,0x3904fcbc,0x390686e8,0x39040713,0x38fe468b,0x38adb0e0,0x390b068b,0x393f258d,0x398e31a8,0x39a872f8,0x39a82d90,0x39e1e770,0x3a0c992c,0x3a19f3f5, -0x3a2f3723,0x3a1e6ae5,0x3a21a121,0x3a09526d,0x39cfc268,0x398f52e8,0x39456b46,0x393cd3a1,0x395c19bb,0x393a7f28,0x392e17a8,0x39472ca8,0x38e2303d,0x38c14a3f,0x3908938d,0x38ec8e59,0x38f7f760,0x3915ef43,0x3910531c,0x39236514,0x3949c983,0x395fadfb,0x3985438c,0x39a0e55b,0x39800b7a, -0x3983bfd6,0x39b5708f,0x399c1f6b,0x39a347cd,0x39c2c935,0x39cc4f62,0x39e0da4f,0x3a0e15d9,0x3a13277d,0x3a30fe3c,0x3a4a8627,0x3a29a179,0x39de04bc,0x39d6db6c,0x39b89dc5,0x399efbb4,0x397d5a6a,0x394b0c90,0x3928e9cf,0x39330a57,0x392e0b87,0x39338e4f,0x39317295,0x3929e382,0x391f03b1, -0x392511a5,0x3925cb33,0x393279e8,0x3944f356,0x395f4d9a,0x397beb0b,0x398ec85d,0x398d5bb8,0x398ba3f5,0x39975021,0x39a8a67a,0x39c21080,0x39e2b982,0x39da1f33,0x39e05f7e,0x39ed9616,0x39f820f4,0x3a07e01e,0x3a155809,0x3a045cb9,0x39e8ccbd,0x39e28512,0x39ce8963,0x396c3367,0x39638ce5, -0x39558b4e,0x3944a988,0x393c7ffd,0x393366f5,0x392dd089,0x392546ba,0x39265be5,0x392711f3,0x392daacc,0x3933f75c,0x393d8144,0x3945ebde,0x394eec50,0x39562af0,0x395dd50a,0x39669ecd,0x39702011,0x398027ce,0x397f528c,0x398253cd,0x39858602,0x398666c7,0x3989d561,0x39983866,0x39935e72, -0x3993133f,0x398f2d4d,0x39904987,0x398e9653,0x3993e986,0x39843e89,0x397e1f4e,0x397f1c63,0x39785be3,0x39929ef1, -}; -const uint32_t defaultHRIR_rom_ER16[HRTF_MODEL_N_SECTIONS * 470] = { -0x3ec4941c,0x3eadb6c0,0x3eb76ef4,0x3ea07963,0x3e9de02c,0x3eb2cba1,0x3e9535bb,0x3e8fc3a6,0x3ea64bbc,0x3ea6f21d,0x3ea480fb,0x3ea14bd4,0x3ea6af82,0x3ea94f46,0x3ea70707,0x3e8c6c06,0x3e8d2f39,0x3eb4baca,0x3e937adb,0x3e92d356,0x3ea49ca2,0x3e9b78bd,0x3ea1e6c5,0x3ea4812f,0x3ea778e4, -0x3eab0f3d,0x3eaf6201,0x3eb3a7ed,0x3eb86856,0x3ebdc0f8,0x3ec27da0,0x3ec7447a,0x3ecf6724,0x3eca9e9e,0x3ec607d0,0x3ebcbf2e,0x3eb724e5,0x3ee9bd75,0x3ee24026,0x3ec77c94,0x3eac7b3f,0x3e937f48,0x3e8a4425,0x3e82c96d,0x3e70da98,0x3e6dd277,0x3e69ebbf,0x3e6b837e,0x3e6d14ff,0x3e6673dd, -0x3e5f35db,0x3e648104,0x3e706ed3,0x3e802611,0x3e869d75,0x3e99d663,0x3ea37b33,0x3eac1de6,0x3eb517ee,0x3ebf972f,0x3ec7aa4b,0x3ed34f65,0x3ee2297f,0x3ef00bac,0x3f005cd2,0x3f09fed9,0x3f140096,0x3f1ec13d,0x3f2bd837,0x3f26c94a,0x3f1ca0b1,0x3f0aca8e,0x3eff3f59,0x3f0dcef9,0x3efc1f18, -0x3ec2e60e,0x3e9c6586,0x3e727ed6,0x3e511376,0x3e2f58bc,0x3e1937c9,0x3e09c6b3,0x3e06e3c6,0x3e20e289,0x3e16016f,0x3e12d4e0,0x3e044521,0x3e12072d,0x3e1d1c2e,0x3e32ef69,0x3e49e6da,0x3e683536,0x3e84339d,0x3e9ea0ad,0x3eaced18,0x3ec57fa7,0x3ed6b377,0x3ef01142,0x3f077f9d,0x3f16c213, -0x3f295787,0x3f40d859,0x3f57f4e8,0x3f71da1c,0x3f89f27b,0x3f804225,0x3f6990be,0x3f41b0f3,0x3f243b1c,0x3f317f6f,0x3f12e453,0x3ed32777,0x3e8f9a76,0x3e433523,0x3e11e567,0x3dd99f43,0x3daae522,0x3d84cb0b,0x3d8d4f7f,0x3db3c317,0x3daa32c0,0x3d998368,0x3d81e179,0x3d984b93,0x3db12a61, -0x3de5a3b2,0x3e09dc9a,0x3e385298,0x3e59ed9c,0x3e8a9cbc,0x3e9d2f5c,0x3ebc2334,0x3ed2a3a1,0x3ef6a2d2,0x3f12fd09,0x3f2a2c81,0x3f49ea28,0x3f720008,0x3f909284,0x3faf1ec3,0x3fd6014e,0x3fc5c76a,0x3fa92567,0x3f84ab14,0x3f5021a5,0x3f94b90d,0x3f67e8bc,0x3f3f0301,0x3f0e9606,0x3eb4a496, -0x3e821972,0x3e3781dd,0x3e0ab67b,0x3dc368d3,0x3db034ee,0x3dc00e1a,0x3dc724f7,0x3dbe9c52,0x3d97f3d5,0x3d9bb613,0x3dba5b90,0x3e04e441,0x3e2d8fd2,0x3e681c6b,0x3e961f34,0x3edf6c95,0x3f0a6934,0x3f489e21,0x3f6cfbc9,0x3f9366f3,0x3fb3d280,0x3fd0d7f8,0x3fe85575,0x3ff0634b,0x400ac5a4, -0x400a3f45,0x4003703f,0x40016e46,0x3ff1a539,0x3fdae681,0x3fae8380,0x3fb10bad,0x3f858fd3,0x3f5c795b,0x3f2212c9,0x3eed0ebc,0x3e9f3a4a,0x3e613e46,0x3e49d73f,0x3e16c87b,0x3e0a893c,0x3e157f63,0x3dee0413,0x3dca2313,0x3da0864a,0x3db4ae41,0x3dd7c358,0x3e14ee68,0x3e4e7fcc,0x3e92785c, -0x3ecdc2ba,0x3f09f63a,0x3f1c1b35,0x3f3ec989,0x3f653459,0x3f8ce8ee,0x3fab874e,0x3fbddd72,0x3fd5b5e8,0x3fec7518,0x400af96e,0x401977ef,0x40205eb3,0x4023f8cf,0x401930b8,0x400c77a5,0x3fcf1a1a,0x3ff4bcaa,0x3fa68944,0x3f7559b1,0x3f21ac54,0x3eeee3bb,0x3ea77ac9,0x3e74d732,0x3e4b7c93, -0x3e16e8ea,0x3e2477d6,0x3e983b9d,0x3e3779de,0x3e1ad52b,0x3e3259e3,0x3e0df3cb,0x3e337f3b,0x3e7725e6,0x3e9be2a2,0x3ebf04d0,0x3edd04aa,0x3f028366,0x3f0e0fca,0x3f29a396,0x3f432e41,0x3f6f7303,0x3f94a531,0x3fbb2e69,0x3feae701,0x4010e928,0x402d62e7,0x404517b8,0x4050c701,0x4051692c, -0x4040cd0f,0x40317e37,0x400f8a6d,0x3ffc3af0,0x3fb2095e,0x3f823c96,0x3f260092,0x3ee73e3c,0x3e9c4960,0x3e6cb781,0x3e488069,0x3e2b1be5,0x3e4677a2,0x3edb2f1e,0x3e2d97a1,0x3e0dfeb1,0x3e287960,0x3e2c0a41,0x3e59cb26,0x3e8d4856,0x3ea3a1d1,0x3ec1b896,0x3edc5f6e,0x3efe6747,0x3f0afce0, -0x3f1eb551,0x3f4f180b,0x3f84b251,0x3fa621e7,0x3fd2e58e,0x40004a5e,0x40171686,0x4035521f,0x4046b005,0x404da90b,0x4044335a,0x40401cec,0x404343a0,0x401788e9,0x3ffa01d1,0x3fa4cfd3,0x3f7048b3,0x3f1aa1a2,0x3ee3e6a6,0x3eb51980,0x3e87b8e6,0x3e5ad607,0x3e59bcd3,0x3e56887e,0x3e9045b9, -0x3e4d8e17,0x3e3bbd02,0x3e37b12d,0x3e4cc196,0x3e797bdc,0x3e938f54,0x3eafd6e9,0x3ed7ae37,0x3ef6e093,0x3f05f93e,0x3f0d7a46,0x3f19925c,0x3f334291,0x3f5b4be8,0x3f8d49aa,0x3fad9676,0x3fcf4a71,0x3ff11d56,0x3ff646fc,0x4004bd76,0x401aad6f,0x40231fec,0x40280423,0x4025259f,0x40195e6c, -0x3fbba031,0x3f90aec6,0x3f6c902f,0x3f282dcd,0x3ef3d5b7,0x3ebd38ff,0x3e90c488,0x3e76c721,0x3e759b49,0x3e782407,0x3e624f3e,0x3e713179,0x3e66f307,0x3e63f565,0x3e81e454,0x3e9b8cee,0x3eb491b2,0x3ed9f6af,0x3f038553,0x3f07037c,0x3f21c7d8,0x3f2734ea,0x3f236c4f,0x3f32304d,0x3f429f31, -0x3f570e9e,0x3f717daf,0x3f8a99be,0x3fa3326c,0x3fb7dc54,0x3fcf335a,0x3fe5dff9,0x3ffc2fd2,0x400078bf,0x3fefc045,0x3fd8b899,0x3f990976,0x3f8231e1,0x3f6490ba,0x3f38cf51,0x3f22ebb5,0x3f0090ae,0x3edbcabf,0x3eaa4e32,0x3eb98847,0x3e97d428,0x3eb26f3d,0x3e9c48eb,0x3eb247f4,0x3ea3b1c8, -0x3ec60de8,0x3ecbf7e3,0x3eee0494,0x3f04602e,0x3f19f41a,0x3f27770d,0x3f3ba9c6,0x3f4b8daf,0x3f5f4062,0x3f6833b9,0x3f715b43,0x3f7cd1dc,0x3f89635d,0x3f93db84,0x3f9e73c7,0x3faa42c0,0x3fb71319,0x3fc6abd1,0x3fc26bf2,0x3fc24e2f,0x3fc786f5,0x3fabd365,0x3f673659,0x3f6848c9,0x3f81ce4b, -0x3f383eeb,0x3f2ce52c,0x3f1fa07a,0x3f11e47c,0x3f01fc1c,0x3f09a4f8,0x3f0c0f6b,0x3f055fe9,0x3f093b6c,0x3f02fdd7,0x3f0053c3,0x3f09b4eb,0x3f141aae,0x3f1ea0ee,0x3f221058,0x3f5efd9c,0x3f47b0be,0x3f4aecbd,0x3f5836d7,0x3f650a25,0x3f714a58,0x3f7f98b8,0x3f8686fd,0x3f88a935,0x3f8b5131, -0x3f8ee6f9,0x3f92833c,0x3f9577b3,0x3f9adc39,0x3f90ab60,0x3f87f296,0x3f805f26,0x3f7363e7,0x3f42fc73,0x3f55092d,0x3f48545a,0x3f590cb3,0x3f8b0291,0x3f37f31a,0x3f4280b7,0x3f77230e,0x3f7fa4f2,0x3f7b9029,0x3f6bdb46,0x3f7b9d90,0x3f81473a,0x3f7ddf02,0x3f4127d9,0x3f30d2e5,0x3f910d06, -0x3f51aa97,0x3f41cdeb,0x3f49bb80,0x3f3933ee,0x3f425396,0x3f44c691,0x3f495a64,0x3f4d4b08,0x3f526e57,0x3f5315aa,0x3f54cfa0,0x3f5679dd,0x3f5870b7,0x3f5a339c,0x3f5edd18,0x3f57cca1,0x3f53fda7,0x3f4e3880,0x3f4cc8c4,0x3f6d42f8,0x3a0275b6,0x39cd5682,0x39b07af0,0x39d0bcdc,0x39ee21a9, -0x3a3e6342,0x39d2abb8,0x39c876c9,0x39e3c197,0x39f2c880,0x3a022e1a,0x3a17bee3,0x3a0ba504,0x3a01aa8b,0x39c01f9a,0x39d406f4,0x39ea90b1,0x3a28ad8d,0x3a20d0a7,0x3a2238d4,0x3a1a028d,0x3a0a2c54,0x39fefec6,0x39f0201c,0x39ec57c3,0x39d55491,0x39ca335f,0x397ff08a,0x395a37a8,0x396490a5, -0x39a7840e,0x39c7e576,0x39b63213,0x3a014f31,0x3a050069,0x39bad6c7,0x39dacd98,0x39ea25fb,0x39ef478a,0x3a40966c,0x3a74b5ce,0x3ae59896,0x3a014ee4,0x39b281ec,0x39f72643,0x3a1e8a35,0x3a540d5e,0x3a8543fb,0x3a6ede32,0x3a3cbf4f,0x39d6d15e,0x3a05a400,0x3a41158d,0x3aa8c1bc,0x3aafcf2d, -0x3ab0bdb7,0x3a9adf6b,0x3a7bec35,0x3a4ed099,0x3a304c14,0x3a3804c4,0x3a10728b,0x3a0d2ccb,0x396fd2a2,0x3946abb4,0x39c5426e,0x39b956d4,0x39f781d4,0x399fed63,0x3a31d636,0x3a25d54a,0x3998bfcc,0x39ccfd90,0x3a3f07a6,0x3a85b384,0x3a6151d4,0x3a8175cf,0x3b662e67,0x3a2b1c49,0x3a1befb6, -0x3a3e96a0,0x3a8faa81,0x3ac76c96,0x3b0d1aba,0x3ae1b6fe,0x3aae6804,0x3a1b56ce,0x3a2c796b,0x3aafc186,0x3b352b8b,0x3b37403d,0x3b2cb5d0,0x3b0e9e34,0x3ad20629,0x3a97c7fe,0x3a64b1fd,0x3a88a5b2,0x3a659a58,0x3aca3622,0x3a7a0ad3,0x3a80a761,0x3ada3b2a,0x3a038a55,0x3a2fa5a3,0x39866b84, -0x3ab0bc16,0x3ac15ff3,0x3a1b9b2a,0x3a58d718,0x3a76646b,0x3aafdd1a,0x3b187a78,0x3b7dbba7,0x3c12f382,0x3ab11671,0x3af85534,0x3a86e95a,0x3b1aafee,0x3b3efb05,0x3b865621,0x3b5d0aed,0x3b0c90f5,0x3a95df32,0x3af531dd,0x3b592301,0x3bbf3c8b,0x3bab0f06,0x3ba53d0f,0x3b8a5164,0x3b47d9f9, -0x3b051551,0x3ad286d4,0x3b0e6c82,0x3b11943f,0x3b7858aa,0x3b8cf5fe,0x3ba324f4,0x3bc96ef3,0x3ac576a2,0x3a544ddb,0x3a034fc4,0x3b0ada38,0x3b0b7dbc,0x3aaac6be,0x3a1e4bca,0x3b2bc7a6,0x3b8ead8a,0x3c8be9fb,0x3c4b9f32,0x3be743e0,0x3b31c1fd,0x3bba4920,0x3b8d2737,0x3b94e10e,0x3b6a0b50, -0x3b8d04ee,0x3a443038,0x3a18a3db,0x3ae8df7e,0x3b12d45d,0x3b52b6f2,0x3bc13588,0x3ba95353,0x3b8fa912,0x3b2287ae,0x3adae0eb,0x3aa66609,0x3aa952c0,0x3ab03a2e,0x3acb531c,0x3b732d8a,0x3bb6a636,0x3bd0bb03,0x3bdec92a,0x3b9430f2,0x3bd13f3b,0x3b496b51,0x3ba2846d,0x3c0bfb1c,0x3c98a2be, -0x3bc9f7e7,0x3ba37850,0x3cd4835f,0x3ca5ebd3,0x3c7ae80c,0x3be3f1ba,0x3bb5ca2a,0x3bb7ab20,0x3b2fbd27,0x3a44d45d,0x3a20029e,0x3af67167,0x3af0ee78,0x3acca8e1,0x3a724373,0x3aaa6f5f,0x3adef476,0x3ac10a83,0x3a9d12cc,0x3ab7cf5e,0x3ad7fecc,0x3ab0aedd,0x3aa248a4,0x3ac7e7f3,0x3ae5bcaa, -0x3ac46c16,0x3ab3b33c,0x3ad05693,0x3af4c4ae,0x3b3f7171,0x3b30bf18,0x3b18956f,0x3bd3a9dd,0x3bf3e8fd,0x3c59a2a8,0x3c81a153,0x3b922b9b,0x3be75c41,0x3c402fee,0x3c25d88b,0x3be20cfc,0x3bb03b00,0x3b6f1969,0x3b0f2814,0x3ad0d728,0x3ab38b94,0x3a46de13,0x390cab2b,0x3918d614,0x39be5c89, -0x39fb4944,0x39f089ed,0x3a4e9736,0x3a98ea2e,0x39e19d04,0x3a438ff8,0x3b46a5f2,0x3adc15be,0x3af5cf3e,0x3abff3de,0x3b1119cc,0x3b1282cb,0x3ad1891b,0x3a943cba,0x3ac49b07,0x3b51efe1,0x3bb080e2,0x3bd933a3,0x3c23ba35,0x3b992965,0x3be7ee57,0x3bb10098,0x3bdd810e,0x3d3f9cfa,0x3cce2716, -0x3cb23084,0x3c8ce20c,0x3c2ca9f4,0x3b8b016f,0x3b0a8cae,0x3b184891,0x3a5534c7,0x3a2080ff,0x39f53c0d,0x398e69ee,0x397caa09,0x3a0d785a,0x3a2d5d95,0x3a862dc2,0x3a8cd31c,0x3a86265a,0x3a832a2e,0x3ae67cf8,0x3ab7be04,0x3ae15cac,0x3ab0e24c,0x3ab68832,0x3abf169f,0x3abc5c2b,0x3b10ad4b, -0x3b172690,0x3b5cc036,0x3b7b98da,0x3b924109,0x3c061fe4,0x3bf784e2,0x3c3a25c8,0x3ce3161b,0x3d3342fc,0x3d45aab5,0x3d6567ea,0x3d2c3551,0x3d049afd,0x3ccd44f2,0x3ccf4580,0x3c8d6a61,0x3bcd246d,0x3b5fa0c3,0x3ad28efa,0x3a3e5f72,0x39e46a97,0x39cbfa33,0x3a4cfa55,0x39c72bef,0x39a9c0f1, -0x3a385b94,0x39d1c025,0x3a124d12,0x3a5487dd,0x3a6e46a4,0x3a8b611e,0x3a981a2f,0x3a8fb5b7,0x3a9ccdf5,0x3ad26a2a,0x3af430bb,0x3b23eeea,0x3b47e792,0x3b9b697c,0x3bf48b20,0x3c6561bf,0x3c83a223,0x3c61b72e,0x3c9227a1,0x3cfaa3a4,0x3cc5c34a,0x3cd25256,0x3cdaf0b0,0x3cb529cb,0x3c9aef2e, -0x3c828270,0x3c7be01d,0x3c88a6ce,0x3c630f36,0x3c300839,0x3be8b02c,0x3bbca24b,0x3b82b1c4,0x3b2c144f,0x3aa153bb,0x3a1a4d5b,0x3a1787da,0x3a2f8a7d,0x3a53dd2b,0x3a2c689d,0x3aee1f09,0x3b3c8a5b,0x3b6d7746,0x3ba9ae76,0x3bd26860,0x3bec0c2e,0x3c2666b5,0x3c27b384,0x3c09c897,0x3c012c46, -0x3c0d12ad,0x3c71a146,0x3ca52b4c,0x3cb702f4,0x3ca56e20,0x3ca47d37,0x3c7ab705,0x3c7f06c3,0x3c679276,0x3c61f2ef,0x3c66adc5,0x3c4d2bc3,0x3c392f8e,0x3c2b4384,0x3c14012e,0x3c04755a,0x3bfc810e,0x3bbcaa77,0x3b9aaeec,0x3b769272,0x3b23ac5a,0x3ad38cd2,0x3aa80843,0x3a62abb4,0x3a9d60cb, -0x3ac54a35,0x3afa1aa7,0x3b3936af,0x3b82a03b,0x3ba005c5,0x3bc53b53,0x3bf83105,0x3c165e50,0x3c36b311,0x3c5d0b3b,0x3c6d2df0,0x3c96f32b,0x3cc9f5b8,0x3ca53d41,0x3c9755c6,0x3ca6bc40,0x3c888922,0x3c19d172,0x3c240050,0x3c237704,0x3c195609,0x3c15dc89,0x3c1453b0,0x3c118b25,0x3c106b79, -0x3c004117,0x3bdf7660,0x3bc55683,0x3babd123,0x3b947988,0x3b7c9f56,0x3b5556c8,0x3b2cfcc8,0x3b1c9244,0x3b089a0e,0x3b08236c,0x3ae25616,0x3b1958bf,0x3b487999,0x3b7795e4,0x3b99abe7,0x3bb9283d,0x3bdfcf9d,0x3be48551,0x3bf32e5f,0x3bff3adf,0x3c0808f9,0x3c0a399d,0x3c1a258f,0x3c10f1a7, -0x3c0ef9f0,0x3c0eabbd,0x3c121e72,0x3bf4f394,0x3bfacfbd,0x3bf7dcc4,0x3bf73533,0x3bfb4908,0x3bedc9b3,0x3bec7cfb,0x3bf01ee4,0x3be3ce1d,0x3bdab7fe,0x3bd26f09,0x3bcb69cb,0x3bc6eb5e,0x3bc0d76f,0x3bb19828,0x3ba83b6a,0x3bb07dfa,0x3ba02f9b,0x3b981473,0x3b8882e3,0x3b9bd09d,0x3ba55f30, -0x3bb3dc79,0x3bbf08b8,0x3bcb3780,0x3bdb9666,0x3bdfaa15,0x3be7b62c,0x3bf22d75,0x3bf6def3,0x3bfe6f32,0x3c03efe6,0x3c0005c9,0x3bfbb17c,0x3bf4a5fc,0x3bf68aaa,0x3c11bd12,0x37c46a06,0x37b413e2,0x37899257,0x377918f2,0x3785bc48,0x38023cbb,0x375a6b6d,0x3716669c,0x375fb641,0x36fdd6c0, -0x373b3e50,0x378cec31,0x3787f1e7,0x3796786e,0x370b6fb2,0x37e3d614,0x38049241,0x37be30ac,0x37994c1e,0x378ebaad,0x378e1323,0x37935cef,0x37bf7d77,0x38212a8f,0x3852b690,0x385e74c8,0x38546f5b,0x38099105,0x37f7cbc7,0x3828fc4e,0x37ff973c,0x37c2a930,0x36fb0ff0,0x379fed9a,0x37df3905, -0x38428bdf,0x37e35200,0x3891f2d3,0x37cc25d1,0x3796cd9e,0x37b8f747,0x38bff1c6,0x3759d808,0x379bb5f8,0x389b2949,0x386e75a7,0x3898ca18,0x38a78be3,0x385af2bd,0x3851d42d,0x37c2cbce,0x38aba4ef,0x38b90eae,0x3840ba5d,0x38159c77,0x3849a028,0x3881dd72,0x388c23cb,0x38d62b47,0x3955ff23, -0x39a52109,0x39b04403,0x398e0c3b,0x38f5a4ef,0x3869bb16,0x38f62158,0x38768647,0x3842f8b8,0x377a346e,0x389a8158,0x38f9febe,0x394aa33f,0x38e58626,0x38dcfe50,0x385b115a,0x37179890,0x37980323,0x396190d3,0x37a6c535,0x3886af0f,0x39a2e271,0x39e3e7a2,0x3a254bf9,0x3a2c965d,0x3987b9ca, -0x390f4396,0x393717a8,0x39164dec,0x394ae6af,0x38a27a71,0x383e08fe,0x388cd848,0x38ee443e,0x38ba29e9,0x38ff2e94,0x39ae7bc1,0x3a111bf5,0x3a20a6dc,0x3a208764,0x398d5e4e,0x395bce1b,0x39d41b9e,0x3941baf3,0x38e2c3f0,0x38b5c9a0,0x39641b01,0x39b21823,0x39de1606,0x396c7176,0x39fbdba4, -0x389af8a7,0x3902870d,0x39577246,0x3a430991,0x392544ac,0x39efb1bf,0x3a5699c3,0x3a6f44bf,0x3a87fae1,0x3a026fd6,0x39652654,0x39524698,0x3966ff9d,0x399b693b,0x39e32cfe,0x39ab656d,0x3940b8f1,0x39d3cc7b,0x3a336101,0x3a35b310,0x3a61ebe6,0x3adc6f4b,0x3b29e87b,0x3b427757,0x3b2340d4, -0x3a67c3e2,0x397dabdf,0x3a6c4892,0x395d2292,0x393a5d52,0x3985b1dc,0x3a3c32fb,0x3a9018a4,0x3acd2fa7,0x3a61580b,0x3b51439f,0x3acb9fb8,0x3ad70cd3,0x3a8675f9,0x3a1dc301,0x3a5ffc49,0x3a795e4a,0x3a97abf3,0x39eea77f,0x3834fdf0,0x37f47c3c,0x39ad45f1,0x39861361,0x395cab69,0x39442b47, -0x39e42af5,0x3a67fbeb,0x3a90ad6f,0x3ada6ae8,0x3b0ca817,0x3b1814a4,0x3afb650e,0x3aed6f07,0x3af43469,0x3b20e982,0x3b45f21f,0x3afb6cbf,0x3b123457,0x3b27d741,0x3aa0d5f7,0x39b301e8,0x3a2b4f5c,0x39f16672,0x3a8c2bdf,0x3b30f4ba,0x3b4bf248,0x3a72f26e,0x3a7591b6,0x3b10f00a,0x3a92589f, -0x3ad578db,0x3b39afc9,0x3b38b60c,0x3a45e036,0x3958ab27,0x380588b0,0x38cadbd8,0x394d64b2,0x390a0e43,0x38e96d94,0x37b300c8,0x38707599,0x3898022c,0x38fa24bd,0x39750110,0x3a1d25e9,0x39fbc2f6,0x3a44b968,0x3a5962dc,0x3a98b6c6,0x3aa9cdb5,0x3b21515e,0x3b338f8c,0x3b0d2b95,0x3b3fb0da, -0x3a24cb5d,0x3a0d2f1c,0x3a70dde6,0x3b5e9fc2,0x3b55d7e5,0x3b1c9e55,0x3a924196,0x3bb313dc,0x3caf395f,0x3c3ce497,0x3ba540bd,0x3a789959,0x39638081,0x3943417c,0x399291c0,0x39172aa8,0x3835d7ce,0x375c01dc,0x37de4f9d,0x36c46d0e,0x38ce73b5,0x38a6cb88,0x38fdc3e5,0x390ecdaf,0x385c33fd, -0x38947963,0x393d1292,0x3951430e,0x39c7e31c,0x3a229736,0x3a6c915c,0x3a856877,0x3ac32c73,0x3a9bb3d2,0x3a467148,0x3b12915d,0x3b4f73fe,0x3b46bf35,0x3b7f4275,0x3b501f9f,0x3b47d64a,0x3b7b7587,0x3ad7199f,0x3b818067,0x3c328d3d,0x3bab6607,0x3b91a438,0x3b15db9e,0x397cd815,0x393a622f, -0x390126e1,0x36d7c6d6,0x3670bac7,0x37a2a80f,0x3740da9e,0x369d0559,0x37651b47,0x364afcb5,0x3835c839,0x39623923,0x399bdfcc,0x39c193dd,0x39d9b23e,0x39d02630,0x39aac7ba,0x39d2512b,0x39d2964d,0x3a09b3f6,0x3a2b663a,0x3a060688,0x39964ae7,0x3a34a799,0x3a91007c,0x3a7917aa,0x3af9ab36, -0x3abdc2ad,0x3b04233b,0x3b0fca5d,0x3addfd61,0x3acdf600,0x3b1afd16,0x3b2929ae,0x3ae646a6,0x39cb5a7a,0x389dafd2,0x3819d063,0x38c0b8e3,0x38820748,0x38774511,0x38215cca,0x380d423e,0x379a4a94,0x372e0c23,0x38a06ab4,0x3974da47,0x3a092688,0x3a2ecad8,0x3a46f04c,0x3a35df3b,0x3a06b1be, -0x39a24ad2,0x390de179,0x38b523bc,0x39875c0b,0x3a346613,0x3a774c78,0x3ab06358,0x3adb58f9,0x3ac9fc35,0x3aa593ed,0x3a564f24,0x3a333833,0x399e1b6a,0x3a042d18,0x3aa2adc3,0x3a8cf949,0x3a759eaa,0x3a53ea4e,0x3a2e54bb,0x3a1b6246,0x3a0e3672,0x39e1eac5,0x39a92d09,0x39a7b804,0x398f4686, -0x393dced8,0x390cf1e3,0x38a995e6,0x38fe8764,0x390411e0,0x3904b83e,0x390155bf,0x394909ae,0x3971f7a2,0x39507a2f,0x38d96306,0x386d97ab,0x3854f1ca,0x39043bad,0x39a1f947,0x3a06b61c,0x3a4b59dc,0x3a73db89,0x3a865696,0x3a6e9451,0x3a687c0f,0x3a7f8744,0x3a554cbf,0x3a482a8c,0x3a6d1ed6, -0x3a84b967,0x3a08eb1e,0x3a22a7b6,0x3a1ea291,0x3a25c88e,0x3a47bd6f,0x3a2fa15a,0x3a136da9,0x3a0d4cd4,0x39e194c8,0x39cd33b0,0x39c2b2d2,0x39a3bbe8,0x399c100d,0x39b5ed9b,0x3983eb6b,0x398082c7,0x39a1a69c,0x39851918,0x395f63d1,0x3949d9fa,0x392357b0,0x391054b4,0x3915d0f8,0x38f7f796, -0x38ec8da5,0x390898d7,0x38c1241a,0x38e2270f,0x3947013d,0x392e1b9a,0x393a85d2,0x395c0437,0x393cda41,0x3945621d,0x398f56bd,0x39cfba07,0x39b863b2,0x39d7a464,0x39df303a,0x39cdad6e,0x39e06d96,0x39e74c36,0x3a043732,0x3a152f6f,0x3a07d87e,0x39f84319,0x39ed84b8,0x39e05140,0x39da2f9b, -0x39e24fcc,0x39c1d6a6,0x39a83e07,0x3996a679,0x398b8371,0x398d3c2a,0x398ea37f,0x397bf81b,0x395f515c,0x39450013,0x39327ccd,0x3925c7f7,0x3925142f,0x391efb66,0x3929deb3,0x39316244,0x39338420,0x392e0a97,0x39332ab1,0x3928e28c,0x394af7d1,0x397d6541,0x399ef918,0x39558eb7,0x396379fe, -0x396c4c3c,0x397920b2,0x39802e0c,0x397ed4aa,0x398463b9,0x3993fc95,0x398e9ec8,0x39903fbf,0x398f3192,0x399314d8,0x39936179,0x3998529c,0x3989ef72,0x398693a3,0x3985cc4a,0x39826868,0x397f4ea8,0x39802805,0x39701d8b,0x39669ce2,0x395dd18c,0x395629c0,0x394eee88,0x3945ee30,0x393d83cf, -0x3933fa02,0x392db0b4,0x39271386,0x39265737,0x39253cfa,0x392dce3c,0x39336a79,0x393c7fe4,0x3944b0c9,0x39929d53, -}; -const uint32_t defaultHRIR_rom_ITD_W[658] = { -0xb58b2818,0x3bdea435,0xbef12e52,0xbdeb5ab7,0x3dab4e66,0x3f042e6d,0xbf409841,0xbe91c05f,0xbd4540cb,0x3ee4982c,0xbe4f34d7,0xbf3c944d,0xbf5f4288,0xbe93aac2,0xbe41b919,0xbf30a7bb,0xbf8323e1,0x3ebe1f75,0xbebaee5e,0xbe7b161f,0xbf02cc15,0x3b313b38,0x3f0434ee,0x3e8240b5,0x3ec41384, -0xbebd76c6,0x3f817fba,0x3f2f49e6,0x3e3d1acf,0x3e95178f,0x3f5ba8c7,0x3f366b13,0x3e4c380a,0xbed1f70f,0x3da000be,0x3e8ed0a6,0x3f3c34bd,0xbf08b389,0xbd9e0cca,0x3e05095b,0x3ef1ac80,0x3da7646f,0xbcd0576f,0x3e83e76e,0x3f870465,0xbf1894ad,0xbf475073,0xbff88503,0xc0368ecb,0xc03cf196, -0xc072281a,0xc0177033,0xbfe11f51,0xbfa3dc3f,0xc01c4557,0xc036030a,0xc0057814,0xbfb60610,0xbef03ace,0x3e105793,0x3fa28542,0x3e9390c2,0xbba00d1b,0xbe99f207,0xbfa3a0da,0xbe329ba0,0x3eef141d,0x3fb9604c,0x40058f0e,0x4036eac0,0x401b7835,0x3fa743f6,0x3fe5dc68,0x401807dc,0x406e3515, -0x40399f8f,0x4037b7c7,0x3ffabd23,0x3f51dc1c,0x3f11a8f6,0xbf868061,0xbea0be67,0x3e09ea72,0x3cb8fdf8,0x3d41b101,0xbfb65ff8,0xc03bf299,0xc073eb6a,0xc09e3e70,0xc0c35434,0xc10268f5,0xc0f009f8,0xc118ddc8,0xc11dbb79,0xc12f3e4a,0xc10f9075,0xc10e9eca,0xc0d71c87,0xc0c2d2c4,0xc09c2687, -0xc0576d3e,0xc0055163,0x3e82debc,0x3badfac7,0xbe6eaf52,0x40053d26,0x405a59a1,0x409c4343,0x40c19a0e,0x40d7610f,0x410e34f6,0x410ff7f9,0x412ea206,0x411d1d19,0x4118a0f1,0x40f2541a,0x41037e4c,0x40c22d26,0x409e4443,0x406f3393,0x40402602,0x3faf849f,0x3d8b554d,0xbe2c2ebf,0x3d948941, -0x3d2231a9,0xbf6e5daa,0xc0336e2e,0xc0a8eb01,0xc0fc02f9,0xc123b49c,0xc1402f1e,0xc1584796,0xc15dae2a,0xc158ed3f,0xc149806f,0xc13ee4d9,0xc14acf5b,0xc1201682,0xc0f44e3f,0xc0b1b00b,0xc0115e20,0xbf4ec420,0x3e806a7f,0xbba98019,0xbea22a89,0x3f5828ad,0x400b10a9,0x40b15dfc,0x40f70caf, -0x411f85c0,0x414bc624,0x413ddd2b,0x414ad6e9,0x4159d274,0x415e32eb,0x41565a70,0x413e20ab,0x4125001d,0x40fb332d,0x40ad4c24,0x402d2626,0x3f6e2f39,0x3d22a1eb,0xbf0868cd,0x3e484687,0xbebe35a1,0xc06a13bd,0xc0d1fb34,0xc116a96b,0xc13b9278,0xc16a85d2,0xc18a84f9,0xc194d83a,0xc1a6d552, -0xc1c7a9f8,0xc1bec1da,0xc1affb6c,0xc18bd4cb,0xc17b5d4b,0xc1594c14,0xc11b7ad0,0xc0ead5ac,0xc051caf1,0xbefed7d9,0xbc244ad5,0x3f3f4031,0x4043f176,0x40f41469,0x411c273a,0x415524f7,0x417d97f6,0x418a8f88,0x41b18d8e,0x41bccb0a,0x41c6e201,0x41a66b18,0x419649f6,0x418d6aba,0x4165f40e, -0x413f593f,0x410e8ffc,0x40e376c9,0x40423d2f,0x3f93fd14,0xbefadb88,0x3dcb74bb,0xbec4bafe,0xc0491930,0xc0bc64c1,0xc106cd5e,0xc13c55d7,0xc16ec205,0xc187c9a9,0xc199add6,0xc1aa80fe,0xc1c2e324,0xc1c28229,0xc1b6c418,0xc18fbdd3,0xc182cf78,0xc150c967,0xc11cbea1,0xc0c60d2f,0xc058d77d, -0xbdc696c7,0xbd4c91cf,0x3eedfc3c,0x4031efb9,0x40cd1379,0x4120a93a,0x414cc239,0x4182992c,0x4192e331,0x41b58a74,0x41c31486,0x41c4d3b1,0x41a850fe,0x419ac62d,0x4184c65a,0x4174490f,0x413cbea7,0x410dcc8e,0x40b67855,0x403c05d2,0x3f7658b4,0xbf12b170,0x3e4d00d6,0xbec4afc0,0xc06b2ece, -0xc0db7ea0,0xc1366ced,0xc16883c8,0xc19132b1,0xc1a9c0c3,0xc1bcd9d1,0xc1cda911,0xc1ead274,0xc1ddb75c,0xc1cb6e86,0xc19d6762,0xc19531ac,0xc16f7c4a,0xc13eab02,0xc0f1f9e0,0xc06610ae,0xbede93fc,0x3c7f6440,0x3ee43583,0x407af194,0x40e9b99a,0x413e780f,0x4176828b,0x41930777,0x419c4ac4, -0x41cd0134,0x41dd1356,0x41ea55b3,0x41d18157,0x41bb5d6b,0x41ada31f,0x418cbf5a,0x416f064f,0x412d45a3,0x40f0a04b,0x404c67aa,0x3f408590,0xbec391cb,0x3e8888bc,0xbf1a79c5,0xc05ebdb7,0xc0f607be,0xc1376ab7,0xc17a861c,0xc19a2949,0xc1ac49c4,0xc1ca1345,0xc1e389da,0xc202fc1c,0xc1f2d133, -0xc1da81c3,0xc1a937de,0xc19a64bc,0xc181e5bd,0xc13f25b2,0xc0f058b5,0xc060eabd,0xbf2b5a81,0xba97a4f2,0x3f44d227,0x4055392b,0x40f773bc,0x413f88c9,0x417eb54b,0x419eae8b,0x41a6cda5,0x41da352c,0x41f44fef,0x42021d12,0x41e2bc75,0x41c772b8,0x41ac3195,0x4198b8e9,0x417e4a9c,0x41361918, -0x40efad91,0x405dd351,0x3f4fa137,0xbefadd76,0x3e303dab,0xbeff1d70,0xc03e6e76,0xc0e27315,0xc1311d28,0xc17deb9b,0xc192720f,0xc1b2f6f4,0xc1ceaf1d,0xc1f0fd0c,0xc207f214,0xc1f6eec5,0xc1e1a91c,0xc1abfec2,0xc1a44555,0xc1823b56,0xc14a7926,0xc0e25e7e,0xc05ac922,0xbd53612f,0x3c2063f0, -0x3e114bae,0x406ce829,0x40da5dbe,0x414b1b36,0x41815591,0x41a0fd1c,0x41add2b7,0x41dff175,0x41f72558,0x42095887,0x41ed60fe,0x41d4ce6e,0x41adef88,0x4193a66a,0x41796b04,0x412fda46,0x40f0593d,0x40326178,0x3f7ca8fa,0xbf0506d6,0x3e5225ca,0xbefe77da,0xc04bdfe8,0xc0e0684d,0xc12401df, -0xc16567c4,0xc194598d,0xc1a6f4b2,0xc1c6b039,0xc1da7a34,0xc1fee55c,0xc1dda00b,0xc1c98614,0xc1ac4d3e,0xc19b50f8,0xc17b2795,0xc13946e7,0xc0ec60db,0xc02fd19e,0xbf4c5a0b,0x3c86e034,0x3f4506d7,0x4021303e,0x40ea933b,0x413ae8c1,0x417beacd,0x419e0996,0x41aacc01,0x41ce87c1,0x41da0f56, -0x41fe759f,0x41dd0d97,0x41c3e8b2,0x41ae3f9f,0x418fa3ac,0x416c6c0e,0x41234cb3,0x40d84ed7,0x402e6c9a,0x3f99953b,0xbf2db5c2,0x3e17f13b,0xbf103fd9,0xc032008a,0xc0b468e4,0xc124c695,0xc14c9e19,0xc18465dd,0xc1a47806,0xc1b65293,0xc1cc1f4f,0xc1d2578c,0xc1cc171a,0xc1bd3051,0xc1a4d02f, -0xc18cd9aa,0xc15e907c,0xc127a8e9,0xc0ba5e7f,0xc00619d9,0xbe95b48e,0xbd76d1d9,0x3f4c2ee9,0x40097cd0,0x40c30eef,0x4123bd6c,0x41608b2f,0x418cb178,0x41a84a69,0x41b7e3c8,0x41d0292d,0x41d0a163,0x41ca86d6,0x41ba7cb3,0x419e40f7,0x4185c880,0x414b4303,0x411b404e,0x40c8c7b8,0x403be377, -0x3f1e4cc8,0xbe656d64,0x3e72b440,0xbf498fe9,0xbfc563a2,0xc0a0aea5,0xc0f19ec6,0xc1328cb9,0xc1662568,0xc1814e66,0xc1936ff3,0xc19dd5da,0xc1a9041a,0xc19db580,0xc19591c4,0xc182adae,0xc1690c64,0xc136b991,0xc109ab08,0xc08bbbb9,0xbfdeeee1,0xbeb0938a,0x3db07eb9,0xbe9599ba,0x3fe00334, -0x4092181a,0x4102c698,0x41362901,0x4169e62a,0x417fdcdf,0x4198b33f,0x419b4fbe,0x41aa4978,0x419e1480,0x41908af3,0x418646ff,0x4160a358,0x413a7e76,0x40fd5ee2,0x40a726de,0x3fa54a05,0x3f080a3f,0xbe884f05,0x3db5c83b,0x3ddc1bda,0xbffb2bd5,0xc06a1ed8,0xc0c79899,0xc102accb,0xc1260d18, -0xc148b4a3,0xc15994e2,0xc1655362,0xc178e08b,0xc16ab2d9,0xc1575d67,0xc154f16e,0xc1285272,0xc10ab3de,0xc0c76b66,0xc07386d5,0xbfcc78a1,0x3e2350e6,0xbc2c411e,0x3d8c9b9a,0x3fd193a9,0x406e8c02,0x40cce933,0x410af747,0x412834e2,0x41571b62,0x4154b953,0x416caa7a,0x4177b6da,0x416547bc, -0x415ae1f3,0x4145145d,0x41277121,0x40ffc8b4,0x40c02b58,0x406ab1ee,0x3ff80d26,0x3e8e90b7,0xbf1672ce,0x3b560fa6,0x3da4d277,0xbf600a9c,0xc017f206,0xc050626a,0xc09815f0,0xc0c02960,0xc0fb401c,0xc0ee243d,0xc1140ffc,0xc10acac2,0xc11b2f18,0xc1012a32,0xc1084e02,0xc0cce087,0xc0b04131, -0xc08d10aa,0xc01e66a0,0xbfcca653,0x3ea47efb,0xbb2a6bf3,0xbedb3309,0x3fc88c0b,0x4020946f,0x408a5261,0x40afdbce,0x40ccb7fb,0x410753ad,0x41026313,0x411a5387,0x410b521e,0x411416a5,0x40ed5519,0x40fec8fb,0x40bf36e4,0x409b36b0,0x40581198,0x4019e4b3,0x3f4945b6,0xbdb16dfe,0xbe18f38a, -0xbc3f4b47,0x3e31e305,0x3f223f24,0xbf908181,0xbf9f9ba9,0xc0082545,0xc03d210a,0xc04c4486,0xc0767961,0xc02a5b92,0xc0318818,0xc0195e4b,0xc04ea657,0xc04d4c8b,0xc018c8be,0xbff32a7c,0xbf70b388,0xbf1b7a6a,0x3f569f48,0x3e586f06,0x3be4cbbc,0xbe0b9c3b,0xbf4f4eee,0x3f171168,0x3f803a93, -0x3ff51d26,0x40197f17,0x404fa9f2,0x404bb200,0x401b31bf,0x40304f4d,0x402a4aff,0x4076deb1,0x40477666,0x403d5b3e,0x40036b64,0x3f91a31f,0x3f8e43da,0xbf12aa6e,0xbe243012,0x3e1f1af8,0x3b474372,0xbeb76881,0x3dd787d4,0x3ee10b6c,0x3f4dd46f,0xbf1fb182,0xbe50f566,0x3da88563,0x3f0178e5, -0x3c678a1c,0xbdeb0ba5,0xbe2218a5,0x3e58dcde,0x3d71aaa0,0xbef80fb9,0xbf3d07e1,0x3f3485be,0x3db783c0,0x3c142933,0xbed36b04,0xbb9f1f49,0x3ebfdc23,0xbcc7652e,0xbdb4e6cd,0xbf3be092,0x3f399c4e,0x3ef2eb6a,0xbd93a618,0xbe480d88,0x3e1bd187,0x3df79a5d,0xbc53f8d6,0xbf002186,0xbd41bc42, -0x3e5c0f28,0x3f2ad402,0xbf3cc2c3,0xbedc59d1,0xbe021816,0x3ea43429,0x3d349309,0xbab986b3, - }; -const uint32_t defaultHRIR_rom_ITD_azimBsShape[84] = { -0x3f800000,0x3f3a9fbe,0x3f03126f,0x3eaf9db2,0x3e5d2f1b,0x3e000000,0x3d83126f,0x3cdd2f1b,0x3c03126f,0x3a83126f,0xa5800000,0x00000000,0x3e8374bc,0x3ede353f,0x3f0ad0e5,0x3f178d50,0x3f180000,0x3f0ed917,0x3efd9168,0x3ed4fdf4,0x3ea95810,0x3e800000,0x3e3a9fbe,0x3e03126f,0x3daf9db2, -0x3d5d2f1b,0x3d000000,0x3c83126f,0x3bdd2f1b,0x3b03126f,0x3983126f,0xa6000000,0x00000000,0x3c66bdc8,0x3d57b901,0x3de1cac1,0x3e39af72,0x3e855555,0x3eaf1aa0,0x3ed756b3,0x3efb38a9,0x3f0bf7cf,0x3f155555,0x3f18aec3,0x3f16872b,0x3f0fc3ed,0x3f054a69,0x3ef00000,0x3ed19423,0x3eb11bfd, -0x3e90624e,0x3e6263ab,0x3e2aaaab,0x3df8d4fe,0x3daec33e,0x3d6a2798,0x3d1374bc,0x3caaaaab,0x3c2ec33e,0x3b9374bc,0x3aaec33e,0x392ec33e,0xa6800000,0x00000000,0x392ec33e,0x3aaec33e,0x3b9374bc,0x3c2ec33e,0x3caaaaab,0x3d1374bc,0x3d6a2798,0x3daec33e,0x3df8d4fe,0x3e2aaaab,0x3e627984, -0x3e90b9af,0x3eb242e7,0x3ed44f30,0x3ef55555,0x3f09e60f,0x3f17152a,0x3f21735f,0x3f283c13,0x3f2aaaab, -}; -#endif -#ifndef IVAS_FLOAT_FIXED -const float defaultHRIR_rom_ITD_azimKSeq[19] = { - 0.000000f, 10.000000f, 20.000000f, 30.000000f, 40.000000f, 50.000000f, 60.000000f, 70.000000f, 80.000000f, 90.000000f, 100.000000f, 110.000000f, 120.000000f, 130.000000f, 140.000000f, 150.000000f, 160.000000f, 170.000000f, 180.000000f, -}; -const uint32_t defaultHRIR_rom_ITD_elevBsShape[28] = { -0x3f800000,0x3e97b426,0x3d17b426,0x00000000,0x00000000,0x3f1097b4,0x3f04bda1,0x3e800000,0x3d97b426,0x3c17b426,0x00000000,0x00000000,0x3e07e6b7,0x3eca4588,0x3f155555,0x3f0ca458,0x3ebc0ca4,0x3e2aaaab,0x3d4a4588,0x3bca4588,0x00000000,0x00000000,0x3bca4588,0x3d4a4588,0x3e2aaaab, -0x3ebda12f,0x3f12f685,0x3f2aaaab -}; -const float defaultHRIR_rom_ITD_elevKSeq[16] = { --90.000000f, -78.000000f, -66.000000f, -54.000000f, -42.000000f, -30.000000f, -18.000000f, -6.000000f, 6.000000f, 18.000000f, 30.000000f, 42.000000f, 54.000000f, 66.000000f, 78.000000f, 90.000000f, -}; -#else const Word32 defaultHRIR_rom_ITD_azimKSeq_fx[19]/*Q22*/ = { 0, 41943040, 83886080, 125829120, 167772160, 209715200, 251658240, 293601280, 335544320, 377487360, 419430400, 461373440, 503316480, 545259520, 587202560, 629145600, 671088640, 713031680, 754974720, }; @@ -20255,7 +10150,6 @@ const Word32 defaultHRIR_rom_ITD_elevBsShape_fx[28]/*Q30*/ = { const Word32 defaultHRIR_rom_ITD_elevKSeq_fx[16] /*Q22*/ = { -377487360, -327155712, -276824064, -226492416, -176160768, -125829120, -75497472, -25165824, 25165824, 75497472, 125829120, 176160768, 226492416, 276824064, 327155712, 377487360 }; -#endif #undef WMC_TOOL_SKIP /* clang-format on */ diff --git a/lib_rend/ivas_rom_TdBinauralRenderer.h b/lib_rend/ivas_rom_TdBinauralRenderer.h index 8f3f13a2b..7cdd84d6d 100644 --- a/lib_rend/ivas_rom_TdBinauralRenderer.h +++ b/lib_rend/ivas_rom_TdBinauralRenderer.h @@ -40,7 +40,6 @@ *------------------------------------------------------------------------*/ /* TD renderer default HRIR model */ -#ifdef IVAS_FLOAT_FIXED extern const Word32 defaultHRIR_rom_latency_s_fx; /* Q31 */ extern const Word16 defaultHRIR_rom_azimDim2[15]; /* Q0 */ extern const Word16 defaultHRIR_rom_azimDim3[15]; /* Q0 */ @@ -49,31 +48,7 @@ extern const Word16 defaultHRIR_rom_azimSegSamples[1]; /* Q0 */ extern const Word16 defaultHRIR_rom_azimShapeIdx[15]; /* Q0 */ extern const Word16 defaultHRIR_rom_azimShapeSampFactor[15]; /* Q0 */ extern const Word32 defaultHRIR_rom_elevKSeq_fx[13]; /* Q22 */ -#else -extern const float defaultHRIR_rom_latency_s; -extern const int16_t defaultHRIR_rom_azimDim2[15]; -extern const int16_t defaultHRIR_rom_azimDim3[15]; -extern const int16_t defaultHRIR_rom_azim_start_idx[15]; -extern const int16_t defaultHRIR_rom_azimSegSamples[1]; -extern const int16_t defaultHRIR_rom_azimShapeIdx[15]; -extern const int16_t defaultHRIR_rom_azimShapeSampFactor[15]; -extern const float defaultHRIR_rom_elevKSeq[13]; -#endif -#ifndef IVAS_FLOAT_FIXED -extern const uint32_t defaultHRIR_rom_AlphaL48[470 * 128]; -extern const uint32_t defaultHRIR_rom_AlphaR48[470 * 128]; -extern const uint32_t defaultHRIR_rom_AlphaL32[470 * 86]; -extern const uint32_t defaultHRIR_rom_AlphaR32[470 * 86]; -extern const uint32_t defaultHRIR_rom_AlphaL16[470 * 43]; -extern const uint32_t defaultHRIR_rom_AlphaR16[470 * 43]; -extern const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470]; -extern const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470]; -extern const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470]; -extern const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470]; -extern const uint32_t defaultHRIR_rom_EL16[HRTF_MODEL_N_SECTIONS * 470]; -extern const uint32_t defaultHRIR_rom_ER16[HRTF_MODEL_N_SECTIONS * 470]; -#else extern const UWord32 defaultHRIR_rom_AlphaL48_fx[470 * 128]; /*Q30*/ extern const UWord32 defaultHRIR_rom_AlphaR48_fx[470 * 128]; /*Q30*/ extern const UWord32 defaultHRIR_rom_AlphaL32_fx[470 * 86]; /*Q30*/ @@ -86,22 +61,11 @@ extern const UWord32 defaultHRIR_rom_EL32_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28 extern const UWord32 defaultHRIR_rom_ER32_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*/ extern const UWord32 defaultHRIR_rom_EL16_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*/ extern const UWord32 defaultHRIR_rom_ER16_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*/ -#endif -#ifndef IVAS_FLOAT_FIXED -extern const uint32_t defaultHRIR_rom_elevBsShape[36]; -extern const uint32_t defaultHRIR_rom_azimBsShape[21]; -extern const uint32_t defaultHRIR_rom_ITD_W[658]; -extern const uint32_t defaultHRIR_rom_ITD_azimBsShape[84]; -extern const float defaultHRIR_rom_ITD_azimKSeq[19]; -extern const uint32_t defaultHRIR_rom_ITD_elevBsShape[28]; -extern const float defaultHRIR_rom_ITD_elevKSeq[16]; -#else -extern const Word32 defaultHRIR_rom_elevBsShape_fx[36]; /*Q30*/ -extern const Word32 defaultHRIR_rom_azimBsShape_fx[21]; /*Q30*/ -extern const UWord32 defaultHRIR_rom_ITD_W_fx[658]; /*Q25*/ -extern const Word32 defaultHRIR_rom_ITD_elevKSeq_fx[16]; /*Q22*/ -extern const Word32 defaultHRIR_rom_ITD_elevBsShape_fx[28]; /*Q30*/ -extern const Word32 defaultHRIR_rom_ITD_azimKSeq_fx[19]; /*Q22*/ -extern const Word32 defaultHRIR_rom_ITD_azimBsShape_fx[84]; /*Q30*/ -#endif // IVAS_FLOAT_FIXED +extern const Word32 defaultHRIR_rom_elevBsShape_fx[36]; /*Q30*/ +extern const Word32 defaultHRIR_rom_azimBsShape_fx[21]; /*Q30*/ +extern const UWord32 defaultHRIR_rom_ITD_W_fx[658]; /*Q25*/ +extern const Word32 defaultHRIR_rom_ITD_elevKSeq_fx[16]; /*Q22*/ +extern const Word32 defaultHRIR_rom_ITD_elevBsShape_fx[28]; /*Q30*/ +extern const Word32 defaultHRIR_rom_ITD_azimKSeq_fx[19]; /*Q22*/ +extern const Word32 defaultHRIR_rom_ITD_azimBsShape_fx[84]; /*Q30*/ diff --git a/lib_rend/ivas_rom_binauralRenderer.c b/lib_rend/ivas_rom_binauralRenderer.c index 0bd40babd..fa4cbd7aa 100644 --- a/lib_rend/ivas_rom_binauralRenderer.c +++ b/lib_rend/ivas_rom_binauralRenderer.c @@ -53,13 +53,8 @@ -#ifdef IVAS_FLOAT_FIXED const Word32 FASTCONV_HOA3_latency_s_fx = 20833; -#else -const float FASTCONV_HOA3_latency_s = 0.000020833f; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -963,913 +958,7 @@ const Word32 leftHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NT { -46061912, -2879239, 3273302, } }, }; -#else -const float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.353305f, +0.566845f, +0.200116f}, - {+0.451504f, -0.563006f, +0.083565f}, - {+0.022092f, +0.111945f, -0.003135f}, - {+0.047133f, +0.000194f, -0.000386f}, - {+0.039375f, -0.036049f, -0.015307f}, - {+0.013502f, -0.004406f, +0.016833f}, - {-0.050267f, +0.058356f, +0.017434f}, - {-0.013681f, +0.080836f, -0.019699f}, - {-0.037136f, +0.024371f, +0.052200f}, - {+0.050122f, -0.078803f, -0.019790f}, - {-0.004565f, +0.007656f, -0.001338f}, - {+0.009821f, -0.051585f, -0.003219f}, - {-0.003833f, -0.023411f, -0.003160f}, - {+0.007736f, -0.042621f, +0.010291f}, - {+0.014210f, -0.003392f, -0.001270f}, - {-0.005609f, +0.001063f, +0.001854f} - }, - { - {+0.011160f, -0.509237f, -0.132176f}, - {+0.142996f, -0.819544f, +0.093135f}, - {+0.003358f, +0.077333f, -0.008548f}, - {+0.004495f, +0.024167f, +0.025614f}, - {+0.020911f, +0.057490f, +0.024558f}, - {+0.020938f, +0.024631f, +0.022840f}, - {-0.049990f, -0.113634f, -0.053590f}, - {+0.010020f, +0.210234f, +0.026992f}, - {-0.094579f, -0.407023f, -0.103353f}, - {+0.038956f, +0.088489f, +0.058039f}, - {+0.002875f, +0.015645f, -0.000778f}, - {+0.020714f, +0.104784f, +0.070444f}, - {-0.008794f, +0.002924f, +0.009615f}, - {+0.004361f, -0.056762f, +0.007070f}, - {+0.010128f, +0.073116f, +0.035032f}, - {-0.005641f, -0.006012f, -0.000245f} - }, - { - {-0.192410f, -0.206164f, -0.191132f}, - {-0.278956f, +0.236216f, -0.253095f}, - {-0.002616f, +0.068222f, +0.000710f}, - {-0.043976f, +0.107663f, +0.006000f}, - {-0.022830f, +0.121862f, +0.008267f}, - {+0.007646f, +0.104913f, -0.016048f}, - {+0.008805f, -0.278895f, +0.005919f}, - {+0.015200f, +0.180293f, +0.037960f}, - {-0.037987f, -0.531186f, -0.053722f}, - {-0.053411f, +0.405963f, -0.066106f}, - {+0.004225f, +0.049392f, -0.020098f}, - {-0.032849f, +0.404382f, -0.057080f}, - {-0.020343f, +0.025697f, +0.003018f}, - {+0.000399f, -0.049237f, +0.005564f}, - {-0.018895f, +0.170897f, -0.004768f}, - {-0.014229f, +0.049740f, -0.026663f} - }, - { - {-0.062917f, +0.511673f, +0.062418f}, - {-0.164174f, +1.090974f, +0.108397f}, - {+0.009127f, +0.065188f, -0.003083f}, - {-0.018593f, +0.081738f, -0.000771f}, - {-0.020686f, +0.093603f, +0.012011f}, - {+0.000826f, +0.118498f, -0.001498f}, - {+0.025996f, -0.307659f, -0.023797f}, - {-0.008194f, +0.054598f, -0.009722f}, - {+0.040351f, -0.445888f, -0.056326f}, - {-0.030847f, +0.708631f, +0.081623f}, - {+0.002063f, +0.033938f, -0.025075f}, - {-0.027403f, +0.458795f, -0.033429f}, - {-0.021373f, -0.007009f, -0.010388f}, - {-0.002090f, -0.031407f, +0.008158f}, - {-0.028475f, +0.071069f, -0.046847f}, - {-0.007602f, +0.116385f, +0.002531f} - }, - { - {+0.114739f, +0.069536f, +0.170911f}, - {+0.106068f, +0.653946f, +0.186091f}, - {+0.032435f, +0.023922f, +0.003440f}, - {+0.048701f, +0.139999f, -0.053329f}, - {+0.008680f, +0.251941f, -0.071200f}, - {-0.004397f, +0.120323f, +0.000310f}, - {+0.025654f, -0.324361f, -0.006461f}, - {-0.004810f, +0.061858f, -0.007597f}, - {+0.097919f, -0.641143f, +0.015289f}, - {+0.011357f, +0.557580f, +0.143138f}, - {+0.004726f, -0.016709f, +0.000434f}, - {+0.013229f, +0.166606f, +0.093126f}, - {-0.007411f, +0.011792f, -0.021547f}, - {-0.005396f, -0.034575f, +0.011453f}, - {+0.010644f, +0.011719f, -0.021909f}, - {+0.005419f, +0.030988f, +0.043631f} - }, - { - {+0.066623f, -0.089947f, +0.096291f}, - {+0.228582f, +0.462839f, +0.023355f}, - {+0.030597f, +0.055459f, +0.010541f}, - {+0.104887f, +0.337465f, -0.003674f}, - {+0.072691f, +0.405228f, -0.038864f}, - {+0.004864f, +0.081470f, -0.022241f}, - {+0.026067f, -0.215427f, +0.055659f}, - {+0.015556f, +0.034465f, -0.026853f}, - {+0.081559f, -0.329728f, +0.167841f}, - {+0.004434f, +0.224966f, -0.027520f}, - {+0.000854f, -0.017986f, +0.001169f}, - {-0.017103f, +0.022207f, +0.026879f}, - {+0.016949f, +0.070641f, -0.004353f}, - {-0.006585f, -0.086138f, -0.004695f}, - {+0.059412f, +0.107209f, +0.004895f}, - {+0.005676f, -0.059162f, +0.003180f} - }, - { - {-0.248577f, +0.462186f, -0.044825f}, - {+0.092220f, +0.576619f, +0.031483f}, - {-0.018552f, +0.118241f, -0.000190f}, - {+0.024038f, +0.192235f, +0.076006f}, - {+0.073463f, +0.111697f, +0.085309f}, - {+0.045418f, +0.052428f, -0.014128f}, - {+0.004341f, -0.088144f, -0.002830f}, - {+0.058183f, -0.067481f, +0.003537f}, - {-0.112838f, +0.181474f, -0.013812f}, - {+0.051144f, +0.057123f, +0.036471f}, - {-0.002310f, -0.009489f, -0.002928f}, - {-0.036815f, +0.070367f, +0.013190f}, - {+0.025238f, +0.001933f, +0.022381f}, - {+0.011799f, -0.070089f, -0.017261f}, - {+0.079383f, -0.005050f, +0.042259f}, - {+0.027513f, -0.031781f, -0.014727f} - }, - { - {-0.588729f, +0.069942f, -0.118192f}, - {-0.336864f, -0.087523f, -0.133178f}, - {-0.091818f, +0.000222f, -0.031435f}, - {-0.240072f, -0.209090f, -0.026656f}, - {-0.106536f, -0.210008f, -0.006949f}, - {+0.086566f, +0.077574f, -0.013942f}, - {+0.036640f, -0.012230f, +0.021355f}, - {+0.059977f, -0.024737f, +0.017673f}, - {-0.214469f, +0.026100f, -0.046140f}, - {+0.016107f, -0.082852f, -0.011968f}, - {-0.003608f, +0.021470f, +0.008749f}, - {-0.046323f, -0.010871f, -0.015628f}, - {-0.008214f, -0.079699f, -0.002987f}, - {+0.052373f, +0.029312f, +0.014086f}, - {+0.018742f, -0.113603f, +0.010455f}, - {+0.059520f, +0.032936f, +0.004294f} - }, - { - {-0.672439f, -0.199370f, +0.003424f}, - {-0.631922f, -0.138094f, -0.043549f}, - {-0.130748f, -0.058055f, -0.001266f}, - {-0.452933f, -0.003480f, -0.056408f}, - {-0.285057f, +0.030036f, -0.056968f}, - {+0.110275f, -0.011467f, +0.016793f}, - {+0.065972f, +0.005614f, +0.004420f}, - {-0.003151f, +0.047883f, +0.002061f}, - {-0.163084f, -0.130815f, +0.001810f}, - {-0.019555f, -0.025290f, -0.023258f}, - {-0.018781f, +0.034389f, +0.006142f}, - {-0.002509f, -0.046479f, -0.009162f}, - {-0.041047f, -0.024011f, -0.016940f}, - {+0.065623f, +0.027310f, +0.010505f}, - {-0.073560f, +0.039971f, -0.029159f}, - {+0.062876f, +0.006797f, +0.012019f} - }, - { - {-0.543455f, +0.059523f, +0.064094f}, - {-0.700107f, +0.080270f, +0.041520f}, - {-0.154990f, -0.009275f, +0.018360f}, - {-0.474326f, +0.126377f, -0.003035f}, - {-0.327360f, +0.114048f, -0.014833f}, - {+0.071241f, -0.058994f, +0.004572f}, - {+0.087784f, +0.000125f, -0.001107f}, - {-0.094160f, -0.038960f, -0.011917f}, - {-0.019089f, +0.055284f, +0.038765f}, - {-0.023647f, +0.039958f, +0.003588f}, - {-0.043021f, -0.013443f, -0.008032f}, - {+0.077825f, +0.044990f, +0.010103f}, - {-0.040861f, +0.021619f, +0.002193f}, - {+0.044745f, -0.030859f, -0.007951f}, - {-0.123807f, +0.055927f, -0.012492f}, - {+0.025663f, -0.034745f, +0.003611f} - }, - { - {-0.336060f, +0.028886f, +0.031505f}, - {-0.587287f, -0.009083f, +0.042775f}, - {-0.182505f, +0.025753f, +0.007772f}, - {-0.327915f, -0.064183f, +0.035026f}, - {-0.233666f, -0.067260f, +0.031214f}, - {-0.007323f, +0.030500f, -0.014877f}, - {+0.086165f, +0.005866f, -0.002682f}, - {-0.157983f, -0.017671f, -0.007972f}, - {+0.103610f, +0.038997f, +0.019660f}, - {-0.007681f, -0.004657f, +0.015128f}, - {-0.055812f, -0.017923f, -0.003300f}, - {+0.143968f, +0.013845f, +0.008347f}, - {-0.017716f, -0.004963f, +0.006287f}, - {+0.008786f, -0.012160f, -0.007210f}, - {-0.121102f, -0.034578f, +0.019391f}, - {-0.032193f, +0.031317f, -0.010154f} - }, - { - {-0.153248f, -0.008370f, -0.009310f}, - {-0.402033f, +0.000118f, +0.012937f}, - {-0.199763f, -0.006595f, +0.001228f}, - {-0.128842f, +0.004526f, +0.020419f}, - {-0.092842f, -0.010605f, +0.021993f}, - {-0.077909f, +0.025349f, -0.002895f}, - {+0.057392f, -0.008479f, -0.003710f}, - {-0.165419f, +0.022789f, +0.007822f}, - {+0.148908f, -0.037324f, -0.013709f}, - {+0.011296f, -0.018097f, +0.005621f}, - {-0.055136f, +0.008613f, +0.006635f}, - {+0.160576f, -0.015557f, -0.006131f}, - {+0.014844f, -0.003364f, +0.000064f}, - {-0.027453f, -0.001660f, +0.003786f}, - {-0.097934f, -0.032125f, +0.013700f}, - {-0.074549f, +0.020854f, -0.006292f} - }, - { - {-0.021458f, -0.031294f, -0.015786f}, - {-0.225566f, -0.016671f, -0.005476f}, - {-0.179128f, -0.006436f, +0.000989f}, - {+0.030888f, -0.004116f, -0.001010f}, - {+0.023526f, +0.004404f, -0.002301f}, - {-0.113727f, -0.001584f, +0.014207f}, - {+0.006187f, +0.003628f, -0.000322f}, - {-0.130415f, +0.000132f, +0.008388f}, - {+0.133114f, -0.001415f, -0.020106f}, - {+0.026233f, +0.006894f, -0.005590f}, - {-0.046982f, +0.011852f, +0.003518f}, - {+0.124161f, +0.003790f, -0.005992f}, - {+0.039303f, -0.005121f, -0.003574f}, - {-0.061746f, +0.020157f, -0.000385f}, - {-0.073801f, +0.016410f, -0.009153f}, - {-0.089034f, -0.008662f, +0.006612f} - }, - { - {+0.079072f, +0.039673f, -0.003004f}, - {-0.077618f, +0.033045f, -0.007328f}, - {-0.090967f, +0.027848f, +0.000971f}, - {+0.121511f, -0.002007f, -0.010039f}, - {+0.095609f, +0.005944f, -0.008880f}, - {-0.100415f, -0.015820f, +0.006869f}, - {-0.060544f, -0.012856f, +0.004470f}, - {-0.077695f, +0.001667f, -0.001003f}, - {+0.092912f, +0.018201f, -0.005273f}, - {+0.040823f, +0.014455f, -0.004325f}, - {-0.030102f, +0.002197f, -0.002719f}, - {+0.043620f, -0.016980f, -0.000122f}, - {+0.041014f, +0.001499f, -0.001303f}, - {-0.088431f, +0.009078f, -0.001327f}, - {-0.051030f, +0.024992f, -0.008833f}, - {-0.091055f, -0.011437f, +0.003728f} - }, - { - {+0.165755f, -0.020564f, +0.004876f}, - {+0.050384f, -0.037239f, -0.000994f}, - {+0.070084f, -0.036144f, -0.001750f}, - {+0.168503f, -0.016906f, -0.008961f}, - {+0.141507f, -0.014408f, -0.005947f}, - {-0.022796f, -0.010807f, -0.007047f}, - {-0.126569f, +0.016739f, +0.005274f}, - {-0.026827f, -0.017151f, -0.002196f}, - {+0.045512f, +0.004295f, +0.005991f}, - {+0.054896f, -0.008311f, +0.001754f}, - {-0.003645f, -0.010307f, -0.002009f}, - {-0.057176f, +0.014805f, +0.004774f}, - {+0.011072f, +0.010642f, -0.000248f}, - {-0.108885f, -0.004650f, +0.007771f}, - {-0.039664f, -0.018793f, +0.005550f}, - {-0.092338f, -0.000767f, -0.000795f} - }, - { - {+0.239774f, +0.007034f, +0.002631f}, - {+0.158490f, +0.023748f, +0.003698f}, - {+0.270403f, +0.044381f, -0.006888f}, - {+0.208319f, +0.016522f, -0.001863f}, - {+0.188853f, +0.017009f, -0.001321f}, - {+0.109689f, +0.039932f, -0.010880f}, - {-0.162224f, -0.011965f, +0.002284f}, - {+0.008275f, +0.010941f, +0.003208f}, - {-0.008632f, -0.022468f, +0.003767f}, - {+0.062087f, -0.004201f, +0.001503f}, - {+0.024938f, +0.010189f, +0.000489f}, - {-0.144572f, -0.021004f, +0.007356f}, - {-0.046268f, -0.010126f, +0.001327f}, - {-0.126844f, -0.020412f, +0.005586f}, - {-0.049688f, -0.012221f, +0.009513f}, - {-0.100800f, -0.001133f, +0.001097f} - }, - { - {+0.298828f, -0.005793f, -0.001373f}, - {+0.237768f, -0.008765f, +0.003046f}, - {+0.449357f, -0.047352f, -0.004642f}, - {+0.250753f, -0.004865f, -0.001957f}, - {+0.245484f, -0.010819f, -0.000881f}, - {+0.249706f, -0.049408f, -0.003961f}, - {-0.136738f, -0.008753f, -0.001855f}, - {+0.025853f, +0.003385f, +0.004139f}, - {-0.065934f, +0.022501f, -0.003288f}, - {+0.057527f, +0.008394f, -0.002717f}, - {+0.046206f, -0.004855f, +0.002123f}, - {-0.183725f, +0.015903f, +0.001405f}, - {-0.114051f, +0.012348f, +0.005264f}, - {-0.129436f, +0.010088f, -0.004805f}, - {-0.071460f, +0.022939f, +0.001488f}, - {-0.119149f, +0.009223f, +0.000555f} - }, - { - {+0.346011f, +0.008343f, -0.002521f}, - {+0.286535f, -0.000576f, -0.000480f}, - {+0.541635f, +0.014116f, +0.002290f}, - {+0.286228f, +0.009795f, -0.003869f}, - {+0.299965f, +0.009735f, -0.003167f}, - {+0.328736f, +0.018968f, +0.006082f}, - {-0.037520f, +0.034439f, -0.002184f}, - {+0.042204f, -0.003541f, +0.000630f}, - {-0.115659f, -0.004656f, -0.004969f}, - {+0.039051f, -0.003041f, -0.004257f}, - {+0.056424f, +0.001120f, +0.003167f}, - {-0.144869f, +0.019123f, -0.003415f}, - {-0.166286f, -0.018086f, +0.003983f}, - {-0.101679f, +0.021538f, -0.005021f}, - {-0.078280f, -0.006671f, -0.006794f}, - {-0.140047f, -0.004747f, -0.001252f} - }, - { - {+0.388388f, -0.009881f, -0.001847f}, - {+0.316128f, -0.000090f, -0.004009f}, - {+0.513290f, +0.035603f, +0.000300f}, - {+0.296513f, -0.005786f, -0.000267f}, - {+0.333378f, -0.007221f, -0.002877f}, - {+0.295424f, +0.041070f, +0.003600f}, - {+0.114311f, -0.042170f, +0.000214f}, - {+0.081378f, -0.006284f, -0.003240f}, - {-0.150267f, -0.005614f, +0.000485f}, - {+0.005390f, +0.000214f, -0.000390f}, - {+0.064645f, +0.002835f, +0.002892f}, - {-0.026756f, -0.044985f, +0.000392f}, - {-0.170480f, -0.001979f, -0.000156f}, - {-0.050780f, -0.025790f, +0.003317f}, - {-0.047515f, -0.026029f, -0.004739f}, - {-0.153995f, -0.004894f, +0.001183f} - }, - { - {+0.430636f, +0.009808f, -0.001195f}, - {+0.343293f, +0.010478f, -0.003913f}, - {+0.388765f, -0.049553f, -0.008265f}, - {+0.266407f, -0.016789f, +0.000864f}, - {+0.328141f, -0.007654f, -0.002512f}, - {+0.155445f, -0.060858f, -0.009380f}, - {+0.269010f, +0.026881f, -0.000978f}, - {+0.158656f, +0.025362f, -0.003743f}, - {-0.171832f, +0.002756f, +0.006554f}, - {-0.043647f, -0.009482f, +0.003918f}, - {+0.090667f, -0.001476f, -0.001048f}, - {+0.132548f, +0.036105f, +0.003022f}, - {-0.106351f, +0.024154f, -0.000421f}, - {-0.000521f, +0.009705f, +0.007542f}, - {+0.019829f, +0.036619f, +0.006700f}, - {-0.155900f, +0.002824f, +0.004883f} - }, - { - {+0.471455f, -0.008296f, -0.001200f}, - {+0.377731f, -0.016768f, +0.000590f}, - {+0.234888f, +0.026343f, -0.008776f}, - {+0.198215f, +0.029257f, -0.004797f}, - {+0.279113f, +0.015431f, -0.003236f}, - {-0.033581f, +0.032760f, -0.011351f}, - {+0.370767f, -0.006318f, -0.006828f}, - {+0.266209f, -0.029783f, -0.001410f}, - {-0.185419f, +0.012636f, +0.005498f}, - {-0.100533f, +0.019010f, +0.003209f}, - {+0.151097f, -0.010446f, -0.007094f}, - {+0.274631f, -0.012724f, -0.003901f}, - {+0.013966f, -0.029859f, -0.001195f}, - {+0.031705f, +0.010192f, +0.002683f}, - {+0.102880f, -0.011055f, +0.011106f}, - {-0.143777f, +0.006427f, +0.002026f} - }, - { - {+0.505485f, +0.006321f, -0.001405f}, - {+0.419164f, +0.009705f, +0.004024f}, - {+0.115231f, -0.006245f, -0.000430f}, - {+0.110599f, -0.013787f, -0.006578f}, - {+0.197526f, -0.015552f, -0.000736f}, - {-0.208411f, -0.008219f, +0.002566f}, - {+0.381442f, -0.001142f, -0.007728f}, - {+0.371664f, +0.016115f, -0.002975f}, - {-0.191819f, -0.017185f, -0.004447f}, - {-0.147317f, -0.015855f, -0.001243f}, - {+0.239821f, +0.029217f, -0.008681f}, - {+0.348287f, +0.007454f, -0.010181f}, - {+0.149521f, +0.030650f, -0.003365f}, - {+0.048588f, -0.006717f, -0.005355f}, - {+0.186826f, -0.010831f, -0.001024f}, - {-0.115953f, +0.001790f, -0.004618f} - }, - { - {+0.527959f, -0.004605f, -0.000793f}, - {+0.465933f, +0.000734f, +0.000648f}, - {+0.058769f, +0.003399f, +0.003980f}, - {+0.020939f, +0.002500f, +0.001602f}, - {+0.102989f, +0.023640f, +0.000907f}, - {-0.330754f, +0.015227f, +0.013490f}, - {+0.293504f, +0.012966f, +0.002367f}, - {+0.435673f, -0.007769f, -0.006056f}, - {-0.189456f, -0.010551f, -0.008519f}, - {-0.165864f, -0.001568f, -0.003516f}, - {+0.320806f, -0.034715f, -0.000873f}, - {+0.324855f, -0.004016f, -0.002288f}, - {+0.248230f, -0.023651f, -0.001117f}, - {+0.067435f, -0.016300f, -0.003833f}, - {+0.272913f, -0.007587f, -0.015541f}, - {-0.076620f, -0.021772f, -0.003143f} - }, - { - {+0.537963f, +0.000122f, -0.000129f}, - {+0.521439f, +0.006120f, -0.005687f}, - {+0.059349f, +0.002731f, +0.001179f}, - {-0.063524f, -0.015179f, +0.008462f}, - {+0.018295f, -0.018831f, -0.001086f}, - {-0.382316f, -0.020820f, +0.008228f}, - {+0.133723f, -0.051158f, +0.007642f}, - {+0.427333f, -0.004801f, -0.004396f}, - {-0.189172f, +0.025571f, +0.003440f}, - {-0.153064f, +0.017940f, +0.000618f}, - {+0.344855f, +0.000841f, +0.007255f}, - {+0.204120f, -0.035702f, +0.007554f}, - {+0.269414f, -0.005639f, +0.002449f}, - {+0.098719f, +0.013856f, +0.002962f}, - {+0.355359f, +0.040342f, -0.012703f}, - {-0.043435f, +0.014923f, +0.004398f} - }, - { - {+0.539918f, +0.002520f, -0.000803f}, - {+0.586780f, -0.022878f, -0.005664f}, - {+0.088465f, -0.012487f, -0.000009f}, - {-0.133857f, +0.024436f, +0.005429f}, - {-0.038815f, +0.004600f, -0.001199f}, - {-0.354019f, -0.005760f, -0.002225f}, - {-0.035479f, +0.061479f, -0.003852f}, - {+0.333448f, +0.030542f, -0.002292f}, - {-0.214917f, +0.009773f, +0.013046f}, - {-0.126578f, -0.010093f, +0.005470f}, - {+0.286447f, +0.044878f, +0.001444f}, - {+0.026257f, +0.067149f, +0.001093f}, - {+0.208042f, +0.035382f, -0.000884f}, - {+0.140716f, -0.000405f, +0.001329f}, - {+0.398750f, -0.026334f, +0.002502f}, - {-0.035058f, +0.007558f, +0.005919f} - }, - { - {+0.542223f, +0.000691f, -0.001439f}, - {+0.649673f, +0.023205f, +0.000535f}, - {+0.109219f, +0.005980f, +0.002282f}, - {-0.171779f, -0.010220f, -0.000656f}, - {-0.066150f, +0.005365f, +0.002547f}, - {-0.254746f, +0.041005f, -0.002026f}, - {-0.138924f, -0.008674f, -0.012149f}, - {+0.169249f, -0.044112f, -0.002599f}, - {-0.272638f, -0.040677f, +0.004640f}, - {-0.110153f, -0.006462f, +0.003434f}, - {+0.169903f, -0.042984f, -0.010056f}, - {-0.132794f, -0.036153f, -0.009130f}, - {+0.102112f, -0.031703f, -0.006139f}, - {+0.188913f, +0.004870f, -0.004839f}, - {+0.357390f, -0.030371f, +0.006291f}, - {-0.051114f, -0.020551f, -0.000894f} - }, - { - {+0.551847f, -0.004875f, -0.000679f}, - {+0.690272f, -0.004312f, +0.004016f}, - {+0.095639f, +0.010071f, +0.002809f}, - {-0.161818f, -0.013824f, -0.000790f}, - {-0.076081f, +0.002390f, +0.004308f}, - {-0.122361f, -0.040035f, +0.004601f}, - {-0.144006f, -0.036671f, -0.003198f}, - {-0.024466f, +0.039610f, -0.000882f}, - {-0.331827f, +0.020929f, -0.006635f}, - {-0.113319f, +0.007876f, -0.000927f}, - {+0.048322f, +0.009251f, -0.008004f}, - {-0.207982f, -0.015726f, -0.004350f}, - {+0.006949f, +0.009330f, -0.004246f}, - {+0.233905f, -0.014811f, -0.005355f}, - {+0.223143f, +0.054998f, -0.002434f}, - {-0.070208f, +0.002186f, -0.004895f} - }, - { - {+0.570043f, +0.005432f, +0.000103f}, - {+0.699360f, -0.014398f, -0.000427f}, - {+0.048501f, -0.018143f, +0.001306f}, - {-0.107295f, +0.023902f, +0.003671f}, - {-0.082584f, -0.006076f, +0.001731f}, - {-0.005834f, +0.019340f, +0.006865f}, - {-0.085415f, +0.035831f, +0.009933f}, - {-0.202459f, -0.035934f, +0.000303f}, - {-0.353113f, +0.015051f, -0.004263f}, - {-0.130123f, -0.004257f, -0.001776f}, - {-0.043254f, -0.003167f, +0.001496f}, - {-0.189334f, +0.031601f, +0.007634f}, - {-0.040215f, +0.005301f, +0.001534f}, - {+0.256999f, +0.008098f, -0.001598f}, - {+0.036347f, -0.049036f, -0.008301f}, - {-0.070389f, +0.011544f, -0.000794f} - }, - { - {+0.593416f, -0.005649f, +0.000278f}, - {+0.688298f, +0.007364f, -0.005463f}, - {-0.008044f, +0.018190f, -0.001207f}, - {-0.030689f, -0.015365f, +0.004543f}, - {-0.091891f, +0.004696f, -0.000919f}, - {+0.064670f, +0.007573f, +0.000965f}, - {-0.030187f, +0.002153f, +0.010834f}, - {-0.331404f, +0.015975f, +0.000858f}, - {-0.323976f, -0.025164f, +0.004961f}, - {-0.148829f, -0.000188f, +0.000078f}, - {-0.101305f, +0.006103f, +0.005181f}, - {-0.115300f, -0.016832f, +0.010749f}, - {-0.032766f, -0.011589f, +0.005290f}, - {+0.239406f, +0.007974f, +0.000705f}, - {-0.145255f, +0.023713f, -0.004941f}, - {-0.046369f, -0.012177f, +0.003695f} - }, - { - {+0.616579f, +0.002929f, -0.000295f}, - {+0.676588f, +0.004629f, -0.003842f}, - {-0.043537f, -0.004766f, -0.003324f}, - {+0.044220f, +0.013845f, +0.003072f}, - {-0.101856f, +0.006437f, +0.001748f}, - {+0.092523f, -0.007377f, -0.006975f}, - {-0.023470f, -0.026713f, -0.000479f}, - {-0.400554f, +0.001062f, +0.004867f}, - {-0.261565f, +0.014128f, +0.007944f}, - {-0.159121f, +0.002751f, +0.002980f}, - {-0.138765f, -0.008950f, +0.004189f}, - {-0.034625f, -0.000481f, +0.002727f}, - {+0.012613f, +0.005909f, +0.003331f}, - {+0.175748f, -0.024801f, -0.000902f}, - {-0.281594f, -0.008334f, +0.003990f}, - {-0.007054f, +0.002604f, +0.002155f} - }, - { - {+0.635179f, -0.002823f, -0.001148f}, - {+0.674199f, -0.007986f, +0.000991f}, - {-0.041014f, -0.013849f, -0.001185f}, - {+0.104750f, -0.003964f, +0.000987f}, - {-0.107619f, +0.003736f, +0.004502f}, - {+0.101204f, -0.003739f, -0.008397f}, - {-0.064575f, +0.021388f, -0.009658f}, - {-0.422196f, -0.004265f, +0.008954f}, - {-0.190975f, -0.003688f, +0.002622f}, - {-0.155793f, +0.001509f, +0.003088f}, - {-0.169274f, +0.008874f, +0.002289f}, - {+0.023162f, -0.001981f, -0.005597f}, - {+0.073018f, -0.010252f, -0.000970f}, - {+0.080452f, +0.024265f, -0.002891f}, - {-0.363635f, +0.004698f, +0.010523f}, - {+0.035663f, -0.006812f, -0.001722f} - }, - { - {+0.647447f, +0.003124f, -0.000778f}, - {+0.678396f, -0.001222f, +0.002175f}, - {-0.008003f, +0.018788f, +0.004232f}, - {+0.153771f, +0.006824f, -0.001505f}, - {-0.102284f, -0.006283f, +0.000369f}, - {+0.107854f, +0.015766f, -0.002536f}, - {-0.127703f, -0.002824f, -0.007472f}, - {-0.415367f, -0.005027f, +0.007128f}, - {-0.124975f, +0.011994f, -0.001327f}, - {-0.135698f, +0.002841f, +0.000522f}, - {-0.197083f, -0.008952f, +0.000525f}, - {+0.049410f, +0.008433f, -0.005306f}, - {+0.128034f, +0.008755f, -0.002993f}, - {-0.020098f, -0.017083f, -0.001266f}, - {-0.399229f, -0.010519f, +0.009961f}, - {+0.073610f, +0.013100f, -0.000219f} - }, - { - {+0.653287f, -0.000651f, -0.000132f}, - {+0.682914f, +0.002014f, -0.000124f}, - {+0.032972f, -0.005837f, +0.006215f}, - {+0.202805f, -0.008225f, -0.002812f}, - {-0.078083f, -0.005921f, -0.003749f}, - {+0.111320f, -0.004540f, +0.003693f}, - {-0.194460f, +0.001719f, +0.000738f}, - {-0.388630f, -0.001712f, +0.002133f}, - {-0.064250f, -0.011691f, -0.000978f}, - {-0.097911f, -0.010340f, -0.000589f}, - {-0.217935f, +0.002537f, -0.000189f}, - {+0.043003f, -0.001190f, -0.000648f}, - {+0.160424f, -0.006445f, -0.003025f}, - {-0.102796f, +0.011222f, +0.001449f}, - {-0.392994f, +0.003832f, +0.004205f}, - {+0.101814f, -0.004741f, +0.002529f} - }, - { - {+0.655085f, -0.000496f, -0.000073f}, - {+0.685269f, +0.000562f, -0.000824f}, - {+0.064749f, -0.008716f, +0.000371f}, - {+0.258268f, +0.016126f, -0.002727f}, - {-0.038467f, +0.019915f, -0.001374f}, - {+0.101519f, -0.013031f, +0.001724f}, - {-0.262717f, -0.010913f, +0.005785f}, - {-0.340935f, +0.010917f, -0.000109f}, - {-0.005117f, +0.011670f, -0.001141f}, - {-0.047975f, +0.015016f, +0.000510f}, - {-0.227673f, +0.001545f, +0.000844f}, - {+0.006815f, -0.010613f, +0.001679f}, - {+0.158152f, -0.002971f, -0.001763f}, - {-0.154604f, -0.004393f, +0.003495f}, - {-0.341946f, +0.012918f, +0.000060f}, - {+0.123129f, -0.003187f, +0.000554f} - }, - { - {+0.657162f, +0.001154f, -0.000704f}, - {+0.686405f, -0.001174f, +0.000024f}, - {+0.087607f, -0.002335f, -0.004967f}, - {+0.314889f, -0.015378f, -0.000770f}, - {-0.001549f, -0.013009f, +0.003904f}, - {+0.077871f, +0.011151f, -0.003120f}, - {-0.333383f, +0.022033f, +0.004891f}, - {-0.273704f, -0.019370f, +0.000308f}, - {+0.054701f, -0.011371f, -0.002150f}, - {+0.003312f, -0.012026f, +0.002061f}, - {-0.228798f, -0.001402f, +0.001592f}, - {-0.048684f, +0.018229f, +0.000520f}, - {+0.117088f, +0.012634f, -0.000896f}, - {-0.173410f, +0.001735f, +0.003820f}, - {-0.247906f, -0.029903f, +0.000682f}, - {+0.148293f, -0.000926f, -0.003582f} - }, - { - {+0.663635f, +0.002010f, -0.001316f}, - {+0.689882f, -0.000220f, +0.000110f}, - {+0.108949f, +0.013447f, -0.002013f}, - {+0.358661f, +0.009695f, +0.001033f}, - {+0.013352f, -0.004281f, +0.004550f}, - {+0.049096f, -0.001505f, -0.002637f}, - {-0.398463f, -0.021957f, -0.000327f}, - {-0.196600f, +0.019778f, +0.001903f}, - {+0.110988f, +0.014423f, -0.001867f}, - {+0.045870f, +0.004558f, +0.001576f}, - {-0.228188f, +0.000097f, +0.001476f}, - {-0.105835f, -0.015244f, -0.001995f}, - {+0.044580f, -0.021539f, -0.001382f}, - {-0.164082f, +0.001655f, +0.001885f}, - {-0.126620f, +0.032568f, +0.003705f}, - {+0.185481f, +0.013419f, -0.004184f} - }, - { - {+0.675624f, -0.004827f, -0.000839f}, - {+0.700179f, -0.002102f, -0.000678f}, - {+0.128613f, -0.006572f, +0.002141f}, - {+0.378743f, +0.002887f, +0.000648f}, - {+0.004220f, +0.012669f, +0.000801f}, - {+0.022440f, +0.000653f, +0.000869f}, - {-0.441665f, +0.002210f, -0.002042f}, - {-0.124814f, -0.014411f, +0.002833f}, - {+0.153596f, -0.007894f, -0.000675f}, - {+0.077085f, -0.001217f, -0.000703f}, - {-0.231308f, -0.000725f, +0.002147f}, - {-0.147273f, +0.003213f, -0.002198f}, - {-0.042268f, +0.020842f, -0.002800f}, - {-0.133721f, -0.009739f, +0.001057f}, - {-0.003152f, -0.021386f, +0.003714f}, - {+0.229253f, -0.015325f, -0.001319f} - }, - { - {+0.689875f, +0.004735f, +0.000183f}, - {+0.720017f, +0.006167f, -0.000699f}, - {+0.141755f, -0.003516f, +0.000834f}, - {+0.376706f, -0.006807f, -0.001713f}, - {-0.011000f, -0.005016f, -0.001618f}, - {+0.000647f, -0.004137f, +0.002283f}, - {-0.454292f, +0.009561f, +0.002281f}, - {-0.069428f, +0.004651f, +0.001574f}, - {+0.172906f, +0.000456f, -0.000712f}, - {+0.102160f, +0.005230f, -0.001608f}, - {-0.237600f, -0.001176f, +0.003651f}, - {-0.166513f, +0.006046f, +0.001258f}, - {-0.123162f, -0.009523f, -0.000972f}, - {-0.093037f, +0.007808f, +0.000738f}, - {+0.101706f, +0.008107f, -0.001772f}, - {+0.261899f, +0.005910f, +0.000263f} - }, - { - {+0.701449f, -0.001309f, +0.000513f}, - {+0.747852f, -0.007083f, -0.000295f}, - {+0.146674f, +0.002063f, -0.002067f}, - {+0.365508f, +0.004005f, -0.003093f}, - {-0.009820f, -0.003073f, -0.001694f}, - {-0.014954f, +0.005079f, +0.001243f}, - {-0.444057f, -0.005273f, +0.005170f}, - {-0.030220f, -0.001713f, -0.001402f}, - {+0.167308f, +0.005594f, -0.001307f}, - {+0.126894f, -0.005843f, -0.001163f}, - {-0.239461f, +0.006087f, +0.002206f}, - {-0.171030f, -0.001130f, +0.003837f}, - {-0.185728f, +0.008176f, +0.002303f}, - {-0.053859f, -0.008398f, -0.000003f}, - {+0.180213f, -0.012225f, -0.006311f}, - {+0.267399f, +0.003688f, -0.000070f} - }, - { - {+0.707682f, -0.001614f, -0.000417f}, - {+0.778938f, +0.006537f, -0.000334f}, - {+0.145291f, +0.002890f, -0.001284f}, - {+0.359528f, +0.005062f, -0.001469f}, - {+0.019378f, +0.015221f, -0.000076f}, - {-0.021977f, -0.000916f, +0.000266f}, - {-0.425305f, -0.000822f, +0.003160f}, - {+0.002113f, +0.007052f, -0.002427f}, - {+0.143996f, -0.006679f, -0.001487f}, - {+0.153276f, +0.008199f, -0.000318f}, - {-0.224106f, +0.002607f, -0.000957f}, - {-0.172702f, -0.005631f, +0.001975f}, - {-0.227595f, -0.009189f, +0.001906f}, - {-0.024550f, +0.006878f, +0.000998f}, - {+0.231993f, +0.016149f, -0.003555f}, - {+0.242520f, -0.012045f, -0.001170f} - }, - { - {+0.709804f, +0.000997f, -0.001515f}, - {+0.808027f, -0.005290f, -0.000583f}, - {+0.139809f, +0.000435f, +0.000818f}, - {+0.365924f, -0.006226f, +0.001737f}, - {+0.071369f, -0.017742f, +0.003060f}, - {-0.017802f, -0.003027f, +0.000621f}, - {-0.407651f, -0.000451f, +0.000175f}, - {+0.034591f, -0.007791f, -0.002030f}, - {+0.114950f, +0.006228f, -0.001120f}, - {+0.179490f, -0.006128f, +0.000795f}, - {-0.183246f, -0.015768f, -0.000773f}, - {-0.177035f, +0.003531f, -0.000696f}, - {-0.250400f, +0.001355f, +0.001108f}, - {-0.008187f, +0.000159f, +0.001456f}, - {+0.254611f, -0.001384f, -0.000532f}, - {+0.198496f, +0.013948f, -0.002759f} - }, - { - {+0.710823f, +0.002381f, -0.001069f}, - {+0.831214f, +0.003447f, -0.000878f}, - {+0.132056f, -0.007797f, -0.000969f}, - {+0.382880f, -0.001094f, +0.000711f}, - {+0.129160f, +0.007502f, +0.002763f}, - {-0.003161f, +0.000767f, -0.000443f}, - {-0.392711f, +0.006305f, +0.000815f}, - {+0.067053f, +0.011901f, -0.000327f}, - {+0.090742f, -0.003835f, -0.000996f}, - {+0.202084f, +0.000560f, -0.000195f}, - {-0.122322f, +0.020924f, +0.002535f}, - {-0.182462f, +0.002778f, +0.000258f}, - {-0.259161f, +0.001293f, +0.002195f}, - {+0.000645f, -0.003627f, -0.000469f}, - {+0.248733f, -0.007401f, -0.001654f}, - {+0.153178f, -0.008546f, -0.003483f} - }, - { - {+0.712186f, -0.002003f, +0.000341f}, - {+0.846788f, -0.001521f, -0.001394f}, - {+0.124294f, +0.003415f, -0.004317f}, - {+0.406372f, -0.002613f, -0.002804f}, - {+0.179207f, -0.002493f, -0.001438f}, - {+0.017437f, -0.004122f, -0.002593f}, - {-0.378082f, -0.002349f, +0.002279f}, - {+0.093160f, -0.004321f, +0.001305f}, - {+0.077016f, -0.001502f, +0.000076f}, - {+0.220676f, -0.001245f, -0.002361f}, - {-0.057208f, -0.011096f, +0.003599f}, - {-0.185276f, -0.001151f, +0.002614f}, - {-0.259729f, -0.001827f, +0.003455f}, - {+0.012127f, +0.000504f, -0.003413f}, - {+0.221948f, +0.010321f, -0.003531f}, - {+0.118717f, -0.000242f, -0.001468f} - }, - { - {+0.713662f, -0.000828f, +0.000545f}, - {+0.855438f, +0.002950f, -0.000977f}, - {+0.115830f, +0.005727f, -0.002674f}, - {+0.431080f, +0.008386f, -0.003025f}, - {+0.218522f, +0.008054f, -0.003300f}, - {+0.036091f, +0.008702f, -0.001428f}, - {-0.359216f, +0.001218f, +0.000904f}, - {+0.107642f, -0.001544f, +0.000220f}, - {+0.072571f, -0.000752f, +0.000715f}, - {+0.237634f, +0.007061f, -0.001792f}, - {-0.001551f, +0.003678f, +0.000322f}, - {-0.181633f, -0.003122f, +0.001514f}, - {-0.255564f, -0.003731f, +0.002293f}, - {+0.032826f, +0.012636f, -0.002484f}, - {+0.185211f, -0.004024f, -0.002705f}, - {+0.094101f, -0.001623f, +0.001061f} - }, - { - {+0.715808f, +0.001447f, -0.000564f}, - {+0.858599f, -0.000128f, -0.000166f}, - {+0.099314f, +0.001041f, +0.001297f}, - {+0.448457f, -0.007760f, -0.000064f}, - {+0.248826f, -0.008996f, -0.001277f}, - {+0.041985f, -0.000319f, +0.000791f}, - {-0.330901f, -0.006650f, -0.000552f}, - {+0.113746f, +0.002963f, -0.001774f}, - {+0.073588f, -0.000327f, +0.000159f}, - {+0.253601f, -0.004683f, +0.000245f}, - {+0.041369f, -0.004973f, -0.002735f}, - {-0.166731f, -0.003863f, -0.000533f}, - {-0.246518f, -0.001268f, -0.000049f}, - {+0.057814f, -0.010629f, +0.001615f}, - {+0.147641f, +0.004485f, +0.000244f}, - {+0.070521f, +0.005007f, +0.001670f} - }, - { - {+0.720382f, +0.001583f, -0.001168f}, - {+0.858507f, -0.001602f, -0.000561f}, - {+0.067329f, -0.015190f, +0.000273f}, - {+0.450274f, -0.005070f, +0.000753f}, - {+0.271109f, +0.002256f, -0.000399f}, - {+0.028488f, -0.011815f, -0.001154f}, - {-0.292330f, +0.012166f, +0.000199f}, - {+0.120202f, +0.001560f, -0.002785f}, - {+0.077618f, +0.000385f, -0.000057f}, - {+0.267478f, -0.001019f, -0.000455f}, - {+0.074822f, +0.008817f, -0.002528f}, - {-0.138952f, +0.011104f, +0.000590f}, - {-0.231196f, +0.009528f, +0.001492f}, - {+0.074656f, -0.000989f, +0.002061f}, - {+0.113858f, -0.008628f, +0.000648f}, - {+0.041189f, -0.009773f, +0.000867f} - }, - { - {+0.728412f, -0.003781f, -0.000442f}, - {+0.858915f, +0.000641f, -0.001243f}, - {+0.021588f, +0.015568f, -0.003718f}, - {+0.435021f, +0.011190f, -0.002580f}, - {+0.286107f, +0.000454f, -0.002042f}, - {-0.001012f, +0.010763f, -0.004584f}, - {-0.248323f, -0.011164f, +0.001788f}, - {+0.134196f, -0.006281f, -0.001978f}, - {+0.082702f, +0.001367f, -0.001190f}, - {+0.278772f, +0.000302f, -0.002741f}, - {+0.102933f, -0.009391f, +0.000025f}, - {-0.103537f, -0.008673f, +0.002139f}, - {-0.211947f, -0.006496f, +0.004418f}, - {+0.077185f, +0.005220f, -0.000312f}, - {+0.087037f, +0.006765f, -0.000943f}, - {+0.005530f, +0.010882f, -0.000993f} - }, - { - {+0.738976f, +0.002329f, +0.000136f}, - {+0.861896f, -0.000932f, -0.002377f}, - {-0.029402f, -0.003271f, -0.002468f}, - {+0.408989f, -0.003243f, -0.003584f}, - {+0.293612f, +0.002313f, -0.002730f}, - {-0.038002f, -0.000412f, -0.002803f}, - {-0.206194f, +0.003320f, +0.000488f}, - {+0.155421f, +0.006078f, -0.001116f}, - {+0.087818f, +0.003223f, -0.001518f}, - {+0.285833f, +0.006231f, -0.001960f}, - {+0.128249f, +0.001074f, +0.000243f}, - {-0.068575f, +0.002940f, +0.000700f}, - {-0.191804f, -0.003014f, +0.002724f}, - {+0.067942f, -0.005643f, -0.002245f}, - {+0.068213f, -0.000980f, -0.001053f}, - {-0.030778f, -0.002407f, -0.000036f} - }, - { - {+0.750300f, +0.000058f, -0.000825f}, - {+0.866279f, -0.001749f, -0.003432f}, - {-0.078123f, -0.003921f, +0.005991f}, - {+0.379010f, -0.005518f, +0.002243f}, - {+0.292486f, -0.009941f, +0.001947f}, - {-0.075433f, -0.005336f, +0.005378f}, - {-0.170771f, -0.002341f, -0.003169f}, - {+0.177886f, -0.005886f, -0.000679f}, - {+0.091281f, -0.005785f, +0.001198f}, - {+0.285767f, -0.012433f, +0.005156f}, - {+0.152796f, +0.004962f, -0.005079f}, - {-0.040112f, -0.002644f, -0.001940f}, - {-0.171647f, +0.007661f, -0.004705f}, - {+0.053028f, -0.000873f, -0.001571f}, - {+0.054373f, -0.002064f, +0.001211f}, - {-0.062123f, +0.000837f, +0.004082f} - }, - { - {+0.760695f, +0.000187f, -0.002580f}, - {+0.869383f, +0.005374f, -0.001979f}, - {-0.118984f, -0.003432f, +0.014567f}, - {+0.349914f, +0.003949f, +0.011712f}, - {+0.283867f, +0.008607f, +0.011966f}, - {-0.106829f, -0.003798f, +0.012953f}, - {-0.143863f, +0.007735f, -0.004012f}, - {+0.195900f, +0.004792f, +0.000560f}, - {+0.091845f, +0.002959f, +0.004936f}, - {+0.279043f, +0.006225f, +0.015628f}, - {+0.177000f, -0.001330f, -0.012704f}, - {-0.021476f, +0.006516f, -0.001630f}, - {-0.154239f, +0.000969f, -0.011998f}, - {+0.037152f, +0.007671f, +0.004251f}, - {+0.041126f, +0.001005f, +0.004482f}, - {-0.085797f, -0.005363f, +0.006097f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -2773,913 +1862,7 @@ const Word32 leftHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NT { -36711768, 1573569, -861678, } }, }; -#else -const float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.191323f, +0.550462f, -0.164703f}, - {-0.179339f, +0.105827f, +0.022109f}, - {-0.016317f, +0.069138f, -0.026386f}, - {-0.031302f, +0.044550f, -0.011983f}, - {-0.011873f, -0.049933f, +0.022817f}, - {+0.002100f, -0.025417f, +0.008917f}, - {+0.008673f, +0.072165f, -0.030658f}, - {+0.009984f, -0.046099f, +0.014260f}, - {-0.017932f, +0.200113f, -0.071972f}, - {-0.009948f, -0.076380f, +0.035799f}, - {+0.000500f, +0.013211f, -0.007415f}, - {-0.005467f, -0.017109f, +0.007909f}, - {-0.001381f, -0.024397f, +0.011565f}, - {+0.001735f, -0.017167f, +0.009148f}, - {-0.006994f, -0.015041f, +0.007364f}, - {-0.000274f, +0.004190f, -0.001467f} - }, - { - {-0.330036f, +0.333647f, -0.215680f}, - {-0.446962f, -0.557076f, -0.195252f}, - {-0.017152f, +0.086610f, -0.016060f}, - {-0.053984f, +0.030859f, -0.007361f}, - {-0.031663f, -0.050397f, +0.030580f}, - {+0.013130f, +0.075028f, +0.055072f}, - {+0.035680f, +0.080722f, -0.037346f}, - {+0.011258f, -0.044042f, +0.013548f}, - {+0.004710f, +0.152351f, -0.099878f}, - {-0.054304f, -0.216938f, -0.014289f}, - {+0.014461f, +0.090558f, +0.026436f}, - {-0.019523f, -0.056800f, -0.001967f}, - {-0.012667f, -0.065948f, -0.004877f}, - {-0.011111f, -0.088384f, -0.022179f}, - {-0.018869f, -0.025704f, +0.006997f}, - {+0.000817f, +0.008300f, +0.000651f} - }, - { - {-0.096856f, -0.591788f, +0.084769f}, - {-0.247542f, -1.016515f, -0.073842f}, - {-0.000574f, +0.046908f, -0.004371f}, - {-0.019540f, +0.031177f, -0.013825f}, - {-0.037796f, +0.124420f, -0.041797f}, - {-0.007360f, +0.192733f, +0.007619f}, - {+0.072377f, -0.160383f, +0.061576f}, - {-0.003711f, +0.021943f, -0.004227f}, - {+0.112964f, -0.363004f, +0.093285f}, - {-0.056746f, -0.090813f, -0.072980f}, - {+0.006103f, +0.134417f, +0.008866f}, - {-0.005326f, -0.101653f, +0.016759f}, - {-0.002749f, -0.090650f, +0.006843f}, - {-0.000089f, -0.179843f, +0.016051f}, - {+0.001814f, -0.087437f, +0.037078f}, - {+0.005267f, -0.010738f, +0.007098f} - }, - { - {+0.063555f, -0.411417f, +0.075756f}, - {+0.093014f, -0.372322f, +0.077805f}, - {+0.007107f, +0.054992f, -0.008311f}, - {+0.033886f, +0.080359f, -0.013428f}, - {+0.014436f, +0.207733f, -0.015885f}, - {-0.013408f, +0.128849f, -0.020860f}, - {+0.024255f, -0.374328f, -0.023256f}, - {-0.002134f, +0.023939f, +0.000696f}, - {+0.058983f, -0.666227f, -0.050398f}, - {-0.014357f, -0.059836f, -0.078919f}, - {-0.009066f, +0.055606f, -0.025373f}, - {-0.008234f, -0.193844f, -0.040018f}, - {+0.010778f, -0.088365f, +0.004018f}, - {+0.007190f, -0.141067f, +0.033486f}, - {+0.015950f, -0.182801f, -0.014037f}, - {-0.004549f, -0.103305f, -0.035896f} - }, - { - {+0.019484f, -0.338410f, +0.083536f}, - {+0.202040f, -0.634536f, +0.185332f}, - {+0.007949f, -0.067812f, +0.047529f}, - {+0.048582f, -0.153833f, +0.075433f}, - {+0.054773f, -0.008273f, +0.058696f}, - {+0.024929f, -0.021715f, +0.041866f}, - {-0.026392f, -0.170362f, -0.104628f}, - {+0.014816f, -0.001719f, +0.003760f}, - {-0.050384f, -0.474129f, -0.111890f}, - {+0.050928f, -0.326828f, +0.037272f}, - {-0.005968f, +0.019903f, -0.009428f}, - {-0.002366f, -0.233633f, -0.019586f}, - {+0.014235f, -0.074982f, -0.008001f}, - {-0.003852f, +0.000864f, -0.026540f}, - {+0.024596f, -0.140123f, -0.045292f}, - {+0.007335f, -0.140212f, -0.016737f} - }, - { - {-0.203259f, -0.677311f, +0.036974f}, - {-0.017307f, -0.878070f, +0.170118f}, - {-0.043215f, -0.181813f, +0.012035f}, - {-0.067120f, -0.199982f, +0.078357f}, - {-0.003334f, -0.005382f, +0.060963f}, - {+0.037369f, -0.095076f, +0.002797f}, - {-0.007145f, +0.024172f, -0.016239f}, - {+0.025809f, +0.035193f, +0.010462f}, - {-0.123278f, -0.317455f, +0.005941f}, - {+0.071780f, -0.152842f, +0.115403f}, - {-0.009047f, +0.007435f, -0.015219f}, - {+0.009240f, -0.131025f, +0.037457f}, - {+0.010330f, -0.013791f, +0.019556f}, - {+0.018073f, +0.051639f, -0.007415f}, - {+0.023065f, +0.024816f, +0.028060f}, - {+0.023145f, -0.072535f, +0.012653f} - }, - { - {-0.363585f, -0.196908f, -0.132849f}, - {-0.400794f, +0.061111f, -0.146774f}, - {-0.088996f, -0.035461f, -0.039728f}, - {-0.248102f, +0.210034f, -0.044008f}, - {-0.136603f, +0.269455f, -0.014678f}, - {+0.039867f, -0.056544f, -0.018785f}, - {+0.012335f, -0.061064f, +0.014746f}, - {+0.001640f, +0.021263f, +0.019567f}, - {-0.164395f, -0.120409f, -0.065761f}, - {+0.005008f, +0.124444f, +0.002355f}, - {-0.006089f, -0.036166f, +0.003168f}, - {+0.008972f, -0.027316f, -0.008811f}, - {-0.026456f, +0.074066f, -0.007831f}, - {+0.036264f, -0.025445f, +0.017552f}, - {-0.046783f, +0.110385f, +0.011511f}, - {+0.016634f, -0.063190f, +0.003470f} - }, - { - {-0.140043f, +0.331564f, +0.031879f}, - {-0.418213f, +0.323867f, -0.026950f}, - {-0.066524f, +0.078043f, +0.003209f}, - {-0.275295f, +0.106284f, -0.069212f}, - {-0.205855f, +0.059809f, -0.074823f}, - {+0.024267f, +0.018141f, +0.016347f}, - {+0.021686f, -0.056152f, +0.012278f}, - {-0.065157f, -0.071098f, -0.001681f}, - {-0.025332f, +0.159594f, +0.013561f}, - {-0.029475f, +0.035218f, -0.023811f}, - {-0.011328f, -0.030605f, +0.007685f}, - {+0.054740f, +0.020295f, +0.000302f}, - {-0.047455f, +0.027854f, -0.019731f}, - {+0.022053f, -0.039858f, +0.012679f}, - {-0.116347f, -0.040132f, -0.032026f}, - {-0.007321f, -0.043491f, +0.015668f} - }, - { - {+0.232420f, -0.042183f, +0.090352f}, - {-0.143907f, -0.128870f, +0.081606f}, - {-0.019255f, -0.008481f, +0.025359f}, - {-0.079364f, -0.195197f, +0.009060f}, - {-0.092435f, -0.165349f, -0.007306f}, - {-0.037358f, +0.066958f, +0.009347f}, - {+0.002010f, -0.000201f, -0.007048f}, - {-0.118479f, -0.000141f, -0.016298f}, - {+0.131479f, -0.025371f, +0.046423f}, - {-0.013254f, -0.056073f, +0.007964f}, - {-0.020421f, +0.014051f, -0.008057f}, - {+0.102505f, -0.044999f, +0.012472f}, - {-0.028717f, -0.037569f, +0.002612f}, - {-0.021286f, +0.036718f, -0.008001f}, - {-0.110557f, -0.093273f, -0.012580f}, - {-0.060924f, +0.023756f, -0.000190f} - }, - { - {+0.533983f, -0.079000f, +0.018330f}, - {+0.217748f, -0.012931f, +0.048151f}, - {+0.025802f, -0.036354f, +0.006267f}, - {+0.205140f, +0.060899f, +0.046660f}, - {+0.113290f, +0.081234f, +0.041909f}, - {-0.105415f, -0.030348f, -0.015181f}, - {-0.034112f, -0.007984f, -0.002032f}, - {-0.109019f, +0.032142f, -0.005021f}, - {+0.186112f, -0.090334f, +0.010289f}, - {+0.018376f, -0.004638f, +0.018235f}, - {-0.011521f, +0.024596f, -0.005093f}, - {+0.106685f, -0.043319f, +0.011207f}, - {+0.003719f, +0.002813f, +0.009833f}, - {-0.061529f, +0.014049f, -0.008239f}, - {-0.045872f, +0.041391f, +0.025100f}, - {-0.106073f, -0.025839f, -0.009219f} - }, - { - {+0.689088f, +0.021676f, -0.035498f}, - {+0.512497f, +0.013050f, -0.008139f}, - {+0.080900f, -0.013233f, -0.008488f}, - {+0.415840f, +0.041814f, +0.013996f}, - {+0.278767f, +0.050484f, +0.020716f}, - {-0.124237f, -0.048494f, -0.003541f}, - {-0.083860f, +0.012095f, -0.001839f}, - {-0.040470f, -0.043256f, +0.009440f}, - {+0.127554f, +0.052174f, -0.027560f}, - {+0.038197f, +0.025553f, +0.002386f}, - {+0.013296f, -0.017618f, +0.006802f}, - {+0.049000f, +0.034411f, -0.008434f}, - {+0.023951f, +0.015385f, +0.000397f}, - {-0.079741f, -0.014689f, +0.006056f}, - {+0.015937f, +0.036771f, +0.013501f}, - {-0.116284f, -0.032742f, -0.005608f} - }, - { - {+0.733240f, +0.033897f, -0.028463f}, - {+0.683283f, +0.019108f, -0.024422f}, - {+0.165878f, +0.024612f, -0.005353f}, - {+0.489377f, -0.026929f, -0.018187f}, - {+0.343135f, -0.029846f, -0.016631f}, - {-0.086256f, +0.016816f, +0.014815f}, - {-0.129107f, +0.000075f, +0.000830f}, - {+0.047145f, -0.000801f, +0.008881f}, - {+0.023844f, +0.003992f, -0.023086f}, - {+0.042301f, -0.008336f, -0.009579f}, - {+0.039371f, -0.014019f, +0.003266f}, - {-0.037930f, -0.005491f, -0.006528f}, - {+0.020403f, -0.000483f, -0.004551f}, - {-0.081119f, -0.016241f, +0.003920f}, - {+0.051945f, -0.020771f, -0.013605f}, - {-0.091078f, +0.021518f, +0.009604f} - }, - { - {+0.733114f, -0.029809f, -0.003150f}, - {+0.758988f, -0.025935f, -0.015102f}, - {+0.280906f, -0.031811f, -0.003778f}, - {+0.459117f, +0.008405f, -0.019040f}, - {+0.333055f, -0.004022f, -0.017856f}, - {-0.012149f, +0.009636f, +0.003754f}, - {-0.156853f, +0.003236f, +0.004887f}, - {+0.114968f, +0.002815f, -0.004184f}, - {-0.064559f, -0.023528f, +0.001333f}, - {+0.039134f, -0.015161f, -0.005522f}, - {+0.063282f, -0.001881f, -0.005278f}, - {-0.121057f, +0.006821f, +0.003568f}, - {-0.006828f, +0.002343f, -0.000194f}, - {-0.069156f, -0.009861f, -0.001545f}, - {+0.070362f, -0.029774f, -0.011253f}, - {-0.061366f, +0.013312f, +0.005905f} - }, - { - {+0.724625f, -0.001203f, +0.006316f}, - {+0.787100f, +0.019364f, -0.003117f}, - {+0.401617f, +0.025467f, -0.004330f}, - {+0.392760f, +0.000769f, -0.009132f}, - {+0.296783f, +0.006051f, -0.006244f}, - {+0.080677f, +0.011855f, -0.011409f}, - {-0.155686f, -0.003923f, +0.003032f}, - {+0.152027f, +0.011289f, -0.005772f}, - {-0.122199f, -0.008679f, +0.013528f}, - {+0.032224f, +0.005650f, +0.003051f}, - {+0.086101f, +0.012645f, -0.003029f}, - {-0.171824f, -0.008018f, +0.006233f}, - {-0.049811f, -0.010853f, +0.002128f}, - {-0.046385f, +0.014661f, +0.005149f}, - {+0.075593f, +0.018900f, +0.006819f}, - {-0.042682f, -0.001204f, -0.002701f} - }, - { - {+0.710313f, +0.016351f, +0.000594f}, - {+0.788202f, +0.001698f, +0.001880f}, - {+0.478276f, -0.009988f, -0.006465f}, - {+0.338553f, -0.006580f, +0.000873f}, - {+0.267876f, -0.004181f, +0.000561f}, - {+0.161632f, -0.031504f, -0.010015f}, - {-0.112024f, -0.007981f, -0.001560f}, - {+0.161078f, -0.006395f, +0.000785f}, - {-0.159938f, +0.023767f, +0.006167f}, - {+0.016977f, +0.011649f, +0.002458f}, - {+0.101033f, -0.005466f, +0.000979f}, - {-0.168147f, -0.002987f, +0.004477f}, - {-0.090853f, +0.008103f, +0.002155f}, - {-0.019160f, +0.010061f, +0.003516f}, - {+0.068113f, +0.017356f, +0.008667f}, - {-0.034415f, -0.006094f, -0.000653f} - }, - { - {+0.687296f, -0.010309f, -0.005056f}, - {+0.764260f, -0.015559f, -0.000832f}, - {+0.464886f, -0.002946f, -0.003297f}, - {+0.298384f, -0.012876f, +0.002489f}, - {+0.246598f, -0.005940f, +0.001267f}, - {+0.184060f, +0.014332f, +0.000763f}, - {-0.024137f, +0.022250f, -0.004819f}, - {+0.154151f, -0.010440f, +0.001340f}, - {-0.181725f, -0.011644f, -0.002738f}, - {-0.007528f, -0.010988f, -0.002133f}, - {+0.103221f, -0.002109f, +0.001628f}, - {-0.103776f, +0.007568f, -0.001735f}, - {-0.108578f, +0.000395f, +0.003349f}, - {+0.017935f, -0.001653f, -0.006823f}, - {+0.063247f, -0.018078f, -0.002599f}, - {-0.031929f, -0.003751f, +0.000579f} - }, - { - {+0.659915f, +0.003181f, -0.004789f}, - {+0.723641f, +0.015598f, -0.004701f}, - {+0.344320f, +0.034439f, +0.003396f}, - {+0.252485f, +0.010951f, -0.000869f}, - {+0.213766f, +0.011294f, -0.001229f}, - {+0.112272f, +0.023126f, +0.008479f}, - {+0.086512f, -0.032942f, -0.003959f}, - {+0.151070f, +0.005416f, -0.003241f}, - {-0.183618f, -0.008669f, -0.002985f}, - {-0.037360f, +0.003147f, -0.002379f}, - {+0.095879f, +0.005536f, +0.000670f}, - {+0.009973f, -0.033041f, -0.006312f}, - {-0.086652f, -0.000941f, +0.001227f}, - {+0.070708f, -0.028404f, -0.005854f}, - {+0.082798f, -0.007130f, -0.008870f}, - {-0.024953f, -0.002080f, -0.001188f} - }, - { - {+0.634763f, -0.001208f, -0.002397f}, - {+0.683670f, -0.007693f, -0.006039f}, - {+0.143818f, -0.065248f, +0.001626f}, - {+0.187585f, -0.010607f, +0.001657f}, - {+0.155102f, -0.012347f, -0.000836f}, - {-0.047669f, -0.064360f, +0.004465f}, - {+0.176375f, +0.020282f, -0.000832f}, - {+0.166599f, +0.005868f, -0.005383f}, - {-0.165581f, +0.017111f, +0.003241f}, - {-0.067470f, +0.001639f, +0.002026f}, - {+0.090399f, -0.004464f, -0.000923f}, - {+0.138735f, +0.040116f, -0.001857f}, - {-0.018624f, +0.015969f, -0.003767f}, - {+0.124121f, +0.022397f, +0.003509f}, - {+0.132318f, +0.030070f, -0.004033f}, - {-0.005451f, +0.010583f, +0.000461f} - }, - { - {+0.613639f, +0.002441f, -0.000996f}, - {+0.658994f, -0.004033f, -0.003708f}, - {-0.066781f, +0.052613f, -0.005380f}, - {+0.103141f, +0.024662f, +0.003094f}, - {+0.069224f, +0.020885f, +0.001016f}, - {-0.237901f, +0.057325f, -0.006669f}, - {+0.198251f, +0.008139f, -0.001238f}, - {+0.196297f, -0.014019f, -0.004087f}, - {-0.137085f, -0.006189f, +0.006787f}, - {-0.092626f, +0.005231f, +0.005081f}, - {+0.098805f, +0.001528f, -0.003973f}, - {+0.227978f, -0.011869f, +0.001188f}, - {+0.083502f, -0.031761f, -0.003653f}, - {+0.154304f, +0.003532f, +0.005157f}, - {+0.192731f, -0.026618f, +0.005738f}, - {+0.025619f, -0.008251f, +0.002697f} - }, - { - {+0.592443f, -0.004265f, -0.000675f}, - {+0.651475f, +0.007639f, +0.001077f}, - {-0.211884f, -0.008375f, -0.003618f}, - {+0.015847f, -0.026610f, -0.001288f}, - {-0.030980f, -0.024402f, +0.000682f}, - {-0.377865f, -0.004628f, -0.005328f}, - {+0.127740f, -0.031243f, -0.004692f}, - {+0.216064f, +0.008428f, -0.000840f}, - {-0.107665f, -0.004148f, +0.003207f}, - {-0.104222f, -0.007982f, +0.002781f}, - {+0.121055f, +0.007151f, -0.006643f}, - {+0.232842f, -0.021111f, -0.004010f}, - {+0.181984f, +0.020598f, -0.002112f}, - {+0.154857f, -0.016563f, -0.001311f}, - {+0.234230f, -0.006972f, +0.006138f}, - {+0.062816f, -0.000374f, -0.000261f} - }, - { - {+0.565815f, +0.006621f, -0.000731f}, - {+0.652157f, +0.001839f, +0.002786f}, - {-0.256941f, -0.016709f, +0.005201f}, - {-0.049457f, +0.004802f, -0.002568f}, - {-0.121870f, +0.014390f, +0.001453f}, - {-0.418806f, -0.025565f, +0.008436f}, - {-0.023252f, +0.033441f, -0.003455f}, - {+0.192750f, +0.014454f, -0.000969f}, - {-0.080190f, +0.006138f, -0.004702f}, - {-0.090978f, -0.000288f, -0.001642f}, - {+0.136520f, -0.012063f, -0.004637f}, - {+0.143202f, +0.027531f, -0.007344f}, - {+0.230859f, -0.004544f, -0.002668f}, - {+0.140224f, +0.009293f, -0.007214f}, - {+0.242282f, +0.025199f, -0.006229f}, - {+0.100859f, -0.005416f, -0.004924f} - }, - { - {+0.532337f, -0.007417f, -0.000543f}, - {+0.652955f, -0.010368f, -0.001740f}, - {-0.220699f, +0.013404f, +0.007323f}, - {-0.077945f, +0.013141f, +0.004826f}, - {-0.182039f, -0.009934f, +0.002503f}, - {-0.362601f, +0.019757f, +0.014603f}, - {-0.211924f, -0.030990f, +0.005294f}, - {+0.105625f, -0.028087f, -0.003678f}, - {-0.054535f, +0.015575f, -0.006139f}, - {-0.049202f, +0.015528f, -0.003083f}, - {+0.111395f, +0.002877f, +0.002743f}, - {-0.015299f, -0.023373f, +0.001099f}, - {+0.201870f, -0.009975f, -0.000096f}, - {+0.130715f, +0.012877f, -0.003882f}, - {+0.221564f, -0.009858f, -0.016146f}, - {+0.132494f, +0.017520f, -0.002095f} - }, - { - {+0.495834f, +0.008532f, -0.000369f}, - {+0.652356f, +0.003292f, -0.006811f}, - {-0.149624f, -0.011936f, +0.002662f}, - {-0.071256f, -0.002030f, +0.009341f}, - {-0.200363f, +0.000872f, +0.001071f}, - {-0.238216f, -0.009887f, +0.004541f}, - {-0.381151f, +0.041781f, +0.008291f}, - {-0.039667f, +0.026941f, +0.000063f}, - {-0.036683f, -0.023635f, +0.004916f}, - {+0.009186f, -0.024708f, +0.001260f}, - {+0.023299f, +0.026996f, +0.008496f}, - {-0.194696f, +0.039072f, +0.009744f}, - {+0.098003f, +0.033287f, +0.002536f}, - {+0.131758f, -0.006621f, +0.002658f}, - {+0.173806f, -0.018597f, -0.006932f}, - {+0.145380f, -0.006223f, +0.004430f} - }, - { - {+0.463299f, -0.007155f, -0.000770f}, - {+0.648076f, +0.009295f, -0.004610f}, - {-0.089513f, +0.010398f, +0.000359f}, - {-0.033244f, -0.002975f, +0.003236f}, - {-0.178153f, +0.013477f, +0.001343f}, - {-0.077802f, +0.029144f, -0.007460f}, - {-0.474851f, -0.029171f, -0.001803f}, - {-0.217055f, -0.041281f, +0.004828f}, - {-0.037249f, -0.008239f, +0.011497f}, - {+0.059921f, +0.009759f, +0.005233f}, - {-0.114758f, -0.056676f, +0.002229f}, - {-0.334964f, -0.046076f, +0.002995f}, - {-0.042473f, -0.043913f, -0.000922f}, - {+0.133390f, -0.007415f, +0.001167f}, - {+0.081735f, -0.007332f, +0.010523f}, - {+0.133499f, -0.015420f, +0.003583f} - }, - { - {+0.441203f, +0.002482f, -0.000824f}, - {+0.629545f, -0.003537f, +0.002292f}, - {-0.068500f, -0.000883f, +0.001586f}, - {+0.038519f, -0.014498f, -0.003426f}, - {-0.131180f, -0.015847f, +0.003732f}, - {+0.083693f, -0.047317f, -0.005981f}, - {-0.461803f, -0.022290f, -0.008344f}, - {-0.384732f, +0.037693f, +0.003505f}, - {-0.048144f, +0.029049f, +0.001374f}, - {+0.084768f, +0.008739f, +0.001947f}, - {-0.251499f, +0.035994f, -0.008053f}, - {-0.379916f, +0.000042f, -0.006724f}, - {-0.160178f, +0.020677f, -0.004025f}, - {+0.124411f, +0.010697f, -0.004992f}, - {-0.067302f, +0.056203f, +0.010926f}, - {+0.110573f, +0.015976f, -0.002867f} - }, - { - {+0.430897f, +0.000433f, -0.000350f}, - {+0.586004f, -0.017187f, +0.004129f}, - {-0.087700f, -0.011728f, +0.002208f}, - {+0.139979f, +0.032148f, -0.002572f}, - {-0.080931f, +0.008008f, +0.004145f}, - {+0.204274f, +0.031020f, +0.002988f}, - {-0.365555f, +0.057171f, +0.001535f}, - {-0.496090f, -0.014326f, +0.002762f}, - {-0.036347f, -0.000076f, -0.009610f}, - {+0.087371f, -0.006753f, -0.002953f}, - {-0.332582f, +0.010055f, -0.004412f}, - {-0.314151f, +0.048523f, -0.001669f}, - {-0.210677f, +0.006259f, -0.001554f}, - {+0.097223f, +0.002730f, -0.004153f}, - {-0.243214f, -0.058784f, -0.001131f}, - {+0.100970f, +0.001509f, -0.005827f} - }, - { - {+0.427847f, -0.001191f, +0.000192f}, - {+0.522040f, +0.027328f, -0.001322f}, - {-0.123746f, +0.015960f, -0.000425f}, - {+0.250557f, -0.029225f, +0.001401f}, - {-0.041411f, +0.001671f, +0.000435f}, - {+0.251666f, +0.011713f, +0.002737f}, - {-0.259410f, -0.030558f, +0.013501f}, - {-0.523363f, -0.008886f, +0.005097f}, - {+0.023565f, -0.037779f, -0.005281f}, - {+0.085570f, -0.002595f, -0.003055f}, - {-0.343956f, -0.022947f, +0.008052f}, - {-0.182050f, -0.049717f, +0.010139f}, - {-0.188646f, -0.025113f, +0.004590f}, - {+0.043971f, +0.008025f, +0.002158f}, - {-0.383316f, +0.019159f, -0.004800f}, - {+0.118679f, -0.020135f, -0.001036f} - }, - { - {+0.424775f, -0.001427f, +0.000274f}, - {+0.458547f, -0.013186f, -0.005324f}, - {-0.143005f, -0.001551f, -0.002520f}, - {+0.342091f, +0.013355f, +0.001866f}, - {-0.012473f, +0.005183f, -0.002228f}, - {+0.229007f, -0.024031f, -0.004922f}, - {-0.213143f, -0.021386f, +0.008846f}, - {-0.469349f, +0.018839f, +0.005224f}, - {+0.120107f, +0.037044f, +0.005367f}, - {+0.094940f, +0.009229f, +0.000146f}, - {-0.312164f, +0.002650f, +0.009985f}, - {-0.056636f, +0.008288f, +0.009234f}, - {-0.124730f, +0.013388f, +0.006509f}, - {-0.037461f, -0.023127f, +0.003625f}, - {-0.438903f, +0.013352f, +0.002069f}, - {+0.155431f, +0.012048f, +0.004072f} - }, - { - {+0.415850f, +0.004534f, -0.000668f}, - {+0.414572f, -0.002652f, -0.002367f}, - {-0.124613f, -0.010725f, -0.002281f}, - {+0.397126f, -0.000677f, -0.001120f}, - {+0.014003f, -0.010619f, +0.000267f}, - {+0.170253f, +0.018842f, -0.008960f}, - {-0.241128f, +0.034417f, -0.004698f}, - {-0.359282f, -0.033550f, +0.005250f}, - {+0.216676f, -0.010427f, +0.006057f}, - {+0.120954f, -0.008613f, +0.002469f}, - {-0.268504f, -0.001802f, +0.003587f}, - {+0.013045f, +0.010217f, -0.002327f}, - {-0.059871f, -0.003931f, +0.001188f}, - {-0.132164f, +0.026563f, +0.001240f}, - {-0.403193f, -0.027848f, +0.009266f}, - {+0.190953f, +0.002021f, +0.001187f} - }, - { - {+0.399726f, -0.003989f, -0.001238f}, - {+0.392346f, +0.005321f, +0.003177f}, - {-0.072827f, +0.023138f, +0.000364f}, - {+0.417980f, -0.003176f, -0.003953f}, - {+0.044470f, +0.006065f, +0.002234f}, - {+0.111558f, -0.001243f, -0.006696f}, - {-0.306891f, -0.017879f, -0.010556f}, - {-0.227947f, +0.027747f, +0.006660f}, - {+0.285131f, -0.003545f, -0.002248f}, - {+0.160581f, +0.005372f, +0.001188f}, - {-0.228536f, +0.004194f, +0.000473f}, - {+0.021041f, -0.010096f, -0.009272f}, - {-0.021484f, +0.000358f, -0.003354f}, - {-0.213365f, -0.015260f, -0.000168f}, - {-0.303399f, +0.026027f, +0.011571f}, - {+0.212111f, -0.000447f, -0.003261f} - }, - { - {+0.378407f, +0.003850f, -0.000653f}, - {+0.380175f, +0.007586f, +0.003255f}, - {-0.012127f, -0.017400f, +0.004348f}, - {+0.420589f, +0.000881f, -0.004600f}, - {+0.082045f, -0.000538f, -0.001160f}, - {+0.069379f, -0.007873f, +0.001279f}, - {-0.364957f, -0.009593f, -0.003601f}, - {-0.103978f, -0.012644f, +0.002536f}, - {+0.322327f, -0.004962f, -0.006100f}, - {+0.208381f, -0.007687f, -0.001556f}, - {-0.193755f, -0.004206f, -0.000887f}, - {-0.012722f, -0.002660f, -0.005208f}, - {-0.021028f, +0.002645f, -0.003959f}, - {-0.256559f, +0.000206f, +0.001247f}, - {-0.175255f, -0.013434f, +0.005713f}, - {+0.216424f, -0.004406f, -0.001903f} - }, - { - {+0.355186f, -0.004417f, +0.000047f}, - {+0.367959f, -0.007051f, -0.000589f}, - {+0.030278f, -0.000745f, +0.003677f}, - {+0.419972f, +0.001580f, -0.004098f}, - {+0.126164f, +0.010538f, -0.004622f}, - {+0.036142f, -0.005050f, +0.006483f}, - {-0.395580f, +0.008424f, +0.006868f}, - {+0.004418f, +0.013200f, -0.004102f}, - {+0.338438f, +0.004391f, -0.003969f}, - {+0.257936f, +0.011270f, -0.002562f}, - {-0.157184f, +0.010190f, -0.001022f}, - {-0.066694f, -0.007499f, +0.001955f}, - {-0.058038f, -0.007898f, -0.001836f}, - {-0.252063f, +0.011457f, +0.004218f}, - {-0.038996f, +0.019229f, -0.002930f}, - {+0.207135f, -0.002683f, +0.000920f} - }, - { - {+0.333833f, +0.005141f, -0.000033f}, - {+0.354343f, +0.002376f, -0.001512f}, - {+0.044789f, +0.011943f, -0.002345f}, - {+0.420054f, -0.005203f, -0.002411f}, - {+0.168493f, -0.019086f, -0.001101f}, - {-0.000312f, +0.019974f, +0.002740f}, - {-0.404430f, +0.003854f, +0.008761f}, - {+0.101609f, -0.024344f, -0.004621f}, - {+0.343021f, -0.002003f, -0.002287f}, - {+0.300798f, -0.012232f, -0.000926f}, - {-0.115201f, -0.012523f, +0.000667f}, - {-0.124884f, +0.013322f, +0.003505f}, - {-0.124657f, +0.015080f, +0.000444f}, - {-0.208063f, -0.009838f, +0.004149f}, - {+0.098778f, -0.030234f, -0.005691f}, - {+0.191672f, +0.010274f, -0.000986f} - }, - { - {+0.317651f, -0.003399f, -0.000638f}, - {+0.342009f, -0.000734f, -0.000383f}, - {+0.041234f, -0.003266f, -0.006626f}, - {+0.412818f, +0.000564f, -0.000053f}, - {+0.193269f, +0.005756f, +0.003803f}, - {-0.038455f, -0.012921f, -0.002898f}, - {-0.397973f, -0.006421f, +0.004371f}, - {+0.186407f, +0.018164f, -0.002443f}, - {+0.339213f, -0.001972f, -0.002251f}, - {+0.327935f, +0.003077f, +0.000361f}, - {-0.072360f, +0.008411f, +0.001308f}, - {-0.171731f, -0.013927f, +0.001434f}, - {-0.206591f, -0.018817f, +0.001471f}, - {-0.140714f, +0.015540f, +0.002302f}, - {+0.227639f, +0.031497f, -0.003750f}, - {+0.179263f, -0.004105f, -0.004389f} - }, - { - {+0.307693f, +0.001076f, -0.000945f}, - {+0.334320f, +0.001717f, -0.000049f}, - {+0.033552f, -0.011447f, -0.002121f}, - {+0.387841f, +0.007421f, +0.001088f}, - {+0.192595f, +0.010377f, +0.002843f}, - {-0.067483f, -0.002402f, -0.001682f}, - {-0.373557f, +0.001444f, -0.001449f}, - {+0.251051f, -0.016030f, -0.000496f}, - {+0.323516f, +0.001530f, -0.001658f}, - {+0.335944f, +0.003218f, -0.000567f}, - {-0.034654f, -0.006672f, +0.000906f}, - {-0.193976f, +0.003406f, -0.001146f}, - {-0.284432f, +0.017472f, +0.001142f}, - {-0.067179f, -0.009754f, -0.000138f}, - {+0.329347f, -0.022749f, -0.000471f}, - {+0.172128f, -0.005358f, -0.003493f} - }, - { - {+0.301577f, +0.001184f, -0.000322f}, - {+0.332736f, -0.000666f, -0.000894f}, - {+0.023585f, -0.000609f, +0.003132f}, - {+0.344006f, -0.015803f, +0.000034f}, - {+0.177998f, -0.013137f, -0.002069f}, - {-0.082056f, +0.003433f, +0.002633f}, - {-0.324370f, +0.018955f, -0.002626f}, - {+0.287377f, +0.000225f, -0.000071f}, - {+0.290720f, -0.007672f, -0.000038f}, - {+0.329996f, -0.006498f, -0.002605f}, - {-0.003682f, +0.004563f, +0.000624f}, - {-0.185737f, +0.009876f, -0.000494f}, - {-0.338831f, -0.008465f, +0.000490f}, - {-0.000651f, +0.014424f, -0.001842f}, - {+0.385445f, -0.000494f, -0.001075f}, - {+0.160154f, +0.003230f, +0.000530f} - }, - { - {+0.294359f, +0.001008f, +0.000587f}, - {+0.335716f, -0.002537f, -0.000929f}, - {+0.006697f, +0.010781f, +0.001057f}, - {+0.292769f, +0.014442f, -0.002216f}, - {+0.173218f, -0.002305f, -0.004071f}, - {-0.084637f, +0.001890f, +0.003059f}, - {-0.253587f, -0.025906f, +0.002221f}, - {+0.295508f, +0.003624f, -0.001780f}, - {+0.240102f, +0.014422f, -0.000050f}, - {+0.320004f, -0.000226f, -0.002968f}, - {+0.025595f, -0.006552f, +0.001052f}, - {-0.154653f, -0.014381f, +0.002635f}, - {-0.357893f, -0.004680f, +0.001836f}, - {+0.050259f, -0.009177f, -0.001013f}, - {+0.390921f, +0.011091f, -0.005488f}, - {+0.128396f, +0.010797f, +0.002030f} - }, - { - {+0.281980f, -0.004479f, +0.000473f}, - {+0.338235f, +0.000938f, -0.000317f}, - {-0.016443f, -0.008216f, -0.002310f}, - {+0.250822f, -0.005381f, -0.002547f}, - {+0.194113f, +0.011993f, -0.002133f}, - {-0.078814f, -0.001480f, +0.000683f}, - {-0.178794f, +0.013791f, +0.004329f}, - {+0.286440f, -0.008258f, -0.003815f}, - {+0.180165f, -0.014312f, -0.000718f}, - {+0.312559f, +0.001222f, -0.001335f}, - {+0.061211f, +0.002642f, -0.000385f}, - {-0.117426f, +0.006897f, +0.004033f}, - {-0.342706f, +0.010139f, +0.004471f}, - {+0.079430f, +0.002660f, -0.001268f}, - {+0.356398f, -0.011250f, -0.007640f}, - {+0.072072f, -0.018003f, +0.000575f} - }, - { - {+0.264584f, +0.006225f, -0.000553f}, - {+0.334355f, +0.002104f, -0.000390f}, - {-0.041411f, +0.000660f, -0.001379f}, - {+0.227742f, -0.002231f, -0.000499f}, - {+0.236723f, -0.015277f, -0.000143f}, - {-0.066692f, -0.002089f, -0.000940f}, - {-0.116641f, -0.003621f, +0.000856f}, - {+0.274189f, -0.002260f, -0.003775f}, - {+0.124476f, +0.010538f, -0.000672f}, - {+0.307116f, -0.000375f, -0.000391f}, - {+0.109323f, -0.010339f, -0.003218f}, - {-0.087624f, +0.002282f, +0.001095f}, - {-0.305220f, -0.004246f, +0.003226f}, - {+0.088209f, -0.001890f, -0.000514f}, - {+0.297714f, +0.002109f, -0.002943f}, - {+0.002305f, +0.018254f, -0.000698f} - }, - { - {+0.245860f, -0.004071f, -0.001278f}, - {+0.320735f, -0.004451f, -0.000718f}, - {-0.064973f, -0.003268f, +0.001022f}, - {+0.221237f, +0.003408f, +0.001969f}, - {+0.282979f, +0.012181f, +0.001619f}, - {-0.050139f, +0.005534f, -0.000714f}, - {-0.071497f, +0.004571f, -0.002571f}, - {+0.265456f, +0.000937f, -0.001591f}, - {+0.084560f, -0.004757f, +0.000011f}, - {+0.300229f, -0.001315f, +0.000134f}, - {+0.168137f, +0.018612f, -0.002406f}, - {-0.066781f, +0.001637f, -0.001882f}, - {-0.257378f, +0.011005f, +0.000980f}, - {+0.083095f, -0.005045f, -0.000085f}, - {+0.224972f, -0.016565f, +0.001685f}, - {-0.061472f, -0.012660f, -0.001272f} - }, - { - {+0.229589f, +0.000720f, -0.000554f}, - {+0.297388f, +0.006061f, -0.000830f}, - {-0.086308f, +0.008311f, -0.000100f}, - {+0.220891f, +0.005343f, +0.000760f}, - {+0.312804f, +0.002048f, +0.000535f}, - {-0.033600f, -0.001954f, -0.000821f}, - {-0.037726f, -0.009547f, -0.001800f}, - {+0.256770f, -0.001354f, -0.000172f}, - {+0.064615f, +0.001499f, +0.000378f}, - {+0.288880f, +0.006082f, -0.000716f}, - {+0.223988f, -0.015499f, +0.000654f}, - {-0.048524f, -0.007439f, -0.000777f}, - {-0.208116f, -0.011040f, +0.001557f}, - {+0.074335f, +0.004704f, -0.001723f}, - {+0.146222f, +0.020815f, +0.000166f}, - {-0.103517f, +0.003200f, -0.000724f} - }, - { - {+0.216659f, -0.000775f, +0.000774f}, - {+0.266859f, -0.007292f, -0.000934f}, - {-0.105304f, -0.004788f, -0.002437f}, - {+0.217403f, -0.003973f, -0.002583f}, - {+0.318044f, -0.007929f, -0.003539f}, - {-0.023696f, +0.000702f, -0.001989f}, - {-0.008068f, +0.006711f, +0.000114f}, - {+0.242367f, -0.004361f, +0.000832f}, - {+0.061343f, +0.003214f, +0.000949f}, - {+0.273736f, -0.004941f, -0.002356f}, - {+0.260361f, +0.001261f, +0.000909f}, - {-0.027365f, +0.006696f, +0.001482f}, - {-0.163814f, +0.008052f, +0.001931f}, - {+0.071141f, -0.000562f, -0.003221f}, - {+0.073591f, -0.015255f, -0.001489f}, - {-0.121162f, +0.004631f, +0.001675f} - }, - { - {+0.205784f, +0.003757f, +0.000700f}, - {+0.232994f, +0.005953f, -0.000561f}, - {-0.123682f, -0.003377f, -0.000485f}, - {+0.205753f, -0.000981f, -0.002067f}, - {+0.304943f, +0.001966f, -0.004525f}, - {-0.026104f, -0.002420f, -0.000748f}, - {+0.021981f, -0.003022f, -0.000957f}, - {+0.220204f, +0.009944f, -0.000624f}, - {+0.066717f, -0.001208f, +0.001408f}, - {+0.258003f, -0.000477f, -0.001518f}, - {+0.270472f, +0.007879f, -0.002698f}, - {-0.001424f, -0.001591f, +0.000485f}, - {-0.125885f, -0.003310f, +0.000529f}, - {+0.074527f, -0.008121f, -0.001699f}, - {+0.017069f, +0.005535f, -0.000272f}, - {-0.124829f, -0.001926f, +0.003798f} - }, - { - {+0.196417f, -0.003644f, -0.000603f}, - {+0.199207f, -0.006086f, +0.000295f}, - {-0.146052f, -0.001687f, +0.003740f}, - {+0.182052f, -0.002076f, +0.001266f}, - {+0.282909f, +0.000690f, -0.001105f}, - {-0.044152f, -0.004210f, +0.001817f}, - {+0.054138f, +0.007409f, -0.002335f}, - {+0.196668f, -0.006189f, -0.002331f}, - {+0.072925f, -0.001260f, +0.000239f}, - {+0.242629f, -0.000541f, +0.000943f}, - {+0.260897f, -0.003994f, -0.004883f}, - {+0.029070f, +0.005485f, -0.001962f}, - {-0.092855f, +0.004046f, -0.001954f}, - {+0.076259f, +0.005415f, +0.002510f}, - {-0.019261f, -0.001366f, +0.002709f}, - {-0.127606f, -0.004435f, +0.002949f} - }, - { - {+0.189173f, +0.000560f, -0.001059f}, - {+0.167547f, +0.008258f, -0.000141f}, - {-0.174715f, +0.013815f, +0.002907f}, - {+0.145627f, +0.012083f, +0.002087f}, - {+0.256566f, +0.006772f, +0.000776f}, - {-0.075271f, +0.013763f, +0.000701f}, - {+0.085309f, -0.009140f, -0.001366f}, - {+0.180099f, +0.000959f, -0.002178f}, - {+0.077061f, -0.000891f, -0.000372f}, - {+0.225986f, +0.007128f, +0.000680f}, - {+0.242442f, +0.000129f, -0.003190f}, - {+0.061120f, -0.011120f, -0.001079f}, - {-0.062759f, -0.011288f, -0.001129f}, - {+0.065406f, +0.009942f, +0.002436f}, - {-0.038027f, +0.005472f, +0.002780f}, - {-0.134062f, +0.004375f, +0.001136f} - }, - { - {+0.183656f, +0.000923f, -0.000164f}, - {+0.139835f, -0.005429f, -0.001020f}, - {-0.202643f, -0.008873f, -0.000639f}, - {+0.102603f, -0.014782f, -0.000700f}, - {+0.227902f, -0.008291f, -0.000524f}, - {-0.108562f, -0.007847f, -0.001593f}, - {+0.108523f, +0.004720f, -0.000054f}, - {+0.172882f, +0.003322f, -0.000542f}, - {+0.078483f, -0.001260f, -0.000596f}, - {+0.207608f, -0.004999f, -0.001085f}, - {+0.221842f, -0.000718f, -0.000351f}, - {+0.087045f, +0.004787f, +0.000547f}, - {-0.037398f, +0.005336f, +0.001064f}, - {+0.041563f, -0.010757f, -0.000998f}, - {-0.043387f, -0.001956f, +0.000527f}, - {-0.140276f, -0.003188f, -0.000142f} - }, - { - {+0.177711f, +0.001442f, +0.000461f}, - {+0.115859f, +0.004532f, -0.001235f}, - {-0.218668f, -0.005427f, +0.000911f}, - {+0.063962f, +0.003468f, -0.001219f}, - {+0.198372f, +0.004393f, -0.000814f}, - {-0.132046f, -0.004112f, +0.000882f}, - {+0.118012f, +0.003780f, -0.001160f}, - {+0.169530f, -0.000759f, +0.000923f}, - {+0.077288f, -0.001422f, -0.000499f}, - {+0.187625f, -0.000022f, -0.000030f}, - {+0.200958f, +0.007075f, +0.000014f}, - {+0.099701f, +0.002974f, -0.000910f}, - {-0.019722f, +0.003866f, -0.001104f}, - {+0.014166f, +0.005774f, -0.002177f}, - {-0.039277f, -0.003862f, +0.000381f}, - {-0.138918f, -0.005302f, +0.000608f} - }, - { - {+0.169075f, -0.003877f, -0.000219f}, - {+0.092373f, -0.003200f, -0.000934f}, - {-0.217383f, +0.010383f, +0.006743f}, - {+0.037373f, +0.004176f, +0.003172f}, - {+0.168763f, -0.000238f, +0.001996f}, - {-0.140535f, +0.007256f, +0.006564f}, - {+0.113037f, -0.005040f, -0.003602f}, - {+0.161555f, -0.002184f, +0.001327f}, - {+0.073875f, +0.002628f, +0.001536f}, - {+0.165667f, +0.001239f, +0.003853f}, - {+0.179435f, -0.009646f, -0.002896f}, - {+0.097770f, -0.003616f, -0.003027f}, - {-0.009431f, -0.004981f, -0.006157f}, - {-0.008081f, +0.000345f, -0.000806f}, - {-0.031139f, +0.005138f, +0.002262f}, - {-0.125572f, +0.007103f, +0.003194f} - }, - { - {+0.156703f, +0.003123f, -0.000930f}, - {+0.066141f, +0.001589f, +0.001238f}, - {-0.199134f, -0.002236f, +0.009123f}, - {+0.024449f, +0.000091f, +0.006919f}, - {+0.141646f, +0.003103f, +0.005668f}, - {-0.133486f, +0.000744f, +0.008630f}, - {+0.097019f, -0.000327f, -0.002792f}, - {+0.144791f, +0.002980f, +0.002476f}, - {+0.068698f, +0.001637f, +0.003084f}, - {+0.144321f, +0.006179f, +0.006251f}, - {+0.155892f, +0.002625f, -0.004264f}, - {+0.084319f, +0.000388f, -0.002288f}, - {-0.006549f, -0.002981f, -0.008326f}, - {-0.021606f, -0.003867f, +0.002491f}, - {-0.023191f, -0.001810f, +0.003729f}, - {-0.101442f, -0.001244f, +0.002402f} - }, - { - {+0.140100f, -0.000742f, +0.000187f}, - {+0.036425f, -0.005652f, +0.004036f}, - {-0.165186f, -0.002894f, +0.004265f}, - {+0.025616f, -0.008625f, +0.004162f}, - {+0.121725f, -0.015558f, +0.002974f}, - {-0.111098f, -0.006811f, +0.003090f}, - {+0.072921f, -0.001667f, +0.000669f}, - {+0.120893f, -0.005073f, +0.004382f}, - {+0.065161f, -0.005346f, +0.001749f}, - {+0.129726f, -0.017304f, +0.000877f}, - {+0.126372f, +0.005082f, +0.000663f}, - {+0.063630f, -0.002788f, +0.000025f}, - {-0.013562f, +0.008476f, -0.004178f}, - {-0.027532f, -0.002871f, +0.003910f}, - {-0.014651f, +0.000004f, +0.003901f}, - {-0.068381f, +0.002931f, -0.001605f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -4583,913 +2766,7 @@ const Word32 rightHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_N { -46061912, -2879239, 3273302, } }, }; -#else -const float rightHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.353305f, +0.566845f, +0.200116f}, - {-0.451504f, +0.563006f, -0.083565f}, - {+0.022092f, +0.111945f, -0.003135f}, - {+0.047133f, +0.000194f, -0.000386f}, - {-0.039375f, +0.036049f, +0.015307f}, - {-0.013502f, +0.004406f, -0.016833f}, - {-0.050267f, +0.058356f, +0.017434f}, - {-0.013681f, +0.080836f, -0.019699f}, - {-0.037136f, +0.024371f, +0.052200f}, - {-0.050122f, +0.078803f, +0.019790f}, - {+0.004565f, -0.007656f, +0.001338f}, - {-0.009821f, +0.051585f, +0.003219f}, - {-0.003833f, -0.023411f, -0.003160f}, - {+0.007736f, -0.042621f, +0.010291f}, - {+0.014210f, -0.003392f, -0.001270f}, - {-0.005609f, +0.001063f, +0.001854f} - }, - { - {+0.011160f, -0.509237f, -0.132176f}, - {-0.142996f, +0.819544f, -0.093135f}, - {+0.003358f, +0.077333f, -0.008548f}, - {+0.004495f, +0.024167f, +0.025614f}, - {-0.020911f, -0.057490f, -0.024558f}, - {-0.020938f, -0.024631f, -0.022840f}, - {-0.049990f, -0.113634f, -0.053590f}, - {+0.010020f, +0.210234f, +0.026992f}, - {-0.094579f, -0.407023f, -0.103353f}, - {-0.038956f, -0.088489f, -0.058039f}, - {-0.002875f, -0.015645f, +0.000778f}, - {-0.020714f, -0.104784f, -0.070444f}, - {-0.008794f, +0.002924f, +0.009615f}, - {+0.004361f, -0.056762f, +0.007070f}, - {+0.010128f, +0.073116f, +0.035032f}, - {-0.005641f, -0.006012f, -0.000245f} - }, - { - {-0.192410f, -0.206164f, -0.191132f}, - {+0.278956f, -0.236216f, +0.253095f}, - {-0.002616f, +0.068222f, +0.000710f}, - {-0.043976f, +0.107663f, +0.006000f}, - {+0.022830f, -0.121862f, -0.008267f}, - {-0.007646f, -0.104913f, +0.016048f}, - {+0.008805f, -0.278895f, +0.005919f}, - {+0.015200f, +0.180293f, +0.037960f}, - {-0.037987f, -0.531186f, -0.053722f}, - {+0.053411f, -0.405963f, +0.066106f}, - {-0.004225f, -0.049392f, +0.020098f}, - {+0.032849f, -0.404382f, +0.057080f}, - {-0.020343f, +0.025697f, +0.003018f}, - {+0.000399f, -0.049237f, +0.005564f}, - {-0.018895f, +0.170897f, -0.004768f}, - {-0.014229f, +0.049740f, -0.026663f} - }, - { - {-0.062917f, +0.511673f, +0.062418f}, - {+0.164174f, -1.090974f, -0.108397f}, - {+0.009127f, +0.065188f, -0.003083f}, - {-0.018593f, +0.081738f, -0.000771f}, - {+0.020686f, -0.093603f, -0.012011f}, - {-0.000826f, -0.118498f, +0.001498f}, - {+0.025996f, -0.307659f, -0.023797f}, - {-0.008194f, +0.054598f, -0.009722f}, - {+0.040351f, -0.445888f, -0.056326f}, - {+0.030847f, -0.708631f, -0.081623f}, - {-0.002063f, -0.033938f, +0.025075f}, - {+0.027403f, -0.458795f, +0.033429f}, - {-0.021373f, -0.007009f, -0.010388f}, - {-0.002090f, -0.031407f, +0.008158f}, - {-0.028475f, +0.071069f, -0.046847f}, - {-0.007602f, +0.116385f, +0.002531f} - }, - { - {+0.114739f, +0.069536f, +0.170911f}, - {-0.106068f, -0.653946f, -0.186091f}, - {+0.032435f, +0.023922f, +0.003440f}, - {+0.048701f, +0.139999f, -0.053329f}, - {-0.008680f, -0.251941f, +0.071200f}, - {+0.004397f, -0.120323f, -0.000310f}, - {+0.025654f, -0.324361f, -0.006461f}, - {-0.004810f, +0.061858f, -0.007597f}, - {+0.097919f, -0.641143f, +0.015289f}, - {-0.011357f, -0.557580f, -0.143138f}, - {-0.004726f, +0.016709f, -0.000434f}, - {-0.013229f, -0.166606f, -0.093126f}, - {-0.007411f, +0.011792f, -0.021547f}, - {-0.005396f, -0.034575f, +0.011453f}, - {+0.010644f, +0.011719f, -0.021909f}, - {+0.005419f, +0.030988f, +0.043631f} - }, - { - {+0.066623f, -0.089947f, +0.096291f}, - {-0.228582f, -0.462839f, -0.023355f}, - {+0.030597f, +0.055459f, +0.010541f}, - {+0.104887f, +0.337465f, -0.003674f}, - {-0.072691f, -0.405228f, +0.038864f}, - {-0.004864f, -0.081470f, +0.022241f}, - {+0.026067f, -0.215427f, +0.055659f}, - {+0.015556f, +0.034465f, -0.026853f}, - {+0.081559f, -0.329728f, +0.167841f}, - {-0.004434f, -0.224966f, +0.027520f}, - {-0.000854f, +0.017986f, -0.001169f}, - {+0.017103f, -0.022207f, -0.026879f}, - {+0.016949f, +0.070641f, -0.004353f}, - {-0.006585f, -0.086138f, -0.004695f}, - {+0.059412f, +0.107209f, +0.004895f}, - {+0.005676f, -0.059162f, +0.003180f} - }, - { - {-0.248577f, +0.462186f, -0.044825f}, - {-0.092220f, -0.576619f, -0.031483f}, - {-0.018552f, +0.118241f, -0.000190f}, - {+0.024038f, +0.192235f, +0.076006f}, - {-0.073463f, -0.111697f, -0.085309f}, - {-0.045418f, -0.052428f, +0.014128f}, - {+0.004341f, -0.088144f, -0.002830f}, - {+0.058183f, -0.067481f, +0.003537f}, - {-0.112838f, +0.181474f, -0.013812f}, - {-0.051144f, -0.057123f, -0.036471f}, - {+0.002310f, +0.009489f, +0.002928f}, - {+0.036815f, -0.070367f, -0.013190f}, - {+0.025238f, +0.001933f, +0.022381f}, - {+0.011799f, -0.070089f, -0.017261f}, - {+0.079383f, -0.005050f, +0.042259f}, - {+0.027513f, -0.031781f, -0.014727f} - }, - { - {-0.588729f, +0.069942f, -0.118192f}, - {+0.336864f, +0.087523f, +0.133178f}, - {-0.091818f, +0.000222f, -0.031435f}, - {-0.240072f, -0.209090f, -0.026656f}, - {+0.106536f, +0.210008f, +0.006949f}, - {-0.086566f, -0.077574f, +0.013942f}, - {+0.036640f, -0.012230f, +0.021355f}, - {+0.059977f, -0.024737f, +0.017673f}, - {-0.214469f, +0.026100f, -0.046140f}, - {-0.016107f, +0.082852f, +0.011968f}, - {+0.003608f, -0.021470f, -0.008749f}, - {+0.046323f, +0.010871f, +0.015628f}, - {-0.008214f, -0.079699f, -0.002987f}, - {+0.052373f, +0.029312f, +0.014086f}, - {+0.018742f, -0.113603f, +0.010455f}, - {+0.059520f, +0.032936f, +0.004294f} - }, - { - {-0.672439f, -0.199370f, +0.003424f}, - {+0.631922f, +0.138094f, +0.043549f}, - {-0.130748f, -0.058055f, -0.001266f}, - {-0.452933f, -0.003480f, -0.056408f}, - {+0.285057f, -0.030036f, +0.056968f}, - {-0.110275f, +0.011467f, -0.016793f}, - {+0.065972f, +0.005614f, +0.004420f}, - {-0.003151f, +0.047883f, +0.002061f}, - {-0.163084f, -0.130815f, +0.001810f}, - {+0.019555f, +0.025290f, +0.023258f}, - {+0.018781f, -0.034389f, -0.006142f}, - {+0.002509f, +0.046479f, +0.009162f}, - {-0.041047f, -0.024011f, -0.016940f}, - {+0.065623f, +0.027310f, +0.010505f}, - {-0.073560f, +0.039971f, -0.029159f}, - {+0.062876f, +0.006797f, +0.012019f} - }, - { - {-0.543455f, +0.059523f, +0.064094f}, - {+0.700107f, -0.080270f, -0.041520f}, - {-0.154990f, -0.009275f, +0.018360f}, - {-0.474326f, +0.126377f, -0.003035f}, - {+0.327360f, -0.114048f, +0.014833f}, - {-0.071241f, +0.058994f, -0.004572f}, - {+0.087784f, +0.000125f, -0.001107f}, - {-0.094160f, -0.038960f, -0.011917f}, - {-0.019089f, +0.055284f, +0.038765f}, - {+0.023647f, -0.039958f, -0.003588f}, - {+0.043021f, +0.013443f, +0.008032f}, - {-0.077825f, -0.044990f, -0.010103f}, - {-0.040861f, +0.021619f, +0.002193f}, - {+0.044745f, -0.030859f, -0.007951f}, - {-0.123807f, +0.055927f, -0.012492f}, - {+0.025663f, -0.034745f, +0.003611f} - }, - { - {-0.336060f, +0.028886f, +0.031505f}, - {+0.587287f, +0.009083f, -0.042775f}, - {-0.182505f, +0.025753f, +0.007772f}, - {-0.327915f, -0.064183f, +0.035026f}, - {+0.233666f, +0.067260f, -0.031214f}, - {+0.007323f, -0.030500f, +0.014877f}, - {+0.086165f, +0.005866f, -0.002682f}, - {-0.157983f, -0.017671f, -0.007972f}, - {+0.103610f, +0.038997f, +0.019660f}, - {+0.007681f, +0.004657f, -0.015128f}, - {+0.055812f, +0.017923f, +0.003300f}, - {-0.143968f, -0.013845f, -0.008347f}, - {-0.017716f, -0.004963f, +0.006287f}, - {+0.008786f, -0.012160f, -0.007210f}, - {-0.121102f, -0.034578f, +0.019391f}, - {-0.032193f, +0.031317f, -0.010154f} - }, - { - {-0.153248f, -0.008370f, -0.009310f}, - {+0.402033f, -0.000118f, -0.012937f}, - {-0.199763f, -0.006595f, +0.001228f}, - {-0.128842f, +0.004526f, +0.020419f}, - {+0.092842f, +0.010605f, -0.021993f}, - {+0.077909f, -0.025349f, +0.002895f}, - {+0.057392f, -0.008479f, -0.003710f}, - {-0.165419f, +0.022789f, +0.007822f}, - {+0.148908f, -0.037324f, -0.013709f}, - {-0.011296f, +0.018097f, -0.005621f}, - {+0.055136f, -0.008613f, -0.006635f}, - {-0.160576f, +0.015557f, +0.006131f}, - {+0.014844f, -0.003364f, +0.000064f}, - {-0.027453f, -0.001660f, +0.003786f}, - {-0.097934f, -0.032125f, +0.013700f}, - {-0.074549f, +0.020854f, -0.006292f} - }, - { - {-0.021458f, -0.031294f, -0.015786f}, - {+0.225566f, +0.016671f, +0.005476f}, - {-0.179128f, -0.006436f, +0.000989f}, - {+0.030888f, -0.004116f, -0.001010f}, - {-0.023526f, -0.004404f, +0.002301f}, - {+0.113727f, +0.001584f, -0.014207f}, - {+0.006187f, +0.003628f, -0.000322f}, - {-0.130415f, +0.000132f, +0.008388f}, - {+0.133114f, -0.001415f, -0.020106f}, - {-0.026233f, -0.006894f, +0.005590f}, - {+0.046982f, -0.011852f, -0.003518f}, - {-0.124161f, -0.003790f, +0.005992f}, - {+0.039303f, -0.005121f, -0.003574f}, - {-0.061746f, +0.020157f, -0.000385f}, - {-0.073801f, +0.016410f, -0.009153f}, - {-0.089034f, -0.008662f, +0.006612f} - }, - { - {+0.079072f, +0.039673f, -0.003004f}, - {+0.077618f, -0.033045f, +0.007328f}, - {-0.090967f, +0.027848f, +0.000971f}, - {+0.121511f, -0.002007f, -0.010039f}, - {-0.095609f, -0.005944f, +0.008880f}, - {+0.100415f, +0.015820f, -0.006869f}, - {-0.060544f, -0.012856f, +0.004470f}, - {-0.077695f, +0.001667f, -0.001003f}, - {+0.092912f, +0.018201f, -0.005273f}, - {-0.040823f, -0.014455f, +0.004325f}, - {+0.030102f, -0.002197f, +0.002719f}, - {-0.043620f, +0.016980f, +0.000122f}, - {+0.041014f, +0.001499f, -0.001303f}, - {-0.088431f, +0.009078f, -0.001327f}, - {-0.051030f, +0.024992f, -0.008833f}, - {-0.091055f, -0.011437f, +0.003728f} - }, - { - {+0.165755f, -0.020564f, +0.004876f}, - {-0.050384f, +0.037239f, +0.000994f}, - {+0.070084f, -0.036144f, -0.001750f}, - {+0.168503f, -0.016906f, -0.008961f}, - {-0.141507f, +0.014408f, +0.005947f}, - {+0.022796f, +0.010807f, +0.007047f}, - {-0.126569f, +0.016739f, +0.005274f}, - {-0.026827f, -0.017151f, -0.002196f}, - {+0.045512f, +0.004295f, +0.005991f}, - {-0.054896f, +0.008311f, -0.001754f}, - {+0.003645f, +0.010307f, +0.002009f}, - {+0.057176f, -0.014805f, -0.004774f}, - {+0.011072f, +0.010642f, -0.000248f}, - {-0.108885f, -0.004650f, +0.007771f}, - {-0.039664f, -0.018793f, +0.005550f}, - {-0.092338f, -0.000767f, -0.000795f} - }, - { - {+0.239774f, +0.007034f, +0.002631f}, - {-0.158490f, -0.023748f, -0.003698f}, - {+0.270403f, +0.044381f, -0.006888f}, - {+0.208319f, +0.016522f, -0.001863f}, - {-0.188853f, -0.017009f, +0.001321f}, - {-0.109689f, -0.039932f, +0.010880f}, - {-0.162224f, -0.011965f, +0.002284f}, - {+0.008275f, +0.010941f, +0.003208f}, - {-0.008632f, -0.022468f, +0.003767f}, - {-0.062087f, +0.004201f, -0.001503f}, - {-0.024938f, -0.010189f, -0.000489f}, - {+0.144572f, +0.021004f, -0.007356f}, - {-0.046268f, -0.010126f, +0.001327f}, - {-0.126844f, -0.020412f, +0.005586f}, - {-0.049688f, -0.012221f, +0.009513f}, - {-0.100800f, -0.001133f, +0.001097f} - }, - { - {+0.298828f, -0.005793f, -0.001373f}, - {-0.237768f, +0.008765f, -0.003046f}, - {+0.449357f, -0.047352f, -0.004642f}, - {+0.250753f, -0.004865f, -0.001957f}, - {-0.245484f, +0.010819f, +0.000881f}, - {-0.249706f, +0.049408f, +0.003961f}, - {-0.136738f, -0.008753f, -0.001855f}, - {+0.025853f, +0.003385f, +0.004139f}, - {-0.065934f, +0.022501f, -0.003288f}, - {-0.057527f, -0.008394f, +0.002717f}, - {-0.046206f, +0.004855f, -0.002123f}, - {+0.183725f, -0.015903f, -0.001405f}, - {-0.114051f, +0.012348f, +0.005264f}, - {-0.129436f, +0.010088f, -0.004805f}, - {-0.071460f, +0.022939f, +0.001488f}, - {-0.119149f, +0.009223f, +0.000555f} - }, - { - {+0.346011f, +0.008343f, -0.002521f}, - {-0.286535f, +0.000576f, +0.000480f}, - {+0.541635f, +0.014116f, +0.002290f}, - {+0.286228f, +0.009795f, -0.003869f}, - {-0.299965f, -0.009735f, +0.003167f}, - {-0.328736f, -0.018968f, -0.006082f}, - {-0.037520f, +0.034439f, -0.002184f}, - {+0.042204f, -0.003541f, +0.000630f}, - {-0.115659f, -0.004656f, -0.004969f}, - {-0.039051f, +0.003041f, +0.004257f}, - {-0.056424f, -0.001120f, -0.003167f}, - {+0.144869f, -0.019123f, +0.003415f}, - {-0.166286f, -0.018086f, +0.003983f}, - {-0.101679f, +0.021538f, -0.005021f}, - {-0.078280f, -0.006671f, -0.006794f}, - {-0.140047f, -0.004747f, -0.001252f} - }, - { - {+0.388388f, -0.009881f, -0.001847f}, - {-0.316128f, +0.000090f, +0.004009f}, - {+0.513290f, +0.035603f, +0.000300f}, - {+0.296513f, -0.005786f, -0.000267f}, - {-0.333378f, +0.007221f, +0.002877f}, - {-0.295424f, -0.041070f, -0.003600f}, - {+0.114311f, -0.042170f, +0.000214f}, - {+0.081378f, -0.006284f, -0.003240f}, - {-0.150267f, -0.005614f, +0.000485f}, - {-0.005390f, -0.000214f, +0.000390f}, - {-0.064645f, -0.002835f, -0.002892f}, - {+0.026756f, +0.044985f, -0.000392f}, - {-0.170480f, -0.001979f, -0.000156f}, - {-0.050780f, -0.025790f, +0.003317f}, - {-0.047515f, -0.026029f, -0.004739f}, - {-0.153995f, -0.004894f, +0.001183f} - }, - { - {+0.430636f, +0.009808f, -0.001195f}, - {-0.343293f, -0.010478f, +0.003913f}, - {+0.388765f, -0.049553f, -0.008265f}, - {+0.266407f, -0.016789f, +0.000864f}, - {-0.328141f, +0.007654f, +0.002512f}, - {-0.155445f, +0.060858f, +0.009380f}, - {+0.269010f, +0.026881f, -0.000978f}, - {+0.158656f, +0.025362f, -0.003743f}, - {-0.171832f, +0.002756f, +0.006554f}, - {+0.043647f, +0.009482f, -0.003918f}, - {-0.090667f, +0.001476f, +0.001048f}, - {-0.132548f, -0.036105f, -0.003022f}, - {-0.106351f, +0.024154f, -0.000421f}, - {-0.000521f, +0.009705f, +0.007542f}, - {+0.019829f, +0.036619f, +0.006700f}, - {-0.155900f, +0.002824f, +0.004883f} - }, - { - {+0.471455f, -0.008296f, -0.001200f}, - {-0.377731f, +0.016768f, -0.000590f}, - {+0.234888f, +0.026343f, -0.008776f}, - {+0.198215f, +0.029257f, -0.004797f}, - {-0.279113f, -0.015431f, +0.003236f}, - {+0.033581f, -0.032760f, +0.011351f}, - {+0.370767f, -0.006318f, -0.006828f}, - {+0.266209f, -0.029783f, -0.001410f}, - {-0.185419f, +0.012636f, +0.005498f}, - {+0.100533f, -0.019010f, -0.003209f}, - {-0.151097f, +0.010446f, +0.007094f}, - {-0.274631f, +0.012724f, +0.003901f}, - {+0.013966f, -0.029859f, -0.001195f}, - {+0.031705f, +0.010192f, +0.002683f}, - {+0.102880f, -0.011055f, +0.011106f}, - {-0.143777f, +0.006427f, +0.002026f} - }, - { - {+0.505485f, +0.006321f, -0.001405f}, - {-0.419164f, -0.009705f, -0.004024f}, - {+0.115231f, -0.006245f, -0.000430f}, - {+0.110599f, -0.013787f, -0.006578f}, - {-0.197526f, +0.015552f, +0.000736f}, - {+0.208411f, +0.008219f, -0.002566f}, - {+0.381442f, -0.001142f, -0.007728f}, - {+0.371664f, +0.016115f, -0.002975f}, - {-0.191819f, -0.017185f, -0.004447f}, - {+0.147317f, +0.015855f, +0.001243f}, - {-0.239821f, -0.029217f, +0.008681f}, - {-0.348287f, -0.007454f, +0.010181f}, - {+0.149521f, +0.030650f, -0.003365f}, - {+0.048588f, -0.006717f, -0.005355f}, - {+0.186826f, -0.010831f, -0.001024f}, - {-0.115953f, +0.001790f, -0.004618f} - }, - { - {+0.527959f, -0.004605f, -0.000793f}, - {-0.465933f, -0.000734f, -0.000648f}, - {+0.058769f, +0.003399f, +0.003980f}, - {+0.020939f, +0.002500f, +0.001602f}, - {-0.102989f, -0.023640f, -0.000907f}, - {+0.330754f, -0.015227f, -0.013490f}, - {+0.293504f, +0.012966f, +0.002367f}, - {+0.435673f, -0.007769f, -0.006056f}, - {-0.189456f, -0.010551f, -0.008519f}, - {+0.165864f, +0.001568f, +0.003516f}, - {-0.320806f, +0.034715f, +0.000873f}, - {-0.324855f, +0.004016f, +0.002288f}, - {+0.248230f, -0.023651f, -0.001117f}, - {+0.067435f, -0.016300f, -0.003833f}, - {+0.272913f, -0.007587f, -0.015541f}, - {-0.076620f, -0.021772f, -0.003143f} - }, - { - {+0.537963f, +0.000122f, -0.000129f}, - {-0.521439f, -0.006120f, +0.005687f}, - {+0.059349f, +0.002731f, +0.001179f}, - {-0.063524f, -0.015179f, +0.008462f}, - {-0.018295f, +0.018831f, +0.001086f}, - {+0.382316f, +0.020820f, -0.008228f}, - {+0.133723f, -0.051158f, +0.007642f}, - {+0.427333f, -0.004801f, -0.004396f}, - {-0.189172f, +0.025571f, +0.003440f}, - {+0.153064f, -0.017940f, -0.000618f}, - {-0.344855f, -0.000841f, -0.007255f}, - {-0.204120f, +0.035702f, -0.007554f}, - {+0.269414f, -0.005639f, +0.002449f}, - {+0.098719f, +0.013856f, +0.002962f}, - {+0.355359f, +0.040342f, -0.012703f}, - {-0.043435f, +0.014923f, +0.004398f} - }, - { - {+0.539918f, +0.002520f, -0.000803f}, - {-0.586780f, +0.022878f, +0.005664f}, - {+0.088465f, -0.012487f, -0.000009f}, - {-0.133857f, +0.024436f, +0.005429f}, - {+0.038815f, -0.004600f, +0.001199f}, - {+0.354019f, +0.005760f, +0.002225f}, - {-0.035479f, +0.061479f, -0.003852f}, - {+0.333448f, +0.030542f, -0.002292f}, - {-0.214917f, +0.009773f, +0.013046f}, - {+0.126578f, +0.010093f, -0.005470f}, - {-0.286447f, -0.044878f, -0.001444f}, - {-0.026257f, -0.067149f, -0.001093f}, - {+0.208042f, +0.035382f, -0.000884f}, - {+0.140716f, -0.000405f, +0.001329f}, - {+0.398750f, -0.026334f, +0.002502f}, - {-0.035058f, +0.007558f, +0.005919f} - }, - { - {+0.542223f, +0.000691f, -0.001439f}, - {-0.649673f, -0.023205f, -0.000535f}, - {+0.109219f, +0.005980f, +0.002282f}, - {-0.171779f, -0.010220f, -0.000656f}, - {+0.066150f, -0.005365f, -0.002547f}, - {+0.254746f, -0.041005f, +0.002026f}, - {-0.138924f, -0.008674f, -0.012149f}, - {+0.169249f, -0.044112f, -0.002599f}, - {-0.272638f, -0.040677f, +0.004640f}, - {+0.110153f, +0.006462f, -0.003434f}, - {-0.169903f, +0.042984f, +0.010056f}, - {+0.132794f, +0.036153f, +0.009130f}, - {+0.102112f, -0.031703f, -0.006139f}, - {+0.188913f, +0.004870f, -0.004839f}, - {+0.357390f, -0.030371f, +0.006291f}, - {-0.051114f, -0.020551f, -0.000894f} - }, - { - {+0.551847f, -0.004875f, -0.000679f}, - {-0.690272f, +0.004312f, -0.004016f}, - {+0.095639f, +0.010071f, +0.002809f}, - {-0.161818f, -0.013824f, -0.000790f}, - {+0.076081f, -0.002390f, -0.004308f}, - {+0.122361f, +0.040035f, -0.004601f}, - {-0.144006f, -0.036671f, -0.003198f}, - {-0.024466f, +0.039610f, -0.000882f}, - {-0.331827f, +0.020929f, -0.006635f}, - {+0.113319f, -0.007876f, +0.000927f}, - {-0.048322f, -0.009251f, +0.008004f}, - {+0.207982f, +0.015726f, +0.004350f}, - {+0.006949f, +0.009330f, -0.004246f}, - {+0.233905f, -0.014811f, -0.005355f}, - {+0.223143f, +0.054998f, -0.002434f}, - {-0.070208f, +0.002186f, -0.004895f} - }, - { - {+0.570043f, +0.005432f, +0.000103f}, - {-0.699360f, +0.014398f, +0.000427f}, - {+0.048501f, -0.018143f, +0.001306f}, - {-0.107295f, +0.023902f, +0.003671f}, - {+0.082584f, +0.006076f, -0.001731f}, - {+0.005834f, -0.019340f, -0.006865f}, - {-0.085415f, +0.035831f, +0.009933f}, - {-0.202459f, -0.035934f, +0.000303f}, - {-0.353113f, +0.015051f, -0.004263f}, - {+0.130123f, +0.004257f, +0.001776f}, - {+0.043254f, +0.003167f, -0.001496f}, - {+0.189334f, -0.031601f, -0.007634f}, - {-0.040215f, +0.005301f, +0.001534f}, - {+0.256999f, +0.008098f, -0.001598f}, - {+0.036347f, -0.049036f, -0.008301f}, - {-0.070389f, +0.011544f, -0.000794f} - }, - { - {+0.593416f, -0.005649f, +0.000278f}, - {-0.688298f, -0.007364f, +0.005463f}, - {-0.008044f, +0.018190f, -0.001207f}, - {-0.030689f, -0.015365f, +0.004543f}, - {+0.091891f, -0.004696f, +0.000919f}, - {-0.064670f, -0.007573f, -0.000965f}, - {-0.030187f, +0.002153f, +0.010834f}, - {-0.331404f, +0.015975f, +0.000858f}, - {-0.323976f, -0.025164f, +0.004961f}, - {+0.148829f, +0.000188f, -0.000078f}, - {+0.101305f, -0.006103f, -0.005181f}, - {+0.115300f, +0.016832f, -0.010749f}, - {-0.032766f, -0.011589f, +0.005290f}, - {+0.239406f, +0.007974f, +0.000705f}, - {-0.145255f, +0.023713f, -0.004941f}, - {-0.046369f, -0.012177f, +0.003695f} - }, - { - {+0.616579f, +0.002929f, -0.000295f}, - {-0.676588f, -0.004629f, +0.003842f}, - {-0.043537f, -0.004766f, -0.003324f}, - {+0.044220f, +0.013845f, +0.003072f}, - {+0.101856f, -0.006437f, -0.001748f}, - {-0.092523f, +0.007377f, +0.006975f}, - {-0.023470f, -0.026713f, -0.000479f}, - {-0.400554f, +0.001062f, +0.004867f}, - {-0.261565f, +0.014128f, +0.007944f}, - {+0.159121f, -0.002751f, -0.002980f}, - {+0.138765f, +0.008950f, -0.004189f}, - {+0.034625f, +0.000481f, -0.002727f}, - {+0.012613f, +0.005909f, +0.003331f}, - {+0.175748f, -0.024801f, -0.000902f}, - {-0.281594f, -0.008334f, +0.003990f}, - {-0.007054f, +0.002604f, +0.002155f} - }, - { - {+0.635179f, -0.002823f, -0.001148f}, - {-0.674199f, +0.007986f, -0.000991f}, - {-0.041014f, -0.013849f, -0.001185f}, - {+0.104750f, -0.003964f, +0.000987f}, - {+0.107619f, -0.003736f, -0.004502f}, - {-0.101204f, +0.003739f, +0.008397f}, - {-0.064575f, +0.021388f, -0.009658f}, - {-0.422196f, -0.004265f, +0.008954f}, - {-0.190975f, -0.003688f, +0.002622f}, - {+0.155793f, -0.001509f, -0.003088f}, - {+0.169274f, -0.008874f, -0.002289f}, - {-0.023162f, +0.001981f, +0.005597f}, - {+0.073018f, -0.010252f, -0.000970f}, - {+0.080452f, +0.024265f, -0.002891f}, - {-0.363635f, +0.004698f, +0.010523f}, - {+0.035663f, -0.006812f, -0.001722f} - }, - { - {+0.647447f, +0.003124f, -0.000778f}, - {-0.678396f, +0.001222f, -0.002175f}, - {-0.008003f, +0.018788f, +0.004232f}, - {+0.153771f, +0.006824f, -0.001505f}, - {+0.102284f, +0.006283f, -0.000369f}, - {-0.107854f, -0.015766f, +0.002536f}, - {-0.127703f, -0.002824f, -0.007472f}, - {-0.415367f, -0.005027f, +0.007128f}, - {-0.124975f, +0.011994f, -0.001327f}, - {+0.135698f, -0.002841f, -0.000522f}, - {+0.197083f, +0.008952f, -0.000525f}, - {-0.049410f, -0.008433f, +0.005306f}, - {+0.128034f, +0.008755f, -0.002993f}, - {-0.020098f, -0.017083f, -0.001266f}, - {-0.399229f, -0.010519f, +0.009961f}, - {+0.073610f, +0.013100f, -0.000219f} - }, - { - {+0.653287f, -0.000651f, -0.000132f}, - {-0.682914f, -0.002014f, +0.000124f}, - {+0.032972f, -0.005837f, +0.006215f}, - {+0.202805f, -0.008225f, -0.002812f}, - {+0.078083f, +0.005921f, +0.003749f}, - {-0.111320f, +0.004540f, -0.003693f}, - {-0.194460f, +0.001719f, +0.000738f}, - {-0.388630f, -0.001712f, +0.002133f}, - {-0.064250f, -0.011691f, -0.000978f}, - {+0.097911f, +0.010340f, +0.000589f}, - {+0.217935f, -0.002537f, +0.000189f}, - {-0.043003f, +0.001190f, +0.000648f}, - {+0.160424f, -0.006445f, -0.003025f}, - {-0.102796f, +0.011222f, +0.001449f}, - {-0.392994f, +0.003832f, +0.004205f}, - {+0.101814f, -0.004741f, +0.002529f} - }, - { - {+0.655085f, -0.000496f, -0.000073f}, - {-0.685269f, -0.000562f, +0.000824f}, - {+0.064749f, -0.008716f, +0.000371f}, - {+0.258268f, +0.016126f, -0.002727f}, - {+0.038467f, -0.019915f, +0.001374f}, - {-0.101519f, +0.013031f, -0.001724f}, - {-0.262717f, -0.010913f, +0.005785f}, - {-0.340935f, +0.010917f, -0.000109f}, - {-0.005117f, +0.011670f, -0.001141f}, - {+0.047975f, -0.015016f, -0.000510f}, - {+0.227673f, -0.001545f, -0.000844f}, - {-0.006815f, +0.010613f, -0.001679f}, - {+0.158152f, -0.002971f, -0.001763f}, - {-0.154604f, -0.004393f, +0.003495f}, - {-0.341946f, +0.012918f, +0.000060f}, - {+0.123129f, -0.003187f, +0.000554f} - }, - { - {+0.657162f, +0.001154f, -0.000704f}, - {-0.686405f, +0.001174f, -0.000024f}, - {+0.087607f, -0.002335f, -0.004967f}, - {+0.314889f, -0.015378f, -0.000770f}, - {+0.001549f, +0.013009f, -0.003904f}, - {-0.077871f, -0.011151f, +0.003120f}, - {-0.333383f, +0.022033f, +0.004891f}, - {-0.273704f, -0.019370f, +0.000308f}, - {+0.054701f, -0.011371f, -0.002150f}, - {-0.003312f, +0.012026f, -0.002061f}, - {+0.228798f, +0.001402f, -0.001592f}, - {+0.048684f, -0.018229f, -0.000520f}, - {+0.117088f, +0.012634f, -0.000896f}, - {-0.173410f, +0.001735f, +0.003820f}, - {-0.247906f, -0.029903f, +0.000682f}, - {+0.148293f, -0.000926f, -0.003582f} - }, - { - {+0.663635f, +0.002010f, -0.001316f}, - {-0.689882f, +0.000220f, -0.000110f}, - {+0.108949f, +0.013447f, -0.002013f}, - {+0.358661f, +0.009695f, +0.001033f}, - {-0.013352f, +0.004281f, -0.004550f}, - {-0.049096f, +0.001505f, +0.002637f}, - {-0.398463f, -0.021957f, -0.000327f}, - {-0.196600f, +0.019778f, +0.001903f}, - {+0.110988f, +0.014423f, -0.001867f}, - {-0.045870f, -0.004558f, -0.001576f}, - {+0.228188f, -0.000097f, -0.001476f}, - {+0.105835f, +0.015244f, +0.001995f}, - {+0.044580f, -0.021539f, -0.001382f}, - {-0.164082f, +0.001655f, +0.001885f}, - {-0.126620f, +0.032568f, +0.003705f}, - {+0.185481f, +0.013419f, -0.004184f} - }, - { - {+0.675624f, -0.004827f, -0.000839f}, - {-0.700179f, +0.002102f, +0.000678f}, - {+0.128613f, -0.006572f, +0.002141f}, - {+0.378743f, +0.002887f, +0.000648f}, - {-0.004220f, -0.012669f, -0.000801f}, - {-0.022440f, -0.000653f, -0.000869f}, - {-0.441665f, +0.002210f, -0.002042f}, - {-0.124814f, -0.014411f, +0.002833f}, - {+0.153596f, -0.007894f, -0.000675f}, - {-0.077085f, +0.001217f, +0.000703f}, - {+0.231308f, +0.000725f, -0.002147f}, - {+0.147273f, -0.003213f, +0.002198f}, - {-0.042268f, +0.020842f, -0.002800f}, - {-0.133721f, -0.009739f, +0.001057f}, - {-0.003152f, -0.021386f, +0.003714f}, - {+0.229253f, -0.015325f, -0.001319f} - }, - { - {+0.689875f, +0.004735f, +0.000183f}, - {-0.720017f, -0.006167f, +0.000699f}, - {+0.141755f, -0.003516f, +0.000834f}, - {+0.376706f, -0.006807f, -0.001713f}, - {+0.011000f, +0.005016f, +0.001618f}, - {-0.000647f, +0.004137f, -0.002283f}, - {-0.454292f, +0.009561f, +0.002281f}, - {-0.069428f, +0.004651f, +0.001574f}, - {+0.172906f, +0.000456f, -0.000712f}, - {-0.102160f, -0.005230f, +0.001608f}, - {+0.237600f, +0.001176f, -0.003651f}, - {+0.166513f, -0.006046f, -0.001258f}, - {-0.123162f, -0.009523f, -0.000972f}, - {-0.093037f, +0.007808f, +0.000738f}, - {+0.101706f, +0.008107f, -0.001772f}, - {+0.261899f, +0.005910f, +0.000263f} - }, - { - {+0.701449f, -0.001309f, +0.000513f}, - {-0.747852f, +0.007083f, +0.000295f}, - {+0.146674f, +0.002063f, -0.002067f}, - {+0.365508f, +0.004005f, -0.003093f}, - {+0.009820f, +0.003073f, +0.001694f}, - {+0.014954f, -0.005079f, -0.001243f}, - {-0.444057f, -0.005273f, +0.005170f}, - {-0.030220f, -0.001713f, -0.001402f}, - {+0.167308f, +0.005594f, -0.001307f}, - {-0.126894f, +0.005843f, +0.001163f}, - {+0.239461f, -0.006087f, -0.002206f}, - {+0.171030f, +0.001130f, -0.003837f}, - {-0.185728f, +0.008176f, +0.002303f}, - {-0.053859f, -0.008398f, -0.000003f}, - {+0.180213f, -0.012225f, -0.006311f}, - {+0.267399f, +0.003688f, -0.000070f} - }, - { - {+0.707682f, -0.001614f, -0.000417f}, - {-0.778938f, -0.006537f, +0.000334f}, - {+0.145291f, +0.002890f, -0.001284f}, - {+0.359528f, +0.005062f, -0.001469f}, - {-0.019378f, -0.015221f, +0.000076f}, - {+0.021977f, +0.000916f, -0.000266f}, - {-0.425305f, -0.000822f, +0.003160f}, - {+0.002113f, +0.007052f, -0.002427f}, - {+0.143996f, -0.006679f, -0.001487f}, - {-0.153276f, -0.008199f, +0.000318f}, - {+0.224106f, -0.002607f, +0.000957f}, - {+0.172702f, +0.005631f, -0.001975f}, - {-0.227595f, -0.009189f, +0.001906f}, - {-0.024550f, +0.006878f, +0.000998f}, - {+0.231993f, +0.016149f, -0.003555f}, - {+0.242520f, -0.012045f, -0.001170f} - }, - { - {+0.709804f, +0.000997f, -0.001515f}, - {-0.808027f, +0.005290f, +0.000583f}, - {+0.139809f, +0.000435f, +0.000818f}, - {+0.365924f, -0.006226f, +0.001737f}, - {-0.071369f, +0.017742f, -0.003060f}, - {+0.017802f, +0.003027f, -0.000621f}, - {-0.407651f, -0.000451f, +0.000175f}, - {+0.034591f, -0.007791f, -0.002030f}, - {+0.114950f, +0.006228f, -0.001120f}, - {-0.179490f, +0.006128f, -0.000795f}, - {+0.183246f, +0.015768f, +0.000773f}, - {+0.177035f, -0.003531f, +0.000696f}, - {-0.250400f, +0.001355f, +0.001108f}, - {-0.008187f, +0.000159f, +0.001456f}, - {+0.254611f, -0.001384f, -0.000532f}, - {+0.198496f, +0.013948f, -0.002759f} - }, - { - {+0.710823f, +0.002381f, -0.001069f}, - {-0.831214f, -0.003447f, +0.000878f}, - {+0.132056f, -0.007797f, -0.000969f}, - {+0.382880f, -0.001094f, +0.000711f}, - {-0.129160f, -0.007502f, -0.002763f}, - {+0.003161f, -0.000767f, +0.000443f}, - {-0.392711f, +0.006305f, +0.000815f}, - {+0.067053f, +0.011901f, -0.000327f}, - {+0.090742f, -0.003835f, -0.000996f}, - {-0.202084f, -0.000560f, +0.000195f}, - {+0.122322f, -0.020924f, -0.002535f}, - {+0.182462f, -0.002778f, -0.000258f}, - {-0.259161f, +0.001293f, +0.002195f}, - {+0.000645f, -0.003627f, -0.000469f}, - {+0.248733f, -0.007401f, -0.001654f}, - {+0.153178f, -0.008546f, -0.003483f} - }, - { - {+0.712186f, -0.002003f, +0.000341f}, - {-0.846788f, +0.001521f, +0.001394f}, - {+0.124294f, +0.003415f, -0.004317f}, - {+0.406372f, -0.002613f, -0.002804f}, - {-0.179207f, +0.002493f, +0.001438f}, - {-0.017437f, +0.004122f, +0.002593f}, - {-0.378082f, -0.002349f, +0.002279f}, - {+0.093160f, -0.004321f, +0.001305f}, - {+0.077016f, -0.001502f, +0.000076f}, - {-0.220676f, +0.001245f, +0.002361f}, - {+0.057208f, +0.011096f, -0.003599f}, - {+0.185276f, +0.001151f, -0.002614f}, - {-0.259729f, -0.001827f, +0.003455f}, - {+0.012127f, +0.000504f, -0.003413f}, - {+0.221948f, +0.010321f, -0.003531f}, - {+0.118717f, -0.000242f, -0.001468f} - }, - { - {+0.713662f, -0.000828f, +0.000545f}, - {-0.855438f, -0.002950f, +0.000977f}, - {+0.115830f, +0.005727f, -0.002674f}, - {+0.431080f, +0.008386f, -0.003025f}, - {-0.218522f, -0.008054f, +0.003300f}, - {-0.036091f, -0.008702f, +0.001428f}, - {-0.359216f, +0.001218f, +0.000904f}, - {+0.107642f, -0.001544f, +0.000220f}, - {+0.072571f, -0.000752f, +0.000715f}, - {-0.237634f, -0.007061f, +0.001792f}, - {+0.001551f, -0.003678f, -0.000322f}, - {+0.181633f, +0.003122f, -0.001514f}, - {-0.255564f, -0.003731f, +0.002293f}, - {+0.032826f, +0.012636f, -0.002484f}, - {+0.185211f, -0.004024f, -0.002705f}, - {+0.094101f, -0.001623f, +0.001061f} - }, - { - {+0.715808f, +0.001447f, -0.000564f}, - {-0.858599f, +0.000128f, +0.000166f}, - {+0.099314f, +0.001041f, +0.001297f}, - {+0.448457f, -0.007760f, -0.000064f}, - {-0.248826f, +0.008996f, +0.001277f}, - {-0.041985f, +0.000319f, -0.000791f}, - {-0.330901f, -0.006650f, -0.000552f}, - {+0.113746f, +0.002963f, -0.001774f}, - {+0.073588f, -0.000327f, +0.000159f}, - {-0.253601f, +0.004683f, -0.000245f}, - {-0.041369f, +0.004973f, +0.002735f}, - {+0.166731f, +0.003863f, +0.000533f}, - {-0.246518f, -0.001268f, -0.000049f}, - {+0.057814f, -0.010629f, +0.001615f}, - {+0.147641f, +0.004485f, +0.000244f}, - {+0.070521f, +0.005007f, +0.001670f} - }, - { - {+0.720382f, +0.001583f, -0.001168f}, - {-0.858507f, +0.001602f, +0.000561f}, - {+0.067329f, -0.015190f, +0.000273f}, - {+0.450274f, -0.005070f, +0.000753f}, - {-0.271109f, -0.002256f, +0.000399f}, - {-0.028488f, +0.011815f, +0.001154f}, - {-0.292330f, +0.012166f, +0.000199f}, - {+0.120202f, +0.001560f, -0.002785f}, - {+0.077618f, +0.000385f, -0.000057f}, - {-0.267478f, +0.001019f, +0.000455f}, - {-0.074822f, -0.008817f, +0.002528f}, - {+0.138952f, -0.011104f, -0.000590f}, - {-0.231196f, +0.009528f, +0.001492f}, - {+0.074656f, -0.000989f, +0.002061f}, - {+0.113858f, -0.008628f, +0.000648f}, - {+0.041189f, -0.009773f, +0.000867f} - }, - { - {+0.728412f, -0.003781f, -0.000442f}, - {-0.858915f, -0.000641f, +0.001243f}, - {+0.021588f, +0.015568f, -0.003718f}, - {+0.435021f, +0.011190f, -0.002580f}, - {-0.286107f, -0.000454f, +0.002042f}, - {+0.001012f, -0.010763f, +0.004584f}, - {-0.248323f, -0.011164f, +0.001788f}, - {+0.134196f, -0.006281f, -0.001978f}, - {+0.082702f, +0.001367f, -0.001190f}, - {-0.278772f, -0.000302f, +0.002741f}, - {-0.102933f, +0.009391f, -0.000025f}, - {+0.103537f, +0.008673f, -0.002139f}, - {-0.211947f, -0.006496f, +0.004418f}, - {+0.077185f, +0.005220f, -0.000312f}, - {+0.087037f, +0.006765f, -0.000943f}, - {+0.005530f, +0.010882f, -0.000993f} - }, - { - {+0.738976f, +0.002329f, +0.000136f}, - {-0.861896f, +0.000932f, +0.002377f}, - {-0.029402f, -0.003271f, -0.002468f}, - {+0.408989f, -0.003243f, -0.003584f}, - {-0.293612f, -0.002313f, +0.002730f}, - {+0.038002f, +0.000412f, +0.002803f}, - {-0.206194f, +0.003320f, +0.000488f}, - {+0.155421f, +0.006078f, -0.001116f}, - {+0.087818f, +0.003223f, -0.001518f}, - {-0.285833f, -0.006231f, +0.001960f}, - {-0.128249f, -0.001074f, -0.000243f}, - {+0.068575f, -0.002940f, -0.000700f}, - {-0.191804f, -0.003014f, +0.002724f}, - {+0.067942f, -0.005643f, -0.002245f}, - {+0.068213f, -0.000980f, -0.001053f}, - {-0.030778f, -0.002407f, -0.000036f} - }, - { - {+0.750300f, +0.000058f, -0.000825f}, - {-0.866279f, +0.001749f, +0.003432f}, - {-0.078123f, -0.003921f, +0.005991f}, - {+0.379010f, -0.005518f, +0.002243f}, - {-0.292486f, +0.009941f, -0.001947f}, - {+0.075433f, +0.005336f, -0.005378f}, - {-0.170771f, -0.002341f, -0.003169f}, - {+0.177886f, -0.005886f, -0.000679f}, - {+0.091281f, -0.005785f, +0.001198f}, - {-0.285767f, +0.012433f, -0.005156f}, - {-0.152796f, -0.004962f, +0.005079f}, - {+0.040112f, +0.002644f, +0.001940f}, - {-0.171647f, +0.007661f, -0.004705f}, - {+0.053028f, -0.000873f, -0.001571f}, - {+0.054373f, -0.002064f, +0.001211f}, - {-0.062123f, +0.000837f, +0.004082f} - }, - { - {+0.760695f, +0.000187f, -0.002580f}, - {-0.869383f, -0.005374f, +0.001979f}, - {-0.118984f, -0.003432f, +0.014567f}, - {+0.349914f, +0.003949f, +0.011712f}, - {-0.283867f, -0.008607f, -0.011966f}, - {+0.106829f, +0.003798f, -0.012953f}, - {-0.143863f, +0.007735f, -0.004012f}, - {+0.195900f, +0.004792f, +0.000560f}, - {+0.091845f, +0.002959f, +0.004936f}, - {-0.279043f, -0.006225f, -0.015628f}, - {-0.177000f, +0.001330f, +0.012704f}, - {+0.021476f, -0.006516f, +0.001630f}, - {-0.154239f, +0.000969f, -0.011998f}, - {+0.037152f, +0.007671f, +0.004251f}, - {+0.041126f, +0.001005f, +0.004482f}, - {-0.085797f, -0.005363f, +0.006097f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -6393,919 +3670,9 @@ const Word32 rightHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_N { -36711768, 1573569, -861678, } }, }; -#else -const float rightHRIRImag_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.191323f, +0.550462f, -0.164703f}, - {+0.179339f, -0.105827f, -0.022109f}, - {-0.016317f, +0.069138f, -0.026386f}, - {-0.031302f, +0.044550f, -0.011983f}, - {+0.011873f, +0.049933f, -0.022817f}, - {-0.002100f, +0.025417f, -0.008917f}, - {+0.008673f, +0.072165f, -0.030658f}, - {+0.009984f, -0.046099f, +0.014260f}, - {-0.017932f, +0.200113f, -0.071972f}, - {+0.009948f, +0.076380f, -0.035799f}, - {-0.000500f, -0.013211f, +0.007415f}, - {+0.005467f, +0.017109f, -0.007909f}, - {-0.001381f, -0.024397f, +0.011565f}, - {+0.001735f, -0.017167f, +0.009148f}, - {-0.006994f, -0.015041f, +0.007364f}, - {-0.000274f, +0.004190f, -0.001467f} - }, - { - {-0.330036f, +0.333647f, -0.215680f}, - {+0.446962f, +0.557076f, +0.195252f}, - {-0.017152f, +0.086610f, -0.016060f}, - {-0.053984f, +0.030859f, -0.007361f}, - {+0.031663f, +0.050397f, -0.030580f}, - {-0.013130f, -0.075028f, -0.055072f}, - {+0.035680f, +0.080722f, -0.037346f}, - {+0.011258f, -0.044042f, +0.013548f}, - {+0.004710f, +0.152351f, -0.099878f}, - {+0.054304f, +0.216938f, +0.014289f}, - {-0.014461f, -0.090558f, -0.026436f}, - {+0.019523f, +0.056800f, +0.001967f}, - {-0.012667f, -0.065948f, -0.004877f}, - {-0.011111f, -0.088384f, -0.022179f}, - {-0.018869f, -0.025704f, +0.006997f}, - {+0.000817f, +0.008300f, +0.000651f} - }, - { - {-0.096856f, -0.591788f, +0.084769f}, - {+0.247542f, +1.016515f, +0.073842f}, - {-0.000574f, +0.046908f, -0.004371f}, - {-0.019540f, +0.031177f, -0.013825f}, - {+0.037796f, -0.124420f, +0.041797f}, - {+0.007360f, -0.192733f, -0.007619f}, - {+0.072377f, -0.160383f, +0.061576f}, - {-0.003711f, +0.021943f, -0.004227f}, - {+0.112964f, -0.363004f, +0.093285f}, - {+0.056746f, +0.090813f, +0.072980f}, - {-0.006103f, -0.134417f, -0.008866f}, - {+0.005326f, +0.101653f, -0.016759f}, - {-0.002749f, -0.090650f, +0.006843f}, - {-0.000089f, -0.179843f, +0.016051f}, - {+0.001814f, -0.087437f, +0.037078f}, - {+0.005267f, -0.010738f, +0.007098f} - }, - { - {+0.063555f, -0.411417f, +0.075756f}, - {-0.093014f, +0.372322f, -0.077805f}, - {+0.007107f, +0.054992f, -0.008311f}, - {+0.033886f, +0.080359f, -0.013428f}, - {-0.014436f, -0.207733f, +0.015885f}, - {+0.013408f, -0.128849f, +0.020860f}, - {+0.024255f, -0.374328f, -0.023256f}, - {-0.002134f, +0.023939f, +0.000696f}, - {+0.058983f, -0.666227f, -0.050398f}, - {+0.014357f, +0.059836f, +0.078919f}, - {+0.009066f, -0.055606f, +0.025373f}, - {+0.008234f, +0.193844f, +0.040018f}, - {+0.010778f, -0.088365f, +0.004018f}, - {+0.007190f, -0.141067f, +0.033486f}, - {+0.015950f, -0.182801f, -0.014037f}, - {-0.004549f, -0.103305f, -0.035896f} - }, - { - {+0.019484f, -0.338410f, +0.083536f}, - {-0.202040f, +0.634536f, -0.185332f}, - {+0.007949f, -0.067812f, +0.047529f}, - {+0.048582f, -0.153833f, +0.075433f}, - {-0.054773f, +0.008273f, -0.058696f}, - {-0.024929f, +0.021715f, -0.041866f}, - {-0.026392f, -0.170362f, -0.104628f}, - {+0.014816f, -0.001719f, +0.003760f}, - {-0.050384f, -0.474129f, -0.111890f}, - {-0.050928f, +0.326828f, -0.037272f}, - {+0.005968f, -0.019903f, +0.009428f}, - {+0.002366f, +0.233633f, +0.019586f}, - {+0.014235f, -0.074982f, -0.008001f}, - {-0.003852f, +0.000864f, -0.026540f}, - {+0.024596f, -0.140123f, -0.045292f}, - {+0.007335f, -0.140212f, -0.016737f} - }, - { - {-0.203259f, -0.677311f, +0.036974f}, - {+0.017307f, +0.878070f, -0.170118f}, - {-0.043215f, -0.181813f, +0.012035f}, - {-0.067120f, -0.199982f, +0.078357f}, - {+0.003334f, +0.005382f, -0.060963f}, - {-0.037369f, +0.095076f, -0.002797f}, - {-0.007145f, +0.024172f, -0.016239f}, - {+0.025809f, +0.035193f, +0.010462f}, - {-0.123278f, -0.317455f, +0.005941f}, - {-0.071780f, +0.152842f, -0.115403f}, - {+0.009047f, -0.007435f, +0.015219f}, - {-0.009240f, +0.131025f, -0.037457f}, - {+0.010330f, -0.013791f, +0.019556f}, - {+0.018073f, +0.051639f, -0.007415f}, - {+0.023065f, +0.024816f, +0.028060f}, - {+0.023145f, -0.072535f, +0.012653f} - }, - { - {-0.363585f, -0.196908f, -0.132849f}, - {+0.400794f, -0.061111f, +0.146774f}, - {-0.088996f, -0.035461f, -0.039728f}, - {-0.248102f, +0.210034f, -0.044008f}, - {+0.136603f, -0.269455f, +0.014678f}, - {-0.039867f, +0.056544f, +0.018785f}, - {+0.012335f, -0.061064f, +0.014746f}, - {+0.001640f, +0.021263f, +0.019567f}, - {-0.164395f, -0.120409f, -0.065761f}, - {-0.005008f, -0.124444f, -0.002355f}, - {+0.006089f, +0.036166f, -0.003168f}, - {-0.008972f, +0.027316f, +0.008811f}, - {-0.026456f, +0.074066f, -0.007831f}, - {+0.036264f, -0.025445f, +0.017552f}, - {-0.046783f, +0.110385f, +0.011511f}, - {+0.016634f, -0.063190f, +0.003470f} - }, - { - {-0.140043f, +0.331564f, +0.031879f}, - {+0.418213f, -0.323867f, +0.026950f}, - {-0.066524f, +0.078043f, +0.003209f}, - {-0.275295f, +0.106284f, -0.069212f}, - {+0.205855f, -0.059809f, +0.074823f}, - {-0.024267f, -0.018141f, -0.016347f}, - {+0.021686f, -0.056152f, +0.012278f}, - {-0.065157f, -0.071098f, -0.001681f}, - {-0.025332f, +0.159594f, +0.013561f}, - {+0.029475f, -0.035218f, +0.023811f}, - {+0.011328f, +0.030605f, -0.007685f}, - {-0.054740f, -0.020295f, -0.000302f}, - {-0.047455f, +0.027854f, -0.019731f}, - {+0.022053f, -0.039858f, +0.012679f}, - {-0.116347f, -0.040132f, -0.032026f}, - {-0.007321f, -0.043491f, +0.015668f} - }, - { - {+0.232420f, -0.042183f, +0.090352f}, - {+0.143907f, +0.128870f, -0.081606f}, - {-0.019255f, -0.008481f, +0.025359f}, - {-0.079364f, -0.195197f, +0.009060f}, - {+0.092435f, +0.165349f, +0.007306f}, - {+0.037358f, -0.066958f, -0.009347f}, - {+0.002010f, -0.000201f, -0.007048f}, - {-0.118479f, -0.000141f, -0.016298f}, - {+0.131479f, -0.025371f, +0.046423f}, - {+0.013254f, +0.056073f, -0.007964f}, - {+0.020421f, -0.014051f, +0.008057f}, - {-0.102505f, +0.044999f, -0.012472f}, - {-0.028717f, -0.037569f, +0.002612f}, - {-0.021286f, +0.036718f, -0.008001f}, - {-0.110557f, -0.093273f, -0.012580f}, - {-0.060924f, +0.023756f, -0.000190f} - }, - { - {+0.533983f, -0.079000f, +0.018330f}, - {-0.217748f, +0.012931f, -0.048151f}, - {+0.025802f, -0.036354f, +0.006267f}, - {+0.205140f, +0.060899f, +0.046660f}, - {-0.113290f, -0.081234f, -0.041909f}, - {+0.105415f, +0.030348f, +0.015181f}, - {-0.034112f, -0.007984f, -0.002032f}, - {-0.109019f, +0.032142f, -0.005021f}, - {+0.186112f, -0.090334f, +0.010289f}, - {-0.018376f, +0.004638f, -0.018235f}, - {+0.011521f, -0.024596f, +0.005093f}, - {-0.106685f, +0.043319f, -0.011207f}, - {+0.003719f, +0.002813f, +0.009833f}, - {-0.061529f, +0.014049f, -0.008239f}, - {-0.045872f, +0.041391f, +0.025100f}, - {-0.106073f, -0.025839f, -0.009219f} - }, - { - {+0.689088f, +0.021676f, -0.035498f}, - {-0.512497f, -0.013050f, +0.008139f}, - {+0.080900f, -0.013233f, -0.008488f}, - {+0.415840f, +0.041814f, +0.013996f}, - {-0.278767f, -0.050484f, -0.020716f}, - {+0.124237f, +0.048494f, +0.003541f}, - {-0.083860f, +0.012095f, -0.001839f}, - {-0.040470f, -0.043256f, +0.009440f}, - {+0.127554f, +0.052174f, -0.027560f}, - {-0.038197f, -0.025553f, -0.002386f}, - {-0.013296f, +0.017618f, -0.006802f}, - {-0.049000f, -0.034411f, +0.008434f}, - {+0.023951f, +0.015385f, +0.000397f}, - {-0.079741f, -0.014689f, +0.006056f}, - {+0.015937f, +0.036771f, +0.013501f}, - {-0.116284f, -0.032742f, -0.005608f} - }, - { - {+0.733240f, +0.033897f, -0.028463f}, - {-0.683283f, -0.019108f, +0.024422f}, - {+0.165878f, +0.024612f, -0.005353f}, - {+0.489377f, -0.026929f, -0.018187f}, - {-0.343135f, +0.029846f, +0.016631f}, - {+0.086256f, -0.016816f, -0.014815f}, - {-0.129107f, +0.000075f, +0.000830f}, - {+0.047145f, -0.000801f, +0.008881f}, - {+0.023844f, +0.003992f, -0.023086f}, - {-0.042301f, +0.008336f, +0.009579f}, - {-0.039371f, +0.014019f, -0.003266f}, - {+0.037930f, +0.005491f, +0.006528f}, - {+0.020403f, -0.000483f, -0.004551f}, - {-0.081119f, -0.016241f, +0.003920f}, - {+0.051945f, -0.020771f, -0.013605f}, - {-0.091078f, +0.021518f, +0.009604f} - }, - { - {+0.733114f, -0.029809f, -0.003150f}, - {-0.758988f, +0.025935f, +0.015102f}, - {+0.280906f, -0.031811f, -0.003778f}, - {+0.459117f, +0.008405f, -0.019040f}, - {-0.333055f, +0.004022f, +0.017856f}, - {+0.012149f, -0.009636f, -0.003754f}, - {-0.156853f, +0.003236f, +0.004887f}, - {+0.114968f, +0.002815f, -0.004184f}, - {-0.064559f, -0.023528f, +0.001333f}, - {-0.039134f, +0.015161f, +0.005522f}, - {-0.063282f, +0.001881f, +0.005278f}, - {+0.121057f, -0.006821f, -0.003568f}, - {-0.006828f, +0.002343f, -0.000194f}, - {-0.069156f, -0.009861f, -0.001545f}, - {+0.070362f, -0.029774f, -0.011253f}, - {-0.061366f, +0.013312f, +0.005905f} - }, - { - {+0.724625f, -0.001203f, +0.006316f}, - {-0.787100f, -0.019364f, +0.003117f}, - {+0.401617f, +0.025467f, -0.004330f}, - {+0.392760f, +0.000769f, -0.009132f}, - {-0.296783f, -0.006051f, +0.006244f}, - {-0.080677f, -0.011855f, +0.011409f}, - {-0.155686f, -0.003923f, +0.003032f}, - {+0.152027f, +0.011289f, -0.005772f}, - {-0.122199f, -0.008679f, +0.013528f}, - {-0.032224f, -0.005650f, -0.003051f}, - {-0.086101f, -0.012645f, +0.003029f}, - {+0.171824f, +0.008018f, -0.006233f}, - {-0.049811f, -0.010853f, +0.002128f}, - {-0.046385f, +0.014661f, +0.005149f}, - {+0.075593f, +0.018900f, +0.006819f}, - {-0.042682f, -0.001204f, -0.002701f} - }, - { - {+0.710313f, +0.016351f, +0.000594f}, - {-0.788202f, -0.001698f, -0.001880f}, - {+0.478276f, -0.009988f, -0.006465f}, - {+0.338553f, -0.006580f, +0.000873f}, - {-0.267876f, +0.004181f, -0.000561f}, - {-0.161632f, +0.031504f, +0.010015f}, - {-0.112024f, -0.007981f, -0.001560f}, - {+0.161078f, -0.006395f, +0.000785f}, - {-0.159938f, +0.023767f, +0.006167f}, - {-0.016977f, -0.011649f, -0.002458f}, - {-0.101033f, +0.005466f, -0.000979f}, - {+0.168147f, +0.002987f, -0.004477f}, - {-0.090853f, +0.008103f, +0.002155f}, - {-0.019160f, +0.010061f, +0.003516f}, - {+0.068113f, +0.017356f, +0.008667f}, - {-0.034415f, -0.006094f, -0.000653f} - }, - { - {+0.687296f, -0.010309f, -0.005056f}, - {-0.764260f, +0.015559f, +0.000832f}, - {+0.464886f, -0.002946f, -0.003297f}, - {+0.298384f, -0.012876f, +0.002489f}, - {-0.246598f, +0.005940f, -0.001267f}, - {-0.184060f, -0.014332f, -0.000763f}, - {-0.024137f, +0.022250f, -0.004819f}, - {+0.154151f, -0.010440f, +0.001340f}, - {-0.181725f, -0.011644f, -0.002738f}, - {+0.007528f, +0.010988f, +0.002133f}, - {-0.103221f, +0.002109f, -0.001628f}, - {+0.103776f, -0.007568f, +0.001735f}, - {-0.108578f, +0.000395f, +0.003349f}, - {+0.017935f, -0.001653f, -0.006823f}, - {+0.063247f, -0.018078f, -0.002599f}, - {-0.031929f, -0.003751f, +0.000579f} - }, - { - {+0.659915f, +0.003181f, -0.004789f}, - {-0.723641f, -0.015598f, +0.004701f}, - {+0.344320f, +0.034439f, +0.003396f}, - {+0.252485f, +0.010951f, -0.000869f}, - {-0.213766f, -0.011294f, +0.001229f}, - {-0.112272f, -0.023126f, -0.008479f}, - {+0.086512f, -0.032942f, -0.003959f}, - {+0.151070f, +0.005416f, -0.003241f}, - {-0.183618f, -0.008669f, -0.002985f}, - {+0.037360f, -0.003147f, +0.002379f}, - {-0.095879f, -0.005536f, -0.000670f}, - {-0.009973f, +0.033041f, +0.006312f}, - {-0.086652f, -0.000941f, +0.001227f}, - {+0.070708f, -0.028404f, -0.005854f}, - {+0.082798f, -0.007130f, -0.008870f}, - {-0.024953f, -0.002080f, -0.001188f} - }, - { - {+0.634763f, -0.001208f, -0.002397f}, - {-0.683670f, +0.007693f, +0.006039f}, - {+0.143818f, -0.065248f, +0.001626f}, - {+0.187585f, -0.010607f, +0.001657f}, - {-0.155102f, +0.012347f, +0.000836f}, - {+0.047669f, +0.064360f, -0.004465f}, - {+0.176375f, +0.020282f, -0.000832f}, - {+0.166599f, +0.005868f, -0.005383f}, - {-0.165581f, +0.017111f, +0.003241f}, - {+0.067470f, -0.001639f, -0.002026f}, - {-0.090399f, +0.004464f, +0.000923f}, - {-0.138735f, -0.040116f, +0.001857f}, - {-0.018624f, +0.015969f, -0.003767f}, - {+0.124121f, +0.022397f, +0.003509f}, - {+0.132318f, +0.030070f, -0.004033f}, - {-0.005451f, +0.010583f, +0.000461f} - }, - { - {+0.613639f, +0.002441f, -0.000996f}, - {-0.658994f, +0.004033f, +0.003708f}, - {-0.066781f, +0.052613f, -0.005380f}, - {+0.103141f, +0.024662f, +0.003094f}, - {-0.069224f, -0.020885f, -0.001016f}, - {+0.237901f, -0.057325f, +0.006669f}, - {+0.198251f, +0.008139f, -0.001238f}, - {+0.196297f, -0.014019f, -0.004087f}, - {-0.137085f, -0.006189f, +0.006787f}, - {+0.092626f, -0.005231f, -0.005081f}, - {-0.098805f, -0.001528f, +0.003973f}, - {-0.227978f, +0.011869f, -0.001188f}, - {+0.083502f, -0.031761f, -0.003653f}, - {+0.154304f, +0.003532f, +0.005157f}, - {+0.192731f, -0.026618f, +0.005738f}, - {+0.025619f, -0.008251f, +0.002697f} - }, - { - {+0.592443f, -0.004265f, -0.000675f}, - {-0.651475f, -0.007639f, -0.001077f}, - {-0.211884f, -0.008375f, -0.003618f}, - {+0.015847f, -0.026610f, -0.001288f}, - {+0.030980f, +0.024402f, -0.000682f}, - {+0.377865f, +0.004628f, +0.005328f}, - {+0.127740f, -0.031243f, -0.004692f}, - {+0.216064f, +0.008428f, -0.000840f}, - {-0.107665f, -0.004148f, +0.003207f}, - {+0.104222f, +0.007982f, -0.002781f}, - {-0.121055f, -0.007151f, +0.006643f}, - {-0.232842f, +0.021111f, +0.004010f}, - {+0.181984f, +0.020598f, -0.002112f}, - {+0.154857f, -0.016563f, -0.001311f}, - {+0.234230f, -0.006972f, +0.006138f}, - {+0.062816f, -0.000374f, -0.000261f} - }, - { - {+0.565815f, +0.006621f, -0.000731f}, - {-0.652157f, -0.001839f, -0.002786f}, - {-0.256941f, -0.016709f, +0.005201f}, - {-0.049457f, +0.004802f, -0.002568f}, - {+0.121870f, -0.014390f, -0.001453f}, - {+0.418806f, +0.025565f, -0.008436f}, - {-0.023252f, +0.033441f, -0.003455f}, - {+0.192750f, +0.014454f, -0.000969f}, - {-0.080190f, +0.006138f, -0.004702f}, - {+0.090978f, +0.000288f, +0.001642f}, - {-0.136520f, +0.012063f, +0.004637f}, - {-0.143202f, -0.027531f, +0.007344f}, - {+0.230859f, -0.004544f, -0.002668f}, - {+0.140224f, +0.009293f, -0.007214f}, - {+0.242282f, +0.025199f, -0.006229f}, - {+0.100859f, -0.005416f, -0.004924f} - }, - { - {+0.532337f, -0.007417f, -0.000543f}, - {-0.652955f, +0.010368f, +0.001740f}, - {-0.220699f, +0.013404f, +0.007323f}, - {-0.077945f, +0.013141f, +0.004826f}, - {+0.182039f, +0.009934f, -0.002503f}, - {+0.362601f, -0.019757f, -0.014603f}, - {-0.211924f, -0.030990f, +0.005294f}, - {+0.105625f, -0.028087f, -0.003678f}, - {-0.054535f, +0.015575f, -0.006139f}, - {+0.049202f, -0.015528f, +0.003083f}, - {-0.111395f, -0.002877f, -0.002743f}, - {+0.015299f, +0.023373f, -0.001099f}, - {+0.201870f, -0.009975f, -0.000096f}, - {+0.130715f, +0.012877f, -0.003882f}, - {+0.221564f, -0.009858f, -0.016146f}, - {+0.132494f, +0.017520f, -0.002095f} - }, - { - {+0.495834f, +0.008532f, -0.000369f}, - {-0.652356f, -0.003292f, +0.006811f}, - {-0.149624f, -0.011936f, +0.002662f}, - {-0.071256f, -0.002030f, +0.009341f}, - {+0.200363f, -0.000872f, -0.001071f}, - {+0.238216f, +0.009887f, -0.004541f}, - {-0.381151f, +0.041781f, +0.008291f}, - {-0.039667f, +0.026941f, +0.000063f}, - {-0.036683f, -0.023635f, +0.004916f}, - {-0.009186f, +0.024708f, -0.001260f}, - {-0.023299f, -0.026996f, -0.008496f}, - {+0.194696f, -0.039072f, -0.009744f}, - {+0.098003f, +0.033287f, +0.002536f}, - {+0.131758f, -0.006621f, +0.002658f}, - {+0.173806f, -0.018597f, -0.006932f}, - {+0.145380f, -0.006223f, +0.004430f} - }, - { - {+0.463299f, -0.007155f, -0.000770f}, - {-0.648076f, -0.009295f, +0.004610f}, - {-0.089513f, +0.010398f, +0.000359f}, - {-0.033244f, -0.002975f, +0.003236f}, - {+0.178153f, -0.013477f, -0.001343f}, - {+0.077802f, -0.029144f, +0.007460f}, - {-0.474851f, -0.029171f, -0.001803f}, - {-0.217055f, -0.041281f, +0.004828f}, - {-0.037249f, -0.008239f, +0.011497f}, - {-0.059921f, -0.009759f, -0.005233f}, - {+0.114758f, +0.056676f, -0.002229f}, - {+0.334964f, +0.046076f, -0.002995f}, - {-0.042473f, -0.043913f, -0.000922f}, - {+0.133390f, -0.007415f, +0.001167f}, - {+0.081735f, -0.007332f, +0.010523f}, - {+0.133499f, -0.015420f, +0.003583f} - }, - { - {+0.441203f, +0.002482f, -0.000824f}, - {-0.629545f, +0.003537f, -0.002292f}, - {-0.068500f, -0.000883f, +0.001586f}, - {+0.038519f, -0.014498f, -0.003426f}, - {+0.131180f, +0.015847f, -0.003732f}, - {-0.083693f, +0.047317f, +0.005981f}, - {-0.461803f, -0.022290f, -0.008344f}, - {-0.384732f, +0.037693f, +0.003505f}, - {-0.048144f, +0.029049f, +0.001374f}, - {-0.084768f, -0.008739f, -0.001947f}, - {+0.251499f, -0.035994f, +0.008053f}, - {+0.379916f, -0.000042f, +0.006724f}, - {-0.160178f, +0.020677f, -0.004025f}, - {+0.124411f, +0.010697f, -0.004992f}, - {-0.067302f, +0.056203f, +0.010926f}, - {+0.110573f, +0.015976f, -0.002867f} - }, - { - {+0.430897f, +0.000433f, -0.000350f}, - {-0.586004f, +0.017187f, -0.004129f}, - {-0.087700f, -0.011728f, +0.002208f}, - {+0.139979f, +0.032148f, -0.002572f}, - {+0.080931f, -0.008008f, -0.004145f}, - {-0.204274f, -0.031020f, -0.002988f}, - {-0.365555f, +0.057171f, +0.001535f}, - {-0.496090f, -0.014326f, +0.002762f}, - {-0.036347f, -0.000076f, -0.009610f}, - {-0.087371f, +0.006753f, +0.002953f}, - {+0.332582f, -0.010055f, +0.004412f}, - {+0.314151f, -0.048523f, +0.001669f}, - {-0.210677f, +0.006259f, -0.001554f}, - {+0.097223f, +0.002730f, -0.004153f}, - {-0.243214f, -0.058784f, -0.001131f}, - {+0.100970f, +0.001509f, -0.005827f} - }, - { - {+0.427847f, -0.001191f, +0.000192f}, - {-0.522040f, -0.027328f, +0.001322f}, - {-0.123746f, +0.015960f, -0.000425f}, - {+0.250557f, -0.029225f, +0.001401f}, - {+0.041411f, -0.001671f, -0.000435f}, - {-0.251666f, -0.011713f, -0.002737f}, - {-0.259410f, -0.030558f, +0.013501f}, - {-0.523363f, -0.008886f, +0.005097f}, - {+0.023565f, -0.037779f, -0.005281f}, - {-0.085570f, +0.002595f, +0.003055f}, - {+0.343956f, +0.022947f, -0.008052f}, - {+0.182050f, +0.049717f, -0.010139f}, - {-0.188646f, -0.025113f, +0.004590f}, - {+0.043971f, +0.008025f, +0.002158f}, - {-0.383316f, +0.019159f, -0.004800f}, - {+0.118679f, -0.020135f, -0.001036f} - }, - { - {+0.424775f, -0.001427f, +0.000274f}, - {-0.458547f, +0.013186f, +0.005324f}, - {-0.143005f, -0.001551f, -0.002520f}, - {+0.342091f, +0.013355f, +0.001866f}, - {+0.012473f, -0.005183f, +0.002228f}, - {-0.229007f, +0.024031f, +0.004922f}, - {-0.213143f, -0.021386f, +0.008846f}, - {-0.469349f, +0.018839f, +0.005224f}, - {+0.120107f, +0.037044f, +0.005367f}, - {-0.094940f, -0.009229f, -0.000146f}, - {+0.312164f, -0.002650f, -0.009985f}, - {+0.056636f, -0.008288f, -0.009234f}, - {-0.124730f, +0.013388f, +0.006509f}, - {-0.037461f, -0.023127f, +0.003625f}, - {-0.438903f, +0.013352f, +0.002069f}, - {+0.155431f, +0.012048f, +0.004072f} - }, - { - {+0.415850f, +0.004534f, -0.000668f}, - {-0.414572f, +0.002652f, +0.002367f}, - {-0.124613f, -0.010725f, -0.002281f}, - {+0.397126f, -0.000677f, -0.001120f}, - {-0.014003f, +0.010619f, -0.000267f}, - {-0.170253f, -0.018842f, +0.008960f}, - {-0.241128f, +0.034417f, -0.004698f}, - {-0.359282f, -0.033550f, +0.005250f}, - {+0.216676f, -0.010427f, +0.006057f}, - {-0.120954f, +0.008613f, -0.002469f}, - {+0.268504f, +0.001802f, -0.003587f}, - {-0.013045f, -0.010217f, +0.002327f}, - {-0.059871f, -0.003931f, +0.001188f}, - {-0.132164f, +0.026563f, +0.001240f}, - {-0.403193f, -0.027848f, +0.009266f}, - {+0.190953f, +0.002021f, +0.001187f} - }, - { - {+0.399726f, -0.003989f, -0.001238f}, - {-0.392346f, -0.005321f, -0.003177f}, - {-0.072827f, +0.023138f, +0.000364f}, - {+0.417980f, -0.003176f, -0.003953f}, - {-0.044470f, -0.006065f, -0.002234f}, - {-0.111558f, +0.001243f, +0.006696f}, - {-0.306891f, -0.017879f, -0.010556f}, - {-0.227947f, +0.027747f, +0.006660f}, - {+0.285131f, -0.003545f, -0.002248f}, - {-0.160581f, -0.005372f, -0.001188f}, - {+0.228536f, -0.004194f, -0.000473f}, - {-0.021041f, +0.010096f, +0.009272f}, - {-0.021484f, +0.000358f, -0.003354f}, - {-0.213365f, -0.015260f, -0.000168f}, - {-0.303399f, +0.026027f, +0.011571f}, - {+0.212111f, -0.000447f, -0.003261f} - }, - { - {+0.378407f, +0.003850f, -0.000653f}, - {-0.380175f, -0.007586f, -0.003255f}, - {-0.012127f, -0.017400f, +0.004348f}, - {+0.420589f, +0.000881f, -0.004600f}, - {-0.082045f, +0.000538f, +0.001160f}, - {-0.069379f, +0.007873f, -0.001279f}, - {-0.364957f, -0.009593f, -0.003601f}, - {-0.103978f, -0.012644f, +0.002536f}, - {+0.322327f, -0.004962f, -0.006100f}, - {-0.208381f, +0.007687f, +0.001556f}, - {+0.193755f, +0.004206f, +0.000887f}, - {+0.012722f, +0.002660f, +0.005208f}, - {-0.021028f, +0.002645f, -0.003959f}, - {-0.256559f, +0.000206f, +0.001247f}, - {-0.175255f, -0.013434f, +0.005713f}, - {+0.216424f, -0.004406f, -0.001903f} - }, - { - {+0.355186f, -0.004417f, +0.000047f}, - {-0.367959f, +0.007051f, +0.000589f}, - {+0.030278f, -0.000745f, +0.003677f}, - {+0.419972f, +0.001580f, -0.004098f}, - {-0.126164f, -0.010538f, +0.004622f}, - {-0.036142f, +0.005050f, -0.006483f}, - {-0.395580f, +0.008424f, +0.006868f}, - {+0.004418f, +0.013200f, -0.004102f}, - {+0.338438f, +0.004391f, -0.003969f}, - {-0.257936f, -0.011270f, +0.002562f}, - {+0.157184f, -0.010190f, +0.001022f}, - {+0.066694f, +0.007499f, -0.001955f}, - {-0.058038f, -0.007898f, -0.001836f}, - {-0.252063f, +0.011457f, +0.004218f}, - {-0.038996f, +0.019229f, -0.002930f}, - {+0.207135f, -0.002683f, +0.000920f} - }, - { - {+0.333833f, +0.005141f, -0.000033f}, - {-0.354343f, -0.002376f, +0.001512f}, - {+0.044789f, +0.011943f, -0.002345f}, - {+0.420054f, -0.005203f, -0.002411f}, - {-0.168493f, +0.019086f, +0.001101f}, - {+0.000312f, -0.019974f, -0.002740f}, - {-0.404430f, +0.003854f, +0.008761f}, - {+0.101609f, -0.024344f, -0.004621f}, - {+0.343021f, -0.002003f, -0.002287f}, - {-0.300798f, +0.012232f, +0.000926f}, - {+0.115201f, +0.012523f, -0.000667f}, - {+0.124884f, -0.013322f, -0.003505f}, - {-0.124657f, +0.015080f, +0.000444f}, - {-0.208063f, -0.009838f, +0.004149f}, - {+0.098778f, -0.030234f, -0.005691f}, - {+0.191672f, +0.010274f, -0.000986f} - }, - { - {+0.317651f, -0.003399f, -0.000638f}, - {-0.342009f, +0.000734f, +0.000383f}, - {+0.041234f, -0.003266f, -0.006626f}, - {+0.412818f, +0.000564f, -0.000053f}, - {-0.193269f, -0.005756f, -0.003803f}, - {+0.038455f, +0.012921f, +0.002898f}, - {-0.397973f, -0.006421f, +0.004371f}, - {+0.186407f, +0.018164f, -0.002443f}, - {+0.339213f, -0.001972f, -0.002251f}, - {-0.327935f, -0.003077f, -0.000361f}, - {+0.072360f, -0.008411f, -0.001308f}, - {+0.171731f, +0.013927f, -0.001434f}, - {-0.206591f, -0.018817f, +0.001471f}, - {-0.140714f, +0.015540f, +0.002302f}, - {+0.227639f, +0.031497f, -0.003750f}, - {+0.179263f, -0.004105f, -0.004389f} - }, - { - {+0.307693f, +0.001076f, -0.000945f}, - {-0.334320f, -0.001717f, +0.000049f}, - {+0.033552f, -0.011447f, -0.002121f}, - {+0.387841f, +0.007421f, +0.001088f}, - {-0.192595f, -0.010377f, -0.002843f}, - {+0.067483f, +0.002402f, +0.001682f}, - {-0.373557f, +0.001444f, -0.001449f}, - {+0.251051f, -0.016030f, -0.000496f}, - {+0.323516f, +0.001530f, -0.001658f}, - {-0.335944f, -0.003218f, +0.000567f}, - {+0.034654f, +0.006672f, -0.000906f}, - {+0.193976f, -0.003406f, +0.001146f}, - {-0.284432f, +0.017472f, +0.001142f}, - {-0.067179f, -0.009754f, -0.000138f}, - {+0.329347f, -0.022749f, -0.000471f}, - {+0.172128f, -0.005358f, -0.003493f} - }, - { - {+0.301577f, +0.001184f, -0.000322f}, - {-0.332736f, +0.000666f, +0.000894f}, - {+0.023585f, -0.000609f, +0.003132f}, - {+0.344006f, -0.015803f, +0.000034f}, - {-0.177998f, +0.013137f, +0.002069f}, - {+0.082056f, -0.003433f, -0.002633f}, - {-0.324370f, +0.018955f, -0.002626f}, - {+0.287377f, +0.000225f, -0.000071f}, - {+0.290720f, -0.007672f, -0.000038f}, - {-0.329996f, +0.006498f, +0.002605f}, - {+0.003682f, -0.004563f, -0.000624f}, - {+0.185737f, -0.009876f, +0.000494f}, - {-0.338831f, -0.008465f, +0.000490f}, - {-0.000651f, +0.014424f, -0.001842f}, - {+0.385445f, -0.000494f, -0.001075f}, - {+0.160154f, +0.003230f, +0.000530f} - }, - { - {+0.294359f, +0.001008f, +0.000587f}, - {-0.335716f, +0.002537f, +0.000929f}, - {+0.006697f, +0.010781f, +0.001057f}, - {+0.292769f, +0.014442f, -0.002216f}, - {-0.173218f, +0.002305f, +0.004071f}, - {+0.084637f, -0.001890f, -0.003059f}, - {-0.253587f, -0.025906f, +0.002221f}, - {+0.295508f, +0.003624f, -0.001780f}, - {+0.240102f, +0.014422f, -0.000050f}, - {-0.320004f, +0.000226f, +0.002968f}, - {-0.025595f, +0.006552f, -0.001052f}, - {+0.154653f, +0.014381f, -0.002635f}, - {-0.357893f, -0.004680f, +0.001836f}, - {+0.050259f, -0.009177f, -0.001013f}, - {+0.390921f, +0.011091f, -0.005488f}, - {+0.128396f, +0.010797f, +0.002030f} - }, - { - {+0.281980f, -0.004479f, +0.000473f}, - {-0.338235f, -0.000938f, +0.000317f}, - {-0.016443f, -0.008216f, -0.002310f}, - {+0.250822f, -0.005381f, -0.002547f}, - {-0.194113f, -0.011993f, +0.002133f}, - {+0.078814f, +0.001480f, -0.000683f}, - {-0.178794f, +0.013791f, +0.004329f}, - {+0.286440f, -0.008258f, -0.003815f}, - {+0.180165f, -0.014312f, -0.000718f}, - {-0.312559f, -0.001222f, +0.001335f}, - {-0.061211f, -0.002642f, +0.000385f}, - {+0.117426f, -0.006897f, -0.004033f}, - {-0.342706f, +0.010139f, +0.004471f}, - {+0.079430f, +0.002660f, -0.001268f}, - {+0.356398f, -0.011250f, -0.007640f}, - {+0.072072f, -0.018003f, +0.000575f} - }, - { - {+0.264584f, +0.006225f, -0.000553f}, - {-0.334355f, -0.002104f, +0.000390f}, - {-0.041411f, +0.000660f, -0.001379f}, - {+0.227742f, -0.002231f, -0.000499f}, - {-0.236723f, +0.015277f, +0.000143f}, - {+0.066692f, +0.002089f, +0.000940f}, - {-0.116641f, -0.003621f, +0.000856f}, - {+0.274189f, -0.002260f, -0.003775f}, - {+0.124476f, +0.010538f, -0.000672f}, - {-0.307116f, +0.000375f, +0.000391f}, - {-0.109323f, +0.010339f, +0.003218f}, - {+0.087624f, -0.002282f, -0.001095f}, - {-0.305220f, -0.004246f, +0.003226f}, - {+0.088209f, -0.001890f, -0.000514f}, - {+0.297714f, +0.002109f, -0.002943f}, - {+0.002305f, +0.018254f, -0.000698f} - }, - { - {+0.245860f, -0.004071f, -0.001278f}, - {-0.320735f, +0.004451f, +0.000718f}, - {-0.064973f, -0.003268f, +0.001022f}, - {+0.221237f, +0.003408f, +0.001969f}, - {-0.282979f, -0.012181f, -0.001619f}, - {+0.050139f, -0.005534f, +0.000714f}, - {-0.071497f, +0.004571f, -0.002571f}, - {+0.265456f, +0.000937f, -0.001591f}, - {+0.084560f, -0.004757f, +0.000011f}, - {-0.300229f, +0.001315f, -0.000134f}, - {-0.168137f, -0.018612f, +0.002406f}, - {+0.066781f, -0.001637f, +0.001882f}, - {-0.257378f, +0.011005f, +0.000980f}, - {+0.083095f, -0.005045f, -0.000085f}, - {+0.224972f, -0.016565f, +0.001685f}, - {-0.061472f, -0.012660f, -0.001272f} - }, - { - {+0.229589f, +0.000720f, -0.000554f}, - {-0.297388f, -0.006061f, +0.000830f}, - {-0.086308f, +0.008311f, -0.000100f}, - {+0.220891f, +0.005343f, +0.000760f}, - {-0.312804f, -0.002048f, -0.000535f}, - {+0.033600f, +0.001954f, +0.000821f}, - {-0.037726f, -0.009547f, -0.001800f}, - {+0.256770f, -0.001354f, -0.000172f}, - {+0.064615f, +0.001499f, +0.000378f}, - {-0.288880f, -0.006082f, +0.000716f}, - {-0.223988f, +0.015499f, -0.000654f}, - {+0.048524f, +0.007439f, +0.000777f}, - {-0.208116f, -0.011040f, +0.001557f}, - {+0.074335f, +0.004704f, -0.001723f}, - {+0.146222f, +0.020815f, +0.000166f}, - {-0.103517f, +0.003200f, -0.000724f} - }, - { - {+0.216659f, -0.000775f, +0.000774f}, - {-0.266859f, +0.007292f, +0.000934f}, - {-0.105304f, -0.004788f, -0.002437f}, - {+0.217403f, -0.003973f, -0.002583f}, - {-0.318044f, +0.007929f, +0.003539f}, - {+0.023696f, -0.000702f, +0.001989f}, - {-0.008068f, +0.006711f, +0.000114f}, - {+0.242367f, -0.004361f, +0.000832f}, - {+0.061343f, +0.003214f, +0.000949f}, - {-0.273736f, +0.004941f, +0.002356f}, - {-0.260361f, -0.001261f, -0.000909f}, - {+0.027365f, -0.006696f, -0.001482f}, - {-0.163814f, +0.008052f, +0.001931f}, - {+0.071141f, -0.000562f, -0.003221f}, - {+0.073591f, -0.015255f, -0.001489f}, - {-0.121162f, +0.004631f, +0.001675f} - }, - { - {+0.205784f, +0.003757f, +0.000700f}, - {-0.232994f, -0.005953f, +0.000561f}, - {-0.123682f, -0.003377f, -0.000485f}, - {+0.205753f, -0.000981f, -0.002067f}, - {-0.304943f, -0.001966f, +0.004525f}, - {+0.026104f, +0.002420f, +0.000748f}, - {+0.021981f, -0.003022f, -0.000957f}, - {+0.220204f, +0.009944f, -0.000624f}, - {+0.066717f, -0.001208f, +0.001408f}, - {-0.258003f, +0.000477f, +0.001518f}, - {-0.270472f, -0.007879f, +0.002698f}, - {+0.001424f, +0.001591f, -0.000485f}, - {-0.125885f, -0.003310f, +0.000529f}, - {+0.074527f, -0.008121f, -0.001699f}, - {+0.017069f, +0.005535f, -0.000272f}, - {-0.124829f, -0.001926f, +0.003798f} - }, - { - {+0.196417f, -0.003644f, -0.000603f}, - {-0.199207f, +0.006086f, -0.000295f}, - {-0.146052f, -0.001687f, +0.003740f}, - {+0.182052f, -0.002076f, +0.001266f}, - {-0.282909f, -0.000690f, +0.001105f}, - {+0.044152f, +0.004210f, -0.001817f}, - {+0.054138f, +0.007409f, -0.002335f}, - {+0.196668f, -0.006189f, -0.002331f}, - {+0.072925f, -0.001260f, +0.000239f}, - {-0.242629f, +0.000541f, -0.000943f}, - {-0.260897f, +0.003994f, +0.004883f}, - {-0.029070f, -0.005485f, +0.001962f}, - {-0.092855f, +0.004046f, -0.001954f}, - {+0.076259f, +0.005415f, +0.002510f}, - {-0.019261f, -0.001366f, +0.002709f}, - {-0.127606f, -0.004435f, +0.002949f} - }, - { - {+0.189173f, +0.000560f, -0.001059f}, - {-0.167547f, -0.008258f, +0.000141f}, - {-0.174715f, +0.013815f, +0.002907f}, - {+0.145627f, +0.012083f, +0.002087f}, - {-0.256566f, -0.006772f, -0.000776f}, - {+0.075271f, -0.013763f, -0.000701f}, - {+0.085309f, -0.009140f, -0.001366f}, - {+0.180099f, +0.000959f, -0.002178f}, - {+0.077061f, -0.000891f, -0.000372f}, - {-0.225986f, -0.007128f, -0.000680f}, - {-0.242442f, -0.000129f, +0.003190f}, - {-0.061120f, +0.011120f, +0.001079f}, - {-0.062759f, -0.011288f, -0.001129f}, - {+0.065406f, +0.009942f, +0.002436f}, - {-0.038027f, +0.005472f, +0.002780f}, - {-0.134062f, +0.004375f, +0.001136f} - }, - { - {+0.183656f, +0.000923f, -0.000164f}, - {-0.139835f, +0.005429f, +0.001020f}, - {-0.202643f, -0.008873f, -0.000639f}, - {+0.102603f, -0.014782f, -0.000700f}, - {-0.227902f, +0.008291f, +0.000524f}, - {+0.108562f, +0.007847f, +0.001593f}, - {+0.108523f, +0.004720f, -0.000054f}, - {+0.172882f, +0.003322f, -0.000542f}, - {+0.078483f, -0.001260f, -0.000596f}, - {-0.207608f, +0.004999f, +0.001085f}, - {-0.221842f, +0.000718f, +0.000351f}, - {-0.087045f, -0.004787f, -0.000547f}, - {-0.037398f, +0.005336f, +0.001064f}, - {+0.041563f, -0.010757f, -0.000998f}, - {-0.043387f, -0.001956f, +0.000527f}, - {-0.140276f, -0.003188f, -0.000142f} - }, - { - {+0.177711f, +0.001442f, +0.000461f}, - {-0.115859f, -0.004532f, +0.001235f}, - {-0.218668f, -0.005427f, +0.000911f}, - {+0.063962f, +0.003468f, -0.001219f}, - {-0.198372f, -0.004393f, +0.000814f}, - {+0.132046f, +0.004112f, -0.000882f}, - {+0.118012f, +0.003780f, -0.001160f}, - {+0.169530f, -0.000759f, +0.000923f}, - {+0.077288f, -0.001422f, -0.000499f}, - {-0.187625f, +0.000022f, +0.000030f}, - {-0.200958f, -0.007075f, -0.000014f}, - {-0.099701f, -0.002974f, +0.000910f}, - {-0.019722f, +0.003866f, -0.001104f}, - {+0.014166f, +0.005774f, -0.002177f}, - {-0.039277f, -0.003862f, +0.000381f}, - {-0.138918f, -0.005302f, +0.000608f} - }, - { - {+0.169075f, -0.003877f, -0.000219f}, - {-0.092373f, +0.003200f, +0.000934f}, - {-0.217383f, +0.010383f, +0.006743f}, - {+0.037373f, +0.004176f, +0.003172f}, - {-0.168763f, +0.000238f, -0.001996f}, - {+0.140535f, -0.007256f, -0.006564f}, - {+0.113037f, -0.005040f, -0.003602f}, - {+0.161555f, -0.002184f, +0.001327f}, - {+0.073875f, +0.002628f, +0.001536f}, - {-0.165667f, -0.001239f, -0.003853f}, - {-0.179435f, +0.009646f, +0.002896f}, - {-0.097770f, +0.003616f, +0.003027f}, - {-0.009431f, -0.004981f, -0.006157f}, - {-0.008081f, +0.000345f, -0.000806f}, - {-0.031139f, +0.005138f, +0.002262f}, - {-0.125572f, +0.007103f, +0.003194f} - }, - { - {+0.156703f, +0.003123f, -0.000930f}, - {-0.066141f, -0.001589f, -0.001238f}, - {-0.199134f, -0.002236f, +0.009123f}, - {+0.024449f, +0.000091f, +0.006919f}, - {-0.141646f, -0.003103f, -0.005668f}, - {+0.133486f, -0.000744f, -0.008630f}, - {+0.097019f, -0.000327f, -0.002792f}, - {+0.144791f, +0.002980f, +0.002476f}, - {+0.068698f, +0.001637f, +0.003084f}, - {-0.144321f, -0.006179f, -0.006251f}, - {-0.155892f, -0.002625f, +0.004264f}, - {-0.084319f, -0.000388f, +0.002288f}, - {-0.006549f, -0.002981f, -0.008326f}, - {-0.021606f, -0.003867f, +0.002491f}, - {-0.023191f, -0.001810f, +0.003729f}, - {-0.101442f, -0.001244f, +0.002402f} - }, - { - {+0.140100f, -0.000742f, +0.000187f}, - {-0.036425f, +0.005652f, -0.004036f}, - {-0.165186f, -0.002894f, +0.004265f}, - {+0.025616f, -0.008625f, +0.004162f}, - {-0.121725f, +0.015558f, -0.002974f}, - {+0.111098f, +0.006811f, -0.003090f}, - {+0.072921f, -0.001667f, +0.000669f}, - {+0.120893f, -0.005073f, +0.004382f}, - {+0.065161f, -0.005346f, +0.001749f}, - {-0.129726f, +0.017304f, -0.000877f}, - {-0.126372f, -0.005082f, -0.000663f}, - {-0.063630f, +0.002788f, -0.000025f}, - {-0.013562f, +0.008476f, -0.004178f}, - {-0.027532f, -0.002871f, +0.003910f}, - {-0.014651f, +0.000004f, +0.003901f}, - {-0.068381f, +0.002931f, -0.001605f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 FASTCONV_HOA2_latency_s_fx = 20833; -#else -const float FASTCONV_HOA2_latency_s = 0.000020833f; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -7859,563 +4226,7 @@ const Word32 leftHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NT { 5841693, 808528, 2232309, }, }, }; -#else -const float leftHRIRReal_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.018159f, +0.985146f, +0.240506f}, - {+0.077046f, -0.024713f, +0.260411f}, - {+0.000593f, +0.132269f, +0.000009f}, - {+0.009213f, +0.054471f, +0.004257f}, - {+0.039823f, -0.044599f, -0.001606f}, - {+0.011090f, -0.028094f, +0.011739f}, - {-0.057613f, +0.083209f, +0.004522f}, - {+0.010244f, +0.028373f, -0.010969f}, - {-0.107601f, +0.182275f, +0.052385f} - }, - { - {-0.152534f, -0.329898f, -0.242342f}, - {-0.209786f, -1.273585f, -0.112026f}, - {-0.011413f, +0.080591f, -0.013524f}, - {-0.034221f, +0.013783f, +0.008826f}, - {-0.012372f, +0.014808f, +0.038195f}, - {+0.003235f, +0.083338f, +0.068446f}, - {+0.003314f, -0.032912f, -0.065265f}, - {+0.003322f, +0.076317f, +0.007937f}, - {-0.015189f, -0.220191f, -0.130843f} - }, - { - {-0.023093f, -0.558938f, -0.150964f}, - {-0.270176f, -0.589966f, -0.359432f}, - {-0.003260f, +0.097037f, -0.014970f}, - {-0.058519f, +0.107799f, -0.014627f}, - {-0.084143f, +0.174088f, -0.006734f}, - {-0.035814f, +0.281769f, -0.006166f}, - {+0.116511f, -0.307921f, +0.020292f}, - {-0.013401f, +0.086307f, +0.012981f}, - {+0.209526f, -0.554513f, -0.048661f} - }, - { - {+0.261551f, +0.304347f, +0.114032f}, - {+0.250896f, +0.779633f, +0.070356f}, - {+0.023786f, +0.088663f, -0.030815f}, - {+0.003407f, +0.082081f, -0.041209f}, - {-0.062118f, +0.047824f, -0.057239f}, - {-0.026013f, +0.155692f, -0.065882f}, - {+0.127095f, -0.164040f, +0.077176f}, - {-0.022006f, +0.035999f, -0.005698f}, - {+0.327951f, -0.045215f, +0.125831f} - }, - { - {+0.359497f, +0.205525f, +0.109865f}, - {+0.745384f, +0.051437f, +0.216054f}, - {+0.066207f, -0.076438f, +0.024748f}, - {+0.143496f, -0.123266f, +0.007838f}, - {+0.098368f, -0.139294f, -0.014972f}, - {+0.065224f, -0.122143f, +0.029816f}, - {-0.019520f, +0.163808f, -0.024174f}, - {+0.008568f, -0.024216f, +0.013284f}, - {+0.111141f, +0.311803f, +0.021197f} - }, - { - {+0.165159f, -0.254129f, -0.025534f}, - {+0.780421f, -0.408205f, +0.025264f}, - {+0.043262f, -0.082839f, +0.025956f}, - {+0.214774f, -0.021619f, +0.026192f}, - {+0.266921f, +0.073753f, +0.026414f}, - {+0.110056f, -0.068805f, +0.038706f}, - {-0.162323f, +0.018037f, -0.046919f}, - {+0.046582f, -0.024241f, +0.003856f}, - {-0.254154f, -0.105995f, -0.060073f} - }, - { - {-0.177496f, +0.069944f, -0.070544f}, - {+0.384878f, +0.205067f, -0.111476f}, - {-0.035734f, +0.067378f, -0.014549f}, - {+0.125583f, +0.062055f, +0.008649f}, - {+0.294346f, +0.048254f, +0.026299f}, - {+0.090207f, +0.084523f, -0.015326f}, - {-0.211714f, -0.100002f, +0.007755f}, - {+0.078344f, -0.022510f, -0.004774f}, - {-0.527842f, -0.045905f, -0.024578f} - }, - { - {-0.463362f, +0.056885f, -0.021761f}, - {-0.150954f, +0.026543f, -0.068293f}, - {-0.101521f, +0.000813f, -0.025478f}, - {-0.095046f, -0.089523f, -0.003261f}, - {+0.134616f, -0.104561f, +0.001013f}, - {+0.059105f, +0.025388f, -0.028020f}, - {-0.181070f, -0.006996f, +0.032275f}, - {+0.082036f, -0.002388f, +0.001840f}, - {-0.586330f, +0.048806f, +0.016554f} - }, - { - {-0.592381f, -0.044571f, +0.029549f}, - {-0.576892f, -0.036976f, +0.022220f}, - {-0.119596f, -0.060394f, -0.001555f}, - {-0.338453f, +0.063985f, -0.014668f}, - {-0.125238f, +0.093159f, -0.021501f}, - {+0.045169f, -0.044028f, +0.000433f}, - {-0.115198f, +0.025252f, +0.004920f}, - {+0.041077f, +0.008697f, +0.004995f}, - {-0.438497f, -0.055561f, +0.020980f} - }, - { - {-0.599054f, -0.014356f, +0.032985f}, - {-0.822874f, -0.044354f, +0.046136f}, - {-0.117506f, +0.008009f, +0.019868f}, - {-0.479925f, +0.018761f, -0.007799f}, - {-0.339581f, -0.001799f, -0.018360f}, - {+0.028531f, -0.004096f, +0.014580f}, - {-0.035532f, +0.016131f, -0.009871f}, - {-0.031577f, -0.038412f, +0.000988f}, - {-0.188266f, +0.051427f, +0.014971f} - }, - { - {-0.558565f, +0.027629f, +0.008677f}, - {-0.934558f, +0.055883f, +0.019701f}, - {-0.143536f, +0.040687f, +0.009496f}, - {-0.475498f, -0.046650f, +0.012347f}, - {-0.418986f, -0.046808f, +0.009187f}, - {-0.019973f, +0.045258f, +0.001389f}, - {+0.040837f, -0.027615f, -0.004137f}, - {-0.104086f, +0.015540f, -0.006688f}, - {+0.045132f, -0.020688f, +0.004131f} - }, - { - {-0.508817f, +0.002572f, -0.006006f}, - {-0.966334f, -0.010598f, +0.000935f}, - {-0.200114f, -0.021501f, -0.002245f}, - {-0.374199f, +0.021235f, +0.015875f}, - {-0.383236f, +0.011504f, +0.019281f}, - {-0.101681f, -0.007702f, -0.004459f}, - {+0.098607f, +0.009824f, -0.000170f}, - {-0.142186f, +0.015367f, -0.000073f}, - {+0.202499f, +0.007942f, -0.007850f} - }, - { - {-0.449816f, -0.025700f, -0.002766f}, - {-0.942805f, -0.019015f, +0.002630f}, - {-0.251515f, +0.005009f, -0.000037f}, - {-0.247529f, -0.018163f, +0.007953f}, - {-0.297646f, -0.008359f, +0.008978f}, - {-0.194833f, +0.010293f, +0.006773f}, - {+0.127610f, -0.005400f, -0.000110f}, - {-0.141062f, -0.005988f, +0.007030f}, - {+0.285592f, -0.008291f, -0.012555f} - }, - { - {-0.376168f, +0.026055f, +0.004627f}, - {-0.871841f, +0.021874f, +0.006470f}, - {-0.251474f, +0.012379f, +0.004839f}, - {-0.143351f, +0.003085f, +0.000557f}, - {-0.213031f, +0.008846f, +0.002525f}, - {-0.266224f, -0.023397f, +0.007678f}, - {+0.122414f, -0.005951f, +0.000933f}, - {-0.115352f, -0.004480f, +0.001947f}, - {+0.318209f, +0.018171f, -0.006837f} - }, - { - {-0.293873f, -0.014103f, +0.005564f}, - {-0.763509f, -0.026484f, +0.005957f}, - {-0.167339f, -0.021635f, +0.004681f}, - {-0.071079f, -0.008355f, -0.004673f}, - {-0.149092f, -0.004738f, -0.000445f}, - {-0.269948f, +0.002632f, +0.000196f}, - {+0.088484f, +0.013962f, +0.000022f}, - {-0.080315f, -0.009623f, -0.002700f}, - {+0.315546f, +0.000498f, +0.000137f} - }, - { - {-0.214030f, +0.010451f, +0.001827f}, - {-0.638609f, +0.024424f, +0.004195f}, - {-0.000480f, +0.033426f, -0.002795f}, - {-0.011678f, +0.017775f, -0.002438f}, - {-0.092630f, +0.011217f, -0.001499f}, - {-0.179494f, +0.027872f, -0.004886f}, - {+0.049375f, -0.006195f, +0.000322f}, - {-0.050886f, +0.014806f, +0.001580f}, - {+0.284102f, -0.013452f, -0.000223f} - }, - { - {-0.142407f, -0.012908f, -0.000129f}, - {-0.521031f, -0.021513f, +0.002424f}, - {+0.212730f, -0.053828f, -0.007313f}, - {+0.050092f, -0.009707f, -0.001567f}, - {-0.022713f, -0.014891f, -0.001899f}, - {-0.013352f, -0.051652f, -0.004824f}, - {+0.034982f, -0.000584f, +0.002038f}, - {-0.037735f, -0.000643f, +0.005700f}, - {+0.234664f, +0.015884f, -0.002619f} - }, - { - {-0.078162f, +0.013149f, +0.000240f}, - {-0.425304f, +0.016123f, +0.001883f}, - {+0.408229f, +0.052323f, -0.001957f}, - {+0.116415f, +0.013525f, -0.004497f}, - {+0.067314f, +0.020251f, -0.003762f}, - {+0.167553f, +0.051767f, +0.000869f}, - {+0.068137f, +0.009479f, +0.001235f}, - {-0.034203f, -0.008399f, +0.003763f}, - {+0.180796f, -0.011205f, -0.003598f} - }, - { - {-0.016750f, -0.012127f, +0.000498f}, - {-0.353965f, -0.008335f, +0.000653f}, - {+0.518342f, -0.011173f, +0.002964f}, - {+0.177026f, -0.019969f, -0.002705f}, - {+0.164814f, -0.026646f, -0.003238f}, - {+0.286213f, -0.012718f, +0.003816f}, - {+0.155640f, -0.020546f, -0.001850f}, - {-0.016416f, +0.003918f, -0.001774f}, - {+0.133919f, +0.003314f, -0.001822f} - }, - { - {+0.046182f, +0.012351f, -0.000034f}, - {-0.298885f, +0.009039f, -0.000810f}, - {+0.511610f, -0.032188f, -0.002291f}, - {+0.211380f, +0.005455f, +0.000933f}, - {+0.241218f, +0.015123f, -0.001103f}, - {+0.293508f, -0.029470f, -0.003051f}, - {+0.280548f, +0.030234f, -0.004368f}, - {+0.041260f, +0.018979f, -0.004541f}, - {+0.098998f, +0.002094f, +0.002904f} - }, - { - {+0.111605f, -0.013530f, -0.000652f}, - {-0.246690f, -0.016108f, +0.001020f}, - {+0.413977f, +0.038179f, -0.009520f}, - {+0.203190f, +0.017508f, -0.002191f}, - {+0.268601f, +0.003682f, -0.001755f}, - {+0.196136f, +0.036857f, -0.009761f}, - {+0.402137f, -0.026686f, -0.005055f}, - {+0.145035f, -0.035432f, -0.001365f}, - {+0.074946f, +0.007868f, +0.004954f} - }, - { - {+0.176108f, +0.013431f, -0.000958f}, - {-0.185298f, +0.016846f, +0.004677f}, - {+0.286889f, -0.019450f, -0.007487f}, - {+0.153787f, -0.015814f, -0.006505f}, - {+0.239195f, -0.011851f, -0.001930f}, - {+0.042102f, -0.023553f, -0.004947f}, - {+0.470133f, +0.012898f, -0.003624f}, - {+0.270107f, +0.025928f, -0.000154f}, - {+0.059116f, -0.020434f, -0.003101f} - }, - { - {+0.234033f, -0.013522f, -0.000160f}, - {-0.105917f, -0.008837f, +0.002769f}, - {+0.184987f, +0.008247f, -0.000624f}, - {+0.076510f, +0.005900f, -0.001804f}, - {+0.166708f, +0.022644f, -0.001485f}, - {-0.112604f, +0.020438f, +0.005184f}, - {+0.450824f, +0.006092f, +0.002002f}, - {+0.374333f, -0.013645f, -0.004183f}, - {+0.050668f, -0.002470f, -0.009849f} - }, - { - {+0.280701f, +0.008633f, +0.001045f}, - {-0.002220f, +0.016553f, -0.003998f}, - {+0.131643f, -0.003842f, +0.001872f}, - {-0.015690f, -0.016479f, +0.005047f}, - {+0.077685f, -0.023492f, -0.003551f}, - {-0.223388f, -0.024340f, +0.007042f}, - {+0.346787f, -0.042038f, +0.003586f}, - {+0.418985f, +0.005219f, -0.005591f}, - {+0.040023f, +0.024273f, +0.000362f} - }, - { - {+0.315972f, -0.002222f, +0.000114f}, - {+0.123110f, -0.036764f, -0.004764f}, - {+0.119199f, -0.002064f, +0.000988f}, - {-0.106689f, +0.025325f, +0.004605f}, - {-0.000310f, +0.007517f, -0.002748f}, - {-0.262374f, +0.010338f, +0.000067f}, - {+0.204029f, +0.052292f, -0.005305f}, - {+0.380172f, +0.016758f, -0.003741f}, - {+0.003388f, +0.008217f, +0.011667f} - }, - { - {+0.346296f, +0.003536f, -0.001898f}, - {+0.248976f, +0.036524f, +0.001389f}, - {+0.120849f, +0.002931f, +0.000722f}, - {-0.173186f, -0.016622f, +0.000289f}, - {-0.054827f, -0.000181f, +0.002418f}, - {-0.225358f, +0.023135f, -0.002820f}, - {+0.091375f, -0.014867f, -0.010230f}, - {+0.260139f, -0.034357f, -0.002468f}, - {-0.068405f, -0.042485f, +0.005111f} - }, - { - {+0.379862f, -0.009494f, -0.001961f}, - {+0.345947f, -0.013885f, +0.004347f}, - {+0.108945f, +0.001609f, +0.002277f}, - {-0.194971f, -0.005237f, -0.000216f}, - {-0.090631f, +0.007307f, +0.004497f}, - {-0.139916f, -0.036851f, +0.003429f}, - {+0.049457f, -0.016676f, -0.004125f}, - {+0.089658f, +0.040648f, -0.001276f}, - {-0.147747f, +0.028109f, -0.006357f} - }, - { - {+0.419521f, +0.011992f, -0.000293f}, - {+0.399888f, -0.006995f, -0.000613f}, - {+0.071268f, -0.013451f, +0.003383f}, - {-0.169244f, +0.016170f, +0.002968f}, - {-0.116230f, -0.009802f, +0.001756f}, - {-0.053621f, +0.017175f, +0.008163f}, - {+0.065166f, +0.025359f, +0.005381f}, - {-0.086447f, -0.037823f, -0.001051f}, - {-0.194782f, +0.007204f, -0.005393f} - }, - { - {+0.461674f, -0.009238f, +0.000744f}, - {+0.422873f, +0.002942f, -0.006024f}, - {+0.017965f, +0.019932f, +0.001068f}, - {-0.112940f, -0.014296f, +0.003691f}, - {-0.135675f, +0.004946f, -0.000913f}, - {-0.001359f, +0.007810f, +0.003619f}, - {+0.090834f, -0.000688f, +0.008234f}, - {-0.227027f, +0.020653f, -0.000262f}, - {-0.193552f, -0.020886f, +0.003761f} - }, - { - {+0.500543f, +0.004460f, -0.000339f}, - {+0.438946f, +0.008173f, -0.005382f}, - {-0.025063f, -0.012096f, -0.002727f}, - {-0.048264f, +0.016297f, +0.004137f}, - {-0.148356f, +0.006714f, +0.001928f}, - {+0.016069f, -0.011271f, -0.004203f}, - {+0.085225f, -0.019738f, +0.001763f}, - {-0.310418f, -0.002136f, +0.003576f}, - {-0.158213f, +0.011793f, +0.008536f} - }, - { - {+0.533110f, -0.005084f, -0.001776f}, - {+0.463561f, -0.015347f, -0.000549f}, - {-0.035070f, -0.007804f, -0.002842f}, - {+0.008595f, -0.003050f, +0.002916f}, - {-0.153491f, +0.002287f, +0.004867f}, - {+0.021318f, +0.000337f, -0.007722f}, - {+0.040490f, +0.023364f, -0.005685f}, - {-0.339640f, -0.004014f, +0.007635f}, - {-0.113068f, +0.002471f, +0.003970f} - }, - { - {+0.559507f, +0.006521f, -0.001337f}, - {+0.495821f, +0.006508f, +0.001808f}, - {-0.009393f, +0.020033f, +0.002230f}, - {+0.057093f, +0.005006f, -0.000599f}, - {-0.147824f, -0.005127f, +0.001599f}, - {+0.035200f, +0.017556f, -0.003623f}, - {-0.026148f, -0.010270f, -0.006517f}, - {-0.331865f, -0.002383f, +0.006123f}, - {-0.069791f, +0.006016f, -0.000948f} - }, - { - {+0.580524f, -0.004095f, -0.000494f}, - {+0.527187f, -0.003574f, +0.000131f}, - {+0.034392f, -0.012275f, +0.006324f}, - {+0.108521f, -0.008134f, -0.002780f}, - {-0.124651f, -0.003736f, -0.002434f}, - {+0.058607f, -0.013665f, +0.003392f}, - {-0.096848f, +0.005058f, -0.001324f}, - {-0.301438f, -0.004261f, +0.001796f}, - {-0.026983f, -0.008052f, -0.001333f} - }, - { - {+0.597812f, +0.002656f, -0.000522f}, - {+0.552363f, +0.003313f, -0.001014f}, - {+0.075214f, -0.005271f, +0.002238f}, - {+0.170571f, +0.018162f, -0.002847f}, - {-0.083934f, +0.017743f, -0.001407f}, - {+0.076846f, -0.004888f, +0.003003f}, - {-0.166265f, -0.007573f, +0.004024f}, - {-0.256165f, +0.011081f, +0.000547f}, - {+0.019750f, +0.010957f, -0.001327f} - }, - { - {+0.613921f, -0.002403f, -0.000945f}, - {+0.571681f, -0.004061f, -0.000722f}, - {+0.106010f, -0.000496f, -0.004030f}, - {+0.238299f, -0.018447f, -0.000821f}, - {-0.038282f, -0.014684f, +0.002501f}, - {+0.080622f, +0.007409f, -0.002126f}, - {-0.235224f, +0.017619f, +0.005449f}, - {-0.203255f, -0.012695f, +0.000929f}, - {+0.070865f, -0.011018f, -0.001639f} - }, - { - {+0.630982f, +0.003698f, -0.001234f}, - {+0.590355f, +0.003219f, -0.000406f}, - {+0.130676f, +0.011921f, -0.002723f}, - {+0.295756f, +0.013516f, +0.001143f}, - {-0.005092f, +0.003596f, +0.003545f}, - {+0.072459f, +0.000272f, -0.002800f}, - {-0.299780f, -0.022696f, +0.001211f}, - {-0.150313f, +0.011501f, +0.001280f}, - {+0.118367f, +0.011753f, -0.001359f} - }, - { - {+0.649444f, -0.004884f, -0.000984f}, - {+0.615054f, -0.005408f, -0.000735f}, - {+0.149940f, -0.006453f, +0.001164f}, - {+0.328584f, -0.000395f, +0.001275f}, - {+0.008438f, +0.005199f, +0.001454f}, - {+0.058218f, -0.000064f, +0.000029f}, - {-0.346981f, +0.007071f, -0.001972f}, - {-0.104327f, -0.007957f, +0.001209f}, - {+0.149121f, -0.004220f, -0.000790f} - }, - { - {+0.667442f, +0.004369f, -0.000509f}, - {+0.649912f, +0.008091f, -0.001108f}, - {+0.160941f, -0.003110f, +0.000358f}, - {+0.335024f, -0.007340f, -0.001370f}, - {+0.010516f, -0.004138f, -0.001016f}, - {+0.042559f, -0.003980f, +0.001022f}, - {-0.366888f, +0.007198f, +0.001062f}, - {-0.068558f, +0.004871f, +0.000722f}, - {+0.153026f, -0.002598f, -0.000878f} - }, - { - {+0.682283f, -0.002839f, -0.000182f}, - {+0.693711f, -0.010677f, -0.001270f}, - {+0.163061f, +0.001749f, -0.001941f}, - {+0.327679f, +0.004372f, -0.003551f}, - {+0.017128f, -0.001449f, -0.002254f}, - {+0.029387f, +0.003404f, +0.000254f}, - {-0.363800f, -0.005157f, +0.004344f}, - {-0.041106f, -0.002019f, -0.000551f}, - {+0.130106f, +0.008236f, -0.000670f} - }, - { - {+0.692437f, +0.000095f, -0.000537f}, - {+0.740634f, +0.011604f, -0.000655f}, - {+0.157996f, +0.002060f, -0.000837f}, - {+0.323158f, +0.005481f, -0.001955f}, - {+0.039932f, +0.012585f, -0.000817f}, - {+0.021634f, -0.000010f, +0.000230f}, - {-0.350228f, -0.000420f, +0.003173f}, - {-0.016658f, +0.005630f, -0.001178f}, - {+0.089943f, -0.012079f, -0.001069f} - }, - { - {+0.698662f, +0.000230f, -0.001425f}, - {+0.782838f, -0.007193f, -0.000387f}, - {+0.147754f, +0.002321f, +0.001054f}, - {+0.330876f, -0.007440f, +0.001734f}, - {+0.078436f, -0.014161f, +0.002562f}, - {+0.020690f, -0.001093f, +0.000930f}, - {-0.336354f, +0.000244f, +0.000495f}, - {+0.007725f, -0.004802f, -0.001236f}, - {+0.047620f, +0.008277f, -0.001417f} - }, - { - {+0.703246f, +0.002409f, -0.001250f}, - {+0.814977f, +0.003204f, -0.001382f}, - {+0.135217f, -0.009385f, -0.001169f}, - {+0.350177f, -0.000838f, +0.000877f}, - {+0.122288f, +0.004476f, +0.002216f}, - {+0.025713f, -0.002869f, -0.000621f}, - {-0.325782f, +0.004520f, +0.000748f}, - {+0.030650f, +0.008462f, -0.000266f}, - {+0.015647f, -0.003005f, -0.000601f} - }, - { - {+0.707436f, -0.002159f, -0.000184f}, - {+0.836328f, -0.001420f, -0.002805f}, - {+0.124343f, +0.003534f, -0.004617f}, - {+0.377173f, -0.003128f, -0.002966f}, - {+0.162938f, -0.001908f, -0.001890f}, - {+0.034346f, -0.001148f, -0.003196f}, - {-0.317600f, -0.001145f, +0.002065f}, - {+0.047783f, -0.002726f, +0.001091f}, - {-0.001518f, -0.002014f, +0.001386f} - }, - { - {+0.711316f, +0.000190f, +0.000116f}, - {+0.849400f, +0.005461f, -0.002132f}, - {+0.115220f, +0.006522f, -0.002677f}, - {+0.406205f, +0.009733f, -0.003200f}, - {+0.198229f, +0.008830f, -0.003296f}, - {+0.041723f, +0.007295f, -0.001797f}, - {-0.307751f, -0.000513f, +0.001061f}, - {+0.056384f, -0.001852f, +0.000252f}, - {-0.007409f, -0.002688f, +0.001636f} - }, - { - {+0.715564f, +0.000878f, -0.000712f}, - {+0.856145f, -0.001865f, -0.000304f}, - {+0.099717f, +0.000516f, +0.001510f}, - {+0.427792f, -0.008621f, -0.000103f}, - {+0.227122f, -0.009743f, -0.000742f}, - {+0.038969f, +0.000573f, +0.000890f}, - {-0.290500f, -0.003837f, -0.000282f}, - {+0.060351f, +0.002258f, -0.001388f}, - {-0.007102f, +0.000681f, +0.000051f} - }, - { - {+0.721724f, +0.001440f, -0.001419f}, - {+0.857928f, -0.002494f, -0.000723f}, - {+0.068940f, -0.015230f, +0.000407f}, - {+0.432906f, -0.004606f, +0.000685f}, - {+0.246924f, +0.000678f, +0.000115f}, - {+0.019686f, -0.012823f, -0.000958f}, - {-0.263371f, +0.009394f, +0.000248f}, - {+0.066836f, +0.001658f, -0.002275f}, - {-0.003255f, +0.001689f, -0.000037f} - }, - { - {+0.730712f, -0.003910f, -0.000870f}, - {+0.858450f, +0.001220f, -0.001946f}, - {+0.023475f, +0.016216f, -0.003883f}, - {+0.419872f, +0.011121f, -0.002752f}, - {+0.256682f, +0.002820f, -0.002128f}, - {-0.013513f, +0.011639f, -0.004607f}, - {-0.229180f, -0.009683f, +0.001814f}, - {+0.080511f, -0.005798f, -0.001723f}, - {+0.001435f, +0.000756f, -0.000451f} - }, - { - {+0.741590f, +0.003101f, -0.000011f}, - {+0.860726f, -0.000300f, -0.002853f}, - {-0.028493f, -0.003694f, -0.002869f}, - {+0.395211f, -0.003270f, -0.003914f}, - {+0.257602f, +0.001422f, -0.002810f}, - {-0.053057f, -0.000570f, -0.002860f}, - {-0.193999f, +0.002947f, +0.000888f}, - {+0.099824f, +0.006425f, -0.000616f}, - {+0.005522f, +0.002697f, -0.000570f} - }, - { - {+0.752785f, -0.000581f, -0.000328f}, - {+0.864679f, -0.002652f, -0.003144f}, - {-0.079249f, -0.003995f, +0.005777f}, - {+0.366044f, -0.005911f, +0.001913f}, - {+0.251095f, -0.009072f, +0.002248f}, - {-0.092600f, -0.005125f, +0.005522f}, - {-0.162554f, -0.001717f, -0.002557f}, - {+0.119626f, -0.005564f, +0.000516f}, - {+0.008439f, -0.004393f, +0.001712f} - }, - { - {+0.763163f, -0.000862f, -0.002020f}, - {+0.868650f, +0.005188f, -0.001363f}, - {-0.122932f, -0.003612f, +0.014766f}, - {+0.337176f, +0.004705f, +0.011739f}, - {+0.240301f, +0.007676f, +0.011938f}, - {-0.125784f, -0.004581f, +0.013027f}, - {-0.137073f, +0.006965f, -0.003725f}, - {+0.136715f, +0.001962f, +0.001072f}, - {+0.010881f, +0.001506f, +0.004158f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -8969,563 +4780,7 @@ const Word32 leftHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NT { 23650238, -587337, 591632, }, }, }; -#else -const float leftHRIRImag_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.067351f, +0.619497f, -0.224314f}, - {-0.139294f, +0.771571f, -0.258097f}, - {-0.003713f, +0.028657f, -0.008450f}, - {-0.024048f, +0.069155f, -0.020553f}, - {-0.025678f, -0.026025f, +0.019233f}, - {-0.009936f, -0.011063f, +0.007565f}, - {+0.034483f, +0.043638f, -0.029489f}, - {+0.006138f, -0.086263f, +0.038216f}, - {+0.046480f, +0.249243f, -0.117268f} - }, - { - {+0.012648f, +0.734658f, -0.184512f}, - {-0.111037f, +0.538674f, -0.336987f}, - {-0.002627f, -0.020803f, -0.029183f}, - {-0.030921f, +0.004858f, -0.041299f}, - {-0.051115f, -0.078198f, +0.009636f}, - {-0.016252f, -0.028855f, +0.008268f}, - {+0.084591f, +0.153968f, -0.000650f}, - {-0.017068f, -0.206982f, -0.012636f}, - {+0.164507f, +0.469681f, -0.054789f} - }, - { - {+0.223221f, -0.320495f, +0.172323f}, - {+0.327663f, -0.928806f, +0.128055f}, - {+0.019358f, -0.074304f, -0.015400f}, - {+0.035210f, -0.082508f, -0.021387f}, - {-0.001915f, +0.019754f, -0.041779f}, - {+0.009482f, -0.004447f, -0.006672f}, - {+0.039341f, +0.054366f, +0.052326f}, - {-0.015501f, -0.146235f, -0.037803f}, - {+0.140215f, +0.011558f, +0.133087f} - }, - { - {+0.158118f, -0.393316f, +0.132368f}, - {+0.546868f, -0.311888f, +0.284518f}, - {+0.031012f, +0.036496f, +0.023744f}, - {+0.107357f, +0.078785f, +0.019930f}, - {+0.117669f, +0.168393f, -0.014741f}, - {+0.063269f, +0.132935f, +0.029018f}, - {-0.110215f, -0.232883f, -0.026283f}, - {+0.026325f, -0.007643f, +0.015801f}, - {-0.156350f, -0.444539f, +0.006974f} - }, - { - {-0.158057f, +0.298412f, -0.065118f}, - {+0.180062f, +0.634611f, -0.013767f}, - {-0.011461f, +0.071086f, +0.018569f}, - {+0.074813f, +0.048439f, +0.032538f}, - {+0.176343f, -0.017086f, +0.039934f}, - {+0.070878f, +0.087909f, +0.042882f}, - {-0.196698f, -0.095181f, -0.059079f}, - {+0.043237f, +0.006669f, +0.001955f}, - {-0.440379f, +0.000452f, -0.098398f} - }, - { - {-0.449468f, +0.042993f, -0.088093f}, - {-0.450454f, -0.142745f, -0.162071f}, - {-0.082857f, -0.081326f, -0.023342f}, - {-0.091693f, -0.115333f, +0.002878f}, - {+0.059625f, -0.113643f, +0.022660f}, - {+0.002551f, -0.114733f, -0.021413f}, - {-0.134830f, +0.127944f, +0.015214f}, - {+0.039406f, -0.002734f, -0.000806f}, - {-0.456803f, +0.175205f, -0.017055f} - }, - { - {-0.521027f, -0.156261f, +0.000350f}, - {-0.908889f, -0.180570f, -0.051670f}, - {-0.108770f, -0.053291f, -0.027241f}, - {-0.287995f, +0.046150f, -0.015860f}, - {-0.175042f, +0.108856f, -0.012453f}, - {-0.059786f, -0.044325f, -0.033874f}, - {-0.008998f, -0.011671f, +0.039397f}, - {+0.004422f, -0.001021f, +0.005255f}, - {-0.225556f, -0.103116f, +0.036951f} - }, - { - {-0.371766f, +0.087065f, +0.052523f}, - {-1.010425f, +0.130810f, +0.067243f}, - {-0.070822f, +0.064314f, +0.008682f}, - {-0.381257f, -0.000635f, -0.013290f}, - {-0.375703f, -0.033440f, -0.023774f}, - {-0.081888f, +0.060050f, +0.009146f}, - {+0.099530f, -0.054172f, +0.002402f}, - {-0.055187f, -0.030383f, +0.004615f}, - {+0.113698f, +0.047344f, +0.023699f} - }, - { - {-0.133153f, +0.006407f, +0.034476f}, - {-0.837054f, +0.001398f, +0.067755f}, - {-0.019596f, -0.013995f, +0.025797f}, - {-0.306127f, -0.073720f, -0.002010f}, - {-0.417535f, -0.051347f, -0.011222f}, - {-0.096752f, +0.015410f, +0.024298f}, - {+0.165604f, -0.014311f, -0.020675f}, - {-0.110129f, +0.012754f, -0.001173f}, - {+0.396896f, -0.022479f, +0.001703f} - }, - { - {+0.076154f, -0.015041f, -0.005731f}, - {-0.558795f, -0.016178f, +0.011329f}, - {+0.001783f, -0.050805f, +0.008376f}, - {-0.100163f, +0.081596f, +0.016700f}, - {-0.287003f, +0.097687f, +0.016950f}, - {-0.130328f, -0.051441f, +0.002818f}, - {+0.194137f, +0.028286f, -0.006100f}, - {-0.128998f, -0.007273f, -0.004964f}, - {+0.525370f, -0.013001f, -0.010543f} - }, - { - {+0.227729f, -0.027128f, -0.019508f}, - {-0.280803f, -0.046474f, -0.016340f}, - {+0.006184f, +0.007629f, -0.010663f}, - {+0.124161f, -0.022132f, +0.014831f}, - {-0.082170f, -0.023992f, +0.023358f}, - {-0.168199f, +0.000379f, -0.008102f}, - {+0.185287f, +0.007140f, +0.002454f}, - {-0.098830f, -0.034738f, -0.000610f}, - {+0.505599f, +0.024919f, -0.016122f} - }, - { - {+0.345183f, +0.044417f, -0.008489f}, - {-0.029206f, +0.069971f, -0.008062f}, - {+0.040780f, +0.025656f, -0.005557f}, - {+0.280661f, +0.000086f, -0.001939f}, - {+0.091189f, -0.001516f, +0.001765f}, - {-0.178051f, +0.018186f, +0.003683f}, - {+0.147526f, -0.011735f, +0.000472f}, - {-0.034700f, +0.017373f, +0.007552f}, - {+0.404231f, -0.018810f, -0.013580f} - }, - { - {+0.447376f, -0.029945f, +0.002359f}, - {+0.196485f, -0.048776f, +0.000528f}, - {+0.131413f, -0.031345f, +0.001264f}, - {+0.352086f, -0.000092f, -0.009252f}, - {+0.196164f, -0.010102f, -0.008244f}, - {-0.137927f, -0.001411f, +0.005445f}, - {+0.094224f, +0.013361f, +0.000776f}, - {+0.030220f, +0.002376f, +0.001349f}, - {+0.282599f, +0.004869f, -0.002937f} - }, - { - {+0.532898f, +0.008836f, +0.002166f}, - {+0.392609f, +0.034792f, -0.000679f}, - {+0.270895f, +0.030297f, -0.000156f}, - {+0.364913f, -0.004283f, -0.009820f}, - {+0.243967f, +0.002627f, -0.007384f}, - {-0.037047f, +0.017787f, -0.004491f}, - {+0.041930f, -0.015182f, -0.000239f}, - {+0.078287f, +0.007042f, -0.004821f}, - {+0.167608f, -0.019027f, +0.005545f} - }, - { - {+0.594888f, -0.002438f, -0.003208f}, - {+0.547092f, -0.023930f, -0.003204f}, - {+0.418638f, -0.023295f, -0.006545f}, - {+0.358947f, -0.011193f, -0.005371f}, - {+0.268043f, -0.007992f, -0.005934f}, - {+0.108159f, -0.040803f, -0.007847f}, - {+0.014237f, +0.000657f, -0.000908f}, - {+0.104780f, -0.013359f, -0.000511f}, - {+0.064568f, +0.028680f, +0.003338f} - }, - { - {+0.635005f, +0.006702f, -0.005006f}, - {+0.650934f, +0.013984f, -0.004474f}, - {+0.519015f, +0.020899f, -0.008786f}, - {+0.354058f, +0.000065f, -0.000944f}, - {+0.293166f, +0.009243f, -0.003786f}, - {+0.244478f, +0.036317f, -0.004273f}, - {+0.027137f, +0.008991f, +0.000305f}, - {+0.112434f, -0.002933f, +0.003310f}, - {-0.019782f, -0.018420f, -0.000608f} - }, - { - {+0.661388f, -0.006850f, -0.003249f}, - {+0.709859f, -0.007935f, -0.004126f}, - {+0.524557f, -0.002414f, -0.002080f}, - {+0.344994f, +0.003888f, -0.002639f}, - {+0.316812f, -0.006036f, -0.003412f}, - {+0.307717f, -0.012550f, +0.001272f}, - {+0.076841f, -0.011681f, -0.000880f}, - {+0.115864f, +0.008381f, -0.000189f}, - {-0.078312f, +0.007256f, -0.000761f} - }, - { - {+0.681780f, +0.004317f, -0.002114f}, - {+0.740600f, +0.002506f, -0.003738f}, - {+0.416864f, -0.038264f, +0.003168f}, - {+0.319577f, -0.000792f, -0.001313f}, - {+0.319873f, +0.002666f, -0.002245f}, - {+0.258538f, -0.029824f, +0.003409f}, - {+0.141548f, +0.012818f, -0.003839f}, - {+0.135337f, +0.001218f, -0.005061f}, - {-0.109830f, +0.001645f, +0.001441f} - }, - { - {+0.699871f, -0.003221f, -0.002308f}, - {+0.762514f, -0.004609f, -0.003814f}, - {+0.225434f, +0.064939f, -0.001450f}, - {+0.266431f, +0.012897f, +0.002255f}, - {+0.282175f, +0.010311f, +0.000422f}, - {+0.108713f, +0.058556f, -0.002399f}, - {+0.186968f, -0.009396f, -0.004807f}, - {+0.178376f, -0.016506f, -0.006062f}, - {-0.120383f, -0.003023f, +0.004088f} - }, - { - {+0.714529f, +0.003253f, -0.002414f}, - {+0.790696f, +0.011388f, -0.001985f}, - {+0.020833f, -0.046458f, -0.007156f}, - {+0.185944f, -0.029249f, +0.000016f}, - {+0.197551f, -0.028731f, -0.000138f}, - {-0.079181f, -0.043101f, -0.006863f}, - {+0.176963f, -0.004258f, -0.002861f}, - {+0.228839f, +0.021085f, -0.002090f}, - {-0.119574f, -0.002646f, +0.004158f} - }, - { - {+0.721602f, -0.001258f, -0.002069f}, - {+0.831027f, -0.010846f, +0.000173f}, - {-0.126177f, +0.009153f, -0.003439f}, - {+0.096173f, +0.020892f, -0.003906f}, - {+0.084227f, +0.027335f, -0.001653f}, - {-0.229925f, +0.010207f, -0.000875f}, - {+0.090658f, +0.023511f, +0.000256f}, - {+0.250703f, +0.000323f, +0.000133f}, - {-0.115659f, +0.011998f, -0.001947f} - }, - { - {+0.717593f, -0.001188f, -0.001513f}, - {+0.881199f, +0.003795f, -0.002266f}, - {-0.186085f, +0.008805f, +0.004207f}, - {+0.021886f, +0.000682f, +0.000980f}, - {-0.024639f, -0.019808f, -0.000274f}, - {-0.296639f, +0.006775f, +0.008463f}, - {-0.060930f, -0.036828f, +0.003817f}, - {+0.210581f, -0.022700f, -0.003357f}, - {-0.112881f, +0.004715f, -0.006188f} - }, - { - {+0.702872f, +0.004202f, -0.000899f}, - {+0.934393f, -0.006557f, -0.007476f}, - {-0.176147f, -0.010014f, +0.006716f}, - {-0.022135f, +0.003624f, +0.007346f}, - {-0.100594f, +0.012448f, +0.000135f}, - {-0.271960f, -0.005598f, +0.007977f}, - {-0.233701f, +0.046766f, +0.003616f}, - {+0.101020f, +0.023227f, -0.002321f}, - {-0.116785f, -0.020405f, +0.002997f} - }, - { - {+0.682250f, -0.007566f, -0.001501f}, - {+0.978417f, +0.017585f, -0.006636f}, - {-0.137592f, +0.005047f, +0.003880f}, - {-0.028458f, -0.006826f, +0.004609f}, - {-0.129898f, +0.005880f, +0.001391f}, - {-0.175874f, +0.016526f, -0.001013f}, - {-0.367276f, -0.033929f, -0.002775f}, - {-0.060514f, -0.037887f, +0.002465f}, - {-0.137333f, -0.006964f, +0.011955f} - }, - { - {+0.663415f, +0.004606f, -0.002781f}, - {+0.993852f, -0.009178f, +0.000038f}, - {-0.108250f, -0.003270f, +0.001437f}, - {+0.009848f, -0.008477f, -0.000681f}, - {-0.118923f, -0.012268f, +0.005212f}, - {-0.044501f, -0.037572f, -0.003962f}, - {-0.416290f, -0.006378f, -0.006076f}, - {-0.236610f, +0.040350f, +0.002858f}, - {-0.168887f, +0.032800f, +0.004036f} - }, - { - {+0.651781f, +0.001152f, -0.002457f}, - {+0.965546f, -0.016499f, +0.002125f}, - {-0.105651f, -0.001646f, +0.002481f}, - {+0.090167f, +0.025763f, -0.001130f}, - {-0.087686f, +0.003999f, +0.005549f}, - {+0.075223f, +0.035790f, +0.002847f}, - {-0.383115f, +0.037796f, +0.001566f}, - {-0.378556f, -0.025237f, +0.002287f}, - {-0.179845f, -0.008941f, -0.008124f} - }, - { - {+0.645685f, -0.002682f, -0.000593f}, - {+0.900401f, +0.029783f, -0.003285f}, - {-0.124380f, +0.012275f, +0.001822f}, - {+0.193225f, -0.027406f, +0.000945f}, - {-0.052400f, +0.001580f, +0.000684f}, - {+0.141411f, +0.002262f, +0.004491f}, - {-0.319576f, -0.023501f, +0.010635f}, - {-0.448327f, +0.001574f, +0.004044f}, - {-0.141908f, -0.032139f, -0.005596f} - }, - { - {+0.638137f, -0.002412f, +0.000310f}, - {+0.826423f, -0.017144f, -0.007574f}, - {-0.140725f, -0.006104f, -0.000815f}, - {+0.290930f, +0.019453f, +0.001904f}, - {-0.016875f, +0.009182f, -0.001656f}, - {+0.145675f, -0.017736f, -0.001807f}, - {-0.285941f, -0.010851f, +0.008570f}, - {-0.435070f, +0.011023f, +0.004307f}, - {-0.062178f, +0.036767f, +0.005654f} - }, - { - {+0.623287f, +0.007299f, -0.001056f}, - {+0.770521f, -0.001075f, -0.004559f}, - {-0.130645f, -0.003274f, -0.002902f}, - {+0.361351f, -0.005902f, +0.000348f}, - {+0.020477f, -0.011841f, +0.000752f}, - {+0.114514f, +0.018145f, -0.007488f}, - {-0.305625f, +0.026256f, -0.000446f}, - {-0.353862f, -0.030431f, +0.004835f}, - {+0.024417f, -0.010793f, +0.007820f} - }, - { - {+0.600902f, -0.006021f, -0.002348f}, - {+0.739248f, +0.005015f, +0.001571f}, - {-0.087167f, +0.021027f, -0.001847f}, - {+0.400187f, +0.000286f, -0.002317f}, - {+0.060945f, +0.009244f, +0.002589f}, - {+0.083328f, +0.001928f, -0.007725f}, - {-0.359405f, -0.019595f, -0.006438f}, - {-0.237042f, +0.027090f, +0.006659f}, - {+0.089013f, -0.004244f, -0.000128f} - }, - { - {+0.574438f, +0.003368f, -0.001494f}, - {+0.720431f, +0.005878f, +0.002928f}, - {-0.025553f, -0.022088f, +0.002875f}, - {+0.419048f, +0.001480f, -0.004334f}, - {+0.105303f, -0.000852f, -0.000385f}, - {+0.070507f, -0.013892f, -0.000793f}, - {-0.411663f, -0.001662f, -0.003755f}, - {-0.118815f, -0.013893f, +0.002937f}, - {+0.127181f, -0.002212f, -0.005490f} - }, - { - {+0.546941f, -0.004959f, -0.000239f}, - {+0.700235f, -0.009986f, -0.000285f}, - {+0.026874f, +0.006811f, +0.004565f}, - {+0.432826f, +0.004148f, -0.005149f}, - {+0.153860f, +0.009932f, -0.004309f}, - {+0.067445f, +0.005555f, +0.005512f}, - {-0.441084f, +0.007824f, +0.003852f}, - {-0.016912f, +0.012081f, -0.003174f}, - {+0.148914f, +0.007013f, -0.004323f} - }, - { - {+0.520436f, +0.006384f, -0.000382f}, - {+0.674657f, +0.006620f, -0.001998f}, - {+0.052406f, +0.010142f, -0.000198f}, - {+0.447102f, -0.009070f, -0.003159f}, - {+0.202135f, -0.018081f, -0.002032f}, - {+0.055887f, +0.014144f, +0.003615f}, - {-0.448314f, -0.001324f, +0.007309f}, - {+0.065957f, -0.020607f, -0.003258f}, - {+0.162472f, -0.004875f, -0.002127f} - }, - { - {+0.496665f, -0.004859f, -0.000887f}, - {+0.647428f, -0.004741f, -0.001434f}, - {+0.053060f, -0.007546f, -0.006118f}, - {+0.453309f, +0.004051f, -0.000324f}, - {+0.237178f, +0.009221f, +0.002058f}, - {+0.029969f, -0.014850f, -0.002643f}, - {-0.439805f, -0.002523f, +0.005619f}, - {+0.128558f, +0.010056f, -0.001511f}, - {+0.167737f, +0.001236f, -0.001456f} - }, - { - {+0.475983f, +0.003710f, -0.000970f}, - {+0.624608f, +0.003603f, -0.000812f}, - {+0.042149f, -0.008534f, -0.003432f}, - {+0.438672f, +0.005526f, +0.000965f}, - {+0.249063f, +0.004782f, +0.002016f}, - {-0.000807f, +0.001028f, -0.002841f}, - {-0.416440f, +0.003745f, +0.000359f}, - {+0.170217f, -0.009457f, -0.000867f}, - {+0.158107f, +0.002167f, -0.000901f} - }, - { - {+0.456962f, -0.002559f, -0.000574f}, - {+0.609653f, -0.002905f, -0.001117f}, - {+0.025784f, -0.000666f, +0.002060f}, - {+0.399694f, -0.014955f, +0.000161f}, - {+0.242149f, -0.009905f, -0.001262f}, - {-0.026686f, +0.000156f, +0.001218f}, - {-0.373014f, +0.013273f, -0.002730f}, - {+0.191984f, -0.000973f, -0.000838f}, - {+0.127455f, -0.008313f, +0.000023f} - }, - { - {+0.437008f, +0.003925f, -0.000081f}, - {+0.601093f, +0.000232f, -0.001372f}, - {+0.002960f, +0.010345f, +0.001054f}, - {+0.347170f, +0.016956f, -0.002319f}, - {+0.233004f, +0.002825f, -0.003373f}, - {-0.044339f, +0.004384f, +0.002020f}, - {-0.309506f, -0.024368f, +0.000882f}, - {+0.198003f, -0.000405f, -0.001486f}, - {+0.077236f, +0.014350f, -0.000034f} - }, - { - {+0.414109f, -0.005431f, -0.000037f}, - {+0.592705f, -0.001470f, -0.001222f}, - {-0.024584f, -0.008451f, -0.001721f}, - {+0.300043f, -0.007510f, -0.003376f}, - {+0.236922f, +0.005189f, -0.002904f}, - {-0.053435f, -0.002953f, +0.000365f}, - {-0.239443f, +0.015553f, +0.003945f}, - {+0.195817f, -0.003961f, -0.001987f}, - {+0.019225f, -0.012398f, -0.000024f} - }, - { - {+0.388577f, +0.006627f, -0.000411f}, - {+0.576851f, +0.002898f, -0.000753f}, - {-0.052952f, +0.001666f, -0.000781f}, - {+0.271771f, -0.002315f, -0.001136f}, - {+0.256751f, -0.010892f, -0.000933f}, - {-0.055321f, -0.000623f, -0.000321f}, - {-0.178829f, -0.004699f, +0.001577f}, - {+0.192108f, -0.001841f, -0.002156f}, - {-0.030601f, +0.010281f, +0.000029f} - }, - { - {+0.362659f, -0.006023f, -0.001007f}, - {+0.548393f, -0.008477f, -0.000553f}, - {-0.079254f, -0.004768f, +0.001192f}, - {+0.262246f, +0.003901f, +0.002002f}, - {+0.282691f, +0.009035f, +0.001549f}, - {-0.052737f, +0.001616f, +0.000062f}, - {-0.134033f, +0.004191f, -0.001751f}, - {+0.189322f, +0.000295f, -0.001194f}, - {-0.059659f, -0.002213f, -0.000053f} - }, - { - {+0.339002f, +0.002927f, -0.000712f}, - {+0.507223f, +0.011672f, -0.001408f}, - {-0.101892f, +0.008754f, -0.000366f}, - {+0.261016f, +0.005455f, +0.000964f}, - {+0.300336f, +0.003329f, +0.000659f}, - {-0.049601f, +0.001946f, -0.000746f}, - {-0.101681f, -0.008021f, -0.001522f}, - {+0.184646f, -0.000891f, -0.000474f}, - {-0.064232f, -0.004100f, +0.000831f} - }, - { - {+0.318447f, -0.002583f, +0.000342f}, - {+0.458166f, -0.011334f, -0.002134f}, - {-0.119857f, -0.003793f, -0.002673f}, - {+0.257649f, -0.004527f, -0.002750f}, - {+0.302642f, -0.006786f, -0.003304f}, - {-0.050079f, -0.001140f, -0.002294f}, - {-0.075154f, +0.006079f, +0.000154f}, - {+0.175259f, -0.002462f, +0.000450f}, - {-0.050689f, +0.006815f, +0.002112f} - }, - { - {+0.300124f, +0.004647f, +0.000429f}, - {+0.407177f, +0.007551f, -0.001229f}, - {-0.135280f, -0.004904f, -0.000353f}, - {+0.246029f, -0.001362f, -0.002342f}, - {+0.292460f, +0.000038f, -0.003938f}, - {-0.057770f, -0.002994f, -0.000700f}, - {-0.048950f, -0.002677f, -0.000542f}, - {+0.161196f, +0.006930f, -0.000490f}, - {-0.030107f, -0.002304f, +0.001927f} - }, - { - {+0.283695f, -0.004672f, -0.000499f}, - {+0.357931f, -0.007644f, +0.000792f}, - {-0.154465f, -0.001114f, +0.004046f}, - {+0.221394f, -0.002251f, +0.001225f}, - {+0.274104f, +0.001365f, -0.000312f}, - {-0.076006f, -0.003175f, +0.002372f}, - {-0.019797f, +0.006502f, -0.001827f}, - {+0.147944f, -0.003560f, -0.001898f}, - {-0.011081f, -0.000127f, -0.000375f} - }, - { - {+0.269518f, +0.002457f, -0.001001f}, - {+0.311326f, +0.012837f, +0.000327f}, - {-0.181319f, +0.014112f, +0.003014f}, - {+0.182651f, +0.012951f, +0.002036f}, - {+0.248875f, +0.007948f, +0.001266f}, - {-0.104063f, +0.013233f, +0.001219f}, - {+0.010928f, -0.008987f, -0.001152f}, - {+0.141371f, -0.000838f, -0.001781f}, - {+0.004297f, -0.004808f, -0.000787f} - }, - { - {+0.257138f, -0.000471f, -0.000295f}, - {+0.269065f, -0.008971f, -0.001327f}, - {-0.209242f, -0.009445f, -0.000789f}, - {+0.136359f, -0.015642f, -0.000837f}, - {+0.218917f, -0.009939f, -0.000695f}, - {-0.133100f, -0.007332f, -0.001415f}, - {+0.037336f, +0.006071f, +0.000081f}, - {+0.141848f, +0.003924f, -0.000450f}, - {+0.015759f, +0.001304f, -0.000104f} - }, - { - {+0.244594f, +0.002255f, +0.000537f}, - {+0.232039f, +0.006188f, -0.001385f}, - {-0.226456f, -0.005183f, +0.000708f}, - {+0.094177f, +0.004239f, -0.001379f}, - {+0.188550f, +0.003755f, -0.001033f}, - {-0.152408f, -0.005083f, +0.000982f}, - {+0.053373f, +0.001503f, -0.000759f}, - {+0.144008f, -0.001965f, +0.000959f}, - {+0.023577f, -0.002308f, -0.000076f} - }, - { - {+0.229867f, -0.004876f, +0.000170f}, - {+0.197603f, -0.004728f, -0.000560f}, - {-0.226600f, +0.010780f, +0.006854f}, - {+0.064221f, +0.003891f, +0.003122f}, - {+0.161189f, +0.001104f, +0.002261f}, - {-0.157190f, +0.008241f, +0.006888f}, - {+0.056895f, -0.003410f, -0.003127f}, - {+0.141412f, -0.001071f, +0.001644f}, - {+0.029485f, +0.003593f, +0.001358f} - }, - { - {+0.212288f, +0.005142f, -0.000800f}, - {+0.162483f, +0.004117f, +0.001433f}, - {-0.209328f, -0.002547f, +0.009702f}, - {+0.048193f, +0.000129f, +0.007210f}, - {+0.139874f, +0.002121f, +0.005784f}, - {-0.146647f, +0.000237f, +0.009054f}, - {+0.049793f, -0.001403f, -0.002729f}, - {+0.132126f, +0.003164f, +0.002133f}, - {+0.035201f, -0.000152f, +0.002301f} - }, - { - {+0.191599f, -0.002871f, -0.000708f}, - {+0.125250f, -0.008746f, +0.003116f}, - {-0.175384f, -0.002970f, +0.005044f}, - {+0.046507f, -0.009000f, +0.004794f}, - {+0.128202f, -0.013178f, +0.002850f}, - {-0.120273f, -0.005762f, +0.003583f}, - {+0.034030f, -0.000067f, +0.000427f}, - {+0.118790f, -0.004116f, +0.002419f}, - {+0.044052f, -0.001094f, +0.001102f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -10079,563 +5334,7 @@ const Word32 rightHRIRReal_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_N { 5841693, 808528, 2232309, }, }, }; -#else -const float rightHRIRReal_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.018159f, +0.985146f, +0.240506f}, - {-0.077046f, +0.024713f, -0.260411f}, - {+0.000593f, +0.132269f, +0.000009f}, - {+0.009213f, +0.054471f, +0.004257f}, - {-0.039823f, +0.044599f, +0.001606f}, - {-0.011090f, +0.028094f, -0.011739f}, - {-0.057613f, +0.083209f, +0.004522f}, - {+0.010244f, +0.028373f, -0.010969f}, - {-0.107601f, +0.182275f, +0.052385f} - }, - { - {-0.152534f, -0.329898f, -0.242342f}, - {+0.209786f, +1.273585f, +0.112026f}, - {-0.011413f, +0.080591f, -0.013524f}, - {-0.034221f, +0.013783f, +0.008826f}, - {+0.012372f, -0.014808f, -0.038195f}, - {-0.003235f, -0.083338f, -0.068446f}, - {+0.003314f, -0.032912f, -0.065265f}, - {+0.003322f, +0.076317f, +0.007937f}, - {-0.015189f, -0.220191f, -0.130843f} - }, - { - {-0.023093f, -0.558938f, -0.150964f}, - {+0.270176f, +0.589966f, +0.359432f}, - {-0.003260f, +0.097037f, -0.014970f}, - {-0.058519f, +0.107799f, -0.014627f}, - {+0.084143f, -0.174088f, +0.006734f}, - {+0.035814f, -0.281769f, +0.006166f}, - {+0.116511f, -0.307921f, +0.020292f}, - {-0.013401f, +0.086307f, +0.012981f}, - {+0.209526f, -0.554513f, -0.048661f} - }, - { - {+0.261551f, +0.304347f, +0.114032f}, - {-0.250896f, -0.779633f, -0.070356f}, - {+0.023786f, +0.088663f, -0.030815f}, - {+0.003407f, +0.082081f, -0.041209f}, - {+0.062118f, -0.047824f, +0.057239f}, - {+0.026013f, -0.155692f, +0.065882f}, - {+0.127095f, -0.164040f, +0.077176f}, - {-0.022006f, +0.035999f, -0.005698f}, - {+0.327951f, -0.045215f, +0.125831f} - }, - { - {+0.359497f, +0.205525f, +0.109865f}, - {-0.745384f, -0.051437f, -0.216054f}, - {+0.066207f, -0.076438f, +0.024748f}, - {+0.143496f, -0.123266f, +0.007838f}, - {-0.098368f, +0.139294f, +0.014972f}, - {-0.065224f, +0.122143f, -0.029816f}, - {-0.019520f, +0.163808f, -0.024174f}, - {+0.008568f, -0.024216f, +0.013284f}, - {+0.111141f, +0.311803f, +0.021197f} - }, - { - {+0.165159f, -0.254129f, -0.025534f}, - {-0.780421f, +0.408205f, -0.025264f}, - {+0.043262f, -0.082839f, +0.025956f}, - {+0.214774f, -0.021619f, +0.026192f}, - {-0.266921f, -0.073753f, -0.026414f}, - {-0.110056f, +0.068805f, -0.038706f}, - {-0.162323f, +0.018037f, -0.046919f}, - {+0.046582f, -0.024241f, +0.003856f}, - {-0.254154f, -0.105995f, -0.060073f} - }, - { - {-0.177496f, +0.069944f, -0.070544f}, - {-0.384878f, -0.205067f, +0.111476f}, - {-0.035734f, +0.067378f, -0.014549f}, - {+0.125583f, +0.062055f, +0.008649f}, - {-0.294346f, -0.048254f, -0.026299f}, - {-0.090207f, -0.084523f, +0.015326f}, - {-0.211714f, -0.100002f, +0.007755f}, - {+0.078344f, -0.022510f, -0.004774f}, - {-0.527842f, -0.045905f, -0.024578f} - }, - { - {-0.463362f, +0.056885f, -0.021761f}, - {+0.150954f, -0.026543f, +0.068293f}, - {-0.101521f, +0.000813f, -0.025478f}, - {-0.095046f, -0.089523f, -0.003261f}, - {-0.134616f, +0.104561f, -0.001013f}, - {-0.059105f, -0.025388f, +0.028020f}, - {-0.181070f, -0.006996f, +0.032275f}, - {+0.082036f, -0.002388f, +0.001840f}, - {-0.586330f, +0.048806f, +0.016554f} - }, - { - {-0.592381f, -0.044571f, +0.029549f}, - {+0.576892f, +0.036976f, -0.022220f}, - {-0.119596f, -0.060394f, -0.001555f}, - {-0.338453f, +0.063985f, -0.014668f}, - {+0.125238f, -0.093159f, +0.021501f}, - {-0.045169f, +0.044028f, -0.000433f}, - {-0.115198f, +0.025252f, +0.004920f}, - {+0.041077f, +0.008697f, +0.004995f}, - {-0.438497f, -0.055561f, +0.020980f} - }, - { - {-0.599054f, -0.014356f, +0.032985f}, - {+0.822874f, +0.044354f, -0.046136f}, - {-0.117506f, +0.008009f, +0.019868f}, - {-0.479925f, +0.018761f, -0.007799f}, - {+0.339581f, +0.001799f, +0.018360f}, - {-0.028531f, +0.004096f, -0.014580f}, - {-0.035532f, +0.016131f, -0.009871f}, - {-0.031577f, -0.038412f, +0.000988f}, - {-0.188266f, +0.051427f, +0.014971f} - }, - { - {-0.558565f, +0.027629f, +0.008677f}, - {+0.934558f, -0.055883f, -0.019701f}, - {-0.143536f, +0.040687f, +0.009496f}, - {-0.475498f, -0.046650f, +0.012347f}, - {+0.418986f, +0.046808f, -0.009187f}, - {+0.019973f, -0.045258f, -0.001389f}, - {+0.040837f, -0.027615f, -0.004137f}, - {-0.104086f, +0.015540f, -0.006688f}, - {+0.045132f, -0.020688f, +0.004131f} - }, - { - {-0.508817f, +0.002572f, -0.006006f}, - {+0.966334f, +0.010598f, -0.000935f}, - {-0.200114f, -0.021501f, -0.002245f}, - {-0.374199f, +0.021235f, +0.015875f}, - {+0.383236f, -0.011504f, -0.019281f}, - {+0.101681f, +0.007702f, +0.004459f}, - {+0.098607f, +0.009824f, -0.000170f}, - {-0.142186f, +0.015367f, -0.000073f}, - {+0.202499f, +0.007942f, -0.007850f} - }, - { - {-0.449816f, -0.025700f, -0.002766f}, - {+0.942805f, +0.019015f, -0.002630f}, - {-0.251515f, +0.005009f, -0.000037f}, - {-0.247529f, -0.018163f, +0.007953f}, - {+0.297646f, +0.008359f, -0.008978f}, - {+0.194833f, -0.010293f, -0.006773f}, - {+0.127610f, -0.005400f, -0.000110f}, - {-0.141062f, -0.005988f, +0.007030f}, - {+0.285592f, -0.008291f, -0.012555f} - }, - { - {-0.376168f, +0.026055f, +0.004627f}, - {+0.871841f, -0.021874f, -0.006470f}, - {-0.251474f, +0.012379f, +0.004839f}, - {-0.143351f, +0.003085f, +0.000557f}, - {+0.213031f, -0.008846f, -0.002525f}, - {+0.266224f, +0.023397f, -0.007678f}, - {+0.122414f, -0.005951f, +0.000933f}, - {-0.115352f, -0.004480f, +0.001947f}, - {+0.318209f, +0.018171f, -0.006837f} - }, - { - {-0.293873f, -0.014103f, +0.005564f}, - {+0.763509f, +0.026484f, -0.005957f}, - {-0.167339f, -0.021635f, +0.004681f}, - {-0.071079f, -0.008355f, -0.004673f}, - {+0.149092f, +0.004738f, +0.000445f}, - {+0.269948f, -0.002632f, -0.000196f}, - {+0.088484f, +0.013962f, +0.000022f}, - {-0.080315f, -0.009623f, -0.002700f}, - {+0.315546f, +0.000498f, +0.000137f} - }, - { - {-0.214030f, +0.010451f, +0.001827f}, - {+0.638609f, -0.024424f, -0.004195f}, - {-0.000480f, +0.033426f, -0.002795f}, - {-0.011678f, +0.017775f, -0.002438f}, - {+0.092630f, -0.011217f, +0.001499f}, - {+0.179494f, -0.027872f, +0.004886f}, - {+0.049375f, -0.006195f, +0.000322f}, - {-0.050886f, +0.014806f, +0.001580f}, - {+0.284102f, -0.013452f, -0.000223f} - }, - { - {-0.142407f, -0.012908f, -0.000129f}, - {+0.521031f, +0.021513f, -0.002424f}, - {+0.212730f, -0.053828f, -0.007313f}, - {+0.050092f, -0.009707f, -0.001567f}, - {+0.022713f, +0.014891f, +0.001899f}, - {+0.013352f, +0.051652f, +0.004824f}, - {+0.034982f, -0.000584f, +0.002038f}, - {-0.037735f, -0.000643f, +0.005700f}, - {+0.234664f, +0.015884f, -0.002619f} - }, - { - {-0.078162f, +0.013149f, +0.000240f}, - {+0.425304f, -0.016123f, -0.001883f}, - {+0.408229f, +0.052323f, -0.001957f}, - {+0.116415f, +0.013525f, -0.004497f}, - {-0.067314f, -0.020251f, +0.003762f}, - {-0.167553f, -0.051767f, -0.000869f}, - {+0.068137f, +0.009479f, +0.001235f}, - {-0.034203f, -0.008399f, +0.003763f}, - {+0.180796f, -0.011205f, -0.003598f} - }, - { - {-0.016750f, -0.012127f, +0.000498f}, - {+0.353965f, +0.008335f, -0.000653f}, - {+0.518342f, -0.011173f, +0.002964f}, - {+0.177026f, -0.019969f, -0.002705f}, - {-0.164814f, +0.026646f, +0.003238f}, - {-0.286213f, +0.012718f, -0.003816f}, - {+0.155640f, -0.020546f, -0.001850f}, - {-0.016416f, +0.003918f, -0.001774f}, - {+0.133919f, +0.003314f, -0.001822f} - }, - { - {+0.046182f, +0.012351f, -0.000034f}, - {+0.298885f, -0.009039f, +0.000810f}, - {+0.511610f, -0.032188f, -0.002291f}, - {+0.211380f, +0.005455f, +0.000933f}, - {-0.241218f, -0.015123f, +0.001103f}, - {-0.293508f, +0.029470f, +0.003051f}, - {+0.280548f, +0.030234f, -0.004368f}, - {+0.041260f, +0.018979f, -0.004541f}, - {+0.098998f, +0.002094f, +0.002904f} - }, - { - {+0.111605f, -0.013530f, -0.000652f}, - {+0.246690f, +0.016108f, -0.001020f}, - {+0.413977f, +0.038179f, -0.009520f}, - {+0.203190f, +0.017508f, -0.002191f}, - {-0.268601f, -0.003682f, +0.001755f}, - {-0.196136f, -0.036857f, +0.009761f}, - {+0.402137f, -0.026686f, -0.005055f}, - {+0.145035f, -0.035432f, -0.001365f}, - {+0.074946f, +0.007868f, +0.004954f} - }, - { - {+0.176108f, +0.013431f, -0.000958f}, - {+0.185298f, -0.016846f, -0.004677f}, - {+0.286889f, -0.019450f, -0.007487f}, - {+0.153787f, -0.015814f, -0.006505f}, - {-0.239195f, +0.011851f, +0.001930f}, - {-0.042102f, +0.023553f, +0.004947f}, - {+0.470133f, +0.012898f, -0.003624f}, - {+0.270107f, +0.025928f, -0.000154f}, - {+0.059116f, -0.020434f, -0.003101f} - }, - { - {+0.234033f, -0.013522f, -0.000160f}, - {+0.105917f, +0.008837f, -0.002769f}, - {+0.184987f, +0.008247f, -0.000624f}, - {+0.076510f, +0.005900f, -0.001804f}, - {-0.166708f, -0.022644f, +0.001485f}, - {+0.112604f, -0.020438f, -0.005184f}, - {+0.450824f, +0.006092f, +0.002002f}, - {+0.374333f, -0.013645f, -0.004183f}, - {+0.050668f, -0.002470f, -0.009849f} - }, - { - {+0.280701f, +0.008633f, +0.001045f}, - {+0.002220f, -0.016553f, +0.003998f}, - {+0.131643f, -0.003842f, +0.001872f}, - {-0.015690f, -0.016479f, +0.005047f}, - {-0.077685f, +0.023492f, +0.003551f}, - {+0.223388f, +0.024340f, -0.007042f}, - {+0.346787f, -0.042038f, +0.003586f}, - {+0.418985f, +0.005219f, -0.005591f}, - {+0.040023f, +0.024273f, +0.000362f} - }, - { - {+0.315972f, -0.002222f, +0.000114f}, - {-0.123110f, +0.036764f, +0.004764f}, - {+0.119199f, -0.002064f, +0.000988f}, - {-0.106689f, +0.025325f, +0.004605f}, - {+0.000310f, -0.007517f, +0.002748f}, - {+0.262374f, -0.010338f, -0.000067f}, - {+0.204029f, +0.052292f, -0.005305f}, - {+0.380172f, +0.016758f, -0.003741f}, - {+0.003388f, +0.008217f, +0.011667f} - }, - { - {+0.346296f, +0.003536f, -0.001898f}, - {-0.248976f, -0.036524f, -0.001389f}, - {+0.120849f, +0.002931f, +0.000722f}, - {-0.173186f, -0.016622f, +0.000289f}, - {+0.054827f, +0.000181f, -0.002418f}, - {+0.225358f, -0.023135f, +0.002820f}, - {+0.091375f, -0.014867f, -0.010230f}, - {+0.260139f, -0.034357f, -0.002468f}, - {-0.068405f, -0.042485f, +0.005111f} - }, - { - {+0.379862f, -0.009494f, -0.001961f}, - {-0.345947f, +0.013885f, -0.004347f}, - {+0.108945f, +0.001609f, +0.002277f}, - {-0.194971f, -0.005237f, -0.000216f}, - {+0.090631f, -0.007307f, -0.004497f}, - {+0.139916f, +0.036851f, -0.003429f}, - {+0.049457f, -0.016676f, -0.004125f}, - {+0.089658f, +0.040648f, -0.001276f}, - {-0.147747f, +0.028109f, -0.006357f} - }, - { - {+0.419521f, +0.011992f, -0.000293f}, - {-0.399888f, +0.006995f, +0.000613f}, - {+0.071268f, -0.013451f, +0.003383f}, - {-0.169244f, +0.016170f, +0.002968f}, - {+0.116230f, +0.009802f, -0.001756f}, - {+0.053621f, -0.017175f, -0.008163f}, - {+0.065166f, +0.025359f, +0.005381f}, - {-0.086447f, -0.037823f, -0.001051f}, - {-0.194782f, +0.007204f, -0.005393f} - }, - { - {+0.461674f, -0.009238f, +0.000744f}, - {-0.422873f, -0.002942f, +0.006024f}, - {+0.017965f, +0.019932f, +0.001068f}, - {-0.112940f, -0.014296f, +0.003691f}, - {+0.135675f, -0.004946f, +0.000913f}, - {+0.001359f, -0.007810f, -0.003619f}, - {+0.090834f, -0.000688f, +0.008234f}, - {-0.227027f, +0.020653f, -0.000262f}, - {-0.193552f, -0.020886f, +0.003761f} - }, - { - {+0.500543f, +0.004460f, -0.000339f}, - {-0.438946f, -0.008173f, +0.005382f}, - {-0.025063f, -0.012096f, -0.002727f}, - {-0.048264f, +0.016297f, +0.004137f}, - {+0.148356f, -0.006714f, -0.001928f}, - {-0.016069f, +0.011271f, +0.004203f}, - {+0.085225f, -0.019738f, +0.001763f}, - {-0.310418f, -0.002136f, +0.003576f}, - {-0.158213f, +0.011793f, +0.008536f} - }, - { - {+0.533110f, -0.005084f, -0.001776f}, - {-0.463561f, +0.015347f, +0.000549f}, - {-0.035070f, -0.007804f, -0.002842f}, - {+0.008595f, -0.003050f, +0.002916f}, - {+0.153491f, -0.002287f, -0.004867f}, - {-0.021318f, -0.000337f, +0.007722f}, - {+0.040490f, +0.023364f, -0.005685f}, - {-0.339640f, -0.004014f, +0.007635f}, - {-0.113068f, +0.002471f, +0.003970f} - }, - { - {+0.559507f, +0.006521f, -0.001337f}, - {-0.495821f, -0.006508f, -0.001808f}, - {-0.009393f, +0.020033f, +0.002230f}, - {+0.057093f, +0.005006f, -0.000599f}, - {+0.147824f, +0.005127f, -0.001599f}, - {-0.035200f, -0.017556f, +0.003623f}, - {-0.026148f, -0.010270f, -0.006517f}, - {-0.331865f, -0.002383f, +0.006123f}, - {-0.069791f, +0.006016f, -0.000948f} - }, - { - {+0.580524f, -0.004095f, -0.000494f}, - {-0.527187f, +0.003574f, -0.000131f}, - {+0.034392f, -0.012275f, +0.006324f}, - {+0.108521f, -0.008134f, -0.002780f}, - {+0.124651f, +0.003736f, +0.002434f}, - {-0.058607f, +0.013665f, -0.003392f}, - {-0.096848f, +0.005058f, -0.001324f}, - {-0.301438f, -0.004261f, +0.001796f}, - {-0.026983f, -0.008052f, -0.001333f} - }, - { - {+0.597812f, +0.002656f, -0.000522f}, - {-0.552363f, -0.003313f, +0.001014f}, - {+0.075214f, -0.005271f, +0.002238f}, - {+0.170571f, +0.018162f, -0.002847f}, - {+0.083934f, -0.017743f, +0.001407f}, - {-0.076846f, +0.004888f, -0.003003f}, - {-0.166265f, -0.007573f, +0.004024f}, - {-0.256165f, +0.011081f, +0.000547f}, - {+0.019750f, +0.010957f, -0.001327f} - }, - { - {+0.613921f, -0.002403f, -0.000945f}, - {-0.571681f, +0.004061f, +0.000722f}, - {+0.106010f, -0.000496f, -0.004030f}, - {+0.238299f, -0.018447f, -0.000821f}, - {+0.038282f, +0.014684f, -0.002501f}, - {-0.080622f, -0.007409f, +0.002126f}, - {-0.235224f, +0.017619f, +0.005449f}, - {-0.203255f, -0.012695f, +0.000929f}, - {+0.070865f, -0.011018f, -0.001639f} - }, - { - {+0.630982f, +0.003698f, -0.001234f}, - {-0.590355f, -0.003219f, +0.000406f}, - {+0.130676f, +0.011921f, -0.002723f}, - {+0.295756f, +0.013516f, +0.001143f}, - {+0.005092f, -0.003596f, -0.003545f}, - {-0.072459f, -0.000272f, +0.002800f}, - {-0.299780f, -0.022696f, +0.001211f}, - {-0.150313f, +0.011501f, +0.001280f}, - {+0.118367f, +0.011753f, -0.001359f} - }, - { - {+0.649444f, -0.004884f, -0.000984f}, - {-0.615054f, +0.005408f, +0.000735f}, - {+0.149940f, -0.006453f, +0.001164f}, - {+0.328584f, -0.000395f, +0.001275f}, - {-0.008438f, -0.005199f, -0.001454f}, - {-0.058218f, +0.000064f, -0.000029f}, - {-0.346981f, +0.007071f, -0.001972f}, - {-0.104327f, -0.007957f, +0.001209f}, - {+0.149121f, -0.004220f, -0.000790f} - }, - { - {+0.667442f, +0.004369f, -0.000509f}, - {-0.649912f, -0.008091f, +0.001108f}, - {+0.160941f, -0.003110f, +0.000358f}, - {+0.335024f, -0.007340f, -0.001370f}, - {-0.010516f, +0.004138f, +0.001016f}, - {-0.042559f, +0.003980f, -0.001022f}, - {-0.366888f, +0.007198f, +0.001062f}, - {-0.068558f, +0.004871f, +0.000722f}, - {+0.153026f, -0.002598f, -0.000878f} - }, - { - {+0.682283f, -0.002839f, -0.000182f}, - {-0.693711f, +0.010677f, +0.001270f}, - {+0.163061f, +0.001749f, -0.001941f}, - {+0.327679f, +0.004372f, -0.003551f}, - {-0.017128f, +0.001449f, +0.002254f}, - {-0.029387f, -0.003404f, -0.000254f}, - {-0.363800f, -0.005157f, +0.004344f}, - {-0.041106f, -0.002019f, -0.000551f}, - {+0.130106f, +0.008236f, -0.000670f} - }, - { - {+0.692437f, +0.000095f, -0.000537f}, - {-0.740634f, -0.011604f, +0.000655f}, - {+0.157996f, +0.002060f, -0.000837f}, - {+0.323158f, +0.005481f, -0.001955f}, - {-0.039932f, -0.012585f, +0.000817f}, - {-0.021634f, +0.000010f, -0.000230f}, - {-0.350228f, -0.000420f, +0.003173f}, - {-0.016658f, +0.005630f, -0.001178f}, - {+0.089943f, -0.012079f, -0.001069f} - }, - { - {+0.698662f, +0.000230f, -0.001425f}, - {-0.782838f, +0.007193f, +0.000387f}, - {+0.147754f, +0.002321f, +0.001054f}, - {+0.330876f, -0.007440f, +0.001734f}, - {-0.078436f, +0.014161f, -0.002562f}, - {-0.020690f, +0.001093f, -0.000930f}, - {-0.336354f, +0.000244f, +0.000495f}, - {+0.007725f, -0.004802f, -0.001236f}, - {+0.047620f, +0.008277f, -0.001417f} - }, - { - {+0.703246f, +0.002409f, -0.001250f}, - {-0.814977f, -0.003204f, +0.001382f}, - {+0.135217f, -0.009385f, -0.001169f}, - {+0.350177f, -0.000838f, +0.000877f}, - {-0.122288f, -0.004476f, -0.002216f}, - {-0.025713f, +0.002869f, +0.000621f}, - {-0.325782f, +0.004520f, +0.000748f}, - {+0.030650f, +0.008462f, -0.000266f}, - {+0.015647f, -0.003005f, -0.000601f} - }, - { - {+0.707436f, -0.002159f, -0.000184f}, - {-0.836328f, +0.001420f, +0.002805f}, - {+0.124343f, +0.003534f, -0.004617f}, - {+0.377173f, -0.003128f, -0.002966f}, - {-0.162938f, +0.001908f, +0.001890f}, - {-0.034346f, +0.001148f, +0.003196f}, - {-0.317600f, -0.001145f, +0.002065f}, - {+0.047783f, -0.002726f, +0.001091f}, - {-0.001518f, -0.002014f, +0.001386f} - }, - { - {+0.711316f, +0.000190f, +0.000116f}, - {-0.849400f, -0.005461f, +0.002132f}, - {+0.115220f, +0.006522f, -0.002677f}, - {+0.406205f, +0.009733f, -0.003200f}, - {-0.198229f, -0.008830f, +0.003296f}, - {-0.041723f, -0.007295f, +0.001797f}, - {-0.307751f, -0.000513f, +0.001061f}, - {+0.056384f, -0.001852f, +0.000252f}, - {-0.007409f, -0.002688f, +0.001636f} - }, - { - {+0.715564f, +0.000878f, -0.000712f}, - {-0.856145f, +0.001865f, +0.000304f}, - {+0.099717f, +0.000516f, +0.001510f}, - {+0.427792f, -0.008621f, -0.000103f}, - {-0.227122f, +0.009743f, +0.000742f}, - {-0.038969f, -0.000573f, -0.000890f}, - {-0.290500f, -0.003837f, -0.000282f}, - {+0.060351f, +0.002258f, -0.001388f}, - {-0.007102f, +0.000681f, +0.000051f} - }, - { - {+0.721724f, +0.001440f, -0.001419f}, - {-0.857928f, +0.002494f, +0.000723f}, - {+0.068940f, -0.015230f, +0.000407f}, - {+0.432906f, -0.004606f, +0.000685f}, - {-0.246924f, -0.000678f, -0.000115f}, - {-0.019686f, +0.012823f, +0.000958f}, - {-0.263371f, +0.009394f, +0.000248f}, - {+0.066836f, +0.001658f, -0.002275f}, - {-0.003255f, +0.001689f, -0.000037f} - }, - { - {+0.730712f, -0.003910f, -0.000870f}, - {-0.858450f, -0.001220f, +0.001946f}, - {+0.023475f, +0.016216f, -0.003883f}, - {+0.419872f, +0.011121f, -0.002752f}, - {-0.256682f, -0.002820f, +0.002128f}, - {+0.013513f, -0.011639f, +0.004607f}, - {-0.229180f, -0.009683f, +0.001814f}, - {+0.080511f, -0.005798f, -0.001723f}, - {+0.001435f, +0.000756f, -0.000451f} - }, - { - {+0.741590f, +0.003101f, -0.000011f}, - {-0.860726f, +0.000300f, +0.002853f}, - {-0.028493f, -0.003694f, -0.002869f}, - {+0.395211f, -0.003270f, -0.003914f}, - {-0.257602f, -0.001422f, +0.002810f}, - {+0.053057f, +0.000570f, +0.002860f}, - {-0.193999f, +0.002947f, +0.000888f}, - {+0.099824f, +0.006425f, -0.000616f}, - {+0.005522f, +0.002697f, -0.000570f} - }, - { - {+0.752785f, -0.000581f, -0.000328f}, - {-0.864679f, +0.002652f, +0.003144f}, - {-0.079249f, -0.003995f, +0.005777f}, - {+0.366044f, -0.005911f, +0.001913f}, - {-0.251095f, +0.009072f, -0.002248f}, - {+0.092600f, +0.005125f, -0.005522f}, - {-0.162554f, -0.001717f, -0.002557f}, - {+0.119626f, -0.005564f, +0.000516f}, - {+0.008439f, -0.004393f, +0.001712f} - }, - { - {+0.763163f, -0.000862f, -0.002020f}, - {-0.868650f, -0.005188f, +0.001363f}, - {-0.122932f, -0.003612f, +0.014766f}, - {+0.337176f, +0.004705f, +0.011739f}, - {-0.240301f, -0.007676f, -0.011938f}, - {+0.125784f, +0.004581f, -0.013027f}, - {-0.137073f, +0.006965f, -0.003725f}, - {+0.136715f, +0.001962f, +0.001072f}, - {+0.010881f, +0.001506f, +0.004158f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -11189,569 +5888,9 @@ const Word32 rightHRIRImag_HOA2_fx[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_N { 23650238, -587337, 591632, }, }, }; -#else -const float rightHRIRImag_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.067351f, +0.619497f, -0.224314f}, - {+0.139294f, -0.771571f, +0.258097f}, - {-0.003713f, +0.028657f, -0.008450f}, - {-0.024048f, +0.069155f, -0.020553f}, - {+0.025678f, +0.026025f, -0.019233f}, - {+0.009936f, +0.011063f, -0.007565f}, - {+0.034483f, +0.043638f, -0.029489f}, - {+0.006138f, -0.086263f, +0.038216f}, - {+0.046480f, +0.249243f, -0.117268f} - }, - { - {+0.012648f, +0.734658f, -0.184512f}, - {+0.111037f, -0.538674f, +0.336987f}, - {-0.002627f, -0.020803f, -0.029183f}, - {-0.030921f, +0.004858f, -0.041299f}, - {+0.051115f, +0.078198f, -0.009636f}, - {+0.016252f, +0.028855f, -0.008268f}, - {+0.084591f, +0.153968f, -0.000650f}, - {-0.017068f, -0.206982f, -0.012636f}, - {+0.164507f, +0.469681f, -0.054789f} - }, - { - {+0.223221f, -0.320495f, +0.172323f}, - {-0.327663f, +0.928806f, -0.128055f}, - {+0.019358f, -0.074304f, -0.015400f}, - {+0.035210f, -0.082508f, -0.021387f}, - {+0.001915f, -0.019754f, +0.041779f}, - {-0.009482f, +0.004447f, +0.006672f}, - {+0.039341f, +0.054366f, +0.052326f}, - {-0.015501f, -0.146235f, -0.037803f}, - {+0.140215f, +0.011558f, +0.133087f} - }, - { - {+0.158118f, -0.393316f, +0.132368f}, - {-0.546868f, +0.311888f, -0.284518f}, - {+0.031012f, +0.036496f, +0.023744f}, - {+0.107357f, +0.078785f, +0.019930f}, - {-0.117669f, -0.168393f, +0.014741f}, - {-0.063269f, -0.132935f, -0.029018f}, - {-0.110215f, -0.232883f, -0.026283f}, - {+0.026325f, -0.007643f, +0.015801f}, - {-0.156350f, -0.444539f, +0.006974f} - }, - { - {-0.158057f, +0.298412f, -0.065118f}, - {-0.180062f, -0.634611f, +0.013767f}, - {-0.011461f, +0.071086f, +0.018569f}, - {+0.074813f, +0.048439f, +0.032538f}, - {-0.176343f, +0.017086f, -0.039934f}, - {-0.070878f, -0.087909f, -0.042882f}, - {-0.196698f, -0.095181f, -0.059079f}, - {+0.043237f, +0.006669f, +0.001955f}, - {-0.440379f, +0.000452f, -0.098398f} - }, - { - {-0.449468f, +0.042993f, -0.088093f}, - {+0.450454f, +0.142745f, +0.162071f}, - {-0.082857f, -0.081326f, -0.023342f}, - {-0.091693f, -0.115333f, +0.002878f}, - {-0.059625f, +0.113643f, -0.022660f}, - {-0.002551f, +0.114733f, +0.021413f}, - {-0.134830f, +0.127944f, +0.015214f}, - {+0.039406f, -0.002734f, -0.000806f}, - {-0.456803f, +0.175205f, -0.017055f} - }, - { - {-0.521027f, -0.156261f, +0.000350f}, - {+0.908889f, +0.180570f, +0.051670f}, - {-0.108770f, -0.053291f, -0.027241f}, - {-0.287995f, +0.046150f, -0.015860f}, - {+0.175042f, -0.108856f, +0.012453f}, - {+0.059786f, +0.044325f, +0.033874f}, - {-0.008998f, -0.011671f, +0.039397f}, - {+0.004422f, -0.001021f, +0.005255f}, - {-0.225556f, -0.103116f, +0.036951f} - }, - { - {-0.371766f, +0.087065f, +0.052523f}, - {+1.010425f, -0.130810f, -0.067243f}, - {-0.070822f, +0.064314f, +0.008682f}, - {-0.381257f, -0.000635f, -0.013290f}, - {+0.375703f, +0.033440f, +0.023774f}, - {+0.081888f, -0.060050f, -0.009146f}, - {+0.099530f, -0.054172f, +0.002402f}, - {-0.055187f, -0.030383f, +0.004615f}, - {+0.113698f, +0.047344f, +0.023699f} - }, - { - {-0.133153f, +0.006407f, +0.034476f}, - {+0.837054f, -0.001398f, -0.067755f}, - {-0.019596f, -0.013995f, +0.025797f}, - {-0.306127f, -0.073720f, -0.002010f}, - {+0.417535f, +0.051347f, +0.011222f}, - {+0.096752f, -0.015410f, -0.024298f}, - {+0.165604f, -0.014311f, -0.020675f}, - {-0.110129f, +0.012754f, -0.001173f}, - {+0.396896f, -0.022479f, +0.001703f} - }, - { - {+0.076154f, -0.015041f, -0.005731f}, - {+0.558795f, +0.016178f, -0.011329f}, - {+0.001783f, -0.050805f, +0.008376f}, - {-0.100163f, +0.081596f, +0.016700f}, - {+0.287003f, -0.097687f, -0.016950f}, - {+0.130328f, +0.051441f, -0.002818f}, - {+0.194137f, +0.028286f, -0.006100f}, - {-0.128998f, -0.007273f, -0.004964f}, - {+0.525370f, -0.013001f, -0.010543f} - }, - { - {+0.227729f, -0.027128f, -0.019508f}, - {+0.280803f, +0.046474f, +0.016340f}, - {+0.006184f, +0.007629f, -0.010663f}, - {+0.124161f, -0.022132f, +0.014831f}, - {+0.082170f, +0.023992f, -0.023358f}, - {+0.168199f, -0.000379f, +0.008102f}, - {+0.185287f, +0.007140f, +0.002454f}, - {-0.098830f, -0.034738f, -0.000610f}, - {+0.505599f, +0.024919f, -0.016122f} - }, - { - {+0.345183f, +0.044417f, -0.008489f}, - {+0.029206f, -0.069971f, +0.008062f}, - {+0.040780f, +0.025656f, -0.005557f}, - {+0.280661f, +0.000086f, -0.001939f}, - {-0.091189f, +0.001516f, -0.001765f}, - {+0.178051f, -0.018186f, -0.003683f}, - {+0.147526f, -0.011735f, +0.000472f}, - {-0.034700f, +0.017373f, +0.007552f}, - {+0.404231f, -0.018810f, -0.013580f} - }, - { - {+0.447376f, -0.029945f, +0.002359f}, - {-0.196485f, +0.048776f, -0.000528f}, - {+0.131413f, -0.031345f, +0.001264f}, - {+0.352086f, -0.000092f, -0.009252f}, - {-0.196164f, +0.010102f, +0.008244f}, - {+0.137927f, +0.001411f, -0.005445f}, - {+0.094224f, +0.013361f, +0.000776f}, - {+0.030220f, +0.002376f, +0.001349f}, - {+0.282599f, +0.004869f, -0.002937f} - }, - { - {+0.532898f, +0.008836f, +0.002166f}, - {-0.392609f, -0.034792f, +0.000679f}, - {+0.270895f, +0.030297f, -0.000156f}, - {+0.364913f, -0.004283f, -0.009820f}, - {-0.243967f, -0.002627f, +0.007384f}, - {+0.037047f, -0.017787f, +0.004491f}, - {+0.041930f, -0.015182f, -0.000239f}, - {+0.078287f, +0.007042f, -0.004821f}, - {+0.167608f, -0.019027f, +0.005545f} - }, - { - {+0.594888f, -0.002438f, -0.003208f}, - {-0.547092f, +0.023930f, +0.003204f}, - {+0.418638f, -0.023295f, -0.006545f}, - {+0.358947f, -0.011193f, -0.005371f}, - {-0.268043f, +0.007992f, +0.005934f}, - {-0.108159f, +0.040803f, +0.007847f}, - {+0.014237f, +0.000657f, -0.000908f}, - {+0.104780f, -0.013359f, -0.000511f}, - {+0.064568f, +0.028680f, +0.003338f} - }, - { - {+0.635005f, +0.006702f, -0.005006f}, - {-0.650934f, -0.013984f, +0.004474f}, - {+0.519015f, +0.020899f, -0.008786f}, - {+0.354058f, +0.000065f, -0.000944f}, - {-0.293166f, -0.009243f, +0.003786f}, - {-0.244478f, -0.036317f, +0.004273f}, - {+0.027137f, +0.008991f, +0.000305f}, - {+0.112434f, -0.002933f, +0.003310f}, - {-0.019782f, -0.018420f, -0.000608f} - }, - { - {+0.661388f, -0.006850f, -0.003249f}, - {-0.709859f, +0.007935f, +0.004126f}, - {+0.524557f, -0.002414f, -0.002080f}, - {+0.344994f, +0.003888f, -0.002639f}, - {-0.316812f, +0.006036f, +0.003412f}, - {-0.307717f, +0.012550f, -0.001272f}, - {+0.076841f, -0.011681f, -0.000880f}, - {+0.115864f, +0.008381f, -0.000189f}, - {-0.078312f, +0.007256f, -0.000761f} - }, - { - {+0.681780f, +0.004317f, -0.002114f}, - {-0.740600f, -0.002506f, +0.003738f}, - {+0.416864f, -0.038264f, +0.003168f}, - {+0.319577f, -0.000792f, -0.001313f}, - {-0.319873f, -0.002666f, +0.002245f}, - {-0.258538f, +0.029824f, -0.003409f}, - {+0.141548f, +0.012818f, -0.003839f}, - {+0.135337f, +0.001218f, -0.005061f}, - {-0.109830f, +0.001645f, +0.001441f} - }, - { - {+0.699871f, -0.003221f, -0.002308f}, - {-0.762514f, +0.004609f, +0.003814f}, - {+0.225434f, +0.064939f, -0.001450f}, - {+0.266431f, +0.012897f, +0.002255f}, - {-0.282175f, -0.010311f, -0.000422f}, - {-0.108713f, -0.058556f, +0.002399f}, - {+0.186968f, -0.009396f, -0.004807f}, - {+0.178376f, -0.016506f, -0.006062f}, - {-0.120383f, -0.003023f, +0.004088f} - }, - { - {+0.714529f, +0.003253f, -0.002414f}, - {-0.790696f, -0.011388f, +0.001985f}, - {+0.020833f, -0.046458f, -0.007156f}, - {+0.185944f, -0.029249f, +0.000016f}, - {-0.197551f, +0.028731f, +0.000138f}, - {+0.079181f, +0.043101f, +0.006863f}, - {+0.176963f, -0.004258f, -0.002861f}, - {+0.228839f, +0.021085f, -0.002090f}, - {-0.119574f, -0.002646f, +0.004158f} - }, - { - {+0.721602f, -0.001258f, -0.002069f}, - {-0.831027f, +0.010846f, -0.000173f}, - {-0.126177f, +0.009153f, -0.003439f}, - {+0.096173f, +0.020892f, -0.003906f}, - {-0.084227f, -0.027335f, +0.001653f}, - {+0.229925f, -0.010207f, +0.000875f}, - {+0.090658f, +0.023511f, +0.000256f}, - {+0.250703f, +0.000323f, +0.000133f}, - {-0.115659f, +0.011998f, -0.001947f} - }, - { - {+0.717593f, -0.001188f, -0.001513f}, - {-0.881199f, -0.003795f, +0.002266f}, - {-0.186085f, +0.008805f, +0.004207f}, - {+0.021886f, +0.000682f, +0.000980f}, - {+0.024639f, +0.019808f, +0.000274f}, - {+0.296639f, -0.006775f, -0.008463f}, - {-0.060930f, -0.036828f, +0.003817f}, - {+0.210581f, -0.022700f, -0.003357f}, - {-0.112881f, +0.004715f, -0.006188f} - }, - { - {+0.702872f, +0.004202f, -0.000899f}, - {-0.934393f, +0.006557f, +0.007476f}, - {-0.176147f, -0.010014f, +0.006716f}, - {-0.022135f, +0.003624f, +0.007346f}, - {+0.100594f, -0.012448f, -0.000135f}, - {+0.271960f, +0.005598f, -0.007977f}, - {-0.233701f, +0.046766f, +0.003616f}, - {+0.101020f, +0.023227f, -0.002321f}, - {-0.116785f, -0.020405f, +0.002997f} - }, - { - {+0.682250f, -0.007566f, -0.001501f}, - {-0.978417f, -0.017585f, +0.006636f}, - {-0.137592f, +0.005047f, +0.003880f}, - {-0.028458f, -0.006826f, +0.004609f}, - {+0.129898f, -0.005880f, -0.001391f}, - {+0.175874f, -0.016526f, +0.001013f}, - {-0.367276f, -0.033929f, -0.002775f}, - {-0.060514f, -0.037887f, +0.002465f}, - {-0.137333f, -0.006964f, +0.011955f} - }, - { - {+0.663415f, +0.004606f, -0.002781f}, - {-0.993852f, +0.009178f, -0.000038f}, - {-0.108250f, -0.003270f, +0.001437f}, - {+0.009848f, -0.008477f, -0.000681f}, - {+0.118923f, +0.012268f, -0.005212f}, - {+0.044501f, +0.037572f, +0.003962f}, - {-0.416290f, -0.006378f, -0.006076f}, - {-0.236610f, +0.040350f, +0.002858f}, - {-0.168887f, +0.032800f, +0.004036f} - }, - { - {+0.651781f, +0.001152f, -0.002457f}, - {-0.965546f, +0.016499f, -0.002125f}, - {-0.105651f, -0.001646f, +0.002481f}, - {+0.090167f, +0.025763f, -0.001130f}, - {+0.087686f, -0.003999f, -0.005549f}, - {-0.075223f, -0.035790f, -0.002847f}, - {-0.383115f, +0.037796f, +0.001566f}, - {-0.378556f, -0.025237f, +0.002287f}, - {-0.179845f, -0.008941f, -0.008124f} - }, - { - {+0.645685f, -0.002682f, -0.000593f}, - {-0.900401f, -0.029783f, +0.003285f}, - {-0.124380f, +0.012275f, +0.001822f}, - {+0.193225f, -0.027406f, +0.000945f}, - {+0.052400f, -0.001580f, -0.000684f}, - {-0.141411f, -0.002262f, -0.004491f}, - {-0.319576f, -0.023501f, +0.010635f}, - {-0.448327f, +0.001574f, +0.004044f}, - {-0.141908f, -0.032139f, -0.005596f} - }, - { - {+0.638137f, -0.002412f, +0.000310f}, - {-0.826423f, +0.017144f, +0.007574f}, - {-0.140725f, -0.006104f, -0.000815f}, - {+0.290930f, +0.019453f, +0.001904f}, - {+0.016875f, -0.009182f, +0.001656f}, - {-0.145675f, +0.017736f, +0.001807f}, - {-0.285941f, -0.010851f, +0.008570f}, - {-0.435070f, +0.011023f, +0.004307f}, - {-0.062178f, +0.036767f, +0.005654f} - }, - { - {+0.623287f, +0.007299f, -0.001056f}, - {-0.770521f, +0.001075f, +0.004559f}, - {-0.130645f, -0.003274f, -0.002902f}, - {+0.361351f, -0.005902f, +0.000348f}, - {-0.020477f, +0.011841f, -0.000752f}, - {-0.114514f, -0.018145f, +0.007488f}, - {-0.305625f, +0.026256f, -0.000446f}, - {-0.353862f, -0.030431f, +0.004835f}, - {+0.024417f, -0.010793f, +0.007820f} - }, - { - {+0.600902f, -0.006021f, -0.002348f}, - {-0.739248f, -0.005015f, -0.001571f}, - {-0.087167f, +0.021027f, -0.001847f}, - {+0.400187f, +0.000286f, -0.002317f}, - {-0.060945f, -0.009244f, -0.002589f}, - {-0.083328f, -0.001928f, +0.007725f}, - {-0.359405f, -0.019595f, -0.006438f}, - {-0.237042f, +0.027090f, +0.006659f}, - {+0.089013f, -0.004244f, -0.000128f} - }, - { - {+0.574438f, +0.003368f, -0.001494f}, - {-0.720431f, -0.005878f, -0.002928f}, - {-0.025553f, -0.022088f, +0.002875f}, - {+0.419048f, +0.001480f, -0.004334f}, - {-0.105303f, +0.000852f, +0.000385f}, - {-0.070507f, +0.013892f, +0.000793f}, - {-0.411663f, -0.001662f, -0.003755f}, - {-0.118815f, -0.013893f, +0.002937f}, - {+0.127181f, -0.002212f, -0.005490f} - }, - { - {+0.546941f, -0.004959f, -0.000239f}, - {-0.700235f, +0.009986f, +0.000285f}, - {+0.026874f, +0.006811f, +0.004565f}, - {+0.432826f, +0.004148f, -0.005149f}, - {-0.153860f, -0.009932f, +0.004309f}, - {-0.067445f, -0.005555f, -0.005512f}, - {-0.441084f, +0.007824f, +0.003852f}, - {-0.016912f, +0.012081f, -0.003174f}, - {+0.148914f, +0.007013f, -0.004323f} - }, - { - {+0.520436f, +0.006384f, -0.000382f}, - {-0.674657f, -0.006620f, +0.001998f}, - {+0.052406f, +0.010142f, -0.000198f}, - {+0.447102f, -0.009070f, -0.003159f}, - {-0.202135f, +0.018081f, +0.002032f}, - {-0.055887f, -0.014144f, -0.003615f}, - {-0.448314f, -0.001324f, +0.007309f}, - {+0.065957f, -0.020607f, -0.003258f}, - {+0.162472f, -0.004875f, -0.002127f} - }, - { - {+0.496665f, -0.004859f, -0.000887f}, - {-0.647428f, +0.004741f, +0.001434f}, - {+0.053060f, -0.007546f, -0.006118f}, - {+0.453309f, +0.004051f, -0.000324f}, - {-0.237178f, -0.009221f, -0.002058f}, - {-0.029969f, +0.014850f, +0.002643f}, - {-0.439805f, -0.002523f, +0.005619f}, - {+0.128558f, +0.010056f, -0.001511f}, - {+0.167737f, +0.001236f, -0.001456f} - }, - { - {+0.475983f, +0.003710f, -0.000970f}, - {-0.624608f, -0.003603f, +0.000812f}, - {+0.042149f, -0.008534f, -0.003432f}, - {+0.438672f, +0.005526f, +0.000965f}, - {-0.249063f, -0.004782f, -0.002016f}, - {+0.000807f, -0.001028f, +0.002841f}, - {-0.416440f, +0.003745f, +0.000359f}, - {+0.170217f, -0.009457f, -0.000867f}, - {+0.158107f, +0.002167f, -0.000901f} - }, - { - {+0.456962f, -0.002559f, -0.000574f}, - {-0.609653f, +0.002905f, +0.001117f}, - {+0.025784f, -0.000666f, +0.002060f}, - {+0.399694f, -0.014955f, +0.000161f}, - {-0.242149f, +0.009905f, +0.001262f}, - {+0.026686f, -0.000156f, -0.001218f}, - {-0.373014f, +0.013273f, -0.002730f}, - {+0.191984f, -0.000973f, -0.000838f}, - {+0.127455f, -0.008313f, +0.000023f} - }, - { - {+0.437008f, +0.003925f, -0.000081f}, - {-0.601093f, -0.000232f, +0.001372f}, - {+0.002960f, +0.010345f, +0.001054f}, - {+0.347170f, +0.016956f, -0.002319f}, - {-0.233004f, -0.002825f, +0.003373f}, - {+0.044339f, -0.004384f, -0.002020f}, - {-0.309506f, -0.024368f, +0.000882f}, - {+0.198003f, -0.000405f, -0.001486f}, - {+0.077236f, +0.014350f, -0.000034f} - }, - { - {+0.414109f, -0.005431f, -0.000037f}, - {-0.592705f, +0.001470f, +0.001222f}, - {-0.024584f, -0.008451f, -0.001721f}, - {+0.300043f, -0.007510f, -0.003376f}, - {-0.236922f, -0.005189f, +0.002904f}, - {+0.053435f, +0.002953f, -0.000365f}, - {-0.239443f, +0.015553f, +0.003945f}, - {+0.195817f, -0.003961f, -0.001987f}, - {+0.019225f, -0.012398f, -0.000024f} - }, - { - {+0.388577f, +0.006627f, -0.000411f}, - {-0.576851f, -0.002898f, +0.000753f}, - {-0.052952f, +0.001666f, -0.000781f}, - {+0.271771f, -0.002315f, -0.001136f}, - {-0.256751f, +0.010892f, +0.000933f}, - {+0.055321f, +0.000623f, +0.000321f}, - {-0.178829f, -0.004699f, +0.001577f}, - {+0.192108f, -0.001841f, -0.002156f}, - {-0.030601f, +0.010281f, +0.000029f} - }, - { - {+0.362659f, -0.006023f, -0.001007f}, - {-0.548393f, +0.008477f, +0.000553f}, - {-0.079254f, -0.004768f, +0.001192f}, - {+0.262246f, +0.003901f, +0.002002f}, - {-0.282691f, -0.009035f, -0.001549f}, - {+0.052737f, -0.001616f, -0.000062f}, - {-0.134033f, +0.004191f, -0.001751f}, - {+0.189322f, +0.000295f, -0.001194f}, - {-0.059659f, -0.002213f, -0.000053f} - }, - { - {+0.339002f, +0.002927f, -0.000712f}, - {-0.507223f, -0.011672f, +0.001408f}, - {-0.101892f, +0.008754f, -0.000366f}, - {+0.261016f, +0.005455f, +0.000964f}, - {-0.300336f, -0.003329f, -0.000659f}, - {+0.049601f, -0.001946f, +0.000746f}, - {-0.101681f, -0.008021f, -0.001522f}, - {+0.184646f, -0.000891f, -0.000474f}, - {-0.064232f, -0.004100f, +0.000831f} - }, - { - {+0.318447f, -0.002583f, +0.000342f}, - {-0.458166f, +0.011334f, +0.002134f}, - {-0.119857f, -0.003793f, -0.002673f}, - {+0.257649f, -0.004527f, -0.002750f}, - {-0.302642f, +0.006786f, +0.003304f}, - {+0.050079f, +0.001140f, +0.002294f}, - {-0.075154f, +0.006079f, +0.000154f}, - {+0.175259f, -0.002462f, +0.000450f}, - {-0.050689f, +0.006815f, +0.002112f} - }, - { - {+0.300124f, +0.004647f, +0.000429f}, - {-0.407177f, -0.007551f, +0.001229f}, - {-0.135280f, -0.004904f, -0.000353f}, - {+0.246029f, -0.001362f, -0.002342f}, - {-0.292460f, -0.000038f, +0.003938f}, - {+0.057770f, +0.002994f, +0.000700f}, - {-0.048950f, -0.002677f, -0.000542f}, - {+0.161196f, +0.006930f, -0.000490f}, - {-0.030107f, -0.002304f, +0.001927f} - }, - { - {+0.283695f, -0.004672f, -0.000499f}, - {-0.357931f, +0.007644f, -0.000792f}, - {-0.154465f, -0.001114f, +0.004046f}, - {+0.221394f, -0.002251f, +0.001225f}, - {-0.274104f, -0.001365f, +0.000312f}, - {+0.076006f, +0.003175f, -0.002372f}, - {-0.019797f, +0.006502f, -0.001827f}, - {+0.147944f, -0.003560f, -0.001898f}, - {-0.011081f, -0.000127f, -0.000375f} - }, - { - {+0.269518f, +0.002457f, -0.001001f}, - {-0.311326f, -0.012837f, -0.000327f}, - {-0.181319f, +0.014112f, +0.003014f}, - {+0.182651f, +0.012951f, +0.002036f}, - {-0.248875f, -0.007948f, -0.001266f}, - {+0.104063f, -0.013233f, -0.001219f}, - {+0.010928f, -0.008987f, -0.001152f}, - {+0.141371f, -0.000838f, -0.001781f}, - {+0.004297f, -0.004808f, -0.000787f} - }, - { - {+0.257138f, -0.000471f, -0.000295f}, - {-0.269065f, +0.008971f, +0.001327f}, - {-0.209242f, -0.009445f, -0.000789f}, - {+0.136359f, -0.015642f, -0.000837f}, - {-0.218917f, +0.009939f, +0.000695f}, - {+0.133100f, +0.007332f, +0.001415f}, - {+0.037336f, +0.006071f, +0.000081f}, - {+0.141848f, +0.003924f, -0.000450f}, - {+0.015759f, +0.001304f, -0.000104f} - }, - { - {+0.244594f, +0.002255f, +0.000537f}, - {-0.232039f, -0.006188f, +0.001385f}, - {-0.226456f, -0.005183f, +0.000708f}, - {+0.094177f, +0.004239f, -0.001379f}, - {-0.188550f, -0.003755f, +0.001033f}, - {+0.152408f, +0.005083f, -0.000982f}, - {+0.053373f, +0.001503f, -0.000759f}, - {+0.144008f, -0.001965f, +0.000959f}, - {+0.023577f, -0.002308f, -0.000076f} - }, - { - {+0.229867f, -0.004876f, +0.000170f}, - {-0.197603f, +0.004728f, +0.000560f}, - {-0.226600f, +0.010780f, +0.006854f}, - {+0.064221f, +0.003891f, +0.003122f}, - {-0.161189f, -0.001104f, -0.002261f}, - {+0.157190f, -0.008241f, -0.006888f}, - {+0.056895f, -0.003410f, -0.003127f}, - {+0.141412f, -0.001071f, +0.001644f}, - {+0.029485f, +0.003593f, +0.001358f} - }, - { - {+0.212288f, +0.005142f, -0.000800f}, - {-0.162483f, -0.004117f, -0.001433f}, - {-0.209328f, -0.002547f, +0.009702f}, - {+0.048193f, +0.000129f, +0.007210f}, - {-0.139874f, -0.002121f, -0.005784f}, - {+0.146647f, -0.000237f, -0.009054f}, - {+0.049793f, -0.001403f, -0.002729f}, - {+0.132126f, +0.003164f, +0.002133f}, - {+0.035201f, -0.000152f, +0.002301f} - }, - { - {+0.191599f, -0.002871f, -0.000708f}, - {-0.125250f, +0.008746f, -0.003116f}, - {-0.175384f, -0.002970f, +0.005044f}, - {+0.046507f, -0.009000f, +0.004794f}, - {-0.128202f, +0.013178f, -0.002850f}, - {+0.120273f, +0.005762f, -0.003583f}, - {+0.034030f, -0.000067f, +0.000427f}, - {+0.118790f, -0.004116f, +0.002419f}, - {+0.044052f, -0.001094f, +0.001102f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 FASTCONV_FOA_latency_s_fx = 20833; -#else -const float FASTCONV_FOA_latency_s = 0.000020833f; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -12055,313 +6194,7 @@ const Word32 leftHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAP { -151465776, -1608465, -6150930, }, }, }; -#else -const float leftHRIRReal_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.181652f, +0.754551f, +0.218658f}, - {+0.313875f, -0.422228f, +0.135528f}, - {+0.014440f, +0.116710f, -0.013575f}, - {+0.042997f, +0.018886f, -0.015597f} - }, - { - {-0.171103f, -0.431000f, -0.158827f}, - {-0.162330f, -1.016290f, +0.055279f}, - {-0.009076f, +0.107488f, -0.010075f}, - {-0.002269f, +0.060685f, +0.014338f} - }, - { - {-0.320265f, -0.250765f, -0.167171f}, - {-0.685853f, +0.069215f, -0.258616f}, - {-0.021745f, +0.080557f, +0.010049f}, - {-0.070084f, +0.090970f, +0.018109f} - }, - { - {-0.090062f, +0.396798f, +0.031329f}, - {-0.547868f, +0.612159f, -0.064837f}, - {-0.014055f, +0.010916f, -0.020054f}, - {-0.104609f, -0.009719f, -0.014645f} - }, - { - {+0.310752f, -0.054756f, +0.106519f}, - {+0.077791f, -0.305320f, +0.144875f}, - {+0.048626f, -0.050345f, -0.007511f}, - {-0.035749f, -0.049561f, -0.008157f} - }, - { - {+0.590278f, -0.119063f, +0.024674f}, - {+0.708076f, -0.088569f, +0.094265f}, - {+0.119880f, +0.048720f, +0.014661f}, - {+0.120422f, +0.058573f, +0.004643f} - }, - { - {+0.638355f, +0.074625f, -0.043889f}, - {+1.048572f, +0.131298f, -0.037692f}, - {+0.143385f, +0.033975f, +0.014623f}, - {+0.293747f, -0.017822f, -0.000451f} - }, - { - {+0.521197f, -0.005266f, -0.041412f}, - {+1.094584f, +0.000210f, -0.073803f}, - {+0.109004f, -0.035628f, -0.003452f}, - {+0.407579f, +0.034241f, -0.002887f} - }, - { - {+0.361479f, -0.014806f, -0.009497f}, - {+0.986770f, -0.046512f, -0.029288f}, - {+0.057809f, +0.027844f, -0.015215f}, - {+0.409283f, +0.014805f, +0.005752f} - }, - { - {+0.229108f, -0.009840f, +0.009477f}, - {+0.839323f, +0.000705f, +0.009034f}, - {+0.036287f, +0.030074f, -0.010227f}, - {+0.293083f, -0.069929f, -0.004421f} - }, - { - {+0.125590f, +0.030181f, +0.007318f}, - {+0.687756f, +0.052219f, +0.009126f}, - {+0.052382f, -0.019274f, +0.003613f}, - {+0.122951f, +0.036356f, -0.013394f} - }, - { - {+0.030890f, -0.030176f, -0.000832f}, - {+0.531513f, -0.048483f, -0.004668f}, - {+0.067811f, -0.004747f, +0.002746f}, - {-0.026040f, -0.009502f, -0.004388f} - }, - { - {-0.062962f, +0.019124f, -0.003537f}, - {+0.376029f, +0.026217f, -0.006323f}, - {+0.042499f, +0.013437f, -0.001738f}, - {-0.120763f, +0.008891f, +0.001968f} - }, - { - {-0.150437f, -0.012367f, -0.001050f}, - {+0.234297f, -0.021072f, -0.000774f}, - {-0.046092f, -0.025628f, -0.001827f}, - {-0.163500f, +0.007913f, +0.005640f} - }, - { - {-0.224579f, +0.011037f, +0.001567f}, - {+0.118032f, +0.020982f, +0.001167f}, - {-0.190587f, +0.031698f, +0.001189f}, - {-0.181600f, +0.008625f, +0.006827f} - }, - { - {-0.283765f, -0.012148f, +0.001665f}, - {+0.031141f, -0.014212f, +0.000704f}, - {-0.354999f, -0.033990f, +0.005051f}, - {-0.201565f, -0.012572f, +0.001547f} - }, - { - {-0.330851f, +0.010110f, +0.000281f}, - {-0.032740f, +0.010680f, +0.000608f}, - {-0.489897f, +0.028555f, +0.005370f}, - {-0.226930f, +0.003469f, +0.000412f} - }, - { - {-0.370651f, -0.006974f, -0.000273f}, - {-0.085140f, -0.009699f, +0.000484f}, - {-0.550417f, -0.008550f, +0.002078f}, - {-0.248676f, -0.002190f, +0.002941f} - }, - { - {-0.408944f, +0.005900f, +0.000497f}, - {-0.135902f, +0.010386f, +0.000573f}, - {-0.516823f, -0.021637f, +0.000484f}, - {-0.254059f, +0.003659f, +0.002185f} - }, - { - {-0.450752f, -0.008484f, +0.001446f}, - {-0.191283f, -0.014617f, -0.000163f}, - {-0.408035f, +0.040263f, +0.003661f}, - {-0.231639f, +0.007741f, +0.000045f} - }, - { - {-0.497579f, +0.012039f, +0.001191f}, - {-0.253854f, +0.015815f, -0.001949f}, - {-0.274552f, -0.030994f, +0.006408f}, - {-0.178594f, -0.020739f, +0.002028f} - }, - { - {-0.545362f, -0.010634f, +0.000559f}, - {-0.324146f, -0.011460f, -0.001641f}, - {-0.169370f, +0.009075f, +0.003395f}, - {-0.105323f, +0.013694f, +0.002900f} - }, - { - {-0.587196f, +0.008279f, +0.000328f}, - {-0.403134f, +0.010566f, +0.002217f}, - {-0.118490f, +0.003381f, -0.001814f}, - {-0.027446f, -0.008251f, -0.001827f} - }, - { - {-0.618017f, -0.004259f, +0.000361f}, - {-0.490358f, -0.020714f, +0.004529f}, - {-0.113358f, -0.003251f, -0.002770f}, - {+0.041459f, +0.013481f, -0.005194f} - }, - { - {-0.637687f, +0.001567f, +0.000820f}, - {-0.576790f, +0.023931f, +0.002213f}, - {-0.125198f, +0.004103f, -0.001443f}, - {+0.086209f, -0.010781f, -0.003979f} - }, - { - {-0.651150f, -0.001076f, +0.001428f}, - {-0.645409f, -0.014669f, -0.000718f}, - {-0.123622f, +0.001940f, -0.001608f}, - {+0.092869f, +0.002431f, -0.000324f} - }, - { - {-0.664780f, +0.003292f, +0.001710f}, - {-0.683586f, +0.000299f, -0.000557f}, - {-0.092026f, -0.012393f, -0.001589f}, - {+0.056395f, +0.017649f, +0.000374f} - }, - { - {-0.682371f, -0.006662f, +0.000792f}, - {-0.693411f, +0.007664f, +0.002560f}, - {-0.036899f, +0.016426f, -0.000987f}, - {-0.012285f, -0.023342f, -0.003158f} - }, - { - {-0.702854f, +0.004929f, -0.000169f}, - {-0.690742f, -0.001912f, +0.004494f}, - {+0.017981f, -0.013806f, -0.000030f}, - {-0.088921f, +0.012514f, -0.003181f} - }, - { - {-0.722549f, -0.002146f, +0.000430f}, - {-0.692300f, -0.005917f, +0.002876f}, - {+0.046872f, +0.003463f, +0.001220f}, - {-0.154235f, -0.010645f, -0.001356f} - }, - { - {-0.739092f, +0.002594f, +0.001242f}, - {-0.704186f, +0.008734f, -0.000319f}, - {+0.036822f, +0.011640f, +0.000478f}, - {-0.201705f, +0.002195f, +0.000385f} - }, - { - {-0.751826f, -0.003070f, +0.000998f}, - {-0.721419f, -0.002290f, -0.001142f}, - {-0.005059f, -0.018609f, -0.002901f}, - {-0.237750f, -0.005780f, +0.002036f} - }, - { - {-0.760887f, +0.001608f, +0.000546f}, - {-0.736911f, +0.001064f, +0.000228f}, - {-0.057870f, +0.010116f, -0.004534f}, - {-0.273933f, +0.006641f, +0.002467f} - }, - { - {-0.767195f, -0.000265f, +0.000748f}, - {-0.748024f, -0.000586f, +0.001053f}, - {-0.102334f, +0.003212f, +0.000059f}, - {-0.315083f, -0.011342f, +0.002600f} - }, - { - {-0.772327f, +0.001114f, +0.000964f}, - {-0.756683f, +0.002199f, +0.000983f}, - {-0.133057f, +0.004906f, +0.003973f}, - {-0.355964f, +0.012189f, +0.001107f} - }, - { - {-0.777379f, -0.001664f, +0.000676f}, - {-0.767213f, -0.002558f, +0.000597f}, - {-0.152753f, -0.009690f, +0.001092f}, - {-0.384303f, -0.006913f, -0.001047f} - }, - { - {-0.782304f, +0.001186f, +0.000401f}, - {-0.783173f, +0.004116f, +0.000499f}, - {-0.161920f, -0.000439f, -0.001076f}, - {-0.390874f, -0.005592f, -0.000791f} - }, - { - {-0.786466f, -0.000413f, +0.000504f}, - {-0.805468f, -0.004296f, +0.000905f}, - {-0.161504f, +0.005798f, +0.001317f}, - {-0.378159f, +0.009420f, +0.002017f} - }, - { - {-0.789480f, +0.000911f, +0.000469f}, - {-0.831991f, +0.006156f, +0.001415f}, - {-0.154727f, +0.000127f, +0.002457f}, - {-0.358994f, -0.003224f, +0.003001f} - }, - { - {-0.791179f, +0.000118f, +0.000378f}, - {-0.858608f, -0.007156f, +0.000826f}, - {-0.143224f, -0.002141f, -0.000223f}, - {-0.346009f, -0.003832f, +0.000505f} - }, - { - {-0.791713f, -0.000506f, +0.000690f}, - {-0.880258f, +0.003409f, +0.000310f}, - {-0.126671f, -0.005516f, -0.001744f}, - {-0.344447f, +0.002552f, -0.002098f} - }, - { - {-0.791760f, -0.000637f, +0.000646f}, - {-0.894068f, +0.000147f, +0.001099f}, - {-0.106700f, +0.011976f, +0.001536f}, - {-0.352724f, +0.003880f, -0.000028f} - }, - { - {-0.791607f, +0.000326f, +0.000259f}, - {-0.900705f, -0.000766f, +0.002346f}, - {-0.087833f, -0.003369f, +0.004535f}, - {-0.367814f, +0.002794f, +0.003185f} - }, - { - {-0.791360f, +0.000216f, +0.000145f}, - {-0.902761f, -0.003469f, +0.001579f}, - {-0.071216f, -0.005336f, +0.001636f}, - {-0.384313f, -0.008317f, +0.002102f} - }, - { - {-0.791514f, -0.000959f, +0.000554f}, - {-0.901431f, +0.000403f, -0.000135f}, - {-0.050334f, -0.003160f, -0.002061f}, - {-0.392811f, +0.004068f, -0.000843f} - }, - { - {-0.792816f, -0.000333f, +0.001006f}, - {-0.897192f, +0.003319f, +0.000240f}, - {-0.018937f, +0.014843f, -0.000267f}, - {-0.385889f, +0.008000f, -0.000602f} - }, - { - {-0.795515f, +0.001892f, +0.000664f}, - {-0.892619f, -0.002628f, +0.001553f}, - {+0.020997f, -0.013093f, +0.003597f}, - {-0.364329f, -0.010852f, +0.002618f} - }, - { - {-0.798742f, -0.001369f, -0.000006f}, - {-0.889854f, +0.001159f, +0.002594f}, - {+0.062746f, +0.000823f, +0.002081f}, - {-0.335764f, +0.002095f, +0.002620f} - }, - { - {-0.801561f, -0.000332f, -0.000055f}, - {-0.888481f, +0.002442f, +0.002445f}, - {+0.101614f, +0.005650f, -0.006242f}, - {-0.306982f, +0.005040f, -0.003292f} - }, - { - {-0.803505f, +0.001996f, +0.000969f}, - {-0.886774f, -0.004132f, +0.000094f}, - {+0.134585f, +0.001923f, -0.014731f}, - {-0.282127f, -0.002996f, -0.011457f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -12665,313 +6498,7 @@ const Word32 leftHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAP { -10306311, 3014530, -1531693, }, }, }; -#else -const float leftHRIRImag_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.171042f, +0.590899f, -0.184148f}, - {-0.244016f, +0.359802f, -0.065072f}, - {-0.014995f, +0.035748f, -0.012250f}, - {-0.031507f, +0.034780f, -0.009895f} - }, - { - {-0.228601f, +0.478433f, -0.200802f}, - {-0.468416f, -0.184796f, -0.220307f}, - {-0.021499f, +0.027785f, -0.012584f}, - {-0.060325f, +0.030602f, -0.002599f} - }, - { - {+0.101029f, -0.456163f, +0.083058f}, - {-0.043611f, -0.870939f, -0.055288f}, - {+0.001858f, +0.027597f, -0.016310f}, - {-0.029059f, +0.033806f, -0.005356f} - }, - { - {+0.410000f, -0.084502f, +0.139239f}, - {+0.675225f, +0.218111f, +0.204844f}, - {+0.040662f, +0.051315f, -0.018039f}, - {+0.063503f, +0.056458f, -0.016519f} - }, - { - {+0.415696f, +0.265055f, +0.002626f}, - {+1.013647f, +0.334903f, +0.081079f}, - {+0.065042f, -0.040883f, +0.012352f}, - {+0.181037f, -0.059880f, +0.005085f} - }, - { - {+0.148368f, -0.111388f, -0.073685f}, - {+0.845933f, -0.250930f, -0.091257f}, - {+0.025616f, -0.060138f, +0.012766f}, - {+0.228995f, -0.032819f, +0.003215f} - }, - { - {-0.193830f, -0.014212f, -0.040266f}, - {+0.402943f, +0.020025f, -0.092885f}, - {-0.058690f, +0.041101f, -0.008172f}, - {+0.161828f, +0.015394f, -0.004824f} - }, - { - {-0.448848f, +0.024310f, +0.012126f}, - {-0.042491f, +0.043522f, -0.007450f}, - {-0.129054f, -0.013924f, -0.014446f}, - {-0.004772f, -0.042423f, +0.005623f} - }, - { - {-0.581348f, +0.015560f, +0.027528f}, - {-0.364335f, +0.028974f, +0.038991f}, - {-0.152614f, -0.032355f, -0.005641f}, - {-0.218401f, +0.075676f, -0.000317f} - }, - { - {-0.641251f, -0.033204f, +0.014171f}, - {-0.576730f, -0.078039f, +0.024279f}, - {-0.144066f, +0.021824f, +0.009938f}, - {-0.391879f, -0.026769f, -0.009335f} - }, - { - {-0.678995f, +0.021986f, +0.000075f}, - {-0.725441f, +0.048920f, -0.000285f}, - {-0.153455f, +0.022432f, +0.008363f}, - {-0.464657f, -0.026611f, +0.001799f} - }, - { - {-0.709246f, -0.001743f, -0.002228f}, - {-0.829481f, -0.007880f, -0.002786f}, - {-0.208073f, -0.023291f, +0.000232f}, - {-0.446725f, +0.013756f, +0.010505f} - }, - { - {-0.725841f, -0.005310f, +0.002197f}, - {-0.889756f, -0.003342f, +0.005446f}, - {-0.296494f, +0.020861f, +0.000461f}, - {-0.383826f, -0.016046f, +0.008157f} - }, - { - {-0.724803f, +0.003851f, +0.004749f}, - {-0.910037f, -0.002807f, +0.007312f}, - {-0.382641f, -0.013902f, +0.003575f}, - {-0.319137f, +0.005237f, +0.005556f} - }, - { - {-0.710495f, -0.001176f, +0.003666f}, - {-0.902293f, -0.002075f, +0.004352f}, - {-0.421514f, +0.001837f, +0.005564f}, - {-0.276374f, +0.006416f, -0.000678f} - }, - { - {-0.690926f, +0.001911f, +0.001428f}, - {-0.883286f, +0.004067f, +0.003096f}, - {-0.382030f, +0.012331f, +0.003744f}, - {-0.247702f, +0.008689f, -0.002881f} - }, - { - {-0.672402f, -0.004418f, +0.000819f}, - {-0.868037f, -0.001291f, +0.002503f}, - {-0.260382f, -0.031252f, -0.000392f}, - {-0.215212f, -0.010735f, +0.000421f} - }, - { - {-0.658558f, +0.003708f, +0.001700f}, - {-0.863001f, -0.000603f, +0.002111f}, - {-0.084457f, +0.046037f, -0.001989f}, - {-0.169471f, +0.007931f, +0.000103f} - }, - { - {-0.650017f, -0.001079f, +0.002333f}, - {-0.867523f, +0.003563f, +0.001620f}, - {+0.093137f, -0.042759f, +0.000290f}, - {-0.110082f, -0.012804f, -0.002290f} - }, - { - {-0.643665f, -0.001088f, +0.001723f}, - {-0.877421f, -0.003410f, +0.000713f}, - {+0.217492f, +0.016953f, +0.001740f}, - {-0.046668f, +0.018761f, -0.001213f} - }, - { - {-0.633405f, -0.001560f, +0.000669f}, - {-0.887575f, -0.001389f, +0.001467f}, - {+0.260289f, +0.010429f, -0.001427f}, - {+0.003491f, -0.008000f, +0.000581f} - }, - { - {-0.613764f, +0.006196f, +0.000648f}, - {-0.893912f, +0.004015f, +0.004684f}, - {+0.234569f, -0.016937f, -0.004729f}, - {+0.024290f, -0.008269f, -0.003225f} - }, - { - {-0.584438f, -0.007700f, +0.000979f}, - {-0.892617f, +0.003169f, +0.005373f}, - {+0.180710f, +0.012490f, -0.004688f}, - {+0.010563f, +0.002672f, -0.005332f} - }, - { - {-0.550310f, +0.008552f, +0.001243f}, - {-0.875679f, -0.001053f, +0.001808f}, - {+0.139761f, -0.001299f, -0.002407f}, - {-0.037114f, -0.006797f, -0.001129f} - }, - { - {-0.518417f, -0.006133f, +0.001495f}, - {-0.833856f, -0.011056f, -0.000737f}, - {+0.132343f, -0.004055f, -0.000776f}, - {-0.115163f, +0.018375f, +0.002028f} - }, - { - {-0.493716f, +0.003010f, +0.001174f}, - {-0.768131f, +0.020508f, -0.000066f}, - {+0.152693f, +0.008282f, -0.001169f}, - {-0.209710f, -0.025096f, +0.001590f} - }, - { - {-0.475954f, -0.001122f, +0.000352f}, - {-0.692851f, -0.022031f, +0.002804f}, - {+0.177765f, -0.009921f, +0.000059f}, - {-0.298030f, +0.020217f, -0.000155f} - }, - { - {-0.460792f, +0.002405f, -0.000376f}, - {-0.628175f, +0.009296f, +0.003825f}, - {+0.180171f, -0.003908f, +0.001064f}, - {-0.358358f, -0.006713f, -0.000347f} - }, - { - {-0.443319f, -0.006234f, +0.000246f}, - {-0.585810f, +0.000344f, +0.001004f}, - {+0.146499f, +0.011689f, +0.000951f}, - {-0.382061f, -0.004531f, +0.001751f} - }, - { - {-0.421955f, +0.005364f, +0.001214f}, - {-0.561763f, -0.000808f, -0.002176f}, - {+0.084775f, -0.020993f, +0.000045f}, - {-0.377713f, +0.006390f, +0.003942f} - }, - { - {-0.398163f, -0.003724f, +0.000751f}, - {-0.543402f, -0.007140f, -0.001937f}, - {+0.018165f, +0.017000f, -0.002291f}, - {-0.362688f, -0.001927f, +0.003741f} - }, - { - {-0.373625f, +0.004821f, +0.000045f}, - {-0.521728f, +0.008459f, +0.000565f}, - {-0.028207f, -0.002987f, -0.002148f}, - {-0.349401f, +0.000605f, +0.002646f} - }, - { - {-0.349815f, -0.005517f, +0.000230f}, - {-0.496496f, -0.005695f, +0.001454f}, - {-0.043081f, -0.009641f, +0.002012f}, - {-0.338864f, +0.001346f, +0.001602f} - }, - { - {-0.328050f, +0.004001f, +0.000439f}, - {-0.471819f, +0.004175f, +0.001005f}, - {-0.032608f, +0.005428f, +0.005314f}, - {-0.322952f, +0.001273f, -0.000092f} - }, - { - {-0.308595f, -0.003134f, +0.000145f}, - {-0.451672f, -0.002574f, +0.000427f}, - {-0.010290f, +0.004974f, +0.001398f}, - {-0.292677f, -0.007601f, -0.001415f} - }, - { - {-0.290597f, +0.003355f, -0.000136f}, - {-0.436743f, +0.002865f, +0.000374f}, - {+0.017338f, +0.007331f, -0.002166f}, - {-0.247618f, +0.015355f, -0.000635f} - }, - { - {-0.272998f, -0.004175f, +0.000021f}, - {-0.424310f, -0.002403f, +0.000711f}, - {+0.047898f, -0.011482f, +0.000426f}, - {-0.198447f, -0.014503f, +0.001973f} - }, - { - {-0.255459f, +0.003452f, +0.000162f}, - {-0.409862f, +0.003440f, +0.000963f}, - {+0.077199f, +0.004028f, +0.001741f}, - {-0.160349f, +0.003060f, +0.002227f} - }, - { - {-0.238237f, -0.003448f, +0.000017f}, - {-0.389274f, -0.003315f, +0.000451f}, - {+0.103396f, -0.000155f, -0.000865f}, - {-0.141016f, +0.003270f, -0.000528f} - }, - { - {-0.221659f, +0.003880f, +0.000200f}, - {-0.360274f, +0.007600f, -0.000068f}, - {+0.127118f, +0.006707f, -0.002120f}, - {-0.136776f, -0.001506f, -0.002388f} - }, - { - {-0.206321f, -0.002421f, +0.000222f}, - {-0.323761f, -0.010008f, +0.000633f}, - {+0.147702f, -0.009697f, +0.000777f}, - {-0.138196f, -0.005501f, -0.000185f} - }, - { - {-0.192402f, +0.002339f, -0.000141f}, - {-0.283782f, +0.009026f, +0.001400f}, - {+0.162715f, +0.001250f, +0.002766f}, - {-0.137599f, +0.001369f, +0.002680f} - }, - { - {-0.179623f, -0.002933f, -0.000145f}, - {-0.244500f, -0.005039f, +0.000589f}, - {+0.172860f, +0.006728f, -0.000517f}, - {-0.130069f, +0.003207f, +0.001003f} - }, - { - {-0.168039f, +0.002857f, +0.000210f}, - {-0.207651f, +0.005569f, -0.001162f}, - {+0.183789f, +0.001069f, -0.004319f}, - {-0.111107f, +0.002870f, -0.002170f} - }, - { - {-0.157725f, -0.001947f, +0.000454f}, - {-0.172892f, -0.010252f, -0.000596f}, - {+0.198825f, -0.011358f, -0.002404f}, - {-0.080708f, -0.012176f, -0.001780f} - }, - { - {-0.148241f, +0.000618f, +0.000026f}, - {-0.141203f, +0.007243f, +0.001063f}, - {+0.212313f, +0.004737f, +0.000973f}, - {-0.046659f, +0.011069f, +0.000996f} - }, - { - {-0.138402f, -0.001765f, -0.000579f}, - {-0.113224f, -0.004585f, +0.001287f}, - {+0.215767f, +0.007978f, -0.001019f}, - {-0.020004f, +0.000374f, +0.000573f} - }, - { - {-0.127236f, +0.003443f, -0.000426f}, - {-0.086775f, +0.002732f, +0.000319f}, - {+0.206200f, -0.011017f, -0.006667f}, - {-0.006720f, -0.005737f, -0.003684f} - }, - { - {-0.114738f, -0.003852f, +0.000286f}, - {-0.059179f, -0.002958f, -0.001772f}, - {+0.184707f, +0.002148f, -0.008785f}, - {-0.006688f, +0.000728f, -0.006182f} - }, - { - {-0.100815f, +0.002358f, +0.000595f}, - {-0.029594f, +0.008594f, -0.002770f}, - {+0.151524f, +0.003310f, -0.003987f}, - {-0.019197f, +0.005615f, -0.002853f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -13275,313 +6802,7 @@ const Word32 rightHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTA { -151465776, -1608465, -6150930, }, }, }; -#else -const float rightHRIRReal_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {+0.181652f, +0.754551f, +0.218658f}, - {-0.313875f, +0.422228f, -0.135528f}, - {+0.014440f, +0.116710f, -0.013575f}, - {+0.042997f, +0.018886f, -0.015597f} - }, - { - {-0.171103f, -0.431000f, -0.158827f}, - {+0.162330f, +1.016290f, -0.055279f}, - {-0.009076f, +0.107488f, -0.010075f}, - {-0.002269f, +0.060685f, +0.014338f} - }, - { - {-0.320265f, -0.250765f, -0.167171f}, - {+0.685853f, -0.069215f, +0.258616f}, - {-0.021745f, +0.080557f, +0.010049f}, - {-0.070084f, +0.090970f, +0.018109f} - }, - { - {-0.090062f, +0.396798f, +0.031329f}, - {+0.547868f, -0.612159f, +0.064837f}, - {-0.014055f, +0.010916f, -0.020054f}, - {-0.104609f, -0.009719f, -0.014645f} - }, - { - {+0.310752f, -0.054756f, +0.106519f}, - {-0.077791f, +0.305320f, -0.144875f}, - {+0.048626f, -0.050345f, -0.007511f}, - {-0.035749f, -0.049561f, -0.008157f} - }, - { - {+0.590278f, -0.119063f, +0.024674f}, - {-0.708076f, +0.088569f, -0.094265f}, - {+0.119880f, +0.048720f, +0.014661f}, - {+0.120422f, +0.058573f, +0.004643f} - }, - { - {+0.638355f, +0.074625f, -0.043889f}, - {-1.048572f, -0.131298f, +0.037692f}, - {+0.143385f, +0.033975f, +0.014623f}, - {+0.293747f, -0.017822f, -0.000451f} - }, - { - {+0.521197f, -0.005266f, -0.041412f}, - {-1.094584f, -0.000210f, +0.073803f}, - {+0.109004f, -0.035628f, -0.003452f}, - {+0.407579f, +0.034241f, -0.002887f} - }, - { - {+0.361479f, -0.014806f, -0.009497f}, - {-0.986770f, +0.046512f, +0.029288f}, - {+0.057809f, +0.027844f, -0.015215f}, - {+0.409283f, +0.014805f, +0.005752f} - }, - { - {+0.229108f, -0.009840f, +0.009477f}, - {-0.839323f, -0.000705f, -0.009034f}, - {+0.036287f, +0.030074f, -0.010227f}, - {+0.293083f, -0.069929f, -0.004421f} - }, - { - {+0.125590f, +0.030181f, +0.007318f}, - {-0.687756f, -0.052219f, -0.009126f}, - {+0.052382f, -0.019274f, +0.003613f}, - {+0.122951f, +0.036356f, -0.013394f} - }, - { - {+0.030890f, -0.030176f, -0.000832f}, - {-0.531513f, +0.048483f, +0.004668f}, - {+0.067811f, -0.004747f, +0.002746f}, - {-0.026040f, -0.009502f, -0.004388f} - }, - { - {-0.062962f, +0.019124f, -0.003537f}, - {-0.376029f, -0.026217f, +0.006323f}, - {+0.042499f, +0.013437f, -0.001738f}, - {-0.120763f, +0.008891f, +0.001968f} - }, - { - {-0.150437f, -0.012367f, -0.001050f}, - {-0.234297f, +0.021072f, +0.000774f}, - {-0.046092f, -0.025628f, -0.001827f}, - {-0.163500f, +0.007913f, +0.005640f} - }, - { - {-0.224579f, +0.011037f, +0.001567f}, - {-0.118032f, -0.020982f, -0.001167f}, - {-0.190587f, +0.031698f, +0.001189f}, - {-0.181600f, +0.008625f, +0.006827f} - }, - { - {-0.283765f, -0.012148f, +0.001665f}, - {-0.031141f, +0.014212f, -0.000704f}, - {-0.354999f, -0.033990f, +0.005051f}, - {-0.201565f, -0.012572f, +0.001547f} - }, - { - {-0.330851f, +0.010110f, +0.000281f}, - {+0.032740f, -0.010680f, -0.000608f}, - {-0.489897f, +0.028555f, +0.005370f}, - {-0.226930f, +0.003469f, +0.000412f} - }, - { - {-0.370651f, -0.006974f, -0.000273f}, - {+0.085140f, +0.009699f, -0.000484f}, - {-0.550417f, -0.008550f, +0.002078f}, - {-0.248676f, -0.002190f, +0.002941f} - }, - { - {-0.408944f, +0.005900f, +0.000497f}, - {+0.135902f, -0.010386f, -0.000573f}, - {-0.516823f, -0.021637f, +0.000484f}, - {-0.254059f, +0.003659f, +0.002185f} - }, - { - {-0.450752f, -0.008484f, +0.001446f}, - {+0.191283f, +0.014617f, +0.000163f}, - {-0.408035f, +0.040263f, +0.003661f}, - {-0.231639f, +0.007741f, +0.000045f} - }, - { - {-0.497579f, +0.012039f, +0.001191f}, - {+0.253854f, -0.015815f, +0.001949f}, - {-0.274552f, -0.030994f, +0.006408f}, - {-0.178594f, -0.020739f, +0.002028f} - }, - { - {-0.545362f, -0.010634f, +0.000559f}, - {+0.324146f, +0.011460f, +0.001641f}, - {-0.169370f, +0.009075f, +0.003395f}, - {-0.105323f, +0.013694f, +0.002900f} - }, - { - {-0.587196f, +0.008279f, +0.000328f}, - {+0.403134f, -0.010566f, -0.002217f}, - {-0.118490f, +0.003381f, -0.001814f}, - {-0.027446f, -0.008251f, -0.001827f} - }, - { - {-0.618017f, -0.004259f, +0.000361f}, - {+0.490358f, +0.020714f, -0.004529f}, - {-0.113358f, -0.003251f, -0.002770f}, - {+0.041459f, +0.013481f, -0.005194f} - }, - { - {-0.637687f, +0.001567f, +0.000820f}, - {+0.576790f, -0.023931f, -0.002213f}, - {-0.125198f, +0.004103f, -0.001443f}, - {+0.086209f, -0.010781f, -0.003979f} - }, - { - {-0.651150f, -0.001076f, +0.001428f}, - {+0.645409f, +0.014669f, +0.000718f}, - {-0.123622f, +0.001940f, -0.001608f}, - {+0.092869f, +0.002431f, -0.000324f} - }, - { - {-0.664780f, +0.003292f, +0.001710f}, - {+0.683586f, -0.000299f, +0.000557f}, - {-0.092026f, -0.012393f, -0.001589f}, - {+0.056395f, +0.017649f, +0.000374f} - }, - { - {-0.682371f, -0.006662f, +0.000792f}, - {+0.693411f, -0.007664f, -0.002560f}, - {-0.036899f, +0.016426f, -0.000987f}, - {-0.012285f, -0.023342f, -0.003158f} - }, - { - {-0.702854f, +0.004929f, -0.000169f}, - {+0.690742f, +0.001912f, -0.004494f}, - {+0.017981f, -0.013806f, -0.000030f}, - {-0.088921f, +0.012514f, -0.003181f} - }, - { - {-0.722549f, -0.002146f, +0.000430f}, - {+0.692300f, +0.005917f, -0.002876f}, - {+0.046872f, +0.003463f, +0.001220f}, - {-0.154235f, -0.010645f, -0.001356f} - }, - { - {-0.739092f, +0.002594f, +0.001242f}, - {+0.704186f, -0.008734f, +0.000319f}, - {+0.036822f, +0.011640f, +0.000478f}, - {-0.201705f, +0.002195f, +0.000385f} - }, - { - {-0.751826f, -0.003070f, +0.000998f}, - {+0.721419f, +0.002290f, +0.001142f}, - {-0.005059f, -0.018609f, -0.002901f}, - {-0.237750f, -0.005780f, +0.002036f} - }, - { - {-0.760887f, +0.001608f, +0.000546f}, - {+0.736911f, -0.001064f, -0.000228f}, - {-0.057870f, +0.010116f, -0.004534f}, - {-0.273933f, +0.006641f, +0.002467f} - }, - { - {-0.767195f, -0.000265f, +0.000748f}, - {+0.748024f, +0.000586f, -0.001053f}, - {-0.102334f, +0.003212f, +0.000059f}, - {-0.315083f, -0.011342f, +0.002600f} - }, - { - {-0.772327f, +0.001114f, +0.000964f}, - {+0.756683f, -0.002199f, -0.000983f}, - {-0.133057f, +0.004906f, +0.003973f}, - {-0.355964f, +0.012189f, +0.001107f} - }, - { - {-0.777379f, -0.001664f, +0.000676f}, - {+0.767213f, +0.002558f, -0.000597f}, - {-0.152753f, -0.009690f, +0.001092f}, - {-0.384303f, -0.006913f, -0.001047f} - }, - { - {-0.782304f, +0.001186f, +0.000401f}, - {+0.783173f, -0.004116f, -0.000499f}, - {-0.161920f, -0.000439f, -0.001076f}, - {-0.390874f, -0.005592f, -0.000791f} - }, - { - {-0.786466f, -0.000413f, +0.000504f}, - {+0.805468f, +0.004296f, -0.000905f}, - {-0.161504f, +0.005798f, +0.001317f}, - {-0.378159f, +0.009420f, +0.002017f} - }, - { - {-0.789480f, +0.000911f, +0.000469f}, - {+0.831991f, -0.006156f, -0.001415f}, - {-0.154727f, +0.000127f, +0.002457f}, - {-0.358994f, -0.003224f, +0.003001f} - }, - { - {-0.791179f, +0.000118f, +0.000378f}, - {+0.858608f, +0.007156f, -0.000826f}, - {-0.143224f, -0.002141f, -0.000223f}, - {-0.346009f, -0.003832f, +0.000505f} - }, - { - {-0.791713f, -0.000506f, +0.000690f}, - {+0.880258f, -0.003409f, -0.000310f}, - {-0.126671f, -0.005516f, -0.001744f}, - {-0.344447f, +0.002552f, -0.002098f} - }, - { - {-0.791760f, -0.000637f, +0.000646f}, - {+0.894068f, -0.000147f, -0.001099f}, - {-0.106700f, +0.011976f, +0.001536f}, - {-0.352724f, +0.003880f, -0.000028f} - }, - { - {-0.791607f, +0.000326f, +0.000259f}, - {+0.900705f, +0.000766f, -0.002346f}, - {-0.087833f, -0.003369f, +0.004535f}, - {-0.367814f, +0.002794f, +0.003185f} - }, - { - {-0.791360f, +0.000216f, +0.000145f}, - {+0.902761f, +0.003469f, -0.001579f}, - {-0.071216f, -0.005336f, +0.001636f}, - {-0.384313f, -0.008317f, +0.002102f} - }, - { - {-0.791514f, -0.000959f, +0.000554f}, - {+0.901431f, -0.000403f, +0.000135f}, - {-0.050334f, -0.003160f, -0.002061f}, - {-0.392811f, +0.004068f, -0.000843f} - }, - { - {-0.792816f, -0.000333f, +0.001006f}, - {+0.897192f, -0.003319f, -0.000240f}, - {-0.018937f, +0.014843f, -0.000267f}, - {-0.385889f, +0.008000f, -0.000602f} - }, - { - {-0.795515f, +0.001892f, +0.000664f}, - {+0.892619f, +0.002628f, -0.001553f}, - {+0.020997f, -0.013093f, +0.003597f}, - {-0.364329f, -0.010852f, +0.002618f} - }, - { - {-0.798742f, -0.001369f, -0.000006f}, - {+0.889854f, -0.001159f, -0.002594f}, - {+0.062746f, +0.000823f, +0.002081f}, - {-0.335764f, +0.002095f, +0.002620f} - }, - { - {-0.801561f, -0.000332f, -0.000055f}, - {+0.888481f, -0.002442f, -0.002445f}, - {+0.101614f, +0.005650f, -0.006242f}, - {-0.306982f, +0.005040f, -0.003292f} - }, - { - {-0.803505f, +0.001996f, +0.000969f}, - {+0.886774f, +0.004132f, -0.000094f}, - {+0.134585f, +0.001923f, -0.014731f}, - {-0.282127f, -0.002996f, -0.011457f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA] /* Q29 */= { { @@ -13885,319 +7106,9 @@ const Word32 rightHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTA { -10306311, 3014530, -1531693, }, }, }; -#else -const float rightHRIRImag_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]= -{ - { - {-0.171042f, +0.590899f, -0.184148f}, - {+0.244016f, -0.359802f, +0.065072f}, - {-0.014995f, +0.035748f, -0.012250f}, - {-0.031507f, +0.034780f, -0.009895f} - }, - { - {-0.228601f, +0.478433f, -0.200802f}, - {+0.468416f, +0.184796f, +0.220307f}, - {-0.021499f, +0.027785f, -0.012584f}, - {-0.060325f, +0.030602f, -0.002599f} - }, - { - {+0.101029f, -0.456163f, +0.083058f}, - {+0.043611f, +0.870939f, +0.055288f}, - {+0.001858f, +0.027597f, -0.016310f}, - {-0.029059f, +0.033806f, -0.005356f} - }, - { - {+0.410000f, -0.084502f, +0.139239f}, - {-0.675225f, -0.218111f, -0.204844f}, - {+0.040662f, +0.051315f, -0.018039f}, - {+0.063503f, +0.056458f, -0.016519f} - }, - { - {+0.415696f, +0.265055f, +0.002626f}, - {-1.013647f, -0.334903f, -0.081079f}, - {+0.065042f, -0.040883f, +0.012352f}, - {+0.181037f, -0.059880f, +0.005085f} - }, - { - {+0.148368f, -0.111388f, -0.073685f}, - {-0.845933f, +0.250930f, +0.091257f}, - {+0.025616f, -0.060138f, +0.012766f}, - {+0.228995f, -0.032819f, +0.003215f} - }, - { - {-0.193830f, -0.014212f, -0.040266f}, - {-0.402943f, -0.020025f, +0.092885f}, - {-0.058690f, +0.041101f, -0.008172f}, - {+0.161828f, +0.015394f, -0.004824f} - }, - { - {-0.448848f, +0.024310f, +0.012126f}, - {+0.042491f, -0.043522f, +0.007450f}, - {-0.129054f, -0.013924f, -0.014446f}, - {-0.004772f, -0.042423f, +0.005623f} - }, - { - {-0.581348f, +0.015560f, +0.027528f}, - {+0.364335f, -0.028974f, -0.038991f}, - {-0.152614f, -0.032355f, -0.005641f}, - {-0.218401f, +0.075676f, -0.000317f} - }, - { - {-0.641251f, -0.033204f, +0.014171f}, - {+0.576730f, +0.078039f, -0.024279f}, - {-0.144066f, +0.021824f, +0.009938f}, - {-0.391879f, -0.026769f, -0.009335f} - }, - { - {-0.678995f, +0.021986f, +0.000075f}, - {+0.725441f, -0.048920f, +0.000285f}, - {-0.153455f, +0.022432f, +0.008363f}, - {-0.464657f, -0.026611f, +0.001799f} - }, - { - {-0.709246f, -0.001743f, -0.002228f}, - {+0.829481f, +0.007880f, +0.002786f}, - {-0.208073f, -0.023291f, +0.000232f}, - {-0.446725f, +0.013756f, +0.010505f} - }, - { - {-0.725841f, -0.005310f, +0.002197f}, - {+0.889756f, +0.003342f, -0.005446f}, - {-0.296494f, +0.020861f, +0.000461f}, - {-0.383826f, -0.016046f, +0.008157f} - }, - { - {-0.724803f, +0.003851f, +0.004749f}, - {+0.910037f, +0.002807f, -0.007312f}, - {-0.382641f, -0.013902f, +0.003575f}, - {-0.319137f, +0.005237f, +0.005556f} - }, - { - {-0.710495f, -0.001176f, +0.003666f}, - {+0.902293f, +0.002075f, -0.004352f}, - {-0.421514f, +0.001837f, +0.005564f}, - {-0.276374f, +0.006416f, -0.000678f} - }, - { - {-0.690926f, +0.001911f, +0.001428f}, - {+0.883286f, -0.004067f, -0.003096f}, - {-0.382030f, +0.012331f, +0.003744f}, - {-0.247702f, +0.008689f, -0.002881f} - }, - { - {-0.672402f, -0.004418f, +0.000819f}, - {+0.868037f, +0.001291f, -0.002503f}, - {-0.260382f, -0.031252f, -0.000392f}, - {-0.215212f, -0.010735f, +0.000421f} - }, - { - {-0.658558f, +0.003708f, +0.001700f}, - {+0.863001f, +0.000603f, -0.002111f}, - {-0.084457f, +0.046037f, -0.001989f}, - {-0.169471f, +0.007931f, +0.000103f} - }, - { - {-0.650017f, -0.001079f, +0.002333f}, - {+0.867523f, -0.003563f, -0.001620f}, - {+0.093137f, -0.042759f, +0.000290f}, - {-0.110082f, -0.012804f, -0.002290f} - }, - { - {-0.643665f, -0.001088f, +0.001723f}, - {+0.877421f, +0.003410f, -0.000713f}, - {+0.217492f, +0.016953f, +0.001740f}, - {-0.046668f, +0.018761f, -0.001213f} - }, - { - {-0.633405f, -0.001560f, +0.000669f}, - {+0.887575f, +0.001389f, -0.001467f}, - {+0.260289f, +0.010429f, -0.001427f}, - {+0.003491f, -0.008000f, +0.000581f} - }, - { - {-0.613764f, +0.006196f, +0.000648f}, - {+0.893912f, -0.004015f, -0.004684f}, - {+0.234569f, -0.016937f, -0.004729f}, - {+0.024290f, -0.008269f, -0.003225f} - }, - { - {-0.584438f, -0.007700f, +0.000979f}, - {+0.892617f, -0.003169f, -0.005373f}, - {+0.180710f, +0.012490f, -0.004688f}, - {+0.010563f, +0.002672f, -0.005332f} - }, - { - {-0.550310f, +0.008552f, +0.001243f}, - {+0.875679f, +0.001053f, -0.001808f}, - {+0.139761f, -0.001299f, -0.002407f}, - {-0.037114f, -0.006797f, -0.001129f} - }, - { - {-0.518417f, -0.006133f, +0.001495f}, - {+0.833856f, +0.011056f, +0.000737f}, - {+0.132343f, -0.004055f, -0.000776f}, - {-0.115163f, +0.018375f, +0.002028f} - }, - { - {-0.493716f, +0.003010f, +0.001174f}, - {+0.768131f, -0.020508f, +0.000066f}, - {+0.152693f, +0.008282f, -0.001169f}, - {-0.209710f, -0.025096f, +0.001590f} - }, - { - {-0.475954f, -0.001122f, +0.000352f}, - {+0.692851f, +0.022031f, -0.002804f}, - {+0.177765f, -0.009921f, +0.000059f}, - {-0.298030f, +0.020217f, -0.000155f} - }, - { - {-0.460792f, +0.002405f, -0.000376f}, - {+0.628175f, -0.009296f, -0.003825f}, - {+0.180171f, -0.003908f, +0.001064f}, - {-0.358358f, -0.006713f, -0.000347f} - }, - { - {-0.443319f, -0.006234f, +0.000246f}, - {+0.585810f, -0.000344f, -0.001004f}, - {+0.146499f, +0.011689f, +0.000951f}, - {-0.382061f, -0.004531f, +0.001751f} - }, - { - {-0.421955f, +0.005364f, +0.001214f}, - {+0.561763f, +0.000808f, +0.002176f}, - {+0.084775f, -0.020993f, +0.000045f}, - {-0.377713f, +0.006390f, +0.003942f} - }, - { - {-0.398163f, -0.003724f, +0.000751f}, - {+0.543402f, +0.007140f, +0.001937f}, - {+0.018165f, +0.017000f, -0.002291f}, - {-0.362688f, -0.001927f, +0.003741f} - }, - { - {-0.373625f, +0.004821f, +0.000045f}, - {+0.521728f, -0.008459f, -0.000565f}, - {-0.028207f, -0.002987f, -0.002148f}, - {-0.349401f, +0.000605f, +0.002646f} - }, - { - {-0.349815f, -0.005517f, +0.000230f}, - {+0.496496f, +0.005695f, -0.001454f}, - {-0.043081f, -0.009641f, +0.002012f}, - {-0.338864f, +0.001346f, +0.001602f} - }, - { - {-0.328050f, +0.004001f, +0.000439f}, - {+0.471819f, -0.004175f, -0.001005f}, - {-0.032608f, +0.005428f, +0.005314f}, - {-0.322952f, +0.001273f, -0.000092f} - }, - { - {-0.308595f, -0.003134f, +0.000145f}, - {+0.451672f, +0.002574f, -0.000427f}, - {-0.010290f, +0.004974f, +0.001398f}, - {-0.292677f, -0.007601f, -0.001415f} - }, - { - {-0.290597f, +0.003355f, -0.000136f}, - {+0.436743f, -0.002865f, -0.000374f}, - {+0.017338f, +0.007331f, -0.002166f}, - {-0.247618f, +0.015355f, -0.000635f} - }, - { - {-0.272998f, -0.004175f, +0.000021f}, - {+0.424310f, +0.002403f, -0.000711f}, - {+0.047898f, -0.011482f, +0.000426f}, - {-0.198447f, -0.014503f, +0.001973f} - }, - { - {-0.255459f, +0.003452f, +0.000162f}, - {+0.409862f, -0.003440f, -0.000963f}, - {+0.077199f, +0.004028f, +0.001741f}, - {-0.160349f, +0.003060f, +0.002227f} - }, - { - {-0.238237f, -0.003448f, +0.000017f}, - {+0.389274f, +0.003315f, -0.000451f}, - {+0.103396f, -0.000155f, -0.000865f}, - {-0.141016f, +0.003270f, -0.000528f} - }, - { - {-0.221659f, +0.003880f, +0.000200f}, - {+0.360274f, -0.007600f, +0.000068f}, - {+0.127118f, +0.006707f, -0.002120f}, - {-0.136776f, -0.001506f, -0.002388f} - }, - { - {-0.206321f, -0.002421f, +0.000222f}, - {+0.323761f, +0.010008f, -0.000633f}, - {+0.147702f, -0.009697f, +0.000777f}, - {-0.138196f, -0.005501f, -0.000185f} - }, - { - {-0.192402f, +0.002339f, -0.000141f}, - {+0.283782f, -0.009026f, -0.001400f}, - {+0.162715f, +0.001250f, +0.002766f}, - {-0.137599f, +0.001369f, +0.002680f} - }, - { - {-0.179623f, -0.002933f, -0.000145f}, - {+0.244500f, +0.005039f, -0.000589f}, - {+0.172860f, +0.006728f, -0.000517f}, - {-0.130069f, +0.003207f, +0.001003f} - }, - { - {-0.168039f, +0.002857f, +0.000210f}, - {+0.207651f, -0.005569f, +0.001162f}, - {+0.183789f, +0.001069f, -0.004319f}, - {-0.111107f, +0.002870f, -0.002170f} - }, - { - {-0.157725f, -0.001947f, +0.000454f}, - {+0.172892f, +0.010252f, +0.000596f}, - {+0.198825f, -0.011358f, -0.002404f}, - {-0.080708f, -0.012176f, -0.001780f} - }, - { - {-0.148241f, +0.000618f, +0.000026f}, - {+0.141203f, -0.007243f, -0.001063f}, - {+0.212313f, +0.004737f, +0.000973f}, - {-0.046659f, +0.011069f, +0.000996f} - }, - { - {-0.138402f, -0.001765f, -0.000579f}, - {+0.113224f, +0.004585f, -0.001287f}, - {+0.215767f, +0.007978f, -0.001019f}, - {-0.020004f, +0.000374f, +0.000573f} - }, - { - {-0.127236f, +0.003443f, -0.000426f}, - {+0.086775f, -0.002732f, -0.000319f}, - {+0.206200f, -0.011017f, -0.006667f}, - {-0.006720f, -0.005737f, -0.003684f} - }, - { - {-0.114738f, -0.003852f, +0.000286f}, - {+0.059179f, +0.002958f, +0.001772f}, - {+0.184707f, +0.002148f, -0.008785f}, - {-0.006688f, +0.000728f, -0.006182f} - }, - { - {-0.100815f, +0.002358f, +0.000595f}, - {+0.029594f, -0.008594f, +0.002770f}, - {+0.151524f, +0.003310f, -0.003987f}, - {-0.019197f, +0.005615f, -0.002853f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 FASTCONV_HRIR_latency_s_fx = 666667; -#else -const float FASTCONV_HRIR_latency_s = 0.000666667f; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS] /* Q29 */= { { @@ -15051,863 +7962,7 @@ const Word32 leftHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAP { 13876502, -64969972, 4359929, }, }, }; -#else -const float leftHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]= -{ - { - {+1.164232f, -0.071388f, +0.046399f}, - {+0.625622f, +0.318887f, +0.014720f}, - {+1.000960f, +0.045336f, +0.068038f}, - {+1.137988f, -0.154415f, -0.061425f}, - {+0.303190f, +0.543160f, +0.149069f}, - {+1.253214f, -0.205377f, -0.065229f}, - {+0.085322f, +0.882648f, +0.205135f}, - {+1.312265f, -0.220630f, -0.090644f}, - {+0.058226f, +0.942911f, +0.171217f}, - {+1.034378f, +0.117953f, +0.052257f}, - {+0.680445f, +0.361766f, +0.049600f}, - {+1.147757f, -0.086335f, +0.012687f}, - {+0.250187f, +0.697472f, +0.213227f}, - {+1.088959f, -0.092061f, -0.000586f}, - {+0.501443f, +0.364037f, +0.074228f} - }, - { - {+1.146595f, -0.154651f, +0.043142f}, - {+0.286735f, -0.252034f, -0.153374f}, - {+0.948810f, -0.114394f, +0.051619f}, - {+1.263032f, +0.249467f, +0.062149f}, - {-0.060685f, -0.361794f, -0.117760f}, - {+1.350448f, +0.215668f, +0.073258f}, - {-0.105135f, -0.389796f, -0.271911f}, - {+1.374733f, +0.173637f, +0.049028f}, - {-0.094305f, -0.164320f, -0.266068f}, - {+1.040815f, -0.208066f, -0.083035f}, - {+0.438624f, -0.019990f, -0.059450f}, - {+1.166646f, -0.148967f, -0.011838f}, - {-0.102492f, -0.454586f, -0.136217f}, - {+1.097313f, -0.054163f, +0.016726f}, - {+0.098987f, -0.171388f, -0.043273f} - }, - { - {+1.143116f, +0.354198f, -0.162550f}, - {-0.088480f, -0.420403f, +0.001880f}, - {+0.931498f, +0.123662f, -0.033888f}, - {+1.318265f, +0.100233f, +0.102754f}, - {-0.299298f, -0.139613f, -0.122914f}, - {+1.356998f, +0.217141f, +0.061024f}, - {-0.046525f, -0.814319f, -0.099822f}, - {+1.353473f, +0.285762f, +0.004248f}, - {+0.011288f, -0.915723f, +0.029668f}, - {+1.153537f, -0.424294f, -0.013858f}, - {+0.127607f, -0.015631f, -0.000953f}, - {+1.196081f, +0.029242f, -0.092440f}, - {-0.278085f, -0.128122f, -0.198812f}, - {+1.086036f, +0.107882f, -0.049328f}, - {-0.325202f, +0.033240f, -0.015961f} - }, - { - {+1.325816f, +0.511650f, -0.152840f}, - {-0.459273f, -0.470824f, +0.048067f}, - {+1.060173f, +0.310816f, -0.017459f}, - {+1.191764f, -0.170770f, +0.020474f}, - {-0.224619f, +0.084318f, -0.062623f}, - {+1.231375f, -0.115063f, -0.048061f}, - {+0.084800f, +0.048581f, +0.210193f}, - {+1.284471f, +0.011386f, -0.085145f}, - {+0.074098f, -0.455054f, +0.206816f}, - {+1.276588f, -0.117807f, +0.087644f}, - {-0.221606f, -0.084179f, +0.030307f}, - {+1.280931f, +0.249488f, -0.020802f}, - {-0.094546f, +0.498021f, -0.017920f}, - {+1.108975f, +0.181116f, -0.024618f}, - {-0.500760f, -0.035203f, -0.013172f} - }, - { - {+1.605708f, -0.366586f, +0.142118f}, - {-0.676760f, -0.089781f, -0.072018f}, - {+1.268416f, -0.122990f, +0.116068f}, - {+0.963365f, +0.072984f, -0.025802f}, - {+0.078497f, -0.418906f, +0.044519f}, - {+1.077459f, -0.019951f, -0.049500f}, - {+0.031477f, +0.447773f, +0.053312f}, - {+1.259077f, -0.142552f, -0.013514f}, - {-0.059280f, +0.507158f, -0.168109f}, - {+1.292946f, +0.146018f, -0.029776f}, - {-0.512977f, +0.036303f, +0.035411f}, - {+1.302893f, +0.041776f, +0.054097f}, - {+0.194009f, -0.198069f, +0.165160f}, - {+1.107011f, +0.048657f, +0.025557f}, - {-0.311251f, -0.179016f, -0.007145f} - }, - { - {+1.664749f, -0.424953f, +0.117548f}, - {-0.518829f, +0.144843f, +0.012635f}, - {+1.341921f, -0.475334f, -0.025454f}, - {+0.745020f, +0.011176f, -0.013117f}, - {+0.290955f, -0.043105f, +0.145092f}, - {+0.953967f, +0.019869f, -0.011129f}, - {-0.059334f, -0.119714f, -0.140789f}, - {+1.242504f, +0.051036f, +0.063409f}, - {-0.027620f, +0.732031f, -0.075265f}, - {+1.345654f, +0.206823f, +0.000993f}, - {-0.664021f, -0.071212f, +0.022023f}, - {+1.166038f, -0.153803f, -0.001166f}, - {+0.215666f, -0.319906f, +0.114867f}, - {+0.999816f, -0.066205f, -0.006296f}, - {+0.083957f, +0.134151f, +0.028232f} - }, - { - {+1.581283f, +0.343441f, -0.147384f}, - {-0.137274f, +0.076831f, -0.038250f}, - {+1.367477f, -0.195495f, -0.142118f}, - {+0.611192f, -0.097324f, +0.048461f}, - {+0.155099f, +0.411591f, +0.002255f}, - {+0.891869f, -0.009049f, +0.006965f}, - {-0.032052f, -0.346312f, -0.054872f}, - {+1.206124f, +0.162210f, +0.026195f}, - {+0.069189f, +0.025911f, +0.196858f}, - {+1.428022f, +0.163648f, +0.009798f}, - {-0.622568f, -0.029470f, -0.001764f}, - {+0.954217f, +0.027854f, -0.027765f}, - {-0.029956f, +0.351502f, -0.072001f}, - {+0.821491f, +0.019645f, -0.005837f}, - {+0.377920f, -0.040829f, +0.033773f} - }, - { - {+1.677009f, +0.377370f, -0.142884f}, - {+0.340806f, +0.310825f, -0.047722f}, - {+1.442173f, +0.342472f, +0.058973f}, - {+0.535134f, -0.138655f, +0.042466f}, - {-0.109214f, -0.056024f, -0.105562f}, - {+0.897169f, +0.015446f, +0.016293f}, - {+0.046512f, +0.128065f, +0.107566f}, - {+1.199956f, -0.036702f, -0.050091f}, - {-0.017560f, -0.600552f, -0.051411f}, - {+1.542399f, +0.075318f, -0.055439f}, - {-0.383881f, +0.085336f, -0.002185f}, - {+0.767844f, -0.002300f, -0.002498f}, - {-0.213556f, +0.042618f, -0.139727f}, - {+0.614646f, -0.038818f, +0.011343f}, - {+0.389565f, -0.093296f, +0.018341f} - }, - { - {+1.950355f, -0.362582f, +0.081454f}, - {+0.682687f, -0.162615f, +0.076325f}, - {+1.383305f, +0.259100f, +0.098340f}, - {+0.507785f, +0.030154f, -0.021916f}, - {-0.213659f, -0.101401f, -0.062195f}, - {+0.951588f, +0.040882f, -0.000970f}, - {+0.031901f, +0.266437f, +0.053656f}, - {+1.302827f, -0.171084f, -0.011255f}, - {-0.046125f, -0.384263f, -0.129408f}, - {+1.712243f, -0.194390f, +0.019399f}, - {-0.027625f, -0.133154f, +0.018328f}, - {+0.668291f, +0.010139f, +0.008195f}, - {-0.118934f, -0.338445f, -0.019973f}, - {+0.438220f, +0.079868f, -0.003191f}, - {+0.144432f, +0.164330f, -0.025701f} - }, - { - {+2.093580f, -0.196850f, +0.103630f}, - {+0.610952f, -0.295887f, +0.035489f}, - {+1.183258f, -0.254467f, -0.069704f}, - {+0.575110f, +0.116089f, +0.003537f}, - {-0.101158f, +0.222864f, +0.024346f}, - {+1.057859f, +0.043401f, -0.017762f}, - {-0.035693f, -0.134351f, -0.082748f}, - {+1.471333f, +0.025140f, +0.035257f}, - {+0.038543f, +0.232670f, +0.109875f}, - {+1.786701f, -0.093608f, +0.042083f}, - {+0.315108f, +0.002642f, +0.011084f}, - {+0.675572f, -0.006144f, -0.003303f}, - {+0.101827f, +0.111911f, +0.089442f}, - {+0.361145f, +0.021912f, -0.014375f}, - {-0.156559f, -0.020362f, -0.037847f} - }, - { - {+1.976571f, +0.241275f, -0.043490f}, - {+0.215943f, +0.100902f, -0.038402f}, - {+1.025479f, -0.189152f, -0.060485f}, - {+0.699954f, -0.000496f, +0.029249f}, - {+0.084280f, -0.041736f, +0.082895f}, - {+1.214688f, -0.076791f, +0.003066f}, - {-0.033219f, -0.189116f, -0.059524f}, - {+1.625112f, +0.050451f, -0.006609f}, - {+0.015390f, +0.395024f, +0.041010f}, - {+1.716470f, +0.098967f, -0.019398f}, - {+0.546520f, -0.014474f, -0.021685f}, - {+0.764906f, -0.062888f, -0.000632f}, - {+0.176131f, +0.115006f, +0.065018f}, - {+0.401503f, -0.073214f, +0.013531f}, - {-0.315978f, -0.085685f, +0.017030f} - }, - { - {+1.738061f, +0.041153f, -0.060947f}, - {-0.226724f, -0.081469f, -0.015083f}, - {+0.922005f, +0.036805f, +0.043095f}, - {+0.827335f, -0.067324f, -0.023100f}, - {+0.140772f, -0.212427f, +0.006831f}, - {+1.366857f, -0.002014f, +0.004214f}, - {+0.026336f, +0.163123f, +0.060613f}, - {+1.749249f, +0.060972f, -0.022997f}, - {-0.036122f, +0.013268f, -0.102505f}, - {+1.587780f, -0.017325f, -0.034831f}, - {+0.628526f, +0.009623f, -0.025420f}, - {+0.880943f, +0.044219f, +0.021208f}, - {+0.047589f, -0.158181f, +0.000915f}, - {+0.499398f, -0.006432f, +0.020261f}, - {-0.284768f, -0.026108f, +0.032717f} - }, - { - {+1.505132f, +0.022539f, -0.007951f}, - {-0.502341f, +0.014784f, -0.004442f}, - {+0.788099f, +0.109664f, +0.026293f}, - {+0.945261f, -0.116770f, -0.027695f}, - {+0.070952f, +0.012587f, -0.060046f}, - {+1.465040f, -0.001749f, -0.014809f}, - {+0.034434f, +0.143653f, +0.064672f}, - {+1.815683f, -0.023428f, +0.002040f}, - {+0.003390f, -0.275112f, +0.011303f}, - {+1.470938f, -0.021798f, -0.012446f}, - {+0.538936f, -0.002058f, -0.007385f}, - {+0.968457f, +0.052353f, +0.005680f}, - {-0.126264f, +0.126663f, -0.057452f}, - {+0.596708f, +0.023788f, -0.009367f}, - {-0.103836f, +0.018725f, -0.021490f} - }, - { - {+1.323053f, -0.031245f, -0.010960f}, - {-0.492814f, +0.061978f, +0.004857f}, - {+0.629433f, -0.057790f, -0.011522f}, - {+0.990987f, +0.041590f, +0.024383f}, - {-0.020040f, +0.083340f, -0.010638f}, - {+1.480865f, +0.017125f, -0.010601f}, - {-0.019240f, -0.174901f, -0.044679f}, - {+1.775213f, -0.086261f, -0.017961f}, - {+0.025429f, -0.108477f, +0.070866f}, - {+1.389486f, +0.000140f, +0.005964f}, - {+0.286716f, -0.064952f, +0.010826f}, - {+1.029093f, -0.016099f, -0.029749f}, - {-0.147616f, +0.078463f, -0.074691f}, - {+0.669798f, +0.034059f, -0.017672f}, - {+0.148950f, +0.124951f, -0.030334f} - }, - { - {+1.182510f, -0.045886f, +0.007051f}, - {-0.263474f, -0.085276f, +0.011348f}, - {+0.473865f, +0.014568f, -0.008515f}, - {+0.889927f, +0.101012f, +0.018019f}, - {-0.083849f, -0.019482f, +0.039696f}, - {+1.386823f, +0.026725f, +0.000771f}, - {-0.034351f, -0.105731f, -0.065818f}, - {+1.624911f, +0.001774f, -0.032570f}, - {-0.010460f, +0.157988f, -0.030666f}, - {+1.316722f, +0.043440f, -0.002660f}, - {-0.070456f, +0.112056f, +0.005895f}, - {+1.088370f, -0.079959f, -0.015118f}, - {+0.010696f, -0.252890f, +0.005868f}, - {+0.688001f, -0.021562f, -0.000700f}, - {+0.321581f, -0.091411f, +0.016059f} - }, - { - {+1.003882f, -0.024290f, +0.045086f}, - {+0.028075f, +0.094891f, +0.025537f}, - {+0.348737f, -0.009666f, +0.003782f}, - {+0.684266f, -0.092642f, -0.016858f}, - {-0.094687f, -0.092807f, +0.015332f}, - {+1.189337f, -0.053543f, +0.003361f}, - {+0.010648f, +0.163291f, +0.024850f}, - {+1.372511f, +0.028160f, +0.019011f}, - {-0.017554f, +0.105607f, -0.047949f}, - {+1.209792f, -0.033195f, -0.018513f}, - {-0.409194f, -0.068489f, -0.000898f}, - {+1.114407f, +0.011788f, +0.013270f}, - {+0.152611f, +0.084562f, +0.098898f}, - {+0.622917f, -0.018666f, +0.009922f}, - {+0.278306f, -0.044425f, +0.040442f} - }, - { - {+0.740177f, +0.195497f, +0.009467f}, - {+0.234086f, +0.033069f, +0.017363f}, - {+0.278404f, +0.005428f, +0.007940f}, - {+0.479823f, +0.016574f, -0.020585f}, - {-0.038592f, +0.051080f, -0.052176f}, - {+0.942736f, +0.059732f, +0.004267f}, - {+0.037747f, +0.010959f, +0.078277f}, - {+1.014378f, +0.145862f, +0.036898f}, - {+0.013463f, -0.125599f, +0.038289f}, - {+1.037014f, -0.004829f, -0.003051f}, - {-0.599240f, +0.017158f, +0.001993f}, - {+1.057897f, +0.055995f, +0.002659f}, - {+0.097746f, +0.241425f, +0.056951f}, - {+0.484638f, +0.055982f, +0.007230f}, - {+0.034409f, +0.166502f, +0.011758f} - }, - { - {+0.480829f, -0.064216f, -0.043606f}, - {+0.302159f, -0.065615f, -0.027649f}, - {+0.267594f, +0.001584f, +0.006546f}, - {+0.366217f, +0.055646f, +0.013124f}, - {+0.073328f, +0.179121f, -0.030479f}, - {+0.728428f, -0.048337f, +0.001439f}, - {-0.006609f, -0.265125f, -0.016510f}, - {+0.640014f, -0.153518f, -0.009948f}, - {+0.013220f, -0.131492f, +0.036082f}, - {+0.775649f, -0.065990f, +0.016867f}, - {-0.570949f, +0.037845f, +0.003919f}, - {+0.921821f, -0.037053f, -0.008881f}, - {-0.078407f, -0.230573f, -0.077915f}, - {+0.319853f, -0.071600f, -0.011181f}, - {-0.233852f, -0.106785f, -0.034385f} - }, - { - {+0.346889f, -0.104821f, -0.004742f}, - {+0.278839f, -0.028952f, -0.035646f}, - {+0.308015f, -0.016382f, +0.006865f}, - {+0.387256f, -0.021873f, +0.040727f}, - {+0.139350f, -0.105650f, +0.062450f}, - {+0.637226f, -0.018242f, +0.007115f}, - {-0.042429f, -0.053630f, -0.094110f}, - {+0.417755f, -0.008672f, -0.023314f}, - {-0.018943f, +0.103114f, -0.053053f}, - {+0.448779f, +0.108427f, +0.006588f}, - {-0.345464f, -0.074501f, +0.004085f}, - {+0.735939f, +0.043054f, -0.006246f}, - {-0.138142f, -0.161327f, -0.088998f}, - {+0.195889f, -0.012365f, -0.013162f}, - {-0.323001f, -0.053426f, -0.037017f} - }, - { - {+0.335149f, +0.024150f, +0.042650f}, - {+0.196181f, +0.041302f, +0.002444f}, - {+0.386375f, +0.004899f, +0.003361f}, - {+0.564612f, -0.025480f, +0.015096f}, - {+0.057054f, -0.159605f, +0.062037f}, - {+0.730907f, +0.044800f, +0.018459f}, - {+0.011492f, +0.297922f, +0.033799f}, - {+0.441286f, +0.097411f, +0.011722f}, - {-0.004564f, +0.210619f, -0.011762f}, - {+0.139688f, -0.077873f, -0.010083f}, - {-0.027659f, +0.078990f, +0.003505f}, - {+0.536993f, -0.035240f, -0.004368f}, - {-0.020118f, +0.231273f, +0.031141f}, - {+0.144861f, +0.035632f, +0.011759f}, - {-0.175851f, +0.155370f, +0.009858f} - }, - { - {+0.386157f, +0.060262f, +0.016757f}, - {+0.052839f, +0.021145f, +0.032934f}, - {+0.484472f, -0.002920f, -0.010570f}, - {+0.918642f, -0.034827f, -0.037149f}, - {-0.104209f, +0.229183f, -0.047655f}, - {+1.015020f, -0.033699f, +0.002853f}, - {+0.037426f, +0.156073f, +0.082853f}, - {+0.683874f, -0.079502f, +0.034799f}, - {+0.020608f, +0.028827f, +0.057521f}, - {-0.071180f, +0.006964f, -0.008015f}, - {+0.249215f, -0.054366f, +0.004926f}, - {+0.367933f, -0.002046f, +0.010161f}, - {+0.098532f, +0.027366f, +0.074117f}, - {+0.147810f, +0.003457f, +0.021465f}, - {+0.074185f, -0.043989f, +0.032862f} - }, - { - {+0.475703f, -0.006148f, -0.023405f}, - {-0.130356f, -0.121062f, +0.014557f}, - {+0.576084f, +0.037334f, -0.013945f}, - {+1.404901f, +0.165414f, -0.048723f}, - {-0.152471f, +0.096982f, -0.087407f}, - {+1.440940f, +0.071259f, -0.031007f}, - {-0.014512f, -0.190422f, -0.045041f}, - {+1.050275f, +0.008260f, +0.006195f}, - {-0.005777f, -0.163997f, -0.016934f}, - {-0.163442f, +0.028862f, +0.011254f}, - {+0.386758f, -0.005894f, +0.001482f}, - {+0.257252f, -0.028247f, +0.020221f}, - {+0.085717f, -0.129404f, +0.017522f}, - {+0.193627f, -0.014561f, +0.008640f}, - {+0.242915f, -0.031396f, +0.002633f} - }, - { - {+0.585900f, -0.077367f, -0.015045f}, - {-0.286286f, +0.097252f, -0.041512f}, - {+0.619979f, -0.049713f, +0.009170f}, - {+1.849971f, -0.189063f, -0.000469f}, - {-0.024241f, -0.256635f, +0.018398f}, - {+1.888056f, -0.137439f, -0.034575f}, - {-0.026389f, -0.146816f, -0.054608f}, - {+1.430514f, -0.025065f, -0.047865f}, - {-0.015954f, -0.090459f, -0.044119f}, - {-0.184491f, +0.004971f, +0.018816f}, - {+0.367403f, +0.037464f, -0.007579f}, - {+0.235707f, +0.030441f, +0.004150f}, - {-0.017983f, +0.089824f, -0.035056f}, - {+0.295835f, -0.004981f, -0.008543f}, - {+0.243126f, +0.012530f, -0.011942f} - }, - { - {+0.665250f, +0.043970f, +0.015531f}, - {-0.322996f, +0.149054f, -0.019252f}, - {+0.580264f, -0.030849f, +0.024350f}, - {+2.005200f, -0.021439f, +0.029304f}, - {+0.113598f, -0.012581f, +0.077394f}, - {+2.158987f, +0.088276f, -0.003861f}, - {+0.010436f, +0.101090f, +0.035256f}, - {+1.711090f, +0.135561f, -0.041164f}, - {+0.012628f, +0.118154f, +0.035793f}, - {-0.193848f, -0.021279f, +0.007900f}, - {+0.249509f, -0.036318f, -0.011041f}, - {+0.339148f, +0.023808f, -0.014106f}, - {-0.086761f, +0.034113f, -0.037672f}, - {+0.464823f, +0.051589f, -0.014718f}, - {+0.093926f, -0.023588f, +0.006999f} - }, - { - {+0.660761f, +0.042611f, +0.015736f}, - {-0.232991f, -0.119769f, +0.069682f}, - {+0.490072f, +0.069493f, +0.007458f}, - {+1.741681f, +0.183508f, -0.002008f}, - {+0.111516f, +0.167908f, +0.006525f}, - {+2.068520f, +0.072175f, +0.012737f}, - {+0.017775f, +0.088998f, +0.033186f}, - {+1.743717f, -0.055334f, +0.020118f}, - {+0.008321f, +0.149997f, +0.022551f}, - {-0.215009f, +0.005025f, +0.002907f}, - {+0.113469f, +0.022908f, -0.008746f}, - {+0.555173f, -0.080542f, -0.013610f}, - {-0.050942f, -0.083131f, -0.004389f}, - {+0.671639f, -0.073125f, -0.004515f}, - {-0.109620f, +0.081521f, +0.008758f} - }, - { - {+0.580314f, -0.054424f, -0.004509f}, - {-0.081293f, -0.137373f, +0.044029f}, - {+0.463983f, -0.014407f, -0.011338f}, - {+1.169198f, -0.169394f, -0.027703f}, - {+0.010292f, -0.029514f, -0.042304f}, - {+1.586881f, -0.186952f, +0.000592f}, - {-0.003477f, -0.054254f, -0.016928f}, - {+1.413673f, -0.186454f, +0.025413f}, - {-0.014733f, -0.018568f, -0.041380f}, - {-0.240996f, -0.010303f, +0.004071f}, - {+0.012903f, -0.004127f, -0.003906f}, - {+0.797681f, +0.082346f, +0.001667f}, - {+0.035386f, +0.053069f, +0.022651f}, - {+0.837236f, +0.024942f, +0.000978f}, - {-0.233902f, -0.047392f, -0.015538f} - }, - { - {+0.487007f, +0.016249f, -0.011560f}, - {+0.131946f, +0.108933f, -0.083894f}, - {+0.605422f, -0.050044f, -0.018024f}, - {+0.528861f, +0.124876f, -0.022752f}, - {-0.076271f, -0.058690f, -0.007472f}, - {+0.878847f, +0.205138f, -0.018250f}, - {-0.013401f, -0.021368f, -0.024064f}, - {+0.787884f, +0.241841f, -0.026493f}, - {-0.001043f, -0.119442f, -0.002181f}, - {-0.248907f, +0.006659f, -0.000113f}, - {-0.047227f, -0.004224f, +0.002439f}, - {+0.944135f, -0.011491f, +0.008745f}, - {+0.073996f, +0.013124f, +0.028741f}, - {+0.883681f, +0.012426f, -0.004374f}, - {-0.190006f, -0.056489f, -0.021766f} - }, - { - {+0.447938f, +0.026156f, -0.000247f}, - {+0.405969f, +0.226903f, -0.097206f}, - {+0.921105f, +0.112177f, -0.013995f}, - {+0.037993f, -0.046160f, -0.007721f}, - {-0.090253f, -0.009755f, +0.013084f}, - {+0.202227f, -0.127508f, -0.025725f}, - {-0.002415f, +0.053658f, +0.001011f}, - {+0.093735f, -0.101919f, -0.033415f}, - {+0.013671f, -0.012260f, +0.038128f}, - {-0.215815f, +0.021644f, -0.000381f}, - {-0.097438f, -0.004101f, +0.007694f}, - {+0.915214f, -0.057119f, -0.002700f}, - {+0.026266f, -0.083884f, +0.006535f}, - {+0.783545f, -0.039342f, -0.005531f}, - {-0.014409f, +0.106024f, +0.002229f} - }, - { - {+0.502937f, -0.043296f, +0.016942f}, - {+0.562721f, -0.271269f, +0.047991f}, - {+1.294879f, -0.099867f, -0.004459f}, - {-0.208511f, -0.020811f, +0.014857f}, - {-0.031898f, +0.012336f, -0.012314f}, - {-0.243172f, +0.002723f, -0.005736f}, - {+0.012118f, -0.016031f, +0.023545f}, - {-0.466228f, +0.038982f, +0.006490f}, - {-0.005049f, +0.125222f, -0.014706f}, - {-0.140043f, -0.033646f, +0.007426f}, - {-0.166118f, +0.020933f, +0.009093f}, - {+0.720723f, +0.081983f, -0.019142f}, - {-0.048205f, +0.058271f, -0.028029f}, - {+0.563027f, +0.072436f, -0.008261f}, - {+0.155323f, -0.047908f, +0.024506f} - }, - { - {+0.665302f, +0.025328f, +0.018664f}, - {+0.346717f, -0.146678f, +0.128633f}, - {+1.538661f, +0.020131f, -0.007519f}, - {-0.254940f, +0.020497f, +0.029909f}, - {+0.057374f, +0.076254f, -0.009097f}, - {-0.419513f, +0.042371f, +0.027848f}, - {+0.004959f, -0.067560f, +0.005746f}, - {-0.808913f, -0.036603f, +0.026731f}, - {-0.010252f, +0.088264f, -0.028280f}, - {-0.037018f, +0.017759f, +0.010413f}, - {-0.247264f, -0.028052f, +0.006187f}, - {+0.433078f, -0.054258f, -0.021327f}, - {-0.060240f, +0.049926f, -0.029266f}, - {+0.287834f, -0.063180f, -0.013153f}, - {+0.195525f, -0.046783f, +0.017995f} - }, - { - {+0.939196f, -0.019336f, -0.005463f}, - {-0.212769f, +0.425049f, +0.027769f}, - {+1.506310f, +0.042304f, -0.013085f}, - {-0.199749f, +0.009650f, +0.022317f}, - {+0.097198f, -0.040503f, +0.027506f}, - {-0.419039f, -0.009501f, +0.039624f}, - {-0.010773f, +0.015875f, -0.022610f}, - {-0.938023f, +0.007493f, +0.025082f}, - {+0.009683f, -0.056906f, +0.027608f}, - {+0.082675f, -0.002912f, +0.000293f}, - {-0.294888f, +0.009081f, +0.003714f}, - {+0.126495f, +0.024788f, -0.002184f}, - {-0.000563f, -0.091941f, +0.008199f}, - {+0.025925f, +0.024934f, -0.004698f}, - {+0.095176f, +0.081798f, -0.006897f} - }, - { - {+1.307210f, +0.059238f, -0.036759f}, - {-0.701719f, -0.197323f, -0.097152f}, - {+1.158895f, -0.116341f, -0.011892f}, - {-0.111036f, -0.024935f, -0.003673f}, - {+0.038869f, -0.081096f, +0.026731f}, - {-0.346534f, -0.036837f, +0.017249f}, - {-0.005417f, +0.058202f, -0.006901f}, - {-0.904817f, +0.000980f, +0.015822f}, - {+0.003885f, -0.099089f, +0.010285f}, - {+0.218266f, +0.018411f, -0.013033f}, - {-0.250498f, +0.017459f, +0.003023f}, - {-0.162010f, -0.044649f, +0.016738f}, - {+0.053818f, +0.015747f, +0.035387f}, - {-0.189698f, -0.017096f, +0.012923f}, - {-0.051528f, -0.041975f, -0.022436f} - }, - { - {+1.684359f, -0.120864f, -0.039343f}, - {-0.694634f, -0.219873f, -0.083472f}, - {+0.561143f, +0.176993f, -0.020577f}, - {-0.012692f, -0.018982f, -0.021456f}, - {-0.062577f, +0.108567f, -0.021231f}, - {-0.247732f, +0.019366f, -0.017116f}, - {+0.008198f, -0.015667f, +0.017857f}, - {-0.771969f, -0.012422f, -0.001228f}, - {-0.009519f, -0.000576f, -0.026702f}, - {+0.359359f, -0.049355f, -0.011943f}, - {-0.085011f, -0.036208f, -0.003034f}, - {-0.415529f, +0.073749f, +0.012774f}, - {+0.038205f, +0.086506f, +0.013225f}, - {-0.355882f, +0.046916f, +0.014863f}, - {-0.135129f, -0.031402f, -0.011451f} - }, - { - {+1.900568f, +0.091345f, -0.005709f}, - {-0.182498f, +0.322121f, +0.010241f}, - {-0.155864f, -0.137867f, -0.022653f}, - {+0.068478f, +0.049489f, -0.012186f}, - {-0.096194f, +0.031052f, -0.043575f}, - {-0.135982f, +0.042247f, -0.027610f}, - {+0.005906f, -0.039669f, +0.008576f}, - {-0.604694f, +0.032060f, -0.015018f}, - {+0.000506f, +0.073299f, +0.001993f}, - {+0.466765f, +0.037005f, +0.000603f}, - {+0.170610f, +0.053310f, -0.014928f}, - {-0.607218f, -0.049464f, -0.002105f}, - {-0.020209f, -0.054297f, -0.025128f}, - {-0.466284f, -0.037251f, +0.001009f}, - {-0.116376f, +0.048662f, +0.012616f} - }, - { - {+1.770925f, +0.083983f, +0.013377f}, - {+0.429851f, -0.176382f, +0.062340f}, - {-0.869796f, +0.077488f, +0.009019f}, - {+0.071054f, -0.018359f, +0.008061f}, - {-0.023705f, -0.132726f, +0.001520f}, - {-0.064177f, -0.056856f, -0.008916f}, - {-0.005806f, +0.025219f, -0.013189f}, - {-0.490397f, -0.047115f, -0.010762f}, - {+0.007860f, +0.019424f, +0.021845f}, - {+0.489851f, +0.015745f, +0.003572f}, - {+0.419019f, -0.069347f, -0.017210f}, - {-0.713268f, -0.002485f, -0.003409f}, - {-0.045070f, -0.044848f, -0.021676f}, - {-0.509375f, -0.004583f, -0.004560f}, - {-0.035895f, -0.001305f, +0.014503f} - }, - { - {+1.234486f, -0.230526f, -0.013903f}, - {+0.693452f, -0.037094f, +0.062983f}, - {-1.509974f, -0.095909f, +0.045554f}, - {-0.063361f, -0.057443f, +0.014041f}, - {+0.065406f, +0.021175f, +0.038088f}, - {-0.130515f, -0.002472f, +0.015272f}, - {-0.006221f, +0.032188f, -0.009996f}, - {-0.526438f, +0.016690f, +0.014095f}, - {-0.003344f, -0.063567f, -0.009796f}, - {+0.408227f, -0.051840f, -0.007626f}, - {+0.526046f, +0.043848f, +0.000937f}, - {-0.746530f, +0.019915f, +0.007159f}, - {-0.015404f, +0.050106f, +0.006338f}, - {-0.498282f, +0.022806f, +0.001661f}, - {+0.046692f, -0.012083f, -0.005406f} - }, - { - {+0.413311f, +0.217489f, -0.041553f}, - {+0.452282f, +0.255112f, +0.014429f}, - {-2.012329f, +0.132335f, +0.043582f}, - {-0.332659f, +0.110420f, -0.002506f}, - {+0.074513f, +0.072299f, +0.015550f}, - {-0.402227f, +0.102426f, +0.020003f}, - {+0.003936f, -0.025615f, +0.009662f}, - {-0.764317f, +0.087727f, +0.028390f}, - {-0.005906f, -0.045668f, -0.016305f}, - {+0.244099f, +0.046208f, -0.016359f}, - {+0.392194f, +0.052051f, +0.019617f}, - {-0.755240f, -0.000320f, +0.012387f}, - {+0.024888f, -0.005926f, +0.015739f}, - {-0.475719f, -0.010639f, +0.007195f}, - {+0.094368f, -0.019071f, -0.011155f} - }, - { - {-0.488601f, -0.132632f, -0.024105f}, - {-0.057870f, -0.243239f, -0.062681f}, - {-2.274488f, -0.075449f, +0.013122f}, - {-0.656336f, -0.066528f, -0.012634f}, - {+0.011058f, -0.050520f, -0.013955f}, - {-0.835078f, -0.150132f, +0.002332f}, - {+0.005934f, -0.022059f, +0.010016f}, - {-1.137939f, -0.147396f, +0.009474f}, - {+0.005755f, +0.039696f, +0.016335f}, - {+0.033530f, -0.028665f, -0.010546f}, - {+0.040220f, -0.141448f, +0.012427f}, - {-0.787271f, -0.022176f, +0.007828f}, - {+0.032441f, -0.020084f, +0.008702f}, - {-0.488631f, -0.013600f, +0.006335f}, - {+0.087182f, +0.017541f, +0.004303f} - }, - { - {-1.317702f, +0.095500f, +0.020761f}, - {-0.422081f, -0.034137f, -0.071137f}, - {-2.203521f, -0.058245f, -0.003414f}, - {-0.931858f, +0.015280f, +0.003861f}, - {-0.052621f, +0.004576f, -0.018473f}, - {-1.272381f, +0.091261f, -0.008863f}, - {-0.002030f, +0.024082f, -0.005542f}, - {-1.464630f, +0.073632f, -0.010550f}, - {+0.002712f, +0.062669f, +0.007167f}, - {-0.207114f, +0.038969f, +0.000934f}, - {-0.358809f, +0.117636f, -0.007999f}, - {-0.860245f, +0.028784f, +0.001523f}, - {+0.004125f, +0.030753f, -0.001828f}, - {-0.559354f, +0.029835f, +0.002076f}, - {+0.024576f, +0.027986f, +0.012469f} - }, - { - {-2.008348f, -0.127817f, +0.044194f}, - {-0.418471f, +0.201485f, +0.007778f}, - {-1.812974f, +0.155663f, +0.007154f}, - {-1.102120f, -0.021886f, +0.016993f}, - {-0.057302f, +0.036339f, -0.006424f}, - {-1.547365f, -0.012691f, +0.000618f}, - {-0.005724f, +0.008422f, -0.010341f}, - {-1.565942f, +0.034074f, -0.005038f}, - {-0.006455f, -0.004146f, -0.018260f}, - {-0.486122f, -0.068751f, +0.002643f}, - {-0.579626f, -0.009666f, -0.011630f}, - {-0.959883f, -0.022711f, -0.000128f}, - {-0.026165f, -0.017444f, -0.012012f}, - {-0.674369f, -0.030241f, +0.000001f}, - {-0.056604f, -0.047916f, +0.000561f} - }, - { - {-2.538435f, +0.144706f, +0.024837f}, - {-0.159097f, -0.096628f, +0.059657f}, - {-1.250993f, -0.158194f, +0.023835f}, - {-1.162308f, +0.024647f, +0.006024f}, - {-0.006764f, -0.032281f, +0.006504f}, - {-1.594186f, -0.024116f, +0.007975f}, - {+0.000404f, -0.028253f, +0.001927f}, - {-1.392818f, -0.090743f, +0.008086f}, - {+0.000657f, -0.056720f, +0.002178f}, - {-0.817812f, +0.078885f, -0.002734f}, - {-0.494314f, -0.073869f, -0.002863f}, - {-1.057861f, +0.010753f, +0.003473f}, - {-0.023969f, -0.022152f, -0.011768f}, - {-0.796320f, +0.019685f, +0.002381f}, - {-0.095452f, +0.011842f, -0.013010f} - }, - { - {-2.880650f, -0.045850f, +0.004655f}, - {+0.106795f, -0.039907f, +0.027045f}, - {-0.721393f, +0.083054f, +0.023238f}, - {-1.144586f, +0.016922f, -0.005027f}, - {+0.042055f, +0.002949f, +0.007039f}, - {-1.472334f, +0.053024f, +0.006261f}, - {+0.005806f, +0.000220f, +0.011669f}, - {-1.046507f, +0.096909f, +0.011310f}, - {+0.005526f, -0.021552f, +0.015425f}, - {-1.200656f, -0.053185f, +0.005988f}, - {-0.155057f, +0.102897f, -0.003142f}, - {-1.124901f, +0.007015f, +0.012676f}, - {+0.006479f, +0.042956f, +0.004210f}, - {-0.881942f, -0.000382f, +0.009400f}, - {-0.059027f, +0.036093f, -0.011452f} - }, - { - {-2.993706f, -0.110593f, +0.045578f}, - {+0.224391f, +0.041990f, -0.020747f}, - {-0.361837f, -0.012427f, +0.003973f}, - {-1.101737f, -0.064487f, +0.013918f}, - {+0.045047f, -0.001977f, +0.008463f}, - {-1.308903f, -0.082749f, +0.021321f}, - {+0.000463f, +0.034652f, -0.000132f}, - {-0.703438f, -0.078332f, +0.012588f}, - {-0.003389f, +0.043762f, -0.009812f}, - {-1.588540f, +0.021143f, +0.042305f}, - {+0.239986f, -0.105459f, -0.004102f}, - {-1.125952f, -0.020862f, +0.025801f}, - {+0.026945f, -0.008249f, +0.018680f}, - {-0.890391f, -0.016459f, +0.018642f}, - {+0.022025f, -0.049645f, +0.002105f} - }, - { - {-2.824141f, +0.108294f, +0.112373f}, - {+0.184642f, +0.006802f, -0.019893f}, - {-0.177062f, -0.000542f, -0.012326f}, - {-1.063372f, +0.044524f, +0.052246f}, - {+0.005984f, -0.027278f, +0.011800f}, - {-1.193252f, +0.058807f, +0.059389f}, - {-0.005976f, -0.002554f, -0.013353f}, - {-0.495849f, +0.044280f, +0.026054f}, - {-0.003278f, +0.045530f, -0.008896f}, - {-1.855139f, -0.040262f, +0.076546f}, - {+0.460259f, +0.060818f, +0.014226f}, - {-1.010339f, +0.013540f, +0.027012f}, - {+0.012571f, -0.046709f, +0.009176f}, - {-0.784673f, +0.018290f, +0.018712f}, - {+0.077774f, +0.022052f, +0.016078f} - }, - { - {-2.286989f, +0.059395f, +0.067545f}, - {+0.059196f, +0.003929f, +0.008106f}, - {-0.077852f, -0.011911f, -0.015109f}, - {-0.981039f, +0.057579f, +0.049746f}, - {-0.039545f, +0.079788f, -0.017441f}, - {-1.084454f, +0.063736f, +0.061257f}, - {-0.000552f, -0.040433f, -0.000008f}, - {-0.422723f, +0.031129f, +0.033909f}, - {+0.005181f, -0.015769f, +0.014975f}, - {-1.799579f, +0.095052f, +0.039004f}, - {+0.383208f, +0.054815f, +0.035686f}, - {-0.724847f, -0.012085f, -0.002971f}, - {-0.017405f, +0.047597f, -0.018931f}, - {-0.541913f, -0.020736f, -0.002764f}, - {+0.062036f, +0.032573f, +0.017405f} - }, - { - {-1.308363f, -0.023329f, -0.117920f}, - {-0.064424f, -0.057972f, +0.008713f}, - {+0.024978f, +0.018940f, -0.017833f}, - {-0.737327f, -0.102713f, -0.037075f}, - {-0.041409f, +0.034359f, -0.040056f}, - {-0.825854f, -0.147637f, -0.040942f}, - {+0.006532f, +0.001549f, +0.015583f}, - {-0.359121f, -0.115224f, -0.014199f}, - {-0.000538f, -0.057178f, -0.001505f}, - {-1.260099f, -0.008685f, -0.083395f}, - {+0.084870f, -0.184426f, +0.013420f}, - {-0.269401f, +0.076797f, -0.047683f}, - {-0.022016f, +0.040907f, -0.022277f}, - {-0.184013f, +0.067855f, -0.031593f}, - {-0.006094f, -0.075725f, -0.005918f} - }, - { - {-0.005286f, -0.490452f, -0.194448f}, - {-0.117167f, +0.041377f, -0.021705f}, - {+0.155198f, -0.050711f, -0.018485f}, - {-0.261721f, -0.126923f, -0.117957f}, - {+0.015691f, -0.177032f, +0.028815f}, - {-0.297654f, -0.116815f, -0.152479f}, - {-0.001443f, +0.059448f, -0.006308f}, - {-0.164335f, +0.005438f, -0.094020f}, - {-0.004210f, -0.031336f, -0.011520f}, - {-0.306030f, -0.376503f, -0.134389f}, - {-0.203847f, +0.164839f, -0.058303f}, - {+0.241259f, -0.209968f, -0.039860f}, - {+0.006748f, -0.086010f, +0.020030f}, - {+0.191475f, -0.147918f, -0.022810f}, - {-0.057865f, +0.023108f, -0.033416f} - }, - { - {+1.157381f, +0.858247f, +0.080234f}, - {-0.073701f, +0.086750f, -0.017560f}, - {+0.264439f, +0.078190f, +0.005441f}, - {+0.322579f, +0.471662f, -0.015999f}, - {+0.042456f, -0.106574f, +0.053490f}, - {+0.387873f, +0.592479f, -0.033125f}, - {-0.005002f, +0.040697f, -0.013144f}, - {+0.175212f, +0.327771f, -0.050066f}, - {+0.003996f, +0.027493f, +0.012375f}, - {+0.660959f, +0.665150f, +0.060775f}, - {-0.266658f, +0.119865f, -0.073006f}, - {+0.590790f, +0.209203f, +0.049770f}, - {+0.019457f, -0.064679f, +0.026033f}, - {+0.430095f, +0.124670f, +0.034507f}, - {-0.039846f, +0.104179f, -0.009259f} - }, - { - {+1.530494f, +0.036774f, +0.350316f}, - {+0.015367f, -0.099705f, +0.036338f}, - {+0.277896f, -0.003918f, +0.035655f}, - {+0.682415f, -0.226467f, +0.187620f}, - {-0.003804f, +0.159634f, -0.044149f}, - {+0.834371f, -0.332024f, +0.240896f}, - {+0.004102f, -0.024392f, +0.012576f}, - {+0.464117f, -0.301330f, +0.133821f}, - {-0.000994f, +0.060943f, -0.002091f}, - {+1.074692f, -0.033490f, +0.268560f}, - {-0.094158f, -0.316746f, +0.050929f}, - {+0.591353f, +0.126955f, +0.093164f}, - {-0.002143f, +0.070225f, -0.023541f}, - {+0.415721f, +0.099070f, +0.055525f}, - {+0.014835f, -0.051686f, +0.039038f} - }, - { - {+0.871819f, -1.450842f, -0.069675f}, - {+0.047807f, -0.115000f, +0.024628f}, - {+0.169285f, -0.151101f, +0.004566f}, - {+0.527658f, -0.674417f, +0.060727f}, - {-0.014797f, +0.200909f, -0.018973f}, - {+0.652333f, -0.864218f, +0.089751f}, - {+0.000099f, -0.058315f, -0.002464f}, - {+0.421733f, -0.443065f, +0.098482f}, - {-0.001060f, +0.060127f, -0.001254f}, - {+0.675379f, -1.072888f, -0.031008f}, - {+0.075732f, -0.083156f, +0.106738f}, - {+0.270175f, -0.451499f, -0.058713f}, - {-0.006396f, +0.098834f, -0.007631f}, - {+0.187943f, -0.284727f, -0.042036f}, - {+0.025847f, -0.121016f, +0.008121f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS] /* Q29 */= { { @@ -16761,863 +8816,7 @@ const Word32 leftHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAP { -513249, -18034568, -19814832, }, }, }; -#else -const float leftHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]= -{ - { - {+0.009746f, +0.032135f, -0.001005f}, - {-0.252426f, +0.362976f, -0.101272f}, - {-0.041389f, +0.219559f, -0.075244f}, - {+0.021832f, -0.202850f, +0.068670f}, - {-0.199783f, +0.476644f, -0.136155f}, - {+0.021343f, -0.250501f, +0.092969f}, - {-0.094399f, +0.626886f, -0.231894f}, - {+0.016573f, -0.239649f, +0.093367f}, - {-0.080197f, +0.572932f, -0.224147f}, - {+0.019084f, +0.136843f, -0.058073f}, - {-0.223408f, +0.321501f, -0.094987f}, - {-0.001692f, -0.041298f, +0.024983f}, - {-0.193077f, +0.654617f, -0.206180f}, - {-0.024623f, -0.055420f, +0.031858f}, - {-0.259689f, +0.369748f, -0.091616f} - }, - { - {+0.057589f, -0.094837f, -0.050323f}, - {-0.568159f, +0.333352f, -0.050823f}, - {-0.058363f, +0.033201f, -0.148437f}, - {-0.050666f, -0.220071f, +0.062671f}, - {-0.336362f, +0.338097f, -0.146507f}, - {-0.047671f, -0.288102f, +0.082913f}, - {-0.060818f, +0.867063f, -0.135030f}, - {-0.040486f, -0.341719f, +0.058177f}, - {-0.016662f, +1.031577f, -0.040322f}, - {+0.086011f, +0.193655f, -0.051669f}, - {-0.504799f, +0.424764f, +0.012327f}, - {-0.040577f, -0.173098f, -0.025333f}, - {-0.288338f, +0.471356f, -0.244582f}, - {-0.107401f, -0.185766f, -0.009351f}, - {-0.537558f, +0.205535f, -0.090137f} - }, - { - {+0.185461f, -0.259517f, -0.028611f}, - {-0.603783f, +0.016898f, +0.088263f}, - {+0.085783f, -0.585360f, +0.077994f}, - {-0.275727f, +0.151657f, -0.034942f}, - {-0.098432f, -0.240320f, +0.014376f}, - {-0.224813f, +0.096682f, -0.029791f}, - {+0.091867f, -0.134897f, +0.226004f}, - {-0.160867f, +0.120802f, -0.107958f}, - {+0.091102f, +0.252623f, +0.260884f}, - {+0.148482f, -0.127157f, +0.066761f}, - {-0.648021f, +0.366402f, +0.053859f}, - {-0.086806f, -0.182923f, -0.027078f}, - {+0.006657f, -0.551679f, +0.076549f}, - {-0.187386f, -0.124531f, -0.027416f}, - {-0.394359f, -0.137418f, +0.015442f} - }, - { - {+0.295099f, +0.204033f, +0.112117f}, - {-0.445141f, -0.203431f, -0.037600f}, - {+0.185293f, -0.198122f, +0.212327f}, - {-0.499831f, -0.001755f, -0.037616f}, - {+0.201802f, +0.127793f, +0.061482f}, - {-0.355382f, +0.059109f, -0.008126f}, - {+0.032573f, -0.572286f, +0.052378f}, - {-0.197342f, +0.235689f, -0.052018f}, - {-0.044020f, -0.726248f, -0.126557f}, - {+0.088356f, -0.356045f, -0.015711f}, - {-0.637301f, +0.225391f, -0.013606f}, - {-0.172744f, -0.022208f, +0.050545f}, - {+0.255444f, -0.000553f, +0.210836f}, - {-0.269532f, +0.005153f, +0.038296f}, - {-0.000691f, +0.123680f, +0.022293f} - }, - { - {+0.201556f, +0.345365f, +0.086457f}, - {-0.034797f, -0.385321f, -0.036494f}, - {+0.060960f, +0.460193f, -0.040799f}, - {-0.614672f, -0.046146f, -0.003786f}, - {+0.291890f, -0.017826f, +0.107892f}, - {-0.394941f, -0.025263f, +0.024793f}, - {-0.069383f, +0.071169f, -0.167274f}, - {-0.193963f, -0.007123f, +0.041127f}, - {-0.053934f, -0.644582f, -0.152850f}, - {+0.018473f, -0.189563f, -0.064795f}, - {-0.422552f, +0.101268f, +0.008593f}, - {-0.373705f, +0.214293f, -0.005754f}, - {+0.164459f, +0.445370f, +0.061512f}, - {-0.430525f, +0.157644f, +0.002400f}, - {+0.371780f, -0.112349f, +0.034345f} - }, - { - {-0.033928f, -0.466322f, -0.173216f}, - {+0.416182f, -0.095722f, -0.007744f}, - {-0.106258f, +0.101293f, -0.149492f}, - {-0.586638f, +0.109680f, +0.043164f}, - {+0.055241f, -0.502163f, -0.010316f}, - {-0.347625f, +0.011068f, +0.020946f}, - {-0.029521f, +0.389459f, -0.043642f}, - {-0.208450f, -0.113945f, +0.001564f}, - {+0.069354f, +0.253582f, +0.197218f}, - {+0.011284f, -0.023345f, +0.010578f}, - {-0.100593f, +0.188326f, -0.015623f}, - {-0.565508f, +0.009708f, -0.043984f}, - {-0.116804f, -0.258300f, -0.124299f}, - {-0.599852f, +0.019181f, -0.018817f}, - {+0.455115f, -0.088408f, +0.031182f} - }, - { - {-0.101926f, -0.468060f, -0.163914f}, - {+0.654728f, -0.125950f, -0.057210f}, - {-0.210669f, -0.374096f, +0.059232f}, - {-0.486236f, +0.078621f, +0.035746f}, - {-0.221043f, +0.001447f, -0.140044f}, - {-0.251634f, +0.002394f, +0.006412f}, - {+0.053275f, -0.117460f, +0.128891f}, - {-0.195937f, +0.017044f, -0.045101f}, - {+0.004540f, +0.716656f, +0.012490f}, - {-0.023876f, +0.086943f, -0.041043f}, - {+0.269818f, -0.023344f, +0.001404f}, - {-0.632528f, -0.064904f, +0.001583f}, - {-0.229349f, -0.155556f, -0.131557f}, - {-0.701220f, +0.002936f, +0.011380f}, - {+0.218817f, +0.137571f, -0.000827f} - }, - { - {-0.019803f, +0.350390f, +0.128080f}, - {+0.607297f, +0.091323f, +0.041776f}, - {-0.391531f, -0.296612f, +0.114777f}, - {-0.374457f, -0.035043f, -0.027502f}, - {-0.213069f, +0.267362f, -0.038309f}, - {-0.149953f, +0.004022f, -0.006847f}, - {+0.031530f, -0.308567f, +0.054617f}, - {-0.130768f, +0.112539f, -0.020612f}, - {-0.060647f, +0.237990f, -0.169946f}, - {-0.070530f, +0.176350f, -0.003859f}, - {+0.554477f, +0.122937f, +0.003398f}, - {-0.576269f, +0.024040f, +0.021559f}, - {-0.052411f, +0.382981f, +0.023069f}, - {-0.712362f, -0.021407f, +0.002869f}, - {-0.136160f, -0.144065f, -0.033829f} - }, - { - {-0.144775f, +0.366539f, +0.125312f}, - {+0.202885f, +0.354603f, +0.019837f}, - {-0.656706f, +0.285160f, -0.069621f}, - {-0.236700f, -0.120155f, -0.015090f}, - {-0.009022f, -0.142351f, +0.058751f}, - {-0.065125f, -0.004127f, -0.017607f}, - {-0.041823f, +0.131862f, -0.096368f}, - {-0.062407f, -0.054740f, +0.027981f}, - {+0.031817f, -0.431640f, +0.092903f}, - {-0.213850f, +0.126299f, +0.042829f}, - {+0.663648f, +0.083368f, +0.001657f}, - {-0.446160f, +0.001760f, +0.001401f}, - {+0.168107f, -0.041019f, +0.123804f}, - {-0.618696f, -0.035619f, -0.011711f}, - {-0.359231f, -0.037169f, -0.034599f} - }, - { - {-0.517408f, -0.311914f, -0.066345f}, - {-0.315897f, -0.116498f, -0.057578f}, - {-0.808547f, +0.208921f, -0.065451f}, - {-0.108486f, +0.036464f, +0.025206f}, - {+0.164991f, +0.012492f, +0.077849f}, - {-0.006924f, +0.066595f, -0.001710f}, - {-0.032037f, +0.236625f, -0.053914f}, - {-0.081416f, -0.127101f, -0.000295f}, - {+0.030739f, -0.432245f, +0.086307f}, - {-0.483248f, -0.169301f, -0.023816f}, - {+0.563338f, -0.042869f, -0.028584f}, - {-0.307294f, +0.056650f, -0.003561f}, - {+0.161044f, -0.238438f, +0.047974f}, - {-0.457444f, +0.096629f, +0.009126f}, - {-0.321523f, +0.137994f, +0.021609f} - }, - { - {-0.892316f, -0.064427f, -0.076962f}, - {-0.605373f, -0.061921f, -0.015945f}, - {-0.844181f, -0.108187f, +0.060583f}, - {-0.056134f, +0.102552f, -0.013769f}, - {+0.147378f, +0.251909f, -0.002167f}, - {-0.012891f, +0.033628f, +0.010795f}, - {+0.030720f, -0.133909f, +0.071835f}, - {-0.195165f, -0.000390f, -0.029825f}, - {-0.039999f, +0.087749f, -0.113515f}, - {-0.741169f, -0.000583f, -0.039531f}, - {+0.318943f, +0.044776f, -0.017514f}, - {-0.221333f, -0.019419f, +0.013435f}, - {-0.025961f, +0.151539f, -0.045602f}, - {-0.317124f, +0.007329f, +0.019107f}, - {-0.103050f, -0.017712f, +0.036895f} - }, - { - {-1.120903f, +0.080144f, +0.018175f}, - {-0.557984f, +0.065875f, +0.016445f}, - {-0.884231f, -0.135269f, +0.046808f}, - {-0.077929f, +0.058728f, -0.030673f}, - {+0.003216f, -0.028481f, -0.075145f}, - {-0.115087f, -0.059276f, -0.010281f}, - {+0.033662f, -0.151371f, +0.062117f}, - {-0.374813f, +0.000125f, +0.004524f}, - {-0.004131f, +0.344596f, -0.009515f}, - {-0.912750f, +0.037851f, +0.003038f}, - {-0.004833f, -0.037361f, +0.004495f}, - {-0.220544f, -0.058016f, +0.001506f}, - {-0.163112f, -0.012573f, -0.067595f}, - {-0.259778f, -0.046839f, -0.011680f}, - {+0.140668f, -0.036371f, -0.019325f} - }, - { - {-1.221626f, +0.047632f, +0.030008f}, - {-0.246497f, -0.109675f, +0.016140f}, - {-0.933392f, +0.056681f, -0.017499f}, - {-0.171095f, -0.041605f, +0.026621f}, - {-0.091651f, -0.139042f, -0.010254f}, - {-0.290514f, +0.010188f, -0.006824f}, - {-0.022645f, +0.182086f, -0.051792f}, - {-0.627425f, +0.108951f, +0.002544f}, - {+0.030810f, +0.083175f, +0.086532f}, - {-1.020831f, +0.019057f, +0.020782f}, - {-0.328857f, +0.063032f, +0.021845f}, - {-0.280032f, +0.046473f, -0.028272f}, - {-0.108081f, -0.130444f, -0.042983f}, - {-0.277472f, -0.015706f, -0.019343f}, - {+0.300294f, -0.091279f, -0.028877f} - }, - { - {-1.261601f, +0.026191f, +0.017613f}, - {+0.131072f, +0.074700f, +0.013352f}, - {-0.941829f, +0.046886f, -0.012836f}, - {-0.353481f, -0.137929f, +0.022451f}, - {-0.099901f, +0.012862f, +0.045621f}, - {-0.510801f, -0.045980f, +0.009742f}, - {-0.034480f, +0.136115f, -0.065105f}, - {-0.917422f, -0.048406f, -0.014328f}, - {-0.008255f, -0.204740f, -0.025135f}, - {-1.116831f, -0.043151f, +0.008325f}, - {-0.570501f, -0.078591f, +0.011175f}, - {-0.356994f, +0.057193f, -0.012919f}, - {+0.072193f, +0.210025f, +0.034944f}, - {-0.354704f, +0.011735f, +0.004829f}, - {+0.288756f, +0.034341f, +0.021124f} - }, - { - {-1.310698f, +0.011707f, +0.036488f}, - {+0.375845f, -0.029667f, +0.011368f}, - {-0.895246f, -0.026384f, +0.007846f}, - {-0.539669f, +0.067904f, -0.021122f}, - {-0.049179f, +0.069581f, +0.012119f}, - {-0.731214f, +0.055761f, +0.008363f}, - {+0.015114f, -0.158721f, +0.035543f}, - {-1.186932f, -0.029288f, +0.024750f}, - {-0.020681f, -0.110429f, -0.057197f}, - {-1.242362f, +0.046396f, -0.006496f}, - {-0.638496f, -0.003542f, -0.003329f}, - {-0.460859f, +0.005487f, +0.022316f}, - {+0.162585f, +0.000949f, +0.094194f}, - {-0.480357f, +0.043083f, +0.013686f}, - {+0.084492f, +0.100943f, +0.035245f} - }, - { - {-1.388116f, -0.121591f, +0.007121f}, - {+0.406719f, -0.063903f, +0.000895f}, - {-0.797164f, +0.024786f, +0.007914f}, - {-0.611124f, +0.038377f, -0.017126f}, - {+0.031219f, -0.031898f, -0.043192f}, - {-0.880465f, -0.025975f, +0.004620f}, - {+0.035199f, -0.054815f, +0.069678f}, - {-1.404186f, -0.094670f, +0.041334f}, - {+0.011721f, +0.131907f, +0.033689f}, - {-1.400823f, +0.006498f, +0.005128f}, - {-0.488232f, +0.072899f, +0.000864f}, - {-0.620764f, -0.091278f, +0.009966f}, - {+0.048912f, -0.264371f, +0.026588f}, - {-0.612140f, -0.044609f, +0.004905f}, - {-0.190119f, -0.153548f, -0.003990f} - }, - { - {-1.405102f, +0.019830f, -0.041741f}, - {+0.269059f, +0.096072f, -0.030661f}, - {-0.666786f, -0.023527f, +0.003952f}, - {-0.530962f, -0.087680f, +0.015089f}, - {+0.103468f, -0.138650f, -0.020612f}, - {-0.902420f, -0.004413f, +0.001425f}, - {-0.007181f, +0.202330f, -0.016542f}, - {-1.502401f, +0.093998f, -0.011299f}, - {+0.015712f, +0.105410f, +0.042774f}, - {-1.569118f, +0.036845f, +0.024497f}, - {-0.172241f, -0.083614f, +0.002581f}, - {-0.803267f, +0.042103f, -0.008593f}, - {-0.122389f, +0.164027f, -0.092715f}, - {-0.693482f, +0.032583f, -0.008445f}, - {-0.336065f, +0.028532f, -0.040891f} - }, - { - {-1.274381f, +0.177341f, -0.005087f}, - {+0.082021f, +0.015295f, -0.029273f}, - {-0.535412f, +0.022470f, +0.000520f}, - {-0.334115f, +0.039818f, +0.029288f}, - {+0.102058f, +0.071973f, +0.060127f}, - {-0.777172f, +0.053097f, +0.001406f}, - {-0.041062f, +0.003639f, -0.089029f}, - {-1.386620f, +0.100585f, -0.027634f}, - {-0.016470f, -0.131625f, -0.046620f}, - {-1.702053f, -0.064478f, +0.010836f}, - {+0.188348f, +0.085604f, +0.000778f}, - {-0.951614f, -0.008596f, -0.000227f}, - {-0.128587f, +0.202289f, -0.078786f}, - {-0.684947f, +0.039724f, -0.008766f}, - {-0.238200f, +0.121028f, -0.027134f} - }, - { - {-1.051815f, -0.065291f, +0.046901f}, - {-0.078962f, -0.040667f, +0.016621f}, - {-0.425406f, -0.012300f, -0.003324f}, - {-0.085264f, +0.021495f, -0.004172f}, - {-0.013857f, +0.185133f, +0.044846f}, - {-0.536045f, -0.067146f, +0.005754f}, - {+0.008706f, -0.314572f, +0.024262f}, - {-1.076846f, -0.153133f, +0.012899f}, - {-0.009257f, -0.187894f, -0.025034f}, - {-1.728620f, -0.002351f, -0.006254f}, - {+0.453290f, -0.035443f, -0.000604f}, - {-1.033293f, +0.006471f, +0.006369f}, - {+0.028237f, -0.256334f, +0.056283f}, - {-0.592133f, -0.068085f, +0.014448f}, - {+0.028364f, -0.161171f, +0.022674f} - }, - { - {-0.850866f, -0.060081f, +0.012367f}, - {-0.209567f, -0.044476f, +0.035293f}, - {-0.352597f, +0.002936f, -0.009918f}, - {+0.156716f, +0.020900f, -0.046467f}, - {-0.139788f, -0.163686f, -0.057909f}, - {-0.265746f, +0.022469f, -0.007668f}, - {+0.041202f, -0.126721f, +0.092016f}, - {-0.719398f, +0.058103f, +0.026893f}, - {+0.020433f, +0.027610f, +0.057030f}, - {-1.617744f, +0.065441f, -0.000589f}, - {+0.529109f, -0.009487f, -0.002510f}, - {-1.030739f, +0.027576f, +0.012449f}, - {+0.126800f, -0.104142f, +0.086642f}, - {-0.469348f, +0.001329f, +0.019123f}, - {+0.254306f, +0.004748f, +0.039010f} - }, - { - {-0.704994f, -0.001857f, -0.032356f}, - {-0.291614f, +0.072045f, +0.008669f}, - {-0.330377f, -0.015398f, -0.008902f}, - {+0.305490f, -0.088217f, -0.038597f}, - {-0.118408f, -0.127022f, -0.077956f}, - {-0.076791f, -0.013279f, -0.031489f}, - {-0.013990f, +0.238166f, -0.042427f}, - {-0.466729f, +0.029245f, -0.006311f}, - {-0.000655f, +0.182834f, -0.002752f}, - {-1.412340f, -0.081834f, +0.017017f}, - {+0.413278f, +0.058930f, -0.004232f}, - {-0.948672f, -0.013302f, +0.015703f}, - {+0.059815f, +0.180823f, -0.005402f}, - {-0.353125f, +0.011691f, -0.002686f}, - {+0.280636f, +0.098387f, -0.001029f} - }, - { - {-0.612204f, +0.074957f, -0.016719f}, - {-0.282982f, -0.038705f, -0.033749f}, - {-0.367094f, +0.018672f, +0.009545f}, - {+0.225838f, +0.044458f, +0.015442f}, - {+0.043674f, +0.265484f, +0.033672f}, - {-0.080339f, +0.026791f, -0.023361f}, - {-0.031796f, +0.152994f, -0.068402f}, - {-0.414119f, -0.046068f, -0.045478f}, - {-0.018979f, +0.050781f, -0.052748f}, - {-1.197874f, +0.025145f, +0.019789f}, - {+0.184054f, -0.070437f, -0.009958f}, - {-0.806769f, -0.004366f, -0.003547f}, - {-0.059848f, -0.044696f, -0.055601f}, - {-0.243914f, +0.012959f, -0.017814f}, - {+0.123667f, -0.047399f, -0.021850f} - }, - { - {-0.590457f, -0.027426f, +0.018181f}, - {-0.153592f, -0.151600f, -0.017359f}, - {-0.453375f, +0.040800f, +0.019251f}, - {-0.185914f, +0.157884f, +0.040381f}, - {+0.150267f, +0.058092f, +0.087405f}, - {-0.370093f, +0.045367f, +0.013384f}, - {+0.012941f, -0.147200f, +0.041441f}, - {-0.596085f, -0.026446f, -0.026980f}, - {+0.009851f, -0.159545f, +0.028260f}, - {-1.036040f, +0.005581f, +0.001597f}, - {-0.043489f, +0.034739f, -0.009117f}, - {-0.624380f, -0.045262f, -0.019488f}, - {-0.094605f, -0.081505f, -0.032452f}, - {-0.149839f, -0.036428f, -0.016043f}, - {-0.090928f, +0.014499f, +0.000113f} - }, - { - {-0.648165f, -0.063534f, +0.014939f}, - {+0.052738f, +0.128373f, +0.055065f}, - {-0.535241f, -0.069858f, -0.003891f}, - {-0.862572f, -0.266262f, +0.001282f}, - {+0.080904f, -0.219110f, -0.004018f}, - {-0.953088f, -0.182441f, +0.026892f}, - {+0.021715f, -0.125505f, +0.042828f}, - {-1.016573f, -0.044623f, +0.035676f}, - {+0.012421f, -0.141361f, +0.034156f}, - {-0.924930f, +0.018852f, -0.007346f}, - {-0.187252f, -0.004255f, -0.001005f}, - {-0.455082f, +0.062356f, -0.011024f}, - {-0.020719f, +0.099660f, +0.014347f}, - {-0.108207f, +0.031087f, -0.001307f}, - {-0.233378f, -0.040900f, +0.007062f} - }, - { - {-0.738046f, +0.053142f, -0.010563f}, - {+0.226352f, +0.134898f, +0.027173f}, - {-0.525795f, -0.013450f, -0.023475f}, - {-1.543326f, +0.137991f, -0.026188f}, - {-0.054340f, +0.020378f, -0.061004f}, - {-1.676436f, +0.213947f, +0.006985f}, - {-0.007143f, +0.068869f, -0.026710f}, - {-1.624133f, +0.228046f, +0.038888f}, - {-0.014554f, +0.055501f, -0.041156f}, - {-0.831934f, -0.022901f, -0.002870f}, - {-0.232392f, -0.012564f, +0.005502f}, - {-0.389275f, -0.026324f, +0.006822f}, - {+0.065274f, -0.013643f, +0.033485f}, - {-0.174428f, +0.030208f, +0.007158f}, - {-0.220736f, +0.001711f, -0.013541f} - }, - { - {-0.781969f, +0.015664f, -0.013942f}, - {+0.331098f, -0.099058f, -0.081219f}, - {-0.399112f, +0.065288f, -0.017726f}, - {-1.960453f, -0.000653f, -0.004832f}, - {-0.109110f, +0.110856f, -0.010673f}, - {-2.276175f, -0.117004f, -0.008654f}, - {-0.015007f, +0.052007f, -0.026966f}, - {-2.233906f, -0.204725f, -0.015921f}, - {-0.004171f, +0.131564f, -0.010820f}, - {-0.729841f, +0.018581f, -0.003238f}, - {-0.215465f, +0.015363f, +0.009391f}, - {-0.496172f, -0.058743f, +0.011723f}, - {+0.069211f, -0.051734f, +0.019397f}, - {-0.371337f, -0.073601f, +0.000564f}, - {-0.059531f, +0.087080f, -0.014858f} - }, - { - {-0.738388f, -0.046375f, +0.001540f}, - {+0.371202f, -0.175497f, -0.069389f}, - {-0.243317f, -0.061346f, -0.005711f}, - {-2.013822f, -0.062939f, +0.018690f}, - {-0.062802f, -0.017672f, +0.025304f}, - {-2.537886f, -0.015602f, -0.003764f}, - {+0.000148f, -0.050504f, +0.007953f}, - {-2.599729f, -0.021614f, -0.019729f}, - {+0.014190f, -0.003088f, +0.039676f}, - {-0.608148f, -0.036370f, -0.003399f}, - {-0.186255f, -0.001947f, +0.009920f}, - {-0.764126f, +0.104237f, -0.001366f}, - {-0.003043f, +0.077274f, -0.008375f}, - {-0.653928f, +0.065157f, -0.001655f}, - {+0.136964f, -0.089478f, +0.011296f} - }, - { - {-0.620704f, +0.040857f, +0.012465f}, - {+0.253340f, +0.170035f, +0.072899f}, - {-0.210596f, +0.006273f, +0.005387f}, - {-1.779665f, +0.104163f, +0.030959f}, - {+0.024043f, -0.024581f, -0.001278f}, - {-2.419311f, +0.123795f, +0.018778f}, - {+0.012593f, +0.002121f, +0.023380f}, - {-2.610043f, +0.113399f, +0.029507f}, - {-0.001873f, -0.121782f, -0.005835f}, - {-0.480872f, +0.036381f, +0.002730f}, - {-0.167639f, -0.008441f, +0.006329f}, - {-1.096432f, -0.082483f, -0.012006f}, - {-0.066072f, -0.025598f, -0.031514f}, - {-0.939740f, -0.061596f, +0.000882f}, - {+0.224041f, -0.003983f, +0.025833f} - }, - { - {-0.474089f, -0.005093f, +0.005082f}, - {-0.114798f, +0.231748f, +0.119242f}, - {-0.429108f, +0.096054f, +0.004364f}, - {-1.434480f, -0.060092f, +0.030100f}, - {+0.087354f, -0.045661f, -0.007546f}, - {-2.057338f, -0.122529f, +0.040767f}, - {+0.004089f, +0.061414f, +0.003486f}, - {-2.339244f, -0.067656f, +0.043250f}, - {-0.012502f, -0.045235f, -0.034722f}, - {-0.374704f, -0.009361f, +0.003183f}, - {-0.141971f, +0.005629f, +0.000253f}, - {-1.378250f, +0.025851f, -0.005617f}, - {-0.048209f, -0.073759f, -0.019619f}, - {-1.150667f, +0.030632f, +0.000355f}, - {+0.144419f, +0.089299f, +0.008712f} - }, - { - {-0.348716f, -0.013477f, -0.018911f}, - {-0.562947f, -0.375237f, -0.012263f}, - {-0.909858f, -0.140937f, -0.002793f}, - {-1.133854f, +0.011460f, +0.009135f}, - {+0.076015f, +0.018412f, +0.022057f}, - {-1.657263f, +0.041045f, +0.032704f}, - {-0.011616f, -0.019120f, -0.023590f}, - {-1.929738f, +0.064243f, +0.020197f}, - {+0.007833f, +0.103215f, +0.022494f}, - {-0.304411f, -0.008931f, -0.007043f}, - {-0.070913f, +0.018250f, -0.003996f}, - {-1.543561f, +0.014986f, +0.014525f}, - {+0.024458f, +0.080595f, +0.019551f}, - {-1.243643f, +0.016723f, +0.007671f}, - {-0.026833f, -0.079269f, -0.017534f} - }, - { - {-0.298745f, -0.002258f, -0.035550f}, - {-0.694549f, +0.017049f, -0.121802f}, - {-1.533048f, +0.138236f, +0.001729f}, - {-0.936621f, +0.006483f, -0.016463f}, - {-0.010659f, +0.088690f, +0.016338f}, - {-1.351069f, +0.010889f, -0.001760f}, - {-0.005273f, -0.066631f, -0.006502f}, - {-1.507596f, -0.062294f, +0.000600f}, - {+0.007200f, +0.108283f, +0.019668f}, - {-0.271104f, -0.000976f, -0.015561f}, - {+0.066412f, -0.038573f, -0.004741f}, - {-1.591535f, -0.003139f, +0.026563f}, - {+0.061730f, +0.017448f, +0.034569f}, - {-1.228280f, -0.026953f, +0.019401f}, - {-0.154019f, +0.003402f, -0.022846f} - }, - { - {-0.403804f, +0.013608f, -0.021139f}, - {-0.303960f, +0.374644f, -0.062934f}, - {-2.124203f, -0.124967f, +0.003990f}, - {-0.833001f, +0.025492f, -0.024241f}, - {-0.091464f, -0.074091f, -0.027034f}, - {-1.159470f, +0.003590f, -0.030274f}, - {+0.009573f, +0.013314f, +0.020543f}, - {-1.158548f, +0.046445f, -0.013083f}, - {-0.010154f, -0.018411f, -0.028732f}, - {-0.281374f, +0.016568f, -0.009188f}, - {+0.243504f, +0.038902f, -0.007197f}, - {-1.548756f, -0.015848f, +0.014389f}, - {+0.022548f, -0.093695f, +0.003504f}, - {-1.143217f, +0.000379f, +0.015268f}, - {-0.155501f, +0.061060f, -0.003811f} - }, - { - {-0.754172f, +0.047356f, +0.017128f}, - {+0.345133f, -0.316244f, +0.057317f}, - {-2.527297f, +0.036708f, +0.007460f}, - {-0.809344f, -0.040779f, -0.004786f}, - {-0.077697f, -0.059210f, -0.036987f}, - {-1.058183f, -0.053650f, -0.024975f}, - {+0.005609f, +0.047560f, +0.007549f}, - {-0.927106f, -0.045705f, -0.016523f}, - {-0.001284f, -0.083106f, -0.002993f}, - {-0.356838f, +0.005268f, +0.005530f}, - {+0.387520f, -0.025713f, -0.011614f}, - {-1.430253f, -0.015935f, -0.004184f}, - {-0.038913f, +0.041146f, -0.031965f}, - {-1.016503f, -0.006305f, -0.002495f}, - {-0.055606f, -0.056822f, +0.018159f} - }, - { - {-1.377624f, -0.186837f, +0.033433f}, - {+0.741400f, -0.009809f, +0.083165f}, - {-2.661220f, +0.055216f, +0.033016f}, - {-0.877243f, -0.007797f, +0.016913f}, - {+0.020144f, +0.131421f, +0.012022f}, - {-1.053072f, +0.040270f, +0.005590f}, - {-0.006896f, -0.020841f, -0.015267f}, - {-0.840621f, +0.031127f, -0.003468f}, - {+0.008643f, -0.009871f, +0.024095f}, - {-0.513242f, -0.056059f, +0.008039f}, - {+0.409452f, +0.009674f, -0.007146f}, - {-1.249764f, +0.063596f, -0.003911f}, - {-0.045767f, +0.069574f, -0.019470f}, - {-0.861503f, +0.047121f, -0.007384f}, - {+0.055746f, -0.007574f, +0.014735f} - }, - { - {-2.158506f, +0.248088f, +0.006335f}, - {+0.596605f, +0.213550f, +0.033039f}, - {-2.533200f, -0.054742f, +0.053044f}, - {-1.031360f, +0.063967f, +0.017460f}, - {+0.090988f, +0.003376f, +0.044057f}, - {-1.171621f, +0.030730f, +0.026937f}, - {-0.006156f, -0.035131f, -0.009519f}, - {-0.903039f, +0.004797f, +0.018222f}, - {-0.001937f, +0.068607f, -0.005942f}, - {-0.728222f, +0.070497f, -0.002636f}, - {+0.251493f, +0.029150f, +0.010360f}, - {-1.046985f, -0.062004f, +0.008675f}, - {+0.001084f, -0.056417f, +0.016060f}, - {-0.705411f, -0.049357f, +0.002544f}, - {+0.108840f, +0.028879f, -0.008008f} - }, - { - {-2.857675f, -0.128580f, -0.013488f}, - {+0.055090f, -0.271277f, -0.026731f}, - {-2.176794f, +0.034141f, +0.031881f}, - {-1.209063f, -0.074028f, +0.000038f}, - {+0.057748f, -0.110260f, +0.008245f}, - {-1.387072f, -0.091682f, +0.021904f}, - {+0.004858f, +0.026786f, +0.011441f}, - {-1.058712f, -0.067944f, +0.024260f}, - {-0.007031f, +0.031892f, -0.019502f}, - {-0.946341f, -0.039683f, -0.007015f}, - {-0.062852f, -0.093720f, +0.021531f}, - {-0.874955f, +0.023509f, +0.011931f}, - {+0.037379f, -0.017809f, +0.020177f}, - {-0.588414f, +0.019414f, +0.008224f}, - {+0.093743f, +0.005046f, -0.012655f} - }, - { - {-3.261738f, -0.024600f, +0.013505f}, - {-0.459530f, +0.136066f, -0.073104f}, - {-1.606635f, -0.095137f, -0.008278f}, - {-1.308314f, +0.002009f, -0.008574f}, - {-0.027839f, +0.040584f, -0.027111f}, - {-1.582156f, +0.076989f, -0.000076f}, - {+0.006117f, +0.028262f, +0.010087f}, - {-1.176358f, +0.072778f, +0.000525f}, - {+0.004701f, -0.054472f, +0.013482f}, - {-1.119820f, +0.006109f, +0.003297f}, - {-0.404515f, +0.119170f, +0.007549f}, - {-0.760010f, +0.000475f, +0.003831f}, - {+0.026968f, +0.037327f, +0.002351f}, - {-0.531835f, +0.006711f, +0.004916f}, - {+0.032179f, -0.007958f, +0.004584f} - }, - { - {-3.304399f, +0.077327f, +0.052783f}, - {-0.579324f, +0.156987f, -0.050289f}, - {-0.863150f, +0.193423f, -0.021526f}, - {-1.255216f, +0.067889f, +0.008066f}, - {-0.071817f, +0.030805f, -0.019184f}, - {-1.602102f, +0.025362f, -0.010273f}, - {-0.002992f, -0.024081f, -0.007690f}, - {-1.097993f, +0.039942f, -0.019089f}, - {+0.004416f, -0.057385f, +0.012021f}, - {-1.235605f, -0.005922f, +0.015507f}, - {-0.584562f, -0.037493f, -0.014374f}, - {-0.684984f, +0.004473f, -0.003007f}, - {-0.010203f, -0.022657f, -0.009280f}, - {-0.519957f, -0.010997f, -0.000436f}, - {-0.044953f, -0.029593f, +0.011150f} - }, - { - {-3.042752f, -0.055240f, +0.055762f}, - {-0.286410f, -0.259148f, +0.037277f}, - {-0.076425f, -0.208846f, -0.004764f}, - {-1.057524f, -0.054711f, +0.019597f}, - {-0.041537f, -0.048621f, +0.001905f}, - {-1.366191f, -0.115170f, +0.002752f}, - {-0.005778f, -0.014973f, -0.010026f}, - {-0.757989f, -0.145344f, -0.007538f}, - {-0.006355f, +0.021219f, -0.017995f}, - {-1.303781f, +0.019691f, +0.015466f}, - {-0.474765f, -0.088378f, -0.013868f}, - {-0.608126f, -0.022180f, -0.002375f}, - {-0.031836f, -0.000935f, -0.011965f}, - {-0.508460f, -0.004149f, -0.001651f}, - {-0.094679f, +0.034251f, -0.002925f} - }, - { - {-2.561481f, +0.058009f, +0.020761f}, - {+0.114954f, +0.059631f, +0.072965f}, - {+0.560215f, +0.119741f, +0.009368f}, - {-0.778586f, +0.037376f, +0.005470f}, - {+0.023665f, +0.026771f, +0.013776f}, - {-0.934860f, +0.119001f, +0.012968f}, - {+0.001141f, +0.025569f, +0.003541f}, - {-0.253423f, +0.143668f, +0.009368f}, - {-0.000961f, +0.061304f, -0.002271f}, - {-1.326987f, -0.007873f, +0.008890f}, - {-0.115710f, +0.134180f, +0.001573f}, - {-0.492615f, +0.037518f, +0.002448f}, - {-0.015982f, +0.030143f, -0.005520f}, - {-0.451060f, +0.024473f, +0.001447f}, - {-0.079087f, +0.012412f, -0.013697f} - }, - { - {-1.914278f, -0.144244f, -0.006317f}, - {+0.323947f, +0.113578f, +0.015549f}, - {+0.901146f, -0.000633f, +0.001221f}, - {-0.486031f, -0.062487f, -0.006628f}, - {+0.056621f, +0.017415f, +0.009508f}, - {-0.460561f, -0.095684f, +0.008436f}, - {+0.005750f, +0.003176f, +0.010924f}, - {+0.221745f, -0.084421f, +0.008896f}, - {+0.006138f, +0.009642f, +0.017284f}, - {-1.282596f, -0.033227f, +0.013009f}, - {+0.295524f, -0.090225f, +0.005470f}, - {-0.320490f, -0.048169f, +0.007190f}, - {+0.017081f, -0.032708f, +0.009204f}, - {-0.321645f, -0.040805f, +0.005349f}, - {-0.004452f, -0.049687f, -0.005870f} - }, - { - {-1.131086f, +0.240364f, +0.014659f}, - {+0.276466f, -0.082126f, -0.039402f}, - {+0.939436f, -0.066256f, -0.020157f}, - {-0.227874f, +0.081668f, +0.006464f}, - {+0.031245f, -0.021677f, +0.001488f}, - {-0.079943f, +0.077867f, +0.010680f}, - {+0.000131f, -0.031577f, -0.000810f}, - {+0.505579f, +0.022937f, +0.002111f}, - {-0.002114f, -0.051097f, -0.006205f}, - {-1.119787f, +0.067689f, +0.030053f}, - {+0.529896f, +0.026599f, +0.002639f}, - {-0.086495f, +0.052017f, +0.009012f}, - {+0.027535f, -0.008758f, +0.016240f}, - {-0.118065f, +0.048702f, +0.006679f}, - {+0.071205f, +0.035559f, +0.009161f} - }, - { - {-0.245787f, -0.191436f, +0.043587f}, - {+0.093440f, -0.004557f, -0.027073f}, - {+0.799589f, +0.049636f, -0.030640f}, - {-0.010885f, -0.044328f, +0.025258f}, - {-0.019046f, +0.019093f, +0.000438f}, - {+0.170216f, -0.034687f, +0.022513f}, - {-0.005866f, +0.001799f, -0.012476f}, - {+0.562981f, +0.020613f, +0.002338f}, - {-0.004590f, -0.033773f, -0.012630f}, - {-0.766124f, -0.063087f, +0.032731f}, - {+0.462468f, +0.040558f, +0.011199f}, - {+0.208773f, -0.041720f, +0.000150f}, - {+0.003866f, +0.047343f, +0.002184f}, - {+0.142942f, -0.041830f, -0.000134f}, - {+0.085394f, +0.009847f, +0.015388f} - }, - { - {+0.696618f, +0.032741f, -0.013106f}, - {-0.079123f, +0.007129f, +0.009727f}, - {+0.637741f, -0.009242f, -0.021655f}, - {+0.212381f, -0.027509f, +0.006723f}, - {-0.047028f, -0.036117f, -0.013542f}, - {+0.370842f, -0.041578f, +0.004859f}, - {-0.000617f, +0.037075f, -0.000220f}, - {+0.496527f, -0.056499f, -0.001248f}, - {+0.004430f, +0.032051f, +0.012864f}, - {-0.166525f, +0.044856f, -0.014703f}, - {+0.146069f, -0.116744f, +0.017775f}, - {+0.546556f, +0.035367f, -0.024737f}, - {-0.023099f, -0.027347f, -0.019267f}, - {+0.425139f, +0.034119f, -0.017706f}, - {+0.028754f, -0.048770f, +0.007240f} - }, - { - {+1.611496f, -0.047493f, -0.138771f}, - {-0.157237f, +0.030807f, +0.012105f}, - {+0.536727f, -0.004269f, -0.010405f}, - {+0.501885f, +0.028440f, -0.057516f}, - {-0.027394f, -0.029213f, -0.025646f}, - {+0.639827f, +0.055019f, -0.067764f}, - {+0.006221f, -0.003275f, +0.014398f}, - {+0.461536f, +0.068831f, -0.033617f}, - {+0.001591f, +0.053416f, +0.004360f}, - {+0.626469f, -0.114092f, -0.092853f}, - {-0.211469f, +0.148135f, -0.006826f}, - {+0.860019f, -0.064519f, -0.045475f}, - {-0.018761f, -0.043099f, -0.016105f}, - {+0.663833f, -0.048154f, -0.030845f}, - {-0.045626f, +0.052106f, -0.012787f} - }, - { - {+2.288775f, +0.330052f, -0.141825f}, - {-0.126579f, -0.010919f, -0.013520f}, - {+0.480184f, +0.010975f, -0.003821f}, - {+0.833876f, +0.128981f, -0.089877f}, - {+0.027378f, +0.130514f, +0.022104f}, - {+0.987530f, +0.132515f, -0.115028f}, - {+0.000006f, -0.048007f, -0.001802f}, - {+0.539461f, +0.030205f, -0.070546f}, - {-0.005361f, +0.003754f, -0.015136f}, - {+1.370192f, +0.300821f, -0.090103f}, - {-0.376693f, -0.051952f, -0.051245f}, - {+1.023463f, +0.103548f, -0.021626f}, - {+0.011481f, +0.068383f, +0.018910f}, - {+0.767991f, +0.065493f, -0.012744f}, - {-0.070294f, +0.005867f, -0.026624f} - }, - { - {+2.386202f, -0.393766f, +0.091076f}, - {-0.026353f, -0.076812f, -0.011309f}, - {+0.401155f, -0.012573f, +0.012460f}, - {+1.044143f, -0.283147f, +0.008993f}, - {+0.046392f, +0.057411f, +0.051335f}, - {+1.233210f, -0.363550f, +0.002070f}, - {-0.006407f, -0.010478f, -0.016041f}, - {+0.661388f, -0.218208f, -0.018346f}, - {+0.002791f, -0.054442f, +0.008337f}, - {+1.687434f, -0.323548f, +0.070274f}, - {-0.258425f, -0.166860f, -0.042541f}, - {+0.910899f, -0.034460f, +0.045920f}, - {+0.022238f, +0.046619f, +0.026404f}, - {+0.661856f, -0.004487f, +0.030559f}, - {-0.025130f, -0.092267f, -0.002499f} - }, - { - {+1.666633f, -0.360456f, +0.255929f}, - {+0.066021f, +0.074661f, +0.029510f}, - {+0.252047f, -0.048065f, +0.026719f}, - {+0.913916f, +0.010655f, +0.146689f}, - {-0.007792f, -0.195641f, -0.037030f}, - {+1.098128f, +0.060089f, +0.189069f}, - {+0.003378f, +0.059921f, +0.011523f}, - {+0.642839f, +0.126181f, +0.111015f}, - {+0.001509f, -0.062831f, +0.004239f}, - {+1.312690f, -0.234325f, +0.190640f}, - {+0.012758f, +0.255764f, +0.056444f}, - {+0.511605f, -0.213878f, +0.060443f}, - {-0.003813f, -0.090866f, -0.022023f}, - {+0.358843f, -0.156710f, +0.034608f}, - {+0.035742f, +0.045103f, +0.037370f} - }, - { - {+0.381358f, +1.206285f, -0.072122f}, - {+0.074139f, +0.095357f, +0.023821f}, - {+0.056394f, +0.128099f, -0.000093f}, - {+0.398811f, +0.586347f, +0.042243f}, - {-0.030944f, -0.168571f, -0.041583f}, - {+0.488122f, +0.738625f, +0.068185f}, - {+0.002280f, +0.072478f, +0.005368f}, - {+0.349465f, +0.388613f, +0.079712f}, - {-0.003028f, -0.029422f, -0.008868f}, - {+0.401381f, +0.902131f, -0.044484f}, - {+0.176056f, +0.077874f, +0.097877f}, - {+0.009642f, +0.355418f, -0.055057f}, - {-0.013871f, -0.089264f, -0.019111f}, - {+0.003022f, +0.223981f, -0.039576f}, - {+0.038242f, +0.114116f, +0.011546f} - }, - { - {-0.612178f, -0.198966f, -0.447896f}, - {+0.011203f, -0.103152f, -0.040501f}, - {-0.092947f, -0.064045f, -0.048583f}, - {-0.172174f, -0.393944f, -0.233061f}, - {+0.000469f, +0.055639f, +0.042364f}, - {-0.216767f, -0.541072f, -0.299361f}, - {-0.001945f, +0.039334f, -0.006788f}, - {-0.073951f, -0.446110f, -0.164206f}, - {+0.000571f, -0.002951f, +0.001970f}, - {-0.385812f, -0.226337f, -0.343728f}, - {+0.104268f, -0.348234f, -0.048377f}, - {-0.283739f, +0.046315f, -0.129419f}, - {+0.000090f, +0.017828f, +0.020908f}, - {-0.195200f, +0.041315f, -0.080091f}, - {-0.000956f, -0.033592f, -0.036908f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS] /* Q29 */= { { @@ -18471,863 +9670,7 @@ const Word32 rightHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA { 100901128, -152861648, -22567906, }, }, }; -#else -const float rightHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]= -{ - { - {+0.625622f, +0.318887f, +0.014720f}, - {+1.164232f, -0.071388f, +0.046399f}, - {+1.000960f, +0.045336f, +0.068038f}, - {+0.303190f, +0.543160f, +0.149069f}, - {+1.137988f, -0.154415f, -0.061425f}, - {+0.085322f, +0.882648f, +0.205135f}, - {+1.253214f, -0.205377f, -0.065229f}, - {+0.058226f, +0.942911f, +0.171217f}, - {+1.312265f, -0.220630f, -0.090644f}, - {+0.680445f, +0.361766f, +0.049600f}, - {+1.034378f, +0.117953f, +0.052257f}, - {+0.250187f, +0.697472f, +0.213227f}, - {+1.147757f, -0.086335f, +0.012687f}, - {+0.501443f, +0.364037f, +0.074228f}, - {+1.088959f, -0.092061f, -0.000586f} - }, - { - {+0.286735f, -0.252034f, -0.153374f}, - {+1.146595f, -0.154651f, +0.043142f}, - {+0.948810f, -0.114394f, +0.051619f}, - {-0.060685f, -0.361794f, -0.117760f}, - {+1.263032f, +0.249467f, +0.062149f}, - {-0.105135f, -0.389796f, -0.271911f}, - {+1.350448f, +0.215668f, +0.073258f}, - {-0.094305f, -0.164320f, -0.266068f}, - {+1.374733f, +0.173637f, +0.049028f}, - {+0.438624f, -0.019990f, -0.059450f}, - {+1.040815f, -0.208066f, -0.083035f}, - {-0.102492f, -0.454586f, -0.136217f}, - {+1.166646f, -0.148967f, -0.011838f}, - {+0.098987f, -0.171388f, -0.043273f}, - {+1.097313f, -0.054163f, +0.016726f} - }, - { - {-0.088480f, -0.420403f, +0.001880f}, - {+1.143116f, +0.354198f, -0.162550f}, - {+0.931498f, +0.123662f, -0.033888f}, - {-0.299298f, -0.139613f, -0.122914f}, - {+1.318265f, +0.100233f, +0.102754f}, - {-0.046525f, -0.814319f, -0.099822f}, - {+1.356998f, +0.217141f, +0.061024f}, - {+0.011288f, -0.915723f, +0.029668f}, - {+1.353473f, +0.285762f, +0.004248f}, - {+0.127607f, -0.015631f, -0.000953f}, - {+1.153537f, -0.424294f, -0.013858f}, - {-0.278085f, -0.128122f, -0.198812f}, - {+1.196081f, +0.029242f, -0.092440f}, - {-0.325202f, +0.033240f, -0.015961f}, - {+1.086036f, +0.107882f, -0.049328f} - }, - { - {-0.459273f, -0.470824f, +0.048067f}, - {+1.325816f, +0.511650f, -0.152840f}, - {+1.060173f, +0.310816f, -0.017459f}, - {-0.224619f, +0.084318f, -0.062623f}, - {+1.191764f, -0.170770f, +0.020474f}, - {+0.084800f, +0.048581f, +0.210193f}, - {+1.231375f, -0.115063f, -0.048061f}, - {+0.074098f, -0.455054f, +0.206816f}, - {+1.284471f, +0.011386f, -0.085145f}, - {-0.221606f, -0.084179f, +0.030307f}, - {+1.276588f, -0.117807f, +0.087644f}, - {-0.094546f, +0.498021f, -0.017920f}, - {+1.280931f, +0.249488f, -0.020802f}, - {-0.500760f, -0.035203f, -0.013172f}, - {+1.108975f, +0.181116f, -0.024618f} - }, - { - {-0.676760f, -0.089781f, -0.072018f}, - {+1.605708f, -0.366586f, +0.142118f}, - {+1.268416f, -0.122990f, +0.116068f}, - {+0.078497f, -0.418906f, +0.044519f}, - {+0.963365f, +0.072984f, -0.025802f}, - {+0.031477f, +0.447773f, +0.053312f}, - {+1.077459f, -0.019951f, -0.049500f}, - {-0.059280f, +0.507158f, -0.168109f}, - {+1.259077f, -0.142552f, -0.013514f}, - {-0.512977f, +0.036303f, +0.035411f}, - {+1.292946f, +0.146018f, -0.029776f}, - {+0.194009f, -0.198069f, +0.165160f}, - {+1.302893f, +0.041776f, +0.054097f}, - {-0.311251f, -0.179016f, -0.007145f}, - {+1.107011f, +0.048657f, +0.025557f} - }, - { - {-0.518829f, +0.144843f, +0.012635f}, - {+1.664749f, -0.424953f, +0.117548f}, - {+1.341921f, -0.475334f, -0.025454f}, - {+0.290955f, -0.043105f, +0.145092f}, - {+0.745020f, +0.011176f, -0.013117f}, - {-0.059334f, -0.119714f, -0.140789f}, - {+0.953967f, +0.019869f, -0.011129f}, - {-0.027620f, +0.732031f, -0.075265f}, - {+1.242504f, +0.051036f, +0.063409f}, - {-0.664021f, -0.071212f, +0.022023f}, - {+1.345654f, +0.206823f, +0.000993f}, - {+0.215666f, -0.319906f, +0.114867f}, - {+1.166038f, -0.153803f, -0.001166f}, - {+0.083957f, +0.134151f, +0.028232f}, - {+0.999816f, -0.066205f, -0.006296f} - }, - { - {-0.137274f, +0.076831f, -0.038250f}, - {+1.581283f, +0.343441f, -0.147384f}, - {+1.367477f, -0.195495f, -0.142118f}, - {+0.155099f, +0.411591f, +0.002255f}, - {+0.611192f, -0.097324f, +0.048461f}, - {-0.032052f, -0.346312f, -0.054872f}, - {+0.891869f, -0.009049f, +0.006965f}, - {+0.069189f, +0.025911f, +0.196858f}, - {+1.206124f, +0.162210f, +0.026195f}, - {-0.622568f, -0.029470f, -0.001764f}, - {+1.428022f, +0.163648f, +0.009798f}, - {-0.029956f, +0.351502f, -0.072001f}, - {+0.954217f, +0.027854f, -0.027765f}, - {+0.377920f, -0.040829f, +0.033773f}, - {+0.821491f, +0.019645f, -0.005837f} - }, - { - {+0.340806f, +0.310825f, -0.047722f}, - {+1.677009f, +0.377370f, -0.142884f}, - {+1.442173f, +0.342472f, +0.058973f}, - {-0.109214f, -0.056024f, -0.105562f}, - {+0.535134f, -0.138655f, +0.042466f}, - {+0.046512f, +0.128065f, +0.107566f}, - {+0.897169f, +0.015446f, +0.016293f}, - {-0.017560f, -0.600552f, -0.051411f}, - {+1.199956f, -0.036702f, -0.050091f}, - {-0.383881f, +0.085336f, -0.002185f}, - {+1.542399f, +0.075318f, -0.055439f}, - {-0.213556f, +0.042618f, -0.139727f}, - {+0.767844f, -0.002300f, -0.002498f}, - {+0.389565f, -0.093296f, +0.018341f}, - {+0.614646f, -0.038818f, +0.011343f} - }, - { - {+0.682687f, -0.162615f, +0.076325f}, - {+1.950355f, -0.362582f, +0.081454f}, - {+1.383305f, +0.259100f, +0.098340f}, - {-0.213659f, -0.101401f, -0.062195f}, - {+0.507785f, +0.030154f, -0.021916f}, - {+0.031901f, +0.266437f, +0.053656f}, - {+0.951588f, +0.040882f, -0.000970f}, - {-0.046125f, -0.384263f, -0.129408f}, - {+1.302827f, -0.171084f, -0.011255f}, - {-0.027625f, -0.133154f, +0.018328f}, - {+1.712243f, -0.194390f, +0.019399f}, - {-0.118934f, -0.338445f, -0.019973f}, - {+0.668291f, +0.010139f, +0.008195f}, - {+0.144432f, +0.164330f, -0.025701f}, - {+0.438220f, +0.079868f, -0.003191f} - }, - { - {+0.610952f, -0.295887f, +0.035489f}, - {+2.093580f, -0.196850f, +0.103630f}, - {+1.183258f, -0.254467f, -0.069704f}, - {-0.101158f, +0.222864f, +0.024346f}, - {+0.575110f, +0.116089f, +0.003537f}, - {-0.035693f, -0.134351f, -0.082748f}, - {+1.057859f, +0.043401f, -0.017762f}, - {+0.038543f, +0.232670f, +0.109875f}, - {+1.471333f, +0.025140f, +0.035257f}, - {+0.315108f, +0.002642f, +0.011084f}, - {+1.786701f, -0.093608f, +0.042083f}, - {+0.101827f, +0.111911f, +0.089442f}, - {+0.675572f, -0.006144f, -0.003303f}, - {-0.156559f, -0.020362f, -0.037847f}, - {+0.361145f, +0.021912f, -0.014375f} - }, - { - {+0.215943f, +0.100902f, -0.038402f}, - {+1.976571f, +0.241275f, -0.043490f}, - {+1.025479f, -0.189152f, -0.060485f}, - {+0.084280f, -0.041736f, +0.082895f}, - {+0.699954f, -0.000496f, +0.029249f}, - {-0.033219f, -0.189116f, -0.059524f}, - {+1.214688f, -0.076791f, +0.003066f}, - {+0.015390f, +0.395024f, +0.041010f}, - {+1.625112f, +0.050451f, -0.006609f}, - {+0.546520f, -0.014474f, -0.021685f}, - {+1.716470f, +0.098967f, -0.019398f}, - {+0.176131f, +0.115006f, +0.065018f}, - {+0.764906f, -0.062888f, -0.000632f}, - {-0.315978f, -0.085685f, +0.017030f}, - {+0.401503f, -0.073214f, +0.013531f} - }, - { - {-0.226724f, -0.081469f, -0.015083f}, - {+1.738061f, +0.041153f, -0.060947f}, - {+0.922005f, +0.036805f, +0.043095f}, - {+0.140772f, -0.212427f, +0.006831f}, - {+0.827335f, -0.067324f, -0.023100f}, - {+0.026336f, +0.163123f, +0.060613f}, - {+1.366857f, -0.002014f, +0.004214f}, - {-0.036122f, +0.013268f, -0.102505f}, - {+1.749249f, +0.060972f, -0.022997f}, - {+0.628526f, +0.009623f, -0.025420f}, - {+1.587780f, -0.017325f, -0.034831f}, - {+0.047589f, -0.158181f, +0.000915f}, - {+0.880943f, +0.044219f, +0.021208f}, - {-0.284768f, -0.026108f, +0.032717f}, - {+0.499398f, -0.006432f, +0.020261f} - }, - { - {-0.502341f, +0.014784f, -0.004442f}, - {+1.505132f, +0.022539f, -0.007951f}, - {+0.788099f, +0.109664f, +0.026293f}, - {+0.070952f, +0.012587f, -0.060046f}, - {+0.945261f, -0.116770f, -0.027695f}, - {+0.034434f, +0.143653f, +0.064672f}, - {+1.465040f, -0.001749f, -0.014809f}, - {+0.003390f, -0.275112f, +0.011303f}, - {+1.815683f, -0.023428f, +0.002040f}, - {+0.538936f, -0.002058f, -0.007385f}, - {+1.470938f, -0.021798f, -0.012446f}, - {-0.126264f, +0.126663f, -0.057452f}, - {+0.968457f, +0.052353f, +0.005680f}, - {-0.103836f, +0.018725f, -0.021490f}, - {+0.596708f, +0.023788f, -0.009367f} - }, - { - {-0.492814f, +0.061978f, +0.004857f}, - {+1.323053f, -0.031245f, -0.010960f}, - {+0.629433f, -0.057790f, -0.011522f}, - {-0.020040f, +0.083340f, -0.010638f}, - {+0.990987f, +0.041590f, +0.024383f}, - {-0.019240f, -0.174901f, -0.044679f}, - {+1.480865f, +0.017125f, -0.010601f}, - {+0.025429f, -0.108477f, +0.070866f}, - {+1.775213f, -0.086261f, -0.017961f}, - {+0.286716f, -0.064952f, +0.010826f}, - {+1.389486f, +0.000140f, +0.005964f}, - {-0.147616f, +0.078463f, -0.074691f}, - {+1.029093f, -0.016099f, -0.029749f}, - {+0.148950f, +0.124951f, -0.030334f}, - {+0.669798f, +0.034059f, -0.017672f} - }, - { - {-0.263474f, -0.085276f, +0.011348f}, - {+1.182510f, -0.045886f, +0.007051f}, - {+0.473865f, +0.014568f, -0.008515f}, - {-0.083849f, -0.019482f, +0.039696f}, - {+0.889927f, +0.101012f, +0.018019f}, - {-0.034351f, -0.105731f, -0.065818f}, - {+1.386823f, +0.026725f, +0.000771f}, - {-0.010460f, +0.157988f, -0.030666f}, - {+1.624911f, +0.001774f, -0.032570f}, - {-0.070456f, +0.112056f, +0.005895f}, - {+1.316722f, +0.043440f, -0.002660f}, - {+0.010696f, -0.252890f, +0.005868f}, - {+1.088370f, -0.079959f, -0.015118f}, - {+0.321581f, -0.091411f, +0.016059f}, - {+0.688001f, -0.021562f, -0.000700f} - }, - { - {+0.028075f, +0.094891f, +0.025537f}, - {+1.003882f, -0.024290f, +0.045086f}, - {+0.348737f, -0.009666f, +0.003782f}, - {-0.094687f, -0.092807f, +0.015332f}, - {+0.684266f, -0.092642f, -0.016858f}, - {+0.010648f, +0.163291f, +0.024850f}, - {+1.189337f, -0.053543f, +0.003361f}, - {-0.017554f, +0.105607f, -0.047949f}, - {+1.372511f, +0.028160f, +0.019011f}, - {-0.409194f, -0.068489f, -0.000898f}, - {+1.209792f, -0.033195f, -0.018513f}, - {+0.152611f, +0.084562f, +0.098898f}, - {+1.114407f, +0.011788f, +0.013270f}, - {+0.278306f, -0.044425f, +0.040442f}, - {+0.622917f, -0.018666f, +0.009922f} - }, - { - {+0.234086f, +0.033069f, +0.017363f}, - {+0.740177f, +0.195497f, +0.009467f}, - {+0.278404f, +0.005428f, +0.007940f}, - {-0.038592f, +0.051080f, -0.052176f}, - {+0.479823f, +0.016574f, -0.020585f}, - {+0.037747f, +0.010959f, +0.078277f}, - {+0.942736f, +0.059732f, +0.004267f}, - {+0.013463f, -0.125599f, +0.038289f}, - {+1.014378f, +0.145862f, +0.036898f}, - {-0.599240f, +0.017158f, +0.001993f}, - {+1.037014f, -0.004829f, -0.003051f}, - {+0.097746f, +0.241425f, +0.056951f}, - {+1.057897f, +0.055995f, +0.002659f}, - {+0.034409f, +0.166502f, +0.011758f}, - {+0.484638f, +0.055982f, +0.007230f} - }, - { - {+0.302159f, -0.065615f, -0.027649f}, - {+0.480829f, -0.064216f, -0.043606f}, - {+0.267594f, +0.001584f, +0.006546f}, - {+0.073328f, +0.179121f, -0.030479f}, - {+0.366217f, +0.055646f, +0.013124f}, - {-0.006609f, -0.265125f, -0.016510f}, - {+0.728428f, -0.048337f, +0.001439f}, - {+0.013220f, -0.131492f, +0.036082f}, - {+0.640014f, -0.153518f, -0.009948f}, - {-0.570949f, +0.037845f, +0.003919f}, - {+0.775649f, -0.065990f, +0.016867f}, - {-0.078407f, -0.230573f, -0.077915f}, - {+0.921821f, -0.037053f, -0.008881f}, - {-0.233852f, -0.106785f, -0.034385f}, - {+0.319853f, -0.071600f, -0.011181f} - }, - { - {+0.278839f, -0.028952f, -0.035646f}, - {+0.346889f, -0.104821f, -0.004742f}, - {+0.308015f, -0.016382f, +0.006865f}, - {+0.139350f, -0.105650f, +0.062450f}, - {+0.387256f, -0.021873f, +0.040727f}, - {-0.042429f, -0.053630f, -0.094110f}, - {+0.637226f, -0.018242f, +0.007115f}, - {-0.018943f, +0.103114f, -0.053053f}, - {+0.417755f, -0.008672f, -0.023314f}, - {-0.345464f, -0.074501f, +0.004085f}, - {+0.448779f, +0.108427f, +0.006588f}, - {-0.138142f, -0.161327f, -0.088998f}, - {+0.735939f, +0.043054f, -0.006246f}, - {-0.323001f, -0.053426f, -0.037017f}, - {+0.195889f, -0.012365f, -0.013162f} - }, - { - {+0.196181f, +0.041302f, +0.002444f}, - {+0.335149f, +0.024150f, +0.042650f}, - {+0.386375f, +0.004899f, +0.003361f}, - {+0.057054f, -0.159605f, +0.062037f}, - {+0.564612f, -0.025480f, +0.015096f}, - {+0.011492f, +0.297922f, +0.033799f}, - {+0.730907f, +0.044800f, +0.018459f}, - {-0.004564f, +0.210619f, -0.011762f}, - {+0.441286f, +0.097411f, +0.011722f}, - {-0.027659f, +0.078990f, +0.003505f}, - {+0.139688f, -0.077873f, -0.010083f}, - {-0.020118f, +0.231273f, +0.031141f}, - {+0.536993f, -0.035240f, -0.004368f}, - {-0.175851f, +0.155370f, +0.009858f}, - {+0.144861f, +0.035632f, +0.011759f} - }, - { - {+0.052839f, +0.021145f, +0.032934f}, - {+0.386157f, +0.060262f, +0.016757f}, - {+0.484472f, -0.002920f, -0.010570f}, - {-0.104209f, +0.229183f, -0.047655f}, - {+0.918642f, -0.034827f, -0.037149f}, - {+0.037426f, +0.156073f, +0.082853f}, - {+1.015020f, -0.033699f, +0.002853f}, - {+0.020608f, +0.028827f, +0.057521f}, - {+0.683874f, -0.079502f, +0.034799f}, - {+0.249215f, -0.054366f, +0.004926f}, - {-0.071180f, +0.006964f, -0.008015f}, - {+0.098532f, +0.027366f, +0.074117f}, - {+0.367933f, -0.002046f, +0.010161f}, - {+0.074185f, -0.043989f, +0.032862f}, - {+0.147810f, +0.003457f, +0.021465f} - }, - { - {-0.130356f, -0.121062f, +0.014557f}, - {+0.475703f, -0.006148f, -0.023405f}, - {+0.576084f, +0.037334f, -0.013945f}, - {-0.152471f, +0.096982f, -0.087407f}, - {+1.404901f, +0.165414f, -0.048723f}, - {-0.014512f, -0.190422f, -0.045041f}, - {+1.440940f, +0.071259f, -0.031007f}, - {-0.005777f, -0.163997f, -0.016934f}, - {+1.050275f, +0.008260f, +0.006195f}, - {+0.386758f, -0.005894f, +0.001482f}, - {-0.163442f, +0.028862f, +0.011254f}, - {+0.085717f, -0.129404f, +0.017522f}, - {+0.257252f, -0.028247f, +0.020221f}, - {+0.242915f, -0.031396f, +0.002633f}, - {+0.193627f, -0.014561f, +0.008640f} - }, - { - {-0.286286f, +0.097252f, -0.041512f}, - {+0.585900f, -0.077367f, -0.015045f}, - {+0.619979f, -0.049713f, +0.009170f}, - {-0.024241f, -0.256635f, +0.018398f}, - {+1.849971f, -0.189063f, -0.000469f}, - {-0.026389f, -0.146816f, -0.054608f}, - {+1.888056f, -0.137439f, -0.034575f}, - {-0.015954f, -0.090459f, -0.044119f}, - {+1.430514f, -0.025065f, -0.047865f}, - {+0.367403f, +0.037464f, -0.007579f}, - {-0.184491f, +0.004971f, +0.018816f}, - {-0.017983f, +0.089824f, -0.035056f}, - {+0.235707f, +0.030441f, +0.004150f}, - {+0.243126f, +0.012530f, -0.011942f}, - {+0.295835f, -0.004981f, -0.008543f} - }, - { - {-0.322996f, +0.149054f, -0.019252f}, - {+0.665250f, +0.043970f, +0.015531f}, - {+0.580264f, -0.030849f, +0.024350f}, - {+0.113598f, -0.012581f, +0.077394f}, - {+2.005200f, -0.021439f, +0.029304f}, - {+0.010436f, +0.101090f, +0.035256f}, - {+2.158987f, +0.088276f, -0.003861f}, - {+0.012628f, +0.118154f, +0.035793f}, - {+1.711090f, +0.135561f, -0.041164f}, - {+0.249509f, -0.036318f, -0.011041f}, - {-0.193848f, -0.021279f, +0.007900f}, - {-0.086761f, +0.034113f, -0.037672f}, - {+0.339148f, +0.023808f, -0.014106f}, - {+0.093926f, -0.023588f, +0.006999f}, - {+0.464823f, +0.051589f, -0.014718f} - }, - { - {-0.232991f, -0.119769f, +0.069682f}, - {+0.660761f, +0.042611f, +0.015736f}, - {+0.490072f, +0.069493f, +0.007458f}, - {+0.111516f, +0.167908f, +0.006525f}, - {+1.741681f, +0.183508f, -0.002008f}, - {+0.017775f, +0.088998f, +0.033186f}, - {+2.068520f, +0.072175f, +0.012737f}, - {+0.008321f, +0.149997f, +0.022551f}, - {+1.743717f, -0.055334f, +0.020118f}, - {+0.113469f, +0.022908f, -0.008746f}, - {-0.215009f, +0.005025f, +0.002907f}, - {-0.050942f, -0.083131f, -0.004389f}, - {+0.555173f, -0.080542f, -0.013610f}, - {-0.109620f, +0.081521f, +0.008758f}, - {+0.671639f, -0.073125f, -0.004515f} - }, - { - {-0.081293f, -0.137373f, +0.044029f}, - {+0.580314f, -0.054424f, -0.004509f}, - {+0.463983f, -0.014407f, -0.011338f}, - {+0.010292f, -0.029514f, -0.042304f}, - {+1.169198f, -0.169394f, -0.027703f}, - {-0.003477f, -0.054254f, -0.016928f}, - {+1.586881f, -0.186952f, +0.000592f}, - {-0.014733f, -0.018568f, -0.041380f}, - {+1.413673f, -0.186454f, +0.025413f}, - {+0.012903f, -0.004127f, -0.003906f}, - {-0.240996f, -0.010303f, +0.004071f}, - {+0.035386f, +0.053069f, +0.022651f}, - {+0.797681f, +0.082346f, +0.001667f}, - {-0.233902f, -0.047392f, -0.015538f}, - {+0.837236f, +0.024942f, +0.000978f} - }, - { - {+0.131946f, +0.108933f, -0.083894f}, - {+0.487007f, +0.016249f, -0.011560f}, - {+0.605422f, -0.050044f, -0.018024f}, - {-0.076271f, -0.058690f, -0.007472f}, - {+0.528861f, +0.124876f, -0.022752f}, - {-0.013401f, -0.021368f, -0.024064f}, - {+0.878847f, +0.205138f, -0.018250f}, - {-0.001043f, -0.119442f, -0.002181f}, - {+0.787884f, +0.241841f, -0.026493f}, - {-0.047227f, -0.004224f, +0.002439f}, - {-0.248907f, +0.006659f, -0.000113f}, - {+0.073996f, +0.013124f, +0.028741f}, - {+0.944135f, -0.011491f, +0.008745f}, - {-0.190006f, -0.056489f, -0.021766f}, - {+0.883681f, +0.012426f, -0.004374f} - }, - { - {+0.405969f, +0.226903f, -0.097206f}, - {+0.447938f, +0.026156f, -0.000247f}, - {+0.921105f, +0.112177f, -0.013995f}, - {-0.090253f, -0.009755f, +0.013084f}, - {+0.037993f, -0.046160f, -0.007721f}, - {-0.002415f, +0.053658f, +0.001011f}, - {+0.202227f, -0.127508f, -0.025725f}, - {+0.013671f, -0.012260f, +0.038128f}, - {+0.093735f, -0.101919f, -0.033415f}, - {-0.097438f, -0.004101f, +0.007694f}, - {-0.215815f, +0.021644f, -0.000381f}, - {+0.026266f, -0.083884f, +0.006535f}, - {+0.915214f, -0.057119f, -0.002700f}, - {-0.014409f, +0.106024f, +0.002229f}, - {+0.783545f, -0.039342f, -0.005531f} - }, - { - {+0.562721f, -0.271269f, +0.047991f}, - {+0.502937f, -0.043296f, +0.016942f}, - {+1.294879f, -0.099867f, -0.004459f}, - {-0.031898f, +0.012336f, -0.012314f}, - {-0.208511f, -0.020811f, +0.014857f}, - {+0.012118f, -0.016031f, +0.023545f}, - {-0.243172f, +0.002723f, -0.005736f}, - {-0.005049f, +0.125222f, -0.014706f}, - {-0.466228f, +0.038982f, +0.006490f}, - {-0.166118f, +0.020933f, +0.009093f}, - {-0.140043f, -0.033646f, +0.007426f}, - {-0.048205f, +0.058271f, -0.028029f}, - {+0.720723f, +0.081983f, -0.019142f}, - {+0.155323f, -0.047908f, +0.024506f}, - {+0.563027f, +0.072436f, -0.008261f} - }, - { - {+0.346717f, -0.146678f, +0.128633f}, - {+0.665302f, +0.025328f, +0.018664f}, - {+1.538661f, +0.020131f, -0.007519f}, - {+0.057374f, +0.076254f, -0.009097f}, - {-0.254940f, +0.020497f, +0.029909f}, - {+0.004959f, -0.067560f, +0.005746f}, - {-0.419513f, +0.042371f, +0.027848f}, - {-0.010252f, +0.088264f, -0.028280f}, - {-0.808913f, -0.036603f, +0.026731f}, - {-0.247264f, -0.028052f, +0.006187f}, - {-0.037018f, +0.017759f, +0.010413f}, - {-0.060240f, +0.049926f, -0.029266f}, - {+0.433078f, -0.054258f, -0.021327f}, - {+0.195525f, -0.046783f, +0.017995f}, - {+0.287834f, -0.063180f, -0.013153f} - }, - { - {-0.212769f, +0.425049f, +0.027769f}, - {+0.939196f, -0.019336f, -0.005463f}, - {+1.506310f, +0.042304f, -0.013085f}, - {+0.097198f, -0.040503f, +0.027506f}, - {-0.199749f, +0.009650f, +0.022317f}, - {-0.010773f, +0.015875f, -0.022610f}, - {-0.419039f, -0.009501f, +0.039624f}, - {+0.009683f, -0.056906f, +0.027608f}, - {-0.938023f, +0.007493f, +0.025082f}, - {-0.294888f, +0.009081f, +0.003714f}, - {+0.082675f, -0.002912f, +0.000293f}, - {-0.000563f, -0.091941f, +0.008199f}, - {+0.126495f, +0.024788f, -0.002184f}, - {+0.095176f, +0.081798f, -0.006897f}, - {+0.025925f, +0.024934f, -0.004698f} - }, - { - {-0.701719f, -0.197323f, -0.097152f}, - {+1.307210f, +0.059238f, -0.036759f}, - {+1.158895f, -0.116341f, -0.011892f}, - {+0.038869f, -0.081096f, +0.026731f}, - {-0.111036f, -0.024935f, -0.003673f}, - {-0.005417f, +0.058202f, -0.006901f}, - {-0.346534f, -0.036837f, +0.017249f}, - {+0.003885f, -0.099089f, +0.010285f}, - {-0.904817f, +0.000980f, +0.015822f}, - {-0.250498f, +0.017459f, +0.003023f}, - {+0.218266f, +0.018411f, -0.013033f}, - {+0.053818f, +0.015747f, +0.035387f}, - {-0.162010f, -0.044649f, +0.016738f}, - {-0.051528f, -0.041975f, -0.022436f}, - {-0.189698f, -0.017096f, +0.012923f} - }, - { - {-0.694634f, -0.219873f, -0.083472f}, - {+1.684359f, -0.120864f, -0.039343f}, - {+0.561143f, +0.176993f, -0.020577f}, - {-0.062577f, +0.108567f, -0.021231f}, - {-0.012692f, -0.018982f, -0.021456f}, - {+0.008198f, -0.015667f, +0.017857f}, - {-0.247732f, +0.019366f, -0.017116f}, - {-0.009519f, -0.000576f, -0.026702f}, - {-0.771969f, -0.012422f, -0.001228f}, - {-0.085011f, -0.036208f, -0.003034f}, - {+0.359359f, -0.049355f, -0.011943f}, - {+0.038205f, +0.086506f, +0.013225f}, - {-0.415529f, +0.073749f, +0.012774f}, - {-0.135129f, -0.031402f, -0.011451f}, - {-0.355882f, +0.046916f, +0.014863f} - }, - { - {-0.182498f, +0.322121f, +0.010241f}, - {+1.900568f, +0.091345f, -0.005709f}, - {-0.155864f, -0.137867f, -0.022653f}, - {-0.096194f, +0.031052f, -0.043575f}, - {+0.068478f, +0.049489f, -0.012186f}, - {+0.005906f, -0.039669f, +0.008576f}, - {-0.135982f, +0.042247f, -0.027610f}, - {+0.000506f, +0.073299f, +0.001993f}, - {-0.604694f, +0.032060f, -0.015018f}, - {+0.170610f, +0.053310f, -0.014928f}, - {+0.466765f, +0.037005f, +0.000603f}, - {-0.020209f, -0.054297f, -0.025128f}, - {-0.607218f, -0.049464f, -0.002105f}, - {-0.116376f, +0.048662f, +0.012616f}, - {-0.466284f, -0.037251f, +0.001009f} - }, - { - {+0.429851f, -0.176382f, +0.062340f}, - {+1.770925f, +0.083983f, +0.013377f}, - {-0.869796f, +0.077488f, +0.009019f}, - {-0.023705f, -0.132726f, +0.001520f}, - {+0.071054f, -0.018359f, +0.008061f}, - {-0.005806f, +0.025219f, -0.013189f}, - {-0.064177f, -0.056856f, -0.008916f}, - {+0.007860f, +0.019424f, +0.021845f}, - {-0.490397f, -0.047115f, -0.010762f}, - {+0.419019f, -0.069347f, -0.017210f}, - {+0.489851f, +0.015745f, +0.003572f}, - {-0.045070f, -0.044848f, -0.021676f}, - {-0.713268f, -0.002485f, -0.003409f}, - {-0.035895f, -0.001305f, +0.014503f}, - {-0.509375f, -0.004583f, -0.004560f} - }, - { - {+0.693452f, -0.037094f, +0.062983f}, - {+1.234486f, -0.230526f, -0.013903f}, - {-1.509974f, -0.095909f, +0.045554f}, - {+0.065406f, +0.021175f, +0.038088f}, - {-0.063361f, -0.057443f, +0.014041f}, - {-0.006221f, +0.032188f, -0.009996f}, - {-0.130515f, -0.002472f, +0.015272f}, - {-0.003344f, -0.063567f, -0.009796f}, - {-0.526438f, +0.016690f, +0.014095f}, - {+0.526046f, +0.043848f, +0.000937f}, - {+0.408227f, -0.051840f, -0.007626f}, - {-0.015404f, +0.050106f, +0.006338f}, - {-0.746530f, +0.019915f, +0.007159f}, - {+0.046692f, -0.012083f, -0.005406f}, - {-0.498282f, +0.022806f, +0.001661f} - }, - { - {+0.452282f, +0.255112f, +0.014429f}, - {+0.413311f, +0.217489f, -0.041553f}, - {-2.012329f, +0.132335f, +0.043582f}, - {+0.074513f, +0.072299f, +0.015550f}, - {-0.332659f, +0.110420f, -0.002506f}, - {+0.003936f, -0.025615f, +0.009662f}, - {-0.402227f, +0.102426f, +0.020003f}, - {-0.005906f, -0.045668f, -0.016305f}, - {-0.764317f, +0.087727f, +0.028390f}, - {+0.392194f, +0.052051f, +0.019617f}, - {+0.244099f, +0.046208f, -0.016359f}, - {+0.024888f, -0.005926f, +0.015739f}, - {-0.755240f, -0.000320f, +0.012387f}, - {+0.094368f, -0.019071f, -0.011155f}, - {-0.475719f, -0.010639f, +0.007195f} - }, - { - {-0.057870f, -0.243239f, -0.062681f}, - {-0.488601f, -0.132632f, -0.024105f}, - {-2.274488f, -0.075449f, +0.013122f}, - {+0.011058f, -0.050520f, -0.013955f}, - {-0.656336f, -0.066528f, -0.012634f}, - {+0.005934f, -0.022059f, +0.010016f}, - {-0.835078f, -0.150132f, +0.002332f}, - {+0.005755f, +0.039696f, +0.016335f}, - {-1.137939f, -0.147396f, +0.009474f}, - {+0.040220f, -0.141448f, +0.012427f}, - {+0.033530f, -0.028665f, -0.010546f}, - {+0.032441f, -0.020084f, +0.008702f}, - {-0.787271f, -0.022176f, +0.007828f}, - {+0.087182f, +0.017541f, +0.004303f}, - {-0.488631f, -0.013600f, +0.006335f} - }, - { - {-0.422081f, -0.034137f, -0.071137f}, - {-1.317702f, +0.095500f, +0.020761f}, - {-2.203521f, -0.058245f, -0.003414f}, - {-0.052621f, +0.004576f, -0.018473f}, - {-0.931858f, +0.015280f, +0.003861f}, - {-0.002030f, +0.024082f, -0.005542f}, - {-1.272381f, +0.091261f, -0.008863f}, - {+0.002712f, +0.062669f, +0.007167f}, - {-1.464630f, +0.073632f, -0.010550f}, - {-0.358809f, +0.117636f, -0.007999f}, - {-0.207114f, +0.038969f, +0.000934f}, - {+0.004125f, +0.030753f, -0.001828f}, - {-0.860245f, +0.028784f, +0.001523f}, - {+0.024576f, +0.027986f, +0.012469f}, - {-0.559354f, +0.029835f, +0.002076f} - }, - { - {-0.418471f, +0.201485f, +0.007778f}, - {-2.008348f, -0.127817f, +0.044194f}, - {-1.812974f, +0.155663f, +0.007154f}, - {-0.057302f, +0.036339f, -0.006424f}, - {-1.102120f, -0.021886f, +0.016993f}, - {-0.005724f, +0.008422f, -0.010341f}, - {-1.547365f, -0.012691f, +0.000618f}, - {-0.006455f, -0.004146f, -0.018260f}, - {-1.565942f, +0.034074f, -0.005038f}, - {-0.579626f, -0.009666f, -0.011630f}, - {-0.486122f, -0.068751f, +0.002643f}, - {-0.026165f, -0.017444f, -0.012012f}, - {-0.959883f, -0.022711f, -0.000128f}, - {-0.056604f, -0.047916f, +0.000561f}, - {-0.674369f, -0.030241f, +0.000001f} - }, - { - {-0.159097f, -0.096628f, +0.059657f}, - {-2.538435f, +0.144706f, +0.024837f}, - {-1.250993f, -0.158194f, +0.023835f}, - {-0.006764f, -0.032281f, +0.006504f}, - {-1.162308f, +0.024647f, +0.006024f}, - {+0.000404f, -0.028253f, +0.001927f}, - {-1.594186f, -0.024116f, +0.007975f}, - {+0.000657f, -0.056720f, +0.002178f}, - {-1.392818f, -0.090743f, +0.008086f}, - {-0.494314f, -0.073869f, -0.002863f}, - {-0.817812f, +0.078885f, -0.002734f}, - {-0.023969f, -0.022152f, -0.011768f}, - {-1.057861f, +0.010753f, +0.003473f}, - {-0.095452f, +0.011842f, -0.013010f}, - {-0.796320f, +0.019685f, +0.002381f} - }, - { - {+0.106795f, -0.039907f, +0.027045f}, - {-2.880650f, -0.045850f, +0.004655f}, - {-0.721393f, +0.083054f, +0.023238f}, - {+0.042055f, +0.002949f, +0.007039f}, - {-1.144586f, +0.016922f, -0.005027f}, - {+0.005806f, +0.000220f, +0.011669f}, - {-1.472334f, +0.053024f, +0.006261f}, - {+0.005526f, -0.021552f, +0.015425f}, - {-1.046507f, +0.096909f, +0.011310f}, - {-0.155057f, +0.102897f, -0.003142f}, - {-1.200656f, -0.053185f, +0.005988f}, - {+0.006479f, +0.042956f, +0.004210f}, - {-1.124901f, +0.007015f, +0.012676f}, - {-0.059027f, +0.036093f, -0.011452f}, - {-0.881942f, -0.000382f, +0.009400f} - }, - { - {+0.224391f, +0.041990f, -0.020747f}, - {-2.993706f, -0.110593f, +0.045578f}, - {-0.361837f, -0.012427f, +0.003973f}, - {+0.045047f, -0.001977f, +0.008463f}, - {-1.101737f, -0.064487f, +0.013918f}, - {+0.000463f, +0.034652f, -0.000132f}, - {-1.308903f, -0.082749f, +0.021321f}, - {-0.003389f, +0.043762f, -0.009812f}, - {-0.703438f, -0.078332f, +0.012588f}, - {+0.239986f, -0.105459f, -0.004102f}, - {-1.588540f, +0.021143f, +0.042305f}, - {+0.026945f, -0.008249f, +0.018680f}, - {-1.125952f, -0.020862f, +0.025801f}, - {+0.022025f, -0.049645f, +0.002105f}, - {-0.890391f, -0.016459f, +0.018642f} - }, - { - {+0.184642f, +0.006802f, -0.019893f}, - {-2.824141f, +0.108294f, +0.112373f}, - {-0.177062f, -0.000542f, -0.012326f}, - {+0.005984f, -0.027278f, +0.011800f}, - {-1.063372f, +0.044524f, +0.052246f}, - {-0.005976f, -0.002554f, -0.013353f}, - {-1.193252f, +0.058807f, +0.059389f}, - {-0.003278f, +0.045530f, -0.008896f}, - {-0.495849f, +0.044280f, +0.026054f}, - {+0.460259f, +0.060818f, +0.014226f}, - {-1.855139f, -0.040262f, +0.076546f}, - {+0.012571f, -0.046709f, +0.009176f}, - {-1.010339f, +0.013540f, +0.027012f}, - {+0.077774f, +0.022052f, +0.016078f}, - {-0.784673f, +0.018290f, +0.018712f} - }, - { - {+0.059196f, +0.003929f, +0.008106f}, - {-2.286989f, +0.059395f, +0.067545f}, - {-0.077852f, -0.011911f, -0.015109f}, - {-0.039545f, +0.079788f, -0.017441f}, - {-0.981039f, +0.057579f, +0.049746f}, - {-0.000552f, -0.040433f, -0.000008f}, - {-1.084454f, +0.063736f, +0.061257f}, - {+0.005181f, -0.015769f, +0.014975f}, - {-0.422723f, +0.031129f, +0.033909f}, - {+0.383208f, +0.054815f, +0.035686f}, - {-1.799579f, +0.095052f, +0.039004f}, - {-0.017405f, +0.047597f, -0.018931f}, - {-0.724847f, -0.012085f, -0.002971f}, - {+0.062036f, +0.032573f, +0.017405f}, - {-0.541913f, -0.020736f, -0.002764f} - }, - { - {-0.064424f, -0.057972f, +0.008713f}, - {-1.308363f, -0.023329f, -0.117920f}, - {+0.024978f, +0.018940f, -0.017833f}, - {-0.041409f, +0.034359f, -0.040056f}, - {-0.737327f, -0.102713f, -0.037075f}, - {+0.006532f, +0.001549f, +0.015583f}, - {-0.825854f, -0.147637f, -0.040942f}, - {-0.000538f, -0.057178f, -0.001505f}, - {-0.359121f, -0.115224f, -0.014199f}, - {+0.084870f, -0.184426f, +0.013420f}, - {-1.260099f, -0.008685f, -0.083395f}, - {-0.022016f, +0.040907f, -0.022277f}, - {-0.269401f, +0.076797f, -0.047683f}, - {-0.006094f, -0.075725f, -0.005918f}, - {-0.184013f, +0.067855f, -0.031593f} - }, - { - {-0.117167f, +0.041377f, -0.021705f}, - {-0.005286f, -0.490452f, -0.194448f}, - {+0.155198f, -0.050711f, -0.018485f}, - {+0.015691f, -0.177032f, +0.028815f}, - {-0.261721f, -0.126923f, -0.117957f}, - {-0.001443f, +0.059448f, -0.006308f}, - {-0.297654f, -0.116815f, -0.152479f}, - {-0.004210f, -0.031336f, -0.011520f}, - {-0.164335f, +0.005438f, -0.094020f}, - {-0.203847f, +0.164839f, -0.058303f}, - {-0.306030f, -0.376503f, -0.134389f}, - {+0.006748f, -0.086010f, +0.020030f}, - {+0.241259f, -0.209968f, -0.039860f}, - {-0.057865f, +0.023108f, -0.033416f}, - {+0.191475f, -0.147918f, -0.022810f} - }, - { - {-0.073701f, +0.086750f, -0.017560f}, - {+1.157381f, +0.858247f, +0.080234f}, - {+0.264439f, +0.078190f, +0.005441f}, - {+0.042456f, -0.106574f, +0.053490f}, - {+0.322579f, +0.471662f, -0.015999f}, - {-0.005002f, +0.040697f, -0.013144f}, - {+0.387873f, +0.592479f, -0.033125f}, - {+0.003996f, +0.027493f, +0.012375f}, - {+0.175212f, +0.327771f, -0.050066f}, - {-0.266658f, +0.119865f, -0.073006f}, - {+0.660959f, +0.665150f, +0.060775f}, - {+0.019457f, -0.064679f, +0.026033f}, - {+0.590790f, +0.209203f, +0.049770f}, - {-0.039846f, +0.104179f, -0.009259f}, - {+0.430095f, +0.124670f, +0.034507f} - }, - { - {+0.015367f, -0.099705f, +0.036338f}, - {+1.530494f, +0.036774f, +0.350316f}, - {+0.277896f, -0.003918f, +0.035655f}, - {-0.003804f, +0.159634f, -0.044149f}, - {+0.682415f, -0.226467f, +0.187620f}, - {+0.004102f, -0.024392f, +0.012576f}, - {+0.834371f, -0.332024f, +0.240896f}, - {-0.000994f, +0.060943f, -0.002091f}, - {+0.464117f, -0.301330f, +0.133821f}, - {-0.094158f, -0.316746f, +0.050929f}, - {+1.074692f, -0.033490f, +0.268560f}, - {-0.002143f, +0.070225f, -0.023541f}, - {+0.591353f, +0.126955f, +0.093164f}, - {+0.014835f, -0.051686f, +0.039038f}, - {+0.415721f, +0.099070f, +0.055525f} - }, - { - {+0.047807f, -0.115000f, +0.024628f}, - {+0.871819f, -1.450842f, -0.069675f}, - {+0.169285f, -0.151101f, +0.004566f}, - {-0.014797f, +0.200909f, -0.018973f}, - {+0.527658f, -0.674417f, +0.060727f}, - {+0.000099f, -0.058315f, -0.002464f}, - {+0.652333f, -0.864218f, +0.089751f}, - {-0.001060f, +0.060127f, -0.001254f}, - {+0.421733f, -0.443065f, +0.098482f}, - {+0.075732f, -0.083156f, +0.106738f}, - {+0.675379f, -1.072888f, -0.031008f}, - {-0.006396f, +0.098834f, -0.007631f}, - {+0.270175f, -0.451499f, -0.058713f}, - {+0.025847f, -0.121016f, +0.008121f}, - {+0.187943f, -0.284727f, -0.042036f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS] /* Q29 */= { { @@ -20182,863 +10525,7 @@ const Word32 rightHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA { -104797200, 22180822, -42998528, }, }, }; -#else -const float rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]= -{ - { - {-0.252426f, +0.362976f, -0.101272f}, - {+0.009746f, +0.032135f, -0.001005f}, - {-0.041389f, +0.219559f, -0.075244f}, - {-0.199783f, +0.476644f, -0.136155f}, - {+0.021832f, -0.202850f, +0.068670f}, - {-0.094399f, +0.626886f, -0.231894f}, - {+0.021343f, -0.250501f, +0.092969f}, - {-0.080197f, +0.572932f, -0.224147f}, - {+0.016573f, -0.239649f, +0.093367f}, - {-0.223408f, +0.321501f, -0.094987f}, - {+0.019084f, +0.136843f, -0.058073f}, - {-0.193077f, +0.654617f, -0.206180f}, - {-0.001692f, -0.041298f, +0.024983f}, - {-0.259689f, +0.369748f, -0.091616f}, - {-0.024623f, -0.055420f, +0.031858f} - }, - { - {-0.568159f, +0.333352f, -0.050823f}, - {+0.057589f, -0.094837f, -0.050323f}, - {-0.058363f, +0.033201f, -0.148437f}, - {-0.336362f, +0.338097f, -0.146507f}, - {-0.050666f, -0.220071f, +0.062671f}, - {-0.060818f, +0.867063f, -0.135030f}, - {-0.047671f, -0.288102f, +0.082913f}, - {-0.016662f, +1.031577f, -0.040322f}, - {-0.040486f, -0.341719f, +0.058177f}, - {-0.504799f, +0.424764f, +0.012327f}, - {+0.086011f, +0.193655f, -0.051669f}, - {-0.288338f, +0.471356f, -0.244582f}, - {-0.040577f, -0.173098f, -0.025333f}, - {-0.537558f, +0.205535f, -0.090137f}, - {-0.107401f, -0.185766f, -0.009351f} - }, - { - {-0.603783f, +0.016898f, +0.088263f}, - {+0.185461f, -0.259517f, -0.028611f}, - {+0.085783f, -0.585360f, +0.077994f}, - {-0.098432f, -0.240320f, +0.014376f}, - {-0.275727f, +0.151657f, -0.034942f}, - {+0.091867f, -0.134897f, +0.226004f}, - {-0.224813f, +0.096682f, -0.029791f}, - {+0.091102f, +0.252623f, +0.260884f}, - {-0.160867f, +0.120802f, -0.107958f}, - {-0.648021f, +0.366402f, +0.053859f}, - {+0.148482f, -0.127157f, +0.066761f}, - {+0.006657f, -0.551679f, +0.076549f}, - {-0.086806f, -0.182923f, -0.027078f}, - {-0.394359f, -0.137418f, +0.015442f}, - {-0.187386f, -0.124531f, -0.027416f} - }, - { - {-0.445141f, -0.203431f, -0.037600f}, - {+0.295099f, +0.204033f, +0.112117f}, - {+0.185293f, -0.198122f, +0.212327f}, - {+0.201802f, +0.127793f, +0.061482f}, - {-0.499831f, -0.001755f, -0.037616f}, - {+0.032573f, -0.572286f, +0.052378f}, - {-0.355382f, +0.059109f, -0.008126f}, - {-0.044020f, -0.726248f, -0.126557f}, - {-0.197342f, +0.235689f, -0.052018f}, - {-0.637301f, +0.225391f, -0.013606f}, - {+0.088356f, -0.356045f, -0.015711f}, - {+0.255444f, -0.000553f, +0.210836f}, - {-0.172744f, -0.022208f, +0.050545f}, - {-0.000691f, +0.123680f, +0.022293f}, - {-0.269532f, +0.005153f, +0.038296f} - }, - { - {-0.034797f, -0.385321f, -0.036494f}, - {+0.201556f, +0.345365f, +0.086457f}, - {+0.060960f, +0.460193f, -0.040799f}, - {+0.291890f, -0.017826f, +0.107892f}, - {-0.614672f, -0.046146f, -0.003786f}, - {-0.069383f, +0.071169f, -0.167274f}, - {-0.394941f, -0.025263f, +0.024793f}, - {-0.053934f, -0.644582f, -0.152850f}, - {-0.193963f, -0.007123f, +0.041127f}, - {-0.422552f, +0.101268f, +0.008593f}, - {+0.018473f, -0.189563f, -0.064795f}, - {+0.164459f, +0.445370f, +0.061512f}, - {-0.373705f, +0.214293f, -0.005754f}, - {+0.371780f, -0.112349f, +0.034345f}, - {-0.430525f, +0.157644f, +0.002400f} - }, - { - {+0.416182f, -0.095722f, -0.007744f}, - {-0.033928f, -0.466322f, -0.173216f}, - {-0.106258f, +0.101293f, -0.149492f}, - {+0.055241f, -0.502163f, -0.010316f}, - {-0.586638f, +0.109680f, +0.043164f}, - {-0.029521f, +0.389459f, -0.043642f}, - {-0.347625f, +0.011068f, +0.020946f}, - {+0.069354f, +0.253582f, +0.197218f}, - {-0.208450f, -0.113945f, +0.001564f}, - {-0.100593f, +0.188326f, -0.015623f}, - {+0.011284f, -0.023345f, +0.010578f}, - {-0.116804f, -0.258300f, -0.124299f}, - {-0.565508f, +0.009708f, -0.043984f}, - {+0.455115f, -0.088408f, +0.031182f}, - {-0.599852f, +0.019181f, -0.018817f} - }, - { - {+0.654728f, -0.125950f, -0.057210f}, - {-0.101926f, -0.468060f, -0.163914f}, - {-0.210669f, -0.374096f, +0.059232f}, - {-0.221043f, +0.001447f, -0.140044f}, - {-0.486236f, +0.078621f, +0.035746f}, - {+0.053275f, -0.117460f, +0.128891f}, - {-0.251634f, +0.002394f, +0.006412f}, - {+0.004540f, +0.716656f, +0.012490f}, - {-0.195937f, +0.017044f, -0.045101f}, - {+0.269818f, -0.023344f, +0.001404f}, - {-0.023876f, +0.086943f, -0.041043f}, - {-0.229349f, -0.155556f, -0.131557f}, - {-0.632528f, -0.064904f, +0.001583f}, - {+0.218817f, +0.137571f, -0.000827f}, - {-0.701220f, +0.002936f, +0.011380f} - }, - { - {+0.607297f, +0.091323f, +0.041776f}, - {-0.019803f, +0.350390f, +0.128080f}, - {-0.391531f, -0.296612f, +0.114777f}, - {-0.213069f, +0.267362f, -0.038309f}, - {-0.374457f, -0.035043f, -0.027502f}, - {+0.031530f, -0.308567f, +0.054617f}, - {-0.149953f, +0.004022f, -0.006847f}, - {-0.060647f, +0.237990f, -0.169946f}, - {-0.130768f, +0.112539f, -0.020612f}, - {+0.554477f, +0.122937f, +0.003398f}, - {-0.070530f, +0.176350f, -0.003859f}, - {-0.052411f, +0.382981f, +0.023069f}, - {-0.576269f, +0.024040f, +0.021559f}, - {-0.136160f, -0.144065f, -0.033829f}, - {-0.712362f, -0.021407f, +0.002869f} - }, - { - {+0.202885f, +0.354603f, +0.019837f}, - {-0.144775f, +0.366539f, +0.125312f}, - {-0.656706f, +0.285160f, -0.069621f}, - {-0.009022f, -0.142351f, +0.058751f}, - {-0.236700f, -0.120155f, -0.015090f}, - {-0.041823f, +0.131862f, -0.096368f}, - {-0.065125f, -0.004127f, -0.017607f}, - {+0.031817f, -0.431640f, +0.092903f}, - {-0.062407f, -0.054740f, +0.027981f}, - {+0.663648f, +0.083368f, +0.001657f}, - {-0.213850f, +0.126299f, +0.042829f}, - {+0.168107f, -0.041019f, +0.123804f}, - {-0.446160f, +0.001760f, +0.001401f}, - {-0.359231f, -0.037169f, -0.034599f}, - {-0.618696f, -0.035619f, -0.011711f} - }, - { - {-0.315897f, -0.116498f, -0.057578f}, - {-0.517408f, -0.311914f, -0.066345f}, - {-0.808547f, +0.208921f, -0.065451f}, - {+0.164991f, +0.012492f, +0.077849f}, - {-0.108486f, +0.036464f, +0.025206f}, - {-0.032037f, +0.236625f, -0.053914f}, - {-0.006924f, +0.066595f, -0.001710f}, - {+0.030739f, -0.432245f, +0.086307f}, - {-0.081416f, -0.127101f, -0.000295f}, - {+0.563338f, -0.042869f, -0.028584f}, - {-0.483248f, -0.169301f, -0.023816f}, - {+0.161044f, -0.238438f, +0.047974f}, - {-0.307294f, +0.056650f, -0.003561f}, - {-0.321523f, +0.137994f, +0.021609f}, - {-0.457444f, +0.096629f, +0.009126f} - }, - { - {-0.605373f, -0.061921f, -0.015945f}, - {-0.892316f, -0.064427f, -0.076962f}, - {-0.844181f, -0.108187f, +0.060583f}, - {+0.147378f, +0.251909f, -0.002167f}, - {-0.056134f, +0.102552f, -0.013769f}, - {+0.030720f, -0.133909f, +0.071835f}, - {-0.012891f, +0.033628f, +0.010795f}, - {-0.039999f, +0.087749f, -0.113515f}, - {-0.195165f, -0.000390f, -0.029825f}, - {+0.318943f, +0.044776f, -0.017514f}, - {-0.741169f, -0.000583f, -0.039531f}, - {-0.025961f, +0.151539f, -0.045602f}, - {-0.221333f, -0.019419f, +0.013435f}, - {-0.103050f, -0.017712f, +0.036895f}, - {-0.317124f, +0.007329f, +0.019107f} - }, - { - {-0.557984f, +0.065875f, +0.016445f}, - {-1.120903f, +0.080144f, +0.018175f}, - {-0.884231f, -0.135269f, +0.046808f}, - {+0.003216f, -0.028481f, -0.075145f}, - {-0.077929f, +0.058728f, -0.030673f}, - {+0.033662f, -0.151371f, +0.062117f}, - {-0.115087f, -0.059276f, -0.010281f}, - {-0.004131f, +0.344596f, -0.009515f}, - {-0.374813f, +0.000125f, +0.004524f}, - {-0.004833f, -0.037361f, +0.004495f}, - {-0.912750f, +0.037851f, +0.003038f}, - {-0.163112f, -0.012573f, -0.067595f}, - {-0.220544f, -0.058016f, +0.001506f}, - {+0.140668f, -0.036371f, -0.019325f}, - {-0.259778f, -0.046839f, -0.011680f} - }, - { - {-0.246497f, -0.109675f, +0.016140f}, - {-1.221626f, +0.047632f, +0.030008f}, - {-0.933392f, +0.056681f, -0.017499f}, - {-0.091651f, -0.139042f, -0.010254f}, - {-0.171095f, -0.041605f, +0.026621f}, - {-0.022645f, +0.182086f, -0.051792f}, - {-0.290514f, +0.010188f, -0.006824f}, - {+0.030810f, +0.083175f, +0.086532f}, - {-0.627425f, +0.108951f, +0.002544f}, - {-0.328857f, +0.063032f, +0.021845f}, - {-1.020831f, +0.019057f, +0.020782f}, - {-0.108081f, -0.130444f, -0.042983f}, - {-0.280032f, +0.046473f, -0.028272f}, - {+0.300294f, -0.091279f, -0.028877f}, - {-0.277472f, -0.015706f, -0.019343f} - }, - { - {+0.131072f, +0.074700f, +0.013352f}, - {-1.261601f, +0.026191f, +0.017613f}, - {-0.941829f, +0.046886f, -0.012836f}, - {-0.099901f, +0.012862f, +0.045621f}, - {-0.353481f, -0.137929f, +0.022451f}, - {-0.034480f, +0.136115f, -0.065105f}, - {-0.510801f, -0.045980f, +0.009742f}, - {-0.008255f, -0.204740f, -0.025135f}, - {-0.917422f, -0.048406f, -0.014328f}, - {-0.570501f, -0.078591f, +0.011175f}, - {-1.116831f, -0.043151f, +0.008325f}, - {+0.072193f, +0.210025f, +0.034944f}, - {-0.356994f, +0.057193f, -0.012919f}, - {+0.288756f, +0.034341f, +0.021124f}, - {-0.354704f, +0.011735f, +0.004829f} - }, - { - {+0.375845f, -0.029667f, +0.011368f}, - {-1.310698f, +0.011707f, +0.036488f}, - {-0.895246f, -0.026384f, +0.007846f}, - {-0.049179f, +0.069581f, +0.012119f}, - {-0.539669f, +0.067904f, -0.021122f}, - {+0.015114f, -0.158721f, +0.035543f}, - {-0.731214f, +0.055761f, +0.008363f}, - {-0.020681f, -0.110429f, -0.057197f}, - {-1.186932f, -0.029288f, +0.024750f}, - {-0.638496f, -0.003542f, -0.003329f}, - {-1.242362f, +0.046396f, -0.006496f}, - {+0.162585f, +0.000949f, +0.094194f}, - {-0.460859f, +0.005487f, +0.022316f}, - {+0.084492f, +0.100943f, +0.035245f}, - {-0.480357f, +0.043083f, +0.013686f} - }, - { - {+0.406719f, -0.063903f, +0.000895f}, - {-1.388116f, -0.121591f, +0.007121f}, - {-0.797164f, +0.024786f, +0.007914f}, - {+0.031219f, -0.031898f, -0.043192f}, - {-0.611124f, +0.038377f, -0.017126f}, - {+0.035199f, -0.054815f, +0.069678f}, - {-0.880465f, -0.025975f, +0.004620f}, - {+0.011721f, +0.131907f, +0.033689f}, - {-1.404186f, -0.094670f, +0.041334f}, - {-0.488232f, +0.072899f, +0.000864f}, - {-1.400823f, +0.006498f, +0.005128f}, - {+0.048912f, -0.264371f, +0.026588f}, - {-0.620764f, -0.091278f, +0.009966f}, - {-0.190119f, -0.153548f, -0.003990f}, - {-0.612140f, -0.044609f, +0.004905f} - }, - { - {+0.269059f, +0.096072f, -0.030661f}, - {-1.405102f, +0.019830f, -0.041741f}, - {-0.666786f, -0.023527f, +0.003952f}, - {+0.103468f, -0.138650f, -0.020612f}, - {-0.530962f, -0.087680f, +0.015089f}, - {-0.007181f, +0.202330f, -0.016542f}, - {-0.902420f, -0.004413f, +0.001425f}, - {+0.015712f, +0.105410f, +0.042774f}, - {-1.502401f, +0.093998f, -0.011299f}, - {-0.172241f, -0.083614f, +0.002581f}, - {-1.569118f, +0.036845f, +0.024497f}, - {-0.122389f, +0.164027f, -0.092715f}, - {-0.803267f, +0.042103f, -0.008593f}, - {-0.336065f, +0.028532f, -0.040891f}, - {-0.693482f, +0.032583f, -0.008445f} - }, - { - {+0.082021f, +0.015295f, -0.029273f}, - {-1.274381f, +0.177341f, -0.005087f}, - {-0.535412f, +0.022470f, +0.000520f}, - {+0.102058f, +0.071973f, +0.060127f}, - {-0.334115f, +0.039818f, +0.029288f}, - {-0.041062f, +0.003639f, -0.089029f}, - {-0.777172f, +0.053097f, +0.001406f}, - {-0.016470f, -0.131625f, -0.046620f}, - {-1.386620f, +0.100585f, -0.027634f}, - {+0.188348f, +0.085604f, +0.000778f}, - {-1.702053f, -0.064478f, +0.010836f}, - {-0.128587f, +0.202289f, -0.078786f}, - {-0.951614f, -0.008596f, -0.000227f}, - {-0.238200f, +0.121028f, -0.027134f}, - {-0.684947f, +0.039724f, -0.008766f} - }, - { - {-0.078962f, -0.040667f, +0.016621f}, - {-1.051815f, -0.065291f, +0.046901f}, - {-0.425406f, -0.012300f, -0.003324f}, - {-0.013857f, +0.185133f, +0.044846f}, - {-0.085264f, +0.021495f, -0.004172f}, - {+0.008706f, -0.314572f, +0.024262f}, - {-0.536045f, -0.067146f, +0.005754f}, - {-0.009257f, -0.187894f, -0.025034f}, - {-1.076846f, -0.153133f, +0.012899f}, - {+0.453290f, -0.035443f, -0.000604f}, - {-1.728620f, -0.002351f, -0.006254f}, - {+0.028237f, -0.256334f, +0.056283f}, - {-1.033293f, +0.006471f, +0.006369f}, - {+0.028364f, -0.161171f, +0.022674f}, - {-0.592133f, -0.068085f, +0.014448f} - }, - { - {-0.209567f, -0.044476f, +0.035293f}, - {-0.850866f, -0.060081f, +0.012367f}, - {-0.352597f, +0.002936f, -0.009918f}, - {-0.139788f, -0.163686f, -0.057909f}, - {+0.156716f, +0.020900f, -0.046467f}, - {+0.041202f, -0.126721f, +0.092016f}, - {-0.265746f, +0.022469f, -0.007668f}, - {+0.020433f, +0.027610f, +0.057030f}, - {-0.719398f, +0.058103f, +0.026893f}, - {+0.529109f, -0.009487f, -0.002510f}, - {-1.617744f, +0.065441f, -0.000589f}, - {+0.126800f, -0.104142f, +0.086642f}, - {-1.030739f, +0.027576f, +0.012449f}, - {+0.254306f, +0.004748f, +0.039010f}, - {-0.469348f, +0.001329f, +0.019123f} - }, - { - {-0.291614f, +0.072045f, +0.008669f}, - {-0.704994f, -0.001857f, -0.032356f}, - {-0.330377f, -0.015398f, -0.008902f}, - {-0.118408f, -0.127022f, -0.077956f}, - {+0.305490f, -0.088217f, -0.038597f}, - {-0.013990f, +0.238166f, -0.042427f}, - {-0.076791f, -0.013279f, -0.031489f}, - {-0.000655f, +0.182834f, -0.002752f}, - {-0.466729f, +0.029245f, -0.006311f}, - {+0.413278f, +0.058930f, -0.004232f}, - {-1.412340f, -0.081834f, +0.017017f}, - {+0.059815f, +0.180823f, -0.005402f}, - {-0.948672f, -0.013302f, +0.015703f}, - {+0.280636f, +0.098387f, -0.001029f}, - {-0.353125f, +0.011691f, -0.002686f} - }, - { - {-0.282982f, -0.038705f, -0.033749f}, - {-0.612204f, +0.074957f, -0.016719f}, - {-0.367094f, +0.018672f, +0.009545f}, - {+0.043674f, +0.265484f, +0.033672f}, - {+0.225838f, +0.044458f, +0.015442f}, - {-0.031796f, +0.152994f, -0.068402f}, - {-0.080339f, +0.026791f, -0.023361f}, - {-0.018979f, +0.050781f, -0.052748f}, - {-0.414119f, -0.046068f, -0.045478f}, - {+0.184054f, -0.070437f, -0.009958f}, - {-1.197874f, +0.025145f, +0.019789f}, - {-0.059848f, -0.044696f, -0.055601f}, - {-0.806769f, -0.004366f, -0.003547f}, - {+0.123667f, -0.047399f, -0.021850f}, - {-0.243914f, +0.012959f, -0.017814f} - }, - { - {-0.153592f, -0.151600f, -0.017359f}, - {-0.590457f, -0.027426f, +0.018181f}, - {-0.453375f, +0.040800f, +0.019251f}, - {+0.150267f, +0.058092f, +0.087405f}, - {-0.185914f, +0.157884f, +0.040381f}, - {+0.012941f, -0.147200f, +0.041441f}, - {-0.370093f, +0.045367f, +0.013384f}, - {+0.009851f, -0.159545f, +0.028260f}, - {-0.596085f, -0.026446f, -0.026980f}, - {-0.043489f, +0.034739f, -0.009117f}, - {-1.036040f, +0.005581f, +0.001597f}, - {-0.094605f, -0.081505f, -0.032452f}, - {-0.624380f, -0.045262f, -0.019488f}, - {-0.090928f, +0.014499f, +0.000113f}, - {-0.149839f, -0.036428f, -0.016043f} - }, - { - {+0.052738f, +0.128373f, +0.055065f}, - {-0.648165f, -0.063534f, +0.014939f}, - {-0.535241f, -0.069858f, -0.003891f}, - {+0.080904f, -0.219110f, -0.004018f}, - {-0.862572f, -0.266262f, +0.001282f}, - {+0.021715f, -0.125505f, +0.042828f}, - {-0.953088f, -0.182441f, +0.026892f}, - {+0.012421f, -0.141361f, +0.034156f}, - {-1.016573f, -0.044623f, +0.035676f}, - {-0.187252f, -0.004255f, -0.001005f}, - {-0.924930f, +0.018852f, -0.007346f}, - {-0.020719f, +0.099660f, +0.014347f}, - {-0.455082f, +0.062356f, -0.011024f}, - {-0.233378f, -0.040900f, +0.007062f}, - {-0.108207f, +0.031087f, -0.001307f} - }, - { - {+0.226352f, +0.134898f, +0.027173f}, - {-0.738046f, +0.053142f, -0.010563f}, - {-0.525795f, -0.013450f, -0.023475f}, - {-0.054340f, +0.020378f, -0.061004f}, - {-1.543326f, +0.137991f, -0.026188f}, - {-0.007143f, +0.068869f, -0.026710f}, - {-1.676436f, +0.213947f, +0.006985f}, - {-0.014554f, +0.055501f, -0.041156f}, - {-1.624133f, +0.228046f, +0.038888f}, - {-0.232392f, -0.012564f, +0.005502f}, - {-0.831934f, -0.022901f, -0.002870f}, - {+0.065274f, -0.013643f, +0.033485f}, - {-0.389275f, -0.026324f, +0.006822f}, - {-0.220736f, +0.001711f, -0.013541f}, - {-0.174428f, +0.030208f, +0.007158f} - }, - { - {+0.331098f, -0.099058f, -0.081219f}, - {-0.781969f, +0.015664f, -0.013942f}, - {-0.399112f, +0.065288f, -0.017726f}, - {-0.109110f, +0.110856f, -0.010673f}, - {-1.960453f, -0.000653f, -0.004832f}, - {-0.015007f, +0.052007f, -0.026966f}, - {-2.276175f, -0.117004f, -0.008654f}, - {-0.004171f, +0.131564f, -0.010820f}, - {-2.233906f, -0.204725f, -0.015921f}, - {-0.215465f, +0.015363f, +0.009391f}, - {-0.729841f, +0.018581f, -0.003238f}, - {+0.069211f, -0.051734f, +0.019397f}, - {-0.496172f, -0.058743f, +0.011723f}, - {-0.059531f, +0.087080f, -0.014858f}, - {-0.371337f, -0.073601f, +0.000564f} - }, - { - {+0.371202f, -0.175497f, -0.069389f}, - {-0.738388f, -0.046375f, +0.001540f}, - {-0.243317f, -0.061346f, -0.005711f}, - {-0.062802f, -0.017672f, +0.025304f}, - {-2.013822f, -0.062939f, +0.018690f}, - {+0.000148f, -0.050504f, +0.007953f}, - {-2.537886f, -0.015602f, -0.003764f}, - {+0.014190f, -0.003088f, +0.039676f}, - {-2.599729f, -0.021614f, -0.019729f}, - {-0.186255f, -0.001947f, +0.009920f}, - {-0.608148f, -0.036370f, -0.003399f}, - {-0.003043f, +0.077274f, -0.008375f}, - {-0.764126f, +0.104237f, -0.001366f}, - {+0.136964f, -0.089478f, +0.011296f}, - {-0.653928f, +0.065157f, -0.001655f} - }, - { - {+0.253340f, +0.170035f, +0.072899f}, - {-0.620704f, +0.040857f, +0.012465f}, - {-0.210596f, +0.006273f, +0.005387f}, - {+0.024043f, -0.024581f, -0.001278f}, - {-1.779665f, +0.104163f, +0.030959f}, - {+0.012593f, +0.002121f, +0.023380f}, - {-2.419311f, +0.123795f, +0.018778f}, - {-0.001873f, -0.121782f, -0.005835f}, - {-2.610043f, +0.113399f, +0.029507f}, - {-0.167639f, -0.008441f, +0.006329f}, - {-0.480872f, +0.036381f, +0.002730f}, - {-0.066072f, -0.025598f, -0.031514f}, - {-1.096432f, -0.082483f, -0.012006f}, - {+0.224041f, -0.003983f, +0.025833f}, - {-0.939740f, -0.061596f, +0.000882f} - }, - { - {-0.114798f, +0.231748f, +0.119242f}, - {-0.474089f, -0.005093f, +0.005082f}, - {-0.429108f, +0.096054f, +0.004364f}, - {+0.087354f, -0.045661f, -0.007546f}, - {-1.434480f, -0.060092f, +0.030100f}, - {+0.004089f, +0.061414f, +0.003486f}, - {-2.057338f, -0.122529f, +0.040767f}, - {-0.012502f, -0.045235f, -0.034722f}, - {-2.339244f, -0.067656f, +0.043250f}, - {-0.141971f, +0.005629f, +0.000253f}, - {-0.374704f, -0.009361f, +0.003183f}, - {-0.048209f, -0.073759f, -0.019619f}, - {-1.378250f, +0.025851f, -0.005617f}, - {+0.144419f, +0.089299f, +0.008712f}, - {-1.150667f, +0.030632f, +0.000355f} - }, - { - {-0.562947f, -0.375237f, -0.012263f}, - {-0.348716f, -0.013477f, -0.018911f}, - {-0.909858f, -0.140937f, -0.002793f}, - {+0.076015f, +0.018412f, +0.022057f}, - {-1.133854f, +0.011460f, +0.009135f}, - {-0.011616f, -0.019120f, -0.023590f}, - {-1.657263f, +0.041045f, +0.032704f}, - {+0.007833f, +0.103215f, +0.022494f}, - {-1.929738f, +0.064243f, +0.020197f}, - {-0.070913f, +0.018250f, -0.003996f}, - {-0.304411f, -0.008931f, -0.007043f}, - {+0.024458f, +0.080595f, +0.019551f}, - {-1.543561f, +0.014986f, +0.014525f}, - {-0.026833f, -0.079269f, -0.017534f}, - {-1.243643f, +0.016723f, +0.007671f} - }, - { - {-0.694549f, +0.017049f, -0.121802f}, - {-0.298745f, -0.002258f, -0.035550f}, - {-1.533048f, +0.138236f, +0.001729f}, - {-0.010659f, +0.088690f, +0.016338f}, - {-0.936621f, +0.006483f, -0.016463f}, - {-0.005273f, -0.066631f, -0.006502f}, - {-1.351069f, +0.010889f, -0.001760f}, - {+0.007200f, +0.108283f, +0.019668f}, - {-1.507596f, -0.062294f, +0.000600f}, - {+0.066412f, -0.038573f, -0.004741f}, - {-0.271104f, -0.000976f, -0.015561f}, - {+0.061730f, +0.017448f, +0.034569f}, - {-1.591535f, -0.003139f, +0.026563f}, - {-0.154019f, +0.003402f, -0.022846f}, - {-1.228280f, -0.026953f, +0.019401f} - }, - { - {-0.303960f, +0.374644f, -0.062934f}, - {-0.403804f, +0.013608f, -0.021139f}, - {-2.124203f, -0.124967f, +0.003990f}, - {-0.091464f, -0.074091f, -0.027034f}, - {-0.833001f, +0.025492f, -0.024241f}, - {+0.009573f, +0.013314f, +0.020543f}, - {-1.159470f, +0.003590f, -0.030274f}, - {-0.010154f, -0.018411f, -0.028732f}, - {-1.158548f, +0.046445f, -0.013083f}, - {+0.243504f, +0.038902f, -0.007197f}, - {-0.281374f, +0.016568f, -0.009188f}, - {+0.022548f, -0.093695f, +0.003504f}, - {-1.548756f, -0.015848f, +0.014389f}, - {-0.155501f, +0.061060f, -0.003811f}, - {-1.143217f, +0.000379f, +0.015268f} - }, - { - {+0.345133f, -0.316244f, +0.057317f}, - {-0.754172f, +0.047356f, +0.017128f}, - {-2.527297f, +0.036708f, +0.007460f}, - {-0.077697f, -0.059210f, -0.036987f}, - {-0.809344f, -0.040779f, -0.004786f}, - {+0.005609f, +0.047560f, +0.007549f}, - {-1.058183f, -0.053650f, -0.024975f}, - {-0.001284f, -0.083106f, -0.002993f}, - {-0.927106f, -0.045705f, -0.016523f}, - {+0.387520f, -0.025713f, -0.011614f}, - {-0.356838f, +0.005268f, +0.005530f}, - {-0.038913f, +0.041146f, -0.031965f}, - {-1.430253f, -0.015935f, -0.004184f}, - {-0.055606f, -0.056822f, +0.018159f}, - {-1.016503f, -0.006305f, -0.002495f} - }, - { - {+0.741400f, -0.009809f, +0.083165f}, - {-1.377624f, -0.186837f, +0.033433f}, - {-2.661220f, +0.055216f, +0.033016f}, - {+0.020144f, +0.131421f, +0.012022f}, - {-0.877243f, -0.007797f, +0.016913f}, - {-0.006896f, -0.020841f, -0.015267f}, - {-1.053072f, +0.040270f, +0.005590f}, - {+0.008643f, -0.009871f, +0.024095f}, - {-0.840621f, +0.031127f, -0.003468f}, - {+0.409452f, +0.009674f, -0.007146f}, - {-0.513242f, -0.056059f, +0.008039f}, - {-0.045767f, +0.069574f, -0.019470f}, - {-1.249764f, +0.063596f, -0.003911f}, - {+0.055746f, -0.007574f, +0.014735f}, - {-0.861503f, +0.047121f, -0.007384f} - }, - { - {+0.596605f, +0.213550f, +0.033039f}, - {-2.158506f, +0.248088f, +0.006335f}, - {-2.533200f, -0.054742f, +0.053044f}, - {+0.090988f, +0.003376f, +0.044057f}, - {-1.031360f, +0.063967f, +0.017460f}, - {-0.006156f, -0.035131f, -0.009519f}, - {-1.171621f, +0.030730f, +0.026937f}, - {-0.001937f, +0.068607f, -0.005942f}, - {-0.903039f, +0.004797f, +0.018222f}, - {+0.251493f, +0.029150f, +0.010360f}, - {-0.728222f, +0.070497f, -0.002636f}, - {+0.001084f, -0.056417f, +0.016060f}, - {-1.046985f, -0.062004f, +0.008675f}, - {+0.108840f, +0.028879f, -0.008008f}, - {-0.705411f, -0.049357f, +0.002544f} - }, - { - {+0.055090f, -0.271277f, -0.026731f}, - {-2.857675f, -0.128580f, -0.013488f}, - {-2.176794f, +0.034141f, +0.031881f}, - {+0.057748f, -0.110260f, +0.008245f}, - {-1.209063f, -0.074028f, +0.000038f}, - {+0.004858f, +0.026786f, +0.011441f}, - {-1.387072f, -0.091682f, +0.021904f}, - {-0.007031f, +0.031892f, -0.019502f}, - {-1.058712f, -0.067944f, +0.024260f}, - {-0.062852f, -0.093720f, +0.021531f}, - {-0.946341f, -0.039683f, -0.007015f}, - {+0.037379f, -0.017809f, +0.020177f}, - {-0.874955f, +0.023509f, +0.011931f}, - {+0.093743f, +0.005046f, -0.012655f}, - {-0.588414f, +0.019414f, +0.008224f} - }, - { - {-0.459530f, +0.136066f, -0.073104f}, - {-3.261738f, -0.024600f, +0.013505f}, - {-1.606635f, -0.095137f, -0.008278f}, - {-0.027839f, +0.040584f, -0.027111f}, - {-1.308314f, +0.002009f, -0.008574f}, - {+0.006117f, +0.028262f, +0.010087f}, - {-1.582156f, +0.076989f, -0.000076f}, - {+0.004701f, -0.054472f, +0.013482f}, - {-1.176358f, +0.072778f, +0.000525f}, - {-0.404515f, +0.119170f, +0.007549f}, - {-1.119820f, +0.006109f, +0.003297f}, - {+0.026968f, +0.037327f, +0.002351f}, - {-0.760010f, +0.000475f, +0.003831f}, - {+0.032179f, -0.007958f, +0.004584f}, - {-0.531835f, +0.006711f, +0.004916f} - }, - { - {-0.579324f, +0.156987f, -0.050289f}, - {-3.304399f, +0.077327f, +0.052783f}, - {-0.863150f, +0.193423f, -0.021526f}, - {-0.071817f, +0.030805f, -0.019184f}, - {-1.255216f, +0.067889f, +0.008066f}, - {-0.002992f, -0.024081f, -0.007690f}, - {-1.602102f, +0.025362f, -0.010273f}, - {+0.004416f, -0.057385f, +0.012021f}, - {-1.097993f, +0.039942f, -0.019089f}, - {-0.584562f, -0.037493f, -0.014374f}, - {-1.235605f, -0.005922f, +0.015507f}, - {-0.010203f, -0.022657f, -0.009280f}, - {-0.684984f, +0.004473f, -0.003007f}, - {-0.044953f, -0.029593f, +0.011150f}, - {-0.519957f, -0.010997f, -0.000436f} - }, - { - {-0.286410f, -0.259148f, +0.037277f}, - {-3.042752f, -0.055240f, +0.055762f}, - {-0.076425f, -0.208846f, -0.004764f}, - {-0.041537f, -0.048621f, +0.001905f}, - {-1.057524f, -0.054711f, +0.019597f}, - {-0.005778f, -0.014973f, -0.010026f}, - {-1.366191f, -0.115170f, +0.002752f}, - {-0.006355f, +0.021219f, -0.017995f}, - {-0.757989f, -0.145344f, -0.007538f}, - {-0.474765f, -0.088378f, -0.013868f}, - {-1.303781f, +0.019691f, +0.015466f}, - {-0.031836f, -0.000935f, -0.011965f}, - {-0.608126f, -0.022180f, -0.002375f}, - {-0.094679f, +0.034251f, -0.002925f}, - {-0.508460f, -0.004149f, -0.001651f} - }, - { - {+0.114954f, +0.059631f, +0.072965f}, - {-2.561481f, +0.058009f, +0.020761f}, - {+0.560215f, +0.119741f, +0.009368f}, - {+0.023665f, +0.026771f, +0.013776f}, - {-0.778586f, +0.037376f, +0.005470f}, - {+0.001141f, +0.025569f, +0.003541f}, - {-0.934860f, +0.119001f, +0.012968f}, - {-0.000961f, +0.061304f, -0.002271f}, - {-0.253423f, +0.143668f, +0.009368f}, - {-0.115710f, +0.134180f, +0.001573f}, - {-1.326987f, -0.007873f, +0.008890f}, - {-0.015982f, +0.030143f, -0.005520f}, - {-0.492615f, +0.037518f, +0.002448f}, - {-0.079087f, +0.012412f, -0.013697f}, - {-0.451060f, +0.024473f, +0.001447f} - }, - { - {+0.323947f, +0.113578f, +0.015549f}, - {-1.914278f, -0.144244f, -0.006317f}, - {+0.901146f, -0.000633f, +0.001221f}, - {+0.056621f, +0.017415f, +0.009508f}, - {-0.486031f, -0.062487f, -0.006628f}, - {+0.005750f, +0.003176f, +0.010924f}, - {-0.460561f, -0.095684f, +0.008436f}, - {+0.006138f, +0.009642f, +0.017284f}, - {+0.221745f, -0.084421f, +0.008896f}, - {+0.295524f, -0.090225f, +0.005470f}, - {-1.282596f, -0.033227f, +0.013009f}, - {+0.017081f, -0.032708f, +0.009204f}, - {-0.320490f, -0.048169f, +0.007190f}, - {-0.004452f, -0.049687f, -0.005870f}, - {-0.321645f, -0.040805f, +0.005349f} - }, - { - {+0.276466f, -0.082126f, -0.039402f}, - {-1.131086f, +0.240364f, +0.014659f}, - {+0.939436f, -0.066256f, -0.020157f}, - {+0.031245f, -0.021677f, +0.001488f}, - {-0.227874f, +0.081668f, +0.006464f}, - {+0.000131f, -0.031577f, -0.000810f}, - {-0.079943f, +0.077867f, +0.010680f}, - {-0.002114f, -0.051097f, -0.006205f}, - {+0.505579f, +0.022937f, +0.002111f}, - {+0.529896f, +0.026599f, +0.002639f}, - {-1.119787f, +0.067689f, +0.030053f}, - {+0.027535f, -0.008758f, +0.016240f}, - {-0.086495f, +0.052017f, +0.009012f}, - {+0.071205f, +0.035559f, +0.009161f}, - {-0.118065f, +0.048702f, +0.006679f} - }, - { - {+0.093440f, -0.004557f, -0.027073f}, - {-0.245787f, -0.191436f, +0.043587f}, - {+0.799589f, +0.049636f, -0.030640f}, - {-0.019046f, +0.019093f, +0.000438f}, - {-0.010885f, -0.044328f, +0.025258f}, - {-0.005866f, +0.001799f, -0.012476f}, - {+0.170216f, -0.034687f, +0.022513f}, - {-0.004590f, -0.033773f, -0.012630f}, - {+0.562981f, +0.020613f, +0.002338f}, - {+0.462468f, +0.040558f, +0.011199f}, - {-0.766124f, -0.063087f, +0.032731f}, - {+0.003866f, +0.047343f, +0.002184f}, - {+0.208773f, -0.041720f, +0.000150f}, - {+0.085394f, +0.009847f, +0.015388f}, - {+0.142942f, -0.041830f, -0.000134f} - }, - { - {-0.079123f, +0.007129f, +0.009727f}, - {+0.696618f, +0.032741f, -0.013106f}, - {+0.637741f, -0.009242f, -0.021655f}, - {-0.047028f, -0.036117f, -0.013542f}, - {+0.212381f, -0.027509f, +0.006723f}, - {-0.000617f, +0.037075f, -0.000220f}, - {+0.370842f, -0.041578f, +0.004859f}, - {+0.004430f, +0.032051f, +0.012864f}, - {+0.496527f, -0.056499f, -0.001248f}, - {+0.146069f, -0.116744f, +0.017775f}, - {-0.166525f, +0.044856f, -0.014703f}, - {-0.023099f, -0.027347f, -0.019267f}, - {+0.546556f, +0.035367f, -0.024737f}, - {+0.028754f, -0.048770f, +0.007240f}, - {+0.425139f, +0.034119f, -0.017706f} - }, - { - {-0.157237f, +0.030807f, +0.012105f}, - {+1.611496f, -0.047493f, -0.138771f}, - {+0.536727f, -0.004269f, -0.010405f}, - {-0.027394f, -0.029213f, -0.025646f}, - {+0.501885f, +0.028440f, -0.057516f}, - {+0.006221f, -0.003275f, +0.014398f}, - {+0.639827f, +0.055019f, -0.067764f}, - {+0.001591f, +0.053416f, +0.004360f}, - {+0.461536f, +0.068831f, -0.033617f}, - {-0.211469f, +0.148135f, -0.006826f}, - {+0.626469f, -0.114092f, -0.092853f}, - {-0.018761f, -0.043099f, -0.016105f}, - {+0.860019f, -0.064519f, -0.045475f}, - {-0.045626f, +0.052106f, -0.012787f}, - {+0.663833f, -0.048154f, -0.030845f} - }, - { - {-0.126579f, -0.010919f, -0.013520f}, - {+2.288775f, +0.330052f, -0.141825f}, - {+0.480184f, +0.010975f, -0.003821f}, - {+0.027378f, +0.130514f, +0.022104f}, - {+0.833876f, +0.128981f, -0.089877f}, - {+0.000006f, -0.048007f, -0.001802f}, - {+0.987530f, +0.132515f, -0.115028f}, - {-0.005361f, +0.003754f, -0.015136f}, - {+0.539461f, +0.030205f, -0.070546f}, - {-0.376693f, -0.051952f, -0.051245f}, - {+1.370192f, +0.300821f, -0.090103f}, - {+0.011481f, +0.068383f, +0.018910f}, - {+1.023463f, +0.103548f, -0.021626f}, - {-0.070294f, +0.005867f, -0.026624f}, - {+0.767991f, +0.065493f, -0.012744f} - }, - { - {-0.026353f, -0.076812f, -0.011309f}, - {+2.386202f, -0.393766f, +0.091076f}, - {+0.401155f, -0.012573f, +0.012460f}, - {+0.046392f, +0.057411f, +0.051335f}, - {+1.044143f, -0.283147f, +0.008993f}, - {-0.006407f, -0.010478f, -0.016041f}, - {+1.233210f, -0.363550f, +0.002070f}, - {+0.002791f, -0.054442f, +0.008337f}, - {+0.661388f, -0.218208f, -0.018346f}, - {-0.258425f, -0.166860f, -0.042541f}, - {+1.687434f, -0.323548f, +0.070274f}, - {+0.022238f, +0.046619f, +0.026404f}, - {+0.910899f, -0.034460f, +0.045920f}, - {-0.025130f, -0.092267f, -0.002499f}, - {+0.661856f, -0.004487f, +0.030559f} - }, - { - {+0.066021f, +0.074661f, +0.029510f}, - {+1.666633f, -0.360456f, +0.255929f}, - {+0.252047f, -0.048065f, +0.026719f}, - {-0.007792f, -0.195641f, -0.037030f}, - {+0.913916f, +0.010655f, +0.146689f}, - {+0.003378f, +0.059921f, +0.011523f}, - {+1.098128f, +0.060089f, +0.189069f}, - {+0.001509f, -0.062831f, +0.004239f}, - {+0.642839f, +0.126181f, +0.111015f}, - {+0.012758f, +0.255764f, +0.056444f}, - {+1.312690f, -0.234325f, +0.190640f}, - {-0.003813f, -0.090866f, -0.022023f}, - {+0.511605f, -0.213878f, +0.060443f}, - {+0.035742f, +0.045103f, +0.037370f}, - {+0.358843f, -0.156710f, +0.034608f} - }, - { - {+0.074139f, +0.095357f, +0.023821f}, - {+0.381358f, +1.206285f, -0.072122f}, - {+0.056394f, +0.128099f, -0.000093f}, - {-0.030944f, -0.168571f, -0.041583f}, - {+0.398811f, +0.586347f, +0.042243f}, - {+0.002280f, +0.072478f, +0.005368f}, - {+0.488122f, +0.738625f, +0.068185f}, - {-0.003028f, -0.029422f, -0.008868f}, - {+0.349465f, +0.388613f, +0.079712f}, - {+0.176056f, +0.077874f, +0.097877f}, - {+0.401381f, +0.902131f, -0.044484f}, - {-0.013871f, -0.089264f, -0.019111f}, - {+0.009642f, +0.355418f, -0.055057f}, - {+0.038242f, +0.114116f, +0.011546f}, - {+0.003022f, +0.223981f, -0.039576f} - }, - { - {+0.011203f, -0.103152f, -0.040501f}, - {-0.612178f, -0.198966f, -0.447896f}, - {-0.092947f, -0.064045f, -0.048583f}, - {+0.000469f, +0.055639f, +0.042364f}, - {-0.172174f, -0.393944f, -0.233061f}, - {-0.001945f, +0.039334f, -0.006788f}, - {-0.216767f, -0.541072f, -0.299361f}, - {+0.000571f, -0.002951f, +0.001970f}, - {-0.073951f, -0.446110f, -0.164206f}, - {+0.104268f, -0.348234f, -0.048377f}, - {-0.385812f, -0.226337f, -0.343728f}, - {+0.000090f, +0.017828f, +0.020908f}, - {-0.283739f, +0.046315f, -0.129419f}, - {-0.000956f, -0.033592f, -0.036908f}, - {-0.195200f, +0.041315f, -0.080091f} - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word16 hrtfShCoeffsRe_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS] /* Q14 */= { { @@ -21142,273 +10629,7 @@ const Word16 hrtfShCoeffsRe_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BIN } } }; -#else -const float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]= -{ - { - { - +0.931560f, +0.589490f, +0.238115f, -0.086594f, -0.378914f, +0.918065f, +0.908308f, +0.894808f, +0.866987f, +0.836386f, - +0.819051f, +0.808457f, +0.799283f, +0.784996f, +0.763671f, +0.758873f, +0.777150f, +0.798487f, +0.807411f, +0.799756f, - +0.784730f, +0.773583f, +0.765115f, +0.756028f, +0.747349f, +0.741855f, +0.746047f, +0.758681f, +0.767696f, +0.767210f, - +0.759324f, +0.746787f, +0.732363f, +0.718682f, +0.707117f, +0.697608f, +0.691290f, +0.690306f, +0.693724f, +0.697313f, - +0.698110f, +0.697117f, +0.698173f, +0.704038f, +0.714303f, +0.727029f, +0.740252f, +0.751165f, +0.758564f, +0.763392f, - +0.766644f, +0.476275f, +0.021569f, +0.014234f, +0.011348f, +0.009708f, +0.008627f, +0.007880f, +0.007331f, +0.006984f - }, - { - +0.153364f, +0.431722f, +0.223627f, -0.301076f, -0.722224f, +0.556999f, +0.565103f, +0.549432f, +0.582858f, +0.652605f, - +0.725752f, +0.768989f, +0.787009f, +0.795460f, +0.799903f, +0.802273f, +0.810592f, +0.819734f, +0.819713f, +0.811440f, - +0.810218f, +0.823687f, +0.847812f, +0.882959f, +0.916331f, +0.923092f, +0.897135f, +0.852425f, +0.807571f, +0.778572f, - +0.764796f, +0.754260f, +0.742158f, +0.732054f, +0.724750f, +0.718657f, +0.717707f, +0.728664f, +0.752080f, +0.779872f, - +0.802697f, +0.816824f, +0.824778f, +0.830921f, +0.836340f, +0.839993f, +0.842458f, +0.844537f, +0.846022f, +0.846444f, - +0.845634f, +0.519355f, +0.013685f, +0.004231f, +0.000639f, -0.001743f, -0.003484f, -0.004764f, -0.005716f, -0.006342f - }, - { - +0.116550f, +0.029982f, -0.090957f, -0.110646f, -0.118380f, +0.164545f, +0.157003f, +0.141182f, +0.129273f, +0.111996f, - +0.147830f, +0.204091f, +0.287029f, +0.400304f, +0.498327f, +0.520367f, +0.451929f, +0.319838f, +0.163989f, +0.032354f, - -0.042553f, -0.060144f, -0.040752f, -0.013808f, +0.000138f, -0.005386f, -0.028033f, -0.056626f, -0.076148f, -0.071775f, - -0.036161f, +0.022235f, +0.079923f, +0.117243f, +0.132960f, +0.137374f, +0.136857f, +0.131489f, +0.122150f, +0.112795f, - +0.106854f, +0.101987f, +0.090861f, +0.069094f, +0.037690f, -0.001570f, -0.046208f, -0.089113f, -0.124780f, -0.152938f, - -0.172930f, -0.116660f, -0.004115f, -0.001599f, -0.000541f, +0.000076f, +0.000490f, +0.000781f, +0.000995f, +0.001134f - }, - { - +0.082564f, +0.045748f, -0.100405f, -0.164616f, -0.222135f, +0.214978f, +0.289164f, +0.366751f, +0.467015f, +0.536298f, - +0.539710f, +0.520805f, +0.484049f, +0.427086f, +0.396728f, +0.377012f, +0.337930f, +0.285243f, +0.217171f, +0.132009f, - +0.046348f, -0.022295f, -0.070187f, -0.092267f, -0.077417f, -0.017841f, +0.082276f, +0.200597f, +0.305996f, +0.384055f, - +0.437163f, +0.477207f, +0.515520f, +0.552589f, +0.576862f, +0.576107f, +0.552740f, +0.521313f, +0.495097f, +0.480391f, - +0.476238f, +0.478234f, +0.481677f, +0.482298f, +0.476112f, +0.459832f, +0.433225f, +0.402349f, +0.373577f, +0.349500f, - +0.331993f, +0.196598f, +0.008828f, +0.006124f, +0.005015f, +0.004377f, +0.003953f, +0.003666f, +0.003455f, +0.003322f - }, - { - +0.003514f, -0.046208f, -0.169189f, -0.246290f, -0.258608f, +0.123594f, +0.193752f, +0.277639f, +0.358490f, +0.412970f, - +0.375502f, +0.335121f, +0.313658f, +0.292262f, +0.289663f, +0.299499f, +0.304389f, +0.287189f, +0.236107f, +0.144024f, - +0.032821f, -0.070365f, -0.149507f, -0.187444f, -0.180044f, -0.144272f, -0.102205f, -0.062405f, -0.023790f, +0.014970f, - +0.051711f, +0.089890f, +0.137092f, +0.185775f, +0.210322f, +0.196357f, +0.159984f, +0.132056f, +0.131975f, +0.158785f, - +0.198654f, +0.237349f, +0.267138f, +0.288631f, +0.306064f, +0.320945f, +0.330270f, +0.332422f, +0.328795f, +0.320830f, - +0.310872f, +0.187382f, +0.005468f, +0.001915f, +0.000434f, -0.000505f, -0.001165f, -0.001641f, -0.001991f, -0.002211f - }, - { - -0.013914f, +0.020481f, -0.177151f, -0.153853f, -0.123281f, +0.036226f, +0.012165f, -0.059498f, -0.118703f, -0.132408f, - -0.083769f, -0.028816f, +0.010439f, +0.073641f, +0.151111f, +0.179257f, +0.122167f, -0.005411f, -0.171409f, -0.319887f, - -0.406332f, -0.430666f, -0.412015f, -0.355554f, -0.251589f, -0.114356f, +0.007079f, +0.075058f, +0.090668f, +0.081196f, - +0.074468f, +0.080971f, +0.090434f, +0.084438f, +0.060093f, +0.030473f, +0.006048f, -0.011097f, -0.020590f, -0.019141f, - -0.003724f, +0.020621f, +0.041568f, +0.049068f, +0.040365f, +0.016570f, -0.017826f, -0.053778f, -0.084772f, -0.109921f, - -0.128269f, -0.087720f, -0.005379f, -0.003683f, -0.002987f, -0.002556f, -0.002255f, -0.002029f, -0.001849f, -0.001721f - }, - { - -0.011077f, +0.068268f, +0.172045f, +0.224907f, +0.203958f, -0.141636f, -0.177909f, -0.173456f, -0.154997f, -0.177581f, - -0.193129f, -0.200675f, -0.206181f, -0.214819f, -0.189032f, -0.095163f, +0.041087f, +0.161032f, +0.223656f, +0.217536f, - +0.144366f, +0.019748f, -0.128357f, -0.264169f, -0.342543f, -0.342225f, -0.294756f, -0.250400f, -0.244775f, -0.284375f, - -0.346925f, -0.405676f, -0.451837f, -0.491950f, -0.524795f, -0.539708f, -0.531569f, -0.507105f, -0.477798f, -0.451524f, - -0.430027f, -0.409991f, -0.385628f, -0.353400f, -0.313904f, -0.270406f, -0.228673f, -0.195310f, -0.172245f, -0.157165f, - -0.147622f, -0.088637f, -0.002701f, -0.000757f, -0.000102f, +0.000326f, +0.000623f, +0.000845f, +0.001012f, +0.001117f - }, - { - +0.012737f, -0.122413f, -0.162191f, -0.048954f, -0.011887f, -0.006284f, -0.059137f, -0.075306f, -0.039450f, -0.013641f, - +0.045456f, +0.080111f, +0.103447f, +0.126400f, +0.143692f, +0.144628f, +0.151274f, +0.185913f, +0.238389f, +0.293656f, - +0.325256f, +0.310455f, +0.248320f, +0.125814f, -0.065585f, -0.279482f, -0.445586f, -0.528904f, -0.532954f, -0.480876f, - -0.402256f, -0.318153f, -0.233483f, -0.146163f, -0.062900f, +0.003457f, +0.047237f, +0.075491f, +0.099694f, +0.124312f, - +0.146112f, +0.160783f, +0.167687f, +0.170589f, +0.175305f, +0.185793f, +0.200659f, +0.215074f, +0.226218f, +0.233509f, - +0.236369f, +0.146507f, +0.006425f, +0.003570f, +0.002320f, +0.001557f, +0.001038f, +0.000666f, +0.000389f, +0.000202f - }, - { - +0.029441f, +0.255135f, +0.388005f, +0.324509f, +0.179661f, +0.170310f, +0.199090f, +0.247152f, +0.215232f, +0.107372f, - +0.008342f, -0.045561f, -0.073414f, -0.101929f, -0.145853f, -0.188184f, -0.218566f, -0.229908f, -0.227139f, -0.213922f, - -0.197983f, -0.187165f, -0.178153f, -0.183267f, -0.213808f, -0.243068f, -0.221134f, -0.135714f, -0.022342f, +0.076608f, - +0.151824f, +0.214097f, +0.269402f, +0.314773f, +0.344233f, +0.355048f, +0.346502f, +0.321399f, +0.286050f, +0.247674f, - +0.212622f, +0.185179f, +0.166697f, +0.155655f, +0.148981f, +0.143401f, +0.135815f, +0.125610f, +0.114535f, +0.104436f, - +0.097691f, +0.053982f, +0.004390f, +0.004991f, +0.005112f, +0.005266f, +0.005387f, +0.005507f, +0.005600f, +0.005657f - }, - { - -0.041114f, -0.246567f, -0.453640f, -0.578453f, -0.486412f, +0.085090f, +0.077743f, +0.105123f, +0.097004f, +0.045376f, - +0.020819f, +0.016253f, +0.032947f, +0.042605f, +0.033758f, +0.016413f, -0.007617f, -0.029954f, -0.049569f, -0.072006f, - -0.091910f, -0.092490f, -0.068505f, -0.047173f, -0.058854f, -0.098422f, -0.131962f, -0.131305f, -0.096674f, -0.045232f, - +0.016136f, +0.088833f, +0.169184f, +0.242523f, +0.287880f, +0.297628f, +0.284744f, +0.271800f, +0.274450f, +0.292315f, - +0.315219f, +0.333992f, +0.345833f, +0.354700f, +0.364920f, +0.377015f, +0.386323f, +0.388549f, +0.384259f, +0.374493f, - +0.360625f, +0.216189f, +0.003741f, -0.001455f, -0.003488f, -0.004851f, -0.005842f, -0.006588f, -0.007154f, -0.007521f - }, - { - -0.001575f, +0.034404f, -0.099063f, -0.057191f, +0.005967f, +0.008737f, +0.002839f, -0.023739f, +0.002327f, +0.047119f, - +0.071338f, +0.062023f, +0.056518f, +0.075939f, +0.095829f, +0.111755f, +0.130192f, +0.158682f, +0.192417f, +0.228710f, - +0.262770f, +0.285090f, +0.275706f, +0.204512f, +0.075591f, -0.061762f, -0.166412f, -0.231582f, -0.264188f, -0.274397f, - -0.272990f, -0.267274f, -0.254902f, -0.232321f, -0.205252f, -0.184838f, -0.177638f, -0.176928f, -0.167497f, -0.139224f, - -0.092627f, -0.036902f, +0.016017f, +0.057208f, +0.085094f, +0.105460f, +0.126261f, +0.149970f, +0.174030f, +0.196813f, - +0.215950f, +0.143890f, +0.006512f, +0.003675f, +0.002495f, +0.001778f, +0.001286f, +0.000926f, +0.000653f, +0.000468f - }, - { - -0.028351f, -0.158366f, -0.387375f, -0.209323f, -0.138479f, +0.024944f, +0.076050f, +0.068784f, +0.086894f, +0.022640f, - -0.046924f, -0.098681f, -0.157850f, -0.216715f, -0.230469f, -0.177937f, -0.056736f, +0.099412f, +0.230053f, +0.293062f, - +0.274665f, +0.188848f, +0.054201f, -0.120177f, -0.294891f, -0.394157f, -0.378101f, -0.280693f, -0.170935f, -0.092689f, - -0.049777f, -0.036466f, -0.052499f, -0.093934f, -0.142595f, -0.175682f, -0.184503f, -0.177658f, -0.170605f, -0.173641f, - -0.186618f, -0.200281f, -0.202941f, -0.188511f, -0.159081f, -0.120865f, -0.081855f, -0.050347f, -0.028940f, -0.016023f, - -0.010660f, -0.004676f, -0.001512f, -0.002489f, -0.002909f, -0.003234f, -0.003490f, -0.003708f, -0.003879f, -0.003976f - }, - { - -0.012536f, -0.024508f, +0.026715f, +0.100256f, +0.030165f, -0.019036f, -0.001980f, +0.053411f, +0.062729f, +0.042787f, - +0.037541f, +0.042995f, +0.032630f, -0.006363f, -0.069971f, -0.130620f, -0.144750f, -0.095861f, +0.019571f, +0.165595f, - +0.287776f, +0.359211f, +0.370344f, +0.312965f, +0.207299f, +0.103383f, +0.034254f, +0.002634f, +0.000632f, +0.017232f, - +0.044292f, +0.070055f, +0.076868f, +0.050271f, -0.014441f, -0.103260f, -0.190056f, -0.255807f, -0.297413f, -0.321963f, - -0.337614f, -0.347902f, -0.352331f, -0.349280f, -0.338882f, -0.321988f, -0.297068f, -0.266207f, -0.234929f, -0.205756f, - -0.181333f, -0.099905f, -0.004409f, -0.003069f, -0.002383f, -0.001976f, -0.001706f, -0.001520f, -0.001384f, -0.001294f - }, - { - -0.035759f, -0.028302f, +0.056431f, +0.144293f, +0.088149f, -0.053194f, -0.088872f, -0.078778f, -0.083787f, -0.070879f, - -0.044081f, -0.064468f, -0.084007f, -0.069723f, -0.065974f, -0.065725f, -0.028666f, +0.041152f, +0.101149f, +0.149485f, - +0.178233f, +0.189381f, +0.210408f, +0.258912f, +0.327924f, +0.370146f, +0.333626f, +0.220608f, +0.075539f, -0.065890f, - -0.187899f, -0.284687f, -0.349780f, -0.377256f, -0.364619f, -0.319560f, -0.262043f, -0.211477f, -0.176684f, -0.155472f, - -0.138294f, -0.114703f, -0.080295f, -0.040726f, -0.007428f, +0.011160f, +0.014827f, +0.010699f, +0.005174f, +0.001704f, - +0.001420f, +0.001014f, -0.000876f, -0.000438f, -0.000227f, -0.000068f, +0.000051f, +0.000148f, +0.000219f, +0.000266f - }, - { - +0.006625f, -0.028791f, -0.110750f, +0.054204f, +0.049674f, -0.081883f, -0.031641f, +0.002710f, +0.078824f, +0.101542f, - +0.075137f, +0.045466f, +0.054841f, +0.071727f, +0.069146f, +0.060555f, +0.070378f, +0.108883f, +0.172304f, +0.238963f, - +0.284300f, +0.307237f, +0.320185f, +0.308402f, +0.229243f, +0.069136f, -0.124082f, -0.287351f, -0.389327f, -0.427896f, - -0.417142f, -0.373698f, -0.302766f, -0.196446f, -0.061231f, +0.073312f, +0.179141f, +0.248754f, +0.289902f, +0.309552f, - +0.307579f, +0.283972f, +0.243621f, +0.194795f, +0.147699f, +0.110790f, +0.086424f, +0.072421f, +0.065314f, +0.061874f, - +0.059680f, +0.034356f, +0.001808f, +0.001292f, +0.001117f, +0.000966f, +0.000841f, +0.000731f, +0.000643f, +0.000577f - }, - { - +0.000088f, +0.014221f, -0.031471f, -0.012506f, +0.016816f, -0.022850f, -0.080939f, -0.132222f, -0.131943f, -0.137399f, - -0.094433f, -0.042539f, -0.032957f, -0.046202f, -0.048525f, -0.059770f, -0.084778f, -0.088776f, -0.061042f, -0.014146f, - +0.040389f, +0.099574f, +0.156222f, +0.193208f, +0.193160f, +0.165499f, +0.148012f, +0.164330f, +0.198656f, +0.229866f, - +0.254546f, +0.275046f, +0.287016f, +0.293580f, +0.312690f, +0.352380f, +0.396514f, +0.417891f, +0.401549f, +0.353465f, - +0.291737f, +0.233593f, +0.189322f, +0.157681f, +0.127979f, +0.091171f, +0.047074f, +0.003648f, -0.032270f, -0.058776f, - -0.074801f, -0.053275f, -0.002235f, -0.000782f, -0.000024f, +0.000460f, +0.000788f, +0.001026f, +0.001200f, +0.001310f - } - }, - { - { - +0.931560f, +0.589490f, +0.238115f, -0.086594f, -0.378914f, +0.918065f, +0.908308f, +0.894808f, +0.866987f, +0.836386f, - +0.819051f, +0.808457f, +0.799283f, +0.784996f, +0.763671f, +0.758873f, +0.777150f, +0.798487f, +0.807411f, +0.799756f, - +0.784730f, +0.773583f, +0.765115f, +0.756028f, +0.747349f, +0.741855f, +0.746047f, +0.758681f, +0.767696f, +0.767210f, - +0.759324f, +0.746787f, +0.732363f, +0.718682f, +0.707117f, +0.697608f, +0.691290f, +0.690306f, +0.693724f, +0.697313f, - +0.698110f, +0.697117f, +0.698173f, +0.704038f, +0.714303f, +0.727029f, +0.740252f, +0.751165f, +0.758564f, +0.763392f, - +0.766644f, +0.476275f, +0.021569f, +0.014234f, +0.011348f, +0.009708f, +0.008627f, +0.007880f, +0.007331f, +0.006984f - }, - { - -0.153364f, -0.431722f, -0.223627f, +0.301076f, +0.722224f, -0.556999f, -0.565103f, -0.549432f, -0.582858f, -0.652605f, - -0.725752f, -0.768989f, -0.787009f, -0.795460f, -0.799903f, -0.802273f, -0.810592f, -0.819734f, -0.819713f, -0.811440f, - -0.810218f, -0.823687f, -0.847812f, -0.882959f, -0.916331f, -0.923092f, -0.897135f, -0.852425f, -0.807571f, -0.778572f, - -0.764796f, -0.754260f, -0.742158f, -0.732054f, -0.724750f, -0.718657f, -0.717707f, -0.728664f, -0.752080f, -0.779872f, - -0.802697f, -0.816824f, -0.824778f, -0.830921f, -0.836340f, -0.839993f, -0.842458f, -0.844537f, -0.846022f, -0.846444f, - -0.845634f, -0.519355f, -0.013685f, -0.004231f, -0.000639f, +0.001743f, +0.003484f, +0.004764f, +0.005716f, +0.006342f - }, - { - +0.116550f, +0.029982f, -0.090957f, -0.110646f, -0.118380f, +0.164545f, +0.157003f, +0.141182f, +0.129273f, +0.111996f, - +0.147830f, +0.204091f, +0.287029f, +0.400304f, +0.498327f, +0.520367f, +0.451929f, +0.319838f, +0.163989f, +0.032354f, - -0.042553f, -0.060144f, -0.040752f, -0.013808f, +0.000138f, -0.005386f, -0.028033f, -0.056626f, -0.076148f, -0.071775f, - -0.036161f, +0.022235f, +0.079923f, +0.117243f, +0.132960f, +0.137374f, +0.136857f, +0.131489f, +0.122150f, +0.112795f, - +0.106854f, +0.101987f, +0.090861f, +0.069094f, +0.037690f, -0.001570f, -0.046208f, -0.089113f, -0.124780f, -0.152938f, - -0.172930f, -0.116660f, -0.004115f, -0.001599f, -0.000541f, +0.000076f, +0.000490f, +0.000781f, +0.000995f, +0.001134f - }, - { - +0.082564f, +0.045748f, -0.100405f, -0.164616f, -0.222135f, +0.214978f, +0.289164f, +0.366751f, +0.467015f, +0.536298f, - +0.539710f, +0.520805f, +0.484049f, +0.427086f, +0.396728f, +0.377012f, +0.337930f, +0.285243f, +0.217171f, +0.132009f, - +0.046348f, -0.022295f, -0.070187f, -0.092267f, -0.077417f, -0.017841f, +0.082276f, +0.200597f, +0.305996f, +0.384055f, - +0.437163f, +0.477207f, +0.515520f, +0.552589f, +0.576862f, +0.576107f, +0.552740f, +0.521313f, +0.495097f, +0.480391f, - +0.476238f, +0.478234f, +0.481677f, +0.482298f, +0.476112f, +0.459832f, +0.433225f, +0.402349f, +0.373577f, +0.349500f, - +0.331993f, +0.196598f, +0.008828f, +0.006124f, +0.005015f, +0.004377f, +0.003953f, +0.003666f, +0.003455f, +0.003322f - }, - { - -0.003514f, +0.046208f, +0.169189f, +0.246290f, +0.258608f, -0.123594f, -0.193752f, -0.277639f, -0.358490f, -0.412970f, - -0.375502f, -0.335121f, -0.313658f, -0.292262f, -0.289663f, -0.299499f, -0.304389f, -0.287189f, -0.236107f, -0.144024f, - -0.032821f, +0.070365f, +0.149507f, +0.187444f, +0.180044f, +0.144272f, +0.102205f, +0.062405f, +0.023790f, -0.014970f, - -0.051711f, -0.089890f, -0.137092f, -0.185775f, -0.210322f, -0.196357f, -0.159984f, -0.132056f, -0.131975f, -0.158785f, - -0.198654f, -0.237349f, -0.267138f, -0.288631f, -0.306064f, -0.320945f, -0.330270f, -0.332422f, -0.328795f, -0.320830f, - -0.310872f, -0.187382f, -0.005468f, -0.001915f, -0.000434f, +0.000505f, +0.001165f, +0.001641f, +0.001991f, +0.002211f - }, - { - +0.013914f, -0.020481f, +0.177151f, +0.153853f, +0.123281f, -0.036226f, -0.012165f, +0.059498f, +0.118703f, +0.132408f, - +0.083769f, +0.028816f, -0.010439f, -0.073641f, -0.151111f, -0.179257f, -0.122167f, +0.005411f, +0.171409f, +0.319887f, - +0.406332f, +0.430666f, +0.412015f, +0.355554f, +0.251589f, +0.114356f, -0.007079f, -0.075058f, -0.090668f, -0.081196f, - -0.074468f, -0.080971f, -0.090434f, -0.084438f, -0.060093f, -0.030473f, -0.006048f, +0.011097f, +0.020590f, +0.019141f, - +0.003724f, -0.020621f, -0.041568f, -0.049068f, -0.040365f, -0.016570f, +0.017826f, +0.053778f, +0.084772f, +0.109921f, - +0.128269f, +0.087720f, +0.005379f, +0.003683f, +0.002987f, +0.002556f, +0.002255f, +0.002029f, +0.001849f, +0.001721f - }, - { - -0.011077f, +0.068268f, +0.172045f, +0.224907f, +0.203958f, -0.141636f, -0.177909f, -0.173456f, -0.154997f, -0.177581f, - -0.193129f, -0.200675f, -0.206181f, -0.214819f, -0.189032f, -0.095163f, +0.041087f, +0.161032f, +0.223656f, +0.217536f, - +0.144366f, +0.019748f, -0.128357f, -0.264169f, -0.342543f, -0.342225f, -0.294756f, -0.250400f, -0.244775f, -0.284375f, - -0.346925f, -0.405676f, -0.451837f, -0.491950f, -0.524795f, -0.539708f, -0.531569f, -0.507105f, -0.477798f, -0.451524f, - -0.430027f, -0.409991f, -0.385628f, -0.353400f, -0.313904f, -0.270406f, -0.228673f, -0.195310f, -0.172245f, -0.157165f, - -0.147622f, -0.088637f, -0.002701f, -0.000757f, -0.000102f, +0.000326f, +0.000623f, +0.000845f, +0.001012f, +0.001117f - }, - { - +0.012737f, -0.122413f, -0.162191f, -0.048954f, -0.011887f, -0.006284f, -0.059137f, -0.075306f, -0.039450f, -0.013641f, - +0.045456f, +0.080111f, +0.103447f, +0.126400f, +0.143692f, +0.144628f, +0.151274f, +0.185913f, +0.238389f, +0.293656f, - +0.325256f, +0.310455f, +0.248320f, +0.125814f, -0.065585f, -0.279482f, -0.445586f, -0.528904f, -0.532954f, -0.480876f, - -0.402256f, -0.318153f, -0.233483f, -0.146163f, -0.062900f, +0.003457f, +0.047237f, +0.075491f, +0.099694f, +0.124312f, - +0.146112f, +0.160783f, +0.167687f, +0.170589f, +0.175305f, +0.185793f, +0.200659f, +0.215074f, +0.226218f, +0.233509f, - +0.236369f, +0.146507f, +0.006425f, +0.003570f, +0.002320f, +0.001557f, +0.001038f, +0.000666f, +0.000389f, +0.000202f - }, - { - +0.029441f, +0.255135f, +0.388005f, +0.324509f, +0.179661f, +0.170310f, +0.199090f, +0.247152f, +0.215232f, +0.107372f, - +0.008342f, -0.045561f, -0.073414f, -0.101929f, -0.145853f, -0.188184f, -0.218566f, -0.229908f, -0.227139f, -0.213922f, - -0.197983f, -0.187165f, -0.178153f, -0.183267f, -0.213809f, -0.243068f, -0.221134f, -0.135714f, -0.022342f, +0.076608f, - +0.151824f, +0.214097f, +0.269402f, +0.314773f, +0.344233f, +0.355048f, +0.346502f, +0.321399f, +0.286050f, +0.247674f, - +0.212622f, +0.185179f, +0.166697f, +0.155655f, +0.148981f, +0.143401f, +0.135815f, +0.125610f, +0.114535f, +0.104436f, - +0.097691f, +0.053982f, +0.004390f, +0.004991f, +0.005112f, +0.005266f, +0.005387f, +0.005507f, +0.005600f, +0.005657f - }, - { - +0.041114f, +0.246567f, +0.453640f, +0.578453f, +0.486412f, -0.085090f, -0.077743f, -0.105123f, -0.097004f, -0.045376f, - -0.020819f, -0.016253f, -0.032947f, -0.042605f, -0.033758f, -0.016413f, +0.007617f, +0.029954f, +0.049569f, +0.072006f, - +0.091910f, +0.092490f, +0.068505f, +0.047173f, +0.058854f, +0.098422f, +0.131962f, +0.131305f, +0.096674f, +0.045232f, - -0.016136f, -0.088833f, -0.169184f, -0.242523f, -0.287880f, -0.297628f, -0.284744f, -0.271800f, -0.274450f, -0.292315f, - -0.315219f, -0.333992f, -0.345833f, -0.354700f, -0.364920f, -0.377015f, -0.386323f, -0.388549f, -0.384259f, -0.374493f, - -0.360625f, -0.216189f, -0.003741f, +0.001455f, +0.003488f, +0.004851f, +0.005842f, +0.006588f, +0.007154f, +0.007521f - }, - { - +0.001575f, -0.034404f, +0.099063f, +0.057191f, -0.005967f, -0.008737f, -0.002839f, +0.023739f, -0.002327f, -0.047119f, - -0.071338f, -0.062023f, -0.056518f, -0.075939f, -0.095829f, -0.111755f, -0.130192f, -0.158682f, -0.192417f, -0.228710f, - -0.262770f, -0.285090f, -0.275706f, -0.204512f, -0.075591f, +0.061762f, +0.166412f, +0.231582f, +0.264188f, +0.274397f, - +0.272990f, +0.267274f, +0.254902f, +0.232321f, +0.205252f, +0.184838f, +0.177638f, +0.176928f, +0.167497f, +0.139224f, - +0.092627f, +0.036902f, -0.016017f, -0.057208f, -0.085094f, -0.105460f, -0.126261f, -0.149970f, -0.174030f, -0.196813f, - -0.215950f, -0.143890f, -0.006512f, -0.003675f, -0.002495f, -0.001778f, -0.001286f, -0.000926f, -0.000653f, -0.000468f - }, - { - +0.028351f, +0.158366f, +0.387375f, +0.209323f, +0.138479f, -0.024944f, -0.076050f, -0.068784f, -0.086894f, -0.022640f, - +0.046924f, +0.098681f, +0.157850f, +0.216715f, +0.230469f, +0.177937f, +0.056736f, -0.099412f, -0.230053f, -0.293062f, - -0.274665f, -0.188848f, -0.054201f, +0.120177f, +0.294891f, +0.394157f, +0.378101f, +0.280693f, +0.170935f, +0.092689f, - +0.049777f, +0.036466f, +0.052499f, +0.093934f, +0.142595f, +0.175682f, +0.184503f, +0.177658f, +0.170605f, +0.173641f, - +0.186618f, +0.200281f, +0.202941f, +0.188511f, +0.159081f, +0.120865f, +0.081855f, +0.050347f, +0.028940f, +0.016023f, - +0.010660f, +0.004676f, +0.001512f, +0.002489f, +0.002909f, +0.003234f, +0.003490f, +0.003708f, +0.003879f, +0.003976f - }, - { - -0.012536f, -0.024508f, +0.026715f, +0.100256f, +0.030165f, -0.019036f, -0.001980f, +0.053411f, +0.062729f, +0.042787f, - +0.037541f, +0.042995f, +0.032630f, -0.006363f, -0.069971f, -0.130620f, -0.144750f, -0.095861f, +0.019571f, +0.165595f, - +0.287776f, +0.359211f, +0.370344f, +0.312965f, +0.207299f, +0.103383f, +0.034254f, +0.002634f, +0.000632f, +0.017232f, - +0.044292f, +0.070055f, +0.076868f, +0.050271f, -0.014441f, -0.103260f, -0.190056f, -0.255807f, -0.297413f, -0.321963f, - -0.337614f, -0.347902f, -0.352331f, -0.349280f, -0.338882f, -0.321988f, -0.297068f, -0.266207f, -0.234929f, -0.205756f, - -0.181333f, -0.099905f, -0.004409f, -0.003069f, -0.002383f, -0.001976f, -0.001706f, -0.001520f, -0.001384f, -0.001294f - }, - { - -0.035759f, -0.028302f, +0.056431f, +0.144293f, +0.088149f, -0.053194f, -0.088872f, -0.078778f, -0.083787f, -0.070879f, - -0.044081f, -0.064468f, -0.084007f, -0.069723f, -0.065974f, -0.065725f, -0.028666f, +0.041152f, +0.101149f, +0.149485f, - +0.178233f, +0.189381f, +0.210408f, +0.258912f, +0.327924f, +0.370146f, +0.333626f, +0.220608f, +0.075539f, -0.065890f, - -0.187899f, -0.284687f, -0.349780f, -0.377256f, -0.364619f, -0.319560f, -0.262043f, -0.211477f, -0.176684f, -0.155472f, - -0.138294f, -0.114703f, -0.080295f, -0.040726f, -0.007428f, +0.011160f, +0.014827f, +0.010699f, +0.005174f, +0.001704f, - +0.001420f, +0.001014f, -0.000876f, -0.000438f, -0.000227f, -0.000068f, +0.000051f, +0.000148f, +0.000219f, +0.000266f - }, - { - +0.006625f, -0.028791f, -0.110750f, +0.054204f, +0.049674f, -0.081883f, -0.031641f, +0.002710f, +0.078824f, +0.101542f, - +0.075137f, +0.045466f, +0.054841f, +0.071727f, +0.069146f, +0.060555f, +0.070378f, +0.108883f, +0.172304f, +0.238963f, - +0.284300f, +0.307237f, +0.320185f, +0.308402f, +0.229243f, +0.069136f, -0.124082f, -0.287351f, -0.389327f, -0.427896f, - -0.417142f, -0.373698f, -0.302766f, -0.196446f, -0.061231f, +0.073312f, +0.179141f, +0.248754f, +0.289902f, +0.309552f, - +0.307579f, +0.283972f, +0.243621f, +0.194795f, +0.147699f, +0.110790f, +0.086424f, +0.072421f, +0.065314f, +0.061874f, - +0.059680f, +0.034356f, +0.001808f, +0.001292f, +0.001117f, +0.000966f, +0.000841f, +0.000731f, +0.000643f, +0.000577f - }, - { - +0.000088f, +0.014221f, -0.031471f, -0.012506f, +0.016816f, -0.022850f, -0.080939f, -0.132222f, -0.131943f, -0.137399f, - -0.094433f, -0.042539f, -0.032957f, -0.046202f, -0.048525f, -0.059770f, -0.084778f, -0.088776f, -0.061042f, -0.014146f, - +0.040389f, +0.099574f, +0.156222f, +0.193208f, +0.193160f, +0.165499f, +0.148012f, +0.164330f, +0.198656f, +0.229866f, - +0.254546f, +0.275046f, +0.287016f, +0.293580f, +0.312690f, +0.352380f, +0.396514f, +0.417891f, +0.401549f, +0.353465f, - +0.291737f, +0.233593f, +0.189322f, +0.157681f, +0.127979f, +0.091171f, +0.047074f, +0.003648f, -0.032270f, -0.058776f, - -0.074801f, -0.053275f, -0.002235f, -0.000782f, -0.000024f, +0.000460f, +0.000788f, +0.001026f, +0.001200f, +0.001310f - } - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word16 hrtfShCoeffsIm_fx[2][16][60] /* Q14 */ = { { @@ -21512,282 +10733,12 @@ const Word16 hrtfShCoeffsIm_fx[2][16][60] /* Q14 */ = }, }, }; -#else -const float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]= -{ - { - { - +0.059427f, +0.323489f, +0.582074f, +0.628019f, +0.485149f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.558569f, +1.123301f, +1.071392f, +0.922801f, +0.655805f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.026222f, -0.091698f, -0.022334f, +0.030939f, +0.002089f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.038487f, +0.008114f, +0.051584f, +0.033837f, -0.057739f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.008714f, +0.037748f, +0.010900f, +0.009237f, -0.119056f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.008836f, -0.057513f, -0.080701f, +0.035007f, +0.008665f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.024377f, +0.057800f, +0.058232f, +0.019393f, +0.043727f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.084907f, -0.120786f, +0.030218f, +0.022916f, -0.018816f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.158353f, +0.267853f, +0.188581f, +0.098698f, +0.081781f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.007347f, +0.125090f, +0.290579f, +0.433270f, +0.391769f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.004972f, -0.058443f, -0.096170f, +0.015200f, -0.015504f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.010548f, -0.009294f, +0.259682f, +0.401123f, +0.254463f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.006518f, +0.054591f, +0.083263f, +0.019926f, -0.072338f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.016992f, +0.103452f, +0.153728f, +0.074125f, +0.031700f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.000799f, -0.008968f, +0.119989f, +0.127988f, +0.010981f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.002551f, +0.001879f, +0.006379f, +0.079606f, +0.073878f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - } - }, - { - { - +0.059427f, +0.323489f, +0.582074f, +0.628019f, +0.485149f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.558569f, -1.123301f, -1.071392f, -0.922801f, -0.655805f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.026222f, -0.091698f, -0.022334f, +0.030939f, +0.002089f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.038487f, +0.008114f, +0.051584f, +0.033837f, -0.057739f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.008714f, -0.037748f, -0.010900f, -0.009237f, +0.119056f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.008836f, +0.057513f, +0.080701f, -0.035007f, -0.008665f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.024377f, +0.057800f, +0.058232f, +0.019393f, +0.043727f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.084907f, -0.120786f, +0.030218f, +0.022916f, -0.018816f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.158353f, +0.267853f, +0.188581f, +0.098698f, +0.081781f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.007347f, -0.125090f, -0.290579f, -0.433270f, -0.391769f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.004972f, +0.058443f, +0.096170f, -0.015200f, +0.015504f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - -0.010548f, +0.009294f, -0.259682f, -0.401123f, -0.254463f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.006518f, +0.054591f, +0.083263f, +0.019926f, -0.072338f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.016992f, +0.103452f, +0.153728f, +0.074125f, +0.031700f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.000799f, -0.008968f, +0.119989f, +0.127988f, +0.010981f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - }, - { - +0.002551f, +0.001879f, +0.006379f, +0.079606f, +0.073878f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, - +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f, +0.000000f - } - } -}; -#endif /* Binaural rendering data set based on BRIRs */ /* Tables derived from Mozart IIS BRIRs.*/ -#ifdef IVAS_FLOAT_FIXED const Word32 FASTCONV_BRIR_latency_s_fx = 937500; -#else -const float FASTCONV_BRIR_latency_s = 0.000937500f; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX] /* Q29 */= { { @@ -30891,9113 +19842,7 @@ const Word32 leftBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAP }, }, }; -#else -const float leftBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]= -{ - { - { - +0.001780f, -0.105056f, +0.133278f, -0.013415f, +0.027669f, -0.000540f, -0.047934f, -0.044980f, -0.017889f, +0.014321f, - +0.007348f, +0.030484f, +0.044975f, +0.005666f, -0.034603f, +0.018843f, +0.002080f, +0.033565f, -0.016623f, -0.033123f, - +0.004545f, -0.007249f, -0.020493f, -0.012461f, -0.003474f, -0.006890f, +0.003323f, +0.027582f, -0.003920f, +0.017221f, - +0.007285f, -0.008685f, -0.016040f, +0.012562f, +0.015499f, +0.001625f, -0.025322f, -0.007796f, +0.026150f, +0.021802f, - +0.017631f, -0.035176f, -0.023797f, -0.005155f, +0.007249f, +0.007251f, +0.002385f, -0.006721f, -0.001230f, -0.014337f, - -0.009093f, -0.002049f, +0.011497f, +0.006946f, -0.004541f, +0.008374f, +0.021898f, +0.011743f, +0.001865f, +0.006238f, - -0.002008f, -0.005675f, -0.003277f, -0.006934f, -0.007010f, -0.008036f, -0.018176f, -0.020279f, -0.007475f, +0.009061f, - +0.006923f, +0.007912f, +0.013080f, +0.001609f, +0.013686f, +0.009018f, +0.006450f, +0.002098f, +0.000388f, -0.005499f, - -0.000841f, -0.002854f, -0.004612f, -0.008123f, -0.007147f, -0.001362f, -0.002523f, -0.004943f, -0.002941f, +0.003854f, - +0.005553f, +0.002213f, -0.001155f, -0.001829f, -0.001203f, +0.005271f - }, - { - -0.002443f, -0.083508f, +0.098365f, +0.037484f, -0.013594f, +0.013837f, -0.037463f, -0.048465f, -0.029325f, +0.013451f, - +0.007052f, +0.018278f, +0.042952f, +0.015453f, -0.008889f, -0.017385f, -0.006510f, +0.042423f, +0.012017f, -0.029035f, - -0.007193f, -0.006032f, -0.027138f, +0.008138f, -0.035149f, +0.002167f, -0.008454f, +0.009206f, +0.013636f, +0.030767f, - +0.013182f, -0.018053f, -0.004793f, +0.012041f, +0.029395f, -0.014100f, -0.017378f, -0.003281f, +0.002494f, +0.015977f, - +0.007597f, -0.024681f, -0.009020f, +0.002628f, -0.008376f, -0.011389f, +0.020276f, +0.005431f, -0.006750f, -0.016869f, - -0.002214f, +0.001715f, -0.001174f, +0.001433f, +0.006966f, +0.005911f, +0.014916f, +0.007008f, +0.011727f, +0.003817f, - +0.005292f, -0.007060f, -0.007694f, +0.000872f, -0.006877f, -0.017034f, -0.013400f, -0.017798f, -0.003941f, -0.003404f, - +0.002214f, +0.010770f, +0.007439f, +0.008531f, +0.012195f, +0.013261f, +0.008042f, +0.011889f, -0.000017f, -0.007584f, - -0.002593f, -0.007918f, -0.006925f, -0.009156f, -0.008523f, -0.000877f, -0.003705f, -0.005308f, -0.000536f, +0.004641f, - +0.005402f, +0.003731f, -0.001368f, +0.006712f, -0.001331f, -0.000001f - }, - { - +0.001577f, -0.096038f, +0.122150f, -0.006459f, +0.022325f, -0.000027f, -0.063687f, -0.019774f, +0.012474f, -0.031234f, - +0.007405f, +0.023691f, +0.032421f, +0.000786f, +0.013763f, +0.015733f, -0.022351f, +0.009390f, +0.010844f, -0.008986f, - +0.008484f, +0.013513f, -0.031290f, -0.022773f, -0.032612f, -0.023880f, -0.034376f, +0.023566f, +0.032996f, +0.059130f, - -0.002185f, +0.005337f, +0.015561f, -0.011976f, -0.009297f, -0.004752f, +0.007349f, -0.012610f, -0.006750f, -0.004614f, - +0.032358f, -0.001975f, -0.018009f, -0.012045f, +0.000424f, +0.009609f, +0.000663f, -0.018039f, -0.026347f, -0.005883f, - +0.004527f, +0.008915f, +0.009293f, +0.007857f, +0.013424f, -0.000926f, -0.008812f, +0.015440f, +0.030651f, +0.016814f, - -0.000177f, -0.008382f, -0.014175f, -0.002190f, -0.004912f, -0.023064f, -0.010710f, -0.019619f, -0.012580f, -0.015451f, - -0.002372f, +0.011022f, +0.013997f, +0.015155f, +0.015427f, +0.013021f, +0.020266f, +0.007943f, +0.006371f, -0.001363f, - -0.006379f, -0.010479f, -0.010549f, -0.004959f, -0.006581f, -0.012106f, -0.007281f, +0.001245f, +0.008303f, +0.004275f, - -0.003274f, +0.001709f, -0.003329f, -0.002696f, -0.005984f, -0.001909f - }, - { - -0.000006f, -0.027733f, +0.077114f, -0.045558f, +0.032248f, -0.008910f, -0.028200f, -0.023058f, -0.027634f, -0.027966f, - +0.041227f, +0.023834f, +0.055456f, +0.001453f, -0.003409f, -0.014351f, -0.029300f, +0.013819f, +0.000893f, +0.004000f, - +0.011259f, -0.029018f, -0.038584f, +0.040377f, +0.019731f, -0.035978f, -0.033986f, +0.033845f, +0.026782f, -0.001195f, - -0.014325f, +0.009074f, +0.007425f, -0.012637f, -0.001940f, +0.012452f, +0.003636f, -0.003399f, +0.005103f, -0.007745f, - +0.007052f, +0.004339f, -0.020016f, +0.005955f, -0.004311f, -0.011313f, -0.000423f, +0.011277f, +0.005730f, -0.012033f, - +0.003900f, +0.008340f, -0.013208f, +0.000785f, +0.006125f, -0.002905f, +0.011174f, +0.003535f, +0.001676f, +0.002337f, - -0.004942f, -0.003383f, +0.001012f, -0.002100f, -0.002251f, -0.006365f, -0.002787f, -0.005174f, -0.002163f, -0.004373f, - +0.007444f, +0.005800f, +0.009259f, +0.006157f, +0.000809f, +0.001778f, -0.004892f, +0.001752f, -0.004150f, -0.000093f, - -0.003724f, -0.001166f, +0.001070f, -0.002430f, +0.002087f, -0.003672f, -0.003190f, -0.000369f, +0.000661f, +0.002168f, - -0.001203f, -0.002130f, +0.003159f, +0.003661f, +0.002821f, +0.002384f - }, - { - -0.000155f, -0.070297f, +0.090942f, +0.032775f, -0.030590f, +0.020839f, -0.028817f, -0.031540f, -0.037455f, -0.026895f, - +0.037476f, +0.023355f, +0.051293f, +0.002998f, -0.003591f, -0.003463f, -0.027614f, +0.014649f, +0.026560f, -0.031369f, - +0.004580f, -0.026953f, -0.017939f, +0.021436f, +0.019104f, -0.050621f, +0.008635f, +0.028462f, +0.021525f, +0.007132f, - -0.028329f, +0.000568f, +0.004626f, -0.006606f, +0.004686f, -0.003323f, -0.008343f, +0.032718f, -0.001701f, -0.002728f, - +0.000858f, -0.009525f, -0.014432f, +0.008645f, +0.001756f, -0.003465f, -0.026906f, +0.004475f, +0.017767f, +0.008392f, - -0.001726f, -0.004896f, -0.002156f, +0.007339f, -0.005441f, +0.002248f, -0.000207f, +0.008442f, +0.006580f, -0.005199f, - -0.006372f, -0.003816f, +0.007245f, +0.005972f, -0.007165f, -0.005749f, -0.012003f, -0.000457f, -0.002340f, -0.002471f, - +0.000461f, +0.008416f, +0.008916f, +0.005921f, +0.006911f, -0.000370f, +0.004467f, -0.002533f, +0.001052f, -0.011242f, - -0.002003f, -0.001220f, +0.001437f, -0.003593f, -0.001228f, -0.000730f, -0.000770f, -0.005429f, +0.000421f, +0.002452f, - +0.000428f, -0.000531f, -0.000274f, +0.003451f, +0.005594f, +0.004053f - }, - { - +0.000800f, -0.033956f, +0.096219f, -0.067463f, +0.046275f, -0.012351f, -0.046768f, -0.021553f, -0.021902f, +0.012533f, - -0.019886f, +0.029501f, +0.070154f, +0.037900f, +0.008096f, +0.004763f, -0.075825f, -0.023722f, +0.016504f, +0.024437f, - -0.041516f, -0.036483f, +0.008372f, +0.040486f, -0.003436f, +0.032667f, -0.014789f, -0.025890f, -0.002803f, +0.002064f, - -0.002002f, +0.038451f, +0.017317f, -0.004823f, -0.043550f, +0.005577f, +0.006684f, +0.010622f, -0.000703f, -0.011381f, - -0.035794f, +0.022476f, +0.009651f, -0.000938f, -0.014561f, +0.007324f, +0.006178f, +0.002615f, +0.005966f, +0.013155f, - +0.001282f, +0.003489f, +0.005929f, +0.002159f, -0.007136f, -0.015265f, -0.023167f, -0.005425f, +0.001409f, +0.001941f, - -0.006284f, +0.000605f, -0.001727f, +0.012362f, +0.006507f, +0.008265f, -0.006072f, +0.003099f, +0.004819f, +0.009585f, - +0.004864f, +0.010256f, -0.005566f, -0.003569f, -0.003788f, -0.005704f, -0.007576f, -0.008894f, -0.008872f, -0.004225f, - -0.003661f, +0.005713f, +0.009059f, +0.008078f, +0.006576f, -0.001274f, -0.009685f, -0.004260f, +0.002181f, +0.003188f, - +0.004020f, +0.005583f, +0.004355f, -0.000489f, -0.000835f, -0.001246f - }, - { - -0.002844f, -0.061783f, +0.080736f, +0.040823f, -0.034502f, +0.022417f, -0.024560f, -0.037465f, -0.031654f, -0.018206f, - +0.010177f, +0.001407f, +0.053067f, +0.067818f, +0.011425f, -0.011778f, -0.045344f, -0.030490f, +0.009070f, +0.028980f, - -0.018736f, -0.048804f, -0.020026f, +0.036874f, +0.033017f, +0.001971f, -0.021184f, +0.009031f, +0.006532f, -0.021663f, - +0.001286f, +0.045564f, +0.008266f, -0.023886f, -0.027272f, +0.004240f, +0.005342f, +0.009160f, -0.001125f, -0.023213f, - -0.009656f, +0.021053f, +0.008688f, -0.018673f, -0.001519f, +0.011276f, +0.002100f, +0.000683f, -0.003039f, +0.007212f, - +0.020184f, -0.002268f, +0.013630f, -0.004957f, -0.012582f, -0.015763f, -0.006411f, -0.011298f, +0.001018f, -0.013212f, - -0.001371f, -0.001140f, +0.016689f, +0.008741f, +0.009361f, +0.001340f, -0.000071f, -0.007274f, +0.004598f, +0.004748f, - +0.006591f, +0.007692f, +0.001270f, +0.000981f, -0.010502f, -0.007709f, -0.000831f, -0.007484f, -0.005798f, -0.004753f, - -0.000837f, +0.003626f, +0.006201f, +0.002420f, +0.003722f, -0.000848f, -0.004391f, -0.002901f, +0.000815f, +0.006234f, - +0.002688f, +0.004208f, +0.001469f, -0.003937f, -0.000713f, -0.000590f - }, - { - +0.001397f, -0.044931f, +0.106881f, -0.065295f, +0.037582f, -0.009714f, -0.029617f, -0.022868f, -0.036764f, -0.003042f, - -0.007543f, +0.067886f, +0.054171f, +0.007553f, -0.012587f, -0.003955f, -0.030537f, +0.049202f, -0.020496f, -0.044438f, - -0.025477f, -0.008835f, -0.014131f, -0.011211f, +0.070560f, +0.030047f, -0.022921f, -0.030642f, +0.010266f, +0.001875f, - +0.010865f, +0.011582f, +0.004137f, +0.022171f, -0.012454f, -0.025236f, +0.004164f, +0.002137f, -0.013264f, -0.013226f, - -0.010521f, -0.013069f, +0.008617f, +0.028980f, -0.010261f, -0.001009f, +0.000247f, +0.026507f, -0.001257f, +0.004824f, - +0.002996f, +0.014687f, +0.009434f, +0.000540f, -0.016357f, -0.017992f, -0.019507f, -0.026850f, -0.004739f, +0.001919f, - -0.002560f, +0.010097f, +0.005306f, +0.003550f, +0.008613f, +0.019336f, +0.012898f, -0.008761f, +0.000247f, +0.007737f, - +0.009944f, +0.007053f, -0.001037f, -0.013757f, -0.008129f, -0.005901f, -0.014511f, -0.013583f, -0.003636f, -0.002940f, - +0.002245f, +0.006942f, +0.010401f, +0.007518f, +0.002463f, -0.000690f, -0.003441f, -0.004050f, +0.001999f, +0.008040f, - +0.006590f, +0.006623f, +0.001194f, -0.004732f, -0.005128f, -0.003193f - }, - { - -0.003491f, -0.055068f, +0.075403f, +0.036387f, -0.031969f, +0.032935f, -0.035550f, -0.040031f, -0.031977f, -0.008594f, - -0.004489f, +0.021357f, +0.055537f, +0.044003f, -0.013832f, +0.018439f, -0.027798f, -0.004389f, +0.007048f, -0.025695f, - -0.033714f, -0.007068f, -0.018817f, -0.024474f, +0.066384f, +0.050050f, -0.018485f, -0.059738f, +0.016542f, +0.007444f, - +0.035855f, +0.006314f, -0.000150f, +0.008931f, -0.034498f, -0.004228f, +0.014899f, -0.011896f, -0.010966f, -0.017035f, - -0.002763f, +0.008600f, -0.001116f, +0.012527f, +0.000041f, +0.000889f, +0.002927f, +0.004041f, +0.017895f, +0.003405f, - -0.014609f, +0.025790f, +0.017162f, -0.003732f, -0.013785f, -0.019631f, -0.015073f, -0.033264f, -0.005627f, +0.004109f, - -0.005004f, +0.009220f, +0.008039f, +0.012799f, +0.012341f, +0.008463f, +0.007764f, -0.006365f, -0.003097f, +0.006646f, - +0.012937f, +0.002987f, +0.003139f, -0.009051f, -0.013210f, -0.006648f, -0.007433f, -0.013067f, -0.005048f, +0.002249f, - +0.004435f, +0.006359f, -0.000017f, +0.009265f, +0.000656f, -0.004174f, -0.005051f, -0.000609f, +0.006460f, +0.013274f, - +0.003051f, +0.002515f, +0.001932f, -0.007212f, -0.008371f, +0.000020f - }, - { - +0.002968f, -0.064432f, +0.099653f, +0.007174f, -0.008869f, -0.076264f, +0.038628f, -0.007275f, -0.000647f, -0.013151f, - -0.028723f, +0.044166f, +0.008430f, -0.021996f, +0.017017f, -0.008895f, +0.029199f, -0.000200f, +0.011688f, -0.006480f, - +0.034465f, -0.027810f, -0.009181f, -0.005764f, -0.063289f, +0.003656f, -0.003588f, +0.018596f, +0.000062f, +0.029992f, - -0.030123f, +0.011396f, +0.004694f, -0.003103f, +0.026063f, +0.010371f, -0.007765f, +0.001378f, +0.021547f, +0.018262f, - -0.011875f, -0.035277f, -0.022400f, -0.021618f, +0.020884f, -0.004577f, +0.029384f, +0.008225f, -0.004140f, -0.022432f, - -0.010595f, -0.005064f, +0.005326f, +0.008508f, +0.005198f, +0.010207f, +0.002794f, -0.003341f, -0.003764f, -0.008384f, - +0.007389f, +0.009792f, +0.009073f, +0.004916f, +0.002041f, -0.006698f, -0.013975f, -0.003656f, -0.011627f, -0.004623f, - -0.005693f, -0.002611f, -0.002039f, +0.005283f, +0.007884f, +0.007073f, +0.009721f, +0.006131f, +0.005824f, +0.000309f, - +0.003633f, -0.004059f, -0.007429f, +0.002557f, -0.000355f, -0.006351f, -0.002259f, -0.006191f, -0.008852f, -0.001260f, - +0.002260f, -0.003137f, +0.004009f, +0.002753f, +0.001728f, -0.001795f - }, - { - +0.001582f, -0.076087f, +0.114790f, +0.008157f, -0.022689f, -0.065271f, +0.012270f, +0.016733f, +0.017345f, -0.038816f, - -0.008836f, +0.047811f, +0.004162f, -0.009451f, -0.002982f, +0.019482f, +0.000345f, -0.013854f, +0.026023f, -0.019584f, - +0.028659f, -0.017255f, -0.047984f, +0.000668f, -0.044521f, +0.011902f, +0.020798f, +0.018136f, +0.022706f, +0.026560f, - -0.002643f, -0.000444f, -0.010503f, -0.015590f, +0.012635f, -0.006915f, -0.005263f, +0.001753f, -0.004134f, -0.017390f, - +0.000296f, -0.015714f, -0.003627f, +0.015783f, +0.023735f, +0.010417f, +0.027313f, -0.007957f, -0.024025f, -0.009751f, - -0.036618f, -0.004836f, +0.014820f, +0.025369f, +0.016613f, +0.012563f, -0.010054f, +0.004303f, -0.022828f, -0.001583f, - -0.012202f, +0.016692f, +0.006990f, +0.003749f, -0.008324f, -0.015467f, -0.001351f, +0.001100f, +0.001390f, +0.003415f, - +0.000207f, +0.001701f, -0.007172f, +0.001835f, +0.009987f, +0.010152f, +0.002697f, -0.003803f, +0.005576f, -0.001027f, - +0.001078f, -0.008071f, -0.010642f, -0.005218f, -0.001116f, -0.004592f, -0.003723f, +0.005121f, +0.000223f, +0.007137f, - +0.006263f, +0.004037f, +0.004948f, -0.001406f, -0.004720f, -0.001700f - }, - { - -0.006330f, -0.020580f, +0.077779f, -0.013719f, -0.030242f, -0.057276f, +0.057816f, -0.009160f, -0.009857f, -0.006091f, - -0.052385f, +0.044101f, +0.003721f, +0.055403f, +0.030899f, -0.018711f, -0.035138f, +0.004102f, -0.023760f, -0.019338f, - +0.012140f, +0.010926f, -0.007476f, +0.018223f, -0.031708f, +0.039575f, -0.005727f, +0.022962f, -0.051828f, -0.001783f, - +0.014227f, +0.016613f, -0.000557f, +0.007682f, -0.013406f, -0.023205f, -0.011369f, -0.003889f, +0.026163f, -0.012449f, - -0.003863f, +0.029878f, +0.018495f, -0.007492f, +0.018962f, +0.005624f, +0.002246f, -0.007185f, -0.006773f, +0.000162f, - -0.021570f, -0.015306f, -0.011349f, -0.010894f, -0.007432f, -0.015819f, +0.004930f, +0.014517f, +0.014621f, +0.030143f, - +0.008687f, -0.003543f, -0.007137f, -0.003100f, -0.001076f, -0.003635f, +0.000873f, +0.013783f, +0.005992f, -0.000720f, - +0.001065f, -0.004785f, +0.002953f, -0.006228f, -0.012510f, -0.009145f, -0.011929f, -0.007362f, -0.003181f, +0.004152f, - +0.000675f, +0.005080f, +0.005384f, +0.011913f, +0.004869f, +0.008934f, +0.010560f, +0.006496f, -0.003904f, +0.001073f, - -0.004060f, -0.009736f, -0.010637f, -0.008732f, -0.008133f, -0.002577f - }, - { - +0.000055f, -0.083722f, +0.115327f, +0.022567f, -0.023523f, -0.038584f, -0.012388f, +0.035963f, -0.024768f, -0.002975f, - -0.083703f, +0.060947f, +0.022094f, +0.012220f, +0.059660f, +0.008166f, -0.032339f, -0.040698f, +0.017533f, -0.035490f, - +0.016990f, -0.002864f, +0.009671f, +0.001761f, -0.023183f, +0.011312f, +0.015084f, +0.000563f, -0.008235f, -0.021829f, - +0.020006f, +0.016385f, +0.022850f, -0.001098f, -0.032036f, -0.028675f, -0.013756f, +0.006712f, -0.001884f, -0.003222f, - +0.025192f, +0.028876f, +0.010962f, -0.017270f, +0.013588f, +0.005872f, +0.009215f, +0.003730f, -0.003056f, -0.000282f, - -0.019167f, -0.022626f, -0.027344f, -0.007572f, -0.006715f, -0.007519f, +0.018272f, +0.004604f, +0.011848f, +0.016471f, - +0.007891f, +0.004882f, -0.006395f, +0.001647f, +0.005036f, -0.006339f, +0.001662f, +0.009612f, +0.012456f, -0.008887f, - -0.002886f, +0.001354f, -0.002310f, -0.005746f, -0.016835f, -0.008759f, -0.007850f, -0.008829f, -0.000705f, +0.002081f, - +0.005950f, +0.006146f, +0.009087f, +0.005151f, +0.010791f, +0.007485f, +0.006196f, +0.002594f, +0.000848f, -0.001423f, - -0.004635f, -0.002230f, -0.010068f, -0.009447f, -0.007686f, -0.006129f - }, - { - -0.005141f, -0.027090f, +0.081784f, -0.010992f, -0.014484f, -0.071481f, +0.060187f, -0.025369f, -0.002494f, +0.002610f, - -0.042832f, +0.031224f, +0.042003f, +0.014291f, -0.026074f, +0.022631f, -0.014552f, -0.024727f, +0.003073f, +0.022431f, - -0.006480f, +0.024913f, -0.020662f, -0.009964f, -0.003311f, +0.002616f, -0.013979f, -0.013731f, +0.006906f, -0.000841f, - -0.013843f, +0.003501f, +0.005987f, +0.006258f, -0.005205f, +0.037526f, -0.005378f, +0.009547f, +0.019302f, +0.007878f, - -0.007848f, -0.032401f, -0.026833f, +0.015068f, -0.018119f, +0.006020f, +0.021361f, +0.009108f, -0.000740f, +0.005879f, - -0.022386f, -0.003800f, -0.019203f, -0.016539f, +0.013023f, +0.016421f, +0.009349f, +0.005914f, +0.000621f, +0.003786f, - -0.007694f, +0.003491f, +0.008512f, +0.011237f, -0.002476f, -0.006068f, -0.007649f, -0.011950f, -0.005357f, +0.003088f, - -0.000198f, +0.008268f, -0.003557f, -0.001498f, -0.003475f, -0.000534f, -0.001887f, -0.002040f, +0.007740f, +0.007491f, - +0.002533f, +0.003789f, +0.002547f, -0.000993f, -0.003490f, +0.000973f, -0.003978f, -0.003297f, -0.003486f, -0.004802f, - +0.000830f, -0.003049f, -0.000051f, +0.001319f, +0.000063f, +0.000529f - }, - { - +0.002559f, -0.070860f, +0.104918f, +0.002991f, -0.000881f, -0.051974f, +0.004078f, +0.013027f, -0.035230f, +0.020739f, - -0.033293f, +0.016090f, +0.019119f, +0.035098f, -0.029638f, +0.029909f, -0.006914f, -0.014717f, -0.010149f, +0.001565f, - +0.025526f, +0.011769f, -0.023744f, -0.018370f, -0.025818f, +0.007069f, +0.004997f, +0.006663f, +0.007200f, +0.002825f, - -0.017857f, +0.025081f, -0.004610f, -0.018816f, -0.003151f, +0.025261f, -0.000283f, +0.010441f, +0.008027f, +0.009178f, - -0.015449f, -0.016491f, -0.013771f, -0.000520f, +0.005799f, +0.001762f, +0.018543f, +0.005938f, +0.008607f, -0.015120f, - -0.030235f, -0.004867f, +0.007859f, -0.007462f, +0.007461f, +0.007478f, +0.005775f, +0.007349f, +0.002580f, -0.008623f, - -0.001683f, +0.004874f, +0.002547f, +0.001348f, +0.006263f, -0.006872f, +0.005685f, +0.002123f, -0.015232f, +0.000366f, - -0.000634f, -0.001449f, -0.004601f, +0.000150f, +0.001846f, -0.001502f, -0.003900f, +0.000969f, +0.007545f, +0.005025f, - +0.004521f, +0.000302f, -0.000475f, +0.004420f, +0.003055f, -0.002795f, -0.005130f, -0.009211f, -0.005913f, +0.002978f, - -0.000296f, +0.001544f, +0.002092f, -0.000932f, -0.001400f, +0.000548f - } - }, - { - { - -0.006722f, -0.192285f, -0.014559f, +0.041823f, +0.056535f, -0.009441f, -0.010336f, +0.002807f, -0.009719f, -0.000669f, - +0.008311f, +0.005610f, +0.001904f, +0.005739f, +0.001244f, +0.028209f, -0.010093f, +0.013937f, -0.013863f, -0.009242f, - +0.010987f, +0.001599f, -0.012937f, +0.003370f, +0.025681f, +0.020593f, +0.000615f, +0.021987f, +0.002660f, +0.015343f, - +0.007454f, +0.001189f, -0.016601f, +0.007666f, +0.007385f, +0.010431f, +0.001165f, -0.004408f, +0.012048f, +0.008069f, - +0.021684f, +0.005584f, +0.005149f, -0.008217f, +0.000637f, +0.010560f, +0.006164f, -0.003905f, +0.000554f, -0.004473f, - +0.001412f, +0.000232f, +0.003896f, +0.001451f, -0.004756f, -0.007102f, +0.000613f, -0.002473f, -0.005883f, +0.001152f, - -0.004355f, -0.001912f, +0.001708f, -0.003451f, +0.003028f, +0.001218f, -0.001789f, -0.002809f, -0.001906f, +0.006695f, - -0.001800f, -0.002564f, +0.005990f, -0.003080f, +0.000770f, +0.000519f, +0.006414f, +0.000623f, +0.003496f, +0.000962f, - +0.000851f, +0.001219f, +0.001296f, +0.000056f, -0.001216f, +0.002481f, +0.000127f, -0.001033f, +0.000048f, +0.002701f, - +0.005123f, +0.003037f, -0.001806f, -0.002656f, -0.002447f, +0.003956f - }, - { - +0.004493f, -0.010715f, +0.100012f, +0.044007f, +0.011364f, +0.006108f, -0.016848f, -0.002367f, +0.000875f, +0.015558f, - +0.006696f, -0.007534f, +0.007588f, +0.005533f, +0.000580f, -0.030901f, -0.029105f, +0.011884f, -0.006451f, -0.014879f, - +0.006009f, -0.011482f, -0.023734f, +0.032884f, -0.014268f, -0.009702f, -0.013558f, +0.012886f, +0.008905f, +0.004105f, - +0.004276f, -0.002715f, +0.013650f, -0.008545f, +0.013323f, -0.011598f, -0.008895f, +0.006223f, -0.007751f, -0.008138f, - -0.001803f, -0.002690f, +0.007510f, +0.006470f, -0.005122f, -0.005691f, +0.013806f, -0.001171f, -0.005329f, -0.001409f, - +0.012952f, +0.000748f, -0.006603f, -0.002782f, -0.006848f, -0.005634f, +0.009205f, -0.002702f, +0.003581f, +0.000958f, - +0.009731f, +0.000702f, -0.004320f, -0.001962f, -0.000270f, -0.006943f, -0.004278f, -0.006499f, +0.000389f, -0.005745f, - -0.002657f, +0.004151f, -0.001940f, -0.002051f, +0.002526f, +0.001200f, -0.005633f, +0.002857f, +0.002031f, +0.000296f, - +0.001476f, -0.005017f, +0.001545f, +0.002940f, -0.001080f, -0.000098f, -0.001801f, +0.001399f, +0.001863f, -0.002076f, - -0.000783f, +0.003671f, -0.001507f, +0.003840f, -0.002063f, +0.000542f - }, - { - -0.002386f, -0.104233f, +0.066480f, +0.037099f, +0.053332f, +0.000176f, -0.023939f, -0.006680f, +0.004383f, +0.000029f, - +0.024982f, -0.002763f, +0.001892f, -0.006009f, +0.006317f, -0.005905f, -0.014384f, +0.023963f, +0.024021f, +0.003734f, - -0.001461f, +0.006433f, -0.014595f, -0.001537f, -0.004014f, +0.010714f, -0.010464f, +0.005989f, -0.014396f, +0.011322f, - -0.017456f, +0.001720f, +0.004778f, -0.004472f, -0.006527f, -0.011270f, -0.002549f, -0.007073f, +0.005916f, -0.010866f, - +0.016291f, -0.004606f, -0.008346f, -0.003022f, +0.002823f, +0.003146f, -0.009924f, -0.003248f, +0.004771f, +0.004770f, - +0.004676f, +0.005127f, +0.001819f, -0.001813f, +0.013598f, +0.002212f, -0.011235f, +0.002094f, +0.007245f, +0.002555f, - -0.000326f, +0.000781f, -0.001186f, +0.009557f, +0.008073f, -0.008815f, -0.000323f, -0.002472f, +0.005376f, -0.006897f, - -0.007056f, -0.001879f, +0.002348f, +0.005965f, +0.004742f, -0.002788f, +0.004148f, -0.000056f, +0.004876f, -0.000828f, - -0.002601f, -0.001894f, -0.001284f, -0.000480f, +0.000531f, +0.000704f, +0.000126f, -0.000813f, +0.002096f, +0.001395f, - -0.003620f, +0.000290f, -0.002635f, +0.000219f, +0.001152f, +0.003183f - }, - { - +0.001774f, -0.149780f, -0.039555f, -0.032353f, +0.053505f, +0.007878f, -0.001180f, +0.008355f, -0.008668f, -0.055517f, - -0.000227f, -0.000997f, +0.018903f, -0.010254f, -0.020653f, -0.016191f, +0.004122f, +0.021347f, -0.003520f, -0.006321f, - +0.004585f, -0.019486f, -0.018908f, +0.021234f, +0.008103f, -0.012402f, -0.016875f, +0.001335f, -0.004577f, +0.003219f, - -0.006463f, -0.003177f, +0.006303f, -0.007674f, -0.006143f, +0.011743f, +0.009920f, +0.005388f, +0.008020f, -0.008821f, - -0.000903f, -0.006542f, -0.016475f, +0.009992f, +0.005146f, +0.006883f, +0.004559f, +0.004162f, +0.006470f, -0.000289f, - +0.012722f, +0.016965f, -0.001615f, +0.007086f, +0.008019f, -0.003837f, +0.001810f, +0.000400f, +0.000640f, +0.000073f, - -0.006301f, +0.000641f, +0.009285f, +0.001082f, +0.001051f, -0.005895f, -0.003156f, -0.001159f, +0.006313f, +0.000608f, - +0.007281f, +0.001070f, +0.002108f, +0.001208f, -0.001958f, +0.003354f, -0.000033f, +0.004525f, -0.002993f, +0.002011f, - +0.001575f, +0.002281f, +0.000837f, -0.002108f, +0.001518f, -0.002069f, +0.002280f, +0.001916f, -0.003212f, -0.003524f, - -0.003166f, -0.003150f, -0.000366f, -0.000666f, +0.000295f, +0.002914f - }, - { - +0.000742f, -0.032548f, +0.072297f, +0.025196f, -0.023127f, -0.003851f, -0.006854f, -0.001607f, -0.014142f, -0.004070f, - +0.039117f, -0.000271f, +0.024719f, +0.009512f, -0.016309f, -0.027219f, -0.016901f, +0.002767f, +0.005464f, -0.022698f, - -0.005774f, -0.017459f, +0.018885f, +0.008785f, -0.005720f, -0.026932f, +0.020819f, +0.009823f, +0.013148f, +0.008061f, - -0.017607f, +0.001369f, +0.006354f, -0.011455f, -0.008969f, -0.001620f, +0.007523f, +0.019569f, -0.012483f, -0.004084f, - +0.009727f, +0.008803f, +0.002034f, -0.000984f, -0.010809f, +0.006116f, -0.018293f, -0.005184f, +0.002659f, +0.005479f, - +0.007241f, +0.001013f, +0.007707f, +0.013660f, -0.000212f, -0.001741f, -0.007703f, +0.002934f, +0.001202f, +0.001513f, - +0.005900f, -0.002588f, +0.002097f, +0.004906f, -0.000756f, +0.004936f, -0.003604f, +0.002731f, -0.002406f, -0.005884f, - -0.005161f, -0.001648f, -0.002680f, -0.003584f, +0.003347f, -0.000716f, +0.005217f, -0.000896f, +0.003743f, -0.004178f, - -0.000912f, -0.001183f, +0.002659f, -0.000004f, +0.000735f, -0.001681f, +0.001917f, -0.002915f, -0.000927f, +0.002278f, - +0.000862f, +0.001197f, -0.000988f, -0.000731f, +0.000933f, +0.000127f - }, - { - +0.001780f, -0.205879f, -0.061367f, -0.040650f, +0.075695f, +0.009293f, -0.010527f, +0.009515f, -0.014313f, +0.007836f, - +0.008562f, +0.011243f, -0.024033f, -0.012612f, -0.004494f, +0.004105f, -0.020738f, +0.014841f, +0.017579f, +0.005342f, - -0.024707f, -0.007543f, -0.022849f, -0.001791f, -0.013118f, +0.020088f, -0.012651f, -0.028223f, -0.003853f, +0.013017f, - -0.006841f, +0.013471f, -0.006426f, +0.006645f, -0.012528f, +0.018572f, +0.017589f, +0.001112f, -0.006238f, -0.006945f, - -0.023687f, +0.017990f, +0.003406f, +0.002838f, -0.002502f, +0.005343f, -0.007252f, -0.007670f, +0.000791f, +0.008331f, - -0.007603f, -0.000686f, +0.013930f, +0.011134f, +0.002706f, +0.003334f, +0.004258f, +0.007500f, +0.002726f, -0.002358f, - -0.008720f, +0.005739f, -0.002550f, +0.008016f, +0.002237f, -0.002495f, -0.007150f, +0.005065f, +0.002091f, +0.002505f, - +0.000299f, +0.000054f, -0.008364f, +0.001455f, -0.000604f, -0.001088f, +0.001565f, -0.002383f, -0.004898f, +0.000487f, - -0.000213f, +0.000035f, -0.000197f, -0.000594f, +0.000931f, -0.000013f, -0.005294f, +0.001548f, +0.001514f, -0.000980f, - +0.001413f, +0.003626f, +0.003651f, -0.000292f, +0.000885f, +0.003319f - }, - { - +0.003967f, +0.029498f, +0.112054f, +0.018636f, -0.027647f, -0.002307f, -0.010366f, -0.002137f, -0.001637f, -0.005855f, - +0.012259f, +0.007423f, +0.016308f, +0.007104f, -0.027394f, -0.016286f, -0.024480f, -0.028838f, -0.009201f, +0.012039f, - -0.002266f, -0.009521f, -0.012419f, +0.009438f, -0.011272f, -0.025389f, +0.003662f, +0.027221f, -0.012023f, -0.016386f, - -0.004027f, +0.015863f, -0.009527f, -0.007009f, +0.004869f, +0.008356f, -0.009167f, -0.001074f, +0.001888f, -0.005381f, - -0.000419f, +0.006708f, -0.006662f, -0.018084f, +0.002947f, +0.012606f, +0.008781f, +0.002627f, -0.011802f, -0.002689f, - +0.011612f, -0.004519f, +0.013554f, +0.002773f, +0.000678f, -0.000215f, +0.002178f, -0.012103f, +0.004145f, -0.005860f, - -0.000819f, -0.004017f, +0.001910f, -0.002704f, +0.007657f, +0.003152f, +0.004524f, -0.005162f, -0.000003f, +0.003825f, - +0.001444f, +0.003352f, +0.003699f, +0.006602f, -0.001080f, +0.004200f, +0.005015f, -0.000677f, +0.001009f, -0.004334f, - -0.000208f, +0.004568f, +0.003020f, -0.000403f, +0.001497f, -0.002704f, -0.003113f, -0.003017f, -0.002280f, +0.000510f, - -0.002035f, +0.000245f, +0.000484f, -0.001712f, -0.000836f, +0.001112f - }, - { - -0.000904f, -0.210882f, -0.057473f, -0.036729f, +0.056501f, -0.004830f, -0.004785f, -0.003620f, -0.016106f, +0.011030f, - +0.000245f, +0.021177f, -0.004642f, +0.013365f, -0.021943f, -0.017225f, -0.018861f, +0.024010f, -0.016405f, -0.012948f, - -0.009815f, -0.015049f, +0.007741f, +0.007291f, +0.017727f, -0.005447f, -0.013238f, -0.018650f, +0.000536f, -0.005907f, - +0.006988f, -0.001644f, -0.002679f, +0.008868f, -0.008891f, -0.004969f, +0.002970f, +0.003955f, -0.010952f, -0.014842f, - -0.011746f, -0.014590f, -0.009947f, +0.005549f, -0.015983f, +0.002228f, +0.001276f, +0.012201f, -0.017381f, +0.000000f, - +0.005998f, -0.004132f, -0.009883f, -0.001493f, -0.009533f, -0.004573f, +0.003337f, +0.002549f, +0.007635f, -0.003021f, - -0.002080f, +0.005188f, -0.005772f, -0.001736f, -0.000917f, +0.000940f, +0.005014f, -0.003448f, -0.000899f, -0.003284f, - +0.001474f, +0.006767f, +0.001604f, -0.002899f, +0.002582f, -0.001233f, +0.000430f, +0.001286f, +0.001397f, +0.002346f, - +0.001769f, -0.001604f, -0.001182f, -0.001522f, -0.001010f, +0.001172f, +0.000590f, +0.000579f, +0.001253f, +0.001895f, - +0.000610f, +0.003424f, +0.003705f, +0.001453f, +0.000113f, -0.000901f - }, - { - +0.003902f, +0.046761f, +0.122644f, +0.017834f, -0.025174f, +0.003626f, -0.026314f, -0.005741f, -0.003219f, -0.002456f, - +0.000294f, +0.006059f, +0.007058f, +0.010950f, -0.012527f, -0.003525f, -0.026084f, -0.016009f, +0.012407f, +0.014459f, - -0.005317f, +0.015030f, +0.005833f, -0.049372f, -0.002207f, +0.011724f, +0.006192f, -0.023131f, +0.020416f, +0.006706f, - +0.006686f, +0.002295f, -0.004056f, -0.003493f, -0.010729f, +0.000619f, +0.015152f, -0.001229f, -0.005575f, -0.006576f, - -0.002423f, +0.002401f, -0.000551f, +0.003646f, -0.007264f, +0.006623f, +0.010048f, +0.000521f, +0.003674f, -0.001973f, - -0.010306f, +0.014396f, +0.000448f, -0.000939f, +0.000882f, -0.006294f, +0.004952f, -0.002308f, +0.002110f, +0.001780f, - -0.003814f, +0.002397f, -0.005723f, +0.000389f, +0.001699f, -0.003006f, +0.003153f, +0.000288f, +0.002103f, +0.000641f, - +0.003617f, -0.005893f, -0.000343f, +0.003413f, +0.003107f, +0.004410f, -0.000006f, -0.003644f, +0.001594f, +0.000464f, - +0.000811f, +0.000892f, -0.005128f, +0.005065f, -0.001994f, +0.001023f, +0.003798f, +0.002329f, +0.001438f, +0.003904f, - -0.001980f, +0.001503f, +0.002469f, -0.003480f, -0.001095f, +0.005247f - }, - { - -0.006079f, -0.175471f, -0.007039f, +0.008165f, +0.046542f, +0.008599f, +0.085164f, -0.029872f, -0.002635f, +0.005348f, - -0.014300f, +0.028414f, +0.005925f, -0.022888f, -0.027533f, -0.021342f, +0.016512f, +0.006376f, +0.005254f, -0.025568f, - +0.023222f, -0.018403f, +0.007805f, +0.031757f, -0.006773f, +0.012585f, -0.008137f, +0.017523f, +0.002884f, +0.033209f, - -0.015813f, +0.007737f, +0.016751f, +0.015011f, +0.007533f, -0.006605f, -0.009006f, +0.000129f, +0.000690f, -0.002270f, - -0.020139f, -0.031061f, -0.007994f, -0.015891f, +0.005293f, +0.000618f, +0.019329f, -0.004834f, -0.001119f, -0.005527f, - +0.010980f, +0.000279f, +0.016238f, +0.005488f, -0.014989f, -0.001866f, -0.001803f, -0.002238f, +0.004670f, +0.000338f, - +0.010698f, +0.010205f, +0.006184f, +0.000839f, -0.001122f, +0.001829f, -0.006878f, -0.004134f, -0.003845f, +0.001536f, - -0.000762f, +0.003875f, +0.005232f, +0.000876f, +0.001291f, -0.001376f, +0.000895f, +0.000800f, +0.002635f, -0.001916f, - +0.000817f, +0.003451f, +0.001169f, +0.006396f, +0.005634f, +0.002885f, +0.003322f, +0.003714f, -0.001295f, +0.001808f, - +0.002666f, -0.003609f, -0.001232f, -0.001944f, +0.002819f, +0.003047f - }, - { - -0.002430f, -0.081806f, +0.082631f, +0.009014f, +0.001395f, -0.013157f, +0.024183f, -0.033288f, +0.012203f, +0.000523f, - -0.004553f, +0.021865f, +0.000039f, +0.013264f, +0.005511f, +0.004983f, -0.003670f, -0.021038f, +0.022545f, +0.001669f, - +0.040136f, -0.005799f, -0.009676f, +0.034707f, -0.012981f, +0.011085f, +0.007441f, +0.003867f, -0.016463f, -0.010512f, - -0.017154f, -0.005276f, -0.012215f, -0.005935f, +0.025018f, +0.006300f, -0.013496f, -0.009077f, -0.007092f, -0.001107f, - +0.018939f, -0.012406f, -0.007535f, +0.008133f, +0.022775f, +0.001451f, +0.005830f, -0.010496f, -0.011313f, +0.002760f, - -0.010707f, +0.000334f, -0.002416f, +0.008874f, +0.005740f, +0.001420f, -0.018911f, +0.004924f, -0.008418f, +0.005859f, - -0.008551f, +0.006184f, -0.002957f, +0.000577f, -0.004876f, -0.007604f, +0.002266f, +0.007489f, +0.003735f, +0.001648f, - -0.003822f, -0.004266f, -0.005173f, +0.002958f, -0.002342f, -0.001292f, -0.001633f, -0.008499f, +0.003110f, +0.001454f, - +0.001803f, -0.002661f, +0.001310f, +0.002865f, +0.000774f, -0.005278f, -0.007071f, +0.002205f, -0.002833f, +0.000603f, - +0.002696f, +0.001476f, +0.005372f, +0.001720f, -0.000597f, +0.001583f - }, - { - +0.019502f, -0.096784f, -0.044033f, -0.026250f, +0.023217f, +0.015460f, +0.044228f, -0.013565f, +0.014535f, +0.028458f, - -0.067458f, -0.015785f, +0.003736f, +0.014394f, -0.035519f, -0.001848f, +0.018384f, +0.044104f, +0.008961f, -0.000926f, - +0.021140f, +0.017556f, -0.010790f, +0.017548f, -0.024512f, +0.026039f, -0.016549f, +0.021179f, -0.015716f, +0.020600f, - -0.007089f, -0.012355f, -0.011794f, +0.024775f, +0.010511f, -0.006373f, +0.013288f, -0.000692f, +0.005762f, -0.015294f, - -0.009313f, +0.009189f, +0.008484f, -0.015567f, +0.001306f, +0.003578f, +0.008332f, -0.006863f, -0.005333f, +0.009259f, - +0.002469f, +0.000138f, -0.002845f, +0.000826f, +0.006299f, +0.000064f, +0.003366f, -0.001167f, +0.002418f, +0.013274f, - -0.000298f, -0.010989f, -0.008283f, +0.002602f, +0.005275f, +0.001291f, -0.004774f, +0.003674f, +0.000758f, +0.000306f, - +0.002186f, -0.005256f, +0.001251f, -0.002832f, -0.003162f, -0.001887f, -0.002822f, -0.000396f, -0.001881f, +0.002610f, - -0.000450f, +0.004576f, +0.001805f, +0.002918f, -0.004220f, -0.000271f, +0.001194f, +0.001554f, -0.001421f, +0.002964f, - -0.002633f, -0.002994f, -0.000058f, +0.001104f, -0.001486f, +0.001435f - }, - { - +0.000144f, -0.061118f, +0.086971f, +0.022437f, +0.009630f, -0.020679f, -0.040856f, -0.018022f, -0.027750f, +0.017671f, - -0.030817f, +0.034328f, -0.013020f, +0.022485f, +0.028300f, -0.005637f, -0.012430f, -0.015330f, +0.011967f, -0.012787f, - +0.018168f, -0.006574f, +0.023495f, -0.006018f, -0.007449f, +0.021450f, +0.020347f, +0.029918f, +0.012228f, -0.016987f, - +0.000863f, -0.018754f, -0.000427f, -0.018954f, -0.016583f, -0.006485f, -0.001137f, +0.009774f, -0.009715f, -0.016801f, - -0.002999f, +0.015466f, +0.014708f, -0.001544f, +0.008328f, +0.006714f, +0.010577f, +0.005669f, +0.000726f, +0.001351f, - +0.002297f, +0.002786f, -0.018892f, -0.007564f, -0.004752f, -0.002879f, +0.001116f, -0.010716f, -0.000568f, +0.003847f, - -0.002088f, +0.000575f, -0.003423f, +0.004086f, +0.007794f, -0.001086f, +0.005101f, -0.001805f, -0.000029f, -0.006550f, - +0.000975f, -0.001247f, -0.000019f, +0.005249f, -0.008070f, -0.007742f, -0.002680f, -0.003696f, -0.000737f, -0.001729f, - +0.003347f, +0.002864f, +0.001326f, -0.007065f, -0.002997f, -0.004053f, -0.001983f, -0.001615f, -0.000561f, -0.001178f, - -0.002940f, +0.005082f, -0.001143f, -0.001745f, +0.001711f, +0.000815f - }, - { - +0.015595f, -0.110844f, -0.039129f, -0.018750f, +0.039811f, +0.008046f, +0.052601f, -0.019808f, +0.057009f, +0.047780f, - -0.025631f, +0.028917f, +0.002360f, +0.008812f, +0.015699f, +0.044197f, +0.001354f, -0.006284f, +0.006791f, +0.008041f, - -0.015066f, +0.011521f, -0.016060f, +0.010927f, +0.004451f, -0.013968f, -0.010335f, +0.007074f, +0.011600f, +0.002523f, - -0.008483f, -0.002947f, -0.012827f, -0.003075f, -0.017088f, +0.016842f, -0.012728f, +0.006654f, +0.013154f, -0.013711f, - -0.011676f, -0.008771f, -0.007478f, +0.015728f, -0.002209f, +0.006262f, -0.000028f, +0.000632f, +0.002360f, +0.005822f, - -0.004648f, +0.016876f, -0.005791f, -0.015160f, -0.005376f, +0.006422f, +0.008275f, +0.003102f, -0.000532f, -0.001227f, - -0.005869f, +0.002389f, +0.000236f, +0.000899f, -0.009400f, -0.004505f, +0.000855f, +0.004075f, +0.007946f, +0.002363f, - -0.001173f, +0.011799f, -0.002403f, +0.001716f, -0.002689f, -0.003380f, -0.000938f, -0.003601f, +0.001160f, -0.001654f, - -0.004772f, -0.002410f, -0.002892f, -0.007791f, -0.004767f, +0.003488f, -0.001878f, +0.001361f, +0.000716f, -0.003000f, - +0.000398f, -0.002889f, -0.001178f, +0.002236f, +0.001728f, -0.000535f - }, - { - -0.004485f, -0.110626f, +0.051685f, -0.000519f, +0.018532f, -0.018108f, -0.008138f, -0.017398f, -0.027189f, +0.028689f, - -0.009625f, +0.006497f, -0.016224f, +0.035144f, +0.035134f, +0.025000f, -0.031089f, -0.008967f, -0.009535f, -0.011082f, - +0.023758f, +0.029200f, -0.013708f, +0.010316f, -0.003517f, +0.005325f, +0.005909f, +0.002856f, +0.005127f, +0.001701f, - -0.044658f, +0.009569f, +0.001139f, +0.005852f, +0.007024f, +0.011168f, +0.008814f, +0.005422f, -0.013078f, +0.000616f, - -0.003820f, +0.000548f, +0.001736f, -0.003107f, +0.002131f, +0.000620f, +0.006188f, -0.009038f, +0.005841f, +0.005212f, - -0.007008f, +0.004593f, +0.012587f, -0.000419f, +0.011015f, +0.008134f, +0.005048f, +0.011587f, +0.010883f, +0.000339f, - -0.001766f, -0.005563f, -0.000588f, +0.004625f, +0.011818f, -0.004228f, +0.001445f, +0.002646f, -0.005631f, +0.001946f, - -0.000818f, +0.000879f, +0.002840f, +0.001375f, +0.000365f, -0.007071f, -0.010011f, +0.001711f, +0.004790f, -0.000088f, - +0.004108f, +0.002364f, -0.002821f, +0.004637f, +0.005849f, +0.004919f, +0.005963f, -0.000529f, -0.004197f, +0.002619f, - -0.000325f, -0.000132f, +0.001050f, +0.000208f, -0.001035f, +0.003352f - } - }, - { - { - +0.011256f, -0.119408f, -0.131867f, +0.130006f, -0.009043f, -0.016121f, +0.000091f, +0.013302f, -0.017335f, -0.008362f, - +0.007097f, +0.005467f, -0.012605f, +0.013616f, +0.020155f, +0.005289f, +0.003202f, -0.001442f, +0.005709f, -0.000083f, - -0.004633f, +0.003544f, -0.011470f, +0.014637f, +0.033504f, +0.014848f, -0.009005f, +0.023116f, +0.014411f, -0.001353f, - +0.006169f, +0.018472f, -0.010222f, -0.005830f, +0.013464f, +0.003936f, +0.003404f, -0.002654f, +0.004585f, +0.010755f, - +0.011257f, +0.018859f, +0.003736f, -0.002233f, +0.000309f, +0.007579f, +0.001546f, -0.000753f, -0.004137f, +0.004729f, - +0.007619f, -0.001231f, -0.001224f, -0.004935f, +0.001262f, -0.008449f, -0.008042f, -0.001506f, -0.002780f, -0.003959f, - -0.004569f, +0.003226f, +0.001931f, -0.007053f, +0.006675f, -0.002104f, +0.001969f, +0.004079f, -0.001709f, +0.005807f, - -0.001657f, -0.006991f, +0.003931f, +0.000994f, -0.005524f, +0.005168f, +0.002721f, -0.000692f, +0.001917f, -0.000126f, - -0.000083f, +0.004290f, +0.003506f, +0.002913f, -0.000680f, +0.002678f, +0.000681f, -0.003028f, +0.001870f, +0.003836f, - +0.002399f, +0.003078f, -0.002536f, -0.002695f, -0.000147f, +0.001374f - }, - { - -0.001538f, +0.107274f, -0.006290f, +0.033191f, +0.021130f, -0.003273f, -0.009323f, +0.016652f, -0.000216f, +0.011925f, - +0.009236f, -0.014825f, -0.008742f, +0.010421f, +0.001339f, -0.033013f, -0.001413f, -0.012598f, -0.016333f, +0.001359f, - +0.012229f, -0.001012f, -0.022017f, +0.008272f, +0.013957f, -0.024288f, +0.001413f, +0.006378f, +0.019249f, -0.025945f, - +0.011652f, -0.017305f, +0.035746f, -0.019615f, -0.000204f, +0.001485f, -0.011556f, +0.002244f, -0.004920f, -0.005130f, - -0.004162f, +0.006753f, -0.005929f, +0.022730f, -0.007100f, -0.000879f, +0.004603f, -0.003407f, -0.001236f, +0.007212f, - +0.005860f, -0.001233f, -0.000944f, +0.000366f, -0.008312f, -0.011228f, +0.009050f, -0.006364f, -0.001002f, +0.007026f, - +0.004558f, +0.002386f, -0.004280f, -0.000896f, -0.003347f, +0.002541f, -0.001247f, -0.002141f, -0.002689f, -0.006253f, - -0.000261f, -0.002351f, -0.000873f, -0.004343f, -0.000289f, -0.001724f, -0.002896f, -0.001215f, +0.000657f, +0.004067f, - -0.000107f, -0.004589f, +0.005379f, +0.003289f, -0.000407f, +0.000410f, +0.000613f, +0.002964f, +0.000827f, -0.004463f, - -0.001820f, +0.003078f, +0.000943f, +0.000201f, +0.001736f, -0.000449f - }, - { - -0.000086f, +0.037094f, -0.078838f, +0.083464f, +0.025409f, -0.013685f, -0.003556f, -0.006975f, -0.019722f, +0.033910f, - -0.000841f, -0.000730f, +0.001079f, -0.001438f, -0.011671f, -0.010254f, +0.018978f, +0.008105f, +0.022537f, +0.012673f, - -0.000685f, -0.016581f, +0.000541f, -0.001037f, +0.013610f, -0.002171f, -0.017002f, +0.007803f, -0.016285f, -0.000107f, - +0.000643f, -0.010791f, +0.003851f, +0.009130f, -0.024950f, -0.006778f, +0.005614f, -0.013719f, +0.005323f, -0.004708f, - +0.000442f, +0.008177f, +0.000583f, -0.000501f, -0.014176f, +0.001564f, -0.002928f, -0.005278f, +0.014342f, +0.005319f, - +0.007293f, -0.010462f, +0.007124f, +0.004425f, +0.005214f, +0.000475f, -0.004083f, +0.001397f, -0.000267f, -0.000262f, - -0.000208f, +0.004631f, +0.002694f, +0.009887f, +0.005077f, +0.001874f, -0.004261f, +0.003832f, +0.002374f, -0.004128f, - -0.003131f, -0.004574f, -0.003320f, +0.006453f, +0.001872f, -0.006756f, +0.003738f, -0.000976f, +0.003721f, +0.001287f, - -0.002154f, -0.002062f, +0.003425f, -0.003507f, +0.002359f, +0.005401f, -0.001757f, -0.000345f, -0.000132f, +0.002799f, - -0.004923f, -0.002273f, +0.001995f, -0.001528f, +0.003407f, +0.002591f - }, - { - -0.006036f, -0.257411f, +0.040305f, +0.028187f, +0.000174f, +0.000480f, +0.004011f, +0.012467f, -0.000983f, -0.024493f, - -0.034526f, +0.010056f, -0.016794f, +0.005358f, -0.009205f, -0.032645f, +0.024734f, -0.004850f, +0.016507f, -0.019654f, - -0.001478f, -0.005780f, -0.003919f, +0.010306f, +0.001912f, -0.005182f, +0.001204f, -0.011287f, -0.006117f, -0.003118f, - -0.001071f, -0.010687f, -0.003646f, +0.000891f, +0.001166f, +0.001859f, +0.005186f, +0.011561f, +0.010123f, -0.006278f, - +0.002972f, -0.018664f, +0.001488f, +0.000162f, +0.012061f, +0.007451f, +0.004534f, +0.000525f, -0.002092f, +0.007431f, - +0.018326f, +0.009689f, -0.000867f, +0.005858f, +0.006065f, +0.001550f, -0.002692f, -0.004949f, +0.007264f, +0.002268f, - -0.008559f, +0.000649f, +0.009100f, -0.002169f, +0.006146f, -0.005439f, -0.002458f, -0.005507f, +0.008237f, +0.003569f, - +0.004695f, +0.003110f, +0.000517f, -0.001198f, +0.000705f, +0.003225f, +0.002499f, +0.001725f, -0.001584f, +0.000063f, - +0.003409f, +0.001983f, -0.000872f, +0.001084f, -0.001679f, +0.000541f, +0.002625f, +0.000259f, -0.001476f, -0.004165f, - -0.002270f, -0.003844f, +0.000874f, -0.001272f, -0.003136f, +0.003870f - }, - { - -0.001184f, +0.052210f, -0.008917f, +0.000514f, +0.005233f, -0.007317f, +0.004062f, +0.001787f, -0.007623f, +0.014043f, - +0.008413f, +0.005346f, +0.012245f, +0.011171f, -0.010208f, -0.009425f, -0.015807f, -0.017698f, -0.010252f, -0.006024f, - -0.010802f, -0.007354f, +0.027520f, +0.002327f, -0.022819f, -0.008191f, +0.005061f, +0.004008f, +0.019523f, -0.002494f, - +0.012891f, -0.018477f, +0.018078f, -0.026403f, +0.002573f, -0.006739f, +0.020399f, +0.003709f, -0.006126f, -0.003779f, - +0.005788f, +0.012415f, +0.010435f, -0.011141f, -0.010110f, +0.004542f, -0.011777f, -0.004882f, +0.005179f, +0.000269f, - -0.000222f, +0.001117f, +0.020436f, +0.007643f, +0.001753f, -0.001564f, -0.010540f, +0.000135f, +0.001182f, +0.005642f, - +0.004918f, -0.002327f, +0.000841f, +0.002562f, +0.006079f, -0.004435f, +0.000271f, +0.001614f, +0.000470f, -0.001716f, - -0.007035f, -0.006006f, -0.003620f, -0.002638f, -0.000456f, +0.002968f, +0.001854f, +0.003211f, +0.001300f, +0.000339f, - -0.003915f, -0.000019f, +0.000237f, +0.000572f, +0.000672f, +0.001718f, -0.001244f, +0.000093f, -0.001324f, +0.002579f, - -0.000431f, +0.001792f, -0.001835f, -0.000495f, -0.000009f, -0.001074f - }, - { - -0.009969f, -0.332186f, +0.034558f, +0.067463f, -0.018244f, +0.005600f, +0.002221f, +0.012806f, -0.003443f, -0.005553f, - +0.017047f, +0.002938f, -0.039281f, -0.027373f, +0.004336f, -0.017648f, -0.002701f, +0.032161f, +0.010920f, +0.001691f, - -0.015852f, +0.001135f, -0.025476f, -0.005860f, -0.003628f, +0.001777f, -0.010154f, -0.014160f, -0.005462f, -0.000727f, - +0.005097f, +0.009039f, -0.003561f, -0.006670f, +0.006804f, +0.000605f, +0.025144f, -0.006707f, +0.000414f, -0.011802f, - -0.001202f, -0.008502f, +0.013918f, -0.003708f, +0.002028f, +0.004600f, -0.005467f, -0.000898f, +0.002142f, +0.002676f, - -0.012110f, +0.001963f, +0.015497f, +0.005252f, +0.004045f, +0.002329f, +0.013321f, +0.005660f, +0.003619f, -0.003340f, - -0.004399f, +0.001774f, -0.000881f, +0.007768f, +0.000397f, -0.006398f, +0.000866f, -0.003254f, +0.005037f, -0.003359f, - +0.003992f, -0.007528f, -0.001999f, +0.001397f, -0.003262f, -0.000157f, +0.003153f, -0.001909f, -0.002075f, -0.002082f, - +0.003710f, +0.000048f, -0.000904f, -0.003756f, -0.001139f, +0.001301f, -0.005104f, +0.006370f, -0.001487f, -0.000303f, - +0.000527f, +0.001878f, +0.003707f, -0.000356f, +0.001395f, +0.004720f - }, - { - +0.000942f, +0.081085f, +0.058507f, -0.026453f, +0.017471f, -0.004764f, -0.010986f, +0.004882f, +0.010200f, -0.004698f, - -0.003443f, +0.012355f, +0.013460f, -0.012935f, -0.014330f, -0.016493f, -0.033509f, -0.013576f, -0.015337f, +0.009716f, - +0.010082f, -0.001748f, -0.017295f, +0.027909f, -0.033941f, -0.021110f, +0.014138f, +0.005427f, -0.009722f, -0.012158f, - -0.010327f, +0.023424f, -0.011587f, -0.008186f, +0.016081f, +0.005385f, -0.006343f, -0.006549f, -0.003037f, +0.011115f, - -0.003252f, -0.004585f, -0.005445f, -0.005123f, +0.002343f, +0.002302f, +0.013814f, +0.002106f, -0.015085f, +0.003008f, - +0.001985f, +0.008261f, +0.001257f, +0.006186f, +0.001501f, +0.001998f, +0.002102f, -0.010763f, +0.000232f, -0.002245f, - +0.002558f, -0.003164f, -0.008187f, +0.001818f, +0.002720f, +0.004137f, +0.004643f, +0.001990f, -0.002641f, +0.007437f, - -0.001260f, -0.002689f, +0.005829f, +0.005801f, -0.000911f, +0.009778f, -0.001855f, +0.000475f, +0.004709f, -0.002641f, - -0.000028f, +0.003066f, +0.003949f, -0.001643f, +0.001320f, -0.004129f, -0.002056f, -0.002409f, +0.000319f, -0.001031f, - -0.002951f, -0.001298f, -0.001724f, +0.000966f, -0.001031f, +0.002904f - }, - { - -0.004492f, -0.311824f, +0.002026f, +0.071285f, -0.020585f, -0.024073f, -0.006780f, +0.003146f, +0.005189f, +0.009069f, - -0.003959f, -0.007957f, +0.012327f, +0.012780f, -0.030786f, -0.017054f, +0.013177f, -0.005520f, +0.008556f, -0.008506f, - -0.016771f, -0.009864f, +0.012803f, +0.004427f, -0.006240f, -0.007126f, +0.000442f, -0.014505f, -0.010115f, -0.001137f, - +0.000477f, -0.009285f, +0.009569f, +0.005218f, -0.009542f, -0.003063f, -0.006109f, +0.012235f, -0.009130f, -0.011140f, - -0.022868f, -0.003313f, -0.004051f, -0.012342f, -0.008467f, +0.000119f, +0.008432f, +0.001598f, -0.014724f, -0.006674f, - +0.005770f, -0.010953f, +0.005268f, -0.012787f, -0.003371f, +0.000789f, -0.000956f, +0.014395f, +0.007813f, -0.003242f, - -0.005006f, -0.001570f, -0.002871f, -0.008459f, +0.004325f, -0.002342f, -0.002268f, +0.003070f, -0.001185f, -0.005693f, - -0.002861f, +0.004094f, +0.002557f, +0.002791f, +0.002078f, +0.003300f, +0.001241f, +0.001568f, +0.001836f, +0.003994f, - -0.000609f, -0.002479f, -0.002282f, -0.000954f, -0.000399f, -0.000460f, +0.001921f, +0.001662f, -0.000117f, +0.000248f, - +0.000745f, +0.002081f, +0.004675f, +0.000466f, +0.001613f, +0.001024f - }, - { - +0.003032f, +0.066925f, +0.088698f, -0.017650f, +0.013385f, -0.005210f, -0.011496f, -0.002450f, -0.000886f, -0.005505f, - +0.008612f, -0.007729f, +0.006560f, -0.005249f, +0.008691f, -0.028775f, -0.003077f, -0.019148f, +0.015061f, +0.014309f, - +0.004415f, +0.015461f, +0.014200f, -0.041011f, -0.022540f, -0.002923f, +0.002437f, +0.002763f, +0.012197f, +0.002362f, - -0.003092f, -0.008867f, +0.008761f, -0.023703f, +0.014315f, +0.010272f, +0.006933f, -0.001034f, -0.007039f, +0.000036f, - -0.007987f, +0.000461f, -0.002233f, -0.001279f, +0.001582f, +0.006605f, +0.004300f, +0.000749f, +0.003887f, -0.007305f, - -0.003037f, +0.006567f, +0.000025f, +0.001512f, +0.000690f, -0.004150f, +0.003073f, +0.010693f, -0.001667f, -0.000724f, - +0.002913f, -0.002875f, -0.008462f, +0.000660f, +0.000486f, -0.002558f, +0.003298f, +0.002379f, +0.000227f, +0.001112f, - +0.000921f, -0.005383f, -0.003558f, +0.005701f, +0.002831f, +0.008089f, +0.001556f, -0.001196f, +0.002376f, -0.004166f, - +0.002291f, +0.000046f, -0.003918f, +0.002457f, -0.000637f, +0.000892f, +0.003740f, +0.003978f, -0.000710f, +0.000782f, - -0.000906f, +0.001071f, +0.000906f, -0.002825f, +0.001259f, +0.005937f - }, - { - +0.004935f, -0.217971f, +0.010566f, +0.001346f, +0.030966f, +0.050239f, +0.065677f, -0.042929f, +0.000075f, -0.008113f, - +0.009489f, +0.008986f, +0.000679f, +0.002404f, -0.036648f, -0.000837f, -0.011228f, +0.019854f, -0.007713f, -0.012234f, - +0.004664f, -0.009930f, -0.002486f, +0.017741f, +0.034027f, +0.006965f, -0.012723f, +0.023629f, +0.024837f, -0.005170f, - +0.003445f, -0.005437f, +0.012859f, +0.032217f, -0.016782f, -0.009763f, -0.000714f, +0.008696f, -0.015625f, +0.000389f, - -0.030820f, -0.021196f, -0.011039f, +0.003003f, -0.008636f, +0.006415f, +0.005351f, +0.000328f, -0.000205f, -0.004125f, - +0.021251f, -0.004126f, +0.017806f, +0.001647f, -0.018692f, -0.004140f, -0.005076f, -0.002947f, +0.016714f, +0.001658f, - +0.003236f, +0.013209f, +0.002160f, +0.002855f, -0.005508f, +0.005552f, -0.001964f, -0.005087f, +0.001464f, -0.004929f, - +0.003031f, -0.000963f, +0.010453f, -0.003709f, +0.003708f, -0.002402f, -0.003527f, +0.003791f, -0.000259f, +0.001729f, - -0.003669f, +0.008374f, -0.003546f, +0.010266f, +0.006050f, +0.003956f, +0.001633f, +0.006472f, -0.001342f, +0.003021f, - +0.002106f, -0.002976f, -0.002360f, -0.002015f, +0.003524f, +0.002737f - }, - { - +0.000340f, +0.002579f, +0.000999f, +0.007242f, -0.016747f, +0.007236f, +0.040910f, -0.027985f, -0.022425f, +0.032085f, - -0.001253f, -0.022861f, +0.014105f, +0.015351f, +0.012464f, -0.025763f, +0.001878f, +0.027877f, -0.014704f, +0.011964f, - +0.034418f, -0.008374f, +0.013735f, +0.016669f, +0.004010f, +0.001346f, +0.008931f, -0.006664f, -0.002206f, -0.005722f, - -0.033084f, +0.000963f, -0.028400f, +0.005827f, +0.019246f, +0.018127f, -0.014861f, -0.017253f, -0.006760f, +0.008133f, - +0.013705f, -0.011386f, -0.010227f, +0.009870f, +0.016582f, +0.004106f, +0.001065f, -0.015420f, -0.002362f, -0.007218f, - +0.007305f, +0.000222f, -0.010192f, +0.008397f, +0.001293f, -0.000052f, -0.011457f, -0.009294f, +0.002534f, +0.001525f, - +0.005404f, -0.008360f, -0.001660f, +0.000922f, -0.011764f, +0.007476f, +0.001092f, +0.004268f, +0.003179f, +0.001323f, - -0.004194f, -0.007695f, -0.000954f, +0.007367f, -0.008712f, -0.004682f, -0.000393f, -0.002101f, -0.002243f, +0.001256f, - +0.000770f, -0.000871f, +0.007248f, +0.003688f, -0.004796f, -0.001672f, -0.003409f, -0.000540f, +0.000962f, -0.001623f, - -0.001285f, +0.002622f, +0.004746f, +0.000920f, +0.000324f, +0.000582f - }, - { - -0.030672f, -0.103326f, +0.010640f, -0.023231f, +0.018641f, +0.072611f, -0.026982f, -0.008605f, +0.012208f, -0.001738f, - -0.017784f, -0.023660f, +0.017313f, -0.008932f, -0.060202f, +0.019687f, +0.044032f, +0.028726f, +0.014628f, +0.010571f, - +0.016295f, +0.005062f, -0.011090f, +0.008120f, +0.012379f, -0.008216f, -0.002725f, +0.009090f, -0.004862f, +0.015156f, - -0.002330f, -0.016207f, -0.003305f, +0.021964f, +0.004520f, +0.012016f, +0.013241f, -0.002677f, -0.000497f, -0.014794f, - -0.006616f, +0.003197f, +0.001521f, -0.004593f, -0.008571f, +0.004373f, +0.010069f, -0.005577f, +0.000010f, -0.000164f, - +0.003991f, +0.004927f, +0.000367f, +0.003201f, +0.003953f, +0.002115f, +0.013600f, -0.005750f, +0.002082f, +0.004066f, - -0.002283f, -0.014808f, -0.002113f, +0.005140f, +0.001946f, +0.004829f, -0.007151f, +0.002035f, -0.002325f, +0.001926f, - +0.000387f, -0.001198f, -0.004384f, -0.001096f, +0.004639f, -0.005358f, -0.000607f, +0.000501f, -0.001096f, +0.000932f, - +0.005794f, +0.002575f, -0.003372f, +0.001924f, -0.003836f, -0.002705f, +0.000426f, +0.000188f, +0.001860f, +0.000795f, - -0.003122f, +0.000264f, +0.002722f, +0.000355f, +0.001407f, -0.000081f - }, - { - -0.000292f, +0.045813f, -0.027426f, +0.023937f, +0.013236f, -0.023654f, -0.019026f, -0.030879f, -0.013647f, -0.001243f, - +0.006026f, +0.009518f, -0.024462f, +0.041974f, -0.009884f, -0.009945f, -0.005696f, +0.039739f, -0.028907f, -0.006701f, - +0.014526f, -0.012072f, +0.049539f, -0.019781f, +0.007762f, +0.009956f, +0.004250f, +0.042154f, +0.017895f, -0.009360f, - -0.009704f, -0.035757f, +0.000379f, -0.012567f, -0.013538f, +0.001904f, -0.008791f, +0.006200f, -0.006549f, -0.001555f, - -0.016914f, +0.010976f, +0.001691f, +0.019805f, -0.000880f, +0.012322f, +0.004197f, +0.009170f, +0.001661f, -0.002652f, - -0.002766f, +0.007139f, -0.006645f, -0.008150f, -0.010691f, +0.002825f, -0.008978f, -0.007460f, -0.001194f, -0.001047f, - -0.004465f, +0.002731f, -0.001346f, +0.005964f, +0.006599f, +0.000813f, +0.003638f, -0.001720f, -0.008341f, -0.001109f, - +0.001207f, -0.000299f, -0.004838f, +0.008108f, -0.003626f, -0.009282f, -0.000209f, -0.006926f, +0.002427f, -0.000334f, - +0.001477f, +0.001444f, +0.001045f, -0.004720f, -0.006507f, -0.007144f, -0.004142f, -0.001276f, -0.000952f, +0.002558f, - -0.002568f, +0.005110f, -0.001201f, -0.000612f, +0.002498f, +0.000578f - }, - { - -0.024105f, -0.137203f, +0.010973f, -0.015308f, +0.025466f, +0.065357f, -0.009399f, +0.002382f, +0.044540f, +0.031244f, - -0.002562f, +0.024364f, -0.018343f, +0.018353f, +0.043637f, +0.040549f, -0.003950f, -0.013274f, +0.029446f, -0.002059f, - +0.001127f, -0.026097f, -0.004026f, +0.018116f, +0.001859f, -0.001413f, -0.000533f, +0.010501f, -0.007652f, -0.004281f, - +0.004047f, +0.003513f, -0.018948f, +0.001010f, -0.016655f, -0.003030f, +0.005809f, +0.006194f, +0.003043f, -0.015047f, - -0.015145f, -0.008123f, +0.005350f, +0.003629f, +0.009596f, +0.004762f, -0.003486f, +0.004742f, +0.010106f, -0.011423f, - +0.012553f, +0.004019f, +0.001857f, -0.001756f, -0.011325f, -0.000648f, +0.012020f, -0.004381f, +0.008129f, -0.002506f, - -0.004640f, +0.001033f, -0.008228f, +0.000857f, -0.006266f, -0.006133f, +0.007153f, +0.007356f, +0.010736f, -0.003607f, - -0.003680f, +0.011121f, -0.001529f, +0.000938f, -0.000049f, -0.003812f, -0.001038f, -0.002385f, -0.000238f, -0.002834f, - -0.005174f, -0.001030f, -0.002665f, -0.009526f, -0.003778f, +0.001003f, +0.001947f, +0.001383f, -0.001828f, -0.001620f, - -0.000650f, +0.004030f, -0.003916f, +0.001296f, +0.001439f, +0.000349f - }, - { - +0.002057f, -0.051094f, -0.032740f, +0.013500f, -0.007149f, -0.011159f, +0.017025f, -0.014348f, -0.010655f, -0.002051f, - +0.008366f, -0.003646f, -0.001821f, -0.019191f, +0.116969f, -0.020863f, -0.007412f, -0.010879f, -0.007494f, +0.001913f, - -0.008340f, +0.055903f, -0.012694f, +0.014017f, -0.007378f, +0.010871f, -0.008975f, +0.010167f, +0.013185f, -0.001991f, - -0.045194f, +0.009569f, -0.008252f, +0.011966f, +0.022143f, -0.008358f, +0.026214f, -0.015732f, -0.016553f, +0.002636f, - +0.002587f, +0.000924f, +0.013845f, -0.000574f, +0.000200f, -0.003037f, +0.001734f, -0.002112f, -0.006658f, +0.012864f, - -0.002736f, -0.003053f, +0.007196f, +0.009895f, +0.006202f, +0.008100f, +0.008789f, +0.004108f, +0.008828f, +0.011035f, - -0.002792f, -0.015813f, +0.002575f, +0.005290f, +0.007307f, +0.003501f, -0.000436f, -0.006752f, +0.007349f, -0.001456f, - -0.005962f, +0.003149f, +0.007881f, -0.003885f, +0.003054f, -0.003801f, -0.016169f, -0.001679f, +0.003918f, +0.006598f, - -0.002929f, +0.008456f, -0.003514f, +0.001390f, +0.005887f, +0.006557f, +0.003320f, +0.005374f, -0.003734f, +0.001770f, - +0.000701f, +0.000168f, -0.002744f, +0.003159f, -0.001246f, +0.001894f - } - }, - { - { - -0.010394f, -0.002092f, +0.014685f, +0.090592f, -0.039118f, -0.001616f, +0.011465f, +0.000433f, -0.017349f, +0.004366f, - +0.008254f, +0.007351f, -0.010307f, -0.005193f, +0.008519f, -0.000123f, -0.015778f, +0.004291f, +0.035991f, -0.011386f, - -0.007520f, +0.008577f, -0.002885f, +0.019850f, +0.013065f, -0.000239f, -0.013133f, +0.007685f, -0.001405f, +0.000803f, - +0.003089f, +0.008168f, -0.005827f, -0.007352f, +0.012115f, -0.004539f, -0.010407f, -0.004286f, +0.004002f, +0.007088f, - +0.004006f, +0.006467f, -0.004205f, -0.001847f, -0.007637f, +0.000070f, +0.002755f, +0.000563f, -0.000715f, +0.006763f, - +0.008490f, -0.005025f, -0.003870f, +0.000826f, +0.002344f, -0.006625f, -0.003159f, +0.003365f, +0.000175f, -0.001452f, - -0.000786f, +0.003728f, +0.001179f, -0.002474f, +0.006638f, -0.000303f, -0.002095f, -0.000686f, -0.002793f, +0.002316f, - +0.000741f, -0.004538f, +0.003523f, +0.001277f, -0.003541f, +0.003901f, -0.006159f, -0.004939f, +0.003142f, -0.000845f, - -0.002250f, -0.001011f, +0.001303f, +0.003084f, +0.002414f, +0.001727f, -0.000857f, -0.002804f, +0.000733f, +0.000454f, - -0.002921f, -0.001224f, -0.002510f, +0.000564f, +0.001000f, -0.001499f - }, - { - -0.002622f, +0.083941f, -0.030991f, -0.025403f, -0.026578f, +0.003222f, -0.004264f, +0.006492f, -0.002626f, +0.017516f, - +0.001196f, -0.014660f, -0.011133f, -0.001331f, +0.007999f, -0.000065f, +0.027228f, +0.002748f, -0.000775f, +0.016712f, - +0.027244f, +0.020213f, -0.003080f, +0.003978f, +0.021441f, -0.006141f, -0.011422f, -0.019401f, +0.015707f, -0.024964f, - +0.001756f, -0.029023f, +0.016485f, -0.031129f, -0.010555f, +0.004211f, +0.000868f, +0.006347f, -0.004147f, -0.000612f, - -0.006009f, +0.012384f, -0.002550f, +0.018426f, +0.003834f, +0.003813f, -0.004953f, -0.001824f, -0.003554f, +0.003054f, - +0.004288f, -0.001257f, +0.002736f, +0.001608f, +0.001237f, -0.004476f, +0.003763f, -0.003839f, +0.005222f, +0.004572f, - -0.003353f, -0.000888f, -0.004924f, +0.004433f, -0.000135f, +0.003887f, +0.001571f, -0.000010f, +0.000692f, -0.001885f, - +0.001959f, +0.000888f, -0.001117f, -0.004549f, -0.001709f, -0.002799f, +0.001014f, +0.002634f, -0.002090f, -0.003552f, - +0.001062f, +0.002498f, +0.003731f, +0.001088f, +0.001462f, +0.000635f, +0.001886f, +0.002727f, +0.000703f, -0.001868f, - -0.000506f, -0.000408f, -0.002007f, -0.002085f, +0.001534f, +0.000912f - }, - { - +0.001908f, +0.140841f, -0.022395f, -0.004273f, -0.034367f, -0.004109f, +0.009622f, +0.010332f, -0.015403f, +0.019920f, - -0.008883f, -0.009154f, -0.013823f, -0.000297f, -0.006113f, +0.004708f, +0.021541f, -0.004115f, +0.000722f, +0.002608f, - +0.009418f, -0.003327f, -0.003526f, -0.014008f, +0.010916f, -0.014374f, -0.021637f, +0.004375f, -0.018312f, -0.007387f, - +0.001861f, -0.007201f, -0.009239f, -0.000429f, -0.019515f, -0.001532f, +0.013964f, -0.002833f, +0.005818f, +0.000600f, - +0.000087f, +0.006759f, +0.004729f, -0.004728f, -0.018892f, -0.000509f, +0.007499f, +0.001442f, +0.007681f, +0.001789f, - +0.004532f, -0.010509f, +0.007051f, +0.003543f, +0.000319f, -0.002517f, -0.000776f, +0.002393f, +0.003043f, +0.004951f, - -0.000592f, +0.005844f, +0.003745f, +0.006152f, +0.001695f, +0.000742f, -0.002101f, +0.007115f, +0.001934f, -0.002534f, - +0.002287f, -0.001225f, -0.004654f, +0.004689f, +0.001484f, -0.002609f, +0.004612f, -0.003018f, +0.002528f, +0.004485f, - -0.003644f, -0.001966f, +0.003252f, -0.004249f, -0.001106f, +0.001877f, -0.002513f, -0.000717f, -0.000381f, +0.003352f, - -0.001076f, +0.000530f, +0.002636f, -0.001203f, +0.001927f, -0.000078f - }, - { - +0.009850f, -0.287640f, -0.003614f, +0.057733f, +0.009184f, -0.009172f, +0.006855f, +0.006160f, +0.004050f, +0.009036f, - -0.018228f, +0.003672f, -0.016374f, +0.008261f, -0.000378f, -0.024162f, +0.012506f, -0.002961f, +0.021562f, -0.022658f, - +0.002035f, +0.002655f, +0.008969f, +0.018899f, -0.000846f, +0.006687f, +0.018162f, +0.010302f, +0.009814f, +0.002079f, - +0.001935f, -0.008387f, +0.001077f, +0.006733f, -0.002973f, -0.011041f, -0.004697f, +0.007187f, +0.012390f, -0.002386f, - +0.014593f, -0.007290f, +0.009331f, -0.004059f, +0.004967f, -0.003280f, -0.006452f, -0.005122f, -0.002851f, -0.000206f, - +0.003477f, +0.000976f, -0.005863f, -0.002783f, -0.004715f, -0.001286f, +0.002311f, -0.004062f, +0.004548f, +0.004312f, - +0.001190f, -0.007906f, -0.003241f, -0.005365f, +0.005754f, +0.000216f, +0.003742f, -0.002399f, +0.001988f, -0.001334f, - +0.002914f, +0.003672f, +0.005308f, +0.000866f, -0.000137f, +0.001611f, +0.000036f, -0.003553f, -0.002757f, -0.000442f, - +0.000586f, +0.000087f, -0.001110f, +0.001010f, -0.001857f, +0.001091f, +0.002982f, +0.000619f, +0.002111f, +0.000846f, - +0.000648f, -0.002507f, +0.001347f, -0.000341f, -0.004285f, +0.001711f - }, - { - +0.000483f, +0.089116f, +0.015895f, -0.008326f, +0.003051f, -0.004753f, +0.002128f, +0.009260f, -0.003095f, +0.007477f, - -0.009551f, -0.008648f, +0.001091f, +0.005974f, -0.008371f, -0.001008f, -0.008247f, -0.015783f, +0.008327f, +0.008204f, - +0.006628f, -0.008102f, +0.007549f, +0.003880f, -0.011619f, +0.006536f, +0.004445f, -0.007495f, +0.005797f, -0.021939f, - +0.006753f, -0.008064f, +0.026650f, -0.011503f, +0.006571f, -0.019652f, -0.000310f, -0.007395f, -0.000196f, +0.000852f, - -0.004659f, +0.011020f, +0.008352f, -0.013166f, -0.013977f, +0.006065f, +0.000359f, -0.000782f, -0.000937f, -0.006431f, - -0.000418f, -0.007252f, +0.000692f, -0.003222f, +0.002000f, +0.005743f, -0.001507f, +0.005614f, +0.000738f, -0.000166f, - -0.000750f, -0.007291f, -0.005119f, -0.003306f, +0.003468f, -0.007836f, -0.000578f, +0.002914f, +0.006902f, +0.005162f, - -0.003592f, +0.002795f, +0.003158f, -0.000627f, +0.001251f, +0.000423f, -0.004414f, +0.000494f, -0.001984f, -0.001636f, - -0.003977f, +0.003387f, +0.000882f, -0.001456f, -0.001770f, +0.001797f, -0.001470f, +0.001088f, +0.000612f, +0.000190f, - -0.002622f, +0.002562f, -0.000606f, -0.000203f, -0.001770f, -0.002585f - }, - { - +0.016465f, -0.314510f, +0.026380f, +0.118595f, +0.002758f, -0.013442f, +0.005082f, +0.029235f, +0.001966f, -0.010841f, - -0.003216f, +0.008232f, +0.000429f, -0.013569f, -0.006457f, -0.018458f, -0.020368f, -0.005779f, +0.007171f, +0.027700f, - +0.008406f, +0.013971f, -0.007347f, +0.011506f, -0.005363f, -0.004083f, +0.005544f, +0.003282f, +0.001155f, +0.006487f, - -0.000185f, -0.008857f, -0.011658f, -0.009793f, +0.002007f, -0.005710f, +0.014659f, -0.007242f, +0.001192f, -0.009745f, - +0.009279f, -0.003625f, +0.012476f, +0.001411f, +0.002898f, -0.004812f, +0.001355f, +0.014623f, +0.010641f, +0.011098f, - -0.006106f, -0.002996f, -0.001157f, -0.011079f, +0.002389f, -0.000094f, -0.005499f, -0.010088f, -0.000375f, +0.003146f, - +0.002022f, -0.000315f, -0.002870f, +0.008147f, +0.000668f, -0.008260f, +0.002584f, -0.004048f, +0.004509f, +0.000406f, - -0.000399f, -0.010502f, -0.002150f, -0.001106f, -0.003138f, -0.004001f, -0.000187f, -0.001549f, +0.000086f, +0.001153f, - +0.003557f, +0.003764f, +0.005630f, -0.002596f, -0.000269f, +0.001169f, -0.005668f, +0.002306f, -0.004458f, +0.000773f, - +0.000017f, +0.000402f, +0.001759f, -0.001568f, -0.000119f, +0.002320f - }, - { - -0.003729f, -0.017406f, -0.032684f, -0.019163f, +0.014209f, -0.004825f, -0.005193f, -0.003139f, +0.000903f, +0.004428f, - +0.003786f, +0.006563f, +0.012654f, -0.019306f, -0.009839f, +0.001464f, -0.008066f, +0.018878f, +0.014081f, +0.028687f, - +0.020318f, +0.009801f, +0.000874f, +0.041014f, -0.019278f, -0.008199f, +0.012416f, -0.001357f, -0.004432f, +0.005776f, - +0.007555f, +0.013171f, -0.011762f, +0.001127f, +0.003203f, -0.000816f, -0.001113f, -0.006167f, -0.001700f, +0.005492f, - -0.011352f, +0.001107f, +0.000471f, +0.009733f, +0.009014f, -0.006159f, +0.003315f, +0.001485f, -0.005724f, +0.013029f, - +0.004030f, +0.002056f, -0.010716f, -0.005107f, -0.004969f, -0.000647f, +0.005060f, -0.003860f, +0.003124f, +0.001450f, - +0.004597f, -0.004897f, -0.011643f, +0.000753f, +0.001556f, +0.001591f, +0.003632f, +0.003983f, -0.000871f, +0.008171f, - -0.002394f, -0.008819f, -0.000846f, +0.000956f, -0.000601f, +0.007310f, -0.005795f, -0.001321f, +0.002444f, +0.000361f, - +0.003980f, +0.002019f, -0.000487f, -0.002908f, -0.000683f, -0.004223f, +0.003911f, +0.002129f, +0.001132f, +0.000979f, - +0.000824f, -0.001184f, -0.000546f, +0.002872f, +0.000406f, +0.002538f - }, - { - +0.009512f, -0.289348f, +0.026840f, +0.108329f, -0.003061f, -0.018179f, -0.001701f, +0.008726f, +0.015717f, +0.009857f, - -0.018530f, -0.007057f, +0.019208f, +0.006444f, +0.005569f, +0.023656f, +0.007180f, -0.010221f, +0.026895f, +0.009673f, - +0.000909f, -0.004342f, +0.006610f, -0.009092f, -0.006244f, -0.001535f, +0.007540f, -0.006324f, -0.006521f, +0.004955f, - -0.005561f, -0.010774f, +0.011320f, -0.000952f, -0.012084f, -0.001813f, -0.012052f, +0.002320f, -0.006841f, +0.001832f, - -0.006349f, +0.003503f, +0.000241f, -0.001582f, +0.003392f, +0.000711f, +0.004257f, -0.000848f, -0.006371f, -0.003774f, - +0.005992f, -0.008920f, +0.014833f, -0.003635f, -0.004748f, +0.000455f, +0.000302f, +0.011121f, +0.000884f, -0.004848f, - -0.001627f, -0.000147f, +0.000611f, -0.008156f, -0.003282f, -0.006087f, -0.004077f, -0.001318f, +0.000377f, -0.004705f, - -0.003918f, +0.000388f, -0.000753f, +0.000694f, +0.000565f, +0.000379f, -0.000796f, +0.001974f, +0.001021f, +0.004674f, - -0.000579f, +0.001092f, +0.000334f, +0.000165f, +0.001575f, +0.001099f, +0.003207f, -0.000482f, -0.000825f, +0.000403f, - +0.000814f, +0.000398f, +0.000777f, -0.002511f, -0.001929f, +0.000879f - }, - { - -0.004280f, -0.066159f, -0.035272f, -0.015068f, +0.016132f, +0.001191f, -0.004233f, +0.003818f, +0.004500f, -0.001989f, - +0.007467f, -0.017603f, +0.005693f, +0.001497f, +0.011480f, -0.011923f, +0.009080f, -0.012733f, +0.002648f, +0.017919f, - +0.007838f, +0.005412f, +0.010712f, -0.032708f, +0.007221f, -0.005990f, -0.003863f, -0.001249f, +0.000948f, -0.016743f, - -0.007014f, +0.007896f, +0.007928f, -0.020899f, +0.006536f, -0.006933f, -0.000464f, +0.004923f, -0.001198f, -0.004709f, - -0.012254f, -0.007958f, -0.001000f, +0.001971f, +0.003025f, +0.006628f, -0.002202f, -0.002509f, +0.004248f, -0.003733f, - +0.000722f, +0.002325f, -0.001128f, -0.000927f, +0.000562f, -0.007313f, -0.004633f, +0.007934f, -0.000247f, -0.000708f, - +0.004858f, -0.000923f, -0.004577f, +0.002195f, +0.001714f, +0.000370f, +0.004488f, +0.000558f, -0.005031f, +0.000278f, - +0.001941f, -0.000730f, +0.000426f, +0.000449f, -0.002950f, +0.004327f, -0.000030f, +0.000985f, +0.004656f, -0.003452f, - +0.003056f, +0.005105f, +0.001477f, +0.000943f, -0.002290f, -0.000879f, -0.001266f, +0.002084f, +0.000664f, -0.000614f, - -0.002067f, +0.000869f, -0.001423f, -0.001711f, +0.000722f, +0.001384f - }, - { - -0.004340f, -0.202335f, +0.021244f, -0.003717f, +0.013086f, -0.012061f, +0.010610f, -0.027748f, -0.001784f, -0.023157f, - -0.015462f, -0.004040f, +0.002747f, +0.031552f, +0.005121f, +0.005393f, -0.006106f, +0.003601f, -0.023878f, -0.011857f, - +0.000523f, -0.005182f, -0.010823f, +0.004274f, +0.012613f, +0.000699f, -0.011983f, +0.008306f, +0.006668f, -0.030498f, - -0.000829f, +0.001951f, -0.009957f, -0.001532f, -0.021101f, -0.004053f, +0.006376f, -0.003131f, -0.027582f, +0.009213f, - -0.007375f, -0.003570f, +0.000405f, +0.022312f, -0.011575f, -0.007237f, -0.001272f, -0.005501f, -0.009616f, -0.010181f, - +0.008269f, -0.010273f, +0.007113f, -0.003144f, -0.006133f, -0.004000f, -0.003211f, -0.000226f, +0.011819f, +0.001636f, - +0.003682f, +0.009624f, -0.001048f, +0.003820f, -0.001445f, -0.000070f, -0.003368f, +0.001881f, +0.005104f, -0.000707f, - +0.002649f, -0.002805f, +0.004144f, -0.007948f, +0.003799f, -0.002015f, -0.002431f, +0.009498f, +0.004301f, +0.002758f, - -0.001909f, +0.006090f, -0.010853f, +0.006928f, +0.004946f, +0.001170f, -0.001652f, +0.000451f, -0.004545f, -0.001054f, - -0.001203f, +0.000774f, +0.002615f, -0.001578f, -0.000844f, -0.002698f - }, - { - +0.000563f, +0.088630f, +0.043369f, -0.022853f, -0.026759f, -0.009043f, +0.032181f, -0.008189f, -0.023970f, -0.001919f, - -0.012884f, -0.008643f, +0.024476f, +0.011137f, -0.031494f, -0.040832f, +0.013469f, +0.032270f, -0.015995f, -0.002003f, - +0.021488f, -0.007803f, -0.005755f, -0.013125f, -0.006499f, -0.008001f, -0.013702f, -0.005932f, +0.015447f, +0.003086f, - -0.020658f, +0.002352f, -0.035327f, +0.010515f, -0.003657f, -0.002651f, -0.000829f, -0.005698f, -0.000843f, -0.002866f, - +0.004559f, -0.001490f, -0.003209f, +0.007779f, +0.006698f, -0.002968f, +0.004920f, -0.011597f, -0.004716f, -0.006573f, - +0.009926f, +0.001981f, -0.007883f, +0.006002f, -0.002604f, +0.005244f, -0.005863f, -0.012828f, -0.002475f, -0.004123f, - +0.003564f, -0.005100f, +0.003486f, +0.005631f, -0.003657f, +0.008758f, +0.001549f, -0.002103f, -0.005688f, -0.000977f, - +0.001539f, +0.000974f, +0.001015f, +0.005107f, -0.007817f, +0.000633f, +0.005195f, +0.009164f, +0.001562f, -0.000662f, - +0.001010f, -0.002373f, +0.002362f, +0.006257f, +0.004305f, +0.004514f, -0.002589f, +0.000471f, +0.004316f, +0.003265f, - +0.000308f, +0.000772f, -0.000885f, -0.002443f, +0.000472f, +0.000375f - }, - { - +0.034737f, -0.067106f, -0.021198f, -0.018581f, +0.002964f, +0.010530f, -0.061587f, -0.006990f, +0.008396f, +0.007216f, - +0.019212f, -0.001079f, +0.026311f, +0.013598f, -0.020592f, +0.028956f, +0.012907f, -0.004386f, +0.010121f, +0.003616f, - -0.004462f, -0.005177f, +0.000981f, +0.022133f, +0.020369f, +0.000401f, -0.001407f, -0.005237f, -0.002854f, +0.010207f, - +0.007825f, +0.006263f, +0.006584f, +0.006699f, -0.010288f, +0.010622f, +0.005245f, +0.003453f, +0.008221f, -0.003584f, - -0.006184f, +0.001683f, -0.003585f, -0.011724f, -0.007556f, +0.005130f, +0.004566f, -0.002681f, +0.008538f, +0.002430f, - -0.007868f, -0.008310f, -0.001076f, +0.002830f, +0.011648f, +0.007316f, +0.007028f, -0.007806f, +0.006437f, +0.006147f, - -0.000504f, -0.006803f, +0.003196f, +0.006640f, +0.000523f, +0.007618f, -0.004345f, +0.005194f, +0.004824f, -0.000229f, - -0.001514f, +0.003107f, -0.005085f, -0.001825f, +0.004982f, -0.002469f, +0.001657f, +0.003029f, +0.001427f, -0.000292f, - +0.003998f, -0.000360f, -0.007776f, -0.001723f, -0.002390f, +0.001195f, +0.001126f, -0.002559f, +0.002202f, +0.000283f, - -0.002239f, +0.001916f, +0.000330f, +0.000603f, +0.004911f, -0.002515f - }, - { - -0.000577f, +0.095942f, -0.005818f, +0.011106f, +0.006199f, -0.007066f, +0.002047f, -0.012396f, +0.001069f, -0.005302f, - +0.005044f, -0.002350f, -0.009193f, +0.059418f, -0.037327f, -0.034915f, -0.009528f, +0.036894f, -0.021158f, +0.004640f, - +0.017351f, -0.019146f, +0.029160f, -0.032707f, +0.004557f, +0.002085f, -0.022078f, +0.000143f, +0.000953f, -0.001188f, - -0.000447f, -0.015471f, +0.016892f, +0.022451f, +0.012329f, +0.013719f, -0.012077f, -0.014568f, -0.024514f, -0.000737f, - -0.003911f, +0.001270f, -0.008997f, +0.018689f, -0.008214f, +0.001261f, -0.006860f, +0.001039f, +0.001121f, +0.001052f, - -0.005593f, +0.003598f, -0.002413f, -0.001769f, -0.002144f, +0.005721f, -0.003523f, -0.005240f, -0.006194f, +0.000596f, - -0.006740f, -0.000333f, -0.002942f, -0.002943f, +0.001294f, +0.004331f, +0.002470f, -0.001923f, -0.006080f, -0.001790f, - -0.000068f, +0.002135f, -0.007361f, +0.007055f, -0.000038f, -0.008493f, +0.002427f, -0.002379f, +0.003097f, +0.000157f, - +0.004587f, +0.004762f, +0.002076f, +0.000353f, -0.000411f, -0.001041f, -0.002813f, +0.002264f, +0.001429f, +0.002835f, - -0.001797f, -0.000980f, -0.007218f, -0.003082f, +0.001779f, -0.000505f - }, - { - +0.026988f, -0.117020f, -0.022642f, -0.023239f, +0.003526f, -0.000468f, -0.050612f, -0.001201f, +0.002173f, +0.002815f, - -0.010410f, +0.027774f, -0.023714f, -0.000501f, +0.020315f, +0.010904f, +0.016418f, +0.010466f, +0.018043f, -0.015843f, - +0.003686f, -0.020582f, +0.001316f, +0.020144f, +0.009191f, +0.003441f, -0.004515f, +0.016919f, +0.003412f, -0.000556f, - -0.002027f, +0.008306f, +0.003515f, +0.021313f, -0.009977f, -0.014258f, +0.001180f, +0.001577f, -0.001933f, -0.009941f, - -0.011428f, +0.004717f, +0.002886f, -0.001236f, +0.012548f, +0.009406f, +0.012212f, +0.006545f, +0.001760f, -0.010315f, - +0.021959f, +0.005656f, +0.007761f, +0.010022f, +0.004777f, +0.004927f, +0.011260f, -0.009950f, +0.007775f, +0.001491f, - -0.008213f, -0.003491f, -0.004302f, +0.001068f, -0.002259f, -0.001183f, +0.003034f, -0.001053f, +0.003182f, -0.003184f, - -0.004563f, +0.010797f, -0.003612f, -0.001761f, +0.000720f, +0.000094f, +0.001775f, -0.001854f, +0.002004f, +0.001511f, - -0.003501f, -0.001796f, +0.001610f, -0.001656f, -0.000555f, +0.001020f, -0.000150f, -0.002016f, +0.000151f, +0.001391f, - -0.000510f, +0.005267f, -0.001357f, +0.002574f, +0.000617f, -0.001532f - }, - { - -0.000639f, +0.031559f, +0.018303f, +0.013030f, -0.006577f, +0.004265f, +0.025033f, -0.007664f, +0.007632f, +0.005967f, - +0.011457f, -0.009046f, -0.001470f, -0.035848f, +0.089214f, +0.000780f, +0.048302f, +0.023972f, +0.014944f, +0.016927f, - -0.033924f, +0.026486f, -0.013123f, +0.006530f, -0.013155f, +0.019441f, +0.002268f, +0.020217f, -0.004292f, -0.006306f, - -0.033795f, +0.002787f, -0.000010f, +0.015484f, +0.013586f, -0.003115f, +0.019821f, -0.020716f, -0.006211f, +0.001524f, - -0.009405f, -0.004171f, +0.020641f, +0.011655f, +0.006567f, +0.001051f, +0.001540f, -0.002108f, -0.005869f, -0.000392f, - -0.008487f, -0.002448f, -0.006623f, +0.001616f, -0.000641f, -0.001235f, +0.000251f, -0.007495f, +0.001607f, +0.002808f, - -0.002214f, -0.011874f, -0.006247f, -0.002857f, +0.003579f, +0.004388f, +0.004301f, -0.002807f, +0.007201f, -0.003037f, - -0.008435f, +0.003420f, +0.004835f, -0.007025f, -0.004156f, -0.002036f, -0.009507f, -0.004467f, -0.003161f, +0.004861f, - -0.003003f, +0.009002f, +0.000512f, -0.000567f, -0.000182f, +0.002360f, -0.001945f, +0.003342f, -0.001005f, +0.001071f, - -0.000475f, +0.000344f, -0.002446f, +0.005321f, +0.001059f, +0.004118f - } - }, - { - { - +0.006256f, +0.077198f, +0.001388f, -0.027580f, +0.039752f, +0.012062f, +0.002395f, -0.008980f, -0.016078f, +0.004213f, - +0.009863f, +0.003410f, -0.002793f, -0.004258f, -0.007459f, +0.016436f, -0.020977f, +0.010021f, +0.008523f, -0.025822f, - +0.018856f, +0.002421f, +0.012078f, +0.018060f, +0.006704f, -0.011193f, -0.006291f, -0.004367f, -0.005784f, +0.005453f, - +0.019756f, -0.003239f, -0.010137f, +0.000101f, +0.008380f, +0.004413f, -0.020878f, +0.004801f, +0.001284f, +0.000581f, - +0.001382f, +0.001289f, -0.002226f, +0.002436f, -0.006825f, -0.008336f, +0.005489f, -0.004473f, +0.011358f, -0.001712f, - +0.003862f, +0.003626f, -0.005089f, +0.001128f, +0.001885f, -0.002276f, -0.003488f, +0.006294f, -0.001379f, +0.003081f, - -0.000569f, +0.004487f, -0.000358f, +0.000748f, -0.000479f, +0.003874f, -0.009772f, -0.003596f, -0.000189f, +0.001366f, - +0.003714f, -0.003415f, +0.000380f, +0.002646f, +0.001900f, +0.001167f, -0.005924f, -0.002763f, +0.001245f, -0.003767f, - +0.000320f, -0.004341f, +0.004913f, +0.000208f, +0.002397f, -0.000749f, -0.000413f, -0.001791f, +0.000666f, -0.001379f, - -0.001900f, -0.002815f, -0.001677f, +0.000923f, +0.000806f, -0.003007f - }, - { - +0.003319f, -0.023953f, +0.054181f, -0.048387f, -0.021781f, +0.000625f, +0.003753f, -0.000379f, -0.005010f, +0.013887f, - -0.001945f, -0.008002f, +0.007843f, -0.024206f, +0.008734f, +0.010268f, +0.007864f, +0.004711f, +0.028108f, +0.013015f, - +0.008487f, +0.025687f, +0.008998f, +0.001248f, -0.000608f, +0.009781f, -0.011568f, -0.015617f, +0.004374f, -0.007223f, - -0.014856f, -0.017814f, -0.006654f, -0.011902f, -0.004126f, +0.006134f, -0.004859f, +0.003281f, -0.000988f, +0.001858f, - -0.011206f, +0.009168f, +0.012178f, +0.000316f, +0.010913f, +0.005834f, -0.003165f, -0.006158f, -0.002301f, +0.000421f, - -0.003917f, +0.007037f, +0.002543f, +0.006195f, +0.000471f, -0.001775f, -0.003157f, +0.003069f, +0.005181f, -0.000427f, - -0.001612f, +0.004088f, -0.007450f, +0.002326f, +0.002260f, -0.001891f, +0.003618f, +0.002444f, -0.002218f, +0.000907f, - +0.004417f, -0.000701f, -0.003393f, -0.000718f, -0.001552f, -0.002725f, +0.000054f, +0.005006f, +0.000317f, -0.007311f, - +0.003087f, +0.005381f, -0.000363f, -0.000052f, +0.000623f, -0.000641f, +0.002895f, +0.002104f, +0.001490f, -0.001494f, - -0.000839f, -0.001244f, -0.001058f, -0.000316f, -0.002058f, +0.000224f - }, - { - -0.001233f, +0.155753f, -0.021313f, -0.073044f, +0.023049f, -0.004183f, +0.010129f, +0.008187f, -0.010413f, +0.004393f, - -0.006906f, -0.018171f, -0.004208f, -0.003558f, -0.004083f, +0.014572f, +0.010771f, +0.014574f, -0.010836f, -0.003027f, - +0.004673f, +0.013422f, -0.022481f, -0.009892f, +0.005250f, -0.018355f, -0.009583f, -0.007639f, -0.000430f, -0.003731f, - -0.012849f, +0.002969f, -0.008224f, -0.017143f, -0.005552f, +0.001470f, +0.016467f, -0.000596f, -0.000728f, +0.002496f, - +0.004478f, +0.000888f, +0.003327f, -0.005923f, -0.004696f, -0.005218f, +0.006783f, -0.003650f, -0.000810f, +0.006125f, - +0.001686f, +0.000002f, -0.003481f, +0.006913f, -0.000907f, -0.002469f, +0.006445f, -0.003072f, +0.004591f, +0.006148f, - +0.001764f, +0.007632f, +0.000832f, -0.001764f, +0.008451f, -0.003243f, +0.001595f, +0.005665f, -0.003271f, -0.001402f, - +0.002791f, +0.004684f, -0.009527f, +0.004008f, -0.002305f, +0.005343f, +0.001235f, +0.002784f, -0.001930f, +0.006880f, - -0.004939f, +0.001257f, -0.000978f, -0.002759f, -0.002490f, -0.000447f, -0.001041f, -0.001919f, +0.001431f, +0.000919f, - +0.002012f, +0.001320f, -0.000775f, +0.002187f, -0.001379f, +0.001085f - }, - { - -0.011693f, -0.246293f, -0.006749f, +0.081454f, -0.006698f, -0.009087f, -0.000984f, -0.002373f, -0.001392f, +0.025583f, - -0.011449f, -0.011998f, +0.001604f, -0.005464f, -0.003081f, +0.002763f, -0.002619f, +0.005244f, +0.010076f, -0.002694f, - -0.008182f, -0.000838f, +0.011232f, +0.023329f, -0.011203f, +0.011474f, +0.014733f, +0.019992f, +0.013727f, +0.003469f, - -0.005336f, +0.009799f, -0.008411f, -0.004421f, -0.002037f, -0.016436f, +0.013578f, -0.001642f, +0.009279f, +0.003302f, - +0.006662f, +0.009248f, +0.001024f, +0.002301f, -0.002257f, -0.019510f, +0.006770f, -0.006607f, +0.002622f, +0.000370f, - -0.003875f, -0.000374f, -0.004006f, -0.006301f, -0.008001f, +0.001824f, -0.001793f, -0.000140f, +0.002729f, -0.001784f, - +0.012655f, -0.008214f, -0.012505f, +0.000306f, -0.000829f, +0.004884f, +0.007115f, -0.003261f, -0.002293f, -0.000258f, - -0.001995f, +0.006280f, +0.007258f, -0.000946f, +0.001826f, +0.000582f, -0.001588f, -0.003189f, -0.003123f, +0.001492f, - -0.001540f, +0.001176f, +0.000694f, -0.002831f, -0.000800f, +0.001803f, -0.000994f, +0.001022f, +0.002761f, +0.005372f, - -0.001684f, -0.001128f, +0.002156f, -0.001992f, -0.001860f, +0.000401f - }, - { - +0.000524f, +0.069668f, +0.033309f, -0.010034f, -0.003989f, -0.000344f, -0.000743f, +0.007839f, -0.001635f, +0.005128f, - -0.005524f, -0.010351f, -0.007716f, -0.004903f, -0.012004f, +0.000381f, +0.014555f, -0.023261f, +0.009530f, +0.016451f, - +0.004000f, +0.001192f, -0.009181f, -0.010539f, +0.017264f, +0.001508f, -0.005299f, -0.003625f, +0.001134f, -0.029670f, - +0.004689f, +0.013371f, +0.006445f, +0.008371f, +0.008029f, -0.025362f, -0.005985f, -0.010914f, -0.003663f, +0.018908f, - -0.017906f, +0.013303f, -0.001186f, -0.006881f, -0.011270f, +0.005772f, +0.003567f, -0.006104f, +0.001151f, -0.002192f, - -0.005651f, -0.009359f, -0.001489f, -0.003276f, -0.000422f, +0.010227f, -0.001117f, +0.002751f, +0.004892f, -0.002784f, - -0.002832f, -0.007162f, -0.004506f, -0.000182f, -0.000552f, -0.007607f, -0.005286f, +0.007437f, +0.003928f, +0.003271f, - -0.000892f, +0.004582f, +0.004841f, -0.000457f, +0.001851f, -0.000636f, -0.003581f, -0.000011f, -0.003216f, -0.002381f, - -0.001138f, +0.003049f, -0.002714f, +0.002143f, -0.002847f, +0.000600f, -0.000634f, +0.000576f, +0.000522f, +0.000630f, - -0.000940f, +0.000638f, +0.000693f, -0.000802f, +0.000629f, -0.003299f - }, - { - -0.018102f, -0.230323f, +0.005182f, +0.116812f, +0.003739f, -0.006685f, -0.005607f, +0.020757f, +0.003378f, +0.002655f, - -0.013295f, +0.006317f, +0.017552f, -0.005982f, -0.019105f, -0.003539f, -0.025128f, -0.020072f, +0.005204f, +0.044402f, - +0.004548f, +0.001140f, +0.007079f, +0.014694f, +0.010494f, -0.012544f, +0.001709f, +0.009877f, +0.006763f, -0.004783f, - +0.007112f, -0.009547f, -0.018616f, -0.003794f, -0.008219f, +0.003862f, +0.000355f, +0.002082f, +0.000789f, -0.006130f, - +0.008091f, -0.000435f, +0.001006f, +0.005855f, -0.001185f, +0.005303f, +0.003629f, +0.014546f, +0.009876f, +0.007587f, - +0.004388f, -0.006651f, -0.010535f, -0.006317f, +0.003139f, -0.001719f, -0.011143f, -0.011368f, -0.004962f, +0.007935f, - +0.003379f, +0.002005f, -0.000979f, +0.001527f, +0.002222f, -0.005916f, +0.000935f, +0.000256f, +0.001346f, +0.004083f, - -0.002708f, -0.007583f, -0.005084f, -0.000259f, +0.000275f, -0.005810f, -0.004076f, -0.001391f, +0.000578f, +0.001983f, - +0.002351f, +0.003000f, +0.004593f, +0.001516f, +0.000499f, +0.000877f, -0.002515f, -0.004721f, -0.000500f, -0.000190f, - +0.001255f, +0.000845f, -0.002231f, +0.000576f, -0.001667f, +0.001334f - }, - { - +0.000758f, -0.047897f, -0.033227f, +0.004389f, -0.008007f, +0.003714f, -0.003760f, -0.002252f, -0.007646f, -0.001042f, - +0.015035f, -0.006727f, +0.010297f, -0.008086f, -0.010951f, -0.016053f, +0.003467f, +0.030158f, +0.020960f, +0.024064f, - +0.010772f, +0.017014f, +0.023651f, +0.005861f, +0.012876f, -0.009736f, -0.000858f, -0.007481f, +0.019489f, +0.009463f, - -0.002988f, +0.003297f, -0.000182f, +0.013706f, -0.017850f, +0.006180f, -0.005721f, -0.002386f, +0.011136f, -0.011889f, - -0.011318f, -0.001010f, +0.010679f, +0.010593f, -0.004355f, +0.002910f, +0.000344f, -0.004375f, +0.005416f, +0.012480f, - +0.000266f, -0.006424f, -0.004107f, -0.000778f, -0.010428f, -0.002618f, +0.005840f, +0.003042f, -0.003302f, +0.002549f, - +0.003359f, -0.007155f, -0.003515f, -0.002541f, +0.003695f, -0.000212f, +0.005604f, +0.001275f, +0.003023f, +0.001426f, - +0.002650f, -0.006779f, -0.004873f, -0.002176f, +0.003828f, +0.000962f, -0.002324f, +0.000077f, -0.001547f, +0.000734f, - +0.003537f, +0.005244f, -0.005172f, -0.000527f, -0.004622f, +0.000283f, +0.002925f, +0.001758f, +0.001809f, +0.001102f, - +0.001468f, -0.001212f, +0.001050f, -0.000262f, +0.001948f, +0.000740f - }, - { - -0.010889f, -0.232735f, +0.025470f, +0.085821f, +0.010601f, +0.002384f, -0.019284f, +0.009221f, +0.018817f, +0.007756f, - -0.020120f, -0.007707f, +0.022610f, -0.000349f, +0.027438f, +0.018402f, -0.025359f, +0.022027f, +0.013484f, +0.017592f, - -0.007433f, +0.001618f, -0.006568f, -0.005805f, -0.004449f, +0.004829f, +0.006059f, -0.000610f, -0.001088f, -0.005893f, - -0.006474f, -0.000087f, +0.009353f, -0.004314f, -0.011801f, +0.002021f, -0.001146f, -0.016631f, +0.001929f, -0.001760f, - +0.001521f, -0.008154f, +0.000565f, +0.008119f, +0.009193f, -0.001790f, -0.006471f, -0.002514f, +0.004975f, -0.005426f, - +0.000461f, +0.002414f, +0.003085f, +0.003028f, -0.000646f, +0.001020f, +0.000781f, +0.000949f, -0.001417f, -0.001218f, - +0.002754f, -0.006164f, +0.000460f, +0.002212f, -0.008747f, -0.001600f, -0.003727f, -0.006853f, +0.002628f, -0.004366f, - -0.001457f, -0.003698f, +0.002262f, +0.000334f, -0.001464f, -0.000514f, +0.000243f, +0.002636f, -0.000464f, +0.001996f, - +0.000585f, +0.002870f, +0.001653f, +0.001643f, +0.000504f, -0.001730f, +0.005667f, -0.001140f, -0.000687f, -0.001170f, - +0.002111f, +0.001202f, +0.000681f, -0.003435f, -0.004192f, +0.001123f - }, - { - -0.002533f, -0.046958f, -0.079200f, +0.009216f, +0.000660f, +0.004587f, -0.005340f, +0.005046f, +0.001238f, +0.001329f, - +0.005690f, -0.013838f, -0.010930f, +0.013434f, +0.008342f, +0.029951f, -0.025906f, -0.007554f, +0.005155f, +0.012395f, - +0.009711f, -0.008833f, -0.001230f, -0.018139f, +0.028475f, -0.018606f, -0.004345f, +0.004725f, -0.004404f, -0.022673f, - -0.001347f, +0.007134f, -0.005185f, +0.002015f, -0.012003f, +0.003863f, -0.005385f, -0.007855f, +0.007259f, -0.008420f, - -0.002786f, -0.015194f, +0.003075f, +0.003983f, +0.004614f, +0.001565f, +0.003356f, +0.000830f, -0.001810f, +0.002563f, - +0.000778f, -0.004723f, +0.005427f, -0.002389f, +0.001552f, -0.009787f, -0.000616f, -0.001389f, -0.001525f, +0.002557f, - +0.003571f, -0.001229f, +0.004235f, -0.004949f, +0.003217f, +0.006277f, +0.000085f, +0.000998f, -0.008010f, +0.001201f, - +0.001815f, +0.000994f, +0.002109f, -0.001051f, -0.004367f, +0.001139f, -0.001195f, +0.001901f, +0.002766f, +0.001127f, - +0.003348f, +0.003032f, +0.002186f, +0.001447f, +0.001071f, -0.003920f, -0.001094f, +0.002402f, +0.002059f, -0.000584f, - -0.003159f, +0.001974f, -0.003183f, -0.000544f, +0.001619f, +0.000290f - }, - { - +0.008149f, -0.099342f, -0.072183f, -0.005268f, +0.000521f, +0.005071f, -0.034893f, -0.015360f, -0.010323f, -0.008215f, - -0.022564f, +0.007874f, +0.006373f, +0.017630f, +0.019901f, -0.027824f, +0.014133f, -0.008965f, -0.002671f, +0.001110f, - -0.020366f, +0.011844f, -0.005757f, +0.005209f, +0.003928f, -0.017211f, -0.000433f, +0.003638f, -0.007582f, -0.022035f, - -0.005370f, +0.010909f, -0.015731f, -0.007613f, -0.015281f, -0.005466f, +0.009921f, -0.015915f, -0.004925f, +0.001486f, - -0.006423f, -0.003488f, +0.003958f, +0.014715f, -0.002622f, -0.004167f, -0.005048f, -0.007272f, -0.014874f, -0.001641f, - -0.001947f, +0.003521f, -0.003958f, -0.019421f, +0.014109f, -0.006806f, +0.002313f, -0.004159f, +0.010945f, +0.003060f, - +0.000060f, +0.012444f, -0.005990f, +0.005488f, +0.000292f, -0.006962f, +0.003961f, +0.007621f, -0.005075f, +0.005089f, - +0.002916f, -0.005667f, +0.001013f, -0.001404f, +0.000246f, +0.001507f, -0.002002f, +0.003512f, +0.005291f, +0.005835f, - +0.003371f, -0.003185f, -0.007025f, +0.006692f, +0.004128f, -0.000740f, +0.003744f, -0.008759f, -0.001676f, -0.001504f, - -0.002302f, +0.000367f, +0.005297f, -0.000467f, -0.003222f, -0.002916f - }, - { - +0.000829f, +0.117247f, +0.013096f, -0.027607f, -0.004058f, -0.011310f, +0.008457f, +0.004602f, -0.013964f, -0.010123f, - -0.007767f, +0.003242f, +0.013747f, +0.000931f, -0.047082f, +0.003526f, +0.003914f, +0.008979f, -0.005181f, -0.000738f, - +0.000062f, +0.018877f, -0.026604f, -0.018265f, +0.003145f, -0.019526f, -0.010432f, +0.003119f, +0.011958f, -0.008365f, - -0.008904f, -0.008558f, -0.016886f, +0.000902f, -0.012382f, -0.008651f, +0.007076f, -0.003107f, +0.003089f, -0.000663f, - -0.011818f, +0.004994f, +0.010019f, +0.003176f, -0.005960f, +0.007772f, +0.003403f, -0.012916f, -0.002692f, -0.004957f, - +0.010179f, -0.004043f, -0.005407f, +0.000584f, +0.005711f, -0.001325f, -0.003141f, -0.006845f, -0.002058f, -0.007566f, - -0.001652f, +0.003173f, +0.007889f, -0.003466f, +0.004285f, +0.000677f, +0.001277f, -0.002051f, -0.001068f, -0.005247f, - +0.001065f, +0.003616f, -0.001238f, +0.000839f, -0.002879f, +0.007666f, +0.003159f, +0.005150f, +0.003474f, +0.001336f, - -0.001931f, -0.000648f, -0.001853f, +0.005082f, +0.006427f, +0.008207f, -0.002875f, +0.000103f, +0.001763f, +0.003304f, - +0.002295f, -0.000940f, -0.001907f, -0.001635f, +0.001682f, -0.002622f - }, - { - -0.032777f, -0.059406f, +0.038046f, +0.007193f, -0.004344f, -0.035221f, -0.022813f, -0.004795f, -0.007569f, +0.010934f, - +0.041941f, -0.010611f, +0.014075f, +0.006969f, +0.032393f, +0.017189f, -0.002883f, -0.009531f, +0.015817f, +0.006336f, - -0.021049f, -0.004214f, +0.022216f, +0.006765f, +0.013145f, +0.016558f, -0.006503f, -0.013468f, +0.003944f, +0.002345f, - +0.003677f, +0.022932f, +0.006672f, -0.000228f, -0.019687f, +0.023006f, -0.001787f, +0.005445f, +0.004810f, -0.001894f, - -0.007478f, -0.004084f, +0.003439f, -0.011481f, -0.010777f, +0.013968f, -0.009685f, +0.005090f, +0.009152f, +0.000756f, - -0.009105f, -0.005183f, +0.000669f, -0.005093f, +0.015353f, +0.000036f, +0.003187f, -0.005717f, +0.010261f, +0.007746f, - -0.002645f, +0.001256f, +0.007353f, +0.001421f, -0.004521f, +0.010172f, -0.004591f, +0.009071f, +0.005823f, -0.006682f, - +0.002791f, +0.003432f, -0.002980f, +0.000643f, -0.001566f, -0.000649f, +0.004963f, +0.002907f, -0.002752f, +0.001119f, - +0.004839f, -0.005564f, -0.000355f, -0.005275f, -0.000241f, +0.001408f, +0.002458f, -0.000219f, +0.002384f, -0.002471f, - -0.001026f, +0.001077f, +0.000893f, -0.000678f, +0.003775f, -0.002149f - }, - { - +0.001594f, +0.065265f, +0.020441f, +0.011365f, -0.005657f, -0.001152f, +0.003747f, +0.004565f, -0.002368f, -0.010902f, - +0.001862f, -0.001233f, +0.014993f, +0.025837f, -0.017836f, -0.025151f, -0.007599f, +0.019412f, -0.020944f, -0.006106f, - +0.034295f, +0.000828f, -0.008820f, -0.022446f, +0.008306f, +0.005975f, -0.024504f, -0.021234f, +0.000467f, +0.020524f, - -0.023450f, +0.012426f, +0.005038f, +0.033059f, +0.015043f, +0.002142f, -0.011707f, -0.019537f, -0.006072f, +0.002500f, - +0.000023f, -0.012929f, +0.001414f, -0.002961f, +0.005705f, -0.000353f, -0.008245f, +0.001444f, -0.003587f, +0.004598f, - -0.012699f, +0.001990f, +0.001036f, +0.001248f, +0.005831f, -0.008582f, +0.010071f, -0.010235f, -0.002026f, +0.003588f, - -0.006903f, -0.008051f, -0.002886f, +0.003180f, -0.003529f, -0.000031f, +0.008648f, -0.004105f, -0.004040f, +0.000726f, - -0.002904f, +0.001234f, -0.000767f, +0.001515f, -0.001135f, -0.008827f, +0.008338f, -0.001961f, +0.000327f, +0.001842f, - +0.001495f, +0.006855f, -0.000550f, +0.005865f, +0.000523f, -0.001367f, -0.003999f, +0.007388f, -0.002047f, -0.000434f, - +0.003108f, -0.003095f, -0.006506f, -0.007108f, +0.001650f, -0.001108f - }, - { - -0.025492f, -0.110514f, +0.041502f, -0.010461f, -0.019934f, -0.015551f, -0.026283f, -0.012381f, -0.015998f, -0.000057f, - -0.016594f, +0.024067f, -0.011818f, -0.014326f, +0.019844f, +0.000624f, +0.024467f, +0.008948f, +0.008271f, -0.005919f, - +0.002173f, -0.013029f, -0.015232f, +0.030498f, +0.005408f, +0.003363f, +0.006920f, +0.004045f, -0.000463f, +0.002218f, - -0.003453f, +0.010081f, +0.006864f, +0.013824f, +0.009870f, -0.010878f, -0.008912f, +0.001688f, -0.001704f, -0.008176f, - -0.007891f, +0.012318f, +0.003768f, -0.010047f, +0.008782f, +0.009995f, +0.016793f, +0.010736f, -0.012648f, +0.010017f, - +0.010365f, -0.000367f, +0.012600f, -0.001746f, +0.017070f, +0.008049f, +0.005452f, -0.001743f, +0.001255f, +0.000538f, - -0.006185f, -0.009350f, -0.000938f, -0.001359f, +0.004353f, -0.002454f, -0.000093f, -0.001762f, -0.002666f, +0.003853f, - -0.002664f, +0.001902f, -0.002394f, +0.003706f, -0.002803f, +0.003893f, -0.004107f, +0.003963f, +0.000776f, +0.003830f, - -0.002787f, -0.002520f, -0.001462f, +0.004132f, -0.001102f, -0.000886f, +0.001786f, -0.003837f, +0.000939f, +0.001016f, - +0.000081f, +0.000428f, +0.003526f, +0.002487f, -0.000063f, -0.003530f - }, - { - +0.002367f, +0.090599f, -0.032942f, +0.016838f, +0.008861f, -0.004674f, +0.005662f, +0.015055f, +0.004876f, +0.008590f, - +0.007725f, -0.007844f, -0.010983f, +0.045567f, -0.014001f, +0.034742f, +0.028121f, +0.040349f, +0.000857f, -0.002127f, - -0.000837f, -0.003761f, +0.000493f, +0.010559f, -0.020622f, +0.020793f, +0.010749f, +0.007205f, +0.008230f, -0.006070f, - -0.035895f, +0.005777f, -0.000591f, +0.019513f, -0.000953f, +0.009556f, +0.004579f, -0.021008f, +0.002518f, +0.005357f, - -0.013892f, -0.001430f, +0.019081f, +0.006408f, +0.009760f, +0.010491f, -0.010153f, +0.004368f, +0.003371f, -0.006214f, - -0.011471f, +0.001369f, -0.012433f, -0.004027f, +0.000505f, -0.000437f, +0.004447f, -0.009912f, +0.001341f, -0.006444f, - +0.003335f, -0.007383f, -0.010388f, -0.001120f, +0.002558f, +0.007992f, +0.000550f, +0.005634f, -0.004456f, +0.003031f, - -0.008152f, +0.000434f, +0.001369f, +0.001719f, -0.010217f, -0.001152f, -0.001084f, -0.007857f, -0.004160f, +0.002698f, - +0.001577f, +0.002487f, +0.003018f, +0.001626f, -0.000998f, -0.001306f, -0.000662f, +0.000044f, +0.000419f, +0.001159f, - -0.002429f, +0.001773f, +0.001588f, +0.001296f, +0.002147f, +0.002835f - } - }, - { - { - -0.005433f, +0.200795f, +0.095500f, -0.077629f, -0.001608f, +0.000551f, +0.000483f, -0.018733f, -0.018253f, +0.001493f, - +0.007382f, +0.013021f, +0.003522f, -0.002858f, -0.016651f, +0.015391f, -0.030034f, +0.003988f, +0.006196f, -0.024716f, - +0.010764f, -0.005391f, +0.000914f, +0.015435f, +0.007851f, -0.017097f, -0.011794f, -0.006846f, +0.002140f, +0.016529f, - +0.013820f, -0.007209f, +0.002645f, +0.014618f, +0.004268f, +0.008660f, -0.002901f, +0.010762f, -0.008215f, -0.005581f, - -0.000587f, +0.002890f, -0.000305f, -0.000150f, -0.005444f, -0.003208f, +0.008971f, -0.005507f, +0.011522f, -0.004176f, - +0.000450f, +0.008396f, +0.002254f, +0.005612f, +0.002742f, -0.000800f, +0.000790f, +0.004602f, -0.006284f, +0.001796f, - -0.006439f, +0.001692f, -0.003418f, -0.005639f, -0.001145f, +0.006403f, -0.003543f, -0.000722f, +0.001117f, +0.002037f, - +0.002600f, -0.001505f, -0.001911f, -0.000053f, +0.002880f, +0.000798f, -0.003061f, -0.001276f, +0.000219f, -0.001792f, - +0.001601f, -0.004873f, +0.002965f, +0.000139f, +0.000891f, -0.001166f, +0.000578f, -0.001417f, -0.000662f, -0.003678f, - -0.000436f, -0.001687f, -0.001515f, -0.000769f, -0.001041f, +0.000069f - }, - { - -0.000777f, -0.102999f, +0.007945f, -0.003625f, +0.017664f, -0.006555f, -0.007145f, -0.000951f, -0.004118f, -0.003521f, - -0.009608f, -0.011399f, +0.009567f, -0.018221f, +0.011597f, -0.000934f, -0.011215f, -0.016410f, +0.005018f, +0.005492f, - +0.006204f, +0.007885f, -0.011945f, +0.000562f, +0.004180f, +0.011516f, -0.001906f, -0.000204f, +0.003177f, -0.004955f, - -0.004735f, -0.001597f, -0.000046f, -0.007549f, +0.005080f, +0.010250f, -0.005910f, +0.010811f, +0.000750f, -0.003038f, - -0.006705f, +0.004465f, +0.007742f, -0.011890f, +0.005107f, +0.002271f, -0.002352f, -0.003417f, -0.008560f, -0.007253f, - -0.005553f, +0.008140f, +0.005556f, +0.009611f, -0.001995f, -0.006851f, -0.005520f, +0.004490f, +0.005110f, -0.004965f, - -0.004492f, +0.008743f, -0.005230f, -0.001260f, -0.000251f, -0.005682f, +0.000790f, +0.002164f, +0.002908f, +0.004082f, - +0.003067f, -0.001861f, -0.002048f, +0.001826f, +0.002224f, -0.000616f, -0.001681f, +0.001668f, +0.000646f, -0.005334f, - +0.001046f, -0.000006f, -0.004466f, -0.000309f, +0.002200f, +0.001189f, +0.002550f, +0.001357f, -0.000183f, -0.001663f, - -0.001398f, -0.000653f, +0.000735f, -0.000269f, -0.001300f, +0.000993f - }, - { - +0.001207f, +0.101807f, -0.051421f, -0.075883f, +0.035374f, -0.002030f, +0.006768f, +0.009894f, -0.009285f, -0.008806f, - -0.003525f, -0.014984f, -0.003850f, -0.010537f, -0.012795f, +0.008389f, +0.021143f, +0.032226f, -0.017770f, -0.012883f, - -0.012159f, +0.004435f, -0.015288f, -0.010287f, +0.013282f, +0.013644f, +0.012959f, -0.001814f, +0.004456f, +0.004293f, - -0.005837f, +0.011247f, -0.007044f, -0.012471f, -0.001224f, -0.000729f, +0.008418f, -0.002966f, -0.000280f, -0.000840f, - +0.002985f, -0.005028f, +0.008223f, +0.004073f, -0.003262f, -0.011216f, +0.000249f, -0.007512f, -0.001341f, -0.001084f, - -0.003499f, +0.010535f, +0.000920f, +0.002112f, +0.007360f, +0.001687f, +0.004058f, -0.003475f, +0.006528f, +0.009517f, - +0.001812f, +0.003618f, -0.000494f, -0.000100f, +0.008507f, -0.001809f, -0.002263f, -0.001798f, -0.005227f, -0.002587f, - -0.003740f, +0.002073f, -0.006477f, +0.003049f, -0.006044f, -0.000638f, -0.003926f, +0.006552f, -0.001481f, +0.002818f, - -0.004057f, +0.005326f, -0.000050f, -0.001829f, -0.000574f, -0.001803f, -0.002633f, -0.001842f, +0.002347f, +0.000147f, - +0.002524f, +0.002231f, -0.000529f, +0.002858f, -0.000847f, +0.001690f - }, - { - +0.013809f, -0.154491f, +0.031301f, +0.071866f, -0.004310f, -0.003058f, +0.000003f, -0.003727f, -0.010220f, +0.011892f, - -0.012808f, -0.002976f, +0.005142f, -0.008228f, -0.005804f, +0.007510f, +0.009341f, +0.001933f, +0.000279f, +0.009064f, - +0.000236f, +0.000296f, +0.006110f, +0.002700f, -0.014615f, +0.011250f, +0.008429f, +0.015532f, +0.015291f, +0.009882f, - +0.000066f, +0.011536f, -0.007779f, -0.001166f, -0.002781f, -0.013293f, +0.016946f, -0.005084f, -0.004208f, -0.010302f, - -0.002962f, +0.005441f, +0.000273f, +0.006536f, +0.000542f, -0.010830f, +0.014633f, +0.003763f, +0.005148f, +0.003860f, - +0.002201f, +0.000354f, -0.002508f, -0.002844f, -0.006878f, -0.001210f, -0.005020f, +0.002245f, +0.000339f, -0.010673f, - +0.006725f, -0.002549f, -0.006259f, +0.002725f, -0.005833f, -0.000083f, +0.004079f, -0.001866f, +0.000521f, +0.000538f, - -0.003658f, +0.001312f, +0.001482f, -0.001260f, +0.001056f, +0.002755f, +0.000705f, +0.001131f, -0.000231f, +0.001843f, - -0.002613f, -0.000725f, -0.001997f, -0.003359f, +0.000626f, +0.001136f, -0.003737f, -0.003196f, -0.001323f, +0.002602f, - -0.000227f, +0.000727f, +0.001698f, -0.002259f, -0.001416f, +0.001114f - }, - { - +0.000076f, -0.015682f, -0.033795f, +0.001947f, +0.000916f, -0.002549f, -0.001632f, +0.009132f, -0.003025f, -0.003772f, - -0.007642f, -0.005041f, +0.007640f, +0.001706f, -0.019109f, -0.003727f, +0.012687f, -0.025435f, -0.004125f, -0.002909f, - +0.000173f, +0.002288f, -0.023381f, -0.025015f, +0.017272f, -0.006080f, -0.011165f, +0.004428f, +0.010276f, -0.011992f, - +0.013073f, +0.008717f, +0.001832f, +0.000012f, +0.000316f, -0.022190f, +0.000712f, -0.002192f, -0.002908f, +0.006460f, - -0.012897f, +0.013793f, -0.006831f, +0.000395f, -0.001555f, +0.001973f, -0.000781f, -0.003979f, +0.002019f, -0.000561f, - +0.000247f, +0.002605f, +0.000836f, -0.010385f, -0.008989f, +0.005225f, +0.000542f, -0.001172f, +0.003063f, -0.006622f, - -0.005120f, -0.006160f, -0.001696f, +0.003898f, +0.001219f, -0.000901f, -0.002029f, +0.000628f, -0.005687f, -0.000505f, - -0.001835f, +0.001248f, +0.003399f, -0.003424f, -0.002813f, -0.002558f, +0.000464f, +0.005645f, +0.002073f, +0.003252f, - +0.002372f, +0.001802f, -0.004584f, +0.006424f, -0.001297f, -0.002749f, -0.000889f, +0.000479f, +0.001363f, +0.002494f, - +0.002069f, +0.002121f, +0.001440f, -0.001663f, +0.002591f, +0.001156f - }, - { - +0.020349f, -0.150396f, -0.001595f, +0.086438f, -0.000489f, -0.000017f, -0.012116f, +0.004609f, +0.012757f, +0.011244f, - +0.001186f, +0.014814f, +0.014833f, +0.016797f, +0.004756f, +0.003465f, -0.019681f, -0.011083f, -0.003497f, +0.018493f, - -0.007029f, -0.010088f, +0.007314f, +0.008220f, +0.006998f, +0.007632f, +0.007551f, +0.003278f, -0.001261f, -0.012488f, - +0.011687f, +0.007269f, -0.006883f, +0.000087f, +0.003792f, +0.014307f, +0.001833f, -0.000403f, +0.004792f, -0.003892f, - +0.001238f, +0.001397f, -0.000683f, +0.000444f, +0.001151f, +0.006159f, +0.007005f, +0.012058f, +0.002210f, +0.005823f, - -0.001001f, -0.009513f, -0.003207f, +0.004942f, +0.003889f, -0.001580f, -0.002982f, -0.003995f, -0.005775f, +0.001855f, - +0.003643f, +0.005401f, +0.004123f, +0.001033f, +0.000125f, -0.004822f, +0.000593f, +0.000936f, -0.000685f, +0.002190f, - -0.000584f, +0.001421f, +0.003087f, +0.000133f, +0.000818f, -0.002314f, -0.001438f, +0.000241f, -0.000280f, +0.000935f, - -0.002162f, -0.002237f, +0.002048f, +0.000813f, +0.001528f, +0.003875f, -0.000170f, -0.003523f, -0.000808f, -0.003286f, - +0.000845f, +0.002607f, -0.000879f, +0.001791f, -0.001242f, -0.000309f - }, - { - +0.002081f, -0.014863f, +0.004699f, +0.012039f, -0.007761f, +0.005407f, +0.000592f, +0.006112f, -0.003441f, -0.006250f, - +0.003740f, -0.013334f, +0.009751f, +0.004458f, -0.007733f, -0.012700f, +0.003630f, +0.000134f, -0.004808f, +0.008192f, - -0.009721f, -0.009317f, +0.004645f, -0.000311f, +0.021368f, -0.011523f, +0.002428f, -0.001807f, +0.004495f, +0.008555f, - +0.000944f, +0.004891f, +0.004399f, +0.024376f, +0.003952f, +0.001156f, -0.010398f, -0.000036f, +0.006464f, -0.010633f, - -0.002555f, -0.003991f, -0.005873f, -0.003431f, -0.010199f, +0.005861f, +0.000843f, -0.003902f, +0.002235f, +0.001957f, - +0.000269f, -0.006732f, +0.000359f, +0.003998f, -0.003493f, -0.001430f, +0.003808f, +0.004699f, -0.007467f, +0.002136f, - +0.005755f, -0.003674f, +0.002475f, -0.001597f, -0.000619f, -0.006347f, +0.001020f, -0.003078f, -0.000936f, -0.005187f, - +0.001259f, -0.000314f, -0.000207f, -0.000211f, +0.002821f, +0.000400f, +0.001554f, +0.000837f, +0.000341f, +0.000257f, - +0.001191f, +0.005223f, -0.004642f, +0.001452f, -0.004646f, -0.001445f, -0.000357f, +0.001024f, +0.000531f, -0.001277f, - -0.001429f, -0.001860f, +0.001247f, -0.002152f, -0.001492f, -0.000209f - }, - { - +0.012737f, -0.182491f, +0.025002f, +0.058346f, -0.000282f, +0.008621f, -0.019629f, -0.000449f, -0.000546f, -0.007655f, - +0.001526f, +0.005149f, -0.000918f, -0.014143f, +0.004520f, -0.002801f, -0.039779f, +0.008759f, -0.002495f, +0.011636f, - -0.012985f, -0.013978f, -0.002523f, +0.008250f, -0.006118f, +0.000364f, +0.001293f, +0.008983f, +0.010032f, -0.001016f, - -0.002711f, +0.006782f, +0.009652f, +0.001084f, -0.000281f, +0.006571f, +0.006490f, -0.007883f, +0.002554f, -0.012288f, - -0.007956f, -0.013076f, -0.004755f, -0.001085f, +0.000630f, -0.007104f, -0.010751f, -0.008050f, +0.001963f, +0.000280f, - -0.001105f, -0.002252f, -0.004575f, +0.000768f, -0.001215f, -0.001699f, -0.003845f, -0.001411f, +0.001766f, -0.001909f, - +0.009309f, -0.000484f, +0.001884f, +0.006811f, -0.005525f, +0.003814f, -0.000972f, -0.003037f, +0.005122f, -0.005472f, - +0.003820f, -0.000330f, +0.002114f, +0.003360f, -0.000440f, -0.002310f, +0.002573f, +0.005684f, -0.003450f, -0.003693f, - -0.001235f, +0.003110f, +0.002313f, +0.001221f, +0.001025f, -0.002212f, +0.002909f, -0.001026f, +0.001159f, -0.001414f, - +0.001671f, +0.001054f, +0.000768f, -0.001525f, -0.002022f, +0.000223f - }, - { - +0.004803f, +0.056489f, -0.001766f, +0.012516f, +0.002119f, +0.002441f, -0.005361f, +0.006321f, +0.007567f, +0.003169f, - -0.002416f, -0.019105f, -0.008000f, +0.014130f, +0.000841f, +0.014920f, -0.035865f, -0.011253f, -0.002315f, +0.009571f, - +0.013615f, -0.007980f, +0.007278f, -0.010611f, +0.022235f, -0.030296f, -0.007723f, +0.011169f, -0.012471f, -0.017576f, - +0.005292f, +0.009244f, -0.010393f, -0.001565f, -0.011359f, +0.003035f, -0.009380f, -0.003126f, +0.004788f, -0.011105f, - +0.007725f, -0.005856f, +0.011628f, -0.002082f, -0.001800f, +0.010358f, +0.009959f, +0.010571f, +0.002827f, +0.002300f, - +0.000724f, -0.001547f, +0.008841f, -0.002381f, +0.001753f, -0.009446f, -0.002203f, -0.000236f, -0.000363f, +0.004010f, - +0.001437f, -0.002852f, +0.004422f, -0.006676f, +0.002120f, +0.004249f, -0.003020f, -0.000116f, -0.007919f, -0.000528f, - +0.000241f, -0.000778f, +0.000222f, +0.001739f, -0.000056f, +0.001679f, -0.000852f, +0.004148f, +0.003180f, +0.000645f, - +0.001205f, +0.001084f, +0.000218f, +0.000786f, +0.002520f, -0.001521f, +0.000372f, +0.002520f, +0.002629f, +0.001122f, - -0.002698f, +0.002938f, +0.000605f, +0.000285f, +0.002573f, +0.002023f - }, - { - -0.014128f, -0.023560f, +0.005724f, -0.002317f, -0.017320f, -0.019258f, -0.021624f, +0.018525f, +0.016797f, +0.010377f, - -0.012090f, +0.004725f, -0.011271f, -0.027684f, -0.017489f, -0.018645f, +0.023257f, -0.003487f, +0.033657f, +0.020467f, - -0.007652f, +0.020951f, -0.007029f, +0.009201f, -0.004497f, -0.011332f, +0.007956f, -0.009349f, -0.008259f, -0.005921f, - -0.005548f, +0.005953f, -0.011613f, +0.006806f, +0.005236f, -0.007915f, +0.008562f, -0.005799f, +0.001027f, -0.002484f, - -0.009849f, +0.007736f, +0.003859f, -0.007107f, +0.002256f, +0.003870f, -0.008730f, -0.001101f, -0.004059f, +0.005236f, - +0.000734f, +0.001324f, +0.003388f, -0.006690f, +0.017243f, -0.000148f, +0.008654f, -0.007532f, +0.004995f, -0.002495f, - -0.009360f, +0.007955f, -0.005600f, -0.000257f, -0.003238f, +0.000229f, +0.008347f, +0.007170f, -0.003176f, +0.001604f, - -0.000370f, -0.003574f, +0.004450f, +0.003652f, +0.002002f, +0.002433f, -0.001492f, -0.001098f, +0.002124f, +0.005545f, - +0.002083f, -0.002969f, -0.004684f, +0.001846f, -0.000170f, -0.003809f, +0.005627f, -0.005025f, +0.002387f, +0.001156f, - -0.001636f, +0.001233f, +0.004563f, +0.000670f, -0.000452f, -0.002078f - }, - { - -0.000563f, +0.060549f, -0.024337f, -0.004257f, +0.022476f, -0.012107f, -0.005613f, +0.039525f, +0.026969f, +0.011681f, - +0.001215f, +0.001627f, +0.006121f, +0.003978f, -0.027822f, +0.009129f, -0.001496f, -0.014928f, -0.005431f, -0.004408f, - -0.030855f, +0.006289f, -0.000235f, -0.004653f, -0.008818f, -0.006574f, +0.001195f, -0.008047f, +0.007058f, -0.010142f, - -0.009102f, +0.000639f, -0.007255f, +0.009700f, -0.001548f, -0.013103f, -0.002373f, -0.005765f, +0.002744f, +0.010156f, - -0.012074f, -0.007334f, +0.005339f, -0.004515f, -0.011054f, +0.014886f, +0.010886f, -0.009000f, +0.004818f, +0.005777f, - +0.010093f, -0.006982f, -0.002469f, -0.008151f, -0.003157f, -0.005902f, +0.004022f, -0.002597f, -0.001746f, -0.003521f, - +0.002788f, -0.000296f, -0.002183f, -0.009742f, +0.001257f, -0.000831f, +0.001258f, +0.001193f, -0.000899f, -0.002872f, - +0.005182f, -0.001003f, -0.006986f, +0.001022f, -0.001588f, +0.002035f, -0.002368f, -0.001798f, +0.000782f, +0.000332f, - -0.002275f, +0.000221f, -0.004390f, -0.002316f, +0.000616f, +0.003932f, -0.004575f, -0.000180f, -0.001743f, -0.000143f, - +0.003509f, -0.002035f, -0.001926f, -0.000366f, -0.000772f, -0.004899f - }, - { - +0.031150f, -0.058280f, -0.025107f, +0.021556f, +0.009903f, +0.007589f, +0.012574f, -0.008821f, -0.007482f, +0.020207f, - +0.023500f, -0.031996f, -0.000339f, +0.001889f, +0.032941f, -0.002896f, +0.004193f, -0.009522f, +0.011891f, +0.029523f, - -0.009336f, -0.001750f, +0.019441f, -0.003759f, -0.005752f, +0.008800f, +0.003429f, -0.002328f, -0.001991f, +0.000266f, - +0.005943f, +0.014297f, -0.000756f, +0.000568f, -0.010450f, +0.022490f, -0.013445f, -0.002159f, -0.006719f, -0.012485f, - -0.002532f, -0.001502f, +0.000068f, -0.009346f, -0.008347f, +0.012638f, -0.007802f, -0.007435f, -0.003222f, -0.001216f, - -0.000494f, +0.004809f, -0.003194f, -0.004789f, +0.016226f, -0.008134f, -0.002681f, -0.004878f, +0.009136f, +0.003495f, - +0.003437f, +0.008006f, +0.011358f, +0.002616f, -0.010649f, +0.005200f, -0.005724f, +0.000981f, -0.001890f, -0.003200f, - +0.008599f, +0.002024f, -0.002406f, +0.006384f, +0.000314f, -0.000836f, +0.002807f, -0.005677f, -0.004269f, +0.001619f, - +0.003881f, -0.002707f, +0.005525f, +0.000203f, +0.005035f, +0.001886f, +0.003632f, +0.002042f, +0.000210f, -0.002776f, - +0.001491f, +0.001298f, +0.001461f, +0.000347f, +0.000982f, -0.001883f - }, - { - -0.000692f, -0.001159f, -0.033922f, -0.000355f, +0.001734f, +0.013426f, +0.009784f, -0.002731f, -0.002100f, -0.002221f, - +0.001985f, +0.001014f, +0.001429f, +0.005428f, +0.001254f, +0.003677f, -0.009363f, -0.001786f, -0.012418f, -0.003152f, - +0.050224f, +0.002667f, -0.009457f, +0.011526f, +0.016994f, +0.012559f, -0.013537f, -0.023626f, -0.003411f, +0.023627f, - -0.005561f, +0.008294f, -0.016268f, +0.017536f, +0.010544f, +0.007733f, -0.003450f, -0.003694f, +0.009320f, +0.010083f, - -0.003117f, -0.017169f, -0.003698f, -0.013632f, +0.003798f, -0.002100f, +0.001876f, +0.007586f, -0.010240f, +0.006657f, - -0.005703f, +0.001644f, -0.002223f, -0.005348f, +0.003469f, -0.002185f, +0.013010f, -0.005809f, +0.002182f, +0.002616f, - -0.004703f, -0.002871f, +0.002442f, +0.007647f, +0.001487f, -0.000634f, +0.006865f, -0.004787f, -0.000486f, +0.001231f, - -0.001882f, +0.002910f, +0.004185f, -0.002332f, -0.002500f, -0.004835f, +0.009633f, -0.002424f, -0.002591f, -0.000198f, - -0.003494f, -0.003620f, +0.000165f, +0.005288f, -0.004966f, -0.001791f, +0.001618f, +0.011247f, -0.001881f, -0.003664f, - -0.000460f, -0.001820f, -0.000861f, -0.003775f, +0.001589f, +0.001544f - }, - { - +0.025053f, -0.086480f, -0.000352f, -0.002583f, -0.004184f, +0.017957f, +0.002825f, -0.006109f, -0.017901f, -0.010646f, - -0.018085f, +0.035289f, +0.000937f, -0.018432f, +0.007013f, -0.003456f, +0.023096f, -0.021893f, -0.012393f, +0.003506f, - +0.007006f, -0.005468f, -0.022622f, +0.007004f, +0.005559f, +0.012396f, +0.011564f, -0.003587f, -0.006207f, +0.000524f, - -0.020512f, -0.013594f, -0.002641f, +0.006023f, +0.015788f, +0.001222f, -0.000216f, +0.001823f, -0.002380f, +0.004288f, - +0.007544f, +0.010863f, +0.001723f, +0.000034f, +0.006828f, -0.002779f, +0.005336f, +0.004367f, -0.009755f, +0.017607f, - +0.009202f, -0.008681f, -0.004725f, -0.013830f, +0.009637f, +0.004974f, -0.001400f, -0.007217f, +0.000625f, -0.004396f, - -0.005889f, -0.004711f, -0.002666f, -0.005712f, +0.002465f, -0.005140f, -0.000949f, +0.000212f, -0.000400f, +0.008973f, - -0.002335f, -0.002101f, -0.000765f, +0.005692f, -0.003817f, +0.003842f, -0.002394f, +0.005943f, -0.001058f, +0.002314f, - -0.004620f, -0.001918f, -0.000481f, +0.003090f, -0.003423f, -0.004408f, +0.003006f, +0.000377f, -0.000487f, -0.001892f, - -0.003226f, -0.002205f, +0.001733f, +0.000807f, +0.001827f, +0.000040f - }, - { - -0.002835f, +0.082760f, -0.025660f, +0.010817f, +0.011971f, +0.003346f, -0.002826f, +0.003702f, -0.007297f, -0.002898f, - +0.000302f, +0.007442f, +0.002315f, +0.010453f, -0.098324f, +0.009456f, -0.007568f, +0.010535f, -0.007974f, +0.002702f, - +0.016341f, -0.004086f, +0.006259f, +0.014146f, -0.008075f, +0.018301f, -0.001731f, -0.004774f, +0.021153f, +0.016491f, - -0.015600f, +0.006723f, -0.003591f, +0.015741f, -0.015002f, +0.008626f, +0.010508f, -0.008996f, -0.000920f, +0.007694f, - +0.002977f, +0.006105f, +0.003043f, -0.014271f, +0.001014f, +0.011586f, -0.015484f, +0.000213f, +0.007825f, +0.001029f, - -0.003569f, +0.010545f, -0.006258f, +0.000088f, +0.001827f, -0.003988f, +0.010147f, -0.002831f, +0.006664f, -0.003202f, - +0.007386f, +0.002191f, +0.001044f, +0.009451f, +0.002714f, +0.004347f, -0.002650f, +0.007122f, +0.001269f, +0.007257f, - -0.003867f, +0.001374f, +0.002244f, +0.007917f, -0.003349f, +0.003012f, +0.001668f, -0.005200f, -0.002216f, -0.000623f, - -0.000440f, -0.000642f, +0.000751f, +0.003773f, +0.004180f, -0.002019f, -0.000706f, -0.000387f, -0.004923f, -0.004635f, - -0.002362f, +0.002819f, +0.002666f, +0.001889f, +0.000201f, -0.002266f - } - }, - { - { - +0.006939f, +0.282848f, -0.013813f, -0.092022f, +0.023223f, -0.015559f, +0.009910f, -0.013066f, -0.010746f, -0.018928f, - +0.000926f, +0.015813f, +0.014001f, +0.001655f, -0.018616f, +0.008942f, -0.009397f, -0.001516f, -0.015417f, +0.021989f, - -0.012077f, -0.018335f, -0.003291f, +0.009630f, +0.012220f, -0.009964f, -0.013960f, +0.005317f, +0.000950f, +0.022376f, - -0.004565f, +0.006354f, +0.000492f, +0.006723f, +0.004631f, +0.010702f, +0.008960f, -0.002003f, -0.004520f, -0.008953f, - -0.005356f, +0.010607f, +0.003426f, -0.004550f, -0.002924f, +0.001206f, +0.005912f, +0.001740f, +0.000081f, -0.001450f, - +0.000393f, +0.008742f, +0.000759f, +0.001770f, +0.001505f, +0.001300f, +0.002320f, -0.003152f, -0.001198f, -0.001113f, - -0.006484f, -0.000337f, -0.000053f, -0.005480f, -0.001594f, +0.003607f, +0.002188f, +0.000555f, +0.001440f, +0.001453f, - +0.001184f, +0.000523f, -0.001159f, -0.002865f, +0.001041f, -0.000479f, -0.000131f, +0.000316f, -0.000495f, -0.001517f, - -0.001188f, -0.000278f, -0.000651f, +0.003323f, -0.001059f, -0.000264f, +0.000507f, -0.000863f, -0.000233f, -0.003103f, - -0.000701f, -0.001497f, -0.000099f, -0.001158f, -0.003584f, +0.002393f - }, - { - -0.000955f, -0.076843f, -0.021086f, +0.027055f, +0.006681f, -0.005798f, -0.000610f, +0.001842f, -0.004759f, -0.011075f, - -0.014204f, -0.004113f, +0.006321f, -0.013163f, +0.007234f, -0.000410f, -0.003567f, -0.013379f, -0.009189f, +0.015829f, - +0.002645f, -0.015601f, -0.002976f, -0.003580f, +0.015899f, +0.003387f, +0.007064f, -0.000903f, -0.003682f, -0.001953f, - +0.002843f, -0.001835f, -0.002155f, -0.000912f, -0.001486f, +0.013930f, -0.004855f, +0.006257f, +0.002998f, -0.013347f, - +0.007158f, +0.003601f, +0.000207f, -0.004728f, +0.001895f, -0.002100f, -0.007537f, -0.003132f, -0.003461f, -0.004678f, - -0.000083f, +0.002096f, +0.003329f, +0.003654f, -0.000849f, -0.006492f, -0.001004f, +0.002227f, -0.001856f, -0.000685f, - +0.001984f, +0.002611f, -0.002734f, -0.005660f, +0.000839f, -0.000853f, -0.000047f, +0.001091f, +0.004126f, -0.000959f, - +0.004475f, -0.003145f, +0.000649f, +0.000144f, +0.001243f, +0.000355f, -0.001208f, -0.000064f, -0.000220f, -0.001712f, - -0.000138f, -0.002509f, -0.005230f, +0.001322f, +0.002439f, +0.002427f, -0.000111f, +0.003476f, -0.001838f, +0.000314f, - -0.001013f, -0.001811f, +0.001209f, -0.003049f, +0.000125f, +0.000712f - }, - { - -0.004022f, -0.034279f, +0.053997f, -0.037087f, +0.010868f, +0.001919f, +0.008956f, -0.006480f, -0.003247f, +0.005819f, - -0.014706f, -0.013321f, +0.007735f, -0.016122f, +0.005566f, -0.017190f, +0.022096f, +0.025006f, -0.003848f, -0.007072f, - -0.013824f, -0.008653f, -0.002474f, -0.005080f, +0.000556f, +0.019834f, +0.014395f, +0.009781f, -0.005365f, +0.007438f, - +0.000469f, +0.005627f, -0.017498f, +0.004222f, -0.004175f, +0.001096f, -0.004435f, -0.009352f, +0.013734f, +0.000276f, - +0.007035f, -0.012203f, +0.012448f, -0.002520f, +0.002489f, -0.003213f, -0.013210f, -0.004880f, +0.005941f, -0.004736f, - +0.002995f, +0.003574f, +0.007581f, -0.003886f, +0.006641f, +0.008444f, -0.002446f, -0.000515f, +0.001950f, +0.007063f, - +0.000869f, +0.002938f, +0.001684f, +0.002432f, +0.002107f, +0.005451f, -0.005250f, -0.002543f, -0.002798f, -0.003157f, - -0.003734f, -0.001404f, +0.000411f, -0.004146f, -0.005137f, +0.001418f, -0.004866f, +0.003712f, -0.000088f, -0.001273f, - -0.000755f, +0.002942f, +0.003166f, -0.002802f, -0.001462f, +0.000074f, -0.001098f, -0.001917f, +0.001920f, -0.000055f, - -0.000597f, +0.003254f, +0.000598f, +0.000765f, +0.001676f, +0.001719f - }, - { - -0.018066f, -0.080740f, +0.022962f, +0.055695f, -0.004085f, +0.003907f, -0.012589f, +0.002016f, -0.011546f, +0.007042f, - -0.018254f, +0.013370f, +0.002874f, -0.009481f, -0.008842f, +0.001013f, +0.034729f, -0.008855f, +0.003750f, +0.006699f, - +0.000215f, -0.007437f, +0.014883f, -0.006934f, +0.002430f, -0.004388f, +0.006781f, +0.021137f, +0.001293f, +0.014000f, - +0.012196f, -0.001210f, -0.008668f, +0.003216f, -0.003240f, -0.001327f, +0.005544f, +0.002087f, -0.010177f, -0.003603f, - -0.001494f, -0.007644f, +0.006971f, +0.000636f, -0.005472f, +0.005534f, +0.006682f, +0.008181f, +0.000955f, +0.006340f, - +0.003410f, +0.004727f, -0.004049f, -0.001817f, -0.005146f, -0.000200f, -0.004831f, +0.001568f, -0.006137f, -0.001323f, - -0.005054f, +0.003302f, +0.001335f, -0.004191f, -0.004822f, +0.001979f, -0.001485f, +0.001716f, -0.001038f, -0.001458f, - +0.000378f, +0.001116f, -0.000710f, +0.001165f, -0.003238f, +0.005482f, -0.002457f, +0.004518f, -0.000641f, +0.001123f, - -0.001255f, -0.000885f, -0.002809f, -0.001926f, +0.000468f, +0.001060f, -0.003441f, -0.003138f, -0.002076f, +0.000408f, - -0.001250f, +0.002348f, +0.001878f, -0.004379f, -0.000307f, +0.001625f - }, - { - -0.001830f, -0.063330f, +0.002034f, +0.004573f, -0.004606f, -0.002234f, +0.002659f, +0.008317f, -0.003179f, -0.008724f, - +0.001522f, -0.014514f, +0.005097f, -0.002150f, +0.011275f, -0.026785f, +0.007250f, -0.011244f, -0.022888f, +0.001003f, - -0.000729f, -0.001989f, -0.019754f, +0.004207f, -0.007704f, -0.003929f, -0.004640f, +0.007906f, +0.001162f, +0.007964f, - +0.005489f, +0.000925f, +0.007666f, -0.008334f, -0.006769f, -0.008085f, +0.006645f, -0.005105f, -0.006102f, -0.003740f, - +0.004985f, -0.005461f, +0.001259f, -0.002629f, +0.001616f, +0.003475f, -0.004383f, -0.004932f, +0.000637f, +0.001560f, - +0.003144f, +0.006913f, +0.004259f, -0.015139f, -0.005306f, -0.000849f, +0.004504f, -0.006922f, +0.004221f, -0.008005f, - -0.001972f, -0.000223f, -0.005980f, +0.003581f, -0.000286f, -0.000853f, +0.005025f, -0.004337f, -0.005721f, +0.000432f, - -0.001868f, -0.002098f, +0.000494f, -0.001041f, -0.001191f, -0.003119f, +0.000806f, +0.003818f, +0.002732f, +0.004175f, - +0.005882f, -0.001937f, -0.002485f, +0.004826f, +0.000975f, -0.005059f, +0.000739f, -0.000634f, +0.001219f, +0.001642f, - +0.004676f, +0.000689f, +0.002715f, -0.002560f, +0.001250f, +0.001581f - }, - { - -0.026191f, -0.056894f, -0.037481f, +0.084611f, -0.005801f, +0.006477f, -0.000772f, +0.000631f, +0.011080f, -0.003787f, - +0.010367f, +0.021637f, +0.013814f, -0.001706f, +0.017493f, -0.007920f, -0.006346f, -0.000726f, -0.005226f, +0.006187f, - -0.009751f, -0.008798f, +0.003996f, +0.008080f, +0.010333f, +0.011317f, -0.002046f, -0.000432f, +0.000721f, -0.009860f, - +0.009135f, +0.006592f, +0.002547f, -0.008805f, +0.015833f, +0.001958f, +0.006863f, -0.002284f, +0.008052f, -0.004335f, - -0.000171f, -0.000551f, -0.000546f, +0.005828f, +0.001534f, +0.005719f, +0.008031f, +0.002125f, +0.006335f, +0.002375f, - -0.003314f, -0.001768f, +0.000032f, +0.007764f, -0.004739f, +0.002402f, +0.000226f, -0.001591f, -0.007545f, -0.001308f, - +0.006035f, +0.004997f, +0.001168f, +0.004756f, -0.002424f, -0.003796f, -0.000696f, +0.000452f, +0.002310f, -0.003591f, - +0.000700f, +0.002809f, +0.003063f, -0.000518f, +0.002207f, -0.000553f, +0.000779f, -0.001091f, -0.000453f, +0.002959f, - -0.002525f, -0.004266f, +0.000931f, +0.000883f, +0.001442f, +0.003631f, +0.000667f, -0.001906f, -0.001756f, -0.004081f, - +0.002078f, +0.000954f, +0.000660f, +0.001662f, -0.000590f, -0.000823f - }, - { - -0.000709f, +0.003443f, +0.013575f, -0.001741f, +0.001584f, +0.002299f, +0.003529f, +0.002324f, +0.001688f, +0.000324f, - -0.004475f, -0.002977f, -0.003477f, +0.022158f, -0.027720f, +0.004137f, +0.003118f, -0.009128f, -0.001057f, -0.017083f, - -0.004396f, +0.000716f, -0.002952f, +0.007279f, +0.004526f, +0.001128f, -0.000902f, +0.010690f, -0.004629f, +0.001308f, - +0.002913f, -0.000855f, +0.015736f, +0.014869f, +0.015069f, -0.009264f, -0.003853f, -0.005528f, -0.000361f, -0.005530f, - +0.006172f, -0.003533f, -0.012371f, -0.004905f, -0.011717f, +0.005091f, +0.002470f, -0.000497f, +0.000904f, -0.006979f, - -0.002150f, +0.001656f, -0.004137f, +0.001634f, +0.001564f, +0.001410f, +0.004932f, +0.001041f, -0.002927f, -0.001007f, - +0.001916f, -0.000778f, -0.001135f, +0.001709f, -0.001501f, -0.000691f, -0.002890f, -0.005099f, -0.002809f, -0.000350f, - -0.004858f, +0.003385f, +0.000867f, +0.000600f, +0.001485f, -0.000948f, +0.002331f, +0.001702f, +0.003002f, -0.003660f, - +0.002105f, +0.001664f, -0.000059f, -0.002059f, -0.000028f, -0.002806f, -0.002018f, +0.001231f, -0.000419f, -0.000246f, - -0.004920f, +0.001550f, -0.000628f, -0.000998f, -0.003024f, +0.000914f - }, - { - -0.020253f, -0.125650f, -0.009259f, +0.053983f, +0.011909f, +0.007760f, -0.006381f, -0.010792f, -0.005289f, -0.001680f, - +0.018443f, -0.007485f, -0.004733f, -0.004983f, -0.002191f, -0.027091f, -0.021172f, +0.002599f, -0.008531f, +0.003907f, - +0.001041f, -0.017534f, +0.004606f, +0.003720f, -0.008401f, -0.001436f, -0.003092f, +0.011471f, +0.013403f, +0.004000f, - +0.001974f, -0.001750f, -0.004717f, +0.004208f, +0.012176f, +0.007056f, +0.006276f, -0.004888f, -0.003654f, -0.010420f, - -0.008572f, -0.006201f, -0.007163f, -0.002913f, -0.006832f, -0.005020f, -0.002886f, -0.006492f, -0.005881f, -0.002734f, - +0.002386f, -0.008397f, +0.000815f, -0.002169f, -0.003504f, +0.000308f, -0.002510f, -0.004204f, +0.004738f, -0.003603f, - +0.007628f, +0.005225f, -0.000775f, +0.000694f, +0.003364f, +0.002641f, -0.004431f, +0.003790f, +0.002462f, -0.006910f, - +0.000268f, +0.000355f, +0.004708f, +0.003413f, -0.002139f, -0.003377f, +0.007181f, +0.004489f, -0.003817f, -0.004099f, - +0.000573f, +0.002321f, -0.001829f, +0.001941f, +0.001243f, +0.001277f, -0.002104f, +0.000860f, +0.001517f, -0.001396f, - -0.000719f, +0.001267f, +0.001664f, -0.001499f, +0.000957f, -0.001238f - }, - { - +0.001522f, +0.044472f, +0.032726f, +0.007441f, +0.006612f, -0.000704f, -0.004535f, +0.007000f, +0.012651f, -0.004452f, - -0.004519f, -0.009092f, +0.001818f, +0.001809f, -0.007473f, -0.005603f, -0.013101f, -0.002397f, -0.004592f, +0.001529f, - +0.016207f, +0.001843f, +0.004152f, +0.007102f, -0.012204f, -0.021666f, -0.006518f, +0.004857f, -0.006481f, -0.016454f, - +0.000444f, +0.012447f, -0.012536f, -0.005797f, +0.003989f, -0.000458f, -0.012260f, -0.000581f, -0.004874f, +0.006653f, - -0.005881f, -0.004427f, +0.015297f, -0.008182f, -0.004953f, +0.015067f, +0.002973f, +0.017475f, +0.004157f, -0.002934f, - +0.001814f, +0.006085f, +0.001564f, -0.001032f, -0.000990f, -0.003208f, -0.000899f, +0.000120f, -0.002559f, +0.006613f, - +0.000637f, -0.001797f, -0.003137f, -0.001805f, +0.004327f, +0.000127f, -0.001728f, -0.000062f, -0.005413f, -0.003102f, - +0.001286f, -0.001474f, -0.000605f, +0.004926f, +0.000483f, +0.003124f, -0.001088f, +0.004825f, +0.001602f, -0.000517f, - +0.000973f, +0.000324f, -0.000714f, +0.001670f, -0.000032f, -0.000281f, +0.002047f, +0.001732f, +0.002514f, +0.000054f, - -0.002397f, +0.000405f, +0.004145f, +0.000849f, +0.001911f, +0.000419f - }, - { - +0.018008f, -0.034952f, -0.011544f, +0.009084f, -0.022611f, -0.017197f, +0.022598f, -0.005751f, +0.022125f, -0.009450f, - -0.000984f, +0.014985f, -0.019356f, -0.031544f, -0.034530f, +0.014130f, -0.001806f, -0.012538f, +0.037564f, +0.006419f, - +0.025325f, +0.006232f, +0.008973f, +0.003910f, -0.000697f, -0.002863f, -0.003586f, -0.005675f, -0.018137f, +0.013005f, - -0.007933f, -0.006909f, +0.004587f, +0.007492f, +0.004142f, -0.013662f, +0.004777f, -0.001449f, +0.004795f, -0.000125f, - -0.012944f, +0.004806f, +0.009199f, -0.016373f, +0.003238f, +0.001050f, -0.001615f, +0.002320f, -0.004434f, +0.003400f, - +0.001216f, +0.010379f, +0.001143f, -0.001164f, +0.006360f, +0.001443f, +0.006240f, -0.002759f, -0.002102f, -0.001287f, - -0.001063f, +0.003946f, -0.004378f, -0.008376f, +0.000054f, +0.003662f, +0.007204f, +0.001981f, +0.002452f, +0.001047f, - -0.003955f, -0.000389f, +0.004562f, +0.000008f, +0.004367f, +0.001467f, +0.003312f, -0.005066f, -0.000315f, +0.004787f, - +0.001828f, -0.002627f, -0.002052f, +0.000446f, -0.001371f, -0.002426f, +0.003266f, +0.001122f, -0.000176f, +0.001575f, - -0.000820f, +0.001693f, -0.000883f, +0.001723f, +0.002213f, -0.003063f - }, - { - -0.003051f, +0.003982f, +0.009980f, +0.011629f, +0.012990f, +0.000596f, -0.012847f, +0.038018f, +0.019493f, +0.015173f, - +0.010561f, -0.005107f, +0.004964f, -0.002180f, -0.006157f, +0.000972f, -0.003914f, -0.027599f, +0.007501f, -0.021474f, - -0.008318f, -0.007330f, -0.001375f, +0.016765f, -0.014035f, +0.003309f, +0.005559f, -0.010414f, -0.008797f, -0.006269f, - +0.008427f, -0.007906f, -0.003726f, +0.002391f, +0.000881f, -0.009518f, -0.007151f, +0.001132f, +0.003543f, +0.011580f, - -0.008895f, -0.009140f, +0.001392f, -0.005814f, -0.000153f, +0.011655f, -0.003800f, +0.001634f, +0.010273f, +0.001973f, - +0.007169f, -0.005544f, +0.000304f, -0.005542f, -0.001757f, -0.008704f, +0.000894f, -0.003905f, +0.010596f, -0.007369f, - +0.004164f, -0.008562f, -0.006160f, +0.001699f, -0.009993f, +0.001609f, +0.000449f, -0.000019f, +0.003644f, -0.001821f, - +0.003179f, -0.002179f, -0.008686f, +0.000946f, +0.000390f, -0.002793f, +0.002784f, -0.004099f, -0.005871f, +0.002770f, - -0.000750f, -0.002532f, +0.001922f, -0.002489f, -0.001562f, -0.001414f, +0.000094f, -0.002218f, -0.000718f, -0.002931f, - +0.003179f, -0.002327f, -0.000735f, -0.001443f, -0.000841f, -0.002112f - }, - { - -0.029653f, +0.001849f, +0.002883f, +0.003130f, -0.015137f, +0.030470f, +0.006161f, -0.000903f, +0.005897f, -0.002880f, - +0.005504f, +0.000210f, +0.005283f, -0.018635f, -0.000792f, +0.004422f, +0.015747f, +0.008872f, +0.007387f, +0.025505f, - -0.004907f, -0.001784f, +0.002166f, +0.005416f, -0.010105f, -0.000273f, +0.003211f, +0.006701f, +0.002360f, -0.001260f, - +0.005333f, +0.004495f, -0.004093f, -0.001720f, +0.015494f, +0.006895f, -0.007383f, -0.010627f, -0.003269f, -0.007780f, - +0.004981f, -0.011169f, -0.005345f, -0.005542f, +0.001515f, -0.009393f, +0.010454f, -0.015265f, -0.008106f, +0.002564f, - +0.001377f, +0.001512f, -0.004046f, +0.004902f, +0.010566f, -0.006533f, -0.002208f, -0.001579f, +0.002527f, -0.003759f, - +0.007510f, +0.007347f, +0.008794f, +0.004817f, -0.006586f, +0.001342f, +0.001952f, -0.005048f, -0.001947f, -0.003224f, - +0.006344f, +0.002571f, -0.000736f, +0.001513f, +0.001042f, +0.000958f, +0.002582f, -0.007854f, -0.000722f, +0.000415f, - +0.003501f, -0.001357f, +0.005415f, -0.000501f, +0.003555f, +0.001187f, +0.001701f, +0.004113f, +0.000221f, -0.000886f, - -0.000647f, +0.001372f, +0.000577f, +0.002626f, -0.001157f, +0.001161f - }, - { - -0.001764f, -0.041925f, -0.003697f, -0.013104f, +0.018769f, +0.003733f, +0.006347f, -0.006191f, -0.003089f, +0.003616f, - +0.006441f, +0.007689f, +0.007599f, -0.026995f, +0.020382f, -0.003747f, -0.005731f, -0.007091f, -0.003088f, +0.002421f, - +0.024744f, -0.001369f, -0.005386f, +0.025151f, +0.005748f, +0.007653f, -0.009888f, -0.000441f, -0.000876f, +0.010644f, - +0.018116f, -0.020007f, -0.008235f, +0.009323f, +0.005463f, +0.000388f, +0.012192f, +0.000905f, +0.009729f, -0.000120f, - -0.015955f, -0.014779f, +0.002811f, -0.007567f, +0.000283f, -0.007523f, +0.009720f, +0.006445f, -0.008093f, -0.005375f, - +0.007195f, +0.003970f, -0.001466f, -0.005350f, -0.006749f, +0.012171f, +0.000536f, -0.001125f, +0.000879f, +0.002813f, - +0.001369f, -0.007867f, +0.007350f, +0.002822f, +0.005347f, -0.003162f, +0.004141f, +0.002180f, -0.002307f, -0.004018f, - +0.001962f, +0.002771f, +0.004874f, -0.002663f, -0.001131f, -0.004352f, +0.004736f, -0.002735f, +0.000305f, -0.003391f, - -0.000007f, -0.006420f, -0.001780f, +0.005154f, -0.002495f, -0.004967f, +0.004507f, +0.006920f, -0.000920f, -0.001435f, - -0.001893f, -0.000873f, -0.001394f, -0.000776f, -0.000157f, +0.003226f - }, - { - -0.026332f, -0.021706f, -0.019515f, +0.026576f, -0.004285f, +0.011261f, +0.022880f, -0.018186f, +0.000740f, -0.005673f, - -0.003763f, -0.001018f, +0.016410f, +0.009262f, -0.004452f, -0.003106f, +0.016316f, -0.027213f, -0.010690f, +0.001652f, - +0.005236f, -0.001220f, -0.004042f, -0.012961f, +0.012032f, +0.009000f, +0.014401f, -0.016288f, -0.002696f, -0.009538f, - -0.022789f, -0.013056f, +0.013829f, -0.003227f, +0.000365f, -0.003540f, +0.008137f, +0.005162f, -0.001327f, +0.004516f, - +0.004876f, -0.003362f, +0.011241f, +0.008315f, +0.002596f, +0.001208f, +0.001924f, +0.004669f, +0.003855f, +0.003593f, - +0.003524f, +0.000337f, -0.016078f, -0.005726f, +0.003597f, +0.001291f, -0.003376f, -0.002205f, +0.002242f, -0.011969f, - -0.001931f, -0.004248f, -0.001302f, -0.003135f, -0.005845f, +0.000315f, -0.001348f, +0.003217f, +0.001906f, +0.008033f, - -0.000765f, -0.002311f, -0.001712f, +0.004815f, -0.002629f, -0.001962f, +0.003796f, +0.004766f, -0.003171f, +0.002100f, - -0.003194f, +0.000011f, +0.000364f, -0.002055f, -0.003387f, -0.001776f, +0.001323f, +0.002555f, -0.002648f, -0.000900f, - -0.003681f, -0.000985f, -0.000582f, +0.000619f, +0.000728f, +0.005170f - }, - { - -0.000601f, +0.041507f, +0.009234f, -0.005540f, +0.017263f, -0.002623f, +0.011472f, -0.003985f, -0.011697f, +0.008424f, - -0.022511f, +0.020322f, +0.006820f, -0.005083f, -0.054367f, -0.022007f, -0.004315f, +0.000864f, +0.005461f, -0.010040f, - +0.014490f, -0.005775f, +0.013494f, +0.002543f, +0.017372f, -0.001921f, +0.007027f, -0.007348f, +0.025634f, +0.007138f, - -0.006588f, +0.006844f, -0.002205f, +0.001729f, +0.007222f, -0.000467f, -0.002723f, +0.009334f, -0.004206f, +0.003801f, - +0.003782f, +0.009712f, -0.004237f, -0.007310f, -0.000917f, -0.002282f, -0.007524f, +0.002088f, +0.002754f, +0.001750f, - +0.003993f, +0.004781f, -0.004840f, +0.001387f, +0.004535f, -0.001529f, +0.008815f, +0.002433f, +0.002320f, +0.000956f, - +0.000039f, +0.007126f, +0.005034f, +0.006605f, +0.003858f, +0.001590f, +0.000111f, +0.003822f, +0.001745f, +0.005980f, - -0.002929f, +0.003122f, +0.005227f, +0.001911f, -0.000451f, +0.001883f, +0.002065f, -0.003529f, -0.001943f, -0.001557f, - +0.001523f, -0.003169f, +0.001278f, +0.001368f, +0.006512f, -0.003496f, +0.003359f, -0.002315f, -0.006408f, -0.005035f, - +0.001209f, +0.003168f, +0.002158f, +0.001887f, +0.000602f, -0.003746f - } - }, - { - { - -0.004403f, +0.237756f, -0.040309f, -0.109983f, +0.019580f, -0.012615f, +0.007124f, -0.012636f, -0.007877f, -0.007181f, - +0.024723f, +0.023468f, +0.016339f, +0.007688f, -0.014298f, +0.008232f, +0.013020f, +0.013670f, -0.003069f, +0.014881f, - -0.011673f, -0.012050f, -0.014740f, -0.008353f, -0.000133f, -0.001862f, -0.004537f, +0.000775f, -0.012431f, +0.005041f, - -0.013137f, +0.009888f, -0.003482f, -0.005750f, -0.011804f, -0.006409f, +0.007447f, +0.000292f, -0.001931f, -0.004935f, - +0.003380f, +0.013291f, +0.007870f, +0.000982f, -0.001866f, -0.003127f, +0.001376f, +0.007216f, -0.001832f, -0.003936f, - +0.002456f, +0.005146f, -0.008987f, -0.008687f, -0.006128f, -0.002088f, -0.003088f, -0.009879f, -0.004923f, -0.003701f, - -0.006442f, -0.002983f, +0.002013f, -0.000733f, -0.000517f, +0.002972f, +0.005871f, +0.002877f, +0.000277f, -0.000461f, - -0.000998f, -0.001913f, -0.001674f, -0.002304f, -0.000706f, +0.000098f, +0.001134f, +0.000242f, +0.000262f, -0.000429f, - +0.000357f, -0.000999f, -0.003601f, +0.003145f, +0.000316f, -0.000695f, -0.000243f, +0.000077f, +0.001446f, -0.001009f, - +0.001279f, +0.000694f, +0.000180f, -0.000982f, -0.002926f, +0.000767f - }, - { - -0.000173f, -0.017774f, +0.020449f, +0.053781f, +0.018598f, +0.003354f, +0.001169f, -0.000085f, +0.001257f, +0.003538f, - -0.000591f, -0.007957f, -0.002347f, -0.011122f, +0.005671f, +0.006129f, +0.003378f, +0.004398f, +0.011024f, +0.019290f, - +0.002680f, -0.006726f, +0.013328f, -0.003366f, +0.015351f, +0.002594f, -0.001272f, -0.009378f, -0.011013f, -0.004217f, - +0.010882f, +0.019471f, +0.000138f, -0.008340f, -0.015053f, +0.007363f, -0.012406f, -0.007560f, +0.005604f, -0.004155f, - +0.015613f, -0.001769f, -0.007374f, -0.001316f, +0.001958f, -0.004403f, -0.004917f, +0.007654f, -0.001283f, -0.002109f, - +0.002908f, -0.003289f, -0.005121f, -0.003973f, +0.003871f, -0.002137f, +0.003074f, +0.002032f, -0.003753f, +0.001408f, - +0.000546f, +0.000869f, -0.000999f, -0.005800f, -0.000201f, +0.000868f, +0.001805f, -0.000413f, +0.000964f, -0.004265f, - +0.001899f, -0.001329f, +0.000629f, -0.003676f, -0.003352f, -0.002399f, -0.002466f, +0.000376f, -0.000392f, -0.000923f, - +0.002024f, +0.000054f, -0.002080f, +0.001920f, +0.000600f, -0.001151f, -0.002723f, +0.001423f, -0.002174f, +0.000390f, - +0.001331f, +0.000843f, +0.001224f, -0.002159f, +0.001553f, +0.000154f - }, - { - +0.006511f, -0.113038f, -0.016234f, +0.001250f, +0.029597f, -0.008955f, +0.002131f, -0.005096f, +0.002985f, +0.013568f, - +0.001118f, -0.001393f, +0.009672f, +0.000081f, +0.012126f, -0.013428f, +0.025735f, +0.025562f, +0.007285f, -0.001673f, - -0.012679f, -0.013163f, +0.000834f, +0.001424f, +0.000576f, +0.002492f, -0.002616f, +0.008702f, -0.003837f, +0.010682f, - +0.007007f, +0.005249f, -0.017043f, +0.003949f, -0.007233f, +0.001133f, -0.006160f, -0.017788f, +0.011940f, -0.000471f, - +0.004949f, -0.008930f, +0.016877f, -0.000805f, +0.001421f, +0.002565f, -0.008668f, -0.003851f, +0.005756f, +0.003861f, - +0.010681f, -0.004162f, +0.001914f, -0.002860f, -0.000613f, +0.000486f, -0.007521f, -0.000034f, -0.001212f, +0.000947f, - -0.005783f, -0.002602f, +0.001534f, +0.003163f, -0.000288f, +0.003663f, -0.005151f, -0.000177f, +0.001935f, +0.003420f, - -0.000200f, -0.002718f, +0.002128f, -0.001778f, -0.001238f, +0.002381f, -0.006173f, -0.002590f, -0.002211f, -0.001879f, - -0.004040f, -0.000894f, +0.002322f, -0.002258f, -0.000307f, +0.000922f, -0.001932f, -0.002723f, +0.000614f, -0.000854f, - -0.001998f, +0.002284f, -0.000326f, +0.000527f, +0.004140f, +0.002534f - }, - { - +0.022071f, -0.013554f, +0.017790f, +0.041085f, -0.005061f, -0.002675f, -0.010077f, +0.011826f, -0.007804f, +0.002587f, - -0.018734f, +0.021321f, +0.010482f, +0.012824f, +0.001343f, -0.008369f, +0.032899f, +0.006262f, +0.005145f, -0.014670f, - +0.000165f, -0.007286f, +0.006949f, -0.001527f, +0.011020f, -0.000293f, -0.005497f, +0.010759f, -0.001373f, -0.003075f, - +0.007302f, +0.002171f, +0.001544f, +0.003739f, +0.000983f, +0.007169f, +0.006508f, +0.013094f, +0.000857f, -0.002211f, - -0.008302f, -0.012040f, +0.003344f, -0.010547f, -0.006501f, +0.012016f, +0.001109f, +0.001970f, +0.001462f, -0.002322f, - -0.002209f, +0.005296f, -0.003746f, +0.001869f, +0.005792f, +0.008985f, -0.000581f, -0.001125f, -0.001774f, +0.004886f, - -0.008689f, +0.000065f, +0.001946f, -0.003786f, -0.006874f, -0.002328f, -0.001363f, +0.003633f, +0.001014f, -0.000006f, - +0.002865f, +0.002302f, -0.000766f, +0.002141f, -0.002082f, +0.002721f, -0.005519f, +0.003670f, +0.000502f, -0.000903f, - -0.000775f, +0.000595f, -0.002001f, +0.002184f, +0.001332f, +0.000601f, -0.001306f, -0.000475f, -0.001067f, -0.000759f, - -0.001822f, +0.001415f, +0.001466f, -0.003597f, +0.000438f, +0.002676f - }, - { - +0.002012f, -0.066554f, -0.000416f, +0.012997f, +0.004291f, -0.002261f, -0.000773f, -0.007110f, -0.014406f, -0.013393f, - +0.003120f, -0.015660f, -0.001190f, +0.012605f, +0.040200f, -0.027979f, +0.008803f, +0.012705f, -0.019021f, -0.002031f, - -0.000485f, +0.005844f, -0.008208f, +0.016954f, -0.006439f, +0.008826f, +0.007120f, +0.005033f, -0.005475f, -0.003017f, - -0.006594f, -0.001575f, +0.006369f, -0.005916f, -0.000873f, -0.002777f, +0.004487f, +0.006023f, -0.002980f, -0.008766f, - +0.002506f, -0.005556f, -0.004248f, -0.009894f, -0.002962f, +0.003926f, +0.002063f, +0.000524f, -0.001181f, -0.002419f, - +0.002349f, +0.009183f, +0.008482f, -0.009876f, +0.000793f, +0.004352f, +0.007272f, -0.006440f, +0.007000f, -0.001942f, - +0.002947f, +0.003508f, -0.005005f, -0.005004f, -0.005384f, -0.001708f, +0.005582f, -0.001795f, -0.002436f, -0.002689f, - -0.005228f, -0.001585f, +0.003124f, +0.003887f, +0.003605f, -0.001921f, -0.001258f, +0.001509f, +0.002130f, +0.003879f, - +0.003832f, -0.002191f, -0.000901f, +0.002817f, +0.000868f, -0.005609f, -0.000632f, -0.000383f, +0.001262f, +0.000151f, - +0.002109f, -0.002560f, +0.001840f, -0.001150f, -0.000770f, -0.000105f - }, - { - +0.029254f, +0.027754f, -0.019425f, +0.090676f, -0.016893f, +0.004289f, -0.002162f, +0.001295f, +0.001118f, -0.022019f, - -0.005323f, +0.018262f, +0.006971f, -0.009922f, +0.007874f, -0.015579f, +0.009070f, +0.009566f, -0.016742f, -0.008167f, - -0.012317f, -0.004177f, +0.006937f, +0.008326f, +0.009389f, -0.000619f, -0.012250f, +0.005541f, +0.003389f, -0.011298f, - -0.002895f, +0.002140f, +0.005007f, -0.014155f, +0.021114f, -0.001559f, +0.001066f, +0.001708f, +0.000311f, -0.008054f, - -0.000817f, -0.001135f, +0.004125f, +0.004693f, -0.000061f, +0.005646f, +0.010938f, +0.003195f, +0.001872f, -0.001154f, - +0.000069f, +0.001478f, -0.003549f, +0.003361f, -0.008772f, +0.001726f, -0.002147f, -0.002537f, -0.005283f, -0.005209f, - -0.002722f, +0.002964f, -0.001730f, +0.001606f, -0.001821f, -0.000199f, +0.000134f, -0.002877f, +0.002615f, -0.003824f, - -0.001819f, +0.000780f, -0.001901f, -0.002508f, +0.001993f, +0.001275f, +0.005737f, +0.001444f, +0.002990f, +0.004217f, - +0.001429f, +0.000629f, +0.001279f, -0.001468f, -0.000810f, +0.000137f, +0.001027f, +0.000908f, -0.000838f, -0.002485f, - +0.000479f, -0.000608f, +0.001066f, +0.001583f, +0.001239f, +0.001557f - }, - { - -0.001057f, +0.012739f, +0.012847f, -0.009585f, +0.000534f, +0.001536f, +0.001386f, +0.000229f, +0.000438f, -0.001475f, - -0.000573f, -0.006885f, -0.004846f, +0.040264f, -0.013611f, +0.011559f, +0.010240f, +0.002689f, +0.003357f, +0.000378f, - +0.019056f, +0.007945f, -0.014312f, -0.001653f, -0.010858f, -0.004070f, +0.011619f, +0.020308f, -0.001043f, -0.008969f, - -0.012519f, -0.010554f, +0.013465f, +0.000239f, +0.002565f, -0.006217f, +0.002049f, -0.009030f, -0.003176f, -0.000218f, - +0.004769f, +0.003319f, -0.000780f, +0.004142f, -0.008472f, -0.000943f, -0.004149f, -0.007434f, -0.001905f, -0.004891f, - +0.001092f, +0.008297f, -0.006413f, -0.001652f, -0.001455f, -0.003968f, -0.000896f, -0.003368f, -0.002667f, -0.002238f, - +0.000220f, -0.002806f, -0.005646f, +0.000275f, -0.000196f, +0.002407f, -0.002820f, -0.004014f, -0.001238f, +0.005053f, - -0.004090f, +0.002588f, +0.002056f, -0.000137f, -0.000422f, -0.001896f, +0.000387f, -0.004347f, -0.000082f, -0.003075f, - +0.001363f, +0.000786f, +0.001807f, -0.001481f, +0.001642f, -0.001717f, -0.001109f, +0.001897f, +0.000238f, +0.001084f, - -0.002623f, +0.002052f, -0.001405f, +0.001672f, -0.001442f, -0.000209f - }, - { - +0.031517f, -0.066266f, +0.009004f, +0.074749f, -0.004149f, -0.010391f, -0.005662f, +0.000541f, +0.000283f, +0.001396f, - -0.000015f, +0.001442f, +0.024575f, +0.008574f, +0.013527f, -0.024713f, -0.012402f, +0.003264f, -0.002772f, -0.002607f, - +0.006839f, +0.000396f, +0.002930f, -0.011122f, -0.007856f, +0.002920f, +0.003633f, +0.010701f, +0.013052f, +0.006234f, - -0.002552f, -0.012004f, -0.013645f, -0.005459f, +0.013389f, +0.007066f, -0.000166f, -0.003217f, -0.000758f, -0.002296f, - -0.000435f, -0.001152f, +0.000567f, +0.005421f, -0.005520f, -0.003232f, +0.002061f, -0.000833f, -0.000908f, -0.004282f, - +0.003300f, -0.006276f, +0.007871f, -0.002367f, -0.003158f, +0.001754f, -0.000399f, -0.002848f, +0.002251f, -0.005568f, - +0.003249f, +0.002236f, -0.004383f, -0.005316f, +0.002486f, -0.000727f, -0.000661f, +0.005314f, -0.000349f, -0.004118f, - -0.003059f, -0.004398f, -0.000741f, -0.001231f, +0.000498f, +0.001867f, +0.005927f, +0.000773f, -0.002367f, -0.002512f, - -0.000388f, +0.001450f, -0.004728f, -0.002332f, -0.001339f, +0.001907f, -0.001702f, +0.000911f, -0.000112f, -0.002166f, - -0.000688f, -0.000371f, -0.000790f, -0.002302f, +0.001783f, +0.000625f - }, - { - -0.004811f, -0.028878f, -0.013352f, -0.007311f, -0.002477f, -0.003553f, -0.006322f, +0.002931f, +0.001117f, -0.006923f, - +0.006692f, -0.000445f, +0.003873f, +0.018782f, -0.000745f, +0.002482f, +0.017683f, +0.023678f, +0.003196f, +0.000774f, - +0.014807f, +0.007046f, +0.004179f, +0.009513f, -0.008739f, -0.019643f, -0.016304f, -0.004075f, +0.002347f, -0.006494f, - +0.006151f, +0.011320f, -0.017281f, -0.011833f, +0.001583f, +0.001082f, -0.009324f, +0.003694f, -0.002460f, +0.008131f, - -0.004304f, -0.012440f, +0.002548f, -0.010729f, -0.013306f, +0.005648f, +0.001250f, +0.010046f, -0.003116f, -0.002496f, - +0.004564f, +0.003181f, -0.000337f, -0.004276f, -0.003062f, +0.005197f, +0.004536f, -0.001203f, -0.006561f, +0.003940f, - +0.001554f, -0.003994f, -0.003376f, +0.004525f, +0.007231f, +0.000924f, +0.000485f, +0.002585f, -0.002452f, -0.001396f, - -0.000204f, -0.002965f, +0.001843f, +0.004955f, -0.001257f, +0.002185f, -0.002145f, +0.002850f, -0.002286f, -0.004383f, - -0.000836f, -0.000828f, -0.000394f, +0.001007f, -0.004196f, -0.004149f, -0.001489f, -0.000990f, +0.000397f, -0.002266f, - -0.003633f, -0.000565f, +0.002182f, -0.001502f, -0.001229f, -0.001373f - }, - { - -0.019425f, -0.049526f, +0.024869f, +0.016044f, -0.006975f, +0.022894f, +0.054270f, -0.016857f, +0.005388f, -0.019052f, - -0.006461f, +0.001722f, -0.011218f, -0.005266f, -0.021379f, +0.005739f, -0.008059f, -0.017088f, +0.007141f, -0.000470f, - +0.027607f, -0.004919f, +0.008044f, -0.006040f, -0.003929f, -0.013962f, -0.014932f, -0.004262f, -0.003848f, +0.020753f, - -0.011753f, -0.005597f, -0.001292f, -0.000290f, +0.004218f, -0.001673f, +0.011814f, +0.004566f, +0.011011f, +0.013098f, - -0.011973f, -0.011204f, +0.004734f, -0.013739f, -0.007857f, -0.012814f, +0.002381f, +0.009728f, -0.001120f, -0.000643f, - +0.004191f, +0.019372f, -0.001403f, -0.004854f, +0.002146f, +0.000477f, +0.005671f, +0.003456f, +0.001530f, -0.000627f, - +0.000014f, -0.000011f, -0.007059f, -0.004992f, +0.002462f, -0.001421f, +0.000678f, -0.004058f, -0.002133f, -0.002380f, - -0.004527f, +0.001144f, +0.002415f, -0.003125f, +0.001171f, -0.001879f, +0.000915f, -0.004660f, -0.000743f, +0.003399f, - +0.000747f, -0.000940f, -0.001655f, +0.001130f, -0.001344f, -0.007147f, +0.000253f, +0.003369f, -0.002056f, -0.001295f, - -0.000476f, +0.001797f, -0.003101f, -0.001260f, +0.001557f, -0.002545f - }, - { - +0.006025f, -0.016496f, -0.017939f, +0.001678f, -0.005938f, -0.006168f, +0.004737f, +0.012501f, -0.027812f, -0.014675f, - -0.004921f, -0.008746f, +0.012903f, +0.005677f, -0.012658f, -0.001594f, +0.003915f, -0.017736f, +0.004734f, -0.004359f, - +0.031019f, +0.016053f, -0.001124f, +0.016129f, +0.002957f, +0.015494f, +0.008494f, -0.005324f, -0.004135f, -0.006645f, - +0.012361f, -0.003754f, -0.005025f, -0.001115f, +0.005787f, +0.004741f, +0.012811f, +0.009897f, -0.003750f, +0.001644f, - -0.004807f, -0.006442f, -0.002465f, -0.001162f, +0.006001f, +0.006943f, -0.008253f, +0.010436f, -0.000003f, -0.015620f, - +0.003217f, +0.004248f, +0.007600f, +0.003528f, +0.008976f, +0.004825f, +0.007726f, -0.002627f, +0.012034f, -0.005390f, - +0.003664f, -0.008593f, -0.002717f, +0.002631f, -0.010105f, +0.003159f, -0.005899f, -0.008392f, +0.001063f, -0.000855f, - +0.001616f, +0.000686f, -0.005322f, +0.001149f, -0.000194f, -0.003475f, +0.002112f, -0.000821f, -0.005999f, +0.001072f, - -0.000155f, -0.003390f, +0.002691f, -0.000807f, -0.002710f, -0.001841f, +0.001159f, -0.002740f, -0.001185f, -0.003349f, - +0.002826f, -0.001400f, +0.000274f, -0.000338f, +0.000412f, +0.001490f - }, - { - +0.019211f, +0.084069f, -0.006735f, -0.005734f, -0.024671f, -0.032492f, -0.026804f, +0.008141f, +0.009352f, -0.015678f, - -0.006599f, +0.005711f, +0.000970f, -0.051198f, -0.026564f, +0.000554f, +0.001789f, +0.000474f, -0.013598f, +0.002307f, - -0.016039f, -0.002888f, -0.001781f, -0.001142f, -0.015985f, -0.020282f, -0.015811f, -0.000810f, +0.007444f, -0.003814f, - +0.004130f, +0.005655f, +0.006153f, +0.005350f, +0.012289f, +0.008017f, +0.007048f, -0.000722f, -0.005801f, -0.011877f, - +0.010039f, -0.015615f, -0.004120f, +0.001802f, +0.003245f, -0.006868f, +0.019094f, -0.008437f, +0.000015f, +0.001836f, - -0.016565f, -0.006298f, +0.002279f, +0.006945f, +0.003213f, -0.010037f, +0.000635f, -0.001443f, -0.003504f, -0.005638f, - -0.000389f, -0.000494f, +0.002298f, +0.000716f, -0.001694f, +0.006623f, +0.003183f, -0.007431f, -0.000857f, -0.005501f, - +0.001240f, +0.001283f, -0.004440f, -0.004249f, -0.004023f, +0.001390f, +0.004043f, -0.006389f, +0.002538f, +0.002340f, - +0.000657f, -0.006705f, -0.001157f, -0.001432f, +0.000126f, -0.002367f, -0.000225f, +0.001443f, -0.000012f, +0.000356f, - -0.000515f, +0.000545f, -0.000625f, +0.002451f, -0.001742f, +0.001969f - }, - { - +0.002684f, -0.044492f, -0.013073f, -0.013448f, +0.020506f, -0.006198f, -0.001675f, +0.001292f, +0.003137f, -0.002599f, - -0.003819f, +0.012999f, -0.001772f, -0.059264f, +0.009404f, +0.006536f, +0.013927f, +0.003557f, -0.009716f, -0.005443f, - +0.000637f, -0.009607f, -0.018140f, +0.000935f, -0.002439f, -0.016272f, -0.020725f, +0.008314f, +0.004088f, +0.015881f, - +0.027051f, -0.016780f, -0.000362f, +0.000684f, +0.003829f, +0.001947f, +0.002178f, -0.006523f, -0.003722f, -0.019222f, - -0.012120f, -0.003638f, +0.007116f, -0.003385f, -0.000173f, -0.010708f, -0.001351f, -0.005691f, -0.004914f, -0.003345f, - +0.007057f, +0.003217f, +0.001399f, +0.003503f, +0.000350f, +0.008436f, -0.003464f, -0.003822f, -0.003120f, +0.007150f, - +0.006458f, -0.004792f, +0.005209f, -0.000635f, +0.007452f, -0.001117f, -0.001936f, -0.000101f, -0.000599f, -0.004463f, - -0.005566f, -0.000559f, +0.002686f, -0.001151f, +0.001494f, -0.002699f, +0.002970f, -0.002662f, -0.001342f, -0.002924f, - +0.003291f, -0.001037f, +0.000825f, +0.005143f, -0.002940f, -0.004097f, +0.003078f, +0.002360f, -0.000718f, +0.001655f, - +0.002729f, +0.001937f, -0.002363f, +0.000325f, -0.001258f, +0.001168f - }, - { - +0.022649f, +0.060535f, +0.002563f, +0.032887f, +0.001988f, +0.002006f, +0.013454f, +0.005954f, +0.025963f, -0.009951f, - -0.004288f, -0.018354f, +0.010590f, -0.002384f, -0.029033f, +0.011650f, +0.017969f, -0.025966f, +0.000469f, -0.005497f, - -0.011542f, -0.006075f, +0.006162f, -0.004998f, +0.018169f, -0.002113f, +0.005785f, -0.005067f, -0.004936f, -0.019666f, - -0.009704f, -0.004044f, +0.007802f, -0.002093f, -0.001006f, -0.009362f, -0.003963f, -0.008973f, -0.007093f, +0.000052f, - -0.006606f, -0.005851f, +0.012223f, +0.010460f, +0.002965f, -0.000093f, +0.001988f, -0.000141f, -0.008832f, -0.010001f, - +0.002964f, +0.009269f, -0.004976f, -0.002410f, -0.005836f, -0.000386f, +0.001219f, -0.001753f, +0.007480f, -0.004408f, - +0.008107f, +0.000894f, +0.002472f, +0.005032f, -0.002809f, +0.004550f, +0.002265f, +0.003004f, -0.001494f, +0.002452f, - -0.002528f, -0.001662f, -0.002045f, +0.002014f, -0.000635f, +0.001521f, +0.005693f, +0.003147f, -0.000643f, +0.005051f, - -0.003573f, -0.002082f, -0.001486f, -0.001376f, -0.001246f, +0.000414f, -0.000413f, +0.001030f, -0.002069f, +0.000549f, - -0.002246f, -0.001950f, -0.001475f, +0.001395f, -0.001952f, +0.002570f - }, - { - +0.004287f, +0.033056f, +0.000503f, -0.007984f, +0.001062f, -0.012019f, +0.019860f, -0.004835f, -0.015414f, +0.004100f, - -0.015729f, +0.024177f, +0.003092f, +0.044102f, +0.070753f, -0.005545f, -0.001934f, -0.010120f, -0.005591f, -0.003013f, - -0.003202f, -0.014623f, +0.006046f, +0.006905f, +0.027342f, -0.000016f, +0.018143f, -0.004190f, -0.003492f, -0.001131f, - +0.002999f, +0.005040f, +0.005195f, +0.006260f, +0.023593f, -0.009516f, -0.010427f, +0.018135f, -0.005575f, -0.000041f, - -0.001416f, +0.006472f, -0.000227f, -0.001587f, +0.003534f, -0.006867f, -0.003988f, -0.001766f, -0.012790f, -0.004834f, - +0.002702f, -0.008991f, -0.010109f, +0.003948f, +0.002456f, +0.000374f, +0.006136f, +0.003665f, +0.006020f, +0.002265f, - -0.006005f, +0.001093f, +0.000722f, -0.000266f, +0.000006f, -0.000964f, -0.006267f, -0.003256f, -0.002812f, +0.004199f, - -0.001486f, +0.002052f, -0.005312f, -0.006683f, +0.000545f, +0.002611f, +0.004069f, +0.000236f, -0.001169f, -0.003694f, - +0.001558f, +0.002369f, +0.002872f, -0.003230f, +0.000992f, -0.003140f, +0.002719f, -0.004135f, -0.002821f, +0.000208f, - +0.002351f, +0.001835f, +0.000983f, -0.000187f, +0.001164f, -0.001568f - } - }, - { - { - -0.001621f, +0.162450f, +0.028996f, -0.090243f, +0.005191f, +0.004161f, -0.007803f, -0.012649f, -0.007057f, -0.002580f, - +0.014142f, +0.023411f, +0.025799f, -0.009290f, +0.004931f, -0.003875f, +0.013635f, +0.012515f, +0.016922f, -0.009455f, - +0.001493f, -0.011978f, -0.016486f, -0.005781f, -0.009286f, +0.002990f, +0.008105f, -0.014386f, -0.008623f, +0.000575f, - -0.002386f, +0.000481f, -0.008313f, -0.006266f, -0.011420f, -0.006351f, +0.005713f, +0.003270f, +0.000754f, -0.011419f, - +0.008157f, -0.002142f, +0.011422f, +0.002615f, +0.009611f, -0.004270f, -0.003619f, +0.006091f, +0.001137f, -0.000595f, - -0.005620f, +0.008532f, -0.006573f, -0.013592f, -0.004132f, +0.000673f, -0.007700f, -0.007618f, -0.006919f, -0.006641f, - +0.000092f, -0.002107f, -0.002568f, -0.000735f, -0.002367f, +0.003029f, +0.006994f, -0.001706f, +0.000196f, +0.000430f, - +0.000087f, -0.003211f, -0.001689f, +0.000425f, -0.003587f, -0.000132f, +0.001970f, +0.002031f, -0.002262f, +0.000411f, - +0.001190f, -0.001251f, -0.001577f, +0.000649f, +0.000300f, +0.001274f, -0.003039f, -0.001789f, +0.004444f, -0.001721f, - +0.001763f, +0.001306f, -0.000122f, +0.000111f, -0.001626f, -0.002100f - }, - { - +0.001858f, +0.040910f, -0.019556f, +0.046627f, +0.011471f, +0.001195f, +0.006331f, -0.005091f, -0.001287f, +0.003231f, - -0.006750f, +0.000672f, +0.007549f, -0.007788f, +0.002257f, -0.005366f, -0.004943f, +0.010986f, +0.031569f, +0.004845f, - +0.007506f, +0.011965f, +0.008469f, -0.010505f, +0.004505f, +0.010210f, -0.011481f, -0.000887f, -0.006920f, +0.001852f, - -0.003660f, +0.024476f, -0.002130f, -0.010068f, -0.012293f, +0.003149f, +0.003444f, -0.012266f, -0.003592f, +0.008629f, - +0.007118f, -0.002910f, -0.008584f, +0.007658f, -0.007817f, -0.000561f, -0.003691f, +0.010903f, -0.003776f, -0.003763f, - +0.001124f, -0.003391f, +0.002008f, -0.011939f, +0.008661f, -0.001268f, +0.006402f, +0.001335f, -0.007301f, +0.006260f, - +0.000939f, +0.000580f, -0.006612f, -0.002135f, +0.000998f, -0.000274f, +0.001247f, +0.000337f, -0.005004f, +0.000918f, - +0.000346f, -0.000149f, +0.000701f, -0.002183f, -0.005434f, -0.001552f, -0.002093f, -0.001450f, +0.003526f, -0.001900f, - -0.000141f, +0.002061f, +0.000887f, -0.001659f, -0.000988f, -0.000638f, -0.001433f, -0.002584f, +0.001110f, -0.000431f, - +0.002029f, +0.000654f, +0.000956f, +0.000719f, +0.000520f, -0.002948f - }, - { - -0.004606f, -0.127193f, +0.015164f, +0.048330f, -0.024529f, -0.001171f, -0.011758f, -0.002759f, +0.011970f, -0.005986f, - -0.002891f, +0.024913f, -0.000429f, +0.019879f, -0.000583f, -0.008816f, +0.027743f, +0.007488f, +0.023981f, -0.005982f, - -0.014562f, -0.012290f, +0.009059f, -0.004673f, +0.004064f, +0.003247f, -0.008960f, -0.002115f, +0.004136f, +0.013891f, - -0.006258f, +0.015269f, -0.015098f, -0.005101f, -0.004736f, -0.007788f, +0.005705f, -0.012975f, +0.001088f, +0.005137f, - -0.002278f, +0.003791f, +0.006579f, +0.003441f, +0.000300f, -0.000265f, -0.002221f, -0.000819f, -0.001960f, +0.004859f, - +0.001475f, +0.002495f, -0.003986f, +0.002736f, -0.004288f, -0.001012f, -0.002514f, -0.003523f, +0.002629f, -0.005030f, - -0.001054f, -0.003730f, +0.006059f, -0.001043f, +0.000192f, +0.001258f, -0.002805f, +0.000813f, +0.000012f, +0.004834f, - -0.000053f, -0.001112f, +0.002758f, -0.003668f, +0.001156f, +0.001743f, -0.001488f, -0.005227f, -0.002616f, +0.001119f, - -0.005276f, -0.001756f, +0.001395f, +0.000171f, -0.001104f, -0.001182f, -0.002298f, -0.002268f, -0.000720f, +0.001919f, - -0.001409f, +0.000393f, +0.000684f, -0.001746f, +0.004507f, +0.000752f - }, - { - -0.021047f, +0.041384f, +0.022096f, +0.048088f, -0.013144f, -0.007120f, -0.002838f, +0.003044f, +0.006914f, -0.010367f, - -0.016118f, +0.029632f, -0.000598f, +0.007762f, +0.018480f, -0.014557f, +0.027325f, -0.002143f, -0.003382f, -0.012292f, - +0.005358f, +0.006267f, -0.004487f, +0.006951f, +0.002603f, -0.002852f, +0.003391f, +0.002627f, +0.011246f, -0.014410f, - +0.007358f, -0.003799f, +0.020005f, -0.000871f, -0.004145f, +0.011702f, +0.003054f, +0.006337f, +0.005146f, +0.002787f, - -0.012077f, -0.008382f, -0.002999f, -0.009514f, +0.002879f, +0.002991f, +0.004029f, -0.002125f, +0.004015f, -0.007369f, - -0.002704f, +0.000379f, +0.002212f, -0.002605f, +0.006048f, +0.009521f, +0.008423f, -0.009119f, +0.004854f, +0.001635f, - -0.001697f, -0.005699f, +0.000438f, -0.002054f, -0.005838f, -0.003835f, +0.001929f, +0.001724f, +0.005049f, -0.003731f, - +0.004624f, +0.000603f, +0.001304f, +0.002272f, +0.000511f, -0.000487f, -0.005702f, +0.001603f, +0.002111f, -0.002600f, - +0.002011f, -0.000240f, -0.003758f, +0.003419f, +0.001911f, +0.002004f, -0.000479f, -0.001472f, -0.000686f, -0.001369f, - -0.000815f, +0.000732f, +0.001108f, -0.000706f, -0.002293f, +0.004735f - }, - { - +0.000306f, -0.054106f, -0.003868f, +0.011829f, +0.005727f, -0.000920f, -0.002953f, -0.020696f, -0.004865f, -0.008471f, - -0.000788f, -0.017894f, -0.002526f, +0.012968f, +0.040273f, -0.018605f, -0.010956f, +0.033390f, -0.018302f, -0.009278f, - +0.005725f, +0.009359f, -0.009001f, +0.009644f, +0.013024f, -0.002897f, -0.010338f, +0.014901f, -0.004920f, -0.015973f, - +0.001764f, +0.010024f, -0.014464f, +0.009193f, -0.000504f, +0.006608f, -0.010730f, +0.015249f, -0.003892f, -0.000305f, - -0.007774f, +0.005523f, -0.014466f, -0.010981f, -0.000138f, +0.006059f, +0.006382f, -0.002716f, -0.002771f, +0.000909f, - +0.002466f, +0.006469f, +0.000404f, +0.002389f, -0.002131f, +0.007201f, +0.006052f, -0.003516f, +0.001912f, +0.001579f, - +0.002367f, +0.001842f, +0.000464f, -0.011127f, -0.002975f, -0.005407f, +0.009591f, -0.006086f, +0.003118f, -0.004451f, - -0.004950f, -0.000022f, +0.002878f, +0.005304f, +0.001622f, +0.000097f, -0.002369f, +0.002026f, +0.003045f, +0.000540f, - +0.002720f, -0.000595f, -0.001878f, +0.001602f, +0.000702f, -0.002078f, -0.003721f, -0.000037f, +0.003006f, -0.000770f, - +0.000230f, -0.001993f, +0.001116f, +0.001174f, -0.002755f, +0.001009f - }, - { - -0.021906f, +0.094301f, -0.005458f, +0.076830f, -0.001020f, -0.004624f, -0.000701f, +0.008542f, -0.020559f, -0.002195f, - -0.018626f, +0.021726f, +0.002362f, -0.007564f, -0.000195f, -0.006985f, +0.008168f, -0.005179f, -0.011438f, -0.009888f, - -0.007496f, +0.002738f, +0.008796f, +0.007983f, +0.004239f, -0.000172f, -0.007541f, +0.006918f, -0.009197f, +0.002646f, - -0.006816f, -0.002000f, +0.012588f, -0.016677f, +0.012304f, +0.006361f, -0.007053f, +0.007054f, -0.007339f, -0.002175f, - +0.003822f, -0.005010f, +0.006334f, +0.004141f, -0.002504f, +0.007449f, +0.011754f, +0.003098f, -0.003339f, -0.000927f, - +0.003415f, -0.002531f, -0.003913f, -0.001573f, -0.000888f, -0.000283f, -0.004785f, -0.003051f, -0.005807f, -0.001318f, - -0.007198f, +0.004020f, +0.001647f, -0.003364f, -0.000902f, -0.000917f, +0.002951f, -0.000024f, -0.001218f, -0.000384f, - -0.005415f, +0.001427f, -0.003921f, -0.001599f, +0.001153f, -0.000373f, +0.008749f, +0.000506f, +0.003928f, +0.001515f, - +0.002723f, +0.002518f, +0.000796f, -0.001398f, +0.000196f, -0.002326f, +0.001220f, +0.003358f, -0.001724f, -0.001721f, - +0.000911f, -0.001316f, +0.001261f, +0.001461f, +0.001506f, +0.001817f - }, - { - +0.000003f, +0.028762f, -0.017531f, -0.005844f, +0.001511f, +0.002496f, -0.001700f, +0.001469f, -0.001724f, -0.006864f, - +0.011502f, -0.019671f, +0.010710f, +0.006905f, +0.001331f, +0.013907f, -0.010835f, +0.031312f, +0.000115f, +0.012111f, - +0.020738f, +0.003579f, -0.010754f, -0.001759f, -0.016929f, +0.005090f, +0.010106f, +0.004537f, +0.005645f, -0.008013f, - -0.002622f, -0.010221f, +0.005147f, +0.003231f, -0.006105f, -0.006957f, +0.001406f, -0.006669f, +0.001835f, -0.001431f, - -0.008044f, +0.012875f, +0.006271f, -0.001864f, +0.000415f, -0.005046f, -0.009569f, -0.002449f, -0.003182f, +0.000971f, - -0.000501f, +0.006185f, -0.006479f, -0.002544f, -0.005946f, -0.003995f, +0.003199f, -0.004108f, -0.002498f, -0.006864f, - +0.004065f, -0.002749f, -0.004579f, -0.001927f, -0.000125f, +0.004682f, -0.004931f, +0.001272f, -0.005079f, +0.006162f, - -0.000759f, +0.000159f, +0.003710f, -0.003640f, -0.001222f, -0.000678f, -0.001706f, -0.003634f, -0.000072f, -0.001853f, - +0.003958f, -0.003209f, +0.003638f, +0.000118f, -0.001530f, +0.000406f, +0.000634f, +0.000484f, +0.001050f, -0.000241f, - +0.000278f, +0.000418f, -0.000832f, +0.000458f, -0.000721f, +0.000426f - }, - { - -0.038241f, +0.023335f, +0.013957f, +0.078170f, -0.001584f, -0.002832f, -0.023875f, +0.014592f, +0.002867f, -0.002355f, - -0.029893f, +0.014064f, +0.042947f, -0.009201f, +0.021317f, -0.012671f, -0.003244f, -0.003857f, +0.007424f, +0.002280f, - +0.001054f, +0.003227f, -0.001594f, -0.017380f, +0.001175f, -0.007889f, +0.019295f, +0.007923f, -0.002697f, +0.014597f, - -0.002016f, -0.016169f, +0.003056f, -0.011062f, +0.006081f, +0.004990f, -0.006346f, -0.000415f, +0.001743f, +0.001580f, - +0.000185f, -0.004685f, +0.006027f, +0.004305f, -0.002596f, -0.008729f, +0.003174f, -0.002039f, +0.006159f, -0.007321f, - +0.002987f, -0.002579f, +0.008194f, -0.002012f, -0.001447f, +0.003152f, +0.004456f, -0.009710f, +0.002848f, -0.001965f, - +0.001060f, -0.004324f, +0.000771f, -0.008409f, +0.001787f, -0.002841f, +0.007498f, +0.001801f, -0.006441f, +0.002273f, - -0.002232f, -0.004086f, -0.006516f, +0.000127f, +0.002570f, +0.002394f, +0.001524f, +0.000567f, -0.001149f, -0.000839f, - -0.001063f, +0.001157f, -0.004854f, -0.002485f, -0.001583f, +0.000050f, +0.002078f, -0.001387f, -0.001049f, +0.000842f, - -0.001328f, -0.000498f, -0.001315f, -0.003729f, +0.001604f, +0.001349f - }, - { - -0.000483f, -0.049049f, -0.016110f, -0.016029f, +0.002074f, -0.000608f, -0.004523f, +0.004898f, -0.014702f, +0.000755f, - +0.006074f, +0.007967f, +0.003313f, +0.007255f, +0.014061f, +0.041282f, -0.002343f, +0.004550f, +0.010695f, +0.013755f, - +0.005674f, +0.007490f, +0.000421f, +0.004896f, -0.003561f, -0.001867f, -0.016986f, -0.011417f, +0.010606f, -0.003018f, - -0.005705f, +0.011909f, -0.004467f, -0.005269f, -0.010904f, -0.011293f, +0.004105f, +0.004008f, -0.004578f, +0.005166f, - -0.010524f, -0.005475f, +0.000431f, -0.004428f, -0.008531f, -0.009600f, +0.010778f, +0.004900f, -0.003138f, -0.000689f, - +0.007179f, -0.000629f, +0.000159f, -0.007543f, -0.004425f, +0.007375f, +0.002069f, -0.003727f, -0.003288f, +0.008196f, - -0.001489f, -0.004835f, -0.001397f, +0.005099f, +0.006103f, -0.002048f, -0.000073f, +0.008412f, -0.004274f, -0.004309f, - -0.002119f, -0.001783f, +0.006140f, +0.000859f, -0.002273f, +0.000820f, +0.001235f, -0.001723f, -0.001226f, -0.003647f, - -0.001507f, +0.000061f, -0.001365f, +0.000377f, -0.003618f, -0.002339f, -0.002823f, -0.000672f, -0.001136f, -0.002436f, - -0.003792f, +0.002276f, -0.001780f, -0.000328f, -0.003237f, +0.000267f - }, - { - +0.020920f, -0.074749f, -0.007097f, +0.018191f, +0.029417f, +0.013617f, +0.016006f, -0.006613f, -0.002546f, -0.008558f, - -0.010498f, -0.028356f, -0.003329f, +0.010230f, +0.006304f, -0.016102f, -0.012195f, +0.006215f, -0.009212f, -0.004544f, - +0.018141f, -0.005036f, +0.012289f, -0.006236f, -0.016705f, -0.005941f, -0.018894f, +0.000331f, +0.005914f, +0.002424f, - -0.003932f, +0.006067f, -0.010682f, +0.000207f, -0.001171f, +0.014492f, -0.000430f, +0.008312f, +0.013374f, +0.006002f, - +0.002271f, -0.015080f, -0.010329f, +0.003716f, -0.006021f, -0.022352f, +0.001235f, +0.003315f, +0.004042f, +0.009310f, - -0.004549f, +0.019887f, -0.001728f, -0.006238f, -0.001060f, +0.003816f, +0.004354f, +0.003574f, +0.000027f, +0.002502f, - -0.003834f, +0.005972f, -0.004528f, -0.005048f, +0.003187f, -0.002653f, -0.003260f, -0.002294f, -0.003851f, -0.002818f, - -0.005291f, +0.004223f, -0.005453f, -0.000298f, +0.002084f, +0.002921f, -0.005337f, -0.002459f, +0.001789f, +0.002670f, - +0.003873f, -0.004092f, -0.005311f, +0.005447f, -0.001259f, -0.006960f, +0.003392f, -0.001279f, -0.002953f, -0.001321f, - -0.000426f, +0.000082f, -0.000130f, -0.002188f, -0.000356f, +0.001041f - }, - { - -0.005147f, -0.032039f, +0.023787f, -0.008159f, -0.010446f, -0.021481f, +0.026818f, +0.006348f, -0.033649f, -0.020470f, - -0.006680f, -0.003155f, +0.003621f, +0.012403f, -0.019582f, +0.012372f, +0.003384f, -0.002090f, -0.009784f, +0.003972f, - +0.017965f, +0.011870f, +0.012008f, +0.008724f, +0.016495f, +0.007898f, -0.003709f, -0.002140f, +0.003611f, -0.000421f, - -0.004194f, +0.011210f, -0.002611f, -0.022819f, +0.006721f, +0.009721f, +0.014885f, +0.014055f, -0.000017f, -0.006989f, - +0.002630f, -0.009417f, -0.010409f, +0.011187f, -0.004226f, +0.007505f, -0.007362f, +0.012559f, -0.001325f, -0.007369f, - -0.004675f, +0.006821f, +0.004922f, +0.010628f, +0.005518f, +0.012626f, +0.000101f, +0.002933f, +0.005375f, -0.001112f, - +0.003366f, -0.009651f, -0.001808f, +0.001825f, -0.003609f, +0.000408f, -0.003120f, -0.010173f, -0.001503f, +0.003304f, - -0.003187f, +0.003584f, -0.002457f, -0.001527f, -0.000821f, +0.002328f, -0.002038f, +0.001963f, -0.005180f, -0.002266f, - +0.000963f, +0.001713f, -0.004242f, -0.000224f, +0.000082f, +0.000115f, -0.001681f, -0.000542f, -0.003491f, -0.000579f, - +0.000118f, -0.000581f, +0.000155f, -0.001226f, +0.000071f, +0.001191f - }, - { - +0.004090f, +0.117100f, -0.025138f, +0.013266f, -0.009806f, -0.091481f, +0.000407f, +0.001142f, +0.011373f, -0.006010f, - -0.036822f, +0.027909f, +0.006463f, -0.049729f, -0.035198f, +0.007954f, -0.021840f, +0.000480f, +0.006007f, -0.017120f, - -0.017616f, -0.007132f, +0.000465f, +0.002442f, -0.003161f, -0.018012f, -0.011255f, -0.020407f, +0.013172f, +0.000480f, - -0.008811f, +0.008372f, +0.014993f, +0.006106f, +0.005620f, +0.011160f, -0.000371f, -0.004391f, -0.001500f, -0.006555f, - -0.000855f, -0.002426f, -0.000108f, +0.001040f, -0.004850f, +0.007955f, +0.008765f, -0.007036f, +0.007185f, -0.002483f, - -0.015284f, -0.011692f, +0.002566f, +0.008785f, -0.001464f, -0.008572f, -0.000835f, +0.006979f, -0.008589f, +0.000644f, - -0.006582f, -0.000757f, +0.002034f, +0.000890f, -0.001492f, +0.007069f, -0.003392f, -0.005753f, +0.002399f, -0.001209f, - -0.001892f, +0.000411f, -0.003200f, -0.003867f, -0.009269f, +0.004117f, +0.002030f, -0.001394f, -0.001314f, +0.004987f, - -0.003144f, -0.006037f, -0.003099f, +0.000106f, +0.000167f, -0.001754f, -0.000374f, +0.000190f, -0.000691f, +0.001757f, - -0.001178f, +0.000850f, -0.000043f, -0.001517f, +0.000715f, +0.000884f - }, - { - -0.000565f, -0.041689f, +0.000072f, -0.010948f, -0.001879f, +0.008924f, -0.012324f, +0.014806f, -0.004112f, +0.006572f, - -0.013544f, +0.013212f, -0.023682f, -0.047764f, +0.024429f, +0.013046f, +0.008095f, +0.000536f, -0.011824f, +0.012852f, - -0.018943f, -0.021696f, +0.003793f, -0.009530f, -0.015625f, -0.005097f, -0.016416f, -0.011153f, +0.029557f, +0.000602f, - +0.027165f, -0.008488f, +0.004369f, +0.000802f, +0.001768f, +0.003363f, +0.003272f, -0.008148f, -0.014852f, -0.013938f, - -0.006811f, +0.001816f, -0.003223f, +0.001791f, -0.003954f, -0.005184f, -0.003894f, -0.011624f, +0.007516f, -0.003475f, - +0.002294f, -0.005168f, +0.005528f, +0.003656f, +0.009215f, -0.006525f, +0.004552f, -0.001191f, -0.004257f, +0.013439f, - -0.000668f, -0.007171f, +0.004803f, +0.003209f, -0.001226f, +0.002343f, -0.001241f, -0.004652f, -0.000191f, +0.004549f, - -0.010408f, +0.000735f, -0.001158f, +0.002779f, +0.000102f, +0.001583f, -0.002272f, -0.000771f, -0.006067f, +0.004317f, - +0.000533f, +0.002268f, +0.000479f, +0.005197f, -0.004285f, +0.001417f, +0.000463f, +0.002020f, +0.000898f, +0.000356f, - +0.004270f, +0.000641f, -0.003937f, -0.000686f, -0.000466f, +0.001618f - }, - { - -0.008910f, +0.099587f, +0.018486f, +0.019028f, +0.003271f, -0.003537f, -0.004153f, +0.025097f, +0.015079f, -0.011875f, - -0.002078f, -0.033255f, +0.006082f, +0.016722f, -0.037524f, -0.007047f, +0.009570f, -0.000054f, +0.000374f, -0.011537f, - -0.021525f, +0.001345f, +0.006109f, -0.002605f, +0.013987f, +0.009516f, -0.005896f, +0.010131f, -0.000089f, -0.027367f, - -0.010956f, +0.002366f, -0.001656f, +0.009392f, -0.000016f, -0.005706f, -0.018971f, -0.010727f, -0.005845f, -0.001585f, - -0.011143f, +0.010652f, +0.002918f, +0.013719f, -0.004221f, +0.002704f, +0.007184f, -0.004405f, -0.014135f, -0.006688f, - -0.000134f, +0.005717f, +0.008035f, -0.005812f, -0.003383f, -0.007909f, +0.007283f, -0.002647f, +0.007446f, +0.001090f, - +0.004928f, +0.000598f, +0.001124f, +0.006181f, +0.001838f, +0.004773f, -0.002516f, +0.002519f, -0.000277f, +0.001812f, - -0.004982f, +0.000986f, +0.000535f, -0.004310f, +0.000948f, +0.003928f, +0.006035f, -0.001543f, +0.002262f, +0.004172f, - -0.001299f, -0.005299f, -0.005001f, +0.003259f, +0.000103f, +0.002190f, -0.003338f, +0.001477f, -0.000115f, +0.001512f, - -0.001053f, -0.003492f, -0.003001f, +0.002133f, -0.001201f, -0.001087f - }, - { - -0.004929f, +0.040850f, -0.000082f, -0.002953f, -0.006763f, -0.003329f, +0.012839f, -0.006356f, -0.006758f, -0.012913f, - +0.013223f, +0.005991f, +0.008074f, -0.043037f, +0.156555f, +0.014112f, -0.011740f, +0.014746f, -0.032663f, +0.003652f, - -0.016383f, -0.006249f, -0.014139f, +0.026930f, +0.004132f, +0.018202f, +0.007335f, +0.013274f, -0.009118f, +0.000851f, - +0.000270f, -0.006284f, +0.015330f, -0.002666f, +0.026809f, -0.017302f, +0.009097f, +0.011136f, -0.005310f, -0.002656f, - +0.002577f, -0.000586f, +0.008462f, -0.005829f, +0.004369f, -0.002402f, -0.002979f, +0.004326f, -0.017447f, -0.011717f, - +0.008047f, -0.012975f, -0.010795f, +0.006210f, -0.001150f, +0.000578f, +0.000736f, +0.006486f, +0.007169f, +0.003612f, - -0.005671f, +0.001394f, -0.006471f, -0.000717f, -0.001233f, -0.000180f, -0.007601f, -0.000039f, -0.003625f, +0.002820f, - +0.002017f, -0.002177f, -0.003690f, -0.005185f, -0.001395f, +0.003948f, +0.002457f, -0.000667f, -0.000241f, -0.001830f, - +0.001932f, -0.000221f, -0.001871f, +0.000247f, -0.002626f, -0.001033f, +0.001075f, -0.002900f, -0.003567f, +0.005026f, - -0.000253f, -0.000365f, +0.002186f, +0.000119f, +0.000152f, +0.000436f - } - }, - { - { - +0.005653f, +0.153462f, +0.005445f, -0.014559f, +0.054489f, +0.000535f, -0.006816f, -0.007606f, -0.007148f, -0.004984f, - +0.009748f, +0.013807f, +0.003977f, -0.011780f, +0.002605f, -0.009571f, -0.009102f, -0.001408f, +0.012386f, -0.009138f, - +0.010262f, -0.002631f, -0.000408f, +0.015094f, +0.005019f, -0.000909f, +0.006590f, -0.007783f, +0.005414f, +0.002397f, - -0.005091f, -0.007737f, -0.009141f, -0.005206f, -0.014623f, -0.006077f, +0.000122f, +0.006998f, +0.004739f, -0.009774f, - +0.003832f, -0.012913f, +0.010838f, +0.010133f, +0.015557f, +0.001512f, -0.003274f, +0.002818f, +0.005746f, +0.006170f, - -0.000370f, +0.006959f, +0.002380f, -0.001846f, -0.002372f, -0.001676f, -0.006862f, -0.000778f, -0.003389f, -0.002111f, - -0.003418f, -0.005794f, -0.005482f, -0.004965f, -0.007994f, -0.007479f, +0.002073f, -0.004261f, -0.002137f, -0.001897f, - -0.001333f, +0.000539f, -0.000824f, -0.001762f, -0.004200f, -0.001719f, -0.000042f, +0.002773f, +0.000619f, +0.004144f, - +0.003425f, +0.001472f, -0.001188f, +0.001041f, -0.000904f, +0.001538f, -0.000938f, -0.001348f, +0.004747f, -0.000710f, - +0.001388f, +0.000515f, +0.000482f, +0.001274f, -0.000882f, -0.002718f - }, - { - -0.001262f, +0.076704f, +0.016627f, -0.022326f, -0.039105f, +0.004309f, +0.004739f, -0.010929f, -0.005448f, +0.002785f, - +0.006188f, +0.006318f, +0.001228f, -0.010361f, -0.002294f, -0.010491f, -0.009862f, -0.006380f, +0.003659f, -0.018023f, - +0.018515f, +0.014889f, -0.003154f, +0.003010f, +0.018520f, +0.012623f, -0.014698f, +0.005297f, -0.000861f, +0.002597f, - -0.011067f, +0.023101f, +0.004272f, -0.005669f, +0.003270f, +0.009844f, +0.009198f, -0.003005f, -0.002548f, +0.003593f, - +0.002691f, +0.003144f, -0.006536f, -0.000275f, -0.018422f, -0.001825f, +0.003389f, +0.008190f, -0.009154f, -0.004726f, - +0.005436f, -0.000016f, +0.013869f, -0.000816f, +0.006180f, -0.004311f, +0.004769f, -0.000019f, -0.012727f, +0.001644f, - +0.007693f, +0.004945f, -0.004502f, -0.004165f, -0.003991f, +0.000554f, -0.000175f, +0.001422f, -0.006013f, -0.000134f, - +0.000433f, -0.001270f, +0.001114f, +0.001632f, -0.002225f, +0.000543f, -0.001379f, -0.001756f, +0.007380f, +0.000992f, - -0.002341f, -0.000364f, +0.000614f, -0.003385f, -0.001706f, -0.000070f, -0.001236f, -0.001014f, +0.002792f, -0.002709f, - -0.001218f, -0.000165f, +0.001645f, +0.001518f, -0.000162f, -0.003413f - }, - { - -0.000925f, -0.146347f, -0.002557f, +0.100149f, +0.010575f, -0.003899f, -0.015615f, -0.013539f, +0.001051f, -0.012088f, - +0.007966f, +0.035458f, +0.002626f, +0.012530f, -0.012340f, -0.006006f, +0.027348f, +0.007150f, +0.027288f, -0.001965f, - -0.010001f, -0.013271f, -0.000383f, -0.007471f, +0.013038f, +0.002743f, -0.015311f, -0.002737f, +0.007117f, +0.006048f, - -0.018594f, +0.022165f, -0.000631f, -0.004179f, -0.008836f, -0.002253f, +0.010740f, -0.020569f, -0.012192f, +0.004341f, - -0.000084f, -0.000345f, -0.006706f, -0.003658f, -0.005713f, +0.000542f, +0.004447f, -0.008821f, -0.015324f, -0.002988f, - -0.008121f, +0.000432f, +0.000775f, +0.001826f, -0.005396f, +0.000707f, +0.001175f, +0.002814f, +0.012252f, -0.002455f, - +0.005173f, +0.007915f, +0.008784f, -0.002898f, +0.002108f, -0.001726f, -0.002764f, +0.004567f, -0.000783f, +0.001515f, - -0.002739f, +0.000228f, +0.005084f, -0.001297f, +0.000880f, +0.001773f, +0.003341f, +0.002245f, +0.002227f, +0.004112f, - -0.001868f, -0.000261f, -0.002027f, -0.001315f, +0.000517f, +0.001050f, -0.000267f, -0.001456f, +0.000694f, +0.003508f, - +0.000332f, -0.001758f, +0.000328f, -0.001519f, +0.003808f, +0.001333f - }, - { - +0.012154f, +0.078034f, +0.009776f, +0.067721f, +0.000330f, -0.005726f, +0.003920f, +0.000745f, +0.003326f, -0.011435f, - -0.022404f, +0.006688f, -0.006452f, +0.002540f, -0.005674f, -0.034621f, +0.006252f, -0.025562f, -0.013516f, -0.008843f, - +0.014443f, +0.009118f, -0.005041f, +0.000922f, +0.009802f, -0.002692f, -0.004337f, -0.010970f, +0.010564f, +0.001111f, - +0.000722f, -0.009411f, +0.021742f, -0.005186f, -0.000565f, +0.010167f, -0.005663f, -0.005854f, -0.006848f, +0.006403f, - -0.001347f, -0.005046f, -0.005092f, -0.004177f, +0.004041f, -0.004297f, +0.004090f, +0.002400f, -0.000794f, -0.008834f, - -0.001707f, -0.002972f, +0.004279f, -0.001977f, +0.002368f, +0.003728f, +0.006503f, -0.001167f, -0.000230f, -0.003118f, - +0.008179f, +0.002669f, +0.002595f, -0.000083f, +0.003505f, +0.001542f, +0.004027f, -0.002097f, +0.003054f, -0.000769f, - +0.001134f, -0.003128f, -0.000107f, -0.001823f, -0.001492f, +0.002141f, -0.001200f, +0.000406f, -0.000748f, -0.001194f, - +0.005076f, +0.001418f, -0.003637f, +0.000654f, +0.000248f, +0.000054f, +0.000490f, +0.000802f, +0.000356f, +0.001677f, - +0.001723f, +0.001728f, +0.001541f, +0.001910f, -0.000782f, +0.002083f - }, - { - -0.002889f, -0.047213f, +0.000608f, -0.002955f, -0.003729f, +0.000024f, -0.003107f, -0.014540f, +0.003109f, +0.002920f, - +0.009519f, -0.014976f, -0.007608f, -0.002031f, +0.040465f, +0.003131f, -0.021449f, +0.014547f, -0.008148f, -0.022061f, - -0.015848f, +0.009590f, -0.018875f, -0.009090f, +0.002078f, -0.024446f, -0.006843f, +0.029895f, +0.001262f, -0.014871f, - +0.007529f, +0.018150f, -0.015666f, +0.013387f, +0.007148f, +0.004654f, -0.012512f, +0.008808f, +0.008252f, +0.016905f, - -0.012218f, -0.003775f, -0.006243f, +0.000134f, +0.002311f, +0.005078f, +0.009159f, +0.003553f, +0.004751f, +0.005618f, - -0.002844f, -0.002794f, -0.001420f, +0.011197f, -0.000715f, +0.003463f, +0.003807f, -0.001136f, +0.002755f, +0.003912f, - +0.003839f, -0.001832f, +0.003741f, -0.000058f, +0.005672f, -0.003269f, +0.003295f, -0.011519f, +0.001049f, -0.001381f, - -0.002270f, -0.003737f, +0.000492f, +0.002340f, -0.002813f, -0.001214f, -0.003598f, -0.000148f, +0.004631f, +0.000366f, - -0.000472f, -0.002001f, -0.002374f, +0.001737f, +0.000104f, -0.000514f, -0.001740f, -0.000616f, +0.002796f, +0.000018f, - -0.000270f, +0.000743f, +0.003264f, +0.001739f, -0.001727f, +0.001386f - }, - { - +0.003816f, +0.119311f, +0.002632f, +0.079758f, -0.000205f, -0.007099f, -0.001147f, +0.021231f, -0.021363f, -0.001133f, - -0.029143f, +0.005419f, +0.001641f, +0.005372f, +0.008519f, -0.014832f, +0.002788f, +0.000273f, -0.000433f, -0.008177f, - -0.007278f, +0.013145f, +0.015124f, -0.003397f, +0.003061f, +0.003063f, -0.003831f, +0.005433f, -0.010468f, +0.007584f, - +0.002874f, -0.000057f, +0.010140f, -0.006415f, +0.007883f, +0.004868f, -0.011161f, +0.000494f, -0.000723f, +0.006171f, - +0.010121f, +0.000620f, +0.003711f, -0.002697f, -0.007728f, +0.004405f, +0.005799f, +0.002857f, +0.001618f, +0.004191f, - +0.003733f, -0.012164f, -0.007855f, -0.003871f, -0.001183f, +0.000276f, +0.002634f, +0.001505f, -0.003770f, +0.004546f, - -0.001583f, +0.001377f, +0.003648f, +0.001265f, -0.003210f, -0.004101f, +0.006086f, +0.004298f, +0.000038f, +0.002013f, - -0.001267f, +0.004935f, -0.003372f, -0.003808f, +0.000286f, -0.000910f, +0.004687f, +0.000942f, +0.004540f, +0.000541f, - -0.000283f, -0.001326f, -0.002246f, -0.001348f, +0.000521f, -0.002706f, +0.001233f, +0.003575f, -0.000863f, -0.000638f, - +0.003582f, -0.001096f, +0.002026f, +0.002569f, -0.000567f, +0.000109f - }, - { - +0.001030f, +0.031687f, -0.012887f, -0.006480f, -0.002387f, +0.003060f, -0.001722f, +0.003193f, -0.000645f, -0.005701f, - +0.008041f, -0.020583f, -0.001121f, -0.012022f, -0.010891f, -0.004673f, -0.028739f, +0.025360f, +0.008115f, +0.012048f, - +0.006026f, -0.012211f, -0.006737f, -0.006194f, -0.018536f, +0.004651f, +0.012458f, -0.003334f, +0.006641f, +0.003978f, - -0.009327f, -0.008693f, -0.015136f, -0.011259f, +0.001238f, -0.005838f, +0.001711f, -0.006266f, +0.007314f, +0.003743f, - -0.001823f, +0.010774f, +0.000648f, -0.006342f, -0.003752f, +0.000655f, +0.003505f, +0.009829f, -0.000619f, -0.004019f, - -0.006629f, -0.001413f, -0.002661f, +0.002812f, -0.000227f, -0.003800f, +0.007631f, +0.002710f, -0.005680f, -0.006020f, - +0.006939f, +0.000843f, -0.001459f, -0.002817f, -0.003425f, +0.001544f, +0.000636f, +0.004886f, -0.004040f, +0.003843f, - -0.002395f, +0.002086f, +0.003044f, -0.004334f, +0.002495f, +0.001282f, +0.001748f, +0.002155f, +0.004605f, +0.001014f, - +0.005634f, -0.000603f, +0.002256f, -0.001587f, +0.000237f, +0.002887f, +0.001489f, -0.003105f, -0.003020f, -0.001054f, - -0.001031f, -0.000597f, -0.001735f, -0.000411f, -0.000368f, +0.001093f - }, - { - +0.032675f, +0.114242f, +0.020206f, +0.056081f, -0.042079f, +0.004487f, -0.053562f, -0.006712f, +0.003882f, -0.010608f, - -0.013878f, +0.008371f, +0.025684f, -0.010610f, +0.020161f, +0.004364f, +0.000477f, -0.013090f, +0.008576f, +0.015935f, - +0.000457f, -0.002417f, +0.009510f, -0.006636f, -0.009810f, -0.013072f, +0.005933f, +0.004350f, -0.002184f, +0.009994f, - -0.006157f, -0.014190f, +0.015391f, -0.008050f, +0.003314f, +0.006162f, -0.007971f, -0.004632f, +0.004856f, -0.000684f, - -0.006005f, -0.007275f, +0.005912f, +0.005591f, -0.006985f, -0.013245f, -0.002024f, -0.004784f, +0.009853f, -0.009370f, - -0.000895f, +0.002268f, +0.007376f, +0.007852f, +0.005423f, +0.001093f, +0.009038f, -0.006872f, +0.004930f, +0.003121f, - +0.003448f, -0.004114f, +0.005327f, -0.006354f, -0.000077f, -0.004231f, +0.000629f, -0.001019f, -0.006015f, +0.000913f, - +0.003283f, +0.001925f, -0.002598f, +0.002604f, +0.003980f, +0.001426f, -0.003113f, -0.003573f, -0.001477f, +0.002710f, - -0.000399f, +0.000334f, -0.000788f, +0.001370f, -0.000795f, -0.000890f, -0.000456f, -0.003142f, +0.000574f, +0.004479f, - +0.001597f, -0.001559f, -0.001497f, -0.002370f, +0.000681f, -0.002327f - }, - { - +0.004315f, -0.003593f, +0.007086f, -0.004139f, +0.012875f, +0.001260f, -0.000384f, +0.006860f, -0.010194f, +0.003364f, - -0.003895f, -0.003753f, -0.016232f, -0.000209f, +0.029327f, +0.045639f, +0.020035f, +0.017104f, +0.007118f, +0.017873f, - +0.007094f, +0.010789f, +0.004296f, +0.005124f, +0.004778f, +0.023662f, +0.002094f, -0.001531f, +0.017594f, +0.004456f, - +0.003972f, +0.020889f, -0.007905f, -0.016448f, -0.019681f, -0.020432f, +0.004758f, +0.015187f, -0.002332f, +0.006942f, - +0.006983f, +0.003503f, -0.005987f, +0.004188f, +0.004378f, -0.012779f, +0.000154f, +0.000177f, -0.000175f, +0.004118f, - +0.006302f, -0.003440f, -0.002750f, -0.002841f, -0.004144f, -0.001670f, -0.001105f, -0.002227f, +0.003331f, +0.009704f, - -0.003906f, -0.002603f, -0.002223f, -0.004050f, -0.005236f, -0.008242f, -0.005941f, +0.004382f, -0.003673f, -0.003817f, - -0.003528f, -0.000893f, +0.005665f, -0.001945f, -0.000817f, +0.000619f, +0.001282f, -0.002809f, -0.001372f, -0.002300f, - +0.000228f, -0.000038f, -0.000543f, +0.001682f, -0.002020f, +0.000123f, -0.000730f, +0.002271f, +0.002489f, +0.000829f, - -0.002130f, +0.002242f, -0.003362f, +0.000797f, -0.001294f, +0.002319f - }, - { - -0.023060f, -0.122778f, -0.003658f, +0.004043f, +0.021641f, -0.021714f, -0.019827f, +0.003033f, -0.002853f, -0.011243f, - -0.004837f, -0.017218f, +0.005583f, +0.015588f, +0.012849f, -0.008587f, -0.002332f, +0.010585f, -0.021995f, -0.027485f, - +0.007490f, -0.000436f, +0.009306f, +0.010474f, -0.013108f, +0.003756f, -0.008722f, +0.004481f, +0.008492f, -0.001517f, - +0.005542f, +0.005258f, -0.011578f, +0.001564f, -0.003766f, +0.008997f, -0.009797f, +0.001366f, +0.000628f, +0.001215f, - +0.016146f, -0.002440f, -0.004230f, +0.009696f, +0.001427f, -0.010620f, +0.001210f, -0.002314f, +0.011901f, +0.013289f, - -0.011163f, +0.006613f, -0.004424f, -0.002653f, -0.003532f, -0.001195f, +0.003034f, +0.001091f, -0.000704f, +0.003586f, - -0.010644f, +0.004895f, -0.002328f, +0.003200f, +0.007617f, +0.003630f, +0.000569f, -0.003093f, -0.003847f, +0.000506f, - -0.000118f, +0.006462f, -0.003574f, +0.001957f, -0.000100f, +0.002388f, -0.003617f, -0.000125f, +0.000766f, +0.002502f, - +0.005492f, -0.002777f, -0.002179f, +0.007059f, +0.003771f, +0.000533f, +0.007002f, -0.001210f, -0.001277f, -0.001585f, - +0.000185f, +0.000482f, +0.000812f, +0.000760f, +0.000574f, +0.002492f - }, - { - +0.002730f, -0.045426f, +0.027223f, +0.000625f, -0.004263f, +0.000508f, +0.028685f, +0.010857f, -0.013706f, -0.003346f, - +0.013627f, -0.002506f, -0.014609f, +0.002832f, -0.014285f, +0.017416f, +0.009857f, +0.017946f, +0.003487f, +0.012109f, - -0.002910f, -0.003429f, +0.024092f, +0.009379f, +0.007098f, +0.003853f, -0.012713f, -0.004723f, +0.011585f, -0.012166f, - -0.021146f, +0.005960f, -0.002649f, -0.016218f, +0.008693f, +0.010637f, +0.010509f, +0.002188f, -0.011234f, -0.016261f, - +0.003073f, -0.006297f, -0.010503f, +0.013137f, -0.006218f, +0.009727f, -0.007467f, +0.000209f, +0.002858f, +0.006740f, - +0.000533f, +0.001080f, -0.002074f, +0.006010f, -0.000940f, +0.002156f, -0.005897f, +0.001508f, +0.002453f, +0.000030f, - +0.009826f, +0.001668f, +0.001051f, +0.005327f, +0.004656f, -0.000337f, -0.001164f, -0.000823f, +0.001685f, +0.000811f, - -0.002969f, +0.006136f, -0.001094f, -0.002878f, -0.001098f, +0.000569f, -0.002404f, +0.002521f, -0.003519f, +0.002052f, - +0.001786f, +0.000943f, -0.003972f, -0.001608f, -0.001398f, +0.000349f, -0.002756f, -0.000936f, -0.002258f, +0.000808f, - -0.000417f, -0.001639f, -0.002751f, -0.003322f, +0.000064f, -0.000342f - }, - { - -0.028984f, +0.067279f, -0.018550f, +0.011753f, -0.012647f, -0.070863f, +0.026448f, -0.009335f, +0.003459f, +0.023024f, - -0.030539f, +0.020289f, +0.005708f, -0.025197f, -0.014608f, +0.027326f, -0.017609f, -0.012807f, +0.004069f, -0.010551f, - +0.001230f, +0.005984f, +0.013208f, +0.009698f, +0.008716f, -0.001283f, +0.009299f, -0.014048f, +0.010480f, -0.001200f, - -0.010134f, +0.014473f, +0.000957f, -0.004057f, -0.007459f, -0.006380f, -0.015099f, -0.006952f, +0.004939f, -0.003102f, - +0.003155f, +0.008280f, +0.003322f, -0.000443f, -0.007872f, +0.000099f, -0.003257f, -0.006883f, +0.012705f, +0.008112f, - +0.002308f, -0.009768f, -0.004696f, +0.009371f, -0.004035f, -0.006826f, +0.003575f, +0.006441f, -0.008684f, +0.010180f, - -0.002904f, -0.003257f, -0.003290f, +0.000617f, +0.000857f, +0.001668f, -0.011810f, -0.004884f, +0.007974f, +0.005519f, - +0.000077f, -0.001580f, +0.002813f, +0.002054f, -0.009061f, +0.002312f, -0.003514f, -0.001937f, -0.000729f, +0.002301f, - -0.004338f, -0.001202f, +0.001349f, -0.001803f, +0.001711f, +0.002364f, -0.002039f, -0.002263f, -0.000164f, +0.001506f, - -0.000959f, +0.002780f, -0.000220f, -0.005298f, -0.000515f, +0.000422f - }, - { - -0.002348f, -0.038040f, +0.010007f, -0.006831f, -0.008456f, +0.004252f, -0.017809f, +0.001755f, +0.001207f, +0.016872f, - -0.012807f, +0.011479f, +0.015970f, -0.011429f, +0.005246f, +0.003601f, -0.011513f, -0.012206f, -0.011608f, +0.022473f, - -0.012761f, -0.018647f, +0.024576f, +0.008120f, +0.004606f, +0.019392f, -0.004615f, -0.012596f, +0.029425f, -0.007305f, - +0.008583f, -0.003155f, +0.017512f, +0.003335f, -0.000399f, +0.008729f, +0.002932f, -0.000747f, -0.012051f, -0.000798f, - -0.001144f, -0.000147f, +0.003093f, +0.008505f, -0.000923f, -0.003930f, -0.001932f, -0.010408f, -0.003310f, -0.006850f, - +0.002799f, -0.008170f, +0.003644f, +0.002045f, +0.011519f, -0.002112f, +0.010150f, -0.003876f, -0.004903f, +0.003084f, - -0.006756f, -0.001677f, +0.002063f, -0.002886f, -0.007429f, -0.000763f, +0.000195f, -0.001130f, +0.001515f, +0.003789f, - -0.005527f, +0.002104f, -0.003298f, +0.000656f, +0.000112f, +0.004441f, -0.000792f, -0.000121f, -0.002701f, +0.006384f, - -0.000860f, +0.001684f, +0.000664f, +0.004437f, -0.006384f, -0.000649f, -0.002074f, -0.000400f, +0.000095f, -0.001416f, - +0.000417f, -0.001370f, -0.003041f, +0.000686f, +0.000582f, +0.001959f - }, - { - -0.011120f, +0.068627f, -0.030774f, -0.003368f, -0.004594f, -0.008242f, -0.007113f, +0.007600f, -0.015450f, -0.010494f, - +0.013357f, +0.011958f, +0.018773f, +0.017009f, -0.027191f, -0.028492f, -0.001016f, -0.010909f, -0.017545f, -0.010879f, - -0.020150f, -0.002297f, +0.003542f, +0.006065f, +0.019569f, -0.009175f, -0.007221f, +0.032944f, +0.014189f, -0.008399f, - +0.006518f, -0.001154f, -0.014233f, +0.007792f, +0.010755f, +0.000962f, -0.018775f, -0.003900f, +0.001197f, +0.006332f, - -0.002707f, +0.012947f, -0.003634f, +0.014192f, -0.003059f, -0.003220f, -0.002200f, -0.005430f, -0.002115f, +0.005143f, - -0.009987f, -0.008735f, +0.013475f, -0.001586f, +0.003407f, +0.000495f, +0.007326f, -0.004444f, +0.002514f, +0.003257f, - +0.002211f, -0.004678f, +0.000874f, +0.001272f, -0.002588f, +0.000988f, -0.007867f, -0.002242f, -0.001323f, -0.000273f, - -0.005731f, -0.001439f, +0.000952f, -0.001769f, -0.000971f, -0.000617f, +0.002839f, -0.000955f, -0.001680f, -0.000825f, - -0.001094f, -0.004999f, -0.004169f, +0.006547f, +0.002455f, +0.003436f, -0.003374f, +0.002175f, +0.000066f, +0.000696f, - +0.000606f, -0.002774f, -0.003461f, +0.000275f, -0.001258f, -0.000460f - }, - { - +0.004722f, +0.029270f, -0.030274f, -0.011903f, +0.003145f, -0.005419f, +0.003038f, -0.002193f, +0.001786f, -0.004300f, - +0.009378f, -0.010483f, +0.004964f, -0.069765f, +0.058587f, -0.006573f, -0.007965f, +0.030001f, -0.045509f, -0.041033f, - -0.035611f, -0.001246f, -0.018635f, +0.010593f, +0.000435f, +0.007431f, -0.022454f, +0.013552f, +0.010501f, +0.011055f, - +0.000343f, +0.003378f, +0.019417f, -0.002569f, +0.007413f, -0.015618f, +0.031248f, +0.007625f, -0.004496f, -0.000849f, - -0.012340f, -0.008407f, +0.013103f, -0.007545f, +0.001730f, +0.006124f, +0.004827f, +0.016152f, -0.000981f, -0.013672f, - -0.003546f, -0.010616f, -0.006712f, +0.006994f, +0.002103f, -0.002356f, -0.004062f, +0.001408f, +0.006259f, +0.005692f, - -0.005273f, -0.002990f, -0.002638f, +0.007750f, -0.001984f, +0.004830f, -0.006326f, -0.000801f, -0.000590f, +0.003536f, - +0.002237f, -0.002212f, +0.003854f, -0.000090f, -0.002970f, +0.000071f, +0.000469f, +0.000647f, +0.000341f, -0.002387f, - +0.000346f, -0.003777f, -0.004358f, +0.000775f, -0.002356f, -0.001466f, +0.000237f, +0.001251f, -0.001240f, +0.003571f, - -0.002567f, -0.001409f, +0.000444f, +0.001462f, +0.000098f, -0.000106f - } - }, - { - { - -0.008865f, +0.244899f, -0.049692f, +0.063579f, -0.021602f, +0.005206f, -0.005581f, +0.004943f, -0.009407f, +0.013695f, - -0.019494f, +0.019068f, -0.003066f, -0.001770f, -0.008482f, +0.001646f, -0.010412f, -0.000840f, -0.006303f, -0.000474f, - +0.014068f, -0.002836f, +0.011600f, +0.003532f, +0.014892f, -0.006046f, +0.006510f, +0.001781f, +0.008245f, -0.004423f, - -0.008851f, -0.008824f, -0.011789f, +0.005488f, -0.013723f, +0.000496f, -0.006795f, +0.008000f, -0.004666f, -0.004498f, - +0.003652f, -0.004304f, +0.011119f, +0.008931f, +0.001523f, +0.009153f, +0.000446f, -0.000283f, +0.005607f, +0.005499f, - +0.004102f, -0.000115f, +0.005183f, -0.001881f, +0.001227f, -0.000301f, -0.001283f, -0.001591f, -0.004304f, +0.001925f, - -0.010903f, -0.001239f, -0.006346f, -0.005045f, -0.006542f, -0.007484f, -0.000270f, -0.004208f, +0.000406f, -0.001883f, - -0.002823f, +0.000144f, -0.001918f, -0.001493f, -0.004867f, +0.000094f, -0.003253f, +0.003030f, +0.001255f, +0.005033f, - +0.002272f, +0.002050f, -0.001012f, +0.001884f, -0.001992f, +0.001599f, +0.000318f, -0.000604f, +0.002673f, +0.001972f, - +0.000708f, -0.000077f, +0.000746f, +0.000334f, -0.001878f, -0.000704f - }, - { - -0.001106f, +0.087551f, +0.003829f, -0.074947f, +0.011659f, +0.004618f, -0.002588f, +0.000145f, -0.003179f, -0.006758f, - +0.002509f, +0.005781f, +0.004720f, -0.005636f, -0.002458f, -0.016903f, -0.002182f, -0.001731f, -0.013437f, -0.011109f, - +0.031999f, -0.002659f, -0.006964f, +0.026276f, +0.008665f, -0.001056f, -0.015372f, +0.005982f, +0.013728f, -0.012226f, - +0.000852f, +0.010863f, +0.006341f, +0.005264f, +0.012765f, +0.009651f, +0.001230f, +0.000169f, -0.004759f, +0.000929f, - +0.002384f, +0.004459f, -0.011531f, -0.009044f, -0.000931f, -0.005794f, +0.012075f, -0.010092f, -0.003961f, -0.006621f, - +0.004589f, +0.003402f, +0.011721f, +0.000521f, +0.006640f, -0.004517f, +0.000127f, -0.000159f, -0.006880f, -0.005945f, - +0.008743f, +0.004776f, -0.000935f, -0.007182f, -0.005141f, +0.007473f, -0.007041f, +0.002194f, -0.000143f, -0.004845f, - -0.000337f, -0.002156f, +0.003467f, +0.001737f, -0.001743f, -0.001353f, +0.001386f, -0.002201f, +0.003474f, +0.003263f, - -0.000675f, -0.000726f, -0.001392f, -0.003288f, +0.000199f, -0.000801f, -0.000169f, +0.001653f, -0.000004f, -0.001159f, - -0.003600f, +0.000571f, +0.000659f, +0.000083f, -0.000612f, -0.001577f - }, - { - +0.006197f, -0.165415f, +0.002718f, +0.085092f, +0.024886f, -0.004878f, -0.007454f, -0.012407f, -0.001721f, -0.012592f, - -0.008015f, +0.054494f, +0.000671f, -0.002485f, +0.010648f, -0.022391f, +0.025278f, +0.005082f, +0.037713f, +0.000016f, - -0.016064f, -0.015281f, -0.003606f, -0.003958f, +0.008740f, +0.009906f, -0.004453f, -0.000692f, -0.001504f, -0.009441f, - -0.002377f, +0.024917f, +0.000180f, -0.003269f, -0.012833f, +0.009794f, -0.010830f, -0.008409f, -0.017082f, +0.003227f, - +0.000740f, -0.004092f, -0.002443f, -0.002532f, -0.008332f, -0.003007f, +0.006182f, -0.012636f, -0.008044f, -0.005170f, - -0.006134f, -0.005220f, +0.009289f, -0.005176f, -0.000384f, -0.008561f, +0.006623f, +0.003085f, +0.009579f, +0.002205f, - +0.008114f, +0.010874f, +0.004108f, -0.001319f, +0.003684f, -0.000938f, -0.003568f, +0.004956f, +0.000874f, -0.000697f, - -0.003511f, +0.001775f, +0.001331f, +0.000998f, -0.002515f, +0.006535f, +0.000528f, +0.001465f, +0.001744f, +0.002095f, - -0.000615f, +0.002703f, -0.003963f, +0.000602f, +0.003509f, -0.001162f, +0.001057f, -0.001586f, +0.004668f, -0.000515f, - +0.001438f, -0.002254f, +0.000696f, +0.000302f, +0.001971f, +0.001911f - }, - { - +0.003307f, +0.091974f, +0.005310f, +0.084834f, -0.013994f, -0.004085f, +0.003099f, +0.004515f, +0.004707f, -0.020335f, - -0.011926f, -0.005130f, +0.010310f, -0.007455f, -0.026487f, -0.011139f, -0.003482f, -0.028047f, -0.016050f, +0.008699f, - +0.007348f, -0.007920f, +0.003105f, +0.004544f, +0.003503f, -0.002642f, +0.015765f, -0.024041f, +0.003263f, +0.012005f, - -0.006514f, -0.001546f, +0.011662f, +0.002426f, +0.002620f, +0.001153f, -0.001246f, -0.008901f, -0.001026f, -0.001534f, - +0.003480f, -0.005630f, -0.008538f, +0.007345f, -0.003573f, +0.001604f, -0.004722f, +0.005932f, -0.001338f, +0.000325f, - -0.005158f, -0.004355f, +0.000972f, +0.004379f, -0.003047f, +0.005112f, +0.003120f, +0.010335f, -0.012325f, -0.000622f, - +0.007778f, +0.001362f, -0.000802f, +0.002910f, +0.007039f, +0.003039f, -0.001105f, +0.002060f, -0.000936f, +0.000270f, - -0.000558f, -0.000617f, -0.002073f, -0.005086f, -0.000156f, +0.001523f, +0.000331f, +0.003570f, -0.004207f, +0.000575f, - +0.005247f, -0.001240f, +0.000098f, -0.002549f, +0.000932f, -0.001355f, +0.002312f, +0.002913f, -0.001368f, +0.000288f, - +0.001959f, +0.003401f, -0.001795f, +0.002474f, +0.001246f, -0.000440f - }, - { - +0.003789f, -0.035437f, -0.019203f, -0.013534f, +0.005066f, +0.000669f, -0.006915f, -0.002408f, -0.000772f, +0.007220f, - -0.001209f, -0.007082f, -0.001016f, -0.003520f, +0.056862f, -0.012211f, +0.008183f, -0.044019f, +0.008243f, -0.007892f, - -0.025029f, -0.012673f, -0.002626f, -0.005314f, -0.000739f, -0.025014f, +0.010264f, +0.019172f, +0.001059f, -0.002670f, - +0.012408f, +0.005353f, -0.010267f, +0.008886f, +0.004427f, -0.007622f, +0.007833f, -0.013455f, +0.012212f, +0.013549f, - -0.000229f, -0.013135f, -0.000258f, +0.002437f, -0.004123f, +0.006607f, +0.014103f, +0.002103f, +0.005428f, +0.005525f, - -0.008513f, +0.006894f, -0.003209f, +0.008126f, +0.000191f, -0.001196f, +0.003661f, +0.002632f, +0.002375f, +0.003846f, - +0.002206f, +0.000878f, +0.000394f, +0.004622f, +0.001164f, +0.000692f, -0.002202f, -0.007933f, +0.001625f, -0.004341f, - +0.002487f, -0.001490f, -0.004351f, -0.000730f, -0.001262f, -0.001424f, -0.002033f, -0.002331f, +0.001618f, +0.004347f, - -0.001511f, -0.002787f, -0.000372f, -0.001555f, +0.001249f, -0.001753f, +0.001421f, +0.001365f, -0.000665f, +0.000936f, - +0.000149f, +0.001690f, +0.003668f, -0.000193f, -0.000008f, -0.000511f - }, - { - +0.019858f, +0.091926f, -0.005284f, +0.082758f, +0.009552f, -0.002537f, -0.000778f, -0.002917f, +0.012909f, -0.007059f, - -0.003082f, -0.010489f, -0.014375f, +0.019932f, +0.003281f, -0.028909f, +0.002277f, +0.025518f, -0.000370f, -0.015436f, - -0.010048f, +0.010356f, +0.009106f, +0.008862f, +0.005763f, -0.004186f, +0.002444f, -0.015932f, +0.004681f, +0.008729f, - +0.006489f, +0.008900f, +0.000502f, +0.002478f, +0.000183f, +0.004957f, -0.000628f, -0.016111f, +0.004548f, +0.013094f, - +0.003629f, +0.004718f, +0.001801f, -0.006680f, -0.003544f, +0.009603f, +0.002570f, +0.003251f, +0.002338f, +0.000103f, - +0.002317f, -0.010657f, -0.005100f, -0.006316f, +0.002028f, -0.002586f, +0.005801f, -0.000382f, +0.000840f, +0.001100f, - +0.005505f, -0.005072f, +0.002421f, +0.005348f, -0.004847f, -0.001428f, +0.003883f, +0.005009f, -0.000687f, +0.000640f, - -0.002056f, +0.005057f, -0.001337f, -0.000715f, -0.001719f, +0.002132f, +0.000411f, +0.004103f, +0.002668f, +0.000125f, - -0.000600f, -0.000654f, -0.002446f, -0.002167f, -0.000992f, +0.000166f, -0.000468f, +0.001744f, +0.000933f, -0.001562f, - +0.004214f, +0.000302f, +0.001868f, +0.001599f, -0.000842f, -0.000874f - }, - { - +0.000109f, -0.002787f, +0.025230f, -0.003427f, -0.002603f, -0.003585f, +0.000083f, +0.003304f, +0.000460f, +0.005438f, - -0.011956f, -0.007893f, +0.003379f, -0.017615f, -0.009242f, -0.019339f, -0.026486f, +0.026168f, +0.010055f, +0.014283f, - +0.004983f, -0.029664f, -0.004925f, -0.027827f, +0.008058f, -0.002886f, +0.013562f, +0.018320f, -0.013486f, +0.015072f, - -0.016495f, -0.006916f, -0.014437f, -0.007531f, +0.008405f, -0.015034f, -0.004415f, +0.001263f, +0.005408f, +0.005333f, - +0.004801f, -0.004123f, -0.008403f, +0.010167f, -0.007135f, -0.003539f, +0.011190f, +0.002460f, +0.003047f, -0.001752f, - -0.003545f, -0.008665f, +0.005303f, +0.001840f, +0.001868f, -0.004981f, +0.004576f, +0.004096f, -0.007649f, +0.000434f, - +0.001350f, +0.007781f, +0.000941f, -0.003946f, -0.002507f, -0.002038f, +0.003860f, -0.001888f, +0.006016f, -0.002171f, - -0.001456f, +0.003671f, -0.003960f, -0.000406f, +0.004617f, -0.000556f, +0.005394f, +0.001616f, +0.002873f, +0.000282f, - +0.006268f, +0.002382f, -0.002052f, +0.000467f, +0.002628f, +0.001044f, -0.000498f, -0.000942f, -0.002908f, +0.000364f, - -0.004350f, -0.000110f, -0.002289f, +0.001289f, -0.001284f, +0.002269f - }, - { - -0.012075f, +0.192729f, -0.023901f, +0.026001f, -0.004646f, +0.007798f, -0.033365f, -0.021575f, -0.007075f, -0.023370f, - +0.035131f, +0.001586f, -0.012406f, +0.018810f, -0.004223f, -0.006290f, +0.003913f, +0.013464f, +0.003199f, +0.008669f, - +0.000498f, -0.011095f, +0.004614f, +0.009688f, -0.024086f, +0.009082f, -0.001264f, +0.002237f, +0.003846f, -0.001399f, - -0.008761f, -0.006105f, +0.009267f, -0.004811f, +0.004487f, +0.000093f, +0.002675f, -0.010049f, +0.006671f, -0.000924f, - -0.007286f, -0.008058f, -0.001703f, +0.008989f, -0.012628f, -0.000800f, -0.006824f, -0.003042f, -0.002315f, -0.003174f, - +0.000963f, +0.006328f, -0.003256f, +0.009399f, +0.009720f, -0.001889f, +0.008336f, +0.000987f, +0.002650f, +0.003297f, - +0.003253f, +0.000294f, -0.001697f, +0.001679f, -0.001338f, -0.005180f, -0.000451f, -0.002366f, -0.002421f, -0.005635f, - +0.005721f, +0.002655f, -0.000721f, +0.001454f, +0.002343f, +0.001357f, -0.000806f, -0.004363f, -0.000136f, +0.000720f, - +0.002858f, -0.000652f, +0.000542f, -0.000836f, -0.000268f, -0.000411f, -0.003076f, -0.001532f, +0.001641f, +0.003897f, - +0.001984f, -0.004935f, +0.000879f, -0.000486f, +0.001885f, -0.002308f - }, - { - -0.000265f, +0.039532f, -0.011796f, +0.010556f, +0.003545f, -0.003101f, +0.003601f, -0.000330f, +0.000520f, -0.000812f, - +0.001486f, -0.006583f, -0.018269f, -0.004382f, +0.032286f, +0.023785f, +0.029827f, +0.012079f, +0.004676f, +0.027088f, - +0.005794f, +0.000686f, +0.012758f, -0.001932f, +0.011212f, +0.018291f, +0.013470f, +0.000099f, +0.006168f, -0.010356f, - +0.008492f, +0.028967f, -0.008957f, -0.017425f, -0.005007f, -0.030775f, +0.005451f, +0.010819f, -0.003174f, +0.003459f, - +0.014413f, +0.011624f, -0.011293f, +0.004579f, -0.007122f, +0.007124f, -0.009636f, -0.003912f, +0.000820f, +0.010331f, - +0.004382f, -0.001024f, -0.009366f, +0.004989f, -0.004629f, -0.001661f, -0.000370f, -0.001108f, +0.008373f, -0.002829f, - -0.000183f, +0.002740f, -0.004814f, -0.006145f, -0.006070f, -0.009796f, -0.004581f, -0.000752f, -0.003268f, +0.000701f, - -0.002682f, -0.003321f, +0.006676f, -0.002979f, +0.002870f, +0.001967f, -0.000426f, -0.002695f, +0.001046f, -0.002416f, - -0.000191f, +0.001817f, -0.001853f, -0.000013f, +0.000297f, +0.001190f, -0.001356f, +0.003648f, +0.002210f, -0.001912f, - -0.000423f, +0.001554f, -0.002173f, -0.000330f, +0.000575f, +0.001359f - }, - { - +0.023857f, -0.180512f, +0.000256f, -0.007051f, -0.000617f, -0.017720f, -0.019749f, +0.051436f, -0.011394f, -0.039261f, - -0.002179f, +0.000279f, +0.010477f, +0.009571f, -0.003508f, +0.005095f, +0.004465f, -0.011720f, -0.021614f, -0.008442f, - +0.005973f, -0.008118f, +0.001638f, +0.029966f, -0.012736f, +0.001097f, -0.004343f, -0.001022f, +0.015524f, -0.008603f, - +0.010884f, -0.002403f, -0.010258f, -0.003245f, +0.008104f, -0.003299f, -0.002228f, -0.004221f, +0.003214f, -0.001816f, - +0.008003f, -0.001289f, -0.003672f, +0.006911f, +0.002215f, -0.005583f, +0.001850f, +0.001220f, +0.009943f, +0.001541f, - +0.005325f, -0.011947f, +0.002017f, +0.006056f, -0.000741f, -0.012998f, +0.006635f, +0.005812f, -0.008424f, +0.006699f, - -0.013674f, +0.009469f, -0.001270f, +0.004617f, -0.002210f, +0.014024f, +0.000210f, -0.000289f, -0.006225f, +0.000793f, - +0.001411f, +0.004865f, +0.001951f, +0.000602f, -0.004403f, +0.001820f, +0.000433f, -0.000761f, -0.000393f, -0.000268f, - +0.006433f, +0.000297f, -0.000510f, +0.003577f, +0.004039f, +0.004676f, +0.003916f, -0.001480f, +0.001036f, -0.002755f, - +0.000705f, +0.002082f, -0.000226f, +0.000542f, +0.001476f, -0.000402f - }, - { - -0.001917f, -0.068708f, +0.040468f, +0.003785f, -0.000774f, +0.044150f, -0.019992f, +0.000948f, +0.021056f, -0.002084f, - +0.008594f, +0.002914f, -0.037995f, -0.003190f, +0.016850f, +0.006472f, +0.008886f, +0.024521f, +0.011492f, +0.005631f, - -0.013594f, +0.003359f, +0.012222f, +0.014012f, +0.018104f, -0.008760f, -0.011398f, +0.001807f, +0.006258f, -0.009670f, - -0.012935f, -0.000140f, -0.004488f, -0.009087f, +0.020937f, -0.002432f, +0.011314f, -0.000942f, -0.008743f, -0.009447f, - +0.001926f, -0.006111f, -0.007633f, +0.002260f, +0.003407f, -0.002878f, +0.004892f, -0.012475f, +0.004789f, +0.010283f, - +0.002042f, -0.005016f, +0.001511f, +0.002049f, +0.001697f, -0.008166f, +0.005742f, +0.000360f, -0.003351f, +0.001366f, - +0.000687f, +0.009339f, +0.004099f, +0.004330f, +0.004824f, -0.003457f, -0.003627f, +0.006056f, -0.000121f, -0.001152f, - +0.001187f, +0.001362f, -0.000797f, -0.003367f, -0.000719f, -0.000997f, -0.000773f, +0.000313f, -0.004088f, +0.004140f, - +0.001524f, -0.000450f, -0.000040f, -0.003010f, -0.000235f, -0.000549f, -0.003799f, -0.003270f, +0.000732f, +0.001370f, - -0.002255f, +0.001367f, -0.006053f, -0.000135f, -0.000784f, -0.000350f - }, - { - +0.038038f, -0.067275f, +0.051336f, -0.006194f, -0.033705f, +0.017388f, -0.032276f, -0.010037f, +0.000148f, +0.045453f, - -0.022368f, +0.003181f, -0.015614f, +0.013562f, -0.018059f, +0.010653f, +0.018542f, -0.030003f, +0.000670f, -0.013268f, - +0.024996f, -0.006258f, +0.019409f, +0.006954f, +0.001548f, +0.007442f, +0.008393f, -0.006646f, -0.001693f, +0.023356f, - -0.019733f, -0.003479f, +0.008659f, +0.003415f, -0.017589f, -0.003705f, -0.014364f, -0.001107f, +0.001614f, -0.009960f, - +0.006705f, +0.012908f, -0.001562f, -0.002870f, -0.002384f, -0.006597f, -0.013329f, -0.000572f, +0.012533f, +0.001885f, - +0.010778f, +0.001273f, -0.016598f, +0.007118f, -0.002158f, +0.000013f, +0.000833f, +0.006420f, -0.003219f, +0.002590f, - +0.001973f, -0.001210f, -0.009562f, +0.000871f, +0.007102f, +0.000711f, -0.011504f, -0.002109f, +0.003693f, +0.005579f, - +0.002803f, -0.002850f, +0.000587f, +0.001846f, -0.004101f, -0.001678f, -0.000375f, -0.001395f, -0.003619f, +0.002510f, - -0.002687f, -0.000307f, +0.005036f, -0.004068f, +0.000937f, +0.005238f, -0.004839f, -0.003296f, +0.001980f, +0.000379f, - +0.001717f, -0.000740f, +0.000772f, -0.003397f, -0.002599f, +0.000360f - }, - { - +0.003528f, -0.050568f, +0.019947f, -0.012200f, -0.005321f, -0.000349f, -0.017194f, -0.002359f, +0.001321f, +0.014310f, - +0.007980f, -0.002926f, -0.016663f, +0.026225f, -0.020883f, +0.012060f, -0.010325f, -0.016600f, -0.010244f, +0.019686f, - +0.002480f, +0.000860f, -0.012499f, +0.019190f, +0.012112f, +0.017277f, +0.010981f, -0.013304f, +0.018391f, +0.011562f, - -0.013036f, +0.010915f, -0.001502f, +0.005236f, +0.001283f, +0.007319f, +0.007134f, +0.009545f, -0.018123f, -0.000899f, - +0.001102f, +0.001349f, +0.001702f, +0.004662f, +0.002278f, -0.005797f, -0.007353f, +0.003054f, -0.013967f, -0.004637f, - -0.001672f, -0.000086f, +0.002187f, +0.002024f, +0.006128f, +0.001534f, +0.003833f, -0.002967f, -0.001860f, -0.002699f, - -0.000535f, -0.001635f, -0.005545f, +0.001465f, -0.000493f, -0.007513f, +0.002455f, +0.002466f, +0.003332f, -0.005722f, - -0.000424f, +0.000386f, +0.001730f, -0.004167f, +0.001051f, +0.002397f, +0.000243f, -0.000461f, +0.000933f, +0.003881f, - +0.000119f, -0.002221f, +0.003136f, +0.000697f, -0.005555f, -0.002414f, -0.000258f, -0.003060f, -0.000085f, +0.000081f, - -0.004142f, +0.001024f, -0.001024f, +0.001342f, +0.002303f, -0.002600f - }, - { - +0.028306f, +0.013410f, -0.036467f, -0.008319f, +0.003617f, +0.014364f, -0.017728f, +0.002467f, -0.024988f, +0.012224f, - -0.001979f, +0.011134f, +0.022657f, -0.010126f, +0.024401f, -0.010342f, -0.018144f, -0.013122f, -0.004863f, -0.004053f, - -0.013385f, -0.012939f, -0.001323f, +0.014760f, -0.004124f, -0.008877f, +0.012700f, +0.011135f, +0.016208f, +0.014697f, - +0.000529f, -0.012094f, -0.014772f, +0.011717f, +0.023587f, -0.021398f, -0.010980f, +0.009519f, +0.004818f, -0.005373f, - +0.011356f, +0.003029f, +0.004574f, +0.001435f, +0.008686f, +0.001948f, -0.009390f, -0.015808f, +0.008467f, +0.001362f, - -0.000972f, -0.017454f, +0.005226f, +0.003403f, +0.005760f, +0.008533f, -0.006279f, +0.005042f, -0.007032f, +0.005808f, - -0.001360f, -0.000852f, +0.000732f, -0.000751f, +0.001596f, -0.004574f, -0.003915f, -0.003725f, +0.002811f, -0.002870f, - -0.004284f, -0.004885f, +0.001225f, +0.003766f, -0.002185f, -0.002742f, -0.001212f, +0.000128f, -0.001557f, -0.001107f, - +0.000895f, -0.003693f, -0.002333f, -0.000183f, +0.004300f, +0.003026f, -0.001576f, +0.001217f, -0.000473f, +0.002275f, - -0.002210f, -0.000627f, -0.002175f, -0.001232f, +0.000236f, +0.001091f - }, - { - -0.006488f, +0.022740f, -0.011415f, -0.020696f, +0.015480f, -0.002989f, -0.005051f, +0.003084f, -0.005158f, +0.006667f, - -0.011805f, +0.001328f, +0.000553f, +0.023417f, -0.093959f, +0.025472f, -0.011846f, +0.016372f, -0.040513f, -0.042545f, - -0.015631f, -0.019237f, -0.005051f, +0.000013f, +0.006025f, +0.006128f, -0.024206f, +0.013118f, +0.009600f, +0.022241f, - -0.010659f, +0.016112f, +0.009911f, +0.007385f, -0.007568f, -0.014220f, +0.027811f, +0.008324f, -0.007397f, -0.001148f, - -0.010347f, -0.002848f, +0.001598f, -0.003155f, +0.003260f, +0.003706f, +0.000150f, +0.017229f, +0.000183f, -0.003196f, - -0.016902f, -0.006696f, +0.005595f, +0.002864f, -0.000676f, -0.007327f, +0.003432f, +0.001445f, +0.001510f, +0.004755f, - -0.001156f, -0.009162f, +0.001593f, +0.009489f, -0.000205f, +0.003962f, -0.004737f, +0.000656f, -0.004796f, +0.001674f, - +0.003265f, -0.000854f, +0.005685f, +0.001415f, -0.003385f, -0.002631f, -0.000386f, +0.001789f, -0.000629f, -0.001714f, - +0.001629f, -0.004177f, -0.003444f, +0.000228f, -0.000692f, +0.000057f, -0.003676f, +0.004628f, -0.001492f, +0.000228f, - -0.000573f, -0.000791f, -0.000214f, +0.003196f, -0.002381f, -0.001146f - } - }, - { - { - +0.015788f, +0.362477f, +0.033647f, +0.125250f, +0.017881f, +0.016180f, +0.001045f, +0.005997f, -0.014545f, +0.012537f, - -0.012789f, +0.030971f, +0.010732f, +0.010172f, -0.004875f, +0.006045f, +0.011707f, +0.008767f, -0.009154f, -0.007478f, - +0.008401f, +0.002425f, +0.018254f, -0.000391f, +0.017201f, -0.011760f, +0.006390f, +0.016664f, +0.013061f, -0.020738f, - -0.016699f, -0.003474f, -0.010001f, +0.011949f, -0.004507f, +0.004162f, -0.017997f, -0.003002f, -0.002556f, -0.004363f, - +0.013470f, +0.012003f, +0.005157f, -0.009290f, -0.008675f, +0.010960f, +0.001566f, +0.001177f, +0.005210f, +0.000910f, - +0.001217f, +0.000373f, +0.002918f, -0.004318f, +0.006066f, +0.005351f, +0.002930f, +0.004472f, +0.001240f, +0.001172f, - -0.012413f, +0.003706f, -0.000794f, +0.000843f, -0.001280f, -0.002985f, +0.002193f, -0.001528f, -0.001391f, -0.002786f, - -0.005978f, -0.005303f, -0.002510f, -0.002089f, -0.003943f, +0.000805f, -0.006156f, +0.000531f, -0.000805f, +0.000346f, - -0.001525f, +0.000884f, -0.000566f, +0.001214f, -0.000863f, +0.001651f, +0.000266f, +0.000209f, +0.000105f, -0.000123f, - -0.000258f, -0.000229f, +0.001372f, -0.000037f, -0.000789f, +0.001763f - }, - { - +0.002643f, +0.062929f, -0.019797f, -0.041152f, +0.037950f, +0.002824f, -0.006194f, +0.009986f, -0.000916f, -0.007269f, - -0.000531f, +0.003651f, +0.008367f, +0.007140f, +0.000587f, +0.005287f, +0.024009f, -0.007669f, -0.006982f, -0.000447f, - +0.008338f, -0.012895f, +0.011504f, +0.028998f, +0.007893f, +0.001099f, -0.015766f, -0.006728f, +0.003068f, +0.001468f, - +0.014143f, +0.008405f, -0.008205f, +0.004460f, +0.021210f, -0.001656f, -0.010949f, -0.003229f, -0.006679f, +0.006038f, - +0.000391f, -0.003012f, -0.007873f, -0.004454f, -0.003049f, -0.008713f, +0.014735f, -0.003928f, +0.002135f, -0.011164f, - -0.000876f, -0.001071f, -0.001355f, -0.009998f, +0.008347f, -0.006680f, -0.003496f, +0.000222f, -0.002499f, -0.010356f, - -0.001395f, +0.001653f, +0.001388f, -0.002135f, -0.000208f, +0.009092f, -0.005528f, +0.003240f, +0.005784f, -0.002832f, - -0.004297f, -0.004756f, +0.003095f, -0.000513f, -0.004776f, -0.000770f, +0.001795f, -0.005437f, -0.000640f, +0.000849f, - -0.001534f, -0.000786f, +0.000635f, -0.001110f, +0.001493f, -0.001488f, +0.001027f, +0.005935f, -0.001469f, -0.002309f, - -0.001870f, +0.000219f, -0.000227f, -0.002006f, -0.001298f, -0.000812f - }, - { - -0.009370f, -0.149478f, +0.029580f, +0.005053f, -0.031783f, +0.000764f, +0.005599f, -0.003482f, +0.010977f, -0.001488f, - -0.003597f, +0.061107f, -0.023270f, -0.016975f, +0.007054f, -0.029208f, +0.021053f, -0.002311f, +0.024663f, -0.005724f, - +0.000521f, -0.002674f, -0.003166f, -0.013705f, -0.001959f, +0.010725f, +0.003336f, +0.010916f, +0.004822f, -0.002670f, - -0.003198f, +0.006359f, -0.003468f, -0.009318f, -0.004115f, +0.017528f, -0.016077f, -0.001128f, -0.015018f, +0.004417f, - +0.006845f, -0.004447f, -0.001782f, +0.005332f, -0.005617f, -0.002385f, +0.010193f, -0.000847f, +0.006911f, +0.006732f, - +0.003131f, -0.004557f, +0.009294f, -0.008235f, -0.000032f, -0.007574f, +0.005156f, -0.000570f, +0.005652f, +0.001061f, - +0.006178f, +0.002956f, -0.003756f, +0.003936f, +0.009819f, -0.001421f, -0.005742f, +0.004283f, +0.001722f, +0.001292f, - -0.002658f, -0.002176f, -0.001853f, +0.004417f, +0.000305f, +0.003821f, -0.004175f, -0.001381f, -0.000841f, -0.001062f, - -0.002489f, +0.002844f, +0.000627f, +0.002576f, +0.002861f, -0.000472f, +0.000844f, -0.002831f, +0.001553f, -0.004171f, - +0.000881f, -0.000878f, +0.000065f, +0.000354f, +0.001483f, +0.002051f - }, - { - -0.019603f, +0.046388f, -0.016120f, +0.099811f, +0.007511f, -0.005312f, +0.002207f, +0.004687f, +0.013456f, +0.000941f, - -0.027718f, -0.019717f, +0.014011f, -0.003833f, -0.011282f, +0.025359f, +0.022935f, +0.003020f, +0.022965f, +0.015184f, - +0.006282f, +0.009028f, +0.004023f, +0.003474f, +0.017437f, -0.006042f, -0.004570f, -0.024191f, -0.001516f, +0.000607f, - -0.003311f, +0.005048f, +0.001291f, -0.002324f, +0.015572f, +0.009521f, +0.003614f, +0.003296f, +0.015481f, +0.009278f, - +0.009728f, +0.001449f, -0.007151f, +0.002132f, -0.003088f, +0.000640f, -0.013886f, -0.003164f, -0.004725f, +0.001211f, - -0.004394f, -0.000363f, +0.000246f, +0.006634f, -0.000428f, +0.003589f, +0.001632f, +0.006495f, -0.012906f, -0.001892f, - +0.000948f, -0.001994f, -0.006097f, -0.003529f, +0.001270f, +0.004732f, -0.005055f, +0.000062f, +0.000250f, -0.000120f, - -0.002703f, +0.001329f, +0.000994f, -0.004958f, +0.001383f, +0.000487f, -0.002802f, +0.003568f, -0.001857f, +0.001964f, - +0.000337f, -0.004264f, +0.001783f, -0.002558f, -0.000195f, -0.002721f, -0.000679f, +0.000856f, -0.001535f, -0.001766f, - +0.000081f, +0.003185f, -0.002580f, -0.002261f, -0.002599f, -0.001382f - }, - { - -0.003641f, -0.005784f, +0.016461f, -0.016614f, +0.001901f, +0.001870f, -0.003531f, +0.004507f, -0.000669f, +0.004173f, - +0.003935f, +0.009435f, +0.001751f, -0.011363f, +0.085084f, -0.004414f, +0.000636f, -0.059453f, -0.014961f, -0.000999f, - -0.008466f, -0.002509f, +0.002563f, +0.004196f, +0.007894f, -0.012201f, +0.027518f, +0.017545f, +0.013210f, +0.020577f, - +0.013451f, -0.003514f, -0.008650f, +0.002787f, -0.009457f, -0.017786f, +0.007915f, -0.013340f, +0.006278f, -0.001210f, - -0.006138f, -0.012162f, +0.000285f, +0.003664f, -0.009574f, -0.001457f, +0.010472f, -0.002847f, -0.003777f, -0.001124f, - -0.005473f, +0.012584f, -0.001864f, +0.004481f, -0.001290f, -0.000574f, +0.000798f, +0.007218f, +0.009241f, +0.003753f, - +0.000889f, +0.002803f, -0.001397f, -0.002240f, -0.004627f, +0.000722f, -0.002446f, -0.008184f, +0.000886f, -0.003347f, - +0.006489f, +0.005254f, -0.002379f, -0.001564f, +0.000450f, +0.000547f, +0.001303f, -0.002555f, -0.002817f, -0.001013f, - -0.003162f, -0.002667f, +0.000595f, -0.000167f, +0.002915f, -0.002163f, +0.000541f, +0.001779f, -0.000668f, +0.001119f, - +0.001388f, +0.000431f, +0.000865f, -0.000416f, +0.001746f, -0.000832f - }, - { - -0.041554f, +0.018631f, +0.016345f, +0.089053f, -0.002506f, +0.000403f, +0.019938f, +0.016218f, +0.032021f, -0.010967f, - -0.005318f, -0.001056f, -0.017984f, +0.000679f, +0.005731f, -0.007857f, +0.004730f, +0.018059f, -0.004415f, -0.013813f, - -0.007463f, +0.000693f, -0.006153f, -0.002955f, +0.003423f, +0.006060f, +0.003301f, -0.011530f, +0.019281f, +0.013509f, - +0.004713f, +0.008855f, +0.000144f, -0.001560f, -0.007709f, +0.001748f, +0.012463f, -0.007447f, -0.001801f, +0.001763f, - -0.007514f, -0.001526f, +0.004466f, +0.000196f, +0.005250f, +0.016162f, +0.000656f, +0.005379f, +0.008163f, -0.004754f, - +0.000063f, -0.000608f, +0.000527f, -0.008512f, -0.002040f, -0.000531f, +0.007657f, +0.001081f, -0.000919f, +0.000517f, - +0.002901f, -0.007666f, -0.001685f, -0.000422f, -0.003174f, -0.002776f, -0.005826f, -0.000552f, -0.003140f, -0.000362f, - -0.002686f, +0.002863f, -0.000519f, +0.002046f, -0.000334f, +0.002247f, -0.002850f, +0.000683f, +0.002034f, +0.001154f, - +0.001053f, +0.001723f, +0.000124f, -0.000771f, -0.002150f, -0.000490f, -0.001023f, +0.000262f, +0.001964f, -0.000137f, - +0.002064f, -0.001439f, +0.001401f, +0.000660f, -0.000919f, -0.000942f - }, - { - -0.000665f, -0.033220f, +0.004995f, -0.000343f, +0.000824f, -0.005825f, +0.001932f, +0.010091f, +0.007603f, +0.004018f, - -0.012219f, +0.003882f, +0.011526f, -0.001234f, +0.010898f, -0.014338f, -0.030235f, +0.007512f, -0.012059f, -0.002315f, - +0.011281f, -0.027528f, -0.017940f, -0.016482f, +0.037514f, +0.005215f, +0.003308f, +0.015405f, -0.000523f, +0.015246f, - -0.015064f, +0.004602f, +0.002206f, +0.005482f, +0.013720f, -0.001163f, -0.002232f, +0.003672f, +0.008480f, +0.002966f, - -0.004844f, -0.004694f, -0.008751f, +0.008911f, -0.003663f, -0.003301f, +0.001690f, +0.002862f, +0.004721f, +0.001937f, - +0.008226f, -0.008592f, +0.003709f, +0.009044f, +0.007057f, -0.004488f, -0.001290f, +0.004353f, -0.004144f, +0.002130f, - +0.002667f, +0.007407f, +0.002674f, +0.003820f, +0.004512f, +0.000719f, +0.003021f, -0.002314f, +0.008706f, -0.000741f, - -0.000881f, -0.000241f, -0.007904f, -0.003633f, +0.001126f, -0.003022f, +0.001991f, -0.002279f, +0.000899f, +0.000025f, - +0.002132f, -0.000922f, -0.002087f, +0.000720f, -0.000608f, -0.000380f, -0.000123f, +0.001180f, +0.000721f, +0.001017f, - -0.002891f, +0.002776f, -0.002727f, +0.001400f, -0.001051f, +0.000857f - }, - { - -0.021237f, +0.189472f, +0.009839f, -0.001508f, -0.037097f, +0.018405f, -0.021426f, -0.015395f, +0.001836f, -0.013287f, - +0.052592f, +0.015325f, -0.007563f, +0.021238f, -0.002190f, +0.013929f, +0.015741f, +0.013041f, +0.003897f, +0.003595f, - -0.005530f, -0.026733f, -0.003575f, +0.022183f, -0.007370f, +0.013992f, +0.004695f, +0.003070f, +0.002543f, +0.003974f, - -0.006770f, -0.008230f, -0.000629f, -0.006382f, +0.012092f, -0.007338f, +0.004708f, -0.009804f, +0.005314f, +0.005157f, - +0.001915f, +0.001862f, -0.002040f, +0.003641f, -0.010287f, +0.000691f, -0.001495f, +0.000494f, -0.012753f, -0.002441f, - +0.004879f, +0.007503f, -0.007317f, -0.001288f, +0.006067f, -0.003744f, +0.004802f, -0.001646f, +0.000569f, +0.006245f, - +0.010997f, +0.004300f, -0.007015f, +0.002621f, +0.003078f, -0.004301f, -0.003017f, -0.002702f, -0.001545f, -0.005939f, - +0.000881f, -0.000514f, -0.001065f, -0.002669f, +0.000062f, +0.003912f, +0.001183f, -0.006348f, +0.000277f, +0.001457f, - +0.001543f, -0.000986f, +0.002947f, +0.001191f, -0.001431f, -0.003074f, -0.003932f, +0.000681f, +0.003182f, +0.000538f, - -0.000288f, -0.002175f, +0.004203f, +0.002131f, +0.002418f, -0.003067f - }, - { - -0.003498f, +0.015264f, -0.019916f, +0.012872f, +0.000284f, -0.005275f, +0.004532f, +0.007028f, +0.008458f, -0.005796f, - +0.009890f, +0.003841f, -0.014300f, -0.020864f, -0.011557f, -0.011913f, -0.003861f, +0.007796f, +0.013178f, +0.010769f, - -0.000437f, +0.013623f, -0.000399f, -0.015496f, +0.009233f, -0.008492f, -0.008324f, -0.003213f, +0.001300f, -0.032070f, - +0.008609f, +0.004362f, -0.031975f, -0.000599f, +0.019182f, -0.016592f, +0.005920f, +0.005591f, +0.003670f, +0.004128f, - +0.001397f, +0.002906f, -0.018359f, +0.002151f, -0.007344f, +0.003364f, -0.008559f, -0.002398f, +0.001209f, +0.009287f, - +0.005392f, +0.003287f, -0.008119f, +0.006062f, -0.003000f, +0.004786f, +0.005598f, -0.001965f, +0.004891f, -0.004947f, - +0.004173f, +0.001545f, -0.005020f, -0.001823f, +0.001297f, -0.002685f, -0.001607f, +0.001526f, -0.004900f, +0.000558f, - +0.000491f, -0.001829f, +0.006466f, -0.002998f, +0.006458f, +0.005609f, +0.002603f, +0.001529f, +0.003005f, +0.001125f, - +0.000410f, +0.000699f, -0.001184f, -0.001252f, -0.000078f, +0.000427f, -0.004338f, +0.001130f, +0.001160f, -0.001561f, - -0.000439f, +0.000339f, -0.000544f, +0.002320f, +0.002825f, +0.000911f - }, - { - -0.022271f, -0.227167f, +0.022093f, -0.002490f, -0.035133f, +0.006775f, +0.041374f, +0.070814f, -0.013203f, -0.066874f, - +0.004643f, +0.014847f, +0.006007f, +0.019511f, -0.006957f, -0.002036f, -0.004224f, -0.017389f, -0.016500f, -0.001581f, - +0.012662f, +0.005984f, +0.010292f, +0.026930f, -0.014424f, -0.017920f, -0.011844f, -0.016513f, -0.000712f, -0.015405f, - +0.004120f, -0.009363f, -0.008534f, -0.012963f, -0.002917f, -0.012651f, -0.002921f, -0.006134f, -0.000161f, -0.003998f, - -0.005826f, -0.013243f, -0.007333f, +0.006830f, +0.006715f, -0.004539f, +0.003845f, +0.003790f, +0.003006f, -0.014263f, - +0.002049f, -0.008284f, +0.000993f, -0.001161f, +0.002471f, -0.000755f, +0.012687f, +0.000727f, -0.007535f, +0.014558f, - -0.009533f, +0.003299f, -0.003570f, -0.000074f, -0.004309f, +0.015446f, +0.002800f, +0.005412f, -0.002937f, +0.004622f, - +0.003835f, +0.006106f, +0.002906f, -0.004685f, -0.009329f, -0.000706f, -0.000044f, -0.002350f, -0.002735f, -0.002826f, - +0.004024f, +0.003202f, -0.001858f, -0.004144f, -0.000142f, +0.000780f, +0.000257f, +0.000151f, -0.000807f, -0.004811f, - +0.000527f, -0.000122f, -0.000671f, +0.000455f, +0.001426f, -0.001722f - }, - { - +0.001579f, -0.086316f, +0.016375f, +0.003078f, -0.012702f, +0.022367f, -0.035211f, +0.005767f, +0.019461f, -0.011175f, - +0.004602f, +0.022319f, -0.019470f, -0.017268f, +0.007473f, -0.002310f, -0.003830f, +0.020017f, +0.006879f, +0.022534f, - +0.009412f, +0.005607f, -0.001046f, -0.006356f, +0.008032f, -0.005021f, +0.000669f, +0.021516f, +0.011152f, -0.009263f, - +0.008718f, -0.003343f, +0.004207f, +0.003872f, +0.021145f, -0.007482f, +0.003388f, +0.006917f, +0.009119f, +0.002849f, - +0.008262f, +0.005696f, +0.001396f, -0.005510f, -0.007171f, -0.012222f, +0.003498f, -0.004378f, +0.009273f, -0.002962f, - -0.009419f, -0.007897f, +0.002372f, +0.000052f, +0.000561f, -0.000954f, +0.007269f, -0.005746f, -0.003650f, +0.000275f, - -0.004995f, +0.000785f, -0.001508f, -0.000657f, -0.001745f, -0.005000f, -0.006104f, +0.001150f, -0.005568f, -0.002971f, - +0.006101f, +0.002415f, -0.001097f, -0.002827f, -0.004567f, -0.001298f, +0.005660f, +0.004282f, -0.004526f, +0.003444f, - -0.000968f, -0.003514f, +0.000278f, -0.000439f, +0.000512f, +0.000645f, +0.000912f, +0.001604f, +0.004663f, +0.003431f, - -0.001697f, +0.002127f, -0.004592f, +0.001397f, -0.001195f, +0.000490f - }, - { - -0.023096f, -0.146563f, +0.063091f, +0.001790f, -0.026357f, +0.073703f, +0.008709f, -0.003218f, +0.000538f, +0.025387f, - -0.007609f, +0.022346f, +0.006749f, +0.021212f, -0.025727f, +0.015181f, +0.021513f, -0.030564f, +0.024620f, -0.009756f, - +0.016774f, -0.009139f, +0.009533f, -0.007774f, -0.020144f, +0.007128f, +0.016423f, +0.005791f, +0.000463f, +0.017129f, - -0.012257f, -0.008389f, +0.002242f, +0.009580f, -0.010940f, +0.000836f, +0.001079f, +0.008290f, -0.010207f, -0.014556f, - +0.004774f, -0.001216f, -0.009410f, -0.002309f, +0.003459f, -0.002323f, -0.009805f, -0.008846f, +0.001174f, -0.002718f, - +0.009883f, +0.004534f, -0.018236f, +0.005434f, +0.003565f, +0.007540f, +0.000887f, +0.003951f, -0.000819f, +0.001845f, - +0.006976f, +0.008140f, -0.001932f, +0.002125f, +0.003884f, +0.001586f, -0.002254f, +0.004067f, +0.003897f, +0.001441f, - +0.001960f, -0.006183f, -0.003775f, +0.001944f, -0.002520f, -0.001375f, +0.003388f, +0.003776f, -0.002846f, +0.002289f, - -0.000869f, +0.002327f, +0.006236f, -0.002659f, +0.000073f, +0.003823f, -0.001964f, +0.000926f, +0.001115f, -0.001041f, - +0.002268f, -0.002214f, +0.000788f, -0.000940f, -0.002525f, -0.002843f - }, - { - -0.003534f, -0.050458f, +0.023287f, -0.007620f, +0.008842f, +0.007911f, -0.019019f, -0.011786f, -0.008942f, +0.013440f, - +0.007920f, -0.013876f, -0.038290f, +0.000769f, -0.035745f, +0.002042f, -0.007168f, -0.016541f, -0.035389f, +0.019008f, - +0.019125f, +0.005892f, -0.052891f, +0.006157f, +0.019071f, +0.024503f, +0.022360f, -0.017099f, +0.016959f, +0.010693f, - -0.013758f, +0.010477f, -0.017472f, -0.004230f, -0.003990f, +0.011564f, +0.012596f, +0.006080f, -0.008400f, +0.000453f, - +0.000822f, -0.005288f, -0.006471f, -0.004108f, -0.002699f, -0.006992f, -0.009371f, +0.001108f, -0.012385f, +0.000807f, - -0.000629f, -0.004528f, -0.010901f, -0.006428f, +0.004335f, -0.003780f, -0.000635f, +0.005743f, +0.002571f, -0.001102f, - +0.005414f, +0.006815f, -0.001318f, +0.002815f, +0.005811f, -0.006619f, -0.004182f, -0.000518f, -0.004911f, -0.007419f, - +0.005027f, +0.001443f, +0.004786f, -0.002839f, -0.002121f, -0.002224f, -0.004205f, -0.000327f, +0.000215f, -0.002215f, - +0.002143f, +0.000111f, +0.000530f, -0.003980f, -0.007171f, -0.004369f, -0.003252f, -0.004942f, -0.001773f, -0.001133f, - -0.004797f, -0.000644f, -0.000686f, +0.003577f, +0.001638f, -0.002419f - }, - { - -0.034670f, -0.051502f, +0.001925f, +0.025550f, +0.022154f, +0.033281f, +0.004676f, +0.015064f, -0.014768f, +0.016221f, - +0.018187f, +0.003006f, +0.013222f, +0.020668f, +0.083602f, +0.023443f, -0.003919f, +0.008500f, +0.024902f, +0.012746f, - +0.020091f, -0.003076f, -0.023919f, -0.006743f, -0.004203f, -0.002684f, -0.000981f, -0.013039f, -0.002779f, +0.018821f, - -0.009489f, -0.025578f, -0.003158f, +0.016799f, +0.023877f, -0.015447f, -0.005792f, +0.002325f, +0.009619f, +0.002686f, - +0.006782f, -0.011538f, -0.010209f, -0.004340f, +0.011623f, +0.003711f, +0.000514f, -0.007125f, +0.009826f, -0.008048f, - +0.003705f, -0.011133f, -0.003914f, +0.001743f, +0.002362f, +0.008987f, -0.008878f, -0.003840f, -0.007609f, +0.004384f, - -0.002787f, +0.001762f, +0.004565f, +0.005716f, +0.006801f, +0.001843f, +0.003580f, +0.001011f, +0.004601f, -0.002008f, - -0.003792f, -0.009238f, -0.000525f, +0.004149f, -0.002167f, -0.002459f, -0.002643f, -0.000070f, +0.001555f, +0.003127f, - +0.002999f, -0.002371f, -0.000757f, -0.005149f, +0.000473f, +0.001321f, -0.002622f, -0.000918f, -0.000926f, +0.003309f, - -0.003004f, +0.000347f, +0.000334f, +0.000646f, +0.001566f, +0.001635f - }, - { - +0.008771f, +0.044326f, -0.005755f, -0.022582f, +0.017829f, +0.014536f, +0.001556f, -0.005426f, -0.007282f, +0.011685f, - -0.013638f, +0.010240f, +0.010744f, +0.025981f, -0.078981f, +0.002966f, -0.034083f, +0.015655f, -0.000801f, +0.002844f, - +0.018451f, +0.003084f, -0.000927f, +0.001394f, -0.002059f, +0.014711f, +0.003069f, +0.021660f, -0.014215f, -0.012159f, - -0.026347f, +0.006099f, +0.010175f, +0.002838f, -0.003225f, -0.008008f, +0.010099f, -0.005917f, -0.014361f, -0.005720f, - -0.024105f, -0.012706f, +0.000362f, +0.001248f, +0.000871f, -0.004943f, +0.003313f, +0.007548f, -0.009672f, -0.000397f, - -0.014058f, +0.001481f, +0.005163f, +0.001743f, +0.003649f, -0.008261f, -0.000360f, -0.002282f, -0.003871f, -0.004124f, - -0.002753f, -0.003657f, +0.002484f, +0.009657f, -0.003651f, -0.002887f, -0.001413f, +0.001494f, -0.009892f, +0.000219f, - +0.003040f, -0.001460f, +0.000950f, +0.000295f, -0.002264f, -0.004407f, -0.002780f, +0.000755f, -0.001513f, -0.001763f, - +0.003163f, +0.002106f, +0.001733f, -0.000535f, -0.002639f, +0.003276f, -0.000505f, +0.004291f, -0.003926f, -0.002201f, - -0.000084f, -0.000543f, -0.001727f, +0.001736f, -0.001717f, -0.001887f - } - }, - { - { - -0.022886f, +0.452799f, +0.041493f, +0.133435f, -0.004227f, +0.010638f, +0.016374f, -0.005034f, -0.022903f, +0.021684f, - +0.008448f, +0.028219f, +0.006425f, +0.004027f, +0.004384f, +0.000523f, +0.020492f, -0.006947f, +0.016331f, -0.012103f, - +0.000877f, +0.000711f, +0.021154f, -0.006496f, +0.007308f, -0.013135f, +0.009427f, +0.014658f, +0.015375f, -0.024662f, - -0.009075f, -0.001636f, -0.007549f, +0.009080f, +0.002303f, -0.005833f, -0.011447f, -0.009430f, +0.005967f, -0.010283f, - +0.007982f, +0.024313f, -0.004489f, -0.016944f, -0.003382f, +0.007795f, -0.002497f, +0.001995f, +0.012647f, -0.005027f, - +0.002268f, +0.006865f, -0.007917f, -0.006817f, +0.009282f, +0.001725f, +0.004895f, +0.004910f, +0.000088f, +0.000707f, - -0.006240f, -0.002481f, +0.000426f, +0.004192f, -0.001124f, +0.001475f, -0.005372f, +0.002584f, -0.003234f, +0.001265f, - -0.007389f, -0.006831f, -0.002143f, -0.002703f, -0.003782f, -0.000657f, -0.003666f, -0.000658f, +0.001224f, -0.003974f, - +0.002388f, -0.001694f, +0.001479f, -0.000305f, -0.001099f, +0.001176f, -0.000965f, +0.001604f, +0.001584f, -0.000336f, - -0.001724f, -0.000389f, +0.001842f, +0.000539f, +0.001273f, -0.001006f - }, - { - -0.002282f, +0.016295f, +0.020960f, +0.018467f, -0.018094f, +0.008306f, -0.003486f, +0.011859f, -0.004393f, -0.012904f, - -0.025220f, +0.040325f, -0.009870f, +0.009851f, +0.010194f, -0.001844f, +0.022102f, +0.002120f, -0.000778f, -0.014011f, - +0.016910f, -0.026015f, +0.021617f, +0.030922f, +0.001922f, +0.016889f, -0.024879f, -0.014215f, -0.009070f, +0.027928f, - +0.003637f, +0.017110f, -0.018872f, +0.001555f, +0.022044f, -0.007313f, -0.007725f, -0.007781f, -0.003811f, +0.014688f, - -0.002240f, -0.003931f, -0.002721f, -0.009893f, +0.003570f, -0.003351f, -0.001465f, +0.003476f, +0.002643f, -0.008329f, - -0.002327f, -0.006735f, -0.003198f, -0.006036f, +0.006486f, -0.009855f, -0.002653f, -0.001834f, +0.002980f, -0.006343f, - -0.006184f, +0.001499f, +0.001021f, +0.000713f, +0.004378f, -0.000597f, +0.004347f, +0.000702f, +0.005377f, -0.004215f, - -0.003203f, -0.002068f, +0.000415f, -0.001856f, -0.003612f, -0.002720f, +0.001650f, -0.000872f, -0.003250f, +0.000559f, - -0.001389f, -0.000367f, +0.001355f, -0.003242f, +0.001631f, -0.002124f, +0.002568f, +0.003762f, +0.000174f, -0.001878f, - -0.000600f, -0.000256f, -0.001321f, -0.000963f, -0.001865f, -0.001384f - }, - { - +0.011108f, -0.097375f, -0.033262f, -0.059349f, +0.014096f, +0.002394f, -0.000058f, +0.002354f, +0.014168f, -0.010145f, - +0.022348f, +0.035062f, -0.031914f, +0.015285f, -0.024835f, +0.000308f, +0.005812f, -0.009452f, +0.004981f, -0.002131f, - +0.016926f, +0.008269f, -0.011713f, -0.002493f, -0.003654f, +0.003206f, -0.000201f, +0.013831f, -0.002369f, +0.007851f, - +0.002729f, -0.014851f, +0.001193f, -0.014738f, +0.012967f, +0.006833f, -0.016144f, +0.001465f, -0.009202f, -0.000049f, - +0.013462f, -0.010589f, -0.000071f, +0.005736f, -0.001001f, -0.008296f, +0.012065f, +0.011616f, +0.008076f, -0.000970f, - +0.011187f, -0.000133f, -0.005382f, +0.000604f, +0.001392f, -0.002391f, -0.000344f, -0.005553f, +0.003296f, +0.006542f, - +0.000173f, -0.001120f, -0.001289f, +0.002859f, +0.004697f, +0.005734f, -0.004966f, -0.002063f, +0.006591f, -0.000421f, - -0.001203f, -0.002423f, -0.001694f, +0.004541f, +0.004774f, -0.000621f, -0.002777f, -0.002002f, +0.000697f, -0.000598f, - -0.003494f, +0.002749f, +0.001164f, +0.000138f, +0.000516f, +0.002824f, -0.001527f, -0.001296f, -0.002584f, -0.002793f, - -0.000758f, +0.000601f, -0.001043f, +0.000962f, +0.001764f, +0.002420f - }, - { - +0.027634f, -0.044428f, +0.011899f, +0.110258f, -0.005078f, -0.009628f, -0.007045f, +0.010271f, -0.002111f, +0.022397f, - -0.035128f, -0.017057f, +0.010456f, -0.003606f, -0.000601f, +0.025262f, +0.031559f, +0.015158f, +0.015088f, +0.008361f, - +0.005932f, +0.021706f, +0.004779f, +0.007435f, +0.003083f, +0.012975f, -0.019458f, +0.001977f, -0.001167f, -0.021988f, - +0.010918f, +0.006003f, +0.001635f, -0.000132f, +0.013040f, +0.004171f, +0.006305f, +0.006194f, +0.012293f, +0.019610f, - +0.008137f, -0.001198f, -0.003189f, -0.013756f, +0.004404f, -0.006701f, -0.011415f, +0.001845f, -0.003317f, -0.007013f, - -0.002923f, +0.002703f, -0.001977f, +0.002057f, +0.002495f, +0.008211f, +0.003980f, -0.004055f, -0.006694f, +0.004064f, - -0.005948f, -0.001248f, -0.003681f, -0.006177f, -0.000030f, +0.006928f, -0.002163f, -0.003067f, -0.002183f, +0.001835f, - -0.002492f, +0.003830f, +0.001092f, -0.003308f, -0.000468f, -0.000486f, -0.002612f, +0.000536f, +0.000880f, +0.002658f, - -0.001675f, -0.003896f, -0.002225f, +0.001477f, -0.001166f, -0.001601f, -0.000939f, -0.000281f, +0.000411f, -0.002104f, - +0.000450f, +0.002458f, -0.000043f, -0.004829f, -0.003506f, -0.001839f - }, - { - +0.003644f, +0.017208f, +0.000328f, -0.010306f, -0.003528f, -0.000676f, -0.001292f, +0.008010f, -0.000985f, -0.001939f, - -0.003643f, +0.020964f, -0.001871f, +0.010188f, +0.093531f, -0.029244f, -0.031920f, -0.011417f, -0.025520f, -0.010049f, - +0.012567f, -0.015044f, -0.008245f, +0.011734f, +0.015813f, +0.002513f, +0.015166f, +0.011385f, +0.015845f, +0.011911f, - +0.013754f, -0.010135f, +0.011555f, -0.010705f, -0.013047f, +0.004096f, -0.008619f, +0.000505f, -0.003072f, -0.002363f, - -0.002702f, -0.006612f, +0.002729f, +0.000436f, -0.016807f, +0.003952f, +0.008725f, -0.004243f, -0.001752f, -0.004768f, - +0.001297f, +0.002151f, -0.002036f, +0.005255f, -0.001372f, +0.005770f, +0.003652f, +0.004676f, +0.009529f, -0.001626f, - +0.008732f, +0.001673f, -0.005369f, -0.001337f, -0.002618f, -0.002584f, -0.002335f, -0.004930f, +0.001101f, -0.001129f, - +0.001236f, +0.009441f, -0.001666f, -0.003873f, +0.003127f, +0.003166f, -0.001347f, -0.000771f, +0.001359f, -0.006239f, - +0.000096f, -0.003306f, -0.001167f, -0.000180f, +0.001231f, -0.001258f, +0.002693f, -0.000630f, -0.000319f, +0.001611f, - +0.001231f, -0.000121f, -0.000080f, -0.001280f, +0.002099f, +0.001684f - }, - { - +0.049723f, -0.136896f, +0.017458f, +0.104217f, -0.001483f, +0.002584f, +0.021100f, +0.022500f, +0.028943f, +0.003144f, - -0.011588f, -0.019459f, +0.023179f, -0.036649f, +0.005139f, -0.000198f, -0.015976f, +0.017899f, -0.007492f, +0.000218f, - +0.003127f, -0.008912f, -0.009751f, -0.007889f, +0.007761f, +0.002135f, +0.002164f, +0.002236f, +0.015346f, +0.010905f, - -0.005624f, +0.003929f, +0.010325f, -0.006041f, -0.001677f, -0.002374f, +0.004564f, -0.002994f, -0.006231f, +0.001979f, - +0.001936f, -0.005188f, -0.006227f, +0.009987f, +0.005140f, +0.010478f, +0.006460f, +0.005375f, +0.006420f, -0.007526f, - +0.002400f, +0.004645f, -0.001626f, -0.005105f, -0.006603f, +0.003365f, +0.002066f, +0.004096f, -0.001950f, -0.002016f, - +0.002077f, -0.003828f, -0.007657f, +0.000745f, +0.001143f, -0.004407f, -0.009803f, -0.001890f, -0.001247f, +0.002015f, - -0.005033f, +0.004406f, +0.001569f, -0.001826f, -0.000483f, +0.000157f, +0.001649f, -0.001909f, -0.000013f, -0.000030f, - +0.003329f, +0.001523f, +0.003096f, -0.001829f, -0.001968f, -0.001828f, +0.000231f, +0.000110f, +0.000470f, +0.002928f, - -0.000258f, -0.000653f, +0.001206f, -0.000662f, +0.000966f, -0.001116f - }, - { - -0.000803f, -0.028796f, -0.008033f, +0.001799f, -0.000403f, -0.003043f, +0.000290f, +0.008587f, +0.007046f, +0.004638f, - -0.012003f, -0.000719f, +0.015560f, -0.019922f, +0.044486f, -0.025854f, +0.006139f, -0.018802f, -0.012342f, -0.010467f, - +0.000583f, +0.001076f, -0.011029f, -0.006935f, +0.017335f, +0.001008f, +0.004580f, +0.001656f, +0.019916f, +0.009808f, - -0.002874f, +0.003147f, +0.002426f, +0.021469f, -0.007838f, +0.015997f, -0.007708f, +0.018039f, -0.012197f, +0.011217f, - -0.011599f, -0.007278f, +0.004836f, +0.008389f, -0.006845f, +0.000747f, -0.007358f, +0.004997f, +0.007977f, +0.005030f, - +0.004480f, +0.002341f, -0.003730f, +0.005995f, +0.005726f, -0.000738f, +0.000653f, -0.003519f, +0.000370f, +0.006890f, - +0.000714f, +0.004790f, +0.002645f, +0.004033f, +0.000627f, +0.005176f, +0.001897f, -0.000070f, +0.002746f, +0.001698f, - +0.001699f, -0.005293f, -0.003463f, -0.002841f, -0.004552f, -0.000624f, +0.002028f, -0.003732f, -0.000616f, +0.003311f, - -0.000310f, -0.004390f, +0.000031f, +0.003086f, -0.003857f, +0.001039f, +0.001384f, -0.001378f, +0.000474f, +0.000475f, - +0.001191f, +0.000344f, -0.001528f, +0.000389f, -0.001359f, -0.000911f - }, - { - +0.061152f, +0.101351f, -0.028245f, -0.019333f, +0.019817f, +0.007318f, -0.019286f, -0.014544f, +0.006081f, +0.012788f, - +0.014590f, +0.035654f, +0.013061f, -0.003507f, -0.002568f, +0.027378f, +0.009646f, +0.022551f, +0.004746f, +0.000680f, - -0.012543f, -0.027086f, +0.000469f, -0.005686f, +0.030617f, -0.000421f, +0.011891f, -0.000263f, -0.014100f, +0.018822f, - +0.000845f, -0.010135f, +0.004531f, -0.014033f, +0.017084f, -0.021801f, +0.009179f, -0.008172f, -0.001551f, +0.011623f, - +0.004757f, +0.001046f, +0.005310f, -0.007664f, +0.012617f, -0.008614f, -0.003438f, +0.007296f, -0.020084f, -0.001003f, - +0.006000f, -0.000103f, -0.001641f, -0.003598f, +0.002565f, -0.000568f, +0.002487f, -0.001687f, +0.003770f, +0.006608f, - +0.007105f, +0.003396f, -0.006651f, +0.003153f, +0.001502f, -0.004222f, +0.001627f, -0.005804f, -0.004759f, -0.000286f, - -0.000634f, -0.001999f, -0.000992f, -0.002715f, +0.000312f, -0.001726f, +0.004643f, -0.005053f, +0.001027f, +0.002370f, - -0.002742f, +0.002822f, +0.001824f, -0.000912f, +0.000147f, -0.002569f, -0.004229f, +0.002170f, +0.003758f, -0.001719f, - -0.001851f, +0.002045f, +0.002932f, +0.002167f, -0.001340f, +0.001831f - }, - { - +0.000500f, -0.018568f, -0.000134f, -0.000766f, +0.003688f, +0.000665f, +0.003679f, +0.002238f, +0.009794f, +0.007327f, - -0.000102f, -0.000213f, -0.006791f, +0.008719f, -0.043236f, -0.010708f, -0.023095f, +0.026554f, +0.027509f, -0.015116f, - -0.009067f, +0.022045f, +0.003177f, -0.022041f, +0.019984f, -0.014536f, -0.007197f, -0.017633f, +0.020597f, -0.045137f, - +0.000392f, -0.012400f, -0.012989f, +0.010819f, -0.001659f, +0.005185f, +0.003603f, -0.016013f, +0.021361f, -0.004102f, - +0.008594f, -0.006141f, -0.015629f, +0.003701f, +0.004253f, -0.006172f, -0.005962f, -0.008694f, +0.010757f, +0.003644f, - +0.003085f, +0.002651f, -0.003862f, +0.004866f, -0.002291f, +0.008173f, +0.002128f, -0.001916f, +0.004735f, -0.003453f, - +0.002782f, -0.002870f, +0.001659f, -0.002993f, -0.000657f, +0.004409f, -0.003816f, +0.003738f, -0.004479f, +0.000993f, - -0.000574f, -0.002059f, +0.004089f, +0.001186f, +0.001382f, +0.004882f, +0.002382f, +0.003234f, +0.002281f, +0.001377f, - +0.002788f, -0.002849f, +0.001504f, -0.000312f, -0.001747f, -0.002118f, -0.001258f, -0.000113f, -0.001017f, +0.000700f, - -0.001595f, -0.002100f, +0.002289f, +0.000707f, +0.001507f, +0.002436f - }, - { - +0.019370f, -0.223191f, -0.029132f, -0.031682f, -0.006160f, +0.032150f, +0.037316f, +0.022393f, -0.028502f, -0.019779f, - -0.008682f, +0.035067f, -0.000341f, -0.022864f, +0.035223f, -0.006578f, -0.016076f, -0.009738f, -0.016787f, -0.006954f, - +0.007619f, +0.013328f, +0.019191f, +0.002027f, +0.002262f, -0.030336f, -0.004361f, -0.012899f, -0.012350f, -0.012762f, - +0.010617f, -0.017780f, -0.020663f, -0.003109f, -0.007427f, -0.008749f, +0.001651f, -0.008023f, -0.000680f, -0.005877f, - -0.009949f, -0.012036f, +0.001281f, +0.002530f, +0.013271f, -0.010139f, +0.002995f, -0.000264f, +0.002762f, -0.006779f, - -0.000871f, -0.006480f, -0.000048f, -0.012442f, +0.009115f, +0.007543f, +0.008268f, -0.004057f, +0.000157f, +0.003467f, - +0.004753f, -0.004326f, +0.000576f, -0.007213f, +0.008792f, +0.001309f, +0.001567f, +0.008346f, -0.001473f, +0.007740f, - +0.003179f, +0.000546f, +0.005315f, -0.009265f, -0.004369f, -0.003368f, -0.001104f, +0.000263f, -0.002720f, +0.000179f, - +0.001460f, +0.002687f, -0.001478f, -0.006732f, -0.000635f, +0.001486f, -0.002341f, -0.000315f, -0.000230f, -0.004379f, - +0.000940f, -0.001440f, -0.001988f, +0.001397f, +0.001017f, -0.003305f - }, - { - +0.000711f, -0.076692f, +0.001122f, +0.002156f, -0.016862f, +0.001087f, -0.005543f, +0.004971f, +0.007952f, -0.000036f, - -0.017742f, +0.014383f, +0.028065f, -0.026640f, -0.002322f, +0.004169f, -0.023490f, +0.021488f, +0.017243f, +0.020160f, - -0.002892f, +0.006196f, -0.004109f, -0.003598f, +0.015154f, +0.001728f, +0.005977f, +0.002185f, +0.023185f, -0.014355f, - +0.014341f, -0.009961f, +0.000849f, +0.008084f, +0.009491f, -0.008875f, +0.007876f, +0.008216f, +0.012373f, +0.001481f, - +0.002531f, +0.014261f, +0.004496f, -0.007984f, -0.009032f, -0.011906f, +0.003874f, +0.007890f, -0.004533f, -0.007761f, - +0.001597f, -0.012292f, +0.001746f, -0.001612f, +0.001180f, +0.007743f, +0.003110f, -0.004955f, -0.003899f, -0.001303f, - -0.002960f, -0.003252f, -0.000997f, -0.002498f, +0.002447f, -0.002238f, -0.006702f, -0.000794f, -0.008060f, +0.000850f, - +0.002692f, +0.001607f, -0.002841f, +0.002380f, -0.005968f, +0.000212f, +0.004148f, +0.006107f, -0.002594f, -0.000027f, - +0.000386f, -0.002939f, -0.001439f, +0.000317f, -0.000907f, +0.000936f, +0.003845f, +0.003684f, +0.003034f, +0.001186f, - -0.001238f, +0.000651f, +0.000268f, -0.001081f, -0.000688f, +0.001100f - }, - { - -0.010063f, -0.156395f, +0.055297f, +0.019137f, -0.003262f, +0.045697f, -0.017506f, +0.014804f, +0.011148f, -0.027055f, - +0.033128f, +0.004749f, +0.030590f, +0.003488f, +0.010000f, -0.025167f, +0.001320f, -0.003083f, +0.024762f, -0.003406f, - +0.016352f, -0.007505f, -0.006524f, -0.000158f, -0.017453f, +0.003558f, +0.007952f, +0.004604f, +0.002435f, +0.000092f, - +0.004973f, -0.006168f, +0.003064f, +0.003721f, -0.010279f, +0.000862f, -0.003917f, +0.006479f, -0.004779f, -0.009467f, - -0.002137f, -0.003907f, -0.001523f, -0.012298f, +0.005036f, +0.000592f, -0.001989f, -0.007242f, +0.000180f, -0.000469f, - -0.000443f, +0.005928f, -0.008875f, -0.001869f, +0.010286f, -0.000918f, +0.001032f, +0.005765f, +0.001002f, +0.001427f, - +0.007913f, +0.006463f, +0.001326f, -0.000041f, +0.004570f, -0.001749f, +0.009589f, -0.000484f, +0.006140f, +0.000030f, - -0.000758f, -0.003975f, -0.003285f, -0.002391f, -0.001807f, +0.002741f, +0.000727f, +0.007237f, -0.000584f, +0.000433f, - -0.001767f, +0.002561f, +0.000027f, +0.003331f, -0.000088f, -0.000296f, +0.001361f, +0.003361f, -0.001157f, -0.000738f, - +0.000141f, +0.001338f, -0.002603f, -0.000663f, -0.002361f, -0.000846f - }, - { - +0.004200f, -0.018179f, -0.022552f, +0.000100f, +0.015690f, +0.005643f, -0.028426f, +0.003755f, -0.008464f, +0.005526f, - +0.002285f, -0.010035f, +0.003589f, -0.055507f, -0.029253f, +0.024598f, -0.033992f, +0.000399f, -0.049835f, +0.033640f, - -0.004288f, +0.020019f, -0.059373f, +0.009611f, +0.010886f, +0.024005f, +0.011711f, +0.002516f, +0.016768f, -0.010468f, - +0.005018f, -0.014687f, +0.012868f, -0.017691f, +0.013143f, +0.003718f, +0.010959f, -0.004238f, +0.007634f, -0.013177f, - +0.008613f, -0.013025f, +0.006671f, -0.011808f, -0.008553f, -0.006556f, -0.003993f, -0.005186f, -0.001209f, +0.003606f, - -0.002967f, -0.003462f, -0.016957f, -0.002936f, +0.003156f, -0.000966f, -0.002966f, +0.004963f, -0.001586f, +0.009991f, - -0.000318f, +0.008547f, +0.001706f, -0.000777f, +0.005698f, +0.000117f, -0.009996f, -0.004981f, -0.004977f, -0.004826f, - +0.004236f, +0.005271f, +0.002224f, +0.000471f, -0.004754f, -0.002209f, -0.006259f, +0.001026f, -0.003136f, -0.000928f, - +0.002876f, +0.002230f, -0.000930f, -0.002174f, -0.004889f, -0.003739f, -0.002717f, -0.003157f, -0.006012f, -0.002198f, - -0.000997f, -0.001969f, -0.000731f, +0.001363f, +0.002496f, -0.001172f - }, - { - +0.025343f, -0.132665f, +0.025115f, +0.039170f, +0.003958f, -0.013782f, +0.048220f, +0.006914f, -0.013240f, +0.029247f, - +0.019751f, -0.008451f, -0.002249f, +0.016497f, +0.089927f, +0.034769f, +0.002694f, +0.007188f, +0.018407f, -0.001400f, - +0.013114f, +0.006065f, -0.009653f, -0.019875f, -0.007549f, +0.013715f, -0.011958f, -0.010275f, -0.002879f, +0.003979f, - -0.000280f, -0.014667f, -0.000245f, +0.011800f, +0.002934f, +0.001010f, +0.001737f, -0.003385f, +0.005031f, +0.009149f, - +0.002782f, -0.015902f, -0.016075f, -0.006275f, +0.003994f, -0.004181f, +0.014067f, +0.008900f, -0.006812f, -0.010724f, - +0.005450f, -0.001925f, -0.007961f, +0.001647f, -0.002118f, +0.006085f, -0.000623f, -0.007977f, -0.006236f, +0.002239f, - +0.004495f, -0.000969f, +0.005575f, +0.009849f, +0.006767f, +0.003484f, +0.000596f, +0.001469f, +0.003021f, -0.001264f, - -0.003560f, -0.004480f, -0.002105f, -0.002431f, +0.001879f, -0.001919f, -0.001312f, -0.004428f, +0.003680f, +0.003565f, - +0.000777f, +0.001842f, -0.002680f, -0.006163f, +0.000668f, -0.000406f, -0.000863f, -0.001644f, +0.001074f, +0.001615f, - -0.001236f, -0.001237f, +0.001782f, +0.001152f, +0.000136f, -0.000265f - }, - { - -0.009343f, +0.049114f, +0.023097f, -0.004810f, -0.020565f, +0.032781f, -0.000499f, -0.004388f, -0.002595f, +0.007070f, - -0.009291f, +0.003565f, +0.017280f, -0.079245f, +0.095134f, -0.030052f, -0.016773f, -0.019180f, +0.020753f, +0.024711f, - -0.010515f, +0.022023f, -0.008434f, +0.005904f, +0.008669f, +0.005518f, +0.021209f, +0.003666f, -0.015389f, -0.038888f, - -0.006124f, -0.002618f, +0.014131f, -0.006892f, +0.020960f, -0.002165f, -0.004367f, -0.006814f, -0.016178f, -0.002542f, - -0.026422f, -0.018176f, +0.012497f, -0.002380f, +0.005616f, -0.017866f, +0.016216f, +0.008479f, -0.023618f, +0.002895f, - -0.004927f, +0.000030f, -0.002638f, +0.002301f, -0.001498f, -0.001808f, -0.000317f, -0.003725f, -0.000963f, -0.003041f, - -0.003750f, +0.001256f, +0.000068f, +0.001155f, -0.006220f, -0.001052f, -0.001222f, +0.001386f, -0.007259f, +0.000334f, - -0.002711f, +0.004207f, -0.001255f, -0.004302f, -0.000801f, -0.004016f, -0.002614f, -0.000807f, -0.003781f, +0.007315f, - +0.000334f, +0.002846f, +0.001371f, -0.000552f, -0.003400f, +0.004041f, +0.001071f, -0.002930f, +0.000554f, -0.002042f, - -0.002137f, -0.000842f, +0.001966f, -0.003118f, +0.000764f, -0.001231f - } - }, - { - { - +0.024388f, +0.461918f, -0.026691f, +0.087771f, -0.023299f, -0.000462f, +0.010723f, +0.013946f, -0.016193f, +0.044639f, - +0.028664f, +0.013891f, -0.012490f, -0.013323f, +0.012673f, +0.001484f, +0.000003f, -0.032234f, +0.006619f, +0.000175f, - +0.006828f, +0.001763f, +0.008184f, -0.010505f, +0.002371f, -0.015743f, -0.007365f, -0.003604f, +0.020722f, -0.013628f, - +0.002931f, +0.015930f, -0.002402f, -0.005884f, -0.004421f, -0.007166f, +0.002393f, +0.001421f, +0.012010f, -0.004895f, - -0.008290f, -0.000021f, -0.011507f, -0.017706f, -0.002362f, +0.001833f, -0.009430f, -0.007970f, +0.010476f, +0.004523f, - +0.004673f, +0.002549f, -0.011483f, -0.009133f, +0.005244f, -0.006544f, +0.004486f, +0.005106f, -0.005011f, +0.003477f, - +0.001605f, -0.005912f, -0.004657f, +0.000379f, -0.001417f, +0.004653f, -0.005297f, +0.003117f, -0.002402f, +0.004493f, - -0.004498f, -0.004946f, -0.000101f, -0.002579f, -0.008384f, -0.001808f, +0.001642f, -0.000287f, +0.000892f, +0.000793f, - +0.005807f, -0.002066f, -0.001176f, -0.003893f, -0.002803f, -0.000134f, +0.000556f, +0.001456f, +0.002246f, +0.002612f, - +0.000368f, -0.000651f, -0.001301f, -0.000032f, +0.001182f, -0.001757f - }, - { - +0.001178f, -0.047768f, -0.028113f, +0.041792f, -0.003743f, +0.002357f, -0.007697f, +0.000412f, -0.015376f, -0.003239f, - -0.007813f, +0.038910f, -0.028072f, +0.002087f, +0.014839f, -0.017308f, +0.000350f, -0.004208f, +0.005375f, -0.028214f, - +0.013452f, -0.002174f, +0.007117f, -0.016280f, -0.017420f, +0.022277f, -0.033255f, -0.010599f, -0.002989f, +0.035645f, - +0.002836f, +0.015125f, -0.015033f, -0.004474f, +0.008485f, -0.009325f, -0.006028f, +0.000043f, -0.000023f, +0.007833f, - +0.004614f, +0.011473f, +0.007454f, -0.005841f, +0.009969f, -0.003474f, -0.015589f, +0.002006f, +0.003275f, -0.001643f, - +0.002364f, -0.006515f, -0.003220f, -0.004710f, -0.000281f, -0.011656f, +0.006046f, +0.000688f, +0.002552f, +0.000565f, - -0.001573f, +0.000144f, -0.000051f, +0.003142f, +0.004470f, -0.003221f, +0.009672f, +0.001723f, +0.001724f, -0.000398f, - +0.002795f, -0.001697f, +0.001506f, +0.001244f, +0.001654f, -0.000822f, -0.000988f, -0.000698f, -0.003510f, +0.001287f, - -0.003399f, -0.001683f, +0.001679f, -0.005456f, +0.000424f, +0.000091f, +0.002015f, -0.000291f, +0.000148f, +0.001283f, - -0.000054f, -0.000926f, -0.000247f, +0.002395f, +0.000834f, -0.001469f - }, - { - -0.011539f, -0.012582f, +0.046984f, -0.072582f, -0.000078f, +0.001885f, +0.000931f, -0.010161f, -0.004120f, -0.005022f, - +0.030920f, +0.030592f, -0.030862f, +0.010601f, -0.021916f, +0.019487f, +0.011159f, -0.008270f, -0.002999f, -0.012923f, - -0.002867f, -0.007427f, -0.010617f, +0.009114f, +0.011311f, +0.000735f, +0.001502f, +0.020947f, +0.002437f, +0.012475f, - +0.004745f, -0.009252f, +0.010695f, -0.012641f, -0.001924f, +0.005113f, -0.011782f, +0.004879f, -0.007771f, -0.010810f, - +0.006136f, -0.023730f, -0.009515f, +0.006502f, +0.010506f, +0.010543f, +0.024577f, +0.016604f, +0.009829f, -0.011626f, - +0.005714f, +0.009027f, -0.009503f, -0.001000f, +0.008508f, +0.000323f, -0.002925f, -0.008837f, -0.002014f, +0.003343f, - +0.000782f, +0.000820f, -0.003382f, -0.007078f, -0.004835f, +0.007319f, -0.000355f, -0.002248f, +0.003537f, -0.000041f, - +0.003196f, +0.001667f, +0.001202f, +0.001399f, +0.001632f, +0.001423f, +0.005253f, +0.001484f, +0.001687f, +0.001308f, - -0.002634f, +0.001952f, -0.000898f, -0.001767f, -0.002207f, +0.000819f, -0.002082f, -0.001112f, -0.002949f, -0.001122f, - -0.001369f, -0.001464f, -0.001293f, +0.000035f, -0.000279f, +0.002306f - }, - { - -0.019032f, -0.157158f, -0.029448f, +0.112409f, +0.005764f, -0.006882f, -0.007671f, -0.006267f, -0.009730f, +0.025069f, - -0.033859f, -0.012649f, +0.007857f, +0.000509f, -0.002399f, +0.000122f, +0.029382f, +0.010464f, -0.005715f, -0.000592f, - -0.001504f, +0.008935f, +0.023458f, +0.031484f, +0.013039f, +0.018212f, -0.020331f, +0.017788f, +0.025776f, -0.012245f, - +0.008094f, +0.020110f, +0.011721f, -0.002490f, +0.005077f, +0.008180f, +0.008820f, +0.000812f, -0.001181f, +0.007079f, - -0.007555f, -0.018006f, -0.006576f, -0.012297f, +0.002348f, -0.005759f, -0.004822f, +0.005705f, -0.000637f, -0.010575f, - -0.001285f, +0.007278f, +0.003055f, +0.004684f, -0.000266f, +0.001749f, +0.005547f, +0.002475f, -0.004439f, +0.006492f, - +0.001995f, -0.000612f, -0.002089f, -0.000109f, +0.005487f, +0.007070f, +0.004134f, +0.003036f, -0.003524f, +0.002818f, - +0.004166f, +0.002176f, -0.001688f, -0.000431f, +0.000135f, -0.001681f, -0.005365f, +0.001488f, +0.002964f, +0.002142f, - +0.000253f, -0.000145f, -0.001288f, +0.000842f, -0.002043f, -0.002376f, -0.001678f, -0.000806f, +0.001966f, +0.001225f, - +0.000220f, +0.000353f, +0.001372f, -0.000578f, -0.000112f, -0.000693f - }, - { - -0.003529f, +0.035507f, +0.016835f, -0.001032f, +0.002741f, -0.000166f, +0.000227f, +0.001333f, -0.001890f, -0.002990f, - -0.003319f, +0.021813f, +0.003110f, -0.011061f, +0.035524f, -0.039987f, -0.019966f, +0.044759f, +0.012716f, -0.020417f, - +0.003760f, -0.024502f, -0.026365f, -0.007168f, +0.012257f, +0.022734f, +0.022509f, +0.007574f, +0.011891f, -0.011727f, - -0.003442f, +0.001951f, +0.034463f, +0.012249f, -0.004428f, +0.007484f, -0.002238f, +0.005386f, +0.005663f, +0.005277f, - +0.000402f, +0.001166f, +0.003575f, -0.001381f, -0.004570f, +0.004163f, +0.003899f, +0.000892f, +0.002619f, -0.001075f, - +0.004340f, -0.004608f, -0.005182f, +0.008960f, +0.000951f, +0.002343f, +0.007843f, +0.006882f, +0.003477f, -0.001093f, - +0.013842f, +0.005844f, -0.003742f, -0.001870f, -0.002758f, +0.000796f, +0.008032f, -0.000745f, +0.002312f, +0.000627f, - -0.003493f, +0.010484f, +0.002440f, -0.003982f, +0.003497f, +0.002565f, -0.002140f, +0.003355f, +0.005185f, -0.005311f, - +0.005013f, -0.000663f, -0.004261f, -0.001314f, +0.000185f, -0.003017f, +0.001147f, -0.001378f, -0.001519f, -0.000668f, - -0.000882f, -0.000435f, +0.000795f, +0.000099f, +0.002543f, +0.001010f - }, - { - -0.032059f, -0.326218f, -0.020159f, +0.101768f, -0.023864f, -0.000338f, +0.015181f, -0.008159f, +0.000881f, +0.003526f, - -0.008312f, -0.026310f, +0.003376f, -0.050267f, -0.001140f, -0.008312f, -0.027425f, +0.003570f, -0.019296f, -0.015322f, - -0.000744f, +0.008863f, -0.008851f, -0.004415f, +0.021982f, -0.005032f, -0.011268f, -0.011029f, +0.004981f, +0.010838f, - -0.002615f, -0.004669f, +0.010219f, -0.000807f, -0.000554f, -0.005990f, -0.001059f, -0.007793f, -0.011082f, +0.004544f, - +0.016905f, +0.006959f, -0.001176f, +0.001562f, -0.008774f, +0.001041f, +0.000542f, -0.002778f, -0.002254f, -0.006937f, - +0.004104f, +0.005537f, +0.002653f, -0.000513f, +0.000087f, +0.003943f, -0.001000f, +0.002403f, +0.000814f, -0.002974f, - -0.001131f, +0.001868f, -0.003709f, +0.000315f, +0.000607f, -0.002715f, -0.003695f, +0.000545f, -0.001071f, +0.001640f, - -0.005476f, +0.003753f, +0.001430f, -0.004005f, -0.001611f, +0.000470f, +0.005728f, +0.000459f, -0.001365f, -0.001700f, - +0.001489f, -0.000937f, +0.001782f, -0.000473f, +0.001070f, -0.001627f, +0.000439f, +0.001448f, +0.000507f, -0.000388f, - -0.001767f, +0.000964f, +0.001226f, -0.001869f, +0.000786f, -0.000726f - }, - { - +0.001139f, -0.006642f, +0.003279f, +0.002394f, -0.002198f, -0.001538f, +0.002437f, +0.006338f, -0.005175f, +0.001004f, - -0.001529f, -0.001072f, +0.012548f, +0.006648f, +0.081343f, -0.026702f, +0.011884f, +0.005279f, +0.017165f, -0.005058f, - -0.008558f, +0.009323f, +0.006224f, -0.021479f, +0.005953f, +0.014378f, -0.012372f, -0.017375f, +0.034126f, +0.041928f, - +0.028931f, +0.003430f, -0.011254f, +0.024238f, -0.003439f, +0.014980f, -0.010372f, +0.019733f, -0.012506f, +0.010511f, - +0.001299f, -0.001751f, -0.004176f, -0.000056f, -0.002379f, +0.005391f, -0.008918f, -0.005325f, +0.004375f, +0.005198f, - -0.002415f, +0.005502f, -0.010111f, -0.006603f, +0.003560f, +0.002446f, +0.002985f, -0.007681f, -0.005417f, +0.007532f, - +0.003066f, +0.001721f, -0.003743f, +0.001590f, +0.000600f, +0.000635f, -0.000407f, +0.002184f, +0.000302f, -0.001289f, - +0.000473f, -0.003601f, +0.000351f, -0.000421f, -0.003401f, -0.001768f, +0.000385f, -0.001396f, -0.000313f, +0.000617f, - -0.000433f, -0.000723f, +0.002467f, +0.003877f, -0.003238f, +0.000010f, -0.000806f, -0.004712f, -0.001047f, -0.001987f, - -0.001779f, -0.001421f, -0.002912f, -0.000300f, -0.000353f, -0.002214f - }, - { - -0.098732f, -0.035705f, +0.053940f, -0.027913f, +0.009098f, +0.010353f, -0.036908f, +0.006867f, +0.034255f, +0.018799f, - -0.001665f, -0.003784f, -0.020817f, -0.018475f, +0.001115f, +0.029316f, -0.009580f, +0.013186f, -0.005465f, +0.011025f, - -0.007390f, -0.025982f, +0.015383f, +0.011414f, +0.037625f, +0.001005f, +0.004790f, -0.009890f, -0.003734f, +0.022283f, - +0.004159f, -0.002421f, +0.005386f, -0.009808f, +0.015102f, -0.034673f, -0.006170f, -0.016986f, -0.004479f, +0.005165f, - +0.002848f, -0.000496f, +0.013291f, -0.002229f, +0.018780f, -0.001049f, -0.004784f, +0.003978f, -0.010035f, +0.004272f, - -0.000856f, -0.000601f, -0.004869f, -0.014519f, -0.000264f, +0.005038f, +0.001096f, -0.000745f, +0.005643f, -0.000189f, - -0.000473f, +0.001799f, +0.001250f, +0.007442f, -0.002380f, -0.007674f, +0.002381f, -0.003885f, +0.000571f, +0.006111f, - +0.002632f, -0.003649f, -0.001256f, +0.002099f, +0.003651f, -0.004749f, +0.005650f, +0.000529f, -0.001390f, +0.003048f, - -0.001248f, -0.001148f, -0.001543f, -0.002130f, -0.001195f, +0.001764f, +0.000558f, +0.000524f, +0.004050f, +0.000327f, - -0.001654f, -0.000089f, +0.000666f, +0.000518f, -0.002199f, +0.002436f - }, - { - +0.002743f, -0.004066f, +0.010247f, -0.006802f, -0.002429f, +0.001665f, -0.001439f, +0.000157f, +0.013141f, +0.003400f, - -0.012782f, +0.004721f, +0.005828f, +0.016615f, -0.020553f, +0.027163f, +0.004796f, +0.020327f, +0.013361f, -0.033662f, - -0.028077f, -0.004778f, -0.007874f, -0.024082f, +0.023715f, -0.022618f, -0.010293f, -0.013923f, +0.029197f, -0.012876f, - +0.002390f, -0.003194f, +0.004983f, +0.009134f, -0.006056f, +0.006724f, -0.000994f, -0.009375f, +0.024075f, -0.015703f, - +0.004454f, -0.004963f, -0.009628f, +0.010016f, +0.012899f, -0.005539f, -0.003642f, -0.001624f, +0.011460f, -0.007720f, - -0.006220f, +0.005134f, +0.006173f, +0.010424f, -0.006262f, +0.002915f, +0.001219f, +0.002751f, +0.004833f, +0.001019f, - +0.000187f, -0.006909f, +0.001635f, -0.003190f, +0.000912f, +0.004298f, -0.004917f, +0.006484f, -0.000089f, +0.001214f, - +0.000195f, -0.001019f, -0.001816f, -0.001844f, +0.001265f, +0.000355f, -0.002297f, +0.001639f, +0.002171f, -0.001784f, - +0.000241f, -0.001533f, +0.002350f, -0.002969f, -0.001473f, +0.001258f, +0.001974f, +0.001148f, -0.002002f, -0.000370f, - -0.001488f, -0.002231f, +0.000630f, +0.000201f, -0.000943f, +0.000111f - }, - { - -0.015904f, -0.289872f, -0.048400f, -0.019899f, -0.004479f, -0.012396f, -0.021709f, +0.004481f, -0.006257f, +0.015638f, - +0.004125f, +0.032632f, +0.000879f, -0.029447f, +0.033257f, -0.026184f, -0.031238f, +0.009136f, +0.005917f, +0.001030f, - -0.002161f, +0.010813f, +0.008391f, -0.013518f, -0.002181f, -0.020856f, -0.003839f, -0.011582f, -0.006733f, -0.014907f, - +0.004685f, -0.005571f, -0.013705f, +0.005793f, +0.002242f, -0.010289f, -0.000321f, -0.001693f, +0.007144f, +0.006485f, - +0.002237f, +0.000619f, +0.008008f, -0.003513f, +0.018194f, +0.001153f, -0.002184f, -0.004794f, +0.009078f, -0.001535f, - -0.000314f, +0.000302f, +0.004752f, -0.013754f, +0.003171f, +0.000201f, +0.002574f, -0.007910f, -0.001243f, +0.004162f, - +0.008218f, -0.005565f, +0.001430f, -0.003686f, +0.006403f, -0.003128f, +0.001752f, +0.001242f, -0.001972f, +0.010634f, - +0.000407f, -0.003552f, +0.004799f, -0.005879f, +0.001205f, +0.001123f, +0.001155f, +0.000645f, -0.000402f, +0.000137f, - -0.003765f, -0.002434f, -0.001167f, -0.003094f, +0.002240f, +0.000891f, -0.001378f, +0.000709f, +0.000890f, -0.001043f, - +0.001095f, -0.001140f, -0.002018f, -0.000150f, +0.001853f, -0.000265f - }, - { - -0.004059f, -0.087096f, +0.002600f, +0.008847f, -0.001268f, +0.017610f, +0.018885f, +0.009742f, -0.008732f, +0.004172f, - +0.000222f, +0.012247f, +0.033020f, -0.022683f, +0.010303f, +0.030044f, -0.008920f, +0.019966f, -0.004143f, -0.017811f, - -0.016254f, +0.001176f, -0.011581f, -0.005623f, -0.003210f, -0.010695f, +0.003425f, -0.010598f, +0.011084f, -0.017245f, - +0.010661f, -0.012940f, -0.013959f, -0.011677f, -0.005813f, -0.010321f, +0.003312f, -0.001622f, -0.001171f, -0.006105f, - -0.003412f, +0.013183f, +0.009973f, -0.006536f, -0.004970f, +0.001618f, +0.008438f, +0.002424f, -0.008530f, -0.003067f, - +0.009266f, -0.007284f, -0.002875f, -0.007085f, +0.003818f, +0.007235f, +0.004630f, +0.000831f, -0.003030f, +0.001080f, - +0.002979f, -0.001395f, -0.002291f, +0.001208f, +0.009367f, +0.004143f, +0.000055f, +0.005603f, -0.003405f, -0.000174f, - -0.000516f, +0.000528f, -0.003876f, +0.002284f, -0.000760f, +0.001867f, +0.001438f, +0.003878f, -0.001638f, -0.000014f, - -0.001659f, -0.001820f, -0.001875f, -0.001436f, -0.002071f, +0.001408f, +0.004912f, +0.001087f, -0.001033f, -0.000873f, - +0.000423f, +0.002109f, -0.000350f, -0.000190f, +0.002223f, -0.000069f - }, - { - +0.045782f, -0.083777f, +0.025583f, -0.012092f, +0.005782f, +0.018898f, -0.032969f, +0.020783f, -0.009304f, -0.033519f, - +0.031924f, -0.025135f, +0.005953f, -0.007057f, +0.011132f, -0.027714f, +0.020235f, +0.010224f, +0.018762f, -0.006845f, - +0.005594f, +0.003541f, +0.018208f, +0.017541f, -0.013772f, -0.005081f, -0.005982f, -0.009680f, -0.008133f, -0.009463f, - -0.007764f, -0.002498f, +0.001381f, -0.005953f, -0.006239f, -0.001660f, -0.023969f, -0.016402f, +0.000805f, +0.005802f, - +0.000754f, -0.003092f, +0.015716f, +0.009579f, +0.008215f, +0.002496f, -0.000652f, -0.000925f, +0.013803f, +0.007148f, - -0.007592f, +0.004381f, +0.000838f, -0.001916f, -0.000493f, -0.008722f, +0.001983f, +0.005266f, -0.001860f, -0.001387f, - +0.008213f, +0.004822f, +0.003287f, +0.001910f, +0.003655f, -0.001880f, +0.010703f, +0.000706f, +0.004334f, -0.001340f, - -0.001901f, +0.000100f, +0.002674f, -0.001637f, -0.000472f, +0.002851f, +0.000680f, +0.004324f, -0.003774f, +0.001496f, - +0.000126f, +0.003279f, -0.002611f, +0.003150f, +0.000759f, -0.002927f, -0.000687f, +0.001811f, -0.001560f, +0.001085f, - +0.002548f, +0.003669f, -0.002700f, +0.000897f, +0.000121f, +0.000164f - }, - { - -0.005271f, +0.010612f, +0.000500f, +0.001638f, +0.017222f, +0.005432f, -0.021582f, +0.005851f, -0.009514f, -0.001757f, - +0.005687f, +0.006570f, -0.006385f, -0.052441f, -0.012063f, +0.028973f, -0.032413f, +0.014437f, -0.029485f, +0.013280f, - -0.045503f, -0.007668f, -0.017518f, +0.023851f, +0.011987f, +0.025760f, +0.001580f, -0.000609f, +0.009890f, +0.000260f, - +0.021564f, -0.011683f, +0.031892f, -0.010746f, +0.015488f, +0.002583f, +0.011986f, -0.006782f, +0.008732f, +0.003741f, - +0.020082f, -0.009385f, +0.005552f, -0.007858f, +0.002390f, +0.004143f, -0.001429f, -0.003510f, +0.003369f, +0.007137f, - -0.001629f, +0.003852f, -0.004091f, -0.004937f, -0.004408f, +0.002275f, +0.002617f, +0.005656f, +0.001988f, +0.007026f, - -0.016353f, +0.000749f, +0.006698f, -0.003234f, -0.001312f, +0.000108f, -0.005789f, -0.002862f, +0.007371f, +0.002212f, - -0.001315f, +0.000044f, -0.002078f, +0.001979f, +0.002055f, +0.004028f, -0.004255f, +0.002443f, -0.002595f, -0.000412f, - +0.002499f, +0.001249f, -0.001382f, -0.000490f, +0.000231f, +0.001654f, +0.000026f, +0.001688f, -0.003067f, +0.000851f, - +0.002085f, -0.002749f, +0.000260f, -0.001688f, +0.000153f, +0.001158f - }, - { - -0.000364f, -0.154633f, +0.032738f, +0.013306f, -0.008519f, -0.052068f, +0.000343f, -0.005461f, -0.015451f, +0.017063f, - +0.005652f, +0.012507f, -0.006724f, -0.017802f, +0.043037f, -0.005717f, -0.036925f, -0.013866f, +0.003111f, -0.009143f, - -0.015755f, -0.001183f, -0.003376f, -0.008928f, +0.015852f, +0.015469f, +0.002363f, +0.018320f, +0.003976f, +0.000017f, - +0.004552f, -0.000770f, -0.010707f, -0.004838f, -0.011711f, +0.002316f, +0.003459f, -0.014055f, -0.008443f, -0.005616f, - +0.002071f, -0.009451f, -0.007603f, -0.012607f, -0.015200f, -0.009025f, +0.005538f, +0.003922f, -0.018644f, -0.006706f, - +0.009858f, -0.004474f, -0.003046f, +0.004401f, -0.003429f, -0.003083f, -0.005597f, +0.000199f, +0.003390f, +0.006267f, - +0.004274f, -0.004867f, +0.005964f, +0.007345f, +0.003223f, -0.000361f, -0.001666f, +0.001669f, -0.000597f, +0.003846f, - +0.002750f, -0.000811f, -0.001674f, -0.004373f, +0.003502f, -0.000110f, +0.002821f, +0.001118f, +0.001435f, -0.001273f, - -0.002739f, +0.001721f, -0.003297f, -0.005674f, +0.001359f, +0.000364f, +0.001611f, +0.000293f, -0.000377f, +0.000369f, - -0.002060f, -0.002184f, +0.000144f, -0.001658f, -0.002024f, -0.001759f - }, - { - +0.009395f, +0.041615f, -0.005477f, +0.006373f, -0.014745f, +0.025850f, +0.000502f, -0.000494f, +0.012825f, +0.014884f, - -0.012775f, -0.005187f, +0.016725f, -0.002720f, +0.189555f, -0.014722f, -0.018908f, -0.038058f, +0.021790f, +0.031759f, - -0.018280f, +0.012086f, -0.006535f, +0.004992f, -0.003207f, -0.013388f, -0.001578f, -0.008446f, -0.009886f, -0.038312f, - -0.001116f, -0.007531f, -0.000914f, -0.016175f, +0.015467f, -0.004468f, +0.000463f, +0.006876f, -0.004907f, -0.003288f, - -0.019530f, -0.004711f, +0.024234f, -0.002242f, +0.011746f, -0.004528f, +0.020105f, +0.010051f, -0.026903f, +0.002075f, - +0.001777f, -0.001730f, -0.006870f, -0.001196f, -0.006246f, +0.002410f, +0.008594f, +0.002773f, +0.009464f, +0.013194f, - +0.001723f, +0.000694f, -0.000095f, -0.008267f, -0.006714f, -0.004928f, -0.009559f, +0.001154f, -0.002086f, +0.002346f, - -0.006295f, +0.002711f, -0.000158f, -0.006450f, -0.001832f, -0.004362f, -0.004065f, -0.000028f, +0.002553f, +0.009603f, - -0.004523f, +0.001354f, +0.002932f, -0.001708f, -0.004621f, +0.002827f, +0.000771f, -0.004993f, -0.000656f, +0.000035f, - +0.000255f, -0.003013f, -0.001865f, -0.001073f, +0.004357f, +0.000497f - } - }, - { - { - -0.025647f, +0.366263f, +0.067842f, +0.018345f, +0.033540f, +0.006520f, -0.002893f, +0.035712f, -0.023831f, +0.033741f, - +0.030535f, -0.007944f, +0.004321f, -0.028394f, +0.003904f, +0.011715f, -0.026351f, -0.004698f, -0.005017f, +0.020818f, - -0.004029f, +0.006565f, +0.000906f, -0.000082f, -0.002631f, -0.013653f, -0.016457f, -0.000462f, +0.006188f, +0.000967f, - +0.004252f, +0.007638f, +0.004967f, -0.007537f, -0.013907f, -0.003245f, +0.008632f, +0.004045f, +0.007104f, -0.000714f, - -0.005114f, -0.014762f, +0.001370f, -0.017522f, -0.000237f, -0.014202f, +0.002951f, -0.004495f, +0.003054f, +0.014026f, - -0.008295f, +0.001745f, -0.002400f, -0.009594f, +0.002246f, -0.003758f, +0.004892f, +0.001646f, -0.000511f, -0.000698f, - -0.001232f, +0.000246f, -0.000870f, -0.008328f, -0.000152f, +0.002515f, -0.001970f, +0.001047f, -0.001295f, +0.003276f, - -0.004751f, -0.002636f, -0.002564f, -0.002624f, -0.002069f, -0.005562f, +0.005729f, -0.002969f, +0.000757f, +0.004506f, - +0.003709f, -0.001525f, -0.001347f, -0.002583f, -0.003223f, -0.000893f, +0.001045f, +0.000175f, +0.003303f, +0.002926f, - +0.000758f, -0.001667f, -0.001715f, +0.001195f, -0.001936f, +0.000780f - }, - { - -0.000543f, -0.101052f, +0.016387f, +0.032669f, +0.004216f, -0.007478f, +0.001648f, -0.017773f, -0.004980f, -0.014426f, - +0.030744f, +0.015200f, -0.019008f, +0.022828f, -0.016707f, +0.008172f, -0.018256f, -0.014951f, +0.002346f, -0.017695f, - +0.008971f, +0.003941f, -0.031902f, -0.002903f, -0.000575f, -0.005841f, -0.035887f, -0.004293f, +0.011420f, +0.040936f, - -0.007276f, +0.015022f, -0.000569f, -0.005889f, -0.004094f, -0.005518f, -0.016306f, +0.014068f, +0.000798f, -0.003058f, - +0.004724f, +0.015791f, +0.003735f, +0.003529f, +0.003398f, +0.001663f, -0.018264f, -0.002465f, -0.005837f, +0.010207f, - +0.007254f, -0.008774f, -0.004980f, +0.000199f, -0.013591f, +0.003538f, +0.004721f, -0.002009f, -0.001400f, -0.001237f, - +0.010640f, -0.006077f, -0.002670f, -0.000518f, +0.008684f, +0.003099f, +0.002956f, +0.000718f, +0.002477f, +0.001197f, - +0.002913f, -0.002485f, +0.004565f, -0.000416f, +0.000449f, +0.001731f, -0.004273f, +0.002789f, -0.001751f, +0.000712f, - -0.002851f, -0.001649f, -0.000168f, -0.001526f, -0.003938f, +0.002275f, +0.000746f, -0.000876f, -0.000956f, +0.000807f, - -0.000603f, +0.000767f, -0.000655f, +0.002718f, +0.000681f, -0.000560f - }, - { - +0.009906f, +0.100229f, -0.064466f, -0.047832f, -0.019256f, +0.014852f, -0.001239f, -0.013597f, -0.021065f, +0.004012f, - +0.055803f, +0.007402f, -0.008859f, -0.012608f, -0.004144f, +0.015054f, -0.014688f, +0.011662f, +0.004577f, -0.006306f, - -0.016538f, -0.012735f, -0.005619f, +0.023006f, +0.007098f, -0.007941f, +0.012483f, +0.009002f, +0.017084f, +0.003922f, - +0.000353f, -0.000366f, +0.003689f, +0.005180f, -0.015234f, +0.006024f, -0.008689f, +0.013658f, -0.011325f, -0.018645f, - -0.002469f, -0.010069f, -0.011037f, -0.005965f, +0.018173f, +0.021376f, +0.020372f, +0.004706f, +0.015567f, -0.007456f, - -0.004939f, +0.009775f, -0.007806f, -0.003639f, +0.009774f, +0.005837f, -0.006858f, -0.009220f, -0.005883f, +0.005757f, - +0.003670f, +0.001388f, -0.003481f, -0.006796f, -0.003728f, +0.004040f, +0.002947f, +0.001210f, -0.001768f, +0.003065f, - +0.000672f, +0.000558f, +0.004123f, +0.001069f, +0.000643f, -0.000293f, +0.006997f, +0.002460f, +0.002124f, +0.000947f, - +0.000795f, +0.001840f, -0.002087f, -0.002123f, -0.002400f, +0.000913f, -0.000636f, -0.001917f, -0.002078f, +0.000134f, - +0.000737f, -0.004514f, +0.000253f, -0.000327f, +0.001491f, +0.000813f - }, - { - -0.008120f, -0.227064f, +0.021198f, +0.112222f, -0.009170f, -0.012254f, +0.007459f, -0.011228f, -0.006581f, -0.005898f, - -0.012115f, -0.002394f, -0.005866f, -0.002674f, +0.019528f, -0.016884f, +0.018703f, +0.011547f, -0.002335f, -0.014016f, - +0.012251f, +0.000701f, +0.018886f, +0.023301f, +0.016637f, +0.014709f, -0.004432f, +0.000890f, +0.024248f, -0.009691f, - +0.010895f, +0.021926f, +0.005861f, +0.009087f, -0.001335f, +0.008556f, -0.003152f, +0.006639f, -0.005550f, -0.003457f, - -0.005431f, -0.010405f, -0.011975f, -0.007254f, -0.005447f, +0.001892f, -0.002477f, +0.006774f, -0.005676f, +0.003231f, - +0.002226f, -0.007278f, +0.008297f, +0.007594f, -0.003142f, -0.000800f, +0.004831f, +0.004034f, +0.004354f, +0.000047f, - +0.002021f, -0.001105f, +0.003935f, -0.002009f, +0.003311f, +0.005097f, +0.006280f, +0.003334f, -0.002389f, +0.001613f, - +0.002153f, +0.003859f, -0.004116f, +0.000163f, +0.002603f, -0.002285f, -0.003892f, +0.001451f, +0.002289f, +0.001566f, - +0.001126f, +0.001811f, -0.001791f, -0.002499f, -0.001470f, +0.000542f, -0.001662f, -0.000119f, +0.000230f, +0.000267f, - +0.000806f, +0.000003f, +0.000907f, +0.001609f, +0.000166f, +0.000247f - }, - { - +0.002693f, +0.054382f, -0.008615f, +0.006393f, -0.003572f, +0.001591f, +0.004992f, -0.007401f, -0.000983f, +0.001613f, - -0.003651f, +0.018568f, +0.003458f, +0.015158f, -0.011986f, -0.016915f, -0.023840f, +0.027819f, +0.043330f, -0.031962f, - -0.012797f, -0.014354f, -0.012446f, -0.007604f, +0.001089f, +0.032814f, -0.003248f, +0.017535f, +0.011570f, -0.000677f, - +0.004050f, +0.010350f, +0.009851f, +0.003504f, +0.005346f, -0.004242f, +0.017058f, -0.004545f, +0.014312f, -0.004028f, - +0.001538f, -0.003477f, +0.001681f, +0.001984f, +0.002159f, -0.000732f, +0.001772f, +0.004445f, +0.004057f, +0.004594f, - -0.006129f, -0.002600f, -0.000842f, +0.012244f, +0.006255f, -0.012907f, +0.014009f, +0.002869f, -0.003336f, +0.012034f, - +0.006458f, +0.005374f, +0.001342f, -0.003271f, +0.001390f, +0.002309f, +0.000048f, -0.000004f, +0.004905f, +0.000052f, - +0.000730f, +0.004160f, +0.002521f, +0.001928f, -0.004171f, +0.000872f, +0.002263f, +0.001950f, +0.003073f, -0.001024f, - +0.002492f, -0.001033f, -0.001315f, -0.002195f, -0.000769f, -0.001165f, +0.000343f, -0.000883f, -0.003035f, +0.000276f, - -0.003377f, +0.002175f, +0.000824f, +0.000895f, +0.001987f, -0.000885f - }, - { - -0.013429f, -0.422868f, +0.010710f, +0.080244f, +0.010914f, +0.001576f, +0.019343f, -0.008527f, -0.018994f, -0.019781f, - -0.000918f, +0.010869f, -0.025070f, -0.030498f, -0.009683f, -0.017911f, -0.011267f, -0.015120f, -0.016208f, -0.012935f, - -0.011027f, +0.014988f, -0.006261f, +0.003879f, +0.014977f, -0.012675f, +0.006454f, -0.020541f, +0.002392f, +0.005549f, - -0.002442f, -0.000360f, +0.016166f, -0.008518f, +0.009052f, -0.001073f, -0.009916f, -0.004416f, -0.009225f, -0.002692f, - +0.014169f, +0.018121f, -0.000295f, -0.001929f, -0.002237f, -0.005487f, +0.005644f, -0.014529f, +0.001591f, -0.000107f, - +0.003264f, -0.002954f, +0.003397f, -0.004348f, +0.007442f, +0.005153f, -0.005554f, +0.001980f, +0.006724f, -0.010061f, - +0.000647f, +0.007181f, -0.006475f, -0.000930f, +0.000906f, -0.003042f, +0.001451f, -0.000099f, -0.001594f, -0.001225f, - +0.002981f, -0.002089f, +0.001651f, -0.003423f, +0.000782f, +0.000890f, +0.002733f, +0.004185f, -0.004431f, +0.000100f, - +0.000731f, +0.000185f, -0.000322f, +0.001371f, -0.001841f, -0.000352f, +0.000884f, +0.000115f, +0.002534f, -0.003411f, - +0.000893f, +0.001488f, -0.000977f, +0.000387f, +0.000389f, -0.000825f - }, - { - +0.000998f, +0.002749f, +0.002208f, +0.001410f, -0.002022f, +0.000768f, +0.001002f, +0.006076f, -0.008424f, +0.000744f, - +0.000536f, +0.010068f, -0.003694f, +0.011839f, +0.078404f, +0.001993f, -0.000279f, +0.007055f, +0.012862f, +0.000192f, - +0.000174f, +0.004667f, +0.029667f, -0.039310f, -0.007205f, +0.010213f, -0.003898f, +0.004904f, +0.006619f, +0.066304f, - +0.029115f, -0.026066f, +0.010105f, +0.001606f, +0.013636f, +0.006013f, -0.005040f, +0.003946f, -0.005725f, +0.004515f, - +0.008531f, -0.004006f, -0.000095f, -0.011667f, +0.000610f, +0.001030f, +0.001511f, -0.008665f, -0.000064f, +0.002372f, - -0.007009f, +0.007578f, -0.003983f, -0.014825f, +0.005084f, +0.003376f, -0.003679f, -0.000023f, -0.008990f, +0.010180f, - +0.000638f, +0.002707f, -0.000913f, -0.000040f, -0.001609f, +0.000760f, +0.002177f, -0.001817f, +0.000305f, +0.000703f, - -0.005926f, +0.001310f, -0.000281f, +0.001498f, -0.000550f, -0.004457f, -0.002276f, +0.004033f, +0.000188f, -0.002342f, - +0.001320f, +0.002160f, +0.002330f, +0.000610f, -0.001355f, -0.000116f, -0.000812f, -0.005183f, -0.002027f, -0.001643f, - -0.001982f, -0.000335f, -0.003389f, -0.000954f, -0.000910f, -0.001610f - }, - { - +0.123324f, -0.210513f, -0.076212f, -0.052175f, +0.042631f, -0.011477f, -0.020639f, +0.016242f, +0.033074f, +0.006729f, - +0.006122f, -0.000108f, -0.030211f, -0.008452f, -0.014403f, +0.028409f, -0.006584f, +0.008410f, +0.003770f, -0.002484f, - -0.012089f, -0.010916f, +0.018916f, +0.019316f, +0.021207f, +0.004597f, -0.002572f, -0.006358f, +0.010527f, +0.001309f, - -0.000512f, +0.015548f, -0.001372f, +0.000259f, -0.004866f, -0.026292f, -0.009118f, -0.027783f, +0.012553f, -0.005310f, - +0.009769f, -0.001807f, +0.005738f, +0.005121f, +0.008051f, +0.013962f, -0.013225f, -0.002811f, +0.001005f, -0.002755f, - -0.004992f, +0.004983f, -0.005643f, -0.007221f, -0.003701f, +0.005658f, +0.001361f, -0.001442f, +0.001194f, +0.003957f, - +0.000527f, -0.006452f, +0.011174f, +0.002760f, -0.000921f, -0.003384f, -0.004459f, -0.001779f, +0.006198f, +0.003760f, - +0.001314f, -0.002667f, -0.000267f, -0.000207f, +0.004028f, +0.001708f, +0.000126f, +0.003616f, -0.002960f, +0.000714f, - +0.002966f, -0.002561f, -0.004155f, -0.001329f, -0.001301f, +0.003748f, +0.000687f, -0.001027f, +0.002666f, +0.000428f, - +0.000017f, -0.001198f, +0.001037f, -0.000502f, +0.000074f, -0.001370f - }, - { - -0.000322f, +0.011957f, +0.003842f, -0.001728f, -0.004438f, +0.001158f, -0.000238f, -0.001481f, +0.010860f, +0.004349f, - -0.016968f, +0.006677f, +0.022088f, -0.031658f, +0.022326f, +0.030822f, +0.014106f, +0.014208f, -0.017331f, -0.031254f, - +0.008199f, -0.036111f, +0.020272f, -0.048952f, -0.000973f, +0.003203f, -0.013508f, +0.002936f, +0.001588f, +0.014909f, - -0.008746f, -0.001711f, +0.005169f, +0.013123f, -0.010099f, +0.006739f, +0.001951f, -0.000034f, +0.015070f, -0.009921f, - -0.002817f, -0.002645f, +0.001713f, +0.003864f, +0.003842f, +0.005209f, -0.008929f, +0.004030f, +0.008044f, -0.003059f, - -0.011568f, +0.009424f, +0.003396f, +0.013125f, -0.008277f, +0.000484f, -0.000648f, +0.006007f, +0.001453f, +0.005623f, - -0.004409f, +0.001813f, -0.003637f, -0.002909f, +0.003562f, -0.005861f, +0.000234f, +0.002627f, +0.004047f, +0.001886f, - -0.004956f, +0.001877f, -0.001820f, -0.001977f, +0.000522f, +0.002058f, -0.000793f, -0.002223f, +0.004495f, -0.003104f, - -0.000395f, -0.000158f, +0.000015f, -0.000782f, -0.002666f, +0.002244f, +0.002510f, -0.000184f, +0.000061f, -0.000130f, - -0.000779f, -0.002544f, -0.000742f, -0.000109f, +0.000380f, -0.001032f - }, - { - +0.011240f, -0.341420f, -0.030824f, -0.034759f, +0.023643f, -0.037394f, -0.037886f, -0.001822f, +0.028006f, +0.020793f, - +0.002947f, +0.006104f, +0.007667f, -0.015367f, -0.008460f, -0.007980f, -0.021425f, +0.014715f, +0.008409f, -0.000886f, - +0.006027f, +0.014074f, -0.016531f, -0.001158f, -0.009306f, -0.000443f, -0.017661f, -0.008964f, +0.000528f, -0.005933f, - -0.018560f, +0.010162f, -0.015330f, +0.010353f, +0.003750f, -0.005953f, -0.011839f, +0.005387f, +0.011858f, +0.007452f, - +0.001492f, +0.003545f, +0.006844f, -0.004077f, +0.004275f, +0.017543f, -0.011478f, +0.000735f, +0.004842f, +0.006343f, - -0.002527f, -0.004275f, +0.000998f, -0.000168f, -0.001651f, -0.004794f, +0.001664f, -0.002238f, -0.002747f, +0.002908f, - +0.004162f, +0.000116f, -0.001231f, +0.001352f, +0.003993f, -0.000445f, -0.000733f, -0.000841f, +0.001041f, +0.001092f, - +0.002765f, +0.001266f, +0.001822f, +0.000680f, +0.002003f, +0.001775f, -0.001838f, -0.001866f, +0.002980f, +0.000608f, - -0.003155f, -0.001671f, -0.000034f, -0.004920f, +0.000539f, +0.003230f, +0.001972f, -0.002547f, +0.000044f, +0.002627f, - -0.002298f, +0.002179f, -0.000664f, -0.001140f, +0.000243f, +0.003176f - }, - { - +0.006043f, -0.095977f, +0.009845f, -0.002797f, +0.003173f, +0.023242f, +0.022813f, -0.006944f, +0.008377f, -0.004302f, - +0.009714f, +0.002245f, +0.022282f, +0.012242f, +0.007597f, +0.005213f, +0.024180f, +0.003662f, -0.007640f, -0.022468f, - +0.002449f, -0.015311f, -0.005121f, -0.003462f, -0.014400f, -0.013775f, +0.006820f, -0.007602f, -0.003759f, +0.007113f, - -0.002329f, -0.009480f, -0.021727f, -0.013964f, -0.006704f, +0.000009f, -0.000149f, -0.006206f, -0.012867f, +0.001264f, - -0.003342f, +0.013347f, +0.004539f, -0.002659f, -0.002153f, +0.002404f, +0.003318f, -0.006026f, +0.002295f, -0.002406f, - +0.003454f, -0.004795f, -0.004030f, -0.007712f, +0.005390f, +0.002636f, +0.007247f, -0.000199f, +0.000478f, -0.002280f, - +0.003911f, +0.002971f, -0.007057f, +0.006773f, +0.005444f, +0.004890f, +0.006040f, +0.003217f, -0.000298f, -0.003207f, - -0.003073f, -0.001316f, -0.000778f, -0.000170f, +0.003680f, +0.000055f, -0.000328f, +0.003341f, +0.002787f, -0.003453f, - -0.001392f, -0.003577f, +0.000627f, +0.000492f, -0.004085f, +0.001720f, +0.003989f, +0.000314f, -0.001355f, -0.001227f, - +0.001968f, +0.000121f, -0.000753f, +0.001708f, +0.001861f, -0.001420f - }, - { - -0.063224f, +0.064837f, +0.023609f, -0.000171f, +0.016411f, -0.047169f, -0.002791f, +0.037731f, -0.015979f, -0.016445f, - -0.002680f, -0.010972f, +0.008192f, -0.002001f, -0.007220f, -0.016947f, +0.030219f, +0.004503f, +0.001987f, +0.004883f, - +0.002452f, -0.001614f, +0.024467f, +0.010316f, +0.008288f, -0.008854f, -0.004478f, -0.012389f, -0.010618f, -0.000898f, - -0.014923f, +0.003913f, -0.004616f, -0.014281f, -0.003939f, -0.013706f, -0.002334f, -0.029333f, +0.003380f, +0.011665f, - -0.005729f, +0.012190f, +0.011836f, +0.007715f, -0.001727f, +0.015876f, -0.006488f, -0.002426f, +0.016958f, +0.012508f, - -0.004674f, -0.004641f, +0.007211f, -0.001023f, -0.011067f, +0.001174f, -0.001937f, +0.000562f, +0.003650f, +0.001428f, - +0.003520f, -0.001934f, +0.006563f, -0.002113f, +0.007984f, +0.002068f, +0.001349f, +0.005313f, +0.002249f, -0.000515f, - -0.005078f, +0.003585f, +0.004568f, -0.001353f, +0.002438f, -0.000941f, +0.001451f, -0.000948f, +0.001353f, -0.000688f, - -0.000723f, +0.003947f, +0.000408f, +0.001941f, -0.002078f, -0.001768f, +0.000599f, -0.002086f, +0.001449f, -0.000557f, - +0.002429f, +0.003463f, -0.002046f, +0.004322f, -0.002713f, +0.001468f - }, - { - +0.004978f, +0.034531f, -0.018087f, -0.001310f, +0.000123f, +0.005080f, -0.002888f, -0.009890f, +0.007968f, -0.005254f, - +0.005946f, +0.006976f, -0.020453f, -0.024136f, -0.025260f, +0.029320f, -0.033664f, -0.005376f, +0.001750f, +0.011479f, - -0.021483f, -0.079590f, +0.066407f, -0.026254f, +0.034477f, +0.037865f, +0.002474f, -0.029726f, +0.021907f, -0.001464f, - +0.013002f, +0.018877f, -0.000964f, +0.008805f, -0.001919f, +0.011404f, +0.008972f, -0.002562f, +0.009804f, +0.008660f, - +0.011744f, +0.005605f, -0.004231f, +0.000641f, -0.000008f, +0.007274f, -0.000755f, -0.001799f, +0.003220f, +0.003122f, - +0.000080f, +0.001350f, +0.000212f, +0.000073f, -0.011167f, +0.009476f, -0.001458f, +0.002135f, +0.004677f, +0.001268f, - -0.010574f, -0.006792f, +0.006871f, -0.001021f, -0.003355f, -0.000263f, -0.000138f, -0.010015f, +0.013223f, -0.001824f, - +0.001734f, -0.002756f, -0.001939f, +0.003547f, +0.000993f, +0.003727f, +0.001098f, -0.001689f, +0.000664f, +0.002336f, - -0.003869f, -0.001200f, +0.001603f, +0.001419f, +0.000659f, +0.001323f, -0.000018f, +0.004606f, -0.004053f, +0.000076f, - +0.001661f, -0.002673f, +0.000093f, -0.001080f, +0.001177f, +0.002269f - }, - { - -0.030834f, -0.099807f, +0.013495f, -0.001258f, -0.000529f, -0.034558f, -0.023609f, -0.012537f, +0.006390f, +0.017900f, - -0.030546f, +0.049529f, -0.026754f, +0.046094f, -0.031629f, -0.010045f, -0.021577f, -0.012201f, -0.016653f, -0.015666f, - -0.016036f, -0.001090f, +0.008552f, -0.001223f, +0.000013f, +0.018654f, +0.009466f, +0.014859f, -0.001340f, -0.002171f, - +0.006597f, +0.006805f, -0.001189f, -0.013280f, -0.010690f, -0.006430f, -0.004836f, -0.002810f, -0.003851f, -0.015068f, - +0.005780f, -0.018019f, +0.006208f, -0.011338f, -0.020808f, +0.006928f, -0.006529f, +0.004219f, -0.016183f, +0.000863f, - -0.002522f, -0.006202f, -0.000021f, +0.002203f, -0.002431f, +0.000500f, -0.006359f, -0.001112f, -0.000739f, +0.012999f, - +0.002467f, -0.000133f, +0.003345f, +0.001129f, +0.004425f, +0.002089f, -0.006151f, +0.003538f, -0.000386f, +0.007600f, - +0.000200f, -0.001669f, -0.000039f, +0.001842f, +0.001172f, -0.003726f, +0.000571f, +0.003921f, +0.001024f, -0.001872f, - -0.001670f, +0.002019f, -0.003073f, -0.002498f, -0.001527f, +0.002294f, +0.000994f, +0.001518f, -0.001858f, +0.000642f, - -0.002728f, +0.000533f, -0.002988f, -0.001133f, -0.000223f, -0.001157f - }, - { - -0.010783f, +0.015512f, +0.027078f, +0.015237f, -0.004103f, +0.000291f, +0.005702f, +0.008483f, +0.008576f, +0.013969f, - +0.000636f, -0.005189f, -0.001510f, +0.079230f, +0.074696f, +0.003793f, -0.014813f, -0.024812f, +0.019045f, +0.014813f, - -0.016534f, +0.010695f, -0.007381f, -0.005237f, +0.005363f, -0.022487f, -0.024811f, -0.010040f, -0.000700f, +0.006187f, - -0.019869f, -0.008013f, -0.012912f, -0.007732f, +0.010125f, -0.017984f, +0.004684f, +0.014727f, -0.003657f, -0.014718f, - -0.003375f, +0.003463f, +0.012643f, -0.006104f, +0.002347f, +0.021497f, +0.007404f, -0.001824f, -0.004573f, -0.004336f, - -0.002028f, +0.001795f, -0.007454f, -0.004588f, +0.000395f, +0.005469f, +0.009232f, +0.003695f, +0.007759f, +0.010109f, - +0.004204f, -0.003080f, +0.004347f, -0.008688f, -0.004101f, -0.011213f, -0.004097f, -0.004230f, +0.004009f, +0.000025f, - -0.005092f, +0.000009f, -0.001628f, -0.003084f, -0.004898f, -0.001307f, -0.002787f, -0.000599f, +0.000690f, +0.003721f, - +0.003452f, -0.006265f, +0.005242f, +0.000190f, -0.000964f, -0.002400f, +0.001859f, -0.001816f, -0.000559f, -0.000114f, - -0.001896f, -0.002300f, -0.002821f, +0.001382f, +0.003279f, +0.000829f - } - }, - { - { - +0.035018f, +0.239980f, -0.052332f, -0.017259f, -0.002825f, +0.004293f, -0.010266f, +0.040083f, -0.023747f, -0.027593f, - -0.037268f, -0.043601f, +0.000181f, -0.032665f, +0.001047f, +0.014380f, -0.010490f, +0.014891f, +0.002250f, +0.030241f, - +0.002972f, -0.008825f, -0.012835f, -0.007138f, -0.004193f, +0.000374f, -0.008281f, -0.011061f, -0.013503f, -0.013633f, - -0.017722f, -0.011060f, +0.005005f, +0.001768f, -0.003834f, +0.008803f, +0.004757f, -0.006199f, -0.001923f, +0.007813f, - +0.004090f, -0.005585f, +0.017244f, -0.010475f, -0.003834f, -0.017579f, +0.004693f, +0.004518f, +0.001574f, +0.007927f, - -0.010073f, +0.006150f, -0.001787f, -0.003885f, +0.005797f, -0.004974f, +0.008216f, +0.012277f, +0.008733f, +0.000552f, - +0.003406f, +0.000005f, -0.004020f, -0.006317f, -0.000016f, +0.002275f, +0.001073f, +0.001951f, +0.000966f, +0.001415f, - -0.001351f, +0.001112f, -0.003103f, -0.001747f, +0.004523f, -0.000015f, +0.005875f, -0.004967f, -0.001199f, +0.001981f, - +0.000336f, -0.001559f, +0.001570f, +0.001262f, +0.000587f, -0.001269f, +0.000777f, +0.000549f, -0.000935f, -0.001220f, - +0.001753f, -0.000169f, -0.000435f, +0.002369f, -0.001959f, +0.000722f - }, - { - +0.000365f, -0.099400f, +0.014483f, +0.015351f, -0.003123f, -0.004192f, +0.007008f, -0.009654f, +0.006366f, -0.002153f, - +0.024672f, -0.000855f, -0.010632f, +0.008443f, -0.047698f, +0.034834f, -0.014817f, -0.025206f, +0.028645f, +0.009071f, - -0.005117f, -0.016398f, -0.039187f, -0.005352f, -0.025319f, -0.013321f, -0.006416f, +0.011524f, +0.015492f, +0.023544f, - -0.003597f, +0.021817f, +0.007375f, -0.001167f, -0.017965f, -0.012008f, -0.018483f, +0.005851f, -0.006743f, -0.000327f, - +0.005841f, +0.001805f, -0.014359f, -0.002385f, -0.000913f, +0.006786f, -0.014632f, -0.003071f, -0.006269f, +0.008195f, - +0.012860f, -0.005622f, -0.003246f, +0.002470f, -0.010087f, +0.003525f, +0.001827f, -0.001383f, -0.004211f, -0.004547f, - +0.010103f, -0.006676f, -0.002433f, +0.001452f, +0.006859f, +0.005875f, +0.002958f, -0.005064f, -0.000656f, -0.000454f, - -0.000689f, -0.003685f, +0.004217f, +0.002504f, +0.003857f, +0.004886f, -0.001463f, +0.002242f, -0.001382f, +0.001723f, - -0.001457f, -0.000090f, +0.000084f, -0.000517f, -0.003766f, +0.000093f, +0.000345f, -0.000340f, -0.004239f, -0.004280f, - -0.001859f, +0.002209f, -0.000643f, +0.000561f, -0.002667f, -0.000719f - }, - { - -0.006696f, +0.194139f, +0.022079f, -0.024609f, -0.004437f, +0.006175f, -0.007977f, -0.011567f, -0.007784f, +0.018027f, - +0.031257f, -0.005999f, +0.020528f, -0.010865f, -0.016475f, +0.011831f, -0.006261f, +0.031288f, +0.008004f, +0.017871f, - +0.005727f, -0.016748f, -0.008405f, +0.019282f, +0.007966f, -0.007739f, +0.002196f, -0.000223f, +0.014674f, +0.001202f, - +0.011388f, +0.002841f, -0.003457f, +0.015418f, -0.004180f, +0.000584f, -0.016162f, +0.016387f, +0.000884f, +0.000519f, - +0.008153f, -0.003427f, -0.010757f, -0.008535f, +0.007246f, +0.008842f, +0.004652f, -0.005335f, +0.017064f, -0.000975f, - -0.005322f, +0.005031f, -0.003625f, -0.007790f, -0.000385f, +0.003647f, -0.005166f, -0.000898f, +0.001686f, +0.006563f, - +0.003834f, +0.004404f, +0.001088f, +0.001418f, +0.000611f, +0.001143f, +0.001350f, +0.001731f, -0.002511f, +0.002557f, - -0.000672f, +0.001190f, +0.001424f, -0.003318f, -0.001894f, -0.000077f, +0.005293f, +0.001683f, +0.006198f, +0.004071f, - +0.001799f, +0.002548f, -0.001564f, +0.000782f, +0.000982f, +0.001065f, +0.000424f, -0.000734f, +0.002686f, +0.002454f, - +0.002495f, -0.000241f, +0.001566f, -0.000797f, +0.001081f, +0.000627f - }, - { - +0.047025f, -0.205989f, -0.030643f, +0.093775f, -0.007141f, -0.008026f, +0.006317f, -0.004423f, -0.011461f, -0.014440f, - +0.008250f, +0.017380f, +0.010228f, +0.008608f, +0.014309f, -0.023587f, -0.009834f, -0.017353f, -0.000983f, -0.007972f, - +0.005621f, -0.020368f, -0.001327f, +0.007010f, -0.003043f, +0.005612f, -0.003355f, -0.023581f, -0.002531f, -0.011954f, - +0.003800f, -0.001789f, -0.012892f, +0.005870f, -0.000867f, +0.008136f, -0.000346f, +0.003362f, -0.008821f, -0.008378f, - +0.011075f, +0.009336f, -0.004330f, +0.006987f, +0.004319f, +0.003239f, -0.005402f, +0.006504f, -0.010290f, +0.001062f, - +0.002412f, -0.006645f, +0.009404f, +0.008892f, -0.003011f, -0.000243f, +0.006967f, +0.006138f, +0.000481f, -0.006925f, - -0.001525f, -0.001872f, +0.001407f, -0.004262f, -0.002599f, -0.002692f, -0.002003f, +0.001550f, -0.002035f, -0.003401f, - -0.003356f, +0.002343f, -0.000955f, +0.002499f, +0.002407f, -0.001074f, -0.000063f, +0.000105f, -0.003476f, -0.001796f, - +0.001063f, +0.001813f, -0.000449f, -0.000746f, +0.000569f, +0.002220f, -0.002320f, -0.000647f, +0.000820f, -0.001348f, - -0.002198f, -0.001130f, +0.001384f, +0.002178f, +0.000295f, +0.001666f - }, - { - -0.001471f, +0.055197f, -0.004441f, +0.011250f, -0.000018f, +0.000919f, +0.002135f, -0.006670f, -0.000126f, -0.001432f, - -0.008694f, +0.010190f, -0.006588f, +0.014465f, +0.001716f, +0.022362f, +0.012385f, -0.042754f, -0.019381f, -0.019512f, - -0.009468f, +0.002851f, +0.005957f, +0.016197f, +0.003984f, +0.039273f, +0.023654f, +0.017415f, -0.012030f, -0.014820f, - -0.012175f, -0.007648f, -0.010673f, -0.014457f, +0.000569f, -0.022079f, +0.007922f, -0.004659f, +0.001329f, -0.017026f, - -0.004962f, -0.007940f, -0.001307f, +0.009916f, -0.002714f, -0.006125f, -0.003270f, -0.002851f, +0.007413f, +0.010667f, - -0.006953f, +0.001891f, +0.001532f, +0.010089f, +0.004842f, -0.018087f, +0.007659f, -0.001868f, -0.006920f, +0.007341f, - -0.000742f, +0.000544f, +0.001979f, -0.001690f, -0.002628f, +0.000314f, +0.002150f, +0.003488f, +0.001346f, -0.004765f, - +0.001016f, +0.001031f, -0.000141f, +0.000361f, -0.006199f, -0.002092f, +0.000140f, +0.000745f, -0.001485f, -0.003892f, - +0.001188f, -0.000078f, +0.003337f, +0.000437f, -0.002066f, -0.000992f, +0.001013f, +0.001687f, -0.000620f, +0.002537f, - -0.002288f, +0.001089f, +0.000037f, +0.001238f, +0.000903f, -0.002175f - }, - { - +0.073306f, -0.373314f, -0.023867f, +0.051845f, -0.020349f, +0.004839f, +0.011388f, -0.020634f, -0.009290f, -0.018196f, - -0.007426f, +0.013830f, -0.020476f, -0.003306f, -0.017745f, -0.013139f, -0.000262f, -0.020590f, -0.000882f, -0.013368f, - -0.030928f, +0.019107f, +0.009684f, +0.007098f, +0.008253f, -0.005313f, +0.005035f, -0.015572f, +0.018321f, +0.018458f, - +0.013154f, +0.007112f, +0.003609f, -0.018790f, +0.007977f, +0.001743f, +0.003671f, +0.004863f, -0.000968f, -0.003480f, - +0.000888f, +0.017325f, +0.010186f, -0.001986f, -0.006519f, -0.004323f, +0.011873f, -0.006416f, +0.004079f, +0.003454f, - -0.001258f, -0.013901f, -0.000065f, -0.004231f, -0.000614f, +0.002261f, -0.006165f, +0.002731f, +0.006909f, -0.008715f, - +0.004624f, +0.005618f, -0.010165f, -0.006614f, +0.000679f, +0.000926f, +0.001595f, +0.000855f, -0.001206f, -0.004518f, - +0.002851f, -0.000257f, +0.004772f, +0.001654f, +0.002692f, +0.001338f, +0.000312f, +0.005259f, -0.002285f, +0.000753f, - +0.000253f, +0.001706f, +0.001090f, +0.002641f, -0.002520f, -0.001458f, -0.000801f, -0.001181f, +0.002508f, -0.002476f, - +0.001660f, +0.000335f, -0.002540f, +0.001907f, +0.001679f, -0.000719f - }, - { - -0.002053f, -0.003406f, +0.003269f, +0.002216f, +0.001699f, +0.001001f, -0.000915f, +0.004086f, -0.006630f, +0.002610f, - +0.000754f, +0.012978f, -0.005312f, -0.002806f, +0.057792f, +0.026635f, -0.001731f, -0.001228f, +0.031739f, +0.019965f, - +0.005247f, -0.000428f, +0.041121f, -0.046964f, -0.029072f, +0.017264f, +0.005996f, +0.005209f, -0.019472f, +0.032127f, - +0.007217f, -0.037032f, +0.008944f, -0.001916f, +0.009761f, -0.004590f, -0.013012f, -0.004067f, -0.016873f, -0.008472f, - +0.005126f, -0.002470f, +0.001699f, -0.012251f, -0.001924f, -0.005666f, +0.004236f, -0.012253f, -0.007232f, -0.001671f, - -0.012427f, +0.006962f, +0.000056f, -0.016807f, +0.001318f, +0.005664f, -0.004188f, +0.001116f, -0.005026f, +0.010483f, - -0.000409f, +0.008547f, +0.006345f, +0.000602f, -0.000312f, +0.000843f, -0.003089f, -0.004161f, +0.001725f, +0.000910f, - -0.005563f, +0.001402f, -0.000881f, +0.001208f, -0.002168f, -0.004621f, -0.002026f, +0.005778f, +0.003658f, +0.000755f, - +0.003364f, +0.000599f, -0.001445f, -0.000655f, +0.000061f, -0.000146f, +0.001530f, +0.000415f, +0.000815f, +0.001365f, - +0.002498f, +0.001675f, -0.002965f, +0.000873f, -0.000025f, -0.000686f - }, - { - -0.124916f, -0.437420f, +0.029593f, -0.081998f, -0.017356f, -0.013766f, -0.007561f, -0.002320f, +0.004512f, -0.007746f, - +0.006776f, +0.011944f, +0.009649f, +0.000513f, -0.020294f, +0.030960f, -0.010475f, +0.008772f, +0.012471f, -0.023974f, - -0.003620f, +0.013402f, +0.032676f, +0.019215f, -0.006231f, -0.011012f, -0.014165f, -0.008966f, +0.015307f, -0.005996f, - -0.011511f, +0.010134f, -0.000676f, -0.003337f, -0.018200f, -0.034314f, -0.001520f, -0.013443f, +0.009047f, -0.007332f, - +0.005054f, -0.007566f, +0.004223f, +0.009292f, -0.000002f, +0.007526f, -0.006278f, -0.000437f, +0.000480f, -0.007247f, - -0.010002f, +0.006558f, +0.009307f, +0.007478f, +0.005606f, +0.006677f, -0.006354f, -0.000936f, +0.002010f, +0.001409f, - +0.001815f, -0.005347f, +0.009461f, -0.001578f, +0.000197f, +0.002238f, -0.000888f, +0.001012f, +0.004071f, +0.000922f, - +0.000760f, -0.003248f, +0.000837f, -0.001768f, -0.000473f, +0.001821f, -0.000952f, +0.003321f, -0.000053f, +0.000258f, - +0.000810f, -0.002578f, -0.002599f, -0.001004f, -0.001730f, +0.003493f, +0.000990f, -0.000358f, +0.000154f, -0.002019f, - +0.000419f, -0.001663f, +0.002024f, +0.000977f, +0.000062f, -0.001800f - }, - { - -0.002348f, -0.008445f, -0.011715f, +0.003498f, +0.001477f, -0.000330f, +0.001405f, -0.005667f, -0.003296f, +0.007592f, - -0.007698f, +0.005468f, +0.013149f, -0.063174f, -0.005255f, +0.006484f, -0.013725f, +0.004175f, -0.020132f, -0.025271f, - +0.019812f, -0.023294f, +0.001798f, -0.075489f, -0.013069f, +0.001401f, -0.001788f, +0.012177f, +0.014503f, +0.012943f, - +0.002081f, +0.015193f, -0.005937f, +0.008876f, -0.005962f, +0.008924f, +0.013734f, +0.002106f, +0.012313f, -0.002932f, - -0.010650f, -0.004425f, +0.002941f, +0.002688f, -0.008402f, -0.000849f, -0.012433f, +0.004471f, +0.005971f, -0.001647f, - -0.003372f, +0.008310f, -0.011425f, +0.004431f, -0.005495f, -0.001074f, -0.003752f, +0.004340f, +0.001136f, +0.002540f, - -0.006948f, +0.006615f, -0.002794f, -0.002279f, +0.003647f, -0.003622f, +0.002729f, -0.001899f, +0.000517f, +0.002233f, - -0.002018f, +0.004242f, +0.000800f, -0.000725f, -0.000351f, +0.004299f, +0.001500f, -0.002920f, +0.003031f, -0.006048f, - -0.000902f, +0.003430f, -0.000665f, -0.001015f, +0.000857f, +0.002415f, -0.000402f, -0.002069f, +0.000088f, -0.000402f, - -0.000228f, -0.000070f, +0.001361f, -0.000979f, -0.000142f, +0.000291f - }, - { - -0.005340f, -0.382441f, +0.000295f, -0.012328f, +0.013760f, +0.001686f, +0.006215f, +0.000576f, +0.020831f, +0.001545f, - -0.021263f, -0.019745f, +0.000707f, +0.004414f, -0.008500f, +0.003360f, +0.006182f, +0.018968f, -0.004263f, -0.010817f, - +0.012975f, +0.012942f, -0.012362f, +0.004067f, -0.001124f, +0.015050f, +0.011745f, +0.008268f, +0.000924f, +0.011268f, - -0.018992f, +0.003533f, -0.012861f, +0.005315f, -0.003576f, +0.001242f, -0.005674f, -0.001675f, +0.001740f, -0.003358f, - -0.014018f, +0.000872f, +0.014414f, +0.002237f, -0.002256f, +0.014120f, -0.014460f, -0.003428f, +0.002022f, +0.007780f, - -0.001585f, -0.009394f, -0.004211f, +0.011527f, +0.004747f, -0.004027f, +0.003935f, -0.002919f, +0.001165f, +0.005529f, - +0.003579f, +0.004794f, -0.000675f, +0.000027f, +0.004468f, +0.007197f, +0.003424f, -0.001946f, -0.002680f, -0.003757f, - +0.002199f, +0.003219f, +0.003468f, +0.003175f, +0.001243f, +0.000253f, -0.006191f, -0.002232f, +0.002888f, +0.001696f, - +0.001742f, +0.002272f, +0.002090f, -0.003577f, -0.002042f, +0.000168f, +0.002625f, -0.000595f, +0.000115f, +0.001041f, - -0.001860f, +0.003056f, -0.000301f, -0.001736f, -0.000566f, +0.002715f - }, - { - -0.006592f, -0.075827f, +0.034423f, +0.010324f, +0.011657f, +0.002482f, +0.003982f, -0.006563f, +0.023342f, -0.010172f, - -0.002260f, -0.021451f, -0.008108f, +0.012030f, +0.015012f, -0.024287f, +0.030345f, +0.003487f, -0.025655f, +0.009306f, - +0.048511f, -0.010520f, +0.001620f, +0.009071f, -0.016210f, -0.013209f, +0.007526f, -0.008702f, -0.009566f, +0.022095f, - +0.009143f, -0.006658f, -0.009474f, -0.004675f, +0.000168f, +0.004862f, +0.003548f, -0.004570f, -0.017273f, -0.008159f, - -0.005379f, +0.015042f, -0.003807f, -0.002752f, -0.002240f, -0.010243f, -0.005797f, -0.013653f, -0.004326f, -0.007992f, - +0.000510f, -0.003015f, -0.003425f, -0.004713f, +0.006956f, -0.000907f, +0.004379f, -0.005592f, -0.004017f, +0.001148f, - +0.003504f, +0.001359f, -0.003654f, +0.005394f, +0.000267f, +0.004761f, +0.004131f, -0.003210f, -0.000994f, -0.006795f, - -0.005229f, -0.000347f, -0.002947f, -0.004001f, +0.000923f, -0.001457f, -0.001466f, +0.003038f, +0.003741f, -0.001224f, - +0.001623f, -0.002103f, +0.002887f, +0.003535f, -0.000853f, +0.002530f, +0.001803f, -0.000742f, -0.000680f, -0.002022f, - +0.000739f, -0.001484f, -0.002400f, +0.002471f, +0.000855f, -0.001636f - }, - { - +0.045068f, +0.219313f, +0.013851f, -0.004823f, -0.003134f, -0.042599f, +0.029310f, +0.025488f, -0.007911f, +0.000171f, - +0.010583f, +0.004260f, +0.015689f, +0.010222f, -0.012646f, -0.005163f, +0.024096f, +0.011210f, +0.001528f, -0.028515f, - -0.008374f, -0.005693f, +0.014204f, +0.003428f, +0.020679f, +0.009232f, -0.004248f, -0.015623f, +0.005926f, +0.007807f, - -0.018930f, +0.007553f, +0.006186f, -0.007572f, -0.004851f, +0.000798f, +0.023461f, -0.002522f, +0.021974f, +0.006615f, - -0.002807f, +0.022250f, -0.002444f, -0.014124f, -0.008855f, +0.010330f, +0.003019f, +0.002512f, +0.005910f, +0.002572f, - -0.005733f, -0.005979f, -0.003948f, -0.002523f, -0.008180f, -0.001448f, -0.003716f, -0.003513f, +0.000241f, -0.001548f, - -0.003867f, -0.005231f, +0.006988f, -0.003154f, +0.002353f, +0.000453f, -0.004745f, -0.000817f, -0.000713f, -0.003414f, - -0.005231f, +0.004248f, +0.004071f, +0.000198f, +0.002888f, -0.001143f, +0.003175f, +0.000231f, +0.003395f, +0.000269f, - -0.000601f, +0.001926f, -0.002234f, -0.001083f, -0.003680f, -0.002878f, -0.001352f, -0.004171f, +0.002454f, -0.000485f, - -0.000378f, +0.002976f, -0.001427f, +0.005088f, -0.000648f, +0.003456f - }, - { - -0.002948f, +0.063847f, +0.016003f, +0.007389f, +0.000463f, +0.003202f, +0.000967f, -0.014590f, +0.002247f, -0.004702f, - +0.002037f, +0.008678f, +0.008856f, +0.030812f, -0.051906f, -0.010807f, +0.008502f, +0.028856f, +0.020909f, +0.020592f, - +0.011353f, -0.047491f, +0.055941f, -0.017581f, +0.038878f, -0.010297f, +0.001253f, -0.010482f, +0.010425f, -0.017226f, - -0.004322f, +0.009515f, -0.019122f, +0.002391f, -0.009043f, +0.010320f, +0.003377f, +0.001042f, +0.017787f, -0.003566f, - -0.002306f, +0.001683f, +0.008552f, +0.010106f, -0.005059f, +0.009778f, +0.001648f, -0.008277f, -0.001759f, +0.007906f, - +0.006653f, +0.002112f, -0.006070f, -0.001265f, -0.012963f, +0.006098f, -0.007071f, +0.000122f, +0.004471f, +0.004944f, - -0.001959f, -0.004499f, +0.003052f, -0.003616f, -0.001945f, +0.002282f, +0.001983f, -0.007175f, +0.007356f, -0.005880f, - +0.004693f, +0.001111f, +0.001280f, +0.004211f, -0.000653f, -0.002213f, -0.000891f, -0.000223f, +0.002191f, +0.001000f, - -0.005245f, -0.001783f, +0.004378f, +0.002328f, -0.002093f, +0.000537f, -0.001441f, +0.003005f, -0.002130f, +0.000088f, - +0.000708f, -0.000845f, -0.001510f, -0.000735f, +0.000542f, +0.000522f - }, - { - +0.050682f, +0.006669f, +0.010230f, +0.005480f, -0.007760f, -0.013160f, +0.002654f, -0.014646f, -0.007164f, +0.013954f, - -0.030797f, +0.023518f, -0.021654f, +0.055475f, -0.051056f, +0.003631f, +0.030652f, +0.013143f, -0.018100f, -0.006077f, - +0.002033f, +0.003070f, -0.007625f, -0.018642f, -0.012370f, +0.013504f, +0.008478f, +0.003409f, -0.013554f, -0.009952f, - +0.006216f, +0.004850f, -0.000220f, -0.011801f, -0.008647f, -0.004792f, +0.005841f, +0.008963f, +0.008442f, -0.010182f, - -0.002063f, -0.012524f, +0.019177f, +0.006523f, -0.005612f, +0.016762f, -0.007546f, +0.002818f, -0.001699f, -0.000793f, - -0.013658f, -0.000699f, +0.004205f, +0.000990f, -0.000454f, +0.005486f, -0.000554f, -0.003152f, -0.003840f, +0.008181f, - -0.000881f, +0.004677f, +0.000357f, -0.007390f, +0.002499f, +0.004266f, -0.002317f, +0.004184f, -0.000513f, +0.005452f, - -0.003813f, -0.002397f, +0.001617f, +0.007040f, +0.004957f, -0.002924f, -0.000345f, +0.003845f, +0.003691f, +0.000185f, - -0.000485f, +0.005194f, +0.002964f, +0.001086f, +0.000571f, +0.005637f, +0.000458f, -0.003351f, -0.001642f, +0.002321f, - -0.001999f, +0.002499f, -0.000038f, -0.001037f, -0.000809f, -0.000305f - }, - { - +0.012427f, -0.001131f, -0.014686f, +0.013572f, +0.002325f, -0.005339f, +0.002757f, +0.013296f, +0.001141f, +0.010699f, - -0.004921f, -0.015143f, -0.004613f, -0.003544f, -0.054753f, +0.004476f, +0.034113f, -0.000322f, +0.004185f, +0.012886f, - -0.021103f, -0.019076f, -0.021063f, -0.002348f, +0.008128f, -0.007062f, -0.003301f, +0.020517f, +0.009895f, +0.019443f, - -0.025989f, -0.021410f, -0.004021f, +0.004959f, +0.007878f, -0.025243f, -0.010717f, +0.000714f, -0.010238f, -0.006563f, - +0.009287f, -0.004131f, -0.009883f, -0.006765f, -0.007782f, +0.004872f, -0.003272f, -0.004622f, -0.000366f, -0.000561f, - +0.002150f, -0.000877f, -0.009043f, +0.002455f, +0.005708f, +0.003132f, +0.005717f, -0.001090f, -0.006183f, -0.006860f, - -0.001922f, -0.002924f, +0.004203f, -0.008181f, +0.000115f, -0.001638f, +0.005293f, -0.004995f, -0.003085f, -0.003100f, - -0.001197f, -0.005558f, -0.005299f, -0.001547f, -0.007043f, +0.002064f, +0.000955f, -0.000751f, -0.003802f, +0.000628f, - +0.005531f, -0.007039f, +0.003971f, +0.000844f, -0.000530f, -0.001723f, +0.003402f, +0.001329f, +0.000808f, -0.000842f, - -0.001351f, +0.000202f, -0.001345f, +0.000905f, +0.001291f, +0.001898f - } - }, - { - { - -0.045963f, +0.163833f, +0.111563f, -0.032052f, +0.002102f, +0.003805f, +0.016171f, +0.001521f, -0.010484f, -0.039157f, - -0.018949f, -0.060641f, +0.009196f, -0.037046f, +0.003152f, +0.015591f, -0.002655f, +0.014579f, +0.015162f, +0.001955f, - +0.013456f, -0.003680f, -0.011640f, -0.007548f, -0.017575f, -0.008351f, +0.013449f, -0.012200f, -0.029508f, -0.005837f, - -0.030484f, -0.006107f, +0.000894f, +0.003227f, +0.002074f, +0.024992f, -0.013166f, -0.002138f, -0.002693f, +0.007367f, - +0.007301f, -0.000473f, +0.008619f, -0.004097f, -0.011429f, -0.003891f, -0.006642f, +0.017553f, -0.004184f, +0.002913f, - -0.011257f, +0.006939f, -0.001983f, -0.002006f, +0.010277f, -0.004923f, +0.003815f, +0.008698f, +0.023590f, -0.009292f, - +0.006388f, -0.001108f, -0.010179f, +0.001125f, +0.000566f, +0.002547f, +0.004008f, -0.003626f, +0.001614f, -0.003030f, - +0.004298f, +0.000031f, -0.000233f, -0.002753f, +0.005005f, +0.001091f, +0.001082f, -0.002335f, +0.001840f, -0.001998f, - +0.000387f, -0.000543f, +0.001875f, +0.002094f, -0.000098f, -0.001560f, +0.000299f, +0.004463f, -0.002923f, -0.001433f, - +0.000028f, -0.002405f, +0.002453f, +0.001532f, -0.000111f, -0.001364f - }, - { - -0.000018f, -0.043804f, -0.018253f, -0.007911f, +0.005997f, +0.002049f, -0.000697f, +0.010571f, -0.008157f, +0.007604f, - +0.018115f, -0.009747f, -0.016065f, +0.019654f, -0.048277f, +0.014491f, -0.002251f, -0.001937f, -0.013652f, +0.051239f, - -0.005932f, -0.050120f, -0.001849f, -0.019261f, -0.032129f, +0.002288f, +0.010234f, -0.018424f, +0.037635f, -0.000863f, - +0.009351f, +0.018293f, -0.000571f, +0.008392f, -0.021181f, -0.015491f, -0.006385f, -0.008746f, -0.007154f, +0.010438f, - +0.003060f, -0.005973f, -0.008408f, -0.005034f, -0.000173f, +0.005938f, -0.007734f, -0.003745f, -0.003261f, -0.000468f, - +0.008928f, +0.004188f, +0.001073f, -0.007889f, +0.001000f, -0.004315f, -0.001584f, +0.005202f, -0.010014f, -0.000268f, - +0.007988f, -0.004119f, -0.001025f, +0.002947f, +0.005665f, +0.000158f, +0.001033f, -0.001418f, +0.001710f, +0.000883f, - -0.002538f, -0.002236f, -0.003151f, +0.004678f, +0.001980f, +0.005595f, +0.001642f, +0.001484f, -0.001445f, -0.002911f, - +0.001378f, +0.000829f, +0.000362f, -0.002298f, -0.000861f, -0.000712f, +0.000135f, -0.000466f, -0.004225f, -0.003304f, - -0.001913f, +0.001069f, +0.002507f, -0.000834f, -0.003093f, -0.001304f - }, - { - +0.003609f, +0.221546f, +0.001904f, -0.021689f, -0.004448f, -0.005890f, -0.007477f, +0.000999f, -0.006279f, +0.013641f, - +0.023906f, -0.010522f, -0.008157f, +0.019922f, -0.001508f, +0.013058f, -0.025473f, +0.057604f, -0.021762f, +0.025913f, - +0.019303f, -0.017510f, +0.000498f, +0.006260f, +0.004658f, +0.000071f, +0.001931f, -0.013514f, +0.007881f, +0.012588f, - +0.011685f, +0.008850f, -0.013156f, -0.001599f, +0.011001f, -0.001556f, -0.008964f, +0.004728f, -0.001101f, +0.025099f, - -0.008289f, -0.003499f, -0.002638f, +0.003383f, +0.000904f, +0.002823f, -0.000731f, +0.002410f, -0.001513f, +0.015442f, - -0.003407f, -0.008171f, +0.005145f, -0.000653f, -0.009953f, +0.001864f, -0.011049f, +0.004772f, +0.001448f, +0.005642f, - +0.005874f, -0.000097f, +0.003040f, +0.000421f, +0.005580f, -0.001499f, -0.003654f, +0.006605f, -0.001139f, +0.006198f, - -0.004022f, -0.000131f, -0.000419f, -0.003547f, +0.001842f, +0.001545f, +0.001399f, +0.001768f, +0.007610f, +0.003508f, - +0.000236f, +0.001224f, -0.000168f, +0.000528f, +0.002811f, -0.002220f, +0.001981f, -0.000046f, +0.003797f, +0.000537f, - +0.000292f, +0.003637f, -0.002021f, +0.002270f, -0.000390f, +0.000912f - }, - { - -0.085083f, -0.082196f, +0.019797f, +0.064092f, +0.010870f, -0.001388f, -0.017058f, +0.009004f, -0.002385f, +0.006260f, - -0.001734f, +0.005537f, +0.008962f, +0.030006f, -0.002865f, -0.014876f, -0.001358f, -0.010242f, -0.023418f, -0.007732f, - +0.018260f, -0.013879f, -0.021274f, +0.003716f, +0.013157f, -0.021764f, +0.004040f, -0.015757f, -0.014266f, -0.004172f, - -0.000037f, -0.006205f, -0.016597f, -0.003515f, +0.015118f, +0.003595f, +0.003781f, -0.009862f, +0.003532f, +0.007068f, - +0.008919f, +0.011279f, -0.009272f, +0.003952f, +0.006096f, +0.013141f, -0.007669f, -0.005518f, +0.001817f, -0.009944f, - +0.004346f, -0.004584f, +0.002529f, +0.011038f, -0.002581f, +0.004740f, +0.006041f, +0.001765f, +0.001058f, -0.002683f, - -0.007008f, +0.002344f, -0.008859f, +0.003881f, -0.004854f, -0.004425f, -0.000221f, -0.000473f, -0.002610f, -0.000949f, - -0.007686f, -0.000078f, +0.003789f, +0.001758f, +0.001536f, -0.002695f, +0.001657f, -0.001575f, -0.000742f, -0.002468f, - -0.001699f, +0.001598f, +0.000863f, -0.000293f, +0.000844f, +0.000672f, -0.001474f, -0.001321f, +0.003208f, -0.002964f, - -0.001025f, -0.000379f, -0.001152f, +0.001261f, -0.001124f, +0.002944f - }, - { - +0.000227f, +0.047349f, +0.003151f, +0.011168f, -0.000679f, +0.000208f, -0.000775f, -0.003328f, +0.000655f, -0.003736f, - -0.003329f, +0.017517f, -0.000519f, -0.010408f, -0.009311f, +0.007005f, +0.025441f, +0.033475f, -0.078973f, -0.049654f, - +0.006841f, +0.021762f, +0.000959f, +0.018808f, +0.012613f, +0.017702f, +0.046538f, -0.014079f, +0.010471f, -0.018128f, - -0.018613f, +0.001535f, -0.024125f, -0.022473f, +0.004138f, -0.020647f, +0.005879f, -0.005565f, -0.008623f, -0.003724f, - -0.017910f, +0.002769f, -0.010829f, +0.009193f, -0.009809f, +0.020316f, -0.019874f, -0.006902f, +0.013499f, +0.002265f, - -0.005334f, +0.003311f, +0.005053f, +0.000611f, -0.000226f, -0.003755f, +0.001054f, +0.003231f, -0.002343f, +0.003996f, - -0.008172f, -0.000038f, +0.000128f, -0.001141f, +0.000418f, -0.001811f, +0.004170f, +0.004544f, -0.003896f, +0.000975f, - +0.001374f, -0.001146f, +0.000374f, -0.000456f, -0.008860f, +0.001402f, +0.002629f, -0.001783f, -0.001780f, -0.002000f, - -0.000064f, -0.001268f, +0.001177f, +0.000223f, -0.001861f, +0.003361f, +0.000446f, -0.000443f, +0.000323f, +0.000443f, - +0.001410f, +0.000100f, -0.001803f, +0.000717f, +0.000732f, -0.000640f - }, - { - -0.126852f, -0.192473f, +0.050064f, +0.009752f, +0.010968f, +0.002194f, -0.001301f, +0.004779f, -0.018250f, +0.000446f, - -0.019317f, +0.004933f, -0.012386f, +0.014275f, -0.020382f, -0.009313f, -0.014012f, -0.017991f, +0.001029f, -0.013576f, - -0.009145f, +0.009236f, +0.003642f, +0.012804f, -0.002835f, +0.014125f, -0.015377f, -0.003380f, +0.020453f, +0.016407f, - +0.002936f, +0.002833f, +0.006808f, -0.015759f, -0.001064f, +0.009563f, +0.016649f, +0.001750f, -0.010714f, +0.000685f, - +0.001275f, +0.002065f, +0.016131f, -0.002477f, -0.008509f, +0.003511f, +0.005414f, +0.003071f, -0.005369f, +0.012922f, - -0.004474f, -0.007222f, -0.005711f, -0.000292f, -0.010204f, +0.005726f, -0.006168f, +0.002978f, +0.000808f, +0.000015f, - +0.004635f, -0.001171f, -0.005216f, -0.009248f, +0.000455f, +0.005905f, -0.003142f, -0.001153f, -0.000116f, -0.001518f, - -0.001239f, +0.004955f, -0.000999f, +0.004998f, +0.001224f, -0.000002f, +0.001611f, +0.002568f, -0.000814f, +0.001475f, - -0.001477f, +0.006181f, -0.002046f, +0.004287f, -0.002895f, -0.000449f, -0.001480f, +0.000738f, -0.000388f, -0.000748f, - +0.000209f, -0.000852f, -0.001986f, +0.001954f, +0.001194f, -0.000917f - }, - { - +0.000171f, +0.000602f, -0.003044f, -0.005589f, +0.004975f, +0.001510f, +0.000684f, -0.002614f, +0.000084f, +0.003070f, - -0.004760f, +0.016277f, -0.004581f, +0.007084f, +0.020902f, +0.024051f, -0.009552f, -0.002096f, +0.018566f, +0.037398f, - +0.013425f, -0.007472f, +0.041476f, -0.051645f, -0.029741f, +0.028875f, -0.021505f, +0.009454f, -0.005665f, +0.006540f, - -0.002105f, -0.008516f, +0.021904f, -0.007685f, -0.018398f, +0.005548f, -0.009325f, -0.009047f, -0.013617f, +0.005106f, - -0.009071f, -0.000050f, +0.005703f, -0.012585f, +0.001729f, -0.003165f, -0.001269f, -0.011703f, -0.000218f, -0.004795f, - -0.003517f, +0.001625f, -0.002859f, -0.006312f, -0.005744f, +0.005731f, +0.000267f, -0.005553f, +0.000491f, +0.004445f, - +0.005854f, +0.003792f, +0.004033f, +0.002690f, +0.004737f, +0.001330f, -0.006942f, -0.001095f, +0.000987f, +0.001349f, - -0.004201f, +0.000400f, -0.002261f, +0.001459f, -0.002671f, -0.003832f, -0.000943f, +0.003986f, +0.002887f, +0.003737f, - +0.000430f, -0.002755f, +0.001126f, -0.001121f, +0.001599f, -0.000407f, -0.000228f, +0.004819f, -0.000078f, -0.000023f, - +0.004132f, -0.000055f, -0.000596f, +0.001928f, -0.000275f, +0.000876f - }, - { - +0.098615f, -0.674445f, -0.035183f, -0.044492f, -0.039930f, -0.016907f, +0.006153f, -0.012127f, +0.014818f, -0.008116f, - -0.005860f, +0.011796f, +0.032417f, -0.027883f, +0.035302f, +0.003680f, +0.002582f, -0.008921f, -0.005676f, -0.010612f, - -0.005658f, +0.027648f, +0.036950f, +0.015018f, -0.023359f, -0.001192f, -0.010617f, -0.011353f, +0.020236f, -0.002998f, - -0.016289f, -0.004301f, +0.005231f, -0.001384f, -0.012398f, -0.027629f, -0.021544f, +0.004012f, +0.000043f, +0.003213f, - -0.000889f, -0.005001f, +0.007436f, +0.013174f, +0.001519f, -0.003212f, -0.000064f, -0.009013f, +0.002014f, -0.001954f, - -0.007525f, +0.007378f, +0.000107f, +0.003928f, +0.019849f, -0.000908f, -0.001545f, -0.000026f, -0.005319f, +0.003769f, - +0.000370f, -0.000646f, +0.004360f, -0.000452f, -0.002494f, +0.003703f, +0.002149f, +0.000685f, +0.002142f, +0.001650f, - -0.002965f, +0.000354f, -0.002770f, +0.001534f, -0.001571f, -0.000662f, +0.003060f, -0.000822f, +0.002799f, -0.001610f, - -0.001228f, -0.000173f, -0.001578f, -0.000705f, -0.002624f, +0.001529f, +0.004385f, +0.000607f, -0.002890f, -0.002550f, - +0.002298f, -0.000645f, +0.000362f, +0.002710f, -0.001341f, -0.001282f - }, - { - +0.000094f, -0.023787f, -0.007783f, +0.005627f, +0.003905f, -0.000250f, -0.002942f, +0.005423f, -0.014911f, +0.002960f, - +0.007738f, -0.000761f, +0.001250f, -0.006325f, -0.093919f, -0.006651f, -0.019299f, +0.020324f, -0.025312f, -0.010148f, - +0.002383f, -0.014464f, -0.001734f, -0.029212f, -0.005131f, -0.028618f, +0.010695f, -0.001907f, +0.028586f, +0.009819f, - -0.015385f, +0.010631f, -0.003688f, +0.018621f, -0.003602f, +0.007534f, +0.006699f, +0.010043f, +0.007596f, -0.007841f, - -0.010215f, +0.002168f, -0.008939f, +0.014530f, -0.017131f, +0.000320f, -0.009491f, +0.010236f, +0.004360f, -0.011584f, - +0.004070f, +0.007770f, -0.012207f, +0.005695f, -0.002401f, -0.003807f, -0.005979f, +0.004533f, +0.000815f, -0.001976f, - -0.003550f, -0.000094f, -0.000968f, +0.005957f, +0.000708f, -0.000147f, +0.000508f, -0.004161f, +0.000140f, +0.002005f, - +0.001900f, -0.003578f, +0.007225f, +0.002255f, -0.003956f, +0.003475f, -0.000556f, +0.000707f, -0.003938f, -0.001416f, - -0.000408f, +0.002217f, +0.000021f, -0.001924f, +0.004517f, -0.000712f, +0.000161f, -0.002772f, -0.000561f, -0.001142f, - +0.000931f, +0.000468f, +0.001217f, +0.000055f, -0.002363f, +0.001824f - }, - { - -0.000237f, -0.441584f, +0.031917f, +0.002057f, +0.009029f, +0.033917f, -0.027739f, +0.017940f, +0.016134f, +0.015696f, - -0.029620f, -0.014945f, +0.012061f, +0.018278f, -0.008437f, -0.002018f, +0.034353f, +0.004695f, -0.008564f, -0.022991f, - +0.021595f, -0.006388f, -0.002349f, -0.005764f, +0.016377f, -0.000013f, +0.015855f, +0.006694f, -0.008803f, +0.017749f, - -0.017592f, +0.006616f, -0.014911f, -0.003699f, +0.007601f, -0.001757f, +0.008258f, +0.001119f, -0.015621f, -0.002831f, - -0.005597f, -0.008019f, +0.014615f, +0.004953f, -0.006446f, +0.007400f, -0.003340f, -0.004836f, -0.002252f, +0.006163f, - -0.003685f, -0.000285f, -0.006213f, +0.008139f, +0.007007f, -0.002785f, +0.000304f, +0.000950f, +0.001011f, +0.008154f, - +0.007382f, +0.003314f, -0.005061f, -0.002803f, +0.007960f, +0.006661f, +0.000859f, +0.004475f, -0.010933f, +0.003064f, - -0.000514f, -0.000342f, +0.006189f, +0.003056f, +0.003775f, -0.003175f, -0.009812f, +0.004903f, -0.001533f, +0.001041f, - +0.003162f, +0.005692f, -0.001815f, -0.003446f, -0.002118f, -0.000814f, +0.001210f, +0.002638f, -0.001032f, -0.003437f, - +0.003442f, -0.001324f, +0.001597f, -0.003293f, +0.000805f, -0.001215f - }, - { - +0.007007f, -0.036455f, -0.021655f, +0.013806f, +0.023305f, -0.019139f, +0.009065f, +0.001101f, +0.016280f, -0.016056f, - -0.000436f, -0.031659f, +0.011232f, +0.003832f, +0.003116f, -0.023188f, +0.033987f, -0.000260f, +0.000492f, +0.010263f, - +0.013486f, +0.013981f, +0.003048f, -0.009710f, +0.005825f, -0.012038f, -0.005872f, +0.004892f, -0.005246f, +0.009320f, - +0.015525f, -0.012734f, +0.008333f, -0.002809f, +0.009150f, -0.007772f, -0.007866f, -0.000244f, -0.010090f, -0.009298f, - -0.001041f, +0.016917f, -0.005489f, -0.004275f, -0.003370f, -0.007230f, -0.009725f, -0.005129f, -0.006862f, -0.011050f, - -0.008157f, -0.003480f, +0.004534f, +0.000466f, +0.002413f, +0.004001f, -0.002914f, -0.004520f, -0.000723f, -0.000476f, - +0.000701f, -0.004604f, +0.006078f, -0.003074f, +0.001177f, +0.005718f, +0.000838f, -0.005493f, +0.002572f, -0.006353f, - -0.004591f, +0.000362f, -0.003942f, -0.002729f, -0.001608f, +0.000777f, -0.000849f, +0.000571f, +0.004948f, -0.003480f, - +0.002796f, +0.000418f, +0.000144f, +0.003731f, +0.002573f, +0.000781f, +0.001608f, -0.001248f, +0.001211f, -0.002815f, - -0.000929f, -0.001532f, -0.000356f, +0.001060f, -0.000959f, +0.001901f - }, - { - +0.007824f, +0.287800f, -0.010922f, +0.012412f, -0.005784f, -0.018990f, +0.011667f, -0.008078f, +0.023714f, +0.022911f, - -0.000978f, +0.015369f, +0.006829f, -0.006075f, -0.021295f, +0.016768f, +0.017599f, +0.008064f, +0.001081f, -0.050076f, - +0.010113f, +0.001785f, +0.002463f, -0.017057f, +0.036886f, +0.018037f, -0.012962f, -0.009697f, +0.004399f, -0.006357f, - +0.009991f, +0.009114f, -0.009769f, +0.002043f, -0.000210f, -0.001967f, +0.015647f, +0.017929f, +0.004705f, +0.005690f, - +0.003422f, +0.015441f, +0.004367f, -0.021256f, +0.001916f, +0.000586f, +0.012147f, -0.000124f, +0.004261f, -0.000643f, - -0.006119f, -0.006256f, -0.010680f, -0.000282f, -0.001216f, -0.005697f, -0.006633f, +0.002179f, -0.005373f, +0.001146f, - -0.010483f, +0.003363f, +0.001720f, +0.004943f, -0.003882f, +0.000653f, -0.003144f, -0.002361f, +0.007058f, -0.009142f, - -0.005960f, +0.006597f, -0.001280f, +0.001988f, -0.000276f, +0.000083f, +0.003071f, +0.000036f, +0.003046f, +0.003731f, - +0.000765f, -0.003872f, -0.001116f, +0.000456f, -0.004275f, -0.002321f, -0.002934f, -0.002266f, +0.001484f, +0.001334f, - -0.000326f, +0.001018f, +0.001066f, +0.001341f, +0.002470f, +0.000509f - }, - { - +0.000546f, +0.095320f, -0.011316f, +0.010856f, -0.000354f, -0.001227f, -0.000081f, -0.006834f, -0.006442f, +0.001094f, - -0.000933f, +0.004384f, +0.000727f, +0.034487f, -0.048314f, -0.004628f, +0.026882f, +0.054809f, -0.010256f, +0.034055f, - +0.013704f, +0.014932f, -0.020825f, +0.006065f, +0.031106f, -0.034004f, +0.012893f, -0.006141f, -0.020049f, +0.032240f, - -0.022224f, +0.000336f, -0.016096f, -0.000609f, -0.006162f, -0.008017f, +0.015415f, +0.003165f, +0.027330f, -0.012525f, - +0.006022f, -0.009605f, +0.007716f, +0.001329f, +0.000460f, +0.010109f, +0.000556f, -0.009110f, +0.001107f, +0.015329f, - +0.004525f, -0.005482f, -0.008527f, +0.000844f, -0.003996f, +0.004540f, -0.009539f, +0.006518f, -0.003031f, +0.004627f, - +0.004931f, +0.005780f, -0.007573f, -0.000653f, -0.002614f, +0.003042f, -0.005337f, +0.004202f, -0.001381f, -0.003623f, - +0.000530f, +0.006084f, -0.000070f, +0.003047f, +0.002841f, -0.003165f, -0.001276f, -0.000593f, +0.004765f, -0.004310f, - -0.003081f, -0.000816f, +0.003403f, +0.001043f, -0.000097f, -0.000404f, +0.001099f, -0.001510f, -0.000129f, +0.000558f, - -0.001083f, +0.000370f, -0.005513f, +0.002068f, -0.000732f, -0.000694f - }, - { - -0.045109f, +0.150568f, +0.003273f, +0.002362f, -0.011242f, -0.008465f, +0.006066f, -0.012633f, -0.005102f, -0.003444f, - +0.006614f, -0.026617f, +0.004190f, +0.034993f, -0.029287f, -0.015106f, +0.054234f, +0.003437f, +0.007366f, -0.012172f, - +0.012603f, +0.002087f, -0.021541f, -0.011636f, -0.011413f, +0.017284f, -0.003841f, -0.009906f, +0.012834f, -0.024249f, - +0.005499f, -0.005724f, +0.002313f, +0.000986f, +0.005057f, -0.012992f, -0.011478f, +0.022025f, +0.003252f, +0.008117f, - -0.006407f, -0.005819f, -0.001958f, +0.010893f, -0.000577f, +0.013332f, +0.007579f, -0.013137f, +0.002587f, -0.003881f, - -0.011586f, +0.005255f, +0.002709f, -0.000671f, +0.003493f, +0.003579f, +0.003644f, -0.000226f, -0.010613f, +0.001694f, - +0.006066f, +0.003249f, -0.000867f, -0.006120f, +0.002816f, -0.000595f, +0.005628f, -0.003056f, +0.004020f, +0.007034f, - -0.006340f, -0.002521f, -0.002680f, +0.003873f, +0.006916f, -0.001223f, +0.004285f, +0.002217f, +0.001667f, +0.002864f, - +0.001723f, +0.001660f, +0.004598f, +0.000529f, +0.002493f, +0.000562f, +0.002592f, -0.004435f, -0.000629f, +0.002123f, - +0.001206f, -0.001127f, +0.002577f, -0.002415f, -0.000649f, +0.000669f - }, - { - -0.012570f, -0.011872f, +0.018445f, +0.001862f, +0.007362f, -0.003769f, +0.000584f, +0.016298f, +0.001847f, +0.006385f, - -0.004315f, -0.004977f, +0.000742f, -0.019816f, -0.030189f, -0.021438f, +0.015981f, +0.024803f, +0.006739f, +0.025689f, - -0.043885f, -0.014500f, -0.031935f, +0.016155f, +0.001947f, -0.006594f, -0.002032f, +0.050689f, -0.018698f, +0.019761f, - -0.008689f, -0.028362f, +0.020425f, -0.015496f, +0.022259f, -0.020096f, -0.023589f, -0.006730f, -0.002007f, +0.014483f, - -0.023518f, +0.015476f, -0.017767f, -0.002791f, -0.012033f, -0.009985f, -0.001146f, -0.000651f, +0.007895f, -0.007480f, - -0.001068f, -0.000637f, -0.004932f, +0.006500f, +0.001610f, +0.002510f, -0.004461f, +0.001515f, -0.006902f, -0.006378f, - +0.002935f, -0.007088f, -0.004911f, -0.001260f, +0.002842f, -0.000370f, +0.004663f, -0.002535f, -0.006788f, -0.000905f, - -0.001123f, -0.008629f, -0.005974f, -0.000054f, -0.002634f, +0.001275f, +0.000116f, -0.000011f, -0.005077f, +0.003819f, - -0.001518f, -0.001696f, +0.001192f, +0.001485f, -0.002539f, +0.000113f, +0.003948f, -0.000912f, +0.001741f, -0.000021f, - -0.000401f, -0.000491f, -0.000892f, -0.000878f, +0.000531f, +0.003208f - } - }, - { - { - +0.044511f, +0.150812f, -0.000863f, -0.017263f, -0.000976f, +0.000479f, +0.012309f, -0.025211f, -0.010262f, -0.000592f, - +0.007180f, -0.055193f, +0.005657f, -0.017072f, +0.013435f, -0.002911f, -0.009941f, +0.011438f, +0.007771f, -0.010100f, - +0.002913f, +0.002606f, -0.012422f, -0.029952f, -0.035092f, -0.012112f, +0.015980f, +0.004196f, -0.008586f, +0.002354f, - -0.021314f, +0.003192f, +0.006711f, +0.009919f, -0.002898f, +0.026099f, -0.007825f, +0.001165f, +0.009657f, +0.001685f, - +0.002244f, +0.000629f, +0.003443f, -0.000628f, -0.003540f, +0.001858f, -0.009166f, +0.015234f, -0.002629f, +0.010471f, - -0.007585f, +0.000706f, -0.001347f, -0.006614f, +0.002642f, -0.004021f, -0.010981f, -0.014123f, +0.015882f, -0.006216f, - +0.004157f, -0.002033f, -0.006656f, +0.006430f, -0.000043f, -0.002712f, +0.005536f, -0.004517f, -0.000327f, -0.004796f, - +0.003681f, +0.002890f, +0.001521f, -0.003879f, +0.001857f, -0.000269f, +0.001118f, -0.002138f, +0.002118f, -0.001748f, - +0.002208f, +0.002760f, +0.002287f, +0.002744f, -0.001333f, -0.002444f, +0.001070f, +0.004224f, -0.002141f, +0.000891f, - -0.002013f, -0.003546f, +0.003807f, -0.000444f, +0.000122f, -0.001180f - }, - { - -0.000934f, +0.029024f, +0.046258f, -0.021433f, -0.010824f, -0.000354f, -0.001483f, +0.018022f, -0.015981f, -0.010767f, - +0.001238f, -0.018674f, -0.010069f, +0.049093f, -0.022272f, -0.010900f, -0.023816f, +0.003587f, -0.010251f, +0.024882f, - -0.006934f, -0.011868f, +0.015718f, -0.034185f, -0.019181f, +0.027538f, +0.022552f, -0.031457f, +0.011669f, -0.011161f, - +0.010560f, +0.019430f, +0.004499f, +0.006163f, -0.014405f, +0.001179f, +0.015328f, +0.003376f, -0.012529f, -0.001709f, - +0.003920f, +0.001685f, +0.008336f, -0.001363f, -0.002852f, +0.003315f, -0.000954f, +0.000676f, -0.000698f, -0.000781f, - -0.000689f, +0.005614f, +0.015195f, +0.000655f, +0.003756f, -0.006915f, -0.007149f, +0.000865f, -0.010891f, +0.000712f, - +0.011078f, +0.002013f, +0.001989f, +0.002728f, +0.004858f, -0.003936f, +0.002897f, +0.005541f, +0.002028f, -0.002585f, - -0.002263f, -0.002814f, -0.009217f, +0.000433f, -0.003104f, +0.001570f, +0.000636f, -0.000386f, -0.002268f, -0.003682f, - +0.002342f, +0.001513f, +0.001358f, -0.001284f, +0.000894f, -0.000328f, +0.000680f, +0.002201f, -0.000395f, +0.000961f, - -0.000097f, +0.002515f, +0.003434f, +0.001239f, -0.001445f, -0.002246f - }, - { - -0.001372f, +0.168042f, -0.036140f, -0.011294f, +0.010460f, +0.003704f, -0.008460f, +0.009757f, -0.007564f, +0.007795f, - +0.020254f, -0.013344f, -0.007686f, +0.019512f, +0.012269f, +0.022694f, -0.026681f, +0.047691f, -0.043378f, +0.009536f, - +0.019535f, -0.020957f, -0.001731f, -0.003543f, +0.007238f, +0.013354f, +0.005515f, -0.003960f, -0.000832f, -0.001459f, - -0.006969f, -0.010009f, -0.020769f, +0.001066f, +0.004860f, -0.005271f, -0.001821f, +0.006856f, -0.006259f, +0.016638f, - -0.018307f, -0.010095f, +0.008093f, +0.015164f, -0.004507f, -0.004841f, -0.001729f, +0.005673f, -0.007396f, +0.018957f, - +0.002386f, -0.008320f, +0.007081f, -0.000341f, -0.013125f, -0.002717f, -0.012703f, +0.006287f, +0.000909f, +0.002594f, - +0.000108f, -0.006297f, -0.001008f, -0.002877f, +0.003965f, -0.000110f, -0.003005f, +0.006154f, -0.000682f, +0.004497f, - -0.006042f, +0.000758f, +0.005074f, +0.000528f, +0.002887f, -0.001974f, -0.003419f, -0.001317f, +0.002799f, +0.000218f, - -0.002813f, -0.000531f, +0.000862f, -0.001564f, -0.000196f, -0.001700f, +0.003342f, -0.001652f, +0.001038f, +0.000206f, - -0.002161f, +0.001341f, -0.001167f, +0.003088f, -0.001767f, +0.000558f - }, - { - +0.108590f, +0.106534f, -0.045156f, +0.041173f, +0.007920f, +0.001055f, -0.019428f, +0.023168f, +0.006765f, +0.022402f, - -0.010076f, -0.008992f, +0.012696f, +0.028842f, +0.003969f, +0.013214f, +0.020229f, +0.012098f, -0.010695f, -0.025365f, - +0.016106f, +0.004167f, -0.012628f, -0.006526f, +0.001420f, -0.030492f, +0.002512f, -0.008696f, -0.005910f, +0.003285f, - -0.000575f, +0.003805f, -0.005897f, -0.007472f, +0.016190f, +0.005026f, +0.012737f, +0.004412f, +0.015458f, +0.017604f, - +0.002569f, +0.004242f, -0.007271f, -0.003462f, -0.006111f, +0.015655f, +0.002142f, -0.002646f, -0.000076f, -0.016610f, - +0.005138f, -0.005759f, -0.000004f, +0.012788f, -0.001923f, -0.001703f, +0.002537f, +0.002730f, +0.001343f, +0.001032f, - -0.001951f, +0.006117f, -0.008220f, +0.005877f, -0.000919f, -0.001939f, +0.001008f, -0.004413f, -0.005091f, +0.002696f, - -0.004504f, -0.001875f, +0.000759f, +0.002093f, +0.001394f, -0.004209f, -0.000026f, -0.003374f, -0.000204f, -0.000057f, - -0.000041f, +0.001614f, +0.001428f, +0.001177f, +0.001546f, +0.000094f, -0.000228f, -0.002765f, +0.000777f, -0.002348f, - +0.000252f, -0.000336f, -0.002819f, -0.001081f, -0.001394f, +0.002774f - }, - { - +0.001274f, +0.046045f, +0.001090f, +0.002252f, -0.006788f, -0.002870f, -0.000017f, +0.006692f, +0.004538f, -0.001802f, - -0.002441f, +0.007211f, -0.016478f, -0.019944f, -0.043071f, -0.068301f, -0.020043f, +0.090120f, +0.003543f, -0.014349f, - +0.003998f, -0.014836f, -0.018318f, +0.022840f, +0.018210f, -0.020179f, +0.012659f, -0.015473f, +0.015467f, -0.023949f, - -0.011433f, -0.002549f, -0.027278f, -0.014508f, +0.018402f, -0.017248f, -0.003842f, +0.005258f, -0.005161f, +0.004953f, - -0.011977f, +0.002560f, -0.005117f, +0.001885f, -0.020043f, +0.023465f, -0.011383f, -0.007450f, +0.006112f, +0.001859f, - -0.003044f, -0.004636f, +0.002466f, +0.001555f, +0.000113f, -0.000774f, +0.004600f, +0.005813f, -0.006766f, +0.004077f, - -0.007339f, -0.003003f, +0.002729f, +0.003771f, +0.001950f, -0.000809f, +0.006769f, +0.004542f, -0.002970f, +0.003013f, - -0.004756f, -0.004638f, +0.003606f, +0.002429f, -0.006951f, +0.001609f, +0.006026f, +0.000723f, +0.000297f, +0.000476f, - +0.001662f, -0.001805f, -0.003488f, +0.000659f, -0.000260f, +0.003616f, +0.001290f, -0.000714f, +0.001052f, +0.000015f, - +0.001622f, -0.000573f, -0.002913f, -0.000176f, +0.000269f, +0.000441f - }, - { - +0.156162f, +0.059148f, -0.061189f, -0.006243f, +0.000012f, -0.007901f, +0.011933f, +0.022525f, -0.037669f, +0.004175f, - -0.003733f, +0.023916f, +0.007283f, -0.007481f, -0.020024f, -0.005354f, -0.016675f, -0.001274f, +0.021797f, +0.007274f, - +0.018271f, +0.009520f, -0.005237f, +0.015848f, -0.011642f, +0.011437f, -0.006256f, -0.006384f, +0.000060f, +0.004331f, - -0.018703f, -0.018879f, +0.004273f, -0.015344f, -0.004874f, +0.007741f, +0.008242f, +0.003189f, -0.005858f, +0.003476f, - +0.004199f, -0.007640f, +0.005908f, -0.005590f, -0.008215f, +0.002723f, +0.002584f, +0.002722f, -0.009466f, +0.006836f, - -0.005306f, +0.002707f, +0.004666f, +0.001791f, -0.010064f, +0.005182f, -0.004609f, +0.004648f, +0.000146f, -0.001513f, - +0.000145f, -0.000791f, +0.004578f, -0.000561f, +0.000991f, +0.002738f, -0.006423f, -0.004864f, +0.000216f, +0.003058f, - -0.000604f, +0.004422f, -0.001941f, +0.004860f, -0.000761f, -0.002798f, -0.001585f, -0.002366f, -0.000417f, +0.003507f, - -0.002348f, +0.004618f, -0.005454f, +0.000979f, +0.000614f, +0.002219f, -0.001812f, +0.001058f, +0.001066f, +0.001457f, - -0.000981f, -0.000972f, -0.001650f, -0.001231f, -0.000480f, -0.000513f - }, - { - +0.001356f, +0.025442f, +0.013954f, -0.010968f, -0.003180f, -0.000183f, -0.000347f, -0.002988f, +0.001303f, -0.008658f, - -0.014773f, +0.005262f, -0.019425f, -0.027250f, -0.010387f, -0.024852f, -0.068497f, -0.027094f, +0.002725f, +0.010588f, - +0.015374f, -0.002346f, +0.034829f, -0.048758f, -0.047243f, -0.000572f, -0.042891f, -0.002378f, -0.004864f, +0.038872f, - +0.035669f, +0.012375f, +0.014885f, +0.006528f, -0.003147f, +0.014657f, +0.002072f, +0.000995f, -0.004977f, +0.016298f, - -0.001755f, +0.000198f, +0.007155f, -0.008328f, +0.006801f, +0.000290f, +0.004713f, -0.002738f, +0.005141f, +0.003557f, - +0.004950f, +0.006998f, +0.006927f, +0.005113f, -0.002043f, +0.003886f, -0.000673f, +0.001982f, +0.005983f, -0.003420f, - -0.002316f, -0.006603f, +0.001292f, +0.005012f, +0.001484f, -0.000144f, -0.003125f, +0.005223f, +0.006081f, +0.000782f, - -0.008500f, -0.000716f, -0.003140f, +0.001518f, +0.003276f, -0.001777f, -0.000691f, +0.001912f, +0.000190f, +0.000934f, - -0.003362f, -0.003454f, +0.003535f, +0.000445f, +0.001218f, +0.000225f, +0.000663f, +0.004768f, +0.001343f, +0.001148f, - +0.001241f, -0.001131f, +0.001642f, +0.003468f, +0.001146f, +0.000353f - }, - { - -0.049063f, -0.828289f, +0.018788f, +0.011699f, -0.013121f, -0.004698f, -0.005874f, -0.017817f, +0.009450f, -0.004303f, - +0.014367f, -0.003837f, +0.011020f, +0.000743f, +0.042964f, -0.012301f, -0.000948f, -0.024925f, -0.016726f, +0.006031f, - -0.002560f, +0.017389f, +0.016280f, +0.001055f, -0.023797f, +0.006065f, +0.005305f, -0.009726f, +0.005983f, +0.001739f, - -0.007614f, -0.008831f, +0.002412f, +0.005962f, +0.002110f, -0.001192f, +0.004889f, +0.020367f, +0.008204f, -0.000720f, - +0.000157f, +0.006063f, +0.008643f, +0.002338f, +0.002548f, +0.002575f, +0.009210f, -0.003809f, +0.001401f, +0.001623f, - -0.009084f, +0.007981f, -0.009519f, -0.009305f, +0.011585f, -0.007855f, +0.000318f, +0.003847f, -0.002526f, +0.002610f, - -0.004432f, -0.006812f, -0.000492f, -0.001413f, -0.002533f, +0.003852f, +0.005372f, +0.000764f, +0.000225f, +0.003013f, - -0.004483f, -0.000644f, -0.003028f, +0.004800f, +0.000887f, -0.001782f, +0.003116f, -0.001201f, +0.002433f, -0.000756f, - -0.002500f, +0.000539f, +0.001049f, +0.002020f, +0.000542f, +0.001772f, +0.005185f, +0.002472f, -0.002202f, -0.002305f, - +0.001811f, +0.000809f, +0.001606f, +0.001226f, -0.003331f, -0.001010f - }, - { - +0.002249f, +0.009040f, +0.010887f, +0.002738f, +0.008278f, -0.000694f, -0.004581f, +0.006794f, -0.014822f, +0.002712f, - +0.000435f, -0.005813f, +0.008614f, -0.017642f, -0.148158f, -0.052470f, -0.041056f, +0.018464f, -0.029714f, +0.022358f, - +0.019226f, -0.024393f, +0.002011f, +0.025039f, +0.041103f, -0.037509f, +0.010502f, +0.009827f, +0.007964f, +0.015274f, - -0.016399f, +0.003385f, -0.006820f, +0.005477f, +0.001513f, +0.004317f, -0.012540f, -0.001370f, -0.002188f, -0.005680f, - +0.000984f, +0.006974f, -0.005292f, +0.016088f, -0.009164f, +0.013161f, -0.002268f, +0.007406f, +0.001973f, -0.004436f, - +0.007651f, +0.004934f, -0.009367f, +0.008864f, +0.002432f, +0.000176f, -0.003463f, +0.005425f, -0.002129f, -0.008368f, - -0.009816f, +0.000116f, +0.001889f, +0.003742f, -0.000591f, +0.003639f, +0.000741f, -0.002529f, -0.001184f, -0.001688f, - -0.000266f, -0.004506f, +0.006632f, +0.001142f, -0.005474f, +0.000069f, -0.001568f, -0.001398f, -0.006659f, +0.001440f, - +0.001254f, -0.000142f, +0.000335f, -0.000619f, +0.003292f, -0.003950f, +0.000657f, +0.000319f, -0.000396f, -0.002052f, - -0.000121f, -0.000866f, -0.000136f, -0.000759f, -0.002762f, +0.002603f - }, - { - +0.004352f, -0.526146f, -0.044168f, +0.018075f, -0.011681f, +0.047678f, +0.024940f, +0.041152f, +0.028246f, +0.034964f, - -0.016392f, +0.007847f, +0.034165f, +0.037688f, +0.009070f, +0.002388f, +0.039529f, +0.003174f, -0.003470f, -0.007725f, - +0.018420f, -0.000417f, +0.011416f, -0.022803f, -0.010933f, -0.004431f, -0.006443f, -0.016947f, -0.022238f, +0.008030f, - -0.003840f, +0.014160f, -0.016557f, -0.002086f, +0.017557f, +0.000339f, +0.009103f, +0.008701f, -0.015310f, -0.000385f, - +0.016349f, +0.000079f, +0.002854f, -0.004636f, -0.007938f, -0.006491f, +0.000507f, -0.000342f, -0.000402f, +0.009395f, - +0.005723f, +0.012090f, -0.004930f, -0.008876f, -0.002731f, +0.002021f, +0.002520f, +0.004794f, +0.002755f, -0.000187f, - +0.000260f, -0.000530f, -0.005293f, +0.003441f, +0.004446f, -0.002633f, -0.000881f, +0.005201f, -0.006353f, +0.004913f, - -0.002010f, -0.000864f, +0.004566f, +0.000415f, -0.000125f, -0.002557f, -0.005421f, +0.003591f, -0.002703f, +0.002577f, - +0.000286f, +0.000749f, -0.005039f, -0.002932f, -0.000017f, +0.000786f, +0.002960f, +0.002202f, -0.004135f, -0.006730f, - +0.001880f, -0.003311f, -0.001812f, -0.003870f, +0.001002f, -0.001864f - }, - { - -0.007100f, +0.027951f, +0.024608f, -0.012841f, +0.006737f, -0.017778f, +0.020422f, +0.000476f, -0.003621f, -0.025326f, - +0.009175f, +0.000681f, +0.040062f, -0.001078f, +0.018079f, -0.011726f, +0.003971f, -0.023336f, +0.019999f, +0.001236f, - -0.023440f, +0.023124f, +0.023671f, -0.001451f, +0.010208f, +0.002252f, -0.003542f, -0.001086f, -0.013122f, -0.003633f, - +0.017437f, +0.002777f, +0.022042f, -0.003632f, -0.006912f, -0.012841f, -0.006977f, -0.002454f, -0.001205f, -0.002289f, - +0.004812f, +0.031627f, +0.005797f, -0.001121f, -0.006589f, -0.015655f, -0.014024f, +0.001352f, +0.007043f, -0.001035f, - -0.002947f, -0.001923f, +0.005044f, -0.000786f, +0.001744f, +0.006485f, -0.002361f, +0.000359f, +0.005430f, -0.002480f, - -0.000939f, -0.008471f, +0.000320f, -0.008186f, -0.000559f, +0.003522f, -0.003522f, -0.006807f, +0.005619f, +0.000824f, - +0.000151f, +0.001706f, +0.001146f, +0.001864f, -0.000668f, +0.001353f, -0.003037f, -0.002043f, +0.002009f, -0.004810f, - +0.004200f, +0.000355f, -0.001717f, +0.000164f, +0.001312f, -0.002581f, -0.002350f, -0.001804f, +0.003251f, -0.000585f, - +0.000949f, +0.000037f, -0.000488f, -0.001520f, -0.000393f, +0.004070f - }, - { - -0.069863f, +0.196467f, -0.013577f, -0.016244f, +0.031974f, +0.042689f, -0.001628f, -0.004264f, +0.020997f, +0.002158f, - +0.003931f, +0.024444f, +0.005465f, -0.003838f, -0.030084f, +0.001668f, +0.002495f, -0.003971f, +0.023968f, -0.044031f, - -0.011601f, +0.002467f, +0.016703f, -0.004074f, +0.034191f, +0.014014f, -0.014298f, -0.009275f, +0.012932f, -0.007116f, - -0.000052f, -0.000655f, -0.014875f, +0.005348f, -0.000245f, +0.002491f, -0.005908f, -0.006560f, -0.006666f, +0.008661f, - +0.009089f, +0.012395f, +0.001077f, -0.003605f, +0.014625f, +0.001684f, +0.013909f, -0.006050f, +0.001968f, -0.001716f, - -0.010659f, -0.004840f, -0.006601f, -0.005573f, +0.001332f, +0.000638f, -0.005431f, +0.006333f, -0.000686f, +0.005645f, - -0.003131f, +0.004762f, -0.002436f, +0.006486f, -0.001833f, -0.000023f, +0.002518f, +0.002329f, +0.005725f, -0.005221f, - -0.000705f, +0.005406f, -0.006431f, -0.003839f, -0.003816f, +0.000427f, +0.003621f, +0.000288f, +0.001248f, +0.001299f, - +0.000236f, -0.002818f, +0.000857f, +0.003468f, -0.002576f, -0.001918f, -0.001580f, -0.000419f, +0.001065f, +0.001282f, - -0.000365f, +0.001421f, +0.001144f, -0.000971f, +0.001277f, -0.001581f - }, - { - +0.001232f, +0.110947f, -0.009346f, +0.006384f, -0.000224f, -0.013003f, -0.006541f, -0.002306f, -0.000154f, +0.005028f, - +0.000825f, +0.001908f, -0.021816f, +0.073584f, +0.025694f, +0.045114f, +0.024520f, +0.022276f, -0.023356f, +0.026956f, - -0.024123f, +0.018906f, +0.020981f, +0.006027f, +0.001292f, -0.021529f, +0.018546f, -0.002730f, -0.008997f, +0.050422f, - -0.019752f, -0.007168f, +0.001519f, +0.011728f, +0.000493f, -0.002304f, +0.022853f, -0.006618f, +0.021231f, -0.004386f, - +0.008139f, -0.012040f, -0.000546f, -0.006932f, -0.003544f, -0.004186f, -0.002704f, -0.008401f, +0.005004f, +0.016799f, - +0.004835f, +0.008363f, +0.004449f, +0.004966f, +0.002525f, +0.010222f, +0.002364f, +0.013131f, -0.003199f, +0.004663f, - +0.001528f, +0.012865f, -0.001294f, -0.003806f, -0.002880f, +0.003368f, -0.003153f, -0.000009f, -0.007182f, -0.004338f, - -0.007568f, +0.006160f, -0.001431f, -0.002063f, +0.005571f, +0.002121f, +0.000571f, -0.000996f, +0.002266f, -0.004447f, - -0.001207f, -0.001416f, +0.000894f, -0.001068f, +0.001512f, +0.001795f, -0.000264f, -0.005509f, -0.001824f, +0.002358f, - -0.001211f, +0.000163f, -0.002758f, +0.001664f, -0.002229f, -0.000291f - }, - { - +0.014867f, +0.246385f, +0.013591f, -0.015118f, -0.026986f, +0.000270f, +0.000978f, -0.016722f, +0.009192f, -0.007138f, - -0.015361f, -0.058546f, -0.027799f, +0.020836f, +0.008049f, -0.018903f, +0.036318f, +0.002749f, -0.008945f, -0.019950f, - +0.022847f, +0.017106f, +0.003039f, +0.014481f, +0.011745f, +0.020228f, -0.005908f, +0.000308f, +0.047877f, -0.017614f, - -0.010950f, -0.019000f, -0.002021f, +0.002128f, +0.000485f, -0.023384f, -0.031076f, +0.013304f, +0.012112f, +0.025097f, - -0.001130f, -0.003133f, -0.009125f, +0.002882f, -0.012014f, +0.001798f, +0.011860f, -0.012488f, -0.004717f, -0.001269f, - -0.005155f, +0.006080f, +0.005845f, +0.002753f, -0.001886f, +0.000639f, +0.004372f, +0.002434f, -0.011090f, -0.002825f, - +0.004057f, -0.000435f, -0.000239f, -0.002773f, +0.005104f, -0.002154f, +0.004228f, -0.003277f, -0.000375f, -0.003384f, - -0.005210f, -0.001868f, -0.006840f, +0.001961f, +0.003346f, -0.002752f, +0.004324f, -0.001578f, -0.003170f, +0.001593f, - +0.003100f, +0.000706f, +0.000107f, -0.003481f, +0.000136f, -0.003670f, +0.001037f, -0.003369f, +0.001068f, +0.005040f, - +0.003231f, -0.002524f, +0.001160f, -0.002013f, -0.000036f, +0.002096f - }, - { - +0.011819f, -0.040065f, -0.028784f, -0.001354f, -0.005622f, -0.013133f, -0.001521f, +0.020817f, +0.005558f, -0.007493f, - +0.000346f, +0.003755f, -0.003736f, +0.057306f, +0.077992f, -0.012902f, -0.027138f, -0.001116f, +0.001785f, -0.039291f, - -0.056951f, +0.046459f, +0.000759f, +0.019062f, +0.001717f, +0.000926f, -0.000349f, +0.033604f, -0.020770f, +0.024268f, - +0.036560f, +0.012854f, +0.024712f, -0.021171f, +0.011521f, -0.007637f, +0.001815f, -0.013943f, -0.011201f, +0.027515f, - -0.013279f, +0.022155f, -0.009651f, -0.007248f, -0.016823f, -0.012579f, -0.004401f, -0.009426f, -0.004783f, -0.009585f, - +0.001123f, +0.007376f, +0.007510f, +0.001256f, -0.014865f, -0.004905f, -0.007340f, +0.003618f, +0.004964f, +0.009415f, - +0.007629f, -0.003488f, -0.005296f, +0.000410f, +0.006815f, -0.000811f, -0.000112f, -0.005322f, -0.001853f, +0.002833f, - +0.000743f, -0.001971f, +0.000630f, +0.002103f, +0.000186f, +0.000596f, +0.000366f, +0.001085f, -0.003642f, +0.003565f, - -0.006413f, -0.002731f, -0.000409f, -0.001496f, -0.002078f, +0.000361f, +0.000627f, -0.003267f, +0.002544f, -0.000281f, - -0.000810f, +0.000294f, +0.000226f, +0.000965f, +0.001206f, +0.000745f - } - }, - { - { - -0.032269f, +0.104405f, +0.022530f, +0.008044f, +0.011306f, -0.000375f, -0.010130f, -0.019267f, -0.011419f, -0.011872f, - +0.014434f, -0.022196f, -0.018729f, +0.007795f, +0.015199f, -0.015232f, -0.019108f, +0.007023f, -0.002046f, +0.014678f, - -0.022604f, +0.011788f, -0.018563f, -0.018934f, -0.023456f, -0.005785f, -0.002669f, +0.000069f, +0.014512f, -0.004330f, - -0.008189f, -0.006147f, +0.004089f, +0.021101f, +0.001369f, +0.009178f, +0.002684f, -0.007097f, +0.012907f, +0.004967f, - -0.005244f, +0.009940f, +0.000239f, -0.009168f, +0.004290f, -0.002958f, -0.007176f, +0.006680f, +0.002708f, +0.011328f, - -0.003061f, -0.005263f, +0.001900f, -0.004358f, -0.001678f, -0.006132f, -0.011482f, -0.012017f, +0.007842f, -0.004518f, - -0.001463f, +0.002413f, +0.000577f, +0.002387f, -0.000584f, -0.005845f, +0.002010f, -0.001048f, +0.002461f, -0.003093f, - -0.000920f, +0.005924f, -0.003100f, -0.001995f, -0.000959f, +0.001025f, +0.000394f, +0.000446f, -0.001821f, +0.000457f, - -0.000709f, +0.006410f, +0.002250f, +0.001222f, -0.001690f, +0.000401f, +0.001589f, +0.000313f, -0.001310f, +0.002052f, - -0.001867f, -0.003268f, +0.003340f, -0.001413f, +0.000982f, -0.001696f - }, - { - +0.002289f, +0.064216f, +0.017226f, -0.031216f, +0.003617f, -0.002556f, +0.001989f, +0.006231f, +0.002235f, -0.025313f, - -0.007080f, -0.013675f, -0.006432f, +0.022182f, +0.012383f, -0.014578f, -0.023900f, -0.015816f, +0.041787f, -0.025229f, - +0.000432f, +0.019717f, -0.008513f, -0.011639f, -0.016640f, +0.003007f, +0.016192f, -0.019141f, +0.002847f, -0.010874f, - +0.017484f, +0.002140f, +0.022426f, -0.004511f, +0.004302f, +0.001159f, +0.011068f, +0.011815f, -0.013902f, -0.005333f, - +0.012098f, -0.002706f, +0.010910f, -0.013514f, -0.003173f, +0.006506f, +0.014444f, -0.002403f, -0.005552f, +0.000450f, - +0.000748f, +0.004205f, +0.014531f, +0.005254f, +0.001508f, -0.001521f, -0.009161f, -0.011067f, -0.002805f, +0.001804f, - +0.009882f, +0.005166f, +0.000707f, +0.002149f, +0.004961f, -0.004844f, +0.003188f, +0.007751f, +0.002173f, -0.003263f, - -0.004243f, -0.002873f, -0.005541f, -0.003768f, -0.001516f, -0.001592f, -0.001302f, -0.000143f, -0.000422f, -0.001991f, - +0.002947f, -0.000562f, +0.000985f, +0.000915f, -0.000457f, +0.000614f, +0.000214f, +0.002558f, -0.001079f, +0.002400f, - -0.000323f, +0.002326f, +0.001576f, +0.002253f, +0.000393f, -0.001854f - }, - { - -0.000653f, +0.070744f, +0.031557f, +0.021325f, -0.018352f, +0.004939f, -0.001763f, +0.008357f, -0.001595f, -0.013438f, - +0.035653f, +0.001891f, -0.021623f, +0.008806f, +0.024870f, +0.008862f, +0.012072f, +0.014947f, -0.028245f, -0.005372f, - +0.008521f, -0.019753f, +0.017280f, -0.006984f, -0.009209f, +0.018965f, +0.003286f, +0.012677f, -0.020496f, +0.001112f, - +0.010750f, -0.029301f, -0.017196f, +0.011661f, -0.016279f, +0.007343f, -0.007060f, +0.008260f, +0.000187f, +0.000435f, - -0.014143f, -0.010175f, +0.004774f, +0.016186f, -0.003297f, -0.004315f, -0.003572f, +0.011955f, -0.009673f, +0.004514f, - +0.004214f, +0.004849f, -0.002975f, -0.002698f, -0.004340f, -0.007714f, -0.008192f, +0.004905f, +0.000678f, +0.006781f, - -0.004894f, -0.005403f, -0.003254f, -0.002229f, +0.004355f, +0.000764f, +0.000988f, -0.001346f, +0.001809f, +0.002247f, - -0.002200f, -0.002740f, +0.005682f, +0.000792f, -0.000310f, +0.000258f, -0.001689f, -0.002312f, +0.001646f, +0.000274f, - -0.002069f, -0.000577f, +0.001542f, -0.001456f, -0.003119f, +0.001996f, +0.002380f, +0.000829f, -0.004404f, +0.001643f, - -0.001052f, -0.000444f, +0.001448f, -0.000033f, +0.000379f, -0.000420f - }, - { - -0.107232f, +0.300186f, +0.046764f, +0.004821f, +0.019408f, +0.007064f, -0.006547f, +0.003352f, +0.008722f, +0.040906f, - -0.009086f, -0.019766f, +0.015787f, +0.005859f, +0.022613f, -0.000442f, +0.030117f, +0.021257f, -0.014369f, -0.008023f, - -0.006072f, -0.009086f, +0.006667f, -0.012886f, -0.000898f, -0.008908f, -0.029388f, +0.002455f, -0.005396f, +0.008092f, - +0.005485f, +0.011255f, -0.001613f, -0.000409f, +0.002796f, +0.011466f, -0.000607f, +0.012520f, +0.002604f, +0.029840f, - +0.006151f, -0.008123f, -0.001867f, -0.014082f, +0.000978f, +0.004741f, +0.017673f, -0.004543f, +0.002791f, -0.011057f, - -0.004620f, +0.000757f, -0.000257f, +0.005384f, +0.000452f, -0.004000f, +0.001717f, +0.008026f, -0.001626f, +0.000261f, - -0.001068f, +0.006009f, -0.001637f, -0.000959f, +0.005130f, -0.004566f, +0.003509f, -0.004599f, -0.004310f, +0.003919f, - -0.000779f, +0.000679f, -0.003171f, -0.000945f, +0.000919f, -0.000714f, -0.001125f, -0.001599f, -0.000878f, +0.000462f, - -0.001167f, +0.000727f, +0.002703f, +0.001363f, +0.000450f, -0.000518f, +0.000958f, -0.003382f, -0.001763f, -0.000180f, - +0.001357f, -0.001376f, -0.001768f, -0.001960f, -0.000518f, +0.002499f - }, - { - -0.002826f, +0.045317f, +0.003255f, -0.008339f, +0.004355f, -0.002694f, -0.000410f, -0.000375f, +0.006863f, -0.005021f, - +0.009752f, -0.006752f, -0.004118f, -0.036032f, -0.051368f, -0.041867f, -0.020114f, +0.011298f, +0.060598f, +0.004450f, - +0.011519f, -0.029563f, -0.030037f, +0.030554f, +0.000764f, -0.025396f, +0.028137f, -0.009130f, +0.024724f, -0.039969f, - +0.005602f, -0.005394f, -0.044581f, +0.014922f, +0.012549f, -0.013661f, -0.004873f, -0.000864f, +0.003665f, -0.001648f, - -0.000933f, +0.001210f, -0.001271f, -0.011148f, -0.005606f, +0.000036f, +0.003227f, -0.008036f, +0.003251f, +0.002527f, - +0.000498f, -0.002912f, -0.002893f, +0.004828f, -0.001933f, +0.005559f, +0.004344f, -0.000687f, -0.009432f, +0.003058f, - -0.000768f, -0.003524f, +0.004842f, +0.006499f, -0.000958f, +0.001664f, +0.004949f, +0.003705f, -0.000470f, +0.002158f, - -0.006306f, -0.003395f, +0.002610f, -0.000217f, -0.002173f, -0.000007f, +0.003887f, +0.001989f, +0.003017f, +0.002073f, - -0.003238f, +0.000055f, -0.003134f, -0.000315f, +0.001653f, +0.003509f, +0.001618f, -0.001023f, +0.000344f, +0.000478f, - +0.001100f, -0.000406f, -0.000891f, -0.001591f, -0.000919f, +0.000176f - }, - { - -0.149720f, +0.344919f, +0.024061f, +0.019526f, -0.004457f, -0.007037f, +0.007817f, +0.012318f, -0.028966f, -0.006953f, - +0.016565f, -0.015264f, +0.038406f, -0.033493f, -0.003854f, +0.003074f, -0.029457f, +0.002750f, +0.014296f, +0.024260f, - +0.019249f, +0.011363f, -0.009225f, +0.008686f, -0.002278f, +0.007155f, -0.001900f, -0.002007f, -0.011441f, -0.008878f, - -0.010353f, -0.024610f, -0.001325f, +0.006471f, -0.010160f, +0.009612f, -0.006107f, +0.002625f, +0.003181f, +0.007706f, - +0.001963f, -0.005901f, -0.000329f, -0.003325f, -0.010763f, +0.001089f, +0.004851f, +0.000722f, -0.012347f, +0.003469f, - +0.004790f, +0.000149f, +0.010229f, -0.003938f, +0.003232f, -0.003687f, +0.002071f, +0.000666f, -0.002780f, -0.001278f, - +0.000541f, -0.002383f, +0.005388f, +0.006128f, +0.001584f, -0.004620f, -0.000800f, -0.001976f, -0.002872f, +0.002040f, - +0.001715f, -0.000303f, +0.005289f, -0.000941f, +0.000205f, -0.001659f, +0.000171f, +0.000243f, -0.002869f, +0.001889f, - -0.001888f, +0.002213f, -0.002461f, -0.003157f, +0.003283f, +0.001198f, +0.000268f, -0.000882f, +0.002375f, -0.001132f, - -0.002154f, +0.002498f, -0.000905f, -0.001716f, -0.001784f, +0.001649f - }, - { - -0.000334f, +0.030699f, +0.012403f, -0.000689f, -0.007177f, +0.000098f, +0.000978f, -0.004760f, +0.005556f, -0.019492f, - -0.006364f, -0.009521f, -0.005955f, -0.029562f, +0.019385f, -0.018792f, -0.087509f, -0.011053f, +0.016657f, -0.019652f, - -0.006524f, +0.030774f, +0.003670f, -0.051190f, -0.024332f, -0.018493f, -0.007756f, -0.026524f, -0.003782f, +0.049144f, - +0.039313f, +0.013067f, -0.000264f, +0.006707f, -0.000374f, +0.014830f, +0.000969f, +0.007421f, +0.001156f, +0.010136f, - +0.001594f, +0.002013f, -0.009171f, +0.001719f, +0.011848f, +0.001043f, +0.001303f, -0.001643f, +0.007180f, +0.006284f, - +0.004779f, +0.003879f, +0.007735f, +0.004129f, +0.000199f, +0.001603f, +0.000595f, +0.001696f, +0.012614f, -0.001832f, - -0.004131f, -0.008174f, -0.005019f, +0.005807f, +0.000052f, +0.000826f, -0.002463f, +0.004776f, +0.006710f, +0.000322f, - -0.009661f, -0.004574f, +0.001768f, +0.000663f, +0.003844f, +0.000002f, +0.001669f, -0.002246f, -0.000143f, -0.000113f, - -0.000723f, -0.001578f, +0.001310f, +0.002951f, -0.002524f, -0.000403f, +0.005596f, -0.001126f, +0.001711f, +0.004477f, - -0.001790f, +0.000420f, +0.001136f, +0.001524f, +0.002482f, -0.000990f - }, - { - -0.010294f, -0.848040f, -0.020418f, +0.009994f, +0.000874f, +0.010033f, -0.028628f, +0.003051f, +0.000271f, -0.004697f, - +0.012756f, +0.000041f, -0.017948f, +0.020925f, +0.017296f, +0.010712f, -0.024774f, +0.009425f, -0.028069f, +0.006006f, - +0.004684f, +0.006867f, +0.012471f, -0.002503f, -0.013283f, -0.007221f, +0.010435f, -0.000613f, -0.009936f, -0.004521f, - +0.006906f, -0.002817f, +0.003158f, +0.006747f, +0.005421f, +0.014597f, -0.001400f, +0.016041f, +0.004277f, +0.000557f, - -0.006236f, +0.010106f, +0.007277f, -0.000261f, +0.003131f, +0.008841f, +0.014270f, -0.009741f, -0.006740f, +0.011133f, - -0.012986f, +0.007922f, -0.008933f, -0.006032f, +0.004367f, -0.008208f, +0.002081f, +0.000912f, +0.004241f, -0.000748f, - -0.003709f, -0.009932f, +0.002393f, -0.002930f, -0.002457f, +0.006826f, +0.004835f, +0.001479f, -0.001606f, +0.005222f, - -0.007206f, -0.000935f, -0.000744f, +0.004561f, +0.001757f, +0.000003f, -0.000399f, +0.001024f, +0.000863f, -0.000173f, - -0.002655f, -0.001359f, +0.001920f, +0.001986f, +0.003654f, +0.003187f, +0.000709f, +0.001863f, +0.000069f, -0.001120f, - +0.001453f, +0.000069f, +0.001363f, -0.000610f, -0.002207f, -0.001230f - }, - { - -0.000084f, +0.026092f, +0.001789f, +0.003279f, +0.010974f, -0.002440f, -0.000990f, -0.004519f, -0.003326f, +0.002210f, - -0.006430f, +0.002374f, +0.003611f, -0.033866f, -0.135139f, -0.039859f, -0.026439f, +0.012672f, -0.035322f, +0.037344f, - +0.018341f, -0.028373f, -0.020759f, +0.050668f, +0.000572f, -0.007225f, +0.007893f, +0.013750f, -0.003466f, +0.034443f, - -0.032117f, +0.007431f, +0.008403f, -0.004885f, -0.004769f, +0.012983f, -0.007317f, -0.009924f, +0.000303f, -0.002104f, - -0.006344f, +0.011098f, -0.000801f, -0.002598f, +0.011946f, +0.005295f, +0.002094f, +0.002058f, +0.003574f, +0.007477f, - -0.000038f, +0.002452f, -0.003311f, +0.003503f, +0.002958f, +0.004634f, -0.008296f, +0.007633f, -0.004217f, -0.000524f, - -0.013909f, +0.002018f, -0.002447f, +0.008221f, -0.000232f, +0.001209f, +0.000511f, -0.002943f, -0.000049f, -0.005618f, - +0.000641f, -0.000251f, +0.000468f, +0.003085f, -0.001384f, -0.005597f, +0.002362f, -0.003651f, -0.003296f, +0.001833f, - +0.001750f, -0.002582f, -0.001140f, +0.000930f, -0.000545f, -0.000056f, +0.001175f, +0.000843f, -0.002307f, +0.000484f, - -0.002092f, -0.000759f, +0.001055f, -0.003180f, -0.000593f, +0.002492f - }, - { - -0.007776f, -0.550591f, -0.026647f, +0.038045f, -0.020741f, +0.004140f, +0.037182f, +0.040720f, +0.044450f, +0.024638f, - -0.001865f, +0.007608f, +0.032013f, +0.015276f, +0.002316f, +0.037026f, +0.029545f, +0.017835f, +0.007225f, +0.002286f, - -0.017079f, +0.001573f, +0.006691f, -0.017421f, -0.019752f, +0.024366f, -0.027371f, -0.027249f, -0.024814f, +0.011515f, - +0.004582f, +0.005758f, -0.009739f, +0.005041f, +0.009573f, +0.006187f, +0.024219f, -0.008967f, -0.013499f, -0.014021f, - +0.033172f, -0.001065f, +0.007801f, -0.018569f, +0.010497f, -0.011797f, -0.001491f, +0.001453f, +0.000209f, +0.002341f, - +0.018771f, +0.004673f, -0.005667f, -0.009837f, -0.003112f, +0.002223f, -0.001078f, +0.009363f, +0.002063f, +0.002210f, - -0.000398f, -0.010838f, -0.001846f, +0.005887f, -0.000875f, -0.003198f, +0.005907f, +0.000513f, -0.004006f, +0.003149f, - +0.003934f, -0.002747f, -0.001155f, +0.003751f, -0.003162f, -0.000426f, -0.002153f, -0.001938f, -0.001011f, +0.004310f, - +0.000343f, -0.002081f, -0.002353f, -0.001218f, -0.001644f, -0.002355f, +0.002424f, +0.001805f, -0.003065f, -0.000320f, - -0.003770f, -0.001466f, -0.003582f, -0.000777f, -0.002802f, +0.001758f - }, - { - +0.006023f, +0.071414f, -0.014593f, -0.008342f, -0.011628f, +0.010673f, +0.005228f, -0.001796f, -0.007171f, +0.002395f, - -0.005064f, +0.015038f, +0.013899f, -0.001575f, +0.038228f, -0.011919f, +0.018808f, -0.042507f, +0.014080f, +0.008009f, - -0.022159f, +0.011546f, +0.035743f, -0.008529f, +0.018416f, +0.001675f, -0.005048f, -0.012402f, -0.006255f, +0.010366f, - -0.001087f, +0.004916f, +0.024147f, -0.001377f, -0.026508f, -0.000140f, -0.001162f, -0.007219f, +0.013216f, +0.001410f, - -0.001932f, +0.017890f, +0.007550f, -0.001328f, -0.002003f, -0.008621f, -0.012947f, -0.006197f, +0.007118f, +0.006263f, - -0.005160f, +0.001000f, +0.007770f, -0.005330f, -0.000880f, -0.000022f, +0.007330f, -0.001163f, +0.010069f, -0.007093f, - -0.002678f, +0.003037f, -0.006167f, -0.006745f, -0.003202f, -0.003675f, +0.000343f, +0.001477f, +0.001138f, +0.001134f, - +0.001265f, -0.000467f, +0.004608f, +0.002328f, -0.000726f, +0.000666f, -0.001306f, -0.001741f, -0.000469f, -0.001804f, - +0.002864f, -0.001915f, +0.000378f, -0.002507f, +0.002209f, -0.004878f, -0.000909f, -0.001857f, +0.004003f, -0.000167f, - -0.000899f, +0.001661f, -0.001351f, -0.002554f, +0.001988f, +0.002865f - }, - { - +0.105081f, -0.007642f, -0.032765f, -0.037362f, +0.037648f, +0.082644f, -0.042364f, +0.011706f, +0.014198f, +0.001124f, - +0.021490f, +0.001855f, -0.007682f, -0.012611f, -0.016416f, +0.003189f, +0.012016f, -0.019772f, +0.019043f, -0.017453f, - -0.021339f, +0.006629f, +0.022633f, +0.009757f, -0.009378f, +0.015523f, -0.003972f, +0.004792f, +0.004642f, -0.005619f, - -0.001343f, -0.002150f, -0.004474f, -0.005002f, -0.007177f, +0.033349f, -0.023057f, -0.014983f, -0.008335f, +0.014492f, - -0.002003f, +0.026813f, -0.015841f, +0.005837f, +0.012461f, +0.005771f, +0.002434f, +0.004384f, -0.002122f, -0.002663f, - -0.002391f, -0.006111f, -0.012517f, -0.002237f, +0.002446f, -0.005146f, +0.007272f, +0.001927f, +0.004586f, +0.000508f, - +0.005119f, +0.000303f, -0.002209f, +0.001409f, +0.001649f, +0.003772f, -0.000645f, +0.004115f, -0.001165f, +0.002790f, - +0.000258f, +0.000998f, -0.000572f, -0.005009f, -0.004388f, +0.001983f, +0.001789f, +0.000841f, +0.001147f, -0.002590f, - +0.000523f, +0.000329f, +0.001328f, +0.002086f, -0.002864f, -0.000629f, -0.002633f, +0.000786f, -0.000707f, -0.000106f, - +0.001519f, -0.000748f, +0.002269f, -0.001507f, +0.000907f, +0.000140f - }, - { - -0.002626f, +0.093380f, +0.002120f, -0.004326f, +0.016049f, -0.024272f, +0.005191f, -0.001939f, -0.001061f, -0.005256f, - +0.002585f, +0.004167f, -0.024444f, +0.044458f, +0.006098f, +0.084248f, +0.006357f, +0.028703f, -0.006642f, +0.008129f, - -0.037116f, +0.011692f, +0.070742f, +0.005385f, -0.038732f, +0.034078f, +0.020753f, -0.028655f, -0.003641f, +0.025939f, - -0.001009f, -0.005129f, +0.023503f, -0.008333f, +0.010349f, +0.006036f, +0.003021f, +0.007573f, +0.007790f, +0.013615f, - -0.005829f, -0.000242f, -0.012789f, +0.003578f, -0.006346f, -0.014761f, +0.008222f, -0.006698f, +0.010594f, +0.000835f, - +0.007069f, +0.013815f, +0.011128f, -0.007257f, +0.010951f, +0.007143f, +0.012140f, +0.004084f, +0.000700f, +0.002626f, - -0.003998f, +0.011526f, -0.001402f, -0.007194f, +0.002442f, -0.000621f, +0.004100f, -0.004550f, -0.005480f, -0.004882f, - -0.008514f, +0.007866f, -0.003965f, +0.000613f, +0.003744f, +0.000024f, +0.002673f, -0.002356f, -0.000442f, -0.001237f, - +0.001873f, -0.001097f, -0.001885f, -0.000529f, +0.000085f, +0.003286f, -0.003026f, -0.002429f, -0.001062f, -0.000704f, - -0.000495f, -0.000738f, -0.000175f, -0.000235f, -0.000103f, -0.000792f - }, - { - +0.025207f, +0.234514f, -0.001956f, -0.020248f, -0.009028f, +0.006522f, -0.000408f, -0.017540f, +0.005520f, -0.008652f, - -0.025992f, -0.058633f, -0.026345f, -0.019107f, +0.056958f, +0.007543f, -0.007314f, +0.002693f, -0.019291f, +0.002099f, - +0.014705f, +0.009852f, +0.016810f, +0.007383f, +0.032208f, -0.015904f, +0.018812f, +0.008732f, +0.035426f, -0.003762f, - -0.021750f, -0.016707f, -0.000199f, +0.000237f, -0.003159f, -0.008980f, -0.022018f, -0.003625f, +0.008386f, +0.014896f, - +0.020902f, -0.007882f, -0.013037f, +0.006872f, -0.019243f, +0.003667f, -0.002431f, -0.013277f, -0.008812f, +0.004048f, - +0.003957f, +0.009129f, -0.000732f, -0.002050f, +0.003641f, +0.000042f, +0.000442f, +0.003256f, -0.009473f, +0.003747f, - +0.002028f, -0.004344f, -0.000308f, +0.000584f, +0.007095f, -0.001180f, -0.001411f, +0.001428f, -0.002416f, -0.011092f, - +0.002248f, -0.004894f, -0.005248f, +0.001811f, -0.000513f, -0.000462f, +0.002435f, -0.000860f, -0.001449f, +0.001474f, - +0.000696f, +0.001159f, -0.001954f, -0.003443f, -0.001387f, -0.002397f, +0.000021f, -0.000819f, +0.001392f, +0.003167f, - +0.001431f, +0.000248f, +0.000045f, -0.002206f, +0.001075f, +0.001073f - }, - { - -0.011323f, -0.053212f, +0.005739f, -0.004834f, -0.004629f, -0.010345f, -0.013685f, +0.006931f, +0.010598f, +0.002902f, - +0.001555f, +0.001974f, -0.023273f, +0.002587f, +0.112378f, +0.051719f, -0.021285f, -0.018419f, +0.006370f, -0.082440f, - -0.013845f, +0.051838f, -0.007677f, -0.008002f, -0.002531f, -0.003879f, -0.002609f, +0.005778f, +0.035190f, -0.012277f, - +0.039671f, +0.032611f, +0.002826f, -0.008166f, +0.012179f, -0.011204f, +0.005038f, -0.001567f, -0.008713f, +0.006224f, - +0.005195f, -0.000772f, +0.011915f, -0.025127f, -0.010147f, +0.000109f, -0.009342f, -0.002570f, -0.018227f, +0.003054f, - +0.003554f, +0.004090f, +0.010688f, -0.001503f, -0.014051f, -0.005272f, -0.012400f, +0.006527f, +0.010152f, +0.006758f, - +0.007191f, +0.001336f, -0.005387f, -0.001318f, +0.002112f, -0.000028f, +0.005267f, -0.014847f, +0.005562f, +0.004033f, - -0.001652f, +0.001298f, +0.003633f, -0.001605f, -0.000355f, +0.003471f, -0.000015f, -0.006111f, +0.001866f, +0.001688f, - -0.004697f, -0.002901f, +0.000194f, -0.003293f, +0.002147f, -0.001010f, -0.000229f, -0.000250f, -0.000453f, -0.000071f, - +0.000323f, -0.000145f, -0.000030f, +0.002498f, +0.000789f, -0.000582f - } - }, - { - { - +0.024004f, -0.135928f, -0.224855f, -0.041956f, -0.008227f, +0.000042f, -0.005493f, -0.007654f, -0.007453f, -0.032411f, - -0.008290f, -0.013212f, -0.019392f, +0.010401f, +0.022960f, -0.008271f, -0.024896f, -0.005002f, -0.016089f, -0.000033f, - -0.029907f, +0.015917f, -0.010181f, +0.001140f, +0.012372f, +0.018126f, +0.004033f, -0.009575f, +0.017461f, +0.003211f, - -0.012420f, -0.007860f, +0.003852f, +0.009736f, -0.004311f, +0.009708f, +0.005727f, -0.004252f, +0.012033f, +0.012728f, - -0.002600f, +0.005440f, -0.001372f, -0.005735f, -0.004084f, -0.011708f, -0.001536f, +0.002432f, -0.001235f, +0.004076f, - -0.013213f, -0.008099f, +0.003472f, -0.000988f, +0.006530f, +0.000964f, -0.007506f, -0.010260f, +0.002028f, -0.011859f, - -0.006957f, +0.005898f, +0.005330f, -0.002000f, -0.007341f, -0.011007f, -0.000837f, -0.001588f, +0.001629f, +0.001020f, - -0.000661f, +0.002574f, -0.003416f, -0.000838f, -0.001418f, -0.000429f, -0.001772f, -0.000187f, -0.002684f, +0.000605f, - -0.002832f, +0.001151f, +0.000294f, +0.003540f, -0.000907f, -0.000807f, +0.000879f, +0.000342f, -0.001205f, +0.001413f, - -0.000139f, -0.001737f, +0.001873f, -0.001533f, +0.000897f, -0.001444f - }, - { - -0.002949f, +0.042710f, -0.006219f, -0.011311f, +0.026281f, -0.004313f, -0.005717f, -0.007546f, +0.002997f, -0.024242f, - -0.002916f, -0.012703f, +0.000662f, +0.030769f, +0.029151f, +0.025035f, +0.003671f, -0.021259f, +0.034848f, -0.020815f, - +0.011864f, +0.033050f, -0.014385f, +0.004583f, -0.016309f, -0.027525f, -0.002302f, -0.018653f, +0.018852f, +0.006548f, - +0.015972f, -0.007676f, +0.030630f, -0.006773f, +0.001301f, -0.009562f, -0.003044f, +0.020754f, +0.004542f, +0.000211f, - +0.007907f, -0.005348f, +0.009220f, -0.008879f, +0.001264f, +0.001259f, +0.010984f, +0.007105f, +0.002104f, -0.001158f, - +0.002187f, +0.001252f, +0.005513f, +0.001370f, +0.009253f, +0.010746f, -0.004277f, -0.011109f, -0.004230f, -0.000355f, - +0.003240f, +0.003413f, +0.002407f, -0.000014f, +0.003077f, -0.005730f, -0.002332f, +0.001609f, -0.000453f, -0.004675f, - -0.002051f, +0.004114f, +0.003007f, -0.003455f, -0.002834f, -0.001340f, -0.000986f, -0.000067f, +0.001089f, -0.000194f, - +0.001549f, -0.000649f, +0.000695f, +0.001085f, -0.000880f, -0.000886f, -0.000845f, +0.002076f, -0.002164f, +0.001240f, - +0.000075f, +0.000697f, -0.001933f, +0.000477f, +0.001534f, -0.000172f - }, - { - +0.002693f, -0.017521f, -0.026084f, +0.047922f, -0.001562f, +0.007194f, +0.005644f, -0.003202f, -0.013146f, -0.002241f, - +0.030086f, +0.012654f, -0.011846f, -0.020343f, +0.016033f, +0.016590f, -0.000241f, +0.004671f, +0.001928f, -0.003193f, - +0.012196f, -0.013796f, +0.021190f, -0.001588f, -0.033019f, +0.010399f, +0.009758f, +0.005908f, -0.024004f, -0.007137f, - +0.008286f, -0.018899f, -0.008439f, +0.013956f, -0.007443f, +0.012944f, -0.004631f, +0.001742f, -0.008320f, -0.002858f, - +0.001724f, +0.000053f, -0.005501f, +0.004961f, -0.003759f, -0.003900f, -0.010037f, +0.006052f, -0.006753f, -0.001642f, - -0.004733f, +0.002083f, -0.005989f, -0.001181f, +0.003337f, -0.000963f, -0.004075f, +0.003822f, +0.002265f, +0.006865f, - -0.003132f, -0.004861f, -0.002501f, -0.001751f, +0.000165f, -0.002398f, +0.001462f, +0.000611f, +0.002035f, +0.001341f, - +0.000773f, -0.004562f, +0.001022f, -0.000451f, -0.000338f, +0.000859f, -0.000280f, -0.002746f, +0.000285f, +0.003415f, - +0.003252f, +0.001609f, -0.000325f, -0.000801f, -0.000965f, +0.002516f, -0.000153f, +0.001005f, -0.002692f, +0.002984f, - -0.000714f, -0.002417f, +0.001362f, +0.000949f, +0.001527f, -0.001083f - }, - { - +0.079098f, +0.434690f, -0.050173f, -0.026413f, +0.000453f, +0.012156f, +0.010185f, +0.000098f, -0.014123f, +0.023288f, - +0.010926f, -0.021071f, -0.008579f, +0.000183f, +0.026530f, -0.015500f, +0.017843f, +0.029573f, -0.014376f, -0.009043f, - -0.009542f, -0.021215f, +0.010716f, -0.007014f, +0.001088f, +0.025557f, -0.005257f, +0.012852f, -0.002399f, +0.004443f, - +0.008440f, +0.009755f, +0.002669f, +0.002477f, -0.007511f, +0.011105f, -0.009511f, -0.000100f, -0.007548f, +0.007775f, - -0.001703f, -0.004200f, -0.000661f, -0.002891f, +0.005854f, -0.007612f, +0.017424f, -0.002114f, +0.007278f, -0.001000f, - -0.005177f, +0.005891f, +0.001355f, +0.000328f, -0.003778f, -0.009263f, -0.000089f, +0.002648f, -0.004323f, +0.001223f, - -0.003468f, +0.007331f, +0.000875f, -0.003413f, +0.005167f, -0.002950f, +0.003231f, -0.001555f, +0.000765f, +0.005734f, - +0.002371f, +0.005616f, -0.000116f, -0.002151f, +0.000619f, +0.001677f, +0.001050f, +0.001078f, -0.000370f, +0.000722f, - -0.000261f, -0.001029f, -0.001007f, +0.000548f, +0.000706f, +0.000769f, +0.001416f, -0.002621f, -0.001460f, -0.000604f, - +0.000258f, -0.001225f, +0.000417f, -0.001024f, -0.000600f, +0.001705f - }, - { - +0.003604f, +0.047317f, +0.000776f, -0.014562f, +0.002359f, +0.001574f, -0.002221f, -0.006064f, +0.005475f, -0.001998f, - +0.009007f, -0.012147f, -0.005171f, -0.029446f, -0.045673f, -0.011553f, +0.031658f, -0.044866f, +0.020684f, +0.028113f, - +0.001911f, -0.012464f, -0.019808f, +0.000528f, +0.007300f, +0.004327f, +0.039562f, -0.007297f, +0.019612f, -0.027003f, - +0.008650f, +0.007861f, -0.010534f, +0.019084f, -0.005764f, -0.012463f, -0.005039f, -0.008434f, +0.005673f, -0.003831f, - +0.006747f, +0.004172f, -0.010027f, -0.014149f, +0.004541f, +0.005266f, +0.003515f, -0.011649f, +0.005449f, +0.003154f, - -0.000505f, +0.000145f, -0.004051f, +0.003071f, -0.000140f, +0.005957f, +0.001401f, -0.000509f, -0.005829f, +0.005695f, - -0.000438f, -0.002540f, +0.004696f, +0.004684f, -0.005838f, -0.001961f, +0.003385f, +0.003363f, +0.000573f, +0.001305f, - -0.004047f, -0.002397f, +0.000847f, +0.000209f, -0.001769f, -0.003238f, -0.000718f, +0.000533f, +0.000524f, +0.001421f, - -0.001494f, +0.002634f, -0.001472f, +0.000810f, +0.001163f, +0.001513f, +0.000985f, -0.000285f, -0.001097f, -0.001305f, - +0.000579f, +0.001378f, +0.001572f, -0.001459f, -0.001649f, -0.000809f - }, - { - +0.105851f, +0.553182f, -0.067249f, +0.076441f, +0.030519f, +0.007088f, -0.014107f, -0.010999f, -0.008591f, -0.018046f, - -0.005664f, -0.018492f, +0.042930f, -0.045356f, -0.015344f, +0.021848f, +0.006516f, +0.013229f, -0.001188f, -0.010437f, - -0.014034f, +0.009201f, -0.003655f, +0.004450f, -0.012727f, +0.006854f, +0.005408f, +0.010820f, +0.003982f, -0.010310f, - -0.004726f, -0.001605f, +0.003631f, +0.002186f, -0.003019f, +0.012012f, -0.015757f, -0.010864f, +0.001443f, +0.006712f, - +0.005660f, +0.011010f, -0.001337f, -0.007436f, -0.004769f, +0.016186f, +0.011500f, -0.002440f, -0.006618f, +0.002171f, - +0.006808f, +0.003225f, +0.011153f, -0.003600f, +0.003904f, +0.001857f, -0.000109f, -0.004955f, -0.006091f, -0.003896f, - -0.001533f, -0.004825f, +0.006558f, +0.003801f, +0.002160f, +0.001860f, +0.004505f, +0.002740f, -0.002837f, +0.000136f, - +0.002203f, -0.001966f, +0.006399f, +0.002301f, +0.003347f, +0.000938f, +0.000292f, -0.000044f, +0.000170f, +0.002975f, - -0.002281f, +0.002028f, -0.002661f, -0.004112f, +0.000938f, -0.000693f, +0.000704f, -0.000873f, +0.003252f, -0.000425f, - -0.001078f, +0.004188f, +0.000291f, -0.000015f, -0.000667f, +0.000739f - }, - { - -0.000596f, +0.009413f, -0.002134f, +0.011363f, +0.003506f, +0.001025f, -0.000396f, -0.005040f, +0.011276f, -0.002185f, - +0.008842f, +0.001498f, +0.004817f, +0.018144f, +0.090057f, +0.078232f, +0.003815f, +0.019145f, +0.013854f, -0.028747f, - -0.008892f, +0.024213f, +0.041314f, -0.022205f, -0.022430f, -0.014612f, -0.004938f, -0.009917f, +0.021837f, +0.018946f, - -0.007361f, -0.008890f, +0.003897f, +0.011342f, -0.011749f, -0.000912f, -0.005019f, -0.000276f, -0.004215f, +0.000159f, - -0.000017f, +0.003073f, -0.011149f, +0.003551f, +0.005894f, -0.008082f, +0.003009f, +0.004280f, +0.002527f, -0.002404f, - -0.003658f, -0.004643f, -0.000129f, +0.004427f, +0.000887f, -0.000477f, +0.001808f, +0.004701f, +0.011884f, -0.001407f, - -0.000160f, -0.001579f, -0.001910f, +0.003879f, -0.002734f, -0.001228f, -0.005643f, -0.001184f, +0.001637f, +0.003070f, - -0.004628f, -0.002757f, +0.001746f, -0.000936f, +0.001620f, -0.000483f, +0.003043f, -0.003209f, -0.000535f, -0.001603f, - +0.000390f, +0.001991f, +0.000535f, +0.001991f, -0.002345f, -0.002456f, +0.003586f, -0.002797f, +0.001425f, +0.005212f, - -0.001565f, +0.001168f, -0.000479f, -0.001421f, +0.001586f, -0.001590f - }, - { - +0.063748f, -0.749600f, -0.014101f, -0.041032f, -0.036701f, +0.010296f, -0.010853f, +0.016003f, -0.000115f, -0.011367f, - -0.017052f, -0.011507f, -0.018627f, +0.035732f, +0.008054f, -0.021848f, -0.012531f, +0.044475f, -0.011433f, -0.003910f, - -0.003367f, -0.009729f, -0.006135f, -0.005427f, +0.004058f, -0.003365f, +0.000549f, +0.000153f, +0.003895f, +0.008307f, - +0.010781f, -0.006352f, +0.006165f, +0.010866f, +0.006353f, +0.018930f, -0.011046f, +0.006756f, +0.001490f, -0.001563f, - -0.001602f, +0.007695f, -0.000176f, -0.004762f, +0.003968f, +0.012210f, +0.009811f, -0.004328f, -0.001597f, +0.001781f, - -0.017392f, +0.012706f, -0.000382f, -0.006170f, -0.005332f, -0.014701f, +0.001535f, +0.002820f, +0.009193f, +0.009976f, - +0.007206f, -0.005997f, +0.000242f, -0.005506f, -0.002737f, +0.001792f, -0.003378f, +0.001350f, +0.002549f, +0.004346f, - -0.005854f, +0.003184f, -0.002413f, +0.000938f, +0.002223f, +0.000088f, -0.000878f, -0.000905f, -0.000226f, +0.002328f, - -0.001639f, -0.001878f, +0.001623f, +0.000535f, +0.002439f, +0.001743f, -0.002534f, +0.000696f, +0.001696f, -0.000677f, - -0.000204f, -0.002594f, -0.001563f, -0.001602f, -0.000815f, +0.000623f - }, - { - -0.002118f, +0.000862f, -0.015436f, -0.004164f, +0.002023f, -0.001379f, +0.000855f, -0.003584f, +0.000224f, +0.002354f, - -0.006676f, +0.002241f, +0.010408f, +0.028213f, -0.069155f, -0.000738f, +0.020385f, +0.035196f, -0.045898f, +0.000522f, - +0.002739f, -0.022814f, -0.005043f, +0.014078f, -0.061012f, -0.011321f, -0.015479f, -0.008756f, -0.006965f, +0.031887f, - -0.010220f, +0.022457f, +0.013050f, -0.009452f, -0.012729f, +0.019545f, +0.008345f, -0.009344f, +0.004047f, +0.011303f, - -0.010722f, +0.000308f, +0.005017f, -0.006301f, +0.006056f, -0.000105f, -0.000187f, +0.006040f, +0.009258f, +0.007874f, - -0.002304f, +0.006757f, -0.003328f, +0.004295f, +0.006541f, +0.006723f, -0.008934f, +0.001572f, -0.005021f, +0.008540f, - -0.004369f, +0.007836f, -0.005169f, +0.003762f, +0.001024f, -0.000660f, +0.001921f, +0.001511f, +0.002864f, -0.005022f, - +0.002142f, +0.003147f, -0.002140f, +0.002196f, +0.000754f, -0.003264f, +0.004091f, -0.003609f, -0.001164f, +0.001040f, - -0.000818f, +0.001828f, +0.002462f, -0.001454f, -0.002846f, +0.001169f, +0.001285f, -0.000062f, -0.000682f, +0.002542f, - -0.003319f, -0.000881f, +0.002475f, -0.001386f, +0.000966f, +0.000347f - }, - { - +0.011510f, -0.484437f, +0.031484f, +0.005459f, -0.047075f, -0.036062f, -0.001781f, +0.009953f, +0.011225f, -0.009761f, - -0.014435f, -0.009941f, -0.009558f, -0.011529f, +0.011200f, +0.056589f, +0.031496f, +0.003872f, +0.013105f, +0.014010f, - -0.028568f, -0.009578f, +0.009169f, -0.003746f, -0.019662f, +0.018601f, -0.020173f, -0.012781f, -0.029396f, -0.000580f, - +0.011957f, +0.008264f, -0.006875f, +0.021871f, -0.004917f, -0.009831f, +0.019138f, -0.009982f, -0.005202f, -0.005379f, - +0.026754f, -0.010008f, +0.015853f, -0.006957f, +0.013081f, -0.018794f, -0.002796f, +0.005492f, +0.003089f, +0.000484f, - +0.004862f, -0.004497f, -0.004026f, -0.009271f, -0.001776f, +0.002022f, -0.007732f, +0.005444f, +0.003681f, +0.003017f, - +0.000176f, -0.010365f, -0.000283f, +0.004283f, -0.000127f, +0.000180f, +0.000361f, -0.001718f, -0.003033f, +0.000030f, - +0.002497f, -0.003217f, -0.000667f, +0.004733f, -0.003566f, +0.000254f, -0.002852f, -0.003377f, -0.001747f, +0.002717f, - -0.001083f, -0.000827f, -0.001085f, -0.002838f, -0.003769f, -0.003940f, +0.001049f, +0.002376f, -0.000184f, +0.002759f, - -0.002428f, +0.001388f, -0.001150f, +0.000416f, -0.001308f, +0.003120f - }, - { - -0.004353f, +0.100194f, +0.021190f, +0.002946f, -0.005322f, -0.001476f, -0.015824f, -0.002815f, +0.013421f, +0.019323f, - -0.020208f, -0.001750f, +0.020035f, +0.017609f, +0.051765f, +0.005724f, +0.041853f, -0.009157f, -0.012162f, -0.016413f, - +0.009455f, -0.002282f, +0.017464f, -0.002584f, +0.024941f, -0.003175f, -0.009353f, -0.020654f, +0.003416f, +0.018365f, - -0.002503f, -0.007639f, +0.001530f, +0.001241f, -0.024832f, +0.002222f, +0.009733f, -0.008910f, +0.005502f, -0.001619f, - -0.001269f, +0.004244f, -0.009490f, -0.011526f, -0.002044f, +0.006491f, -0.009778f, -0.010815f, +0.013508f, +0.017828f, - +0.001355f, -0.003702f, +0.008865f, +0.002327f, +0.000147f, -0.006285f, +0.003660f, -0.003219f, +0.006145f, -0.001997f, - +0.005207f, +0.001234f, -0.009832f, -0.002446f, -0.002225f, -0.000729f, +0.003682f, +0.001125f, +0.000946f, +0.003153f, - +0.002315f, -0.000326f, +0.006427f, +0.002803f, -0.001521f, +0.002110f, +0.002521f, -0.000125f, +0.001286f, -0.002308f, - -0.000667f, +0.001219f, +0.001460f, -0.004042f, +0.001555f, -0.004397f, +0.001359f, -0.000072f, +0.003548f, -0.000835f, - -0.002027f, +0.000931f, +0.000280f, -0.000368f, +0.000622f, -0.000274f - }, - { - -0.091905f, -0.244867f, -0.006086f, -0.033465f, -0.000923f, +0.030995f, -0.036135f, +0.030985f, +0.006538f, -0.000197f, - +0.022982f, -0.014894f, -0.010960f, +0.021304f, +0.005301f, -0.003175f, +0.012491f, -0.017396f, +0.017198f, -0.003028f, - -0.015605f, +0.005599f, +0.023430f, +0.002065f, -0.032369f, -0.003559f, -0.000604f, +0.004077f, +0.005058f, +0.007703f, - -0.001800f, -0.005751f, +0.011234f, +0.001077f, +0.001683f, +0.053737f, -0.010320f, -0.011697f, -0.005152f, +0.003653f, - -0.011937f, +0.013527f, -0.023203f, +0.005111f, -0.001705f, -0.001284f, -0.003171f, -0.010736f, -0.001413f, +0.011287f, - +0.004028f, +0.000340f, -0.009093f, +0.005039f, +0.010481f, -0.005375f, +0.007535f, +0.004199f, +0.009182f, -0.002734f, - -0.003928f, -0.002190f, -0.000491f, -0.000590f, +0.001753f, +0.004258f, -0.005401f, +0.002048f, +0.001193f, +0.005873f, - +0.002176f, -0.000486f, +0.001087f, -0.001205f, -0.001530f, +0.001787f, +0.001202f, +0.000633f, +0.000463f, -0.002638f, - +0.001537f, +0.000204f, +0.000405f, +0.001394f, -0.004083f, -0.000718f, -0.003862f, -0.001315f, -0.002284f, -0.002288f, - +0.000910f, -0.002548f, +0.001121f, -0.000082f, +0.001044f, +0.000560f - }, - { - +0.004017f, +0.058171f, -0.024441f, -0.008710f, +0.023144f, -0.020185f, -0.003318f, +0.000386f, +0.007360f, -0.009727f, - -0.002117f, +0.004970f, -0.031794f, +0.004172f, -0.103648f, -0.034967f, -0.024074f, +0.013395f, +0.015527f, +0.027088f, - +0.001930f, +0.046485f, +0.050386f, -0.004864f, -0.041870f, +0.022748f, +0.022595f, -0.006698f, +0.011857f, +0.010396f, - -0.003261f, +0.006278f, +0.046399f, -0.005989f, -0.006728f, +0.009006f, +0.003979f, +0.006678f, -0.011226f, +0.001770f, - -0.010958f, +0.008624f, -0.000305f, +0.012044f, -0.004967f, -0.013623f, +0.010656f, -0.006494f, +0.000503f, -0.011654f, - +0.002614f, +0.005604f, +0.002298f, -0.014053f, -0.001719f, -0.003757f, +0.008508f, +0.000184f, -0.001858f, +0.003303f, - -0.005746f, -0.001792f, -0.005633f, -0.002572f, +0.002957f, +0.000189f, +0.010573f, -0.001351f, -0.004215f, -0.003924f, - -0.008900f, +0.004278f, -0.002610f, -0.000186f, -0.002275f, -0.003226f, +0.002647f, -0.003682f, -0.000109f, +0.000747f, - +0.002054f, -0.001259f, +0.001044f, +0.001102f, -0.002851f, +0.001444f, -0.003995f, -0.000738f, +0.000303f, +0.000293f, - +0.000653f, +0.000075f, +0.000967f, +0.000041f, +0.001567f, +0.000178f - }, - { - -0.055998f, +0.130502f, +0.016540f, -0.027216f, -0.003366f, +0.020977f, +0.005846f, -0.013839f, -0.005005f, -0.009163f, - +0.012917f, -0.017841f, -0.013470f, -0.025309f, +0.027575f, -0.003974f, +0.011133f, +0.034599f, -0.014180f, -0.000432f, - +0.003535f, -0.007751f, +0.014503f, +0.011731f, +0.024455f, -0.027956f, +0.014631f, -0.000566f, +0.011392f, -0.001317f, - +0.005557f, +0.002042f, +0.009342f, +0.004206f, -0.002626f, +0.005343f, -0.010794f, -0.005244f, -0.003456f, -0.016485f, - +0.021294f, -0.007694f, -0.021765f, +0.006528f, -0.005842f, +0.012261f, -0.010250f, -0.019057f, -0.011464f, +0.004060f, - +0.011413f, +0.007275f, -0.015413f, -0.014766f, +0.004312f, +0.005016f, +0.004269f, +0.007210f, -0.004358f, +0.003658f, - -0.003490f, -0.005235f, +0.001557f, +0.003445f, +0.006599f, -0.002478f, -0.003612f, +0.003299f, +0.000975f, -0.002323f, - +0.006381f, -0.003322f, -0.001822f, +0.000116f, -0.002687f, -0.001002f, +0.003570f, +0.001057f, -0.000641f, +0.000424f, - -0.002321f, -0.001699f, -0.001534f, -0.001000f, +0.000313f, +0.001540f, +0.003719f, -0.000123f, +0.000117f, +0.001353f, - +0.000703f, +0.001911f, +0.000351f, -0.001793f, +0.001233f, -0.000492f - }, - { - +0.010494f, -0.073975f, -0.024258f, -0.003216f, -0.006154f, -0.012662f, -0.030791f, -0.010134f, -0.002563f, +0.010902f, - +0.012916f, -0.013192f, -0.023051f, -0.015806f, +0.061459f, +0.016027f, -0.031530f, -0.009715f, +0.010228f, -0.064391f, - -0.020744f, +0.031326f, -0.029117f, -0.031400f, -0.023129f, -0.023928f, -0.022871f, -0.023634f, +0.054863f, -0.004109f, - +0.003801f, +0.011533f, -0.007155f, -0.005778f, +0.016663f, -0.010877f, +0.006562f, +0.018735f, -0.004082f, -0.009768f, - -0.000098f, -0.021578f, +0.001767f, -0.013568f, +0.004167f, +0.002569f, -0.002660f, +0.011405f, -0.005967f, +0.009777f, - +0.007883f, +0.004440f, +0.006779f, -0.004447f, -0.007635f, +0.002822f, -0.011192f, -0.000499f, +0.003047f, -0.001437f, - -0.003871f, -0.001968f, -0.001252f, -0.002192f, -0.001715f, -0.002366f, +0.006753f, -0.008829f, +0.010789f, +0.002805f, - -0.004873f, +0.001698f, +0.004218f, -0.001121f, -0.003647f, +0.000825f, -0.000937f, -0.007800f, +0.002122f, +0.003257f, - +0.000378f, +0.000619f, +0.001854f, -0.002103f, +0.003952f, -0.000707f, +0.000771f, +0.002210f, +0.001275f, +0.001144f, - +0.000734f, -0.000077f, -0.000099f, +0.001974f, +0.000166f, +0.000744f - } - }, - { - { - -0.023382f, -0.388903f, +0.069809f, -0.065486f, -0.004781f, +0.008430f, +0.001897f, -0.022310f, +0.002128f, -0.023692f, - -0.044787f, -0.006163f, +0.010006f, +0.017110f, +0.009771f, -0.029339f, +0.007916f, -0.015758f, -0.009957f, -0.018754f, - +0.004222f, -0.005160f, -0.005879f, +0.004042f, +0.021718f, +0.012055f, +0.019552f, -0.017701f, -0.011367f, +0.014568f, - -0.014434f, +0.006592f, +0.008908f, -0.004396f, +0.000704f, +0.003411f, +0.004393f, +0.008005f, +0.003479f, +0.007708f, - -0.000809f, -0.000704f, +0.001112f, +0.000353f, -0.015208f, -0.004970f, -0.001769f, -0.000657f, +0.000614f, -0.003081f, - -0.008408f, -0.003603f, -0.000252f, +0.003452f, +0.003181f, +0.002526f, -0.005101f, -0.002747f, -0.003882f, -0.007356f, - -0.004259f, +0.000298f, +0.003483f, +0.000099f, -0.008652f, -0.004806f, -0.004932f, -0.003213f, +0.002330f, +0.000623f, - -0.000061f, +0.000679f, -0.000612f, -0.001934f, -0.000350f, +0.001773f, -0.002603f, -0.001416f, -0.000021f, -0.001505f, - -0.001226f, -0.001670f, -0.000496f, +0.002204f, +0.001518f, -0.001040f, +0.000585f, +0.001087f, -0.001070f, +0.000413f, - -0.000376f, -0.000067f, +0.000356f, -0.000084f, -0.000009f, +0.000375f - }, - { - +0.001849f, +0.000112f, +0.007959f, +0.022002f, +0.001802f, +0.000032f, -0.006453f, -0.013999f, +0.002138f, -0.023793f, - -0.000016f, +0.005491f, +0.003980f, +0.014595f, +0.031620f, +0.043740f, -0.005849f, -0.017410f, -0.004182f, +0.029604f, - -0.014154f, +0.030841f, +0.006976f, -0.022751f, -0.000042f, -0.018977f, +0.001096f, -0.018209f, +0.012559f, +0.006272f, - +0.008962f, +0.003816f, +0.019385f, +0.001911f, -0.006196f, -0.009087f, +0.000051f, +0.011409f, +0.006674f, +0.006834f, - +0.002276f, +0.003506f, -0.005446f, +0.001594f, -0.003670f, +0.002920f, +0.005071f, +0.008271f, +0.002927f, -0.005538f, - +0.006838f, +0.005292f, +0.003308f, -0.004206f, +0.010930f, +0.008970f, -0.000961f, -0.003947f, -0.005067f, -0.002868f, - -0.001888f, +0.002697f, +0.005641f, +0.000174f, -0.002235f, -0.000374f, -0.000488f, -0.002691f, -0.000691f, -0.006984f, - +0.003285f, -0.000075f, +0.000644f, +0.000123f, -0.000150f, -0.002862f, +0.000530f, -0.000019f, +0.000082f, +0.000862f, - -0.000350f, +0.000195f, +0.002050f, +0.001541f, -0.001390f, -0.002484f, -0.000548f, +0.000929f, -0.000387f, -0.001428f, - +0.000741f, +0.000577f, -0.001088f, -0.001061f, +0.001006f, +0.000765f - }, - { - -0.003850f, -0.067071f, +0.016525f, +0.024295f, +0.020902f, +0.004580f, +0.002951f, -0.001458f, -0.007822f, +0.004924f, - +0.014612f, +0.012995f, -0.015670f, -0.000743f, +0.016692f, +0.021761f, +0.001403f, -0.021157f, +0.011981f, +0.005427f, - +0.008754f, -0.004968f, +0.001130f, +0.005159f, -0.008409f, -0.025327f, +0.014619f, -0.002084f, -0.006410f, -0.011600f, - -0.002405f, -0.011699f, +0.001516f, -0.003023f, +0.012109f, +0.009319f, +0.004606f, -0.011062f, -0.003595f, -0.002362f, - +0.006898f, +0.003908f, -0.005214f, -0.004219f, -0.001846f, +0.000751f, -0.004389f, -0.005451f, -0.004066f, +0.000615f, - -0.002080f, -0.004845f, -0.003089f, +0.000961f, +0.003107f, -0.001222f, +0.003529f, -0.003108f, +0.003256f, +0.005525f, - -0.000981f, -0.003548f, -0.003884f, -0.002723f, +0.002380f, -0.001372f, -0.001266f, +0.000019f, +0.002265f, +0.000750f, - -0.000212f, +0.000406f, -0.002677f, +0.000852f, +0.000225f, -0.001891f, -0.002372f, +0.002408f, +0.000867f, +0.003633f, - +0.001237f, +0.000548f, -0.000791f, +0.000235f, +0.001683f, -0.000405f, +0.000178f, +0.000346f, +0.001099f, -0.000489f, - -0.000337f, -0.002036f, +0.000037f, +0.002432f, +0.001234f, +0.000209f - }, - { - -0.033783f, +0.444164f, +0.070661f, -0.019759f, -0.028179f, +0.006106f, +0.014202f, +0.005077f, -0.005969f, -0.006371f, - +0.031035f, -0.024179f, -0.005848f, -0.013143f, +0.016469f, -0.006185f, -0.000489f, +0.049940f, -0.017660f, +0.000094f, - -0.009416f, -0.006655f, -0.015350f, +0.001031f, +0.004242f, +0.018368f, +0.002803f, +0.014910f, -0.001867f, +0.003572f, - +0.005376f, +0.002985f, +0.005655f, +0.000700f, -0.000215f, +0.001180f, -0.004690f, -0.010590f, +0.007086f, -0.003585f, - -0.000956f, +0.005180f, -0.005257f, -0.004923f, +0.005771f, -0.007346f, +0.004453f, +0.006637f, +0.005993f, +0.008294f, - -0.003548f, -0.001125f, -0.003511f, +0.005098f, -0.000591f, -0.007796f, -0.001244f, -0.006880f, +0.001872f, -0.000721f, - +0.002637f, +0.000841f, -0.006017f, +0.002012f, +0.003006f, +0.002826f, +0.000579f, -0.004028f, +0.002254f, +0.005058f, - -0.000282f, +0.005689f, +0.002051f, -0.003077f, +0.000855f, +0.001825f, +0.002418f, -0.000149f, -0.000714f, +0.000228f, - -0.000287f, -0.001079f, -0.001839f, +0.000915f, +0.001080f, +0.001055f, -0.000141f, -0.000679f, -0.001221f, +0.000651f, - -0.000332f, -0.001710f, +0.000934f, -0.000023f, -0.000372f, +0.000250f - }, - { - -0.003613f, +0.026269f, +0.027684f, -0.009503f, -0.003305f, +0.002266f, +0.000879f, -0.003571f, -0.000025f, -0.004284f, - +0.009137f, -0.019283f, -0.009028f, -0.030316f, -0.042506f, -0.019040f, +0.065071f, +0.012699f, -0.051751f, +0.026039f, - +0.011922f, -0.016378f, -0.011889f, -0.006028f, +0.004764f, +0.018461f, +0.033577f, -0.005839f, +0.003657f, +0.005417f, - -0.009324f, +0.003263f, +0.002662f, +0.004238f, -0.012140f, -0.004504f, -0.006424f, +0.000454f, +0.002599f, -0.009018f, - -0.000591f, +0.008558f, -0.007526f, -0.009776f, +0.004125f, -0.002519f, +0.000487f, +0.000273f, +0.000299f, +0.004430f, - -0.004038f, -0.002434f, -0.001986f, -0.001207f, +0.002351f, +0.005476f, -0.000518f, +0.000871f, -0.003817f, +0.008360f, - -0.006546f, +0.001421f, +0.004510f, -0.001437f, -0.003192f, -0.003124f, +0.004196f, +0.003048f, -0.001931f, +0.001498f, - -0.001678f, -0.001640f, +0.000999f, -0.000413f, -0.003429f, +0.001525f, -0.004401f, +0.000720f, -0.002726f, +0.002222f, - -0.000200f, +0.001236f, -0.000294f, -0.000035f, +0.001430f, +0.001701f, -0.000100f, +0.000975f, -0.000649f, -0.001251f, - +0.000475f, +0.000505f, +0.000957f, -0.000077f, -0.001616f, -0.001041f - }, - { - -0.038443f, +0.584663f, +0.063228f, +0.118620f, -0.004533f, +0.011621f, +0.010116f, -0.051419f, +0.006198f, -0.000288f, - -0.029814f, -0.003843f, +0.023641f, -0.026226f, -0.017062f, +0.017224f, +0.006153f, +0.014328f, +0.002419f, -0.006213f, - -0.024287f, +0.011435f, -0.008339f, +0.002107f, -0.009881f, +0.012484f, +0.007906f, +0.004775f, +0.016801f, -0.015397f, - -0.015726f, +0.002132f, +0.001561f, +0.000174f, +0.003844f, +0.004193f, -0.003014f, -0.009844f, -0.005325f, +0.011124f, - +0.007890f, +0.015558f, -0.007311f, -0.000296f, -0.000387f, +0.005474f, +0.012698f, -0.002503f, +0.001951f, +0.000644f, - +0.004102f, +0.002891f, +0.006655f, +0.005247f, -0.008020f, +0.007060f, -0.006163f, -0.002608f, -0.007280f, -0.001045f, - -0.003113f, -0.001424f, +0.004314f, -0.001679f, +0.002239f, +0.005754f, +0.002774f, +0.002466f, -0.000506f, -0.001293f, - +0.000401f, +0.001048f, -0.000363f, +0.007127f, +0.001545f, +0.001596f, +0.000796f, +0.000175f, +0.001858f, +0.001008f, - +0.000019f, -0.000557f, -0.002473f, -0.000876f, -0.000765f, +0.000325f, -0.000680f, -0.000322f, +0.002690f, +0.000819f, - -0.001164f, +0.002728f, +0.000905f, -0.000049f, +0.000412f, +0.000221f - }, - { - -0.000498f, -0.005473f, +0.004532f, +0.010430f, +0.001887f, +0.000617f, -0.000464f, -0.000129f, +0.004533f, +0.005175f, - +0.010319f, -0.001994f, +0.010949f, +0.034729f, +0.082938f, +0.056425f, +0.030729f, +0.023256f, +0.006592f, -0.001676f, - -0.014976f, +0.018894f, +0.056879f, -0.066372f, +0.000591f, -0.022097f, +0.013268f, +0.004323f, +0.017663f, -0.010945f, - +0.000530f, -0.016081f, +0.016201f, +0.014453f, -0.020823f, -0.002293f, +0.002910f, -0.008715f, -0.001069f, -0.002392f, - +0.000753f, +0.001407f, -0.006492f, +0.004354f, +0.002758f, -0.002518f, +0.000843f, +0.007464f, -0.005307f, -0.005002f, - -0.000940f, -0.002889f, -0.007487f, +0.004460f, +0.001029f, +0.001852f, -0.000695f, +0.005029f, +0.006794f, +0.001046f, - -0.001640f, +0.002008f, -0.001003f, +0.002684f, -0.000692f, +0.000817f, -0.005439f, -0.000031f, -0.001165f, -0.000536f, - -0.001380f, -0.001573f, +0.001495f, -0.003479f, +0.002015f, +0.000357f, +0.003097f, -0.003253f, -0.001840f, -0.000472f, - +0.000417f, +0.003032f, +0.000888f, -0.000673f, -0.001112f, -0.001021f, +0.000530f, -0.000938f, +0.002923f, +0.001635f, - +0.000302f, +0.000980f, -0.000068f, -0.001299f, -0.000056f, -0.000527f - }, - { - -0.099209f, -0.593855f, +0.049621f, -0.093972f, +0.012958f, +0.000636f, +0.008745f, +0.000844f, +0.001112f, -0.004928f, - -0.037389f, -0.015626f, +0.025983f, +0.016260f, +0.006850f, -0.030554f, +0.022360f, -0.001515f, +0.008205f, +0.002302f, - -0.004768f, -0.007505f, -0.008332f, -0.012769f, +0.007907f, +0.000467f, +0.000001f, -0.011718f, +0.007803f, +0.007981f, - +0.009326f, +0.000065f, +0.005213f, +0.008219f, +0.004218f, +0.008159f, -0.001272f, -0.000943f, +0.000902f, +0.001959f, - +0.000222f, +0.000190f, +0.000909f, +0.005497f, +0.000933f, +0.003781f, +0.010516f, +0.003638f, +0.000114f, -0.003565f, - -0.006669f, -0.000731f, +0.002171f, -0.003458f, -0.004886f, -0.007658f, -0.007735f, +0.002442f, +0.006314f, +0.012836f, - +0.006775f, -0.002418f, +0.000464f, -0.005677f, +0.001180f, +0.000594f, -0.005863f, +0.002869f, +0.001576f, +0.000043f, - -0.000764f, -0.000762f, +0.000190f, -0.001798f, +0.002217f, -0.000506f, +0.000792f, -0.003183f, +0.001047f, +0.003163f, - -0.000721f, +0.000094f, -0.000111f, +0.000029f, +0.002233f, +0.000271f, -0.001563f, +0.001285f, -0.000836f, -0.000374f, - -0.001139f, -0.000929f, -0.001749f, -0.001739f, +0.000737f, +0.000894f - }, - { - +0.000146f, -0.017303f, -0.006033f, +0.001638f, -0.009599f, +0.001985f, +0.000105f, -0.001175f, -0.002970f, -0.000194f, - +0.002433f, -0.001443f, -0.001449f, -0.006356f, -0.029494f, +0.017070f, +0.012203f, +0.043242f, -0.035341f, +0.030520f, - -0.058382f, +0.002855f, +0.015400f, -0.053940f, -0.032761f, -0.006918f, -0.009182f, -0.006026f, +0.001939f, -0.006738f, - +0.015948f, +0.018992f, +0.000831f, -0.002204f, +0.004792f, -0.001346f, +0.016289f, -0.005257f, +0.012825f, +0.000737f, - -0.010305f, -0.002340f, +0.008882f, -0.008023f, -0.003833f, +0.003470f, +0.000688f, +0.009558f, +0.007607f, +0.006634f, - -0.004778f, +0.005132f, +0.003076f, +0.004638f, +0.002897f, +0.006956f, -0.003448f, -0.006907f, +0.000343f, +0.003042f, - +0.000801f, +0.003089f, -0.002263f, +0.002535f, +0.003530f, -0.003122f, +0.004713f, +0.001813f, +0.000350f, -0.001402f, - -0.000394f, +0.004284f, -0.000202f, +0.000548f, +0.000580f, +0.000991f, +0.000488f, -0.002657f, +0.000126f, -0.000525f, - -0.002557f, +0.003193f, +0.002495f, -0.000171f, -0.003749f, +0.001227f, -0.001033f, +0.001566f, -0.000424f, +0.000438f, - -0.000308f, -0.001111f, +0.000927f, +0.000893f, +0.000238f, -0.000476f - }, - { - -0.014865f, -0.464291f, +0.098358f, -0.027968f, -0.031837f, -0.003379f, -0.024784f, -0.022533f, +0.021491f, -0.013896f, - -0.011607f, -0.023347f, -0.034336f, -0.004428f, +0.041071f, +0.028088f, +0.044293f, -0.005260f, +0.005307f, +0.013954f, - -0.007546f, -0.020523f, +0.006933f, +0.001555f, -0.004171f, -0.004519f, -0.015106f, -0.002258f, -0.025075f, -0.010413f, - +0.008656f, +0.013067f, +0.000228f, +0.014632f, -0.019551f, -0.001252f, +0.004834f, +0.004136f, -0.001573f, +0.006459f, - +0.002278f, -0.004862f, +0.015822f, +0.003950f, -0.004361f, -0.013121f, +0.004543f, +0.001389f, -0.000788f, +0.009406f, - -0.008344f, -0.000817f, -0.002816f, -0.005939f, +0.000582f, -0.004958f, +0.000273f, +0.001681f, +0.003459f, +0.002291f, - +0.000225f, -0.008933f, +0.002952f, +0.000202f, -0.000575f, +0.003373f, -0.002158f, +0.002193f, -0.004422f, -0.001178f, - +0.000931f, -0.002057f, -0.001698f, +0.004414f, -0.000956f, -0.002251f, -0.000190f, -0.003231f, -0.001499f, +0.001517f, - -0.000761f, +0.000011f, -0.002730f, -0.000602f, -0.005614f, -0.001671f, -0.001927f, +0.001537f, +0.001049f, -0.000231f, - +0.000096f, +0.000090f, +0.000565f, +0.001660f, +0.000289f, +0.000325f - }, - { - +0.003018f, +0.093084f, +0.020589f, +0.000810f, -0.003815f, -0.010398f, -0.019892f, +0.000970f, +0.026532f, -0.002408f, - -0.005564f, -0.012420f, +0.012840f, +0.031136f, +0.033587f, +0.010858f, +0.027415f, +0.014357f, -0.024172f, -0.017909f, - +0.028160f, +0.001182f, +0.006960f, +0.001563f, +0.015466f, -0.021311f, +0.003914f, -0.009117f, +0.013881f, -0.001908f, - +0.008462f, -0.012977f, -0.001695f, +0.004670f, -0.016473f, -0.011810f, +0.012190f, +0.002328f, +0.001229f, -0.007310f, - +0.006246f, -0.006987f, -0.007398f, -0.010806f, +0.000733f, +0.006106f, -0.010050f, -0.005521f, +0.005040f, +0.011608f, - +0.006346f, +0.002576f, +0.002079f, +0.008120f, -0.007460f, -0.003772f, +0.007335f, -0.001613f, +0.001977f, +0.003181f, - +0.002429f, -0.002828f, -0.005082f, +0.000476f, -0.003448f, +0.000299f, +0.000810f, -0.000362f, +0.001558f, +0.002356f, - +0.003079f, +0.001911f, +0.000874f, +0.003203f, -0.001431f, +0.003787f, +0.001117f, +0.001248f, +0.001285f, -0.000784f, - -0.003139f, +0.003562f, -0.000491f, -0.001615f, -0.000627f, -0.000142f, -0.000791f, +0.002195f, -0.000007f, +0.000136f, - -0.001015f, +0.002355f, -0.001343f, +0.000048f, +0.000484f, -0.001771f - }, - { - +0.036203f, -0.355163f, -0.060964f, -0.023301f, -0.003036f, -0.031981f, +0.018397f, +0.010991f, -0.006352f, +0.024735f, - +0.014245f, -0.012759f, -0.012090f, +0.013120f, +0.007781f, +0.001868f, +0.014529f, -0.018185f, +0.004526f, +0.002173f, - +0.002947f, -0.004220f, +0.007147f, +0.004536f, -0.011978f, -0.013745f, +0.005723f, -0.008443f, +0.002611f, +0.012609f, - +0.001898f, -0.003027f, +0.011079f, -0.001855f, +0.020757f, +0.018977f, +0.005263f, -0.011913f, +0.008053f, -0.010442f, - +0.002939f, -0.000024f, -0.011302f, -0.005915f, -0.002983f, -0.013665f, +0.005630f, +0.000836f, -0.004263f, +0.002288f, - -0.002795f, +0.004711f, -0.002487f, +0.004266f, +0.008945f, -0.005204f, +0.005172f, +0.007489f, +0.001437f, +0.005955f, - -0.002856f, -0.003112f, -0.001734f, -0.001216f, +0.000945f, +0.001221f, -0.001330f, +0.000262f, +0.002457f, +0.001494f, - +0.002681f, +0.000638f, +0.003067f, +0.000165f, +0.000447f, -0.000081f, +0.001238f, +0.001577f, -0.001880f, -0.002016f, - +0.000293f, +0.001938f, +0.000771f, -0.001780f, -0.002091f, -0.002016f, -0.001713f, -0.003815f, -0.002138f, +0.000787f, - -0.002321f, -0.001770f, +0.000884f, +0.000688f, -0.000211f, -0.000335f - }, - { - -0.005166f, -0.000222f, +0.042524f, -0.005311f, +0.006565f, -0.003471f, -0.013003f, +0.004526f, -0.004546f, -0.008895f, - +0.002291f, +0.003928f, +0.004864f, -0.030537f, -0.101101f, -0.079732f, +0.025647f, -0.017500f, +0.008485f, +0.028496f, - +0.033734f, +0.049000f, -0.020971f, -0.007018f, +0.001047f, -0.000257f, +0.014806f, +0.011347f, +0.021071f, +0.011082f, - -0.024890f, +0.032885f, +0.018974f, +0.000530f, -0.006207f, -0.003538f, +0.017391f, +0.003764f, -0.018481f, -0.004309f, - +0.002427f, +0.009885f, +0.007702f, +0.004489f, -0.007950f, +0.000492f, -0.001203f, -0.004868f, -0.006416f, -0.000651f, - +0.000556f, -0.004731f, -0.003760f, -0.005291f, -0.004218f, -0.003389f, -0.000431f, +0.002088f, +0.001760f, -0.002211f, - +0.000817f, -0.002530f, -0.003467f, -0.004130f, +0.000261f, +0.002920f, +0.002630f, +0.002975f, -0.000006f, -0.009983f, - -0.000086f, -0.001658f, +0.000771f, -0.002455f, -0.001943f, -0.001193f, -0.001979f, -0.001889f, -0.000039f, +0.000913f, - +0.000466f, -0.000244f, +0.002520f, +0.001058f, -0.002407f, -0.000941f, -0.001435f, -0.000192f, -0.001592f, +0.001874f, - +0.000591f, +0.001475f, -0.000092f, +0.000314f, +0.001232f, -0.000675f - }, - { - +0.063219f, -0.001901f, -0.007729f, -0.034237f, +0.000061f, -0.014527f, +0.039422f, -0.007132f, +0.001154f, -0.008622f, - +0.011712f, -0.016450f, -0.006433f, +0.007499f, +0.004080f, -0.003436f, +0.023320f, +0.014580f, -0.004538f, +0.015831f, - -0.005685f, -0.007368f, -0.000313f, +0.024129f, -0.004486f, -0.008000f, +0.003657f, +0.006628f, +0.001290f, -0.009811f, - +0.014708f, +0.007620f, +0.002810f, +0.003340f, +0.006980f, +0.000340f, -0.009139f, -0.005941f, +0.002205f, -0.010134f, - +0.016561f, -0.023330f, -0.010877f, +0.004584f, -0.001968f, +0.008401f, -0.003115f, -0.016857f, -0.002441f, +0.001798f, - +0.011227f, -0.004705f, -0.010276f, -0.009701f, +0.000607f, +0.002764f, +0.003860f, +0.003105f, +0.003099f, +0.002289f, - -0.008494f, -0.000981f, -0.000810f, +0.004648f, +0.002650f, +0.000645f, -0.002466f, +0.003736f, -0.002340f, +0.003147f, - +0.003587f, -0.003404f, +0.001770f, -0.002648f, -0.002845f, -0.001466f, +0.005436f, +0.000551f, +0.002801f, -0.001630f, - -0.003437f, -0.002330f, +0.002087f, -0.000355f, -0.000295f, +0.001776f, +0.002088f, +0.000388f, -0.000335f, +0.000303f, - +0.002148f, +0.001753f, +0.000078f, -0.000378f, +0.000276f, -0.000118f - }, - { - -0.008790f, -0.088375f, +0.015489f, -0.000457f, -0.021883f, -0.004794f, -0.023166f, -0.016045f, -0.006373f, +0.012426f, - +0.013038f, -0.021530f, -0.017265f, +0.037828f, +0.005531f, -0.021329f, +0.006993f, -0.012134f, -0.008661f, -0.012897f, - -0.055319f, +0.008371f, -0.018027f, -0.012374f, -0.024761f, -0.035843f, -0.023600f, -0.018080f, +0.038847f, +0.030860f, - -0.012656f, -0.003488f, -0.003345f, -0.001457f, +0.012168f, +0.004039f, +0.000395f, +0.008209f, +0.003425f, -0.012857f, - -0.008815f, -0.015774f, -0.001448f, -0.013006f, +0.006917f, -0.006282f, +0.011879f, +0.006433f, +0.002169f, +0.001588f, - +0.011651f, +0.006666f, +0.001575f, +0.001640f, -0.006226f, -0.001011f, -0.008329f, -0.005591f, +0.002339f, -0.005574f, - -0.004308f, +0.001313f, -0.000679f, -0.004133f, -0.003320f, -0.000096f, +0.000208f, +0.001935f, +0.001646f, +0.005247f, - -0.002297f, +0.001703f, +0.000005f, +0.002010f, -0.003491f, +0.000582f, -0.002711f, -0.004724f, +0.000476f, +0.002013f, - +0.000945f, +0.000709f, +0.004003f, +0.000295f, +0.001199f, -0.002609f, +0.002025f, +0.000193f, +0.001660f, +0.001700f, - +0.001102f, +0.000042f, +0.001082f, -0.000033f, +0.000957f, +0.001992f - } - }, - { - { - +0.019642f, -0.290539f, +0.140655f, -0.023024f, +0.013282f, -0.001146f, -0.002039f, -0.019729f, +0.019627f, -0.000541f, - -0.022822f, +0.016873f, +0.012618f, -0.020062f, -0.000272f, -0.009437f, +0.025126f, +0.003342f, +0.014482f, -0.009313f, - +0.001024f, -0.009357f, -0.003023f, -0.002496f, -0.002255f, -0.002506f, +0.020054f, -0.015781f, -0.015072f, +0.020028f, - -0.009420f, -0.002722f, +0.005429f, -0.000241f, +0.002905f, +0.000063f, -0.001363f, +0.006463f, +0.003313f, -0.002904f, - -0.005329f, +0.003069f, -0.003458f, -0.003673f, -0.009181f, -0.001832f, -0.002515f, +0.001663f, +0.000267f, -0.002877f, - +0.000028f, +0.002294f, -0.000944f, +0.001748f, -0.001085f, +0.004617f, +0.002314f, +0.004558f, -0.001352f, -0.001817f, - +0.003539f, +0.000025f, -0.000904f, +0.002618f, -0.003160f, -0.000264f, -0.000029f, -0.002296f, -0.000703f, -0.002082f, - -0.000729f, +0.000315f, +0.003483f, +0.002607f, +0.001103f, +0.001527f, -0.003056f, -0.001830f, +0.000429f, +0.000056f, - +0.001782f, -0.001804f, -0.002026f, +0.000215f, +0.000650f, +0.000473f, +0.001198f, +0.002422f, +0.000306f, +0.000025f, - -0.000071f, +0.000914f, +0.000716f, -0.000221f, +0.000051f, +0.000342f - }, - { - +0.000220f, -0.015363f, -0.002268f, +0.004434f, -0.011945f, +0.004197f, -0.002367f, -0.005499f, +0.011044f, -0.000466f, - +0.014224f, -0.000695f, -0.001650f, +0.008755f, +0.011251f, +0.017060f, -0.008982f, -0.007484f, -0.032741f, +0.012909f, - -0.020009f, +0.006564f, +0.007558f, +0.007537f, +0.020700f, -0.019747f, +0.015849f, -0.006889f, +0.007794f, -0.008673f, - +0.006564f, +0.005348f, +0.001373f, -0.005788f, -0.005988f, +0.003428f, +0.005120f, +0.007305f, +0.003826f, +0.005505f, - -0.004591f, +0.001250f, +0.000206f, +0.003211f, -0.006793f, +0.003439f, +0.000433f, +0.001823f, -0.000619f, -0.003281f, - +0.005607f, +0.002475f, +0.003803f, -0.004128f, +0.005410f, -0.001290f, -0.000615f, +0.000160f, -0.003608f, +0.001702f, - -0.001107f, -0.000106f, +0.000117f, -0.001243f, -0.001524f, +0.002308f, +0.003204f, -0.004273f, -0.000066f, -0.004448f, - +0.003347f, -0.000972f, -0.001115f, -0.001228f, +0.000171f, -0.001648f, +0.000829f, +0.000644f, -0.000284f, -0.001278f, - +0.000311f, +0.001612f, +0.001708f, +0.000685f, -0.000713f, -0.000973f, -0.000601f, -0.000610f, -0.000587f, -0.001082f, - +0.001500f, +0.000280f, -0.000292f, -0.000184f, -0.000170f, +0.000096f - }, - { - +0.003314f, -0.048819f, +0.008333f, -0.020274f, +0.004216f, +0.003591f, -0.001831f, +0.002061f, -0.005922f, -0.006180f, - +0.008188f, +0.008825f, -0.016750f, +0.002317f, +0.010995f, +0.026257f, -0.005629f, -0.015485f, +0.008888f, -0.013519f, - +0.007276f, +0.002363f, +0.004126f, +0.006033f, +0.001503f, -0.021391f, +0.016649f, -0.001717f, +0.004358f, +0.000795f, - -0.000884f, -0.004851f, +0.012143f, -0.007823f, +0.001765f, +0.004038f, +0.011291f, -0.005672f, +0.005314f, +0.006157f, - +0.003875f, -0.000940f, -0.000969f, -0.000943f, +0.003146f, +0.007499f, -0.000274f, +0.001694f, +0.001288f, +0.001358f, - +0.002563f, -0.001226f, +0.000655f, +0.001800f, +0.001409f, -0.000873f, +0.002960f, -0.005312f, -0.001459f, +0.000900f, - +0.000961f, +0.000042f, -0.001478f, -0.001181f, +0.001195f, -0.001079f, -0.000422f, -0.001631f, -0.000551f, +0.001324f, - +0.001071f, +0.000938f, -0.002812f, +0.000505f, +0.000054f, +0.000581f, -0.000049f, +0.002897f, -0.000457f, -0.000507f, - -0.002146f, +0.000554f, -0.000876f, -0.000852f, +0.001493f, -0.001083f, -0.000095f, -0.000328f, +0.001151f, -0.001035f, - +0.000008f, -0.001564f, -0.000766f, +0.000657f, -0.000770f, +0.001145f - }, - { - -0.011273f, +0.316421f, -0.072520f, +0.010586f, +0.008515f, -0.005530f, +0.011268f, +0.006049f, -0.004449f, -0.021245f, - +0.015315f, -0.011667f, +0.008463f, -0.009718f, -0.004600f, -0.013697f, -0.007942f, +0.025246f, -0.028919f, +0.000950f, - -0.002837f, +0.002864f, -0.007801f, +0.005251f, -0.011052f, +0.001351f, +0.000312f, +0.013357f, +0.000172f, -0.005451f, - +0.000568f, -0.000216f, -0.001315f, +0.001633f, +0.003369f, +0.000655f, +0.000087f, -0.005032f, +0.009573f, -0.007776f, - -0.001807f, +0.007005f, -0.001645f, -0.007210f, +0.001576f, -0.001796f, +0.001813f, +0.001207f, -0.003613f, +0.004532f, - -0.004493f, -0.006121f, -0.001207f, +0.005486f, +0.001194f, -0.003069f, +0.000140f, -0.005167f, +0.002922f, -0.003794f, - +0.002253f, -0.000789f, -0.005915f, +0.004677f, +0.001096f, +0.001133f, -0.000106f, -0.006894f, -0.001891f, +0.000745f, - -0.004357f, +0.001096f, +0.001348f, -0.002423f, +0.000150f, -0.000249f, +0.000502f, -0.000311f, +0.000440f, +0.001449f, - +0.000917f, +0.000664f, -0.000995f, -0.000194f, -0.000379f, +0.000370f, +0.001030f, +0.000466f, -0.000565f, +0.001464f, - +0.000398f, -0.001327f, +0.001098f, +0.000875f, +0.000161f, +0.000650f - }, - { - +0.003841f, -0.005101f, -0.005522f, -0.001097f, +0.001492f, +0.000785f, +0.002195f, +0.000512f, +0.002702f, +0.000452f, - +0.008061f, -0.014956f, +0.010938f, -0.003139f, -0.028570f, -0.039719f, +0.024913f, +0.042989f, -0.042031f, -0.004449f, - +0.007846f, +0.001260f, +0.014891f, -0.001875f, -0.007052f, -0.035648f, +0.002061f, +0.002071f, -0.001987f, +0.000607f, - -0.020252f, -0.008147f, -0.004826f, -0.004282f, -0.009415f, +0.000442f, -0.003861f, +0.009277f, +0.006427f, -0.010631f, - -0.002034f, +0.009155f, -0.003350f, +0.000093f, +0.002849f, -0.007146f, +0.000129f, +0.001256f, -0.005733f, +0.003485f, - +0.000953f, -0.000484f, -0.002885f, -0.003070f, +0.003536f, +0.004876f, -0.000279f, +0.003281f, -0.006455f, +0.001398f, - -0.008091f, -0.000166f, +0.000826f, -0.003802f, -0.001526f, -0.002712f, -0.000730f, +0.000340f, -0.000779f, +0.005513f, - +0.000086f, -0.001730f, +0.001122f, +0.000703f, -0.000512f, +0.003389f, -0.003853f, +0.001383f, -0.002040f, +0.000859f, - -0.001173f, +0.000734f, -0.000623f, -0.000211f, +0.000585f, +0.001005f, -0.000534f, +0.000686f, +0.000406f, -0.000860f, - +0.000241f, +0.000458f, +0.000096f, -0.000546f, -0.000449f, +0.000381f - }, - { - -0.026128f, +0.449611f, -0.041292f, +0.119838f, -0.014160f, +0.000931f, +0.018046f, -0.035401f, +0.005026f, +0.012460f, - -0.010153f, -0.012853f, +0.012208f, -0.001157f, -0.007265f, +0.015789f, +0.000643f, +0.003641f, -0.002709f, +0.004620f, - -0.003269f, +0.012550f, -0.005316f, +0.011101f, -0.007922f, +0.000757f, -0.004810f, -0.008155f, +0.014102f, -0.000841f, - -0.004973f, +0.005087f, -0.000703f, -0.008172f, -0.004876f, -0.001429f, +0.004589f, +0.002819f, -0.000105f, +0.008964f, - +0.002115f, +0.006599f, -0.005242f, +0.000163f, -0.004288f, +0.006012f, +0.008753f, -0.010706f, -0.001635f, +0.002336f, - -0.000505f, -0.001174f, +0.003433f, +0.004382f, -0.008150f, +0.007511f, -0.001544f, +0.002641f, -0.005743f, -0.004132f, - -0.004443f, -0.001926f, -0.001933f, -0.004660f, +0.001707f, +0.001915f, -0.000296f, +0.001660f, +0.000469f, -0.001181f, - -0.001950f, +0.001166f, -0.003991f, +0.003308f, -0.001026f, +0.001111f, +0.001201f, -0.000875f, +0.000648f, -0.000866f, - -0.001002f, +0.000378f, +0.000563f, +0.001272f, +0.000324f, +0.001548f, -0.000156f, -0.000416f, +0.000525f, +0.000717f, - -0.001284f, +0.000921f, +0.000352f, -0.001021f, +0.000150f, +0.000558f - }, - { - +0.001255f, -0.018119f, -0.012260f, -0.000965f, -0.005624f, +0.001042f, -0.001810f, -0.000166f, +0.002680f, -0.000284f, - +0.000566f, -0.004833f, +0.006194f, +0.017032f, +0.047899f, -0.022439f, -0.023704f, +0.008044f, +0.012889f, +0.011077f, - -0.023961f, +0.001684f, +0.051960f, -0.055444f, +0.006368f, +0.001301f, +0.023993f, -0.004956f, +0.000940f, -0.019195f, - +0.011702f, -0.011803f, +0.016432f, +0.027473f, -0.003303f, +0.006612f, +0.004497f, -0.000896f, +0.009333f, +0.002276f, - +0.001733f, +0.003063f, -0.001003f, +0.004991f, +0.000077f, +0.002877f, +0.001840f, +0.005533f, -0.004208f, -0.004840f, - -0.001443f, -0.003392f, -0.007648f, +0.002155f, -0.002133f, -0.001082f, -0.001716f, -0.002643f, +0.001200f, +0.002166f, - -0.004961f, -0.000359f, -0.000706f, +0.003041f, +0.002180f, +0.003251f, -0.002666f, +0.001166f, -0.000424f, -0.000639f, - -0.000245f, +0.001560f, +0.002221f, -0.003514f, +0.002930f, +0.001201f, +0.003102f, -0.000961f, -0.000296f, +0.000859f, - -0.000025f, +0.000689f, -0.000341f, -0.000153f, +0.000036f, -0.000996f, -0.000473f, +0.000009f, +0.000852f, -0.001606f, - +0.000384f, +0.000579f, +0.000166f, +0.000226f, +0.000332f, -0.000174f - }, - { - +0.109343f, -0.336816f, +0.050701f, -0.084834f, -0.001035f, +0.004339f, +0.003369f, -0.013205f, -0.004162f, +0.006455f, - -0.015824f, -0.004587f, +0.028132f, -0.003126f, +0.015671f, -0.019091f, +0.000991f, -0.026354f, +0.004183f, +0.010356f, - +0.003213f, -0.000156f, -0.003162f, -0.013471f, +0.004411f, +0.000989f, +0.001930f, -0.009241f, +0.005522f, +0.002014f, - +0.001520f, -0.005756f, -0.004216f, +0.000211f, -0.003494f, +0.000749f, -0.006329f, -0.005310f, +0.001337f, +0.004626f, - -0.002874f, -0.007489f, +0.002636f, +0.003115f, +0.001155f, +0.001446f, -0.000052f, +0.001423f, +0.005773f, +0.002279f, - +0.006150f, -0.001383f, -0.002908f, +0.001134f, +0.004738f, +0.002780f, -0.000606f, +0.000500f, -0.000766f, +0.008273f, - +0.000670f, -0.002439f, +0.004590f, -0.002321f, +0.001505f, +0.001908f, -0.001828f, +0.000422f, -0.002217f, +0.000326f, - -0.000730f, -0.001482f, +0.002558f, -0.000005f, +0.001571f, -0.001210f, +0.001533f, -0.002127f, +0.001478f, +0.001916f, - -0.000358f, +0.001796f, -0.000087f, -0.001188f, -0.001176f, -0.001580f, +0.000755f, +0.001253f, -0.001109f, +0.000868f, - -0.000934f, +0.000427f, +0.000012f, +0.000273f, +0.000824f, -0.000284f - }, - { - +0.001901f, +0.000480f, +0.003304f, +0.003876f, -0.003919f, +0.001773f, -0.001117f, -0.000761f, -0.004190f, +0.001527f, - -0.000459f, -0.008739f, -0.003854f, +0.033734f, +0.013444f, -0.015897f, -0.038886f, +0.025175f, -0.030883f, +0.043130f, - -0.023436f, +0.021610f, +0.014042f, -0.037423f, +0.000226f, +0.003221f, +0.013376f, -0.000541f, -0.005375f, -0.012578f, - -0.002939f, +0.005055f, -0.003411f, -0.009552f, +0.004276f, -0.006445f, -0.000964f, -0.010564f, +0.007338f, -0.004422f, - -0.002392f, -0.001889f, +0.010975f, +0.004727f, +0.002681f, +0.005807f, +0.000051f, +0.004454f, +0.001843f, +0.001969f, - -0.003732f, +0.003927f, +0.001139f, +0.001519f, -0.001021f, +0.003081f, -0.001160f, -0.003774f, -0.000235f, -0.004046f, - -0.002196f, +0.001491f, -0.001696f, +0.001458f, +0.002061f, -0.001924f, +0.003862f, -0.001017f, +0.000195f, +0.000293f, - -0.003185f, +0.000311f, -0.002993f, -0.000343f, +0.002321f, +0.002340f, +0.000073f, -0.001647f, -0.000028f, +0.000797f, - -0.002006f, -0.000012f, +0.000318f, +0.001257f, -0.002772f, +0.001251f, -0.001363f, +0.000446f, -0.001044f, -0.000304f, - +0.001133f, +0.000072f, -0.000001f, +0.000323f, +0.000005f, -0.000211f - }, - { - +0.016687f, -0.364645f, +0.125245f, -0.013326f, +0.016549f, +0.017728f, -0.024699f, -0.010478f, +0.026406f, -0.004850f, - -0.005825f, -0.008472f, -0.011623f, +0.003571f, +0.020181f, -0.012455f, +0.022138f, -0.005223f, -0.005076f, -0.001715f, - +0.004138f, -0.011500f, +0.012718f, -0.008253f, -0.013459f, +0.003632f, +0.003336f, +0.007501f, -0.013769f, -0.000061f, - +0.001990f, +0.003552f, -0.003474f, +0.012218f, -0.013694f, -0.004755f, -0.001708f, +0.003723f, -0.004258f, +0.008336f, - -0.005069f, -0.011358f, +0.007849f, -0.004044f, -0.001407f, +0.003367f, +0.007770f, -0.002575f, -0.001032f, +0.006770f, - -0.005572f, +0.007530f, +0.000262f, -0.003003f, +0.003275f, +0.000971f, +0.003227f, -0.001253f, +0.003110f, +0.001458f, - +0.005161f, -0.001917f, +0.001688f, -0.002788f, -0.001102f, +0.000579f, -0.002528f, +0.003219f, -0.004412f, -0.001304f, - -0.000783f, -0.001348f, -0.000555f, +0.002651f, +0.000697f, -0.000368f, +0.001940f, -0.000664f, -0.001923f, -0.000317f, - -0.001324f, +0.001246f, -0.002077f, +0.000848f, -0.002259f, +0.000737f, -0.001887f, +0.001071f, +0.000077f, -0.001604f, - +0.000498f, -0.000433f, +0.001336f, +0.001606f, -0.000108f, -0.000380f - }, - { - -0.001538f, +0.055199f, -0.004105f, -0.003316f, -0.005083f, -0.005113f, -0.013680f, -0.007624f, +0.010458f, -0.007905f, - +0.013187f, -0.006449f, +0.005273f, +0.007367f, -0.012540f, -0.021509f, -0.006881f, +0.016947f, +0.002815f, -0.012713f, - +0.015317f, +0.004673f, -0.002238f, -0.013290f, +0.007968f, -0.013234f, +0.016283f, +0.000625f, +0.002935f, -0.020387f, - +0.015020f, -0.003262f, +0.002589f, +0.005135f, -0.005517f, -0.011481f, +0.005390f, +0.005284f, -0.000748f, -0.004363f, - -0.001909f, -0.007666f, +0.003227f, -0.009857f, +0.004038f, +0.005730f, -0.005753f, +0.001496f, -0.002401f, +0.000685f, - +0.000425f, +0.000359f, -0.004628f, +0.003571f, -0.003170f, -0.001340f, +0.003616f, -0.001912f, -0.002124f, +0.000755f, - +0.005212f, +0.000283f, -0.002325f, +0.001268f, +0.002201f, +0.003356f, -0.003545f, -0.004240f, -0.000570f, -0.000982f, - -0.001132f, -0.001250f, -0.001916f, +0.001961f, -0.002389f, +0.002159f, +0.000224f, +0.001849f, +0.002133f, +0.001423f, - -0.001940f, +0.003333f, -0.000500f, -0.001414f, -0.000686f, +0.000753f, -0.000674f, +0.001152f, -0.001506f, +0.000682f, - -0.000298f, +0.002039f, -0.000666f, +0.000470f, +0.000421f, -0.001282f - }, - { - +0.034501f, -0.321543f, -0.041242f, -0.025437f, -0.004926f, -0.052668f, +0.002376f, -0.001995f, -0.013743f, +0.010341f, - +0.006893f, -0.004001f, -0.008840f, +0.000801f, +0.004251f, +0.005863f, +0.019031f, -0.008572f, -0.007408f, -0.012971f, - +0.009651f, -0.000740f, -0.002438f, -0.004137f, +0.005574f, +0.000319f, +0.010187f, -0.003136f, -0.000294f, +0.005897f, - +0.002788f, +0.007160f, +0.010554f, -0.011504f, +0.003121f, +0.000158f, +0.002819f, -0.005497f, +0.010730f, -0.008464f, - +0.003714f, -0.002276f, -0.005201f, -0.008184f, +0.006061f, -0.006323f, +0.002984f, +0.002072f, -0.002492f, -0.005234f, - -0.005192f, +0.004143f, -0.000713f, +0.001553f, +0.005504f, -0.005027f, +0.001813f, +0.004197f, -0.003694f, +0.002568f, - -0.000455f, +0.001554f, +0.000525f, +0.000937f, -0.000248f, +0.000721f, -0.001527f, -0.003985f, +0.001772f, -0.001165f, - -0.000855f, -0.000428f, +0.003755f, +0.001393f, +0.000920f, -0.001510f, -0.000269f, +0.000560f, -0.001073f, -0.000529f, - -0.000140f, +0.001950f, +0.000125f, +0.000548f, +0.000719f, -0.001898f, +0.000677f, -0.001360f, -0.001683f, +0.002119f, - +0.000482f, -0.000196f, -0.000060f, +0.000204f, -0.000172f, -0.000681f - }, - { - +0.005595f, -0.033071f, +0.013400f, +0.001567f, +0.005009f, -0.000683f, -0.012091f, +0.002453f, -0.006269f, -0.008618f, - +0.003048f, +0.007605f, +0.004594f, -0.006511f, -0.027387f, -0.042674f, +0.032046f, -0.019480f, -0.020119f, +0.015247f, - -0.011647f, -0.004913f, -0.036276f, -0.002242f, +0.003076f, -0.023655f, -0.002396f, -0.001667f, +0.009832f, +0.019474f, - -0.008525f, +0.032374f, -0.000297f, -0.002894f, -0.008182f, -0.022096f, +0.003509f, -0.006369f, -0.015215f, -0.000664f, - +0.007339f, +0.005578f, +0.002940f, +0.005961f, -0.000238f, +0.006880f, -0.001939f, -0.005791f, -0.003999f, +0.003243f, - +0.000585f, -0.007274f, -0.007654f, -0.000868f, +0.002730f, -0.000099f, -0.002758f, +0.000737f, +0.001106f, -0.002824f, - +0.003705f, +0.002621f, +0.003197f, -0.000152f, -0.002374f, -0.000854f, +0.000412f, +0.003414f, +0.002693f, -0.004446f, - +0.003888f, -0.000602f, +0.002699f, -0.001458f, -0.000181f, +0.000565f, +0.000360f, +0.000062f, -0.002023f, -0.000447f, - +0.000579f, -0.001326f, -0.000610f, -0.001124f, -0.000851f, +0.000638f, -0.000238f, +0.000029f, -0.001661f, +0.001143f, - -0.000185f, +0.001585f, -0.000060f, -0.000971f, -0.000175f, +0.000275f - }, - { - -0.042995f, -0.124065f, -0.006361f, -0.038923f, +0.013092f, -0.011955f, +0.045331f, +0.007223f, +0.014257f, -0.010879f, - +0.026554f, +0.006773f, -0.004439f, +0.008961f, -0.001249f, -0.012291f, +0.005736f, +0.012104f, +0.003079f, +0.016419f, - -0.006599f, -0.000623f, -0.000425f, +0.016041f, -0.008381f, +0.006377f, +0.006039f, +0.004377f, +0.004004f, -0.016131f, - -0.001717f, -0.000419f, +0.001001f, +0.002011f, +0.005846f, -0.000576f, -0.007470f, -0.003853f, +0.008248f, -0.001821f, - +0.005088f, -0.021183f, -0.001113f, +0.005608f, -0.001945f, +0.005982f, +0.004069f, -0.001802f, +0.003344f, -0.001263f, - +0.003696f, -0.002911f, +0.001050f, -0.005720f, +0.000849f, +0.000027f, -0.002290f, +0.000093f, -0.000120f, +0.002478f, - -0.004744f, +0.000454f, -0.002314f, -0.001274f, -0.002346f, +0.000160f, -0.002128f, +0.001242f, -0.000843f, +0.000945f, - -0.000142f, +0.000888f, +0.003491f, -0.003514f, -0.000673f, -0.000708f, +0.003000f, -0.002498f, +0.001778f, +0.000142f, - +0.000189f, -0.000636f, +0.001913f, +0.000777f, +0.000976f, -0.000972f, -0.001301f, -0.000508f, +0.000304f, -0.000199f, - +0.000088f, +0.000048f, +0.000479f, +0.000481f, -0.000331f, -0.000268f - }, - { - +0.007311f, -0.098957f, -0.004154f, +0.012070f, -0.011108f, +0.016210f, -0.000544f, -0.007658f, -0.004493f, +0.000962f, - +0.006507f, -0.012135f, +0.006048f, +0.021925f, -0.015442f, -0.015248f, -0.004697f, -0.010357f, +0.003777f, +0.032567f, - -0.029876f, +0.003101f, -0.008857f, +0.003368f, +0.010819f, +0.002860f, +0.007645f, -0.015896f, +0.003777f, +0.020328f, - -0.011762f, -0.006698f, +0.002717f, -0.003305f, +0.004276f, +0.007157f, -0.002328f, +0.001451f, +0.010035f, -0.004708f, - +0.001133f, +0.002828f, +0.012057f, -0.003404f, +0.000578f, -0.009403f, +0.011953f, +0.001324f, +0.002533f, -0.001899f, - +0.007066f, +0.005462f, -0.003965f, +0.001102f, -0.003090f, +0.002374f, -0.002333f, -0.003509f, +0.000978f, -0.004184f, - +0.000058f, +0.000440f, -0.000322f, +0.002069f, +0.001350f, -0.001483f, -0.003323f, +0.003140f, -0.002627f, +0.002292f, - -0.001672f, +0.002277f, -0.000389f, +0.002457f, -0.002061f, +0.000390f, -0.000068f, -0.000817f, -0.000678f, +0.000344f, - +0.000020f, -0.001977f, -0.000518f, -0.001557f, +0.000146f, -0.001866f, +0.001987f, -0.000861f, +0.000517f, +0.000464f, - -0.000384f, -0.001308f, +0.000855f, -0.001429f, -0.000169f, +0.001901f - } - }, - { - { - -0.008791f, -0.101522f, -0.013470f, +0.020763f, -0.006601f, -0.001551f, -0.007570f, -0.006268f, +0.006654f, -0.005470f, - +0.006005f, +0.013988f, -0.008146f, -0.010330f, -0.010854f, +0.002675f, +0.015615f, +0.014788f, +0.007957f, +0.001972f, - -0.003177f, +0.002350f, -0.008514f, -0.002273f, -0.009780f, -0.001303f, +0.009043f, -0.005547f, -0.005948f, +0.005152f, - +0.005436f, -0.006365f, +0.001967f, +0.002965f, +0.002031f, +0.001473f, -0.000570f, -0.000337f, +0.007290f, -0.001498f, - -0.009557f, +0.002861f, -0.005403f, -0.006533f, -0.002356f, +0.001325f, -0.005560f, -0.000031f, -0.000068f, -0.002734f, - +0.002716f, +0.002076f, +0.000681f, -0.000376f, +0.001326f, +0.001051f, +0.003546f, +0.002363f, +0.000453f, -0.000654f, - +0.003447f, +0.000643f, -0.000043f, -0.000374f, +0.000967f, -0.000088f, +0.001382f, -0.001551f, -0.002424f, -0.001819f, - +0.000469f, +0.000448f, +0.002859f, +0.002408f, -0.000131f, +0.001014f, -0.001024f, -0.000971f, +0.000018f, +0.000437f, - +0.001278f, -0.001599f, -0.001727f, +0.000042f, +0.000606f, +0.000285f, +0.001601f, +0.001390f, +0.001352f, +0.000533f, - +0.000094f, +0.000249f, +0.000715f, -0.000049f, +0.000000f, -0.000126f - }, - { - -0.001008f, -0.003383f, -0.007528f, -0.015679f, +0.003801f, -0.001329f, -0.000786f, +0.007087f, -0.001502f, +0.003240f, - +0.011821f, +0.002412f, -0.002327f, +0.005398f, +0.013395f, -0.010217f, +0.014955f, +0.001458f, -0.026277f, -0.024351f, - +0.004068f, -0.006941f, +0.012861f, +0.008023f, +0.012299f, -0.002306f, +0.006145f, +0.004134f, -0.001063f, +0.000699f, - -0.005273f, +0.009305f, -0.004853f, -0.010558f, -0.001451f, +0.006801f, +0.004660f, +0.011581f, +0.000683f, -0.000959f, - +0.000425f, +0.000032f, +0.004094f, -0.002387f, -0.005927f, +0.007009f, -0.003180f, +0.000139f, +0.000013f, -0.000571f, - +0.001289f, +0.002204f, +0.003717f, -0.000211f, +0.002333f, -0.003937f, +0.000466f, +0.000279f, -0.001309f, -0.001460f, - +0.001164f, +0.001050f, -0.002265f, +0.000150f, -0.000941f, +0.000825f, +0.003043f, -0.001783f, -0.001836f, +0.000223f, - +0.000359f, -0.000736f, -0.001184f, -0.001542f, -0.000551f, +0.000088f, +0.000244f, +0.000662f, -0.001216f, -0.002400f, - +0.002152f, +0.001217f, +0.000768f, -0.000156f, +0.000769f, -0.000820f, -0.000502f, -0.000104f, -0.000667f, +0.000055f, - +0.000152f, -0.000427f, +0.001078f, +0.000078f, -0.000261f, -0.000452f - }, - { - -0.001343f, +0.005425f, -0.026875f, -0.026897f, +0.002643f, +0.005220f, +0.000323f, -0.005051f, -0.000717f, -0.003206f, - -0.003292f, +0.001258f, +0.003109f, +0.000551f, +0.012219f, +0.004045f, +0.005984f, -0.011439f, +0.000364f, -0.004359f, - -0.001160f, -0.006428f, +0.017748f, -0.002875f, +0.009762f, -0.009202f, +0.005083f, +0.006011f, +0.001923f, -0.005615f, - +0.004982f, +0.000543f, +0.001241f, -0.005000f, -0.004354f, +0.007427f, +0.010766f, -0.003100f, +0.007749f, +0.006203f, - -0.000959f, -0.002864f, -0.000789f, +0.001976f, +0.002709f, +0.003824f, +0.002367f, +0.002970f, -0.000627f, +0.001761f, - +0.004117f, +0.000434f, -0.000810f, +0.003038f, -0.000307f, +0.002709f, -0.001721f, -0.004319f, +0.000486f, -0.001785f, - -0.000329f, +0.002054f, -0.001478f, -0.000150f, -0.000456f, +0.001126f, -0.001142f, -0.000176f, -0.000974f, +0.000419f, - +0.000565f, -0.001464f, -0.000537f, -0.000079f, +0.000505f, +0.000835f, +0.000649f, +0.001579f, -0.000180f, -0.002519f, - +0.000399f, -0.000173f, -0.000211f, -0.000969f, -0.000272f, -0.000814f, +0.000457f, -0.000484f, +0.000094f, -0.000004f, - -0.000674f, -0.000988f, -0.000522f, +0.000040f, -0.000763f, +0.000562f - }, - { - +0.039857f, +0.166991f, -0.001179f, +0.011514f, -0.008020f, -0.002206f, +0.003745f, +0.002227f, +0.002116f, -0.015015f, - -0.003354f, +0.002814f, +0.000027f, -0.002356f, -0.005136f, -0.011327f, -0.008591f, +0.001698f, -0.014948f, +0.005766f, - -0.005234f, -0.002652f, +0.003888f, +0.004900f, -0.010660f, -0.000964f, +0.000875f, +0.004245f, +0.004601f, +0.001149f, - -0.007391f, -0.001554f, -0.003334f, +0.003372f, +0.003260f, +0.001763f, +0.002121f, -0.002499f, +0.005576f, -0.009904f, - +0.000786f, +0.005913f, -0.002233f, -0.002377f, +0.000073f, +0.004405f, -0.004712f, -0.000341f, -0.005589f, +0.000653f, - +0.003892f, -0.005995f, -0.002277f, +0.001602f, +0.001686f, -0.002992f, -0.000496f, -0.001856f, +0.002329f, -0.002484f, - +0.002049f, -0.003016f, +0.000809f, +0.001164f, +0.000784f, +0.000292f, -0.000496f, -0.004917f, -0.001382f, -0.001253f, - -0.001170f, -0.002077f, -0.000720f, -0.000062f, -0.000842f, -0.000246f, +0.000287f, -0.000244f, +0.000493f, +0.001034f, - +0.001633f, +0.000107f, -0.000193f, -0.000659f, +0.000837f, -0.000180f, +0.000346f, +0.000740f, -0.000562f, +0.000568f, - +0.000649f, +0.000075f, +0.000191f, +0.000428f, +0.000738f, +0.000555f - }, - { - -0.004454f, -0.017519f, +0.004875f, +0.004076f, -0.000718f, -0.000654f, +0.000137f, +0.004410f, +0.003224f, -0.001552f, - +0.003450f, -0.008033f, +0.003112f, +0.003273f, -0.018726f, -0.015409f, -0.015583f, +0.006359f, +0.024946f, -0.020502f, - +0.005220f, +0.003952f, +0.012369f, -0.007106f, +0.010503f, -0.046984f, -0.015475f, +0.005706f, +0.016339f, -0.023539f, - -0.003123f, -0.012337f, -0.007553f, -0.001248f, -0.006132f, +0.000836f, +0.001549f, +0.005022f, +0.001201f, +0.000077f, - -0.001244f, +0.001353f, +0.002504f, +0.003067f, +0.001078f, -0.004905f, -0.001851f, +0.001245f, -0.004778f, +0.002770f, - +0.002212f, -0.002058f, -0.002400f, -0.000964f, +0.002258f, +0.002337f, +0.002282f, +0.001275f, -0.000518f, -0.004880f, - -0.006088f, -0.000730f, +0.000266f, -0.002480f, -0.000331f, -0.002873f, -0.000648f, -0.001343f, +0.002011f, +0.004173f, - -0.001812f, -0.000866f, +0.002258f, -0.000661f, +0.001095f, +0.001140f, +0.000029f, -0.001584f, -0.000007f, -0.000066f, - +0.000058f, +0.000356f, -0.000572f, +0.000029f, -0.000421f, -0.000042f, +0.000914f, -0.000574f, +0.001083f, -0.000137f, - +0.000290f, +0.000442f, -0.000760f, -0.000659f, +0.000140f, +0.000060f - }, - { - +0.064138f, +0.240501f, +0.004092f, +0.086189f, +0.018258f, -0.002978f, +0.003141f, -0.001661f, -0.008317f, +0.007684f, - +0.003439f, -0.011429f, -0.004913f, +0.019231f, +0.003930f, -0.000498f, +0.001783f, -0.004973f, +0.006232f, -0.003747f, - +0.007054f, -0.000528f, +0.005788f, +0.004139f, -0.000662f, -0.002298f, -0.006160f, -0.006609f, +0.003888f, +0.004342f, - +0.002465f, -0.000745f, -0.004386f, -0.005726f, -0.005591f, -0.003199f, +0.004465f, +0.009705f, -0.003454f, +0.000682f, - +0.004894f, -0.000454f, +0.001329f, -0.001936f, +0.002641f, +0.002195f, -0.000734f, -0.002882f, -0.007275f, +0.000049f, - +0.003417f, -0.001531f, +0.006056f, +0.000765f, -0.000681f, +0.000899f, +0.004659f, +0.000167f, -0.004053f, -0.006256f, - -0.003586f, -0.001017f, -0.004504f, -0.000309f, -0.001262f, +0.001261f, -0.000062f, +0.000362f, +0.002474f, -0.000755f, - -0.001736f, -0.000007f, -0.001610f, +0.000315f, -0.000717f, +0.000559f, +0.001948f, -0.001552f, -0.000930f, -0.000349f, - +0.000527f, -0.000699f, +0.001002f, +0.000559f, +0.001641f, +0.000743f, -0.000534f, +0.001021f, -0.000458f, -0.000506f, - -0.000182f, +0.000384f, +0.000451f, -0.000465f, -0.000739f, +0.000176f - }, - { - -0.000004f, -0.021810f, -0.004890f, -0.005699f, -0.003080f, -0.001151f, +0.000150f, +0.003072f, -0.001270f, +0.000194f, - -0.002536f, -0.000178f, -0.000109f, +0.013389f, +0.036625f, -0.039126f, -0.013789f, -0.007552f, +0.008784f, +0.002836f, - -0.009129f, +0.005033f, +0.014630f, -0.010262f, -0.003984f, +0.007881f, -0.007429f, +0.001835f, +0.001336f, +0.005274f, - -0.005605f, -0.002772f, +0.016058f, +0.026297f, +0.004995f, +0.005707f, +0.001852f, +0.003391f, +0.008506f, -0.000042f, - +0.003054f, -0.000064f, +0.003812f, +0.006688f, -0.001078f, +0.003626f, +0.001751f, +0.003996f, -0.003891f, -0.004963f, - -0.004001f, +0.000514f, -0.002893f, -0.004100f, +0.002747f, -0.003654f, -0.001551f, -0.003634f, +0.000290f, +0.000735f, - -0.001872f, -0.001263f, -0.001114f, +0.000374f, +0.003144f, +0.001253f, -0.000488f, -0.000765f, +0.000283f, +0.000565f, - -0.000318f, +0.002310f, -0.000007f, -0.000017f, +0.001614f, +0.001822f, +0.000997f, +0.001980f, -0.000681f, +0.000047f, - +0.000397f, +0.000575f, -0.000706f, -0.000773f, +0.000514f, +0.000166f, -0.001839f, +0.000534f, -0.000133f, -0.000940f, - -0.000502f, +0.000540f, +0.000785f, +0.000347f, +0.000286f, -0.000307f - }, - { - -0.092194f, -0.032422f, -0.014542f, -0.050885f, +0.008756f, +0.002892f, -0.006658f, +0.003179f, -0.004368f, -0.005859f, - -0.000435f, +0.001135f, +0.009873f, +0.002493f, +0.004004f, -0.006647f, -0.005890f, -0.013395f, -0.006810f, +0.013643f, - -0.005318f, -0.005216f, +0.003240f, -0.002363f, -0.005618f, +0.004944f, -0.006180f, -0.000902f, +0.005527f, -0.001162f, - +0.000150f, -0.000646f, -0.003594f, -0.000637f, -0.006885f, -0.003012f, -0.004295f, -0.001377f, +0.003154f, -0.001098f, - -0.000894f, -0.005376f, +0.001465f, -0.001262f, +0.003967f, +0.000425f, +0.002198f, +0.001495f, +0.002677f, +0.001782f, - +0.006459f, -0.001059f, -0.001131f, +0.000332f, +0.005634f, +0.003603f, +0.002094f, +0.000222f, +0.000469f, +0.001596f, - +0.001730f, -0.000128f, +0.000943f, +0.002886f, +0.000319f, +0.000375f, -0.000219f, -0.001540f, -0.001652f, -0.000421f, - +0.000021f, -0.000301f, +0.000540f, +0.001355f, -0.000125f, -0.000247f, +0.002022f, -0.000106f, +0.000634f, +0.000570f, - +0.001004f, +0.000992f, -0.000451f, -0.000513f, -0.001009f, -0.001479f, +0.000987f, +0.000498f, +0.000180f, +0.000083f, - -0.000386f, +0.000087f, +0.000456f, +0.001165f, +0.000078f, -0.000202f - }, - { - -0.000187f, +0.006861f, +0.007626f, +0.000832f, +0.001193f, -0.000362f, -0.000762f, -0.000480f, -0.002255f, +0.001445f, - -0.004025f, -0.007200f, +0.002658f, +0.012488f, +0.022770f, -0.035443f, -0.006078f, -0.004115f, -0.002855f, +0.024256f, - +0.017085f, +0.000502f, -0.002093f, -0.005484f, -0.002461f, +0.014301f, +0.017839f, -0.006847f, -0.016035f, +0.012108f, - -0.009582f, -0.009270f, -0.007163f, -0.000177f, -0.002064f, -0.008062f, -0.007790f, -0.004256f, +0.002166f, -0.003871f, - +0.003961f, -0.002701f, +0.002556f, +0.006929f, +0.006941f, +0.007552f, +0.001466f, +0.000703f, +0.000400f, -0.000040f, - +0.003798f, -0.002722f, +0.002171f, +0.001027f, +0.000503f, -0.000260f, -0.001386f, +0.001109f, -0.000322f, -0.004110f, - -0.002927f, +0.000152f, -0.000841f, +0.000445f, +0.000392f, +0.000674f, -0.000100f, -0.000368f, -0.000194f, +0.000570f, - -0.002553f, -0.000297f, -0.002858f, -0.000629f, +0.003066f, +0.001368f, -0.000200f, -0.000529f, -0.000301f, +0.001069f, - -0.000625f, -0.000838f, -0.000629f, +0.001889f, -0.001825f, +0.000116f, +0.000123f, -0.000372f, -0.001105f, -0.000630f, - +0.000561f, +0.000328f, -0.000180f, +0.000312f, +0.000099f, -0.000108f - }, - { - -0.017611f, -0.230938f, +0.005654f, +0.016319f, +0.028726f, -0.005549f, +0.003760f, +0.000454f, +0.005544f, +0.004358f, - -0.004165f, +0.005483f, -0.005723f, +0.007716f, -0.003247f, -0.005262f, +0.006043f, +0.006802f, -0.004232f, +0.002769f, - -0.000988f, -0.006790f, +0.006442f, -0.004370f, -0.017967f, +0.004370f, +0.006296f, +0.000899f, +0.002567f, -0.004301f, - +0.000369f, +0.002737f, +0.000076f, -0.001927f, -0.001414f, -0.003101f, -0.004045f, +0.007698f, -0.004903f, +0.000608f, - -0.005160f, +0.000500f, -0.003904f, -0.009109f, +0.007557f, +0.005902f, +0.001723f, +0.000695f, +0.002013f, +0.000024f, - +0.003008f, +0.002915f, +0.000627f, -0.002223f, +0.001698f, +0.003136f, +0.001829f, +0.000819f, -0.000134f, +0.001352f, - +0.002773f, +0.002048f, +0.000070f, -0.001361f, +0.000049f, -0.002785f, +0.000633f, +0.001734f, -0.003007f, -0.002027f, - -0.000834f, -0.000695f, -0.000085f, +0.000740f, +0.002224f, -0.000704f, +0.000792f, +0.000631f, -0.001375f, +0.000461f, - -0.000916f, -0.001366f, -0.001286f, +0.000404f, +0.000493f, +0.000168f, +0.000050f, -0.000498f, -0.000426f, -0.001704f, - +0.001127f, -0.000849f, +0.001261f, +0.001157f, -0.000355f, +0.000216f - }, - { - -0.000693f, +0.029076f, +0.010744f, -0.006686f, -0.003356f, -0.004498f, -0.003147f, -0.007202f, -0.000504f, +0.002721f, - +0.004315f, +0.008197f, +0.002950f, +0.002392f, -0.031196f, -0.011031f, -0.011220f, +0.014814f, +0.004728f, +0.007115f, - -0.017866f, +0.012457f, -0.003356f, -0.002161f, -0.003083f, -0.006965f, +0.004551f, +0.011892f, -0.001751f, +0.000650f, - -0.008158f, +0.000929f, +0.004476f, -0.002974f, -0.003940f, -0.001840f, +0.001973f, +0.006723f, -0.004632f, -0.000667f, - -0.008084f, -0.002559f, +0.004146f, -0.003329f, +0.004220f, -0.001643f, -0.000125f, +0.003717f, -0.002861f, -0.000481f, - -0.003779f, +0.000929f, -0.002153f, -0.000137f, -0.000661f, -0.003772f, -0.000093f, +0.001950f, -0.000779f, +0.000440f, - +0.002677f, -0.000023f, +0.002154f, -0.001601f, +0.002952f, +0.001075f, -0.003260f, -0.002071f, -0.000654f, -0.002189f, - -0.000693f, -0.001396f, -0.000135f, -0.000421f, -0.001382f, +0.000772f, +0.000663f, +0.001418f, +0.000906f, +0.001813f, - +0.000379f, +0.000483f, +0.000224f, -0.001188f, -0.000508f, -0.000246f, +0.000627f, -0.000154f, -0.000632f, -0.000546f, - +0.001039f, +0.000809f, +0.000357f, -0.000036f, +0.000297f, -0.000204f - }, - { - -0.086144f, -0.178491f, -0.017368f, -0.022656f, -0.009700f, +0.003794f, -0.036096f, -0.017871f, +0.010795f, -0.002451f, - +0.010987f, -0.005824f, -0.009634f, -0.005493f, +0.007577f, +0.004016f, +0.010258f, -0.007240f, -0.004732f, +0.005339f, - -0.003761f, +0.006455f, -0.002885f, +0.000692f, +0.004614f, +0.005448f, +0.003695f, -0.002964f, -0.003144f, -0.000972f, - +0.005849f, +0.007049f, +0.003638f, -0.003604f, -0.001904f, -0.006664f, +0.001418f, +0.006525f, -0.001819f, +0.003089f, - -0.004142f, -0.004146f, -0.004368f, +0.001614f, +0.003026f, -0.003236f, +0.001538f, +0.004031f, -0.000709f, -0.006871f, - -0.000064f, -0.001983f, +0.004625f, -0.002667f, +0.000949f, +0.002521f, +0.000609f, +0.002797f, -0.002104f, -0.001696f, - +0.003166f, +0.000790f, +0.000088f, +0.001545f, +0.001386f, +0.000051f, -0.002778f, -0.003115f, +0.001404f, -0.001649f, - +0.001043f, -0.001642f, +0.002266f, +0.000336f, +0.002024f, -0.001065f, -0.000872f, -0.000445f, -0.000547f, +0.000417f, - -0.000034f, +0.001412f, -0.000198f, +0.001500f, +0.000325f, -0.000901f, +0.000368f, -0.001183f, +0.000038f, +0.000870f, - +0.001233f, +0.000230f, +0.000131f, -0.000294f, -0.000107f, -0.000191f - }, - { - -0.004987f, -0.043527f, +0.018082f, +0.013462f, -0.000321f, -0.004551f, -0.004292f, -0.001216f, -0.006290f, -0.003655f, - +0.001693f, +0.002865f, -0.003834f, +0.007651f, -0.025418f, +0.001806f, +0.005395f, -0.011021f, -0.010518f, -0.003974f, - -0.028577f, -0.016595f, -0.005517f, -0.003213f, -0.002325f, -0.020216f, -0.010768f, +0.004372f, +0.011438f, +0.004547f, - +0.013884f, +0.022066f, -0.002635f, -0.011000f, +0.003343f, -0.019710f, -0.003257f, -0.011225f, -0.008270f, -0.001318f, - +0.009725f, +0.004993f, -0.004587f, +0.004787f, +0.003546f, -0.002033f, +0.001847f, -0.004772f, -0.001129f, +0.003771f, - +0.000515f, -0.004075f, -0.006197f, -0.004006f, +0.005080f, +0.000539f, -0.001483f, +0.003260f, -0.002201f, -0.001481f, - +0.002707f, +0.002681f, +0.004911f, -0.000489f, -0.003077f, -0.002051f, +0.002084f, +0.001105f, +0.003525f, -0.000406f, - +0.001948f, +0.000466f, +0.002498f, -0.002233f, +0.001703f, -0.000120f, +0.000396f, +0.000214f, -0.000829f, -0.000434f, - +0.000924f, -0.001801f, -0.002182f, -0.000876f, -0.000626f, -0.000278f, +0.000687f, -0.000803f, -0.000395f, +0.000764f, - -0.000339f, +0.000122f, +0.000749f, -0.000320f, -0.000697f, +0.000596f - }, - { - +0.004731f, -0.188167f, -0.010994f, -0.016123f, +0.001062f, +0.020229f, +0.000099f, +0.024148f, -0.000383f, -0.000583f, - +0.007165f, +0.020591f, -0.005720f, +0.008734f, -0.003224f, -0.005606f, -0.007703f, +0.001556f, +0.012257f, +0.010612f, - -0.003457f, +0.001768f, +0.004934f, +0.006600f, -0.003682f, +0.004523f, +0.003782f, +0.011088f, +0.002356f, -0.005793f, - -0.008832f, -0.005411f, +0.002278f, +0.000074f, +0.000734f, +0.003770f, -0.006838f, -0.000942f, -0.000936f, +0.002929f, - -0.002915f, -0.006686f, -0.002472f, +0.004958f, +0.004476f, -0.000271f, -0.001531f, +0.007457f, -0.001668f, +0.001277f, - +0.003570f, -0.000251f, -0.000993f, -0.001275f, +0.000142f, -0.001125f, -0.005323f, +0.000564f, -0.002407f, +0.003135f, - +0.000391f, -0.001811f, -0.000866f, -0.003323f, -0.003339f, -0.000546f, -0.001462f, -0.000495f, +0.001373f, -0.000757f, - +0.000582f, +0.002337f, +0.000105f, -0.002302f, +0.000207f, -0.001459f, +0.001839f, +0.000101f, -0.000285f, +0.000991f, - -0.000300f, +0.000214f, +0.000385f, +0.000961f, +0.000796f, -0.002255f, -0.001004f, +0.000401f, -0.000330f, +0.000260f, - +0.000070f, -0.000501f, +0.000205f, +0.000304f, +0.000369f, -0.000401f - }, - { - -0.006611f, -0.084802f, -0.003836f, +0.006043f, +0.001988f, +0.006150f, +0.007658f, -0.002611f, -0.001365f, -0.003607f, - -0.002824f, +0.000011f, +0.015325f, +0.028620f, -0.018201f, -0.019304f, -0.018892f, -0.011108f, +0.007525f, +0.022069f, - -0.001170f, -0.014695f, +0.009460f, -0.007401f, +0.022316f, +0.004667f, +0.016178f, -0.013732f, +0.002770f, -0.000162f, - +0.001497f, +0.001680f, -0.005143f, -0.001154f, +0.008868f, +0.003132f, -0.003652f, +0.006387f, +0.001241f, +0.002162f, - +0.003895f, +0.010003f, +0.010467f, -0.002928f, -0.007986f, +0.001902f, +0.003344f, +0.002050f, +0.000564f, -0.001533f, - +0.003266f, +0.007788f, -0.003807f, +0.000102f, -0.002000f, +0.000599f, -0.001262f, +0.000007f, +0.001501f, -0.002577f, - +0.001062f, +0.001854f, -0.000946f, +0.000493f, +0.001825f, -0.000139f, -0.003241f, +0.002112f, -0.000927f, -0.000805f, - +0.001701f, -0.000143f, +0.001763f, +0.000898f, -0.000366f, -0.000568f, -0.000821f, +0.000745f, -0.001366f, -0.001431f, - +0.000755f, -0.000974f, -0.002027f, -0.001306f, -0.000499f, -0.000372f, +0.001133f, +0.000120f, -0.000721f, -0.000078f, - -0.000196f, -0.000532f, -0.000670f, -0.000711f, -0.000171f, +0.000716f - } - }, - { - { - -0.000553f, -0.052841f, -0.035509f, +0.011825f, -0.006581f, -0.002084f, -0.000401f, +0.004720f, -0.000400f, -0.008684f, - +0.009966f, +0.006269f, -0.008389f, -0.000381f, +0.001452f, +0.006400f, -0.004493f, +0.003660f, -0.003405f, -0.002824f, - -0.005682f, +0.004023f, -0.000449f, +0.010234f, +0.001044f, -0.002229f, -0.002987f, -0.003646f, +0.001787f, +0.002331f, - +0.006855f, -0.002522f, +0.002213f, +0.001582f, +0.002504f, +0.000810f, +0.004726f, +0.004565f, +0.006449f, -0.000863f, - -0.008213f, +0.001171f, -0.006331f, -0.003867f, -0.000692f, +0.001315f, -0.004468f, -0.000046f, -0.000366f, -0.001987f, - +0.003033f, +0.000104f, +0.000024f, -0.000360f, +0.002143f, -0.000926f, +0.002587f, +0.001796f, +0.001477f, +0.001673f, - +0.001998f, +0.001199f, +0.001808f, -0.001407f, +0.001288f, -0.000698f, +0.002210f, +0.000966f, -0.000310f, +0.001172f, - +0.001605f, -0.000141f, +0.000262f, +0.000106f, -0.001634f, -0.000583f, -0.000220f, +0.000049f, -0.000277f, +0.000075f, - +0.000144f, -0.000290f, +0.000479f, +0.000233f, +0.000103f, +0.000010f, +0.000418f, -0.000168f, +0.000881f, +0.000533f, - +0.000552f, -0.000027f, -0.000022f, -0.000533f, -0.000029f, +0.000017f - }, - { - +0.000044f, +0.012566f, -0.002401f, -0.009640f, +0.009614f, -0.000876f, +0.002355f, +0.005454f, -0.003942f, -0.001189f, - +0.005273f, -0.005222f, -0.005931f, -0.000451f, +0.010755f, -0.003150f, +0.019153f, +0.006746f, -0.001091f, -0.012520f, - +0.010914f, -0.001280f, +0.004352f, -0.008504f, +0.000886f, +0.002696f, +0.003548f, -0.004716f, -0.004955f, +0.005795f, - -0.003293f, +0.005051f, -0.009250f, -0.006448f, +0.004821f, +0.005778f, +0.003499f, +0.005179f, -0.003009f, -0.000479f, - +0.000629f, -0.004138f, -0.000145f, -0.001383f, -0.003235f, +0.003268f, -0.005663f, -0.001795f, -0.003352f, -0.001316f, - +0.001259f, -0.001648f, +0.000364f, -0.001070f, -0.000003f, -0.003659f, +0.000868f, -0.000408f, +0.000041f, -0.001224f, - +0.001327f, +0.000814f, -0.002055f, +0.001781f, +0.001157f, -0.000017f, +0.000594f, +0.000058f, -0.000187f, +0.000173f, - -0.000495f, -0.000404f, +0.000398f, -0.000017f, +0.000133f, +0.001525f, -0.000106f, +0.000689f, +0.000003f, -0.001640f, - +0.000999f, +0.000172f, +0.000865f, +0.000177f, +0.000813f, -0.000443f, -0.000575f, +0.000092f, -0.000778f, +0.000254f, - +0.000164f, -0.000438f, +0.000900f, -0.000235f, -0.000253f, -0.000098f - }, - { - -0.000982f, +0.037216f, +0.008107f, +0.011727f, +0.013488f, +0.001214f, -0.001246f, -0.003946f, +0.004309f, +0.000632f, - -0.001157f, +0.003393f, +0.003700f, +0.000334f, +0.001802f, -0.015151f, +0.004378f, -0.011618f, +0.006864f, -0.000964f, - -0.001703f, -0.016229f, +0.015442f, +0.002675f, +0.015166f, -0.000974f, +0.001792f, +0.004875f, +0.001991f, -0.001149f, - +0.008964f, +0.000975f, -0.004113f, -0.008287f, -0.007628f, +0.003662f, +0.005836f, -0.003078f, +0.003121f, -0.000179f, - -0.002498f, -0.001103f, +0.000525f, +0.001174f, -0.001327f, -0.001806f, +0.002548f, +0.002737f, -0.002785f, -0.001450f, - -0.000787f, -0.000658f, -0.000981f, +0.000369f, -0.000136f, +0.004328f, -0.003056f, -0.000971f, +0.004526f, +0.000777f, - -0.001930f, -0.000589f, -0.002287f, +0.000829f, -0.001236f, +0.000947f, +0.000303f, +0.001007f, -0.001418f, -0.002408f, - -0.000971f, -0.001125f, +0.000782f, +0.000347f, +0.000038f, -0.000099f, +0.000211f, +0.000831f, -0.000465f, -0.001922f, - +0.000949f, -0.000373f, +0.000292f, -0.000294f, -0.000089f, +0.000001f, +0.000923f, -0.000588f, -0.000198f, +0.000492f, - -0.000292f, -0.000118f, -0.000157f, -0.000080f, -0.000791f, -0.000068f - }, - { - -0.043897f, +0.034553f, -0.032708f, -0.001468f, +0.010242f, -0.002455f, -0.003725f, -0.001981f, +0.009214f, +0.001034f, - +0.002712f, -0.001449f, -0.002433f, +0.004346f, +0.014077f, +0.002997f, -0.006294f, -0.004513f, -0.014725f, +0.006555f, - -0.000591f, +0.000337f, +0.007671f, +0.005275f, -0.010313f, +0.004424f, -0.003446f, -0.004331f, +0.002310f, -0.001008f, - -0.006259f, +0.002106f, -0.004013f, +0.002663f, +0.002934f, +0.004989f, +0.003238f, -0.002677f, +0.000851f, -0.006615f, - +0.001609f, +0.002131f, +0.001394f, -0.004063f, -0.000455f, +0.008638f, -0.004273f, -0.000459f, -0.004083f, -0.001241f, - +0.002259f, -0.002362f, -0.000310f, -0.001316f, -0.000742f, -0.002225f, +0.002292f, -0.000875f, +0.000753f, -0.001339f, - +0.003139f, -0.001715f, +0.001707f, +0.000427f, +0.001814f, -0.000275f, +0.000677f, -0.001806f, +0.000474f, +0.001690f, - +0.002567f, -0.000907f, -0.001316f, -0.000174f, -0.001014f, -0.000835f, -0.000003f, -0.000016f, -0.000812f, -0.000825f, - +0.000701f, +0.000297f, +0.000491f, -0.000957f, +0.000328f, +0.000136f, +0.000013f, +0.000514f, -0.000704f, -0.000056f, - +0.000153f, +0.000546f, -0.000263f, -0.000775f, +0.000196f, -0.000179f - }, - { - +0.004355f, -0.024782f, -0.008472f, +0.004204f, -0.000300f, -0.000910f, -0.000539f, +0.002401f, +0.000759f, +0.000054f, - +0.007086f, -0.001578f, -0.000215f, +0.002843f, -0.005498f, +0.017947f, +0.009500f, -0.020958f, +0.015432f, -0.018796f, - +0.010161f, +0.010604f, +0.017669f, +0.000055f, +0.016069f, -0.017380f, +0.003302f, +0.004075f, +0.015419f, -0.024340f, - +0.009880f, +0.001387f, -0.001950f, +0.005046f, +0.003661f, +0.005749f, -0.000973f, -0.002331f, +0.000420f, +0.006153f, - +0.005136f, +0.000593f, +0.001823f, +0.003178f, +0.003032f, -0.001668f, +0.000283f, +0.001568f, -0.002800f, +0.002883f, - +0.003537f, -0.000041f, -0.001456f, -0.000014f, +0.001062f, -0.000496f, +0.002435f, -0.001730f, -0.002198f, -0.001373f, - -0.000985f, +0.000159f, +0.000865f, -0.000931f, -0.000322f, -0.001390f, -0.000208f, -0.002430f, +0.000574f, +0.000910f, - -0.002137f, -0.001049f, +0.001581f, -0.001079f, +0.001038f, +0.000401f, +0.000976f, -0.001157f, +0.000145f, +0.000460f, - +0.000507f, +0.000828f, +0.000586f, +0.000475f, -0.000255f, -0.000777f, +0.000529f, -0.001213f, +0.000508f, +0.000253f, - +0.000693f, +0.000657f, -0.000051f, +0.000394f, +0.000173f, -0.000545f - }, - { - -0.066807f, +0.032821f, -0.014649f, +0.068059f, +0.006690f, -0.003688f, +0.003180f, +0.014159f, +0.005140f, +0.004991f, - +0.001648f, -0.005313f, -0.006169f, +0.010129f, -0.003501f, -0.007500f, +0.001615f, -0.008839f, +0.005040f, -0.004089f, - -0.002565f, -0.010484f, +0.007824f, +0.000857f, -0.002493f, -0.000021f, -0.000534f, -0.001593f, +0.002360f, +0.002649f, - -0.001024f, -0.001788f, -0.004136f, -0.004487f, -0.006676f, -0.005149f, +0.000029f, +0.003842f, -0.006034f, -0.001210f, - +0.003323f, -0.002391f, +0.001310f, +0.002635f, +0.005127f, -0.001087f, -0.004847f, +0.000049f, -0.004824f, -0.000962f, - +0.005991f, -0.001521f, +0.001224f, -0.000594f, +0.003267f, -0.001389f, +0.000726f, -0.000279f, -0.000729f, -0.001544f, - +0.003446f, +0.001909f, -0.004689f, +0.001006f, -0.001398f, +0.001015f, +0.000291f, +0.000626f, +0.002742f, +0.000705f, - +0.000051f, +0.000343f, +0.000172f, -0.000528f, -0.000752f, +0.000150f, +0.000103f, -0.001756f, -0.000368f, +0.000391f, - +0.000864f, -0.000817f, +0.001057f, -0.000731f, -0.000038f, -0.000183f, -0.000300f, +0.000709f, +0.000314f, -0.001073f, - -0.001273f, +0.000008f, +0.000157f, +0.000307f, -0.000438f, -0.000460f - }, - { - -0.001003f, -0.024307f, -0.002687f, -0.002025f, -0.000068f, +0.000235f, +0.000720f, +0.002587f, -0.002756f, -0.000358f, - -0.002196f, -0.001815f, -0.007652f, -0.001300f, +0.012743f, -0.025236f, +0.008221f, -0.004125f, +0.001919f, -0.004883f, - -0.008087f, -0.009523f, +0.010706f, +0.021597f, +0.014223f, +0.011643f, -0.024163f, -0.005147f, +0.004002f, +0.016022f, - +0.007117f, +0.004736f, +0.013469f, +0.010437f, +0.001465f, +0.000984f, -0.001985f, +0.000816f, +0.004602f, -0.005989f, - -0.003123f, -0.003198f, +0.000230f, +0.004657f, -0.003375f, +0.001731f, -0.000042f, +0.003276f, +0.000109f, -0.000561f, - -0.002415f, -0.001087f, -0.000039f, -0.000676f, +0.005226f, -0.003705f, -0.004476f, -0.002707f, +0.001842f, -0.000615f, - -0.002044f, -0.000327f, -0.002566f, -0.002868f, +0.000033f, -0.000106f, +0.000305f, -0.001025f, -0.000940f, +0.000689f, - -0.000155f, +0.001251f, -0.000189f, +0.001329f, +0.001286f, +0.000301f, -0.000935f, +0.001384f, -0.000825f, -0.000802f, - +0.000302f, -0.000062f, -0.000703f, -0.000313f, +0.000349f, +0.000056f, -0.000978f, +0.000726f, +0.000082f, +0.000608f, - -0.000651f, +0.000159f, +0.000462f, +0.000229f, +0.000544f, -0.000326f - }, - { - +0.054226f, +0.178389f, -0.006729f, -0.047015f, -0.001143f, +0.006636f, -0.001382f, +0.003014f, -0.007256f, -0.007923f, - +0.007328f, +0.002852f, -0.002081f, -0.002179f, +0.001929f, +0.004082f, +0.002541f, +0.006640f, -0.004772f, +0.005901f, - -0.005111f, -0.005983f, +0.005699f, +0.000033f, -0.007099f, +0.005848f, +0.001542f, +0.008146f, +0.003909f, -0.007263f, - +0.003186f, +0.005763f, +0.001123f, -0.000190f, -0.000866f, +0.001023f, -0.001823f, +0.002350f, -0.002057f, -0.007471f, - +0.001237f, -0.004738f, -0.002483f, -0.002070f, +0.002078f, +0.000652f, +0.003444f, +0.001340f, +0.001079f, +0.000544f, - +0.002527f, +0.002379f, +0.003165f, -0.000678f, +0.002198f, +0.001764f, +0.003541f, +0.000585f, -0.000951f, -0.002506f, - +0.002163f, -0.002057f, -0.002541f, +0.001899f, -0.001578f, -0.000590f, +0.000703f, -0.000981f, -0.000829f, -0.001020f, - -0.000002f, +0.000051f, -0.000411f, +0.001784f, +0.000685f, +0.000921f, +0.001680f, +0.000214f, +0.000082f, +0.000102f, - +0.000787f, +0.000499f, -0.000280f, -0.000422f, +0.000181f, -0.000188f, +0.000186f, -0.000092f, +0.000581f, -0.000412f, - -0.000614f, -0.000323f, +0.000211f, +0.000332f, -0.000716f, +0.000166f - }, - { - -0.001563f, -0.005918f, +0.000792f, -0.001245f, -0.000374f, -0.000641f, +0.001242f, +0.000914f, -0.001005f, +0.000384f, - -0.002514f, -0.000501f, +0.001723f, -0.002569f, +0.019563f, -0.027109f, +0.018416f, +0.013429f, +0.004060f, +0.016906f, - +0.016291f, -0.010910f, +0.003426f, +0.007053f, -0.013065f, +0.016034f, +0.023285f, -0.000116f, -0.009269f, +0.017136f, - -0.004450f, -0.008324f, -0.001907f, +0.004774f, -0.007219f, -0.008691f, -0.008030f, -0.005580f, +0.002038f, -0.005667f, - -0.000204f, -0.000153f, +0.000008f, -0.002668f, -0.000504f, +0.003251f, +0.002108f, +0.003028f, +0.000842f, -0.000672f, - +0.001358f, -0.001590f, +0.001494f, -0.000404f, +0.002008f, +0.000232f, -0.000235f, +0.002650f, -0.001766f, -0.003219f, - -0.000554f, +0.002020f, +0.000429f, +0.001167f, +0.000768f, +0.000947f, -0.000153f, +0.000736f, +0.000702f, +0.001394f, - -0.000939f, +0.000594f, -0.002234f, -0.000105f, +0.002854f, -0.000206f, +0.000287f, -0.000168f, -0.000729f, +0.000930f, - -0.000017f, +0.000170f, -0.000936f, +0.001931f, -0.001483f, +0.000035f, +0.000109f, -0.000471f, -0.000244f, -0.000757f, - -0.000506f, +0.000122f, -0.000171f, -0.000099f, -0.000242f, -0.000071f - }, - { - +0.019262f, -0.211948f, -0.043446f, +0.011927f, +0.023590f, -0.009662f, +0.015457f, +0.004202f, -0.001327f, +0.000287f, - -0.001735f, +0.006010f, +0.005147f, +0.015923f, -0.002456f, +0.000901f, -0.002839f, +0.009670f, -0.006836f, -0.000846f, - -0.001357f, -0.007446f, +0.001839f, +0.002217f, -0.008652f, +0.011941f, -0.001412f, -0.008751f, +0.008185f, +0.008065f, - +0.001603f, -0.007140f, -0.006134f, -0.004218f, +0.008227f, +0.001522f, -0.004109f, +0.008016f, -0.000614f, +0.002575f, - -0.005082f, -0.000465f, -0.002280f, -0.006734f, +0.005187f, -0.000141f, -0.004953f, -0.001096f, +0.001513f, -0.005708f, - -0.000641f, -0.001280f, -0.000397f, -0.001502f, +0.000146f, +0.000071f, -0.001405f, -0.001462f, -0.001442f, +0.000324f, - -0.000765f, +0.000540f, -0.000754f, -0.001300f, +0.000767f, -0.001014f, +0.000869f, -0.000554f, -0.001566f, +0.000842f, - +0.001283f, -0.000372f, -0.000557f, +0.000713f, +0.001213f, -0.000758f, -0.000483f, +0.000661f, -0.000268f, +0.001622f, - +0.000330f, -0.000448f, -0.000687f, -0.000674f, +0.000005f, -0.000629f, +0.000198f, -0.000112f, -0.000538f, -0.001373f, - +0.000763f, -0.000788f, +0.000328f, -0.000116f, -0.000402f, +0.000744f - }, - { - +0.002673f, +0.016180f, -0.000869f, +0.006897f, +0.003500f, +0.003882f, +0.007581f, -0.005702f, -0.005042f, -0.000160f, - -0.000642f, +0.017443f, +0.002238f, -0.002298f, -0.024010f, +0.003143f, +0.000882f, +0.003585f, +0.002688f, +0.023440f, - -0.013754f, +0.005478f, -0.001006f, -0.002976f, +0.002895f, +0.006144f, -0.000247f, +0.004870f, -0.007599f, +0.004605f, - -0.006049f, +0.002065f, -0.000304f, -0.000587f, -0.001701f, +0.000733f, -0.000390f, +0.002963f, +0.001382f, +0.007075f, - -0.002374f, +0.004928f, +0.005542f, -0.001066f, +0.004138f, -0.001353f, -0.001311f, +0.001651f, -0.002175f, -0.001279f, - -0.003454f, +0.001629f, +0.000478f, -0.000082f, -0.000032f, -0.003659f, -0.002333f, +0.000924f, -0.000813f, -0.002235f, - +0.000665f, -0.000952f, +0.000138f, -0.002616f, +0.000961f, +0.000016f, -0.001814f, -0.001068f, +0.000415f, -0.000001f, - +0.001889f, +0.000647f, +0.001249f, -0.000372f, -0.000360f, +0.000469f, -0.000487f, -0.000463f, -0.001752f, +0.000820f, - +0.000375f, -0.000234f, +0.000710f, -0.000376f, -0.000039f, -0.001008f, +0.000288f, +0.000070f, +0.000793f, +0.000004f, - +0.000594f, +0.000545f, +0.000522f, -0.000134f, -0.000051f, -0.000181f - }, - { - +0.093902f, +0.065675f, +0.001308f, -0.013505f, -0.011884f, +0.054746f, +0.009778f, -0.009262f, +0.005108f, -0.013781f, - +0.013334f, +0.000558f, -0.002315f, -0.004097f, -0.008359f, -0.006740f, +0.013720f, +0.005324f, -0.002291f, +0.008455f, - -0.001243f, +0.005654f, +0.000622f, +0.003148f, -0.000645f, -0.002680f, +0.002699f, -0.001949f, -0.003494f, -0.004007f, - -0.000032f, +0.000861f, +0.001178f, +0.003883f, +0.004992f, -0.002759f, -0.000582f, +0.008881f, -0.002512f, +0.004725f, - -0.005034f, -0.002569f, +0.002289f, +0.007802f, +0.001365f, -0.001545f, +0.002041f, +0.005973f, +0.001658f, -0.001036f, - +0.003630f, -0.000536f, +0.001720f, -0.005835f, -0.000112f, +0.003251f, -0.001471f, +0.001379f, +0.001821f, -0.001000f, - +0.001379f, +0.001202f, +0.001081f, -0.000767f, +0.000511f, -0.000384f, -0.000951f, -0.000582f, +0.000230f, -0.002404f, - +0.002399f, -0.001237f, +0.001070f, -0.000463f, +0.001396f, -0.001256f, -0.001558f, -0.000878f, -0.000412f, +0.000534f, - -0.000120f, +0.000482f, -0.000037f, +0.001102f, +0.000626f, +0.000301f, +0.000116f, -0.000586f, +0.000122f, -0.001061f, - +0.000502f, -0.000070f, +0.000284f, +0.000121f, -0.000004f, +0.000085f - }, - { - +0.003341f, -0.053369f, -0.002505f, +0.010849f, -0.002406f, -0.008834f, +0.001308f, +0.005737f, +0.000299f, +0.001122f, - -0.000717f, -0.001571f, -0.005548f, +0.016522f, -0.025905f, +0.005249f, +0.012255f, +0.003391f, +0.003171f, -0.005495f, - -0.002447f, +0.003621f, +0.008412f, -0.005660f, -0.016176f, -0.006868f, -0.006057f, -0.012494f, -0.010504f, -0.011030f, - +0.005915f, +0.010013f, -0.008142f, -0.010310f, +0.009806f, -0.007774f, +0.000223f, -0.005700f, +0.000564f, +0.002786f, - +0.004291f, -0.002903f, -0.012557f, -0.001422f, -0.002446f, -0.002717f, +0.002217f, -0.005029f, +0.000441f, -0.000332f, - -0.000491f, +0.001216f, -0.000280f, +0.000413f, +0.004301f, -0.001034f, -0.000516f, +0.002569f, -0.002156f, +0.001006f, - -0.000153f, -0.001870f, +0.001618f, -0.000362f, +0.000064f, -0.001450f, +0.002273f, +0.001822f, +0.004228f, +0.000065f, - +0.001214f, +0.000729f, +0.001758f, -0.002314f, +0.000538f, -0.001403f, +0.000779f, +0.000664f, +0.000369f, +0.000142f, - +0.001025f, -0.000542f, -0.001399f, -0.000592f, -0.000893f, -0.001114f, +0.000156f, -0.000161f, +0.000472f, +0.000066f, - -0.000985f, +0.000004f, +0.001030f, +0.000769f, +0.000124f, +0.000166f - }, - { - +0.032128f, -0.156395f, -0.006017f, -0.001335f, +0.000672f, +0.030482f, -0.013382f, +0.007049f, -0.008638f, -0.004255f, - -0.007495f, +0.008042f, -0.003254f, -0.001644f, -0.018961f, +0.005024f, -0.001836f, -0.001172f, +0.004484f, +0.001009f, - -0.010124f, -0.008746f, -0.000651f, -0.003812f, -0.006710f, +0.002766f, -0.000633f, +0.002321f, +0.005573f, +0.006307f, - -0.000635f, -0.005752f, -0.001053f, -0.001083f, -0.001002f, -0.001964f, -0.003521f, +0.005652f, -0.001845f, -0.001801f, - +0.002970f, +0.002129f, -0.005452f, +0.000809f, -0.000416f, -0.000838f, +0.003012f, +0.008792f, -0.000410f, +0.002311f, - +0.002272f, +0.001270f, +0.001180f, +0.001835f, +0.003005f, +0.001011f, -0.004854f, +0.003073f, -0.001756f, +0.001877f, - +0.002356f, -0.000481f, -0.000584f, -0.001202f, -0.000841f, +0.000762f, -0.000633f, -0.000415f, +0.000688f, -0.001805f, - +0.000845f, +0.001332f, -0.000197f, +0.000965f, +0.001898f, -0.001038f, +0.000942f, -0.000117f, +0.000012f, +0.001224f, - -0.000116f, +0.000442f, -0.000215f, -0.000486f, +0.000415f, -0.001157f, -0.000902f, +0.000366f, -0.000476f, +0.000491f, - +0.000501f, -0.000237f, -0.000027f, +0.000752f, +0.000837f, -0.000057f - }, - { - +0.005358f, -0.069323f, -0.007970f, +0.002211f, -0.000514f, -0.000022f, +0.006260f, +0.002076f, +0.003971f, +0.000611f, - +0.002262f, +0.008952f, +0.009022f, +0.015505f, +0.001028f, +0.003483f, -0.009834f, -0.007061f, +0.003137f, +0.000064f, - +0.006811f, +0.001314f, +0.009748f, -0.021387f, +0.009588f, +0.002409f, +0.014205f, -0.013284f, +0.011869f, +0.002754f, - +0.010308f, +0.009321f, -0.002022f, +0.001963f, +0.007517f, -0.000161f, -0.000616f, +0.003954f, -0.005396f, +0.002236f, - +0.003684f, +0.001801f, +0.002954f, -0.002953f, -0.005282f, +0.002816f, -0.001399f, -0.000978f, -0.001258f, -0.001459f, - -0.000488f, +0.005061f, -0.002808f, +0.002085f, +0.001886f, +0.001369f, -0.002519f, +0.001565f, +0.004198f, -0.000373f, - -0.000107f, -0.000478f, -0.002315f, -0.000896f, +0.000418f, -0.000450f, -0.001704f, +0.001939f, -0.000149f, -0.001301f, - +0.001422f, -0.000727f, +0.001142f, -0.000989f, -0.001958f, -0.001381f, -0.001372f, -0.000200f, -0.001260f, -0.000819f, - +0.001064f, -0.000566f, -0.000640f, +0.000130f, +0.001055f, -0.000001f, +0.000452f, +0.000526f, -0.000770f, -0.000216f, - +0.000142f, -0.000084f, -0.001012f, -0.000437f, -0.000027f, -0.000146f - } - }, - { - { - +0.004532f, -0.024388f, -0.034052f, -0.025947f, +0.012969f, -0.003678f, +0.002419f, +0.003564f, +0.003506f, -0.000776f, - +0.002931f, -0.009335f, -0.002382f, +0.005692f, -0.000285f, +0.006613f, -0.005152f, +0.000511f, -0.003536f, -0.011528f, - +0.002928f, -0.001939f, +0.005146f, +0.001796f, +0.007851f, -0.000462f, -0.006621f, +0.001577f, +0.003772f, -0.000206f, - +0.004582f, +0.003631f, -0.003100f, -0.001222f, +0.003827f, +0.001729f, +0.008268f, +0.004012f, +0.000918f, +0.002132f, - -0.003807f, -0.000653f, -0.004462f, -0.004840f, +0.000492f, -0.000374f, -0.004708f, +0.001537f, -0.000678f, -0.001906f, - +0.000733f, -0.000548f, +0.001066f, +0.001670f, -0.001337f, -0.000588f, +0.001986f, +0.000934f, +0.004628f, +0.001366f, - +0.000403f, +0.002072f, +0.000655f, -0.000394f, +0.000065f, -0.001009f, +0.001052f, +0.001869f, -0.000431f, +0.002427f, - +0.000709f, -0.000347f, +0.001301f, -0.001429f, -0.001393f, -0.000658f, +0.000221f, -0.000553f, +0.000146f, +0.000065f, - -0.000699f, -0.000210f, +0.001133f, -0.000029f, +0.000464f, +0.000325f, -0.000589f, +0.000175f, +0.000510f, +0.000248f, - +0.000596f, -0.000139f, -0.000365f, +0.000050f, -0.000504f, +0.000321f - }, - { - +0.000187f, +0.019495f, -0.011470f, +0.023340f, -0.018435f, +0.001857f, +0.003971f, -0.002540f, +0.005086f, -0.004176f, - +0.004582f, -0.004698f, -0.005169f, +0.005548f, -0.007129f, +0.017327f, +0.010324f, -0.004170f, +0.001268f, +0.009082f, - +0.002396f, +0.008488f, -0.005593f, -0.011616f, -0.009035f, +0.008787f, +0.003193f, -0.001527f, -0.003147f, +0.004405f, - +0.002396f, -0.008597f, +0.005289f, -0.011204f, +0.001397f, +0.008905f, -0.000038f, -0.000903f, +0.002051f, +0.000359f, - +0.001157f, -0.004763f, -0.001727f, +0.002920f, -0.004286f, -0.004390f, -0.000077f, -0.000222f, -0.004293f, -0.002790f, - +0.000061f, -0.000857f, +0.000246f, -0.000496f, -0.002333f, -0.000196f, +0.001416f, -0.000776f, +0.000695f, -0.002311f, - +0.001193f, -0.001172f, -0.000717f, +0.003187f, +0.000916f, -0.000176f, +0.000067f, +0.000296f, -0.000550f, -0.000064f, - -0.000868f, +0.000591f, +0.001126f, +0.000240f, -0.000333f, +0.001289f, -0.000171f, +0.000041f, +0.000329f, +0.000493f, - -0.001268f, +0.001394f, +0.000172f, +0.000654f, +0.000168f, -0.000073f, -0.000194f, -0.001000f, -0.000277f, -0.000233f, - +0.000641f, +0.000132f, +0.000230f, -0.000636f, -0.000412f, -0.000029f - }, - { - +0.002222f, +0.025827f, +0.012668f, +0.061723f, -0.020337f, +0.001981f, -0.000258f, -0.001368f, -0.000412f, +0.002478f, - +0.002593f, +0.004350f, +0.000498f, +0.007439f, -0.001849f, -0.014517f, -0.001622f, -0.003900f, +0.004391f, -0.005886f, - +0.004258f, -0.017117f, +0.010644f, +0.005900f, +0.006418f, +0.010167f, -0.003325f, -0.001559f, +0.002897f, +0.009135f, - +0.000780f, +0.005763f, -0.003377f, -0.011016f, -0.002106f, +0.003794f, -0.000739f, +0.000229f, -0.001564f, -0.000298f, - +0.000509f, +0.004207f, +0.000882f, -0.002458f, -0.000647f, -0.004141f, +0.002144f, +0.000786f, -0.000512f, -0.000137f, - -0.002827f, +0.001040f, -0.000669f, +0.000373f, -0.000674f, +0.002646f, -0.002328f, +0.001842f, +0.001912f, +0.002166f, - -0.001941f, -0.001363f, -0.002964f, +0.001989f, -0.001543f, +0.000199f, +0.000489f, +0.001189f, -0.000301f, -0.002973f, - -0.000651f, +0.000068f, -0.000250f, +0.000539f, -0.000026f, -0.000374f, +0.000651f, -0.000246f, -0.000533f, +0.000190f, - -0.000217f, -0.000526f, +0.000021f, +0.000622f, +0.000081f, -0.000051f, -0.000242f, -0.000396f, +0.000500f, +0.000136f, - -0.000280f, +0.000935f, -0.000278f, -0.000467f, +0.000012f, -0.000855f - }, - { - +0.024619f, -0.058431f, -0.003858f, -0.007664f, -0.008863f, -0.000240f, -0.001740f, +0.000721f, +0.002766f, +0.001686f, - +0.012835f, -0.006807f, +0.003842f, +0.002168f, +0.013678f, +0.001551f, -0.003339f, -0.006345f, -0.002060f, -0.000966f, - +0.003122f, -0.005077f, +0.008100f, +0.001104f, -0.004936f, +0.003815f, -0.004791f, -0.003450f, -0.002462f, -0.001452f, - +0.000607f, -0.000631f, -0.000522f, -0.000023f, +0.004062f, +0.002603f, +0.002864f, -0.000628f, -0.003158f, +0.000236f, - +0.002224f, -0.000634f, +0.001807f, -0.006057f, +0.002537f, +0.006518f, -0.002934f, -0.003379f, +0.000190f, -0.003597f, - -0.000555f, +0.001316f, +0.001163f, -0.003025f, -0.002539f, +0.001222f, +0.000317f, -0.001770f, +0.000285f, +0.000190f, - +0.000088f, +0.000886f, -0.000648f, +0.002245f, +0.000309f, -0.000935f, +0.000792f, +0.000243f, +0.000685f, +0.002036f, - +0.001884f, -0.000023f, -0.000519f, -0.000705f, -0.000660f, -0.000869f, -0.000715f, +0.000206f, -0.000202f, -0.000325f, - -0.000305f, -0.000138f, +0.000430f, -0.000328f, -0.000300f, +0.000747f, -0.000184f, +0.000035f, -0.000322f, +0.000260f, - -0.000504f, +0.000484f, -0.000173f, -0.000739f, -0.000183f, +0.000004f - }, - { - -0.003012f, -0.037874f, +0.013204f, +0.004246f, -0.000871f, +0.000009f, +0.000215f, -0.002260f, +0.001564f, +0.002004f, - -0.001514f, +0.010176f, -0.007255f, -0.001129f, +0.004918f, +0.009185f, +0.015281f, +0.008751f, -0.014205f, -0.008334f, - +0.001460f, +0.008650f, +0.018403f, +0.006750f, -0.002951f, +0.017835f, +0.003979f, -0.004264f, +0.007300f, -0.008418f, - -0.000139f, +0.004093f, -0.002318f, +0.001530f, +0.010714f, +0.000847f, -0.002133f, -0.004340f, +0.000677f, +0.007034f, - +0.001341f, +0.003880f, +0.002411f, +0.000827f, +0.001778f, -0.002189f, +0.001703f, +0.001345f, +0.000505f, +0.001113f, - +0.002981f, -0.000462f, -0.000503f, -0.001485f, +0.000579f, +0.000553f, +0.001705f, -0.001618f, -0.002497f, -0.001179f, - +0.001867f, -0.002355f, +0.000181f, +0.000668f, -0.000836f, -0.001831f, -0.001025f, -0.000477f, -0.001272f, -0.000068f, - -0.000091f, -0.001371f, +0.000824f, +0.000351f, +0.000698f, +0.000198f, -0.000104f, -0.000739f, -0.000073f, -0.000420f, - +0.000919f, +0.000367f, +0.001753f, +0.000387f, +0.000319f, -0.000604f, -0.000916f, -0.000231f, +0.000353f, -0.000277f, - +0.000785f, +0.000962f, +0.000409f, +0.000015f, +0.000129f, -0.000473f - }, - { - +0.039289f, -0.124408f, -0.005885f, +0.076218f, +0.003203f, -0.002752f, +0.008655f, -0.000206f, +0.010722f, +0.008622f, - -0.004959f, -0.001218f, +0.001206f, -0.000017f, -0.006845f, -0.003874f, +0.001379f, -0.005596f, +0.004367f, -0.008536f, - -0.005610f, -0.002430f, +0.003856f, -0.001593f, -0.001648f, -0.003079f, +0.005016f, +0.002550f, +0.004254f, -0.003040f, - -0.002115f, -0.000404f, -0.006735f, +0.000516f, -0.004498f, -0.003105f, -0.004550f, +0.001177f, -0.003687f, -0.001559f, - +0.000975f, +0.000277f, -0.000395f, +0.007220f, +0.001280f, +0.000682f, -0.001355f, -0.002985f, -0.003144f, +0.001403f, - -0.000116f, +0.005977f, -0.003202f, +0.004465f, -0.001315f, -0.000945f, -0.002782f, -0.001009f, +0.000010f, +0.000652f, - +0.002630f, +0.001546f, -0.001489f, -0.001161f, -0.000160f, +0.001146f, -0.000354f, +0.000912f, +0.000730f, +0.002521f, - +0.000019f, -0.001399f, +0.000477f, +0.000490f, -0.000184f, +0.000185f, -0.000433f, -0.000799f, +0.000073f, -0.000371f, - +0.001053f, -0.000128f, +0.000678f, -0.000122f, -0.000870f, -0.000260f, -0.000276f, -0.000007f, +0.000690f, -0.000585f, - -0.001112f, -0.000023f, -0.000172f, +0.000431f, +0.000040f, -0.000585f - }, - { - +0.000220f, -0.009689f, -0.019100f, -0.000425f, +0.002152f, -0.000485f, -0.000207f, +0.002287f, -0.002570f, -0.003753f, - +0.004998f, -0.004263f, -0.010376f, +0.010728f, -0.002201f, +0.013085f, -0.018670f, +0.014974f, +0.009734f, -0.027433f, - +0.002185f, -0.012060f, +0.011562f, +0.023090f, +0.017063f, -0.010763f, -0.017709f, +0.008834f, +0.007932f, +0.005548f, - +0.017093f, -0.002763f, +0.011719f, +0.007083f, +0.006036f, -0.008416f, +0.002160f, +0.003194f, -0.001263f, -0.008253f, - -0.004229f, +0.000337f, +0.000100f, +0.000313f, +0.000874f, +0.000119f, -0.000530f, +0.001139f, +0.002453f, -0.001711f, - -0.000964f, -0.001956f, +0.001536f, -0.000423f, +0.000599f, -0.000207f, -0.005217f, +0.000447f, -0.000319f, -0.000806f, - -0.000384f, -0.000332f, -0.002372f, -0.001141f, -0.001770f, -0.000566f, -0.000816f, +0.000789f, -0.001901f, +0.000771f, - +0.000778f, -0.000341f, +0.000528f, +0.001288f, -0.000163f, +0.000260f, -0.000213f, -0.000681f, -0.000251f, -0.001236f, - +0.001073f, -0.000377f, -0.000133f, -0.000719f, +0.000342f, -0.000241f, -0.000268f, +0.000536f, +0.000552f, +0.000502f, - +0.000044f, +0.000256f, +0.000098f, +0.000496f, +0.000031f, -0.000149f - }, - { - -0.010046f, +0.245658f, +0.015848f, -0.065593f, +0.012863f, +0.003768f, +0.007119f, -0.006490f, -0.003440f, -0.004759f, - -0.000593f, +0.009227f, -0.001087f, -0.001073f, -0.004427f, +0.006491f, +0.003118f, +0.005318f, +0.011004f, -0.003394f, - -0.001698f, -0.006673f, +0.000020f, -0.002885f, +0.001044f, +0.002901f, +0.004333f, +0.009137f, +0.004962f, -0.005832f, - +0.000211f, +0.001529f, +0.007188f, -0.004679f, +0.003596f, +0.002570f, -0.000126f, -0.000945f, -0.004402f, -0.005342f, - +0.000216f, -0.002659f, -0.002809f, -0.001483f, -0.000485f, +0.000470f, +0.001634f, +0.003047f, +0.002319f, -0.000391f, - +0.001423f, +0.001311f, +0.006344f, -0.000850f, +0.001036f, +0.001277f, +0.001614f, -0.000340f, -0.000385f, -0.003709f, - +0.002958f, -0.000712f, -0.001356f, -0.001524f, -0.000563f, -0.000847f, -0.000576f, +0.000123f, -0.001228f, -0.000908f, - +0.000660f, +0.000042f, -0.000001f, +0.000624f, -0.000010f, +0.001691f, +0.000483f, +0.000490f, +0.000768f, +0.000382f, - -0.000492f, +0.000388f, +0.000032f, -0.000864f, +0.000760f, +0.000351f, -0.000344f, -0.000203f, +0.000619f, -0.000155f, - -0.000854f, -0.000647f, +0.000540f, -0.000674f, -0.000724f, +0.000836f - }, - { - +0.000003f, -0.005310f, -0.009469f, -0.001228f, +0.000185f, -0.000721f, +0.001029f, +0.002385f, -0.000714f, -0.001650f, - +0.000724f, -0.001552f, +0.002887f, +0.002124f, +0.011266f, -0.005131f, -0.002224f, +0.018440f, +0.009977f, +0.003225f, - +0.006560f, -0.005380f, +0.004281f, -0.001252f, -0.006675f, +0.007197f, +0.019581f, -0.003185f, -0.001186f, +0.003377f, - -0.002625f, +0.003656f, -0.000970f, +0.000459f, -0.007065f, -0.004836f, -0.008100f, +0.000023f, +0.000572f, -0.002270f, - -0.004552f, +0.000473f, +0.001379f, -0.004975f, -0.001510f, -0.001218f, +0.003698f, +0.005160f, +0.000306f, -0.000935f, - -0.001598f, +0.002917f, -0.001666f, +0.001616f, +0.000719f, -0.000219f, +0.001659f, +0.001345f, -0.003049f, -0.000760f, - -0.000102f, +0.000250f, +0.001927f, +0.001341f, +0.000432f, +0.000226f, +0.001460f, +0.000494f, +0.000843f, -0.000176f, - +0.001478f, -0.000033f, -0.001212f, +0.000997f, +0.001136f, -0.000468f, +0.000172f, +0.000159f, -0.000446f, +0.000636f, - -0.000685f, +0.001683f, -0.000620f, +0.000046f, -0.000390f, +0.000053f, -0.000204f, -0.000798f, +0.000316f, -0.000708f, - -0.000472f, -0.000292f, +0.000225f, -0.000361f, -0.000048f, -0.000228f - }, - { - -0.021440f, -0.187661f, -0.003975f, +0.005253f, +0.007036f, -0.009081f, +0.009510f, +0.002919f, -0.006896f, -0.000792f, - +0.005804f, -0.003168f, +0.004736f, +0.007620f, +0.004249f, +0.007741f, +0.001038f, -0.005755f, -0.003390f, +0.003052f, - -0.008442f, -0.001851f, -0.005407f, +0.003438f, +0.002907f, +0.001638f, +0.002681f, -0.002322f, +0.002675f, +0.001777f, - +0.005416f, -0.005694f, -0.005754f, -0.000966f, +0.002207f, -0.001104f, +0.000929f, +0.004681f, +0.004139f, +0.000224f, - -0.004264f, -0.001996f, -0.000893f, -0.003292f, +0.002459f, +0.000671f, -0.004660f, -0.000499f, -0.001075f, -0.004264f, - -0.004057f, +0.000271f, -0.002477f, +0.001105f, -0.001214f, -0.000558f, -0.001287f, -0.003612f, +0.002463f, -0.000015f, - -0.002827f, -0.000112f, -0.001536f, -0.000733f, +0.001608f, -0.000143f, -0.000204f, -0.001518f, +0.000299f, +0.002102f, - -0.000983f, +0.000498f, -0.000988f, +0.001094f, -0.000364f, -0.000500f, +0.000151f, -0.000301f, +0.000629f, +0.000205f, - +0.000917f, +0.000829f, -0.001257f, -0.001055f, -0.000493f, -0.000403f, -0.000841f, +0.000176f, -0.000889f, -0.000311f, - -0.000100f, +0.000261f, -0.000577f, -0.000062f, +0.000277f, +0.000321f - }, - { - -0.003127f, +0.016299f, +0.001266f, +0.020219f, -0.001658f, +0.001006f, +0.008952f, -0.004361f, -0.002967f, -0.003562f, - +0.000006f, +0.013999f, +0.003365f, -0.001932f, -0.015596f, -0.004755f, +0.011581f, -0.002636f, +0.012098f, +0.005894f, - +0.016015f, -0.006008f, -0.000148f, -0.004494f, -0.005984f, +0.013398f, -0.002740f, +0.003557f, -0.003721f, +0.004769f, - +0.000209f, -0.003843f, -0.008000f, +0.002730f, +0.002401f, -0.000579f, +0.001266f, +0.002287f, +0.002701f, +0.004213f, - +0.001356f, +0.006972f, -0.002031f, +0.004122f, -0.001959f, +0.002877f, -0.000439f, -0.001654f, +0.000080f, -0.005038f, - +0.001158f, +0.001222f, +0.001886f, -0.002332f, +0.001342f, -0.001206f, -0.002379f, -0.000430f, +0.000455f, -0.001703f, - -0.001289f, -0.001494f, -0.000259f, -0.001311f, -0.000039f, -0.001276f, -0.000627f, -0.000542f, -0.000972f, +0.000066f, - +0.001788f, +0.001927f, +0.001171f, -0.000209f, -0.000870f, +0.001014f, -0.000854f, -0.000526f, -0.000982f, +0.000053f, - +0.000119f, -0.000222f, +0.000633f, +0.000057f, +0.000279f, -0.001173f, -0.000251f, +0.000968f, +0.000502f, +0.001028f, - +0.000143f, +0.000520f, +0.000243f, +0.000238f, -0.000711f, -0.000144f - }, - { - -0.054846f, +0.261844f, +0.010285f, -0.005467f, -0.023799f, +0.042705f, +0.032403f, -0.006098f, +0.003855f, -0.007207f, - +0.002346f, +0.003350f, +0.003652f, +0.002562f, -0.010125f, +0.000305f, -0.003081f, +0.005609f, +0.001004f, +0.000329f, - +0.016856f, -0.002799f, +0.002297f, -0.002685f, -0.004049f, -0.005610f, +0.010176f, -0.003495f, -0.002537f, -0.005735f, - +0.000234f, +0.000923f, +0.000159f, +0.007096f, +0.000729f, +0.006854f, -0.003741f, +0.004862f, +0.006286f, -0.001961f, - -0.002768f, +0.001620f, +0.000512f, +0.004532f, +0.001301f, +0.003007f, -0.001712f, +0.005235f, +0.002010f, +0.002168f, - -0.001107f, +0.000770f, +0.000065f, -0.004932f, +0.000702f, +0.000920f, -0.001636f, +0.000912f, +0.001987f, +0.002502f, - -0.002443f, +0.002656f, +0.000734f, -0.001795f, -0.000024f, -0.000155f, -0.000707f, +0.000306f, -0.000369f, -0.001003f, - +0.000790f, -0.000561f, +0.000778f, +0.000337f, -0.000074f, -0.000401f, -0.001199f, -0.000383f, -0.000165f, +0.000131f, - +0.000518f, -0.000846f, +0.000725f, +0.000016f, +0.000579f, +0.000012f, -0.000300f, -0.000187f, -0.000342f, -0.000713f, - +0.000434f, -0.000306f, +0.000160f, +0.000291f, +0.000056f, +0.000120f - }, - { - -0.001218f, -0.061391f, +0.013208f, +0.007741f, -0.000758f, -0.006311f, -0.003028f, +0.002970f, +0.005752f, -0.001516f, - +0.006256f, -0.004353f, -0.002468f, -0.009740f, -0.012181f, +0.000539f, +0.007690f, +0.005542f, +0.002289f, -0.004760f, - +0.024822f, +0.002316f, -0.008916f, -0.008895f, -0.026823f, +0.017551f, -0.014829f, -0.012417f, -0.009577f, -0.004894f, - -0.002109f, +0.006063f, -0.004302f, -0.005549f, +0.000205f, +0.004847f, -0.007415f, -0.001906f, +0.003362f, +0.001086f, - -0.002882f, -0.005069f, -0.004736f, -0.004069f, -0.000147f, -0.001028f, -0.003847f, +0.000259f, -0.001409f, -0.001991f, - +0.000095f, +0.002009f, -0.000901f, +0.002818f, +0.000524f, -0.000847f, -0.000685f, -0.000476f, -0.001368f, +0.004671f, - -0.002855f, +0.000211f, -0.001946f, +0.001258f, +0.000314f, -0.000128f, +0.000091f, +0.004565f, +0.000732f, +0.001793f, - +0.000448f, +0.001219f, +0.000233f, -0.000655f, -0.000924f, -0.001187f, +0.000708f, -0.000268f, +0.000686f, +0.000481f, - -0.000193f, +0.000991f, -0.000396f, -0.000577f, -0.000712f, -0.001694f, -0.000167f, +0.000797f, +0.000038f, -0.000176f, - -0.000555f, +0.000491f, +0.000055f, +0.000533f, +0.000894f, -0.000440f - }, - { - -0.049074f, -0.047338f, -0.000247f, -0.003890f, -0.007763f, +0.016108f, +0.001659f, +0.002867f, -0.008073f, -0.004452f, - -0.005465f, -0.001020f, +0.006763f, +0.007007f, -0.029564f, +0.004271f, +0.003139f, -0.000373f, -0.003756f, -0.005714f, - -0.001628f, -0.005605f, -0.003806f, -0.006891f, -0.001295f, -0.005962f, +0.007455f, -0.004969f, +0.004540f, +0.006837f, - +0.005111f, -0.007012f, +0.000796f, -0.002387f, +0.001274f, -0.008341f, -0.000339f, +0.004690f, -0.001340f, +0.000303f, - +0.001337f, +0.001739f, -0.005018f, -0.000957f, -0.003362f, +0.004487f, +0.004242f, +0.002724f, +0.004823f, -0.000842f, - +0.002889f, -0.000025f, +0.001990f, +0.001944f, +0.001169f, +0.003237f, -0.002904f, +0.000561f, -0.000439f, +0.002647f, - +0.000326f, -0.000044f, +0.000373f, -0.001766f, +0.000481f, +0.001394f, +0.000227f, -0.001250f, +0.001022f, -0.001548f, - +0.001774f, -0.000195f, +0.000559f, +0.000868f, +0.001704f, +0.000476f, -0.000126f, -0.000049f, +0.000710f, +0.001039f, - +0.000016f, +0.000314f, -0.000373f, -0.000475f, +0.000640f, -0.000144f, -0.000221f, -0.001060f, +0.000206f, +0.000644f, - +0.000380f, +0.000261f, -0.000174f, +0.000822f, +0.000337f, +0.000227f - }, - { - -0.002996f, -0.063796f, +0.002684f, -0.003696f, -0.001543f, -0.000072f, +0.001169f, +0.005259f, -0.002247f, +0.007628f, - +0.002119f, +0.006310f, +0.009528f, -0.006885f, +0.037661f, -0.009698f, -0.002049f, -0.007829f, -0.002594f, -0.003695f, - +0.005857f, +0.000829f, +0.006073f, -0.010680f, -0.007677f, +0.007739f, +0.005677f, -0.007629f, +0.009370f, +0.011932f, - +0.007086f, +0.004156f, +0.005622f, -0.002691f, +0.007488f, +0.002019f, +0.001401f, -0.003344f, -0.001126f, -0.000647f, - +0.008371f, -0.006043f, -0.001695f, -0.000721f, +0.001381f, -0.001203f, -0.000300f, -0.002077f, -0.002346f, +0.001379f, - +0.001376f, -0.000268f, -0.001371f, +0.001718f, +0.003182f, +0.001845f, -0.002664f, +0.000033f, +0.001517f, -0.000572f, - +0.000692f, -0.001235f, -0.001403f, -0.001178f, -0.000860f, +0.000418f, -0.000275f, +0.001264f, -0.001400f, +0.000019f, - -0.000596f, +0.001047f, -0.001049f, -0.001722f, -0.002133f, -0.000825f, -0.000337f, -0.000868f, -0.001234f, -0.000887f, - +0.000872f, -0.000309f, +0.000176f, +0.001150f, +0.000183f, +0.000123f, +0.000032f, +0.000499f, +0.000048f, -0.000076f, - -0.000106f, -0.000275f, -0.000586f, -0.000593f, +0.000198f, -0.000447f - } - }, - { - { - -0.009573f, +0.028138f, +0.051364f, -0.046470f, -0.000473f, +0.000654f, -0.000862f, +0.001582f, +0.013750f, -0.000407f, - -0.009431f, -0.010719f, +0.000294f, -0.005653f, -0.009834f, +0.003757f, -0.004463f, +0.000358f, -0.000313f, -0.012984f, - +0.005238f, +0.001221f, +0.006144f, -0.002993f, +0.003566f, +0.002176f, -0.003935f, +0.003621f, +0.007648f, +0.000570f, - -0.001606f, +0.003687f, -0.001250f, -0.001617f, +0.005090f, -0.001822f, +0.002507f, +0.000651f, -0.003067f, +0.001444f, - -0.000288f, +0.001601f, -0.001711f, -0.000720f, +0.001032f, -0.001836f, -0.001329f, +0.003805f, +0.000228f, +0.001465f, - +0.000942f, -0.003347f, -0.001523f, +0.000398f, -0.003059f, -0.002672f, -0.000602f, -0.000554f, +0.003078f, +0.000135f, - -0.000472f, -0.000236f, -0.000136f, +0.000827f, -0.000018f, -0.001026f, -0.000654f, +0.000497f, -0.001591f, +0.001389f, - +0.000305f, -0.000410f, +0.001922f, -0.000540f, -0.000519f, +0.000275f, +0.001038f, -0.000737f, +0.000104f, -0.000211f, - -0.000117f, -0.000308f, +0.000728f, +0.000155f, +0.000129f, +0.000274f, -0.000147f, +0.000377f, +0.000021f, -0.000137f, - +0.000343f, +0.000345f, -0.000298f, -0.000029f, -0.000560f, +0.000049f - }, - { - +0.001919f, +0.030601f, +0.000142f, +0.032251f, -0.017484f, -0.001358f, +0.001246f, -0.002405f, +0.006843f, -0.002874f, - +0.003367f, -0.004479f, -0.006901f, +0.001394f, -0.013899f, +0.007489f, -0.003637f, -0.009211f, -0.007560f, +0.011231f, - -0.001909f, +0.002579f, -0.000672f, -0.001070f, -0.009313f, +0.006225f, +0.001231f, -0.000914f, -0.000589f, +0.003070f, - +0.001493f, -0.004799f, +0.011842f, -0.010142f, -0.003406f, +0.005111f, -0.000815f, -0.001772f, +0.004383f, +0.001658f, - +0.001776f, -0.000281f, +0.000704f, +0.004875f, -0.004778f, -0.005998f, +0.000820f, -0.001219f, -0.002908f, -0.000724f, - +0.002286f, +0.002212f, +0.002503f, -0.000532f, -0.001692f, +0.000028f, +0.000887f, -0.000004f, +0.000664f, -0.001002f, - +0.000358f, -0.001445f, +0.000572f, +0.002104f, +0.000153f, +0.000307f, +0.000322f, -0.000503f, -0.000716f, -0.000022f, - -0.001836f, -0.001097f, +0.000667f, +0.000187f, -0.000861f, -0.000059f, -0.001190f, -0.000168f, +0.000280f, +0.000555f, - -0.001726f, +0.000909f, -0.000082f, +0.000224f, +0.000116f, +0.000130f, +0.000093f, -0.001145f, -0.000001f, -0.000538f, - +0.000529f, -0.000010f, +0.000057f, +0.000090f, -0.000074f, +0.000251f - }, - { - -0.001016f, +0.024859f, +0.003012f, +0.040370f, -0.021431f, +0.008603f, +0.005065f, +0.002775f, -0.003053f, -0.002578f, - +0.001498f, +0.005082f, +0.002727f, +0.000946f, -0.002464f, +0.000587f, +0.008113f, +0.004196f, -0.004540f, -0.012774f, - +0.011390f, -0.005528f, +0.003596f, -0.003021f, -0.002336f, +0.005191f, -0.005472f, -0.002333f, -0.000101f, +0.007335f, - -0.005830f, -0.001367f, +0.000993f, -0.003726f, +0.000842f, +0.002579f, -0.000862f, -0.002002f, -0.001913f, +0.002156f, - +0.003561f, +0.007085f, +0.001549f, -0.001457f, +0.003580f, +0.001224f, +0.003639f, +0.001377f, +0.000659f, -0.000847f, - -0.001369f, +0.001384f, -0.001242f, +0.002463f, -0.000071f, +0.000027f, -0.003432f, +0.000969f, -0.000031f, +0.002718f, - -0.000448f, +0.000492f, -0.000785f, +0.003313f, -0.001249f, -0.001157f, -0.000603f, +0.000462f, -0.000602f, -0.001861f, - +0.001069f, +0.001333f, +0.000325f, +0.000897f, -0.000057f, -0.000342f, +0.000677f, +0.000481f, -0.000018f, +0.000569f, - -0.000645f, -0.000346f, -0.000389f, -0.000222f, +0.000031f, +0.000147f, -0.000468f, -0.000181f, +0.000581f, -0.000317f, - -0.000218f, +0.000986f, -0.000082f, -0.000180f, +0.000186f, -0.000775f - }, - { - +0.008734f, -0.045785f, +0.008836f, +0.004006f, +0.017489f, -0.000662f, -0.002292f, +0.004882f, +0.004536f, +0.000817f, - +0.005437f, -0.014735f, +0.013181f, +0.008251f, +0.010148f, -0.002869f, -0.006767f, -0.009407f, +0.000991f, +0.002349f, - +0.003112f, -0.006030f, +0.003623f, +0.002116f, -0.004338f, -0.000713f, -0.000128f, -0.001531f, -0.002056f, -0.000171f, - +0.005246f, +0.003393f, +0.001694f, -0.002345f, +0.004034f, +0.004711f, +0.005267f, +0.000149f, +0.000798f, -0.000226f, - +0.000637f, -0.000034f, -0.002356f, -0.005769f, +0.003812f, +0.002737f, -0.004610f, -0.002490f, +0.004238f, -0.000862f, - -0.000595f, +0.000357f, +0.001022f, -0.001725f, +0.000256f, +0.001995f, -0.000497f, -0.002165f, -0.000332f, +0.000104f, - -0.001515f, -0.000727f, -0.001526f, +0.003190f, +0.000272f, -0.000340f, +0.000576f, +0.000729f, +0.000872f, +0.001421f, - +0.000243f, -0.000378f, +0.001073f, +0.000677f, -0.000492f, -0.000364f, -0.000273f, -0.000604f, +0.000109f, +0.000875f, - +0.000193f, -0.000162f, +0.000078f, -0.000347f, -0.000368f, +0.000241f, -0.000430f, -0.000304f, -0.000440f, +0.000731f, - -0.000656f, -0.000233f, -0.000424f, -0.000315f, -0.000285f, -0.000336f - }, - { - +0.001257f, -0.051896f, +0.000252f, +0.003433f, -0.002364f, +0.000524f, -0.002126f, -0.005228f, +0.001205f, -0.000344f, - -0.002301f, +0.007207f, -0.015070f, -0.001446f, +0.007645f, -0.003301f, -0.011744f, +0.019360f, -0.012049f, -0.014045f, - -0.006932f, -0.005385f, -0.000330f, +0.001841f, -0.001890f, +0.018520f, -0.001808f, -0.007999f, -0.002060f, -0.006315f, - -0.004521f, -0.005804f, -0.006016f, +0.000659f, +0.002733f, -0.010308f, -0.008308f, -0.000799f, -0.001772f, +0.001757f, - -0.000683f, +0.001678f, +0.000170f, -0.001766f, -0.002018f, -0.003492f, -0.001255f, -0.000772f, +0.000254f, +0.000483f, - +0.002651f, -0.001075f, -0.000102f, -0.002602f, -0.000562f, -0.000156f, +0.001605f, -0.000002f, -0.001961f, -0.000309f, - +0.001280f, -0.002871f, +0.000228f, -0.000170f, +0.001168f, -0.001040f, -0.001191f, -0.000823f, -0.001938f, +0.000375f, - +0.000530f, +0.000510f, +0.001038f, +0.000412f, +0.000361f, +0.000095f, -0.000767f, -0.000399f, +0.000147f, -0.000474f, - +0.000583f, -0.000696f, +0.000586f, +0.000112f, +0.000358f, +0.000041f, -0.000733f, -0.000050f, +0.000177f, -0.000401f, - +0.001036f, +0.000746f, +0.000230f, +0.000314f, +0.000327f, +0.000363f - }, - { - +0.004928f, -0.161832f, +0.012771f, +0.072672f, -0.011893f, -0.005378f, -0.000189f, -0.016882f, +0.001418f, +0.008276f, - -0.004747f, -0.003194f, +0.000634f, -0.006601f, -0.009260f, +0.001385f, +0.007707f, -0.001985f, +0.003083f, -0.003182f, - +0.004108f, +0.005462f, +0.004200f, -0.005070f, -0.004490f, -0.003042f, +0.005045f, -0.002232f, +0.000968f, +0.002503f, - +0.004153f, +0.001982f, -0.006522f, +0.002433f, +0.000762f, +0.000461f, -0.004069f, -0.001753f, +0.000554f, +0.002713f, - -0.003728f, -0.002238f, -0.000805f, +0.003801f, -0.000285f, +0.001167f, +0.002303f, +0.001619f, +0.001350f, +0.003871f, - -0.005928f, +0.000816f, -0.003675f, +0.004354f, -0.003610f, +0.001297f, -0.001837f, -0.000411f, +0.000666f, +0.000413f, - +0.000513f, +0.000261f, -0.000498f, -0.000091f, +0.000826f, +0.001811f, -0.000414f, +0.000123f, +0.000025f, +0.001059f, - -0.000256f, -0.000565f, -0.000780f, +0.000875f, -0.000108f, +0.000541f, -0.000045f, -0.000547f, +0.000607f, -0.000513f, - +0.000190f, -0.000737f, +0.000440f, +0.000558f, -0.000188f, +0.000207f, -0.000213f, +0.000094f, +0.000432f, +0.000149f, - -0.000480f, +0.000085f, -0.000104f, +0.000266f, +0.000298f, -0.000054f - }, - { - +0.000310f, +0.013849f, -0.002207f, -0.001768f, -0.000169f, +0.000081f, -0.000324f, +0.000644f, -0.004359f, -0.003742f, - +0.003998f, -0.003316f, -0.005953f, +0.006460f, -0.001141f, +0.022848f, -0.020011f, +0.003581f, -0.001817f, -0.025509f, - +0.014513f, +0.001588f, +0.027027f, +0.009754f, -0.012046f, -0.022966f, -0.009184f, +0.008424f, -0.000963f, -0.002606f, - +0.009857f, -0.008111f, +0.003979f, -0.001261f, +0.006138f, -0.001678f, +0.000262f, -0.002906f, -0.003390f, -0.003076f, - -0.000954f, -0.002824f, -0.002239f, +0.001858f, +0.002292f, +0.002523f, +0.000540f, -0.001839f, -0.000769f, -0.001680f, - +0.001877f, -0.000974f, +0.001166f, -0.000442f, -0.000058f, +0.002618f, -0.001220f, +0.001933f, +0.001365f, +0.000711f, - +0.000183f, -0.000263f, -0.000063f, +0.001666f, -0.001902f, -0.001649f, +0.000254f, +0.003750f, -0.001517f, -0.001179f, - -0.000905f, -0.000604f, +0.000777f, +0.000012f, -0.000184f, +0.000644f, +0.000274f, +0.000006f, +0.000087f, -0.000992f, - +0.000719f, -0.000864f, -0.000035f, -0.000389f, +0.000586f, +0.000114f, -0.000038f, +0.000545f, +0.000153f, -0.000242f, - +0.000336f, +0.000403f, +0.000023f, +0.000210f, -0.000400f, -0.000147f - }, - { - -0.024867f, +0.183848f, +0.000171f, -0.076135f, -0.007211f, -0.003480f, +0.000953f, -0.005109f, -0.000948f, -0.003842f, - -0.006056f, +0.009641f, +0.007566f, -0.006801f, -0.003274f, +0.002643f, -0.001605f, -0.004400f, +0.007852f, +0.001588f, - +0.001157f, -0.003222f, -0.001146f, -0.006017f, -0.005547f, -0.000112f, +0.001167f, +0.003442f, +0.003413f, -0.004382f, - -0.004539f, -0.003672f, +0.005261f, -0.004727f, +0.005165f, -0.002091f, -0.002644f, -0.001325f, -0.005373f, -0.004618f, - -0.000876f, +0.000396f, -0.001658f, -0.003202f, +0.000156f, -0.001198f, -0.002024f, -0.003215f, +0.000611f, -0.000135f, - +0.000874f, -0.003143f, +0.001414f, -0.001483f, +0.001341f, +0.001356f, -0.000618f, -0.002891f, -0.000167f, -0.002649f, - +0.002264f, +0.000113f, +0.000540f, -0.000385f, +0.000139f, -0.000632f, -0.000684f, -0.000207f, -0.000258f, +0.000861f, - +0.001033f, -0.000163f, -0.000039f, +0.000371f, -0.000744f, +0.000364f, -0.000003f, +0.000099f, +0.000569f, +0.000153f, - -0.000889f, -0.000004f, -0.000154f, -0.000442f, +0.000658f, +0.000010f, +0.000771f, +0.000385f, -0.000307f, -0.000398f, - -0.000668f, -0.000248f, +0.000601f, -0.000262f, -0.000196f, +0.000497f - }, - { - +0.001366f, +0.005065f, -0.002965f, +0.004115f, +0.001690f, +0.000112f, -0.001091f, +0.002391f, +0.002190f, -0.002005f, - -0.001930f, +0.000727f, +0.001682f, +0.001792f, -0.004813f, +0.005795f, -0.009607f, -0.009328f, -0.000282f, -0.007274f, - -0.005470f, -0.003472f, -0.006496f, -0.016983f, -0.004468f, -0.009141f, -0.004092f, -0.006930f, +0.002602f, -0.002906f, - -0.010094f, +0.000584f, +0.000155f, +0.001820f, -0.001866f, +0.005457f, +0.002708f, +0.005819f, +0.000633f, -0.000286f, - -0.002120f, +0.004005f, +0.004372f, -0.002791f, -0.000239f, -0.001629f, +0.002917f, +0.000358f, -0.000564f, +0.000530f, - -0.002468f, +0.002228f, -0.001075f, +0.000941f, +0.001050f, +0.002018f, +0.000620f, +0.000445f, -0.000153f, +0.002012f, - +0.000878f, -0.000910f, +0.000923f, -0.000983f, -0.000776f, -0.000573f, +0.000058f, -0.001015f, -0.000469f, -0.000904f, - +0.000879f, -0.000496f, +0.000421f, +0.002537f, +0.000626f, -0.000700f, -0.000536f, -0.000431f, -0.000004f, +0.001240f, - -0.000732f, +0.001066f, -0.000969f, -0.000018f, -0.000267f, +0.000093f, +0.000270f, -0.000632f, +0.000253f, -0.000030f, - +0.000103f, -0.000502f, +0.000082f, -0.000267f, +0.000172f, -0.000142f - }, - { - +0.022031f, -0.179811f, -0.039095f, +0.001843f, +0.000474f, -0.020823f, -0.014768f, -0.004390f, -0.011037f, -0.000646f, - +0.005243f, -0.001362f, -0.002356f, -0.006143f, +0.002789f, +0.005941f, -0.004916f, -0.006518f, +0.001626f, -0.010205f, - -0.014408f, +0.001764f, -0.000756f, -0.002606f, -0.000502f, -0.001759f, +0.004525f, +0.002057f, +0.003954f, -0.000706f, - +0.007217f, -0.000014f, -0.001314f, +0.004278f, +0.002338f, -0.005075f, +0.002680f, +0.001805f, +0.000973f, +0.005818f, - -0.002296f, +0.000205f, +0.005795f, -0.002446f, +0.002181f, +0.004507f, -0.003043f, -0.000144f, -0.001185f, -0.001808f, - -0.005905f, +0.000547f, +0.001898f, +0.004381f, -0.002466f, +0.000341f, +0.002413f, -0.001133f, +0.004638f, -0.000460f, - -0.003330f, +0.000777f, -0.000677f, -0.001739f, +0.000257f, -0.001162f, +0.000286f, +0.000181f, +0.000660f, +0.002234f, - -0.001144f, +0.000865f, -0.000058f, +0.000253f, -0.000913f, -0.001037f, +0.000556f, -0.000122f, +0.000273f, -0.001346f, - -0.000761f, +0.000416f, -0.001147f, -0.000940f, -0.000833f, +0.000090f, -0.001087f, -0.000300f, -0.000153f, +0.000648f, - +0.000375f, +0.000261f, -0.000223f, +0.000504f, +0.000443f, +0.000035f - }, - { - +0.002413f, +0.018045f, +0.001427f, +0.015938f, -0.005440f, -0.002082f, +0.005203f, -0.004871f, +0.003859f, -0.002329f, - +0.002083f, +0.003483f, +0.000946f, +0.002815f, -0.011543f, -0.011734f, -0.001806f, -0.004532f, +0.022089f, +0.008097f, - +0.016899f, -0.008197f, -0.000795f, +0.004731f, +0.000228f, +0.008897f, -0.007639f, -0.003345f, -0.007769f, -0.001571f, - -0.000780f, -0.005269f, -0.006158f, +0.005104f, +0.002133f, -0.003522f, +0.001551f, +0.000641f, -0.003858f, +0.000459f, - -0.002764f, +0.001949f, -0.004838f, +0.004745f, -0.002714f, +0.000584f, +0.001135f, +0.002465f, +0.002170f, -0.003273f, - +0.004792f, +0.000733f, +0.000346f, -0.001448f, +0.003237f, +0.000926f, +0.000687f, +0.001093f, -0.000579f, -0.002880f, - -0.001348f, -0.001218f, +0.001684f, -0.000478f, -0.000064f, -0.001889f, -0.000527f, +0.000117f, -0.001185f, -0.000699f, - +0.000040f, +0.000182f, -0.000457f, -0.000012f, -0.000457f, +0.001008f, -0.000679f, +0.000014f, -0.000067f, -0.000336f, - -0.000672f, -0.000675f, -0.000483f, -0.000561f, +0.000591f, +0.000400f, -0.000005f, +0.000400f, -0.000358f, +0.001001f, - -0.000087f, +0.000086f, +0.000070f, +0.000385f, -0.000366f, -0.000135f - }, - { - -0.009116f, +0.326240f, +0.005703f, +0.006837f, -0.022479f, -0.000990f, +0.002488f, -0.000464f, +0.013064f, +0.005807f, - +0.004117f, +0.004726f, +0.000368f, +0.004259f, +0.005548f, +0.007740f, -0.007036f, +0.001550f, -0.000167f, -0.010780f, - +0.009040f, -0.002682f, +0.004038f, -0.000200f, +0.004596f, -0.003061f, +0.005467f, -0.009329f, +0.000794f, +0.000956f, - +0.006891f, +0.002089f, -0.003945f, +0.009113f, +0.002120f, +0.005660f, -0.006168f, +0.001519f, +0.005201f, -0.006124f, - +0.001940f, +0.002149f, -0.002108f, +0.004153f, +0.003524f, +0.002417f, -0.004641f, +0.001510f, +0.001296f, +0.000347f, - -0.004363f, -0.000689f, +0.000055f, -0.006175f, -0.001169f, -0.002582f, -0.002139f, +0.000304f, +0.000195f, +0.003142f, - -0.001333f, +0.002295f, +0.000442f, -0.000759f, -0.001384f, -0.000683f, +0.000036f, +0.000264f, +0.000988f, -0.000130f, - +0.000158f, -0.000221f, +0.000307f, -0.000201f, +0.000376f, +0.000428f, -0.000587f, +0.000315f, -0.000449f, -0.000663f, - +0.000302f, -0.000488f, +0.000046f, -0.000772f, +0.000376f, -0.000720f, -0.000109f, -0.000018f, -0.000399f, +0.000024f, - +0.000753f, -0.000071f, -0.000048f, +0.000012f, -0.000056f, +0.000270f - }, - { - -0.000452f, -0.060967f, +0.013349f, -0.001775f, -0.002517f, -0.002187f, -0.002424f, -0.000244f, +0.002783f, -0.001303f, - +0.005036f, -0.004672f, -0.002606f, -0.016425f, -0.019856f, -0.018637f, -0.001934f, -0.004732f, -0.004991f, +0.000440f, - +0.007926f, -0.013845f, -0.008431f, +0.018263f, +0.004869f, +0.020316f, -0.013141f, +0.008266f, +0.002116f, +0.007102f, - +0.003847f, +0.006206f, -0.001463f, -0.005263f, -0.002439f, +0.004648f, -0.002897f, +0.002013f, +0.002496f, -0.004283f, - -0.002831f, -0.003225f, +0.002359f, +0.002888f, +0.002339f, +0.000191f, -0.002392f, +0.002773f, +0.000166f, -0.000165f, - +0.000928f, +0.002521f, -0.001714f, -0.000776f, -0.000519f, +0.001221f, -0.000513f, -0.001305f, -0.000662f, +0.005649f, - -0.001321f, +0.002748f, -0.000345f, +0.000878f, -0.000705f, -0.000380f, -0.002700f, +0.002553f, -0.000298f, +0.001100f, - -0.000969f, -0.000095f, +0.000271f, +0.000631f, +0.000254f, -0.000596f, +0.000339f, -0.000301f, +0.000530f, -0.000170f, - -0.001004f, +0.001159f, -0.000126f, +0.000171f, +0.000318f, -0.000826f, +0.000381f, +0.000338f, -0.000021f, +0.000433f, - -0.000150f, +0.000333f, -0.000669f, -0.000251f, +0.000634f, -0.000502f - }, - { - +0.039654f, +0.070903f, -0.008036f, -0.032754f, -0.028159f, +0.001114f, -0.004841f, +0.010379f, +0.002703f, +0.000558f, - -0.000183f, -0.001069f, +0.001827f, +0.021602f, -0.012199f, -0.003102f, -0.008348f, +0.000930f, -0.000906f, -0.008215f, - +0.007977f, +0.002923f, -0.003384f, -0.005150f, -0.001677f, -0.010652f, +0.003331f, -0.007575f, +0.002122f, +0.006100f, - +0.007032f, -0.002217f, +0.007577f, +0.002167f, +0.002932f, -0.008049f, -0.004290f, -0.002102f, -0.003524f, +0.004155f, - -0.000382f, +0.006135f, +0.000776f, -0.005217f, -0.006096f, +0.003771f, -0.000482f, -0.002925f, +0.002720f, -0.003277f, - -0.003085f, -0.002126f, +0.002994f, -0.000658f, -0.001082f, +0.000296f, -0.003059f, +0.001127f, -0.000585f, +0.001872f, - -0.001102f, -0.000177f, +0.000985f, -0.000870f, +0.002262f, +0.001779f, +0.000686f, -0.001427f, +0.000241f, -0.001097f, - +0.002216f, -0.000977f, +0.001222f, +0.000683f, +0.000806f, +0.000213f, +0.000174f, -0.000920f, +0.000259f, +0.001482f, - +0.000526f, +0.000214f, -0.000004f, -0.000374f, +0.000079f, -0.000019f, +0.000233f, -0.000911f, +0.000825f, +0.000687f, - -0.000023f, -0.000063f, -0.000030f, +0.000133f, -0.000500f, +0.000020f - }, - { - +0.001253f, -0.070687f, -0.006014f, +0.000428f, +0.000040f, -0.003613f, -0.000065f, +0.005369f, -0.003070f, +0.002699f, - -0.005098f, -0.005807f, -0.004179f, -0.007920f, +0.041137f, -0.017611f, -0.002911f, -0.004910f, -0.010480f, -0.016346f, - -0.014580f, -0.016043f, -0.000744f, -0.000978f, -0.007835f, +0.002143f, +0.001994f, +0.006197f, +0.011552f, +0.003741f, - +0.001683f, -0.000555f, +0.009304f, -0.001611f, +0.002321f, -0.000962f, -0.001676f, -0.005454f, +0.001926f, -0.003388f, - +0.002611f, -0.003050f, +0.001191f, +0.001397f, +0.001331f, -0.003511f, +0.002267f, +0.000031f, -0.000657f, +0.000753f, - -0.000692f, -0.001158f, -0.000325f, +0.000715f, -0.000967f, -0.001246f, -0.001350f, -0.002261f, -0.000960f, +0.001702f, - +0.001845f, -0.000721f, +0.000419f, +0.000752f, +0.000494f, +0.002880f, +0.000482f, +0.000476f, -0.003017f, -0.001094f, - -0.001167f, +0.001187f, -0.000619f, -0.000340f, -0.000249f, -0.000210f, +0.000396f, +0.000382f, -0.001055f, -0.000802f, - +0.000470f, -0.000409f, -0.000525f, +0.000231f, -0.000821f, -0.000009f, -0.000125f, -0.000197f, +0.000089f, +0.000016f, - -0.000472f, -0.000185f, +0.000266f, -0.000098f, +0.000525f, -0.000282f - } - }, - { - { - +0.017463f, -0.014348f, +0.031398f, -0.027708f, -0.010654f, -0.001278f, +0.000475f, +0.002164f, +0.004872f, +0.008846f, - -0.012291f, -0.003305f, -0.008646f, -0.000298f, -0.015591f, -0.004771f, +0.005796f, +0.000521f, -0.003363f, -0.004529f, - +0.001807f, +0.010275f, -0.002403f, -0.000143f, +0.002478f, -0.001261f, +0.001030f, +0.000421f, +0.009173f, -0.000352f, - -0.000092f, -0.005292f, +0.003582f, -0.000418f, +0.000962f, +0.005065f, -0.004301f, +0.005664f, -0.002135f, -0.005344f, - +0.000491f, -0.000304f, -0.001978f, +0.001615f, +0.001271f, -0.002321f, +0.000999f, -0.000754f, +0.000405f, +0.003900f, - +0.001030f, -0.002895f, -0.001178f, +0.000125f, -0.002637f, -0.002584f, -0.002723f, -0.001011f, +0.002339f, +0.000517f, - +0.000765f, -0.001328f, -0.000685f, +0.001117f, +0.001925f, -0.000818f, -0.001103f, +0.000561f, -0.001852f, +0.000118f, - -0.000086f, +0.000177f, +0.000609f, +0.001132f, -0.000404f, +0.000225f, +0.000507f, -0.000161f, -0.000557f, +0.000400f, - +0.001018f, -0.000494f, +0.000109f, +0.000187f, -0.000026f, +0.000023f, +0.000292f, +0.000191f, +0.000394f, +0.000151f, - +0.000194f, +0.000270f, -0.000150f, -0.000258f, -0.000355f, +0.000040f - }, - { - -0.003853f, +0.048255f, -0.002837f, -0.004921f, +0.012314f, -0.000273f, +0.001806f, +0.003209f, -0.000497f, -0.011847f, - +0.008428f, -0.000946f, -0.004467f, -0.003110f, -0.005643f, -0.003510f, -0.014269f, +0.005561f, -0.011643f, +0.011656f, - -0.006749f, -0.001784f, -0.000513f, +0.004253f, -0.010845f, +0.001098f, -0.001487f, +0.011574f, +0.000334f, -0.000082f, - -0.000998f, +0.003582f, -0.000774f, +0.003742f, -0.005732f, +0.001612f, +0.006570f, -0.002181f, -0.001911f, +0.003444f, - -0.000256f, +0.001784f, +0.001329f, +0.002349f, -0.004260f, -0.005394f, +0.002556f, -0.003488f, +0.001154f, -0.001244f, - +0.001277f, +0.002340f, +0.004679f, -0.001060f, -0.001288f, -0.001017f, -0.000485f, +0.000604f, +0.000578f, -0.000531f, - +0.000198f, -0.001701f, +0.002516f, -0.000759f, -0.000009f, +0.000450f, +0.000492f, -0.000350f, -0.000856f, +0.000752f, - -0.002351f, -0.001525f, +0.000077f, +0.000096f, -0.001007f, +0.000371f, -0.001215f, -0.000051f, +0.000287f, -0.000542f, - -0.000654f, +0.000057f, +0.000439f, -0.000651f, +0.000447f, +0.000293f, -0.000337f, -0.000863f, +0.000026f, +0.000031f, - +0.000161f, -0.000011f, -0.000224f, +0.000863f, -0.000077f, -0.000129f - }, - { - -0.002840f, +0.059850f, -0.035887f, -0.025705f, +0.041715f, +0.005360f, +0.004650f, +0.003043f, +0.000578f, -0.004123f, - +0.005923f, -0.005221f, +0.007274f, -0.010547f, -0.006204f, +0.015987f, -0.004570f, +0.008025f, -0.009222f, -0.001023f, - +0.004403f, +0.000027f, -0.003263f, -0.000097f, -0.002667f, +0.001261f, +0.000558f, -0.006090f, -0.002444f, +0.002178f, - +0.000122f, -0.005417f, +0.004575f, -0.004353f, -0.000888f, -0.002710f, +0.003216f, -0.002291f, +0.000330f, +0.003467f, - +0.004010f, +0.002210f, -0.000923f, +0.003000f, +0.002532f, +0.003381f, +0.003052f, +0.001648f, +0.000232f, -0.001145f, - +0.000929f, -0.000752f, -0.000265f, +0.002641f, -0.000757f, -0.000728f, -0.002305f, -0.000057f, -0.001473f, +0.000249f, - +0.000554f, +0.002978f, -0.000031f, +0.002884f, -0.000449f, -0.003180f, +0.000309f, +0.000920f, -0.002415f, +0.001037f, - -0.000022f, +0.001402f, +0.000226f, +0.000144f, +0.000095f, +0.000814f, -0.000697f, +0.000870f, +0.000494f, -0.000046f, - -0.000300f, -0.000185f, -0.000312f, -0.000439f, -0.000567f, +0.000489f, -0.000229f, +0.000208f, -0.000237f, -0.000277f, - +0.000451f, -0.000237f, +0.000381f, +0.000069f, -0.000203f, -0.000455f - }, - { - -0.040958f, +0.033836f, +0.021062f, +0.021487f, -0.012166f, -0.001387f, +0.000993f, +0.001211f, +0.005902f, +0.001488f, - -0.000796f, -0.011555f, +0.008031f, +0.010951f, +0.000678f, +0.001642f, -0.001627f, -0.011619f, +0.002748f, -0.000233f, - +0.000219f, -0.002395f, +0.005517f, +0.000194f, -0.004701f, +0.001755f, -0.000298f, -0.006736f, +0.002349f, -0.004042f, - +0.010350f, -0.000368f, +0.000022f, +0.001981f, +0.001612f, +0.006391f, +0.005816f, -0.002091f, +0.002666f, +0.001737f, - -0.002634f, -0.001954f, -0.004095f, -0.001489f, +0.001281f, +0.002835f, -0.002716f, -0.000933f, +0.003003f, -0.000359f, - +0.000583f, -0.003482f, -0.000056f, +0.001821f, +0.000790f, +0.000929f, -0.000468f, +0.000138f, -0.001737f, +0.000504f, - -0.001589f, +0.000645f, -0.001173f, +0.001717f, +0.000260f, +0.001410f, -0.000236f, +0.000378f, +0.000297f, +0.000617f, - +0.000163f, +0.000459f, +0.000038f, +0.000966f, -0.000404f, +0.000512f, -0.000664f, -0.000887f, +0.000526f, +0.000451f, - +0.000206f, +0.000371f, +0.000114f, -0.000400f, -0.000279f, -0.000013f, -0.000310f, -0.000551f, -0.000415f, +0.000450f, - -0.000247f, -0.000128f, -0.000774f, +0.000094f, -0.000169f, -0.000290f - }, - { - +0.000167f, -0.061168f, +0.001673f, +0.000618f, +0.001071f, -0.001166f, +0.000272f, -0.002756f, +0.000378f, -0.005015f, - +0.003521f, +0.005345f, -0.010744f, +0.007784f, +0.000008f, +0.002272f, -0.020650f, -0.001761f, -0.019407f, +0.001713f, - -0.017919f, -0.010097f, -0.002323f, +0.009181f, -0.008687f, +0.015213f, -0.007991f, +0.006158f, -0.008486f, +0.000656f, - -0.007546f, -0.015606f, -0.003640f, -0.003512f, -0.004783f, +0.000000f, -0.007608f, -0.002138f, +0.001006f, -0.000707f, - -0.001213f, +0.002359f, -0.000681f, -0.000310f, -0.003892f, -0.002645f, +0.001075f, -0.001537f, -0.000871f, -0.000156f, - +0.001901f, +0.000022f, -0.001123f, -0.002141f, +0.000857f, -0.001808f, +0.001640f, +0.001178f, -0.001610f, -0.001081f, - +0.000605f, -0.001315f, -0.000248f, -0.000752f, +0.002382f, -0.000925f, +0.000108f, -0.001646f, -0.001692f, +0.000605f, - -0.000168f, +0.001752f, -0.000626f, +0.000580f, -0.000289f, +0.000022f, -0.000437f, -0.000240f, +0.000536f, +0.000686f, - -0.000465f, -0.000112f, -0.000610f, +0.000542f, +0.000252f, -0.000399f, +0.000463f, -0.000138f, -0.000518f, +0.000336f, - +0.000532f, +0.001137f, -0.000187f, +0.000402f, +0.000315f, +0.000783f - }, - { - -0.045799f, -0.057158f, -0.028560f, +0.061583f, +0.007686f, -0.004667f, -0.004534f, -0.013909f, -0.002267f, -0.002862f, - +0.005960f, -0.003282f, -0.007512f, -0.006755f, -0.005077f, +0.006513f, +0.004843f, +0.002888f, -0.001513f, -0.000629f, - +0.010203f, -0.001509f, +0.002210f, -0.003048f, -0.004943f, -0.001925f, +0.001874f, -0.003374f, -0.001457f, +0.003542f, - +0.006378f, +0.000260f, -0.001011f, -0.004127f, +0.002230f, +0.002920f, -0.003300f, -0.001122f, +0.002647f, -0.001549f, - -0.004224f, -0.000193f, +0.001902f, +0.000154f, +0.001120f, -0.002215f, +0.001561f, +0.003583f, +0.002879f, +0.000513f, - -0.003081f, -0.001010f, -0.003101f, +0.001058f, +0.001703f, -0.000735f, -0.000380f, +0.000310f, -0.000450f, +0.000991f, - -0.000679f, -0.001245f, +0.000504f, +0.001423f, +0.000858f, -0.000551f, +0.000011f, +0.000541f, +0.001034f, +0.000225f, - +0.000679f, -0.000649f, -0.001046f, +0.000841f, -0.000726f, +0.000418f, +0.000609f, +0.000465f, -0.000146f, -0.000508f, - +0.000164f, -0.000895f, -0.000200f, +0.000711f, +0.000180f, -0.000021f, +0.000249f, +0.000013f, -0.000092f, +0.000586f, - -0.000357f, -0.000088f, -0.000179f, +0.000155f, +0.000400f, +0.000057f - }, - { - +0.000621f, +0.020566f, -0.000072f, -0.002823f, -0.001742f, -0.000881f, +0.000409f, +0.000379f, -0.003191f, +0.000395f, - -0.004092f, -0.002343f, +0.000806f, -0.006528f, +0.004890f, -0.004801f, -0.002503f, +0.003098f, -0.003233f, -0.014415f, - +0.005379f, +0.001917f, +0.017043f, +0.010686f, -0.017909f, -0.009064f, -0.012691f, +0.002391f, +0.003020f, +0.000034f, - +0.006396f, -0.005203f, +0.001575f, -0.003028f, -0.001765f, +0.009370f, -0.004695f, -0.002623f, -0.005675f, +0.000472f, - +0.001644f, -0.005086f, -0.001851f, +0.003337f, +0.000998f, +0.003572f, +0.000275f, -0.002039f, -0.000807f, -0.000804f, - +0.000325f, +0.000032f, +0.000633f, +0.001233f, +0.001049f, +0.000085f, +0.002270f, +0.000085f, +0.000924f, +0.001858f, - -0.000755f, +0.000154f, -0.000391f, +0.000910f, -0.001412f, -0.000232f, +0.000907f, +0.001661f, +0.000520f, -0.001106f, - -0.002110f, -0.000482f, +0.001037f, +0.000173f, +0.000346f, +0.000476f, +0.000080f, +0.000561f, -0.000604f, +0.001131f, - -0.000754f, -0.000670f, +0.000003f, +0.000247f, +0.000162f, +0.000242f, +0.000273f, +0.000125f, +0.000070f, -0.000558f, - -0.000010f, +0.000179f, +0.000375f, +0.000127f, -0.000466f, -0.000146f - }, - { - +0.041240f, +0.027615f, +0.024358f, -0.062134f, -0.002298f, -0.004761f, -0.000396f, -0.001417f, -0.000907f, -0.000763f, - -0.003676f, -0.002750f, +0.009527f, -0.002112f, -0.007952f, +0.004323f, -0.006016f, -0.001395f, -0.003573f, +0.001943f, - -0.001245f, +0.004272f, -0.009385f, +0.001297f, -0.012401f, +0.003869f, +0.001785f, -0.004104f, +0.003683f, +0.000403f, - -0.002752f, -0.004027f, -0.000430f, -0.002056f, -0.000899f, -0.003290f, -0.004927f, +0.000428f, -0.005118f, -0.005710f, - -0.001816f, +0.002143f, +0.001187f, -0.004180f, +0.001098f, -0.003334f, +0.000813f, -0.008821f, +0.001550f, +0.001855f, - +0.000944f, -0.003084f, -0.002357f, -0.000029f, +0.001781f, +0.001791f, +0.000505f, -0.003229f, -0.000525f, -0.000706f, - -0.001064f, +0.001147f, +0.001876f, +0.000449f, -0.000468f, -0.000570f, +0.000312f, -0.000185f, -0.000990f, +0.002499f, - +0.000498f, +0.000072f, +0.000599f, +0.000172f, -0.000317f, -0.001074f, +0.000630f, +0.001037f, -0.000306f, -0.000194f, - -0.000343f, -0.000080f, -0.000239f, +0.000045f, +0.000160f, -0.000043f, +0.001184f, +0.000243f, -0.000864f, +0.000019f, - -0.000369f, -0.000115f, +0.000220f, +0.000196f, -0.000005f, +0.000020f - }, - { - +0.000257f, +0.009417f, +0.004673f, +0.002240f, -0.001245f, +0.001061f, -0.002319f, +0.002360f, +0.001760f, -0.001871f, - -0.006082f, +0.008301f, -0.004013f, +0.010051f, -0.007468f, +0.005619f, -0.007909f, -0.014311f, -0.005265f, -0.007938f, - -0.003061f, +0.004854f, -0.018927f, -0.009827f, -0.002315f, +0.000098f, -0.008229f, -0.001224f, +0.000070f, -0.008544f, - -0.005309f, -0.000774f, -0.002382f, +0.002241f, -0.001999f, +0.000707f, +0.004077f, +0.005844f, -0.002291f, -0.002280f, - -0.000059f, +0.008412f, +0.002577f, -0.002639f, -0.000394f, +0.002643f, +0.002316f, -0.003309f, +0.000800f, +0.000373f, - +0.000763f, +0.000261f, +0.000076f, +0.001236f, +0.000476f, +0.001401f, -0.000669f, +0.001435f, +0.001443f, +0.001038f, - -0.000536f, -0.000258f, +0.000965f, -0.000350f, -0.001654f, -0.000635f, +0.000031f, -0.001009f, -0.001218f, -0.001248f, - +0.000661f, -0.001454f, +0.002177f, +0.001425f, +0.000744f, +0.000381f, -0.001346f, -0.000507f, +0.001028f, +0.000682f, - +0.000302f, -0.000138f, -0.000853f, -0.000037f, -0.000143f, -0.000082f, +0.000244f, +0.000180f, -0.000632f, +0.000706f, - +0.000065f, -0.000616f, -0.000349f, -0.000401f, +0.000688f, +0.000436f - }, - { - -0.020120f, -0.208618f, +0.031411f, -0.008990f, +0.005472f, +0.004261f, -0.048804f, +0.003627f, -0.007078f, +0.007890f, - -0.008028f, +0.003382f, -0.000302f, +0.001352f, -0.001126f, -0.003579f, -0.001472f, -0.006529f, +0.004267f, -0.010981f, - -0.007806f, -0.003103f, +0.000820f, -0.004259f, -0.001781f, +0.000327f, +0.008068f, -0.003908f, +0.005974f, -0.003728f, - +0.007804f, -0.003203f, +0.004746f, +0.004626f, +0.002816f, -0.000463f, +0.001817f, +0.000104f, +0.003062f, -0.000509f, - +0.000690f, +0.003534f, +0.004665f, -0.002234f, -0.000925f, +0.005850f, -0.002567f, +0.002016f, -0.002694f, -0.000378f, - -0.001602f, -0.002816f, +0.004316f, +0.004403f, -0.003950f, +0.000916f, +0.002690f, +0.002473f, +0.001150f, +0.000532f, - -0.002601f, -0.001529f, +0.002556f, -0.003535f, -0.000685f, -0.000301f, +0.000151f, -0.000757f, +0.000489f, +0.002036f, - +0.000472f, +0.000031f, +0.000347f, +0.000101f, +0.000154f, -0.001238f, +0.000459f, -0.000018f, +0.000004f, -0.000880f, - -0.001010f, -0.000548f, -0.000855f, -0.000147f, -0.000426f, -0.000392f, -0.000174f, -0.000339f, -0.000012f, +0.000743f, - +0.000332f, -0.000102f, +0.000012f, +0.000518f, +0.000324f, +0.000270f - }, - { - -0.001612f, -0.003285f, +0.027556f, -0.003266f, +0.005144f, +0.002600f, -0.001952f, -0.007837f, +0.006806f, -0.003918f, - +0.006674f, -0.004873f, +0.005878f, -0.003846f, -0.002953f, -0.010825f, -0.017646f, +0.002518f, +0.012358f, +0.019002f, - +0.008451f, -0.008766f, +0.004889f, +0.001095f, +0.009123f, -0.010388f, +0.007311f, -0.005484f, -0.007209f, -0.007835f, - +0.000852f, -0.005246f, -0.003112f, +0.004604f, -0.001209f, +0.001807f, -0.002926f, +0.000557f, -0.003913f, +0.000178f, - -0.005606f, -0.000995f, +0.001761f, +0.000636f, -0.000375f, -0.000295f, -0.000034f, +0.001312f, +0.002568f, -0.001547f, - +0.004044f, +0.000657f, +0.000533f, -0.000238f, +0.001463f, -0.000843f, +0.002278f, +0.002034f, -0.001422f, -0.001780f, - -0.000027f, -0.001777f, +0.001592f, -0.002170f, +0.000284f, -0.001074f, -0.000833f, +0.000623f, -0.000762f, -0.000013f, - -0.000337f, -0.000790f, -0.000216f, +0.000236f, -0.000707f, -0.000124f, -0.000025f, -0.000274f, +0.000095f, +0.000191f, - -0.001514f, -0.000460f, -0.000248f, -0.000527f, +0.000362f, +0.000291f, -0.000034f, -0.000238f, -0.000211f, +0.000315f, - +0.000317f, +0.000612f, -0.000192f, -0.000047f, +0.000366f, -0.000197f - }, - { - +0.063720f, +0.238149f, -0.018788f, +0.005597f, -0.018019f, +0.001959f, -0.004484f, +0.001809f, +0.010440f, +0.014861f, - +0.002516f, +0.000768f, -0.001775f, -0.005302f, +0.019007f, +0.001041f, +0.003950f, -0.001188f, -0.004517f, +0.008349f, - -0.007328f, +0.001123f, +0.002283f, +0.005848f, +0.002017f, +0.001669f, -0.001630f, -0.006280f, +0.000222f, +0.001657f, - +0.007003f, +0.001169f, -0.001546f, +0.001423f, +0.009426f, +0.005418f, -0.007560f, -0.000438f, -0.000944f, -0.000817f, - -0.000169f, +0.003871f, +0.001817f, +0.004534f, +0.005548f, -0.002372f, +0.000234f, -0.001646f, +0.002300f, -0.003097f, - -0.002397f, -0.004088f, +0.003402f, -0.005603f, -0.001228f, -0.003193f, +0.000635f, -0.001382f, -0.000594f, +0.001431f, - +0.002492f, +0.001330f, +0.001063f, -0.000337f, -0.000402f, -0.002409f, +0.000354f, -0.000122f, +0.001089f, +0.000696f, - -0.000505f, +0.000241f, +0.000501f, -0.000903f, +0.000151f, +0.001225f, -0.000332f, -0.000342f, -0.000140f, -0.001049f, - -0.000008f, +0.000217f, -0.000703f, -0.000012f, +0.000330f, -0.000738f, +0.000200f, -0.000039f, -0.000010f, +0.000020f, - +0.000205f, +0.000762f, -0.000003f, -0.000222f, -0.000207f, +0.000663f - }, - { - +0.001268f, -0.047203f, +0.003464f, -0.016132f, +0.002308f, -0.000611f, -0.000060f, -0.009053f, +0.004349f, +0.003778f, - -0.002622f, -0.002204f, +0.002764f, -0.021384f, -0.018032f, -0.002161f, -0.017672f, -0.004951f, +0.000422f, -0.002185f, - -0.005795f, -0.005708f, -0.001374f, +0.017889f, +0.012423f, +0.003497f, -0.001034f, +0.008586f, +0.004050f, +0.005790f, - +0.011557f, -0.000320f, +0.003427f, -0.004478f, -0.001720f, -0.001622f, +0.000832f, +0.001525f, +0.002903f, -0.004458f, - +0.000451f, -0.004445f, +0.001780f, +0.006355f, +0.001016f, +0.001577f, -0.002523f, -0.000945f, +0.004310f, -0.000135f, - +0.002608f, +0.000557f, +0.000935f, -0.003422f, +0.000113f, +0.001100f, +0.001553f, -0.001325f, +0.000283f, +0.002913f, - -0.000027f, +0.002072f, +0.002389f, -0.002057f, -0.000511f, -0.000271f, -0.001541f, +0.001171f, +0.000482f, -0.000851f, - +0.000819f, -0.000962f, +0.000871f, +0.000772f, +0.000950f, -0.000065f, -0.000455f, +0.001047f, -0.000442f, -0.000253f, - -0.000395f, +0.000456f, -0.000464f, -0.000691f, +0.000975f, -0.000448f, +0.000375f, -0.000081f, +0.000034f, +0.000314f, - +0.000046f, +0.000046f, -0.000058f, -0.000221f, -0.000425f, +0.000059f - }, - { - -0.011664f, +0.129830f, +0.007215f, -0.040555f, -0.009190f, -0.002613f, -0.012946f, +0.008649f, +0.003096f, +0.009472f, - -0.010302f, -0.000086f, +0.005451f, -0.008212f, +0.033517f, -0.005592f, -0.010998f, -0.004304f, -0.006168f, +0.003109f, - +0.004992f, -0.001134f, +0.003070f, -0.003771f, -0.006775f, -0.001425f, -0.005381f, -0.002753f, +0.000258f, +0.005606f, - -0.000306f, +0.003506f, +0.007470f, +0.003612f, +0.001003f, -0.001202f, -0.004928f, -0.006875f, -0.003972f, +0.005690f, - -0.004248f, +0.006816f, +0.003139f, -0.003475f, -0.004341f, +0.000737f, -0.003226f, -0.000256f, +0.000214f, -0.001453f, - -0.004239f, -0.000973f, +0.002278f, -0.001931f, -0.001134f, +0.000156f, -0.001259f, -0.000677f, -0.000355f, +0.000104f, - +0.000811f, -0.001697f, +0.001023f, -0.000084f, +0.001604f, +0.000462f, +0.000655f, -0.000445f, +0.000322f, -0.000737f, - +0.000649f, +0.000210f, +0.001797f, -0.000415f, +0.000694f, -0.000261f, +0.000401f, -0.001260f, +0.000487f, +0.000889f, - +0.000946f, -0.000226f, -0.000441f, +0.000083f, -0.000530f, -0.000254f, -0.000185f, +0.000462f, +0.000677f, +0.000385f, - -0.000160f, -0.000741f, +0.000380f, -0.000270f, -0.000487f, +0.000071f - }, - { - -0.001245f, -0.072908f, -0.000174f, +0.005583f, -0.005574f, -0.002496f, +0.004181f, -0.002415f, +0.004693f, -0.001959f, - -0.008459f, -0.003697f, -0.006386f, +0.025992f, -0.023277f, -0.006657f, +0.001192f, -0.003997f, -0.013250f, -0.007266f, - -0.012969f, -0.021900f, +0.001687f, +0.002234f, -0.008404f, +0.000454f, +0.000624f, +0.010887f, +0.008460f, -0.004169f, - +0.004324f, +0.001242f, +0.005741f, +0.001038f, +0.002984f, -0.001087f, -0.006339f, -0.001078f, +0.001712f, -0.001387f, - -0.004876f, +0.004291f, +0.001293f, +0.001076f, -0.003074f, -0.002475f, +0.004013f, -0.001672f, +0.001180f, +0.000249f, - -0.000071f, +0.000278f, -0.001683f, +0.001798f, -0.002012f, -0.002051f, -0.000229f, -0.002528f, -0.000675f, +0.001333f, - +0.003147f, +0.000659f, +0.001023f, -0.000317f, +0.000659f, +0.002698f, +0.000407f, -0.000630f, -0.001239f, -0.000613f, - -0.000895f, -0.000549f, +0.000553f, -0.000021f, +0.000778f, -0.000483f, +0.000299f, +0.000293f, -0.000322f, -0.000843f, - +0.000120f, -0.000358f, -0.001123f, -0.000031f, -0.000241f, -0.000330f, +0.000025f, -0.000037f, -0.000221f, -0.000491f, - -0.000496f, +0.000052f, +0.000559f, +0.000017f, +0.000254f, +0.000294f - } - }, - { - { - -0.021341f, -0.167605f, -0.093733f, -0.006160f, +0.010182f, -0.000377f, -0.001228f, +0.001212f, -0.000514f, +0.010322f, - -0.005346f, +0.005615f, -0.010013f, -0.005850f, -0.017554f, -0.001990f, +0.015548f, +0.006509f, +0.008591f, +0.013261f, - +0.003940f, +0.006227f, -0.001555f, -0.001290f, +0.002256f, +0.003233f, -0.000828f, -0.005371f, +0.000918f, -0.005402f, - -0.000150f, -0.000760f, +0.010795f, +0.001257f, -0.002630f, +0.001479f, -0.008370f, +0.005163f, -0.004678f, -0.009677f, - -0.005498f, +0.001305f, -0.001688f, -0.003427f, -0.000094f, -0.003071f, -0.001856f, -0.004669f, -0.001686f, +0.000776f, - -0.001474f, -0.003366f, +0.002689f, +0.003590f, -0.000901f, +0.000491f, -0.000221f, +0.000362f, +0.001387f, -0.000293f, - +0.002543f, +0.000197f, -0.000197f, +0.000821f, +0.002689f, +0.000590f, -0.000735f, -0.000168f, -0.000771f, +0.001296f, - -0.000216f, -0.001275f, -0.001189f, +0.001404f, +0.000749f, -0.000101f, +0.000236f, +0.000381f, -0.000274f, +0.000656f, - +0.000746f, -0.000587f, -0.000436f, -0.000048f, -0.000423f, -0.000430f, +0.000362f, -0.000020f, +0.000695f, +0.000470f, - +0.000097f, +0.000059f, +0.000093f, -0.000078f, -0.000093f, +0.000505f - }, - { - +0.002374f, +0.032533f, -0.022488f, -0.022874f, +0.003515f, +0.000047f, +0.002560f, +0.000441f, -0.006523f, -0.011660f, - +0.010051f, -0.001266f, -0.005430f, -0.001195f, +0.001493f, +0.012001f, -0.002702f, +0.005405f, -0.008326f, +0.005181f, - -0.004809f, -0.009423f, -0.004894f, +0.002678f, -0.015420f, +0.001457f, -0.004600f, +0.012311f, +0.002596f, -0.002228f, - +0.002477f, +0.009478f, +0.000923f, +0.007382f, -0.002379f, +0.005005f, +0.006305f, -0.005225f, -0.006450f, +0.002698f, - +0.000956f, +0.001932f, +0.001443f, +0.000171f, -0.002736f, -0.000037f, +0.004345f, -0.003017f, +0.001043f, -0.002022f, - -0.000025f, -0.001264f, +0.002834f, -0.000945f, +0.000043f, -0.001337f, -0.001928f, +0.000039f, +0.001038f, +0.001004f, - +0.001619f, -0.001626f, +0.001170f, -0.002105f, -0.000339f, -0.002132f, -0.003412f, -0.001243f, -0.000013f, +0.001027f, - -0.001309f, -0.000370f, +0.000177f, +0.000179f, -0.001283f, +0.000827f, +0.000421f, +0.000612f, -0.000728f, -0.000835f, - -0.000090f, -0.000257f, -0.000021f, -0.000911f, -0.000413f, -0.000260f, -0.000716f, -0.000628f, -0.000091f, +0.000125f, - +0.000161f, +0.000032f, -0.000289f, +0.000732f, +0.000085f, +0.000072f - }, - { - +0.007516f, +0.127961f, -0.005230f, -0.085433f, +0.004760f, +0.005807f, +0.001625f, +0.003764f, +0.009448f, -0.006803f, - -0.022857f, -0.022184f, +0.005022f, -0.019874f, -0.007699f, +0.011032f, -0.015377f, +0.001528f, -0.005629f, +0.001250f, - -0.005651f, -0.008087f, -0.004522f, -0.000529f, +0.009832f, -0.002260f, -0.005267f, -0.006001f, -0.005864f, -0.002332f, - +0.001086f, -0.009327f, +0.003078f, +0.001535f, +0.001928f, -0.004089f, +0.001994f, -0.000878f, +0.000506f, +0.004390f, - +0.001938f, -0.005856f, -0.000103f, +0.005356f, -0.000027f, -0.001907f, -0.000132f, +0.000924f, +0.000323f, +0.000151f, - +0.003663f, +0.001105f, -0.001771f, -0.001757f, -0.002819f, +0.001375f, -0.001521f, -0.001990f, -0.003815f, -0.001253f, - -0.000077f, +0.002923f, +0.000954f, +0.002244f, -0.000526f, -0.002324f, +0.000369f, +0.001832f, -0.001613f, +0.000815f, - -0.000275f, -0.000619f, -0.001509f, -0.000526f, +0.000218f, +0.000725f, -0.001713f, -0.000249f, +0.000617f, +0.000260f, - +0.000245f, +0.000421f, +0.000147f, -0.000037f, -0.000656f, +0.000295f, -0.000157f, +0.000412f, -0.000180f, -0.000431f, - +0.000231f, -0.000771f, -0.000056f, -0.000244f, -0.000220f, -0.000249f - }, - { - +0.056569f, +0.163443f, -0.004858f, +0.028302f, +0.014477f, -0.003763f, +0.001683f, -0.004161f, -0.001116f, +0.000072f, - +0.004004f, -0.011082f, -0.008823f, +0.001013f, +0.004319f, +0.004678f, +0.006051f, -0.008476f, -0.001149f, -0.002309f, - -0.001996f, +0.001355f, +0.008639f, +0.002309f, -0.004043f, +0.003959f, -0.003878f, -0.007483f, +0.005036f, -0.003786f, - +0.003808f, -0.006051f, -0.005333f, +0.000804f, -0.000186f, +0.001886f, +0.002846f, -0.002426f, +0.000780f, -0.001066f, - -0.001255f, -0.001029f, -0.002919f, +0.000708f, -0.000316f, +0.000658f, -0.000154f, +0.002937f, +0.001471f, -0.002207f, - +0.000787f, -0.000679f, +0.000822f, +0.002758f, +0.000022f, -0.000791f, -0.000341f, +0.001438f, +0.000134f, +0.001697f, - -0.001204f, +0.001166f, -0.000003f, +0.000062f, -0.000776f, +0.001937f, +0.000195f, -0.000436f, -0.001191f, -0.000288f, - -0.000079f, +0.000263f, -0.000746f, +0.000770f, +0.000044f, +0.000202f, -0.000760f, +0.000077f, +0.000952f, -0.000149f, - -0.000790f, -0.000144f, +0.000183f, -0.000311f, +0.000004f, +0.000069f, -0.000155f, -0.000150f, -0.000411f, +0.000137f, - -0.000262f, +0.000050f, -0.000624f, +0.000446f, +0.000344f, -0.000054f - }, - { - -0.001410f, -0.071574f, -0.007657f, -0.003193f, -0.000929f, -0.002285f, +0.000146f, -0.002944f, +0.002249f, +0.001242f, - +0.007492f, +0.009537f, -0.000242f, +0.005519f, -0.004898f, +0.019431f, -0.016537f, -0.041271f, -0.025418f, +0.012488f, - -0.019673f, -0.002578f, +0.000141f, +0.008768f, -0.000480f, +0.011791f, -0.006930f, +0.010823f, -0.003842f, +0.005103f, - -0.002395f, -0.016393f, -0.007533f, -0.005814f, -0.006183f, +0.003680f, -0.002061f, +0.000024f, +0.005641f, +0.003583f, - +0.000194f, -0.000999f, -0.002053f, +0.002022f, -0.000243f, +0.000438f, +0.000983f, -0.005029f, -0.003126f, +0.000836f, - +0.003064f, +0.000910f, -0.001022f, +0.000186f, +0.001839f, -0.001862f, +0.000747f, -0.000784f, -0.001812f, -0.001108f, - +0.001721f, +0.000441f, +0.000334f, +0.000055f, +0.001545f, -0.000743f, +0.001131f, -0.000304f, -0.000738f, -0.000018f, - -0.000726f, +0.000382f, -0.001098f, -0.000171f, -0.001035f, -0.000337f, -0.000167f, -0.000168f, +0.000864f, +0.000343f, - -0.000938f, +0.000587f, -0.000455f, +0.000142f, +0.000282f, -0.000701f, +0.000968f, +0.000425f, -0.000160f, +0.000371f, - -0.000243f, +0.000803f, -0.000333f, +0.000156f, -0.000132f, -0.000091f - }, - { - +0.061643f, +0.147112f, +0.015885f, +0.036251f, -0.017875f, -0.001309f, +0.000446f, -0.007270f, -0.009377f, -0.022079f, - -0.006866f, -0.006477f, -0.005565f, +0.000247f, -0.001129f, +0.010759f, +0.006221f, +0.000749f, -0.001789f, -0.005672f, - +0.001859f, -0.000591f, +0.001713f, -0.006776f, -0.005271f, -0.004637f, -0.001104f, +0.000079f, -0.001152f, -0.002215f, - +0.000709f, +0.001716f, +0.006871f, +0.000487f, +0.000575f, +0.001461f, -0.001753f, -0.000252f, +0.005613f, +0.002619f, - -0.001549f, +0.001492f, +0.001809f, -0.001797f, -0.000254f, -0.000768f, +0.001739f, +0.001877f, +0.002757f, +0.000109f, - -0.001543f, -0.001693f, -0.003927f, -0.002824f, +0.002881f, -0.000191f, -0.000091f, -0.001206f, -0.001934f, +0.000904f, - +0.000531f, -0.000891f, +0.002076f, +0.003415f, +0.000172f, -0.001451f, +0.000070f, +0.000431f, +0.002351f, +0.000849f, - +0.000867f, +0.001292f, +0.000503f, -0.000175f, -0.000032f, +0.000372f, -0.000561f, -0.000026f, +0.000260f, +0.000623f, - +0.000825f, -0.000554f, -0.000472f, -0.000112f, +0.000081f, -0.000226f, -0.000373f, -0.000532f, -0.000497f, -0.000129f, - -0.000202f, -0.000077f, +0.000042f, +0.000421f, +0.000167f, -0.000090f - }, - { - -0.000908f, +0.016560f, +0.004510f, +0.002369f, -0.000033f, -0.002290f, -0.000289f, +0.002754f, +0.000907f, +0.000289f, - -0.006526f, -0.001224f, +0.003548f, -0.009642f, -0.002522f, -0.004577f, +0.013625f, +0.006259f, +0.005015f, -0.011289f, - -0.002876f, -0.010219f, -0.012563f, +0.006048f, -0.005254f, +0.007514f, -0.010723f, -0.003443f, +0.002440f, +0.003462f, - +0.002690f, -0.012775f, +0.001525f, -0.003556f, -0.001657f, +0.006586f, -0.009452f, -0.002538f, -0.004375f, -0.000494f, - +0.000285f, -0.001092f, +0.001619f, +0.002609f, -0.003300f, +0.000512f, -0.000214f, -0.001267f, -0.001603f, +0.000498f, - +0.002789f, +0.001389f, -0.000275f, +0.001063f, +0.003071f, +0.000171f, +0.003296f, +0.000282f, -0.001767f, -0.000447f, - -0.000478f, +0.001430f, -0.000911f, +0.000035f, -0.001487f, +0.000544f, +0.000297f, +0.000177f, +0.000779f, +0.000354f, - -0.000906f, -0.000547f, +0.000994f, +0.001305f, +0.000396f, +0.000065f, -0.000533f, +0.000362f, -0.000057f, +0.001748f, - -0.001348f, -0.001023f, +0.000709f, +0.000854f, +0.000323f, +0.000384f, +0.000567f, +0.000035f, +0.000179f, +0.000255f, - -0.000151f, -0.000415f, -0.000117f, +0.000163f, -0.000385f, -0.000232f - }, - { - -0.036264f, -0.185852f, -0.058484f, -0.040240f, +0.013811f, -0.001399f, +0.011861f, +0.011682f, +0.010153f, +0.004602f, - -0.001890f, -0.006307f, +0.005150f, -0.008545f, -0.017932f, -0.000040f, -0.010784f, +0.002316f, -0.012405f, -0.002578f, - -0.006737f, -0.005025f, -0.013135f, -0.001865f, -0.014548f, +0.002116f, -0.000257f, -0.007202f, +0.000266f, +0.000981f, - +0.005700f, -0.000797f, -0.004887f, -0.009047f, -0.005846f, -0.008627f, -0.011799f, -0.000574f, -0.004766f, -0.005330f, - -0.000539f, -0.000293f, +0.001750f, -0.000059f, +0.002959f, +0.000003f, +0.003448f, -0.005911f, +0.003664f, +0.001440f, - -0.000951f, -0.001759f, -0.002723f, -0.001622f, +0.000083f, +0.001918f, +0.001721f, -0.000751f, +0.002760f, +0.001309f, - +0.000129f, +0.001022f, +0.000999f, +0.001025f, +0.000694f, +0.001037f, +0.000627f, +0.000845f, +0.000722f, +0.002085f, - -0.000393f, +0.000449f, -0.000047f, -0.000344f, +0.000983f, +0.000012f, +0.000075f, +0.000417f, -0.000019f, +0.000136f, - -0.000146f, -0.000378f, -0.000854f, -0.000142f, +0.000701f, -0.000117f, -0.000054f, +0.000139f, -0.000249f, +0.000385f, - +0.000163f, -0.000080f, -0.000063f, +0.000317f, -0.000035f, -0.000358f - }, - { - -0.001348f, -0.005745f, -0.002407f, +0.000162f, -0.003119f, +0.002406f, -0.001081f, -0.002166f, -0.003395f, +0.003118f, - +0.002175f, +0.014127f, -0.005765f, -0.002779f, -0.013165f, +0.006426f, +0.022208f, +0.007585f, +0.004912f, +0.004754f, - -0.000177f, +0.007099f, -0.009230f, +0.001403f, +0.003741f, +0.023916f, +0.009174f, -0.002936f, -0.006770f, -0.005155f, - -0.007093f, -0.004034f, -0.000830f, -0.006643f, -0.004263f, -0.001182f, -0.003633f, -0.000921f, -0.002099f, -0.001604f, - -0.002151f, +0.006450f, -0.001478f, -0.002362f, -0.000005f, +0.002022f, +0.002714f, -0.000273f, +0.002074f, +0.002436f, - +0.003179f, +0.000003f, +0.000707f, +0.002431f, -0.001119f, +0.000306f, -0.000976f, -0.000833f, -0.001183f, +0.000894f, - +0.000414f, -0.000179f, +0.001013f, +0.001575f, -0.000158f, -0.000471f, -0.000144f, +0.000303f, +0.000164f, -0.000941f, - +0.001729f, +0.000055f, +0.002082f, +0.000863f, +0.000066f, +0.000262f, -0.000421f, -0.000052f, +0.001008f, +0.000329f, - +0.000484f, -0.000357f, -0.000637f, +0.000167f, -0.000319f, -0.000176f, +0.000352f, +0.000481f, -0.000898f, +0.000243f, - -0.000207f, -0.000521f, -0.000646f, -0.000409f, +0.000520f, +0.000221f - }, - { - +0.017350f, -0.249873f, -0.024989f, +0.018001f, +0.021131f, -0.016266f, -0.048101f, +0.009305f, +0.010654f, +0.012515f, - -0.010847f, +0.012492f, +0.013222f, +0.003287f, -0.002853f, -0.001242f, -0.006953f, -0.003905f, +0.007367f, -0.003372f, - -0.006372f, -0.003362f, +0.003453f, -0.007613f, -0.012476f, -0.000605f, +0.007863f, -0.004163f, +0.006357f, -0.005117f, - +0.009186f, -0.002696f, +0.000917f, +0.002786f, +0.006340f, +0.007898f, +0.009303f, +0.003289f, +0.001506f, -0.006191f, - -0.000181f, +0.006053f, +0.002827f, -0.001185f, +0.003149f, +0.005314f, -0.003817f, -0.000645f, -0.004057f, +0.003164f, - +0.004023f, -0.004302f, +0.001006f, +0.002247f, -0.004700f, -0.000327f, +0.000582f, +0.001545f, +0.000100f, +0.001452f, - -0.002285f, -0.002879f, +0.002353f, -0.002625f, -0.002511f, -0.001917f, +0.001142f, -0.001353f, -0.000280f, +0.001697f, - +0.000226f, +0.000256f, +0.000627f, +0.000252f, +0.000788f, +0.000243f, +0.000357f, +0.000027f, +0.001043f, +0.000396f, - +0.000271f, -0.000382f, -0.000555f, +0.000662f, +0.000490f, +0.000235f, +0.000219f, -0.000460f, +0.000013f, +0.000327f, - -0.000154f, +0.000298f, +0.000185f, +0.000126f, +0.000282f, +0.000656f - }, - { - +0.000870f, -0.036645f, -0.019564f, -0.015485f, +0.011152f, -0.003920f, -0.010144f, -0.007884f, +0.005477f, -0.005584f, - +0.005551f, -0.002638f, -0.000961f, -0.003876f, +0.000539f, -0.009435f, -0.007234f, -0.000550f, -0.005680f, +0.010668f, - +0.004241f, -0.011471f, +0.008627f, -0.008224f, -0.000428f, -0.016339f, +0.002669f, -0.001969f, +0.002162f, -0.001589f, - +0.000310f, -0.001194f, -0.002937f, -0.002439f, -0.003082f, +0.004705f, -0.003372f, -0.000875f, -0.005539f, +0.001493f, - -0.000989f, +0.000571f, +0.002413f, -0.001447f, -0.000871f, -0.000664f, -0.001615f, -0.001935f, +0.000180f, -0.002409f, - +0.001245f, -0.000320f, +0.000043f, -0.000021f, -0.000157f, -0.002751f, +0.000505f, +0.000774f, -0.001393f, -0.000604f, - +0.001562f, -0.001864f, -0.000576f, -0.003573f, -0.001401f, -0.000250f, +0.000354f, +0.000976f, -0.000153f, +0.001059f, - +0.000819f, -0.000124f, +0.000114f, +0.000076f, -0.000788f, -0.000333f, +0.000489f, -0.000424f, -0.000840f, +0.000356f, - -0.000612f, +0.000116f, +0.000538f, -0.000043f, +0.000226f, -0.000103f, +0.000289f, -0.000162f, -0.000107f, +0.000072f, - -0.000011f, +0.000416f, -0.000039f, -0.000031f, +0.000149f, -0.000336f - }, - { - -0.083362f, +0.043637f, -0.018467f, -0.009161f, -0.022148f, +0.007931f, +0.003342f, +0.000910f, +0.000084f, +0.018042f, - +0.013733f, +0.001401f, +0.006145f, +0.003783f, +0.023774f, +0.002593f, +0.016299f, +0.006408f, -0.009364f, +0.005815f, - -0.008191f, +0.002199f, +0.001256f, +0.005603f, +0.003222f, +0.011233f, -0.003325f, -0.002041f, +0.000868f, -0.000578f, - +0.004259f, -0.005329f, +0.000187f, -0.000712f, +0.005353f, +0.005347f, -0.001930f, +0.002463f, -0.001720f, +0.003194f, - -0.001689f, +0.004198f, +0.008630f, +0.008300f, +0.002033f, -0.000943f, +0.004661f, -0.001181f, +0.002222f, -0.001587f, - -0.001485f, -0.002265f, +0.004487f, -0.003135f, +0.002036f, +0.000578f, -0.000121f, -0.001779f, +0.000894f, -0.000244f, - +0.003159f, +0.000578f, +0.000630f, +0.000035f, +0.001397f, -0.001053f, +0.001063f, -0.000029f, +0.000620f, +0.001584f, - +0.000220f, +0.000138f, +0.000544f, -0.000717f, -0.000390f, +0.000927f, +0.000119f, -0.000072f, +0.000229f, -0.000619f, - +0.000317f, +0.000197f, -0.000268f, +0.000498f, +0.000716f, -0.000326f, +0.000052f, -0.000226f, +0.000263f, +0.000286f, - +0.000036f, +0.000571f, +0.000116f, -0.000319f, -0.000510f, +0.000697f - }, - { - -0.001696f, -0.032545f, +0.006216f, -0.027445f, -0.003979f, -0.003500f, +0.005731f, -0.007024f, -0.004910f, -0.000346f, - -0.012483f, -0.006013f, +0.004401f, -0.008692f, -0.002306f, +0.009717f, -0.012764f, +0.003017f, +0.009414f, -0.008279f, - -0.006860f, +0.008722f, +0.011090f, +0.008388f, +0.008029f, +0.007261f, +0.008308f, +0.005507f, +0.004430f, -0.001995f, - +0.009520f, +0.001124f, +0.004129f, -0.003503f, -0.002170f, +0.000075f, -0.000125f, -0.002919f, +0.003396f, +0.002500f, - +0.001299f, -0.005651f, +0.000650f, +0.007256f, -0.001723f, -0.003547f, -0.003578f, -0.002854f, +0.003174f, +0.002214f, - +0.006691f, +0.000402f, +0.000147f, -0.004452f, -0.002115f, +0.000108f, +0.002189f, -0.000840f, +0.000131f, +0.001020f, - -0.001143f, +0.000321f, +0.000524f, -0.002224f, +0.000874f, +0.000410f, -0.000026f, +0.000922f, +0.000379f, -0.000917f, - +0.000916f, -0.000603f, +0.001979f, +0.000733f, +0.001407f, +0.000051f, -0.001150f, +0.000313f, -0.000567f, -0.000246f, - -0.000504f, -0.000176f, -0.000949f, -0.000990f, +0.000674f, -0.000236f, +0.000365f, -0.000428f, -0.000473f, -0.000357f, - -0.000302f, -0.000109f, +0.000094f, +0.000098f, -0.000391f, -0.000130f - }, - { - -0.019260f, +0.124040f, +0.014691f, -0.011150f, +0.025640f, +0.008017f, -0.011971f, +0.009548f, +0.007372f, +0.010337f, - -0.011874f, +0.002994f, +0.007555f, +0.002198f, +0.063780f, -0.002487f, -0.010435f, +0.000972f, +0.000908f, +0.007726f, - +0.006275f, -0.008526f, +0.003294f, +0.000004f, -0.010583f, -0.002319f, -0.001845f, -0.003425f, -0.004228f, +0.000967f, - -0.007593f, +0.001966f, +0.006715f, +0.005528f, +0.003664f, +0.002383f, -0.000030f, -0.003943f, -0.002365f, +0.004131f, - -0.004697f, -0.000322f, -0.000333f, +0.002361f, -0.000355f, -0.000882f, -0.001631f, +0.004050f, +0.000926f, +0.000500f, - -0.000846f, -0.000560f, -0.002496f, -0.004846f, -0.000517f, +0.000001f, -0.001380f, +0.000842f, +0.001967f, -0.000007f, - +0.000982f, -0.001004f, +0.000625f, +0.000540f, +0.002094f, +0.000129f, -0.000146f, -0.000374f, +0.000370f, -0.001021f, - +0.000655f, +0.001279f, +0.000744f, -0.001548f, -0.000318f, -0.000473f, +0.000155f, -0.000678f, +0.000189f, -0.000110f, - -0.000122f, -0.000353f, +0.000437f, +0.000110f, -0.000272f, +0.000057f, -0.000561f, +0.000414f, +0.000148f, +0.000219f, - -0.000023f, -0.000570f, +0.000054f, -0.000439f, -0.000421f, -0.000124f - }, - { - +0.001498f, -0.051369f, +0.010920f, +0.004971f, +0.001146f, -0.001532f, +0.003597f, -0.002138f, +0.003470f, -0.001692f, - -0.004278f, +0.007423f, -0.005753f, +0.003450f, -0.047275f, +0.008094f, +0.009856f, -0.002939f, -0.004537f, +0.003171f, - +0.001630f, -0.015466f, +0.004127f, +0.003184f, -0.005796f, +0.005011f, -0.003395f, +0.002938f, -0.000976f, -0.018399f, - +0.000675f, +0.005843f, +0.002746f, -0.004984f, -0.000806f, -0.002439f, -0.004557f, +0.000480f, +0.001108f, +0.000956f, - -0.003510f, +0.001098f, -0.003112f, -0.000364f, -0.004055f, -0.001894f, +0.003450f, -0.003717f, +0.001666f, +0.002342f, - +0.000087f, +0.000513f, -0.002927f, +0.000371f, -0.002598f, -0.001124f, +0.001083f, -0.000431f, +0.001384f, -0.000238f, - +0.001008f, +0.000120f, +0.000442f, -0.001208f, +0.000700f, +0.001017f, -0.001609f, -0.001996f, -0.000297f, +0.000972f, - +0.001089f, -0.000867f, -0.000651f, -0.000834f, +0.000439f, -0.000230f, +0.000234f, +0.000802f, +0.000685f, -0.000403f, - +0.000564f, -0.000151f, -0.000608f, +0.000424f, +0.000612f, +0.000176f, +0.000943f, +0.000623f, -0.000379f, -0.000349f, - -0.000253f, +0.000027f, +0.000077f, -0.000206f, -0.000187f, +0.000269f - } - }, - { - { - +0.019890f, -0.153495f, -0.131572f, +0.024692f, -0.020244f, -0.000132f, +0.006078f, +0.002384f, -0.008589f, +0.009114f, - -0.002302f, -0.007606f, +0.007449f, -0.009059f, -0.013949f, +0.009652f, +0.001304f, +0.003339f, +0.015640f, +0.009980f, - +0.002868f, +0.006939f, +0.001672f, -0.003170f, +0.001625f, +0.002673f, +0.001602f, -0.003560f, -0.006435f, +0.000814f, - -0.005064f, +0.006339f, +0.008803f, +0.000624f, -0.005418f, +0.005700f, -0.007519f, +0.007420f, -0.011065f, -0.002919f, - -0.005377f, +0.000774f, -0.002012f, -0.003395f, +0.002014f, -0.003498f, -0.005015f, -0.003993f, -0.000914f, -0.002628f, - -0.001634f, -0.002747f, +0.002915f, +0.002211f, +0.002623f, +0.000010f, -0.000436f, +0.002275f, +0.001037f, -0.000161f, - +0.001452f, +0.001423f, -0.000335f, +0.000231f, +0.000484f, +0.001649f, +0.001112f, -0.001804f, +0.000340f, +0.000702f, - +0.000268f, -0.001300f, -0.001416f, +0.000281f, +0.001550f, +0.000289f, +0.000175f, -0.000545f, +0.000439f, +0.000600f, - -0.000154f, -0.000546f, -0.000167f, +0.000499f, -0.000212f, -0.000404f, -0.000200f, +0.000137f, +0.000425f, +0.000558f, - +0.000448f, -0.000233f, -0.000077f, +0.000568f, -0.000405f, +0.000577f - }, - { - +0.001131f, -0.027832f, +0.024018f, -0.013475f, -0.007772f, -0.000843f, +0.000504f, -0.001446f, -0.008625f, -0.002099f, - +0.005687f, -0.001650f, -0.003105f, -0.006790f, -0.003363f, +0.013017f, +0.006387f, -0.002581f, +0.013116f, -0.009223f, - +0.003491f, -0.023358f, -0.000693f, +0.001102f, -0.007673f, -0.003325f, +0.001255f, -0.000487f, +0.010497f, +0.002159f, - -0.004376f, +0.009453f, +0.003089f, +0.004659f, +0.004758f, +0.001943f, +0.002233f, -0.002679f, -0.006241f, +0.005130f, - +0.002422f, -0.002942f, +0.001399f, -0.000764f, +0.001306f, +0.002761f, -0.000603f, +0.000840f, -0.000403f, -0.004560f, - +0.000421f, -0.000555f, -0.000109f, -0.000720f, +0.000870f, -0.000619f, +0.000187f, -0.002179f, +0.002446f, -0.000321f, - +0.000894f, +0.000129f, -0.001267f, -0.001370f, -0.000681f, -0.000962f, -0.003135f, -0.002032f, +0.000878f, -0.000296f, - -0.000706f, +0.000429f, +0.000364f, +0.000252f, -0.001022f, +0.000296f, +0.001088f, -0.000012f, -0.001248f, +0.000567f, - -0.000411f, +0.000057f, -0.000614f, +0.000018f, -0.001201f, -0.000422f, -0.000496f, -0.000447f, +0.000148f, +0.000089f, - +0.000119f, -0.000028f, -0.000128f, +0.000151f, +0.000045f, +0.000202f - }, - { - -0.010215f, +0.169952f, -0.006547f, -0.059360f, -0.025826f, +0.005054f, +0.008308f, -0.001673f, +0.003610f, +0.001171f, - -0.030687f, -0.008186f, -0.004930f, -0.018484f, -0.005481f, -0.005088f, +0.004059f, -0.016958f, -0.000510f, -0.000790f, - +0.002789f, -0.014209f, +0.003169f, -0.004936f, +0.011201f, -0.000260f, -0.003797f, -0.011643f, -0.000714f, -0.004112f, - -0.000423f, -0.004217f, +0.002501f, -0.004287f, +0.003193f, +0.002821f, -0.005051f, +0.002069f, -0.002460f, +0.003161f, - +0.006656f, -0.008870f, +0.005588f, -0.000055f, +0.002119f, -0.005105f, +0.001324f, +0.000873f, +0.001703f, -0.000328f, - +0.002501f, +0.001345f, -0.000791f, -0.002498f, -0.003154f, +0.001017f, -0.000203f, -0.002531f, -0.002189f, -0.001221f, - +0.000178f, -0.000946f, +0.003030f, +0.000489f, +0.000108f, -0.000629f, -0.000300f, +0.000871f, +0.001148f, -0.000938f, - +0.000051f, -0.001114f, -0.001650f, +0.000043f, +0.000381f, -0.000587f, -0.000966f, -0.000791f, +0.000211f, +0.000557f, - +0.000998f, -0.000273f, +0.000829f, +0.000059f, -0.000179f, -0.000534f, -0.000113f, +0.000145f, +0.000555f, -0.000455f, - -0.000353f, -0.000010f, -0.000373f, -0.000255f, -0.000248f, -0.000145f - }, - { - -0.048207f, +0.279719f, +0.033050f, +0.019059f, +0.002595f, -0.004238f, +0.004165f, -0.007889f, +0.000398f, -0.002946f, - +0.007524f, -0.004989f, -0.020033f, +0.005432f, +0.018393f, -0.006187f, +0.002407f, -0.008283f, -0.006199f, +0.006134f, - -0.006289f, +0.004034f, +0.002673f, +0.007221f, -0.009622f, +0.003963f, +0.001141f, -0.005985f, +0.002524f, +0.001150f, - -0.001674f, +0.002801f, -0.009607f, -0.000535f, +0.002392f, -0.006465f, +0.001343f, -0.000429f, +0.002282f, -0.003277f, - +0.001178f, -0.001349f, +0.002571f, -0.004495f, +0.001527f, +0.001198f, +0.000837f, +0.001676f, -0.002982f, +0.001607f, - -0.001564f, +0.001628f, -0.001739f, +0.004474f, -0.001281f, +0.001671f, -0.000722f, -0.001410f, +0.002646f, +0.000040f, - -0.000550f, -0.000772f, +0.001674f, -0.001039f, -0.000094f, +0.000779f, +0.001056f, -0.000414f, -0.001239f, -0.000542f, - +0.000317f, -0.000345f, +0.000227f, -0.000870f, +0.001021f, +0.000191f, -0.000688f, +0.001143f, -0.000361f, +0.000302f, - -0.000810f, -0.000602f, +0.000090f, +0.000117f, -0.000190f, -0.000025f, +0.000080f, -0.000517f, +0.000530f, -0.000534f, - -0.000202f, -0.000012f, -0.000309f, +0.000329f, +0.000161f, +0.000051f - }, - { - +0.002497f, -0.064104f, -0.013645f, -0.003427f, -0.001180f, +0.000173f, -0.002521f, -0.005470f, +0.004389f, +0.000417f, - +0.005581f, +0.017056f, +0.001470f, -0.004699f, -0.022171f, +0.023864f, -0.010528f, -0.036282f, -0.005032f, +0.019366f, - -0.012232f, -0.007472f, +0.012392f, -0.002247f, +0.005325f, +0.006425f, +0.013093f, -0.006133f, +0.002015f, -0.003205f, - +0.005426f, -0.008275f, -0.011415f, -0.002235f, -0.005610f, -0.001759f, +0.008616f, -0.006583f, -0.000791f, +0.007553f, - +0.001406f, -0.000635f, -0.000818f, -0.000762f, +0.002335f, +0.002387f, -0.002705f, -0.001124f, -0.003518f, +0.000287f, - -0.000604f, +0.003793f, -0.000947f, +0.000906f, -0.000886f, -0.000228f, +0.000180f, -0.001686f, +0.000059f, -0.002995f, - +0.000527f, +0.002869f, -0.000872f, +0.001150f, +0.000882f, -0.000541f, -0.000537f, -0.000120f, +0.001041f, -0.001682f, - +0.000844f, -0.000709f, -0.000442f, -0.000520f, -0.000896f, +0.000080f, -0.000166f, -0.000557f, +0.001082f, -0.000237f, - +0.000081f, -0.000672f, +0.000335f, -0.000174f, +0.000409f, -0.000890f, +0.000902f, +0.000588f, -0.000190f, +0.000588f, - -0.000405f, +0.000336f, +0.000075f, -0.000312f, +0.000035f, -0.000523f - }, - { - -0.042007f, +0.349854f, -0.025528f, +0.008216f, +0.002721f, +0.001695f, -0.000794f, -0.002855f, -0.007302f, -0.008924f, - -0.024583f, -0.000421f, -0.014237f, +0.003244f, +0.003044f, +0.005155f, +0.010314f, +0.002952f, -0.005781f, -0.000718f, - +0.001350f, -0.006988f, -0.001704f, -0.008534f, +0.001333f, -0.006347f, -0.001723f, +0.004406f, -0.001491f, -0.002020f, - +0.000900f, -0.000655f, +0.011600f, +0.004309f, -0.005825f, +0.000385f, -0.004291f, +0.001602f, +0.008634f, +0.000901f, - +0.001712f, +0.000705f, +0.000300f, -0.000869f, -0.002703f, +0.004167f, +0.000535f, +0.000918f, +0.004712f, -0.000660f, - -0.000053f, -0.004227f, +0.000775f, -0.004998f, +0.002930f, -0.000650f, -0.001990f, -0.002586f, -0.002476f, +0.001421f, - +0.003149f, -0.001350f, +0.002220f, +0.002160f, +0.000939f, -0.001479f, -0.000002f, +0.000712f, +0.001891f, +0.001049f, - +0.001408f, +0.000201f, +0.001211f, +0.000540f, -0.000139f, -0.000500f, -0.000997f, -0.000245f, +0.000942f, +0.000624f, - +0.000804f, +0.000369f, -0.000504f, +0.000222f, -0.000405f, -0.000224f, -0.000536f, -0.000739f, -0.000395f, -0.000557f, - +0.000176f, -0.000376f, +0.000193f, +0.000646f, +0.000130f, -0.000296f - }, - { - -0.000465f, +0.010023f, +0.005075f, +0.003550f, +0.000852f, -0.001345f, -0.001364f, +0.002342f, -0.000246f, -0.000452f, - -0.001518f, -0.004659f, -0.002353f, +0.003874f, -0.016011f, +0.006221f, +0.018391f, +0.006300f, +0.014450f, -0.014233f, - -0.001231f, -0.010807f, -0.014693f, +0.002709f, -0.001792f, +0.005864f, -0.005703f, -0.003509f, +0.004682f, +0.001936f, - -0.003229f, -0.008845f, +0.006368f, -0.011039f, +0.002346f, +0.001616f, -0.007933f, -0.003356f, -0.004071f, -0.001094f, - -0.001532f, +0.002918f, +0.001100f, +0.000827f, -0.001712f, -0.001848f, -0.002527f, +0.000468f, -0.002019f, +0.000556f, - +0.002262f, +0.001705f, +0.002737f, -0.000606f, +0.001662f, +0.001369f, +0.002298f, -0.001499f, -0.001230f, +0.000495f, - -0.001632f, +0.001817f, -0.000457f, -0.000152f, -0.001111f, +0.002370f, -0.001881f, -0.000202f, +0.000359f, +0.001041f, - +0.001033f, -0.000696f, -0.000294f, +0.000828f, +0.000841f, +0.000184f, -0.001092f, +0.000333f, +0.000321f, +0.000608f, - -0.000253f, -0.000968f, +0.000369f, +0.000475f, +0.000603f, +0.000516f, +0.000398f, +0.000223f, -0.000004f, +0.000664f, - -0.000056f, -0.000579f, -0.000125f, +0.000382f, -0.000512f, -0.000292f - }, - { - +0.011989f, -0.361140f, +0.028996f, -0.027567f, +0.000099f, +0.000548f, +0.012707f, +0.004088f, +0.018234f, +0.007843f, - -0.003417f, +0.001990f, -0.002703f, -0.005127f, -0.015473f, -0.002378f, -0.007082f, +0.004310f, -0.014292f, -0.008572f, - -0.002711f, -0.003655f, -0.011003f, -0.007084f, -0.005928f, -0.003338f, +0.003719f, -0.006085f, +0.001017f, -0.003128f, - +0.008222f, -0.003040f, -0.003061f, -0.007725f, -0.006134f, -0.010153f, -0.011427f, +0.000879f, -0.003081f, -0.006313f, - +0.003202f, -0.002522f, +0.003231f, -0.000522f, +0.001575f, +0.002447f, -0.000709f, -0.000960f, +0.003002f, -0.002460f, - -0.000704f, -0.000681f, -0.003443f, +0.002232f, -0.001863f, +0.002829f, -0.000033f, +0.000937f, +0.002996f, -0.000572f, - +0.001592f, +0.001883f, -0.000037f, +0.000048f, +0.000255f, +0.002830f, -0.000444f, +0.001070f, +0.001223f, +0.001455f, - -0.000995f, +0.000047f, +0.000306f, -0.000725f, +0.000335f, +0.000915f, -0.000010f, +0.000020f, -0.000052f, +0.000267f, - -0.000030f, -0.000250f, -0.001425f, +0.000140f, +0.001169f, -0.000250f, -0.000184f, +0.000179f, -0.000105f, -0.000153f, - +0.000404f, -0.000020f, -0.000030f, -0.000014f, -0.000009f, -0.000039f - }, - { - -0.000472f, -0.006253f, -0.007169f, -0.002107f, -0.002462f, +0.003239f, +0.000852f, -0.000620f, -0.007788f, -0.000917f, - +0.007929f, +0.007531f, +0.010089f, -0.014739f, -0.012205f, +0.015578f, +0.023368f, +0.002731f, +0.005027f, +0.001022f, - -0.005337f, +0.011002f, -0.008717f, +0.007872f, +0.003893f, +0.017224f, +0.018911f, -0.010942f, -0.012575f, -0.001808f, - -0.002158f, -0.009187f, +0.002603f, -0.007209f, -0.000220f, -0.001890f, -0.005600f, -0.004379f, +0.000599f, +0.002615f, - -0.005019f, +0.000436f, +0.000886f, +0.000797f, -0.002084f, +0.004263f, +0.000577f, +0.003574f, -0.002803f, +0.004217f, - +0.001572f, +0.001429f, +0.001371f, +0.002367f, -0.004170f, +0.000832f, +0.002084f, -0.004017f, +0.000024f, +0.001031f, - +0.000993f, -0.000178f, +0.000319f, +0.000806f, -0.000479f, +0.000696f, +0.000390f, +0.000496f, +0.000182f, -0.000592f, - +0.001069f, +0.001100f, +0.001572f, +0.000196f, -0.000139f, +0.000369f, -0.000224f, +0.000313f, +0.000209f, +0.000528f, - +0.000515f, -0.000707f, -0.000030f, +0.000580f, -0.000517f, -0.000417f, +0.000092f, +0.000391f, -0.000665f, -0.000170f, - -0.000117f, -0.000481f, -0.000501f, -0.000026f, -0.000091f, +0.000155f - }, - { - -0.015271f, -0.326931f, +0.079821f, +0.030574f, +0.019425f, -0.063354f, -0.008609f, +0.005508f, +0.017993f, -0.003790f, - -0.001358f, +0.018913f, +0.013488f, -0.001080f, +0.001778f, -0.014184f, -0.002603f, +0.004115f, -0.010347f, +0.006643f, - +0.000627f, -0.005546f, -0.005746f, -0.003556f, -0.015233f, +0.001477f, +0.004922f, +0.003690f, -0.003119f, +0.000588f, - +0.010735f, -0.002994f, +0.001049f, +0.003548f, +0.001587f, +0.011258f, +0.004948f, +0.007414f, -0.003284f, -0.000913f, - -0.002209f, +0.004420f, +0.002227f, -0.000810f, +0.006806f, -0.002360f, +0.001010f, -0.003319f, -0.002116f, +0.001625f, - +0.003006f, -0.000978f, -0.002755f, +0.000282f, +0.000656f, -0.001061f, -0.001561f, +0.000553f, +0.001258f, -0.001983f, - +0.000090f, -0.001413f, -0.001827f, +0.000260f, -0.002095f, -0.002676f, +0.000591f, -0.000438f, -0.001451f, +0.001629f, - +0.000519f, +0.000730f, +0.000463f, +0.000395f, -0.000985f, +0.000702f, +0.000360f, +0.000120f, +0.001348f, -0.000116f, - +0.001373f, -0.000181f, +0.000112f, -0.000530f, +0.000139f, -0.000021f, +0.000602f, -0.000126f, +0.000023f, -0.000039f, - -0.000032f, +0.000411f, +0.000174f, -0.000356f, +0.000261f, +0.000472f - }, - { - +0.000047f, -0.059247f, -0.015463f, +0.003578f, +0.000723f, -0.005664f, -0.010852f, -0.001554f, +0.003944f, -0.002401f, - -0.004526f, +0.000942f, +0.003007f, -0.007197f, +0.006890f, -0.013324f, +0.015213f, -0.012114f, -0.004905f, -0.017188f, - +0.019146f, +0.000195f, -0.002907f, -0.010116f, +0.001859f, -0.008537f, -0.006965f, +0.002688f, -0.002929f, +0.009636f, - -0.003462f, -0.005807f, +0.000886f, -0.007120f, +0.000167f, +0.001496f, +0.001025f, -0.000147f, -0.005108f, +0.000652f, - +0.004207f, +0.001129f, +0.001288f, -0.001462f, -0.001865f, +0.000295f, -0.001882f, -0.002263f, -0.002698f, +0.000293f, - -0.002239f, +0.002542f, -0.000500f, -0.001120f, -0.001656f, +0.001533f, -0.002593f, -0.000234f, -0.001099f, +0.000229f, - +0.000551f, -0.000745f, -0.001324f, -0.001209f, -0.002553f, -0.000332f, +0.000405f, +0.000859f, -0.001016f, +0.000722f, - +0.001867f, +0.000156f, +0.000602f, -0.000427f, -0.000404f, -0.000464f, +0.000009f, +0.000635f, -0.001213f, +0.000250f, - +0.000087f, -0.000017f, +0.000306f, +0.000211f, +0.000153f, -0.000027f, +0.000354f, +0.000339f, +0.000026f, +0.000059f, - -0.000321f, +0.000066f, +0.000067f, +0.000036f, -0.000008f, -0.000409f - }, - { - +0.064690f, -0.147166f, -0.010311f, -0.021747f, -0.012138f, -0.001647f, +0.011045f, -0.002640f, -0.005698f, +0.015832f, - +0.010916f, +0.000548f, +0.008575f, +0.007484f, +0.031562f, +0.000656f, +0.014495f, +0.000198f, +0.001918f, -0.006098f, - -0.007082f, +0.007987f, +0.002533f, -0.000668f, +0.000480f, +0.012445f, -0.005314f, +0.003244f, +0.002604f, -0.003249f, - -0.000305f, -0.003997f, +0.000173f, +0.000852f, +0.001840f, +0.005272f, +0.005711f, +0.002378f, -0.002842f, +0.004596f, - -0.002346f, +0.004315f, +0.005022f, +0.006650f, +0.002761f, +0.001076f, +0.003658f, -0.000740f, +0.001104f, -0.001979f, - -0.000723f, +0.001107f, +0.000034f, -0.001171f, +0.001747f, +0.003397f, -0.002693f, -0.000291f, +0.000435f, -0.000750f, - +0.000918f, +0.000905f, +0.000191f, -0.000150f, +0.002400f, +0.000386f, +0.000629f, -0.000344f, +0.000987f, +0.001301f, - +0.000486f, +0.000673f, -0.000925f, -0.000804f, +0.001269f, +0.000809f, -0.000360f, -0.000513f, +0.000087f, -0.000379f, - +0.000485f, +0.000582f, +0.000231f, -0.000123f, +0.000061f, +0.000331f, -0.000070f, +0.000066f, -0.000282f, +0.000547f, - +0.000220f, +0.000002f, -0.000132f, +0.000139f, -0.000088f, +0.000215f - }, - { - +0.002160f, +0.001244f, -0.030686f, -0.013435f, -0.012040f, +0.002206f, +0.000173f, -0.004756f, -0.008096f, +0.002150f, - -0.010318f, -0.008344f, -0.022092f, +0.006419f, +0.018433f, -0.002037f, -0.004103f, +0.003713f, +0.010009f, -0.001730f, - -0.007558f, +0.026362f, +0.027689f, -0.029541f, +0.011342f, +0.001996f, +0.014570f, -0.000824f, +0.008369f, -0.002941f, - -0.001152f, +0.005523f, -0.003525f, +0.001297f, +0.001621f, -0.004933f, +0.002233f, -0.000255f, -0.000268f, +0.001132f, - +0.002350f, -0.001116f, -0.002031f, +0.002344f, +0.000049f, -0.001142f, -0.003429f, -0.004697f, +0.002226f, +0.004034f, - +0.005358f, +0.001303f, -0.002302f, -0.001624f, -0.003655f, -0.002247f, -0.000626f, +0.001285f, +0.000870f, -0.000946f, - +0.001928f, -0.001137f, -0.001204f, -0.000575f, +0.000886f, +0.000002f, -0.000137f, +0.000735f, +0.000604f, -0.001097f, - +0.001757f, -0.000374f, +0.001116f, +0.000328f, +0.000831f, -0.000244f, -0.000329f, +0.000084f, +0.000307f, -0.001038f, - -0.000137f, -0.001019f, -0.000648f, -0.000005f, +0.000344f, +0.000062f, +0.000028f, -0.000168f, -0.000686f, -0.000712f, - -0.000104f, +0.000243f, -0.000135f, +0.000174f, -0.000055f, -0.000458f - }, - { - +0.038098f, +0.063004f, -0.002468f, -0.004044f, +0.022866f, +0.002589f, -0.002429f, -0.002001f, +0.024931f, -0.001785f, - -0.000557f, -0.004866f, +0.014629f, +0.000667f, +0.065596f, -0.011837f, -0.001580f, +0.002695f, +0.009147f, -0.001914f, - +0.004595f, -0.007541f, -0.000754f, +0.004635f, -0.009518f, -0.005937f, +0.000773f, -0.010773f, +0.001532f, -0.001009f, - -0.005404f, +0.000760f, +0.004486f, +0.003673f, +0.004832f, +0.000651f, +0.000190f, -0.001189f, -0.000461f, +0.000603f, - -0.000808f, -0.007540f, +0.002229f, +0.003832f, -0.000396f, -0.001750f, -0.002036f, +0.005939f, +0.000394f, -0.000641f, - +0.002309f, -0.000803f, -0.005884f, -0.002773f, -0.000722f, -0.000258f, +0.000068f, +0.000820f, +0.001540f, -0.000570f, - +0.001124f, +0.001186f, -0.000127f, +0.000548f, +0.001380f, +0.000273f, +0.000248f, -0.000248f, -0.000345f, -0.000198f, - -0.000595f, +0.002431f, -0.000886f, +0.000511f, -0.001202f, -0.000028f, -0.000400f, +0.000633f, -0.000100f, +0.000291f, - -0.000118f, -0.000399f, +0.000601f, -0.000127f, +0.000090f, -0.000143f, -0.000316f, +0.000303f, -0.000034f, +0.000262f, - -0.000160f, -0.000311f, -0.000223f, +0.000109f, -0.000268f, -0.000437f - }, - { - -0.000640f, -0.024295f, -0.005966f, +0.001442f, +0.005415f, +0.001017f, +0.001651f, -0.004018f, -0.004853f, +0.004069f, - -0.003498f, +0.008558f, -0.002070f, -0.035399f, +0.017298f, +0.009488f, +0.013035f, -0.004802f, +0.003512f, +0.004093f, - +0.002884f, -0.008647f, -0.012158f, +0.007339f, -0.009989f, +0.013208f, -0.005406f, -0.010082f, +0.000123f, -0.006214f, - -0.004545f, +0.007000f, +0.003407f, -0.007538f, +0.000999f, -0.005057f, +0.000390f, -0.003246f, -0.003446f, +0.000519f, - +0.001138f, -0.004819f, -0.003008f, -0.000159f, -0.000182f, -0.003409f, +0.002962f, -0.000009f, -0.001140f, +0.002178f, - +0.001049f, +0.000697f, -0.002385f, -0.000911f, -0.002822f, -0.000319f, -0.000014f, -0.001383f, +0.002488f, +0.000372f, - -0.000630f, -0.002285f, +0.000751f, -0.000375f, +0.000717f, -0.000347f, -0.001423f, -0.001211f, -0.000480f, -0.000662f, - +0.001892f, -0.000057f, -0.002305f, -0.000480f, -0.000284f, +0.000149f, -0.000011f, +0.000861f, +0.000537f, +0.000131f, - +0.000828f, -0.000085f, -0.000076f, +0.000019f, +0.000324f, +0.000778f, +0.000881f, +0.000720f, -0.000149f, -0.000335f, - -0.000007f, +0.000044f, -0.000211f, +0.000242f, -0.000581f, +0.000051f - } - }, - { - { - -0.020210f, +0.080710f, +0.134047f, +0.042944f, -0.005861f, +0.005076f, +0.008487f, +0.009746f, -0.008073f, +0.000270f, - -0.005781f, -0.012800f, +0.010368f, -0.008105f, -0.003132f, +0.018077f, -0.005972f, +0.008415f, +0.012013f, -0.001455f, - -0.008855f, -0.001253f, -0.002143f, -0.006189f, +0.007174f, +0.002003f, +0.002937f, +0.003062f, -0.003528f, +0.006475f, - -0.006107f, +0.005001f, +0.010767f, +0.005428f, +0.003348f, +0.007694f, -0.004558f, +0.016461f, -0.003450f, +0.003863f, - +0.000225f, -0.000875f, -0.002660f, +0.000332f, +0.004881f, -0.000158f, -0.001825f, +0.000694f, -0.000466f, -0.002390f, - +0.000163f, -0.002260f, -0.000384f, -0.000243f, +0.003968f, +0.001047f, +0.000421f, +0.002172f, +0.001218f, -0.000191f, - -0.000015f, +0.000067f, -0.000690f, -0.001301f, -0.002244f, +0.000866f, +0.000935f, -0.000963f, -0.000018f, -0.000893f, - +0.000625f, +0.000159f, -0.000374f, +0.000179f, +0.001454f, +0.000052f, +0.000194f, -0.000482f, +0.000344f, +0.000327f, - -0.000199f, -0.000134f, +0.000491f, +0.000929f, +0.000035f, +0.000484f, +0.000426f, -0.000006f, -0.000130f, +0.000201f, - +0.000111f, +0.000145f, +0.000194f, +0.000354f, -0.000346f, +0.000377f - }, - { - -0.002230f, -0.108491f, -0.023372f, +0.008367f, +0.000269f, +0.000926f, +0.001220f, +0.001483f, +0.003157f, +0.004469f, - +0.000983f, -0.000637f, -0.003169f, -0.010789f, -0.009507f, -0.006429f, -0.000773f, +0.000899f, +0.006105f, -0.009446f, - +0.009185f, -0.030058f, +0.000860f, +0.008413f, +0.010776f, +0.008838f, -0.010527f, -0.020148f, -0.001504f, -0.001544f, - -0.005903f, +0.005534f, +0.002258f, -0.000510f, +0.003219f, +0.006235f, +0.008568f, +0.003558f, -0.000403f, +0.004200f, - -0.001441f, -0.001111f, +0.005856f, -0.001213f, -0.001590f, +0.002859f, +0.000605f, -0.000337f, -0.001686f, -0.002315f, - +0.000845f, -0.000522f, +0.000091f, -0.001173f, +0.001287f, -0.000980f, +0.001736f, -0.001441f, -0.000280f, -0.002167f, - -0.000328f, -0.000358f, -0.000733f, +0.000165f, +0.000121f, +0.001132f, +0.000515f, +0.000172f, +0.000619f, -0.000095f, - +0.000127f, +0.000010f, +0.000235f, +0.000682f, -0.000061f, +0.000430f, -0.000065f, -0.000249f, -0.000175f, +0.001054f, - +0.000030f, +0.000404f, -0.000347f, +0.000591f, -0.000378f, -0.000103f, +0.000024f, +0.000438f, +0.000806f, -0.000021f, - +0.000366f, +0.000141f, -0.000297f, -0.000227f, -0.000125f, +0.000116f - }, - { - +0.009798f, +0.143870f, -0.032784f, -0.003824f, +0.003458f, -0.000192f, +0.008552f, -0.002575f, -0.001332f, +0.009559f, - -0.024206f, -0.003519f, +0.009327f, -0.000108f, -0.007036f, -0.017881f, +0.004922f, -0.013729f, -0.001329f, -0.005379f, - +0.001410f, -0.013391f, +0.011156f, +0.003402f, +0.000986f, +0.001814f, +0.014238f, -0.001861f, +0.002145f, -0.003692f, - +0.004246f, -0.001590f, +0.006202f, +0.000426f, +0.002091f, +0.002308f, -0.003907f, -0.001956f, -0.008051f, +0.001643f, - +0.008494f, -0.003960f, +0.007187f, -0.002767f, +0.003854f, -0.000413f, +0.003108f, +0.001045f, +0.003438f, -0.000435f, - -0.000565f, +0.002276f, +0.001499f, -0.000500f, -0.001570f, -0.000240f, -0.000745f, -0.000548f, +0.001508f, -0.000034f, - -0.000679f, -0.001579f, +0.002479f, -0.001017f, +0.000804f, -0.000331f, -0.001096f, +0.000125f, +0.000471f, -0.001404f, - +0.000405f, +0.000724f, -0.000142f, -0.000580f, -0.000500f, -0.001048f, -0.000120f, +0.000116f, +0.000092f, -0.000044f, - +0.000511f, -0.000229f, +0.000358f, -0.000135f, +0.000239f, -0.000909f, -0.000370f, +0.000251f, +0.001139f, +0.000111f, - -0.000199f, +0.000286f, -0.000117f, -0.000336f, -0.000383f, +0.000176f - }, - { - +0.020528f, +0.320851f, -0.024521f, +0.008314f, +0.005406f, -0.000887f, +0.006708f, -0.007301f, -0.003299f, -0.007550f, - +0.005926f, +0.000075f, -0.004312f, +0.005164f, +0.008420f, -0.005087f, +0.001820f, -0.012940f, -0.011335f, +0.003429f, - -0.006818f, +0.002538f, -0.007026f, -0.000249f, -0.007633f, +0.002752f, +0.002066f, -0.004456f, +0.004071f, +0.004070f, - +0.002348f, +0.008173f, -0.003134f, +0.000360f, -0.000433f, -0.008746f, +0.003215f, -0.000912f, +0.002685f, -0.001933f, - +0.001696f, -0.000668f, +0.004449f, -0.001954f, +0.003534f, +0.001444f, -0.000272f, +0.000254f, -0.002777f, +0.002728f, - -0.001328f, -0.000616f, -0.004096f, +0.002980f, -0.002329f, +0.001313f, +0.000520f, -0.003812f, +0.000957f, -0.000460f, - -0.001778f, -0.000762f, +0.001567f, -0.000280f, +0.000394f, +0.000004f, +0.000688f, -0.000400f, -0.000967f, -0.000820f, - -0.000501f, -0.001520f, +0.000401f, -0.000896f, +0.000428f, +0.000007f, -0.000056f, +0.001018f, -0.000161f, +0.001194f, - -0.000049f, -0.000003f, +0.000316f, +0.000441f, -0.000011f, +0.000228f, +0.000166f, -0.000483f, +0.000823f, -0.000303f, - -0.000222f, -0.000092f, +0.000093f, +0.000165f, -0.000171f, -0.000014f - }, - { - -0.002977f, -0.028497f, +0.020841f, -0.002274f, -0.000703f, +0.000346f, -0.000691f, -0.004266f, +0.001973f, -0.003060f, - -0.001907f, +0.007021f, -0.000514f, +0.001910f, -0.050393f, +0.006162f, +0.031389f, +0.055329f, +0.031721f, +0.009338f, - -0.008808f, -0.010934f, +0.013663f, -0.002039f, +0.000657f, -0.004009f, +0.010910f, -0.009194f, +0.006852f, -0.004977f, - +0.004623f, +0.003861f, +0.003003f, +0.009095f, +0.002517f, +0.002195f, +0.007429f, -0.010791f, -0.004793f, +0.006143f, - -0.000303f, +0.000690f, +0.001449f, +0.000727f, +0.003714f, +0.000458f, -0.002610f, +0.003168f, -0.001498f, +0.003801f, - -0.001491f, -0.002360f, -0.003704f, +0.000035f, -0.002032f, -0.000414f, -0.001091f, -0.002052f, +0.002502f, +0.000312f, - -0.001709f, +0.000133f, -0.002009f, -0.001236f, +0.000305f, -0.000063f, -0.001156f, +0.000042f, +0.001862f, -0.000995f, - +0.000605f, -0.000724f, -0.000226f, +0.000499f, -0.000015f, +0.000164f, -0.000403f, -0.000220f, +0.001190f, -0.000278f, - +0.000121f, -0.001052f, +0.000916f, +0.000229f, +0.000137f, -0.000858f, +0.000352f, -0.000131f, -0.000168f, +0.000433f, - -0.000203f, +0.000173f, -0.000007f, -0.000377f, -0.000166f, -0.000202f - }, - { - -0.003806f, +0.432293f, +0.004027f, -0.002722f, -0.009735f, +0.001964f, +0.007868f, +0.005030f, +0.000705f, +0.007285f, - -0.021715f, -0.000640f, -0.007498f, +0.005838f, -0.000474f, +0.002938f, +0.000901f, -0.001982f, +0.000069f, +0.002631f, - +0.010278f, +0.000644f, -0.001084f, -0.009843f, +0.000210f, -0.002200f, +0.002333f, +0.006316f, +0.002373f, +0.001364f, - +0.001384f, -0.004770f, +0.006443f, +0.003430f, -0.005812f, +0.001527f, +0.000043f, +0.003016f, +0.003983f, -0.000728f, - +0.004421f, -0.000538f, -0.005307f, -0.000110f, -0.001889f, +0.000244f, +0.000890f, +0.001910f, +0.005226f, +0.003224f, - +0.002817f, -0.003939f, +0.001955f, -0.002162f, -0.000278f, -0.002222f, -0.000795f, -0.000907f, -0.000432f, +0.000839f, - +0.002132f, -0.001403f, +0.000774f, -0.001014f, -0.000512f, +0.000020f, +0.001111f, -0.000712f, -0.000248f, -0.000174f, - +0.000284f, -0.001154f, +0.000250f, +0.000903f, -0.000074f, -0.000031f, -0.000886f, +0.000070f, +0.001509f, -0.000651f, - -0.000829f, +0.000434f, +0.000034f, +0.000975f, +0.000072f, +0.000318f, -0.000306f, -0.000027f, +0.000406f, -0.000210f, - +0.000368f, -0.000218f, -0.000295f, -0.000079f, +0.000073f, -0.000018f - }, - { - +0.001179f, +0.005066f, -0.004542f, +0.001185f, +0.000441f, -0.000504f, -0.000466f, +0.001405f, -0.003142f, +0.001430f, - +0.006045f, +0.000395f, -0.003869f, +0.003626f, -0.010518f, +0.008071f, +0.005706f, -0.003236f, +0.007381f, -0.008783f, - +0.015617f, -0.003777f, -0.029420f, -0.006750f, +0.002920f, +0.000867f, +0.009832f, +0.005392f, +0.003743f, +0.004026f, - +0.003477f, +0.003986f, +0.003664f, -0.009189f, +0.008957f, +0.001076f, -0.006584f, -0.003750f, -0.003713f, +0.001422f, - -0.002656f, +0.001676f, +0.000173f, -0.001137f, -0.000122f, -0.001459f, -0.004929f, -0.001460f, -0.003282f, -0.000284f, - +0.000249f, -0.000797f, +0.003123f, -0.001830f, -0.000687f, -0.000224f, +0.001274f, -0.002542f, -0.000094f, +0.001922f, - -0.001663f, +0.002205f, -0.000206f, +0.000193f, -0.000822f, +0.001977f, -0.000539f, +0.001650f, -0.000135f, -0.000362f, - +0.001386f, +0.000400f, -0.000711f, -0.000263f, +0.000598f, +0.000767f, -0.000519f, +0.000504f, +0.000120f, -0.000267f, - +0.000286f, +0.000011f, -0.000062f, -0.000514f, -0.000139f, +0.000108f, +0.000108f, +0.000250f, -0.000078f, +0.000106f, - -0.000079f, -0.000196f, -0.000005f, +0.000052f, -0.000599f, -0.000278f - }, - { - +0.022905f, -0.411784f, -0.009458f, -0.015829f, +0.003434f, -0.001995f, +0.002427f, -0.006243f, +0.007922f, +0.003004f, - +0.004650f, +0.005162f, -0.003032f, +0.029972f, +0.021684f, +0.000900f, -0.003488f, +0.002642f, -0.003662f, +0.005165f, - +0.007588f, +0.001101f, -0.008567f, -0.004417f, -0.000589f, -0.002652f, +0.004509f, -0.002139f, +0.006858f, +0.001714f, - +0.000900f, -0.003861f, +0.003970f, +0.000835f, +0.000201f, -0.006022f, -0.007035f, +0.004738f, +0.003047f, -0.002396f, - +0.001920f, -0.003822f, +0.006876f, +0.002227f, +0.000129f, -0.004447f, -0.002779f, -0.002884f, -0.000336f, +0.000545f, - +0.002079f, -0.001567f, -0.003830f, +0.003687f, -0.000888f, +0.002897f, +0.000823f, +0.000094f, +0.000106f, -0.002268f, - +0.000460f, +0.000529f, -0.000380f, -0.001299f, -0.001978f, +0.001531f, -0.000322f, +0.000683f, +0.000052f, +0.000649f, - -0.001025f, -0.000779f, +0.000039f, -0.000127f, +0.000308f, +0.000440f, +0.000038f, -0.000067f, -0.000215f, +0.000578f, - +0.000364f, +0.000214f, -0.000856f, +0.000026f, +0.000577f, +0.000077f, -0.000052f, +0.000148f, +0.000165f, -0.000239f, - +0.000444f, +0.000164f, -0.000540f, -0.000272f, +0.000139f, -0.000097f - }, - { - +0.001471f, +0.008540f, +0.001637f, +0.000145f, -0.001429f, +0.002493f, +0.001617f, +0.000589f, -0.006637f, +0.000347f, - +0.004825f, -0.002816f, +0.005657f, +0.002139f, -0.010831f, -0.004407f, -0.011000f, -0.019888f, +0.007505f, -0.007143f, - -0.016991f, +0.009874f, -0.006498f, +0.009180f, -0.005848f, -0.012969f, +0.006596f, -0.006208f, -0.008722f, -0.007658f, - +0.005772f, -0.003021f, -0.001254f, +0.003683f, +0.008040f, -0.000430f, -0.001257f, +0.002485f, +0.003949f, +0.007250f, - -0.002182f, -0.004972f, -0.003298f, +0.002563f, +0.000081f, +0.004184f, +0.002295f, +0.001736f, -0.006055f, +0.003480f, - +0.000258f, +0.000026f, +0.000806f, +0.002915f, -0.003490f, +0.001021f, +0.001968f, -0.003621f, +0.000107f, +0.000659f, - -0.000406f, -0.002289f, -0.000336f, -0.000577f, -0.002179f, +0.000103f, +0.000185f, +0.000182f, -0.000518f, -0.001510f, - +0.000399f, -0.000782f, -0.000187f, -0.000454f, -0.000825f, -0.000211f, -0.000495f, -0.000027f, -0.001049f, +0.000148f, - +0.000405f, -0.000220f, +0.000301f, +0.000409f, -0.000517f, -0.000048f, -0.000035f, +0.000201f, -0.000621f, -0.000125f, - +0.000346f, +0.000004f, +0.000072f, +0.000386f, -0.000221f, -0.000006f - }, - { - +0.013075f, -0.318201f, +0.038165f, -0.013414f, +0.004767f, -0.029025f, +0.015791f, -0.003999f, +0.006311f, -0.011282f, - -0.006004f, +0.010671f, +0.006676f, -0.004888f, +0.004275f, -0.014106f, -0.007590f, -0.005524f, -0.017842f, +0.002592f, - +0.003785f, -0.005465f, -0.010547f, -0.002593f, -0.004543f, -0.001907f, -0.000273f, +0.003802f, -0.003599f, +0.002721f, - +0.011757f, +0.006107f, -0.001004f, -0.000320f, -0.000873f, +0.000871f, -0.003056f, +0.004132f, -0.004163f, +0.009367f, - -0.001193f, -0.002059f, +0.001634f, -0.000416f, +0.006692f, -0.003102f, -0.000055f, -0.002298f, +0.000146f, +0.000632f, - +0.000111f, -0.000456f, -0.000886f, +0.000963f, +0.001796f, -0.000869f, -0.002921f, -0.000903f, +0.001641f, -0.003675f, - +0.000743f, -0.001268f, -0.003086f, +0.002101f, +0.000082f, -0.001943f, -0.000114f, +0.000564f, -0.001535f, +0.000344f, - -0.001138f, +0.000698f, +0.000681f, -0.000760f, -0.001602f, +0.000124f, -0.000039f, -0.000194f, +0.000954f, -0.000319f, - +0.001244f, -0.000093f, +0.000174f, -0.000581f, +0.000065f, -0.000195f, +0.000500f, +0.000240f, +0.000007f, -0.000220f, - +0.000036f, -0.000073f, +0.000459f, -0.000213f, -0.000071f, +0.000131f - }, - { - -0.000761f, -0.055112f, -0.008907f, +0.006234f, -0.001005f, -0.003364f, -0.003220f, +0.003969f, +0.005714f, -0.001000f, - -0.003231f, +0.003752f, +0.012067f, +0.005108f, +0.013890f, -0.011480f, +0.012319f, -0.015337f, +0.001120f, -0.021046f, - +0.016491f, -0.001544f, -0.000276f, -0.002602f, +0.003855f, +0.009148f, -0.001953f, +0.000691f, -0.001725f, +0.001463f, - -0.006847f, -0.007109f, +0.004080f, -0.003979f, -0.001092f, -0.002151f, +0.002577f, +0.005598f, +0.001330f, +0.003101f, - +0.003520f, +0.002087f, +0.002588f, +0.000438f, -0.000037f, +0.000886f, -0.001378f, -0.000401f, -0.001780f, +0.001656f, - -0.003352f, +0.001569f, -0.000623f, -0.001104f, -0.001446f, +0.003286f, -0.002153f, -0.002092f, -0.001442f, -0.000699f, - +0.001095f, +0.000474f, -0.001171f, +0.001101f, +0.000245f, +0.000048f, +0.000296f, +0.000578f, -0.001354f, -0.000205f, - +0.000881f, -0.000261f, -0.000312f, -0.000471f, -0.000002f, -0.000162f, -0.000321f, +0.000663f, -0.000509f, +0.000205f, - +0.000137f, +0.000419f, -0.000033f, -0.000146f, +0.000002f, +0.000199f, +0.000333f, +0.000309f, -0.000249f, +0.000030f, - -0.000559f, -0.000326f, -0.000264f, -0.000192f, +0.000006f, -0.000547f - }, - { - -0.024163f, -0.216371f, +0.044814f, -0.008236f, -0.007880f, -0.008576f, +0.002167f, -0.010117f, -0.007201f, +0.005088f, - -0.007423f, -0.009104f, +0.013586f, +0.012252f, +0.022825f, -0.009884f, +0.006878f, -0.000006f, +0.008192f, -0.007756f, - -0.006218f, +0.007658f, -0.005867f, -0.005288f, -0.002782f, +0.004625f, -0.002919f, +0.000383f, -0.001691f, -0.001967f, - +0.004405f, +0.001680f, -0.001651f, +0.002129f, -0.000329f, -0.005498f, +0.000022f, +0.002384f, -0.000427f, +0.003729f, - -0.000915f, +0.002156f, -0.006886f, -0.002761f, +0.001349f, -0.000263f, +0.001141f, -0.004112f, +0.000880f, -0.000383f, - +0.000838f, +0.000594f, +0.000046f, +0.000481f, +0.000003f, +0.000749f, -0.003839f, +0.000245f, +0.000856f, -0.001172f, - -0.003182f, -0.001467f, +0.000049f, -0.000932f, +0.001404f, +0.000501f, +0.000897f, +0.000262f, +0.001408f, +0.001315f, - +0.000308f, +0.000049f, -0.000915f, -0.000426f, +0.000813f, +0.000633f, +0.000236f, -0.000147f, -0.000477f, +0.000239f, - +0.001053f, +0.000983f, +0.000407f, -0.000428f, -0.000480f, -0.000044f, -0.000276f, -0.000029f, +0.000095f, +0.001024f, - +0.000389f, +0.000015f, -0.000020f, +0.000322f, -0.000151f, +0.000030f - }, - { - -0.002341f, +0.022747f, -0.000169f, +0.003809f, -0.011431f, -0.000359f, -0.001136f, +0.001091f, +0.001140f, +0.006697f, - -0.001938f, -0.004524f, +0.020791f, +0.051624f, +0.003124f, -0.009457f, +0.002729f, +0.012685f, +0.014904f, +0.005657f, - -0.010721f, +0.024581f, +0.041126f, -0.031822f, -0.005018f, -0.004889f, +0.013663f, -0.007902f, -0.008398f, -0.006439f, - -0.001424f, +0.003525f, -0.006221f, -0.001703f, +0.004404f, -0.007110f, +0.002832f, +0.001078f, -0.005485f, -0.001050f, - +0.001438f, +0.001483f, +0.003222f, +0.000815f, -0.001731f, -0.001204f, -0.003184f, -0.000779f, +0.002018f, +0.000190f, - +0.001859f, +0.001936f, -0.001480f, -0.001270f, -0.002493f, -0.002154f, -0.002190f, +0.001238f, +0.001389f, -0.001199f, - +0.001605f, -0.000177f, +0.000289f, -0.000959f, +0.000090f, +0.000334f, -0.000340f, +0.000043f, -0.000310f, -0.000500f, - +0.001373f, -0.000968f, +0.000145f, +0.000312f, +0.000688f, -0.000185f, +0.000155f, -0.000367f, +0.000317f, -0.000746f, - -0.000161f, -0.000065f, +0.000178f, +0.000255f, +0.000331f, -0.000011f, +0.000387f, +0.000044f, -0.000617f, -0.000608f, - +0.000158f, +0.000565f, -0.000033f, +0.000244f, +0.000287f, +0.000092f - }, - { - -0.037066f, -0.039013f, -0.003781f, -0.009670f, -0.000597f, -0.001216f, +0.003402f, -0.008995f, +0.025002f, -0.001416f, - +0.009693f, -0.000527f, +0.009757f, -0.043675f, +0.013758f, +0.000815f, +0.012772f, +0.002921f, +0.003496f, -0.004792f, - +0.005641f, -0.004531f, -0.002073f, +0.000615f, -0.007136f, -0.000301f, +0.002112f, -0.012820f, +0.002209f, +0.000940f, - +0.001376f, +0.001123f, +0.004419f, +0.004377f, -0.000232f, -0.002119f, +0.001744f, +0.000321f, -0.000804f, -0.001566f, - -0.001142f, -0.006323f, -0.003596f, -0.004211f, -0.002556f, +0.000264f, -0.000434f, +0.002500f, -0.003645f, -0.000008f, - +0.001748f, -0.001717f, -0.003143f, +0.001353f, +0.001876f, -0.001510f, -0.001119f, -0.000059f, -0.000864f, -0.001800f, - +0.000056f, +0.001352f, +0.000247f, -0.001216f, +0.000173f, +0.000537f, +0.000498f, -0.000202f, +0.000565f, +0.000257f, - -0.000546f, +0.002088f, -0.000781f, +0.001319f, -0.000888f, +0.000480f, -0.000244f, +0.000385f, +0.000196f, +0.001020f, - +0.000429f, -0.000342f, -0.000164f, -0.000499f, +0.000094f, -0.000374f, +0.000034f, +0.000350f, +0.000051f, +0.000455f, - +0.000060f, +0.000001f, +0.000128f, +0.000364f, -0.000194f, -0.000605f - }, - { - -0.000288f, -0.007050f, +0.005584f, -0.002820f, +0.001621f, -0.001506f, -0.000837f, -0.002630f, -0.004291f, +0.004076f, - -0.005596f, +0.006482f, +0.007268f, +0.035590f, +0.125959f, +0.026976f, +0.007435f, -0.002172f, +0.011383f, +0.015124f, - +0.003199f, -0.010258f, -0.015519f, +0.000723f, -0.010724f, +0.012935f, -0.006019f, -0.007918f, +0.002140f, -0.000119f, - -0.005045f, +0.003406f, +0.006192f, +0.000012f, +0.003911f, -0.003270f, +0.002041f, -0.007839f, -0.005556f, -0.000581f, - +0.001407f, -0.002243f, +0.001391f, +0.003149f, +0.002004f, -0.003722f, +0.002955f, +0.000202f, -0.000944f, +0.001524f, - -0.001213f, -0.001605f, -0.001509f, +0.001908f, +0.000529f, +0.001327f, +0.000932f, -0.002728f, +0.000914f, +0.000559f, - -0.000756f, -0.002711f, +0.001060f, -0.000414f, -0.001070f, -0.002391f, -0.001809f, +0.000356f, -0.000080f, -0.001200f, - +0.000273f, +0.000683f, -0.001680f, -0.000844f, -0.000260f, +0.000267f, -0.000038f, +0.000760f, +0.000235f, -0.000073f, - +0.000612f, -0.000165f, -0.000368f, -0.000130f, -0.000395f, +0.000323f, +0.000287f, +0.000214f, +0.000236f, +0.000262f, - +0.000459f, +0.000033f, -0.000279f, +0.000508f, -0.000295f, +0.000018f - } - }, - { - { - +0.023591f, +0.228810f, -0.004306f, +0.028723f, +0.007933f, +0.005487f, +0.005442f, +0.003351f, +0.004493f, -0.003746f, - -0.007234f, -0.003040f, -0.002289f, +0.002202f, -0.003271f, +0.017921f, -0.007510f, +0.008438f, -0.007806f, +0.011571f, - -0.007174f, -0.002774f, -0.009632f, +0.000021f, +0.003274f, +0.005498f, -0.001006f, +0.001924f, -0.000252f, +0.010370f, - -0.005089f, -0.001034f, +0.009967f, +0.003679f, +0.013264f, -0.000711f, +0.002874f, +0.007269f, +0.003514f, +0.002116f, - +0.001885f, -0.004226f, -0.003281f, +0.003373f, +0.003837f, +0.002274f, -0.000174f, -0.000784f, -0.001186f, +0.000158f, - -0.000263f, -0.000274f, +0.000715f, -0.000940f, +0.001716f, +0.000963f, +0.002585f, +0.000286f, +0.001432f, -0.000419f, - -0.000302f, +0.000644f, -0.001626f, -0.001545f, -0.001198f, -0.000160f, +0.000423f, -0.000033f, -0.000926f, +0.000035f, - -0.000911f, +0.001384f, -0.000368f, +0.000092f, +0.001252f, +0.001048f, +0.000451f, -0.000796f, -0.000674f, +0.000659f, - +0.000180f, +0.000661f, +0.000127f, +0.000183f, +0.000586f, +0.000271f, +0.000722f, +0.000209f, -0.000081f, -0.000002f, - -0.000560f, +0.000313f, +0.000456f, -0.000284f, +0.000386f, -0.000015f - }, - { - +0.000154f, -0.125189f, -0.007962f, +0.011190f, -0.000076f, -0.001134f, +0.006797f, -0.000920f, +0.005174f, +0.006322f, - -0.000387f, -0.004106f, -0.003096f, -0.011969f, +0.004687f, -0.023264f, -0.003014f, +0.010552f, -0.009918f, +0.003531f, - +0.011842f, -0.024620f, -0.006863f, +0.003586f, +0.013809f, -0.000194f, -0.003199f, -0.016796f, -0.009194f, +0.001511f, - +0.002251f, -0.001186f, -0.001411f, +0.001722f, +0.000661f, +0.009524f, +0.007208f, +0.002094f, +0.004516f, -0.002066f, - -0.000093f, +0.006293f, +0.002230f, +0.000057f, -0.007388f, +0.006013f, +0.000327f, -0.000805f, -0.003494f, -0.000781f, - +0.002171f, -0.001375f, +0.001757f, -0.002995f, +0.002869f, -0.002129f, +0.001775f, +0.000916f, -0.003438f, -0.001397f, - -0.000175f, +0.000062f, -0.000014f, -0.000362f, -0.000050f, +0.001866f, +0.001128f, +0.000304f, -0.000849f, +0.000770f, - -0.000571f, +0.000560f, +0.000053f, -0.000061f, +0.000752f, +0.000745f, -0.000497f, -0.000586f, +0.000791f, -0.000037f, - +0.000767f, -0.000197f, +0.000190f, +0.000353f, +0.000171f, -0.000528f, -0.000044f, +0.000966f, +0.000500f, +0.000361f, - -0.000112f, -0.000053f, +0.000027f, +0.000111f, -0.000155f, -0.000063f - }, - { - -0.008018f, +0.013408f, +0.068933f, +0.023311f, +0.000546f, -0.004715f, +0.004234f, +0.002848f, -0.002970f, -0.003451f, - -0.005758f, -0.004451f, +0.006001f, +0.004367f, -0.004990f, -0.024828f, +0.012956f, -0.017090f, -0.004392f, +0.007960f, - -0.009693f, -0.008064f, +0.007167f, +0.008849f, -0.000595f, +0.000445f, +0.011778f, +0.002274f, +0.002324f, +0.002417f, - +0.000158f, +0.002051f, -0.003215f, +0.004151f, +0.005697f, -0.003503f, -0.000857f, -0.005231f, -0.002516f, -0.000808f, - +0.002886f, +0.002093f, -0.000474f, +0.001628f, -0.001735f, +0.007459f, +0.000834f, +0.001329f, +0.001862f, +0.000887f, - -0.000170f, +0.000622f, +0.001965f, -0.000527f, +0.000590f, -0.001961f, -0.001130f, +0.001847f, +0.001113f, -0.001314f, - -0.000132f, +0.001043f, -0.000571f, -0.001299f, +0.001293f, -0.000082f, -0.000988f, -0.000279f, +0.000263f, -0.000628f, - -0.000215f, +0.001554f, +0.000672f, -0.000923f, -0.000910f, -0.001269f, +0.000518f, -0.000008f, -0.000224f, +0.000363f, - +0.000658f, -0.000542f, +0.000027f, +0.000115f, +0.000133f, -0.000873f, -0.000024f, +0.000353f, +0.000574f, +0.000482f, - -0.000065f, +0.000266f, -0.000398f, -0.000507f, -0.000153f, +0.000056f - }, - { - +0.014129f, +0.310063f, -0.006973f, +0.009096f, -0.007591f, +0.003474f, +0.001705f, -0.000891f, -0.008516f, -0.006094f, - -0.000865f, +0.004147f, +0.005121f, +0.008266f, -0.003646f, -0.001832f, +0.003625f, -0.025872f, -0.000000f, -0.004497f, - -0.000293f, +0.002285f, -0.006226f, -0.005441f, +0.000488f, -0.004931f, +0.001645f, -0.004057f, +0.003802f, +0.001495f, - +0.005813f, +0.008101f, -0.001385f, -0.002033f, -0.003167f, -0.005259f, +0.003092f, +0.000064f, +0.001870f, +0.000817f, - +0.002221f, -0.001620f, +0.000314f, +0.000898f, +0.003325f, -0.000789f, +0.004079f, -0.001281f, -0.001222f, +0.001581f, - -0.000581f, -0.002073f, -0.002896f, +0.001704f, +0.000330f, -0.000756f, -0.000563f, -0.002138f, +0.000331f, -0.000876f, - -0.000934f, -0.000171f, +0.001935f, -0.000248f, -0.000127f, +0.000701f, -0.000555f, +0.000648f, -0.000397f, -0.001055f, - -0.000692f, -0.001282f, +0.000185f, -0.001368f, -0.000013f, +0.000502f, +0.000431f, +0.000339f, +0.000280f, +0.000585f, - +0.000677f, +0.000047f, +0.000479f, -0.000126f, +0.000167f, +0.000441f, -0.000105f, +0.000089f, -0.000017f, +0.000132f, - +0.000160f, -0.000418f, +0.000022f, +0.000033f, +0.000103f, +0.000053f - }, - { - +0.002949f, +0.009898f, -0.015371f, +0.000958f, -0.000633f, +0.000156f, -0.001974f, -0.002007f, +0.000313f, -0.000809f, - +0.001802f, +0.002746f, -0.007868f, -0.003190f, -0.037331f, +0.004021f, +0.021735f, +0.078819f, +0.019358f, -0.004299f, - +0.004825f, -0.033705f, +0.020718f, -0.001348f, -0.003002f, -0.008132f, -0.000761f, -0.000088f, +0.004458f, -0.001785f, - +0.003276f, +0.005657f, +0.003525f, +0.008084f, +0.004187f, +0.003147f, +0.000580f, -0.007191f, -0.002737f, +0.002645f, - -0.001234f, +0.000895f, +0.002551f, -0.000077f, +0.003871f, -0.001245f, +0.001692f, +0.001198f, -0.002873f, +0.004967f, - -0.001462f, -0.003450f, -0.003574f, -0.000707f, -0.000568f, -0.001076f, -0.002797f, +0.000257f, +0.002316f, +0.001183f, - -0.002758f, -0.000869f, -0.000669f, -0.001574f, +0.000392f, +0.001266f, -0.001214f, +0.000456f, -0.000348f, +0.000659f, - -0.000495f, +0.000736f, -0.000681f, +0.000045f, -0.000616f, +0.000486f, +0.000181f, +0.000108f, +0.000632f, -0.000050f, - +0.000361f, -0.000918f, +0.000416f, +0.000428f, +0.000064f, -0.000136f, -0.000018f, -0.000294f, +0.000133f, +0.000007f, - -0.000026f, +0.000094f, +0.000263f, -0.000416f, -0.000454f, +0.000359f - }, - { - +0.054074f, +0.369927f, -0.016836f, +0.000244f, -0.005532f, +0.002072f, +0.000894f, +0.010284f, +0.002457f, +0.000363f, - -0.006014f, -0.009492f, +0.002190f, +0.005916f, -0.000356f, +0.000389f, +0.000253f, -0.000896f, -0.000670f, +0.001279f, - +0.012847f, +0.005104f, -0.005051f, -0.004987f, -0.002688f, -0.000295f, +0.003280f, -0.002694f, +0.000480f, +0.003711f, - +0.008929f, -0.003014f, +0.001384f, +0.000004f, -0.002196f, +0.001814f, -0.000921f, +0.001721f, +0.003425f, +0.003104f, - -0.000066f, -0.000537f, -0.006230f, -0.002777f, +0.001975f, -0.001480f, +0.003550f, -0.000939f, +0.003250f, +0.004097f, - +0.000250f, -0.001575f, +0.000547f, +0.001204f, -0.002966f, -0.001302f, +0.001519f, -0.000360f, +0.001677f, -0.001052f, - -0.000262f, -0.000183f, +0.001125f, -0.001574f, -0.000490f, +0.000630f, +0.000303f, +0.000072f, -0.001304f, -0.000458f, - +0.000343f, -0.000581f, +0.000044f, +0.000580f, -0.000899f, +0.000186f, -0.000109f, +0.000558f, +0.000468f, -0.000776f, - -0.001115f, +0.000077f, +0.000577f, +0.000663f, +0.000355f, +0.000168f, -0.000110f, +0.000114f, +0.000402f, +0.000322f, - -0.000014f, -0.000184f, -0.000238f, -0.000204f, +0.000012f, -0.000101f - }, - { - -0.000085f, -0.004074f, +0.006675f, -0.002459f, +0.000607f, +0.000567f, -0.001972f, +0.001596f, -0.001821f, +0.000181f, - +0.003990f, -0.002064f, +0.014129f, -0.014129f, +0.001359f, +0.008383f, -0.012206f, +0.000396f, +0.003694f, +0.000613f, - +0.010120f, +0.000027f, -0.029260f, -0.008603f, -0.005362f, +0.002676f, +0.004352f, +0.014492f, +0.001844f, +0.002267f, - +0.003073f, +0.012625f, -0.009008f, -0.000898f, +0.004031f, +0.005775f, -0.004863f, -0.001536f, -0.001768f, -0.001846f, - +0.001406f, -0.001469f, -0.000420f, -0.001087f, -0.000640f, -0.001184f, -0.003339f, -0.001892f, -0.002689f, -0.001466f, - -0.000057f, -0.000938f, +0.003455f, -0.001373f, -0.000158f, +0.000591f, -0.000958f, -0.000737f, +0.001884f, +0.000776f, - -0.000924f, +0.000560f, -0.000584f, -0.000648f, +0.000957f, -0.000659f, +0.000586f, +0.001188f, +0.000429f, +0.000072f, - +0.000415f, +0.000381f, +0.000457f, -0.000013f, -0.000213f, +0.000729f, -0.000440f, +0.000608f, +0.000170f, +0.000127f, - -0.000206f, +0.000604f, -0.000293f, -0.000260f, -0.000461f, -0.000170f, +0.000372f, +0.000029f, -0.000269f, -0.000152f, - -0.000141f, -0.000071f, -0.000249f, -0.000003f, -0.000320f, -0.000243f - }, - { - -0.054152f, -0.350359f, +0.018922f, -0.005012f, -0.003744f, -0.001240f, -0.004088f, +0.002172f, -0.007133f, +0.008238f, - +0.007132f, +0.001682f, +0.003391f, +0.011946f, +0.038365f, -0.001582f, +0.000658f, +0.003481f, -0.004140f, +0.012574f, - +0.003489f, -0.003385f, -0.003481f, +0.003005f, -0.005345f, -0.003096f, +0.000839f, +0.007637f, +0.001726f, +0.004613f, - -0.004602f, +0.006788f, -0.006792f, +0.001441f, +0.006420f, -0.014723f, +0.005108f, -0.002942f, +0.001635f, +0.005839f, - -0.002221f, -0.001863f, +0.005197f, +0.002513f, +0.003330f, -0.007510f, -0.004190f, +0.001190f, -0.002118f, +0.001281f, - +0.000404f, -0.002575f, -0.002988f, +0.002144f, +0.003399f, +0.000993f, +0.000580f, -0.000613f, -0.000176f, -0.002204f, - -0.000590f, -0.000142f, +0.000446f, -0.000630f, -0.001701f, +0.000717f, +0.000506f, +0.000482f, +0.000103f, -0.000385f, - -0.000323f, -0.000469f, +0.000045f, +0.000341f, +0.000401f, -0.000336f, +0.000303f, +0.000359f, +0.000026f, +0.000250f, - +0.000538f, -0.000220f, -0.000521f, -0.000330f, -0.000018f, +0.000826f, -0.000312f, +0.000389f, +0.000012f, +0.000075f, - -0.000181f, +0.000475f, -0.000371f, -0.000279f, +0.000183f, -0.000239f - }, - { - +0.000548f, +0.006137f, +0.009450f, -0.001450f, +0.001754f, +0.000813f, +0.000212f, -0.002358f, +0.000511f, +0.000780f, - -0.000462f, +0.000970f, +0.002235f, -0.001525f, -0.007862f, -0.002333f, -0.024877f, -0.005406f, -0.005569f, -0.008434f, - -0.007468f, +0.004537f, +0.008427f, -0.013682f, +0.010037f, -0.017569f, -0.012176f, +0.011566f, -0.011741f, -0.010629f, - +0.008508f, -0.001730f, -0.002325f, +0.004269f, +0.005283f, +0.005019f, -0.003092f, +0.003917f, +0.002030f, +0.005165f, - +0.000185f, -0.005279f, -0.001862f, +0.001910f, +0.003035f, +0.001577f, +0.003029f, -0.001382f, -0.001019f, +0.000542f, - -0.000509f, +0.000075f, +0.000572f, +0.001377f, -0.000695f, +0.000702f, +0.000358f, -0.000305f, -0.002648f, -0.000301f, - +0.000149f, -0.000705f, -0.000750f, -0.001133f, -0.002502f, +0.000179f, -0.000155f, +0.000360f, +0.000342f, -0.002756f, - +0.000296f, -0.001830f, -0.000192f, +0.000064f, -0.001142f, -0.000217f, -0.000799f, +0.000277f, -0.000953f, +0.000259f, - +0.000139f, -0.000090f, +0.000166f, +0.000177f, -0.000697f, +0.000165f, +0.000123f, +0.000263f, -0.000492f, +0.000003f, - +0.000249f, +0.000276f, +0.000074f, +0.000503f, -0.000184f, -0.000055f - }, - { - -0.009560f, -0.267454f, -0.006743f, -0.003973f, -0.007910f, +0.000202f, -0.001483f, +0.006833f, -0.011083f, -0.000192f, - -0.002682f, +0.002472f, +0.007210f, +0.000144f, -0.010385f, +0.000614f, -0.013306f, -0.013515f, +0.008423f, -0.020252f, - +0.003756f, +0.000316f, -0.007767f, -0.005668f, +0.005810f, -0.007014f, -0.002647f, +0.002047f, -0.005650f, +0.006244f, - +0.009683f, +0.010647f, -0.004215f, -0.003460f, +0.004441f, -0.008740f, +0.001031f, +0.004321f, -0.000081f, +0.008903f, - -0.002221f, -0.001227f, +0.001179f, -0.001459f, +0.001545f, +0.001057f, +0.001982f, -0.002309f, -0.001668f, +0.001776f, - -0.000431f, -0.000130f, +0.001702f, +0.003069f, -0.001344f, -0.001371f, -0.001527f, -0.000010f, -0.000061f, -0.002389f, - -0.000077f, -0.001295f, -0.001574f, -0.000086f, +0.000780f, +0.000244f, -0.001188f, +0.000191f, -0.000473f, -0.000600f, - -0.000797f, +0.001267f, -0.000156f, -0.001293f, -0.000652f, +0.000359f, -0.000169f, -0.000436f, +0.000165f, +0.000389f, - +0.000360f, +0.000527f, -0.000380f, +0.000142f, -0.000262f, -0.000137f, +0.000845f, +0.000376f, +0.000082f, +0.000195f, - -0.000368f, -0.000335f, +0.000156f, +0.000434f, -0.000216f, +0.000055f - }, - { - +0.001055f, -0.036664f, -0.018671f, +0.006772f, -0.003874f, -0.001674f, +0.000248f, +0.003109f, +0.003606f, +0.000129f, - -0.000668f, +0.002924f, +0.011966f, +0.003228f, +0.013059f, -0.006079f, -0.002845f, -0.001926f, -0.001254f, -0.007463f, - +0.007140f, -0.000289f, +0.002906f, +0.001764f, -0.004861f, +0.011093f, +0.005931f, -0.002740f, -0.001383f, -0.007998f, - -0.005015f, -0.002294f, +0.001869f, -0.000500f, -0.005150f, +0.001371f, +0.000892f, +0.004843f, +0.001458f, +0.005110f, - -0.003335f, +0.003690f, +0.003828f, -0.000465f, +0.002979f, -0.000722f, +0.000026f, -0.001370f, -0.000470f, +0.000286f, - -0.001810f, +0.000536f, +0.000835f, -0.001234f, -0.000475f, -0.000011f, -0.000635f, -0.001361f, -0.000247f, -0.001665f, - +0.000747f, +0.000124f, +0.000050f, +0.000144f, +0.001568f, -0.000538f, +0.000542f, +0.000524f, -0.000958f, -0.000027f, - -0.000452f, -0.000127f, -0.001071f, +0.000225f, +0.000106f, -0.000050f, -0.000615f, +0.000520f, +0.000090f, -0.000080f, - -0.000074f, +0.000335f, +0.000361f, -0.000284f, -0.000230f, +0.000351f, -0.000052f, +0.000220f, -0.000324f, -0.000293f, - -0.000171f, -0.000378f, -0.000249f, -0.000273f, +0.000153f, -0.000428f - }, - { - -0.015037f, -0.191090f, +0.011149f, -0.000383f, -0.003729f, -0.002769f, -0.009076f, -0.004991f, +0.000151f, -0.000696f, - -0.011122f, -0.010903f, +0.023013f, +0.005789f, +0.005696f, +0.004750f, -0.002593f, +0.003982f, +0.003935f, -0.000520f, - -0.005870f, -0.000751f, +0.000433f, -0.004078f, -0.005632f, -0.002034f, +0.000103f, +0.000525f, -0.003238f, +0.002608f, - -0.000811f, +0.009519f, -0.006967f, +0.004658f, -0.001622f, -0.008747f, -0.000008f, -0.001361f, +0.001478f, +0.000698f, - +0.003631f, +0.002668f, -0.006353f, -0.007944f, +0.002914f, -0.000784f, -0.000551f, -0.003256f, +0.002201f, -0.002601f, - +0.000319f, +0.001331f, +0.000162f, +0.002491f, -0.000101f, -0.001589f, -0.001846f, -0.000664f, -0.000591f, -0.000507f, - -0.001276f, -0.002598f, -0.000488f, +0.000678f, +0.000092f, +0.000703f, +0.000874f, +0.000448f, +0.001058f, +0.000931f, - +0.000212f, +0.000597f, -0.001123f, -0.000065f, -0.000169f, +0.001383f, +0.000179f, -0.000292f, -0.000257f, +0.000545f, - +0.000615f, +0.000709f, +0.000591f, +0.000037f, -0.000966f, -0.000239f, -0.000077f, +0.000264f, +0.000390f, +0.000417f, - +0.000598f, +0.000186f, +0.000331f, +0.000131f, -0.000208f, -0.000070f - }, - { - +0.001844f, +0.027565f, -0.000837f, +0.002817f, -0.008504f, -0.004556f, -0.002210f, +0.002755f, +0.004349f, +0.005507f, - +0.001397f, -0.006419f, +0.002531f, +0.088887f, -0.011654f, +0.005313f, -0.005529f, +0.013557f, +0.004988f, +0.001208f, - +0.016278f, +0.002943f, +0.032431f, -0.019741f, -0.006200f, -0.002814f, +0.010030f, -0.000971f, -0.018793f, +0.000432f, - +0.000688f, +0.002247f, -0.004711f, -0.004649f, +0.006043f, -0.009039f, +0.001976f, +0.004489f, -0.010796f, +0.004611f, - -0.000676f, +0.003538f, +0.004141f, -0.001026f, -0.000724f, +0.000980f, -0.004176f, +0.001978f, -0.003049f, +0.003062f, - +0.002450f, +0.000468f, +0.002659f, -0.003929f, -0.001350f, -0.001675f, +0.000026f, -0.001271f, +0.002919f, -0.002224f, - +0.001249f, +0.000468f, +0.000979f, -0.001350f, -0.000581f, +0.000824f, +0.000202f, +0.000424f, -0.000421f, -0.000386f, - +0.000239f, -0.000315f, -0.000061f, +0.000497f, +0.000318f, +0.000313f, +0.001038f, -0.000287f, -0.000476f, +0.000020f, - -0.000510f, -0.000045f, -0.000014f, +0.000007f, +0.000221f, +0.000108f, +0.000068f, -0.000062f, -0.000038f, -0.000643f, - +0.000378f, +0.000278f, +0.000323f, +0.000084f, +0.000291f, +0.000392f - }, - { - +0.019001f, -0.116802f, -0.005707f, -0.006226f, -0.005539f, +0.005922f, -0.007607f, +0.002610f, +0.013067f, +0.001258f, - +0.009853f, +0.003850f, -0.008674f, +0.012058f, -0.046026f, -0.003739f, +0.014562f, +0.005259f, -0.003400f, +0.003663f, - +0.001983f, -0.003325f, +0.005740f, -0.007331f, +0.000005f, -0.002399f, +0.000854f, -0.004496f, -0.005976f, +0.005659f, - +0.002200f, +0.001389f, +0.002429f, +0.006241f, -0.005314f, -0.000996f, -0.000751f, +0.003847f, -0.001617f, -0.002794f, - -0.001083f, -0.002183f, -0.008816f, -0.002689f, -0.000385f, -0.001716f, +0.000286f, -0.001829f, -0.000944f, +0.000972f, - +0.000723f, -0.001908f, +0.000326f, +0.001961f, -0.001313f, -0.001546f, -0.000703f, -0.000662f, -0.001173f, -0.002270f, - -0.000272f, +0.001031f, +0.000149f, -0.000839f, -0.000207f, +0.000045f, +0.000354f, +0.000333f, +0.000317f, +0.000175f, - +0.000082f, +0.000459f, -0.000056f, +0.001443f, -0.000447f, +0.000989f, -0.000513f, -0.000009f, -0.000064f, +0.000600f, - +0.000489f, +0.000221f, -0.000907f, +0.000024f, -0.000245f, -0.000560f, +0.000197f, +0.000196f, +0.000222f, +0.000276f, - -0.000045f, +0.000179f, -0.000118f, +0.000404f, -0.000025f, -0.000146f - }, - { - -0.000004f, -0.003026f, -0.001512f, -0.002758f, +0.003724f, -0.000095f, -0.002707f, +0.000086f, -0.002512f, -0.003134f, - +0.002498f, -0.001710f, +0.012133f, +0.037835f, +0.108205f, +0.028430f, +0.001943f, +0.000568f, +0.013595f, +0.014229f, - -0.000244f, -0.012215f, -0.006854f, -0.002020f, -0.005505f, +0.003766f, -0.004566f, -0.001338f, +0.004391f, +0.000271f, - -0.004949f, +0.000102f, +0.002793f, +0.005331f, +0.002008f, -0.003908f, +0.002714f, -0.007341f, -0.001878f, +0.000932f, - -0.003933f, +0.004900f, +0.001237f, +0.001868f, +0.003055f, -0.002232f, +0.001411f, -0.001147f, -0.000216f, +0.000832f, - +0.000534f, -0.003620f, +0.000144f, +0.001463f, +0.000603f, +0.000423f, +0.002986f, -0.002647f, -0.000159f, +0.001253f, - +0.000898f, -0.001902f, -0.001004f, +0.000654f, -0.001675f, -0.001258f, -0.001179f, +0.000102f, -0.000492f, -0.000250f, - -0.000288f, -0.000319f, +0.000079f, -0.000561f, -0.000049f, -0.000316f, -0.000289f, +0.000561f, +0.000424f, +0.000123f, - -0.000101f, -0.000125f, -0.000559f, -0.000159f, -0.000291f, -0.000253f, +0.000422f, +0.000144f, +0.000185f, +0.000370f, - +0.000376f, -0.000013f, -0.000132f, +0.000043f, +0.000262f, -0.000152f - } - }, - { - { - -0.023114f, +0.254956f, -0.003339f, +0.000399f, +0.001715f, +0.000726f, -0.004521f, -0.006301f, -0.002792f, -0.003237f, - +0.005278f, +0.006484f, -0.004502f, +0.006152f, -0.015556f, +0.012724f, -0.004615f, -0.008058f, -0.009170f, +0.017400f, - -0.008021f, -0.001999f, -0.003682f, +0.000806f, -0.007064f, +0.002707f, -0.003624f, -0.000881f, +0.001356f, +0.008714f, - -0.003833f, +0.000759f, +0.004117f, -0.006274f, +0.007871f, -0.005175f, +0.000319f, +0.003769f, +0.001343f, -0.005269f, - -0.004330f, -0.003219f, -0.005141f, +0.000607f, +0.005060f, +0.003169f, +0.001681f, +0.000868f, +0.001525f, +0.002762f, - +0.001316f, +0.000175f, +0.001615f, -0.001060f, +0.001641f, +0.001193f, +0.000464f, -0.002239f, +0.002394f, +0.000506f, - -0.000196f, +0.002430f, +0.000114f, -0.001493f, -0.000043f, +0.000107f, +0.000267f, +0.000697f, -0.000194f, +0.000260f, - -0.001566f, +0.001358f, -0.000816f, +0.000334f, +0.001318f, +0.001026f, +0.000987f, -0.000010f, -0.000795f, +0.000368f, - -0.000288f, -0.000168f, -0.000444f, +0.000099f, +0.000562f, -0.000318f, +0.000269f, -0.000189f, -0.000245f, -0.000131f, - -0.000558f, +0.000019f, +0.000236f, -0.000370f, +0.000379f, -0.000165f - }, - { - +0.001021f, -0.045658f, +0.044494f, +0.008986f, +0.004163f, +0.000017f, +0.006121f, -0.003014f, +0.000885f, -0.001218f, - -0.000429f, +0.001191f, +0.001356f, +0.002174f, +0.024906f, -0.017541f, -0.001483f, -0.002327f, -0.020328f, +0.011349f, - +0.012430f, -0.013638f, -0.001779f, -0.003994f, +0.000881f, -0.004114f, +0.001548f, -0.006227f, -0.001732f, +0.000393f, - -0.001479f, +0.001030f, +0.002990f, +0.004933f, -0.003021f, +0.001672f, +0.001438f, +0.000700f, +0.000759f, -0.006768f, - -0.001365f, +0.006344f, +0.001369f, +0.001757f, -0.004557f, +0.004031f, -0.002992f, -0.001410f, -0.002483f, +0.000426f, - +0.002200f, -0.002934f, +0.001196f, -0.002233f, +0.002564f, -0.002418f, +0.000449f, -0.000046f, -0.001648f, +0.000562f, - -0.000842f, -0.001083f, +0.000236f, -0.000469f, -0.000041f, +0.001047f, -0.000398f, -0.000338f, -0.000320f, +0.001525f, - -0.000718f, +0.000340f, -0.000451f, -0.000350f, +0.000510f, +0.000395f, -0.000310f, -0.000665f, +0.000207f, -0.000268f, - +0.001013f, -0.000439f, +0.000329f, +0.000539f, -0.000121f, -0.000670f, -0.001021f, -0.000337f, -0.000413f, +0.000123f, - -0.000042f, +0.000221f, +0.000075f, +0.000259f, -0.000039f, -0.000097f - }, - { - +0.007386f, -0.152201f, -0.072098f, +0.018256f, +0.004925f, -0.002088f, +0.003246f, +0.004226f, -0.001142f, -0.001741f, - +0.001817f, -0.008494f, +0.002002f, +0.005027f, +0.002412f, -0.014106f, +0.010262f, -0.018408f, -0.002275f, +0.009736f, - -0.003519f, +0.001407f, +0.010120f, +0.006601f, -0.010424f, -0.005971f, +0.007951f, -0.004226f, -0.003031f, -0.000053f, - -0.004580f, -0.002276f, -0.006436f, -0.003415f, -0.000041f, -0.000484f, +0.002878f, -0.001941f, -0.002114f, -0.003220f, - +0.001057f, -0.002296f, -0.008920f, +0.001252f, -0.000133f, +0.007652f, -0.001925f, -0.001098f, -0.000339f, +0.000343f, - +0.000978f, -0.000034f, +0.000526f, -0.000809f, +0.001239f, -0.000009f, +0.000482f, +0.001152f, -0.000716f, -0.001892f, - +0.000178f, +0.001996f, -0.000706f, -0.001407f, +0.000635f, -0.001143f, -0.000460f, +0.000272f, -0.000340f, +0.000246f, - +0.000121f, +0.000877f, -0.000058f, -0.000950f, -0.000028f, +0.000182f, +0.000274f, -0.000363f, +0.000415f, -0.000046f, - +0.000582f, -0.000089f, +0.000394f, +0.000252f, +0.000337f, -0.000176f, +0.000102f, +0.000083f, -0.000229f, +0.000273f, - +0.000007f, +0.000123f, -0.000230f, -0.000195f, +0.000250f, +0.000130f - }, - { - -0.043024f, +0.254803f, +0.001396f, +0.006462f, -0.001530f, -0.001117f, -0.005166f, +0.000403f, -0.001305f, -0.000790f, - -0.002059f, +0.002719f, +0.006224f, -0.000434f, -0.015642f, +0.004857f, +0.004740f, -0.030007f, +0.004178f, -0.004250f, - +0.001842f, +0.003098f, -0.002881f, -0.005361f, +0.003207f, -0.002197f, -0.002598f, -0.008420f, -0.001366f, -0.006881f, - -0.001116f, +0.007195f, +0.001398f, +0.001890f, -0.001542f, -0.002825f, +0.003414f, +0.002078f, +0.000140f, -0.000514f, - +0.002046f, -0.003085f, -0.000419f, +0.001923f, -0.000877f, -0.005526f, +0.004312f, +0.001256f, +0.000198f, +0.000978f, - -0.000505f, +0.000619f, -0.000434f, +0.002738f, +0.002367f, -0.001098f, -0.001018f, -0.000125f, +0.000450f, +0.000511f, - +0.000565f, -0.000534f, +0.001081f, -0.000322f, +0.000691f, +0.000757f, -0.000919f, +0.001110f, +0.000089f, -0.000048f, - +0.000933f, -0.000124f, -0.000005f, -0.000736f, +0.000324f, +0.000352f, -0.000210f, -0.000656f, -0.000262f, -0.000096f, - +0.000547f, -0.000409f, +0.000001f, -0.000442f, +0.000006f, +0.000167f, -0.000219f, +0.000193f, -0.000440f, +0.000084f, - +0.000393f, -0.000275f, -0.000286f, -0.000136f, +0.000171f, +0.000073f - }, - { - -0.003034f, +0.037223f, +0.006753f, +0.000976f, +0.000507f, -0.000345f, -0.000570f, -0.000363f, +0.000324f, +0.001805f, - +0.001188f, -0.004062f, -0.012680f, +0.009918f, -0.016130f, -0.004221f, -0.024544f, -0.021729f, -0.019646f, +0.003134f, - +0.009065f, -0.036331f, +0.003375f, -0.005813f, +0.004737f, -0.003816f, +0.000055f, +0.005352f, +0.002352f, -0.005683f, - -0.004023f, +0.000158f, -0.005690f, +0.004019f, +0.007984f, +0.000899f, -0.002783f, -0.007276f, -0.005306f, -0.002923f, - -0.005799f, -0.003568f, +0.000419f, +0.000319f, +0.004107f, -0.000145f, +0.003050f, -0.001334f, -0.004971f, +0.003133f, - -0.001850f, -0.000548f, -0.001074f, +0.001207f, +0.001518f, +0.000736f, -0.001325f, -0.000897f, +0.001448f, +0.001693f, - -0.001547f, +0.000021f, +0.001074f, -0.000534f, +0.001097f, +0.001923f, -0.001813f, -0.000395f, -0.001195f, -0.000072f, - -0.000407f, +0.001465f, -0.000955f, -0.000484f, -0.000414f, -0.000187f, -0.000451f, +0.000222f, +0.000659f, -0.000452f, - -0.000096f, -0.000381f, +0.000556f, +0.000249f, +0.000362f, +0.000519f, +0.000529f, -0.000059f, -0.000069f, -0.000020f, - +0.000135f, -0.000062f, +0.000271f, +0.000119f, -0.000402f, +0.000162f - }, - { - -0.089444f, +0.234866f, +0.026615f, +0.012122f, +0.003324f, +0.000150f, -0.004568f, +0.008075f, +0.003767f, +0.002121f, - +0.006899f, +0.001137f, +0.009904f, +0.002863f, +0.000899f, -0.001587f, -0.004676f, -0.002180f, -0.001209f, -0.000483f, - +0.006068f, +0.005278f, -0.001020f, -0.002165f, -0.001780f, +0.000498f, -0.000018f, -0.004877f, +0.000922f, +0.003881f, - +0.009563f, -0.003236f, +0.001845f, -0.001436f, -0.000430f, +0.004030f, +0.000551f, -0.000034f, -0.002332f, -0.001846f, - -0.008480f, -0.002541f, -0.004445f, -0.005490f, +0.000690f, -0.001200f, +0.003356f, -0.003086f, -0.002775f, -0.000870f, - +0.001009f, -0.000408f, -0.001600f, +0.001891f, +0.001619f, +0.001981f, +0.003508f, +0.000747f, +0.002103f, -0.001589f, - -0.000751f, +0.000060f, +0.001238f, -0.000914f, +0.000835f, +0.000781f, +0.000190f, +0.000721f, -0.001061f, -0.000332f, - +0.000144f, -0.000344f, +0.000423f, -0.000778f, -0.001078f, +0.000198f, -0.000460f, +0.000457f, +0.000333f, -0.000495f, - -0.000964f, -0.000125f, +0.000182f, +0.000055f, -0.000088f, -0.000330f, +0.000019f, +0.000118f, +0.000180f, +0.000182f, - +0.000028f, -0.000037f, -0.000240f, -0.000077f, +0.000040f, -0.000216f - }, - { - -0.000586f, -0.018670f, +0.000209f, -0.000768f, -0.000041f, +0.000122f, -0.001653f, +0.002729f, +0.000134f, +0.000137f, - +0.002262f, +0.001992f, +0.013507f, -0.010982f, +0.017313f, +0.004963f, -0.021601f, -0.002864f, +0.016498f, +0.010889f, - +0.001935f, -0.006547f, -0.043242f, -0.007376f, -0.000773f, -0.001623f, -0.008202f, +0.008833f, -0.000230f, +0.000606f, - +0.000355f, +0.011508f, -0.007703f, -0.002584f, +0.003315f, +0.008029f, -0.001175f, +0.001846f, +0.001731f, +0.000515f, - +0.003153f, -0.000675f, -0.001264f, -0.002356f, -0.002492f, +0.000851f, +0.000265f, -0.001874f, -0.001827f, +0.000667f, - +0.000599f, -0.001724f, +0.002546f, +0.000576f, +0.002709f, +0.001459f, -0.000392f, +0.000190f, +0.001410f, -0.000873f, - -0.001693f, +0.000002f, -0.001203f, -0.001333f, -0.000143f, -0.001785f, +0.000208f, +0.000834f, +0.000432f, -0.000329f, - -0.000781f, -0.000329f, +0.001129f, +0.000247f, -0.000856f, +0.000702f, -0.000196f, +0.000565f, -0.000304f, +0.000232f, - -0.000420f, +0.000431f, +0.000192f, +0.000437f, -0.000093f, +0.000067f, +0.000386f, -0.000411f, -0.000138f, +0.000115f, - -0.000019f, +0.000341f, -0.000238f, +0.000023f, +0.000068f, +0.000033f - }, - { - +0.070691f, -0.255507f, -0.047525f, -0.001498f, +0.009793f, +0.000665f, -0.001643f, +0.001350f, -0.014363f, +0.003437f, - +0.001162f, -0.000275f, +0.000684f, +0.003499f, +0.027044f, -0.005523f, +0.002612f, +0.008015f, -0.002509f, +0.010793f, - +0.003281f, -0.001220f, -0.002429f, +0.004959f, -0.000236f, -0.003670f, -0.000324f, +0.009820f, +0.000042f, +0.001483f, - -0.005176f, +0.009302f, -0.009182f, -0.000353f, +0.003275f, -0.017043f, +0.007762f, -0.002042f, +0.001099f, +0.004714f, - -0.001840f, -0.000452f, +0.002953f, +0.001909f, +0.004585f, -0.000680f, -0.000754f, +0.002811f, -0.000170f, +0.000893f, - -0.000552f, -0.000509f, -0.002960f, +0.000885f, +0.002282f, -0.000572f, +0.000079f, -0.001312f, +0.002376f, -0.000353f, - -0.001379f, -0.001018f, +0.000519f, +0.001699f, -0.000131f, +0.001125f, +0.001663f, +0.000951f, +0.000119f, -0.000108f, - +0.000413f, +0.000562f, +0.000072f, -0.000023f, +0.000609f, -0.000057f, +0.000068f, +0.000008f, -0.000007f, -0.000266f, - -0.000314f, -0.000300f, +0.000283f, -0.000189f, -0.000350f, +0.000426f, -0.000734f, +0.000058f, -0.000063f, +0.000008f, - -0.000386f, +0.000363f, -0.000019f, -0.000052f, +0.000443f, +0.000126f - }, - { - -0.001625f, -0.013311f, -0.003499f, -0.003166f, +0.002674f, +0.000165f, +0.000826f, +0.001249f, +0.004114f, +0.001879f, - +0.001665f, +0.003246f, -0.001611f, -0.000706f, -0.014628f, +0.001444f, +0.006742f, +0.005744f, -0.007705f, +0.004335f, - +0.006778f, +0.003050f, +0.010031f, -0.023180f, -0.004170f, -0.004197f, -0.009683f, +0.007369f, -0.001083f, +0.000255f, - +0.008191f, -0.000957f, +0.002417f, -0.001670f, -0.005339f, +0.002174f, -0.005086f, -0.000406f, -0.002717f, +0.003552f, - -0.000654f, -0.002124f, +0.000645f, -0.001490f, -0.000228f, -0.002520f, -0.000666f, -0.000419f, +0.001501f, +0.000500f, - -0.002041f, -0.001706f, +0.000352f, +0.000608f, +0.000411f, +0.000064f, -0.001410f, -0.000502f, -0.000943f, +0.001197f, - -0.000483f, +0.000513f, +0.000748f, +0.000448f, -0.001401f, -0.000041f, -0.000232f, +0.001181f, +0.002279f, -0.001690f, - +0.000469f, -0.000969f, -0.000100f, +0.000018f, -0.000729f, +0.000446f, +0.000131f, +0.000250f, -0.000594f, +0.000371f, - -0.000116f, -0.000157f, -0.000078f, +0.000140f, +0.000157f, +0.000194f, -0.000355f, +0.000489f, +0.000025f, +0.000113f, - -0.000159f, +0.000156f, -0.000100f, +0.000370f, +0.000032f, +0.000220f - }, - { - +0.005961f, -0.249561f, -0.021787f, -0.000175f, -0.000566f, -0.003038f, -0.010397f, +0.011957f, -0.007040f, +0.007122f, - -0.002408f, -0.003003f, +0.006314f, +0.004454f, -0.009268f, +0.005771f, -0.004503f, -0.005932f, +0.016346f, -0.014970f, - +0.003907f, -0.000690f, -0.002228f, +0.000396f, +0.004242f, -0.007341f, -0.003364f, +0.000527f, -0.005767f, +0.005042f, - -0.001295f, -0.001899f, -0.003617f, -0.000354f, +0.009265f, -0.002575f, +0.003375f, +0.000338f, -0.002739f, +0.006173f, - -0.001354f, +0.000130f, +0.003401f, +0.000650f, +0.000353f, +0.000916f, +0.001218f, -0.001931f, +0.000235f, +0.001757f, - -0.000405f, -0.000733f, +0.000417f, +0.000628f, -0.002134f, +0.000066f, -0.001289f, +0.000854f, +0.000791f, -0.000513f, - +0.000489f, -0.000852f, -0.001340f, -0.000077f, +0.000742f, +0.000270f, +0.000284f, +0.000393f, -0.000036f, +0.000424f, - -0.000425f, +0.000659f, -0.000454f, -0.000530f, +0.000091f, +0.000344f, -0.000476f, -0.000126f, +0.000003f, +0.000309f, - -0.000080f, -0.000080f, -0.000263f, +0.000986f, +0.000127f, -0.000160f, +0.000266f, -0.000013f, +0.000045f, +0.000329f, - -0.000463f, -0.000091f, -0.000160f, +0.000060f, -0.000247f, +0.000195f - }, - { - -0.001496f, +0.001060f, +0.015560f, +0.004495f, -0.005865f, -0.001124f, -0.000647f, +0.000949f, +0.001695f, -0.000544f, - -0.000161f, -0.002323f, +0.002502f, -0.003873f, +0.001800f, -0.011846f, -0.009829f, +0.003191f, +0.000062f, +0.006715f, - +0.013993f, +0.000488f, +0.013163f, +0.005185f, -0.007679f, +0.003293f, +0.002209f, +0.000871f, +0.001011f, -0.004260f, - -0.000293f, +0.001982f, +0.005211f, -0.000263f, -0.003638f, +0.005459f, -0.001252f, -0.001066f, -0.003423f, +0.001470f, - -0.005183f, +0.002785f, +0.000946f, -0.001594f, +0.004438f, -0.001530f, -0.000533f, -0.001719f, -0.001549f, -0.000630f, - +0.000557f, +0.002422f, +0.001243f, -0.000539f, -0.000432f, -0.001874f, +0.000330f, +0.000137f, +0.001409f, -0.001243f, - -0.000433f, -0.000139f, +0.000727f, +0.000111f, +0.001403f, +0.000095f, +0.000268f, +0.000194f, +0.000370f, +0.000499f, - -0.001493f, -0.000954f, -0.001058f, +0.000678f, +0.000114f, -0.000010f, -0.000186f, +0.000683f, +0.000028f, -0.000006f, - -0.000078f, +0.000152f, +0.000013f, -0.000441f, -0.000045f, +0.000194f, -0.000140f, +0.000269f, -0.000229f, -0.000093f, - +0.000442f, +0.000194f, +0.000179f, -0.000131f, +0.000089f, -0.000118f - }, - { - +0.036224f, -0.120342f, +0.010869f, +0.003758f, -0.001028f, +0.012736f, +0.001018f, +0.003429f, +0.002253f, +0.000829f, - -0.000822f, -0.006035f, +0.009505f, -0.022264f, -0.005411f, +0.012607f, -0.001375f, +0.000425f, +0.002523f, +0.004430f, - -0.006497f, -0.000958f, +0.001136f, -0.002491f, -0.002244f, -0.001322f, -0.004081f, +0.001711f, -0.001767f, +0.000131f, - -0.005771f, +0.006042f, -0.005817f, +0.000919f, -0.001352f, -0.003484f, +0.000450f, +0.001397f, +0.001010f, -0.002751f, - +0.003115f, +0.001171f, -0.003892f, -0.004310f, +0.000855f, -0.001486f, +0.000755f, -0.000543f, +0.002300f, -0.003008f, - -0.000712f, +0.002150f, +0.000888f, +0.002441f, +0.000524f, +0.000437f, +0.001093f, -0.000629f, -0.000143f, +0.001860f, - +0.001102f, -0.001548f, +0.000171f, +0.000459f, -0.000670f, -0.000032f, +0.000863f, +0.000157f, +0.000378f, +0.000674f, - -0.000485f, +0.000381f, -0.000928f, -0.000249f, -0.000306f, +0.001186f, -0.000134f, -0.000038f, +0.000182f, +0.000320f, - -0.000141f, -0.000118f, +0.000342f, +0.000208f, -0.000626f, +0.000081f, +0.000132f, +0.000528f, +0.000162f, -0.000380f, - +0.000426f, +0.000188f, +0.000315f, +0.000042f, -0.000293f, -0.000238f - }, - { - -0.000988f, +0.023882f, +0.001789f, +0.005196f, -0.000761f, +0.002730f, -0.001750f, +0.002446f, +0.001592f, -0.001933f, - -0.006972f, -0.005972f, -0.008305f, +0.065234f, -0.015363f, +0.014410f, -0.005206f, +0.001612f, -0.002997f, -0.004195f, - +0.011984f, -0.016339f, -0.001864f, -0.021895f, +0.012830f, +0.006145f, +0.003046f, -0.002593f, -0.011464f, +0.005698f, - +0.007814f, +0.006110f, +0.002785f, +0.000200f, +0.009796f, -0.002484f, -0.001016f, +0.006261f, -0.006539f, +0.004877f, - -0.002794f, -0.000726f, +0.001603f, +0.002474f, +0.002777f, +0.002598f, -0.002190f, +0.005471f, -0.001787f, +0.001799f, - +0.001986f, +0.000401f, +0.004478f, -0.003812f, -0.001480f, +0.000016f, +0.003169f, -0.001336f, +0.003019f, -0.000633f, - +0.001101f, +0.000796f, +0.001604f, -0.001278f, +0.000336f, +0.000997f, +0.000660f, +0.000279f, -0.000046f, +0.000363f, - +0.000940f, +0.000982f, +0.000432f, -0.000297f, -0.000054f, +0.000485f, +0.001383f, +0.000045f, +0.000287f, +0.000861f, - -0.000032f, -0.000479f, -0.000708f, -0.000376f, -0.000072f, +0.000617f, -0.000074f, -0.000111f, +0.000153f, -0.000517f, - +0.000113f, -0.000706f, +0.000240f, +0.000177f, -0.000184f, +0.000273f - }, - { - +0.004804f, -0.137653f, +0.007321f, +0.010404f, +0.004517f, +0.009360f, -0.009766f, -0.003234f, +0.000198f, -0.001428f, - -0.003744f, -0.010706f, -0.014385f, +0.014989f, -0.057875f, -0.000925f, +0.014999f, +0.003370f, -0.004061f, +0.004900f, - +0.004206f, -0.001201f, +0.006192f, -0.004905f, +0.007033f, -0.000456f, +0.001200f, +0.002181f, -0.007657f, +0.000745f, - +0.000583f, +0.001270f, +0.001944f, +0.001631f, -0.004175f, +0.004255f, -0.004643f, -0.001407f, -0.000349f, -0.000255f, - +0.003167f, +0.003568f, -0.005933f, -0.001521f, -0.000500f, -0.000274f, -0.000862f, -0.003577f, +0.001861f, +0.002967f, - +0.000906f, -0.002687f, +0.000683f, +0.002995f, +0.000028f, +0.000505f, +0.001151f, -0.001608f, -0.001124f, -0.000986f, - +0.000614f, +0.000355f, -0.000934f, -0.000733f, -0.000486f, -0.000316f, +0.000183f, +0.000742f, +0.000308f, +0.000121f, - -0.000256f, +0.000517f, -0.000163f, +0.000821f, -0.000241f, +0.001150f, -0.000887f, -0.000176f, -0.000333f, -0.000121f, - +0.000515f, +0.000644f, -0.000360f, +0.000499f, +0.000072f, -0.000077f, -0.000117f, -0.000171f, -0.000163f, -0.000041f, - -0.000586f, -0.000063f, -0.000201f, +0.000269f, -0.000142f, -0.000081f - }, - { - +0.000759f, -0.004422f, -0.002732f, -0.003040f, +0.001307f, +0.002165f, +0.001700f, -0.000763f, -0.002300f, -0.000862f, - +0.006441f, -0.008096f, -0.008093f, -0.069575f, -0.049775f, +0.005937f, -0.004676f, -0.012122f, +0.009347f, +0.014872f, - +0.006527f, -0.008715f, -0.002214f, -0.005335f, -0.002479f, +0.011804f, +0.006000f, +0.001445f, -0.001671f, -0.006482f, - -0.003109f, +0.003166f, -0.003010f, -0.001602f, +0.001893f, -0.004630f, +0.004620f, +0.005358f, +0.006233f, +0.001621f, - -0.004741f, +0.003798f, +0.001555f, +0.001009f, +0.001566f, -0.000046f, +0.000651f, -0.003146f, -0.002898f, -0.000176f, - +0.003334f, -0.001105f, +0.000318f, +0.000716f, +0.000250f, +0.000049f, +0.003843f, -0.001483f, -0.000919f, +0.000630f, - +0.001154f, -0.002683f, -0.001544f, +0.000892f, -0.000996f, +0.001797f, +0.000790f, -0.001546f, -0.000101f, +0.000521f, - +0.000150f, -0.000156f, +0.001004f, -0.000184f, -0.000544f, +0.000053f, -0.000800f, -0.000391f, +0.000347f, -0.000355f, - -0.000282f, +0.000106f, -0.000579f, -0.000566f, -0.000112f, -0.000298f, +0.000280f, +0.000159f, -0.000048f, +0.000048f, - +0.000305f, +0.000046f, -0.000117f, +0.000038f, +0.000402f, -0.000163f - } - }, - { - { - +0.017886f, +0.327081f, -0.142623f, +0.003856f, +0.008472f, -0.001280f, -0.003536f, -0.005976f, -0.009513f, -0.002177f, - +0.002531f, +0.012629f, -0.002629f, +0.002679f, -0.007276f, +0.000653f, +0.001628f, -0.010677f, +0.003116f, +0.003435f, - -0.005088f, -0.005395f, +0.000799f, +0.003730f, -0.004338f, -0.004833f, -0.002222f, -0.006367f, +0.009774f, +0.001468f, - +0.000206f, +0.004597f, -0.003646f, -0.000281f, -0.000213f, -0.001981f, +0.000813f, +0.001693f, +0.001399f, -0.005981f, - -0.003322f, -0.002572f, -0.004510f, -0.001138f, +0.003559f, +0.001403f, +0.001764f, -0.000395f, +0.002091f, +0.004203f, - +0.002112f, -0.002876f, +0.001472f, +0.001209f, +0.002211f, -0.000623f, +0.000173f, -0.000542f, +0.001049f, +0.001086f, - +0.001272f, -0.000012f, +0.001783f, -0.001317f, -0.000049f, +0.000288f, +0.000198f, +0.000370f, +0.000119f, +0.000447f, - -0.000160f, -0.000129f, -0.000584f, +0.000857f, +0.001037f, +0.000767f, +0.000575f, +0.000224f, -0.000178f, -0.000127f, - -0.000911f, -0.000290f, -0.000055f, +0.000011f, +0.000444f, -0.000439f, -0.000151f, -0.000152f, -0.000285f, +0.000041f, - -0.000341f, -0.000197f, +0.000148f, +0.000019f, +0.000119f, -0.000003f - }, - { - +0.001169f, +0.065454f, -0.042661f, +0.002397f, +0.003923f, +0.003916f, +0.001236f, +0.003896f, -0.001984f, -0.006250f, - +0.000128f, +0.003283f, -0.000109f, -0.004490f, +0.027486f, +0.007099f, -0.009540f, -0.002818f, -0.020240f, +0.003903f, - -0.000445f, +0.007214f, -0.004498f, -0.005324f, -0.001591f, -0.005221f, +0.002982f, -0.003645f, -0.001973f, +0.001216f, - -0.000552f, +0.006081f, -0.001347f, +0.002227f, +0.000024f, -0.002342f, +0.000538f, +0.002641f, -0.002541f, -0.003236f, - +0.000843f, +0.001525f, -0.002721f, +0.001722f, +0.002507f, -0.001010f, -0.000019f, -0.001626f, -0.001575f, +0.000965f, - +0.000666f, -0.002343f, -0.001744f, -0.000148f, -0.000647f, +0.000636f, -0.000154f, -0.000516f, +0.000773f, -0.000208f, - -0.001194f, -0.001656f, +0.000502f, -0.000563f, +0.000671f, -0.000323f, -0.000143f, -0.000643f, -0.000186f, +0.001112f, - -0.000704f, +0.000302f, -0.000209f, +0.000089f, +0.000123f, +0.000356f, -0.000192f, +0.000002f, -0.000202f, -0.000394f, - +0.000455f, +0.000191f, -0.000128f, +0.000523f, -0.000199f, -0.000302f, -0.001090f, -0.000574f, -0.000474f, -0.000441f, - +0.000527f, +0.000084f, +0.000344f, -0.000021f, -0.000281f, +0.000185f - }, - { - -0.007822f, -0.246335f, +0.026943f, +0.017421f, -0.004247f, -0.001263f, -0.002958f, +0.002852f, +0.001671f, +0.001214f, - +0.000539f, -0.003369f, -0.005235f, +0.009342f, -0.005666f, -0.005410f, -0.008718f, -0.008374f, +0.001697f, +0.004339f, - -0.000765f, -0.000559f, +0.014192f, +0.002232f, -0.008883f, -0.007141f, +0.001126f, -0.001252f, +0.004258f, -0.002172f, - -0.004477f, -0.002534f, -0.007487f, -0.000618f, -0.009068f, +0.008408f, -0.001978f, -0.000246f, -0.001297f, -0.003209f, - -0.002659f, +0.000529f, -0.006118f, -0.000371f, +0.002490f, +0.000705f, -0.001273f, +0.001284f, -0.001986f, +0.000532f, - +0.002096f, -0.000370f, -0.001266f, +0.000172f, +0.001043f, +0.000357f, -0.000087f, +0.000922f, -0.000256f, -0.001582f, - +0.000512f, +0.001659f, -0.000612f, -0.001694f, +0.000695f, -0.001562f, -0.000106f, +0.000894f, -0.000039f, +0.000114f, - -0.000099f, -0.000074f, -0.000532f, +0.000314f, -0.000210f, +0.000098f, -0.000016f, -0.000425f, +0.000723f, -0.000326f, - +0.000607f, +0.000441f, -0.000094f, +0.000567f, +0.000411f, -0.000104f, -0.000047f, -0.000070f, -0.000313f, +0.000318f, - +0.000151f, -0.000215f, -0.000057f, +0.000050f, +0.000277f, +0.000202f - }, - { - +0.057238f, +0.165187f, -0.020874f, +0.006651f, -0.009546f, -0.001512f, -0.005374f, -0.000645f, -0.000371f, +0.000637f, - -0.002012f, +0.004073f, -0.000011f, +0.000327f, -0.018790f, +0.008759f, +0.006156f, -0.025713f, +0.001595f, -0.006858f, - +0.001315f, -0.003263f, +0.005162f, -0.002628f, -0.000832f, +0.000592f, -0.003831f, -0.003192f, -0.004456f, -0.003691f, - -0.005685f, +0.003865f, +0.002947f, +0.003575f, -0.002794f, -0.001028f, -0.000413f, +0.004691f, -0.000365f, -0.002056f, - +0.001106f, -0.000938f, +0.000407f, +0.000672f, -0.001910f, -0.003279f, +0.000420f, +0.003263f, -0.000537f, +0.001075f, - +0.000318f, +0.000197f, +0.000411f, +0.003136f, +0.001426f, +0.000259f, -0.001757f, +0.000162f, +0.000376f, +0.002070f, - -0.001258f, +0.000660f, -0.000328f, +0.000191f, +0.000119f, +0.000287f, +0.000027f, +0.000689f, +0.000043f, -0.000175f, - +0.001065f, +0.000006f, -0.000112f, +0.000516f, +0.000387f, -0.000420f, -0.000370f, -0.000786f, -0.000012f, -0.000264f, - -0.000204f, -0.000311f, +0.000167f, +0.000035f, -0.000387f, -0.000095f, +0.000075f, -0.000075f, -0.000240f, +0.000280f, - +0.000071f, -0.000114f, -0.000311f, -0.000029f, -0.000116f, +0.000149f - }, - { - +0.003066f, +0.040804f, -0.001400f, +0.002254f, -0.000679f, -0.000072f, +0.000314f, -0.000487f, +0.000705f, -0.001304f, - +0.002850f, -0.001933f, -0.008080f, -0.001694f, +0.004132f, -0.013381f, -0.000297f, -0.069027f, -0.010299f, +0.020068f, - -0.012311f, -0.011895f, -0.011820f, -0.007368f, +0.007474f, +0.001615f, +0.002844f, +0.003634f, +0.002907f, -0.003692f, - -0.005831f, -0.001320f, -0.001552f, +0.001587f, +0.002907f, -0.000998f, -0.000472f, -0.004781f, -0.004923f, -0.005486f, - -0.003859f, -0.002794f, -0.002407f, +0.003746f, +0.002665f, +0.000283f, +0.001588f, -0.002414f, -0.001184f, -0.001171f, - -0.000901f, +0.001538f, -0.001776f, -0.000080f, +0.003796f, +0.000024f, +0.000146f, -0.003025f, +0.001464f, +0.000569f, - +0.000645f, +0.000427f, +0.000690f, +0.000980f, +0.000166f, +0.000560f, -0.001363f, -0.000279f, -0.000439f, -0.001535f, - +0.000576f, +0.000867f, -0.000558f, -0.000464f, +0.000227f, -0.001153f, -0.000187f, +0.000235f, -0.000097f, -0.000229f, - -0.000203f, +0.000060f, +0.000690f, +0.000073f, -0.000015f, +0.000728f, +0.000405f, +0.000191f, -0.000084f, +0.000217f, - -0.000008f, +0.000123f, -0.000258f, +0.000397f, -0.000241f, -0.000007f - }, - { - +0.100237f, +0.095145f, -0.062109f, +0.016462f, +0.005952f, -0.001185f, +0.001749f, +0.000260f, +0.004780f, +0.004648f, - +0.001223f, +0.001187f, +0.014683f, -0.005107f, +0.006022f, -0.004348f, -0.006877f, +0.003146f, -0.002839f, +0.002309f, - -0.001635f, +0.006647f, +0.000926f, -0.002411f, +0.000728f, +0.001056f, -0.000702f, -0.001419f, -0.001562f, +0.000267f, - +0.011196f, -0.000422f, -0.003167f, +0.000477f, +0.003117f, +0.002182f, +0.002704f, -0.002696f, -0.001716f, -0.001877f, - -0.009072f, -0.000543f, -0.003476f, -0.006116f, -0.002548f, +0.001005f, -0.000245f, +0.000546f, -0.002549f, -0.003460f, - +0.002267f, +0.000195f, -0.001162f, -0.000768f, +0.002516f, +0.002623f, +0.001678f, +0.002438f, +0.000644f, -0.000509f, - -0.000580f, -0.000134f, +0.001258f, -0.000529f, +0.001316f, +0.000066f, +0.000523f, +0.000171f, +0.000063f, -0.000141f, - -0.000085f, -0.000144f, +0.000156f, -0.001120f, -0.000534f, +0.000353f, -0.000661f, +0.000185f, +0.000241f, +0.000299f, - -0.000604f, -0.000344f, -0.000352f, +0.000355f, -0.000137f, -0.000446f, -0.000247f, +0.000204f, +0.000064f, +0.000113f, - -0.000042f, +0.000052f, -0.000003f, -0.000238f, +0.000235f, -0.000434f - }, - { - -0.000338f, -0.017583f, -0.005933f, +0.003987f, -0.001357f, -0.000293f, -0.001422f, +0.002419f, +0.001480f, +0.001026f, - +0.000773f, +0.004206f, +0.009144f, -0.013337f, +0.024726f, +0.005128f, -0.010786f, -0.004433f, +0.003685f, +0.020305f, - +0.000572f, -0.005643f, -0.036296f, -0.012432f, -0.000450f, +0.003077f, -0.005264f, +0.001836f, -0.001568f, -0.000681f, - +0.000196f, +0.003128f, +0.000589f, -0.003874f, +0.000543f, +0.005897f, +0.002217f, -0.000269f, +0.004222f, +0.000987f, - -0.001675f, +0.001451f, +0.002244f, -0.004791f, -0.001106f, +0.000122f, -0.000294f, -0.001750f, -0.000520f, +0.000188f, - -0.000016f, -0.000356f, +0.002202f, +0.000780f, +0.001952f, +0.000327f, +0.000478f, +0.001591f, -0.000921f, -0.001020f, - +0.000077f, -0.000728f, -0.001120f, +0.000011f, -0.001152f, -0.002070f, +0.000304f, +0.000604f, +0.000439f, -0.000108f, - -0.000616f, -0.000642f, +0.000581f, +0.000842f, -0.000444f, -0.000069f, -0.000119f, -0.000073f, -0.000099f, +0.000394f, - -0.000060f, -0.000187f, +0.000380f, +0.000192f, +0.000031f, +0.000196f, +0.000171f, -0.000125f, +0.000161f, +0.000555f, - -0.000106f, +0.000149f, -0.000161f, -0.000014f, +0.000170f, -0.000117f - }, - { - -0.071605f, -0.197385f, +0.060421f, -0.000386f, +0.006761f, +0.000737f, +0.004802f, -0.004142f, -0.008373f, -0.000190f, - -0.000891f, +0.005430f, -0.003432f, +0.009157f, +0.011726f, +0.002554f, -0.000042f, +0.008369f, +0.000091f, +0.002175f, - +0.004527f, -0.001302f, +0.002129f, -0.000684f, -0.000511f, -0.001704f, +0.002855f, +0.006674f, +0.000730f, -0.001326f, - -0.001277f, +0.003447f, -0.003557f, -0.002728f, +0.003830f, -0.007641f, -0.002364f, -0.001837f, +0.000688f, +0.002312f, - -0.001115f, -0.000201f, +0.002357f, +0.004010f, +0.001526f, +0.003646f, -0.002932f, +0.004429f, +0.001767f, +0.000778f, - -0.002485f, -0.000426f, -0.001829f, +0.000938f, +0.001245f, -0.000687f, +0.000887f, -0.001497f, +0.001114f, +0.000650f, - -0.000743f, -0.000445f, -0.000686f, +0.001469f, +0.001970f, +0.000621f, +0.000031f, +0.001870f, -0.000273f, +0.000583f, - -0.000414f, +0.000824f, +0.000479f, -0.000647f, +0.000594f, +0.000576f, -0.000014f, -0.000624f, +0.000307f, -0.000229f, - +0.000015f, -0.000616f, +0.000217f, -0.000117f, +0.000428f, -0.000330f, -0.000155f, -0.000400f, +0.000008f, -0.000080f, - -0.000200f, -0.000054f, +0.000146f, -0.000014f, +0.000101f, +0.000495f - }, - { - -0.000514f, -0.012916f, -0.013889f, +0.003050f, -0.000969f, +0.000884f, -0.000546f, +0.003121f, +0.002267f, +0.001004f, - +0.004679f, +0.001476f, -0.001769f, -0.008640f, -0.009674f, +0.010575f, +0.017602f, -0.000023f, -0.010384f, +0.000560f, - +0.009646f, +0.010081f, -0.007907f, +0.005007f, -0.018546f, +0.005010f, -0.003932f, -0.008823f, +0.008395f, +0.001921f, - +0.004712f, -0.001053f, +0.000791f, -0.000829f, -0.001742f, -0.001612f, -0.004981f, +0.001253f, -0.001245f, +0.000421f, - -0.002988f, -0.000991f, +0.001285f, +0.000310f, -0.004348f, -0.001755f, -0.000503f, -0.001900f, +0.003255f, -0.002109f, - +0.001352f, -0.001239f, -0.001620f, +0.001273f, +0.001165f, -0.001359f, +0.000108f, -0.001601f, -0.000592f, -0.000236f, - +0.000107f, +0.001572f, -0.000226f, +0.001601f, -0.001104f, -0.000189f, +0.000622f, +0.000777f, +0.001367f, +0.000338f, - +0.000079f, -0.000633f, -0.000091f, -0.000165f, +0.000291f, -0.000158f, +0.000340f, +0.000111f, +0.000088f, -0.000053f, - -0.000330f, +0.000227f, +0.000051f, -0.000262f, +0.000557f, -0.000231f, +0.000089f, -0.000176f, +0.000559f, -0.000033f, - -0.000497f, +0.000162f, -0.000039f, +0.000433f, +0.000013f, +0.000024f - }, - { - -0.004625f, -0.226470f, -0.021225f, +0.000694f, +0.007278f, -0.010416f, -0.001951f, +0.001725f, +0.002376f, +0.000942f, - +0.000655f, -0.002375f, +0.001123f, +0.007508f, +0.001487f, -0.002989f, +0.005917f, -0.005909f, -0.003469f, +0.004362f, - +0.000022f, -0.004877f, +0.004197f, +0.004336f, -0.003200f, -0.003944f, -0.003493f, -0.000408f, -0.003270f, +0.001768f, - -0.004890f, -0.003207f, -0.000617f, +0.002462f, +0.004588f, +0.003094f, +0.002306f, -0.004720f, +0.002669f, +0.002187f, - +0.002302f, -0.002425f, +0.004629f, +0.000783f, +0.001791f, +0.000383f, -0.001805f, -0.001063f, +0.000745f, +0.000433f, - -0.001788f, -0.000809f, +0.000032f, -0.000762f, +0.000371f, -0.000546f, -0.000669f, +0.000549f, +0.000713f, +0.000235f, - -0.000456f, -0.001207f, +0.000162f, -0.000011f, -0.000361f, +0.000151f, +0.001091f, +0.000112f, +0.000268f, +0.000301f, - +0.000345f, -0.000806f, -0.000268f, +0.000447f, -0.000187f, +0.000427f, -0.000717f, +0.000267f, -0.000229f, -0.000084f, - +0.000100f, +0.000075f, +0.000080f, +0.000381f, +0.000054f, +0.000112f, -0.000151f, +0.000143f, +0.000048f, -0.000118f, - -0.000156f, -0.000039f, -0.000014f, -0.000261f, +0.000003f, +0.000003f - }, - { - +0.002243f, +0.027955f, +0.002785f, -0.010311f, +0.000395f, -0.004818f, -0.001538f, +0.006241f, -0.003533f, -0.002108f, - +0.000732f, -0.004062f, +0.000005f, -0.006274f, -0.000907f, -0.003479f, -0.015286f, +0.015894f, -0.005806f, +0.001016f, - +0.025532f, -0.009178f, +0.007886f, +0.003150f, +0.003814f, +0.003062f, -0.004113f, +0.009717f, -0.008078f, +0.002030f, - -0.006058f, +0.005779f, +0.009417f, -0.005847f, +0.000021f, +0.001414f, +0.001177f, -0.002861f, -0.004214f, -0.000855f, - -0.000744f, +0.002221f, -0.000127f, -0.000626f, +0.001692f, -0.001335f, +0.001216f, -0.002595f, -0.002110f, -0.001010f, - +0.001968f, +0.000997f, +0.001393f, -0.000023f, +0.000841f, -0.002659f, +0.000151f, +0.000625f, +0.001036f, -0.000165f, - -0.000960f, -0.000396f, +0.000504f, +0.000748f, +0.000238f, +0.000767f, +0.000095f, -0.000646f, +0.000438f, -0.000280f, - -0.000473f, -0.000546f, -0.000866f, +0.000645f, -0.000441f, +0.000201f, +0.000024f, +0.000688f, +0.000081f, +0.000079f, - -0.000235f, +0.000180f, -0.000407f, -0.000037f, +0.000177f, +0.000201f, +0.000129f, +0.000165f, -0.000183f, +0.000107f, - +0.000204f, +0.000391f, +0.000113f, +0.000290f, -0.000391f, +0.000014f - }, - { - -0.035780f, -0.031402f, +0.020568f, -0.008190f, +0.002696f, +0.012815f, +0.007951f, +0.001908f, -0.002451f, +0.001621f, - +0.005765f, -0.003536f, -0.000076f, -0.009994f, -0.011479f, +0.006268f, +0.001465f, -0.001203f, +0.003514f, +0.004583f, - -0.003860f, -0.000425f, -0.001143f, -0.002683f, +0.000064f, -0.002060f, -0.002160f, -0.004313f, +0.000562f, -0.003923f, - +0.000838f, -0.001842f, +0.001832f, -0.004549f, -0.004477f, +0.001168f, +0.003051f, +0.001919f, +0.000988f, -0.002974f, - +0.003539f, +0.002983f, -0.006162f, -0.002970f, +0.000344f, -0.000647f, +0.000524f, +0.003448f, -0.004223f, +0.000037f, - -0.000877f, +0.002458f, +0.000595f, +0.002401f, +0.000555f, +0.000934f, +0.001625f, -0.000246f, -0.000675f, +0.001117f, - +0.000850f, +0.000031f, +0.000210f, +0.000143f, -0.000799f, +0.000416f, +0.000007f, +0.000533f, +0.000366f, +0.000318f, - -0.000401f, +0.000460f, -0.000977f, -0.000358f, -0.000065f, +0.000335f, +0.000277f, +0.000233f, +0.000192f, +0.000015f, - +0.000195f, -0.000385f, +0.000486f, +0.000024f, -0.000197f, -0.000142f, +0.000049f, +0.000356f, +0.000372f, -0.000516f, - +0.000152f, -0.000105f, +0.000328f, -0.000031f, +0.000060f, -0.000176f - }, - { - +0.000341f, +0.021034f, -0.002155f, +0.007638f, +0.001184f, +0.003780f, -0.004366f, +0.004316f, +0.000650f, -0.004145f, - -0.005854f, -0.003851f, +0.027681f, +0.006819f, +0.004108f, -0.005950f, -0.004810f, -0.000293f, -0.006363f, +0.000333f, - -0.013834f, +0.005172f, -0.014050f, -0.001765f, +0.005443f, +0.006864f, +0.001521f, -0.008928f, -0.003681f, -0.005175f, - +0.011718f, +0.008480f, +0.001963f, +0.002486f, +0.003486f, +0.003596f, -0.002625f, +0.004260f, +0.000555f, +0.000876f, - -0.001779f, -0.000620f, -0.001008f, +0.002002f, +0.002298f, +0.004106f, -0.000728f, +0.000308f, +0.000595f, -0.000754f, - +0.002760f, +0.001796f, +0.003481f, -0.002848f, -0.000991f, -0.000569f, +0.002250f, +0.000031f, +0.000385f, +0.001675f, - +0.000100f, +0.001477f, +0.000601f, -0.000858f, +0.000598f, +0.000981f, +0.001052f, -0.000928f, +0.000547f, +0.000046f, - +0.001592f, +0.001240f, +0.000662f, -0.001031f, -0.000061f, +0.000752f, +0.000931f, -0.000520f, +0.000784f, +0.000361f, - +0.000465f, -0.000509f, -0.000665f, +0.000110f, -0.000289f, +0.000836f, -0.000001f, -0.000182f, -0.000257f, -0.000269f, - +0.000330f, -0.000835f, -0.000331f, +0.000317f, +0.000081f, -0.000234f - }, - { - -0.022024f, -0.113415f, +0.016381f, +0.017916f, +0.003064f, +0.005969f, -0.001349f, -0.003438f, -0.004045f, -0.000279f, - -0.007469f, -0.007921f, -0.009380f, -0.011950f, -0.030396f, +0.005643f, +0.006340f, +0.001981f, +0.000730f, +0.004442f, - +0.002785f, +0.004087f, +0.001100f, +0.002042f, +0.001408f, +0.000440f, +0.000151f, +0.001885f, -0.005574f, -0.002382f, - +0.003027f, -0.002667f, +0.003782f, -0.001736f, +0.002161f, +0.001065f, -0.004478f, -0.000483f, -0.003188f, +0.001614f, - +0.005987f, -0.000921f, -0.003986f, -0.000204f, -0.000347f, +0.000614f, -0.003419f, -0.000322f, +0.002156f, +0.000560f, - +0.001858f, -0.000827f, -0.001116f, +0.001592f, +0.001654f, +0.000375f, +0.001836f, -0.001593f, +0.000193f, -0.000860f, - -0.000280f, +0.000554f, -0.001327f, +0.000260f, -0.000744f, -0.000542f, +0.000930f, +0.001348f, +0.000039f, -0.000622f, - -0.000129f, +0.000001f, +0.000328f, +0.000753f, +0.000397f, +0.000390f, -0.000634f, -0.000058f, -0.000036f, -0.000443f, - +0.000321f, +0.000596f, -0.000057f, +0.000253f, +0.000613f, +0.000270f, -0.000524f, -0.000073f, -0.000445f, -0.000157f, - -0.000056f, -0.000163f, -0.000096f, +0.000105f, +0.000041f, -0.000397f - }, - { - -0.000836f, -0.002935f, -0.001301f, -0.002446f, -0.000003f, -0.000227f, +0.001095f, -0.000367f, +0.001945f, +0.002927f, - -0.001005f, -0.005534f, -0.016803f, -0.005478f, -0.153628f, +0.022279f, -0.001070f, -0.006066f, +0.003771f, -0.003875f, - +0.022895f, -0.006942f, -0.012971f, -0.009001f, +0.012119f, +0.005419f, +0.005375f, +0.002278f, -0.001086f, -0.007950f, - -0.001183f, -0.003064f, +0.002448f, +0.000415f, +0.001191f, -0.007387f, +0.002394f, +0.010150f, +0.002139f, +0.002031f, - -0.000212f, -0.001349f, +0.002405f, -0.000123f, -0.000149f, +0.000994f, -0.001360f, -0.001108f, -0.001295f, -0.000411f, - +0.002227f, -0.000746f, -0.000990f, +0.000550f, +0.000179f, +0.001054f, +0.002923f, -0.001310f, -0.000628f, -0.000752f, - -0.000184f, -0.001863f, -0.000714f, -0.000514f, -0.000257f, +0.000941f, +0.001011f, -0.001577f, -0.000033f, +0.000577f, - +0.000246f, +0.000311f, +0.000154f, +0.000039f, -0.000489f, -0.000078f, -0.000534f, -0.000752f, +0.000272f, -0.000335f, - -0.000230f, +0.000419f, -0.000402f, -0.000768f, +0.000085f, -0.000152f, -0.000029f, +0.000518f, -0.000110f, +0.000020f, - +0.000195f, +0.000132f, -0.000001f, -0.000068f, +0.000269f, -0.000229f - } - }, - { - { - -0.014986f, +0.317761f, -0.071860f, +0.016828f, -0.002995f, -0.001141f, -0.000458f, -0.003720f, -0.004255f, +0.004767f, - +0.002878f, +0.005523f, -0.003210f, -0.002013f, -0.004112f, +0.003965f, +0.003587f, -0.000246f, +0.006658f, -0.003789f, - -0.001667f, -0.003656f, -0.000194f, +0.003720f, -0.000927f, -0.001925f, +0.003126f, -0.005430f, +0.006855f, +0.002151f, - +0.004385f, +0.005984f, -0.003483f, -0.000618f, -0.000726f, +0.001379f, +0.000735f, +0.001098f, +0.000792f, -0.006230f, - -0.002189f, +0.000700f, -0.002070f, -0.001191f, +0.000461f, -0.002109f, -0.000165f, -0.001079f, +0.000306f, +0.000567f, - +0.000264f, -0.001927f, +0.000321f, -0.000483f, +0.001038f, -0.001053f, +0.000968f, +0.000331f, +0.000353f, +0.000347f, - +0.001066f, -0.000881f, +0.000873f, -0.000516f, +0.000400f, +0.000495f, +0.000108f, -0.000240f, +0.000033f, +0.000529f, - +0.000446f, +0.000035f, -0.000311f, +0.000063f, +0.000204f, +0.000042f, -0.000034f, -0.000058f, +0.000455f, +0.000391f, - -0.000449f, -0.000298f, +0.000266f, +0.000332f, +0.000302f, -0.000109f, -0.000261f, +0.000048f, -0.000225f, +0.000006f, - -0.000098f, +0.000064f, +0.000196f, +0.000147f, +0.000179f, +0.000101f - }, - { - -0.003691f, +0.094266f, -0.020326f, -0.007418f, -0.008323f, +0.000235f, -0.002594f, +0.002193f, -0.002482f, -0.001568f, - +0.001898f, +0.001031f, -0.003317f, -0.007965f, +0.013886f, +0.008979f, -0.003298f, -0.001673f, -0.017640f, -0.000781f, - -0.006916f, +0.005031f, -0.002046f, -0.002849f, +0.006345f, +0.001782f, -0.001106f, -0.006090f, -0.002819f, -0.000417f, - -0.003615f, +0.006808f, +0.005343f, +0.002094f, +0.003113f, -0.004571f, -0.004357f, +0.001754f, -0.001451f, +0.000387f, - +0.001575f, +0.000978f, -0.002796f, +0.001070f, +0.004087f, -0.001987f, +0.000464f, -0.000217f, -0.000301f, -0.000261f, - -0.000437f, -0.000560f, +0.000039f, +0.000901f, -0.000993f, +0.000949f, -0.000980f, -0.000925f, +0.000837f, -0.000028f, - +0.000337f, -0.000180f, +0.000656f, -0.000740f, +0.000489f, +0.000071f, +0.000422f, -0.000493f, -0.000340f, +0.000187f, - -0.000435f, +0.000585f, -0.000302f, +0.000249f, +0.000276f, +0.000090f, -0.000263f, +0.000432f, +0.000169f, -0.000349f, - -0.000087f, +0.000212f, -0.000103f, +0.000283f, -0.000086f, +0.000230f, -0.000237f, -0.000048f, -0.000119f, -0.000504f, - +0.000505f, -0.000071f, +0.000175f, -0.000229f, -0.000352f, +0.000235f - }, - { - +0.006448f, -0.206543f, +0.047020f, +0.021010f, -0.007880f, -0.000256f, +0.000131f, -0.000704f, +0.000349f, -0.000337f, - -0.000331f, +0.002412f, -0.007389f, +0.005955f, -0.004928f, +0.002328f, +0.001726f, -0.001363f, -0.008505f, -0.002123f, - -0.002204f, -0.003271f, +0.005161f, -0.003269f, -0.002633f, -0.004878f, -0.001231f, -0.000907f, +0.004953f, -0.004523f, - -0.003571f, +0.004884f, +0.000337f, +0.002630f, -0.010185f, +0.007788f, +0.001775f, +0.002501f, -0.001706f, -0.000488f, - -0.001017f, +0.004877f, -0.000583f, -0.001034f, +0.000838f, -0.000907f, +0.000086f, +0.000865f, -0.002370f, -0.000014f, - +0.001440f, +0.000125f, -0.000837f, +0.001891f, +0.001515f, +0.000169f, +0.000130f, -0.000000f, -0.000458f, -0.001051f, - -0.000719f, +0.000541f, +0.000777f, -0.000561f, +0.001281f, -0.000450f, +0.000037f, +0.000467f, +0.000422f, -0.000067f, - -0.000483f, -0.000385f, -0.000200f, +0.000924f, -0.000321f, -0.000501f, +0.000074f, +0.000063f, +0.000586f, -0.000481f, - +0.000036f, -0.000047f, -0.000316f, +0.000234f, +0.000313f, -0.000373f, -0.000157f, -0.000139f, -0.000201f, +0.000291f, - -0.000110f, -0.000072f, +0.000209f, -0.000081f, +0.000042f, +0.000318f - }, - { - -0.053352f, +0.075052f, +0.022592f, +0.007095f, -0.000440f, +0.000168f, -0.003358f, +0.000326f, -0.001844f, +0.000265f, - -0.003133f, +0.002648f, -0.000396f, +0.001140f, -0.019899f, +0.001624f, +0.002809f, -0.020512f, +0.004727f, -0.004447f, - +0.001598f, -0.001913f, +0.006869f, -0.000120f, -0.000914f, +0.002667f, +0.000990f, +0.001662f, -0.000560f, +0.000000f, - -0.003340f, +0.000339f, -0.002061f, +0.000882f, -0.001569f, -0.002358f, -0.002728f, +0.003274f, -0.002253f, -0.001191f, - +0.002492f, +0.000274f, +0.000064f, -0.002106f, +0.000194f, +0.000521f, -0.000616f, +0.001196f, -0.001551f, +0.000402f, - +0.000138f, +0.000563f, -0.000453f, +0.000955f, +0.000940f, +0.001931f, -0.000796f, +0.000370f, -0.000305f, +0.001038f, - -0.001067f, +0.000863f, -0.001079f, +0.000207f, -0.000355f, +0.000160f, +0.000191f, -0.000093f, +0.000119f, -0.000044f, - +0.000795f, -0.000403f, -0.000216f, -0.000053f, -0.000086f, -0.000440f, -0.000318f, -0.000199f, +0.000400f, -0.000049f, - -0.000355f, -0.000307f, +0.000210f, +0.000330f, -0.000224f, -0.000151f, +0.000077f, -0.000136f, -0.000089f, +0.000195f, - -0.000028f, -0.000036f, +0.000043f, +0.000050f, -0.000218f, +0.000177f - }, - { - -0.002262f, +0.028607f, -0.002843f, +0.002682f, -0.001946f, -0.000274f, +0.000330f, -0.000751f, +0.001001f, -0.000961f, - +0.002141f, -0.001000f, -0.003468f, -0.001246f, +0.017519f, -0.000369f, +0.004656f, -0.011216f, +0.028724f, +0.011711f, - -0.006990f, +0.006823f, -0.000626f, -0.002716f, +0.004933f, -0.001930f, +0.000314f, -0.000614f, +0.002865f, +0.002702f, - +0.001550f, +0.000112f, -0.002783f, -0.002651f, +0.003863f, +0.000582f, +0.000892f, -0.002195f, -0.000990f, +0.001537f, - +0.001483f, +0.001323f, -0.001369f, -0.000004f, -0.000718f, +0.000563f, +0.000276f, -0.001039f, +0.001181f, +0.000181f, - -0.000050f, -0.000036f, -0.001479f, -0.001269f, +0.001127f, -0.001075f, +0.000530f, -0.002161f, +0.001270f, +0.000507f, - +0.001760f, +0.000391f, -0.001071f, +0.000124f, +0.000119f, +0.000357f, -0.000765f, +0.000211f, +0.000482f, -0.001063f, - +0.000184f, +0.000626f, -0.000233f, -0.000179f, +0.000982f, -0.000015f, +0.000193f, +0.000213f, +0.000397f, +0.000096f, - +0.000038f, -0.000055f, +0.000334f, -0.000037f, -0.000280f, +0.000183f, -0.000137f, +0.000127f, -0.000112f, +0.000373f, - +0.000044f, +0.000002f, -0.000354f, +0.000484f, +0.000052f, -0.000075f - }, - { - -0.085559f, -0.004003f, +0.060858f, +0.006198f, -0.002017f, +0.001047f, +0.001407f, -0.006750f, +0.002652f, +0.003932f, - -0.004535f, -0.003304f, +0.006577f, -0.009109f, +0.004970f, +0.001308f, -0.004280f, +0.000361f, -0.001476f, +0.004062f, - -0.002555f, +0.003516f, -0.000126f, -0.001718f, +0.002219f, +0.002335f, +0.001046f, +0.002069f, +0.001246f, -0.001794f, - +0.007760f, +0.000515f, -0.001215f, +0.001696f, +0.001783f, -0.000824f, +0.001206f, -0.003419f, -0.000629f, +0.000271f, - -0.003192f, +0.003017f, +0.000256f, +0.001398f, -0.001290f, -0.000014f, -0.002543f, +0.000490f, +0.001782f, -0.002495f, - +0.001598f, +0.000609f, -0.000193f, -0.000633f, +0.000544f, +0.001335f, -0.000048f, +0.000841f, -0.000328f, +0.000543f, - -0.000519f, -0.000599f, +0.001406f, -0.000532f, +0.000839f, -0.000087f, +0.000822f, +0.000099f, +0.000436f, -0.000165f, - -0.000229f, -0.000181f, -0.000011f, +0.000251f, +0.000280f, +0.000585f, -0.000385f, +0.000022f, -0.000020f, +0.000712f, - +0.000046f, +0.000027f, -0.000254f, +0.000566f, +0.000024f, -0.000034f, +0.000047f, +0.000020f, -0.000401f, +0.000170f, - +0.000107f, -0.000010f, +0.000037f, -0.000250f, +0.000304f, -0.000163f - }, - { - +0.000742f, -0.004361f, -0.000911f, +0.003732f, -0.000841f, +0.000536f, -0.000721f, +0.001967f, -0.000040f, -0.000304f, - -0.000391f, -0.001262f, +0.003792f, -0.011989f, +0.017713f, +0.011113f, +0.008238f, +0.001477f, -0.001758f, +0.013498f, - -0.000541f, -0.001755f, -0.024932f, -0.007213f, +0.001473f, +0.003063f, -0.002247f, +0.001264f, -0.002820f, -0.003844f, - -0.004243f, -0.002118f, +0.005446f, +0.001945f, -0.000804f, -0.001181f, -0.000689f, -0.000613f, +0.002575f, +0.002010f, - -0.001206f, -0.000621f, +0.002290f, -0.000539f, +0.002666f, -0.000041f, -0.000250f, -0.000873f, +0.000557f, -0.000491f, - -0.000591f, +0.000088f, +0.001002f, -0.000123f, +0.000352f, +0.000375f, +0.001111f, -0.000156f, -0.000826f, -0.000017f, - +0.000619f, +0.000037f, -0.000576f, +0.000412f, +0.000227f, -0.000842f, -0.000278f, +0.000170f, -0.000326f, -0.000179f, - +0.000248f, -0.000687f, -0.000409f, +0.000592f, +0.000298f, +0.000339f, +0.000228f, -0.000199f, -0.000570f, +0.000249f, - +0.000259f, -0.000487f, +0.000238f, +0.000015f, -0.000130f, +0.000077f, +0.000044f, +0.000163f, +0.000144f, +0.000388f, - -0.000151f, -0.000039f, -0.000072f, -0.000116f, +0.000070f, -0.000039f - }, - { - +0.061689f, -0.131908f, -0.025487f, -0.006480f, +0.000639f, +0.000162f, +0.004245f, -0.001574f, -0.000040f, +0.001695f, - -0.000698f, +0.005499f, -0.002615f, +0.000735f, -0.003350f, +0.000515f, -0.004088f, +0.000077f, +0.000644f, +0.001990f, - +0.000239f, -0.004474f, +0.000979f, -0.002219f, +0.001806f, +0.000484f, +0.002064f, +0.003093f, -0.001112f, +0.001052f, - +0.000751f, -0.001443f, -0.001838f, -0.003630f, +0.000630f, +0.000767f, +0.001121f, -0.000583f, -0.002316f, -0.000332f, - +0.002208f, +0.001511f, +0.001478f, -0.000271f, -0.001252f, +0.002703f, -0.001813f, +0.003538f, -0.000132f, +0.000777f, - -0.001471f, -0.000980f, -0.000177f, +0.001544f, -0.000281f, +0.001132f, +0.002185f, -0.000975f, -0.000202f, +0.000413f, - +0.000568f, +0.000008f, -0.000770f, -0.000315f, +0.000557f, +0.000429f, -0.000795f, +0.000979f, -0.000243f, +0.000786f, - -0.001107f, -0.000792f, +0.000178f, +0.000139f, +0.000592f, +0.000466f, +0.000468f, -0.000272f, +0.000922f, +0.000102f, - +0.000235f, -0.000117f, +0.000365f, +0.000078f, +0.000366f, -0.000391f, +0.000119f, -0.000243f, +0.000075f, -0.000003f, - +0.000165f, +0.000209f, +0.000004f, -0.000174f, -0.000087f, +0.000231f - }, - { - +0.001810f, +0.012293f, +0.001838f, +0.003888f, -0.003284f, +0.000262f, -0.000950f, +0.002541f, -0.000628f, -0.000716f, - +0.004427f, +0.000261f, +0.004517f, +0.004598f, -0.004562f, +0.008003f, +0.004434f, -0.000305f, +0.003133f, -0.005101f, - -0.003005f, +0.005772f, -0.005512f, +0.014090f, -0.017553f, +0.003682f, +0.003664f, -0.008504f, +0.003785f, -0.003254f, - +0.002560f, +0.001116f, +0.002954f, +0.002594f, +0.000036f, +0.000198f, -0.001632f, +0.001113f, -0.001895f, +0.001629f, - -0.000628f, -0.000911f, +0.000575f, +0.002686f, -0.000780f, -0.000010f, +0.000380f, -0.002884f, +0.002635f, -0.001738f, - +0.001143f, -0.000272f, -0.001500f, +0.000057f, -0.000324f, -0.001399f, +0.000364f, -0.001521f, +0.001184f, +0.000159f, - +0.000299f, +0.001171f, -0.001174f, +0.000710f, -0.000451f, -0.000041f, +0.000148f, -0.000128f, -0.000356f, +0.000487f, - +0.000656f, -0.000164f, +0.000564f, -0.000066f, +0.000181f, -0.000283f, +0.000004f, +0.000283f, +0.000218f, +0.000137f, - -0.000078f, +0.000052f, -0.000078f, -0.000442f, +0.000318f, -0.000354f, +0.000158f, -0.000228f, +0.000403f, +0.000017f, - -0.000083f, +0.000040f, -0.000263f, +0.000185f, -0.000149f, +0.000151f - }, - { - +0.005499f, -0.149517f, +0.039529f, -0.001598f, +0.006454f, -0.007507f, -0.002259f, -0.003668f, -0.000728f, -0.002314f, - +0.003432f, -0.000421f, -0.005646f, +0.000038f, +0.006535f, -0.005455f, +0.011117f, +0.003957f, -0.003423f, +0.010497f, - +0.005274f, -0.005698f, +0.002061f, +0.003975f, -0.003710f, +0.000167f, +0.002816f, +0.001219f, -0.003920f, +0.001774f, - -0.004376f, -0.003815f, +0.000438f, +0.000055f, -0.003403f, +0.002308f, +0.002929f, -0.004792f, +0.002766f, +0.001548f, - +0.002425f, -0.002311f, +0.003051f, +0.001271f, +0.001825f, -0.001267f, -0.001807f, +0.000618f, -0.000166f, +0.000032f, - -0.001085f, -0.000448f, +0.000208f, -0.001212f, +0.000990f, +0.000691f, -0.000127f, -0.000548f, -0.000203f, -0.000782f, - +0.000312f, -0.000520f, -0.000104f, +0.000328f, -0.000588f, +0.000142f, +0.000932f, -0.000348f, +0.000003f, -0.000100f, - +0.000253f, -0.000529f, +0.000096f, +0.000351f, -0.000180f, +0.000176f, -0.000514f, +0.000155f, -0.000114f, -0.000063f, - -0.000074f, -0.000010f, +0.000032f, -0.000072f, -0.000028f, +0.000129f, -0.000140f, +0.000226f, +0.000028f, -0.000100f, - +0.000222f, -0.000095f, +0.000158f, -0.000100f, +0.000222f, +0.000016f - }, - { - -0.002400f, +0.027601f, +0.008795f, -0.008021f, +0.002298f, -0.003636f, -0.001722f, +0.007454f, -0.000343f, -0.001206f, - +0.001704f, -0.001979f, -0.006783f, -0.005448f, +0.005918f, -0.003738f, -0.008574f, +0.015533f, -0.003608f, -0.010742f, - +0.012014f, -0.012019f, +0.004095f, +0.001932f, +0.004141f, +0.001175f, -0.008331f, +0.008968f, -0.003861f, +0.008261f, - +0.000424f, +0.000920f, +0.002933f, -0.004344f, +0.001465f, -0.001299f, -0.002473f, -0.002856f, -0.000874f, +0.000825f, - -0.000049f, -0.000599f, -0.000514f, +0.000863f, +0.000404f, +0.000469f, +0.001519f, -0.002258f, +0.000637f, +0.001040f, - +0.001829f, -0.000460f, +0.000291f, -0.000602f, +0.001745f, -0.000194f, +0.000597f, -0.000184f, -0.000360f, -0.000509f, - -0.000039f, -0.000151f, -0.000253f, +0.000574f, -0.000082f, -0.000290f, -0.000050f, -0.000222f, -0.000087f, -0.000117f, - +0.000541f, +0.000141f, -0.000393f, +0.000718f, -0.000419f, +0.000242f, -0.000233f, +0.000273f, +0.000016f, +0.000044f, - -0.000016f, +0.000249f, -0.000565f, -0.000050f, +0.000065f, +0.000252f, -0.000001f, +0.000154f, -0.000238f, +0.000042f, - -0.000065f, +0.000216f, +0.000022f, +0.000217f, -0.000256f, +0.000113f - }, - { - +0.021416f, +0.023611f, +0.000564f, -0.007739f, +0.002781f, -0.007020f, -0.003917f, +0.000622f, -0.003679f, +0.003996f, - +0.002645f, -0.002016f, +0.007377f, -0.001978f, -0.011449f, -0.001515f, -0.003989f, -0.003523f, +0.002926f, +0.000322f, - -0.000870f, +0.000308f, -0.003976f, -0.002778f, +0.000249f, -0.001907f, +0.001647f, -0.002831f, +0.001102f, -0.004964f, - -0.000247f, -0.006210f, +0.001561f, -0.001481f, -0.001378f, +0.001027f, +0.001562f, +0.001478f, +0.001235f, -0.003643f, - +0.000874f, +0.001455f, -0.002158f, -0.000272f, +0.001218f, +0.000761f, -0.000331f, +0.001750f, -0.003842f, +0.002869f, - +0.000259f, +0.000855f, -0.001870f, +0.000505f, -0.000659f, +0.000044f, +0.001468f, +0.000335f, -0.000706f, +0.000749f, - -0.000298f, -0.000451f, +0.000190f, +0.000067f, -0.000980f, +0.000607f, +0.000288f, +0.000099f, +0.000002f, +0.000419f, - -0.000566f, +0.000392f, -0.000547f, +0.000218f, +0.000216f, -0.000004f, +0.000127f, +0.000390f, -0.000046f, -0.000046f, - +0.000607f, -0.000122f, +0.000202f, +0.000030f, +0.000129f, -0.000217f, +0.000042f, -0.000247f, +0.000176f, -0.000045f, - +0.000105f, -0.000170f, +0.000163f, -0.000077f, +0.000172f, +0.000010f - }, - { - +0.000063f, +0.011793f, -0.013201f, +0.003806f, -0.001364f, +0.002328f, -0.005024f, +0.002680f, +0.000215f, -0.001369f, - -0.003675f, -0.001214f, -0.011717f, -0.036980f, +0.015594f, -0.017734f, -0.009342f, +0.000354f, -0.007794f, +0.001141f, - -0.010910f, +0.012174f, -0.007017f, +0.005515f, -0.006254f, -0.006233f, +0.001514f, -0.005500f, -0.002425f, -0.004541f, - +0.002415f, +0.001523f, +0.000154f, +0.002120f, -0.000974f, -0.000563f, -0.004428f, +0.000406f, +0.001214f, -0.002529f, - -0.003191f, +0.001791f, -0.001117f, -0.000710f, -0.001344f, -0.000225f, -0.001213f, +0.000286f, +0.001798f, -0.001609f, - +0.000217f, -0.000525f, +0.001154f, -0.001782f, +0.000724f, -0.001037f, -0.000364f, -0.000504f, -0.000355f, +0.001217f, - -0.000066f, +0.001373f, -0.000478f, -0.000447f, +0.000317f, -0.000032f, +0.000305f, -0.000448f, +0.000721f, -0.000677f, - +0.000777f, +0.000164f, +0.000522f, -0.000187f, +0.000448f, +0.000167f, +0.000049f, -0.000686f, +0.000387f, -0.000347f, - +0.000312f, +0.000004f, -0.000232f, +0.000229f, -0.000394f, +0.000475f, +0.000255f, -0.000203f, -0.000235f, -0.000099f, - +0.000329f, -0.000173f, -0.000241f, +0.000039f, +0.000332f, -0.000253f - }, - { - +0.026334f, -0.057030f, -0.001710f, +0.001390f, -0.010380f, +0.007952f, +0.012598f, -0.001161f, -0.000167f, -0.000266f, - -0.000716f, +0.002209f, -0.001465f, +0.012368f, +0.003318f, -0.006999f, -0.006615f, +0.003900f, +0.000930f, -0.000125f, - +0.002213f, +0.003724f, -0.003097f, +0.000501f, -0.000720f, -0.000193f, -0.001316f, +0.000715f, -0.001925f, -0.003588f, - +0.002285f, -0.003011f, +0.002348f, -0.001146f, +0.003727f, +0.000912f, -0.003473f, +0.000887f, -0.002655f, -0.000164f, - +0.000755f, -0.003094f, -0.002884f, -0.000616f, -0.001666f, +0.000012f, -0.001720f, +0.000762f, +0.001173f, -0.000366f, - +0.001290f, -0.000497f, -0.000824f, +0.001375f, +0.000807f, -0.000287f, +0.001147f, -0.001070f, +0.000743f, +0.000076f, - +0.000082f, +0.000669f, -0.000219f, +0.000492f, -0.000609f, -0.000438f, +0.000871f, +0.000338f, -0.000339f, +0.000013f, - +0.000068f, -0.000240f, +0.000380f, -0.000219f, -0.000170f, +0.000303f, -0.000074f, +0.000039f, -0.000055f, -0.000303f, - -0.000131f, +0.000120f, -0.000251f, -0.000105f, +0.000062f, -0.000141f, +0.000168f, +0.000399f, -0.000414f, +0.000052f, - +0.000187f, -0.000365f, +0.000028f, +0.000081f, +0.000179f, -0.000281f - }, - { - +0.000696f, -0.007471f, -0.003985f, -0.000763f, -0.001042f, -0.000923f, +0.000141f, +0.000382f, +0.001945f, +0.001046f, - -0.003430f, -0.004151f, -0.008851f, +0.053530f, -0.095672f, +0.008332f, -0.004444f, -0.005246f, -0.004454f, -0.012815f, - +0.007333f, -0.013923f, -0.005805f, -0.000109f, +0.005236f, -0.000441f, +0.001683f, -0.002736f, -0.001264f, -0.003050f, - +0.000500f, -0.003227f, +0.002848f, +0.000047f, +0.002730f, -0.003426f, +0.001818f, +0.003091f, -0.002118f, -0.000016f, - +0.001134f, -0.001774f, +0.000997f, -0.000781f, -0.000017f, +0.000116f, -0.001018f, -0.000249f, -0.001383f, +0.000406f, - +0.001928f, -0.001137f, +0.000231f, -0.001313f, -0.002696f, -0.000602f, +0.001326f, -0.000765f, +0.000100f, -0.000917f, - -0.000312f, -0.000958f, -0.000211f, -0.000687f, -0.000418f, -0.000573f, +0.000309f, -0.000396f, -0.000014f, +0.000568f, - +0.000207f, +0.000839f, -0.000298f, +0.000020f, -0.000120f, -0.000013f, +0.000217f, -0.000230f, +0.000182f, -0.000234f, - -0.000435f, +0.000053f, -0.000085f, -0.000082f, -0.000121f, -0.000082f, -0.000062f, +0.000113f, -0.000040f, +0.000157f, - -0.000113f, -0.000061f, +0.000078f, -0.000063f, +0.000151f, -0.000259f - } - }, - { - { - +0.015168f, +0.151232f, +0.076229f, -0.008087f, +0.002014f, -0.000174f, -0.000486f, -0.002577f, +0.002093f, +0.000357f, - +0.002247f, +0.003008f, +0.000506f, -0.004324f, -0.000145f, +0.004750f, -0.000125f, +0.006220f, -0.003619f, -0.002279f, - +0.001784f, -0.001179f, -0.001201f, +0.000457f, +0.000528f, +0.000157f, +0.003244f, -0.001887f, +0.001887f, +0.002201f, - +0.006753f, +0.002111f, -0.000339f, +0.000302f, -0.000800f, +0.003530f, -0.001595f, +0.002397f, +0.000009f, -0.003811f, - -0.001345f, -0.000435f, -0.000033f, -0.000151f, -0.000958f, -0.000347f, -0.000324f, -0.002979f, -0.000006f, +0.000017f, - +0.000013f, -0.000049f, -0.000457f, -0.000149f, -0.000086f, -0.000534f, +0.000562f, +0.000722f, -0.000575f, +0.000304f, - +0.000598f, -0.000169f, -0.000155f, -0.000083f, -0.000031f, +0.000448f, +0.000141f, +0.000047f, -0.000057f, +0.000090f, - +0.000642f, -0.000209f, +0.000420f, +0.000031f, -0.000361f, -0.000200f, +0.000135f, +0.000211f, +0.000155f, +0.000192f, - +0.000190f, -0.000009f, +0.000159f, +0.000242f, +0.000200f, +0.000066f, -0.000032f, -0.000061f, -0.000055f, -0.000113f, - +0.000121f, +0.000047f, +0.000128f, +0.000196f, +0.000096f, +0.000117f - }, - { - +0.002752f, +0.048993f, +0.012198f, -0.009312f, -0.005428f, -0.001528f, -0.001577f, -0.000221f, +0.000309f, +0.000413f, - +0.000890f, -0.001720f, -0.002116f, -0.000453f, +0.004191f, +0.006210f, -0.007460f, -0.002457f, -0.010159f, -0.004551f, - -0.003890f, -0.001692f, +0.000696f, -0.000988f, +0.008640f, +0.002059f, -0.002621f, -0.006979f, -0.002343f, -0.002204f, - -0.000206f, +0.003790f, +0.005699f, +0.002024f, +0.003316f, -0.002290f, -0.001037f, -0.001379f, +0.000025f, +0.001152f, - -0.001757f, +0.002202f, +0.000168f, +0.000260f, +0.001960f, -0.001095f, +0.000091f, -0.000541f, +0.000328f, -0.000484f, - -0.000219f, +0.000325f, +0.000772f, +0.000170f, -0.000191f, -0.000165f, -0.000902f, -0.000425f, +0.000141f, +0.000238f, - +0.000097f, +0.000762f, +0.000183f, -0.000300f, +0.000089f, +0.000428f, +0.000539f, +0.000212f, -0.000458f, -0.000237f, - +0.000164f, -0.000191f, -0.000153f, +0.000057f, +0.000345f, +0.000070f, -0.000232f, +0.000095f, +0.000277f, +0.000016f, - -0.000050f, +0.000051f, +0.000021f, -0.000073f, +0.000170f, +0.000217f, +0.000068f, -0.000012f, -0.000064f, -0.000006f, - -0.000020f, +0.000080f, +0.000066f, -0.000141f, -0.000124f, +0.000020f - }, - { - -0.001463f, -0.106686f, -0.031695f, +0.012274f, +0.009037f, +0.000586f, +0.000607f, -0.000171f, +0.000066f, +0.000235f, - -0.003783f, -0.000085f, +0.003424f, -0.000121f, -0.005329f, +0.003374f, +0.000336f, -0.000581f, -0.007086f, -0.004622f, - -0.004658f, +0.006389f, -0.001389f, -0.001728f, -0.001900f, -0.002222f, -0.002271f, +0.000551f, +0.000673f, -0.000788f, - -0.001092f, +0.001618f, +0.005153f, -0.001502f, -0.002435f, +0.001244f, +0.002406f, +0.002501f, -0.002175f, +0.000397f, - +0.000755f, +0.002654f, +0.002454f, -0.001047f, -0.000491f, -0.000050f, +0.000406f, +0.000647f, -0.000649f, -0.000003f, - -0.001244f, +0.000922f, +0.000291f, +0.002128f, +0.001889f, -0.000293f, -0.000202f, -0.000204f, -0.000625f, -0.000540f, - -0.000657f, +0.000359f, +0.000230f, +0.000361f, +0.000324f, +0.000598f, -0.000339f, +0.000318f, +0.000418f, +0.000028f, - -0.000742f, -0.000305f, +0.000403f, +0.000542f, -0.000221f, -0.000298f, +0.000004f, +0.000261f, -0.000047f, +0.000115f, - -0.000310f, -0.000270f, -0.000114f, -0.000015f, +0.000104f, -0.000147f, -0.000106f, -0.000179f, +0.000046f, +0.000112f, - -0.000092f, -0.000030f, +0.000112f, -0.000062f, -0.000007f, +0.000205f - }, - { - +0.034720f, -0.006430f, -0.004111f, +0.004588f, -0.001600f, -0.001547f, -0.001468f, -0.000099f, -0.000434f, -0.001573f, - -0.001425f, -0.000280f, -0.002060f, -0.000949f, -0.009971f, -0.002142f, +0.001519f, -0.010974f, -0.005030f, -0.001807f, - +0.001148f, +0.001529f, +0.001748f, +0.001923f, +0.000593f, -0.000045f, +0.001254f, +0.000792f, +0.000812f, +0.001150f, - -0.000087f, -0.001855f, -0.001898f, -0.000640f, -0.000494f, -0.001752f, -0.001876f, +0.000562f, -0.000461f, -0.000173f, - +0.000621f, -0.000588f, -0.000699f, -0.000272f, -0.000472f, +0.001463f, +0.000003f, +0.000511f, -0.000669f, -0.000645f, - +0.000406f, -0.000348f, +0.000339f, +0.000363f, +0.000895f, +0.001499f, +0.000199f, +0.000160f, -0.000023f, -0.000036f, - -0.000289f, +0.000134f, -0.000231f, +0.000251f, -0.000284f, +0.000210f, +0.000407f, -0.000402f, +0.000171f, +0.000280f, - -0.000140f, -0.000228f, -0.000273f, -0.000085f, -0.000584f, -0.000112f, -0.000158f, +0.000125f, +0.000152f, +0.000204f, - -0.000127f, -0.000040f, -0.000033f, +0.000092f, -0.000021f, -0.000105f, -0.000028f, -0.000157f, +0.000016f, +0.000103f, - -0.000003f, -0.000015f, +0.000085f, +0.000023f, -0.000030f, +0.000036f - }, - { - +0.000838f, +0.016475f, +0.002269f, +0.000706f, -0.000224f, +0.000258f, -0.000325f, -0.000063f, +0.000388f, +0.000037f, - +0.000225f, -0.001227f, -0.000959f, +0.001712f, +0.009257f, +0.000709f, -0.004931f, +0.019921f, +0.024283f, +0.005008f, - -0.001002f, +0.000283f, +0.004166f, +0.003600f, -0.000175f, -0.000925f, -0.002792f, -0.000126f, +0.000836f, +0.002339f, - +0.005459f, -0.001794f, -0.001663f, -0.002560f, +0.002272f, +0.001564f, -0.000462f, +0.001863f, -0.000824f, +0.000344f, - +0.000778f, +0.001764f, +0.000444f, -0.000656f, -0.001595f, +0.000183f, -0.000514f, +0.000974f, +0.000847f, +0.000875f, - -0.000232f, -0.000834f, -0.000955f, -0.000490f, -0.000808f, -0.000366f, +0.000052f, -0.001016f, +0.000385f, +0.001160f, - +0.001135f, -0.000312f, -0.000635f, -0.000215f, +0.000257f, +0.000088f, +0.000353f, -0.000101f, +0.000121f, -0.000301f, - -0.000055f, +0.000322f, -0.000032f, +0.000103f, +0.000428f, +0.000399f, +0.000334f, +0.000238f, +0.000292f, +0.000350f, - +0.000195f, +0.000019f, -0.000293f, +0.000012f, -0.000038f, -0.000081f, -0.000032f, -0.000039f, +0.000154f, +0.000176f, - +0.000057f, -0.000001f, -0.000143f, +0.000095f, +0.000163f, +0.000101f - }, - { - +0.052143f, -0.085666f, -0.018463f, -0.000186f, +0.000814f, +0.000640f, +0.000331f, -0.002669f, -0.001100f, +0.001561f, - -0.001312f, -0.000620f, -0.004909f, +0.000678f, +0.000657f, -0.001264f, -0.001140f, -0.000164f, +0.001599f, +0.001615f, - +0.001726f, +0.000869f, -0.000225f, -0.001604f, +0.001872f, +0.001186f, +0.002778f, +0.000358f, +0.000939f, +0.001096f, - +0.003696f, -0.001435f, +0.002319f, +0.001513f, +0.002056f, -0.001420f, -0.001262f, -0.001410f, +0.000133f, +0.000073f, - +0.000477f, -0.001082f, -0.000097f, +0.001448f, +0.000492f, -0.000815f, -0.001284f, -0.000232f, +0.001532f, +0.000294f, - -0.000878f, +0.000754f, +0.000705f, -0.000063f, -0.000158f, +0.000068f, +0.000737f, +0.000757f, +0.000430f, -0.000485f, - -0.000152f, +0.000133f, +0.000523f, -0.000125f, +0.000111f, +0.000353f, +0.000479f, +0.000346f, +0.000000f, -0.000274f, - -0.000082f, +0.000087f, -0.000355f, +0.000492f, +0.000188f, +0.000228f, +0.000238f, +0.000013f, +0.000036f, +0.000392f, - +0.000083f, -0.000062f, -0.000078f, +0.000052f, +0.000325f, +0.000205f, +0.000062f, -0.000027f, -0.000253f, -0.000033f, - +0.000102f, +0.000119f, -0.000011f, -0.000123f, +0.000002f, +0.000202f - }, - { - +0.000455f, +0.006888f, -0.001990f, -0.002220f, +0.000032f, +0.000499f, +0.000460f, +0.000037f, +0.000218f, -0.000664f, - -0.000143f, -0.000094f, -0.002748f, +0.011194f, -0.000519f, +0.007027f, +0.006389f, +0.000995f, +0.006703f, +0.002668f, - -0.002601f, -0.003417f, -0.007464f, -0.016643f, -0.000619f, +0.003069f, -0.000458f, -0.002243f, -0.001746f, -0.002731f, - -0.000319f, -0.002086f, +0.002694f, +0.002443f, +0.000732f, -0.001901f, -0.001353f, +0.000829f, +0.000683f, +0.001395f, - +0.001067f, -0.000897f, +0.000282f, +0.000544f, +0.002527f, +0.000373f, +0.000298f, -0.000273f, -0.000368f, -0.000874f, - -0.000349f, +0.000689f, +0.000250f, +0.000204f, +0.000214f, +0.000352f, +0.000864f, -0.000507f, -0.000223f, +0.000400f, - -0.000114f, +0.000009f, +0.000013f, +0.000244f, -0.000019f, -0.000274f, -0.000436f, +0.000442f, -0.000245f, -0.000038f, - -0.000460f, -0.000193f, -0.000328f, +0.000156f, +0.000510f, +0.000447f, +0.000494f, -0.000031f, -0.000393f, -0.000224f, - +0.000108f, +0.000143f, -0.000037f, -0.000008f, -0.000135f, +0.000095f, -0.000034f, +0.000102f, +0.000071f, -0.000130f, - -0.000022f, -0.000169f, -0.000006f, -0.000009f, -0.000035f, +0.000024f - }, - { - -0.043950f, -0.021860f, -0.006546f, -0.004499f, -0.003146f, +0.000058f, +0.000649f, +0.000087f, +0.001100f, +0.001178f, - +0.002566f, +0.000361f, -0.000624f, -0.001500f, -0.001530f, +0.000242f, -0.004533f, -0.003282f, +0.002636f, +0.000587f, - -0.000088f, -0.001442f, -0.000187f, +0.000666f, -0.001668f, +0.001551f, +0.002223f, +0.000162f, -0.000434f, +0.002635f, - -0.000476f, -0.002006f, -0.001919f, -0.002546f, +0.000206f, +0.004154f, +0.000493f, +0.000665f, -0.002789f, -0.002099f, - +0.000695f, +0.002336f, +0.001884f, -0.000158f, -0.000789f, -0.000763f, +0.000376f, +0.001857f, -0.000594f, +0.000859f, - +0.000031f, -0.001605f, -0.000034f, +0.000325f, +0.000228f, +0.001586f, +0.000987f, +0.000511f, -0.000424f, -0.000556f, - +0.000914f, -0.000338f, +0.000009f, -0.000420f, +0.000321f, -0.000279f, -0.000119f, +0.000115f, +0.000214f, +0.000154f, - -0.000460f, -0.000799f, +0.000024f, +0.000416f, +0.000269f, +0.000350f, +0.000617f, +0.000270f, +0.000519f, +0.000163f, - +0.000282f, +0.000167f, -0.000052f, +0.000234f, +0.000037f, -0.000088f, +0.000051f, -0.000087f, -0.000074f, +0.000325f, - +0.000140f, +0.000105f, +0.000049f, -0.000141f, -0.000052f, -0.000034f - }, - { - +0.000257f, +0.016239f, +0.008321f, +0.001370f, -0.000412f, -0.000494f, +0.000375f, +0.000543f, -0.000484f, -0.000296f, - +0.002550f, +0.000114f, +0.003728f, -0.000383f, +0.004054f, +0.005484f, +0.002340f, -0.003043f, +0.005462f, -0.007895f, - -0.000925f, +0.002111f, -0.001328f, +0.007236f, -0.006343f, -0.003076f, +0.000345f, -0.000028f, -0.002682f, -0.003150f, - +0.000714f, +0.002846f, +0.002792f, +0.001582f, +0.000759f, +0.000670f, -0.000129f, -0.000448f, +0.001066f, -0.000272f, - +0.000270f, +0.000658f, -0.000459f, +0.001260f, +0.001572f, +0.000825f, -0.000154f, -0.000968f, +0.000064f, +0.000041f, - -0.000142f, +0.000249f, -0.001001f, -0.001072f, -0.000397f, -0.000420f, -0.000020f, -0.000061f, +0.000737f, -0.000009f, - +0.000229f, -0.000185f, +0.000220f, -0.000476f, +0.000069f, -0.000655f, -0.000323f, -0.000130f, -0.000218f, +0.000579f, - +0.000222f, -0.000368f, +0.000296f, -0.000102f, +0.000089f, +0.000049f, -0.000225f, +0.000288f, +0.000143f, +0.000112f, - -0.000062f, -0.000046f, -0.000237f, -0.000198f, -0.000087f, -0.000001f, +0.000099f, +0.000064f, +0.000161f, -0.000004f, - +0.000152f, -0.000042f, -0.000158f, +0.000008f, -0.000018f, +0.000175f - }, - { - -0.006324f, -0.089693f, +0.002743f, +0.002274f, +0.003309f, +0.007966f, -0.012737f, -0.004371f, -0.001997f, -0.000686f, - +0.000482f, +0.000679f, -0.002051f, -0.004511f, +0.005264f, +0.000091f, +0.010663f, -0.000189f, -0.001188f, +0.007015f, - +0.003492f, +0.001718f, -0.000687f, +0.001231f, -0.002030f, +0.000337f, +0.002480f, -0.000327f, -0.000543f, +0.000394f, - -0.001504f, -0.002497f, -0.003273f, -0.001351f, -0.001390f, -0.000027f, +0.000920f, +0.000290f, +0.000572f, +0.001374f, - +0.000835f, +0.000707f, +0.000493f, +0.001021f, +0.001146f, +0.000277f, -0.001285f, +0.000078f, -0.000660f, +0.000717f, - +0.000250f, -0.000366f, +0.000023f, -0.000038f, +0.000302f, +0.000788f, -0.000149f, -0.000564f, -0.000492f, -0.000383f, - -0.000068f, -0.000105f, -0.000436f, +0.000079f, -0.000150f, +0.000194f, +0.000165f, +0.000425f, -0.000443f, +0.000022f, - +0.000071f, -0.000056f, +0.000102f, -0.000121f, +0.000137f, -0.000213f, +0.000077f, -0.000166f, -0.000125f, +0.000004f, - -0.000382f, +0.000039f, +0.000144f, -0.000241f, +0.000185f, +0.000147f, +0.000103f, +0.000169f, +0.000082f, +0.000040f, - +0.000109f, -0.000058f, +0.000001f, +0.000148f, +0.000092f, +0.000145f - }, - { - +0.001527f, +0.018775f, +0.004715f, -0.000591f, -0.001775f, +0.000786f, +0.001032f, +0.001653f, +0.000728f, +0.001354f, - +0.001006f, -0.000962f, -0.003030f, -0.006799f, +0.008449f, -0.007599f, +0.002895f, +0.002446f, +0.002067f, -0.005687f, - -0.002258f, -0.002811f, +0.000359f, +0.001083f, +0.003143f, +0.000851f, -0.001107f, -0.000011f, +0.002368f, +0.000793f, - +0.002453f, +0.002549f, -0.000616f, -0.002278f, -0.001756f, +0.000068f, -0.002664f, -0.000526f, -0.000690f, +0.001153f, - -0.000470f, -0.000656f, +0.000692f, +0.000509f, -0.000129f, +0.001099f, +0.000573f, -0.001021f, +0.001741f, +0.001398f, - +0.000866f, +0.000283f, -0.000330f, +0.000236f, +0.000310f, +0.000144f, +0.000096f, +0.000027f, -0.000513f, +0.000369f, - -0.000289f, -0.000300f, +0.000021f, +0.000164f, +0.000285f, -0.000333f, -0.000284f, +0.000417f, -0.000203f, +0.000098f, - +0.000146f, -0.000275f, +0.000248f, +0.000172f, -0.000164f, +0.000183f, -0.000074f, -0.000186f, +0.000011f, +0.000064f, - +0.000095f, +0.000051f, -0.000187f, -0.000276f, -0.000011f, +0.000089f, -0.000026f, +0.000051f, -0.000116f, -0.000173f, - +0.000021f, -0.000024f, +0.000020f, +0.000065f, +0.000122f, +0.000075f - }, - { - -0.004786f, +0.045268f, +0.003347f, -0.000645f, +0.003697f, -0.007600f, -0.007744f, -0.001645f, +0.001197f, +0.003449f, - -0.001973f, -0.001369f, +0.002477f, +0.003202f, -0.003432f, -0.008257f, -0.003042f, -0.000849f, +0.000108f, -0.001802f, - +0.000460f, -0.000226f, -0.002683f, -0.000547f, -0.000807f, -0.000502f, +0.000109f, -0.001423f, -0.001268f, +0.000221f, - -0.004354f, -0.003744f, -0.000793f, -0.000534f, +0.000698f, -0.000427f, +0.000653f, +0.000872f, -0.000668f, -0.002159f, - +0.000553f, -0.001037f, -0.000391f, +0.001672f, +0.001221f, +0.000136f, +0.000037f, -0.000924f, -0.000133f, +0.000004f, - +0.001865f, -0.000339f, -0.000746f, -0.000157f, -0.000218f, -0.000272f, +0.000144f, +0.000704f, -0.000178f, -0.000033f, - -0.000604f, -0.000214f, -0.000060f, +0.000120f, -0.000556f, +0.000126f, +0.000490f, -0.000132f, +0.000051f, +0.000243f, - +0.000082f, -0.000222f, +0.000115f, +0.000046f, +0.000197f, +0.000179f, +0.000072f, +0.000245f, -0.000277f, +0.000097f, - +0.000314f, +0.000292f, +0.000054f, +0.000154f, +0.000012f, -0.000061f, -0.000159f, -0.000202f, +0.000022f, +0.000231f, - +0.000168f, +0.000065f, +0.000002f, -0.000010f, +0.000082f, +0.000145f - }, - { - -0.000469f, +0.000754f, -0.003374f, +0.001740f, +0.000131f, -0.000020f, -0.000906f, -0.000812f, +0.000951f, +0.000402f, - -0.001048f, -0.002104f, -0.008358f, -0.031682f, -0.001001f, -0.005760f, -0.007497f, -0.003008f, -0.003956f, -0.002050f, - -0.001266f, +0.000663f, +0.008090f, -0.000945f, -0.006870f, -0.008624f, +0.001136f, -0.004991f, -0.002857f, +0.000176f, - -0.000284f, +0.000509f, -0.001597f, +0.002668f, -0.000564f, -0.002837f, -0.001738f, -0.001146f, +0.000485f, -0.001478f, - -0.002036f, -0.000405f, -0.000267f, -0.001950f, -0.000864f, -0.000749f, +0.000078f, +0.000276f, +0.000530f, -0.000149f, - -0.001415f, -0.000214f, +0.000381f, -0.000309f, +0.000880f, -0.000461f, -0.001271f, +0.000058f, -0.000068f, +0.000227f, - +0.000118f, +0.000136f, +0.000265f, +0.000077f, +0.000057f, -0.000078f, -0.000160f, -0.000247f, +0.000563f, +0.000030f, - +0.000194f, +0.000163f, +0.000061f, +0.000317f, +0.000330f, +0.000157f, -0.000151f, +0.000022f, -0.000182f, -0.000051f, - -0.000133f, +0.000032f, +0.000030f, -0.000029f, -0.000220f, +0.000166f, +0.000218f, +0.000032f, -0.000108f, -0.000056f, - -0.000021f, +0.000157f, +0.000017f, -0.000096f, +0.000216f, +0.000005f - }, - { - -0.018998f, +0.000195f, +0.001565f, -0.007510f, -0.005117f, +0.002266f, +0.010728f, +0.001125f, +0.001896f, +0.000073f, - +0.002665f, +0.000203f, +0.002110f, -0.005240f, +0.021070f, -0.003832f, -0.007314f, +0.001199f, +0.000460f, -0.001751f, - +0.002167f, +0.003228f, -0.001969f, -0.001740f, +0.000027f, +0.001347f, -0.000413f, -0.000201f, -0.002448f, -0.000676f, - -0.001455f, -0.000062f, +0.000123f, +0.001391f, +0.000548f, +0.000193f, -0.000515f, -0.000599f, -0.001746f, -0.000214f, - -0.001224f, -0.001612f, -0.002379f, -0.002214f, -0.001392f, -0.001100f, -0.000767f, +0.000640f, +0.000775f, +0.000440f, - -0.000022f, -0.000512f, +0.001207f, +0.000244f, +0.000659f, -0.000614f, -0.000594f, +0.000395f, +0.000012f, +0.000405f, - +0.000043f, -0.000178f, +0.000701f, -0.000317f, -0.000173f, -0.000324f, +0.000387f, +0.000114f, -0.000012f, +0.000137f, - -0.000208f, -0.000132f, +0.000180f, -0.000030f, -0.000205f, -0.000115f, +0.000310f, +0.000051f, -0.000316f, -0.000127f, - -0.000206f, -0.000162f, -0.000187f, -0.000181f, -0.000107f, -0.000289f, +0.000322f, +0.000194f, -0.000048f, -0.000003f, - +0.000169f, -0.000250f, -0.000095f, +0.000034f, +0.000011f, -0.000036f - }, - { - -0.001061f, -0.010061f, -0.001316f, -0.000843f, -0.000651f, -0.000017f, -0.001021f, +0.000220f, +0.001632f, -0.000791f, - -0.003424f, -0.002438f, -0.000969f, -0.017850f, +0.015972f, -0.007899f, -0.007231f, -0.005216f, -0.003007f, -0.003191f, - -0.009679f, -0.010878f, -0.002948f, +0.002933f, +0.002814f, -0.002210f, -0.000938f, -0.000739f, +0.000597f, -0.000973f, - -0.002419f, +0.000598f, +0.000964f, +0.000651f, +0.000852f, -0.000273f, +0.002023f, +0.000185f, -0.000840f, -0.000677f, - +0.000320f, +0.001160f, +0.000401f, -0.001692f, +0.000500f, -0.000546f, -0.000362f, -0.001288f, -0.000118f, +0.000897f, - -0.000032f, +0.000058f, +0.000096f, -0.001203f, -0.001854f, -0.000882f, +0.000043f, +0.000028f, +0.000239f, +0.000110f, - -0.000459f, -0.000419f, +0.000216f, -0.000731f, +0.000059f, -0.001051f, -0.000443f, +0.000589f, -0.000026f, +0.000280f, - +0.000062f, +0.000843f, +0.000144f, +0.000147f, +0.000042f, -0.000202f, +0.000065f, +0.000176f, +0.000186f, -0.000088f, - -0.000493f, -0.000289f, -0.000165f, +0.000089f, -0.000135f, -0.000171f, +0.000025f, -0.000042f, +0.000019f, +0.000011f, - -0.000020f, -0.000127f, +0.000025f, +0.000011f, -0.000008f, -0.000054f - } - }, - { - { - -0.011632f, +0.036114f, +0.026156f, -0.010866f, +0.002030f, +0.000580f, -0.000296f, -0.001546f, +0.001579f, -0.002814f, - +0.000155f, +0.002407f, +0.001163f, -0.001321f, -0.001896f, +0.003237f, -0.001433f, +0.001460f, -0.006882f, +0.002081f, - +0.000772f, -0.000626f, -0.002176f, -0.001138f, +0.001319f, +0.000582f, +0.002220f, -0.000448f, -0.000530f, -0.001205f, - +0.003632f, -0.000871f, +0.001383f, +0.002733f, +0.001366f, +0.002350f, -0.002434f, +0.002352f, +0.001339f, -0.000755f, - +0.000766f, -0.000204f, +0.000569f, +0.000834f, -0.001081f, +0.000340f, +0.001008f, -0.002540f, +0.000450f, +0.000803f, - +0.000718f, +0.000543f, -0.000435f, -0.000135f, -0.000062f, +0.000024f, -0.000171f, -0.000245f, -0.000526f, -0.000013f, - +0.000436f, +0.000040f, -0.000353f, -0.000271f, -0.000467f, -0.000023f, -0.000127f, +0.000072f, +0.000046f, +0.000003f, - +0.000333f, -0.000075f, +0.000506f, +0.000327f, -0.000087f, -0.000226f, +0.000163f, +0.000467f, -0.000158f, +0.000063f, - +0.000132f, -0.000013f, +0.000047f, +0.000120f, +0.000071f, -0.000185f, +0.000249f, -0.000093f, -0.000044f, -0.000097f, - +0.000127f, -0.000061f, +0.000017f, -0.000024f, -0.000006f, +0.000082f - }, - { - +0.000584f, +0.019836f, -0.000098f, -0.003903f, +0.002792f, +0.000141f, -0.000775f, -0.001714f, +0.001261f, -0.000095f, - -0.000814f, -0.001340f, +0.001033f, -0.001500f, -0.001702f, -0.000380f, -0.010171f, +0.001025f, +0.001840f, +0.002803f, - +0.001049f, -0.001484f, -0.000609f, -0.002998f, +0.003805f, +0.001247f, -0.001476f, -0.003296f, +0.001259f, -0.000952f, - -0.000862f, -0.000830f, +0.001735f, -0.000011f, +0.000917f, +0.000385f, +0.003446f, +0.001517f, +0.001322f, +0.001416f, - -0.002034f, +0.002498f, +0.000940f, -0.000600f, -0.000219f, -0.000259f, +0.000423f, -0.000697f, -0.000089f, -0.000664f, - +0.000034f, +0.000044f, +0.000644f, +0.000333f, +0.000267f, -0.000781f, -0.000608f, +0.000225f, -0.000115f, -0.000342f, - +0.000166f, +0.000657f, +0.000161f, +0.000088f, -0.000063f, +0.000007f, -0.000169f, +0.000394f, -0.000088f, -0.000015f, - +0.000129f, -0.000169f, -0.000076f, +0.000021f, +0.000180f, +0.000041f, -0.000179f, -0.000040f, +0.000142f, +0.000020f, - +0.000088f, -0.000095f, +0.000014f, +0.000023f, +0.000130f, +0.000070f, +0.000004f, +0.000023f, -0.000127f, +0.000228f, - -0.000148f, -0.000038f, -0.000010f, +0.000009f, +0.000078f, -0.000008f - }, - { - -0.004701f, -0.052188f, +0.000005f, -0.009808f, -0.001025f, +0.000501f, +0.000132f, -0.000372f, -0.000488f, +0.000728f, - +0.000364f, +0.000845f, +0.003927f, -0.003305f, -0.004772f, +0.001477f, -0.001462f, +0.004012f, -0.001612f, -0.000141f, - -0.002881f, +0.005468f, -0.000722f, -0.000246f, +0.001229f, +0.001639f, -0.000347f, +0.001381f, -0.001632f, -0.000404f, - +0.000465f, -0.000326f, +0.003530f, -0.001452f, +0.000194f, -0.002049f, -0.000294f, +0.001080f, -0.001085f, +0.000771f, - -0.000747f, -0.000783f, +0.000852f, -0.000318f, +0.000160f, +0.001262f, +0.000160f, +0.000324f, -0.000543f, +0.000011f, - -0.001762f, +0.000809f, +0.000364f, +0.000435f, +0.000148f, -0.000424f, -0.000065f, +0.000220f, -0.000267f, +0.000080f, - +0.000087f, +0.000108f, -0.000552f, +0.000382f, -0.000224f, +0.000439f, -0.000522f, -0.000224f, -0.000194f, +0.000400f, - -0.000237f, -0.000131f, +0.000240f, -0.000022f, -0.000039f, +0.000306f, +0.000019f, -0.000005f, -0.000270f, +0.000243f, - -0.000039f, -0.000174f, +0.000168f, -0.000064f, -0.000088f, -0.000020f, -0.000000f, +0.000046f, +0.000039f, +0.000067f, - +0.000010f, -0.000037f, -0.000023f, -0.000030f, -0.000009f, -0.000020f - }, - { - -0.010541f, -0.061025f, -0.006930f, +0.002036f, +0.002057f, -0.000398f, +0.000047f, -0.000426f, -0.000420f, -0.000565f, - +0.000487f, +0.000478f, -0.000827f, +0.002641f, -0.002349f, -0.000629f, +0.000549f, -0.004949f, +0.000585f, +0.000328f, - +0.000824f, +0.000402f, +0.000108f, +0.000726f, +0.000940f, +0.000028f, -0.001842f, -0.000906f, +0.000721f, +0.000977f, - +0.000979f, -0.000977f, -0.000975f, -0.000223f, +0.000225f, +0.000824f, -0.000952f, +0.000250f, -0.000804f, +0.000122f, - +0.000789f, -0.000822f, -0.000314f, +0.000942f, -0.000667f, +0.000199f, +0.000530f, +0.000346f, -0.000387f, +0.000109f, - +0.000669f, -0.000574f, +0.000135f, +0.000106f, -0.000367f, +0.000159f, +0.000074f, +0.000625f, +0.000350f, -0.000063f, - +0.000161f, +0.000079f, +0.000226f, +0.000197f, +0.000058f, +0.000267f, +0.000058f, -0.000045f, -0.000075f, +0.000104f, - +0.000105f, +0.000335f, -0.000293f, +0.000047f, -0.000252f, +0.000162f, -0.000036f, +0.000035f, -0.000001f, +0.000098f, - +0.000028f, +0.000136f, +0.000016f, -0.000098f, +0.000054f, -0.000023f, -0.000090f, +0.000005f, -0.000088f, -0.000025f, - +0.000034f, +0.000034f, -0.000029f, -0.000015f, +0.000058f, +0.000025f - }, - { - +0.000020f, +0.012405f, -0.002267f, -0.001644f, +0.000743f, +0.000108f, -0.000553f, +0.000244f, -0.000384f, +0.000355f, - +0.000280f, -0.000288f, -0.000486f, -0.004972f, -0.001025f, +0.001043f, -0.004637f, +0.000147f, +0.003087f, -0.002714f, - +0.000903f, +0.000037f, +0.001802f, +0.002295f, -0.000087f, +0.000674f, -0.003444f, -0.000040f, -0.000771f, -0.000276f, - +0.002495f, -0.001935f, -0.000041f, -0.000990f, +0.000277f, -0.001012f, -0.003058f, +0.001579f, -0.000276f, -0.000922f, - +0.000139f, +0.000677f, +0.000031f, +0.000114f, -0.000997f, +0.000512f, +0.000091f, +0.000118f, -0.000303f, -0.000035f, - -0.000097f, +0.000077f, -0.000539f, +0.000376f, -0.000592f, -0.000401f, +0.000242f, -0.000100f, -0.000218f, -0.000014f, - -0.000088f, -0.000680f, -0.000284f, -0.000102f, +0.000373f, -0.000018f, +0.000412f, +0.000130f, +0.000103f, +0.000044f, - +0.000150f, +0.000183f, -0.000002f, +0.000027f, -0.000203f, -0.000260f, +0.000086f, -0.000019f, -0.000002f, +0.000263f, - +0.000072f, +0.000214f, -0.000299f, -0.000181f, +0.000124f, -0.000026f, +0.000089f, +0.000006f, +0.000043f, -0.000060f, - -0.000005f, +0.000099f, +0.000013f, -0.000042f, -0.000100f, +0.000111f - }, - { - -0.013246f, -0.134816f, +0.006328f, -0.001832f, -0.000894f, +0.000619f, -0.000215f, +0.001290f, -0.001715f, -0.001787f, - +0.001945f, +0.001161f, -0.004674f, +0.003042f, +0.000426f, -0.000582f, -0.000365f, -0.000856f, +0.001668f, -0.000838f, - +0.000539f, -0.000240f, +0.000469f, -0.000661f, +0.000406f, -0.000371f, +0.000458f, -0.001014f, -0.001146f, -0.001596f, - +0.000976f, -0.002296f, +0.001969f, -0.001792f, -0.000247f, -0.001280f, -0.001224f, -0.000119f, +0.000700f, +0.000617f, - +0.000082f, -0.002127f, -0.000419f, +0.000935f, +0.000763f, -0.000627f, +0.000080f, +0.000049f, -0.000146f, -0.000109f, - -0.000615f, -0.000008f, +0.000287f, +0.000101f, +0.000679f, -0.000223f, +0.000667f, +0.000184f, -0.000042f, -0.000495f, - -0.000032f, +0.000056f, +0.000235f, -0.000152f, -0.000089f, +0.000035f, +0.000052f, +0.000190f, -0.000138f, -0.000254f, - +0.000009f, +0.000248f, -0.000097f, +0.000018f, -0.000046f, -0.000058f, +0.000110f, +0.000065f, -0.000122f, +0.000119f, - -0.000015f, +0.000007f, -0.000011f, -0.000370f, +0.000162f, +0.000085f, +0.000077f, -0.000074f, +0.000123f, -0.000002f, - +0.000058f, +0.000037f, -0.000073f, -0.000018f, -0.000089f, +0.000119f - }, - { - -0.001113f, +0.005702f, +0.003147f, -0.001366f, +0.000449f, +0.000017f, -0.000031f, -0.000518f, +0.000439f, -0.000032f, - -0.000282f, +0.000340f, -0.002267f, +0.009668f, -0.003993f, +0.003301f, -0.001067f, -0.002646f, +0.001192f, -0.004156f, - -0.001441f, -0.000027f, -0.001338f, -0.006866f, +0.001995f, +0.000773f, -0.001941f, +0.001073f, +0.000270f, -0.001707f, - +0.002023f, +0.000310f, -0.000494f, -0.001746f, +0.000633f, -0.000168f, -0.001073f, +0.000427f, -0.000191f, -0.000354f, - +0.001479f, -0.000655f, -0.000474f, +0.000316f, +0.000270f, -0.000729f, +0.000571f, -0.000193f, -0.000439f, -0.000805f, - -0.000644f, +0.000191f, -0.000389f, +0.000003f, +0.000369f, -0.000065f, +0.000140f, +0.000262f, +0.000141f, +0.000321f, - -0.000250f, +0.000283f, +0.000225f, +0.000044f, +0.000018f, -0.000054f, -0.000236f, +0.000364f, -0.000056f, +0.000074f, - -0.000574f, +0.000069f, -0.000110f, -0.000139f, +0.000054f, +0.000018f, +0.000192f, +0.000086f, -0.000142f, -0.000177f, - -0.000146f, +0.000126f, -0.000090f, +0.000104f, -0.000132f, -0.000010f, -0.000024f, -0.000076f, +0.000031f, -0.000100f, - -0.000025f, -0.000026f, -0.000013f, +0.000058f, -0.000010f, +0.000005f - }, - { - +0.021176f, +0.065842f, -0.015716f, -0.002654f, -0.000558f, -0.000332f, -0.000400f, -0.000640f, -0.000434f, +0.000140f, - +0.002468f, +0.000147f, -0.000702f, -0.001893f, -0.000536f, +0.002016f, -0.001022f, +0.000430f, +0.000381f, -0.000899f, - +0.001725f, +0.000115f, -0.000404f, +0.001981f, -0.000400f, +0.000623f, +0.000103f, -0.000351f, -0.000558f, +0.000916f, - -0.001270f, +0.000034f, +0.000223f, +0.000130f, +0.000334f, +0.001551f, -0.001078f, -0.000433f, -0.001717f, -0.000846f, - -0.000698f, +0.000485f, -0.000188f, -0.000028f, +0.000260f, -0.000567f, -0.000660f, +0.001267f, -0.000715f, +0.000220f, - +0.000286f, -0.000200f, -0.000134f, -0.000521f, -0.000100f, +0.000234f, +0.000019f, +0.000374f, +0.000322f, -0.000222f, - +0.000520f, -0.000461f, -0.000070f, -0.000455f, +0.000596f, -0.000044f, -0.000010f, -0.000139f, +0.000105f, -0.000184f, - -0.000118f, -0.000344f, -0.000127f, +0.000113f, +0.000106f, +0.000017f, -0.000009f, +0.000172f, +0.000061f, -0.000193f, - +0.000254f, +0.000137f, -0.000178f, +0.000073f, -0.000021f, +0.000019f, -0.000066f, +0.000011f, -0.000146f, +0.000195f, - +0.000009f, -0.000025f, +0.000082f, +0.000014f, +0.000086f, -0.000094f - }, - { - -0.001792f, +0.000358f, +0.001417f, -0.001977f, +0.000543f, -0.000280f, +0.000205f, -0.000459f, +0.000598f, -0.000027f, - -0.000711f, -0.001683f, +0.001679f, +0.000786f, +0.008009f, +0.000443f, +0.003395f, -0.001919f, -0.000390f, -0.005662f, - +0.005569f, -0.000546f, -0.004691f, +0.001514f, -0.002359f, -0.001197f, -0.003993f, +0.000813f, -0.000888f, +0.000473f, - +0.001128f, -0.002361f, -0.000346f, -0.000994f, +0.000035f, +0.001398f, +0.000168f, -0.000456f, +0.000905f, -0.000596f, - +0.000637f, +0.001144f, -0.001050f, -0.000523f, -0.000232f, -0.000218f, -0.000429f, -0.000153f, -0.000572f, -0.000210f, - +0.000123f, +0.000089f, -0.000493f, -0.000159f, +0.000765f, +0.000265f, -0.000320f, -0.000071f, -0.000029f, -0.000442f, - -0.000063f, +0.000095f, +0.000488f, -0.000609f, +0.000022f, -0.000297f, -0.000171f, -0.000255f, +0.000027f, +0.000197f, - -0.000144f, -0.000327f, -0.000049f, -0.000461f, +0.000044f, +0.000147f, -0.000182f, -0.000019f, +0.000003f, -0.000065f, - +0.000011f, +0.000069f, -0.000287f, +0.000021f, -0.000108f, +0.000053f, +0.000069f, +0.000202f, +0.000117f, -0.000103f, - +0.000038f, +0.000067f, -0.000065f, -0.000027f, +0.000016f, +0.000074f - }, - { - +0.006204f, -0.049649f, +0.007013f, -0.007321f, -0.003095f, +0.005835f, -0.012518f, +0.001117f, -0.000875f, -0.001185f, - +0.001390f, +0.000345f, +0.000797f, -0.002152f, -0.000326f, -0.000015f, +0.004997f, -0.002984f, +0.001222f, +0.002904f, - -0.001170f, +0.001120f, -0.002100f, -0.000277f, -0.001552f, +0.000140f, +0.000661f, -0.001607f, +0.000158f, +0.000561f, - -0.000799f, -0.001188f, -0.002395f, -0.000605f, +0.000021f, -0.000665f, -0.000131f, -0.000009f, +0.000719f, +0.000210f, - +0.000159f, +0.000379f, -0.000307f, -0.000057f, -0.000074f, +0.001208f, +0.000007f, +0.000534f, -0.000496f, +0.000294f, - +0.000544f, -0.000168f, +0.000144f, +0.000558f, -0.000281f, +0.000052f, -0.000027f, +0.000249f, -0.000217f, +0.000311f, - -0.000319f, -0.000003f, -0.000255f, -0.000076f, +0.000124f, -0.000054f, -0.000235f, +0.000258f, -0.000507f, +0.000162f, - +0.000185f, +0.000043f, -0.000165f, -0.000184f, +0.000221f, -0.000149f, -0.000064f, -0.000152f, -0.000246f, +0.000270f, - -0.000201f, -0.000013f, +0.000111f, -0.000094f, +0.000006f, -0.000056f, +0.000080f, +0.000078f, -0.000019f, +0.000090f, - -0.000095f, +0.000022f, -0.000047f, +0.000081f, -0.000089f, +0.000110f - }, - { - -0.000578f, +0.009211f, -0.006299f, -0.002674f, -0.000466f, +0.001388f, -0.000186f, -0.001789f, +0.000053f, +0.000397f, - -0.000528f, +0.001644f, +0.000310f, -0.001791f, +0.007998f, -0.005554f, +0.009835f, -0.000976f, -0.001414f, +0.001085f, - -0.002365f, -0.001998f, +0.001251f, +0.001999f, +0.000527f, -0.000328f, +0.002414f, -0.001833f, +0.001208f, -0.001596f, - +0.000033f, +0.001338f, -0.000542f, +0.000443f, -0.000963f, +0.001667f, -0.000853f, +0.001290f, +0.000024f, +0.001668f, - -0.000352f, -0.000459f, +0.001497f, +0.000255f, -0.000346f, -0.000299f, -0.000310f, -0.000416f, +0.001166f, -0.000091f, - +0.000134f, +0.000642f, -0.000019f, +0.000118f, -0.000031f, -0.000069f, -0.000360f, -0.000122f, -0.000125f, +0.000431f, - -0.000385f, -0.000099f, +0.000053f, -0.000186f, +0.000128f, +0.000244f, -0.000152f, +0.000434f, +0.000153f, +0.000200f, - -0.000052f, -0.000444f, +0.000002f, -0.000139f, -0.000101f, +0.000025f, +0.000089f, -0.000011f, -0.000058f, +0.000207f, - +0.000048f, -0.000075f, +0.000198f, -0.000141f, -0.000140f, -0.000058f, -0.000061f, -0.000095f, +0.000107f, -0.000164f, - +0.000059f, -0.000020f, -0.000048f, +0.000038f, +0.000094f, +0.000073f - }, - { - -0.005858f, +0.034639f, -0.004594f, +0.002655f, +0.002973f, +0.000140f, -0.002077f, +0.000078f, +0.001252f, -0.000461f, - -0.001485f, -0.000818f, +0.001443f, +0.004966f, +0.002890f, -0.004644f, +0.000084f, +0.001690f, -0.000647f, +0.000391f, - +0.000522f, +0.000702f, +0.000230f, +0.001014f, -0.001411f, +0.001185f, -0.000027f, +0.000623f, -0.001131f, +0.002017f, - -0.002088f, +0.000364f, +0.000090f, -0.001070f, +0.001364f, -0.000334f, +0.000040f, +0.000182f, -0.000878f, -0.000655f, - +0.000335f, +0.000105f, +0.000051f, +0.000809f, +0.000790f, -0.000420f, -0.000281f, -0.000915f, +0.000937f, -0.000517f, - +0.000863f, -0.000169f, +0.000193f, +0.000351f, -0.000198f, -0.000354f, -0.000046f, +0.000189f, -0.000178f, -0.000577f, - -0.000498f, +0.000034f, -0.000042f, -0.000011f, -0.000048f, -0.000067f, +0.000070f, -0.000092f, +0.000146f, +0.000047f, - +0.000211f, -0.000214f, +0.000327f, -0.000042f, -0.000098f, +0.000199f, -0.000042f, +0.000089f, -0.000155f, -0.000044f, - -0.000034f, +0.000109f, +0.000030f, +0.000049f, -0.000196f, +0.000135f, -0.000116f, -0.000004f, +0.000011f, -0.000034f, - +0.000118f, -0.000008f, +0.000008f, +0.000063f, -0.000026f, +0.000058f - }, - { - +0.000759f, -0.000572f, -0.001308f, +0.002906f, -0.001036f, -0.000863f, +0.001611f, -0.002042f, -0.000318f, +0.001500f, - +0.000737f, +0.000208f, +0.014092f, +0.000459f, -0.001569f, +0.004615f, +0.000017f, +0.001204f, +0.000998f, +0.000555f, - +0.010468f, -0.005704f, +0.001294f, +0.000254f, -0.000670f, -0.002342f, +0.003062f, -0.002332f, -0.000763f, +0.000047f, - +0.001852f, +0.000212f, -0.001726f, +0.000524f, -0.001301f, -0.000944f, -0.000082f, +0.000256f, -0.000760f, -0.000081f, - -0.000536f, -0.000116f, -0.000638f, -0.000908f, +0.000492f, -0.000305f, +0.000225f, -0.000154f, -0.000257f, +0.000911f, - -0.000804f, -0.000386f, +0.000617f, -0.000516f, +0.000467f, +0.000370f, -0.000211f, -0.000078f, -0.000027f, -0.000563f, - -0.000525f, -0.000173f, +0.000621f, -0.000039f, +0.000071f, -0.000333f, +0.000140f, +0.000135f, -0.000003f, -0.000147f, - -0.000014f, +0.000100f, -0.000167f, -0.000049f, +0.000002f, +0.000081f, -0.000006f, +0.000189f, -0.000063f, +0.000250f, - -0.000007f, -0.000032f, -0.000156f, -0.000020f, -0.000190f, +0.000044f, -0.000062f, +0.000200f, +0.000133f, +0.000025f, - -0.000047f, +0.000075f, +0.000172f, +0.000025f, -0.000017f, +0.000004f - }, - { - +0.006114f, +0.034223f, -0.000252f, -0.006863f, +0.000694f, +0.000586f, +0.001478f, -0.003757f, -0.001154f, +0.000899f, - +0.001774f, -0.000470f, +0.004567f, -0.007878f, +0.010415f, +0.001650f, -0.000399f, -0.000518f, +0.000832f, +0.000945f, - +0.000619f, +0.000965f, +0.000959f, -0.002412f, -0.000401f, +0.000584f, -0.001421f, -0.000995f, -0.002313f, +0.001881f, - -0.001591f, +0.001508f, -0.000283f, +0.001903f, -0.001532f, -0.000280f, +0.000835f, -0.000518f, -0.000735f, -0.000355f, - -0.000610f, +0.001232f, +0.000179f, -0.000673f, +0.000691f, -0.000130f, -0.000590f, -0.000245f, +0.000230f, +0.000162f, - +0.000636f, -0.000217f, +0.000465f, -0.000464f, +0.000490f, -0.000337f, -0.000685f, +0.000347f, +0.000119f, -0.000202f, - +0.000011f, -0.000023f, +0.000439f, -0.000380f, +0.000157f, -0.000249f, -0.000113f, +0.000220f, +0.000011f, +0.000020f, - -0.000291f, +0.000061f, +0.000121f, +0.000119f, -0.000386f, -0.000359f, +0.000059f, +0.000103f, -0.000119f, +0.000048f, - -0.000068f, +0.000019f, +0.000088f, -0.000034f, -0.000107f, -0.000162f, +0.000084f, +0.000039f, +0.000134f, -0.000069f, - +0.000013f, +0.000035f, -0.000067f, -0.000035f, -0.000002f, +0.000125f - }, - { - +0.001338f, -0.006025f, -0.000979f, -0.000266f, +0.000507f, +0.000121f, +0.000359f, +0.000386f, +0.000794f, +0.000078f, - -0.000080f, +0.000644f, -0.000719f, -0.021707f, +0.030001f, -0.001970f, -0.002156f, -0.001172f, +0.000945f, +0.005361f, - -0.000252f, -0.002529f, +0.002925f, +0.000649f, +0.000353f, -0.001253f, -0.001303f, -0.000481f, +0.001006f, +0.000316f, - -0.000459f, +0.002027f, +0.000682f, +0.001355f, +0.001842f, -0.001369f, +0.001374f, +0.001288f, -0.000387f, +0.000086f, - +0.000208f, +0.001056f, +0.000349f, -0.001163f, -0.000441f, -0.000085f, -0.000291f, -0.001166f, +0.000551f, +0.000179f, - -0.000807f, +0.000160f, +0.000265f, +0.000044f, -0.000179f, -0.000267f, +0.000241f, +0.000295f, -0.000428f, -0.000017f, - +0.000454f, +0.000205f, +0.000353f, -0.000199f, +0.000395f, -0.000241f, +0.000154f, +0.000049f, +0.000134f, +0.000198f, - -0.000066f, +0.000198f, +0.000103f, +0.000173f, -0.000017f, +0.000039f, -0.000176f, -0.000127f, -0.000017f, +0.000020f, - -0.000037f, -0.000157f, -0.000046f, +0.000002f, +0.000109f, -0.000102f, +0.000106f, +0.000060f, +0.000023f, -0.000048f, - +0.000050f, -0.000033f, +0.000004f, +0.000003f, +0.000022f, +0.000002f - } - }, - { - { - +0.005146f, +0.058872f, -0.037618f, -0.006437f, +0.005244f, +0.000719f, -0.000911f, -0.000707f, -0.000939f, -0.001951f, - -0.000757f, +0.002587f, +0.000108f, +0.001812f, -0.004295f, +0.001132f, +0.001572f, -0.002915f, -0.002205f, +0.000565f, - +0.000142f, -0.000081f, -0.001773f, -0.002122f, +0.001945f, +0.001383f, +0.001010f, -0.000745f, -0.000734f, -0.001483f, - +0.001264f, -0.000312f, +0.002215f, +0.001365f, +0.001752f, +0.001155f, -0.001499f, +0.001153f, +0.001210f, +0.000485f, - +0.000170f, -0.000585f, +0.000758f, +0.000008f, -0.000008f, +0.000126f, +0.000199f, -0.000680f, -0.000343f, +0.000680f, - +0.000333f, +0.000391f, -0.000009f, -0.000039f, -0.000084f, +0.000588f, -0.000437f, -0.000449f, +0.000228f, -0.000247f, - +0.000006f, +0.000371f, -0.000027f, -0.000319f, -0.000301f, +0.000024f, -0.000444f, +0.000105f, +0.000047f, +0.000278f, - -0.000004f, +0.000192f, +0.000106f, +0.000309f, +0.000164f, +0.000145f, +0.000060f, +0.000251f, -0.000040f, -0.000076f, - -0.000093f, -0.000127f, +0.000066f, +0.000079f, +0.000045f, -0.000132f, +0.000107f, -0.000084f, -0.000133f, -0.000071f, - +0.000041f, -0.000055f, +0.000000f, +0.000020f, -0.000007f, +0.000037f - }, - { - -0.002409f, +0.010960f, +0.006585f, +0.000388f, +0.001072f, +0.000282f, -0.000619f, -0.001710f, +0.000540f, -0.000164f, - -0.002207f, -0.000956f, +0.000950f, +0.000869f, -0.002999f, -0.003365f, -0.002044f, -0.000780f, +0.009155f, +0.000311f, - -0.000451f, -0.001887f, +0.000273f, -0.002089f, -0.000923f, +0.000785f, +0.000808f, -0.002855f, +0.000592f, +0.000086f, - +0.000305f, +0.000716f, -0.001781f, +0.002011f, -0.001222f, +0.000862f, +0.002284f, +0.001677f, +0.000931f, +0.001128f, - -0.000484f, +0.001129f, +0.000563f, -0.000314f, -0.000784f, +0.000913f, -0.000283f, -0.000293f, -0.000352f, -0.000725f, - +0.000027f, -0.000118f, -0.000118f, +0.000265f, -0.000034f, +0.000136f, -0.000543f, -0.000043f, +0.000080f, -0.000352f, - -0.000000f, +0.000232f, +0.000141f, +0.000323f, -0.000175f, -0.000126f, -0.000294f, -0.000049f, +0.000034f, -0.000012f, - +0.000201f, -0.000068f, +0.000119f, +0.000034f, -0.000067f, -0.000000f, +0.000133f, -0.000103f, -0.000023f, +0.000006f, - +0.000110f, -0.000032f, +0.000025f, +0.000080f, +0.000005f, -0.000076f, +0.000014f, -0.000073f, -0.000107f, +0.000023f, - +0.000046f, -0.000063f, -0.000085f, -0.000042f, +0.000077f, +0.000036f - }, - { - +0.007718f, -0.051553f, -0.008034f, -0.015984f, -0.001051f, +0.000504f, -0.000937f, -0.000714f, +0.000439f, -0.000406f, - +0.001559f, +0.000943f, +0.001405f, -0.000314f, -0.005086f, -0.000279f, -0.003179f, +0.003913f, +0.001937f, -0.000044f, - +0.000597f, +0.000914f, -0.000016f, +0.000319f, -0.000056f, +0.001643f, +0.000095f, +0.000852f, -0.001508f, -0.000376f, - +0.000517f, +0.000645f, +0.000523f, -0.002000f, +0.001488f, -0.001524f, -0.001756f, -0.000829f, +0.001201f, -0.000136f, - +0.000068f, -0.001231f, -0.000230f, -0.000809f, +0.000649f, +0.000866f, -0.000363f, -0.000089f, +0.000130f, -0.000401f, - -0.000381f, -0.000046f, +0.000104f, +0.000245f, -0.000634f, -0.000223f, +0.000154f, +0.000393f, -0.000176f, +0.000187f, - +0.000283f, -0.000108f, -0.000260f, -0.000048f, -0.000078f, -0.000242f, -0.000177f, -0.000005f, -0.000267f, +0.000149f, - +0.000037f, -0.000086f, -0.000036f, -0.000138f, +0.000243f, +0.000520f, -0.000167f, -0.000148f, -0.000092f, +0.000169f, - +0.000077f, -0.000121f, +0.000065f, +0.000023f, +0.000020f, -0.000016f, -0.000116f, +0.000147f, +0.000045f, +0.000032f, - +0.000043f, +0.000006f, -0.000069f, +0.000004f, +0.000088f, -0.000127f - }, - { - -0.008873f, -0.059380f, -0.005721f, -0.001376f, -0.000382f, -0.000023f, -0.000103f, -0.001319f, +0.000107f, +0.000844f, - +0.000483f, +0.000114f, -0.000289f, +0.000454f, +0.001432f, +0.000060f, -0.000387f, -0.004428f, +0.000955f, +0.000714f, - +0.000895f, +0.000139f, +0.000131f, +0.000190f, +0.000055f, +0.000632f, -0.001885f, +0.000116f, +0.000016f, -0.000569f, - +0.000379f, -0.000724f, -0.000183f, -0.000329f, +0.000226f, +0.001559f, -0.001054f, -0.000162f, +0.000053f, -0.000075f, - +0.000692f, -0.000601f, +0.000262f, +0.000329f, -0.000031f, -0.000407f, +0.000565f, +0.000120f, -0.000020f, -0.000309f, - +0.000440f, -0.000070f, +0.000005f, -0.000043f, -0.000350f, -0.000045f, +0.000124f, +0.000482f, +0.000294f, +0.000235f, - +0.000055f, -0.000170f, +0.000250f, -0.000077f, +0.000138f, +0.000110f, -0.000082f, +0.000115f, +0.000096f, -0.000163f, - +0.000235f, +0.000519f, +0.000007f, -0.000061f, +0.000016f, +0.000073f, -0.000001f, -0.000114f, -0.000026f, -0.000063f, - -0.000067f, +0.000033f, -0.000009f, -0.000069f, +0.000061f, +0.000073f, -0.000063f, -0.000012f, -0.000039f, -0.000067f, - +0.000018f, +0.000039f, -0.000015f, -0.000034f, +0.000029f, +0.000004f - }, - { - -0.000031f, +0.011787f, -0.000894f, -0.001154f, +0.000209f, +0.000124f, -0.000072f, -0.000132f, -0.000929f, +0.001236f, - +0.000335f, -0.001424f, +0.000693f, -0.000629f, -0.011129f, +0.005161f, +0.000734f, -0.012256f, -0.004127f, +0.000122f, - +0.002117f, +0.001852f, -0.001240f, -0.000990f, +0.002481f, +0.001107f, +0.001773f, -0.000917f, -0.001324f, +0.000166f, - -0.000065f, -0.000588f, -0.000720f, -0.000021f, -0.001561f, -0.000858f, -0.001661f, +0.000199f, +0.000044f, -0.000808f, - -0.000849f, +0.000405f, -0.000326f, -0.000060f, -0.000321f, -0.000120f, +0.000784f, -0.000237f, -0.000094f, -0.000377f, - -0.000262f, +0.000079f, +0.000096f, +0.000104f, -0.000549f, -0.000025f, +0.000136f, +0.000018f, -0.000088f, -0.000262f, - -0.000735f, +0.000061f, -0.000145f, +0.000152f, -0.000104f, -0.000098f, +0.000038f, +0.000202f, +0.000295f, -0.000114f, - +0.000289f, +0.000152f, -0.000098f, +0.000028f, -0.000138f, -0.000239f, -0.000119f, -0.000099f, -0.000101f, -0.000084f, - -0.000006f, +0.000178f, +0.000022f, -0.000148f, +0.000031f, +0.000064f, +0.000057f, +0.000050f, +0.000072f, -0.000115f, - -0.000044f, +0.000037f, +0.000108f, -0.000003f, -0.000135f, -0.000030f - }, - { - -0.016775f, -0.120231f, -0.002474f, -0.001162f, +0.000730f, +0.000646f, -0.000460f, +0.000934f, +0.000182f, -0.001979f, - +0.000755f, +0.000716f, +0.000138f, +0.000368f, -0.000640f, +0.001474f, -0.001155f, -0.001016f, +0.001193f, -0.001212f, - -0.000934f, -0.000242f, +0.000927f, +0.000030f, -0.000128f, -0.000553f, -0.000920f, +0.000624f, -0.001747f, +0.000126f, - -0.001373f, -0.000635f, +0.000556f, -0.002202f, -0.000255f, -0.000198f, -0.000238f, -0.000417f, +0.000028f, +0.000235f, - -0.001293f, -0.001400f, +0.000196f, +0.000912f, +0.000626f, -0.000234f, -0.000033f, +0.000197f, -0.000432f, -0.000959f, - +0.000330f, +0.000124f, -0.000515f, +0.000338f, +0.000800f, -0.000024f, -0.000010f, -0.000027f, -0.000302f, -0.000312f, - +0.000119f, +0.000152f, +0.000010f, -0.000203f, -0.000035f, +0.000082f, +0.000040f, +0.000140f, -0.000015f, -0.000102f, - +0.000007f, +0.000023f, +0.000130f, -0.000152f, +0.000005f, +0.000058f, -0.000073f, -0.000052f, +0.000027f, -0.000022f, - +0.000116f, +0.000091f, +0.000014f, -0.000171f, -0.000047f, -0.000137f, +0.000111f, -0.000196f, +0.000169f, +0.000058f, - +0.000019f, +0.000047f, -0.000089f, +0.000009f, -0.000002f, -0.000038f - }, - { - +0.000068f, +0.003403f, +0.000665f, +0.000522f, +0.000457f, +0.000090f, -0.000444f, -0.000215f, -0.000029f, +0.000381f, - -0.000077f, +0.000927f, +0.000633f, +0.000394f, +0.004893f, +0.004204f, -0.004514f, -0.000787f, -0.001844f, -0.002573f, - -0.001077f, +0.000168f, -0.003258f, +0.000132f, +0.001961f, -0.000561f, -0.002926f, +0.001858f, +0.000639f, -0.000313f, - +0.000218f, +0.000242f, +0.000301f, -0.002546f, -0.001095f, +0.000469f, -0.001298f, +0.000071f, +0.000285f, -0.000922f, - +0.000572f, -0.000043f, -0.000182f, -0.000012f, +0.000078f, -0.000545f, +0.000028f, -0.000085f, -0.000562f, -0.000434f, - -0.000295f, -0.000191f, -0.000485f, -0.000135f, +0.000189f, +0.000212f, -0.000414f, +0.000406f, +0.000408f, +0.000075f, - +0.000085f, +0.000145f, +0.000305f, -0.000086f, +0.000064f, +0.000005f, -0.000175f, -0.000167f, +0.000135f, +0.000098f, - -0.000116f, -0.000246f, +0.000099f, -0.000205f, -0.000216f, -0.000059f, -0.000027f, -0.000155f, -0.000103f, -0.000018f, - -0.000083f, -0.000077f, -0.000034f, +0.000045f, -0.000023f, -0.000043f, +0.000046f, -0.000044f, +0.000070f, +0.000069f, - +0.000034f, +0.000128f, -0.000037f, +0.000011f, +0.000025f, +0.000001f - }, - { - -0.000852f, +0.091777f, -0.001449f, -0.005873f, +0.000143f, -0.000703f, +0.000217f, -0.000507f, -0.000253f, +0.000215f, - +0.000104f, +0.000504f, +0.001071f, -0.000330f, -0.001171f, +0.001407f, +0.000053f, +0.003005f, -0.000223f, -0.001506f, - +0.000398f, +0.000857f, +0.000348f, +0.000358f, +0.001892f, +0.000102f, -0.000881f, +0.000638f, -0.001210f, -0.000669f, - -0.000182f, +0.001089f, +0.000210f, +0.000605f, +0.000556f, -0.001403f, -0.000096f, -0.001080f, -0.001056f, +0.000346f, - -0.001067f, +0.000092f, -0.000474f, +0.000521f, +0.000555f, +0.000015f, -0.001201f, +0.000930f, -0.000002f, -0.000017f, - -0.000158f, +0.000667f, +0.000255f, -0.000508f, -0.000200f, -0.000335f, -0.000195f, +0.000162f, +0.000522f, +0.000182f, - -0.000006f, +0.000033f, -0.000549f, +0.000085f, +0.000256f, +0.000256f, -0.000065f, -0.000011f, +0.000270f, -0.000374f, - -0.000126f, -0.000033f, -0.000142f, -0.000359f, +0.000013f, +0.000183f, -0.000100f, -0.000014f, -0.000086f, -0.000031f, - +0.000095f, -0.000016f, +0.000024f, +0.000038f, +0.000039f, +0.000004f, -0.000145f, -0.000042f, -0.000085f, -0.000028f, - +0.000042f, -0.000042f, +0.000048f, +0.000085f, -0.000031f, +0.000005f - }, - { - +0.000038f, -0.013412f, +0.001725f, +0.000073f, +0.000190f, +0.000146f, +0.000320f, -0.000205f, +0.000315f, -0.000110f, - -0.000594f, -0.000018f, +0.000862f, +0.001694f, +0.006237f, -0.000746f, +0.006477f, -0.001755f, -0.002366f, -0.002120f, - +0.002760f, +0.000574f, -0.000402f, -0.004073f, -0.002911f, +0.000321f, -0.001340f, -0.004055f, +0.003010f, -0.000041f, - +0.001908f, -0.002034f, -0.000866f, -0.001032f, -0.000280f, +0.000314f, -0.000437f, -0.000570f, +0.000842f, +0.000325f, - +0.000123f, +0.000451f, -0.000334f, -0.000919f, -0.001342f, -0.000528f, -0.000524f, +0.000102f, -0.000436f, -0.000402f, - +0.000320f, -0.000221f, +0.000348f, -0.000225f, +0.000786f, +0.000288f, -0.000454f, -0.000212f, -0.000659f, -0.000223f, - +0.000175f, +0.000463f, +0.000012f, +0.000134f, -0.000070f, +0.000069f, -0.000064f, -0.000115f, +0.000229f, +0.000024f, - -0.000233f, +0.000069f, -0.000167f, -0.000186f, -0.000169f, +0.000127f, +0.000100f, -0.000164f, -0.000062f, -0.000067f, - -0.000057f, +0.000152f, -0.000118f, +0.000060f, -0.000012f, -0.000017f, -0.000159f, +0.000159f, +0.000051f, -0.000014f, - -0.000031f, +0.000034f, +0.000022f, -0.000031f, -0.000010f, -0.000010f - }, - { - -0.006518f, -0.029080f, +0.007514f, -0.007881f, -0.002695f, -0.006571f, +0.000734f, +0.000259f, -0.001612f, -0.000168f, - +0.000909f, -0.001202f, +0.000396f, +0.000891f, -0.000743f, +0.000212f, +0.002030f, -0.000632f, +0.000172f, +0.001972f, - -0.000117f, +0.000106f, -0.001086f, -0.001143f, -0.000582f, -0.000045f, -0.000741f, -0.000879f, +0.000234f, -0.000258f, - -0.000699f, -0.001642f, -0.000266f, -0.001018f, +0.000135f, -0.000217f, +0.000460f, -0.000765f, +0.000710f, -0.000504f, - -0.000087f, +0.000695f, -0.000466f, +0.000081f, +0.000026f, +0.000365f, +0.000343f, +0.000425f, -0.000013f, -0.000247f, - +0.000055f, -0.000043f, -0.000278f, +0.000091f, +0.000553f, -0.000220f, -0.000230f, +0.000288f, -0.000246f, +0.000160f, - +0.000094f, -0.000106f, +0.000091f, -0.000265f, -0.000133f, +0.000007f, -0.000062f, -0.000118f, -0.000034f, +0.000026f, - +0.000187f, -0.000069f, -0.000187f, -0.000007f, -0.000043f, -0.000000f, -0.000224f, -0.000095f, -0.000046f, +0.000066f, - +0.000105f, +0.000026f, -0.000094f, -0.000010f, -0.000108f, -0.000129f, -0.000068f, +0.000000f, -0.000071f, +0.000016f, - -0.000080f, +0.000028f, +0.000061f, -0.000070f, -0.000035f, +0.000004f - }, - { - +0.000412f, +0.004200f, +0.001043f, -0.005142f, -0.001829f, +0.000184f, -0.002605f, -0.000265f, +0.000129f, -0.000920f, - -0.000156f, +0.000271f, -0.001230f, +0.001877f, +0.002563f, -0.000570f, +0.004774f, -0.000104f, +0.000730f, +0.000504f, - -0.001867f, +0.000917f, +0.000730f, +0.000391f, +0.000878f, -0.000715f, +0.001684f, -0.000459f, -0.000329f, +0.000193f, - -0.000926f, +0.000726f, -0.000159f, +0.001057f, +0.000290f, +0.000323f, +0.001014f, +0.000410f, +0.000411f, +0.000325f, - +0.000068f, +0.000539f, +0.000798f, -0.000047f, -0.000199f, -0.000653f, -0.000410f, +0.000061f, -0.000132f, -0.000229f, - +0.000052f, +0.000285f, +0.000614f, +0.000421f, -0.000166f, -0.000343f, -0.000302f, -0.000258f, +0.000052f, +0.000127f, - -0.000320f, -0.000040f, +0.000082f, -0.000064f, -0.000208f, +0.000255f, +0.000112f, -0.000038f, +0.000195f, +0.000122f, - -0.000077f, -0.000114f, -0.000095f, -0.000197f, +0.000001f, -0.000059f, +0.000235f, +0.000202f, +0.000024f, +0.000097f, - -0.000042f, -0.000075f, +0.000119f, +0.000077f, -0.000088f, -0.000025f, +0.000056f, -0.000087f, +0.000108f, +0.000073f, - -0.000012f, -0.000007f, -0.000029f, +0.000103f, -0.000037f, +0.000028f - }, - { - +0.008518f, +0.011228f, -0.001311f, +0.001294f, +0.000654f, +0.001744f, +0.002432f, +0.001194f, +0.000319f, -0.001244f, - -0.002193f, +0.001814f, +0.003307f, -0.000924f, +0.005284f, -0.002427f, -0.000426f, +0.001780f, +0.000160f, +0.000080f, - +0.000195f, +0.000831f, +0.000521f, +0.000927f, -0.001428f, +0.001223f, +0.000048f, +0.000113f, -0.000270f, +0.000255f, - -0.000182f, +0.000299f, +0.000068f, -0.000152f, +0.000920f, -0.000094f, +0.000922f, +0.000202f, -0.000079f, -0.000111f, - -0.000710f, +0.000827f, +0.001042f, -0.000070f, -0.000771f, +0.000288f, -0.000341f, -0.000199f, +0.000156f, +0.000159f, - +0.000020f, +0.000022f, +0.000486f, -0.000123f, +0.000350f, -0.000349f, +0.000002f, -0.000036f, -0.000016f, -0.000489f, - -0.000267f, +0.000047f, +0.000130f, -0.000362f, +0.000095f, -0.000095f, -0.000013f, +0.000147f, +0.000163f, -0.000092f, - +0.000106f, -0.000010f, +0.000095f, -0.000081f, -0.000116f, +0.000136f, -0.000062f, +0.000064f, +0.000023f, -0.000022f, - -0.000057f, -0.000066f, -0.000010f, -0.000104f, -0.000108f, +0.000129f, -0.000068f, +0.000066f, +0.000007f, -0.000146f, - +0.000013f, -0.000059f, -0.000052f, +0.000050f, +0.000006f, +0.000006f - }, - { - -0.000668f, -0.000447f, +0.000076f, +0.003667f, -0.002148f, +0.000402f, +0.000974f, -0.000594f, -0.000674f, +0.000670f, - +0.000710f, +0.001269f, -0.000027f, +0.017923f, -0.002895f, +0.002427f, +0.002335f, +0.001436f, +0.001190f, -0.000422f, - +0.007225f, +0.002683f, -0.006785f, +0.000737f, +0.000937f, -0.001338f, +0.001332f, -0.001260f, +0.000710f, -0.002048f, - +0.003015f, +0.000297f, -0.000794f, -0.000306f, -0.001413f, +0.000907f, -0.000414f, +0.000202f, -0.000312f, -0.000247f, - -0.000039f, -0.000251f, -0.001322f, +0.000192f, -0.000408f, +0.000625f, -0.000129f, -0.000977f, -0.000586f, +0.000937f, - +0.000143f, -0.000119f, -0.000319f, +0.000382f, -0.000271f, -0.000159f, +0.000373f, -0.000105f, -0.000448f, -0.000108f, - -0.000473f, -0.000006f, +0.000026f, -0.000070f, +0.000239f, +0.000067f, -0.000109f, +0.000409f, -0.000304f, -0.000194f, - +0.000152f, +0.000054f, -0.000007f, -0.000086f, -0.000310f, -0.000081f, -0.000032f, +0.000174f, +0.000272f, +0.000075f, - +0.000108f, +0.000035f, -0.000153f, -0.000011f, -0.000101f, +0.000091f, -0.000134f, +0.000115f, +0.000157f, +0.000058f, - +0.000040f, +0.000018f, -0.000004f, +0.000123f, -0.000111f, -0.000106f - }, - { - +0.005014f, +0.032349f, -0.000150f, +0.002289f, +0.001931f, -0.000187f, -0.002081f, -0.000623f, -0.002386f, +0.001227f, - +0.000660f, -0.002144f, +0.003632f, +0.006566f, -0.009459f, +0.002418f, +0.005506f, -0.001546f, +0.001143f, +0.001860f, - +0.001038f, +0.000184f, +0.000731f, -0.000546f, -0.002244f, +0.000047f, -0.001315f, -0.001357f, -0.001906f, +0.000241f, - +0.000504f, +0.000834f, +0.000122f, +0.001029f, -0.000855f, +0.000267f, +0.000451f, -0.000199f, -0.000315f, +0.000161f, - -0.000569f, +0.001164f, -0.000319f, +0.000240f, +0.000961f, +0.000333f, -0.000379f, -0.000096f, +0.000856f, -0.000368f, - +0.000784f, +0.000339f, -0.000748f, -0.000437f, +0.000463f, +0.000257f, +0.000008f, -0.000403f, +0.000305f, -0.000184f, - +0.000055f, +0.000381f, +0.000013f, -0.000181f, +0.000402f, -0.000037f, +0.000001f, +0.000188f, -0.000012f, -0.000086f, - -0.000033f, -0.000136f, +0.000122f, -0.000019f, -0.000258f, -0.000173f, -0.000074f, -0.000040f, +0.000188f, +0.000058f, - -0.000004f, +0.000025f, +0.000213f, +0.000097f, -0.000110f, +0.000055f, +0.000019f, -0.000120f, +0.000025f, +0.000016f, - -0.000009f, +0.000098f, -0.000011f, +0.000016f, -0.000018f, +0.000053f - }, - { - -0.000946f, -0.003806f, +0.002273f, -0.001003f, +0.000257f, -0.000139f, +0.000468f, +0.001163f, +0.000189f, +0.000407f, - +0.001473f, +0.001119f, -0.003320f, +0.007020f, -0.016537f, +0.004917f, +0.001111f, -0.000452f, +0.002894f, +0.004349f, - +0.000386f, +0.002718f, +0.001071f, -0.002871f, +0.002093f, +0.000046f, -0.001219f, +0.000321f, -0.000269f, -0.000424f, - +0.000338f, +0.000887f, +0.000869f, +0.001002f, +0.001481f, -0.000944f, +0.000164f, +0.001705f, +0.000860f, -0.000174f, - +0.000079f, +0.000158f, -0.000986f, +0.000327f, -0.000080f, -0.000580f, -0.000555f, -0.000373f, +0.000307f, -0.000379f, - -0.000188f, -0.000004f, -0.000330f, +0.000032f, +0.000549f, +0.000022f, -0.000198f, +0.000344f, -0.000590f, -0.000433f, - +0.000005f, +0.000311f, -0.000132f, +0.000214f, -0.000002f, +0.000135f, +0.000420f, -0.000329f, +0.000223f, +0.000048f, - +0.000135f, -0.000112f, -0.000158f, -0.000017f, -0.000074f, +0.000118f, -0.000169f, -0.000308f, -0.000112f, +0.000004f, - +0.000143f, +0.000005f, +0.000050f, +0.000004f, +0.000060f, -0.000018f, +0.000052f, +0.000085f, +0.000077f, +0.000025f, - +0.000038f, +0.000038f, -0.000008f, -0.000032f, -0.000033f, +0.000080f - } - }, - { - { - -0.004858f, +0.135080f, +0.017363f, -0.013049f, +0.002014f, +0.001390f, -0.000906f, -0.000631f, -0.000523f, -0.000483f, - -0.000878f, +0.001230f, +0.000128f, +0.000800f, -0.003970f, -0.000307f, +0.001292f, -0.001156f, +0.002703f, -0.000066f, - -0.000835f, -0.000613f, -0.000540f, -0.001665f, +0.001262f, -0.000467f, +0.000390f, -0.000745f, -0.000688f, -0.000988f, - +0.001540f, -0.000114f, -0.000232f, -0.000631f, +0.000469f, +0.001608f, -0.000942f, +0.000332f, -0.000375f, -0.000144f, - +0.000425f, -0.000440f, +0.000720f, -0.000297f, -0.000050f, -0.000635f, -0.000695f, +0.000731f, +0.000357f, -0.000124f, - -0.000536f, +0.000073f, -0.000071f, -0.000301f, -0.000514f, +0.000225f, -0.000194f, -0.000051f, +0.000732f, +0.000047f, - -0.000313f, +0.000070f, -0.000034f, +0.000044f, -0.000147f, +0.000291f, -0.000185f, -0.000079f, -0.000037f, +0.000170f, - +0.000058f, +0.000091f, -0.000155f, +0.000018f, +0.000054f, +0.000289f, +0.000011f, +0.000022f, +0.000297f, -0.000000f, - -0.000050f, -0.000173f, +0.000010f, +0.000013f, -0.000037f, +0.000066f, -0.000016f, +0.000058f, -0.000052f, +0.000013f, - +0.000032f, +0.000023f, -0.000000f, +0.000063f, -0.000011f, +0.000002f - }, - { - +0.001657f, -0.001890f, -0.011167f, +0.001438f, -0.000477f, +0.000777f, -0.000606f, -0.000374f, +0.000425f, +0.000599f, - -0.001376f, -0.000371f, +0.001119f, +0.001568f, -0.003700f, -0.002406f, +0.004107f, +0.000239f, +0.005061f, +0.001144f, - -0.000010f, -0.002882f, +0.001804f, -0.000331f, -0.002698f, -0.000506f, +0.001843f, -0.002279f, +0.001088f, -0.000073f, - +0.000568f, +0.001209f, -0.003125f, +0.001531f, -0.000218f, +0.000404f, +0.000070f, -0.000856f, -0.001024f, +0.000714f, - +0.000070f, +0.000166f, +0.000034f, -0.000224f, +0.000072f, +0.000837f, -0.000310f, -0.000095f, -0.000096f, -0.000756f, - -0.000212f, -0.000051f, -0.000470f, -0.000159f, -0.000503f, +0.000895f, -0.000107f, -0.000457f, -0.000291f, -0.000188f, - -0.000266f, -0.000236f, -0.000290f, +0.000123f, -0.000210f, -0.000139f, -0.000020f, -0.000323f, -0.000088f, -0.000106f, - +0.000184f, -0.000230f, +0.000090f, +0.000056f, -0.000203f, -0.000226f, +0.000180f, -0.000007f, +0.000142f, -0.000033f, - -0.000164f, +0.000092f, +0.000157f, -0.000027f, -0.000080f, -0.000069f, +0.000072f, -0.000011f, +0.000094f, -0.000177f, - +0.000080f, +0.000050f, +0.000000f, -0.000091f, -0.000023f, -0.000005f - }, - { - -0.006589f, -0.043146f, +0.021173f, -0.008076f, -0.002620f, -0.001517f, -0.001024f, -0.002456f, -0.001244f, +0.000497f, - +0.000945f, -0.001266f, -0.002464f, -0.000639f, -0.003216f, +0.002120f, -0.003348f, +0.001428f, +0.002769f, +0.002674f, - +0.000332f, -0.000052f, -0.001200f, -0.002410f, -0.000567f, +0.001647f, -0.001309f, -0.000242f, -0.000778f, +0.000186f, - +0.001145f, +0.000245f, -0.002172f, -0.002900f, +0.000258f, -0.000819f, -0.001926f, -0.000593f, +0.001485f, -0.000703f, - +0.000006f, +0.000137f, -0.000082f, -0.001807f, +0.000397f, -0.000895f, -0.001062f, -0.000015f, +0.000431f, +0.000198f, - +0.000575f, +0.000191f, -0.000414f, -0.000067f, -0.000653f, -0.000422f, +0.000381f, +0.000748f, +0.000338f, +0.000302f, - +0.000181f, -0.000243f, +0.000029f, -0.000118f, +0.000340f, -0.000165f, +0.000047f, +0.000375f, +0.000064f, -0.000279f, - -0.000106f, +0.000245f, -0.000050f, -0.000147f, +0.000151f, +0.000150f, -0.000053f, +0.000085f, -0.000093f, +0.000152f, - +0.000027f, +0.000040f, +0.000035f, +0.000024f, +0.000197f, -0.000038f, -0.000165f, +0.000023f, +0.000048f, +0.000028f, - -0.000022f, -0.000011f, -0.000007f, +0.000033f, +0.000087f, -0.000057f - }, - { - +0.017469f, -0.023914f, -0.005628f, -0.001286f, +0.000125f, -0.000062f, +0.000272f, -0.000661f, -0.000492f, +0.000288f, - +0.000227f, -0.001029f, +0.000136f, -0.000039f, -0.001260f, -0.000108f, -0.000175f, -0.005446f, +0.000368f, +0.000922f, - +0.000695f, +0.000174f, +0.000052f, -0.000286f, -0.001039f, -0.000065f, -0.000100f, +0.001110f, -0.000283f, -0.001461f, - +0.000609f, -0.000186f, +0.000135f, -0.000218f, +0.000358f, +0.001537f, -0.000262f, -0.000195f, +0.000967f, +0.000050f, - +0.000442f, +0.000395f, +0.001323f, +0.000018f, -0.000208f, -0.000290f, +0.000114f, -0.000087f, +0.000029f, -0.000442f, - +0.000015f, -0.000189f, +0.000183f, -0.000422f, -0.000355f, -0.000165f, -0.000247f, +0.000059f, -0.000027f, +0.000015f, - -0.000250f, -0.000341f, -0.000227f, +0.000002f, -0.000033f, -0.000058f, -0.000033f, -0.000113f, +0.000258f, -0.000179f, - +0.000010f, +0.000078f, +0.000280f, +0.000148f, +0.000140f, +0.000077f, -0.000055f, -0.000077f, -0.000003f, -0.000010f, - -0.000104f, -0.000047f, -0.000077f, +0.000120f, +0.000056f, +0.000091f, +0.000074f, -0.000089f, +0.000116f, +0.000046f, - -0.000017f, -0.000034f, -0.000007f, -0.000022f, -0.000055f, -0.000021f - }, - { - +0.000106f, +0.012576f, +0.001270f, +0.000041f, -0.000403f, -0.000010f, -0.000276f, +0.000371f, +0.000019f, +0.000233f, - +0.000313f, -0.000202f, +0.001865f, -0.002108f, -0.014637f, +0.004643f, +0.000490f, -0.002708f, +0.000187f, +0.001913f, - +0.003318f, +0.004155f, -0.000617f, -0.001604f, +0.001292f, -0.001747f, +0.003800f, +0.001043f, -0.000095f, +0.000111f, - +0.001047f, +0.001734f, +0.000821f, +0.000026f, -0.000600f, +0.000618f, +0.000602f, +0.000218f, -0.000539f, -0.000384f, - -0.001031f, +0.000604f, -0.000690f, -0.000159f, +0.000413f, -0.000191f, +0.000290f, -0.000041f, +0.000169f, +0.000325f, - -0.000204f, -0.000159f, +0.000132f, -0.000544f, -0.000254f, +0.000343f, +0.000290f, -0.000260f, -0.000126f, +0.000115f, - -0.000168f, +0.000366f, -0.000362f, +0.000005f, -0.000083f, -0.000155f, -0.000187f, -0.000172f, +0.000142f, -0.000135f, - -0.000071f, +0.000055f, +0.000021f, -0.000021f, +0.000147f, +0.000130f, -0.000296f, -0.000098f, -0.000021f, -0.000285f, - -0.000132f, -0.000107f, +0.000070f, +0.000075f, -0.000114f, +0.000081f, -0.000032f, -0.000018f, +0.000082f, -0.000096f, - +0.000015f, +0.000020f, -0.000041f, -0.000002f, +0.000049f, -0.000007f - }, - { - +0.029729f, -0.063954f, -0.002976f, -0.000452f, -0.000843f, +0.000371f, +0.000726f, -0.000733f, +0.002021f, +0.001162f, - -0.001768f, -0.000299f, +0.001768f, -0.000131f, -0.001887f, +0.001253f, -0.000566f, -0.000492f, -0.000387f, -0.001300f, - +0.000418f, -0.000169f, +0.000589f, +0.000888f, +0.000762f, -0.000025f, -0.000790f, +0.001120f, +0.000113f, +0.000971f, - -0.001145f, -0.000157f, +0.000946f, -0.000742f, -0.000051f, +0.000165f, +0.000929f, +0.000121f, -0.000014f, +0.000015f, - -0.000537f, -0.000446f, +0.000284f, +0.000211f, -0.000167f, +0.000050f, -0.000310f, +0.000025f, -0.000037f, -0.000479f, - +0.000620f, +0.000604f, -0.000051f, +0.000194f, -0.000223f, -0.000273f, -0.000473f, -0.000134f, -0.000302f, -0.000069f, - +0.000086f, -0.000009f, -0.000136f, -0.000403f, -0.000044f, +0.000139f, +0.000061f, +0.000088f, +0.000225f, +0.000154f, - -0.000026f, -0.000071f, +0.000029f, +0.000028f, +0.000071f, +0.000173f, -0.000124f, -0.000082f, +0.000101f, +0.000032f, - -0.000016f, -0.000046f, -0.000004f, +0.000075f, -0.000045f, -0.000173f, +0.000014f, -0.000090f, -0.000071f, +0.000053f, - -0.000004f, +0.000028f, -0.000037f, -0.000047f, +0.000103f, -0.000036f - }, - { - +0.000677f, +0.006252f, -0.000796f, +0.000852f, +0.000005f, -0.000084f, -0.000372f, +0.000082f, -0.000629f, -0.000038f, - +0.000084f, -0.000273f, -0.001422f, -0.003151f, +0.004428f, +0.004778f, -0.005173f, -0.002455f, -0.000622f, +0.001436f, - +0.001736f, +0.002350f, -0.002003f, -0.000199f, +0.002239f, +0.001212f, -0.000166f, +0.000772f, +0.000988f, -0.000511f, - -0.000576f, -0.000613f, -0.000613f, -0.001617f, -0.001538f, -0.000382f, -0.000529f, +0.000217f, -0.000064f, -0.000260f, - +0.000329f, -0.000215f, +0.000364f, -0.000231f, +0.000744f, -0.000155f, -0.000264f, +0.000125f, -0.000209f, -0.000013f, - +0.000366f, +0.000158f, +0.000064f, -0.000265f, -0.000377f, +0.000280f, -0.000262f, -0.000353f, -0.000205f, -0.000046f, - +0.000088f, +0.000103f, +0.000381f, -0.000216f, -0.000114f, +0.000111f, +0.000153f, -0.000019f, -0.000095f, -0.000062f, - +0.000395f, +0.000016f, +0.000104f, -0.000002f, +0.000005f, -0.000014f, -0.000035f, -0.000265f, -0.000136f, -0.000024f, - +0.000064f, -0.000114f, -0.000000f, -0.000048f, +0.000057f, +0.000044f, -0.000014f, +0.000026f, +0.000023f, +0.000004f, - +0.000052f, +0.000115f, +0.000034f, -0.000058f, +0.000038f, +0.000020f - }, - { - -0.009042f, +0.079622f, +0.010906f, -0.000086f, +0.001856f, -0.000535f, -0.000190f, +0.000158f, +0.000588f, +0.000276f, - -0.001449f, -0.001729f, +0.001481f, +0.002773f, +0.000537f, +0.002211f, +0.000153f, +0.000486f, +0.001468f, +0.000181f, - -0.000590f, +0.001044f, +0.000485f, -0.001276f, +0.000882f, -0.000022f, -0.000048f, +0.001262f, -0.000756f, -0.000016f, - +0.000595f, +0.001135f, +0.000860f, +0.000397f, +0.000735f, -0.000912f, -0.000250f, +0.000370f, +0.000523f, +0.000875f, - -0.000202f, +0.000647f, +0.000034f, -0.000203f, -0.000167f, +0.000192f, -0.000273f, +0.000850f, +0.000308f, -0.000570f, - -0.000655f, +0.000225f, +0.000529f, +0.000223f, -0.000078f, +0.000243f, -0.000045f, -0.000193f, -0.000007f, +0.000031f, - -0.000051f, +0.000298f, -0.000377f, +0.000055f, -0.000213f, +0.000119f, +0.000050f, +0.000117f, +0.000169f, -0.000125f, - +0.000022f, +0.000058f, +0.000197f, -0.000129f, -0.000158f, +0.000011f, +0.000144f, -0.000098f, -0.000023f, +0.000183f, - -0.000032f, -0.000080f, +0.000138f, +0.000108f, +0.000064f, -0.000013f, +0.000036f, -0.000032f, -0.000057f, -0.000121f, - +0.000055f, +0.000085f, +0.000002f, +0.000042f, -0.000052f, +0.000061f - }, - { - +0.001545f, -0.008225f, -0.001400f, +0.001336f, -0.000540f, +0.000271f, +0.000315f, +0.000231f, +0.000106f, +0.000086f, - +0.000368f, -0.000085f, -0.000498f, -0.004707f, +0.003646f, +0.001203f, -0.000065f, -0.003480f, +0.000640f, -0.002073f, - +0.000434f, +0.002282f, +0.000997f, -0.000555f, +0.000508f, +0.002842f, +0.002096f, -0.004502f, +0.003928f, -0.000022f, - +0.001013f, -0.000444f, -0.000116f, -0.000027f, +0.000074f, -0.001330f, -0.000830f, -0.000106f, +0.000595f, +0.000854f, - +0.000256f, +0.000006f, +0.000317f, +0.000305f, -0.000683f, -0.000389f, -0.000012f, +0.000252f, -0.000169f, -0.000179f, - +0.000607f, +0.000001f, +0.000761f, -0.000075f, +0.000248f, -0.000168f, -0.000188f, -0.000184f, -0.000518f, -0.000077f, - +0.000050f, +0.000044f, -0.000012f, +0.000392f, +0.000082f, +0.000406f, +0.000241f, +0.000073f, -0.000004f, -0.000113f, - -0.000258f, -0.000091f, -0.000030f, +0.000272f, -0.000144f, +0.000050f, +0.000135f, +0.000047f, -0.000125f, +0.000012f, - -0.000172f, +0.000028f, +0.000100f, +0.000090f, +0.000071f, +0.000004f, -0.000159f, -0.000033f, -0.000001f, -0.000014f, - -0.000003f, -0.000043f, +0.000047f, +0.000045f, -0.000046f, +0.000004f - }, - { - +0.007854f, -0.017586f, +0.009854f, +0.003098f, +0.001439f, -0.002998f, +0.007002f, -0.001200f, -0.000885f, +0.000197f, - +0.000672f, -0.001364f, -0.001581f, +0.001262f, +0.002201f, -0.002416f, +0.001626f, +0.000014f, -0.000686f, +0.001965f, - +0.000356f, -0.000642f, +0.000653f, +0.000586f, +0.000830f, +0.000310f, -0.000324f, +0.000516f, +0.000506f, +0.000022f, - +0.000205f, +0.000169f, +0.001776f, +0.000550f, +0.000549f, -0.000066f, +0.000890f, -0.001022f, -0.000538f, -0.000204f, - -0.000199f, -0.000007f, -0.000958f, +0.000209f, +0.000323f, -0.000246f, -0.000176f, +0.000319f, +0.000264f, -0.000058f, - -0.000330f, +0.000216f, -0.000063f, -0.000616f, +0.000482f, -0.000082f, -0.000354f, +0.000005f, -0.000045f, -0.000183f, - +0.000458f, -0.000175f, -0.000079f, -0.000173f, -0.000252f, +0.000143f, -0.000044f, -0.000054f, +0.000264f, +0.000050f, - +0.000165f, -0.000043f, -0.000075f, -0.000079f, -0.000111f, -0.000120f, -0.000063f, -0.000163f, +0.000167f, -0.000027f, - +0.000080f, +0.000133f, +0.000032f, +0.000004f, +0.000079f, -0.000002f, -0.000128f, -0.000013f, -0.000024f, -0.000102f, - +0.000009f, -0.000095f, +0.000126f, -0.000033f, +0.000029f, -0.000087f - }, - { - -0.000561f, +0.000542f, +0.004643f, -0.000510f, -0.000378f, -0.000325f, -0.003673f, -0.000417f, -0.000716f, -0.000293f, - +0.000846f, -0.001915f, -0.002108f, +0.000062f, +0.000659f, -0.002754f, -0.001529f, -0.002732f, +0.000871f, -0.003246f, - +0.000682f, +0.002240f, +0.000157f, -0.001123f, +0.000261f, -0.001293f, -0.000749f, -0.000464f, -0.000704f, +0.000787f, - -0.000485f, +0.000278f, -0.000703f, -0.000321f, +0.000192f, -0.000814f, +0.000241f, -0.000617f, -0.000092f, -0.000046f, - +0.000165f, +0.000368f, -0.000145f, -0.000215f, -0.000158f, -0.000648f, -0.000324f, +0.000312f, -0.000408f, +0.000021f, - -0.000129f, -0.000508f, +0.000010f, +0.000109f, -0.000110f, -0.000163f, -0.000059f, -0.000130f, -0.000096f, +0.000273f, - -0.000045f, -0.000265f, +0.000064f, +0.000212f, -0.000080f, -0.000091f, +0.000198f, -0.000143f, -0.000125f, -0.000032f, - -0.000047f, +0.000136f, -0.000018f, -0.000089f, -0.000021f, -0.000023f, +0.000065f, +0.000051f, +0.000175f, -0.000064f, - -0.000100f, +0.000077f, -0.000077f, -0.000002f, +0.000077f, +0.000083f, -0.000023f, +0.000037f, +0.000009f, +0.000143f, - -0.000006f, +0.000021f, +0.000017f, +0.000028f, -0.000062f, -0.000082f - }, - { - -0.005926f, -0.007860f, -0.002570f, -0.004213f, -0.000010f, -0.002145f, +0.003882f, +0.002588f, +0.000041f, -0.000067f, - -0.004260f, +0.001385f, +0.000548f, -0.003898f, +0.005074f, +0.000428f, +0.001350f, +0.000390f, +0.000389f, -0.001266f, - +0.001153f, +0.000960f, -0.000400f, +0.000528f, -0.001021f, -0.000613f, -0.000659f, -0.001600f, +0.000121f, -0.000846f, - +0.000924f, +0.000260f, +0.000171f, +0.000534f, -0.000238f, -0.001028f, +0.000860f, +0.000683f, +0.000676f, -0.000342f, - +0.000019f, +0.000356f, +0.000441f, -0.000650f, -0.000747f, +0.000305f, -0.000260f, +0.000183f, -0.000627f, -0.000078f, - +0.000244f, +0.000089f, +0.000297f, -0.000719f, +0.000433f, -0.000226f, +0.000162f, -0.000126f, -0.000376f, +0.000022f, - -0.000150f, +0.000064f, +0.000189f, -0.000141f, -0.000057f, +0.000048f, -0.000020f, -0.000014f, +0.000219f, +0.000029f, - -0.000131f, +0.000116f, -0.000026f, -0.000107f, -0.000090f, -0.000032f, -0.000096f, +0.000106f, +0.000050f, +0.000012f, - -0.000017f, +0.000042f, -0.000088f, -0.000181f, -0.000031f, -0.000086f, +0.000105f, +0.000084f, +0.000022f, +0.000023f, - -0.000034f, +0.000003f, -0.000071f, -0.000012f, +0.000024f, -0.000013f - }, - { - +0.000340f, -0.003084f, -0.002355f, +0.004994f, -0.002974f, +0.000880f, -0.000189f, +0.000374f, +0.000125f, +0.000084f, - -0.001372f, -0.000217f, -0.008220f, +0.004037f, -0.003945f, -0.004340f, -0.004082f, -0.001444f, +0.001179f, +0.000284f, - -0.003164f, +0.001094f, -0.007331f, -0.002433f, +0.000177f, +0.001816f, +0.000300f, -0.001105f, +0.001532f, -0.001305f, - +0.000780f, +0.000173f, +0.000634f, +0.000006f, -0.000626f, +0.000913f, +0.000163f, +0.000473f, +0.001059f, -0.000496f, - +0.000117f, +0.000567f, -0.000806f, +0.000210f, -0.000411f, +0.000100f, -0.000582f, -0.000933f, -0.000265f, +0.000985f, - +0.000705f, +0.000095f, -0.000956f, +0.000387f, -0.000043f, -0.000333f, -0.000332f, +0.000100f, -0.000254f, +0.000108f, - -0.000070f, +0.000528f, -0.000450f, -0.000296f, -0.000019f, +0.000337f, -0.000382f, +0.000118f, -0.000144f, -0.000102f, - +0.000274f, +0.000017f, +0.000097f, -0.000032f, -0.000048f, +0.000014f, -0.000085f, +0.000145f, +0.000123f, -0.000162f, - +0.000022f, +0.000099f, -0.000058f, +0.000028f, -0.000076f, +0.000044f, +0.000010f, -0.000078f, +0.000001f, +0.000096f, - +0.000071f, +0.000099f, -0.000106f, -0.000006f, +0.000030f, -0.000128f - }, - { - -0.009375f, +0.006908f, +0.000901f, +0.008619f, +0.000120f, +0.000096f, -0.000717f, +0.000867f, -0.000325f, -0.000371f, - +0.000871f, -0.002335f, +0.002363f, +0.002671f, -0.015713f, -0.001107f, +0.004333f, -0.001122f, +0.002645f, +0.000695f, - +0.000172f, +0.000873f, +0.000264f, +0.001817f, -0.001299f, -0.000015f, -0.001389f, +0.000511f, +0.000093f, -0.001609f, - +0.000225f, -0.000456f, -0.000517f, -0.000180f, -0.000045f, +0.000542f, +0.000021f, +0.000259f, -0.000284f, +0.000456f, - -0.000649f, +0.001104f, -0.000037f, +0.000134f, +0.000520f, +0.000536f, +0.000033f, +0.000866f, +0.000854f, -0.001045f, - -0.000097f, +0.000775f, -0.000327f, -0.000558f, +0.000292f, +0.000360f, +0.000332f, -0.000419f, -0.000048f, +0.000065f, - +0.000097f, +0.000412f, +0.000084f, -0.000148f, +0.000285f, -0.000063f, +0.000450f, +0.000145f, +0.000040f, -0.000067f, - +0.000182f, -0.000229f, +0.000006f, -0.000133f, -0.000028f, +0.000018f, +0.000095f, -0.000245f, +0.000040f, +0.000077f, - +0.000059f, -0.000156f, +0.000021f, +0.000119f, -0.000046f, -0.000016f, +0.000147f, -0.000083f, -0.000075f, +0.000052f, - +0.000011f, -0.000050f, +0.000060f, +0.000051f, +0.000018f, -0.000030f - }, - { - +0.000583f, -0.004900f, +0.000243f, -0.000114f, +0.000676f, -0.000319f, -0.000315f, +0.001319f, -0.000183f, +0.000389f, - +0.002132f, +0.000784f, -0.001434f, +0.016420f, -0.023556f, +0.000481f, +0.003182f, +0.001605f, +0.001913f, +0.003461f, - +0.000335f, +0.004325f, +0.001888f, -0.001470f, +0.001990f, +0.000379f, -0.001074f, -0.000578f, -0.000591f, +0.000356f, - -0.000512f, -0.001630f, +0.000050f, -0.000616f, +0.000444f, +0.000700f, -0.000192f, -0.000389f, +0.000493f, -0.000669f, - +0.000302f, +0.000323f, -0.000732f, +0.000263f, +0.000886f, -0.000405f, +0.000160f, +0.000218f, +0.000179f, -0.000364f, - +0.000178f, +0.000023f, -0.000217f, -0.000397f, -0.000082f, +0.000129f, -0.000166f, +0.000030f, -0.000137f, -0.000158f, - -0.000372f, +0.000136f, -0.000218f, -0.000146f, -0.000243f, -0.000150f, -0.000029f, +0.000054f, -0.000072f, -0.000153f, - -0.000056f, +0.000068f, -0.000296f, -0.000134f, -0.000085f, -0.000114f, +0.000170f, -0.000022f, -0.000100f, -0.000049f, - -0.000035f, -0.000015f, +0.000004f, +0.000128f, -0.000049f, +0.000050f, +0.000004f, -0.000074f, +0.000011f, +0.000125f, - -0.000004f, -0.000010f, +0.000094f, +0.000001f, -0.000062f, +0.000045f - } - }, - { - { - +0.011209f, +0.137801f, +0.009834f, -0.006959f, -0.000509f, -0.000966f, -0.000111f, +0.000524f, -0.000865f, -0.000333f, - +0.001200f, -0.000248f, +0.000881f, -0.003223f, -0.002339f, +0.001794f, -0.000167f, +0.001799f, +0.001600f, -0.000594f, - -0.001170f, -0.001276f, +0.000513f, -0.000273f, -0.000782f, +0.000486f, +0.000089f, -0.000697f, -0.000441f, +0.000542f, - +0.000494f, +0.001466f, -0.001213f, -0.000328f, +0.000032f, +0.001231f, +0.000776f, -0.000236f, -0.000202f, +0.000012f, - +0.000235f, -0.000051f, +0.000190f, -0.000462f, -0.000143f, +0.000093f, -0.000910f, -0.000136f, +0.001207f, -0.000226f, - -0.000363f, -0.000002f, -0.000214f, -0.000350f, -0.000549f, -0.000136f, -0.000084f, -0.000131f, +0.000221f, +0.000470f, - -0.000199f, -0.000251f, -0.000088f, -0.000004f, +0.000040f, +0.000064f, +0.000140f, -0.000080f, -0.000132f, +0.000114f, - +0.000145f, -0.000086f, -0.000039f, -0.000100f, -0.000072f, +0.000176f, +0.000079f, +0.000108f, +0.000194f, +0.000203f, - +0.000026f, -0.000012f, +0.000010f, -0.000003f, -0.000070f, +0.000075f, -0.000006f, +0.000157f, +0.000043f, +0.000060f, - -0.000041f, +0.000041f, +0.000042f, -0.000013f, +0.000001f, +0.000012f - }, - { - -0.000632f, -0.018336f, +0.003480f, +0.001240f, -0.001002f, -0.000487f, +0.000181f, +0.001055f, +0.000066f, +0.000024f, - +0.001032f, -0.001390f, -0.000464f, +0.000490f, -0.001181f, -0.001074f, +0.002689f, -0.000922f, -0.000650f, +0.002008f, - +0.001269f, -0.002039f, +0.000873f, -0.000035f, +0.000170f, +0.001139f, -0.001911f, -0.000085f, +0.000559f, -0.001415f, - +0.000180f, +0.001511f, -0.001045f, +0.000138f, +0.001127f, +0.001014f, -0.000634f, -0.000633f, -0.000989f, -0.000290f, - +0.000010f, +0.000096f, +0.000503f, +0.000458f, +0.000080f, +0.000023f, -0.000048f, -0.000025f, -0.000056f, -0.000626f, - -0.000010f, -0.000205f, +0.000037f, -0.000099f, -0.000450f, +0.000195f, +0.000169f, -0.000270f, -0.000642f, -0.000066f, - -0.000167f, +0.000052f, -0.000374f, -0.000147f, -0.000191f, +0.000060f, +0.000196f, +0.000022f, -0.000267f, -0.000096f, - +0.000180f, -0.000271f, -0.000124f, +0.000028f, -0.000054f, -0.000140f, -0.000111f, -0.000026f, +0.000162f, -0.000016f, - -0.000088f, +0.000041f, +0.000091f, -0.000038f, -0.000023f, -0.000005f, +0.000119f, +0.000043f, +0.000162f, -0.000104f, - -0.000039f, +0.000059f, +0.000046f, -0.000005f, +0.000016f, -0.000068f - }, - { - +0.004555f, -0.008386f, -0.014887f, -0.003223f, -0.004232f, -0.001324f, +0.000035f, -0.002674f, -0.002103f, +0.001170f, - +0.000346f, -0.000774f, -0.002956f, -0.004034f, +0.001872f, +0.001172f, +0.000879f, -0.000686f, +0.002769f, +0.000745f, - +0.000405f, -0.001042f, -0.000794f, -0.002031f, -0.000945f, +0.000539f, +0.000792f, +0.000108f, -0.000576f, -0.000074f, - +0.000565f, +0.000777f, -0.001651f, -0.001243f, -0.001747f, -0.001250f, -0.000332f, -0.000153f, -0.000456f, +0.000213f, - +0.000089f, +0.000557f, -0.000494f, -0.000675f, +0.000065f, -0.001498f, -0.000335f, -0.000063f, +0.000784f, -0.000121f, - +0.000142f, +0.000933f, -0.000376f, -0.000143f, -0.000373f, -0.000293f, +0.000445f, +0.000354f, +0.000176f, +0.000312f, - +0.000029f, +0.000257f, -0.000260f, -0.000006f, +0.000438f, +0.000156f, +0.000064f, +0.000038f, +0.000238f, -0.000216f, - -0.000196f, +0.000298f, +0.000099f, -0.000062f, -0.000027f, -0.000044f, +0.000103f, -0.000005f, +0.000049f, +0.000041f, - -0.000109f, +0.000172f, +0.000083f, -0.000090f, +0.000113f, +0.000024f, -0.000077f, +0.000033f, -0.000074f, +0.000068f, - -0.000040f, -0.000042f, +0.000034f, +0.000008f, -0.000011f, +0.000056f - }, - { - -0.015328f, +0.010902f, +0.002699f, +0.000878f, -0.002720f, +0.001100f, -0.000379f, +0.000466f, -0.000753f, -0.000874f, - -0.000593f, -0.000777f, +0.002411f, -0.001061f, -0.002744f, -0.001027f, +0.000334f, -0.005665f, -0.000030f, +0.000637f, - +0.000774f, +0.000346f, -0.000112f, -0.000234f, -0.000899f, -0.000802f, +0.000759f, +0.001520f, -0.001344f, -0.000224f, - +0.001019f, -0.000174f, +0.000426f, -0.000086f, +0.000031f, +0.000772f, +0.000508f, -0.000133f, +0.000743f, +0.000039f, - +0.000446f, +0.000649f, +0.000784f, -0.000379f, -0.000017f, +0.000599f, -0.000062f, -0.000206f, +0.000336f, -0.000788f, - +0.000241f, -0.000166f, -0.000059f, -0.000178f, -0.000081f, -0.000506f, -0.000266f, -0.000062f, +0.000257f, -0.000349f, - -0.000164f, -0.000106f, -0.000157f, +0.000070f, +0.000058f, -0.000159f, +0.000031f, -0.000061f, +0.000127f, -0.000004f, - -0.000084f, -0.000178f, +0.000144f, +0.000170f, +0.000016f, +0.000051f, -0.000031f, +0.000034f, +0.000037f, +0.000049f, - +0.000072f, -0.000062f, -0.000004f, +0.000106f, -0.000031f, +0.000104f, +0.000039f, -0.000006f, +0.000058f, +0.000072f, - +0.000026f, -0.000071f, -0.000018f, +0.000007f, -0.000023f, -0.000021f - }, - { - -0.000604f, +0.013100f, +0.001103f, -0.000024f, -0.000262f, +0.000011f, -0.000304f, +0.000146f, +0.000484f, +0.000424f, - -0.000009f, +0.000999f, +0.000323f, -0.000409f, -0.014133f, -0.001975f, +0.000997f, +0.006604f, +0.005421f, +0.000662f, - +0.000757f, +0.002687f, +0.001122f, -0.001296f, +0.001562f, -0.003213f, +0.000949f, +0.001330f, +0.000444f, +0.000194f, - +0.002889f, +0.000871f, +0.000341f, +0.000919f, +0.000195f, +0.000217f, +0.000868f, +0.000373f, -0.000492f, +0.000116f, - -0.000658f, +0.000140f, -0.000041f, -0.000494f, +0.000230f, +0.000198f, -0.000633f, +0.000582f, +0.000564f, +0.000346f, - +0.000049f, -0.000393f, -0.000190f, -0.000337f, +0.000075f, -0.000283f, +0.000115f, -0.000108f, -0.000106f, +0.000071f, - +0.000015f, +0.000183f, -0.000449f, +0.000076f, -0.000033f, +0.000069f, -0.000152f, -0.000158f, +0.000042f, +0.000034f, - -0.000180f, -0.000089f, +0.000141f, -0.000056f, +0.000019f, +0.000248f, -0.000144f, -0.000097f, +0.000074f, -0.000158f, - -0.000070f, -0.000129f, -0.000047f, +0.000037f, -0.000050f, +0.000011f, -0.000041f, +0.000025f, +0.000020f, -0.000012f, - +0.000009f, +0.000036f, -0.000065f, -0.000053f, +0.000054f, +0.000054f - }, - { - -0.026350f, -0.005447f, +0.011120f, -0.001981f, -0.000810f, +0.000252f, +0.000897f, -0.000930f, +0.001449f, +0.001426f, - -0.000761f, -0.000548f, -0.000385f, -0.000075f, -0.000337f, +0.000254f, +0.000683f, -0.000552f, -0.000511f, -0.000475f, - +0.000469f, +0.000186f, +0.000009f, +0.000863f, +0.000923f, +0.000342f, -0.000227f, -0.000650f, +0.000368f, +0.000026f, - +0.000691f, -0.000218f, +0.000451f, +0.000343f, +0.000056f, +0.000450f, +0.000163f, +0.000889f, -0.000464f, +0.000262f, - -0.000052f, +0.000289f, -0.000851f, +0.000204f, -0.000138f, +0.000038f, -0.000360f, -0.000709f, +0.000523f, -0.000042f, - +0.000279f, +0.000002f, +0.000861f, +0.000223f, -0.000752f, -0.000434f, +0.000136f, +0.000034f, +0.000036f, -0.000224f, - -0.000254f, +0.000002f, +0.000052f, -0.000234f, -0.000174f, -0.000114f, +0.000236f, +0.000123f, +0.000140f, +0.000104f, - -0.000067f, +0.000020f, -0.000046f, +0.000057f, +0.000039f, +0.000129f, +0.000006f, -0.000060f, +0.000143f, -0.000053f, - -0.000142f, -0.000137f, -0.000032f, +0.000036f, -0.000008f, +0.000011f, -0.000051f, +0.000034f, -0.000125f, -0.000020f, - +0.000067f, -0.000010f, +0.000025f, -0.000051f, +0.000037f, +0.000022f - }, - { - +0.000065f, +0.005358f, +0.002736f, -0.000145f, -0.000027f, +0.000162f, +0.000226f, -0.000208f, -0.000966f, -0.000334f, - +0.000045f, +0.000076f, -0.002607f, -0.001154f, -0.001582f, +0.002685f, -0.002643f, -0.002024f, -0.001958f, +0.002998f, - +0.001497f, +0.000822f, +0.000260f, -0.000185f, -0.000568f, +0.000261f, +0.002612f, +0.000110f, -0.000977f, +0.000922f, - +0.000489f, -0.000166f, -0.001510f, -0.000057f, -0.001159f, -0.000213f, -0.000535f, +0.000321f, -0.000648f, +0.000651f, - +0.000456f, -0.000376f, +0.000671f, -0.000242f, +0.000227f, +0.000209f, +0.000378f, -0.000173f, -0.000433f, +0.000116f, - +0.000256f, +0.000018f, +0.000211f, -0.000112f, -0.000256f, +0.000251f, +0.000007f, -0.000417f, -0.000394f, +0.000410f, - -0.000134f, -0.000119f, +0.000120f, +0.000048f, -0.000127f, +0.000062f, +0.000298f, +0.000288f, -0.000336f, -0.000143f, - +0.000138f, +0.000241f, +0.000073f, +0.000116f, +0.000138f, +0.000087f, -0.000018f, -0.000066f, -0.000130f, -0.000036f, - +0.000021f, +0.000028f, -0.000092f, -0.000049f, +0.000049f, +0.000024f, +0.000015f, -0.000022f, -0.000056f, -0.000092f, - -0.000012f, -0.000059f, +0.000074f, -0.000029f, +0.000017f, +0.000016f - }, - { - +0.008556f, +0.058073f, +0.004482f, +0.005709f, -0.000723f, +0.000092f, -0.001862f, +0.000926f, +0.000391f, -0.000285f, - -0.000355f, -0.001289f, -0.000887f, +0.001436f, +0.003318f, +0.001376f, -0.000471f, -0.001490f, +0.001107f, +0.001788f, - -0.000074f, +0.000054f, +0.000915f, -0.000720f, -0.000587f, +0.000482f, +0.000211f, +0.000009f, +0.000446f, +0.000423f, - +0.000856f, +0.000322f, +0.001134f, +0.000421f, -0.000087f, +0.000747f, +0.000094f, +0.000315f, +0.000153f, +0.000407f, - +0.000539f, +0.000687f, -0.000166f, -0.000867f, -0.000125f, -0.000065f, +0.000223f, +0.000246f, +0.000311f, -0.000198f, - -0.000448f, -0.000285f, +0.000248f, +0.000364f, -0.000047f, +0.000432f, +0.000130f, +0.000044f, -0.000158f, +0.000054f, - -0.000275f, +0.000215f, -0.000005f, -0.000201f, -0.000283f, +0.000001f, +0.000103f, +0.000195f, -0.000009f, +0.000124f, - +0.000022f, -0.000123f, +0.000223f, +0.000187f, -0.000070f, -0.000117f, +0.000120f, +0.000174f, -0.000045f, +0.000153f, - +0.000022f, +0.000016f, +0.000061f, +0.000120f, -0.000030f, +0.000039f, +0.000112f, -0.000036f, -0.000031f, -0.000019f, - -0.000002f, +0.000137f, +0.000010f, +0.000002f, +0.000012f, +0.000002f - }, - { - -0.000178f, +0.005458f, -0.004329f, -0.000133f, -0.000066f, -0.000147f, +0.000193f, -0.000011f, +0.000485f, -0.000008f, - +0.001029f, -0.001348f, -0.000583f, -0.004325f, +0.003312f, -0.001127f, -0.001117f, -0.002188f, +0.002538f, -0.002454f, - -0.001719f, +0.002709f, +0.001007f, -0.000206f, +0.002004f, +0.002328f, +0.001448f, -0.001521f, +0.000318f, +0.001277f, - -0.000294f, +0.002061f, -0.000375f, -0.000005f, -0.000527f, -0.001782f, +0.000549f, +0.000321f, -0.000122f, +0.000317f, - +0.000549f, +0.000329f, +0.000537f, +0.000261f, +0.000207f, +0.000406f, -0.000226f, -0.000368f, +0.000200f, -0.000133f, - +0.000149f, +0.000343f, +0.000149f, +0.000314f, +0.000018f, -0.000128f, -0.000157f, +0.000055f, -0.000187f, -0.000076f, - +0.000033f, -0.000109f, -0.000130f, +0.000026f, +0.000133f, +0.000217f, +0.000015f, +0.000083f, -0.000160f, -0.000199f, - -0.000200f, -0.000298f, -0.000098f, +0.000336f, -0.000017f, -0.000108f, +0.000061f, +0.000206f, -0.000110f, -0.000036f, - -0.000020f, -0.000126f, +0.000091f, -0.000059f, +0.000083f, -0.000016f, +0.000078f, -0.000003f, -0.000023f, -0.000065f, - +0.000069f, -0.000051f, -0.000009f, +0.000051f, -0.000007f, +0.000051f - }, - { - -0.008545f, +0.007600f, -0.000803f, +0.006172f, +0.001065f, +0.004718f, +0.000003f, -0.001966f, +0.000223f, +0.000942f, - +0.000619f, -0.000781f, -0.001123f, +0.000072f, +0.003067f, -0.005102f, +0.003400f, +0.000590f, -0.001607f, +0.001630f, - +0.000394f, -0.000539f, +0.000607f, +0.001231f, +0.000685f, -0.000095f, +0.000345f, +0.000883f, -0.000090f, +0.000409f, - +0.000751f, +0.000507f, +0.000747f, +0.001372f, +0.001220f, -0.000986f, +0.000597f, -0.000109f, -0.000790f, +0.000091f, - +0.000191f, -0.000553f, -0.000284f, -0.000628f, +0.000153f, +0.000596f, -0.000128f, -0.000296f, +0.000433f, -0.000019f, - +0.000046f, +0.000127f, +0.000367f, -0.000244f, -0.000109f, +0.000164f, -0.000167f, -0.000179f, -0.000035f, -0.000195f, - -0.000006f, +0.000161f, -0.000167f, +0.000021f, -0.000278f, -0.000007f, +0.000048f, +0.000076f, +0.000174f, +0.000132f, - +0.000011f, +0.000053f, -0.000015f, -0.000112f, -0.000091f, -0.000165f, +0.000116f, -0.000118f, +0.000077f, +0.000021f, - -0.000112f, +0.000101f, +0.000098f, +0.000046f, +0.000152f, +0.000069f, +0.000039f, -0.000015f, +0.000047f, -0.000028f, - +0.000033f, -0.000095f, -0.000005f, +0.000038f, +0.000027f, -0.000017f - }, - { - +0.000366f, -0.000974f, +0.001765f, +0.002184f, +0.000805f, -0.000234f, -0.002461f, -0.000401f, -0.001686f, +0.001165f, - +0.000806f, -0.000987f, -0.001857f, +0.000682f, -0.000247f, -0.002674f, -0.002714f, -0.004439f, +0.004392f, -0.004849f, - +0.000869f, +0.000382f, -0.000237f, +0.000085f, +0.001045f, -0.001742f, -0.000962f, -0.000914f, -0.000101f, -0.000889f, - -0.000546f, +0.000607f, -0.001246f, +0.000052f, +0.000308f, -0.001110f, -0.000648f, -0.000221f, -0.000303f, -0.000026f, - +0.000155f, +0.000537f, -0.000332f, -0.000356f, -0.000205f, -0.000339f, -0.000289f, +0.000224f, -0.000103f, +0.000918f, - -0.000552f, -0.000311f, -0.000460f, -0.000337f, +0.000257f, -0.000138f, -0.000188f, +0.000130f, -0.000126f, +0.000212f, - +0.000194f, -0.000087f, -0.000028f, +0.000051f, +0.000185f, -0.000187f, +0.000129f, +0.000121f, -0.000099f, -0.000069f, - +0.000028f, -0.000019f, -0.000135f, -0.000024f, +0.000034f, -0.000047f, -0.000094f, -0.000118f, +0.000185f, -0.000077f, - -0.000103f, +0.000131f, +0.000002f, -0.000146f, +0.000016f, +0.000078f, -0.000073f, +0.000013f, -0.000056f, +0.000012f, - +0.000064f, -0.000011f, -0.000003f, -0.000028f, +0.000030f, -0.000042f - }, - { - +0.002284f, -0.014335f, -0.005790f, -0.006130f, +0.000576f, -0.001063f, +0.002381f, +0.001071f, +0.000048f, -0.000019f, - -0.003800f, -0.000428f, +0.000033f, -0.001081f, +0.000882f, +0.002334f, +0.000561f, +0.000278f, +0.000484f, -0.000990f, - +0.000943f, +0.000968f, +0.000028f, -0.000121f, +0.000151f, -0.001294f, -0.000705f, -0.000932f, -0.000697f, -0.000783f, - +0.001511f, -0.000223f, -0.000338f, +0.000331f, -0.000213f, -0.001116f, -0.000463f, +0.000272f, +0.000918f, -0.000317f, - +0.000869f, -0.000331f, -0.000793f, -0.000019f, +0.000084f, +0.000026f, -0.000187f, -0.000382f, -0.000133f, -0.000286f, - +0.000484f, +0.000211f, -0.000202f, -0.000305f, -0.000065f, -0.000013f, -0.000010f, +0.000043f, -0.000556f, -0.000018f, - +0.000072f, -0.000183f, +0.000007f, +0.000223f, -0.000102f, +0.000087f, -0.000012f, -0.000087f, -0.000023f, +0.000256f, - -0.000099f, -0.000009f, +0.000029f, -0.000080f, +0.000020f, -0.000065f, -0.000017f, +0.000023f, -0.000049f, -0.000032f, - +0.000044f, +0.000178f, -0.000008f, -0.000169f, +0.000033f, -0.000156f, +0.000137f, +0.000034f, +0.000016f, +0.000110f, - +0.000004f, +0.000050f, +0.000051f, -0.000026f, +0.000017f, -0.000021f - }, - { - -0.000138f, -0.006472f, +0.001038f, +0.002120f, -0.000299f, +0.000146f, -0.000216f, +0.000146f, -0.000190f, +0.000551f, - -0.000202f, +0.001001f, +0.004880f, -0.016154f, -0.005171f, -0.001111f, -0.005665f, -0.002355f, +0.000565f, +0.001768f, - -0.005003f, -0.001172f, -0.001765f, -0.002493f, +0.000131f, +0.001569f, -0.000711f, -0.000384f, +0.001130f, -0.000263f, - -0.000443f, -0.000067f, +0.000343f, -0.000078f, +0.001182f, -0.000273f, -0.000312f, +0.000882f, +0.000433f, -0.000116f, - +0.000440f, +0.000465f, -0.000406f, -0.000149f, -0.000028f, -0.000374f, -0.000724f, -0.000240f, +0.000394f, +0.000068f, - +0.000652f, +0.000262f, -0.000143f, -0.000208f, +0.000461f, -0.000318f, -0.000295f, -0.000181f, -0.000089f, +0.000059f, - -0.000000f, +0.000408f, -0.000421f, -0.000052f, -0.000126f, +0.000038f, -0.000137f, -0.000170f, -0.000027f, +0.000139f, - -0.000016f, +0.000030f, +0.000049f, -0.000057f, +0.000313f, +0.000033f, +0.000055f, +0.000158f, -0.000102f, -0.000135f, - -0.000033f, +0.000024f, -0.000055f, -0.000085f, -0.000026f, -0.000027f, +0.000100f, -0.000066f, -0.000140f, +0.000145f, - +0.000023f, +0.000092f, +0.000081f, -0.000055f, +0.000021f, +0.000016f - }, - { - +0.006876f, -0.016096f, +0.000979f, +0.003580f, -0.000165f, -0.001597f, +0.001481f, +0.001914f, +0.000285f, -0.000709f, - -0.000736f, +0.001730f, +0.000724f, -0.004474f, -0.004717f, -0.000500f, -0.002141f, -0.000472f, +0.002240f, +0.000283f, - -0.000417f, +0.001260f, +0.001316f, +0.001496f, +0.000502f, -0.001062f, -0.001419f, +0.001284f, +0.000211f, -0.001034f, - -0.000269f, -0.000917f, -0.000268f, -0.000741f, -0.000041f, +0.000174f, +0.000366f, -0.000350f, -0.000119f, -0.000002f, - +0.000545f, +0.000160f, +0.000792f, -0.000114f, -0.000187f, -0.000009f, +0.000133f, +0.000736f, +0.000353f, -0.000366f, - -0.000482f, +0.000211f, +0.000365f, -0.000182f, -0.000064f, +0.000320f, -0.000201f, -0.000054f, -0.000441f, +0.000485f, - -0.000064f, +0.000040f, +0.000089f, -0.000039f, -0.000157f, +0.000091f, +0.000155f, +0.000113f, +0.000175f, -0.000072f, - +0.000064f, -0.000156f, +0.000011f, -0.000056f, -0.000018f, -0.000033f, +0.000040f, -0.000109f, -0.000152f, -0.000079f, - +0.000058f, -0.000102f, -0.000120f, +0.000007f, -0.000016f, -0.000125f, +0.000097f, +0.000124f, -0.000072f, +0.000019f, - -0.000004f, -0.000076f, -0.000009f, +0.000015f, +0.000066f, -0.000020f - }, - { - -0.000834f, -0.004248f, -0.000613f, +0.001066f, +0.000016f, -0.000361f, -0.000287f, +0.000093f, +0.001734f, -0.000879f, - +0.001436f, +0.000362f, -0.000335f, -0.006014f, +0.008801f, +0.003236f, -0.001124f, +0.002972f, +0.000053f, +0.002268f, - +0.000906f, +0.000808f, +0.002349f, +0.001305f, +0.001290f, -0.001736f, -0.000902f, -0.000777f, +0.000523f, +0.000863f, - -0.000632f, -0.000361f, -0.000706f, -0.001495f, +0.000474f, +0.000808f, +0.000285f, -0.000939f, -0.000167f, +0.000030f, - +0.000728f, +0.000274f, +0.000950f, -0.000485f, +0.000343f, -0.000298f, +0.000647f, +0.000076f, +0.000031f, -0.000349f, - +0.000361f, +0.000166f, +0.000231f, -0.000694f, -0.000387f, -0.000127f, +0.000032f, +0.000142f, +0.000146f, +0.000534f, - -0.000155f, -0.000107f, +0.000023f, -0.000121f, -0.000078f, -0.000257f, -0.000335f, +0.000194f, -0.000042f, -0.000127f, - -0.000246f, +0.000135f, +0.000125f, -0.000096f, +0.000029f, -0.000088f, +0.000096f, +0.000091f, +0.000010f, -0.000114f, - -0.000182f, -0.000119f, -0.000032f, +0.000033f, -0.000050f, +0.000093f, +0.000013f, -0.000093f, +0.000006f, +0.000062f, - -0.000021f, -0.000045f, +0.000034f, +0.000087f, -0.000009f, -0.000041f - } - }, - { - { - -0.013545f, +0.062910f, -0.015756f, -0.002327f, +0.002316f, -0.001235f, -0.000298f, +0.001845f, -0.000126f, -0.001110f, - +0.001239f, -0.000578f, +0.000688f, +0.000611f, +0.000386f, +0.002471f, +0.000226f, +0.002357f, -0.002401f, -0.000690f, - +0.001007f, -0.000127f, +0.001092f, +0.000594f, -0.000855f, +0.000724f, -0.000196f, +0.000593f, +0.000021f, +0.000280f, - -0.000093f, +0.001166f, -0.000858f, -0.000136f, +0.000366f, +0.000732f, +0.000460f, -0.000885f, -0.000306f, -0.000138f, - +0.000260f, +0.000430f, +0.000007f, -0.001237f, -0.000578f, +0.000487f, +0.000065f, -0.000493f, +0.000919f, +0.000342f, - +0.000122f, -0.000028f, -0.000085f, +0.000210f, +0.000111f, +0.000091f, -0.000078f, -0.000158f, -0.000306f, +0.000186f, - +0.000130f, -0.000120f, -0.000071f, -0.000338f, -0.000050f, +0.000053f, +0.000225f, +0.000112f, -0.000240f, -0.000082f, - +0.000001f, -0.000133f, +0.000003f, +0.000114f, -0.000030f, -0.000103f, -0.000173f, +0.000109f, -0.000140f, +0.000129f, - +0.000009f, +0.000209f, +0.000062f, -0.000074f, -0.000025f, -0.000109f, +0.000079f, +0.000012f, +0.000005f, +0.000025f, - -0.000042f, -0.000026f, +0.000060f, -0.000049f, -0.000004f, +0.000013f - }, - { - +0.000766f, -0.026141f, +0.000597f, +0.001968f, +0.000266f, +0.000384f, +0.001374f, -0.000162f, +0.000122f, +0.000450f, - +0.002597f, -0.000597f, +0.000168f, +0.001551f, +0.001382f, -0.000923f, +0.000747f, -0.000646f, -0.000920f, -0.000545f, - +0.001394f, -0.002200f, -0.000280f, +0.001060f, +0.002225f, +0.001661f, -0.002423f, +0.001988f, +0.000731f, -0.000999f, - +0.000302f, +0.000242f, -0.000296f, +0.000417f, +0.000545f, +0.001383f, +0.000200f, +0.000416f, +0.000296f, -0.000340f, - -0.000530f, +0.000614f, +0.001000f, +0.000483f, -0.000927f, -0.000186f, +0.000081f, +0.000015f, +0.000078f, +0.000280f, - +0.000617f, -0.000397f, +0.000026f, +0.000278f, +0.000361f, -0.000197f, +0.000041f, -0.000088f, -0.000282f, +0.000085f, - -0.000088f, +0.000027f, -0.000142f, +0.000048f, -0.000114f, +0.000360f, +0.000164f, +0.000320f, +0.000012f, +0.000041f, - +0.000153f, +0.000007f, -0.000119f, -0.000146f, -0.000025f, +0.000156f, -0.000095f, -0.000081f, +0.000042f, -0.000088f, - +0.000120f, -0.000036f, -0.000123f, -0.000034f, -0.000053f, -0.000022f, +0.000108f, +0.000024f, -0.000007f, +0.000075f, - -0.000100f, -0.000070f, +0.000026f, +0.000072f, +0.000063f, -0.000072f - }, - { - -0.004374f, +0.028774f, +0.015640f, -0.000731f, +0.001943f, -0.000227f, +0.000700f, -0.000722f, -0.000160f, +0.000604f, - -0.000768f, -0.000329f, +0.001135f, -0.002206f, +0.003393f, +0.001597f, +0.001736f, -0.000364f, +0.005024f, -0.000338f, - -0.000673f, -0.000760f, +0.000238f, -0.000045f, -0.000078f, -0.000458f, +0.000505f, +0.001240f, +0.000073f, -0.000324f, - +0.000904f, +0.001890f, +0.000266f, +0.000623f, -0.000806f, -0.001595f, +0.000412f, +0.000077f, -0.000062f, +0.000595f, - +0.000360f, +0.000500f, -0.000223f, +0.000047f, +0.000193f, -0.000524f, -0.000312f, -0.000332f, +0.000445f, -0.000006f, - -0.000647f, +0.000578f, -0.000185f, -0.000089f, +0.000322f, +0.000024f, +0.000031f, -0.000036f, +0.000068f, +0.000309f, - -0.000218f, +0.000353f, -0.000280f, +0.000292f, +0.000025f, +0.000131f, +0.000040f, -0.000271f, -0.000040f, +0.000141f, - +0.000057f, -0.000024f, +0.000054f, +0.000075f, -0.000035f, +0.000002f, -0.000019f, -0.000133f, +0.000121f, +0.000061f, - -0.000006f, +0.000090f, +0.000078f, -0.000114f, -0.000050f, +0.000094f, +0.000038f, +0.000135f, -0.000160f, +0.000089f, - +0.000056f, -0.000054f, -0.000037f, -0.000033f, -0.000052f, -0.000017f - }, - { - +0.007096f, +0.023476f, -0.015111f, +0.000872f, -0.000601f, +0.000548f, -0.000452f, +0.000125f, -0.000376f, -0.000406f, - -0.000112f, -0.000281f, +0.002422f, -0.000857f, -0.001054f, -0.001038f, +0.001032f, -0.003552f, +0.000130f, -0.000123f, - +0.000585f, -0.000441f, -0.000194f, +0.000345f, +0.000161f, +0.000246f, -0.000330f, +0.001495f, -0.001471f, +0.000444f, - +0.001749f, -0.000134f, +0.000732f, -0.000030f, -0.000611f, +0.000367f, -0.000667f, -0.000051f, +0.000275f, +0.000033f, - +0.000828f, +0.000220f, +0.000291f, +0.000036f, +0.000008f, +0.000373f, -0.000150f, -0.000399f, +0.000708f, -0.000667f, - +0.000220f, +0.000120f, +0.000012f, +0.000447f, +0.000147f, -0.000321f, +0.000160f, +0.000090f, +0.000302f, -0.000356f, - -0.000069f, +0.000187f, +0.000292f, -0.000046f, +0.000138f, -0.000072f, -0.000052f, +0.000112f, -0.000005f, +0.000052f, - +0.000030f, -0.000039f, -0.000255f, -0.000112f, -0.000067f, +0.000066f, +0.000037f, +0.000071f, +0.000000f, -0.000001f, - +0.000135f, +0.000059f, +0.000109f, -0.000038f, -0.000066f, +0.000028f, -0.000103f, +0.000109f, -0.000036f, -0.000000f, - +0.000047f, +0.000004f, -0.000031f, -0.000028f, +0.000065f, +0.000029f - }, - { - +0.000856f, +0.012754f, -0.001544f, -0.000638f, +0.000330f, -0.000016f, -0.000463f, +0.000342f, +0.000043f, -0.000382f, - -0.000409f, +0.000434f, -0.000905f, +0.002921f, -0.008732f, -0.002112f, -0.001756f, -0.000444f, +0.005424f, -0.000629f, - -0.001385f, +0.000106f, +0.002168f, +0.000310f, -0.000650f, -0.004593f, -0.001775f, -0.000241f, +0.000571f, +0.001214f, - +0.002185f, -0.000394f, -0.000308f, +0.000418f, -0.000731f, -0.001085f, -0.000337f, +0.000411f, -0.001017f, +0.000169f, - +0.000205f, +0.000019f, +0.000471f, +0.000031f, +0.000206f, +0.000049f, -0.000555f, +0.000218f, +0.000293f, -0.000128f, - +0.000232f, -0.000127f, -0.000355f, +0.000347f, +0.000336f, -0.000506f, -0.000060f, +0.000241f, -0.000207f, -0.000309f, - +0.000061f, +0.000075f, -0.000588f, +0.000020f, -0.000133f, +0.000121f, -0.000022f, +0.000029f, +0.000009f, -0.000007f, - +0.000082f, -0.000060f, +0.000095f, +0.000022f, -0.000079f, -0.000086f, -0.000081f, -0.000027f, +0.000061f, +0.000070f, - +0.000015f, +0.000105f, -0.000030f, -0.000130f, +0.000046f, -0.000106f, +0.000026f, +0.000059f, -0.000080f, -0.000041f, - -0.000052f, +0.000037f, +0.000006f, -0.000043f, -0.000070f, +0.000035f - }, - { - +0.013853f, +0.019865f, -0.014012f, +0.000902f, +0.000308f, -0.000297f, -0.001086f, -0.000084f, -0.000020f, -0.001373f, - +0.001226f, +0.000366f, -0.000612f, +0.000458f, -0.000167f, +0.000151f, +0.000861f, -0.000815f, +0.000448f, -0.000492f, - +0.000024f, +0.000398f, +0.000195f, +0.000541f, -0.000416f, +0.000034f, -0.000392f, -0.001203f, -0.001204f, -0.000563f, - +0.001464f, +0.000270f, +0.000014f, -0.000088f, +0.000657f, +0.000111f, -0.001343f, +0.000205f, -0.000636f, +0.000331f, - -0.000150f, +0.000943f, -0.000862f, -0.000271f, -0.000018f, +0.000082f, +0.000130f, -0.000375f, +0.000122f, -0.000101f, - +0.000871f, -0.000421f, +0.000307f, +0.000159f, +0.000181f, -0.000473f, +0.000368f, +0.000196f, +0.000136f, -0.000213f, - -0.000323f, -0.000078f, +0.000195f, +0.000118f, +0.000045f, -0.000215f, +0.000112f, +0.000133f, -0.000111f, -0.000175f, - -0.000132f, +0.000077f, +0.000141f, -0.000042f, -0.000013f, -0.000139f, -0.000034f, -0.000018f, +0.000089f, -0.000056f, - -0.000061f, +0.000005f, +0.000009f, -0.000196f, -0.000060f, +0.000041f, +0.000051f, -0.000037f, +0.000080f, -0.000104f, - +0.000039f, +0.000023f, +0.000027f, +0.000029f, -0.000011f, +0.000019f - }, - { - -0.000528f, -0.001467f, +0.001687f, -0.000433f, -0.000129f, +0.000066f, -0.000401f, -0.000344f, -0.000056f, -0.000084f, - -0.000022f, +0.000357f, -0.000443f, +0.003041f, -0.003876f, -0.003176f, -0.002775f, +0.000244f, -0.000904f, +0.004106f, - -0.000116f, -0.000769f, -0.000452f, -0.000903f, -0.001225f, -0.000607f, +0.001136f, +0.001193f, -0.002701f, +0.001563f, - +0.001678f, +0.001465f, +0.000131f, -0.000498f, -0.000394f, +0.000498f, -0.001147f, -0.000104f, -0.000613f, +0.000132f, - +0.000785f, -0.000205f, +0.000118f, -0.000236f, -0.000602f, -0.000404f, +0.000239f, -0.000137f, -0.000401f, +0.000264f, - +0.000068f, -0.000242f, +0.000145f, +0.000351f, +0.000228f, +0.000163f, -0.000083f, +0.000390f, -0.000086f, +0.000335f, - -0.000064f, -0.000119f, -0.000263f, -0.000128f, -0.000124f, -0.000060f, +0.000035f, +0.000314f, -0.000047f, +0.000011f, - -0.000251f, +0.000032f, +0.000027f, -0.000041f, -0.000083f, +0.000129f, +0.000042f, +0.000032f, +0.000017f, +0.000100f, - -0.000066f, +0.000062f, -0.000081f, +0.000081f, +0.000006f, -0.000024f, +0.000114f, -0.000101f, -0.000041f, -0.000014f, - -0.000041f, -0.000093f, -0.000006f, +0.000015f, -0.000024f, -0.000047f - }, - { - -0.004578f, +0.050719f, +0.002927f, +0.004997f, -0.000713f, -0.000112f, -0.001395f, -0.000144f, -0.000663f, -0.000361f, - +0.000687f, +0.000737f, -0.001730f, -0.001638f, +0.000111f, -0.001334f, -0.001592f, -0.000743f, -0.001049f, +0.000508f, - +0.000870f, -0.000350f, -0.000104f, -0.000085f, -0.000045f, -0.000064f, +0.000096f, -0.000297f, +0.000925f, +0.000068f, - +0.000071f, -0.000185f, +0.000062f, +0.000488f, -0.000037f, +0.000678f, +0.000513f, -0.000250f, -0.000712f, +0.000320f, - +0.000070f, +0.000112f, -0.000178f, +0.000325f, -0.000645f, -0.000051f, +0.000272f, -0.000064f, -0.000332f, -0.000113f, - -0.000049f, +0.000611f, +0.000500f, -0.000153f, -0.000156f, +0.000264f, +0.000236f, +0.000142f, +0.000297f, +0.000340f, - -0.000327f, -0.000035f, +0.000094f, +0.000305f, +0.000097f, -0.000029f, -0.000049f, +0.000051f, +0.000168f, +0.000008f, - -0.000021f, -0.000020f, +0.000026f, +0.000098f, +0.000192f, -0.000002f, -0.000253f, +0.000238f, +0.000009f, -0.000007f, - +0.000028f, +0.000071f, -0.000018f, +0.000002f, -0.000059f, +0.000031f, -0.000039f, +0.000066f, +0.000016f, +0.000061f, - -0.000017f, -0.000000f, -0.000053f, -0.000024f, +0.000050f, -0.000057f - }, - { - -0.001209f, +0.005451f, +0.002834f, +0.000094f, +0.000494f, -0.000236f, -0.000489f, -0.001215f, +0.000466f, -0.000015f, - +0.000663f, -0.000902f, +0.000624f, -0.003586f, +0.005456f, +0.001687f, +0.003067f, +0.000267f, +0.003042f, -0.001241f, - +0.000312f, +0.000283f, -0.000179f, -0.001440f, +0.001865f, +0.001778f, -0.001756f, +0.000477f, -0.001100f, +0.000127f, - +0.001414f, +0.001492f, -0.001233f, -0.000132f, -0.000709f, -0.000736f, +0.000443f, -0.000814f, +0.000150f, -0.000199f, - -0.000390f, +0.000482f, -0.000183f, -0.000537f, +0.000026f, +0.000507f, -0.000387f, -0.000258f, +0.000370f, +0.000119f, - -0.000100f, -0.000149f, -0.000433f, -0.000038f, -0.000098f, -0.000002f, -0.000309f, +0.000302f, -0.000068f, -0.000103f, - +0.000118f, +0.000064f, -0.000158f, -0.000150f, -0.000289f, -0.000132f, -0.000047f, -0.000043f, -0.000033f, -0.000013f, - +0.000081f, -0.000024f, -0.000193f, -0.000015f, +0.000068f, +0.000004f, +0.000022f, +0.000030f, -0.000084f, -0.000154f, - +0.000100f, -0.000051f, -0.000135f, -0.000146f, +0.000008f, -0.000046f, +0.000029f, +0.000082f, +0.000032f, -0.000038f, - +0.000013f, -0.000007f, -0.000031f, -0.000019f, -0.000002f, -0.000001f - }, - { - +0.007346f, +0.019813f, -0.022685f, -0.006808f, -0.001453f, +0.001333f, -0.006211f, +0.000085f, -0.000324f, +0.000047f, - +0.001064f, +0.000129f, +0.000309f, +0.000911f, +0.000979f, -0.003440f, +0.001573f, -0.000550f, -0.000474f, +0.000399f, - -0.001039f, -0.000398f, -0.000368f, -0.000071f, -0.000036f, +0.000115f, +0.000786f, +0.000213f, -0.000450f, -0.000065f, - -0.000337f, -0.000260f, -0.000247f, -0.000332f, +0.000970f, -0.000303f, +0.000284f, -0.000081f, +0.000266f, +0.000056f, - +0.000383f, -0.000641f, -0.000039f, -0.000240f, -0.000206f, +0.000636f, +0.000394f, -0.000435f, -0.000409f, -0.000434f, - +0.000488f, -0.000386f, +0.000232f, +0.000680f, -0.000314f, -0.000137f, +0.000109f, +0.000229f, +0.000063f, +0.000253f, - -0.000404f, +0.000213f, -0.000023f, +0.000057f, -0.000111f, -0.000207f, +0.000029f, +0.000066f, -0.000072f, +0.000042f, - +0.000002f, +0.000104f, -0.000080f, +0.000092f, +0.000031f, -0.000005f, +0.000121f, +0.000104f, -0.000048f, +0.000115f, - -0.000156f, -0.000037f, -0.000011f, +0.000061f, -0.000031f, +0.000018f, +0.000141f, +0.000003f, +0.000002f, +0.000076f, - +0.000003f, +0.000070f, -0.000075f, -0.000023f, -0.000058f, +0.000047f - }, - { - -0.000145f, +0.002533f, -0.000283f, -0.000806f, +0.000438f, +0.000357f, -0.000319f, +0.000599f, -0.001825f, -0.000113f, - +0.000028f, +0.001674f, -0.000227f, +0.000598f, +0.000256f, +0.001144f, +0.000051f, -0.004168f, +0.003589f, -0.000354f, - -0.000254f, -0.001797f, -0.000652f, -0.000081f, +0.001036f, -0.001980f, +0.000666f, -0.001303f, -0.000194f, -0.000112f, - -0.000266f, +0.000614f, -0.000731f, +0.000329f, -0.000532f, +0.000482f, -0.000015f, +0.000548f, +0.000052f, -0.000002f, - -0.000142f, -0.000341f, -0.000086f, +0.000174f, -0.000184f, -0.000028f, +0.000188f, +0.000112f, +0.000156f, +0.000833f, - -0.000572f, +0.000164f, -0.000163f, -0.000355f, +0.000215f, -0.000040f, -0.000104f, +0.000199f, +0.000038f, +0.000094f, - +0.000083f, +0.000217f, -0.000017f, -0.000112f, +0.000012f, +0.000012f, -0.000058f, +0.000170f, +0.000207f, -0.000086f, - +0.000059f, -0.000130f, -0.000202f, +0.000016f, +0.000195f, -0.000008f, +0.000017f, -0.000104f, -0.000099f, +0.000042f, - -0.000049f, +0.000034f, +0.000193f, -0.000053f, -0.000044f, -0.000039f, -0.000035f, -0.000042f, +0.000054f, -0.000118f, - +0.000007f, -0.000023f, -0.000056f, +0.000007f, +0.000036f, +0.000078f - }, - { - -0.000221f, -0.013539f, +0.000208f, -0.001975f, +0.000186f, +0.002626f, +0.000917f, -0.000420f, +0.000149f, -0.000095f, - -0.000794f, -0.001354f, +0.001110f, +0.000742f, -0.001280f, +0.000491f, -0.000710f, +0.001053f, +0.000172f, +0.000064f, - -0.000826f, -0.000410f, -0.000142f, +0.000365f, +0.000373f, +0.000129f, -0.000934f, -0.000321f, -0.000887f, +0.000054f, - +0.000640f, -0.000374f, -0.000182f, -0.000568f, +0.000224f, -0.000788f, -0.000942f, -0.000165f, +0.000410f, -0.000102f, - +0.000311f, -0.000394f, -0.000771f, +0.000564f, +0.000370f, +0.000296f, -0.000169f, -0.000367f, +0.000468f, -0.000196f, - +0.000004f, -0.000094f, -0.000369f, +0.000034f, -0.000182f, +0.000074f, -0.000102f, +0.000137f, -0.000037f, -0.000263f, - +0.000118f, -0.000191f, -0.000120f, +0.000141f, +0.000121f, -0.000019f, -0.000058f, +0.000012f, -0.000196f, +0.000011f, - +0.000037f, -0.000149f, +0.000050f, +0.000000f, +0.000042f, +0.000060f, +0.000083f, +0.000027f, +0.000007f, -0.000027f, - -0.000021f, +0.000015f, +0.000104f, +0.000033f, +0.000085f, +0.000096f, +0.000048f, +0.000005f, +0.000013f, -0.000022f, - +0.000032f, -0.000023f, +0.000117f, +0.000058f, -0.000015f, -0.000004f - }, - { - +0.000102f, -0.008310f, -0.000298f, +0.000513f, +0.000387f, -0.000308f, +0.000921f, -0.000818f, -0.000799f, +0.000558f, - -0.000412f, +0.001604f, +0.002718f, -0.013500f, -0.004331f, +0.002408f, -0.000771f, -0.000234f, +0.001909f, +0.001640f, - +0.001860f, +0.000214f, +0.002152f, +0.001357f, +0.001465f, +0.000459f, -0.000887f, -0.001132f, +0.001180f, +0.000448f, - +0.001959f, -0.000353f, -0.000157f, -0.000612f, +0.001261f, +0.000350f, -0.000986f, +0.000297f, -0.000674f, +0.000743f, - +0.000540f, +0.000160f, +0.000130f, -0.000027f, -0.000078f, +0.000351f, -0.000561f, -0.000031f, +0.000147f, -0.000581f, - +0.000326f, -0.000012f, +0.000404f, -0.000154f, +0.000202f, -0.000025f, +0.000426f, -0.000340f, +0.000058f, +0.000133f, - -0.000192f, -0.000078f, +0.000038f, +0.000229f, +0.000068f, -0.000119f, +0.000126f, -0.000072f, -0.000125f, +0.000150f, - -0.000133f, +0.000060f, +0.000047f, -0.000170f, +0.000040f, -0.000024f, +0.000100f, +0.000093f, -0.000130f, -0.000008f, - +0.000077f, -0.000034f, -0.000046f, -0.000008f, -0.000018f, +0.000006f, -0.000057f, +0.000095f, -0.000107f, +0.000059f, - -0.000009f, -0.000114f, +0.000084f, +0.000080f, -0.000093f, +0.000065f - }, - { - -0.001640f, -0.021354f, +0.000699f, -0.005958f, -0.001151f, +0.000300f, +0.000838f, +0.000740f, -0.000379f, +0.000414f, - +0.000161f, +0.002506f, -0.000429f, +0.001463f, +0.004854f, -0.000494f, -0.004472f, -0.000174f, +0.000023f, -0.000544f, - -0.000886f, +0.000007f, +0.001708f, -0.000030f, +0.001959f, +0.000499f, -0.000665f, +0.001986f, +0.000134f, +0.000340f, - -0.000830f, -0.000731f, +0.000107f, -0.000310f, -0.001339f, -0.000546f, +0.000777f, -0.000290f, +0.000013f, -0.000434f, - +0.001371f, -0.000272f, +0.000599f, -0.000044f, +0.000018f, +0.000310f, -0.000305f, -0.000352f, +0.000069f, -0.000019f, - +0.000189f, -0.000141f, +0.000334f, +0.000279f, +0.000044f, -0.000010f, -0.000666f, -0.000109f, -0.000121f, +0.000268f, - -0.000372f, -0.000119f, -0.000040f, -0.000088f, -0.000368f, -0.000001f, -0.000397f, -0.000038f, +0.000090f, -0.000093f, - -0.000026f, +0.000041f, -0.000066f, +0.000087f, -0.000037f, -0.000148f, -0.000175f, +0.000099f, -0.000015f, -0.000150f, - +0.000028f, +0.000053f, +0.000003f, -0.000076f, -0.000014f, +0.000023f, -0.000108f, +0.000117f, +0.000058f, -0.000012f, - -0.000041f, +0.000048f, -0.000071f, -0.000024f, +0.000002f, +0.000042f - }, - { - +0.001033f, -0.001382f, -0.001209f, +0.000457f, -0.000284f, -0.000186f, -0.000082f, -0.002307f, +0.000075f, -0.001596f, - +0.000530f, +0.001858f, -0.000764f, -0.005167f, +0.021334f, +0.002388f, -0.004123f, -0.000995f, -0.000336f, +0.000719f, - -0.002941f, -0.002192f, +0.000956f, -0.001894f, -0.000906f, -0.001124f, +0.001245f, +0.000477f, +0.001045f, +0.000724f, - -0.000007f, +0.001469f, -0.000281f, -0.000908f, +0.000580f, -0.000819f, +0.000554f, +0.000035f, -0.000371f, +0.000114f, - +0.000310f, +0.000849f, +0.001389f, -0.000731f, -0.000500f, +0.000083f, +0.000327f, -0.000391f, +0.000068f, -0.000212f, - +0.000063f, +0.000123f, +0.000402f, -0.000220f, +0.000113f, +0.000070f, +0.000157f, +0.000265f, +0.000050f, +0.000591f, - +0.000314f, +0.000059f, -0.000221f, -0.000083f, +0.000199f, +0.000046f, -0.000071f, -0.000225f, +0.000303f, +0.000168f, - +0.000030f, -0.000045f, +0.000284f, +0.000118f, -0.000012f, +0.000127f, -0.000151f, -0.000122f, +0.000084f, -0.000016f, - -0.000042f, -0.000102f, +0.000017f, -0.000208f, +0.000029f, +0.000045f, +0.000026f, +0.000025f, +0.000015f, -0.000068f, - -0.000015f, -0.000017f, -0.000066f, +0.000083f, +0.000050f, -0.000048f - } - }, - { - { - +0.008357f, +0.023519f, -0.017625f, -0.001137f, +0.000417f, -0.000649f, -0.000029f, +0.001204f, -0.000449f, -0.001154f, - +0.000144f, +0.000064f, +0.000292f, +0.001539f, +0.001927f, +0.001476f, +0.000418f, +0.000810f, -0.000981f, -0.001225f, - +0.000149f, +0.000951f, +0.001006f, -0.000040f, +0.000024f, +0.001098f, -0.000620f, +0.000683f, -0.000291f, -0.000068f, - -0.000353f, +0.000287f, -0.000189f, +0.000433f, -0.000288f, +0.000635f, -0.000448f, -0.000263f, -0.001079f, +0.000517f, - +0.000038f, +0.000024f, +0.000133f, -0.000846f, -0.000553f, -0.000056f, +0.000241f, -0.000147f, +0.000445f, +0.000225f, - +0.000185f, +0.000076f, +0.000105f, +0.000229f, +0.000317f, +0.000151f, -0.000117f, +0.000147f, -0.000196f, -0.000163f, - +0.000152f, +0.000115f, +0.000049f, -0.000304f, -0.000125f, +0.000136f, +0.000061f, +0.000001f, -0.000052f, -0.000051f, - -0.000080f, -0.000053f, -0.000068f, +0.000075f, +0.000084f, -0.000037f, -0.000154f, +0.000021f, -0.000107f, -0.000059f, - -0.000024f, +0.000065f, +0.000026f, -0.000046f, +0.000027f, -0.000100f, -0.000022f, -0.000047f, -0.000017f, -0.000054f, - +0.000026f, -0.000048f, +0.000018f, +0.000007f, +0.000002f, +0.000010f - }, - { - -0.000953f, -0.018630f, -0.000726f, -0.000176f, +0.000408f, -0.000236f, +0.002000f, -0.000566f, +0.000075f, +0.000510f, - +0.001106f, +0.000911f, +0.000054f, +0.000670f, +0.001745f, -0.001067f, +0.001871f, +0.000719f, +0.000695f, -0.000826f, - -0.000669f, -0.001677f, +0.000083f, +0.001949f, +0.001405f, +0.000223f, -0.001284f, +0.001883f, +0.000950f, -0.000199f, - +0.000456f, -0.000615f, +0.000380f, -0.000219f, +0.000446f, +0.000357f, +0.000877f, +0.000321f, +0.001003f, -0.000445f, - -0.000147f, +0.000322f, +0.000609f, -0.000086f, -0.000581f, -0.000105f, +0.000094f, +0.000151f, -0.000065f, +0.000444f, - +0.000312f, -0.000181f, -0.000348f, +0.000159f, +0.000503f, -0.000108f, -0.000076f, +0.000012f, +0.000214f, -0.000123f, - -0.000243f, -0.000174f, +0.000026f, +0.000269f, -0.000130f, +0.000306f, +0.000033f, +0.000004f, +0.000209f, +0.000041f, - -0.000003f, +0.000163f, +0.000038f, -0.000139f, -0.000023f, +0.000087f, +0.000063f, -0.000012f, -0.000092f, -0.000060f, - +0.000130f, -0.000005f, -0.000098f, -0.000068f, -0.000060f, -0.000042f, -0.000046f, +0.000022f, -0.000073f, +0.000029f, - -0.000017f, -0.000050f, -0.000054f, +0.000024f, +0.000036f, -0.000022f - }, - { - +0.004994f, +0.048446f, -0.007700f, -0.000783f, -0.000467f, -0.000142f, +0.000223f, -0.000305f, +0.000759f, -0.000182f, - -0.000818f, -0.000476f, +0.001552f, -0.000553f, +0.001972f, +0.001060f, +0.000735f, +0.000788f, +0.002974f, +0.000995f, - +0.000236f, -0.000242f, -0.000388f, +0.000745f, -0.001068f, -0.000545f, +0.000262f, +0.000893f, +0.000038f, -0.000671f, - +0.001734f, +0.001554f, +0.000417f, +0.000087f, -0.000095f, -0.000646f, -0.000000f, -0.000503f, +0.000453f, +0.000737f, - +0.000634f, -0.000076f, -0.000084f, +0.000242f, -0.000432f, -0.000191f, -0.000519f, -0.000042f, -0.000205f, +0.000300f, - -0.000364f, -0.000190f, +0.000029f, -0.000035f, +0.000016f, +0.000119f, -0.000047f, +0.000037f, +0.000133f, +0.000212f, - -0.000073f, +0.000076f, -0.000337f, +0.000414f, +0.000006f, -0.000127f, -0.000028f, -0.000160f, -0.000146f, +0.000174f, - +0.000149f, -0.000097f, -0.000056f, +0.000077f, +0.000074f, +0.000141f, -0.000097f, -0.000150f, +0.000034f, +0.000089f, - +0.000140f, -0.000007f, +0.000059f, +0.000055f, -0.000095f, +0.000001f, +0.000052f, +0.000087f, -0.000029f, +0.000013f, - +0.000045f, +0.000017f, -0.000040f, -0.000048f, -0.000004f, -0.000040f - }, - { - +0.000874f, +0.011179f, +0.001291f, -0.000247f, -0.000310f, -0.000210f, -0.000111f, -0.000673f, -0.000276f, -0.000233f, - +0.001138f, +0.000458f, +0.000564f, -0.000339f, +0.001430f, -0.001118f, -0.000686f, -0.000956f, -0.000285f, -0.000310f, - +0.000069f, -0.000103f, -0.000574f, +0.000291f, +0.000265f, +0.000814f, -0.000392f, +0.000682f, -0.000579f, +0.000311f, - +0.000108f, +0.000458f, +0.000298f, -0.000328f, +0.000499f, -0.000786f, -0.000068f, +0.000209f, -0.000171f, +0.000238f, - +0.000786f, +0.000180f, -0.000111f, +0.000290f, +0.000473f, -0.000124f, -0.000240f, +0.000072f, +0.000062f, -0.000039f, - -0.000336f, +0.000308f, +0.000130f, +0.000226f, +0.000080f, +0.000023f, +0.000039f, +0.000276f, -0.000096f, +0.000013f, - -0.000077f, +0.000230f, +0.000102f, -0.000055f, -0.000060f, +0.000021f, -0.000055f, +0.000112f, -0.000018f, -0.000033f, - +0.000097f, +0.000188f, -0.000184f, -0.000151f, +0.000029f, +0.000056f, -0.000011f, +0.000014f, +0.000034f, -0.000018f, - -0.000023f, +0.000041f, +0.000021f, -0.000056f, -0.000004f, +0.000019f, -0.000088f, +0.000063f, +0.000029f, -0.000029f, - +0.000021f, +0.000034f, -0.000046f, -0.000031f, +0.000036f, +0.000039f - }, - { - -0.000669f, +0.009371f, +0.003333f, -0.000917f, +0.000266f, -0.000052f, -0.000286f, +0.000313f, -0.000241f, -0.000332f, - -0.000403f, +0.000086f, -0.000527f, +0.002539f, -0.007171f, -0.001318f, -0.001604f, -0.003381f, -0.001743f, +0.001483f, - -0.000185f, -0.000449f, +0.001267f, +0.000527f, -0.001868f, -0.002470f, +0.000152f, -0.000691f, +0.000428f, +0.002009f, - +0.000363f, -0.000565f, -0.000987f, +0.000519f, -0.001089f, -0.001194f, -0.000837f, +0.000213f, -0.000153f, -0.000549f, - +0.000298f, -0.000518f, +0.000215f, +0.000406f, +0.000125f, -0.000074f, +0.000144f, -0.000154f, +0.000208f, -0.000325f, - +0.000102f, +0.000208f, -0.000337f, +0.000466f, +0.000023f, -0.000039f, -0.000294f, +0.000162f, -0.000015f, -0.000343f, - -0.000006f, -0.000074f, -0.000236f, -0.000266f, -0.000226f, +0.000011f, +0.000029f, +0.000137f, +0.000051f, -0.000166f, - +0.000171f, +0.000146f, -0.000046f, +0.000021f, -0.000031f, -0.000180f, -0.000042f, -0.000105f, -0.000100f, -0.000002f, - -0.000001f, +0.000139f, +0.000081f, -0.000131f, +0.000031f, -0.000064f, +0.000016f, +0.000066f, -0.000048f, -0.000089f, - -0.000065f, +0.000010f, +0.000012f, +0.000009f, -0.000086f, -0.000021f - }, - { - -0.001637f, +0.016069f, +0.002868f, +0.002171f, +0.000788f, -0.000044f, -0.001394f, +0.000598f, -0.000108f, -0.001979f, - +0.000418f, +0.000732f, +0.000461f, -0.000477f, +0.001590f, +0.000361f, -0.000655f, -0.001158f, +0.000241f, -0.000263f, - -0.000743f, -0.000246f, +0.000035f, +0.001097f, -0.000102f, -0.000161f, -0.001154f, +0.000007f, -0.000871f, -0.000841f, - +0.000171f, +0.001089f, -0.000324f, -0.000067f, +0.000874f, -0.000279f, -0.001689f, +0.000247f, -0.000033f, +0.000052f, - -0.000573f, +0.000159f, -0.000020f, -0.000161f, +0.000046f, +0.000138f, +0.000108f, +0.000325f, -0.000116f, -0.000087f, - +0.000540f, +0.000028f, -0.000118f, +0.000017f, +0.000459f, -0.000149f, -0.000200f, +0.000033f, -0.000035f, -0.000042f, - +0.000002f, -0.000218f, +0.000052f, +0.000199f, +0.000107f, -0.000134f, -0.000053f, +0.000091f, -0.000045f, -0.000106f, - -0.000049f, +0.000009f, +0.000146f, -0.000004f, -0.000009f, -0.000141f, -0.000170f, +0.000015f, +0.000021f, +0.000016f, - +0.000030f, +0.000076f, +0.000051f, -0.000110f, -0.000145f, -0.000037f, +0.000040f, -0.000105f, +0.000072f, +0.000003f, - -0.000014f, +0.000017f, +0.000013f, +0.000055f, +0.000017f, -0.000009f - }, - { - -0.000304f, -0.005008f, +0.001466f, +0.000328f, +0.000084f, -0.000084f, -0.000419f, -0.000221f, -0.000113f, +0.000151f, - +0.000317f, -0.000152f, +0.000260f, +0.000569f, -0.001042f, -0.001998f, -0.000115f, -0.000642f, +0.000794f, +0.002775f, - -0.000251f, -0.000571f, -0.002822f, +0.000862f, -0.000318f, -0.000189f, +0.000440f, -0.000816f, -0.000846f, +0.000846f, - +0.001489f, +0.000961f, +0.000643f, -0.000718f, -0.001202f, +0.000498f, -0.000465f, -0.000690f, -0.000385f, -0.000242f, - +0.000477f, +0.000112f, +0.000226f, -0.000255f, -0.001006f, -0.000437f, -0.000343f, -0.000172f, +0.000131f, +0.000085f, - -0.000029f, -0.000049f, -0.000152f, +0.000304f, +0.000387f, +0.000024f, -0.000117f, +0.000469f, +0.000035f, +0.000112f, - +0.000037f, -0.000029f, -0.000141f, -0.000207f, -0.000133f, +0.000057f, -0.000166f, +0.000032f, +0.000173f, +0.000185f, - -0.000246f, -0.000077f, +0.000039f, -0.000099f, -0.000220f, -0.000047f, +0.000042f, -0.000033f, -0.000023f, +0.000113f, - +0.000000f, -0.000039f, -0.000052f, +0.000092f, +0.000020f, -0.000028f, +0.000068f, -0.000017f, +0.000028f, +0.000054f, - +0.000051f, +0.000028f, -0.000028f, -0.000028f, -0.000000f, -0.000051f - }, - { - +0.001974f, +0.057382f, -0.006471f, +0.000559f, +0.000752f, -0.000416f, -0.000512f, -0.000646f, -0.000590f, +0.000038f, - -0.000058f, +0.000662f, +0.000039f, -0.001126f, -0.002684f, -0.001088f, -0.000529f, +0.000631f, -0.000774f, -0.000857f, - +0.000973f, +0.000155f, -0.001144f, +0.000093f, +0.000419f, -0.000196f, -0.000048f, -0.000314f, +0.000868f, -0.000164f, - +0.000061f, +0.000325f, +0.000057f, -0.000088f, +0.000602f, +0.000007f, +0.000156f, -0.000161f, -0.001300f, +0.000699f, - -0.000230f, -0.000041f, -0.000339f, +0.000902f, -0.000381f, +0.000439f, -0.000522f, +0.000285f, -0.000072f, -0.000336f, - -0.000381f, +0.000902f, +0.000734f, -0.000044f, -0.000036f, -0.000139f, +0.000091f, +0.000103f, +0.000340f, +0.000325f, - +0.000031f, -0.000132f, -0.000086f, +0.000359f, +0.000247f, +0.000080f, -0.000127f, +0.000055f, +0.000178f, -0.000037f, - -0.000011f, +0.000003f, -0.000048f, -0.000107f, +0.000078f, +0.000147f, -0.000249f, -0.000045f, +0.000031f, -0.000020f, - -0.000017f, +0.000079f, +0.000049f, -0.000061f, -0.000017f, +0.000033f, -0.000105f, +0.000054f, -0.000001f, +0.000049f, - -0.000017f, -0.000040f, -0.000045f, -0.000068f, +0.000009f, -0.000007f - }, - { - +0.000111f, -0.000270f, +0.002141f, +0.000161f, -0.000000f, +0.000065f, -0.000910f, -0.000434f, -0.000029f, +0.000093f, - +0.000451f, -0.000005f, -0.000021f, +0.000557f, +0.001190f, +0.000933f, +0.007823f, +0.000799f, +0.002650f, -0.000611f, - -0.001242f, +0.000949f, -0.000026f, -0.000730f, -0.000249f, +0.000946f, -0.001231f, -0.000751f, -0.000286f, +0.000362f, - +0.001857f, +0.000527f, -0.001155f, -0.000825f, +0.000101f, -0.000366f, -0.000739f, -0.000444f, +0.000121f, +0.000073f, - -0.001214f, +0.000209f, -0.000070f, -0.000460f, -0.000540f, -0.000167f, -0.000122f, +0.000018f, +0.000257f, +0.000102f, - -0.000173f, -0.000366f, -0.000288f, -0.000208f, +0.000099f, +0.000022f, -0.000202f, -0.000026f, -0.000098f, -0.000128f, - +0.000072f, +0.000132f, -0.000008f, +0.000089f, -0.000234f, -0.000144f, +0.000247f, -0.000120f, +0.000118f, -0.000056f, - +0.000137f, +0.000111f, -0.000031f, -0.000122f, -0.000005f, +0.000010f, +0.000112f, -0.000084f, -0.000038f, -0.000132f, - -0.000006f, +0.000094f, -0.000080f, -0.000083f, -0.000102f, +0.000007f, -0.000096f, -0.000018f, +0.000070f, +0.000027f, - -0.000066f, -0.000005f, -0.000013f, -0.000050f, +0.000017f, -0.000030f - }, - { - -0.005420f, +0.018177f, -0.003663f, -0.008976f, +0.000071f, -0.003731f, -0.003986f, +0.001696f, -0.000822f, -0.000581f, - +0.000247f, +0.000362f, +0.000056f, +0.001164f, +0.000286f, -0.000076f, -0.000044f, -0.000395f, -0.000773f, +0.000195f, - -0.000865f, -0.000572f, -0.000534f, +0.000165f, -0.000510f, +0.000152f, +0.000760f, -0.000376f, -0.000046f, -0.000006f, - -0.000750f, -0.000468f, -0.000317f, -0.000930f, +0.000504f, +0.000782f, -0.000119f, -0.000279f, +0.000526f, +0.000013f, - -0.000145f, -0.000434f, -0.000107f, +0.000180f, -0.000019f, -0.000057f, +0.000272f, -0.000067f, -0.000599f, -0.000543f, - +0.000210f, -0.000308f, -0.000315f, +0.000388f, +0.000106f, +0.000046f, +0.000023f, +0.000129f, +0.000130f, +0.000347f, - -0.000205f, +0.000150f, -0.000011f, -0.000104f, +0.000025f, -0.000154f, -0.000021f, +0.000011f, -0.000070f, -0.000053f, - +0.000072f, +0.000009f, -0.000088f, +0.000094f, +0.000048f, +0.000075f, -0.000018f, +0.000091f, +0.000035f, +0.000070f, - +0.000009f, -0.000034f, -0.000085f, +0.000047f, -0.000122f, -0.000077f, +0.000025f, +0.000014f, -0.000048f, +0.000034f, - -0.000034f, +0.000090f, -0.000006f, -0.000064f, -0.000063f, +0.000006f - }, - { - +0.000320f, +0.007325f, -0.003166f, -0.001701f, -0.000517f, -0.000334f, -0.001538f, +0.000945f, -0.000161f, -0.000997f, - -0.000954f, +0.001381f, +0.000195f, -0.000678f, +0.000817f, +0.001660f, -0.001115f, +0.000343f, -0.001587f, +0.002977f, - -0.000063f, -0.001291f, -0.000175f, -0.001077f, -0.000118f, -0.000679f, -0.000091f, -0.000712f, +0.000011f, +0.000621f, - -0.000072f, +0.000072f, +0.000076f, +0.000113f, -0.000708f, +0.000989f, +0.000346f, +0.000670f, -0.000275f, -0.000008f, - -0.000077f, +0.000063f, -0.000140f, +0.000114f, -0.000178f, -0.000115f, +0.000150f, -0.000004f, +0.000368f, -0.000186f, - -0.000226f, +0.000156f, +0.000154f, -0.000165f, +0.000248f, +0.000009f, -0.000021f, -0.000051f, +0.000074f, +0.000092f, - -0.000058f, +0.000145f, +0.000064f, -0.000068f, -0.000131f, +0.000078f, -0.000047f, -0.000014f, +0.000146f, -0.000015f, - +0.000081f, -0.000086f, -0.000119f, -0.000024f, +0.000105f, +0.000078f, +0.000072f, +0.000068f, -0.000116f, -0.000025f, - +0.000008f, +0.000010f, +0.000111f, +0.000073f, +0.000003f, -0.000040f, +0.000049f, +0.000001f, +0.000069f, -0.000029f, - -0.000029f, +0.000013f, -0.000034f, +0.000024f, -0.000021f, +0.000033f - }, - { - -0.000500f, -0.015482f, +0.001822f, +0.001892f, -0.001537f, +0.003260f, +0.002197f, -0.000456f, +0.000079f, -0.000731f, - +0.000322f, -0.000090f, +0.000200f, +0.001137f, -0.000812f, +0.000163f, -0.000612f, +0.000570f, -0.000084f, +0.000157f, - -0.000552f, -0.001120f, +0.000525f, -0.000483f, +0.000201f, +0.000692f, -0.000746f, -0.000827f, -0.000363f, -0.000085f, - +0.000086f, +0.000016f, +0.000463f, -0.000863f, -0.000203f, +0.000339f, -0.000248f, +0.000099f, +0.000000f, +0.000025f, - -0.000207f, -0.000205f, -0.000139f, +0.000306f, +0.000188f, -0.000054f, +0.000184f, -0.000083f, +0.000419f, +0.000006f, - -0.000451f, -0.000306f, -0.000067f, -0.000055f, +0.000005f, +0.000101f, -0.000143f, +0.000140f, +0.000172f, -0.000296f, - +0.000024f, -0.000000f, -0.000013f, -0.000103f, +0.000147f, -0.000011f, +0.000015f, -0.000024f, -0.000005f, -0.000195f, - +0.000016f, -0.000081f, -0.000002f, -0.000024f, -0.000019f, +0.000050f, +0.000083f, +0.000088f, +0.000094f, -0.000011f, - -0.000042f, -0.000094f, +0.000017f, +0.000103f, +0.000019f, +0.000133f, +0.000029f, +0.000019f, +0.000014f, -0.000096f, - -0.000004f, -0.000065f, +0.000036f, +0.000058f, +0.000017f, -0.000017f - }, - { - -0.000014f, -0.007140f, -0.001277f, +0.000089f, +0.000980f, -0.000059f, +0.000468f, -0.000072f, -0.000573f, -0.000690f, - +0.000128f, +0.000470f, -0.003230f, -0.001664f, -0.004505f, -0.000054f, +0.002577f, -0.000171f, +0.001057f, +0.000802f, - +0.003660f, +0.000884f, +0.000736f, +0.001135f, +0.002498f, -0.000050f, -0.000835f, -0.001062f, +0.002006f, -0.000117f, - +0.001562f, -0.000331f, -0.000792f, +0.000786f, +0.000799f, +0.000615f, -0.000813f, +0.000001f, -0.000353f, +0.000271f, - +0.000597f, -0.000520f, +0.000408f, -0.000089f, +0.000243f, +0.000359f, -0.000347f, -0.000254f, -0.000162f, +0.000081f, - -0.000211f, -0.000203f, +0.000340f, +0.000004f, -0.000178f, -0.000029f, +0.000342f, -0.000149f, +0.000020f, +0.000097f, - +0.000126f, -0.000329f, +0.000022f, +0.000133f, +0.000157f, +0.000032f, +0.000055f, +0.000043f, -0.000065f, -0.000018f, - -0.000067f, +0.000084f, +0.000026f, -0.000124f, -0.000138f, -0.000104f, -0.000001f, +0.000024f, -0.000008f, +0.000023f, - +0.000081f, +0.000019f, +0.000016f, +0.000075f, -0.000002f, +0.000030f, -0.000092f, +0.000050f, +0.000032f, -0.000044f, - +0.000018f, -0.000084f, -0.000045f, +0.000063f, -0.000056f, -0.000020f - }, - { - -0.002022f, -0.013450f, -0.002255f, -0.007557f, +0.000849f, +0.002127f, -0.000441f, -0.000208f, -0.000901f, +0.000476f, - -0.000055f, +0.001554f, -0.000556f, +0.001477f, +0.005296f, +0.000492f, -0.002273f, -0.000368f, -0.000698f, -0.000354f, - +0.000042f, -0.000618f, +0.000816f, +0.000858f, +0.000934f, +0.001241f, +0.000140f, +0.000540f, -0.000378f, +0.000448f, - -0.000691f, +0.000550f, -0.000449f, -0.000408f, -0.000962f, -0.000263f, +0.000491f, -0.000198f, +0.000106f, -0.000443f, - +0.000792f, +0.000131f, +0.000272f, +0.000176f, +0.000268f, +0.000328f, +0.000025f, -0.000631f, +0.000341f, +0.000176f, - +0.000047f, +0.000166f, -0.000010f, +0.000221f, +0.000051f, +0.000074f, -0.000251f, -0.000367f, +0.000191f, +0.000062f, - -0.000250f, +0.000051f, -0.000144f, +0.000022f, -0.000140f, -0.000001f, -0.000289f, -0.000128f, -0.000060f, +0.000039f, - -0.000090f, +0.000074f, -0.000066f, -0.000044f, -0.000012f, -0.000040f, -0.000174f, +0.000070f, +0.000077f, +0.000002f, - -0.000017f, +0.000033f, +0.000150f, -0.000004f, -0.000019f, +0.000120f, -0.000049f, -0.000061f, +0.000034f, -0.000002f, - -0.000027f, +0.000091f, -0.000014f, +0.000003f, -0.000020f, +0.000029f - }, - { - -0.000655f, -0.000848f, +0.002192f, +0.000043f, -0.000529f, -0.000164f, +0.000187f, -0.001634f, -0.001212f, -0.000784f, - +0.000274f, +0.001277f, +0.000666f, +0.006730f, -0.000860f, +0.001389f, +0.000904f, -0.002206f, +0.000893f, -0.001763f, - -0.000776f, -0.000747f, -0.000082f, -0.003583f, -0.000928f, +0.000128f, +0.001449f, +0.000868f, -0.000764f, +0.000978f, - +0.001363f, +0.000593f, -0.000421f, +0.000086f, +0.000537f, -0.001455f, +0.000393f, +0.000690f, -0.000590f, +0.000465f, - +0.000117f, +0.000403f, +0.000433f, -0.000401f, -0.000210f, +0.000084f, -0.000101f, +0.000035f, -0.000158f, -0.000223f, - +0.000076f, +0.000198f, -0.000049f, -0.000118f, +0.000292f, +0.000087f, +0.000119f, +0.000051f, +0.000118f, +0.000141f, - +0.000112f, +0.000155f, -0.000382f, -0.000085f, +0.000061f, +0.000147f, +0.000119f, -0.000149f, +0.000140f, +0.000082f, - +0.000214f, -0.000087f, +0.000002f, +0.000110f, -0.000112f, +0.000119f, -0.000101f, -0.000204f, -0.000001f, +0.000009f, - +0.000067f, +0.000015f, +0.000111f, -0.000166f, +0.000003f, +0.000000f, -0.000013f, +0.000075f, +0.000027f, -0.000050f, - +0.000030f, +0.000010f, -0.000016f, -0.000016f, +0.000013f, +0.000015f - } - }, - { - { - -0.004707f, +0.058937f, +0.022511f, +0.000669f, -0.000764f, -0.000110f, +0.000627f, -0.000254f, -0.000865f, -0.000053f, - -0.000523f, -0.000227f, +0.000719f, +0.000867f, +0.000874f, -0.000867f, -0.000538f, +0.000072f, +0.000420f, -0.001897f, - -0.000173f, +0.000090f, +0.000611f, +0.000111f, +0.000321f, +0.000518f, -0.000259f, +0.000946f, +0.000564f, +0.000220f, - -0.000670f, -0.000139f, -0.000937f, +0.000306f, -0.000438f, +0.000743f, -0.000684f, +0.000386f, -0.001135f, -0.000009f, - -0.000124f, -0.000051f, +0.000179f, -0.000205f, +0.000051f, -0.000048f, -0.000057f, +0.000006f, +0.000330f, +0.000002f, - -0.000012f, -0.000092f, -0.000030f, +0.000130f, +0.000080f, +0.000057f, -0.000041f, +0.000207f, +0.000034f, +0.000098f, - +0.000013f, +0.000091f, +0.000095f, +0.000151f, +0.000004f, +0.000198f, +0.000101f, -0.000224f, +0.000047f, +0.000002f, - +0.000014f, +0.000102f, -0.000024f, -0.000081f, +0.000022f, +0.000189f, +0.000011f, -0.000181f, +0.000104f, -0.000062f, - -0.000054f, -0.000094f, -0.000022f, -0.000002f, -0.000008f, +0.000104f, -0.000115f, +0.000023f, +0.000002f, -0.000054f, - -0.000037f, -0.000006f, -0.000027f, +0.000028f, +0.000022f, +0.000018f - }, - { - +0.000175f, -0.007841f, +0.004510f, +0.000042f, -0.001267f, -0.000848f, +0.000881f, -0.000519f, -0.000652f, -0.000622f, - -0.001328f, -0.000048f, -0.000881f, -0.000216f, -0.000902f, -0.002376f, +0.002738f, -0.000972f, -0.001564f, +0.000335f, - -0.000591f, -0.000890f, +0.000358f, +0.000810f, +0.000854f, +0.000305f, +0.000188f, +0.000685f, +0.000160f, +0.000857f, - +0.001259f, -0.000324f, -0.000293f, -0.001119f, +0.000486f, -0.000687f, +0.000431f, -0.000027f, +0.000436f, -0.000096f, - +0.000507f, +0.000013f, +0.000410f, -0.000272f, +0.000250f, +0.000028f, +0.000036f, -0.000133f, -0.000121f, +0.000106f, - -0.000014f, +0.000209f, -0.000353f, -0.000084f, -0.000105f, +0.000256f, +0.000115f, +0.000000f, +0.000073f, +0.000059f, - -0.000065f, -0.000058f, -0.000094f, +0.000175f, -0.000133f, -0.000020f, +0.000089f, -0.000202f, +0.000033f, -0.000088f, - +0.000019f, -0.000039f, +0.000067f, +0.000084f, +0.000029f, -0.000151f, +0.000020f, +0.000048f, +0.000065f, -0.000013f, - -0.000038f, +0.000074f, +0.000065f, -0.000037f, +0.000025f, -0.000021f, -0.000070f, +0.000023f, +0.000046f, -0.000123f, - +0.000047f, +0.000039f, -0.000015f, -0.000056f, -0.000059f, -0.000013f - }, - { - -0.004174f, +0.040176f, -0.000935f, +0.003513f, -0.000235f, +0.000460f, +0.000317f, -0.000354f, +0.000387f, +0.000137f, - -0.000082f, -0.000748f, -0.000206f, -0.000484f, -0.000180f, -0.000469f, -0.001413f, -0.000497f, -0.000407f, -0.000008f, - +0.000173f, -0.000033f, -0.001120f, +0.000680f, -0.000483f, -0.000600f, -0.000280f, -0.000013f, +0.000105f, -0.000301f, - +0.000927f, +0.001023f, -0.000331f, -0.000588f, -0.000155f, +0.000666f, +0.000540f, -0.000335f, -0.000009f, +0.000227f, - +0.000298f, -0.000106f, +0.000267f, +0.000039f, -0.000184f, -0.000196f, -0.000473f, +0.000024f, -0.000255f, +0.000175f, - +0.000120f, -0.000284f, -0.000299f, +0.000105f, -0.000269f, -0.000066f, +0.000023f, -0.000097f, +0.000018f, +0.000127f, - +0.000018f, -0.000202f, -0.000271f, +0.000138f, +0.000135f, -0.000108f, -0.000092f, -0.000133f, -0.000008f, -0.000051f, - +0.000061f, +0.000091f, -0.000135f, +0.000007f, +0.000031f, -0.000041f, +0.000074f, +0.000085f, -0.000087f, +0.000021f, - +0.000117f, -0.000018f, -0.000058f, +0.000122f, +0.000056f, -0.000069f, -0.000029f, -0.000058f, +0.000044f, -0.000003f, - -0.000039f, +0.000031f, +0.000034f, -0.000017f, +0.000026f, +0.000021f - }, - { - -0.003704f, -0.009407f, -0.006874f, -0.000463f, +0.000710f, +0.000011f, -0.000096f, -0.000023f, -0.000225f, -0.000405f, - +0.000804f, +0.000366f, -0.000761f, -0.001341f, +0.001635f, +0.000684f, -0.000155f, -0.001145f, -0.000077f, -0.000060f, - -0.000058f, +0.000217f, -0.000441f, +0.000316f, -0.000309f, +0.000270f, +0.000561f, +0.000410f, +0.000026f, -0.000514f, - -0.000733f, +0.000583f, +0.000357f, -0.000187f, +0.000945f, -0.001002f, +0.000279f, -0.000492f, -0.000099f, -0.000136f, - -0.000066f, +0.000186f, +0.000128f, -0.000033f, +0.000274f, +0.000102f, -0.000076f, +0.000160f, -0.000031f, +0.000570f, - -0.000331f, -0.000128f, +0.000169f, -0.000300f, -0.000186f, +0.000076f, +0.000014f, +0.000141f, -0.000422f, +0.000138f, - +0.000042f, +0.000137f, -0.000179f, +0.000176f, -0.000169f, -0.000053f, +0.000074f, -0.000189f, +0.000081f, +0.000005f, - -0.000027f, -0.000001f, +0.000121f, +0.000054f, +0.000096f, +0.000087f, -0.000042f, -0.000050f, +0.000032f, +0.000040f, - -0.000115f, -0.000060f, -0.000109f, +0.000055f, +0.000018f, -0.000003f, +0.000009f, -0.000072f, +0.000089f, +0.000034f, - -0.000011f, -0.000025f, -0.000004f, +0.000009f, -0.000040f, -0.000008f - }, - { - +0.000721f, +0.003737f, -0.000268f, +0.000557f, -0.000364f, +0.000020f, +0.000495f, +0.000498f, -0.000364f, -0.000289f, - +0.000004f, +0.000099f, -0.000326f, +0.000106f, -0.008274f, +0.000707f, -0.000319f, +0.001167f, -0.006965f, -0.000807f, - +0.000265f, +0.001910f, -0.000130f, -0.001585f, -0.001092f, -0.001420f, +0.002151f, -0.001024f, -0.000329f, +0.000541f, - -0.000635f, -0.000529f, -0.000421f, +0.000594f, -0.000704f, -0.000899f, -0.000721f, +0.000227f, +0.000615f, -0.000329f, - -0.000219f, -0.000158f, +0.000200f, +0.000060f, +0.000125f, +0.000060f, -0.000014f, -0.000096f, +0.000045f, -0.000458f, - -0.000263f, +0.000066f, +0.000084f, +0.000117f, -0.000098f, +0.000292f, -0.000097f, -0.000049f, +0.000075f, +0.000005f, - +0.000176f, +0.000040f, -0.000019f, +0.000008f, -0.000082f, -0.000086f, -0.000012f, +0.000106f, +0.000130f, -0.000132f, - -0.000053f, +0.000154f, -0.000013f, -0.000022f, +0.000033f, +0.000005f, -0.000040f, -0.000014f, -0.000030f, -0.000127f, - -0.000019f, -0.000078f, +0.000077f, +0.000091f, -0.000043f, +0.000042f, -0.000034f, -0.000007f, +0.000030f, -0.000041f, - -0.000030f, -0.000013f, -0.000042f, +0.000025f, +0.000040f, -0.000020f - }, - { - -0.003327f, -0.005603f, -0.007827f, +0.001445f, -0.000128f, -0.000097f, +0.000582f, -0.000464f, -0.000001f, +0.000601f, - -0.000960f, -0.000252f, +0.000377f, -0.000871f, +0.000557f, -0.000606f, -0.000193f, -0.001055f, -0.000748f, +0.000379f, - +0.000265f, -0.000870f, -0.000964f, +0.000469f, +0.000043f, +0.000100f, -0.000637f, +0.000302f, +0.000712f, +0.000079f, - -0.001167f, +0.000058f, +0.000200f, +0.000249f, +0.000314f, -0.000208f, -0.001007f, +0.000611f, +0.000202f, +0.000380f, - -0.000004f, +0.000136f, +0.000291f, -0.000435f, -0.000091f, +0.000520f, +0.000355f, +0.000744f, +0.000344f, -0.000041f, - -0.000124f, +0.000291f, +0.000038f, +0.000075f, +0.000019f, +0.000245f, -0.000162f, -0.000165f, -0.000163f, +0.000127f, - +0.000134f, -0.000035f, -0.000085f, -0.000154f, +0.000044f, +0.000024f, +0.000007f, +0.000020f, +0.000128f, +0.000087f, - +0.000029f, -0.000031f, -0.000103f, +0.000106f, -0.000002f, +0.000083f, -0.000073f, -0.000038f, -0.000049f, +0.000012f, - -0.000005f, -0.000009f, +0.000059f, +0.000160f, -0.000025f, -0.000013f, -0.000020f, +0.000006f, -0.000109f, +0.000113f, - -0.000001f, -0.000039f, -0.000032f, -0.000025f, +0.000088f, -0.000003f - }, - { - +0.000740f, -0.002593f, -0.001796f, +0.000324f, +0.000153f, +0.000047f, -0.000171f, +0.000295f, -0.000193f, -0.000055f, - +0.000212f, -0.000489f, -0.000817f, -0.002399f, -0.001053f, +0.001626f, +0.005019f, +0.000430f, -0.001328f, +0.000448f, - +0.000466f, +0.000087f, -0.003075f, -0.001164f, -0.000978f, +0.000123f, +0.001185f, -0.001889f, -0.000479f, -0.000147f, - -0.000014f, -0.000797f, +0.000303f, +0.000601f, -0.001347f, -0.000015f, -0.000264f, -0.000475f, +0.000260f, +0.000677f, - -0.000267f, -0.000355f, +0.000690f, -0.000231f, -0.000365f, -0.000045f, -0.000366f, -0.000178f, +0.000217f, +0.000062f, - +0.000099f, +0.000042f, -0.000110f, -0.000122f, -0.000036f, -0.000066f, -0.000131f, -0.000060f, -0.000144f, -0.000020f, - +0.000050f, +0.000031f, +0.000152f, -0.000090f, -0.000051f, +0.000201f, +0.000045f, -0.000048f, -0.000175f, +0.000015f, - +0.000057f, +0.000046f, -0.000093f, -0.000047f, -0.000046f, -0.000068f, +0.000073f, -0.000071f, -0.000075f, -0.000010f, - +0.000101f, -0.000042f, +0.000007f, +0.000025f, +0.000020f, +0.000006f, -0.000031f, +0.000041f, +0.000006f, -0.000023f, - +0.000072f, +0.000068f, +0.000068f, -0.000075f, +0.000041f, +0.000028f - }, - { - -0.001037f, +0.058817f, +0.003137f, -0.001640f, -0.000767f, -0.000215f, -0.000389f, -0.000010f, +0.000088f, +0.000629f, - -0.000408f, -0.000629f, +0.001288f, +0.000973f, -0.001299f, +0.000374f, +0.001175f, +0.000447f, +0.000818f, -0.000054f, - -0.000226f, +0.000473f, -0.000564f, -0.000582f, -0.000088f, +0.000135f, +0.000355f, -0.000500f, -0.000541f, -0.000248f, - +0.000013f, +0.000086f, +0.000676f, -0.000377f, +0.000675f, +0.000176f, -0.000372f, +0.000488f, -0.000650f, +0.000125f, - -0.000194f, -0.000160f, -0.000218f, +0.000693f, -0.000087f, +0.000160f, -0.000527f, +0.000090f, +0.000064f, -0.000311f, - -0.000621f, -0.000214f, -0.000023f, +0.000083f, -0.000012f, -0.000016f, -0.000023f, -0.000215f, -0.000182f, +0.000130f, - +0.000196f, +0.000088f, -0.000078f, +0.000077f, -0.000065f, +0.000076f, -0.000139f, +0.000056f, -0.000002f, +0.000028f, - +0.000052f, -0.000087f, +0.000063f, -0.000074f, -0.000194f, +0.000048f, +0.000111f, -0.000253f, -0.000093f, +0.000091f, - -0.000100f, -0.000033f, +0.000010f, -0.000041f, +0.000002f, +0.000018f, -0.000013f, +0.000018f, +0.000011f, -0.000014f, - -0.000047f, +0.000043f, +0.000021f, -0.000034f, -0.000042f, -0.000013f - }, - { - +0.000953f, -0.000575f, -0.004693f, +0.000408f, -0.000717f, +0.000129f, +0.000162f, +0.000981f, -0.000192f, -0.000125f, - +0.000099f, +0.000120f, +0.000329f, +0.002134f, +0.000708f, -0.001871f, +0.003676f, -0.000643f, +0.001230f, -0.001640f, - -0.001989f, +0.001839f, -0.000735f, +0.000176f, -0.001277f, -0.000765f, +0.000899f, -0.002506f, +0.000282f, -0.000682f, - -0.000382f, +0.000573f, -0.000824f, -0.000320f, +0.000241f, -0.001155f, -0.000605f, +0.000454f, -0.000110f, +0.000665f, - -0.000436f, -0.000236f, -0.000061f, -0.000096f, -0.000413f, -0.000463f, -0.000090f, -0.000002f, -0.000018f, -0.000265f, - -0.000083f, -0.000104f, +0.000166f, +0.000039f, -0.000071f, -0.000044f, +0.000240f, -0.000136f, -0.000220f, -0.000267f, - -0.000046f, -0.000049f, -0.000006f, +0.000087f, +0.000026f, +0.000068f, +0.000302f, -0.000001f, +0.000026f, -0.000190f, - -0.000019f, -0.000019f, +0.000087f, +0.000165f, -0.000027f, -0.000086f, +0.000080f, +0.000000f, -0.000017f, +0.000045f, - -0.000079f, -0.000001f, +0.000063f, +0.000042f, -0.000001f, +0.000061f, -0.000038f, -0.000135f, -0.000006f, +0.000021f, - -0.000035f, -0.000066f, +0.000036f, +0.000018f, -0.000018f, -0.000002f - }, - { - +0.004197f, +0.029251f, +0.009512f, -0.001307f, +0.001805f, +0.000137f, +0.001139f, +0.000699f, -0.000134f, -0.000427f, - -0.000536f, +0.000233f, -0.000857f, -0.000056f, +0.001656f, -0.000158f, +0.001234f, +0.000380f, -0.001879f, +0.000230f, - +0.000799f, -0.000384f, +0.000014f, +0.000690f, +0.000350f, -0.000133f, -0.000322f, -0.000600f, -0.000155f, +0.000272f, - -0.000057f, -0.000233f, +0.000477f, -0.000492f, -0.000352f, +0.000256f, -0.000479f, -0.000101f, -0.000187f, -0.000071f, - -0.000478f, -0.000111f, -0.000039f, +0.000276f, +0.000416f, -0.000368f, -0.000493f, +0.000023f, +0.000051f, -0.000197f, - -0.000204f, +0.000199f, -0.000060f, -0.000298f, +0.000294f, +0.000407f, -0.000001f, -0.000294f, +0.000066f, +0.000055f, - +0.000224f, +0.000186f, -0.000009f, +0.000048f, +0.000013f, +0.000068f, -0.000037f, -0.000037f, +0.000060f, -0.000144f, - -0.000055f, -0.000048f, +0.000045f, -0.000032f, +0.000041f, -0.000023f, -0.000001f, -0.000089f, +0.000123f, -0.000113f, - +0.000033f, +0.000114f, +0.000012f, -0.000035f, +0.000023f, +0.000002f, -0.000077f, -0.000003f, -0.000018f, -0.000086f, - +0.000000f, -0.000055f, +0.000063f, -0.000007f, +0.000024f, -0.000056f - }, - { - -0.000496f, +0.008855f, +0.001152f, -0.001237f, -0.000204f, -0.000110f, -0.000701f, +0.001240f, -0.000223f, -0.000635f, - -0.001561f, -0.000526f, +0.000062f, -0.001353f, +0.000661f, -0.001457f, -0.002901f, +0.002521f, -0.002721f, -0.001698f, - +0.000409f, -0.000366f, +0.001020f, -0.000132f, +0.000363f, +0.000755f, -0.000716f, -0.000320f, -0.000066f, +0.000452f, - +0.000067f, +0.000149f, +0.000211f, -0.000119f, +0.000119f, -0.000155f, -0.000262f, +0.000610f, -0.000170f, +0.000417f, - -0.000057f, +0.000437f, +0.000188f, -0.000002f, -0.000050f, +0.000198f, -0.000022f, +0.000031f, +0.000059f, -0.000319f, - +0.000070f, +0.000047f, +0.000015f, -0.000178f, +0.000256f, +0.000078f, +0.000169f, -0.000057f, -0.000065f, +0.000115f, - -0.000072f, -0.000302f, +0.000023f, +0.000142f, +0.000048f, -0.000127f, +0.000058f, +0.000007f, -0.000069f, -0.000060f, - +0.000031f, -0.000007f, -0.000022f, +0.000023f, -0.000051f, -0.000002f, -0.000040f, +0.000090f, +0.000147f, -0.000079f, - +0.000008f, +0.000100f, -0.000090f, -0.000031f, +0.000083f, +0.000066f, +0.000029f, +0.000076f, -0.000056f, +0.000084f, - +0.000002f, +0.000012f, +0.000034f, +0.000008f, -0.000003f, -0.000078f - }, - { - +0.001465f, -0.014193f, +0.000742f, +0.000715f, -0.000039f, -0.000133f, +0.000975f, -0.000605f, +0.000250f, +0.000389f, - -0.000424f, +0.001184f, -0.000152f, -0.000342f, -0.000972f, +0.000041f, -0.000577f, -0.000368f, +0.000237f, -0.000286f, - +0.000946f, -0.000679f, +0.000633f, -0.000590f, +0.000515f, -0.000383f, +0.000037f, -0.000850f, +0.000702f, -0.000690f, - -0.000249f, -0.000358f, +0.000197f, -0.000155f, -0.000968f, +0.000046f, +0.000062f, +0.000052f, +0.000298f, -0.000192f, - +0.000192f, +0.000083f, +0.000322f, -0.000188f, -0.000260f, -0.000230f, +0.000323f, +0.000045f, +0.000306f, +0.000187f, - -0.000202f, -0.000416f, +0.000200f, -0.000084f, +0.000122f, -0.000063f, -0.000139f, +0.000054f, -0.000127f, +0.000142f, - +0.000058f, -0.000016f, +0.000078f, -0.000024f, -0.000148f, -0.000035f, +0.000021f, -0.000126f, +0.000204f, +0.000029f, - -0.000069f, +0.000066f, +0.000010f, +0.000012f, -0.000030f, -0.000067f, -0.000015f, +0.000006f, +0.000058f, +0.000040f, - -0.000025f, -0.000017f, -0.000098f, +0.000000f, +0.000000f, -0.000087f, +0.000087f, -0.000004f, +0.000017f, +0.000028f, - -0.000035f, -0.000003f, -0.000062f, -0.000041f, +0.000047f, -0.000021f - }, - { - -0.000167f, -0.003570f, +0.001010f, -0.000461f, -0.000397f, +0.000199f, -0.000607f, +0.000060f, -0.000587f, -0.000622f, - -0.000005f, -0.001225f, +0.003481f, +0.009182f, -0.000596f, -0.002417f, +0.001316f, -0.000443f, -0.000403f, +0.000190f, - -0.000874f, +0.002345f, -0.000153f, -0.002049f, +0.000319f, +0.000299f, +0.001022f, +0.000679f, +0.001407f, -0.000402f, - -0.001543f, +0.000043f, -0.000306f, +0.000490f, +0.000110f, +0.000112f, +0.000434f, -0.000315f, +0.000253f, -0.000499f, - +0.000161f, -0.000286f, +0.000592f, -0.000423f, +0.000506f, +0.000512f, +0.000142f, -0.000086f, -0.000177f, +0.000132f, - -0.000218f, -0.000118f, -0.000209f, +0.000032f, -0.000062f, -0.000233f, -0.000324f, +0.000017f, -0.000082f, -0.000105f, - +0.000290f, +0.000220f, -0.000095f, -0.000114f, -0.000087f, +0.000346f, -0.000096f, -0.000024f, +0.000074f, -0.000088f, - -0.000027f, +0.000057f, +0.000107f, -0.000034f, -0.000002f, -0.000057f, -0.000116f, -0.000057f, +0.000066f, -0.000002f, - -0.000075f, +0.000064f, +0.000105f, +0.000026f, +0.000027f, +0.000026f, +0.000063f, -0.000079f, +0.000005f, -0.000006f, - +0.000064f, +0.000107f, -0.000097f, -0.000100f, +0.000074f, -0.000030f - }, - { - +0.002737f, -0.003649f, +0.003181f, -0.001882f, +0.001220f, +0.001662f, -0.000176f, +0.000082f, +0.000417f, -0.000551f, - -0.000922f, +0.000321f, +0.000175f, +0.000113f, +0.001001f, -0.000947f, +0.000498f, +0.000030f, -0.000314f, -0.000651f, - +0.000552f, +0.000578f, -0.000577f, +0.000708f, -0.001005f, +0.000370f, +0.000225f, +0.000649f, -0.000031f, -0.000575f, - +0.000369f, +0.000614f, -0.000430f, -0.000034f, +0.000117f, -0.000349f, -0.000080f, -0.000107f, +0.000293f, +0.000411f, - -0.000127f, -0.000319f, -0.000193f, -0.000263f, +0.000013f, +0.000167f, +0.000219f, -0.000121f, +0.000330f, +0.000286f, - -0.000527f, +0.000182f, -0.000309f, -0.000318f, -0.000229f, +0.000134f, +0.000275f, +0.000077f, +0.000106f, +0.000021f, - -0.000217f, +0.000170f, -0.000030f, +0.000078f, +0.000127f, -0.000001f, +0.000158f, -0.000037f, -0.000090f, -0.000019f, - +0.000068f, +0.000000f, +0.000022f, -0.000156f, -0.000018f, +0.000019f, +0.000041f, -0.000062f, -0.000023f, +0.000074f, - +0.000028f, -0.000071f, +0.000021f, +0.000058f, +0.000020f, +0.000027f, +0.000138f, -0.000062f, -0.000080f, +0.000015f, - +0.000003f, -0.000037f, +0.000029f, +0.000004f, +0.000033f, -0.000036f - }, - { - +0.000357f, -0.002055f, +0.001412f, +0.000539f, -0.000177f, -0.000124f, +0.000014f, -0.000186f, -0.000838f, -0.000213f, - +0.000185f, -0.000558f, +0.000239f, +0.005144f, -0.009880f, +0.002062f, +0.003274f, -0.000044f, +0.001272f, +0.000436f, - +0.002802f, +0.001433f, -0.000349f, -0.000841f, +0.001228f, +0.000275f, +0.001224f, +0.000821f, -0.001555f, +0.001320f, - +0.000970f, -0.000273f, -0.000091f, -0.000063f, +0.000367f, -0.000437f, +0.000195f, -0.000415f, +0.000139f, +0.001076f, - +0.000140f, -0.000574f, -0.000247f, -0.000293f, +0.000659f, +0.000020f, -0.000081f, +0.000182f, -0.000044f, -0.000211f, - +0.000124f, +0.000132f, -0.000215f, -0.000384f, +0.000010f, +0.000039f, +0.000086f, -0.000178f, +0.000279f, +0.000012f, - -0.000493f, -0.000072f, -0.000090f, +0.000061f, -0.000096f, +0.000006f, -0.000109f, +0.000272f, -0.000132f, -0.000032f, - +0.000119f, +0.000082f, -0.000155f, +0.000017f, -0.000007f, -0.000088f, +0.000111f, -0.000020f, -0.000024f, -0.000034f, - +0.000008f, +0.000073f, +0.000077f, +0.000115f, -0.000071f, -0.000003f, -0.000015f, -0.000030f, -0.000003f, +0.000057f, - +0.000029f, -0.000045f, +0.000061f, -0.000004f, -0.000028f, +0.000036f - } - }, - { - { - +0.007374f, +0.086748f, +0.000977f, +0.001042f, -0.001523f, +0.000011f, +0.000223f, -0.001085f, -0.000142f, +0.000474f, - -0.000186f, -0.000027f, +0.000691f, +0.001356f, -0.001532f, -0.000216f, -0.000568f, -0.000295f, +0.000056f, -0.000386f, - +0.000402f, -0.000840f, +0.000202f, +0.000053f, +0.000346f, +0.000182f, +0.000130f, +0.000236f, +0.001021f, +0.000581f, - +0.000296f, -0.000648f, -0.000562f, -0.000073f, +0.000292f, +0.000094f, +0.000151f, +0.000225f, -0.000583f, -0.000496f, - -0.000134f, -0.000087f, -0.000014f, +0.000164f, +0.000403f, -0.000073f, -0.000377f, +0.000155f, +0.000046f, +0.000228f, - +0.000140f, -0.000101f, +0.000040f, +0.000085f, -0.000196f, +0.000026f, +0.000105f, -0.000077f, -0.000119f, +0.000299f, - -0.000092f, -0.000024f, -0.000021f, +0.000210f, +0.000073f, +0.000134f, +0.000127f, -0.000139f, +0.000008f, -0.000069f, - +0.000105f, +0.000070f, +0.000037f, -0.000077f, -0.000068f, +0.000030f, +0.000089f, -0.000118f, +0.000089f, +0.000043f, - +0.000043f, -0.000022f, -0.000045f, +0.000033f, -0.000052f, +0.000095f, +0.000007f, +0.000006f, +0.000031f, +0.000010f, - -0.000068f, +0.000021f, -0.000002f, -0.000002f, -0.000003f, +0.000012f - }, - { - +0.000758f, -0.002948f, +0.000053f, -0.001165f, -0.000427f, -0.000474f, +0.000052f, -0.000082f, -0.000308f, -0.000384f, - -0.001632f, -0.000501f, -0.001162f, -0.000449f, -0.001895f, -0.001092f, -0.000262f, +0.000568f, -0.002340f, -0.000226f, - -0.000415f, -0.000180f, +0.000194f, -0.000348f, +0.001871f, +0.000971f, +0.000559f, +0.000247f, -0.000179f, +0.000283f, - +0.000781f, +0.000244f, -0.000483f, -0.000898f, +0.000266f, -0.000260f, +0.000167f, +0.000127f, -0.000032f, +0.000078f, - +0.000280f, +0.000211f, +0.000577f, +0.000127f, +0.000161f, -0.000088f, +0.000043f, -0.000552f, +0.000179f, +0.000051f, - +0.000000f, +0.000297f, +0.000073f, -0.000057f, -0.000315f, +0.000112f, +0.000058f, +0.000115f, -0.000154f, +0.000050f, - +0.000078f, +0.000163f, -0.000107f, -0.000102f, +0.000026f, -0.000079f, +0.000164f, +0.000030f, -0.000123f, -0.000066f, - +0.000084f, -0.000171f, +0.000009f, +0.000046f, +0.000064f, -0.000163f, -0.000131f, -0.000018f, +0.000132f, +0.000072f, - -0.000057f, +0.000022f, +0.000064f, +0.000011f, +0.000024f, +0.000058f, -0.000010f, +0.000006f, +0.000108f, -0.000078f, - +0.000009f, +0.000027f, +0.000039f, -0.000004f, -0.000061f, -0.000025f - }, - { - +0.002253f, +0.024286f, +0.006361f, +0.005886f, -0.001223f, +0.000713f, +0.000992f, -0.000253f, -0.000712f, +0.000067f, - -0.000288f, +0.000110f, -0.001301f, +0.000416f, -0.000516f, -0.000571f, +0.000023f, -0.001670f, -0.000454f, -0.000275f, - -0.000431f, -0.000453f, -0.001077f, -0.000240f, +0.000745f, -0.000326f, -0.000087f, -0.000366f, +0.000259f, +0.000268f, - +0.000961f, -0.000269f, -0.000222f, -0.000020f, -0.000332f, +0.000953f, +0.000303f, +0.000104f, -0.000535f, -0.000193f, - +0.000189f, -0.000081f, +0.000239f, -0.000005f, +0.000030f, -0.000095f, -0.000243f, +0.000060f, -0.000052f, -0.000074f, - +0.000049f, -0.000058f, -0.000308f, +0.000276f, -0.000098f, -0.000190f, -0.000129f, -0.000026f, -0.000137f, +0.000119f, - +0.000084f, -0.000089f, -0.000037f, -0.000103f, +0.000093f, +0.000030f, -0.000041f, -0.000110f, +0.000040f, -0.000079f, - -0.000056f, +0.000113f, -0.000063f, +0.000064f, -0.000058f, -0.000186f, +0.000097f, +0.000182f, -0.000041f, -0.000066f, - +0.000016f, +0.000066f, -0.000021f, +0.000009f, +0.000039f, -0.000013f, -0.000022f, -0.000056f, +0.000035f, -0.000009f, - -0.000038f, -0.000036f, +0.000046f, +0.000014f, -0.000015f, +0.000027f - }, - { - +0.000493f, -0.029912f, +0.005601f, -0.000080f, +0.000405f, +0.000173f, +0.000240f, +0.000398f, -0.000355f, -0.000283f, - -0.000354f, +0.000132f, -0.000533f, +0.000570f, -0.001088f, +0.000625f, +0.000501f, -0.001488f, -0.000505f, +0.000248f, - -0.000245f, -0.000230f, +0.000504f, +0.000016f, -0.000475f, -0.000046f, +0.000976f, +0.000587f, -0.000072f, -0.000536f, - -0.000310f, +0.000612f, +0.000360f, +0.000015f, +0.000573f, -0.000716f, +0.000226f, -0.000390f, +0.000047f, -0.000160f, - -0.000437f, +0.000189f, +0.000116f, -0.000115f, -0.000060f, +0.000357f, +0.000363f, +0.000020f, -0.000033f, +0.000456f, - +0.000100f, -0.000447f, +0.000132f, -0.000342f, -0.000040f, +0.000049f, -0.000140f, -0.000021f, -0.000268f, +0.000013f, - +0.000137f, +0.000112f, -0.000043f, +0.000196f, -0.000023f, +0.000012f, +0.000055f, -0.000232f, -0.000002f, +0.000118f, - -0.000022f, -0.000161f, +0.000024f, +0.000087f, +0.000042f, +0.000016f, +0.000035f, +0.000018f, +0.000018f, +0.000098f, - -0.000027f, -0.000045f, -0.000052f, +0.000040f, -0.000005f, -0.000033f, +0.000053f, -0.000048f, +0.000004f, +0.000043f, - +0.000021f, -0.000023f, -0.000017f, +0.000024f, -0.000015f, -0.000010f - }, - { - -0.001132f, -0.000180f, +0.003575f, +0.000976f, -0.000378f, +0.000008f, +0.000587f, +0.000280f, +0.000016f, +0.000014f, - +0.000000f, -0.000176f, +0.000423f, +0.000077f, -0.007746f, -0.000986f, -0.000917f, +0.002430f, -0.000568f, -0.002531f, - +0.000446f, +0.001196f, -0.001039f, -0.000942f, -0.001163f, +0.000073f, -0.001281f, -0.000734f, +0.000072f, +0.000188f, - -0.000442f, +0.000078f, -0.000325f, +0.000186f, -0.000510f, +0.000223f, -0.000881f, -0.000305f, +0.000772f, +0.000343f, - -0.000443f, +0.000025f, +0.000561f, -0.000122f, -0.000109f, +0.000080f, -0.000019f, -0.000051f, -0.000100f, -0.000001f, - -0.000017f, -0.000561f, +0.000285f, -0.000059f, -0.000152f, +0.000160f, +0.000110f, +0.000035f, -0.000046f, +0.000106f, - +0.000216f, +0.000069f, -0.000078f, +0.000053f, +0.000054f, -0.000026f, +0.000047f, -0.000038f, +0.000118f, +0.000088f, - -0.000166f, -0.000002f, +0.000066f, -0.000032f, +0.000011f, +0.000033f, -0.000043f, +0.000053f, +0.000063f, -0.000017f, - +0.000011f, -0.000105f, +0.000008f, +0.000058f, -0.000036f, +0.000031f, -0.000040f, -0.000009f, +0.000011f, +0.000004f, - -0.000011f, -0.000006f, -0.000017f, -0.000029f, +0.000070f, +0.000017f - }, - { - +0.000061f, -0.026286f, +0.005291f, +0.000694f, -0.000865f, -0.000012f, +0.000840f, -0.000587f, -0.000361f, +0.001409f, - -0.000350f, -0.000578f, -0.000342f, -0.000547f, +0.000467f, -0.001259f, -0.000282f, -0.000558f, -0.000265f, +0.000049f, - +0.000814f, -0.000277f, -0.000901f, -0.000343f, +0.000279f, +0.000155f, -0.000009f, -0.000436f, +0.000501f, -0.000040f, - -0.000414f, -0.000320f, +0.000602f, +0.000372f, -0.000417f, -0.000095f, +0.000138f, -0.000012f, +0.000262f, +0.000634f, - +0.000837f, -0.000300f, -0.000224f, -0.000325f, +0.000136f, +0.000361f, +0.000252f, +0.000340f, +0.000390f, +0.000298f, - -0.000367f, +0.000011f, +0.000323f, +0.000345f, -0.000155f, +0.000139f, +0.000222f, -0.000122f, -0.000123f, +0.000089f, - -0.000051f, +0.000055f, -0.000010f, -0.000080f, -0.000048f, -0.000012f, +0.000052f, -0.000016f, +0.000142f, +0.000088f, - +0.000004f, +0.000002f, -0.000100f, +0.000035f, -0.000016f, +0.000103f, +0.000067f, -0.000029f, -0.000075f, -0.000060f, - -0.000011f, -0.000073f, -0.000036f, +0.000129f, +0.000045f, +0.000053f, +0.000001f, +0.000085f, -0.000097f, +0.000023f, - +0.000002f, -0.000016f, -0.000015f, -0.000018f, +0.000015f, +0.000022f - }, - { - +0.000113f, +0.000461f, -0.001642f, -0.000285f, +0.000046f, +0.000072f, -0.000514f, +0.000398f, +0.000154f, -0.000155f, - -0.000125f, -0.000610f, -0.000848f, -0.004511f, -0.001407f, +0.005164f, +0.001794f, +0.000338f, -0.000750f, +0.000055f, - -0.000179f, +0.001197f, -0.002237f, -0.003686f, -0.000772f, +0.000598f, -0.000315f, +0.000175f, -0.001086f, +0.000224f, - +0.000332f, -0.000249f, -0.000679f, +0.000565f, -0.000255f, -0.000333f, -0.000456f, -0.000065f, +0.000533f, +0.000735f, - -0.000347f, +0.000018f, +0.000353f, -0.000510f, -0.000008f, +0.000233f, -0.000186f, -0.000074f, -0.000040f, +0.000002f, - +0.000172f, -0.000026f, +0.000059f, -0.000113f, -0.000118f, -0.000076f, +0.000050f, -0.000241f, -0.000106f, -0.000135f, - +0.000137f, -0.000061f, +0.000055f, +0.000029f, -0.000075f, +0.000064f, +0.000184f, +0.000081f, -0.000211f, -0.000125f, - +0.000026f, +0.000116f, -0.000042f, -0.000011f, +0.000078f, +0.000034f, +0.000069f, +0.000040f, -0.000013f, -0.000062f, - +0.000072f, -0.000008f, +0.000067f, -0.000060f, +0.000035f, +0.000019f, -0.000053f, -0.000010f, -0.000049f, -0.000080f, - -0.000024f, +0.000018f, +0.000068f, -0.000034f, +0.000013f, +0.000051f - }, - { - +0.002241f, +0.059691f, -0.001893f, -0.002116f, -0.000124f, -0.000058f, -0.000931f, -0.000339f, +0.000765f, +0.000231f, - +0.000509f, -0.000824f, +0.000426f, +0.000106f, +0.000771f, +0.000423f, +0.001068f, -0.000439f, +0.000379f, +0.001116f, - -0.000538f, +0.000082f, +0.000052f, -0.000530f, -0.000295f, +0.000158f, +0.000442f, -0.000352f, -0.001306f, -0.000048f, - +0.000122f, -0.000348f, +0.001209f, -0.000526f, +0.000285f, +0.000958f, -0.000414f, +0.000209f, +0.000691f, -0.000588f, - +0.000110f, -0.000671f, +0.000294f, -0.000114f, +0.000059f, +0.000118f, -0.000432f, -0.000320f, +0.000034f, +0.000041f, - -0.000427f, -0.000530f, -0.000457f, +0.000026f, +0.000214f, +0.000142f, +0.000079f, -0.000159f, -0.000336f, -0.000003f, - +0.000098f, +0.000048f, +0.000063f, -0.000004f, -0.000089f, -0.000052f, -0.000098f, +0.000083f, -0.000038f, +0.000030f, - +0.000038f, -0.000084f, +0.000106f, +0.000037f, -0.000075f, -0.000111f, +0.000181f, -0.000063f, -0.000109f, +0.000057f, - -0.000078f, -0.000007f, -0.000057f, -0.000001f, -0.000032f, +0.000003f, +0.000090f, +0.000030f, +0.000001f, +0.000005f, - -0.000014f, +0.000040f, +0.000034f, +0.000013f, -0.000047f, -0.000041f - }, - { - +0.000078f, +0.002073f, -0.001965f, -0.000727f, -0.000338f, -0.000088f, +0.000222f, +0.000868f, +0.000547f, -0.000384f, - -0.000413f, +0.000160f, +0.000780f, +0.001861f, +0.002226f, -0.005390f, +0.002308f, -0.000280f, -0.000007f, -0.001035f, - -0.001112f, +0.000772f, +0.001469f, -0.001091f, +0.000041f, -0.001864f, -0.000306f, -0.001484f, +0.001136f, -0.001405f, - -0.000654f, -0.000001f, -0.000094f, +0.000159f, -0.000496f, -0.000621f, -0.000024f, +0.000154f, -0.000029f, -0.000058f, - +0.000826f, -0.000328f, -0.000155f, +0.000085f, -0.000198f, +0.000108f, -0.000067f, -0.000049f, -0.000187f, -0.000270f, - -0.000159f, +0.000172f, +0.000027f, +0.000053f, -0.000118f, +0.000018f, +0.000261f, -0.000072f, +0.000005f, -0.000196f, - -0.000077f, -0.000220f, -0.000023f, -0.000091f, -0.000035f, -0.000009f, +0.000076f, -0.000044f, +0.000037f, -0.000173f, - -0.000087f, -0.000158f, -0.000060f, +0.000239f, +0.000050f, -0.000082f, -0.000025f, +0.000104f, -0.000009f, +0.000039f, - -0.000020f, -0.000112f, +0.000017f, +0.000035f, +0.000040f, +0.000033f, +0.000095f, -0.000025f, -0.000065f, -0.000022f, - +0.000022f, -0.000062f, +0.000003f, +0.000040f, -0.000022f, +0.000028f - }, - { - -0.003123f, +0.035421f, +0.010608f, +0.002619f, +0.000438f, +0.002151f, +0.002221f, -0.000790f, +0.000604f, +0.000139f, - -0.000293f, +0.000077f, -0.000140f, -0.001078f, +0.000728f, +0.000347f, +0.001343f, +0.000252f, -0.001282f, -0.000242f, - +0.000957f, -0.000286f, +0.000429f, +0.000325f, +0.000690f, -0.000186f, -0.000414f, -0.000116f, -0.000321f, -0.000009f, - +0.000258f, +0.000480f, +0.000179f, +0.000351f, -0.000118f, -0.000498f, -0.000460f, +0.000126f, -0.000629f, +0.000030f, - -0.000172f, +0.000189f, -0.000400f, +0.000150f, +0.000297f, +0.000090f, -0.000501f, -0.000138f, +0.000054f, +0.000134f, - -0.000130f, +0.000272f, +0.000215f, -0.000192f, +0.000119f, +0.000266f, +0.000229f, -0.000350f, +0.000066f, -0.000177f, - +0.000225f, +0.000214f, +0.000010f, +0.000111f, -0.000068f, +0.000134f, -0.000034f, -0.000018f, +0.000047f, -0.000081f, - -0.000117f, +0.000021f, +0.000094f, -0.000020f, +0.000026f, -0.000053f, +0.000075f, -0.000084f, +0.000021f, -0.000069f, - -0.000056f, +0.000057f, +0.000066f, -0.000016f, +0.000106f, +0.000113f, -0.000006f, +0.000004f, +0.000017f, -0.000046f, - +0.000041f, -0.000112f, +0.000019f, +0.000024f, +0.000049f, -0.000018f - }, - { - +0.000280f, +0.006318f, +0.002729f, -0.001026f, -0.000421f, -0.000002f, +0.000407f, +0.000517f, +0.000301f, -0.000067f, - -0.000913f, -0.000221f, -0.000911f, -0.001912f, -0.000348f, -0.000541f, -0.001471f, -0.000603f, -0.000690f, -0.002688f, - -0.000547f, +0.000074f, +0.001499f, +0.000138f, +0.000846f, +0.000332f, -0.000411f, +0.000491f, -0.000584f, -0.000406f, - -0.000299f, +0.000038f, +0.000273f, -0.000219f, +0.000337f, -0.000312f, -0.000625f, +0.000247f, +0.000074f, +0.000449f, - -0.000026f, +0.000016f, +0.000599f, -0.000072f, +0.000041f, +0.000240f, +0.000012f, +0.000223f, +0.000054f, +0.000005f, - +0.000179f, -0.000005f, -0.000197f, -0.000254f, -0.000028f, +0.000281f, -0.000005f, +0.000062f, +0.000011f, +0.000014f, - +0.000067f, -0.000201f, -0.000062f, +0.000113f, +0.000113f, -0.000075f, -0.000002f, +0.000146f, -0.000089f, -0.000004f, - -0.000003f, -0.000068f, -0.000043f, +0.000027f, -0.000045f, -0.000042f, -0.000127f, -0.000002f, +0.000109f, -0.000032f, - -0.000004f, +0.000121f, -0.000036f, -0.000099f, +0.000004f, +0.000057f, -0.000016f, +0.000016f, -0.000076f, +0.000011f, - +0.000033f, +0.000021f, +0.000016f, -0.000013f, +0.000035f, -0.000057f - }, - { - -0.002891f, -0.009531f, -0.000132f, +0.000287f, +0.001198f, -0.002568f, +0.001297f, +0.000220f, -0.000274f, +0.001190f, - -0.001429f, +0.000375f, +0.000202f, -0.000735f, -0.000901f, -0.000688f, +0.000270f, -0.000683f, +0.000080f, +0.000167f, - +0.000316f, +0.000270f, +0.000037f, -0.000155f, +0.000459f, -0.000380f, +0.000206f, -0.000796f, +0.000341f, -0.000064f, - -0.000412f, -0.000369f, -0.000727f, +0.000318f, -0.000358f, -0.001018f, -0.000197f, -0.000370f, +0.000314f, -0.000018f, - +0.000083f, +0.000320f, +0.000206f, -0.000110f, -0.000285f, -0.000078f, -0.000070f, +0.000347f, +0.000037f, +0.000010f, - +0.000247f, -0.000172f, -0.000082f, +0.000004f, -0.000117f, -0.000029f, -0.000139f, +0.000011f, -0.000227f, +0.000178f, - +0.000096f, +0.000017f, -0.000038f, +0.000070f, -0.000153f, -0.000001f, -0.000041f, -0.000111f, +0.000056f, +0.000164f, - +0.000003f, +0.000019f, +0.000022f, +0.000019f, +0.000039f, -0.000021f, -0.000068f, -0.000029f, -0.000029f, -0.000004f, - -0.000001f, +0.000080f, -0.000029f, -0.000027f, +0.000010f, -0.000095f, +0.000053f, -0.000004f, +0.000029f, +0.000066f, - +0.000000f, +0.000053f, -0.000020f, -0.000037f, +0.000019f, -0.000002f - }, - { - +0.000300f, -0.001079f, -0.000801f, -0.001604f, +0.000349f, -0.000059f, -0.000505f, -0.000315f, -0.000739f, +0.000107f, - +0.000085f, -0.000414f, +0.001035f, +0.008852f, +0.001271f, -0.000799f, -0.000846f, -0.000211f, -0.001105f, +0.001515f, - -0.003036f, +0.000167f, +0.001835f, -0.001989f, +0.000359f, +0.000369f, +0.000444f, +0.001838f, +0.000341f, +0.000874f, - -0.001979f, -0.000584f, +0.000099f, +0.000219f, -0.000122f, -0.000560f, +0.000574f, +0.000204f, +0.000510f, -0.000307f, - -0.000469f, +0.000306f, +0.000330f, -0.000221f, +0.000605f, +0.000192f, +0.000332f, +0.000047f, +0.000102f, -0.000208f, - -0.000148f, +0.000079f, -0.000126f, +0.000051f, -0.000109f, -0.000024f, -0.000383f, -0.000003f, +0.000119f, -0.000254f, - -0.000007f, +0.000350f, +0.000067f, -0.000044f, -0.000226f, +0.000210f, -0.000024f, -0.000077f, +0.000107f, -0.000005f, - -0.000032f, -0.000008f, +0.000026f, +0.000034f, +0.000078f, +0.000029f, -0.000020f, -0.000004f, +0.000015f, -0.000015f, - -0.000087f, -0.000033f, +0.000057f, -0.000026f, +0.000023f, +0.000006f, +0.000074f, -0.000060f, -0.000015f, +0.000031f, - -0.000004f, +0.000119f, +0.000015f, -0.000087f, +0.000042f, +0.000051f - }, - { - -0.001516f, +0.004067f, -0.002951f, +0.002225f, -0.000185f, -0.002137f, +0.002533f, +0.001017f, +0.000854f, -0.000673f, - +0.001073f, -0.001131f, +0.000961f, -0.000092f, -0.001171f, -0.000749f, +0.000291f, -0.000554f, -0.000086f, -0.000920f, - +0.000261f, +0.001089f, -0.000446f, +0.000381f, -0.000653f, +0.000084f, +0.000203f, +0.000692f, +0.000346f, -0.000323f, - +0.000681f, -0.000419f, -0.000172f, -0.000320f, +0.000310f, -0.000319f, -0.000305f, +0.000148f, -0.000064f, +0.000317f, - -0.000307f, +0.000018f, +0.000008f, -0.000352f, -0.000300f, +0.000033f, -0.000222f, +0.000056f, +0.000152f, +0.000099f, - -0.000337f, -0.000100f, -0.000127f, -0.000173f, -0.000342f, +0.000060f, +0.000115f, +0.000231f, -0.000119f, +0.000005f, - +0.000026f, -0.000086f, +0.000121f, -0.000126f, +0.000111f, -0.000134f, +0.000146f, -0.000033f, -0.000005f, -0.000051f, - +0.000097f, -0.000004f, +0.000017f, -0.000060f, -0.000066f, -0.000049f, +0.000069f, -0.000058f, -0.000117f, +0.000000f, - +0.000014f, -0.000051f, -0.000094f, -0.000019f, +0.000038f, -0.000087f, +0.000117f, +0.000072f, -0.000048f, -0.000019f, - +0.000001f, -0.000090f, +0.000000f, -0.000009f, +0.000032f, -0.000004f - }, - { - -0.000601f, -0.001611f, +0.000185f, +0.000274f, +0.000495f, -0.000016f, -0.000615f, +0.001486f, -0.001774f, -0.000465f, - +0.000315f, -0.000492f, +0.000802f, -0.000810f, +0.002875f, +0.002765f, +0.000566f, +0.000443f, -0.000717f, +0.001720f, - +0.002230f, +0.001412f, -0.000530f, +0.001163f, +0.001484f, -0.000239f, -0.000336f, +0.000398f, +0.000898f, +0.000389f, - +0.000837f, +0.000102f, +0.000092f, -0.000313f, -0.000188f, +0.000082f, +0.000157f, -0.000591f, +0.000469f, +0.000611f, - +0.000616f, -0.000335f, +0.000182f, -0.000291f, +0.000211f, +0.000188f, +0.000039f, +0.000020f, +0.000065f, -0.000201f, - +0.000138f, +0.000074f, +0.000025f, -0.000294f, -0.000332f, -0.000009f, +0.000061f, +0.000096f, +0.000107f, +0.000441f, - -0.000217f, -0.000185f, +0.000021f, +0.000131f, -0.000007f, -0.000063f, -0.000221f, +0.000225f, -0.000017f, +0.000039f, - -0.000105f, +0.000169f, +0.000080f, +0.000013f, +0.000059f, -0.000082f, +0.000044f, +0.000133f, +0.000005f, -0.000011f, - -0.000076f, +0.000004f, -0.000078f, +0.000131f, -0.000022f, -0.000012f, +0.000011f, -0.000055f, -0.000023f, +0.000029f, - -0.000005f, -0.000059f, +0.000051f, +0.000037f, -0.000004f, +0.000009f - } - }, - { - { - -0.009381f, +0.072871f, +0.004295f, -0.002960f, +0.001696f, -0.000062f, -0.000938f, -0.000492f, +0.000186f, -0.000233f, - +0.000948f, +0.000963f, -0.000502f, +0.000338f, -0.002183f, +0.001348f, +0.000255f, -0.000207f, -0.000343f, +0.001662f, - +0.001458f, -0.000133f, -0.000376f, -0.000342f, +0.000171f, +0.000138f, -0.000624f, -0.000230f, +0.000105f, -0.000068f, - +0.000796f, -0.000366f, +0.000254f, +0.000103f, +0.000626f, -0.000592f, +0.000122f, +0.000221f, +0.000408f, +0.000435f, - +0.000312f, -0.000115f, -0.000057f, +0.000081f, +0.000122f, +0.000017f, -0.000121f, +0.000018f, -0.000012f, +0.000254f, - +0.000287f, -0.000089f, -0.000067f, +0.000025f, -0.000175f, +0.000123f, +0.000137f, -0.000169f, -0.000381f, +0.000012f, - +0.000093f, +0.000040f, -0.000073f, -0.000090f, -0.000011f, -0.000060f, -0.000037f, +0.000086f, +0.000050f, -0.000010f, - +0.000053f, -0.000060f, +0.000028f, +0.000103f, -0.000002f, -0.000177f, -0.000030f, +0.000050f, -0.000086f, +0.000087f, - +0.000020f, +0.000074f, +0.000022f, +0.000021f, +0.000033f, -0.000085f, +0.000110f, -0.000071f, +0.000001f, +0.000033f, - +0.000009f, -0.000016f, +0.000033f, -0.000017f, -0.000022f, -0.000015f - }, - { - -0.000829f, -0.003039f, +0.002879f, -0.002347f, +0.000339f, +0.000169f, +0.000412f, -0.000497f, +0.000531f, +0.000029f, - -0.000461f, -0.000113f, -0.000759f, +0.001194f, +0.001116f, +0.000167f, -0.001667f, +0.001480f, +0.000666f, -0.000071f, - -0.000074f, +0.000244f, -0.000581f, -0.001394f, +0.000469f, +0.000765f, +0.000079f, +0.000540f, -0.000092f, -0.001091f, - -0.000307f, -0.000396f, -0.000391f, -0.000240f, -0.000423f, +0.000244f, +0.000076f, -0.000003f, +0.000170f, +0.000292f, - -0.000132f, -0.000125f, +0.000320f, +0.000255f, -0.000329f, +0.000063f, +0.000058f, -0.000332f, +0.000206f, +0.000096f, - +0.000282f, +0.000036f, +0.000152f, +0.000129f, +0.000244f, -0.000294f, -0.000363f, +0.000074f, -0.000049f, -0.000101f, - +0.000038f, +0.000170f, +0.000017f, -0.000116f, +0.000027f, +0.000102f, -0.000081f, +0.000178f, -0.000022f, -0.000077f, - +0.000022f, +0.000003f, -0.000050f, -0.000154f, +0.000024f, +0.000094f, -0.000091f, -0.000102f, -0.000012f, +0.000071f, - +0.000099f, -0.000054f, -0.000069f, +0.000040f, -0.000036f, +0.000057f, +0.000047f, -0.000005f, -0.000010f, +0.000099f, - -0.000017f, -0.000060f, -0.000007f, +0.000064f, +0.000045f, +0.000004f - }, - { - -0.001149f, +0.019233f, +0.004840f, +0.004907f, +0.001955f, +0.000761f, +0.000588f, +0.000539f, +0.000169f, -0.000336f, - -0.000019f, +0.001206f, -0.000893f, -0.000409f, +0.000381f, -0.000265f, +0.000883f, -0.000725f, +0.001715f, -0.000227f, - +0.000290f, -0.000185f, -0.000526f, -0.000373f, +0.000395f, -0.000319f, +0.000559f, +0.000420f, +0.000443f, +0.000284f, - +0.000697f, -0.001710f, -0.000474f, +0.000223f, -0.000291f, -0.000246f, +0.000056f, +0.000052f, -0.000393f, -0.000239f, - -0.000119f, -0.000698f, -0.000354f, -0.000038f, -0.000359f, +0.000199f, -0.000195f, -0.000029f, +0.000033f, -0.000124f, - -0.000478f, +0.000005f, +0.000236f, +0.000250f, +0.000079f, +0.000142f, -0.000056f, +0.000123f, -0.000127f, +0.000064f, - -0.000144f, +0.000123f, +0.000163f, +0.000137f, -0.000174f, +0.000027f, +0.000089f, -0.000007f, -0.000067f, +0.000052f, - -0.000001f, -0.000111f, -0.000066f, +0.000151f, -0.000031f, -0.000062f, -0.000060f, -0.000023f, +0.000066f, -0.000046f, - -0.000035f, +0.000008f, +0.000075f, -0.000040f, -0.000116f, +0.000054f, +0.000051f, +0.000047f, -0.000050f, -0.000005f, - +0.000033f, -0.000033f, -0.000011f, +0.000005f, -0.000039f, -0.000038f - }, - { - +0.005783f, -0.026549f, +0.001782f, -0.002483f, -0.000526f, +0.000215f, +0.000361f, +0.000149f, -0.000102f, +0.000570f, - -0.000338f, -0.000455f, -0.000650f, +0.001013f, -0.000394f, +0.000099f, +0.000486f, -0.000338f, +0.000044f, -0.000084f, - -0.000307f, -0.000503f, +0.000765f, +0.000259f, -0.000152f, +0.000069f, -0.000407f, +0.000943f, -0.000628f, -0.000212f, - +0.000286f, +0.000338f, +0.000116f, +0.000198f, +0.000066f, -0.000131f, +0.000306f, -0.000020f, -0.000209f, -0.000018f, - -0.000062f, -0.000037f, -0.000209f, +0.000162f, -0.000449f, -0.000268f, +0.000439f, -0.000096f, +0.000051f, -0.000026f, - +0.000178f, +0.000056f, -0.000125f, -0.000023f, -0.000025f, +0.000021f, -0.000064f, +0.000025f, +0.000178f, -0.000092f, - -0.000103f, +0.000069f, +0.000097f, -0.000078f, +0.000117f, +0.000097f, -0.000005f, +0.000125f, -0.000123f, +0.000104f, - +0.000131f, +0.000043f, -0.000205f, -0.000036f, -0.000012f, -0.000090f, +0.000013f, +0.000048f, +0.000008f, +0.000034f, - +0.000055f, +0.000059f, +0.000091f, -0.000042f, -0.000009f, -0.000004f, -0.000038f, +0.000063f, -0.000088f, -0.000044f, - +0.000034f, +0.000051f, -0.000029f, -0.000000f, +0.000038f, +0.000008f - }, - { - +0.001167f, -0.001789f, -0.001817f, -0.000169f, +0.000433f, +0.000048f, -0.000074f, +0.000260f, +0.000326f, +0.000237f, - +0.000163f, -0.000158f, -0.000315f, +0.000309f, -0.004396f, +0.001091f, -0.001495f, -0.000743f, +0.006333f, -0.000701f, - +0.000919f, -0.000904f, -0.000734f, +0.001141f, -0.001160f, +0.000954f, -0.002466f, -0.000631f, -0.000591f, +0.000516f, - +0.001135f, +0.001092f, -0.000526f, +0.000334f, -0.000022f, +0.000636f, -0.001285f, -0.000272f, +0.000054f, -0.000201f, - -0.000111f, -0.000307f, +0.000356f, -0.000129f, -0.000392f, +0.000025f, +0.000147f, -0.000058f, +0.000248f, -0.000044f, - +0.000284f, -0.000312f, -0.000080f, +0.000203f, -0.000006f, -0.000020f, -0.000112f, +0.000233f, +0.000116f, -0.000055f, - +0.000056f, +0.000091f, -0.000095f, -0.000106f, +0.000004f, +0.000055f, +0.000039f, +0.000111f, +0.000049f, +0.000011f, - +0.000090f, -0.000063f, -0.000071f, -0.000011f, -0.000019f, -0.000054f, +0.000035f, -0.000033f, -0.000013f, +0.000110f, - +0.000034f, +0.000081f, -0.000027f, -0.000151f, +0.000062f, -0.000034f, +0.000025f, +0.000023f, -0.000051f, +0.000021f, - -0.000040f, +0.000010f, +0.000068f, -0.000043f, -0.000054f, +0.000004f - }, - { - +0.006935f, -0.023188f, -0.001288f, +0.000502f, -0.000648f, +0.000024f, -0.000532f, +0.000842f, -0.000526f, -0.000860f, - +0.000906f, -0.000045f, -0.000508f, -0.000225f, +0.000993f, +0.000118f, +0.000466f, +0.000038f, +0.001002f, -0.000279f, - -0.000037f, +0.000245f, +0.000301f, -0.000176f, -0.000384f, -0.000150f, -0.000381f, -0.000158f, +0.000062f, -0.000187f, - +0.000698f, +0.000345f, +0.000330f, -0.000237f, -0.000429f, +0.000115f, +0.000638f, +0.000256f, -0.000060f, +0.000328f, - +0.000384f, -0.000433f, -0.000305f, +0.000192f, +0.000079f, -0.000219f, -0.000207f, -0.000206f, -0.000053f, +0.000173f, - +0.000141f, -0.000393f, +0.000009f, +0.000033f, +0.000224f, -0.000225f, +0.000111f, +0.000151f, +0.000185f, +0.000017f, - -0.000247f, -0.000043f, +0.000078f, +0.000166f, +0.000109f, -0.000080f, -0.000026f, +0.000072f, +0.000037f, +0.000015f, - -0.000013f, -0.000022f, +0.000063f, -0.000080f, +0.000002f, -0.000038f, +0.000106f, +0.000059f, -0.000023f, -0.000046f, - +0.000047f, -0.000009f, -0.000056f, -0.000123f, -0.000042f, +0.000034f, +0.000037f, -0.000017f, +0.000098f, -0.000060f, - -0.000007f, +0.000013f, -0.000005f, +0.000039f, -0.000060f, +0.000001f - }, - { - -0.000597f, -0.001250f, +0.001555f, -0.000064f, +0.000098f, -0.000165f, -0.000531f, +0.000193f, +0.000332f, +0.000009f, - -0.000237f, -0.000012f, +0.000562f, +0.002917f, +0.001994f, +0.002474f, -0.000865f, +0.000143f, -0.001310f, -0.001623f, - -0.000519f, +0.000822f, -0.001706f, -0.000742f, +0.000554f, +0.001236f, -0.000978f, +0.002141f, -0.000157f, +0.000732f, - -0.000128f, +0.000348f, -0.000608f, -0.000797f, +0.000239f, +0.000625f, -0.000394f, -0.000242f, -0.000165f, -0.000289f, - +0.000142f, +0.000301f, -0.000166f, -0.000303f, -0.000395f, +0.000107f, +0.000199f, +0.000078f, -0.000056f, +0.000046f, - -0.000136f, -0.000192f, +0.000083f, +0.000085f, +0.000005f, -0.000084f, -0.000020f, +0.000081f, -0.000096f, -0.000146f, - +0.000120f, -0.000054f, -0.000152f, -0.000039f, -0.000110f, -0.000033f, -0.000064f, +0.000082f, +0.000070f, +0.000018f, - -0.000258f, +0.000002f, +0.000097f, +0.000010f, +0.000018f, +0.000083f, -0.000016f, +0.000071f, +0.000069f, +0.000014f, - +0.000007f, +0.000023f, +0.000029f, -0.000046f, -0.000019f, -0.000001f, +0.000058f, -0.000064f, -0.000027f, +0.000007f, - -0.000067f, -0.000045f, -0.000024f, +0.000045f, -0.000009f, -0.000009f - }, - { - -0.006945f, +0.057290f, +0.000050f, -0.001801f, +0.000431f, -0.000097f, +0.000277f, -0.000269f, +0.000405f, -0.000347f, - +0.000832f, +0.000651f, -0.000584f, -0.000772f, +0.001735f, +0.000517f, +0.000112f, -0.000050f, -0.001463f, +0.000238f, - +0.000548f, -0.000561f, -0.000548f, +0.000144f, +0.000087f, -0.000151f, +0.000594f, +0.000232f, -0.000451f, -0.000175f, - +0.000047f, -0.000616f, +0.000188f, -0.000862f, -0.000502f, +0.000679f, +0.000493f, +0.000450f, +0.000869f, -0.000197f, - +0.000161f, -0.000381f, +0.000355f, -0.000017f, -0.000480f, +0.000119f, -0.000051f, +0.000070f, -0.000231f, +0.000291f, - +0.000126f, +0.000275f, -0.000146f, -0.000317f, +0.000045f, -0.000082f, +0.000120f, +0.000022f, -0.000024f, +0.000026f, - -0.000161f, -0.000150f, +0.000017f, +0.000070f, +0.000082f, -0.000071f, -0.000053f, +0.000029f, +0.000011f, -0.000068f, - -0.000003f, +0.000026f, -0.000021f, -0.000041f, +0.000167f, -0.000034f, -0.000139f, +0.000135f, +0.000002f, -0.000016f, - +0.000047f, +0.000076f, -0.000076f, -0.000001f, -0.000022f, -0.000011f, -0.000038f, +0.000054f, -0.000016f, +0.000022f, - +0.000009f, -0.000035f, -0.000010f, +0.000025f, +0.000022f, -0.000012f - }, - { - -0.000870f, -0.001384f, +0.002678f, -0.000398f, +0.000431f, -0.000030f, -0.000044f, -0.000501f, +0.000510f, +0.000220f, - -0.000188f, +0.000003f, -0.000159f, -0.000714f, +0.003208f, -0.001665f, +0.003284f, -0.001927f, -0.000399f, +0.000147f, - -0.000345f, -0.000390f, +0.003154f, -0.000250f, +0.002088f, -0.000486f, -0.001411f, +0.000626f, +0.000363f, -0.000887f, - +0.000984f, -0.000701f, +0.000111f, +0.000005f, -0.001073f, +0.000359f, +0.000442f, -0.000257f, +0.000485f, -0.000488f, - +0.000296f, +0.000035f, -0.000207f, +0.000117f, +0.000106f, +0.000363f, -0.000289f, -0.000040f, -0.000159f, +0.000058f, - +0.000017f, +0.000155f, -0.000252f, -0.000024f, +0.000143f, +0.000142f, -0.000174f, +0.000067f, +0.000211f, -0.000092f, - +0.000178f, -0.000025f, -0.000082f, -0.000002f, -0.000083f, -0.000132f, -0.000136f, -0.000286f, +0.000097f, +0.000021f, - +0.000043f, -0.000049f, -0.000158f, -0.000077f, +0.000029f, -0.000012f, -0.000020f, +0.000060f, +0.000086f, -0.000016f, - +0.000101f, -0.000014f, -0.000126f, -0.000030f, -0.000024f, -0.000050f, +0.000046f, +0.000112f, +0.000013f, -0.000022f, - -0.000021f, +0.000004f, -0.000023f, -0.000006f, -0.000005f, -0.000014f - }, - { - +0.001217f, +0.032183f, -0.005631f, -0.000307f, -0.000025f, +0.002067f, +0.000259f, -0.000906f, -0.000056f, +0.000102f, - +0.000032f, -0.000567f, +0.000561f, -0.000326f, -0.001829f, -0.000132f, +0.000226f, +0.000064f, +0.000288f, +0.000133f, - -0.000065f, +0.000016f, -0.000091f, -0.000393f, +0.000090f, +0.000563f, +0.000197f, -0.000503f, -0.000226f, +0.000069f, - +0.000115f, +0.000541f, -0.000539f, +0.000159f, +0.000832f, +0.000114f, +0.000004f, +0.000227f, +0.000157f, -0.000313f, - -0.000305f, -0.000010f, -0.000227f, -0.000172f, -0.000610f, +0.000405f, +0.000181f, -0.000232f, -0.000271f, +0.000013f, - +0.000306f, -0.000062f, +0.000066f, +0.000412f, -0.000093f, -0.000203f, +0.000363f, +0.000118f, -0.000036f, +0.000012f, - -0.000129f, +0.000091f, -0.000098f, -0.000016f, +0.000043f, -0.000014f, +0.000041f, +0.000029f, -0.000142f, +0.000004f, - +0.000008f, +0.000073f, -0.000061f, +0.000041f, +0.000005f, +0.000040f, -0.000010f, +0.000068f, -0.000074f, +0.000090f, - -0.000061f, -0.000057f, -0.000041f, +0.000039f, -0.000039f, +0.000044f, +0.000071f, +0.000014f, -0.000013f, +0.000055f, - +0.000001f, +0.000024f, -0.000025f, -0.000023f, -0.000024f, +0.000052f - }, - { - -0.000060f, +0.004045f, -0.000825f, -0.001096f, -0.000480f, -0.000049f, +0.000305f, -0.000739f, -0.000463f, +0.000278f, - +0.000485f, +0.001180f, -0.001105f, -0.001128f, -0.001501f, +0.000539f, +0.000424f, -0.001753f, -0.000511f, +0.001760f, - -0.000759f, -0.001388f, +0.000886f, +0.000261f, +0.000921f, -0.000096f, +0.000565f, +0.000399f, -0.000298f, +0.000001f, - -0.000293f, -0.000156f, -0.000151f, -0.000065f, -0.000249f, +0.000413f, -0.000304f, +0.000056f, -0.000131f, -0.000051f, - -0.000194f, -0.000392f, +0.000331f, +0.000047f, +0.000163f, -0.000032f, -0.000012f, +0.000069f, +0.000080f, +0.000107f, - +0.000067f, +0.000098f, +0.000027f, -0.000099f, -0.000189f, +0.000097f, -0.000249f, +0.000020f, +0.000235f, +0.000029f, - -0.000021f, +0.000158f, -0.000033f, -0.000065f, -0.000119f, +0.000137f, -0.000113f, +0.000029f, +0.000074f, +0.000033f, - +0.000061f, -0.000056f, -0.000077f, -0.000033f, +0.000058f, +0.000020f, -0.000002f, -0.000027f, -0.000173f, +0.000042f, - -0.000002f, -0.000023f, +0.000109f, +0.000018f, -0.000069f, -0.000054f, +0.000003f, -0.000060f, +0.000045f, -0.000093f, - -0.000016f, +0.000022f, -0.000023f, +0.000017f, +0.000007f, +0.000055f - }, - { - +0.003205f, -0.000185f, -0.002073f, -0.002160f, -0.000654f, -0.001197f, -0.000730f, -0.000381f, -0.000224f, +0.000614f, - +0.000290f, -0.000578f, -0.000241f, +0.000135f, -0.000338f, -0.000526f, +0.000494f, +0.000000f, -0.000652f, +0.000605f, - -0.000782f, +0.000385f, +0.000395f, +0.000252f, -0.000456f, -0.000176f, -0.000540f, +0.000209f, +0.000184f, +0.000688f, - -0.000379f, -0.000073f, -0.000449f, -0.000225f, +0.000498f, -0.000237f, +0.000050f, -0.000173f, -0.000078f, -0.000078f, - -0.000458f, +0.000294f, -0.000248f, -0.000128f, -0.000130f, +0.000181f, -0.000124f, +0.000098f, -0.000205f, -0.000308f, - +0.000138f, +0.000183f, -0.000269f, +0.000209f, -0.000312f, +0.000120f, +0.000065f, +0.000094f, +0.000071f, -0.000172f, - +0.000133f, +0.000137f, -0.000147f, -0.000008f, +0.000167f, +0.000056f, -0.000083f, +0.000010f, -0.000086f, -0.000058f, - +0.000140f, -0.000064f, -0.000010f, +0.000006f, +0.000052f, +0.000052f, -0.000026f, +0.000005f, -0.000053f, -0.000098f, - -0.000035f, -0.000005f, +0.000058f, +0.000029f, -0.000012f, +0.000086f, -0.000048f, -0.000000f, +0.000038f, -0.000046f, - +0.000034f, -0.000003f, +0.000072f, +0.000029f, -0.000042f, -0.000002f - }, - { - -0.000338f, +0.000301f, +0.002746f, -0.000913f, +0.000695f, -0.000251f, +0.000971f, -0.000585f, -0.000732f, +0.000185f, - -0.000231f, +0.000595f, -0.003781f, +0.001332f, -0.002138f, +0.001578f, -0.000768f, +0.000174f, -0.000174f, +0.000904f, - +0.000765f, -0.001749f, +0.002880f, +0.000460f, +0.000380f, -0.000362f, +0.000054f, +0.000861f, -0.000210f, +0.000649f, - +0.000723f, +0.000008f, +0.000349f, -0.000360f, +0.000116f, +0.000017f, -0.000682f, +0.000348f, -0.000245f, -0.000150f, - -0.000554f, +0.000319f, +0.000364f, +0.000032f, -0.000008f, -0.000266f, +0.000046f, +0.000155f, +0.000298f, -0.000200f, - -0.000025f, +0.000081f, +0.000257f, -0.000027f, -0.000172f, +0.000144f, +0.000221f, -0.000066f, +0.000143f, -0.000045f, - -0.000190f, -0.000230f, +0.000078f, +0.000038f, +0.000027f, -0.000030f, +0.000062f, -0.000045f, -0.000046f, +0.000090f, - -0.000008f, -0.000013f, -0.000072f, +0.000032f, -0.000049f, +0.000050f, +0.000152f, +0.000105f, +0.000035f, +0.000014f, - +0.000060f, -0.000066f, -0.000055f, -0.000024f, -0.000019f, +0.000013f, -0.000072f, +0.000052f, +0.000007f, +0.000027f, - -0.000032f, -0.000065f, +0.000054f, +0.000082f, -0.000082f, +0.000053f - }, - { - -0.000203f, +0.007356f, -0.003067f, +0.001122f, -0.000615f, -0.003504f, +0.000254f, +0.000148f, -0.000053f, +0.000317f, - +0.000413f, -0.001042f, +0.001441f, +0.000090f, +0.000626f, +0.001240f, -0.000284f, -0.000229f, -0.000267f, -0.000681f, - -0.000224f, -0.000059f, +0.000058f, -0.000564f, -0.000257f, -0.000700f, -0.000794f, +0.000478f, +0.000001f, +0.000782f, - +0.000477f, -0.000083f, +0.000303f, -0.000227f, -0.000143f, -0.000065f, -0.000234f, -0.000161f, -0.000103f, -0.000078f, - +0.000265f, +0.000100f, +0.000281f, -0.000050f, -0.000076f, -0.000004f, -0.000637f, -0.000571f, -0.000144f, -0.000295f, - +0.000293f, -0.000108f, -0.000013f, +0.000279f, -0.000103f, +0.000056f, -0.000144f, -0.000082f, -0.000095f, -0.000027f, - +0.000196f, -0.000217f, +0.000037f, -0.000060f, -0.000013f, -0.000077f, -0.000116f, +0.000055f, +0.000015f, +0.000042f, - -0.000052f, +0.000056f, -0.000020f, +0.000105f, -0.000014f, -0.000050f, -0.000080f, +0.000093f, +0.000015f, -0.000053f, - -0.000056f, +0.000054f, -0.000009f, -0.000119f, -0.000017f, -0.000038f, -0.000093f, +0.000061f, +0.000087f, -0.000018f, - -0.000037f, +0.000028f, -0.000031f, -0.000004f, -0.000027f, +0.000052f - }, - { - +0.000738f, -0.001069f, -0.003048f, -0.000773f, +0.000267f, -0.000130f, -0.000102f, +0.001234f, -0.001221f, +0.000243f, - +0.000144f, +0.000080f, -0.000922f, -0.001544f, +0.013176f, +0.004819f, -0.000785f, +0.000603f, -0.001476f, +0.000153f, - +0.000542f, -0.000059f, +0.000234f, +0.000560f, +0.000722f, -0.000284f, -0.000884f, -0.000641f, +0.000934f, -0.000430f, - +0.000188f, +0.000604f, +0.000192f, -0.000381f, +0.000005f, -0.000609f, -0.000177f, +0.000083f, +0.000246f, +0.000461f, - +0.000220f, -0.000087f, +0.000634f, -0.000023f, -0.000598f, -0.000033f, -0.000268f, -0.000278f, -0.000016f, -0.000001f, - +0.000057f, -0.000057f, +0.000156f, +0.000063f, -0.000059f, -0.000093f, -0.000054f, +0.000347f, -0.000275f, +0.000249f, - +0.000287f, +0.000049f, -0.000113f, +0.000001f, -0.000021f, +0.000071f, +0.000107f, -0.000244f, +0.000098f, +0.000048f, - -0.000102f, -0.000101f, +0.000107f, +0.000054f, -0.000006f, +0.000220f, -0.000100f, +0.000043f, +0.000052f, +0.000037f, - +0.000040f, -0.000044f, -0.000082f, -0.000115f, +0.000060f, -0.000035f, +0.000001f, +0.000031f, +0.000010f, -0.000056f, - +0.000012f, -0.000006f, -0.000042f, +0.000015f, +0.000034f, -0.000005f - } - }, - { - { - +0.006261f, +0.052209f, -0.010612f, +0.002465f, +0.001238f, -0.000259f, -0.000985f, +0.000108f, -0.000343f, -0.000532f, - +0.000646f, +0.000663f, +0.000103f, -0.000731f, -0.000003f, +0.000271f, +0.001633f, -0.000729f, +0.000012f, +0.000828f, - +0.001320f, +0.000518f, -0.000369f, -0.000259f, +0.000048f, +0.000099f, -0.000173f, -0.000828f, +0.000252f, -0.000594f, - +0.000228f, +0.000206f, +0.000290f, -0.000106f, +0.000277f, -0.000214f, -0.000118f, -0.000407f, +0.000623f, +0.000460f, - +0.000475f, +0.000108f, -0.000429f, +0.000075f, -0.000047f, -0.000171f, +0.000043f, +0.000108f, -0.000050f, +0.000093f, - +0.000291f, +0.000092f, -0.000118f, -0.000045f, -0.000042f, +0.000254f, +0.000049f, -0.000012f, -0.000137f, -0.000158f, - +0.000122f, +0.000012f, +0.000141f, -0.000142f, -0.000044f, -0.000060f, -0.000057f, +0.000053f, +0.000066f, +0.000042f, - +0.000049f, -0.000106f, -0.000026f, +0.000120f, +0.000043f, -0.000057f, -0.000095f, +0.000038f, -0.000053f, -0.000025f, - -0.000037f, +0.000024f, +0.000034f, -0.000040f, +0.000097f, -0.000096f, +0.000001f, -0.000041f, -0.000022f, -0.000021f, - +0.000020f, -0.000012f, +0.000026f, -0.000008f, -0.000002f, -0.000014f - }, - { - +0.000386f, -0.001968f, -0.000102f, -0.000366f, +0.000013f, +0.000217f, +0.000532f, -0.000666f, +0.000019f, +0.000024f, - +0.000081f, +0.000106f, -0.000523f, -0.000056f, +0.003224f, +0.000916f, -0.000441f, +0.000152f, +0.001287f, +0.000494f, - +0.000089f, -0.000562f, +0.000155f, -0.000660f, -0.001021f, +0.000391f, +0.000498f, -0.000400f, +0.000058f, -0.000490f, - -0.000589f, -0.000091f, -0.000171f, -0.000129f, -0.000538f, +0.000195f, +0.000015f, -0.000666f, +0.000170f, +0.000822f, - -0.000188f, -0.000305f, -0.000316f, +0.000521f, -0.000356f, +0.000129f, +0.000009f, -0.000128f, +0.000156f, +0.000114f, - +0.000309f, -0.000167f, -0.000008f, +0.000002f, +0.000301f, -0.000150f, -0.000162f, -0.000092f, +0.000072f, -0.000052f, - -0.000100f, -0.000024f, +0.000082f, +0.000005f, +0.000046f, +0.000124f, -0.000172f, +0.000015f, +0.000003f, -0.000027f, - -0.000039f, +0.000122f, -0.000040f, -0.000068f, -0.000057f, +0.000107f, +0.000049f, -0.000038f, -0.000083f, -0.000000f, - +0.000099f, -0.000019f, -0.000070f, +0.000030f, -0.000015f, -0.000041f, +0.000024f, -0.000002f, -0.000079f, +0.000081f, - +0.000010f, -0.000038f, -0.000037f, +0.000014f, +0.000041f, +0.000027f - }, - { - +0.001068f, +0.016376f, +0.004992f, +0.002037f, +0.002393f, +0.000746f, +0.000258f, +0.000594f, +0.000778f, -0.000310f, - -0.000484f, +0.000669f, +0.000402f, -0.000797f, +0.000201f, +0.000612f, +0.000345f, -0.000282f, +0.000947f, +0.001628f, - -0.000356f, +0.000262f, +0.000340f, -0.000250f, -0.000296f, -0.000876f, +0.000987f, -0.000252f, +0.000489f, +0.000740f, - -0.000133f, -0.000860f, -0.001130f, +0.000176f, +0.000103f, -0.000254f, -0.000136f, -0.000257f, +0.000294f, -0.000521f, - -0.000086f, -0.000920f, -0.000184f, -0.000404f, -0.000060f, -0.000110f, -0.000066f, -0.000118f, +0.000009f, -0.000260f, - -0.000321f, -0.000053f, +0.000255f, -0.000011f, +0.000167f, +0.000103f, +0.000056f, +0.000102f, -0.000007f, -0.000016f, - -0.000048f, -0.000031f, +0.000058f, +0.000255f, -0.000165f, -0.000059f, +0.000016f, -0.000003f, -0.000038f, +0.000035f, - +0.000061f, -0.000132f, -0.000043f, +0.000055f, +0.000053f, +0.000077f, -0.000096f, -0.000138f, +0.000066f, +0.000034f, - -0.000025f, -0.000018f, +0.000055f, +0.000045f, -0.000124f, +0.000010f, +0.000036f, +0.000031f, -0.000017f, -0.000010f, - +0.000045f, +0.000022f, -0.000040f, -0.000001f, -0.000013f, -0.000045f - }, - { - -0.010920f, -0.006257f, +0.002848f, -0.003931f, +0.000432f, +0.000359f, -0.000203f, +0.000164f, -0.000007f, +0.000599f, - +0.000407f, -0.000202f, -0.000937f, +0.000586f, +0.000286f, +0.000047f, +0.000175f, -0.000071f, +0.000521f, -0.000017f, - -0.000115f, -0.000403f, +0.000150f, +0.000431f, +0.000001f, +0.000733f, -0.000565f, +0.000776f, -0.001089f, -0.000151f, - +0.000423f, +0.000031f, -0.000214f, +0.000462f, -0.000161f, +0.000352f, -0.000145f, -0.000037f, -0.000116f, -0.000263f, - +0.000064f, +0.000104f, -0.000290f, +0.000321f, -0.000202f, -0.000610f, +0.000014f, +0.000144f, +0.000038f, -0.000000f, - -0.000091f, +0.000301f, -0.000238f, +0.000204f, -0.000174f, +0.000003f, +0.000046f, -0.000028f, +0.000188f, +0.000063f, - -0.000109f, +0.000031f, -0.000018f, -0.000183f, +0.000004f, +0.000060f, +0.000031f, +0.000168f, -0.000052f, +0.000001f, - +0.000142f, +0.000164f, -0.000089f, -0.000082f, -0.000010f, -0.000031f, -0.000041f, +0.000030f, -0.000026f, -0.000011f, - -0.000021f, +0.000047f, +0.000083f, -0.000043f, -0.000029f, +0.000034f, -0.000062f, +0.000052f, -0.000022f, -0.000065f, - +0.000004f, +0.000046f, +0.000008f, -0.000035f, +0.000036f, +0.000003f - }, - { - -0.000684f, -0.003542f, +0.001499f, -0.000327f, +0.000245f, +0.000177f, +0.000233f, -0.000006f, +0.000016f, +0.000484f, - -0.000003f, -0.000108f, -0.000124f, -0.001779f, +0.000151f, +0.002139f, -0.002261f, -0.002030f, +0.002552f, +0.000982f, - +0.000134f, -0.001336f, -0.000411f, +0.000680f, +0.000157f, -0.000136f, -0.000615f, +0.000717f, -0.000537f, -0.000104f, - +0.001028f, +0.000415f, -0.000214f, +0.000157f, -0.000452f, +0.000141f, -0.000934f, +0.000070f, -0.000462f, -0.000238f, - -0.000145f, +0.000049f, -0.000461f, -0.000105f, +0.000030f, -0.000121f, +0.000254f, +0.000008f, -0.000112f, +0.000093f, - -0.000049f, +0.000222f, -0.000141f, +0.000119f, +0.000119f, +0.000067f, -0.000120f, +0.000192f, +0.000198f, -0.000075f, - -0.000100f, +0.000111f, -0.000004f, -0.000217f, -0.000138f, -0.000019f, +0.000051f, +0.000138f, +0.000015f, -0.000080f, - +0.000195f, +0.000048f, -0.000153f, +0.000032f, -0.000033f, -0.000054f, +0.000009f, -0.000114f, -0.000101f, +0.000042f, - +0.000010f, +0.000123f, +0.000051f, -0.000158f, +0.000018f, -0.000022f, +0.000035f, +0.000029f, -0.000027f, +0.000001f, - -0.000042f, -0.000013f, +0.000055f, +0.000004f, -0.000073f, -0.000037f - }, - { - -0.012023f, -0.000595f, +0.001161f, +0.001961f, -0.000649f, +0.000030f, -0.000443f, -0.000085f, +0.000422f, -0.001219f, - +0.000216f, +0.000119f, +0.000062f, +0.000080f, +0.000259f, +0.001227f, +0.000258f, +0.000272f, +0.000490f, +0.000054f, - -0.000758f, -0.000126f, +0.000548f, +0.000136f, -0.000422f, -0.000520f, -0.000066f, -0.000102f, +0.000082f, -0.000200f, - +0.000723f, +0.000792f, +0.000148f, -0.000419f, -0.000398f, +0.000191f, +0.000385f, +0.000333f, -0.000015f, -0.000038f, - -0.000446f, +0.000007f, +0.000121f, +0.000325f, -0.000277f, -0.000448f, -0.000074f, +0.000122f, -0.000054f, -0.000058f, - +0.000230f, -0.000270f, -0.000159f, -0.000220f, +0.000232f, -0.000085f, -0.000037f, +0.000065f, +0.000089f, +0.000029f, - -0.000123f, -0.000095f, +0.000056f, +0.000137f, +0.000038f, +0.000056f, -0.000057f, +0.000092f, -0.000009f, -0.000011f, - +0.000024f, -0.000015f, +0.000104f, -0.000103f, +0.000042f, -0.000027f, -0.000009f, +0.000021f, +0.000035f, +0.000019f, - +0.000031f, +0.000084f, +0.000005f, -0.000140f, -0.000063f, -0.000043f, +0.000012f, -0.000075f, +0.000102f, -0.000013f, - -0.000022f, +0.000002f, -0.000005f, +0.000046f, -0.000016f, -0.000039f - }, - { - -0.000121f, -0.002740f, +0.000476f, +0.000809f, +0.000186f, -0.000051f, -0.000287f, -0.000091f, +0.000169f, +0.000215f, - -0.000168f, +0.000164f, +0.000511f, +0.002431f, +0.003589f, +0.001588f, +0.000592f, -0.000253f, -0.000001f, -0.000996f, - -0.000323f, -0.000447f, -0.002265f, +0.002281f, -0.000115f, +0.000645f, +0.000053f, +0.001052f, +0.000507f, +0.000052f, - -0.000159f, +0.000347f, -0.000087f, -0.000731f, -0.000238f, +0.000622f, -0.000549f, -0.000257f, -0.000375f, -0.000724f, - +0.000277f, +0.000186f, -0.000113f, -0.000093f, -0.000404f, -0.000155f, +0.000083f, +0.000036f, -0.000099f, +0.000085f, - -0.000121f, -0.000019f, -0.000118f, +0.000078f, +0.000082f, -0.000114f, -0.000182f, +0.000193f, -0.000040f, -0.000100f, - +0.000061f, +0.000079f, -0.000160f, -0.000087f, -0.000052f, -0.000038f, -0.000133f, -0.000019f, +0.000078f, +0.000115f, - -0.000168f, -0.000062f, +0.000080f, -0.000030f, -0.000060f, -0.000042f, -0.000027f, -0.000025f, +0.000027f, +0.000078f, - -0.000005f, +0.000015f, -0.000034f, +0.000015f, -0.000037f, -0.000004f, +0.000057f, +0.000005f, +0.000005f, +0.000073f, - +0.000011f, +0.000001f, -0.000050f, +0.000049f, +0.000011f, -0.000040f - }, - { - +0.013064f, +0.036636f, -0.003761f, -0.000440f, -0.000674f, +0.000011f, +0.000263f, +0.000372f, -0.000201f, -0.000114f, - -0.000027f, +0.001009f, -0.000278f, +0.000008f, +0.000502f, +0.000686f, -0.000274f, +0.000792f, -0.000866f, -0.000681f, - +0.000408f, +0.000057f, -0.000730f, +0.000042f, +0.000264f, -0.000126f, +0.000315f, +0.000095f, -0.000206f, -0.000013f, - +0.000138f, -0.000232f, -0.000568f, -0.000399f, -0.000704f, +0.000079f, +0.000728f, +0.000567f, +0.000219f, +0.000354f, - -0.000208f, +0.000068f, -0.000033f, +0.000046f, -0.000054f, +0.000040f, -0.000019f, +0.000268f, +0.000063f, -0.000134f, - +0.000114f, +0.000515f, +0.000211f, -0.000234f, -0.000103f, -0.000169f, -0.000065f, -0.000035f, +0.000090f, +0.000152f, - -0.000206f, -0.000051f, -0.000000f, -0.000009f, +0.000183f, -0.000019f, -0.000023f, -0.000046f, +0.000039f, -0.000044f, - -0.000010f, +0.000060f, -0.000083f, -0.000130f, +0.000081f, +0.000049f, -0.000187f, +0.000008f, +0.000046f, -0.000032f, - +0.000045f, +0.000052f, -0.000010f, -0.000014f, -0.000010f, -0.000006f, -0.000093f, +0.000002f, +0.000019f, -0.000029f, - +0.000021f, -0.000039f, -0.000041f, -0.000007f, +0.000017f, +0.000017f - }, - { - -0.000210f, -0.003664f, +0.001362f, -0.000631f, +0.000213f, +0.000088f, -0.000257f, -0.000435f, +0.000326f, +0.000211f, - +0.000205f, +0.000219f, -0.000089f, +0.001102f, -0.000340f, +0.004237f, +0.000886f, -0.000781f, -0.001832f, +0.000314f, - +0.000352f, +0.000111f, +0.000811f, +0.001725f, +0.000416f, +0.001220f, -0.001499f, +0.000517f, -0.000705f, +0.000187f, - +0.001034f, -0.000396f, -0.000417f, -0.000004f, -0.000920f, +0.000208f, +0.000541f, -0.000207f, +0.000249f, +0.000043f, - -0.000662f, -0.000053f, +0.000117f, -0.000214f, -0.000109f, +0.000007f, -0.000312f, +0.000148f, +0.000050f, -0.000153f, - +0.000093f, -0.000031f, -0.000108f, -0.000121f, +0.000250f, +0.000110f, -0.000300f, +0.000087f, +0.000023f, +0.000107f, - +0.000087f, +0.000090f, -0.000047f, +0.000113f, -0.000006f, +0.000045f, -0.000124f, -0.000129f, -0.000017f, +0.000078f, - +0.000187f, +0.000008f, -0.000063f, -0.000142f, -0.000084f, +0.000028f, +0.000003f, +0.000058f, +0.000094f, -0.000028f, - +0.000024f, +0.000093f, -0.000037f, -0.000057f, -0.000026f, -0.000048f, -0.000083f, +0.000064f, +0.000055f, -0.000008f, - -0.000064f, +0.000026f, -0.000012f, -0.000026f, -0.000008f, -0.000030f - }, - { - +0.000731f, +0.027691f, -0.003097f, -0.001589f, -0.000252f, -0.000188f, +0.000057f, +0.000508f, -0.000684f, -0.000167f, - -0.000106f, -0.000839f, +0.000177f, +0.001033f, -0.002242f, -0.000259f, +0.000309f, -0.000023f, +0.000356f, +0.000358f, - -0.000284f, +0.000084f, -0.000324f, -0.000184f, -0.000294f, +0.000065f, +0.000581f, -0.000472f, -0.000261f, +0.000092f, - -0.000031f, +0.000049f, -0.000422f, -0.000141f, +0.000547f, +0.000447f, +0.000369f, -0.000073f, +0.000512f, -0.000452f, - -0.000184f, -0.000417f, +0.000044f, -0.000190f, -0.000318f, -0.000288f, +0.000397f, -0.000120f, -0.000348f, -0.000274f, - +0.000205f, -0.000212f, -0.000215f, +0.000456f, +0.000150f, -0.000251f, +0.000137f, +0.000266f, -0.000100f, +0.000133f, - -0.000043f, -0.000033f, -0.000093f, -0.000078f, +0.000125f, -0.000073f, -0.000023f, +0.000067f, -0.000131f, -0.000042f, - +0.000069f, +0.000020f, -0.000106f, +0.000034f, -0.000000f, +0.000062f, -0.000064f, +0.000064f, -0.000026f, +0.000087f, - +0.000017f, -0.000032f, -0.000050f, -0.000004f, -0.000096f, -0.000056f, +0.000006f, -0.000003f, -0.000038f, +0.000017f, - -0.000032f, +0.000081f, -0.000010f, -0.000023f, -0.000049f, +0.000009f - }, - { - +0.000203f, +0.002152f, -0.002453f, +0.000397f, +0.000223f, +0.000169f, -0.001044f, -0.000600f, -0.000609f, +0.000028f, - +0.000665f, -0.000010f, +0.000092f, +0.000169f, -0.002884f, -0.000029f, +0.000452f, -0.000206f, -0.001070f, +0.002592f, - -0.000354f, -0.000586f, -0.000452f, -0.000034f, +0.000408f, +0.000299f, +0.000305f, +0.000067f, +0.000008f, +0.000646f, - +0.000230f, -0.000272f, -0.000240f, +0.000085f, -0.000184f, +0.000374f, +0.000219f, -0.000030f, -0.000176f, -0.000198f, - +0.000117f, -0.000197f, -0.000193f, +0.000056f, +0.000137f, -0.000082f, -0.000008f, +0.000010f, +0.000048f, -0.000108f, - -0.000064f, +0.000034f, +0.000117f, +0.000188f, -0.000055f, -0.000067f, -0.000118f, -0.000091f, +0.000193f, +0.000096f, - -0.000096f, +0.000057f, +0.000043f, -0.000016f, -0.000238f, +0.000120f, -0.000026f, -0.000122f, +0.000041f, +0.000046f, - +0.000039f, +0.000032f, -0.000023f, -0.000066f, +0.000040f, +0.000036f, +0.000109f, +0.000038f, -0.000139f, -0.000023f, - +0.000025f, -0.000053f, +0.000079f, +0.000069f, -0.000005f, -0.000055f, +0.000033f, -0.000023f, +0.000091f, -0.000040f, - -0.000039f, +0.000006f, -0.000003f, +0.000036f, -0.000026f, +0.000035f - }, - { - -0.001380f, +0.004450f, -0.000370f, +0.000019f, -0.002586f, +0.000635f, -0.001213f, -0.000066f, +0.000135f, -0.000818f, - +0.001326f, +0.000064f, -0.000656f, +0.000741f, +0.000196f, -0.000674f, +0.000130f, +0.000401f, -0.000777f, +0.000228f, - -0.000590f, +0.000042f, +0.000484f, +0.000119f, -0.000698f, +0.000156f, -0.000621f, +0.000415f, +0.000112f, +0.000197f, - +0.000086f, -0.000146f, +0.000082f, -0.000365f, +0.000171f, +0.000667f, -0.000160f, +0.000237f, +0.000135f, -0.000336f, - -0.000354f, +0.000138f, -0.000083f, -0.000263f, +0.000011f, +0.000084f, -0.000011f, +0.000113f, -0.000140f, -0.000356f, - -0.000116f, +0.000168f, -0.000123f, +0.000133f, -0.000221f, +0.000139f, +0.000175f, +0.000032f, +0.000191f, -0.000123f, - -0.000012f, +0.000154f, +0.000000f, -0.000118f, +0.000117f, +0.000072f, -0.000006f, +0.000046f, -0.000018f, -0.000152f, - +0.000078f, -0.000031f, -0.000049f, -0.000003f, +0.000005f, +0.000024f, +0.000000f, +0.000026f, +0.000019f, -0.000079f, - -0.000011f, -0.000061f, -0.000024f, +0.000034f, -0.000028f, +0.000098f, -0.000010f, -0.000001f, +0.000029f, -0.000092f, - +0.000018f, -0.000057f, +0.000022f, +0.000029f, -0.000021f, +0.000000f - }, - { - +0.000325f, +0.001204f, +0.001461f, -0.000069f, +0.000134f, -0.000067f, +0.000813f, -0.000141f, -0.000605f, -0.000251f, - -0.000226f, -0.000005f, +0.000736f, -0.001747f, -0.005191f, +0.001253f, +0.001973f, -0.000121f, +0.000106f, -0.000103f, - +0.002371f, -0.000778f, -0.000481f, +0.000901f, +0.001790f, -0.000196f, -0.000468f, +0.001039f, +0.000113f, -0.000396f, - +0.001735f, +0.000813f, -0.000119f, -0.000157f, -0.000028f, +0.000550f, -0.000859f, -0.000193f, -0.000240f, -0.000142f, - -0.000160f, +0.000093f, +0.000302f, +0.000241f, -0.000236f, -0.000258f, -0.000171f, -0.000013f, +0.000203f, -0.000058f, - +0.000050f, -0.000090f, +0.000210f, -0.000094f, -0.000123f, +0.000020f, +0.000132f, +0.000111f, -0.000066f, +0.000190f, - -0.000036f, -0.000387f, -0.000066f, -0.000009f, +0.000111f, +0.000025f, +0.000008f, +0.000033f, -0.000051f, +0.000016f, - +0.000023f, +0.000025f, -0.000056f, +0.000004f, -0.000070f, -0.000075f, +0.000097f, +0.000076f, +0.000046f, +0.000034f, - +0.000102f, +0.000029f, -0.000057f, +0.000056f, -0.000022f, +0.000012f, -0.000096f, +0.000032f, +0.000061f, +0.000002f, - +0.000005f, -0.000093f, -0.000034f, +0.000091f, -0.000060f, -0.000025f - }, - { - +0.001269f, +0.006000f, -0.003538f, +0.002120f, +0.000152f, +0.000600f, -0.003698f, +0.000228f, -0.000452f, +0.000619f, - -0.001165f, +0.000212f, +0.000219f, -0.000367f, +0.002735f, +0.001101f, +0.000143f, +0.000781f, -0.000493f, -0.000041f, - -0.000259f, -0.000638f, -0.000181f, -0.000440f, -0.000295f, -0.000684f, -0.000566f, +0.000356f, -0.000864f, +0.001070f, - +0.000143f, +0.000151f, +0.000481f, +0.000356f, -0.000600f, +0.000109f, +0.000271f, -0.000352f, -0.000129f, -0.000290f, - +0.000347f, +0.000060f, +0.000154f, +0.000076f, +0.000195f, +0.000027f, -0.000204f, -0.000616f, -0.000078f, -0.000440f, - +0.000332f, +0.000031f, -0.000113f, +0.000180f, +0.000130f, +0.000065f, +0.000012f, -0.000157f, +0.000038f, -0.000016f, - +0.000127f, -0.000089f, -0.000111f, +0.000091f, +0.000009f, +0.000029f, -0.000092f, +0.000038f, -0.000028f, +0.000038f, - -0.000070f, +0.000078f, -0.000053f, +0.000071f, +0.000023f, +0.000026f, -0.000090f, +0.000052f, +0.000124f, -0.000004f, - -0.000033f, +0.000048f, +0.000084f, -0.000045f, -0.000055f, +0.000075f, -0.000092f, -0.000042f, +0.000053f, -0.000000f, - -0.000022f, +0.000071f, -0.000016f, +0.000023f, -0.000027f, +0.000027f - }, - { - -0.000358f, -0.000361f, -0.000938f, -0.000554f, -0.000527f, +0.000010f, +0.000019f, -0.000220f, -0.000424f, +0.000608f, - +0.000004f, +0.000546f, -0.000098f, +0.003024f, +0.002213f, +0.005272f, +0.000258f, +0.000007f, -0.001856f, +0.000444f, - +0.000964f, -0.001581f, +0.000913f, +0.001051f, -0.000563f, -0.000342f, -0.000899f, -0.000075f, +0.000447f, -0.000148f, - -0.000105f, +0.000632f, +0.000182f, -0.000761f, +0.000077f, -0.000080f, -0.000759f, +0.000484f, -0.000210f, +0.000446f, - +0.000082f, -0.000078f, -0.000077f, +0.000117f, -0.000377f, -0.000268f, -0.000250f, +0.000018f, -0.000107f, -0.000136f, - -0.000068f, -0.000000f, -0.000058f, +0.000100f, +0.000101f, +0.000021f, -0.000048f, +0.000128f, -0.000214f, -0.000238f, - +0.000250f, +0.000057f, -0.000111f, -0.000195f, -0.000037f, +0.000056f, +0.000284f, -0.000197f, -0.000032f, +0.000029f, - -0.000014f, -0.000144f, -0.000051f, -0.000018f, -0.000034f, +0.000178f, -0.000017f, -0.000027f, +0.000005f, +0.000019f, - +0.000118f, +0.000003f, +0.000030f, -0.000128f, +0.000001f, -0.000013f, -0.000008f, +0.000039f, +0.000023f, -0.000024f, - +0.000008f, +0.000041f, -0.000032f, -0.000035f, +0.000017f, +0.000028f - } - }, - { - { - -0.003717f, +0.047142f, -0.009451f, +0.002361f, +0.000315f, -0.000013f, +0.000289f, +0.000250f, -0.000069f, +0.000028f, - -0.000511f, -0.000675f, +0.000167f, -0.000077f, +0.002446f, -0.001118f, +0.000246f, -0.000753f, +0.000466f, -0.000620f, - +0.000242f, -0.000102f, -0.000141f, -0.000352f, +0.000243f, +0.000055f, +0.000528f, -0.000679f, +0.000267f, -0.000710f, - -0.000128f, +0.000587f, +0.000078f, -0.000143f, -0.000328f, +0.000162f, -0.000178f, -0.000676f, -0.000152f, -0.000054f, - +0.000563f, +0.000594f, -0.000152f, +0.000054f, -0.000086f, -0.000314f, -0.000158f, +0.000415f, +0.000237f, +0.000186f, - +0.000049f, +0.000031f, -0.000053f, -0.000018f, -0.000028f, +0.000021f, -0.000109f, +0.000106f, +0.000139f, +0.000079f, - -0.000059f, -0.000123f, +0.000031f, +0.000063f, +0.000047f, +0.000079f, +0.000116f, -0.000084f, +0.000038f, -0.000005f, - +0.000077f, -0.000004f, -0.000004f, -0.000014f, -0.000025f, +0.000164f, +0.000035f, -0.000100f, +0.000166f, -0.000044f, - -0.000025f, -0.000056f, -0.000023f, -0.000065f, +0.000006f, +0.000081f, -0.000113f, +0.000061f, +0.000014f, -0.000028f, - -0.000016f, +0.000023f, -0.000027f, +0.000012f, +0.000029f, +0.000005f - }, - { - -0.000237f, +0.002758f, +0.001784f, +0.000656f, -0.000158f, -0.000131f, +0.000091f, -0.000138f, -0.000509f, +0.000361f, - +0.000132f, +0.000456f, -0.000627f, -0.000468f, +0.002679f, +0.000174f, +0.000573f, -0.000954f, -0.002319f, -0.000165f, - -0.000329f, -0.000878f, +0.001613f, +0.000196f, -0.001559f, -0.001073f, +0.000504f, -0.001058f, +0.000267f, +0.000369f, - +0.000357f, +0.001349f, -0.000218f, -0.000450f, +0.000226f, -0.000026f, +0.000244f, -0.000888f, -0.000299f, +0.000613f, - +0.000233f, +0.000166f, -0.000407f, -0.000197f, -0.000154f, +0.000051f, -0.000003f, -0.000024f, +0.000343f, -0.000103f, - -0.000145f, -0.000034f, -0.000066f, -0.000216f, -0.000317f, +0.000129f, +0.000271f, +0.000028f, +0.000061f, +0.000162f, - -0.000141f, -0.000170f, -0.000047f, +0.000050f, +0.000117f, +0.000035f, +0.000102f, -0.000093f, -0.000116f, +0.000009f, - +0.000028f, -0.000068f, +0.000008f, +0.000109f, +0.000011f, -0.000060f, +0.000058f, +0.000049f, +0.000035f, -0.000041f, - -0.000083f, +0.000055f, +0.000068f, -0.000005f, +0.000044f, -0.000035f, -0.000036f, -0.000007f, +0.000027f, -0.000097f, - +0.000038f, +0.000067f, +0.000014f, -0.000049f, -0.000053f, +0.000001f - }, - { - -0.000680f, +0.014540f, +0.006353f, -0.000501f, -0.003072f, -0.000795f, -0.000700f, -0.000132f, +0.000115f, +0.000322f, - +0.000075f, +0.000052f, +0.000083f, +0.000151f, -0.000623f, +0.000774f, +0.000247f, -0.000161f, -0.001306f, +0.001589f, - +0.000225f, +0.001639f, +0.000426f, +0.000102f, +0.000222f, -0.000506f, +0.000405f, -0.001026f, +0.000687f, +0.000224f, - -0.000553f, +0.000774f, -0.000637f, +0.000037f, -0.000096f, +0.000360f, -0.000187f, -0.000332f, +0.000200f, -0.000496f, - +0.000020f, -0.000266f, +0.000607f, -0.000353f, +0.000324f, -0.000312f, +0.000236f, +0.000070f, +0.000035f, -0.000289f, - +0.000007f, +0.000083f, -0.000038f, -0.000010f, -0.000029f, -0.000143f, +0.000140f, -0.000127f, -0.000134f, +0.000011f, - +0.000119f, -0.000207f, -0.000030f, -0.000027f, +0.000136f, -0.000078f, -0.000137f, -0.000029f, +0.000109f, -0.000043f, - +0.000046f, +0.000080f, -0.000026f, -0.000048f, -0.000021f, +0.000002f, +0.000062f, -0.000029f, -0.000053f, +0.000041f, - +0.000002f, +0.000023f, -0.000056f, +0.000089f, +0.000039f, -0.000036f, -0.000021f, -0.000065f, +0.000046f, -0.000033f, - -0.000022f, +0.000022f, +0.000018f, +0.000002f, +0.000027f, +0.000041f - }, - { - +0.011951f, +0.020388f, -0.001477f, -0.004940f, -0.000325f, +0.000101f, -0.000930f, +0.000260f, -0.000369f, +0.000019f, - +0.000701f, +0.000217f, -0.000992f, -0.000466f, -0.000724f, +0.000077f, +0.000220f, -0.000694f, +0.000018f, +0.000420f, - +0.000043f, -0.000023f, -0.000243f, -0.000059f, +0.000045f, +0.000583f, +0.000602f, +0.000762f, -0.000029f, -0.000111f, - -0.000354f, +0.000059f, -0.000320f, -0.000183f, -0.000345f, +0.000116f, +0.000242f, -0.000666f, -0.000085f, -0.000506f, - -0.000176f, +0.000290f, -0.000241f, +0.000068f, +0.000224f, -0.000104f, -0.000331f, +0.000110f, -0.000000f, +0.000323f, - -0.000124f, +0.000093f, +0.000028f, +0.000108f, -0.000074f, -0.000013f, +0.000079f, +0.000057f, -0.000100f, +0.000103f, - +0.000023f, +0.000040f, -0.000159f, +0.000054f, -0.000187f, -0.000110f, +0.000065f, -0.000151f, +0.000093f, -0.000036f, - -0.000057f, -0.000029f, +0.000127f, +0.000024f, +0.000029f, +0.000059f, -0.000057f, -0.000012f, -0.000029f, +0.000028f, - -0.000068f, -0.000028f, -0.000068f, +0.000013f, -0.000030f, +0.000026f, +0.000008f, -0.000068f, +0.000072f, +0.000022f, - -0.000011f, -0.000039f, +0.000031f, +0.000008f, -0.000021f, -0.000032f - }, - { - +0.000425f, -0.007702f, -0.001434f, +0.000520f, -0.000486f, +0.000080f, +0.000326f, -0.000065f, +0.000072f, +0.000481f, - +0.000012f, +0.000192f, +0.000408f, -0.000138f, +0.003633f, +0.002754f, +0.000216f, +0.001197f, -0.006819f, -0.000710f, - -0.000197f, -0.000307f, -0.000382f, -0.001105f, +0.000491f, +0.000551f, +0.002979f, +0.000803f, -0.001410f, -0.001446f, - -0.000421f, -0.000236f, +0.000263f, +0.000092f, -0.000078f, -0.000230f, -0.000263f, +0.000610f, -0.000068f, +0.000408f, - -0.000260f, +0.000370f, -0.000316f, -0.000156f, +0.000331f, +0.000121f, +0.000109f, +0.000328f, -0.000192f, -0.000065f, - -0.000347f, +0.000215f, +0.000302f, -0.000139f, -0.000067f, +0.000060f, -0.000038f, -0.000013f, +0.000088f, +0.000110f, - -0.000066f, +0.000040f, +0.000065f, -0.000043f, +0.000047f, -0.000123f, -0.000082f, -0.000019f, +0.000017f, -0.000032f, - -0.000073f, +0.000039f, -0.000065f, +0.000009f, -0.000028f, +0.000063f, -0.000022f, +0.000012f, +0.000010f, -0.000101f, - -0.000019f, -0.000062f, +0.000068f, +0.000062f, -0.000097f, +0.000034f, -0.000035f, -0.000016f, +0.000050f, +0.000001f, - +0.000003f, -0.000013f, -0.000043f, -0.000003f, +0.000049f, -0.000014f - }, - { - +0.011848f, +0.029435f, +0.000201f, +0.004532f, +0.001753f, +0.000053f, +0.000820f, -0.001480f, +0.000896f, +0.001176f, - -0.000966f, -0.000592f, +0.000112f, +0.000491f, +0.000734f, +0.000782f, -0.000069f, +0.000469f, -0.000163f, +0.000573f, - -0.000036f, -0.000836f, -0.000379f, -0.000103f, +0.000079f, -0.000394f, +0.000305f, +0.000068f, +0.000623f, -0.000203f, - -0.000294f, +0.000130f, +0.000481f, +0.000144f, -0.000385f, +0.000295f, -0.000034f, -0.000164f, -0.000097f, -0.000242f, - -0.000483f, -0.000282f, +0.000181f, -0.000064f, -0.000390f, -0.000240f, -0.000217f, +0.000122f, +0.000032f, -0.000058f, - -0.000152f, +0.000318f, +0.000160f, -0.000160f, -0.000248f, +0.000230f, +0.000122f, -0.000150f, -0.000200f, +0.000045f, - +0.000043f, +0.000070f, -0.000019f, -0.000137f, -0.000146f, +0.000126f, +0.000003f, -0.000027f, +0.000050f, +0.000020f, - -0.000015f, -0.000020f, -0.000014f, +0.000038f, -0.000015f, +0.000075f, -0.000046f, -0.000081f, -0.000004f, +0.000033f, - -0.000037f, +0.000026f, +0.000046f, +0.000074f, +0.000001f, -0.000044f, -0.000047f, +0.000019f, -0.000090f, +0.000047f, - -0.000011f, -0.000011f, -0.000016f, -0.000026f, +0.000058f, -0.000013f - }, - { - +0.000470f, +0.000777f, -0.000947f, +0.000382f, -0.000072f, +0.000051f, +0.000131f, +0.000302f, -0.000126f, +0.000214f, - +0.000116f, -0.000011f, -0.000459f, +0.000765f, +0.002678f, -0.003080f, -0.001062f, +0.000787f, +0.001059f, -0.000255f, - +0.000570f, -0.000791f, -0.002324f, +0.001952f, +0.000061f, +0.000625f, +0.000747f, -0.000636f, +0.000472f, -0.000229f, - -0.000072f, +0.000562f, +0.000192f, +0.000451f, -0.000458f, +0.000060f, -0.000269f, +0.000244f, -0.000126f, -0.000201f, - -0.000233f, -0.000421f, +0.000286f, -0.000049f, +0.000240f, -0.000057f, -0.000286f, -0.000023f, -0.000024f, +0.000022f, - +0.000079f, +0.000069f, -0.000182f, -0.000138f, -0.000009f, -0.000008f, -0.000004f, -0.000087f, +0.000039f, +0.000039f, - +0.000038f, -0.000021f, +0.000054f, +0.000108f, -0.000005f, +0.000006f, +0.000029f, -0.000055f, -0.000109f, +0.000017f, - +0.000123f, +0.000086f, -0.000031f, -0.000043f, +0.000017f, -0.000105f, +0.000025f, -0.000043f, -0.000050f, -0.000037f, - +0.000063f, -0.000009f, -0.000018f, +0.000015f, +0.000006f, +0.000002f, -0.000055f, +0.000071f, -0.000020f, -0.000017f, - +0.000046f, +0.000059f, +0.000029f, -0.000034f, +0.000010f, +0.000004f - }, - { - -0.015654f, +0.000634f, +0.004944f, +0.000631f, -0.000494f, +0.000055f, -0.000547f, +0.000822f, +0.000031f, +0.000104f, - -0.000811f, -0.000768f, +0.000644f, +0.000962f, -0.000292f, +0.000530f, -0.000595f, -0.000131f, +0.001320f, +0.000189f, - -0.000662f, +0.000890f, +0.000393f, -0.000141f, -0.000214f, +0.000355f, -0.000048f, -0.000098f, -0.000516f, +0.000190f, - +0.000501f, -0.000024f, +0.000106f, +0.000156f, -0.000184f, -0.000195f, -0.000364f, +0.000072f, -0.000343f, -0.000132f, - -0.000178f, +0.000182f, -0.000025f, -0.000369f, +0.000438f, -0.000389f, -0.000510f, -0.000030f, +0.000299f, -0.000193f, - -0.000061f, -0.000242f, +0.000070f, +0.000372f, -0.000071f, +0.000032f, -0.000043f, -0.000062f, -0.000089f, +0.000057f, - -0.000059f, +0.000170f, +0.000107f, -0.000136f, -0.000014f, +0.000067f, +0.000035f, +0.000007f, -0.000025f, +0.000062f, - +0.000071f, -0.000006f, +0.000022f, -0.000010f, -0.000146f, -0.000059f, +0.000154f, -0.000168f, -0.000067f, +0.000036f, - -0.000069f, -0.000029f, +0.000030f, -0.000012f, -0.000012f, +0.000029f, +0.000035f, -0.000046f, +0.000020f, -0.000050f, - +0.000004f, +0.000022f, -0.000017f, -0.000006f, -0.000033f, +0.000000f - }, - { - +0.000846f, -0.000180f, -0.003113f, -0.000386f, -0.000407f, +0.000096f, +0.000101f, +0.000129f, -0.000295f, -0.000232f, - +0.000004f, -0.000010f, -0.000746f, -0.000531f, -0.001535f, +0.003699f, -0.003808f, -0.000405f, +0.000613f, +0.000404f, - -0.000750f, +0.001164f, -0.001805f, +0.001223f, -0.001006f, +0.000948f, +0.001393f, -0.000824f, +0.000366f, +0.000728f, - -0.000618f, +0.000360f, -0.000648f, +0.000772f, +0.000485f, -0.000212f, +0.000461f, +0.000182f, -0.000417f, +0.000388f, - -0.000423f, -0.000502f, +0.000314f, -0.000081f, -0.000381f, -0.000332f, -0.000035f, -0.000033f, -0.000025f, -0.000309f, - -0.000007f, -0.000069f, +0.000199f, -0.000092f, -0.000080f, +0.000056f, +0.000180f, +0.000064f, -0.000121f, +0.000080f, - -0.000113f, -0.000009f, +0.000081f, -0.000041f, +0.000049f, +0.000237f, +0.000075f, +0.000159f, +0.000000f, -0.000028f, - +0.000043f, -0.000029f, +0.000128f, +0.000166f, -0.000107f, -0.000025f, +0.000015f, +0.000079f, -0.000042f, -0.000006f, - -0.000108f, +0.000004f, +0.000120f, +0.000025f, +0.000045f, +0.000019f, -0.000026f, -0.000068f, -0.000034f, +0.000016f, - +0.000005f, -0.000022f, +0.000004f, +0.000011f, +0.000002f, +0.000015f - }, - { - -0.001423f, +0.019211f, -0.001628f, -0.000111f, +0.000324f, -0.001206f, +0.000445f, +0.000345f, -0.000160f, +0.000188f, - -0.000444f, -0.000512f, -0.000529f, -0.000034f, +0.000235f, +0.000174f, +0.000487f, -0.000321f, -0.000612f, +0.000252f, - +0.000682f, -0.000246f, -0.000148f, +0.000151f, +0.000179f, -0.000126f, +0.000218f, -0.000321f, -0.000314f, -0.000073f, - +0.000296f, -0.000005f, -0.000056f, +0.000124f, -0.000146f, +0.000045f, +0.000248f, -0.000115f, -0.000038f, -0.000079f, - +0.000035f, -0.000110f, -0.000213f, -0.000049f, +0.000383f, -0.000485f, +0.000012f, -0.000059f, -0.000037f, -0.000198f, - -0.000303f, -0.000045f, -0.000167f, -0.000281f, +0.000142f, +0.000028f, -0.000034f, -0.000064f, -0.000040f, -0.000129f, - +0.000238f, -0.000035f, -0.000064f, -0.000014f, -0.000029f, +0.000071f, -0.000071f, +0.000040f, +0.000063f, -0.000081f, - -0.000017f, -0.000034f, +0.000042f, -0.000080f, +0.000009f, -0.000002f, +0.000042f, -0.000088f, +0.000090f, -0.000052f, - +0.000012f, +0.000075f, +0.000058f, -0.000066f, +0.000038f, -0.000011f, -0.000097f, -0.000029f, -0.000002f, -0.000081f, - +0.000007f, -0.000040f, +0.000034f, +0.000030f, +0.000036f, -0.000035f - }, - { - -0.000376f, -0.000266f, -0.002118f, +0.000100f, -0.000051f, -0.000209f, -0.002019f, -0.000252f, +0.000146f, +0.000152f, - -0.000054f, -0.001118f, +0.001265f, +0.000575f, -0.000923f, +0.000013f, -0.000491f, +0.001195f, -0.000361f, -0.001223f, - -0.000404f, +0.000841f, -0.000778f, -0.001420f, -0.001034f, +0.001167f, -0.000474f, -0.000688f, -0.000704f, +0.000093f, - +0.000527f, +0.000280f, +0.000178f, +0.000095f, +0.000435f, -0.000557f, +0.000088f, +0.000160f, +0.000066f, +0.000142f, - +0.000202f, +0.000226f, -0.000205f, -0.000154f, -0.000062f, +0.000020f, -0.000024f, +0.000143f, +0.000051f, -0.000133f, - -0.000104f, -0.000276f, -0.000145f, +0.000182f, +0.000232f, +0.000010f, +0.000051f, -0.000032f, -0.000025f, +0.000045f, - +0.000053f, -0.000163f, +0.000010f, +0.000131f, +0.000047f, -0.000032f, +0.000138f, -0.000011f, -0.000115f, +0.000009f, - -0.000065f, +0.000050f, +0.000059f, +0.000005f, -0.000065f, -0.000043f, -0.000009f, +0.000024f, +0.000129f, -0.000069f, - +0.000020f, +0.000043f, -0.000082f, -0.000050f, +0.000047f, +0.000020f, +0.000000f, +0.000025f, -0.000035f, +0.000081f, - +0.000002f, -0.000021f, +0.000029f, +0.000002f, +0.000009f, -0.000066f - }, - { - -0.001438f, +0.003654f, +0.000945f, +0.001123f, -0.000561f, +0.000295f, +0.001202f, +0.000403f, -0.000335f, -0.000418f, - -0.000006f, +0.000947f, -0.000334f, +0.000724f, +0.000706f, -0.000198f, +0.000339f, +0.000040f, -0.000018f, -0.000635f, - +0.000354f, -0.000263f, -0.000204f, -0.000316f, +0.000139f, +0.000180f, -0.000013f, -0.000421f, +0.000272f, -0.000850f, - +0.000212f, -0.000012f, -0.000040f, +0.000125f, -0.000636f, +0.000165f, -0.000396f, +0.000315f, +0.000915f, -0.000066f, - +0.000013f, -0.000142f, +0.000125f, -0.000248f, +0.000298f, -0.000138f, +0.000021f, +0.000385f, -0.000014f, -0.000057f, - +0.000134f, -0.000062f, +0.000216f, -0.000031f, -0.000075f, -0.000037f, +0.000065f, +0.000028f, -0.000015f, +0.000178f, - -0.000087f, -0.000000f, +0.000123f, +0.000041f, -0.000192f, -0.000017f, +0.000038f, -0.000020f, +0.000141f, +0.000026f, - -0.000132f, +0.000053f, +0.000010f, -0.000004f, -0.000034f, -0.000062f, -0.000011f, -0.000003f, +0.000037f, +0.000035f, - +0.000046f, +0.000028f, -0.000120f, -0.000007f, +0.000009f, -0.000094f, +0.000076f, -0.000001f, +0.000032f, +0.000023f, - -0.000020f, +0.000010f, -0.000062f, -0.000047f, +0.000027f, -0.000007f - }, - { - -0.000261f, +0.001421f, +0.000808f, +0.000386f, +0.000281f, +0.000260f, -0.000450f, +0.000449f, +0.000248f, +0.000473f, - -0.000051f, -0.000941f, +0.001930f, +0.000763f, +0.000842f, -0.000239f, +0.001135f, +0.000699f, -0.000553f, +0.001103f, - -0.001158f, +0.001858f, +0.001144f, -0.000287f, +0.000812f, -0.000161f, -0.000351f, +0.001624f, -0.000356f, +0.000814f, - +0.000363f, +0.000609f, -0.000372f, +0.000163f, -0.000098f, +0.000219f, +0.000305f, -0.000585f, +0.000360f, -0.000187f, - +0.000086f, +0.000085f, +0.000111f, -0.000030f, +0.000255f, +0.000051f, -0.000115f, -0.000181f, +0.000160f, +0.000063f, - -0.000018f, -0.000084f, -0.000170f, +0.000034f, +0.000211f, +0.000054f, -0.000380f, +0.000151f, -0.000272f, -0.000040f, - +0.000222f, +0.000159f, -0.000221f, -0.000180f, -0.000134f, +0.000240f, -0.000121f, -0.000071f, +0.000113f, -0.000044f, - -0.000019f, +0.000031f, +0.000007f, -0.000024f, +0.000090f, -0.000056f, -0.000045f, -0.000048f, -0.000019f, -0.000022f, - -0.000032f, +0.000080f, +0.000018f, +0.000039f, +0.000010f, -0.000011f, +0.000061f, -0.000079f, +0.000022f, -0.000023f, - +0.000027f, +0.000084f, -0.000078f, -0.000065f, +0.000068f, -0.000032f - }, - { - -0.001051f, +0.002857f, -0.002667f, +0.002397f, -0.000169f, +0.003193f, -0.001491f, +0.000683f, +0.000532f, -0.000251f, - -0.000509f, +0.000238f, -0.001040f, -0.000189f, +0.001767f, -0.000969f, +0.000291f, +0.000652f, +0.000351f, -0.000150f, - -0.000151f, +0.000300f, -0.000545f, +0.000566f, -0.000344f, +0.000257f, -0.000098f, +0.000633f, -0.000259f, -0.000265f, - +0.000116f, -0.000316f, -0.000149f, +0.000316f, -0.000135f, -0.000147f, +0.000145f, +0.000039f, -0.000131f, -0.000014f, - -0.000065f, +0.000211f, +0.000037f, -0.000076f, +0.000098f, +0.000113f, +0.000487f, +0.000153f, +0.000022f, -0.000052f, - -0.000133f, +0.000192f, +0.000026f, -0.000097f, -0.000041f, +0.000030f, +0.000216f, +0.000071f, -0.000036f, +0.000040f, - +0.000012f, +0.000011f, -0.000091f, -0.000004f, +0.000151f, +0.000036f, +0.000168f, -0.000011f, +0.000023f, -0.000034f, - +0.000046f, -0.000011f, -0.000011f, -0.000064f, +0.000006f, +0.000043f, +0.000107f, -0.000080f, -0.000038f, +0.000046f, - +0.000066f, -0.000020f, +0.000028f, +0.000082f, -0.000006f, +0.000020f, +0.000100f, -0.000047f, -0.000076f, +0.000017f, - +0.000040f, -0.000025f, +0.000022f, +0.000023f, +0.000028f, -0.000035f - }, - { - +0.000101f, +0.000203f, +0.001408f, +0.000789f, -0.000315f, -0.000151f, -0.000450f, -0.000298f, -0.000463f, -0.000106f, - -0.000320f, +0.000149f, +0.000776f, +0.007279f, -0.008401f, -0.003403f, +0.000067f, +0.000070f, -0.001919f, -0.000055f, - +0.000609f, -0.001569f, +0.000168f, +0.001428f, -0.001103f, +0.000378f, -0.000052f, -0.000217f, -0.000100f, -0.000211f, - +0.000121f, +0.000340f, +0.000418f, -0.000349f, -0.000291f, +0.000516f, -0.000492f, -0.000343f, -0.000232f, +0.000251f, - +0.000285f, -0.000080f, -0.000643f, -0.000348f, +0.000415f, -0.000121f, -0.000083f, +0.000442f, +0.000152f, -0.000277f, - -0.000119f, +0.000014f, -0.000116f, -0.000139f, +0.000039f, +0.000259f, -0.000001f, -0.000160f, +0.000152f, -0.000124f, - -0.000272f, -0.000151f, +0.000100f, -0.000088f, -0.000007f, -0.000167f, -0.000001f, +0.000337f, -0.000180f, +0.000027f, - -0.000002f, +0.000113f, -0.000069f, -0.000093f, +0.000020f, -0.000132f, +0.000105f, +0.000049f, -0.000043f, -0.000062f, - -0.000039f, +0.000055f, +0.000049f, +0.000128f, -0.000082f, +0.000018f, +0.000019f, -0.000048f, -0.000006f, +0.000061f, - -0.000008f, +0.000004f, +0.000051f, -0.000022f, -0.000042f, +0.000020f - } - }, - { - { - +0.005523f, +0.027615f, +0.004667f, +0.002945f, -0.001128f, -0.000136f, +0.000660f, -0.000326f, +0.000100f, +0.000462f, - -0.000164f, -0.000549f, -0.000072f, +0.000148f, +0.001214f, -0.000179f, -0.001053f, -0.000177f, -0.000214f, -0.000171f, - -0.000084f, +0.000173f, -0.000473f, -0.000138f, +0.000190f, +0.000111f, +0.000397f, -0.000250f, +0.000115f, +0.000271f, - -0.000384f, +0.000522f, -0.000267f, +0.000003f, -0.000452f, +0.000348f, -0.000254f, -0.000411f, -0.000103f, -0.000223f, - +0.000202f, +0.000636f, +0.000146f, -0.000028f, -0.000091f, +0.000020f, -0.000211f, +0.000316f, +0.000116f, +0.000292f, - +0.000034f, +0.000135f, +0.000050f, -0.000097f, -0.000108f, -0.000090f, -0.000127f, +0.000024f, -0.000029f, +0.000211f, - -0.000059f, -0.000174f, -0.000112f, +0.000161f, +0.000091f, +0.000045f, +0.000117f, -0.000020f, -0.000004f, +0.000023f, - -0.000047f, +0.000081f, +0.000029f, -0.000047f, -0.000057f, +0.000082f, +0.000088f, -0.000061f, +0.000118f, +0.000066f, - +0.000018f, +0.000026f, -0.000058f, -0.000017f, -0.000063f, +0.000092f, -0.000023f, +0.000048f, +0.000034f, +0.000015f, - -0.000019f, +0.000027f, -0.000021f, -0.000010f, +0.000020f, +0.000008f - }, - { - +0.000351f, +0.007300f, -0.002718f, +0.001046f, -0.000302f, +0.000070f, -0.000730f, +0.000467f, -0.000166f, +0.000033f, - +0.000217f, +0.000338f, -0.001076f, +0.000593f, +0.001894f, -0.000450f, -0.000607f, +0.000112f, -0.003742f, -0.001100f, - +0.000417f, -0.001283f, +0.001375f, +0.000964f, -0.000968f, -0.001164f, +0.000811f, -0.000954f, +0.000122f, -0.000137f, - +0.000688f, +0.001476f, -0.000401f, -0.000025f, +0.000140f, -0.000055f, +0.000260f, -0.000365f, -0.000319f, -0.000033f, - +0.000459f, +0.000466f, -0.000088f, -0.000321f, -0.000174f, -0.000077f, +0.000113f, -0.000009f, +0.000005f, +0.000135f, - -0.000206f, +0.000062f, +0.000077f, -0.000077f, -0.000438f, -0.000090f, +0.000274f, +0.000060f, +0.000018f, +0.000010f, - +0.000013f, -0.000005f, -0.000066f, +0.000012f, +0.000081f, -0.000037f, +0.000223f, +0.000014f, -0.000094f, -0.000016f, - +0.000044f, -0.000131f, -0.000021f, +0.000042f, +0.000073f, -0.000072f, -0.000046f, +0.000044f, +0.000039f, +0.000019f, - -0.000081f, +0.000029f, +0.000067f, -0.000014f, +0.000055f, +0.000030f, -0.000022f, +0.000009f, +0.000075f, -0.000072f, - -0.000001f, +0.000050f, +0.000039f, -0.000015f, -0.000030f, -0.000022f - }, - { - -0.000193f, +0.019414f, +0.000747f, -0.001527f, -0.001421f, -0.001006f, -0.000394f, -0.000225f, -0.000199f, -0.000040f, - +0.000527f, -0.000118f, +0.000217f, +0.000888f, -0.000744f, -0.000094f, +0.000491f, -0.000021f, -0.001420f, +0.000723f, - +0.000393f, +0.001124f, +0.000110f, +0.000219f, +0.000282f, -0.000022f, +0.000281f, -0.000296f, +0.000391f, -0.000338f, - -0.000059f, +0.000436f, +0.000001f, -0.000115f, +0.000021f, +0.000275f, -0.000055f, -0.000250f, -0.000037f, -0.000285f, - -0.000321f, +0.000168f, +0.000269f, -0.000010f, +0.000278f, -0.000008f, +0.000195f, +0.000147f, +0.000036f, -0.000086f, - -0.000180f, +0.000153f, -0.000010f, +0.000059f, -0.000075f, -0.000143f, +0.000046f, -0.000093f, -0.000115f, -0.000060f, - +0.000070f, -0.000036f, +0.000004f, -0.000116f, +0.000077f, +0.000066f, -0.000129f, +0.000043f, +0.000066f, -0.000031f, - -0.000038f, +0.000102f, +0.000065f, -0.000030f, -0.000071f, -0.000095f, +0.000055f, +0.000082f, -0.000058f, -0.000015f, - -0.000005f, +0.000029f, -0.000030f, -0.000003f, +0.000084f, -0.000019f, -0.000027f, -0.000039f, -0.000002f, -0.000016f, - -0.000025f, -0.000016f, +0.000029f, +0.000011f, +0.000004f, +0.000054f - }, - { - -0.007920f, +0.047353f, -0.002115f, -0.004443f, +0.000023f, -0.000010f, -0.000495f, +0.000124f, -0.000130f, +0.000287f, - -0.000450f, +0.000047f, +0.000058f, -0.001561f, -0.000299f, -0.000858f, +0.000446f, -0.000903f, -0.000296f, +0.000347f, - +0.000109f, +0.000024f, +0.000071f, -0.000167f, -0.000004f, +0.000089f, +0.000843f, +0.000507f, +0.000379f, +0.000060f, - -0.000234f, +0.000046f, +0.000012f, -0.000372f, -0.000481f, +0.000271f, +0.000295f, -0.000481f, -0.000044f, -0.000695f, - -0.000081f, -0.000188f, +0.000241f, -0.000109f, +0.000114f, +0.000058f, -0.000163f, +0.000167f, -0.000139f, +0.000315f, - +0.000132f, -0.000153f, +0.000171f, +0.000043f, -0.000076f, -0.000028f, +0.000009f, +0.000121f, -0.000096f, -0.000028f, - +0.000063f, +0.000105f, -0.000111f, +0.000182f, -0.000113f, -0.000111f, +0.000042f, -0.000147f, +0.000032f, +0.000005f, - -0.000043f, -0.000131f, +0.000032f, +0.000077f, -0.000012f, +0.000040f, +0.000008f, -0.000027f, +0.000002f, +0.000034f, - +0.000012f, -0.000026f, -0.000062f, +0.000020f, -0.000033f, -0.000011f, +0.000042f, -0.000049f, +0.000014f, +0.000044f, - +0.000010f, -0.000036f, +0.000004f, +0.000025f, -0.000023f, -0.000015f - }, - { - -0.000582f, -0.009416f, +0.000687f, +0.000202f, -0.000285f, +0.000014f, +0.000294f, +0.000337f, -0.000293f, +0.000362f, - +0.000317f, -0.000141f, +0.000512f, -0.000964f, +0.006953f, -0.001141f, +0.001107f, +0.001283f, -0.002118f, -0.002495f, - -0.000651f, -0.000434f, +0.000175f, -0.001655f, +0.001271f, -0.000220f, +0.001207f, +0.000307f, -0.000232f, -0.001637f, - -0.000474f, -0.000046f, +0.000107f, +0.000210f, +0.000147f, -0.000065f, -0.000144f, +0.000416f, +0.000032f, +0.000648f, - -0.000061f, +0.000090f, +0.000005f, -0.000082f, +0.000301f, +0.000143f, +0.000131f, +0.000158f, -0.000087f, -0.000127f, - -0.000023f, -0.000079f, +0.000293f, -0.000170f, -0.000082f, -0.000041f, +0.000014f, +0.000060f, -0.000099f, +0.000071f, - +0.000093f, +0.000005f, +0.000006f, +0.000055f, +0.000133f, -0.000068f, -0.000019f, -0.000056f, +0.000015f, +0.000036f, - -0.000148f, -0.000063f, +0.000040f, -0.000022f, -0.000057f, +0.000079f, +0.000006f, +0.000066f, +0.000078f, -0.000051f, - +0.000025f, -0.000091f, -0.000048f, +0.000123f, -0.000065f, +0.000012f, -0.000034f, -0.000035f, +0.000041f, +0.000018f, - +0.000014f, +0.000005f, -0.000050f, -0.000023f, +0.000058f, +0.000013f - }, - { - -0.005710f, +0.056455f, -0.001240f, +0.005024f, +0.000027f, +0.000054f, +0.000605f, -0.000661f, +0.000230f, +0.001582f, - -0.000577f, -0.000662f, -0.000219f, -0.000233f, +0.001427f, +0.000331f, +0.000234f, +0.000386f, -0.000223f, +0.000435f, - +0.000385f, -0.000033f, -0.001193f, -0.000342f, +0.000414f, -0.000127f, +0.000094f, +0.000070f, +0.000076f, +0.000342f, - -0.000304f, -0.000279f, +0.000344f, +0.000633f, -0.000295f, +0.000205f, +0.000072f, -0.000450f, +0.000065f, -0.000137f, - -0.000392f, -0.000018f, -0.000025f, -0.000385f, -0.000428f, +0.000097f, -0.000369f, -0.000067f, +0.000014f, +0.000185f, - -0.000306f, +0.000178f, +0.000315f, -0.000040f, -0.000149f, +0.000089f, +0.000272f, -0.000047f, -0.000095f, -0.000046f, - -0.000065f, +0.000171f, +0.000014f, -0.000085f, -0.000176f, +0.000014f, +0.000055f, -0.000019f, +0.000056f, -0.000026f, - -0.000025f, +0.000032f, -0.000064f, +0.000066f, -0.000027f, +0.000029f, +0.000015f, -0.000032f, -0.000032f, -0.000017f, - -0.000037f, -0.000062f, +0.000010f, +0.000073f, +0.000018f, +0.000024f, -0.000030f, +0.000058f, -0.000080f, -0.000001f, - +0.000015f, -0.000016f, +0.000005f, -0.000049f, +0.000028f, +0.000016f - }, - { - +0.000256f, +0.002253f, +0.000363f, -0.000768f, -0.000099f, +0.000085f, +0.000228f, +0.000407f, -0.000125f, -0.000076f, - +0.000032f, +0.000083f, -0.000753f, -0.000659f, +0.002209f, -0.003197f, -0.001150f, -0.000270f, +0.000755f, +0.000592f, - +0.000235f, +0.000080f, -0.003748f, +0.000581f, +0.000749f, +0.000689f, +0.001309f, -0.000414f, -0.000115f, +0.000508f, - -0.000416f, +0.000225f, +0.000256f, +0.000636f, -0.000001f, -0.000318f, -0.000121f, +0.000438f, +0.000016f, +0.000217f, - -0.000232f, -0.000439f, +0.000183f, -0.000104f, +0.000329f, +0.000116f, -0.000139f, +0.000006f, -0.000085f, -0.000063f, - +0.000009f, +0.000112f, -0.000095f, -0.000111f, -0.000052f, +0.000054f, +0.000145f, -0.000199f, +0.000036f, +0.000092f, - -0.000022f, -0.000141f, +0.000097f, +0.000056f, +0.000026f, +0.000029f, -0.000019f, +0.000070f, -0.000107f, -0.000067f, - +0.000084f, +0.000121f, +0.000002f, -0.000041f, +0.000108f, +0.000012f, +0.000033f, +0.000023f, -0.000010f, -0.000057f, - +0.000035f, +0.000005f, +0.000021f, -0.000025f, +0.000021f, +0.000004f, -0.000060f, +0.000003f, -0.000024f, -0.000070f, - -0.000018f, +0.000014f, +0.000049f, -0.000041f, -0.000016f, +0.000030f - }, - { - +0.012785f, -0.034183f, +0.000256f, +0.000552f, -0.000106f, -0.000016f, -0.000607f, +0.000215f, +0.000111f, +0.000272f, - -0.000443f, -0.000886f, -0.000003f, +0.000798f, +0.000652f, -0.000136f, +0.000027f, -0.000916f, +0.000793f, +0.000927f, - -0.000439f, +0.000383f, +0.000626f, +0.000101f, -0.000273f, +0.000216f, -0.000154f, +0.000190f, -0.000883f, +0.000223f, - +0.000648f, -0.000115f, +0.000264f, +0.000072f, -0.000065f, +0.000059f, -0.000354f, -0.000304f, -0.000026f, -0.000249f, - -0.000214f, +0.000118f, +0.000045f, -0.000484f, +0.000090f, -0.000411f, -0.000419f, -0.000106f, -0.000060f, +0.000139f, - -0.000008f, -0.000419f, -0.000222f, +0.000302f, -0.000014f, +0.000164f, +0.000158f, -0.000012f, -0.000128f, -0.000085f, - -0.000078f, +0.000135f, +0.000079f, -0.000047f, -0.000064f, +0.000030f, +0.000036f, +0.000033f, -0.000045f, +0.000064f, - +0.000062f, -0.000011f, +0.000046f, +0.000124f, -0.000105f, -0.000104f, +0.000164f, -0.000071f, -0.000050f, -0.000004f, - -0.000009f, -0.000070f, -0.000001f, -0.000002f, -0.000016f, +0.000022f, +0.000073f, -0.000013f, +0.000002f, -0.000007f, - +0.000002f, +0.000013f, +0.000019f, +0.000007f, -0.000015f, -0.000019f - }, - { - +0.000272f, +0.002926f, -0.003373f, +0.000397f, -0.000341f, -0.000111f, +0.000126f, +0.000245f, -0.000198f, -0.000248f, - -0.000097f, -0.000567f, -0.000473f, +0.000532f, -0.003864f, -0.001677f, +0.000892f, -0.001750f, +0.000686f, -0.000208f, - -0.000471f, +0.000918f, -0.001619f, +0.001759f, -0.000749f, +0.000692f, +0.000574f, +0.000143f, +0.000297f, +0.000249f, - -0.000799f, +0.000153f, +0.000156f, +0.000067f, +0.000709f, -0.000161f, +0.000429f, +0.000246f, -0.000278f, +0.000194f, - -0.000012f, -0.000409f, +0.000079f, +0.000297f, -0.000178f, -0.000080f, +0.000062f, -0.000249f, -0.000112f, -0.000251f, - -0.000118f, +0.000006f, +0.000148f, -0.000018f, -0.000037f, +0.000069f, +0.000249f, +0.000121f, -0.000006f, +0.000016f, - -0.000106f, -0.000153f, +0.000067f, -0.000170f, +0.000035f, +0.000103f, +0.000044f, +0.000108f, +0.000026f, -0.000034f, - -0.000067f, -0.000056f, +0.000073f, +0.000176f, -0.000011f, -0.000041f, +0.000013f, +0.000061f, -0.000038f, -0.000013f, - -0.000061f, -0.000077f, +0.000071f, +0.000042f, +0.000042f, +0.000038f, +0.000048f, -0.000016f, -0.000069f, +0.000003f, - +0.000054f, -0.000026f, -0.000005f, +0.000012f, -0.000002f, +0.000044f - }, - { - +0.001296f, +0.010689f, +0.004776f, -0.000540f, -0.000367f, +0.000753f, -0.000067f, -0.000503f, +0.000121f, +0.000309f, - -0.000273f, +0.000041f, -0.000257f, -0.000978f, +0.001148f, -0.000575f, +0.000232f, +0.000024f, -0.000229f, -0.000063f, - +0.000979f, -0.000504f, +0.000046f, -0.000278f, +0.000657f, +0.000009f, -0.000096f, -0.000124f, -0.000118f, -0.000338f, - +0.000495f, +0.000328f, -0.000074f, +0.000177f, +0.000207f, -0.000260f, -0.000056f, +0.000096f, -0.000337f, +0.000115f, - +0.000104f, +0.000166f, -0.000211f, -0.000172f, +0.000210f, -0.000117f, -0.000200f, -0.000001f, +0.000213f, -0.000079f, - -0.000336f, +0.000134f, +0.000079f, -0.000294f, -0.000039f, +0.000060f, +0.000001f, -0.000128f, +0.000010f, -0.000166f, - +0.000072f, +0.000005f, +0.000024f, +0.000030f, -0.000078f, +0.000060f, -0.000004f, +0.000004f, +0.000106f, -0.000027f, - -0.000063f, -0.000027f, +0.000099f, -0.000098f, +0.000028f, -0.000025f, +0.000087f, -0.000085f, +0.000037f, -0.000064f, - -0.000016f, +0.000036f, +0.000069f, -0.000023f, +0.000085f, +0.000070f, -0.000038f, -0.000011f, +0.000013f, -0.000040f, - +0.000024f, -0.000066f, +0.000000f, +0.000038f, +0.000052f, +0.000003f - }, - { - +0.000290f, -0.001884f, -0.000949f, -0.000716f, +0.000601f, -0.000211f, -0.000670f, -0.000616f, +0.000394f, -0.000030f, - +0.000052f, -0.000202f, +0.000595f, +0.000077f, +0.000153f, -0.000273f, -0.000819f, +0.000436f, +0.000323f, -0.001613f, - -0.001098f, +0.000734f, -0.001284f, -0.000233f, -0.001057f, +0.000664f, -0.000306f, -0.000498f, -0.001109f, -0.000027f, - +0.000080f, +0.000310f, +0.000237f, +0.000068f, +0.000550f, -0.000667f, -0.000111f, -0.000063f, +0.000196f, +0.000133f, - +0.000170f, +0.000015f, +0.000031f, -0.000074f, -0.000077f, +0.000116f, +0.000045f, +0.000009f, +0.000212f, +0.000046f, - +0.000010f, -0.000255f, -0.000202f, -0.000087f, +0.000140f, +0.000043f, +0.000053f, +0.000073f, -0.000068f, +0.000030f, - +0.000102f, -0.000108f, -0.000025f, +0.000075f, +0.000218f, -0.000065f, +0.000080f, +0.000117f, -0.000040f, -0.000039f, - -0.000052f, -0.000009f, +0.000026f, +0.000024f, -0.000066f, -0.000064f, -0.000081f, -0.000056f, +0.000118f, -0.000011f, - +0.000009f, +0.000050f, -0.000067f, -0.000091f, -0.000014f, +0.000038f, -0.000035f, +0.000002f, -0.000090f, +0.000048f, - +0.000019f, -0.000018f, +0.000016f, -0.000006f, +0.000033f, -0.000042f - }, - { - +0.003093f, -0.005604f, +0.003794f, -0.000258f, +0.000457f, +0.000514f, +0.000377f, +0.000525f, -0.000733f, +0.000432f, - -0.000560f, -0.000138f, +0.000654f, +0.000342f, +0.000433f, -0.000214f, +0.000007f, -0.000224f, +0.000464f, -0.000683f, - +0.000716f, -0.000035f, -0.000748f, -0.000021f, +0.000401f, +0.000026f, -0.000062f, -0.000366f, +0.000079f, -0.000447f, - -0.000217f, +0.000183f, -0.000229f, +0.000064f, -0.000376f, -0.000335f, -0.000515f, +0.000024f, +0.000578f, -0.000029f, - +0.000270f, -0.000097f, -0.000200f, -0.000060f, +0.000228f, +0.000070f, -0.000029f, +0.000167f, +0.000102f, -0.000007f, - +0.000344f, -0.000046f, +0.000200f, -0.000073f, -0.000071f, -0.000132f, +0.000020f, +0.000099f, -0.000148f, +0.000122f, - +0.000081f, -0.000045f, +0.000014f, +0.000090f, -0.000121f, -0.000063f, +0.000026f, -0.000059f, +0.000046f, +0.000105f, - -0.000078f, +0.000025f, +0.000051f, +0.000004f, +0.000014f, -0.000049f, -0.000047f, -0.000029f, -0.000006f, +0.000054f, - +0.000022f, +0.000073f, -0.000066f, -0.000008f, +0.000036f, -0.000119f, +0.000047f, +0.000008f, +0.000012f, +0.000083f, - -0.000005f, +0.000050f, -0.000028f, -0.000042f, +0.000011f, +0.000007f - }, - { - +0.000164f, +0.002878f, -0.001111f, +0.000327f, +0.000049f, +0.000357f, -0.000640f, -0.000060f, +0.000545f, +0.000724f, - +0.000071f, -0.000681f, -0.000179f, +0.002487f, +0.001589f, +0.001597f, +0.000306f, +0.000317f, -0.000643f, +0.001455f, - -0.002102f, +0.001054f, +0.002495f, +0.000361f, -0.000888f, +0.000399f, -0.000178f, +0.001755f, -0.000232f, +0.001338f, - -0.000464f, +0.000131f, -0.000271f, +0.000162f, -0.000028f, -0.000263f, +0.000213f, -0.000156f, +0.000277f, +0.000005f, - +0.000060f, +0.000232f, -0.000009f, -0.000037f, +0.000337f, +0.000030f, +0.000020f, +0.000034f, +0.000085f, +0.000045f, - -0.000057f, +0.000116f, -0.000067f, -0.000069f, +0.000287f, +0.000193f, -0.000301f, -0.000001f, -0.000130f, -0.000144f, - +0.000025f, +0.000203f, -0.000049f, -0.000156f, -0.000156f, +0.000117f, -0.000035f, -0.000112f, +0.000082f, +0.000051f, - -0.000043f, -0.000021f, +0.000021f, -0.000022f, +0.000117f, +0.000067f, -0.000018f, -0.000042f, -0.000046f, -0.000032f, - -0.000062f, +0.000002f, +0.000015f, -0.000025f, +0.000010f, -0.000036f, +0.000105f, -0.000064f, -0.000032f, +0.000006f, - +0.000000f, +0.000087f, +0.000016f, -0.000085f, +0.000047f, +0.000037f - }, - { - +0.000100f, +0.001193f, -0.001373f, -0.000447f, -0.000003f, +0.000937f, +0.001500f, -0.000239f, +0.001216f, +0.000055f, - -0.000093f, -0.000295f, -0.000680f, +0.001796f, -0.001245f, -0.001083f, -0.000174f, -0.000597f, +0.000629f, -0.000215f, - -0.000176f, +0.000528f, -0.000240f, +0.000719f, -0.000259f, +0.000134f, +0.000019f, +0.000568f, +0.000373f, -0.000500f, - +0.000112f, -0.000378f, -0.000266f, -0.000173f, +0.000167f, -0.000421f, -0.000122f, +0.000164f, -0.000148f, +0.000087f, - -0.000173f, +0.000149f, +0.000213f, -0.000119f, -0.000047f, +0.000068f, +0.000214f, +0.000250f, +0.000039f, +0.000092f, - -0.000216f, -0.000066f, +0.000264f, -0.000043f, -0.000158f, -0.000050f, +0.000097f, +0.000101f, -0.000031f, -0.000006f, - -0.000009f, +0.000053f, -0.000027f, -0.000137f, +0.000092f, -0.000039f, +0.000143f, +0.000000f, +0.000057f, -0.000071f, - +0.000086f, -0.000015f, +0.000011f, -0.000043f, -0.000007f, -0.000010f, +0.000119f, -0.000045f, -0.000127f, -0.000022f, - +0.000058f, -0.000012f, -0.000040f, +0.000023f, +0.000010f, -0.000049f, +0.000086f, +0.000042f, -0.000054f, -0.000003f, - +0.000040f, -0.000060f, +0.000003f, -0.000007f, +0.000036f, -0.000016f - }, - { - -0.000337f, +0.000119f, +0.001232f, +0.000743f, +0.000027f, -0.000174f, -0.000591f, +0.000177f, -0.000566f, -0.000163f, - -0.000145f, -0.000208f, +0.000299f, -0.000269f, +0.000989f, -0.001689f, -0.001161f, +0.000011f, -0.000720f, -0.000768f, - +0.000404f, -0.000116f, -0.001002f, +0.001408f, -0.000019f, -0.000400f, +0.001206f, -0.001233f, -0.000488f, +0.000158f, - +0.000012f, +0.000426f, +0.000472f, -0.000026f, -0.000366f, +0.000290f, +0.000063f, -0.000495f, -0.000288f, +0.000040f, - +0.000189f, +0.000226f, -0.000364f, -0.000138f, +0.000158f, +0.000130f, -0.000074f, +0.000434f, +0.000160f, -0.000142f, - -0.000136f, -0.000083f, +0.000082f, -0.000081f, -0.000068f, +0.000067f, +0.000076f, -0.000127f, +0.000219f, +0.000219f, - -0.000158f, -0.000218f, +0.000174f, +0.000012f, +0.000071f, -0.000168f, -0.000160f, +0.000273f, -0.000071f, +0.000037f, - -0.000035f, +0.000135f, +0.000062f, -0.000021f, +0.000086f, -0.000139f, +0.000054f, +0.000087f, +0.000014f, -0.000039f, - -0.000114f, +0.000009f, -0.000039f, +0.000113f, -0.000014f, +0.000004f, +0.000020f, -0.000048f, -0.000013f, +0.000032f, - -0.000000f, -0.000033f, +0.000039f, +0.000021f, -0.000021f, -0.000015f - } - }, - { - { - -0.006593f, -0.002709f, +0.002327f, +0.004486f, +0.000666f, -0.000363f, -0.000194f, -0.000055f, -0.000019f, -0.000564f, - +0.000335f, +0.000735f, -0.000144f, -0.001159f, -0.001462f, +0.001077f, -0.000360f, +0.000094f, -0.000079f, +0.001461f, - -0.000358f, +0.000074f, -0.000035f, +0.000069f, -0.000163f, +0.000075f, -0.000526f, -0.000512f, -0.000091f, +0.000646f, - +0.000025f, +0.000082f, -0.000413f, -0.000245f, -0.000026f, -0.000256f, -0.000141f, -0.000415f, +0.000013f, +0.000062f, - -0.000241f, +0.000057f, +0.000122f, -0.000075f, -0.000202f, +0.000191f, +0.000093f, +0.000021f, -0.000215f, +0.000101f, - +0.000067f, -0.000014f, -0.000037f, +0.000004f, -0.000118f, -0.000072f, -0.000119f, -0.000066f, -0.000204f, -0.000041f, - +0.000160f, +0.000031f, -0.000011f, -0.000037f, +0.000046f, -0.000071f, -0.000019f, +0.000185f, -0.000058f, +0.000018f, - -0.000099f, -0.000014f, +0.000012f, +0.000075f, +0.000035f, -0.000081f, -0.000038f, +0.000058f, -0.000118f, +0.000072f, - +0.000001f, +0.000098f, +0.000009f, +0.000031f, -0.000003f, -0.000108f, +0.000100f, -0.000032f, +0.000017f, +0.000040f, - +0.000031f, -0.000016f, +0.000036f, -0.000016f, -0.000012f, -0.000007f - }, - { - -0.000278f, +0.008271f, -0.000788f, -0.000266f, +0.000579f, +0.000333f, -0.000627f, +0.000223f, +0.000402f, -0.000342f, - +0.000136f, +0.000065f, -0.000574f, -0.000706f, +0.000336f, +0.002086f, +0.000496f, +0.002037f, -0.000196f, -0.001104f, - -0.000199f, -0.001553f, -0.000665f, -0.000044f, +0.000825f, +0.000916f, +0.001047f, +0.000191f, +0.000577f, -0.000289f, - +0.000272f, +0.000325f, -0.000470f, +0.000871f, +0.000174f, +0.000400f, -0.000079f, -0.000031f, +0.000245f, -0.000121f, - -0.000227f, +0.000147f, +0.000214f, +0.000185f, -0.000383f, +0.000040f, +0.000089f, -0.000045f, -0.000289f, +0.000185f, - +0.000029f, -0.000113f, +0.000053f, +0.000121f, +0.000168f, -0.000338f, -0.000011f, -0.000044f, -0.000027f, -0.000252f, - +0.000012f, +0.000132f, +0.000137f, -0.000048f, -0.000075f, -0.000030f, -0.000052f, +0.000169f, +0.000073f, -0.000046f, - -0.000023f, +0.000090f, -0.000031f, -0.000143f, +0.000016f, +0.000134f, -0.000050f, -0.000035f, -0.000091f, +0.000053f, - +0.000070f, -0.000045f, -0.000062f, +0.000021f, -0.000015f, +0.000014f, +0.000048f, +0.000036f, -0.000024f, +0.000091f, - -0.000031f, -0.000057f, -0.000022f, +0.000033f, +0.000052f, -0.000004f - }, - { - +0.000474f, +0.021702f, -0.001101f, -0.002635f, +0.001644f, +0.000096f, +0.000185f, +0.000048f, -0.000078f, -0.000616f, - +0.000393f, +0.000328f, +0.000037f, -0.000185f, -0.000564f, -0.000962f, +0.000749f, -0.000127f, +0.000871f, +0.000240f, - -0.000775f, -0.000430f, -0.000064f, -0.000332f, -0.000321f, -0.000193f, +0.000520f, +0.000428f, +0.000144f, -0.000217f, - +0.000674f, -0.000575f, +0.000330f, +0.000705f, +0.000576f, -0.000484f, +0.000020f, -0.000016f, +0.000240f, +0.000037f, - +0.000051f, -0.000066f, -0.000371f, +0.000238f, -0.000035f, +0.000223f, -0.000019f, -0.000036f, +0.000166f, +0.000204f, - -0.000474f, +0.000057f, +0.000083f, -0.000187f, -0.000023f, +0.000145f, +0.000069f, +0.000135f, +0.000035f, +0.000020f, - -0.000128f, +0.000115f, +0.000077f, +0.000100f, -0.000173f, +0.000112f, +0.000036f, +0.000076f, -0.000069f, +0.000083f, - +0.000001f, -0.000096f, +0.000043f, +0.000064f, -0.000015f, +0.000046f, -0.000075f, -0.000023f, +0.000092f, -0.000039f, - -0.000044f, -0.000022f, +0.000071f, -0.000027f, -0.000045f, +0.000020f, +0.000018f, +0.000071f, -0.000054f, +0.000009f, - +0.000035f, -0.000027f, -0.000031f, +0.000012f, -0.000030f, -0.000024f - }, - { - +0.000061f, +0.061332f, -0.000526f, -0.004577f, +0.000207f, +0.000264f, +0.000284f, -0.000090f, +0.000220f, +0.000833f, - -0.001047f, -0.000721f, +0.000302f, -0.000868f, +0.000591f, -0.001392f, +0.000058f, -0.000067f, +0.000095f, -0.000194f, - -0.000269f, -0.000444f, +0.000439f, +0.000318f, +0.000170f, +0.000461f, -0.000697f, +0.000020f, -0.000162f, +0.000330f, - +0.000592f, +0.000214f, +0.000112f, +0.000288f, -0.000165f, +0.000658f, -0.000105f, +0.000045f, -0.000258f, -0.000412f, - +0.000556f, -0.000534f, +0.000083f, +0.000208f, -0.000130f, -0.000163f, +0.000333f, +0.000300f, +0.000023f, +0.000044f, - +0.000049f, +0.000064f, -0.000038f, +0.000164f, -0.000014f, +0.000072f, -0.000044f, +0.000025f, +0.000115f, -0.000195f, - -0.000099f, +0.000139f, +0.000120f, +0.000007f, +0.000071f, +0.000017f, -0.000075f, +0.000117f, -0.000114f, +0.000044f, - +0.000116f, +0.000055f, -0.000172f, -0.000007f, -0.000014f, -0.000010f, +0.000047f, +0.000014f, -0.000018f, -0.000053f, - +0.000055f, +0.000027f, +0.000072f, -0.000028f, -0.000016f, +0.000016f, -0.000030f, +0.000073f, -0.000071f, -0.000049f, - +0.000010f, +0.000036f, -0.000013f, -0.000013f, +0.000028f, +0.000020f - }, - { - +0.000480f, -0.007684f, -0.000317f, -0.000757f, +0.000452f, -0.000056f, -0.000291f, +0.000164f, -0.000339f, +0.000155f, - +0.000097f, -0.000022f, +0.000715f, -0.000931f, +0.008493f, -0.000062f, -0.002389f, -0.003946f, +0.005762f, -0.000755f, - -0.000358f, -0.001268f, +0.000784f, +0.000079f, +0.000208f, -0.001345f, -0.002167f, -0.000756f, +0.001860f, +0.000177f, - -0.000500f, +0.000505f, -0.000348f, +0.000321f, -0.000491f, +0.000022f, -0.000140f, +0.000026f, -0.000061f, +0.000265f, - -0.000082f, -0.000207f, +0.000215f, +0.000071f, -0.000088f, -0.000193f, -0.000063f, -0.000147f, +0.000093f, -0.000346f, - +0.000157f, -0.000058f, -0.000158f, +0.000089f, -0.000000f, +0.000006f, -0.000059f, +0.000132f, -0.000033f, -0.000120f, - +0.000070f, +0.000083f, -0.000081f, -0.000106f, +0.000051f, +0.000099f, +0.000102f, +0.000067f, -0.000016f, +0.000013f, - +0.000165f, +0.000005f, +0.000026f, +0.000045f, -0.000042f, -0.000070f, +0.000028f, -0.000027f, -0.000004f, +0.000070f, - +0.000028f, +0.000087f, -0.000052f, -0.000062f, +0.000073f, -0.000045f, +0.000016f, +0.000022f, -0.000030f, +0.000011f, - -0.000026f, +0.000010f, +0.000043f, -0.000002f, -0.000047f, -0.000006f - }, - { - -0.004502f, +0.063905f, +0.001711f, +0.004737f, -0.001196f, +0.000004f, -0.000386f, +0.000967f, -0.000460f, -0.000739f, - +0.000879f, +0.000411f, -0.000291f, -0.000991f, +0.000757f, +0.000243f, -0.000082f, -0.000272f, -0.000049f, -0.000127f, - -0.000114f, +0.001013f, -0.000133f, -0.000353f, -0.000149f, -0.000009f, +0.000006f, +0.000404f, -0.000865f, -0.000000f, - +0.000292f, +0.000225f, +0.000121f, +0.000269f, -0.000084f, -0.000140f, +0.000018f, -0.000352f, -0.000047f, +0.000029f, - -0.000205f, +0.000659f, -0.000321f, -0.000214f, +0.000002f, +0.000237f, -0.000005f, -0.000200f, -0.000359f, +0.000013f, - +0.000078f, -0.000311f, +0.000077f, -0.000062f, +0.000315f, -0.000176f, +0.000105f, +0.000113f, +0.000149f, -0.000043f, - -0.000179f, -0.000019f, -0.000000f, +0.000119f, +0.000058f, -0.000037f, -0.000024f, +0.000078f, +0.000019f, -0.000022f, - -0.000013f, +0.000004f, +0.000029f, -0.000038f, +0.000034f, -0.000123f, +0.000039f, +0.000073f, -0.000010f, -0.000026f, - +0.000060f, -0.000001f, -0.000035f, -0.000105f, -0.000021f, +0.000019f, +0.000049f, -0.000008f, +0.000111f, -0.000075f, - +0.000012f, +0.000006f, +0.000026f, +0.000015f, -0.000055f, -0.000008f - }, - { - -0.000538f, -0.000009f, +0.003613f, -0.000177f, +0.000006f, -0.000087f, -0.000099f, -0.000054f, -0.000045f, -0.000011f, - -0.000134f, +0.000288f, +0.000159f, -0.000507f, +0.002195f, -0.000057f, -0.000239f, -0.000222f, -0.000149f, -0.000648f, - -0.000655f, +0.000084f, -0.004711f, -0.000217f, +0.000085f, +0.001127f, -0.000671f, +0.000174f, -0.000526f, +0.000413f, - -0.000463f, +0.000296f, +0.000400f, -0.000437f, +0.000489f, +0.000325f, -0.000099f, +0.000433f, +0.000217f, -0.000064f, - +0.000391f, +0.000072f, -0.000234f, -0.000031f, -0.000152f, +0.000021f, +0.000202f, +0.000140f, -0.000077f, +0.000086f, - -0.000147f, -0.000049f, -0.000075f, +0.000044f, -0.000008f, -0.000044f, -0.000018f, +0.000112f, -0.000008f, -0.000038f, - -0.000048f, -0.000055f, -0.000056f, -0.000079f, -0.000000f, -0.000025f, -0.000237f, +0.000111f, +0.000139f, +0.000042f, - -0.000163f, -0.000044f, +0.000093f, -0.000034f, +0.000030f, +0.000080f, -0.000037f, +0.000045f, +0.000068f, +0.000046f, - -0.000033f, +0.000015f, +0.000000f, -0.000008f, -0.000015f, +0.000006f, +0.000058f, -0.000058f, +0.000013f, +0.000014f, - -0.000056f, -0.000053f, -0.000041f, +0.000027f, -0.000026f, -0.000006f - }, - { - -0.006710f, -0.057630f, -0.003418f, -0.000626f, +0.000201f, +0.000234f, +0.000677f, -0.000216f, -0.000110f, +0.000023f, - +0.000017f, +0.000838f, -0.000810f, -0.000197f, +0.001420f, -0.000149f, +0.000409f, +0.000387f, -0.001037f, -0.000136f, - +0.000377f, -0.000373f, -0.000041f, +0.000746f, +0.000163f, -0.000516f, -0.000359f, +0.000181f, -0.000825f, -0.000515f, - +0.000164f, -0.000264f, -0.000078f, +0.000031f, -0.000394f, -0.000025f, -0.000183f, -0.000594f, +0.000331f, +0.000099f, - -0.000276f, -0.000007f, -0.000031f, -0.000262f, -0.000404f, +0.000220f, +0.000033f, +0.000129f, -0.000633f, +0.000061f, - +0.000089f, +0.000182f, -0.000080f, -0.000238f, -0.000057f, -0.000007f, +0.000196f, +0.000109f, +0.000060f, +0.000058f, - -0.000069f, -0.000117f, -0.000076f, +0.000119f, +0.000087f, -0.000075f, -0.000023f, -0.000028f, +0.000025f, -0.000034f, - -0.000045f, +0.000062f, -0.000076f, +0.000002f, +0.000153f, +0.000044f, -0.000129f, +0.000108f, +0.000054f, -0.000084f, - +0.000084f, -0.000000f, -0.000027f, +0.000000f, +0.000018f, +0.000009f, -0.000039f, +0.000031f, -0.000003f, +0.000045f, - +0.000027f, -0.000049f, +0.000007f, +0.000009f, +0.000033f, -0.000004f - }, - { - -0.000803f, +0.000558f, +0.001647f, +0.000217f, +0.000266f, -0.000051f, -0.000112f, -0.000332f, +0.000191f, +0.000039f, - +0.000145f, -0.000174f, +0.000156f, -0.001115f, -0.002734f, -0.002227f, +0.000600f, -0.002502f, -0.000681f, -0.000074f, - -0.000129f, -0.001144f, -0.001120f, +0.000979f, -0.000527f, +0.001038f, -0.000421f, +0.001987f, -0.000026f, +0.000054f, - +0.000055f, -0.000880f, +0.000579f, -0.000301f, -0.000036f, +0.000109f, +0.000078f, -0.000484f, +0.000287f, +0.000078f, - +0.000038f, +0.000341f, -0.000054f, +0.000108f, -0.000115f, +0.000135f, -0.000070f, -0.000027f, +0.000105f, +0.000114f, - -0.000023f, -0.000076f, -0.000174f, +0.000015f, +0.000212f, +0.000077f, -0.000129f, +0.000082f, +0.000099f, +0.000077f, - +0.000053f, -0.000072f, +0.000003f, +0.000042f, -0.000047f, -0.000058f, -0.000049f, -0.000068f, +0.000098f, +0.000042f, - -0.000003f, +0.000016f, -0.000093f, -0.000109f, +0.000097f, +0.000100f, +0.000041f, -0.000030f, +0.000051f, -0.000051f, - +0.000072f, +0.000010f, -0.000116f, -0.000050f, -0.000007f, -0.000018f, -0.000016f, +0.000093f, -0.000002f, -0.000010f, - -0.000005f, +0.000025f, -0.000008f, -0.000012f, -0.000004f, -0.000007f - }, - { - -0.001546f, +0.004894f, -0.000213f, -0.001062f, -0.000124f, +0.001690f, -0.000478f, -0.000401f, -0.000763f, -0.000398f, - +0.000307f, +0.000111f, +0.000645f, -0.000058f, -0.000103f, -0.000222f, -0.000572f, -0.000015f, +0.000478f, -0.000131f, - -0.000034f, -0.000460f, -0.000076f, -0.000510f, +0.000028f, +0.000073f, +0.000064f, -0.000429f, +0.000070f, -0.000111f, - +0.000231f, +0.000368f, -0.000543f, -0.000091f, +0.000831f, -0.000011f, -0.000237f, -0.000122f, +0.000213f, -0.000243f, - +0.000056f, +0.000229f, +0.000210f, -0.000083f, -0.000326f, +0.000221f, +0.000373f, +0.000024f, +0.000008f, -0.000009f, - +0.000198f, +0.000019f, +0.000105f, +0.000362f, -0.000065f, -0.000173f, +0.000111f, +0.000134f, -0.000073f, +0.000087f, - -0.000251f, -0.000029f, +0.000077f, -0.000020f, +0.000037f, -0.000067f, +0.000061f, +0.000023f, -0.000063f, +0.000049f, - +0.000029f, +0.000006f, -0.000037f, +0.000017f, +0.000003f, +0.000042f, -0.000015f, +0.000068f, -0.000094f, +0.000064f, - +0.000004f, -0.000075f, -0.000046f, +0.000045f, -0.000057f, +0.000018f, +0.000058f, +0.000018f, -0.000010f, +0.000068f, - -0.000004f, +0.000060f, -0.000046f, -0.000021f, -0.000031f, +0.000041f - }, - { - -0.000240f, -0.000149f, +0.001466f, +0.000433f, +0.000028f, +0.000358f, +0.000520f, -0.000814f, -0.000164f, -0.000554f, - +0.000238f, +0.000683f, -0.000536f, -0.000619f, -0.001049f, +0.000610f, +0.000118f, -0.000660f, +0.000004f, +0.001962f, - -0.001424f, -0.000655f, -0.000566f, +0.001054f, -0.000448f, -0.000072f, +0.000464f, -0.000368f, -0.000789f, -0.000067f, - -0.000921f, -0.000308f, -0.000149f, +0.000139f, +0.000003f, +0.000036f, -0.000118f, -0.000415f, +0.000034f, -0.000159f, - +0.000271f, -0.000261f, -0.000093f, +0.000112f, +0.000045f, -0.000180f, +0.000001f, -0.000152f, +0.000150f, +0.000051f, - +0.000147f, +0.000127f, +0.000054f, -0.000094f, -0.000098f, +0.000019f, -0.000066f, -0.000010f, +0.000022f, -0.000050f, - -0.000044f, +0.000197f, +0.000004f, -0.000126f, -0.000045f, +0.000097f, -0.000076f, +0.000023f, +0.000136f, +0.000005f, - +0.000028f, -0.000043f, -0.000043f, -0.000033f, +0.000041f, +0.000015f, +0.000015f, -0.000049f, -0.000125f, +0.000052f, - -0.000004f, -0.000051f, +0.000097f, +0.000035f, -0.000063f, -0.000020f, +0.000017f, -0.000039f, +0.000032f, -0.000057f, - -0.000018f, +0.000003f, -0.000031f, +0.000012f, -0.000005f, +0.000068f - }, - { - -0.002310f, -0.015032f, -0.000020f, -0.001573f, -0.000510f, +0.001423f, -0.000926f, +0.000108f, -0.000497f, +0.000248f, - +0.000763f, -0.001014f, +0.000439f, -0.000257f, -0.000406f, -0.000669f, -0.000019f, +0.000445f, -0.000001f, +0.000112f, - -0.000249f, +0.000264f, -0.000374f, +0.000303f, -0.000181f, +0.000307f, -0.000473f, +0.000608f, -0.000337f, +0.000485f, - -0.000274f, +0.000143f, -0.000027f, -0.000247f, +0.000555f, +0.000082f, -0.000240f, -0.000157f, -0.000347f, -0.000285f, - -0.000068f, -0.000130f, -0.000628f, +0.000089f, -0.000017f, +0.000187f, -0.000128f, -0.000115f, +0.000129f, -0.000073f, - +0.000127f, +0.000192f, -0.000042f, +0.000119f, -0.000077f, +0.000029f, +0.000010f, +0.000127f, +0.000076f, -0.000230f, - +0.000106f, +0.000062f, -0.000108f, -0.000086f, +0.000219f, +0.000010f, -0.000054f, -0.000002f, -0.000117f, -0.000079f, - +0.000147f, -0.000031f, -0.000004f, -0.000004f, +0.000034f, +0.000034f, -0.000010f, +0.000015f, -0.000016f, -0.000034f, - -0.000039f, -0.000013f, +0.000048f, +0.000025f, -0.000004f, +0.000048f, -0.000062f, -0.000001f, -0.000010f, -0.000030f, - +0.000029f, -0.000013f, +0.000061f, +0.000036f, -0.000035f, +0.000007f - }, - { - -0.000115f, +0.003090f, -0.000525f, -0.000551f, +0.000246f, -0.000124f, +0.000355f, -0.000553f, -0.000145f, -0.000073f, - -0.000636f, +0.000592f, -0.001247f, +0.001983f, +0.000374f, +0.003451f, +0.000045f, +0.000078f, +0.000120f, +0.000464f, - +0.000671f, -0.000511f, +0.003170f, +0.001162f, -0.001029f, +0.000339f, -0.000018f, +0.000948f, -0.000454f, -0.000926f, - -0.000269f, -0.000259f, -0.000158f, -0.000012f, -0.000243f, +0.000010f, -0.000458f, +0.000639f, -0.000177f, +0.000207f, - +0.000175f, +0.000123f, -0.000115f, +0.000156f, -0.000106f, -0.000019f, +0.000021f, +0.000129f, +0.000138f, -0.000119f, - -0.000109f, +0.000091f, +0.000308f, -0.000140f, +0.000019f, +0.000243f, +0.000257f, -0.000116f, +0.000039f, +0.000033f, - -0.000191f, -0.000201f, +0.000178f, +0.000027f, +0.000049f, -0.000126f, +0.000164f, +0.000039f, -0.000127f, +0.000093f, - +0.000020f, -0.000024f, -0.000039f, -0.000020f, -0.000059f, +0.000044f, +0.000095f, +0.000056f, -0.000004f, +0.000013f, - +0.000057f, -0.000053f, -0.000069f, -0.000037f, -0.000044f, -0.000020f, -0.000023f, +0.000069f, -0.000013f, +0.000015f, - -0.000016f, -0.000081f, +0.000055f, +0.000061f, -0.000088f, +0.000032f - }, - { - +0.000153f, +0.005064f, +0.001501f, -0.002054f, -0.000344f, -0.001738f, -0.000026f, -0.000168f, +0.000209f, +0.000787f, - -0.000627f, -0.000416f, +0.000459f, -0.000755f, -0.003039f, +0.001124f, -0.001007f, -0.000753f, +0.000219f, -0.000255f, - -0.000301f, -0.000272f, +0.000437f, -0.000444f, -0.000105f, +0.000077f, -0.000220f, -0.000295f, -0.000305f, +0.000588f, - -0.000337f, -0.000195f, +0.000100f, -0.000288f, -0.000174f, -0.000215f, +0.000042f, -0.000247f, -0.000059f, -0.000288f, - +0.000107f, -0.000069f, +0.000180f, +0.000089f, +0.000097f, +0.000058f, -0.000312f, -0.000302f, +0.000047f, -0.000114f, - +0.000303f, -0.000259f, +0.000080f, +0.000143f, -0.000015f, -0.000018f, -0.000129f, -0.000104f, +0.000222f, -0.000040f, - +0.000061f, +0.000061f, +0.000061f, -0.000005f, -0.000061f, -0.000044f, -0.000155f, -0.000004f, +0.000039f, +0.000057f, - -0.000044f, +0.000052f, -0.000012f, +0.000079f, -0.000012f, -0.000037f, -0.000049f, +0.000111f, +0.000024f, -0.000074f, - -0.000051f, +0.000028f, +0.000014f, -0.000084f, -0.000025f, +0.000009f, -0.000110f, +0.000029f, +0.000071f, -0.000004f, - +0.000004f, +0.000046f, -0.000038f, -0.000027f, -0.000035f, +0.000037f - }, - { - +0.000457f, +0.001162f, -0.001232f, -0.000273f, +0.000308f, +0.000086f, -0.000192f, +0.000127f, -0.000196f, +0.000556f, - -0.000158f, -0.000284f, -0.000754f, -0.004757f, +0.007784f, +0.005186f, -0.000878f, -0.000243f, +0.000128f, +0.000164f, - +0.001246f, +0.000258f, -0.000004f, +0.001029f, -0.000521f, -0.000676f, +0.000983f, -0.001180f, +0.000162f, -0.000410f, - -0.000482f, +0.000367f, +0.000233f, +0.000283f, +0.000076f, -0.000661f, +0.000359f, +0.000492f, -0.000464f, +0.000031f, - -0.000299f, -0.000017f, +0.000282f, +0.000565f, -0.000463f, +0.000299f, -0.000008f, +0.000027f, -0.000076f, +0.000069f, - -0.000008f, -0.000021f, +0.000179f, +0.000173f, -0.000024f, -0.000136f, -0.000058f, +0.000001f, -0.000113f, +0.000039f, - +0.000253f, -0.000028f, -0.000029f, -0.000007f, +0.000180f, +0.000035f, +0.000034f, -0.000271f, +0.000079f, +0.000076f, - +0.000008f, -0.000115f, +0.000108f, +0.000072f, +0.000032f, +0.000135f, -0.000093f, -0.000024f, +0.000047f, +0.000061f, - +0.000028f, -0.000021f, -0.000036f, -0.000106f, +0.000100f, -0.000014f, +0.000009f, +0.000032f, +0.000011f, -0.000052f, - +0.000015f, -0.000007f, -0.000044f, +0.000015f, +0.000045f, -0.000009f - } - }, - { - { - +0.003812f, -0.011435f, -0.006723f, +0.003316f, +0.001762f, -0.000076f, -0.000413f, +0.000099f, -0.000187f, -0.001088f, - +0.000277f, +0.000789f, -0.000052f, -0.000618f, -0.001977f, +0.000784f, +0.000647f, -0.000465f, +0.000660f, +0.001342f, - -0.000260f, -0.000108f, +0.000330f, -0.000098f, -0.000164f, +0.000021f, -0.000301f, -0.000982f, +0.000490f, -0.000014f, - -0.000198f, -0.000155f, -0.000246f, -0.000195f, +0.000257f, -0.000577f, -0.000079f, -0.000681f, -0.000079f, +0.000307f, - +0.000065f, -0.000158f, -0.000080f, -0.000248f, +0.000082f, -0.000208f, +0.000346f, +0.000074f, -0.000230f, -0.000214f, - +0.000146f, -0.000201f, +0.000036f, +0.000171f, -0.000146f, +0.000027f, -0.000067f, -0.000070f, -0.000071f, -0.000132f, - +0.000168f, +0.000076f, +0.000064f, -0.000082f, -0.000016f, -0.000032f, -0.000050f, +0.000129f, -0.000007f, +0.000003f, - -0.000029f, -0.000058f, -0.000027f, +0.000088f, +0.000068f, -0.000007f, -0.000099f, +0.000051f, -0.000102f, -0.000012f, - -0.000017f, +0.000006f, +0.000021f, +0.000018f, +0.000046f, -0.000120f, +0.000043f, -0.000025f, -0.000011f, +0.000004f, - +0.000038f, -0.000016f, +0.000027f, +0.000010f, -0.000008f, -0.000009f - }, - { - +0.000035f, +0.005571f, +0.001215f, -0.000424f, +0.000687f, +0.000190f, -0.000094f, -0.000160f, +0.000235f, +0.000175f, - +0.000057f, -0.000335f, -0.000884f, +0.001764f, -0.001796f, +0.002932f, +0.000736f, +0.000629f, +0.001122f, +0.000444f, - -0.000451f, -0.001167f, -0.001009f, -0.000448f, +0.000553f, +0.000908f, +0.000354f, +0.001122f, +0.000420f, +0.000032f, - -0.000525f, +0.000067f, +0.000425f, +0.000470f, +0.000355f, +0.000474f, -0.000338f, -0.000079f, +0.000224f, -0.000032f, - -0.000255f, -0.000026f, +0.000019f, +0.000132f, -0.000135f, -0.000041f, -0.000041f, +0.000063f, -0.000188f, +0.000099f, - -0.000011f, -0.000032f, -0.000178f, +0.000102f, +0.000275f, -0.000106f, -0.000123f, -0.000107f, +0.000004f, -0.000210f, - -0.000056f, +0.000044f, +0.000129f, +0.000013f, -0.000070f, +0.000009f, -0.000138f, +0.000066f, +0.000060f, -0.000009f, - -0.000032f, +0.000104f, +0.000031f, -0.000074f, -0.000031f, +0.000115f, +0.000034f, +0.000010f, -0.000112f, +0.000006f, - +0.000052f, +0.000011f, -0.000079f, +0.000022f, -0.000043f, -0.000019f, +0.000019f, +0.000029f, -0.000070f, +0.000070f, - +0.000002f, -0.000050f, -0.000050f, +0.000019f, +0.000039f, +0.000010f - }, - { - -0.000078f, +0.017696f, +0.002836f, -0.002354f, +0.000667f, +0.000521f, +0.000064f, -0.000157f, +0.000260f, -0.000268f, - +0.000138f, +0.000403f, -0.000085f, -0.000169f, +0.000089f, -0.001502f, +0.000188f, -0.000078f, +0.001915f, -0.000967f, - +0.000729f, -0.001460f, +0.000293f, +0.000208f, -0.000923f, -0.000492f, +0.000374f, +0.000405f, +0.000077f, +0.000135f, - +0.000713f, -0.000777f, +0.000188f, +0.000517f, +0.000781f, -0.000305f, -0.000162f, +0.000031f, +0.000219f, -0.000020f, - +0.000317f, -0.000294f, -0.000161f, -0.000006f, -0.000105f, +0.000178f, -0.000054f, -0.000083f, +0.000060f, +0.000196f, - -0.000238f, -0.000113f, -0.000082f, -0.000094f, -0.000085f, +0.000197f, -0.000026f, +0.000163f, +0.000122f, +0.000056f, - -0.000110f, +0.000046f, +0.000024f, +0.000169f, -0.000136f, -0.000062f, +0.000089f, +0.000038f, -0.000041f, +0.000082f, - +0.000035f, -0.000091f, -0.000045f, +0.000046f, +0.000063f, +0.000115f, -0.000075f, -0.000116f, +0.000120f, +0.000003f, - -0.000016f, -0.000050f, +0.000044f, +0.000032f, -0.000057f, +0.000006f, -0.000002f, +0.000062f, -0.000029f, +0.000010f, - +0.000038f, -0.000004f, -0.000027f, -0.000002f, -0.000002f, -0.000042f - }, - { - +0.008268f, +0.053215f, -0.001790f, -0.005033f, +0.000057f, -0.000000f, +0.000448f, -0.000168f, -0.000179f, +0.000695f, - -0.000115f, -0.000573f, -0.000138f, -0.000110f, -0.000619f, +0.000077f, -0.000361f, +0.000395f, +0.000544f, -0.000429f, - -0.000343f, -0.000076f, +0.000102f, +0.000293f, +0.000259f, +0.000551f, -0.000711f, -0.000264f, +0.000019f, +0.000165f, - +0.000356f, +0.000310f, +0.000045f, +0.000193f, +0.000038f, +0.000301f, -0.000105f, +0.000332f, -0.000486f, -0.000238f, - +0.000582f, -0.000226f, -0.000103f, +0.000255f, -0.000092f, -0.000239f, +0.000264f, +0.000143f, +0.000104f, +0.000020f, - -0.000203f, +0.000292f, -0.000086f, +0.000111f, +0.000058f, +0.000079f, +0.000137f, -0.000159f, +0.000099f, -0.000056f, - -0.000096f, +0.000042f, +0.000126f, -0.000172f, +0.000068f, +0.000018f, -0.000075f, +0.000149f, -0.000075f, -0.000005f, - +0.000050f, +0.000174f, -0.000065f, -0.000053f, +0.000017f, -0.000001f, +0.000020f, -0.000004f, -0.000044f, -0.000051f, - +0.000003f, -0.000015f, +0.000079f, -0.000030f, +0.000012f, +0.000032f, -0.000044f, +0.000042f, -0.000026f, -0.000054f, - -0.000016f, +0.000037f, +0.000005f, -0.000023f, +0.000025f, +0.000008f - }, - { - +0.000033f, -0.006470f, -0.000535f, -0.000453f, +0.000314f, +0.000016f, -0.000345f, +0.000022f, -0.000248f, -0.000174f, - +0.000174f, +0.000262f, +0.000018f, +0.001369f, +0.005692f, +0.001813f, -0.003129f, -0.003073f, +0.001471f, +0.000583f, - +0.000082f, -0.000515f, -0.000483f, +0.002117f, -0.001365f, -0.000961f, -0.001270f, -0.001465f, +0.001518f, +0.001491f, - -0.000641f, +0.000887f, -0.000401f, -0.000076f, -0.000349f, +0.000033f, -0.000106f, -0.000389f, -0.000073f, -0.000160f, - +0.000026f, -0.000120f, +0.000066f, -0.000045f, +0.000080f, -0.000264f, -0.000117f, -0.000176f, +0.000105f, -0.000291f, - -0.000047f, +0.000201f, -0.000278f, +0.000196f, -0.000051f, +0.000132f, -0.000069f, +0.000061f, +0.000137f, -0.000178f, - -0.000036f, +0.000077f, -0.000069f, -0.000117f, -0.000043f, +0.000073f, +0.000039f, +0.000107f, +0.000005f, -0.000044f, - +0.000226f, +0.000084f, +0.000002f, +0.000040f, -0.000006f, -0.000101f, +0.000001f, -0.000034f, -0.000070f, +0.000025f, - -0.000014f, +0.000091f, +0.000039f, -0.000099f, +0.000050f, -0.000020f, +0.000017f, +0.000042f, -0.000035f, -0.000004f, - -0.000033f, -0.000003f, +0.000048f, +0.000015f, -0.000061f, -0.000017f - }, - { - +0.014156f, +0.043773f, -0.001579f, +0.002916f, +0.000020f, +0.000113f, -0.000452f, +0.000597f, -0.000107f, -0.001152f, - +0.000688f, +0.000399f, +0.000255f, +0.000334f, -0.001270f, +0.000502f, -0.000053f, -0.000431f, +0.000089f, -0.000306f, - -0.000250f, +0.000341f, +0.000558f, -0.000134f, -0.000408f, +0.000330f, -0.000377f, +0.000584f, -0.000701f, -0.000187f, - +0.000292f, +0.000542f, +0.000008f, -0.000089f, -0.000097f, +0.000194f, -0.000187f, -0.000048f, -0.000356f, +0.000019f, - +0.000013f, +0.000224f, -0.000042f, -0.000256f, +0.000349f, -0.000088f, +0.000395f, -0.000285f, -0.000285f, -0.000172f, - +0.000279f, -0.000183f, -0.000193f, -0.000153f, +0.000281f, -0.000039f, -0.000117f, +0.000032f, +0.000076f, -0.000017f, - +0.000013f, -0.000129f, -0.000063f, +0.000098f, +0.000119f, -0.000014f, +0.000006f, +0.000048f, +0.000020f, -0.000006f, - +0.000002f, -0.000023f, +0.000059f, -0.000057f, +0.000052f, -0.000114f, -0.000014f, +0.000041f, +0.000027f, -0.000004f, - +0.000047f, +0.000088f, -0.000002f, -0.000084f, -0.000056f, -0.000021f, +0.000029f, -0.000041f, +0.000099f, -0.000029f, - -0.000005f, +0.000007f, +0.000006f, +0.000044f, -0.000038f, -0.000026f - }, - { - -0.000212f, -0.000617f, +0.002236f, +0.000422f, +0.000020f, -0.000066f, -0.000243f, -0.000136f, -0.000048f, +0.000231f, - -0.000128f, +0.000127f, +0.000148f, +0.000009f, +0.003645f, +0.001042f, -0.000397f, +0.000278f, -0.000021f, -0.001372f, - -0.000311f, -0.000561f, -0.005098f, +0.001133f, -0.000254f, +0.001895f, -0.001498f, -0.000408f, +0.000296f, +0.000526f, - -0.000709f, +0.000160f, +0.000544f, -0.000477f, +0.000149f, +0.000033f, +0.000252f, -0.000001f, +0.000311f, -0.000134f, - +0.000200f, +0.000094f, -0.000094f, -0.000052f, -0.000246f, -0.000148f, +0.000318f, -0.000038f, +0.000004f, +0.000083f, - -0.000013f, -0.000142f, -0.000105f, +0.000051f, +0.000078f, -0.000083f, -0.000146f, +0.000178f, -0.000064f, -0.000042f, - -0.000045f, +0.000023f, -0.000090f, -0.000049f, +0.000002f, -0.000065f, -0.000163f, -0.000039f, +0.000135f, +0.000087f, - -0.000048f, -0.000122f, +0.000025f, +0.000018f, -0.000087f, +0.000027f, -0.000040f, -0.000027f, +0.000043f, +0.000071f, - -0.000017f, -0.000004f, -0.000009f, +0.000008f, -0.000029f, -0.000012f, +0.000075f, -0.000018f, +0.000037f, +0.000062f, - -0.000001f, -0.000024f, -0.000047f, +0.000019f, +0.000005f, -0.000027f - }, - { - -0.000610f, -0.067001f, -0.001819f, -0.001149f, +0.000317f, -0.000064f, +0.001404f, -0.000310f, -0.000205f, +0.000006f, - -0.000010f, +0.000652f, -0.000120f, -0.000051f, +0.000799f, -0.000170f, +0.000077f, +0.001278f, -0.000838f, -0.000882f, - +0.000427f, +0.000120f, -0.000703f, +0.000440f, +0.000270f, -0.000386f, -0.000173f, -0.000299f, -0.000323f, -0.000273f, - -0.000223f, -0.000281f, -0.000303f, -0.000095f, -0.000292f, -0.000356f, -0.000033f, -0.000439f, +0.000047f, +0.000336f, - -0.000180f, -0.000045f, -0.000189f, -0.000001f, -0.000416f, +0.000476f, +0.000048f, +0.000154f, -0.000333f, -0.000064f, - -0.000104f, +0.000371f, +0.000197f, -0.000238f, -0.000071f, -0.000084f, +0.000003f, +0.000078f, +0.000095f, +0.000053f, - +0.000087f, -0.000087f, -0.000127f, +0.000055f, +0.000150f, -0.000010f, -0.000025f, -0.000084f, +0.000042f, -0.000032f, - -0.000052f, +0.000056f, -0.000069f, -0.000112f, +0.000092f, +0.000130f, -0.000173f, +0.000046f, +0.000052f, -0.000044f, - +0.000008f, +0.000053f, -0.000021f, +0.000019f, +0.000034f, +0.000001f, -0.000078f, +0.000011f, +0.000006f, +0.000019f, - +0.000018f, -0.000041f, -0.000004f, -0.000012f, +0.000022f, +0.000018f - }, - { - -0.000318f, -0.001686f, +0.001180f, +0.000132f, +0.000233f, +0.000046f, -0.000045f, -0.000422f, +0.000189f, +0.000135f, - +0.000271f, -0.000052f, -0.000075f, -0.002806f, -0.000383f, +0.001129f, -0.001605f, -0.000544f, -0.000857f, -0.000819f, - +0.000209f, -0.000834f, +0.000253f, -0.001403f, -0.000054f, +0.001473f, -0.000080f, +0.001111f, -0.000126f, +0.000065f, - +0.000150f, -0.000372f, +0.000388f, -0.000196f, -0.000433f, +0.000139f, -0.000013f, -0.000379f, +0.000383f, +0.000003f, - -0.000178f, +0.000229f, +0.000084f, -0.000301f, +0.000019f, -0.000145f, -0.000118f, +0.000202f, -0.000003f, +0.000091f, - +0.000110f, -0.000060f, -0.000181f, -0.000048f, +0.000262f, +0.000107f, -0.000181f, -0.000039f, -0.000059f, +0.000112f, - +0.000118f, +0.000152f, -0.000051f, +0.000044f, +0.000038f, -0.000032f, +0.000025f, -0.000058f, +0.000061f, +0.000098f, - +0.000079f, +0.000053f, -0.000052f, -0.000134f, +0.000039f, +0.000105f, +0.000070f, -0.000040f, +0.000043f, -0.000039f, - +0.000023f, +0.000086f, -0.000076f, -0.000053f, -0.000019f, -0.000048f, -0.000061f, +0.000030f, +0.000045f, -0.000008f, - -0.000035f, +0.000029f, +0.000002f, -0.000009f, -0.000006f, -0.000041f - }, - { - +0.001896f, -0.005000f, +0.000813f, +0.001174f, -0.000293f, -0.000207f, +0.000673f, -0.000269f, -0.000940f, -0.000627f, - +0.000230f, -0.000203f, +0.000508f, +0.000749f, -0.000694f, +0.000089f, -0.000724f, +0.000047f, +0.000238f, +0.000137f, - -0.000414f, -0.000409f, -0.000245f, -0.000037f, -0.000189f, -0.000037f, -0.000239f, -0.000075f, +0.000065f, -0.000221f, - -0.000114f, +0.000201f, -0.000531f, -0.000401f, +0.000668f, +0.000393f, +0.000035f, -0.000125f, +0.000170f, -0.000176f, - -0.000141f, +0.000021f, +0.000192f, +0.000185f, -0.000319f, +0.000062f, +0.000384f, -0.000017f, -0.000091f, -0.000021f, - +0.000099f, -0.000007f, -0.000083f, +0.000210f, +0.000124f, -0.000132f, +0.000119f, +0.000118f, -0.000071f, +0.000140f, - -0.000112f, -0.000108f, +0.000049f, -0.000066f, +0.000099f, -0.000063f, -0.000001f, +0.000021f, -0.000077f, +0.000038f, - +0.000050f, +0.000016f, -0.000107f, +0.000044f, -0.000007f, +0.000046f, -0.000073f, +0.000102f, -0.000062f, +0.000071f, - +0.000034f, -0.000040f, -0.000083f, +0.000014f, -0.000080f, -0.000070f, +0.000024f, +0.000014f, -0.000027f, +0.000035f, - -0.000021f, +0.000074f, -0.000005f, -0.000033f, -0.000043f, +0.000008f - }, - { - +0.000374f, +0.003632f, -0.001044f, -0.000232f, -0.000129f, -0.000028f, +0.000310f, -0.000643f, -0.000465f, -0.000386f, - -0.000223f, +0.000556f, -0.000293f, -0.000082f, -0.001506f, -0.000219f, +0.001129f, -0.000477f, +0.000025f, +0.001911f, - -0.000194f, -0.001118f, -0.000002f, +0.000153f, -0.000023f, -0.000642f, +0.000282f, -0.000311f, -0.000098f, +0.000005f, - -0.000747f, -0.000289f, -0.000533f, +0.000102f, -0.000215f, +0.000416f, -0.000096f, -0.000226f, +0.000075f, -0.000232f, - +0.000186f, -0.000055f, -0.000160f, -0.000053f, -0.000020f, -0.000225f, -0.000018f, -0.000031f, -0.000062f, +0.000006f, - +0.000029f, +0.000140f, +0.000175f, +0.000059f, -0.000086f, +0.000023f, -0.000055f, -0.000068f, +0.000021f, -0.000035f, - -0.000104f, +0.000117f, +0.000057f, -0.000102f, -0.000121f, +0.000074f, -0.000049f, -0.000067f, +0.000064f, +0.000028f, - +0.000040f, +0.000037f, -0.000032f, -0.000057f, +0.000031f, +0.000051f, +0.000074f, +0.000018f, -0.000108f, +0.000009f, - -0.000009f, -0.000050f, +0.000071f, +0.000084f, -0.000013f, -0.000039f, +0.000045f, -0.000008f, +0.000075f, -0.000033f, - -0.000029f, -0.000000f, -0.000020f, +0.000023f, -0.000030f, +0.000047f - }, - { - -0.000774f, -0.018949f, -0.000005f, -0.000322f, -0.000667f, +0.000288f, +0.000345f, -0.000241f, +0.000039f, -0.000334f, - +0.000794f, -0.000047f, +0.000285f, -0.000518f, -0.000289f, -0.000144f, +0.000028f, +0.000321f, -0.000226f, +0.000209f, - -0.000525f, +0.000056f, +0.000089f, +0.000033f, -0.000306f, +0.000345f, -0.000339f, +0.000348f, -0.000179f, +0.000467f, - +0.000174f, -0.000125f, +0.000008f, -0.000032f, +0.000321f, +0.000414f, +0.000242f, -0.000026f, -0.000323f, -0.000259f, - -0.000308f, -0.000165f, -0.000310f, -0.000106f, -0.000126f, -0.000030f, +0.000104f, -0.000020f, +0.000074f, -0.000029f, - -0.000124f, +0.000177f, -0.000108f, +0.000162f, +0.000013f, +0.000102f, +0.000022f, +0.000049f, +0.000225f, -0.000291f, - +0.000051f, +0.000060f, -0.000038f, -0.000116f, +0.000172f, +0.000020f, -0.000016f, +0.000022f, -0.000083f, -0.000125f, - +0.000109f, +0.000011f, -0.000039f, -0.000019f, -0.000001f, +0.000033f, +0.000003f, +0.000044f, +0.000027f, -0.000051f, - -0.000014f, -0.000077f, +0.000028f, +0.000003f, -0.000023f, +0.000073f, -0.000041f, -0.000005f, -0.000010f, -0.000072f, - -0.000002f, -0.000041f, +0.000030f, +0.000040f, -0.000019f, -0.000006f - }, - { - +0.000101f, +0.002328f, +0.000457f, -0.000437f, +0.000049f, -0.000136f, +0.000425f, -0.000097f, -0.000289f, -0.000691f, - -0.000397f, +0.000243f, +0.001545f, -0.001485f, +0.000028f, +0.003356f, +0.000838f, -0.000756f, +0.000382f, +0.000131f, - +0.003315f, -0.001180f, +0.001592f, +0.000679f, +0.000601f, -0.000545f, +0.000539f, +0.000318f, -0.000090f, -0.001058f, - -0.000338f, -0.000152f, -0.000147f, +0.000070f, -0.000279f, +0.000220f, -0.000367f, +0.000449f, -0.000219f, +0.000142f, - +0.000064f, +0.000016f, -0.000053f, +0.000167f, -0.000167f, +0.000021f, +0.000094f, -0.000106f, +0.000084f, -0.000087f, - -0.000082f, -0.000025f, +0.000190f, -0.000033f, -0.000043f, +0.000012f, +0.000280f, -0.000061f, +0.000008f, +0.000145f, - -0.000103f, -0.000250f, +0.000031f, +0.000088f, +0.000108f, -0.000106f, +0.000110f, +0.000128f, -0.000130f, -0.000009f, - +0.000061f, -0.000012f, -0.000020f, -0.000010f, -0.000091f, -0.000058f, +0.000065f, +0.000042f, +0.000035f, +0.000023f, - +0.000062f, +0.000010f, -0.000057f, +0.000013f, -0.000036f, +0.000007f, -0.000073f, +0.000065f, +0.000020f, +0.000002f, - +0.000006f, -0.000090f, -0.000016f, +0.000068f, -0.000066f, -0.000030f - }, - { - +0.000898f, +0.006315f, -0.000280f, -0.000004f, -0.000029f, -0.001378f, -0.001251f, +0.000039f, -0.000273f, +0.000526f, - -0.000679f, -0.000202f, +0.000347f, -0.001052f, -0.001724f, +0.000441f, +0.000028f, -0.000315f, -0.000066f, -0.000152f, - +0.000051f, -0.000617f, +0.000559f, -0.000603f, -0.000140f, -0.000333f, -0.000244f, -0.000562f, -0.000278f, +0.000317f, - -0.000211f, +0.000058f, +0.000198f, -0.000108f, -0.000005f, -0.000246f, +0.000037f, -0.000302f, -0.000091f, -0.000126f, - +0.000046f, -0.000210f, +0.000143f, +0.000238f, +0.000128f, +0.000143f, -0.000246f, -0.000239f, -0.000028f, -0.000073f, - +0.000217f, -0.000020f, -0.000157f, +0.000049f, +0.000202f, +0.000031f, -0.000057f, -0.000130f, +0.000163f, +0.000034f, - +0.000099f, -0.000004f, +0.000067f, +0.000103f, -0.000048f, +0.000006f, -0.000135f, -0.000022f, +0.000006f, +0.000086f, - -0.000060f, +0.000029f, +0.000003f, +0.000053f, +0.000009f, +0.000001f, -0.000065f, +0.000096f, +0.000101f, -0.000008f, - -0.000062f, +0.000024f, +0.000060f, -0.000046f, -0.000018f, +0.000061f, -0.000091f, -0.000050f, +0.000046f, +0.000026f, - -0.000004f, +0.000068f, -0.000012f, -0.000012f, -0.000027f, +0.000018f - }, - { - -0.000156f, +0.003133f, -0.001743f, -0.000375f, +0.000238f, -0.000076f, +0.000383f, +0.000160f, -0.000393f, +0.000207f, - +0.000089f, +0.000438f, -0.002125f, +0.004561f, -0.004495f, +0.004301f, +0.000800f, +0.000721f, -0.000090f, +0.000257f, - +0.001897f, +0.000066f, -0.000189f, +0.000254f, -0.000261f, -0.000322f, +0.000370f, -0.000112f, -0.000595f, +0.000067f, - -0.000847f, -0.000078f, +0.000641f, -0.000094f, +0.000216f, -0.000406f, -0.000122f, +0.000236f, +0.000273f, -0.000321f, - -0.000290f, -0.000333f, +0.000243f, +0.000389f, -0.000197f, +0.000009f, +0.000128f, +0.000017f, -0.000139f, +0.000033f, - +0.000047f, +0.000028f, +0.000014f, +0.000086f, +0.000108f, -0.000032f, -0.000177f, +0.000041f, -0.000220f, -0.000177f, - +0.000103f, +0.000124f, -0.000162f, -0.000033f, +0.000065f, +0.000076f, +0.000176f, -0.000285f, +0.000016f, +0.000019f, - +0.000058f, -0.000136f, -0.000015f, +0.000053f, -0.000041f, +0.000151f, -0.000050f, -0.000067f, +0.000006f, +0.000033f, - +0.000111f, +0.000001f, +0.000052f, -0.000098f, +0.000028f, -0.000000f, +0.000007f, +0.000041f, +0.000019f, -0.000025f, - +0.000001f, +0.000031f, -0.000040f, -0.000008f, +0.000018f, +0.000013f - } - }, - { - { - -0.002133f, +0.013127f, +0.010778f, +0.000181f, -0.001480f, +0.000319f, +0.000430f, +0.000187f, +0.000358f, -0.000332f, - -0.000688f, -0.000216f, +0.000261f, +0.000817f, +0.000244f, -0.000098f, +0.000729f, -0.000508f, +0.000605f, -0.000668f, - +0.000037f, +0.000297f, +0.000597f, +0.000011f, -0.000189f, -0.000298f, +0.000257f, -0.001031f, +0.000546f, -0.000126f, - -0.000143f, +0.000234f, -0.000017f, +0.000246f, +0.000067f, +0.000153f, +0.000238f, -0.000390f, -0.000257f, +0.000131f, - +0.000162f, +0.000043f, -0.000216f, -0.000214f, +0.000410f, -0.000506f, -0.000083f, +0.000107f, -0.000149f, -0.000142f, - -0.000005f, -0.000204f, -0.000057f, +0.000023f, -0.000038f, +0.000029f, -0.000089f, +0.000035f, +0.000150f, +0.000051f, - -0.000094f, -0.000076f, -0.000008f, +0.000065f, -0.000015f, +0.000058f, +0.000055f, -0.000078f, +0.000000f, -0.000017f, - +0.000048f, +0.000053f, +0.000009f, -0.000035f, -0.000057f, +0.000121f, +0.000018f, -0.000064f, +0.000098f, -0.000043f, - -0.000016f, -0.000093f, -0.000027f, +0.000003f, -0.000025f, +0.000071f, -0.000068f, +0.000039f, -0.000015f, -0.000026f, - -0.000022f, +0.000014f, -0.000025f, +0.000030f, +0.000018f, +0.000004f - }, - { - +0.000099f, +0.002116f, -0.001287f, +0.000607f, -0.000746f, +0.000050f, +0.000091f, -0.000060f, -0.000548f, +0.000532f, - -0.000009f, -0.000122f, -0.001086f, +0.000734f, -0.004831f, +0.001120f, +0.001167f, -0.000782f, -0.000707f, +0.001241f, - -0.000423f, -0.000801f, +0.000509f, +0.000254f, -0.000171f, -0.000683f, -0.000720f, +0.000094f, +0.000285f, +0.000411f, - +0.000042f, +0.000772f, -0.000095f, -0.000371f, +0.000505f, -0.000006f, -0.000117f, -0.000264f, -0.000074f, -0.000058f, - +0.000075f, -0.000002f, -0.000268f, -0.000133f, +0.000180f, -0.000238f, -0.000210f, -0.000109f, +0.000181f, +0.000137f, - -0.000157f, +0.000375f, -0.000056f, -0.000082f, -0.000341f, +0.000227f, +0.000111f, -0.000102f, -0.000003f, +0.000078f, - -0.000052f, -0.000066f, +0.000038f, +0.000085f, +0.000053f, -0.000007f, +0.000094f, -0.000126f, -0.000101f, +0.000021f, - +0.000029f, -0.000087f, +0.000086f, +0.000095f, -0.000016f, -0.000107f, +0.000033f, +0.000112f, +0.000033f, -0.000023f, - -0.000118f, +0.000083f, +0.000061f, -0.000001f, +0.000021f, -0.000021f, -0.000053f, +0.000005f, +0.000015f, -0.000097f, - +0.000027f, +0.000048f, +0.000014f, -0.000016f, -0.000045f, -0.000007f - }, - { - +0.000066f, +0.006779f, -0.002095f, +0.000881f, -0.000909f, +0.000015f, -0.000089f, -0.000463f, +0.000089f, +0.000427f, - +0.000282f, +0.000044f, -0.000202f, +0.001103f, +0.000377f, -0.000427f, +0.000253f, -0.000251f, +0.000123f, -0.000929f, - +0.000477f, -0.000949f, -0.000013f, +0.000421f, -0.000200f, +0.000099f, -0.000082f, -0.000317f, +0.000221f, -0.000306f, - +0.000211f, +0.000231f, +0.000189f, +0.000029f, +0.000179f, +0.000499f, -0.000067f, -0.000109f, +0.000100f, -0.000154f, - +0.000096f, -0.000036f, +0.000394f, -0.000308f, -0.000050f, -0.000186f, -0.000044f, -0.000107f, -0.000123f, -0.000057f, - +0.000155f, +0.000110f, -0.000222f, +0.000020f, -0.000168f, -0.000122f, -0.000031f, -0.000072f, +0.000022f, +0.000072f, - +0.000060f, -0.000067f, -0.000030f, -0.000126f, +0.000080f, -0.000096f, -0.000036f, +0.000012f, +0.000096f, -0.000062f, - -0.000007f, +0.000121f, -0.000046f, -0.000049f, +0.000004f, +0.000008f, +0.000108f, +0.000017f, -0.000045f, +0.000002f, - +0.000043f, -0.000000f, -0.000069f, +0.000053f, +0.000071f, -0.000023f, -0.000037f, -0.000041f, +0.000032f, -0.000012f, - -0.000026f, +0.000012f, +0.000038f, -0.000020f, +0.000027f, +0.000045f - }, - { - -0.013188f, +0.027633f, +0.002104f, -0.004124f, +0.000554f, -0.000147f, -0.000290f, -0.000079f, -0.000482f, -0.000164f, - +0.000212f, +0.000674f, +0.000228f, -0.000362f, -0.001468f, +0.000677f, +0.000163f, +0.000016f, +0.000421f, +0.000039f, - -0.000029f, +0.000593f, -0.000164f, -0.000221f, +0.000245f, +0.000199f, +0.000344f, -0.000255f, +0.000460f, -0.000198f, - -0.000358f, +0.000167f, -0.000138f, -0.000148f, +0.000201f, -0.000476f, -0.000190f, -0.000217f, -0.000056f, -0.000003f, - +0.000064f, -0.000193f, -0.000146f, +0.000020f, +0.000215f, +0.000073f, -0.000329f, -0.000158f, -0.000204f, +0.000221f, - -0.000198f, +0.000071f, +0.000113f, -0.000069f, +0.000131f, +0.000012f, +0.000035f, -0.000178f, -0.000088f, +0.000148f, - +0.000154f, -0.000034f, -0.000134f, -0.000025f, -0.000053f, -0.000030f, +0.000059f, -0.000074f, +0.000088f, -0.000042f, - -0.000112f, -0.000030f, +0.000155f, +0.000027f, -0.000017f, +0.000032f, -0.000019f, -0.000014f, -0.000019f, +0.000030f, - -0.000006f, -0.000046f, -0.000049f, +0.000001f, -0.000013f, +0.000017f, +0.000038f, -0.000069f, +0.000068f, +0.000032f, - -0.000022f, -0.000036f, +0.000018f, +0.000013f, -0.000018f, -0.000031f - }, - { - -0.000279f, -0.006495f, +0.001004f, +0.000501f, -0.000359f, +0.000107f, +0.000075f, +0.000075f, -0.000010f, -0.000274f, - +0.000000f, -0.000128f, +0.000330f, -0.001575f, +0.000299f, +0.001192f, -0.000448f, +0.002894f, -0.005711f, -0.000593f, - -0.000192f, +0.000460f, -0.000934f, +0.001866f, -0.000325f, -0.000466f, +0.002064f, -0.000369f, +0.000826f, +0.000995f, - -0.000824f, +0.000563f, +0.000770f, +0.000072f, +0.000001f, -0.000243f, -0.000191f, -0.000165f, -0.000034f, +0.000027f, - +0.000136f, +0.000361f, +0.000000f, -0.000311f, +0.000301f, -0.000046f, -0.000058f, +0.000188f, +0.000200f, +0.000159f, - -0.000230f, +0.000130f, +0.000205f, +0.000049f, -0.000171f, +0.000138f, +0.000090f, -0.000093f, +0.000090f, +0.000001f, - -0.000108f, -0.000068f, +0.000007f, -0.000016f, -0.000000f, -0.000028f, -0.000070f, -0.000046f, +0.000022f, +0.000017f, - -0.000074f, +0.000041f, +0.000029f, -0.000020f, +0.000025f, +0.000078f, -0.000019f, +0.000036f, +0.000015f, -0.000069f, - -0.000037f, -0.000098f, +0.000039f, +0.000055f, -0.000089f, +0.000047f, -0.000020f, -0.000008f, +0.000030f, -0.000009f, - +0.000003f, -0.000009f, -0.000051f, -0.000003f, +0.000054f, +0.000012f - }, - { - -0.018207f, +0.002215f, +0.002852f, +0.002306f, +0.000009f, +0.000039f, +0.000070f, -0.001291f, +0.000522f, +0.000821f, - -0.000817f, -0.000649f, +0.000117f, +0.000698f, -0.001364f, -0.000041f, +0.000184f, +0.000235f, -0.000191f, +0.000229f, - +0.000411f, -0.000544f, +0.000177f, +0.000305f, -0.000016f, +0.000037f, -0.000377f, +0.000118f, -0.000146f, +0.000200f, - -0.000063f, +0.000123f, +0.000021f, -0.000068f, -0.000315f, +0.000526f, -0.000064f, -0.000117f, -0.000169f, +0.000301f, - +0.000278f, -0.000348f, +0.000051f, +0.000087f, +0.000621f, -0.000315f, +0.000297f, -0.000023f, +0.000042f, -0.000145f, - -0.000130f, +0.000252f, +0.000074f, -0.000031f, -0.000213f, +0.000115f, -0.000111f, -0.000155f, -0.000133f, +0.000016f, - +0.000172f, +0.000040f, -0.000067f, -0.000095f, -0.000114f, +0.000007f, +0.000091f, -0.000087f, +0.000028f, +0.000050f, - +0.000035f, -0.000016f, -0.000078f, +0.000018f, -0.000007f, +0.000034f, -0.000045f, -0.000076f, +0.000011f, +0.000022f, - -0.000075f, -0.000009f, +0.000033f, +0.000113f, +0.000010f, +0.000001f, -0.000045f, +0.000032f, -0.000088f, +0.000051f, - -0.000003f, -0.000013f, -0.000015f, -0.000023f, +0.000039f, -0.000001f - }, - { - +0.000485f, +0.001339f, -0.001365f, +0.000007f, +0.000016f, +0.000134f, +0.000019f, -0.000011f, -0.000421f, +0.000190f, - +0.000085f, +0.000124f, -0.000114f, -0.000568f, +0.003899f, +0.002448f, +0.001792f, +0.000002f, +0.000138f, -0.000991f, - +0.000302f, +0.000400f, -0.003159f, +0.001440f, -0.000129f, +0.000643f, -0.001115f, -0.001162f, +0.000505f, +0.000118f, - -0.000363f, +0.000072f, -0.000232f, +0.000371f, -0.000101f, -0.000503f, +0.000372f, -0.000101f, +0.000209f, +0.000302f, - -0.000215f, -0.000255f, +0.000289f, -0.000175f, +0.000277f, +0.000018f, -0.000102f, -0.000187f, +0.000079f, -0.000063f, - +0.000227f, +0.000002f, -0.000045f, -0.000052f, +0.000058f, -0.000009f, -0.000028f, -0.000128f, -0.000030f, -0.000028f, - -0.000118f, -0.000036f, +0.000076f, +0.000013f, +0.000005f, +0.000016f, +0.000091f, -0.000074f, -0.000112f, -0.000098f, - +0.000191f, +0.000056f, -0.000087f, +0.000027f, -0.000011f, -0.000051f, +0.000017f, -0.000069f, -0.000060f, -0.000040f, - +0.000036f, -0.000010f, +0.000017f, +0.000006f, +0.000003f, -0.000025f, -0.000043f, +0.000033f, +0.000002f, -0.000010f, - +0.000041f, +0.000039f, +0.000045f, -0.000035f, +0.000033f, +0.000009f - }, - { - +0.008606f, -0.061039f, -0.001233f, -0.000386f, +0.000399f, -0.000249f, +0.000433f, +0.000265f, -0.000094f, +0.000335f, - -0.000025f, -0.000717f, +0.000784f, -0.000057f, -0.000719f, +0.000057f, -0.000434f, -0.000174f, +0.000873f, +0.000460f, - -0.000329f, +0.000395f, -0.000636f, -0.000591f, -0.000223f, +0.000245f, -0.000121f, -0.000083f, -0.000202f, -0.000040f, - -0.000397f, -0.000423f, +0.000055f, +0.000106f, +0.000296f, -0.000019f, -0.000495f, -0.000221f, +0.000014f, +0.000102f, - +0.000070f, +0.000239f, +0.000039f, -0.000219f, +0.000242f, +0.000305f, -0.000050f, +0.000152f, +0.000369f, +0.000067f, - -0.000204f, -0.000195f, +0.000049f, +0.000299f, +0.000064f, +0.000009f, -0.000169f, -0.000005f, -0.000065f, -0.000074f, - +0.000117f, +0.000157f, +0.000082f, -0.000104f, -0.000042f, +0.000034f, +0.000007f, -0.000005f, -0.000023f, +0.000056f, - +0.000038f, -0.000021f, +0.000046f, +0.000006f, -0.000146f, -0.000003f, +0.000132f, -0.000102f, -0.000045f, +0.000043f, - -0.000085f, -0.000008f, +0.000002f, +0.000023f, +0.000024f, +0.000027f, +0.000035f, -0.000035f, +0.000016f, -0.000026f, - -0.000030f, +0.000018f, +0.000017f, -0.000020f, -0.000028f, +0.000003f - }, - { - +0.000740f, +0.000946f, -0.003205f, +0.000381f, -0.000374f, -0.000007f, +0.000262f, +0.000475f, +0.000151f, -0.000069f, - +0.000143f, -0.000057f, +0.000511f, +0.002314f, +0.003497f, +0.004022f, -0.000682f, +0.000103f, +0.000259f, -0.000818f, - -0.001135f, +0.000053f, +0.000848f, -0.000158f, -0.001057f, -0.000245f, +0.001048f, -0.000619f, -0.000371f, +0.000123f, - -0.000336f, +0.000457f, -0.000194f, +0.000191f, +0.000131f, -0.000521f, -0.000110f, +0.000129f, -0.000263f, +0.000202f, - +0.000005f, -0.000274f, +0.000440f, -0.000038f, +0.000110f, -0.000357f, -0.000028f, +0.000143f, -0.000088f, -0.000185f, - +0.000112f, +0.000058f, +0.000167f, -0.000126f, -0.000057f, -0.000030f, +0.000198f, +0.000019f, -0.000300f, -0.000071f, - -0.000062f, +0.000079f, +0.000003f, -0.000119f, +0.000068f, +0.000109f, +0.000145f, +0.000069f, -0.000037f, -0.000027f, - -0.000001f, +0.000028f, +0.000077f, +0.000093f, -0.000055f, -0.000029f, +0.000007f, +0.000011f, -0.000056f, +0.000018f, - -0.000088f, -0.000012f, +0.000095f, +0.000045f, +0.000038f, +0.000021f, -0.000001f, -0.000095f, -0.000014f, +0.000004f, - +0.000003f, -0.000031f, +0.000012f, +0.000025f, +0.000012f, +0.000024f - }, - { - -0.001307f, -0.015003f, -0.001682f, +0.001021f, +0.000424f, -0.001813f, +0.000593f, +0.000018f, +0.000360f, +0.000353f, - +0.000045f, -0.000190f, -0.000557f, -0.000373f, -0.000077f, -0.001087f, -0.000197f, +0.000348f, -0.000478f, +0.000033f, - +0.000512f, -0.000397f, +0.000050f, +0.000342f, +0.000238f, -0.000346f, -0.000366f, +0.000514f, -0.000186f, -0.000590f, - -0.000244f, -0.000273f, -0.000154f, -0.000066f, -0.000277f, -0.000186f, +0.000327f, +0.000121f, -0.000322f, +0.000341f, - -0.000220f, -0.000128f, -0.000162f, +0.000190f, +0.000395f, -0.000159f, -0.000284f, +0.000012f, +0.000256f, +0.000055f, - -0.000323f, +0.000102f, -0.000169f, -0.000447f, +0.000218f, +0.000143f, -0.000033f, -0.000074f, +0.000084f, -0.000127f, - +0.000239f, +0.000002f, +0.000003f, -0.000083f, -0.000019f, +0.000093f, -0.000049f, +0.000002f, +0.000069f, -0.000034f, - -0.000036f, -0.000023f, +0.000026f, -0.000035f, +0.000036f, -0.000037f, +0.000003f, -0.000057f, +0.000060f, -0.000042f, - +0.000012f, +0.000044f, +0.000030f, -0.000042f, +0.000054f, -0.000025f, -0.000061f, -0.000016f, +0.000009f, -0.000064f, - +0.000005f, -0.000045f, +0.000045f, +0.000025f, +0.000036f, -0.000037f - }, - { - -0.000323f, +0.007863f, +0.002719f, -0.001308f, +0.000225f, -0.000365f, -0.000381f, -0.000254f, -0.000060f, +0.000220f, - -0.000116f, -0.000649f, +0.000627f, +0.000101f, -0.000988f, -0.000815f, +0.000953f, +0.001399f, +0.001087f, -0.001875f, - +0.000097f, +0.000747f, +0.000634f, -0.000282f, -0.000328f, -0.000098f, -0.000642f, -0.000504f, -0.000421f, +0.000020f, - +0.000280f, +0.000142f, -0.000587f, -0.000358f, +0.000011f, -0.000445f, -0.000243f, +0.000029f, +0.000238f, +0.000120f, - -0.000015f, +0.000224f, -0.000019f, -0.000211f, -0.000081f, +0.000028f, -0.000004f, +0.000217f, +0.000046f, +0.000055f, - -0.000104f, -0.000218f, -0.000037f, +0.000083f, +0.000108f, +0.000033f, +0.000100f, +0.000044f, -0.000080f, +0.000045f, - +0.000078f, -0.000198f, +0.000006f, +0.000059f, +0.000096f, -0.000134f, +0.000088f, -0.000014f, -0.000158f, +0.000001f, - -0.000046f, +0.000047f, +0.000049f, +0.000028f, -0.000062f, -0.000038f, -0.000018f, +0.000018f, +0.000131f, -0.000056f, - -0.000002f, +0.000063f, -0.000076f, -0.000035f, +0.000045f, +0.000014f, -0.000022f, +0.000035f, -0.000036f, +0.000062f, - +0.000012f, -0.000014f, +0.000024f, -0.000003f, +0.000002f, -0.000068f - }, - { - +0.004795f, -0.014132f, -0.001647f, +0.000048f, +0.000714f, -0.002166f, +0.000841f, +0.000403f, +0.000128f, -0.000360f, - -0.000670f, +0.000888f, +0.000296f, -0.000203f, +0.000440f, +0.000765f, +0.000860f, -0.000198f, -0.000011f, -0.000618f, - +0.000414f, +0.000133f, +0.000172f, -0.000216f, +0.000243f, +0.000017f, +0.000180f, -0.000650f, +0.000123f, -0.000318f, - +0.000237f, -0.000211f, -0.000310f, +0.000702f, -0.000230f, -0.000212f, +0.000026f, +0.000310f, +0.000479f, -0.000037f, - +0.000053f, -0.000014f, +0.000354f, -0.000168f, +0.000019f, -0.000241f, +0.000146f, +0.000083f, -0.000115f, -0.000141f, - -0.000001f, -0.000078f, +0.000076f, -0.000106f, +0.000079f, +0.000067f, -0.000007f, -0.000032f, +0.000032f, +0.000039f, - -0.000025f, -0.000072f, +0.000095f, +0.000061f, -0.000135f, -0.000036f, +0.000053f, -0.000019f, +0.000070f, +0.000037f, - -0.000128f, +0.000053f, -0.000002f, -0.000027f, -0.000011f, -0.000035f, -0.000012f, +0.000020f, +0.000019f, +0.000008f, - +0.000027f, -0.000005f, -0.000068f, -0.000031f, +0.000009f, -0.000096f, +0.000058f, -0.000004f, -0.000009f, +0.000027f, - -0.000052f, +0.000004f, -0.000057f, -0.000043f, +0.000021f, +0.000006f - }, - { - -0.000019f, +0.002071f, +0.000743f, +0.000835f, -0.000165f, +0.000219f, -0.000524f, +0.000390f, +0.000116f, -0.000290f, - +0.000624f, -0.000195f, -0.000316f, -0.001288f, +0.002646f, -0.000356f, +0.001940f, -0.000687f, -0.000640f, +0.000083f, - +0.000248f, +0.001567f, +0.000608f, -0.000859f, +0.001267f, -0.000313f, -0.000248f, +0.000629f, +0.000170f, +0.000738f, - -0.000502f, +0.000503f, +0.000072f, +0.000295f, -0.000136f, -0.000143f, +0.000445f, -0.000072f, +0.000118f, -0.000247f, - -0.000242f, -0.000217f, -0.000004f, +0.000026f, +0.000162f, +0.000027f, +0.000103f, -0.000372f, -0.000074f, +0.000155f, - +0.000060f, +0.000001f, -0.000165f, +0.000031f, +0.000080f, -0.000104f, -0.000294f, +0.000054f, -0.000034f, -0.000011f, - +0.000107f, +0.000215f, -0.000150f, -0.000099f, -0.000091f, +0.000144f, -0.000050f, -0.000002f, +0.000057f, -0.000048f, - +0.000015f, -0.000047f, +0.000028f, +0.000023f, +0.000098f, -0.000033f, -0.000057f, -0.000084f, -0.000006f, +0.000010f, - -0.000051f, +0.000056f, +0.000022f, +0.000033f, +0.000037f, -0.000003f, +0.000040f, -0.000065f, +0.000009f, -0.000009f, - +0.000021f, +0.000080f, -0.000053f, -0.000079f, +0.000080f, -0.000021f - }, - { - -0.002299f, +0.003264f, +0.001841f, +0.001737f, -0.000193f, +0.000035f, -0.000453f, +0.000415f, +0.000377f, -0.000638f, - +0.000434f, +0.000256f, -0.000797f, +0.000756f, +0.000511f, -0.000849f, +0.000302f, -0.000387f, +0.000133f, -0.000217f, - +0.000314f, +0.000204f, +0.000079f, +0.000395f, +0.000048f, +0.000238f, -0.000040f, -0.000596f, -0.000310f, -0.000556f, - +0.000467f, -0.000145f, -0.000068f, +0.000349f, +0.000668f, -0.000260f, -0.000049f, +0.000052f, +0.000082f, +0.000480f, - -0.000275f, -0.000288f, -0.000424f, -0.000358f, -0.000185f, +0.000123f, +0.000156f, +0.000209f, -0.000109f, +0.000173f, - -0.000315f, +0.000215f, -0.000026f, -0.000153f, +0.000074f, -0.000007f, +0.000170f, +0.000057f, -0.000133f, +0.000044f, - -0.000013f, -0.000003f, -0.000010f, -0.000072f, +0.000042f, +0.000006f, +0.000160f, -0.000046f, +0.000004f, -0.000021f, - +0.000096f, -0.000039f, +0.000041f, -0.000088f, -0.000004f, +0.000043f, +0.000099f, -0.000073f, -0.000043f, +0.000052f, - +0.000030f, -0.000035f, +0.000009f, +0.000073f, +0.000013f, +0.000000f, +0.000110f, -0.000045f, -0.000080f, +0.000027f, - +0.000015f, -0.000043f, +0.000039f, +0.000011f, +0.000037f, -0.000040f - }, - { - +0.000032f, +0.003841f, +0.000562f, +0.000214f, +0.000094f, -0.000056f, -0.000086f, +0.000003f, -0.000345f, +0.000319f, - +0.000350f, -0.000070f, +0.000436f, +0.005640f, -0.015380f, -0.000115f, +0.001282f, +0.001322f, -0.000898f, -0.000287f, - +0.001610f, +0.000118f, -0.000874f, +0.000845f, +0.001152f, +0.000500f, -0.000004f, +0.000547f, -0.000243f, +0.000943f, - -0.000343f, -0.000701f, +0.000361f, -0.000573f, -0.000510f, +0.000636f, -0.000140f, -0.000937f, +0.000681f, -0.000045f, - +0.000180f, -0.000169f, -0.000258f, -0.000410f, +0.000393f, -0.000177f, +0.000084f, +0.000323f, -0.000048f, -0.000026f, - +0.000087f, +0.000044f, -0.000035f, -0.000234f, +0.000011f, +0.000208f, +0.000011f, -0.000069f, +0.000069f, -0.000053f, - -0.000275f, +0.000026f, -0.000026f, -0.000051f, -0.000018f, -0.000086f, -0.000019f, +0.000287f, -0.000100f, -0.000043f, - -0.000019f, +0.000079f, -0.000073f, -0.000038f, -0.000000f, -0.000129f, +0.000118f, +0.000053f, -0.000026f, -0.000081f, - -0.000052f, +0.000005f, +0.000050f, +0.000124f, -0.000090f, +0.000021f, +0.000020f, -0.000043f, -0.000016f, +0.000055f, - -0.000014f, +0.000006f, +0.000045f, +0.000002f, -0.000051f, +0.000006f - } - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 leftBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX] /* Q29 */= { { @@ -49101,9113 +28946,7 @@ const Word32 leftBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAP }, }, }; -#else -const float leftBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]= -{ - { - { - +0.009895f, -0.028551f, +0.030329f, +0.054707f, -0.029041f, +0.023876f, +0.003374f, +0.000340f, -0.018431f, +0.004622f, - +0.000915f, -0.022215f, +0.010646f, +0.009840f, +0.011695f, -0.023007f, +0.004257f, -0.008676f, +0.020758f, -0.006481f, - +0.009139f, -0.006925f, +0.006698f, -0.010971f, +0.013021f, -0.005878f, -0.008686f, -0.002255f, +0.011478f, -0.005832f, - +0.008100f, -0.004175f, +0.004193f, -0.001489f, -0.002079f, +0.017929f, -0.002225f, -0.008913f, -0.005051f, +0.001066f, - +0.012284f, +0.011686f, -0.013601f, -0.004982f, +0.002401f, +0.003552f, -0.000908f, +0.002811f, -0.001353f, +0.001435f, - +0.000421f, -0.000537f, -0.004646f, +0.007740f, -0.004177f, -0.005006f, +0.000972f, +0.002837f, +0.000522f, +0.002567f, - -0.000992f, +0.001383f, -0.000484f, +0.001111f, +0.000479f, -0.000733f, +0.002578f, -0.002489f, -0.004365f, -0.000694f, - -0.001548f, +0.001112f, +0.000010f, +0.002147f, -0.006195f, +0.006187f, +0.000552f, -0.000054f, +0.002942f, -0.001335f, - -0.002581f, +0.001535f, -0.000257f, +0.001656f, -0.002117f, +0.000354f, -0.000052f, +0.002477f, -0.004390f, +0.000311f, - +0.001018f, +0.000572f, +0.000132f, +0.000278f, -0.001961f, +0.001063f - }, - { - -0.003499f, +0.033039f, -0.032264f, +0.037222f, -0.026681f, +0.013974f, +0.005584f, +0.006533f, -0.016046f, -0.003463f, - +0.002486f, -0.012055f, +0.001851f, +0.002929f, +0.015220f, -0.025973f, +0.009091f, -0.006825f, +0.019001f, -0.008219f, - +0.001361f, -0.005047f, +0.016288f, -0.010814f, +0.002972f, -0.009380f, +0.006079f, -0.004400f, +0.001007f, -0.006148f, - +0.011764f, +0.003931f, -0.011519f, -0.007802f, +0.010625f, -0.002170f, +0.007699f, -0.011194f, -0.003152f, -0.006306f, - +0.011015f, +0.010379f, -0.010885f, -0.003926f, +0.009017f, -0.005451f, -0.003277f, +0.004240f, -0.001089f, +0.007307f, - -0.005148f, -0.002343f, -0.000078f, +0.002508f, -0.004943f, +0.005729f, -0.003857f, +0.004031f, -0.003995f, +0.002816f, - +0.002609f, +0.001645f, -0.004319f, -0.000801f, +0.005385f, -0.006243f, +0.008428f, -0.005100f, +0.002238f, -0.004829f, - +0.002762f, -0.003732f, +0.000921f, -0.000077f, +0.000160f, -0.001817f, +0.000679f, +0.003101f, +0.003459f, -0.000860f, - +0.000429f, -0.000737f, +0.001517f, +0.000125f, -0.002581f, -0.001748f, +0.002728f, +0.000624f, -0.001503f, -0.003351f, - +0.003151f, -0.000136f, +0.000126f, -0.001160f, +0.001478f, +0.001321f - }, - { - +0.002816f, +0.002820f, -0.008232f, +0.051715f, -0.026744f, +0.025687f, +0.006058f, -0.017771f, +0.001479f, +0.010379f, - -0.011374f, -0.018655f, +0.016330f, +0.005795f, -0.004846f, -0.006424f, +0.014734f, -0.008971f, +0.004544f, -0.001649f, - -0.002723f, +0.009036f, -0.003338f, +0.003556f, -0.001079f, +0.009479f, -0.017092f, -0.018195f, -0.001283f, -0.002709f, - +0.018337f, -0.003198f, -0.003717f, +0.016892f, -0.003625f, -0.006374f, +0.003859f, +0.008071f, -0.005430f, -0.006945f, - -0.000026f, +0.005152f, +0.006389f, -0.000547f, -0.000053f, -0.010605f, +0.007501f, +0.008952f, -0.002974f, -0.008248f, - +0.003031f, -0.002100f, -0.005715f, +0.003717f, +0.003712f, +0.000030f, -0.003298f, -0.006181f, -0.000286f, +0.006645f, - +0.002656f, +0.002757f, -0.000717f, -0.000759f, +0.004488f, -0.002079f, +0.003126f, +0.000259f, +0.001539f, -0.006162f, - -0.002261f, -0.003163f, +0.001930f, -0.001646f, +0.002131f, -0.004658f, +0.002467f, +0.002735f, +0.001249f, +0.000439f, - +0.001943f, +0.001349f, -0.002044f, -0.000248f, +0.000447f, +0.002708f, -0.004255f, -0.001737f, -0.001226f, +0.003913f, - +0.000022f, -0.001106f, +0.000454f, +0.002245f, -0.000434f, -0.000574f - }, - { - +0.027491f, -0.088768f, +0.029093f, +0.034925f, -0.012075f, +0.011319f, -0.003862f, +0.005789f, -0.006674f, -0.015155f, - +0.010890f, -0.010052f, +0.010087f, +0.006548f, -0.001411f, +0.017636f, -0.004464f, -0.008077f, -0.004646f, +0.008106f, - -0.005810f, +0.014689f, -0.011966f, -0.014850f, +0.019997f, +0.010968f, -0.013555f, -0.012565f, +0.012902f, +0.011489f, - -0.007014f, -0.001886f, +0.007521f, -0.008907f, +0.003178f, +0.001174f, +0.004349f, -0.007110f, +0.005274f, -0.004896f, - +0.001277f, +0.001271f, +0.001589f, -0.002147f, +0.002788f, +0.003401f, -0.005817f, +0.000667f, +0.006739f, -0.005255f, - +0.001209f, +0.003998f, +0.001089f, -0.005178f, +0.001973f, -0.002304f, -0.002567f, +0.004967f, -0.005144f, +0.005079f, - -0.000560f, +0.000322f, -0.000241f, -0.000041f, +0.000064f, +0.001237f, -0.000086f, +0.001216f, -0.001624f, -0.001895f, - -0.001655f, -0.000646f, +0.000616f, +0.000687f, -0.000313f, +0.002153f, +0.000298f, -0.000168f, +0.000577f, +0.000343f, - +0.000653f, -0.001125f, -0.000748f, +0.000756f, -0.000556f, +0.001078f, +0.000886f, -0.001954f, -0.001091f, +0.000565f, - +0.001270f, -0.000845f, -0.001548f, +0.001241f, +0.000256f, +0.000635f - }, - { - -0.000439f, +0.020838f, -0.037461f, +0.043524f, -0.039373f, +0.016352f, +0.011505f, -0.003529f, +0.001727f, -0.005253f, - -0.006027f, -0.014428f, +0.009600f, +0.014221f, -0.019595f, +0.019476f, +0.015663f, -0.027105f, +0.019771f, -0.003661f, - -0.005611f, +0.012413f, -0.004226f, -0.023637f, +0.031134f, -0.006322f, -0.013723f, -0.017936f, +0.018781f, -0.012811f, - +0.020222f, -0.017411f, +0.011964f, -0.010057f, -0.001815f, +0.006294f, -0.004226f, -0.008177f, +0.013074f, -0.004000f, - +0.005200f, +0.001613f, -0.002816f, -0.007382f, +0.005115f, +0.010296f, -0.011520f, -0.002815f, -0.002404f, +0.012735f, - -0.002590f, -0.002986f, +0.002392f, +0.001288f, +0.002837f, -0.003282f, +0.001530f, -0.001326f, -0.000828f, +0.006871f, - -0.001868f, -0.004160f, +0.000172f, +0.001899f, +0.003482f, +0.002758f, -0.005145f, +0.001369f, -0.005055f, +0.003846f, - -0.002492f, +0.000252f, -0.002593f, +0.002114f, +0.000896f, -0.000534f, +0.001045f, -0.001111f, +0.002699f, +0.000788f, - -0.002496f, +0.001170f, -0.001209f, +0.002775f, -0.004226f, +0.001803f, +0.001462f, -0.001625f, -0.000696f, +0.000971f, - -0.000254f, +0.001289f, -0.002091f, -0.000072f, -0.000322f, +0.000799f - }, - { - +0.036339f, -0.119978f, +0.043693f, +0.040555f, -0.004507f, +0.004208f, +0.006206f, -0.006580f, -0.007521f, +0.002676f, - +0.009647f, -0.033419f, -0.007975f, +0.030305f, -0.016872f, +0.027836f, -0.006581f, -0.019038f, -0.002402f, -0.003782f, - +0.028666f, -0.020755f, -0.019578f, +0.008342f, +0.010728f, -0.010030f, +0.022701f, -0.021851f, +0.017824f, -0.014178f, - -0.002425f, -0.010752f, +0.015226f, +0.015629f, -0.004384f, -0.005347f, -0.001085f, -0.007247f, +0.009858f, +0.000863f, - +0.002459f, -0.013562f, +0.004915f, +0.005829f, -0.002082f, -0.007346f, -0.000426f, +0.001505f, +0.000053f, +0.003185f, - -0.002681f, -0.000119f, +0.003991f, +0.000748f, +0.001402f, +0.002976f, -0.001184f, -0.006699f, +0.000926f, -0.000767f, - +0.001282f, +0.004082f, -0.010046f, +0.005641f, -0.002188f, +0.000169f, +0.005178f, -0.001547f, -0.003454f, +0.001715f, - -0.002257f, +0.000224f, +0.002609f, +0.003002f, -0.003769f, +0.002993f, -0.000206f, -0.000381f, -0.000479f, +0.000508f, - -0.002733f, -0.002820f, +0.001316f, +0.000163f, +0.000999f, +0.003048f, -0.000753f, -0.000323f, -0.002384f, +0.000453f, - +0.000067f, -0.000305f, +0.000960f, +0.000952f, -0.000063f, +0.001971f - }, - { - -0.003345f, +0.038570f, -0.061080f, +0.044228f, -0.035088f, +0.014082f, +0.012330f, -0.002270f, -0.004311f, -0.004103f, - -0.001037f, -0.007374f, -0.022590f, +0.010560f, +0.006104f, +0.022569f, +0.000116f, -0.018077f, -0.004143f, -0.003773f, - +0.020337f, +0.000142f, -0.023107f, -0.013302f, +0.012033f, -0.004907f, +0.028324f, -0.029394f, +0.008418f, +0.001867f, - -0.017166f, -0.008088f, +0.020500f, +0.001142f, -0.001386f, -0.012243f, +0.002418f, +0.002804f, +0.004024f, -0.000268f, - -0.001715f, -0.007254f, +0.008285f, -0.000810f, +0.002179f, -0.003686f, +0.004906f, -0.001986f, +0.000500f, -0.004513f, - +0.002725f, -0.001024f, +0.007372f, -0.001149f, +0.005067f, -0.001647f, -0.000070f, -0.004945f, +0.005778f, -0.004457f, - +0.000296f, -0.001839f, -0.004274f, +0.002817f, +0.003291f, -0.002576f, +0.004217f, -0.005118f, +0.000803f, +0.000967f, - -0.000505f, +0.000941f, +0.001094f, +0.000837f, +0.002819f, -0.001844f, -0.000469f, -0.000105f, -0.001328f, -0.001950f, - +0.001066f, -0.002429f, -0.000719f, +0.002357f, -0.001916f, +0.004250f, -0.002088f, +0.000188f, -0.003038f, +0.001812f, - -0.000024f, -0.000257f, +0.001937f, -0.001006f, -0.000863f, +0.001363f - }, - { - +0.031631f, -0.105976f, +0.045843f, +0.040860f, -0.009952f, +0.014268f, -0.004814f, -0.005527f, +0.004628f, -0.011000f, - +0.003644f, -0.031151f, +0.014438f, +0.027692f, -0.023731f, +0.013680f, -0.013147f, -0.007540f, +0.025096f, +0.002901f, - -0.008951f, -0.009282f, +0.023548f, -0.022604f, -0.018362f, +0.026921f, +0.005238f, -0.003045f, -0.013082f, +0.010320f, - -0.007585f, +0.000466f, -0.000980f, -0.005397f, +0.020375f, -0.007380f, -0.009252f, +0.006841f, -0.000785f, +0.003700f, - -0.002149f, -0.004829f, -0.005071f, +0.007744f, +0.001764f, -0.000658f, -0.004049f, +0.001243f, +0.002701f, +0.003473f, - -0.001641f, -0.012557f, +0.008486f, +0.008011f, -0.001969f, +0.005112f, +0.000339f, -0.000100f, -0.007952f, +0.002039f, - +0.003730f, -0.008576f, +0.004803f, +0.000428f, -0.007983f, +0.002820f, +0.005484f, +0.000712f, -0.002861f, -0.001526f, - +0.002112f, +0.000323f, +0.000403f, +0.005312f, -0.004655f, -0.000054f, +0.008519f, -0.007258f, +0.000489f, -0.000795f, - -0.002156f, -0.002301f, -0.000336f, +0.000903f, +0.002435f, +0.001549f, +0.000956f, -0.000740f, -0.002919f, -0.000654f, - +0.000754f, +0.000748f, +0.002264f, +0.000844f, -0.001389f, +0.000773f - }, - { - -0.003537f, +0.042176f, -0.071803f, +0.046403f, -0.031671f, +0.008196f, +0.016943f, +0.000437f, -0.006427f, -0.007143f, - +0.003299f, -0.019593f, -0.007383f, +0.022614f, -0.001025f, -0.005523f, +0.004937f, -0.015200f, +0.022148f, -0.001021f, - -0.008633f, +0.006776f, +0.003508f, -0.020870f, +0.000236f, +0.009050f, +0.031461f, -0.023828f, +0.003296f, -0.008787f, - -0.005953f, +0.020786f, -0.022326f, +0.019157f, -0.008673f, -0.004029f, +0.004791f, +0.006183f, -0.003009f, +0.004329f, - -0.008356f, +0.003112f, +0.002310f, -0.007183f, +0.004151f, +0.003263f, +0.001992f, -0.009694f, +0.001414f, +0.007478f, - -0.003009f, -0.010212f, +0.007529f, +0.006774f, +0.003210f, -0.004184f, +0.006912f, -0.002545f, -0.008920f, +0.003406f, - -0.002114f, -0.001084f, -0.001420f, -0.000938f, +0.001427f, -0.000950f, +0.004357f, +0.003872f, -0.004031f, -0.003257f, - +0.002486f, -0.000298f, +0.004282f, +0.003557f, -0.001860f, -0.001899f, +0.001730f, +0.001633f, -0.002456f, -0.001672f, - -0.000862f, -0.000318f, +0.000813f, -0.000626f, +0.001403f, +0.003200f, -0.001392f, -0.002376f, -0.002357f, -0.000835f, - +0.003150f, -0.000600f, +0.001056f, +0.001484f, -0.000773f, -0.002219f - }, - { - +0.020573f, -0.061237f, +0.015535f, +0.033722f, +0.005983f, +0.000194f, -0.026112f, -0.001072f, +0.021556f, -0.005863f, - -0.008469f, -0.013959f, +0.023936f, -0.018840f, -0.002787f, +0.011071f, -0.004172f, +0.014701f, -0.015846f, +0.008258f, - -0.003057f, +0.022595f, -0.018016f, +0.020471f, -0.018350f, -0.007031f, +0.006206f, -0.008813f, +0.010144f, +0.006658f, - +0.005611f, -0.013133f, +0.014518f, -0.011846f, +0.000107f, +0.003408f, +0.000134f, -0.003061f, -0.004789f, +0.003774f, - +0.010011f, -0.004710f, +0.007618f, -0.019421f, +0.003568f, +0.005026f, -0.015373f, +0.011176f, +0.003419f, +0.006809f, - -0.007974f, +0.001546f, +0.000386f, -0.004445f, +0.003662f, +0.000908f, +0.001532f, -0.001659f, +0.004017f, -0.001477f, - -0.001387f, -0.002022f, +0.001351f, -0.000222f, +0.001955f, +0.002547f, -0.000821f, -0.001761f, +0.005428f, -0.003346f, - +0.000453f, -0.001066f, -0.000152f, -0.005242f, +0.002963f, -0.003641f, +0.002906f, -0.001205f, +0.003632f, -0.002361f, - +0.002076f, +0.001952f, -0.000370f, -0.004567f, +0.005463f, -0.002219f, +0.000174f, +0.001088f, -0.001183f, -0.002200f, - +0.001003f, -0.000172f, -0.001860f, +0.000804f, +0.001695f, +0.001573f - }, - { - +0.003635f, -0.002333f, -0.008290f, +0.032767f, -0.005703f, +0.011123f, -0.035414f, +0.008268f, +0.028229f, -0.008370f, - -0.002500f, -0.004046f, +0.009181f, +0.003187f, -0.012414f, +0.012863f, -0.019462f, +0.004964f, +0.009720f, +0.002863f, - -0.015270f, +0.021588f, -0.009941f, +0.006947f, -0.006198f, -0.017734f, +0.005900f, -0.002550f, -0.017042f, +0.019931f, - +0.004398f, +0.003667f, +0.003658f, -0.005699f, +0.001796f, +0.003393f, -0.003343f, +0.007840f, -0.005272f, +0.012760f, - -0.006969f, +0.004277f, -0.007677f, -0.003072f, +0.003470f, -0.003710f, +0.000627f, +0.014975f, -0.007740f, +0.007741f, - -0.002005f, -0.010413f, -0.004003f, +0.002057f, +0.002478f, +0.000408f, +0.001550f, +0.006611f, -0.003379f, -0.001877f, - -0.002207f, -0.002285f, +0.000574f, +0.002085f, +0.004696f, -0.007474f, +0.003378f, -0.001302f, -0.000463f, -0.001187f, - +0.001487f, -0.001629f, +0.003211f, -0.005039f, -0.000174f, +0.001769f, -0.000267f, -0.000605f, +0.003124f, -0.001634f, - +0.000098f, +0.002410f, -0.000752f, +0.000686f, -0.001228f, -0.000850f, -0.002738f, +0.002571f, -0.003740f, +0.003105f, - -0.000548f, -0.000115f, +0.002204f, +0.000598f, +0.000422f, -0.000716f - }, - { - +0.031151f, -0.101373f, +0.044734f, +0.030209f, +0.004885f, -0.000427f, -0.012441f, +0.020202f, -0.005586f, +0.018379f, - -0.054458f, +0.018383f, +0.015739f, -0.029512f, +0.023684f, +0.006432f, -0.000976f, +0.005168f, -0.000382f, -0.007842f, - +0.004562f, +0.003752f, -0.007221f, +0.004595f, -0.001687f, -0.001540f, -0.005289f, +0.011981f, +0.014551f, -0.024865f, - -0.001696f, +0.003535f, +0.001596f, +0.010745f, -0.004459f, +0.001213f, +0.005915f, -0.016705f, +0.002586f, +0.010938f, - -0.014778f, +0.002443f, +0.007148f, -0.006633f, +0.002673f, +0.007450f, -0.004068f, +0.004380f, -0.003100f, +0.007268f, - +0.000108f, -0.005089f, +0.000071f, +0.000470f, +0.001261f, -0.003063f, -0.009656f, +0.006376f, -0.001964f, +0.000444f, - +0.006792f, -0.001365f, +0.001608f, -0.001638f, +0.001698f, -0.000631f, -0.004269f, +0.001288f, +0.001432f, +0.000217f, - +0.000363f, -0.001806f, +0.001162f, -0.000172f, +0.001711f, -0.000425f, +0.001001f, -0.003938f, -0.002385f, -0.000818f, - -0.001484f, +0.002935f, -0.002561f, -0.001182f, +0.001583f, -0.001870f, +0.000470f, +0.001867f, +0.002055f, -0.001737f, - +0.002106f, +0.000945f, +0.001006f, -0.001184f, -0.000431f, -0.000907f - }, - { - +0.000835f, +0.012358f, -0.016825f, +0.028583f, -0.004425f, +0.002279f, -0.036895f, +0.021170f, +0.003966f, +0.010742f, - +0.005036f, -0.049075f, +0.043540f, -0.026268f, +0.007978f, +0.005813f, +0.008065f, -0.018267f, +0.009731f, +0.009857f, - -0.026213f, +0.009153f, -0.017787f, +0.018347f, +0.001466f, -0.006248f, -0.000317f, +0.009321f, -0.004614f, +0.004872f, - -0.014623f, +0.009287f, -0.007827f, +0.008790f, +0.012535f, -0.013980f, +0.004550f, -0.013387f, +0.007264f, -0.010643f, - +0.002450f, -0.000506f, +0.010691f, -0.008311f, -0.000187f, +0.004500f, -0.004779f, +0.006101f, +0.000337f, +0.001200f, - +0.008467f, -0.008440f, -0.000326f, -0.000650f, +0.001117f, -0.005377f, -0.005218f, +0.003672f, -0.003993f, +0.003443f, - -0.005075f, +0.006635f, -0.001710f, +0.000562f, -0.001185f, +0.005140f, -0.004812f, -0.004085f, +0.006496f, +0.003319f, - -0.004132f, +0.000349f, +0.003460f, +0.000396f, -0.000464f, -0.002300f, +0.004339f, -0.005217f, -0.001580f, -0.001446f, - +0.002218f, -0.002528f, -0.000753f, -0.000997f, +0.000847f, +0.000278f, +0.000064f, +0.001215f, -0.001713f, +0.001930f, - +0.000292f, +0.002401f, -0.000818f, +0.000348f, +0.000744f, -0.001989f - }, - { - +0.030051f, -0.094893f, +0.041345f, +0.011978f, +0.014982f, -0.006589f, -0.021219f, +0.022936f, +0.001714f, -0.012057f, - -0.009101f, -0.009559f, -0.019102f, +0.025642f, -0.006405f, -0.000868f, +0.013116f, -0.010884f, -0.014481f, +0.002995f, - +0.003407f, -0.000390f, -0.000054f, +0.006020f, -0.015620f, -0.001063f, +0.013169f, +0.001721f, -0.006719f, +0.004793f, - -0.007201f, -0.000307f, -0.006466f, +0.014477f, -0.013906f, +0.003942f, -0.006754f, +0.010838f, -0.007380f, +0.002502f, - +0.011618f, +0.004046f, -0.016922f, +0.001578f, +0.005872f, -0.013552f, +0.002205f, +0.002745f, +0.003949f, +0.002237f, - +0.005627f, -0.002263f, -0.001632f, -0.006578f, -0.002975f, +0.006192f, -0.002727f, +0.002331f, -0.002854f, +0.002305f, - +0.003836f, -0.005771f, +0.002282f, -0.004484f, +0.006913f, -0.003100f, +0.002935f, +0.000991f, -0.000757f, -0.002864f, - +0.001589f, -0.001246f, -0.000108f, +0.001843f, -0.003751f, +0.001948f, -0.001405f, -0.001257f, -0.002758f, +0.000285f, - +0.000013f, -0.000669f, +0.002634f, -0.000597f, +0.002651f, -0.002350f, +0.000757f, +0.001868f, -0.000450f, -0.001938f, - -0.000776f, -0.000478f, +0.002360f, -0.001209f, +0.000735f, -0.002416f - }, - { - +0.007324f, -0.016293f, +0.003666f, +0.014398f, +0.004357f, -0.003445f, -0.041252f, +0.033866f, -0.006165f, +0.007134f, - -0.001507f, -0.022548f, +0.000745f, +0.016897f, +0.010562f, -0.033693f, +0.022943f, -0.001320f, -0.007613f, -0.002602f, - +0.004740f, -0.002216f, +0.010284f, +0.012383f, -0.017238f, +0.004524f, -0.001437f, -0.010699f, +0.007210f, +0.004486f, - -0.015248f, +0.019136f, -0.002145f, +0.011081f, -0.022050f, +0.012358f, +0.001061f, -0.001055f, -0.006737f, +0.010871f, - -0.002460f, +0.007716f, -0.006530f, -0.000826f, +0.005627f, -0.000318f, -0.004695f, +0.006089f, +0.005079f, +0.008095f, - -0.001181f, -0.006723f, -0.000857f, +0.000852f, -0.001548f, -0.000407f, -0.000354f, +0.005709f, -0.003143f, +0.003804f, - -0.001922f, -0.001868f, +0.001659f, +0.001899f, +0.001533f, -0.001592f, -0.000143f, +0.005551f, -0.003215f, +0.001359f, - -0.001596f, -0.000007f, +0.003279f, -0.003216f, +0.001147f, +0.000115f, +0.003244f, -0.002224f, -0.003979f, +0.001845f, - +0.002884f, -0.002477f, +0.001670f, +0.000292f, -0.000868f, +0.004339f, -0.001028f, -0.000569f, -0.001518f, +0.000082f, - -0.000724f, +0.001151f, +0.000511f, -0.000531f, +0.001180f, +0.000455f - } - }, - { - { - -0.008350f, +0.053718f, +0.142128f, +0.114639f, +0.004961f, +0.026055f, +0.007911f, +0.008605f, -0.011433f, +0.007274f, - -0.005538f, -0.034077f, -0.001547f, -0.002710f, +0.021605f, -0.029595f, -0.001745f, -0.012672f, +0.013911f, +0.003608f, - +0.022058f, -0.017510f, +0.005225f, -0.003888f, +0.027232f, -0.003300f, -0.009654f, -0.008011f, +0.012875f, -0.003892f, - -0.002981f, -0.008293f, +0.019716f, +0.017443f, +0.007177f, +0.024126f, -0.000034f, +0.001220f, +0.002280f, +0.004440f, - +0.009447f, +0.004987f, -0.016763f, -0.003994f, +0.012038f, +0.010669f, -0.003342f, -0.000206f, -0.004855f, +0.000987f, - +0.007135f, +0.008137f, +0.001610f, +0.006807f, -0.006982f, -0.000598f, +0.002567f, -0.000360f, +0.001979f, +0.003783f, - -0.003086f, +0.003273f, +0.002021f, +0.001801f, -0.000748f, -0.005886f, -0.003658f, -0.002795f, -0.000143f, +0.002321f, - -0.001313f, +0.003931f, -0.001220f, +0.001582f, -0.005068f, +0.008907f, +0.002633f, +0.001317f, +0.002293f, -0.005989f, - -0.007963f, -0.002082f, -0.001316f, +0.002729f, +0.000412f, +0.001924f, +0.000630f, +0.002969f, -0.003935f, +0.002504f, - +0.001968f, -0.000872f, -0.001302f, -0.000432f, -0.000864f, +0.001583f - }, - { - -0.000631f, +0.114395f, +0.029079f, +0.017584f, -0.040108f, +0.004551f, -0.006146f, +0.011910f, -0.003039f, +0.000572f, - -0.002744f, -0.013487f, -0.005014f, -0.011725f, +0.000596f, -0.041849f, +0.022431f, +0.000327f, +0.002471f, -0.017398f, - +0.001530f, -0.005391f, +0.035835f, -0.015222f, -0.011788f, -0.013822f, +0.010653f, +0.010717f, +0.014123f, -0.005694f, - +0.002403f, -0.006207f, -0.020413f, -0.009635f, +0.003161f, -0.015040f, +0.007846f, -0.021365f, -0.015041f, -0.010030f, - +0.011291f, +0.014851f, -0.012845f, -0.008505f, +0.010535f, +0.001385f, -0.000725f, -0.002480f, -0.004598f, +0.016191f, - -0.002963f, -0.009394f, -0.001414f, +0.008612f, +0.002396f, +0.013663f, -0.001967f, +0.004280f, -0.006533f, +0.000965f, - +0.000698f, -0.004616f, -0.007312f, -0.002962f, -0.000207f, -0.010299f, +0.012657f, +0.001645f, +0.009127f, -0.002425f, - +0.010118f, -0.001478f, -0.000299f, +0.001731f, +0.000713f, -0.004655f, +0.001577f, +0.004644f, +0.000095f, -0.001743f, - +0.000054f, -0.002693f, +0.001794f, -0.000097f, -0.003949f, -0.002420f, +0.004292f, +0.003997f, +0.000107f, -0.003454f, - +0.003292f, -0.002159f, +0.000086f, -0.001040f, +0.001780f, +0.003142f - }, - { - +0.000709f, +0.110350f, +0.089409f, +0.078858f, +0.001183f, +0.027955f, +0.015972f, +0.000652f, +0.002814f, +0.016965f, - -0.009781f, -0.032815f, +0.014656f, +0.009626f, -0.009591f, -0.026737f, +0.021241f, +0.006809f, +0.004166f, -0.000996f, - +0.006622f, +0.000420f, -0.018649f, +0.002337f, +0.004341f, +0.008986f, -0.027034f, -0.033767f, -0.009440f, -0.012560f, - +0.019142f, +0.004554f, -0.002924f, +0.024591f, +0.001565f, -0.005319f, +0.010222f, +0.015483f, -0.006560f, -0.002934f, - -0.001928f, -0.001815f, +0.015346f, +0.015579f, +0.009069f, -0.016569f, +0.005420f, +0.011569f, +0.000385f, -0.003164f, - +0.008200f, -0.004762f, -0.012952f, +0.006152f, +0.004895f, -0.009268f, -0.003339f, +0.001384f, +0.002054f, +0.002635f, - -0.000900f, +0.002201f, +0.003055f, +0.003646f, +0.000608f, -0.001735f, +0.009615f, +0.004783f, +0.002198f, -0.008570f, - +0.002187f, +0.002160f, +0.005454f, -0.001276f, +0.000308f, -0.007538f, -0.000337f, +0.000422f, -0.000013f, -0.002881f, - +0.000863f, +0.001749f, -0.001306f, +0.000663f, +0.000062f, +0.005080f, -0.002544f, +0.000451f, -0.000095f, +0.003935f, - +0.000246f, -0.002235f, -0.000454f, +0.003907f, +0.000641f, +0.000464f - }, - { - -0.024150f, -0.174344f, +0.020682f, +0.089231f, +0.028191f, +0.004933f, -0.010313f, -0.000042f, -0.017862f, +0.007329f, - +0.045236f, +0.005878f, +0.011897f, -0.005672f, +0.005524f, +0.033323f, +0.012835f, -0.003410f, -0.014459f, +0.011312f, - -0.015141f, +0.008442f, +0.008978f, +0.001954f, +0.017111f, +0.011184f, +0.003795f, +0.007209f, +0.024019f, +0.018730f, - -0.003213f, +0.004703f, +0.002401f, -0.020097f, +0.007478f, +0.005014f, -0.002543f, -0.012827f, -0.000759f, -0.006910f, - +0.004526f, -0.004031f, +0.006590f, +0.006470f, +0.007241f, +0.009649f, +0.000999f, +0.007615f, +0.006041f, -0.006058f, - +0.010987f, +0.006296f, -0.001102f, -0.004428f, -0.002596f, -0.002865f, -0.002028f, +0.000613f, -0.008514f, +0.006524f, - -0.000166f, +0.003142f, +0.000780f, -0.002682f, -0.001161f, +0.002375f, +0.002734f, +0.001865f, -0.005045f, -0.002158f, - -0.001874f, -0.001779f, +0.000392f, -0.002461f, -0.001286f, +0.003307f, +0.002199f, +0.001104f, +0.001589f, +0.001855f, - +0.000901f, -0.000858f, -0.002307f, +0.000648f, -0.000875f, +0.000946f, +0.002177f, -0.004158f, -0.003085f, -0.000053f, - +0.001381f, +0.000183f, +0.000438f, +0.003116f, +0.001199f, -0.000016f - }, - { - +0.000523f, +0.087106f, +0.000110f, +0.004594f, -0.073216f, +0.012384f, +0.010048f, -0.002995f, +0.007025f, +0.021407f, - +0.002338f, -0.021292f, +0.007972f, -0.000405f, -0.030533f, +0.035486f, +0.048736f, -0.009853f, +0.014013f, -0.015582f, - -0.007684f, +0.016292f, +0.013597f, -0.023630f, +0.022627f, -0.007207f, -0.016943f, -0.041848f, +0.001342f, -0.038250f, - +0.019304f, -0.010401f, +0.007897f, -0.021366f, -0.009318f, +0.006765f, +0.003427f, -0.008606f, +0.009890f, +0.002636f, - +0.009828f, +0.001698f, -0.001503f, -0.007736f, +0.007478f, +0.010585f, -0.014127f, +0.006339f, +0.007137f, +0.023262f, - -0.003180f, -0.007226f, +0.009095f, +0.008779f, +0.006721f, +0.001002f, +0.006923f, +0.001306f, -0.002424f, +0.010024f, - -0.000069f, -0.002761f, +0.004219f, +0.003445f, +0.007495f, +0.003960f, -0.007614f, +0.000236f, -0.008722f, +0.004537f, - +0.001705f, +0.001856f, -0.005980f, +0.001948f, -0.001008f, -0.003219f, -0.000303f, -0.001865f, +0.002863f, +0.001890f, - +0.000780f, +0.003736f, -0.002315f, +0.000613f, -0.006192f, +0.002630f, +0.001534f, -0.001954f, +0.001548f, +0.002503f, - +0.000872f, +0.001925f, -0.002202f, +0.000721f, +0.000215f, +0.001123f - }, - { - -0.029211f, -0.225112f, +0.035357f, +0.121301f, +0.055823f, -0.008408f, +0.008018f, -0.005411f, -0.005554f, +0.011069f, - +0.014487f, -0.036375f, -0.021718f, +0.017220f, -0.034043f, +0.004006f, -0.032731f, -0.019473f, -0.002642f, -0.023031f, - +0.017936f, -0.026186f, -0.018443f, +0.010204f, +0.018946f, -0.007967f, +0.011645f, -0.020886f, +0.037213f, -0.018805f, - -0.006195f, -0.007137f, +0.023800f, +0.020182f, +0.003519f, +0.005239f, -0.007310f, -0.017228f, +0.004474f, -0.003938f, - +0.015374f, -0.005464f, -0.003480f, -0.000514f, -0.010083f, -0.013585f, -0.003756f, +0.006987f, +0.011231f, +0.006502f, - -0.005779f, +0.003034f, +0.007485f, -0.000984f, -0.002035f, -0.003021f, -0.003716f, -0.005379f, +0.001081f, -0.002465f, - +0.004460f, +0.007457f, -0.008609f, +0.010294f, -0.004055f, -0.001885f, +0.009879f, +0.002845f, -0.003846f, -0.000553f, - -0.006290f, -0.004245f, +0.001286f, +0.006583f, -0.005040f, +0.001967f, -0.001303f, -0.002296f, +0.000523f, +0.001262f, - -0.003290f, -0.000639f, +0.002310f, -0.000023f, -0.000837f, -0.000812f, -0.001744f, +0.002439f, -0.000234f, +0.002495f, - +0.002510f, +0.000951f, +0.000081f, +0.000575f, +0.001337f, +0.003081f - }, - { - -0.002000f, +0.083919f, -0.038690f, -0.004410f, -0.074599f, +0.012544f, +0.007236f, -0.004739f, +0.000769f, +0.007613f, - -0.001486f, -0.015934f, -0.032997f, -0.011839f, -0.007981f, +0.022907f, -0.010714f, -0.024495f, -0.003927f, -0.017002f, - +0.005649f, -0.007346f, -0.022945f, -0.012705f, +0.006124f, -0.005320f, +0.044813f, -0.041175f, -0.016466f, -0.010951f, - -0.028524f, -0.024700f, +0.010500f, -0.005034f, -0.002052f, -0.014790f, +0.001237f, +0.003813f, -0.001014f, -0.002098f, - +0.009019f, -0.007900f, -0.000643f, +0.004450f, +0.014952f, -0.001156f, +0.003235f, -0.004647f, +0.000699f, +0.001961f, - +0.001416f, +0.000733f, +0.012318f, -0.003869f, +0.006462f, +0.000859f, -0.000920f, -0.004556f, +0.006034f, -0.009425f, - +0.000857f, +0.000660f, -0.004512f, +0.003193f, +0.002883f, -0.007134f, -0.000166f, -0.005712f, +0.006961f, +0.006104f, - +0.003173f, +0.002770f, +0.001766f, +0.000057f, +0.001983f, -0.000468f, -0.003183f, -0.005403f, -0.005147f, -0.002098f, - +0.003311f, -0.002718f, -0.002549f, +0.002624f, -0.003122f, +0.003389f, -0.003169f, -0.000621f, -0.001383f, +0.004428f, - +0.000913f, -0.000277f, -0.000123f, -0.003526f, -0.001443f, +0.001339f - }, - { - -0.026515f, -0.179332f, +0.055491f, +0.113951f, +0.055600f, +0.016234f, -0.013578f, -0.019209f, +0.009082f, -0.002014f, - +0.010448f, -0.040876f, +0.000891f, +0.024366f, -0.036923f, +0.002423f, -0.006243f, +0.001904f, +0.024927f, +0.019805f, - +0.002854f, +0.000701f, +0.041911f, -0.010689f, -0.020653f, +0.010479f, -0.001251f, +0.004171f, -0.007697f, +0.011652f, - -0.010561f, -0.007496f, -0.001356f, -0.004916f, +0.022521f, -0.003145f, -0.010692f, +0.003268f, -0.000735f, +0.010920f, - -0.002017f, -0.004261f, +0.008681f, +0.013474f, +0.000490f, +0.006049f, +0.003378f, +0.002581f, +0.001482f, +0.008836f, - -0.006405f, -0.022686f, +0.010230f, +0.008879f, -0.002952f, +0.013141f, +0.004905f, +0.004847f, -0.002049f, +0.008922f, - +0.011930f, -0.009348f, +0.001698f, -0.001167f, -0.009207f, +0.006806f, +0.003386f, -0.001262f, -0.000087f, +0.000476f, - +0.003559f, -0.003878f, -0.006661f, +0.004300f, -0.003626f, +0.001206f, +0.013867f, -0.005093f, +0.003045f, +0.000551f, - -0.002585f, -0.003683f, -0.001477f, +0.001282f, +0.004849f, +0.003326f, +0.001223f, +0.000554f, -0.001516f, -0.000745f, - +0.000791f, +0.000951f, +0.001501f, -0.000340f, -0.002216f, +0.002063f - }, - { - -0.003362f, +0.072186f, -0.064216f, -0.003011f, -0.065572f, -0.002017f, +0.011553f, +0.008755f, -0.003508f, -0.007068f, - +0.006192f, -0.021027f, -0.010643f, +0.009631f, -0.010107f, -0.014692f, -0.002951f, -0.006740f, +0.035654f, -0.001039f, - -0.007148f, +0.016412f, -0.001209f, -0.002142f, +0.033290f, +0.008851f, +0.019968f, -0.021924f, +0.023010f, -0.009080f, - -0.005101f, +0.008103f, -0.040518f, +0.004430f, -0.020889f, +0.009017f, +0.016620f, +0.007088f, -0.002938f, +0.008188f, - -0.003821f, +0.005379f, +0.003333f, -0.012936f, +0.005069f, +0.010975f, +0.002223f, -0.011691f, +0.001251f, +0.003820f, - +0.000069f, -0.008845f, +0.002204f, +0.006554f, +0.002222f, -0.005310f, +0.006060f, -0.002143f, -0.005893f, +0.002620f, - -0.000660f, +0.000367f, -0.002476f, +0.000057f, +0.000596f, +0.000577f, +0.007533f, +0.006852f, -0.000374f, +0.000889f, - +0.004118f, +0.001091f, +0.006854f, +0.003169f, -0.002056f, -0.002570f, +0.001906f, +0.005265f, +0.001464f, -0.001523f, - -0.001254f, -0.002296f, +0.001205f, -0.001172f, +0.000014f, +0.004559f, -0.001368f, -0.002165f, -0.002081f, -0.003913f, - +0.000994f, -0.001262f, -0.002207f, -0.001922f, -0.000935f, -0.002354f - }, - { - -0.014933f, -0.062080f, +0.068882f, +0.057501f, +0.005586f, +0.016196f, -0.016669f, -0.023026f, +0.019589f, -0.026298f, - -0.010630f, -0.014403f, +0.002595f, -0.031702f, -0.002330f, +0.030654f, +0.009247f, +0.013970f, -0.018607f, +0.024328f, - +0.005796f, +0.022460f, -0.012859f, +0.001258f, -0.032747f, +0.001422f, +0.012370f, +0.001942f, +0.035241f, +0.020117f, - +0.009795f, -0.001512f, +0.013232f, -0.008894f, +0.000772f, -0.007997f, -0.005072f, -0.000233f, +0.000378f, -0.001562f, - -0.002980f, -0.013330f, +0.008084f, -0.019916f, +0.006939f, +0.008927f, -0.021024f, -0.000250f, +0.000053f, +0.010624f, - -0.001693f, +0.011076f, +0.007733f, -0.006121f, +0.004246f, +0.002148f, -0.000746f, -0.005029f, +0.006144f, +0.007853f, - +0.004708f, -0.003047f, -0.000541f, -0.002481f, -0.000317f, -0.001917f, +0.001000f, +0.003292f, +0.012670f, +0.000134f, - +0.001332f, -0.001211f, -0.002860f, -0.006777f, +0.002673f, -0.003323f, +0.003917f, -0.001440f, +0.002111f, -0.003584f, - +0.003339f, +0.000485f, -0.000824f, -0.004881f, +0.004510f, -0.003854f, -0.001073f, -0.001540f, -0.002326f, -0.001503f, - +0.000605f, -0.000080f, -0.001938f, +0.001251f, +0.003106f, +0.002793f - }, - { - -0.000142f, +0.076731f, +0.047000f, +0.016062f, -0.024972f, +0.006715f, -0.035529f, +0.022925f, +0.044036f, -0.004771f, - +0.031512f, +0.002746f, -0.006100f, -0.008273f, -0.022533f, +0.004731f, -0.046894f, +0.015155f, +0.026387f, +0.008715f, - -0.019766f, -0.000010f, -0.004286f, +0.008307f, -0.011217f, -0.016023f, +0.003752f, -0.007725f, -0.018881f, +0.037316f, - +0.019147f, +0.012323f, +0.007947f, +0.004561f, +0.005479f, +0.007249f, +0.006708f, +0.018099f, -0.002346f, +0.026781f, - -0.000204f, +0.004117f, -0.002006f, +0.005383f, +0.001333f, -0.007732f, -0.001072f, +0.007808f, -0.008656f, +0.005492f, - -0.002589f, -0.002915f, +0.001358f, +0.004008f, -0.000463f, -0.007618f, +0.000886f, +0.006750f, -0.008112f, -0.003150f, - +0.001967f, +0.003271f, -0.002747f, -0.001606f, -0.003454f, -0.009362f, +0.010508f, -0.000078f, -0.001136f, -0.002657f, - +0.000345f, -0.005305f, +0.002477f, -0.003154f, +0.001433f, +0.000635f, -0.004066f, +0.001275f, +0.005641f, -0.003691f, - -0.004087f, -0.000395f, +0.001801f, +0.004575f, -0.004017f, -0.005992f, -0.000917f, +0.006475f, -0.000902f, +0.008346f, - +0.000057f, -0.000161f, +0.001983f, -0.000798f, -0.000436f, -0.002752f - }, - { - -0.022880f, -0.202062f, +0.035318f, +0.057107f, +0.034632f, +0.046479f, +0.024143f, +0.022637f, -0.002090f, -0.019613f, - -0.082562f, +0.044320f, +0.041813f, -0.030007f, +0.012200f, +0.005302f, +0.016208f, +0.021422f, -0.001075f, +0.007190f, - +0.026168f, +0.006104f, -0.007435f, -0.004171f, +0.003928f, +0.007429f, -0.011072f, +0.011631f, +0.013127f, -0.028807f, - -0.011588f, -0.000503f, +0.009741f, +0.017235f, -0.011837f, +0.005819f, +0.019453f, -0.011492f, +0.001825f, +0.006504f, - -0.010452f, +0.007899f, -0.002388f, -0.007472f, +0.011476f, +0.010105f, -0.005523f, +0.005918f, +0.005396f, +0.008860f, - -0.008393f, -0.008316f, +0.002487f, +0.004907f, +0.002183f, -0.006850f, -0.007759f, +0.016089f, +0.009841f, +0.003021f, - +0.000307f, -0.007029f, +0.002988f, +0.003142f, +0.003086f, -0.002248f, -0.003851f, +0.001892f, -0.003863f, -0.005725f, - -0.004661f, -0.005968f, -0.003500f, -0.007042f, +0.000302f, -0.001016f, -0.000728f, -0.006418f, -0.004897f, -0.003645f, - -0.001181f, +0.005701f, -0.003295f, -0.004368f, -0.000005f, -0.001768f, -0.001535f, -0.000365f, +0.002495f, -0.002635f, - -0.000368f, +0.000591f, +0.003346f, +0.000627f, +0.000715f, -0.000423f - }, - { - -0.000436f, +0.096733f, +0.041272f, +0.002344f, -0.035885f, -0.025824f, -0.049723f, +0.026705f, +0.011762f, +0.009718f, - +0.017519f, -0.039739f, +0.046385f, -0.027378f, -0.015539f, -0.030347f, -0.014806f, -0.008686f, +0.023620f, +0.006128f, - -0.039834f, -0.002422f, -0.023206f, +0.020793f, +0.021583f, +0.007721f, -0.002223f, +0.002951f, -0.009022f, +0.014704f, - -0.006380f, +0.006341f, -0.019581f, -0.003899f, +0.008059f, -0.017272f, +0.000015f, -0.029753f, -0.005240f, -0.002673f, - +0.019247f, +0.001550f, +0.001294f, -0.014991f, +0.002619f, +0.007815f, -0.003138f, +0.008106f, +0.004441f, +0.001839f, - +0.003338f, -0.022804f, -0.003851f, +0.005333f, +0.001696f, -0.007622f, -0.011831f, -0.003160f, -0.003945f, +0.000429f, - -0.013475f, +0.002258f, -0.003634f, +0.004588f, +0.000723f, +0.007289f, -0.003845f, -0.004079f, +0.003560f, +0.000911f, - -0.002652f, +0.000637f, +0.003434f, -0.003855f, -0.005141f, -0.001234f, +0.006084f, -0.006632f, -0.003144f, +0.000108f, - +0.004518f, -0.004789f, -0.004875f, -0.001014f, +0.002718f, -0.001113f, -0.003211f, -0.001539f, -0.005395f, +0.000345f, - +0.001807f, +0.003110f, -0.002259f, +0.001695f, +0.001216f, -0.003476f - }, - { - -0.023167f, -0.188237f, +0.030335f, +0.027562f, +0.022143f, +0.012619f, -0.005553f, +0.024531f, +0.009067f, -0.054759f, - -0.038106f, -0.020398f, -0.055748f, +0.004321f, -0.008692f, +0.003719f, +0.002616f, -0.025339f, -0.025018f, -0.000405f, - +0.009791f, -0.006269f, -0.019720f, -0.002266f, -0.034591f, -0.009898f, +0.029075f, +0.023875f, -0.005603f, -0.012266f, - -0.019844f, +0.000316f, -0.006013f, +0.013454f, -0.012725f, +0.000337f, -0.011844f, +0.025171f, -0.007744f, -0.003985f, - +0.011048f, +0.000959f, -0.016158f, +0.002453f, +0.001565f, -0.012407f, -0.000664f, +0.001931f, +0.011021f, +0.005074f, - +0.010164f, -0.005254f, -0.013930f, -0.003653f, +0.008081f, +0.010194f, -0.006241f, -0.002780f, -0.004313f, +0.003160f, - +0.007882f, -0.001094f, +0.001206f, -0.013530f, +0.002802f, -0.004447f, +0.004073f, +0.006517f, +0.005811f, -0.000995f, - +0.003292f, -0.005223f, -0.007661f, -0.001284f, -0.008190f, +0.001043f, -0.004297f, -0.002146f, -0.003214f, -0.003135f, - -0.002460f, -0.000283f, +0.003718f, -0.000262f, +0.005984f, -0.002651f, +0.000029f, +0.004650f, -0.000683f, -0.003753f, - -0.002027f, +0.001089f, +0.007626f, +0.001353f, +0.000838f, -0.001142f - }, - { - -0.002662f, +0.046250f, +0.052461f, -0.004210f, -0.024751f, -0.042011f, -0.066950f, +0.032181f, +0.013560f, +0.012430f, - -0.016627f, -0.031865f, +0.002763f, +0.012756f, +0.001857f, -0.044151f, +0.011328f, -0.001802f, -0.011731f, +0.003268f, - +0.005312f, -0.014863f, +0.013952f, +0.025192f, -0.010445f, +0.013768f, -0.003064f, -0.021584f, +0.006777f, +0.002958f, - -0.006257f, +0.042718f, +0.002793f, +0.015485f, -0.012573f, +0.022936f, +0.005722f, -0.000026f, -0.014940f, +0.005101f, - -0.005688f, +0.014995f, +0.002627f, +0.014363f, +0.019944f, +0.012009f, -0.000034f, +0.016085f, +0.015470f, +0.010483f, - +0.008750f, +0.002064f, -0.004329f, +0.001317f, +0.002857f, -0.000104f, +0.003303f, +0.009780f, -0.007962f, +0.003490f, - +0.004163f, -0.000163f, +0.002806f, +0.007219f, +0.000959f, -0.001474f, +0.005532f, +0.002228f, -0.004154f, +0.005605f, - -0.001669f, -0.001072f, +0.004093f, -0.002877f, +0.001167f, +0.003486f, +0.008783f, -0.000719f, -0.007387f, +0.003058f, - +0.005111f, -0.002730f, +0.005080f, +0.002765f, -0.001172f, +0.004451f, -0.003826f, -0.002709f, +0.001421f, +0.002622f, - +0.000747f, +0.003972f, +0.002009f, -0.000508f, +0.003257f, +0.001273f - } - }, - { - { - +0.002515f, +0.189634f, -0.027014f, +0.038445f, +0.071505f, +0.023123f, +0.005794f, -0.000246f, +0.016140f, -0.017328f, - -0.009672f, -0.013321f, -0.010972f, -0.018578f, +0.022220f, -0.019820f, -0.002625f, +0.009851f, +0.007220f, -0.018272f, - +0.023789f, -0.020286f, +0.011599f, -0.015319f, +0.016497f, +0.013222f, -0.005975f, -0.012611f, +0.005703f, +0.004999f, - -0.024955f, +0.017484f, +0.012929f, +0.007735f, +0.010628f, +0.011421f, +0.007380f, +0.003092f, +0.002730f, +0.001310f, - +0.003616f, -0.003510f, +0.001196f, -0.004795f, +0.005050f, +0.010484f, +0.001825f, -0.005229f, -0.001730f, -0.000886f, - +0.004343f, +0.004028f, +0.012274f, -0.000413f, -0.004710f, +0.006357f, -0.001617f, -0.001855f, +0.003314f, +0.001096f, - -0.000111f, -0.000009f, +0.006724f, +0.001965f, -0.005187f, +0.002082f, -0.011045f, +0.002764f, -0.004400f, +0.001956f, - +0.004956f, +0.000061f, -0.003181f, +0.001016f, +0.000722f, +0.000905f, +0.002523f, +0.006276f, +0.000222f, -0.005149f, - -0.007442f, -0.004856f, +0.001139f, +0.003146f, +0.002767f, -0.001822f, +0.004422f, -0.001082f, -0.001395f, -0.000224f, - +0.001204f, +0.001062f, +0.001366f, -0.001062f, -0.001685f, +0.000488f - }, - { - +0.003985f, +0.045633f, +0.063580f, -0.026282f, +0.028249f, -0.007712f, -0.006509f, -0.004873f, +0.016730f, -0.010679f, - +0.000339f, -0.001511f, -0.012721f, -0.006901f, -0.000602f, -0.006056f, -0.008394f, +0.000516f, -0.012716f, -0.001963f, - -0.009009f, +0.011533f, +0.013665f, -0.010529f, -0.000844f, -0.014612f, -0.008769f, +0.012278f, +0.023562f, -0.002469f, - -0.001764f, -0.016887f, -0.013845f, -0.000396f, -0.009506f, +0.003431f, -0.003650f, -0.017891f, -0.015130f, -0.002036f, - +0.001148f, +0.009233f, -0.017045f, +0.000211f, +0.011932f, -0.008567f, +0.003520f, +0.003287f, -0.008674f, +0.012947f, - -0.004480f, -0.004683f, -0.001100f, +0.003985f, +0.017482f, -0.003063f, +0.000865f, +0.004582f, -0.003680f, -0.006495f, - +0.001779f, -0.003693f, -0.000231f, -0.003472f, -0.003469f, -0.003619f, +0.004181f, +0.005904f, +0.008257f, -0.001650f, - +0.006639f, +0.002935f, -0.002394f, +0.002005f, -0.002360f, -0.000015f, +0.000926f, +0.000699f, -0.003702f, -0.000181f, - +0.004116f, -0.002878f, -0.003940f, +0.005188f, -0.003635f, -0.001472f, +0.001305f, +0.002564f, +0.001417f, +0.001872f, - -0.004303f, -0.001474f, -0.000536f, +0.000814f, +0.002523f, +0.002228f - }, - { - -0.002554f, +0.162488f, +0.045172f, -0.014008f, +0.083014f, +0.020305f, +0.013375f, +0.012008f, -0.006905f, +0.000069f, - +0.008336f, -0.028291f, +0.004748f, +0.007284f, -0.003077f, -0.024230f, +0.001984f, +0.006795f, +0.005945f, +0.009600f, - +0.012775f, -0.000782f, -0.016401f, -0.005156f, +0.010851f, -0.003066f, -0.006939f, -0.037132f, -0.007679f, -0.013636f, - +0.024870f, -0.012042f, +0.006466f, +0.015490f, +0.007775f, -0.010208f, +0.011397f, +0.013175f, -0.009952f, +0.006173f, - -0.013928f, +0.009637f, +0.008649f, +0.014332f, +0.010172f, -0.007613f, +0.009377f, -0.002344f, -0.001060f, +0.002561f, - +0.006371f, -0.001441f, -0.009702f, -0.001385f, +0.005415f, -0.006750f, +0.002375f, -0.002894f, +0.006881f, -0.003115f, - -0.001164f, +0.002302f, +0.001366f, +0.000683f, +0.000750f, +0.004708f, +0.005228f, +0.004732f, +0.000257f, -0.001007f, - +0.001094f, +0.002646f, +0.002060f, -0.003457f, +0.003300f, -0.004903f, -0.004253f, -0.002036f, +0.001857f, -0.000818f, - -0.000157f, +0.002085f, -0.001554f, +0.002404f, -0.003870f, +0.006445f, -0.000740f, +0.001249f, -0.001518f, +0.004179f, - +0.001036f, -0.001940f, -0.001448f, +0.001897f, -0.000537f, -0.000328f - }, - { - +0.022020f, -0.146001f, -0.053909f, +0.086091f, +0.018625f, +0.019940f, -0.013426f, -0.006191f, -0.000400f, +0.027836f, - +0.012128f, +0.011786f, +0.007656f, -0.008985f, +0.019441f, +0.009765f, +0.002839f, +0.015720f, -0.014563f, +0.010049f, - -0.006451f, +0.002880f, +0.011509f, +0.003259f, +0.015000f, +0.010859f, +0.007620f, +0.015926f, +0.013165f, +0.016030f, - +0.000610f, +0.003517f, +0.001264f, -0.013123f, -0.006657f, +0.000540f, -0.011168f, +0.001155f, -0.009111f, +0.004630f, - +0.003358f, -0.002388f, +0.006075f, -0.004376f, +0.016585f, -0.000415f, +0.005818f, +0.009532f, +0.001765f, -0.005360f, - +0.004835f, +0.012805f, -0.002753f, -0.001856f, -0.007053f, +0.005890f, +0.000650f, -0.007105f, -0.006828f, +0.010347f, - -0.000706f, -0.005154f, +0.006332f, -0.005330f, +0.004025f, -0.000056f, +0.004878f, -0.002164f, -0.009203f, +0.003390f, - -0.004113f, -0.000008f, +0.001515f, -0.003383f, -0.001509f, +0.003039f, +0.000520f, +0.002269f, +0.002544f, -0.000436f, - -0.000276f, +0.000742f, -0.000413f, -0.000373f, -0.000196f, -0.000094f, +0.001257f, -0.003918f, +0.000543f, -0.001819f, - +0.002573f, -0.002450f, +0.002486f, +0.002221f, -0.000308f, -0.001151f - }, - { - +0.000200f, +0.068844f, +0.021804f, -0.023863f, -0.022473f, -0.011200f, +0.005787f, +0.007091f, -0.003167f, +0.013669f, - +0.000494f, -0.003395f, -0.000624f, -0.001702f, -0.007952f, +0.018439f, +0.028657f, +0.012064f, +0.005127f, -0.020593f, - +0.012017f, -0.022230f, +0.030488f, -0.004647f, +0.005700f, +0.000946f, -0.021291f, -0.030924f, -0.012561f, -0.021315f, - +0.002991f, +0.001930f, -0.002597f, -0.005557f, -0.017975f, +0.004104f, -0.007089f, +0.013098f, +0.000599f, +0.003235f, - +0.000840f, +0.006066f, +0.001274f, +0.004029f, -0.003232f, +0.010374f, +0.000249f, -0.003115f, +0.005283f, +0.018700f, - +0.003149f, -0.012916f, +0.000259f, +0.018070f, +0.004422f, +0.009741f, +0.004591f, -0.001846f, -0.001689f, +0.005303f, - +0.004265f, +0.000437f, +0.001141f, +0.004093f, +0.008483f, +0.002717f, -0.003833f, -0.004478f, +0.002752f, -0.003166f, - +0.004903f, +0.000703f, -0.005839f, -0.000106f, -0.001946f, -0.005706f, +0.000351f, +0.000145f, +0.002089f, +0.003254f, - +0.001281f, +0.003740f, -0.003747f, -0.001573f, -0.002875f, +0.002372f, -0.000258f, +0.001036f, -0.000139f, -0.000157f, - +0.003942f, +0.000843f, -0.000082f, -0.001149f, +0.000376f, +0.002234f - }, - { - +0.025162f, -0.156737f, -0.086011f, +0.124402f, +0.030338f, +0.015196f, +0.004439f, -0.000872f, -0.007864f, +0.008334f, - -0.005239f, +0.010496f, -0.011838f, -0.019802f, -0.020988f, -0.004480f, -0.044057f, -0.017495f, +0.005777f, -0.007849f, - +0.001637f, -0.019399f, +0.000050f, -0.007492f, +0.004081f, +0.011061f, +0.005937f, -0.010301f, +0.020668f, -0.006606f, - -0.016813f, +0.006113f, +0.021417f, +0.009268f, +0.004327f, -0.002251f, -0.006208f, +0.000597f, -0.005210f, +0.003893f, - +0.006915f, -0.000486f, -0.010510f, +0.005630f, -0.021692f, -0.007379f, +0.006921f, +0.000662f, +0.011132f, +0.006656f, - -0.001839f, -0.002235f, -0.001323f, +0.002698f, +0.005688f, -0.010060f, -0.007567f, +0.003539f, +0.000412f, +0.003365f, - +0.000722f, -0.000202f, +0.002469f, +0.003509f, -0.000705f, +0.000958f, +0.005941f, -0.001073f, +0.001812f, -0.002289f, - -0.006269f, +0.003084f, -0.004361f, +0.003883f, +0.000645f, -0.003759f, +0.001722f, -0.002060f, +0.000892f, -0.000896f, - -0.005560f, +0.006515f, -0.002212f, +0.000160f, -0.000693f, -0.001815f, -0.000246f, -0.001875f, +0.004228f, +0.002090f, - +0.000898f, +0.001897f, -0.000310f, +0.001244f, +0.000015f, +0.001775f - }, - { - +0.003994f, -0.031257f, +0.081513f, -0.030435f, -0.044952f, +0.005475f, +0.000115f, -0.011255f, +0.011655f, +0.010201f, - -0.013285f, -0.014542f, -0.018510f, -0.013243f, +0.002012f, +0.010774f, -0.016404f, -0.016602f, -0.015956f, -0.018231f, - -0.000207f, -0.006568f, -0.009884f, -0.004857f, +0.011584f, +0.001445f, +0.004639f, -0.012601f, -0.019825f, +0.002992f, - -0.040405f, -0.025033f, +0.015783f, -0.009242f, -0.012103f, -0.000054f, +0.003427f, -0.007406f, +0.005680f, -0.007363f, - +0.012281f, -0.007195f, -0.004757f, +0.016303f, -0.005007f, +0.001750f, -0.001626f, +0.008689f, -0.005355f, +0.004143f, - -0.004979f, +0.003871f, -0.000238f, +0.005259f, +0.005319f, -0.000844f, +0.003554f, -0.001085f, -0.000403f, -0.006852f, - -0.001067f, +0.000620f, -0.003342f, +0.001222f, -0.002822f, -0.002293f, -0.003490f, +0.002027f, +0.003164f, +0.005645f, - +0.003298f, +0.003925f, -0.001135f, +0.004442f, -0.000973f, -0.000880f, -0.000681f, -0.004819f, -0.005017f, +0.002945f, - -0.002323f, -0.002064f, -0.001506f, +0.003551f, -0.003046f, +0.002003f, +0.000659f, -0.004415f, +0.000321f, +0.003986f, - +0.001108f, -0.001055f, +0.000216f, -0.003480f, -0.001210f, -0.001761f - }, - { - +0.023813f, -0.099711f, -0.074641f, +0.098691f, +0.060780f, +0.023796f, -0.014716f, -0.014957f, -0.000988f, +0.011122f, - -0.005550f, -0.017386f, -0.016468f, +0.017993f, +0.004874f, -0.016379f, -0.021365f, +0.026241f, +0.011351f, +0.027976f, - +0.009426f, -0.002102f, +0.021973f, -0.007748f, +0.009240f, -0.016673f, +0.014803f, -0.003082f, +0.006685f, -0.005336f, - -0.006313f, -0.004889f, -0.007303f, +0.010493f, +0.010491f, +0.002378f, -0.012484f, +0.004938f, +0.005374f, +0.014833f, - -0.001993f, -0.006637f, +0.005583f, +0.014509f, -0.002280f, +0.006617f, -0.001498f, +0.008275f, +0.003909f, -0.000194f, - -0.006195f, -0.011113f, +0.009654f, -0.000263f, -0.002182f, +0.012416f, +0.002601f, +0.002397f, +0.002870f, +0.013548f, - +0.007179f, -0.000661f, -0.002926f, -0.003623f, -0.006404f, +0.008322f, -0.001534f, +0.002140f, +0.002228f, -0.001041f, - +0.001166f, -0.005800f, -0.002476f, -0.001796f, +0.002024f, -0.000494f, +0.010574f, -0.002008f, +0.002970f, +0.000687f, - -0.000565f, -0.000773f, -0.002955f, +0.002998f, +0.003659f, +0.002119f, -0.001443f, +0.001920f, +0.001055f, -0.001691f, - -0.000289f, -0.000520f, +0.001531f, +0.001653f, -0.003003f, +0.003874f - }, - { - +0.004102f, -0.065114f, +0.084047f, -0.033157f, -0.034744f, -0.005267f, +0.002550f, +0.006891f, -0.001586f, -0.008429f, - +0.000531f, -0.010533f, -0.001780f, -0.013774f, +0.000876f, +0.000056f, +0.005896f, -0.012911f, +0.006933f, +0.025469f, - -0.014012f, +0.012542f, +0.006413f, +0.015884f, +0.020685f, -0.007985f, +0.021670f, -0.026083f, +0.030787f, -0.019879f, - +0.027665f, -0.021550f, -0.021554f, -0.005286f, -0.024473f, +0.004471f, +0.024919f, +0.006032f, -0.003035f, +0.003386f, - +0.000133f, -0.001048f, +0.005330f, -0.013836f, +0.008489f, +0.001573f, -0.001745f, +0.002330f, -0.000841f, +0.005268f, - -0.004979f, -0.004572f, -0.000701f, +0.003678f, +0.003935f, -0.004217f, -0.001635f, +0.003339f, -0.003288f, -0.001640f, - +0.002518f, +0.000614f, -0.002158f, +0.000048f, -0.001730f, +0.003373f, +0.004506f, +0.004728f, +0.002695f, +0.003439f, - +0.002691f, +0.006266f, +0.000033f, -0.000677f, +0.001429f, -0.003422f, +0.005036f, +0.002129f, +0.002746f, -0.003485f, - +0.000548f, +0.000546f, -0.001411f, -0.004334f, +0.003939f, +0.000042f, -0.002309f, +0.001503f, -0.001154f, -0.003541f, - +0.000695f, -0.002220f, -0.000759f, -0.001270f, -0.005105f, -0.001448f - }, - { - +0.010177f, +0.017965f, -0.003024f, +0.026703f, -0.000323f, -0.017500f, +0.063053f, -0.015184f, -0.017991f, -0.025186f, - -0.013685f, -0.001004f, -0.013704f, +0.005753f, -0.005378f, +0.009227f, +0.005120f, -0.012717f, +0.019018f, +0.005415f, - +0.020644f, -0.005426f, +0.001467f, -0.020866f, -0.014109f, +0.023563f, -0.017709f, +0.015320f, +0.021543f, +0.027203f, - +0.007987f, +0.010786f, -0.022826f, +0.015887f, +0.011832f, -0.014928f, +0.001013f, -0.015200f, +0.018579f, +0.001912f, - +0.008002f, -0.025431f, +0.001927f, -0.012412f, -0.003491f, +0.000076f, -0.000021f, -0.011329f, +0.002797f, -0.002522f, - +0.004216f, +0.010334f, +0.004310f, +0.008997f, -0.001460f, -0.006032f, +0.006531f, -0.012152f, +0.000002f, +0.016460f, - -0.002744f, -0.000022f, +0.002248f, -0.000521f, +0.002103f, -0.009562f, +0.009058f, +0.003034f, +0.010042f, -0.000853f, - +0.001485f, -0.001098f, -0.007817f, +0.002451f, -0.001868f, +0.002675f, +0.000226f, +0.000366f, -0.003249f, -0.001037f, - +0.003255f, -0.002037f, -0.003326f, -0.001689f, +0.001616f, -0.001415f, -0.000801f, -0.001202f, -0.000749f, -0.003370f, - +0.002599f, +0.002125f, -0.003349f, +0.000721f, -0.001103f, +0.002787f - }, - { - -0.001557f, +0.114111f, -0.000372f, +0.013431f, -0.000772f, -0.033535f, +0.003736f, +0.029216f, +0.003452f, -0.005163f, - +0.050025f, -0.007526f, -0.010256f, -0.014491f, -0.027393f, +0.012571f, -0.035478f, +0.008544f, +0.020431f, -0.015665f, - +0.016737f, -0.020093f, +0.008258f, -0.010339f, +0.014067f, -0.017813f, -0.002609f, +0.009331f, -0.003725f, +0.031024f, - +0.018667f, +0.001181f, +0.007188f, +0.007811f, -0.023729f, +0.034279f, +0.010126f, +0.011293f, -0.002049f, +0.006331f, - +0.015690f, +0.006361f, -0.006830f, +0.003182f, -0.003213f, -0.003028f, +0.012639f, -0.005021f, +0.000062f, -0.004171f, - -0.002230f, +0.005123f, -0.000867f, -0.003956f, +0.000606f, +0.003540f, -0.002418f, -0.001408f, -0.005602f, -0.002838f, - +0.003791f, +0.005260f, -0.003021f, +0.003573f, -0.009844f, -0.004919f, +0.006954f, -0.004753f, +0.002890f, +0.001060f, - +0.002828f, -0.005025f, -0.004725f, -0.000212f, +0.003501f, -0.002110f, +0.000444f, +0.002811f, -0.004110f, +0.001340f, - -0.003813f, -0.002974f, +0.000710f, +0.006882f, -0.002615f, -0.006074f, +0.001088f, +0.003262f, +0.004105f, +0.004434f, - -0.000936f, -0.000804f, -0.001614f, +0.003975f, -0.002400f, -0.000841f - }, - { - +0.014817f, -0.210049f, -0.006006f, +0.031781f, +0.026644f, +0.019583f, +0.073024f, -0.001907f, +0.005088f, -0.031723f, - -0.017205f, +0.002438f, +0.022045f, +0.013311f, -0.008189f, -0.009919f, +0.001953f, +0.026121f, +0.014037f, +0.008013f, - +0.018793f, +0.011805f, +0.005050f, -0.008969f, -0.003436f, +0.019898f, -0.015294f, +0.010051f, +0.001027f, -0.020340f, - +0.001643f, -0.009072f, +0.005586f, -0.003850f, +0.011597f, -0.008031f, +0.023436f, +0.002806f, +0.007278f, +0.001483f, - -0.010471f, +0.003181f, -0.010203f, +0.009611f, +0.001058f, -0.000526f, +0.004676f, +0.004791f, +0.009474f, +0.000933f, - -0.011168f, -0.002824f, +0.008435f, -0.001768f, +0.010262f, -0.013712f, -0.001361f, +0.011876f, +0.007681f, +0.003003f, - +0.004982f, -0.005091f, -0.002599f, +0.004925f, -0.001151f, +0.002482f, -0.005021f, -0.000212f, -0.001481f, -0.011769f, - -0.000383f, -0.005061f, -0.006674f, -0.004878f, -0.000596f, -0.000191f, -0.004956f, -0.000989f, -0.004820f, -0.007041f, - +0.002369f, +0.002303f, -0.002671f, -0.001818f, +0.000151f, -0.001309f, -0.004994f, +0.000542f, +0.002775f, -0.001667f, - +0.001146f, -0.002226f, +0.001473f, +0.004811f, -0.001169f, -0.000874f - }, - { - +0.000746f, +0.098992f, +0.013426f, +0.002946f, -0.019621f, -0.011264f, -0.037170f, +0.017981f, -0.001057f, +0.005531f, - -0.000215f, -0.010370f, +0.024969f, -0.021456f, -0.031561f, -0.007804f, -0.031106f, +0.011791f, +0.029979f, -0.026176f, - -0.016181f, -0.013511f, +0.003325f, +0.006552f, +0.021440f, +0.002458f, -0.003987f, -0.016328f, +0.023412f, +0.005882f, - +0.017732f, -0.016370f, -0.007742f, -0.000584f, -0.009397f, -0.003727f, -0.019166f, -0.023011f, -0.010944f, +0.015409f, - +0.010574f, -0.007999f, +0.004151f, -0.008273f, -0.005945f, +0.006844f, +0.003346f, +0.004351f, +0.008956f, +0.003598f, - -0.003371f, -0.015091f, -0.000788f, -0.001076f, +0.005081f, -0.012044f, -0.003700f, -0.010506f, -0.005298f, +0.003233f, - -0.012174f, +0.001853f, -0.008513f, +0.000406f, +0.008570f, +0.002194f, -0.004125f, +0.005690f, -0.004785f, -0.002683f, - +0.001615f, +0.000715f, -0.004086f, +0.002322f, -0.002731f, -0.002244f, +0.001640f, -0.000785f, -0.007289f, +0.002965f, - +0.000732f, -0.003051f, -0.002774f, +0.003171f, +0.001914f, +0.000063f, -0.007445f, +0.000937f, -0.006571f, +0.000523f, - -0.001013f, +0.001083f, +0.002216f, +0.000691f, -0.001518f, -0.002114f - }, - { - +0.016239f, -0.189185f, -0.024806f, +0.037138f, -0.004699f, -0.006371f, +0.054419f, -0.007425f, -0.011470f, -0.013642f, - -0.040930f, -0.007639f, -0.054484f, -0.008196f, -0.032653f, +0.024165f, +0.014408f, -0.028959f, -0.029989f, +0.017456f, - +0.005527f, +0.006565f, -0.033852f, -0.013410f, -0.014028f, -0.011686f, +0.017672f, +0.025760f, -0.000367f, -0.018952f, - -0.021562f, +0.011994f, +0.000438f, -0.004681f, -0.008050f, -0.005197f, +0.006306f, +0.002174f, +0.010776f, -0.000311f, - +0.002214f, +0.001621f, -0.018350f, +0.012340f, -0.014744f, +0.006573f, -0.008675f, +0.001613f, +0.007693f, +0.008898f, - +0.004535f, -0.005968f, -0.005646f, +0.002286f, +0.003736f, -0.002980f, -0.000035f, -0.005362f, +0.004364f, +0.002223f, - +0.002088f, +0.005109f, -0.000984f, -0.014105f, +0.006263f, -0.007155f, -0.000604f, +0.003327f, +0.007829f, +0.005340f, - -0.003032f, -0.001374f, -0.009546f, +0.000404f, -0.006587f, +0.002502f, -0.005263f, -0.002680f, -0.000531f, -0.000855f, - -0.002877f, +0.000109f, +0.005334f, -0.000572f, +0.001643f, -0.001776f, -0.000645f, +0.003723f, +0.002592f, -0.003866f, - -0.002191f, +0.003545f, +0.003724f, +0.003190f, -0.000011f, +0.001552f - }, - { - -0.000124f, +0.110841f, -0.010620f, -0.002964f, -0.018475f, -0.034799f, -0.050043f, +0.015389f, +0.015447f, -0.002615f, - -0.014968f, -0.011532f, -0.000618f, -0.029151f, -0.011639f, +0.040162f, -0.018168f, +0.000763f, -0.007395f, -0.004142f, - -0.029285f, +0.011408f, +0.011708f, +0.005982f, +0.016986f, -0.006323f, +0.011975f, -0.022353f, -0.003530f, +0.031689f, - -0.001518f, +0.006396f, +0.024389f, -0.016091f, +0.016731f, +0.010085f, +0.003441f, +0.016945f, -0.017550f, -0.008992f, - +0.000600f, +0.005743f, +0.007863f, +0.019149f, +0.007621f, +0.018284f, -0.001993f, +0.018015f, +0.009629f, +0.004396f, - +0.020650f, -0.002177f, -0.007263f, +0.005150f, -0.002149f, +0.002303f, +0.003851f, +0.004588f, -0.001183f, -0.000970f, - +0.015188f, -0.001720f, -0.005601f, +0.005092f, -0.000317f, +0.003223f, +0.008057f, -0.004321f, +0.000697f, +0.000401f, - +0.003302f, -0.004652f, -0.000584f, +0.000842f, -0.001234f, +0.013068f, +0.002036f, -0.004588f, -0.007187f, +0.005979f, - +0.000588f, +0.003160f, +0.003797f, -0.002650f, +0.001882f, +0.000741f, -0.001965f, +0.001085f, +0.001717f, -0.000773f, - +0.005128f, +0.000145f, +0.003894f, +0.000156f, +0.001391f, +0.000273f - } - }, - { - { - +0.004883f, +0.211408f, -0.058552f, -0.084760f, -0.030524f, +0.012458f, +0.006276f, -0.008724f, +0.023777f, -0.010662f, - +0.001733f, -0.002750f, -0.008953f, -0.016391f, +0.016823f, -0.013911f, +0.013581f, +0.036448f, -0.007296f, -0.061088f, - +0.000915f, -0.025533f, +0.017959f, -0.003901f, +0.004136f, +0.002107f, +0.002984f, -0.007012f, -0.008365f, -0.004432f, - -0.020843f, +0.020258f, -0.002902f, -0.004683f, -0.001641f, -0.005506f, +0.004437f, +0.005130f, +0.007090f, -0.002334f, - -0.007782f, -0.013775f, +0.001985f, -0.001374f, +0.003796f, +0.005865f, -0.003992f, -0.009330f, +0.001571f, -0.000303f, - -0.007059f, -0.006899f, +0.009399f, -0.004284f, -0.007770f, +0.004163f, -0.001139f, -0.004224f, -0.000967f, -0.000802f, - +0.003137f, +0.002996f, +0.005992f, +0.008210f, +0.001577f, +0.006565f, -0.007529f, +0.000762f, -0.006378f, -0.000888f, - +0.000838f, -0.000981f, -0.004288f, -0.003006f, +0.002381f, -0.001853f, -0.001526f, +0.007989f, +0.003092f, -0.001511f, - -0.001932f, -0.001132f, +0.003396f, +0.003588f, +0.002208f, -0.003405f, +0.000603f, -0.001930f, +0.001166f, -0.000979f, - +0.000124f, +0.001018f, +0.002324f, +0.001005f, -0.000247f, +0.000003f - }, - { - -0.002933f, -0.071562f, -0.029880f, -0.043511f, +0.031544f, -0.011084f, -0.004639f, -0.003974f, +0.018946f, -0.009868f, - -0.004093f, +0.005286f, +0.010978f, +0.013349f, +0.001977f, +0.009135f, -0.016433f, -0.024527f, -0.007740f, +0.028132f, - -0.002805f, -0.009597f, -0.000591f, +0.009363f, +0.002273f, -0.023590f, -0.016706f, +0.008206f, +0.006496f, -0.007450f, - -0.003072f, -0.009046f, -0.011342f, -0.006899f, +0.005216f, +0.017851f, +0.005747f, -0.005732f, -0.008011f, +0.002342f, - -0.005925f, -0.002658f, -0.011221f, +0.002698f, -0.000670f, -0.013148f, +0.004769f, +0.003508f, -0.009850f, +0.008221f, - -0.008843f, -0.003339f, -0.000297f, -0.002431f, +0.010071f, -0.007157f, -0.000173f, +0.002118f, +0.001066f, -0.009616f, - -0.000339f, +0.000201f, +0.007502f, +0.001396f, -0.001244f, -0.000929f, -0.002724f, +0.002116f, +0.004052f, -0.003762f, - +0.004122f, +0.002307f, -0.004461f, +0.000439f, -0.002373f, +0.000298f, -0.002029f, -0.004368f, -0.005112f, +0.000649f, - +0.005183f, +0.001828f, -0.000645f, +0.006533f, -0.000953f, -0.001095f, -0.002287f, -0.001530f, -0.000762f, +0.002330f, - -0.004790f, -0.001709f, -0.001276f, +0.001732f, +0.000974f, -0.003755f - }, - { - +0.000758f, +0.074154f, -0.064360f, -0.097699f, +0.023215f, -0.002154f, +0.006656f, +0.006287f, -0.006224f, -0.005561f, - +0.005807f, -0.025396f, -0.004707f, -0.006188f, +0.001604f, -0.003852f, -0.003673f, -0.002142f, +0.008410f, +0.013301f, - +0.006123f, +0.005842f, -0.005404f, -0.000103f, +0.008229f, -0.017560f, +0.009690f, -0.016100f, +0.004246f, -0.000037f, - +0.015632f, -0.021356f, +0.002566f, -0.007334f, -0.006140f, -0.001078f, +0.007376f, +0.007474f, -0.005246f, +0.009585f, - -0.008431f, +0.009731f, -0.005368f, -0.006092f, +0.009541f, +0.013743f, +0.015299f, -0.005101f, -0.004014f, -0.001921f, - +0.002505f, +0.007937f, +0.000879f, -0.004294f, +0.001406f, -0.006709f, +0.008209f, +0.000552f, +0.005464f, -0.008620f, - -0.002753f, +0.002325f, +0.000661f, -0.005687f, -0.005476f, -0.000044f, +0.000464f, +0.003215f, -0.002401f, +0.000121f, - +0.001602f, +0.002906f, +0.003703f, -0.004278f, -0.002313f, -0.003268f, -0.001357f, -0.001729f, +0.002941f, -0.002164f, - -0.001336f, +0.004152f, -0.001465f, +0.001928f, -0.003288f, +0.002913f, -0.001207f, +0.002918f, -0.000846f, +0.001124f, - -0.000525f, +0.000964f, -0.001917f, -0.000740f, -0.001318f, -0.000947f - }, - { - -0.023695f, -0.063263f, +0.041789f, +0.047257f, -0.013945f, +0.019856f, -0.005383f, -0.009322f, -0.008321f, +0.006397f, - -0.008653f, -0.002569f, -0.005017f, -0.014932f, -0.009825f, -0.006138f, +0.003846f, +0.020692f, -0.007033f, +0.015966f, - +0.012000f, +0.003217f, +0.010159f, -0.000104f, +0.002641f, +0.001493f, +0.002250f, +0.005514f, -0.001859f, +0.001832f, - -0.006188f, +0.004033f, +0.011652f, -0.011585f, -0.022911f, -0.014560f, -0.009666f, +0.010843f, -0.009882f, +0.007863f, - +0.002218f, -0.000228f, +0.012875f, -0.003007f, +0.014291f, -0.015032f, -0.004503f, +0.001962f, -0.000072f, +0.003495f, - +0.002513f, +0.003627f, -0.002695f, +0.002665f, -0.005782f, +0.007898f, +0.001129f, -0.004965f, -0.004017f, +0.002637f, - -0.003415f, -0.002114f, +0.008073f, -0.004024f, +0.003705f, -0.003873f, +0.004892f, +0.001361f, -0.003884f, +0.004971f, - -0.003748f, -0.001642f, +0.001148f, -0.003439f, -0.000897f, +0.001569f, -0.004034f, -0.001742f, -0.000320f, -0.001724f, - -0.001248f, +0.000701f, +0.002318f, +0.001272f, -0.000171f, +0.000198f, -0.000841f, -0.004769f, +0.001025f, -0.001214f, - +0.002765f, -0.002461f, +0.003244f, -0.000823f, +0.000010f, +0.000889f - }, - { - -0.001128f, +0.011557f, -0.009032f, -0.009489f, +0.010615f, -0.007577f, +0.002479f, +0.002721f, -0.010979f, +0.003908f, - +0.001798f, +0.015162f, -0.000327f, -0.020635f, -0.026648f, -0.022372f, -0.014165f, +0.011107f, -0.002445f, -0.015491f, - +0.017056f, -0.024535f, +0.028453f, -0.010690f, -0.001230f, +0.016299f, +0.004893f, +0.000813f, -0.001865f, -0.011860f, - -0.006703f, +0.005243f, -0.002757f, +0.001042f, -0.000200f, +0.012637f, +0.000519f, +0.012829f, -0.008306f, +0.001108f, - +0.005643f, +0.006484f, -0.005471f, -0.001221f, -0.004315f, +0.007984f, +0.005149f, -0.001695f, -0.004975f, +0.006839f, - +0.002580f, -0.011268f, -0.007678f, +0.006665f, -0.002170f, +0.006637f, +0.001839f, -0.002133f, -0.003872f, +0.001433f, - +0.001974f, +0.001353f, +0.003354f, +0.006236f, +0.005063f, +0.000780f, +0.000233f, -0.002060f, +0.007203f, -0.008089f, - -0.000318f, +0.000905f, -0.004031f, -0.000701f, +0.000456f, -0.003259f, +0.003365f, +0.001901f, -0.000464f, -0.000659f, - +0.000333f, +0.003106f, -0.004821f, -0.001236f, -0.000859f, +0.001386f, -0.002332f, +0.001505f, -0.001647f, -0.002954f, - +0.003083f, +0.000102f, -0.001045f, -0.001432f, +0.000337f, +0.002043f - }, - { - -0.028402f, -0.049258f, +0.041777f, +0.048509f, -0.048415f, +0.009187f, +0.011501f, -0.003893f, -0.020066f, -0.001368f, - -0.005342f, +0.018060f, -0.007453f, -0.016236f, -0.016333f, -0.008681f, -0.019613f, +0.004312f, +0.008928f, -0.004884f, - +0.001074f, -0.014960f, +0.007867f, -0.012073f, +0.006066f, +0.022555f, +0.005261f, -0.007475f, +0.018274f, +0.006652f, - -0.004746f, +0.009697f, +0.004678f, -0.003576f, -0.001499f, -0.001890f, -0.007595f, -0.000633f, -0.006401f, +0.002568f, - +0.004230f, +0.003951f, -0.012249f, -0.002046f, -0.021352f, -0.001473f, +0.017082f, +0.000266f, +0.004893f, -0.003281f, - -0.003703f, +0.004946f, -0.004792f, +0.000123f, +0.008742f, -0.005128f, -0.004135f, +0.005495f, -0.001580f, +0.000824f, - -0.002617f, -0.001581f, +0.008996f, +0.000364f, -0.006739f, -0.000882f, +0.002009f, -0.002364f, +0.005670f, +0.000480f, - -0.002500f, +0.007051f, -0.004097f, -0.000466f, +0.002832f, -0.000128f, +0.003280f, -0.002950f, +0.000256f, +0.000006f, - -0.003685f, +0.006720f, -0.006462f, -0.002097f, +0.001695f, -0.001480f, +0.002622f, -0.001465f, +0.001967f, +0.002519f, - +0.001304f, +0.003572f, -0.001359f, -0.000906f, -0.001409f, -0.001945f - }, - { - -0.000004f, -0.065225f, +0.068425f, -0.007208f, -0.000717f, +0.005749f, -0.001354f, -0.002446f, +0.012086f, +0.003676f, - -0.010049f, +0.003273f, -0.011627f, -0.015838f, -0.002600f, -0.017555f, -0.030924f, -0.007655f, -0.000326f, -0.010106f, - -0.014464f, -0.009090f, +0.026038f, +0.005155f, -0.001454f, +0.011501f, -0.001184f, -0.007086f, +0.001686f, +0.040470f, - -0.001901f, -0.013609f, +0.007795f, +0.007216f, -0.003073f, +0.000652f, +0.002720f, -0.010654f, +0.014650f, -0.004677f, - +0.005219f, -0.010105f, -0.005663f, +0.018366f, -0.014159f, -0.002689f, -0.003709f, +0.002844f, -0.006830f, +0.009394f, - -0.008782f, -0.008331f, -0.013543f, +0.003099f, +0.002915f, -0.003664f, +0.001089f, -0.000854f, +0.000903f, -0.003314f, - -0.004446f, -0.007332f, -0.003034f, +0.001414f, -0.004591f, +0.001494f, +0.000740f, +0.003781f, +0.002516f, +0.002208f, - -0.001316f, +0.006946f, +0.002852f, +0.003427f, +0.000540f, -0.000055f, +0.000322f, +0.003720f, +0.000917f, +0.003600f, - -0.002303f, -0.000536f, -0.001329f, +0.001486f, -0.005507f, +0.000277f, +0.002836f, -0.003976f, -0.000792f, +0.000938f, - -0.001086f, -0.001023f, +0.002002f, -0.002155f, -0.000808f, -0.002774f - }, - { - -0.027596f, -0.012601f, +0.028573f, +0.013249f, -0.029170f, +0.010929f, +0.004677f, +0.003398f, +0.003982f, +0.012001f, - +0.005481f, +0.010255f, -0.010389f, +0.009390f, +0.030202f, +0.008808f, -0.025901f, +0.023852f, +0.003809f, +0.013033f, - +0.002345f, -0.002554f, +0.007424f, -0.014792f, +0.015171f, -0.018979f, +0.013281f, -0.002132f, +0.019125f, -0.003857f, - -0.007913f, +0.005627f, +0.000253f, +0.002091f, -0.004855f, +0.002810f, +0.002730f, +0.008953f, -0.002582f, +0.007273f, - +0.000655f, -0.002590f, -0.008156f, +0.002674f, -0.000769f, +0.010219f, -0.003982f, -0.003407f, -0.000923f, +0.001476f, - -0.003784f, +0.000529f, +0.006026f, -0.012499f, -0.002486f, +0.012306f, +0.006792f, +0.005360f, -0.004230f, +0.005212f, - +0.005370f, +0.002253f, -0.005885f, -0.001436f, +0.001577f, +0.009084f, -0.000005f, +0.005028f, +0.000579f, -0.001690f, - +0.003611f, -0.004039f, -0.000005f, -0.001324f, +0.001947f, -0.004074f, +0.005898f, -0.000294f, +0.004239f, +0.000981f, - +0.000933f, +0.003836f, +0.000280f, +0.004821f, +0.002453f, -0.000315f, -0.002944f, +0.001918f, +0.003086f, -0.001117f, - -0.000971f, -0.001181f, +0.000748f, +0.001852f, -0.002071f, +0.001951f - }, - { - +0.002834f, -0.055733f, +0.107833f, -0.007122f, +0.008995f, +0.000539f, -0.004691f, +0.004845f, -0.000821f, -0.004941f, - -0.000755f, +0.004990f, +0.006947f, -0.024656f, -0.002963f, +0.018844f, +0.028185f, -0.006416f, +0.008015f, +0.030585f, - -0.009198f, +0.009149f, -0.018608f, -0.002520f, +0.013435f, -0.021464f, +0.016200f, -0.020488f, +0.026636f, -0.019075f, - +0.033505f, -0.015600f, -0.018304f, -0.001613f, -0.011018f, -0.000612f, +0.017118f, -0.006439f, -0.017398f, -0.005654f, - -0.000429f, -0.002915f, +0.003490f, -0.011630f, +0.009144f, -0.007736f, -0.006365f, +0.009885f, -0.002863f, +0.000107f, - -0.000156f, -0.001519f, -0.006244f, -0.003159f, -0.000640f, -0.004693f, +0.003971f, +0.007085f, -0.004993f, -0.003880f, - -0.000714f, -0.002983f, +0.000727f, +0.002709f, -0.003342f, +0.003253f, +0.001622f, -0.001336f, +0.001011f, +0.002883f, - -0.001372f, +0.002504f, -0.002018f, -0.001102f, +0.004130f, -0.002778f, +0.000312f, -0.002538f, -0.001968f, -0.004054f, - +0.004606f, +0.000766f, -0.003369f, -0.005095f, +0.003505f, -0.000639f, -0.000987f, +0.004141f, +0.001896f, -0.000257f, - +0.001828f, -0.000432f, -0.000524f, +0.000259f, -0.001372f, +0.001268f - }, - { - -0.010058f, +0.125346f, +0.071137f, -0.008130f, -0.022175f, -0.018522f, +0.070935f, -0.022807f, -0.030550f, -0.029324f, - -0.006750f, +0.008200f, -0.000059f, +0.020225f, -0.004190f, -0.015894f, -0.026880f, -0.040855f, +0.003751f, -0.006516f, - +0.010122f, -0.025715f, +0.015862f, +0.006857f, +0.012528f, +0.026196f, -0.025286f, +0.012221f, -0.013800f, -0.001322f, - +0.000704f, +0.007762f, -0.020987f, +0.015777f, +0.008172f, -0.007248f, +0.008950f, -0.024723f, +0.020914f, +0.011391f, - +0.012848f, -0.015740f, +0.006224f, -0.009042f, -0.008994f, +0.001982f, +0.011236f, -0.008523f, -0.002224f, -0.005082f, - +0.000391f, +0.008259f, +0.007420f, -0.004265f, -0.012855f, -0.008301f, +0.006300f, -0.007639f, -0.003852f, +0.006867f, - -0.002947f, +0.001502f, +0.000265f, -0.002761f, +0.002215f, -0.011591f, +0.005447f, +0.003376f, +0.004145f, -0.005009f, - +0.003247f, +0.002418f, -0.006029f, +0.005930f, +0.000987f, +0.002941f, +0.003401f, -0.000036f, -0.009227f, -0.004489f, - +0.003260f, -0.004483f, -0.003683f, +0.004222f, +0.000492f, -0.000104f, +0.003818f, +0.000748f, +0.000365f, -0.001693f, - +0.002250f, +0.001653f, -0.003120f, +0.000571f, -0.003091f, +0.000580f - }, - { - +0.000030f, +0.084367f, -0.048213f, -0.022118f, +0.003953f, -0.006944f, +0.019377f, -0.004425f, -0.026556f, -0.021289f, - +0.022468f, -0.005473f, -0.000760f, -0.027100f, -0.047859f, +0.024220f, +0.010539f, -0.003329f, -0.008002f, -0.020772f, - +0.016501f, -0.015780f, +0.019991f, -0.020056f, +0.024723f, -0.002035f, +0.001139f, +0.027715f, +0.012494f, -0.001080f, - -0.001144f, -0.016014f, +0.001441f, +0.015897f, -0.037629f, +0.011516f, -0.011113f, -0.001279f, -0.004391f, -0.001189f, - +0.003290f, -0.004848f, +0.001456f, +0.012347f, -0.001906f, +0.001067f, +0.010057f, -0.010924f, +0.006075f, +0.000028f, - +0.000722f, +0.002215f, -0.003106f, -0.009914f, -0.001882f, +0.003469f, -0.009311f, -0.002406f, +0.005372f, +0.006070f, - +0.002229f, +0.003460f, +0.006726f, +0.009522f, -0.000577f, +0.003221f, +0.001287f, -0.008693f, +0.004908f, +0.005900f, - +0.002288f, -0.004643f, -0.003415f, -0.004604f, -0.002771f, +0.001750f, +0.007093f, +0.002090f, -0.008378f, +0.002890f, - -0.001086f, -0.002473f, -0.000730f, +0.002124f, -0.002051f, -0.002303f, +0.004560f, +0.004687f, +0.002767f, -0.000801f, - -0.003233f, -0.002088f, -0.004735f, +0.002311f, -0.001296f, +0.001618f - }, - { - -0.011141f, -0.228117f, -0.028463f, -0.008147f, +0.007899f, -0.042694f, +0.013973f, -0.008021f, +0.010179f, -0.016119f, - +0.013387f, +0.000162f, -0.001990f, -0.010332f, -0.011046f, +0.011519f, -0.002658f, +0.010333f, +0.019600f, +0.008140f, - +0.004100f, +0.001324f, +0.020242f, +0.006429f, -0.010897f, +0.015265f, -0.009124f, -0.001718f, -0.002550f, -0.003952f, - +0.002541f, -0.014510f, +0.003828f, -0.013765f, +0.009112f, -0.014138f, +0.015958f, +0.009988f, +0.007653f, -0.000698f, - -0.002306f, -0.000623f, -0.018292f, +0.008920f, -0.002393f, -0.003232f, -0.002188f, -0.004367f, +0.006722f, -0.004325f, - -0.006826f, +0.003875f, +0.014753f, +0.002963f, +0.011157f, -0.011516f, -0.006448f, -0.003222f, -0.001830f, -0.004902f, - -0.002240f, -0.004348f, +0.003024f, +0.002535f, -0.007042f, -0.001407f, -0.006338f, +0.001575f, +0.002086f, -0.008716f, - +0.000515f, -0.003830f, -0.002405f, +0.003300f, -0.001440f, -0.003019f, -0.002486f, +0.005939f, +0.001294f, -0.002945f, - +0.003482f, -0.002999f, -0.001825f, +0.002565f, +0.000578f, -0.000509f, -0.004642f, +0.000980f, +0.004244f, -0.000267f, - +0.002170f, -0.001998f, -0.000212f, +0.004935f, -0.002433f, -0.002427f - }, - { - -0.001325f, +0.021920f, -0.050222f, +0.005774f, -0.008548f, +0.006900f, -0.022200f, +0.011613f, -0.004685f, -0.002377f, - -0.006700f, -0.006690f, +0.031371f, -0.011662f, -0.038550f, +0.022290f, +0.007753f, +0.024233f, +0.012254f, -0.019852f, - -0.002117f, +0.010770f, +0.020075f, -0.019290f, +0.007482f, -0.006472f, -0.003663f, -0.017187f, +0.009688f, -0.002711f, - +0.011553f, -0.016761f, +0.013727f, +0.001555f, -0.005877f, -0.003753f, -0.023747f, -0.019965f, -0.004049f, +0.023668f, - +0.009655f, -0.008194f, +0.009380f, -0.004019f, -0.012452f, +0.005674f, +0.004766f, +0.000026f, +0.002761f, -0.001044f, - -0.005687f, -0.010557f, -0.002835f, -0.003212f, +0.013390f, -0.003509f, +0.001014f, -0.004415f, -0.000087f, +0.009147f, - -0.001072f, +0.006280f, -0.011853f, -0.000765f, +0.005572f, -0.004509f, -0.007998f, +0.004330f, -0.007671f, -0.001730f, - +0.002664f, -0.003106f, -0.004296f, +0.005794f, -0.004449f, -0.002922f, +0.001200f, +0.005452f, -0.001081f, +0.005245f, - -0.000049f, +0.000077f, +0.000537f, +0.002906f, +0.003796f, +0.003938f, -0.002779f, +0.004840f, -0.003533f, -0.002316f, - -0.003853f, +0.000193f, +0.003036f, +0.001280f, -0.002423f, -0.002353f - }, - { - -0.013146f, -0.184239f, -0.013584f, +0.033013f, +0.001074f, -0.023351f, +0.052053f, +0.006835f, +0.001291f, +0.017948f, - -0.000898f, +0.017902f, -0.036930f, +0.011227f, -0.032528f, +0.013504f, +0.005403f, -0.014107f, -0.013774f, +0.016839f, - +0.001548f, +0.015044f, -0.013192f, +0.000771f, +0.005769f, -0.009490f, +0.007045f, +0.012268f, -0.009695f, -0.019520f, - -0.017083f, +0.011632f, +0.001895f, -0.013889f, -0.007890f, +0.010377f, +0.016548f, -0.008514f, +0.007280f, -0.002795f, - -0.001629f, +0.008821f, -0.000728f, +0.023230f, -0.015457f, +0.011004f, -0.006473f, +0.002141f, -0.002294f, +0.008917f, - +0.005131f, -0.008999f, -0.000724f, -0.000386f, -0.006217f, -0.005236f, -0.002110f, -0.001071f, +0.011215f, -0.005032f, - -0.002310f, +0.002620f, -0.001995f, -0.010912f, +0.006524f, -0.003100f, +0.000048f, -0.001623f, +0.001497f, +0.000599f, - +0.001926f, +0.002473f, -0.010952f, +0.003669f, -0.001345f, +0.005443f, -0.003227f, -0.001079f, +0.003190f, +0.001802f, - +0.001237f, +0.003551f, +0.002589f, -0.002951f, +0.001811f, +0.000386f, +0.000723f, +0.002266f, +0.003547f, -0.000230f, - +0.001734f, +0.001383f, -0.001491f, +0.003923f, +0.000748f, +0.001372f - }, - { - -0.001056f, +0.111518f, -0.018150f, -0.008704f, +0.002250f, +0.012710f, -0.026799f, -0.004600f, +0.004087f, -0.003759f, - -0.003046f, +0.004272f, -0.003921f, +0.017222f, +0.045140f, +0.059560f, -0.001753f, +0.007509f, +0.004351f, -0.021522f, - -0.030350f, +0.013165f, -0.011698f, -0.007390f, +0.020251f, -0.010927f, +0.017232f, -0.006068f, -0.004111f, +0.024132f, - -0.001643f, -0.005534f, +0.019161f, -0.017231f, +0.014570f, +0.004120f, -0.011757f, -0.003643f, -0.014154f, -0.009366f, - -0.004189f, -0.000375f, -0.000997f, -0.000846f, -0.011576f, +0.008307f, -0.010064f, +0.003918f, +0.002190f, -0.000437f, - +0.017386f, +0.001715f, -0.002263f, +0.003513f, -0.009706f, +0.000549f, +0.002530f, +0.004765f, +0.006481f, -0.005586f, - +0.005432f, -0.003385f, -0.003797f, +0.001530f, -0.003101f, +0.002747f, +0.004117f, -0.001046f, +0.001765f, -0.008189f, - +0.003877f, -0.002977f, -0.007776f, -0.003515f, -0.003816f, +0.002735f, -0.003652f, +0.001160f, -0.001126f, +0.002862f, - -0.001825f, +0.002332f, -0.002492f, -0.003118f, +0.002304f, -0.002726f, -0.001519f, +0.000403f, -0.001729f, -0.002087f, - +0.003240f, -0.003461f, +0.005297f, +0.001651f, -0.000991f, +0.000012f - } - }, - { - { - -0.008284f, +0.211916f, -0.010306f, -0.113087f, -0.033144f, +0.013997f, +0.007648f, -0.003333f, +0.024033f, -0.014551f, - +0.007578f, -0.005071f, -0.005551f, -0.005831f, -0.002184f, +0.003168f, +0.006608f, +0.029486f, -0.008127f, -0.047197f, - -0.007831f, -0.016072f, +0.001617f, +0.006841f, +0.001821f, +0.003536f, +0.000721f, -0.007313f, +0.000649f, -0.017565f, - -0.002426f, +0.014351f, +0.007330f, -0.014200f, -0.007128f, +0.007912f, +0.008431f, -0.006393f, +0.004247f, +0.002269f, - -0.011122f, -0.006936f, -0.001978f, +0.003538f, +0.006273f, -0.000749f, -0.006034f, -0.004931f, +0.000935f, -0.003660f, - -0.004349f, -0.000993f, +0.001622f, -0.004195f, -0.005609f, -0.000177f, -0.000461f, -0.007011f, -0.001850f, +0.001656f, - -0.001868f, +0.006745f, -0.000110f, +0.010284f, +0.004385f, +0.003896f, +0.001034f, -0.008420f, -0.001477f, -0.004970f, - +0.000705f, +0.000025f, -0.005521f, -0.000866f, +0.000062f, -0.000038f, +0.002134f, +0.000919f, +0.004101f, +0.001439f, - -0.001927f, -0.000771f, +0.000861f, +0.004357f, -0.000609f, +0.001527f, -0.002766f, +0.000859f, -0.001534f, +0.001519f, - +0.001600f, -0.000214f, +0.001668f, -0.000187f, +0.001765f, +0.000486f - }, - { - -0.000598f, -0.108535f, -0.004872f, +0.007982f, -0.031250f, -0.006178f, -0.005330f, +0.012059f, -0.002506f, -0.005528f, - +0.008673f, -0.004867f, +0.022286f, +0.008045f, -0.000694f, -0.007649f, -0.003188f, -0.028086f, +0.002580f, +0.022663f, - +0.006380f, -0.017815f, +0.001593f, +0.014157f, -0.001825f, -0.011083f, -0.006399f, +0.001341f, -0.012029f, +0.007723f, - -0.006819f, +0.000918f, -0.022070f, -0.001331f, +0.001508f, +0.013021f, +0.006096f, +0.003575f, -0.010269f, +0.006547f, - -0.012336f, -0.009198f, +0.000854f, -0.004919f, +0.000871f, -0.006494f, +0.009591f, -0.003922f, -0.009750f, +0.003109f, - -0.004203f, -0.001903f, +0.000391f, -0.000649f, +0.001221f, -0.002908f, +0.002478f, -0.002847f, +0.001732f, -0.009592f, - +0.001076f, +0.006217f, +0.001562f, +0.001657f, -0.002999f, +0.000557f, -0.002037f, +0.002712f, +0.004164f, -0.004019f, - +0.000878f, +0.003093f, -0.002395f, -0.000158f, -0.001083f, -0.001287f, -0.005051f, -0.003765f, +0.001534f, -0.000935f, - -0.000142f, +0.003588f, +0.003464f, +0.001883f, +0.002176f, -0.001729f, -0.002885f, -0.001783f, +0.001110f, +0.000898f, - -0.001889f, -0.000722f, -0.000781f, +0.000129f, +0.000518f, -0.005177f - }, - { - +0.000810f, -0.034339f, +0.001518f, -0.061297f, -0.027848f, -0.003135f, +0.007863f, +0.009551f, -0.010620f, -0.009218f, - +0.018721f, -0.030526f, +0.001019f, -0.015995f, -0.000957f, +0.004077f, -0.004218f, -0.000420f, -0.000418f, +0.021286f, - -0.011007f, +0.022396f, -0.002069f, -0.006647f, +0.010257f, -0.008517f, -0.010870f, -0.002472f, +0.002663f, +0.006562f, - -0.001760f, -0.003349f, -0.006364f, -0.001956f, -0.013020f, -0.001523f, +0.005650f, +0.003551f, +0.000387f, +0.001716f, - +0.002506f, +0.000876f, +0.003926f, -0.006469f, -0.001740f, +0.017873f, +0.009722f, -0.000847f, -0.004993f, -0.006134f, - +0.005822f, +0.013330f, -0.007228f, +0.002418f, +0.001299f, -0.007404f, +0.006354f, +0.002091f, +0.001296f, -0.006403f, - -0.002499f, -0.001505f, +0.006653f, -0.009321f, -0.002453f, -0.000424f, -0.003363f, +0.002584f, +0.003161f, -0.003343f, - -0.001641f, +0.007179f, +0.002148f, -0.003798f, -0.005382f, -0.005533f, +0.003938f, +0.001309f, -0.002255f, -0.000846f, - +0.002163f, +0.000998f, -0.000193f, +0.001878f, -0.001756f, -0.002520f, +0.002302f, +0.001249f, +0.000234f, -0.000395f, - +0.000770f, -0.000118f, -0.000081f, -0.001728f, -0.000183f, -0.001051f - }, - { - +0.026357f, -0.001120f, -0.066058f, +0.023750f, +0.022115f, +0.007885f, +0.001498f, -0.010550f, -0.011250f, -0.007481f, - +0.007404f, -0.013002f, -0.007172f, -0.002478f, -0.019114f, -0.007472f, +0.009424f, -0.002191f, +0.011287f, +0.020782f, - +0.009724f, +0.001069f, -0.010976f, +0.007158f, +0.010388f, -0.007375f, -0.002106f, +0.003573f, +0.002834f, -0.002244f, - +0.001598f, +0.001134f, +0.014979f, -0.015083f, -0.012404f, -0.018929f, -0.004862f, +0.000192f, -0.000759f, +0.001487f, - +0.006345f, +0.002186f, +0.010516f, +0.005716f, +0.007595f, -0.010634f, -0.007218f, +0.001414f, -0.007207f, +0.011078f, - +0.000875f, -0.000433f, +0.004218f, +0.001217f, -0.002169f, -0.000099f, +0.001680f, -0.002557f, -0.000983f, -0.009967f, - +0.006524f, +0.002402f, +0.004472f, -0.003428f, -0.002105f, -0.000917f, +0.004628f, +0.003998f, +0.001376f, -0.002288f, - -0.001619f, -0.005893f, +0.003743f, -0.000101f, -0.002241f, +0.001988f, -0.003459f, -0.000049f, -0.003516f, -0.001754f, - -0.001125f, +0.000054f, +0.002353f, +0.004160f, -0.002643f, +0.000778f, -0.003092f, -0.002232f, -0.001597f, +0.001280f, - +0.004040f, -0.003811f, +0.003506f, -0.001131f, +0.000436f, +0.000802f - }, - { - +0.000704f, -0.070258f, +0.048807f, +0.010030f, -0.002454f, -0.001901f, -0.003119f, +0.003405f, -0.004949f, -0.002756f, - +0.011019f, +0.014804f, -0.002683f, -0.024655f, -0.026595f, -0.017686f, -0.023810f, +0.019013f, -0.034848f, +0.009965f, - +0.005227f, -0.000751f, -0.008943f, +0.006411f, +0.000642f, +0.002629f, +0.011225f, +0.008464f, -0.000055f, -0.000385f, - -0.019474f, +0.001272f, +0.002632f, -0.003956f, +0.019037f, +0.006136f, +0.006757f, +0.009025f, -0.016479f, +0.000279f, - +0.018456f, -0.010209f, +0.002622f, +0.002908f, -0.006411f, -0.003720f, +0.009254f, +0.000458f, -0.006710f, +0.002784f, - +0.003579f, -0.005314f, -0.010639f, +0.002686f, -0.005508f, +0.009087f, -0.002070f, -0.000914f, -0.003086f, +0.000612f, - +0.001774f, +0.003070f, +0.003068f, +0.003171f, +0.005182f, +0.003263f, -0.004661f, -0.004028f, +0.004128f, -0.000644f, - -0.002942f, -0.001957f, +0.001283f, -0.004732f, +0.002804f, +0.000477f, +0.004617f, -0.000152f, +0.000554f, -0.002902f, - +0.000160f, -0.000834f, -0.001687f, +0.001674f, -0.004050f, +0.001398f, -0.002440f, +0.001400f, -0.002399f, -0.000905f, - -0.000021f, +0.000341f, -0.001333f, -0.000280f, +0.001364f, +0.001729f - }, - { - +0.031211f, -0.025296f, -0.043805f, -0.000340f, +0.010779f, +0.000424f, +0.001013f, -0.006142f, +0.005909f, -0.020534f, - +0.011094f, -0.015817f, +0.009222f, -0.000029f, -0.017073f, -0.015386f, -0.006253f, +0.000889f, -0.019834f, +0.001895f, - +0.014823f, -0.016816f, +0.009916f, -0.026104f, +0.033388f, +0.016828f, -0.003129f, +0.000306f, +0.004068f, +0.011888f, - +0.004006f, +0.018069f, -0.009036f, +0.000262f, -0.001819f, -0.005437f, -0.007758f, -0.005355f, +0.002260f, -0.003318f, - -0.000845f, +0.006571f, -0.014199f, -0.006024f, -0.007765f, -0.006418f, +0.015052f, -0.007830f, +0.005391f, -0.000604f, - -0.004004f, +0.009633f, -0.000381f, +0.000050f, -0.003451f, +0.006817f, +0.000390f, +0.001746f, -0.008429f, -0.001652f, - -0.000351f, +0.002244f, +0.005856f, -0.005698f, +0.003035f, -0.004569f, +0.000889f, -0.002293f, +0.003500f, +0.001621f, - +0.003687f, +0.005559f, -0.004542f, -0.004750f, +0.004766f, +0.002745f, +0.001216f, -0.002752f, -0.001558f, -0.000828f, - -0.000697f, +0.001354f, -0.002749f, -0.001776f, +0.001837f, +0.000672f, +0.002431f, +0.000668f, -0.002262f, +0.001902f, - +0.001395f, +0.003936f, -0.001430f, -0.000190f, -0.002408f, -0.002029f - }, - { - -0.002962f, +0.001650f, -0.015452f, +0.012387f, +0.003806f, +0.001584f, -0.001221f, +0.009073f, -0.003185f, -0.001695f, - -0.007192f, +0.006987f, -0.009857f, -0.000908f, -0.008365f, -0.020013f, -0.036313f, -0.022058f, +0.011456f, -0.005632f, - -0.022168f, -0.006958f, +0.023055f, +0.011149f, -0.000685f, +0.003956f, +0.006515f, -0.012409f, +0.004078f, +0.039931f, - +0.006954f, +0.000872f, -0.011132f, +0.021726f, +0.002393f, -0.012148f, +0.013730f, -0.013716f, +0.009593f, +0.007394f, - -0.002364f, -0.009237f, -0.007887f, +0.012827f, -0.003941f, -0.003476f, -0.004679f, +0.005295f, -0.012485f, +0.009847f, - -0.002509f, -0.010799f, -0.006606f, -0.002753f, +0.004294f, -0.010414f, +0.003040f, -0.000813f, -0.001559f, +0.002336f, - -0.004799f, -0.004744f, -0.003111f, -0.005403f, -0.002652f, -0.000313f, +0.004614f, +0.002303f, +0.000845f, +0.001352f, - +0.004955f, +0.004962f, +0.003299f, -0.002012f, +0.001381f, +0.002944f, +0.000434f, +0.001517f, +0.006835f, -0.004320f, - +0.000152f, -0.000178f, +0.002995f, -0.002330f, -0.003515f, -0.001238f, -0.000391f, +0.000617f, -0.003613f, +0.001373f, - -0.001977f, +0.000513f, +0.000149f, -0.001587f, -0.002105f, +0.000357f - }, - { - +0.033029f, -0.007031f, -0.032162f, -0.032087f, +0.009424f, +0.004269f, +0.011296f, -0.005803f, +0.007096f, +0.005042f, - +0.036946f, -0.008858f, -0.007749f, +0.010667f, +0.015160f, +0.029897f, -0.022896f, +0.002040f, +0.007100f, +0.013898f, - -0.002428f, +0.000680f, +0.009866f, -0.009836f, -0.000036f, -0.010142f, +0.008404f, +0.002561f, +0.011968f, +0.001979f, - -0.006472f, +0.004371f, -0.002487f, +0.001788f, -0.007429f, -0.004311f, +0.016935f, +0.003771f, -0.006614f, +0.000148f, - +0.001540f, +0.002545f, -0.011899f, -0.005126f, +0.006167f, +0.004351f, +0.004605f, -0.008920f, +0.004831f, +0.000430f, - -0.007559f, +0.005314f, -0.005065f, -0.000099f, -0.003396f, +0.008261f, +0.004001f, +0.009870f, -0.003404f, +0.000085f, - +0.007441f, -0.002696f, -0.001012f, -0.001630f, +0.004837f, +0.006099f, +0.001973f, +0.003388f, -0.001058f, +0.002182f, - +0.003131f, -0.007283f, -0.000116f, +0.003666f, -0.002576f, -0.001803f, +0.001638f, +0.003405f, -0.000426f, +0.002077f, - +0.000851f, +0.004781f, +0.000723f, +0.003090f, +0.002951f, -0.002036f, +0.000047f, +0.001794f, +0.002540f, -0.001742f, - +0.000027f, -0.002109f, +0.002220f, +0.001689f, -0.000371f, -0.001959f - }, - { - -0.004583f, +0.066019f, -0.030711f, +0.021787f, +0.006999f, +0.004808f, -0.004855f, +0.000166f, +0.001793f, -0.000683f, - -0.005929f, +0.011861f, -0.000458f, -0.018246f, -0.008287f, +0.016728f, +0.024687f, -0.000460f, +0.005441f, +0.013978f, - +0.006478f, +0.006811f, -0.007281f, -0.013531f, +0.008641f, -0.014214f, +0.008924f, -0.004956f, +0.005929f, +0.009057f, - -0.006293f, +0.002136f, -0.013094f, -0.005772f, -0.002702f, +0.000278f, +0.006967f, -0.000196f, -0.024136f, +0.001163f, - +0.004446f, -0.007083f, -0.001072f, -0.012110f, +0.007468f, -0.005862f, -0.002154f, +0.004661f, -0.002877f, -0.002886f, - +0.002353f, -0.002166f, -0.003380f, -0.006386f, +0.003288f, -0.005972f, +0.004445f, +0.004816f, -0.003217f, -0.004127f, - -0.003864f, +0.000143f, +0.002404f, -0.002028f, -0.001098f, +0.000562f, +0.002586f, +0.000611f, -0.000042f, -0.002035f, - +0.000316f, -0.000840f, -0.000133f, +0.002282f, +0.001237f, -0.001689f, -0.000077f, -0.003326f, -0.002669f, -0.001829f, - +0.001586f, +0.001330f, -0.003536f, -0.000785f, +0.001550f, +0.000412f, -0.001800f, +0.002623f, +0.001996f, +0.004139f, - -0.002007f, +0.002686f, -0.001778f, -0.000735f, +0.000657f, +0.002588f - }, - { - +0.011169f, +0.192466f, -0.017952f, -0.003520f, -0.031547f, +0.004198f, +0.038181f, -0.006771f, -0.026515f, -0.015280f, - -0.023617f, -0.003213f, +0.010251f, -0.001446f, +0.019208f, -0.014648f, -0.033020f, -0.024019f, -0.005316f, -0.021201f, - +0.009415f, -0.024054f, +0.011766f, +0.012322f, +0.013698f, +0.027984f, -0.019578f, -0.000099f, +0.002035f, -0.011860f, - -0.002701f, -0.002453f, +0.002201f, +0.010106f, +0.005204f, -0.015189f, +0.010347f, -0.009908f, +0.000289f, +0.012658f, - +0.007578f, +0.002590f, -0.018156f, +0.000503f, +0.003032f, -0.006263f, +0.006952f, +0.006979f, -0.004419f, -0.006621f, - -0.002799f, +0.003666f, +0.021310f, -0.014989f, -0.010053f, -0.000738f, -0.005143f, -0.005468f, -0.000589f, -0.003427f, - -0.000929f, +0.005402f, +0.001192f, -0.006977f, +0.003863f, -0.004899f, -0.004804f, +0.006336f, +0.001570f, -0.006679f, - +0.007548f, -0.000942f, +0.001036f, +0.001187f, +0.001387f, +0.001295f, +0.003052f, -0.002210f, -0.006474f, -0.002770f, - -0.000584f, +0.002695f, -0.007165f, +0.001094f, +0.001806f, +0.001393f, +0.006605f, +0.001148f, +0.000786f, -0.001805f, - +0.001961f, -0.001634f, -0.000213f, +0.000284f, +0.000478f, -0.003187f - }, - { - +0.000358f, -0.016243f, +0.039415f, -0.015629f, -0.006491f, -0.007252f, +0.026465f, +0.001038f, -0.028095f, -0.009910f, - -0.007449f, +0.005325f, -0.006423f, -0.005785f, -0.029156f, -0.006146f, +0.019734f, -0.016294f, +0.008590f, -0.026536f, - -0.011343f, +0.021044f, +0.020043f, -0.034287f, +0.020565f, +0.010429f, -0.005188f, +0.008501f, +0.030204f, -0.022818f, - +0.010187f, -0.009493f, -0.002421f, +0.002472f, -0.012539f, -0.019671f, -0.002688f, -0.008266f, -0.000337f, +0.005595f, - -0.008529f, -0.010224f, +0.010630f, +0.001920f, +0.006695f, +0.006351f, +0.005650f, -0.007245f, +0.005043f, +0.000050f, - -0.003435f, +0.005663f, -0.004500f, -0.014634f, +0.003749f, +0.001035f, -0.000532f, -0.010337f, +0.010307f, +0.007122f, - +0.000294f, -0.004468f, +0.009937f, +0.007090f, +0.007352f, -0.000136f, -0.000322f, -0.003436f, +0.001088f, +0.009993f, - -0.004336f, -0.002857f, -0.001839f, -0.001950f, -0.007206f, +0.000388f, +0.005725f, +0.001272f, -0.001567f, -0.002265f, - +0.004455f, -0.004390f, -0.002642f, -0.002364f, +0.001779f, +0.000073f, +0.006576f, +0.002308f, -0.000601f, +0.000350f, - -0.000688f, -0.003329f, +0.000153f, -0.003172f, -0.000061f, +0.001704f - }, - { - +0.006845f, -0.248167f, -0.014974f, +0.000818f, -0.011660f, +0.000427f, -0.041761f, -0.003855f, +0.002633f, -0.007629f, - -0.011877f, +0.020058f, -0.017764f, -0.000975f, -0.022580f, +0.004369f, +0.025015f, -0.016137f, +0.031440f, +0.012730f, - +0.002523f, -0.005741f, +0.009087f, +0.009527f, -0.004816f, +0.008312f, +0.008939f, -0.012902f, -0.008640f, +0.010484f, - -0.008314f, -0.010482f, +0.005414f, -0.005646f, +0.000650f, -0.014412f, +0.009922f, +0.011086f, -0.001104f, +0.006873f, - +0.006857f, -0.008751f, -0.008005f, +0.004468f, -0.006214f, +0.000936f, -0.005580f, -0.012118f, +0.007128f, -0.004235f, - +0.007502f, -0.002703f, +0.004315f, +0.009464f, -0.003059f, -0.002297f, -0.002304f, -0.005214f, -0.008907f, -0.001507f, - -0.000465f, -0.006727f, +0.003442f, -0.001827f, -0.007425f, -0.000842f, -0.003091f, -0.003439f, +0.006504f, +0.000766f, - -0.006903f, -0.002570f, +0.002986f, +0.003516f, -0.005125f, -0.000902f, -0.004199f, +0.004974f, +0.005100f, -0.004101f, - +0.002760f, +0.000113f, -0.000183f, +0.003707f, -0.002502f, -0.003124f, +0.000392f, -0.001650f, +0.002119f, +0.004667f, - -0.000406f, -0.001422f, +0.000721f, +0.000859f, -0.001502f, +0.002016f - }, - { - +0.000516f, -0.055750f, +0.005203f, +0.003634f, +0.004865f, +0.001358f, -0.014612f, -0.001497f, +0.005517f, -0.005240f, - -0.013020f, +0.011342f, -0.010203f, +0.021840f, -0.007016f, +0.020752f, -0.015096f, +0.033314f, +0.004027f, -0.013288f, - +0.004872f, -0.008153f, +0.030372f, -0.009677f, -0.025838f, +0.017976f, -0.013154f, -0.006012f, -0.011726f, +0.008383f, - +0.012299f, -0.027068f, +0.015655f, -0.011606f, +0.020153f, -0.014524f, -0.006272f, -0.015050f, -0.002542f, +0.012101f, - +0.005393f, -0.001793f, -0.004326f, -0.000292f, -0.004653f, +0.002822f, +0.006977f, -0.004927f, +0.001725f, +0.002553f, - -0.012781f, -0.007060f, -0.002740f, -0.000593f, +0.010153f, +0.002064f, +0.000247f, +0.003821f, -0.003860f, +0.005939f, - +0.006751f, +0.004783f, -0.012207f, +0.002900f, -0.002270f, -0.003658f, -0.008400f, +0.006549f, -0.003885f, -0.000424f, - -0.002319f, -0.000455f, -0.001967f, -0.000751f, +0.004431f, -0.004391f, -0.002466f, +0.005837f, -0.001003f, +0.006956f, - -0.006370f, +0.004166f, +0.005139f, -0.004942f, +0.008061f, +0.004353f, +0.000630f, -0.001094f, +0.001358f, -0.005992f, - +0.000164f, +0.001916f, +0.004626f, -0.003660f, -0.001642f, -0.001202f - }, - { - +0.010789f, -0.175653f, -0.029908f, +0.016369f, +0.009169f, +0.006584f, +0.010570f, +0.017193f, -0.011048f, +0.020429f, - +0.006000f, +0.007320f, -0.015925f, -0.008513f, -0.014595f, +0.009792f, -0.003887f, -0.015605f, +0.013494f, +0.000620f, - +0.005423f, +0.010729f, -0.015435f, -0.001461f, +0.023774f, -0.010643f, +0.006332f, +0.002185f, -0.004695f, -0.013842f, - -0.017396f, -0.002024f, +0.003904f, -0.007068f, +0.007076f, +0.005849f, +0.004418f, -0.008591f, +0.009661f, +0.003732f, - -0.005799f, -0.007265f, +0.014168f, +0.013830f, -0.017635f, +0.006696f, -0.002155f, +0.007468f, +0.002225f, +0.004755f, - +0.001064f, -0.005187f, -0.002352f, -0.001073f, -0.011027f, +0.004754f, -0.007301f, +0.006598f, +0.007439f, -0.005714f, - +0.006215f, -0.005297f, -0.005472f, -0.003389f, +0.000646f, -0.002441f, +0.002651f, -0.003615f, +0.001636f, -0.001118f, - +0.001402f, +0.001335f, -0.003874f, -0.002508f, +0.004887f, +0.000035f, -0.000256f, -0.003232f, +0.002327f, +0.000889f, - +0.003413f, +0.003909f, -0.000031f, -0.000858f, +0.000534f, -0.001011f, +0.005526f, +0.000262f, +0.000216f, +0.001729f, - +0.001162f, +0.000066f, -0.001699f, +0.003160f, +0.003181f, -0.000008f - }, - { - +0.001136f, +0.052935f, +0.024114f, -0.025512f, +0.019288f, +0.005259f, -0.021281f, -0.003652f, -0.004851f, +0.001275f, - +0.008506f, +0.004474f, -0.012318f, +0.000069f, +0.097733f, +0.011397f, +0.016205f, +0.006543f, +0.027162f, -0.022119f, - -0.014591f, -0.004744f, -0.004808f, -0.002164f, +0.010156f, -0.012384f, +0.005015f, +0.002684f, +0.009982f, +0.018752f, - -0.000297f, -0.018000f, +0.016541f, -0.016329f, +0.013707f, +0.002132f, +0.002211f, -0.019315f, -0.012451f, +0.000628f, - -0.003207f, -0.013271f, -0.005688f, -0.004620f, -0.000666f, +0.002830f, -0.005001f, -0.002557f, +0.004625f, +0.006932f, - +0.007375f, +0.003997f, +0.000389f, -0.001810f, -0.011559f, -0.000087f, +0.007744f, +0.003003f, +0.008099f, -0.004655f, - +0.002869f, -0.002005f, +0.000840f, -0.004478f, -0.005622f, +0.005667f, -0.000961f, +0.008696f, -0.001405f, -0.004397f, - +0.001254f, -0.007088f, -0.002150f, -0.001208f, -0.000878f, -0.005978f, -0.000890f, +0.002536f, -0.001153f, -0.003578f, - +0.000861f, -0.000779f, -0.002869f, +0.001872f, -0.000341f, -0.003433f, +0.000134f, -0.000977f, -0.004042f, +0.000442f, - +0.000448f, -0.002007f, +0.003799f, +0.001460f, -0.000754f, -0.001352f - } - }, - { - { - +0.009504f, +0.187348f, -0.012059f, -0.061788f, +0.010334f, +0.010615f, -0.000031f, -0.001678f, +0.030926f, +0.002686f, - +0.002748f, -0.022157f, -0.008670f, -0.001256f, +0.000231f, -0.002442f, -0.004074f, +0.022603f, -0.010895f, -0.007435f, - +0.034787f, -0.008059f, -0.005709f, -0.005606f, -0.015695f, -0.010158f, -0.003928f, +0.000585f, +0.021039f, +0.006594f, - +0.009576f, +0.009492f, +0.019204f, -0.003776f, -0.004545f, +0.013093f, +0.015907f, -0.003357f, +0.000770f, +0.009592f, - -0.002009f, -0.002201f, -0.004884f, -0.002138f, +0.001203f, +0.003486f, +0.001395f, +0.005245f, +0.002611f, -0.005807f, - +0.002515f, -0.000255f, -0.004365f, -0.004304f, -0.008688f, -0.006056f, -0.000967f, -0.008859f, -0.004401f, +0.000015f, - -0.005477f, +0.002741f, -0.007955f, +0.004996f, +0.002315f, -0.002594f, -0.001000f, -0.006435f, +0.001534f, -0.004301f, - -0.002264f, -0.000053f, +0.000474f, +0.003361f, -0.001698f, -0.002596f, -0.001223f, -0.001935f, +0.002187f, +0.001380f, - -0.003313f, -0.001019f, +0.000199f, +0.001317f, -0.002390f, +0.001231f, -0.002346f, +0.001451f, -0.002059f, +0.002398f, - +0.002660f, -0.001525f, +0.000991f, +0.000397f, +0.001678f, +0.000909f - }, - { - +0.002140f, -0.030711f, +0.062358f, +0.040940f, -0.032137f, -0.008529f, +0.001171f, +0.019266f, -0.003976f, -0.005665f, - -0.003053f, -0.014908f, +0.011386f, -0.001424f, +0.002018f, -0.015377f, +0.011238f, +0.008119f, +0.022738f, +0.014047f, - +0.012971f, -0.016088f, -0.006644f, +0.000746f, -0.004702f, -0.002425f, +0.003044f, +0.006096f, -0.013817f, +0.007779f, - +0.003447f, +0.011844f, -0.020653f, +0.002464f, +0.001015f, +0.001286f, +0.001985f, +0.012055f, -0.008302f, +0.004956f, - -0.006777f, +0.005513f, +0.006333f, +0.000570f, +0.013167f, -0.001304f, +0.004810f, -0.011983f, -0.011343f, +0.005663f, - +0.006458f, +0.006214f, +0.002078f, -0.002868f, -0.008269f, -0.004432f, +0.005655f, -0.000198f, -0.001939f, -0.010845f, - +0.007334f, +0.006883f, -0.004884f, +0.000305f, -0.004835f, +0.002152f, +0.004339f, +0.003628f, +0.004947f, -0.004279f, - -0.002643f, -0.000674f, -0.001199f, +0.001768f, -0.000332f, -0.000628f, +0.000571f, +0.002960f, +0.003834f, +0.002008f, - +0.002277f, +0.001563f, +0.001482f, -0.000703f, +0.000726f, -0.000215f, +0.000478f, -0.000683f, +0.000729f, +0.001604f, - +0.004140f, +0.003390f, +0.000829f, -0.001179f, -0.000054f, -0.003338f - }, - { - +0.000289f, -0.150191f, -0.070355f, +0.023721f, +0.010359f, -0.006315f, +0.011318f, -0.003558f, -0.019121f, -0.005369f, - +0.013277f, -0.029464f, +0.011823f, -0.006042f, +0.013857f, +0.019905f, +0.001025f, -0.021772f, -0.028071f, +0.009526f, - -0.012972f, +0.013716f, -0.008088f, +0.002798f, +0.009902f, -0.012188f, -0.020037f, -0.002511f, +0.002386f, +0.000167f, - -0.000310f, +0.000688f, -0.015307f, -0.000478f, -0.003258f, +0.001486f, -0.004433f, -0.013741f, -0.008813f, -0.001638f, - +0.007298f, +0.003657f, +0.008505f, -0.010370f, -0.013335f, +0.008863f, +0.002562f, -0.001253f, +0.001125f, -0.003605f, - +0.005147f, +0.007894f, -0.007800f, +0.007390f, +0.001017f, -0.004968f, +0.005402f, +0.001422f, +0.004357f, -0.004127f, - -0.003830f, -0.004198f, +0.005892f, -0.002150f, -0.001519f, -0.003816f, -0.002713f, +0.000430f, +0.002127f, -0.004176f, - -0.004164f, +0.001434f, +0.001805f, -0.000643f, -0.005391f, -0.003857f, +0.007455f, +0.003826f, -0.001379f, -0.000994f, - +0.002418f, +0.001409f, -0.001471f, +0.002197f, -0.000891f, -0.003724f, +0.001971f, +0.003042f, +0.002708f, +0.001604f, - +0.001739f, -0.001579f, +0.001176f, -0.000143f, +0.000540f, -0.000756f - }, - { - -0.025328f, +0.003560f, +0.009409f, +0.016590f, -0.002509f, +0.003725f, +0.003109f, -0.012508f, -0.011247f, -0.018131f, - +0.002154f, -0.006564f, +0.003213f, +0.006994f, -0.011376f, -0.003750f, +0.006792f, -0.006331f, +0.002845f, +0.010238f, - -0.000957f, -0.003113f, -0.015548f, +0.000945f, +0.015491f, +0.004100f, -0.008724f, +0.004796f, +0.000001f, -0.004612f, - +0.011883f, +0.002103f, +0.007279f, -0.007896f, +0.004302f, +0.006814f, +0.010296f, -0.003054f, -0.000607f, +0.000113f, - +0.016394f, +0.006725f, +0.007116f, +0.004418f, -0.001198f, -0.001348f, +0.000502f, +0.002397f, -0.007069f, +0.005170f, - -0.001813f, -0.000171f, +0.004793f, +0.002298f, +0.000882f, -0.001702f, +0.001662f, +0.002742f, -0.001986f, -0.009686f, - +0.006396f, -0.003158f, +0.005833f, -0.000173f, -0.002373f, +0.005536f, +0.004615f, +0.004295f, +0.002895f, -0.005045f, - +0.000042f, -0.001440f, +0.004147f, +0.003172f, +0.000009f, +0.001798f, -0.002398f, +0.001094f, -0.002561f, -0.001477f, - -0.000711f, -0.000180f, -0.000053f, +0.003667f, -0.001762f, +0.000999f, -0.002009f, +0.001239f, +0.000273f, +0.000774f, - +0.001639f, -0.003708f, +0.002001f, -0.002350f, +0.000982f, +0.000801f - }, - { - +0.000464f, -0.094563f, +0.029559f, +0.017711f, -0.010004f, -0.000279f, +0.002104f, +0.005286f, +0.002103f, +0.000984f, - +0.009941f, +0.009697f, -0.000405f, -0.017636f, -0.009544f, +0.011806f, -0.023466f, -0.000737f, -0.028245f, +0.004729f, - -0.008466f, -0.011119f, -0.032608f, +0.014232f, +0.012028f, -0.013373f, -0.002037f, +0.006039f, -0.003720f, +0.008070f, - +0.000848f, +0.000498f, +0.001879f, -0.007926f, +0.002807f, -0.002214f, +0.014521f, +0.010545f, -0.008701f, -0.003194f, - +0.019560f, -0.011247f, -0.006617f, +0.001013f, -0.004133f, -0.002645f, +0.002128f, -0.002796f, -0.007890f, -0.001023f, - +0.003653f, +0.004191f, -0.004835f, +0.003035f, -0.000823f, +0.007790f, -0.006224f, +0.000505f, -0.004987f, -0.005157f, - -0.003581f, +0.001578f, +0.002315f, -0.002071f, -0.000598f, -0.001004f, -0.003447f, -0.002743f, -0.000465f, +0.002627f, - +0.002181f, +0.001678f, +0.000500f, -0.005540f, +0.004054f, +0.002309f, +0.005990f, -0.001780f, -0.000880f, -0.003378f, - -0.000131f, -0.001451f, +0.000445f, +0.002954f, -0.006550f, +0.000929f, -0.001088f, +0.001270f, -0.002273f, -0.001227f, - -0.002244f, -0.000337f, -0.001340f, +0.000523f, -0.000100f, -0.000909f - }, - { - -0.025869f, -0.046324f, +0.030387f, -0.005907f, -0.008810f, -0.006752f, +0.001815f, +0.011722f, +0.018698f, -0.022711f, - +0.011689f, -0.022791f, +0.014339f, +0.009236f, -0.013826f, -0.010059f, -0.006067f, +0.001358f, -0.011592f, +0.003114f, - +0.008400f, -0.012585f, +0.012635f, -0.021297f, +0.029087f, +0.007562f, -0.001258f, -0.003342f, -0.009914f, +0.004673f, - +0.004241f, +0.006941f, -0.010788f, +0.009838f, +0.006126f, -0.006452f, -0.012240f, -0.011162f, -0.002734f, -0.006073f, - -0.004176f, +0.003269f, -0.011969f, +0.000941f, +0.005932f, -0.002950f, +0.010062f, -0.015457f, -0.003085f, -0.004630f, - -0.011150f, +0.004762f, +0.006877f, +0.006874f, -0.005843f, +0.004501f, -0.000465f, +0.001276f, -0.005337f, -0.000872f, - +0.002352f, +0.003251f, -0.000697f, -0.005401f, +0.005783f, -0.003123f, +0.002333f, -0.002347f, +0.002379f, -0.000193f, - -0.000209f, +0.002130f, -0.002922f, -0.004071f, +0.001067f, +0.001603f, +0.001836f, -0.000800f, -0.000920f, +0.000002f, - +0.000257f, -0.000033f, -0.002123f, -0.002391f, +0.001101f, -0.000786f, -0.000534f, +0.000416f, -0.003133f, -0.000175f, - +0.000314f, +0.001564f, -0.002012f, +0.001090f, -0.001092f, -0.001314f - }, - { - +0.000937f, +0.026954f, -0.026992f, +0.003543f, -0.007243f, +0.000738f, -0.000702f, +0.004185f, -0.015091f, +0.001493f, - -0.001921f, +0.011345f, +0.003906f, +0.008712f, -0.004756f, +0.003403f, -0.005513f, -0.012579f, +0.016276f, -0.003764f, - -0.030722f, -0.014688f, +0.001998f, +0.006487f, -0.009863f, -0.002957f, +0.017165f, -0.006388f, +0.002082f, +0.015058f, - -0.003413f, +0.008147f, -0.002627f, +0.017876f, +0.001753f, -0.013045f, +0.013483f, -0.007088f, -0.000763f, -0.003371f, - +0.000111f, +0.003855f, -0.000645f, +0.006969f, -0.000987f, +0.001133f, -0.005878f, +0.009365f, -0.002302f, +0.009134f, - -0.004647f, -0.006359f, +0.001690f, -0.009037f, -0.002956f, -0.008732f, +0.005723f, -0.001487f, +0.001686f, +0.008774f, - -0.003610f, -0.003363f, -0.002633f, -0.005146f, -0.000856f, +0.001962f, +0.006672f, +0.000391f, -0.000584f, +0.001610f, - +0.003863f, +0.000064f, +0.002017f, -0.001508f, +0.001595f, +0.000946f, -0.002919f, -0.002173f, +0.006846f, -0.004198f, - +0.002263f, -0.003111f, +0.000641f, -0.002508f, -0.001804f, +0.002307f, +0.000278f, +0.002113f, -0.004081f, +0.000575f, - -0.003132f, -0.000276f, -0.000632f, -0.001627f, -0.002027f, +0.001712f - }, - { - -0.033157f, -0.035432f, +0.038230f, -0.045814f, -0.012016f, -0.006809f, +0.013628f, -0.003507f, -0.000647f, -0.007980f, - +0.039803f, +0.002501f, -0.002000f, +0.012512f, +0.000663f, +0.008615f, -0.017723f, +0.006341f, -0.003980f, -0.006933f, - -0.012577f, +0.002634f, +0.018901f, -0.004475f, -0.000447f, -0.000887f, +0.004443f, -0.007435f, -0.002531f, +0.000643f, - +0.004459f, +0.009064f, -0.012626f, -0.012228f, -0.005149f, -0.003643f, +0.009453f, +0.000404f, -0.008742f, -0.006439f, - -0.002244f, +0.006726f, +0.002498f, +0.003255f, +0.003539f, -0.002401f, +0.009220f, +0.006006f, +0.013395f, +0.003485f, - -0.005781f, +0.003253f, -0.002970f, +0.008025f, -0.001265f, +0.002984f, +0.000374f, +0.007758f, -0.005257f, -0.000237f, - +0.003215f, -0.006080f, +0.004715f, -0.002616f, +0.000905f, +0.006347f, +0.001331f, +0.004128f, +0.001295f, +0.002913f, - +0.002388f, -0.007335f, +0.001057f, +0.005243f, -0.002942f, -0.001955f, +0.000058f, -0.000151f, -0.005248f, -0.000220f, - +0.000310f, +0.003247f, -0.003088f, -0.001945f, +0.000455f, +0.000679f, +0.002250f, -0.000902f, -0.000062f, -0.000875f, - +0.001476f, -0.002924f, +0.000360f, -0.000172f, +0.001323f, -0.000663f - }, - { - -0.002042f, +0.042587f, -0.090742f, +0.008167f, -0.006677f, +0.000931f, +0.000330f, +0.002854f, +0.003076f, +0.002181f, - -0.012140f, +0.001715f, +0.018401f, +0.008208f, -0.009851f, -0.021333f, -0.010745f, +0.004063f, +0.009793f, +0.002446f, - -0.005851f, +0.003289f, +0.001042f, -0.000134f, +0.008335f, -0.019492f, +0.019854f, -0.005814f, -0.008327f, +0.009663f, - -0.011299f, -0.000790f, -0.009671f, -0.000241f, +0.006461f, +0.007996f, +0.003011f, +0.009538f, -0.015602f, +0.009078f, - +0.006565f, -0.007145f, +0.002204f, -0.013553f, +0.006098f, +0.000037f, -0.004169f, -0.006653f, -0.004880f, -0.002013f, - -0.002540f, +0.000248f, +0.001795f, -0.005893f, +0.002178f, -0.006268f, +0.004308f, +0.000642f, -0.002943f, +0.000669f, - -0.002933f, +0.001769f, -0.000256f, -0.004976f, +0.001732f, -0.002506f, -0.000675f, -0.001927f, -0.001723f, -0.002044f, - -0.001083f, -0.001453f, +0.001832f, +0.002281f, +0.001236f, +0.000217f, +0.003249f, +0.001146f, -0.000849f, -0.001202f, - -0.000283f, -0.000016f, -0.001884f, +0.000902f, -0.001233f, -0.000892f, -0.000846f, +0.001669f, -0.000190f, +0.002126f, - -0.001873f, +0.002642f, -0.002723f, +0.001536f, +0.002885f, +0.000572f - }, - { - -0.009374f, +0.151674f, -0.038720f, +0.007307f, -0.012775f, +0.009269f, +0.016016f, +0.013825f, +0.000301f, -0.008097f, - -0.028067f, -0.006507f, +0.005967f, -0.017595f, +0.009499f, +0.014516f, +0.003436f, -0.008062f, -0.012254f, -0.045322f, - -0.006626f, -0.017842f, +0.000361f, +0.006685f, -0.008029f, +0.020701f, -0.004702f, -0.000253f, +0.007285f, -0.010362f, - +0.005249f, -0.004686f, +0.007334f, +0.012826f, +0.003325f, -0.010764f, +0.003873f, -0.015096f, -0.010554f, -0.004501f, - -0.002282f, +0.009329f, -0.014698f, +0.002012f, +0.005141f, -0.009941f, +0.002261f, +0.013600f, +0.004534f, +0.003502f, - +0.000106f, +0.001509f, +0.019740f, -0.001805f, +0.005644f, +0.001494f, -0.007778f, -0.004181f, -0.001149f, -0.014369f, - +0.000173f, +0.006048f, +0.001072f, -0.006761f, +0.001036f, +0.001068f, -0.003585f, -0.001443f, -0.002036f, -0.002977f, - +0.005717f, -0.001303f, +0.003144f, -0.004199f, -0.003025f, -0.002714f, +0.002850f, +0.003804f, +0.001515f, -0.000535f, - -0.003296f, +0.002493f, -0.004496f, +0.001585f, -0.001481f, +0.000741f, +0.004727f, +0.000543f, +0.003841f, -0.000851f, - +0.002790f, +0.000903f, -0.000772f, -0.002641f, +0.000868f, -0.002434f - }, - { - +0.002155f, -0.081058f, +0.001664f, +0.008290f, +0.000868f, -0.002923f, +0.030406f, +0.008415f, -0.012071f, -0.004618f, - -0.008523f, +0.016549f, +0.003779f, +0.001812f, -0.005633f, +0.009904f, +0.009864f, -0.019748f, +0.018282f, -0.017982f, - -0.015988f, +0.013211f, -0.006847f, -0.036677f, +0.008493f, +0.002847f, -0.005478f, -0.003491f, +0.009314f, -0.033379f, - +0.018102f, +0.003339f, +0.003535f, +0.002448f, -0.009108f, -0.021666f, -0.005791f, -0.013605f, +0.000583f, +0.002306f, - -0.012302f, -0.005285f, +0.006048f, -0.010181f, +0.010586f, +0.009559f, -0.004851f, -0.011545f, +0.004277f, +0.004722f, - -0.003853f, -0.000092f, -0.001758f, -0.003460f, +0.012137f, +0.005315f, +0.002943f, -0.012130f, +0.008583f, +0.007453f, - +0.002508f, -0.007963f, -0.002301f, -0.000791f, +0.007820f, -0.005696f, -0.002871f, -0.003421f, -0.001788f, +0.009335f, - -0.002574f, -0.001971f, +0.000939f, +0.000048f, -0.005354f, -0.000758f, +0.001849f, +0.003603f, +0.000706f, -0.005809f, - +0.003011f, -0.003977f, -0.000147f, +0.002482f, +0.006750f, -0.001096f, +0.002714f, +0.001850f, -0.000133f, +0.003816f, - +0.001364f, -0.002437f, +0.003246f, -0.003148f, -0.002123f, +0.001964f - }, - { - +0.002888f, -0.203379f, +0.059325f, +0.033980f, -0.024186f, -0.002645f, -0.047073f, -0.009417f, +0.002354f, -0.008323f, - -0.059243f, +0.002044f, +0.000173f, +0.013222f, -0.028062f, -0.029298f, +0.001099f, -0.023684f, +0.029673f, +0.000222f, - -0.004854f, +0.002452f, -0.009830f, -0.008764f, -0.006291f, -0.001108f, -0.000538f, -0.005871f, +0.001651f, +0.016018f, - -0.000036f, -0.003929f, +0.001491f, -0.014357f, +0.006092f, -0.004130f, -0.004429f, -0.008355f, -0.019710f, +0.007935f, - +0.015975f, +0.002700f, +0.000357f, +0.000260f, +0.005747f, +0.005763f, -0.010641f, -0.009106f, +0.002670f, -0.009214f, - +0.007662f, -0.007016f, -0.010784f, +0.006357f, -0.007211f, -0.002924f, +0.002557f, +0.004780f, -0.001193f, -0.004407f, - -0.002727f, -0.005582f, -0.002039f, -0.009891f, -0.001796f, +0.002930f, +0.000318f, +0.001957f, +0.007714f, +0.008229f, - -0.000533f, -0.002073f, +0.006202f, +0.004409f, -0.006208f, +0.003114f, -0.003858f, -0.000753f, +0.005443f, -0.000746f, - +0.001213f, +0.002393f, +0.003479f, +0.004201f, -0.002356f, -0.002068f, +0.000984f, -0.003344f, -0.000610f, +0.004448f, - +0.000782f, -0.000877f, -0.000108f, -0.001980f, -0.002653f, +0.002178f - }, - { - +0.001160f, -0.074540f, +0.008472f, +0.014353f, +0.008042f, +0.003586f, -0.014260f, -0.006320f, +0.001192f, -0.003056f, - -0.002218f, +0.017282f, +0.000052f, +0.036982f, +0.012997f, +0.028732f, -0.016170f, +0.015882f, +0.001054f, +0.023427f, - +0.008227f, -0.045981f, -0.001729f, -0.001089f, -0.026353f, -0.003086f, -0.024843f, +0.005412f, +0.010134f, +0.011727f, - +0.015130f, -0.016361f, +0.015199f, -0.004684f, +0.020494f, -0.021833f, +0.000488f, +0.006891f, +0.008942f, +0.000757f, - -0.011637f, -0.014303f, -0.014355f, -0.000204f, +0.001401f, -0.004136f, +0.001464f, -0.006286f, +0.002840f, -0.000272f, - -0.011569f, +0.001132f, +0.003809f, +0.005679f, +0.004188f, +0.001833f, +0.001752f, +0.002597f, -0.000017f, +0.002980f, - +0.004820f, +0.008642f, -0.001438f, +0.007368f, -0.004526f, -0.000563f, -0.009246f, +0.004428f, +0.004127f, +0.001168f, - -0.002829f, +0.005122f, +0.001809f, -0.001475f, +0.006051f, +0.002939f, -0.001173f, -0.002687f, -0.003954f, +0.004755f, - -0.006206f, +0.004869f, +0.003773f, -0.009983f, +0.003613f, +0.004750f, +0.005000f, -0.001604f, -0.000585f, -0.001547f, - +0.004596f, +0.001129f, +0.001617f, -0.002738f, +0.001022f, +0.000855f - }, - { - -0.005385f, -0.137403f, +0.015889f, -0.002486f, +0.014457f, -0.003387f, -0.026269f, +0.000356f, -0.028098f, +0.002046f, - +0.013381f, +0.000352f, -0.023516f, +0.012333f, +0.029464f, +0.030459f, -0.004785f, -0.013455f, +0.018689f, -0.006663f, - -0.005530f, +0.000846f, +0.007600f, +0.020166f, +0.025685f, +0.000214f, +0.013116f, -0.001720f, -0.000195f, -0.004095f, - -0.016975f, -0.006934f, +0.012872f, +0.015574f, +0.004161f, -0.018208f, -0.015093f, -0.011700f, +0.006582f, +0.004216f, - -0.001656f, -0.018859f, -0.008852f, +0.001074f, -0.016805f, +0.000768f, -0.000566f, +0.003530f, +0.013717f, +0.017090f, - -0.000314f, -0.004834f, -0.004075f, +0.001344f, +0.000297f, +0.008819f, -0.011677f, +0.005363f, +0.006644f, -0.006074f, - +0.005198f, -0.007471f, -0.003295f, +0.002252f, -0.002676f, -0.006155f, +0.001898f, -0.004631f, +0.002386f, -0.001710f, - -0.000192f, +0.003963f, +0.003258f, -0.002492f, +0.003103f, -0.004436f, -0.002177f, -0.003066f, -0.001494f, -0.006018f, - -0.002629f, +0.002486f, +0.002338f, -0.000232f, -0.002171f, -0.000951f, +0.005019f, -0.001574f, -0.001510f, -0.000353f, - -0.000111f, +0.001866f, +0.000477f, +0.000665f, -0.000308f, +0.000701f - }, - { - +0.002482f, -0.020647f, -0.017754f, -0.017158f, +0.002603f, -0.010953f, -0.018608f, +0.002903f, -0.005078f, +0.009175f, - +0.007840f, -0.009862f, -0.008827f, -0.028504f, +0.055435f, -0.011655f, +0.009159f, +0.000090f, +0.034748f, +0.006828f, - -0.001374f, -0.010886f, +0.002487f, -0.006816f, +0.001046f, -0.009204f, -0.010281f, -0.004304f, +0.007749f, -0.003590f, - -0.009301f, -0.008543f, +0.017258f, -0.019394f, +0.001422f, +0.002738f, +0.000449f, -0.018001f, +0.001693f, +0.011565f, - -0.001238f, -0.009091f, -0.009774f, -0.001629f, +0.010753f, -0.006589f, -0.010621f, +0.001331f, +0.005213f, +0.002145f, - +0.000940f, -0.000574f, -0.001866f, +0.000250f, -0.007043f, +0.004967f, +0.007649f, +0.002720f, +0.006541f, -0.003602f, - +0.001620f, -0.003967f, +0.007019f, +0.000443f, -0.003439f, +0.002332f, -0.001497f, +0.009736f, -0.000101f, -0.002550f, - -0.000208f, -0.003761f, +0.006292f, +0.003473f, +0.000731f, -0.004082f, -0.001415f, +0.001125f, -0.000200f, -0.002399f, - +0.004156f, -0.000352f, -0.002140f, +0.001132f, -0.003253f, -0.004116f, -0.000079f, -0.002084f, -0.005067f, -0.001006f, - +0.000031f, +0.000658f, +0.002747f, +0.000641f, +0.001367f, +0.000498f - } - }, - { - { - -0.014571f, +0.061120f, +0.085737f, -0.014648f, -0.005062f, +0.002856f, +0.003101f, +0.016160f, +0.009665f, +0.018014f, - -0.018593f, -0.025944f, -0.004214f, +0.009638f, -0.012331f, +0.005317f, +0.001547f, +0.003646f, -0.007534f, +0.002823f, - +0.040321f, -0.008266f, -0.015840f, -0.013576f, -0.006040f, -0.002154f, -0.010699f, +0.003118f, +0.004384f, +0.013211f, - +0.015884f, +0.008460f, +0.010051f, +0.001778f, -0.006321f, +0.011922f, +0.015857f, +0.004827f, +0.003398f, +0.009110f, - -0.003037f, -0.006983f, +0.000549f, -0.005964f, -0.002748f, +0.002644f, +0.005489f, +0.007547f, -0.003628f, +0.002895f, - -0.002592f, -0.003655f, -0.000236f, -0.005656f, -0.005448f, -0.003752f, -0.003666f, -0.004591f, -0.003133f, -0.001210f, - -0.004011f, -0.000190f, -0.000640f, -0.000288f, -0.001777f, -0.003557f, +0.000831f, -0.004510f, -0.000943f, -0.003366f, - -0.000698f, -0.001000f, +0.003725f, +0.001604f, -0.001932f, -0.000700f, -0.004041f, -0.000069f, +0.001774f, -0.000339f, - -0.001699f, -0.003754f, +0.000768f, +0.000158f, +0.000445f, -0.002144f, +0.001884f, -0.002222f, +0.001153f, +0.000818f, - +0.001326f, -0.001039f, -0.000817f, +0.002276f, +0.000555f, -0.001048f - }, - { - -0.000605f, +0.055467f, -0.000155f, +0.033266f, -0.001835f, -0.008020f, -0.003409f, +0.016384f, +0.002388f, +0.003463f, - -0.014185f, -0.024166f, +0.014435f, -0.004548f, -0.000251f, -0.000678f, +0.002841f, +0.022380f, +0.005863f, +0.006151f, - +0.014995f, -0.001626f, -0.003489f, -0.014162f, -0.006211f, -0.004654f, +0.009124f, +0.002222f, -0.001764f, +0.001927f, - +0.013264f, +0.005441f, -0.016894f, +0.006306f, -0.012908f, +0.009334f, -0.011009f, +0.020839f, -0.005326f, +0.005549f, - -0.006869f, +0.004198f, +0.005106f, +0.007778f, +0.008445f, +0.002920f, +0.002679f, -0.011591f, -0.005984f, +0.004446f, - +0.002370f, +0.003003f, -0.000053f, +0.000792f, -0.003716f, -0.003892f, -0.000164f, +0.000818f, -0.002427f, -0.005703f, - +0.003314f, +0.006230f, -0.000361f, -0.005024f, -0.000111f, +0.000679f, +0.003818f, +0.001665f, +0.003895f, -0.004306f, - +0.000123f, -0.000008f, -0.001697f, -0.000006f, +0.000754f, -0.000300f, +0.002914f, +0.003495f, +0.001364f, +0.005211f, - +0.001413f, +0.001980f, +0.000111f, -0.001561f, -0.001617f, +0.000140f, +0.001922f, -0.000760f, +0.001611f, +0.000427f, - +0.006437f, +0.001080f, +0.000789f, +0.000709f, -0.001846f, -0.001505f - }, - { - -0.000671f, -0.179046f, -0.030861f, +0.057259f, -0.014365f, +0.003498f, +0.007378f, -0.004015f, -0.014157f, +0.004880f, - +0.000217f, -0.022193f, +0.003267f, +0.005551f, +0.011252f, +0.009458f, -0.007527f, -0.011795f, -0.015632f, -0.003957f, - -0.003309f, +0.000100f, -0.001767f, +0.007812f, -0.009154f, -0.010553f, -0.006451f, +0.000708f, -0.005408f, +0.002591f, - +0.003804f, -0.006044f, -0.001763f, -0.016922f, +0.004504f, -0.003064f, -0.009022f, -0.014469f, -0.009789f, -0.004564f, - +0.011285f, +0.002526f, +0.005683f, -0.008177f, -0.002926f, +0.004220f, -0.000350f, -0.004191f, +0.003471f, +0.003498f, - -0.000944f, -0.005316f, +0.007077f, -0.000285f, -0.002034f, -0.000042f, +0.007773f, +0.000992f, -0.000710f, +0.000275f, - -0.005720f, -0.000605f, -0.000533f, +0.004455f, -0.006327f, +0.000567f, -0.000804f, +0.000775f, -0.000783f, -0.000006f, - -0.005899f, -0.000573f, +0.001931f, +0.001391f, -0.005393f, -0.000785f, +0.001665f, +0.001509f, +0.003107f, -0.000901f, - +0.001126f, -0.000015f, +0.001531f, +0.002504f, -0.000241f, -0.001932f, +0.000833f, +0.002276f, +0.001593f, +0.002287f, - +0.000959f, -0.001274f, +0.001312f, +0.000324f, +0.000279f, -0.001010f - }, - { - +0.018376f, -0.044508f, -0.018015f, +0.027672f, +0.007527f, +0.003362f, +0.005376f, -0.013116f, -0.013011f, -0.009585f, - -0.002557f, -0.006996f, +0.011176f, +0.002538f, -0.014908f, -0.006044f, -0.002215f, +0.023706f, -0.025270f, +0.011278f, - -0.000762f, -0.006977f, -0.004701f, +0.009740f, +0.004252f, +0.011175f, -0.027033f, +0.019782f, -0.005326f, -0.000558f, - +0.013811f, +0.010054f, -0.004539f, -0.000849f, +0.007499f, +0.005176f, +0.006893f, +0.005532f, -0.005703f, +0.000328f, - +0.012223f, +0.011493f, -0.000876f, +0.005479f, -0.000209f, +0.002677f, -0.008169f, +0.010349f, -0.004350f, -0.001820f, - -0.000129f, +0.003963f, +0.001788f, +0.005976f, -0.001134f, -0.001661f, +0.001193f, +0.002800f, -0.002239f, -0.002583f, - -0.003701f, +0.002858f, +0.001007f, +0.005184f, -0.006750f, +0.006594f, +0.002743f, +0.004526f, +0.000428f, -0.000676f, - -0.003538f, +0.003011f, -0.000977f, +0.007352f, -0.001137f, +0.001032f, -0.000362f, +0.000268f, -0.001141f, -0.002016f, - +0.001778f, -0.000608f, +0.000582f, +0.000433f, -0.002110f, +0.001945f, +0.001621f, +0.000287f, -0.000834f, +0.000504f, - -0.000663f, -0.002088f, +0.001397f, +0.000349f, -0.001344f, -0.000865f - }, - { - +0.000040f, -0.048580f, -0.014247f, +0.019114f, -0.005997f, -0.001130f, +0.001600f, -0.001790f, +0.011267f, +0.002245f, - +0.013994f, -0.001880f, -0.002538f, -0.004313f, -0.000596f, -0.001963f, -0.003183f, -0.016789f, -0.006225f, -0.018741f, - -0.009323f, -0.004498f, -0.018423f, +0.000140f, +0.006253f, +0.009323f, -0.016346f, -0.001503f, -0.000097f, -0.001402f, - +0.006753f, +0.000793f, +0.000918f, +0.000902f, -0.005684f, -0.002855f, +0.011510f, +0.010591f, -0.004704f, -0.000910f, - +0.007176f, -0.000342f, -0.008503f, +0.000392f, -0.006343f, +0.004763f, +0.003227f, -0.004470f, -0.008507f, -0.000564f, - -0.000022f, +0.008051f, +0.000598f, +0.004106f, -0.001163f, +0.000588f, -0.000414f, -0.000807f, -0.000783f, -0.003693f, - -0.005601f, +0.002240f, -0.000002f, -0.006359f, +0.003528f, -0.005909f, -0.001161f, +0.003931f, -0.005417f, +0.001241f, - +0.004146f, +0.002206f, -0.001833f, +0.000132f, +0.000937f, +0.001506f, +0.002000f, -0.001544f, +0.000542f, -0.002541f, - -0.001423f, +0.004030f, -0.001930f, -0.001246f, +0.000232f, -0.002213f, +0.001385f, -0.001900f, -0.001030f, -0.002298f, - -0.001437f, -0.000809f, +0.001356f, +0.000292f, -0.002517f, -0.000655f - }, - { - +0.013178f, -0.077224f, +0.002166f, -0.016661f, +0.014189f, -0.004548f, -0.003634f, +0.018353f, +0.004028f, -0.005826f, - -0.001382f, -0.011028f, +0.011016f, +0.011951f, -0.018331f, +0.006869f, +0.000518f, -0.011898f, -0.012659f, +0.007719f, - -0.000740f, +0.000414f, -0.006109f, +0.001491f, +0.004124f, +0.002740f, +0.010262f, -0.003120f, -0.002629f, -0.005639f, - +0.002349f, +0.003024f, -0.000677f, +0.003118f, +0.005975f, -0.012817f, -0.001546f, -0.009555f, -0.009990f, +0.002082f, - -0.008412f, +0.005493f, -0.011315f, +0.000420f, +0.006079f, -0.000975f, +0.003877f, -0.007169f, -0.006442f, -0.002280f, - -0.002739f, -0.002927f, +0.003701f, +0.005909f, -0.000431f, +0.001524f, -0.000771f, +0.003069f, -0.001168f, -0.008299f, - +0.004067f, +0.003467f, -0.002943f, +0.002075f, +0.002585f, +0.002099f, -0.004287f, +0.000419f, +0.002629f, -0.000752f, - -0.000937f, -0.001797f, -0.001382f, +0.000410f, -0.002795f, +0.003146f, -0.001160f, +0.001903f, -0.002659f, -0.000032f, - +0.002429f, -0.001917f, -0.003819f, -0.001370f, -0.001011f, -0.001099f, +0.001420f, -0.000999f, +0.000176f, -0.002022f, - -0.001662f, +0.001825f, -0.002076f, +0.001204f, +0.000314f, +0.000277f - }, - { - +0.001357f, +0.019751f, -0.008678f, -0.006037f, -0.007275f, +0.000502f, -0.000674f, -0.000505f, -0.009021f, +0.001153f, - +0.006191f, -0.000085f, +0.008624f, +0.017723f, -0.015166f, +0.003862f, -0.000104f, -0.001586f, -0.000186f, +0.008272f, - -0.032895f, -0.009778f, -0.017653f, +0.017875f, -0.012363f, +0.010514f, +0.011159f, -0.004386f, +0.006113f, -0.006684f, - -0.003970f, +0.007467f, +0.003323f, +0.002773f, +0.012677f, +0.000765f, +0.000126f, -0.002814f, -0.000987f, -0.004755f, - -0.005616f, +0.009994f, +0.003409f, +0.004379f, -0.007252f, +0.000860f, -0.003674f, +0.001684f, +0.010068f, +0.000803f, - -0.001589f, -0.002698f, -0.002620f, -0.006736f, -0.007563f, -0.007011f, +0.002917f, +0.003350f, +0.004602f, +0.001694f, - -0.001637f, -0.000342f, -0.005332f, -0.000708f, -0.001822f, +0.004473f, +0.003305f, +0.002270f, +0.000647f, +0.001003f, - +0.000790f, +0.000481f, +0.001064f, +0.001763f, -0.000714f, +0.000110f, -0.002913f, -0.004388f, +0.006377f, -0.001372f, - +0.000734f, -0.001161f, -0.001685f, -0.000239f, -0.000503f, +0.000557f, +0.000760f, -0.000094f, -0.000687f, -0.000225f, - -0.001687f, -0.002197f, -0.000321f, +0.001173f, -0.004052f, -0.000158f - }, - { - +0.026158f, -0.092108f, +0.001800f, -0.045494f, -0.000451f, -0.002985f, +0.021052f, -0.009115f, -0.002829f, +0.002582f, - +0.006947f, +0.020007f, -0.002547f, +0.013321f, -0.004339f, +0.001384f, -0.003551f, -0.000983f, -0.002991f, -0.019638f, - +0.015008f, -0.003006f, +0.004910f, +0.003194f, +0.005237f, +0.000430f, -0.006146f, -0.004244f, -0.003649f, -0.002280f, - +0.012619f, +0.002579f, -0.009052f, -0.011703f, +0.001702f, -0.003023f, +0.004578f, +0.003005f, -0.003453f, -0.003238f, - -0.000380f, -0.000130f, +0.010141f, +0.003903f, +0.001526f, +0.003463f, +0.000461f, +0.015101f, +0.005299f, +0.002964f, - -0.000085f, +0.000153f, +0.000986f, +0.002895f, +0.003736f, -0.002618f, +0.007389f, -0.000917f, -0.002825f, +0.002192f, - -0.003260f, +0.002699f, -0.000411f, +0.001994f, -0.002617f, +0.004900f, +0.005336f, -0.001125f, +0.006867f, +0.001687f, - -0.003132f, -0.000985f, -0.002385f, +0.003386f, +0.003644f, -0.003661f, -0.005015f, +0.001573f, -0.000270f, -0.002882f, - -0.000087f, +0.000961f, -0.001794f, -0.003755f, +0.001267f, +0.001490f, +0.000793f, -0.000302f, -0.001902f, +0.001730f, - -0.000728f, -0.002672f, +0.001111f, -0.000098f, +0.000453f, +0.000695f - }, - { - +0.004843f, -0.045986f, -0.005381f, -0.021930f, +0.001662f, -0.002610f, +0.005529f, -0.005188f, +0.007168f, +0.001152f, - +0.003731f, -0.011333f, +0.017010f, +0.019760f, -0.020185f, -0.004903f, -0.003039f, -0.007672f, +0.002162f, -0.000651f, - -0.003199f, -0.001071f, +0.003699f, +0.007924f, +0.006219f, -0.008598f, +0.003164f, -0.004205f, +0.004465f, +0.001530f, - -0.009239f, -0.009595f, -0.002691f, +0.001117f, +0.005916f, +0.010163f, +0.000302f, +0.007836f, -0.008524f, +0.010066f, - +0.003476f, -0.015237f, +0.002270f, -0.000552f, -0.007486f, +0.004994f, -0.009967f, -0.006380f, +0.001883f, +0.003981f, - -0.010174f, +0.002733f, +0.002561f, -0.002671f, -0.001447f, +0.002119f, -0.004703f, +0.000432f, -0.007382f, +0.003271f, - +0.002149f, -0.000331f, -0.000548f, -0.002972f, -0.001970f, +0.001353f, -0.002950f, +0.000523f, +0.001025f, -0.002638f, - -0.003871f, +0.000840f, +0.000799f, +0.000483f, +0.002032f, +0.000073f, +0.002604f, +0.001215f, +0.000044f, +0.000010f, - -0.000796f, -0.000601f, +0.000620f, -0.001632f, -0.000996f, -0.001075f, -0.000530f, +0.000941f, +0.000717f, +0.000797f, - +0.000599f, -0.001702f, -0.000386f, +0.001084f, +0.002758f, -0.000267f - }, - { - +0.006264f, +0.119827f, -0.025970f, -0.001179f, +0.009141f, +0.025206f, -0.006142f, +0.014143f, -0.001689f, -0.000378f, - -0.021341f, -0.005505f, +0.009514f, -0.012682f, -0.011936f, +0.011577f, +0.016913f, -0.020448f, -0.021960f, -0.010235f, - -0.038053f, +0.005087f, -0.011022f, +0.009343f, -0.004404f, +0.001754f, +0.008669f, +0.001189f, +0.010455f, -0.017926f, - +0.007902f, -0.000763f, -0.001428f, +0.012102f, +0.006577f, +0.000295f, -0.008573f, -0.008741f, -0.007919f, +0.001308f, - -0.014446f, +0.003659f, +0.000255f, -0.000192f, -0.003554f, +0.001682f, +0.001949f, +0.007314f, +0.000253f, +0.001789f, - +0.009181f, -0.004265f, +0.014265f, +0.003225f, +0.005705f, -0.003546f, +0.000484f, -0.002856f, -0.006525f, -0.009502f, - -0.001174f, +0.000634f, +0.007808f, -0.002166f, -0.006821f, +0.002055f, -0.002355f, -0.001844f, -0.002042f, +0.003148f, - +0.003051f, -0.001263f, +0.000070f, -0.004663f, -0.004497f, +0.000371f, +0.002822f, +0.003837f, +0.000193f, -0.000565f, - +0.000298f, +0.003552f, -0.005018f, +0.000986f, -0.001372f, -0.001658f, +0.003780f, +0.003235f, -0.000093f, +0.001983f, - +0.001437f, +0.001147f, -0.002576f, -0.001869f, +0.000377f, -0.000643f - }, - { - -0.003285f, -0.078139f, -0.008163f, +0.014308f, -0.000059f, +0.014515f, -0.003166f, -0.008725f, +0.014542f, -0.008189f, - +0.006052f, +0.005456f, +0.008642f, +0.002345f, -0.002231f, +0.010894f, +0.007201f, -0.005367f, -0.002125f, +0.010969f, - -0.012615f, -0.007280f, -0.031110f, -0.000125f, -0.003669f, -0.000356f, -0.000810f, +0.003881f, -0.012027f, -0.008333f, - +0.004912f, +0.007883f, +0.003361f, +0.000558f, -0.008605f, -0.009862f, -0.012226f, -0.019266f, -0.001849f, -0.000162f, - +0.002375f, -0.006574f, -0.002021f, -0.003165f, +0.004367f, -0.003556f, +0.005450f, -0.011998f, -0.004997f, +0.005572f, - +0.005797f, -0.000212f, -0.003337f, +0.005704f, +0.008159f, +0.006567f, +0.001169f, -0.010433f, +0.006965f, +0.003676f, - +0.005474f, -0.000348f, -0.007800f, -0.003801f, +0.005471f, -0.007700f, -0.002729f, -0.002231f, +0.000111f, +0.003165f, - +0.000511f, +0.003181f, -0.001589f, -0.002381f, -0.001946f, -0.001711f, +0.001375f, +0.006740f, -0.003347f, -0.002123f, - -0.001926f, -0.000996f, +0.002159f, +0.001704f, +0.003820f, +0.001910f, +0.000820f, +0.001822f, +0.002946f, +0.001158f, - +0.002270f, -0.000805f, +0.001542f, -0.000892f, -0.002604f, +0.001188f - }, - { - -0.015527f, -0.114286f, -0.003011f, +0.041750f, -0.019502f, -0.038449f, +0.002371f, -0.014130f, -0.007537f, -0.010514f, - -0.044035f, -0.010919f, +0.009501f, +0.007022f, -0.014677f, -0.027738f, -0.020832f, -0.007854f, +0.000291f, +0.019537f, - -0.006673f, +0.012974f, -0.026100f, -0.003996f, -0.009620f, -0.002156f, -0.004719f, +0.005943f, +0.001667f, +0.005381f, - +0.001758f, -0.001441f, +0.003676f, -0.017452f, -0.003455f, +0.015573f, -0.002752f, -0.013463f, -0.020345f, +0.009553f, - +0.011123f, -0.000680f, +0.012846f, -0.007285f, +0.008113f, -0.002434f, +0.000151f, -0.002772f, -0.001961f, -0.011123f, - -0.001000f, +0.003035f, -0.011093f, -0.005573f, -0.000262f, +0.003187f, +0.000304f, +0.000608f, +0.004357f, -0.004588f, - -0.008408f, -0.001511f, -0.006217f, -0.000494f, +0.003491f, -0.002747f, +0.002295f, +0.002498f, +0.006166f, +0.001608f, - +0.003742f, +0.000504f, +0.003246f, +0.002384f, -0.002707f, +0.001849f, -0.000677f, -0.000204f, +0.002470f, -0.000670f, - +0.001518f, +0.000880f, +0.003294f, +0.003356f, -0.004028f, +0.002692f, -0.003632f, +0.000187f, +0.000696f, +0.002137f, - +0.000951f, -0.001865f, +0.000848f, -0.002316f, -0.002012f, +0.001924f - }, - { - -0.000955f, -0.041505f, -0.008789f, +0.010814f, -0.002572f, -0.000398f, +0.001269f, -0.003716f, -0.002451f, -0.013357f, - +0.011517f, +0.005661f, +0.016162f, +0.010783f, +0.021199f, +0.021898f, +0.001967f, -0.000940f, +0.001428f, +0.015799f, - -0.000111f, -0.004527f, -0.039965f, +0.006508f, -0.005465f, -0.030326f, +0.009175f, -0.017860f, +0.019154f, +0.006418f, - +0.011650f, +0.009455f, -0.009493f, +0.001946f, +0.013039f, -0.014689f, -0.004746f, +0.017123f, -0.002226f, +0.006649f, - -0.000108f, -0.021241f, -0.013063f, -0.003322f, +0.000315f, -0.008829f, -0.004837f, +0.000409f, +0.007020f, -0.007246f, - -0.002541f, +0.000958f, +0.005178f, +0.007285f, -0.002723f, -0.004154f, +0.007286f, -0.003988f, +0.005011f, +0.000834f, - +0.010527f, -0.000898f, +0.001721f, +0.004132f, +0.002986f, -0.006662f, -0.003636f, +0.001491f, +0.005780f, -0.005251f, - -0.000005f, +0.003839f, +0.002762f, +0.002507f, +0.003902f, +0.002348f, +0.000423f, -0.003417f, -0.003122f, +0.000515f, - -0.000247f, +0.003284f, -0.003583f, -0.002797f, +0.001221f, +0.003976f, -0.000544f, +0.001652f, +0.002184f, +0.000701f, - +0.004329f, +0.000413f, -0.000579f, -0.000121f, -0.003067f, +0.000806f - }, - { - -0.002940f, -0.097772f, -0.013006f, -0.010034f, +0.025537f, -0.031270f, -0.005875f, +0.002199f, -0.020607f, -0.015489f, - +0.024215f, -0.021981f, -0.000964f, -0.006185f, +0.054225f, +0.019303f, -0.015404f, +0.018475f, -0.001041f, -0.004204f, - -0.008442f, +0.007754f, +0.014364f, +0.017516f, +0.003578f, +0.006859f, +0.025616f, +0.001564f, -0.003556f, +0.006682f, - -0.006413f, -0.022521f, +0.008767f, +0.020890f, -0.001018f, -0.016103f, -0.015812f, -0.006842f, +0.004554f, -0.003447f, - +0.000347f, -0.011414f, -0.014901f, -0.005580f, -0.002308f, -0.011203f, +0.004638f, -0.000228f, +0.014522f, +0.012295f, - +0.005998f, -0.000762f, +0.001349f, -0.008129f, +0.004392f, +0.007518f, -0.008314f, +0.003386f, +0.003580f, +0.004109f, - -0.003604f, -0.004425f, -0.003256f, +0.003378f, -0.007893f, +0.000241f, -0.005297f, -0.001756f, -0.003592f, +0.002415f, - +0.002895f, +0.001788f, +0.004488f, -0.001930f, +0.002463f, -0.005885f, -0.002745f, -0.000987f, +0.000128f, -0.006153f, - -0.001939f, -0.000210f, +0.002024f, +0.000694f, -0.001751f, -0.000035f, -0.000871f, +0.001259f, -0.000506f, +0.000381f, - +0.000140f, +0.001100f, +0.001870f, -0.000465f, -0.002627f, +0.002355f - }, - { - -0.005490f, -0.038288f, -0.000235f, -0.006691f, -0.017232f, -0.006607f, -0.004539f, -0.003583f, +0.001209f, +0.002059f, - +0.008155f, -0.019866f, +0.002820f, +0.019096f, -0.044431f, +0.001751f, +0.002307f, -0.005162f, +0.032439f, +0.012992f, - -0.008467f, -0.001793f, -0.011042f, +0.001427f, -0.007355f, -0.006227f, +0.001472f, -0.017582f, +0.000553f, +0.015686f, - -0.015078f, -0.000331f, +0.001305f, -0.007203f, -0.004759f, -0.006653f, +0.005687f, -0.005124f, -0.003591f, +0.009906f, - -0.005964f, -0.000195f, -0.008583f, +0.004706f, +0.002750f, -0.006575f, -0.005475f, -0.005717f, +0.007127f, +0.001771f, - -0.002782f, -0.000130f, +0.005917f, -0.008392f, +0.002706f, +0.003088f, +0.001945f, +0.006758f, +0.001687f, -0.000023f, - -0.003016f, +0.000281f, +0.004988f, -0.002874f, +0.003887f, -0.004559f, +0.002599f, +0.001127f, +0.003583f, -0.000987f, - +0.001904f, -0.004766f, +0.001565f, +0.009149f, +0.000081f, -0.002257f, +0.002994f, -0.001199f, -0.001091f, -0.002147f, - +0.007295f, +0.000370f, -0.002970f, -0.004209f, -0.000277f, -0.001340f, -0.003451f, +0.001569f, -0.002101f, -0.003729f, - -0.002207f, +0.001293f, +0.001228f, +0.000848f, +0.003805f, +0.001312f - } - }, - { - { - +0.022172f, -0.051363f, -0.075589f, +0.019555f, +0.031447f, +0.006688f, +0.013155f, +0.011471f, +0.006225f, +0.023805f, - -0.008586f, -0.023915f, -0.007057f, -0.004257f, -0.014725f, +0.010792f, -0.005435f, -0.002898f, -0.000855f, -0.002691f, - +0.014105f, -0.009075f, -0.003893f, -0.003416f, -0.003449f, +0.000577f, +0.001502f, +0.005085f, -0.004131f, +0.001911f, - +0.008046f, +0.005896f, -0.005111f, -0.006435f, -0.006897f, +0.006773f, +0.012063f, +0.006753f, +0.006073f, +0.006871f, - -0.000703f, -0.007735f, -0.002871f, -0.010888f, -0.004168f, +0.006335f, +0.006883f, +0.004109f, -0.004914f, +0.009119f, - -0.001455f, -0.007957f, +0.003335f, -0.002569f, +0.000359f, +0.004606f, +0.001374f, +0.000953f, +0.002363f, -0.001554f, - -0.002932f, +0.006581f, +0.005502f, -0.001017f, -0.002354f, -0.000458f, +0.004264f, -0.001924f, -0.000720f, -0.001563f, - +0.003026f, -0.000458f, +0.000977f, +0.000551f, +0.000427f, -0.000369f, -0.002585f, +0.002167f, +0.001388f, -0.002007f, - -0.000906f, -0.004610f, +0.002382f, +0.001360f, -0.000124f, -0.001176f, +0.002429f, -0.004602f, -0.000863f, -0.002601f, - -0.001813f, -0.001867f, -0.001847f, +0.000383f, -0.000049f, -0.001145f - }, - { - -0.000893f, +0.086663f, +0.008459f, -0.000180f, +0.009974f, +0.001374f, -0.007765f, +0.006976f, +0.003763f, +0.002530f, - -0.019067f, -0.028426f, +0.008824f, +0.007146f, +0.014857f, +0.004113f, -0.016210f, -0.003078f, -0.009755f, +0.004440f, - +0.008344f, +0.012519f, +0.017696f, +0.003171f, +0.000036f, -0.018984f, -0.009126f, -0.007390f, +0.004290f, +0.009140f, - +0.013422f, -0.000629f, -0.018260f, +0.002645f, -0.011655f, +0.008492f, -0.014393f, +0.027621f, -0.003465f, +0.010330f, - +0.000228f, -0.005411f, -0.005028f, +0.004735f, +0.001863f, -0.003226f, +0.006238f, -0.001646f, +0.000160f, +0.005219f, - -0.004928f, -0.004280f, -0.000983f, +0.000195f, -0.003974f, -0.003814f, +0.000446f, -0.000370f, -0.000773f, +0.000734f, - +0.003326f, +0.002812f, -0.001553f, -0.006160f, +0.003751f, +0.001811f, +0.000647f, -0.001949f, -0.001843f, -0.003712f, - +0.002092f, -0.000290f, -0.001234f, +0.000059f, +0.000806f, -0.000250f, +0.001932f, +0.000295f, -0.002949f, +0.003595f, - -0.000950f, -0.000792f, +0.000564f, +0.001389f, -0.002127f, -0.001705f, +0.001287f, -0.001633f, -0.000373f, -0.001362f, - +0.002258f, -0.001573f, -0.000722f, +0.002020f, +0.000717f, -0.001149f - }, - { - -0.003140f, -0.107261f, +0.047886f, +0.093387f, +0.006862f, +0.002617f, +0.001931f, -0.004214f, -0.000123f, +0.002766f, - -0.015243f, -0.019581f, +0.004733f, +0.004819f, +0.008582f, +0.006379f, +0.001119f, -0.007449f, -0.015229f, -0.004231f, - -0.007838f, -0.004274f, +0.000986f, +0.013099f, -0.006280f, +0.000799f, +0.015618f, +0.007028f, -0.006226f, +0.004918f, - +0.001194f, -0.010480f, +0.003655f, -0.015741f, -0.001855f, -0.008851f, -0.018461f, -0.003706f, +0.003170f, -0.005957f, - +0.000154f, -0.001075f, +0.006389f, -0.006157f, +0.008054f, +0.002818f, -0.002461f, +0.000062f, +0.009890f, +0.007353f, - -0.005524f, -0.010701f, +0.005946f, -0.007241f, -0.002500f, -0.003356f, +0.005468f, +0.001792f, -0.002191f, -0.003098f, - -0.005619f, +0.001568f, -0.002826f, +0.004245f, -0.004119f, +0.001573f, +0.000167f, +0.003443f, -0.000463f, +0.002953f, - -0.002811f, +0.002183f, +0.001637f, +0.000438f, -0.001867f, +0.000156f, -0.001377f, -0.000074f, +0.001749f, -0.001788f, - +0.000679f, +0.000402f, +0.000589f, +0.003156f, +0.003990f, +0.000997f, -0.000447f, +0.000885f, -0.000414f, +0.000067f, - +0.002036f, +0.000628f, +0.001777f, +0.000740f, -0.000180f, -0.003534f - }, - { - -0.006121f, -0.074290f, -0.005329f, +0.019708f, -0.011917f, -0.002420f, +0.005253f, -0.007126f, -0.000680f, +0.001442f, - -0.003852f, +0.003122f, +0.005230f, -0.014591f, -0.022274f, +0.009800f, +0.000176f, +0.014902f, -0.040223f, -0.002323f, - -0.006306f, +0.001545f, +0.010516f, +0.011656f, -0.003880f, -0.003006f, -0.019750f, +0.019262f, -0.006558f, -0.001178f, - -0.000577f, -0.001454f, -0.007897f, +0.004358f, +0.005319f, -0.002277f, +0.001251f, -0.001614f, -0.012718f, -0.002006f, - -0.002064f, +0.003923f, -0.008039f, -0.004378f, +0.005614f, +0.009014f, -0.006156f, +0.010675f, -0.004518f, -0.001095f, - +0.000724f, -0.000280f, -0.003138f, +0.003750f, -0.003361f, -0.004188f, +0.001028f, +0.002331f, -0.000057f, +0.004755f, - -0.001874f, +0.005722f, -0.004202f, +0.002302f, -0.006586f, +0.002074f, -0.002227f, -0.001467f, -0.000524f, +0.003007f, - -0.002946f, +0.001822f, -0.003449f, +0.004981f, +0.001126f, +0.003080f, +0.000343f, +0.001043f, -0.000480f, -0.000591f, - +0.003406f, -0.000214f, -0.000129f, -0.000932f, -0.001866f, +0.002557f, +0.004639f, +0.001898f, +0.000717f, -0.000233f, - -0.001128f, -0.001262f, -0.000645f, -0.000036f, -0.001167f, -0.002668f - }, - { - -0.002474f, -0.005290f, +0.011889f, +0.006749f, -0.000660f, +0.001881f, +0.001322f, -0.011603f, +0.000571f, +0.003814f, - +0.008636f, -0.007969f, +0.002542f, +0.008863f, -0.004306f, -0.010726f, +0.008799f, -0.008022f, -0.004117f, -0.017722f, - -0.001800f, +0.004233f, +0.003226f, +0.006984f, +0.005257f, +0.029636f, -0.008495f, -0.008554f, -0.009130f, -0.010697f, - +0.001958f, +0.008154f, -0.002407f, -0.000471f, -0.004798f, -0.000218f, +0.006911f, +0.005303f, -0.000885f, +0.002259f, - +0.000148f, +0.007609f, +0.001651f, +0.001405f, -0.002361f, +0.008723f, +0.008529f, +0.002613f, -0.004746f, +0.000875f, - +0.001262f, +0.008195f, -0.003610f, +0.002416f, +0.004463f, +0.004859f, +0.002541f, +0.003301f, +0.003793f, -0.000740f, - -0.001218f, -0.000134f, +0.001153f, -0.003603f, +0.002680f, -0.005992f, -0.001069f, +0.001898f, -0.003682f, -0.000406f, - +0.000826f, +0.003690f, +0.001063f, +0.001851f, -0.001762f, -0.002127f, +0.001157f, +0.001903f, +0.004725f, +0.000240f, - -0.002666f, +0.002210f, -0.001308f, -0.001877f, -0.000435f, -0.000868f, +0.003177f, -0.001455f, +0.001401f, +0.000098f, - +0.000262f, -0.000065f, +0.001368f, -0.000441f, -0.001229f, +0.001038f - }, - { - +0.003054f, -0.101774f, +0.017906f, -0.023206f, -0.014280f, -0.000270f, -0.002600f, +0.010675f, -0.014238f, -0.001816f, - +0.009196f, +0.011668f, +0.001572f, +0.003149f, -0.021671f, +0.005924f, +0.012761f, -0.011855f, -0.016356f, -0.001193f, - -0.011312f, +0.006876f, -0.002406f, +0.002336f, -0.011752f, -0.015246f, +0.009466f, +0.001741f, -0.005477f, -0.008163f, - +0.003704f, +0.001569f, +0.000855f, +0.005474f, +0.004755f, -0.013229f, +0.007797f, +0.002282f, -0.006530f, +0.005750f, - -0.001190f, +0.009513f, -0.004709f, +0.001756f, +0.004812f, +0.005572f, +0.009437f, +0.003448f, -0.000262f, -0.000073f, - -0.001459f, -0.007171f, -0.003227f, -0.002042f, -0.000768f, +0.004593f, -0.000689f, +0.003686f, +0.002224f, -0.003021f, - +0.004101f, +0.000940f, +0.001606f, +0.003415f, -0.002842f, +0.002279f, -0.004310f, +0.002893f, +0.003646f, -0.001417f, - +0.000269f, -0.003226f, -0.004458f, +0.001053f, -0.002896f, +0.000316f, -0.002990f, +0.001810f, -0.001928f, -0.002491f, - -0.001886f, -0.001583f, -0.003105f, -0.000480f, -0.000943f, -0.001642f, +0.000008f, -0.001546f, +0.001497f, +0.000313f, - -0.000560f, +0.001978f, -0.000708f, +0.000884f, +0.000592f, +0.001487f - }, - { - -0.000264f, +0.018519f, +0.009061f, -0.008264f, -0.000563f, +0.001580f, -0.004611f, -0.001386f, -0.002488f, +0.001096f, - +0.000766f, -0.005056f, +0.013448f, +0.000932f, -0.041654f, -0.004380f, -0.016176f, -0.007773f, -0.010237f, +0.010526f, - -0.013916f, +0.001236f, -0.013075f, +0.015890f, -0.008765f, +0.017684f, +0.011972f, -0.010229f, -0.006541f, -0.018760f, - -0.005547f, +0.013891f, +0.004291f, +0.002015f, +0.011658f, +0.004487f, -0.004099f, -0.003721f, +0.007023f, +0.002855f, - -0.008443f, -0.003095f, -0.000779f, -0.000115f, -0.007724f, +0.006671f, -0.006629f, -0.004986f, +0.003419f, -0.002439f, - +0.004204f, +0.000016f, -0.004000f, -0.000787f, -0.006119f, -0.006905f, +0.001496f, -0.000482f, +0.000971f, -0.002307f, - -0.004019f, -0.000236f, -0.001236f, +0.003452f, -0.001881f, +0.003737f, +0.000078f, +0.002661f, +0.003383f, -0.001042f, - +0.000494f, +0.004550f, +0.001094f, +0.003219f, -0.002498f, -0.001163f, -0.002266f, -0.005402f, +0.002527f, -0.001301f, - +0.002393f, -0.000252f, -0.003394f, +0.001501f, -0.000200f, -0.002611f, +0.000524f, -0.000933f, +0.001158f, +0.000131f, - +0.000589f, +0.000474f, +0.001046f, +0.002322f, -0.003286f, +0.000385f - }, - { - -0.013676f, -0.130635f, +0.021661f, -0.051033f, -0.015770f, -0.005017f, +0.009869f, +0.001576f, +0.006882f, +0.007140f, - -0.022682f, -0.003448f, -0.014040f, -0.002467f, -0.024592f, -0.018265f, +0.004293f, +0.007498f, +0.009214f, +0.002040f, - +0.027544f, +0.001426f, -0.002508f, -0.004619f, +0.009186f, -0.000613f, -0.002055f, +0.012591f, -0.000948f, -0.011971f, - +0.002483f, +0.001059f, +0.008680f, +0.015725f, +0.016886f, -0.002590f, -0.003941f, +0.000656f, +0.002910f, +0.003939f, - +0.006553f, +0.001357f, +0.011629f, +0.000676f, -0.002199f, +0.003433f, -0.007187f, +0.005518f, -0.004393f, -0.001611f, - +0.000528f, +0.002063f, +0.002263f, -0.003415f, +0.001460f, -0.000877f, +0.009175f, +0.000694f, +0.000125f, +0.006162f, - +0.001654f, +0.004106f, -0.004442f, +0.001679f, -0.003942f, -0.001682f, +0.004485f, +0.001494f, +0.002451f, -0.000618f, - +0.000461f, +0.005268f, -0.000769f, -0.000771f, +0.004326f, -0.000233f, -0.003669f, -0.000740f, +0.001458f, -0.000005f, - +0.001902f, +0.000384f, -0.000691f, -0.001871f, +0.000731f, -0.001859f, -0.002141f, +0.000602f, -0.002241f, +0.001535f, - -0.000783f, -0.002209f, +0.000586f, -0.000581f, -0.000950f, -0.000066f - }, - { - +0.001013f, -0.047931f, +0.040315f, -0.010441f, +0.003080f, -0.005611f, +0.007482f, -0.000713f, +0.002151f, -0.006117f, - +0.005465f, -0.006003f, +0.020881f, +0.015731f, -0.013505f, +0.040361f, +0.040620f, -0.011371f, -0.013959f, +0.006197f, - +0.004337f, -0.000687f, +0.002648f, -0.000743f, -0.010637f, -0.010396f, +0.005600f, +0.002581f, +0.008775f, +0.006336f, - +0.001523f, -0.019677f, -0.009673f, +0.011622f, +0.012044f, -0.000004f, -0.001820f, +0.012393f, -0.004167f, +0.007112f, - -0.009047f, -0.020734f, +0.002014f, +0.002022f, -0.000855f, +0.004451f, -0.007649f, +0.001410f, +0.001609f, +0.007569f, - -0.003787f, +0.006085f, +0.001780f, -0.002446f, -0.003771f, +0.003206f, -0.007329f, -0.002929f, -0.005779f, +0.005320f, - +0.002933f, -0.000137f, +0.002780f, +0.003114f, +0.000633f, +0.002071f, -0.002839f, +0.003524f, +0.006014f, +0.001821f, - -0.004374f, +0.000531f, +0.000648f, -0.000951f, -0.000044f, -0.002104f, +0.001456f, +0.000793f, -0.001571f, +0.002248f, - +0.002034f, +0.001085f, +0.002318f, -0.003242f, -0.001470f, +0.001485f, +0.003236f, +0.003272f, +0.001060f, -0.001790f, - +0.000421f, -0.000342f, +0.000837f, -0.000682f, +0.000340f, -0.000447f - }, - { - -0.006236f, +0.121930f, +0.001656f, -0.006697f, +0.023958f, +0.052469f, +0.005614f, +0.000593f, -0.003591f, +0.009037f, - +0.007606f, -0.008569f, -0.019825f, -0.022089f, -0.008058f, +0.002702f, -0.001117f, -0.015101f, +0.005605f, +0.019174f, - -0.022875f, -0.000778f, -0.011804f, +0.002064f, -0.010620f, -0.010700f, -0.000514f, -0.001226f, +0.012406f, -0.018048f, - -0.003215f, +0.001559f, -0.002409f, +0.008989f, +0.004415f, +0.008776f, +0.003490f, +0.002460f, +0.008783f, +0.008908f, - -0.011592f, +0.010713f, -0.001151f, -0.004797f, +0.001156f, +0.009188f, +0.000564f, -0.009541f, -0.013607f, -0.004657f, - +0.011589f, -0.011420f, -0.001719f, -0.002144f, -0.001686f, -0.007658f, +0.003594f, -0.003930f, -0.006848f, -0.005983f, - -0.001807f, -0.003800f, +0.009831f, +0.008857f, -0.001401f, +0.004839f, +0.000494f, +0.000005f, +0.001713f, +0.003047f, - +0.001175f, -0.000132f, -0.002696f, -0.005843f, -0.003186f, +0.003103f, +0.001436f, -0.001267f, +0.000022f, +0.001801f, - +0.001792f, +0.004232f, -0.003375f, +0.001357f, -0.002304f, -0.001202f, +0.004875f, +0.001686f, -0.003576f, -0.000277f, - -0.000211f, -0.002137f, -0.003603f, -0.000601f, -0.002183f, -0.000492f - }, - { - +0.000140f, -0.061661f, -0.006624f, +0.009810f, +0.000572f, +0.005223f, -0.012029f, -0.019444f, +0.005945f, -0.001278f, - +0.006198f, -0.006947f, +0.001435f, -0.015444f, -0.006021f, +0.010741f, +0.010793f, +0.013254f, +0.006557f, +0.020052f, - +0.001276f, -0.018009f, -0.024566f, +0.011422f, +0.002813f, +0.007158f, -0.009423f, -0.001429f, -0.012191f, +0.002502f, - +0.002074f, -0.002809f, +0.009093f, +0.001983f, -0.015347f, -0.004890f, -0.009526f, -0.019682f, -0.000768f, +0.001374f, - +0.011774f, +0.002479f, +0.000634f, +0.000330f, +0.001347f, -0.015954f, +0.000430f, -0.009323f, -0.008126f, +0.007393f, - +0.011848f, +0.001437f, -0.001572f, +0.006046f, +0.004468f, +0.005575f, +0.004071f, -0.002716f, +0.005286f, -0.001030f, - +0.007128f, +0.001676f, -0.003909f, -0.006573f, +0.001362f, -0.004533f, -0.000491f, +0.002527f, +0.000212f, -0.000075f, - +0.000739f, +0.000486f, -0.002348f, +0.000861f, -0.001344f, +0.000179f, +0.002564f, +0.003125f, -0.001980f, +0.001811f, - -0.004408f, +0.001993f, +0.003156f, -0.003506f, -0.000023f, +0.003235f, +0.000548f, +0.001361f, +0.003220f, +0.000807f, - +0.001695f, -0.002212f, +0.000236f, +0.000725f, -0.001554f, -0.000646f - }, - { - +0.025336f, -0.043254f, -0.029287f, +0.011233f, -0.003420f, -0.022399f, +0.031412f, +0.003806f, +0.003866f, +0.012796f, - -0.008074f, -0.007192f, +0.001732f, +0.017385f, +0.021021f, -0.001101f, -0.018071f, -0.014765f, -0.003714f, +0.021490f, - -0.011701f, +0.010316f, -0.027023f, -0.008044f, -0.010288f, +0.007782f, +0.011004f, +0.011807f, -0.004018f, +0.000211f, - +0.004714f, -0.011456f, -0.003372f, -0.007706f, +0.000463f, +0.014237f, +0.000987f, -0.003228f, -0.013578f, +0.006860f, - -0.002444f, -0.012710f, +0.016904f, -0.002404f, +0.002942f, -0.000226f, +0.011703f, +0.000090f, +0.008071f, -0.009785f, - -0.003154f, +0.008527f, -0.001177f, -0.005316f, -0.003080f, +0.000642f, -0.000019f, -0.003031f, +0.008230f, +0.003316f, - -0.002123f, +0.002929f, -0.001528f, +0.006100f, +0.006850f, -0.001187f, -0.003133f, -0.003667f, -0.000581f, -0.002530f, - +0.005770f, -0.000344f, -0.000409f, +0.000300f, -0.001150f, +0.001023f, -0.002972f, +0.001862f, +0.003979f, -0.001185f, - -0.000642f, -0.002451f, -0.000626f, +0.000575f, -0.002479f, +0.003526f, -0.002689f, +0.001950f, +0.000105f, -0.000441f, - +0.000613f, -0.001615f, +0.001030f, -0.001087f, -0.001594f, +0.001402f - }, - { - -0.001821f, -0.013745f, +0.001349f, +0.013710f, -0.009635f, -0.007575f, +0.006773f, +0.001774f, +0.001161f, -0.012475f, - +0.015682f, -0.000979f, -0.026819f, -0.043899f, -0.000457f, +0.002198f, -0.000207f, -0.009320f, -0.008868f, +0.007426f, - +0.000124f, +0.008340f, -0.021941f, +0.012475f, -0.003788f, -0.035661f, +0.020152f, -0.018307f, +0.013739f, +0.003500f, - -0.007556f, +0.005255f, -0.003029f, -0.001832f, +0.004992f, -0.010845f, -0.004793f, +0.010975f, -0.012761f, +0.003126f, - +0.006492f, -0.001322f, -0.000908f, -0.006583f, -0.006767f, -0.010944f, -0.002354f, -0.004049f, +0.007614f, +0.007252f, - +0.009557f, +0.000876f, -0.001154f, +0.000480f, -0.001618f, -0.007941f, -0.005278f, -0.009910f, +0.007343f, +0.002137f, - +0.008183f, -0.006326f, -0.003871f, -0.000770f, +0.002327f, -0.008927f, -0.001057f, -0.003173f, -0.005697f, -0.009564f, - +0.003166f, +0.002155f, -0.001385f, +0.001700f, +0.002306f, +0.002754f, +0.001488f, -0.002660f, -0.003674f, -0.000982f, - +0.000242f, +0.001027f, -0.001378f, -0.000288f, -0.003765f, +0.002258f, +0.000051f, +0.001546f, +0.003305f, +0.002102f, - +0.002866f, -0.000921f, -0.000477f, +0.000415f, -0.003090f, +0.001741f - }, - { - +0.012755f, -0.072756f, -0.004220f, -0.002208f, +0.013276f, -0.016350f, +0.016672f, +0.011256f, +0.001875f, -0.005023f, - +0.027675f, -0.014956f, -0.013005f, -0.032832f, +0.026579f, +0.002713f, -0.041189f, +0.004533f, +0.007385f, +0.007096f, - -0.003640f, +0.015066f, +0.009660f, +0.010571f, -0.009978f, -0.002477f, +0.027291f, +0.006234f, +0.006194f, +0.016111f, - +0.010349f, -0.012716f, +0.003556f, +0.007699f, +0.004645f, +0.003078f, +0.004384f, -0.004848f, +0.002297f, -0.009707f, - -0.005917f, +0.002718f, +0.001952f, +0.000631f, +0.000302f, -0.006602f, +0.007357f, -0.002157f, +0.001593f, +0.002247f, - +0.000687f, -0.001470f, +0.004536f, -0.002347f, +0.005212f, +0.002249f, -0.010091f, +0.001320f, -0.002425f, +0.004321f, - -0.004766f, -0.003049f, -0.003537f, -0.003342f, -0.006584f, +0.005277f, -0.005552f, -0.002454f, -0.003034f, +0.003314f, - +0.000983f, -0.000199f, +0.006091f, -0.000349f, +0.001353f, -0.000686f, +0.003238f, -0.000975f, +0.001299f, -0.002216f, - -0.000043f, -0.000478f, -0.002139f, -0.002692f, -0.002303f, +0.000645f, -0.002652f, +0.000071f, -0.000044f, +0.002999f, - +0.002426f, +0.002277f, +0.002292f, -0.000393f, -0.000440f, +0.002357f - }, - { - +0.004528f, -0.030142f, -0.004459f, +0.004574f, -0.010310f, +0.009586f, +0.014492f, -0.010486f, +0.003801f, -0.010808f, - +0.009750f, +0.000665f, +0.007362f, -0.020028f, -0.124694f, -0.012363f, -0.001706f, -0.010672f, +0.009606f, -0.003830f, - -0.009781f, +0.010508f, -0.012464f, +0.004413f, -0.008440f, -0.014346f, +0.008364f, -0.006042f, +0.012623f, +0.030053f, - +0.002262f, +0.001692f, -0.006103f, -0.004879f, -0.011894f, -0.018940f, +0.007789f, +0.001906f, -0.007584f, -0.002404f, - -0.007607f, +0.007775f, -0.005680f, +0.003541f, -0.004817f, -0.005111f, +0.002169f, -0.002865f, +0.002310f, -0.002853f, - -0.002482f, -0.000190f, +0.010966f, -0.000939f, +0.006041f, +0.001933f, -0.003246f, +0.000854f, +0.001033f, -0.000715f, - +0.000388f, +0.005493f, +0.004191f, -0.007236f, +0.001375f, -0.009150f, -0.003380f, -0.002575f, +0.004470f, -0.000681f, - +0.003708f, -0.001728f, -0.002773f, +0.007971f, +0.004449f, +0.004184f, +0.006186f, -0.001300f, +0.000459f, +0.001300f, - +0.009425f, +0.003242f, -0.003924f, -0.005732f, -0.000508f, -0.000731f, -0.002940f, +0.002126f, +0.000789f, +0.000022f, - +0.000825f, -0.000023f, -0.001158f, +0.000320f, +0.000922f, -0.000706f - } - }, - { - { - -0.026406f, -0.058357f, +0.011700f, +0.062147f, -0.034983f, +0.020862f, +0.016928f, +0.002629f, +0.013025f, +0.005029f, - +0.006749f, -0.033456f, +0.008818f, -0.001782f, -0.010425f, +0.004834f, -0.017175f, +0.011425f, -0.001778f, +0.006871f, - -0.005406f, +0.006898f, -0.002017f, +0.001819f, -0.010716f, -0.004028f, +0.011247f, +0.005096f, +0.000122f, -0.007567f, - +0.010988f, +0.001423f, +0.001514f, -0.014818f, +0.007108f, -0.006580f, +0.011086f, +0.009465f, +0.009942f, -0.001547f, - -0.002443f, -0.007131f, -0.000470f, -0.005378f, -0.001031f, +0.006535f, -0.000398f, +0.004354f, +0.000688f, +0.006164f, - -0.000501f, -0.010578f, +0.014125f, -0.007969f, -0.001517f, +0.000675f, +0.009281f, +0.000974f, +0.000539f, -0.001029f, - -0.006739f, +0.007700f, +0.003554f, +0.001413f, -0.004292f, -0.002160f, +0.007124f, -0.001794f, +0.000412f, -0.001488f, - +0.004324f, +0.002176f, -0.003414f, +0.000412f, +0.002297f, -0.004190f, +0.001431f, +0.000902f, +0.002723f, -0.004194f, - +0.001439f, -0.002934f, +0.000410f, +0.001680f, -0.002293f, +0.002722f, +0.000154f, -0.003929f, -0.002542f, -0.001332f, - -0.003556f, +0.000185f, -0.000886f, +0.000177f, -0.000679f, -0.001684f - }, - { - -0.000142f, +0.075610f, +0.013475f, -0.063244f, +0.047953f, +0.000728f, -0.003018f, -0.000656f, +0.006034f, -0.003069f, - -0.006208f, -0.029320f, -0.000478f, +0.017080f, +0.009264f, +0.007735f, -0.021856f, -0.019209f, -0.010101f, +0.015525f, - +0.012737f, +0.004477f, +0.024790f, +0.012303f, +0.002149f, -0.015156f, -0.013626f, -0.009917f, +0.002882f, +0.008966f, - -0.005485f, +0.005900f, -0.010775f, -0.000198f, -0.003213f, -0.005592f, +0.008650f, +0.010828f, +0.003870f, -0.002412f, - +0.008409f, -0.000958f, -0.007016f, -0.003221f, -0.000184f, +0.003620f, +0.000885f, +0.003539f, -0.000246f, +0.004940f, - -0.006326f, -0.005523f, +0.006865f, -0.007327f, -0.007536f, -0.000033f, -0.000133f, +0.001946f, -0.003966f, +0.003618f, - +0.004170f, -0.000223f, +0.003324f, -0.010223f, +0.002807f, +0.002178f, +0.000010f, -0.000368f, -0.005250f, -0.000178f, - -0.000227f, -0.001643f, -0.000111f, +0.003528f, -0.001585f, +0.001181f, -0.002136f, -0.000156f, -0.001111f, +0.000662f, - -0.003019f, +0.001563f, +0.000650f, +0.000795f, -0.000562f, -0.001272f, -0.000408f, +0.000583f, -0.002180f, -0.001368f, - +0.000201f, -0.000492f, +0.000344f, +0.000273f, +0.001916f, -0.001538f - }, - { - +0.008783f, -0.052881f, +0.000718f, +0.084234f, +0.006275f, +0.005944f, -0.000847f, -0.008332f, +0.005612f, -0.001359f, - -0.015938f, -0.027726f, +0.020046f, -0.013270f, +0.021549f, +0.001229f, -0.010753f, +0.001448f, -0.012162f, +0.018485f, - -0.011302f, -0.009776f, -0.008273f, +0.016054f, -0.007526f, +0.000999f, +0.015499f, +0.009895f, -0.004671f, +0.001516f, - -0.009022f, +0.011330f, -0.001362f, -0.005623f, -0.006739f, -0.006108f, -0.013066f, -0.008372f, +0.008143f, -0.003693f, - -0.001585f, -0.010015f, +0.005865f, -0.000085f, +0.006785f, +0.005000f, +0.001014f, -0.005129f, +0.009381f, +0.004286f, - -0.004913f, -0.002058f, +0.001608f, -0.008314f, +0.001906f, -0.003584f, -0.000489f, +0.004045f, -0.003829f, -0.006742f, - +0.000555f, -0.000247f, -0.004695f, +0.003312f, -0.000703f, -0.000597f, +0.003584f, +0.001536f, -0.001241f, +0.001688f, - +0.000709f, +0.002873f, +0.000851f, +0.001129f, -0.003813f, +0.000601f, +0.002890f, +0.000614f, -0.002570f, -0.000764f, - +0.000014f, -0.001923f, -0.000673f, +0.003223f, +0.004598f, +0.002048f, -0.000796f, -0.000325f, -0.001003f, +0.000930f, - +0.001461f, +0.000155f, +0.003423f, -0.000983f, -0.000119f, -0.001515f - }, - { - -0.008639f, -0.085668f, -0.005887f, +0.028624f, -0.005721f, +0.001668f, -0.005519f, -0.002081f, +0.001472f, +0.014291f, - -0.028832f, +0.006283f, +0.008680f, -0.012469f, -0.023902f, +0.016203f, -0.006346f, +0.010669f, -0.024190f, -0.005714f, - -0.006290f, -0.000285f, +0.004372f, +0.000328f, +0.012585f, -0.032897f, +0.009747f, -0.008356f, +0.011030f, -0.002316f, - -0.016373f, +0.002730f, -0.007849f, +0.008398f, +0.007512f, -0.011962f, +0.005761f, -0.008607f, -0.002831f, +0.007424f, - -0.007403f, -0.003857f, -0.006952f, -0.003126f, +0.000259f, +0.002009f, +0.008065f, -0.000940f, -0.003326f, +0.005713f, - +0.000270f, -0.004064f, +0.001135f, -0.003091f, -0.002258f, -0.007336f, +0.005981f, +0.004686f, -0.006230f, +0.010735f, - +0.001460f, +0.004191f, -0.008020f, +0.003664f, -0.000720f, -0.005071f, -0.001540f, -0.007637f, +0.007659f, -0.000499f, - -0.003652f, +0.002373f, -0.001185f, -0.000387f, +0.003650f, +0.004882f, -0.000759f, -0.003186f, +0.003183f, -0.000297f, - +0.002197f, +0.000745f, -0.000631f, -0.002664f, +0.000569f, +0.000582f, +0.007036f, +0.000765f, +0.002850f, -0.000891f, - -0.001547f, -0.001333f, -0.000248f, -0.000313f, -0.001687f, -0.004022f - }, - { - +0.004136f, +0.018802f, -0.007373f, -0.013283f, +0.014571f, -0.000952f, +0.006469f, -0.006468f, -0.006696f, +0.005295f, - +0.004270f, -0.008152f, -0.006184f, -0.008377f, +0.015573f, +0.000290f, -0.016703f, +0.016921f, -0.012970f, -0.017695f, - +0.005066f, +0.008891f, -0.011798f, +0.017378f, +0.000068f, +0.026959f, +0.000830f, -0.009885f, -0.004580f, -0.007558f, - -0.005089f, +0.018094f, -0.009440f, +0.003080f, -0.001606f, +0.002168f, +0.001005f, +0.001761f, +0.009962f, -0.001607f, - -0.007245f, +0.012102f, +0.011919f, -0.008647f, -0.002057f, +0.000935f, +0.009180f, +0.007627f, -0.002916f, -0.001594f, - -0.001313f, +0.001601f, +0.008176f, -0.000243f, +0.003221f, +0.002109f, +0.004457f, +0.005830f, -0.000875f, +0.001976f, - -0.000440f, -0.003783f, +0.008611f, -0.000262f, -0.001709f, -0.008345f, -0.001226f, -0.000296f, -0.000722f, +0.004054f, - -0.005909f, +0.002732f, +0.002402f, -0.000396f, +0.000588f, +0.000487f, -0.001478f, +0.003158f, +0.003947f, -0.001874f, - +0.001385f, -0.000646f, +0.000443f, -0.002266f, -0.000475f, +0.002223f, -0.000535f, -0.001701f, +0.002726f, -0.000286f, - +0.000873f, +0.001020f, -0.001295f, +0.000937f, -0.000056f, -0.000208f - }, - { - -0.020524f, -0.081515f, +0.010554f, -0.036298f, +0.013169f, -0.008647f, +0.011476f, +0.000581f, -0.021179f, +0.012215f, - -0.020856f, +0.034953f, -0.008383f, +0.005820f, -0.013275f, -0.004905f, +0.002943f, +0.002948f, -0.008387f, -0.011006f, - -0.008139f, +0.000868f, -0.008912f, -0.006218f, +0.010590f, -0.017921f, +0.012200f, -0.005600f, -0.003533f, -0.008807f, - +0.007453f, -0.009705f, +0.014251f, +0.003929f, -0.009004f, +0.005498f, -0.000863f, +0.006511f, +0.000800f, -0.002012f, - +0.006710f, -0.000860f, -0.000200f, +0.002944f, +0.000203f, +0.006260f, +0.005606f, +0.014522f, -0.001218f, +0.001694f, - -0.007086f, -0.002992f, -0.002285f, -0.005602f, -0.000988f, +0.006797f, +0.002373f, +0.000641f, +0.000000f, +0.004668f, - -0.004310f, -0.001192f, +0.006198f, +0.001304f, -0.004925f, +0.000532f, -0.000413f, +0.002964f, +0.002545f, +0.001059f, - -0.000248f, -0.003655f, -0.004345f, -0.002385f, +0.000847f, -0.004656f, -0.000891f, +0.002519f, -0.001488f, -0.001332f, - -0.004130f, +0.000051f, -0.001339f, +0.001647f, -0.002943f, +0.000745f, -0.002414f, +0.000913f, +0.000720f, +0.001382f, - -0.000773f, +0.000036f, +0.002154f, -0.001012f, +0.000287f, +0.001586f - }, - { - -0.001031f, +0.009203f, +0.012177f, -0.007797f, +0.003527f, -0.001042f, -0.004266f, -0.000516f, +0.000197f, -0.001666f, - -0.003241f, +0.002850f, -0.010713f, +0.007698f, -0.038440f, +0.000591f, -0.036220f, -0.003233f, -0.004923f, -0.005683f, - +0.000311f, +0.009203f, +0.003283f, -0.012584f, +0.000887f, +0.001441f, +0.007292f, -0.009950f, +0.008072f, -0.023513f, - +0.008276f, +0.010114f, -0.015313f, +0.022899f, +0.006994f, +0.007666f, -0.006202f, -0.003185f, +0.006776f, +0.004639f, - -0.003258f, -0.012548f, +0.002130f, -0.006565f, +0.003434f, +0.005760f, -0.003881f, -0.002910f, -0.010107f, +0.002189f, - +0.000491f, +0.002369f, +0.000295f, -0.000020f, -0.002652f, -0.009386f, +0.003876f, -0.004563f, -0.001231f, -0.000820f, - -0.006222f, +0.000837f, +0.000112f, +0.001524f, -0.002823f, +0.003869f, +0.003707f, -0.001475f, +0.001948f, -0.001004f, - +0.001538f, +0.005078f, -0.000391f, +0.002947f, -0.000732f, -0.002505f, +0.000018f, -0.002487f, -0.000879f, -0.002441f, - -0.000080f, +0.002154f, -0.004870f, +0.002603f, +0.000323f, -0.002274f, -0.000880f, -0.002775f, +0.002743f, +0.000933f, - +0.000295f, +0.001134f, +0.000742f, +0.001055f, -0.000751f, -0.000212f - }, - { - -0.003695f, -0.143659f, +0.015237f, -0.075894f, +0.019284f, +0.009651f, -0.029863f, +0.036305f, -0.003769f, +0.010570f, - -0.015451f, -0.025897f, -0.001443f, -0.011446f, -0.007080f, -0.012003f, -0.016379f, +0.000463f, +0.017649f, +0.014291f, - +0.007457f, +0.008519f, +0.004422f, -0.012197f, +0.003094f, -0.005587f, -0.004382f, +0.023000f, -0.005997f, +0.000604f, - -0.006327f, +0.007336f, +0.009463f, +0.010365f, +0.011969f, +0.000131f, -0.000930f, -0.002495f, +0.006001f, +0.000388f, - +0.008687f, +0.003295f, +0.003261f, +0.000857f, -0.001607f, -0.000864f, -0.002242f, -0.001797f, -0.000449f, -0.008726f, - +0.004544f, +0.000303f, -0.000391f, +0.004127f, -0.007954f, +0.003707f, +0.008336f, +0.000875f, +0.003270f, +0.002682f, - +0.003207f, +0.001783f, +0.000446f, -0.005167f, +0.001456f, -0.005619f, +0.000186f, +0.010032f, -0.002587f, +0.001101f, - +0.004097f, +0.003161f, +0.000682f, -0.003538f, +0.001989f, -0.001739f, +0.000285f, -0.001633f, +0.004196f, -0.000201f, - -0.000559f, +0.002914f, +0.001587f, -0.001930f, -0.001694f, -0.002197f, -0.002461f, +0.001795f, -0.001780f, +0.001396f, - -0.000800f, -0.001651f, +0.000212f, -0.000531f, -0.003339f, +0.000578f - }, - { - -0.004627f, +0.014167f, +0.000361f, +0.006536f, -0.004466f, -0.002059f, +0.004541f, +0.000853f, +0.004489f, -0.012167f, - -0.003117f, +0.006199f, +0.009088f, +0.013094f, -0.011476f, +0.038239f, +0.057766f, -0.020711f, -0.009162f, -0.001814f, - +0.013750f, +0.006563f, -0.004102f, -0.001108f, -0.009670f, +0.002917f, -0.007312f, +0.012438f, -0.001736f, +0.008638f, - -0.006815f, -0.013681f, -0.003980f, +0.007839f, +0.015593f, -0.004634f, -0.000966f, +0.011972f, -0.006949f, +0.005410f, - -0.005891f, -0.020581f, -0.001367f, +0.012700f, -0.005314f, -0.008605f, -0.001536f, +0.006221f, +0.000300f, +0.000199f, - +0.002328f, +0.006164f, +0.000876f, +0.004890f, -0.011784f, +0.000157f, +0.000307f, -0.002859f, +0.000040f, -0.002474f, - +0.005505f, +0.001825f, +0.001572f, -0.001892f, +0.005259f, +0.003524f, -0.005682f, +0.006658f, +0.005138f, +0.001582f, - -0.003831f, +0.000059f, -0.004192f, +0.004090f, -0.002067f, -0.000527f, +0.000905f, +0.000936f, -0.000907f, +0.004106f, - +0.000151f, +0.001536f, +0.002803f, -0.002922f, +0.000398f, +0.001214f, +0.003966f, +0.001931f, +0.003209f, -0.001500f, - -0.001209f, -0.000864f, +0.001837f, +0.000138f, -0.001367f, +0.000748f - }, - { - +0.010159f, +0.113965f, -0.006707f, -0.015710f, +0.036239f, +0.004550f, +0.033675f, -0.011229f, +0.020860f, +0.002559f, - +0.020257f, -0.017889f, -0.025646f, -0.017873f, +0.006748f, -0.012269f, -0.003005f, -0.015640f, +0.007073f, -0.003630f, - +0.016028f, -0.017858f, -0.002250f, +0.005504f, -0.012422f, +0.001205f, -0.011804f, -0.001994f, -0.005650f, +0.002775f, - -0.007969f, -0.006132f, +0.012103f, -0.007152f, +0.006587f, +0.002669f, +0.009777f, +0.000833f, +0.005017f, +0.017553f, - +0.002860f, +0.007723f, -0.004992f, -0.006838f, +0.006747f, +0.007269f, -0.013300f, -0.007637f, -0.005781f, -0.010186f, - +0.001802f, -0.005446f, +0.001142f, -0.003483f, -0.005198f, -0.004644f, -0.001844f, -0.002447f, -0.000979f, -0.007196f, - -0.004203f, -0.001422f, +0.008661f, +0.009806f, -0.001949f, +0.004149f, +0.000761f, +0.000946f, +0.004321f, +0.000950f, - -0.001467f, -0.002134f, +0.000680f, -0.007366f, -0.001603f, +0.001480f, +0.005061f, -0.004436f, -0.002228f, +0.003022f, - +0.001328f, +0.005540f, -0.002888f, -0.001400f, +0.003277f, -0.001320f, +0.001354f, +0.002513f, -0.001970f, -0.002658f, - +0.000980f, -0.005400f, +0.001322f, -0.001633f, -0.002665f, -0.000712f - }, - { - +0.003915f, -0.059141f, -0.000395f, -0.005516f, +0.011227f, -0.001050f, -0.009703f, -0.002621f, -0.000539f, +0.003268f, - +0.001749f, -0.015164f, +0.002819f, -0.024976f, +0.010389f, -0.010245f, +0.025413f, +0.012493f, +0.013010f, +0.004666f, - -0.013193f, -0.001901f, -0.007585f, -0.010488f, +0.009921f, +0.011838f, -0.016117f, +0.001166f, -0.008725f, -0.011960f, - +0.010240f, -0.010830f, +0.023990f, -0.010156f, -0.015840f, -0.007091f, -0.013613f, -0.007609f, +0.000236f, +0.003231f, - +0.016026f, +0.002124f, -0.000007f, -0.000888f, -0.003201f, -0.002451f, -0.013515f, -0.003135f, +0.000576f, +0.006811f, - +0.003874f, -0.003081f, +0.002054f, +0.001678f, +0.003496f, +0.002887f, +0.005199f, +0.004674f, +0.002453f, +0.002928f, - +0.006147f, +0.000390f, -0.005791f, +0.001582f, -0.002519f, -0.002969f, +0.002707f, +0.003648f, -0.004719f, +0.000471f, - +0.001670f, -0.000310f, -0.001838f, +0.001141f, -0.002541f, +0.000478f, +0.004279f, -0.000541f, +0.002118f, -0.000287f, - -0.004938f, +0.003542f, +0.001625f, -0.003721f, -0.000537f, +0.004220f, +0.000238f, +0.002053f, +0.000497f, +0.000669f, - -0.000182f, -0.000237f, -0.001034f, +0.000099f, +0.000970f, -0.003849f - }, - { - -0.027916f, +0.021879f, -0.019974f, +0.000459f, +0.015812f, +0.015229f, -0.004147f, -0.012988f, +0.022603f, +0.018667f, - -0.001342f, -0.016478f, +0.020122f, +0.016551f, +0.012641f, -0.004928f, -0.011245f, -0.010147f, +0.001113f, +0.015678f, - -0.001155f, -0.010796f, -0.015000f, -0.006951f, +0.002595f, +0.003707f, +0.019413f, -0.007227f, -0.000440f, -0.001821f, - +0.018631f, -0.024934f, -0.013579f, +0.011975f, -0.006532f, +0.006544f, +0.006633f, +0.003689f, -0.004439f, -0.003447f, - -0.004550f, -0.006276f, +0.005950f, +0.002806f, +0.001665f, -0.004378f, +0.017466f, -0.004366f, +0.008984f, -0.002504f, - +0.004098f, -0.009302f, +0.006986f, -0.007879f, -0.000421f, -0.001780f, -0.000148f, -0.006557f, +0.011817f, +0.004211f, - -0.002967f, +0.001473f, -0.001889f, +0.008967f, -0.001835f, +0.002510f, -0.000822f, -0.001041f, -0.003833f, -0.000201f, - +0.000743f, +0.001636f, +0.004459f, -0.004225f, +0.000973f, -0.005168f, -0.001619f, +0.006838f, -0.002223f, -0.000711f, - +0.001871f, -0.000610f, -0.003876f, -0.001630f, +0.002949f, -0.000818f, -0.000729f, +0.001066f, +0.000094f, -0.001278f, - +0.000984f, +0.000805f, -0.002784f, +0.000900f, -0.000387f, -0.000810f - }, - { - +0.004258f, +0.001534f, -0.015180f, +0.015330f, -0.019353f, +0.004708f, -0.006776f, +0.002346f, +0.008585f, -0.008100f, - +0.008120f, +0.003635f, +0.005412f, -0.093399f, -0.000016f, -0.011418f, +0.010270f, -0.007489f, -0.005272f, +0.001638f, - +0.005016f, -0.005250f, +0.000493f, -0.003755f, -0.003942f, -0.021335f, +0.006562f, -0.013083f, -0.005521f, +0.000684f, - -0.004737f, +0.012001f, +0.004167f, -0.015846f, +0.007634f, -0.010849f, +0.001192f, +0.009132f, -0.009115f, +0.006421f, - -0.012553f, +0.011169f, +0.001458f, -0.009608f, -0.004963f, -0.006815f, -0.001529f, -0.006389f, -0.000114f, +0.016934f, - +0.000682f, +0.001590f, -0.003253f, +0.000336f, +0.000567f, -0.000637f, -0.012034f, -0.004528f, +0.003761f, -0.004798f, - +0.016754f, -0.005847f, -0.009716f, -0.002779f, +0.001972f, -0.005399f, -0.000659f, -0.001695f, -0.011273f, +0.000180f, - +0.002412f, -0.004548f, -0.000398f, +0.000882f, +0.002452f, +0.002494f, -0.000156f, +0.000339f, -0.002570f, -0.004441f, - +0.002588f, -0.001580f, +0.000083f, -0.000131f, -0.001876f, -0.001333f, +0.001160f, +0.000681f, +0.003911f, +0.000832f, - +0.001316f, +0.001196f, +0.001800f, -0.001567f, -0.000820f, +0.001088f - }, - { - -0.022339f, -0.045626f, -0.001530f, +0.019499f, -0.016318f, +0.024275f, +0.009234f, -0.008306f, +0.017705f, +0.021034f, - +0.006852f, +0.009054f, -0.061953f, +0.014313f, -0.021268f, -0.001549f, -0.020236f, -0.018761f, +0.011265f, +0.015842f, - -0.003334f, +0.007122f, +0.004032f, +0.009678f, -0.007059f, -0.016047f, +0.036319f, +0.002649f, +0.014277f, +0.015763f, - +0.009807f, -0.018553f, +0.006144f, -0.007304f, +0.024659f, +0.001268f, +0.009714f, -0.010411f, +0.003484f, -0.009130f, - -0.010343f, -0.003455f, +0.005072f, +0.010324f, -0.007253f, +0.004699f, +0.003913f, +0.010530f, -0.005281f, -0.000712f, - -0.013461f, +0.009518f, +0.001386f, +0.001924f, +0.002118f, -0.000309f, -0.009571f, -0.000336f, -0.004987f, +0.005123f, - -0.008234f, +0.000490f, -0.003465f, -0.009471f, +0.000032f, +0.002160f, -0.003796f, -0.002416f, -0.000536f, +0.001849f, - +0.002173f, -0.002588f, +0.005116f, +0.000825f, -0.000662f, -0.000262f, +0.004889f, -0.000596f, -0.003993f, +0.002304f, - +0.002437f, +0.000409f, -0.003685f, -0.003280f, -0.003402f, +0.001180f, -0.002860f, +0.001117f, -0.002207f, +0.004221f, - +0.003952f, +0.000317f, +0.001353f, -0.002548f, +0.003755f, -0.001014f - }, - { - -0.002563f, -0.037748f, +0.009877f, +0.001693f, +0.005453f, -0.002590f, +0.018527f, -0.003033f, +0.006667f, -0.012034f, - -0.005281f, +0.007271f, +0.013778f, -0.067877f, -0.068772f, +0.010406f, -0.005969f, +0.010552f, -0.013696f, -0.016360f, - +0.009403f, +0.011630f, -0.024861f, +0.002138f, -0.000713f, -0.020789f, +0.003209f, +0.014356f, +0.010039f, +0.016991f, - +0.016176f, -0.000708f, -0.007361f, -0.004471f, -0.014356f, +0.004600f, -0.015473f, -0.001780f, +0.008509f, -0.017527f, - -0.010224f, +0.014877f, -0.001361f, -0.002240f, -0.008013f, +0.007154f, -0.002998f, +0.005423f, +0.000952f, -0.013596f, - +0.004624f, +0.003424f, +0.000371f, +0.005187f, +0.004192f, -0.003725f, -0.001888f, -0.002861f, +0.006828f, -0.000229f, - +0.004590f, +0.000882f, +0.008684f, -0.008724f, -0.001912f, +0.002309f, -0.012322f, +0.004986f, -0.001258f, +0.000394f, - +0.000400f, +0.003422f, +0.001340f, +0.000787f, +0.005016f, +0.001729f, +0.007198f, +0.000502f, +0.001615f, +0.001671f, - +0.003889f, +0.004506f, -0.003317f, -0.002649f, -0.001983f, -0.000515f, -0.001683f, +0.003442f, -0.002203f, -0.000023f, - +0.001385f, +0.000278f, -0.003103f, +0.004629f, -0.003253f, +0.002612f - } - }, - { - { - +0.028235f, +0.013519f, +0.046771f, +0.125150f, -0.009544f, -0.003206f, -0.004306f, -0.006612f, +0.010335f, +0.018780f, - +0.038857f, -0.012509f, +0.014820f, +0.007239f, -0.001006f, +0.010005f, -0.001032f, +0.024360f, -0.004805f, +0.003360f, - -0.004840f, +0.012937f, +0.012059f, +0.014385f, -0.009488f, -0.004576f, +0.005693f, +0.004557f, +0.007841f, -0.008691f, - +0.006260f, -0.006553f, +0.003915f, -0.011278f, +0.014051f, +0.002003f, +0.011463f, +0.007318f, +0.000220f, -0.003958f, - +0.003058f, +0.002435f, +0.011299f, +0.006398f, +0.001353f, -0.004619f, -0.004110f, +0.003898f, -0.001982f, -0.002994f, - +0.002054f, -0.008879f, +0.003105f, -0.014403f, -0.005678f, -0.008270f, +0.006590f, +0.001315f, -0.001833f, -0.000891f, - -0.006781f, +0.002729f, -0.003079f, -0.000331f, -0.003283f, +0.000715f, +0.005265f, -0.006154f, +0.000604f, -0.000634f, - +0.002797f, +0.002192f, -0.003615f, -0.000414f, +0.001702f, -0.002575f, +0.002639f, -0.002119f, +0.001010f, -0.002904f, - +0.002277f, -0.001741f, -0.000308f, +0.000749f, -0.002972f, +0.001067f, -0.001651f, -0.000099f, -0.001608f, +0.000923f, - +0.001042f, +0.002616f, +0.000903f, -0.000032f, -0.001390f, -0.001217f - }, - { - +0.002306f, +0.036909f, -0.015050f, -0.088735f, +0.005215f, -0.005590f, -0.003714f, -0.003148f, +0.006490f, -0.000245f, - +0.001147f, -0.023172f, -0.007792f, +0.001198f, -0.001133f, +0.001622f, -0.020815f, -0.005589f, +0.000286f, +0.008458f, - +0.017640f, +0.000702f, +0.016442f, +0.018946f, +0.016642f, -0.009862f, -0.010779f, -0.012939f, -0.001794f, +0.000885f, - -0.010868f, +0.003023f, -0.023698f, +0.001936f, +0.009647f, +0.002865f, +0.014272f, +0.002101f, +0.005538f, -0.002890f, - +0.004843f, +0.001158f, -0.003635f, -0.013540f, -0.002820f, +0.019275f, +0.011889f, +0.003966f, -0.009211f, +0.003981f, - -0.004246f, -0.003372f, +0.005243f, -0.006526f, -0.004191f, +0.001923f, +0.000360f, -0.003612f, -0.003380f, +0.006149f, - +0.001915f, -0.005223f, +0.001722f, -0.007078f, +0.001498f, +0.000719f, +0.000061f, -0.001785f, -0.002843f, +0.001469f, - -0.003467f, -0.003067f, -0.000595f, +0.001635f, -0.001803f, +0.001091f, -0.004107f, +0.003592f, +0.000388f, -0.004078f, - -0.002962f, +0.003978f, +0.000640f, -0.001517f, +0.000331f, -0.000429f, +0.001048f, +0.003676f, -0.001398f, +0.000175f, - +0.002678f, +0.001409f, +0.001061f, -0.002305f, -0.000703f, -0.000901f - }, - { - -0.011347f, -0.018289f, +0.031751f, +0.017155f, -0.047954f, -0.003822f, -0.003755f, +0.000747f, +0.009037f, -0.003007f, - -0.003701f, -0.030756f, +0.008176f, -0.024669f, +0.010095f, +0.015687f, -0.002742f, +0.001966f, -0.007917f, +0.019707f, - -0.004989f, -0.004988f, -0.015410f, +0.004627f, -0.007298f, -0.009524f, +0.004980f, +0.018174f, +0.003247f, -0.011075f, - -0.011766f, +0.022365f, +0.004344f, +0.011527f, +0.010802f, +0.012122f, +0.000380f, -0.007939f, +0.016561f, +0.001450f, - +0.000111f, -0.013931f, +0.003719f, +0.001352f, +0.001973f, +0.003387f, -0.001605f, -0.008582f, +0.004721f, +0.002722f, - -0.001166f, +0.004914f, +0.001927f, -0.003477f, +0.006194f, -0.003190f, -0.007769f, +0.002268f, -0.007428f, -0.007804f, - +0.005317f, +0.003756f, -0.002062f, +0.002886f, -0.001419f, -0.003462f, +0.004471f, +0.001609f, -0.000583f, +0.000511f, - -0.000781f, +0.004423f, +0.000810f, +0.000804f, -0.003823f, +0.000849f, +0.005448f, +0.001868f, -0.003811f, -0.003987f, - -0.003980f, -0.003417f, -0.003484f, -0.001283f, +0.001974f, +0.000057f, -0.002733f, -0.000312f, +0.002092f, +0.002943f, - +0.000566f, -0.000384f, +0.002862f, +0.001581f, +0.003123f, +0.000435f - }, - { - +0.020530f, -0.045286f, +0.011879f, +0.031932f, -0.017427f, +0.003081f, -0.006186f, -0.001824f, -0.003481f, -0.000197f, - -0.022545f, +0.014074f, +0.013938f, +0.012586f, -0.019027f, +0.019768f, -0.009120f, +0.003313f, -0.013397f, +0.002451f, - +0.000966f, -0.020782f, -0.030356f, -0.015457f, +0.000403f, -0.047678f, +0.008401f, -0.006391f, +0.010299f, -0.001198f, - -0.012763f, +0.010470f, -0.001076f, +0.006356f, +0.018785f, -0.007592f, +0.005687f, -0.003200f, +0.009224f, +0.011281f, - -0.007800f, -0.004569f, -0.007100f, +0.002688f, -0.001496f, -0.003487f, +0.005001f, -0.008960f, -0.005799f, +0.009556f, - +0.006078f, +0.000819f, +0.000804f, -0.003046f, +0.001367f, -0.005984f, +0.002269f, +0.005161f, -0.003597f, +0.007823f, - +0.002867f, +0.001921f, -0.011492f, -0.000575f, +0.002499f, -0.000003f, +0.000954f, -0.002419f, +0.008702f, -0.003693f, - -0.003422f, +0.003581f, +0.000035f, -0.003493f, +0.000130f, -0.000293f, -0.003372f, -0.002846f, +0.002296f, -0.000897f, - +0.000181f, -0.002347f, -0.000720f, -0.000666f, -0.000193f, -0.002830f, +0.002807f, +0.000871f, +0.004164f, +0.000854f, - +0.000794f, +0.000949f, -0.000141f, -0.001710f, +0.001466f, -0.000565f - }, - { - -0.003302f, +0.032158f, +0.009409f, -0.020841f, +0.002606f, -0.005316f, +0.001280f, -0.000613f, +0.000965f, +0.004640f, - -0.006536f, -0.017695f, -0.004155f, +0.009055f, +0.030237f, -0.006345f, -0.005708f, +0.010428f, -0.014874f, +0.004101f, - +0.024299f, +0.000900f, -0.035289f, +0.016386f, -0.011150f, +0.014158f, +0.021254f, +0.008506f, +0.000293f, +0.007894f, - +0.009264f, +0.013533f, -0.006857f, +0.012880f, -0.000251f, -0.003059f, +0.000089f, -0.000617f, -0.002864f, -0.017150f, - -0.013003f, +0.004330f, +0.005778f, -0.007708f, -0.004735f, -0.007037f, +0.000329f, +0.003426f, +0.001975f, +0.000164f, - -0.002519f, +0.000146f, +0.012205f, -0.001348f, -0.000911f, -0.001970f, -0.003283f, +0.003600f, -0.001042f, +0.001467f, - -0.001670f, -0.003439f, +0.006698f, -0.000624f, -0.001513f, -0.006430f, -0.005636f, -0.003625f, +0.001451f, +0.004953f, - -0.004916f, +0.005407f, +0.004906f, -0.001852f, +0.000093f, +0.002724f, +0.000109f, +0.002498f, -0.000553f, -0.004576f, - +0.002517f, -0.000532f, +0.003816f, -0.000352f, -0.003224f, -0.001047f, -0.001692f, +0.001329f, +0.003171f, -0.001551f, - -0.000196f, +0.001184f, -0.001077f, +0.000389f, -0.000343f, -0.001044f - }, - { - +0.033433f, -0.021092f, +0.010897f, -0.040982f, -0.005771f, -0.006139f, +0.015971f, -0.018566f, -0.034762f, +0.008712f, - -0.003597f, +0.046911f, -0.009666f, +0.017770f, -0.002265f, -0.010992f, -0.018014f, -0.002051f, +0.003407f, -0.001795f, - +0.002924f, +0.001028f, -0.017245f, -0.007861f, +0.034911f, -0.003240f, +0.013850f, -0.011227f, -0.007965f, -0.006738f, - +0.007284f, -0.004439f, +0.012454f, +0.005417f, -0.001135f, +0.006533f, -0.001162f, +0.002673f, -0.004902f, -0.003966f, - +0.004045f, -0.002032f, +0.001611f, -0.001270f, -0.001639f, +0.005020f, +0.000537f, +0.011575f, -0.001235f, +0.000864f, - -0.010217f, -0.002908f, +0.002762f, -0.003154f, -0.000043f, +0.006204f, -0.000461f, -0.007085f, -0.003983f, +0.004004f, - -0.005572f, -0.000564f, -0.001212f, -0.003795f, -0.004200f, +0.002485f, +0.004412f, +0.002496f, +0.000978f, +0.001443f, - +0.000248f, -0.003700f, -0.003408f, +0.000066f, +0.004592f, -0.000697f, +0.002147f, +0.003978f, +0.002020f, +0.000914f, - -0.001575f, +0.002313f, +0.002479f, +0.004443f, -0.001423f, +0.004241f, +0.001544f, +0.001339f, -0.001191f, +0.001922f, - -0.000685f, +0.000424f, +0.004960f, -0.000468f, -0.000453f, +0.000755f - }, - { - -0.000072f, -0.022964f, -0.027828f, -0.001077f, +0.008896f, -0.000424f, -0.001857f, -0.000677f, -0.007570f, -0.002049f, - -0.008454f, -0.004240f, -0.012508f, +0.014901f, -0.015096f, +0.005886f, -0.034005f, +0.003030f, -0.003855f, +0.006419f, - +0.007890f, +0.004016f, -0.000598f, -0.028646f, -0.016599f, -0.011826f, -0.007429f, -0.008175f, +0.018050f, -0.020196f, - +0.011487f, +0.007999f, -0.015386f, +0.025176f, +0.008540f, +0.006061f, -0.007293f, -0.002703f, +0.004928f, -0.000890f, - +0.007036f, -0.007546f, -0.011501f, -0.012465f, +0.008864f, +0.003601f, +0.000191f, -0.001431f, -0.018140f, +0.002385f, - +0.001411f, +0.002363f, +0.006964f, +0.005368f, +0.001906f, -0.003864f, +0.004455f, -0.010001f, -0.007382f, +0.001878f, - -0.004266f, -0.001532f, +0.001374f, +0.003154f, +0.000096f, +0.002530f, +0.001771f, -0.006194f, +0.000355f, +0.000645f, - -0.000206f, +0.003155f, -0.005752f, -0.002784f, +0.000977f, -0.001216f, +0.002518f, +0.001823f, -0.000235f, -0.005045f, - -0.003655f, +0.000906f, -0.004062f, +0.000017f, +0.001960f, +0.001539f, -0.001683f, -0.002861f, +0.003034f, +0.002549f, - +0.001315f, -0.000203f, -0.001502f, +0.000978f, +0.001087f, +0.002033f - }, - { - +0.025434f, -0.107260f, +0.022450f, -0.112608f, -0.003590f, +0.008838f, -0.018990f, +0.059496f, -0.006005f, +0.002388f, - +0.019178f, +0.021512f, +0.014687f, -0.003149f, +0.012168f, -0.013139f, -0.038432f, -0.006377f, +0.022468f, +0.004287f, - -0.011460f, -0.001696f, -0.000229f, -0.023395f, -0.009821f, +0.000200f, +0.009732f, +0.019392f, +0.001053f, +0.009679f, - -0.015047f, +0.007846f, +0.001564f, -0.004197f, +0.004732f, -0.007740f, -0.000864f, +0.000081f, +0.004145f, -0.005554f, - +0.003258f, -0.000306f, -0.005857f, -0.009654f, -0.010479f, +0.000794f, +0.007648f, +0.001353f, -0.001075f, -0.010438f, - +0.007185f, +0.003565f, -0.000271f, +0.001621f, -0.010589f, +0.001400f, -0.000801f, -0.001029f, +0.007922f, +0.001634f, - +0.000020f, -0.002571f, +0.000741f, -0.004026f, +0.007666f, -0.003058f, +0.001019f, +0.006612f, -0.002791f, +0.002971f, - +0.001352f, -0.001098f, +0.000577f, -0.001246f, -0.000484f, -0.004867f, -0.001538f, -0.001456f, +0.004425f, -0.000914f, - -0.001436f, +0.004459f, +0.003819f, -0.000446f, -0.002223f, -0.000464f, -0.001357f, +0.002175f, -0.000207f, +0.001612f, - -0.000421f, -0.001896f, -0.001993f, -0.000189f, -0.001868f, +0.001964f - }, - { - -0.000059f, +0.045273f, -0.002285f, +0.019274f, +0.006236f, +0.000164f, +0.006810f, -0.004704f, +0.000174f, -0.006638f, - -0.000176f, +0.001180f, -0.000461f, +0.017361f, +0.003063f, +0.006853f, +0.023964f, -0.016281f, +0.000508f, -0.004627f, - +0.016961f, -0.001548f, -0.016249f, -0.005412f, +0.000751f, +0.012059f, -0.003565f, +0.027713f, -0.005604f, -0.006766f, - -0.014988f, -0.018989f, -0.004183f, +0.005859f, +0.013656f, +0.006867f, +0.007084f, +0.002650f, -0.014717f, -0.005178f, - -0.009878f, -0.009179f, +0.002131f, +0.012033f, -0.014792f, -0.006967f, +0.008314f, +0.000954f, -0.006400f, -0.002285f, - +0.000266f, -0.000034f, -0.002992f, +0.006639f, -0.004289f, +0.005588f, +0.005595f, +0.003973f, +0.011164f, -0.003077f, - -0.002686f, +0.000385f, +0.003212f, -0.001964f, +0.003173f, +0.001022f, -0.002222f, +0.001676f, -0.006345f, -0.000610f, - +0.000443f, +0.004128f, -0.003318f, +0.003587f, +0.000375f, +0.003191f, +0.001325f, -0.000308f, -0.000386f, +0.004016f, - -0.000479f, +0.001659f, +0.004257f, -0.001087f, +0.001569f, +0.002108f, +0.003710f, +0.002771f, +0.004190f, -0.001407f, - -0.001261f, -0.000634f, +0.000737f, +0.000043f, -0.001961f, -0.000979f - }, - { - -0.015503f, +0.107460f, +0.017447f, -0.012559f, -0.003612f, -0.041818f, -0.005445f, -0.017988f, +0.027866f, -0.003843f, - +0.008415f, -0.017182f, +0.013445f, +0.004683f, +0.007915f, -0.008368f, +0.011175f, -0.011042f, -0.018602f, -0.006524f, - +0.033624f, -0.008838f, -0.005204f, -0.001865f, -0.011882f, +0.009956f, -0.006297f, +0.001680f, -0.003120f, +0.011671f, - -0.001911f, -0.008857f, +0.010382f, -0.017498f, +0.002867f, -0.002876f, +0.006638f, +0.002752f, +0.001345f, +0.017119f, - +0.002274f, +0.000626f, -0.002776f, -0.006123f, -0.005413f, -0.001987f, -0.010758f, +0.004767f, +0.005817f, -0.015144f, - -0.002895f, -0.004047f, -0.005211f, -0.001448f, +0.007005f, +0.003675f, -0.006540f, -0.001958f, +0.005245f, -0.009984f, - -0.006309f, -0.001424f, +0.002748f, +0.007011f, -0.002999f, -0.001409f, -0.002147f, +0.000629f, +0.003460f, -0.000779f, - -0.000700f, -0.004143f, +0.001228f, -0.002736f, -0.000368f, -0.004091f, +0.001862f, -0.000881f, +0.000453f, +0.002283f, - -0.003599f, +0.002174f, +0.000269f, +0.000714f, +0.002533f, +0.001299f, +0.001782f, -0.000675f, -0.001163f, -0.000754f, - +0.002500f, -0.002225f, +0.005311f, +0.000470f, +0.000316f, -0.000883f - }, - { - -0.005099f, -0.050498f, +0.013481f, -0.024300f, +0.000461f, +0.023260f, +0.019527f, -0.009410f, -0.008572f, +0.014824f, - +0.007741f, -0.010514f, -0.001916f, -0.034620f, +0.008519f, -0.007160f, +0.016977f, +0.002096f, +0.018153f, +0.011657f, - -0.025459f, +0.008875f, -0.004237f, -0.028813f, +0.000851f, +0.000984f, -0.022143f, +0.002435f, -0.014098f, -0.022287f, - +0.013632f, -0.007631f, +0.013561f, -0.009790f, +0.006820f, +0.001602f, -0.005421f, -0.000644f, -0.001093f, +0.006251f, - +0.013565f, -0.001156f, +0.007572f, +0.000402f, -0.000187f, +0.007119f, -0.007984f, +0.008712f, -0.001856f, -0.003460f, - -0.003749f, -0.006133f, +0.000596f, -0.002881f, -0.001053f, -0.003794f, +0.000544f, +0.011402f, +0.004650f, +0.002234f, - -0.003672f, -0.008798f, -0.000712f, +0.008774f, +0.002222f, +0.000604f, +0.001279f, +0.004104f, -0.000686f, +0.003356f, - +0.005069f, +0.001244f, -0.002399f, +0.000217f, -0.001645f, +0.001202f, +0.003605f, -0.003827f, +0.000673f, -0.000531f, - -0.003996f, +0.000455f, +0.000723f, -0.000359f, +0.001975f, +0.004068f, -0.000268f, -0.000901f, -0.003404f, -0.000528f, - -0.001954f, -0.000229f, -0.000499f, +0.000011f, +0.003267f, -0.000642f - }, - { - +0.018630f, +0.068240f, -0.000657f, +0.028056f, +0.004935f, +0.071610f, +0.021182f, -0.025690f, +0.013180f, +0.000491f, - +0.015197f, +0.008542f, -0.007164f, -0.017353f, +0.021379f, -0.000368f, -0.004494f, +0.020863f, +0.004132f, -0.003861f, - +0.004670f, +0.000971f, +0.001877f, +0.005601f, +0.008242f, +0.006261f, +0.012343f, -0.007888f, +0.002338f, -0.002477f, - +0.030700f, -0.016680f, -0.012199f, +0.016439f, -0.007019f, -0.001359f, +0.002566f, +0.005853f, -0.000249f, -0.001758f, - -0.000935f, -0.001238f, +0.002504f, +0.000301f, +0.005565f, -0.001154f, +0.001024f, -0.013664f, +0.007533f, -0.004512f, - -0.001072f, -0.012024f, +0.012490f, -0.006479f, -0.008613f, -0.002987f, +0.001318f, -0.009291f, +0.008485f, +0.001865f, - -0.006698f, +0.001113f, -0.006038f, -0.002769f, -0.008027f, +0.001022f, +0.000916f, +0.008650f, +0.002407f, -0.000287f, - -0.002713f, +0.000851f, +0.005600f, -0.008616f, +0.000174f, -0.003098f, -0.002279f, +0.005687f, -0.003460f, -0.003098f, - +0.000343f, +0.002646f, -0.000912f, +0.000516f, +0.004132f, -0.001024f, +0.000380f, -0.000633f, -0.001103f, -0.000965f, - +0.001976f, +0.001794f, -0.004556f, +0.000629f, +0.000984f, -0.001308f - }, - { - -0.003931f, +0.008134f, +0.002087f, +0.016889f, -0.007298f, +0.003469f, -0.015233f, +0.002188f, +0.014067f, -0.008241f, - +0.006751f, +0.012079f, +0.004834f, -0.078694f, +0.009417f, -0.023700f, +0.002860f, -0.012363f, +0.003918f, +0.002999f, - -0.006610f, +0.002357f, +0.009368f, -0.012644f, -0.005244f, -0.016359f, -0.006541f, -0.001243f, -0.008946f, -0.009543f, - +0.001721f, +0.004693f, +0.002403f, -0.024393f, +0.006714f, -0.009733f, -0.005853f, +0.005740f, -0.005864f, +0.002481f, - -0.017600f, +0.012265f, +0.004615f, -0.006711f, -0.002767f, -0.000545f, -0.004890f, -0.006674f, -0.003185f, +0.008725f, - -0.011971f, -0.004662f, +0.001294f, +0.009143f, +0.003403f, +0.004008f, -0.005126f, -0.004770f, +0.000910f, -0.010284f, - +0.010065f, -0.002356f, -0.009550f, -0.008221f, +0.001325f, -0.001807f, -0.000828f, +0.002910f, +0.000634f, +0.007924f, - +0.000002f, -0.004692f, +0.000777f, -0.000982f, -0.000837f, -0.001165f, -0.003364f, +0.000040f, +0.001151f, -0.000806f, - +0.003090f, -0.001937f, +0.000446f, -0.003482f, -0.002492f, -0.000475f, +0.001889f, +0.000098f, +0.000932f, -0.000827f, - +0.000519f, -0.000480f, +0.004086f, +0.002267f, +0.003480f, +0.001903f - }, - { - +0.026106f, +0.020239f, +0.012473f, +0.024617f, -0.020208f, +0.036109f, +0.004226f, -0.016052f, -0.004449f, +0.018928f, - -0.005810f, -0.003595f, -0.059746f, -0.010737f, -0.064376f, +0.009615f, +0.001097f, -0.025543f, -0.000111f, +0.012357f, - +0.004029f, -0.001132f, -0.007531f, +0.009037f, -0.008763f, -0.042687f, +0.020334f, -0.013631f, -0.013727f, +0.003086f, - +0.008071f, -0.015439f, +0.006983f, -0.008751f, +0.021251f, -0.014884f, -0.006605f, -0.006863f, +0.015278f, -0.004782f, - -0.002561f, -0.003019f, +0.007398f, +0.011996f, -0.009686f, +0.012951f, +0.008589f, +0.007694f, -0.007071f, -0.004663f, - -0.010800f, +0.012389f, -0.008232f, -0.008366f, -0.002042f, +0.005149f, -0.009066f, -0.001176f, -0.003340f, -0.000627f, - -0.010231f, -0.001183f, -0.000807f, -0.006954f, +0.001985f, -0.000461f, -0.004166f, +0.000307f, -0.000376f, -0.001617f, - -0.000739f, -0.003305f, +0.001511f, -0.001065f, +0.001971f, +0.001073f, +0.001294f, -0.004339f, -0.005734f, +0.000208f, - -0.000380f, +0.001596f, +0.003224f, -0.000062f, -0.004152f, -0.001391f, -0.002752f, +0.001701f, -0.003994f, +0.000987f, - -0.000799f, -0.003463f, +0.001199f, -0.002137f, +0.002927f, -0.000554f - }, - { - +0.002972f, -0.053462f, -0.006524f, +0.006400f, +0.015015f, -0.002030f, +0.011851f, +0.001165f, +0.014177f, +0.003117f, - -0.006055f, -0.003152f, +0.006219f, +0.028356f, +0.060932f, +0.006159f, +0.014043f, +0.007056f, -0.032292f, -0.014945f, - +0.019807f, +0.003576f, -0.019735f, +0.004848f, -0.000666f, -0.015760f, -0.000353f, +0.009383f, -0.010849f, -0.005534f, - +0.008633f, +0.013080f, +0.006423f, +0.007585f, -0.003623f, +0.015286f, -0.013293f, -0.015668f, +0.004450f, -0.015232f, - -0.010759f, +0.021422f, +0.001805f, -0.001228f, +0.002323f, +0.014856f, -0.000470f, +0.001313f, -0.003401f, -0.006430f, - +0.007097f, -0.003531f, +0.001273f, +0.012537f, -0.000506f, -0.010289f, -0.000268f, +0.002586f, +0.007190f, -0.003389f, - +0.005873f, -0.000496f, +0.009739f, -0.004507f, +0.000258f, +0.009888f, -0.005701f, +0.010823f, +0.000079f, -0.000205f, - -0.005129f, +0.000921f, +0.003015f, -0.002232f, +0.002470f, -0.002381f, +0.001805f, -0.001909f, -0.001114f, -0.000748f, - +0.000521f, +0.001105f, +0.000952f, +0.002179f, +0.000873f, +0.003963f, +0.000471f, +0.000635f, -0.002450f, -0.000283f, - -0.000831f, +0.002041f, -0.001265f, +0.005768f, -0.002820f, +0.002582f - } - }, - { - { - -0.032246f, +0.058970f, +0.058704f, +0.111977f, +0.024281f, -0.015506f, -0.008080f, +0.006770f, -0.007336f, +0.027168f, - +0.021472f, +0.008476f, +0.008575f, +0.009482f, -0.000728f, +0.006548f, +0.018807f, +0.003044f, +0.001780f, -0.000566f, - +0.002266f, +0.015540f, +0.002221f, +0.015700f, -0.005109f, -0.005261f, +0.000690f, +0.011396f, -0.003278f, +0.000575f, - +0.004622f, -0.005612f, -0.002233f, +0.000845f, +0.005038f, +0.009373f, -0.003765f, +0.014924f, -0.000646f, -0.002655f, - +0.005747f, +0.000101f, +0.004289f, +0.006007f, +0.006701f, -0.008510f, +0.003658f, -0.005821f, +0.002238f, -0.007933f, - +0.002311f, -0.001065f, -0.004863f, -0.011007f, -0.003373f, -0.008913f, +0.002775f, +0.002007f, -0.001839f, -0.004307f, - +0.001888f, -0.000554f, -0.005739f, -0.000673f, -0.002077f, +0.000971f, -0.000325f, -0.003910f, -0.003485f, +0.003927f, - -0.002250f, +0.002723f, -0.000880f, +0.000006f, +0.000498f, -0.002076f, -0.000973f, -0.002244f, -0.001239f, -0.001323f, - +0.000275f, +0.001934f, -0.001743f, +0.000078f, +0.000130f, -0.002897f, +0.000073f, -0.001301f, -0.001448f, +0.002209f, - +0.002567f, +0.001465f, +0.001174f, -0.000197f, +0.001163f, -0.000699f - }, - { - -0.002751f, -0.016116f, +0.028019f, -0.020373f, -0.049026f, -0.004341f, +0.001874f, +0.003787f, +0.000235f, +0.008665f, - -0.016550f, -0.016481f, +0.005166f, -0.013064f, -0.004565f, +0.011719f, -0.029283f, -0.006138f, +0.025004f, -0.026140f, - +0.010529f, +0.025176f, -0.003688f, +0.010122f, +0.019483f, -0.003682f, +0.004009f, -0.026192f, +0.007302f, +0.002125f, - -0.013039f, -0.005097f, -0.015465f, +0.006692f, +0.003653f, +0.001075f, +0.019744f, +0.000313f, +0.000753f, +0.003646f, - -0.003249f, +0.007458f, +0.004227f, -0.015172f, -0.004621f, +0.019491f, +0.009967f, +0.007168f, -0.007235f, -0.002953f, - -0.002256f, -0.002587f, -0.005366f, +0.002840f, +0.001050f, -0.000253f, -0.002085f, -0.001975f, +0.001377f, -0.003882f, - +0.000473f, -0.000883f, +0.001210f, +0.000615f, -0.003355f, -0.000576f, +0.000701f, -0.002760f, +0.004128f, -0.003680f, - -0.004391f, -0.001140f, -0.000648f, -0.001580f, +0.001530f, -0.000013f, -0.003780f, +0.002722f, -0.000101f, -0.003153f, - +0.000847f, +0.001581f, +0.003612f, -0.003396f, +0.000365f, -0.001659f, +0.002991f, +0.002140f, -0.002495f, +0.004739f, - +0.000942f, +0.000857f, +0.000861f, -0.002050f, +0.000150f, -0.001941f - }, - { - +0.009753f, +0.041008f, -0.048865f, -0.060896f, +0.022426f, +0.000212f, -0.004221f, -0.001552f, +0.010895f, -0.005506f, - -0.016818f, -0.012369f, -0.021779f, +0.010061f, -0.006146f, +0.015755f, -0.003978f, -0.003600f, -0.006483f, +0.017047f, - +0.007737f, -0.007872f, -0.009030f, -0.014099f, +0.003048f, -0.003502f, +0.006807f, +0.010090f, +0.005469f, -0.011802f, - -0.012067f, +0.007737f, +0.022187f, -0.002961f, +0.026010f, -0.003659f, +0.015844f, -0.005785f, +0.001308f, +0.000193f, - +0.004583f, -0.009049f, +0.000471f, +0.007260f, -0.002806f, +0.002899f, -0.007585f, +0.006562f, -0.005353f, +0.005369f, - -0.004920f, +0.006846f, -0.005240f, +0.005350f, +0.003007f, -0.000820f, -0.009332f, -0.001307f, -0.007118f, -0.001555f, - +0.000541f, -0.000265f, +0.004379f, +0.006128f, -0.006355f, -0.001086f, +0.003159f, -0.001100f, +0.000949f, +0.003342f, - -0.002798f, +0.001430f, +0.001857f, +0.002210f, -0.004788f, +0.000966f, +0.003863f, +0.001729f, -0.004105f, -0.000893f, - -0.004862f, -0.001194f, -0.000911f, -0.005461f, +0.001364f, +0.000499f, -0.001774f, -0.000988f, +0.001455f, +0.003714f, - +0.001043f, +0.000026f, +0.000179f, +0.002226f, +0.001455f, +0.002022f - }, - { - -0.022948f, +0.004436f, -0.002443f, +0.043063f, +0.005061f, -0.002358f, -0.003641f, -0.011824f, +0.013385f, -0.011292f, - -0.017846f, +0.015710f, +0.001058f, +0.025464f, -0.002972f, +0.005966f, -0.013467f, +0.018816f, -0.015349f, -0.020729f, - +0.010190f, -0.016462f, -0.040475f, -0.003809f, -0.009878f, -0.038665f, +0.002056f, +0.010275f, -0.003006f, +0.000681f, - +0.006496f, -0.002845f, -0.001204f, +0.012757f, +0.015976f, -0.002116f, +0.003150f, +0.005261f, +0.003151f, +0.004072f, - +0.001279f, +0.002441f, -0.011454f, +0.004228f, -0.002235f, -0.000526f, -0.005754f, -0.004859f, +0.001274f, +0.007870f, - +0.001228f, +0.006153f, -0.006949f, +0.004240f, -0.006808f, -0.000741f, +0.001607f, +0.004611f, +0.005255f, -0.005862f, - +0.007885f, -0.002738f, -0.003883f, -0.008220f, +0.003672f, +0.005105f, -0.003148f, +0.007775f, +0.000055f, -0.001587f, - -0.002509f, +0.004656f, -0.000197f, -0.001253f, -0.001065f, -0.004641f, -0.001924f, +0.000218f, +0.000547f, -0.002171f, - -0.003056f, +0.002815f, -0.003044f, -0.000987f, -0.001076f, -0.001618f, -0.002419f, +0.004089f, +0.002435f, +0.000979f, - +0.000468f, +0.002432f, +0.000118f, -0.002580f, +0.002651f, +0.001031f - }, - { - +0.001356f, +0.054386f, -0.014489f, -0.014105f, -0.005310f, +0.000143f, -0.001752f, +0.000446f, +0.001887f, +0.001161f, - -0.000647f, -0.014425f, -0.006986f, -0.008410f, +0.053095f, -0.010262f, +0.019450f, -0.017161f, +0.006277f, +0.012373f, - +0.013090f, -0.002524f, -0.030806f, +0.006801f, -0.006406f, +0.014120f, +0.009909f, +0.011295f, +0.015672f, +0.003225f, - +0.002341f, +0.008013f, +0.001293f, +0.007866f, -0.007238f, +0.003337f, +0.000630f, -0.002127f, -0.014675f, -0.017252f, - +0.003381f, -0.003580f, -0.001379f, +0.001283f, -0.010729f, -0.010836f, +0.006427f, -0.003794f, +0.006109f, +0.002105f, - +0.002989f, -0.001565f, +0.006499f, -0.002795f, +0.001676f, -0.006193f, -0.001283f, +0.003995f, +0.000045f, -0.000724f, - -0.002562f, +0.005071f, -0.002990f, -0.001007f, +0.000071f, -0.001871f, -0.006607f, -0.001430f, -0.000435f, +0.003167f, - -0.000830f, +0.005838f, +0.000639f, +0.000597f, -0.002230f, +0.003948f, +0.001876f, -0.002535f, -0.002379f, -0.001796f, - +0.004014f, +0.000739f, +0.003026f, -0.000892f, -0.002210f, -0.003798f, -0.000814f, +0.002972f, +0.000497f, -0.000009f, - -0.000263f, -0.001020f, +0.000495f, +0.001891f, -0.001595f, -0.001448f - }, - { - -0.031219f, +0.078929f, -0.030796f, -0.030312f, +0.008832f, +0.003475f, +0.007998f, -0.026735f, -0.012876f, -0.010352f, - +0.037505f, +0.014522f, -0.001571f, +0.013710f, +0.016180f, -0.003643f, -0.040911f, -0.004535f, +0.013933f, +0.003838f, - -0.000248f, -0.009725f, -0.006916f, -0.005013f, +0.026479f, +0.011845f, -0.002280f, +0.000424f, -0.012363f, -0.002522f, - +0.000370f, +0.002385f, +0.006144f, +0.002949f, +0.002266f, +0.005709f, +0.008543f, -0.005327f, -0.015985f, -0.002237f, - +0.001282f, +0.006288f, +0.002099f, -0.003440f, +0.000234f, -0.004207f, +0.002401f, +0.008696f, +0.003652f, -0.007774f, - +0.002019f, -0.001488f, -0.000214f, -0.004315f, +0.004037f, -0.000913f, +0.000213f, -0.006949f, -0.002383f, -0.000544f, - -0.002895f, +0.004367f, -0.010113f, -0.000658f, +0.002466f, -0.002960f, +0.003200f, +0.003087f, +0.000350f, +0.003623f, - -0.002276f, -0.004499f, +0.003515f, -0.001089f, +0.003567f, -0.001580f, +0.001983f, +0.002607f, +0.004428f, +0.000335f, - +0.000965f, +0.001676f, +0.003916f, +0.002271f, -0.000515f, +0.003357f, +0.000904f, +0.000787f, +0.001123f, -0.000920f, - -0.000187f, +0.001737f, +0.002817f, +0.000982f, +0.000869f, -0.000152f - }, - { - +0.000853f, -0.042855f, -0.011867f, +0.005624f, +0.000937f, +0.000751f, -0.000355f, -0.002097f, -0.008334f, -0.003454f, - +0.006418f, -0.015072f, -0.001998f, +0.009595f, -0.003768f, -0.004678f, -0.027434f, -0.001767f, -0.008430f, +0.018266f, - +0.016767f, -0.004749f, -0.006442f, +0.000266f, -0.028243f, -0.015844f, -0.020222f, +0.008489f, +0.010479f, -0.012321f, - +0.010277f, -0.002466f, +0.005673f, +0.001251f, +0.017261f, +0.000759f, -0.009677f, +0.000299f, +0.002091f, -0.010730f, - +0.010734f, -0.001804f, -0.019769f, -0.005142f, +0.010637f, -0.008851f, -0.000042f, +0.001030f, -0.015444f, +0.007423f, - +0.001009f, -0.003936f, +0.010354f, +0.002818f, +0.002658f, -0.003310f, -0.001697f, +0.001980f, -0.011208f, +0.000787f, - -0.004082f, -0.001254f, +0.005163f, +0.004876f, -0.000584f, +0.000034f, -0.000807f, -0.002142f, -0.000826f, +0.001267f, - -0.000129f, -0.000939f, -0.001272f, -0.005977f, +0.001942f, -0.003204f, +0.002999f, +0.001456f, +0.001019f, -0.005021f, - -0.002698f, +0.000546f, -0.001043f, -0.002666f, +0.000557f, +0.004607f, -0.002131f, +0.001743f, +0.000350f, +0.001437f, - +0.003162f, -0.000586f, -0.003587f, +0.002925f, -0.000674f, +0.001901f - }, - { - -0.047095f, -0.019605f, +0.014210f, -0.120858f, +0.018301f, -0.003081f, +0.018907f, +0.020715f, +0.002572f, -0.006477f, - +0.022225f, +0.018268f, +0.024605f, -0.002871f, +0.016229f, -0.006564f, -0.040384f, +0.001862f, +0.015513f, -0.000176f, - +0.002433f, -0.012120f, +0.003617f, -0.010129f, -0.017012f, -0.000795f, +0.016459f, +0.005284f, +0.008083f, +0.004913f, - -0.002000f, +0.000639f, -0.006234f, +0.008172f, -0.007034f, -0.002288f, +0.001749f, -0.002414f, +0.002026f, -0.002646f, - +0.007422f, -0.006335f, -0.010226f, -0.006639f, -0.000815f, -0.001892f, +0.011343f, -0.003888f, +0.001704f, -0.003794f, - +0.000454f, +0.005564f, -0.003489f, -0.004187f, -0.000194f, -0.003424f, -0.001533f, -0.000780f, +0.007501f, +0.002911f, - +0.003766f, -0.005933f, +0.002455f, -0.000935f, +0.007761f, -0.004065f, +0.003193f, +0.003202f, +0.001532f, -0.001251f, - -0.003241f, +0.003303f, -0.001441f, -0.001381f, +0.000430f, -0.001920f, -0.005193f, +0.001266f, -0.000073f, +0.000928f, - -0.002241f, +0.004837f, +0.003530f, +0.000561f, -0.004170f, +0.002001f, -0.001119f, +0.001028f, -0.001154f, -0.000245f, - +0.002385f, -0.000299f, -0.003522f, -0.000159f, -0.001342f, +0.002055f - }, - { - +0.003927f, +0.012470f, +0.018633f, +0.006862f, +0.007857f, +0.003618f, +0.003119f, +0.001381f, -0.008325f, -0.004769f, - +0.015878f, -0.005577f, +0.003322f, -0.011728f, +0.024688f, -0.012083f, +0.003489f, +0.008545f, +0.001509f, -0.008011f, - +0.027664f, -0.020469f, -0.012274f, -0.000082f, +0.000950f, +0.000896f, +0.020063f, +0.016069f, -0.001217f, -0.005550f, - -0.013962f, -0.035810f, +0.022017f, +0.007911f, +0.009201f, +0.002502f, +0.002428f, -0.005849f, -0.002528f, -0.017751f, - -0.014144f, +0.011233f, -0.005873f, +0.009757f, -0.013562f, -0.000050f, +0.008903f, -0.006824f, -0.005476f, -0.002527f, - +0.001849f, +0.001494f, -0.004062f, +0.001613f, +0.002268f, +0.006155f, +0.002955f, +0.002461f, +0.007114f, +0.004615f, - -0.004365f, -0.001641f, +0.004540f, +0.001667f, +0.002135f, -0.002787f, +0.000537f, -0.002298f, -0.007303f, +0.001015f, - +0.002983f, +0.000423f, -0.001753f, +0.002897f, +0.002928f, +0.000530f, +0.004274f, -0.002839f, +0.002154f, +0.001318f, - -0.001985f, +0.003042f, +0.002287f, +0.000190f, +0.002441f, +0.001279f, +0.000714f, +0.003729f, +0.003179f, +0.001303f, - -0.002948f, +0.000244f, -0.000051f, +0.000600f, -0.002970f, -0.002585f - }, - { - +0.021094f, +0.109210f, -0.010801f, -0.005859f, -0.048080f, +0.033520f, -0.053264f, +0.010095f, +0.009967f, -0.009075f, - +0.015103f, -0.037095f, +0.037896f, -0.001457f, -0.007560f, +0.016058f, +0.002087f, +0.013013f, -0.027807f, -0.003542f, - +0.005745f, +0.012415f, -0.029343f, +0.008735f, -0.011157f, +0.008473f, -0.004739f, -0.002531f, +0.006504f, +0.007217f, - -0.001643f, +0.010681f, -0.002963f, -0.019277f, +0.004010f, -0.003442f, +0.010339f, -0.002265f, +0.008639f, +0.004882f, - +0.001881f, -0.000524f, -0.003544f, -0.001300f, -0.001987f, -0.008004f, -0.004532f, +0.003039f, -0.003642f, -0.006475f, - +0.002590f, -0.002910f, -0.010248f, -0.000756f, +0.012939f, +0.004053f, -0.011463f, -0.000163f, +0.005958f, -0.006117f, - -0.008945f, -0.002991f, +0.006356f, -0.002336f, +0.002445f, -0.002954f, +0.001429f, +0.001487f, +0.000621f, -0.001004f, - +0.000240f, -0.003025f, -0.000899f, +0.000289f, -0.001469f, -0.002773f, -0.002336f, +0.001397f, +0.001934f, -0.002225f, - -0.000755f, +0.003344f, -0.002390f, +0.000901f, +0.002001f, +0.000203f, +0.004958f, -0.001297f, -0.001356f, +0.002230f, - -0.001725f, +0.002257f, +0.003687f, -0.000827f, +0.002392f, -0.002262f - }, - { - +0.004889f, -0.045313f, -0.007403f, -0.012042f, -0.011568f, +0.013553f, +0.029342f, -0.009097f, -0.010107f, +0.015361f, - +0.004130f, +0.009872f, -0.022202f, -0.022648f, -0.005795f, +0.003264f, +0.001827f, +0.001048f, +0.012650f, +0.033389f, - -0.024388f, -0.005967f, -0.014074f, -0.024573f, +0.005115f, +0.005731f, -0.009017f, -0.000928f, -0.024069f, +0.009385f, - -0.004483f, -0.005138f, +0.014834f, -0.020102f, +0.015108f, -0.004645f, -0.000800f, +0.008941f, +0.000889f, +0.002491f, - +0.002258f, +0.010001f, -0.000714f, -0.002381f, +0.001304f, +0.004666f, -0.001126f, +0.012467f, -0.008848f, -0.012454f, - +0.002479f, -0.000881f, -0.004290f, -0.002030f, -0.000626f, +0.002213f, -0.007529f, +0.013417f, +0.004146f, +0.000068f, - -0.006886f, -0.008880f, +0.002495f, +0.003935f, +0.003405f, +0.007842f, -0.003057f, +0.001910f, +0.001397f, +0.005005f, - +0.005276f, -0.000812f, +0.002605f, -0.004038f, +0.000494f, +0.001443f, +0.003533f, -0.004557f, +0.000787f, -0.004511f, - -0.000131f, -0.001530f, +0.003382f, +0.000338f, +0.001826f, +0.002607f, +0.002406f, -0.002812f, -0.002069f, -0.001231f, - -0.001602f, -0.000578f, +0.000947f, -0.000631f, +0.000300f, +0.002164f - }, - { - +0.005231f, +0.096164f, -0.011396f, +0.050536f, -0.001478f, +0.088358f, +0.000961f, -0.013783f, -0.012738f, -0.005145f, - +0.033288f, +0.002883f, -0.001647f, -0.027229f, +0.020317f, +0.006984f, -0.013050f, +0.025773f, +0.012132f, -0.032093f, - +0.015141f, +0.004651f, +0.004871f, +0.001208f, +0.007371f, +0.017493f, -0.000270f, +0.006188f, -0.014659f, +0.008060f, - +0.020651f, -0.015891f, -0.000382f, +0.011054f, -0.000167f, -0.000918f, +0.006822f, -0.011421f, +0.003856f, +0.005567f, - -0.009685f, +0.002359f, +0.006888f, +0.003420f, +0.000793f, +0.006159f, -0.013188f, -0.010433f, +0.000142f, +0.002770f, - -0.006878f, +0.001301f, +0.000134f, -0.003341f, -0.004849f, +0.000459f, -0.010712f, +0.002986f, +0.001985f, -0.000917f, - -0.001240f, +0.000817f, -0.003856f, -0.013526f, -0.003356f, +0.003162f, +0.003667f, +0.003846f, -0.000346f, +0.001624f, - +0.000535f, -0.001017f, +0.003294f, -0.003297f, -0.003177f, -0.002305f, +0.001505f, +0.000324f, -0.001367f, -0.001701f, - +0.001751f, +0.000707f, +0.000211f, +0.001792f, -0.000547f, +0.002399f, +0.002696f, -0.002645f, -0.003212f, +0.001512f, - +0.001137f, -0.000389f, +0.001043f, -0.001393f, -0.000461f, -0.003676f - }, - { - +0.002099f, +0.016961f, -0.001083f, +0.006998f, +0.004561f, -0.000160f, -0.009542f, -0.008957f, +0.009816f, -0.003172f, - +0.004321f, +0.008096f, -0.011614f, -0.016172f, -0.022024f, -0.013384f, +0.005818f, -0.013447f, -0.007520f, +0.008682f, - -0.003670f, +0.011688f, -0.004865f, -0.005644f, -0.005253f, -0.007411f, -0.010328f, -0.013306f, +0.012586f, -0.021896f, - +0.026987f, -0.020361f, -0.001053f, -0.007215f, -0.009466f, +0.008697f, -0.019511f, +0.013015f, +0.004057f, -0.010939f, - -0.007270f, -0.000246f, +0.000015f, +0.003725f, -0.005627f, +0.004481f, -0.012113f, -0.000328f, -0.002804f, +0.001359f, - -0.010681f, -0.002998f, -0.003274f, +0.011087f, +0.002736f, -0.000534f, +0.004410f, -0.000816f, -0.009257f, -0.002504f, - +0.001984f, +0.001278f, -0.007696f, -0.007453f, +0.002632f, -0.003568f, -0.001079f, +0.001204f, +0.002954f, +0.011587f, - -0.006705f, -0.000949f, +0.002216f, -0.001206f, -0.003596f, -0.000237f, -0.003265f, +0.002034f, -0.003746f, +0.000990f, - +0.004759f, -0.003392f, -0.000942f, -0.001971f, +0.001582f, -0.003095f, +0.002374f, +0.001586f, -0.000911f, -0.000340f, - +0.001018f, -0.001976f, +0.005427f, +0.000285f, +0.004020f, +0.002098f - }, - { - -0.016302f, +0.111112f, +0.000470f, +0.010864f, -0.004840f, +0.022265f, -0.017823f, +0.017966f, -0.030146f, +0.010664f, - +0.007787f, -0.035577f, -0.016543f, -0.022009f, -0.052696f, +0.005285f, +0.003989f, -0.002168f, -0.010443f, +0.010092f, - +0.018531f, -0.027793f, -0.002668f, -0.000427f, +0.006216f, -0.040175f, +0.000027f, -0.019295f, -0.007864f, +0.007775f, - -0.012829f, +0.014696f, -0.006157f, -0.010450f, +0.013101f, -0.002187f, -0.019518f, -0.006628f, +0.021263f, -0.010212f, - +0.004590f, -0.003803f, +0.007409f, +0.004278f, -0.000330f, +0.005942f, +0.013938f, -0.001966f, -0.002446f, -0.011981f, - +0.011082f, -0.006087f, -0.007964f, -0.005793f, -0.005808f, +0.007773f, -0.008484f, -0.001107f, +0.003654f, -0.011460f, - -0.000527f, -0.004662f, -0.000575f, -0.002474f, +0.001738f, +0.000711f, -0.002687f, -0.001426f, -0.002663f, +0.001950f, - -0.002605f, -0.003618f, +0.002808f, -0.003445f, +0.004061f, +0.000085f, -0.000708f, -0.002247f, -0.003317f, -0.001414f, - -0.001803f, +0.002368f, +0.003641f, -0.004524f, -0.000509f, -0.002846f, +0.000210f, -0.002284f, +0.000187f, -0.001426f, - -0.000983f, -0.000493f, -0.000908f, +0.000892f, -0.000676f, +0.000502f - }, - { - -0.004033f, -0.042596f, -0.005694f, +0.008063f, +0.005948f, +0.005432f, -0.000155f, +0.004573f, +0.014653f, +0.003541f, - +0.001223f, -0.009782f, +0.006197f, +0.035298f, +0.051110f, -0.014540f, +0.030617f, +0.001436f, -0.000438f, -0.019881f, - +0.019387f, -0.030330f, -0.001912f, -0.017187f, -0.002631f, +0.010121f, -0.004267f, -0.003137f, -0.018883f, -0.001382f, - +0.002048f, +0.006403f, +0.014332f, +0.000429f, +0.016878f, -0.001494f, -0.011769f, +0.001637f, -0.003971f, -0.002425f, - -0.006637f, +0.009059f, +0.002444f, +0.004620f, +0.002407f, +0.012470f, -0.004914f, -0.002762f, +0.009202f, -0.001525f, - +0.005691f, -0.003117f, -0.006800f, +0.016359f, -0.000435f, -0.008580f, -0.002316f, +0.004827f, +0.000399f, -0.000561f, - +0.010733f, +0.001117f, -0.001630f, +0.003334f, -0.004475f, +0.007383f, +0.007013f, -0.001124f, +0.004612f, -0.003173f, - -0.001875f, -0.004002f, +0.003015f, +0.002515f, -0.000718f, -0.001567f, -0.001971f, -0.000981f, -0.002229f, -0.001712f, - +0.004590f, +0.000154f, +0.002878f, -0.001622f, +0.004143f, +0.003339f, +0.001869f, -0.002963f, -0.001099f, +0.000489f, - -0.000266f, +0.000381f, +0.000172f, +0.004064f, +0.000135f, -0.000292f - } - }, - { - { - +0.035627f, +0.021743f, -0.057503f, +0.063878f, -0.000470f, -0.011304f, +0.000578f, +0.010713f, -0.012698f, +0.008712f, - -0.002364f, +0.012777f, -0.004770f, -0.002839f, -0.005940f, +0.000913f, +0.009290f, -0.014944f, +0.002643f, +0.016258f, - +0.013870f, +0.010998f, -0.006636f, +0.009533f, -0.009228f, -0.010645f, -0.001339f, +0.006728f, -0.016926f, -0.008348f, - +0.006218f, -0.001313f, -0.001741f, +0.005780f, +0.002803f, +0.006911f, -0.005680f, +0.016182f, +0.000226f, +0.001555f, - +0.002349f, -0.003205f, +0.001965f, -0.003081f, +0.007217f, -0.005426f, +0.000030f, -0.007613f, +0.006725f, -0.002577f, - +0.001100f, +0.004742f, +0.000547f, -0.005720f, +0.003179f, -0.006785f, -0.001622f, -0.002969f, -0.002543f, -0.006865f, - +0.002730f, -0.000353f, -0.006742f, -0.001734f, -0.001896f, +0.001917f, -0.002944f, -0.005518f, -0.004953f, +0.002183f, - -0.003621f, +0.001952f, -0.000743f, -0.003592f, -0.001374f, -0.003517f, -0.003063f, -0.001404f, -0.000711f, -0.001550f, - -0.002213f, +0.000350f, -0.001991f, +0.001089f, +0.001842f, -0.002101f, -0.000032f, -0.001995f, +0.000905f, +0.002217f, - +0.000615f, -0.000634f, +0.000079f, +0.000510f, +0.003911f, +0.001606f - }, - { - +0.001084f, -0.065150f, -0.004528f, +0.059389f, +0.013398f, -0.004236f, +0.006625f, +0.011157f, +0.003558f, +0.012268f, - -0.027537f, -0.018114f, +0.006241f, -0.014299f, -0.012084f, +0.012202f, -0.024446f, -0.012268f, +0.019218f, -0.029043f, - -0.000679f, +0.009024f, -0.025699f, -0.010519f, +0.009855f, -0.008044f, +0.013048f, -0.010637f, +0.005490f, +0.004362f, - -0.000005f, +0.001154f, -0.002006f, +0.013096f, -0.003430f, -0.011650f, +0.005552f, -0.005331f, -0.003911f, +0.008029f, - +0.000414f, +0.006176f, +0.007665f, -0.004849f, -0.003499f, +0.014446f, +0.003257f, -0.000676f, -0.005467f, -0.000339f, - +0.003254f, -0.000963f, -0.011645f, +0.005497f, +0.003001f, -0.004148f, -0.003199f, -0.006848f, -0.002749f, -0.003831f, - +0.002511f, -0.000649f, +0.000067f, +0.002507f, +0.002373f, -0.000414f, +0.000511f, +0.002354f, +0.004771f, -0.004237f, - -0.003030f, +0.002534f, +0.002113f, -0.004688f, +0.000213f, -0.000723f, -0.005646f, +0.000665f, +0.002084f, +0.000119f, - +0.002657f, +0.002220f, +0.003689f, -0.001431f, +0.001369f, -0.002130f, +0.002426f, -0.000388f, -0.003805f, +0.004136f, - -0.000626f, +0.000817f, +0.000317f, -0.001073f, +0.000105f, -0.002505f - }, - { - -0.006460f, +0.117666f, +0.019048f, -0.101531f, +0.006772f, +0.005211f, -0.007228f, -0.007400f, +0.007386f, -0.004909f, - +0.014141f, +0.000117f, -0.046484f, +0.028207f, -0.011268f, +0.012091f, -0.000930f, -0.008020f, -0.033178f, -0.024641f, - -0.008079f, +0.002849f, +0.006477f, +0.003834f, +0.025433f, +0.008803f, +0.012950f, +0.002266f, -0.003938f, -0.009992f, - -0.001664f, -0.005263f, -0.004103f, -0.030306f, +0.017809f, -0.013018f, +0.000020f, -0.012335f, -0.006712f, +0.001690f, - +0.004042f, -0.002410f, +0.006612f, +0.006584f, -0.000594f, +0.005843f, -0.012849f, +0.004425f, -0.001595f, +0.004607f, - -0.006444f, +0.009319f, -0.008025f, -0.000238f, +0.001356f, +0.007099f, +0.003572f, +0.001623f, -0.004345f, +0.002013f, - -0.000202f, -0.008872f, -0.002352f, +0.004115f, -0.008714f, -0.003840f, +0.003840f, -0.001575f, -0.001811f, +0.003172f, - -0.004191f, -0.000876f, -0.000064f, +0.000752f, -0.001638f, +0.001093f, -0.002528f, -0.001277f, -0.001420f, +0.003256f, - +0.000956f, +0.004452f, +0.004056f, -0.002234f, -0.000335f, +0.000369f, +0.000527f, +0.000364f, -0.000431f, -0.000267f, - -0.000955f, -0.001645f, -0.001350f, -0.000241f, -0.000067f, +0.001901f - }, - { - +0.012138f, +0.041205f, +0.017162f, +0.053880f, -0.009240f, +0.004817f, +0.001200f, -0.011796f, +0.008912f, -0.024276f, - -0.017892f, +0.020567f, -0.010395f, +0.002654f, -0.003121f, +0.011619f, -0.010826f, +0.026363f, -0.001753f, -0.019469f, - +0.007870f, +0.001925f, -0.004387f, +0.016956f, -0.005694f, -0.026529f, +0.008438f, +0.023475f, +0.016637f, +0.001305f, - +0.013755f, +0.005799f, -0.002516f, +0.014257f, +0.014907f, -0.004568f, -0.003873f, +0.003930f, -0.005959f, -0.003041f, - +0.001946f, +0.009858f, -0.000535f, +0.005379f, -0.004202f, -0.002764f, -0.011294f, +0.003505f, +0.006149f, +0.003761f, - -0.003302f, +0.006338f, -0.004573f, +0.001976f, -0.011709f, +0.002647f, +0.005087f, -0.003149f, -0.000770f, -0.001507f, - +0.005090f, -0.006467f, +0.003416f, -0.001106f, +0.003398f, +0.002530f, -0.001852f, +0.007380f, -0.005112f, -0.000859f, - -0.002417f, +0.002934f, +0.000018f, +0.002805f, +0.002297f, -0.004689f, +0.001378f, +0.001939f, -0.001357f, -0.000828f, - -0.003461f, +0.002609f, -0.005677f, -0.004784f, -0.002659f, -0.001735f, -0.002085f, +0.001212f, -0.000357f, +0.000101f, - +0.000369f, +0.001353f, +0.001191f, -0.000076f, +0.001403f, -0.001020f - }, - { - -0.000072f, +0.065969f, -0.005826f, +0.001688f, +0.010309f, +0.000823f, -0.001337f, +0.004140f, +0.008504f, +0.004106f, - +0.003419f, -0.007697f, -0.004082f, +0.013565f, +0.070497f, -0.006490f, +0.023018f, -0.005885f, +0.015200f, +0.001296f, - +0.003775f, +0.006821f, -0.014247f, +0.007368f, -0.004947f, +0.026761f, +0.016408f, +0.003692f, +0.008307f, -0.009832f, - -0.011521f, -0.008632f, -0.002472f, -0.001753f, -0.028831f, +0.002536f, +0.000728f, -0.000312f, -0.005459f, -0.016419f, - +0.000383f, -0.000607f, +0.004194f, +0.008120f, -0.005047f, -0.003283f, +0.008587f, -0.009235f, +0.002837f, +0.001189f, - +0.007266f, -0.004271f, -0.003968f, -0.008782f, -0.002782f, -0.004456f, +0.006786f, +0.005560f, -0.000895f, -0.003823f, - -0.002894f, +0.005331f, -0.008074f, -0.003500f, +0.003240f, +0.003604f, -0.005138f, +0.000170f, +0.001497f, +0.002099f, - +0.000484f, +0.000946f, -0.005419f, -0.001273f, -0.005328f, +0.000373f, -0.000927f, -0.004137f, +0.000519f, +0.001193f, - +0.003667f, +0.000682f, +0.001536f, -0.000515f, -0.001859f, -0.004426f, +0.001180f, +0.002015f, -0.001507f, +0.000607f, - +0.001189f, -0.000103f, +0.001132f, +0.000748f, -0.002508f, -0.000546f - }, - { - +0.008160f, +0.137007f, -0.012250f, -0.044187f, -0.022356f, +0.001619f, +0.005927f, -0.015614f, +0.007385f, -0.001668f, - +0.043021f, +0.000105f, +0.008550f, +0.028832f, +0.014407f, +0.005161f, -0.020462f, -0.013055f, -0.009159f, +0.000858f, - +0.014991f, +0.004549f, +0.003767f, -0.000911f, +0.002056f, -0.004866f, -0.014643f, +0.012359f, +0.010831f, +0.005501f, - -0.006176f, -0.007143f, -0.004813f, -0.005766f, +0.001650f, +0.007948f, +0.002321f, -0.012199f, -0.014137f, -0.002501f, - -0.000518f, +0.007733f, -0.004478f, -0.011913f, +0.003337f, -0.008622f, -0.004109f, +0.004545f, +0.000906f, -0.007856f, - +0.006133f, +0.001110f, -0.000865f, -0.000469f, +0.007648f, -0.001233f, +0.002310f, -0.002408f, +0.003027f, -0.000574f, - -0.003627f, +0.006340f, -0.006595f, -0.000713f, +0.002906f, -0.001564f, -0.000362f, -0.002536f, -0.002991f, +0.001822f, - -0.000825f, -0.000504f, +0.006804f, +0.001631f, +0.002278f, -0.002368f, +0.000884f, +0.002075f, +0.001205f, -0.003353f, - -0.001300f, -0.001014f, +0.000481f, +0.000793f, -0.001576f, -0.000004f, -0.001295f, +0.000117f, -0.000336f, -0.001610f, - +0.000218f, +0.001071f, +0.000786f, -0.000469f, +0.001522f, +0.001565f - }, - { - +0.000379f, -0.019133f, +0.019563f, +0.003115f, -0.003087f, +0.001710f, +0.003417f, -0.001238f, -0.005409f, -0.001743f, - +0.009785f, -0.008282f, -0.002622f, -0.007961f, -0.028312f, -0.019302f, +0.014212f, +0.031372f, -0.010867f, +0.007242f, - -0.013889f, -0.018726f, +0.010889f, +0.049056f, +0.013724f, -0.010920f, -0.017435f, +0.005112f, +0.005673f, -0.011144f, - -0.000237f, -0.008488f, +0.005985f, -0.000593f, +0.006801f, -0.006141f, -0.003153f, +0.010485f, +0.002363f, -0.019312f, - -0.001349f, -0.012960f, -0.013766f, +0.003473f, +0.003574f, -0.012136f, -0.004534f, -0.000712f, -0.007583f, +0.007815f, - -0.003277f, -0.004980f, +0.010099f, -0.000518f, -0.003968f, -0.004207f, +0.002279f, +0.004972f, -0.007151f, +0.009151f, - +0.004567f, +0.002973f, +0.006386f, +0.007291f, -0.002601f, -0.001119f, +0.001074f, +0.004031f, -0.001039f, -0.004087f, - -0.000906f, -0.003122f, -0.000182f, +0.000812f, +0.002236f, -0.004683f, +0.002866f, +0.000406f, +0.002329f, +0.001022f, - +0.002908f, +0.000815f, -0.000346f, -0.000735f, -0.000193f, +0.003263f, +0.000294f, +0.003661f, -0.001030f, -0.002798f, - +0.003344f, +0.001748f, -0.001174f, +0.004531f, -0.001814f, -0.000649f - }, - { - +0.059943f, +0.118450f, -0.007210f, -0.134809f, +0.010731f, -0.014956f, +0.002794f, +0.006619f, -0.010073f, +0.004193f, - +0.007543f, -0.020996f, +0.031158f, +0.013216f, +0.015099f, +0.004390f, -0.008793f, +0.017922f, +0.026176f, +0.015178f, - +0.009648f, +0.001257f, +0.024393f, -0.000902f, -0.010373f, +0.007946f, +0.003735f, -0.002452f, -0.003885f, -0.012821f, - -0.001971f, +0.006376f, +0.001461f, +0.021567f, -0.004126f, -0.002990f, -0.003257f, -0.001948f, +0.003934f, -0.005303f, - +0.006791f, -0.003524f, +0.000636f, -0.003024f, +0.009784f, +0.008287f, +0.011191f, -0.000789f, +0.008570f, +0.002402f, - +0.000996f, -0.002525f, -0.011062f, -0.000070f, +0.004834f, -0.002461f, -0.000171f, -0.002639f, +0.007575f, +0.007267f, - +0.007547f, -0.004310f, +0.003791f, +0.000977f, +0.001675f, -0.004689f, +0.004791f, +0.002906f, +0.000828f, -0.001732f, - -0.002295f, +0.003365f, -0.000290f, +0.001122f, +0.003411f, -0.002049f, -0.008182f, -0.000379f, +0.000705f, +0.003289f, - -0.003642f, +0.001261f, +0.001785f, -0.001149f, -0.004478f, +0.002755f, -0.001343f, +0.001961f, +0.000620f, -0.001488f, - -0.000825f, +0.000902f, +0.000329f, +0.001035f, -0.002529f, -0.000725f - }, - { - -0.000444f, -0.028747f, +0.005351f, -0.007735f, -0.008795f, -0.002489f, +0.001477f, +0.002185f, -0.012162f, +0.000120f, - +0.024032f, -0.011224f, -0.000478f, -0.001434f, +0.038199f, -0.010563f, -0.013573f, +0.000960f, +0.011037f, -0.006684f, - +0.009869f, -0.023114f, -0.002065f, +0.016201f, +0.002470f, -0.009813f, +0.024844f, +0.008963f, +0.005088f, +0.011645f, - +0.004915f, -0.044968f, +0.007646f, +0.010785f, -0.004263f, -0.011263f, +0.009875f, -0.008884f, -0.007533f, -0.013450f, - -0.006071f, +0.006553f, -0.009530f, +0.010603f, -0.001732f, +0.008835f, +0.007032f, -0.003715f, +0.002151f, +0.003850f, - +0.002372f, +0.000327f, -0.002155f, -0.001286f, -0.000137f, +0.008126f, -0.001361f, -0.001845f, -0.000148f, +0.005014f, - -0.001636f, -0.004584f, +0.002203f, +0.003759f, -0.000451f, -0.003776f, +0.003867f, +0.000681f, -0.001708f, +0.006114f, - +0.002718f, +0.001344f, -0.002985f, +0.002070f, +0.003663f, -0.005473f, -0.000087f, -0.004066f, +0.000342f, -0.001756f, - -0.001930f, +0.001399f, -0.001214f, +0.000193f, +0.003190f, -0.002201f, -0.001322f, +0.002757f, -0.000905f, +0.000352f, - -0.001031f, -0.001485f, -0.000967f, +0.000862f, -0.004241f, -0.002370f - }, - { - -0.028101f, +0.135716f, +0.081754f, -0.006248f, -0.036348f, +0.095430f, +0.026563f, +0.025470f, -0.052790f, -0.018392f, - +0.040752f, -0.016205f, +0.043892f, -0.021306f, -0.032697f, +0.012581f, +0.003219f, +0.017471f, -0.005370f, +0.004735f, - -0.015563f, +0.004056f, -0.021578f, +0.000843f, -0.021998f, +0.006499f, -0.004268f, +0.013498f, +0.010944f, +0.006646f, - +0.012944f, +0.019434f, -0.009323f, -0.009221f, +0.006360f, -0.004686f, +0.015153f, +0.003347f, +0.011596f, -0.002125f, - -0.011474f, -0.009195f, +0.000944f, +0.009177f, +0.004608f, +0.000435f, +0.002773f, -0.001639f, -0.012633f, -0.001877f, - +0.013804f, +0.003442f, -0.005611f, -0.005412f, +0.001763f, +0.005250f, -0.001596f, -0.004337f, +0.007514f, -0.002137f, - -0.006085f, +0.002076f, +0.007111f, -0.003154f, +0.008924f, +0.004018f, -0.001990f, -0.003655f, +0.001020f, +0.003215f, - +0.003980f, +0.000022f, -0.003767f, -0.002606f, -0.000256f, +0.001146f, -0.005026f, -0.002185f, +0.000608f, -0.000248f, - +0.003521f, +0.003215f, -0.000888f, +0.003233f, +0.001420f, -0.001274f, +0.004048f, -0.002511f, -0.002307f, +0.003267f, - -0.000131f, +0.002169f, +0.000546f, -0.002051f, +0.001520f, -0.003074f - }, - { - -0.006195f, -0.010684f, +0.024593f, -0.015765f, -0.008825f, -0.021902f, -0.003906f, -0.004407f, -0.014068f, +0.012638f, - +0.003517f, -0.016418f, -0.025683f, +0.010327f, +0.017043f, +0.003897f, -0.006186f, -0.014685f, -0.011371f, +0.022395f, - -0.015591f, -0.019065f, -0.023817f, -0.013409f, +0.010387f, +0.020142f, +0.024266f, +0.020436f, -0.016139f, +0.026755f, - +0.004513f, -0.003583f, +0.011623f, -0.013453f, +0.009455f, -0.013671f, -0.000916f, +0.005490f, -0.002118f, -0.001068f, - -0.004824f, +0.004366f, -0.004672f, -0.004133f, -0.001353f, +0.001747f, -0.001252f, +0.011903f, -0.004534f, -0.016299f, - +0.003909f, +0.005907f, -0.002100f, -0.001742f, -0.001668f, +0.005998f, -0.007661f, +0.003548f, -0.001143f, -0.001992f, - -0.002802f, -0.003872f, -0.000682f, -0.003060f, -0.002707f, +0.006395f, +0.000759f, +0.003367f, -0.000728f, +0.005302f, - +0.004284f, -0.005143f, -0.001713f, -0.004957f, +0.002378f, +0.001287f, +0.002928f, -0.006515f, +0.001711f, -0.002370f, - -0.000504f, -0.000288f, +0.003835f, +0.000228f, +0.000127f, -0.000268f, +0.001805f, +0.001372f, +0.003776f, -0.000948f, - -0.001984f, -0.003794f, -0.000870f, +0.000901f, -0.002037f, +0.000513f - }, - { - -0.035156f, +0.082381f, -0.007192f, +0.023758f, +0.028769f, +0.070458f, -0.018135f, -0.007625f, +0.000740f, -0.016695f, - +0.007518f, -0.009644f, +0.006163f, -0.014044f, +0.032828f, +0.027967f, -0.041132f, -0.006465f, +0.011398f, -0.025819f, - +0.027894f, +0.016077f, +0.008547f, -0.015558f, +0.004245f, +0.020334f, -0.005699f, +0.000631f, -0.013165f, -0.008657f, - -0.001430f, -0.002925f, +0.011088f, +0.005166f, -0.001221f, -0.000411f, +0.002869f, -0.015287f, +0.002958f, +0.014648f, - -0.002605f, -0.000644f, +0.010302f, -0.000632f, -0.014130f, -0.009542f, -0.013371f, +0.002052f, +0.004135f, +0.001397f, - -0.005552f, -0.002474f, +0.000068f, +0.002865f, +0.003043f, +0.005342f, -0.010353f, +0.001413f, -0.001636f, +0.001748f, - +0.002948f, -0.001520f, -0.002029f, -0.006920f, -0.001663f, -0.002190f, +0.001351f, +0.002852f, -0.002733f, +0.001291f, - +0.000120f, -0.002472f, +0.003381f, -0.001553f, -0.003204f, +0.001001f, +0.004116f, -0.001374f, +0.004965f, +0.005774f, - +0.004429f, +0.002397f, -0.002287f, -0.000841f, +0.000337f, +0.000714f, +0.000853f, +0.001075f, +0.000308f, +0.003230f, - -0.000536f, -0.001749f, +0.002358f, -0.002804f, -0.002143f, -0.002659f - }, - { - -0.001102f, +0.052149f, +0.013830f, -0.009791f, +0.002650f, -0.005788f, -0.010909f, -0.010501f, +0.010921f, +0.000316f, - -0.007347f, -0.012192f, +0.014784f, +0.041891f, -0.009557f, +0.001676f, +0.001036f, -0.017636f, -0.005825f, +0.011814f, - -0.010077f, +0.006636f, +0.007560f, +0.018880f, +0.015673f, +0.000076f, -0.015025f, -0.006017f, +0.043834f, -0.016800f, - +0.018092f, -0.028636f, -0.007807f, +0.003917f, -0.001387f, +0.024199f, -0.013745f, +0.001989f, +0.006130f, -0.000043f, - -0.006087f, -0.012441f, -0.003678f, +0.010491f, -0.008095f, -0.006335f, -0.011917f, +0.000524f, -0.002364f, +0.008216f, - -0.000281f, +0.007511f, -0.004025f, +0.007263f, +0.001106f, +0.000667f, +0.010133f, +0.000875f, -0.010775f, -0.001158f, - +0.002919f, +0.004408f, -0.000223f, -0.000210f, +0.002808f, -0.000671f, +0.005682f, +0.000047f, -0.005679f, +0.001836f, - -0.007640f, +0.001936f, +0.002934f, +0.002454f, +0.000936f, +0.000354f, -0.003470f, +0.001869f, -0.007628f, -0.002141f, - +0.001198f, -0.004855f, -0.001947f, -0.001119f, +0.004769f, +0.000304f, +0.004004f, +0.005092f, +0.001930f, -0.001381f, - -0.000330f, -0.001477f, +0.004492f, -0.002756f, -0.000043f, +0.001780f - }, - { - -0.007286f, +0.138256f, +0.001569f, +0.022052f, +0.007395f, -0.019211f, -0.029794f, +0.027372f, -0.021379f, +0.021731f, - +0.032455f, -0.003771f, +0.011393f, +0.005595f, -0.023936f, -0.010452f, +0.019986f, +0.042135f, +0.011493f, +0.000199f, - -0.001079f, -0.036995f, +0.004050f, +0.006428f, +0.006406f, -0.026376f, +0.005133f, -0.016725f, -0.002105f, -0.010297f, - -0.035694f, +0.014149f, +0.006867f, +0.000724f, -0.011836f, -0.014651f, -0.005579f, +0.005432f, +0.019092f, -0.004424f, - +0.011182f, -0.002291f, +0.001656f, -0.004534f, -0.007170f, -0.016375f, -0.008548f, -0.002134f, +0.004954f, -0.007495f, - +0.006130f, -0.008485f, +0.005251f, +0.000818f, -0.006871f, -0.002835f, -0.007927f, +0.003806f, +0.005494f, -0.009266f, - +0.002010f, +0.002182f, +0.005652f, +0.002900f, +0.005517f, +0.005092f, +0.003164f, +0.000699f, -0.000936f, +0.002769f, - -0.001564f, +0.001562f, +0.010379f, -0.002196f, +0.002611f, +0.000932f, +0.003128f, +0.000610f, -0.001313f, -0.000744f, - -0.004606f, -0.000844f, +0.001575f, -0.003611f, +0.002268f, -0.003474f, +0.000138f, -0.001967f, +0.003292f, -0.000134f, - +0.000105f, +0.003025f, +0.000920f, +0.003842f, +0.000669f, +0.000904f - }, - { - +0.003085f, -0.047474f, -0.018505f, +0.027460f, +0.011030f, -0.002077f, -0.005108f, -0.002905f, +0.013924f, -0.006249f, - +0.004895f, -0.002049f, -0.002519f, -0.060940f, -0.069184f, -0.027258f, +0.024663f, +0.004364f, +0.005436f, -0.006354f, - +0.012780f, -0.036421f, +0.001264f, -0.022856f, +0.002249f, +0.017474f, +0.007471f, +0.001937f, -0.021662f, -0.007709f, - -0.011250f, -0.006649f, -0.005449f, -0.017786f, +0.013088f, +0.014624f, +0.011969f, +0.010169f, +0.000333f, +0.002884f, - +0.001169f, +0.011842f, +0.002448f, +0.007828f, +0.001838f, +0.005059f, -0.004362f, -0.002764f, +0.007143f, -0.002784f, - +0.008748f, +0.010633f, -0.002623f, +0.008499f, -0.003901f, -0.001676f, +0.003527f, +0.004443f, +0.001655f, +0.001309f, - +0.006870f, +0.004320f, +0.002250f, +0.002095f, -0.012357f, -0.004355f, +0.004136f, -0.007626f, +0.004255f, +0.001673f, - -0.000006f, -0.003313f, +0.002068f, +0.000736f, -0.003818f, -0.002125f, -0.000816f, -0.001310f, -0.004738f, -0.002395f, - +0.007270f, +0.002349f, +0.001767f, -0.004051f, +0.004626f, +0.002922f, +0.003021f, -0.002618f, -0.001119f, +0.003132f, - -0.000240f, -0.002281f, +0.001324f, +0.003439f, -0.001870f, -0.000269f - } - }, - { - { - -0.033384f, -0.090919f, +0.076209f, +0.014265f, +0.037782f, -0.006125f, +0.014221f, +0.012653f, -0.012667f, +0.007782f, - -0.022731f, +0.014800f, -0.001583f, +0.001665f, +0.001585f, -0.011695f, -0.000916f, -0.018865f, +0.017902f, +0.012907f, - +0.018249f, -0.007170f, +0.004079f, +0.006243f, -0.002570f, -0.003843f, -0.015944f, +0.001192f, +0.003602f, -0.007585f, - +0.003982f, +0.006289f, -0.015347f, +0.006153f, +0.012275f, -0.000278f, +0.011638f, -0.005116f, +0.010031f, -0.000902f, - -0.014082f, +0.005345f, +0.012780f, -0.002354f, -0.000847f, -0.000504f, -0.006290f, -0.003430f, +0.004775f, +0.010561f, - -0.007131f, +0.006382f, +0.004231f, -0.001222f, -0.004904f, -0.001768f, +0.001185f, -0.005644f, -0.001607f, +0.001423f, - -0.001653f, -0.008994f, +0.002236f, -0.004637f, +0.003200f, -0.001089f, -0.002740f, -0.004852f, -0.002458f, +0.000667f, - +0.000315f, -0.002280f, +0.000116f, -0.006984f, -0.002660f, -0.000494f, -0.002950f, -0.003222f, +0.000341f, +0.000059f, - -0.004176f, +0.000529f, -0.002962f, +0.003464f, -0.000330f, +0.000063f, +0.000905f, -0.004596f, +0.003403f, +0.001404f, - +0.000656f, -0.002191f, -0.000712f, +0.002922f, +0.001490f, +0.002631f - }, - { - +0.000743f, -0.093825f, +0.008105f, +0.066181f, +0.016102f, -0.004066f, +0.005057f, +0.006357f, +0.007547f, +0.017208f, - -0.042104f, -0.009682f, -0.009616f, +0.009367f, -0.007044f, -0.010676f, -0.000409f, -0.006835f, +0.008297f, -0.022817f, - +0.006892f, +0.004818f, -0.047828f, -0.016447f, +0.030002f, +0.002941f, -0.002377f, +0.003555f, -0.020401f, +0.005751f, - +0.002704f, +0.003077f, +0.013027f, -0.009249f, +0.000570f, +0.004671f, -0.008061f, +0.001567f, -0.009416f, +0.002484f, - +0.012838f, -0.000237f, +0.006288f, -0.003439f, +0.004469f, -0.004277f, +0.007186f, -0.000592f, -0.003471f, +0.001473f, - +0.001283f, +0.000254f, -0.008863f, +0.002641f, -0.003012f, +0.000699f, +0.001104f, -0.013242f, +0.000135f, -0.001465f, - -0.002090f, +0.000443f, +0.000320f, -0.000174f, -0.001753f, +0.003665f, +0.002494f, -0.000623f, +0.002761f, +0.003052f, - -0.003403f, -0.001553f, +0.003298f, -0.001375f, +0.000087f, -0.005808f, -0.003103f, -0.001646f, +0.001535f, +0.002601f, - -0.000502f, +0.004884f, +0.000219f, +0.001472f, +0.000827f, -0.000386f, -0.002437f, -0.000357f, +0.001597f, +0.001282f, - -0.002647f, +0.001826f, -0.000203f, +0.000667f, -0.001181f, -0.002687f - }, - { - +0.002922f, +0.181320f, -0.025801f, -0.070873f, -0.021801f, -0.000029f, +0.003313f, -0.020183f, +0.009913f, -0.005646f, - -0.004386f, +0.019833f, -0.024647f, +0.018078f, -0.001673f, +0.005539f, -0.011743f, -0.002091f, -0.040346f, -0.014051f, - -0.028673f, +0.019773f, +0.000637f, +0.017396f, +0.016778f, +0.003656f, +0.017330f, -0.005021f, +0.001191f, -0.006942f, - +0.004691f, -0.004600f, -0.013148f, -0.021962f, -0.004876f, +0.009498f, -0.016489f, +0.000760f, -0.008093f, -0.001811f, - -0.000324f, -0.000197f, +0.010907f, -0.001519f, +0.007372f, -0.001075f, -0.009576f, -0.000971f, +0.005473f, -0.003936f, - +0.005425f, +0.004939f, -0.006322f, -0.001251f, +0.001492f, +0.003121f, +0.010324f, -0.002746f, -0.004122f, -0.000455f, - +0.003321f, -0.008147f, -0.003189f, -0.006314f, -0.000775f, -0.000358f, +0.002181f, -0.002648f, -0.002126f, +0.003821f, - -0.001439f, -0.002216f, -0.002548f, -0.003320f, +0.003456f, +0.001970f, -0.001370f, -0.005198f, +0.002269f, +0.000685f, - +0.002932f, +0.002121f, +0.004861f, -0.000000f, -0.001649f, -0.000347f, +0.004001f, -0.000723f, +0.000917f, -0.003242f, - -0.000635f, -0.001693f, +0.000021f, -0.002498f, -0.000090f, +0.003002f - }, - { - +0.009907f, +0.039665f, -0.005417f, +0.046443f, +0.030165f, -0.000266f, -0.002086f, -0.010348f, +0.009983f, -0.019788f, - -0.000813f, -0.006663f, -0.000671f, -0.007462f, -0.012213f, -0.000442f, +0.018752f, -0.003648f, +0.012138f, -0.001729f, - -0.008227f, +0.003118f, +0.031107f, -0.007017f, +0.001284f, -0.018558f, +0.020093f, +0.009103f, +0.027433f, -0.012597f, - +0.004487f, +0.016262f, -0.006158f, +0.012664f, +0.005746f, +0.010495f, -0.013271f, +0.002833f, -0.012060f, +0.002417f, - -0.003508f, +0.013540f, +0.008664f, -0.000247f, -0.008929f, +0.003754f, -0.014545f, +0.005897f, +0.003134f, -0.001329f, - +0.006686f, -0.002399f, +0.000413f, -0.003408f, -0.009597f, -0.000166f, +0.007559f, -0.000891f, -0.007031f, +0.008006f, - -0.001195f, -0.005710f, +0.005656f, +0.005255f, -0.004411f, -0.000236f, +0.007200f, -0.000660f, -0.005209f, +0.002669f, - -0.001875f, -0.005077f, +0.007556f, -0.000320f, +0.001484f, -0.002269f, +0.001051f, +0.002355f, -0.003258f, -0.000138f, - +0.001277f, -0.000059f, -0.004572f, -0.005612f, -0.002019f, -0.002677f, +0.001041f, -0.001556f, +0.002293f, -0.001531f, - -0.001350f, +0.000696f, +0.003581f, +0.002252f, -0.000986f, -0.001924f - }, - { - -0.000785f, +0.058943f, +0.003867f, +0.013770f, +0.001064f, +0.002213f, -0.000454f, +0.001633f, +0.012213f, -0.000812f, - +0.003472f, -0.010267f, +0.008939f, -0.019387f, +0.061263f, +0.051244f, +0.012945f, +0.010989f, -0.020093f, +0.003372f, - +0.006151f, +0.005013f, -0.007533f, -0.001464f, +0.011470f, +0.028338f, -0.001849f, +0.000204f, +0.008343f, -0.022312f, - +0.009034f, +0.000066f, +0.000755f, -0.007352f, -0.026163f, -0.000219f, +0.000331f, -0.003273f, +0.002311f, -0.010111f, - -0.003762f, +0.004954f, -0.006129f, +0.014016f, +0.000963f, -0.012736f, +0.004611f, +0.002340f, -0.005118f, +0.004882f, - +0.001915f, -0.006472f, -0.003726f, -0.008154f, -0.000301f, -0.005819f, +0.011052f, -0.002470f, -0.000797f, -0.002647f, - +0.000208f, +0.001803f, -0.004480f, -0.002211f, +0.001581f, +0.006338f, +0.000820f, -0.009383f, +0.004841f, -0.002025f, - -0.001815f, +0.002705f, -0.004122f, -0.003346f, -0.002256f, -0.004280f, +0.000630f, -0.001815f, +0.000149f, +0.002474f, - +0.003666f, -0.002775f, -0.000244f, +0.000708f, -0.002387f, -0.002961f, +0.000808f, +0.001511f, -0.002023f, +0.000240f, - +0.001502f, +0.000034f, +0.001912f, -0.001277f, -0.001432f, -0.000721f - }, - { - +0.029665f, +0.096117f, -0.006150f, -0.076763f, +0.016247f, -0.008852f, -0.000701f, -0.018044f, +0.032019f, +0.004577f, - +0.025381f, -0.010916f, +0.022943f, +0.024800f, +0.005975f, +0.002064f, -0.007182f, -0.014421f, -0.011523f, -0.007821f, - +0.024824f, +0.010256f, -0.009417f, +0.015161f, -0.013384f, -0.009441f, -0.009827f, +0.012980f, +0.006193f, +0.014430f, - -0.009609f, -0.012480f, +0.001595f, -0.001600f, -0.003546f, +0.010076f, -0.001215f, -0.011366f, -0.005606f, -0.004076f, - +0.003076f, -0.000959f, -0.001520f, -0.022052f, +0.008680f, -0.009407f, +0.002819f, -0.001992f, +0.002076f, +0.002267f, - -0.002568f, +0.006523f, -0.001530f, +0.004121f, -0.000881f, +0.000722f, +0.000590f, +0.002153f, +0.005602f, -0.003352f, - -0.003015f, +0.007669f, -0.005485f, -0.002756f, +0.000992f, +0.003985f, -0.003780f, -0.004425f, -0.002687f, -0.000465f, - -0.000666f, +0.002685f, +0.002297f, +0.005255f, -0.002210f, +0.002038f, -0.000339f, +0.002190f, -0.001664f, -0.002615f, - -0.003160f, -0.000321f, -0.000473f, +0.003393f, -0.001557f, -0.002589f, -0.000979f, +0.000059f, -0.002469f, -0.001605f, - +0.001899f, +0.000874f, -0.000517f, -0.000304f, +0.002147f, +0.001306f - }, - { - -0.000704f, +0.012398f, -0.001063f, +0.000171f, -0.000996f, +0.002364f, -0.000769f, -0.003539f, -0.004620f, +0.009647f, - +0.000218f, -0.010955f, +0.000239f, -0.010258f, -0.041146f, -0.008470f, +0.024625f, +0.026816f, -0.004311f, -0.016187f, - -0.020071f, -0.004111f, +0.018284f, +0.011707f, +0.040379f, -0.018562f, -0.022550f, +0.011764f, -0.004110f, +0.002780f, - +0.008957f, -0.016405f, -0.000859f, +0.008924f, -0.004116f, +0.002443f, -0.000795f, +0.012742f, -0.003284f, -0.005843f, - -0.000357f, -0.022608f, -0.010110f, +0.008095f, +0.000424f, -0.007244f, -0.007159f, -0.009003f, +0.007439f, -0.004240f, - +0.000560f, +0.002282f, -0.002558f, +0.004190f, -0.004050f, +0.002320f, -0.001203f, +0.000015f, -0.002597f, +0.008466f, - +0.005142f, +0.001857f, +0.004742f, +0.009350f, -0.003076f, -0.004371f, +0.006115f, +0.003500f, -0.004032f, -0.001567f, - -0.000406f, -0.001053f, -0.001253f, +0.002062f, +0.000407f, -0.003786f, +0.001782f, +0.001645f, -0.000613f, +0.001680f, - +0.005139f, +0.001700f, -0.002457f, +0.001929f, +0.000174f, -0.001344f, +0.003419f, +0.001899f, -0.000206f, -0.004214f, - +0.002957f, +0.001981f, +0.002079f, +0.001983f, +0.000363f, -0.003547f - }, - { - -0.054987f, +0.321355f, -0.031335f, -0.126368f, -0.001141f, -0.012879f, -0.006853f, +0.012993f, -0.023432f, +0.005051f, - -0.015702f, -0.015676f, +0.034761f, +0.019946f, +0.014643f, -0.021227f, +0.018751f, +0.005146f, +0.030702f, +0.036776f, - -0.001199f, +0.013092f, +0.008373f, +0.000745f, -0.014893f, +0.021952f, -0.020778f, +0.019502f, -0.011112f, -0.018314f, - +0.002324f, +0.001714f, +0.008090f, +0.016696f, -0.002618f, -0.004046f, -0.005549f, +0.003517f, -0.007903f, +0.000856f, - +0.000760f, +0.003142f, +0.006725f, -0.007161f, +0.009404f, +0.012951f, +0.002075f, +0.006740f, +0.012609f, -0.007987f, - -0.000797f, -0.000461f, -0.012949f, +0.001254f, +0.008028f, -0.002973f, -0.001195f, +0.004330f, -0.001879f, +0.005148f, - +0.007865f, +0.004423f, +0.000622f, +0.000552f, -0.004271f, +0.003501f, +0.001925f, +0.004233f, -0.000523f, -0.001377f, - -0.000049f, -0.000676f, +0.003763f, +0.001645f, -0.000511f, -0.004516f, +0.001728f, -0.004236f, -0.001247f, +0.005048f, - -0.003553f, -0.001311f, +0.002651f, -0.001880f, -0.001866f, +0.004828f, -0.003041f, -0.001769f, +0.003395f, -0.000764f, - -0.001892f, -0.001919f, +0.003245f, -0.000384f, +0.000590f, -0.001626f - }, - { - -0.003092f, -0.010313f, -0.005851f, -0.014159f, -0.002905f, -0.004600f, -0.002243f, +0.003637f, -0.010537f, +0.004148f, - +0.011570f, +0.003156f, -0.004020f, +0.016087f, +0.011072f, +0.018279f, -0.027856f, -0.011886f, +0.017450f, -0.001238f, - -0.010455f, -0.005158f, +0.013166f, +0.014823f, -0.005661f, -0.013121f, +0.035639f, -0.011731f, +0.030255f, +0.006093f, - -0.011126f, -0.009114f, -0.018837f, +0.001293f, +0.003933f, -0.019249f, +0.010818f, -0.003187f, -0.019695f, -0.007199f, - +0.004835f, -0.001819f, -0.000290f, -0.001680f, +0.007367f, +0.006066f, +0.008616f, -0.003606f, -0.004741f, +0.003540f, - +0.008391f, +0.001601f, +0.002808f, -0.005433f, -0.000170f, +0.003290f, +0.004219f, -0.001984f, -0.002808f, +0.007310f, - -0.005827f, +0.002359f, +0.000906f, +0.004472f, -0.001843f, -0.000216f, -0.000452f, +0.004671f, -0.000011f, +0.004835f, - +0.002400f, -0.001674f, -0.003859f, +0.004773f, -0.000740f, -0.005547f, -0.000340f, -0.001004f, -0.001697f, -0.001842f, - +0.001331f, +0.002182f, -0.003923f, +0.001228f, +0.004472f, -0.003264f, +0.000481f, -0.000293f, -0.001037f, -0.000229f, - +0.002452f, -0.003779f, -0.000811f, -0.000109f, -0.005324f, +0.001102f - }, - { - +0.036719f, +0.109878f, +0.060018f, -0.024343f, -0.010085f, +0.030190f, +0.055684f, +0.033154f, -0.032727f, -0.002585f, - -0.000071f, +0.016171f, +0.022334f, -0.015500f, -0.025462f, -0.008488f, +0.021256f, +0.003808f, +0.013803f, -0.011420f, - -0.014813f, -0.001145f, -0.007734f, -0.002658f, -0.002688f, +0.003612f, -0.005927f, +0.015490f, +0.005295f, +0.002233f, - +0.015369f, +0.023801f, -0.018332f, +0.004367f, -0.004307f, -0.000964f, +0.011350f, +0.006403f, +0.005861f, +0.005441f, - -0.013356f, -0.001761f, -0.007970f, +0.004141f, +0.010350f, +0.005660f, -0.005209f, -0.000967f, -0.006615f, -0.002283f, - +0.012828f, +0.005488f, -0.005024f, -0.006630f, -0.008025f, +0.002502f, +0.005525f, -0.001755f, +0.003333f, -0.000154f, - -0.002313f, +0.000745f, +0.005832f, -0.000373f, +0.000736f, +0.010659f, -0.004502f, -0.005809f, +0.007024f, -0.001022f, - +0.000430f, +0.002345f, -0.000168f, -0.000791f, -0.000779f, -0.000214f, -0.003029f, -0.004300f, -0.000098f, -0.001516f, - +0.003391f, +0.002652f, +0.005435f, +0.002314f, -0.001403f, -0.001577f, +0.005067f, -0.002733f, -0.000139f, +0.000999f, - +0.000147f, +0.001203f, -0.000840f, -0.001604f, +0.002598f, -0.003436f - }, - { - +0.007959f, +0.003403f, -0.001140f, -0.001980f, -0.007270f, -0.026457f, -0.005084f, -0.016930f, -0.010359f, +0.022924f, - -0.005343f, -0.036841f, +0.003276f, +0.002105f, +0.033529f, -0.005231f, -0.005630f, -0.024182f, -0.011787f, -0.002578f, - +0.019670f, -0.034131f, -0.009634f, -0.012149f, +0.000913f, +0.023068f, +0.023525f, +0.006872f, +0.003575f, +0.015690f, - +0.011301f, +0.001094f, -0.001888f, -0.004838f, +0.001217f, -0.008386f, -0.004654f, +0.000956f, -0.001818f, +0.003821f, - -0.006550f, +0.000894f, +0.003864f, -0.004960f, +0.007159f, -0.003757f, -0.003819f, +0.000870f, +0.004591f, -0.007197f, - +0.002639f, +0.002757f, -0.006122f, +0.000419f, -0.002383f, -0.002402f, +0.005020f, -0.001752f, -0.002431f, +0.000457f, - -0.003943f, -0.000708f, -0.003045f, -0.002237f, -0.001673f, +0.004108f, +0.001692f, +0.005771f, -0.001393f, +0.000607f, - +0.001774f, -0.002787f, -0.005189f, -0.000561f, +0.002758f, -0.003846f, +0.000304f, -0.003659f, +0.004433f, -0.002832f, - +0.000296f, +0.002737f, -0.002161f, +0.002811f, -0.001969f, +0.000198f, -0.001272f, +0.001830f, +0.003687f, +0.000412f, - -0.000197f, -0.004009f, -0.002505f, +0.002792f, -0.002554f, -0.001384f - }, - { - +0.050294f, -0.043887f, -0.015827f, +0.023476f, +0.069209f, +0.004410f, +0.024947f, -0.025179f, +0.018543f, +0.000243f, - -0.020798f, -0.019289f, +0.014150f, +0.009573f, +0.031089f, +0.014414f, -0.006846f, -0.040609f, +0.011289f, -0.012367f, - +0.027606f, +0.015860f, +0.009124f, -0.016411f, +0.009314f, -0.002779f, +0.006909f, -0.006208f, -0.000161f, -0.010806f, - -0.005848f, +0.012624f, -0.003598f, +0.013638f, +0.000543f, -0.008511f, -0.008681f, -0.000963f, +0.006725f, +0.005050f, - -0.001279f, -0.005362f, +0.022672f, -0.013201f, -0.015542f, -0.014594f, +0.000812f, -0.004296f, +0.006715f, -0.009835f, - +0.001390f, +0.000811f, +0.002251f, -0.004354f, +0.001646f, +0.003889f, -0.001618f, -0.006436f, +0.000132f, +0.000709f, - +0.006072f, -0.004274f, +0.002389f, -0.005944f, -0.003486f, -0.001092f, +0.000203f, +0.000912f, -0.002649f, +0.003065f, - +0.000394f, +0.001596f, -0.000887f, -0.000570f, -0.001407f, -0.000861f, +0.003830f, -0.003687f, +0.008610f, +0.006892f, - +0.002117f, +0.000326f, -0.001894f, +0.000910f, +0.001059f, -0.002203f, +0.001275f, +0.001583f, +0.003407f, +0.002039f, - -0.001398f, -0.000316f, +0.000265f, -0.000115f, -0.002444f, -0.002187f - }, - { - +0.000688f, +0.075515f, -0.010802f, -0.002148f, -0.011140f, +0.003619f, -0.007983f, -0.012581f, +0.001248f, +0.002359f, - +0.003047f, -0.005753f, +0.002676f, +0.069185f, -0.040831f, +0.023072f, -0.006576f, +0.000469f, -0.025853f, -0.011338f, - +0.007201f, +0.001282f, +0.023069f, -0.009376f, +0.012530f, -0.007828f, +0.012770f, -0.002460f, +0.017630f, +0.025377f, - -0.029409f, +0.000413f, -0.008797f, -0.004468f, +0.004356f, +0.005347f, +0.012400f, -0.015254f, +0.013897f, +0.002392f, - -0.008333f, -0.011204f, -0.000447f, +0.007764f, +0.001000f, -0.015296f, -0.007603f, +0.000411f, -0.003609f, +0.009536f, - -0.001157f, +0.016827f, -0.004786f, -0.003814f, +0.002266f, +0.009541f, +0.002536f, +0.002001f, -0.005062f, -0.004422f, - +0.000603f, +0.009442f, +0.001051f, -0.000763f, +0.000729f, +0.006924f, +0.006186f, -0.000735f, -0.002049f, -0.010567f, - -0.005405f, +0.002736f, +0.000548f, +0.007268f, +0.002670f, -0.001674f, -0.003528f, +0.001035f, -0.007853f, -0.001492f, - -0.002649f, -0.002694f, -0.001989f, +0.001512f, +0.004437f, +0.000552f, +0.002722f, +0.005922f, +0.001598f, -0.000396f, - -0.003132f, +0.000199f, +0.001810f, -0.005153f, +0.002304f, +0.001527f - }, - { - +0.032590f, +0.096225f, -0.024036f, +0.009853f, +0.037361f, -0.058418f, +0.011676f, +0.008324f, +0.004178f, +0.002297f, - +0.039175f, +0.017248f, -0.005795f, -0.027975f, +0.019363f, -0.019703f, +0.042278f, +0.021891f, +0.034006f, -0.014916f, - -0.019823f, -0.004265f, -0.006244f, +0.020812f, -0.012887f, -0.019807f, +0.019316f, -0.018329f, -0.003259f, -0.024230f, - -0.007311f, -0.004548f, -0.003063f, +0.012428f, -0.018949f, +0.000641f, -0.010262f, +0.009393f, +0.001242f, +0.007537f, - +0.012069f, +0.003149f, -0.001109f, -0.015781f, -0.005820f, -0.012297f, -0.020192f, +0.009820f, -0.002725f, +0.012540f, - -0.015264f, +0.003777f, +0.003074f, -0.000542f, -0.007635f, -0.010147f, +0.003973f, +0.006882f, -0.007365f, -0.005267f, - -0.000013f, +0.003132f, +0.006131f, -0.001625f, +0.009574f, +0.003164f, +0.011027f, -0.006399f, +0.005489f, +0.003391f, - +0.000494f, +0.001889f, +0.004849f, +0.001263f, +0.004751f, -0.000140f, +0.006463f, -0.003695f, -0.004242f, +0.000069f, - -0.002891f, +0.001192f, -0.000808f, -0.000351f, -0.001341f, -0.001647f, +0.000502f, -0.002060f, +0.000948f, +0.002158f, - +0.000318f, +0.002442f, +0.000658f, +0.002110f, +0.002822f, +0.000639f - }, - { - -0.001419f, -0.072770f, +0.003517f, +0.038717f, -0.005287f, +0.000246f, +0.002637f, -0.002651f, +0.012991f, -0.013378f, - +0.006408f, -0.000847f, +0.000995f, -0.026727f, -0.122976f, +0.008373f, +0.000578f, +0.001824f, +0.007293f, +0.001555f, - -0.011369f, -0.009710f, +0.005276f, -0.023906f, +0.002699f, +0.007783f, +0.006611f, +0.007828f, -0.010346f, -0.005979f, - -0.011967f, -0.018709f, -0.007198f, -0.014862f, +0.008275f, +0.015745f, +0.015004f, +0.011455f, +0.002768f, -0.003643f, - +0.010152f, +0.001939f, -0.000102f, +0.004708f, +0.004888f, -0.002949f, -0.002646f, +0.007509f, -0.002899f, +0.005074f, - +0.002609f, +0.007099f, +0.005500f, -0.002485f, -0.002762f, +0.005405f, +0.002120f, +0.003419f, +0.004931f, +0.007644f, - -0.006314f, +0.009853f, -0.000135f, +0.001347f, +0.000143f, -0.015144f, +0.003090f, -0.001230f, +0.001094f, +0.001992f, - -0.002823f, +0.002122f, +0.001197f, -0.000622f, -0.000631f, -0.004019f, +0.000453f, -0.000681f, -0.001983f, -0.007985f, - +0.005341f, +0.006359f, -0.002518f, -0.000494f, +0.002177f, +0.002309f, +0.002020f, -0.000584f, -0.000074f, +0.004308f, - -0.000918f, -0.004921f, +0.001979f, +0.004480f, -0.003308f, +0.001316f - } - }, - { - { - +0.030267f, -0.250345f, -0.079482f, -0.061973f, -0.038731f, -0.002806f, +0.016336f, +0.006336f, -0.005335f, +0.015481f, - -0.018166f, +0.006682f, -0.002343f, +0.015870f, +0.003743f, -0.021447f, -0.022345f, -0.023698f, +0.021922f, +0.006867f, - +0.011625f, -0.007283f, +0.010491f, +0.013584f, +0.009698f, +0.004986f, -0.011363f, +0.005642f, +0.003156f, -0.012941f, - +0.014781f, +0.009737f, -0.009238f, +0.007154f, +0.009520f, -0.008696f, +0.010374f, -0.008233f, +0.010808f, -0.000948f, - -0.005463f, +0.007676f, +0.005190f, +0.002861f, +0.008840f, -0.000145f, -0.005924f, +0.010456f, +0.010774f, +0.013300f, - -0.001788f, -0.002170f, +0.000192f, +0.010501f, -0.001682f, +0.003355f, +0.013622f, -0.002141f, +0.000329f, +0.005655f, - -0.006014f, -0.009620f, +0.011183f, +0.001672f, +0.005084f, -0.002359f, -0.000056f, -0.000325f, -0.000449f, -0.002087f, - -0.003868f, -0.004695f, -0.002146f, -0.009265f, -0.000856f, +0.004081f, -0.000026f, -0.001520f, +0.000825f, +0.003278f, - -0.001849f, +0.001831f, -0.001613f, +0.003978f, +0.000653f, +0.002145f, +0.002485f, -0.003109f, +0.002313f, +0.001310f, - +0.001869f, -0.001624f, -0.000392f, +0.002191f, -0.002234f, +0.000092f - }, - { - -0.001383f, -0.092461f, +0.004667f, +0.026706f, -0.014142f, -0.008463f, -0.003404f, -0.011942f, -0.016078f, +0.000528f, - -0.017160f, +0.009143f, -0.009626f, +0.041929f, +0.023514f, +0.015236f, +0.025955f, +0.011794f, +0.010735f, -0.009926f, - +0.019210f, +0.007795f, -0.033993f, -0.028317f, +0.028489f, +0.002447f, -0.026246f, -0.004629f, -0.021764f, +0.005768f, - -0.003389f, -0.007210f, +0.005628f, -0.003005f, +0.000766f, -0.000592f, -0.009899f, +0.001600f, -0.000632f, -0.000699f, - +0.000927f, -0.013099f, -0.005479f, -0.001483f, +0.008827f, -0.011150f, +0.006590f, +0.003220f, -0.011334f, -0.003208f, - +0.000467f, +0.001170f, -0.002407f, +0.002026f, -0.010185f, +0.000938f, +0.011729f, -0.007069f, +0.001145f, -0.004362f, - -0.000211f, +0.003602f, -0.000776f, -0.005754f, -0.008542f, +0.005547f, +0.002307f, -0.006557f, -0.001828f, +0.003231f, - -0.002278f, -0.001268f, +0.004200f, +0.001007f, -0.001666f, -0.007205f, -0.004281f, -0.004164f, +0.001426f, +0.001295f, - -0.003560f, +0.004791f, -0.002390f, +0.001784f, +0.002282f, +0.000438f, -0.001896f, -0.001142f, +0.000029f, -0.001735f, - -0.003599f, +0.000877f, -0.000060f, +0.000378f, -0.001040f, -0.000126f - }, - { - +0.001182f, +0.224240f, +0.014517f, -0.010475f, +0.004071f, -0.006086f, +0.008015f, -0.014830f, +0.005353f, -0.011593f, - +0.001110f, +0.022512f, -0.005145f, +0.013197f, +0.006318f, +0.024747f, -0.018038f, -0.006579f, -0.017163f, +0.014729f, - -0.021308f, +0.006414f, -0.007096f, +0.016956f, +0.007563f, -0.010546f, +0.009674f, -0.006126f, +0.005624f, +0.004634f, - +0.002154f, -0.002818f, -0.005659f, -0.004974f, +0.002476f, +0.005510f, -0.009267f, +0.019420f, +0.006591f, +0.006160f, - -0.011192f, -0.013338f, +0.015297f, -0.003204f, +0.001000f, +0.007955f, +0.006872f, +0.001882f, -0.000579f, -0.002363f, - +0.013576f, -0.001068f, -0.007727f, +0.002641f, +0.000954f, -0.001234f, +0.006660f, -0.002307f, -0.003247f, -0.005742f, - +0.002551f, -0.005273f, -0.003081f, -0.007171f, +0.003850f, -0.000737f, -0.001812f, +0.000836f, +0.000061f, +0.001806f, - +0.000214f, -0.003239f, -0.002946f, -0.001562f, +0.005039f, +0.002930f, +0.000898f, -0.002614f, +0.003286f, -0.002744f, - +0.002161f, +0.000646f, +0.002484f, +0.000773f, -0.000803f, -0.001752f, +0.002410f, -0.000789f, +0.001615f, -0.001664f, - +0.002554f, +0.000557f, +0.001489f, -0.000382f, +0.002533f, +0.004006f - }, - { - -0.036016f, -0.017953f, +0.022607f, +0.037980f, -0.003028f, -0.009549f, -0.000733f, -0.002092f, +0.021381f, -0.018421f, - -0.007647f, -0.000823f, +0.004561f, -0.015234f, -0.009924f, +0.012302f, +0.015999f, -0.019837f, +0.021877f, +0.010630f, - -0.002432f, +0.015051f, +0.037461f, -0.017509f, +0.003648f, -0.018434f, +0.012803f, +0.001633f, +0.005287f, -0.023961f, - -0.002547f, +0.009936f, -0.010281f, +0.010000f, +0.007588f, +0.017235f, -0.015338f, -0.002298f, -0.007231f, +0.002039f, - -0.015743f, +0.001677f, +0.004761f, -0.000643f, -0.014869f, -0.004642f, -0.007700f, +0.002174f, -0.008352f, -0.000904f, - +0.019849f, +0.001230f, -0.001691f, -0.002692f, -0.004064f, -0.001135f, +0.001225f, -0.006532f, -0.004411f, +0.013298f, - -0.001204f, -0.003716f, +0.005249f, +0.008888f, -0.002255f, -0.003199f, +0.004161f, -0.002141f, -0.002307f, +0.004875f, - -0.001384f, -0.007305f, +0.004205f, -0.005030f, +0.000456f, -0.001140f, +0.001638f, +0.002604f, -0.001931f, +0.001420f, - +0.002411f, +0.001280f, +0.001517f, -0.001536f, -0.001405f, -0.001294f, +0.004062f, +0.001934f, +0.004172f, -0.001906f, - -0.001262f, +0.000569f, +0.001671f, +0.000892f, +0.000049f, +0.000733f - }, - { - +0.002018f, +0.051594f, +0.000878f, +0.015897f, -0.002201f, +0.002189f, +0.003929f, +0.000834f, +0.003655f, -0.004871f, - +0.011451f, -0.004935f, +0.009134f, -0.003645f, +0.033962f, +0.012838f, -0.005131f, -0.019350f, -0.014398f, +0.018474f, - +0.008165f, -0.002042f, +0.008419f, +0.026784f, +0.028090f, +0.030781f, -0.020611f, -0.027747f, -0.008509f, -0.014322f, - +0.036125f, +0.041071f, +0.023106f, -0.009076f, -0.014597f, +0.001500f, +0.002512f, +0.004764f, +0.013934f, +0.002649f, - +0.000441f, +0.002871f, -0.013101f, +0.002035f, -0.000873f, -0.008937f, -0.002834f, +0.002277f, -0.002967f, +0.003675f, - -0.003198f, -0.011499f, +0.000298f, +0.000003f, +0.005646f, -0.002212f, +0.004959f, -0.008306f, -0.007988f, -0.000897f, - +0.002725f, -0.005848f, -0.002331f, +0.000723f, +0.002126f, +0.011328f, +0.001568f, -0.014721f, -0.000417f, -0.004277f, - +0.001461f, +0.003719f, -0.006129f, +0.000878f, +0.003831f, -0.007027f, +0.001031f, +0.001512f, -0.003558f, -0.000141f, - +0.002790f, -0.006967f, -0.000877f, +0.000816f, -0.002703f, -0.000473f, +0.001510f, +0.000255f, -0.001925f, -0.000845f, - -0.001920f, -0.001939f, +0.000168f, -0.001019f, -0.000510f, -0.002689f - }, - { - -0.069078f, -0.005915f, +0.049828f, -0.092657f, -0.010643f, +0.000710f, +0.006378f, +0.001412f, +0.035882f, -0.034701f, - -0.023552f, -0.019896f, +0.019712f, +0.012051f, +0.011014f, +0.001941f, +0.008145f, +0.001027f, -0.012162f, -0.012024f, - +0.023335f, +0.006647f, -0.015432f, +0.025711f, +0.000629f, -0.009431f, -0.001324f, +0.024451f, +0.006988f, +0.005640f, - -0.015977f, -0.014247f, +0.000877f, -0.000287f, -0.005519f, +0.013421f, +0.001493f, -0.004995f, +0.009992f, +0.001283f, - -0.003121f, -0.009718f, +0.001342f, -0.017147f, +0.015220f, +0.002557f, +0.008965f, -0.002628f, -0.001767f, +0.008625f, - +0.002505f, +0.008029f, -0.002171f, -0.001292f, -0.005009f, +0.004273f, -0.000191f, -0.001036f, +0.001013f, -0.002935f, - -0.005633f, +0.002695f, -0.004532f, -0.001876f, -0.002235f, +0.000405f, -0.001676f, -0.000227f, -0.002314f, -0.002490f, - +0.002284f, +0.005772f, -0.003438f, +0.000178f, -0.001525f, +0.004804f, -0.000853f, -0.000702f, -0.003280f, -0.001256f, - -0.001985f, +0.000924f, +0.000051f, +0.002507f, -0.002128f, -0.002679f, +0.000018f, -0.000440f, -0.002938f, -0.002244f, - +0.001274f, +0.000604f, -0.000861f, -0.000614f, +0.001070f, -0.000120f - }, - { - -0.001133f, +0.020307f, -0.005801f, -0.002064f, -0.004145f, +0.000814f, +0.000631f, -0.004328f, -0.007864f, +0.001979f, - -0.008270f, -0.003124f, -0.000087f, +0.008701f, -0.030969f, -0.007430f, +0.013982f, +0.004555f, -0.017024f, -0.035896f, - -0.016892f, +0.004956f, +0.007806f, -0.014228f, +0.029119f, -0.031138f, -0.034149f, +0.020011f, +0.007821f, +0.006134f, - +0.020692f, -0.011758f, +0.007035f, +0.011316f, -0.007851f, +0.005958f, +0.006620f, +0.008939f, -0.008367f, +0.006732f, - +0.005571f, -0.009486f, +0.003427f, +0.009226f, +0.000002f, -0.002675f, -0.000940f, +0.000726f, +0.013169f, -0.007652f, - -0.000073f, +0.001505f, -0.004713f, +0.009899f, +0.001456f, +0.004182f, -0.007721f, -0.006025f, +0.001288f, +0.005704f, - -0.001221f, -0.004110f, -0.003017f, +0.004619f, -0.003583f, -0.005733f, +0.004723f, +0.001705f, -0.004420f, +0.001045f, - -0.001424f, -0.002989f, -0.001590f, -0.001317f, +0.001548f, +0.000586f, -0.000071f, +0.000151f, -0.000064f, -0.000931f, - +0.000811f, +0.000997f, +0.000851f, +0.001942f, -0.001225f, -0.001328f, +0.001525f, +0.000070f, +0.000447f, -0.003294f, - +0.001212f, -0.000305f, +0.001791f, +0.001086f, -0.000070f, -0.002534f - }, - { - +0.027895f, +0.525123f, +0.039485f, -0.114204f, +0.006994f, -0.034456f, -0.030817f, +0.019756f, -0.017083f, -0.004319f, - -0.018676f, -0.008318f, +0.019993f, +0.007104f, +0.023880f, -0.022507f, +0.012207f, -0.002350f, +0.006810f, +0.017832f, - -0.023468f, +0.007475f, +0.011119f, +0.003805f, -0.016678f, +0.009993f, -0.026038f, +0.020509f, +0.006405f, -0.005937f, - -0.011580f, -0.003649f, +0.001367f, +0.008394f, -0.011263f, -0.010417f, +0.001688f, -0.003649f, -0.007926f, +0.005916f, - -0.001310f, +0.013039f, +0.009546f, -0.002581f, +0.001860f, +0.005644f, +0.004055f, +0.000645f, +0.007070f, -0.005514f, - -0.002531f, +0.002999f, -0.006542f, +0.006699f, +0.012789f, -0.001071f, +0.000675f, +0.009007f, -0.007063f, -0.003036f, - +0.004284f, -0.000481f, -0.001594f, -0.001161f, -0.006406f, +0.006673f, +0.001162f, +0.000259f, +0.001634f, +0.004077f, - +0.000711f, -0.002911f, +0.004240f, -0.000076f, -0.004454f, -0.000188f, +0.009111f, -0.002761f, +0.000106f, +0.002441f, - -0.003720f, +0.000970f, +0.002167f, -0.001687f, +0.000515f, +0.005325f, -0.001024f, +0.000208f, +0.001550f, -0.002861f, - -0.001382f, -0.001431f, +0.003383f, -0.001754f, +0.001936f, -0.002217f - }, - { - +0.000439f, +0.011746f, -0.003967f, -0.006190f, +0.006088f, +0.000401f, +0.000500f, +0.008128f, -0.002909f, -0.002975f, - -0.001908f, +0.005182f, +0.000209f, -0.002061f, -0.010806f, +0.031097f, -0.001739f, +0.006864f, -0.007948f, -0.031510f, - +0.003901f, +0.013590f, +0.008809f, +0.020211f, -0.006628f, -0.018281f, +0.027798f, +0.001905f, +0.022931f, -0.011583f, - +0.001097f, +0.000166f, -0.022190f, -0.009885f, +0.000393f, -0.016179f, +0.000316f, +0.002910f, -0.011317f, -0.007920f, - +0.003825f, -0.010027f, +0.004932f, +0.003120f, -0.005364f, -0.007184f, +0.006289f, +0.002309f, -0.005106f, -0.000832f, - +0.011538f, +0.002453f, +0.008096f, +0.000659f, +0.003510f, +0.003048f, +0.006155f, +0.001593f, -0.000852f, +0.004018f, - -0.004928f, +0.008072f, +0.004827f, +0.006387f, +0.005604f, +0.001968f, -0.002207f, +0.004153f, -0.001997f, +0.004014f, - -0.000191f, -0.003851f, -0.003391f, +0.004589f, -0.001617f, -0.002898f, +0.002501f, +0.002406f, -0.001738f, -0.000575f, - +0.003318f, +0.003181f, -0.003857f, +0.000804f, +0.004827f, -0.002123f, +0.000623f, -0.002342f, -0.001035f, +0.000774f, - +0.004001f, +0.000313f, +0.000622f, -0.000387f, -0.002653f, +0.002541f - }, - { - -0.045090f, +0.042907f, +0.071196f, -0.024873f, +0.002054f, -0.008819f, +0.001851f, -0.004702f, -0.015218f, +0.026055f, - +0.012860f, +0.013687f, -0.003474f, +0.010840f, -0.006605f, -0.032726f, +0.016565f, +0.006873f, +0.013139f, +0.000617f, - +0.014669f, +0.026135f, +0.007328f, +0.004648f, +0.002794f, +0.011328f, +0.001283f, -0.003475f, -0.005733f, +0.001931f, - -0.004817f, -0.002412f, -0.013222f, +0.006418f, -0.009723f, +0.001374f, +0.002256f, -0.003103f, +0.003478f, +0.010974f, - +0.003302f, +0.019936f, +0.000462f, +0.004228f, +0.001465f, -0.006515f, -0.010210f, +0.006339f, +0.001309f, -0.003349f, - +0.005032f, +0.001917f, -0.006277f, -0.001806f, -0.002859f, +0.000002f, -0.001841f, -0.001760f, +0.008287f, +0.002247f, - -0.004528f, -0.003317f, +0.001118f, +0.000659f, +0.001026f, +0.008276f, -0.004251f, -0.006581f, +0.006850f, -0.006657f, - -0.011372f, -0.001970f, -0.001494f, -0.002083f, +0.003363f, +0.002207f, +0.000830f, -0.002993f, -0.000855f, -0.000839f, - +0.002253f, +0.003176f, +0.005672f, +0.001716f, -0.001753f, -0.002784f, +0.005724f, -0.000209f, -0.000915f, -0.001406f, - -0.001271f, -0.001698f, +0.000994f, +0.001350f, +0.003257f, -0.001479f - }, - { - -0.007490f, +0.017357f, +0.031756f, +0.005160f, -0.007107f, -0.015996f, +0.000028f, -0.017280f, -0.017396f, +0.002800f, - -0.019757f, -0.027154f, -0.004870f, -0.001155f, +0.043893f, -0.013403f, +0.008320f, -0.011429f, -0.009266f, -0.002678f, - +0.023466f, -0.016031f, +0.012273f, -0.005808f, -0.011944f, -0.003844f, -0.005298f, -0.008569f, -0.002857f, +0.002019f, - +0.009095f, -0.002892f, -0.000632f, -0.003804f, -0.002640f, -0.003249f, +0.001744f, -0.002379f, -0.010222f, -0.001030f, - -0.000169f, +0.002329f, +0.000212f, -0.004909f, +0.011633f, +0.004149f, -0.004176f, -0.010195f, +0.004921f, +0.007489f, - +0.000530f, -0.005669f, -0.006765f, +0.001559f, -0.001259f, -0.005959f, +0.003531f, -0.004544f, +0.001070f, +0.005223f, - -0.005339f, -0.000277f, -0.001113f, +0.002490f, -0.000780f, -0.002165f, -0.000643f, +0.004300f, -0.002871f, -0.000678f, - -0.000856f, -0.005533f, -0.005476f, +0.000015f, +0.001697f, -0.002172f, +0.001349f, -0.003055f, +0.006161f, -0.000158f, - -0.000042f, +0.000815f, -0.004958f, +0.002605f, -0.000638f, +0.001714f, -0.002789f, -0.002054f, -0.000784f, -0.000432f, - +0.002182f, -0.001434f, -0.002042f, +0.003219f, -0.001471f, -0.001363f - }, - { - -0.033546f, -0.160731f, -0.011525f, +0.017905f, +0.066193f, -0.020816f, -0.003322f, -0.019092f, +0.025569f, +0.030163f, - -0.010287f, -0.023501f, +0.029496f, +0.013918f, +0.013578f, +0.005741f, +0.027963f, -0.019657f, +0.000095f, -0.019072f, - +0.015658f, -0.006771f, -0.001423f, -0.027122f, +0.002460f, -0.001747f, +0.009529f, +0.002670f, +0.013521f, +0.000869f, - +0.007370f, +0.025469f, -0.000796f, +0.007583f, -0.004488f, -0.018185f, -0.016713f, +0.005374f, -0.006177f, -0.012946f, - -0.010007f, -0.008841f, +0.013909f, -0.015192f, -0.012230f, -0.009386f, +0.005492f, -0.008885f, +0.000910f, -0.012275f, - +0.006413f, -0.001259f, -0.002322f, -0.001362f, -0.008159f, -0.000558f, +0.004618f, -0.009039f, -0.001607f, +0.004246f, - +0.009227f, -0.005946f, +0.000479f, -0.008088f, -0.004780f, +0.002458f, -0.000330f, -0.000721f, -0.000592f, +0.002347f, - -0.000917f, +0.002382f, +0.000593f, +0.001201f, +0.003621f, +0.000771f, +0.002828f, -0.007462f, +0.001699f, +0.001377f, - -0.003007f, -0.003479f, -0.001595f, +0.003239f, -0.000274f, -0.003933f, +0.002371f, +0.000710f, +0.002083f, +0.001237f, - -0.000749f, -0.001288f, -0.001667f, +0.002817f, +0.000647f, -0.001521f - }, - { - +0.000890f, +0.076115f, -0.000201f, +0.018487f, -0.013649f, -0.016921f, -0.010973f, -0.006142f, +0.001409f, +0.013575f, - +0.013874f, +0.004521f, -0.025343f, +0.027554f, -0.031743f, +0.037721f, +0.001001f, -0.002241f, -0.030102f, -0.008561f, - +0.017242f, -0.021965f, +0.005011f, -0.009614f, -0.016672f, -0.008980f, +0.028350f, -0.008120f, -0.022373f, +0.012036f, - -0.038237f, +0.016471f, +0.000067f, -0.013214f, +0.003121f, -0.013587f, +0.005087f, -0.018304f, +0.006229f, -0.000864f, - -0.007473f, +0.000381f, +0.008197f, +0.001027f, +0.008536f, -0.004166f, -0.001600f, +0.004694f, +0.002625f, +0.009133f, - -0.007261f, +0.006170f, -0.009039f, -0.000231f, +0.006538f, +0.013825f, +0.004513f, +0.006894f, +0.003646f, -0.003975f, - -0.000099f, +0.012488f, -0.001396f, -0.001063f, +0.001961f, +0.004850f, +0.004469f, +0.002516f, +0.000761f, -0.007825f, - -0.002945f, -0.000253f, -0.004346f, +0.001570f, -0.002113f, -0.005561f, -0.002054f, +0.002887f, -0.004434f, +0.003696f, - -0.001052f, -0.004631f, -0.003999f, -0.002081f, +0.002048f, -0.000334f, +0.000319f, +0.003027f, +0.000901f, +0.001102f, - -0.003157f, -0.001181f, -0.000684f, -0.004966f, +0.002457f, +0.001253f - }, - { - -0.043754f, +0.011673f, +0.003930f, -0.015413f, +0.009471f, -0.029858f, +0.029451f, -0.019506f, +0.012171f, +0.013839f, - +0.011582f, +0.000662f, -0.004847f, +0.016303f, +0.059762f, -0.030473f, +0.025148f, +0.001263f, +0.021810f, -0.029932f, - -0.026265f, -0.004321f, -0.012972f, +0.029326f, +0.002332f, -0.013124f, +0.027482f, -0.013152f, -0.002220f, -0.015426f, - -0.000481f, -0.014377f, -0.000325f, +0.023363f, +0.000527f, +0.016003f, -0.019653f, -0.008448f, -0.007669f, +0.001668f, - +0.002642f, -0.009834f, -0.004901f, -0.012842f, -0.001802f, +0.003050f, -0.005627f, +0.010949f, -0.004662f, +0.022803f, - -0.010622f, +0.002032f, -0.003673f, -0.002866f, -0.007318f, -0.005662f, +0.005031f, +0.004309f, -0.010924f, -0.005480f, - -0.002259f, +0.002696f, +0.006404f, -0.005571f, +0.002917f, -0.002223f, +0.008719f, -0.007596f, +0.005192f, +0.003053f, - -0.000077f, -0.000700f, +0.000146f, +0.004490f, +0.008129f, -0.001375f, +0.002299f, -0.006716f, -0.006159f, -0.001884f, - -0.000978f, +0.002690f, -0.002267f, +0.002993f, +0.001424f, -0.000350f, -0.000307f, -0.001926f, -0.000218f, +0.000190f, - -0.001534f, +0.001849f, -0.000873f, -0.001800f, +0.002668f, +0.002563f - }, - { - +0.001183f, -0.099729f, -0.024336f, +0.020037f, -0.000438f, +0.000693f, -0.012798f, -0.001907f, +0.011109f, -0.016343f, - +0.001297f, +0.020671f, +0.014218f, +0.081884f, -0.003756f, +0.000540f, -0.008702f, +0.004595f, +0.029148f, -0.000195f, - -0.018407f, +0.002608f, +0.018608f, -0.010447f, +0.000268f, -0.003281f, -0.015761f, -0.024311f, -0.037925f, -0.005188f, - +0.015047f, +0.001641f, +0.005287f, -0.005470f, +0.000859f, -0.010550f, -0.008609f, -0.007463f, -0.007193f, -0.015592f, - -0.003621f, +0.006938f, +0.002698f, -0.005743f, -0.010284f, -0.003533f, +0.007533f, -0.008136f, -0.010991f, +0.013119f, - -0.007229f, -0.005511f, +0.001462f, -0.005384f, -0.005523f, +0.008812f, +0.003132f, +0.004030f, +0.006060f, +0.005233f, - -0.010031f, +0.007410f, -0.002717f, +0.002764f, +0.011362f, -0.007187f, +0.003996f, +0.001589f, +0.000129f, +0.003475f, - -0.001040f, +0.004592f, -0.000254f, -0.002308f, +0.002300f, -0.001361f, +0.005185f, +0.005044f, +0.004642f, -0.009621f, - -0.001976f, +0.001744f, -0.006443f, -0.002388f, +0.002213f, +0.001567f, -0.002560f, -0.000904f, +0.001483f, +0.004409f, - -0.001134f, -0.004552f, -0.000202f, +0.003635f, -0.002503f, +0.001960f - } - }, - { - { - -0.032955f, -0.385428f, +0.061318f, -0.085198f, -0.021268f, +0.000597f, -0.003775f, +0.028864f, -0.018004f, -0.017678f, - +0.017818f, +0.010489f, +0.003255f, +0.017963f, -0.014536f, -0.006766f, -0.012063f, -0.019914f, +0.006155f, +0.010225f, - -0.001229f, -0.003037f, +0.017277f, +0.010159f, +0.020390f, +0.004587f, -0.013287f, +0.001963f, -0.000144f, -0.008664f, - +0.007014f, -0.001985f, +0.018263f, -0.003289f, +0.008323f, -0.013112f, +0.004432f, -0.008602f, +0.014827f, +0.000849f, - +0.004349f, +0.005403f, +0.003819f, +0.000612f, +0.008202f, -0.006408f, +0.003093f, +0.005590f, +0.008494f, +0.005420f, - +0.011395f, -0.010220f, +0.002234f, +0.007772f, -0.003675f, +0.005169f, +0.010274f, +0.003428f, -0.001961f, +0.007734f, - -0.005755f, -0.004341f, +0.007037f, +0.005317f, -0.003320f, +0.002871f, -0.000760f, +0.002314f, -0.002464f, -0.003523f, - +0.000002f, -0.006612f, -0.004401f, -0.003620f, +0.000286f, +0.000820f, -0.001998f, +0.000553f, -0.001713f, +0.002895f, - -0.000187f, +0.004675f, -0.000983f, +0.003872f, +0.000528f, -0.000114f, +0.001170f, -0.000672f, -0.000985f, +0.003701f, - +0.003994f, -0.001527f, -0.000081f, +0.000292f, -0.000950f, -0.001578f - }, - { - +0.001267f, -0.040840f, -0.030678f, -0.006880f, +0.005743f, -0.004875f, -0.003092f, -0.011182f, -0.011508f, -0.020900f, - -0.015983f, +0.025247f, +0.001026f, +0.011114f, +0.041533f, +0.038498f, -0.007121f, +0.038921f, +0.006670f, -0.020867f, - +0.020447f, +0.002042f, -0.008555f, -0.023188f, -0.011289f, +0.031710f, -0.018185f, -0.022930f, -0.029367f, +0.007654f, - +0.008356f, -0.010120f, +0.008907f, -0.003543f, +0.002368f, -0.000107f, -0.008221f, -0.009984f, +0.004819f, +0.001399f, - -0.009693f, -0.014694f, -0.002513f, +0.001574f, +0.004426f, +0.007829f, -0.004087f, +0.005057f, -0.014260f, -0.004033f, - +0.002897f, -0.000889f, +0.004954f, -0.003010f, -0.004115f, -0.006559f, +0.008786f, +0.000007f, +0.001118f, -0.008488f, - +0.004308f, +0.002220f, +0.000293f, -0.007160f, -0.008033f, +0.008533f, -0.003947f, -0.004821f, -0.000985f, +0.001273f, - -0.001022f, +0.003200f, -0.001267f, +0.004991f, -0.005926f, -0.002011f, -0.005690f, -0.002428f, +0.001871f, -0.000539f, - -0.001236f, +0.001435f, -0.001068f, +0.002488f, -0.000217f, -0.000971f, +0.001638f, -0.001653f, -0.001832f, -0.002721f, - +0.001046f, -0.002263f, +0.000575f, -0.000837f, -0.000005f, +0.002065f - }, - { - -0.005274f, +0.216782f, +0.024387f, +0.027145f, -0.026478f, -0.004209f, +0.005637f, +0.005390f, -0.001526f, -0.023891f, - -0.013284f, +0.047086f, +0.009969f, -0.023612f, +0.019312f, +0.020638f, +0.000075f, -0.027878f, +0.006381f, +0.015045f, - -0.008801f, -0.009024f, -0.001215f, -0.000067f, +0.019017f, -0.012182f, -0.000501f, +0.003080f, -0.002672f, +0.013276f, - +0.005778f, -0.014049f, +0.007800f, +0.002314f, -0.001458f, -0.005577f, +0.006055f, +0.014336f, +0.014803f, +0.001490f, - -0.007104f, -0.011988f, +0.005505f, -0.003243f, -0.008186f, +0.010555f, +0.008220f, +0.011599f, -0.002629f, +0.006538f, - +0.006963f, -0.001710f, -0.000213f, -0.005335f, +0.003287f, +0.003470f, +0.005802f, -0.000697f, -0.005738f, -0.011200f, - +0.003289f, -0.001378f, -0.001490f, -0.002910f, -0.004654f, -0.000634f, -0.002466f, +0.000223f, +0.001856f, -0.001058f, - +0.003668f, -0.004110f, -0.003493f, +0.000016f, +0.003876f, +0.002865f, -0.001145f, +0.001688f, +0.002590f, -0.001597f, - +0.001186f, +0.001235f, +0.001250f, +0.002370f, -0.001924f, -0.000442f, -0.000052f, +0.000955f, +0.001811f, -0.001489f, - +0.003413f, +0.001599f, -0.001647f, +0.000422f, +0.002983f, +0.002171f - }, - { - +0.055885f, -0.121233f, -0.020854f, +0.026816f, +0.028967f, -0.009499f, -0.004099f, +0.006184f, -0.002006f, +0.007604f, - -0.003476f, -0.004163f, -0.001422f, -0.017662f, -0.000461f, +0.011189f, -0.015681f, +0.013905f, +0.025344f, -0.003753f, - -0.003425f, +0.018394f, +0.016624f, -0.011603f, -0.000287f, +0.010854f, -0.009544f, +0.001232f, -0.003066f, +0.002259f, - -0.021133f, +0.005982f, +0.001190f, +0.009056f, +0.001520f, +0.018676f, -0.009322f, -0.005291f, -0.005322f, +0.000826f, - +0.003492f, -0.008882f, +0.005474f, -0.003533f, -0.013147f, -0.013778f, +0.005612f, -0.008202f, -0.005545f, +0.002696f, - +0.012923f, +0.006305f, -0.008534f, +0.000486f, +0.000508f, -0.002680f, -0.000034f, -0.005522f, -0.002889f, +0.009645f, - +0.001295f, +0.000907f, +0.000590f, +0.004093f, -0.001204f, -0.001992f, +0.000015f, +0.005929f, -0.002363f, +0.001044f, - -0.000267f, -0.002459f, +0.001546f, -0.005281f, +0.000081f, +0.002192f, +0.000104f, -0.002796f, +0.000375f, +0.003104f, - +0.001692f, +0.000709f, +0.004104f, -0.000833f, -0.001414f, -0.000659f, +0.001489f, +0.003067f, +0.002922f, -0.001217f, - -0.000726f, +0.001970f, +0.000827f, -0.000366f, +0.001237f, +0.000774f - }, - { - -0.003275f, +0.032246f, +0.019740f, +0.012349f, -0.000524f, +0.000613f, +0.003208f, +0.006912f, -0.005444f, +0.001369f, - -0.000092f, +0.001246f, +0.008812f, +0.021122f, +0.023585f, +0.007231f, -0.028027f, -0.076139f, +0.091989f, -0.010470f, - +0.005913f, -0.007174f, +0.015509f, +0.022493f, +0.005382f, +0.030013f, -0.003796f, -0.036229f, -0.017341f, +0.013630f, - +0.018792f, +0.039756f, +0.025355f, -0.002682f, -0.001096f, -0.016805f, +0.015034f, +0.003977f, +0.003681f, +0.012929f, - +0.001731f, -0.003764f, -0.006358f, -0.001258f, -0.014601f, +0.006665f, -0.006024f, -0.002300f, +0.006549f, +0.001164f, - -0.004949f, -0.005428f, -0.007913f, +0.004984f, +0.002585f, +0.001308f, -0.007240f, +0.000088f, -0.008635f, -0.000484f, - +0.003007f, -0.005254f, +0.004606f, -0.003391f, +0.000552f, +0.009550f, +0.000210f, -0.007073f, -0.008663f, +0.000369f, - +0.001726f, +0.000822f, -0.001339f, +0.002319f, +0.003454f, -0.008749f, +0.003485f, -0.000191f, -0.002454f, -0.000594f, - +0.002075f, -0.002847f, +0.001187f, -0.003666f, -0.001846f, +0.000265f, +0.001397f, +0.001293f, -0.001696f, -0.000830f, - -0.004266f, -0.001558f, -0.000613f, -0.000543f, -0.001669f, -0.000298f - }, - { - +0.096260f, -0.170950f, -0.027963f, -0.085272f, +0.011361f, -0.000966f, -0.001295f, +0.022383f, +0.029759f, -0.042877f, - -0.017437f, -0.018659f, +0.038020f, -0.003985f, +0.005971f, +0.021253f, -0.007327f, +0.005957f, +0.004812f, -0.022177f, - +0.008139f, +0.012766f, -0.002770f, +0.000454f, +0.013852f, +0.000345f, -0.000140f, +0.022375f, -0.000703f, +0.006239f, - -0.009399f, -0.019992f, -0.007441f, +0.009873f, -0.010246f, +0.013243f, +0.004791f, +0.003940f, +0.007177f, -0.011160f, - -0.009015f, +0.001905f, -0.001451f, -0.007623f, +0.006159f, +0.006931f, +0.008634f, +0.000251f, -0.007042f, +0.008933f, - +0.001032f, +0.006425f, +0.004031f, -0.005000f, -0.007313f, +0.008058f, -0.002168f, -0.001924f, -0.002952f, +0.002197f, - -0.006441f, -0.001330f, -0.000009f, -0.003912f, +0.000120f, -0.002280f, +0.000181f, +0.001012f, -0.003332f, -0.002702f, - +0.004319f, +0.002586f, +0.001295f, -0.004630f, +0.001697f, +0.000410f, -0.000647f, +0.001191f, -0.002886f, -0.001655f, - -0.001692f, +0.002060f, +0.000801f, +0.000192f, -0.000217f, -0.003349f, +0.000785f, -0.002358f, +0.000763f, -0.002172f, - +0.000402f, -0.001005f, +0.000645f, -0.000264f, +0.000274f, -0.000441f - }, - { - +0.001721f, +0.008658f, -0.001528f, +0.000175f, -0.004203f, -0.001887f, -0.001019f, -0.001995f, -0.004046f, -0.004844f, - -0.006169f, -0.001343f, +0.002458f, -0.023701f, +0.007345f, +0.013695f, -0.014621f, +0.005324f, -0.010133f, -0.037779f, - -0.000738f, -0.008332f, +0.024952f, -0.011038f, -0.001553f, -0.006757f, -0.026298f, -0.003354f, +0.000513f, +0.002232f, - +0.030902f, -0.002919f, +0.007607f, +0.011195f, -0.006776f, +0.003248f, +0.009239f, +0.003975f, -0.013565f, +0.007729f, - +0.004151f, +0.001395f, +0.003630f, +0.006142f, -0.006091f, -0.000485f, +0.006170f, -0.003299f, +0.008657f, -0.003141f, - -0.002036f, +0.004178f, +0.001390f, +0.001399f, +0.003134f, +0.003187f, -0.006238f, -0.001112f, -0.001059f, -0.003292f, - -0.000420f, +0.001248f, -0.005743f, -0.000975f, +0.000076f, -0.003343f, +0.000093f, +0.003340f, -0.003306f, +0.002113f, - -0.001234f, -0.004427f, +0.000251f, -0.003755f, +0.002960f, +0.002313f, -0.003009f, +0.000066f, +0.001747f, -0.001102f, - -0.000447f, -0.002622f, +0.002772f, +0.002207f, -0.001119f, +0.000363f, +0.002138f, -0.000466f, -0.000575f, -0.000068f, - -0.000990f, -0.001121f, +0.000690f, +0.000831f, -0.001234f, -0.000419f - }, - { - +0.018023f, +0.633921f, -0.026242f, -0.111686f, -0.005583f, -0.011666f, -0.035808f, -0.010925f, -0.008948f, +0.011412f, - -0.019942f, +0.017682f, +0.016157f, -0.016154f, +0.013791f, +0.005205f, -0.011818f, +0.030649f, -0.020483f, +0.002638f, - +0.005806f, -0.018613f, +0.010100f, -0.007539f, -0.001896f, +0.001916f, -0.002618f, +0.007084f, +0.004322f, +0.007769f, - -0.013499f, +0.000550f, +0.001018f, -0.000120f, -0.000305f, -0.002472f, +0.007481f, -0.017317f, -0.013335f, +0.011347f, - -0.006599f, +0.019842f, -0.002442f, +0.012800f, -0.010931f, +0.018751f, +0.006606f, -0.002183f, -0.000433f, +0.001797f, - -0.005444f, +0.007037f, +0.007683f, -0.003960f, +0.006926f, -0.001389f, +0.001126f, +0.012358f, -0.010072f, -0.002197f, - +0.004695f, -0.003682f, -0.002064f, -0.001255f, +0.003669f, +0.001921f, +0.002571f, -0.004610f, +0.000474f, +0.006374f, - +0.000799f, -0.001173f, +0.003380f, -0.005480f, -0.001386f, +0.002568f, +0.003744f, +0.002580f, +0.000946f, -0.002607f, - -0.000787f, +0.003901f, +0.000568f, -0.001289f, +0.000853f, +0.000594f, +0.002000f, +0.001391f, -0.001876f, -0.000666f, - -0.000878f, -0.000878f, +0.001875f, -0.001325f, +0.001402f, -0.000527f - }, - { - +0.002505f, -0.003858f, +0.001327f, +0.007595f, -0.002320f, +0.002663f, +0.003628f, -0.003769f, +0.003829f, +0.007108f, - -0.010727f, +0.003178f, +0.000139f, -0.002487f, -0.001382f, -0.006474f, +0.014173f, +0.015095f, -0.001372f, -0.031353f, - +0.009613f, -0.000732f, -0.008037f, +0.033642f, -0.016181f, +0.015848f, -0.001900f, +0.016473f, +0.006709f, -0.011287f, - +0.022215f, -0.021243f, -0.020875f, -0.003419f, -0.004804f, -0.004079f, -0.001714f, -0.014949f, +0.012116f, -0.007359f, - -0.008779f, +0.000518f, -0.003556f, +0.004809f, -0.010982f, -0.000994f, -0.000733f, +0.001157f, +0.000139f, +0.006444f, - +0.001957f, -0.003289f, +0.003059f, +0.009392f, +0.011161f, -0.004162f, +0.008411f, -0.002621f, +0.007499f, -0.005769f, - +0.006311f, +0.003691f, +0.003845f, +0.003939f, +0.007123f, +0.004599f, -0.003999f, -0.000252f, -0.000328f, +0.004613f, - +0.000962f, -0.003898f, -0.001734f, +0.002736f, -0.003261f, +0.003272f, +0.000031f, +0.001631f, -0.000753f, -0.000836f, - +0.003967f, +0.000695f, -0.002327f, +0.002540f, +0.001622f, -0.001759f, -0.000517f, -0.000504f, -0.000481f, +0.001234f, - +0.001850f, +0.003765f, -0.001715f, -0.001192f, +0.001147f, +0.000552f - }, - { - +0.051956f, +0.018443f, -0.023013f, -0.028398f, -0.006302f, +0.037503f, -0.043143f, -0.033437f, -0.001861f, +0.016735f, - +0.018859f, +0.002339f, +0.006114f, +0.021149f, -0.009888f, -0.001350f, -0.005069f, +0.010796f, -0.000351f, +0.014411f, - +0.012346f, +0.028574f, +0.013216f, -0.002495f, +0.011002f, +0.009395f, +0.011529f, -0.024963f, +0.001146f, +0.008687f, - -0.023229f, -0.005366f, -0.000718f, -0.013915f, -0.000142f, +0.011303f, -0.012201f, -0.005983f, +0.005800f, +0.005995f, - +0.013640f, +0.018392f, +0.003309f, +0.006902f, -0.010008f, -0.002752f, -0.006101f, +0.005517f, -0.000436f, +0.003859f, - -0.000584f, -0.003692f, -0.001703f, +0.004755f, -0.005722f, +0.004594f, -0.009666f, +0.003632f, +0.005127f, -0.003157f, - +0.000362f, +0.000421f, -0.001906f, -0.000736f, +0.002640f, +0.007180f, -0.005149f, -0.002009f, +0.000370f, -0.006898f, - -0.004942f, -0.007960f, +0.000641f, -0.002853f, +0.003776f, +0.003083f, -0.000796f, +0.000888f, -0.002921f, +0.003191f, - +0.000211f, +0.003112f, +0.005503f, +0.000363f, -0.004535f, -0.000497f, +0.004586f, +0.000803f, -0.000571f, -0.002973f, - +0.000256f, -0.002515f, +0.002553f, +0.000967f, +0.001019f, +0.000865f - }, - { - +0.005156f, +0.052656f, -0.021161f, +0.017083f, -0.028034f, -0.007741f, -0.006139f, +0.001879f, -0.016413f, -0.014560f, - -0.024317f, -0.018078f, -0.023096f, +0.031070f, +0.007857f, -0.017923f, +0.031521f, -0.027370f, +0.017271f, +0.019836f, - -0.002567f, -0.013734f, +0.028442f, -0.020136f, -0.001885f, -0.014219f, -0.011746f, -0.011167f, +0.002654f, +0.004908f, - -0.001612f, +0.009096f, -0.001823f, -0.007359f, -0.002936f, +0.004344f, -0.001525f, -0.002294f, -0.011121f, -0.010337f, - +0.002226f, -0.000270f, -0.001192f, +0.009641f, -0.004348f, +0.005007f, +0.000654f, -0.008548f, +0.003876f, +0.007049f, - +0.000594f, -0.006406f, -0.004741f, +0.000930f, -0.004533f, -0.004131f, +0.004171f, -0.005732f, +0.005866f, +0.003632f, - -0.006482f, +0.001753f, -0.001757f, -0.002092f, -0.000866f, -0.000089f, -0.001766f, +0.001543f, +0.002333f, -0.003232f, - +0.001537f, -0.005505f, -0.003464f, -0.002249f, +0.000693f, +0.000807f, +0.000026f, -0.000090f, +0.003647f, +0.003848f, - -0.001978f, -0.000774f, -0.002878f, +0.001238f, +0.001464f, -0.001967f, -0.000915f, -0.000304f, -0.001236f, -0.000861f, - +0.001089f, -0.000343f, -0.000596f, +0.001525f, -0.001522f, +0.001042f - }, - { - -0.011099f, -0.212850f, +0.002362f, +0.034963f, +0.020819f, +0.033977f, -0.049289f, -0.005131f, +0.029513f, +0.010411f, - +0.019282f, -0.031223f, +0.037386f, +0.003170f, +0.014379f, -0.007149f, +0.006831f, +0.026566f, -0.027442f, -0.012647f, - +0.008352f, -0.012377f, -0.005973f, -0.015999f, -0.003059f, +0.012190f, -0.005849f, +0.016254f, +0.009644f, -0.006248f, - +0.010525f, +0.021898f, +0.010752f, -0.005351f, -0.003955f, -0.000265f, -0.024390f, +0.014423f, -0.027866f, -0.012621f, - -0.006770f, -0.004974f, -0.014990f, +0.009439f, -0.017529f, +0.000458f, +0.005210f, -0.012823f, -0.012380f, +0.006048f, - +0.003762f, -0.002426f, -0.010486f, +0.013083f, -0.014682f, +0.001639f, +0.000314f, -0.007300f, +0.000675f, +0.001100f, - +0.005360f, -0.003501f, +0.000326f, -0.010897f, -0.001172f, +0.002017f, -0.002989f, +0.000126f, +0.003422f, +0.004249f, - -0.001749f, -0.000806f, +0.002938f, +0.001341f, +0.002661f, +0.002133f, -0.000130f, -0.002961f, -0.002481f, -0.000593f, - -0.002062f, -0.004057f, -0.001334f, +0.003364f, +0.000022f, -0.002447f, +0.001137f, -0.000217f, +0.002001f, -0.001642f, - -0.000007f, +0.000835f, -0.002719f, +0.003519f, +0.001135f, +0.000198f - }, - { - -0.003569f, +0.072683f, +0.011752f, +0.014637f, -0.013239f, -0.012070f, -0.007541f, -0.006754f, -0.000309f, +0.013250f, - +0.002155f, +0.019523f, +0.001087f, +0.000956f, -0.061191f, +0.051701f, +0.008441f, -0.013205f, -0.022764f, -0.011292f, - +0.042790f, -0.018564f, -0.026402f, +0.016613f, -0.056795f, +0.007648f, +0.043565f, -0.014042f, -0.040266f, +0.000370f, - -0.009875f, +0.004821f, +0.004101f, -0.009637f, -0.000144f, -0.016138f, -0.011128f, +0.004740f, -0.009427f, -0.005598f, - -0.000312f, +0.009135f, +0.013732f, -0.010150f, +0.001250f, +0.007043f, -0.000173f, -0.002796f, +0.007841f, +0.002721f, - +0.004117f, -0.006580f, -0.006143f, +0.004521f, +0.002555f, +0.007925f, +0.006507f, +0.004244f, +0.004357f, +0.001410f, - +0.001030f, +0.003370f, -0.000424f, +0.000915f, +0.005336f, +0.000775f, +0.005440f, -0.002799f, -0.001821f, +0.000881f, - -0.002646f, -0.001869f, -0.003655f, -0.003332f, -0.003460f, -0.005529f, +0.003896f, -0.001681f, +0.000260f, +0.002312f, - +0.000661f, -0.005992f, -0.001561f, -0.005087f, +0.001143f, +0.001357f, -0.001965f, +0.004422f, +0.001121f, -0.001419f, - +0.000304f, -0.000595f, -0.004998f, +0.000330f, -0.002541f, +0.002708f - }, - { - +0.032924f, -0.108289f, +0.030183f, -0.016501f, -0.008445f, +0.021362f, -0.014022f, -0.017797f, -0.007686f, +0.033555f, - -0.015302f, -0.004810f, +0.015518f, +0.014284f, +0.054385f, +0.000096f, +0.013359f, -0.013976f, +0.010824f, -0.008197f, - -0.022984f, -0.011956f, -0.012152f, +0.019100f, +0.002486f, -0.002699f, +0.017226f, -0.013573f, -0.000429f, -0.008010f, - -0.004320f, -0.012837f, +0.008176f, +0.008373f, +0.016388f, +0.009662f, -0.012347f, -0.024062f, +0.009195f, -0.015805f, - +0.010238f, -0.005638f, -0.008890f, -0.002505f, -0.010561f, -0.000904f, +0.000709f, +0.012889f, +0.002948f, +0.000190f, - +0.003971f, +0.005344f, -0.016474f, +0.002423f, -0.009055f, +0.005301f, -0.002252f, +0.000607f, -0.007092f, -0.008791f, - +0.001033f, +0.005051f, -0.003843f, +0.001845f, -0.001320f, +0.002535f, -0.000173f, -0.001859f, -0.002508f, +0.003625f, - +0.003403f, +0.000692f, -0.001808f, +0.004619f, +0.003696f, +0.001458f, -0.005104f, -0.001429f, -0.003824f, -0.002663f, - -0.000867f, +0.003361f, -0.000535f, +0.002052f, -0.000117f, +0.001958f, -0.005088f, +0.001486f, +0.000388f, -0.001656f, - -0.000179f, +0.001500f, -0.000197f, -0.003135f, +0.002232f, +0.002172f - }, - { - -0.001229f, -0.116353f, -0.009447f, +0.011987f, +0.000065f, -0.002468f, -0.016378f, +0.007616f, -0.014156f, +0.013628f, - -0.015270f, +0.030260f, +0.003632f, +0.002344f, +0.108295f, +0.029637f, -0.010245f, -0.019538f, +0.006831f, +0.026687f, - -0.012659f, -0.013751f, +0.024303f, -0.017081f, +0.012529f, -0.004175f, -0.017037f, -0.035774f, -0.033732f, -0.013657f, - +0.017156f, -0.001631f, +0.018480f, -0.013004f, -0.001772f, -0.006999f, -0.021572f, -0.005404f, -0.007484f, +0.002767f, - -0.012445f, -0.013279f, +0.014169f, -0.002109f, -0.018485f, -0.003872f, +0.008307f, -0.006116f, -0.005092f, +0.012073f, - -0.010634f, -0.006720f, -0.000271f, +0.000157f, -0.008268f, +0.004652f, +0.003420f, +0.003989f, -0.001285f, +0.002622f, - +0.003619f, +0.003161f, -0.003624f, +0.004470f, +0.007247f, +0.005294f, -0.005198f, +0.000267f, -0.002405f, +0.006996f, - +0.001598f, -0.003344f, +0.005496f, -0.005538f, +0.002462f, +0.002695f, +0.002028f, +0.003259f, +0.001063f, -0.003078f, - -0.000220f, -0.005369f, -0.001786f, -0.001928f, +0.002737f, -0.001042f, -0.001066f, -0.000061f, +0.000063f, +0.002455f, - +0.000675f, -0.001008f, -0.002261f, -0.000650f, -0.000792f, +0.002264f - } - }, - { - { - +0.034785f, -0.411669f, -0.048043f, -0.071052f, -0.004066f, -0.010813f, -0.005819f, +0.018226f, -0.034854f, -0.025564f, - +0.002220f, +0.014767f, -0.004543f, +0.007869f, -0.010034f, +0.003300f, +0.011210f, -0.000874f, +0.007211f, -0.001749f, - -0.022683f, -0.008788f, +0.009064f, +0.003528f, +0.018164f, -0.000419f, -0.005182f, +0.011555f, -0.002720f, -0.009322f, - -0.001750f, -0.009508f, +0.011250f, -0.018684f, -0.000987f, -0.002452f, +0.003924f, -0.006085f, +0.012819f, -0.002272f, - +0.004725f, +0.005397f, -0.000623f, -0.009970f, +0.000822f, -0.007647f, +0.010033f, -0.000071f, +0.005577f, -0.007286f, - +0.000693f, -0.015233f, -0.007614f, -0.002114f, -0.003198f, +0.004099f, +0.003779f, +0.000557f, +0.000095f, +0.010357f, - -0.001046f, -0.000619f, -0.000554f, +0.000948f, -0.004153f, +0.006517f, +0.001787f, +0.003859f, -0.003291f, -0.004603f, - +0.001222f, -0.002444f, -0.000271f, +0.003897f, +0.002857f, +0.000866f, -0.004840f, -0.002097f, +0.000536f, +0.003207f, - -0.001316f, +0.003577f, -0.000885f, +0.002590f, -0.000724f, -0.001439f, +0.000588f, +0.000831f, +0.001375f, +0.004320f, - +0.002853f, -0.001915f, -0.000488f, -0.000852f, +0.000433f, -0.000428f - }, - { - -0.001293f, +0.039184f, +0.033845f, -0.023080f, -0.001203f, +0.002494f, +0.002470f, +0.003664f, +0.006774f, +0.000528f, - -0.002734f, +0.014951f, -0.004755f, -0.024213f, +0.011222f, +0.011645f, -0.049156f, +0.038523f, -0.004897f, -0.036733f, - +0.020967f, -0.003999f, +0.000193f, +0.000885f, -0.014571f, +0.030496f, +0.006874f, -0.001203f, -0.006070f, +0.010909f, - +0.009568f, -0.005017f, -0.001563f, -0.010868f, +0.000822f, +0.000695f, -0.001171f, -0.010094f, -0.008291f, +0.003749f, - -0.002978f, -0.011433f, -0.001170f, +0.000764f, +0.000780f, +0.005414f, -0.005465f, +0.011287f, +0.000536f, +0.004727f, - -0.004843f, -0.002845f, +0.011654f, -0.001390f, +0.002173f, -0.002665f, +0.001006f, -0.001602f, +0.001947f, -0.002830f, - +0.004997f, -0.001189f, +0.007149f, +0.005784f, +0.001965f, +0.006399f, -0.009858f, -0.006075f, +0.000689f, +0.002675f, - +0.002574f, +0.006824f, -0.000904f, +0.002302f, -0.004802f, +0.000604f, -0.001453f, +0.001574f, +0.002651f, -0.000946f, - -0.001675f, -0.000021f, -0.001234f, -0.000380f, -0.001375f, +0.000258f, +0.002995f, -0.002174f, -0.001890f, -0.000501f, - +0.003905f, -0.002183f, +0.000707f, +0.000417f, +0.000056f, +0.003048f - }, - { - +0.007699f, +0.135897f, -0.055987f, +0.033564f, +0.008070f, +0.007987f, +0.000232f, +0.017649f, +0.016668f, +0.008725f, - -0.015682f, +0.024810f, -0.023390f, -0.050247f, +0.016096f, +0.019654f, +0.011281f, -0.011224f, +0.005452f, +0.009495f, - -0.007045f, +0.000154f, +0.022755f, +0.010446f, +0.018267f, -0.003697f, +0.016266f, +0.010157f, -0.014198f, +0.000988f, - +0.006283f, -0.004817f, +0.024579f, -0.003454f, -0.012686f, -0.007672f, +0.011828f, +0.005514f, -0.007737f, +0.002452f, - +0.002608f, -0.008904f, +0.003757f, +0.009641f, +0.009093f, +0.015652f, +0.003466f, +0.015100f, -0.002967f, +0.000514f, - +0.004683f, -0.002866f, -0.002103f, -0.000580f, +0.009962f, +0.001190f, -0.000600f, -0.003229f, -0.002579f, -0.009529f, - +0.000384f, -0.003536f, -0.002508f, -0.002156f, -0.005764f, -0.000745f, -0.006269f, -0.005266f, +0.000927f, +0.001595f, - +0.005977f, -0.000161f, -0.003903f, -0.004407f, -0.000824f, +0.002710f, -0.001065f, +0.001518f, +0.002798f, -0.000194f, - +0.001100f, +0.000927f, -0.000619f, +0.002081f, +0.000006f, +0.001621f, -0.001493f, +0.001301f, +0.003944f, -0.000506f, - +0.000375f, -0.000139f, -0.002778f, -0.001512f, +0.000901f, -0.000254f - }, - { - -0.058877f, -0.266754f, +0.013659f, +0.007192f, -0.016488f, -0.002834f, -0.003073f, -0.007451f, -0.009730f, +0.030302f, - +0.022208f, +0.014122f, -0.003134f, -0.004552f, +0.003938f, +0.003301f, -0.014594f, +0.033658f, +0.010905f, -0.019931f, - -0.003977f, +0.012135f, +0.006173f, -0.014937f, -0.000881f, +0.012679f, -0.021616f, +0.004482f, +0.002045f, +0.014634f, - -0.005495f, +0.004638f, -0.003402f, +0.000526f, -0.009682f, +0.011468f, -0.003823f, -0.008275f, -0.014323f, +0.006273f, - +0.019618f, -0.002659f, +0.005495f, -0.004030f, -0.003796f, -0.002649f, +0.015312f, -0.004529f, -0.002502f, +0.007516f, - +0.000676f, +0.005374f, -0.002651f, -0.002214f, -0.003674f, +0.002034f, +0.005708f, -0.002771f, -0.006190f, +0.004416f, - +0.000938f, +0.000616f, -0.004850f, -0.003408f, -0.000281f, -0.000570f, -0.000929f, +0.006157f, -0.001826f, +0.003144f, - +0.003189f, -0.000510f, +0.001813f, +0.000138f, -0.000154f, +0.000022f, -0.000743f, -0.002785f, +0.002102f, +0.005415f, - +0.001261f, -0.001142f, +0.001840f, -0.000292f, +0.000301f, -0.001733f, -0.002314f, +0.000039f, +0.001215f, -0.000360f, - +0.001079f, +0.004013f, +0.001621f, -0.001532f, -0.000671f, -0.001315f - }, - { - +0.003979f, +0.007773f, -0.011999f, +0.001830f, -0.002923f, -0.000717f, -0.002854f, +0.001927f, -0.007204f, -0.000662f, - +0.002563f, +0.012974f, +0.024198f, +0.026366f, -0.014580f, -0.031638f, -0.023689f, -0.011094f, +0.116810f, -0.040100f, - -0.026321f, -0.018644f, +0.017582f, +0.003961f, -0.017723f, +0.008276f, +0.003244f, -0.023939f, -0.019767f, +0.015274f, - -0.000055f, +0.013827f, +0.014385f, +0.003272f, +0.001255f, -0.016321f, +0.022532f, -0.000400f, -0.012905f, +0.005230f, - +0.000245f, +0.000863f, +0.003055f, -0.006377f, -0.021759f, +0.018589f, +0.008106f, -0.000510f, +0.009264f, -0.001297f, - -0.007813f, +0.000705f, -0.001987f, +0.002012f, -0.016000f, -0.003275f, -0.001996f, +0.000372f, +0.004254f, +0.009952f, - +0.002688f, -0.003453f, +0.001386f, -0.008523f, -0.002697f, +0.004441f, +0.000805f, +0.001206f, -0.006290f, +0.001173f, - +0.004887f, +0.004249f, +0.001963f, +0.000810f, +0.000204f, -0.004990f, +0.006743f, +0.000727f, -0.000171f, +0.003112f, - +0.006191f, +0.001550f, +0.002526f, -0.005204f, -0.002105f, +0.001707f, +0.003820f, +0.002092f, -0.000657f, -0.001305f, - -0.002839f, +0.000990f, +0.000468f, -0.000726f, -0.002974f, -0.000136f - }, - { - -0.097957f, -0.401080f, +0.019526f, -0.072362f, -0.005722f, +0.003428f, -0.012562f, -0.007211f, +0.021261f, -0.007603f, - +0.027713f, -0.011745f, +0.012201f, -0.008775f, +0.015873f, +0.032750f, -0.003393f, +0.011050f, +0.015769f, -0.021288f, - +0.012196f, +0.020865f, +0.002499f, -0.006816f, +0.000671f, +0.005528f, -0.005459f, +0.007744f, +0.004307f, +0.007159f, - -0.010696f, -0.017727f, -0.018041f, +0.004400f, -0.009728f, +0.003215f, +0.011284f, +0.013230f, +0.001689f, -0.009888f, - -0.001339f, +0.001778f, -0.011285f, -0.014767f, -0.007911f, -0.001298f, -0.001266f, -0.006422f, -0.009305f, -0.001541f, - -0.005102f, +0.005548f, +0.006761f, -0.002319f, -0.002685f, +0.001547f, -0.002443f, +0.002081f, -0.008278f, +0.000670f, - +0.003098f, -0.002444f, -0.001347f, -0.000103f, +0.001201f, -0.001501f, +0.001924f, +0.000339f, -0.002033f, -0.000199f, - +0.003473f, +0.000944f, +0.003180f, -0.004349f, +0.000732f, -0.002863f, -0.001250f, +0.000745f, -0.002574f, +0.000015f, - -0.001505f, +0.002113f, +0.000250f, -0.000887f, +0.000710f, -0.001408f, +0.002321f, +0.001215f, +0.003953f, -0.001081f, - +0.000381f, -0.002860f, -0.000567f, -0.000148f, -0.000723f, -0.001994f - }, - { - +0.000466f, +0.007609f, +0.006585f, -0.001491f, -0.003936f, -0.001401f, +0.000428f, -0.001666f, -0.001953f, +0.001979f, - +0.006658f, +0.003031f, +0.009586f, +0.009072f, +0.032523f, -0.013270f, -0.018076f, +0.022359f, +0.005929f, -0.017369f, - +0.025000f, +0.007259f, +0.020606f, -0.016630f, +0.020423f, +0.029491f, -0.000029f, -0.010769f, +0.015392f, +0.009119f, - -0.016490f, -0.016986f, +0.026344f, +0.025965f, -0.008674f, -0.017868f, -0.008609f, -0.010395f, -0.021875f, +0.007033f, - -0.001287f, -0.004843f, -0.006768f, -0.003406f, -0.007182f, -0.000057f, +0.003172f, -0.012072f, +0.007756f, -0.000894f, - +0.004415f, +0.009260f, -0.004924f, -0.001939f, +0.006942f, -0.000259f, -0.001022f, +0.004682f, -0.001514f, -0.005875f, - -0.001406f, +0.006389f, -0.005842f, -0.005635f, +0.000790f, +0.001917f, -0.000816f, +0.004934f, -0.001457f, -0.001276f, - +0.000347f, +0.000741f, +0.002184f, -0.001447f, +0.000947f, +0.000779f, +0.001301f, +0.002367f, +0.001245f, +0.000785f, - +0.000911f, -0.004669f, +0.000117f, +0.000102f, -0.000410f, +0.001779f, +0.001118f, -0.000742f, +0.000723f, -0.000222f, - -0.002409f, -0.004254f, -0.002153f, +0.000122f, -0.002381f, +0.000564f - }, - { - -0.072515f, +0.596569f, +0.025947f, -0.069445f, +0.025489f, -0.008953f, -0.025128f, -0.004660f, -0.003404f, +0.030305f, - -0.009581f, +0.002189f, +0.001874f, -0.034434f, +0.012993f, +0.025900f, -0.012674f, +0.039040f, -0.037145f, -0.018999f, - +0.007883f, -0.013913f, +0.013027f, -0.002879f, -0.001013f, +0.001372f, +0.004972f, +0.009126f, +0.008791f, +0.019539f, - +0.008864f, +0.010149f, -0.002993f, +0.004134f, +0.006864f, +0.023985f, +0.017573f, -0.010622f, -0.006059f, +0.009405f, - -0.004461f, +0.012520f, -0.002483f, +0.018114f, +0.001689f, +0.018918f, +0.004025f, -0.004422f, -0.007119f, +0.000785f, - +0.002772f, +0.013707f, +0.004151f, -0.014921f, -0.000276f, -0.003990f, -0.000920f, +0.013972f, -0.005301f, -0.000748f, - +0.000729f, +0.001851f, +0.003848f, +0.000253f, +0.005764f, -0.001289f, +0.001725f, -0.002784f, +0.001323f, +0.002724f, - -0.003212f, -0.000574f, +0.003253f, -0.004442f, +0.003442f, +0.001472f, +0.000625f, +0.003271f, +0.001136f, -0.001624f, - -0.001424f, +0.001716f, +0.000298f, +0.000154f, +0.000474f, -0.002412f, -0.000286f, +0.001576f, -0.002363f, -0.000835f, - -0.000233f, +0.001028f, +0.001131f, -0.002289f, +0.000415f, +0.000449f - }, - { - -0.000204f, -0.017212f, +0.000793f, +0.007960f, -0.005617f, +0.000641f, -0.000293f, -0.004302f, +0.007590f, +0.003527f, - -0.008787f, +0.013626f, -0.014980f, +0.007595f, +0.030818f, -0.047245f, -0.022460f, -0.009840f, -0.009901f, -0.010417f, - -0.010738f, -0.034700f, -0.040831f, +0.041559f, +0.026445f, +0.031560f, +0.008579f, +0.012615f, +0.004740f, +0.001666f, - +0.021021f, -0.029466f, -0.018331f, +0.005577f, +0.004082f, +0.006172f, +0.002001f, -0.009007f, +0.020873f, -0.006612f, - -0.007470f, +0.006058f, -0.003542f, +0.000304f, -0.007591f, -0.002592f, -0.005793f, +0.006840f, +0.006624f, +0.003912f, - -0.005288f, -0.007691f, -0.001413f, +0.007885f, +0.010512f, -0.001106f, +0.006672f, -0.003877f, +0.005112f, -0.009716f, - +0.007086f, -0.001545f, -0.007034f, +0.000026f, +0.005363f, +0.004881f, -0.001381f, -0.002037f, -0.001507f, +0.001586f, - +0.001668f, -0.001048f, -0.003573f, +0.003512f, +0.001687f, +0.004963f, -0.003719f, -0.000067f, -0.002312f, -0.004009f, - +0.002514f, -0.001541f, -0.002849f, +0.000646f, +0.000042f, -0.001205f, -0.000008f, +0.001165f, -0.000520f, -0.000673f, - -0.001020f, +0.002573f, -0.001217f, +0.000262f, +0.002526f, +0.000448f - }, - { - -0.057835f, -0.034718f, +0.043570f, -0.023371f, -0.000680f, +0.062572f, -0.037908f, -0.041711f, -0.022169f, -0.022024f, - -0.004249f, -0.005590f, +0.009538f, +0.021694f, +0.001228f, +0.023930f, +0.020965f, +0.028952f, +0.009755f, +0.025065f, - +0.008384f, +0.002273f, -0.014236f, -0.020876f, +0.007363f, +0.004391f, -0.000870f, -0.024444f, -0.004137f, -0.005359f, - -0.025063f, -0.002917f, -0.004000f, -0.014557f, -0.002765f, +0.005990f, -0.004949f, +0.011344f, +0.008806f, -0.004114f, - +0.005755f, +0.010762f, -0.004571f, +0.004040f, -0.006901f, -0.002414f, -0.003377f, +0.010123f, +0.001901f, +0.002497f, - -0.005537f, -0.005656f, +0.003999f, +0.008961f, -0.004025f, +0.008057f, -0.008615f, -0.000352f, +0.001662f, -0.002600f, - +0.008745f, +0.007726f, +0.002863f, +0.000060f, -0.000616f, +0.004965f, -0.003001f, +0.001170f, +0.000631f, -0.001656f, - +0.005877f, -0.004800f, -0.000007f, -0.002515f, +0.004242f, +0.002881f, -0.002913f, +0.003823f, +0.000994f, +0.001578f, - -0.001846f, +0.001580f, +0.002609f, -0.000463f, -0.001791f, +0.000554f, +0.000544f, -0.001739f, +0.001190f, -0.002086f, - +0.002469f, -0.000522f, +0.000911f, +0.000143f, +0.000654f, -0.000149f - }, - { - -0.003110f, +0.093411f, -0.009615f, -0.005521f, -0.025424f, -0.001179f, -0.015762f, +0.004470f, -0.013559f, -0.011932f, - -0.008876f, -0.010073f, -0.021996f, +0.020425f, -0.023243f, -0.034277f, +0.026666f, -0.029870f, +0.040146f, +0.044435f, - -0.002001f, -0.026367f, +0.027399f, -0.028136f, -0.000460f, +0.004721f, -0.005306f, -0.010034f, +0.012338f, +0.014467f, - -0.014406f, -0.002411f, -0.005087f, +0.001029f, +0.012901f, +0.017652f, -0.007048f, -0.012631f, -0.011188f, -0.007668f, - +0.009264f, +0.003377f, -0.009664f, +0.004068f, -0.017950f, -0.000104f, +0.007525f, +0.002615f, +0.009140f, +0.005608f, - +0.001491f, -0.009041f, -0.003886f, +0.008571f, +0.005676f, +0.002823f, +0.003675f, -0.007173f, +0.006407f, +0.004116f, - -0.003383f, -0.002068f, -0.001722f, -0.002463f, -0.003070f, -0.000678f, -0.006077f, -0.003745f, +0.001571f, -0.002043f, - +0.006263f, +0.000196f, +0.001345f, +0.000267f, +0.002086f, +0.001097f, +0.003530f, +0.002480f, -0.000476f, +0.002446f, - -0.003085f, +0.000427f, +0.001598f, -0.000236f, +0.002205f, +0.000396f, +0.001596f, +0.002216f, +0.001865f, +0.001064f, - +0.000390f, -0.002191f, +0.000146f, +0.002194f, -0.002345f, +0.001653f - }, - { - +0.059475f, -0.123507f, -0.023820f, +0.011616f, -0.002404f, +0.043116f, -0.011360f, -0.018106f, -0.013553f, +0.009126f, - +0.053924f, -0.005397f, +0.034502f, -0.024910f, -0.017109f, -0.014243f, -0.005824f, +0.026454f, -0.032274f, -0.028472f, - +0.003038f, +0.005600f, +0.009206f, -0.015857f, -0.016476f, -0.002183f, -0.023039f, +0.006396f, -0.001950f, -0.033417f, - -0.004710f, +0.019935f, +0.003722f, -0.010986f, +0.005192f, +0.023179f, -0.017782f, +0.021960f, -0.011109f, -0.008585f, - -0.000975f, -0.005872f, -0.025796f, +0.015190f, -0.005582f, +0.005615f, +0.000886f, -0.004792f, -0.006858f, +0.004199f, - -0.000538f, +0.002781f, -0.010588f, +0.008980f, -0.005268f, +0.007055f, -0.001657f, -0.001103f, +0.002374f, -0.003614f, - -0.003755f, -0.004907f, +0.001211f, -0.005219f, +0.004036f, -0.000133f, -0.002754f, -0.000160f, +0.003976f, +0.006217f, - +0.001933f, +0.001630f, +0.000549f, -0.000195f, +0.000222f, +0.000347f, -0.000689f, -0.002173f, -0.003831f, -0.001292f, - +0.003146f, -0.001275f, -0.002956f, +0.000723f, -0.001230f, -0.000274f, -0.000222f, -0.001728f, +0.001017f, -0.002511f, - +0.002041f, +0.001635f, -0.001220f, +0.002588f, -0.000573f, +0.000720f - }, - { - +0.005524f, +0.063126f, -0.008834f, +0.006740f, -0.008531f, -0.001339f, -0.004167f, -0.002037f, -0.001597f, +0.001697f, - -0.006916f, +0.006410f, -0.005950f, -0.015378f, -0.091573f, +0.010342f, -0.027504f, -0.005887f, -0.004863f, -0.016601f, - +0.018551f, +0.053136f, +0.021345f, +0.021232f, -0.025779f, -0.002039f, +0.016523f, -0.011786f, -0.031498f, -0.001396f, - +0.016250f, +0.000385f, +0.000880f, -0.001362f, -0.001281f, -0.014773f, -0.027119f, +0.006725f, -0.003237f, -0.002042f, - +0.008129f, +0.007876f, +0.006028f, -0.022180f, -0.011171f, +0.000404f, -0.006301f, -0.007841f, +0.009277f, +0.002162f, - +0.010037f, -0.007461f, -0.011771f, -0.005721f, -0.004230f, +0.000989f, -0.000969f, +0.000033f, -0.001014f, -0.006580f, - -0.006150f, +0.004750f, -0.000945f, -0.002871f, +0.004559f, -0.004419f, -0.004079f, -0.005650f, +0.000336f, +0.000721f, - -0.000835f, -0.001756f, -0.002027f, -0.002697f, -0.000960f, -0.001188f, +0.006269f, -0.000091f, +0.002989f, +0.001186f, - +0.000686f, -0.000526f, +0.002657f, -0.004156f, +0.001152f, +0.001025f, -0.001310f, +0.003247f, +0.000337f, +0.000925f, - +0.001298f, +0.000274f, -0.004402f, +0.000505f, -0.003932f, +0.000350f - }, - { - -0.003571f, -0.164858f, +0.016401f, -0.022974f, -0.017958f, +0.021946f, -0.021610f, -0.009809f, -0.010155f, +0.001963f, - -0.018275f, -0.002938f, +0.019488f, -0.006977f, +0.006131f, -0.002795f, +0.000249f, -0.030284f, +0.003154f, +0.027671f, - +0.015202f, +0.011324f, -0.010826f, +0.006885f, +0.007566f, +0.004901f, +0.001812f, -0.023035f, -0.005449f, -0.006892f, - -0.005038f, -0.016119f, -0.009830f, -0.012103f, +0.015117f, +0.016876f, +0.003376f, -0.011479f, +0.015911f, -0.013574f, - +0.017643f, +0.018160f, +0.004360f, -0.007991f, -0.008141f, +0.001369f, +0.001200f, +0.006548f, -0.007924f, -0.014117f, - -0.000616f, +0.008998f, -0.010099f, +0.002033f, -0.006839f, +0.007774f, -0.004766f, +0.005381f, +0.004724f, -0.005042f, - -0.001698f, +0.004013f, -0.008315f, +0.003127f, -0.000198f, -0.002778f, -0.005264f, -0.002538f, -0.006938f, +0.002863f, - +0.005044f, +0.003017f, -0.000427f, -0.002854f, -0.009234f, -0.004094f, -0.002882f, +0.005447f, +0.001373f, +0.000499f, - +0.003007f, +0.003682f, -0.002091f, +0.000801f, +0.001142f, +0.001347f, -0.007057f, +0.001558f, +0.002664f, -0.001415f, - +0.000568f, +0.001894f, -0.000265f, -0.002112f, +0.000216f, +0.000395f - }, - { - -0.000373f, -0.112908f, -0.002404f, +0.000624f, -0.016536f, +0.001305f, -0.007131f, +0.004081f, -0.021309f, +0.010816f, - -0.020714f, +0.021344f, +0.009835f, -0.019338f, +0.066981f, +0.023916f, -0.032394f, -0.034077f, -0.004129f, +0.022643f, - +0.010299f, -0.012085f, +0.006255f, -0.021281f, +0.008668f, -0.013184f, -0.010839f, -0.017714f, -0.012799f, -0.022033f, - -0.006802f, -0.016686f, +0.014994f, -0.012108f, -0.004545f, +0.005877f, -0.005585f, -0.006098f, -0.000748f, +0.027171f, - -0.000730f, -0.018381f, +0.012030f, +0.001664f, -0.005985f, -0.005400f, -0.008495f, -0.010080f, +0.004610f, +0.016847f, - -0.003837f, -0.003895f, +0.001980f, +0.008444f, +0.001217f, +0.007748f, -0.000652f, -0.004964f, -0.006970f, -0.000192f, - +0.006555f, +0.003675f, -0.011743f, -0.005323f, -0.000986f, +0.003985f, -0.006644f, -0.002322f, -0.001523f, +0.005294f, - +0.001174f, -0.007333f, +0.001373f, -0.007705f, +0.002749f, +0.005145f, -0.000369f, -0.001582f, +0.000181f, +0.003524f, - +0.000265f, -0.004071f, +0.003132f, -0.002554f, +0.001466f, -0.001177f, +0.001017f, +0.000441f, -0.001214f, -0.000008f, - +0.002971f, +0.002386f, +0.000019f, -0.000730f, -0.002038f, +0.000243f - } - }, - { - { - -0.024666f, -0.386495f, +0.006687f, -0.040235f, -0.016992f, -0.009858f, -0.001441f, -0.008552f, +0.009319f, -0.021058f, - -0.020651f, +0.014678f, -0.011593f, +0.011300f, -0.032193f, +0.013898f, +0.007787f, +0.000868f, -0.002547f, +0.000682f, - -0.014983f, +0.004092f, -0.004359f, +0.000901f, +0.019922f, -0.007792f, +0.007555f, +0.012273f, -0.003594f, -0.003502f, - -0.001065f, -0.009232f, -0.008214f, -0.009473f, -0.014336f, +0.019323f, -0.002657f, +0.006253f, -0.002080f, -0.006923f, - +0.012878f, -0.004245f, +0.008278f, -0.005737f, -0.001753f, -0.004939f, +0.001413f, -0.002900f, +0.007030f, -0.001425f, - -0.008522f, -0.012145f, +0.000777f, -0.017413f, +0.008776f, +0.002333f, -0.010337f, -0.000922f, +0.010440f, +0.009947f, - -0.006379f, +0.009091f, -0.005979f, +0.002290f, -0.008000f, +0.008549f, +0.002491f, +0.001281f, -0.001612f, -0.002192f, - -0.001464f, +0.003137f, -0.000875f, +0.002894f, +0.000132f, +0.001824f, -0.002800f, -0.002332f, +0.002021f, +0.000251f, - +0.001193f, -0.000793f, +0.000456f, +0.002440f, -0.001988f, +0.000668f, -0.000874f, +0.001099f, +0.004113f, +0.002324f, - -0.000732f, +0.001862f, -0.003454f, -0.000520f, +0.002088f, -0.000575f - }, - { - +0.001678f, +0.087913f, -0.002715f, -0.028931f, +0.000898f, +0.003788f, +0.000793f, +0.012403f, -0.000100f, +0.008515f, - +0.004081f, +0.010387f, -0.003950f, -0.005575f, -0.013550f, -0.022437f, -0.017553f, +0.016652f, -0.022768f, -0.016601f, - +0.027645f, +0.015964f, -0.034196f, +0.018904f, +0.009876f, -0.003359f, +0.013717f, -0.013714f, -0.000007f, +0.016062f, - -0.004250f, +0.008619f, -0.010043f, -0.003028f, +0.002565f, +0.005133f, -0.008022f, -0.002286f, -0.022032f, +0.002964f, - +0.003309f, +0.000679f, -0.000171f, -0.006284f, -0.006169f, +0.000080f, +0.006964f, +0.002039f, +0.008553f, -0.002347f, - -0.007344f, +0.008443f, +0.007494f, +0.000680f, +0.000587f, +0.001189f, -0.003831f, +0.001708f, -0.002403f, -0.001345f, - +0.003185f, +0.003318f, +0.003378f, +0.003921f, +0.007458f, -0.000583f, -0.001972f, -0.005491f, -0.001422f, +0.003382f, - +0.008463f, -0.000611f, +0.002262f, -0.001872f, -0.002501f, +0.000698f, +0.000505f, +0.000516f, +0.003444f, -0.001804f, - -0.000286f, -0.001800f, +0.001254f, -0.002004f, -0.000140f, -0.001274f, +0.002971f, -0.000874f, +0.000332f, -0.001089f, - +0.000666f, -0.001069f, -0.000847f, +0.003214f, -0.000767f, +0.001108f - }, - { - -0.008126f, +0.014413f, +0.062132f, +0.024371f, +0.015977f, +0.004152f, -0.005633f, +0.025904f, -0.006054f, +0.023788f, - -0.022709f, +0.035594f, -0.045069f, -0.019556f, +0.000440f, +0.014842f, -0.006824f, +0.014324f, -0.004422f, +0.005167f, - +0.002277f, +0.003701f, +0.015531f, +0.014909f, +0.019328f, -0.001853f, +0.019692f, +0.007850f, -0.018342f, -0.006983f, - +0.003484f, +0.020341f, +0.012141f, +0.002055f, -0.022595f, +0.010275f, +0.000176f, +0.001515f, -0.016301f, +0.009321f, - +0.002401f, +0.001334f, +0.000882f, +0.003420f, +0.010984f, +0.014143f, +0.004300f, +0.009434f, -0.000687f, +0.005453f, - -0.004087f, +0.002319f, -0.002688f, +0.001064f, +0.006612f, +0.001532f, -0.001126f, -0.007184f, -0.003968f, -0.005921f, - -0.001070f, -0.003288f, -0.001603f, -0.004702f, -0.002299f, +0.000392f, -0.006672f, -0.003874f, -0.002038f, +0.003409f, - +0.004147f, +0.002547f, -0.002926f, -0.004948f, -0.004370f, -0.001237f, +0.001876f, -0.000014f, -0.000491f, +0.004651f, - -0.001302f, +0.003744f, -0.000974f, +0.000372f, +0.000909f, +0.002505f, -0.001702f, +0.000722f, +0.003096f, +0.000592f, - -0.002265f, +0.000317f, +0.000030f, -0.002842f, -0.000516f, +0.000295f - }, - { - +0.039081f, -0.417729f, +0.010658f, -0.006518f, +0.001294f, +0.004577f, -0.000992f, -0.002848f, -0.021015f, +0.039857f, - +0.004511f, +0.030536f, -0.015381f, +0.007827f, +0.010780f, +0.011113f, -0.019920f, +0.053937f, -0.022392f, -0.011747f, - +0.009812f, +0.011525f, -0.011564f, -0.009778f, +0.000034f, +0.011466f, -0.009361f, -0.003044f, +0.003578f, -0.000070f, - +0.000228f, +0.012352f, -0.008735f, -0.008402f, -0.002334f, -0.001971f, +0.012736f, -0.014648f, -0.010980f, -0.005784f, - +0.015998f, +0.008904f, +0.006666f, -0.015317f, -0.001155f, +0.010589f, +0.006268f, +0.003959f, -0.005233f, +0.011902f, - -0.004375f, +0.000579f, +0.000487f, -0.000116f, -0.006743f, -0.000508f, +0.004682f, +0.000684f, -0.001574f, +0.002334f, - +0.000509f, -0.002565f, -0.002106f, -0.003915f, +0.001412f, -0.001865f, -0.001294f, +0.001302f, +0.002591f, +0.004153f, - +0.001269f, -0.001608f, +0.000890f, +0.004161f, -0.002157f, +0.000789f, -0.001792f, +0.000399f, +0.002312f, +0.005233f, - -0.000369f, -0.000784f, +0.000297f, +0.000845f, -0.000336f, -0.001079f, -0.000425f, -0.003660f, +0.001166f, +0.001316f, - +0.000678f, +0.002753f, +0.000336f, -0.000136f, -0.001333f, -0.002888f - }, - { - -0.004323f, -0.004016f, +0.000971f, -0.006452f, +0.005123f, -0.003191f, +0.002536f, -0.001727f, -0.009944f, +0.004404f, - -0.009296f, +0.017069f, +0.019455f, +0.040826f, -0.053813f, -0.026552f, -0.009768f, +0.081513f, +0.026532f, -0.019763f, - -0.062393f, -0.000202f, +0.010923f, -0.003506f, -0.007284f, -0.035096f, +0.018681f, +0.000164f, -0.013684f, +0.017180f, - -0.007645f, +0.006125f, +0.014850f, -0.006542f, +0.010413f, -0.019253f, +0.018255f, +0.004810f, -0.016906f, +0.012084f, - -0.010976f, +0.008189f, +0.003417f, -0.014600f, -0.008980f, +0.014020f, +0.012896f, -0.006650f, -0.000565f, +0.008030f, - -0.010415f, -0.001629f, +0.003652f, -0.003859f, -0.010008f, -0.008488f, +0.005377f, -0.004097f, +0.006177f, +0.010500f, - -0.002131f, +0.000134f, -0.002248f, -0.004962f, -0.002866f, +0.000846f, -0.000219f, +0.001445f, +0.000020f, -0.001056f, - +0.000853f, +0.006821f, +0.002824f, +0.001322f, -0.003389f, -0.002173f, +0.005061f, -0.000798f, +0.003813f, +0.002971f, - +0.005450f, -0.000343f, +0.000531f, -0.000246f, -0.004324f, +0.001387f, +0.004230f, +0.001286f, +0.000400f, -0.003110f, - +0.000677f, -0.000489f, +0.001962f, -0.002409f, -0.000836f, -0.000905f - }, - { - +0.065601f, -0.637273f, +0.012054f, -0.044495f, -0.013553f, +0.000470f, +0.007210f, -0.023572f, +0.004878f, +0.025837f, - +0.009134f, +0.015775f, -0.034500f, +0.008309f, +0.023953f, +0.013748f, +0.014680f, +0.004055f, +0.000793f, -0.009136f, - +0.010788f, -0.003709f, +0.017596f, -0.007406f, -0.008242f, +0.014921f, +0.004974f, -0.017645f, +0.007809f, +0.004681f, - -0.013302f, -0.004322f, -0.012779f, -0.003677f, -0.003098f, -0.006366f, +0.011774f, +0.019096f, -0.004074f, -0.003252f, - +0.000220f, -0.009416f, -0.007089f, -0.005660f, -0.010716f, -0.010399f, -0.002605f, -0.005402f, -0.006543f, -0.013583f, - +0.007443f, +0.001858f, +0.005073f, -0.005376f, +0.003617f, -0.006208f, +0.004199f, -0.001456f, -0.002389f, -0.005561f, - +0.004949f, +0.001435f, +0.001785f, -0.004329f, -0.001332f, -0.000944f, +0.002321f, -0.001919f, +0.003173f, -0.001341f, - +0.000109f, -0.000140f, +0.001890f, +0.000270f, -0.003634f, -0.000508f, -0.004105f, +0.002716f, +0.000694f, -0.001371f, - -0.002762f, +0.001114f, -0.001076f, +0.001482f, +0.002285f, -0.001651f, +0.000787f, +0.003072f, +0.002978f, +0.000238f, - -0.003129f, +0.000527f, -0.003010f, -0.001101f, +0.000601f, -0.001799f - }, - { - -0.001901f, +0.020607f, -0.001957f, -0.005210f, -0.001221f, +0.000580f, -0.000637f, +0.002229f, -0.002924f, +0.000017f, - +0.006910f, -0.000584f, +0.008141f, -0.000227f, +0.027789f, -0.016763f, +0.012305f, +0.008640f, -0.000736f, -0.000458f, - +0.037498f, -0.016448f, +0.044017f, -0.012413f, +0.010407f, +0.005154f, +0.036338f, -0.020758f, +0.013573f, +0.016547f, - -0.018513f, -0.013748f, +0.012245f, +0.042294f, -0.020094f, -0.010616f, -0.013625f, -0.010879f, -0.014703f, +0.001860f, - -0.002511f, -0.009947f, -0.001361f, -0.011998f, -0.000189f, -0.004033f, +0.009479f, -0.015049f, +0.003931f, +0.001872f, - +0.005573f, +0.003098f, +0.004262f, -0.004329f, +0.002509f, -0.005194f, +0.006391f, +0.006039f, -0.010732f, -0.001217f, - -0.000067f, +0.004831f, +0.001059f, -0.007040f, -0.002256f, +0.007499f, +0.000617f, +0.001798f, -0.001363f, -0.002123f, - +0.000690f, +0.003667f, -0.004122f, +0.005542f, +0.000226f, -0.002409f, +0.002896f, -0.000448f, +0.001973f, -0.000128f, - +0.002779f, -0.001328f, -0.001181f, -0.001597f, +0.001705f, -0.000224f, +0.000270f, -0.000266f, +0.001791f, -0.003242f, - -0.002368f, -0.000935f, -0.002324f, -0.001272f, -0.001002f, -0.000961f - }, - { - +0.122423f, +0.455486f, -0.057501f, -0.017818f, -0.017865f, -0.006469f, -0.030858f, +0.002695f, -0.009453f, +0.036123f, - -0.005119f, -0.028295f, +0.011743f, -0.003208f, -0.039873f, +0.048102f, -0.004267f, +0.008875f, -0.002765f, -0.015379f, - -0.017580f, -0.007778f, -0.002557f, +0.028783f, -0.002710f, +0.007823f, -0.000142f, +0.000011f, +0.004009f, +0.030009f, - +0.001270f, +0.009049f, -0.006274f, +0.020790f, +0.003391f, +0.042114f, -0.006572f, -0.002076f, -0.004917f, -0.003487f, - +0.012930f, -0.006033f, +0.002251f, +0.002585f, +0.024175f, +0.002499f, +0.014188f, -0.008934f, -0.006398f, -0.002151f, - +0.003728f, +0.007459f, -0.006579f, -0.007722f, -0.005467f, +0.004580f, +0.001509f, +0.007487f, -0.001466f, -0.000198f, - -0.002546f, +0.003279f, +0.001584f, +0.005938f, -0.000330f, -0.001392f, +0.002398f, -0.001253f, +0.001757f, +0.001316f, - -0.001368f, +0.000067f, +0.000270f, +0.000397f, +0.002334f, -0.000518f, +0.001678f, +0.001227f, +0.002297f, +0.000449f, - -0.002014f, +0.001151f, -0.001210f, +0.001678f, -0.001787f, -0.003108f, +0.000878f, +0.000746f, -0.000813f, -0.001429f, - -0.001293f, +0.003555f, -0.002117f, -0.000282f, +0.000034f, +0.000737f - }, - { - -0.002263f, +0.011633f, -0.022926f, +0.004336f, -0.002292f, -0.000259f, -0.001303f, +0.002400f, +0.000885f, +0.000625f, - -0.007916f, +0.012581f, -0.000383f, +0.014907f, +0.024886f, -0.057794f, -0.016990f, -0.024389f, -0.002715f, +0.008211f, - -0.042446f, -0.012662f, -0.028546f, +0.037054f, +0.025465f, -0.006707f, +0.039244f, -0.013426f, -0.007090f, +0.045020f, - -0.015450f, -0.007609f, -0.026353f, +0.010709f, +0.012445f, -0.012755f, +0.009925f, +0.001011f, +0.010917f, +0.008651f, - -0.005176f, -0.002229f, +0.003555f, -0.011812f, +0.009615f, -0.005130f, -0.006643f, -0.000109f, +0.010896f, +0.007537f, - -0.013307f, +0.002672f, -0.001572f, +0.005672f, +0.004832f, +0.007248f, -0.002119f, -0.001583f, -0.000354f, -0.002598f, - +0.003903f, -0.000728f, -0.008120f, -0.003676f, +0.009498f, +0.001703f, +0.002600f, -0.001742f, -0.002952f, +0.000316f, - -0.000021f, +0.001213f, -0.006102f, +0.004575f, +0.002902f, +0.001551f, -0.001976f, -0.001319f, -0.001236f, -0.001286f, - -0.002041f, -0.000413f, -0.000390f, -0.001683f, -0.002024f, -0.000147f, +0.003038f, +0.001305f, -0.002163f, -0.000939f, - -0.000492f, -0.000547f, +0.000822f, +0.001591f, +0.000299f, +0.001004f - }, - { - +0.062779f, -0.090473f, -0.018356f, -0.027490f, -0.005714f, +0.062389f, -0.022414f, -0.056810f, -0.013805f, -0.021671f, - +0.003927f, -0.013616f, +0.008570f, +0.014733f, +0.005370f, +0.000561f, +0.034996f, +0.014868f, +0.049282f, +0.008777f, - +0.006697f, -0.000662f, -0.012829f, -0.033884f, +0.003959f, +0.008280f, -0.018644f, +0.007739f, -0.024593f, -0.005316f, - -0.003968f, -0.012531f, -0.005259f, -0.012369f, -0.000082f, -0.010154f, +0.010498f, +0.023774f, -0.001920f, +0.001192f, - -0.000161f, -0.002341f, -0.009161f, +0.011021f, -0.012181f, +0.003732f, +0.008247f, -0.003116f, +0.006627f, -0.004193f, - +0.002565f, -0.001917f, -0.000950f, -0.004388f, +0.009756f, +0.002219f, -0.002358f, -0.003229f, -0.001066f, -0.006149f, - +0.016752f, +0.006133f, +0.007787f, -0.001467f, -0.007732f, +0.005231f, +0.001037f, +0.004273f, +0.001942f, -0.006017f, - +0.008122f, -0.002249f, -0.002344f, -0.000769f, +0.003109f, +0.007249f, -0.002507f, -0.003261f, +0.005605f, -0.002775f, - -0.001008f, +0.001493f, +0.003917f, +0.001210f, +0.000119f, -0.000432f, -0.002211f, -0.002002f, +0.001020f, -0.000810f, - +0.002647f, -0.000422f, +0.000035f, +0.002010f, -0.001195f, -0.000695f - }, - { - +0.001549f, +0.125030f, -0.047925f, -0.011397f, -0.006887f, +0.004146f, -0.013420f, -0.007283f, -0.010830f, +0.001878f, - +0.009072f, -0.011019f, -0.015671f, -0.015527f, +0.011079f, -0.047875f, -0.000848f, +0.006129f, +0.037911f, -0.004307f, - +0.023658f, -0.015034f, +0.012118f, -0.019566f, -0.002770f, +0.015785f, -0.013935f, -0.000059f, -0.004554f, +0.010594f, - +0.002332f, -0.007167f, -0.008206f, +0.004444f, +0.005057f, +0.022484f, -0.012264f, -0.008047f, -0.005950f, -0.001889f, - +0.002016f, +0.005588f, -0.007326f, +0.000054f, -0.015920f, +0.002199f, +0.006257f, +0.011163f, +0.007388f, +0.002371f, - +0.002868f, -0.013285f, +0.000930f, +0.002828f, +0.009139f, +0.002413f, +0.001777f, +0.000176f, +0.000818f, +0.000230f, - +0.002097f, -0.007417f, +0.003145f, -0.003400f, -0.001138f, -0.004587f, -0.003791f, -0.001707f, +0.002335f, +0.001691f, - +0.000599f, +0.000458f, +0.003924f, -0.001763f, +0.002103f, -0.000682f, +0.002584f, +0.001904f, -0.000482f, +0.002584f, - -0.001583f, +0.000122f, +0.001309f, -0.001818f, +0.003287f, -0.001007f, +0.002863f, +0.002800f, +0.002791f, +0.001961f, - -0.000417f, -0.002331f, -0.000688f, +0.000053f, +0.000716f, -0.000413f - }, - { - -0.083475f, +0.065419f, -0.013103f, -0.010836f, +0.050893f, -0.004935f, +0.015120f, -0.014167f, -0.035431f, +0.025618f, - +0.043999f, +0.017078f, +0.012862f, -0.002895f, -0.044253f, -0.002293f, -0.015284f, +0.020811f, -0.000183f, -0.036514f, - -0.013461f, +0.018902f, +0.004704f, -0.006867f, -0.030088f, -0.000279f, -0.013041f, -0.004147f, -0.002401f, -0.032089f, - -0.012157f, +0.016349f, +0.004069f, -0.000302f, -0.003173f, +0.017942f, -0.014978f, +0.017051f, +0.000287f, +0.000086f, - -0.006950f, -0.012311f, -0.000336f, +0.007926f, -0.012956f, +0.006767f, -0.004832f, -0.001830f, +0.003270f, -0.002596f, - +0.002300f, +0.008474f, -0.007354f, -0.008350f, +0.012328f, -0.002163f, -0.004212f, +0.005152f, -0.002596f, +0.001843f, - -0.007721f, -0.005648f, -0.003332f, +0.005441f, -0.001575f, +0.000465f, +0.002982f, -0.005486f, +0.003074f, +0.010230f, - -0.001060f, -0.000424f, +0.000103f, +0.001480f, +0.000255f, -0.000438f, -0.000487f, -0.002028f, -0.003272f, -0.000114f, - +0.004062f, +0.000742f, -0.002588f, -0.000055f, -0.000548f, -0.000074f, -0.000264f, -0.002532f, -0.000265f, -0.000938f, - +0.001100f, +0.001520f, -0.000450f, +0.000617f, -0.000724f, +0.000549f - }, - { - -0.005853f, +0.040145f, +0.012949f, +0.000004f, -0.004527f, -0.001268f, -0.002547f, +0.003346f, -0.002315f, -0.004366f, - -0.004426f, -0.005403f, -0.029191f, +0.029632f, -0.086853f, -0.025975f, -0.064973f, +0.007815f, +0.011397f, -0.010521f, - -0.010526f, +0.065624f, +0.033459f, -0.018518f, +0.025250f, -0.004649f, -0.002042f, +0.007768f, -0.021823f, -0.009788f, - +0.009524f, +0.002041f, +0.006398f, -0.001915f, -0.009035f, -0.004830f, -0.025296f, -0.013480f, +0.011852f, +0.005217f, - +0.005811f, +0.005099f, -0.006740f, -0.011284f, -0.009866f, -0.013872f, +0.007412f, -0.011775f, +0.008419f, -0.003802f, - +0.013524f, +0.000985f, -0.010306f, -0.009929f, -0.006035f, +0.001813f, +0.000642f, -0.002932f, -0.002002f, -0.005604f, - -0.007557f, +0.011468f, -0.004560f, -0.002500f, +0.000753f, -0.003922f, -0.002488f, -0.010150f, +0.006667f, -0.004288f, - -0.003024f, +0.002355f, -0.004673f, -0.001528f, +0.005353f, -0.000066f, +0.002189f, +0.000458f, +0.001852f, +0.003192f, - -0.001379f, +0.001007f, +0.000598f, -0.000514f, +0.002034f, -0.001138f, +0.000961f, +0.000232f, +0.002914f, +0.002263f, - -0.001662f, +0.002673f, -0.002359f, -0.004175f, -0.000875f, -0.001044f - }, - { - -0.032599f, -0.135270f, -0.000029f, -0.016348f, -0.000271f, +0.008431f, -0.018748f, +0.009049f, -0.004255f, -0.023578f, - -0.002348f, +0.004474f, -0.013726f, +0.016096f, -0.013357f, -0.019646f, -0.001416f, -0.007542f, -0.014970f, +0.038599f, - +0.007464f, +0.024722f, -0.002665f, +0.003240f, -0.007337f, +0.009601f, -0.015102f, +0.001940f, -0.005853f, -0.015483f, - -0.007184f, -0.013080f, -0.012006f, -0.010488f, +0.008846f, +0.012106f, +0.003049f, +0.005711f, +0.008471f, -0.001314f, - +0.006502f, +0.026268f, -0.002357f, -0.002060f, -0.008872f, +0.002613f, +0.010338f, -0.004431f, -0.009974f, -0.007463f, - -0.007955f, -0.001809f, +0.008197f, -0.008754f, -0.004770f, +0.006413f, -0.003569f, +0.010522f, -0.001456f, -0.003907f, - -0.001070f, +0.002681f, -0.001124f, -0.000512f, -0.000037f, -0.002974f, -0.002645f, -0.001566f, -0.007650f, +0.003161f, - +0.010550f, -0.002406f, +0.001752f, -0.006932f, -0.008601f, -0.002585f, -0.001667f, +0.002881f, +0.002377f, +0.002782f, - +0.004115f, +0.000096f, -0.000128f, +0.000281f, +0.001965f, -0.002587f, +0.000206f, -0.000602f, +0.001988f, -0.000408f, - +0.000704f, -0.000606f, +0.000935f, +0.000591f, -0.002191f, +0.001593f - }, - { - +0.002750f, -0.122959f, +0.012343f, -0.009775f, -0.011847f, +0.006572f, -0.002234f, -0.005788f, -0.010543f, -0.007661f, - +0.017668f, -0.009136f, +0.019113f, +0.039073f, -0.053653f, +0.021127f, -0.042692f, +0.009766f, -0.015340f, -0.002037f, - +0.059527f, +0.002481f, -0.020127f, -0.013588f, +0.000465f, -0.006454f, -0.028854f, -0.014780f, +0.012720f, -0.017826f, - +0.004488f, -0.032082f, -0.000315f, -0.009103f, -0.006794f, +0.031117f, -0.010856f, -0.021784f, +0.013044f, +0.022060f, - +0.000163f, -0.008631f, +0.005616f, -0.000792f, -0.000549f, -0.007052f, -0.012123f, -0.010349f, +0.010940f, +0.007751f, - +0.004338f, +0.001235f, +0.003046f, -0.005112f, +0.011336f, +0.005989f, +0.002107f, -0.008801f, +0.005193f, -0.005596f, - +0.002665f, +0.006418f, -0.010862f, -0.003222f, -0.005214f, -0.001904f, -0.002925f, +0.002123f, -0.000632f, +0.000677f, - +0.002592f, -0.001230f, -0.005716f, -0.002823f, -0.000315f, +0.001441f, +0.003446f, -0.002226f, -0.001297f, +0.001619f, - -0.000114f, +0.000576f, -0.001508f, -0.000082f, +0.001079f, -0.002758f, +0.000928f, +0.001959f, +0.000555f, -0.002180f, - +0.004782f, +0.000953f, +0.001821f, -0.001395f, -0.001853f, -0.003244f - } - }, - { - { - +0.007748f, -0.380502f, +0.008703f, -0.029205f, +0.004620f, +0.008134f, -0.005334f, -0.035598f, +0.007420f, -0.029125f, - -0.052226f, -0.001557f, -0.002282f, +0.019914f, -0.011544f, +0.007298f, -0.005602f, -0.006411f, -0.017291f, +0.005877f, - +0.001361f, +0.000585f, -0.019966f, -0.008099f, +0.021260f, +0.011714f, +0.010368f, -0.005635f, +0.000668f, +0.000621f, - +0.012667f, +0.010005f, -0.004915f, +0.000591f, +0.012196f, +0.027145f, -0.005756f, +0.009181f, -0.005720f, -0.009540f, - +0.005149f, -0.004753f, +0.013692f, -0.004352f, -0.002767f, -0.002247f, -0.001315f, -0.008960f, -0.002324f, -0.004540f, - -0.006518f, +0.000617f, +0.005887f, -0.008319f, +0.010266f, -0.006637f, -0.015072f, +0.003674f, +0.006010f, -0.001881f, - -0.010642f, +0.002975f, -0.003193f, +0.007824f, -0.005927f, +0.007449f, -0.002132f, -0.003636f, +0.002585f, +0.005067f, - +0.002271f, +0.004065f, -0.002532f, -0.000240f, -0.002226f, +0.001111f, -0.000594f, -0.000083f, +0.001689f, -0.002512f, - -0.001285f, -0.003383f, +0.000644f, +0.000275f, -0.005149f, +0.002608f, +0.002757f, -0.000214f, -0.000425f, -0.000949f, - -0.003527f, +0.002982f, -0.002091f, -0.001170f, +0.000612f, -0.000567f - }, - { - -0.001963f, +0.083076f, -0.007936f, -0.023951f, -0.000816f, +0.001427f, +0.004121f, +0.005754f, -0.005269f, +0.021350f, - +0.001449f, -0.000953f, +0.015304f, -0.007852f, -0.036678f, -0.018368f, -0.008269f, -0.000337f, -0.002552f, +0.006952f, - +0.002405f, +0.014277f, -0.034427f, +0.018997f, +0.036817f, +0.003209f, -0.015888f, -0.014861f, +0.000279f, -0.000864f, - -0.015947f, -0.000164f, -0.022739f, -0.013785f, -0.003145f, +0.015372f, +0.002072f, +0.006428f, -0.012057f, +0.009061f, - +0.010934f, +0.011863f, +0.003465f, -0.011608f, -0.017075f, -0.014289f, +0.007241f, +0.005698f, +0.006077f, -0.003615f, - -0.002247f, +0.009951f, +0.001420f, -0.001836f, +0.001882f, +0.002775f, +0.001568f, -0.003797f, -0.007568f, +0.003822f, - +0.001566f, +0.000872f, -0.000125f, -0.000475f, +0.001894f, -0.003149f, +0.005415f, +0.001086f, +0.001049f, +0.004462f, - +0.007306f, -0.004592f, +0.003454f, +0.000352f, -0.000195f, +0.000851f, -0.003321f, -0.004743f, -0.000567f, -0.001461f, - +0.001830f, -0.000556f, +0.000191f, -0.001519f, +0.001114f, -0.001534f, +0.002437f, -0.000697f, +0.000416f, -0.001748f, - -0.000282f, -0.000469f, -0.002988f, -0.000428f, -0.002876f, +0.000263f - }, - { - +0.007813f, -0.093511f, -0.027619f, +0.032803f, +0.009778f, -0.012335f, -0.015355f, +0.008146f, -0.012557f, +0.023386f, - -0.038248f, +0.034477f, -0.016661f, +0.005965f, +0.001946f, -0.006497f, +0.004169f, +0.034617f, -0.003691f, +0.020268f, - -0.012208f, -0.014254f, +0.011710f, +0.011330f, +0.010001f, -0.010729f, -0.004506f, +0.000084f, -0.011949f, -0.008234f, - +0.006862f, +0.021317f, +0.002752f, +0.018895f, -0.014336f, +0.009443f, -0.004486f, -0.000712f, -0.005579f, +0.009665f, - -0.008058f, +0.003058f, +0.001303f, -0.007648f, -0.004986f, +0.002842f, -0.001457f, +0.004421f, +0.004283f, +0.000420f, - -0.019706f, +0.003519f, -0.000583f, -0.007753f, -0.001586f, -0.003369f, -0.001699f, -0.000999f, -0.001696f, +0.000169f, - +0.000603f, -0.002327f, +0.000131f, -0.003278f, +0.002381f, +0.003292f, +0.003806f, +0.002543f, -0.003783f, -0.001423f, - -0.000439f, +0.003565f, -0.001907f, -0.003679f, -0.005777f, -0.006201f, +0.001662f, +0.000177f, -0.001388f, +0.001563f, - -0.003232f, +0.001479f, -0.002032f, -0.000019f, -0.000907f, +0.001098f, -0.000626f, +0.001273f, +0.001767f, -0.002519f, - -0.003007f, +0.000731f, +0.002737f, -0.001442f, -0.001537f, +0.000671f - }, - { - -0.000266f, -0.531127f, -0.022111f, -0.008110f, -0.009255f, +0.000456f, +0.012300f, +0.009552f, -0.024260f, +0.030971f, - -0.002201f, +0.033814f, +0.007887f, +0.016623f, +0.000052f, +0.016010f, -0.016781f, +0.033805f, -0.025766f, +0.026817f, - +0.027993f, -0.003173f, -0.012979f, -0.000567f, -0.002203f, +0.013200f, -0.007513f, -0.024287f, -0.014868f, -0.019603f, - -0.011560f, +0.007373f, -0.004686f, +0.007017f, +0.011477f, -0.002192f, +0.006690f, -0.013880f, -0.006339f, -0.015552f, - +0.009197f, +0.004352f, +0.005309f, -0.013264f, -0.004256f, +0.002163f, -0.007199f, +0.003840f, -0.004983f, +0.014057f, - +0.001087f, -0.000532f, +0.006470f, -0.001112f, -0.011714f, -0.003132f, +0.001543f, +0.000062f, +0.002400f, +0.000502f, - -0.000074f, -0.003958f, +0.000352f, +0.000802f, -0.000418f, -0.001520f, -0.001740f, -0.002167f, +0.003106f, +0.002295f, - +0.001258f, +0.003701f, +0.005037f, +0.003275f, -0.004218f, +0.001082f, +0.000838f, +0.002476f, +0.002767f, +0.003696f, - -0.000139f, -0.001721f, -0.000370f, +0.001778f, +0.000099f, -0.001175f, -0.000245f, -0.003124f, -0.001096f, -0.001516f, - -0.000477f, +0.000055f, -0.000872f, +0.000530f, +0.000522f, -0.000819f - }, - { - +0.004368f, -0.011829f, -0.013817f, -0.014503f, -0.001505f, +0.000012f, +0.005252f, -0.002813f, -0.015343f, -0.003941f, - -0.015872f, -0.002099f, -0.013702f, +0.013747f, -0.059528f, +0.021840f, +0.037151f, +0.017898f, -0.070423f, -0.014072f, - -0.025823f, +0.018771f, +0.000518f, +0.003265f, -0.006237f, -0.050405f, -0.003391f, +0.005015f, -0.000006f, +0.011851f, - +0.000062f, +0.005901f, -0.004697f, -0.010972f, +0.017508f, -0.011053f, +0.019465f, +0.005476f, -0.005760f, +0.013401f, - -0.007527f, +0.013707f, +0.010096f, -0.003300f, +0.010261f, +0.002927f, -0.012853f, -0.004397f, -0.003537f, -0.000109f, - -0.009716f, +0.002412f, +0.005685f, -0.003240f, -0.002769f, -0.001164f, +0.012824f, -0.006952f, -0.003217f, -0.003704f, - -0.011839f, +0.000444f, -0.000028f, -0.000423f, -0.002080f, +0.002251f, -0.000243f, -0.003900f, +0.000285f, -0.001754f, - -0.004296f, +0.003958f, +0.001522f, -0.004291f, -0.003207f, +0.002182f, +0.002030f, -0.004985f, +0.002903f, +0.002280f, - +0.001196f, -0.006774f, -0.001104f, +0.001093f, -0.003601f, +0.001085f, +0.001038f, -0.000337f, +0.000554f, -0.001272f, - +0.002176f, -0.001253f, +0.002334f, -0.000106f, +0.000528f, -0.001653f - }, - { - -0.004785f, -0.774263f, +0.000333f, -0.004082f, +0.007349f, +0.005431f, +0.016420f, -0.026273f, -0.009066f, +0.015795f, - -0.001212f, +0.009411f, -0.058099f, -0.012026f, -0.000257f, -0.000139f, +0.002524f, -0.014497f, -0.027103f, -0.021793f, - +0.015072f, -0.010001f, +0.016472f, -0.007709f, -0.003844f, +0.017960f, +0.007256f, -0.005017f, +0.009945f, -0.010088f, - -0.017998f, +0.005263f, -0.016065f, -0.004836f, +0.011866f, -0.002272f, -0.005194f, -0.002424f, -0.004080f, +0.009226f, - +0.008929f, -0.004020f, -0.001084f, +0.000226f, +0.001103f, -0.006295f, -0.005843f, -0.007392f, -0.004599f, -0.016237f, - +0.003054f, -0.000907f, +0.001750f, -0.009867f, +0.007669f, -0.000993f, +0.005028f, +0.002658f, -0.001000f, -0.005835f, - +0.001513f, +0.000350f, -0.000831f, -0.005745f, +0.003752f, -0.002364f, -0.002065f, +0.000462f, +0.005565f, -0.001860f, - -0.001500f, -0.003221f, -0.000029f, +0.000805f, -0.007384f, -0.000931f, -0.003165f, +0.005659f, +0.005422f, -0.000960f, - -0.002579f, -0.001536f, -0.002435f, +0.002822f, +0.001464f, -0.001285f, +0.000708f, +0.002601f, +0.000294f, -0.001880f, - -0.005645f, -0.000551f, -0.002315f, -0.000114f, +0.000168f, -0.000808f - }, - { - +0.000509f, +0.017308f, -0.018577f, -0.004870f, +0.004017f, +0.002572f, +0.000928f, +0.005503f, -0.000697f, -0.006604f, - -0.001731f, -0.015571f, -0.013936f, +0.000860f, +0.027900f, +0.003896f, +0.017512f, +0.017643f, +0.023298f, +0.016981f, - +0.015910f, -0.022714f, +0.020432f, -0.068851f, -0.002407f, -0.023621f, +0.032865f, +0.007904f, +0.014024f, +0.012020f, - -0.007196f, +0.002483f, -0.001215f, +0.011240f, -0.027537f, -0.003173f, -0.013133f, -0.004694f, +0.002253f, +0.008586f, - -0.002553f, -0.003976f, -0.003829f, -0.015222f, +0.005582f, +0.000436f, +0.013023f, -0.012477f, +0.003655f, +0.001090f, - +0.007654f, +0.002659f, +0.006145f, -0.003674f, +0.000253f, -0.006080f, +0.001918f, +0.002605f, -0.008643f, +0.008292f, - +0.007315f, +0.007628f, +0.005261f, -0.005783f, -0.004676f, +0.002823f, +0.001013f, +0.001960f, -0.000336f, -0.002572f, - -0.000566f, +0.000569f, -0.007503f, +0.004873f, -0.002467f, -0.002931f, +0.004612f, -0.001107f, -0.001171f, -0.004539f, - +0.001930f, +0.003387f, +0.001675f, -0.000497f, +0.001395f, -0.003329f, +0.001243f, -0.000117f, -0.000454f, -0.002789f, - -0.000524f, +0.001967f, +0.000892f, -0.000606f, -0.000634f, -0.001922f - }, - { - -0.155546f, +0.240132f, +0.075412f, -0.013544f, -0.015494f, +0.013591f, -0.013509f, +0.016810f, -0.008287f, +0.018399f, - -0.006611f, -0.018816f, +0.013938f, +0.012253f, -0.063384f, +0.016496f, -0.013535f, -0.007672f, +0.017927f, +0.005442f, - -0.004244f, +0.012358f, -0.002266f, +0.017936f, -0.001196f, +0.012107f, -0.011456f, +0.003694f, -0.004402f, -0.003103f, - -0.027128f, +0.004126f, -0.002355f, +0.015766f, -0.007520f, +0.032990f, +0.000270f, +0.011849f, -0.008254f, -0.008359f, - +0.006462f, -0.014907f, -0.007035f, -0.013100f, +0.008651f, -0.010026f, +0.009335f, -0.005860f, -0.008521f, -0.013406f, - -0.000676f, -0.001151f, -0.015969f, +0.003895f, -0.002098f, +0.002671f, +0.002799f, +0.001294f, -0.002422f, -0.000064f, - -0.008193f, -0.003561f, -0.004298f, -0.000388f, -0.005054f, -0.000747f, +0.003942f, +0.002768f, +0.002860f, +0.000231f, - +0.000558f, -0.001587f, -0.000610f, +0.003172f, -0.000804f, +0.000217f, +0.002259f, -0.001770f, +0.001615f, -0.000327f, - -0.002684f, -0.000335f, -0.003471f, -0.000498f, -0.000780f, +0.001511f, +0.001503f, -0.002892f, -0.002437f, +0.000162f, - -0.000135f, +0.002760f, -0.001563f, -0.001032f, -0.001288f, +0.000770f - }, - { - +0.000047f, +0.026466f, -0.022250f, +0.000659f, -0.000929f, -0.000332f, +0.003286f, -0.001743f, -0.006072f, +0.003589f, - -0.009487f, +0.012668f, +0.000243f, -0.039724f, -0.015478f, -0.007169f, +0.023377f, -0.015689f, -0.007157f, +0.029592f, - -0.021503f, +0.022657f, -0.005783f, +0.000534f, -0.026138f, -0.046188f, +0.028283f, -0.015734f, -0.009622f, +0.031964f, - -0.023479f, +0.004742f, -0.014930f, +0.012288f, +0.007643f, -0.013950f, +0.014936f, +0.009075f, +0.007945f, +0.014651f, - +0.003121f, +0.000263f, +0.011953f, -0.014383f, +0.010644f, +0.003214f, +0.000843f, +0.000271f, -0.000650f, +0.009278f, - +0.002367f, +0.006063f, +0.002561f, +0.006496f, -0.005250f, +0.001722f, -0.002624f, -0.002905f, -0.003515f, -0.000463f, - +0.005619f, +0.003692f, -0.004346f, -0.002259f, +0.009703f, +0.001451f, +0.003941f, +0.000728f, -0.002247f, -0.002154f, - -0.003721f, +0.002121f, -0.004814f, -0.001340f, -0.000410f, +0.000259f, -0.002599f, -0.001366f, +0.001663f, +0.004808f, - +0.002181f, +0.003662f, -0.000939f, -0.001504f, -0.003142f, -0.001274f, +0.003683f, +0.000870f, -0.001914f, -0.000545f, - +0.000210f, -0.000661f, +0.001102f, +0.000094f, -0.001006f, +0.001459f - }, - { - -0.065114f, -0.104685f, +0.099155f, -0.016424f, +0.006860f, +0.023243f, -0.031229f, -0.039433f, +0.004328f, -0.019762f, - +0.004552f, +0.004048f, +0.011320f, -0.008386f, -0.025816f, -0.020073f, +0.013014f, -0.009731f, +0.051808f, +0.020067f, - +0.014287f, -0.005259f, -0.011426f, -0.033741f, -0.002620f, +0.009855f, -0.006807f, +0.008773f, -0.024434f, -0.000285f, - +0.008192f, -0.016100f, -0.002665f, +0.001860f, -0.002511f, -0.010810f, +0.021710f, +0.019629f, -0.011043f, -0.001524f, - -0.013993f, -0.008815f, -0.010741f, +0.001051f, -0.014438f, +0.009342f, +0.010972f, -0.003987f, +0.008725f, -0.008216f, - +0.002746f, +0.002328f, -0.006329f, -0.010205f, +0.008828f, -0.000808f, -0.000104f, +0.000122f, +0.002548f, -0.002616f, - +0.015405f, -0.001766f, +0.002259f, -0.000737f, -0.010154f, -0.003035f, -0.001386f, +0.002769f, +0.001594f, -0.005422f, - +0.006112f, +0.004381f, +0.000812f, -0.003215f, -0.001993f, +0.001519f, -0.000118f, -0.003249f, +0.002115f, -0.002347f, - +0.000310f, +0.000848f, +0.002083f, +0.005226f, +0.004938f, +0.001132f, -0.003391f, -0.005872f, -0.003575f, +0.001092f, - +0.003716f, -0.002261f, -0.001301f, +0.002316f, -0.000624f, -0.001705f - }, - { - +0.000549f, +0.129850f, -0.028106f, +0.013465f, +0.001115f, +0.013913f, +0.010543f, -0.002024f, -0.005909f, +0.016182f, - +0.028899f, +0.023630f, +0.004479f, -0.032150f, +0.014136f, -0.036498f, -0.000545f, -0.004314f, -0.004145f, -0.042466f, - +0.019308f, -0.008438f, +0.001726f, -0.019619f, -0.008167f, +0.003175f, -0.017250f, -0.008435f, -0.014504f, +0.007299f, - +0.006121f, -0.011640f, -0.008782f, -0.003163f, -0.016809f, +0.001846f, -0.012216f, +0.001562f, +0.010944f, +0.023254f, - +0.021791f, +0.003789f, -0.016060f, -0.001825f, -0.007132f, +0.010047f, +0.009588f, +0.018481f, +0.004301f, -0.001919f, - +0.000011f, -0.006656f, +0.007791f, -0.000879f, +0.001383f, -0.009638f, -0.003814f, +0.003517f, +0.000332f, -0.000417f, - -0.002167f, -0.004536f, +0.011698f, +0.004469f, +0.006743f, -0.004759f, -0.007328f, +0.003371f, +0.005459f, -0.000839f, - -0.003556f, -0.002770f, +0.000447f, -0.003804f, -0.000194f, -0.003658f, -0.001601f, +0.001648f, -0.001052f, +0.001970f, - +0.002665f, -0.000592f, -0.001507f, -0.002170f, +0.000360f, -0.003565f, +0.000116f, +0.001113f, +0.000571f, +0.001038f, - +0.000085f, -0.001495f, -0.000714f, -0.002004f, +0.001238f, -0.001158f - }, - { - +0.066578f, +0.283561f, +0.020378f, +0.009391f, +0.058829f, +0.000965f, +0.032682f, +0.012347f, -0.011496f, +0.024795f, - +0.031521f, +0.018461f, +0.002102f, -0.012270f, -0.045436f, +0.015174f, -0.008181f, +0.013594f, -0.009706f, -0.027560f, - +0.001836f, +0.022199f, +0.001700f, +0.015674f, -0.021017f, -0.024794f, -0.025794f, +0.000808f, +0.008259f, -0.018214f, - -0.009738f, +0.006124f, +0.006501f, +0.009831f, -0.010998f, +0.011344f, -0.009081f, +0.014138f, +0.001787f, +0.007230f, - -0.002239f, -0.003934f, +0.007098f, +0.002202f, -0.015109f, +0.007785f, -0.010647f, -0.004132f, +0.012312f, -0.008016f, - -0.000355f, +0.009007f, -0.006910f, -0.011223f, +0.004945f, -0.014100f, -0.005457f, +0.005667f, -0.003838f, +0.000916f, - -0.002320f, +0.002825f, -0.000092f, +0.004045f, -0.006665f, +0.001485f, +0.005937f, -0.002555f, -0.003745f, +0.001808f, - -0.000589f, -0.002705f, -0.001281f, +0.004255f, +0.003349f, +0.003602f, +0.002849f, +0.001289f, +0.002161f, +0.000962f, - +0.000128f, +0.001047f, +0.002571f, +0.000814f, -0.000762f, +0.000684f, +0.001395f, +0.000728f, +0.001580f, -0.001040f, - +0.000109f, +0.000347f, -0.001960f, -0.000812f, -0.001938f, -0.000046f - }, - { - +0.005320f, -0.010365f, -0.037200f, -0.007186f, -0.014133f, -0.008982f, -0.001219f, +0.012845f, +0.004316f, -0.006906f, - -0.010308f, -0.015781f, -0.020118f, +0.022460f, -0.107968f, -0.016379f, -0.053075f, +0.001431f, +0.019925f, -0.008207f, - -0.036826f, -0.004091f, -0.013028f, -0.023333f, +0.016126f, +0.005109f, +0.030193f, +0.027040f, -0.000395f, -0.022616f, - -0.029492f, +0.001685f, +0.014850f, -0.006916f, -0.006079f, +0.016065f, -0.011758f, -0.020072f, +0.004110f, -0.002104f, - -0.001597f, +0.000388f, -0.006262f, -0.003701f, +0.000983f, -0.013233f, +0.005852f, -0.005884f, +0.017379f, -0.003849f, - +0.002605f, +0.001423f, +0.000639f, -0.003205f, -0.000354f, +0.008745f, +0.009159f, +0.004305f, +0.003635f, +0.004894f, - -0.002478f, +0.008862f, -0.008026f, -0.004232f, -0.001601f, -0.001813f, +0.000491f, -0.007535f, +0.005240f, -0.005464f, - -0.000807f, +0.005806f, -0.003682f, +0.002625f, +0.007760f, -0.001738f, -0.001940f, -0.001414f, -0.003135f, -0.001945f, - -0.000779f, +0.004737f, +0.002920f, -0.000008f, +0.002491f, -0.001156f, -0.000264f, -0.000653f, +0.005584f, +0.002590f, - -0.003436f, +0.001784f, -0.000522f, -0.002777f, +0.000729f, +0.000168f - }, - { - +0.059193f, -0.037419f, -0.032551f, -0.037083f, +0.006505f, +0.010121f, -0.007734f, +0.023427f, +0.013255f, -0.013440f, - -0.008161f, -0.012498f, -0.024382f, -0.013868f, -0.043011f, +0.014778f, +0.030078f, -0.019517f, -0.039344f, +0.018553f, - -0.002471f, +0.010231f, -0.002036f, +0.004485f, -0.010855f, -0.005201f, -0.025311f, +0.023356f, -0.002662f, -0.016467f, - +0.000333f, -0.013117f, -0.005206f, -0.010066f, -0.009946f, -0.003103f, +0.017715f, +0.024872f, -0.000330f, -0.007273f, - -0.003562f, +0.015286f, +0.002414f, +0.011335f, +0.003747f, +0.009398f, -0.001314f, -0.018000f, -0.012181f, -0.007852f, - -0.008633f, -0.000713f, +0.009369f, -0.008567f, -0.002436f, +0.007285f, -0.004244f, -0.000073f, -0.009001f, +0.002440f, - +0.005114f, +0.003900f, +0.002004f, +0.002299f, +0.005455f, +0.005548f, +0.007438f, +0.006304f, +0.002616f, +0.001159f, - +0.004141f, -0.004384f, +0.003427f, +0.000184f, -0.003722f, +0.001121f, -0.000135f, -0.003032f, +0.000615f, +0.004577f, - +0.003724f, +0.000033f, +0.000777f, +0.000852f, +0.001425f, -0.001516f, +0.002089f, -0.001464f, +0.003585f, +0.000724f, - -0.002480f, -0.003134f, +0.000443f, +0.000479f, -0.000625f, +0.001300f - }, - { - -0.004233f, -0.122761f, +0.030808f, +0.004093f, +0.003884f, +0.017486f, +0.015294f, -0.001084f, -0.012720f, -0.003760f, - +0.025510f, -0.015446f, +0.008878f, -0.011382f, -0.160912f, -0.033874f, +0.007808f, +0.067446f, +0.006253f, -0.020529f, - +0.076853f, +0.052536f, +0.012802f, +0.012193f, -0.007943f, -0.005350f, -0.016737f, -0.013600f, +0.024986f, +0.002328f, - +0.002766f, -0.024772f, -0.007838f, -0.009419f, -0.002842f, +0.022822f, -0.007841f, -0.015073f, +0.021280f, +0.006998f, - -0.007297f, -0.006812f, -0.007128f, -0.005979f, -0.008027f, -0.000641f, +0.002021f, +0.000392f, +0.004534f, +0.000311f, - +0.010921f, +0.007487f, +0.003988f, -0.009568f, +0.010649f, +0.006049f, +0.003623f, -0.003192f, +0.012932f, -0.002812f, - -0.004203f, +0.007025f, +0.001291f, +0.007630f, -0.002926f, -0.004130f, +0.000256f, +0.004621f, -0.001476f, -0.001715f, - +0.000633f, +0.003156f, +0.000642f, +0.000556f, -0.002416f, -0.000717f, +0.004548f, -0.003464f, -0.002930f, -0.003092f, - -0.003963f, +0.001809f, -0.002511f, -0.000928f, +0.000928f, -0.000616f, +0.000386f, +0.002886f, +0.002382f, -0.003327f, - +0.002612f, -0.000592f, +0.001709f, +0.000749f, +0.000530f, -0.001833f - } - }, - { - { - +0.000476f, -0.471869f, +0.059514f, -0.034048f, +0.014860f, -0.001417f, +0.010185f, -0.035296f, -0.003586f, -0.046250f, - -0.012974f, -0.028851f, -0.000595f, +0.004146f, +0.021353f, -0.004111f, -0.013998f, -0.006130f, -0.018504f, +0.004712f, - +0.007060f, +0.003540f, -0.017508f, +0.008009f, +0.003605f, +0.013601f, +0.000815f, -0.006392f, +0.008932f, -0.005452f, - +0.010649f, +0.005337f, -0.000425f, -0.002944f, +0.029511f, +0.008661f, +0.007039f, +0.000791f, -0.003631f, +0.003047f, - -0.008668f, +0.002019f, +0.007168f, +0.006785f, -0.016872f, +0.010470f, -0.009951f, -0.009277f, -0.005856f, -0.005983f, - -0.002389f, +0.006749f, -0.004285f, +0.006043f, +0.002508f, -0.006065f, -0.006967f, -0.002683f, +0.000281f, -0.003772f, - -0.003196f, -0.001096f, -0.000678f, +0.001587f, +0.003207f, +0.000011f, +0.001039f, -0.006323f, +0.004340f, +0.006755f, - -0.001756f, +0.002410f, +0.002239f, -0.003263f, -0.002082f, -0.000732f, +0.001317f, +0.001078f, -0.000257f, -0.000812f, - -0.004575f, -0.003291f, +0.003430f, -0.000652f, -0.003611f, +0.001189f, +0.002457f, +0.001709f, -0.002675f, -0.000792f, - +0.000161f, -0.001202f, -0.001174f, +0.000874f, -0.001554f, +0.000557f - }, - { - +0.001364f, +0.026236f, +0.016828f, +0.018540f, -0.023915f, +0.001762f, +0.000969f, +0.000846f, +0.006455f, +0.013700f, - -0.002605f, -0.002727f, +0.011139f, -0.013273f, -0.023577f, +0.010295f, -0.006856f, -0.026667f, +0.001423f, +0.023773f, - -0.008771f, -0.002508f, -0.002761f, +0.026240f, -0.008489f, +0.016619f, -0.020862f, +0.010585f, -0.010815f, -0.002040f, - -0.030248f, +0.003100f, -0.018230f, -0.007608f, +0.000065f, +0.001028f, +0.008480f, +0.014070f, -0.000354f, -0.003427f, - +0.008786f, +0.013353f, +0.003770f, -0.004954f, -0.017084f, -0.020809f, +0.010060f, +0.012545f, -0.001055f, -0.007591f, - +0.004636f, -0.003514f, +0.004385f, +0.000240f, +0.009417f, -0.001844f, +0.006690f, -0.008391f, -0.004094f, -0.001627f, - -0.001971f, +0.005985f, -0.002761f, -0.000047f, -0.000122f, -0.000890f, +0.000854f, +0.004180f, +0.004650f, +0.005314f, - +0.003216f, +0.002444f, -0.001328f, -0.002341f, +0.001613f, +0.000072f, -0.004000f, -0.003598f, -0.001508f, -0.001736f, - +0.000102f, +0.002042f, -0.002965f, +0.002222f, -0.000453f, -0.000082f, +0.000049f, +0.000987f, -0.001098f, -0.000374f, - -0.001112f, -0.001969f, -0.001499f, -0.001363f, -0.000451f, -0.000650f - }, - { - -0.007392f, -0.135388f, +0.010669f, +0.034504f, -0.002688f, -0.010270f, -0.006233f, -0.018644f, +0.015464f, -0.003054f, - -0.030668f, +0.043304f, -0.016371f, -0.011602f, +0.018123f, -0.003583f, +0.001449f, +0.048455f, +0.006879f, -0.002882f, - +0.009614f, -0.021418f, +0.012297f, +0.003391f, -0.006689f, +0.014805f, -0.028978f, +0.007129f, -0.007463f, -0.007233f, - +0.011520f, +0.023276f, -0.015584f, +0.019592f, -0.005185f, +0.002130f, -0.002215f, -0.005498f, +0.003642f, +0.007662f, - +0.001384f, -0.009234f, -0.006623f, -0.000170f, -0.004068f, -0.001054f, -0.003998f, +0.007725f, +0.003457f, -0.008523f, - -0.010032f, +0.001831f, -0.001951f, -0.000510f, -0.006114f, +0.000505f, -0.009346f, +0.003830f, -0.004920f, +0.003351f, - +0.003667f, -0.002262f, +0.001340f, -0.005936f, +0.001531f, +0.003929f, +0.006883f, +0.002321f, -0.004643f, +0.000104f, - +0.000740f, -0.003106f, +0.000862f, -0.002043f, -0.002217f, -0.005782f, +0.001627f, -0.004527f, +0.002547f, -0.000102f, - +0.001328f, -0.005334f, +0.000278f, +0.000315f, -0.000363f, -0.002618f, +0.000442f, +0.003647f, -0.000008f, -0.001681f, - -0.002699f, +0.000147f, +0.001651f, +0.000083f, -0.001253f, -0.000003f - }, - { - -0.044724f, -0.554975f, +0.026927f, -0.002478f, +0.001121f, +0.003608f, +0.008709f, -0.004480f, -0.014030f, +0.018693f, - +0.030381f, -0.002183f, +0.016405f, +0.020913f, -0.011419f, +0.007170f, -0.009364f, +0.019854f, -0.003597f, +0.032178f, - +0.013210f, -0.000472f, +0.003501f, -0.010991f, +0.005044f, +0.023034f, -0.023661f, -0.017015f, -0.026844f, -0.017207f, - -0.008545f, -0.003810f, +0.011568f, -0.001635f, +0.010375f, +0.009047f, -0.011474f, -0.002850f, -0.012069f, -0.013736f, - +0.020495f, +0.001654f, +0.005700f, -0.000051f, -0.019660f, -0.005808f, +0.000217f, -0.004175f, +0.008766f, +0.003264f, - +0.005354f, +0.003327f, -0.003033f, -0.001773f, -0.003038f, -0.004126f, +0.002160f, -0.005705f, +0.010554f, -0.003444f, - -0.000722f, +0.002059f, -0.002365f, -0.001254f, +0.000702f, -0.000312f, -0.001031f, +0.002886f, -0.001236f, +0.000371f, - +0.003821f, +0.003721f, +0.006195f, -0.002484f, +0.001228f, -0.001238f, +0.003429f, +0.001302f, +0.002412f, +0.001258f, - +0.001433f, -0.004497f, +0.000867f, +0.001911f, +0.000110f, -0.000107f, -0.001569f, +0.000155f, -0.003164f, -0.002119f, - -0.000133f, +0.000795f, -0.000429f, -0.000588f, +0.000199f, -0.000063f - }, - { - -0.003619f, -0.021674f, +0.000263f, -0.010916f, -0.003183f, +0.003368f, -0.002289f, -0.000037f, -0.010154f, -0.006166f, - -0.014519f, +0.001094f, -0.011088f, +0.008595f, -0.039962f, +0.025569f, +0.006959f, -0.064390f, +0.003424f, -0.025921f, - -0.005711f, +0.047889f, -0.050687f, +0.008846f, +0.010561f, -0.042087f, -0.016231f, +0.004445f, +0.009386f, +0.017259f, - -0.007751f, +0.030686f, -0.011999f, -0.028280f, +0.016060f, +0.013015f, -0.003740f, +0.008278f, +0.008265f, +0.002909f, - +0.007524f, -0.001277f, +0.011481f, +0.008498f, +0.011511f, -0.004901f, -0.016619f, -0.000255f, -0.000585f, -0.007511f, - +0.002115f, -0.000269f, +0.000711f, -0.002236f, +0.001962f, -0.001669f, +0.007662f, +0.001749f, -0.005988f, -0.010650f, - -0.005021f, -0.004280f, -0.000409f, +0.001135f, -0.001599f, +0.001558f, -0.001049f, -0.001321f, +0.000421f, -0.002480f, - +0.001765f, -0.003442f, +0.001609f, -0.002312f, -0.001522f, -0.001544f, +0.001526f, -0.002665f, +0.000464f, +0.002709f, - +0.001073f, -0.006020f, -0.000898f, -0.001521f, -0.003458f, +0.000942f, +0.000823f, +0.000552f, -0.001315f, +0.001125f, - +0.000673f, +0.001379f, -0.000116f, +0.001044f, -0.000016f, -0.001525f - }, - { - -0.063191f, -0.751861f, +0.027437f, +0.027727f, +0.003766f, +0.005213f, -0.015200f, +0.031318f, -0.019346f, -0.009709f, - +0.002233f, -0.001218f, -0.030874f, -0.010005f, -0.017170f, +0.021490f, -0.012439f, -0.029927f, -0.032167f, -0.018822f, - +0.015510f, +0.007440f, +0.008704f, -0.010573f, +0.004436f, +0.013052f, +0.007352f, +0.014106f, +0.002211f, -0.010228f, - -0.003038f, -0.002821f, -0.030417f, +0.001517f, +0.007128f, -0.003232f, -0.009229f, -0.007179f, +0.002461f, +0.000562f, - +0.017205f, +0.000721f, -0.004907f, +0.006240f, +0.006032f, -0.003448f, -0.014565f, +0.002606f, -0.006544f, -0.013590f, - +0.003909f, -0.003789f, +0.000257f, -0.003166f, +0.004313f, +0.005597f, -0.005576f, +0.006882f, -0.004417f, -0.000073f, - -0.004234f, +0.001491f, -0.002193f, -0.005050f, +0.007509f, -0.000989f, -0.003405f, +0.003492f, -0.001043f, +0.001415f, - -0.002889f, -0.002344f, -0.000616f, +0.000020f, -0.004428f, -0.001783f, -0.002813f, +0.004755f, +0.005854f, -0.002479f, - +0.000037f, -0.002030f, -0.000434f, +0.000571f, -0.001260f, +0.001503f, +0.001471f, +0.000236f, -0.000010f, -0.000954f, - -0.004218f, -0.002175f, -0.000683f, +0.000700f, -0.001970f, -0.000392f - }, - { - +0.000752f, -0.013472f, +0.004545f, +0.006139f, -0.001583f, +0.000041f, +0.002850f, +0.002193f, +0.005759f, +0.000690f, - -0.013901f, -0.005272f, -0.023976f, +0.029400f, -0.009585f, +0.077641f, -0.025086f, -0.003736f, +0.011198f, +0.038742f, - -0.012502f, -0.012004f, +0.045835f, -0.067383f, -0.020397f, -0.021082f, -0.002536f, +0.043201f, -0.012339f, -0.028213f, - +0.018023f, +0.017590f, +0.003220f, -0.008369f, -0.021580f, -0.002282f, -0.008937f, -0.002596f, +0.001899f, +0.002852f, - +0.003440f, -0.000430f, -0.004215f, -0.012664f, -0.002768f, +0.006761f, +0.010569f, -0.005066f, -0.002964f, +0.001761f, - +0.006010f, +0.003100f, +0.003897f, +0.004276f, -0.006225f, +0.000345f, -0.000979f, -0.003650f, -0.002258f, +0.010052f, - +0.009489f, +0.004737f, -0.000073f, -0.006014f, +0.000258f, -0.001939f, +0.003090f, -0.004445f, +0.005500f, +0.002962f, - -0.000228f, -0.006262f, -0.003751f, -0.000951f, -0.002187f, +0.000847f, +0.002037f, -0.000469f, -0.001483f, -0.005138f, - +0.003256f, +0.001209f, +0.000802f, +0.001983f, +0.000637f, -0.004986f, +0.002205f, -0.000454f, -0.000905f, -0.000751f, - +0.000801f, +0.000873f, -0.000058f, -0.000377f, +0.000843f, -0.002089f - }, - { - +0.162421f, -0.017866f, -0.061923f, -0.045119f, +0.007353f, +0.008691f, +0.013411f, -0.005908f, +0.005341f, -0.002797f, - -0.012615f, +0.014580f, -0.012146f, +0.021606f, -0.056014f, +0.005920f, +0.011526f, -0.004775f, -0.001382f, +0.001312f, - +0.004983f, +0.004687f, +0.011461f, +0.014334f, +0.010868f, -0.007830f, -0.004294f, +0.012080f, -0.002397f, -0.016087f, - -0.026387f, -0.000168f, +0.005564f, +0.001400f, +0.003774f, +0.014561f, +0.000250f, +0.020562f, -0.014489f, +0.008574f, - -0.009223f, -0.008892f, -0.013835f, -0.001299f, -0.003632f, -0.006005f, -0.000264f, +0.013764f, -0.018698f, -0.008410f, - +0.001169f, -0.001712f, -0.008181f, -0.002652f, -0.000323f, +0.004038f, +0.003207f, -0.004854f, +0.000708f, -0.000238f, - -0.003553f, -0.009717f, -0.005625f, -0.001253f, -0.006121f, -0.002104f, +0.003703f, +0.007285f, +0.001436f, -0.000746f, - +0.004938f, -0.003709f, -0.005132f, +0.004537f, -0.002218f, +0.002303f, +0.000904f, -0.002756f, +0.001687f, +0.000471f, - -0.002635f, -0.000879f, -0.003096f, -0.002354f, -0.000075f, +0.002746f, +0.000051f, -0.000496f, -0.001206f, -0.001620f, - +0.000563f, -0.000261f, +0.000398f, +0.000081f, -0.000998f, +0.000123f - }, - { - +0.002204f, -0.004513f, +0.008013f, -0.011380f, +0.008592f, +0.000650f, +0.004472f, -0.001717f, -0.004764f, -0.001698f, - -0.000797f, +0.003010f, +0.009900f, +0.023719f, -0.084536f, +0.019909f, -0.021236f, +0.009902f, -0.034089f, +0.012755f, - +0.032592f, +0.000337f, +0.019109f, -0.061518f, -0.005026f, -0.022297f, -0.025219f, +0.016216f, -0.006426f, +0.012138f, - +0.001322f, -0.017059f, +0.004865f, -0.003305f, +0.002404f, +0.006507f, +0.007116f, +0.004890f, +0.012285f, +0.018330f, - -0.010892f, +0.008436f, +0.010035f, -0.008788f, +0.000945f, +0.002943f, +0.004834f, +0.000316f, -0.001097f, +0.001453f, - +0.014132f, +0.000097f, +0.003066f, +0.005061f, -0.003096f, -0.000678f, +0.000315f, -0.006460f, +0.002943f, +0.003120f, - +0.001847f, -0.000256f, -0.005769f, +0.001074f, +0.008283f, -0.000472f, +0.006808f, +0.000166f, -0.000476f, -0.004402f, - -0.000831f, -0.002741f, -0.001923f, -0.000866f, +0.000042f, +0.000114f, -0.001696f, +0.000403f, +0.001574f, +0.002216f, - +0.003456f, +0.007235f, -0.005105f, -0.000685f, -0.001603f, -0.000235f, +0.000179f, +0.000672f, +0.001634f, -0.002105f, - -0.000337f, +0.001190f, +0.000263f, +0.000828f, -0.001969f, -0.000523f - }, - { - +0.063667f, -0.044585f, -0.125064f, +0.004212f, +0.029951f, -0.038334f, -0.001526f, -0.040749f, +0.002457f, +0.001205f, - +0.014113f, -0.005008f, -0.006937f, +0.000215f, -0.021194f, -0.018592f, -0.005650f, +0.010592f, +0.041188f, +0.015752f, - +0.015088f, -0.005090f, -0.001708f, -0.017222f, -0.015777f, +0.005652f, +0.023432f, -0.010467f, -0.019296f, -0.010560f, - +0.014360f, -0.024733f, +0.013099f, -0.003960f, -0.016843f, +0.002957f, +0.014937f, +0.016718f, -0.001086f, -0.010597f, - -0.020306f, -0.000821f, +0.000346f, -0.004137f, -0.009076f, +0.000832f, +0.010382f, -0.000453f, +0.003766f, -0.010936f, - -0.001809f, +0.010110f, -0.002477f, -0.008939f, +0.006283f, -0.004469f, -0.003854f, +0.004412f, +0.002300f, +0.003156f, - +0.010219f, -0.000771f, -0.003351f, -0.004248f, -0.000092f, -0.010544f, -0.003895f, +0.007743f, -0.003171f, -0.001666f, - +0.001569f, +0.006715f, -0.000583f, -0.002776f, -0.000368f, -0.001408f, -0.000344f, +0.001021f, -0.004237f, +0.001089f, - -0.000272f, +0.005260f, -0.001807f, +0.006605f, +0.003314f, +0.001036f, -0.003985f, -0.002366f, -0.003709f, +0.001476f, - +0.000801f, -0.000164f, -0.001891f, +0.000453f, +0.000719f, -0.002686f - }, - { - -0.002708f, +0.094942f, +0.012797f, +0.015648f, -0.001875f, -0.005386f, +0.022146f, -0.002463f, +0.011298f, +0.002902f, - +0.008489f, +0.028642f, +0.010246f, -0.033016f, +0.002470f, -0.011655f, -0.000246f, +0.009117f, -0.069777f, +0.017993f, - -0.010536f, -0.018937f, +0.009038f, -0.003868f, -0.010912f, -0.008087f, -0.009619f, -0.014682f, +0.001068f, -0.014073f, - +0.013608f, -0.024820f, +0.000505f, +0.008989f, -0.018097f, -0.008078f, -0.007091f, -0.005290f, +0.012927f, +0.023858f, - +0.015762f, -0.003775f, -0.003715f, -0.003213f, +0.003805f, +0.016215f, -0.003474f, +0.018097f, -0.002633f, +0.005392f, - -0.011533f, -0.000636f, +0.008992f, +0.002214f, -0.006352f, -0.012596f, -0.001569f, +0.002541f, -0.001091f, +0.010411f, - -0.010067f, -0.000550f, +0.010333f, +0.008473f, +0.001160f, +0.000732f, -0.009734f, +0.003438f, +0.002434f, +0.001469f, - -0.005887f, +0.000597f, -0.003443f, -0.001051f, -0.002943f, +0.000640f, -0.002585f, -0.000166f, +0.001638f, -0.002729f, - +0.004106f, +0.001834f, -0.005832f, +0.001544f, -0.002584f, +0.000444f, -0.001792f, -0.000605f, -0.000993f, +0.001806f, - -0.000999f, +0.000347f, +0.001630f, -0.003755f, -0.001097f, -0.000198f - }, - { - -0.011894f, +0.416049f, +0.031517f, +0.007649f, -0.012482f, +0.040351f, +0.039309f, +0.006705f, -0.002291f, +0.021310f, - +0.017917f, +0.021020f, +0.012202f, -0.001672f, -0.046574f, -0.003135f, +0.008358f, +0.005106f, -0.018633f, +0.003727f, - -0.019315f, +0.018387f, -0.010741f, +0.020240f, -0.023244f, -0.012914f, -0.019338f, -0.003135f, +0.003861f, -0.000208f, - -0.015881f, +0.007968f, +0.010815f, -0.000834f, -0.005159f, +0.006494f, +0.003163f, +0.006640f, -0.009271f, +0.003283f, - -0.004872f, +0.002765f, +0.016266f, -0.010344f, -0.011919f, +0.010051f, -0.016635f, -0.001118f, +0.019836f, -0.006890f, - -0.002567f, +0.003945f, -0.007165f, -0.004794f, -0.006239f, -0.012976f, -0.003994f, +0.000573f, +0.000228f, -0.007867f, - +0.004353f, +0.006730f, +0.000939f, -0.002598f, -0.002802f, +0.000669f, +0.000341f, +0.004289f, -0.003175f, -0.002465f, - -0.000640f, -0.003781f, +0.003219f, +0.003305f, +0.003027f, +0.001510f, +0.004342f, +0.001552f, +0.004570f, +0.000606f, - -0.000943f, -0.001514f, +0.004933f, +0.001191f, -0.000043f, +0.001429f, -0.000390f, +0.002400f, -0.000562f, -0.000237f, - +0.000935f, -0.002554f, +0.000078f, -0.001069f, -0.001474f, -0.000232f - }, - { - -0.004666f, -0.059332f, +0.008517f, -0.010636f, -0.000345f, -0.015383f, -0.000910f, +0.016294f, +0.003339f, -0.013755f, - -0.009081f, -0.010107f, -0.012720f, -0.017330f, -0.101563f, -0.010713f, -0.002612f, -0.008223f, +0.033849f, -0.030172f, - +0.017932f, -0.061289f, -0.024537f, +0.019743f, -0.023983f, +0.007652f, +0.042210f, +0.031045f, -0.021942f, -0.012272f, - -0.018468f, -0.007991f, +0.023639f, -0.028741f, +0.009856f, +0.002666f, -0.004878f, -0.015243f, -0.008749f, +0.003448f, - -0.002412f, +0.006896f, -0.006204f, +0.000320f, -0.001174f, -0.004121f, -0.001590f, +0.001021f, +0.003050f, +0.004922f, - -0.001392f, -0.003503f, +0.008233f, -0.001256f, -0.002459f, +0.009554f, +0.010047f, +0.005712f, +0.004603f, +0.009268f, - -0.004496f, -0.000067f, +0.006381f, -0.005140f, -0.006968f, +0.002924f, -0.001117f, -0.002379f, +0.000966f, -0.000767f, - -0.006469f, +0.004411f, +0.000798f, -0.000018f, +0.001992f, +0.002718f, -0.002729f, -0.001817f, -0.002184f, -0.003602f, - +0.000027f, +0.003164f, +0.004195f, -0.001980f, +0.000763f, +0.000785f, -0.000139f, +0.001364f, +0.002358f, +0.001663f, - -0.001551f, +0.000073f, -0.000322f, -0.001407f, +0.001518f, -0.001062f - }, - { - -0.061202f, +0.096577f, +0.018573f, -0.055294f, +0.027354f, -0.030821f, +0.015595f, +0.004201f, +0.005804f, +0.010874f, - +0.018114f, -0.039551f, -0.023853f, -0.048921f, -0.027186f, +0.032076f, +0.036688f, -0.014346f, -0.032660f, -0.003966f, - +0.000466f, +0.000925f, +0.009236f, -0.006495f, -0.001175f, -0.013075f, -0.013334f, +0.002635f, -0.001306f, +0.014595f, - -0.003500f, -0.018786f, -0.004849f, -0.013481f, -0.007056f, +0.008275f, +0.000893f, +0.015909f, -0.016741f, -0.005507f, - +0.021814f, -0.002530f, +0.003544f, +0.013511f, +0.012395f, -0.006667f, +0.001110f, -0.012685f, -0.013842f, -0.007370f, - -0.002433f, -0.003128f, +0.000226f, +0.000117f, +0.003086f, +0.001078f, +0.001229f, -0.005133f, -0.004589f, -0.001984f, - +0.007759f, +0.002772f, +0.003643f, -0.000762f, +0.005117f, +0.006665f, +0.008558f, +0.005759f, +0.008967f, +0.001113f, - -0.004826f, +0.003451f, -0.003437f, +0.001040f, +0.000215f, -0.000844f, +0.000554f, -0.003278f, +0.000570f, +0.003681f, - +0.001422f, +0.001426f, +0.003010f, +0.001819f, -0.000696f, +0.001688f, -0.000197f, -0.001708f, +0.001412f, -0.000056f, - -0.001033f, -0.001852f, +0.000148f, -0.000218f, -0.000066f, -0.001096f - }, - { - +0.005269f, -0.112397f, +0.015100f, +0.002170f, +0.018749f, +0.003585f, +0.011178f, -0.003185f, -0.011481f, +0.012932f, - +0.006058f, -0.004980f, +0.012829f, -0.095898f, -0.077875f, -0.054608f, +0.067222f, +0.030269f, +0.036693f, +0.010683f, - +0.004506f, +0.054638f, +0.020833f, +0.023412f, -0.015135f, +0.004341f, -0.025642f, -0.016149f, +0.025576f, -0.015381f, - -0.002572f, +0.001371f, -0.003209f, -0.005380f, +0.004491f, +0.002785f, +0.001522f, +0.007732f, -0.006073f, +0.007771f, - -0.007450f, -0.010263f, +0.001155f, +0.004396f, -0.021766f, -0.001464f, +0.004680f, +0.008984f, -0.005733f, -0.001923f, - +0.004991f, +0.006788f, +0.000015f, +0.005528f, +0.009198f, +0.004664f, -0.002340f, -0.003235f, +0.007053f, -0.000284f, - -0.004357f, +0.010048f, +0.005481f, +0.002292f, -0.000479f, -0.003759f, +0.005209f, +0.002968f, -0.005962f, -0.003390f, - +0.002378f, +0.002030f, +0.002481f, +0.000719f, -0.004221f, +0.001159f, +0.004084f, -0.002619f, -0.003029f, -0.002872f, - -0.000641f, -0.002916f, -0.001434f, -0.000205f, +0.000179f, +0.000707f, -0.000024f, +0.002229f, +0.000677f, -0.000869f, - -0.000690f, +0.000981f, -0.000534f, +0.001331f, +0.000302f, +0.001966f - } - }, - { - { - +0.001477f, -0.529576f, -0.053199f, -0.039469f, +0.003830f, -0.020725f, +0.008074f, -0.020852f, -0.008955f, -0.030849f, - +0.003223f, -0.048716f, -0.015634f, +0.010822f, +0.029039f, -0.022888f, -0.013475f, +0.003306f, -0.016872f, -0.016479f, - +0.001366f, +0.013446f, -0.015675f, +0.011088f, +0.002938f, +0.014042f, +0.002292f, +0.008369f, +0.003434f, -0.030162f, - -0.014724f, +0.002854f, +0.019295f, +0.002082f, +0.017811f, -0.003918f, -0.002076f, +0.008465f, +0.011500f, +0.004965f, - -0.009365f, -0.004603f, -0.010985f, +0.002678f, -0.019565f, +0.005051f, -0.004332f, -0.008361f, -0.007899f, -0.013092f, - -0.009019f, +0.004303f, -0.006875f, +0.004442f, -0.000532f, -0.007147f, -0.004520f, +0.000847f, -0.002175f, -0.002876f, - +0.008791f, +0.002817f, -0.004619f, -0.005542f, -0.002195f, +0.000634f, +0.004847f, -0.005464f, +0.000372f, +0.001310f, - -0.004101f, -0.001443f, +0.000781f, -0.002672f, -0.001913f, -0.001738f, +0.001262f, +0.001139f, +0.001133f, +0.002845f, - -0.000098f, +0.000545f, +0.003761f, -0.001500f, -0.002651f, +0.001099f, +0.001280f, +0.001416f, -0.001107f, +0.001353f, - +0.000922f, -0.000167f, +0.000073f, +0.001462f, -0.000654f, +0.002199f - }, - { - +0.000433f, -0.022774f, -0.027920f, +0.031290f, -0.002948f, -0.002339f, -0.003491f, -0.002869f, -0.009706f, -0.012065f, - -0.021819f, -0.007039f, +0.025867f, -0.000961f, -0.008427f, +0.027188f, -0.001326f, -0.008983f, -0.017711f, +0.003392f, - -0.000220f, -0.011009f, +0.005201f, +0.014444f, -0.052730f, +0.021130f, +0.003252f, +0.034142f, +0.005778f, +0.007460f, - -0.018104f, +0.012219f, -0.001540f, -0.000788f, +0.009144f, -0.001732f, +0.014510f, +0.013502f, -0.003263f, -0.003501f, - +0.000273f, +0.010205f, +0.004807f, +0.000704f, +0.003140f, -0.005513f, +0.006615f, +0.000064f, -0.007822f, -0.010731f, - -0.000062f, -0.005927f, +0.005014f, -0.000933f, +0.005829f, -0.012468f, -0.000884f, -0.002948f, +0.008886f, +0.003629f, - -0.003112f, +0.001240f, -0.003696f, +0.003006f, -0.002133f, -0.001419f, +0.001639f, +0.004225f, +0.001897f, -0.000308f, - +0.002011f, +0.004127f, -0.007510f, -0.007134f, +0.001805f, +0.001655f, -0.000495f, +0.000742f, -0.000116f, -0.000103f, - +0.000447f, +0.000537f, -0.002153f, +0.003869f, +0.000631f, +0.000956f, -0.000019f, -0.000039f, -0.000954f, +0.001538f, - -0.001081f, -0.002236f, +0.000330f, +0.000403f, -0.000361f, -0.000878f - }, - { - +0.006181f, -0.115485f, -0.003486f, -0.008989f, -0.026763f, -0.004978f, -0.004790f, -0.024002f, +0.012985f, +0.011634f, - -0.014775f, +0.016822f, -0.032228f, -0.004046f, +0.040310f, +0.016231f, +0.012509f, +0.038893f, -0.009906f, +0.005116f, - +0.025975f, -0.002616f, +0.013719f, -0.019090f, +0.006612f, +0.038617f, -0.028486f, -0.004941f, -0.007402f, +0.005195f, - -0.007912f, -0.004318f, -0.017596f, +0.001154f, -0.012137f, +0.003147f, +0.002875f, -0.001963f, +0.000344f, +0.002685f, - +0.001207f, -0.004875f, +0.001542f, +0.004437f, -0.005016f, -0.001727f, +0.003232f, +0.008772f, -0.004901f, -0.005181f, - -0.000087f, +0.001072f, -0.004452f, +0.002785f, -0.003499f, +0.002278f, -0.001829f, +0.009835f, -0.002561f, +0.001961f, - +0.001388f, +0.000484f, +0.005093f, -0.003463f, -0.000001f, +0.003600f, +0.005556f, +0.000959f, -0.001843f, +0.001598f, - -0.001728f, -0.003259f, +0.004578f, +0.001379f, +0.004500f, -0.001607f, -0.002221f, -0.005563f, +0.005956f, +0.002330f, - +0.003713f, -0.005061f, -0.001030f, -0.000647f, +0.001541f, -0.001266f, -0.000590f, +0.001627f, +0.000893f, +0.001365f, - -0.002574f, -0.000531f, -0.000608f, -0.000879f, -0.000758f, +0.000328f - }, - { - +0.080322f, -0.484836f, -0.031029f, +0.042197f, +0.019459f, -0.003451f, -0.008147f, -0.014129f, -0.000706f, +0.007877f, - +0.003046f, -0.016910f, +0.005882f, +0.003854f, -0.043084f, -0.017791f, -0.025093f, -0.009799f, -0.018158f, +0.017662f, - +0.001351f, +0.017493f, +0.021652f, -0.011587f, +0.009662f, +0.019765f, -0.017576f, +0.007749f, -0.006847f, +0.009402f, - +0.008365f, -0.007069f, +0.008549f, -0.006188f, +0.008312f, +0.008315f, -0.012352f, +0.003781f, -0.002452f, -0.001873f, - +0.015867f, +0.000468f, +0.008561f, +0.008252f, -0.013044f, -0.002104f, -0.004432f, -0.016213f, +0.003875f, -0.002134f, - +0.010630f, +0.010428f, -0.005976f, -0.001811f, +0.004285f, +0.006747f, +0.010963f, -0.006669f, +0.006286f, -0.002788f, - +0.006623f, +0.008935f, -0.005520f, -0.003442f, -0.000023f, +0.003285f, +0.004225f, +0.005320f, +0.000558f, +0.001477f, - +0.002853f, +0.000571f, +0.001263f, -0.003181f, +0.003072f, -0.001303f, +0.003316f, +0.000278f, +0.000696f, -0.001227f, - -0.000249f, -0.004181f, -0.000175f, -0.000456f, -0.001154f, +0.000202f, -0.003027f, -0.000201f, -0.001291f, +0.000186f, - +0.001114f, +0.001598f, +0.000561f, +0.000084f, +0.002356f, +0.001241f - }, - { - +0.002238f, -0.038921f, -0.017659f, +0.000770f, +0.007172f, +0.001574f, -0.002929f, +0.011576f, +0.003156f, +0.003069f, - -0.009873f, +0.000350f, -0.023373f, -0.015656f, -0.049417f, -0.004439f, -0.022483f, -0.014419f, +0.078550f, -0.012744f, - -0.008536f, +0.036267f, -0.046229f, +0.007754f, +0.001779f, -0.011675f, +0.010229f, -0.000218f, -0.004213f, +0.014480f, - +0.008400f, +0.027346f, +0.004411f, -0.009989f, +0.001078f, +0.006667f, -0.003145f, +0.015368f, +0.014923f, +0.005355f, - +0.010778f, -0.011445f, +0.005552f, +0.014496f, +0.016222f, +0.002051f, -0.011138f, +0.007825f, +0.014459f, +0.001802f, - +0.009901f, -0.001180f, -0.001166f, -0.001120f, +0.002330f, -0.004184f, -0.000612f, -0.001621f, -0.001798f, -0.001677f, - +0.001595f, +0.000136f, +0.004275f, -0.001047f, -0.002395f, +0.003174f, +0.002887f, +0.003357f, +0.001634f, -0.002953f, - +0.002039f, -0.001733f, +0.003467f, +0.000404f, -0.001063f, -0.001088f, +0.004063f, -0.000425f, -0.001328f, -0.001195f, - +0.001695f, -0.002104f, -0.000092f, -0.001412f, -0.002266f, +0.000303f, -0.000967f, -0.000127f, -0.001083f, +0.002102f, - +0.001120f, +0.001359f, -0.002141f, -0.000214f, +0.000644f, -0.000075f - }, - { - +0.113570f, -0.612072f, -0.037817f, +0.044334f, -0.004079f, +0.000502f, -0.006614f, +0.044729f, -0.018122f, +0.003311f, - +0.008365f, +0.018720f, -0.003439f, -0.007229f, +0.009351f, +0.030198f, -0.015590f, -0.013942f, -0.006439f, +0.004867f, - +0.023212f, +0.010613f, +0.006900f, -0.014253f, -0.001927f, +0.010698f, +0.009338f, +0.020897f, +0.008789f, +0.005366f, - +0.002855f, -0.008503f, -0.034144f, -0.010695f, -0.005625f, -0.012913f, -0.012385f, +0.001063f, +0.002582f, -0.008987f, - +0.011979f, +0.006138f, -0.002149f, +0.007886f, +0.020563f, +0.012277f, -0.014601f, +0.001920f, +0.005380f, +0.004927f, - +0.009751f, +0.001951f, +0.001914f, +0.002089f, +0.006336f, +0.003369f, -0.010832f, +0.000832f, -0.007312f, +0.002718f, - -0.002554f, +0.005701f, +0.005205f, -0.001448f, +0.004607f, -0.000727f, -0.000696f, +0.001432f, -0.002448f, +0.003917f, - -0.001133f, +0.001422f, +0.000009f, -0.001360f, -0.002030f, -0.001121f, -0.003144f, +0.001260f, +0.003526f, -0.002310f, - +0.002775f, +0.000321f, -0.002573f, -0.000152f, -0.000613f, +0.001663f, +0.000808f, -0.000465f, +0.000664f, +0.000582f, - +0.000508f, -0.000013f, -0.001012f, +0.000725f, -0.000788f, +0.000180f - }, - { - +0.000197f, -0.025766f, +0.011649f, +0.011379f, -0.001493f, -0.001567f, -0.000894f, +0.004808f, +0.007543f, +0.004654f, - -0.001225f, +0.009306f, -0.008940f, +0.054635f, -0.007315f, +0.018913f, -0.057469f, -0.002157f, -0.015700f, +0.021394f, - +0.010881f, +0.017183f, +0.047930f, -0.059181f, -0.015775f, -0.018101f, -0.029545f, +0.033180f, -0.004678f, -0.036495f, - -0.004283f, +0.003166f, +0.004535f, -0.005595f, -0.011912f, +0.000993f, -0.004881f, +0.000440f, -0.003853f, -0.004237f, - +0.000579f, -0.003060f, -0.001176f, -0.001345f, -0.005822f, +0.003848f, +0.011676f, +0.003297f, -0.000040f, -0.003199f, - -0.000017f, +0.002456f, +0.002535f, +0.001103f, -0.006760f, +0.004253f, +0.001490f, +0.000004f, -0.002359f, -0.002825f, - -0.001978f, -0.002826f, -0.001188f, -0.004837f, +0.000403f, -0.002908f, +0.004436f, +0.001106f, +0.008829f, -0.000100f, - -0.002250f, -0.002575f, +0.000241f, -0.001758f, -0.002188f, +0.000943f, +0.000222f, -0.001078f, +0.000334f, -0.003651f, - +0.002083f, -0.001292f, +0.001067f, +0.000852f, -0.000910f, -0.001328f, +0.002721f, -0.001492f, +0.002288f, +0.000298f, - -0.000590f, -0.000765f, -0.001162f, +0.000508f, +0.000277f, -0.002229f - }, - { - -0.138895f, -0.279522f, +0.020939f, -0.091970f, +0.000202f, +0.006051f, +0.016852f, -0.001263f, +0.003474f, -0.001166f, - -0.012789f, +0.007249f, -0.007880f, +0.044331f, -0.031836f, +0.004026f, +0.035854f, +0.011135f, -0.022482f, +0.004373f, - +0.014985f, +0.007592f, +0.013912f, +0.010875f, +0.010993f, -0.003765f, +0.009146f, +0.011909f, -0.001779f, -0.009741f, - -0.017933f, +0.003079f, +0.012294f, +0.001160f, +0.002917f, -0.003144f, -0.011658f, +0.018985f, -0.015178f, +0.010963f, - -0.006190f, +0.000591f, -0.010950f, +0.008131f, +0.007855f, -0.000786f, -0.008595f, +0.016678f, -0.001155f, +0.005725f, - +0.014675f, +0.009732f, -0.004215f, -0.001759f, -0.000398f, +0.006979f, +0.007184f, -0.006690f, -0.000570f, -0.003985f, - -0.006980f, -0.007373f, -0.003068f, -0.000741f, +0.001055f, +0.001810f, +0.001806f, +0.004621f, +0.002089f, -0.004752f, - +0.001736f, -0.001614f, -0.005803f, +0.002019f, -0.004591f, -0.001168f, -0.002521f, -0.003432f, -0.000327f, -0.001239f, - -0.001499f, +0.003178f, +0.000797f, -0.000406f, +0.000466f, +0.001241f, -0.000158f, +0.002347f, -0.000009f, -0.002603f, - -0.001600f, -0.002111f, +0.000575f, +0.000651f, +0.000204f, +0.002820f - }, - { - -0.000105f, -0.022977f, +0.013192f, +0.003930f, +0.012926f, -0.001241f, +0.003094f, +0.001057f, +0.002298f, -0.000944f, - +0.002288f, +0.006909f, +0.005822f, -0.018208f, -0.130082f, +0.008272f, -0.037393f, -0.002526f, -0.034067f, +0.043195f, - +0.030528f, -0.029139f, +0.029148f, -0.069508f, -0.023766f, -0.009519f, -0.026043f, +0.021929f, +0.012962f, -0.003799f, - -0.003224f, -0.008113f, -0.003519f, -0.018699f, +0.012320f, +0.013460f, -0.009563f, -0.000878f, +0.018541f, +0.014541f, - -0.014166f, +0.010959f, +0.008195f, -0.002647f, -0.006260f, -0.010384f, -0.002226f, +0.000639f, +0.000267f, -0.005846f, - +0.004785f, -0.011209f, -0.004161f, +0.006442f, +0.000244f, -0.003571f, +0.002980f, -0.001774f, +0.005047f, +0.000387f, - -0.000800f, -0.003510f, -0.007182f, -0.000013f, +0.001257f, -0.004541f, +0.002455f, -0.001608f, -0.000196f, -0.002842f, - +0.002624f, -0.003257f, +0.001229f, +0.002562f, +0.000580f, +0.003899f, +0.001768f, +0.000554f, +0.003287f, +0.000989f, - -0.000051f, +0.004256f, -0.004990f, +0.000668f, +0.001337f, +0.001321f, -0.002229f, -0.000739f, +0.003301f, -0.002175f, - -0.000687f, +0.003317f, -0.000341f, +0.000904f, +0.000530f, -0.000811f - }, - { - -0.059617f, -0.023830f, -0.006555f, -0.008232f, +0.017525f, -0.000275f, +0.057712f, -0.009349f, -0.002965f, -0.000078f, - +0.019657f, -0.002042f, -0.025386f, -0.013219f, +0.000835f, +0.004381f, -0.017392f, -0.004764f, +0.003585f, -0.020209f, - +0.002990f, +0.011187f, +0.007971f, -0.007733f, +0.014850f, +0.014198f, +0.011487f, -0.011992f, +0.005247f, +0.005870f, - +0.010259f, -0.021713f, +0.022787f, +0.002881f, -0.024588f, +0.001432f, -0.009864f, -0.010272f, +0.005847f, +0.014791f, - -0.007679f, +0.001613f, +0.006265f, +0.004388f, -0.003159f, -0.011657f, +0.007972f, -0.001174f, -0.000855f, -0.006227f, - -0.001617f, +0.000001f, -0.003141f, -0.001983f, +0.009172f, -0.006553f, -0.004983f, +0.006714f, -0.000888f, -0.002020f, - -0.001985f, -0.006849f, -0.001459f, -0.003488f, +0.000597f, -0.008672f, -0.003381f, +0.004397f, -0.002583f, +0.001767f, - -0.001917f, +0.001399f, -0.000993f, -0.003334f, -0.000238f, -0.001507f, -0.000915f, +0.003689f, -0.001002f, +0.003626f, - +0.000039f, +0.005164f, -0.003718f, +0.003650f, +0.000888f, +0.003583f, +0.001655f, +0.001134f, -0.001790f, -0.000341f, - -0.002633f, -0.000451f, -0.002927f, -0.000510f, +0.002513f, -0.000204f - }, - { - +0.003815f, +0.050867f, -0.026289f, +0.002615f, -0.009383f, -0.018871f, +0.002702f, -0.006116f, +0.013900f, -0.015449f, - -0.017325f, +0.011375f, -0.000238f, -0.022882f, -0.007264f, -0.011697f, -0.008334f, -0.000266f, -0.060185f, +0.027524f, - -0.010493f, -0.009784f, +0.015672f, +0.012259f, -0.000212f, -0.022508f, -0.020877f, -0.007688f, +0.021559f, -0.007844f, - +0.004928f, -0.018519f, +0.003850f, +0.001380f, -0.007673f, +0.001974f, -0.010968f, -0.011003f, +0.003081f, -0.000710f, - +0.000563f, -0.006702f, -0.007733f, -0.001171f, +0.005432f, +0.007562f, -0.012914f, +0.013393f, -0.004304f, -0.005071f, - -0.019736f, +0.002308f, +0.006112f, -0.000635f, -0.007628f, -0.011722f, -0.001635f, +0.002324f, -0.000467f, +0.012847f, - -0.003262f, -0.003857f, +0.001300f, +0.006020f, +0.001455f, +0.005773f, -0.005927f, +0.000833f, -0.000617f, +0.001719f, - -0.002722f, +0.006382f, -0.000341f, -0.002190f, -0.002631f, +0.003674f, -0.001618f, -0.001118f, -0.000290f, -0.004165f, - +0.001634f, +0.000965f, -0.005971f, +0.002277f, -0.002529f, +0.001881f, +0.000640f, +0.000540f, -0.001296f, -0.001588f, - -0.001242f, +0.002284f, +0.003068f, -0.002005f, -0.000581f, -0.000588f - }, - { - -0.056499f, +0.383462f, +0.037830f, +0.006957f, -0.017878f, -0.003956f, +0.007624f, +0.013347f, -0.019117f, +0.007420f, - +0.008888f, +0.003615f, +0.016657f, +0.008399f, -0.035837f, -0.006610f, -0.004610f, +0.001311f, -0.024164f, -0.002382f, - -0.009083f, +0.024959f, -0.023121f, -0.004664f, -0.005330f, +0.021940f, +0.005459f, +0.004307f, -0.002617f, -0.000968f, - -0.010957f, +0.009216f, +0.003740f, -0.010954f, +0.015998f, +0.003568f, -0.026026f, -0.005075f, -0.014099f, -0.003434f, - -0.003325f, -0.000717f, +0.007392f, +0.002945f, -0.007733f, -0.001882f, -0.025215f, +0.002075f, +0.023622f, -0.003785f, - -0.012081f, -0.010668f, -0.006639f, +0.005024f, -0.006951f, -0.008867f, -0.001977f, -0.004389f, -0.005911f, -0.013143f, - +0.007003f, +0.008403f, +0.001800f, -0.002205f, +0.000103f, -0.003517f, -0.005461f, +0.006208f, -0.000286f, -0.004023f, - -0.003869f, -0.004121f, +0.002529f, +0.001725f, +0.004131f, +0.002986f, +0.004528f, +0.002280f, +0.003632f, -0.000179f, - -0.000111f, -0.002468f, +0.004834f, -0.000137f, -0.001653f, +0.001327f, -0.000922f, +0.001521f, -0.002421f, +0.001454f, - +0.001389f, -0.003120f, +0.001283f, +0.000222f, -0.000765f, -0.002000f - }, - { - +0.003701f, -0.094582f, -0.019585f, +0.011539f, +0.009653f, -0.010478f, +0.010224f, +0.012490f, -0.005110f, -0.018880f, - -0.000523f, -0.004196f, +0.019079f, +0.014670f, -0.044985f, +0.032291f, +0.036267f, +0.010895f, +0.028032f, -0.032133f, - +0.048456f, +0.010286f, -0.018912f, -0.027057f, -0.046469f, +0.005514f, -0.001633f, -0.000452f, -0.005420f, +0.014878f, - +0.002283f, +0.001354f, +0.013115f, -0.045422f, +0.004012f, -0.011416f, -0.006744f, -0.004766f, -0.009470f, -0.003990f, - -0.002244f, +0.014426f, +0.009465f, +0.010285f, -0.003135f, +0.009974f, +0.006443f, -0.000153f, -0.002791f, +0.005495f, - +0.009872f, -0.003324f, -0.001198f, -0.001255f, +0.001900f, +0.006505f, +0.002499f, -0.005150f, +0.000144f, +0.004349f, - -0.006385f, -0.000654f, +0.010540f, +0.002287f, -0.002808f, +0.004553f, -0.003386f, -0.008655f, -0.001482f, -0.001244f, - -0.004389f, +0.003855f, -0.001897f, -0.002927f, -0.004194f, +0.003106f, -0.002145f, -0.003827f, -0.001235f, -0.002475f, - -0.002528f, -0.003075f, +0.000679f, -0.003841f, -0.000092f, -0.001328f, -0.002513f, +0.001669f, -0.000940f, -0.000627f, - -0.000898f, +0.000398f, +0.000638f, +0.000674f, +0.001931f, -0.000964f - }, - { - +0.034909f, +0.224798f, +0.019710f, -0.036941f, +0.032958f, -0.052581f, -0.019279f, -0.020724f, -0.004436f, +0.014863f, - +0.021706f, -0.045663f, -0.003666f, -0.002928f, +0.019978f, +0.028690f, +0.044769f, -0.000545f, -0.021122f, +0.015235f, - +0.014495f, +0.008963f, +0.011876f, -0.002748f, -0.007068f, -0.013754f, -0.004991f, -0.007096f, -0.006415f, +0.002570f, - -0.009032f, -0.010148f, -0.001708f, -0.021797f, -0.009064f, -0.002205f, -0.021563f, -0.004959f, -0.022016f, +0.000905f, - +0.022825f, -0.020229f, -0.005578f, +0.002286f, +0.002636f, -0.017099f, -0.007603f, -0.002906f, +0.006504f, +0.013834f, - +0.015182f, -0.002520f, -0.007719f, +0.010607f, +0.014101f, +0.001024f, +0.002287f, -0.006521f, +0.000470f, +0.001791f, - +0.001700f, -0.000176f, +0.001770f, -0.002197f, -0.001616f, -0.002884f, +0.002485f, +0.002032f, +0.002857f, -0.000050f, - -0.003741f, +0.002636f, -0.003073f, +0.001495f, -0.000220f, -0.001653f, -0.000196f, -0.001621f, +0.002993f, +0.002837f, - -0.001782f, -0.001071f, +0.001923f, +0.003185f, +0.000667f, +0.002802f, -0.001511f, -0.002398f, +0.000742f, -0.001996f, - -0.000204f, +0.000376f, -0.000371f, -0.000121f, +0.000580f, -0.000662f - }, - { - -0.006714f, -0.104897f, +0.027938f, +0.003072f, +0.009754f, -0.015214f, +0.002405f, +0.004057f, -0.005420f, +0.011395f, - -0.009189f, -0.014552f, +0.017254f, -0.009221f, +0.060717f, -0.041344f, +0.038292f, +0.009182f, +0.011685f, +0.009610f, - -0.005601f, -0.003567f, -0.033259f, +0.016276f, +0.000144f, +0.010110f, -0.025014f, -0.013709f, +0.003976f, -0.026187f, - +0.015813f, +0.011717f, -0.000297f, +0.004374f, +0.006047f, +0.000934f, +0.021152f, +0.017582f, -0.014047f, +0.009792f, - -0.005966f, -0.008289f, +0.005154f, +0.002202f, -0.018742f, -0.007509f, -0.001596f, +0.003590f, -0.006485f, -0.001072f, - -0.004802f, +0.000305f, -0.004027f, +0.005589f, +0.009837f, +0.002430f, -0.003510f, -0.001619f, -0.001218f, -0.003751f, - -0.005556f, +0.004940f, +0.002636f, -0.000133f, -0.002104f, -0.002247f, -0.001414f, -0.002439f, -0.003766f, -0.008381f, - +0.000949f, +0.001670f, -0.000311f, -0.001655f, -0.001135f, +0.003521f, +0.000363f, -0.001227f, +0.002807f, -0.000180f, - -0.000220f, -0.003701f, -0.000084f, +0.003628f, +0.003812f, +0.000608f, -0.000540f, -0.000634f, -0.002847f, -0.002395f, - -0.002535f, +0.000108f, -0.000808f, +0.000023f, -0.000529f, +0.002831f - } - }, - { - { - -0.000851f, -0.277721f, -0.240802f, +0.003602f, -0.049267f, -0.005537f, -0.003462f, +0.004498f, -0.019744f, -0.002737f, - -0.020585f, -0.030604f, -0.040606f, -0.001402f, +0.045386f, -0.024887f, -0.011675f, +0.000382f, -0.005047f, -0.029676f, - -0.005454f, +0.012271f, -0.001383f, -0.008546f, +0.002102f, +0.014189f, +0.009146f, +0.019811f, -0.014154f, -0.010015f, - -0.025454f, +0.000062f, +0.017606f, +0.013736f, -0.002110f, +0.003233f, -0.003892f, +0.011112f, +0.008532f, +0.001131f, - +0.003705f, -0.008104f, -0.014679f, +0.001725f, -0.004926f, -0.011911f, +0.004195f, -0.011572f, -0.005638f, -0.010440f, - -0.002564f, -0.010127f, +0.001273f, -0.005786f, +0.001195f, -0.001156f, -0.001424f, -0.002270f, -0.002916f, +0.002907f, - +0.003727f, -0.001154f, -0.004059f, +0.000058f, -0.004428f, +0.002043f, +0.002348f, -0.003888f, -0.002551f, -0.000725f, - -0.002106f, -0.001487f, +0.002100f, -0.002601f, -0.002661f, -0.001866f, +0.002005f, -0.000114f, +0.002491f, +0.002911f, - +0.001640f, +0.000393f, +0.001027f, -0.001990f, +0.000640f, +0.000754f, -0.000949f, +0.002410f, -0.000559f, +0.001479f, - +0.000909f, +0.000096f, +0.000039f, +0.000539f, +0.000995f, +0.001033f - }, - { - -0.002279f, -0.029376f, -0.016638f, +0.001771f, +0.019389f, -0.001596f, -0.003851f, -0.000280f, -0.005298f, -0.012170f, - -0.032490f, -0.008634f, +0.017689f, -0.010318f, -0.002627f, +0.017436f, +0.013289f, +0.002983f, -0.037813f, +0.010725f, - -0.008921f, -0.011205f, +0.020863f, +0.016943f, -0.053767f, +0.012767f, +0.022956f, +0.013141f, +0.008291f, -0.003894f, - +0.015359f, -0.016827f, +0.017462f, -0.003105f, +0.018520f, -0.004029f, +0.004841f, +0.006189f, +0.003484f, -0.003575f, - -0.001245f, +0.009717f, +0.009440f, -0.004505f, +0.006125f, -0.001992f, +0.000846f, -0.006160f, -0.000341f, -0.005711f, - -0.010178f, -0.000627f, +0.004886f, -0.000085f, -0.005109f, -0.004346f, +0.001751f, -0.001837f, +0.009922f, +0.001653f, - -0.003305f, -0.003581f, -0.001107f, +0.006127f, -0.002412f, +0.001244f, -0.000589f, +0.002587f, +0.004367f, -0.002926f, - +0.001437f, +0.002244f, -0.005879f, -0.005561f, +0.001770f, +0.000216f, +0.000416f, +0.001848f, -0.000263f, -0.000088f, - +0.001727f, -0.002264f, +0.000263f, +0.002218f, +0.002452f, +0.001276f, -0.002045f, +0.000118f, +0.000408f, +0.001426f, - -0.001477f, -0.001616f, +0.000990f, +0.000327f, -0.001537f, +0.000899f - }, - { - -0.003851f, -0.046432f, -0.044008f, -0.038206f, -0.000826f, -0.006893f, -0.003215f, -0.005973f, -0.003622f, +0.001522f, - +0.012721f, -0.013580f, -0.008362f, -0.010205f, +0.023550f, +0.029596f, +0.013442f, +0.040797f, -0.033651f, +0.019625f, - +0.020371f, +0.011720f, +0.000667f, -0.008158f, +0.020044f, +0.015341f, -0.009990f, -0.008144f, +0.005332f, -0.001519f, - -0.012485f, -0.005482f, -0.008066f, -0.019856f, -0.009124f, +0.003318f, +0.008912f, +0.000797f, -0.001574f, -0.001964f, - -0.003001f, +0.003764f, +0.005370f, -0.002200f, +0.003298f, -0.004796f, +0.006400f, +0.007067f, -0.008571f, -0.004619f, - +0.005500f, -0.002891f, -0.002217f, -0.004724f, +0.003929f, -0.002398f, +0.005705f, +0.001048f, -0.000218f, +0.001408f, - +0.004272f, +0.000170f, +0.004026f, -0.003332f, -0.001244f, +0.005333f, +0.002404f, -0.001938f, +0.001536f, +0.001898f, - -0.001740f, -0.001655f, +0.003087f, +0.000466f, +0.003956f, +0.002251f, -0.005978f, -0.002622f, +0.002349f, +0.002104f, - +0.003305f, +0.000010f, -0.002832f, -0.000240f, +0.000875f, +0.000262f, -0.000869f, +0.000463f, +0.001033f, +0.001408f, - -0.000610f, -0.001659f, -0.002011f, -0.001990f, +0.000834f, +0.001200f - }, - { - -0.094552f, -0.344672f, +0.045941f, +0.092823f, -0.023101f, -0.001011f, -0.007762f, -0.010612f, +0.008446f, -0.012525f, - +0.005368f, +0.004840f, -0.008723f, -0.012664f, -0.040884f, -0.005732f, -0.041957f, -0.012010f, +0.002090f, +0.000231f, - +0.007838f, +0.015430f, +0.017682f, -0.011791f, +0.000790f, +0.011721f, -0.002115f, +0.006856f, +0.003588f, +0.005238f, - +0.017990f, -0.010550f, +0.006140f, -0.000791f, +0.002343f, +0.002540f, +0.001747f, -0.001159f, -0.007098f, +0.009491f, - +0.001170f, +0.007647f, +0.008657f, -0.003633f, +0.001489f, -0.000627f, -0.010794f, -0.010237f, -0.004250f, +0.007081f, - +0.004425f, +0.012691f, -0.002948f, -0.004672f, +0.009235f, +0.007252f, +0.004614f, +0.001701f, -0.004785f, +0.002030f, - +0.006057f, +0.007410f, -0.001948f, -0.004001f, -0.002814f, +0.005319f, +0.005434f, +0.002644f, -0.000624f, +0.003268f, - +0.000938f, +0.000616f, +0.001127f, -0.000506f, +0.000267f, -0.000770f, +0.002613f, +0.001979f, -0.000260f, -0.000577f, - -0.001623f, -0.000473f, -0.003005f, -0.001743f, -0.001137f, +0.000894f, -0.001291f, -0.001648f, -0.000417f, +0.000294f, - +0.001224f, +0.000871f, +0.000690f, +0.000976f, +0.001082f, +0.001335f - }, - { - -0.001199f, -0.064311f, +0.007976f, +0.010549f, -0.000050f, -0.000683f, +0.002166f, +0.007028f, +0.008034f, +0.000727f, - -0.006881f, +0.004963f, -0.013220f, -0.017933f, -0.038585f, -0.053205f, -0.030733f, +0.073288f, +0.011223f, +0.005776f, - +0.004932f, +0.018122f, -0.015996f, -0.018827f, -0.007911f, -0.021063f, +0.042164f, -0.013887f, +0.001969f, +0.009245f, - +0.011410f, +0.012673f, +0.005051f, +0.007708f, -0.002096f, -0.001524f, +0.004264f, +0.011860f, +0.009388f, +0.007068f, - +0.006442f, -0.006809f, +0.010940f, +0.009126f, +0.004744f, +0.006763f, +0.000925f, +0.001788f, +0.009767f, +0.010346f, - +0.009020f, -0.002234f, -0.002005f, -0.000987f, -0.000705f, -0.004659f, +0.000600f, -0.002779f, -0.003069f, +0.003113f, - +0.005813f, -0.005237f, +0.006338f, -0.001781f, +0.003487f, -0.003373f, +0.001978f, +0.006746f, +0.000732f, +0.001433f, - -0.001754f, +0.000587f, +0.000850f, +0.003971f, -0.002118f, -0.000290f, +0.002726f, +0.001399f, -0.001867f, -0.002157f, - +0.001274f, +0.000873f, -0.000938f, -0.001262f, -0.001631f, -0.000418f, -0.000499f, -0.000073f, +0.000402f, +0.000454f, - +0.001290f, +0.001052f, -0.001524f, -0.000085f, +0.000999f, +0.000223f - }, - { - -0.130693f, -0.375111f, +0.026557f, +0.009649f, +0.023491f, -0.000570f, +0.025115f, +0.013864f, -0.015985f, +0.022349f, - +0.005842f, -0.011936f, +0.022237f, +0.000365f, +0.005558f, +0.013351f, -0.010235f, -0.004173f, +0.002148f, +0.025091f, - +0.005461f, +0.005493f, +0.006035f, -0.004455f, -0.011591f, +0.002160f, +0.015518f, +0.007845f, +0.019122f, +0.016782f, - -0.004495f, -0.014513f, -0.022106f, -0.014898f, -0.012073f, -0.008455f, -0.003210f, +0.003611f, -0.005888f, -0.008984f, - +0.002340f, +0.008187f, +0.009315f, -0.002235f, +0.016621f, +0.010356f, -0.010225f, +0.001083f, +0.007194f, +0.007548f, - -0.000224f, +0.008928f, -0.003261f, +0.012553f, +0.000251f, +0.002546f, -0.002999f, -0.001147f, -0.005913f, -0.000673f, - +0.001889f, +0.001044f, +0.002852f, +0.005636f, -0.002974f, -0.001148f, +0.003510f, -0.001407f, +0.001306f, +0.000805f, - -0.000106f, +0.002618f, -0.003519f, -0.000050f, -0.000643f, -0.000201f, -0.002049f, +0.000734f, -0.000283f, +0.000620f, - +0.001388f, +0.002861f, -0.002732f, -0.001368f, +0.000059f, +0.001515f, -0.000024f, -0.000640f, +0.000140f, +0.002475f, - -0.000349f, +0.000284f, +0.000045f, -0.000316f, +0.000888f, +0.000116f - }, - { - -0.000902f, -0.023093f, +0.011804f, +0.002419f, +0.007312f, -0.001573f, -0.002095f, +0.006261f, +0.003469f, +0.001074f, - +0.006760f, +0.007456f, -0.000139f, +0.009465f, +0.010427f, -0.028625f, +0.002705f, -0.002965f, +0.001434f, -0.001132f, - +0.013476f, +0.011650f, +0.039000f, -0.008155f, -0.032951f, +0.001361f, -0.039013f, +0.007640f, -0.009668f, +0.003242f, - -0.014449f, -0.011339f, -0.002268f, +0.011608f, +0.000209f, -0.013569f, +0.002004f, +0.002188f, -0.006076f, -0.006189f, - -0.000191f, -0.003051f, -0.002650f, -0.002588f, -0.001053f, +0.007413f, -0.000246f, +0.010621f, +0.002674f, -0.003131f, - -0.002986f, +0.003347f, +0.001769f, -0.005161f, -0.000603f, +0.002001f, +0.003460f, -0.006295f, +0.005647f, -0.005925f, - -0.004123f, -0.001220f, -0.001741f, -0.002373f, -0.000325f, -0.000087f, +0.003145f, +0.002272f, +0.006174f, -0.001979f, - +0.000220f, -0.001558f, +0.000344f, -0.002121f, -0.000315f, -0.001542f, +0.001475f, +0.000488f, -0.000421f, -0.001586f, - -0.000925f, -0.001537f, +0.002721f, +0.000385f, -0.000968f, -0.000218f, +0.001390f, -0.001156f, -0.000041f, +0.001622f, - -0.000108f, -0.002088f, +0.000594f, +0.000476f, -0.001188f, -0.000388f - }, - { - +0.090355f, -0.432231f, -0.072197f, -0.094932f, -0.018809f, +0.006460f, -0.002932f, +0.007184f, +0.006705f, +0.013322f, - -0.003841f, -0.021931f, -0.005852f, +0.014143f, +0.028598f, -0.018625f, +0.014880f, +0.024755f, -0.017216f, +0.012428f, - +0.010953f, +0.008584f, +0.008386f, +0.008497f, +0.004414f, +0.002634f, +0.015055f, -0.000878f, -0.006060f, -0.008932f, - -0.003556f, -0.000484f, +0.006796f, +0.006097f, +0.002064f, -0.002419f, -0.007690f, +0.006225f, -0.001967f, +0.003504f, - -0.006784f, +0.002030f, -0.002319f, -0.001164f, +0.014868f, -0.005883f, -0.005321f, +0.015418f, +0.005465f, +0.010869f, - +0.012532f, -0.000695f, +0.003240f, +0.000135f, +0.001163f, +0.006345f, +0.002043f, -0.009080f, -0.001728f, -0.004906f, - -0.004915f, +0.000835f, -0.002939f, -0.001403f, +0.000979f, +0.004674f, +0.001382f, -0.002085f, +0.004629f, -0.002208f, - -0.001921f, +0.000456f, -0.001945f, -0.003090f, -0.001914f, -0.003089f, -0.002473f, -0.000972f, -0.003798f, -0.000958f, - +0.000975f, +0.001780f, +0.000702f, +0.000103f, -0.000778f, +0.002609f, +0.000223f, +0.000423f, +0.001958f, -0.002200f, - -0.002453f, -0.000485f, -0.000333f, +0.000728f, -0.000902f, +0.002216f - }, - { - -0.002046f, -0.000674f, -0.009989f, +0.018633f, +0.002102f, +0.000217f, +0.001128f, +0.003187f, +0.002278f, +0.001698f, - -0.002269f, +0.008584f, -0.002696f, -0.004764f, -0.100375f, -0.056053f, -0.029966f, +0.007775f, -0.020657f, +0.047838f, - +0.021952f, -0.033338f, +0.006958f, -0.010879f, -0.044826f, -0.019666f, +0.004117f, -0.012175f, +0.025116f, -0.013381f, - -0.007231f, +0.006911f, -0.007601f, -0.017654f, +0.020896f, -0.005072f, -0.005084f, +0.006961f, +0.007042f, +0.015962f, - -0.000761f, -0.000814f, +0.009222f, +0.002227f, -0.011414f, -0.008726f, -0.006113f, -0.001464f, +0.000965f, -0.000756f, - -0.001240f, -0.008998f, -0.005253f, +0.003250f, +0.000303f, +0.000625f, +0.004578f, -0.000225f, -0.000247f, -0.000878f, - +0.001713f, -0.005213f, -0.002630f, -0.004075f, +0.000294f, -0.001504f, -0.002418f, -0.000973f, +0.002670f, -0.003240f, - -0.000406f, -0.002256f, +0.001592f, +0.002928f, +0.002073f, +0.001522f, +0.003666f, +0.000307f, +0.001987f, +0.001669f, - -0.001015f, -0.001865f, +0.000979f, +0.001274f, +0.000992f, +0.000715f, -0.001957f, +0.000097f, +0.001809f, -0.001169f, - +0.001179f, +0.000390f, -0.000017f, +0.000515f, +0.001802f, -0.000376f - }, - { - +0.054731f, -0.025384f, -0.107790f, +0.025085f, -0.005672f, +0.011758f, +0.048596f, +0.005326f, -0.016275f, +0.016000f, - +0.005431f, +0.012909f, -0.025212f, -0.034762f, -0.012382f, +0.003436f, -0.001225f, +0.009269f, -0.024011f, -0.000092f, - +0.007325f, +0.004671f, +0.002357f, -0.007060f, +0.025362f, +0.017051f, -0.000837f, -0.004848f, +0.010699f, +0.002001f, - -0.015727f, +0.008060f, +0.003797f, +0.013428f, -0.015480f, -0.010340f, -0.011476f, -0.008567f, +0.007373f, +0.011241f, - -0.002506f, +0.000271f, +0.003137f, +0.003329f, +0.010221f, -0.010133f, -0.007267f, +0.002930f, -0.003684f, -0.003343f, - +0.007567f, -0.008711f, +0.000654f, +0.000948f, +0.000753f, -0.000033f, -0.008363f, +0.004393f, -0.000460f, -0.002779f, - +0.000965f, -0.007448f, -0.004828f, +0.000345f, -0.003275f, -0.004269f, +0.000298f, -0.001071f, +0.003057f, -0.001748f, - +0.000656f, -0.000275f, -0.001863f, -0.003446f, +0.003045f, -0.001971f, +0.000864f, +0.000663f, +0.000446f, +0.001572f, - +0.003335f, +0.002447f, -0.000932f, +0.001830f, +0.001864f, +0.001489f, +0.001738f, +0.001008f, -0.000631f, -0.000371f, - -0.003137f, -0.000179f, -0.003098f, -0.000104f, +0.000971f, +0.001904f - }, - { - -0.004262f, -0.007976f, +0.028233f, -0.004156f, -0.004316f, -0.002756f, -0.017308f, -0.008755f, +0.001507f, +0.005374f, - -0.005118f, -0.017290f, -0.008100f, -0.018270f, -0.010257f, -0.003215f, -0.016903f, +0.012316f, -0.017824f, -0.013921f, - -0.003977f, -0.000826f, +0.001064f, +0.012920f, +0.009069f, -0.010065f, -0.026091f, -0.003405f, -0.002202f, +0.014342f, - +0.002243f, -0.010358f, -0.001619f, -0.003049f, +0.010681f, -0.019936f, -0.002869f, -0.010093f, +0.003164f, -0.003707f, - -0.012349f, +0.008739f, -0.011497f, -0.002198f, +0.003511f, -0.001771f, +0.003899f, -0.004455f, -0.004247f, -0.007702f, - -0.006804f, -0.000797f, -0.001524f, +0.003213f, +0.000525f, -0.014574f, -0.002189f, +0.001036f, +0.000654f, +0.006863f, - +0.005892f, -0.003162f, -0.001790f, +0.003139f, +0.004884f, -0.000837f, -0.001345f, -0.000749f, -0.001209f, -0.000287f, - +0.000695f, +0.004226f, +0.001020f, -0.000724f, -0.001760f, +0.000742f, +0.000820f, -0.001101f, -0.001396f, +0.000273f, - -0.003017f, +0.000292f, -0.001342f, -0.000735f, -0.000942f, +0.000852f, +0.000639f, -0.000206f, +0.000518f, -0.001525f, - -0.001605f, +0.001871f, +0.002462f, -0.000745f, -0.000454f, +0.000262f - }, - { - +0.102628f, +0.202008f, -0.002539f, +0.003131f, -0.009516f, -0.012491f, +0.003694f, +0.004949f, -0.015128f, -0.003860f, - +0.023901f, +0.008673f, +0.006514f, -0.010135f, -0.004443f, -0.018143f, +0.002077f, -0.005743f, -0.028096f, -0.000277f, - +0.011778f, -0.002656f, -0.005407f, -0.015866f, +0.028134f, -0.003338f, +0.025591f, -0.007234f, -0.003177f, -0.011654f, - +0.006499f, +0.000840f, -0.003721f, -0.010880f, +0.008993f, +0.007596f, -0.016637f, -0.006185f, -0.013908f, +0.000170f, - -0.008940f, +0.008402f, -0.004916f, +0.004567f, +0.005101f, -0.018138f, -0.019604f, +0.009721f, +0.006633f, +0.000928f, - -0.007501f, -0.013498f, -0.002773f, -0.002609f, -0.002166f, -0.004252f, -0.007034f, -0.002655f, -0.007515f, -0.005893f, - +0.007259f, +0.004300f, +0.001166f, -0.000548f, -0.001416f, -0.000732f, -0.006001f, +0.001735f, +0.001788f, -0.004047f, - -0.003288f, -0.000919f, +0.000987f, +0.002009f, +0.002497f, +0.002855f, +0.003238f, +0.003108f, +0.003701f, -0.001414f, - +0.000226f, -0.000665f, +0.002093f, +0.002389f, -0.002146f, +0.000315f, +0.001103f, -0.000540f, -0.003021f, +0.002681f, - +0.000716f, -0.002617f, +0.000019f, +0.001156f, -0.000974f, -0.001542f - }, - { - -0.002083f, -0.101853f, -0.005458f, +0.010247f, +0.006475f, +0.002601f, +0.005717f, -0.000327f, +0.001693f, -0.018644f, - +0.002075f, -0.005488f, +0.015946f, +0.045521f, +0.018147f, -0.041428f, +0.032767f, +0.006796f, -0.003168f, +0.008348f, - -0.021880f, +0.058027f, -0.000008f, -0.035117f, -0.035140f, -0.005955f, -0.014427f, -0.014523f, +0.013542f, +0.021565f, - +0.007863f, -0.015784f, +0.009103f, -0.012795f, -0.010500f, -0.015843f, -0.004811f, +0.005428f, -0.000397f, -0.013624f, - +0.000720f, +0.004504f, +0.017929f, +0.010058f, +0.003798f, +0.003191f, +0.006352f, +0.000677f, -0.001474f, -0.000399f, - +0.012793f, -0.001489f, -0.001647f, +0.000180f, +0.001204f, +0.001630f, -0.002431f, -0.003486f, +0.001882f, -0.001759f, - -0.001103f, +0.000828f, +0.008417f, +0.001518f, -0.002232f, -0.000359f, -0.001024f, -0.007962f, +0.001615f, -0.001908f, - -0.003869f, +0.000069f, -0.000871f, -0.002301f, -0.003462f, +0.001515f, -0.000153f, -0.005011f, -0.002757f, -0.000375f, - -0.002816f, -0.003631f, -0.002240f, -0.000036f, +0.000216f, -0.002474f, -0.001732f, +0.000886f, -0.002253f, -0.001214f, - +0.000026f, +0.000723f, +0.000522f, +0.000337f, +0.001400f, +0.000616f - }, - { - +0.007064f, +0.260005f, -0.004064f, +0.020656f, -0.013406f, -0.028452f, -0.024755f, -0.012433f, +0.003027f, -0.008589f, - +0.033380f, -0.039665f, -0.000734f, -0.008758f, +0.039781f, +0.001411f, +0.029258f, +0.014416f, -0.011654f, +0.012643f, - +0.017614f, +0.014844f, -0.004992f, +0.002445f, +0.001529f, -0.007660f, -0.013364f, -0.009701f, +0.006646f, -0.016597f, - -0.007513f, -0.001815f, -0.006053f, -0.018518f, -0.005765f, -0.006255f, -0.008671f, -0.020802f, -0.002130f, -0.008680f, - +0.008485f, +0.003637f, -0.013477f, -0.007223f, -0.001570f, -0.010246f, -0.001439f, +0.000953f, +0.000220f, +0.009858f, - +0.011587f, +0.011166f, -0.004037f, +0.004169f, +0.010898f, -0.001132f, +0.000977f, -0.001286f, -0.001031f, +0.007251f, - -0.001984f, +0.000754f, -0.003510f, -0.001139f, -0.001124f, -0.000567f, -0.002028f, +0.001808f, +0.002450f, -0.005782f, - +0.004991f, +0.000994f, -0.002081f, +0.001082f, -0.000310f, -0.004325f, -0.002296f, +0.002210f, +0.002940f, +0.003752f, - -0.000599f, -0.002691f, +0.000193f, +0.003666f, +0.000957f, -0.000693f, -0.000357f, -0.000065f, +0.000061f, -0.003195f, - -0.000010f, +0.001525f, +0.000160f, -0.000011f, -0.000620f, +0.001542f - }, - { - +0.007725f, -0.085097f, -0.002819f, +0.012037f, -0.000184f, +0.000469f, -0.008656f, +0.001162f, -0.005206f, -0.003519f, - +0.001948f, -0.001045f, -0.005143f, -0.010877f, +0.105405f, -0.021055f, +0.000769f, +0.015712f, +0.001586f, +0.032245f, - -0.022675f, -0.022501f, -0.021134f, +0.004905f, +0.022954f, -0.006559f, -0.015629f, -0.035401f, -0.016469f, +0.011039f, - +0.006436f, +0.013007f, +0.002364f, -0.004920f, +0.003841f, +0.013974f, +0.012512f, +0.013325f, +0.003739f, +0.000885f, - +0.006534f, -0.011960f, +0.010278f, -0.010163f, -0.011505f, -0.006479f, -0.008686f, +0.000948f, +0.002242f, -0.006762f, - -0.004525f, -0.000004f, -0.001427f, +0.009961f, +0.005062f, +0.004217f, -0.002273f, -0.004174f, -0.004962f, +0.001670f, - -0.004565f, -0.001777f, +0.006486f, -0.000263f, -0.004333f, -0.004156f, -0.001646f, -0.005075f, -0.003201f, -0.004336f, - +0.000988f, -0.000056f, -0.001222f, -0.000169f, +0.001292f, +0.001860f, +0.002174f, -0.002136f, +0.000554f, +0.000815f, - -0.000455f, -0.004335f, +0.001222f, +0.003799f, +0.004437f, +0.000251f, -0.000879f, -0.000886f, -0.003476f, -0.001895f, - -0.002032f, -0.000139f, +0.000145f, -0.001367f, +0.000289f, +0.001109f - } - }, - { - { - -0.006202f, +0.041130f, +0.061582f, +0.049766f, -0.019043f, +0.008486f, -0.004938f, +0.015414f, -0.001801f, -0.005006f, - -0.010140f, +0.009812f, -0.031412f, -0.018326f, +0.016368f, -0.029276f, -0.011746f, -0.008309f, -0.002837f, -0.021529f, - -0.003875f, +0.011100f, +0.009701f, -0.004642f, -0.002708f, +0.007015f, -0.006484f, +0.004138f, +0.002837f, +0.010188f, - -0.013538f, +0.009230f, +0.007548f, +0.005840f, -0.004359f, +0.008621f, +0.002809f, +0.004991f, -0.004562f, -0.004017f, - +0.010237f, -0.001044f, -0.008975f, +0.001359f, +0.002034f, -0.004026f, +0.010194f, -0.003238f, +0.001293f, -0.003171f, - +0.002730f, -0.008230f, +0.004805f, -0.006399f, +0.003354f, +0.001585f, -0.000420f, -0.003339f, -0.003291f, +0.002334f, - -0.002133f, -0.003760f, -0.002120f, +0.001323f, -0.004703f, +0.002536f, +0.001981f, -0.001159f, -0.000374f, -0.000785f, - +0.000367f, +0.001503f, +0.002866f, -0.001644f, -0.001830f, -0.002285f, +0.000979f, +0.000538f, +0.002943f, +0.002155f, - +0.000796f, -0.001501f, -0.000329f, -0.001291f, +0.001088f, +0.000948f, -0.001507f, +0.001165f, -0.001632f, +0.000740f, - +0.000351f, +0.000456f, -0.000696f, -0.000166f, +0.000910f, -0.000400f - }, - { - +0.002388f, -0.002013f, +0.001642f, -0.017208f, +0.003652f, -0.002300f, -0.006857f, +0.006432f, +0.001338f, -0.000860f, - -0.017918f, -0.011738f, +0.012032f, -0.005955f, -0.005304f, -0.017767f, -0.007014f, +0.014100f, -0.001319f, +0.019621f, - -0.010130f, -0.001896f, +0.004210f, +0.021212f, -0.033534f, +0.011393f, +0.012005f, -0.003865f, +0.006070f, +0.000553f, - +0.026563f, -0.017789f, +0.012268f, -0.011748f, +0.008380f, -0.006895f, -0.004346f, -0.003868f, +0.001227f, -0.005803f, - -0.004918f, +0.003849f, +0.004683f, -0.009435f, +0.000791f, -0.002406f, -0.000740f, -0.007625f, +0.001422f, +0.002845f, - -0.005288f, -0.000796f, -0.000523f, -0.002058f, -0.004052f, -0.001357f, +0.003068f, -0.003720f, +0.006325f, +0.000325f, - -0.003106f, -0.002050f, -0.001394f, +0.003981f, -0.001226f, +0.001947f, -0.002760f, -0.000803f, +0.001507f, -0.001076f, - +0.003281f, +0.000296f, -0.000155f, +0.000148f, +0.002266f, +0.000100f, +0.001832f, +0.002474f, +0.000001f, -0.000890f, - +0.001502f, -0.000729f, +0.000592f, -0.001444f, -0.000106f, +0.000354f, -0.001771f, +0.000994f, +0.001007f, +0.002220f, - +0.000111f, -0.000927f, +0.000401f, +0.000555f, -0.000908f, +0.001295f - }, - { - +0.001390f, +0.026715f, +0.023965f, -0.010838f, +0.013290f, -0.004917f, +0.005052f, +0.002763f, -0.008130f, +0.004307f, - +0.013467f, -0.029244f, +0.001618f, +0.007243f, +0.014490f, +0.003786f, -0.021101f, +0.029407f, -0.030942f, +0.015067f, - +0.008164f, +0.000987f, +0.000790f, -0.001671f, +0.005095f, +0.008877f, +0.007410f, -0.000048f, +0.013077f, -0.002028f, - -0.009315f, +0.009476f, +0.000698f, -0.015174f, -0.004318f, +0.002657f, +0.001521f, -0.001183f, +0.002748f, +0.001566f, - -0.001903f, +0.003817f, +0.004633f, -0.003828f, +0.005793f, -0.006148f, +0.000144f, +0.000683f, -0.008068f, -0.004392f, - +0.002762f, -0.002726f, -0.000340f, -0.004872f, +0.004358f, -0.003320f, +0.002635f, -0.004803f, +0.000338f, -0.000192f, - -0.000273f, -0.004346f, +0.001065f, -0.002266f, -0.000657f, +0.002133f, -0.000152f, -0.001894f, +0.002987f, +0.001900f, - -0.000184f, -0.002040f, -0.000359f, -0.002432f, +0.000113f, +0.001487f, -0.001733f, -0.000359f, -0.001309f, -0.001942f, - +0.001264f, +0.002500f, -0.000661f, +0.001845f, +0.000685f, -0.000264f, -0.001033f, -0.000566f, -0.000630f, -0.000208f, - -0.000549f, -0.001037f, +0.000132f, -0.001064f, +0.000869f, +0.000608f - }, - { - +0.082386f, -0.140381f, +0.021834f, +0.103399f, -0.020785f, +0.010043f, +0.006187f, -0.005920f, +0.004864f, -0.004945f, - +0.003871f, +0.003117f, -0.004755f, -0.001658f, -0.011436f, +0.019428f, -0.010538f, -0.015781f, -0.012186f, +0.002405f, - +0.003791f, -0.004849f, +0.001171f, -0.011768f, -0.000140f, +0.009333f, +0.004736f, +0.006190f, -0.001134f, +0.002007f, - +0.018864f, -0.009438f, +0.002226f, -0.002574f, -0.001533f, -0.002442f, +0.002821f, +0.002079f, -0.005495f, +0.001555f, - -0.007895f, +0.002028f, -0.001021f, -0.005978f, +0.012107f, +0.010763f, +0.000788f, -0.002439f, -0.005295f, +0.001485f, - -0.004851f, +0.011367f, +0.004717f, -0.003116f, +0.000656f, -0.001467f, -0.002880f, +0.001033f, -0.005329f, +0.002208f, - +0.002470f, -0.000749f, +0.001310f, +0.003330f, -0.003478f, +0.000482f, -0.002391f, -0.002798f, +0.001267f, +0.001784f, - -0.000462f, +0.000638f, -0.001137f, -0.000949f, +0.000091f, -0.001213f, +0.001067f, +0.000850f, -0.000277f, +0.000174f, - -0.000671f, +0.000518f, -0.002559f, -0.000804f, +0.000185f, +0.002496f, +0.000336f, -0.001402f, +0.000322f, -0.000045f, - -0.001244f, -0.000402f, +0.000242f, -0.000135f, -0.000808f, +0.000198f - }, - { - +0.000645f, -0.061528f, +0.010580f, +0.008868f, -0.001804f, -0.000660f, -0.000097f, -0.001448f, +0.002533f, -0.000236f, - -0.015512f, -0.000743f, -0.011680f, -0.021339f, -0.018050f, +0.007924f, +0.005661f, +0.009743f, -0.051571f, +0.022514f, - +0.007028f, +0.014725f, -0.002325f, -0.018717f, -0.005183f, -0.009578f, +0.035617f, -0.027432f, -0.000532f, -0.005064f, - -0.004791f, +0.000753f, -0.003880f, +0.006031f, +0.000026f, -0.002744f, +0.004106f, +0.006895f, -0.007426f, -0.003019f, - +0.007776f, -0.006323f, +0.001573f, +0.001102f, -0.002859f, +0.004254f, +0.004158f, -0.003930f, +0.001553f, +0.006312f, - +0.002074f, -0.003874f, -0.001302f, +0.001040f, +0.001142f, -0.004786f, +0.000560f, -0.005009f, +0.000633f, +0.005565f, - +0.003342f, -0.004361f, +0.003814f, -0.003021f, +0.004315f, -0.002799f, +0.000229f, +0.002639f, +0.001276f, +0.003506f, - -0.004018f, +0.001063f, +0.001012f, +0.003109f, +0.000288f, +0.000258f, +0.001763f, +0.002119f, -0.000433f, -0.000831f, - +0.001064f, +0.001521f, +0.000373f, +0.001922f, +0.000124f, -0.000546f, -0.000560f, -0.000025f, +0.000042f, -0.000035f, - +0.001520f, +0.001283f, -0.000685f, -0.000298f, +0.000581f, -0.000384f - }, - { - +0.110560f, -0.094230f, +0.011348f, -0.037230f, -0.035301f, -0.004354f, -0.003057f, -0.014450f, -0.006173f, +0.007222f, - -0.012408f, -0.015268f, +0.009277f, -0.008440f, +0.013770f, +0.014582f, -0.001565f, +0.003759f, +0.001142f, +0.013605f, - -0.006782f, -0.007493f, -0.001494f, -0.002514f, -0.010900f, -0.001031f, +0.003873f, -0.002648f, +0.006681f, -0.000085f, - -0.000477f, +0.004961f, -0.003481f, -0.003286f, -0.001037f, +0.003121f, +0.002863f, +0.006777f, +0.003115f, -0.005086f, - -0.007908f, -0.008943f, -0.001479f, -0.011586f, +0.004661f, +0.006367f, -0.013331f, -0.004711f, +0.002563f, -0.002399f, - -0.009847f, +0.004219f, -0.004569f, +0.006792f, -0.001604f, +0.004269f, +0.001655f, +0.003078f, -0.002404f, +0.000709f, - +0.001454f, -0.002286f, -0.002701f, +0.003200f, -0.003344f, -0.002744f, +0.001982f, -0.003063f, +0.000074f, -0.000709f, - -0.000064f, +0.001460f, -0.002667f, +0.001906f, -0.000820f, +0.001219f, -0.001248f, +0.000822f, -0.001890f, -0.000912f, - -0.000285f, +0.002840f, -0.001067f, +0.000227f, +0.001044f, +0.001275f, -0.001011f, +0.000298f, +0.000124f, +0.000464f, - -0.000993f, +0.001112f, +0.000008f, +0.000204f, +0.001751f, -0.000261f - }, - { - -0.000381f, -0.015922f, +0.006083f, -0.006032f, +0.004448f, -0.000199f, -0.001702f, +0.006829f, +0.000239f, -0.001438f, - +0.004180f, +0.008540f, +0.003908f, +0.006965f, +0.001668f, -0.033378f, +0.038942f, +0.020846f, +0.006062f, -0.024524f, - +0.001127f, +0.019993f, +0.009396f, +0.000166f, +0.016634f, +0.029773f, -0.028301f, -0.010176f, -0.015229f, +0.028594f, - -0.001657f, -0.012060f, +0.003141f, +0.008444f, +0.002346f, -0.003470f, +0.005748f, +0.006204f, +0.000802f, -0.004488f, - -0.000266f, -0.005672f, -0.001268f, +0.002334f, +0.005447f, +0.009543f, -0.001655f, +0.007121f, -0.000264f, -0.001201f, - -0.004407f, -0.000858f, +0.005423f, -0.000985f, +0.000703f, +0.000360f, +0.002890f, -0.004557f, +0.006547f, -0.005594f, - -0.000645f, +0.004480f, +0.003557f, +0.002250f, +0.001411f, -0.000087f, +0.001020f, -0.001307f, +0.000052f, -0.003245f, - +0.002669f, +0.001470f, -0.000239f, -0.000155f, +0.002433f, -0.001621f, +0.000339f, -0.000436f, +0.000946f, -0.000345f, - -0.000269f, -0.000456f, +0.002058f, -0.000799f, -0.001272f, -0.000219f, +0.000788f, -0.001183f, -0.001270f, +0.000209f, - +0.000171f, -0.001042f, +0.001311f, +0.000852f, -0.000442f, +0.000382f - }, - { - -0.031846f, -0.409565f, +0.061353f, -0.075654f, +0.012552f, -0.000508f, -0.023662f, +0.000466f, +0.011005f, +0.009339f, - -0.003237f, -0.006408f, +0.000353f, -0.003763f, +0.019134f, -0.026926f, -0.001904f, +0.017785f, +0.005606f, +0.016590f, - -0.005716f, -0.008373f, -0.012236f, +0.000505f, +0.001557f, -0.000438f, -0.000863f, -0.012353f, -0.005913f, -0.002603f, - -0.000938f, -0.004770f, +0.002694f, +0.005491f, +0.001178f, -0.004497f, -0.011721f, +0.001493f, +0.000031f, +0.000697f, - -0.007609f, +0.005116f, +0.005530f, -0.005477f, +0.009442f, -0.005125f, -0.001874f, +0.011640f, +0.001705f, +0.001060f, - -0.000548f, -0.010568f, +0.000043f, +0.003080f, -0.000249f, +0.001809f, +0.000401f, -0.004036f, +0.003705f, -0.001611f, - -0.005094f, +0.005075f, +0.000356f, +0.000228f, +0.003300f, +0.004375f, +0.000901f, -0.003228f, +0.003003f, -0.000743f, - -0.001049f, +0.002839f, +0.001505f, -0.001880f, -0.002155f, -0.003561f, -0.001559f, +0.000373f, -0.001238f, -0.000872f, - -0.000180f, -0.000224f, -0.001824f, -0.000734f, -0.001214f, +0.001968f, +0.000048f, -0.001334f, +0.001516f, -0.000829f, - -0.001053f, +0.000712f, -0.000767f, +0.000620f, -0.001128f, +0.001148f - }, - { - +0.000212f, +0.010466f, -0.018547f, +0.007614f, -0.005842f, -0.000071f, -0.000686f, +0.000354f, +0.001344f, +0.002977f, - -0.006809f, +0.004024f, +0.003769f, +0.019602f, -0.056289f, -0.042743f, -0.000292f, +0.008684f, -0.018032f, +0.025212f, - +0.000708f, -0.001318f, -0.004557f, +0.004670f, -0.003653f, +0.010206f, +0.026774f, -0.018378f, +0.010979f, -0.005253f, - +0.010207f, +0.017117f, -0.010965f, -0.012619f, +0.016406f, -0.015236f, -0.007430f, +0.005726f, -0.003924f, +0.004252f, - +0.005669f, +0.002860f, +0.003051f, -0.005883f, -0.005062f, -0.000151f, +0.001135f, +0.000500f, -0.002009f, -0.003757f, - +0.001168f, +0.000372f, -0.003610f, -0.000133f, -0.001783f, -0.000857f, -0.001106f, -0.002496f, -0.001295f, +0.000701f, - +0.006181f, +0.000296f, +0.002566f, -0.001056f, +0.000209f, +0.000548f, -0.001609f, -0.002929f, +0.000328f, -0.005802f, - -0.001871f, -0.002462f, -0.000487f, +0.001718f, -0.000084f, -0.002422f, -0.000279f, -0.002252f, +0.000292f, +0.000199f, - -0.001016f, -0.000811f, +0.002753f, +0.000704f, +0.000786f, +0.001913f, +0.000136f, +0.001178f, +0.000733f, -0.000213f, - +0.001183f, -0.001351f, -0.000507f, -0.000166f, +0.001044f, -0.000199f - }, - { - -0.049023f, +0.032256f, +0.058908f, +0.008350f, -0.005563f, -0.018469f, +0.011465f, +0.021689f, -0.003994f, -0.001545f, - -0.010587f, +0.016343f, +0.006656f, -0.002320f, -0.008861f, -0.004767f, -0.003394f, -0.002139f, -0.018869f, +0.012343f, - +0.006037f, +0.001454f, +0.001012f, -0.016040f, +0.013816f, +0.001654f, -0.014398f, -0.008564f, +0.006277f, +0.007688f, - -0.015847f, +0.008659f, +0.000281f, +0.008442f, -0.013725f, -0.002485f, +0.000940f, -0.000301f, +0.004904f, +0.002354f, - -0.011786f, +0.001505f, -0.000366f, -0.009649f, +0.006553f, -0.002014f, -0.008474f, +0.001030f, +0.002470f, -0.001963f, - +0.008918f, -0.004258f, -0.001424f, -0.001262f, -0.001151f, +0.002127f, -0.005216f, +0.003829f, +0.000673f, -0.002718f, - +0.000319f, -0.005011f, -0.001537f, +0.001694f, +0.000327f, +0.000636f, +0.002894f, -0.000825f, +0.004764f, +0.000011f, - +0.001450f, +0.000543f, +0.002137f, -0.001168f, +0.002804f, -0.000797f, +0.000235f, -0.002422f, +0.000456f, +0.000864f, - +0.002668f, +0.000548f, -0.001922f, -0.000587f, +0.000202f, +0.000080f, +0.001041f, +0.001138f, -0.001351f, -0.000038f, - -0.001508f, +0.000975f, -0.001043f, +0.000291f, -0.000538f, +0.000808f - }, - { - +0.004856f, -0.033514f, +0.003861f, -0.003302f, -0.000525f, +0.002951f, -0.012784f, +0.003150f, +0.001056f, +0.014928f, - +0.007726f, -0.009892f, +0.008888f, -0.002140f, -0.004850f, +0.000488f, -0.006804f, +0.020633f, +0.000108f, -0.002185f, - +0.005729f, -0.004822f, -0.016222f, +0.003060f, +0.010144f, +0.000320f, -0.016333f, -0.010290f, -0.013994f, +0.023216f, - +0.018722f, -0.008415f, +0.000352f, -0.011769f, -0.000016f, -0.017500f, +0.008734f, -0.002409f, +0.004652f, -0.002383f, - -0.013960f, +0.007154f, -0.012593f, -0.001722f, +0.007207f, -0.007764f, +0.001524f, -0.001869f, +0.002746f, +0.002280f, - +0.001249f, -0.002700f, -0.002511f, +0.003151f, +0.004697f, -0.005681f, -0.000928f, -0.002155f, -0.000991f, +0.003902f, - +0.004366f, -0.005540f, -0.000581f, +0.003725f, +0.004020f, -0.004571f, -0.002824f, +0.000664f, +0.000495f, -0.000824f, - -0.001129f, +0.000770f, +0.001729f, +0.000694f, -0.001178f, -0.000645f, +0.000056f, +0.000051f, -0.000264f, +0.000769f, - -0.001321f, +0.001509f, -0.001765f, -0.001037f, -0.000226f, -0.000180f, +0.000450f, +0.000210f, +0.001204f, +0.000125f, - -0.000441f, +0.000474f, +0.000232f, -0.000059f, -0.000025f, +0.000369f - }, - { - -0.099443f, -0.108108f, -0.037781f, +0.005652f, +0.006328f, +0.021036f, +0.025653f, -0.012358f, -0.009653f, +0.008500f, - +0.015546f, +0.001939f, +0.003638f, -0.008413f, +0.011314f, +0.004398f, +0.003643f, -0.017835f, -0.022495f, +0.012945f, - +0.017895f, -0.004148f, +0.009578f, -0.000457f, +0.033381f, -0.003840f, +0.027082f, -0.008193f, +0.004110f, -0.012246f, - +0.004234f, -0.001539f, -0.009561f, -0.008503f, +0.004252f, -0.001524f, -0.014636f, +0.005960f, -0.003407f, +0.005404f, - -0.006079f, +0.002179f, -0.014049f, -0.000816f, +0.005099f, -0.011101f, -0.006415f, +0.004808f, -0.004500f, -0.000287f, - +0.003693f, -0.003602f, +0.000122f, -0.001004f, -0.002928f, -0.002220f, +0.000116f, +0.002698f, -0.000783f, +0.000425f, - +0.002954f, -0.000569f, -0.001663f, -0.000186f, -0.000786f, +0.002658f, -0.003489f, +0.000087f, +0.001924f, -0.000943f, - +0.001101f, +0.002842f, +0.000364f, -0.002220f, -0.002169f, -0.000815f, +0.000171f, -0.000763f, +0.000452f, -0.001470f, - +0.001719f, +0.000375f, -0.000321f, +0.001234f, -0.002422f, -0.000705f, +0.000735f, -0.001395f, -0.001305f, +0.002721f, - -0.000050f, -0.001009f, +0.000416f, +0.000846f, -0.000456f, +0.000417f - }, - { - -0.000038f, -0.072490f, +0.009017f, -0.003548f, -0.001994f, -0.006825f, +0.000007f, -0.005271f, +0.001077f, -0.008009f, - +0.009388f, -0.011589f, -0.011948f, +0.013923f, +0.001064f, -0.032618f, +0.017155f, -0.023559f, -0.002220f, +0.012185f, - -0.058625f, +0.001808f, -0.015873f, -0.013326f, -0.010053f, -0.000943f, -0.016093f, -0.014584f, +0.018557f, +0.004357f, - +0.007339f, -0.002575f, +0.009574f, +0.001831f, -0.001514f, +0.005597f, +0.012625f, +0.003655f, +0.009575f, -0.001525f, - +0.003704f, -0.000772f, +0.009671f, +0.000933f, +0.002041f, -0.005479f, -0.007196f, -0.004980f, -0.000333f, -0.003334f, - +0.005513f, -0.001994f, +0.002818f, +0.001277f, -0.002530f, -0.002558f, -0.003415f, +0.000198f, +0.001716f, -0.002662f, - +0.001777f, +0.000722f, +0.002128f, -0.001172f, -0.002326f, -0.001058f, +0.001372f, -0.004368f, -0.000040f, -0.001050f, - -0.000122f, +0.000112f, -0.000437f, -0.000539f, -0.000017f, +0.001235f, -0.000276f, -0.003860f, -0.001190f, +0.002264f, - -0.000230f, -0.000307f, -0.000779f, +0.001101f, +0.001508f, -0.001316f, -0.000836f, -0.000010f, -0.001184f, +0.000389f, - +0.000719f, +0.000496f, -0.001310f, -0.001190f, +0.000629f, +0.000214f - }, - { - -0.043096f, +0.168146f, -0.030473f, +0.040362f, +0.012291f, +0.026263f, +0.012631f, -0.001917f, +0.005331f, -0.019854f, - +0.021923f, -0.034651f, +0.007491f, -0.010788f, +0.019496f, -0.015587f, +0.009814f, -0.005260f, -0.015524f, -0.002917f, - -0.007017f, +0.008487f, -0.001062f, +0.002982f, +0.001049f, +0.001516f, -0.010771f, -0.003902f, +0.004683f, -0.013349f, - +0.006634f, +0.003111f, +0.001160f, -0.001840f, -0.000460f, -0.004702f, +0.007147f, -0.000378f, +0.006680f, -0.012692f, - -0.009844f, -0.000706f, +0.000361f, -0.002474f, +0.006316f, +0.008005f, +0.003442f, +0.000809f, -0.002101f, +0.000656f, - -0.000167f, +0.009585f, -0.000869f, -0.000089f, +0.007034f, -0.002507f, +0.001379f, +0.000533f, -0.004718f, +0.002052f, - -0.002939f, +0.002817f, -0.001011f, +0.002071f, +0.000949f, +0.000360f, -0.001710f, -0.000030f, +0.000860f, -0.004488f, - +0.006518f, +0.002088f, -0.001336f, -0.000542f, +0.000039f, -0.001934f, -0.002389f, +0.001192f, +0.001649f, +0.002346f, - +0.000821f, -0.000866f, -0.000408f, +0.001195f, -0.000516f, -0.002806f, +0.000101f, +0.000876f, +0.000551f, -0.001518f, - +0.000616f, +0.000953f, +0.000323f, +0.000050f, -0.000617f, +0.001683f - }, - { - -0.007661f, -0.057960f, +0.032244f, +0.000319f, -0.002592f, +0.007869f, -0.013671f, +0.004937f, +0.003828f, +0.001261f, - +0.001142f, -0.003576f, +0.010387f, -0.005616f, +0.081720f, -0.013428f, -0.008578f, +0.003546f, -0.010875f, +0.004853f, - -0.015452f, -0.001766f, -0.016162f, +0.000764f, +0.010830f, -0.008649f, -0.003531f, -0.008110f, +0.012994f, +0.010924f, - -0.012155f, +0.004741f, -0.002543f, -0.008183f, +0.003444f, +0.011376f, -0.002808f, +0.002315f, +0.002701f, -0.005618f, - +0.009545f, -0.001527f, +0.012718f, -0.005585f, -0.000219f, +0.005349f, -0.000347f, +0.000113f, +0.004650f, -0.002269f, - -0.000036f, -0.002099f, -0.003076f, +0.003164f, -0.002023f, -0.000154f, -0.004118f, -0.000725f, -0.001853f, +0.002517f, - -0.002703f, -0.001979f, +0.006234f, +0.000229f, -0.004178f, -0.004022f, +0.002133f, +0.000151f, +0.001590f, -0.000123f, - +0.001397f, +0.001209f, -0.000635f, +0.000150f, +0.000874f, +0.000803f, +0.001479f, -0.001549f, +0.000443f, -0.001457f, - -0.002021f, -0.001926f, +0.001524f, +0.001482f, +0.000852f, -0.000561f, +0.000204f, +0.000572f, -0.000507f, +0.000004f, - -0.000924f, +0.000896f, +0.000882f, -0.000960f, +0.000873f, -0.000433f - } - }, - { - { - +0.010017f, +0.090806f, +0.064807f, +0.020127f, +0.004666f, +0.005564f, +0.003327f, -0.001042f, +0.000838f, -0.000887f, - -0.011803f, +0.008190f, -0.007102f, -0.014462f, -0.005276f, -0.027594f, -0.012193f, -0.006058f, -0.007113f, -0.001164f, - -0.005687f, +0.008123f, +0.009737f, +0.002880f, -0.006749f, -0.003146f, -0.004776f, +0.004085f, +0.002364f, +0.003950f, - +0.001786f, +0.008836f, +0.000614f, +0.002411f, +0.003712f, +0.002269f, +0.011137f, -0.003219f, -0.005662f, +0.002438f, - +0.006168f, -0.002706f, +0.003574f, -0.002247f, -0.002014f, +0.004582f, +0.002178f, +0.001195f, +0.000254f, +0.000404f, - -0.001826f, -0.002437f, +0.000406f, -0.000691f, +0.001411f, -0.000990f, +0.001432f, -0.003912f, +0.000933f, -0.000788f, - -0.005143f, -0.000227f, -0.001379f, +0.000369f, -0.001383f, -0.000383f, +0.001600f, +0.000209f, +0.000488f, -0.000707f, - -0.000258f, +0.001185f, +0.000033f, +0.001293f, -0.002066f, -0.000481f, +0.000579f, +0.000741f, +0.001319f, +0.001312f, - +0.000438f, +0.000309f, -0.001786f, -0.001088f, +0.000522f, +0.000564f, -0.001244f, +0.000576f, -0.001054f, +0.000605f, - +0.000222f, +0.000306f, -0.000760f, +0.000526f, +0.000249f, -0.000234f - }, - { - -0.000934f, +0.016318f, -0.005139f, -0.002559f, -0.010752f, +0.001562f, -0.005891f, -0.000032f, +0.001502f, -0.003495f, - -0.007524f, -0.004713f, +0.002494f, -0.005453f, +0.000742f, -0.019450f, -0.002468f, +0.014635f, +0.024240f, -0.002472f, - -0.008762f, +0.003235f, -0.007579f, +0.004605f, +0.000896f, +0.002650f, -0.003836f, -0.000588f, +0.007135f, +0.008622f, - +0.009908f, -0.004046f, -0.000229f, +0.009017f, -0.017670f, +0.003139f, -0.009756f, -0.006206f, +0.004896f, -0.002968f, - -0.004024f, +0.000489f, -0.001464f, +0.002747f, -0.007896f, -0.002343f, -0.001404f, -0.002247f, -0.000988f, +0.002916f, - -0.002736f, -0.003698f, -0.000790f, -0.003445f, -0.000485f, -0.000016f, +0.001257f, -0.000847f, +0.002615f, -0.000698f, - -0.002518f, -0.000444f, -0.000632f, +0.000279f, +0.001014f, -0.001942f, +0.000184f, +0.000575f, -0.001234f, +0.000459f, - +0.002177f, -0.000712f, +0.003250f, +0.001007f, +0.000958f, +0.000501f, +0.000757f, +0.002617f, +0.000180f, -0.001278f, - -0.000893f, +0.001614f, +0.000362f, -0.001797f, +0.000051f, -0.000544f, -0.000399f, +0.000908f, +0.000538f, +0.001217f, - +0.000511f, -0.000046f, -0.000398f, +0.000335f, -0.000011f, +0.000698f - }, - { - -0.000143f, +0.047005f, +0.011701f, +0.020070f, -0.006701f, -0.001830f, +0.005955f, +0.005299f, -0.004522f, +0.001460f, - -0.000444f, -0.016231f, +0.001870f, +0.010118f, +0.000801f, +0.004075f, -0.006613f, +0.003183f, +0.002831f, -0.002871f, - +0.008315f, -0.013002f, +0.005524f, +0.003939f, -0.000640f, +0.001973f, +0.004511f, +0.005646f, +0.007912f, +0.000202f, - -0.005622f, +0.007685f, -0.002816f, -0.001946f, -0.007861f, -0.001776f, +0.002074f, +0.000656f, -0.000429f, +0.003712f, - +0.001994f, +0.002399f, +0.001566f, -0.001509f, -0.001139f, -0.000933f, -0.000983f, -0.005186f, -0.002510f, -0.004885f, - -0.001067f, +0.000828f, -0.000505f, -0.003664f, +0.003669f, -0.002763f, +0.001698f, -0.002229f, -0.000572f, -0.000391f, - -0.002893f, -0.001994f, -0.000762f, -0.000858f, -0.000732f, +0.000296f, +0.000654f, -0.000573f, +0.001661f, -0.000053f, - +0.002246f, -0.000713f, -0.002098f, -0.001858f, -0.000793f, -0.000577f, +0.001366f, -0.000623f, -0.001022f, -0.001548f, - -0.000563f, +0.001863f, +0.000971f, +0.001411f, +0.000350f, -0.000372f, -0.000800f, -0.000991f, -0.000492f, -0.000779f, - -0.000146f, -0.000461f, -0.000177f, +0.000147f, -0.000165f, +0.000524f - }, - { - -0.048100f, +0.063035f, -0.002537f, +0.083575f, +0.002580f, -0.001299f, +0.007027f, +0.003494f, +0.004862f, +0.002229f, - -0.004788f, +0.000340f, +0.004248f, -0.001384f, +0.012498f, +0.004222f, -0.002732f, -0.014356f, -0.008239f, +0.001509f, - +0.008400f, -0.010567f, -0.008513f, +0.000776f, -0.000356f, +0.007456f, -0.002246f, +0.007010f, -0.001245f, +0.002424f, - +0.011963f, -0.003139f, -0.002345f, -0.001487f, -0.000054f, +0.000270f, -0.000471f, +0.000154f, +0.000419f, -0.000114f, - -0.012188f, +0.004203f, -0.000606f, -0.005091f, +0.010607f, +0.007956f, +0.003531f, +0.001274f, -0.004576f, -0.004054f, - -0.001031f, +0.008371f, +0.002291f, +0.000418f, -0.001835f, -0.000902f, -0.002368f, -0.003597f, -0.000721f, +0.001997f, - +0.000198f, -0.001896f, +0.000322f, +0.003596f, -0.001061f, -0.002073f, -0.001137f, -0.002934f, +0.001105f, +0.000608f, - +0.000164f, -0.000144f, -0.000605f, -0.001103f, -0.000263f, -0.000975f, +0.000640f, -0.000327f, -0.000349f, -0.000280f, - +0.000861f, -0.000144f, -0.001034f, -0.001058f, +0.000704f, +0.001709f, -0.000054f, +0.000397f, -0.000463f, -0.000317f, - -0.001366f, +0.000169f, -0.001102f, +0.000244f, -0.001096f, -0.000177f - }, - { - +0.000420f, -0.049401f, +0.001055f, +0.003618f, +0.001106f, -0.000147f, -0.000060f, -0.004794f, -0.000105f, -0.000045f, - -0.009247f, -0.007926f, -0.013541f, -0.012068f, -0.005294f, +0.023234f, +0.003271f, -0.053061f, -0.016713f, +0.015281f, - +0.011442f, +0.000184f, +0.006047f, -0.010947f, +0.000301f, +0.018184f, -0.013103f, -0.010294f, -0.002860f, +0.004161f, - -0.006725f, +0.000379f, -0.007853f, +0.001709f, +0.003034f, -0.001709f, -0.003281f, +0.006377f, -0.006103f, +0.000720f, - -0.000461f, -0.001437f, -0.002726f, +0.001486f, +0.000428f, +0.003464f, -0.001904f, +0.000581f, -0.001972f, +0.003286f, - -0.000041f, +0.001002f, -0.002426f, +0.001166f, -0.002076f, -0.000894f, +0.000243f, -0.004314f, +0.004539f, +0.004995f, - -0.001588f, -0.001397f, -0.000043f, +0.000389f, +0.000907f, +0.001375f, -0.002489f, +0.000283f, +0.000458f, +0.002266f, - +0.000618f, -0.001244f, +0.001408f, +0.001119f, +0.002059f, +0.000657f, +0.002072f, +0.000442f, -0.000052f, +0.000162f, - -0.000438f, +0.001191f, +0.000965f, +0.001762f, +0.000232f, -0.000398f, -0.000294f, -0.000500f, +0.000403f, +0.000485f, - +0.000675f, +0.000719f, +0.000879f, -0.000045f, -0.000688f, -0.000013f - }, - { - -0.060383f, +0.135257f, -0.011593f, -0.045279f, -0.003187f, -0.005185f, -0.007650f, -0.007847f, -0.004536f, -0.013299f, - -0.002834f, -0.006215f, -0.011306f, -0.001520f, +0.011106f, +0.010120f, +0.007095f, -0.003002f, +0.007265f, +0.001592f, - -0.010665f, -0.004511f, -0.000411f, -0.006828f, +0.001346f, -0.002668f, +0.000988f, -0.002924f, +0.001986f, -0.003862f, - -0.000272f, +0.010689f, -0.002102f, -0.000172f, -0.000834f, +0.004661f, -0.001910f, +0.004640f, +0.006294f, -0.003495f, - -0.008408f, -0.008838f, -0.003977f, -0.003537f, -0.003839f, +0.000597f, -0.002628f, -0.000304f, -0.004613f, -0.006869f, - -0.003699f, -0.005587f, +0.000674f, +0.003544f, +0.002678f, -0.001052f, +0.004102f, +0.003857f, +0.001226f, +0.000344f, - -0.000107f, -0.004710f, -0.001356f, -0.000907f, -0.001466f, -0.001255f, -0.000824f, -0.001101f, -0.000871f, +0.000582f, - +0.000032f, -0.000500f, -0.001003f, -0.000331f, +0.000642f, -0.000630f, -0.000057f, +0.001436f, -0.001615f, -0.000838f, - -0.000889f, +0.001693f, +0.000118f, +0.000250f, +0.000481f, +0.001601f, -0.000614f, -0.000125f, +0.001089f, -0.001483f, - -0.000290f, +0.000324f, +0.000408f, +0.001364f, +0.000264f, -0.000034f - }, - { - +0.001319f, -0.003488f, -0.005813f, -0.004281f, +0.000225f, +0.000726f, -0.000947f, +0.003171f, +0.000970f, +0.001057f, - -0.000027f, +0.008203f, -0.002726f, -0.005135f, +0.000553f, +0.028454f, +0.012530f, +0.007736f, +0.008702f, -0.004442f, - -0.009273f, +0.004029f, +0.016097f, +0.006915f, +0.018475f, +0.012021f, -0.021863f, -0.006513f, -0.011869f, +0.021617f, - +0.002987f, -0.008440f, -0.010641f, +0.002956f, +0.010961f, +0.000208f, +0.005026f, +0.000997f, +0.006474f, -0.004502f, - -0.001694f, -0.003541f, -0.000867f, +0.003171f, +0.005713f, +0.007100f, -0.000337f, +0.006622f, +0.000980f, +0.001354f, - -0.006095f, -0.001595f, +0.006034f, +0.000768f, -0.000546f, +0.000397f, -0.000708f, +0.001749f, -0.000610f, -0.001317f, - +0.001549f, +0.004103f, +0.001551f, +0.002750f, +0.001016f, +0.002366f, -0.000227f, -0.002051f, -0.002432f, +0.000347f, - +0.000743f, +0.001104f, +0.000164f, +0.000463f, +0.000196f, -0.000547f, -0.000220f, +0.000437f, +0.000348f, -0.000307f, - -0.000646f, +0.000632f, +0.001574f, -0.001055f, -0.000973f, +0.000042f, +0.000424f, -0.001432f, -0.000341f, -0.000059f, - -0.000748f, +0.000474f, +0.000371f, +0.000933f, +0.000412f, +0.000113f - }, - { - -0.019144f, -0.323714f, -0.004829f, -0.050792f, -0.011981f, -0.000061f, -0.015179f, -0.002345f, +0.008634f, +0.006217f, - -0.003295f, -0.004151f, +0.006833f, -0.004161f, +0.011026f, -0.013036f, -0.001765f, +0.005661f, +0.005106f, +0.012063f, - -0.001498f, -0.008866f, -0.011574f, -0.003842f, -0.002038f, +0.004243f, -0.006826f, -0.010438f, -0.008435f, +0.003003f, - -0.002305f, -0.002815f, -0.001399f, +0.003639f, +0.003222f, -0.009443f, -0.000871f, -0.005892f, -0.002156f, +0.002046f, - +0.000326f, -0.001551f, +0.004867f, -0.000599f, -0.001883f, +0.000159f, +0.002215f, +0.003216f, +0.004680f, -0.002962f, - -0.004493f, -0.001549f, -0.004755f, +0.003763f, -0.002322f, +0.003625f, -0.001874f, +0.001048f, -0.001235f, +0.000835f, - -0.001674f, +0.000560f, +0.002160f, +0.001090f, +0.001934f, +0.004867f, +0.000717f, -0.000746f, +0.000289f, -0.000508f, - +0.001085f, +0.000048f, +0.001768f, -0.000711f, -0.002539f, -0.002697f, -0.001082f, -0.000597f, -0.000366f, -0.000216f, - -0.000984f, -0.000131f, -0.001509f, -0.001204f, +0.000216f, +0.000274f, -0.000689f, -0.000291f, -0.000134f, +0.000126f, - +0.000105f, -0.000202f, -0.000563f, -0.000213f, +0.000010f, +0.000507f - }, - { - +0.001702f, -0.004080f, -0.001356f, -0.006125f, -0.000549f, -0.000112f, +0.000835f, -0.001290f, +0.001150f, -0.000236f, - +0.002052f, -0.000184f, -0.003799f, -0.000527f, -0.013597f, -0.020795f, +0.001188f, -0.005185f, -0.009653f, +0.000623f, - +0.002533f, +0.015799f, +0.002279f, -0.006870f, +0.000701f, +0.015458f, +0.013876f, +0.010557f, -0.013509f, +0.003854f, - +0.014256f, +0.004942f, -0.001115f, -0.007104f, -0.000597f, -0.003040f, -0.006601f, -0.001949f, -0.000264f, -0.002333f, - +0.009058f, +0.004039f, -0.004707f, -0.006724f, -0.001144f, +0.001621f, +0.004571f, -0.000368f, -0.001625f, -0.003902f, - +0.001016f, +0.004713f, -0.005195f, +0.000495f, -0.001457f, -0.000931f, -0.002067f, -0.002461f, -0.001349f, +0.003878f, - +0.002814f, +0.002489f, +0.001541f, +0.000043f, +0.000568f, -0.000364f, -0.000279f, -0.001808f, -0.002891f, -0.002459f, - -0.003303f, -0.000559f, -0.000766f, -0.000897f, -0.001265f, -0.001320f, -0.000050f, -0.002318f, -0.000225f, -0.000157f, - +0.000281f, +0.000289f, +0.001040f, +0.001562f, +0.000218f, +0.001336f, +0.000612f, +0.001629f, +0.000134f, +0.000097f, - +0.000124f, -0.000431f, -0.000764f, +0.000166f, -0.000195f, +0.001046f - }, - { - +0.041891f, -0.041207f, +0.034631f, -0.004929f, +0.013842f, -0.016317f, -0.007971f, +0.013463f, +0.007009f, -0.006545f, - -0.005348f, +0.006885f, +0.019298f, -0.002753f, -0.000189f, -0.015138f, -0.002405f, +0.000449f, -0.016987f, +0.015210f, - +0.006188f, -0.002276f, -0.001471f, +0.000946f, -0.002204f, -0.006502f, -0.017111f, +0.003572f, +0.002222f, +0.007627f, - -0.017359f, +0.006594f, -0.000220f, +0.005368f, -0.003535f, -0.006840f, +0.001871f, +0.002442f, +0.004100f, -0.002889f, - -0.008837f, +0.000058f, +0.000842f, -0.009122f, -0.006888f, +0.004598f, -0.005567f, +0.003447f, +0.000018f, +0.001324f, - +0.001056f, +0.003473f, -0.001502f, -0.002260f, -0.001392f, +0.000172f, +0.000292f, +0.000044f, +0.001746f, -0.001528f, - -0.001556f, -0.001341f, -0.000898f, -0.000437f, +0.002590f, +0.001216f, -0.000859f, +0.002244f, +0.003924f, +0.000940f, - +0.000411f, -0.000049f, +0.002126f, -0.000397f, +0.001221f, +0.000110f, -0.001167f, +0.000012f, -0.000902f, +0.001572f, - +0.000805f, +0.001334f, -0.002362f, -0.000744f, -0.000368f, +0.000008f, +0.000843f, +0.000515f, -0.001077f, -0.000482f, - -0.000657f, +0.000114f, -0.000314f, +0.000124f, +0.000405f, -0.000878f - }, - { - -0.004876f, -0.033296f, +0.009675f, +0.005598f, -0.004128f, +0.002119f, -0.006367f, -0.000014f, -0.000136f, +0.008528f, - +0.004240f, +0.006601f, -0.002239f, +0.012866f, +0.002765f, -0.007048f, -0.004944f, +0.001576f, +0.016229f, +0.004258f, - -0.004510f, +0.000349f, -0.007035f, -0.006818f, +0.015124f, -0.011232f, -0.009512f, -0.016294f, -0.001262f, +0.011948f, - +0.024871f, -0.011624f, +0.001915f, -0.007390f, -0.009948f, -0.008810f, -0.000027f, +0.005499f, +0.007078f, -0.005231f, - -0.002860f, -0.004174f, -0.006347f, -0.002046f, +0.002606f, -0.002322f, -0.003427f, +0.003559f, +0.000847f, +0.004110f, - +0.000325f, -0.002352f, +0.000853f, +0.000296f, +0.002717f, -0.000996f, -0.003583f, -0.000951f, -0.001009f, +0.002007f, - +0.001730f, -0.003101f, +0.001460f, +0.002894f, +0.001132f, -0.000934f, -0.001939f, -0.000722f, +0.001734f, -0.001283f, - -0.001110f, -0.000870f, +0.001109f, +0.000901f, -0.000203f, -0.002370f, +0.000170f, -0.000493f, +0.000663f, +0.000130f, - +0.000699f, +0.000108f, -0.000707f, -0.000445f, -0.000326f, -0.000810f, +0.000009f, +0.000866f, +0.000700f, +0.000088f, - -0.000152f, +0.000572f, -0.000428f, +0.000357f, +0.000071f, +0.000365f - }, - { - +0.047880f, -0.311115f, -0.019974f, -0.009466f, +0.000805f, +0.044796f, +0.005574f, -0.018569f, -0.007963f, +0.009910f, - +0.010765f, +0.007287f, +0.000169f, -0.007607f, +0.000593f, +0.017871f, +0.003876f, -0.012170f, -0.022101f, +0.014880f, - +0.000307f, +0.009068f, +0.004791f, +0.016047f, +0.006079f, +0.009060f, +0.013406f, +0.002646f, +0.003494f, -0.008723f, - -0.001001f, -0.004241f, -0.002291f, +0.000622f, -0.004798f, -0.009363f, -0.004766f, +0.002703f, -0.000686f, +0.005861f, - -0.004422f, -0.000092f, -0.006154f, -0.010191f, +0.000257f, -0.002735f, -0.001223f, -0.002403f, -0.000631f, +0.000275f, - +0.000619f, +0.001175f, -0.004024f, +0.002394f, -0.005461f, -0.000120f, -0.001772f, +0.005353f, +0.001127f, +0.001520f, - -0.001957f, +0.002737f, -0.003414f, -0.000743f, -0.000755f, +0.002685f, +0.001714f, -0.002994f, -0.000000f, +0.000205f, - +0.002859f, +0.000250f, +0.000180f, -0.002290f, -0.001516f, -0.000614f, -0.000632f, -0.000527f, -0.000802f, +0.000046f, - -0.000091f, +0.000956f, -0.000069f, -0.000197f, +0.000216f, -0.001387f, +0.000119f, -0.000717f, -0.000825f, -0.000018f, - +0.000941f, -0.000143f, +0.000381f, +0.000034f, +0.000292f, +0.000377f - }, - { - +0.002202f, -0.053630f, -0.009798f, -0.003659f, +0.002215f, -0.005832f, +0.003094f, -0.006798f, +0.001984f, -0.004859f, - -0.001636f, -0.001029f, -0.008124f, +0.004089f, -0.023692f, -0.003331f, -0.005118f, -0.007435f, -0.005139f, -0.003435f, - -0.007511f, -0.047459f, -0.005632f, -0.020280f, +0.003212f, -0.005561f, -0.012173f, -0.020630f, +0.011820f, +0.001801f, - -0.001999f, +0.009255f, +0.011980f, +0.006827f, +0.001459f, +0.011876f, +0.008486f, +0.003659f, +0.006493f, -0.002836f, - +0.000629f, +0.000972f, +0.005616f, -0.002951f, +0.004009f, -0.001230f, -0.011299f, -0.001572f, -0.001727f, -0.003907f, - +0.003272f, +0.001423f, +0.004107f, -0.001282f, -0.004610f, -0.000482f, -0.002048f, +0.000749f, +0.001103f, -0.000776f, - -0.001318f, +0.001885f, -0.001008f, +0.001960f, -0.001009f, -0.002627f, -0.000727f, -0.000225f, -0.001612f, -0.000878f, - +0.001047f, -0.000448f, +0.000615f, +0.000121f, +0.000123f, +0.000125f, -0.000576f, -0.001720f, -0.000682f, +0.000309f, - +0.001055f, +0.001652f, -0.001009f, +0.001049f, +0.000262f, -0.000293f, -0.000594f, -0.000306f, -0.000334f, -0.000235f, - +0.001193f, -0.000324f, -0.001084f, -0.000440f, -0.000396f, -0.000478f - }, - { - +0.056154f, +0.017709f, +0.008070f, +0.009959f, +0.012594f, +0.027974f, +0.000990f, +0.013922f, -0.000666f, -0.003887f, - -0.015853f, -0.003433f, +0.000054f, -0.006478f, +0.008328f, +0.007313f, -0.009821f, -0.007310f, -0.014435f, -0.002476f, - -0.013220f, +0.003897f, +0.000653f, +0.001633f, +0.003935f, +0.000337f, -0.015320f, +0.006181f, +0.000251f, +0.001314f, - +0.003971f, -0.001027f, +0.000389f, +0.006606f, -0.005598f, -0.000732f, +0.008786f, +0.002648f, -0.001586f, -0.008941f, - -0.002362f, -0.008762f, -0.001338f, +0.000868f, +0.003384f, +0.014263f, +0.003706f, -0.004369f, +0.003796f, -0.006056f, - +0.000786f, +0.007420f, +0.002004f, -0.000652f, +0.002223f, +0.001323f, +0.000685f, +0.000190f, -0.006380f, -0.000718f, - +0.002110f, -0.000138f, +0.001820f, +0.003061f, -0.000690f, +0.000740f, -0.000573f, -0.001097f, -0.000833f, +0.000301f, - +0.001542f, +0.001858f, +0.001272f, -0.000131f, -0.001607f, -0.000189f, -0.002755f, +0.000761f, +0.001170f, +0.001233f, - +0.001480f, -0.000506f, +0.000257f, -0.001087f, +0.001111f, -0.001902f, -0.000207f, +0.000263f, -0.000190f, +0.000276f, - +0.000182f, +0.000069f, +0.000756f, -0.000043f, +0.000074f, +0.000790f - }, - { - +0.007682f, -0.030544f, -0.006187f, -0.001199f, -0.002859f, +0.005422f, -0.005872f, +0.007118f, -0.000246f, +0.002625f, - +0.002046f, -0.004834f, -0.003015f, +0.020464f, +0.037228f, +0.010576f, -0.004618f, -0.005754f, -0.015035f, -0.011414f, - +0.012682f, -0.007077f, -0.011032f, -0.004522f, -0.004433f, +0.001494f, -0.001674f, +0.007094f, +0.005173f, +0.003850f, - -0.003867f, -0.004087f, +0.001887f, -0.009315f, +0.001191f, +0.008350f, -0.002489f, -0.005813f, +0.006879f, -0.005605f, - +0.001245f, +0.004225f, +0.005542f, +0.006092f, -0.001078f, +0.001476f, +0.003074f, +0.001356f, +0.002834f, -0.001923f, - -0.001206f, +0.000548f, +0.000042f, -0.000470f, -0.001469f, -0.002964f, -0.001660f, -0.000633f, +0.000963f, -0.001105f, - -0.003179f, +0.001092f, +0.002485f, +0.000826f, -0.002845f, -0.000738f, +0.001159f, +0.001913f, +0.000498f, +0.001348f, - -0.000392f, +0.001710f, -0.000341f, +0.000729f, +0.000045f, +0.000566f, +0.000780f, -0.000405f, +0.000539f, -0.002605f, - -0.002462f, +0.000754f, +0.000683f, +0.000513f, -0.000527f, -0.000759f, +0.000182f, +0.000827f, +0.000581f, +0.000125f, - -0.000050f, +0.000789f, +0.000118f, +0.000186f, -0.000010f, -0.000625f - } - }, - { - { - -0.006723f, +0.065045f, +0.021526f, -0.022242f, -0.005087f, +0.001197f, -0.000163f, -0.004573f, -0.005879f, +0.008873f, - +0.010868f, +0.009867f, +0.000806f, -0.001406f, +0.009544f, -0.009952f, +0.005895f, +0.005522f, -0.003526f, +0.006370f, - +0.002548f, +0.006457f, +0.005332f, +0.002953f, -0.010116f, -0.004302f, -0.006617f, +0.002161f, +0.001906f, +0.001991f, - +0.000587f, +0.008404f, +0.001156f, +0.000118f, +0.000459f, -0.004669f, +0.009527f, +0.000813f, -0.001579f, +0.000211f, - +0.002947f, -0.000791f, +0.007086f, +0.001287f, -0.001264f, +0.005949f, +0.000562f, +0.001402f, -0.000137f, +0.002170f, - -0.000971f, -0.001413f, -0.000082f, +0.004422f, +0.001721f, -0.002384f, +0.002000f, -0.003523f, +0.001146f, +0.000863f, - -0.000973f, +0.003404f, +0.000161f, +0.000389f, +0.000404f, -0.000747f, +0.000300f, -0.000726f, +0.000436f, +0.000935f, - -0.000633f, -0.000412f, -0.000594f, +0.001431f, -0.001260f, -0.000075f, -0.000407f, -0.000352f, -0.000779f, +0.000139f, - -0.000258f, +0.000870f, -0.000140f, -0.000258f, +0.000229f, +0.000582f, -0.000377f, +0.000733f, -0.000382f, +0.000765f, - +0.000195f, -0.000041f, -0.000863f, +0.000475f, -0.000170f, -0.000206f - }, - { - +0.000346f, +0.013789f, -0.003100f, +0.025264f, +0.004894f, +0.001509f, -0.002810f, -0.004056f, -0.002235f, +0.001287f, - -0.000699f, +0.001234f, +0.005310f, +0.005214f, +0.010799f, +0.001719f, +0.007825f, -0.002791f, -0.000366f, -0.006651f, - +0.000720f, +0.011671f, -0.002207f, -0.003546f, -0.006141f, -0.008463f, -0.015483f, -0.002099f, +0.009564f, +0.004735f, - +0.002695f, -0.002114f, -0.004533f, +0.016752f, -0.012867f, +0.007644f, -0.002126f, -0.004754f, +0.001654f, -0.001540f, - -0.003669f, -0.000692f, -0.001664f, +0.007075f, -0.002511f, -0.002011f, -0.002920f, +0.002369f, +0.000211f, +0.002680f, - -0.001850f, -0.005297f, -0.001472f, -0.001817f, +0.000945f, -0.002426f, +0.000963f, -0.000777f, +0.001183f, -0.000994f, - -0.000594f, -0.000174f, -0.001180f, -0.000454f, +0.000753f, -0.001703f, -0.000192f, +0.000428f, -0.001246f, -0.000722f, - -0.000122f, -0.000537f, +0.002689f, +0.000149f, +0.000828f, -0.000079f, -0.000892f, +0.000359f, -0.001818f, -0.000283f, - -0.000058f, +0.001266f, +0.000197f, -0.000678f, +0.000136f, -0.000546f, +0.000705f, +0.000181f, -0.000949f, +0.000249f, - -0.000051f, +0.000354f, +0.000282f, +0.000117f, -0.000032f, -0.000022f - }, - { - +0.000814f, +0.020385f, -0.019981f, +0.033828f, +0.007681f, +0.000276f, +0.001511f, +0.004457f, +0.000028f, -0.002121f, - +0.001200f, -0.000569f, -0.000817f, +0.004340f, -0.001502f, +0.010372f, -0.000890f, -0.001702f, +0.010984f, -0.008375f, - +0.001961f, -0.014328f, +0.003965f, -0.007383f, -0.010580f, -0.005095f, +0.000303f, -0.004470f, -0.009353f, -0.000522f, - -0.005095f, -0.001446f, -0.003495f, +0.002827f, -0.000011f, +0.003539f, -0.000723f, -0.002013f, -0.001839f, -0.001606f, - -0.000828f, +0.000701f, +0.001310f, +0.002000f, -0.000715f, +0.000957f, -0.001686f, -0.007073f, -0.002271f, -0.002143f, - -0.000530f, +0.001512f, +0.003853f, +0.000900f, +0.004697f, -0.002454f, +0.001286f, +0.003589f, +0.002076f, -0.001464f, - -0.002106f, +0.000087f, -0.000152f, -0.000274f, -0.001926f, -0.000842f, -0.000087f, -0.001175f, -0.000039f, +0.000136f, - +0.002894f, +0.001047f, +0.000887f, +0.000262f, +0.000442f, -0.000355f, +0.001799f, -0.000643f, -0.000671f, +0.000222f, - -0.000004f, -0.000045f, -0.000143f, +0.000435f, +0.000486f, +0.000366f, -0.000389f, -0.000941f, -0.000230f, -0.000711f, - -0.000335f, -0.000014f, +0.000074f, +0.000315f, -0.000477f, +0.000250f - }, - { - +0.005790f, +0.136520f, -0.018566f, +0.074023f, +0.002450f, -0.004157f, +0.005136f, +0.009616f, +0.005153f, +0.001347f, - -0.003799f, +0.005058f, +0.014893f, +0.008118f, +0.010914f, -0.009910f, +0.000523f, -0.000949f, +0.010718f, +0.013062f, - +0.011199f, +0.001397f, +0.003217f, +0.004821f, +0.001173f, +0.011593f, -0.006674f, +0.006344f, -0.003641f, -0.003913f, - +0.005836f, -0.001301f, +0.001131f, +0.003463f, +0.003329f, +0.002124f, -0.006105f, +0.000070f, -0.001261f, +0.002441f, - +0.000591f, +0.007165f, -0.000669f, -0.002255f, +0.005932f, -0.001462f, +0.000060f, +0.003333f, +0.000371f, -0.001064f, - -0.003421f, +0.001671f, -0.000343f, +0.003090f, -0.000574f, +0.002231f, +0.000929f, -0.003314f, +0.001041f, +0.000943f, - -0.001630f, -0.001910f, -0.000149f, +0.001756f, -0.000080f, -0.002058f, -0.000843f, -0.000740f, +0.001683f, +0.000609f, - -0.000138f, -0.000287f, +0.000220f, -0.000855f, -0.000044f, -0.000469f, -0.000263f, -0.001945f, -0.000329f, +0.000670f, - +0.001405f, -0.000270f, -0.000301f, -0.000384f, +0.000400f, +0.000230f, -0.000497f, +0.000725f, -0.000582f, +0.000311f, - -0.000403f, +0.000721f, -0.001159f, +0.000523f, -0.000372f, +0.000457f - }, - { - -0.002288f, -0.044330f, -0.000060f, -0.003029f, +0.000912f, +0.000076f, +0.001081f, -0.002165f, -0.001605f, +0.003763f, - -0.003035f, -0.003858f, +0.000815f, +0.002121f, +0.004242f, +0.015753f, -0.013129f, -0.027393f, +0.017756f, +0.009590f, - +0.010156f, -0.010765f, -0.000887f, -0.004141f, -0.007262f, +0.011507f, -0.002805f, +0.008160f, -0.004244f, +0.009650f, - +0.007701f, +0.003190f, -0.002959f, -0.002671f, -0.000901f, +0.000005f, -0.005807f, +0.004240f, -0.003888f, +0.003932f, - -0.003277f, -0.002854f, -0.000785f, +0.003466f, -0.001534f, -0.000500f, -0.003910f, +0.001864f, -0.000014f, +0.003720f, - -0.000429f, +0.001558f, -0.001585f, +0.002213f, -0.001405f, +0.001428f, +0.001712f, -0.002197f, +0.003456f, +0.000954f, - -0.001561f, +0.001805f, -0.001704f, -0.000196f, +0.000563f, +0.002035f, -0.001998f, +0.000592f, +0.000345f, -0.000603f, - +0.001552f, -0.000278f, +0.000145f, -0.000364f, +0.001805f, -0.000200f, +0.000438f, -0.001055f, +0.000038f, +0.000203f, - -0.001360f, -0.000086f, -0.000328f, +0.000215f, +0.000416f, +0.000952f, +0.000291f, -0.000108f, +0.000981f, +0.000674f, - -0.000064f, -0.000036f, +0.001281f, +0.000584f, -0.000812f, +0.000469f - }, - { - +0.000165f, +0.206338f, -0.008699f, -0.023547f, -0.003743f, -0.000164f, +0.001430f, +0.005907f, -0.003447f, -0.013785f, - +0.000178f, +0.001950f, -0.000671f, +0.000587f, -0.000414f, +0.004639f, +0.001174f, -0.004290f, +0.009013f, -0.002429f, - -0.009928f, +0.005095f, +0.007110f, -0.008306f, +0.004638f, -0.002178f, -0.001721f, +0.001849f, +0.006759f, -0.001983f, - -0.005121f, +0.000862f, -0.010483f, -0.000940f, -0.000365f, +0.006759f, -0.001402f, -0.001788f, +0.001729f, +0.000246f, - -0.002463f, -0.001490f, +0.000755f, +0.004155f, -0.002188f, -0.000618f, +0.004277f, +0.004829f, -0.003985f, -0.001116f, - -0.001211f, -0.005342f, +0.003731f, +0.004013f, +0.005492f, -0.001208f, +0.000847f, +0.000052f, -0.001285f, +0.000484f, - +0.000136f, -0.005295f, +0.001008f, +0.001628f, +0.001919f, +0.001707f, -0.000650f, +0.000637f, -0.001483f, -0.000475f, - +0.000191f, -0.001580f, -0.001589f, -0.001979f, +0.000004f, -0.001101f, -0.001026f, +0.001222f, +0.000257f, +0.000220f, - -0.001040f, +0.001089f, +0.000130f, -0.000163f, -0.000175f, +0.000877f, -0.000190f, -0.000463f, +0.000311f, -0.001837f, - +0.000403f, +0.000409f, +0.000095f, +0.000651f, -0.000632f, +0.000023f - }, - { - -0.000305f, +0.010271f, +0.012632f, -0.000097f, +0.000909f, +0.001027f, -0.001609f, -0.001399f, -0.000117f, +0.000330f, - -0.004476f, +0.003272f, -0.004718f, +0.004084f, -0.000323f, +0.034782f, -0.001249f, -0.007537f, +0.017862f, +0.016389f, - -0.006004f, +0.002917f, +0.011391f, -0.011995f, -0.002848f, -0.016458f, -0.035139f, +0.000915f, -0.006080f, +0.005970f, - -0.001524f, +0.004597f, -0.008661f, -0.008952f, +0.004775f, -0.003330f, -0.002889f, -0.000985f, +0.005045f, -0.007051f, - -0.002578f, -0.000908f, +0.003910f, +0.000267f, -0.002632f, +0.003042f, -0.002287f, +0.002588f, -0.002130f, +0.002521f, - -0.003478f, -0.000130f, +0.004245f, +0.002838f, -0.001887f, -0.002422f, -0.001153f, +0.005523f, +0.000441f, -0.001762f, - +0.001084f, +0.001796f, -0.001200f, +0.002112f, +0.001120f, +0.001351f, -0.001063f, -0.001375f, -0.000657f, +0.001505f, - +0.000127f, +0.000195f, +0.000056f, +0.000825f, -0.000248f, -0.000782f, +0.000211f, -0.000131f, -0.001365f, -0.000579f, - -0.000791f, -0.000658f, +0.000667f, -0.000262f, -0.000181f, -0.000284f, +0.000733f, -0.000480f, +0.000391f, +0.000121f, - -0.000494f, +0.000728f, -0.000411f, +0.000521f, +0.000132f, -0.000126f - }, - { - +0.050409f, -0.212177f, -0.014862f, -0.045536f, +0.006706f, +0.004629f, +0.000500f, +0.000396f, -0.000641f, +0.006989f, - +0.004028f, +0.006401f, +0.009117f, +0.000139f, +0.007912f, -0.008510f, +0.000048f, -0.006706f, -0.004204f, +0.006380f, - +0.001512f, +0.001242f, -0.004651f, -0.010175f, -0.003014f, +0.003896f, -0.002280f, +0.001262f, -0.001705f, +0.006273f, - +0.003511f, -0.000374f, -0.002352f, -0.000737f, +0.002064f, -0.004970f, +0.009583f, -0.000831f, -0.003701f, +0.003623f, - +0.002454f, -0.003293f, +0.003064f, +0.002896f, -0.002918f, +0.000073f, -0.001179f, -0.003307f, +0.002528f, -0.000117f, - +0.000072f, +0.004236f, -0.001760f, +0.003760f, -0.000523f, +0.004335f, -0.001501f, +0.000785f, -0.001913f, +0.002178f, - -0.001260f, -0.002167f, +0.003014f, +0.001166f, -0.000809f, +0.002194f, -0.000731f, -0.000540f, +0.000052f, -0.001223f, - +0.000944f, -0.000777f, +0.001819f, +0.000891f, -0.000237f, +0.000251f, -0.000507f, -0.000502f, +0.000864f, +0.001467f, - +0.000048f, +0.000173f, -0.000880f, -0.000693f, +0.000006f, -0.000053f, -0.000353f, +0.000078f, -0.000734f, +0.000260f, - +0.000829f, +0.000020f, +0.000082f, -0.000200f, -0.000336f, +0.000269f - }, - { - -0.000094f, -0.004631f, +0.015040f, -0.005827f, +0.000558f, -0.000128f, +0.000101f, -0.001805f, +0.000877f, -0.001805f, - +0.004318f, +0.001564f, -0.003345f, +0.007629f, +0.004876f, +0.016703f, +0.015344f, -0.001722f, +0.000618f, +0.002383f, - -0.006615f, +0.003274f, +0.002668f, -0.012654f, +0.003047f, +0.015889f, -0.002613f, +0.009192f, -0.007524f, -0.000465f, - -0.004892f, -0.007118f, +0.012058f, -0.001371f, -0.006499f, +0.003716f, -0.003186f, -0.001558f, +0.003515f, -0.002762f, - +0.005376f, +0.003197f, -0.003071f, -0.000657f, +0.002670f, +0.000879f, +0.000552f, -0.000343f, +0.002101f, -0.001118f, - -0.000306f, +0.003766f, -0.003120f, +0.002874f, +0.001482f, -0.001324f, -0.000934f, +0.000218f, -0.001360f, +0.002011f, - +0.000644f, -0.001020f, -0.001642f, -0.000300f, -0.000136f, -0.002125f, -0.000320f, -0.000702f, -0.000814f, -0.000193f, - -0.001442f, +0.000765f, +0.000027f, +0.000840f, +0.000009f, -0.000745f, +0.000200f, -0.001647f, +0.000838f, -0.000253f, - +0.000243f, +0.000117f, +0.000236f, +0.000014f, -0.001617f, +0.000580f, -0.000692f, +0.000660f, -0.000015f, -0.000039f, - +0.000016f, +0.000379f, -0.000387f, +0.000130f, -0.000639f, +0.000717f - }, - { - -0.034706f, -0.113761f, +0.054238f, +0.010720f, +0.022847f, -0.004952f, -0.005470f, -0.003742f, -0.002699f, -0.004632f, - +0.004134f, +0.002794f, +0.011772f, -0.004371f, -0.000607f, -0.006920f, +0.006192f, +0.005336f, -0.019607f, +0.009695f, - -0.001906f, -0.002225f, -0.000410f, -0.003173f, -0.001014f, -0.000459f, -0.010768f, +0.012399f, +0.006933f, +0.003161f, - -0.017867f, +0.002094f, -0.002990f, +0.007527f, +0.000099f, -0.008165f, -0.000138f, -0.001554f, +0.002838f, -0.002480f, - -0.007978f, +0.002233f, +0.000449f, -0.004233f, -0.005387f, +0.002185f, -0.000284f, +0.006610f, -0.001937f, +0.000480f, - +0.000464f, +0.006143f, +0.001968f, +0.001744f, +0.001453f, +0.000773f, +0.000935f, -0.001135f, +0.001807f, +0.001626f, - +0.000859f, +0.000373f, -0.001672f, -0.001742f, +0.002019f, +0.000089f, -0.001240f, -0.000013f, +0.000536f, +0.002170f, - +0.000263f, -0.001281f, +0.000946f, -0.000562f, -0.000650f, -0.001290f, -0.000614f, +0.001127f, -0.001404f, +0.000318f, - -0.001849f, +0.000823f, -0.001607f, +0.000152f, -0.000510f, +0.000348f, +0.000526f, +0.000123f, -0.001002f, +0.000513f, - -0.000116f, +0.000398f, +0.000053f, -0.000623f, +0.000497f, -0.000403f - }, - { - +0.003343f, -0.025121f, -0.003468f, -0.002194f, -0.005843f, +0.000684f, -0.005714f, -0.001451f, -0.001642f, -0.003712f, - -0.000334f, +0.005808f, -0.009467f, +0.001262f, +0.000902f, -0.000239f, -0.001414f, -0.003889f, +0.014589f, +0.000381f, - -0.006176f, +0.012110f, +0.009204f, +0.002713f, +0.008794f, -0.018063f, -0.003191f, -0.009933f, +0.003422f, +0.001731f, - +0.014563f, -0.005622f, +0.004491f, -0.006417f, -0.006661f, +0.001023f, +0.001681f, +0.002420f, +0.005522f, -0.004475f, - +0.002897f, +0.002651f, -0.000716f, +0.000697f, -0.000436f, -0.001835f, -0.000284f, +0.003571f, -0.003668f, -0.000414f, - -0.002263f, +0.000818f, +0.002642f, -0.001436f, -0.001954f, +0.000328f, -0.000146f, +0.000744f, -0.000505f, +0.003392f, - +0.002358f, -0.000293f, +0.001391f, +0.000859f, +0.000234f, +0.000452f, -0.000848f, +0.000297f, +0.002129f, -0.000609f, - -0.000477f, -0.001010f, +0.000267f, +0.000419f, +0.000929f, -0.001099f, +0.000273f, -0.001318f, +0.000144f, -0.000211f, - +0.000272f, -0.000350f, -0.000252f, +0.000484f, +0.000372f, -0.000268f, -0.000545f, -0.000185f, -0.000216f, -0.000318f, - +0.000200f, +0.000823f, -0.000292f, +0.000333f, -0.000390f, +0.000013f - }, - { - +0.023341f, -0.332473f, -0.007099f, -0.015864f, -0.013992f, +0.007604f, -0.028144f, -0.008549f, -0.003829f, +0.005921f, - +0.002638f, -0.008527f, -0.004049f, +0.000812f, -0.001108f, +0.020007f, +0.004535f, -0.006094f, -0.017711f, +0.003761f, - -0.007656f, +0.014809f, +0.000993f, +0.008823f, -0.014134f, -0.003338f, -0.001393f, +0.000994f, +0.007489f, -0.001629f, - +0.000402f, -0.004541f, +0.001636f, +0.001816f, -0.008151f, -0.007759f, +0.001855f, -0.002574f, -0.007645f, +0.001779f, - -0.006008f, +0.002325f, +0.004510f, -0.004260f, -0.001714f, +0.002638f, +0.005130f, -0.000982f, +0.000871f, +0.002963f, - -0.000300f, +0.001195f, -0.005111f, +0.003526f, -0.001457f, +0.001671f, -0.002587f, +0.002826f, -0.001702f, +0.000241f, - -0.001563f, +0.003450f, -0.002436f, -0.000875f, -0.001172f, +0.000289f, +0.000809f, -0.001669f, -0.001055f, -0.000605f, - +0.001752f, -0.002377f, -0.000102f, -0.000566f, -0.000218f, -0.001135f, +0.000027f, +0.000521f, +0.000383f, +0.001142f, - +0.000323f, +0.000635f, +0.000401f, +0.000300f, +0.000796f, -0.000707f, -0.000612f, -0.000518f, -0.000930f, -0.000942f, - +0.000832f, -0.000208f, +0.000641f, -0.000090f, +0.000382f, +0.000358f - }, - { - -0.003796f, -0.034325f, +0.011257f, -0.001586f, +0.004281f, +0.002630f, +0.012397f, -0.005089f, +0.000790f, -0.003631f, - +0.000881f, +0.009550f, +0.004828f, -0.015650f, -0.034725f, +0.027844f, +0.009761f, +0.001511f, +0.001953f, -0.001161f, - +0.033000f, -0.001813f, +0.019664f, -0.013205f, -0.010485f, -0.007717f, +0.003610f, -0.014800f, +0.001510f, +0.004015f, - +0.003482f, +0.000183f, -0.003309f, +0.006382f, -0.000431f, +0.004916f, +0.002256f, -0.002230f, +0.002384f, +0.000784f, - -0.000106f, -0.009474f, -0.000713f, -0.003987f, +0.002030f, +0.006376f, -0.005585f, +0.001973f, +0.002089f, -0.002779f, - +0.002443f, +0.000486f, +0.003386f, +0.002772f, -0.000438f, +0.000816f, +0.001529f, -0.000780f, -0.001439f, +0.000978f, - -0.002758f, +0.000468f, -0.001308f, +0.000552f, +0.000060f, -0.000846f, +0.000700f, +0.002097f, -0.001227f, -0.001132f, - +0.001640f, +0.000329f, +0.000564f, -0.000108f, -0.000233f, +0.000381f, +0.001310f, +0.000213f, -0.000210f, -0.000577f, - +0.000087f, +0.000249f, -0.000513f, +0.001017f, -0.000231f, +0.000629f, -0.000301f, +0.000477f, +0.000421f, -0.000828f, - +0.000499f, -0.000033f, -0.000078f, +0.000119f, -0.000800f, -0.000390f - }, - { - -0.042092f, -0.111785f, +0.014510f, -0.008699f, +0.006156f, -0.002589f, -0.022797f, +0.007368f, -0.009514f, +0.003539f, - -0.010886f, -0.001144f, +0.001388f, -0.001998f, +0.012828f, +0.018069f, -0.005274f, +0.006902f, -0.010537f, -0.007179f, - -0.017977f, +0.001035f, -0.000849f, -0.002839f, +0.003659f, +0.004094f, -0.007131f, +0.012570f, +0.003244f, +0.006766f, - +0.002220f, +0.000814f, +0.002783f, +0.004467f, -0.004417f, -0.003002f, +0.001433f, -0.003911f, -0.005116f, -0.001573f, - +0.007191f, -0.008293f, -0.003474f, -0.000331f, -0.004010f, +0.003386f, +0.000813f, -0.006321f, +0.002683f, -0.004162f, - +0.001037f, +0.002347f, -0.001181f, +0.000218f, -0.000203f, -0.001862f, +0.001797f, +0.001290f, -0.003593f, +0.001108f, - +0.001639f, -0.001746f, +0.000205f, +0.000928f, -0.002294f, -0.000160f, -0.000846f, -0.000622f, -0.000944f, +0.001170f, - -0.000547f, +0.000332f, +0.000921f, +0.000346f, -0.001830f, +0.001138f, -0.001148f, +0.000201f, +0.000747f, -0.000591f, - -0.000319f, -0.000712f, -0.000097f, -0.002092f, +0.000744f, -0.000564f, +0.000612f, +0.000224f, -0.000025f, +0.000815f, - +0.000226f, +0.000140f, +0.000920f, +0.000128f, -0.000252f, -0.000103f - }, - { - -0.008392f, -0.024459f, +0.012005f, +0.001448f, -0.004912f, +0.004622f, -0.003474f, +0.002210f, -0.007467f, -0.002384f, - -0.000057f, -0.001760f, -0.003305f, -0.004249f, -0.008180f, -0.000829f, +0.002878f, -0.002717f, -0.009852f, -0.015703f, - +0.004421f, -0.007093f, -0.007898f, +0.001349f, +0.000140f, +0.003520f, -0.004670f, +0.001650f, -0.006370f, -0.007445f, - -0.000342f, -0.005955f, +0.003793f, -0.004946f, -0.004696f, -0.004533f, +0.000308f, -0.005498f, +0.001450f, -0.003909f, - +0.001621f, +0.002573f, -0.002356f, -0.000586f, -0.002634f, +0.001593f, +0.002487f, -0.000621f, -0.001794f, -0.002227f, - +0.002667f, +0.002161f, -0.000747f, +0.000638f, -0.000591f, -0.001222f, +0.001551f, +0.002212f, +0.000175f, -0.003082f, - -0.001837f, +0.001207f, -0.000218f, +0.001492f, -0.000233f, +0.001541f, +0.001737f, +0.001061f, -0.001547f, +0.001301f, - -0.000239f, +0.000956f, -0.000114f, -0.001138f, -0.002033f, -0.000719f, +0.000057f, -0.000416f, +0.000833f, -0.000193f, - -0.001024f, -0.000255f, -0.000501f, +0.000061f, -0.000068f, -0.000393f, -0.000001f, -0.000050f, +0.000407f, +0.000738f, - +0.000337f, +0.000299f, -0.000541f, +0.000398f, +0.000064f, -0.000291f - } - }, - { - { - +0.003802f, +0.090446f, -0.049549f, -0.021631f, +0.000623f, -0.001765f, -0.006916f, +0.005307f, -0.007098f, +0.005540f, - +0.017440f, +0.009965f, -0.004410f, -0.003813f, +0.015058f, -0.004892f, +0.005401f, +0.006489f, +0.005626f, -0.005226f, - +0.008092f, +0.001605f, +0.005975f, -0.006852f, +0.001259f, -0.003922f, -0.003781f, +0.001811f, +0.001799f, -0.000831f, - +0.000198f, +0.010446f, -0.002292f, +0.003149f, -0.006371f, -0.002232f, +0.003478f, +0.004760f, +0.003252f, +0.003588f, - -0.001234f, +0.003431f, +0.001806f, +0.003464f, -0.003604f, +0.005968f, +0.002211f, -0.001545f, +0.000861f, +0.002107f, - -0.003226f, -0.000056f, -0.000169f, +0.004787f, +0.001120f, -0.001550f, -0.000252f, -0.001630f, -0.001287f, +0.002737f, - +0.001090f, +0.002451f, +0.001638f, -0.001144f, +0.001057f, +0.000252f, -0.001258f, +0.001172f, -0.000950f, +0.001241f, - -0.000606f, -0.000429f, -0.000201f, +0.001407f, -0.000872f, -0.000246f, -0.000670f, -0.000675f, -0.000678f, -0.000247f, - +0.000815f, -0.000092f, +0.000804f, +0.000001f, -0.000421f, +0.000839f, +0.000294f, -0.000432f, +0.000723f, +0.000508f, - +0.000380f, +0.000138f, -0.000694f, +0.000359f, -0.000453f, +0.000158f - }, - { - -0.001645f, +0.008906f, +0.002598f, +0.018543f, +0.007231f, -0.003125f, -0.000203f, -0.000213f, -0.001419f, +0.000424f, - -0.005694f, +0.009640f, -0.003882f, +0.010800f, +0.003097f, +0.007294f, +0.003036f, +0.004489f, -0.019289f, -0.000410f, - +0.003589f, +0.007200f, +0.012349f, -0.005353f, -0.016411f, -0.009747f, -0.012402f, +0.003977f, +0.004949f, +0.001733f, - +0.001583f, +0.004865f, -0.001789f, +0.004165f, -0.002536f, +0.000009f, +0.005213f, +0.000143f, -0.001904f, -0.002814f, - +0.000294f, -0.001102f, -0.000506f, +0.004268f, +0.001536f, -0.003048f, -0.003400f, +0.000756f, +0.002886f, -0.000425f, - -0.001819f, -0.004448f, -0.001048f, +0.000084f, +0.000637f, -0.004162f, +0.000528f, -0.000183f, +0.001450f, -0.000672f, - -0.000829f, +0.000623f, -0.002305f, -0.000470f, +0.000928f, -0.000531f, -0.001162f, +0.000726f, -0.000428f, -0.001190f, - -0.001105f, +0.000412f, +0.000871f, -0.000314f, +0.000700f, -0.000879f, +0.000418f, -0.001112f, -0.000734f, +0.000379f, - -0.000148f, -0.000304f, +0.000624f, +0.000109f, +0.000053f, +0.000141f, +0.000745f, -0.000574f, -0.000371f, -0.000739f, - +0.000253f, -0.000247f, +0.001187f, +0.000223f, -0.000067f, -0.000471f - }, - { - -0.003326f, +0.007865f, -0.018921f, +0.011415f, +0.022596f, +0.004497f, -0.001317f, +0.002502f, -0.001798f, +0.000372f, - +0.000743f, +0.009368f, -0.008107f, +0.000023f, +0.010157f, +0.007320f, +0.004395f, -0.005706f, +0.000257f, -0.001499f, - +0.006253f, -0.010595f, -0.006868f, -0.009499f, -0.003515f, -0.002670f, +0.003085f, -0.005525f, -0.015027f, +0.001066f, - -0.006529f, -0.001697f, +0.006658f, -0.000806f, -0.003639f, +0.003808f, -0.002300f, -0.000067f, -0.002889f, -0.001452f, - -0.001803f, +0.001770f, +0.000581f, +0.003774f, +0.001589f, -0.000479f, -0.003947f, -0.001725f, -0.004235f, -0.001276f, - +0.001744f, -0.001017f, +0.003480f, +0.003465f, +0.001277f, -0.000292f, +0.001863f, +0.002128f, +0.001698f, -0.000059f, - -0.002069f, +0.001533f, -0.001057f, -0.000665f, -0.001844f, -0.000385f, -0.001833f, +0.000154f, -0.000449f, +0.001707f, - +0.000518f, +0.000819f, +0.002250f, -0.000283f, +0.000816f, +0.000022f, +0.000497f, -0.000064f, -0.000176f, +0.000398f, - +0.000567f, -0.000197f, -0.000789f, -0.000061f, +0.001050f, +0.000319f, -0.000313f, -0.000430f, -0.000932f, +0.000062f, - -0.000699f, +0.000052f, +0.000098f, +0.000052f, -0.000176f, -0.000068f - }, - { - +0.026114f, +0.108407f, -0.020680f, +0.080600f, -0.005062f, +0.000602f, -0.000227f, +0.010696f, +0.000762f, +0.001632f, - -0.007265f, +0.013062f, +0.009717f, +0.005732f, +0.001546f, -0.008641f, +0.004261f, +0.000557f, +0.014776f, +0.005755f, - +0.007484f, +0.005807f, +0.005603f, +0.008925f, -0.002390f, +0.009378f, +0.002795f, -0.001313f, +0.000373f, -0.001874f, - +0.000158f, +0.003926f, -0.003015f, +0.003154f, +0.000793f, +0.002703f, -0.004343f, +0.003156f, -0.003707f, +0.000117f, - +0.008130f, +0.002010f, -0.000381f, +0.004093f, -0.004205f, +0.000522f, +0.002994f, +0.001520f, +0.002972f, -0.000912f, - -0.002086f, -0.001077f, -0.000288f, +0.003404f, +0.000366f, +0.000468f, +0.001922f, -0.001207f, -0.000103f, -0.000444f, - -0.001696f, +0.000308f, +0.000653f, -0.001113f, +0.001709f, -0.001878f, +0.000011f, +0.000402f, -0.000399f, +0.000835f, - -0.000291f, +0.000689f, +0.000003f, -0.000199f, -0.000917f, +0.000727f, -0.001374f, -0.001608f, +0.000177f, +0.000909f, - +0.000224f, -0.000005f, -0.000293f, +0.000042f, -0.000199f, -0.000519f, +0.000544f, -0.000313f, +0.000020f, +0.000137f, - +0.000053f, +0.000169f, +0.000042f, +0.000161f, -0.000240f, +0.000361f - }, - { - +0.003873f, -0.040716f, -0.010638f, -0.003395f, +0.003549f, -0.001149f, -0.001181f, +0.002650f, -0.000541f, +0.000424f, - +0.000677f, -0.003888f, +0.005008f, +0.006000f, +0.005769f, -0.006324f, -0.021725f, +0.036907f, +0.014441f, -0.005708f, - +0.005982f, -0.019020f, -0.003001f, +0.004827f, -0.003854f, -0.008185f, +0.013471f, +0.000593f, +0.003939f, +0.007900f, - +0.009420f, -0.003560f, +0.006508f, -0.007743f, -0.007408f, +0.001796f, +0.003148f, -0.000897f, -0.006413f, +0.006429f, - -0.003696f, -0.003697f, +0.003171f, +0.000452f, +0.000768f, -0.001949f, -0.003625f, +0.003649f, +0.000986f, +0.002034f, - +0.001821f, +0.001003f, +0.000510f, -0.000744f, -0.000753f, +0.000536f, +0.001051f, +0.001540f, +0.000824f, +0.000225f, - -0.000446f, +0.002808f, -0.002700f, +0.000159f, +0.002008f, -0.000784f, +0.000575f, +0.000090f, +0.000888f, -0.001697f, - +0.002158f, -0.000284f, -0.000648f, +0.000155f, +0.000409f, +0.000131f, +0.000300f, -0.000448f, -0.000168f, -0.000223f, - -0.000810f, -0.000745f, -0.000312f, -0.000006f, +0.000955f, +0.001089f, +0.000188f, +0.000173f, +0.000334f, +0.000788f, - -0.000393f, +0.000162f, +0.001257f, +0.000344f, -0.000286f, +0.000994f - }, - { - +0.042897f, +0.138854f, -0.020323f, -0.026825f, +0.020437f, -0.000483f, -0.000298f, +0.008529f, -0.008956f, +0.002992f, - -0.004221f, +0.005996f, -0.001333f, +0.002142f, +0.002241f, +0.000630f, +0.002023f, -0.003057f, +0.008051f, +0.000922f, - -0.003155f, +0.003370f, +0.001002f, -0.002284f, +0.002328f, -0.002493f, -0.001498f, -0.000455f, +0.006364f, +0.006280f, - -0.006622f, -0.003410f, -0.008837f, +0.001299f, -0.003255f, +0.004611f, -0.002150f, -0.000578f, +0.003341f, -0.003652f, - -0.003302f, +0.004067f, -0.002955f, +0.002838f, +0.002874f, +0.000195f, +0.004541f, +0.003214f, -0.002821f, +0.000354f, - -0.006536f, +0.001961f, +0.003608f, +0.001784f, +0.006710f, +0.001404f, -0.001016f, -0.000010f, -0.001446f, -0.000502f, - -0.000670f, -0.001527f, +0.001802f, +0.001489f, +0.000947f, +0.001627f, -0.000571f, -0.000237f, -0.001070f, -0.001309f, - +0.002169f, -0.002066f, -0.001869f, -0.001207f, -0.001024f, -0.000656f, -0.000849f, +0.000645f, +0.000772f, -0.000340f, - -0.000418f, +0.000506f, -0.000146f, +0.000319f, +0.000122f, +0.000130f, +0.000005f, -0.000137f, -0.000602f, +0.000174f, - +0.000040f, +0.000243f, +0.000069f, -0.000123f, +0.000018f, +0.000348f - }, - { - -0.000518f, +0.028792f, +0.002093f, -0.002738f, +0.001547f, +0.000637f, -0.002152f, -0.001058f, +0.000968f, -0.000194f, - -0.002700f, +0.003715f, -0.004115f, -0.001395f, +0.013589f, +0.015542f, -0.009563f, -0.009776f, +0.021873f, +0.021103f, - +0.000397f, -0.001563f, +0.001195f, -0.023064f, +0.000302f, -0.008928f, -0.019974f, -0.022821f, +0.005638f, -0.004696f, - +0.000765f, +0.009070f, -0.010557f, -0.001993f, +0.007937f, -0.004263f, -0.007121f, +0.001172f, +0.005102f, -0.002992f, - -0.004421f, -0.004083f, +0.004399f, -0.000170f, -0.003606f, +0.002917f, -0.001889f, -0.000417f, -0.000268f, +0.003160f, - -0.002039f, +0.000566f, +0.000351f, +0.002427f, -0.001066f, +0.000855f, -0.001331f, +0.002778f, +0.000925f, -0.001091f, - +0.000128f, +0.000355f, +0.001275f, -0.000430f, +0.000507f, +0.000011f, +0.000707f, -0.000296f, -0.000738f, +0.000180f, - +0.000200f, +0.000965f, -0.000436f, +0.000678f, +0.000989f, -0.001107f, +0.000956f, -0.000245f, -0.001329f, -0.000901f, - -0.000403f, -0.000873f, +0.000423f, -0.000111f, +0.000114f, -0.000139f, +0.000109f, -0.000368f, +0.000426f, -0.000033f, - +0.000045f, -0.000287f, -0.000055f, +0.000136f, +0.000178f, -0.000136f - }, - { - -0.056552f, -0.093432f, +0.016562f, -0.045903f, -0.006792f, +0.001974f, +0.005153f, +0.007824f, -0.006388f, +0.007823f, - -0.000186f, +0.011677f, -0.004202f, +0.008008f, +0.003314f, -0.008717f, +0.005824f, -0.014189f, +0.002751f, +0.003565f, - +0.004968f, -0.000013f, -0.001555f, -0.010110f, -0.003786f, -0.000746f, +0.000743f, +0.001526f, +0.004503f, +0.003615f, - +0.003502f, +0.001009f, +0.001415f, +0.000151f, -0.000325f, -0.003344f, +0.010638f, -0.001979f, +0.002726f, -0.003095f, - +0.002723f, -0.001209f, -0.000253f, +0.001875f, +0.001629f, -0.002413f, -0.003121f, -0.003613f, +0.002682f, +0.000521f, - +0.003444f, -0.000295f, +0.002473f, +0.001292f, +0.001276f, +0.002530f, +0.000333f, +0.001170f, +0.000550f, -0.000924f, - -0.000971f, -0.000745f, +0.002130f, +0.001418f, -0.000510f, +0.000203f, -0.000981f, +0.000372f, +0.000529f, -0.002135f, - +0.000049f, +0.000408f, +0.000666f, +0.001414f, +0.000378f, +0.000146f, -0.000613f, +0.000459f, +0.000366f, +0.001649f, - +0.000438f, -0.000271f, +0.000226f, +0.000001f, -0.000966f, +0.000047f, +0.000646f, -0.000553f, -0.000385f, +0.000667f, - +0.000547f, -0.000091f, +0.000147f, +0.000508f, -0.000688f, -0.000423f - }, - { - -0.001452f, +0.006767f, +0.010448f, -0.001979f, -0.000635f, -0.000851f, -0.002741f, +0.001607f, +0.001321f, -0.002479f, - +0.002302f, +0.002675f, -0.004676f, +0.003261f, +0.003554f, +0.043739f, -0.025838f, +0.008821f, +0.006983f, +0.001090f, - +0.000043f, -0.003285f, -0.005636f, +0.001064f, +0.000928f, -0.007036f, +0.006487f, +0.012528f, -0.000271f, -0.002169f, - -0.013063f, -0.000191f, +0.009253f, +0.000500f, +0.001323f, +0.002028f, -0.004218f, -0.003780f, +0.003273f, +0.001818f, - -0.001314f, +0.003065f, -0.001158f, +0.003928f, -0.001646f, +0.000768f, -0.003584f, +0.000306f, +0.004993f, +0.000123f, - -0.002670f, +0.001481f, +0.000110f, +0.000311f, +0.003981f, -0.001479f, -0.002335f, +0.003200f, +0.000774f, -0.000632f, - -0.000896f, -0.002943f, -0.001884f, -0.000927f, +0.000857f, -0.003063f, -0.000314f, -0.000736f, +0.001073f, -0.000998f, - -0.000287f, +0.000282f, +0.000192f, +0.000383f, +0.000100f, +0.000546f, -0.000970f, -0.000401f, +0.000504f, -0.000326f, - -0.000142f, -0.000466f, +0.000607f, -0.000368f, -0.001064f, +0.000071f, -0.000124f, -0.000309f, +0.000365f, -0.000109f, - -0.000141f, +0.000118f, +0.000030f, -0.000270f, -0.000072f, -0.000160f - }, - { - +0.030113f, -0.140934f, -0.009004f, +0.021816f, +0.000688f, +0.014227f, +0.007371f, -0.006522f, -0.007670f, +0.000521f, - +0.007227f, +0.002973f, -0.008433f, -0.000997f, +0.001194f, -0.001340f, +0.002084f, +0.011375f, -0.017153f, -0.000732f, - +0.002050f, +0.000467f, -0.003494f, -0.008927f, +0.005185f, -0.001891f, +0.001249f, +0.006914f, +0.006495f, -0.003970f, - -0.003529f, -0.001072f, -0.002657f, +0.004925f, -0.003337f, -0.003559f, -0.002484f, -0.006868f, +0.006381f, +0.002338f, - -0.007733f, +0.003633f, -0.001705f, -0.004731f, +0.000230f, -0.002847f, +0.003681f, +0.000871f, +0.001674f, -0.000124f, - +0.000357f, +0.003757f, +0.003790f, +0.001805f, +0.000198f, +0.002398f, +0.000194f, -0.000386f, -0.000019f, +0.001695f, - +0.002368f, +0.000154f, -0.001733f, -0.000512f, -0.001148f, +0.001409f, +0.000847f, -0.000898f, -0.001657f, +0.002765f, - +0.000135f, +0.000264f, -0.000889f, -0.000719f, -0.000049f, -0.001095f, +0.000252f, -0.000047f, -0.000450f, -0.001022f, - -0.000899f, +0.000363f, +0.000114f, -0.000718f, -0.000049f, +0.001068f, -0.000446f, +0.000468f, +0.000215f, -0.000051f, - -0.000245f, +0.000391f, -0.000233f, -0.000489f, -0.000157f, +0.000748f - }, - { - -0.001053f, -0.021981f, -0.007894f, -0.005761f, +0.000882f, -0.001197f, -0.002120f, +0.001008f, +0.000061f, -0.008876f, - +0.000431f, -0.009339f, +0.007798f, -0.003196f, +0.003180f, -0.007651f, -0.001540f, -0.004966f, +0.010569f, -0.009249f, - +0.008508f, +0.002922f, +0.017067f, +0.009695f, -0.005273f, -0.013445f, -0.004848f, -0.001163f, +0.003467f, +0.001642f, - +0.001079f, +0.008707f, -0.002587f, -0.005097f, -0.003376f, +0.002972f, +0.001703f, -0.002974f, +0.002380f, +0.001851f, - -0.001123f, +0.003324f, +0.001150f, +0.003783f, -0.005424f, +0.001072f, +0.002561f, +0.000489f, -0.002851f, -0.000544f, - -0.004264f, +0.000772f, +0.001152f, +0.000740f, -0.002727f, +0.000963f, -0.000079f, +0.000169f, +0.000273f, +0.003025f, - +0.002849f, +0.001602f, +0.000404f, -0.000758f, -0.000050f, +0.000838f, +0.000258f, +0.000462f, +0.000230f, -0.000299f, - -0.000617f, -0.000242f, +0.000376f, +0.001406f, +0.000129f, -0.000294f, +0.000337f, -0.001160f, -0.000432f, -0.000440f, - +0.000131f, -0.000943f, +0.000565f, +0.000012f, +0.000996f, +0.000253f, -0.001388f, -0.000561f, -0.000295f, -0.000303f, - -0.000104f, +0.000598f, +0.000473f, +0.000262f, -0.000203f, -0.000233f - }, - { - -0.077186f, -0.191612f, -0.002980f, -0.006434f, -0.025891f, -0.038292f, +0.003018f, +0.004451f, -0.008298f, +0.008597f, - -0.007994f, -0.002124f, -0.012137f, +0.015859f, -0.004535f, +0.008609f, -0.003763f, +0.002443f, -0.012115f, -0.011163f, - +0.005758f, +0.013840f, +0.000712f, +0.003411f, -0.005607f, -0.010318f, -0.004070f, +0.004833f, +0.005571f, -0.001355f, - -0.001842f, -0.005654f, +0.000726f, -0.000125f, -0.007913f, +0.001272f, -0.003017f, -0.004873f, -0.006207f, -0.000396f, - +0.000452f, -0.006598f, +0.006529f, +0.000317f, +0.000175f, +0.001170f, +0.001851f, +0.001288f, +0.003123f, +0.002259f, - +0.000256f, -0.001195f, -0.001723f, +0.000891f, -0.000566f, +0.001136f, -0.000530f, -0.001110f, -0.001787f, -0.000273f, - +0.000915f, -0.000693f, +0.001818f, -0.000753f, -0.000743f, +0.000208f, -0.001526f, -0.000057f, -0.000718f, -0.000609f, - +0.000048f, -0.001463f, -0.001092f, +0.000932f, +0.000278f, -0.001271f, +0.000604f, +0.000104f, +0.000423f, +0.000696f, - +0.001323f, +0.000349f, -0.000219f, +0.000598f, +0.000433f, -0.000086f, -0.000532f, -0.000680f, -0.000605f, -0.000416f, - -0.000001f, -0.000000f, +0.000621f, +0.000137f, +0.000215f, +0.000246f - }, - { - +0.004245f, -0.017113f, -0.014744f, +0.003576f, +0.008158f, +0.005306f, +0.006567f, -0.006697f, +0.000029f, -0.001076f, - +0.002091f, +0.009135f, +0.004531f, -0.005774f, -0.023462f, +0.012813f, +0.015503f, -0.001872f, +0.010895f, -0.002412f, - +0.006670f, +0.042272f, +0.013247f, +0.008881f, -0.024253f, -0.014451f, +0.010226f, -0.002920f, -0.013193f, +0.010137f, - -0.002298f, +0.000573f, -0.002453f, +0.002674f, +0.000305f, +0.002714f, +0.001247f, -0.001527f, -0.003955f, +0.004123f, - +0.001729f, -0.007176f, -0.001765f, -0.002626f, -0.001815f, +0.006088f, +0.001007f, -0.000952f, +0.000899f, -0.000594f, - +0.001157f, +0.002421f, -0.000486f, +0.001568f, +0.003595f, +0.000570f, +0.000493f, -0.000834f, -0.001844f, +0.000099f, - -0.000896f, -0.000934f, +0.000627f, -0.001323f, +0.000673f, -0.000887f, -0.000562f, +0.000637f, +0.001166f, -0.001127f, - +0.000457f, +0.000894f, +0.000683f, +0.000387f, -0.000290f, +0.000553f, +0.000865f, +0.000634f, -0.000044f, -0.000983f, - +0.000123f, -0.000829f, +0.000936f, +0.000490f, -0.000171f, +0.000636f, -0.001062f, +0.000659f, +0.000292f, -0.000098f, - -0.000594f, +0.000151f, +0.000359f, +0.000081f, -0.000425f, -0.000207f - }, - { - +0.009627f, -0.169816f, -0.002697f, -0.010819f, +0.008852f, -0.017645f, -0.006253f, +0.002321f, -0.004430f, -0.001677f, - -0.000613f, -0.008972f, -0.002621f, +0.018940f, -0.001578f, +0.008066f, -0.002983f, +0.020684f, -0.019467f, -0.002079f, - -0.007458f, -0.003900f, -0.003103f, +0.002906f, -0.003139f, +0.000468f, +0.003490f, +0.004020f, +0.005800f, +0.004223f, - +0.002524f, +0.003000f, +0.001939f, -0.002338f, +0.001559f, -0.002017f, -0.004820f, -0.004380f, -0.001595f, +0.002114f, - +0.000640f, +0.003341f, -0.007571f, -0.003943f, -0.001117f, -0.005652f, -0.001642f, -0.000462f, -0.000068f, +0.000637f, - -0.000773f, +0.002828f, -0.002740f, +0.002306f, -0.000944f, -0.001843f, +0.004079f, -0.000902f, -0.000041f, -0.000240f, - +0.001154f, -0.000332f, -0.000758f, -0.000106f, -0.001860f, -0.001859f, +0.000099f, -0.001213f, -0.000457f, +0.001066f, - -0.000769f, -0.000124f, +0.001649f, -0.000859f, -0.000940f, +0.000495f, +0.000570f, -0.000452f, +0.000471f, -0.000233f, - -0.000751f, -0.000178f, -0.000577f, -0.001742f, +0.000035f, +0.000507f, +0.000051f, +0.000290f, +0.000147f, -0.000054f, - +0.000709f, +0.000544f, +0.000239f, -0.000170f, +0.000295f, -0.000223f - }, - { - +0.008299f, -0.025095f, -0.008518f, +0.009268f, -0.006459f, -0.001715f, +0.002464f, -0.003673f, -0.003326f, -0.006074f, - -0.000824f, -0.004808f, -0.002584f, +0.000182f, -0.002025f, -0.004899f, +0.006096f, -0.008859f, -0.008638f, -0.015401f, - +0.002364f, -0.012473f, +0.003380f, +0.004003f, +0.000199f, -0.004636f, +0.001518f, +0.002350f, -0.018143f, -0.003999f, - +0.002280f, -0.003317f, +0.004561f, -0.006599f, -0.005231f, -0.003975f, +0.005917f, -0.003737f, -0.001012f, -0.004708f, - +0.005640f, +0.002052f, -0.000770f, -0.004079f, -0.001486f, +0.000488f, +0.001412f, -0.000658f, -0.003158f, -0.002209f, - +0.001218f, +0.004422f, -0.001393f, -0.000772f, -0.001035f, +0.002571f, +0.002981f, -0.001812f, +0.001788f, -0.001679f, - -0.002082f, +0.001852f, -0.000060f, +0.001040f, -0.000580f, +0.002542f, -0.001634f, +0.000981f, -0.000695f, +0.000403f, - +0.001159f, -0.000524f, +0.001310f, -0.001573f, -0.000728f, -0.002148f, +0.000347f, -0.000234f, +0.000208f, +0.000477f, - -0.000723f, -0.000583f, -0.001407f, +0.000158f, +0.000790f, +0.000086f, -0.000498f, +0.000052f, +0.000077f, +0.000574f, - +0.000169f, +0.000341f, -0.000372f, +0.000320f, -0.000658f, +0.000259f - } - }, - { - { - -0.004022f, +0.071692f, -0.030597f, +0.013226f, +0.020625f, +0.002655f, -0.001163f, +0.017326f, -0.000973f, -0.002488f, - +0.004235f, +0.005832f, -0.007044f, -0.005041f, +0.014614f, -0.003959f, -0.002898f, +0.002522f, +0.004474f, -0.009338f, - +0.005148f, -0.000831f, +0.005814f, -0.009720f, +0.010201f, -0.000268f, +0.001425f, +0.007512f, +0.003482f, +0.001223f, - +0.002551f, +0.004633f, -0.011211f, +0.000680f, -0.008927f, -0.001107f, +0.001535f, +0.001630f, +0.005430f, +0.004294f, - +0.000317f, +0.003033f, -0.005493f, +0.003068f, -0.001575f, +0.002760f, +0.003085f, -0.000102f, -0.000422f, +0.001437f, - -0.002650f, +0.001665f, +0.002951f, +0.001572f, +0.001069f, +0.002103f, +0.001220f, +0.000119f, -0.001375f, +0.001560f, - -0.000012f, +0.000479f, +0.000360f, -0.000990f, +0.001003f, +0.001880f, +0.000593f, +0.002111f, +0.000510f, +0.001332f, - -0.001461f, +0.000213f, -0.000669f, -0.000058f, -0.000456f, +0.001012f, -0.000230f, -0.000864f, -0.000201f, -0.000764f, - +0.000784f, -0.000227f, +0.000603f, -0.000159f, -0.000509f, +0.000704f, -0.000023f, -0.000509f, +0.000434f, +0.000166f, - +0.000258f, +0.000385f, -0.000327f, +0.000352f, -0.000047f, +0.000562f - }, - { - +0.002294f, +0.004189f, -0.003487f, -0.018700f, -0.022785f, -0.000015f, +0.004327f, +0.008158f, +0.004049f, -0.001480f, - -0.012462f, +0.000673f, -0.003356f, +0.008048f, -0.001191f, +0.001897f, -0.015705f, -0.002837f, -0.008544f, +0.010335f, - +0.001659f, -0.003187f, +0.003599f, -0.006100f, -0.006630f, -0.001378f, -0.012829f, -0.000739f, +0.000038f, +0.000037f, - -0.000207f, +0.006006f, -0.006263f, -0.006293f, +0.007412f, +0.000599f, +0.003873f, +0.006616f, +0.002135f, -0.000680f, - +0.003167f, -0.000232f, -0.000015f, -0.002968f, -0.003137f, -0.002315f, -0.002900f, -0.002784f, +0.002124f, +0.002085f, - +0.000514f, -0.000395f, +0.001740f, +0.000385f, +0.001306f, -0.000525f, +0.002096f, -0.000234f, +0.001593f, +0.000500f, - -0.001128f, -0.000188f, -0.000992f, +0.000032f, -0.001116f, -0.001524f, -0.001115f, +0.000463f, +0.000059f, -0.000605f, - -0.000628f, -0.000259f, -0.000276f, -0.001751f, -0.000347f, -0.001292f, +0.000883f, -0.000484f, +0.000588f, +0.000025f, - -0.000428f, -0.000562f, +0.000288f, -0.000406f, -0.000272f, -0.000262f, -0.000529f, -0.000847f, +0.000196f, -0.000562f, - +0.000450f, -0.000433f, +0.000564f, -0.000257f, -0.000185f, -0.000300f - }, - { - +0.006623f, +0.024307f, -0.018324f, -0.053551f, -0.023061f, +0.004530f, -0.003360f, +0.000989f, -0.003695f, +0.003862f, - +0.008669f, +0.017776f, +0.000291f, +0.001393f, +0.004468f, +0.000518f, +0.002087f, -0.010071f, -0.011263f, +0.003534f, - +0.012222f, +0.001827f, +0.001526f, +0.001990f, +0.009016f, -0.003477f, +0.006871f, +0.004693f, -0.002642f, +0.001626f, - -0.005781f, +0.006133f, +0.010041f, +0.002670f, -0.001144f, +0.001383f, -0.005739f, +0.000517f, -0.000310f, +0.002698f, - +0.001342f, +0.003418f, -0.001160f, +0.000339f, +0.000702f, -0.000348f, +0.000106f, +0.002037f, -0.001720f, +0.000036f, - +0.003558f, -0.002754f, -0.000220f, +0.001071f, +0.000118f, -0.001852f, -0.000003f, -0.000500f, -0.000039f, -0.001269f, - -0.004051f, +0.000000f, -0.000539f, -0.000117f, -0.000729f, +0.000463f, -0.002056f, +0.000177f, -0.002097f, +0.000731f, - -0.000123f, -0.000489f, +0.001173f, -0.001438f, -0.000537f, -0.000284f, +0.000149f, -0.000448f, -0.000355f, -0.000202f, - +0.000225f, +0.000305f, -0.000659f, -0.000131f, +0.000381f, -0.000343f, -0.000443f, +0.000275f, -0.000642f, -0.000017f, - -0.000090f, +0.000017f, -0.000318f, +0.000046f, +0.000051f, +0.000068f - }, - { - -0.034802f, -0.002925f, -0.029563f, +0.095837f, -0.003518f, -0.001117f, -0.000371f, +0.006469f, -0.004480f, +0.002187f, - -0.010476f, +0.006741f, +0.002278f, -0.002545f, -0.007812f, -0.012547f, +0.002198f, -0.003539f, +0.010777f, -0.002034f, - -0.002226f, -0.000222f, +0.002261f, +0.000277f, -0.008031f, +0.004459f, +0.004477f, -0.002760f, +0.000897f, -0.002987f, - -0.001773f, +0.002642f, -0.007367f, +0.001609f, +0.000053f, +0.002456f, -0.000940f, +0.002395f, -0.003397f, +0.000927f, - +0.006059f, -0.002893f, -0.004443f, +0.003071f, -0.002471f, +0.000057f, +0.001865f, +0.002973f, +0.002845f, +0.001354f, - +0.002256f, -0.000067f, -0.003542f, -0.001154f, -0.000677f, -0.001891f, +0.000152f, +0.000982f, +0.000170f, -0.000443f, - -0.000795f, +0.001430f, +0.003101f, -0.000642f, +0.000363f, -0.000591f, +0.001277f, -0.000181f, -0.000510f, -0.000305f, - -0.002074f, +0.000046f, +0.000249f, -0.000211f, -0.001343f, +0.001238f, -0.000112f, +0.000118f, +0.000642f, +0.000117f, - -0.001142f, -0.000297f, -0.000396f, +0.000141f, +0.000158f, -0.000250f, +0.000833f, -0.000825f, +0.000291f, -0.000025f, - -0.000454f, -0.000102f, +0.000228f, +0.000411f, -0.000211f, +0.000296f - }, - { - -0.004382f, -0.028251f, +0.013432f, -0.003757f, -0.000663f, -0.001711f, -0.001038f, +0.006714f, +0.005052f, -0.001232f, - +0.001648f, -0.003314f, +0.004615f, +0.015182f, +0.015380f, +0.001930f, +0.003522f, +0.045921f, -0.007248f, -0.012660f, - +0.005985f, -0.015235f, -0.006396f, +0.002629f, -0.000957f, -0.019862f, +0.000830f, -0.005698f, +0.003813f, +0.003740f, - +0.007485f, -0.008533f, +0.005652f, -0.005017f, -0.014352f, -0.006343f, +0.006478f, +0.001016f, -0.005098f, +0.004271f, - -0.005248f, -0.003069f, +0.001740f, -0.003120f, -0.000807f, -0.002403f, -0.001467f, +0.004055f, +0.001846f, +0.002811f, - +0.000189f, -0.001225f, +0.000111f, -0.002032f, -0.000636f, -0.000514f, -0.001001f, -0.001289f, -0.000391f, +0.001753f, - -0.000842f, +0.001437f, -0.000645f, +0.000085f, +0.000396f, -0.002358f, +0.001132f, -0.000005f, +0.001559f, -0.000434f, - +0.000817f, +0.000648f, +0.000128f, -0.000410f, -0.000539f, -0.000819f, -0.000593f, -0.000292f, -0.000415f, -0.000050f, - +0.000212f, -0.000344f, -0.000039f, +0.000093f, +0.000121f, -0.000150f, -0.000184f, +0.000497f, -0.000248f, +0.000283f, - +0.000007f, -0.000080f, +0.000346f, -0.000007f, +0.000025f, +0.000855f - }, - { - -0.050430f, +0.012409f, +0.008351f, -0.042469f, -0.007734f, +0.003581f, -0.000509f, +0.003920f, +0.000097f, +0.007684f, - -0.006163f, +0.007929f, +0.000027f, -0.002876f, +0.000265f, +0.002435f, +0.005216f, -0.000396f, +0.007003f, +0.003732f, - +0.008981f, +0.004521f, -0.006146f, -0.003252f, +0.001230f, +0.000014f, +0.001310f, -0.004262f, +0.002490f, +0.005011f, - -0.003094f, +0.000847f, +0.000642f, +0.004785f, -0.007040f, +0.000919f, -0.001489f, +0.003076f, +0.006666f, -0.004495f, - -0.007607f, +0.002093f, -0.001448f, +0.001454f, +0.003248f, -0.000248f, -0.002256f, -0.002074f, -0.000171f, +0.000438f, - -0.005459f, +0.005555f, +0.002518f, -0.001461f, +0.002895f, +0.002672f, +0.000116f, +0.001631f, +0.000583f, +0.000930f, - +0.001491f, -0.000390f, +0.000538f, +0.000010f, -0.000718f, -0.000522f, -0.002102f, -0.001013f, -0.000092f, -0.001548f, - +0.001852f, -0.000704f, -0.001048f, +0.000126f, -0.000810f, -0.000538f, -0.001164f, +0.000855f, +0.001136f, +0.000221f, - -0.000214f, +0.000548f, +0.000098f, +0.000521f, +0.000460f, -0.000107f, +0.000044f, +0.000692f, -0.000543f, +0.000880f, - +0.000497f, +0.000697f, +0.000202f, -0.000215f, +0.000332f, +0.000590f - }, - { - -0.000225f, +0.022740f, -0.008889f, -0.001684f, +0.001910f, +0.000105f, -0.000850f, -0.000349f, -0.001364f, +0.003337f, - +0.000566f, +0.001153f, +0.000807f, -0.003973f, +0.002810f, -0.019153f, -0.022155f, -0.005752f, +0.003470f, +0.007553f, - +0.010551f, -0.001338f, -0.000793f, -0.028472f, -0.004304f, +0.002194f, +0.008988f, -0.010524f, +0.009318f, +0.006802f, - +0.002050f, +0.010789f, +0.005372f, +0.009642f, +0.006451f, -0.005996f, -0.000609f, +0.001784f, +0.001850f, -0.001760f, - -0.000155f, -0.003671f, +0.002932f, -0.000134f, -0.000244f, +0.003859f, -0.002256f, -0.001072f, -0.000305f, +0.003858f, - -0.000956f, -0.000918f, -0.002332f, +0.000667f, +0.000935f, +0.000900f, -0.001782f, -0.000165f, -0.001499f, -0.001139f, - -0.000587f, -0.000949f, +0.001291f, -0.002485f, -0.002099f, +0.000022f, +0.003117f, -0.000202f, -0.001744f, +0.000469f, - +0.000749f, +0.001466f, -0.000432f, +0.000182f, +0.001248f, -0.000774f, +0.000678f, -0.000267f, -0.001214f, -0.000235f, - +0.000513f, -0.000174f, +0.000709f, +0.000120f, +0.000496f, -0.000406f, +0.000061f, -0.000136f, +0.000171f, -0.000136f, - +0.000043f, -0.000541f, +0.000155f, -0.000102f, -0.000061f, +0.000079f - }, - { - +0.038017f, -0.000471f, -0.018288f, -0.031106f, +0.013158f, -0.000267f, -0.000410f, +0.006366f, -0.006919f, +0.004248f, - -0.001228f, +0.002913f, -0.019891f, -0.002655f, +0.008466f, -0.004974f, +0.009537f, -0.004591f, +0.010075f, -0.002894f, - -0.007580f, -0.002171f, +0.000069f, -0.006711f, -0.000197f, +0.002118f, +0.003281f, +0.000487f, -0.002576f, +0.001297f, - +0.006283f, +0.006273f, +0.002941f, +0.003009f, +0.001643f, -0.008100f, +0.003272f, -0.006923f, +0.001237f, -0.006393f, - -0.000156f, -0.003207f, -0.000156f, +0.001992f, +0.005459f, -0.001930f, -0.001480f, -0.001852f, -0.000323f, -0.003591f, - +0.000459f, -0.003756f, -0.000310f, -0.000624f, +0.000450f, +0.000679f, -0.000646f, +0.002116f, +0.000683f, -0.001013f, - -0.000336f, -0.001592f, +0.000617f, +0.000686f, -0.000896f, -0.000656f, -0.001092f, +0.000665f, +0.000499f, -0.001150f, - +0.000447f, +0.000424f, +0.000684f, +0.001451f, +0.000244f, -0.000190f, -0.000627f, +0.000811f, -0.000089f, +0.000013f, - -0.000229f, -0.000139f, +0.000712f, +0.001285f, +0.000083f, +0.000504f, +0.001398f, -0.000199f, +0.000030f, +0.000248f, - +0.000229f, +0.000598f, +0.000263f, +0.000361f, -0.000212f, -0.000231f - }, - { - -0.000130f, +0.007261f, +0.002735f, +0.005004f, +0.001759f, -0.000132f, -0.001351f, +0.002389f, +0.000710f, -0.003494f, - -0.003325f, +0.000291f, -0.006853f, +0.003336f, +0.003557f, +0.038053f, -0.021105f, +0.010072f, +0.005322f, -0.005560f, - -0.008826f, -0.004618f, -0.011385f, -0.001014f, +0.000533f, -0.009796f, +0.004934f, +0.005939f, +0.007485f, +0.000077f, - -0.009545f, +0.014516f, +0.005156f, +0.001342f, +0.010550f, +0.000804f, -0.002760f, -0.000295f, -0.000676f, -0.002329f, - -0.003908f, +0.001347f, -0.002356f, +0.001293f, -0.004149f, +0.000775f, -0.000861f, -0.001577f, +0.000574f, -0.001790f, - -0.002098f, +0.002079f, +0.001346f, +0.000215f, +0.003078f, -0.000427f, -0.002329f, +0.001259f, +0.000644f, +0.000034f, - -0.001662f, -0.001943f, -0.000302f, -0.000724f, +0.001932f, -0.001441f, +0.001058f, +0.000658f, +0.001390f, -0.001439f, - -0.000506f, -0.001473f, -0.000248f, -0.000147f, -0.001996f, -0.000261f, -0.000995f, -0.000529f, +0.000270f, -0.000383f, - -0.000324f, -0.000558f, +0.000721f, +0.000162f, -0.000412f, +0.000365f, -0.000266f, -0.000959f, -0.000241f, -0.000373f, - -0.000015f, -0.000314f, -0.000203f, -0.000608f, -0.000172f, +0.000088f - }, - { - -0.028749f, -0.185587f, +0.018097f, +0.017632f, -0.030580f, +0.010260f, +0.025427f, +0.000544f, -0.000529f, +0.005632f, - +0.001338f, -0.006096f, -0.017779f, -0.004489f, +0.007562f, -0.005498f, -0.007910f, +0.009566f, -0.014895f, -0.006846f, - +0.006317f, +0.007755f, -0.002914f, -0.009614f, +0.007551f, +0.004930f, +0.006591f, +0.005559f, +0.001099f, -0.002480f, - +0.000239f, -0.004792f, -0.002788f, +0.005289f, -0.003606f, +0.002064f, +0.005845f, -0.004750f, +0.005573f, +0.002332f, - -0.004953f, +0.005461f, -0.002307f, -0.001072f, +0.005119f, -0.007695f, -0.003857f, -0.002843f, +0.001312f, -0.001874f, - -0.000284f, +0.000944f, +0.001036f, -0.001395f, -0.001719f, +0.002801f, -0.000637f, +0.002300f, +0.001550f, -0.001089f, - +0.002380f, +0.001090f, -0.000593f, +0.001819f, -0.001846f, +0.002725f, +0.002419f, -0.000759f, -0.001180f, -0.000084f, - -0.000877f, +0.001362f, -0.000631f, -0.000443f, +0.000986f, +0.000687f, +0.001092f, -0.000356f, +0.000281f, -0.000538f, - +0.000730f, +0.000224f, +0.000326f, -0.000227f, +0.000843f, +0.000476f, -0.001175f, +0.000730f, +0.000924f, +0.000215f, - +0.000101f, +0.000092f, -0.000072f, +0.000266f, -0.000107f, +0.000425f - }, - { - -0.000501f, -0.033461f, -0.006116f, +0.001104f, -0.001211f, +0.007522f, +0.003439f, +0.002245f, +0.002635f, -0.002384f, - +0.005338f, -0.013750f, +0.005322f, -0.008942f, +0.000283f, +0.001557f, +0.000773f, -0.004779f, +0.002531f, -0.019881f, - +0.000864f, -0.010168f, +0.004069f, -0.002564f, -0.003539f, -0.008945f, -0.004927f, +0.004163f, +0.003874f, +0.000154f, - -0.004558f, +0.004426f, -0.002789f, +0.000851f, +0.000094f, +0.001422f, +0.002537f, -0.005104f, +0.002344f, +0.005333f, - -0.002697f, -0.000520f, -0.000812f, +0.003984f, -0.004152f, +0.003119f, +0.002070f, -0.001918f, -0.004287f, +0.000659f, - -0.002199f, -0.002611f, -0.001810f, +0.002412f, -0.000404f, -0.001194f, -0.000824f, -0.000303f, -0.001849f, +0.000474f, - +0.002198f, +0.001641f, +0.000468f, -0.001436f, -0.000637f, -0.000670f, +0.000490f, -0.000153f, -0.000849f, +0.000342f, - +0.000429f, +0.000371f, +0.000600f, +0.001496f, +0.000203f, -0.000424f, -0.000127f, -0.000484f, +0.000290f, +0.000271f, - +0.000110f, -0.000882f, +0.000374f, -0.000237f, +0.001027f, +0.000261f, -0.000794f, -0.000488f, -0.000320f, -0.000335f, - -0.000957f, +0.000108f, +0.000301f, -0.000264f, -0.000173f, -0.000066f - }, - { - +0.089984f, +0.033904f, -0.004097f, -0.005764f, -0.011474f, -0.021079f, +0.012678f, +0.008438f, -0.003867f, +0.011523f, - -0.004983f, +0.003056f, -0.013185f, +0.005443f, -0.013137f, -0.006449f, -0.011966f, +0.000258f, -0.010816f, +0.000981f, - +0.014677f, +0.004767f, -0.001456f, +0.003423f, +0.005839f, -0.005671f, -0.004221f, -0.001552f, +0.000127f, -0.003688f, - -0.002573f, -0.007238f, +0.000848f, -0.000734f, -0.005704f, +0.006057f, -0.000111f, +0.002689f, -0.005058f, -0.002338f, - +0.001428f, -0.007724f, +0.006576f, +0.001799f, +0.003069f, -0.001335f, +0.000377f, +0.002735f, +0.001063f, -0.002356f, - -0.001256f, -0.002321f, -0.004724f, -0.001522f, -0.000033f, -0.000704f, -0.000004f, +0.000625f, -0.001066f, -0.000747f, - +0.000265f, -0.001674f, +0.002231f, +0.001035f, +0.001044f, +0.001682f, -0.000908f, +0.000436f, +0.000470f, +0.000291f, - +0.000081f, +0.000163f, +0.000029f, +0.000913f, +0.000028f, -0.001036f, +0.000850f, +0.000136f, -0.000128f, +0.000143f, - +0.000459f, +0.000026f, -0.000905f, +0.000047f, -0.000254f, -0.000509f, +0.000367f, -0.000198f, +0.000476f, +0.000800f, - -0.000290f, -0.000387f, +0.000255f, -0.000008f, +0.000127f, +0.000363f - }, - { - -0.003605f, +0.010838f, +0.016074f, -0.000268f, +0.001724f, -0.000342f, +0.003821f, -0.009040f, -0.002025f, +0.001322f, - -0.000712f, +0.000411f, +0.001282f, +0.012764f, -0.006361f, +0.006217f, +0.005304f, -0.010513f, +0.006908f, -0.000991f, - -0.017756f, +0.024033f, +0.016276f, +0.023453f, +0.001128f, -0.010238f, +0.002163f, +0.006430f, -0.008501f, +0.005869f, - -0.004824f, -0.001898f, -0.005438f, +0.001630f, +0.003171f, -0.001060f, -0.002875f, -0.000314f, -0.002983f, +0.000023f, - +0.000290f, -0.001645f, +0.003178f, +0.000832f, -0.002484f, +0.002112f, +0.003192f, -0.002133f, -0.000851f, +0.001102f, - +0.000908f, +0.000061f, -0.002992f, -0.000312f, +0.002419f, -0.000628f, -0.001687f, +0.000434f, +0.001735f, -0.000066f, - +0.000102f, +0.000706f, +0.000895f, -0.000962f, -0.001021f, -0.001434f, -0.000042f, +0.000488f, +0.001133f, -0.001794f, - -0.001377f, +0.000412f, -0.000405f, +0.000179f, +0.000142f, +0.000096f, -0.000191f, +0.000200f, +0.000493f, -0.000701f, - +0.000670f, -0.000027f, +0.000903f, +0.000436f, -0.000422f, +0.000756f, -0.000361f, +0.000237f, +0.000096f, +0.000209f, - -0.000400f, +0.000573f, +0.000505f, +0.000696f, +0.000287f, -0.000099f - }, - { - +0.024411f, -0.147860f, -0.010714f, -0.003728f, +0.023330f, +0.003639f, +0.014108f, +0.008396f, -0.003973f, -0.002430f, - +0.004396f, -0.007797f, -0.004879f, -0.000999f, -0.035604f, +0.000166f, +0.002870f, +0.025658f, -0.016408f, +0.008364f, - +0.005541f, -0.001837f, -0.001603f, +0.006348f, -0.005295f, +0.003903f, +0.006897f, -0.002159f, +0.003710f, -0.003198f, - -0.005215f, -0.000890f, +0.000854f, -0.001764f, +0.001474f, +0.001486f, +0.005389f, +0.004638f, +0.004876f, +0.003332f, - -0.004339f, +0.003601f, -0.006590f, -0.002493f, +0.004183f, -0.000530f, -0.000694f, +0.002406f, -0.000658f, -0.000100f, - -0.002287f, +0.003847f, -0.001383f, +0.001031f, -0.000093f, -0.001316f, +0.005685f, +0.002239f, +0.001717f, -0.000399f, - +0.000149f, +0.000470f, -0.000811f, +0.000877f, +0.000666f, -0.001826f, -0.000627f, -0.000914f, +0.000250f, +0.001429f, - +0.000572f, -0.000923f, +0.001747f, -0.000225f, +0.000090f, +0.000285f, +0.000612f, -0.000505f, +0.000727f, +0.000899f, - +0.000371f, +0.000793f, -0.000113f, -0.000563f, +0.000203f, -0.000424f, -0.000584f, +0.000269f, +0.000696f, -0.000190f, - +0.000235f, -0.000179f, -0.000258f, -0.000391f, +0.000288f, +0.000014f - }, - { - -0.006551f, -0.020305f, +0.011673f, +0.014860f, -0.001060f, -0.000776f, +0.006590f, -0.002896f, +0.001079f, -0.001793f, - +0.001026f, -0.005435f, -0.002545f, +0.026582f, +0.021470f, -0.021634f, -0.003646f, -0.006707f, -0.002713f, -0.003288f, - +0.016809f, +0.002103f, +0.014955f, +0.006983f, +0.007675f, -0.001504f, +0.001256f, +0.007975f, -0.008372f, +0.002270f, - +0.003681f, -0.001213f, +0.000360f, -0.005563f, +0.003652f, +0.005311f, +0.006734f, -0.000943f, +0.005212f, -0.000565f, - +0.004216f, -0.001402f, +0.001396f, -0.002156f, -0.001124f, -0.001618f, -0.001678f, -0.002289f, -0.001117f, -0.001508f, - -0.000546f, +0.002805f, -0.001172f, -0.000584f, -0.000092f, +0.003436f, +0.002634f, -0.001779f, +0.002974f, -0.000579f, - -0.002842f, +0.001277f, +0.001990f, +0.001709f, -0.001003f, -0.000290f, -0.004086f, -0.000089f, -0.000752f, +0.001450f, - +0.001830f, -0.000820f, +0.000171f, -0.000997f, +0.000950f, -0.001025f, +0.001297f, -0.000426f, -0.000624f, +0.000491f, - -0.000328f, -0.000004f, -0.000562f, +0.000540f, +0.000542f, +0.000469f, -0.000383f, -0.000024f, -0.000231f, -0.000224f, - -0.000819f, +0.000002f, -0.000140f, +0.000631f, -0.000520f, +0.000682f - } - }, - { - { - +0.000990f, +0.003012f, +0.066430f, +0.031112f, -0.000909f, +0.003394f, -0.000048f, +0.013192f, +0.001678f, +0.001927f, - -0.000318f, +0.006146f, -0.013488f, +0.010328f, -0.002114f, +0.003630f, -0.004321f, -0.003159f, +0.006784f, -0.003706f, - -0.008783f, +0.001177f, +0.009060f, -0.009582f, +0.012451f, -0.001610f, +0.001619f, +0.001197f, +0.003349f, +0.005613f, - +0.004397f, +0.000593f, -0.007183f, -0.004878f, -0.004567f, -0.003183f, +0.003368f, -0.000573f, +0.007077f, +0.000005f, - +0.003268f, +0.004232f, -0.006520f, +0.000349f, +0.003551f, +0.001007f, +0.001252f, +0.001633f, -0.000849f, -0.001122f, - +0.001894f, +0.001625f, +0.004011f, -0.001659f, +0.002751f, +0.003877f, -0.000528f, -0.000253f, -0.001704f, +0.001547f, - +0.000154f, -0.000459f, -0.000288f, +0.000128f, +0.000597f, +0.001891f, +0.000154f, +0.001848f, +0.002027f, -0.000160f, - -0.000906f, -0.000180f, -0.000571f, -0.000006f, +0.000087f, -0.000019f, +0.000585f, -0.000819f, -0.000146f, -0.001316f, - +0.000650f, -0.000480f, -0.000088f, +0.000021f, -0.000045f, +0.000373f, -0.000213f, -0.000229f, -0.000076f, -0.000200f, - +0.000298f, +0.000569f, +0.000147f, +0.000058f, +0.000461f, +0.000002f - }, - { - +0.000062f, -0.020507f, +0.024698f, -0.034573f, -0.011691f, -0.000154f, +0.005271f, +0.002749f, +0.010003f, -0.004567f, - -0.008728f, -0.002876f, +0.002958f, +0.005946f, -0.005117f, +0.005918f, -0.021409f, -0.006028f, +0.001569f, +0.010748f, - +0.001014f, -0.008896f, -0.000176f, -0.008136f, +0.002095f, -0.004853f, -0.014578f, -0.000360f, -0.005449f, +0.006111f, - +0.001805f, -0.002001f, -0.002698f, -0.005933f, +0.006720f, +0.000263f, -0.000166f, +0.006865f, +0.002619f, +0.001359f, - +0.003844f, -0.000419f, -0.001694f, -0.004282f, -0.000129f, -0.002131f, -0.003739f, -0.000650f, -0.000052f, +0.002818f, - -0.000917f, +0.000338f, +0.002427f, +0.000211f, +0.002534f, -0.000853f, +0.003102f, -0.000915f, +0.001429f, +0.001548f, - -0.001760f, -0.000766f, -0.001021f, +0.000624f, -0.001995f, -0.002499f, +0.000241f, +0.000504f, -0.000205f, +0.000195f, - +0.000759f, -0.001967f, -0.000046f, -0.000608f, -0.001077f, -0.000274f, +0.000831f, -0.000917f, +0.000344f, -0.000107f, - -0.000244f, -0.000631f, +0.000318f, -0.000889f, -0.000308f, -0.000449f, -0.000399f, -0.000349f, -0.000555f, -0.000057f, - +0.000224f, +0.000190f, -0.000433f, -0.000236f, -0.000005f, -0.000225f - }, - { - -0.008584f, +0.045964f, -0.009278f, -0.076563f, -0.006534f, -0.002641f, +0.000886f, +0.004631f, +0.000019f, -0.002708f, - +0.001818f, +0.023390f, +0.006446f, +0.004626f, +0.000110f, -0.007654f, -0.000041f, -0.002139f, -0.008050f, +0.001013f, - -0.000563f, +0.016871f, -0.007398f, +0.016065f, +0.002783f, -0.009070f, +0.013496f, +0.003269f, +0.001879f, -0.001084f, - +0.000695f, +0.003133f, +0.009488f, +0.007158f, -0.003276f, -0.002302f, -0.001913f, -0.001131f, -0.000045f, +0.001854f, - -0.000087f, +0.002989f, +0.003306f, -0.004798f, +0.000122f, -0.001559f, +0.002530f, +0.000345f, +0.001981f, +0.000110f, - +0.002142f, -0.002194f, -0.001889f, -0.000406f, +0.001721f, -0.000619f, -0.001739f, -0.001233f, -0.000868f, -0.000708f, - -0.003501f, -0.000915f, -0.001212f, -0.000061f, +0.001656f, -0.000799f, -0.002280f, +0.001203f, -0.002302f, +0.000067f, - -0.000145f, -0.000668f, +0.000049f, -0.000575f, -0.000578f, -0.000478f, +0.000265f, -0.000952f, +0.000365f, -0.001010f, - +0.000196f, +0.000060f, -0.000319f, +0.000530f, -0.000758f, -0.000188f, -0.000476f, +0.000307f, -0.000339f, -0.000465f, - +0.000206f, -0.000216f, -0.000087f, +0.000126f, +0.000470f, -0.000067f - }, - { - +0.019112f, -0.140762f, +0.018560f, +0.093065f, +0.000282f, -0.001508f, +0.004232f, -0.003217f, -0.001468f, +0.003558f, - +0.002112f, -0.003291f, -0.006690f, -0.000318f, -0.000231f, -0.003718f, +0.004236f, -0.007582f, +0.003575f, -0.002167f, - +0.002569f, -0.005572f, -0.002446f, +0.000875f, -0.003234f, -0.003224f, +0.003809f, +0.001342f, -0.003245f, -0.004755f, - -0.004106f, +0.004241f, -0.004761f, +0.001744f, -0.000727f, +0.001203f, +0.002649f, -0.000170f, -0.000471f, +0.001196f, - +0.004401f, -0.004008f, -0.000535f, -0.001213f, -0.002783f, +0.001650f, +0.003965f, +0.001372f, -0.000574f, +0.002448f, - +0.003001f, +0.001079f, -0.005125f, -0.001751f, -0.001987f, -0.001246f, +0.000744f, +0.000580f, +0.000829f, -0.000594f, - +0.000041f, +0.000067f, +0.001957f, -0.000523f, -0.000069f, +0.000736f, +0.000038f, -0.000521f, +0.000155f, -0.001194f, - -0.001296f, +0.000168f, +0.000100f, -0.000089f, -0.000758f, +0.000310f, +0.000913f, +0.000504f, +0.000030f, -0.000677f, - -0.000562f, -0.000399f, +0.000081f, +0.000216f, +0.000357f, -0.000111f, +0.000676f, -0.000394f, -0.000114f, -0.000055f, - -0.000561f, +0.000049f, +0.000067f, +0.000253f, -0.000108f, +0.000066f - }, - { - +0.004218f, -0.013207f, -0.003004f, -0.004848f, -0.001300f, -0.000644f, +0.002338f, +0.001484f, +0.006729f, -0.000543f, - -0.007045f, +0.005423f, +0.006366f, +0.003049f, +0.019400f, +0.012466f, +0.016727f, -0.006407f, -0.002040f, -0.006456f, - +0.000979f, -0.002195f, -0.019857f, +0.010019f, -0.007348f, -0.013889f, +0.000589f, -0.002708f, +0.004621f, +0.003516f, - +0.003071f, -0.001777f, -0.002952f, -0.003119f, -0.008188f, -0.006697f, +0.003031f, +0.001658f, -0.002493f, -0.002912f, - -0.003332f, -0.002691f, +0.001096f, -0.001967f, -0.000303f, -0.003172f, -0.000727f, +0.000291f, +0.004442f, +0.001133f, - -0.001036f, -0.001143f, +0.001387f, -0.001812f, -0.000335f, -0.001099f, -0.001563f, -0.001075f, +0.001302f, -0.000019f, - -0.000326f, -0.000814f, +0.001295f, -0.001216f, -0.000685f, +0.000367f, -0.000004f, +0.000512f, -0.000449f, +0.001152f, - -0.001315f, +0.001797f, +0.000311f, -0.000648f, -0.000125f, -0.000401f, -0.000944f, -0.000311f, -0.000964f, -0.000168f, - +0.000771f, +0.000139f, -0.000522f, +0.000467f, -0.000129f, -0.000286f, -0.000250f, +0.000712f, -0.000256f, -0.000508f, - +0.000108f, +0.000257f, +0.000064f, +0.000159f, +0.000043f, +0.000218f - }, - { - +0.023980f, -0.090652f, +0.005705f, -0.064016f, +0.014926f, +0.002874f, +0.004804f, -0.005027f, +0.002727f, -0.003069f, - +0.006032f, +0.002004f, +0.010331f, -0.011729f, -0.000896f, -0.000907f, +0.003827f, +0.002290f, +0.008172f, -0.005295f, - +0.015405f, +0.003377f, -0.007154f, -0.000421f, -0.000370f, -0.001812f, +0.001170f, +0.000065f, -0.001400f, -0.003749f, - +0.002636f, +0.004756f, +0.004367f, +0.000748f, -0.005202f, +0.001187f, -0.000020f, -0.000312f, +0.006332f, -0.001130f, - -0.007470f, -0.001923f, -0.000676f, +0.001893f, +0.000833f, +0.002223f, -0.006022f, -0.002736f, +0.002036f, -0.001124f, - -0.000789f, +0.002767f, -0.000331f, -0.001077f, +0.001601f, +0.003741f, +0.000140f, +0.000434f, +0.001059f, +0.000252f, - +0.002103f, -0.000427f, -0.000177f, -0.001664f, -0.000043f, -0.000117f, -0.002526f, -0.001111f, +0.000537f, -0.001315f, - +0.000981f, +0.001503f, -0.002679f, +0.000728f, +0.000228f, -0.001460f, -0.000718f, +0.000683f, +0.001115f, +0.000368f, - -0.000193f, +0.000812f, -0.000102f, +0.000528f, +0.000751f, -0.000365f, +0.000043f, +0.000677f, -0.000458f, +0.000844f, - +0.000418f, +0.000338f, +0.000308f, -0.000247f, +0.000446f, +0.000425f - }, - { - +0.000501f, +0.006157f, +0.000186f, +0.000868f, -0.001162f, +0.000461f, -0.000836f, +0.002173f, -0.002188f, +0.000667f, - +0.003213f, +0.000357f, +0.001101f, -0.007400f, -0.003356f, -0.015433f, -0.012155f, -0.012142f, +0.016228f, -0.013692f, - +0.016369f, -0.012701f, -0.007682f, +0.000796f, -0.001956f, +0.003306f, +0.000173f, -0.001638f, +0.003894f, +0.008960f, - +0.003739f, +0.003792f, +0.015846f, +0.005395f, +0.000894f, -0.004822f, +0.007253f, -0.000722f, +0.000695f, -0.005106f, - +0.002223f, +0.000477f, -0.001208f, -0.002019f, +0.002700f, +0.001735f, +0.000943f, -0.001621f, -0.000374f, +0.002847f, - -0.000192f, -0.002904f, -0.001848f, +0.001579f, +0.001136f, -0.000680f, +0.000294f, -0.002095f, -0.002557f, +0.000273f, - +0.000688f, -0.001417f, +0.000039f, -0.001420f, -0.001538f, -0.000104f, +0.001395f, -0.000645f, -0.000306f, +0.000967f, - +0.000990f, -0.000457f, +0.000466f, -0.000289f, -0.000185f, +0.000722f, -0.000584f, -0.000016f, -0.000595f, -0.000295f, - +0.000060f, +0.000975f, +0.000240f, -0.000131f, +0.000278f, -0.000261f, +0.000236f, -0.000059f, +0.000279f, +0.000172f, - -0.000299f, -0.000243f, +0.000009f, +0.000335f, -0.000065f, +0.000078f - }, - { - -0.002518f, +0.019648f, +0.018205f, +0.002023f, -0.021593f, +0.003395f, +0.000813f, +0.000565f, -0.003231f, +0.001602f, - -0.001758f, -0.003222f, -0.005322f, -0.009979f, +0.012080f, -0.006358f, +0.008646f, +0.001749f, +0.005856f, -0.001482f, - -0.016597f, +0.003317f, -0.001527f, -0.004313f, +0.000536f, -0.001385f, +0.002904f, +0.000705f, -0.004164f, +0.006423f, - +0.003671f, +0.004287f, -0.000775f, +0.004292f, +0.002299f, -0.006086f, -0.001784f, -0.003785f, -0.000001f, -0.003353f, - -0.004654f, -0.003447f, +0.004238f, +0.001517f, +0.001569f, +0.000132f, +0.000900f, -0.000367f, -0.004066f, -0.004014f, - -0.001891f, -0.000508f, -0.003672f, -0.000195f, -0.000620f, +0.000506f, +0.000024f, +0.002542f, -0.000444f, -0.000117f, - -0.001378f, -0.001561f, +0.000096f, +0.000716f, -0.000397f, -0.000393f, -0.001149f, +0.001431f, -0.001220f, -0.000413f, - +0.001151f, +0.000194f, +0.000031f, +0.001702f, +0.000065f, -0.000468f, -0.000882f, +0.000470f, +0.001007f, -0.001169f, - -0.000004f, -0.000252f, +0.000594f, +0.000292f, +0.001329f, -0.000347f, +0.000972f, +0.000817f, +0.000123f, -0.000135f, - +0.000372f, +0.000219f, +0.000124f, +0.000288f, -0.000261f, +0.000201f - }, - { - +0.001349f, -0.005285f, +0.007265f, +0.003976f, +0.003166f, +0.000900f, +0.000154f, -0.001704f, +0.003406f, +0.001559f, - -0.008186f, -0.001829f, -0.006967f, +0.006210f, +0.008931f, +0.013434f, +0.024698f, -0.008509f, +0.008485f, -0.011420f, - -0.013889f, +0.005206f, -0.005079f, -0.012953f, +0.002502f, -0.000557f, +0.000636f, -0.000090f, +0.007850f, +0.001797f, - -0.005740f, +0.017159f, -0.004230f, +0.003596f, +0.012654f, -0.004270f, -0.000296f, +0.000494f, +0.001606f, -0.005469f, - -0.002279f, -0.004025f, +0.001262f, +0.001091f, -0.005246f, -0.001061f, +0.003908f, -0.000676f, -0.002602f, -0.001772f, - +0.000155f, +0.000189f, +0.003064f, -0.000286f, +0.000811f, +0.000343f, -0.000650f, -0.002305f, +0.000723f, +0.002107f, - -0.001139f, -0.000938f, +0.000782f, +0.000561f, +0.000838f, -0.001068f, +0.001522f, +0.001525f, -0.000156f, -0.001535f, - +0.000337f, -0.002417f, -0.000377f, -0.000821f, -0.001945f, +0.000292f, -0.000415f, -0.001064f, -0.000644f, +0.000188f, - -0.000134f, +0.000374f, +0.000441f, -0.000210f, +0.000315f, -0.000168f, -0.000162f, -0.000687f, -0.000556f, -0.000322f, - +0.000455f, -0.000436f, -0.000432f, -0.000378f, -0.000872f, +0.000668f - }, - { - +0.028596f, -0.207279f, -0.033332f, +0.024324f, -0.032919f, +0.015077f, +0.007691f, -0.001346f, +0.009567f, -0.008247f, - +0.001435f, -0.007955f, -0.004342f, -0.011107f, +0.017351f, -0.010511f, -0.006813f, +0.003814f, -0.006987f, -0.005238f, - +0.003251f, +0.007914f, -0.002903f, -0.006701f, +0.001110f, +0.003861f, +0.005772f, +0.005651f, -0.001646f, -0.001916f, - +0.002967f, -0.006804f, -0.003854f, +0.004102f, +0.000373f, +0.004565f, +0.006241f, -0.002375f, +0.002538f, -0.001479f, - +0.002541f, -0.001460f, -0.000003f, +0.003991f, -0.000922f, -0.004138f, -0.004978f, -0.002431f, +0.001581f, +0.000659f, - -0.002125f, -0.001165f, -0.001342f, -0.000689f, +0.000720f, +0.000521f, -0.000242f, +0.002536f, +0.002387f, +0.001207f, - +0.000138f, +0.000552f, +0.000923f, +0.001420f, -0.001689f, +0.002873f, +0.001129f, -0.000445f, -0.000386f, -0.001985f, - +0.000150f, +0.001393f, -0.000509f, +0.000360f, +0.001263f, +0.000682f, -0.000405f, +0.000602f, +0.000330f, -0.000008f, - +0.000856f, -0.000294f, +0.000431f, +0.000181f, +0.000482f, -0.000469f, -0.000946f, +0.000499f, +0.000437f, -0.000152f, - +0.000820f, +0.000083f, +0.000226f, +0.000036f, +0.000344f, -0.000386f - }, - { - +0.001186f, -0.049535f, -0.004781f, +0.018827f, -0.005993f, +0.002374f, +0.010533f, -0.000498f, +0.000172f, +0.002041f, - +0.001460f, -0.005721f, -0.005921f, +0.007014f, -0.009849f, +0.011629f, -0.001846f, -0.006781f, -0.011971f, -0.003776f, - -0.008201f, +0.002939f, -0.006325f, -0.015040f, +0.004705f, -0.004312f, -0.005761f, +0.008309f, +0.001161f, -0.005289f, - +0.004223f, -0.002218f, -0.005503f, -0.000119f, +0.002667f, -0.002038f, +0.001750f, -0.000524f, +0.000662f, +0.004805f, - -0.001235f, -0.002805f, -0.000786f, +0.000845f, +0.001846f, +0.000362f, +0.000912f, -0.002728f, -0.001337f, -0.002023f, - -0.001017f, -0.002710f, +0.000002f, +0.001254f, -0.000752f, -0.001009f, -0.001421f, -0.000330f, -0.000580f, -0.000341f, - +0.000902f, -0.000667f, +0.001642f, -0.000515f, -0.000478f, -0.000255f, -0.000637f, -0.000580f, +0.000014f, -0.000279f, - +0.000378f, +0.000606f, +0.000119f, +0.001553f, -0.000242f, +0.000329f, -0.000922f, +0.000302f, -0.000030f, +0.000942f, - +0.000216f, -0.000535f, -0.000369f, +0.000112f, +0.000291f, +0.000150f, -0.000028f, -0.000571f, -0.000391f, -0.000136f, - -0.000925f, +0.000174f, +0.000153f, -0.000473f, -0.000065f, +0.000084f - }, - { - -0.061067f, +0.226406f, +0.004349f, +0.002610f, -0.011826f, -0.004351f, +0.008833f, -0.002845f, +0.000289f, +0.010626f, - -0.000106f, +0.000251f, +0.000564f, -0.017955f, -0.005963f, -0.006379f, -0.001857f, -0.009454f, -0.009488f, +0.008772f, - +0.010326f, -0.005159f, +0.005391f, +0.000228f, +0.009353f, -0.002622f, -0.005481f, +0.002771f, -0.008928f, +0.002452f, - -0.008095f, -0.000911f, +0.000347f, -0.006249f, -0.004198f, +0.005949f, +0.005044f, +0.000406f, -0.000668f, -0.002624f, - -0.003575f, -0.001303f, +0.004292f, -0.005118f, +0.005574f, +0.002284f, +0.000914f, -0.000611f, +0.002444f, -0.002972f, - -0.001225f, -0.002127f, -0.004052f, -0.000261f, -0.001882f, -0.000893f, -0.002206f, +0.003930f, -0.002361f, -0.000123f, - -0.000994f, -0.001313f, +0.002437f, +0.000409f, +0.001979f, +0.000975f, +0.000637f, -0.001191f, +0.001193f, +0.000431f, - -0.000011f, +0.000577f, +0.000856f, -0.000257f, -0.001319f, +0.001158f, +0.000221f, +0.000513f, -0.000553f, +0.000530f, - -0.001240f, +0.000439f, -0.000559f, -0.000119f, -0.000551f, -0.000411f, +0.000316f, -0.000079f, +0.000949f, +0.000161f, - -0.000429f, +0.000020f, -0.000157f, -0.000038f, +0.000125f, +0.000463f - }, - { - +0.002655f, +0.029782f, +0.002578f, -0.003055f, +0.002016f, -0.004734f, +0.011720f, -0.013386f, -0.002735f, +0.002841f, - -0.002702f, +0.004946f, +0.000945f, +0.011714f, -0.008703f, +0.003360f, -0.004856f, -0.002654f, -0.005219f, +0.002567f, - -0.004083f, -0.000401f, +0.013342f, +0.012995f, +0.015050f, -0.001781f, -0.003210f, -0.001136f, +0.004494f, -0.009980f, - +0.004567f, -0.004762f, +0.001989f, -0.003925f, +0.004647f, -0.001206f, -0.004158f, -0.003458f, +0.005852f, -0.003292f, - -0.003580f, +0.003237f, -0.000534f, +0.000908f, -0.002029f, +0.001270f, +0.004203f, -0.004156f, -0.000488f, +0.003237f, - -0.001283f, -0.001565f, +0.001329f, -0.000856f, +0.000488f, -0.000408f, -0.001299f, +0.000726f, +0.001101f, -0.000685f, - +0.001895f, +0.000017f, +0.000145f, +0.001485f, -0.002289f, +0.000193f, -0.001171f, +0.000465f, +0.000125f, -0.000542f, - -0.002188f, +0.001452f, -0.001300f, +0.000094f, +0.000650f, -0.000716f, -0.000794f, +0.000059f, +0.000951f, -0.000021f, - +0.000171f, +0.001203f, +0.000087f, +0.000361f, -0.000280f, +0.000919f, -0.000249f, +0.000052f, +0.000116f, +0.000184f, - +0.000143f, +0.000407f, +0.000101f, +0.000861f, +0.000362f, -0.000229f - }, - { - -0.042906f, -0.048370f, -0.004453f, +0.018531f, -0.006017f, +0.013823f, +0.009923f, +0.003811f, -0.005498f, +0.003842f, - +0.000071f, -0.005158f, -0.009261f, -0.003055f, -0.040768f, +0.009521f, +0.008805f, +0.011048f, -0.003980f, +0.003669f, - +0.003813f, -0.003093f, +0.006325f, +0.000894f, -0.000520f, +0.004681f, +0.006106f, -0.005379f, -0.000631f, -0.002460f, - -0.001833f, -0.001405f, -0.001151f, +0.005611f, -0.002494f, +0.006755f, +0.005263f, +0.006815f, +0.000404f, +0.001149f, - -0.003165f, -0.005103f, +0.001586f, +0.003190f, -0.000471f, +0.003207f, +0.002237f, -0.001840f, +0.000992f, -0.000697f, - -0.001168f, +0.000564f, -0.000598f, +0.000454f, +0.000186f, -0.000079f, +0.004135f, +0.002795f, +0.000930f, -0.001582f, - +0.001278f, +0.000155f, -0.000143f, +0.001253f, +0.000381f, -0.000733f, -0.000675f, -0.000240f, +0.000519f, +0.000350f, - +0.000868f, -0.001110f, +0.000315f, +0.000460f, +0.001058f, +0.000331f, -0.000076f, -0.000052f, -0.000436f, +0.001227f, - +0.000667f, +0.001713f, -0.000012f, -0.000168f, +0.000375f, -0.000896f, -0.000338f, -0.000353f, +0.000565f, +0.000546f, - +0.000152f, -0.000445f, -0.000428f, +0.000079f, -0.000005f, -0.000185f - }, - { - +0.004813f, +0.003122f, -0.015750f, +0.009403f, +0.007546f, -0.006545f, +0.008562f, -0.002010f, -0.000679f, +0.002446f, - +0.003117f, -0.004753f, -0.005161f, +0.009730f, +0.029056f, -0.013099f, -0.012121f, +0.003622f, -0.000842f, +0.003908f, - +0.013059f, +0.007893f, +0.009809f, +0.003529f, +0.006516f, -0.001708f, +0.000573f, +0.003650f, -0.003180f, +0.003385f, - +0.003118f, +0.000258f, -0.003909f, -0.000138f, +0.005082f, +0.011102f, -0.001126f, +0.002615f, +0.004048f, +0.002016f, - -0.001453f, -0.002067f, -0.000783f, +0.003058f, -0.002232f, -0.001626f, -0.003349f, -0.001057f, +0.001088f, -0.002178f, - -0.000026f, +0.000919f, -0.000230f, -0.000150f, +0.001765f, +0.002455f, +0.001111f, +0.000480f, +0.000149f, -0.002399f, - +0.000041f, +0.000284f, +0.001983f, +0.001056f, +0.000021f, -0.002923f, -0.000058f, -0.000534f, +0.000218f, +0.001302f, - +0.000349f, -0.000409f, -0.000869f, +0.000040f, +0.000084f, +0.000210f, +0.000451f, +0.000255f, -0.000652f, -0.000428f, - -0.000165f, +0.000585f, +0.000213f, +0.000102f, -0.000289f, +0.000456f, +0.000021f, -0.000454f, +0.000527f, -0.000261f, - -0.000916f, -0.000222f, -0.000032f, +0.000446f, +0.000050f, +0.000713f - } - }, - { - { - +0.006345f, +0.072584f, +0.096494f, +0.044926f, +0.009654f, -0.001223f, -0.001289f, +0.009008f, -0.003257f, -0.003030f, - -0.005377f, -0.000188f, -0.014441f, +0.012157f, +0.001378f, +0.018118f, +0.008603f, -0.006818f, -0.002930f, -0.003360f, - -0.011726f, -0.001454f, +0.005765f, -0.001819f, +0.008560f, -0.009055f, -0.003282f, -0.002736f, -0.002440f, -0.000243f, - +0.000595f, +0.004507f, +0.002182f, -0.003350f, -0.001736f, -0.007186f, +0.005434f, +0.000573f, -0.000966f, -0.003632f, - +0.003519f, +0.003878f, -0.003153f, +0.001201f, +0.004248f, +0.002982f, +0.001435f, +0.000783f, +0.000050f, -0.000976f, - -0.000099f, +0.000213f, +0.002351f, -0.002829f, +0.000497f, +0.002884f, -0.001207f, +0.000499f, -0.001302f, +0.001359f, - +0.000322f, -0.000491f, +0.000641f, +0.000266f, -0.001238f, -0.001581f, -0.001002f, +0.001010f, +0.000940f, +0.000011f, - -0.000924f, -0.000287f, +0.000223f, +0.000044f, -0.000912f, -0.001109f, +0.000615f, -0.000815f, -0.000316f, -0.000895f, - -0.000158f, -0.001136f, -0.000427f, -0.000166f, +0.000226f, +0.000467f, -0.000097f, -0.000235f, -0.000176f, -0.000416f, - +0.000335f, +0.000462f, -0.000029f, +0.000035f, +0.000627f, -0.000155f - }, - { - -0.003260f, -0.067952f, +0.003254f, -0.000049f, +0.017924f, +0.005794f, +0.002809f, -0.004997f, +0.000841f, -0.000912f, - +0.001760f, -0.001388f, +0.002323f, +0.002041f, -0.007604f, +0.001715f, -0.019692f, -0.006175f, +0.000549f, +0.008965f, - -0.006487f, -0.011544f, -0.002331f, -0.015185f, +0.000756f, -0.005606f, -0.012575f, +0.002111f, -0.009225f, +0.010217f, - +0.003344f, -0.004348f, -0.001442f, -0.003187f, +0.004809f, +0.004400f, -0.005615f, -0.001937f, +0.001676f, +0.001975f, - +0.002820f, +0.000985f, -0.002386f, -0.004090f, +0.002054f, +0.005981f, +0.000693f, +0.001704f, +0.001462f, +0.001561f, - -0.001690f, +0.000047f, +0.000340f, -0.002402f, +0.001627f, -0.003010f, +0.003039f, -0.000383f, +0.000926f, +0.001430f, - -0.001559f, +0.000657f, +0.000044f, -0.000346f, -0.001728f, -0.002050f, +0.001272f, +0.001420f, +0.000570f, +0.000273f, - +0.000474f, -0.000418f, +0.001191f, +0.000245f, +0.000359f, +0.000775f, +0.000430f, -0.001073f, -0.001276f, -0.000469f, - +0.000418f, -0.000090f, +0.000016f, -0.000405f, +0.000147f, -0.000476f, -0.000023f, +0.000081f, -0.000379f, +0.000560f, - +0.000352f, -0.000042f, -0.000158f, +0.000120f, +0.000146f, -0.000065f - }, - { - +0.007339f, +0.022157f, -0.036072f, -0.009140f, +0.044023f, -0.002520f, +0.003927f, +0.008042f, -0.001760f, -0.014189f, - -0.011685f, +0.025584f, +0.005734f, -0.001337f, +0.002566f, -0.009665f, +0.000210f, +0.005441f, -0.007998f, -0.004827f, - -0.010539f, +0.014613f, -0.002421f, +0.017512f, -0.000620f, -0.002993f, +0.013853f, +0.001842f, +0.002120f, +0.005037f, - +0.001300f, -0.000535f, +0.009165f, +0.002163f, -0.008158f, -0.001922f, +0.001020f, -0.003497f, -0.000353f, -0.000991f, - -0.004887f, -0.000836f, +0.003153f, -0.004234f, -0.001569f, -0.002540f, +0.000548f, -0.001653f, +0.002162f, -0.000109f, - +0.000600f, -0.002591f, -0.001511f, -0.000911f, +0.001200f, -0.000484f, -0.001759f, +0.000172f, +0.000123f, +0.001426f, - -0.000067f, +0.000084f, -0.002302f, -0.001570f, -0.001775f, -0.001269f, -0.000278f, +0.000604f, -0.001683f, +0.001626f, - +0.000281f, -0.000762f, -0.000419f, +0.000413f, +0.000909f, -0.000604f, -0.000118f, -0.000707f, +0.000232f, -0.001659f, - -0.000196f, -0.000482f, -0.000243f, +0.000757f, -0.000308f, +0.000366f, -0.000150f, +0.000382f, -0.000254f, -0.000085f, - +0.000050f, -0.000288f, +0.000011f, -0.000011f, +0.000233f, -0.000192f - }, - { - +0.012474f, -0.220146f, -0.028401f, +0.073884f, -0.011168f, -0.000102f, +0.003108f, -0.005192f, +0.000906f, +0.006821f, - +0.002096f, -0.002010f, -0.000659f, +0.002920f, +0.014176f, +0.009050f, +0.003743f, -0.010063f, -0.001859f, -0.004820f, - +0.004606f, -0.002125f, -0.003289f, -0.000473f, -0.001543f, -0.007658f, -0.005910f, +0.004549f, -0.001756f, +0.000282f, - -0.001849f, +0.005288f, +0.005348f, +0.007242f, +0.003071f, +0.003003f, -0.003434f, -0.003917f, +0.000062f, -0.001033f, - +0.002016f, -0.003077f, +0.003551f, +0.001904f, -0.002070f, +0.000342f, +0.003577f, +0.001702f, -0.004172f, -0.002064f, - -0.000343f, -0.000057f, -0.003661f, -0.000697f, -0.001789f, +0.001457f, +0.002315f, -0.001099f, +0.001708f, -0.000966f, - -0.000146f, -0.001107f, -0.000846f, -0.001276f, +0.000190f, +0.000522f, -0.001131f, -0.000061f, +0.000488f, -0.000069f, - +0.000327f, +0.000888f, +0.000324f, -0.000058f, -0.000737f, -0.000069f, +0.000917f, +0.001124f, +0.000536f, -0.000652f, - +0.000665f, +0.000636f, +0.000508f, +0.000219f, +0.000562f, -0.000338f, +0.000044f, -0.000063f, +0.000012f, +0.000113f, - -0.000350f, +0.000289f, -0.000069f, +0.000176f, -0.000182f, -0.000077f - }, - { - -0.003798f, +0.010297f, +0.016444f, -0.004448f, +0.001687f, +0.001365f, +0.002096f, -0.003899f, +0.001814f, -0.000878f, - -0.005218f, +0.004943f, +0.008496f, -0.009734f, -0.006166f, -0.013364f, -0.029090f, -0.056671f, -0.018818f, -0.007513f, - +0.003016f, +0.014623f, -0.004984f, +0.014229f, -0.003001f, -0.000527f, +0.008971f, +0.008364f, +0.004039f, -0.001096f, - -0.004224f, +0.005613f, +0.006044f, +0.004076f, +0.006573f, +0.000726f, +0.002364f, +0.007872f, -0.000135f, -0.006310f, - -0.002924f, -0.001510f, +0.002159f, +0.000213f, -0.000354f, -0.000030f, -0.000138f, -0.001120f, +0.005638f, +0.001507f, - -0.003477f, -0.003395f, +0.001969f, +0.001260f, +0.000459f, -0.000704f, -0.000206f, -0.000165f, +0.002168f, -0.000953f, - -0.002671f, -0.002394f, +0.000110f, -0.000797f, +0.000383f, +0.002018f, -0.000089f, -0.000690f, -0.001519f, +0.000528f, - -0.001138f, +0.000992f, -0.000151f, -0.000247f, -0.000215f, +0.000124f, -0.000061f, +0.000567f, -0.000165f, +0.000106f, - +0.001228f, +0.001167f, -0.000459f, +0.000237f, -0.000328f, +0.000067f, +0.000059f, +0.000484f, +0.000046f, -0.000045f, - +0.000512f, +0.000234f, -0.000020f, +0.000165f, -0.000401f, -0.000221f - }, - { - +0.020459f, -0.123209f, -0.004462f, -0.065679f, -0.003640f, -0.002361f, -0.001682f, -0.009768f, -0.000308f, -0.001402f, - +0.016133f, +0.003425f, +0.010175f, -0.015657f, +0.001808f, -0.001041f, -0.005374f, +0.000736f, +0.006888f, -0.005716f, - +0.016095f, +0.002863f, -0.008718f, -0.008477f, -0.002374f, -0.001267f, -0.000393f, -0.000198f, -0.004255f, -0.006999f, - +0.001733f, +0.002087f, +0.000820f, +0.003282f, +0.000699f, +0.001047f, -0.004166f, -0.005787f, +0.001503f, -0.000516f, - -0.002247f, +0.000187f, -0.001891f, +0.000624f, -0.004893f, +0.001734f, -0.001447f, +0.000130f, +0.000828f, -0.001939f, - -0.001097f, -0.002464f, -0.001908f, +0.001407f, +0.001387f, +0.001973f, -0.001076f, -0.001618f, -0.001619f, -0.002500f, - -0.000556f, -0.000525f, +0.001171f, -0.001595f, +0.000297f, +0.001358f, -0.001158f, +0.000415f, +0.001216f, -0.000847f, - +0.001036f, +0.001634f, -0.001420f, +0.001531f, +0.001654f, -0.000961f, -0.000778f, -0.000185f, -0.000205f, -0.000540f, - -0.000532f, +0.000507f, +0.000120f, +0.000443f, +0.000536f, -0.000174f, +0.000089f, +0.000454f, -0.000259f, -0.000122f, - -0.000423f, -0.000516f, -0.000095f, -0.000207f, -0.000010f, -0.000306f - }, - { - +0.000733f, -0.005326f, -0.001981f, +0.001633f, -0.002866f, +0.000633f, +0.000300f, +0.000997f, -0.003237f, -0.003394f, - -0.000745f, -0.002121f, -0.007537f, -0.010055f, -0.001253f, -0.003750f, -0.004727f, -0.014024f, +0.011867f, -0.007502f, - +0.016494f, -0.010954f, +0.007481f, +0.019984f, +0.002136f, +0.001602f, -0.003884f, +0.004187f, +0.002894f, +0.002972f, - -0.004472f, -0.004763f, +0.009391f, -0.003470f, -0.001566f, -0.007081f, +0.001733f, -0.003735f, -0.000255f, -0.005009f, - +0.000822f, +0.002671f, +0.000991f, -0.002309f, +0.000215f, -0.000556f, -0.000971f, -0.002271f, -0.001391f, +0.001182f, - -0.002057f, -0.002895f, +0.000384f, +0.003892f, +0.000803f, +0.000373f, +0.002265f, -0.001378f, -0.001593f, +0.000734f, - +0.001517f, -0.001833f, -0.001222f, -0.000722f, -0.000137f, +0.001051f, +0.000576f, -0.001289f, -0.000895f, -0.000285f, - +0.000346f, +0.000024f, +0.001230f, -0.000962f, -0.001232f, +0.000692f, -0.000711f, +0.000281f, +0.000464f, -0.000191f, - -0.000771f, +0.001178f, +0.000377f, -0.000402f, +0.000056f, +0.000328f, +0.000723f, +0.000061f, +0.000292f, +0.000102f, - -0.000320f, -0.000216f, -0.000322f, +0.000250f, -0.000138f, +0.000176f - }, - { - -0.035785f, -0.024081f, +0.009071f, +0.024548f, +0.000936f, +0.006983f, +0.003688f, -0.005224f, -0.006702f, +0.002303f, - +0.002617f, +0.010090f, +0.012690f, -0.005206f, +0.006855f, -0.007853f, +0.005042f, +0.001474f, -0.001842f, -0.004952f, - -0.017403f, -0.001484f, -0.001613f, -0.003247f, +0.002977f, +0.000770f, +0.000201f, +0.004028f, +0.003158f, +0.004714f, - -0.002967f, -0.001653f, -0.005904f, +0.000158f, +0.001683f, -0.006166f, -0.000046f, +0.000231f, -0.000242f, +0.002509f, - +0.000222f, +0.001975f, +0.006050f, +0.001799f, -0.002266f, +0.001818f, +0.001208f, +0.000598f, +0.002146f, -0.001633f, - -0.003868f, -0.000106f, -0.004063f, -0.000709f, +0.000070f, +0.000959f, -0.001535f, +0.000684f, -0.000091f, +0.000505f, - -0.001257f, -0.000646f, +0.000253f, +0.000018f, -0.000341f, +0.000560f, +0.000034f, +0.001620f, -0.000188f, +0.000151f, - +0.000500f, -0.000475f, -0.000819f, +0.000987f, -0.000220f, -0.000581f, -0.000709f, +0.000232f, +0.000813f, -0.001178f, - -0.000026f, -0.000586f, -0.000397f, -0.000893f, +0.000709f, -0.001119f, +0.000107f, +0.000670f, -0.000033f, -0.000345f, - -0.000178f, -0.000598f, -0.000168f, +0.000184f, -0.000375f, +0.000350f - }, - { - +0.000358f, -0.008163f, +0.012179f, -0.001698f, +0.000925f, +0.001230f, +0.001332f, +0.000099f, +0.006499f, +0.002693f, - -0.005205f, -0.003660f, -0.002748f, +0.007514f, -0.002138f, +0.009542f, +0.031080f, +0.000886f, +0.010260f, -0.011099f, - -0.004259f, +0.005196f, -0.000285f, -0.005051f, +0.011573f, +0.009794f, +0.000902f, +0.001375f, -0.001010f, -0.000898f, - +0.001004f, +0.006615f, -0.006490f, +0.001130f, +0.006659f, -0.001042f, +0.003058f, -0.002239f, +0.000126f, -0.004158f, - +0.001283f, -0.005906f, -0.003659f, +0.002487f, -0.001081f, +0.002645f, +0.005024f, +0.001544f, +0.001536f, -0.000205f, - +0.000054f, -0.002158f, +0.002867f, -0.000417f, -0.001140f, -0.001849f, -0.000632f, -0.001942f, +0.000920f, +0.003150f, - +0.000589f, +0.001300f, +0.002415f, +0.000064f, -0.001265f, -0.001639f, +0.001022f, +0.000577f, -0.000358f, +0.000630f, - +0.001625f, -0.001148f, +0.001041f, -0.000932f, -0.001111f, +0.000604f, +0.000210f, -0.000124f, -0.000065f, +0.000147f, - +0.000332f, +0.000067f, -0.000361f, -0.000248f, +0.000747f, +0.000131f, +0.000097f, -0.000121f, +0.000196f, +0.000135f, - +0.000171f, -0.000194f, -0.000080f, +0.000464f, -0.000468f, +0.000254f - }, - { - -0.028110f, -0.215063f, -0.007744f, +0.023762f, -0.009634f, -0.011101f, -0.027940f, -0.002521f, +0.006666f, -0.018019f, - +0.000197f, +0.007007f, +0.014582f, -0.000364f, +0.020485f, -0.010421f, -0.009064f, +0.006700f, -0.002288f, -0.005966f, - +0.002012f, +0.010573f, -0.001245f, -0.006224f, -0.002498f, -0.001121f, -0.001249f, +0.001244f, -0.001138f, -0.002326f, - +0.006643f, -0.004307f, -0.000686f, +0.007810f, +0.003106f, +0.005102f, +0.003609f, -0.002307f, +0.001476f, -0.002220f, - +0.005047f, +0.000362f, +0.000470f, +0.003590f, -0.000208f, -0.002305f, -0.001985f, +0.000239f, +0.001196f, +0.003269f, - -0.003405f, +0.000865f, +0.002073f, -0.001532f, +0.000765f, +0.003242f, +0.001718f, +0.001882f, +0.001660f, -0.000044f, - -0.002377f, +0.001513f, +0.000949f, -0.000732f, -0.000186f, +0.002044f, -0.000296f, -0.000243f, +0.000617f, -0.001225f, - +0.000124f, +0.001613f, +0.000190f, +0.001227f, +0.000536f, -0.000765f, -0.001411f, +0.000825f, -0.000116f, -0.000388f, - -0.000028f, -0.000487f, +0.000727f, +0.000704f, -0.000570f, -0.000896f, -0.000743f, +0.000499f, +0.000381f, +0.000170f, - +0.000868f, +0.000694f, +0.000550f, -0.000223f, +0.000177f, -0.000761f - }, - { - -0.001664f, -0.045286f, -0.009765f, +0.016224f, -0.004721f, -0.009974f, +0.002423f, -0.001153f, +0.000574f, +0.000923f, - +0.002107f, -0.003817f, -0.005990f, +0.009022f, -0.014572f, +0.008093f, +0.008331f, +0.010446f, +0.003266f, +0.003950f, - -0.021779f, +0.005636f, +0.002189f, -0.014730f, +0.005252f, +0.002237f, -0.002170f, +0.004012f, -0.004789f, -0.007312f, - +0.005100f, -0.006257f, -0.006078f, -0.003979f, -0.002647f, -0.005611f, -0.002371f, -0.000861f, -0.002413f, -0.000959f, - -0.001175f, +0.000692f, +0.000967f, +0.000067f, +0.002032f, -0.000785f, +0.000437f, -0.000342f, -0.000650f, -0.002357f, - -0.000387f, -0.000493f, +0.001759f, -0.000374f, -0.003747f, -0.000417f, -0.001302f, -0.002306f, -0.001884f, -0.000831f, - -0.001434f, -0.003275f, +0.000269f, +0.000059f, +0.001077f, +0.001265f, -0.000290f, -0.000609f, +0.000337f, -0.000712f, - -0.000531f, -0.000271f, -0.000632f, +0.000590f, -0.000286f, +0.000937f, -0.001065f, -0.000164f, -0.000263f, +0.000423f, - +0.000486f, +0.000461f, -0.000030f, +0.000208f, -0.000179f, -0.000037f, +0.000220f, -0.000130f, +0.000418f, +0.000380f, - -0.000207f, +0.000234f, -0.000178f, -0.000289f, -0.000228f, +0.000062f - }, - { - +0.009230f, +0.306026f, -0.010553f, +0.005473f, +0.000509f, +0.017401f, +0.006643f, -0.001669f, +0.003630f, +0.004576f, - -0.008296f, -0.005425f, +0.001778f, -0.015936f, -0.003062f, +0.002611f, +0.009652f, -0.008769f, -0.004980f, +0.005183f, - -0.003598f, -0.007462f, +0.007638f, +0.001352f, +0.002539f, -0.001727f, -0.008679f, +0.004924f, -0.002765f, +0.011189f, - -0.006666f, -0.002513f, -0.000099f, -0.005709f, -0.005997f, -0.004156f, +0.002852f, +0.001808f, +0.002297f, -0.000544f, - +0.000175f, +0.002832f, +0.002242f, -0.008769f, -0.000133f, +0.002404f, +0.000727f, -0.001934f, +0.002926f, -0.003276f, - -0.001876f, +0.002189f, -0.000840f, +0.000205f, -0.001559f, +0.000294f, -0.001499f, +0.004928f, -0.001096f, -0.000125f, - -0.001745f, -0.001865f, -0.000651f, -0.002729f, +0.000117f, +0.000082f, +0.001595f, -0.001004f, +0.000708f, -0.000367f, - -0.000325f, +0.000375f, +0.000272f, -0.001542f, -0.000704f, +0.002489f, +0.000471f, +0.000225f, -0.001234f, +0.000092f, - -0.001769f, -0.000068f, +0.000143f, +0.000508f, -0.000745f, -0.000464f, -0.000080f, +0.000128f, +0.000656f, -0.000564f, - -0.000093f, +0.000198f, -0.000399f, -0.000327f, +0.000501f, +0.000602f - }, - { - -0.001967f, +0.047799f, +0.012586f, -0.004075f, +0.010345f, +0.002289f, +0.016879f, -0.008300f, +0.001365f, -0.001060f, - -0.002549f, +0.009176f, -0.016711f, -0.038148f, -0.024990f, +0.003654f, -0.003222f, +0.006376f, -0.010485f, -0.001133f, - +0.010766f, +0.008063f, +0.021444f, +0.006622f, +0.003613f, +0.000733f, -0.004909f, -0.008191f, +0.003476f, -0.002000f, - +0.008197f, -0.007505f, -0.003167f, -0.011159f, +0.002378f, -0.002281f, -0.004847f, -0.002335f, +0.006403f, -0.004644f, - -0.005494f, +0.004423f, +0.001804f, -0.004006f, -0.007350f, +0.000419f, +0.004711f, +0.000629f, +0.001160f, +0.003723f, - +0.000854f, -0.000467f, +0.003117f, +0.001086f, +0.003097f, +0.000836f, -0.001558f, -0.001994f, +0.000109f, -0.001778f, - +0.000390f, -0.000020f, -0.000973f, +0.001649f, +0.000230f, +0.000649f, -0.001019f, -0.000443f, -0.001559f, +0.000163f, - -0.000991f, +0.002365f, -0.000171f, -0.000518f, -0.001211f, -0.002118f, -0.000821f, +0.000270f, +0.001168f, +0.000443f, - +0.000523f, +0.000518f, -0.001580f, -0.000038f, -0.000409f, +0.000788f, -0.000145f, +0.000087f, +0.000053f, -0.000117f, - +0.000045f, -0.000051f, -0.000157f, +0.000687f, +0.000050f, -0.000004f - }, - { - +0.037669f, +0.078346f, +0.007615f, +0.015315f, -0.010868f, -0.002789f, -0.008329f, -0.002654f, -0.008237f, +0.003488f, - -0.002090f, +0.003735f, -0.007880f, +0.017368f, -0.004763f, +0.008228f, +0.002596f, +0.007248f, +0.006121f, +0.011589f, - -0.002008f, -0.004010f, +0.006853f, -0.002723f, +0.006722f, +0.010260f, +0.004229f, -0.002694f, +0.004933f, +0.006621f, - +0.006115f, +0.007623f, +0.002894f, +0.002982f, -0.007086f, +0.002118f, -0.003868f, -0.002404f, -0.003209f, -0.001483f, - -0.000776f, -0.005786f, +0.000968f, +0.005173f, +0.000325f, +0.002633f, +0.001383f, -0.004041f, +0.000428f, -0.001006f, - +0.000339f, +0.000699f, -0.001951f, +0.000613f, +0.000369f, -0.002279f, +0.000917f, +0.000988f, -0.000144f, -0.002380f, - +0.000435f, +0.000787f, +0.001232f, +0.001735f, +0.000026f, -0.000881f, -0.000956f, +0.000139f, -0.000275f, -0.000666f, - -0.000366f, -0.001800f, -0.001676f, -0.000939f, +0.000548f, -0.000289f, -0.001138f, +0.000096f, +0.000001f, +0.000345f, - -0.000214f, +0.001436f, +0.000333f, -0.000010f, +0.000761f, -0.000176f, +0.000049f, -0.000069f, +0.000580f, +0.000472f, - -0.000097f, -0.000301f, -0.000444f, -0.000164f, -0.000058f, -0.000059f - }, - { - -0.004487f, +0.024884f, +0.004208f, -0.002236f, +0.001073f, -0.004201f, +0.010713f, -0.000898f, -0.005375f, -0.006574f, - -0.000458f, -0.002713f, -0.006288f, -0.027516f, -0.024986f, -0.006746f, -0.004117f, +0.003597f, +0.004159f, +0.007641f, - +0.001182f, +0.008599f, +0.007501f, -0.008554f, +0.000366f, +0.000579f, +0.003205f, -0.000635f, -0.015681f, -0.001435f, - +0.008045f, +0.004661f, +0.001136f, +0.002715f, +0.002267f, +0.002990f, -0.002914f, +0.004976f, +0.000039f, -0.003228f, - -0.003954f, -0.002937f, -0.003349f, +0.001041f, -0.004264f, +0.001485f, -0.001407f, +0.001162f, +0.004705f, -0.001719f, - -0.000058f, +0.001744f, +0.003458f, +0.003487f, +0.001569f, +0.001131f, -0.000630f, -0.000413f, -0.000861f, -0.000809f, - +0.003085f, -0.000464f, -0.001818f, -0.000849f, +0.001381f, -0.001193f, +0.001958f, +0.000298f, +0.001327f, +0.000303f, - -0.001148f, -0.000598f, -0.000674f, +0.000370f, -0.000132f, +0.000228f, -0.000238f, -0.000162f, -0.000783f, -0.000022f, - +0.000347f, +0.000331f, +0.000664f, -0.000117f, -0.000930f, +0.000082f, +0.000342f, -0.000363f, +0.000778f, +0.000226f, - -0.000037f, +0.000303f, +0.000002f, +0.000484f, +0.000502f, +0.000514f - } - }, - { - { - -0.010676f, +0.322599f, -0.124309f, +0.043726f, +0.013808f, -0.007829f, +0.001674f, +0.009140f, -0.014454f, +0.005903f, - -0.001605f, -0.006144f, -0.004251f, +0.004600f, +0.012729f, +0.001620f, +0.013324f, +0.002418f, -0.018418f, +0.001796f, - -0.011031f, +0.008803f, -0.004426f, +0.009590f, -0.001258f, -0.009428f, +0.003968f, -0.002510f, -0.002849f, -0.001807f, - -0.001863f, +0.001157f, +0.005596f, +0.000368f, -0.001931f, -0.007386f, +0.006314f, +0.003501f, -0.002128f, -0.001722f, - +0.000084f, -0.001589f, +0.003570f, -0.001577f, +0.003482f, +0.004369f, +0.002936f, -0.000738f, -0.002487f, +0.002519f, - -0.002798f, -0.000452f, -0.002716f, +0.002807f, -0.001070f, +0.001744f, -0.001267f, +0.000208f, -0.000013f, +0.001179f, - -0.000270f, +0.001274f, +0.001253f, -0.002159f, +0.000026f, -0.002082f, +0.000517f, +0.001376f, -0.001811f, +0.000777f, - +0.000306f, -0.000408f, +0.000105f, -0.000930f, -0.000943f, -0.001138f, +0.001304f, -0.000674f, -0.000822f, -0.000252f, - -0.000259f, -0.000210f, -0.000539f, -0.000300f, +0.000203f, +0.000757f, -0.000375f, -0.000470f, +0.000271f, -0.000050f, - +0.000299f, +0.000509f, -0.000392f, +0.000092f, +0.000480f, -0.000243f - }, - { - +0.003276f, -0.094618f, +0.009510f, +0.022767f, +0.007440f, +0.005549f, -0.002656f, +0.004873f, -0.004127f, -0.005525f, - +0.002901f, +0.006969f, -0.004703f, +0.002113f, -0.007708f, -0.011885f, -0.002502f, -0.008157f, -0.009064f, +0.009230f, - -0.000049f, -0.006266f, -0.003756f, -0.012147f, +0.003946f, -0.016214f, -0.012868f, +0.002813f, -0.007220f, +0.011672f, - -0.002613f, +0.001601f, -0.003573f, +0.000164f, +0.002283f, +0.006776f, -0.001974f, -0.000038f, -0.003476f, -0.000425f, - +0.000051f, +0.006312f, -0.003357f, -0.001235f, +0.000259f, +0.005964f, +0.002570f, -0.000693f, +0.004884f, -0.000526f, - -0.003392f, +0.000765f, -0.000817f, -0.000398f, -0.001271f, -0.001584f, +0.001685f, -0.000342f, +0.000070f, +0.000973f, - -0.000310f, +0.000878f, +0.001349f, -0.001226f, -0.001156f, -0.000114f, +0.001339f, +0.000194f, -0.000472f, +0.001292f, - -0.000957f, +0.000292f, +0.000526f, +0.000420f, +0.000752f, +0.000025f, -0.000603f, +0.000928f, -0.002014f, +0.000078f, - +0.000128f, -0.000033f, -0.000214f, +0.000592f, +0.000015f, -0.000309f, +0.000006f, -0.000101f, -0.000382f, +0.000521f, - +0.000421f, -0.000410f, +0.000185f, +0.000135f, +0.000382f, -0.000371f - }, - { - -0.003286f, -0.060860f, +0.041522f, +0.040235f, -0.005171f, -0.000248f, +0.006761f, +0.002735f, +0.000225f, +0.000875f, - -0.013330f, +0.015287f, +0.006201f, +0.000855f, -0.012263f, +0.000361f, -0.000509f, +0.013185f, -0.020466f, -0.000622f, - -0.005506f, +0.008026f, +0.005441f, +0.004130f, -0.008554f, +0.025476f, +0.000436f, +0.006177f, -0.009058f, +0.011216f, - +0.000514f, -0.002408f, +0.010951f, -0.005709f, -0.006747f, +0.003118f, -0.000211f, -0.004954f, -0.000518f, -0.002610f, - -0.001378f, +0.000596f, -0.003407f, +0.000158f, +0.000568f, -0.002846f, -0.001571f, -0.001180f, +0.002297f, -0.002479f, - +0.000117f, +0.000816f, -0.001778f, +0.000847f, -0.001106f, -0.001016f, -0.000458f, +0.001740f, +0.000200f, -0.000947f, - +0.000568f, +0.000255f, -0.002367f, -0.001574f, -0.001495f, -0.001808f, +0.000685f, -0.001784f, +0.000256f, +0.001388f, - -0.000090f, +0.000504f, -0.000564f, -0.000400f, +0.001441f, -0.000256f, -0.000179f, -0.000529f, -0.000738f, -0.001369f, - +0.000551f, -0.000495f, -0.000437f, +0.000660f, +0.000401f, +0.000111f, +0.000167f, -0.000068f, +0.000083f, +0.000420f, - -0.000515f, +0.000043f, +0.000114f, -0.000349f, +0.000082f, +0.000018f - }, - { - -0.047042f, -0.226515f, +0.040270f, +0.048614f, +0.006694f, +0.004240f, -0.003650f, +0.001051f, -0.001406f, +0.003653f, - -0.001672f, +0.007451f, +0.002298f, -0.014578f, +0.021394f, +0.011333f, +0.001907f, -0.003076f, -0.010792f, +0.000149f, - -0.001299f, +0.002776f, -0.004972f, +0.004888f, -0.000094f, -0.007803f, -0.003983f, +0.002967f, -0.002156f, +0.003751f, - -0.001627f, +0.006693f, +0.009475f, +0.000321f, +0.004022f, +0.002549f, -0.004564f, -0.004679f, +0.000115f, -0.000584f, - +0.000323f, -0.000328f, +0.003478f, +0.001350f, -0.002699f, +0.000600f, +0.000712f, +0.004000f, -0.003452f, -0.001032f, - -0.002255f, -0.001483f, -0.002139f, -0.000740f, -0.000888f, +0.002931f, +0.002348f, -0.003386f, +0.002858f, -0.001683f, - +0.000370f, -0.000270f, -0.002285f, +0.000760f, -0.000984f, -0.000054f, -0.000249f, +0.000695f, -0.000120f, +0.000620f, - +0.000394f, +0.000326f, +0.000683f, -0.000159f, -0.001183f, +0.000756f, +0.000456f, +0.000438f, +0.001304f, -0.000286f, - +0.001121f, +0.000456f, +0.000315f, +0.000132f, +0.000196f, -0.000111f, -0.000244f, +0.000166f, -0.000228f, +0.000348f, - -0.000182f, +0.000546f, -0.000235f, -0.000196f, +0.000164f, +0.000013f - }, - { - +0.002924f, +0.048638f, -0.024362f, +0.000163f, +0.000977f, +0.000661f, +0.004433f, -0.005964f, -0.001678f, -0.001787f, - -0.004138f, +0.003666f, +0.016647f, +0.000347f, -0.042994f, +0.004568f, -0.030548f, -0.018026f, -0.050140f, -0.000681f, - +0.009163f, +0.003089f, +0.001777f, +0.011330f, -0.006342f, +0.005097f, +0.008725f, +0.011058f, +0.005033f, -0.009537f, - +0.005684f, +0.007846f, +0.007530f, +0.000229f, +0.007697f, +0.000043f, +0.002250f, +0.006327f, -0.001126f, -0.004133f, - -0.001128f, +0.000107f, +0.001497f, +0.001178f, -0.002669f, +0.000862f, +0.002706f, +0.001074f, +0.001724f, +0.002442f, - -0.005414f, -0.002397f, +0.002675f, +0.001133f, +0.000098f, -0.000557f, -0.000623f, +0.000625f, +0.002369f, -0.000985f, - -0.005326f, +0.000425f, -0.002102f, -0.000355f, +0.001596f, +0.001465f, -0.000065f, -0.000103f, -0.001003f, -0.000729f, - -0.000352f, +0.000174f, -0.000010f, +0.000797f, -0.001489f, -0.000167f, +0.000638f, +0.000397f, +0.000090f, +0.000886f, - +0.000467f, +0.001594f, -0.000619f, -0.000146f, -0.000236f, +0.000500f, -0.000431f, +0.000562f, +0.000278f, +0.000233f, - +0.000571f, -0.000179f, +0.000553f, -0.000185f, -0.000309f, +0.000323f - }, - { - -0.064450f, -0.074002f, +0.028788f, -0.044318f, -0.005863f, -0.005211f, +0.002912f, -0.011285f, +0.002945f, +0.005654f, - +0.006759f, +0.005389f, +0.001974f, -0.014272f, +0.002973f, -0.003786f, -0.009149f, +0.012882f, +0.003397f, -0.002871f, - +0.014673f, +0.000346f, -0.001573f, -0.013262f, +0.000404f, -0.001551f, -0.002389f, -0.001960f, -0.003811f, -0.005494f, - -0.000486f, -0.003039f, -0.000068f, +0.008059f, +0.002003f, +0.000474f, -0.002453f, -0.010596f, -0.002699f, +0.003232f, - +0.002144f, -0.002036f, -0.001924f, +0.002959f, -0.008635f, -0.000064f, +0.003358f, -0.000380f, -0.001256f, +0.003185f, - -0.002205f, -0.003989f, +0.000356f, +0.001616f, -0.001168f, +0.002988f, -0.000273f, -0.000565f, -0.003266f, -0.003491f, - -0.000539f, -0.000125f, -0.000123f, +0.000012f, +0.000948f, +0.001735f, -0.001068f, -0.000603f, +0.000979f, -0.000237f, - +0.001071f, +0.000175f, +0.001000f, +0.000582f, +0.001849f, -0.000653f, -0.000521f, -0.000598f, -0.000522f, -0.001570f, - +0.000540f, +0.000026f, +0.000227f, +0.000273f, +0.000478f, +0.000300f, +0.000087f, +0.000498f, -0.000160f, -0.000797f, - +0.000168f, -0.000782f, -0.000531f, -0.000155f, +0.000313f, -0.000297f - }, - { - -0.001228f, -0.010555f, +0.006386f, +0.000404f, -0.001097f, +0.000627f, +0.000239f, -0.002141f, -0.000836f, -0.001221f, - -0.001661f, -0.004125f, -0.014061f, +0.003389f, -0.005648f, -0.010116f, -0.010091f, -0.003940f, +0.001264f, +0.020502f, - -0.000758f, +0.003710f, -0.005606f, +0.031640f, -0.009767f, +0.004242f, +0.004082f, -0.010461f, +0.008640f, -0.000550f, - +0.001173f, -0.002299f, -0.005721f, +0.007102f, -0.008660f, -0.001764f, -0.001243f, -0.004074f, +0.000537f, -0.003448f, - -0.002802f, +0.003223f, -0.000937f, +0.000712f, -0.000695f, -0.001044f, -0.002518f, -0.000626f, -0.001685f, -0.000625f, - -0.004394f, +0.000255f, +0.000855f, +0.002276f, +0.000451f, +0.001097f, +0.003231f, -0.001086f, +0.001118f, -0.000790f, - +0.001326f, -0.001387f, -0.001054f, -0.000153f, -0.000615f, +0.001259f, +0.001149f, -0.001288f, -0.001459f, -0.000988f, - +0.001033f, +0.000632f, +0.000070f, -0.000169f, -0.000403f, +0.000604f, -0.000344f, +0.000127f, +0.000066f, +0.000028f, - +0.000514f, +0.000007f, -0.000302f, +0.000073f, -0.000114f, +0.000778f, +0.000260f, +0.000539f, -0.000047f, -0.000207f, - +0.000005f, -0.000127f, -0.000760f, +0.000163f, +0.000087f, -0.000199f - }, - { - +0.063650f, -0.085687f, -0.038923f, +0.019354f, -0.001226f, +0.003770f, -0.004016f, -0.000961f, -0.009498f, +0.008580f, - +0.011471f, -0.000324f, +0.012697f, +0.024381f, -0.027093f, +0.005691f, -0.006641f, +0.006138f, -0.002825f, -0.006168f, - -0.008831f, -0.006674f, -0.000826f, -0.001078f, +0.001615f, -0.004596f, +0.003607f, +0.001183f, +0.009861f, -0.004475f, - -0.002397f, +0.003848f, -0.000411f, -0.002978f, -0.000054f, -0.000456f, -0.006998f, +0.004345f, -0.003282f, +0.002079f, - -0.002252f, +0.006285f, +0.002553f, +0.002319f, -0.003719f, +0.003615f, +0.002132f, -0.003551f, +0.005517f, +0.002432f, - -0.004506f, -0.000095f, -0.004158f, -0.001108f, -0.001147f, +0.002300f, -0.000015f, -0.001969f, +0.000831f, +0.001038f, - -0.002287f, +0.000394f, +0.000673f, -0.000234f, -0.000875f, +0.000609f, +0.001349f, -0.000078f, +0.000795f, +0.000491f, - +0.000468f, -0.000888f, +0.000383f, +0.000257f, +0.000111f, -0.000975f, +0.000129f, +0.000095f, +0.000113f, +0.000068f, - -0.000104f, -0.000115f, -0.000452f, -0.001435f, -0.000041f, -0.000074f, -0.000621f, +0.000797f, +0.000032f, -0.000408f, - -0.000168f, -0.000829f, -0.000046f, +0.000310f, -0.000171f, +0.000049f - }, - { - -0.001379f, +0.006965f, +0.003517f, -0.001453f, -0.001262f, -0.000249f, +0.003140f, +0.001869f, +0.005297f, -0.001902f, - -0.005974f, -0.006580f, +0.007861f, +0.019405f, -0.026213f, +0.013364f, +0.003266f, +0.024987f, +0.007538f, -0.010959f, - +0.005505f, -0.006753f, +0.008096f, +0.000586f, -0.005830f, +0.011357f, +0.010313f, +0.010540f, -0.003660f, -0.008015f, - +0.014913f, -0.016841f, +0.007709f, +0.001715f, -0.003086f, +0.003365f, +0.004999f, -0.004180f, -0.002912f, +0.000311f, - -0.001174f, -0.006808f, -0.002337f, +0.003070f, -0.000607f, +0.003172f, +0.003173f, +0.000245f, +0.004381f, -0.000329f, - -0.000294f, -0.002385f, +0.002167f, +0.001032f, -0.000478f, -0.003861f, +0.000601f, +0.000617f, -0.000314f, +0.000889f, - +0.000615f, +0.001533f, +0.001862f, -0.000359f, -0.001613f, -0.000758f, -0.000062f, +0.000253f, +0.000758f, +0.001179f, - +0.000348f, -0.000809f, +0.000891f, -0.000010f, +0.000338f, -0.000435f, +0.000823f, -0.000851f, +0.000658f, -0.000378f, - +0.001125f, -0.000462f, -0.000673f, -0.000059f, +0.000905f, -0.000026f, -0.000209f, +0.000502f, +0.000193f, +0.000034f, - +0.000022f, +0.000161f, -0.000062f, +0.000157f, +0.000001f, -0.000126f - }, - { - +0.028053f, -0.165567f, -0.116071f, +0.010766f, +0.038417f, +0.002690f, -0.052192f, -0.008930f, +0.000036f, -0.005836f, - -0.004540f, +0.003711f, +0.016277f, +0.009091f, +0.011288f, -0.006439f, -0.006604f, -0.002547f, +0.003595f, -0.002536f, - -0.000370f, +0.005597f, +0.000576f, +0.000221f, -0.001250f, -0.011988f, +0.003855f, -0.003475f, +0.007018f, -0.011267f, - +0.008646f, +0.003339f, -0.004897f, +0.009595f, -0.000324f, +0.001313f, +0.000233f, +0.002366f, +0.002849f, +0.005292f, - -0.006169f, +0.004694f, +0.002199f, +0.000254f, +0.000048f, -0.000865f, -0.001109f, +0.004194f, -0.003484f, +0.001413f, - -0.001544f, +0.002846f, +0.001456f, -0.000441f, +0.001221f, +0.002103f, +0.001948f, +0.001000f, +0.001964f, -0.001363f, - +0.000829f, -0.001162f, +0.002541f, -0.001382f, +0.001246f, -0.000698f, +0.000661f, +0.000025f, -0.000665f, -0.000357f, - +0.000037f, +0.001653f, +0.000486f, +0.001054f, +0.000347f, -0.001346f, -0.000281f, -0.000002f, -0.000288f, +0.000108f, - -0.000962f, +0.000575f, +0.000470f, +0.000785f, -0.000889f, -0.000399f, -0.000385f, +0.000761f, -0.000219f, +0.001229f, - -0.000075f, +0.001006f, +0.000347f, -0.000330f, -0.000130f, +0.000015f - }, - { - +0.001893f, -0.013154f, -0.030874f, -0.002760f, +0.005359f, -0.006048f, -0.000440f, -0.007192f, +0.003421f, -0.000761f, - +0.003931f, -0.008492f, +0.004250f, -0.001348f, -0.005056f, +0.002029f, +0.002063f, +0.017335f, +0.008926f, -0.005853f, - -0.017213f, +0.003767f, +0.011889f, -0.006306f, -0.000638f, +0.010695f, -0.013821f, +0.010344f, -0.011687f, -0.001663f, - +0.000619f, -0.001773f, -0.003250f, -0.005472f, -0.006288f, -0.003116f, -0.002288f, +0.000084f, -0.002083f, -0.005834f, - +0.000454f, +0.000361f, +0.002889f, +0.000315f, +0.000669f, -0.001225f, +0.002022f, -0.000418f, -0.000630f, -0.001589f, - -0.002684f, +0.001631f, +0.000691f, +0.000036f, -0.004071f, +0.001103f, -0.002845f, -0.001574f, -0.000966f, -0.002176f, - +0.000780f, -0.003197f, -0.000674f, +0.001266f, +0.000221f, +0.000440f, -0.000365f, +0.000233f, +0.000143f, -0.001613f, - +0.000268f, -0.000911f, -0.000017f, +0.000099f, +0.000420f, -0.000033f, -0.000502f, -0.000662f, +0.000371f, -0.000572f, - +0.000805f, +0.000176f, +0.000348f, +0.000024f, -0.000166f, +0.000097f, -0.000043f, +0.000029f, +0.000664f, -0.000040f, - +0.000272f, -0.000104f, -0.000128f, -0.000020f, -0.000105f, +0.000037f - }, - { - +0.038722f, +0.279686f, -0.015771f, +0.001184f, +0.001655f, +0.010539f, -0.003933f, +0.011141f, -0.002949f, -0.002359f, - -0.003388f, -0.004930f, -0.000284f, -0.011138f, -0.008015f, +0.010216f, +0.008872f, -0.000258f, +0.002541f, -0.002995f, - -0.003208f, -0.005090f, +0.000537f, +0.011642f, -0.010933f, +0.004742f, -0.003976f, -0.003378f, +0.004390f, +0.007869f, - -0.001980f, -0.003758f, -0.004289f, -0.002769f, -0.005365f, -0.008154f, +0.005287f, +0.000580f, +0.002897f, -0.002812f, - +0.004497f, -0.002396f, -0.001898f, +0.001521f, -0.002960f, +0.002626f, -0.000803f, +0.000230f, +0.002431f, +0.000044f, - -0.003170f, -0.000220f, +0.002640f, -0.001749f, -0.002046f, +0.002028f, +0.000556f, +0.001765f, -0.000323f, -0.001790f, - -0.002126f, +0.000775f, -0.002686f, -0.002150f, -0.000090f, -0.000250f, +0.000966f, +0.000136f, -0.000956f, +0.000469f, - -0.000456f, +0.000049f, +0.001023f, -0.002121f, -0.000024f, +0.001404f, +0.001835f, -0.000985f, -0.000464f, -0.000222f, - -0.001210f, -0.000147f, +0.000227f, +0.000345f, -0.000506f, -0.000168f, -0.000779f, +0.000772f, -0.000053f, -0.000436f, - +0.000115f, +0.000104f, +0.000111f, -0.000328f, +0.000269f, +0.000472f - }, - { - +0.001277f, +0.053753f, +0.009032f, -0.000061f, -0.001369f, +0.008719f, +0.006441f, +0.003694f, -0.002873f, -0.003608f, - +0.008206f, -0.003172f, +0.008329f, -0.085933f, -0.005689f, +0.005190f, +0.002203f, -0.001662f, -0.004440f, -0.003718f, - -0.001238f, +0.022078f, +0.030094f, +0.004270f, -0.011883f, +0.011261f, -0.010826f, -0.000757f, -0.006721f, +0.017526f, - -0.003310f, -0.000934f, -0.006728f, -0.007779f, +0.003067f, -0.007524f, -0.000052f, -0.003238f, +0.001241f, -0.002296f, - -0.002823f, +0.003123f, +0.001584f, -0.007119f, -0.002800f, +0.000250f, +0.004675f, +0.002328f, -0.002596f, -0.000503f, - +0.005453f, +0.002597f, +0.002253f, +0.001785f, +0.003714f, -0.001164f, -0.000599f, -0.003078f, -0.000063f, -0.001547f, - -0.001332f, +0.001765f, -0.000241f, -0.000978f, +0.002124f, -0.001073f, +0.000566f, -0.002980f, +0.001042f, -0.000962f, - +0.000219f, +0.000574f, +0.000452f, -0.000328f, -0.001739f, -0.000670f, -0.000750f, +0.000048f, +0.001501f, +0.000191f, - +0.000713f, -0.000226f, -0.001431f, -0.000648f, -0.000259f, +0.000310f, +0.000217f, +0.000041f, -0.000007f, -0.000258f, - -0.000359f, -0.000111f, +0.000405f, +0.000253f, +0.000030f, +0.000617f - }, - { - -0.013935f, +0.143209f, +0.019446f, -0.004390f, -0.010319f, +0.012958f, -0.022055f, -0.006124f, -0.002560f, +0.007094f, - +0.001369f, +0.001158f, -0.005171f, -0.023567f, +0.057970f, +0.009424f, -0.009566f, +0.003646f, +0.006784f, +0.014016f, - -0.002839f, +0.004002f, -0.004093f, +0.005287f, +0.008179f, +0.009354f, -0.002180f, +0.006404f, +0.000141f, +0.010456f, - +0.004952f, +0.003461f, +0.005482f, -0.002608f, -0.002255f, +0.001479f, -0.004256f, -0.005712f, -0.001647f, -0.002353f, - +0.003918f, -0.004187f, -0.004205f, +0.002819f, +0.004668f, +0.000039f, -0.002025f, -0.003732f, +0.000784f, +0.002317f, - -0.001702f, +0.003261f, -0.000905f, +0.002089f, -0.001865f, -0.002825f, +0.000259f, -0.000099f, +0.000020f, -0.000270f, - -0.001573f, +0.001918f, +0.000526f, +0.000138f, +0.000576f, -0.000438f, -0.001071f, +0.000634f, -0.000524f, -0.001032f, - -0.000903f, -0.001518f, -0.000826f, -0.001071f, -0.000329f, -0.000431f, -0.000800f, +0.000197f, +0.000424f, -0.000443f, - +0.000237f, +0.000336f, +0.000081f, +0.000444f, +0.000478f, +0.000101f, +0.000077f, +0.000072f, +0.000418f, +0.000195f, - +0.000172f, -0.000132f, -0.000560f, -0.000306f, +0.000053f, -0.000092f - }, - { - +0.004400f, +0.025951f, -0.006493f, -0.005622f, -0.001481f, +0.001838f, +0.007100f, +0.001990f, -0.004611f, -0.009374f, - -0.005968f, +0.000771f, -0.002717f, +0.005084f, -0.075227f, -0.003136f, -0.001231f, +0.007688f, -0.003005f, +0.014317f, - -0.005760f, +0.014912f, -0.009117f, +0.000061f, +0.000749f, -0.002795f, +0.007157f, -0.006166f, -0.011313f, -0.000261f, - +0.002115f, +0.003194f, +0.007636f, +0.003352f, -0.003060f, +0.000906f, +0.001008f, +0.002181f, -0.002263f, -0.002500f, - -0.001760f, -0.001842f, -0.001217f, -0.004720f, -0.001265f, +0.000078f, -0.001032f, +0.002325f, +0.002394f, -0.001140f, - -0.000177f, +0.003676f, +0.003839f, +0.004719f, +0.000387f, -0.000412f, -0.000059f, -0.001725f, -0.001129f, +0.001491f, - +0.002562f, +0.000144f, -0.002355f, -0.001495f, +0.000503f, +0.000653f, +0.001873f, -0.000050f, +0.001877f, -0.001907f, - -0.000108f, +0.000590f, -0.000496f, -0.000459f, +0.000607f, -0.000289f, -0.000728f, -0.000427f, -0.000116f, +0.000158f, - +0.000639f, -0.000210f, +0.000479f, -0.000361f, -0.000229f, -0.000543f, +0.000267f, +0.000324f, +0.000527f, +0.000083f, - +0.000483f, -0.000290f, +0.000421f, +0.000338f, +0.000423f, -0.000116f - } - }, - { - { - +0.010693f, +0.417234f, -0.084083f, +0.011468f, -0.016776f, -0.005790f, -0.000757f, -0.001771f, -0.014771f, +0.013472f, - -0.002242f, +0.002480f, +0.001457f, -0.002997f, +0.017699f, +0.002761f, +0.007783f, +0.014157f, -0.013047f, -0.005441f, - -0.003824f, +0.015366f, -0.007732f, +0.004552f, +0.001741f, -0.002974f, +0.009722f, -0.001777f, +0.000618f, +0.000651f, - +0.002954f, +0.004379f, -0.000727f, -0.003797f, +0.002421f, -0.002963f, +0.008597f, +0.001662f, -0.006595f, +0.000351f, - +0.000406f, -0.002653f, +0.000780f, -0.000229f, +0.000928f, -0.000753f, +0.002173f, +0.000100f, -0.003767f, +0.001579f, - -0.004505f, -0.001026f, -0.000672f, +0.005366f, -0.000540f, -0.000880f, -0.000477f, +0.002678f, +0.001519f, +0.001393f, - -0.000125f, +0.001649f, +0.001014f, -0.001737f, +0.002316f, +0.000474f, +0.000591f, +0.000577f, -0.002022f, +0.000744f, - +0.000831f, -0.000374f, +0.000317f, -0.000163f, -0.000441f, +0.000068f, +0.002402f, +0.000360f, +0.000078f, -0.000218f, - -0.000109f, +0.000744f, +0.000815f, -0.000003f, -0.000201f, +0.000923f, -0.000297f, +0.000021f, +0.001075f, +0.000458f, - -0.000091f, -0.000033f, -0.000561f, -0.000421f, +0.000131f, -0.000125f - }, - { - -0.000422f, -0.055849f, +0.031670f, +0.012747f, -0.005466f, -0.001006f, -0.004333f, +0.007294f, -0.002743f, -0.001763f, - +0.004336f, +0.003736f, -0.011321f, +0.000614f, -0.004650f, -0.009143f, +0.004016f, -0.003330f, -0.007980f, +0.009636f, - +0.005940f, +0.011093f, +0.020715f, -0.001094f, +0.007364f, -0.017258f, -0.015578f, +0.006533f, -0.005350f, +0.002104f, - +0.001896f, +0.011861f, -0.003448f, -0.001936f, +0.000197f, +0.005677f, -0.000892f, -0.002652f, -0.005731f, -0.002594f, - -0.003990f, +0.009109f, +0.000889f, -0.000501f, -0.001825f, -0.000392f, -0.001287f, -0.003305f, +0.001721f, -0.002173f, - -0.003454f, +0.000707f, -0.000993f, -0.000666f, -0.002887f, -0.000635f, +0.000558f, -0.000376f, +0.000124f, -0.000323f, - -0.000804f, +0.000439f, +0.001518f, +0.000192f, +0.000379f, +0.001025f, +0.001409f, +0.000293f, -0.001116f, -0.000064f, - -0.002320f, -0.000919f, -0.000229f, -0.000649f, -0.000435f, -0.000459f, -0.000517f, +0.001434f, -0.000167f, +0.000858f, - -0.000291f, -0.000222f, +0.000099f, +0.000478f, +0.000048f, -0.000091f, -0.000356f, +0.000289f, +0.000100f, +0.000248f, - +0.000362f, -0.000652f, -0.000070f, +0.000049f, +0.000265f, -0.000262f - }, - { - -0.000869f, -0.186049f, -0.053866f, +0.038145f, -0.006144f, +0.004282f, +0.002896f, -0.003312f, +0.002999f, -0.001364f, - -0.017618f, +0.014125f, +0.002548f, -0.002667f, -0.011035f, +0.003667f, -0.004765f, +0.009567f, -0.017263f, +0.009558f, - +0.000700f, +0.005655f, +0.001675f, -0.006028f, -0.010344f, +0.024670f, -0.011958f, -0.003007f, -0.010625f, +0.011477f, - +0.003263f, +0.004188f, +0.008949f, -0.007663f, +0.002298f, +0.007313f, -0.000073f, -0.002615f, +0.003729f, +0.006995f, - -0.000044f, +0.001580f, -0.000761f, +0.001099f, +0.000525f, -0.003799f, +0.000011f, -0.000605f, +0.000083f, -0.004042f, - +0.001530f, +0.001116f, -0.003248f, -0.000721f, -0.001480f, -0.001093f, -0.001845f, +0.000579f, +0.000475f, -0.001514f, - -0.000149f, +0.001726f, -0.000788f, -0.002000f, -0.000886f, -0.002006f, +0.000808f, -0.002029f, -0.000377f, +0.000262f, - -0.000555f, +0.000353f, -0.000179f, -0.000045f, +0.001202f, -0.000272f, +0.000363f, +0.000327f, -0.000698f, -0.000559f, - +0.001498f, +0.000278f, -0.000519f, +0.000188f, +0.000276f, -0.000172f, +0.000336f, +0.000330f, +0.000160f, +0.000350f, - -0.000065f, +0.000635f, +0.000430f, -0.000433f, +0.000117f, +0.000104f - }, - { - +0.071114f, -0.124693f, -0.006001f, +0.036646f, -0.002488f, +0.003173f, -0.005521f, +0.002390f, -0.003078f, -0.002212f, - -0.008246f, -0.000733f, +0.005196f, -0.008469f, +0.015268f, +0.003972f, -0.002154f, -0.004919f, -0.004118f, +0.002314f, - -0.003255f, +0.005741f, -0.001430f, +0.006056f, +0.005664f, +0.002215f, -0.001310f, +0.001998f, +0.001040f, +0.001495f, - +0.000070f, +0.004010f, +0.002891f, -0.004530f, -0.005162f, -0.002197f, -0.002599f, -0.005268f, -0.002143f, -0.002094f, - +0.000980f, +0.001272f, +0.000608f, -0.002786f, -0.003093f, -0.000871f, -0.001163f, +0.003399f, -0.000547f, +0.002622f, - -0.001382f, -0.000828f, +0.000645f, +0.000372f, -0.001067f, +0.001722f, -0.000681f, -0.003386f, +0.002206f, -0.002481f, - -0.000080f, +0.001286f, -0.000174f, +0.002097f, -0.000894f, -0.000275f, -0.000329f, -0.000421f, +0.000186f, +0.001241f, - -0.000012f, +0.000066f, +0.001191f, +0.000380f, -0.001140f, +0.000338f, +0.000077f, +0.000090f, +0.001111f, -0.000230f, - +0.000127f, -0.000100f, +0.000018f, -0.000205f, -0.000278f, +0.000063f, -0.000067f, +0.000255f, -0.000024f, +0.000200f, - +0.000077f, +0.000539f, -0.000058f, -0.000058f, +0.000147f, +0.000297f - }, - { - -0.001724f, +0.072241f, -0.002019f, +0.002009f, +0.000569f, -0.000085f, +0.002608f, -0.003809f, -0.000488f, -0.000346f, - +0.003677f, +0.005006f, +0.010525f, -0.009602f, -0.036334f, +0.038902f, +0.005993f, +0.040962f, -0.001749f, +0.013617f, - +0.008869f, +0.005417f, +0.002759f, +0.010783f, -0.001191f, +0.003119f, -0.002969f, -0.005653f, -0.001600f, -0.012331f, - +0.008485f, +0.002983f, +0.007324f, +0.000031f, +0.002280f, -0.000985f, -0.003561f, -0.004112f, +0.002441f, +0.000916f, - -0.000608f, +0.001122f, +0.001816f, +0.001103f, -0.002362f, -0.001983f, +0.003146f, +0.001241f, -0.000713f, +0.001801f, - -0.004099f, -0.000918f, +0.001671f, -0.000894f, -0.001490f, -0.000828f, -0.003077f, -0.001401f, +0.000970f, -0.000786f, - -0.003568f, +0.000730f, -0.002717f, -0.000202f, +0.000336f, -0.001138f, -0.000250f, +0.001444f, -0.000340f, -0.001023f, - -0.000524f, -0.000027f, +0.000558f, +0.000977f, -0.001788f, -0.000858f, +0.000243f, +0.000914f, -0.000160f, -0.000272f, - -0.000730f, +0.000913f, -0.000335f, -0.000042f, -0.000541f, +0.000785f, -0.000198f, +0.000133f, +0.000335f, +0.000192f, - +0.000207f, -0.000439f, +0.000368f, -0.000082f, +0.000049f, +0.000533f - }, - { - +0.092145f, +0.051207f, -0.027686f, -0.020332f, +0.003283f, -0.000172f, +0.003793f, -0.013550f, +0.002631f, -0.004307f, - -0.008396f, -0.002064f, -0.002437f, -0.003734f, +0.006708f, -0.001749f, -0.004681f, +0.012452f, +0.002145f, -0.001190f, - +0.007336f, -0.004036f, +0.001604f, -0.003966f, +0.007714f, +0.002013f, +0.003449f, -0.002129f, -0.006808f, -0.006843f, - -0.002906f, +0.002461f, +0.005846f, +0.001806f, -0.000126f, +0.002183f, +0.000918f, -0.007054f, -0.003824f, +0.002387f, - +0.002425f, -0.002832f, -0.001882f, +0.002329f, -0.004834f, +0.002605f, +0.005594f, +0.001583f, -0.000132f, +0.003672f, - -0.003512f, -0.002409f, +0.001347f, +0.001388f, -0.002359f, +0.000737f, -0.000212f, +0.001055f, +0.000518f, +0.000562f, - -0.000069f, -0.000923f, -0.000442f, -0.000139f, -0.000083f, +0.001051f, -0.000640f, -0.001118f, +0.000491f, -0.000960f, - -0.000297f, -0.000516f, +0.001213f, -0.000169f, +0.000577f, -0.000908f, +0.000098f, +0.000897f, +0.000135f, -0.001737f, - +0.000606f, -0.000400f, +0.000242f, +0.000373f, +0.000293f, +0.000106f, -0.000139f, +0.000460f, -0.000331f, -0.000117f, - +0.000831f, -0.000350f, -0.000105f, +0.000151f, +0.000571f, -0.000005f - }, - { - -0.000069f, -0.013599f, -0.001087f, -0.001516f, -0.001591f, +0.000105f, +0.000150f, -0.003555f, -0.000852f, +0.001043f, - -0.003318f, -0.006830f, -0.006443f, +0.012502f, -0.002486f, -0.000283f, -0.001554f, +0.005674f, -0.001827f, +0.016282f, - -0.001186f, -0.002796f, -0.007580f, +0.034419f, -0.011125f, +0.004381f, +0.005367f, -0.012086f, +0.011744f, +0.002373f, - +0.002841f, +0.001239f, -0.011456f, +0.008563f, -0.004664f, -0.005902f, -0.002110f, +0.000056f, +0.006539f, +0.000921f, - -0.001750f, +0.001893f, -0.003037f, +0.000340f, +0.000129f, -0.001324f, -0.002837f, +0.000410f, +0.000004f, +0.001083f, - -0.003750f, +0.001398f, -0.000524f, -0.000565f, +0.000176f, +0.000934f, +0.001363f, -0.002083f, +0.004374f, +0.000962f, - +0.003372f, +0.001742f, +0.000857f, +0.000408f, +0.000336f, +0.001370f, +0.000913f, -0.001092f, -0.001927f, -0.000485f, - +0.001508f, +0.000349f, -0.000021f, +0.001548f, +0.001354f, +0.000424f, -0.000241f, -0.000059f, -0.000721f, -0.000035f, - +0.000700f, -0.000042f, -0.000198f, +0.000437f, +0.000099f, +0.000258f, -0.000539f, +0.000298f, -0.000243f, -0.000355f, - +0.000067f, +0.000169f, -0.000493f, -0.000356f, -0.000171f, -0.000051f - }, - { - -0.075211f, -0.168596f, +0.038119f, +0.017023f, +0.001196f, -0.000618f, -0.008687f, +0.004592f, -0.005076f, +0.002083f, - +0.005863f, -0.010433f, +0.007581f, +0.020139f, -0.042272f, -0.000840f, -0.009538f, +0.004074f, +0.002592f, +0.006572f, - +0.000676f, -0.009180f, -0.004481f, +0.003096f, +0.003141f, -0.003959f, +0.001075f, -0.001834f, +0.008974f, -0.005881f, - -0.000169f, +0.008999f, +0.005021f, -0.004512f, -0.003618f, -0.001506f, -0.003158f, +0.005957f, -0.009497f, -0.002370f, - -0.002386f, +0.004899f, +0.000121f, -0.001056f, -0.001779f, +0.002519f, -0.000043f, -0.002148f, +0.007682f, +0.004441f, - -0.002023f, -0.001969f, -0.001901f, +0.001816f, -0.000275f, +0.004619f, +0.000724f, -0.000735f, +0.000317f, -0.000269f, - -0.001480f, +0.000151f, -0.000163f, -0.000588f, -0.000274f, +0.000977f, +0.000704f, -0.000433f, +0.000885f, +0.000093f, - -0.000254f, -0.000405f, +0.000846f, +0.000368f, +0.000349f, -0.000728f, +0.000372f, -0.000152f, +0.000341f, +0.000997f, - +0.000493f, +0.000383f, +0.000378f, -0.000361f, -0.000278f, +0.000092f, -0.000384f, +0.000359f, +0.000051f, -0.000019f, - +0.000132f, -0.000662f, +0.000073f, +0.000383f, -0.000147f, -0.000494f - }, - { - -0.000538f, +0.004825f, -0.009191f, -0.002141f, -0.001181f, -0.000743f, +0.000014f, -0.005674f, -0.001756f, -0.000474f, - -0.004604f, -0.004443f, +0.004381f, +0.007807f, -0.032270f, +0.012144f, -0.021368f, +0.011596f, +0.008269f, -0.015778f, - +0.004388f, -0.008439f, +0.009414f, +0.001745f, -0.011788f, +0.012087f, +0.002782f, -0.000067f, +0.001831f, -0.006443f, - +0.009155f, -0.016034f, +0.008863f, -0.000258f, -0.005443f, -0.001300f, +0.005806f, -0.000114f, -0.000191f, -0.000054f, - -0.003845f, -0.004421f, -0.000013f, +0.001847f, +0.000154f, +0.002111f, -0.000023f, -0.004197f, +0.003241f, +0.002221f, - -0.000944f, -0.000781f, +0.002290f, -0.001274f, -0.000449f, -0.000489f, +0.000682f, +0.001721f, +0.000597f, -0.002787f, - -0.003120f, +0.000690f, +0.001537f, -0.000800f, -0.000100f, +0.001022f, +0.000492f, +0.000938f, +0.001247f, +0.000927f, - +0.000268f, -0.000977f, +0.000437f, +0.000342f, +0.000702f, -0.000700f, +0.000254f, -0.001156f, +0.000845f, +0.000045f, - +0.000652f, -0.000358f, +0.000429f, +0.000156f, +0.000202f, -0.000463f, -0.000263f, -0.000134f, -0.000422f, +0.000046f, - -0.000041f, +0.000017f, +0.000173f, +0.000242f, +0.000300f, +0.000099f - }, - { - -0.029155f, -0.061565f, +0.031403f, -0.001710f, +0.014235f, +0.008423f, -0.013697f, +0.003923f, -0.002204f, -0.007962f, - +0.000209f, +0.000288f, -0.002551f, -0.004224f, -0.005171f, -0.011178f, -0.000287f, -0.010612f, +0.007047f, +0.005207f, - -0.008779f, -0.007273f, +0.000066f, +0.001633f, +0.005712f, -0.001923f, +0.008853f, -0.005085f, +0.004596f, -0.009405f, - +0.005442f, +0.002829f, -0.002424f, +0.004889f, -0.005235f, -0.007306f, -0.006480f, -0.002233f, +0.003422f, +0.009357f, - -0.007490f, +0.005756f, +0.001028f, -0.000464f, -0.002452f, -0.005421f, -0.002904f, +0.004212f, -0.003637f, -0.001840f, - -0.003353f, -0.000640f, -0.000149f, +0.001008f, +0.001781f, -0.000881f, +0.000012f, +0.001595f, +0.000645f, -0.001958f, - +0.002516f, -0.002758f, +0.002807f, -0.000629f, -0.001304f, -0.000358f, +0.002342f, -0.000523f, -0.000037f, +0.000051f, - -0.000453f, +0.001747f, -0.000171f, -0.000701f, +0.000056f, -0.000014f, +0.001021f, +0.000095f, -0.000351f, +0.000052f, - -0.000720f, +0.000462f, +0.000432f, +0.000415f, -0.000265f, -0.000102f, -0.000387f, +0.000495f, -0.000275f, +0.001157f, - -0.000249f, +0.000378f, -0.000286f, -0.000232f, +0.000382f, +0.000423f - }, - { - -0.001619f, +0.020448f, +0.004930f, +0.000148f, +0.005673f, -0.001176f, +0.002618f, -0.001956f, +0.003037f, -0.003181f, - +0.004278f, -0.004395f, +0.006802f, -0.005561f, -0.006936f, -0.001280f, -0.008678f, +0.006067f, +0.006191f, +0.006302f, - +0.005226f, +0.007645f, +0.016285f, +0.005101f, +0.004039f, +0.008985f, -0.009851f, +0.017795f, -0.003644f, +0.003260f, - -0.002076f, +0.006385f, +0.003443f, -0.000797f, +0.001500f, +0.001879f, +0.003358f, +0.001501f, +0.001615f, +0.000240f, - +0.001040f, -0.002474f, -0.000044f, -0.001648f, +0.000338f, -0.001351f, +0.002705f, -0.000304f, +0.001095f, +0.000277f, - -0.001654f, +0.000771f, -0.001369f, +0.001990f, +0.000621f, +0.002404f, -0.002472f, +0.000976f, +0.001735f, +0.000256f, - +0.003094f, -0.001788f, +0.000286f, +0.001374f, -0.000224f, -0.000590f, -0.000212f, +0.000104f, -0.000263f, -0.001095f, - +0.000045f, -0.001387f, -0.000097f, -0.000479f, -0.000137f, -0.000461f, +0.000108f, -0.000462f, +0.000768f, -0.000333f, - +0.000370f, -0.000473f, -0.000053f, +0.000138f, +0.000395f, +0.000391f, +0.000073f, -0.000170f, +0.000299f, -0.000157f, - +0.000099f, -0.000113f, -0.000038f, +0.000111f, +0.000064f, -0.000048f - }, - { - -0.061816f, +0.159821f, -0.003286f, -0.008603f, +0.002502f, +0.007643f, -0.007727f, +0.008039f, +0.004715f, +0.007108f, - -0.000720f, +0.004682f, +0.011955f, +0.013410f, -0.000001f, +0.004968f, +0.008708f, +0.002181f, +0.005803f, -0.004137f, - +0.010844f, +0.001076f, -0.003446f, +0.014624f, -0.003246f, +0.001585f, -0.005146f, -0.004632f, +0.000011f, +0.003188f, - +0.000322f, -0.001154f, -0.000010f, +0.004175f, +0.001400f, -0.003860f, +0.005615f, -0.001712f, +0.000002f, -0.004355f, - +0.002993f, -0.002715f, +0.002064f, +0.007756f, -0.001780f, +0.001674f, -0.002099f, +0.000192f, +0.002116f, +0.000630f, - -0.002099f, -0.002235f, +0.000753f, -0.002004f, +0.000360f, +0.001397f, -0.000271f, +0.000748f, -0.001408f, -0.002452f, - -0.001376f, +0.001940f, -0.001648f, -0.000135f, +0.000441f, -0.000546f, +0.000425f, +0.000370f, -0.000167f, +0.000172f, - -0.001338f, -0.000394f, +0.000908f, -0.000839f, +0.000242f, -0.000643f, +0.000684f, -0.001158f, +0.000271f, +0.000813f, - +0.000225f, +0.000210f, -0.000496f, +0.000135f, -0.000088f, -0.000210f, -0.000668f, +0.000536f, +0.000171f, +0.000097f, - -0.000255f, -0.000216f, +0.000162f, -0.000188f, -0.000071f, +0.000104f - }, - { - -0.000234f, +0.034893f, -0.000997f, +0.001350f, -0.002449f, +0.004710f, -0.006066f, +0.000756f, -0.001464f, -0.002575f, - +0.006268f, -0.002501f, +0.023470f, -0.062505f, +0.006399f, +0.005745f, +0.004871f, -0.000659f, -0.005866f, -0.018509f, - -0.005788f, +0.030061f, +0.001265f, -0.008062f, -0.000657f, +0.012677f, -0.007605f, +0.006187f, -0.003523f, +0.017577f, - -0.001852f, +0.004233f, +0.000164f, +0.001973f, +0.004287f, -0.007815f, +0.003001f, -0.005705f, -0.003284f, -0.001648f, - -0.002039f, +0.001721f, +0.003669f, -0.003255f, +0.000321f, -0.001018f, +0.003282f, +0.002258f, -0.004637f, -0.004291f, - +0.003086f, -0.000081f, -0.000818f, -0.000240f, +0.002251f, -0.000530f, +0.001597f, -0.000122f, +0.000653f, -0.000721f, - -0.000700f, +0.001745f, -0.000917f, -0.002205f, +0.000805f, -0.002099f, +0.000913f, -0.001640f, +0.003057f, +0.000184f, - -0.000029f, -0.000910f, -0.000078f, +0.000266f, -0.000554f, +0.000107f, -0.000152f, +0.000283f, +0.000873f, -0.000507f, - +0.000319f, -0.000194f, -0.000309f, +0.000002f, -0.000155f, -0.000251f, -0.000490f, -0.001079f, -0.000686f, -0.000125f, - -0.000273f, +0.000083f, +0.000319f, -0.000263f, -0.000032f, +0.000540f - }, - { - -0.014161f, +0.130087f, +0.001197f, -0.005322f, -0.001610f, +0.018704f, -0.011680f, +0.010633f, +0.009454f, +0.000769f, - +0.003108f, +0.006764f, -0.003401f, +0.000634f, +0.085526f, +0.000089f, -0.017799f, -0.004576f, -0.005936f, +0.005026f, - -0.004047f, +0.002201f, -0.002836f, +0.005637f, +0.001535f, +0.005407f, -0.007005f, +0.007636f, -0.000621f, +0.002997f, - +0.001690f, +0.002793f, +0.005328f, -0.001031f, +0.001602f, +0.001311f, -0.003175f, -0.000743f, +0.004853f, +0.000254f, - +0.002869f, -0.000621f, -0.004463f, -0.002386f, +0.004156f, +0.000855f, -0.000465f, -0.001612f, -0.000095f, +0.004315f, - -0.002744f, +0.003515f, +0.003066f, +0.006789f, +0.000203f, -0.001563f, +0.001301f, +0.000189f, +0.000353f, +0.001268f, - -0.001079f, +0.000363f, -0.001419f, -0.000581f, +0.001496f, +0.000301f, -0.000192f, +0.000943f, +0.000109f, -0.000809f, - +0.001128f, -0.000751f, -0.000656f, -0.000823f, -0.000327f, +0.000561f, +0.000600f, +0.000682f, +0.000426f, -0.000197f, - -0.000128f, -0.000511f, -0.000393f, +0.000228f, +0.000107f, -0.000436f, +0.000251f, -0.000160f, -0.000242f, -0.000472f, - -0.000334f, -0.000139f, -0.000294f, -0.000393f, -0.000009f, +0.000376f - }, - { - -0.003171f, +0.014195f, -0.005233f, -0.005022f, -0.001153f, +0.001846f, +0.002070f, +0.000546f, +0.004625f, -0.003970f, - -0.001375f, +0.003485f, +0.001004f, +0.042845f, -0.028247f, -0.008908f, -0.012505f, +0.006602f, -0.000482f, +0.010423f, - -0.015297f, +0.000675f, -0.010626f, +0.005997f, +0.008879f, -0.004220f, -0.006314f, -0.005571f, -0.000605f, +0.005960f, - +0.004807f, +0.001926f, -0.001866f, -0.001319f, -0.005016f, +0.000027f, -0.001421f, -0.003605f, -0.001993f, +0.001165f, - -0.000002f, +0.000474f, +0.002791f, -0.003961f, +0.000403f, +0.002492f, +0.000565f, -0.000173f, +0.000479f, -0.000437f, - +0.000072f, +0.001745f, +0.000746f, +0.001706f, -0.001904f, -0.001028f, -0.000920f, -0.001349f, +0.000395f, +0.000151f, - -0.000821f, +0.001160f, +0.000702f, -0.001534f, -0.000660f, -0.000490f, +0.000865f, +0.000702f, +0.001597f, -0.001175f, - +0.001481f, +0.000553f, -0.000493f, +0.000241f, +0.001669f, -0.000080f, -0.000186f, -0.000034f, -0.000332f, -0.000076f, - +0.000247f, -0.000903f, -0.000037f, +0.000117f, +0.000475f, -0.000315f, -0.000192f, -0.000070f, -0.000132f, -0.000126f, - +0.000290f, -0.000641f, +0.000413f, -0.000228f, -0.000465f, -0.000374f - } - }, - { - { - -0.013356f, +0.316179f, +0.068555f, -0.020471f, -0.005130f, -0.000560f, -0.004401f, -0.002500f, -0.004026f, +0.010125f, - -0.001250f, -0.001436f, +0.004184f, +0.001719f, -0.003776f, +0.023143f, -0.005973f, +0.008432f, +0.006506f, -0.014236f, - +0.008750f, +0.002630f, +0.004989f, -0.013907f, +0.007494f, +0.003718f, +0.004746f, -0.002490f, -0.000203f, +0.000979f, - +0.007816f, +0.000020f, -0.007067f, -0.003101f, +0.005257f, +0.001265f, +0.003637f, -0.000703f, -0.002474f, -0.001294f, - +0.003740f, +0.002590f, -0.006906f, +0.003375f, -0.001387f, +0.000331f, +0.000958f, +0.001463f, -0.003164f, -0.001575f, - -0.001518f, -0.001629f, +0.000787f, +0.001539f, +0.002253f, -0.001870f, -0.000208f, +0.002925f, +0.003447f, -0.000912f, - +0.001053f, +0.001628f, +0.000033f, +0.000276f, +0.001109f, +0.000487f, +0.000423f, -0.000092f, -0.000240f, -0.000591f, - +0.000869f, +0.000095f, -0.000309f, +0.000158f, -0.000667f, +0.001609f, +0.001446f, +0.001203f, -0.000399f, -0.000239f, - -0.000214f, +0.000117f, +0.001295f, -0.000023f, +0.000060f, +0.000189f, -0.000014f, +0.000465f, +0.000484f, +0.000525f, - +0.000041f, -0.000664f, -0.000013f, -0.000365f, -0.000119f, +0.000027f - }, - { - -0.000893f, +0.048678f, -0.040643f, +0.001993f, -0.004704f, -0.002185f, -0.002055f, +0.003764f, -0.000508f, +0.001233f, - +0.006796f, +0.000004f, -0.004395f, +0.001049f, -0.011421f, -0.000010f, -0.000753f, -0.012851f, +0.018962f, -0.003410f, - +0.008059f, +0.020065f, +0.007876f, -0.002719f, +0.002894f, -0.003325f, -0.009513f, +0.003496f, -0.006714f, -0.006871f, - +0.005770f, +0.012441f, -0.002487f, -0.002550f, -0.004140f, +0.000787f, +0.001567f, -0.001270f, -0.004678f, -0.000066f, - -0.003281f, +0.005625f, +0.001757f, +0.002426f, -0.003590f, -0.005360f, +0.000272f, +0.000950f, -0.001381f, -0.002431f, - -0.001456f, -0.000192f, -0.000253f, -0.001728f, -0.002543f, +0.000932f, -0.001609f, +0.001607f, +0.001325f, -0.001287f, - -0.002150f, +0.001238f, +0.000226f, +0.001329f, -0.000491f, +0.001088f, +0.000544f, +0.001188f, -0.000767f, -0.000676f, - -0.001826f, -0.001344f, -0.000238f, -0.000145f, -0.001400f, -0.000015f, +0.000732f, -0.000153f, +0.001021f, +0.000165f, - -0.000192f, -0.000070f, +0.000422f, -0.000471f, +0.000343f, -0.000056f, -0.001043f, +0.000351f, +0.000428f, +0.000097f, - +0.000465f, -0.000262f, -0.000582f, +0.000274f, -0.000228f, +0.000206f - }, - { - +0.002897f, -0.271262f, +0.008285f, +0.018221f, +0.008144f, +0.005021f, -0.002042f, +0.000702f, +0.000723f, +0.000729f, - -0.008157f, -0.001472f, +0.008523f, -0.004144f, +0.009299f, -0.009425f, -0.005638f, -0.000152f, -0.007636f, +0.003349f, - +0.013395f, -0.006545f, -0.005167f, -0.004206f, -0.003323f, +0.008750f, -0.010160f, -0.005350f, -0.000691f, +0.006550f, - +0.002771f, +0.012192f, -0.000362f, -0.004941f, +0.010050f, +0.004316f, +0.001681f, -0.000199f, +0.000699f, +0.007312f, - +0.000478f, -0.001350f, +0.001694f, +0.002437f, -0.002517f, -0.002714f, -0.000596f, +0.000412f, -0.001260f, -0.001037f, - +0.001151f, -0.001115f, -0.001109f, -0.001364f, -0.001172f, +0.000040f, -0.002893f, -0.001939f, +0.001544f, -0.000195f, - -0.001014f, +0.000780f, +0.000473f, -0.001859f, -0.000842f, -0.001380f, +0.000570f, -0.001939f, +0.000072f, -0.000135f, - -0.000569f, -0.000336f, +0.000061f, +0.000923f, +0.000751f, -0.000051f, -0.000653f, +0.000937f, -0.000987f, -0.000424f, - +0.001001f, +0.000626f, -0.000330f, -0.000132f, +0.000551f, -0.000273f, -0.000228f, +0.000289f, +0.000052f, +0.000377f, - +0.000295f, +0.000752f, +0.000352f, -0.000078f, -0.000066f, -0.000119f - }, - { - -0.074778f, +0.051907f, +0.007172f, +0.034432f, +0.001284f, -0.003475f, +0.001177f, +0.004756f, -0.000982f, -0.007209f, - -0.006131f, -0.005217f, +0.004212f, -0.005147f, +0.015456f, +0.003022f, -0.001058f, +0.000383f, -0.004424f, -0.001002f, - -0.001262f, -0.000129f, +0.001741f, +0.002408f, +0.006321f, +0.001420f, -0.000560f, -0.000562f, +0.001224f, -0.004160f, - +0.004216f, +0.002699f, +0.002051f, -0.002290f, -0.004130f, -0.005370f, -0.002396f, -0.004297f, -0.002533f, -0.001582f, - +0.000683f, +0.000955f, +0.000121f, -0.004063f, -0.003172f, -0.000542f, +0.000368f, +0.001856f, +0.000221f, +0.000974f, - +0.000602f, +0.001725f, -0.002160f, +0.000239f, +0.000349f, -0.000828f, -0.000039f, -0.001404f, -0.001486f, +0.001503f, - -0.001972f, -0.000278f, +0.001181f, +0.002105f, -0.000915f, -0.000515f, -0.000279f, -0.000506f, +0.001046f, +0.000503f, - +0.000118f, -0.000005f, +0.000813f, +0.000482f, -0.001039f, +0.000137f, -0.000483f, +0.000646f, +0.000077f, +0.000372f, - -0.000417f, -0.000448f, +0.000071f, +0.000253f, -0.000442f, +0.000145f, +0.000190f, +0.000082f, +0.000116f, +0.000086f, - +0.000221f, +0.000182f, -0.000087f, +0.000165f, -0.000113f, +0.000400f - }, - { - +0.000805f, +0.069203f, +0.002078f, +0.001785f, -0.002145f, +0.002570f, -0.000150f, -0.001275f, -0.001713f, +0.001902f, - -0.001802f, +0.010261f, +0.002030f, +0.005475f, -0.021241f, +0.009956f, +0.001667f, +0.016643f, +0.053028f, +0.009560f, - +0.019990f, -0.005740f, -0.000428f, +0.013540f, +0.005826f, -0.004499f, -0.001718f, -0.012684f, -0.002974f, -0.005542f, - +0.002613f, +0.003107f, -0.000417f, +0.009044f, -0.000859f, -0.004175f, +0.001883f, -0.006092f, +0.000037f, -0.000389f, - +0.000651f, -0.000048f, +0.001775f, -0.001272f, +0.001221f, -0.001822f, +0.001609f, +0.000337f, +0.000160f, -0.001071f, - -0.000154f, +0.001830f, -0.001558f, -0.001286f, -0.001922f, +0.001348f, -0.004232f, -0.002386f, -0.000598f, +0.000621f, - -0.002133f, -0.000659f, -0.001117f, -0.001004f, -0.000384f, -0.001377f, -0.000100f, +0.000612f, +0.000384f, -0.000841f, - -0.000238f, +0.000316f, +0.000311f, +0.000417f, -0.000418f, -0.001538f, -0.000000f, +0.000775f, -0.000559f, -0.000748f, - -0.000061f, +0.000037f, -0.000061f, +0.000054f, -0.000087f, +0.000288f, -0.000107f, +0.000092f, -0.000039f, +0.000440f, - -0.000146f, -0.000380f, +0.000399f, +0.000277f, -0.000127f, +0.000105f - }, - { - -0.091792f, +0.256231f, +0.004478f, -0.000467f, -0.009904f, +0.003182f, -0.005938f, -0.002510f, +0.000430f, -0.001584f, - -0.007633f, -0.005734f, -0.008547f, +0.001839f, +0.003469f, -0.002775f, +0.003025f, +0.003472f, +0.002990f, -0.001684f, - -0.001874f, +0.004554f, +0.001102f, +0.002421f, +0.002769f, +0.003102f, +0.001147f, +0.002919f, -0.007360f, -0.008423f, - -0.003509f, +0.007773f, +0.006718f, -0.003667f, +0.003817f, -0.001486f, +0.002834f, -0.006735f, -0.001878f, +0.001718f, - -0.000469f, +0.003272f, -0.000442f, -0.002835f, +0.000966f, +0.000617f, +0.003735f, +0.000038f, +0.001016f, +0.001377f, - +0.000890f, -0.002070f, -0.000640f, +0.002033f, -0.001420f, -0.001061f, -0.001127f, +0.000693f, +0.001352f, +0.001468f, - +0.000141f, -0.001272f, -0.000968f, +0.000321f, +0.000033f, -0.000558f, +0.000215f, -0.000531f, -0.000169f, -0.000499f, - -0.001085f, +0.000692f, -0.000253f, +0.000325f, +0.000440f, -0.000937f, +0.000252f, +0.000511f, +0.000613f, -0.000579f, - +0.000095f, -0.000471f, +0.000281f, +0.000195f, +0.000425f, -0.000101f, +0.000368f, -0.000491f, -0.000071f, +0.000378f, - +0.000441f, -0.000022f, -0.000002f, +0.000344f, +0.000219f, +0.000173f - }, - { - +0.000844f, -0.018051f, -0.000965f, -0.001884f, -0.000168f, -0.000046f, -0.000410f, -0.002969f, -0.000405f, -0.001415f, - -0.002031f, -0.005921f, -0.003298f, +0.019431f, -0.015329f, +0.006854f, +0.003056f, +0.006883f, +0.006772f, -0.009555f, - +0.007625f, +0.003480f, -0.000035f, +0.018059f, -0.007693f, +0.000959f, -0.001978f, +0.003881f, +0.004742f, +0.006212f, - -0.001447f, +0.004524f, -0.002560f, -0.001492f, -0.002443f, -0.004830f, +0.002534f, -0.001588f, +0.006081f, +0.000081f, - +0.000309f, -0.000984f, -0.000757f, +0.000027f, +0.000311f, +0.001308f, -0.003089f, -0.000871f, +0.001168f, +0.000091f, - -0.002144f, -0.001261f, -0.000200f, +0.001174f, -0.000763f, +0.000670f, -0.000363f, -0.001026f, +0.002611f, +0.001627f, - +0.003356f, +0.001984f, +0.001754f, -0.000399f, +0.001041f, +0.000827f, -0.000125f, -0.000949f, -0.001461f, +0.000321f, - +0.000809f, +0.000315f, +0.000295f, +0.000784f, +0.001536f, +0.000507f, -0.000153f, -0.000716f, -0.000767f, +0.000539f, - -0.000022f, +0.000552f, +0.000130f, +0.000383f, +0.000007f, -0.000171f, -0.000627f, +0.000356f, -0.000074f, -0.000140f, - +0.000427f, +0.000092f, -0.000329f, -0.000366f, +0.000056f, -0.000218f - }, - { - +0.070067f, -0.285547f, -0.025016f, +0.021137f, -0.002741f, -0.005063f, -0.001068f, -0.001735f, +0.000649f, -0.004463f, - -0.000840f, +0.001538f, +0.001311f, -0.005369f, -0.017121f, +0.001658f, -0.006070f, +0.003262f, +0.005095f, +0.000661f, - +0.005887f, -0.004502f, -0.007702f, +0.004631f, +0.003968f, -0.007201f, +0.001336f, -0.002785f, +0.005361f, -0.002432f, - +0.003496f, +0.004764f, +0.005319f, -0.004630f, -0.001632f, +0.000919f, -0.000913f, -0.000454f, -0.007336f, -0.003966f, - +0.003518f, -0.002472f, -0.000417f, -0.000949f, +0.003157f, +0.003262f, -0.004126f, +0.001777f, +0.003924f, +0.001220f, - +0.002289f, -0.002443f, -0.001873f, +0.000765f, -0.000215f, +0.004224f, -0.000004f, +0.001684f, +0.000555f, -0.001879f, - -0.000527f, -0.000659f, -0.000134f, -0.000004f, -0.001158f, +0.001492f, -0.000166f, -0.000250f, +0.000535f, +0.000588f, - -0.000365f, -0.000376f, -0.000010f, +0.000267f, -0.000242f, +0.000295f, -0.000274f, -0.000280f, +0.000742f, +0.000096f, - +0.000640f, +0.001252f, +0.000061f, -0.000355f, -0.000499f, +0.000284f, +0.000001f, -0.000073f, +0.000219f, +0.000035f, - +0.000054f, -0.000140f, +0.000176f, -0.000262f, +0.000215f, -0.000462f - }, - { - +0.001540f, -0.011513f, -0.003371f, +0.000971f, -0.001697f, -0.000419f, +0.000227f, -0.004532f, -0.006099f, -0.000472f, - -0.002722f, -0.002531f, +0.000937f, +0.003595f, -0.028389f, +0.018299f, -0.008742f, -0.008374f, +0.007530f, -0.006419f, - -0.012988f, -0.003513f, +0.009799f, -0.013419f, +0.007166f, +0.013477f, -0.010025f, -0.000564f, +0.011362f, -0.010831f, - -0.001867f, +0.002393f, -0.001071f, -0.007754f, +0.001094f, +0.000476f, +0.003296f, -0.001399f, +0.002193f, +0.000616f, - -0.003330f, +0.000503f, -0.003935f, -0.001291f, +0.002089f, -0.001686f, +0.002335f, -0.000507f, -0.001499f, +0.002845f, - -0.002667f, +0.003687f, -0.001179f, -0.000338f, -0.000095f, +0.000319f, +0.000479f, +0.001824f, +0.001518f, -0.004119f, - -0.002920f, +0.001950f, +0.000247f, +0.000542f, +0.000376f, -0.000214f, +0.001336f, +0.000892f, +0.001842f, -0.000548f, - +0.000808f, -0.000350f, -0.000608f, +0.000542f, -0.000185f, +0.000332f, -0.000760f, -0.000602f, +0.000439f, +0.000221f, - -0.000082f, +0.000611f, +0.000307f, +0.000635f, +0.000071f, -0.001173f, +0.000027f, -0.000187f, -0.000311f, -0.000126f, - -0.000092f, +0.000019f, +0.000060f, +0.000288f, +0.000381f, +0.000193f - }, - { - +0.029740f, -0.030563f, -0.022840f, -0.007689f, +0.001406f, -0.009482f, +0.010669f, -0.000676f, +0.001020f, -0.007602f, - -0.005119f, -0.001443f, -0.004907f, +0.000429f, -0.005801f, -0.006288f, +0.004720f, -0.014106f, +0.006109f, +0.000399f, - -0.005895f, -0.010357f, +0.006068f, -0.005126f, +0.005105f, +0.003925f, +0.003825f, -0.001142f, -0.002295f, -0.004441f, - -0.005513f, +0.005280f, +0.008225f, -0.006496f, +0.001935f, -0.008641f, -0.004829f, -0.006298f, +0.004149f, +0.004384f, - +0.002084f, +0.000421f, +0.002377f, -0.000331f, -0.004224f, -0.003237f, -0.002415f, +0.002822f, -0.001588f, -0.004736f, - -0.001037f, -0.003119f, -0.001902f, +0.000394f, +0.004787f, -0.001718f, -0.001043f, +0.001747f, +0.000513f, -0.000322f, - +0.000819f, -0.001198f, -0.000107f, +0.001070f, -0.002594f, +0.001128f, +0.001305f, -0.000636f, +0.000685f, -0.000217f, - -0.000926f, +0.001162f, +0.000137f, -0.000194f, -0.000752f, +0.000334f, +0.001081f, +0.000057f, -0.000317f, -0.000389f, - +0.000005f, +0.000050f, +0.000933f, -0.000321f, +0.000299f, -0.001089f, -0.000287f, +0.000197f, +0.000333f, +0.000309f, - +0.000469f, -0.000181f, -0.000364f, +0.000188f, +0.000398f, +0.000069f - }, - { - +0.001294f, +0.048200f, -0.010075f, -0.000379f, +0.001815f, +0.003617f, -0.003355f, +0.003224f, +0.000404f, +0.000736f, - -0.001667f, -0.002923f, +0.002890f, -0.004917f, -0.006219f, +0.003890f, -0.007122f, +0.004916f, +0.000918f, +0.011770f, - +0.003003f, +0.016430f, +0.004224f, +0.005711f, +0.002603f, +0.001334f, +0.004838f, +0.012820f, +0.003018f, +0.005381f, - -0.001531f, +0.000548f, +0.005060f, +0.000723f, +0.005136f, -0.002183f, +0.003771f, +0.000810f, +0.003407f, +0.001262f, - +0.002361f, -0.004740f, -0.000334f, -0.000137f, +0.001105f, -0.001528f, +0.002941f, +0.000187f, -0.000114f, +0.000565f, - +0.000471f, -0.002168f, -0.000395f, +0.002531f, +0.001138f, +0.001376f, -0.000131f, +0.000148f, +0.001873f, +0.000354f, - +0.000880f, +0.000406f, +0.000964f, +0.000015f, +0.000582f, -0.000892f, -0.000230f, +0.000101f, +0.000330f, -0.001523f, - -0.000562f, -0.000295f, -0.000116f, -0.000729f, -0.000467f, -0.000062f, -0.000120f, +0.000003f, +0.000500f, +0.000001f, - +0.000153f, -0.000683f, -0.000358f, +0.000582f, +0.000492f, -0.000062f, +0.000442f, +0.000026f, -0.000064f, +0.000439f, - -0.000308f, +0.000064f, -0.000131f, -0.000163f, +0.000238f, -0.000057f - }, - { - +0.054752f, -0.014533f, +0.014709f, -0.006443f, +0.000796f, +0.004975f, +0.000939f, +0.001801f, +0.002290f, +0.010732f, - +0.003679f, +0.002184f, -0.003224f, +0.017998f, +0.015869f, -0.000100f, +0.003343f, +0.000790f, +0.006918f, +0.000039f, - +0.010956f, -0.000792f, +0.002214f, +0.007181f, +0.006782f, -0.007709f, -0.001307f, -0.000818f, -0.003128f, -0.002003f, - +0.000082f, +0.002000f, +0.003961f, -0.000102f, +0.007241f, -0.003214f, +0.000388f, +0.003418f, -0.006665f, +0.000188f, - -0.001849f, +0.001452f, +0.009159f, -0.001079f, -0.000600f, +0.001622f, -0.000141f, +0.000457f, -0.000134f, -0.000013f, - -0.002103f, -0.000718f, -0.002524f, -0.000240f, +0.001784f, +0.000818f, +0.000273f, -0.001092f, +0.000516f, -0.001578f, - -0.001428f, +0.000602f, -0.000945f, -0.000417f, -0.000128f, +0.000337f, +0.000696f, -0.000711f, +0.001254f, -0.000916f, - -0.000669f, +0.000442f, +0.000205f, -0.000437f, -0.000164f, -0.001156f, +0.000405f, -0.000229f, +0.000091f, +0.000092f, - +0.000325f, +0.000091f, -0.000246f, +0.000427f, +0.000070f, -0.000537f, +0.000011f, -0.000318f, +0.000221f, +0.000181f, - -0.000145f, -0.000293f, -0.000265f, +0.000238f, -0.000155f, -0.000054f - }, - { - -0.000790f, +0.016322f, +0.014562f, -0.000390f, +0.005934f, -0.003916f, -0.007540f, +0.000612f, -0.004281f, +0.003202f, - +0.000299f, +0.008423f, -0.028773f, -0.001244f, +0.011652f, +0.007755f, -0.004057f, -0.004955f, +0.002382f, -0.017621f, - -0.000812f, -0.001445f, -0.001580f, +0.015012f, +0.006567f, -0.009176f, +0.003012f, +0.012004f, +0.004820f, -0.001426f, - -0.000091f, +0.005522f, +0.006194f, -0.000877f, +0.003194f, -0.003124f, -0.005693f, +0.002857f, -0.006720f, -0.003043f, - -0.001360f, -0.000377f, +0.004469f, +0.001553f, -0.000693f, -0.000697f, +0.002989f, +0.000069f, -0.004494f, -0.004167f, - -0.000458f, -0.000105f, +0.000932f, +0.000680f, +0.000075f, +0.000875f, +0.000452f, +0.000358f, +0.001144f, +0.000134f, - -0.000526f, +0.001121f, -0.001276f, -0.000320f, -0.001428f, -0.000950f, -0.000102f, +0.000749f, +0.001784f, +0.000505f, - -0.000514f, -0.000021f, -0.001113f, +0.000343f, +0.000057f, -0.000431f, +0.000186f, +0.000575f, +0.000411f, -0.000333f, - +0.000123f, -0.000163f, +0.000283f, -0.000172f, +0.000062f, -0.000049f, -0.000942f, -0.000507f, -0.000752f, +0.000001f, - -0.000630f, +0.000303f, +0.000051f, -0.000385f, +0.000132f, +0.000319f - }, - { - +0.032848f, +0.066274f, -0.000384f, -0.005014f, +0.003999f, +0.003061f, +0.009783f, -0.004353f, +0.015183f, -0.002416f, - +0.002327f, +0.003793f, +0.009022f, +0.020990f, +0.041824f, +0.005300f, -0.015745f, -0.001059f, -0.007934f, -0.001440f, - +0.001828f, -0.002703f, +0.000093f, +0.008313f, -0.000567f, -0.000437f, -0.000775f, +0.006709f, -0.007040f, +0.001415f, - +0.003001f, +0.003288f, +0.001233f, +0.002299f, +0.007298f, -0.002144f, -0.004875f, +0.004258f, +0.006322f, -0.001393f, - +0.002084f, +0.001489f, -0.004045f, -0.003938f, +0.001968f, +0.004609f, -0.002659f, +0.001504f, -0.000207f, +0.000912f, - -0.001236f, +0.003650f, +0.003137f, +0.004409f, +0.001802f, +0.000707f, +0.000238f, -0.000628f, +0.001862f, +0.000488f, - -0.000741f, -0.001338f, -0.000057f, -0.000222f, +0.001131f, +0.000136f, +0.000558f, +0.000099f, +0.000872f, -0.000405f, - +0.000434f, -0.000008f, -0.001652f, -0.000051f, +0.000278f, +0.000686f, +0.000649f, +0.000416f, +0.000028f, +0.000260f, - +0.000107f, -0.000451f, +0.000347f, -0.000473f, +0.000282f, -0.000466f, -0.000052f, -0.000486f, -0.000181f, -0.000432f, - -0.000560f, +0.000064f, -0.000176f, -0.000301f, +0.000067f, +0.000472f - }, - { - +0.001673f, +0.000877f, +0.004568f, -0.008003f, +0.001078f, +0.003304f, -0.000523f, -0.002181f, +0.006622f, -0.000228f, - +0.003512f, -0.007671f, +0.003163f, -0.042119f, +0.065898f, +0.001006f, -0.007356f, +0.002448f, +0.006812f, +0.002300f, - -0.002012f, -0.001155f, -0.003889f, -0.003445f, +0.006622f, +0.000990f, -0.007814f, -0.007873f, +0.001659f, +0.008480f, - +0.004271f, +0.000058f, -0.010461f, +0.002667f, +0.001981f, -0.000521f, -0.003636f, +0.001921f, -0.006809f, +0.001563f, - -0.001440f, +0.000202f, +0.001805f, -0.001491f, +0.002133f, +0.001799f, +0.000265f, -0.000245f, -0.001438f, +0.001916f, - +0.001971f, +0.000226f, -0.001735f, +0.000057f, -0.000932f, -0.001373f, +0.000089f, -0.000207f, -0.000596f, -0.000298f, - -0.001264f, +0.000927f, +0.001642f, -0.001221f, -0.000190f, +0.000240f, -0.001098f, +0.001129f, +0.000761f, -0.000275f, - +0.001262f, +0.000134f, +0.000023f, -0.000072f, +0.000926f, +0.000760f, -0.000673f, +0.000272f, -0.000516f, -0.000300f, - +0.000150f, -0.000104f, -0.000257f, +0.000209f, -0.000019f, +0.000031f, -0.000715f, +0.000120f, -0.000202f, +0.000092f, - -0.000110f, +0.000031f, +0.000052f, -0.000280f, -0.000405f, -0.000204f - } - }, - { - { - +0.019472f, +0.240624f, +0.021662f, -0.013335f, -0.001718f, +0.003957f, -0.002222f, +0.004402f, -0.000145f, +0.003624f, - -0.006208f, -0.007645f, +0.003730f, -0.000687f, -0.004800f, +0.021552f, -0.016223f, +0.002616f, +0.016873f, -0.004880f, - +0.001393f, -0.007172f, +0.002946f, -0.012348f, +0.009918f, +0.002611f, -0.004933f, -0.008744f, -0.001898f, -0.002955f, - -0.000201f, +0.000633f, -0.007519f, -0.001976f, +0.003858f, -0.005711f, +0.001514f, -0.001650f, -0.002413f, -0.002077f, - +0.004942f, +0.005153f, -0.002429f, +0.007533f, -0.000550f, -0.000472f, -0.001198f, -0.000365f, -0.003544f, -0.001274f, - +0.002152f, +0.000592f, -0.001531f, -0.000702f, +0.003276f, -0.000598f, -0.001634f, +0.000885f, +0.001412f, -0.003051f, - +0.001714f, +0.000331f, -0.002164f, +0.000017f, +0.000182f, -0.000637f, -0.000468f, -0.000540f, -0.000049f, -0.001118f, - +0.000893f, +0.000419f, -0.000594f, +0.001437f, +0.000395f, +0.000940f, -0.000303f, +0.000308f, +0.000003f, +0.000438f, - -0.000410f, -0.000503f, +0.000906f, +0.000138f, +0.000036f, -0.000491f, -0.000275f, -0.000232f, -0.000513f, -0.000073f, - +0.000233f, -0.000245f, +0.000200f, +0.000014f, +0.000071f, -0.000121f - }, - { - -0.001030f, +0.128667f, +0.025113f, -0.000727f, -0.005801f, +0.001068f, -0.001643f, +0.002243f, +0.006203f, +0.002749f, - +0.002542f, -0.000534f, -0.001392f, +0.001853f, -0.018280f, +0.007193f, +0.011594f, -0.009084f, +0.026408f, -0.003343f, - -0.017795f, -0.002550f, +0.000773f, -0.005023f, +0.001504f, +0.001020f, -0.005936f, +0.004519f, -0.001904f, -0.004103f, - +0.003156f, +0.012558f, +0.001805f, -0.001919f, -0.006662f, -0.002767f, -0.001015f, +0.001224f, -0.001267f, +0.003815f, - +0.003156f, +0.004703f, -0.003686f, -0.001931f, -0.002378f, -0.002764f, +0.000213f, +0.003298f, +0.000151f, +0.002157f, - +0.001998f, +0.001175f, +0.000637f, -0.000409f, -0.001136f, -0.001009f, -0.001593f, +0.000857f, +0.002004f, +0.000715f, - -0.000929f, +0.001374f, -0.000402f, +0.000870f, -0.000018f, +0.000308f, -0.001008f, +0.001250f, +0.000389f, +0.000028f, - -0.000507f, -0.000276f, -0.000371f, +0.000494f, -0.000542f, +0.000235f, +0.000326f, -0.000539f, +0.000695f, +0.000017f, - -0.000293f, -0.000350f, +0.000159f, -0.001132f, -0.000464f, -0.000178f, -0.000398f, +0.000389f, +0.000093f, -0.000125f, - +0.000125f, -0.000137f, -0.000288f, +0.000482f, -0.000190f, +0.000295f - }, - { - -0.003593f, -0.237278f, +0.041739f, +0.016958f, +0.010643f, +0.010813f, +0.000113f, -0.001569f, -0.002282f, +0.001939f, - -0.000061f, +0.003412f, +0.013053f, +0.001377f, +0.010677f, -0.005042f, -0.011525f, -0.017360f, -0.000922f, -0.005035f, - -0.001090f, -0.012240f, -0.007998f, -0.006965f, -0.009947f, +0.000872f, -0.013231f, -0.008819f, +0.001845f, +0.005565f, - +0.002244f, +0.008794f, -0.001279f, +0.000824f, +0.007999f, +0.000115f, +0.002107f, -0.002732f, -0.001984f, +0.003978f, - -0.003004f, -0.006817f, +0.001001f, +0.004639f, +0.001544f, +0.000017f, -0.003912f, +0.000256f, +0.000610f, +0.000879f, - +0.001241f, -0.000354f, +0.000593f, -0.000306f, -0.000060f, +0.001245f, -0.001734f, -0.002420f, +0.000110f, +0.000148f, - +0.000222f, +0.001246f, +0.000760f, +0.000069f, -0.000034f, -0.000927f, +0.001019f, -0.000405f, +0.001141f, +0.001006f, - +0.000551f, -0.000441f, -0.000883f, +0.000596f, +0.000650f, +0.000001f, -0.001220f, +0.000385f, -0.000601f, -0.000553f, - -0.000297f, -0.000009f, +0.000021f, -0.000288f, +0.000132f, -0.000292f, -0.000052f, +0.000057f, -0.000257f, -0.000060f, - -0.000023f, +0.000097f, -0.000498f, -0.000010f, +0.000074f, -0.000101f - }, - { - +0.056824f, +0.205353f, -0.019375f, +0.031804f, +0.000898f, -0.002004f, +0.004076f, +0.004434f, +0.001843f, -0.000163f, - +0.001790f, -0.001099f, +0.002801f, -0.011996f, +0.006056f, +0.000219f, -0.007007f, +0.008445f, +0.008610f, -0.000782f, - -0.000745f, -0.009022f, -0.006873f, -0.000831f, +0.001388f, -0.004167f, -0.005775f, -0.000378f, +0.001450f, -0.001559f, - +0.007536f, -0.001943f, -0.001309f, +0.000920f, -0.000359f, -0.000535f, +0.001585f, -0.001449f, +0.000137f, +0.000977f, - -0.001422f, -0.001948f, +0.001021f, -0.001187f, -0.002542f, +0.000783f, +0.000902f, -0.001974f, -0.001461f, -0.001639f, - +0.000312f, +0.001775f, -0.002608f, +0.001623f, +0.000226f, -0.001140f, +0.000898f, -0.000230f, -0.000805f, +0.002690f, - -0.001282f, -0.000210f, +0.000476f, +0.000936f, -0.000142f, -0.000399f, -0.000079f, +0.000498f, +0.000338f, -0.000145f, - -0.000327f, -0.000771f, -0.000809f, +0.000158f, +0.000448f, +0.000336f, -0.000771f, +0.000124f, -0.000561f, +0.000248f, - -0.000713f, -0.000769f, +0.000073f, +0.000502f, +0.000044f, -0.000102f, -0.000188f, -0.000020f, -0.000233f, +0.000099f, - +0.000036f, -0.000037f, -0.000125f, +0.000174f, -0.000148f, +0.000001f - }, - { - -0.000119f, +0.046121f, -0.012649f, +0.001216f, -0.001989f, +0.001731f, -0.000644f, +0.001490f, +0.000994f, +0.001665f, - -0.006856f, +0.003637f, +0.003454f, +0.011655f, -0.007862f, +0.003145f, -0.003688f, -0.000094f, +0.026662f, +0.002410f, - +0.006181f, -0.007025f, +0.005433f, +0.000748f, -0.004245f, -0.007033f, +0.002245f, -0.006185f, -0.000243f, -0.000005f, - +0.001026f, -0.001015f, -0.002613f, +0.014074f, -0.001093f, -0.009043f, -0.002332f, -0.004715f, +0.002631f, -0.001831f, - -0.001358f, +0.000030f, +0.000416f, +0.000022f, +0.004246f, +0.000420f, +0.000454f, -0.002436f, +0.002447f, +0.000111f, - -0.001158f, +0.002385f, -0.000771f, -0.000252f, -0.000867f, +0.002738f, -0.001360f, +0.000848f, -0.000154f, -0.000945f, - -0.001801f, +0.000712f, +0.000092f, +0.000810f, +0.001993f, -0.000464f, -0.000447f, +0.000596f, +0.000716f, +0.000035f, - +0.000859f, +0.000225f, -0.000623f, +0.000635f, +0.000929f, -0.000644f, -0.000200f, +0.000617f, -0.000881f, -0.000915f, - +0.000029f, +0.000148f, +0.000209f, -0.000038f, -0.000104f, -0.000287f, -0.000389f, -0.000197f, -0.000303f, +0.000378f, - -0.000115f, +0.000007f, +0.000374f, -0.000089f, -0.000399f, -0.000058f - }, - { - +0.061710f, +0.459021f, -0.008219f, -0.000427f, -0.009419f, +0.003125f, -0.001138f, +0.008910f, +0.001018f, +0.000939f, - +0.000742f, -0.000167f, -0.003816f, -0.002490f, -0.000955f, -0.004903f, -0.004545f, -0.004420f, +0.002030f, -0.000441f, - -0.002941f, +0.001223f, -0.001517f, +0.001398f, +0.001750f, +0.004128f, +0.001493f, +0.009362f, +0.001292f, -0.002391f, - -0.003440f, +0.004238f, +0.001226f, -0.008725f, +0.003838f, -0.000800f, +0.004620f, -0.001569f, +0.002015f, +0.001901f, - +0.001343f, +0.007603f, +0.003776f, +0.002292f, +0.002149f, -0.000736f, -0.001599f, -0.002628f, +0.001026f, -0.000084f, - +0.001676f, -0.002041f, +0.000126f, +0.001677f, -0.001510f, -0.001182f, -0.002691f, -0.000632f, +0.000116f, +0.000003f, - +0.000116f, -0.000174f, -0.000453f, +0.000524f, +0.001289f, -0.000338f, +0.000262f, -0.000361f, -0.000166f, +0.000872f, - -0.000003f, +0.001464f, -0.000062f, -0.000223f, +0.000472f, -0.000581f, +0.000498f, +0.000310f, +0.000362f, -0.000066f, - +0.000965f, +0.000430f, +0.000060f, -0.000551f, -0.000069f, -0.000120f, +0.000331f, -0.000743f, +0.000240f, +0.000052f, - -0.000181f, -0.000328f, +0.000106f, +0.000299f, -0.000196f, -0.000095f - }, - { - +0.000079f, -0.009558f, +0.009574f, -0.000205f, +0.001823f, -0.000136f, +0.000795f, -0.000812f, +0.000964f, +0.001582f, - +0.002549f, +0.003768f, -0.004162f, +0.011337f, -0.011019f, +0.004279f, +0.000819f, +0.011469f, +0.002057f, -0.025572f, - -0.001702f, -0.009345f, +0.002315f, +0.022006f, -0.006381f, +0.001257f, +0.004327f, +0.014649f, -0.001401f, +0.001652f, - -0.000835f, +0.002595f, -0.002791f, -0.001136f, +0.000544f, -0.004393f, +0.002361f, -0.002313f, +0.002911f, +0.000411f, - +0.000298f, -0.002470f, +0.001423f, +0.001603f, +0.000255f, +0.002715f, -0.001577f, -0.000862f, +0.001494f, +0.000807f, - -0.001638f, -0.000897f, +0.000750f, +0.002196f, -0.000740f, -0.001159f, -0.002361f, -0.000325f, +0.000084f, -0.002714f, - +0.000672f, -0.000265f, -0.000505f, -0.000362f, +0.000990f, -0.000702f, -0.000787f, -0.000257f, -0.000410f, +0.000612f, - -0.000154f, -0.000198f, +0.000087f, -0.000718f, +0.000879f, +0.000650f, -0.000144f, -0.000553f, -0.000413f, +0.000844f, - -0.000108f, +0.000756f, +0.000174f, +0.000003f, -0.000375f, +0.000001f, -0.000473f, +0.000011f, +0.000233f, +0.000396f, - +0.000639f, -0.000002f, -0.000250f, +0.000050f, +0.000165f, -0.000216f - }, - { - -0.049538f, -0.411099f, -0.006845f, +0.015602f, -0.002685f, -0.003569f, +0.005830f, -0.003942f, +0.003327f, -0.000752f, - -0.002352f, +0.007557f, +0.002514f, +0.002693f, +0.000997f, +0.006103f, +0.005308f, +0.006237f, +0.005281f, -0.001619f, - +0.000664f, -0.001510f, +0.000185f, +0.006654f, +0.001054f, -0.006902f, +0.007485f, -0.000974f, +0.003133f, -0.001891f, - +0.003673f, -0.003193f, -0.000469f, +0.001079f, +0.001280f, +0.012169f, +0.010478f, +0.000454f, -0.000597f, +0.000621f, - +0.001549f, -0.004287f, -0.001511f, -0.000423f, +0.000945f, +0.001323f, -0.002703f, +0.000453f, +0.000185f, +0.000479f, - +0.003089f, -0.000553f, -0.000138f, +0.000527f, -0.001481f, +0.001220f, -0.001600f, +0.002022f, +0.000071f, -0.002333f, - -0.000319f, -0.000431f, -0.000078f, -0.000693f, -0.000613f, +0.002180f, -0.000997f, -0.001178f, -0.000728f, -0.000435f, - -0.000917f, -0.001012f, -0.000708f, -0.000169f, -0.000515f, +0.000235f, -0.000500f, -0.000351f, +0.000209f, -0.000971f, - +0.000160f, +0.000838f, -0.000494f, -0.000687f, -0.000024f, +0.000214f, +0.000113f, +0.000543f, +0.000204f, +0.000123f, - +0.000430f, +0.000050f, -0.000067f, -0.000167f, +0.000319f, -0.000290f - }, - { - +0.000571f, -0.009034f, +0.006449f, +0.002019f, +0.001191f, +0.000007f, +0.000337f, -0.002005f, -0.003664f, +0.000054f, - -0.000666f, -0.003606f, -0.006470f, -0.008362f, -0.028732f, +0.020306f, +0.002826f, -0.004422f, -0.002849f, -0.011615f, - -0.017982f, -0.004877f, -0.008116f, -0.022771f, +0.016052f, +0.012355f, -0.003768f, +0.001532f, +0.005293f, -0.003242f, - +0.002996f, +0.001959f, -0.003808f, -0.011660f, +0.003485f, +0.002066f, -0.000700f, -0.001519f, +0.007075f, +0.003336f, - -0.003537f, +0.002163f, -0.002655f, +0.000569f, +0.001463f, -0.003201f, +0.002750f, +0.000428f, -0.002554f, -0.000930f, - -0.003950f, +0.004534f, -0.001392f, -0.000079f, +0.001028f, +0.000848f, +0.000323f, +0.001994f, +0.003226f, -0.001568f, - -0.001609f, +0.001276f, -0.000816f, -0.000077f, -0.000200f, -0.001033f, +0.000834f, +0.000004f, -0.000511f, -0.001293f, - +0.001277f, -0.000205f, -0.000646f, -0.000662f, -0.000163f, +0.001164f, -0.000365f, -0.000376f, +0.000444f, +0.000328f, - -0.000305f, +0.000541f, -0.000006f, +0.000275f, +0.000153f, -0.000939f, +0.000498f, +0.000422f, +0.000176f, +0.000246f, - -0.000040f, -0.000068f, -0.000049f, +0.000198f, +0.000237f, +0.000161f - }, - { - -0.027636f, -0.016107f, +0.036620f, -0.013495f, -0.006565f, -0.015407f, +0.013729f, -0.002477f, +0.000578f, -0.001638f, - -0.002792f, +0.003478f, +0.000016f, +0.002464f, +0.007430f, +0.006593f, +0.013604f, +0.002892f, +0.000056f, -0.007828f, - +0.001452f, -0.009782f, +0.006669f, -0.001240f, +0.002614f, +0.000421f, +0.003259f, -0.002525f, +0.000578f, +0.000909f, - -0.009991f, -0.002557f, +0.004580f, -0.003450f, +0.007151f, -0.000882f, +0.003385f, -0.006364f, +0.002964f, +0.000339f, - +0.002555f, +0.001552f, +0.003615f, +0.001499f, -0.000815f, +0.003424f, +0.001118f, +0.001782f, +0.000847f, -0.001053f, - -0.000528f, -0.003002f, -0.002336f, -0.002338f, +0.002235f, -0.002019f, -0.001060f, +0.001259f, -0.000305f, +0.000396f, - -0.000245f, -0.002236f, -0.000804f, +0.001955f, -0.001567f, +0.000097f, -0.000432f, -0.000854f, +0.000466f, +0.000084f, - -0.000329f, +0.000325f, -0.001154f, +0.000215f, -0.000160f, +0.000122f, +0.000311f, +0.000529f, +0.000062f, -0.000391f, - -0.000379f, -0.000663f, +0.000520f, -0.000471f, -0.000335f, -0.000888f, +0.000056f, +0.000023f, +0.000254f, -0.000232f, - +0.000110f, -0.000012f, -0.000129f, +0.000042f, +0.000128f, -0.000195f - }, - { - -0.001201f, +0.056749f, +0.008084f, +0.003258f, -0.003442f, +0.002037f, -0.002407f, +0.006258f, +0.000305f, -0.002256f, - -0.003019f, -0.002582f, -0.002774f, -0.001812f, -0.011338f, +0.003223f, +0.001661f, +0.008485f, +0.002734f, +0.015193f, - +0.000401f, +0.012170f, -0.007348f, -0.011257f, -0.001747f, +0.005971f, +0.008973f, +0.013632f, +0.005202f, +0.004836f, - -0.003154f, -0.005703f, +0.004706f, -0.000148f, +0.005337f, -0.003073f, -0.000523f, -0.000772f, +0.001068f, -0.003590f, - +0.001488f, -0.001357f, +0.001321f, +0.002338f, +0.001678f, -0.003274f, +0.001088f, +0.000396f, -0.000090f, +0.000022f, - +0.001648f, -0.000763f, -0.000939f, +0.000412f, -0.000288f, +0.001092f, -0.000220f, -0.000573f, +0.000808f, +0.000001f, - +0.000859f, +0.001110f, +0.001269f, +0.000217f, +0.000917f, +0.000433f, +0.000892f, +0.000287f, +0.000929f, -0.001275f, - -0.000621f, +0.000427f, +0.000659f, +0.000161f, -0.000183f, +0.000032f, -0.000134f, -0.000191f, -0.000342f, -0.000112f, - +0.000186f, -0.000613f, -0.000640f, +0.000085f, +0.000058f, -0.000364f, +0.000457f, +0.000052f, -0.000292f, +0.000336f, - -0.000410f, -0.000024f, -0.000303f, -0.000201f, +0.000037f, -0.000126f - }, - { - -0.028152f, -0.123977f, +0.020673f, -0.010058f, -0.006564f, +0.000960f, +0.002475f, +0.001081f, -0.004086f, +0.000976f, - -0.002195f, +0.004449f, -0.014236f, +0.002004f, +0.019005f, -0.005346f, -0.006880f, -0.003944f, +0.001393f, -0.004336f, - +0.005281f, +0.000985f, +0.003047f, +0.001563f, +0.006878f, -0.001640f, +0.005246f, +0.003718f, -0.005053f, -0.005001f, - -0.000435f, +0.001847f, +0.003456f, -0.002158f, +0.000288f, -0.007272f, -0.001078f, +0.002235f, -0.007387f, +0.001138f, - -0.000849f, +0.001770f, +0.006375f, -0.004358f, -0.000209f, +0.001627f, +0.000691f, +0.002199f, -0.000213f, -0.002088f, - -0.000910f, +0.001164f, -0.001367f, +0.001682f, +0.001163f, +0.000866f, +0.000686f, +0.000368f, +0.002588f, -0.000564f, - -0.002487f, +0.000354f, +0.000427f, -0.000095f, +0.000432f, +0.001075f, +0.000672f, -0.001252f, +0.001299f, -0.001157f, - -0.000029f, +0.000389f, -0.000030f, -0.000031f, +0.000383f, -0.000875f, -0.000201f, +0.000027f, -0.000080f, -0.000475f, - -0.000414f, -0.000183f, +0.000053f, +0.000321f, +0.000271f, +0.000274f, +0.000213f, -0.000430f, +0.000002f, +0.000144f, - +0.000097f, -0.000388f, -0.000441f, -0.000096f, -0.000234f, +0.000125f - }, - { - +0.001223f, +0.002413f, +0.001148f, -0.002895f, +0.008093f, +0.000506f, +0.000354f, +0.004479f, -0.001719f, +0.002658f, - -0.001096f, +0.016463f, +0.017689f, +0.055144f, +0.014727f, +0.019035f, +0.000323f, +0.001101f, +0.005963f, -0.004200f, - -0.007059f, -0.030404f, -0.016798f, +0.014731f, +0.016969f, -0.004145f, +0.007816f, +0.003379f, +0.004128f, -0.005539f, - -0.005690f, +0.000351f, +0.001947f, -0.002895f, -0.002679f, -0.006155f, -0.004815f, +0.002608f, -0.003403f, +0.002220f, - +0.001287f, +0.002531f, +0.003709f, +0.000829f, -0.001897f, -0.000505f, +0.004287f, +0.000538f, -0.003728f, -0.002711f, - -0.003473f, -0.001225f, +0.000662f, -0.000261f, +0.000826f, +0.002072f, +0.000745f, +0.000549f, +0.001031f, -0.000170f, - -0.000312f, +0.000084f, -0.000917f, +0.001082f, +0.000019f, +0.000154f, +0.000370f, +0.000488f, -0.000665f, -0.000130f, - -0.000218f, +0.000885f, -0.000277f, +0.000376f, -0.000201f, +0.000048f, +0.000499f, +0.000053f, -0.000048f, -0.000651f, - -0.000267f, -0.000432f, -0.000024f, -0.000151f, +0.000333f, +0.000497f, -0.000250f, +0.000714f, -0.000219f, +0.000221f, - -0.000114f, +0.000422f, +0.000069f, -0.000245f, -0.000005f, +0.000112f - }, - { - -0.035312f, -0.021394f, +0.003262f, -0.007246f, +0.001445f, -0.007423f, +0.002126f, -0.006848f, +0.007667f, -0.005686f, - -0.002883f, -0.003015f, +0.014628f, -0.015745f, -0.022033f, +0.009237f, -0.002473f, -0.002706f, -0.009571f, -0.000645f, - -0.001832f, -0.003163f, +0.000324f, +0.007454f, +0.002289f, -0.000562f, +0.000505f, +0.002758f, -0.005534f, +0.005445f, - +0.003261f, +0.002213f, -0.001240f, -0.002102f, +0.005233f, -0.001444f, -0.005087f, +0.002852f, +0.000580f, -0.004506f, - +0.002708f, -0.000839f, -0.002727f, +0.000164f, +0.000941f, +0.004267f, -0.003358f, +0.001654f, +0.001686f, -0.000669f, - -0.002394f, +0.001309f, +0.001283f, -0.000023f, -0.001032f, +0.000485f, -0.001292f, -0.001630f, +0.001942f, +0.000964f, - +0.000194f, -0.001387f, -0.000283f, -0.000495f, -0.000127f, -0.000897f, -0.000304f, -0.000118f, +0.001272f, -0.000116f, - -0.000651f, -0.000217f, -0.001703f, +0.000203f, +0.000768f, +0.000368f, -0.000493f, +0.000220f, +0.000103f, +0.000216f, - -0.000098f, -0.000575f, +0.000229f, -0.000910f, -0.000044f, +0.000020f, -0.000066f, -0.000531f, +0.000100f, -0.000317f, - -0.000348f, +0.000560f, +0.000302f, +0.000067f, -0.000031f, +0.000160f - }, - { - -0.001216f, -0.004061f, +0.005499f, -0.003523f, +0.004052f, +0.000113f, -0.004447f, -0.007396f, +0.003607f, +0.005804f, - +0.004396f, -0.011291f, -0.001639f, -0.023426f, +0.094695f, +0.001740f, -0.005765f, +0.008678f, +0.017115f, -0.006365f, - -0.010238f, +0.005348f, +0.003189f, -0.014844f, +0.002271f, +0.007640f, -0.006385f, -0.006469f, -0.000830f, +0.003079f, - +0.002786f, -0.000642f, -0.009722f, +0.009776f, +0.008188f, +0.002916f, -0.000804f, +0.006065f, -0.005026f, -0.000591f, - +0.000317f, +0.002702f, +0.002477f, +0.001818f, +0.000246f, -0.001189f, -0.002151f, -0.002236f, +0.000482f, +0.005291f, - +0.001705f, -0.000583f, -0.001510f, -0.000894f, -0.000298f, +0.000578f, +0.001094f, +0.000196f, +0.000344f, +0.000626f, - -0.001268f, -0.000544f, +0.001863f, -0.000099f, +0.000833f, +0.001122f, -0.001893f, -0.000742f, +0.000041f, -0.000604f, - +0.000170f, -0.000616f, -0.000197f, -0.000650f, +0.000164f, +0.000905f, -0.000757f, +0.000548f, -0.000410f, -0.000217f, - +0.000199f, +0.000117f, -0.000093f, -0.000195f, -0.000345f, +0.000332f, -0.000414f, +0.000184f, +0.000132f, +0.000256f, - -0.000132f, +0.000135f, +0.000027f, +0.000123f, +0.000019f, -0.000008f - } - }, - { - { - -0.021786f, +0.176761f, +0.089323f, -0.027304f, +0.003482f, +0.003748f, +0.000107f, +0.005796f, +0.000819f, -0.001381f, - -0.009910f, -0.007117f, +0.004740f, -0.003710f, +0.008595f, +0.001620f, -0.000141f, +0.003203f, -0.000541f, +0.007763f, - -0.002018f, -0.006497f, -0.005436f, +0.001320f, +0.003070f, +0.002593f, -0.006432f, -0.007723f, -0.006485f, +0.003178f, - -0.006552f, +0.001476f, -0.002954f, -0.002002f, +0.001136f, -0.004620f, -0.001165f, -0.001210f, +0.001546f, -0.002140f, - +0.004185f, +0.002628f, +0.002153f, +0.001098f, +0.000595f, +0.000472f, +0.000798f, -0.002434f, -0.003298f, -0.001321f, - +0.004252f, +0.001005f, -0.003600f, +0.000237f, +0.001269f, +0.001684f, -0.001616f, -0.000213f, -0.001042f, -0.000725f, - +0.001374f, -0.000488f, -0.001095f, +0.000476f, -0.001132f, -0.000546f, -0.000785f, +0.000090f, -0.000657f, -0.000199f, - +0.000023f, +0.000805f, -0.000648f, +0.000789f, +0.000786f, +0.000043f, +0.000112f, +0.000158f, +0.000561f, +0.000521f, - -0.000182f, -0.000415f, +0.000506f, -0.000119f, +0.000098f, -0.000190f, -0.000396f, -0.000148f, -0.000600f, +0.000064f, - +0.000090f, +0.000020f, -0.000150f, +0.000187f, +0.000058f, +0.000042f - }, - { - +0.002562f, +0.105923f, +0.035805f, -0.005124f, +0.002769f, -0.001022f, -0.000249f, +0.001676f, +0.008023f, +0.004218f, - -0.003749f, +0.001093f, -0.000280f, -0.006607f, -0.016731f, +0.022520f, +0.000818f, +0.009642f, +0.003067f, -0.005311f, - -0.013908f, -0.007034f, +0.001081f, -0.004406f, +0.003225f, -0.003953f, -0.002452f, +0.005924f, -0.005893f, +0.002695f, - -0.004538f, +0.013398f, +0.002791f, -0.003188f, -0.000584f, -0.007511f, +0.001389f, +0.002170f, +0.001828f, +0.002171f, - +0.002101f, +0.003716f, -0.003047f, -0.002711f, -0.001105f, -0.000497f, +0.000713f, +0.001913f, +0.000540f, +0.001160f, - +0.003282f, +0.001638f, +0.000919f, -0.000776f, -0.000523f, -0.002896f, -0.000492f, +0.000516f, +0.000992f, +0.001575f, - +0.001509f, -0.000744f, +0.000343f, -0.000581f, +0.001098f, -0.000261f, -0.000397f, +0.000962f, +0.000166f, -0.000243f, - +0.000918f, -0.000543f, -0.000555f, -0.000006f, +0.000213f, -0.000026f, +0.000050f, -0.000085f, +0.000011f, +0.000128f, - -0.000368f, -0.000082f, -0.000369f, -0.000495f, -0.000371f, +0.000144f, +0.000191f, -0.000270f, +0.000036f, -0.000170f, - -0.000340f, -0.000136f, +0.000241f, +0.000417f, +0.000136f, -0.000082f - }, - { - +0.005625f, -0.095492f, -0.074637f, +0.014469f, +0.013916f, +0.012782f, -0.001460f, -0.002938f, +0.000797f, -0.003086f, - +0.010501f, +0.001960f, +0.001698f, +0.008690f, +0.007984f, -0.000709f, -0.005238f, -0.023311f, -0.008023f, -0.000726f, - -0.012530f, -0.008245f, -0.012111f, +0.003683f, -0.005293f, -0.008183f, -0.007966f, -0.007162f, -0.001739f, +0.004309f, - +0.006302f, +0.003590f, +0.000661f, +0.003080f, -0.002051f, +0.001472f, +0.004827f, -0.005284f, +0.000998f, -0.001153f, - -0.003884f, -0.002252f, -0.001598f, +0.001773f, +0.001863f, +0.002513f, -0.003848f, -0.000781f, +0.001799f, -0.000264f, - +0.001088f, +0.000650f, +0.000576f, -0.000078f, -0.000084f, +0.001292f, -0.001067f, -0.001624f, +0.000050f, -0.000124f, - -0.000751f, +0.002556f, +0.000955f, +0.000138f, -0.000995f, +0.001057f, -0.001487f, +0.001019f, +0.000576f, +0.001474f, - -0.000007f, +0.000032f, -0.000334f, +0.000095f, +0.000187f, -0.000030f, -0.000598f, -0.000181f, -0.000460f, -0.000207f, - -0.000850f, +0.000229f, +0.000004f, -0.000478f, +0.000301f, -0.000118f, +0.000404f, -0.000456f, -0.000016f, -0.000295f, - -0.000001f, -0.000040f, -0.000543f, -0.000262f, +0.000050f, +0.000099f - }, - { - -0.026104f, +0.285162f, +0.006503f, +0.028130f, +0.004889f, -0.000785f, +0.003873f, -0.000282f, +0.003193f, +0.002503f, - -0.001757f, +0.003805f, -0.001744f, -0.001134f, -0.006057f, -0.005455f, +0.006608f, +0.009660f, +0.003305f, -0.002027f, - -0.001695f, -0.006917f, -0.004833f, -0.001588f, -0.001282f, -0.001923f, -0.005090f, +0.001343f, -0.001386f, +0.004466f, - +0.001243f, -0.003961f, +0.000420f, +0.002316f, +0.002569f, -0.001964f, +0.001043f, -0.000577f, +0.000236f, +0.004065f, - -0.003955f, -0.000234f, -0.002333f, +0.001483f, +0.000666f, -0.001040f, -0.001377f, -0.001720f, -0.000076f, -0.002704f, - +0.001668f, -0.000547f, -0.001993f, +0.000664f, +0.001601f, +0.000512f, +0.000307f, -0.000014f, -0.001125f, +0.001738f, - +0.000751f, -0.000407f, +0.000031f, +0.000295f, +0.000371f, +0.000037f, -0.000337f, +0.000960f, -0.000003f, +0.000049f, - -0.000339f, -0.000774f, -0.001233f, -0.000221f, +0.001210f, +0.000056f, -0.000104f, -0.000163f, -0.000600f, +0.000096f, - -0.000381f, -0.000260f, -0.000221f, +0.000359f, +0.000192f, -0.000376f, -0.000144f, -0.000002f, -0.000528f, +0.000170f, - +0.000188f, +0.000107f, -0.000042f, -0.000169f, +0.000202f, -0.000262f - }, - { - -0.000946f, +0.016452f, +0.008457f, -0.000542f, +0.001055f, -0.000517f, +0.001041f, +0.001025f, +0.002280f, -0.000082f, - -0.003593f, +0.002688f, +0.006890f, +0.001251f, +0.012186f, -0.014022f, -0.001570f, +0.041645f, -0.042072f, +0.014227f, - +0.009964f, -0.002155f, +0.000356f, -0.007523f, -0.009307f, -0.001476f, -0.001585f, +0.002241f, -0.000785f, +0.006733f, - -0.004467f, -0.000116f, -0.002263f, +0.008796f, +0.002294f, -0.005542f, -0.003244f, +0.000150f, +0.002167f, -0.000199f, - -0.003726f, +0.000373f, -0.002552f, -0.000392f, +0.004170f, +0.002878f, -0.001403f, +0.001426f, -0.000153f, +0.002103f, - -0.002043f, +0.000470f, +0.001785f, -0.002828f, +0.000719f, +0.001282f, +0.002039f, +0.000498f, -0.001440f, -0.000554f, - -0.000283f, -0.000353f, -0.000224f, +0.001970f, +0.001544f, +0.001000f, -0.000156f, +0.000398f, +0.000601f, +0.000089f, - -0.000046f, +0.000536f, -0.000445f, +0.000655f, +0.000567f, +0.000393f, -0.000778f, +0.000416f, -0.000063f, -0.000677f, - +0.000097f, -0.000084f, -0.000076f, +0.000095f, -0.000134f, -0.000702f, +0.000220f, -0.000346f, -0.000143f, +0.000335f, - -0.000155f, +0.000457f, +0.000054f, -0.000111f, -0.000323f, +0.000004f - }, - { - -0.014720f, +0.563568f, -0.011558f, -0.012793f, +0.007445f, -0.001774f, +0.000926f, +0.007073f, +0.001004f, +0.000886f, - +0.007768f, -0.005160f, +0.000504f, -0.003486f, +0.001380f, +0.000685f, -0.013127f, -0.002460f, +0.002602f, -0.002479f, - +0.000019f, -0.001300f, +0.003225f, -0.002010f, +0.001893f, +0.002114f, +0.003968f, +0.006390f, +0.001474f, -0.003649f, - +0.000618f, +0.002985f, -0.003679f, -0.003560f, -0.000722f, +0.002138f, +0.003035f, +0.001656f, +0.002336f, +0.002467f, - +0.005820f, +0.002426f, +0.006592f, +0.003138f, -0.004454f, +0.001493f, -0.005312f, +0.002357f, -0.000433f, -0.001311f, - +0.001151f, -0.001630f, +0.002059f, -0.000767f, -0.000668f, -0.001825f, -0.001402f, -0.001006f, +0.000954f, -0.000074f, - -0.001167f, +0.000623f, +0.000407f, +0.000562f, +0.000300f, +0.000601f, +0.000022f, +0.000032f, +0.000132f, +0.000277f, - +0.001071f, +0.000408f, +0.000919f, +0.000041f, -0.000478f, -0.000025f, +0.000402f, -0.000207f, +0.000021f, +0.000881f, - +0.000529f, +0.000480f, -0.000593f, -0.000306f, -0.000190f, +0.000483f, -0.000300f, -0.000472f, +0.000326f, -0.000163f, - -0.000120f, -0.000446f, +0.000396f, -0.000258f, +0.000061f, -0.000168f - }, - { - -0.000542f, +0.008396f, -0.000594f, +0.000509f, +0.001645f, -0.000011f, +0.000166f, -0.000205f, +0.000881f, +0.001637f, - +0.001767f, +0.000699f, +0.005352f, -0.005131f, +0.000313f, +0.008300f, +0.004305f, -0.004114f, -0.004549f, -0.013147f, - +0.001533f, -0.000978f, +0.012640f, +0.001668f, -0.004872f, +0.000305f, +0.006930f, +0.009442f, -0.001501f, +0.000590f, - -0.002734f, +0.003233f, +0.001086f, -0.002386f, -0.002730f, -0.002711f, +0.002643f, -0.001333f, -0.000306f, +0.003734f, - -0.000938f, -0.003588f, +0.004142f, +0.002567f, -0.002609f, +0.001470f, +0.000864f, -0.000685f, +0.000794f, -0.001573f, - +0.000298f, -0.001480f, +0.000537f, +0.001958f, -0.000907f, +0.000622f, -0.002973f, +0.000582f, +0.000155f, -0.002705f, - -0.000252f, -0.000624f, -0.001332f, +0.000280f, +0.001476f, -0.001959f, -0.001100f, +0.000224f, +0.000174f, +0.000588f, - -0.000423f, -0.000491f, -0.000026f, -0.000028f, +0.000654f, +0.000293f, +0.000217f, -0.000353f, -0.000019f, +0.000622f, - -0.000013f, +0.000205f, +0.000437f, -0.000250f, -0.000170f, -0.000110f, +0.000035f, -0.000315f, +0.000120f, +0.000384f, - +0.000210f, +0.000005f, -0.000094f, -0.000007f, +0.000060f, -0.000119f - }, - { - +0.019229f, -0.449954f, -0.040939f, +0.002016f, +0.003914f, +0.000321f, +0.002838f, +0.002978f, -0.000212f, -0.002471f, - +0.001932f, +0.003210f, +0.002791f, -0.006634f, +0.011913f, +0.008149f, +0.003835f, +0.004855f, +0.004202f, -0.000224f, - -0.002712f, +0.002363f, +0.003210f, +0.005674f, +0.000192f, -0.004820f, +0.002994f, +0.001696f, +0.002729f, +0.002754f, - -0.000356f, -0.004319f, +0.003749f, -0.004230f, +0.006776f, +0.015034f, +0.004691f, +0.003161f, -0.002232f, +0.005917f, - -0.002274f, -0.002643f, -0.004096f, +0.000241f, +0.001517f, +0.001025f, -0.000272f, -0.003706f, +0.001515f, +0.002942f, - +0.002159f, +0.000398f, +0.000841f, -0.003598f, +0.001308f, +0.000343f, -0.000579f, +0.000837f, -0.001139f, +0.000273f, - -0.001414f, -0.000082f, -0.000521f, -0.001536f, +0.000798f, +0.001324f, -0.001267f, -0.000381f, -0.000431f, -0.001020f, - -0.000916f, -0.001205f, +0.000430f, -0.000336f, -0.000366f, -0.000288f, +0.000151f, -0.000024f, -0.000246f, -0.000853f, - +0.000633f, -0.000100f, -0.000250f, -0.000704f, +0.000021f, +0.000172f, +0.000148f, +0.000723f, -0.000132f, +0.000441f, - +0.000214f, +0.000028f, -0.000281f, +0.000354f, -0.000284f, +0.000087f - }, - { - -0.001750f, +0.014403f, -0.004793f, -0.002429f, +0.002633f, -0.000307f, -0.000861f, -0.001136f, -0.000948f, -0.001200f, - -0.001160f, -0.002523f, -0.001458f, -0.010578f, -0.023322f, +0.002030f, -0.001870f, +0.020105f, -0.016345f, -0.012467f, - -0.017346f, +0.000117f, -0.011513f, -0.007499f, +0.006621f, +0.006332f, +0.006192f, -0.001871f, -0.003221f, +0.003961f, - +0.002468f, -0.001022f, -0.002049f, -0.007263f, -0.000039f, +0.004870f, -0.004045f, -0.000728f, +0.004954f, +0.004355f, - -0.000887f, -0.001104f, -0.001569f, +0.003774f, -0.000285f, -0.001729f, +0.000716f, -0.001231f, +0.000839f, -0.003590f, - -0.001078f, +0.001585f, -0.000686f, -0.000570f, +0.001526f, +0.000846f, +0.000210f, +0.003163f, +0.001685f, -0.000845f, - -0.000299f, -0.001169f, -0.000376f, -0.000103f, +0.000124f, -0.001735f, +0.000175f, -0.000840f, -0.000451f, +0.000509f, - +0.000446f, +0.000099f, -0.000623f, -0.000959f, +0.000669f, +0.000320f, +0.000036f, +0.000103f, +0.000189f, +0.000305f, - +0.000078f, -0.000505f, +0.000339f, -0.000261f, +0.000229f, -0.000300f, +0.000499f, +0.000338f, +0.000245f, +0.000452f, - -0.000015f, -0.000340f, +0.000070f, -0.000001f, +0.000520f, -0.000008f - }, - { - +0.023366f, +0.028432f, -0.066831f, -0.011039f, -0.000908f, -0.002685f, +0.001983f, -0.001929f, -0.002120f, +0.003373f, - +0.001429f, -0.000343f, -0.000277f, +0.002214f, +0.012468f, +0.002812f, +0.017239f, +0.009498f, -0.006305f, -0.005405f, - -0.000650f, -0.005146f, +0.001440f, +0.003377f, +0.003136f, +0.002842f, -0.000898f, -0.002835f, +0.002181f, -0.000216f, - -0.004439f, -0.003357f, +0.001019f, -0.003142f, +0.004500f, +0.005055f, +0.000396f, -0.001399f, -0.000379f, -0.001024f, - +0.005359f, +0.000089f, +0.002764f, +0.001469f, +0.000537f, +0.004565f, +0.003572f, -0.000235f, -0.001508f, +0.003434f, - -0.001875f, -0.001884f, -0.001415f, -0.001787f, -0.000760f, +0.000236f, -0.001060f, -0.000288f, -0.000241f, +0.000918f, - -0.000232f, -0.001600f, -0.000800f, +0.000899f, -0.000715f, +0.000008f, -0.001491f, +0.000115f, -0.000029f, +0.000253f, - +0.000649f, -0.000266f, -0.000936f, +0.000092f, +0.000167f, -0.000077f, +0.000294f, +0.000130f, +0.000428f, -0.000423f, - -0.000789f, -0.000383f, +0.000013f, -0.000065f, -0.000551f, -0.000084f, +0.000120f, -0.000031f, +0.000246f, +0.000143f, - -0.000220f, +0.000019f, -0.000029f, -0.000136f, +0.000055f, -0.000068f - }, - { - +0.000711f, +0.035108f, +0.022530f, +0.001603f, -0.000138f, -0.001633f, -0.001166f, +0.003876f, +0.003416f, -0.005439f, - +0.002148f, -0.004657f, -0.008707f, +0.009827f, -0.015422f, +0.006452f, +0.000030f, +0.001628f, +0.015529f, -0.005644f, - +0.008721f, +0.009472f, -0.005590f, -0.006877f, -0.004582f, +0.008794f, +0.006922f, +0.012509f, +0.007978f, +0.002299f, - -0.003942f, -0.012659f, +0.009959f, +0.002348f, -0.000144f, -0.001420f, -0.003719f, +0.003242f, -0.002277f, -0.003579f, - -0.001708f, -0.000538f, +0.004686f, +0.000344f, +0.000516f, -0.000010f, -0.002236f, +0.002803f, -0.000238f, -0.000796f, - -0.000112f, +0.000652f, -0.000280f, -0.000957f, +0.001158f, +0.000417f, -0.001253f, -0.000430f, +0.000105f, +0.000971f, - +0.001746f, +0.000005f, +0.000211f, +0.000766f, +0.000431f, +0.001159f, +0.001456f, +0.000505f, +0.000027f, +0.000315f, - -0.000724f, +0.000308f, +0.000013f, +0.000392f, +0.000057f, -0.000215f, -0.000301f, -0.000503f, -0.000290f, +0.000117f, - -0.000143f, -0.000357f, +0.000012f, -0.000630f, -0.000289f, -0.000000f, -0.000022f, +0.000293f, -0.000130f, -0.000248f, - -0.000129f, -0.000092f, -0.000280f, +0.000043f, -0.000005f, -0.000109f - }, - { - -0.000279f, -0.151715f, +0.002133f, -0.000704f, -0.010483f, -0.007623f, +0.009708f, +0.001688f, -0.004057f, -0.000797f, - -0.005257f, +0.005662f, -0.007716f, -0.002242f, +0.006599f, -0.003491f, -0.003891f, -0.002404f, -0.002559f, -0.000462f, - +0.002853f, +0.000118f, +0.004632f, +0.000832f, +0.001526f, +0.005568f, +0.004437f, +0.001809f, -0.004670f, -0.002378f, - -0.002669f, +0.001055f, +0.002950f, +0.000180f, -0.003140f, -0.008488f, -0.001007f, -0.002028f, -0.000606f, -0.002705f, - -0.000314f, +0.004821f, +0.004613f, -0.005644f, +0.001471f, -0.000464f, +0.000191f, +0.002020f, +0.002727f, -0.002775f, - -0.001539f, -0.000159f, +0.000151f, +0.001988f, +0.000264f, +0.002076f, +0.000245f, +0.001844f, +0.000448f, -0.000137f, - -0.001503f, +0.000112f, +0.000189f, +0.000436f, +0.000646f, +0.000270f, +0.000273f, -0.000933f, +0.000393f, -0.000081f, - +0.000003f, +0.000182f, +0.000375f, -0.000058f, -0.000108f, -0.000345f, -0.000247f, +0.000187f, -0.000474f, -0.000121f, - -0.000397f, -0.000248f, +0.000085f, +0.000578f, +0.000146f, +0.000440f, -0.000322f, -0.000334f, +0.000322f, -0.000037f, - +0.000058f, -0.000217f, -0.000155f, -0.000260f, -0.000107f, +0.000303f - }, - { - -0.001151f, -0.005131f, +0.001334f, +0.002063f, +0.004098f, +0.004919f, +0.003750f, -0.001220f, +0.005061f, +0.000988f, - +0.003680f, +0.009583f, -0.003100f, +0.087080f, +0.009198f, +0.015404f, +0.007391f, +0.002742f, -0.000590f, +0.003226f, - -0.007887f, -0.030028f, +0.002264f, -0.001079f, +0.003961f, +0.008311f, +0.011704f, -0.001331f, +0.001623f, -0.005471f, - -0.009905f, +0.002964f, -0.000208f, -0.002763f, -0.005571f, -0.002359f, -0.004490f, +0.000195f, +0.001160f, +0.000422f, - +0.004627f, +0.002730f, -0.000321f, +0.000852f, -0.004224f, +0.002779f, +0.003825f, +0.000681f, -0.001944f, -0.003721f, - -0.002486f, -0.001772f, +0.001797f, +0.000581f, +0.001225f, -0.000037f, +0.001188f, +0.000140f, +0.000645f, -0.000749f, - +0.000076f, -0.001010f, +0.000751f, +0.001062f, -0.000551f, +0.000137f, +0.001171f, +0.000063f, -0.001756f, -0.000184f, - -0.000214f, +0.000636f, +0.001270f, +0.000121f, -0.000758f, +0.000027f, +0.000898f, +0.000173f, -0.000663f, -0.000202f, - -0.000166f, -0.000362f, -0.000587f, -0.000101f, -0.000092f, +0.000280f, +0.000597f, +0.000399f, +0.000390f, -0.000388f, - +0.000329f, +0.000499f, -0.000204f, -0.000028f, +0.000006f, -0.000032f - }, - { - +0.023282f, -0.087935f, -0.018446f, -0.000254f, -0.002374f, +0.005155f, -0.010218f, -0.000679f, +0.000223f, -0.001798f, - +0.002243f, -0.000100f, +0.006279f, +0.002553f, -0.047127f, -0.006683f, +0.008993f, -0.001313f, -0.010365f, +0.002340f, - -0.005089f, +0.000592f, +0.000447f, +0.004739f, +0.003628f, +0.001080f, +0.001049f, +0.002101f, +0.002305f, -0.000918f, - +0.005226f, -0.000547f, -0.000532f, -0.001396f, +0.000955f, +0.000941f, -0.002582f, -0.000011f, -0.002705f, -0.004190f, - +0.001626f, +0.003294f, -0.002049f, +0.000323f, -0.001202f, +0.002224f, -0.001248f, -0.001229f, +0.001460f, -0.000364f, - +0.000150f, -0.000582f, +0.001111f, -0.001268f, -0.000917f, +0.000174f, -0.001937f, +0.000835f, -0.000034f, +0.001900f, - -0.001186f, +0.000137f, -0.000785f, -0.000825f, -0.000712f, -0.001152f, -0.001259f, +0.000282f, +0.001243f, +0.000578f, - -0.001567f, -0.000054f, -0.001392f, -0.000318f, +0.000812f, +0.000165f, -0.000098f, -0.000030f, +0.000315f, -0.000317f, - -0.000572f, +0.000118f, -0.000545f, -0.000585f, -0.000487f, +0.000706f, -0.000014f, -0.000240f, -0.000133f, -0.000125f, - -0.000243f, +0.000465f, +0.000199f, +0.000031f, +0.000310f, -0.000074f - }, - { - +0.001272f, -0.007894f, +0.004867f, -0.001392f, +0.001418f, -0.001293f, -0.003147f, -0.004966f, -0.000810f, +0.004420f, - +0.002759f, -0.002720f, -0.003317f, +0.054605f, -0.006893f, -0.005841f, +0.012914f, -0.003743f, +0.014360f, -0.010639f, - -0.005401f, +0.012287f, +0.005789f, -0.020707f, -0.005069f, +0.010213f, -0.006158f, -0.001877f, +0.000451f, +0.002591f, - -0.000947f, -0.000755f, -0.005183f, +0.008808f, +0.006269f, +0.003938f, -0.002836f, +0.002855f, +0.000751f, -0.001181f, - +0.003477f, +0.000319f, +0.003549f, +0.001517f, -0.000499f, -0.001303f, -0.001387f, -0.002248f, +0.000942f, +0.004165f, - -0.000164f, +0.001601f, -0.000240f, -0.003159f, +0.001259f, -0.000787f, +0.002437f, +0.000985f, -0.000139f, +0.000765f, - +0.000825f, -0.000848f, -0.000027f, +0.000944f, +0.000265f, +0.000274f, -0.000311f, -0.001351f, -0.000135f, -0.000608f, - -0.000310f, -0.000498f, -0.000181f, +0.000120f, -0.000089f, +0.000572f, -0.000358f, -0.000063f, -0.000226f, +0.000482f, - -0.000492f, +0.000130f, +0.000308f, -0.000476f, -0.000321f, +0.000258f, -0.000312f, +0.000090f, +0.000322f, -0.000083f, - -0.000019f, +0.000207f, -0.000045f, +0.000239f, -0.000007f, +0.000007f - } - }, - { - { - +0.019440f, +0.002091f, -0.101951f, -0.015108f, -0.003232f, -0.001833f, -0.003902f, +0.000068f, +0.001585f, +0.002243f, - -0.007184f, -0.007726f, +0.000330f, -0.005674f, +0.009512f, -0.001259f, +0.001832f, +0.004490f, -0.007475f, -0.001377f, - -0.004192f, -0.000594f, +0.000158f, +0.004237f, -0.002078f, +0.002341f, -0.000092f, +0.003031f, +0.000431f, +0.003004f, - -0.005224f, +0.000104f, -0.002580f, -0.000123f, +0.000433f, -0.001763f, +0.000113f, -0.001507f, -0.000996f, -0.003700f, - +0.003062f, -0.000772f, +0.001080f, +0.000959f, +0.001236f, +0.001969f, +0.003612f, +0.000249f, -0.000103f, -0.000805f, - +0.000468f, -0.000320f, -0.001596f, +0.001343f, +0.000100f, +0.001371f, -0.000397f, +0.000546f, -0.000076f, +0.000644f, - +0.000173f, -0.000391f, +0.000149f, +0.000842f, -0.000434f, +0.000118f, -0.000399f, +0.000466f, -0.000116f, +0.000374f, - -0.000174f, +0.000498f, -0.000572f, +0.000552f, +0.000187f, -0.000331f, +0.000165f, +0.000046f, +0.000543f, -0.000164f, - -0.000379f, -0.000085f, +0.000375f, -0.000336f, -0.000180f, +0.000121f, -0.000143f, +0.000098f, -0.000219f, +0.000151f, - -0.000041f, +0.000269f, -0.000214f, +0.000127f, +0.000113f, +0.000075f - }, - { - -0.000518f, +0.012393f, -0.040097f, -0.007977f, +0.002628f, -0.001288f, -0.000853f, -0.001374f, +0.000252f, +0.002057f, - -0.003147f, -0.001078f, -0.003822f, +0.006099f, -0.002791f, +0.011584f, -0.007033f, +0.001202f, -0.007114f, +0.001511f, - -0.000836f, -0.002650f, -0.000847f, -0.000140f, +0.006332f, -0.005513f, -0.003535f, +0.003057f, -0.005991f, +0.002371f, - -0.005815f, +0.009529f, -0.002437f, -0.003366f, +0.002936f, -0.003806f, +0.007170f, +0.003687f, +0.000507f, +0.001508f, - +0.000095f, +0.000455f, -0.001713f, +0.001192f, +0.000241f, -0.000224f, -0.000025f, -0.001255f, -0.000351f, -0.000536f, - +0.000692f, +0.000842f, +0.001400f, -0.000780f, -0.000354f, -0.000973f, +0.000192f, +0.000312f, -0.000172f, +0.000801f, - +0.001091f, -0.001278f, +0.000121f, -0.001031f, +0.001008f, -0.000216f, -0.000052f, +0.000316f, +0.000206f, -0.000112f, - +0.001053f, -0.000443f, -0.000357f, +0.000061f, +0.000024f, -0.000626f, -0.000026f, +0.000205f, -0.000368f, +0.000000f, - -0.000015f, +0.000254f, +0.000188f, +0.000116f, -0.000047f, +0.000098f, +0.000054f, -0.000244f, -0.000021f, +0.000036f, - -0.000074f, -0.000062f, +0.000214f, -0.000025f, +0.000093f, -0.000103f - }, - { - -0.009603f, +0.050413f, +0.043876f, -0.014723f, -0.015772f, +0.003756f, -0.003159f, -0.001619f, +0.002748f, -0.000759f, - +0.007562f, -0.008654f, -0.003566f, +0.004286f, -0.000820f, +0.000018f, +0.000499f, -0.017144f, -0.009450f, +0.000651f, - -0.014001f, +0.002084f, -0.003853f, +0.005215f, -0.001239f, -0.001366f, -0.000130f, -0.001928f, -0.006297f, -0.003809f, - +0.003843f, +0.000942f, -0.001473f, -0.002236f, -0.003773f, +0.004149f, +0.000504f, -0.006429f, -0.000550f, -0.003184f, - -0.001380f, +0.001032f, -0.002443f, +0.000970f, +0.000415f, +0.000910f, -0.002644f, -0.001605f, +0.000819f, +0.000331f, - +0.000535f, -0.001230f, -0.000392f, +0.000503f, -0.000229f, +0.000913f, +0.000001f, -0.000543f, -0.000177f, -0.000138f, - -0.000315f, +0.001808f, -0.000617f, -0.000284f, -0.000851f, +0.000575f, -0.001675f, +0.000474f, -0.000459f, +0.000226f, - -0.000903f, +0.000055f, -0.000064f, -0.000416f, -0.000525f, +0.000343f, +0.000441f, +0.000416f, -0.000515f, +0.000172f, - -0.000106f, +0.000263f, -0.000121f, -0.000285f, +0.000110f, -0.000331f, +0.000445f, -0.000515f, +0.000324f, -0.000018f, - -0.000035f, +0.000211f, -0.000031f, -0.000150f, +0.000229f, +0.000145f - }, - { - -0.003976f, +0.265165f, -0.022349f, +0.023520f, -0.000231f, -0.000559f, +0.001189f, -0.001886f, +0.001551f, +0.001705f, - -0.000290f, +0.006314f, -0.003556f, -0.007499f, -0.006117f, +0.004451f, +0.003070f, +0.009696f, +0.007238f, -0.001678f, - +0.002121f, +0.003032f, +0.002039f, -0.000813f, +0.002560f, +0.002685f, -0.000939f, +0.001265f, -0.002305f, +0.002100f, - +0.000195f, -0.001037f, +0.000886f, +0.000211f, +0.000918f, -0.001597f, +0.003429f, -0.000540f, -0.001150f, +0.005793f, - -0.002261f, +0.000320f, -0.003589f, +0.000897f, +0.001491f, -0.000852f, -0.000671f, -0.000457f, +0.001713f, -0.000262f, - +0.001079f, -0.001763f, -0.000614f, +0.000282f, +0.000764f, -0.000371f, -0.000208f, +0.000957f, -0.000705f, +0.000807f, - +0.000740f, -0.000252f, -0.000333f, +0.000279f, +0.000084f, +0.000169f, -0.000111f, +0.000514f, +0.000013f, +0.000683f, - -0.000168f, -0.000768f, -0.000314f, +0.000034f, +0.000474f, -0.000262f, +0.000105f, +0.000422f, -0.000002f, +0.000214f, - +0.000093f, +0.000523f, +0.000006f, -0.000049f, -0.000095f, -0.000125f, +0.000124f, -0.000136f, -0.000239f, +0.000299f, - +0.000020f, -0.000016f, +0.000068f, -0.000150f, +0.000314f, -0.000151f - }, - { - +0.002129f, -0.001042f, -0.005338f, -0.000369f, -0.000272f, +0.000219f, +0.002008f, +0.000611f, +0.001607f, +0.001014f, - -0.001188f, -0.001105f, +0.003195f, +0.001431f, +0.011216f, -0.013803f, -0.009144f, +0.042863f, -0.040981f, +0.002141f, - +0.001907f, -0.003787f, -0.005690f, -0.003289f, -0.002119f, +0.001713f, +0.002622f, +0.006554f, +0.000816f, +0.003937f, - -0.002826f, +0.002405f, -0.001360f, +0.005226f, +0.001943f, -0.002279f, -0.000267f, +0.002474f, +0.005604f, +0.003364f, - -0.002280f, -0.000249f, -0.002284f, -0.000880f, +0.001364f, +0.000546f, -0.002960f, +0.001202f, -0.001171f, +0.002035f, - -0.001900f, -0.000934f, +0.001733f, -0.001211f, +0.000776f, -0.000398f, +0.001532f, +0.000444f, -0.000312f, +0.000859f, - +0.000674f, -0.000786f, -0.000502f, +0.001506f, +0.000254f, -0.000225f, -0.000198f, +0.000613f, +0.000067f, -0.000129f, - -0.000137f, +0.000459f, -0.000333f, +0.000842f, +0.000175f, +0.000542f, -0.000164f, +0.000749f, +0.000426f, -0.000323f, - +0.000182f, +0.000007f, -0.000083f, -0.000058f, -0.000078f, -0.000356f, +0.000303f, -0.000241f, +0.000126f, +0.000391f, - -0.000191f, +0.000236f, +0.000008f, +0.000001f, -0.000193f, +0.000049f - }, - { - -0.028539f, +0.501921f, -0.030612f, -0.009238f, +0.008007f, -0.000745f, -0.000484f, +0.002922f, +0.003455f, -0.000641f, - +0.002956f, -0.001126f, +0.000820f, -0.001419f, +0.005692f, -0.001137f, -0.009988f, +0.001697f, +0.002952f, -0.000894f, - +0.003107f, -0.001016f, +0.001679f, -0.001908f, +0.001818f, -0.001656f, +0.000168f, +0.000005f, -0.001062f, +0.001247f, - +0.002245f, -0.003052f, -0.002745f, +0.001696f, +0.000885f, +0.002504f, +0.000491f, -0.000043f, +0.002718f, +0.000898f, - +0.005284f, -0.000859f, +0.000918f, -0.001605f, -0.006741f, +0.001133f, -0.003589f, +0.003837f, -0.001276f, -0.000047f, - +0.001782f, -0.001236f, +0.002378f, -0.000095f, +0.000839f, -0.000621f, -0.000147f, -0.001008f, +0.000726f, -0.000238f, - -0.001241f, +0.001716f, +0.000524f, +0.000026f, -0.000548f, +0.000372f, +0.000173f, -0.000155f, +0.000051f, -0.000600f, - +0.000455f, -0.000327f, +0.000661f, +0.000067f, -0.000405f, -0.000099f, -0.000029f, -0.000197f, +0.000066f, +0.000607f, - -0.000164f, +0.000214f, -0.000103f, +0.000307f, -0.000208f, +0.000461f, -0.000225f, -0.000177f, +0.000143f, -0.000109f, - -0.000110f, -0.000405f, +0.000196f, -0.000325f, +0.000238f, -0.000048f - }, - { - -0.000546f, +0.015852f, +0.003912f, +0.001967f, +0.000384f, +0.000126f, +0.001423f, +0.000459f, -0.000855f, +0.000084f, - -0.000013f, +0.000593f, +0.002192f, +0.007364f, +0.020585f, +0.005221f, +0.001532f, -0.006271f, +0.008116f, +0.007052f, - +0.004424f, -0.007363f, +0.009935f, +0.008282f, -0.000806f, -0.000204f, +0.004345f, -0.001146f, -0.006213f, +0.000535f, - -0.000721f, +0.005582f, +0.001601f, +0.000004f, -0.001111f, -0.001461f, +0.001870f, +0.000566f, +0.000152f, +0.001315f, - -0.002053f, -0.002015f, +0.002545f, +0.000396f, -0.002891f, -0.000387f, +0.000135f, -0.000151f, +0.000630f, -0.002406f, - +0.000931f, +0.000069f, +0.000397f, +0.000725f, -0.000202f, +0.002055f, -0.001301f, +0.000225f, +0.000930f, -0.000537f, - +0.000290f, -0.000621f, -0.000467f, +0.000663f, +0.000605f, -0.001367f, +0.000310f, +0.000260f, -0.000189f, +0.000598f, - +0.000058f, -0.000086f, +0.000306f, +0.000346f, +0.000185f, -0.000371f, +0.000168f, -0.000163f, +0.000116f, +0.000227f, - -0.000560f, -0.000184f, +0.000396f, -0.000275f, +0.000067f, +0.000057f, +0.000178f, -0.000133f, +0.000028f, -0.000200f, - -0.000341f, -0.000038f, -0.000062f, -0.000092f, +0.000071f, +0.000063f - }, - { - +0.008898f, -0.347228f, +0.057766f, +0.005939f, +0.006671f, +0.001156f, -0.001842f, +0.002094f, +0.000448f, -0.000059f, - +0.004381f, -0.003693f, -0.000559f, -0.006156f, +0.004765f, +0.001525f, -0.001519f, -0.000010f, +0.002583f, +0.001101f, - -0.005836f, +0.001946f, +0.003082f, +0.004457f, +0.001297f, -0.001842f, +0.002635f, -0.000584f, -0.000599f, +0.001632f, - -0.000842f, -0.002857f, +0.003564f, -0.005295f, +0.002161f, +0.006215f, -0.001249f, +0.003229f, -0.000233f, +0.005533f, - -0.003153f, -0.000837f, -0.002578f, +0.000398f, +0.002847f, -0.000272f, +0.000849f, -0.002032f, +0.001150f, +0.001190f, - +0.000211f, -0.000066f, +0.002291f, -0.001784f, +0.001504f, +0.000999f, -0.001093f, -0.000473f, -0.000496f, +0.000842f, - -0.001327f, +0.000076f, -0.000040f, -0.000327f, +0.001143f, +0.000387f, -0.000597f, +0.000521f, +0.000119f, -0.000454f, - -0.000299f, +0.000221f, +0.001682f, +0.000403f, -0.000132f, -0.000452f, +0.000478f, +0.000344f, +0.000129f, -0.000325f, - +0.000621f, -0.000189f, +0.000290f, -0.000183f, -0.000050f, +0.000054f, -0.000043f, +0.000168f, -0.000331f, +0.000263f, - +0.000091f, +0.000042f, -0.000305f, +0.000346f, -0.000339f, -0.000095f - }, - { - -0.000386f, +0.015138f, -0.014091f, -0.004742f, -0.000151f, -0.000114f, +0.001153f, +0.001462f, -0.000131f, -0.000146f, - -0.000907f, +0.000228f, +0.003558f, -0.005977f, -0.017343f, +0.000047f, -0.010770f, +0.018272f, -0.010934f, -0.000402f, - -0.004111f, +0.004929f, -0.000908f, -0.000256f, -0.002094f, +0.004513f, +0.002902f, -0.001286f, -0.001245f, +0.001951f, - -0.001919f, -0.002964f, +0.001524f, -0.002660f, -0.001833f, +0.000286f, -0.003810f, -0.001579f, -0.000431f, +0.002355f, - -0.001941f, -0.001444f, -0.000231f, +0.001030f, -0.002791f, -0.001075f, -0.001269f, -0.001215f, +0.002271f, -0.001985f, - +0.000591f, -0.000155f, +0.000233f, -0.000382f, -0.000669f, -0.000384f, -0.000561f, +0.002014f, +0.000709f, -0.000667f, - +0.000782f, -0.001412f, -0.000348f, +0.000153f, +0.000857f, -0.000418f, +0.000152f, -0.000678f, +0.000334f, +0.001225f, - +0.000308f, +0.000348f, +0.000111f, -0.000271f, +0.000422f, -0.000365f, +0.000269f, +0.000329f, +0.000077f, +0.000144f, - -0.000013f, -0.000787f, +0.000322f, -0.000175f, +0.000220f, -0.000103f, +0.000349f, -0.000135f, -0.000127f, +0.000045f, - +0.000008f, -0.000340f, +0.000175f, -0.000116f, +0.000336f, -0.000015f - }, - { - -0.019253f, +0.048452f, -0.012082f, -0.006452f, +0.005227f, +0.005448f, +0.009073f, +0.002028f, -0.000915f, +0.005495f, - +0.000399f, -0.005538f, -0.001663f, -0.000407f, +0.002562f, -0.001943f, +0.014919f, +0.004945f, -0.001704f, +0.000168f, - -0.003184f, -0.001689f, +0.005744f, +0.002686f, +0.001987f, +0.004009f, -0.000351f, -0.003349f, +0.002938f, +0.001968f, - +0.001918f, +0.004081f, +0.003236f, -0.004514f, +0.000138f, +0.002565f, -0.003467f, +0.001084f, +0.002716f, -0.000688f, - +0.001014f, -0.001786f, +0.000810f, -0.001426f, -0.001074f, +0.000185f, +0.000840f, -0.000843f, -0.002913f, +0.001638f, - -0.001442f, +0.000689f, +0.000341f, -0.000645f, -0.000088f, +0.001205f, -0.000375f, -0.000184f, -0.000446f, +0.000547f, - +0.000890f, -0.000190f, +0.000173f, +0.000357f, -0.000810f, +0.001016f, -0.000979f, +0.000150f, +0.000184f, +0.000041f, - +0.000448f, +0.000185f, +0.000161f, +0.000111f, +0.000148f, -0.000312f, +0.000261f, -0.000228f, +0.000465f, -0.000105f, - -0.000363f, +0.000053f, +0.000214f, +0.000057f, -0.000063f, +0.000257f, +0.000118f, -0.000082f, +0.000048f, +0.000201f, - -0.000274f, -0.000088f, -0.000019f, -0.000085f, +0.000081f, -0.000050f - }, - { - +0.000460f, +0.010453f, -0.005024f, -0.003855f, +0.003259f, -0.000703f, +0.003567f, +0.002239f, -0.000174f, -0.003209f, - +0.004625f, -0.003823f, -0.003952f, +0.016574f, -0.008101f, +0.004040f, +0.004578f, +0.001127f, +0.005858f, -0.006293f, - +0.006353f, +0.004516f, +0.005824f, +0.001418f, -0.003905f, +0.002191f, +0.001383f, +0.005211f, +0.000964f, +0.000848f, - -0.003747f, -0.006906f, +0.006400f, -0.002438f, -0.003466f, -0.004893f, -0.005270f, +0.002283f, -0.001045f, -0.001265f, - -0.002397f, -0.000764f, +0.003588f, -0.001435f, -0.000614f, +0.000474f, -0.003157f, +0.001383f, +0.000653f, +0.000481f, - -0.000672f, +0.000182f, +0.000151f, +0.000566f, +0.002116f, -0.000323f, -0.001077f, -0.000481f, -0.000738f, +0.000491f, - +0.001757f, -0.000895f, -0.000282f, +0.000569f, -0.000156f, +0.000032f, +0.000733f, +0.000230f, -0.000316f, +0.000821f, - -0.000387f, -0.000377f, -0.000122f, +0.000277f, -0.000348f, -0.000316f, +0.000090f, -0.000007f, +0.000108f, +0.000069f, - -0.000131f, -0.000223f, +0.000196f, -0.000400f, +0.000024f, +0.000081f, -0.000332f, +0.000134f, -0.000014f, +0.000038f, - +0.000201f, +0.000003f, -0.000185f, -0.000019f, +0.000081f, +0.000069f - }, - { - +0.016913f, -0.109002f, +0.005705f, -0.003169f, -0.003336f, -0.008570f, +0.006991f, -0.000073f, -0.001304f, +0.004666f, - -0.006009f, +0.006915f, -0.005299f, -0.009520f, +0.001728f, +0.002311f, +0.001901f, +0.004093f, +0.002174f, -0.002218f, - +0.000112f, -0.004084f, +0.000200f, +0.000376f, +0.000337f, +0.003933f, +0.001750f, -0.000832f, -0.002381f, +0.001427f, - -0.000143f, -0.000234f, +0.000926f, +0.000252f, +0.000170f, -0.002414f, +0.002425f, +0.000026f, +0.001784f, -0.001546f, - +0.001057f, -0.000328f, -0.000524f, -0.002253f, +0.003721f, -0.001185f, +0.000197f, -0.000053f, +0.002792f, -0.000242f, - -0.000896f, -0.001025f, +0.000067f, +0.000934f, -0.000464f, +0.002591f, -0.000160f, +0.000062f, -0.000435f, +0.000766f, - -0.000737f, +0.000106f, +0.000037f, +0.000089f, +0.000137f, -0.000035f, -0.000026f, -0.000607f, +0.000321f, +0.000083f, - -0.000060f, +0.000181f, +0.000400f, +0.000239f, +0.000045f, +0.000057f, +0.000243f, +0.000272f, -0.000266f, +0.000415f, - +0.000005f, -0.000025f, -0.000064f, +0.000199f, -0.000228f, +0.000083f, -0.000242f, -0.000225f, +0.000186f, -0.000183f, - -0.000013f, +0.000094f, +0.000108f, -0.000163f, -0.000062f, +0.000152f - }, - { - +0.001010f, -0.014305f, -0.007476f, +0.000630f, -0.003075f, +0.000397f, +0.000633f, -0.001236f, +0.003197f, -0.000555f, - +0.002379f, +0.004060f, -0.021809f, +0.055547f, -0.012359f, -0.008001f, +0.005010f, +0.000326f, -0.002707f, +0.003834f, - +0.003696f, -0.007020f, +0.016722f, -0.001566f, -0.004603f, +0.004901f, +0.003378f, -0.007589f, -0.002211f, +0.001031f, - -0.004576f, +0.002005f, -0.002151f, -0.001512f, -0.002351f, +0.000300f, +0.000071f, +0.001497f, +0.000952f, -0.000917f, - +0.004554f, +0.001518f, -0.002986f, +0.000030f, -0.003719f, +0.000750f, +0.001467f, +0.000966f, -0.000717f, -0.001814f, - -0.000045f, -0.001337f, -0.000773f, -0.001343f, +0.001082f, -0.001050f, -0.000122f, -0.000620f, +0.000763f, -0.000915f, - +0.000709f, -0.000871f, -0.000973f, -0.000349f, -0.000902f, -0.000105f, +0.000397f, -0.000640f, -0.001202f, +0.000119f, - +0.000022f, +0.000069f, +0.000668f, +0.000080f, -0.000170f, -0.000264f, -0.000158f, -0.000119f, -0.000266f, +0.000105f, - -0.000032f, -0.000422f, -0.000242f, +0.000143f, -0.000030f, +0.000086f, +0.000107f, -0.000286f, +0.000412f, -0.000092f, - +0.000161f, +0.000260f, -0.000022f, +0.000132f, +0.000111f, -0.000015f - }, - { - -0.005083f, -0.102358f, +0.001738f, +0.002791f, +0.002506f, +0.014414f, -0.012344f, -0.001490f, +0.001710f, -0.000374f, - +0.007038f, +0.000062f, +0.000098f, +0.001461f, -0.039303f, -0.003859f, +0.011234f, +0.004889f, -0.003542f, +0.005781f, - -0.002833f, +0.001945f, -0.002141f, +0.000877f, -0.000574f, +0.000006f, +0.001919f, +0.002907f, +0.002686f, -0.002259f, - +0.002757f, -0.002232f, +0.001177f, +0.000240f, +0.000220f, -0.000790f, -0.000558f, +0.001522f, -0.000666f, +0.000016f, - +0.000256f, +0.002811f, -0.000788f, +0.000524f, -0.001954f, -0.000145f, -0.001280f, -0.000526f, +0.000707f, +0.000817f, - +0.000210f, -0.001308f, +0.002006f, +0.000313f, -0.000431f, +0.000831f, -0.001417f, +0.001056f, -0.000944f, +0.001187f, - -0.000960f, +0.000276f, -0.000916f, -0.000757f, -0.000347f, +0.000072f, -0.000155f, -0.000149f, +0.000291f, +0.000487f, - -0.000691f, +0.000438f, -0.000624f, -0.000542f, +0.000328f, -0.000160f, +0.000063f, -0.000039f, +0.000130f, -0.000016f, - +0.000058f, +0.000249f, -0.000496f, +0.000210f, -0.000266f, +0.000585f, +0.000418f, -0.000100f, -0.000316f, +0.000152f, - -0.000199f, +0.000220f, +0.000167f, +0.000014f, +0.000218f, -0.000210f - }, - { - -0.000865f, -0.012041f, +0.003018f, -0.001566f, -0.000454f, -0.000476f, -0.000190f, -0.001797f, -0.002753f, -0.003892f, - -0.003038f, -0.002395f, +0.004046f, -0.012473f, -0.086283f, +0.006517f, +0.009379f, -0.008373f, +0.006814f, +0.003061f, - +0.002717f, +0.001674f, +0.005562f, -0.008434f, -0.000888f, +0.004423f, -0.007170f, -0.000297f, +0.001511f, +0.004237f, - -0.001359f, +0.002035f, -0.001240f, +0.003656f, -0.003239f, +0.001512f, -0.000748f, -0.000730f, +0.001188f, +0.000367f, - +0.002421f, -0.000829f, +0.002028f, -0.001631f, +0.000001f, -0.000491f, -0.000486f, -0.001353f, -0.000328f, +0.002048f, - -0.002344f, +0.000562f, +0.000172f, -0.003506f, +0.001486f, +0.000197f, +0.001292f, -0.001000f, -0.000423f, +0.000623f, - +0.000450f, -0.000868f, +0.000167f, +0.000669f, -0.000096f, +0.000149f, -0.000020f, -0.000300f, +0.000850f, -0.000255f, - -0.000134f, -0.000136f, -0.000147f, +0.000316f, -0.000050f, -0.000033f, -0.000418f, -0.000147f, -0.000199f, +0.000316f, - -0.000389f, +0.000159f, +0.000184f, +0.000018f, +0.000008f, +0.000268f, -0.000165f, +0.000021f, +0.000068f, -0.000220f, - -0.000104f, +0.000121f, -0.000059f, +0.000141f, -0.000333f, -0.000108f - } - }, - { - { - -0.019346f, -0.070846f, -0.004744f, -0.012389f, -0.006706f, -0.001654f, -0.001557f, -0.004012f, +0.001654f, -0.000930f, - -0.005206f, -0.003281f, +0.000292f, -0.001747f, +0.000857f, +0.000266f, +0.002752f, +0.000281f, +0.001740f, -0.008821f, - -0.002064f, +0.001985f, +0.000821f, +0.001452f, -0.000491f, -0.000523f, +0.004712f, +0.002324f, +0.000533f, -0.000758f, - -0.000689f, -0.000464f, -0.000680f, -0.000438f, -0.000967f, +0.000070f, +0.000109f, -0.002286f, -0.000523f, -0.000444f, - +0.000216f, -0.001296f, +0.000602f, +0.000957f, +0.000631f, +0.002403f, +0.002832f, +0.001688f, -0.000094f, -0.000680f, - -0.001002f, -0.000721f, +0.000237f, +0.000825f, +0.000493f, +0.000511f, -0.000018f, +0.001352f, +0.000687f, +0.000191f, - -0.000490f, -0.000060f, +0.000761f, +0.000676f, -0.000487f, +0.000734f, -0.000557f, +0.000348f, +0.000264f, +0.000149f, - +0.000227f, +0.000096f, -0.000195f, +0.000329f, +0.000092f, +0.000037f, +0.000027f, +0.000231f, +0.000161f, -0.000369f, - -0.000344f, -0.000062f, +0.000061f, -0.000148f, -0.000186f, +0.000217f, -0.000002f, -0.000013f, -0.000047f, -0.000079f, - -0.000041f, +0.000124f, -0.000107f, +0.000071f, +0.000138f, +0.000074f - }, - { - -0.002911f, -0.033496f, -0.007489f, -0.002753f, -0.005895f, -0.000670f, -0.001271f, -0.001552f, -0.001030f, -0.000375f, - -0.000084f, -0.001240f, -0.002437f, +0.000138f, +0.005667f, +0.002715f, +0.001926f, -0.002409f, +0.001156f, -0.001006f, - +0.002681f, -0.003402f, -0.000432f, -0.001620f, +0.003073f, +0.000234f, -0.001942f, +0.000302f, -0.004267f, -0.001848f, - -0.002580f, +0.001801f, -0.001413f, -0.000840f, +0.002227f, +0.001965f, +0.003950f, +0.001923f, +0.000366f, +0.002170f, - -0.000971f, -0.000852f, -0.000181f, +0.000538f, +0.000508f, +0.000350f, -0.000735f, -0.000995f, -0.000640f, -0.000653f, - +0.000114f, +0.000461f, +0.000480f, -0.000278f, -0.000575f, +0.001044f, +0.000341f, -0.000231f, -0.000500f, +0.000561f, - +0.000007f, -0.000893f, +0.000125f, -0.000201f, -0.000228f, +0.000026f, +0.000298f, +0.000054f, +0.000229f, +0.000144f, - +0.000181f, -0.000083f, +0.000116f, +0.000022f, -0.000503f, -0.000213f, +0.000143f, +0.000061f, -0.000163f, -0.000304f, - +0.000127f, +0.000341f, +0.000259f, +0.000009f, -0.000014f, -0.000109f, -0.000055f, +0.000043f, -0.000155f, -0.000036f, - +0.000106f, +0.000056f, -0.000024f, -0.000114f, -0.000080f, +0.000040f - }, - { - +0.012464f, +0.097402f, -0.010196f, -0.028237f, -0.007759f, -0.000222f, -0.001613f, -0.000268f, +0.001068f, +0.004997f, - -0.000375f, -0.008183f, -0.001462f, +0.001992f, +0.001037f, -0.005239f, -0.000248f, -0.006369f, -0.010198f, +0.000152f, - -0.011961f, +0.001207f, +0.000411f, +0.002283f, +0.000891f, -0.001902f, -0.001562f, -0.001586f, -0.004795f, -0.002136f, - +0.000124f, +0.000742f, -0.001283f, -0.000462f, -0.001618f, +0.001096f, -0.001740f, -0.001642f, -0.001381f, -0.002354f, - -0.001606f, +0.000915f, +0.000076f, +0.000152f, -0.000456f, -0.001273f, -0.000624f, -0.001463f, -0.000046f, +0.000817f, - -0.000025f, -0.001232f, -0.001233f, -0.000394f, +0.000464f, +0.001211f, -0.000417f, +0.000336f, -0.000366f, +0.000377f, - -0.000394f, -0.000203f, +0.000037f, -0.000389f, -0.000078f, -0.000468f, -0.000701f, -0.000315f, -0.000116f, -0.000107f, - -0.000427f, -0.000325f, -0.000717f, -0.000078f, -0.000130f, +0.000271f, +0.000581f, +0.000077f, -0.000282f, +0.000272f, - +0.000147f, +0.000069f, -0.000217f, -0.000128f, -0.000059f, -0.000237f, +0.000031f, -0.000082f, +0.000078f, +0.000035f, - +0.000193f, +0.000130f, +0.000195f, +0.000023f, +0.000095f, +0.000065f - }, - { - +0.023111f, +0.165959f, +0.028872f, +0.016365f, +0.001918f, +0.000995f, -0.000641f, -0.000760f, -0.000088f, +0.001985f, - +0.002499f, +0.001781f, -0.001691f, -0.004048f, -0.002191f, +0.000884f, +0.005249f, +0.010346f, +0.002042f, +0.000016f, - -0.000398f, +0.004152f, +0.000983f, +0.001494f, +0.002521f, +0.002834f, -0.000077f, +0.000738f, -0.001263f, -0.000685f, - +0.000456f, +0.001271f, -0.000906f, -0.000265f, +0.000070f, +0.000683f, +0.000508f, -0.000225f, +0.000525f, +0.002030f, - +0.000437f, +0.000317f, -0.002474f, -0.000421f, +0.000320f, -0.000859f, +0.000034f, -0.000250f, +0.002029f, +0.000743f, - -0.000748f, -0.000783f, -0.000043f, -0.000645f, -0.000314f, +0.000035f, +0.000085f, +0.000651f, +0.000027f, +0.000548f, - +0.000317f, -0.000620f, +0.000219f, -0.000030f, -0.000040f, -0.000269f, +0.000349f, -0.000032f, +0.000203f, +0.000376f, - -0.000036f, -0.000218f, +0.000211f, +0.000152f, -0.000095f, -0.000209f, +0.000022f, +0.000221f, +0.000258f, +0.000014f, - +0.000206f, +0.000213f, +0.000156f, -0.000078f, -0.000085f, +0.000046f, +0.000122f, -0.000142f, +0.000071f, +0.000004f, - -0.000009f, -0.000112f, +0.000096f, +0.000001f, +0.000021f, +0.000108f - }, - { - -0.002406f, -0.003376f, +0.001879f, -0.000043f, -0.000718f, +0.000604f, +0.001835f, +0.000019f, +0.000675f, +0.000530f, - +0.000784f, +0.000732f, -0.001829f, -0.002083f, +0.007709f, +0.001193f, +0.004648f, -0.012497f, -0.000959f, -0.001256f, - +0.004435f, -0.004142f, -0.008467f, +0.001007f, +0.001987f, +0.001634f, +0.002046f, +0.002474f, +0.002308f, -0.001103f, - +0.001870f, +0.003444f, +0.001146f, -0.000181f, -0.000485f, -0.000001f, +0.000413f, +0.002408f, +0.004226f, +0.001914f, - +0.000222f, -0.002136f, -0.000416f, -0.000384f, +0.000058f, -0.001195f, -0.001702f, -0.000589f, -0.000333f, +0.000236f, - +0.000231f, -0.000468f, +0.000034f, +0.000242f, +0.000070f, -0.000224f, +0.000960f, -0.000234f, -0.000506f, +0.000857f, - +0.000335f, +0.000187f, -0.000084f, +0.000457f, -0.000335f, -0.000770f, +0.000367f, +0.000164f, +0.000281f, -0.000051f, - -0.000374f, +0.000500f, +0.000325f, +0.000104f, +0.000274f, +0.000235f, +0.000288f, +0.000315f, +0.000137f, -0.000112f, - -0.000009f, +0.000088f, +0.000143f, -0.000177f, -0.000082f, -0.000063f, -0.000104f, +0.000055f, +0.000010f, +0.000192f, - +0.000085f, -0.000068f, -0.000007f, +0.000020f, -0.000017f, +0.000037f - }, - { - +0.052529f, +0.306525f, +0.036302f, -0.005514f, +0.002391f, +0.001976f, +0.000433f, +0.000292f, +0.003139f, -0.000329f, - -0.001989f, +0.001496f, +0.000407f, +0.001226f, +0.000988f, -0.000064f, -0.004206f, -0.000418f, -0.000273f, +0.001010f, - +0.001141f, -0.000685f, +0.002382f, -0.000648f, +0.000519f, -0.001570f, -0.000298f, -0.000146f, -0.001390f, -0.000047f, - +0.002655f, -0.002114f, +0.000213f, -0.001377f, +0.003837f, +0.001529f, +0.001092f, +0.000022f, +0.001574f, +0.001918f, - +0.001599f, +0.000029f, -0.000973f, -0.003213f, -0.002237f, -0.001043f, +0.000379f, -0.000146f, -0.000171f, +0.001022f, - +0.000147f, +0.000395f, +0.000773f, +0.000053f, +0.000563f, -0.000273f, -0.000362f, -0.001024f, +0.000951f, +0.000303f, - -0.000628f, +0.000704f, +0.000090f, -0.000055f, -0.000391f, +0.000108f, +0.000046f, -0.000027f, +0.000312f, -0.000518f, - -0.000107f, -0.000056f, +0.000089f, -0.000062f, +0.000026f, -0.000279f, -0.000109f, +0.000052f, +0.000163f, +0.000260f, - +0.000021f, +0.000302f, +0.000227f, +0.000197f, -0.000019f, +0.000005f, -0.000002f, +0.000009f, -0.000098f, -0.000023f, - -0.000257f, -0.000144f, +0.000016f, -0.000025f, +0.000085f, -0.000060f - }, - { - +0.001036f, +0.009360f, +0.004391f, +0.002329f, +0.000002f, +0.000316f, +0.001248f, -0.000038f, -0.000487f, +0.000271f, - -0.000815f, +0.000979f, +0.000053f, +0.009372f, +0.017214f, +0.006689f, +0.003709f, -0.000601f, +0.002974f, +0.014285f, - +0.004246f, -0.001693f, +0.006202f, +0.006402f, -0.004152f, +0.002208f, +0.003421f, -0.002880f, -0.003241f, -0.001217f, - +0.002397f, +0.001387f, +0.000670f, +0.002096f, -0.000812f, +0.000682f, -0.000217f, +0.000689f, +0.000757f, -0.000848f, - -0.000694f, +0.000233f, +0.000487f, -0.001127f, -0.001019f, -0.000372f, -0.000229f, +0.000371f, +0.000165f, -0.000997f, - +0.000129f, +0.000107f, +0.000408f, -0.000188f, +0.000820f, +0.000274f, +0.000450f, -0.000250f, +0.000297f, +0.000852f, - -0.000076f, +0.000332f, -0.000171f, +0.000585f, -0.000183f, +0.000146f, -0.000168f, -0.000346f, -0.000163f, +0.000743f, - +0.000602f, -0.000161f, -0.000290f, +0.000374f, -0.000226f, -0.000308f, +0.000081f, +0.000056f, -0.000007f, -0.000236f, - -0.000319f, -0.000138f, +0.000180f, -0.000012f, +0.000035f, -0.000077f, +0.000156f, +0.000076f, +0.000037f, -0.000155f, - -0.000079f, +0.000031f, -0.000099f, -0.000092f, +0.000081f, +0.000030f - }, - { - -0.024123f, -0.196398f, -0.009694f, +0.005852f, +0.001671f, +0.000379f, -0.001376f, +0.001721f, +0.000260f, +0.000423f, - +0.001107f, -0.001360f, -0.000691f, -0.002024f, -0.001042f, +0.001981f, -0.001388f, -0.001014f, +0.001218f, +0.001494f, - -0.002801f, +0.000806f, -0.000000f, +0.003601f, +0.001770f, +0.000036f, -0.000217f, +0.001214f, -0.001652f, +0.000186f, - -0.000290f, +0.001288f, +0.000710f, -0.003016f, -0.000941f, -0.000007f, +0.000776f, +0.002857f, +0.002363f, +0.000351f, - -0.001586f, -0.001703f, -0.000668f, +0.001493f, +0.001978f, -0.000605f, -0.000354f, +0.001211f, +0.000116f, -0.000540f, - +0.000881f, -0.000286f, +0.001098f, +0.000920f, -0.000364f, +0.000493f, -0.000412f, -0.000497f, +0.000425f, -0.000347f, - -0.000288f, +0.000041f, -0.000576f, +0.000150f, +0.000956f, -0.000027f, +0.000039f, +0.000088f, +0.000137f, +0.000270f, - +0.000069f, +0.000301f, +0.000916f, +0.000211f, -0.000290f, -0.000118f, +0.000378f, +0.000057f, +0.000246f, +0.000232f, - +0.000116f, +0.000222f, +0.000129f, +0.000080f, +0.000036f, +0.000081f, +0.000019f, -0.000234f, -0.000199f, -0.000010f, - +0.000195f, +0.000049f, -0.000063f, +0.000000f, -0.000167f, -0.000187f - }, - { - +0.001816f, -0.006683f, -0.006273f, -0.000596f, -0.001315f, +0.000320f, +0.001011f, +0.000911f, -0.000005f, -0.001099f, - -0.001716f, +0.002322f, +0.000427f, -0.001779f, -0.012404f, -0.006216f, +0.003667f, +0.001871f, -0.001158f, +0.003126f, - -0.004531f, +0.001784f, +0.000843f, +0.004448f, -0.002042f, +0.001201f, -0.001168f, +0.000870f, +0.001526f, -0.001255f, - -0.005183f, -0.000597f, +0.000216f, +0.000804f, -0.001395f, -0.002860f, +0.000099f, -0.002687f, -0.001905f, +0.001390f, - -0.001993f, -0.001158f, +0.000322f, -0.002060f, -0.002269f, -0.000304f, -0.001098f, -0.000243f, -0.000762f, +0.000954f, - +0.000313f, -0.000250f, +0.001028f, -0.000652f, -0.001172f, -0.000366f, -0.000133f, +0.000005f, +0.000431f, -0.000039f, - +0.000313f, -0.000029f, -0.000492f, +0.000434f, +0.001032f, +0.000635f, -0.000399f, -0.000127f, +0.000194f, +0.000522f, - +0.000797f, +0.000335f, +0.000162f, +0.000103f, -0.000345f, -0.000136f, +0.000225f, +0.000070f, +0.000202f, +0.000078f, - -0.000017f, -0.000173f, +0.000266f, -0.000014f, -0.000108f, +0.000091f, -0.000112f, -0.000276f, -0.000127f, -0.000030f, - +0.000023f, -0.000078f, +0.000032f, -0.000062f, +0.000031f, -0.000011f - }, - { - +0.015873f, +0.022336f, -0.016643f, -0.004063f, +0.000428f, +0.007099f, +0.009186f, +0.003728f, -0.001637f, +0.001389f, - +0.000186f, -0.006024f, +0.000869f, -0.002496f, -0.002703f, +0.001918f, +0.005901f, +0.006664f, -0.001251f, +0.000168f, - -0.002087f, +0.001740f, +0.003323f, +0.003235f, +0.001613f, +0.001492f, +0.000718f, -0.000130f, -0.000323f, +0.002741f, - +0.003288f, +0.004657f, +0.001254f, -0.002478f, -0.002799f, +0.000724f, -0.002126f, +0.001746f, +0.001150f, +0.001113f, - -0.001719f, -0.000842f, -0.000172f, -0.001158f, -0.000577f, -0.001007f, -0.000630f, -0.000351f, -0.001482f, -0.001883f, - +0.000279f, +0.000586f, -0.000644f, -0.000148f, +0.000407f, +0.000798f, +0.000231f, +0.000128f, -0.000146f, +0.000016f, - +0.000697f, +0.000441f, -0.000030f, +0.000077f, -0.000373f, +0.000087f, -0.000115f, +0.000160f, +0.000184f, -0.000109f, - -0.000044f, +0.000527f, +0.000158f, +0.000132f, -0.000047f, -0.000036f, +0.000088f, +0.000009f, +0.000114f, +0.000175f, - -0.000022f, +0.000050f, +0.000086f, -0.000082f, +0.000024f, -0.000045f, -0.000098f, -0.000013f, -0.000113f, +0.000047f, - -0.000087f, -0.000069f, +0.000013f, -0.000005f, -0.000047f, -0.000104f - }, - { - -0.001356f, -0.001427f, -0.000432f, +0.005615f, -0.000886f, +0.000168f, +0.002574f, +0.001250f, +0.000027f, -0.001732f, - +0.001608f, +0.001309f, +0.002232f, +0.004428f, -0.001969f, +0.005531f, +0.001989f, -0.001259f, +0.002273f, +0.002035f, - +0.004451f, +0.001020f, +0.005846f, +0.001113f, -0.001701f, +0.001410f, +0.000750f, +0.001268f, +0.000612f, +0.000813f, - -0.002884f, -0.000141f, +0.001150f, -0.000279f, -0.004875f, -0.004575f, -0.001175f, -0.000706f, -0.000430f, +0.000138f, - -0.002029f, -0.000196f, +0.000333f, -0.000852f, -0.000053f, -0.001097f, +0.000100f, -0.000391f, -0.000505f, +0.000820f, - -0.000216f, +0.000034f, +0.000263f, +0.001585f, +0.001867f, -0.000330f, -0.000718f, -0.000262f, -0.000708f, +0.000424f, - +0.000575f, -0.000482f, +0.000165f, +0.000161f, +0.000168f, -0.000250f, +0.000025f, -0.000053f, +0.000024f, +0.000182f, - +0.000130f, -0.000408f, -0.000249f, +0.000146f, -0.000414f, -0.000199f, +0.000276f, +0.000358f, +0.000172f, -0.000104f, - -0.000065f, -0.000075f, -0.000113f, -0.000056f, +0.000135f, -0.000029f, -0.000149f, +0.000028f, +0.000149f, +0.000159f, - +0.000104f, -0.000016f, -0.000085f, -0.000107f, +0.000065f, +0.000015f - }, - { - -0.018495f, -0.042886f, -0.006205f, -0.002288f, -0.004624f, +0.002863f, -0.001334f, -0.001100f, -0.000530f, +0.003028f, - +0.002180f, -0.000069f, -0.002001f, -0.002132f, -0.000540f, +0.002920f, +0.001235f, +0.001979f, +0.002329f, -0.000369f, - -0.001306f, -0.002582f, -0.001349f, +0.000013f, +0.002198f, +0.000869f, +0.001005f, -0.000666f, -0.001149f, +0.001681f, - +0.002561f, -0.001541f, -0.000716f, +0.000408f, -0.000035f, +0.000906f, +0.001433f, +0.002552f, +0.001633f, -0.000242f, - -0.000784f, +0.000334f, -0.003841f, +0.001483f, +0.001421f, +0.000089f, +0.000846f, +0.000031f, +0.000817f, +0.000049f, - -0.000715f, +0.000079f, -0.000478f, +0.000064f, +0.000302f, +0.001224f, +0.000196f, -0.000350f, +0.000273f, +0.000464f, - -0.000143f, -0.000017f, -0.000042f, +0.000066f, -0.000126f, -0.000108f, -0.000034f, +0.000215f, +0.000123f, -0.000216f, - +0.000108f, +0.000318f, +0.000190f, +0.000049f, -0.000056f, +0.000197f, +0.000161f, +0.000268f, +0.000144f, +0.000009f, - +0.000152f, -0.000017f, -0.000114f, -0.000028f, -0.000090f, -0.000070f, +0.000092f, -0.000238f, -0.000056f, -0.000154f, - -0.000094f, +0.000065f, -0.000034f, +0.000000f, -0.000086f, +0.000014f - }, - { - -0.000825f, -0.011728f, -0.003656f, -0.004460f, -0.002906f, -0.000297f, -0.001301f, +0.000171f, +0.000747f, +0.002489f, - +0.000790f, +0.000711f, +0.014097f, -0.003255f, -0.002093f, -0.007565f, +0.000433f, -0.000538f, -0.000115f, -0.000261f, - +0.004834f, -0.005884f, +0.011955f, +0.001970f, +0.003349f, -0.003127f, -0.000804f, -0.001522f, -0.005587f, -0.001177f, - -0.001602f, +0.000930f, -0.001087f, -0.001927f, +0.001576f, +0.000477f, +0.001486f, -0.000858f, +0.000588f, +0.000850f, - +0.002086f, +0.000527f, -0.001749f, -0.000072f, -0.001559f, -0.001391f, +0.000430f, -0.000434f, +0.000353f, -0.000674f, - -0.001027f, -0.001477f, -0.001277f, -0.000989f, +0.000360f, -0.000322f, -0.000909f, +0.000147f, +0.000058f, -0.000294f, - +0.001077f, -0.000679f, -0.001404f, -0.001031f, -0.000375f, -0.000176f, +0.000164f, -0.000652f, -0.000484f, +0.000065f, - -0.000170f, +0.000344f, -0.000132f, +0.000300f, +0.000176f, -0.000520f, -0.000432f, -0.000311f, +0.000230f, -0.000102f, - +0.000109f, -0.000116f, +0.000019f, +0.000295f, -0.000110f, +0.000019f, -0.000119f, -0.000163f, +0.000170f, +0.000202f, - +0.000054f, +0.000094f, -0.000106f, +0.000089f, +0.000125f, +0.000009f - }, - { - -0.009229f, -0.075174f, -0.010230f, +0.004897f, +0.003371f, +0.002754f, -0.002010f, -0.000023f, +0.001601f, +0.000718f, - +0.004941f, +0.000539f, -0.000449f, -0.011351f, -0.013371f, +0.002010f, -0.000024f, +0.003986f, +0.003436f, -0.000985f, - -0.000768f, +0.001651f, +0.000520f, -0.002339f, -0.001100f, -0.000913f, +0.002332f, +0.002216f, +0.002005f, -0.002338f, - +0.001002f, -0.001398f, +0.000586f, +0.002727f, -0.001833f, +0.001206f, +0.000115f, +0.002081f, +0.000424f, +0.000561f, - -0.000203f, +0.002456f, -0.000574f, -0.000303f, -0.000366f, -0.000859f, -0.000202f, -0.001274f, +0.000460f, +0.000563f, - +0.000583f, -0.000397f, +0.000466f, +0.000986f, +0.000500f, +0.000923f, -0.000182f, -0.000023f, -0.000542f, -0.000095f, - +0.000399f, -0.000452f, -0.000610f, -0.000011f, -0.000035f, +0.000108f, +0.000259f, -0.000053f, -0.000048f, +0.000181f, - +0.000307f, -0.000214f, -0.000231f, -0.000215f, -0.000059f, +0.000154f, -0.000043f, +0.000017f, +0.000129f, +0.000335f, - +0.000171f, +0.000036f, +0.000019f, +0.000223f, -0.000010f, +0.000203f, +0.000216f, -0.000037f, -0.000187f, -0.000061f, - +0.000036f, +0.000139f, +0.000063f, +0.000077f, +0.000106f, -0.000150f - }, - { - +0.000443f, -0.007169f, -0.003063f, +0.000430f, -0.002433f, +0.000532f, -0.000322f, -0.001327f, -0.002358f, -0.001941f, - -0.002785f, -0.001119f, +0.004188f, -0.028627f, -0.056429f, -0.003725f, +0.004667f, -0.001723f, -0.001632f, +0.013346f, - +0.004962f, -0.003426f, -0.000922f, -0.003926f, +0.001386f, -0.000656f, -0.003280f, +0.000221f, +0.001540f, +0.004931f, - -0.002651f, +0.001159f, +0.000366f, +0.000174f, -0.001636f, -0.000543f, -0.000899f, -0.000942f, +0.001587f, +0.001467f, - -0.000725f, -0.000222f, +0.000952f, -0.001092f, +0.000027f, +0.000495f, -0.000547f, +0.000172f, -0.001577f, -0.000361f, - -0.000190f, -0.000592f, -0.000480f, -0.000994f, -0.000005f, +0.000377f, -0.000081f, -0.000914f, -0.000161f, -0.000012f, - -0.000136f, -0.000456f, +0.000653f, -0.000037f, +0.000089f, +0.000078f, -0.000095f, +0.000359f, +0.000160f, +0.000092f, - -0.000146f, +0.000021f, -0.000121f, +0.000205f, +0.000013f, -0.000157f, -0.000113f, -0.000345f, -0.000180f, +0.000119f, - +0.000018f, +0.000105f, +0.000123f, +0.000103f, +0.000039f, +0.000070f, -0.000147f, -0.000053f, +0.000081f, -0.000106f, - -0.000101f, +0.000086f, +0.000021f, -0.000132f, -0.000165f, -0.000150f - } - }, - { - { - +0.021392f, +0.014473f, +0.037566f, -0.008558f, +0.001322f, +0.000248f, +0.000010f, -0.001830f, +0.001227f, -0.000610f, - +0.001753f, +0.001447f, +0.000888f, -0.001346f, -0.000940f, +0.000218f, -0.000182f, -0.003310f, +0.005138f, -0.003851f, - -0.000571f, +0.000979f, +0.000394f, -0.000496f, -0.000413f, -0.000663f, +0.002433f, -0.000941f, -0.000702f, +0.000430f, - +0.000766f, -0.001283f, +0.000691f, +0.000281f, +0.000027f, -0.001033f, +0.000350f, -0.000455f, -0.000272f, +0.000952f, - +0.000744f, -0.001105f, -0.000040f, -0.000598f, -0.001013f, +0.001299f, -0.000025f, +0.001024f, +0.000789f, -0.000487f, - -0.000391f, -0.000432f, +0.000178f, +0.000417f, +0.000182f, +0.000266f, -0.000146f, +0.000843f, +0.000273f, -0.000182f, - -0.000227f, -0.000334f, +0.000165f, +0.000163f, -0.000389f, +0.000920f, -0.000545f, +0.000343f, +0.000220f, +0.000078f, - +0.000028f, -0.000116f, -0.000022f, +0.000063f, -0.000130f, +0.000125f, +0.000147f, +0.000249f, -0.000188f, -0.000139f, - -0.000137f, +0.000037f, +0.000187f, +0.000073f, -0.000078f, +0.000031f, +0.000149f, -0.000003f, -0.000027f, -0.000020f, - -0.000007f, -0.000073f, -0.000019f, +0.000036f, +0.000026f, -0.000069f - }, - { - +0.003603f, -0.030156f, -0.003247f, +0.005645f, -0.000678f, +0.000475f, -0.000504f, -0.000114f, +0.000425f, -0.000748f, - +0.000360f, -0.000193f, -0.001881f, -0.003009f, +0.003464f, -0.004102f, -0.000791f, +0.000810f, +0.010399f, +0.003323f, - +0.001556f, -0.002736f, -0.000912f, -0.002481f, +0.000513f, +0.000388f, -0.002237f, +0.002043f, -0.001606f, -0.002151f, - -0.001233f, +0.001551f, +0.000730f, +0.001626f, +0.000975f, +0.001430f, +0.000451f, -0.001102f, -0.000185f, +0.000991f, - -0.001122f, +0.000192f, -0.000208f, +0.000902f, +0.000050f, +0.000321f, +0.000078f, +0.000572f, -0.000308f, -0.000156f, - +0.000507f, -0.000059f, +0.000015f, +0.000075f, -0.000025f, +0.000473f, +0.000172f, +0.000079f, -0.000367f, +0.000003f, - -0.000120f, -0.000213f, +0.000340f, +0.000195f, -0.000351f, -0.000099f, +0.000157f, +0.000174f, +0.000121f, -0.000035f, - -0.000081f, +0.000279f, +0.000403f, +0.000276f, -0.000274f, +0.000200f, +0.000234f, -0.000028f, -0.000161f, -0.000310f, - +0.000100f, +0.000127f, -0.000015f, -0.000094f, -0.000064f, -0.000164f, -0.000008f, +0.000097f, -0.000102f, +0.000085f, - +0.000088f, +0.000029f, -0.000150f, -0.000069f, -0.000022f, +0.000087f - }, - { - -0.010950f, +0.072074f, -0.005644f, -0.016836f, +0.005010f, +0.001976f, -0.000976f, -0.000083f, +0.000010f, +0.001504f, - -0.003067f, -0.002900f, -0.000257f, -0.000261f, +0.005467f, -0.003367f, +0.001296f, +0.000793f, -0.000640f, +0.004764f, - -0.001905f, +0.004135f, -0.002413f, -0.000014f, +0.000304f, -0.002852f, -0.001179f, +0.000810f, -0.000313f, +0.001454f, - -0.000373f, +0.000968f, -0.000317f, +0.000713f, +0.000946f, +0.000605f, +0.000465f, -0.000125f, -0.000778f, -0.000153f, - -0.000406f, +0.001017f, +0.000270f, -0.000170f, -0.000723f, -0.001008f, +0.000293f, -0.000896f, -0.000250f, +0.000469f, - +0.000056f, +0.000182f, -0.000352f, -0.000274f, -0.000003f, +0.000712f, -0.000557f, +0.000430f, -0.000398f, +0.000445f, - -0.000491f, -0.000604f, +0.000583f, +0.000423f, +0.000120f, -0.000468f, -0.000175f, +0.000095f, +0.000186f, +0.000069f, - -0.000040f, -0.000070f, -0.000460f, +0.000285f, +0.000184f, +0.000168f, +0.000034f, -0.000219f, +0.000122f, +0.000309f, - -0.000118f, +0.000039f, -0.000012f, -0.000115f, -0.000108f, -0.000166f, +0.000000f, +0.000110f, +0.000057f, -0.000020f, - +0.000161f, +0.000025f, +0.000053f, +0.000097f, +0.000015f, -0.000027f - }, - { - -0.027734f, +0.056632f, -0.000886f, +0.011828f, -0.000674f, +0.000564f, +0.000331f, -0.000290f, -0.000127f, +0.002318f, - +0.002062f, -0.001691f, +0.000713f, -0.000907f, +0.000835f, +0.000934f, -0.000520f, +0.004609f, -0.000507f, -0.000830f, - -0.001377f, +0.001250f, -0.000590f, +0.000723f, -0.000578f, -0.000664f, -0.002607f, +0.001625f, -0.000418f, -0.000569f, - -0.000227f, -0.000144f, -0.000756f, +0.000372f, -0.000183f, +0.000451f, -0.000757f, +0.000069f, -0.000029f, +0.000801f, - +0.000622f, +0.000544f, -0.000630f, -0.000547f, -0.000690f, -0.000185f, +0.001171f, -0.000452f, +0.001171f, +0.000072f, - -0.000884f, +0.000234f, +0.000088f, -0.000500f, -0.000293f, +0.000290f, +0.000222f, +0.000244f, +0.000036f, +0.000135f, - -0.000163f, -0.000616f, +0.000362f, -0.000178f, +0.000170f, -0.000177f, +0.000091f, -0.000052f, +0.000028f, +0.000144f, - +0.000144f, +0.000150f, +0.000220f, +0.000061f, -0.000090f, -0.000173f, -0.000009f, +0.000017f, +0.000068f, -0.000178f, - -0.000012f, -0.000103f, +0.000082f, -0.000100f, -0.000091f, -0.000032f, +0.000000f, +0.000067f, +0.000092f, -0.000143f, - -0.000030f, -0.000051f, +0.000051f, +0.000007f, -0.000022f, +0.000128f - }, - { - +0.001747f, -0.001200f, -0.001932f, +0.000100f, +0.000365f, -0.000155f, +0.000590f, -0.000031f, -0.000069f, +0.000628f, - +0.001192f, +0.000785f, -0.003291f, -0.000097f, +0.008043f, -0.000439f, +0.001851f, -0.018801f, +0.014391f, +0.000671f, - +0.004072f, -0.000135f, -0.002718f, +0.001401f, -0.001313f, -0.001851f, -0.001323f, +0.000153f, +0.000327f, -0.000117f, - +0.000904f, +0.001270f, -0.000630f, -0.001028f, -0.001862f, -0.001611f, -0.000133f, +0.000706f, -0.000168f, -0.000163f, - +0.001412f, -0.001314f, +0.000673f, +0.000397f, -0.000111f, -0.000793f, -0.001119f, -0.000656f, +0.000426f, -0.000141f, - +0.001063f, -0.000003f, -0.000702f, +0.000624f, -0.000130f, -0.000167f, -0.000101f, -0.000433f, -0.000063f, +0.000327f, - -0.000578f, -0.000010f, +0.000025f, +0.000303f, -0.000083f, -0.000264f, +0.000387f, -0.000241f, -0.000009f, +0.000070f, - +0.000136f, +0.000258f, -0.000088f, -0.000378f, -0.000075f, -0.000157f, +0.000154f, -0.000040f, -0.000072f, -0.000050f, - -0.000065f, -0.000045f, -0.000036f, -0.000168f, +0.000162f, +0.000006f, -0.000101f, +0.000102f, -0.000128f, +0.000040f, - +0.000030f, -0.000172f, -0.000007f, +0.000096f, -0.000027f, -0.000003f - }, - { - -0.053451f, +0.100571f, -0.006781f, -0.005689f, -0.000741f, +0.000738f, -0.000852f, -0.000359f, +0.000355f, -0.001312f, - -0.000532f, +0.000861f, +0.001424f, +0.001526f, -0.002101f, +0.001408f, -0.000155f, +0.000156f, -0.000607f, +0.000179f, - -0.000313f, -0.000145f, +0.002139f, -0.000251f, +0.000701f, -0.000652f, -0.000896f, +0.000640f, -0.001653f, -0.000646f, - +0.001914f, -0.000183f, +0.001001f, -0.003997f, +0.001666f, -0.000510f, +0.001794f, +0.000941f, +0.000775f, +0.000048f, - -0.001570f, -0.000284f, -0.000044f, -0.000374f, +0.001411f, +0.000623f, +0.001393f, -0.000609f, -0.000331f, +0.000255f, - -0.000111f, +0.000025f, -0.000484f, -0.000310f, +0.000702f, -0.000102f, +0.000002f, -0.000562f, +0.000587f, +0.000338f, - -0.000388f, +0.000084f, -0.000227f, +0.000062f, +0.000249f, +0.000035f, -0.000100f, +0.000138f, +0.000292f, -0.000052f, - +0.000112f, +0.000104f, -0.000137f, -0.000147f, +0.000253f, -0.000271f, +0.000124f, +0.000150f, +0.000159f, +0.000004f, - -0.000115f, +0.000209f, -0.000051f, +0.000002f, +0.000043f, -0.000118f, +0.000067f, -0.000039f, +0.000046f, +0.000015f, - -0.000131f, -0.000009f, +0.000092f, +0.000120f, +0.000013f, -0.000111f - }, - { - +0.000163f, +0.001363f, +0.000161f, +0.000094f, -0.000431f, -0.000256f, +0.000338f, -0.000294f, +0.000093f, +0.000002f, - -0.000696f, +0.000571f, +0.001498f, +0.000085f, +0.002310f, +0.003427f, -0.000773f, +0.000355f, -0.002797f, +0.001744f, - -0.001455f, -0.004811f, -0.002138f, +0.003379f, -0.000695f, +0.000848f, -0.001224f, +0.000212f, -0.002237f, -0.000960f, - +0.002552f, -0.000640f, +0.000100f, +0.001339f, +0.000474f, +0.001511f, -0.000068f, -0.000168f, +0.000148f, -0.000636f, - +0.000450f, +0.000666f, +0.000093f, -0.000857f, -0.000375f, +0.000521f, +0.000431f, +0.000317f, +0.000371f, +0.000045f, - +0.000511f, -0.000099f, +0.000118f, -0.000204f, +0.000135f, -0.000627f, +0.000265f, -0.000391f, -0.000361f, +0.000593f, - +0.000172f, +0.000855f, -0.000279f, +0.000200f, -0.000190f, +0.000507f, -0.000149f, -0.000192f, -0.000182f, +0.000373f, - +0.000169f, -0.000175f, -0.000130f, +0.000267f, -0.000236f, +0.000056f, +0.000040f, -0.000122f, -0.000077f, +0.000002f, - +0.000027f, +0.000057f, +0.000117f, -0.000018f, -0.000015f, -0.000055f, +0.000155f, +0.000088f, +0.000131f, +0.000030f, - +0.000099f, +0.000039f, -0.000038f, +0.000078f, +0.000043f, -0.000039f - }, - { - +0.026076f, -0.089216f, +0.005314f, +0.003242f, -0.000940f, -0.000149f, +0.000109f, -0.000945f, -0.000118f, -0.000080f, - -0.001079f, +0.000583f, +0.000522f, +0.000087f, +0.001723f, +0.001990f, -0.000612f, +0.001155f, -0.000584f, +0.000878f, - -0.000085f, -0.000504f, -0.002023f, +0.001201f, +0.001103f, +0.000868f, +0.000076f, +0.001244f, -0.000813f, -0.000790f, - -0.000943f, +0.000919f, -0.000126f, -0.000751f, -0.000053f, -0.002451f, -0.000747f, +0.000272f, +0.000030f, -0.000112f, - +0.000391f, -0.000633f, -0.000107f, +0.001220f, +0.000469f, -0.000149f, -0.000090f, +0.000895f, -0.001973f, -0.001614f, - +0.000419f, -0.000167f, +0.000479f, +0.000491f, -0.000479f, +0.000106f, -0.000224f, -0.000022f, +0.000508f, -0.000106f, - +0.000018f, -0.000389f, -0.000722f, +0.000241f, +0.000539f, -0.000476f, +0.000013f, -0.000113f, +0.000074f, +0.000268f, - -0.000002f, +0.000025f, +0.000157f, -0.000155f, -0.000055f, +0.000103f, -0.000032f, -0.000014f, +0.000226f, +0.000105f, - +0.000034f, +0.000116f, -0.000097f, +0.000065f, +0.000066f, -0.000010f, +0.000039f, -0.000043f, -0.000020f, -0.000036f, - +0.000055f, -0.000028f, -0.000055f, -0.000036f, +0.000016f, -0.000073f - }, - { - +0.000116f, -0.015679f, -0.001616f, +0.001362f, -0.000195f, +0.000458f, +0.000270f, +0.000083f, +0.000217f, -0.000039f, - -0.001003f, +0.002154f, +0.000156f, +0.005542f, +0.001387f, -0.000026f, +0.006504f, -0.003305f, -0.001971f, +0.005831f, - -0.001364f, -0.002181f, +0.001724f, +0.004062f, -0.001096f, -0.000155f, -0.004814f, +0.001341f, +0.000741f, -0.001338f, - -0.003412f, +0.000806f, +0.000830f, +0.001143f, +0.001009f, -0.000614f, +0.000955f, -0.002200f, -0.001073f, +0.000110f, - -0.000929f, +0.000113f, +0.000088f, -0.001023f, -0.000712f, +0.000611f, +0.000300f, +0.000699f, -0.001221f, +0.001033f, - -0.000060f, -0.000720f, +0.000411f, +0.000179f, -0.000075f, -0.000019f, -0.000184f, -0.000601f, +0.000312f, -0.000119f, - +0.000300f, +0.000597f, -0.000304f, +0.000171f, +0.000283f, +0.000231f, -0.000292f, -0.000062f, +0.000011f, -0.000124f, - +0.000106f, -0.000095f, -0.000118f, -0.000123f, -0.000123f, +0.000118f, +0.000149f, -0.000038f, +0.000083f, -0.000085f, - +0.000129f, +0.000113f, +0.000028f, +0.000005f, -0.000027f, +0.000078f, -0.000136f, +0.000011f, -0.000014f, -0.000123f, - +0.000038f, +0.000056f, -0.000000f, -0.000016f, -0.000060f, -0.000067f - }, - { - -0.011740f, -0.003104f, +0.004026f, +0.000190f, -0.001226f, -0.006375f, -0.004230f, +0.002543f, -0.003129f, -0.000831f, - +0.001805f, -0.003282f, +0.002238f, -0.000599f, -0.001056f, +0.002031f, -0.002926f, -0.000287f, -0.000389f, -0.000499f, - -0.002661f, +0.000987f, +0.000784f, -0.000052f, -0.001222f, +0.000113f, +0.000132f, -0.000170f, -0.001056f, +0.000109f, - -0.001438f, +0.000213f, +0.000372f, +0.000515f, -0.000587f, +0.001477f, -0.000853f, +0.000979f, +0.000337f, +0.000046f, - -0.001399f, -0.000249f, +0.001081f, -0.000024f, -0.000412f, -0.000648f, -0.000177f, +0.000291f, -0.000052f, -0.000851f, - +0.000488f, +0.000221f, -0.000692f, +0.000199f, +0.000457f, +0.000207f, +0.000206f, +0.000327f, -0.000093f, -0.000292f, - -0.000577f, +0.000024f, -0.000107f, +0.000366f, -0.000050f, -0.000416f, -0.000048f, +0.000029f, -0.000117f, +0.000228f, - -0.000263f, +0.000040f, -0.000216f, +0.000330f, -0.000099f, -0.000022f, -0.000053f, +0.000234f, +0.000041f, +0.000243f, - +0.000075f, +0.000115f, -0.000131f, -0.000131f, -0.000100f, -0.000145f, +0.000006f, +0.000058f, -0.000154f, -0.000031f, - +0.000031f, +0.000103f, +0.000038f, -0.000051f, -0.000059f, -0.000073f - }, - { - +0.001206f, -0.002932f, -0.001727f, +0.009838f, -0.000629f, -0.000823f, -0.000516f, -0.000343f, +0.000692f, -0.001125f, - +0.000702f, +0.002723f, -0.001297f, +0.001679f, -0.004655f, +0.003881f, +0.000713f, -0.008338f, -0.000985f, +0.005730f, - -0.000377f, -0.003052f, +0.002664f, -0.000783f, -0.001005f, +0.000730f, +0.000241f, -0.000011f, +0.000365f, +0.000395f, - -0.000632f, -0.000154f, -0.001576f, +0.000163f, -0.000577f, -0.000046f, +0.001389f, +0.000183f, +0.000434f, +0.000636f, - -0.001042f, +0.000116f, -0.000335f, -0.000422f, +0.000367f, -0.000810f, +0.001119f, +0.000146f, -0.000782f, +0.000138f, - +0.000273f, +0.000118f, +0.000022f, +0.000781f, +0.000527f, -0.000243f, -0.000310f, +0.000018f, -0.000074f, -0.000067f, - -0.000682f, +0.000020f, +0.000516f, -0.000093f, +0.000139f, -0.000013f, -0.000245f, -0.000206f, +0.000182f, -0.000147f, - -0.000002f, -0.000119f, -0.000204f, -0.000035f, -0.000115f, +0.000156f, +0.000099f, +0.000148f, -0.000043f, -0.000028f, - -0.000001f, -0.000063f, -0.000183f, +0.000085f, +0.000113f, -0.000063f, +0.000067f, +0.000077f, +0.000033f, +0.000004f, - +0.000037f, +0.000021f, -0.000001f, -0.000037f, -0.000023f, +0.000031f - }, - { - +0.010818f, +0.005912f, +0.001253f, +0.000606f, -0.004722f, +0.004512f, -0.001755f, -0.000424f, +0.000008f, +0.001054f, - +0.002402f, -0.001511f, +0.001703f, +0.002639f, -0.002320f, -0.000002f, -0.000956f, -0.001496f, -0.000066f, +0.000906f, - -0.000774f, -0.000909f, -0.000514f, -0.000916f, +0.000931f, -0.000194f, -0.000133f, +0.001025f, -0.000372f, +0.000457f, - +0.001091f, -0.000218f, -0.000576f, -0.000602f, +0.000850f, +0.001296f, +0.000571f, +0.000796f, -0.000626f, +0.000787f, - -0.000393f, +0.001164f, -0.001332f, +0.002581f, -0.000028f, -0.000043f, +0.000944f, -0.000157f, -0.000080f, +0.000179f, - +0.000022f, +0.000888f, -0.000284f, +0.000369f, -0.000130f, +0.000223f, -0.000140f, -0.000399f, +0.000268f, -0.000146f, - +0.000037f, +0.000513f, +0.000073f, -0.000124f, +0.000097f, +0.000025f, -0.000021f, +0.000319f, +0.000196f, -0.000453f, - +0.000165f, +0.000137f, -0.000071f, -0.000177f, -0.000066f, +0.000167f, -0.000071f, +0.000094f, -0.000062f, -0.000166f, - +0.000033f, -0.000113f, -0.000060f, -0.000123f, -0.000052f, +0.000109f, +0.000102f, -0.000081f, -0.000003f, -0.000080f, - -0.000001f, -0.000050f, -0.000004f, +0.000072f, -0.000072f, -0.000048f - }, - { - +0.000385f, -0.006916f, +0.002131f, -0.002909f, -0.001433f, +0.000185f, -0.000801f, -0.000210f, -0.000131f, +0.001167f, - -0.001028f, +0.003444f, +0.002882f, -0.027444f, -0.000081f, -0.000551f, +0.000570f, +0.001810f, +0.001712f, -0.000996f, - +0.001154f, -0.011650f, +0.005267f, +0.000946f, +0.006251f, -0.002735f, -0.001223f, +0.000136f, -0.001445f, -0.000355f, - +0.000809f, +0.000905f, +0.000446f, -0.001067f, +0.001190f, +0.000422f, +0.000920f, -0.000572f, -0.000244f, +0.000253f, - +0.000733f, +0.000361f, -0.000475f, +0.001579f, -0.000135f, -0.000642f, +0.000334f, -0.000781f, +0.000357f, -0.000696f, - -0.001175f, -0.000155f, +0.000230f, +0.000095f, +0.000622f, -0.000165f, -0.000152f, +0.000570f, -0.000069f, -0.000136f, - +0.000732f, -0.000371f, -0.000415f, -0.000234f, +0.000187f, -0.000045f, +0.000297f, +0.000075f, -0.000185f, +0.000293f, - -0.000030f, +0.000272f, -0.000437f, +0.000213f, +0.000136f, -0.000365f, -0.000126f, -0.000157f, +0.000361f, -0.000042f, - +0.000200f, +0.000039f, +0.000065f, +0.000123f, -0.000189f, +0.000149f, -0.000118f, +0.000059f, -0.000066f, +0.000043f, - -0.000010f, -0.000044f, -0.000139f, +0.000161f, -0.000084f, -0.000073f - }, - { - +0.013864f, -0.028435f, -0.000708f, -0.001612f, -0.000363f, -0.002399f, -0.001820f, -0.001344f, +0.001275f, +0.001576f, - +0.001236f, +0.000414f, +0.001757f, +0.002719f, +0.009743f, +0.005087f, -0.005617f, +0.001076f, +0.001632f, -0.003209f, - -0.000416f, +0.000405f, +0.000516f, -0.001619f, +0.000939f, -0.001785f, -0.000025f, -0.001052f, +0.000403f, -0.001289f, - +0.000786f, -0.000002f, +0.000026f, +0.001305f, -0.002573f, +0.001465f, -0.000920f, +0.000501f, -0.000015f, +0.000792f, - +0.000860f, +0.001295f, -0.000939f, +0.000434f, +0.000447f, -0.000413f, +0.000396f, -0.000658f, +0.000507f, +0.000006f, - +0.001344f, +0.000018f, -0.000335f, +0.000492f, +0.000259f, +0.000357f, +0.000128f, -0.000082f, -0.000295f, -0.000566f, - +0.000505f, -0.000161f, -0.000114f, +0.000252f, -0.000179f, +0.000051f, +0.000285f, -0.000026f, -0.000140f, +0.000083f, - +0.000199f, +0.000098f, -0.000006f, +0.000013f, -0.000150f, +0.000293f, -0.000101f, -0.000017f, +0.000072f, +0.000133f, - -0.000106f, +0.000033f, +0.000187f, +0.000010f, -0.000064f, +0.000050f, -0.000140f, -0.000070f, +0.000015f, -0.000090f, - +0.000034f, +0.000078f, -0.000055f, +0.000019f, -0.000018f, -0.000116f - }, - { - -0.000659f, -0.004449f, -0.000690f, +0.001866f, -0.001132f, +0.000697f, +0.000095f, -0.000064f, +0.000030f, +0.001794f, - -0.000221f, -0.000286f, +0.001166f, +0.010072f, +0.014230f, +0.007375f, +0.002461f, +0.001143f, +0.001573f, +0.009610f, - -0.001672f, -0.002807f, +0.001807f, -0.003051f, +0.000492f, -0.000327f, -0.000438f, +0.001375f, -0.000082f, +0.001735f, - -0.002519f, +0.001257f, -0.000490f, +0.000436f, -0.000363f, -0.001534f, -0.000292f, -0.000644f, -0.000593f, +0.000867f, - -0.001526f, -0.000569f, -0.000102f, -0.000096f, +0.000469f, +0.000785f, -0.000477f, +0.000870f, -0.000593f, -0.000338f, - +0.000611f, -0.000130f, -0.000112f, +0.000109f, +0.000037f, +0.000381f, -0.000128f, -0.000334f, -0.000030f, +0.000060f, - +0.000349f, -0.000090f, +0.000118f, -0.000343f, +0.000336f, +0.000358f, +0.000269f, -0.000002f, -0.000040f, +0.000301f, - +0.000227f, +0.000088f, -0.000081f, +0.000130f, -0.000089f, +0.000318f, +0.000022f, -0.000125f, -0.000069f, +0.000137f, - +0.000076f, +0.000043f, +0.000037f, -0.000157f, -0.000109f, -0.000032f, -0.000096f, -0.000103f, +0.000087f, +0.000004f, - -0.000041f, +0.000098f, -0.000035f, -0.000134f, +0.000055f, -0.000018f - } - }, - { - { - -0.017767f, +0.114503f, +0.000172f, -0.001411f, +0.002357f, -0.000796f, +0.000302f, +0.001854f, -0.000840f, +0.000633f, - +0.001971f, +0.000528f, +0.000165f, +0.000446f, -0.000781f, -0.001368f, -0.000189f, -0.000714f, +0.001762f, -0.000719f, - -0.001052f, +0.000099f, -0.000023f, -0.001281f, -0.000773f, -0.000878f, +0.001102f, -0.000255f, -0.001099f, +0.000929f, - -0.000940f, -0.000982f, +0.000536f, +0.000955f, -0.000416f, -0.000457f, -0.000065f, +0.000193f, +0.000244f, +0.001221f, - +0.000060f, -0.000169f, +0.000030f, -0.000933f, -0.000223f, +0.000340f, +0.000437f, +0.000436f, -0.000399f, +0.000096f, - +0.000222f, +0.000136f, -0.000376f, +0.000076f, -0.000262f, +0.000469f, -0.000042f, -0.000092f, -0.000214f, -0.000210f, - +0.000305f, -0.000249f, -0.000198f, -0.000220f, -0.000041f, +0.000227f, +0.000053f, +0.000147f, -0.000098f, -0.000017f, - -0.000006f, -0.000127f, +0.000103f, +0.000022f, -0.000149f, -0.000097f, +0.000123f, +0.000192f, -0.000085f, +0.000193f, - +0.000092f, +0.000096f, +0.000005f, +0.000149f, +0.000009f, -0.000023f, +0.000128f, +0.000049f, +0.000076f, +0.000035f, - -0.000020f, -0.000095f, -0.000011f, -0.000017f, -0.000021f, -0.000024f - }, - { - -0.001419f, -0.028599f, +0.008311f, +0.004160f, +0.002975f, -0.000239f, -0.000562f, +0.000960f, +0.000007f, +0.000482f, - -0.000487f, +0.000073f, -0.002025f, -0.001800f, -0.000599f, -0.002104f, -0.001021f, -0.001212f, +0.004581f, +0.006008f, - -0.001865f, -0.001498f, -0.000885f, -0.001632f, -0.003939f, +0.002625f, -0.000232f, +0.001749f, -0.001740f, -0.001626f, - -0.001065f, +0.000314f, +0.002580f, +0.001919f, +0.000557f, +0.001019f, -0.001101f, +0.000599f, -0.000194f, +0.000474f, - -0.000650f, +0.000473f, +0.000510f, +0.000526f, +0.000215f, +0.000332f, +0.000549f, +0.000530f, -0.000054f, +0.000528f, - -0.000123f, +0.000158f, +0.000006f, +0.000738f, -0.000077f, -0.000473f, -0.000086f, -0.000040f, +0.000075f, -0.000071f, - -0.000047f, +0.000317f, +0.000155f, +0.000184f, -0.000021f, -0.000061f, -0.000093f, +0.000540f, +0.000063f, -0.000213f, - +0.000122f, +0.000412f, -0.000029f, +0.000117f, +0.000169f, +0.000245f, -0.000051f, -0.000119f, -0.000085f, -0.000067f, - +0.000021f, -0.000070f, -0.000075f, -0.000027f, -0.000019f, +0.000046f, +0.000057f, -0.000005f, +0.000049f, +0.000046f, - -0.000077f, +0.000022f, -0.000011f, +0.000094f, -0.000003f, -0.000020f - }, - { - +0.005992f, +0.058243f, -0.016926f, +0.000211f, -0.000842f, +0.001801f, +0.000111f, -0.000792f, -0.000185f, -0.000780f, - -0.002288f, +0.000428f, -0.001499f, +0.001925f, +0.003509f, -0.000334f, -0.000922f, +0.000006f, +0.005808f, -0.001235f, - +0.001382f, +0.002074f, -0.002028f, -0.000973f, +0.000811f, -0.002108f, -0.000555f, +0.000912f, +0.000479f, +0.001896f, - -0.000823f, -0.001781f, +0.002532f, +0.000905f, +0.000059f, +0.000302f, +0.001317f, -0.000420f, -0.001109f, -0.001001f, - +0.000602f, -0.000048f, -0.000115f, +0.000263f, -0.000416f, -0.000247f, +0.000030f, -0.000216f, -0.000072f, +0.000409f, - -0.000717f, +0.000962f, -0.000421f, +0.000342f, +0.000375f, -0.000080f, +0.000086f, +0.000200f, -0.000273f, -0.000335f, - -0.000040f, +0.000053f, +0.000517f, +0.000237f, -0.000146f, +0.000040f, +0.000010f, -0.000036f, +0.000130f, +0.000085f, - +0.000154f, -0.000135f, +0.000018f, +0.000069f, +0.000106f, +0.000002f, -0.000004f, -0.000122f, +0.000239f, +0.000068f, - -0.000033f, +0.000090f, -0.000038f, -0.000173f, -0.000044f, +0.000083f, +0.000005f, -0.000013f, +0.000014f, +0.000087f, - -0.000023f, -0.000052f, -0.000027f, +0.000042f, -0.000051f, +0.000033f - }, - { - +0.020302f, -0.021038f, +0.003148f, +0.009244f, +0.000803f, +0.000800f, +0.000782f, -0.000454f, +0.000655f, +0.001461f, - +0.000281f, -0.001849f, +0.002492f, -0.001423f, +0.000437f, -0.000192f, +0.001571f, +0.001024f, -0.001567f, -0.000957f, - -0.000691f, +0.000300f, +0.000144f, +0.000013f, -0.001330f, -0.001450f, -0.001920f, +0.000858f, -0.000108f, +0.001192f, - +0.000075f, -0.001251f, +0.000549f, +0.000018f, -0.000310f, +0.000636f, -0.000563f, +0.000179f, -0.000229f, +0.000322f, - +0.000398f, +0.000115f, +0.000282f, -0.000412f, -0.001179f, +0.000771f, +0.000678f, +0.000247f, +0.000367f, -0.000543f, - -0.000144f, +0.000312f, -0.000319f, +0.000028f, +0.000120f, +0.000118f, +0.000379f, -0.000057f, +0.000204f, -0.000263f, - +0.000195f, -0.000054f, +0.000019f, -0.000035f, +0.000371f, -0.000050f, +0.000060f, +0.000134f, -0.000113f, +0.000231f, - +0.000055f, -0.000025f, +0.000025f, +0.000007f, +0.000103f, -0.000171f, +0.000128f, -0.000097f, -0.000026f, +0.000008f, - +0.000062f, -0.000064f, -0.000019f, -0.000114f, -0.000099f, -0.000093f, -0.000026f, +0.000067f, -0.000079f, -0.000058f, - +0.000046f, +0.000041f, -0.000064f, +0.000080f, +0.000022f, +0.000049f - }, - { - -0.001258f, -0.000373f, -0.001097f, +0.000553f, +0.000610f, -0.000512f, +0.000078f, +0.001638f, -0.000966f, +0.000427f, - +0.002022f, -0.000351f, -0.000158f, +0.003435f, +0.003268f, -0.005500f, -0.007905f, +0.006284f, +0.001496f, +0.002694f, - -0.000594f, +0.000866f, +0.002303f, -0.002697f, -0.004386f, -0.001160f, +0.000063f, +0.001668f, -0.001909f, +0.001322f, - +0.000363f, +0.001045f, -0.001732f, +0.000485f, -0.001241f, -0.000665f, -0.000725f, +0.000027f, -0.000586f, +0.000526f, - +0.000234f, +0.000095f, +0.000547f, +0.001173f, -0.000769f, -0.000263f, -0.000557f, -0.000516f, +0.000725f, +0.000542f, - +0.000382f, +0.000134f, -0.000619f, +0.000697f, -0.000090f, -0.000281f, -0.000367f, +0.000122f, +0.000031f, +0.000174f, - -0.000332f, -0.000261f, -0.000166f, +0.000255f, +0.000604f, +0.000199f, +0.000068f, -0.000328f, +0.000038f, +0.000134f, - +0.000167f, +0.000004f, -0.000209f, -0.000259f, -0.000061f, -0.000215f, +0.000151f, +0.000046f, +0.000126f, +0.000042f, - -0.000013f, -0.000038f, -0.000205f, -0.000040f, +0.000052f, -0.000000f, +0.000033f, -0.000071f, -0.000025f, +0.000048f, - +0.000017f, -0.000028f, -0.000017f, +0.000043f, -0.000025f, +0.000015f - }, - { - +0.037094f, -0.046989f, +0.002505f, -0.004275f, -0.000985f, -0.000447f, +0.000290f, +0.000549f, -0.001580f, +0.000202f, - +0.002156f, +0.000339f, +0.001245f, -0.001018f, -0.000334f, +0.000581f, +0.000516f, -0.000088f, -0.000398f, +0.001028f, - +0.000493f, +0.000119f, +0.000955f, -0.000256f, -0.000271f, +0.000524f, -0.001471f, +0.000996f, -0.001460f, +0.000025f, - +0.000375f, +0.000186f, -0.001105f, -0.000913f, -0.001502f, +0.000708f, +0.001276f, +0.001314f, -0.000050f, +0.000173f, - -0.000022f, -0.000204f, -0.000881f, +0.000560f, +0.001500f, +0.001173f, +0.000085f, -0.000011f, -0.000344f, +0.000533f, - -0.000655f, -0.000097f, -0.000257f, +0.000102f, +0.000532f, -0.000188f, +0.000352f, +0.000302f, +0.000030f, -0.000089f, - -0.000290f, -0.000130f, +0.000423f, +0.000274f, +0.000208f, -0.000235f, +0.000055f, +0.000299f, +0.000066f, +0.000305f, - +0.000028f, +0.000242f, -0.000082f, -0.000123f, +0.000101f, -0.000184f, +0.000380f, -0.000008f, +0.000013f, -0.000030f, - -0.000099f, +0.000020f, -0.000241f, -0.000067f, +0.000060f, +0.000056f, +0.000049f, +0.000059f, -0.000025f, -0.000056f, - -0.000022f, +0.000075f, +0.000065f, +0.000013f, -0.000042f, -0.000050f - }, - { - -0.000935f, +0.001793f, +0.002666f, -0.001217f, -0.000224f, -0.000122f, +0.000252f, +0.000214f, +0.000210f, -0.000531f, - +0.000042f, +0.000059f, +0.002406f, -0.003765f, -0.001110f, +0.001408f, -0.002439f, +0.000869f, -0.001163f, -0.004679f, - -0.001844f, -0.002210f, -0.001723f, -0.001102f, +0.000794f, +0.000666f, -0.003678f, +0.001172f, -0.001809f, -0.000703f, - +0.000995f, -0.000205f, -0.000676f, +0.001991f, +0.000828f, +0.001197f, -0.000002f, -0.001035f, -0.000267f, +0.000554f, - +0.000672f, -0.000516f, +0.000183f, -0.000650f, -0.000097f, +0.000517f, +0.000803f, +0.000462f, +0.000166f, +0.000186f, - -0.000039f, +0.000138f, +0.000179f, -0.000300f, -0.000200f, -0.000196f, +0.000061f, -0.000254f, -0.000415f, +0.000133f, - +0.000262f, +0.000337f, -0.000353f, -0.000006f, +0.000155f, +0.000239f, -0.000022f, +0.000307f, -0.000037f, -0.000100f, - -0.000136f, +0.000088f, +0.000217f, +0.000069f, -0.000024f, +0.000203f, +0.000051f, +0.000164f, -0.000041f, +0.000066f, - +0.000036f, +0.000118f, +0.000004f, -0.000034f, +0.000019f, +0.000028f, +0.000052f, -0.000042f, +0.000093f, -0.000015f, - -0.000053f, -0.000063f, +0.000026f, +0.000096f, -0.000025f, -0.000051f - }, - { - -0.021797f, -0.019020f, -0.004493f, +0.002305f, -0.000865f, +0.000090f, +0.000439f, -0.001770f, -0.000309f, +0.000179f, - -0.000484f, +0.000066f, +0.000022f, +0.002083f, +0.001043f, +0.002079f, -0.000115f, +0.000203f, -0.000446f, +0.000431f, - +0.000587f, -0.000965f, -0.000374f, +0.000738f, -0.000593f, +0.001541f, +0.001330f, +0.000366f, +0.000415f, -0.001347f, - +0.000001f, -0.000942f, -0.000196f, +0.000513f, +0.000553f, -0.000713f, -0.000039f, +0.000285f, -0.000595f, -0.000078f, - +0.000222f, -0.000097f, +0.000086f, -0.000095f, -0.000053f, +0.001611f, -0.000916f, -0.000869f, -0.001307f, -0.000581f, - +0.000403f, +0.000253f, -0.000169f, -0.000394f, +0.000354f, -0.000147f, +0.000027f, -0.000018f, +0.000361f, -0.000011f, - -0.000065f, -0.000370f, +0.000000f, -0.000037f, -0.000204f, +0.000001f, -0.000082f, -0.000213f, +0.000185f, +0.000025f, - +0.000109f, +0.000039f, -0.000095f, +0.000082f, +0.000104f, -0.000101f, -0.000015f, +0.000261f, +0.000015f, +0.000039f, - +0.000046f, +0.000054f, -0.000144f, +0.000021f, +0.000035f, -0.000039f, +0.000076f, +0.000153f, -0.000007f, -0.000034f, - -0.000008f, -0.000092f, -0.000012f, +0.000084f, +0.000044f, -0.000045f - }, - { - -0.001700f, -0.005506f, +0.001119f, -0.001448f, +0.000571f, +0.000040f, -0.000468f, +0.000773f, +0.000660f, +0.000306f, - -0.000050f, +0.000190f, -0.000249f, -0.000687f, +0.011405f, -0.002881f, +0.001330f, +0.001623f, -0.000982f, +0.002069f, - +0.000772f, -0.003432f, +0.003138f, +0.002261f, +0.002301f, -0.004208f, -0.000409f, +0.000213f, -0.002118f, +0.000203f, - -0.001991f, +0.000362f, +0.001185f, -0.000137f, +0.001451f, +0.000353f, -0.000205f, -0.001276f, +0.000117f, -0.001201f, - +0.000764f, +0.000170f, -0.000077f, +0.000589f, +0.000093f, +0.000143f, +0.000894f, -0.000029f, +0.000122f, -0.000191f, - -0.000549f, -0.000504f, -0.000036f, +0.000205f, +0.000361f, -0.000192f, +0.000305f, +0.000003f, +0.000287f, -0.000256f, - -0.000106f, +0.000071f, +0.000352f, -0.000352f, -0.000316f, -0.000037f, -0.000250f, -0.000178f, -0.000022f, +0.000004f, - -0.000137f, -0.000339f, -0.000066f, -0.000153f, +0.000293f, +0.000034f, +0.000059f, +0.000083f, -0.000014f, -0.000009f, - -0.000010f, +0.000021f, -0.000178f, -0.000007f, +0.000088f, +0.000075f, +0.000010f, +0.000209f, +0.000036f, -0.000133f, - -0.000004f, +0.000090f, -0.000028f, +0.000051f, -0.000044f, +0.000026f - }, - { - +0.006524f, -0.031766f, +0.009426f, -0.000506f, -0.001691f, -0.002554f, -0.008350f, -0.000858f, -0.000975f, -0.001361f, - +0.002340f, -0.000183f, +0.000812f, -0.000226f, +0.000486f, +0.000204f, -0.003306f, +0.001908f, -0.000872f, -0.002753f, - -0.000302f, +0.000675f, +0.000878f, -0.001192f, +0.000173f, -0.001064f, +0.000093f, -0.000713f, +0.000683f, -0.001504f, - -0.000472f, -0.000862f, -0.000534f, +0.001747f, +0.000856f, -0.000222f, +0.000461f, -0.000336f, +0.000492f, -0.000548f, - +0.000117f, +0.000070f, +0.001105f, -0.000217f, -0.000287f, +0.000730f, +0.000335f, -0.000164f, +0.000164f, +0.000857f, - +0.000004f, +0.000009f, +0.000337f, -0.000173f, -0.000186f, +0.000364f, +0.000341f, +0.000122f, -0.000141f, -0.000264f, - -0.000817f, -0.000162f, +0.000168f, +0.000273f, +0.000048f, -0.000405f, -0.000086f, -0.000070f, -0.000097f, +0.000278f, - +0.000073f, -0.000239f, -0.000143f, +0.000295f, -0.000063f, +0.000036f, -0.000050f, +0.000114f, +0.000110f, +0.000045f, - -0.000050f, +0.000036f, +0.000018f, -0.000024f, -0.000109f, +0.000114f, +0.000111f, +0.000070f, +0.000030f, -0.000023f, - +0.000039f, +0.000068f, -0.000052f, -0.000077f, -0.000018f, +0.000079f - }, - { - -0.000661f, -0.002606f, +0.005450f, +0.003135f, +0.000174f, +0.000413f, -0.002174f, -0.000426f, +0.000112f, +0.001382f, - -0.000064f, +0.000920f, -0.001054f, -0.001859f, +0.000217f, -0.000662f, -0.001415f, -0.004177f, +0.000885f, +0.004929f, - -0.004132f, -0.000941f, +0.000276f, -0.000717f, +0.000338f, +0.000802f, +0.001001f, +0.000224f, +0.000936f, -0.001037f, - -0.000580f, -0.001389f, -0.000778f, -0.001304f, +0.001778f, +0.001051f, -0.000749f, +0.000546f, +0.000113f, -0.000092f, - -0.000270f, -0.000372f, +0.000349f, +0.000744f, -0.000384f, -0.000203f, +0.000622f, -0.000074f, -0.000055f, -0.000165f, - +0.000535f, +0.000064f, +0.000100f, -0.000241f, +0.000039f, +0.000115f, -0.000072f, -0.000224f, +0.000258f, -0.000296f, - -0.000272f, +0.000156f, +0.000017f, -0.000065f, +0.000065f, +0.000310f, -0.000093f, +0.000055f, +0.000213f, -0.000152f, - +0.000018f, -0.000074f, -0.000152f, -0.000085f, +0.000101f, +0.000057f, -0.000184f, -0.000183f, -0.000081f, +0.000098f, - -0.000036f, +0.000011f, -0.000035f, -0.000027f, -0.000107f, -0.000099f, +0.000098f, +0.000086f, -0.000105f, -0.000123f, - +0.000082f, +0.000034f, -0.000049f, +0.000014f, +0.000017f, +0.000021f - }, - { - -0.002172f, +0.026331f, -0.001851f, -0.000637f, +0.000153f, -0.000628f, +0.000228f, -0.000610f, +0.000862f, +0.000535f, - -0.000553f, -0.002486f, -0.000221f, +0.003144f, -0.000844f, +0.000817f, -0.002913f, -0.001882f, -0.000007f, +0.000603f, - -0.001186f, +0.000536f, -0.000229f, -0.000219f, -0.001175f, +0.000970f, -0.000271f, +0.002098f, -0.000410f, +0.000167f, - -0.000251f, +0.000612f, -0.000883f, -0.001122f, +0.000870f, +0.000434f, -0.000413f, -0.000721f, -0.000757f, +0.001067f, - +0.000453f, -0.000257f, +0.001367f, +0.001055f, +0.000324f, -0.000237f, +0.000654f, -0.000005f, -0.000229f, +0.000171f, - +0.000644f, +0.000523f, +0.000292f, +0.000258f, +0.000187f, -0.000085f, -0.000089f, -0.000435f, +0.000326f, -0.000507f, - +0.000434f, -0.000050f, +0.000215f, +0.000020f, +0.000292f, -0.000315f, -0.000071f, +0.000016f, +0.000045f, -0.000078f, - +0.000207f, -0.000088f, -0.000068f, +0.000039f, -0.000037f, +0.000108f, -0.000064f, +0.000027f, -0.000177f, -0.000133f, - -0.000070f, +0.000069f, -0.000003f, -0.000018f, -0.000058f, +0.000133f, -0.000060f, +0.000012f, -0.000022f, -0.000000f, - +0.000082f, +0.000015f, +0.000114f, -0.000051f, -0.000037f, +0.000036f - }, - { - +0.000136f, -0.006038f, +0.001279f, -0.002179f, +0.000699f, -0.000250f, +0.000645f, -0.000813f, +0.000305f, -0.001268f, - +0.000618f, +0.004187f, -0.008717f, -0.008885f, +0.000409f, +0.001679f, -0.001096f, +0.004166f, +0.000316f, -0.000342f, - -0.007748f, +0.000960f, +0.001697f, +0.000603f, +0.005007f, +0.000904f, -0.003567f, +0.001832f, -0.001214f, +0.001499f, - -0.001095f, +0.001854f, -0.000562f, -0.000745f, +0.000482f, -0.000727f, +0.000610f, +0.000168f, +0.000091f, +0.000346f, - +0.000475f, +0.000558f, +0.000326f, +0.000610f, -0.000388f, +0.000194f, +0.000704f, +0.000244f, -0.000884f, -0.000353f, - -0.000426f, +0.000250f, +0.000452f, +0.000179f, +0.000694f, +0.000192f, +0.000095f, +0.000273f, -0.000142f, -0.000191f, - -0.000314f, -0.000085f, +0.000259f, +0.000086f, +0.000059f, +0.000137f, -0.000015f, +0.000112f, -0.000071f, +0.000134f, - +0.000079f, -0.000025f, +0.000040f, -0.000077f, +0.000107f, -0.000022f, +0.000134f, -0.000120f, +0.000040f, +0.000186f, - -0.000021f, -0.000106f, +0.000007f, -0.000131f, -0.000136f, +0.000043f, +0.000042f, +0.000138f, -0.000119f, -0.000030f, - -0.000117f, +0.000044f, +0.000119f, +0.000101f, -0.000122f, +0.000023f - }, - { - -0.009896f, +0.006933f, +0.001776f, -0.009048f, -0.000352f, -0.002900f, -0.004723f, +0.000691f, -0.000884f, +0.002288f, - -0.000400f, +0.001424f, +0.000755f, +0.003515f, +0.012136f, +0.000231f, -0.002693f, +0.000225f, -0.001154f, -0.001219f, - -0.000364f, +0.000396f, +0.000688f, +0.000816f, +0.001116f, -0.001244f, +0.000000f, -0.000159f, -0.000623f, -0.000354f, - -0.000368f, +0.000927f, -0.000861f, -0.001109f, +0.000090f, -0.000402f, -0.000693f, -0.000460f, -0.000634f, +0.000723f, - +0.001754f, +0.000448f, +0.000318f, -0.000257f, -0.000033f, -0.000484f, -0.000578f, +0.000217f, -0.000203f, +0.000642f, - +0.000906f, +0.000442f, -0.000172f, -0.000033f, -0.000111f, -0.000148f, +0.000006f, -0.000059f, -0.000043f, -0.000223f, - -0.000051f, -0.000051f, +0.000177f, -0.000303f, -0.000412f, -0.000076f, -0.000065f, +0.000004f, +0.000134f, -0.000033f, - +0.000059f, +0.000072f, -0.000037f, +0.000201f, -0.000183f, -0.000055f, -0.000073f, +0.000094f, -0.000055f, -0.000143f, - -0.000152f, -0.000052f, +0.000010f, -0.000148f, +0.000069f, -0.000136f, -0.000108f, +0.000110f, +0.000062f, -0.000130f, - +0.000051f, +0.000054f, -0.000082f, -0.000041f, -0.000037f, +0.000004f - }, - { - +0.000883f, -0.006375f, -0.000483f, +0.001895f, -0.000356f, +0.000053f, -0.000420f, -0.000065f, +0.000085f, +0.002214f, - -0.000757f, +0.001649f, -0.002233f, +0.016884f, +0.019388f, +0.005387f, +0.001507f, -0.000335f, +0.004574f, +0.001622f, - -0.001167f, +0.001350f, +0.000309f, -0.002454f, -0.000416f, +0.001787f, -0.001005f, +0.000102f, +0.000141f, -0.000419f, - -0.000458f, +0.000050f, +0.000325f, +0.000136f, +0.000511f, -0.001030f, -0.000123f, -0.000027f, -0.001109f, +0.000130f, - -0.000011f, +0.000424f, -0.000264f, +0.000014f, +0.000295f, +0.000478f, -0.000361f, -0.000203f, +0.000449f, +0.000172f, - +0.000115f, +0.000412f, +0.000482f, +0.000032f, -0.000062f, +0.000424f, -0.000187f, +0.000277f, +0.000106f, +0.000506f, - +0.000618f, -0.000048f, -0.000436f, +0.000042f, +0.000516f, +0.000264f, +0.000009f, -0.000209f, +0.000186f, +0.000210f, - +0.000188f, +0.000043f, +0.000258f, +0.000023f, +0.000024f, +0.000333f, -0.000050f, +0.000042f, +0.000012f, +0.000217f, - -0.000095f, -0.000066f, -0.000173f, -0.000121f, +0.000054f, -0.000173f, +0.000055f, -0.000101f, -0.000060f, +0.000056f, - +0.000015f, +0.000014f, -0.000058f, +0.000008f, +0.000032f, -0.000061f - } - }, - { - { - +0.009236f, +0.110738f, -0.049293f, +0.000469f, +0.007619f, -0.000835f, +0.000197f, +0.003063f, -0.000387f, +0.000444f, - +0.000636f, +0.000211f, +0.000405f, -0.000830f, -0.001662f, -0.002099f, +0.000007f, +0.000599f, +0.000368f, +0.000452f, - -0.000987f, -0.001452f, -0.001758f, +0.000366f, -0.000002f, -0.001283f, +0.000904f, -0.000132f, -0.001010f, +0.001420f, - -0.001234f, -0.000906f, +0.000340f, +0.000858f, -0.000406f, -0.000582f, -0.000630f, +0.000641f, -0.000119f, +0.000957f, - +0.000370f, +0.000789f, +0.000755f, -0.000659f, +0.000235f, -0.000102f, +0.000722f, -0.000128f, -0.000784f, +0.000380f, - +0.000157f, +0.000166f, -0.000525f, -0.000182f, -0.000419f, +0.000216f, -0.000338f, -0.000360f, -0.000515f, -0.000236f, - +0.000084f, -0.000203f, -0.000204f, -0.000153f, +0.000114f, +0.000021f, +0.000038f, +0.000034f, -0.000214f, +0.000074f, - +0.000203f, +0.000075f, +0.000066f, -0.000128f, -0.000251f, -0.000155f, +0.000017f, +0.000030f, +0.000056f, +0.000157f, - +0.000086f, +0.000009f, -0.000142f, +0.000040f, -0.000038f, +0.000117f, -0.000098f, -0.000074f, +0.000105f, +0.000111f, - -0.000022f, -0.000013f, -0.000057f, -0.000070f, -0.000039f, +0.000013f - }, - { - -0.000416f, -0.031612f, +0.003433f, +0.000711f, +0.001386f, -0.000873f, -0.001797f, +0.001479f, +0.000073f, +0.000183f, - -0.001028f, +0.000983f, -0.001508f, -0.002929f, -0.003856f, +0.001338f, +0.004101f, -0.000731f, -0.005639f, -0.002533f, - -0.005033f, -0.001149f, +0.000955f, -0.000792f, -0.002601f, +0.002787f, -0.000715f, +0.000338f, -0.001082f, -0.000356f, - -0.001353f, -0.001453f, +0.001128f, +0.000896f, +0.000696f, +0.001581f, -0.000031f, +0.001432f, +0.000312f, +0.000212f, - -0.000218f, +0.000433f, -0.000662f, -0.000716f, +0.000683f, +0.000336f, -0.000212f, -0.000217f, +0.000286f, +0.000574f, - -0.000262f, +0.000355f, -0.000003f, +0.000379f, -0.000461f, -0.000324f, -0.000398f, -0.000118f, +0.000193f, +0.000217f, - +0.000112f, +0.000163f, +0.000067f, -0.000069f, +0.000035f, +0.000116f, -0.000062f, +0.000283f, +0.000014f, -0.000011f, - +0.000113f, -0.000013f, -0.000179f, -0.000054f, +0.000175f, +0.000155f, -0.000024f, +0.000094f, +0.000110f, -0.000068f, - -0.000027f, -0.000014f, +0.000029f, -0.000012f, +0.000073f, +0.000125f, -0.000019f, -0.000060f, +0.000066f, -0.000087f, - -0.000114f, +0.000035f, +0.000042f, +0.000064f, -0.000023f, -0.000037f - }, - { - -0.001838f, +0.078249f, +0.010426f, +0.008956f, -0.000434f, +0.000485f, +0.000409f, -0.000029f, +0.000717f, +0.001146f, - +0.000516f, +0.001676f, -0.000634f, -0.001600f, -0.000388f, +0.001001f, +0.001160f, +0.002653f, +0.004056f, -0.002625f, - -0.000089f, +0.001038f, -0.002178f, +0.000333f, +0.002012f, -0.001904f, -0.000803f, +0.000741f, -0.000370f, +0.001364f, - -0.000348f, -0.002042f, +0.001248f, +0.000658f, -0.000753f, -0.000410f, +0.000524f, +0.000965f, -0.000540f, -0.001849f, - +0.000528f, +0.000173f, -0.000889f, +0.000241f, +0.000798f, -0.000434f, -0.000128f, +0.000206f, +0.000098f, +0.000060f, - -0.000847f, +0.000793f, -0.000490f, +0.000618f, -0.000035f, -0.000285f, +0.000634f, +0.000195f, -0.000364f, -0.000592f, - -0.000079f, +0.000176f, +0.000022f, -0.000414f, -0.000200f, +0.000188f, +0.000050f, -0.000193f, -0.000247f, -0.000176f, - +0.000044f, +0.000077f, +0.000128f, -0.000103f, -0.000033f, -0.000101f, +0.000212f, -0.000014f, -0.000049f, -0.000040f, - -0.000077f, +0.000068f, -0.000092f, -0.000026f, +0.000072f, +0.000030f, +0.000026f, -0.000082f, -0.000015f, +0.000022f, - -0.000167f, -0.000082f, +0.000037f, -0.000037f, -0.000073f, +0.000049f - }, - { - -0.007164f, -0.066714f, -0.003882f, +0.007669f, -0.000506f, +0.000519f, -0.000057f, -0.000462f, +0.000461f, -0.000397f, - -0.001615f, -0.000639f, +0.003307f, -0.000974f, -0.000328f, +0.000204f, -0.000096f, -0.001083f, +0.000129f, +0.000259f, - -0.000461f, +0.000298f, -0.000067f, -0.000595f, -0.000603f, -0.000389f, +0.000285f, +0.000651f, -0.000660f, +0.000972f, - -0.000218f, -0.001196f, +0.000556f, -0.000253f, +0.000365f, -0.000220f, -0.000611f, +0.000329f, -0.000208f, -0.000118f, - -0.000617f, +0.000172f, +0.000333f, -0.000669f, -0.000992f, +0.000734f, -0.000146f, +0.000081f, +0.000052f, -0.000094f, - +0.000271f, +0.000079f, +0.000144f, +0.000042f, +0.000460f, +0.000004f, +0.000106f, -0.000147f, -0.000173f, -0.000285f, - +0.000436f, +0.000263f, +0.000170f, +0.000135f, +0.000193f, -0.000102f, +0.000000f, +0.000027f, -0.000026f, +0.000149f, - -0.000032f, -0.000217f, +0.000024f, +0.000019f, +0.000177f, -0.000066f, +0.000064f, -0.000079f, +0.000036f, +0.000074f, - +0.000105f, +0.000004f, -0.000086f, -0.000007f, -0.000041f, -0.000065f, -0.000007f, -0.000085f, -0.000023f, +0.000060f, - +0.000062f, -0.000004f, -0.000070f, +0.000075f, +0.000010f, -0.000012f - }, - { - +0.001351f, -0.001336f, -0.003154f, +0.000972f, +0.000081f, -0.000347f, +0.000441f, +0.001302f, -0.001242f, -0.000036f, - +0.001479f, +0.000510f, +0.001985f, -0.001265f, +0.002119f, -0.002985f, -0.006814f, +0.016476f, -0.006939f, +0.001769f, - -0.000433f, -0.000784f, +0.000409f, -0.002955f, -0.003054f, +0.001612f, +0.002377f, +0.001391f, -0.001769f, +0.000950f, - +0.000246f, +0.000666f, -0.001661f, +0.000576f, +0.000847f, +0.001150f, +0.000217f, -0.000153f, +0.000002f, +0.001347f, - +0.000371f, +0.000779f, -0.000167f, +0.000549f, -0.000763f, +0.000208f, +0.000037f, -0.000275f, +0.000268f, +0.000675f, - -0.000385f, +0.000169f, +0.000092f, +0.000377f, +0.000364f, +0.000242f, +0.000008f, -0.000083f, -0.000175f, +0.000293f, - -0.000089f, -0.000433f, -0.000337f, +0.000239f, +0.000320f, -0.000137f, -0.000130f, -0.000251f, +0.000191f, +0.000052f, - -0.000116f, +0.000040f, +0.000028f, +0.000109f, +0.000119f, -0.000145f, +0.000120f, +0.000166f, +0.000155f, -0.000079f, - -0.000062f, -0.000090f, -0.000086f, +0.000100f, -0.000116f, -0.000004f, +0.000000f, -0.000097f, +0.000062f, +0.000071f, - +0.000125f, +0.000082f, -0.000023f, +0.000022f, +0.000050f, +0.000018f - }, - { - -0.014080f, -0.119594f, +0.003141f, -0.002673f, +0.001153f, -0.000434f, +0.000633f, -0.000091f, -0.000751f, +0.000827f, - +0.000860f, -0.000681f, -0.000230f, -0.002442f, +0.000108f, -0.000153f, -0.000283f, +0.001338f, -0.000282f, +0.001631f, - +0.001527f, -0.001357f, -0.000264f, -0.001012f, -0.000759f, +0.000131f, -0.000503f, -0.000033f, -0.001396f, -0.000390f, - -0.001474f, -0.000346f, -0.000903f, +0.000908f, -0.000950f, +0.001059f, +0.000253f, +0.000721f, +0.000195f, +0.000482f, - +0.000890f, +0.000430f, +0.000163f, +0.000126f, -0.000061f, +0.000296f, -0.000207f, +0.000407f, -0.000176f, +0.001214f, - -0.000341f, +0.000149f, +0.000252f, +0.000325f, -0.000192f, -0.000527f, +0.000439f, +0.000109f, -0.000092f, -0.000026f, - -0.000036f, +0.000058f, +0.000260f, +0.000158f, -0.000013f, -0.000207f, +0.000120f, +0.000072f, -0.000056f, +0.000101f, - -0.000015f, +0.000138f, +0.000071f, +0.000034f, +0.000021f, -0.000014f, +0.000264f, -0.000089f, +0.000031f, +0.000097f, - -0.000094f, -0.000042f, -0.000130f, +0.000116f, +0.000062f, +0.000123f, -0.000043f, +0.000085f, -0.000129f, -0.000027f, - +0.000034f, +0.000046f, -0.000057f, -0.000047f, +0.000075f, +0.000021f - }, - { - +0.000078f, +0.000638f, -0.002747f, -0.001906f, -0.000167f, +0.000012f, +0.000733f, +0.000983f, +0.000058f, -0.000241f, - +0.000155f, -0.000475f, +0.001880f, -0.001572f, -0.001909f, -0.007032f, -0.004698f, +0.001676f, +0.001047f, -0.002246f, - +0.000261f, -0.001190f, -0.002493f, -0.000606f, +0.000954f, -0.001424f, -0.002308f, -0.000505f, -0.002101f, -0.001155f, - -0.000942f, -0.000975f, -0.002449f, +0.001507f, -0.000202f, -0.000140f, -0.000088f, -0.000172f, -0.000365f, +0.000835f, - -0.000174f, -0.001551f, +0.000643f, +0.000467f, +0.000390f, -0.000297f, +0.000463f, +0.000303f, -0.000222f, -0.000077f, - -0.000074f, +0.000055f, -0.000152f, -0.000696f, -0.000015f, +0.000046f, -0.000051f, -0.000189f, +0.000021f, +0.000202f, - +0.000105f, +0.000064f, -0.000399f, -0.000073f, +0.000196f, +0.000176f, +0.000342f, +0.000519f, +0.000000f, -0.000119f, - -0.000004f, +0.000184f, +0.000068f, +0.000117f, +0.000201f, +0.000141f, -0.000014f, +0.000147f, -0.000010f, +0.000012f, - +0.000036f, +0.000086f, +0.000001f, -0.000049f, +0.000040f, -0.000042f, -0.000084f, -0.000075f, +0.000004f, -0.000063f, - -0.000011f, +0.000003f, +0.000001f, -0.000044f, -0.000008f, -0.000006f - }, - { - +0.015867f, +0.022747f, -0.009229f, +0.001436f, +0.000559f, +0.000136f, -0.000390f, +0.000421f, +0.000413f, +0.000330f, - -0.000096f, -0.001281f, -0.000053f, -0.000160f, -0.002369f, +0.000658f, -0.001380f, -0.000646f, +0.000078f, +0.000161f, - -0.000208f, +0.000043f, +0.000174f, +0.000846f, -0.001568f, +0.000566f, +0.000619f, -0.000971f, -0.000270f, -0.000477f, - +0.000937f, -0.000255f, +0.000763f, +0.000714f, +0.000631f, +0.000365f, +0.000863f, +0.000986f, -0.000170f, -0.000652f, - -0.000123f, +0.000760f, -0.000022f, -0.001309f, -0.000547f, +0.000926f, -0.000613f, -0.000643f, +0.000068f, +0.000636f, - +0.000786f, +0.000065f, -0.000289f, -0.000243f, +0.000664f, +0.000069f, -0.000099f, -0.000198f, +0.000131f, -0.000091f, - +0.000130f, +0.000106f, +0.000550f, -0.000012f, -0.000433f, +0.000117f, -0.000064f, -0.000019f, +0.000107f, -0.000057f, - +0.000263f, +0.000095f, +0.000042f, +0.000107f, -0.000059f, -0.000207f, +0.000142f, +0.000066f, -0.000184f, -0.000009f, - -0.000086f, -0.000008f, +0.000037f, +0.000072f, -0.000028f, +0.000015f, +0.000082f, +0.000013f, -0.000021f, +0.000041f, - +0.000003f, -0.000057f, +0.000016f, +0.000085f, -0.000053f, -0.000063f - }, - { - +0.000134f, +0.009647f, +0.005763f, -0.001276f, +0.000079f, -0.000126f, -0.000696f, +0.000785f, +0.000331f, +0.000045f, - +0.000045f, +0.000534f, -0.001007f, -0.002069f, +0.009109f, -0.007831f, -0.005652f, +0.003371f, +0.001586f, +0.002096f, - +0.002238f, -0.001749f, +0.002013f, +0.000760f, +0.001045f, -0.003587f, +0.002233f, +0.000736f, -0.001610f, +0.000541f, - -0.001583f, +0.000241f, +0.001882f, +0.000710f, +0.000815f, -0.001101f, +0.000006f, +0.001388f, +0.001397f, -0.000388f, - +0.000859f, -0.000591f, +0.000257f, +0.000829f, +0.000230f, +0.000371f, +0.000669f, -0.000570f, +0.000449f, -0.000038f, - -0.000382f, -0.000271f, -0.000061f, -0.000427f, -0.000016f, -0.000471f, +0.000418f, +0.000146f, -0.000122f, -0.000206f, - -0.000015f, +0.000049f, +0.000556f, -0.000387f, -0.000019f, +0.000294f, -0.000055f, +0.000052f, +0.000103f, -0.000033f, - -0.000169f, -0.000202f, +0.000125f, +0.000044f, +0.000235f, -0.000240f, -0.000169f, -0.000030f, -0.000053f, +0.000059f, - -0.000086f, -0.000058f, +0.000070f, +0.000081f, +0.000020f, +0.000030f, +0.000061f, +0.000117f, -0.000027f, -0.000022f, - +0.000020f, -0.000012f, -0.000024f, +0.000002f, +0.000012f, +0.000070f - }, - { - -0.002073f, -0.036831f, +0.009674f, -0.003463f, +0.000527f, +0.005028f, -0.000284f, -0.001447f, -0.000028f, +0.000366f, - +0.001148f, -0.001020f, +0.000157f, -0.000013f, -0.000250f, -0.000302f, -0.000902f, +0.003430f, +0.000350f, -0.001560f, - +0.000318f, +0.000122f, +0.000106f, -0.000387f, +0.001729f, -0.000826f, -0.000338f, -0.000680f, +0.000911f, -0.001588f, - +0.000767f, +0.000018f, -0.001301f, -0.000048f, -0.000061f, -0.000876f, -0.000060f, -0.000472f, +0.000648f, +0.000362f, - +0.000909f, -0.000001f, +0.000454f, +0.000192f, +0.000455f, +0.000858f, +0.000401f, -0.000066f, -0.000033f, +0.000777f, - -0.000345f, -0.000149f, +0.000402f, -0.000373f, -0.000429f, +0.000325f, +0.000335f, +0.000104f, -0.000077f, +0.000010f, - -0.000145f, -0.000260f, +0.000092f, +0.000072f, +0.000033f, +0.000064f, +0.000005f, +0.000021f, +0.000123f, +0.000115f, - +0.000160f, -0.000132f, -0.000029f, +0.000038f, -0.000111f, -0.000044f, -0.000016f, -0.000151f, +0.000200f, -0.000101f, - -0.000108f, +0.000046f, +0.000139f, +0.000035f, +0.000064f, +0.000124f, -0.000014f, -0.000007f, +0.000052f, +0.000032f, - +0.000003f, +0.000016f, +0.000005f, -0.000013f, +0.000027f, +0.000088f - }, - { - +0.000592f, -0.000545f, +0.001496f, -0.004343f, -0.000170f, +0.000782f, -0.001690f, +0.000459f, -0.000287f, +0.001754f, - -0.000539f, -0.001640f, +0.000433f, +0.000643f, +0.002622f, -0.002182f, -0.001746f, -0.000148f, +0.002228f, -0.000099f, - -0.000963f, +0.002279f, -0.000216f, -0.000102f, +0.000966f, +0.001733f, +0.000820f, +0.000064f, +0.001480f, -0.000183f, - -0.000196f, -0.000631f, +0.000219f, -0.001117f, +0.001864f, +0.000735f, -0.001198f, +0.000482f, +0.000052f, -0.000016f, - -0.000482f, +0.000367f, +0.001195f, +0.000375f, -0.000654f, -0.000075f, +0.000074f, -0.000373f, +0.000174f, -0.000074f, - -0.000016f, -0.000342f, -0.000149f, -0.000733f, -0.000034f, +0.000009f, +0.000123f, -0.000126f, +0.000180f, -0.000176f, - +0.000227f, +0.000032f, -0.000033f, +0.000090f, +0.000047f, +0.000065f, +0.000159f, +0.000205f, -0.000014f, -0.000063f, - +0.000130f, +0.000058f, +0.000113f, +0.000074f, +0.000049f, -0.000092f, -0.000157f, -0.000170f, +0.000104f, +0.000024f, - -0.000110f, +0.000042f, -0.000007f, -0.000132f, -0.000084f, -0.000089f, -0.000026f, +0.000069f, -0.000070f, -0.000063f, - +0.000080f, -0.000006f, -0.000031f, +0.000012f, +0.000060f, -0.000053f - }, - { - -0.002759f, +0.025671f, -0.000476f, +0.001796f, +0.001986f, -0.002626f, +0.002637f, +0.000751f, +0.000462f, -0.001279f, - -0.001969f, +0.000543f, -0.001474f, +0.002602f, -0.000596f, +0.000313f, -0.000618f, -0.000822f, -0.000334f, -0.000367f, - -0.000219f, +0.000027f, -0.000019f, +0.000400f, -0.001246f, +0.001066f, -0.000573f, +0.001233f, +0.000356f, +0.000232f, - -0.000025f, +0.000752f, -0.000327f, +0.000166f, -0.000349f, -0.000443f, -0.000286f, -0.000945f, -0.000309f, +0.000561f, - +0.001050f, -0.000105f, +0.000482f, -0.000798f, +0.000181f, -0.000801f, -0.000056f, -0.000154f, -0.000208f, +0.000147f, - +0.000317f, -0.000373f, -0.000105f, -0.000407f, +0.000077f, -0.000144f, +0.000147f, -0.000464f, +0.000090f, -0.000309f, - +0.000426f, -0.000441f, -0.000041f, -0.000017f, +0.000085f, -0.000266f, +0.000021f, -0.000027f, -0.000006f, +0.000132f, - +0.000077f, -0.000045f, -0.000019f, +0.000038f, -0.000040f, -0.000010f, -0.000032f, +0.000015f, -0.000118f, -0.000042f, - -0.000015f, +0.000180f, -0.000023f, +0.000096f, -0.000000f, +0.000019f, -0.000008f, +0.000026f, +0.000013f, +0.000045f, - +0.000011f, +0.000004f, +0.000048f, -0.000060f, +0.000027f, +0.000083f - }, - { - -0.000358f, -0.007046f, +0.002538f, -0.001910f, -0.000986f, +0.000757f, +0.000113f, -0.000582f, +0.001091f, -0.001718f, - +0.001073f, +0.003004f, +0.006190f, +0.017858f, +0.001899f, -0.001443f, -0.001816f, +0.002617f, -0.002131f, -0.000529f, - -0.007083f, +0.004123f, +0.001972f, -0.000928f, +0.002154f, +0.002508f, -0.002585f, +0.002938f, -0.000712f, +0.003328f, - -0.002551f, +0.000448f, -0.001641f, -0.000996f, +0.000789f, -0.000292f, +0.000988f, -0.000059f, +0.000271f, -0.000421f, - +0.000170f, +0.000143f, -0.000215f, -0.000135f, -0.000213f, +0.000041f, +0.000102f, +0.000275f, -0.000040f, +0.000479f, - -0.000129f, -0.000115f, +0.000236f, +0.000187f, +0.000591f, +0.000255f, -0.000098f, +0.000151f, -0.000199f, -0.000333f, - +0.000074f, +0.000460f, +0.000073f, -0.000096f, -0.000031f, +0.000069f, -0.000129f, -0.000041f, +0.000017f, +0.000069f, - -0.000054f, -0.000239f, +0.000096f, -0.000209f, +0.000189f, +0.000094f, +0.000205f, -0.000028f, -0.000131f, +0.000099f, - -0.000110f, -0.000164f, +0.000020f, -0.000089f, -0.000025f, -0.000003f, +0.000087f, +0.000027f, -0.000066f, -0.000044f, - -0.000165f, +0.000075f, +0.000069f, -0.000052f, -0.000035f, +0.000084f - }, - { - +0.002450f, +0.024900f, +0.004091f, -0.005184f, +0.000675f, -0.000754f, -0.005171f, +0.001963f, -0.000645f, +0.000719f, - -0.002055f, -0.000465f, -0.000974f, -0.006695f, -0.000453f, +0.001111f, +0.001704f, +0.000346f, -0.000974f, -0.000015f, - -0.000072f, +0.000575f, +0.000330f, +0.001589f, +0.001811f, +0.000229f, +0.000881f, +0.001106f, -0.000656f, -0.000904f, - -0.000315f, +0.000256f, -0.000440f, -0.000704f, +0.000834f, -0.000078f, +0.000101f, -0.000059f, -0.000659f, +0.000046f, - +0.000630f, +0.000637f, +0.000261f, +0.000013f, +0.000534f, -0.000482f, -0.000476f, +0.000777f, -0.000799f, +0.000461f, - +0.000137f, +0.000089f, -0.000338f, -0.000217f, -0.000227f, -0.000277f, -0.000022f, +0.000266f, +0.000073f, +0.000330f, - +0.000163f, +0.000108f, -0.000101f, -0.000347f, -0.000057f, +0.000036f, +0.000063f, -0.000111f, +0.000073f, -0.000162f, - +0.000034f, -0.000245f, -0.000103f, +0.000041f, -0.000156f, -0.000061f, +0.000014f, +0.000009f, -0.000073f, -0.000084f, - -0.000088f, -0.000124f, -0.000101f, -0.000106f, +0.000031f, -0.000078f, +0.000113f, +0.000102f, -0.000034f, -0.000091f, - -0.000027f, -0.000048f, -0.000058f, -0.000074f, +0.000030f, +0.000024f - }, - { - -0.000477f, -0.006651f, +0.002027f, +0.002046f, +0.000151f, +0.000088f, -0.000336f, -0.000056f, -0.000188f, +0.001821f, - -0.000289f, +0.000894f, -0.001436f, -0.006564f, -0.024410f, -0.003211f, +0.001014f, -0.000498f, +0.002829f, -0.002990f, - +0.000701f, +0.003583f, -0.001774f, -0.000924f, +0.001543f, +0.000670f, -0.002492f, -0.000684f, +0.000002f, -0.000123f, - -0.000149f, +0.000761f, +0.001143f, -0.000277f, -0.000475f, +0.000048f, -0.000412f, -0.000867f, -0.000731f, -0.000337f, - +0.001448f, +0.000672f, -0.000449f, -0.000064f, +0.000340f, -0.000192f, -0.000368f, -0.000147f, +0.000475f, -0.000085f, - -0.000317f, +0.000503f, +0.000566f, -0.000281f, -0.000122f, +0.000128f, -0.000321f, -0.000041f, +0.000098f, +0.000451f, - +0.000294f, -0.000145f, -0.000200f, +0.000267f, +0.000263f, -0.000051f, -0.000049f, +0.000210f, +0.000233f, -0.000090f, - -0.000114f, -0.000119f, +0.000101f, -0.000048f, +0.000004f, +0.000012f, +0.000049f, +0.000102f, +0.000021f, +0.000037f, - -0.000272f, -0.000066f, -0.000093f, +0.000116f, +0.000062f, -0.000152f, +0.000064f, -0.000056f, -0.000054f, +0.000042f, - -0.000019f, -0.000017f, -0.000008f, +0.000024f, -0.000044f, -0.000080f - } - }, - { - { - -0.006270f, +0.033016f, +0.028530f, -0.001216f, +0.001499f, +0.002033f, -0.000518f, +0.001422f, +0.000832f, -0.000674f, - -0.001569f, +0.001412f, +0.001770f, +0.001316f, -0.005627f, -0.001343f, +0.000154f, +0.001094f, -0.001807f, +0.003053f, - -0.000986f, -0.001950f, -0.000770f, +0.000114f, -0.000572f, -0.000255f, +0.001431f, +0.000065f, -0.000838f, -0.000168f, - -0.000371f, +0.000094f, -0.000662f, +0.000397f, -0.000275f, +0.000216f, -0.001069f, +0.000301f, -0.000486f, +0.000771f, - +0.001202f, +0.000710f, -0.000207f, +0.000332f, +0.000035f, -0.000152f, +0.000977f, -0.000696f, +0.000054f, +0.000178f, - -0.000388f, -0.000021f, +0.000206f, +0.000020f, -0.000055f, -0.000372f, +0.000264f, -0.000250f, -0.000271f, +0.000002f, - -0.000453f, -0.000094f, +0.000107f, +0.000093f, +0.000065f, +0.000139f, -0.000128f, -0.000133f, +0.000010f, +0.000072f, - +0.000418f, -0.000002f, +0.000045f, -0.000236f, -0.000110f, -0.000020f, -0.000084f, +0.000003f, +0.000128f, -0.000156f, - +0.000049f, -0.000110f, -0.000139f, -0.000008f, +0.000035f, +0.000067f, -0.000185f, -0.000056f, +0.000016f, +0.000009f, - +0.000016f, +0.000004f, -0.000047f, -0.000015f, -0.000039f, -0.000022f - }, - { - +0.000415f, -0.024741f, -0.005351f, -0.001447f, -0.000790f, +0.000858f, -0.002587f, +0.000493f, +0.000013f, +0.000548f, - -0.000606f, +0.000282f, -0.001540f, -0.001123f, -0.003431f, +0.001714f, +0.003448f, +0.000571f, -0.005109f, -0.002694f, - -0.001630f, -0.001546f, +0.000564f, -0.000555f, +0.000286f, -0.000380f, +0.000922f, -0.002262f, -0.000450f, +0.000732f, - -0.002381f, -0.000419f, -0.000714f, +0.000226f, +0.000655f, +0.001115f, +0.001214f, +0.000396f, +0.001042f, -0.000095f, - +0.000367f, -0.000658f, -0.000863f, -0.000486f, +0.000448f, +0.000135f, -0.000190f, -0.000275f, +0.000800f, -0.000231f, - -0.000014f, +0.000128f, -0.000237f, -0.000179f, -0.000117f, +0.000367f, -0.000231f, -0.000048f, +0.000247f, +0.000022f, - -0.000310f, -0.000106f, +0.000169f, -0.000071f, -0.000085f, +0.000125f, +0.000021f, -0.000142f, +0.000140f, +0.000046f, - +0.000006f, -0.000110f, +0.000082f, +0.000010f, +0.000019f, +0.000075f, +0.000163f, +0.000204f, +0.000010f, -0.000221f, - +0.000090f, +0.000034f, +0.000083f, -0.000038f, +0.000045f, -0.000061f, -0.000081f, -0.000003f, -0.000039f, -0.000056f, - +0.000017f, +0.000014f, -0.000004f, -0.000186f, -0.000001f, +0.000058f - }, - { - +0.000789f, +0.090351f, +0.008249f, +0.004861f, -0.004471f, -0.000407f, +0.000619f, +0.001162f, +0.000081f, +0.000773f, - +0.000465f, +0.001331f, +0.002643f, -0.003903f, -0.002642f, +0.001058f, +0.000481f, +0.003117f, +0.000858f, -0.000258f, - +0.001480f, -0.000132f, -0.000187f, +0.001133f, -0.000478f, -0.002813f, -0.000517f, +0.000758f, +0.000655f, -0.001469f, - +0.001048f, +0.000485f, -0.000555f, +0.000634f, -0.000258f, +0.000495f, -0.001527f, +0.001514f, -0.000620f, -0.000538f, - +0.000126f, +0.000867f, -0.000470f, -0.000633f, +0.000840f, -0.000853f, -0.000181f, -0.000426f, +0.000141f, +0.000257f, - -0.000665f, +0.000248f, -0.000342f, +0.000859f, -0.000615f, -0.000262f, +0.000047f, +0.000257f, +0.000062f, -0.000340f, - -0.000303f, +0.000087f, -0.000237f, -0.000483f, -0.000040f, +0.000084f, -0.000165f, -0.000014f, -0.000349f, -0.000059f, - -0.000162f, -0.000026f, +0.000034f, -0.000005f, -0.000192f, +0.000141f, +0.000335f, -0.000039f, -0.000257f, +0.000051f, - -0.000048f, -0.000159f, -0.000008f, +0.000160f, -0.000049f, -0.000054f, -0.000089f, +0.000009f, +0.000000f, -0.000038f, - -0.000057f, +0.000035f, +0.000049f, -0.000030f, +0.000020f, -0.000009f - }, - { - -0.004249f, -0.073034f, +0.000355f, +0.006096f, -0.001839f, +0.000477f, -0.000382f, +0.000427f, -0.000501f, -0.000333f, - -0.000793f, +0.000312f, +0.000390f, +0.001847f, +0.000358f, +0.001111f, +0.000262f, -0.000903f, -0.000655f, +0.000791f, - -0.000348f, +0.000049f, -0.000095f, -0.000243f, +0.000279f, +0.000007f, +0.000395f, +0.000358f, -0.000395f, -0.001028f, - -0.000369f, -0.000345f, -0.000125f, -0.000887f, +0.000723f, -0.001103f, +0.000088f, +0.000086f, +0.000213f, -0.000523f, - -0.000254f, +0.000328f, -0.000033f, -0.000749f, -0.000223f, -0.000329f, -0.000406f, +0.000289f, +0.000374f, +0.000139f, - -0.000098f, +0.000152f, +0.000379f, -0.000127f, +0.000163f, +0.000046f, -0.000234f, -0.000407f, +0.000017f, +0.000169f, - +0.000002f, +0.000062f, +0.000105f, +0.000149f, -0.000260f, +0.000131f, -0.000250f, -0.000087f, +0.000232f, -0.000148f, - -0.000060f, +0.000029f, +0.000234f, -0.000016f, +0.000134f, -0.000028f, -0.000014f, -0.000060f, +0.000049f, -0.000022f, - -0.000036f, +0.000014f, -0.000094f, +0.000090f, -0.000079f, +0.000035f, +0.000008f, -0.000070f, +0.000100f, +0.000026f, - -0.000053f, -0.000001f, +0.000002f, -0.000023f, -0.000004f, -0.000011f - }, - { - -0.001291f, -0.004106f, +0.004482f, -0.000455f, -0.000439f, +0.000471f, +0.000366f, -0.000196f, -0.000754f, -0.000372f, - +0.001203f, +0.000460f, +0.001481f, +0.002784f, +0.001174f, -0.002943f, +0.002636f, -0.000907f, -0.002699f, +0.002181f, - +0.000583f, +0.000745f, -0.002020f, -0.000318f, -0.001486f, +0.003489f, -0.000704f, +0.000735f, +0.000416f, -0.000626f, - -0.000110f, +0.001627f, -0.000785f, -0.000935f, +0.001703f, -0.000092f, +0.001157f, -0.000886f, +0.000869f, +0.001405f, - -0.000001f, +0.000705f, -0.000731f, -0.000079f, -0.000395f, -0.000217f, -0.000127f, -0.000300f, -0.000191f, +0.000410f, - -0.000203f, +0.000366f, +0.000348f, +0.000025f, +0.000530f, +0.000317f, +0.000184f, -0.000422f, -0.000183f, +0.000232f, - -0.000057f, -0.000490f, +0.000066f, -0.000076f, -0.000387f, -0.000312f, -0.000150f, -0.000077f, +0.000168f, -0.000028f, - -0.000067f, +0.000167f, +0.000215f, +0.000143f, +0.000132f, -0.000135f, +0.000169f, -0.000002f, -0.000088f, -0.000149f, - -0.000200f, -0.000081f, +0.000150f, +0.000014f, -0.000158f, +0.000020f, -0.000080f, -0.000017f, +0.000100f, +0.000034f, - +0.000061f, +0.000000f, +0.000017f, +0.000105f, +0.000011f, -0.000050f - }, - { - -0.004646f, -0.127692f, +0.004030f, -0.000911f, -0.001238f, +0.000304f, -0.000389f, -0.000749f, +0.001204f, -0.000196f, - -0.001876f, -0.000127f, -0.000111f, -0.001092f, -0.001592f, +0.000796f, +0.000413f, +0.000764f, +0.000019f, +0.000735f, - +0.000357f, -0.001868f, -0.000211f, -0.000821f, -0.000083f, +0.000137f, +0.000271f, -0.000953f, -0.000539f, -0.000884f, - -0.001530f, -0.000029f, -0.000002f, +0.000503f, -0.000024f, +0.000544f, -0.000440f, +0.000782f, +0.000654f, +0.000638f, - +0.000070f, +0.000553f, -0.000008f, -0.000233f, -0.000063f, +0.000111f, +0.000540f, +0.000120f, +0.000006f, +0.000713f, - +0.000121f, +0.000079f, -0.000167f, +0.000376f, -0.000354f, -0.000246f, -0.000178f, -0.000380f, +0.000294f, +0.000238f, - +0.000011f, +0.000072f, -0.000256f, +0.000027f, -0.000035f, -0.000036f, -0.000076f, -0.000116f, +0.000115f, -0.000102f, - +0.000086f, -0.000074f, +0.000129f, +0.000098f, -0.000062f, +0.000145f, -0.000010f, -0.000019f, +0.000175f, +0.000132f, - +0.000004f, +0.000070f, +0.000112f, +0.000175f, -0.000034f, +0.000010f, -0.000060f, -0.000021f, -0.000105f, +0.000015f, - -0.000003f, +0.000020f, -0.000086f, +0.000082f, +0.000066f, +0.000041f - }, - { - +0.000518f, -0.005934f, -0.001649f, -0.000011f, -0.000190f, +0.000270f, +0.000153f, +0.001662f, -0.000763f, +0.000377f, - -0.000425f, +0.000412f, +0.001107f, +0.001776f, -0.005289f, -0.003920f, +0.002373f, -0.001942f, +0.001448f, -0.000072f, - -0.000745f, +0.000301f, -0.003613f, +0.000169f, +0.002265f, -0.003552f, +0.001710f, -0.002943f, -0.000889f, -0.000770f, - -0.002171f, +0.000566f, -0.001215f, +0.000053f, -0.001173f, -0.000532f, +0.000061f, +0.000600f, -0.000104f, -0.000494f, - -0.000609f, -0.000080f, +0.000205f, +0.001028f, +0.000408f, -0.000778f, +0.000147f, +0.000492f, -0.000305f, +0.000167f, - -0.000100f, -0.000026f, -0.000354f, -0.000442f, -0.000233f, -0.000021f, -0.000183f, +0.000019f, -0.000093f, +0.000364f, - +0.000309f, -0.000036f, +0.000008f, +0.000062f, +0.000062f, +0.000143f, +0.000302f, +0.000121f, +0.000042f, +0.000190f, - +0.000207f, -0.000120f, -0.000141f, +0.000168f, +0.000076f, +0.000080f, -0.000118f, -0.000057f, -0.000031f, -0.000081f, - +0.000048f, +0.000035f, +0.000065f, -0.000049f, -0.000023f, -0.000073f, -0.000040f, +0.000058f, -0.000005f, +0.000056f, - +0.000114f, +0.000093f, -0.000019f, -0.000086f, +0.000045f, +0.000027f - }, - { - -0.008895f, +0.040617f, +0.010404f, +0.000673f, +0.000892f, +0.000496f, -0.000560f, +0.000637f, +0.001055f, -0.000317f, - -0.000511f, -0.000290f, +0.000104f, -0.002868f, -0.002339f, +0.000381f, -0.000636f, -0.000102f, +0.000714f, -0.000480f, - -0.000480f, +0.000634f, -0.000764f, +0.000558f, -0.000092f, -0.000174f, -0.000003f, -0.001384f, -0.000178f, -0.000698f, - +0.000451f, +0.000420f, +0.001279f, +0.000059f, +0.000369f, -0.000536f, +0.000902f, +0.000362f, +0.000165f, -0.000806f, - +0.000143f, +0.000276f, +0.000771f, -0.001055f, -0.000848f, +0.000306f, -0.000212f, +0.000091f, +0.000527f, +0.000322f, - +0.000176f, -0.000285f, +0.000294f, +0.000451f, +0.000090f, +0.000175f, -0.000410f, -0.000148f, +0.000058f, +0.000021f, - +0.000283f, +0.000190f, +0.000342f, -0.000049f, -0.000248f, +0.000073f, -0.000166f, +0.000214f, +0.000014f, +0.000147f, - +0.000236f, +0.000018f, +0.000067f, -0.000071f, -0.000253f, +0.000035f, +0.000003f, -0.000184f, +0.000042f, -0.000150f, - -0.000059f, +0.000045f, +0.000090f, +0.000071f, +0.000053f, +0.000032f, +0.000062f, -0.000105f, -0.000051f, +0.000024f, - -0.000018f, +0.000021f, -0.000019f, -0.000013f, -0.000086f, -0.000026f - }, - { - +0.001384f, +0.007739f, +0.000050f, +0.000424f, -0.000525f, +0.000210f, -0.000301f, -0.000056f, -0.000341f, -0.000043f, - +0.000466f, +0.001485f, +0.000383f, -0.000958f, +0.001715f, -0.003393f, -0.003521f, +0.002332f, +0.001977f, +0.002281f, - -0.000448f, +0.000473f, +0.002324f, -0.000449f, -0.001558f, -0.000667f, +0.001842f, +0.000039f, -0.001274f, -0.001051f, - +0.001176f, -0.000888f, +0.002300f, +0.001589f, -0.000255f, -0.000960f, -0.000219f, +0.001332f, +0.001058f, +0.000020f, - -0.000288f, -0.000646f, +0.000473f, +0.000053f, -0.000180f, +0.000366f, +0.000262f, -0.000197f, -0.000041f, +0.000289f, - -0.000072f, -0.000023f, -0.000015f, -0.000762f, -0.000254f, +0.000233f, -0.000091f, -0.000186f, -0.000405f, -0.000001f, - +0.000140f, +0.000414f, +0.000215f, +0.000046f, +0.000419f, +0.000437f, +0.000297f, +0.000091f, +0.000101f, -0.000001f, - +0.000004f, +0.000025f, -0.000019f, +0.000037f, -0.000131f, -0.000221f, -0.000177f, -0.000060f, +0.000001f, +0.000030f, - -0.000034f, +0.000067f, +0.000258f, +0.000086f, -0.000055f, -0.000031f, -0.000086f, -0.000112f, +0.000010f, +0.000082f, - -0.000036f, -0.000020f, -0.000013f, -0.000063f, -0.000015f, -0.000007f - }, - { - -0.000453f, -0.036279f, +0.001159f, +0.001735f, +0.001368f, -0.001045f, +0.007626f, -0.001646f, -0.000532f, -0.000373f, - -0.000039f, -0.001109f, -0.001038f, +0.000424f, -0.000454f, +0.000257f, -0.001655f, +0.003378f, -0.001248f, +0.001106f, - -0.000146f, +0.000131f, -0.001191f, +0.000733f, +0.000812f, -0.000248f, +0.000031f, -0.000693f, -0.000459f, -0.000544f, - +0.000605f, +0.000152f, -0.000463f, -0.002754f, +0.000704f, -0.000326f, -0.000215f, +0.000113f, +0.000506f, +0.000553f, - +0.000232f, -0.000331f, +0.000358f, +0.000798f, -0.000326f, -0.000208f, +0.000405f, +0.000075f, -0.000069f, -0.000244f, - -0.000334f, -0.000171f, -0.000169f, -0.000200f, +0.000005f, +0.000328f, +0.000131f, +0.000190f, +0.000106f, -0.000125f, - +0.000286f, -0.000251f, +0.000022f, -0.000036f, +0.000022f, +0.000048f, +0.000022f, +0.000077f, +0.000103f, -0.000134f, - +0.000080f, +0.000115f, +0.000033f, -0.000145f, -0.000072f, -0.000099f, +0.000023f, -0.000123f, +0.000057f, -0.000012f, - +0.000092f, +0.000051f, +0.000018f, -0.000048f, +0.000106f, -0.000119f, -0.000166f, -0.000040f, -0.000094f, +0.000038f, - +0.000020f, +0.000003f, +0.000083f, +0.000049f, -0.000015f, -0.000052f - }, - { - -0.000736f, +0.004597f, -0.005320f, -0.000319f, -0.000708f, +0.000686f, +0.000462f, -0.000821f, -0.000545f, -0.000622f, - +0.000263f, +0.000103f, +0.000629f, -0.000506f, +0.003921f, -0.001095f, -0.001030f, -0.000126f, -0.000767f, -0.000305f, - +0.002086f, +0.001859f, -0.000760f, +0.000154f, +0.001535f, +0.000766f, +0.000780f, -0.000669f, +0.001273f, +0.001578f, - -0.000402f, +0.000074f, +0.000236f, -0.000898f, +0.001011f, +0.000005f, +0.000443f, +0.000453f, +0.000062f, +0.000187f, - -0.000692f, +0.000468f, +0.001316f, -0.000597f, +0.000063f, +0.000182f, -0.000573f, -0.000252f, -0.000233f, -0.000040f, - -0.000270f, -0.000375f, -0.000068f, -0.000111f, +0.000224f, +0.000032f, +0.000032f, -0.000142f, -0.000217f, -0.000008f, - +0.000117f, -0.000199f, +0.000371f, +0.000147f, -0.000032f, -0.000247f, +0.000097f, +0.000035f, -0.000161f, +0.000010f, - +0.000233f, +0.000083f, +0.000253f, -0.000036f, -0.000080f, -0.000078f, +0.000108f, +0.000058f, +0.000171f, -0.000023f, - -0.000085f, -0.000087f, -0.000103f, +0.000055f, +0.000042f, -0.000064f, +0.000024f, -0.000010f, +0.000049f, +0.000063f, - +0.000009f, +0.000009f, +0.000014f, -0.000021f, +0.000018f, -0.000033f - }, - { - +0.004089f, +0.017156f, +0.003383f, -0.000304f, -0.001215f, -0.001226f, +0.002093f, +0.002074f, +0.000649f, +0.000122f, - -0.000677f, +0.000155f, +0.001854f, -0.001285f, +0.000082f, -0.000067f, +0.000769f, +0.000112f, -0.000492f, -0.000766f, - -0.000173f, -0.000945f, +0.000045f, +0.001149f, -0.000267f, +0.000285f, -0.000678f, +0.000258f, +0.000907f, -0.000438f, - +0.000440f, +0.000558f, +0.000622f, +0.000594f, -0.000596f, -0.000123f, +0.000594f, +0.000105f, +0.000518f, -0.000313f, - +0.000546f, +0.000579f, -0.000282f, -0.001109f, +0.000204f, -0.000493f, -0.000034f, -0.000165f, -0.000364f, +0.000114f, - -0.000526f, -0.000193f, -0.000330f, -0.000403f, -0.000083f, -0.000118f, -0.000004f, +0.000063f, +0.000013f, -0.000009f, - -0.000155f, -0.000134f, -0.000078f, -0.000146f, -0.000240f, +0.000181f, +0.000150f, +0.000096f, +0.000033f, -0.000004f, - -0.000009f, +0.000087f, +0.000008f, -0.000049f, -0.000145f, -0.000023f, -0.000008f, -0.000009f, +0.000087f, -0.000033f, - -0.000046f, -0.000013f, +0.000073f, +0.000060f, -0.000046f, -0.000039f, +0.000057f, +0.000002f, +0.000069f, -0.000023f, - -0.000087f, -0.000057f, -0.000097f, +0.000038f, +0.000043f, +0.000026f - }, - { - +0.000297f, -0.005163f, -0.000585f, -0.001344f, -0.000981f, -0.000391f, -0.000159f, -0.000042f, +0.001074f, -0.001039f, - +0.000480f, +0.000893f, +0.008977f, +0.023749f, -0.008197f, -0.000256f, -0.000916f, -0.000787f, -0.002208f, -0.001214f, - +0.000730f, +0.000445f, -0.000757f, -0.000741f, -0.000398f, +0.001048f, +0.000849f, +0.000510f, +0.000577f, +0.001529f, - -0.002185f, +0.000525f, -0.001390f, -0.000183f, +0.000225f, +0.001662f, -0.000026f, -0.000468f, +0.000729f, -0.000876f, - -0.000231f, +0.000414f, -0.000118f, -0.000958f, +0.000860f, -0.000404f, -0.000647f, -0.000296f, +0.000064f, +0.000312f, - -0.000104f, -0.000650f, +0.000311f, +0.000190f, +0.000126f, +0.000278f, -0.000254f, +0.000401f, -0.000212f, +0.000062f, - +0.000486f, +0.000372f, -0.000284f, -0.000368f, -0.000034f, +0.000150f, -0.000184f, +0.000166f, +0.000042f, -0.000044f, - -0.000139f, -0.000025f, -0.000092f, -0.000118f, +0.000071f, -0.000041f, -0.000167f, +0.000077f, +0.000071f, -0.000027f, - -0.000001f, +0.000129f, +0.000102f, +0.000032f, +0.000031f, -0.000019f, -0.000018f, -0.000046f, -0.000069f, +0.000016f, - -0.000021f, -0.000085f, -0.000112f, -0.000013f, +0.000053f, -0.000035f - }, - { - +0.003692f, +0.027648f, -0.004632f, +0.003531f, +0.000794f, +0.001325f, -0.003080f, +0.001787f, -0.000081f, -0.000674f, - -0.000157f, -0.004506f, -0.000024f, +0.000983f, -0.010709f, +0.001057f, +0.005333f, -0.000987f, -0.000915f, +0.000543f, - -0.000033f, -0.000238f, -0.000213f, +0.001211f, +0.001892f, +0.000742f, +0.000180f, +0.000827f, -0.001260f, -0.000675f, - -0.000271f, -0.000289f, +0.000957f, +0.000614f, -0.000425f, +0.000373f, +0.001027f, +0.000623f, -0.000172f, -0.000185f, - -0.000516f, -0.000073f, +0.000678f, +0.000059f, +0.001318f, +0.000046f, +0.000132f, -0.000096f, +0.000017f, +0.000102f, - -0.000326f, +0.000059f, -0.000098f, -0.000230f, -0.000133f, +0.000145f, +0.000514f, +0.000025f, -0.000067f, +0.000085f, - +0.000377f, +0.000230f, -0.000222f, +0.000144f, +0.000194f, +0.000242f, +0.000117f, -0.000039f, -0.000043f, -0.000034f, - +0.000154f, -0.000365f, -0.000078f, -0.000033f, +0.000019f, +0.000058f, +0.000021f, -0.000104f, +0.000025f, +0.000114f, - +0.000033f, -0.000108f, +0.000027f, +0.000054f, +0.000021f, -0.000010f, +0.000063f, -0.000034f, -0.000111f, +0.000033f, - -0.000108f, -0.000057f, +0.000020f, -0.000045f, +0.000002f, -0.000009f - }, - { - +0.000073f, -0.004271f, +0.000269f, +0.000620f, +0.000988f, +0.000193f, -0.000344f, -0.000752f, +0.001028f, +0.000708f, - +0.000651f, +0.001128f, -0.000066f, -0.008731f, -0.034432f, -0.003603f, +0.002932f, +0.000124f, +0.002467f, -0.002760f, - +0.003610f, +0.000523f, -0.000658f, +0.000303f, +0.001441f, +0.000693f, -0.001544f, -0.000882f, -0.000455f, +0.000149f, - -0.000429f, +0.001251f, +0.000451f, -0.000579f, -0.001177f, +0.000873f, -0.001722f, -0.000992f, +0.000485f, -0.001215f, - +0.001066f, -0.000262f, -0.000467f, +0.000232f, +0.000720f, -0.000598f, +0.000030f, +0.000249f, +0.000068f, -0.000473f, - -0.000293f, +0.000219f, +0.000142f, -0.000108f, -0.000043f, -0.000102f, -0.000539f, -0.000310f, +0.000115f, -0.000330f, - -0.000069f, -0.000017f, +0.000181f, +0.000139f, +0.000015f, -0.000133f, +0.000306f, +0.000370f, +0.000034f, -0.000064f, - -0.000114f, -0.000182f, -0.000151f, -0.000019f, -0.000140f, -0.000028f, +0.000177f, +0.000018f, -0.000015f, -0.000200f, - -0.000046f, +0.000035f, +0.000060f, +0.000097f, -0.000127f, -0.000005f, -0.000079f, -0.000022f, +0.000048f, +0.000002f, - -0.000012f, +0.000022f, +0.000004f, -0.000042f, -0.000050f, +0.000007f - } - }, - { - { - +0.010883f, +0.008754f, +0.009926f, +0.003321f, +0.000677f, +0.000394f, -0.000667f, -0.000414f, -0.000626f, -0.000671f, - -0.000852f, +0.000934f, +0.000886f, +0.000759f, -0.004287f, +0.002011f, +0.000555f, -0.000401f, -0.001913f, +0.003524f, - -0.000541f, -0.000676f, +0.001086f, -0.000710f, -0.000426f, +0.000503f, +0.000972f, -0.000118f, -0.000751f, -0.000483f, - +0.000536f, +0.000071f, -0.001125f, +0.000934f, +0.000786f, +0.000324f, -0.001115f, +0.000142f, -0.000331f, +0.000614f, - +0.000870f, -0.000105f, -0.001174f, +0.000406f, +0.000609f, +0.000296f, +0.000457f, -0.000134f, +0.000562f, -0.000448f, - -0.000410f, +0.000145f, +0.000695f, +0.000526f, +0.000430f, -0.000135f, +0.000410f, +0.000237f, +0.000351f, +0.000110f, - -0.000248f, +0.000054f, +0.000189f, +0.000115f, +0.000076f, +0.000219f, -0.000214f, -0.000163f, +0.000106f, +0.000052f, - +0.000181f, -0.000206f, +0.000136f, -0.000042f, +0.000048f, -0.000079f, -0.000135f, +0.000110f, +0.000015f, -0.000201f, - +0.000025f, +0.000010f, -0.000056f, -0.000023f, +0.000045f, -0.000055f, +0.000003f, -0.000026f, -0.000070f, -0.000098f, - +0.000026f, +0.000015f, +0.000038f, +0.000043f, +0.000005f, -0.000023f - }, - { - -0.000130f, -0.007026f, +0.009720f, +0.000357f, -0.001231f, +0.000861f, -0.002579f, -0.000658f, -0.000086f, +0.000781f, - -0.000746f, +0.000042f, +0.000347f, -0.000035f, -0.002222f, +0.000392f, -0.001436f, -0.000101f, +0.002247f, +0.002214f, - -0.000038f, -0.001735f, -0.000120f, -0.000388f, +0.001376f, -0.000742f, +0.000857f, -0.000724f, +0.000191f, +0.001301f, - -0.000941f, -0.000289f, -0.000700f, +0.000606f, -0.000745f, -0.000427f, -0.000312f, -0.000561f, +0.001023f, +0.000406f, - +0.000625f, +0.000070f, +0.000226f, +0.000034f, -0.000136f, +0.000001f, +0.000085f, +0.000231f, +0.000390f, -0.000297f, - +0.000109f, -0.000299f, -0.000047f, +0.000178f, +0.000465f, +0.000218f, -0.000383f, -0.000224f, +0.000231f, -0.000116f, - -0.000469f, -0.000179f, +0.000122f, +0.000112f, -0.000031f, +0.000160f, +0.000001f, -0.000090f, +0.000135f, +0.000060f, - -0.000048f, -0.000017f, +0.000122f, +0.000021f, -0.000036f, +0.000114f, +0.000051f, +0.000039f, -0.000147f, -0.000182f, - +0.000217f, -0.000001f, +0.000019f, -0.000029f, -0.000030f, -0.000023f, +0.000028f, -0.000026f, -0.000102f, +0.000043f, - +0.000057f, -0.000006f, -0.000026f, -0.000160f, +0.000022f, +0.000052f - }, - { - -0.000915f, +0.076678f, -0.002030f, +0.001629f, -0.000629f, +0.000773f, -0.000051f, +0.000723f, +0.000281f, -0.000596f, - -0.001726f, +0.000067f, +0.001517f, -0.001549f, +0.000539f, -0.000582f, -0.001754f, +0.001986f, -0.000169f, -0.002483f, - +0.001364f, -0.000108f, +0.000842f, +0.000751f, -0.001116f, -0.002266f, +0.000280f, +0.000334f, +0.000327f, -0.001802f, - +0.001017f, +0.000000f, -0.001469f, +0.000359f, -0.000075f, +0.000784f, -0.000546f, +0.001056f, -0.000338f, +0.000762f, - +0.000498f, +0.000505f, -0.000093f, -0.000068f, +0.000416f, -0.000873f, +0.000260f, +0.000085f, +0.000381f, +0.000368f, - -0.000190f, +0.000153f, -0.000396f, +0.000750f, -0.000354f, +0.000172f, -0.000226f, +0.000186f, +0.000349f, +0.000013f, - -0.000257f, -0.000059f, -0.000047f, +0.000070f, +0.000011f, +0.000031f, -0.000184f, +0.000132f, -0.000071f, +0.000164f, - -0.000076f, -0.000227f, -0.000096f, +0.000139f, -0.000073f, +0.000139f, +0.000036f, -0.000080f, -0.000005f, +0.000038f, - -0.000086f, -0.000171f, +0.000041f, +0.000153f, -0.000057f, -0.000079f, -0.000102f, +0.000052f, -0.000008f, +0.000023f, - -0.000013f, +0.000010f, -0.000040f, +0.000017f, -0.000002f, -0.000060f - }, - { - +0.008917f, -0.055842f, -0.000161f, +0.005486f, -0.002097f, +0.000579f, -0.000245f, +0.000421f, -0.000784f, +0.000298f, - +0.000047f, +0.000302f, -0.001198f, +0.000978f, +0.001938f, +0.001983f, -0.000686f, +0.000747f, +0.001368f, +0.001020f, - -0.000188f, -0.000232f, +0.000424f, +0.000237f, +0.000185f, +0.000006f, -0.000352f, +0.000027f, -0.000901f, +0.000281f, - +0.000274f, -0.000570f, -0.000240f, -0.001568f, +0.000261f, -0.001176f, -0.000591f, +0.000658f, +0.000423f, -0.000113f, - +0.000684f, +0.000096f, -0.000480f, -0.000902f, -0.000008f, -0.000465f, -0.000237f, +0.000521f, +0.000412f, -0.000290f, - -0.000133f, +0.000120f, -0.000077f, -0.000270f, -0.000414f, +0.000066f, -0.000053f, -0.000428f, +0.000110f, -0.000088f, - -0.000338f, -0.000130f, -0.000081f, -0.000090f, -0.000283f, +0.000100f, -0.000195f, +0.000085f, +0.000086f, -0.000265f, - -0.000011f, +0.000148f, +0.000128f, -0.000102f, +0.000075f, -0.000114f, -0.000037f, -0.000114f, +0.000007f, -0.000009f, - +0.000005f, +0.000063f, +0.000033f, +0.000025f, -0.000089f, +0.000019f, -0.000038f, +0.000066f, +0.000043f, -0.000065f, - -0.000078f, +0.000046f, +0.000005f, -0.000051f, -0.000002f, +0.000015f - }, - { - +0.000800f, -0.007832f, -0.001033f, -0.001229f, -0.000105f, +0.000103f, -0.000329f, -0.000505f, -0.000425f, -0.000170f, - +0.000679f, -0.000563f, -0.000035f, +0.000145f, +0.001310f, +0.001079f, +0.000694f, -0.009410f, +0.003940f, +0.001284f, - +0.001064f, +0.001968f, -0.002379f, +0.001172f, -0.002212f, +0.001518f, -0.002195f, +0.000209f, +0.001243f, +0.001105f, - +0.000185f, +0.001547f, -0.000406f, -0.001350f, +0.000032f, -0.001034f, +0.000890f, -0.001034f, +0.000401f, +0.000753f, - -0.000128f, +0.000236f, -0.000881f, +0.000081f, -0.000277f, -0.000566f, -0.000225f, +0.000065f, +0.000062f, +0.000048f, - +0.000404f, +0.000564f, +0.000195f, +0.000345f, +0.000246f, +0.000155f, +0.000196f, -0.000240f, -0.000018f, +0.000171f, - +0.000227f, -0.000258f, +0.000229f, -0.000137f, -0.000522f, -0.000136f, +0.000040f, +0.000150f, +0.000057f, -0.000037f, - +0.000191f, +0.000141f, +0.000119f, -0.000081f, -0.000005f, -0.000235f, +0.000164f, -0.000042f, -0.000161f, -0.000062f, - -0.000036f, +0.000080f, +0.000087f, -0.000116f, -0.000003f, +0.000049f, +0.000007f, +0.000052f, +0.000019f, -0.000014f, - -0.000006f, -0.000043f, +0.000023f, +0.000086f, -0.000057f, -0.000014f - }, - { - +0.012509f, -0.093358f, +0.010767f, -0.000663f, -0.002407f, +0.000238f, -0.000836f, +0.000731f, +0.001358f, -0.000987f, - -0.001030f, +0.000469f, +0.000424f, -0.000808f, -0.000958f, +0.003313f, +0.000866f, -0.000525f, -0.000136f, -0.000439f, - -0.000503f, -0.000773f, +0.000120f, -0.000944f, +0.000164f, +0.000667f, -0.000109f, +0.000123f, +0.000613f, +0.000293f, - -0.000547f, +0.000329f, -0.000380f, -0.000496f, +0.000399f, -0.000304f, -0.000747f, +0.000122f, +0.000174f, +0.000628f, - -0.000314f, +0.000151f, -0.001241f, -0.000060f, +0.000512f, +0.000153f, +0.000166f, -0.000283f, -0.000301f, +0.000257f, - +0.000118f, -0.000535f, -0.000544f, +0.000127f, -0.000118f, +0.000087f, -0.000180f, -0.000413f, +0.000165f, +0.000099f, - -0.000014f, +0.000055f, -0.000314f, +0.000029f, +0.000259f, +0.000104f, -0.000114f, -0.000150f, -0.000039f, -0.000119f, - +0.000123f, +0.000055f, +0.000059f, +0.000018f, +0.000047f, -0.000004f, -0.000062f, +0.000057f, +0.000143f, -0.000023f, - +0.000062f, +0.000155f, +0.000008f, -0.000020f, -0.000075f, -0.000007f, +0.000014f, -0.000057f, +0.000045f, +0.000023f, - -0.000011f, +0.000009f, -0.000011f, +0.000159f, -0.000031f, -0.000012f - }, - { - +0.000250f, -0.007009f, +0.001174f, +0.000622f, -0.000092f, -0.000124f, -0.000691f, +0.000998f, -0.000625f, +0.000438f, - -0.000276f, -0.000037f, -0.000043f, -0.000488f, -0.005095f, +0.001347f, +0.004669f, -0.001533f, +0.002430f, +0.001255f, - -0.001477f, +0.000779f, -0.001944f, +0.000250f, +0.002304f, -0.001323f, +0.003080f, -0.001587f, -0.000500f, +0.000813f, - -0.000762f, +0.001724f, -0.000089f, -0.000971f, -0.000553f, -0.000046f, +0.000260f, +0.000882f, +0.000241f, -0.000482f, - +0.000105f, +0.001252f, +0.000297f, +0.000498f, +0.000031f, -0.000316f, +0.000106f, -0.000044f, -0.000104f, +0.000564f, - -0.000403f, -0.000226f, -0.000131f, -0.000063f, -0.000268f, -0.000205f, -0.000106f, +0.000296f, -0.000312f, +0.000158f, - +0.000077f, -0.000053f, +0.000013f, +0.000059f, -0.000013f, +0.000018f, -0.000153f, -0.000341f, -0.000108f, +0.000272f, - +0.000051f, -0.000280f, -0.000087f, +0.000038f, -0.000101f, +0.000082f, -0.000219f, -0.000079f, +0.000072f, +0.000007f, - -0.000014f, -0.000020f, +0.000070f, -0.000008f, -0.000048f, +0.000015f, +0.000020f, -0.000000f, +0.000026f, +0.000059f, - +0.000037f, +0.000020f, -0.000012f, +0.000015f, +0.000022f, -0.000020f - }, - { - +0.003355f, +0.040596f, -0.001507f, +0.000146f, -0.001300f, +0.000444f, +0.000510f, -0.000730f, +0.000373f, -0.000503f, - -0.000407f, +0.001277f, +0.000332f, -0.000981f, +0.000174f, -0.000052f, +0.000116f, +0.000945f, +0.000183f, -0.000455f, - +0.000450f, +0.000617f, -0.001275f, +0.000314f, +0.000809f, -0.000514f, -0.000032f, -0.000959f, +0.000224f, -0.000794f, - +0.000187f, +0.000130f, +0.000764f, -0.000241f, +0.000208f, -0.000619f, +0.000736f, -0.000179f, +0.000407f, +0.000010f, - +0.000240f, -0.000740f, +0.000632f, -0.000246f, -0.000712f, +0.000763f, -0.000097f, +0.000169f, -0.000291f, -0.000369f, - -0.000088f, +0.000005f, +0.000027f, -0.000116f, -0.000056f, +0.000224f, -0.000263f, +0.000134f, +0.000345f, -0.000006f, - +0.000196f, -0.000018f, -0.000025f, +0.000007f, +0.000006f, +0.000122f, -0.000060f, +0.000281f, -0.000021f, +0.000043f, - +0.000087f, +0.000002f, -0.000081f, -0.000114f, -0.000030f, +0.000137f, -0.000134f, -0.000065f, +0.000163f, -0.000179f, - -0.000040f, +0.000060f, -0.000023f, -0.000021f, +0.000039f, -0.000066f, +0.000023f, +0.000007f, -0.000055f, +0.000004f, - +0.000037f, +0.000044f, -0.000010f, -0.000003f, -0.000011f, +0.000038f - }, - { - -0.000174f, -0.002107f, -0.000790f, +0.001130f, -0.000148f, +0.000262f, -0.000549f, -0.000578f, -0.000256f, +0.000154f, - +0.000101f, +0.000652f, -0.000225f, +0.001578f, +0.002086f, -0.002299f, +0.000098f, +0.000323f, -0.000515f, +0.001428f, - -0.000399f, -0.001118f, +0.000528f, +0.000148f, +0.001868f, +0.000457f, -0.001993f, +0.000017f, -0.000484f, -0.000772f, - +0.002642f, -0.001908f, +0.000663f, -0.000111f, -0.000932f, +0.000777f, +0.000056f, -0.000402f, +0.000763f, -0.000557f, - -0.000569f, -0.000414f, -0.000401f, -0.000388f, -0.000037f, +0.000060f, +0.000147f, +0.000588f, -0.000011f, +0.000370f, - +0.000109f, -0.000083f, -0.000152f, -0.000472f, -0.000046f, +0.000347f, -0.000198f, -0.000241f, -0.000009f, +0.000406f, - +0.000189f, +0.000029f, -0.000179f, +0.000167f, +0.000226f, +0.000153f, +0.000172f, -0.000047f, +0.000028f, +0.000086f, - +0.000127f, +0.000014f, -0.000077f, -0.000079f, -0.000161f, +0.000035f, -0.000036f, -0.000106f, -0.000047f, -0.000007f, - +0.000050f, +0.000082f, +0.000032f, +0.000036f, -0.000057f, -0.000122f, -0.000121f, -0.000042f, +0.000027f, +0.000031f, - -0.000053f, +0.000042f, -0.000020f, -0.000078f, -0.000081f, -0.000033f - }, - { - +0.002213f, -0.045965f, -0.012167f, +0.002048f, +0.001316f, -0.005506f, +0.002989f, -0.001102f, -0.000459f, -0.000893f, - -0.000140f, -0.001101f, -0.000253f, +0.000543f, -0.002475f, +0.000849f, -0.001509f, +0.000815f, -0.001537f, +0.001456f, - -0.001342f, +0.000053f, -0.000949f, +0.000213f, -0.000643f, -0.000665f, +0.000474f, -0.000764f, -0.000603f, +0.000212f, - +0.000203f, +0.000424f, +0.000847f, -0.001687f, +0.001323f, +0.000268f, +0.000234f, -0.000090f, +0.000396f, -0.000062f, - -0.000208f, -0.000516f, +0.000685f, +0.000575f, -0.000817f, -0.000407f, +0.000120f, -0.000152f, -0.000110f, -0.000178f, - +0.000094f, +0.000106f, -0.000091f, -0.000054f, -0.000111f, -0.000056f, -0.000013f, +0.000074f, +0.000061f, -0.000115f, - +0.000066f, +0.000015f, +0.000037f, -0.000122f, +0.000016f, -0.000118f, +0.000052f, +0.000088f, -0.000070f, -0.000088f, - -0.000013f, +0.000013f, -0.000043f, +0.000009f, -0.000057f, +0.000029f, +0.000037f, +0.000069f, -0.000101f, +0.000022f, - +0.000142f, +0.000019f, -0.000131f, -0.000064f, -0.000019f, -0.000135f, -0.000080f, +0.000007f, -0.000091f, +0.000034f, - +0.000038f, +0.000021f, +0.000003f, -0.000017f, -0.000039f, -0.000058f - }, - { - +0.000537f, +0.008323f, -0.003034f, +0.004021f, +0.000059f, -0.000202f, +0.000382f, -0.002143f, -0.001035f, -0.000622f, - +0.000864f, +0.001516f, -0.000201f, -0.001948f, +0.000596f, -0.000748f, -0.001097f, -0.000830f, -0.002459f, +0.000729f, - +0.000862f, -0.000099f, -0.000157f, +0.000651f, +0.000132f, -0.001270f, +0.000629f, -0.001317f, +0.000975f, +0.000945f, - -0.000281f, -0.000274f, -0.000011f, -0.000386f, +0.000112f, -0.000252f, +0.000905f, +0.000248f, -0.000408f, -0.000314f, - -0.000545f, -0.000184f, +0.000400f, -0.000539f, +0.000347f, +0.000256f, -0.000242f, -0.000121f, -0.000201f, -0.000190f, - -0.000219f, +0.000121f, +0.000134f, +0.000259f, +0.000134f, +0.000104f, +0.000029f, -0.000123f, -0.000091f, +0.000025f, - -0.000220f, -0.000082f, +0.000372f, -0.000049f, -0.000064f, +0.000048f, -0.000005f, -0.000038f, +0.000032f, +0.000054f, - +0.000285f, +0.000015f, +0.000136f, +0.000006f, +0.000023f, +0.000066f, +0.000181f, +0.000078f, -0.000007f, -0.000055f, - -0.000006f, -0.000013f, -0.000104f, +0.000134f, +0.000061f, -0.000066f, +0.000071f, -0.000022f, +0.000045f, -0.000019f, - -0.000062f, +0.000010f, +0.000038f, -0.000001f, -0.000046f, +0.000021f - }, - { - -0.003821f, +0.003990f, -0.001485f, -0.002649f, -0.000857f, +0.001613f, +0.000529f, +0.000300f, +0.000238f, +0.000455f, - +0.001150f, +0.000104f, +0.001747f, -0.002422f, +0.000849f, -0.000073f, +0.000619f, +0.000703f, -0.000746f, -0.000276f, - -0.000388f, -0.000382f, +0.000268f, +0.000740f, -0.000689f, -0.000176f, -0.000938f, +0.000240f, -0.000096f, -0.000496f, - -0.000289f, -0.000392f, +0.000426f, -0.000364f, -0.000490f, +0.000225f, +0.001283f, +0.001108f, +0.000285f, -0.000617f, - -0.000291f, -0.000076f, -0.000159f, -0.000380f, +0.000339f, +0.000046f, +0.000014f, +0.000038f, -0.000155f, +0.000153f, - -0.000543f, +0.000212f, -0.000200f, +0.000177f, -0.000025f, -0.000165f, -0.000129f, +0.000137f, +0.000119f, -0.000082f, - -0.000298f, +0.000165f, +0.000142f, -0.000136f, -0.000081f, +0.000218f, +0.000156f, +0.000142f, +0.000070f, -0.000161f, - +0.000041f, +0.000053f, +0.000013f, -0.000016f, -0.000081f, +0.000072f, -0.000018f, +0.000041f, +0.000114f, -0.000022f, - -0.000048f, -0.000111f, +0.000071f, +0.000024f, +0.000004f, +0.000073f, -0.000013f, -0.000039f, +0.000009f, -0.000087f, - -0.000041f, -0.000040f, -0.000026f, +0.000048f, -0.000016f, -0.000015f - }, - { - -0.000272f, -0.001315f, +0.001891f, -0.001712f, -0.000359f, -0.000371f, +0.000194f, -0.000629f, +0.001055f, -0.000431f, - -0.000229f, +0.000377f, -0.005017f, +0.002378f, -0.007947f, +0.004740f, +0.000631f, +0.002047f, +0.000501f, -0.000033f, - +0.003370f, -0.003181f, -0.004056f, +0.000312f, -0.000093f, -0.000648f, +0.000305f, -0.000620f, +0.000561f, +0.000316f, - -0.000362f, +0.000554f, -0.001532f, -0.000044f, +0.000181f, +0.001148f, -0.000970f, -0.000136f, +0.000591f, -0.000178f, - -0.000221f, -0.000153f, -0.000451f, -0.001030f, +0.000621f, -0.000534f, -0.000884f, -0.000177f, -0.000135f, +0.000353f, - +0.000145f, -0.000706f, +0.000359f, +0.000095f, -0.000378f, +0.000028f, -0.000115f, +0.000229f, +0.000032f, +0.000333f, - +0.000196f, -0.000099f, -0.000180f, -0.000035f, +0.000108f, +0.000056f, -0.000196f, +0.000206f, -0.000092f, +0.000115f, - +0.000028f, +0.000202f, -0.000182f, -0.000106f, -0.000035f, -0.000061f, -0.000115f, +0.000070f, +0.000082f, -0.000023f, - +0.000084f, +0.000113f, +0.000017f, +0.000007f, +0.000005f, +0.000016f, -0.000087f, +0.000026f, -0.000038f, +0.000112f, - +0.000008f, -0.000149f, -0.000063f, +0.000089f, -0.000037f, -0.000028f - }, - { - -0.006019f, +0.018320f, -0.001163f, +0.003479f, +0.000298f, +0.002254f, +0.000761f, +0.001677f, -0.000850f, +0.000412f, - +0.000952f, -0.002751f, +0.001478f, +0.002630f, -0.009095f, +0.000846f, +0.003198f, -0.000385f, -0.000695f, -0.000703f, - -0.000229f, -0.000423f, -0.000850f, -0.000687f, +0.000785f, -0.000212f, +0.000757f, +0.000908f, -0.001443f, +0.000504f, - -0.000060f, +0.000609f, +0.001595f, +0.000405f, -0.000833f, +0.000950f, +0.000815f, +0.000237f, +0.000054f, +0.000084f, - -0.000538f, -0.001176f, +0.000515f, -0.000131f, +0.000909f, -0.000260f, -0.000159f, -0.000666f, -0.000085f, -0.000377f, - +0.000026f, -0.000200f, -0.000132f, +0.000184f, +0.000184f, +0.000005f, +0.000223f, -0.000276f, +0.000033f, -0.000416f, - +0.000161f, +0.000246f, -0.000033f, +0.000343f, +0.000132f, +0.000238f, +0.000074f, +0.000130f, -0.000068f, +0.000105f, - +0.000151f, -0.000094f, +0.000065f, +0.000037f, -0.000031f, +0.000057f, -0.000011f, +0.000047f, +0.000083f, +0.000091f, - +0.000043f, -0.000029f, +0.000138f, +0.000017f, +0.000058f, -0.000001f, -0.000101f, -0.000042f, -0.000018f, +0.000043f, - -0.000061f, +0.000019f, +0.000030f, +0.000030f, -0.000033f, +0.000004f - }, - { - -0.000266f, -0.003849f, -0.001120f, -0.000599f, +0.000241f, +0.000055f, -0.000124f, -0.000093f, +0.001456f, +0.001052f, - +0.000856f, +0.000178f, -0.000311f, +0.010414f, +0.000390f, +0.001333f, +0.000651f, +0.000099f, +0.003707f, -0.002515f, - -0.000125f, -0.001057f, +0.000457f, -0.000129f, +0.000073f, +0.000925f, +0.000372f, -0.000639f, -0.001411f, -0.001546f, - -0.000916f, +0.000662f, -0.001218f, -0.000006f, -0.000025f, +0.000102f, -0.001030f, +0.000267f, +0.000557f, -0.000927f, - +0.000104f, -0.000396f, -0.000209f, +0.000297f, +0.000305f, -0.000290f, +0.000101f, +0.000151f, -0.000080f, -0.000324f, - +0.000137f, +0.000034f, -0.000151f, +0.000233f, +0.000141f, -0.000171f, -0.000532f, -0.000256f, -0.000147f, -0.000568f, - -0.000008f, +0.000045f, +0.000044f, +0.000018f, +0.000027f, -0.000033f, +0.000222f, +0.000036f, +0.000023f, +0.000021f, - +0.000007f, -0.000112f, -0.000069f, +0.000039f, -0.000125f, +0.000146f, -0.000054f, -0.000042f, +0.000022f, -0.000055f, - +0.000138f, +0.000084f, +0.000056f, -0.000068f, -0.000045f, +0.000075f, -0.000094f, -0.000034f, +0.000064f, -0.000043f, - -0.000023f, +0.000046f, +0.000023f, -0.000027f, -0.000003f, +0.000024f - } - }, - { - { - -0.012884f, +0.063306f, -0.005824f, +0.003779f, +0.000939f, -0.001030f, +0.000223f, -0.000724f, -0.000048f, -0.000299f, - +0.000872f, -0.000592f, -0.000684f, -0.000858f, -0.000509f, +0.001470f, +0.000588f, -0.001213f, +0.000730f, +0.001175f, - -0.000375f, -0.000536f, +0.000933f, -0.000370f, -0.000559f, +0.000221f, +0.000069f, +0.000233f, -0.000265f, -0.000501f, - +0.000072f, -0.000117f, -0.000009f, +0.000944f, +0.000260f, -0.000451f, +0.000462f, +0.000566f, +0.000058f, -0.000265f, - +0.000423f, -0.000387f, -0.000113f, +0.000121f, +0.000441f, +0.000757f, -0.000343f, -0.000162f, +0.000232f, -0.000147f, - +0.000217f, -0.000103f, +0.000541f, +0.000255f, +0.000235f, +0.000266f, -0.000085f, +0.000106f, +0.000199f, +0.000076f, - +0.000257f, +0.000010f, -0.000047f, -0.000012f, -0.000092f, +0.000036f, +0.000068f, +0.000040f, -0.000021f, -0.000077f, - -0.000058f, +0.000000f, +0.000061f, +0.000068f, -0.000071f, -0.000175f, -0.000028f, +0.000004f, +0.000028f, +0.000074f, - +0.000072f, +0.000146f, +0.000014f, -0.000017f, -0.000022f, -0.000056f, +0.000117f, -0.000053f, +0.000046f, -0.000055f, - +0.000010f, +0.000007f, +0.000027f, +0.000010f, +0.000020f, +0.000003f - }, - { - +0.000760f, +0.007540f, +0.000117f, +0.002018f, +0.000769f, -0.001445f, -0.001010f, -0.000147f, +0.000024f, -0.000521f, - -0.000002f, +0.000338f, +0.000321f, -0.001152f, -0.000487f, -0.001728f, -0.003525f, -0.000704f, +0.003408f, +0.001195f, - +0.000106f, -0.001564f, -0.002509f, +0.000206f, +0.000488f, +0.001308f, +0.000085f, +0.000084f, +0.001063f, +0.000685f, - -0.000590f, -0.000200f, +0.000719f, +0.000086f, -0.000704f, -0.000519f, -0.000306f, +0.000108f, +0.000262f, +0.000714f, - -0.000193f, +0.000817f, +0.000813f, +0.000301f, -0.000047f, -0.000124f, +0.000257f, +0.000071f, -0.000001f, +0.000146f, - +0.000163f, -0.000252f, +0.000416f, +0.000398f, +0.000188f, -0.000532f, -0.000212f, -0.000228f, -0.000016f, +0.000131f, - -0.000003f, -0.000002f, -0.000158f, +0.000142f, +0.000079f, -0.000084f, +0.000210f, +0.000250f, +0.000009f, -0.000032f, - +0.000135f, -0.000003f, -0.000051f, -0.000024f, +0.000081f, +0.000078f, -0.000146f, -0.000097f, -0.000081f, +0.000089f, - +0.000036f, -0.000067f, +0.000021f, +0.000074f, -0.000050f, +0.000103f, +0.000088f, -0.000095f, +0.000032f, +0.000065f, - -0.000084f, -0.000024f, +0.000052f, +0.000039f, +0.000065f, -0.000056f - }, - { - -0.000282f, +0.043048f, +0.014934f, +0.006078f, +0.004036f, -0.000658f, +0.000396f, +0.000365f, -0.000412f, -0.000927f, - -0.000014f, -0.000910f, -0.000796f, +0.000162f, +0.001005f, -0.000634f, +0.000036f, +0.000329f, -0.000701f, -0.001004f, - -0.000058f, +0.000818f, +0.000352f, +0.000144f, -0.000715f, -0.000430f, +0.000463f, -0.000420f, +0.000034f, -0.000550f, - -0.001333f, +0.000003f, +0.000029f, +0.000347f, -0.000572f, +0.000118f, +0.001394f, -0.000712f, +0.000009f, +0.000021f, - +0.000546f, -0.000227f, +0.000649f, +0.000283f, +0.000567f, -0.000067f, -0.000175f, +0.000422f, +0.000324f, +0.000005f, - +0.000280f, -0.000025f, +0.000311f, -0.000060f, +0.000522f, +0.000160f, -0.000128f, +0.000048f, +0.000005f, +0.000050f, - +0.000041f, +0.000062f, +0.000223f, -0.000103f, +0.000043f, +0.000234f, -0.000097f, +0.000002f, +0.000117f, +0.000126f, - -0.000051f, -0.000141f, +0.000041f, +0.000048f, +0.000010f, -0.000029f, -0.000127f, +0.000030f, +0.000087f, -0.000068f, - -0.000054f, -0.000042f, +0.000085f, -0.000025f, +0.000039f, +0.000024f, -0.000005f, -0.000045f, +0.000012f, +0.000023f, - -0.000042f, -0.000101f, -0.000065f, +0.000010f, -0.000084f, -0.000003f - }, - { - -0.006355f, -0.027077f, -0.007063f, +0.003165f, +0.000191f, -0.000274f, +0.000269f, +0.000146f, -0.000156f, -0.000272f, - -0.001070f, +0.000442f, -0.001196f, +0.001137f, +0.001410f, +0.000730f, -0.000176f, +0.001342f, +0.000136f, +0.000099f, - +0.000286f, -0.000040f, +0.000955f, -0.000298f, -0.000515f, -0.000306f, -0.000974f, +0.000462f, -0.000084f, +0.001004f, - +0.000542f, -0.000963f, +0.000514f, -0.001063f, -0.000544f, -0.000262f, -0.001060f, +0.000612f, -0.000039f, +0.000255f, - +0.000388f, -0.000237f, -0.000051f, -0.000607f, -0.000467f, +0.000414f, +0.000230f, +0.000028f, +0.000384f, -0.000321f, - -0.000037f, -0.000151f, -0.000210f, -0.000045f, -0.000260f, +0.000262f, -0.000103f, -0.000118f, -0.000076f, -0.000279f, - -0.000213f, +0.000070f, -0.000061f, -0.000077f, +0.000096f, -0.000087f, +0.000106f, +0.000039f, -0.000075f, -0.000007f, - -0.000000f, -0.000049f, -0.000149f, -0.000020f, -0.000043f, -0.000022f, -0.000025f, -0.000107f, +0.000010f, +0.000089f, - +0.000143f, +0.000099f, +0.000040f, -0.000077f, -0.000054f, -0.000084f, -0.000001f, +0.000014f, -0.000088f, -0.000014f, - +0.000040f, +0.000066f, -0.000034f, -0.000012f, +0.000015f, -0.000007f - }, - { - -0.000529f, -0.012215f, +0.000965f, +0.000038f, +0.000134f, -0.000397f, -0.000168f, -0.000317f, +0.000035f, +0.000609f, - +0.000006f, -0.000651f, -0.000004f, +0.001634f, +0.002505f, -0.003203f, -0.006330f, +0.000905f, +0.003130f, -0.000385f, - +0.001047f, +0.000545f, -0.000823f, +0.000611f, -0.001335f, -0.001601f, -0.000965f, +0.000236f, +0.000089f, +0.001379f, - +0.001391f, +0.000575f, +0.000092f, -0.000355f, -0.000475f, -0.000367f, -0.000128f, +0.000139f, -0.000066f, -0.000052f, - +0.000584f, -0.000269f, +0.000061f, -0.000092f, -0.000082f, -0.000194f, -0.000224f, +0.000245f, +0.000310f, +0.000078f, - +0.000898f, +0.000142f, +0.000265f, +0.000291f, +0.000199f, -0.000067f, +0.000096f, +0.000101f, +0.000203f, -0.000080f, - +0.000355f, -0.000029f, +0.000124f, -0.000111f, +0.000008f, +0.000049f, +0.000099f, +0.000083f, -0.000104f, +0.000139f, - +0.000121f, -0.000097f, +0.000011f, -0.000069f, -0.000170f, -0.000002f, +0.000122f, +0.000026f, +0.000072f, +0.000055f, - +0.000090f, +0.000030f, -0.000109f, -0.000021f, +0.000055f, +0.000012f, +0.000055f, -0.000006f, +0.000027f, +0.000021f, - -0.000030f, +0.000060f, +0.000035f, -0.000056f, -0.000022f, +0.000053f - }, - { - -0.009788f, -0.046408f, -0.006548f, -0.001041f, -0.000559f, -0.000284f, +0.000547f, +0.000337f, -0.000270f, +0.000926f, - +0.001040f, -0.000099f, -0.000364f, -0.000853f, +0.000070f, +0.003268f, +0.000697f, -0.000606f, +0.000244f, -0.000191f, - -0.000108f, +0.000394f, -0.000897f, -0.001174f, +0.000287f, +0.001027f, -0.000410f, +0.000227f, +0.000689f, +0.000251f, - -0.000704f, -0.000044f, -0.000580f, -0.000825f, +0.000624f, -0.000344f, +0.000222f, -0.000794f, +0.000053f, +0.000536f, - +0.000448f, +0.000228f, -0.001414f, +0.000127f, +0.000371f, +0.000249f, -0.000381f, -0.000270f, -0.000330f, +0.000071f, - -0.000096f, -0.000519f, -0.000076f, +0.000208f, +0.000254f, +0.000034f, +0.000150f, +0.000030f, -0.000056f, -0.000242f, - -0.000018f, +0.000054f, +0.000007f, +0.000222f, +0.000275f, -0.000070f, -0.000007f, -0.000022f, -0.000145f, +0.000062f, - +0.000080f, +0.000114f, +0.000001f, +0.000041f, +0.000058f, +0.000010f, +0.000069f, -0.000009f, -0.000063f, +0.000005f, - +0.000003f, -0.000024f, -0.000170f, -0.000069f, +0.000031f, +0.000020f, +0.000077f, +0.000027f, +0.000056f, -0.000035f, - +0.000002f, +0.000013f, +0.000050f, +0.000031f, -0.000049f, +0.000006f - }, - { - -0.000657f, -0.001955f, +0.001782f, -0.000375f, -0.000148f, -0.000215f, -0.000201f, +0.000184f, +0.000198f, -0.000497f, - +0.000217f, +0.000306f, -0.000655f, -0.003623f, -0.002936f, +0.001421f, -0.000108f, -0.000744f, -0.001195f, +0.001387f, - +0.000314f, +0.000036f, +0.001512f, -0.002406f, +0.000491f, +0.000541f, +0.000398f, +0.000922f, -0.001836f, +0.000279f, - +0.000357f, +0.001195f, +0.000360f, -0.000527f, +0.000866f, -0.000480f, +0.000262f, +0.000232f, +0.000353f, -0.000089f, - +0.000608f, +0.000459f, +0.000598f, +0.000187f, -0.000276f, +0.000495f, +0.000132f, -0.000424f, +0.000150f, +0.000009f, - -0.000368f, -0.000073f, -0.000023f, -0.000126f, -0.000068f, -0.000149f, +0.000166f, +0.000224f, -0.000296f, -0.000097f, - -0.000039f, -0.000088f, -0.000161f, -0.000015f, +0.000033f, -0.000197f, -0.000089f, -0.000124f, -0.000004f, -0.000054f, - -0.000199f, -0.000007f, +0.000121f, +0.000074f, -0.000013f, +0.000064f, -0.000033f, +0.000149f, +0.000073f, +0.000022f, - +0.000026f, -0.000001f, +0.000027f, -0.000057f, +0.000006f, +0.000089f, -0.000037f, -0.000096f, +0.000003f, -0.000080f, - -0.000127f, -0.000071f, +0.000039f, +0.000058f, -0.000042f, -0.000026f - }, - { - -0.003340f, +0.023172f, +0.011069f, +0.000313f, +0.000444f, +0.000881f, +0.000369f, -0.001564f, -0.000243f, +0.000099f, - +0.000614f, +0.000333f, -0.000760f, +0.001659f, +0.000818f, -0.000755f, +0.000818f, -0.000700f, -0.000830f, +0.000472f, - +0.000694f, +0.000229f, +0.000297f, -0.000100f, -0.000176f, -0.000289f, +0.000534f, -0.000797f, +0.000042f, -0.000034f, - -0.000138f, -0.000131f, +0.000112f, +0.000550f, +0.000048f, +0.000937f, +0.000352f, +0.000638f, -0.000175f, +0.000186f, - +0.000159f, -0.000615f, +0.000116f, -0.000219f, -0.000275f, +0.000627f, -0.000060f, -0.000814f, -0.000296f, +0.000342f, - -0.000246f, -0.000080f, -0.000553f, -0.000286f, +0.000253f, +0.000124f, +0.000233f, +0.000096f, +0.000353f, +0.000014f, - +0.000038f, -0.000044f, -0.000003f, +0.000022f, +0.000063f, +0.000038f, +0.000047f, +0.000067f, +0.000057f, -0.000037f, - +0.000046f, +0.000052f, -0.000105f, +0.000118f, +0.000199f, -0.000054f, -0.000033f, +0.000113f, -0.000007f, -0.000055f, - -0.000001f, -0.000110f, -0.000032f, -0.000000f, -0.000033f, -0.000108f, +0.000034f, +0.000150f, -0.000020f, +0.000006f, - +0.000024f, +0.000024f, +0.000075f, +0.000048f, +0.000030f, +0.000001f - }, - { - -0.001060f, -0.002526f, +0.005613f, -0.000129f, +0.000439f, -0.000127f, -0.000079f, -0.000904f, +0.000621f, -0.000114f, - -0.000072f, -0.000106f, -0.000654f, +0.002001f, +0.002134f, -0.003963f, -0.000226f, -0.000166f, -0.001009f, +0.003857f, - -0.000561f, -0.002563f, -0.000261f, +0.002919f, +0.001203f, +0.001164f, -0.001843f, +0.000261f, -0.001151f, +0.000208f, - +0.000443f, -0.000180f, +0.000520f, -0.001670f, +0.000236f, +0.001057f, +0.000037f, -0.000752f, +0.000412f, -0.000334f, - +0.000251f, -0.000433f, -0.000548f, +0.000342f, +0.000505f, -0.000186f, +0.000390f, +0.000403f, +0.000213f, +0.000156f, - -0.000007f, -0.000283f, -0.000239f, +0.000006f, -0.000062f, +0.000055f, +0.000019f, +0.000204f, +0.000271f, +0.000200f, - +0.000017f, -0.000356f, -0.000107f, -0.000030f, -0.000144f, -0.000255f, -0.000079f, +0.000004f, +0.000056f, +0.000099f, - -0.000058f, -0.000076f, -0.000173f, +0.000026f, +0.000137f, +0.000035f, -0.000068f, -0.000002f, +0.000018f, -0.000074f, - +0.000038f, -0.000142f, -0.000119f, +0.000038f, -0.000028f, -0.000067f, +0.000072f, +0.000093f, +0.000008f, -0.000065f, - +0.000020f, +0.000033f, -0.000019f, -0.000046f, -0.000045f, +0.000042f - }, - { - -0.004331f, -0.038306f, -0.008845f, -0.003848f, +0.001040f, +0.000853f, -0.005625f, +0.000066f, -0.000738f, +0.000106f, - +0.000134f, +0.000357f, +0.000113f, -0.001496f, -0.000879f, +0.000027f, -0.000558f, +0.000469f, -0.000300f, -0.000526f, - -0.000433f, -0.000338f, -0.000374f, -0.000460f, -0.000116f, -0.000982f, -0.000299f, -0.000025f, +0.000314f, +0.000097f, - -0.000054f, +0.000112f, +0.000831f, +0.000166f, +0.000936f, -0.000077f, +0.000353f, +0.000211f, -0.000212f, -0.000241f, - +0.000511f, +0.000400f, +0.000287f, -0.000533f, +0.000096f, +0.000419f, +0.000044f, +0.000003f, +0.000021f, +0.000395f, - +0.000226f, +0.000303f, +0.000227f, -0.000097f, -0.000524f, -0.000132f, +0.000177f, -0.000243f, +0.000008f, +0.000018f, - -0.000325f, +0.000175f, +0.000121f, -0.000001f, -0.000089f, -0.000075f, +0.000019f, -0.000045f, -0.000024f, +0.000103f, - +0.000007f, -0.000098f, -0.000024f, +0.000072f, +0.000017f, +0.000019f, +0.000017f, +0.000078f, -0.000121f, +0.000040f, - -0.000016f, -0.000042f, -0.000033f, +0.000011f, -0.000005f, +0.000081f, +0.000095f, +0.000043f, +0.000062f, +0.000029f, - +0.000030f, +0.000010f, -0.000090f, -0.000054f, +0.000018f, +0.000043f - }, - { - -0.000288f, +0.006248f, +0.002086f, +0.002186f, +0.000541f, +0.000611f, -0.000851f, -0.003011f, +0.000249f, +0.000339f, - +0.000536f, +0.000710f, -0.000422f, -0.001054f, -0.002228f, -0.000870f, +0.000779f, -0.002383f, -0.001497f, +0.001440f, - -0.002409f, -0.000179f, +0.001843f, +0.000164f, -0.000473f, -0.000164f, -0.000098f, -0.000385f, +0.000358f, -0.000794f, - -0.000155f, -0.000454f, -0.000176f, +0.000074f, +0.000029f, -0.000147f, -0.000025f, -0.000118f, -0.000359f, -0.000586f, - -0.000488f, -0.000006f, -0.000062f, +0.000254f, +0.000118f, -0.000093f, -0.000047f, -0.000119f, -0.000023f, +0.000275f, - +0.000121f, +0.000193f, -0.000133f, -0.000160f, -0.000365f, +0.000336f, -0.000064f, +0.000021f, +0.000122f, -0.000108f, - -0.000042f, +0.000185f, -0.000063f, -0.000130f, +0.000097f, +0.000300f, -0.000018f, +0.000202f, +0.000165f, +0.000056f, - +0.000141f, +0.000041f, +0.000004f, +0.000045f, +0.000113f, +0.000055f, +0.000005f, -0.000151f, -0.000082f, +0.000018f, - -0.000058f, +0.000042f, +0.000077f, -0.000045f, -0.000077f, -0.000033f, -0.000000f, -0.000010f, -0.000047f, -0.000117f, - -0.000041f, +0.000019f, +0.000015f, +0.000017f, -0.000013f, +0.000029f - }, - { - +0.003199f, -0.004493f, -0.006318f, -0.001899f, +0.001355f, -0.000543f, -0.000974f, +0.001571f, -0.000343f, +0.001076f, - +0.000178f, -0.001052f, -0.000388f, -0.000824f, +0.000824f, -0.000448f, +0.000779f, -0.000160f, +0.000072f, +0.000148f, - -0.000666f, +0.000634f, +0.000496f, -0.000598f, -0.000638f, -0.000178f, +0.000814f, -0.000161f, -0.000652f, -0.000783f, - -0.000688f, -0.000245f, -0.000332f, -0.000785f, -0.000005f, +0.000217f, -0.000342f, +0.000090f, -0.000110f, +0.000092f, - -0.000021f, -0.000363f, +0.000025f, +0.000091f, +0.000072f, +0.000349f, -0.000399f, +0.000107f, +0.000306f, -0.000059f, - +0.000210f, +0.000112f, +0.000260f, +0.000155f, -0.000210f, +0.000027f, -0.000147f, -0.000111f, +0.000059f, -0.000200f, - -0.000044f, +0.000064f, +0.000021f, +0.000103f, +0.000118f, -0.000095f, +0.000024f, +0.000037f, -0.000022f, +0.000030f, - +0.000135f, -0.000151f, +0.000094f, +0.000030f, +0.000033f, +0.000052f, -0.000061f, +0.000019f, +0.000023f, -0.000012f, - -0.000022f, +0.000040f, +0.000046f, +0.000002f, +0.000089f, +0.000058f, -0.000101f, +0.000031f, -0.000049f, -0.000004f, - +0.000055f, +0.000018f, +0.000092f, -0.000021f, -0.000018f, +0.000012f - }, - { - +0.000357f, +0.003514f, -0.003541f, -0.001146f, +0.000411f, +0.000399f, +0.000380f, -0.000975f, +0.000665f, -0.000038f, - -0.000004f, +0.000698f, +0.001521f, -0.012962f, +0.002212f, +0.002873f, +0.000316f, +0.003007f, -0.000607f, +0.001585f, - -0.000673f, -0.001332f, -0.001435f, -0.000103f, -0.000251f, +0.001808f, -0.000189f, -0.001966f, +0.000428f, +0.000720f, - +0.001053f, +0.000388f, -0.002339f, -0.000530f, +0.000006f, +0.000498f, -0.000831f, +0.000164f, +0.000153f, +0.000539f, - -0.000028f, -0.000227f, -0.000581f, -0.000448f, -0.000289f, +0.000098f, +0.000041f, -0.000011f, -0.000374f, +0.000213f, - +0.000504f, -0.000009f, +0.000166f, -0.000020f, -0.000014f, -0.000021f, +0.000183f, -0.000273f, +0.000156f, -0.000027f, - -0.000271f, +0.000041f, +0.000207f, +0.000099f, +0.000157f, -0.000126f, +0.000029f, -0.000112f, -0.000119f, +0.000205f, - +0.000108f, +0.000041f, +0.000007f, -0.000115f, -0.000047f, +0.000195f, +0.000045f, +0.000067f, +0.000003f, -0.000008f, - -0.000063f, -0.000081f, -0.000128f, -0.000095f, -0.000005f, -0.000022f, +0.000035f, +0.000055f, -0.000012f, +0.000017f, - -0.000065f, -0.000013f, +0.000123f, +0.000042f, -0.000071f, +0.000061f - }, - { - +0.004358f, +0.003265f, +0.003776f, -0.002750f, -0.001131f, -0.000206f, +0.000297f, +0.001129f, -0.000279f, +0.000921f, - -0.001528f, +0.002862f, -0.000155f, -0.002359f, -0.000569f, +0.000800f, -0.000658f, -0.000630f, -0.000371f, -0.000698f, - -0.000443f, -0.000256f, -0.000977f, -0.000365f, +0.000450f, +0.000584f, +0.001149f, +0.000552f, +0.000192f, +0.000859f, - -0.000178f, +0.000857f, +0.000563f, -0.000486f, -0.000308f, +0.000269f, +0.000012f, -0.000317f, +0.000217f, -0.000083f, - -0.000258f, -0.000445f, +0.000255f, +0.000085f, -0.000240f, -0.000694f, -0.000423f, -0.000549f, -0.000230f, +0.000039f, - +0.000094f, -0.000550f, +0.000020f, +0.000346f, -0.000039f, -0.000228f, -0.000141f, -0.000038f, -0.000131f, -0.000268f, - +0.000091f, -0.000016f, +0.000213f, -0.000032f, -0.000064f, -0.000115f, +0.000129f, +0.000025f, +0.000002f, +0.000080f, - -0.000002f, +0.000144f, +0.000092f, +0.000000f, -0.000136f, -0.000074f, +0.000027f, +0.000139f, -0.000029f, -0.000157f, - -0.000004f, -0.000008f, -0.000073f, -0.000050f, +0.000029f, -0.000064f, -0.000082f, +0.000116f, +0.000055f, -0.000054f, - +0.000022f, +0.000015f, -0.000062f, +0.000019f, +0.000003f, +0.000020f - }, - { - +0.000448f, -0.005626f, -0.001611f, +0.000382f, -0.000132f, -0.000073f, +0.000286f, +0.000631f, +0.001070f, +0.000454f, - -0.000641f, +0.000045f, -0.001595f, +0.007198f, +0.021949f, -0.002258f, -0.000400f, -0.000666f, +0.002711f, -0.001186f, - -0.002909f, -0.000949f, +0.001603f, -0.000143f, -0.000675f, -0.000320f, +0.000975f, -0.001588f, -0.001007f, -0.002012f, - -0.000182f, +0.000757f, -0.001186f, +0.000541f, +0.000168f, -0.000838f, +0.000770f, +0.000376f, -0.000210f, -0.000240f, - -0.000392f, +0.000465f, +0.000849f, -0.000030f, -0.000487f, +0.000320f, -0.000476f, +0.000074f, +0.000273f, -0.000015f, - +0.000014f, +0.000249f, +0.000329f, +0.000349f, -0.000215f, -0.000142f, -0.000177f, -0.000081f, -0.000299f, +0.000183f, - +0.000377f, +0.000023f, +0.000004f, -0.000082f, +0.000108f, +0.000226f, -0.000334f, -0.000120f, +0.000162f, +0.000138f, - -0.000094f, -0.000003f, +0.000167f, +0.000100f, +0.000064f, +0.000083f, -0.000194f, +0.000072f, +0.000043f, +0.000181f, - -0.000003f, -0.000102f, -0.000074f, -0.000016f, +0.000051f, +0.000013f, +0.000028f, -0.000040f, -0.000058f, -0.000023f, - +0.000000f, -0.000042f, +0.000025f, +0.000043f, +0.000018f, -0.000055f - } - }, - { - { - +0.007908f, +0.095817f, -0.018402f, +0.000515f, +0.000825f, -0.000348f, +0.001170f, -0.000487f, -0.000040f, +0.000097f, - +0.000322f, -0.001052f, -0.000627f, +0.000631f, +0.001956f, -0.000334f, +0.000175f, -0.000484f, -0.000625f, -0.000233f, - +0.000719f, +0.000358f, +0.000276f, -0.000051f, -0.000303f, -0.000336f, +0.000050f, +0.000473f, -0.000442f, -0.000539f, - -0.000281f, -0.000086f, +0.000330f, +0.000718f, -0.000131f, -0.000053f, +0.000742f, +0.000647f, +0.000172f, -0.000194f, - -0.000043f, -0.000297f, +0.000128f, -0.000336f, +0.000229f, +0.000264f, -0.000592f, -0.000302f, -0.000168f, -0.000268f, - -0.000006f, -0.000520f, +0.000078f, -0.000158f, -0.000083f, +0.000180f, -0.000048f, -0.000018f, +0.000035f, +0.000256f, - +0.000175f, -0.000074f, -0.000131f, -0.000025f, -0.000035f, +0.000040f, +0.000136f, +0.000040f, -0.000017f, -0.000071f, - +0.000029f, +0.000177f, +0.000028f, +0.000034f, -0.000028f, -0.000026f, +0.000010f, -0.000100f, +0.000128f, +0.000092f, - +0.000055f, +0.000082f, -0.000038f, -0.000012f, -0.000029f, +0.000040f, +0.000024f, -0.000027f, +0.000082f, -0.000012f, - -0.000019f, +0.000020f, -0.000020f, -0.000008f, +0.000026f, +0.000016f - }, - { - -0.001363f, +0.010381f, +0.002131f, -0.001186f, +0.000144f, -0.000331f, +0.000348f, +0.000395f, -0.000015f, -0.000260f, - +0.000521f, +0.000075f, -0.000022f, -0.000383f, -0.001778f, -0.000993f, -0.000958f, -0.001813f, +0.000150f, -0.000418f, - -0.000320f, -0.000414f, -0.000479f, +0.001057f, -0.000277f, +0.000256f, +0.000338f, +0.000552f, +0.000490f, +0.000564f, - -0.000514f, +0.000039f, +0.000758f, +0.000010f, +0.000623f, +0.000091f, +0.000257f, +0.000286f, -0.000667f, -0.000200f, - -0.000497f, +0.000500f, +0.000032f, -0.000427f, +0.000290f, +0.000013f, -0.000006f, -0.000638f, -0.000066f, +0.000142f, - -0.000096f, -0.000181f, +0.000331f, +0.000100f, -0.000394f, -0.000403f, +0.000044f, -0.000109f, -0.000045f, +0.000280f, - +0.000190f, +0.000032f, -0.000156f, -0.000039f, +0.000068f, -0.000013f, +0.000162f, +0.000110f, -0.000106f, -0.000040f, - +0.000191f, -0.000116f, -0.000016f, +0.000038f, +0.000107f, -0.000057f, -0.000138f, -0.000001f, +0.000032f, +0.000079f, - -0.000086f, -0.000085f, +0.000023f, +0.000060f, +0.000008f, +0.000082f, +0.000033f, -0.000048f, +0.000062f, -0.000049f, - -0.000093f, +0.000017f, +0.000096f, +0.000075f, +0.000038f, -0.000063f - }, - { - +0.002206f, +0.013600f, -0.010289f, +0.006431f, +0.001365f, -0.001251f, +0.000667f, +0.000671f, +0.000021f, -0.000012f, - +0.000836f, -0.001288f, -0.001167f, +0.000473f, +0.000966f, +0.000277f, +0.001479f, +0.001146f, -0.000648f, +0.000828f, - +0.000116f, +0.000680f, -0.000244f, -0.000037f, -0.000180f, +0.001142f, +0.000959f, -0.000721f, -0.000540f, +0.000454f, - -0.000391f, +0.000314f, -0.000132f, -0.000074f, -0.000736f, +0.000961f, +0.001426f, -0.000504f, +0.000629f, -0.000486f, - -0.000090f, -0.000428f, +0.000415f, -0.000375f, +0.000322f, -0.000030f, -0.000164f, +0.000392f, +0.000161f, -0.000220f, - +0.000274f, +0.000094f, +0.000265f, -0.000143f, +0.000535f, +0.000093f, +0.000009f, -0.000122f, -0.000182f, -0.000138f, - +0.000140f, +0.000194f, +0.000357f, -0.000087f, +0.000053f, +0.000143f, -0.000162f, -0.000038f, +0.000117f, +0.000042f, - -0.000012f, +0.000046f, +0.000099f, -0.000066f, -0.000054f, -0.000049f, +0.000016f, +0.000057f, -0.000035f, -0.000018f, - +0.000026f, +0.000025f, +0.000048f, -0.000059f, +0.000051f, +0.000059f, +0.000037f, -0.000109f, +0.000043f, +0.000038f, - -0.000037f, -0.000046f, +0.000007f, -0.000018f, -0.000024f, +0.000052f - }, - { - -0.000205f, -0.012775f, -0.004594f, +0.001885f, -0.000177f, -0.000629f, -0.000307f, -0.000104f, -0.000244f, -0.000354f, - -0.001294f, +0.000607f, -0.001203f, +0.001448f, +0.000402f, -0.000627f, -0.000720f, +0.000029f, -0.000516f, -0.000345f, - +0.000088f, -0.000569f, +0.000229f, -0.000800f, -0.000672f, -0.000279f, +0.000079f, +0.000441f, +0.000313f, +0.000628f, - +0.000258f, -0.000500f, +0.000621f, -0.000339f, -0.000250f, +0.000062f, -0.000434f, -0.000172f, -0.000161f, +0.000209f, - -0.000256f, -0.000236f, +0.000314f, -0.000116f, -0.000323f, +0.000479f, -0.000016f, -0.000137f, +0.000179f, -0.000129f, - +0.000128f, -0.000129f, +0.000084f, -0.000050f, +0.000043f, +0.000306f, -0.000009f, +0.000033f, -0.000358f, -0.000168f, - +0.000135f, +0.000174f, -0.000019f, +0.000069f, +0.000060f, -0.000003f, +0.000218f, -0.000093f, +0.000002f, +0.000065f, - -0.000040f, -0.000159f, -0.000075f, +0.000062f, -0.000026f, +0.000016f, -0.000041f, +0.000003f, +0.000059f, +0.000052f, - +0.000067f, +0.000017f, -0.000047f, -0.000018f, -0.000001f, -0.000060f, +0.000052f, -0.000046f, -0.000036f, +0.000042f, - +0.000034f, -0.000005f, -0.000026f, +0.000029f, +0.000011f, -0.000018f - }, - { - +0.000637f, -0.013372f, -0.001065f, +0.000234f, -0.000046f, -0.000144f, +0.000494f, -0.000110f, -0.000261f, +0.000499f, - +0.000227f, -0.000442f, +0.000938f, -0.000532f, +0.003177f, +0.000840f, -0.001153f, +0.008294f, -0.003612f, -0.000120f, - +0.001672f, +0.000689f, -0.000527f, -0.000609f, -0.000765f, +0.000800f, +0.002233f, +0.000579f, +0.000055f, +0.000583f, - +0.000526f, -0.000690f, +0.000657f, +0.000052f, -0.000475f, +0.000016f, +0.000431f, +0.000240f, -0.000714f, -0.000359f, - +0.000376f, -0.000033f, +0.000392f, -0.000164f, +0.000141f, +0.000053f, +0.000056f, +0.000388f, -0.000220f, -0.000003f, - +0.000552f, -0.000244f, +0.000307f, -0.000116f, -0.000107f, -0.000414f, +0.000048f, +0.000148f, +0.000129f, -0.000028f, - +0.000283f, -0.000132f, +0.000147f, +0.000130f, +0.000311f, +0.000047f, +0.000033f, -0.000091f, -0.000190f, +0.000097f, - -0.000046f, -0.000128f, +0.000002f, +0.000081f, +0.000005f, +0.000153f, +0.000014f, -0.000000f, +0.000120f, +0.000009f, - +0.000030f, -0.000070f, -0.000041f, +0.000135f, -0.000045f, -0.000023f, -0.000021f, -0.000095f, +0.000016f, -0.000002f, - -0.000002f, +0.000073f, -0.000012f, -0.000069f, +0.000054f, +0.000046f - }, - { - +0.001633f, -0.021476f, -0.001144f, -0.000558f, +0.001044f, +0.000018f, +0.001057f, -0.000945f, -0.000702f, +0.001786f, - +0.001002f, -0.000153f, -0.000045f, +0.001007f, +0.000909f, +0.001192f, -0.000596f, -0.000367f, +0.000443f, +0.000501f, - +0.000215f, -0.000231f, -0.000174f, -0.000336f, +0.000013f, +0.000159f, -0.000065f, +0.000094f, +0.000301f, -0.000235f, - -0.000793f, -0.000001f, +0.000200f, +0.000354f, +0.000184f, -0.000722f, +0.000806f, -0.000134f, -0.000122f, +0.000213f, - +0.000714f, +0.000504f, -0.000607f, -0.000021f, -0.000027f, +0.000280f, -0.000178f, +0.000167f, -0.000185f, +0.000205f, - -0.000156f, +0.000070f, +0.000289f, +0.000178f, +0.000109f, +0.000046f, +0.000469f, +0.000190f, -0.000072f, -0.000346f, - -0.000042f, +0.000108f, +0.000040f, +0.000160f, -0.000045f, -0.000130f, +0.000187f, +0.000003f, -0.000078f, +0.000034f, - +0.000004f, -0.000029f, +0.000019f, +0.000083f, -0.000081f, +0.000083f, +0.000070f, -0.000043f, -0.000104f, +0.000028f, - -0.000078f, -0.000061f, -0.000058f, +0.000037f, +0.000061f, +0.000020f, -0.000008f, +0.000067f, -0.000012f, +0.000012f, - -0.000023f, -0.000016f, -0.000011f, -0.000035f, +0.000019f, -0.000002f - }, - { - -0.000229f, +0.001999f, +0.001599f, -0.000662f, +0.000055f, +0.000073f, +0.000011f, -0.000382f, -0.000194f, -0.000329f, - +0.000216f, -0.000026f, -0.000352f, -0.002856f, -0.003479f, +0.000446f, -0.001511f, -0.002654f, -0.002151f, +0.001791f, - +0.000854f, -0.000460f, +0.001975f, -0.002083f, -0.000231f, +0.000351f, -0.001231f, -0.001346f, -0.000771f, +0.000409f, - -0.000258f, +0.000449f, +0.000316f, +0.000308f, +0.000881f, -0.000538f, -0.000395f, -0.000179f, +0.000567f, +0.000482f, - -0.000197f, -0.000580f, +0.000416f, -0.000249f, -0.000108f, +0.000555f, +0.000073f, -0.000197f, +0.000145f, -0.000358f, - -0.000142f, +0.000233f, +0.000084f, -0.000159f, +0.000195f, +0.000002f, +0.000165f, -0.000035f, +0.000031f, +0.000039f, - -0.000094f, -0.000029f, -0.000076f, -0.000020f, +0.000157f, -0.000128f, +0.000147f, +0.000007f, -0.000039f, -0.000189f, - -0.000057f, +0.000221f, +0.000052f, +0.000132f, +0.000095f, +0.000049f, +0.000044f, +0.000131f, -0.000003f, -0.000007f, - +0.000070f, -0.000022f, +0.000016f, -0.000045f, +0.000028f, +0.000048f, -0.000081f, -0.000073f, -0.000038f, -0.000089f, - -0.000085f, -0.000009f, +0.000042f, -0.000018f, -0.000005f, +0.000013f - }, - { - +0.008061f, +0.012525f, -0.008358f, -0.000812f, +0.000348f, +0.000349f, -0.000515f, -0.000455f, -0.000238f, +0.000205f, - +0.000505f, -0.001128f, -0.000566f, +0.001080f, -0.000922f, -0.000694f, +0.000174f, -0.001446f, +0.000048f, +0.000884f, - -0.000325f, -0.000356f, +0.000606f, -0.000054f, -0.000588f, +0.000491f, +0.000754f, -0.000392f, +0.000092f, -0.000141f, - -0.000492f, -0.000341f, -0.000131f, +0.000343f, +0.000060f, +0.000780f, -0.000245f, +0.000055f, -0.000539f, +0.000165f, - +0.000211f, -0.000041f, +0.000056f, -0.000644f, -0.000270f, +0.000206f, -0.000009f, -0.000887f, +0.000001f, +0.000498f, - -0.000076f, -0.000157f, -0.000455f, -0.000057f, +0.000267f, +0.000164f, +0.000260f, -0.000077f, +0.000138f, -0.000158f, - -0.000108f, +0.000017f, +0.000149f, -0.000074f, -0.000089f, +0.000005f, -0.000001f, -0.000004f, +0.000048f, +0.000014f, - +0.000019f, +0.000028f, +0.000071f, +0.000126f, +0.000013f, -0.000167f, +0.000081f, +0.000028f, -0.000053f, +0.000051f, - -0.000020f, -0.000155f, +0.000012f, +0.000022f, -0.000034f, -0.000044f, +0.000037f, +0.000084f, +0.000012f, +0.000010f, - +0.000001f, +0.000039f, +0.000052f, +0.000059f, +0.000001f, -0.000042f - }, - { - +0.000021f, +0.000713f, +0.002663f, -0.000546f, +0.000042f, -0.000134f, +0.000338f, -0.000370f, +0.000883f, -0.000026f, - -0.000396f, +0.000049f, +0.000223f, +0.002019f, +0.002667f, -0.002286f, -0.002214f, +0.000387f, -0.000317f, +0.001893f, - +0.000709f, +0.000599f, +0.001396f, +0.004086f, -0.000312f, +0.000843f, -0.000160f, -0.001062f, -0.000962f, +0.000855f, - -0.000589f, -0.000245f, -0.000144f, -0.000909f, +0.000371f, -0.000124f, +0.000615f, +0.000379f, +0.000107f, -0.000222f, - +0.000529f, -0.000139f, +0.000057f, +0.000430f, +0.000174f, -0.000485f, +0.000083f, -0.000094f, +0.000173f, -0.000045f, - -0.000094f, -0.000076f, +0.000212f, +0.000109f, -0.000249f, -0.000131f, +0.000136f, +0.000235f, -0.000191f, -0.000060f, - +0.000072f, -0.000138f, +0.000197f, -0.000074f, -0.000027f, -0.000106f, -0.000132f, -0.000036f, -0.000005f, +0.000010f, - -0.000082f, -0.000012f, -0.000037f, +0.000132f, +0.000083f, -0.000073f, -0.000038f, +0.000054f, +0.000059f, -0.000028f, - -0.000045f, -0.000221f, -0.000025f, +0.000028f, -0.000004f, +0.000029f, +0.000098f, +0.000038f, -0.000002f, -0.000043f, - +0.000038f, -0.000003f, +0.000030f, -0.000005f, +0.000028f, +0.000054f - }, - { - +0.005913f, -0.023630f, -0.006527f, -0.003562f, +0.001809f, +0.001585f, -0.005225f, +0.000352f, -0.000507f, +0.000776f, - -0.000024f, +0.000271f, -0.000113f, -0.000970f, -0.000678f, -0.000230f, +0.001056f, +0.000479f, +0.000172f, -0.000202f, - +0.000334f, -0.000228f, +0.000183f, +0.000067f, +0.000700f, -0.000481f, -0.000744f, +0.000208f, +0.000963f, -0.000308f, - -0.000373f, -0.000352f, +0.000149f, +0.000289f, +0.000698f, -0.000565f, +0.000323f, +0.000524f, -0.000446f, -0.000183f, - +0.000514f, +0.000689f, -0.000121f, -0.000596f, +0.000890f, +0.000608f, -0.000045f, +0.000330f, +0.000130f, +0.000416f, - +0.000065f, +0.000085f, +0.000149f, -0.000265f, -0.000376f, +0.000064f, +0.000049f, -0.000247f, +0.000078f, -0.000074f, - -0.000147f, -0.000008f, +0.000004f, +0.000049f, -0.000191f, +0.000072f, -0.000004f, -0.000145f, +0.000024f, -0.000016f, - +0.000017f, -0.000061f, +0.000027f, -0.000004f, +0.000066f, -0.000030f, +0.000037f, -0.000052f, +0.000019f, -0.000044f, - -0.000048f, -0.000005f, +0.000067f, +0.000003f, +0.000068f, +0.000121f, +0.000062f, +0.000007f, +0.000060f, +0.000002f, - -0.000006f, -0.000024f, -0.000045f, -0.000012f, +0.000044f, +0.000049f - }, - { - +0.000431f, +0.002014f, -0.001257f, +0.000027f, +0.000267f, +0.000166f, -0.001135f, -0.002139f, +0.000694f, +0.000921f, - +0.000296f, -0.000364f, -0.000035f, -0.000854f, -0.002507f, -0.003196f, +0.001726f, -0.000266f, -0.000575f, -0.000489f, - -0.002659f, +0.000410f, +0.001986f, -0.000186f, -0.000305f, +0.000250f, -0.000773f, +0.000376f, +0.000828f, -0.000593f, - +0.000039f, -0.000311f, -0.000303f, -0.000236f, +0.000108f, -0.000414f, -0.000332f, -0.000270f, -0.000217f, -0.000040f, - -0.000446f, +0.000221f, -0.000070f, +0.000052f, -0.000115f, -0.000233f, -0.000141f, +0.000103f, +0.000307f, +0.000419f, - +0.000086f, +0.000012f, -0.000280f, -0.000076f, -0.000150f, +0.000129f, +0.000024f, +0.000098f, +0.000103f, -0.000127f, - +0.000117f, +0.000074f, -0.000114f, +0.000023f, +0.000094f, +0.000043f, +0.000097f, +0.000233f, -0.000105f, -0.000056f, - -0.000025f, -0.000050f, +0.000076f, +0.000083f, +0.000020f, -0.000106f, -0.000069f, -0.000131f, +0.000055f, +0.000012f, - -0.000049f, +0.000039f, +0.000066f, -0.000095f, -0.000022f, +0.000002f, -0.000039f, -0.000016f, -0.000065f, -0.000030f, - +0.000019f, +0.000013f, +0.000007f, +0.000018f, +0.000039f, -0.000031f - }, - { - -0.002448f, -0.008823f, -0.002893f, -0.000418f, +0.002023f, -0.003812f, -0.002407f, +0.002079f, +0.000491f, +0.001063f, - -0.000719f, -0.000270f, -0.000207f, +0.000281f, +0.000807f, -0.000115f, +0.000916f, -0.000044f, +0.000600f, +0.000322f, - -0.000184f, +0.000356f, +0.000086f, -0.000916f, -0.000510f, -0.000408f, +0.001243f, -0.000211f, -0.000113f, -0.000548f, - +0.000002f, +0.000140f, -0.000600f, -0.000300f, +0.000243f, +0.000065f, -0.001157f, -0.000654f, -0.000268f, +0.000169f, - +0.000233f, -0.000418f, +0.000187f, +0.000217f, +0.000092f, +0.000067f, -0.000523f, +0.000162f, +0.000425f, -0.000250f, - +0.000352f, -0.000022f, +0.000463f, -0.000148f, -0.000158f, +0.000147f, +0.000043f, -0.000227f, -0.000135f, +0.000033f, - +0.000128f, -0.000178f, -0.000002f, +0.000180f, -0.000030f, -0.000174f, -0.000078f, -0.000026f, -0.000015f, +0.000132f, - +0.000042f, -0.000110f, +0.000092f, -0.000031f, -0.000018f, -0.000016f, -0.000026f, -0.000039f, -0.000029f, -0.000038f, - +0.000001f, +0.000111f, -0.000014f, +0.000006f, +0.000024f, -0.000038f, -0.000031f, +0.000032f, -0.000007f, +0.000053f, - +0.000019f, +0.000028f, +0.000028f, -0.000060f, -0.000000f, +0.000028f - }, - { - -0.000367f, +0.005592f, -0.000432f, -0.000574f, -0.000094f, +0.000329f, -0.000259f, -0.001017f, +0.000420f, -0.000175f, - +0.000446f, +0.000178f, +0.003825f, -0.009668f, +0.002563f, +0.000629f, -0.000936f, +0.001447f, -0.001217f, +0.001549f, - -0.002017f, +0.001675f, +0.000425f, -0.001656f, -0.000874f, +0.002043f, -0.000736f, -0.001217f, -0.000379f, +0.000550f, - +0.000226f, +0.000671f, -0.001620f, +0.000235f, -0.000324f, -0.000759f, -0.000862f, -0.000423f, +0.000049f, +0.000580f, - +0.000123f, +0.000138f, -0.000229f, -0.000096f, +0.000232f, +0.000298f, +0.000577f, +0.000277f, -0.000117f, +0.000097f, - +0.000360f, +0.000182f, -0.000069f, -0.000093f, +0.000253f, -0.000071f, -0.000038f, -0.000284f, +0.000109f, -0.000158f, - -0.000153f, +0.000162f, +0.000077f, -0.000044f, +0.000090f, -0.000100f, -0.000014f, -0.000173f, +0.000078f, +0.000076f, - +0.000024f, -0.000026f, +0.000095f, -0.000045f, +0.000051f, +0.000125f, -0.000038f, +0.000007f, -0.000056f, +0.000007f, - -0.000094f, -0.000062f, -0.000092f, -0.000076f, +0.000039f, -0.000043f, +0.000074f, -0.000062f, +0.000016f, +0.000010f, - -0.000064f, +0.000061f, +0.000071f, -0.000063f, +0.000021f, +0.000052f - }, - { - -0.000739f, -0.005590f, -0.000543f, -0.005166f, -0.000369f, -0.003073f, -0.004000f, +0.000103f, -0.000226f, -0.000241f, - -0.000277f, +0.004407f, -0.001214f, -0.000265f, +0.002319f, -0.001321f, -0.001290f, -0.000409f, -0.000016f, +0.000299f, - +0.000162f, +0.000420f, -0.000335f, +0.000402f, -0.000001f, +0.000561f, +0.001029f, +0.000578f, +0.000147f, +0.000253f, - +0.000196f, +0.000120f, -0.000528f, -0.000645f, +0.000006f, -0.000092f, -0.000092f, +0.000038f, +0.000555f, -0.000095f, - -0.000622f, +0.000171f, +0.000096f, -0.000095f, -0.000063f, -0.000307f, -0.000082f, +0.000179f, +0.000102f, +0.000193f, - -0.000249f, -0.000125f, +0.000061f, -0.000049f, -0.000203f, -0.000084f, -0.000010f, +0.000310f, -0.000091f, +0.000040f, - +0.000100f, +0.000024f, +0.000194f, -0.000154f, +0.000030f, -0.000115f, +0.000179f, -0.000069f, +0.000026f, -0.000033f, - +0.000047f, +0.000047f, +0.000043f, -0.000017f, -0.000029f, -0.000063f, +0.000088f, +0.000013f, -0.000104f, -0.000103f, - +0.000040f, -0.000028f, -0.000140f, -0.000011f, -0.000002f, -0.000045f, +0.000065f, +0.000093f, -0.000014f, -0.000044f, - +0.000014f, -0.000030f, -0.000065f, -0.000005f, +0.000049f, +0.000001f - }, - { - -0.000094f, -0.005169f, +0.001507f, +0.000862f, -0.000251f, +0.000233f, +0.000225f, +0.000830f, +0.000862f, -0.000493f, - -0.000911f, +0.000509f, +0.000350f, +0.000156f, +0.007440f, -0.003650f, +0.001429f, -0.000407f, +0.000577f, -0.001014f, - -0.000516f, -0.000398f, +0.000252f, -0.000151f, +0.000013f, -0.000878f, -0.000026f, -0.002549f, +0.000620f, +0.000455f, - +0.000062f, +0.000632f, -0.000265f, +0.000913f, -0.000259f, -0.000139f, +0.000720f, -0.000543f, +0.000594f, +0.000102f, - -0.000085f, +0.000773f, +0.000567f, -0.000393f, -0.000076f, +0.000249f, -0.000409f, +0.000098f, +0.000362f, +0.000162f, - -0.000070f, +0.000213f, +0.000115f, -0.000022f, -0.000211f, +0.000041f, +0.000088f, +0.000028f, -0.000028f, +0.000174f, - +0.000073f, -0.000066f, +0.000095f, -0.000069f, -0.000003f, +0.000058f, -0.000348f, +0.000123f, +0.000088f, +0.000110f, - -0.000104f, +0.000052f, +0.000181f, +0.000063f, +0.000069f, -0.000109f, -0.000098f, +0.000096f, -0.000014f, +0.000062f, - -0.000094f, -0.000071f, -0.000071f, +0.000083f, +0.000028f, -0.000011f, +0.000057f, +0.000001f, -0.000061f, +0.000018f, - -0.000015f, -0.000088f, +0.000039f, +0.000040f, -0.000031f, -0.000058f - } - }, - { - { - -0.004007f, +0.068196f, +0.007701f, +0.003848f, +0.000039f, +0.000719f, +0.000302f, -0.000129f, -0.000229f, -0.000688f, - -0.000863f, -0.000389f, -0.000148f, +0.001562f, +0.001387f, -0.001040f, +0.000142f, +0.000435f, -0.000575f, -0.001149f, - +0.001345f, +0.000436f, -0.000337f, +0.000502f, -0.000353f, +0.000027f, +0.000556f, -0.000127f, -0.000938f, +0.000162f, - +0.000061f, +0.000124f, -0.000032f, -0.000265f, +0.000401f, +0.000450f, +0.000207f, +0.000230f, +0.000098f, +0.000214f, - -0.000076f, -0.000183f, -0.000012f, -0.000416f, +0.000075f, -0.000327f, -0.000063f, -0.000065f, -0.000373f, -0.000503f, - -0.000338f, -0.000247f, -0.000089f, +0.000036f, +0.000103f, -0.000034f, +0.000389f, +0.000176f, +0.000176f, +0.000058f, - -0.000052f, -0.000134f, +0.000147f, +0.000123f, +0.000026f, +0.000034f, +0.000042f, -0.000029f, +0.000106f, +0.000034f, - +0.000118f, +0.000099f, +0.000008f, -0.000014f, +0.000075f, +0.000164f, -0.000083f, -0.000035f, +0.000056f, -0.000113f, - -0.000085f, -0.000048f, -0.000030f, -0.000019f, +0.000046f, +0.000007f, -0.000073f, +0.000008f, -0.000056f, +0.000006f, - -0.000025f, -0.000010f, -0.000004f, +0.000037f, +0.000001f, -0.000015f - }, - { - +0.000935f, +0.007007f, -0.000564f, -0.002397f, -0.000642f, +0.000547f, +0.000195f, +0.000068f, -0.000075f, +0.000250f, - +0.000625f, -0.000585f, +0.000141f, +0.000778f, -0.002851f, +0.000460f, +0.000790f, -0.000613f, +0.000285f, -0.000725f, - +0.000109f, -0.000028f, +0.000633f, -0.000182f, -0.000256f, +0.000460f, -0.000079f, +0.000245f, +0.000186f, -0.000165f, - +0.000699f, -0.000333f, +0.000049f, +0.000005f, +0.000459f, +0.000273f, -0.000036f, -0.000089f, -0.000333f, +0.000121f, - -0.000351f, -0.000482f, -0.000635f, -0.000082f, +0.000327f, -0.000047f, -0.000231f, -0.000192f, -0.000336f, -0.000213f, - -0.000014f, -0.000013f, -0.000171f, -0.000419f, +0.000037f, +0.000168f, +0.000048f, +0.000040f, +0.000092f, +0.000032f, - -0.000148f, -0.000143f, +0.000032f, -0.000080f, -0.000027f, +0.000117f, -0.000075f, -0.000096f, -0.000053f, +0.000074f, - -0.000032f, -0.000028f, +0.000148f, +0.000101f, -0.000012f, -0.000026f, +0.000075f, +0.000053f, -0.000007f, -0.000134f, - -0.000030f, +0.000089f, -0.000023f, -0.000032f, +0.000009f, -0.000042f, -0.000063f, +0.000042f, -0.000056f, -0.000071f, - +0.000057f, +0.000030f, -0.000034f, -0.000032f, -0.000023f, +0.000047f - }, - { - -0.002824f, +0.005155f, +0.002175f, +0.002605f, -0.001333f, -0.000580f, +0.000842f, +0.001078f, +0.000556f, +0.000541f, - -0.000076f, -0.001365f, +0.000106f, -0.000168f, -0.000007f, +0.000414f, +0.000937f, +0.001406f, -0.001065f, +0.002142f, - +0.001211f, -0.000151f, -0.000235f, +0.000083f, -0.000171f, +0.000449f, -0.000367f, +0.000286f, -0.000703f, +0.000013f, - +0.000551f, +0.001003f, -0.000733f, -0.000486f, +0.000414f, +0.000854f, +0.000268f, +0.000672f, +0.000693f, -0.000168f, - -0.000036f, +0.000197f, -0.000218f, -0.000568f, -0.000259f, -0.000044f, -0.000094f, +0.000044f, -0.000029f, +0.000138f, - +0.000069f, +0.000115f, -0.000132f, +0.000024f, +0.000001f, +0.000139f, -0.000033f, -0.000140f, -0.000001f, -0.000121f, - -0.000005f, +0.000186f, +0.000010f, +0.000004f, +0.000193f, -0.000224f, +0.000033f, -0.000001f, -0.000113f, -0.000062f, - +0.000105f, +0.000019f, -0.000077f, -0.000035f, -0.000013f, +0.000093f, +0.000121f, -0.000079f, -0.000067f, +0.000032f, - -0.000017f, -0.000012f, +0.000000f, +0.000080f, -0.000002f, -0.000058f, -0.000042f, -0.000020f, +0.000039f, +0.000006f, - +0.000033f, +0.000089f, +0.000013f, -0.000002f, +0.000062f, +0.000000f - }, - { - +0.006174f, -0.014042f, -0.007658f, -0.000823f, +0.000098f, -0.000682f, -0.000321f, -0.000232f, -0.000353f, -0.000058f, - -0.000310f, +0.000181f, -0.000642f, +0.001220f, +0.001124f, -0.000489f, +0.000040f, -0.000575f, -0.000123f, -0.000281f, - +0.000213f, -0.000870f, -0.000837f, -0.000190f, -0.000122f, -0.000454f, +0.000915f, +0.000213f, +0.000264f, -0.000679f, - -0.000360f, +0.000170f, -0.000372f, +0.000188f, -0.000060f, +0.000330f, -0.000233f, -0.000672f, +0.000476f, -0.000302f, - -0.000168f, +0.000163f, -0.000058f, -0.000044f, -0.000161f, -0.000153f, -0.000310f, +0.000095f, +0.000023f, +0.000024f, - +0.000304f, -0.000041f, +0.000061f, -0.000082f, -0.000091f, +0.000153f, -0.000083f, +0.000017f, -0.000227f, -0.000116f, - +0.000039f, -0.000103f, +0.000013f, +0.000075f, -0.000204f, +0.000084f, +0.000045f, -0.000053f, +0.000010f, -0.000097f, - -0.000055f, +0.000111f, +0.000183f, -0.000028f, -0.000011f, -0.000040f, -0.000056f, +0.000061f, +0.000014f, -0.000045f, - -0.000044f, -0.000091f, -0.000002f, +0.000054f, +0.000020f, +0.000035f, -0.000010f, -0.000008f, +0.000093f, -0.000010f, - -0.000061f, -0.000024f, +0.000027f, -0.000008f, -0.000050f, +0.000032f - }, - { - -0.000440f, -0.011945f, +0.000448f, +0.000257f, -0.000435f, +0.000333f, -0.000139f, +0.000378f, -0.000684f, +0.000090f, - +0.000226f, +0.000192f, -0.000025f, +0.001040f, +0.003934f, +0.002457f, +0.005663f, -0.000337f, -0.004692f, +0.001983f, - +0.001246f, +0.000560f, +0.000347f, -0.000598f, +0.000568f, +0.002514f, +0.001330f, -0.000237f, +0.000025f, +0.000898f, - +0.000306f, -0.000353f, +0.000130f, -0.000133f, +0.000168f, -0.000647f, +0.000548f, -0.000652f, -0.000734f, +0.000266f, - -0.000098f, -0.000037f, -0.000244f, -0.000039f, +0.000174f, -0.000093f, +0.000031f, +0.000274f, -0.000439f, -0.000191f, - +0.000131f, +0.000071f, +0.000019f, -0.000135f, -0.000024f, -0.000198f, -0.000027f, -0.000019f, +0.000154f, -0.000003f, - -0.000040f, +0.000078f, +0.000186f, +0.000005f, +0.000001f, -0.000313f, +0.000040f, -0.000085f, -0.000037f, -0.000028f, - -0.000014f, +0.000087f, +0.000088f, +0.000123f, +0.000212f, +0.000075f, -0.000141f, -0.000056f, -0.000118f, -0.000108f, - -0.000089f, -0.000056f, +0.000179f, +0.000089f, -0.000103f, +0.000010f, -0.000124f, -0.000018f, +0.000028f, -0.000032f, - -0.000014f, -0.000034f, -0.000028f, +0.000056f, +0.000040f, -0.000043f - }, - { - +0.005721f, -0.018923f, -0.004700f, +0.000500f, +0.000724f, +0.000183f, +0.000018f, -0.000555f, +0.000494f, -0.000173f, - -0.000905f, +0.000420f, +0.000988f, +0.001319f, +0.000465f, +0.000604f, -0.000348f, -0.000129f, -0.000535f, +0.000373f, - -0.000554f, -0.000717f, +0.000593f, -0.000035f, +0.000090f, -0.000494f, +0.000591f, +0.000391f, -0.000036f, -0.000623f, - -0.000545f, +0.000119f, +0.000806f, +0.000524f, -0.000102f, -0.000060f, +0.000041f, +0.000212f, -0.000244f, +0.000163f, - +0.000004f, +0.000235f, +0.000646f, -0.000462f, -0.000416f, +0.000293f, +0.000054f, +0.000481f, +0.000045f, +0.000180f, - +0.000045f, +0.000318f, -0.000257f, -0.000180f, +0.000091f, +0.000011f, +0.000144f, +0.000021f, +0.000020f, -0.000096f, - +0.000087f, -0.000026f, -0.000248f, -0.000042f, -0.000057f, +0.000057f, +0.000029f, -0.000081f, +0.000053f, -0.000031f, - -0.000082f, -0.000099f, +0.000077f, +0.000072f, -0.000081f, +0.000102f, -0.000077f, +0.000011f, +0.000068f, +0.000003f, - -0.000036f, +0.000085f, +0.000183f, +0.000055f, -0.000007f, -0.000079f, -0.000055f, +0.000001f, -0.000023f, +0.000078f, - -0.000048f, -0.000033f, -0.000057f, +0.000032f, +0.000073f, -0.000027f - }, - { - +0.000711f, +0.000500f, -0.001951f, +0.000539f, +0.000166f, +0.000253f, +0.000235f, -0.001056f, -0.000206f, +0.000205f, - +0.000175f, -0.000237f, -0.000101f, +0.003386f, -0.009641f, +0.001556f, +0.000656f, -0.000483f, -0.002079f, +0.002229f, - +0.001139f, -0.000302f, +0.000919f, +0.000082f, -0.000498f, -0.000525f, -0.000452f, -0.002096f, +0.001179f, -0.002028f, - +0.000025f, +0.000312f, +0.000786f, +0.000235f, -0.000541f, +0.000130f, -0.000273f, -0.000279f, +0.000058f, +0.000418f, - -0.000668f, -0.000063f, +0.000362f, +0.000249f, +0.000045f, -0.000163f, -0.000085f, +0.000061f, -0.000028f, -0.000222f, - +0.000153f, +0.000111f, -0.000032f, -0.000235f, +0.000210f, +0.000015f, -0.000126f, -0.000233f, +0.000418f, -0.000002f, - +0.000057f, +0.000117f, +0.000177f, -0.000011f, +0.000087f, +0.000039f, -0.000028f, -0.000089f, -0.000076f, +0.000077f, - +0.000184f, -0.000032f, -0.000104f, +0.000091f, -0.000012f, -0.000063f, -0.000072f, -0.000042f, -0.000103f, +0.000015f, - +0.000059f, -0.000037f, +0.000007f, +0.000001f, +0.000013f, -0.000048f, +0.000005f, +0.000038f, -0.000018f, +0.000043f, - +0.000068f, +0.000079f, -0.000001f, -0.000035f, +0.000036f, +0.000034f - }, - { - -0.011709f, +0.024988f, +0.006278f, -0.000216f, -0.001243f, +0.000139f, -0.000026f, +0.000035f, -0.000259f, -0.000371f, - -0.000482f, -0.000294f, +0.000905f, -0.000724f, -0.001394f, -0.000644f, -0.000931f, +0.000485f, +0.000937f, -0.000223f, - -0.000510f, -0.000250f, +0.000110f, -0.000453f, +0.000384f, +0.000501f, +0.000050f, +0.000410f, -0.000457f, -0.000565f, - -0.000554f, -0.000255f, +0.000140f, -0.000261f, -0.000236f, -0.000226f, -0.000013f, -0.000532f, -0.000334f, +0.000193f, - +0.000302f, +0.000345f, -0.000574f, -0.000123f, -0.000455f, -0.000022f, +0.000458f, -0.000249f, +0.000142f, -0.000132f, - -0.000054f, -0.000491f, +0.000530f, -0.000002f, -0.000043f, +0.000083f, -0.000004f, -0.000025f, -0.000144f, -0.000106f, - +0.000107f, +0.000082f, -0.000073f, -0.000151f, +0.000066f, +0.000082f, +0.000005f, -0.000105f, +0.000085f, +0.000139f, - +0.000014f, -0.000050f, +0.000119f, -0.000137f, -0.000215f, +0.000040f, +0.000020f, -0.000160f, +0.000041f, +0.000018f, - -0.000082f, -0.000021f, +0.000059f, +0.000002f, -0.000002f, +0.000026f, -0.000027f, -0.000062f, +0.000018f, -0.000002f, - +0.000042f, +0.000037f, -0.000013f, +0.000004f, -0.000029f, +0.000007f - }, - { - +0.000894f, -0.001144f, -0.002069f, +0.000657f, -0.000610f, +0.000282f, +0.000080f, -0.000704f, +0.000568f, +0.000212f, - -0.000175f, +0.000180f, +0.000715f, +0.000543f, +0.003214f, +0.000849f, -0.003406f, +0.002655f, +0.001585f, -0.001191f, - +0.000018f, +0.003182f, +0.002321f, +0.001758f, -0.000549f, +0.000601f, +0.001132f, -0.003179f, +0.000417f, -0.000125f, - -0.000076f, -0.000039f, -0.000555f, +0.000423f, -0.000282f, -0.000655f, +0.000695f, +0.000569f, -0.000103f, -0.000001f, - -0.000403f, +0.000078f, +0.000366f, -0.000097f, -0.000675f, -0.000443f, -0.000136f, -0.000131f, +0.000068f, +0.000233f, - -0.000014f, +0.000177f, +0.000216f, -0.000212f, -0.000240f, -0.000009f, -0.000068f, -0.000094f, -0.000451f, +0.000048f, - +0.000241f, +0.000199f, +0.000193f, +0.000168f, +0.000356f, +0.000037f, +0.000122f, -0.000049f, +0.000005f, -0.000045f, - +0.000058f, +0.000163f, +0.000068f, -0.000095f, -0.000141f, -0.000072f, +0.000016f, -0.000018f, +0.000045f, +0.000019f, - -0.000084f, +0.000046f, +0.000112f, -0.000017f, -0.000046f, -0.000000f, -0.000080f, -0.000106f, +0.000029f, +0.000044f, - +0.000001f, -0.000021f, +0.000022f, -0.000015f, +0.000011f, -0.000050f - }, - { - -0.005859f, -0.019048f, +0.006471f, -0.000682f, -0.000923f, -0.001594f, -0.000415f, -0.000304f, +0.000319f, -0.000523f, - -0.000813f, -0.000760f, -0.000310f, +0.000411f, -0.001024f, -0.000492f, +0.001705f, -0.000243f, +0.000499f, -0.000057f, - +0.000681f, -0.000494f, +0.000016f, +0.000227f, +0.000420f, +0.000142f, -0.000576f, +0.000224f, -0.000031f, -0.000114f, - -0.000282f, -0.000355f, -0.000279f, -0.000271f, -0.000112f, +0.000402f, +0.000343f, +0.000005f, +0.000106f, -0.000162f, - -0.000094f, +0.000115f, -0.000080f, +0.000102f, +0.000396f, +0.000031f, -0.000172f, +0.000576f, +0.000012f, -0.000336f, - -0.000174f, -0.000051f, -0.000420f, -0.000233f, +0.000230f, +0.000029f, -0.000014f, +0.000091f, -0.000090f, -0.000007f, - +0.000122f, -0.000180f, -0.000069f, +0.000030f, -0.000058f, +0.000034f, -0.000031f, -0.000047f, -0.000018f, -0.000131f, - -0.000096f, +0.000050f, -0.000054f, -0.000059f, +0.000042f, -0.000022f, +0.000001f, -0.000019f, +0.000076f, -0.000053f, - +0.000086f, +0.000035f, -0.000033f, -0.000032f, -0.000011f, -0.000080f, -0.000095f, -0.000015f, -0.000070f, -0.000025f, - -0.000014f, +0.000002f, +0.000066f, +0.000013f, -0.000010f, -0.000055f - }, - { - -0.000631f, -0.000509f, +0.000853f, +0.000313f, -0.000597f, -0.000675f, -0.000821f, -0.000670f, +0.000243f, +0.000523f, - -0.000221f, -0.000556f, +0.001295f, -0.001243f, -0.001844f, -0.002133f, +0.000928f, +0.000360f, -0.000835f, -0.001836f, - +0.000961f, -0.000617f, +0.000428f, -0.000416f, +0.000365f, -0.000262f, -0.000817f, +0.000491f, +0.000622f, +0.000909f, - +0.000244f, -0.000433f, -0.000344f, -0.000034f, -0.000505f, -0.000289f, +0.000461f, -0.000268f, +0.000224f, -0.000150f, - +0.000145f, -0.000146f, -0.000095f, -0.000190f, -0.000010f, -0.000296f, -0.000047f, +0.000045f, +0.000222f, +0.000077f, - -0.000308f, -0.000035f, +0.000190f, +0.000259f, +0.000123f, -0.000077f, +0.000196f, -0.000045f, -0.000090f, +0.000002f, - -0.000055f, -0.000082f, +0.000134f, +0.000208f, -0.000123f, -0.000130f, +0.000042f, -0.000108f, -0.000135f, -0.000051f, - +0.000030f, +0.000081f, +0.000073f, -0.000001f, -0.000085f, -0.000013f, +0.000031f, +0.000120f, +0.000129f, -0.000060f, - -0.000015f, -0.000080f, -0.000022f, +0.000087f, +0.000084f, +0.000006f, +0.000012f, -0.000012f, +0.000030f, +0.000083f, - -0.000017f, +0.000020f, +0.000014f, -0.000001f, +0.000009f, -0.000028f - }, - { - +0.001374f, -0.010670f, -0.003691f, +0.001148f, -0.000419f, -0.003486f, -0.000151f, +0.001286f, +0.001079f, +0.000606f, - +0.000273f, +0.000873f, +0.000348f, +0.001441f, -0.000103f, +0.000734f, -0.000329f, +0.000754f, -0.000185f, +0.000147f, - +0.000510f, -0.000875f, -0.000234f, -0.000179f, -0.000521f, -0.000194f, +0.000254f, +0.000174f, -0.000158f, -0.000067f, - +0.000515f, +0.000102f, +0.000011f, +0.000221f, -0.000008f, +0.000265f, -0.000060f, +0.000083f, -0.000356f, +0.000016f, - -0.000405f, +0.000159f, -0.000372f, +0.000252f, +0.000111f, -0.000146f, -0.000076f, -0.000138f, +0.000102f, +0.000031f, - -0.000032f, -0.000061f, -0.000033f, -0.000104f, -0.000042f, +0.000099f, +0.000058f, -0.000112f, +0.000025f, +0.000058f, - +0.000003f, -0.000155f, +0.000155f, -0.000092f, -0.000140f, +0.000064f, +0.000043f, +0.000063f, +0.000054f, -0.000069f, - -0.000034f, +0.000106f, -0.000063f, -0.000070f, -0.000107f, -0.000047f, +0.000056f, -0.000038f, +0.000025f, -0.000006f, - -0.000011f, -0.000040f, -0.000050f, +0.000028f, -0.000071f, -0.000043f, +0.000083f, -0.000025f, +0.000053f, -0.000012f, - -0.000075f, -0.000030f, -0.000107f, -0.000014f, +0.000027f, -0.000011f - }, - { - +0.000237f, +0.004598f, +0.002059f, -0.001940f, -0.000764f, -0.000185f, -0.000542f, +0.000127f, +0.000238f, -0.000852f, - +0.000201f, -0.000444f, -0.003458f, +0.003105f, -0.001360f, -0.002837f, +0.001137f, -0.000020f, -0.000043f, -0.000299f, - +0.002026f, -0.000625f, -0.000174f, -0.003355f, -0.000329f, +0.000017f, -0.000376f, -0.000434f, -0.000501f, +0.000326f, - -0.000494f, +0.000768f, -0.000541f, +0.000203f, +0.000244f, -0.000912f, -0.000449f, -0.000771f, +0.000034f, -0.000125f, - +0.000241f, +0.000013f, -0.000007f, -0.000122f, +0.000334f, +0.000152f, +0.000236f, -0.000108f, +0.000403f, +0.000019f, - -0.000168f, -0.000276f, -0.000171f, +0.000173f, +0.000090f, -0.000351f, -0.000052f, -0.000023f, +0.000020f, +0.000207f, - +0.000255f, -0.000090f, -0.000284f, -0.000048f, +0.000019f, -0.000032f, -0.000076f, +0.000073f, +0.000172f, -0.000073f, - -0.000024f, +0.000007f, +0.000033f, +0.000054f, -0.000011f, -0.000145f, -0.000200f, -0.000004f, -0.000007f, -0.000012f, - +0.000083f, +0.000084f, +0.000030f, +0.000068f, +0.000032f, +0.000015f, -0.000025f, -0.000128f, +0.000053f, +0.000031f, - +0.000033f, -0.000030f, -0.000130f, -0.000025f, +0.000054f, -0.000072f - }, - { - -0.001841f, -0.003347f, -0.002289f, -0.002414f, +0.000185f, -0.002477f, -0.002410f, -0.000204f, +0.000093f, -0.001171f, - +0.001350f, +0.000670f, -0.000181f, +0.001436f, -0.000654f, -0.000489f, +0.000466f, +0.000192f, +0.000160f, -0.000133f, - +0.000247f, -0.000105f, +0.000093f, +0.000169f, -0.000425f, +0.000093f, +0.000413f, +0.000698f, -0.000613f, -0.000233f, - +0.000800f, -0.000269f, +0.000172f, +0.000218f, +0.000256f, -0.000416f, +0.000469f, +0.000770f, +0.000514f, -0.000221f, - -0.000950f, +0.000094f, -0.000268f, +0.000239f, +0.000366f, +0.000497f, +0.000426f, +0.000081f, +0.000017f, -0.000040f, - -0.000232f, +0.000352f, -0.000215f, -0.000215f, -0.000063f, +0.000336f, +0.000214f, +0.000074f, -0.000034f, +0.000258f, - +0.000048f, +0.000117f, +0.000144f, +0.000136f, +0.000268f, +0.000194f, +0.000166f, -0.000070f, -0.000024f, +0.000004f, - +0.000024f, -0.000030f, +0.000003f, +0.000014f, +0.000137f, +0.000062f, +0.000019f, -0.000148f, +0.000068f, +0.000113f, - +0.000053f, -0.000014f, +0.000046f, +0.000090f, -0.000044f, +0.000054f, +0.000064f, -0.000098f, -0.000022f, +0.000021f, - -0.000048f, -0.000021f, +0.000032f, -0.000008f, +0.000002f, -0.000011f - }, - { - -0.000200f, -0.003803f, +0.002130f, +0.000126f, +0.000097f, +0.000384f, +0.000333f, +0.000749f, +0.000992f, -0.000967f, - -0.000095f, +0.000130f, +0.001869f, +0.000697f, -0.009343f, +0.000027f, +0.005007f, +0.001146f, -0.002281f, +0.000269f, - +0.001657f, -0.000254f, -0.000404f, -0.000331f, +0.000317f, -0.000191f, -0.001186f, -0.001422f, +0.000676f, +0.000746f, - -0.000333f, +0.000502f, +0.000849f, -0.000288f, +0.000366f, +0.000397f, -0.001266f, -0.000171f, +0.000868f, -0.000383f, - +0.000210f, +0.000071f, -0.000272f, +0.000254f, +0.000236f, -0.000359f, +0.000424f, +0.000066f, +0.000122f, +0.000050f, - -0.000239f, +0.000012f, -0.000193f, -0.000189f, +0.000076f, -0.000147f, -0.000023f, -0.000118f, -0.000129f, -0.000343f, - -0.000256f, +0.000086f, +0.000070f, -0.000165f, -0.000092f, -0.000126f, +0.000269f, +0.000081f, -0.000085f, -0.000023f, - +0.000084f, -0.000052f, -0.000074f, +0.000004f, -0.000041f, -0.000085f, +0.000094f, -0.000038f, -0.000103f, -0.000115f, - +0.000044f, +0.000091f, +0.000098f, +0.000027f, -0.000071f, +0.000013f, -0.000043f, +0.000019f, +0.000061f, +0.000006f, - -0.000025f, -0.000007f, +0.000001f, -0.000030f, -0.000042f, +0.000039f - } - }, - { - { - +0.005866f, +0.036231f, -0.016480f, +0.003584f, +0.000040f, -0.000064f, -0.000741f, -0.000231f, -0.000218f, -0.000810f, - -0.000154f, -0.000138f, +0.000033f, -0.000087f, -0.001199f, -0.000378f, +0.000183f, +0.000665f, +0.000984f, -0.000094f, - +0.000249f, -0.000414f, -0.000114f, +0.000651f, +0.000123f, +0.000097f, +0.000292f, -0.000068f, -0.000565f, +0.000824f, - +0.000527f, +0.000346f, +0.000338f, -0.000121f, +0.000400f, +0.000081f, +0.000250f, +0.000076f, +0.000106f, +0.000469f, - +0.000068f, -0.000064f, -0.000066f, -0.000338f, -0.000166f, -0.000379f, +0.000087f, +0.000116f, -0.000190f, -0.000545f, - -0.000309f, +0.000034f, +0.000136f, +0.000104f, +0.000059f, -0.000206f, +0.000117f, -0.000089f, +0.000076f, -0.000137f, - -0.000013f, -0.000166f, +0.000117f, +0.000102f, +0.000025f, +0.000010f, -0.000067f, +0.000016f, +0.000144f, +0.000039f, - +0.000045f, -0.000089f, -0.000007f, -0.000016f, +0.000010f, +0.000031f, -0.000121f, +0.000061f, -0.000029f, -0.000133f, - -0.000090f, +0.000008f, +0.000058f, +0.000014f, +0.000068f, -0.000077f, -0.000017f, -0.000003f, -0.000059f, +0.000011f, - +0.000005f, -0.000029f, +0.000043f, +0.000045f, -0.000022f, -0.000027f - }, - { - -0.000093f, +0.006045f, -0.001659f, -0.001907f, +0.000497f, +0.000658f, -0.000288f, -0.000431f, +0.000110f, -0.000476f, - +0.000106f, -0.000554f, +0.000302f, +0.000328f, -0.002247f, +0.001153f, +0.001257f, +0.000409f, +0.001124f, -0.000694f, - +0.000143f, -0.000029f, -0.000277f, -0.000719f, +0.000131f, +0.000951f, +0.000144f, +0.000111f, -0.000519f, -0.000888f, - +0.000541f, -0.001106f, -0.000188f, +0.000466f, +0.000080f, +0.000609f, +0.000121f, -0.000090f, +0.000120f, +0.000451f, - -0.000232f, -0.000489f, -0.000540f, +0.000102f, +0.000117f, -0.000036f, -0.000098f, +0.000471f, -0.000242f, -0.000224f, - +0.000242f, -0.000090f, -0.000212f, -0.000185f, +0.000438f, -0.000017f, +0.000066f, +0.000192f, +0.000043f, -0.000247f, - -0.000262f, -0.000103f, +0.000084f, +0.000021f, -0.000045f, +0.000051f, -0.000147f, -0.000023f, -0.000012f, +0.000057f, - -0.000096f, +0.000094f, +0.000074f, +0.000020f, -0.000041f, +0.000041f, +0.000081f, +0.000023f, -0.000036f, -0.000101f, - +0.000046f, +0.000061f, -0.000082f, -0.000058f, -0.000027f, -0.000047f, -0.000045f, +0.000043f, -0.000075f, +0.000033f, - +0.000077f, -0.000022f, -0.000070f, -0.000045f, -0.000011f, +0.000068f - }, - { - +0.002164f, +0.006465f, -0.002727f, -0.003409f, -0.002855f, -0.000453f, +0.000178f, +0.000338f, +0.000109f, -0.000268f, - -0.000627f, -0.001351f, -0.000054f, -0.000310f, -0.000552f, -0.000395f, -0.000153f, +0.001160f, -0.000474f, +0.001125f, - +0.001180f, -0.001044f, +0.000309f, +0.001102f, -0.000012f, -0.000200f, -0.000395f, +0.001037f, -0.000203f, +0.000107f, - +0.000187f, +0.000144f, -0.000522f, -0.000191f, +0.000741f, +0.000021f, -0.000273f, +0.000259f, +0.000444f, +0.000460f, - +0.000103f, +0.000024f, -0.000257f, -0.000459f, -0.000389f, -0.000029f, -0.000097f, -0.000026f, -0.000042f, +0.000109f, - -0.000226f, +0.000036f, -0.000007f, -0.000129f, -0.000329f, +0.000122f, -0.000159f, -0.000038f, +0.000157f, +0.000005f, - -0.000194f, +0.000024f, -0.000153f, -0.000021f, +0.000013f, -0.000219f, +0.000137f, -0.000017f, -0.000135f, -0.000022f, - +0.000033f, -0.000196f, -0.000060f, +0.000108f, -0.000005f, +0.000111f, +0.000017f, -0.000103f, +0.000052f, +0.000048f, - -0.000046f, -0.000054f, +0.000034f, +0.000074f, -0.000029f, -0.000048f, -0.000045f, +0.000041f, -0.000018f, -0.000020f, - +0.000049f, +0.000084f, -0.000030f, +0.000024f, +0.000027f, -0.000043f - }, - { - -0.007704f, -0.026412f, -0.001422f, -0.001779f, +0.000139f, -0.000310f, +0.000164f, -0.000154f, +0.000171f, +0.000844f, - +0.000269f, -0.000238f, -0.000146f, +0.000862f, +0.000977f, -0.000507f, -0.000311f, -0.000459f, -0.000078f, -0.000461f, - +0.000202f, -0.000232f, -0.000330f, +0.000065f, +0.000184f, -0.000116f, +0.000786f, +0.000260f, -0.000656f, -0.000856f, - +0.000141f, +0.000452f, -0.000499f, +0.000316f, -0.000024f, +0.000763f, +0.000098f, -0.000139f, +0.000670f, -0.000227f, - +0.000281f, -0.000000f, -0.000287f, -0.000035f, -0.000049f, -0.000138f, -0.000176f, +0.000026f, +0.000166f, -0.000103f, - +0.000182f, +0.000057f, -0.000202f, +0.000075f, -0.000114f, +0.000108f, -0.000149f, -0.000109f, +0.000007f, -0.000084f, - -0.000086f, -0.000112f, +0.000002f, -0.000020f, -0.000168f, -0.000002f, -0.000124f, +0.000039f, +0.000004f, -0.000055f, - +0.000024f, +0.000169f, +0.000114f, -0.000025f, -0.000013f, -0.000078f, +0.000013f, +0.000042f, -0.000011f, -0.000073f, - -0.000045f, -0.000055f, +0.000076f, +0.000039f, +0.000010f, +0.000013f, -0.000063f, +0.000057f, +0.000061f, -0.000033f, - -0.000042f, +0.000011f, +0.000024f, -0.000018f, -0.000042f, +0.000053f - }, - { - -0.000189f, -0.010008f, +0.001515f, -0.000104f, -0.000201f, +0.000214f, -0.000298f, +0.000790f, -0.000380f, +0.000205f, - +0.000131f, +0.000262f, -0.000552f, -0.000864f, +0.002015f, +0.002807f, +0.002936f, -0.005823f, +0.001752f, +0.003541f, - +0.000988f, -0.000348f, +0.000143f, -0.000071f, +0.000592f, +0.001213f, -0.002452f, -0.001112f, +0.001107f, +0.002346f, - +0.000854f, +0.000577f, +0.000035f, +0.000328f, +0.000224f, -0.001342f, +0.000063f, +0.000039f, -0.000165f, +0.000280f, - -0.000061f, +0.000243f, -0.000032f, -0.000069f, +0.000141f, +0.000092f, -0.000137f, +0.000182f, -0.000222f, -0.000433f, - +0.000057f, +0.000070f, -0.000076f, -0.000010f, +0.000084f, +0.000092f, +0.000075f, +0.000140f, +0.000233f, +0.000013f, - +0.000051f, +0.000159f, +0.000130f, -0.000096f, -0.000102f, -0.000248f, +0.000188f, +0.000125f, -0.000028f, -0.000074f, - +0.000145f, +0.000106f, +0.000077f, +0.000041f, +0.000100f, -0.000034f, -0.000050f, -0.000031f, -0.000156f, -0.000055f, - -0.000024f, +0.000049f, +0.000107f, -0.000055f, -0.000004f, +0.000012f, -0.000068f, +0.000049f, +0.000000f, -0.000023f, - -0.000016f, -0.000028f, -0.000004f, +0.000066f, -0.000016f, -0.000038f - }, - { - -0.007444f, -0.032082f, +0.000941f, +0.001946f, -0.000504f, +0.000128f, -0.000199f, +0.000482f, +0.000207f, -0.001190f, - -0.000877f, +0.000405f, +0.000472f, +0.000222f, -0.000873f, -0.000014f, -0.000215f, +0.000090f, -0.000424f, -0.000319f, - -0.000923f, -0.000154f, +0.000576f, -0.000358f, +0.000010f, -0.000498f, +0.000271f, +0.000736f, -0.000576f, -0.000786f, - -0.000032f, +0.000513f, +0.000317f, -0.000288f, +0.000220f, +0.000301f, -0.000133f, +0.000126f, -0.000074f, +0.000212f, - -0.000940f, -0.000199f, +0.000694f, +0.000130f, +0.000002f, -0.000009f, -0.000274f, +0.000227f, +0.000013f, +0.000127f, - +0.000147f, -0.000044f, -0.000500f, -0.000215f, +0.000002f, -0.000272f, -0.000199f, -0.000002f, +0.000189f, +0.000096f, - +0.000076f, -0.000064f, -0.000185f, +0.000009f, +0.000066f, +0.000010f, -0.000098f, +0.000013f, +0.000057f, -0.000066f, - -0.000118f, -0.000003f, +0.000066f, -0.000008f, +0.000002f, +0.000029f, -0.000077f, +0.000024f, +0.000097f, +0.000027f, - +0.000053f, +0.000115f, +0.000110f, -0.000063f, -0.000035f, -0.000043f, +0.000002f, -0.000052f, +0.000034f, +0.000023f, - -0.000041f, -0.000022f, -0.000015f, +0.000070f, +0.000003f, -0.000042f - }, - { - +0.000072f, -0.001279f, -0.001035f, +0.000466f, -0.000052f, -0.000026f, +0.000601f, -0.000239f, +0.000253f, +0.000150f, - +0.000001f, -0.000095f, +0.000017f, +0.003819f, -0.009458f, +0.000627f, -0.000359f, +0.000054f, -0.002039f, +0.001699f, - +0.001115f, -0.000988f, +0.000260f, +0.001866f, +0.001124f, -0.000892f, +0.000169f, +0.000037f, +0.000806f, -0.002424f, - -0.000169f, -0.000028f, +0.000178f, -0.000568f, -0.000083f, +0.000754f, +0.000014f, -0.000120f, -0.000314f, -0.000210f, - -0.000250f, +0.000668f, -0.000042f, +0.000066f, -0.000023f, -0.000146f, +0.000028f, +0.000184f, +0.000003f, -0.000078f, - -0.000079f, -0.000128f, +0.000020f, -0.000062f, +0.000054f, -0.000059f, -0.000108f, -0.000122f, +0.000128f, -0.000034f, - +0.000145f, +0.000075f, +0.000166f, -0.000051f, +0.000028f, +0.000060f, -0.000195f, -0.000045f, +0.000039f, +0.000130f, - +0.000058f, -0.000142f, -0.000062f, -0.000005f, -0.000090f, -0.000012f, -0.000116f, -0.000066f, -0.000075f, +0.000057f, - -0.000006f, -0.000051f, +0.000006f, -0.000017f, -0.000018f, -0.000039f, +0.000047f, +0.000028f, +0.000029f, +0.000075f, - +0.000066f, +0.000028f, -0.000050f, +0.000011f, +0.000015f, +0.000002f - }, - { - +0.010744f, +0.042791f, -0.005442f, +0.001033f, +0.000023f, +0.000545f, +0.000828f, -0.000324f, +0.000080f, -0.000534f, - -0.000628f, +0.000820f, +0.000373f, -0.001053f, +0.000336f, -0.000250f, -0.000661f, +0.000694f, -0.000041f, -0.000653f, - -0.000012f, -0.000354f, -0.000032f, +0.000048f, +0.001047f, +0.000074f, -0.000316f, -0.000124f, -0.000791f, -0.000358f, - -0.000187f, +0.000058f, -0.000099f, -0.000549f, -0.000138f, -0.000701f, +0.000025f, -0.000204f, -0.000118f, +0.000257f, - +0.000101f, +0.000058f, -0.000301f, +0.000092f, -0.000591f, -0.000038f, +0.000367f, +0.000227f, +0.000060f, -0.000335f, - -0.000052f, -0.000147f, +0.000616f, -0.000165f, -0.000115f, -0.000021f, -0.000091f, -0.000034f, -0.000056f, +0.000043f, - +0.000106f, -0.000062f, -0.000146f, -0.000016f, +0.000153f, +0.000012f, +0.000032f, -0.000071f, -0.000021f, +0.000027f, - -0.000011f, -0.000052f, -0.000036f, -0.000150f, -0.000020f, +0.000139f, -0.000104f, -0.000096f, +0.000132f, -0.000021f, - -0.000007f, +0.000077f, +0.000015f, +0.000001f, +0.000048f, +0.000009f, -0.000021f, -0.000032f, -0.000026f, -0.000013f, - +0.000038f, +0.000005f, -0.000024f, -0.000029f, -0.000014f, +0.000050f - }, - { - +0.000158f, -0.003274f, +0.000884f, +0.001198f, -0.000220f, +0.000233f, -0.000302f, -0.001051f, +0.000194f, +0.000051f, - +0.000192f, +0.000113f, +0.000425f, +0.001558f, +0.003018f, +0.003631f, +0.001840f, +0.002617f, +0.001249f, -0.002224f, - -0.000360f, +0.002574f, -0.000412f, -0.001214f, -0.000183f, +0.000558f, +0.000616f, -0.000658f, +0.001252f, -0.000766f, - +0.000948f, -0.000192f, +0.000263f, +0.000408f, -0.000363f, +0.000033f, +0.000107f, -0.000168f, +0.000163f, -0.000104f, - -0.000570f, +0.000055f, +0.000084f, -0.000228f, -0.000539f, -0.000126f, -0.000034f, +0.000122f, +0.000091f, +0.000341f, - +0.000020f, -0.000027f, -0.000198f, -0.000204f, +0.000056f, +0.000109f, -0.000331f, -0.000230f, -0.000186f, +0.000227f, - +0.000235f, -0.000012f, -0.000078f, +0.000070f, +0.000131f, -0.000013f, +0.000139f, -0.000036f, +0.000068f, -0.000066f, - +0.000113f, +0.000138f, +0.000019f, -0.000192f, -0.000157f, +0.000022f, +0.000006f, -0.000099f, -0.000009f, -0.000002f, - +0.000001f, +0.000126f, +0.000044f, -0.000005f, -0.000033f, -0.000020f, -0.000094f, -0.000053f, +0.000062f, +0.000027f, - -0.000036f, +0.000015f, +0.000008f, -0.000013f, -0.000032f, -0.000061f - }, - { - +0.004930f, -0.013252f, +0.002012f, +0.001812f, -0.000568f, -0.002114f, +0.000232f, -0.000379f, +0.000133f, -0.001184f, - -0.000581f, -0.000527f, +0.000072f, +0.000924f, +0.000110f, -0.000108f, +0.000016f, -0.001132f, +0.000474f, +0.000320f, - +0.000169f, -0.000356f, +0.000256f, +0.000229f, +0.000100f, -0.000065f, -0.000568f, -0.000024f, -0.000313f, +0.000304f, - +0.000120f, -0.000133f, -0.000121f, -0.000109f, -0.000074f, +0.000309f, -0.000107f, -0.000456f, +0.000235f, -0.000399f, - -0.000123f, -0.000151f, +0.000347f, +0.000330f, -0.000285f, -0.000137f, -0.000202f, +0.000251f, -0.000099f, -0.000289f, - -0.000090f, -0.000058f, -0.000404f, +0.000135f, +0.000435f, +0.000079f, +0.000055f, +0.000089f, -0.000082f, +0.000116f, - +0.000079f, -0.000073f, -0.000070f, +0.000043f, +0.000129f, -0.000058f, -0.000044f, +0.000014f, -0.000073f, +0.000020f, - -0.000044f, +0.000055f, -0.000087f, +0.000026f, -0.000006f, -0.000001f, -0.000050f, +0.000093f, -0.000034f, -0.000023f, - +0.000084f, -0.000012f, -0.000105f, +0.000007f, -0.000067f, -0.000102f, -0.000069f, +0.000011f, -0.000077f, +0.000001f, - +0.000006f, +0.000045f, +0.000044f, -0.000016f, -0.000016f, -0.000063f - }, - { - +0.000468f, -0.001534f, -0.003758f, -0.001308f, -0.001118f, -0.000055f, +0.000936f, +0.000469f, +0.000072f, -0.000343f, - +0.000238f, +0.000152f, +0.000541f, +0.000549f, +0.000919f, -0.000058f, -0.000655f, -0.001749f, -0.000871f, +0.000561f, - +0.001177f, -0.000776f, -0.000293f, -0.001008f, +0.000316f, -0.000818f, -0.000494f, -0.000508f, -0.000383f, +0.000370f, - -0.000083f, -0.000424f, -0.000291f, +0.000077f, -0.000431f, +0.000064f, +0.000757f, -0.000126f, +0.000135f, -0.000437f, - +0.000490f, +0.000039f, -0.000053f, -0.000200f, +0.000038f, -0.000209f, +0.000121f, -0.000081f, -0.000181f, -0.000148f, - -0.000164f, +0.000129f, +0.000186f, +0.000165f, +0.000065f, -0.000056f, +0.000005f, -0.000052f, -0.000019f, +0.000037f, - -0.000150f, +0.000013f, +0.000142f, +0.000065f, -0.000156f, +0.000022f, -0.000114f, -0.000176f, +0.000072f, +0.000033f, - +0.000076f, +0.000040f, -0.000043f, -0.000047f, -0.000028f, +0.000079f, +0.000065f, +0.000097f, -0.000014f, -0.000037f, - +0.000015f, -0.000074f, -0.000039f, +0.000110f, +0.000030f, -0.000009f, +0.000041f, -0.000020f, +0.000060f, +0.000035f, - -0.000038f, +0.000018f, -0.000007f, -0.000012f, -0.000044f, +0.000033f - }, - { - +0.000252f, -0.010322f, -0.002583f, +0.000982f, -0.000550f, +0.000992f, +0.001825f, -0.000154f, +0.000489f, +0.000151f, - +0.000597f, +0.000123f, -0.000027f, +0.000519f, -0.000344f, +0.000589f, -0.001149f, +0.000197f, -0.000668f, -0.000031f, - -0.000066f, -0.000606f, -0.000044f, +0.000049f, -0.000230f, +0.000013f, -0.000422f, +0.000813f, +0.000056f, -0.000045f, - +0.000274f, +0.000177f, +0.000501f, +0.000138f, +0.000096f, +0.000639f, +0.000663f, +0.000511f, -0.000448f, -0.000295f, - -0.000616f, +0.000403f, -0.000670f, +0.000061f, -0.000007f, +0.000195f, +0.000281f, -0.000210f, -0.000177f, +0.000132f, - -0.000278f, -0.000021f, -0.000196f, +0.000140f, -0.000057f, +0.000015f, -0.000031f, +0.000081f, +0.000133f, -0.000068f, - -0.000034f, -0.000033f, +0.000099f, -0.000172f, -0.000026f, +0.000059f, +0.000044f, +0.000108f, +0.000032f, -0.000195f, - +0.000033f, +0.000068f, -0.000094f, -0.000023f, -0.000056f, -0.000009f, +0.000026f, -0.000020f, -0.000007f, -0.000024f, - -0.000023f, -0.000090f, +0.000023f, +0.000018f, -0.000056f, +0.000028f, +0.000027f, -0.000013f, +0.000021f, -0.000071f, - -0.000030f, -0.000026f, -0.000054f, +0.000013f, +0.000001f, -0.000020f - }, - { - -0.000082f, +0.004123f, +0.001671f, -0.001425f, +0.000432f, -0.000281f, -0.000013f, -0.000102f, +0.000125f, -0.000814f, - -0.000404f, -0.000307f, -0.000073f, +0.007969f, -0.001577f, -0.002295f, +0.001940f, +0.000710f, +0.001292f, -0.000206f, - +0.002952f, -0.001764f, -0.002250f, -0.004135f, -0.000848f, -0.001459f, +0.000141f, -0.000666f, +0.000054f, -0.000533f, - -0.000807f, +0.000666f, +0.000161f, +0.000243f, +0.000481f, -0.000077f, -0.000049f, -0.000186f, -0.000443f, -0.000607f, - +0.000246f, +0.000263f, +0.000188f, +0.000090f, +0.000292f, -0.000010f, -0.000237f, -0.000323f, +0.000185f, -0.000209f, - -0.000264f, -0.000306f, +0.000076f, +0.000150f, -0.000143f, -0.000243f, +0.000134f, -0.000020f, -0.000026f, +0.000295f, - +0.000197f, -0.000253f, -0.000177f, +0.000056f, +0.000080f, -0.000091f, -0.000148f, +0.000110f, -0.000017f, -0.000075f, - -0.000005f, +0.000033f, -0.000068f, +0.000006f, -0.000076f, -0.000058f, -0.000090f, +0.000035f, -0.000009f, -0.000069f, - +0.000100f, +0.000082f, +0.000038f, +0.000075f, -0.000001f, +0.000027f, -0.000083f, -0.000030f, +0.000017f, +0.000021f, - +0.000062f, -0.000091f, -0.000105f, +0.000066f, -0.000015f, -0.000062f - }, - { - +0.001955f, +0.001624f, -0.001048f, -0.000554f, +0.000259f, +0.001935f, +0.002977f, +0.000380f, +0.000068f, +0.000130f, - +0.000087f, -0.001209f, +0.000778f, -0.000152f, -0.002775f, +0.000666f, +0.000417f, +0.000157f, +0.000068f, -0.000234f, - +0.000723f, -0.000358f, +0.000095f, -0.000437f, -0.000217f, -0.000224f, +0.000159f, +0.000714f, -0.000618f, +0.000361f, - +0.000432f, -0.000453f, +0.000354f, +0.000463f, +0.000276f, -0.000289f, +0.000637f, +0.000725f, +0.000306f, -0.000000f, - -0.000252f, -0.000166f, -0.000224f, +0.000284f, +0.000276f, +0.000267f, +0.000187f, -0.000080f, +0.000148f, -0.000121f, - +0.000196f, +0.000109f, -0.000272f, +0.000022f, +0.000102f, +0.000333f, +0.000011f, -0.000191f, +0.000124f, +0.000176f, - +0.000063f, +0.000084f, +0.000119f, +0.000203f, +0.000129f, +0.000099f, +0.000028f, -0.000028f, -0.000030f, +0.000067f, - -0.000101f, -0.000002f, -0.000038f, +0.000003f, +0.000063f, +0.000056f, -0.000031f, -0.000065f, +0.000124f, +0.000060f, - -0.000020f, +0.000019f, +0.000102f, +0.000045f, -0.000021f, +0.000058f, -0.000051f, -0.000094f, +0.000039f, +0.000008f, - -0.000034f, +0.000030f, +0.000034f, -0.000011f, -0.000058f, -0.000015f - }, - { - -0.000026f, -0.003107f, +0.000657f, +0.000027f, +0.000361f, +0.000201f, +0.000470f, -0.001038f, -0.000472f, -0.000275f, - +0.000128f, -0.000328f, +0.001194f, +0.004622f, -0.002727f, +0.001510f, +0.003545f, +0.000426f, -0.001685f, +0.001019f, - +0.000928f, -0.000977f, -0.000385f, +0.000601f, +0.001278f, +0.000676f, -0.000845f, -0.000438f, +0.000210f, +0.000270f, - +0.000138f, +0.000547f, +0.000609f, -0.000445f, +0.000336f, +0.000010f, -0.000561f, +0.000925f, +0.000536f, -0.000529f, - -0.000383f, -0.000316f, -0.000237f, +0.000439f, +0.000012f, -0.000446f, +0.000441f, +0.000185f, +0.000086f, +0.000079f, - -0.000089f, -0.000107f, -0.000179f, +0.000070f, +0.000228f, -0.000207f, -0.000016f, -0.000036f, -0.000172f, -0.000327f, - -0.000136f, +0.000097f, -0.000044f, -0.000122f, -0.000040f, -0.000031f, +0.000295f, -0.000184f, -0.000091f, -0.000054f, - +0.000090f, -0.000131f, -0.000115f, -0.000025f, -0.000052f, +0.000074f, +0.000002f, -0.000044f, -0.000037f, -0.000013f, - +0.000133f, +0.000074f, +0.000091f, -0.000077f, -0.000075f, +0.000010f, -0.000055f, +0.000006f, +0.000067f, -0.000022f, - -0.000017f, +0.000026f, -0.000020f, -0.000046f, +0.000005f, +0.000062f - } - }, - { - { - -0.007167f, +0.030888f, +0.005645f, +0.001318f, +0.000560f, -0.000536f, -0.000234f, -0.000008f, -0.000597f, -0.000147f, - +0.000706f, -0.000785f, -0.000224f, -0.000379f, -0.000868f, -0.000868f, +0.000818f, +0.000194f, +0.000630f, +0.000877f, - -0.001415f, +0.000736f, -0.000171f, +0.000224f, +0.000321f, -0.000183f, -0.000095f, +0.000080f, +0.000029f, +0.000803f, - +0.000248f, +0.000601f, +0.000518f, +0.000615f, -0.000479f, +0.000185f, +0.000601f, +0.000259f, +0.000269f, +0.000106f, - -0.000092f, +0.000260f, -0.000127f, -0.000331f, -0.000044f, +0.000204f, -0.000294f, -0.000220f, -0.000090f, -0.000236f, - -0.000121f, +0.000154f, +0.000112f, +0.000011f, -0.000254f, -0.000201f, -0.000187f, -0.000223f, -0.000171f, -0.000050f, - +0.000212f, -0.000125f, -0.000168f, -0.000052f, +0.000060f, -0.000066f, +0.000122f, +0.000063f, -0.000027f, -0.000023f, - -0.000049f, -0.000026f, +0.000027f, +0.000004f, -0.000094f, -0.000173f, +0.000017f, +0.000027f, -0.000047f, +0.000096f, - +0.000066f, +0.000121f, +0.000057f, +0.000017f, -0.000020f, -0.000015f, +0.000071f, -0.000009f, +0.000040f, +0.000046f, - -0.000004f, -0.000024f, +0.000039f, -0.000002f, -0.000016f, +0.000013f - }, - { - -0.000185f, +0.007943f, -0.002271f, +0.001866f, +0.000291f, -0.000350f, -0.000023f, +0.000195f, -0.000003f, -0.000298f, - -0.000565f, +0.000446f, -0.000370f, -0.001719f, +0.000187f, -0.000814f, -0.000031f, +0.000320f, -0.000664f, -0.000212f, - -0.000243f, -0.000092f, -0.001185f, -0.000137f, -0.000165f, +0.000420f, +0.001266f, +0.000553f, -0.000156f, -0.001137f, - +0.000033f, -0.000686f, +0.000548f, +0.000447f, -0.000005f, +0.000516f, +0.000503f, +0.000171f, -0.000186f, -0.000348f, - +0.000276f, +0.000272f, -0.000155f, -0.000086f, +0.000214f, -0.000063f, +0.000245f, +0.000200f, -0.000307f, +0.000118f, - +0.000086f, +0.000040f, +0.000183f, +0.000421f, -0.000117f, -0.000410f, +0.000065f, +0.000034f, -0.000082f, -0.000125f, - +0.000045f, +0.000075f, +0.000027f, -0.000028f, +0.000064f, -0.000094f, +0.000098f, +0.000156f, -0.000008f, -0.000039f, - +0.000006f, +0.000096f, -0.000140f, -0.000062f, +0.000088f, +0.000011f, -0.000115f, -0.000073f, +0.000001f, +0.000096f, - +0.000021f, -0.000107f, -0.000027f, -0.000003f, +0.000006f, +0.000065f, +0.000021f, -0.000021f, +0.000038f, +0.000064f, - -0.000059f, -0.000030f, +0.000037f, +0.000069f, +0.000030f, -0.000025f - }, - { - -0.001831f, +0.003635f, +0.000171f, -0.002436f, +0.002708f, -0.000964f, +0.000383f, -0.000280f, -0.000192f, -0.000426f, - -0.000175f, -0.000983f, -0.000852f, +0.000251f, -0.000391f, +0.000151f, +0.000475f, +0.000453f, -0.000369f, -0.000010f, - +0.000607f, -0.000470f, +0.000434f, +0.000684f, +0.000610f, +0.000290f, +0.000105f, +0.000827f, -0.000407f, +0.000148f, - +0.000213f, -0.000396f, +0.000100f, -0.000095f, -0.000421f, -0.000269f, +0.000746f, -0.000453f, +0.000220f, +0.000300f, - -0.000036f, -0.000284f, -0.000151f, -0.000014f, -0.000072f, +0.000128f, -0.000001f, -0.000077f, +0.000326f, -0.000291f, - -0.000110f, +0.000072f, +0.000089f, -0.000134f, +0.000050f, +0.000115f, -0.000159f, -0.000004f, -0.000039f, +0.000054f, - -0.000121f, +0.000139f, -0.000104f, +0.000015f, -0.000129f, +0.000069f, +0.000081f, -0.000134f, +0.000108f, +0.000026f, - -0.000120f, -0.000144f, +0.000125f, +0.000001f, +0.000029f, -0.000015f, -0.000171f, +0.000076f, +0.000107f, -0.000021f, - -0.000003f, +0.000010f, +0.000029f, -0.000014f, +0.000024f, +0.000059f, +0.000022f, +0.000003f, -0.000071f, +0.000025f, - -0.000025f, -0.000051f, -0.000017f, +0.000006f, -0.000035f, -0.000011f - }, - { - +0.003446f, -0.044406f, +0.002179f, -0.001733f, -0.000436f, -0.000048f, +0.000186f, +0.000090f, +0.000360f, +0.000474f, - -0.000065f, -0.000346f, +0.000760f, -0.000586f, +0.000179f, -0.000969f, +0.000359f, -0.000570f, -0.000817f, -0.000210f, - -0.000245f, +0.000491f, +0.000031f, -0.000089f, -0.000054f, -0.000344f, +0.000159f, +0.000469f, +0.000173f, -0.000229f, - +0.000277f, +0.000248f, +0.000094f, -0.000021f, +0.000012f, +0.000672f, +0.000112f, +0.000377f, -0.000004f, +0.000395f, - +0.000091f, -0.000606f, +0.000031f, +0.000093f, +0.000107f, +0.000152f, -0.000010f, +0.000032f, +0.000072f, -0.000142f, - +0.000176f, -0.000016f, -0.000233f, +0.000322f, -0.000063f, +0.000060f, -0.000036f, -0.000091f, -0.000106f, -0.000139f, - -0.000020f, +0.000188f, +0.000033f, -0.000068f, +0.000128f, -0.000143f, +0.000026f, +0.000051f, -0.000020f, +0.000036f, - +0.000110f, -0.000065f, -0.000160f, +0.000062f, -0.000029f, -0.000006f, +0.000040f, -0.000003f, +0.000002f, +0.000046f, - +0.000078f, +0.000035f, +0.000029f, -0.000024f, +0.000005f, -0.000085f, -0.000010f, +0.000029f, -0.000073f, +0.000017f, - +0.000047f, +0.000023f, -0.000004f, +0.000007f, +0.000021f, +0.000004f - }, - { - +0.000510f, -0.010126f, -0.000686f, +0.000274f, +0.000329f, -0.000532f, +0.000106f, +0.000950f, +0.000160f, +0.000397f, - +0.000115f, +0.000226f, -0.000194f, +0.001814f, -0.002385f, +0.000069f, -0.001990f, -0.001463f, +0.005755f, +0.002298f, - -0.000699f, +0.000739f, -0.000544f, -0.000170f, -0.000586f, +0.000289f, -0.002744f, -0.000806f, +0.001431f, +0.001770f, - +0.000494f, +0.001605f, -0.000378f, +0.001308f, -0.000472f, -0.000348f, +0.000097f, +0.000099f, +0.000186f, +0.000044f, - +0.000036f, +0.000336f, +0.000642f, -0.000213f, +0.000027f, +0.000283f, -0.000180f, +0.000482f, -0.000187f, -0.000096f, - +0.000282f, -0.000230f, +0.000089f, +0.000031f, -0.000082f, +0.000023f, +0.000160f, +0.000268f, +0.000168f, +0.000118f, - +0.000190f, +0.000140f, +0.000041f, +0.000110f, +0.000163f, +0.000027f, +0.000145f, +0.000094f, -0.000061f, +0.000059f, - +0.000033f, -0.000041f, +0.000024f, -0.000036f, -0.000100f, +0.000015f, +0.000149f, +0.000051f, +0.000047f, +0.000041f, - +0.000105f, +0.000027f, -0.000089f, -0.000034f, +0.000063f, -0.000039f, +0.000046f, +0.000001f, -0.000041f, +0.000031f, - +0.000018f, +0.000040f, +0.000003f, -0.000026f, -0.000016f, +0.000064f - }, - { - +0.001991f, -0.046820f, +0.000562f, +0.002759f, -0.000978f, -0.000083f, +0.000576f, +0.000522f, -0.001104f, +0.000519f, - +0.001081f, -0.000177f, -0.000632f, -0.000442f, -0.000449f, -0.000485f, -0.000061f, +0.000533f, +0.000001f, -0.000250f, - +0.000026f, +0.000667f, -0.000447f, -0.000685f, +0.000088f, -0.000106f, -0.000131f, +0.000114f, -0.000965f, +0.000026f, - -0.000157f, +0.000188f, -0.000354f, +0.000090f, +0.000269f, -0.000068f, -0.000052f, +0.000130f, -0.000014f, +0.000289f, - -0.000221f, -0.000112f, -0.000188f, +0.000562f, +0.000459f, -0.000475f, -0.000455f, -0.000286f, +0.000016f, +0.000244f, - +0.000106f, -0.000339f, -0.000071f, +0.000181f, -0.000102f, -0.000157f, +0.000045f, +0.000201f, +0.000040f, +0.000056f, - -0.000088f, -0.000000f, +0.000149f, +0.000169f, +0.000038f, -0.000136f, -0.000012f, +0.000090f, -0.000033f, -0.000021f, - -0.000025f, +0.000117f, +0.000003f, -0.000044f, +0.000000f, -0.000013f, +0.000090f, -0.000002f, -0.000047f, +0.000029f, - +0.000017f, -0.000025f, -0.000146f, -0.000058f, +0.000009f, +0.000075f, +0.000042f, +0.000021f, +0.000028f, -0.000069f, - +0.000034f, -0.000010f, +0.000028f, -0.000024f, -0.000044f, +0.000006f - }, - { - -0.000493f, +0.001771f, +0.000459f, -0.000846f, -0.000001f, -0.000061f, +0.000488f, +0.000295f, +0.000419f, -0.000198f, - -0.000020f, +0.000089f, -0.000173f, -0.002308f, -0.003934f, -0.004390f, +0.000794f, -0.000439f, -0.001614f, +0.000040f, - +0.000617f, +0.000106f, +0.001668f, -0.001027f, +0.000972f, -0.001079f, -0.000169f, +0.001483f, -0.001157f, +0.000068f, - -0.000231f, +0.000303f, -0.001277f, +0.000238f, +0.000899f, +0.000437f, -0.000017f, -0.000005f, -0.000515f, +0.000148f, - +0.000169f, +0.000168f, -0.000129f, -0.000118f, -0.000223f, +0.000260f, +0.000262f, +0.000115f, -0.000041f, -0.000155f, - -0.000321f, -0.000090f, +0.000156f, +0.000102f, -0.000013f, +0.000021f, +0.000141f, +0.000057f, -0.000216f, -0.000049f, - -0.000039f, -0.000058f, +0.000032f, -0.000030f, -0.000092f, -0.000024f, -0.000084f, +0.000194f, +0.000067f, -0.000148f, - -0.000180f, +0.000046f, +0.000137f, -0.000020f, +0.000044f, +0.000063f, +0.000042f, +0.000083f, +0.000031f, +0.000007f, - -0.000008f, -0.000017f, +0.000022f, -0.000042f, -0.000025f, +0.000027f, -0.000017f, -0.000062f, -0.000006f, -0.000064f, - -0.000077f, -0.000075f, -0.000012f, +0.000030f, -0.000040f, +0.000002f - }, - { - -0.006506f, +0.054384f, -0.000045f, +0.001330f, +0.000823f, +0.000559f, +0.000215f, -0.000689f, +0.000080f, -0.000115f, - +0.000445f, -0.000047f, -0.000860f, -0.000356f, +0.001234f, -0.000345f, +0.000198f, -0.000251f, -0.001164f, +0.000058f, - +0.000391f, -0.000235f, +0.000509f, +0.000292f, -0.000057f, -0.000027f, -0.000254f, +0.000344f, -0.000857f, -0.000164f, - +0.000140f, -0.000165f, -0.000171f, +0.000240f, -0.000408f, -0.000153f, -0.000060f, +0.000153f, +0.000256f, +0.000280f, - -0.000062f, -0.000265f, +0.000109f, -0.000411f, -0.000016f, -0.000274f, -0.000015f, -0.000257f, -0.000024f, +0.000259f, - -0.000013f, +0.000102f, -0.000149f, -0.000334f, +0.000070f, +0.000117f, +0.000107f, +0.000103f, -0.000009f, +0.000038f, - -0.000099f, -0.000164f, +0.000067f, +0.000076f, -0.000004f, -0.000013f, -0.000020f, +0.000033f, -0.000078f, -0.000130f, - +0.000023f, +0.000027f, -0.000093f, +0.000176f, +0.000159f, -0.000043f, -0.000024f, +0.000109f, -0.000001f, -0.000001f, - +0.000063f, +0.000011f, -0.000048f, +0.000010f, +0.000028f, -0.000046f, +0.000049f, +0.000045f, +0.000006f, +0.000011f, - -0.000017f, -0.000009f, +0.000043f, +0.000025f, +0.000019f, +0.000000f - }, - { - -0.000859f, +0.001062f, +0.003988f, -0.000157f, +0.000302f, -0.000192f, -0.000480f, -0.000495f, +0.000291f, +0.000098f, - -0.000030f, -0.000147f, -0.000640f, +0.001474f, +0.005818f, -0.002390f, +0.004457f, +0.002270f, -0.000226f, -0.000748f, - +0.000466f, -0.000587f, -0.002146f, +0.001054f, +0.000628f, +0.001349f, -0.000467f, +0.001356f, +0.000779f, -0.000774f, - +0.000450f, -0.000135f, +0.000640f, -0.000099f, +0.000098f, +0.000125f, -0.000509f, -0.000164f, +0.000244f, -0.000106f, - +0.000403f, -0.000049f, -0.000300f, +0.000225f, +0.000155f, +0.000270f, +0.000023f, -0.000066f, +0.000475f, -0.000090f, - -0.000143f, -0.000296f, -0.000166f, -0.000048f, +0.000144f, +0.000007f, -0.000107f, +0.000005f, +0.000262f, +0.000047f, - -0.000039f, -0.000187f, -0.000196f, -0.000236f, -0.000260f, -0.000086f, -0.000077f, -0.000022f, +0.000086f, -0.000115f, - +0.000014f, +0.000000f, -0.000135f, +0.000024f, +0.000084f, +0.000037f, -0.000126f, -0.000044f, -0.000004f, +0.000006f, - +0.000043f, -0.000092f, -0.000111f, +0.000041f, +0.000003f, +0.000027f, +0.000081f, +0.000082f, +0.000026f, -0.000022f, - -0.000013f, +0.000029f, -0.000021f, +0.000036f, -0.000015f, +0.000021f - }, - { - -0.004339f, -0.007690f, +0.003814f, +0.002138f, +0.000414f, -0.000542f, -0.000652f, -0.000554f, -0.000409f, +0.000099f, - +0.000350f, +0.000344f, +0.000165f, -0.000598f, +0.001795f, -0.001222f, -0.001366f, +0.000601f, +0.000319f, -0.000309f, - -0.000123f, +0.000287f, +0.000390f, -0.000039f, +0.000256f, -0.000213f, -0.000626f, +0.000131f, +0.000223f, -0.000087f, - +0.000292f, -0.000057f, +0.000262f, +0.000520f, +0.000258f, -0.000230f, -0.000479f, -0.000035f, -0.000019f, -0.000322f, - +0.000516f, +0.000073f, +0.000275f, -0.000092f, -0.000118f, +0.000582f, -0.000071f, -0.000220f, +0.000114f, +0.000368f, - +0.000055f, +0.000017f, +0.000180f, +0.000067f, -0.000050f, +0.000108f, +0.000124f, -0.000078f, +0.000018f, +0.000002f, - -0.000176f, +0.000144f, +0.000057f, -0.000027f, +0.000055f, +0.000015f, -0.000031f, -0.000041f, +0.000009f, +0.000150f, - +0.000007f, -0.000032f, +0.000023f, +0.000053f, +0.000000f, +0.000022f, -0.000004f, +0.000029f, -0.000082f, +0.000000f, - -0.000080f, -0.000060f, +0.000022f, +0.000045f, +0.000000f, +0.000097f, +0.000091f, +0.000045f, +0.000058f, +0.000027f, - +0.000015f, +0.000007f, -0.000070f, -0.000021f, +0.000035f, +0.000035f - }, - { - -0.000239f, -0.001749f, -0.001846f, -0.003158f, -0.000141f, +0.000725f, +0.000759f, +0.000433f, -0.000023f, -0.000148f, - +0.000814f, +0.000603f, -0.000639f, +0.001641f, +0.001341f, -0.000471f, -0.001842f, -0.001919f, +0.000336f, +0.000456f, - -0.001212f, -0.000071f, -0.000041f, -0.000748f, -0.000259f, +0.000354f, -0.000660f, -0.000558f, -0.000625f, -0.001182f, - -0.000160f, -0.000128f, -0.000236f, -0.000200f, +0.000060f, +0.000306f, -0.000249f, -0.000134f, -0.000222f, -0.000443f, - +0.000300f, +0.000049f, +0.000088f, +0.000051f, -0.000251f, +0.000089f, +0.000044f, -0.000128f, +0.000001f, +0.000074f, - +0.000285f, +0.000145f, -0.000183f, -0.000226f, -0.000142f, -0.000014f, -0.000074f, +0.000038f, +0.000094f, -0.000027f, - +0.000222f, +0.000068f, -0.000192f, -0.000099f, +0.000145f, +0.000093f, -0.000038f, +0.000113f, +0.000156f, +0.000005f, - +0.000013f, -0.000061f, -0.000061f, +0.000017f, +0.000065f, -0.000018f, -0.000051f, -0.000142f, -0.000071f, +0.000035f, - -0.000050f, +0.000058f, +0.000053f, -0.000063f, -0.000102f, -0.000000f, -0.000018f, -0.000031f, -0.000009f, -0.000081f, - +0.000001f, -0.000014f, -0.000012f, -0.000001f, +0.000010f, +0.000027f - }, - { - -0.001975f, -0.006170f, -0.004253f, +0.000063f, +0.000723f, +0.002726f, -0.000499f, -0.000856f, +0.000392f, +0.000177f, - -0.000188f, -0.001082f, -0.000207f, -0.000556f, +0.000654f, -0.000378f, -0.000222f, -0.000491f, -0.000034f, -0.000292f, - -0.000374f, +0.000255f, +0.000283f, -0.000360f, +0.000253f, +0.000036f, -0.000122f, +0.000494f, -0.000095f, +0.000037f, - -0.000072f, +0.000148f, -0.000173f, -0.000183f, +0.000344f, +0.000276f, -0.000208f, -0.000403f, -0.000148f, -0.000115f, - -0.000366f, +0.000019f, -0.000073f, +0.000233f, -0.000233f, +0.000145f, +0.000080f, +0.000037f, +0.000047f, +0.000116f, - -0.000186f, +0.000237f, +0.000057f, +0.000168f, -0.000100f, -0.000092f, -0.000061f, +0.000124f, -0.000116f, -0.000121f, - +0.000073f, +0.000016f, -0.000031f, +0.000076f, +0.000050f, -0.000156f, -0.000022f, -0.000028f, -0.000072f, +0.000020f, - +0.000063f, -0.000057f, +0.000008f, +0.000017f, +0.000055f, +0.000045f, -0.000055f, -0.000053f, -0.000049f, -0.000038f, - -0.000025f, +0.000056f, +0.000076f, -0.000032f, +0.000053f, -0.000006f, -0.000066f, +0.000035f, -0.000033f, -0.000003f, - +0.000068f, +0.000040f, +0.000072f, -0.000016f, -0.000037f, +0.000009f - }, - { - -0.000038f, +0.003406f, -0.000189f, +0.001415f, +0.000460f, -0.000131f, +0.000602f, -0.000647f, +0.000032f, -0.000280f, - -0.000350f, +0.000549f, +0.001473f, +0.003878f, +0.003394f, -0.003227f, +0.002535f, +0.000703f, +0.001067f, +0.001161f, - -0.001574f, +0.001127f, -0.001481f, -0.002733f, -0.001410f, -0.000372f, -0.000104f, -0.001688f, +0.001109f, +0.000109f, - -0.000488f, -0.000188f, +0.000327f, -0.000070f, -0.000029f, +0.000235f, -0.000082f, -0.000040f, -0.000302f, +0.000061f, - -0.000059f, -0.000059f, +0.000290f, +0.000260f, +0.000220f, +0.000075f, -0.000085f, +0.000155f, -0.000253f, -0.000127f, - +0.000100f, +0.000179f, +0.000211f, -0.000042f, -0.000095f, +0.000202f, -0.000009f, -0.000234f, +0.000034f, -0.000061f, - -0.000153f, -0.000045f, +0.000198f, +0.000102f, -0.000056f, -0.000101f, -0.000031f, -0.000140f, -0.000112f, +0.000043f, - +0.000042f, +0.000002f, -0.000063f, -0.000059f, +0.000035f, +0.000148f, +0.000113f, -0.000009f, -0.000038f, -0.000028f, - -0.000068f, -0.000088f, -0.000060f, -0.000047f, -0.000027f, -0.000005f, +0.000003f, +0.000060f, -0.000072f, -0.000001f, - -0.000011f, +0.000001f, +0.000110f, +0.000032f, -0.000067f, +0.000073f - }, - { - -0.000745f, +0.004687f, -0.000722f, -0.002259f, -0.000243f, +0.003359f, +0.001124f, -0.000068f, +0.000109f, +0.001406f, - -0.000554f, -0.000034f, +0.000348f, -0.001558f, -0.000472f, +0.000271f, -0.001223f, +0.000166f, -0.000072f, +0.000037f, - +0.000342f, +0.000278f, +0.000154f, -0.000417f, +0.000895f, -0.000222f, -0.000080f, +0.000786f, +0.000524f, +0.000150f, - +0.000117f, -0.000171f, -0.000320f, -0.000069f, +0.000115f, -0.000023f, +0.000133f, +0.000077f, -0.000069f, +0.000184f, - +0.000561f, -0.000320f, +0.000303f, -0.000121f, -0.000277f, -0.000381f, -0.000094f, -0.000169f, +0.000148f, +0.000253f, - +0.000100f, -0.000317f, +0.000057f, +0.000137f, -0.000037f, -0.000207f, -0.000206f, +0.000060f, +0.000159f, -0.000077f, - +0.000130f, +0.000036f, +0.000054f, -0.000075f, -0.000105f, -0.000153f, -0.000114f, +0.000098f, +0.000027f, -0.000031f, - -0.000099f, +0.000082f, -0.000003f, -0.000006f, -0.000119f, -0.000060f, +0.000035f, +0.000074f, -0.000064f, -0.000112f, - -0.000060f, +0.000012f, -0.000055f, -0.000065f, +0.000008f, -0.000053f, -0.000061f, +0.000113f, +0.000042f, -0.000035f, - +0.000029f, +0.000003f, -0.000056f, -0.000026f, -0.000019f, +0.000008f - }, - { - +0.000181f, -0.002302f, -0.002060f, +0.000890f, -0.000125f, +0.000268f, +0.000116f, -0.001039f, -0.000533f, -0.000828f, - +0.000289f, -0.000199f, -0.000809f, +0.005600f, +0.001073f, +0.006005f, -0.000905f, +0.000935f, -0.000160f, -0.001104f, - -0.001014f, +0.000742f, -0.000829f, +0.000785f, +0.001354f, +0.001970f, -0.001995f, +0.000415f, -0.001058f, +0.000397f, - +0.000867f, +0.000341f, +0.000310f, +0.000740f, -0.001044f, +0.000110f, +0.001419f, +0.000485f, -0.000422f, +0.000037f, - -0.000026f, +0.000311f, +0.000301f, -0.000135f, -0.000161f, +0.000065f, -0.000324f, +0.000214f, +0.000308f, +0.000108f, - +0.000117f, -0.000010f, +0.000304f, +0.000123f, +0.000054f, -0.000157f, +0.000053f, +0.000120f, +0.000027f, +0.000183f, - +0.000216f, -0.000001f, -0.000118f, +0.000111f, -0.000008f, +0.000025f, -0.000195f, -0.000175f, +0.000097f, +0.000041f, - -0.000072f, -0.000042f, +0.000137f, -0.000036f, +0.000085f, +0.000002f, -0.000118f, +0.000034f, +0.000145f, +0.000089f, - +0.000010f, -0.000049f, -0.000089f, -0.000023f, +0.000028f, -0.000010f, +0.000025f, -0.000007f, -0.000061f, -0.000022f, - +0.000002f, -0.000031f, -0.000017f, +0.000033f, -0.000000f, -0.000017f - } - }, - { - { - +0.003834f, +0.023669f, -0.015645f, +0.002674f, -0.000110f, -0.000229f, +0.000646f, +0.000343f, -0.000514f, +0.000059f, - +0.000411f, -0.000502f, -0.000068f, +0.000721f, +0.001131f, -0.000986f, +0.000724f, -0.000210f, -0.000391f, -0.000085f, - -0.001776f, +0.000691f, -0.000499f, -0.000001f, +0.000159f, -0.000228f, -0.000064f, +0.000559f, +0.000471f, +0.000783f, - +0.000335f, +0.000442f, +0.000053f, +0.000516f, -0.000701f, +0.000275f, +0.000178f, -0.000081f, +0.000209f, -0.000021f, - -0.000224f, -0.000036f, -0.000090f, -0.000154f, +0.000001f, +0.000178f, -0.000079f, -0.000063f, -0.000049f, +0.000023f, - -0.000228f, -0.000139f, +0.000007f, -0.000039f, -0.000196f, +0.000018f, -0.000040f, -0.000059f, -0.000078f, +0.000117f, - +0.000122f, -0.000045f, -0.000122f, -0.000029f, +0.000117f, -0.000012f, +0.000182f, -0.000044f, -0.000105f, +0.000007f, - -0.000015f, +0.000046f, +0.000036f, -0.000034f, -0.000076f, -0.000066f, +0.000042f, -0.000035f, +0.000023f, +0.000095f, - +0.000071f, +0.000054f, -0.000035f, -0.000005f, -0.000041f, +0.000053f, +0.000031f, +0.000019f, +0.000044f, +0.000027f, - -0.000021f, +0.000011f, -0.000009f, -0.000027f, +0.000000f, +0.000027f - }, - { - +0.000040f, +0.009083f, -0.000873f, +0.002232f, +0.000135f, -0.000228f, +0.000306f, +0.000458f, +0.000098f, +0.000274f, - -0.000276f, +0.000451f, -0.000539f, +0.000279f, +0.002095f, -0.000992f, -0.000038f, -0.000498f, -0.001734f, -0.000229f, - -0.000641f, +0.000000f, -0.000863f, +0.000409f, +0.000370f, -0.000095f, +0.000695f, +0.000277f, +0.000438f, -0.000616f, - +0.000301f, -0.000153f, +0.000254f, +0.000098f, +0.000371f, -0.000094f, -0.000218f, +0.000005f, -0.000040f, -0.000647f, - +0.000095f, +0.000577f, +0.000098f, -0.000264f, +0.000293f, -0.000015f, +0.000066f, -0.000075f, -0.000093f, +0.000087f, - -0.000100f, +0.000182f, +0.000254f, +0.000288f, -0.000387f, -0.000123f, +0.000073f, -0.000187f, -0.000099f, +0.000050f, - +0.000074f, +0.000027f, -0.000063f, -0.000061f, +0.000146f, -0.000084f, +0.000139f, +0.000021f, -0.000067f, +0.000023f, - +0.000049f, -0.000048f, -0.000090f, -0.000014f, +0.000090f, -0.000082f, -0.000131f, -0.000015f, +0.000066f, +0.000072f, - -0.000039f, -0.000063f, +0.000066f, +0.000030f, +0.000026f, +0.000063f, +0.000001f, -0.000019f, +0.000061f, -0.000016f, - -0.000068f, +0.000004f, +0.000049f, +0.000044f, +0.000001f, -0.000041f - }, - { - +0.002107f, +0.006219f, -0.000434f, -0.001528f, +0.001965f, -0.000850f, +0.000531f, -0.000332f, -0.000033f, +0.000258f, - +0.000705f, -0.000551f, -0.000354f, +0.001268f, +0.001157f, +0.001743f, +0.000697f, +0.000084f, -0.000004f, +0.000209f, - +0.000197f, +0.000430f, -0.000346f, -0.000102f, +0.000210f, +0.000486f, -0.000101f, +0.000354f, -0.000091f, -0.000156f, - -0.000081f, -0.000194f, +0.000435f, +0.000012f, -0.000893f, +0.000145f, +0.000759f, -0.000374f, +0.000045f, -0.000151f, - -0.000077f, -0.000034f, +0.000129f, -0.000016f, +0.000149f, +0.000133f, +0.000140f, -0.000055f, +0.000212f, -0.000368f, - +0.000296f, +0.000181f, -0.000022f, +0.000046f, +0.000208f, +0.000010f, -0.000087f, -0.000153f, -0.000091f, +0.000077f, - -0.000060f, +0.000184f, +0.000001f, -0.000015f, -0.000069f, +0.000021f, -0.000048f, -0.000098f, +0.000182f, -0.000026f, - -0.000092f, -0.000005f, +0.000140f, -0.000103f, +0.000009f, -0.000010f, -0.000076f, +0.000123f, +0.000009f, -0.000046f, - +0.000064f, +0.000071f, -0.000010f, -0.000051f, +0.000024f, +0.000084f, +0.000024f, -0.000042f, -0.000039f, +0.000023f, - -0.000056f, -0.000060f, +0.000034f, -0.000022f, -0.000014f, +0.000025f - }, - { - +0.004476f, -0.045561f, -0.000410f, -0.001084f, +0.000912f, -0.000199f, -0.000031f, +0.000114f, -0.000016f, +0.000161f, - -0.000225f, -0.000089f, +0.001073f, -0.000682f, -0.000185f, -0.000167f, +0.000594f, -0.000756f, -0.000262f, +0.000005f, - -0.000480f, +0.000512f, +0.000240f, -0.000072f, +0.000206f, -0.000314f, +0.000124f, -0.000179f, +0.000396f, +0.000087f, - +0.000088f, -0.000090f, +0.000074f, -0.000151f, -0.000208f, +0.000141f, -0.000279f, -0.000028f, -0.000060f, +0.000500f, - -0.000000f, -0.000489f, +0.000333f, +0.000400f, +0.000201f, +0.000403f, +0.000048f, +0.000099f, -0.000018f, -0.000127f, - +0.000052f, -0.000156f, +0.000005f, +0.000203f, -0.000099f, -0.000073f, -0.000062f, +0.000016f, -0.000235f, -0.000095f, - +0.000104f, +0.000167f, -0.000020f, -0.000031f, +0.000111f, -0.000063f, +0.000113f, -0.000042f, +0.000063f, +0.000030f, - +0.000021f, -0.000152f, -0.000109f, +0.000105f, +0.000010f, +0.000055f, +0.000019f, +0.000010f, +0.000012f, +0.000066f, - +0.000063f, +0.000018f, -0.000062f, -0.000047f, +0.000012f, -0.000068f, +0.000022f, -0.000035f, -0.000064f, +0.000044f, - +0.000045f, -0.000006f, -0.000002f, +0.000018f, +0.000005f, -0.000036f - }, - { - -0.000333f, -0.008573f, +0.001489f, +0.000505f, +0.000094f, -0.000254f, +0.000365f, +0.000791f, +0.000344f, +0.000074f, - -0.000127f, +0.000162f, -0.000404f, +0.001432f, -0.002027f, -0.001978f, -0.002286f, +0.002440f, +0.000071f, +0.000764f, - -0.001390f, +0.000626f, -0.000472f, -0.000262f, -0.000256f, +0.001343f, -0.000268f, -0.000685f, -0.000042f, -0.000034f, - -0.000046f, +0.000738f, -0.000478f, +0.000910f, -0.000333f, +0.000576f, +0.000574f, +0.000032f, +0.000036f, -0.000199f, - -0.000102f, +0.000195f, +0.000171f, -0.000459f, +0.000017f, +0.000169f, +0.000047f, +0.000502f, -0.000398f, +0.000144f, - +0.000252f, -0.000098f, +0.000317f, -0.000075f, -0.000050f, -0.000053f, +0.000145f, +0.000175f, +0.000008f, -0.000001f, - +0.000022f, -0.000060f, -0.000096f, +0.000149f, +0.000217f, -0.000051f, -0.000011f, -0.000061f, -0.000001f, +0.000112f, - -0.000128f, -0.000111f, -0.000001f, +0.000012f, -0.000069f, +0.000075f, +0.000095f, +0.000065f, +0.000115f, +0.000008f, - +0.000060f, -0.000054f, -0.000097f, +0.000022f, +0.000016f, -0.000006f, +0.000049f, -0.000026f, -0.000015f, +0.000026f, - +0.000024f, +0.000053f, -0.000022f, -0.000045f, +0.000024f, +0.000046f - }, - { - +0.007490f, -0.040831f, +0.000939f, +0.003230f, -0.000553f, -0.000045f, +0.000215f, -0.000536f, -0.000465f, +0.001295f, - +0.000642f, -0.000595f, -0.000621f, +0.000138f, +0.000007f, -0.000761f, -0.000040f, +0.000751f, +0.000029f, +0.000181f, - +0.000227f, +0.000225f, -0.000620f, -0.000630f, +0.000089f, +0.000017f, -0.000021f, -0.000515f, -0.000729f, +0.000408f, - -0.000031f, -0.000047f, -0.000475f, +0.000072f, +0.000036f, +0.000038f, +0.000046f, +0.000054f, -0.000035f, +0.000243f, - +0.000253f, -0.000048f, -0.000212f, +0.000155f, -0.000005f, -0.000360f, -0.000115f, -0.000179f, +0.000009f, +0.000226f, - +0.000002f, +0.000072f, +0.000222f, +0.000133f, -0.000053f, +0.000172f, +0.000178f, -0.000015f, -0.000123f, -0.000097f, - -0.000131f, +0.000075f, +0.000143f, +0.000129f, -0.000030f, -0.000083f, +0.000085f, +0.000049f, -0.000011f, -0.000015f, - -0.000001f, +0.000058f, -0.000007f, +0.000020f, -0.000011f, +0.000065f, +0.000064f, -0.000043f, -0.000072f, +0.000034f, - -0.000040f, -0.000078f, -0.000116f, +0.000054f, +0.000034f, +0.000058f, +0.000004f, +0.000051f, -0.000050f, -0.000034f, - +0.000056f, +0.000008f, +0.000012f, -0.000060f, +0.000002f, +0.000032f - }, - { - -0.000214f, +0.003329f, +0.000076f, -0.000714f, -0.000055f, -0.000095f, +0.000336f, +0.000191f, +0.000203f, -0.000247f, - -0.000092f, +0.000020f, -0.000251f, -0.001705f, -0.000832f, -0.004133f, +0.002017f, +0.000026f, -0.001840f, -0.000363f, - +0.000655f, -0.000183f, +0.001230f, -0.002859f, -0.000509f, -0.000847f, -0.000078f, +0.001018f, -0.000122f, +0.001977f, - +0.000785f, +0.000356f, -0.001356f, +0.001030f, +0.000674f, -0.000348f, -0.000427f, +0.000106f, -0.000436f, +0.000543f, - -0.000067f, -0.000439f, -0.000032f, -0.000072f, -0.000012f, +0.000220f, +0.000132f, +0.000023f, -0.000021f, -0.000149f, - -0.000209f, -0.000012f, +0.000068f, -0.000017f, +0.000054f, +0.000067f, +0.000224f, +0.000042f, -0.000007f, +0.000095f, - -0.000047f, -0.000109f, +0.000027f, -0.000032f, -0.000128f, -0.000003f, +0.000082f, +0.000103f, -0.000079f, -0.000227f, - -0.000090f, +0.000137f, +0.000029f, -0.000022f, +0.000064f, +0.000003f, +0.000106f, +0.000098f, +0.000000f, -0.000028f, - +0.000042f, -0.000016f, +0.000013f, -0.000030f, +0.000007f, +0.000019f, -0.000055f, -0.000068f, -0.000056f, -0.000078f, - -0.000058f, -0.000024f, +0.000033f, -0.000008f, -0.000036f, +0.000011f - }, - { - +0.000543f, +0.060071f, -0.000578f, +0.001004f, +0.000581f, +0.000331f, -0.000157f, +0.000290f, -0.000114f, +0.000017f, - +0.000734f, -0.000870f, -0.000227f, +0.000467f, +0.000429f, -0.000654f, +0.000091f, -0.000210f, -0.000355f, +0.000157f, - +0.000071f, +0.000003f, +0.000261f, -0.000518f, -0.000987f, +0.000059f, -0.000442f, +0.000261f, -0.000458f, +0.000364f, - +0.000095f, -0.000026f, +0.000241f, +0.000299f, -0.000189f, +0.000350f, -0.000085f, +0.000197f, -0.000101f, -0.000149f, - -0.000090f, +0.000003f, +0.000078f, -0.000437f, +0.000395f, -0.000602f, -0.000130f, -0.000430f, +0.000066f, +0.000350f, - +0.000021f, -0.000093f, -0.000201f, -0.000113f, +0.000057f, +0.000084f, +0.000094f, +0.000078f, +0.000015f, -0.000028f, - -0.000134f, -0.000006f, +0.000102f, -0.000087f, -0.000126f, -0.000000f, -0.000021f, +0.000052f, -0.000004f, -0.000043f, - +0.000038f, +0.000020f, +0.000002f, +0.000214f, +0.000015f, -0.000096f, +0.000109f, +0.000030f, -0.000082f, +0.000035f, - +0.000032f, -0.000036f, -0.000024f, +0.000011f, +0.000003f, -0.000010f, +0.000038f, +0.000000f, +0.000027f, +0.000010f, - -0.000034f, -0.000017f, +0.000035f, +0.000034f, -0.000009f, -0.000028f - }, - { - -0.000251f, +0.003506f, +0.000668f, -0.001283f, +0.000182f, -0.000165f, -0.000165f, +0.000093f, +0.000342f, -0.000072f, - -0.000176f, -0.000184f, -0.000934f, +0.000314f, +0.004721f, -0.009431f, -0.001921f, +0.002022f, +0.000198f, -0.000270f, - -0.000087f, -0.001192f, -0.001358f, +0.002929f, +0.000536f, +0.001954f, +0.000380f, +0.000578f, +0.000661f, -0.000493f, - -0.000405f, +0.000119f, +0.000554f, +0.000088f, -0.000157f, -0.000342f, -0.000426f, -0.000041f, +0.000001f, +0.000140f, - +0.000543f, -0.000204f, -0.000291f, +0.000072f, +0.000263f, +0.000308f, +0.000069f, -0.000248f, +0.000263f, -0.000338f, - -0.000183f, -0.000250f, +0.000054f, -0.000076f, -0.000007f, +0.000004f, +0.000226f, +0.000233f, +0.000178f, -0.000124f, - -0.000112f, -0.000008f, +0.000018f, -0.000222f, -0.000084f, -0.000018f, -0.000133f, +0.000014f, +0.000014f, -0.000125f, - -0.000083f, -0.000048f, -0.000017f, +0.000178f, +0.000098f, -0.000008f, -0.000062f, +0.000050f, -0.000007f, +0.000008f, - -0.000013f, -0.000147f, -0.000054f, +0.000054f, +0.000009f, +0.000046f, +0.000108f, +0.000014f, -0.000042f, -0.000020f, - +0.000015f, +0.000009f, +0.000005f, +0.000044f, +0.000018f, +0.000034f - }, - { - +0.003674f, -0.003264f, -0.002687f, +0.001745f, +0.001205f, +0.001149f, -0.000019f, -0.000355f, -0.000162f, +0.000661f, - -0.000118f, +0.000271f, -0.000001f, -0.001335f, +0.001528f, -0.000952f, -0.000763f, +0.000537f, +0.000189f, -0.000263f, - +0.000338f, +0.000260f, +0.000246f, -0.000234f, +0.000256f, +0.000078f, -0.000621f, +0.000079f, +0.000582f, -0.000198f, - +0.000151f, -0.000356f, +0.000092f, +0.000358f, -0.000157f, -0.000461f, -0.000251f, +0.000283f, -0.000228f, -0.000086f, - +0.000591f, +0.000065f, -0.000122f, -0.000098f, +0.000316f, +0.000555f, -0.000312f, -0.000370f, +0.000175f, +0.000453f, - -0.000009f, -0.000000f, +0.000317f, -0.000153f, -0.000296f, +0.000071f, +0.000031f, -0.000194f, +0.000002f, -0.000027f, - -0.000070f, -0.000003f, +0.000029f, -0.000031f, -0.000075f, +0.000089f, -0.000008f, -0.000059f, +0.000056f, +0.000074f, - +0.000048f, +0.000003f, +0.000070f, -0.000019f, +0.000042f, +0.000016f, +0.000027f, -0.000088f, +0.000021f, -0.000036f, - -0.000088f, +0.000001f, +0.000080f, +0.000000f, +0.000063f, +0.000103f, +0.000054f, +0.000026f, +0.000067f, +0.000012f, - +0.000001f, -0.000034f, -0.000041f, +0.000011f, +0.000036f, +0.000045f - }, - { - +0.000315f, -0.000592f, +0.001192f, -0.002107f, +0.000222f, +0.000041f, -0.000465f, +0.000555f, +0.000531f, +0.000518f, - +0.000157f, +0.000214f, +0.000042f, +0.000277f, +0.001102f, -0.000279f, -0.000483f, +0.000209f, +0.001130f, -0.001082f, - -0.000875f, +0.000838f, -0.000004f, -0.000627f, +0.000236f, +0.000845f, -0.001382f, -0.000358f, -0.000312f, -0.000810f, - +0.000267f, +0.000267f, -0.000025f, -0.000106f, +0.000138f, -0.000008f, -0.000381f, -0.000024f, -0.000016f, -0.000055f, - -0.000135f, -0.000211f, -0.000011f, +0.000018f, -0.000246f, +0.000115f, +0.000038f, -0.000010f, +0.000169f, +0.000191f, - +0.000179f, -0.000038f, -0.000115f, -0.000075f, -0.000059f, -0.000125f, -0.000010f, +0.000105f, +0.000040f, -0.000093f, - +0.000289f, -0.000074f, -0.000234f, -0.000048f, +0.000192f, -0.000007f, +0.000075f, +0.000139f, -0.000013f, -0.000059f, - -0.000067f, -0.000039f, +0.000042f, +0.000062f, +0.000022f, -0.000099f, -0.000064f, -0.000120f, +0.000035f, +0.000041f, - -0.000019f, +0.000086f, +0.000039f, -0.000117f, -0.000064f, +0.000019f, -0.000034f, -0.000011f, -0.000028f, -0.000050f, - +0.000020f, -0.000024f, -0.000003f, +0.000006f, +0.000050f, -0.000029f - }, - { - +0.002271f, +0.001456f, -0.001568f, +0.001012f, +0.000949f, +0.000941f, -0.001093f, -0.000308f, +0.000467f, +0.000303f, - -0.000456f, -0.000606f, +0.000141f, +0.000333f, +0.000797f, +0.000171f, +0.000968f, -0.000666f, +0.000184f, -0.000321f, - +0.000226f, +0.000500f, +0.000283f, -0.000375f, +0.000464f, -0.000064f, +0.000173f, -0.000145f, -0.000264f, -0.000005f, - -0.000049f, -0.000143f, -0.000423f, +0.000158f, +0.000144f, -0.000111f, -0.000507f, -0.000127f, +0.000192f, -0.000047f, - -0.000017f, -0.000003f, +0.000186f, +0.000261f, -0.000256f, -0.000254f, +0.000007f, +0.000148f, +0.000013f, +0.000122f, - +0.000124f, +0.000142f, +0.000174f, -0.000095f, -0.000059f, +0.000052f, +0.000011f, +0.000009f, -0.000198f, -0.000007f, - +0.000133f, -0.000023f, -0.000006f, +0.000142f, -0.000002f, -0.000111f, -0.000012f, -0.000037f, -0.000042f, +0.000126f, - -0.000019f, -0.000050f, +0.000051f, +0.000012f, +0.000048f, +0.000023f, -0.000027f, -0.000053f, -0.000018f, +0.000014f, - +0.000036f, +0.000089f, -0.000006f, -0.000024f, +0.000042f, -0.000049f, -0.000018f, +0.000023f, -0.000024f, +0.000034f, - +0.000044f, +0.000038f, +0.000030f, -0.000031f, -0.000013f, +0.000022f - }, - { - +0.000131f, +0.003242f, -0.000372f, +0.001961f, +0.000384f, +0.000088f, +0.000521f, -0.000486f, +0.000431f, +0.000161f, - +0.000181f, +0.000724f, -0.000569f, -0.001138f, +0.002130f, -0.003804f, +0.001911f, -0.000383f, +0.000347f, +0.000923f, - -0.003070f, +0.003982f, +0.001203f, -0.000775f, -0.000217f, +0.000183f, +0.000219f, -0.001111f, +0.000586f, +0.001379f, - -0.000010f, -0.000167f, -0.000016f, +0.000080f, +0.000057f, +0.000184f, -0.000019f, -0.000211f, +0.000048f, +0.000156f, - -0.000118f, -0.000241f, -0.000046f, -0.000078f, +0.000018f, -0.000153f, +0.000078f, +0.000322f, -0.000264f, -0.000175f, - +0.000188f, +0.000282f, +0.000041f, -0.000097f, +0.000101f, +0.000154f, -0.000140f, -0.000120f, +0.000035f, -0.000132f, - -0.000059f, +0.000085f, +0.000061f, -0.000060f, -0.000070f, +0.000028f, +0.000008f, -0.000140f, +0.000043f, +0.000010f, - +0.000018f, -0.000039f, +0.000008f, +0.000012f, +0.000093f, +0.000100f, +0.000087f, -0.000047f, -0.000034f, +0.000035f, - -0.000089f, -0.000101f, -0.000060f, -0.000053f, -0.000009f, -0.000015f, +0.000063f, +0.000016f, -0.000038f, -0.000013f, - -0.000029f, +0.000065f, +0.000103f, -0.000037f, -0.000010f, +0.000072f - }, - { - +0.000033f, +0.003020f, -0.000850f, -0.000133f, -0.000539f, +0.000010f, -0.002186f, +0.000129f, -0.000348f, +0.000263f, - -0.000001f, +0.000766f, -0.000766f, +0.000894f, +0.003318f, -0.000223f, -0.000621f, +0.000350f, -0.000592f, -0.000127f, - +0.000099f, +0.000424f, +0.000109f, +0.000227f, +0.001040f, +0.000066f, +0.000029f, +0.000438f, +0.000415f, -0.000347f, - -0.000100f, +0.000005f, -0.000064f, -0.000179f, +0.000118f, +0.000086f, -0.000209f, -0.000387f, -0.000169f, +0.000115f, - +0.000375f, -0.000067f, +0.000081f, -0.000428f, -0.000285f, -0.000337f, -0.000096f, -0.000084f, +0.000033f, +0.000400f, - -0.000143f, -0.000170f, +0.000151f, -0.000030f, -0.000135f, -0.000189f, -0.000087f, +0.000213f, -0.000031f, -0.000050f, - -0.000017f, -0.000057f, +0.000044f, -0.000136f, -0.000050f, -0.000147f, -0.000028f, +0.000063f, +0.000029f, -0.000130f, - -0.000006f, +0.000021f, +0.000004f, -0.000017f, -0.000093f, -0.000052f, +0.000088f, +0.000018f, -0.000103f, -0.000051f, - +0.000005f, -0.000012f, -0.000103f, -0.000032f, -0.000001f, -0.000048f, +0.000044f, +0.000108f, -0.000017f, -0.000013f, - +0.000030f, -0.000036f, -0.000044f, -0.000012f, +0.000038f, +0.000013f - }, - { - +0.000153f, -0.002199f, -0.000846f, +0.000949f, -0.000600f, -0.000029f, -0.000124f, -0.000099f, +0.000312f, -0.000598f, - +0.000823f, +0.000521f, -0.000396f, -0.001223f, -0.010002f, +0.001140f, -0.003152f, -0.000037f, +0.000088f, -0.000013f, - -0.000809f, +0.001883f, +0.000688f, -0.000400f, -0.000433f, +0.001519f, -0.001220f, +0.001985f, -0.000702f, +0.000214f, - +0.000516f, -0.000142f, -0.000295f, +0.000611f, -0.000936f, +0.000615f, +0.001055f, -0.000258f, +0.000026f, +0.000364f, - +0.000074f, +0.000157f, -0.000074f, -0.000560f, +0.000058f, +0.000160f, -0.000401f, +0.000083f, +0.000118f, +0.000031f, - +0.000161f, +0.000066f, +0.000198f, -0.000148f, +0.000019f, -0.000033f, -0.000009f, +0.000011f, +0.000084f, +0.000230f, - +0.000080f, -0.000014f, +0.000022f, +0.000164f, -0.000011f, -0.000020f, -0.000154f, +0.000044f, +0.000080f, +0.000022f, - -0.000129f, +0.000055f, +0.000112f, -0.000075f, +0.000103f, -0.000121f, -0.000004f, +0.000032f, +0.000076f, +0.000004f, - -0.000060f, -0.000044f, -0.000086f, +0.000073f, +0.000022f, +0.000004f, +0.000022f, -0.000022f, -0.000073f, +0.000005f, - +0.000006f, -0.000034f, +0.000008f, +0.000049f, -0.000024f, -0.000039f - } - }, - { - { - -0.001288f, +0.008067f, -0.001642f, -0.000189f, +0.000856f, +0.000588f, +0.000401f, -0.000094f, -0.000052f, -0.000865f, - -0.000655f, +0.000863f, +0.000267f, +0.000255f, +0.001226f, -0.000131f, +0.000121f, +0.000312f, -0.000613f, -0.001533f, - -0.000298f, +0.000261f, +0.000197f, -0.000568f, -0.000007f, +0.000112f, +0.000493f, +0.000345f, +0.000089f, +0.000797f, - +0.000207f, +0.000223f, -0.000280f, -0.000037f, +0.000231f, +0.000093f, +0.000028f, -0.000793f, -0.000077f, +0.000176f, - -0.000222f, +0.000050f, -0.000014f, +0.000006f, -0.000232f, -0.000254f, +0.000087f, +0.000232f, -0.000120f, -0.000211f, - -0.000370f, -0.000171f, +0.000043f, +0.000138f, -0.000014f, +0.000142f, +0.000194f, +0.000249f, +0.000113f, -0.000055f, - -0.000054f, +0.000032f, +0.000087f, +0.000086f, +0.000089f, +0.000054f, -0.000002f, -0.000122f, +0.000008f, +0.000132f, - +0.000070f, -0.000008f, -0.000039f, -0.000049f, +0.000074f, +0.000123f, -0.000086f, -0.000029f, +0.000010f, -0.000098f, - -0.000063f, -0.000097f, +0.000004f, -0.000027f, +0.000014f, +0.000023f, -0.000063f, +0.000020f, -0.000042f, -0.000033f, - -0.000008f, +0.000017f, -0.000003f, +0.000001f, +0.000007f, -0.000002f - }, - { - -0.000091f, +0.005865f, +0.001140f, -0.000560f, -0.000013f, +0.000543f, +0.000403f, -0.000195f, -0.000072f, +0.000375f, - +0.000131f, +0.000286f, +0.000087f, -0.000658f, +0.002267f, +0.002932f, +0.000336f, -0.000192f, +0.000318f, -0.001403f, - -0.000084f, -0.000062f, -0.000751f, +0.001221f, +0.001376f, -0.001235f, -0.000104f, -0.000300f, +0.000330f, +0.000203f, - -0.000369f, -0.000056f, -0.000299f, +0.000277f, +0.000242f, -0.000520f, -0.000390f, -0.000065f, -0.000118f, +0.000011f, - -0.000331f, +0.000128f, -0.000168f, -0.000011f, +0.000105f, -0.000092f, -0.000194f, +0.000029f, +0.000121f, -0.000289f, - +0.000108f, +0.000091f, -0.000165f, -0.000225f, +0.000155f, +0.000402f, -0.000080f, -0.000104f, +0.000050f, +0.000034f, - -0.000287f, -0.000108f, -0.000076f, -0.000023f, +0.000020f, +0.000055f, -0.000050f, -0.000171f, +0.000009f, +0.000021f, - +0.000008f, -0.000076f, +0.000151f, +0.000012f, -0.000034f, -0.000057f, +0.000089f, +0.000082f, +0.000018f, -0.000128f, - -0.000021f, +0.000122f, +0.000019f, -0.000016f, -0.000021f, -0.000049f, -0.000030f, +0.000019f, -0.000048f, -0.000056f, - +0.000069f, +0.000010f, -0.000051f, -0.000085f, -0.000028f, +0.000039f - }, - { - -0.001903f, +0.004573f, +0.007430f, -0.001277f, -0.002557f, +0.000036f, -0.000053f, -0.000293f, +0.000674f, +0.000545f, - -0.000242f, -0.000350f, +0.000603f, +0.000871f, +0.001323f, +0.001125f, +0.000272f, -0.000061f, +0.000992f, -0.000210f, - +0.000768f, +0.000680f, -0.000468f, +0.000093f, -0.000001f, -0.000541f, -0.000508f, +0.000211f, +0.000281f, +0.000038f, - +0.000138f, +0.000362f, -0.000021f, -0.000380f, +0.000137f, +0.000405f, -0.000118f, +0.000304f, +0.000188f, +0.000027f, - +0.000307f, -0.000164f, +0.000167f, -0.000429f, -0.000209f, -0.000105f, +0.000097f, -0.000025f, -0.000018f, +0.000116f, - +0.000238f, -0.000165f, -0.000167f, +0.000194f, -0.000075f, -0.000079f, -0.000005f, -0.000182f, +0.000155f, -0.000023f, - -0.000092f, -0.000029f, -0.000068f, +0.000032f, +0.000072f, -0.000208f, -0.000088f, +0.000025f, -0.000021f, -0.000101f, - +0.000101f, -0.000027f, -0.000079f, -0.000012f, +0.000037f, +0.000107f, +0.000096f, -0.000040f, -0.000092f, +0.000034f, - +0.000047f, -0.000013f, -0.000009f, +0.000047f, -0.000024f, -0.000032f, -0.000038f, +0.000004f, +0.000031f, -0.000043f, - +0.000010f, +0.000065f, +0.000029f, -0.000010f, +0.000046f, -0.000002f - }, - { - -0.011697f, -0.025372f, +0.002191f, -0.000662f, -0.001015f, -0.000075f, -0.000228f, -0.000145f, -0.000269f, +0.000104f, - +0.000574f, +0.000384f, +0.000416f, +0.000379f, +0.000349f, +0.000278f, -0.000064f, -0.000343f, +0.000338f, -0.000181f, - +0.000032f, -0.000309f, -0.000029f, +0.000184f, +0.000252f, +0.000249f, -0.000248f, +0.000053f, +0.000001f, -0.000566f, - +0.000013f, -0.000257f, -0.000189f, +0.000229f, -0.000190f, -0.000457f, -0.000035f, -0.000189f, +0.000440f, +0.000018f, - -0.000108f, +0.000132f, +0.000152f, +0.000199f, +0.000325f, +0.000068f, -0.000219f, +0.000075f, +0.000005f, -0.000038f, - -0.000157f, +0.000100f, +0.000042f, -0.000125f, +0.000054f, -0.000279f, -0.000083f, -0.000026f, -0.000105f, +0.000071f, - +0.000001f, -0.000146f, +0.000002f, -0.000053f, -0.000120f, +0.000029f, -0.000058f, -0.000021f, +0.000103f, -0.000086f, - -0.000095f, +0.000122f, +0.000174f, -0.000012f, +0.000052f, +0.000004f, -0.000020f, +0.000044f, -0.000032f, -0.000033f, - -0.000069f, -0.000065f, -0.000017f, +0.000027f, -0.000003f, +0.000037f, -0.000031f, -0.000006f, +0.000058f, -0.000009f, - -0.000050f, -0.000008f, +0.000024f, -0.000017f, -0.000033f, -0.000011f - }, - { - +0.000344f, -0.003897f, -0.001151f, +0.000045f, -0.000309f, +0.000325f, +0.000118f, +0.000254f, +0.000290f, -0.000710f, - +0.000269f, +0.000146f, -0.000049f, -0.003216f, +0.002804f, +0.000772f, +0.001600f, -0.000258f, -0.004097f, +0.001165f, - +0.000157f, +0.000185f, -0.000509f, +0.000160f, +0.000354f, +0.001957f, +0.000359f, -0.000193f, +0.000466f, -0.001977f, - +0.000533f, -0.000292f, +0.000228f, -0.000264f, -0.000123f, +0.001046f, -0.000103f, -0.000191f, +0.000075f, -0.000500f, - +0.000083f, +0.000039f, -0.000524f, -0.000457f, +0.000116f, -0.000215f, +0.000263f, +0.000133f, -0.000273f, -0.000100f, - -0.000118f, +0.000259f, +0.000142f, -0.000055f, +0.000075f, +0.000194f, -0.000128f, -0.000014f, +0.000124f, -0.000079f, - -0.000162f, -0.000072f, +0.000014f, -0.000046f, -0.000124f, -0.000187f, -0.000128f, -0.000059f, +0.000137f, -0.000031f, - -0.000027f, +0.000096f, -0.000009f, +0.000108f, +0.000093f, -0.000011f, -0.000079f, -0.000021f, -0.000066f, -0.000103f, - -0.000081f, -0.000008f, +0.000097f, -0.000007f, -0.000035f, +0.000008f, -0.000028f, +0.000011f, +0.000018f, -0.000015f, - -0.000004f, -0.000033f, -0.000009f, +0.000044f, +0.000016f, -0.000071f - }, - { - -0.014917f, -0.011895f, +0.004041f, +0.001193f, +0.001898f, +0.000180f, -0.000508f, -0.000849f, +0.000784f, -0.000168f, - -0.001053f, +0.000002f, +0.000151f, +0.000291f, -0.000585f, -0.000190f, +0.000377f, -0.000167f, -0.000027f, +0.000264f, - -0.000443f, -0.000539f, +0.000166f, -0.000270f, -0.000057f, -0.000120f, +0.000240f, -0.000446f, -0.000042f, -0.000250f, - -0.000061f, +0.000298f, +0.000050f, +0.000006f, -0.000151f, -0.000078f, +0.000363f, -0.000053f, +0.000239f, -0.000090f, - +0.000017f, -0.000298f, +0.000176f, +0.000230f, -0.000574f, +0.000153f, +0.000136f, +0.000002f, +0.000081f, -0.000053f, - +0.000195f, +0.000247f, +0.000024f, -0.000367f, +0.000012f, +0.000144f, -0.000171f, -0.000190f, -0.000014f, +0.000025f, - -0.000018f, -0.000052f, -0.000152f, -0.000025f, +0.000047f, +0.000029f, +0.000017f, -0.000072f, +0.000122f, -0.000043f, - -0.000060f, -0.000094f, +0.000050f, +0.000083f, +0.000002f, +0.000072f, -0.000084f, -0.000013f, +0.000054f, +0.000044f, - -0.000012f, +0.000044f, +0.000146f, +0.000104f, -0.000051f, -0.000067f, -0.000021f, -0.000045f, -0.000047f, +0.000069f, - -0.000017f, -0.000001f, -0.000025f, +0.000017f, +0.000054f, -0.000006f - }, - { - +0.000504f, -0.000179f, -0.001035f, +0.000691f, -0.000151f, +0.000137f, -0.000059f, -0.000123f, -0.000050f, +0.000314f, - -0.000209f, -0.000075f, +0.000006f, -0.001204f, +0.000841f, +0.001086f, +0.000526f, -0.000268f, -0.000826f, +0.000335f, - +0.000637f, +0.000953f, -0.001786f, -0.002082f, -0.000058f, -0.000329f, -0.000132f, +0.000638f, +0.000817f, +0.001250f, - +0.000493f, -0.000153f, +0.000425f, +0.000398f, -0.000580f, -0.000102f, -0.000290f, +0.000026f, -0.000058f, -0.000075f, - -0.000365f, -0.000106f, +0.000085f, +0.000202f, +0.000129f, -0.000243f, -0.000143f, +0.000122f, -0.000056f, +0.000108f, - -0.000067f, +0.000027f, -0.000160f, -0.000151f, +0.000060f, +0.000024f, -0.000065f, +0.000004f, +0.000235f, +0.000117f, - +0.000130f, +0.000105f, +0.000030f, +0.000002f, -0.000022f, +0.000088f, -0.000011f, -0.000187f, -0.000127f, +0.000080f, - +0.000146f, -0.000124f, -0.000113f, -0.000047f, -0.000063f, -0.000098f, -0.000018f, -0.000089f, -0.000071f, +0.000003f, - +0.000037f, -0.000025f, -0.000008f, +0.000019f, -0.000003f, -0.000036f, -0.000005f, +0.000037f, -0.000024f, +0.000061f, - +0.000083f, +0.000068f, +0.000008f, -0.000029f, +0.000029f, -0.000005f - }, - { - +0.007129f, +0.053807f, +0.002005f, +0.000088f, +0.000057f, -0.000027f, +0.000461f, +0.000683f, -0.000023f, -0.000270f, - -0.000297f, +0.000055f, +0.000767f, -0.000257f, -0.000529f, -0.000046f, -0.000161f, +0.000401f, +0.000840f, -0.000844f, - -0.000235f, +0.000165f, -0.000268f, -0.000907f, -0.000056f, -0.000098f, -0.000392f, -0.000024f, -0.000162f, -0.000148f, - -0.000027f, +0.000511f, +0.000347f, -0.000398f, -0.000057f, -0.000326f, -0.000349f, +0.000270f, -0.000524f, -0.000130f, - +0.000137f, +0.000074f, -0.000031f, -0.000012f, +0.000124f, -0.000357f, -0.000043f, +0.000031f, +0.000033f, -0.000174f, - -0.000100f, -0.000108f, +0.000344f, +0.000216f, -0.000123f, -0.000187f, -0.000056f, -0.000041f, -0.000048f, +0.000099f, - +0.000001f, -0.000001f, -0.000029f, -0.000212f, -0.000030f, +0.000071f, +0.000026f, -0.000023f, +0.000046f, +0.000104f, - -0.000046f, +0.000009f, +0.000020f, -0.000090f, -0.000158f, +0.000095f, +0.000015f, -0.000160f, +0.000017f, +0.000015f, - -0.000053f, +0.000053f, +0.000031f, +0.000003f, +0.000011f, +0.000043f, -0.000036f, -0.000084f, +0.000014f, -0.000020f, - +0.000004f, +0.000012f, -0.000049f, -0.000028f, -0.000036f, +0.000016f - }, - { - +0.000839f, +0.000567f, -0.004115f, -0.000078f, -0.000255f, +0.000162f, +0.000039f, +0.000020f, -0.000321f, -0.000018f, - +0.000243f, +0.000339f, +0.000228f, -0.000429f, +0.002075f, -0.007453f, -0.001816f, +0.001886f, +0.000518f, -0.000600f, - -0.001949f, +0.001135f, +0.000191f, +0.001077f, -0.000672f, +0.002471f, +0.001029f, -0.000921f, +0.000772f, -0.000417f, - -0.000102f, +0.000489f, -0.000054f, +0.000669f, -0.000659f, -0.000799f, +0.000290f, -0.000046f, +0.000061f, +0.000303f, - -0.000200f, -0.000352f, -0.000105f, -0.000395f, -0.000216f, -0.000095f, +0.000059f, -0.000004f, -0.000138f, -0.000068f, - -0.000091f, -0.000014f, +0.000094f, -0.000243f, -0.000240f, +0.000167f, +0.000140f, -0.000128f, -0.000061f, -0.000071f, - +0.000181f, +0.000183f, +0.000213f, +0.000084f, +0.000187f, +0.000149f, +0.000058f, +0.000050f, -0.000155f, -0.000017f, - +0.000022f, +0.000089f, +0.000102f, +0.000036f, -0.000125f, -0.000044f, +0.000031f, +0.000004f, +0.000033f, -0.000001f, - -0.000048f, +0.000047f, +0.000105f, -0.000002f, +0.000008f, -0.000021f, -0.000084f, -0.000112f, -0.000008f, +0.000030f, - -0.000011f, +0.000004f, +0.000038f, -0.000014f, -0.000001f, -0.000045f - }, - { - -0.002017f, +0.002137f, +0.000624f, +0.001806f, -0.000456f, +0.000138f, +0.000692f, +0.000440f, -0.000272f, -0.000303f, - -0.000815f, -0.000573f, -0.000425f, +0.000546f, -0.000027f, -0.000072f, +0.000240f, -0.000875f, -0.000272f, +0.000571f, - +0.000583f, +0.000022f, +0.000060f, -0.000220f, -0.000319f, +0.000240f, +0.000054f, -0.000148f, +0.000113f, -0.000059f, - -0.000304f, -0.000170f, -0.000078f, -0.000766f, -0.000562f, +0.000186f, +0.000202f, +0.000025f, +0.000038f, +0.000063f, - -0.000096f, -0.000167f, -0.000101f, +0.000419f, +0.000143f, -0.000445f, -0.000235f, -0.000005f, +0.000034f, -0.000203f, - -0.000214f, -0.000093f, -0.000205f, -0.000200f, +0.000256f, -0.000050f, -0.000139f, +0.000058f, -0.000039f, +0.000042f, - +0.000155f, -0.000171f, -0.000058f, -0.000058f, +0.000021f, +0.000015f, -0.000040f, +0.000022f, +0.000004f, -0.000089f, - +0.000024f, +0.000054f, +0.000007f, -0.000071f, +0.000009f, -0.000001f, -0.000008f, -0.000031f, +0.000062f, -0.000031f, - +0.000066f, +0.000044f, -0.000024f, -0.000053f, -0.000014f, -0.000092f, -0.000091f, -0.000020f, -0.000049f, -0.000031f, - -0.000011f, -0.000002f, +0.000073f, +0.000018f, -0.000030f, -0.000050f - }, - { - -0.000460f, +0.002836f, +0.000668f, -0.001949f, -0.000435f, -0.000329f, -0.000492f, +0.000625f, +0.000011f, +0.000346f, - -0.000841f, +0.000178f, +0.001154f, -0.000415f, +0.001038f, -0.000241f, +0.000659f, +0.001367f, -0.000801f, -0.000472f, - +0.001555f, +0.000635f, -0.000408f, -0.000933f, +0.000319f, -0.000305f, -0.000906f, -0.000019f, -0.000266f, +0.000343f, - +0.000436f, +0.000271f, -0.000126f, +0.000154f, -0.000283f, -0.000160f, +0.000398f, +0.000171f, +0.000261f, +0.000140f, - -0.000131f, -0.000133f, -0.000271f, -0.000110f, -0.000043f, -0.000138f, +0.000088f, +0.000057f, -0.000060f, +0.000031f, - -0.000172f, -0.000105f, +0.000206f, +0.000301f, +0.000114f, -0.000046f, +0.000024f, -0.000058f, -0.000125f, +0.000035f, - -0.000060f, -0.000144f, +0.000087f, +0.000074f, -0.000087f, -0.000094f, +0.000041f, -0.000150f, -0.000116f, -0.000016f, - -0.000042f, +0.000089f, +0.000090f, -0.000012f, -0.000063f, -0.000015f, +0.000051f, +0.000146f, +0.000078f, -0.000049f, - +0.000048f, -0.000025f, -0.000056f, +0.000053f, +0.000083f, -0.000000f, +0.000023f, +0.000018f, +0.000024f, +0.000069f, - -0.000009f, -0.000008f, -0.000006f, +0.000001f, +0.000008f, -0.000027f - }, - { - +0.000002f, +0.006185f, -0.001083f, +0.002816f, -0.001363f, -0.000837f, +0.001237f, +0.000324f, +0.000616f, -0.000273f, - +0.000370f, +0.000883f, +0.000094f, +0.000888f, +0.000677f, +0.000820f, +0.000532f, -0.000380f, +0.000040f, -0.000462f, - +0.000549f, -0.000183f, -0.000172f, +0.000183f, +0.000001f, -0.000082f, +0.000208f, -0.000544f, -0.000052f, +0.000235f, - -0.000035f, +0.000004f, +0.000253f, +0.000660f, -0.000465f, +0.000246f, +0.000459f, +0.000430f, +0.000197f, -0.000059f, - -0.000074f, -0.000023f, +0.000222f, -0.000303f, -0.000131f, -0.000147f, +0.000060f, +0.000049f, -0.000033f, -0.000022f, - -0.000027f, -0.000044f, -0.000079f, -0.000064f, +0.000115f, -0.000055f, +0.000049f, +0.000008f, +0.000079f, +0.000093f, - -0.000121f, +0.000082f, +0.000079f, -0.000092f, -0.000037f, +0.000081f, +0.000070f, +0.000074f, +0.000070f, -0.000061f, - -0.000067f, +0.000041f, -0.000023f, -0.000038f, -0.000050f, -0.000006f, +0.000039f, -0.000014f, +0.000035f, +0.000035f, - +0.000025f, -0.000019f, -0.000091f, +0.000009f, -0.000056f, -0.000010f, +0.000064f, -0.000031f, +0.000022f, -0.000007f, - -0.000060f, -0.000034f, -0.000087f, +0.000003f, +0.000022f, -0.000013f - }, - { - -0.000175f, +0.002247f, +0.002029f, +0.000382f, +0.000174f, -0.000094f, +0.000220f, +0.000263f, +0.000191f, -0.000123f, - +0.000333f, +0.000273f, -0.001723f, +0.001458f, -0.004173f, -0.002438f, +0.001322f, +0.000306f, -0.000053f, -0.000728f, - +0.001411f, +0.001795f, -0.000989f, +0.000017f, +0.000474f, -0.000407f, -0.000749f, +0.000670f, -0.000682f, +0.000242f, - +0.000643f, +0.000727f, +0.000105f, +0.000394f, +0.000032f, +0.000599f, -0.000092f, -0.000311f, -0.000264f, -0.000208f, - -0.000094f, -0.000217f, -0.000055f, -0.000219f, +0.000034f, -0.000109f, -0.000213f, -0.000181f, +0.000120f, -0.000147f, - -0.000157f, -0.000204f, -0.000083f, +0.000079f, -0.000040f, -0.000115f, -0.000093f, +0.000227f, -0.000047f, +0.000134f, - +0.000346f, -0.000063f, -0.000316f, -0.000164f, -0.000019f, +0.000095f, -0.000019f, +0.000076f, +0.000053f, -0.000050f, - -0.000026f, -0.000013f, +0.000033f, +0.000043f, -0.000014f, -0.000147f, -0.000086f, -0.000003f, +0.000022f, +0.000008f, - +0.000046f, +0.000098f, +0.000032f, +0.000051f, +0.000033f, +0.000010f, -0.000005f, -0.000067f, +0.000038f, +0.000013f, - +0.000033f, -0.000002f, -0.000118f, -0.000008f, +0.000040f, -0.000070f - }, - { - -0.000296f, +0.003607f, -0.000508f, +0.001151f, +0.000540f, -0.002325f, +0.000304f, -0.000078f, -0.000938f, -0.000351f, - +0.000606f, -0.000457f, -0.000642f, +0.000473f, +0.004104f, -0.000376f, +0.001059f, +0.000676f, -0.000711f, -0.000028f, - +0.000061f, -0.000019f, -0.000113f, +0.000255f, +0.000331f, +0.000297f, -0.000320f, -0.000369f, -0.000064f, -0.000421f, - +0.000029f, +0.000230f, +0.000473f, +0.000515f, +0.000187f, +0.000106f, +0.000051f, -0.000021f, +0.000394f, -0.000537f, - -0.000089f, -0.000252f, -0.000246f, -0.000058f, +0.000284f, +0.000280f, +0.000304f, +0.000008f, +0.000030f, -0.000090f, - -0.000081f, +0.000231f, -0.000193f, -0.000128f, +0.000098f, +0.000243f, +0.000169f, +0.000033f, -0.000081f, +0.000044f, - -0.000046f, +0.000074f, +0.000055f, +0.000094f, +0.000135f, +0.000140f, +0.000069f, -0.000057f, +0.000004f, -0.000049f, - -0.000013f, -0.000067f, -0.000015f, -0.000034f, +0.000093f, +0.000068f, -0.000001f, -0.000085f, +0.000087f, +0.000122f, - +0.000024f, -0.000014f, +0.000083f, +0.000083f, -0.000034f, +0.000061f, +0.000052f, -0.000101f, -0.000024f, +0.000039f, - -0.000032f, -0.000001f, +0.000038f, +0.000008f, +0.000006f, -0.000007f - }, - { - -0.000401f, -0.001414f, +0.001091f, +0.000023f, -0.000093f, -0.000094f, -0.000415f, +0.000827f, +0.000063f, +0.000229f, - +0.000296f, +0.000641f, +0.001577f, -0.007383f, -0.008309f, -0.004822f, +0.000596f, -0.000059f, -0.000172f, +0.001138f, - +0.000870f, +0.000710f, +0.000971f, -0.000940f, -0.000677f, +0.000501f, +0.000133f, +0.002456f, -0.000732f, +0.000223f, - -0.000637f, -0.000217f, +0.000142f, +0.000052f, -0.000037f, +0.000906f, -0.000867f, -0.000117f, +0.000675f, +0.000003f, - -0.000414f, -0.000333f, -0.000504f, -0.000086f, +0.000156f, -0.000081f, +0.000038f, -0.000082f, +0.000035f, +0.000039f, - -0.000004f, -0.000077f, -0.000370f, -0.000126f, +0.000007f, +0.000172f, -0.000279f, -0.000056f, -0.000136f, -0.000314f, - -0.000173f, +0.000059f, +0.000102f, -0.000033f, -0.000043f, -0.000101f, +0.000243f, +0.000173f, -0.000160f, -0.000049f, - -0.000012f, +0.000009f, -0.000183f, -0.000051f, -0.000085f, -0.000037f, +0.000146f, -0.000083f, -0.000064f, -0.000091f, - +0.000044f, +0.000089f, +0.000090f, +0.000036f, -0.000085f, +0.000017f, -0.000056f, -0.000017f, +0.000046f, +0.000018f, - -0.000015f, +0.000030f, +0.000015f, -0.000035f, -0.000003f, +0.000018f - } - }, - { - { - +0.002899f, +0.013833f, +0.006638f, -0.000390f, -0.000640f, +0.000339f, +0.000088f, -0.000143f, +0.000050f, -0.000879f, - -0.000157f, +0.000966f, -0.000019f, -0.000309f, +0.000119f, -0.000043f, -0.000653f, -0.000027f, +0.000061f, -0.000673f, - +0.000476f, +0.000156f, +0.000249f, -0.000676f, -0.000119f, -0.000089f, -0.000026f, -0.000145f, +0.000036f, +0.000645f, - -0.000041f, -0.000247f, -0.000673f, -0.000355f, +0.000523f, -0.000188f, -0.000085f, -0.000669f, -0.000068f, +0.000054f, - -0.000024f, +0.000240f, -0.000153f, -0.000101f, -0.000309f, -0.000210f, +0.000075f, +0.000239f, +0.000057f, -0.000163f, - -0.000205f, -0.000048f, -0.000031f, +0.000246f, +0.000132f, +0.000088f, +0.000172f, +0.000232f, +0.000091f, -0.000128f, - +0.000024f, +0.000029f, +0.000117f, +0.000031f, -0.000030f, -0.000042f, -0.000077f, -0.000082f, +0.000034f, +0.000078f, - +0.000013f, -0.000056f, -0.000024f, -0.000012f, +0.000068f, +0.000048f, -0.000115f, +0.000023f, -0.000037f, -0.000110f, - -0.000067f, -0.000059f, +0.000035f, -0.000029f, +0.000018f, -0.000042f, -0.000023f, +0.000000f, -0.000045f, -0.000030f, - +0.000006f, -0.000007f, +0.000027f, +0.000020f, +0.000000f, -0.000016f - }, - { - +0.000324f, +0.000463f, -0.003145f, -0.000985f, -0.000181f, +0.000185f, -0.000049f, -0.000398f, -0.000037f, +0.000462f, - +0.000674f, +0.000134f, +0.000030f, -0.000300f, +0.003432f, +0.003821f, -0.000039f, -0.000782f, +0.000110f, -0.001254f, - +0.000280f, +0.000941f, +0.000449f, +0.000762f, +0.000852f, -0.000642f, -0.000534f, -0.000422f, +0.000471f, +0.000292f, - -0.000410f, -0.001278f, -0.000676f, +0.000558f, -0.000342f, -0.000138f, -0.000086f, +0.000176f, +0.000296f, +0.000349f, - -0.000406f, -0.000258f, -0.000221f, +0.000158f, -0.000072f, +0.000014f, -0.000173f, +0.000174f, +0.000119f, -0.000238f, - +0.000167f, -0.000075f, -0.000264f, -0.000197f, +0.000446f, +0.000381f, +0.000010f, +0.000076f, +0.000088f, -0.000096f, - -0.000244f, +0.000041f, +0.000014f, -0.000027f, -0.000085f, +0.000027f, -0.000092f, -0.000077f, +0.000036f, -0.000037f, - -0.000006f, +0.000012f, +0.000072f, -0.000026f, +0.000005f, +0.000041f, +0.000117f, +0.000029f, -0.000027f, -0.000079f, - +0.000036f, +0.000109f, -0.000028f, -0.000013f, -0.000047f, -0.000051f, +0.000011f, +0.000009f, -0.000082f, +0.000000f, - +0.000069f, -0.000025f, -0.000067f, -0.000065f, -0.000000f, +0.000049f - }, - { - +0.001122f, -0.002630f, -0.002395f, -0.001533f, -0.001015f, +0.000193f, -0.000052f, -0.000234f, +0.000334f, -0.000049f, - -0.000398f, +0.000102f, +0.000518f, -0.000059f, +0.000380f, +0.000318f, -0.000536f, -0.000555f, +0.001385f, -0.001211f, - +0.000198f, +0.000137f, -0.000455f, +0.000347f, +0.000172f, -0.000486f, -0.000463f, +0.000304f, +0.000158f, +0.000308f, - +0.000489f, +0.000178f, -0.000041f, -0.000231f, +0.000388f, -0.000132f, -0.000334f, +0.000370f, +0.000134f, -0.000037f, - +0.000179f, -0.000423f, +0.000050f, -0.000314f, -0.000354f, -0.000164f, -0.000006f, +0.000020f, +0.000045f, +0.000114f, - +0.000067f, -0.000048f, -0.000153f, +0.000066f, -0.000094f, +0.000113f, +0.000013f, -0.000128f, +0.000153f, -0.000074f, - -0.000141f, -0.000050f, -0.000076f, +0.000067f, +0.000072f, -0.000132f, +0.000021f, +0.000048f, -0.000091f, -0.000029f, - +0.000134f, -0.000097f, -0.000088f, +0.000041f, +0.000037f, +0.000090f, +0.000004f, -0.000093f, -0.000030f, +0.000042f, - -0.000002f, -0.000044f, +0.000036f, +0.000058f, -0.000046f, -0.000050f, -0.000030f, +0.000043f, +0.000010f, -0.000033f, - +0.000045f, +0.000058f, -0.000023f, +0.000012f, +0.000036f, -0.000026f - }, - { - +0.014583f, +0.004732f, -0.003811f, +0.000327f, +0.000610f, -0.000080f, -0.000169f, -0.000028f, -0.000051f, -0.000360f, - +0.000052f, -0.000041f, -0.000442f, +0.000464f, +0.000175f, -0.000717f, -0.000178f, +0.000130f, +0.000507f, -0.000243f, - +0.000189f, -0.000181f, +0.000195f, +0.000264f, +0.000193f, -0.000020f, -0.000695f, +0.000213f, -0.000399f, -0.000312f, - +0.000237f, -0.000229f, -0.000038f, +0.000364f, -0.000065f, -0.000420f, -0.000303f, -0.000018f, +0.000285f, -0.000189f, - +0.000019f, +0.000104f, +0.000192f, -0.000066f, +0.000013f, -0.000231f, +0.000018f, +0.000055f, +0.000061f, -0.000017f, - -0.000182f, +0.000223f, -0.000117f, -0.000108f, +0.000039f, -0.000095f, +0.000070f, +0.000067f, +0.000100f, +0.000106f, - -0.000002f, -0.000129f, +0.000056f, -0.000046f, -0.000089f, +0.000036f, -0.000089f, +0.000055f, +0.000032f, -0.000045f, - -0.000062f, +0.000112f, +0.000111f, -0.000066f, +0.000021f, -0.000044f, -0.000009f, +0.000016f, -0.000063f, -0.000043f, - -0.000045f, -0.000047f, +0.000033f, +0.000011f, +0.000009f, +0.000064f, -0.000043f, +0.000052f, +0.000028f, -0.000042f, - -0.000048f, +0.000010f, +0.000006f, -0.000027f, -0.000013f, +0.000017f - }, - { - -0.000717f, -0.000593f, +0.001565f, -0.000399f, +0.000010f, +0.000219f, -0.000267f, -0.000163f, +0.000065f, -0.000617f, - +0.000117f, +0.000294f, -0.000275f, -0.000450f, +0.005237f, -0.000651f, +0.000940f, -0.001681f, +0.000389f, +0.000624f, - +0.000336f, +0.000811f, +0.000268f, +0.001161f, +0.000214f, +0.000755f, -0.000821f, -0.000477f, -0.000353f, -0.002648f, - +0.000422f, +0.000095f, +0.000341f, -0.000504f, -0.000421f, +0.000679f, -0.000035f, +0.000168f, +0.000188f, -0.000421f, - -0.000017f, -0.000083f, -0.000329f, -0.000048f, +0.000176f, -0.000171f, +0.000089f, -0.000085f, -0.000081f, -0.000218f, - -0.000036f, +0.000210f, -0.000147f, -0.000020f, +0.000054f, +0.000190f, -0.000229f, -0.000045f, +0.000114f, -0.000050f, - -0.000040f, +0.000026f, -0.000025f, -0.000146f, -0.000137f, -0.000061f, +0.000005f, +0.000019f, +0.000058f, -0.000058f, - +0.000123f, +0.000112f, -0.000011f, +0.000057f, +0.000046f, -0.000072f, -0.000096f, -0.000053f, -0.000082f, -0.000032f, - -0.000030f, +0.000054f, +0.000082f, -0.000059f, +0.000002f, -0.000018f, -0.000022f, +0.000042f, +0.000003f, -0.000030f, - -0.000026f, -0.000046f, +0.000014f, +0.000052f, -0.000033f, -0.000059f - }, - { - +0.015911f, +0.025711f, +0.000163f, -0.001146f, -0.001102f, +0.000101f, -0.000498f, +0.000153f, +0.000432f, -0.001160f, - -0.000915f, +0.000428f, +0.000346f, +0.000982f, +0.000321f, -0.000039f, +0.000015f, -0.000767f, -0.000100f, -0.000121f, - -0.000673f, -0.000371f, +0.000209f, -0.000167f, -0.000170f, -0.000029f, +0.000435f, +0.000007f, +0.000049f, -0.000267f, - -0.000088f, +0.000438f, -0.000021f, -0.000434f, -0.000277f, -0.000133f, +0.000212f, +0.000006f, +0.000386f, -0.000250f, - +0.000056f, +0.000017f, -0.000026f, +0.000286f, -0.000417f, +0.000250f, +0.000085f, -0.000018f, -0.000039f, -0.000172f, - +0.000212f, +0.000072f, -0.000111f, -0.000322f, +0.000067f, -0.000070f, -0.000244f, -0.000055f, +0.000086f, +0.000072f, - +0.000044f, -0.000046f, -0.000176f, -0.000080f, +0.000107f, +0.000036f, -0.000048f, -0.000023f, +0.000109f, -0.000016f, - -0.000044f, -0.000049f, +0.000041f, +0.000036f, +0.000007f, -0.000019f, -0.000062f, +0.000030f, +0.000081f, +0.000023f, - +0.000007f, +0.000069f, +0.000111f, +0.000012f, -0.000056f, -0.000047f, +0.000018f, -0.000057f, +0.000020f, +0.000036f, - -0.000035f, -0.000009f, -0.000010f, +0.000050f, +0.000020f, -0.000019f - }, - { - +0.000256f, -0.001034f, -0.000021f, +0.000534f, -0.000063f, +0.000050f, -0.000253f, -0.000370f, -0.000032f, +0.000436f, - -0.000063f, -0.000112f, -0.000102f, +0.000053f, +0.001058f, +0.002617f, +0.000019f, -0.000272f, -0.000033f, +0.000183f, - -0.000138f, -0.000999f, -0.002075f, +0.000168f, +0.000309f, -0.000570f, -0.000774f, +0.000256f, -0.000548f, -0.000235f, - +0.000069f, +0.000303f, +0.000793f, -0.000169f, -0.000374f, +0.000336f, +0.000061f, +0.000105f, -0.000155f, -0.000239f, - -0.000028f, +0.000373f, +0.000042f, +0.000183f, -0.000085f, -0.000376f, -0.000114f, +0.000170f, -0.000094f, +0.000203f, - -0.000070f, -0.000032f, -0.000166f, -0.000025f, +0.000002f, +0.000015f, -0.000085f, +0.000076f, +0.000031f, -0.000060f, - +0.000109f, +0.000128f, -0.000027f, +0.000004f, +0.000058f, +0.000027f, -0.000108f, -0.000050f, -0.000015f, +0.000135f, - +0.000098f, -0.000167f, -0.000070f, -0.000065f, -0.000080f, -0.000082f, -0.000074f, -0.000102f, -0.000023f, +0.000036f, - -0.000007f, -0.000018f, +0.000017f, +0.000040f, -0.000012f, -0.000016f, +0.000029f, +0.000049f, +0.000028f, +0.000078f, - +0.000065f, +0.000023f, -0.000030f, +0.000004f, +0.000027f, -0.000006f - }, - { - -0.014368f, +0.028438f, +0.003616f, +0.000137f, -0.000134f, -0.000004f, +0.000843f, -0.000118f, +0.000107f, -0.000329f, - -0.000341f, +0.000980f, +0.000421f, -0.000402f, +0.000458f, +0.000282f, -0.000017f, +0.000409f, +0.000487f, -0.000748f, - +0.000089f, +0.000134f, +0.000034f, -0.000256f, +0.000415f, -0.000385f, +0.000004f, -0.000130f, -0.000341f, +0.000195f, - +0.000271f, +0.000328f, +0.000076f, -0.000652f, -0.000242f, -0.000639f, -0.000467f, +0.000389f, -0.000186f, +0.000043f, - +0.000252f, +0.000001f, -0.000189f, +0.000104f, -0.000047f, -0.000094f, +0.000121f, +0.000140f, -0.000218f, -0.000219f, - -0.000083f, +0.000029f, +0.000344f, +0.000050f, -0.000081f, -0.000094f, -0.000013f, -0.000049f, -0.000052f, +0.000077f, - -0.000008f, -0.000032f, -0.000055f, -0.000075f, +0.000048f, +0.000027f, +0.000049f, -0.000030f, +0.000000f, +0.000042f, - -0.000064f, -0.000011f, -0.000080f, -0.000131f, -0.000069f, +0.000114f, -0.000115f, -0.000094f, +0.000073f, -0.000018f, - -0.000048f, +0.000051f, -0.000003f, -0.000011f, +0.000030f, +0.000004f, -0.000045f, -0.000038f, -0.000006f, -0.000024f, - +0.000006f, +0.000006f, -0.000040f, -0.000028f, -0.000007f, +0.000044f - }, - { - +0.000283f, -0.002321f, -0.002095f, +0.000942f, -0.000140f, +0.000220f, +0.000032f, -0.000131f, -0.000379f, +0.000194f, - +0.000424f, +0.000219f, +0.000002f, -0.003277f, -0.000792f, -0.001486f, +0.000802f, -0.000266f, +0.000296f, -0.000834f, - -0.001900f, +0.001638f, +0.001464f, -0.000267f, -0.001764f, +0.001759f, +0.000106f, -0.000593f, +0.000237f, -0.000695f, - -0.000073f, -0.000131f, +0.000070f, +0.000565f, -0.000436f, -0.000233f, +0.000321f, -0.000218f, +0.000560f, +0.000084f, - -0.000421f, +0.000132f, +0.000090f, -0.000437f, -0.000387f, -0.000105f, +0.000078f, +0.000291f, -0.000141f, +0.000007f, - -0.000036f, +0.000051f, -0.000021f, -0.000125f, -0.000061f, +0.000140f, -0.000034f, -0.000289f, -0.000053f, -0.000016f, - +0.000174f, +0.000131f, +0.000226f, +0.000164f, +0.000096f, +0.000084f, +0.000039f, -0.000010f, -0.000145f, +0.000006f, - +0.000096f, +0.000077f, -0.000018f, -0.000114f, -0.000120f, +0.000017f, +0.000009f, -0.000051f, +0.000015f, -0.000022f, - +0.000012f, +0.000105f, +0.000054f, -0.000016f, +0.000006f, -0.000077f, -0.000116f, -0.000051f, +0.000036f, +0.000026f, - -0.000034f, +0.000017f, +0.000010f, -0.000025f, -0.000015f, -0.000055f - }, - { - -0.000023f, +0.001897f, -0.003480f, -0.000174f, -0.001163f, -0.001356f, +0.000085f, +0.000503f, -0.000389f, -0.000552f, - -0.000448f, -0.000500f, -0.000195f, +0.001025f, -0.000314f, +0.000189f, +0.000398f, -0.000780f, -0.000229f, +0.000631f, - -0.000219f, -0.000503f, -0.000150f, -0.000182f, -0.000268f, +0.000257f, +0.000239f, -0.000261f, -0.000021f, +0.000301f, - -0.000139f, -0.000157f, -0.000068f, -0.000487f, -0.000367f, +0.000377f, +0.000269f, +0.000082f, +0.000462f, +0.000018f, - -0.000085f, -0.000125f, +0.000156f, +0.000377f, -0.000245f, -0.000372f, +0.000219f, +0.000142f, -0.000140f, -0.000344f, - -0.000078f, -0.000033f, -0.000212f, +0.000003f, +0.000244f, -0.000177f, -0.000034f, +0.000131f, -0.000085f, +0.000054f, - +0.000075f, -0.000035f, -0.000049f, -0.000054f, +0.000132f, -0.000062f, -0.000019f, +0.000029f, -0.000097f, -0.000058f, - -0.000028f, +0.000003f, -0.000044f, -0.000005f, -0.000011f, -0.000009f, -0.000056f, +0.000064f, +0.000006f, +0.000037f, - +0.000085f, +0.000006f, -0.000070f, -0.000032f, -0.000066f, -0.000098f, -0.000069f, -0.000002f, -0.000049f, -0.000010f, - +0.000011f, +0.000026f, +0.000043f, -0.000007f, -0.000033f, -0.000048f - }, - { - +0.000430f, +0.006230f, +0.001766f, -0.000138f, +0.000012f, -0.000358f, -0.000185f, +0.000455f, -0.000473f, -0.000088f, - -0.000494f, +0.000292f, +0.000591f, -0.000380f, +0.001201f, +0.000657f, +0.000572f, +0.000450f, -0.000968f, +0.000937f, - +0.001535f, +0.000510f, +0.000253f, -0.000141f, +0.000553f, -0.000241f, -0.000345f, -0.000209f, +0.000245f, +0.000893f, - +0.000160f, +0.000077f, -0.000153f, +0.000132f, -0.000677f, -0.000144f, +0.000454f, +0.000082f, +0.000283f, +0.000095f, - +0.000226f, -0.000068f, -0.000046f, +0.000151f, +0.000008f, -0.000211f, +0.000078f, +0.000046f, -0.000230f, -0.000171f, - -0.000153f, +0.000010f, +0.000222f, +0.000229f, +0.000029f, +0.000061f, -0.000037f, -0.000111f, -0.000065f, +0.000089f, - -0.000186f, -0.000041f, +0.000128f, -0.000002f, -0.000156f, -0.000001f, -0.000081f, -0.000204f, +0.000003f, +0.000006f, - +0.000005f, +0.000082f, -0.000000f, -0.000066f, -0.000039f, +0.000064f, +0.000068f, +0.000125f, -0.000010f, -0.000040f, - +0.000028f, -0.000057f, -0.000049f, +0.000099f, +0.000068f, -0.000012f, +0.000028f, +0.000003f, +0.000043f, +0.000042f, - -0.000024f, +0.000014f, +0.000003f, +0.000003f, -0.000028f, +0.000021f - }, - { - -0.003642f, +0.004262f, -0.000146f, +0.000714f, -0.002073f, -0.000423f, +0.000970f, -0.000302f, -0.000072f, -0.000268f, - +0.000506f, +0.000275f, -0.000007f, -0.000017f, -0.000210f, +0.000329f, +0.000122f, -0.000057f, -0.000143f, -0.000143f, - +0.000322f, -0.000543f, -0.000239f, +0.000295f, -0.000211f, -0.000124f, -0.000118f, -0.000171f, -0.000256f, +0.000134f, - +0.000029f, +0.000344f, +0.000337f, +0.000275f, -0.000495f, +0.000116f, +0.000675f, +0.000590f, -0.000100f, -0.000016f, - -0.000071f, -0.000070f, +0.000064f, -0.000109f, -0.000002f, +0.000009f, -0.000047f, -0.000031f, -0.000075f, +0.000064f, - -0.000080f, +0.000031f, -0.000223f, +0.000062f, +0.000134f, -0.000039f, +0.000062f, +0.000112f, +0.000154f, +0.000025f, - -0.000152f, +0.000113f, +0.000002f, -0.000143f, +0.000043f, +0.000037f, +0.000032f, +0.000059f, +0.000007f, -0.000165f, - +0.000006f, +0.000028f, -0.000045f, -0.000009f, -0.000040f, +0.000005f, +0.000043f, +0.000025f, +0.000022f, -0.000001f, - -0.000019f, -0.000067f, -0.000018f, +0.000026f, -0.000063f, +0.000033f, +0.000030f, -0.000021f, +0.000017f, -0.000035f, - -0.000053f, -0.000047f, -0.000054f, +0.000018f, +0.000015f, -0.000020f - }, - { - +0.000173f, +0.000678f, +0.000081f, -0.000508f, +0.000089f, -0.000358f, +0.000185f, +0.000292f, +0.000156f, -0.000330f, - +0.000031f, +0.000314f, +0.000204f, +0.004407f, -0.004298f, +0.000307f, +0.000995f, -0.000176f, -0.000494f, -0.001171f, - +0.003341f, +0.000488f, -0.002832f, -0.001007f, +0.000244f, -0.000632f, -0.000227f, +0.000848f, -0.000904f, -0.000347f, - +0.000947f, +0.000526f, -0.000022f, +0.000078f, -0.000243f, +0.000433f, -0.000239f, +0.000109f, -0.000420f, -0.000123f, - -0.000025f, -0.000175f, +0.000084f, -0.000134f, -0.000056f, +0.000054f, -0.000197f, -0.000066f, +0.000325f, -0.000006f, - -0.000138f, -0.000221f, +0.000002f, +0.000149f, -0.000048f, -0.000118f, -0.000032f, +0.000154f, -0.000067f, +0.000197f, - +0.000200f, -0.000176f, -0.000218f, -0.000030f, +0.000106f, +0.000054f, -0.000052f, +0.000093f, -0.000024f, -0.000007f, - -0.000043f, -0.000003f, -0.000019f, +0.000004f, -0.000066f, -0.000113f, -0.000067f, +0.000020f, +0.000041f, -0.000011f, - +0.000074f, +0.000085f, +0.000029f, +0.000059f, +0.000008f, +0.000035f, -0.000044f, -0.000025f, +0.000022f, +0.000017f, - +0.000036f, -0.000065f, -0.000119f, +0.000042f, -0.000005f, -0.000070f - }, - { - +0.000932f, +0.005102f, -0.001977f, -0.000425f, +0.000609f, -0.001202f, +0.002022f, -0.000135f, -0.000902f, -0.000365f, - -0.000293f, -0.001009f, +0.000359f, -0.001431f, +0.001556f, -0.000124f, +0.000406f, +0.000798f, -0.000359f, -0.000150f, - +0.000091f, -0.000092f, +0.000169f, -0.000039f, +0.000326f, +0.000061f, -0.000726f, -0.000808f, -0.000035f, +0.000242f, - -0.000080f, +0.000251f, +0.000513f, +0.000473f, +0.000085f, +0.000225f, +0.000184f, -0.000026f, +0.000246f, -0.000656f, - +0.000009f, -0.000597f, -0.000153f, +0.000302f, +0.000492f, +0.000287f, +0.000189f, -0.000069f, +0.000094f, -0.000249f, - +0.000206f, +0.000156f, -0.000203f, -0.000036f, +0.000159f, +0.000307f, +0.000107f, -0.000089f, +0.000031f, -0.000066f, - +0.000053f, +0.000072f, -0.000026f, +0.000148f, +0.000085f, +0.000128f, -0.000015f, -0.000053f, -0.000007f, +0.000057f, - -0.000056f, -0.000032f, -0.000036f, -0.000012f, +0.000092f, +0.000071f, -0.000067f, -0.000051f, +0.000110f, +0.000080f, - -0.000007f, +0.000020f, +0.000116f, +0.000024f, -0.000020f, +0.000066f, -0.000045f, -0.000098f, +0.000028f, +0.000030f, - -0.000027f, +0.000026f, +0.000030f, +0.000006f, -0.000032f, +0.000002f - }, - { - +0.000204f, -0.000057f, +0.000762f, -0.000358f, +0.000058f, -0.000136f, -0.000131f, +0.000963f, +0.000485f, +0.000506f, - -0.000701f, +0.000126f, +0.001324f, -0.000178f, +0.007379f, -0.001539f, -0.000003f, -0.000127f, +0.000176f, +0.001674f, - +0.000753f, -0.000260f, +0.001085f, -0.000430f, -0.000642f, +0.000856f, -0.000189f, +0.001386f, -0.000583f, +0.000207f, - -0.000467f, -0.000015f, +0.000101f, -0.000058f, +0.000132f, +0.000442f, -0.000893f, +0.000028f, +0.000238f, -0.000005f, - -0.000608f, -0.000325f, -0.000081f, +0.000396f, -0.000045f, -0.000146f, +0.000195f, -0.000045f, -0.000082f, +0.000007f, - -0.000023f, -0.000038f, -0.000260f, +0.000062f, -0.000016f, +0.000091f, -0.000294f, +0.000009f, -0.000182f, -0.000320f, - -0.000057f, +0.000064f, +0.000009f, -0.000031f, +0.000018f, -0.000048f, +0.000272f, -0.000006f, -0.000125f, -0.000021f, - +0.000011f, -0.000055f, -0.000161f, +0.000016f, -0.000087f, +0.000071f, +0.000061f, -0.000091f, -0.000040f, -0.000048f, - +0.000081f, +0.000072f, +0.000089f, -0.000027f, -0.000065f, +0.000004f, -0.000056f, +0.000001f, +0.000075f, +0.000008f, - -0.000012f, +0.000036f, -0.000001f, -0.000043f, +0.000029f, +0.000030f - } - }, - { - { - -0.003601f, +0.043083f, -0.003184f, -0.002078f, +0.001345f, -0.000442f, +0.000214f, +0.000409f, -0.000110f, +0.000045f, - +0.000651f, -0.000218f, -0.000360f, +0.000587f, -0.001444f, +0.000565f, -0.000781f, -0.000486f, -0.000375f, +0.001081f, - +0.000279f, -0.000300f, -0.000011f, -0.000411f, -0.000033f, -0.000455f, -0.000122f, -0.000323f, +0.000337f, +0.000584f, - +0.000185f, -0.000461f, +0.000250f, -0.000361f, +0.000041f, -0.000236f, +0.000370f, -0.000015f, -0.000113f, -0.000458f, - -0.000033f, +0.000277f, -0.000145f, -0.000069f, -0.000087f, +0.000077f, -0.000113f, -0.000192f, +0.000359f, +0.000008f, - +0.000106f, +0.000023f, -0.000227f, +0.000196f, +0.000088f, -0.000122f, -0.000047f, -0.000111f, -0.000103f, +0.000007f, - +0.000203f, -0.000012f, -0.000066f, -0.000161f, +0.000002f, -0.000106f, +0.000051f, +0.000047f, -0.000040f, -0.000058f, - -0.000075f, +0.000001f, +0.000028f, +0.000004f, -0.000105f, -0.000138f, +0.000079f, -0.000018f, -0.000031f, +0.000092f, - +0.000058f, +0.000108f, +0.000006f, -0.000020f, -0.000042f, -0.000008f, +0.000063f, -0.000027f, +0.000064f, +0.000025f, - -0.000003f, -0.000008f, +0.000020f, -0.000005f, -0.000011f, +0.000018f - }, - { - -0.000378f, -0.003471f, +0.001888f, -0.000239f, +0.000499f, -0.000214f, -0.000437f, +0.000057f, +0.000273f, +0.000138f, - +0.000674f, +0.000486f, -0.000597f, -0.000522f, +0.003018f, +0.000802f, -0.000870f, +0.000166f, -0.001538f, -0.001009f, - +0.000193f, +0.001251f, +0.000113f, +0.000134f, -0.000493f, +0.000410f, -0.000466f, +0.000915f, +0.000083f, -0.000048f, - -0.000236f, -0.001625f, +0.000303f, +0.000130f, -0.000405f, +0.000662f, +0.000306f, +0.000349f, +0.000256f, -0.000392f, - +0.000021f, -0.000054f, +0.000482f, -0.000022f, -0.000166f, +0.000118f, +0.000001f, +0.000073f, -0.000063f, +0.000148f, - +0.000038f, -0.000102f, +0.000183f, +0.000234f, +0.000056f, -0.000226f, +0.000088f, +0.000101f, -0.000062f, -0.000044f, - +0.000093f, +0.000185f, +0.000031f, -0.000067f, -0.000000f, -0.000078f, +0.000031f, +0.000176f, -0.000002f, -0.000071f, - +0.000043f, +0.000033f, -0.000162f, -0.000075f, +0.000112f, +0.000034f, -0.000071f, -0.000072f, +0.000015f, +0.000130f, - +0.000008f, -0.000076f, +0.000018f, +0.000033f, -0.000002f, +0.000059f, +0.000043f, -0.000035f, +0.000042f, +0.000042f, - -0.000079f, -0.000024f, +0.000038f, +0.000059f, +0.000028f, -0.000026f - }, - { - -0.000808f, -0.012298f, +0.003068f, +0.001721f, +0.001245f, -0.000340f, +0.000158f, -0.000168f, -0.000485f, -0.000678f, - +0.000473f, +0.000418f, -0.000582f, +0.000722f, +0.000152f, +0.000721f, -0.000693f, -0.000379f, +0.000700f, -0.001099f, - -0.000882f, +0.000314f, -0.000397f, +0.000375f, +0.000568f, +0.000271f, -0.000196f, +0.000505f, -0.000524f, +0.000364f, - +0.000315f, -0.000271f, +0.000255f, -0.000026f, -0.000380f, -0.000044f, +0.000264f, -0.000192f, -0.000007f, -0.000267f, - -0.000314f, -0.000226f, -0.000173f, +0.000170f, -0.000053f, +0.000122f, -0.000115f, +0.000186f, +0.000110f, -0.000048f, - -0.000039f, +0.000343f, -0.000058f, -0.000058f, +0.000157f, +0.000122f, -0.000009f, -0.000078f, -0.000061f, -0.000086f, - +0.000017f, +0.000084f, +0.000015f, -0.000025f, +0.000000f, +0.000134f, +0.000019f, -0.000052f, +0.000053f, +0.000072f, - -0.000036f, -0.000054f, +0.000105f, -0.000032f, -0.000017f, -0.000056f, -0.000091f, +0.000020f, +0.000041f, +0.000007f, - -0.000003f, +0.000031f, +0.000022f, -0.000049f, +0.000027f, +0.000054f, +0.000040f, -0.000014f, -0.000038f, +0.000012f, - -0.000004f, -0.000068f, -0.000031f, +0.000002f, -0.000022f, +0.000009f - }, - { - -0.012139f, +0.034166f, +0.002717f, +0.000936f, -0.000559f, +0.000096f, -0.000052f, +0.000392f, +0.000026f, -0.000728f, - -0.000321f, -0.000282f, -0.000121f, -0.000139f, -0.000980f, -0.001248f, +0.000307f, -0.000178f, -0.000225f, -0.000056f, - -0.000036f, +0.000400f, +0.000393f, -0.000083f, +0.000128f, -0.000685f, -0.000156f, -0.000135f, -0.000256f, +0.000824f, - +0.000101f, -0.000046f, +0.000446f, +0.000040f, -0.000143f, -0.000522f, +0.000043f, +0.000161f, +0.000150f, -0.000125f, - -0.000104f, -0.000294f, +0.000346f, -0.000061f, +0.000034f, -0.000111f, +0.000359f, +0.000012f, -0.000010f, +0.000090f, - -0.000038f, -0.000026f, -0.000153f, +0.000211f, -0.000078f, +0.000105f, +0.000043f, +0.000239f, +0.000008f, -0.000017f, - +0.000026f, +0.000122f, +0.000115f, +0.000030f, +0.000172f, -0.000072f, +0.000066f, +0.000052f, -0.000072f, +0.000110f, - +0.000027f, -0.000175f, -0.000124f, -0.000015f, -0.000021f, +0.000005f, +0.000060f, -0.000014f, -0.000018f, +0.000046f, - +0.000088f, +0.000039f, -0.000020f, -0.000054f, +0.000011f, -0.000025f, +0.000025f, +0.000019f, -0.000090f, +0.000003f, - +0.000044f, +0.000007f, -0.000034f, +0.000017f, +0.000028f, -0.000005f - }, - { - +0.000794f, +0.000415f, -0.002334f, +0.000090f, +0.000339f, -0.000229f, -0.000116f, +0.000193f, +0.000162f, -0.000132f, - -0.000073f, -0.000248f, +0.000623f, -0.001283f, +0.003585f, -0.001421f, -0.001023f, +0.000981f, +0.004704f, -0.001401f, - -0.000215f, +0.000557f, +0.000626f, +0.001049f, -0.000285f, -0.000771f, -0.000538f, -0.001413f, -0.001109f, -0.000423f, - -0.000629f, +0.000777f, +0.000403f, -0.000207f, +0.000090f, -0.000255f, +0.000709f, +0.000522f, -0.000164f, +0.000107f, - -0.000061f, -0.000117f, +0.000383f, +0.000063f, +0.000027f, +0.000269f, -0.000111f, +0.000033f, +0.000241f, -0.000006f, - +0.000041f, -0.000130f, -0.000032f, +0.000066f, -0.000131f, -0.000024f, -0.000019f, +0.000098f, +0.000016f, +0.000047f, - +0.000098f, +0.000078f, -0.000067f, -0.000067f, +0.000199f, +0.000153f, +0.000088f, +0.000012f, -0.000077f, +0.000060f, - +0.000015f, -0.000061f, -0.000014f, -0.000023f, -0.000093f, +0.000001f, +0.000035f, +0.000035f, +0.000120f, +0.000111f, - +0.000062f, +0.000033f, -0.000138f, +0.000013f, +0.000039f, -0.000020f, +0.000041f, -0.000009f, -0.000017f, +0.000007f, - +0.000010f, +0.000020f, +0.000017f, -0.000042f, -0.000025f, +0.000053f - }, - { - -0.010354f, +0.055737f, +0.001437f, -0.001401f, -0.000367f, -0.000207f, +0.000048f, +0.001049f, -0.001250f, +0.000149f, - +0.001016f, -0.000125f, -0.000455f, +0.000652f, +0.001017f, -0.000392f, -0.000219f, -0.000084f, +0.000014f, -0.000409f, - +0.000169f, +0.000393f, -0.000265f, -0.000702f, -0.000239f, +0.000186f, +0.000086f, -0.000124f, -0.000163f, +0.000213f, - -0.000126f, -0.000162f, -0.000493f, -0.000085f, -0.000182f, -0.000091f, +0.000138f, -0.000033f, +0.000255f, -0.000061f, - +0.000303f, +0.000150f, -0.000245f, +0.000368f, -0.000322f, -0.000081f, -0.000095f, -0.000080f, -0.000305f, +0.000080f, - -0.000081f, -0.000093f, +0.000198f, +0.000164f, -0.000063f, -0.000174f, +0.000235f, +0.000190f, +0.000000f, -0.000090f, - -0.000047f, +0.000057f, +0.000160f, +0.000026f, -0.000013f, -0.000059f, +0.000016f, +0.000075f, -0.000021f, +0.000077f, - -0.000000f, +0.000095f, -0.000038f, -0.000022f, +0.000017f, -0.000041f, +0.000067f, +0.000018f, -0.000024f, -0.000019f, - -0.000039f, -0.000050f, -0.000120f, -0.000056f, +0.000054f, +0.000062f, +0.000029f, +0.000042f, +0.000038f, -0.000067f, - +0.000014f, +0.000014f, +0.000018f, -0.000013f, -0.000033f, +0.000019f - }, - { - -0.000538f, +0.000874f, +0.002336f, -0.000289f, -0.000014f, -0.000155f, -0.000062f, -0.000039f, +0.000166f, -0.000078f, - +0.000080f, +0.000134f, -0.000500f, -0.001871f, +0.000150f, +0.002302f, -0.002173f, -0.000118f, -0.000029f, -0.000403f, - -0.000544f, +0.000382f, -0.000891f, -0.001417f, -0.001095f, -0.000829f, +0.000266f, -0.000027f, -0.001986f, +0.000583f, - +0.000535f, +0.000167f, -0.000506f, +0.000579f, +0.000849f, +0.000217f, -0.000208f, +0.000049f, -0.000139f, +0.000291f, - +0.000471f, -0.000029f, -0.000127f, -0.000135f, -0.000175f, +0.000065f, +0.000035f, +0.000234f, -0.000177f, -0.000012f, - -0.000147f, -0.000021f, +0.000059f, +0.000077f, -0.000055f, +0.000093f, +0.000156f, +0.000142f, -0.000253f, -0.000100f, - -0.000029f, -0.000045f, -0.000114f, -0.000060f, +0.000058f, -0.000082f, +0.000010f, +0.000180f, +0.000027f, -0.000173f, - -0.000086f, +0.000060f, +0.000079f, -0.000017f, +0.000032f, +0.000027f, +0.000051f, +0.000050f, +0.000087f, -0.000019f, - -0.000012f, +0.000024f, +0.000027f, +0.000009f, -0.000013f, +0.000039f, -0.000029f, -0.000043f, +0.000002f, -0.000052f, - -0.000091f, -0.000068f, -0.000001f, +0.000028f, -0.000040f, -0.000004f - }, - { - +0.016875f, -0.009632f, -0.005220f, +0.001105f, +0.000042f, +0.000283f, +0.000034f, -0.000428f, +0.000010f, +0.000280f, - +0.000715f, -0.000028f, -0.000940f, -0.000264f, +0.001967f, -0.000058f, +0.000111f, -0.000463f, -0.000430f, +0.000745f, - -0.000200f, -0.000038f, +0.000233f, +0.000560f, -0.000320f, -0.000403f, +0.000306f, +0.000053f, -0.000493f, +0.000104f, - +0.000619f, -0.000143f, -0.000176f, +0.000163f, -0.000232f, -0.000065f, -0.000254f, +0.000369f, +0.000045f, +0.000147f, - -0.000015f, -0.000050f, -0.000079f, -0.000178f, -0.000070f, -0.000042f, -0.000066f, -0.000278f, -0.000225f, +0.000139f, - +0.000123f, +0.000026f, -0.000331f, -0.000166f, +0.000112f, +0.000094f, +0.000171f, +0.000107f, +0.000031f, -0.000094f, - -0.000165f, +0.000044f, +0.000019f, +0.000069f, -0.000044f, -0.000076f, +0.000063f, +0.000033f, -0.000079f, -0.000102f, - +0.000023f, -0.000009f, -0.000046f, +0.000131f, +0.000118f, -0.000099f, -0.000013f, +0.000128f, -0.000040f, +0.000005f, - +0.000030f, -0.000056f, -0.000055f, -0.000002f, +0.000007f, -0.000047f, +0.000039f, +0.000052f, -0.000006f, -0.000001f, - -0.000024f, -0.000008f, +0.000029f, +0.000035f, +0.000031f, -0.000002f - }, - { - -0.000767f, +0.000283f, +0.003241f, -0.000716f, +0.000319f, -0.000220f, -0.000004f, +0.000115f, +0.000117f, +0.000121f, - +0.000048f, -0.000269f, -0.000313f, +0.000022f, -0.005448f, +0.001947f, +0.000004f, -0.002444f, +0.000237f, -0.000050f, - -0.000266f, +0.000010f, +0.001157f, -0.000038f, -0.000863f, -0.000104f, +0.000231f, +0.000944f, -0.000682f, +0.000709f, - -0.000696f, -0.000947f, +0.000737f, -0.000335f, +0.000409f, +0.000162f, -0.000330f, +0.000056f, +0.000334f, +0.000019f, - +0.000295f, +0.000368f, -0.000106f, +0.000178f, +0.000091f, +0.000194f, -0.000027f, +0.000270f, +0.000010f, -0.000062f, - -0.000207f, -0.000041f, -0.000190f, +0.000070f, +0.000140f, -0.000097f, +0.000152f, +0.000076f, +0.000098f, -0.000040f, - -0.000066f, -0.000125f, +0.000105f, -0.000133f, -0.000230f, -0.000068f, -0.000143f, -0.000101f, +0.000076f, -0.000104f, - +0.000048f, -0.000109f, -0.000148f, +0.000005f, +0.000129f, -0.000005f, -0.000045f, +0.000011f, -0.000011f, +0.000006f, - +0.000028f, -0.000096f, -0.000074f, +0.000008f, +0.000019f, -0.000006f, +0.000060f, +0.000090f, +0.000008f, -0.000053f, - +0.000007f, +0.000011f, -0.000019f, +0.000022f, +0.000016f, +0.000025f - }, - { - +0.001219f, -0.001922f, -0.004324f, +0.000473f, +0.000142f, -0.000811f, +0.000060f, +0.000165f, -0.000277f, +0.000170f, - +0.000413f, -0.000013f, +0.000247f, -0.000502f, +0.000221f, -0.000056f, -0.000009f, +0.000387f, +0.000273f, -0.000362f, - -0.000392f, -0.000078f, -0.000239f, -0.000280f, +0.000261f, +0.000084f, +0.000099f, -0.000270f, +0.000297f, +0.000277f, - -0.000183f, +0.000275f, +0.000029f, +0.000446f, -0.000321f, +0.000241f, -0.000107f, +0.000261f, +0.000322f, +0.000005f, - +0.000203f, +0.000375f, +0.000174f, -0.000264f, +0.000100f, +0.000329f, +0.000298f, -0.000053f, -0.000069f, +0.000271f, - +0.000205f, -0.000042f, +0.000334f, +0.000088f, -0.000326f, -0.000142f, +0.000147f, -0.000022f, -0.000052f, -0.000075f, - -0.000090f, +0.000141f, -0.000036f, +0.000035f, +0.000011f, -0.000015f, +0.000054f, -0.000084f, -0.000030f, +0.000100f, - -0.000023f, -0.000045f, +0.000028f, +0.000060f, -0.000014f, -0.000004f, -0.000006f, +0.000019f, -0.000048f, +0.000051f, - -0.000079f, -0.000028f, +0.000039f, +0.000021f, +0.000005f, +0.000110f, +0.000070f, +0.000036f, +0.000072f, +0.000026f, - +0.000024f, -0.000007f, -0.000072f, -0.000016f, +0.000031f, +0.000048f - }, - { - -0.000474f, +0.007922f, -0.000185f, +0.001272f, +0.000118f, +0.000266f, +0.000350f, -0.000311f, -0.000167f, +0.000176f, - +0.000690f, -0.000432f, +0.000051f, +0.000383f, +0.001125f, +0.000580f, -0.000512f, -0.000696f, +0.000656f, +0.000910f, - -0.000705f, +0.000410f, +0.000890f, +0.000660f, +0.000101f, +0.000228f, +0.000151f, -0.000459f, +0.000055f, +0.000019f, - -0.000286f, -0.000048f, -0.000078f, -0.000298f, -0.000115f, +0.000119f, -0.000332f, -0.000310f, +0.000026f, -0.000090f, - +0.000184f, +0.000010f, +0.000338f, +0.000203f, -0.000100f, -0.000024f, -0.000058f, -0.000023f, +0.000000f, +0.000001f, - +0.000191f, +0.000146f, -0.000174f, -0.000189f, -0.000172f, +0.000066f, -0.000068f, +0.000076f, +0.000066f, +0.000033f, - +0.000033f, +0.000083f, -0.000168f, -0.000136f, +0.000070f, +0.000106f, -0.000070f, +0.000092f, +0.000118f, -0.000016f, - -0.000033f, -0.000056f, -0.000048f, +0.000027f, +0.000022f, -0.000011f, -0.000040f, -0.000148f, -0.000065f, +0.000061f, - -0.000041f, +0.000044f, +0.000043f, -0.000053f, -0.000075f, -0.000010f, -0.000039f, +0.000001f, -0.000039f, -0.000064f, - +0.000016f, -0.000000f, -0.000006f, +0.000009f, +0.000011f, +0.000030f - }, - { - +0.005705f, -0.007607f, -0.002038f, -0.001284f, +0.000194f, -0.000036f, -0.000700f, -0.000025f, -0.000789f, +0.000188f, - -0.000319f, -0.001334f, +0.000119f, -0.000394f, -0.000586f, -0.000008f, +0.000126f, -0.000038f, +0.000004f, +0.000383f, - -0.000311f, +0.000404f, +0.000061f, -0.000293f, +0.000011f, +0.000085f, -0.000098f, +0.000118f, -0.000313f, -0.000249f, - +0.000013f, +0.000324f, -0.000449f, -0.000115f, -0.000102f, -0.000267f, -0.000152f, -0.000172f, -0.000161f, +0.000288f, - +0.000019f, +0.000119f, -0.000214f, +0.000299f, -0.000114f, +0.000002f, -0.000306f, +0.000048f, +0.000065f, +0.000159f, - +0.000137f, +0.000139f, +0.000067f, +0.000027f, +0.000047f, +0.000027f, -0.000032f, +0.000104f, -0.000017f, -0.000085f, - +0.000082f, +0.000030f, -0.000114f, +0.000104f, +0.000058f, -0.000116f, -0.000083f, -0.000038f, -0.000129f, +0.000029f, - +0.000030f, -0.000049f, +0.000028f, +0.000068f, +0.000060f, +0.000021f, -0.000020f, -0.000018f, -0.000039f, -0.000016f, - -0.000012f, +0.000049f, +0.000090f, -0.000031f, +0.000051f, -0.000010f, -0.000060f, +0.000027f, -0.000023f, +0.000018f, - +0.000034f, +0.000030f, +0.000070f, -0.000019f, -0.000017f, +0.000022f - }, - { - -0.000195f, +0.000117f, -0.000352f, +0.000325f, +0.000215f, +0.000200f, +0.000180f, -0.000311f, +0.000122f, +0.000257f, - +0.000293f, +0.000123f, -0.000651f, +0.005004f, -0.002888f, +0.004277f, -0.000409f, +0.000018f, -0.000542f, -0.000555f, - +0.000804f, +0.000127f, -0.001059f, +0.000184f, -0.000191f, -0.000152f, -0.000227f, +0.000238f, +0.000299f, +0.000952f, - +0.000177f, -0.000335f, -0.000306f, -0.000352f, -0.000017f, -0.000411f, -0.000049f, +0.000274f, -0.000231f, +0.000380f, - -0.000256f, +0.000089f, +0.000042f, -0.000037f, -0.000197f, +0.000140f, +0.000168f, +0.000335f, -0.000011f, +0.000215f, - +0.000075f, +0.000199f, +0.000174f, -0.000073f, +0.000013f, +0.000249f, -0.000050f, -0.000098f, -0.000014f, -0.000105f, - -0.000271f, +0.000046f, +0.000156f, +0.000077f, +0.000048f, -0.000093f, +0.000016f, -0.000109f, -0.000014f, +0.000048f, - -0.000003f, -0.000046f, -0.000001f, -0.000052f, +0.000028f, +0.000142f, +0.000077f, -0.000006f, +0.000008f, +0.000005f, - -0.000062f, -0.000110f, -0.000041f, -0.000049f, -0.000026f, -0.000010f, +0.000012f, +0.000071f, -0.000051f, -0.000012f, - -0.000030f, +0.000003f, +0.000108f, +0.000004f, -0.000042f, +0.000058f - }, - { - -0.001336f, +0.006824f, -0.001141f, -0.002600f, -0.000058f, +0.000606f, +0.000205f, -0.000560f, -0.000137f, +0.000304f, - -0.000415f, -0.000272f, +0.000477f, -0.000333f, -0.000075f, -0.000529f, -0.001056f, +0.000016f, -0.000051f, +0.000098f, - -0.000251f, +0.000293f, +0.000382f, +0.000271f, +0.001006f, -0.000330f, -0.000206f, -0.000591f, +0.000686f, +0.000686f, - -0.000345f, -0.000081f, +0.000083f, -0.000293f, +0.000052f, +0.000245f, -0.000222f, -0.000250f, -0.000345f, -0.000021f, - +0.000221f, -0.000506f, +0.000125f, +0.000074f, -0.000038f, -0.000267f, -0.000276f, -0.000066f, +0.000097f, +0.000155f, - +0.000221f, -0.000275f, +0.000160f, +0.000104f, -0.000123f, -0.000106f, -0.000096f, +0.000008f, +0.000084f, -0.000147f, - +0.000106f, -0.000057f, -0.000059f, -0.000077f, -0.000098f, -0.000113f, -0.000122f, +0.000042f, -0.000016f, +0.000042f, - -0.000044f, +0.000050f, -0.000021f, +0.000002f, -0.000070f, -0.000056f, -0.000030f, +0.000095f, -0.000073f, -0.000105f, - -0.000026f, +0.000025f, -0.000058f, -0.000095f, +0.000013f, -0.000048f, -0.000050f, +0.000116f, +0.000024f, -0.000037f, - +0.000033f, +0.000005f, -0.000040f, -0.000021f, -0.000009f, +0.000031f - }, - { - -0.000111f, -0.000038f, -0.000711f, -0.000055f, +0.000195f, -0.000137f, +0.000102f, +0.000240f, +0.001094f, -0.000246f, - -0.000880f, +0.000246f, -0.000345f, +0.001021f, +0.015216f, +0.000707f, -0.002709f, -0.000753f, +0.000831f, -0.000277f, - -0.000413f, +0.001252f, +0.000115f, +0.000394f, +0.000721f, -0.000038f, +0.000041f, +0.000320f, +0.000041f, +0.000154f, - +0.000274f, -0.000381f, +0.000001f, +0.000474f, -0.000360f, -0.000063f, +0.000854f, -0.000103f, -0.000314f, +0.000163f, - -0.000034f, +0.000255f, +0.000272f, -0.000092f, -0.000093f, -0.000041f, -0.000128f, -0.000034f, +0.000128f, +0.000111f, - -0.000047f, +0.000167f, +0.000281f, +0.000066f, -0.000057f, -0.000099f, +0.000104f, -0.000021f, +0.000055f, +0.000246f, - +0.000262f, -0.000102f, -0.000063f, +0.000116f, +0.000104f, +0.000071f, -0.000185f, -0.000090f, +0.000104f, +0.000011f, - -0.000058f, -0.000032f, +0.000132f, +0.000032f, +0.000067f, +0.000032f, -0.000126f, +0.000055f, +0.000072f, +0.000057f, - -0.000046f, -0.000073f, -0.000069f, -0.000011f, +0.000077f, -0.000032f, +0.000032f, +0.000006f, -0.000044f, -0.000009f, - +0.000016f, -0.000035f, -0.000003f, +0.000033f, +0.000020f, -0.000038f - } - }, - { - { - +0.000513f, +0.056536f, -0.002765f, -0.004322f, +0.000111f, -0.000314f, +0.000241f, +0.000406f, -0.000137f, +0.000231f, - +0.000507f, -0.000561f, -0.000570f, +0.000282f, -0.001245f, +0.001177f, +0.000074f, +0.000361f, +0.000278f, +0.001478f, - +0.000081f, -0.000157f, -0.000162f, -0.000224f, +0.000252f, -0.000101f, -0.000065f, -0.000140f, +0.000440f, +0.000051f, - +0.000270f, -0.000072f, +0.000836f, +0.000213f, -0.000120f, +0.000083f, +0.000261f, -0.000156f, +0.000056f, -0.000256f, - +0.000028f, +0.000228f, -0.000132f, +0.000215f, +0.000148f, +0.000083f, -0.000014f, -0.000389f, +0.000181f, +0.000196f, - +0.000171f, +0.000062f, -0.000088f, +0.000042f, -0.000066f, -0.000174f, -0.000128f, -0.000112f, -0.000054f, +0.000112f, - +0.000058f, -0.000057f, -0.000011f, -0.000094f, +0.000056f, -0.000035f, +0.000137f, +0.000015f, -0.000069f, -0.000037f, - -0.000040f, +0.000052f, +0.000001f, -0.000040f, -0.000105f, -0.000081f, +0.000103f, -0.000044f, +0.000021f, +0.000093f, - +0.000050f, +0.000084f, -0.000017f, -0.000023f, -0.000060f, +0.000062f, +0.000044f, -0.000017f, +0.000076f, +0.000032f, - -0.000014f, +0.000006f, -0.000006f, -0.000016f, -0.000011f, +0.000019f - }, - { - +0.000272f, -0.004140f, +0.001449f, +0.000284f, +0.000337f, -0.000400f, -0.000529f, +0.000178f, +0.000121f, -0.000189f, - -0.000239f, -0.000179f, -0.000622f, -0.002216f, +0.000111f, -0.000958f, -0.001664f, +0.000543f, -0.000821f, -0.000015f, - -0.000102f, +0.001565f, +0.000368f, -0.000079f, -0.001249f, -0.000073f, +0.000219f, +0.001164f, -0.000402f, -0.000484f, - -0.000003f, -0.001004f, +0.000249f, -0.000129f, +0.000011f, +0.000293f, -0.000078f, +0.000223f, +0.000142f, -0.000520f, - +0.000345f, +0.000189f, +0.000458f, -0.000352f, -0.000244f, +0.000012f, +0.000080f, -0.000013f, +0.000002f, +0.000113f, - -0.000125f, -0.000084f, +0.000162f, +0.000198f, -0.000211f, -0.000169f, +0.000003f, -0.000085f, -0.000113f, +0.000105f, - +0.000231f, +0.000182f, +0.000006f, -0.000084f, +0.000064f, -0.000013f, +0.000113f, +0.000101f, -0.000017f, -0.000020f, - +0.000034f, -0.000018f, -0.000086f, -0.000038f, +0.000102f, -0.000022f, -0.000070f, -0.000071f, +0.000011f, +0.000102f, - -0.000031f, -0.000077f, +0.000027f, +0.000017f, +0.000008f, +0.000047f, +0.000015f, -0.000015f, +0.000074f, +0.000002f, - -0.000078f, +0.000010f, +0.000069f, +0.000057f, +0.000001f, -0.000038f - }, - { - +0.001103f, -0.016156f, -0.001573f, +0.002518f, +0.001232f, -0.000359f, +0.000063f, -0.000144f, -0.000340f, -0.000172f, - +0.000836f, -0.000021f, -0.000443f, +0.001074f, -0.000443f, +0.001347f, +0.000056f, -0.000027f, +0.000606f, +0.000204f, - -0.000694f, +0.000687f, +0.000252f, +0.000031f, +0.000011f, +0.000350f, -0.000129f, +0.000163f, -0.000960f, +0.000096f, - +0.000098f, -0.000319f, +0.000509f, +0.000213f, -0.000450f, +0.000306f, +0.000366f, -0.000176f, +0.000010f, -0.000275f, - -0.000169f, +0.000043f, -0.000248f, +0.000097f, +0.000205f, +0.000168f, -0.000135f, +0.000145f, +0.000096f, -0.000117f, - +0.000037f, +0.000282f, -0.000138f, -0.000077f, +0.000134f, -0.000009f, +0.000015f, -0.000053f, -0.000046f, -0.000033f, - +0.000114f, +0.000124f, -0.000004f, -0.000092f, +0.000023f, +0.000135f, -0.000027f, -0.000049f, +0.000112f, +0.000016f, - -0.000063f, +0.000019f, +0.000102f, -0.000100f, -0.000044f, -0.000063f, -0.000025f, +0.000060f, -0.000026f, -0.000037f, - +0.000001f, +0.000030f, -0.000024f, -0.000066f, +0.000022f, +0.000035f, +0.000033f, -0.000050f, -0.000022f, +0.000022f, - -0.000034f, -0.000072f, +0.000010f, -0.000024f, -0.000021f, +0.000023f - }, - { - +0.005644f, +0.052815f, -0.001840f, +0.001561f, +0.000647f, +0.000438f, +0.000329f, +0.000459f, -0.000001f, -0.000619f, - -0.000214f, +0.000065f, -0.000024f, -0.001011f, -0.000955f, +0.000044f, +0.000511f, -0.000621f, -0.000379f, -0.000228f, - -0.000167f, +0.000306f, -0.000124f, -0.000241f, +0.000339f, -0.000435f, +0.000168f, -0.000362f, -0.000000f, +0.000660f, - +0.000081f, +0.000019f, +0.000117f, -0.000419f, -0.000388f, -0.000777f, +0.000190f, +0.000083f, +0.000424f, +0.000562f, - -0.000062f, -0.000327f, +0.000436f, -0.000035f, -0.000029f, +0.000014f, +0.000230f, -0.000062f, -0.000031f, +0.000130f, - -0.000056f, -0.000112f, -0.000019f, +0.000195f, -0.000096f, +0.000000f, -0.000114f, +0.000165f, -0.000095f, -0.000028f, - +0.000022f, +0.000075f, +0.000059f, +0.000048f, +0.000143f, -0.000082f, +0.000125f, -0.000016f, -0.000056f, +0.000073f, - +0.000032f, -0.000161f, -0.000092f, +0.000002f, -0.000015f, +0.000052f, +0.000031f, -0.000025f, +0.000016f, +0.000076f, - +0.000068f, +0.000035f, -0.000042f, -0.000029f, +0.000028f, -0.000027f, +0.000038f, -0.000033f, -0.000069f, +0.000021f, - +0.000038f, -0.000010f, -0.000021f, +0.000026f, +0.000014f, -0.000016f - }, - { - -0.000418f, +0.001668f, +0.000149f, +0.000304f, +0.000076f, -0.000238f, +0.000073f, +0.000163f, +0.000128f, +0.000144f, - +0.000137f, -0.000123f, +0.001227f, -0.000146f, +0.003587f, -0.002657f, -0.000511f, +0.001998f, +0.000732f, -0.000842f, - +0.000339f, +0.000432f, +0.001045f, +0.000744f, -0.001147f, -0.000252f, +0.000619f, -0.000685f, +0.000614f, +0.000215f, - -0.000300f, +0.001142f, +0.000374f, -0.000134f, +0.000219f, -0.000492f, +0.000498f, +0.000347f, -0.000130f, +0.000195f, - -0.000001f, +0.000099f, +0.000377f, +0.000010f, +0.000104f, +0.000170f, +0.000018f, +0.000297f, +0.000191f, +0.000048f, - -0.000123f, -0.000242f, +0.000113f, -0.000034f, -0.000087f, +0.000071f, +0.000107f, +0.000195f, +0.000018f, +0.000054f, - +0.000085f, +0.000046f, -0.000030f, +0.000033f, +0.000247f, +0.000082f, +0.000017f, -0.000037f, -0.000041f, +0.000077f, - -0.000084f, -0.000048f, -0.000011f, -0.000014f, -0.000061f, +0.000066f, +0.000063f, +0.000070f, +0.000129f, +0.000056f, - +0.000018f, -0.000015f, -0.000100f, +0.000082f, +0.000015f, +0.000014f, +0.000038f, -0.000031f, -0.000002f, +0.000017f, - +0.000028f, +0.000033f, -0.000002f, -0.000047f, +0.000020f, +0.000051f - }, - { - +0.000858f, +0.068268f, -0.000401f, -0.001673f, -0.000382f, -0.000174f, +0.000142f, +0.000605f, -0.000866f, +0.000910f, - +0.000912f, -0.000446f, -0.000559f, -0.000242f, +0.000269f, -0.000259f, -0.000235f, +0.000074f, -0.000076f, -0.000113f, - +0.000453f, +0.000193f, -0.000633f, -0.000858f, +0.000063f, +0.000131f, +0.000062f, -0.000444f, -0.000166f, +0.000573f, - +0.000008f, -0.000155f, -0.000238f, +0.000186f, -0.000206f, -0.000168f, -0.000208f, -0.000442f, +0.000080f, +0.000006f, - +0.000072f, -0.000314f, -0.000301f, +0.000507f, -0.000230f, -0.000201f, -0.000207f, -0.000295f, -0.000211f, +0.000216f, - -0.000133f, +0.000105f, +0.000276f, +0.000094f, -0.000188f, -0.000070f, +0.000320f, +0.000095f, -0.000073f, -0.000144f, - -0.000089f, +0.000033f, +0.000203f, +0.000048f, -0.000109f, -0.000024f, +0.000081f, +0.000031f, -0.000027f, +0.000065f, - +0.000008f, +0.000069f, -0.000048f, +0.000007f, -0.000023f, +0.000013f, +0.000080f, -0.000001f, -0.000048f, -0.000012f, - -0.000046f, -0.000058f, -0.000101f, -0.000011f, +0.000061f, +0.000056f, -0.000002f, +0.000062f, -0.000022f, -0.000045f, - +0.000029f, +0.000028f, +0.000011f, -0.000048f, -0.000014f, +0.000022f - }, - { - -0.000196f, +0.001581f, +0.000974f, -0.000705f, +0.000014f, -0.000047f, +0.000214f, +0.000226f, +0.000199f, -0.000081f, - +0.000177f, +0.000208f, -0.000500f, -0.000724f, +0.001250f, +0.000468f, -0.002188f, +0.000078f, -0.000654f, -0.000399f, - +0.000372f, -0.000030f, +0.000026f, +0.000278f, -0.000680f, -0.001156f, -0.000569f, -0.000388f, -0.001142f, +0.000603f, - +0.000191f, -0.000137f, -0.000977f, +0.000928f, +0.000681f, +0.000067f, -0.000127f, +0.000247f, +0.000085f, +0.000338f, - +0.000036f, -0.000418f, -0.000032f, -0.000142f, +0.000149f, +0.000283f, -0.000042f, +0.000101f, -0.000119f, -0.000032f, - -0.000095f, -0.000017f, +0.000118f, +0.000075f, -0.000053f, -0.000006f, +0.000087f, +0.000010f, -0.000167f, -0.000054f, - -0.000087f, -0.000022f, -0.000053f, -0.000090f, -0.000003f, -0.000076f, +0.000118f, +0.000130f, -0.000070f, -0.000197f, - -0.000026f, +0.000086f, +0.000064f, +0.000038f, +0.000074f, +0.000010f, +0.000072f, +0.000067f, +0.000059f, -0.000057f, - +0.000017f, +0.000020f, -0.000006f, -0.000033f, -0.000016f, +0.000026f, -0.000049f, -0.000032f, -0.000015f, -0.000069f, - -0.000088f, -0.000034f, +0.000026f, +0.000001f, -0.000035f, -0.000004f - }, - { - -0.013430f, -0.045187f, +0.000180f, +0.001096f, +0.000325f, +0.000185f, -0.000837f, -0.000341f, -0.000019f, +0.000398f, - +0.000487f, -0.000987f, -0.000710f, +0.000050f, +0.000844f, -0.000889f, +0.000035f, -0.000477f, -0.000048f, +0.000825f, - -0.000769f, -0.000681f, -0.000601f, +0.000129f, -0.000715f, -0.000236f, -0.000113f, -0.000446f, -0.000728f, -0.000126f, - +0.000175f, -0.000217f, +0.000055f, +0.000499f, -0.000173f, -0.000172f, -0.000360f, +0.000620f, +0.000270f, +0.000130f, - -0.000080f, +0.000053f, -0.000087f, -0.000298f, +0.000338f, -0.000006f, -0.000113f, -0.000345f, -0.000075f, +0.000138f, - +0.000085f, -0.000032f, -0.000302f, -0.000009f, +0.000093f, +0.000092f, +0.000150f, +0.000064f, -0.000001f, -0.000064f, - -0.000089f, +0.000092f, +0.000022f, +0.000017f, -0.000074f, -0.000063f, +0.000031f, +0.000031f, -0.000039f, -0.000057f, - +0.000043f, +0.000010f, +0.000047f, +0.000165f, +0.000058f, -0.000105f, +0.000096f, +0.000093f, -0.000092f, +0.000026f, - +0.000034f, -0.000051f, +0.000003f, +0.000040f, -0.000007f, -0.000025f, +0.000052f, +0.000036f, +0.000011f, -0.000009f, - -0.000039f, +0.000002f, +0.000035f, +0.000042f, +0.000022f, -0.000030f - }, - { - -0.000349f, +0.001367f, +0.001579f, -0.000878f, +0.000039f, -0.000225f, +0.000056f, +0.000234f, +0.000115f, -0.000186f, - -0.000344f, -0.000119f, +0.000224f, +0.001370f, -0.005161f, -0.001728f, -0.001516f, -0.001132f, +0.000886f, +0.001805f, - +0.002248f, +0.000862f, +0.000324f, -0.000032f, -0.000771f, -0.000668f, -0.000309f, -0.000221f, -0.000891f, +0.001336f, - -0.000658f, -0.000287f, +0.000430f, -0.000523f, +0.000434f, +0.000005f, -0.000222f, +0.000399f, +0.000086f, +0.000156f, - +0.000410f, +0.000098f, -0.000163f, +0.000252f, +0.000155f, +0.000146f, -0.000010f, +0.000047f, +0.000083f, +0.000196f, - +0.000036f, +0.000006f, -0.000104f, +0.000072f, +0.000091f, -0.000161f, +0.000224f, +0.000088f, +0.000077f, -0.000017f, - -0.000111f, -0.000177f, -0.000061f, -0.000248f, -0.000120f, +0.000001f, -0.000121f, -0.000046f, +0.000143f, -0.000113f, - -0.000010f, -0.000113f, -0.000051f, +0.000123f, +0.000115f, -0.000071f, -0.000047f, +0.000029f, -0.000022f, +0.000025f, - +0.000008f, -0.000116f, -0.000025f, +0.000025f, +0.000023f, +0.000037f, +0.000094f, +0.000049f, -0.000026f, -0.000052f, - +0.000021f, -0.000017f, -0.000003f, +0.000030f, +0.000031f, +0.000034f - }, - { - -0.001782f, -0.001779f, +0.001497f, +0.001844f, +0.000449f, +0.000795f, +0.000929f, +0.000284f, +0.000330f, +0.000903f, - +0.000284f, -0.000249f, -0.000065f, -0.001047f, +0.000268f, -0.000081f, +0.001085f, +0.001292f, +0.000636f, -0.000365f, - -0.000164f, +0.000085f, +0.000071f, -0.000102f, +0.000220f, -0.000220f, +0.000084f, -0.000142f, +0.000125f, +0.000048f, - -0.000039f, +0.000247f, -0.000063f, +0.000714f, -0.000238f, +0.000194f, -0.000149f, +0.000002f, -0.000052f, +0.000103f, - +0.000201f, +0.000492f, +0.000010f, -0.000232f, +0.000416f, +0.000328f, +0.000058f, -0.000033f, +0.000055f, +0.000267f, - +0.000205f, -0.000025f, +0.000263f, +0.000003f, -0.000277f, -0.000031f, +0.000114f, -0.000064f, +0.000005f, -0.000092f, - -0.000015f, +0.000095f, -0.000022f, +0.000030f, -0.000092f, +0.000007f, +0.000025f, -0.000077f, +0.000058f, +0.000053f, - -0.000012f, -0.000013f, +0.000061f, +0.000020f, +0.000014f, -0.000009f, +0.000040f, -0.000059f, +0.000000f, +0.000007f, - -0.000109f, -0.000011f, +0.000077f, +0.000016f, +0.000054f, +0.000110f, +0.000054f, +0.000019f, +0.000068f, +0.000012f, - +0.000012f, -0.000031f, -0.000054f, +0.000003f, +0.000033f, +0.000042f - }, - { - +0.000721f, +0.007490f, -0.001892f, +0.000313f, +0.000346f, +0.000344f, -0.000200f, -0.000746f, +0.000096f, +0.000485f, - +0.000668f, -0.000597f, +0.000231f, -0.000332f, +0.000665f, +0.000261f, -0.000613f, -0.000534f, +0.000091f, -0.001161f, - -0.001406f, -0.000281f, +0.000183f, +0.000101f, -0.000291f, +0.000316f, -0.000193f, -0.000246f, +0.000089f, -0.000066f, - +0.000026f, +0.000020f, -0.000210f, -0.000149f, +0.000302f, +0.000063f, -0.000470f, -0.000250f, -0.000055f, -0.000132f, - -0.000084f, -0.000038f, +0.000225f, +0.000007f, -0.000092f, +0.000078f, -0.000101f, -0.000025f, +0.000153f, +0.000100f, - +0.000114f, +0.000044f, -0.000251f, -0.000186f, -0.000087f, +0.000021f, +0.000045f, +0.000136f, +0.000019f, -0.000005f, - +0.000122f, +0.000038f, -0.000190f, -0.000076f, +0.000106f, -0.000005f, +0.000047f, +0.000143f, +0.000021f, -0.000022f, - -0.000060f, -0.000062f, -0.000014f, +0.000057f, +0.000014f, -0.000046f, -0.000041f, -0.000133f, -0.000001f, +0.000040f, - -0.000028f, +0.000070f, +0.000033f, -0.000102f, -0.000072f, -0.000003f, -0.000045f, +0.000014f, -0.000051f, -0.000039f, - +0.000021f, -0.000019f, -0.000011f, +0.000004f, +0.000034f, -0.000011f - }, - { - -0.004348f, -0.021608f, -0.000911f, -0.000195f, +0.000642f, -0.000394f, -0.000037f, +0.000741f, -0.000315f, +0.000134f, - -0.000542f, -0.000674f, +0.000101f, -0.000187f, -0.000582f, -0.000212f, +0.000256f, -0.000300f, +0.000133f, +0.000290f, - -0.000143f, +0.000511f, +0.000056f, -0.000306f, +0.000316f, +0.000079f, +0.000179f, +0.000199f, +0.000133f, -0.000134f, - -0.000051f, -0.000172f, -0.000646f, +0.000104f, -0.000326f, -0.000278f, -0.000441f, -0.000384f, -0.000095f, +0.000295f, - +0.000095f, -0.000031f, -0.000433f, -0.000006f, -0.000253f, -0.000122f, -0.000196f, +0.000112f, +0.000087f, +0.000111f, - +0.000149f, -0.000032f, +0.000157f, -0.000134f, -0.000013f, -0.000008f, -0.000046f, +0.000046f, -0.000132f, +0.000013f, - +0.000194f, -0.000053f, -0.000102f, +0.000146f, -0.000040f, -0.000088f, -0.000069f, -0.000053f, -0.000067f, +0.000150f, - -0.000008f, -0.000047f, +0.000032f, +0.000068f, +0.000065f, -0.000010f, -0.000021f, -0.000033f, -0.000042f, -0.000001f, - +0.000017f, +0.000085f, +0.000046f, -0.000028f, +0.000057f, -0.000044f, -0.000020f, +0.000013f, -0.000021f, +0.000034f, - +0.000028f, +0.000053f, +0.000053f, -0.000027f, -0.000006f, +0.000037f - }, - { - +0.000234f, -0.000057f, -0.000768f, +0.000800f, +0.000156f, +0.000268f, -0.000070f, -0.000417f, -0.000017f, +0.000196f, - +0.000030f, -0.000592f, -0.002493f, +0.003631f, -0.000581f, +0.003327f, -0.001538f, -0.000320f, +0.000970f, +0.000427f, - -0.002064f, +0.000111f, -0.001021f, -0.000325f, +0.000181f, +0.000390f, +0.000195f, +0.000365f, +0.000299f, +0.001021f, - -0.000964f, -0.000461f, -0.000423f, -0.000335f, -0.000022f, -0.000466f, +0.000181f, -0.000002f, -0.000217f, +0.000318f, - -0.000134f, +0.000310f, -0.000008f, -0.000057f, -0.000202f, +0.000004f, +0.000117f, +0.000185f, -0.000169f, +0.000123f, - +0.000064f, +0.000250f, +0.000072f, -0.000135f, +0.000060f, +0.000182f, -0.000150f, -0.000041f, +0.000002f, -0.000215f, - -0.000209f, +0.000195f, +0.000123f, -0.000012f, -0.000054f, -0.000073f, +0.000043f, -0.000143f, +0.000075f, +0.000041f, - -0.000007f, -0.000060f, +0.000066f, -0.000018f, +0.000068f, +0.000115f, +0.000049f, -0.000041f, +0.000008f, +0.000034f, - -0.000083f, -0.000109f, -0.000037f, -0.000045f, -0.000005f, -0.000023f, +0.000050f, +0.000034f, -0.000037f, -0.000015f, - -0.000034f, +0.000054f, +0.000112f, -0.000033f, +0.000008f, +0.000061f - }, - { - +0.001021f, +0.009273f, -0.000757f, -0.001584f, -0.000064f, +0.000593f, -0.000211f, +0.000217f, +0.000205f, +0.000021f, - +0.000101f, +0.000140f, -0.000158f, -0.000066f, -0.000125f, -0.000894f, -0.000833f, +0.000069f, +0.000181f, +0.000202f, - -0.000338f, +0.000288f, +0.000151f, +0.000441f, +0.001035f, -0.000240f, +0.000038f, -0.000334f, +0.000879f, +0.000598f, - -0.000241f, -0.000304f, +0.000095f, -0.000260f, -0.000177f, -0.000052f, -0.000170f, -0.000191f, -0.000166f, +0.000050f, - -0.000147f, -0.000220f, +0.000073f, -0.000237f, -0.000142f, -0.000352f, -0.000333f, -0.000003f, +0.000072f, +0.000306f, - -0.000037f, -0.000144f, +0.000276f, +0.000060f, -0.000215f, -0.000213f, -0.000054f, +0.000110f, +0.000029f, -0.000006f, - +0.000077f, -0.000066f, -0.000028f, -0.000121f, -0.000043f, -0.000092f, -0.000055f, +0.000039f, +0.000019f, -0.000002f, - +0.000030f, +0.000038f, -0.000009f, -0.000026f, -0.000077f, -0.000055f, +0.000022f, +0.000049f, -0.000118f, -0.000076f, - +0.000016f, +0.000022f, -0.000080f, -0.000060f, +0.000008f, -0.000057f, +0.000014f, +0.000106f, -0.000016f, -0.000021f, - +0.000026f, -0.000020f, -0.000035f, -0.000015f, +0.000025f, +0.000023f - }, - { - +0.000402f, -0.001495f, -0.001884f, +0.000316f, +0.000187f, -0.000004f, +0.000133f, -0.000198f, +0.000779f, -0.000423f, - -0.000383f, -0.000053f, -0.000099f, -0.006940f, +0.005274f, +0.003584f, -0.001893f, -0.001726f, -0.000507f, -0.000222f, - -0.000317f, +0.000845f, +0.000112f, +0.000691f, +0.000712f, +0.000036f, +0.000573f, +0.000641f, +0.000972f, +0.000666f, - +0.000079f, -0.000058f, +0.000220f, +0.000307f, -0.000486f, +0.000185f, +0.000772f, -0.000150f, +0.000058f, -0.000076f, - +0.000320f, +0.000493f, +0.000083f, -0.000481f, +0.000055f, -0.000018f, -0.000238f, -0.000189f, +0.000001f, +0.000028f, - -0.000145f, +0.000179f, +0.000289f, -0.000047f, +0.000034f, -0.000054f, +0.000176f, +0.000012f, +0.000210f, +0.000281f, - +0.000139f, -0.000159f, -0.000045f, +0.000121f, +0.000038f, -0.000006f, -0.000229f, +0.000004f, +0.000073f, +0.000024f, - -0.000057f, +0.000039f, +0.000148f, -0.000018f, +0.000057f, -0.000063f, -0.000064f, +0.000060f, +0.000025f, +0.000003f, - -0.000087f, -0.000061f, -0.000062f, +0.000037f, +0.000070f, -0.000007f, +0.000039f, -0.000016f, -0.000072f, -0.000008f, - +0.000005f, -0.000043f, +0.000015f, +0.000038f, -0.000011f, -0.000042f - } - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX] /* Q29 */= { { @@ -67311,9113 +38050,7 @@ const Word32 rightBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA }, }, }; -#else -const float rightBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]= -{ - { - { - -0.002626f, -0.091984f, +0.112454f, +0.032889f, -0.018787f, +0.020135f, -0.040166f, -0.046445f, -0.039117f, +0.013418f, - +0.017182f, +0.006263f, +0.051753f, +0.017991f, -0.017273f, -0.014571f, +0.004824f, +0.045673f, +0.002516f, -0.028876f, - -0.018614f, -0.000233f, -0.014210f, -0.000345f, -0.033314f, -0.000234f, -0.008287f, +0.014615f, +0.002657f, +0.041244f, - +0.007988f, +0.000967f, -0.016643f, +0.002161f, +0.018013f, -0.005292f, -0.019658f, -0.004553f, +0.015985f, +0.024332f, - +0.012325f, -0.028393f, -0.036958f, +0.000012f, +0.014259f, +0.004401f, -0.001464f, -0.006581f, +0.006742f, -0.020979f, - -0.003024f, +0.005075f, +0.001263f, +0.003405f, +0.001322f, +0.008734f, +0.016774f, +0.016192f, +0.004745f, -0.003023f, - -0.001688f, -0.000306f, +0.000506f, -0.010260f, -0.007314f, -0.009882f, -0.012185f, -0.022195f, -0.005114f, -0.001018f, - +0.009550f, +0.008692f, +0.008496f, +0.004482f, +0.011601f, +0.010002f, +0.006993f, +0.004236f, +0.002123f, -0.001852f, - +0.000104f, -0.005423f, -0.004225f, -0.008126f, -0.009280f, -0.004170f, -0.001537f, -0.004997f, -0.008491f, +0.005719f, - +0.006197f, +0.003095f, +0.000349f, +0.000155f, +0.003755f, +0.002206f - }, - { - +0.004919f, -0.095386f, +0.124053f, -0.015697f, +0.035913f, -0.018521f, -0.036348f, -0.052516f, -0.013161f, +0.009784f, - +0.008901f, +0.036876f, +0.038571f, +0.004469f, -0.025103f, +0.016424f, -0.009310f, +0.049941f, -0.022953f, -0.022712f, - +0.003293f, -0.027499f, -0.015957f, -0.003968f, -0.007109f, -0.014544f, +0.000560f, +0.031722f, +0.010526f, +0.006277f, - +0.000365f, -0.005303f, -0.007273f, +0.008598f, +0.024339f, +0.006596f, -0.022474f, -0.005834f, +0.010760f, +0.013438f, - +0.000540f, -0.020743f, -0.009388f, +0.007212f, -0.006048f, -0.015220f, +0.009370f, +0.004605f, -0.001744f, -0.009482f, - -0.008456f, -0.002932f, +0.003339f, +0.002680f, +0.000756f, +0.019608f, +0.011465f, +0.009581f, +0.006395f, +0.010447f, - -0.000806f, -0.005562f, -0.007976f, -0.004493f, -0.011419f, -0.015257f, -0.015816f, -0.017768f, -0.003138f, +0.001517f, - +0.001753f, +0.009699f, +0.013487f, +0.010184f, +0.017604f, +0.011297f, +0.008167f, +0.006076f, -0.003928f, -0.009072f, - -0.003002f, -0.005302f, -0.008729f, -0.012691f, -0.005865f, +0.000469f, -0.002336f, -0.002416f, +0.001988f, +0.001768f, - +0.006487f, +0.002197f, -0.001045f, +0.003595f, -0.000533f, -0.000087f - }, - { - +0.002371f, -0.102239f, +0.130602f, -0.012847f, +0.031526f, -0.001903f, -0.067157f, -0.018273f, +0.003170f, -0.025677f, - +0.010545f, +0.020547f, +0.038030f, +0.001859f, +0.009985f, +0.008685f, -0.011709f, +0.009396f, +0.002348f, -0.001855f, - +0.007032f, +0.006271f, -0.024756f, -0.023850f, -0.032530f, -0.026169f, -0.038805f, +0.018433f, +0.043789f, +0.056149f, - +0.008966f, -0.000807f, +0.013400f, -0.004701f, -0.015611f, -0.007087f, +0.005971f, -0.004905f, -0.013002f, -0.001660f, - +0.025840f, +0.002527f, -0.015595f, -0.010920f, +0.003142f, +0.003172f, +0.000238f, -0.022082f, -0.017089f, -0.007475f, - -0.002722f, +0.011160f, +0.015255f, +0.003771f, +0.014825f, -0.000794f, -0.009696f, +0.017684f, +0.032232f, +0.016622f, - -0.003140f, -0.007946f, -0.012051f, -0.002400f, -0.011365f, -0.019873f, -0.011785f, -0.022991f, -0.012280f, -0.015610f, - -0.001900f, +0.015175f, +0.011841f, +0.014766f, +0.018579f, +0.015310f, +0.017258f, +0.010536f, +0.005214f, -0.000988f, - -0.009193f, -0.010375f, -0.011902f, -0.005221f, -0.006926f, -0.010096f, -0.009423f, +0.001378f, +0.010446f, +0.003376f, - -0.003868f, +0.001471f, -0.001449f, -0.003910f, -0.005467f, -0.003336f - }, - { - +0.000564f, -0.066587f, +0.087062f, +0.026248f, -0.024360f, +0.015070f, -0.024941f, -0.024942f, -0.043150f, -0.032055f, - +0.040954f, +0.018554f, +0.062695f, +0.004183f, +0.004934f, -0.024908f, -0.038268f, +0.026678f, +0.016424f, -0.006447f, - -0.001552f, -0.020931f, -0.019639f, +0.011155f, +0.021935f, -0.029200f, -0.023702f, +0.022973f, +0.012058f, +0.011795f, - -0.007980f, +0.005958f, +0.013033f, -0.017547f, +0.001049f, +0.007811f, +0.003803f, +0.000334f, +0.001290f, -0.002987f, - +0.007679f, -0.012197f, -0.012133f, +0.007014f, -0.006724f, -0.004298f, -0.001449f, +0.009421f, -0.000027f, -0.010373f, - +0.014766f, +0.004202f, -0.009704f, +0.000081f, -0.000714f, +0.003343f, +0.004317f, +0.000603f, +0.006223f, +0.000140f, - -0.005321f, -0.003893f, +0.005639f, +0.000074f, -0.007684f, -0.003903f, +0.000882f, +0.000788f, -0.012462f, -0.004038f, - +0.006968f, +0.006532f, +0.005018f, +0.005665f, +0.000488f, +0.001809f, -0.004227f, +0.005507f, +0.001594f, -0.004166f, - -0.001945f, +0.000937f, -0.000895f, -0.002800f, -0.001256f, -0.000284f, -0.004216f, -0.005711f, +0.001721f, +0.002112f, - -0.000916f, +0.000115f, +0.000567f, +0.007798f, +0.002932f, +0.002671f - }, - { - +0.001666f, -0.041376f, +0.097623f, -0.052418f, +0.036112f, -0.012835f, -0.024260f, -0.038437f, -0.026326f, -0.023128f, - +0.040447f, +0.036446f, +0.039993f, +0.018840f, -0.012233f, -0.011276f, -0.029095f, +0.030939f, -0.015488f, -0.000699f, - -0.000699f, -0.038556f, -0.035968f, +0.056013f, +0.015707f, -0.041508f, -0.012167f, +0.027488f, +0.040874f, -0.008169f, - -0.024412f, +0.014149f, -0.011409f, -0.010785f, +0.012658f, -0.003709f, -0.007668f, +0.023531f, +0.005853f, +0.001764f, - -0.001855f, -0.011050f, -0.007934f, +0.010609f, -0.001228f, -0.017845f, -0.013191f, +0.002377f, +0.022763f, +0.001753f, - -0.006159f, +0.002132f, -0.011970f, +0.008922f, +0.004841f, -0.008873f, +0.011393f, +0.008069f, +0.003166f, +0.000949f, - -0.013549f, +0.002975f, +0.004332f, -0.003866f, -0.003245f, -0.011883f, -0.008549f, -0.004174f, +0.005358f, -0.002642f, - +0.004272f, +0.005506f, +0.012704f, +0.006268f, +0.007150f, +0.004407f, -0.001985f, -0.005593f, -0.003597f, -0.009715f, - -0.004237f, +0.000923f, -0.001200f, -0.000261f, +0.000253f, +0.000017f, -0.004304f, -0.001286f, +0.002442f, +0.002595f, - -0.001585f, +0.001289f, -0.000935f, +0.002463f, +0.002901f, +0.004676f - }, - { - -0.004050f, -0.073050f, +0.096420f, +0.040655f, -0.036664f, +0.017952f, -0.020075f, -0.045128f, -0.037587f, +0.001975f, - +0.002725f, -0.003929f, +0.046383f, +0.083217f, +0.005472f, +0.016851f, -0.074807f, -0.020715f, -0.003260f, +0.022054f, - -0.015679f, -0.043455f, -0.032602f, +0.073273f, +0.011045f, +0.025909f, -0.034716f, -0.014683f, -0.001407f, -0.011081f, - +0.004575f, +0.060003f, +0.005990f, -0.018629f, -0.022468f, -0.010518f, +0.008302f, +0.012123f, -0.000264f, -0.008743f, - -0.034883f, +0.025522f, +0.013887f, -0.019726f, -0.014578f, +0.006546f, +0.015123f, +0.001403f, +0.008514f, +0.007104f, - +0.006983f, -0.000170f, +0.011973f, -0.001818f, -0.006791f, -0.014751f, -0.019580f, -0.009661f, +0.001487f, -0.001793f, - -0.007205f, -0.001120f, +0.004357f, +0.013158f, +0.011712f, +0.005776f, -0.005371f, -0.001393f, +0.004069f, +0.009914f, - +0.002459f, +0.010826f, -0.001358f, -0.001234f, -0.007199f, -0.005368f, -0.012194f, -0.009313f, -0.005590f, -0.000329f, - -0.005369f, +0.005234f, +0.010834f, +0.006705f, +0.004616f, -0.002623f, -0.008596f, -0.002714f, +0.001302f, +0.004940f, - +0.004725f, +0.005621f, +0.002327f, -0.000822f, -0.002757f, +0.000967f - }, - { - +0.001269f, -0.038460f, +0.104052f, -0.069352f, +0.049874f, -0.022910f, -0.029584f, -0.031089f, -0.030876f, +0.004071f, - -0.005977f, +0.020708f, +0.094485f, +0.029371f, +0.019354f, -0.030412f, -0.070395f, -0.011234f, +0.030981f, +0.017226f, - -0.041039f, -0.045879f, +0.002071f, +0.027306f, +0.021226f, +0.026577f, -0.016963f, -0.011802f, +0.003393f, -0.004777f, - -0.006079f, +0.039185f, +0.019401f, -0.029855f, -0.025531f, +0.011340f, +0.010572f, -0.007136f, -0.003117f, -0.019577f, - -0.010488f, +0.016309f, +0.009123f, +0.001297f, -0.002883f, -0.002108f, +0.011125f, -0.007347f, -0.000416f, +0.014537f, - +0.014730f, +0.001136f, +0.004673f, +0.000268f, -0.013320f, -0.023244f, -0.011374f, -0.004133f, +0.002617f, -0.011766f, - -0.002675f, +0.007823f, +0.010544f, +0.003291f, +0.006354f, +0.006199f, -0.001065f, -0.003185f, +0.007126f, +0.003557f, - +0.008914f, +0.008229f, -0.002392f, -0.000366f, -0.011420f, -0.006384f, -0.005386f, -0.007969f, -0.004933f, -0.003720f, - -0.002352f, +0.005145f, +0.004786f, +0.006877f, +0.002937f, +0.000685f, -0.004972f, -0.004256f, +0.001242f, +0.005907f, - -0.000379f, +0.002987f, +0.004985f, -0.002592f, +0.000295f, -0.003449f - }, - { - -0.004157f, -0.060323f, +0.083203f, +0.039794f, -0.036717f, +0.020897f, -0.025007f, -0.034272f, -0.031072f, -0.024760f, - -0.000998f, +0.022314f, +0.070542f, +0.049464f, -0.038618f, +0.019768f, -0.036649f, +0.029468f, +0.010225f, -0.047899f, - -0.027133f, -0.018283f, -0.014402f, -0.027981f, +0.067339f, +0.068939f, -0.016976f, -0.070859f, +0.021392f, -0.014830f, - +0.017421f, +0.030413f, +0.021651f, -0.006659f, -0.025694f, -0.001340f, +0.002116f, -0.003434f, -0.017647f, +0.002407f, - -0.018175f, -0.009812f, +0.013525f, +0.014872f, -0.003068f, -0.006386f, -0.001761f, +0.026296f, +0.010537f, -0.007237f, - -0.003080f, +0.020031f, +0.022122f, -0.005348f, -0.017106f, -0.014774f, -0.018287f, -0.028999f, -0.010723f, +0.012706f, - -0.005548f, -0.004651f, +0.009074f, +0.010528f, +0.013573f, +0.018056f, +0.014532f, -0.010693f, -0.010059f, +0.013080f, - +0.011388f, +0.004481f, -0.003305f, -0.005373f, -0.008468f, -0.004419f, -0.018445f, -0.018167f, -0.004965f, +0.002231f, - +0.002270f, +0.009652f, +0.007305f, +0.009093f, +0.002598f, -0.001868f, -0.007371f, -0.004179f, +0.007021f, +0.011871f, - +0.004523f, +0.006646f, -0.000097f, -0.007227f, -0.006826f, -0.002948f - }, - { - +0.000941f, -0.044094f, +0.109804f, -0.073937f, +0.055858f, -0.020020f, -0.035497f, -0.037051f, -0.023878f, +0.000226f, - -0.009250f, +0.061056f, +0.070502f, +0.009437f, -0.009815f, -0.008946f, -0.024591f, +0.032256f, -0.031037f, -0.032700f, - -0.024210f, +0.010421f, -0.028830f, -0.021243f, +0.079933f, +0.010727f, +0.006359f, -0.055370f, +0.013295f, +0.029021f, - +0.026940f, -0.016967f, -0.013493f, +0.026264f, -0.015633f, -0.009662f, +0.007789f, -0.004763f, -0.021226f, -0.028899f, - +0.002391f, +0.007813f, +0.003190f, +0.021845f, -0.005564f, -0.003680f, +0.010593f, +0.012747f, +0.006321f, +0.005903f, - -0.002617f, +0.009340f, +0.016941f, +0.008451f, -0.024435f, -0.017691f, -0.025645f, -0.031341f, -0.008820f, +0.003859f, - +0.004534f, +0.011937f, +0.011547f, +0.004280f, +0.003822f, +0.021157f, +0.006229f, -0.005379f, +0.003404f, +0.003844f, - +0.013751f, +0.004010f, +0.000249f, -0.013736f, -0.016171f, -0.002333f, -0.011896f, -0.008191f, -0.006236f, -0.001770f, - +0.006106f, +0.007203f, +0.005697f, +0.004779f, +0.002075f, -0.002754f, -0.003636f, -0.000180f, +0.002136f, +0.010256f, - +0.005555f, -0.000734f, +0.001710f, -0.002561f, -0.003573f, -0.003050f - }, - { - +0.002190f, -0.089866f, +0.114820f, +0.027895f, -0.010424f, -0.065978f, +0.002761f, +0.007385f, +0.016021f, -0.038197f, - -0.017028f, +0.035990f, +0.008253f, -0.019622f, +0.012206f, +0.027197f, -0.003262f, -0.011867f, +0.038914f, -0.009334f, - +0.028961f, +0.002318f, -0.024548f, -0.028802f, -0.052649f, -0.025898f, +0.008610f, +0.000557f, +0.022862f, +0.020252f, - +0.010404f, +0.017997f, -0.002086f, -0.015251f, +0.017789f, +0.000507f, -0.003808f, +0.006473f, +0.022842f, +0.001650f, - -0.012254f, -0.030566f, -0.024494f, -0.009148f, +0.018401f, +0.007228f, +0.034694f, -0.000505f, +0.004019f, -0.033861f, - -0.026367f, +0.003587f, -0.000949f, +0.012101f, +0.013697f, +0.017073f, +0.003288f, -0.013361f, -0.002429f, -0.008061f, - -0.005454f, +0.014690f, +0.018759f, +0.006268f, +0.000432f, -0.009994f, -0.009049f, -0.005162f, -0.008237f, -0.009102f, - -0.005555f, -0.007982f, -0.004440f, -0.000137f, +0.014733f, +0.011790f, +0.009120f, +0.004697f, +0.008027f, +0.008908f, - +0.000566f, -0.007040f, -0.004159f, -0.003113f, -0.001064f, -0.005748f, -0.008081f, -0.005662f, -0.010267f, +0.000977f, - +0.003994f, +0.000701f, +0.005608f, +0.003190f, +0.002403f, -0.002453f - }, - { - +0.002988f, -0.049390f, +0.099889f, -0.013724f, -0.018414f, -0.089835f, +0.068462f, -0.001002f, -0.005412f, -0.021757f, - -0.003411f, +0.049304f, -0.006413f, -0.021428f, +0.034330f, -0.025512f, +0.010371f, -0.006968f, +0.029931f, -0.025688f, - +0.014086f, -0.017538f, -0.020421f, -0.014991f, -0.037334f, +0.034980f, +0.009581f, +0.025207f, -0.002760f, +0.042903f, - -0.045553f, +0.016406f, -0.010670f, +0.008019f, +0.018439f, -0.007156f, -0.004478f, -0.000203f, -0.007345f, -0.012330f, - -0.015364f, -0.014996f, -0.004558f, +0.009168f, +0.019567f, +0.019055f, +0.023773f, -0.006824f, -0.018919f, +0.003844f, - -0.034060f, -0.016853f, +0.020352f, +0.017607f, +0.006138f, +0.012604f, -0.001888f, +0.000635f, -0.014635f, -0.002884f, - -0.003097f, +0.002616f, +0.004431f, +0.005792f, -0.012535f, -0.009041f, -0.003033f, +0.002739f, +0.000431f, +0.006339f, - +0.001078f, +0.001648f, -0.004795f, +0.001085f, +0.008090f, +0.004383f, +0.003342f, +0.001445f, +0.002241f, +0.000329f, - -0.002384f, -0.006953f, -0.009799f, -0.005643f, +0.003041f, -0.002914f, +0.001954f, +0.000433f, -0.002751f, +0.005194f, - +0.005162f, +0.001823f, +0.004406f, +0.001330f, -0.002383f, -0.002361f - }, - { - +0.000436f, -0.087446f, +0.121313f, +0.024718f, -0.025816f, -0.044646f, -0.009521f, +0.037450f, -0.023468f, -0.010725f, - -0.083993f, +0.067398f, +0.019467f, +0.014747f, +0.067784f, +0.008986f, -0.047529f, -0.029258f, +0.012877f, -0.042138f, - +0.014017f, -0.001170f, +0.001656f, +0.027947f, -0.037599f, +0.027201f, +0.013888f, -0.011305f, -0.025074f, -0.013492f, - +0.025294f, +0.009986f, +0.015165f, +0.008862f, -0.025397f, -0.031433f, +0.004222f, -0.000681f, +0.005335f, -0.009622f, - +0.010093f, +0.026943f, +0.002413f, -0.001957f, +0.019931f, +0.008270f, +0.000297f, +0.000053f, +0.002812f, +0.001075f, - -0.031715f, -0.023720f, -0.004165f, -0.011659f, -0.012853f, -0.013113f, +0.007493f, +0.010608f, +0.007707f, +0.035684f, - +0.013493f, +0.002546f, -0.014085f, -0.002349f, +0.005312f, -0.004030f, -0.012415f, +0.014143f, +0.015080f, -0.000651f, - -0.005964f, +0.001450f, +0.003833f, -0.007555f, -0.018156f, -0.006858f, -0.012725f, -0.007952f, -0.002141f, +0.005255f, - +0.002882f, +0.002468f, +0.004662f, +0.011014f, +0.006481f, +0.010711f, +0.012227f, +0.006496f, -0.001234f, -0.002674f, - -0.002832f, -0.009746f, -0.012441f, -0.008285f, -0.008948f, -0.004024f - }, - { - -0.007397f, -0.017761f, +0.081072f, -0.018595f, -0.031152f, -0.055820f, +0.056058f, +0.002859f, -0.018669f, -0.022159f, - -0.054689f, +0.075668f, -0.006481f, +0.061680f, +0.024949f, -0.019871f, -0.039919f, +0.003876f, -0.014460f, -0.027331f, - +0.016988f, -0.002039f, +0.016271f, -0.009324f, -0.018518f, +0.017239f, +0.023176f, +0.003393f, -0.027990f, -0.004303f, - +0.010276f, +0.014052f, +0.010346f, +0.005351f, -0.019770f, -0.036977f, -0.023701f, +0.013798f, +0.006538f, -0.014372f, - +0.032580f, +0.026711f, +0.029195f, -0.028315f, +0.017284f, +0.020758f, -0.010578f, -0.008527f, +0.003346f, -0.004393f, - -0.018071f, -0.029349f, -0.018974f, -0.007902f, -0.013854f, -0.003130f, +0.022807f, +0.006027f, +0.017396f, +0.017145f, - +0.003645f, +0.002277f, -0.004889f, +0.000591f, +0.003927f, -0.004036f, +0.002614f, +0.019514f, +0.000021f, -0.007769f, - -0.000153f, -0.004977f, -0.001780f, -0.007824f, -0.010163f, -0.006285f, -0.014498f, -0.008555f, -0.001908f, +0.004746f, - +0.005369f, +0.008628f, +0.009793f, +0.010248f, +0.006463f, +0.007293f, +0.005515f, -0.000864f, +0.000535f, +0.000123f, - -0.003258f, -0.004441f, -0.010192f, -0.010172f, -0.008089f, -0.004420f - }, - { - +0.002811f, -0.081316f, +0.115097f, +0.012186f, -0.006536f, -0.060388f, +0.008720f, +0.014165f, -0.013447f, -0.019596f, - -0.029051f, +0.020671f, +0.021437f, +0.045447f, -0.018790f, -0.003224f, +0.002091f, -0.007357f, -0.013631f, +0.020397f, - +0.010830f, +0.018342f, -0.022804f, -0.016874f, -0.009384f, +0.008478f, -0.019255f, -0.019837f, +0.006406f, +0.009260f, - -0.010485f, +0.020562f, +0.001700f, +0.002207f, -0.008287f, +0.043127f, -0.017300f, +0.029738f, -0.006732f, +0.014781f, - -0.022478f, -0.034911f, -0.017080f, +0.006116f, +0.000370f, +0.003263f, +0.029480f, +0.017696f, +0.003311f, -0.008238f, - -0.033850f, -0.004877f, -0.010342f, -0.011509f, +0.010972f, +0.010975f, +0.006128f, +0.002400f, +0.003616f, +0.010971f, - -0.001684f, -0.002428f, +0.011354f, +0.008068f, -0.003688f, -0.007101f, -0.008356f, -0.002072f, -0.011090f, -0.000310f, - +0.000124f, +0.001507f, -0.005044f, +0.001721f, +0.000906f, -0.001759f, -0.002204f, +0.000015f, +0.009049f, +0.005862f, - +0.005194f, +0.003749f, +0.000126f, +0.002832f, -0.004904f, +0.000994f, -0.004946f, -0.007446f, -0.006764f, +0.002219f, - -0.000288f, +0.000713f, -0.001430f, +0.002343f, -0.001700f, +0.002610f - }, - { - -0.006217f, -0.013388f, +0.067848f, -0.012897f, -0.021346f, -0.056777f, +0.053953f, -0.015433f, -0.021452f, +0.011208f, - -0.032609f, +0.013694f, +0.060868f, -0.009873f, -0.012618f, +0.031967f, -0.018713f, -0.024377f, +0.010406f, +0.004159f, - +0.000413f, +0.002984f, +0.002455f, -0.020324f, -0.022209f, +0.010644f, +0.006718f, +0.003857f, +0.000984f, -0.000327f, - -0.014605f, +0.006520f, +0.005370f, -0.004400f, -0.016379f, +0.020798f, +0.009098f, +0.004721f, +0.017005f, +0.015857f, - -0.009999f, -0.025020f, -0.013240f, +0.011309f, -0.018543f, +0.008244f, +0.008220f, +0.018936f, -0.007838f, -0.008121f, - -0.023962f, -0.005177f, +0.000315f, -0.002577f, +0.010816f, +0.011817f, +0.012248f, -0.002520f, +0.003026f, -0.011318f, - +0.000127f, +0.000269f, +0.002225f, +0.006403f, +0.004370f, -0.005433f, +0.003213f, +0.000365f, -0.009226f, -0.003653f, - -0.001362f, -0.000316f, -0.002569f, -0.000611f, +0.000898f, +0.001198f, -0.005630f, -0.002840f, +0.008469f, +0.006670f, - +0.000974f, +0.003762f, +0.000868f, +0.003725f, -0.002653f, -0.000927f, -0.002855f, -0.007487f, -0.002664f, -0.003302f, - +0.002723f, -0.002561f, +0.001210f, -0.001676f, +0.002342f, -0.000985f - } - }, - { - { - +0.005007f, -0.014294f, +0.110044f, +0.046944f, +0.016024f, +0.011647f, -0.012991f, +0.004501f, -0.001118f, +0.013586f, - +0.001506f, -0.019113f, +0.004169f, -0.012622f, +0.001476f, -0.014243f, -0.027496f, +0.018652f, +0.005031f, -0.008627f, - +0.006046f, +0.023982f, -0.002206f, -0.001958f, -0.036236f, -0.011195f, -0.022668f, +0.002652f, -0.015114f, +0.022833f, - +0.002723f, +0.005492f, -0.000626f, -0.003848f, -0.003069f, -0.009132f, +0.007504f, -0.000048f, -0.002998f, -0.004407f, - -0.012143f, -0.002503f, -0.008794f, +0.004562f, +0.004359f, -0.005565f, -0.005226f, -0.002670f, +0.007515f, -0.015540f, - +0.001064f, +0.002934f, -0.002818f, +0.000334f, -0.004728f, +0.005334f, +0.011133f, +0.000154f, -0.007129f, +0.000572f, - +0.008698f, +0.008950f, +0.003266f, -0.006376f, +0.002223f, -0.000157f, +0.000412f, -0.004737f, +0.006144f, +0.001505f, - +0.010013f, +0.005736f, +0.003437f, +0.002416f, +0.003534f, -0.001922f, -0.001646f, -0.000660f, +0.003488f, +0.001155f, - +0.005753f, -0.000099f, +0.002361f, +0.003075f, -0.002459f, -0.002764f, -0.001349f, -0.003467f, -0.004264f, -0.000113f, - -0.000494f, +0.001684f, +0.001383f, +0.001405f, +0.002248f, -0.000626f - }, - { - -0.010661f, -0.226958f, -0.039330f, +0.035432f, +0.067703f, -0.015417f, -0.021811f, -0.018302f, +0.014286f, +0.003720f, - +0.004485f, -0.000912f, +0.001274f, +0.002703f, +0.009506f, +0.039611f, -0.016936f, +0.013783f, -0.014929f, -0.012532f, - +0.004827f, -0.005742f, -0.005807f, -0.005952f, +0.008659f, +0.008796f, -0.006785f, +0.005139f, +0.010704f, +0.007342f, - +0.008798f, +0.007140f, -0.017032f, -0.003626f, +0.002174f, +0.007575f, +0.005938f, +0.005782f, +0.003120f, -0.001939f, - +0.003455f, +0.005330f, -0.004046f, -0.001499f, -0.004748f, -0.014842f, +0.000313f, +0.001749f, -0.001231f, +0.000927f, - -0.005349f, +0.003864f, +0.003092f, -0.005229f, -0.010377f, +0.004807f, +0.007327f, +0.005785f, -0.000682f, +0.001040f, - -0.005437f, +0.002077f, -0.006266f, -0.003555f, -0.000373f, -0.001372f, +0.000835f, -0.004330f, +0.003563f, +0.005433f, - -0.002271f, -0.003291f, -0.000257f, -0.001695f, +0.006182f, +0.002387f, +0.002883f, +0.002432f, -0.001584f, -0.008367f, - -0.002654f, +0.000220f, -0.001419f, -0.004196f, -0.000307f, -0.000867f, -0.001441f, +0.002475f, +0.002687f, -0.003347f, - -0.001142f, -0.001629f, -0.003005f, +0.001652f, +0.001143f, +0.002180f - }, - { - -0.003904f, -0.128268f, +0.056819f, +0.034048f, +0.065833f, +0.002597f, -0.022355f, +0.008635f, +0.020437f, +0.002492f, - +0.021072f, +0.001764f, +0.008189f, +0.000732f, +0.003402f, -0.015248f, -0.011867f, +0.002602f, +0.002638f, +0.006662f, - -0.009046f, -0.013159f, -0.011748f, +0.005864f, -0.003891f, +0.004868f, -0.028377f, -0.000605f, -0.007996f, -0.001501f, - -0.009691f, +0.011535f, +0.014757f, -0.002534f, -0.011747f, -0.008804f, +0.000437f, +0.000233f, +0.005697f, +0.005970f, - +0.006531f, -0.005792f, +0.000343f, +0.003957f, +0.005200f, +0.001785f, -0.002213f, -0.006338f, +0.009348f, +0.009263f, - -0.008968f, -0.003540f, +0.003624f, -0.008391f, +0.005260f, -0.004026f, -0.004321f, +0.008644f, +0.007187f, -0.003612f, - -0.002761f, +0.005067f, +0.002512f, +0.002308f, -0.005194f, -0.007001f, +0.003274f, -0.002906f, +0.005009f, -0.001143f, - -0.000405f, +0.003959f, -0.001293f, -0.000256f, +0.001103f, -0.001553f, +0.001819f, +0.000327f, +0.000827f, +0.002558f, - +0.001188f, +0.003886f, +0.000595f, +0.001412f, -0.003010f, -0.002038f, -0.003537f, -0.001970f, +0.002584f, -0.001905f, - -0.003888f, +0.002327f, +0.001235f, +0.001167f, -0.002725f, -0.003726f - }, - { - -0.000209f, -0.041404f, +0.068870f, +0.025763f, -0.013397f, -0.007942f, -0.012463f, +0.002279f, -0.012562f, -0.010816f, - +0.029104f, -0.002976f, +0.022616f, +0.007623f, -0.000736f, -0.034268f, -0.008299f, +0.030749f, -0.009134f, -0.019952f, - -0.004047f, -0.000809f, +0.022390f, +0.024536f, +0.005618f, -0.007251f, +0.008686f, +0.006303f, -0.007300f, -0.001053f, - -0.013642f, +0.016911f, +0.013417f, -0.010302f, +0.003241f, +0.010663f, +0.009922f, -0.000916f, -0.004534f, -0.006419f, - +0.008890f, +0.004414f, +0.005808f, +0.006580f, -0.017709f, -0.001445f, -0.001240f, +0.000500f, -0.002952f, -0.001085f, - +0.005523f, -0.010164f, -0.005468f, +0.004523f, +0.001402f, +0.005184f, +0.003731f, +0.000309f, -0.003477f, +0.003850f, - +0.006503f, +0.000348f, -0.004498f, -0.003955f, +0.001585f, +0.004769f, +0.003904f, +0.004910f, -0.002841f, -0.004237f, - +0.001414f, +0.000417f, +0.004320f, +0.005825f, -0.000843f, +0.001519f, -0.001605f, +0.003551f, +0.000841f, -0.000564f, - -0.000543f, +0.002252f, +0.000972f, +0.000243f, +0.001187f, +0.000414f, -0.001845f, +0.000391f, +0.004481f, +0.003052f, - +0.000141f, +0.000190f, +0.000689f, +0.005663f, +0.001417f, +0.000398f - }, - { - -0.002470f, -0.200808f, -0.052043f, -0.026054f, +0.073740f, +0.005175f, -0.006591f, -0.013563f, -0.014882f, -0.046509f, - +0.018616f, +0.002358f, +0.011460f, +0.008625f, -0.028832f, -0.009725f, -0.003909f, +0.042151f, +0.000886f, +0.016132f, - +0.006147f, -0.024842f, -0.038607f, +0.012764f, +0.005050f, -0.004909f, +0.005461f, -0.003956f, +0.005273f, +0.004115f, - -0.000252f, -0.000404f, -0.011114f, -0.006626f, -0.000087f, +0.005195f, +0.003721f, +0.008124f, -0.006342f, +0.000910f, - -0.005946f, -0.025783f, -0.019599f, +0.006167f, -0.004593f, +0.001395f, +0.012518f, +0.001395f, +0.009149f, -0.001322f, - +0.001151f, +0.016127f, +0.000653f, +0.011809f, +0.002667f, -0.008220f, -0.001678f, -0.014690f, -0.006773f, +0.001079f, - -0.004275f, +0.012939f, +0.009093f, -0.005287f, -0.007142f, -0.007014f, +0.003915f, -0.001932f, +0.004178f, -0.000859f, - +0.001416f, -0.006412f, -0.001941f, -0.001561f, +0.003059f, +0.004170f, +0.002890f, +0.002406f, +0.000614f, +0.001319f, - +0.005833f, +0.004831f, +0.000411f, +0.001949f, +0.002459f, -0.000877f, -0.004706f, -0.001664f, -0.002799f, -0.001859f, - -0.002201f, -0.000721f, -0.002234f, -0.000948f, -0.000872f, +0.002230f - }, - { - +0.005291f, +0.036362f, +0.134909f, +0.015235f, -0.035841f, -0.012534f, -0.005976f, -0.007681f, -0.006245f, +0.005963f, - -0.006982f, -0.012398f, -0.001794f, +0.016940f, -0.024493f, +0.020806f, -0.030480f, +0.003487f, -0.000300f, -0.020098f, - -0.030926f, -0.008255f, -0.007071f, +0.051267f, -0.033575f, -0.001858f, -0.008951f, +0.013960f, -0.006971f, -0.011475f, - -0.009663f, +0.018299f, -0.034787f, -0.011297f, +0.000718f, -0.008728f, -0.002894f, +0.010547f, -0.003397f, +0.007557f, - -0.012046f, +0.016150f, +0.001782f, -0.000415f, +0.008347f, +0.003378f, +0.006068f, +0.003349f, +0.004444f, +0.001470f, - -0.001064f, -0.008062f, +0.002677f, -0.000148f, +0.005141f, +0.007008f, -0.009314f, -0.017358f, -0.009249f, -0.001643f, - -0.004686f, +0.004903f, +0.007339f, +0.002735f, +0.006958f, +0.005934f, -0.005100f, -0.001072f, -0.000426f, +0.005784f, - +0.008665f, +0.010232f, +0.000867f, +0.001555f, -0.006387f, -0.000498f, -0.002121f, +0.001487f, +0.003393f, +0.004248f, - -0.000900f, +0.001918f, +0.001674f, -0.002298f, +0.001004f, +0.002684f, +0.000046f, -0.000040f, -0.002003f, -0.000482f, - +0.000215f, +0.000331f, -0.002483f, -0.000002f, -0.000862f, -0.000102f - }, - { - -0.000205f, -0.216736f, -0.060989f, -0.055679f, +0.066096f, -0.002241f, +0.002120f, -0.006289f, -0.009098f, +0.005325f, - +0.003581f, +0.007125f, +0.027759f, -0.011484f, +0.013721f, -0.002023f, -0.024038f, +0.000313f, +0.022400f, -0.005591f, - -0.035882f, -0.010480f, -0.010769f, -0.003223f, +0.007461f, +0.003163f, -0.019537f, -0.015672f, -0.000424f, +0.008663f, - -0.009091f, +0.013080f, +0.003291f, -0.000510f, +0.009449f, +0.015250f, +0.006535f, -0.008571f, +0.006763f, +0.004541f, - +0.004687f, +0.008192f, +0.006012f, +0.011072f, -0.000243f, -0.016993f, -0.009175f, -0.007330f, +0.009089f, +0.009341f, - +0.005900f, -0.000763f, +0.009190f, +0.015907f, +0.005501f, +0.001076f, +0.003801f, -0.000813f, +0.014487f, +0.001000f, - +0.001084f, +0.008136f, +0.009245f, -0.003571f, -0.004952f, -0.000023f, +0.002378f, -0.001222f, +0.004938f, -0.001877f, - -0.002272f, -0.004908f, -0.007209f, +0.002922f, -0.000128f, +0.000477f, -0.006614f, -0.007567f, +0.001210f, +0.004149f, - +0.003224f, +0.004100f, +0.000580f, +0.002788f, -0.003096f, +0.000632f, +0.001686f, -0.002388f, -0.000251f, +0.001336f, - -0.002523f, -0.000293f, -0.000650f, -0.005813f, -0.001353f, -0.000845f - }, - { - +0.004518f, +0.053320f, +0.139534f, +0.013218f, -0.024425f, +0.001118f, -0.017612f, -0.004302f, +0.005083f, -0.007617f, - -0.003757f, -0.006212f, +0.013686f, -0.006668f, -0.060514f, +0.015181f, -0.063122f, -0.007723f, +0.013457f, +0.006952f, - +0.005747f, -0.004835f, -0.003278f, -0.027973f, +0.026987f, +0.032197f, +0.010904f, -0.037137f, +0.026876f, -0.010649f, - -0.004308f, -0.002753f, -0.007590f, -0.011380f, -0.013091f, +0.009996f, +0.016517f, +0.013378f, -0.003576f, -0.002589f, - -0.012916f, +0.008519f, +0.007743f, -0.006295f, -0.002805f, +0.005942f, -0.001164f, +0.009745f, -0.001594f, -0.000431f, - +0.007123f, +0.002211f, +0.006629f, +0.003915f, -0.004313f, -0.000008f, +0.003502f, -0.004120f, -0.004688f, +0.002732f, - -0.000397f, -0.005006f, -0.000807f, +0.003047f, +0.000267f, +0.002274f, +0.009808f, +0.003485f, -0.003523f, +0.004623f, - +0.007946f, +0.001166f, -0.003575f, +0.001767f, +0.003929f, +0.004325f, -0.008125f, -0.004840f, +0.002335f, +0.000949f, - -0.003823f, +0.003558f, +0.002308f, +0.003191f, -0.001322f, -0.001573f, -0.003911f, -0.001133f, +0.001194f, +0.002051f, - -0.001809f, +0.002388f, -0.001574f, -0.001753f, -0.000845f, +0.000028f - }, - { - +0.000543f, -0.218307f, -0.060798f, -0.058511f, +0.069107f, +0.007875f, +0.010140f, -0.003973f, +0.001950f, +0.004438f, - -0.007110f, +0.015100f, +0.010271f, +0.005448f, +0.002118f, -0.012893f, -0.007232f, +0.014349f, -0.027664f, -0.018765f, - -0.001899f, +0.000068f, -0.031174f, -0.003459f, +0.038839f, -0.030574f, +0.006824f, -0.019476f, +0.017237f, +0.015143f, - +0.021198f, -0.016688f, -0.011588f, +0.020020f, -0.008133f, -0.005370f, +0.003976f, +0.001759f, -0.017243f, -0.029694f, - +0.002643f, +0.003702f, -0.005336f, +0.011599f, -0.017131f, -0.010995f, +0.010740f, +0.009435f, -0.005221f, +0.000902f, - +0.006518f, +0.002976f, -0.005748f, +0.001855f, -0.006164f, +0.003995f, -0.001292f, -0.011153f, -0.002173f, -0.007840f, - -0.004994f, +0.002552f, -0.004294f, +0.000655f, +0.000109f, +0.009654f, +0.005807f, -0.002333f, +0.006211f, +0.000121f, - +0.000322f, -0.001822f, +0.002338f, +0.000184f, -0.004978f, +0.001839f, -0.005122f, -0.000536f, -0.002930f, -0.002889f, - -0.000334f, -0.004966f, -0.005132f, -0.000463f, -0.001304f, -0.003489f, -0.000187f, +0.001860f, +0.001062f, +0.004239f, - -0.000475f, -0.001931f, +0.001649f, +0.000246f, +0.000074f, -0.001287f - }, - { - -0.003496f, -0.100254f, +0.076413f, +0.021559f, +0.018939f, -0.010702f, +0.011306f, -0.035194f, +0.023452f, +0.000821f, - +0.005782f, +0.007645f, -0.021944f, +0.011563f, +0.020050f, +0.029650f, +0.003684f, -0.018125f, +0.037487f, -0.000878f, - +0.021840f, +0.011479f, +0.009900f, +0.003551f, -0.015214f, -0.011317f, +0.002025f, -0.013691f, -0.012247f, -0.013637f, - -0.004323f, +0.001735f, -0.014556f, -0.012946f, -0.012230f, -0.005137f, +0.013853f, +0.007174f, -0.000486f, +0.007288f, - +0.010851f, -0.008543f, +0.007397f, +0.002516f, -0.000600f, -0.007759f, +0.001974f, -0.022003f, -0.001207f, -0.024081f, - -0.008179f, -0.000810f, -0.016569f, +0.003198f, +0.002133f, -0.001617f, -0.000664f, -0.013850f, +0.011021f, +0.000731f, - -0.004492f, +0.004824f, +0.000245f, -0.012319f, -0.012668f, -0.006020f, +0.002465f, +0.004977f, +0.003098f, -0.005929f, - -0.005702f, -0.005405f, -0.000127f, +0.002561f, +0.005694f, -0.001072f, -0.003529f, -0.004228f, -0.000108f, +0.001610f, - -0.002324f, -0.004162f, +0.000642f, +0.001685f, +0.002330f, -0.004091f, -0.009063f, -0.000745f, -0.000564f, +0.001159f, - +0.001595f, +0.001048f, +0.004874f, +0.001415f, +0.004110f, +0.000016f - }, - { - -0.006231f, -0.182247f, -0.012818f, +0.003576f, +0.040676f, -0.010896f, +0.101655f, -0.039086f, -0.012151f, +0.024888f, - +0.001402f, +0.020457f, -0.002489f, -0.010928f, +0.012472f, -0.016442f, +0.022504f, +0.028952f, +0.052608f, -0.024482f, - +0.018937f, +0.009209f, +0.001736f, -0.000027f, -0.018199f, +0.029534f, +0.006447f, +0.018728f, -0.007163f, +0.028220f, - -0.038256f, +0.010958f, -0.010604f, -0.006869f, -0.008567f, -0.007348f, +0.004586f, +0.008407f, -0.001921f, +0.000325f, - +0.003712f, -0.003459f, -0.001832f, -0.003304f, -0.005534f, +0.002395f, +0.006194f, -0.003350f, -0.000199f, -0.000404f, - -0.018013f, +0.003240f, +0.017431f, +0.001415f, -0.008400f, +0.006601f, -0.011650f, +0.004564f, -0.003741f, -0.005341f, - -0.000628f, +0.005494f, -0.001024f, +0.000782f, -0.001400f, +0.001221f, -0.007814f, -0.000413f, -0.002780f, -0.000708f, - -0.000531f, -0.000531f, -0.003977f, +0.002002f, +0.001580f, +0.002040f, -0.000212f, -0.001123f, +0.003849f, +0.000469f, - -0.000190f, +0.001610f, -0.003181f, -0.004036f, +0.003501f, +0.002871f, +0.005762f, +0.000657f, +0.000206f, +0.003060f, - +0.001053f, -0.004352f, -0.000478f, +0.003381f, -0.000352f, -0.000031f - }, - { - -0.000362f, -0.068245f, +0.089695f, +0.024946f, +0.010615f, -0.017941f, -0.034164f, -0.000064f, -0.016740f, -0.001633f, - -0.048027f, +0.048680f, +0.021552f, +0.023497f, +0.026125f, -0.017404f, -0.043651f, -0.005085f, +0.025610f, -0.010883f, - +0.028646f, +0.014121f, +0.012349f, +0.021985f, -0.031772f, -0.001174f, -0.001662f, +0.020267f, -0.002664f, -0.011779f, - +0.004459f, -0.022264f, -0.024299f, -0.006322f, +0.003936f, -0.009179f, +0.020533f, +0.006976f, -0.001977f, -0.015332f, - +0.002621f, +0.007698f, +0.004394f, +0.021293f, +0.011751f, -0.005930f, -0.001466f, -0.000666f, -0.004622f, -0.004222f, - -0.007798f, -0.003364f, -0.000394f, +0.001091f, -0.004113f, +0.002413f, +0.004600f, -0.007155f, -0.002438f, +0.010957f, - -0.002541f, +0.006989f, -0.010952f, -0.010104f, -0.000472f, -0.002747f, -0.006812f, +0.011502f, +0.006063f, +0.000896f, - +0.001568f, +0.001658f, +0.002406f, +0.004522f, -0.004331f, +0.000317f, -0.002196f, -0.002212f, +0.001333f, +0.004558f, - -0.002731f, +0.000948f, +0.000902f, +0.003097f, +0.000747f, +0.003876f, -0.001854f, -0.003615f, -0.001833f, +0.000339f, - +0.003619f, +0.001064f, -0.001052f, +0.000365f, -0.003735f, -0.000577f - }, - { - +0.022343f, -0.099045f, -0.049851f, -0.018600f, +0.032970f, +0.021822f, +0.061055f, +0.017215f, -0.002596f, +0.006813f, - -0.032703f, +0.044740f, -0.022684f, +0.001730f, -0.031956f, -0.018524f, -0.037513f, +0.015247f, +0.001110f, -0.012632f, - +0.022744f, +0.006185f, +0.012943f, -0.007730f, -0.024273f, -0.008515f, -0.002807f, -0.000152f, -0.002274f, +0.012245f, - -0.002961f, -0.023826f, -0.028386f, -0.011189f, +0.000743f, +0.001242f, +0.005848f, +0.017758f, +0.007838f, +0.000890f, - +0.016448f, -0.016621f, +0.004975f, -0.030960f, +0.005729f, +0.008361f, -0.005675f, -0.001206f, +0.014908f, +0.008960f, - -0.005019f, -0.014145f, -0.009144f, +0.009268f, -0.011013f, -0.005867f, +0.009264f, -0.007374f, +0.001633f, +0.001613f, - +0.000387f, +0.004867f, +0.002076f, +0.001080f, +0.004055f, -0.002221f, -0.009179f, -0.002174f, -0.007474f, +0.003171f, - +0.007223f, +0.000065f, +0.005150f, -0.000988f, -0.000164f, +0.002647f, -0.005905f, -0.000489f, +0.001998f, +0.004519f, - +0.002558f, +0.002464f, +0.003673f, +0.001264f, +0.001825f, +0.004970f, -0.001851f, -0.004332f, -0.000108f, -0.001369f, - -0.003276f, -0.002295f, -0.000813f, +0.000286f, +0.001206f, +0.003272f - }, - { - -0.005159f, -0.119096f, +0.061277f, +0.000301f, +0.011310f, -0.015004f, +0.006400f, -0.004180f, +0.024668f, +0.004036f, - -0.014881f, -0.002665f, -0.029827f, +0.021548f, +0.010519f, +0.011075f, -0.016194f, +0.003394f, -0.005471f, +0.005513f, - -0.001723f, +0.015124f, -0.007375f, +0.034652f, +0.012416f, +0.011046f, +0.005128f, +0.002424f, +0.011783f, +0.007791f, - -0.032004f, -0.005830f, -0.004633f, +0.011243f, -0.017041f, +0.026767f, -0.003359f, +0.023656f, -0.017033f, +0.016072f, - +0.007833f, +0.000543f, +0.004174f, +0.013306f, -0.000904f, -0.009133f, +0.007965f, +0.011713f, +0.013523f, +0.012863f, - -0.004286f, +0.013996f, +0.002278f, -0.002060f, +0.005520f, +0.005162f, +0.003144f, -0.000198f, +0.004970f, +0.007084f, - -0.001951f, -0.005446f, +0.001401f, +0.002769f, +0.003734f, +0.005196f, -0.000489f, -0.000145f, -0.006263f, -0.002001f, - -0.001683f, +0.002371f, -0.002204f, -0.000914f, -0.004338f, +0.001754f, +0.000623f, -0.000781f, +0.000728f, -0.002223f, - +0.005149f, +0.007896f, +0.001794f, +0.002957f, -0.001805f, +0.002824f, -0.003335f, -0.005575f, -0.002398f, +0.005605f, - +0.000494f, +0.002323f, +0.000754f, +0.002977f, +0.001963f, +0.002265f - }, - { - +0.018198f, -0.098903f, -0.050793f, -0.017470f, +0.043549f, +0.036161f, +0.059008f, -0.026629f, -0.037816f, +0.008594f, - -0.012681f, +0.018755f, +0.059020f, +0.001392f, +0.039048f, +0.056117f, -0.004031f, +0.004033f, +0.027815f, -0.009181f, - -0.019447f, +0.008043f, +0.009637f, -0.015838f, -0.000575f, -0.005418f, -0.008017f, -0.000940f, -0.004097f, +0.002350f, - -0.001333f, +0.007605f, -0.005594f, -0.019142f, -0.040502f, -0.001572f, -0.004956f, -0.015025f, +0.000920f, +0.005021f, - -0.000803f, +0.005181f, +0.005854f, +0.008728f, -0.007111f, +0.001311f, -0.015729f, +0.001924f, -0.005073f, -0.004702f, - -0.010995f, +0.009837f, +0.002462f, -0.006041f, -0.001443f, +0.000593f, +0.006194f, -0.004996f, +0.004334f, -0.008495f, - -0.000862f, -0.004002f, -0.004677f, +0.003897f, +0.000672f, -0.009350f, +0.002019f, +0.005095f, -0.000911f, -0.002104f, - +0.001148f, +0.004871f, -0.003799f, +0.002916f, +0.005869f, +0.005777f, +0.000676f, -0.003657f, +0.001893f, -0.000287f, - +0.000620f, +0.001814f, -0.003215f, -0.001312f, -0.003136f, +0.002593f, +0.002385f, +0.000975f, +0.004680f, -0.001762f, - +0.000702f, -0.003604f, +0.002981f, -0.000583f, +0.001753f, +0.002383f - } - }, - { - { - -0.002001f, +0.120721f, -0.017484f, +0.037160f, +0.041208f, -0.000432f, +0.001172f, -0.001453f, +0.009845f, +0.009956f, - -0.002020f, -0.013495f, +0.003319f, -0.022076f, -0.013002f, -0.001811f, -0.017825f, -0.009323f, +0.007165f, -0.006179f, - +0.025770f, +0.038787f, -0.014970f, -0.028247f, -0.009328f, -0.028693f, -0.002082f, -0.007808f, +0.002355f, -0.020726f, - +0.012350f, -0.001254f, +0.008477f, +0.005408f, -0.019882f, -0.002726f, +0.012084f, -0.004859f, +0.001455f, -0.014467f, - -0.010366f, +0.008860f, -0.005199f, +0.005500f, -0.007693f, -0.003059f, +0.007687f, +0.002828f, -0.013846f, +0.000149f, - +0.000083f, -0.000142f, -0.001206f, -0.000175f, -0.010643f, +0.000990f, +0.015188f, -0.005189f, -0.003176f, +0.006658f, - -0.004387f, +0.012830f, +0.004401f, -0.006118f, +0.002544f, -0.000144f, +0.000933f, +0.001918f, +0.003932f, +0.005726f, - +0.012638f, -0.000440f, +0.002103f, +0.004775f, +0.001891f, -0.008382f, -0.003586f, +0.002658f, +0.002984f, +0.001407f, - +0.005817f, +0.000101f, +0.001256f, +0.005644f, -0.001257f, -0.003263f, +0.000710f, -0.002489f, +0.000468f, -0.002842f, - -0.002711f, +0.001355f, -0.000145f, +0.002748f, +0.002423f, -0.001222f - }, - { - +0.010487f, -0.178229f, -0.144691f, +0.133696f, -0.000580f, -0.015382f, -0.027442f, +0.011508f, +0.012344f, -0.002924f, - +0.001226f, -0.010461f, +0.002911f, +0.003295f, +0.021788f, +0.011234f, +0.002692f, -0.014366f, +0.020898f, -0.029634f, - -0.000027f, +0.012549f, -0.008618f, +0.005963f, +0.013566f, -0.001560f, +0.006757f, -0.007970f, +0.007189f, +0.019551f, - +0.004369f, +0.004047f, -0.008440f, -0.002232f, -0.005281f, -0.001876f, +0.010814f, +0.005482f, -0.008354f, +0.009697f, - +0.000905f, +0.012690f, -0.000586f, -0.006349f, +0.004330f, -0.016760f, -0.001895f, +0.002190f, -0.007776f, +0.010280f, - -0.008294f, -0.000385f, +0.007830f, -0.011119f, -0.001776f, -0.004424f, +0.005206f, +0.005919f, -0.004780f, +0.000733f, - -0.005452f, +0.001223f, -0.003586f, +0.002793f, -0.002777f, +0.000611f, +0.004515f, -0.002808f, +0.003352f, +0.007343f, - -0.001348f, -0.004503f, -0.003776f, -0.003031f, +0.001360f, +0.001103f, +0.002305f, +0.001007f, -0.000016f, -0.005808f, - -0.002242f, -0.002759f, +0.000341f, -0.000208f, +0.001112f, -0.001918f, -0.002359f, +0.001857f, +0.004115f, -0.003282f, - -0.002828f, -0.001419f, -0.001594f, -0.001781f, +0.001724f, +0.000197f - }, - { - +0.000627f, +0.019731f, -0.104321f, +0.098643f, +0.019155f, -0.017028f, +0.000836f, +0.003627f, +0.030840f, +0.013166f, - -0.004121f, +0.006567f, +0.007199f, +0.002982f, +0.001312f, -0.011187f, +0.002341f, -0.016375f, +0.002997f, +0.010705f, - -0.018628f, -0.014743f, -0.008769f, +0.009270f, +0.001263f, +0.003590f, -0.033209f, +0.009343f, -0.002003f, -0.017762f, - -0.007024f, +0.005510f, +0.010760f, +0.009457f, -0.011895f, -0.008398f, +0.003351f, -0.001854f, +0.009610f, -0.003622f, - -0.001269f, +0.002676f, +0.002196f, +0.003875f, -0.004231f, +0.010159f, -0.005061f, +0.000271f, +0.012256f, +0.007451f, - +0.001885f, -0.012609f, -0.001541f, -0.003392f, -0.002670f, +0.000644f, +0.003710f, +0.003121f, -0.002364f, -0.005988f, - +0.001955f, +0.004488f, +0.001164f, +0.004573f, -0.005297f, -0.002267f, +0.000569f, +0.007940f, +0.001882f, +0.000993f, - +0.002297f, -0.003423f, -0.000347f, -0.000487f, -0.006179f, -0.000621f, -0.000647f, +0.001828f, +0.002439f, +0.000507f, - +0.002680f, +0.005958f, +0.002659f, -0.003049f, -0.001486f, +0.000304f, -0.000946f, -0.002296f, +0.000730f, -0.000656f, - -0.004354f, +0.000288f, +0.000583f, +0.004838f, -0.001965f, -0.003566f - }, - { - -0.001496f, +0.041948f, -0.012596f, +0.005812f, +0.010844f, -0.008192f, -0.005334f, -0.002631f, +0.008123f, +0.019758f, - -0.021358f, +0.007833f, +0.007947f, +0.007533f, -0.012296f, +0.003213f, -0.008229f, -0.005162f, -0.015393f, +0.000693f, - -0.010153f, +0.010020f, +0.030265f, +0.030619f, -0.011072f, -0.007451f, +0.011489f, +0.003838f, -0.009792f, +0.002122f, - -0.006314f, +0.007639f, +0.015850f, -0.010332f, +0.006341f, +0.002712f, +0.007558f, +0.012171f, -0.005852f, -0.009324f, - +0.009384f, +0.005059f, +0.003571f, +0.008552f, -0.023715f, +0.001817f, -0.001502f, +0.004426f, -0.009282f, +0.009589f, - -0.009757f, -0.013823f, +0.005836f, +0.004712f, -0.002468f, +0.006976f, -0.001795f, +0.005241f, -0.005517f, +0.009472f, - +0.002518f, +0.002804f, -0.005844f, -0.000317f, +0.002653f, -0.004393f, +0.009677f, -0.000439f, +0.002681f, +0.002595f, - -0.002970f, -0.003706f, +0.008494f, +0.001502f, +0.000679f, -0.000093f, +0.002071f, -0.000414f, -0.001241f, +0.001765f, - -0.000853f, +0.002579f, +0.000834f, +0.000030f, +0.001526f, +0.001721f, -0.003080f, +0.005462f, +0.001607f, +0.002610f, - -0.000408f, +0.000084f, +0.002351f, +0.001594f, +0.003236f, -0.002029f - }, - { - -0.000718f, -0.328228f, +0.025788f, +0.051720f, +0.008529f, +0.006723f, -0.020825f, +0.007782f, -0.016818f, -0.051795f, - +0.024448f, -0.014481f, +0.013221f, -0.000693f, -0.023207f, -0.002031f, +0.023236f, -0.016525f, +0.026325f, +0.007068f, - +0.002069f, +0.004171f, -0.029544f, -0.004513f, -0.001693f, +0.007106f, +0.014221f, -0.007324f, -0.007558f, +0.009915f, - -0.005748f, -0.004716f, +0.000765f, -0.006482f, -0.002870f, +0.007070f, +0.005612f, +0.003577f, -0.003686f, -0.001809f, - -0.008040f, -0.023899f, -0.019835f, +0.001671f, -0.005675f, +0.007410f, +0.026950f, -0.002936f, -0.007495f, +0.005941f, - -0.005262f, +0.020437f, +0.011919f, +0.000236f, +0.002994f, -0.002576f, -0.009423f, -0.015807f, -0.001244f, +0.000094f, - -0.003521f, +0.014641f, +0.003955f, -0.006405f, -0.002722f, -0.000101f, -0.001272f, -0.003527f, +0.002318f, -0.000579f, - +0.000855f, -0.002324f, -0.003365f, -0.000136f, +0.002451f, -0.000060f, +0.002726f, +0.009399f, -0.002907f, +0.004263f, - +0.004123f, +0.003634f, +0.002761f, -0.000901f, +0.002111f, +0.000656f, -0.002805f, -0.001619f, -0.003375f, -0.003591f, - -0.001996f, +0.000937f, -0.002773f, -0.003177f, -0.000308f, +0.002568f - }, - { - +0.002070f, +0.100628f, +0.064105f, -0.031021f, +0.012420f, -0.013065f, -0.010660f, +0.002159f, +0.007606f, +0.003523f, - -0.021297f, -0.004136f, -0.000549f, -0.023784f, +0.003855f, +0.011385f, -0.013906f, +0.000220f, +0.004109f, -0.029039f, - -0.024612f, +0.000129f, -0.002072f, +0.038766f, -0.040258f, +0.009751f, -0.005558f, +0.014301f, -0.009294f, -0.016455f, - -0.001469f, +0.004818f, -0.032360f, -0.002663f, -0.006845f, +0.000646f, -0.004590f, +0.001370f, +0.000714f, +0.017449f, - -0.008757f, +0.006088f, +0.000918f, +0.006843f, +0.016160f, -0.002410f, -0.005208f, +0.009890f, +0.005865f, +0.002697f, - -0.002091f, -0.008539f, -0.003337f, +0.008671f, +0.004520f, +0.007489f, -0.012796f, -0.014973f, -0.012467f, +0.002406f, - -0.003083f, +0.001865f, +0.008850f, -0.000423f, +0.006972f, +0.005368f, +0.003318f, -0.005788f, -0.002458f, +0.001476f, - +0.017780f, -0.000096f, +0.000157f, -0.000777f, +0.001017f, +0.001364f, -0.000402f, +0.000018f, +0.007048f, +0.004117f, - -0.001744f, +0.000923f, +0.004038f, -0.002884f, -0.000867f, -0.000710f, +0.004353f, +0.000831f, -0.002567f, -0.000547f, - -0.002832f, +0.000865f, -0.005603f, -0.000132f, +0.003209f, -0.001250f - }, - { - -0.006030f, -0.354455f, +0.034633f, +0.053905f, -0.035748f, +0.003052f, +0.008633f, -0.015126f, +0.012319f, -0.015783f, - +0.027485f, +0.007676f, -0.003241f, +0.002129f, -0.003188f, -0.020282f, +0.019074f, -0.009220f, +0.003672f, +0.002043f, - -0.029195f, -0.000796f, -0.017109f, +0.003840f, +0.006458f, -0.014269f, -0.000878f, -0.016179f, +0.001611f, +0.009211f, - -0.011059f, -0.001100f, +0.007767f, +0.008783f, +0.009924f, +0.008889f, +0.003390f, -0.005602f, +0.013092f, +0.006391f, - +0.009508f, -0.006423f, +0.014900f, +0.006763f, -0.004206f, -0.007666f, -0.015323f, +0.000045f, +0.013358f, -0.003108f, - -0.000575f, +0.007994f, +0.012465f, +0.009658f, +0.014072f, +0.006326f, +0.005641f, +0.000030f, +0.008297f, +0.003391f, - +0.005074f, -0.002929f, +0.009131f, +0.003070f, -0.012730f, -0.000156f, +0.004885f, +0.000229f, -0.000074f, +0.000104f, - -0.001178f, -0.009595f, -0.003114f, -0.000466f, +0.001513f, -0.000689f, -0.002735f, -0.004802f, -0.000960f, +0.004161f, - +0.004482f, +0.002200f, +0.000374f, +0.000049f, -0.000926f, -0.000752f, +0.004168f, -0.001199f, -0.002621f, +0.002000f, - -0.002347f, +0.000008f, -0.003370f, -0.003647f, -0.003232f, +0.002336f - }, - { - +0.003883f, +0.075503f, +0.102668f, -0.024804f, +0.010187f, +0.002364f, -0.004230f, -0.001031f, +0.007249f, -0.004458f, - +0.002379f, -0.021386f, +0.007573f, -0.020854f, -0.042178f, +0.016113f, -0.060394f, -0.029485f, +0.008686f, +0.029222f, - -0.000989f, +0.003212f, +0.007772f, -0.025149f, +0.014341f, +0.009911f, +0.016470f, -0.012020f, +0.012990f, +0.005803f, - -0.010138f, -0.021619f, -0.016491f, -0.003796f, -0.006878f, +0.009087f, +0.012003f, +0.019808f, -0.001429f, -0.005120f, - -0.003366f, +0.006027f, -0.001620f, -0.007663f, +0.005430f, +0.002003f, -0.000633f, -0.000248f, +0.009745f, -0.003834f, - +0.010865f, +0.002088f, -0.001544f, +0.006474f, +0.001256f, -0.006201f, +0.005472f, +0.003296f, -0.000107f, -0.009508f, - +0.004045f, +0.000123f, -0.003683f, +0.004258f, -0.003539f, -0.001390f, +0.006114f, +0.007690f, +0.004337f, +0.000305f, - +0.009200f, -0.000433f, -0.004296f, -0.001577f, +0.005793f, +0.004536f, -0.003244f, -0.003023f, +0.004580f, -0.000914f, - -0.004151f, +0.001337f, +0.001626f, -0.000937f, -0.000216f, +0.000512f, -0.002262f, -0.000244f, -0.003710f, +0.002081f, - -0.000294f, +0.001288f, -0.002822f, +0.001544f, -0.001243f, -0.000079f - }, - { - -0.006694f, -0.330796f, +0.013699f, +0.058874f, -0.027305f, -0.007582f, +0.015867f, -0.002427f, +0.024374f, -0.000179f, - -0.002738f, -0.027425f, +0.016845f, -0.000864f, -0.003296f, -0.010576f, +0.018548f, -0.013735f, -0.001341f, -0.028975f, - -0.005074f, -0.009178f, -0.012698f, +0.000856f, +0.012341f, -0.012794f, -0.012101f, +0.011095f, +0.006041f, +0.009052f, - +0.004273f, +0.001228f, +0.004726f, +0.003465f, -0.004609f, -0.003609f, -0.000282f, +0.008679f, -0.016631f, -0.028092f, - -0.004017f, +0.005059f, +0.002559f, +0.001690f, -0.009259f, -0.013146f, +0.004321f, +0.005695f, -0.010054f, +0.006938f, - +0.008846f, +0.001322f, -0.009597f, -0.007826f, +0.008937f, +0.002050f, -0.000232f, -0.002095f, -0.000470f, -0.007860f, - -0.008469f, +0.001068f, -0.005854f, +0.000595f, +0.001491f, +0.003625f, +0.005062f, -0.002044f, +0.001583f, +0.003906f, - -0.006420f, +0.000498f, -0.001554f, +0.009743f, -0.005871f, -0.001795f, -0.002473f, +0.000551f, +0.000068f, -0.000694f, - -0.004210f, -0.006599f, -0.003451f, +0.000537f, -0.003323f, -0.004041f, +0.003578f, -0.000191f, +0.002670f, -0.000344f, - -0.002466f, +0.000466f, +0.000007f, +0.003868f, -0.001064f, -0.003068f - }, - { - +0.000724f, -0.012733f, -0.005371f, +0.016099f, -0.002752f, +0.001405f, +0.039656f, -0.027017f, -0.001002f, +0.004496f, - +0.017087f, -0.005671f, -0.015679f, +0.021841f, -0.006799f, +0.014456f, +0.026509f, +0.020594f, +0.012416f, -0.015318f, - +0.022745f, +0.006976f, +0.021392f, +0.001853f, -0.004453f, -0.005373f, -0.012723f, -0.012188f, +0.000406f, -0.019487f, - -0.004069f, -0.005314f, -0.030240f, +0.006585f, -0.029918f, +0.005687f, +0.019308f, -0.001470f, -0.018138f, +0.019946f, - +0.002900f, +0.002469f, -0.004875f, +0.020910f, -0.016073f, +0.005189f, -0.020676f, -0.009874f, -0.004851f, -0.024075f, - +0.010805f, -0.012584f, -0.021126f, +0.014256f, +0.005297f, -0.013279f, -0.005545f, -0.007269f, +0.009915f, -0.002309f, - +0.006390f, +0.001707f, -0.004424f, -0.018338f, -0.012416f, +0.005696f, +0.002930f, +0.000902f, +0.009589f, -0.010830f, - -0.006726f, -0.003509f, +0.001798f, +0.009913f, -0.005539f, -0.003027f, -0.002854f, -0.002316f, -0.001818f, -0.002117f, - -0.002337f, +0.000245f, -0.000180f, +0.002976f, -0.002648f, -0.001951f, -0.005648f, +0.001171f, +0.002911f, -0.001820f, - -0.000139f, +0.000677f, +0.005075f, +0.000682f, +0.002776f, +0.001389f - }, - { - +0.005400f, -0.242165f, +0.007941f, +0.000740f, +0.019441f, +0.060414f, +0.042447f, -0.045146f, +0.001948f, +0.039477f, - +0.010129f, -0.011417f, +0.015585f, +0.014261f, -0.025557f, +0.023507f, +0.020532f, +0.043036f, +0.026691f, -0.001535f, - +0.001756f, -0.007181f, +0.017293f, -0.010203f, -0.001269f, +0.031032f, +0.006576f, +0.006166f, +0.010930f, -0.025558f, - +0.006834f, +0.001062f, -0.012421f, -0.006733f, -0.025795f, +0.005341f, +0.003805f, +0.010083f, -0.002276f, +0.001088f, - +0.013527f, -0.002534f, +0.011057f, -0.010770f, -0.022386f, -0.004456f, -0.000534f, -0.000179f, +0.017287f, -0.019544f, - -0.002824f, +0.009240f, +0.008016f, +0.002214f, -0.009904f, +0.002506f, -0.007757f, -0.000422f, +0.001072f, -0.015958f, - +0.010298f, +0.006832f, +0.002299f, -0.008579f, +0.002671f, +0.006252f, -0.013771f, +0.003004f, -0.002719f, -0.007141f, - +0.007920f, -0.006198f, -0.003547f, +0.000008f, -0.003981f, +0.004868f, +0.000348f, +0.002105f, -0.000175f, +0.001610f, - +0.001492f, +0.001413f, -0.004173f, +0.000714f, +0.000850f, +0.002116f, +0.003723f, +0.001159f, +0.006724f, -0.001034f, - -0.001588f, -0.001044f, -0.002077f, +0.002252f, -0.001829f, +0.000771f - }, - { - -0.000509f, +0.045800f, -0.031774f, +0.027760f, +0.012184f, -0.020224f, -0.006932f, -0.019358f, -0.006374f, -0.012491f, - +0.017211f, -0.014845f, +0.020440f, +0.046689f, -0.025299f, -0.004945f, -0.034755f, +0.023141f, +0.003154f, +0.004430f, - +0.012097f, +0.021027f, +0.047245f, +0.005145f, -0.020612f, -0.017570f, -0.007817f, +0.027225f, +0.014868f, -0.012015f, - -0.006677f, -0.030541f, -0.032234f, -0.009682f, +0.016844f, -0.007297f, +0.014815f, +0.003268f, +0.004999f, -0.005922f, - -0.010698f, +0.005410f, +0.011518f, +0.021888f, +0.010241f, -0.010016f, -0.001339f, -0.002499f, -0.004252f, -0.006855f, - -0.007000f, +0.008175f, -0.009425f, +0.012632f, -0.007324f, +0.006276f, +0.005168f, -0.010500f, +0.005593f, -0.011120f, - +0.002728f, +0.010105f, -0.010025f, -0.010052f, -0.006147f, -0.003037f, +0.003941f, +0.004817f, +0.002995f, +0.004495f, - -0.000456f, +0.007436f, -0.003743f, +0.002820f, +0.002352f, -0.000643f, +0.003455f, -0.004054f, +0.001650f, +0.006395f, - -0.007729f, -0.000125f, +0.003945f, +0.001024f, +0.000539f, +0.003453f, -0.004603f, -0.003317f, -0.004355f, +0.002049f, - +0.002853f, +0.004188f, -0.000632f, +0.002290f, -0.003894f, -0.002407f - }, - { - -0.033563f, -0.103273f, +0.003317f, -0.007842f, +0.026696f, +0.069116f, -0.011531f, +0.016968f, -0.002760f, -0.005532f, - +0.001220f, +0.032210f, -0.018805f, -0.010324f, -0.029955f, -0.011573f, -0.030998f, +0.002812f, +0.000702f, +0.006928f, - +0.020077f, +0.013634f, -0.010101f, -0.010780f, -0.016397f, -0.001060f, -0.006758f, -0.008455f, -0.005375f, +0.000403f, - +0.012872f, -0.038466f, -0.023830f, -0.005714f, -0.009902f, +0.021297f, +0.012427f, +0.007193f, +0.002220f, +0.007251f, - +0.010177f, -0.017274f, -0.004940f, -0.012721f, +0.001136f, -0.011187f, +0.011144f, +0.000184f, +0.001159f, +0.015631f, - -0.005584f, +0.002510f, -0.008112f, +0.008415f, -0.013234f, +0.000577f, -0.003736f, +0.002508f, -0.006281f, -0.004790f, - -0.000960f, +0.005796f, +0.006946f, +0.002222f, +0.000235f, +0.004516f, -0.011177f, -0.008320f, -0.009276f, +0.007847f, - +0.000719f, +0.006904f, +0.002784f, -0.001538f, +0.005294f, -0.002235f, +0.003371f, +0.000215f, -0.000058f, +0.004325f, - -0.001662f, +0.001319f, +0.001844f, +0.000818f, +0.004716f, +0.006197f, -0.007025f, -0.001256f, +0.000223f, -0.003085f, - -0.001395f, -0.002573f, +0.000921f, +0.001562f, -0.000753f, +0.002642f - }, - { - +0.002981f, -0.059915f, -0.022595f, +0.008259f, -0.009065f, -0.007690f, +0.033681f, -0.012111f, +0.012040f, +0.028961f, - -0.009110f, -0.010416f, -0.014714f, -0.030265f, +0.059586f, +0.025945f, -0.047895f, -0.002299f, -0.000644f, +0.007123f, - -0.012166f, +0.019955f, +0.020219f, +0.027763f, +0.006601f, +0.014834f, -0.013594f, +0.021797f, +0.026997f, -0.002585f, - -0.037599f, -0.007640f, -0.004921f, -0.000808f, +0.006469f, -0.001180f, +0.022424f, +0.005579f, -0.011893f, +0.005284f, - +0.019178f, +0.012918f, +0.009522f, +0.009663f, +0.004879f, -0.016205f, -0.001235f, +0.009775f, +0.007469f, +0.017139f, - +0.015746f, +0.002275f, +0.001422f, +0.012047f, -0.007115f, +0.000350f, +0.006933f, -0.001083f, +0.005649f, +0.004873f, - -0.002432f, -0.002635f, +0.002603f, -0.003561f, +0.003507f, -0.000973f, +0.011754f, -0.005674f, +0.000172f, +0.001141f, - -0.004405f, -0.002402f, +0.001591f, +0.000624f, -0.010093f, +0.004258f, +0.000909f, +0.003334f, -0.002311f, -0.005210f, - +0.004385f, +0.010708f, -0.000045f, +0.000663f, +0.003107f, +0.000477f, -0.002891f, -0.004282f, -0.001507f, +0.005005f, - -0.001274f, +0.003774f, +0.003491f, +0.001221f, +0.000883f, +0.002190f - }, - { - -0.026590f, -0.135543f, +0.015018f, -0.006206f, +0.026766f, +0.082717f, +0.010623f, -0.016561f, -0.045477f, -0.002971f, - +0.008449f, +0.004921f, +0.054069f, +0.006294f, +0.074226f, +0.030447f, -0.019143f, +0.010145f, +0.048306f, +0.002468f, - -0.015725f, -0.012885f, +0.007939f, -0.020816f, +0.016731f, -0.000390f, +0.010066f, -0.028279f, -0.003746f, -0.001241f, - +0.013385f, +0.016161f, -0.021576f, -0.026187f, -0.025344f, -0.005126f, -0.004987f, -0.023913f, -0.005040f, -0.001497f, - +0.002919f, +0.007869f, +0.011361f, -0.009659f, +0.022167f, -0.008714f, -0.014278f, -0.010755f, +0.002764f, -0.005686f, - -0.000769f, +0.004496f, +0.004238f, -0.003090f, -0.008860f, -0.003695f, +0.002630f, +0.000191f, +0.006856f, -0.003561f, - -0.008464f, +0.005459f, -0.012492f, +0.002193f, -0.006086f, -0.004003f, +0.002077f, +0.002624f, +0.000950f, +0.002152f, - -0.001280f, +0.010882f, -0.006949f, -0.000754f, +0.009898f, +0.003739f, +0.004336f, -0.004327f, -0.000642f, -0.003755f, - +0.004962f, -0.000592f, -0.003536f, -0.003815f, +0.002550f, +0.003131f, +0.000876f, +0.002624f, +0.004896f, -0.002506f, - +0.001632f, -0.002810f, +0.000701f, +0.002506f, +0.000607f, +0.000532f - } - }, - { - { - -0.002845f, +0.098158f, -0.041338f, -0.041723f, -0.028323f, +0.002722f, +0.006905f, -0.001438f, +0.000389f, -0.004706f, - +0.015019f, -0.008325f, +0.001432f, +0.008125f, -0.010347f, +0.001686f, -0.003372f, -0.020329f, +0.013931f, +0.008604f, - +0.016358f, +0.012381f, +0.000103f, +0.009092f, +0.016872f, -0.031310f, -0.005623f, -0.007372f, +0.007692f, -0.034117f, - -0.002729f, -0.011454f, -0.012889f, +0.006996f, +0.001795f, +0.005700f, +0.005683f, -0.005123f, +0.009015f, -0.008558f, - -0.008753f, +0.016558f, +0.005574f, +0.001335f, -0.005629f, +0.002556f, +0.015110f, +0.003728f, -0.013783f, +0.015096f, - +0.007203f, -0.001633f, -0.001325f, -0.003058f, -0.014911f, -0.004764f, +0.008854f, -0.002574f, +0.003419f, +0.003374f, - -0.010978f, +0.001773f, -0.004326f, -0.007060f, -0.000987f, -0.007603f, -0.002168f, +0.002669f, +0.003833f, -0.000043f, - +0.001511f, -0.003453f, +0.001717f, +0.002844f, +0.001723f, -0.004843f, -0.001405f, +0.001607f, -0.000310f, -0.001728f, - -0.000342f, -0.003040f, -0.002327f, +0.001666f, +0.000007f, +0.000226f, +0.002766f, +0.001995f, +0.003851f, +0.000771f, - +0.001005f, +0.001836f, -0.001393f, +0.001638f, +0.002040f, +0.001262f - }, - { - -0.010301f, -0.032570f, +0.016091f, +0.128825f, +0.000887f, -0.010646f, -0.016930f, +0.007203f, -0.003082f, -0.001108f, - +0.000162f, -0.004156f, +0.003077f, -0.014225f, +0.011634f, +0.013387f, -0.010797f, -0.010142f, +0.041788f, -0.019305f, - +0.000675f, +0.016284f, +0.006208f, +0.009121f, +0.004641f, -0.000340f, +0.022082f, +0.010512f, -0.002668f, -0.003209f, - -0.004882f, +0.004138f, -0.003798f, +0.006824f, +0.001045f, -0.002798f, +0.006459f, +0.010023f, -0.004729f, +0.003007f, - +0.001371f, +0.010812f, +0.002110f, -0.001470f, +0.013507f, -0.011864f, +0.001447f, +0.003878f, -0.005151f, +0.006115f, - -0.007512f, -0.007483f, -0.002192f, -0.010223f, +0.006498f, -0.000871f, +0.000960f, +0.002164f, -0.006424f, -0.003352f, - -0.009012f, -0.002386f, -0.004993f, +0.009024f, +0.009625f, +0.005393f, +0.007319f, +0.003555f, +0.000088f, +0.002637f, - +0.000546f, -0.001146f, -0.003138f, -0.006144f, -0.001756f, -0.000699f, +0.000079f, -0.002223f, +0.001679f, +0.000669f, - +0.001063f, -0.001183f, +0.002040f, -0.002401f, -0.000222f, +0.001811f, -0.001233f, +0.000209f, +0.001409f, -0.002029f, - +0.000090f, +0.001004f, +0.001647f, -0.000852f, +0.000197f, -0.002680f - }, - { - +0.002425f, +0.154058f, -0.024490f, +0.010987f, -0.041565f, -0.003074f, +0.007382f, -0.011926f, +0.011496f, +0.004215f, - -0.003621f, +0.001655f, +0.000329f, -0.010271f, -0.000713f, +0.005798f, +0.008601f, -0.017084f, -0.009516f, +0.004921f, - -0.003066f, +0.005325f, -0.007143f, +0.000767f, +0.003740f, +0.016839f, -0.012201f, +0.016663f, -0.006937f, -0.023537f, - -0.007414f, -0.006511f, +0.000137f, +0.001733f, -0.002287f, -0.000170f, +0.006753f, +0.000646f, +0.009525f, -0.007725f, - -0.004797f, +0.007538f, +0.009121f, -0.001007f, -0.013531f, +0.007247f, +0.002069f, +0.003733f, +0.000127f, +0.002199f, - +0.013490f, -0.008177f, -0.003755f, -0.000981f, -0.001463f, -0.000286f, -0.000836f, +0.000314f, +0.005400f, +0.001073f, - -0.004028f, +0.000548f, +0.000944f, +0.007896f, -0.001203f, +0.003183f, -0.002751f, +0.002684f, -0.003506f, -0.004074f, - +0.000342f, -0.004582f, +0.001751f, +0.001872f, -0.007599f, -0.000512f, -0.001271f, -0.002382f, +0.003317f, +0.004342f, - +0.002752f, +0.004464f, +0.001023f, -0.004086f, +0.000480f, +0.002981f, +0.000838f, -0.001859f, +0.000222f, +0.000993f, - -0.001603f, +0.001192f, -0.000561f, +0.003198f, -0.001514f, -0.000997f - }, - { - +0.001296f, +0.092170f, +0.016154f, -0.011435f, +0.000781f, -0.000652f, +0.000689f, -0.000865f, +0.004682f, +0.022868f, - -0.018405f, -0.003766f, -0.003381f, -0.008913f, -0.029114f, +0.000712f, -0.021770f, -0.010602f, -0.007028f, -0.005227f, - -0.010169f, +0.002161f, +0.012783f, +0.023897f, -0.002588f, +0.004183f, +0.003778f, +0.006217f, +0.000536f, -0.005269f, - -0.006706f, +0.011837f, +0.014682f, -0.010232f, +0.001919f, -0.022942f, -0.013750f, +0.008087f, -0.002843f, -0.008974f, - +0.011236f, -0.004253f, -0.015384f, +0.005471f, -0.020989f, +0.008711f, -0.001472f, -0.003085f, -0.006681f, +0.004185f, - -0.011954f, -0.013748f, +0.004446f, +0.009873f, -0.007926f, +0.003327f, +0.003219f, +0.007862f, -0.005252f, +0.001094f, - -0.004462f, -0.001100f, -0.001877f, +0.003550f, +0.006338f, -0.005332f, +0.008211f, -0.000604f, -0.002188f, +0.001357f, - -0.001578f, -0.004004f, +0.004417f, -0.002113f, +0.001478f, +0.002877f, -0.002005f, -0.008202f, -0.004971f, -0.000119f, - -0.003962f, -0.001626f, -0.000903f, +0.000410f, -0.000190f, +0.001092f, -0.001173f, +0.005608f, -0.002050f, -0.000341f, - -0.000875f, -0.001824f, -0.003495f, -0.004015f, +0.000627f, -0.002562f - }, - { - +0.004139f, -0.347644f, +0.011394f, +0.070553f, +0.003351f, +0.003842f, -0.020487f, +0.015352f, +0.004318f, -0.031982f, - +0.038276f, -0.026409f, -0.000876f, +0.000401f, -0.002956f, -0.006718f, +0.004847f, -0.023024f, +0.019598f, -0.001091f, - -0.013983f, -0.005429f, -0.001950f, +0.013014f, -0.000396f, +0.000310f, +0.009650f, +0.009236f, +0.008724f, +0.016625f, - -0.004753f, +0.003434f, +0.003901f, +0.005167f, +0.002449f, +0.006135f, +0.003205f, +0.002632f, -0.002091f, +0.002621f, - +0.007896f, -0.002756f, -0.013580f, -0.000521f, +0.000540f, +0.007705f, +0.015179f, -0.015669f, -0.013984f, +0.005878f, - -0.014026f, +0.007473f, +0.008474f, -0.000679f, -0.001960f, +0.000222f, +0.000632f, -0.000803f, +0.008029f, +0.002799f, - -0.005779f, +0.003381f, -0.008461f, -0.006062f, +0.005767f, +0.005320f, -0.003456f, -0.002090f, +0.001188f, -0.001571f, - +0.002864f, +0.000672f, +0.002594f, +0.000764f, +0.002143f, -0.000410f, -0.003794f, +0.001730f, -0.004514f, +0.003696f, - -0.000200f, +0.001483f, +0.000541f, -0.005767f, +0.000108f, -0.001976f, -0.000755f, +0.000917f, -0.000988f, +0.000355f, - -0.000083f, +0.005383f, +0.000054f, -0.001324f, +0.000064f, +0.000704f - }, - { - -0.005280f, -0.032372f, -0.059784f, -0.026981f, +0.020391f, -0.003505f, -0.008708f, +0.005225f, +0.010227f, +0.005880f, - -0.006491f, +0.015366f, +0.012553f, +0.001603f, +0.025671f, +0.005129f, -0.019844f, +0.003434f, -0.002059f, +0.001886f, - +0.005926f, +0.003287f, +0.004909f, +0.031410f, -0.026358f, +0.040511f, -0.011371f, +0.005113f, +0.004091f, +0.008110f, - +0.024740f, +0.016164f, -0.015902f, +0.011017f, -0.004301f, +0.002294f, -0.000152f, -0.011939f, -0.006230f, +0.012445f, - -0.006440f, +0.001481f, -0.000690f, +0.008084f, +0.005357f, -0.006417f, -0.002703f, +0.004919f, -0.000358f, +0.006166f, - +0.005740f, +0.002262f, +0.007436f, +0.005217f, -0.002362f, +0.002576f, -0.007522f, -0.001861f, -0.006405f, +0.001942f, - +0.004079f, -0.000111f, +0.000980f, -0.001653f, +0.003551f, +0.000303f, +0.001576f, -0.003286f, +0.006043f, +0.000352f, - +0.006804f, -0.007444f, -0.006755f, -0.001273f, +0.001798f, +0.000673f, +0.002764f, -0.000404f, +0.004395f, +0.000530f, - -0.003911f, +0.001378f, +0.002188f, -0.001191f, -0.000257f, -0.003725f, +0.002594f, +0.000066f, -0.001597f, -0.000049f, - -0.001271f, -0.000008f, -0.006076f, -0.000513f, +0.002082f, -0.000278f - }, - { - +0.011620f, -0.356596f, +0.014883f, +0.101424f, -0.002852f, -0.006025f, +0.000423f, -0.020390f, +0.026376f, -0.009836f, - +0.004431f, -0.003565f, +0.004432f, +0.002860f, -0.008213f, -0.003896f, +0.030427f, -0.019476f, -0.011646f, +0.020437f, - +0.001626f, +0.002142f, -0.017707f, +0.020864f, +0.017404f, -0.006103f, +0.016040f, +0.000456f, +0.007351f, +0.007655f, - -0.006573f, -0.004316f, +0.003852f, +0.000767f, +0.006936f, -0.001516f, -0.002083f, -0.009872f, +0.002358f, -0.000430f, - +0.004299f, -0.005947f, +0.011344f, +0.003864f, -0.003805f, +0.002263f, -0.007377f, +0.000382f, +0.009300f, +0.000357f, - -0.002757f, -0.005486f, +0.010459f, +0.005125f, +0.005101f, -0.003761f, -0.007571f, -0.015132f, -0.000599f, -0.000585f, - +0.001863f, -0.010934f, -0.000628f, +0.007673f, -0.007173f, -0.003119f, +0.001250f, -0.001519f, -0.001077f, +0.000505f, - +0.001605f, -0.000605f, -0.001297f, -0.004274f, +0.003155f, +0.003516f, +0.001209f, +0.001416f, -0.001608f, -0.002604f, - -0.000517f, +0.000182f, -0.002647f, +0.002114f, +0.002833f, +0.000145f, +0.002726f, +0.000850f, -0.001403f, +0.000110f, - -0.000914f, +0.002246f, +0.001547f, +0.000136f, -0.002474f, +0.003876f - }, - { - -0.005094f, -0.082928f, -0.052459f, -0.016718f, +0.017689f, +0.008010f, -0.003157f, +0.000519f, +0.004238f, -0.000538f, - +0.013275f, -0.003611f, +0.003441f, -0.004262f, +0.007968f, +0.026710f, -0.052508f, -0.018163f, +0.025494f, +0.031053f, - +0.000804f, +0.010755f, +0.003764f, -0.027368f, +0.013581f, -0.022673f, +0.001212f, -0.006855f, +0.015914f, -0.001002f, - -0.017211f, +0.002927f, -0.011781f, -0.004787f, -0.002597f, -0.013778f, -0.009333f, +0.016143f, -0.009756f, -0.001841f, - +0.005061f, -0.000413f, -0.009483f, -0.011325f, +0.003281f, -0.002522f, -0.004421f, +0.005300f, +0.017296f, -0.008174f, - +0.009771f, -0.001344f, -0.012333f, +0.004608f, +0.006444f, -0.003360f, +0.007358f, +0.003450f, +0.000348f, -0.010769f, - +0.000747f, +0.002514f, -0.003300f, +0.000223f, +0.000248f, +0.002166f, -0.000191f, +0.000693f, -0.001686f, -0.005808f, - +0.000461f, +0.001963f, +0.004715f, -0.000844f, +0.004987f, +0.006561f, -0.000608f, -0.004284f, +0.003162f, +0.001199f, - -0.001274f, -0.000322f, +0.001666f, -0.001960f, +0.001384f, +0.002987f, -0.003462f, +0.000770f, -0.001828f, +0.001674f, - +0.000317f, +0.002032f, -0.002073f, +0.000024f, -0.002314f, +0.000207f - }, - { - +0.011661f, -0.325268f, -0.000830f, +0.102723f, +0.000410f, -0.022069f, -0.007512f, -0.016016f, +0.011325f, -0.014096f, - -0.011417f, -0.023346f, +0.018863f, -0.005308f, -0.013351f, -0.029068f, +0.011495f, +0.000944f, -0.002924f, -0.020008f, - +0.007398f, +0.001794f, +0.007691f, -0.005076f, -0.001264f, -0.002394f, -0.009235f, +0.015076f, -0.000043f, -0.002453f, - +0.003301f, +0.009542f, +0.012745f, +0.006015f, -0.000511f, -0.001488f, -0.003146f, +0.015161f, -0.004567f, -0.012823f, - +0.006498f, +0.008003f, -0.001039f, -0.003643f, -0.008645f, -0.017264f, -0.006132f, +0.015808f, +0.000985f, +0.005213f, - +0.003270f, -0.003146f, -0.001183f, +0.000601f, +0.006569f, +0.003909f, -0.001110f, -0.001909f, -0.002271f, -0.001771f, - -0.002146f, -0.008203f, -0.011688f, +0.003171f, +0.003584f, +0.000197f, -0.002678f, -0.006822f, -0.004614f, -0.004091f, - -0.006874f, +0.007593f, -0.002555f, +0.005608f, -0.004283f, +0.001752f, +0.002254f, +0.001872f, -0.001552f, +0.000166f, - +0.001307f, +0.001610f, +0.004863f, +0.004327f, -0.000979f, -0.002539f, +0.003475f, -0.000516f, +0.000115f, -0.003757f, - -0.000935f, +0.001209f, -0.001425f, +0.002686f, -0.000208f, -0.000535f - }, - { - +0.000753f, +0.094013f, +0.051104f, -0.024576f, -0.027690f, -0.013609f, +0.043574f, -0.004189f, -0.005099f, -0.008979f, - +0.017846f, +0.008949f, -0.013596f, +0.011684f, -0.013513f, -0.005048f, +0.027822f, +0.015513f, -0.008758f, -0.032674f, - +0.018484f, -0.000047f, +0.014784f, -0.011235f, -0.003450f, -0.008280f, -0.012377f, +0.002782f, +0.019497f, -0.010431f, - -0.007480f, -0.002684f, -0.022310f, +0.012572f, -0.035079f, -0.007788f, +0.016027f, +0.003926f, -0.016826f, -0.000414f, - -0.003492f, +0.007441f, -0.007467f, +0.026006f, -0.029015f, -0.002267f, -0.010650f, +0.001940f, +0.009222f, -0.009268f, - +0.010820f, -0.009138f, -0.013860f, +0.013977f, +0.012643f, +0.005560f, +0.002592f, +0.001778f, +0.013907f, +0.005123f, - +0.014252f, -0.000414f, -0.000675f, -0.003521f, -0.001832f, +0.008178f, -0.000220f, +0.000641f, +0.009215f, -0.006280f, - -0.002197f, -0.004245f, +0.002480f, +0.010356f, -0.006310f, -0.002632f, -0.000394f, +0.005007f, +0.005262f, +0.002614f, - +0.002809f, -0.001115f, -0.004704f, +0.001451f, -0.004716f, -0.001961f, -0.003273f, +0.002494f, +0.002514f, -0.001725f, - +0.000965f, +0.001061f, +0.003659f, -0.000911f, +0.001092f, -0.000134f - }, - { - -0.005247f, -0.255562f, -0.018018f, -0.005643f, +0.018528f, +0.004958f, -0.009991f, -0.007784f, +0.027793f, +0.018177f, - -0.009309f, -0.002299f, +0.023513f, +0.034779f, +0.014103f, +0.033351f, +0.002642f, +0.016267f, +0.020605f, +0.016774f, - +0.005086f, -0.008700f, +0.006350f, -0.015728f, -0.000534f, +0.018017f, -0.011173f, -0.008989f, +0.005771f, -0.030890f, - -0.000750f, +0.005141f, -0.005347f, -0.003416f, -0.025522f, +0.011880f, +0.005356f, -0.004395f, +0.001810f, -0.002618f, - +0.003180f, +0.008712f, +0.013769f, -0.009544f, -0.016746f, -0.005316f, -0.001789f, -0.015158f, +0.005653f, -0.012004f, - +0.005320f, +0.000324f, -0.012503f, -0.003360f, +0.001928f, +0.007600f, -0.005367f, +0.001565f, +0.007322f, -0.012020f, - +0.010735f, +0.001096f, +0.005582f, -0.006015f, -0.004064f, +0.006810f, -0.003442f, +0.007297f, -0.000230f, -0.002618f, - +0.007065f, -0.008804f, -0.006446f, -0.008377f, -0.006867f, +0.003413f, -0.002359f, +0.004951f, -0.002045f, +0.000180f, - +0.001369f, -0.003895f, -0.005026f, +0.000889f, -0.000926f, -0.000919f, -0.000431f, +0.001178f, +0.005465f, -0.001836f, - -0.002932f, +0.000465f, -0.001489f, -0.001132f, -0.005178f, -0.001434f - }, - { - +0.000096f, +0.109681f, -0.003683f, +0.002639f, +0.001263f, -0.005480f, +0.007852f, -0.019993f, -0.003886f, -0.010610f, - +0.014300f, -0.017647f, +0.011281f, +0.025759f, -0.014657f, +0.051088f, -0.008490f, +0.006639f, -0.008990f, +0.007002f, - +0.007486f, +0.002449f, +0.024962f, -0.010232f, -0.011988f, -0.000036f, +0.003040f, +0.001887f, -0.002426f, -0.017584f, - +0.003244f, +0.004767f, +0.008721f, +0.003910f, -0.001308f, -0.010184f, +0.024219f, -0.004338f, -0.003770f, +0.004708f, - -0.001919f, -0.001980f, -0.007809f, +0.010390f, -0.000046f, -0.010518f, +0.005756f, -0.001758f, +0.003070f, -0.010454f, - -0.016595f, +0.004482f, -0.010897f, +0.008953f, -0.010723f, +0.007335f, +0.010664f, -0.002503f, +0.011676f, -0.005867f, - +0.004932f, +0.007078f, -0.007495f, -0.004047f, +0.002830f, -0.001427f, -0.003096f, -0.003965f, +0.000980f, +0.002323f, - -0.008390f, +0.001704f, -0.004739f, +0.002387f, +0.002939f, -0.002047f, +0.000233f, -0.002554f, +0.001615f, +0.005728f, - -0.004607f, -0.002578f, -0.001053f, +0.001187f, +0.001889f, +0.004019f, -0.001229f, -0.000108f, -0.001194f, +0.002622f, - +0.000304f, +0.003483f, -0.001225f, +0.003425f, -0.000686f, -0.000277f - }, - { - +0.035019f, -0.083048f, -0.063877f, -0.034040f, +0.013631f, +0.019339f, -0.068516f, -0.002975f, -0.010026f, +0.007217f, - -0.010135f, +0.008691f, +0.000492f, +0.036148f, +0.021787f, -0.004132f, -0.020215f, -0.002237f, -0.005360f, +0.001755f, - +0.003789f, +0.008422f, -0.001698f, -0.000133f, -0.014158f, -0.000657f, -0.015227f, -0.004946f, -0.003436f, -0.015785f, - +0.003222f, -0.025718f, -0.002066f, -0.001340f, -0.013658f, +0.007979f, +0.001335f, -0.000496f, -0.004378f, +0.009221f, - +0.012402f, -0.010003f, +0.002623f, +0.000573f, +0.001372f, -0.010828f, +0.011145f, +0.005084f, -0.000021f, +0.007810f, - +0.000508f, +0.005798f, -0.002067f, +0.009251f, -0.016806f, +0.000507f, -0.010494f, +0.003034f, +0.004225f, -0.003959f, - -0.005485f, +0.002919f, +0.008697f, +0.009657f, -0.000870f, +0.001945f, -0.011035f, -0.007510f, -0.011169f, +0.003213f, - +0.000961f, +0.010648f, +0.000640f, +0.000731f, +0.009245f, +0.001037f, +0.003053f, -0.007377f, -0.008292f, -0.002075f, - -0.002375f, +0.000779f, -0.001720f, -0.002699f, -0.000439f, +0.003135f, -0.004853f, +0.002728f, +0.004316f, +0.001340f, - -0.002024f, -0.003453f, -0.002400f, -0.001155f, -0.002512f, +0.000625f - }, - { - -0.001648f, +0.026502f, +0.026042f, +0.001294f, -0.005435f, +0.005724f, +0.031845f, -0.012163f, +0.003164f, +0.017519f, - +0.003113f, -0.005121f, -0.020952f, -0.052612f, +0.059153f, +0.048832f, -0.008801f, +0.021980f, +0.015351f, +0.011001f, - -0.043323f, +0.003685f, +0.012507f, +0.004827f, +0.010074f, +0.001796f, -0.025991f, +0.018318f, +0.023930f, +0.017552f, - -0.018303f, -0.008249f, +0.003128f, +0.002243f, -0.008279f, -0.011238f, +0.020757f, +0.001202f, -0.006713f, -0.005339f, - +0.000586f, +0.001476f, -0.000778f, -0.004319f, +0.005394f, -0.005608f, -0.003386f, -0.004453f, -0.004038f, +0.003769f, - +0.005127f, -0.003481f, -0.000631f, +0.015476f, -0.001063f, +0.001557f, +0.003403f, -0.001818f, -0.000676f, -0.007009f, - -0.008563f, -0.008592f, -0.006501f, -0.005637f, +0.001047f, -0.004507f, +0.006073f, -0.005732f, +0.002022f, +0.003160f, - +0.000970f, -0.003058f, -0.001481f, +0.004525f, -0.006629f, +0.001570f, +0.001148f, +0.006695f, +0.002824f, -0.001759f, - -0.000574f, +0.005679f, +0.001776f, +0.000187f, +0.001405f, +0.005670f, +0.001543f, -0.005212f, -0.001303f, +0.004009f, - -0.003657f, +0.001543f, -0.001309f, -0.002380f, -0.002315f, +0.002135f - }, - { - +0.027637f, -0.122965f, -0.022229f, -0.017338f, -0.008992f, +0.006587f, -0.034625f, +0.010876f, -0.012810f, +0.007881f, - -0.009107f, -0.016707f, +0.015237f, +0.001096f, +0.062815f, -0.001139f, -0.000998f, +0.018060f, +0.020366f, +0.003553f, - +0.003707f, -0.015115f, +0.011269f, +0.004222f, +0.023726f, -0.004946f, +0.013819f, -0.008795f, +0.014541f, -0.005065f, - -0.017438f, -0.001334f, -0.004077f, +0.006524f, +0.001763f, -0.001800f, +0.001850f, -0.016163f, -0.014570f, -0.008571f, - +0.003104f, +0.003932f, +0.014931f, -0.004403f, +0.019126f, -0.002191f, +0.008634f, -0.002670f, +0.002749f, -0.003188f, - -0.003127f, +0.002663f, +0.002980f, -0.004170f, -0.002129f, +0.000989f, -0.001814f, -0.013293f, -0.001759f, +0.009575f, - -0.001851f, +0.006413f, -0.007119f, +0.000785f, +0.001271f, -0.001212f, -0.006797f, -0.000043f, +0.002942f, +0.004202f, - -0.002406f, +0.008471f, -0.005867f, -0.006227f, +0.001592f, +0.001342f, +0.003184f, -0.004645f, +0.004505f, +0.001136f, - +0.000311f, -0.002628f, -0.003711f, -0.002285f, +0.002419f, +0.000077f, +0.001447f, +0.001808f, +0.002144f, -0.004159f, - +0.001752f, +0.001508f, +0.005718f, +0.004470f, +0.000401f, -0.001749f - } - }, - { - { - +0.004152f, -0.028546f, +0.064053f, -0.058586f, -0.046700f, +0.010821f, +0.000999f, +0.008239f, +0.002802f, -0.014521f, - +0.018518f, -0.005393f, -0.005553f, +0.011074f, -0.020909f, +0.002233f, +0.011313f, -0.007855f, +0.016681f, +0.010869f, - +0.020860f, -0.018434f, +0.012929f, +0.028339f, +0.021898f, -0.050395f, -0.002610f, -0.003896f, +0.013568f, -0.011641f, - -0.028670f, -0.008994f, -0.010810f, -0.000089f, +0.011508f, +0.006371f, -0.005569f, +0.006000f, -0.003248f, -0.001187f, - +0.004281f, +0.001784f, +0.022081f, -0.016315f, +0.002881f, +0.009219f, -0.000179f, +0.002399f, +0.001266f, +0.009914f, - +0.000523f, +0.002548f, +0.001663f, -0.012329f, +0.000391f, -0.004056f, -0.005689f, +0.004213f, +0.006808f, -0.005741f, - -0.000056f, -0.007008f, -0.001323f, -0.005829f, -0.006183f, -0.000613f, -0.003770f, +0.005850f, -0.001741f, -0.000980f, - -0.003968f, +0.001724f, +0.001665f, -0.000424f, -0.000329f, +0.002617f, -0.001284f, -0.000518f, -0.003049f, -0.000136f, - -0.002297f, +0.000358f, -0.002404f, -0.000085f, -0.001450f, +0.001754f, -0.000076f, +0.004445f, +0.000200f, +0.002641f, - +0.003796f, +0.001553f, -0.000918f, -0.000388f, +0.001056f, +0.000300f - }, - { - +0.012291f, +0.072374f, -0.019711f, -0.000158f, +0.070717f, -0.008249f, +0.001699f, -0.015811f, -0.012173f, +0.014717f, - -0.014379f, +0.007144f, -0.002544f, -0.000993f, -0.006603f, +0.007312f, -0.015153f, +0.007232f, +0.018195f, -0.007627f, - +0.001030f, +0.016149f, +0.012955f, +0.010485f, -0.015040f, +0.003552f, +0.022445f, +0.022988f, -0.004691f, -0.011845f, - -0.007825f, +0.007273f, +0.000963f, -0.000110f, +0.007718f, +0.003807f, +0.000207f, +0.010436f, +0.001068f, -0.005609f, - +0.010375f, -0.007589f, +0.013098f, -0.005093f, +0.009193f, -0.010261f, +0.001388f, +0.007151f, +0.002334f, -0.009127f, - +0.006394f, -0.015287f, -0.006659f, -0.006162f, +0.011531f, -0.002139f, -0.003297f, +0.006317f, -0.003232f, -0.009537f, - +0.002242f, -0.005576f, -0.004395f, +0.009938f, +0.008169f, +0.000120f, +0.004289f, +0.008689f, +0.001911f, -0.002107f, - +0.002982f, -0.002015f, -0.002946f, -0.002277f, -0.003841f, -0.002122f, +0.001275f, -0.001809f, -0.001354f, +0.009891f, - -0.001887f, -0.002913f, +0.001522f, -0.003505f, +0.003232f, +0.000896f, -0.002079f, +0.001598f, -0.002433f, -0.002390f, - +0.002641f, +0.002009f, +0.003092f, -0.001170f, -0.000655f, -0.005338f - }, - { - -0.002107f, +0.191159f, -0.033511f, -0.072493f, +0.030441f, +0.005824f, +0.000275f, -0.008983f, -0.003143f, -0.001825f, - +0.008847f, -0.015313f, +0.003735f, -0.014851f, -0.002358f, +0.020112f, -0.000444f, +0.000363f, -0.024877f, -0.004509f, - +0.003536f, +0.015759f, -0.012787f, -0.008064f, +0.028173f, -0.006249f, +0.000983f, +0.002800f, +0.006132f, -0.019439f, - -0.010949f, -0.005693f, +0.010136f, -0.015308f, -0.002438f, +0.005176f, +0.006501f, +0.010804f, +0.003629f, -0.011246f, - +0.003156f, +0.003561f, +0.015221f, -0.008773f, -0.014863f, +0.009314f, +0.004930f, +0.001477f, -0.007326f, +0.006116f, - +0.012496f, -0.008140f, -0.003824f, +0.005304f, -0.008458f, -0.001722f, -0.007543f, +0.007361f, +0.006247f, +0.005674f, - -0.006432f, +0.001192f, -0.001108f, +0.011173f, -0.002779f, +0.001987f, +0.001554f, -0.005630f, -0.004083f, -0.003556f, - -0.001802f, -0.004413f, +0.003982f, +0.001991f, -0.006306f, +0.000726f, -0.001209f, +0.001600f, -0.001107f, +0.001555f, - +0.004430f, +0.001586f, -0.001021f, -0.005055f, +0.002266f, +0.003637f, -0.000705f, -0.001179f, +0.000579f, +0.000766f, - +0.001373f, -0.000294f, -0.000837f, +0.000414f, -0.000583f, +0.000289f - }, - { - +0.000674f, +0.085364f, +0.025428f, -0.018664f, -0.004949f, +0.004052f, +0.001173f, -0.002288f, -0.004545f, +0.009896f, - +0.018132f, -0.022345f, +0.002803f, -0.022885f, -0.026279f, -0.004875f, -0.016431f, -0.018722f, -0.018822f, +0.007620f, - -0.019749f, +0.000551f, +0.007522f, +0.012107f, +0.011325f, +0.015985f, -0.007626f, +0.002288f, +0.010079f, -0.018054f, - +0.008656f, +0.010886f, +0.007991f, -0.001814f, +0.000146f, -0.026404f, -0.017270f, +0.001349f, +0.003329f, +0.004195f, - -0.005207f, +0.000792f, -0.022912f, +0.004651f, -0.016248f, +0.001867f, +0.005880f, -0.015889f, +0.014683f, +0.002012f, - -0.025312f, -0.005443f, +0.005910f, +0.009329f, -0.014083f, +0.001392f, +0.012692f, -0.004360f, +0.007889f, -0.001646f, - -0.005825f, -0.007082f, +0.003354f, +0.002840f, +0.004397f, -0.002826f, +0.003379f, +0.003058f, -0.006081f, +0.002902f, - -0.000492f, -0.000893f, -0.000158f, +0.000793f, -0.005095f, +0.005320f, +0.000558f, -0.009784f, -0.002415f, -0.004744f, - -0.003227f, -0.002891f, +0.000587f, -0.000473f, -0.002788f, +0.002399f, +0.000001f, +0.003086f, -0.001569f, -0.001301f, - -0.001137f, -0.000005f, -0.005652f, -0.004789f, +0.002318f, -0.001962f - }, - { - -0.004983f, -0.287697f, -0.013148f, +0.074242f, +0.001226f, +0.002354f, -0.009804f, +0.002901f, +0.007911f, -0.014863f, - +0.013480f, -0.007086f, -0.010499f, -0.000603f, +0.007036f, +0.003915f, -0.002196f, -0.008479f, +0.005776f, -0.011927f, - -0.003805f, -0.022204f, +0.024474f, +0.003987f, -0.000467f, -0.003904f, +0.003395f, +0.011331f, +0.014469f, +0.015784f, - +0.001272f, +0.012356f, -0.008395f, +0.013786f, +0.000202f, +0.004680f, +0.002059f, -0.002977f, +0.008168f, +0.001259f, - -0.003087f, +0.009058f, -0.010374f, +0.000606f, +0.000292f, +0.003652f, -0.000888f, -0.003731f, -0.008147f, +0.000434f, - -0.003797f, -0.012101f, +0.008161f, -0.001007f, +0.002063f, +0.004610f, -0.003146f, +0.004479f, +0.005593f, +0.004125f, - -0.001859f, -0.003152f, -0.012249f, -0.001815f, +0.005550f, +0.008323f, -0.007755f, +0.000474f, +0.001547f, -0.000709f, - +0.004339f, +0.001089f, +0.003056f, -0.005008f, +0.005027f, -0.000170f, -0.000009f, -0.006486f, -0.003433f, +0.001325f, - -0.000228f, +0.004259f, -0.001078f, -0.007278f, +0.001844f, -0.004107f, -0.000558f, +0.002831f, -0.001363f, +0.001203f, - -0.001157f, +0.008065f, +0.000051f, -0.000616f, +0.000553f, -0.002313f - }, - { - -0.000176f, -0.067386f, -0.063749f, +0.008515f, -0.005868f, +0.001676f, -0.004288f, +0.001199f, +0.003905f, +0.006237f, - +0.000676f, +0.006942f, +0.020255f, +0.012145f, +0.010253f, +0.024766f, -0.037143f, +0.004754f, -0.025392f, +0.013822f, - +0.004507f, +0.006143f, +0.009945f, +0.022351f, +0.005743f, +0.024302f, -0.012240f, -0.000085f, +0.018941f, +0.012759f, - +0.013492f, +0.011072f, +0.006390f, -0.005801f, +0.007429f, -0.002855f, +0.006038f, -0.012770f, +0.005142f, -0.013585f, - +0.000578f, +0.000339f, +0.007040f, +0.003788f, +0.003489f, -0.009667f, +0.004310f, -0.005877f, +0.005655f, +0.007128f, - +0.005504f, +0.000360f, +0.015399f, -0.004635f, +0.000045f, -0.003101f, -0.003604f, -0.001853f, +0.005995f, -0.004063f, - +0.004695f, -0.003773f, -0.001433f, +0.000838f, +0.004558f, +0.002428f, +0.000716f, -0.002642f, +0.001430f, +0.005335f, - -0.003402f, -0.000743f, -0.007907f, +0.002057f, -0.001418f, -0.000741f, +0.001671f, -0.001095f, +0.003871f, +0.003440f, - -0.006183f, -0.000763f, +0.005130f, -0.002415f, -0.000435f, -0.001625f, +0.000710f, -0.000283f, -0.002063f, -0.000317f, - -0.000289f, -0.001144f, -0.003256f, -0.001300f, +0.002892f, -0.001402f - }, - { - -0.013569f, -0.272947f, -0.007711f, +0.108365f, +0.000574f, -0.015424f, -0.003778f, -0.006388f, +0.004433f, -0.002265f, - -0.020433f, +0.013904f, +0.003319f, +0.019044f, -0.019922f, -0.000535f, +0.010558f, +0.000302f, -0.028113f, +0.016069f, - +0.021205f, -0.007958f, -0.016987f, +0.035690f, +0.014111f, +0.005932f, +0.003170f, +0.008188f, +0.014120f, -0.007545f, - +0.000152f, -0.011118f, +0.011323f, +0.001411f, -0.001853f, -0.003625f, +0.003766f, -0.002334f, -0.007795f, +0.000560f, - -0.005477f, +0.012254f, -0.001401f, +0.005893f, -0.004201f, -0.001828f, -0.001030f, -0.002068f, +0.002980f, +0.006952f, - -0.002322f, -0.012797f, +0.013086f, +0.001639f, +0.004617f, -0.012607f, -0.005038f, -0.007528f, -0.005852f, -0.007950f, - -0.002351f, +0.000987f, -0.001908f, +0.004113f, -0.003408f, -0.006991f, +0.004717f, -0.001483f, -0.005940f, +0.005770f, - -0.001664f, +0.006135f, -0.000864f, -0.004211f, -0.002632f, +0.004515f, +0.003267f, +0.004413f, -0.003115f, -0.002561f, - -0.003738f, -0.000155f, -0.004719f, +0.005647f, +0.001952f, +0.002168f, +0.000378f, +0.002203f, -0.000260f, -0.003308f, - +0.000935f, +0.001064f, +0.004033f, +0.000961f, -0.002982f, +0.002142f - }, - { - -0.003516f, -0.055949f, -0.123166f, +0.032875f, -0.007223f, +0.008517f, -0.003950f, +0.002250f, -0.002933f, +0.002543f, - +0.016424f, +0.011215f, -0.010355f, +0.007589f, +0.040627f, -0.022065f, -0.027166f, -0.011963f, +0.004958f, +0.018038f, - +0.014809f, +0.006353f, +0.006761f, -0.019345f, +0.009497f, -0.021887f, -0.007918f, +0.013996f, -0.001713f, -0.010789f, - -0.013701f, +0.009918f, -0.007390f, -0.000868f, -0.009994f, -0.015958f, -0.010183f, +0.006951f, -0.001158f, +0.004990f, - +0.000690f, -0.007045f, -0.002683f, -0.011972f, +0.005265f, -0.004892f, -0.001799f, +0.003904f, +0.005496f, +0.003832f, - -0.001351f, +0.009128f, -0.016633f, +0.005567f, +0.011039f, -0.000032f, +0.000143f, +0.000552f, -0.006073f, -0.000140f, - -0.006817f, +0.001926f, +0.001362f, -0.001553f, +0.003270f, +0.000255f, +0.005942f, -0.002565f, -0.005787f, -0.005105f, - -0.000524f, +0.000854f, +0.005004f, +0.000709f, +0.006012f, +0.003621f, -0.002338f, -0.004027f, +0.001049f, -0.000312f, - +0.005582f, -0.002647f, +0.001050f, -0.001184f, +0.002194f, +0.002083f, -0.005079f, +0.001584f, +0.002565f, +0.000157f, - +0.002549f, -0.001843f, +0.001421f, +0.000097f, -0.004647f, -0.001195f - }, - { - -0.012491f, -0.267117f, +0.003303f, +0.108361f, -0.015550f, -0.015533f, -0.017181f, -0.001061f, -0.008887f, -0.002642f, - -0.035500f, +0.006347f, +0.013492f, -0.002627f, -0.015763f, -0.011525f, -0.011577f, +0.003644f, -0.005879f, +0.004774f, - -0.014359f, +0.009143f, +0.010113f, -0.009256f, +0.000694f, +0.004479f, -0.002487f, +0.000301f, +0.006261f, -0.011926f, - +0.007995f, +0.017048f, -0.001076f, +0.006037f, -0.001664f, +0.008330f, -0.006425f, +0.013369f, -0.000230f, +0.001162f, - -0.002123f, +0.006242f, -0.000025f, -0.004075f, -0.001593f, -0.018731f, -0.003251f, +0.012669f, -0.000330f, +0.009521f, - +0.000402f, -0.004585f, +0.001887f, +0.009108f, -0.003689f, +0.003773f, -0.002972f, -0.003312f, -0.006314f, +0.003024f, - +0.002022f, -0.013202f, -0.005493f, +0.003019f, +0.002646f, +0.000142f, -0.003748f, -0.006116f, -0.006454f, -0.005809f, - -0.000672f, +0.008484f, +0.000207f, -0.002228f, -0.001959f, -0.001672f, +0.004106f, -0.000066f, +0.000692f, -0.003390f, - +0.004065f, +0.004925f, +0.006492f, -0.000708f, +0.001766f, +0.000663f, +0.000272f, +0.000708f, -0.000521f, -0.001219f, - -0.002376f, +0.000326f, +0.001881f, +0.000893f, -0.002196f, +0.002895f - }, - { - +0.001012f, +0.143657f, +0.001120f, -0.028215f, -0.022192f, +0.002890f, +0.029581f, +0.011406f, -0.014449f, -0.012789f, - -0.000660f, +0.009485f, +0.024645f, -0.022218f, +0.004976f, +0.005863f, +0.005679f, -0.002148f, -0.000429f, -0.021546f, - +0.011611f, +0.003018f, +0.017005f, -0.014631f, -0.003384f, -0.023454f, -0.003438f, +0.021229f, -0.001342f, -0.005803f, - -0.004167f, -0.004838f, +0.010302f, -0.023006f, -0.009113f, -0.008197f, +0.001952f, +0.001045f, +0.012805f, -0.022485f, - -0.001185f, +0.013164f, -0.009245f, +0.008348f, -0.020919f, -0.002017f, -0.001950f, +0.001911f, +0.009644f, +0.004028f, - -0.008449f, -0.010568f, +0.000462f, +0.012105f, +0.008332f, +0.011172f, -0.001964f, +0.006234f, +0.007215f, +0.011689f, - +0.004315f, +0.001094f, +0.001965f, +0.001125f, -0.000629f, +0.005758f, -0.001762f, +0.004804f, +0.002237f, -0.000185f, - -0.000042f, -0.003122f, -0.000048f, +0.009503f, -0.004896f, -0.001038f, -0.001283f, +0.004037f, +0.007459f, +0.003059f, - +0.005311f, -0.003371f, -0.003928f, +0.001737f, -0.003790f, -0.002291f, +0.000361f, +0.002559f, -0.003984f, +0.001053f, - -0.001037f, +0.003041f, +0.002228f, -0.002518f, +0.002523f, -0.000482f - }, - { - +0.009553f, -0.173943f, -0.085566f, -0.002141f, -0.000069f, +0.022954f, -0.044351f, -0.010483f, +0.026746f, -0.004170f, - +0.020953f, +0.002178f, +0.018809f, +0.016256f, +0.057682f, +0.005647f, -0.007381f, +0.016315f, +0.015879f, +0.020670f, - -0.000594f, +0.000948f, -0.003980f, -0.009174f, +0.006747f, -0.007719f, -0.006556f, +0.011980f, -0.011850f, -0.008764f, - -0.014891f, +0.013545f, -0.011160f, +0.000935f, -0.008569f, -0.008993f, +0.017202f, -0.007365f, -0.000537f, -0.002770f, - -0.008698f, +0.016160f, +0.001416f, -0.002919f, -0.002720f, -0.007755f, +0.003995f, -0.024092f, -0.004078f, -0.001783f, - +0.002535f, -0.002677f, -0.014092f, +0.004610f, -0.000063f, +0.004674f, -0.002811f, +0.003467f, +0.000336f, -0.002504f, - +0.011386f, -0.001246f, +0.001434f, +0.000204f, -0.006606f, -0.002205f, +0.012382f, +0.006551f, -0.004503f, -0.000339f, - +0.002779f, -0.005923f, -0.004871f, -0.008854f, -0.003796f, +0.002257f, -0.002322f, +0.004400f, -0.002389f, +0.003254f, - -0.005557f, -0.006077f, -0.001355f, +0.000523f, +0.000471f, -0.000709f, -0.001385f, +0.002618f, +0.000804f, -0.002293f, - +0.001644f, -0.002989f, +0.000282f, -0.002017f, -0.004142f, -0.001234f - }, - { - +0.001165f, +0.089985f, +0.017241f, -0.003593f, +0.002491f, -0.000683f, -0.004980f, -0.005237f, -0.011638f, -0.008081f, - -0.015690f, +0.018695f, -0.001710f, +0.012649f, +0.016550f, +0.034496f, +0.007553f, -0.016102f, -0.001107f, +0.003212f, - +0.021961f, -0.019719f, +0.022788f, -0.018593f, -0.016987f, +0.021621f, +0.001804f, -0.012765f, -0.003532f, -0.011053f, - -0.003352f, +0.008727f, +0.020142f, +0.012067f, -0.014248f, -0.005667f, +0.008121f, +0.000134f, +0.008738f, -0.000301f, - +0.008490f, -0.012670f, -0.004243f, +0.005570f, -0.005999f, -0.003768f, +0.004589f, -0.001191f, +0.006705f, -0.008350f, - -0.006357f, -0.010962f, -0.006293f, -0.004413f, +0.006854f, -0.002890f, +0.003773f, +0.002260f, +0.011145f, +0.004332f, - +0.000197f, +0.001599f, -0.002152f, -0.002228f, +0.006393f, -0.007102f, -0.005739f, -0.000592f, -0.004056f, +0.004073f, - -0.003250f, -0.000310f, -0.004131f, -0.002930f, +0.007422f, +0.000444f, -0.006177f, +0.000942f, +0.001991f, -0.001425f, - +0.003375f, -0.003737f, -0.004629f, -0.000463f, +0.003742f, +0.002911f, +0.001762f, -0.000158f, +0.002585f, +0.000883f, - -0.001416f, +0.004043f, -0.002747f, -0.000858f, +0.003147f, +0.002414f - }, - { - -0.029905f, -0.088887f, +0.006529f, -0.024131f, +0.008149f, +0.010585f, -0.058018f, -0.031186f, -0.002318f, +0.003541f, - +0.005535f, -0.011136f, +0.000220f, +0.044552f, +0.022561f, -0.023244f, +0.025931f, -0.019225f, +0.011046f, +0.014588f, - -0.018602f, +0.005513f, +0.006852f, -0.016025f, -0.002120f, -0.004555f, -0.010963f, +0.004275f, +0.004916f, -0.029625f, - -0.005887f, +0.001201f, -0.008966f, +0.008814f, -0.022085f, +0.003666f, -0.002717f, -0.012666f, +0.006528f, +0.001553f, - +0.008568f, +0.002290f, +0.011115f, +0.006357f, -0.016739f, -0.004317f, +0.007320f, +0.013271f, -0.005721f, -0.001987f, - +0.014931f, -0.008065f, +0.006375f, -0.002552f, -0.011054f, +0.000546f, -0.011462f, -0.001289f, +0.011110f, +0.000867f, - -0.000221f, -0.000267f, +0.001019f, +0.011251f, -0.001711f, -0.003568f, -0.004944f, -0.005129f, -0.014707f, +0.005808f, - -0.001086f, +0.008761f, +0.001612f, -0.000646f, +0.010030f, -0.000613f, +0.003642f, -0.011333f, -0.009673f, +0.001450f, - -0.002923f, +0.001464f, -0.001915f, -0.000345f, -0.003488f, +0.001026f, -0.000603f, +0.004155f, +0.004012f, +0.001839f, - -0.004660f, -0.001670f, -0.006665f, -0.000083f, -0.002419f, +0.001517f - }, - { - +0.003335f, +0.100835f, -0.045222f, +0.003907f, +0.008269f, +0.002160f, +0.009986f, +0.009965f, +0.005931f, -0.001073f, - +0.010676f, -0.007920f, -0.007481f, +0.003499f, +0.018287f, -0.019491f, +0.022597f, +0.038866f, +0.016275f, +0.002236f, - -0.027460f, -0.012268f, +0.013074f, +0.007239f, +0.003500f, -0.018074f, -0.006575f, +0.013640f, +0.013831f, +0.023327f, - -0.017135f, -0.005897f, +0.003804f, +0.006412f, -0.005993f, -0.016739f, +0.011243f, +0.005968f, +0.001709f, -0.002334f, - -0.011544f, +0.000828f, +0.006024f, -0.017244f, +0.000438f, -0.003116f, -0.003056f, -0.001190f, +0.000972f, +0.000775f, - -0.012344f, +0.004859f, +0.002122f, +0.003549f, +0.004624f, +0.013078f, -0.010253f, +0.004961f, -0.004207f, -0.004557f, - -0.009527f, -0.012651f, -0.005779f, +0.003780f, -0.001305f, -0.003449f, -0.004098f, +0.000431f, -0.001249f, +0.005272f, - +0.004543f, -0.008505f, -0.001299f, +0.003187f, -0.002940f, +0.001061f, +0.002173f, +0.003796f, +0.002436f, +0.003559f, - +0.001938f, -0.002495f, +0.002572f, +0.002063f, -0.000667f, +0.009310f, -0.002083f, -0.003769f, +0.002819f, -0.003782f, - +0.001002f, +0.002531f, -0.006298f, +0.000779f, -0.004114f, -0.000175f - }, - { - -0.023908f, -0.136296f, +0.058851f, -0.023844f, -0.032871f, +0.005741f, -0.021062f, -0.014630f, +0.007527f, +0.009672f, - -0.020458f, +0.003012f, -0.027625f, +0.033685f, +0.047287f, -0.005366f, +0.011168f, +0.027106f, -0.014262f, +0.015332f, - -0.002677f, -0.002989f, -0.003504f, +0.023843f, +0.013316f, +0.005695f, -0.008853f, +0.010837f, +0.004463f, +0.007550f, - -0.027120f, -0.012724f, +0.009017f, +0.009236f, +0.017098f, -0.025254f, +0.010041f, -0.001285f, -0.006289f, -0.013486f, - -0.006025f, +0.006095f, +0.004742f, +0.000593f, +0.014646f, -0.001964f, +0.013263f, +0.004600f, -0.001642f, +0.012823f, - -0.003683f, -0.009961f, +0.001885f, -0.003562f, +0.003603f, +0.002543f, -0.002773f, -0.005831f, -0.006907f, +0.010840f, - -0.000307f, +0.004206f, +0.001888f, -0.009351f, +0.008336f, -0.002558f, -0.003744f, -0.009209f, +0.000834f, +0.004157f, - +0.000006f, +0.004062f, -0.001698f, -0.000314f, -0.007662f, +0.003448f, -0.001426f, -0.001360f, +0.005335f, +0.003789f, - -0.004253f, +0.002079f, -0.006005f, -0.000351f, +0.001861f, -0.000437f, +0.002354f, +0.001649f, -0.001492f, -0.004820f, - +0.002322f, +0.003602f, +0.008122f, +0.000562f, +0.001631f, -0.002577f - } - }, - { - { - -0.001234f, -0.120946f, +0.014286f, -0.000541f, -0.007134f, +0.006237f, -0.005188f, +0.009124f, +0.011752f, -0.003640f, - +0.010492f, -0.005529f, -0.011102f, +0.000701f, -0.017378f, +0.025871f, +0.037416f, +0.001951f, +0.004147f, -0.003791f, - +0.024144f, -0.027681f, -0.003945f, +0.015972f, +0.009779f, -0.043589f, +0.000788f, +0.004819f, +0.015899f, +0.014727f, - -0.000104f, +0.002020f, -0.011772f, -0.010925f, +0.005624f, +0.001072f, +0.003794f, +0.015486f, -0.006635f, -0.000218f, - +0.006333f, -0.008552f, +0.016885f, -0.014616f, +0.004794f, +0.004536f, -0.007085f, +0.006234f, +0.006205f, +0.004384f, - -0.003198f, -0.001741f, -0.000726f, -0.008042f, +0.005553f, -0.001455f, -0.009556f, -0.002320f, +0.003507f, -0.001017f, - +0.007115f, -0.004312f, +0.004055f, +0.003895f, -0.000654f, +0.006692f, -0.000624f, +0.003753f, -0.003762f, +0.000929f, - -0.001700f, +0.000007f, +0.000601f, -0.001182f, +0.000279f, +0.004288f, -0.000780f, -0.001214f, -0.002466f, +0.001395f, - -0.002546f, +0.004165f, +0.001149f, +0.001213f, -0.001496f, -0.002259f, -0.003465f, +0.002015f, -0.003596f, +0.000765f, - +0.005249f, +0.001334f, -0.000248f, +0.001647f, -0.000685f, +0.000344f - }, - { - -0.012369f, +0.178115f, +0.081879f, -0.125513f, -0.052034f, -0.006054f, +0.002507f, -0.035739f, -0.018295f, +0.020967f, - +0.007823f, +0.015321f, -0.016334f, +0.000605f, +0.003137f, +0.006900f, -0.011361f, -0.013778f, -0.016991f, -0.019317f, - -0.012307f, +0.000940f, +0.002337f, +0.015925f, -0.019874f, -0.003822f, +0.016374f, +0.009319f, +0.001897f, +0.009367f, - -0.000891f, -0.000915f, +0.005884f, +0.009642f, +0.012470f, +0.009904f, +0.001166f, +0.003535f, +0.001080f, -0.003188f, - +0.001787f, -0.013549f, +0.006528f, -0.014171f, +0.002435f, -0.004260f, +0.003330f, +0.002915f, +0.000676f, -0.008713f, - +0.004887f, -0.013243f, -0.000005f, -0.001339f, +0.011668f, -0.004393f, -0.002658f, +0.005700f, +0.001992f, +0.003201f, - +0.008844f, -0.000302f, -0.000625f, +0.004364f, +0.000397f, -0.006303f, -0.004185f, +0.001974f, -0.000820f, -0.002931f, - +0.007919f, +0.003373f, +0.002905f, +0.000408f, -0.002475f, -0.001258f, +0.000448f, -0.004452f, -0.004511f, +0.006172f, - +0.000168f, -0.000502f, +0.000698f, -0.001940f, +0.003083f, -0.002258f, -0.004286f, +0.003078f, -0.001646f, -0.000709f, - +0.001108f, -0.000415f, +0.002187f, -0.001930f, -0.000070f, -0.002098f - }, - { - +0.001693f, +0.150231f, -0.051559f, -0.083275f, +0.041914f, +0.011577f, +0.010538f, -0.002793f, -0.009542f, -0.006412f, - +0.004730f, -0.025221f, -0.012245f, -0.003520f, +0.005678f, +0.013440f, -0.000004f, +0.011474f, -0.017023f, -0.015982f, - +0.002663f, +0.011421f, -0.018347f, -0.012192f, +0.025584f, -0.003370f, +0.008520f, +0.003892f, -0.006085f, -0.017075f, - +0.008047f, +0.013159f, +0.014416f, -0.019821f, -0.007849f, +0.006042f, -0.011372f, +0.007224f, +0.015115f, -0.009787f, - +0.006190f, +0.009926f, +0.019604f, -0.003867f, -0.018252f, -0.001363f, -0.004559f, -0.005800f, -0.004160f, +0.005872f, - -0.005318f, -0.016194f, -0.004618f, +0.001596f, -0.007821f, +0.005297f, -0.002419f, +0.006553f, +0.001667f, +0.009171f, - +0.000052f, +0.003736f, -0.003929f, +0.006194f, -0.003183f, -0.003128f, +0.000257f, -0.003714f, -0.004849f, -0.000538f, - -0.001534f, -0.005232f, +0.003862f, -0.002247f, -0.005045f, +0.001842f, -0.004915f, -0.000633f, -0.005598f, -0.004050f, - +0.000351f, -0.001312f, -0.000190f, -0.002661f, -0.001522f, -0.001204f, -0.002071f, -0.002562f, -0.000270f, -0.001781f, - +0.001704f, +0.001278f, -0.001026f, +0.000407f, -0.000518f, +0.000377f - }, - { - -0.000534f, -0.006045f, -0.039844f, +0.002146f, +0.007794f, +0.001587f, -0.002825f, +0.003141f, -0.004068f, -0.006901f, - +0.000893f, -0.033201f, +0.003440f, -0.021676f, -0.013946f, +0.000213f, -0.031250f, -0.023838f, -0.026250f, -0.013971f, - -0.029220f, -0.001603f, -0.001060f, +0.000705f, +0.014715f, -0.000027f, -0.022217f, +0.012165f, +0.023379f, -0.007251f, - +0.008526f, +0.003284f, +0.006718f, +0.010181f, +0.003825f, -0.003563f, -0.006006f, -0.009910f, +0.001366f, -0.002622f, - -0.009889f, +0.007701f, -0.022499f, +0.002517f, -0.010472f, -0.000469f, -0.000253f, -0.016953f, +0.017622f, +0.008396f, - -0.012457f, +0.005678f, +0.001530f, +0.011091f, -0.007288f, -0.001706f, +0.006733f, -0.007511f, +0.008863f, +0.000118f, - -0.001477f, -0.001384f, +0.002192f, -0.001562f, +0.004922f, -0.005676f, -0.002448f, +0.004936f, +0.000700f, +0.004535f, - -0.001692f, -0.001742f, -0.002998f, +0.001206f, -0.007817f, +0.000860f, +0.002801f, -0.003251f, +0.001330f, -0.005176f, - -0.004406f, -0.003948f, -0.000478f, +0.000974f, -0.000365f, +0.000963f, -0.002678f, +0.001794f, -0.000679f, -0.001206f, - -0.000475f, +0.001630f, +0.000340f, -0.000288f, +0.005758f, +0.001197f - }, - { - +0.005619f, -0.175265f, +0.056542f, +0.059440f, -0.007782f, -0.000038f, +0.003155f, +0.001051f, -0.001229f, -0.010261f, - +0.023625f, +0.022582f, +0.008339f, +0.010348f, +0.001324f, +0.007729f, +0.028193f, -0.004494f, -0.012609f, -0.003147f, - +0.013959f, -0.003127f, +0.025137f, -0.017070f, -0.009630f, +0.001868f, +0.007050f, +0.005153f, +0.011824f, +0.017044f, - +0.014337f, +0.016766f, -0.003149f, +0.026039f, +0.003971f, -0.004362f, -0.008095f, -0.017026f, +0.001681f, -0.007280f, - -0.019456f, -0.006823f, -0.011845f, +0.000840f, -0.004946f, -0.000556f, -0.004463f, +0.005214f, +0.004990f, -0.004233f, - -0.006221f, -0.005468f, +0.008469f, -0.002715f, +0.005490f, +0.005394f, -0.002328f, -0.002027f, -0.004425f, +0.002104f, - +0.001443f, -0.005006f, -0.003624f, +0.004918f, +0.003676f, +0.008014f, -0.002433f, +0.002610f, -0.000632f, -0.005128f, - +0.000625f, -0.002408f, -0.002825f, -0.006317f, +0.002873f, -0.003969f, +0.001418f, -0.002171f, -0.002099f, +0.001127f, - +0.001473f, +0.001252f, -0.003014f, -0.003410f, +0.003641f, -0.002589f, -0.000374f, +0.002512f, -0.003119f, -0.001006f, - -0.000879f, +0.006508f, -0.000538f, -0.000693f, +0.000225f, -0.001488f - }, - { - +0.003862f, +0.001443f, +0.005394f, +0.015464f, -0.012770f, +0.001536f, -0.001774f, -0.003831f, -0.012184f, -0.001914f, - -0.008965f, -0.004604f, +0.021633f, +0.001894f, +0.001930f, +0.029805f, -0.036038f, -0.015664f, -0.034380f, +0.000231f, - -0.011245f, -0.002086f, +0.006655f, +0.000987f, -0.018615f, +0.015195f, +0.003244f, -0.002067f, -0.013409f, +0.000478f, - +0.002213f, -0.003136f, +0.006965f, -0.006727f, +0.007346f, -0.003175f, +0.005090f, -0.013692f, +0.006912f, -0.012094f, - -0.000606f, -0.007451f, +0.007159f, +0.003985f, +0.004674f, -0.000035f, +0.006431f, -0.008320f, +0.004652f, +0.010742f, - +0.009323f, -0.003115f, +0.011418f, -0.010244f, -0.001093f, -0.002401f, -0.004171f, -0.001692f, +0.004956f, -0.011118f, - +0.005654f, +0.004821f, +0.003533f, +0.002842f, +0.003070f, +0.000602f, +0.000296f, -0.005660f, -0.002673f, +0.001802f, - -0.002715f, +0.003621f, -0.002640f, +0.007056f, +0.001382f, +0.000894f, +0.001718f, -0.002620f, +0.000983f, -0.000155f, - -0.003746f, +0.001301f, +0.001432f, -0.003715f, +0.001158f, -0.003936f, -0.003045f, +0.000129f, +0.000638f, +0.001618f, - -0.003064f, -0.003352f, -0.000270f, +0.000279f, -0.000085f, -0.001969f - }, - { - +0.016186f, -0.178227f, +0.022761f, +0.094671f, -0.000403f, -0.007376f, -0.000922f, -0.020958f, -0.022751f, +0.001706f, - -0.003368f, +0.017475f, -0.021582f, +0.002349f, -0.015315f, -0.001010f, -0.010990f, +0.008782f, -0.027827f, -0.004737f, - +0.013897f, -0.003864f, -0.009958f, +0.021313f, -0.004814f, -0.004291f, +0.001133f, +0.007375f, +0.008960f, -0.005510f, - +0.015106f, +0.008122f, +0.015603f, +0.007855f, -0.008246f, -0.004769f, +0.008662f, -0.001301f, -0.005168f, +0.007576f, - -0.000890f, +0.017190f, -0.009370f, -0.004777f, -0.007034f, -0.001631f, +0.001402f, -0.005367f, -0.004654f, +0.004046f, - +0.002249f, -0.009501f, +0.004139f, -0.008428f, -0.005338f, -0.010219f, +0.005761f, +0.000686f, +0.001120f, -0.001789f, - +0.003336f, +0.005724f, -0.001326f, -0.001516f, -0.001866f, -0.001995f, +0.006952f, -0.001088f, -0.008033f, +0.007363f, - -0.001619f, +0.001632f, +0.001782f, -0.000078f, -0.001688f, +0.004326f, +0.004306f, +0.002735f, -0.002781f, -0.000949f, - -0.004289f, -0.002480f, -0.002948f, +0.004909f, -0.004064f, +0.002488f, +0.000247f, -0.001194f, +0.000381f, -0.001027f, - -0.000334f, -0.002165f, +0.003912f, +0.001349f, -0.003258f, +0.002556f - }, - { - +0.006083f, +0.078962f, -0.015422f, +0.026280f, -0.016108f, +0.000662f, -0.009142f, +0.002223f, +0.000297f, -0.000983f, - +0.002809f, -0.003007f, -0.007970f, +0.017523f, +0.027893f, -0.026094f, -0.012802f, -0.006163f, -0.016955f, -0.019678f, - +0.003842f, +0.002897f, +0.002671f, -0.003688f, +0.013611f, -0.025614f, +0.008987f, +0.013162f, -0.023762f, -0.016554f, - -0.023515f, +0.005855f, +0.006212f, +0.010329f, -0.003439f, -0.003679f, +0.001625f, +0.013344f, +0.007153f, +0.000725f, - -0.004886f, -0.002812f, +0.004265f, -0.004478f, +0.009844f, -0.000661f, +0.002784f, +0.009298f, +0.001082f, +0.006897f, - +0.002696f, +0.008031f, -0.016401f, +0.008764f, +0.004462f, -0.004891f, +0.000950f, +0.000833f, -0.004346f, +0.008901f, - -0.007055f, -0.004093f, -0.000020f, -0.000615f, +0.004058f, -0.004596f, +0.002677f, +0.000502f, -0.002928f, -0.001144f, - +0.001983f, -0.001201f, +0.002763f, -0.004002f, -0.000841f, +0.001666f, -0.000451f, -0.000933f, +0.004012f, -0.000678f, - +0.002698f, -0.006655f, -0.001461f, -0.000854f, -0.000679f, +0.000728f, -0.001902f, +0.001174f, +0.001973f, +0.001126f, - +0.003167f, -0.000905f, +0.001025f, -0.002232f, -0.005672f, -0.002978f - }, - { - +0.014045f, -0.198845f, +0.016757f, +0.094252f, -0.009093f, +0.005447f, -0.005801f, +0.010413f, +0.002406f, +0.008599f, - -0.009901f, +0.021833f, -0.002222f, -0.001581f, +0.013502f, +0.015947f, +0.000324f, +0.006804f, +0.001726f, +0.008423f, - -0.004766f, +0.000430f, -0.001290f, -0.004566f, -0.007897f, +0.006771f, +0.001734f, -0.011194f, -0.007043f, -0.028527f, - +0.000099f, +0.009156f, -0.008177f, +0.003770f, -0.001211f, +0.009965f, +0.002537f, +0.016459f, +0.003810f, +0.011708f, - +0.002040f, +0.007172f, -0.001656f, +0.005362f, +0.010761f, -0.007799f, -0.001435f, +0.007808f, -0.002784f, +0.010336f, - +0.006944f, -0.001619f, +0.005285f, +0.006434f, -0.005834f, +0.000466f, -0.001140f, +0.000615f, +0.000583f, +0.001058f, - -0.001724f, -0.005138f, -0.001634f, -0.000077f, -0.007846f, -0.006369f, +0.004696f, +0.000515f, -0.002336f, -0.000932f, - +0.004049f, +0.006969f, -0.001366f, -0.006432f, -0.002343f, -0.002728f, +0.000893f, +0.000293f, +0.001089f, -0.005154f, - +0.001033f, +0.005076f, +0.005758f, -0.004559f, -0.001621f, -0.000131f, +0.001766f, +0.002993f, +0.001711f, +0.000882f, - -0.001538f, +0.000811f, +0.003346f, +0.002807f, -0.002015f, +0.002573f - }, - { - -0.001191f, +0.075452f, -0.051348f, -0.010026f, +0.005627f, +0.007181f, +0.019131f, +0.025279f, -0.003750f, -0.013721f, - -0.013086f, -0.002728f, +0.008792f, -0.024378f, +0.014043f, +0.006483f, +0.005308f, -0.002761f, +0.026896f, +0.024612f, - +0.004085f, -0.003604f, +0.004781f, -0.018678f, +0.002717f, -0.015263f, +0.000892f, +0.013414f, -0.006450f, +0.008372f, - +0.002363f, +0.000599f, +0.025440f, -0.003332f, +0.009848f, -0.011105f, +0.002573f, +0.009674f, +0.021808f, -0.022304f, - -0.003535f, +0.003304f, -0.018930f, -0.005676f, -0.011182f, +0.010389f, +0.006626f, -0.000876f, +0.003540f, +0.003834f, - -0.010645f, -0.002493f, +0.008621f, +0.005826f, -0.012367f, -0.007587f, -0.013042f, -0.005624f, -0.001196f, +0.000169f, - -0.011001f, -0.001666f, +0.002659f, -0.004960f, -0.008268f, -0.000342f, +0.001278f, +0.008077f, +0.006937f, +0.007061f, - +0.000523f, -0.001723f, -0.003318f, +0.002559f, -0.003100f, +0.002305f, -0.002152f, +0.001211f, +0.004531f, +0.000705f, - +0.002689f, -0.004146f, -0.007043f, +0.000024f, -0.000270f, +0.002340f, +0.002943f, +0.001136f, -0.003237f, +0.001967f, - -0.001830f, +0.000161f, -0.001582f, -0.002442f, +0.005107f, -0.000695f - }, - { - -0.016014f, -0.075257f, +0.038826f, +0.004357f, -0.018068f, +0.018153f, -0.046063f, -0.065021f, +0.010960f, +0.028767f, - +0.027766f, -0.027657f, -0.032898f, -0.030784f, +0.043647f, +0.007684f, -0.005290f, +0.003457f, -0.003571f, +0.008633f, - +0.002681f, +0.007126f, -0.008780f, -0.008442f, +0.011629f, -0.000537f, +0.002123f, +0.020557f, +0.010609f, +0.016414f, - -0.011781f, -0.001398f, -0.019640f, +0.010019f, +0.004065f, -0.014793f, +0.009424f, -0.005850f, -0.004276f, +0.003035f, - -0.006046f, +0.014025f, -0.006982f, -0.005251f, +0.007571f, +0.005206f, +0.020391f, -0.014003f, +0.001938f, +0.012165f, - +0.008723f, +0.001459f, -0.006318f, +0.007830f, -0.002542f, +0.002857f, -0.003700f, +0.013139f, -0.002932f, -0.010821f, - +0.006106f, +0.000596f, +0.005239f, +0.004347f, -0.004435f, -0.004554f, +0.006192f, +0.005369f, -0.002042f, +0.000227f, - -0.000360f, -0.005179f, +0.003609f, +0.003880f, +0.001326f, +0.000742f, -0.004474f, +0.003746f, -0.002370f, +0.003003f, - -0.003569f, -0.005135f, -0.003917f, -0.001494f, +0.001207f, -0.000853f, -0.001578f, +0.001343f, -0.001051f, -0.003379f, - +0.003538f, -0.001734f, +0.001574f, +0.000524f, +0.002344f, +0.001075f - }, - { - -0.000314f, +0.012186f, -0.032943f, -0.005713f, +0.004973f, +0.004483f, -0.015466f, -0.000540f, -0.001715f, -0.002550f, - -0.028120f, +0.010749f, -0.018601f, -0.017184f, +0.002124f, +0.004165f, -0.007080f, -0.001170f, +0.030018f, +0.010744f, - +0.005749f, -0.042284f, +0.008554f, -0.019868f, -0.017221f, +0.000957f, -0.012453f, -0.031262f, -0.017708f, +0.013423f, - +0.007702f, +0.002565f, +0.011509f, +0.015307f, +0.005263f, +0.006459f, -0.007782f, -0.015971f, +0.006083f, -0.007487f, - +0.013429f, +0.001186f, +0.005977f, +0.007423f, +0.001574f, -0.001098f, -0.001429f, +0.005574f, +0.014868f, -0.003658f, - +0.009588f, -0.004921f, -0.000816f, -0.004968f, +0.007862f, -0.003795f, -0.001556f, -0.000635f, +0.002679f, +0.002054f, - +0.001164f, -0.002943f, -0.004150f, -0.001447f, +0.004503f, -0.000166f, -0.001931f, -0.002589f, -0.006845f, +0.001937f, - +0.000336f, +0.003188f, +0.002493f, +0.000093f, +0.003004f, +0.003017f, -0.001613f, -0.000498f, +0.001392f, -0.001640f, - +0.000120f, -0.007027f, -0.005522f, -0.003424f, -0.000439f, -0.001222f, +0.002148f, +0.001807f, +0.005183f, -0.000529f, - -0.004248f, +0.004077f, -0.001147f, -0.001633f, +0.001753f, +0.000519f - }, - { - +0.028299f, -0.110028f, -0.054541f, -0.001565f, +0.007362f, +0.019777f, -0.031267f, -0.012635f, +0.002995f, +0.009949f, - +0.011368f, -0.010433f, -0.004986f, +0.020135f, -0.003119f, -0.040862f, +0.039931f, +0.004559f, +0.032401f, +0.023616f, - -0.021797f, +0.004399f, +0.000906f, -0.002838f, +0.017392f, +0.001521f, +0.000664f, +0.006269f, +0.011048f, -0.014113f, - +0.009410f, +0.019528f, -0.009634f, -0.003410f, -0.022481f, +0.009925f, -0.005351f, -0.013896f, +0.006754f, -0.009262f, - +0.008785f, +0.003990f, +0.001423f, -0.004642f, -0.015325f, -0.005599f, -0.003386f, -0.003837f, -0.018849f, -0.004256f, - +0.017338f, -0.000059f, +0.013360f, -0.001981f, -0.004725f, +0.002477f, -0.010032f, +0.000258f, -0.001156f, -0.010474f, - +0.000377f, -0.002507f, -0.009150f, +0.003028f, -0.006210f, -0.005983f, -0.000995f, +0.002459f, -0.010176f, +0.002309f, - -0.005431f, +0.004438f, +0.002389f, -0.000918f, -0.000704f, -0.009613f, +0.004988f, -0.006033f, -0.004428f, +0.002976f, - -0.002838f, -0.001831f, -0.002694f, +0.003109f, +0.002605f, +0.001016f, -0.002752f, +0.000901f, -0.001333f, +0.000442f, - -0.004259f, -0.002609f, -0.003847f, +0.004712f, +0.002358f, +0.003322f - }, - { - -0.003745f, +0.105224f, -0.030086f, -0.004368f, +0.001137f, +0.005089f, +0.004299f, +0.000215f, +0.013153f, +0.002320f, - +0.010509f, -0.005812f, +0.017811f, -0.008856f, -0.044790f, -0.034200f, -0.005149f, +0.003774f, +0.003440f, +0.024868f, - +0.007068f, -0.004147f, +0.008921f, +0.019026f, +0.002263f, -0.030551f, -0.007564f, -0.005910f, +0.021722f, +0.033827f, - -0.022048f, -0.015919f, -0.002862f, -0.001042f, -0.006627f, -0.010268f, -0.000763f, -0.001486f, +0.008545f, +0.010028f, - -0.014718f, -0.004554f, +0.003645f, -0.016658f, -0.001553f, -0.009200f, +0.000229f, +0.007843f, +0.003789f, -0.005524f, - -0.014524f, +0.011751f, +0.002664f, +0.006244f, +0.002609f, +0.011859f, -0.011590f, +0.005885f, -0.004374f, -0.001167f, - +0.008993f, +0.004153f, -0.002721f, +0.008844f, +0.002715f, -0.001092f, -0.002729f, +0.001910f, -0.000934f, -0.000608f, - +0.002081f, -0.006658f, -0.004151f, -0.000153f, +0.000823f, +0.006546f, +0.002635f, +0.000903f, -0.002719f, +0.000560f, - +0.005143f, +0.000290f, +0.002865f, -0.001407f, -0.005403f, +0.003962f, -0.001518f, +0.000782f, +0.005587f, -0.003671f, - +0.001497f, +0.004056f, -0.002602f, +0.001205f, +0.000008f, +0.000102f - }, - { - +0.022740f, -0.122504f, +0.002187f, -0.034534f, -0.027881f, +0.008717f, -0.015158f, -0.013693f, +0.016198f, +0.018461f, - +0.006532f, +0.010914f, -0.027596f, +0.023483f, +0.015290f, -0.009432f, +0.013604f, +0.019378f, -0.034642f, -0.003375f, - -0.002597f, -0.004550f, -0.021104f, +0.027458f, +0.012837f, +0.002890f, -0.016106f, +0.006046f, +0.003803f, +0.021525f, - -0.017097f, -0.027772f, -0.013331f, -0.007006f, +0.021699f, -0.016141f, +0.005426f, -0.002410f, +0.014715f, +0.006066f, - -0.004040f, +0.013733f, +0.004833f, -0.002601f, +0.011190f, -0.009024f, -0.002766f, +0.005039f, +0.008123f, +0.021742f, - +0.003206f, -0.009326f, -0.000533f, -0.006052f, +0.004750f, +0.004069f, +0.000609f, +0.005485f, +0.000268f, +0.012257f, - -0.003103f, -0.001270f, +0.000077f, -0.008916f, +0.007603f, -0.004933f, -0.005595f, -0.009919f, -0.000977f, -0.001633f, - -0.004613f, +0.000694f, +0.002568f, +0.006971f, -0.003274f, +0.002126f, -0.006111f, +0.002724f, +0.010998f, +0.004007f, - -0.008383f, +0.003426f, +0.000353f, -0.001738f, -0.002498f, -0.002263f, +0.002124f, +0.004221f, -0.000968f, -0.007375f, - +0.001191f, +0.003044f, +0.005690f, -0.002527f, -0.000464f, +0.000034f - } - }, - { - { - -0.001352f, -0.090659f, -0.020104f, +0.049967f, -0.025559f, -0.002949f, -0.001262f, +0.012338f, +0.009950f, +0.011038f, - -0.005484f, -0.004123f, -0.011341f, -0.020427f, -0.005560f, +0.030302f, +0.008941f, +0.008754f, -0.004541f, +0.015387f, - +0.021669f, -0.019778f, -0.017112f, +0.008871f, -0.004917f, -0.017386f, -0.005967f, +0.010210f, +0.006936f, +0.016303f, - +0.013282f, -0.011187f, +0.003283f, -0.022346f, -0.001709f, +0.004657f, +0.020719f, +0.004459f, -0.002277f, -0.001400f, - -0.000704f, -0.007380f, +0.007257f, +0.004286f, -0.000368f, -0.007157f, +0.003428f, +0.002840f, -0.001007f, +0.000846f, - +0.000700f, +0.005882f, -0.006544f, +0.001317f, -0.005981f, -0.001913f, -0.001764f, -0.004830f, +0.001086f, +0.003575f, - +0.000270f, +0.004821f, +0.003476f, -0.001011f, +0.008107f, +0.003985f, +0.000453f, +0.002883f, -0.002777f, +0.001129f, - +0.001153f, -0.002782f, +0.000842f, +0.001908f, -0.004538f, +0.003309f, +0.000582f, +0.000430f, -0.001111f, -0.001524f, - +0.002430f, +0.002165f, +0.000388f, +0.003032f, -0.002759f, -0.000457f, -0.004077f, -0.001487f, -0.000210f, +0.000130f, - +0.002790f, +0.000627f, +0.000271f, +0.003585f, -0.000004f, +0.000270f - }, - { - +0.009500f, +0.279015f, -0.054121f, -0.118754f, -0.055858f, -0.004959f, -0.018894f, -0.022364f, +0.008820f, -0.001452f, - +0.020240f, +0.011278f, -0.014677f, -0.004276f, +0.010007f, +0.000476f, +0.010698f, -0.028010f, -0.026386f, +0.001152f, - -0.014836f, +0.002877f, +0.000378f, -0.005776f, -0.004706f, +0.000622f, +0.006242f, -0.001146f, +0.002570f, +0.022587f, - -0.007233f, +0.000850f, +0.018626f, +0.005016f, +0.012121f, +0.010969f, -0.002154f, -0.007041f, +0.006790f, +0.009577f, - -0.007011f, -0.007172f, -0.000025f, -0.009800f, -0.001548f, -0.002388f, +0.004349f, +0.005877f, -0.004787f, -0.004935f, - -0.004664f, -0.002399f, -0.000286f, +0.002720f, +0.001139f, -0.005241f, +0.007147f, -0.002402f, -0.001890f, +0.012978f, - +0.005924f, -0.000911f, +0.004301f, -0.005053f, +0.002494f, -0.003333f, -0.003475f, -0.002509f, -0.000373f, -0.002785f, - +0.008519f, +0.003513f, +0.002453f, -0.001321f, -0.001816f, +0.002877f, -0.002091f, -0.004370f, +0.000592f, -0.002379f, - +0.000562f, +0.001703f, -0.001607f, +0.001752f, -0.000777f, -0.001738f, -0.000494f, +0.001370f, -0.000015f, -0.001587f, - -0.000989f, +0.000795f, -0.001652f, +0.000592f, -0.000421f, -0.000134f - }, - { - -0.004619f, -0.007284f, +0.073463f, -0.044741f, +0.011030f, +0.011374f, +0.015565f, -0.007638f, -0.014397f, +0.017936f, - -0.021068f, -0.005134f, -0.008204f, -0.003431f, +0.014743f, -0.002606f, +0.013784f, -0.010833f, -0.000434f, -0.002886f, - -0.003884f, -0.009593f, -0.012405f, +0.008358f, +0.006105f, +0.004774f, +0.005824f, +0.004199f, -0.004279f, -0.003304f, - +0.007022f, +0.005779f, +0.001003f, -0.006667f, -0.003955f, +0.008895f, -0.013855f, -0.000947f, +0.006763f, +0.009762f, - -0.003170f, +0.006768f, +0.016888f, +0.001462f, -0.011932f, -0.006774f, -0.009999f, +0.001722f, -0.001947f, +0.008766f, - -0.015349f, -0.008351f, -0.004200f, -0.005142f, +0.000003f, +0.002105f, +0.001081f, -0.000798f, -0.001548f, +0.009812f, - +0.003678f, +0.004360f, -0.003078f, -0.002847f, +0.001832f, -0.005778f, +0.000445f, +0.001128f, -0.003400f, -0.000164f, - -0.003198f, -0.000029f, -0.001359f, -0.004220f, -0.002003f, -0.002370f, -0.005070f, -0.001140f, -0.004039f, -0.002576f, - +0.000237f, -0.000666f, -0.001413f, -0.000738f, +0.000270f, -0.002999f, -0.002614f, -0.004133f, +0.000444f, +0.000105f, - +0.000044f, -0.000862f, -0.000415f, +0.002620f, +0.000539f, -0.001759f - }, - { - -0.002214f, -0.066486f, +0.006456f, +0.013674f, -0.002206f, -0.000452f, -0.001096f, +0.003646f, +0.003765f, -0.019816f, - +0.002196f, -0.023043f, -0.013688f, -0.009939f, +0.002583f, -0.026018f, -0.014575f, -0.017038f, -0.027212f, -0.014183f, - -0.024507f, -0.011672f, +0.009630f, +0.003728f, +0.000988f, -0.011406f, -0.001433f, +0.013335f, +0.007283f, +0.003860f, - +0.003328f, +0.005201f, +0.002864f, +0.016755f, +0.000545f, +0.004081f, +0.007044f, -0.014424f, -0.004938f, -0.012945f, - -0.005870f, +0.009235f, -0.012963f, -0.003794f, +0.002265f, -0.006044f, -0.007479f, -0.002419f, +0.002008f, +0.007985f, - -0.000682f, +0.001629f, -0.004720f, +0.008901f, +0.004183f, -0.001340f, -0.002888f, -0.000045f, +0.002232f, +0.004539f, - +0.001491f, -0.000627f, -0.000820f, +0.000395f, +0.002230f, -0.003947f, -0.002382f, +0.005075f, +0.004068f, -0.000853f, - +0.000970f, -0.002304f, -0.001703f, +0.000919f, -0.007404f, -0.003006f, +0.002531f, -0.000709f, +0.000766f, -0.000013f, - -0.008063f, -0.003531f, +0.001082f, -0.000805f, +0.000277f, +0.001851f, -0.001634f, -0.001688f, +0.000587f, -0.000357f, - +0.001968f, -0.001213f, +0.001945f, +0.003402f, +0.003115f, +0.000840f - }, - { - -0.009973f, -0.109242f, +0.012168f, +0.055011f, +0.003772f, +0.001913f, -0.002197f, +0.003732f, -0.012950f, +0.016565f, - +0.011438f, +0.018979f, +0.010917f, +0.009929f, +0.005080f, +0.012264f, +0.027324f, -0.007912f, +0.018742f, -0.012149f, - -0.003102f, +0.007920f, +0.008554f, -0.016474f, -0.002428f, +0.003753f, +0.013829f, -0.000655f, +0.001142f, +0.021597f, - +0.020936f, -0.005694f, +0.017592f, +0.017436f, +0.006519f, -0.004097f, -0.001999f, -0.014599f, -0.002040f, -0.009681f, - -0.018907f, -0.018470f, -0.008957f, -0.004516f, -0.000211f, +0.003640f, -0.006934f, +0.007725f, +0.008658f, -0.004696f, - -0.006307f, -0.002608f, +0.005886f, -0.002134f, +0.010221f, -0.003612f, +0.001998f, -0.004477f, -0.008409f, +0.002300f, - -0.001144f, -0.002666f, +0.005461f, +0.000479f, +0.006632f, -0.002818f, +0.004478f, +0.004837f, -0.003946f, -0.002222f, - -0.000696f, -0.003712f, -0.005955f, +0.000069f, -0.003363f, -0.001470f, +0.001411f, +0.000915f, +0.000184f, -0.001111f, - +0.002030f, +0.000342f, -0.002459f, -0.000502f, +0.003121f, -0.000131f, -0.001491f, -0.001087f, -0.001767f, -0.002495f, - +0.001389f, +0.000696f, -0.000350f, +0.003446f, -0.002311f, -0.000550f - }, - { - -0.000121f, +0.024822f, +0.015934f, +0.006360f, -0.006747f, -0.003432f, +0.001202f, -0.002691f, -0.002846f, -0.008931f, - -0.010417f, -0.008410f, +0.011614f, -0.019109f, +0.036045f, +0.002032f, -0.004873f, -0.030430f, -0.012372f, -0.012561f, - -0.013169f, +0.008691f, +0.004220f, -0.009743f, -0.012679f, +0.002830f, +0.017587f, -0.008753f, -0.018855f, +0.004261f, - -0.011079f, +0.000542f, -0.005146f, -0.006872f, +0.009681f, -0.003817f, +0.000622f, -0.006134f, -0.004649f, +0.002173f, - -0.005773f, -0.004790f, +0.004830f, +0.005281f, +0.003223f, +0.009625f, -0.000203f, -0.001997f, +0.000680f, +0.008973f, - +0.007476f, +0.003306f, +0.006665f, -0.011261f, -0.000366f, -0.002865f, +0.000272f, -0.001194f, +0.000391f, -0.003485f, - +0.002694f, +0.002215f, +0.005663f, +0.000730f, +0.001979f, +0.000427f, +0.000168f, -0.003366f, -0.001543f, -0.006789f, - +0.004088f, +0.001053f, +0.000229f, +0.005158f, +0.004151f, +0.000873f, -0.000677f, +0.001285f, +0.000529f, -0.003672f, - +0.001715f, -0.001561f, -0.001111f, +0.000395f, -0.001918f, -0.003027f, -0.001661f, -0.002352f, +0.003000f, -0.000030f, - -0.003063f, -0.001740f, +0.000530f, -0.001506f, -0.002317f, -0.000562f - }, - { - -0.023020f, -0.071051f, -0.022474f, +0.080458f, +0.002223f, -0.000186f, +0.006137f, -0.022582f, -0.035814f, +0.004431f, - +0.004682f, +0.008881f, +0.004732f, -0.017247f, -0.023012f, +0.000136f, -0.021076f, +0.015770f, -0.005604f, -0.023450f, - +0.007587f, +0.014031f, +0.005096f, -0.013487f, +0.000045f, -0.000642f, -0.002677f, +0.002015f, +0.001649f, +0.002145f, - +0.007926f, +0.015454f, +0.006995f, +0.019021f, -0.009792f, +0.006003f, -0.004799f, +0.002745f, -0.001645f, +0.011787f, - +0.008535f, +0.003723f, +0.003443f, -0.015718f, -0.003968f, -0.001381f, -0.002403f, +0.002510f, -0.003373f, +0.003805f, - -0.004949f, -0.003347f, +0.002412f, -0.011844f, -0.003657f, -0.000117f, +0.003683f, -0.000943f, +0.004130f, -0.000837f, - +0.004424f, +0.004616f, +0.002684f, -0.003402f, -0.003937f, -0.001240f, +0.004005f, -0.000690f, -0.000745f, +0.004060f, - -0.001313f, -0.005988f, +0.000408f, +0.003570f, +0.004058f, -0.000490f, +0.006780f, -0.005033f, +0.001041f, +0.000126f, - -0.001115f, -0.003722f, -0.001684f, +0.000826f, -0.002133f, +0.001397f, -0.001396f, +0.000533f, -0.001894f, +0.001591f, - -0.002290f, -0.000886f, +0.002512f, -0.000838f, -0.000582f, +0.002514f - }, - { - +0.002307f, +0.056206f, +0.048252f, -0.007428f, +0.007780f, -0.008973f, -0.007056f, -0.001539f, +0.006184f, +0.000206f, - -0.004035f, +0.002900f, +0.006721f, -0.003509f, +0.008458f, -0.015528f, -0.007141f, -0.007245f, -0.024580f, -0.016470f, - +0.002911f, -0.002207f, +0.012143f, -0.008179f, +0.002333f, -0.009665f, +0.007530f, -0.000266f, -0.007640f, -0.005697f, - -0.027174f, +0.005115f, +0.002887f, +0.011757f, -0.004258f, +0.000280f, +0.011295f, -0.000722f, +0.018597f, -0.001821f, - -0.012446f, +0.005635f, +0.005243f, +0.005303f, -0.002291f, +0.014483f, +0.002170f, +0.003504f, +0.003662f, -0.000364f, - +0.000638f, +0.008970f, -0.010527f, +0.006906f, -0.001098f, -0.006152f, +0.007518f, -0.003356f, +0.000539f, +0.006373f, - -0.001310f, -0.002623f, -0.001172f, +0.002389f, -0.001042f, -0.002760f, -0.005009f, +0.005517f, -0.001802f, +0.002034f, - +0.000941f, -0.000502f, +0.003182f, -0.005690f, -0.001430f, -0.000045f, -0.000026f, +0.001532f, +0.002703f, -0.000698f, - -0.001984f, -0.002396f, -0.001653f, +0.001491f, -0.004515f, -0.001655f, +0.000956f, -0.000315f, +0.002042f, +0.001047f, - +0.002262f, -0.000318f, -0.000663f, -0.002166f, -0.002235f, -0.004430f - }, - { - -0.021323f, -0.115452f, -0.018529f, +0.072883f, +0.003163f, +0.012651f, -0.007988f, +0.006076f, +0.021394f, +0.003838f, - +0.028180f, -0.012836f, +0.001889f, -0.008934f, +0.033047f, -0.004987f, -0.011024f, +0.018660f, +0.007494f, +0.010760f, - +0.005229f, -0.008646f, -0.007800f, +0.000511f, -0.003511f, +0.000940f, -0.001098f, -0.002703f, -0.024129f, -0.021727f, - -0.002322f, +0.005792f, -0.002707f, +0.006920f, +0.007510f, +0.005296f, -0.001647f, +0.010691f, +0.009983f, -0.001067f, - +0.008037f, +0.008297f, -0.003800f, +0.011326f, +0.010374f, -0.003206f, -0.000406f, -0.001152f, +0.002461f, +0.002230f, - +0.011753f, -0.001201f, +0.005054f, -0.003223f, +0.006472f, -0.006427f, +0.004299f, +0.000613f, +0.001841f, -0.000303f, - -0.006433f, -0.000117f, -0.001258f, +0.000181f, -0.009290f, -0.007375f, +0.005271f, +0.003782f, -0.001422f, -0.000171f, - +0.006229f, -0.001054f, -0.001044f, -0.000951f, -0.004201f, +0.001401f, -0.000948f, -0.001618f, +0.001086f, -0.001101f, - -0.002407f, +0.003479f, +0.001145f, -0.001483f, -0.000770f, -0.000988f, +0.001262f, +0.003444f, -0.000263f, +0.000494f, - -0.000194f, -0.000541f, +0.003978f, +0.003987f, -0.000415f, -0.001107f - }, - { - -0.003040f, +0.006090f, -0.012601f, -0.001727f, +0.025521f, +0.014574f, -0.017476f, +0.011177f, +0.020041f, -0.008940f, - -0.017724f, +0.002814f, -0.008077f, +0.010501f, -0.005973f, +0.008464f, +0.015253f, -0.011794f, +0.025158f, +0.052007f, - -0.027469f, +0.009167f, +0.003813f, -0.006338f, -0.010691f, -0.005055f, +0.003604f, +0.000421f, +0.001265f, -0.003911f, - +0.011341f, +0.012007f, +0.002581f, +0.006349f, +0.000601f, -0.004856f, -0.001202f, +0.005250f, +0.013868f, -0.006981f, - +0.000561f, -0.010329f, +0.001047f, -0.019737f, +0.000917f, +0.005762f, +0.006732f, -0.007520f, -0.000107f, -0.002203f, - -0.000018f, +0.000702f, +0.005297f, +0.001171f, -0.003237f, -0.016853f, -0.009790f, -0.010552f, +0.000252f, -0.004275f, - -0.017658f, +0.003417f, +0.001993f, -0.007189f, -0.007986f, -0.004524f, +0.004413f, +0.010931f, -0.000739f, +0.009497f, - -0.000749f, -0.000310f, -0.002892f, -0.000811f, +0.001849f, +0.003072f, -0.004065f, +0.004483f, -0.001238f, -0.003196f, - +0.000726f, -0.002782f, -0.003540f, +0.001572f, -0.000445f, +0.001940f, +0.003441f, -0.000887f, +0.002379f, -0.000938f, - -0.003152f, +0.002060f, -0.002964f, -0.001179f, +0.002276f, +0.000775f - }, - { - +0.020180f, -0.077264f, +0.003835f, +0.008196f, +0.005719f, -0.018381f, -0.000198f, -0.051291f, -0.010240f, +0.027750f, - +0.009841f, -0.008056f, -0.041790f, -0.031489f, +0.013262f, +0.014759f, -0.009908f, +0.003659f, +0.004030f, -0.006064f, - +0.019658f, -0.001519f, -0.004478f, -0.012936f, +0.000703f, +0.009322f, +0.015307f, +0.012395f, -0.001576f, +0.017214f, - +0.006032f, -0.017669f, -0.009491f, +0.010168f, -0.001559f, -0.015868f, +0.005110f, -0.000201f, -0.001346f, +0.000076f, - +0.009044f, -0.004116f, -0.000084f, +0.001026f, -0.000338f, +0.006280f, +0.008615f, +0.003088f, +0.005024f, +0.011181f, - +0.002647f, +0.007835f, -0.004148f, +0.009838f, -0.007682f, +0.003684f, -0.006710f, +0.015099f, -0.001585f, -0.008430f, - -0.001041f, +0.010924f, -0.000965f, +0.003428f, -0.004041f, +0.000527f, -0.003622f, +0.004525f, +0.002696f, -0.001780f, - -0.000135f, -0.001319f, +0.001156f, +0.004274f, +0.003564f, -0.000250f, -0.001316f, -0.001850f, +0.000877f, +0.000317f, - -0.000288f, -0.006098f, -0.003059f, -0.002424f, +0.000393f, -0.000926f, +0.000496f, -0.000418f, -0.000545f, -0.003593f, - +0.002232f, -0.001714f, +0.003944f, +0.001981f, +0.001868f, +0.002274f - }, - { - -0.002812f, -0.037538f, -0.001723f, -0.010172f, +0.007179f, +0.003799f, -0.006625f, -0.003681f, +0.002444f, -0.006729f, - +0.002031f, -0.017293f, -0.000033f, -0.054047f, +0.016087f, -0.010659f, -0.009057f, +0.000486f, +0.034788f, +0.018941f, - -0.003763f, -0.022366f, -0.006504f, -0.011377f, -0.011096f, -0.017094f, -0.007947f, -0.010859f, -0.032949f, +0.016574f, - +0.032378f, -0.012666f, -0.002265f, +0.021791f, +0.005472f, +0.006759f, -0.005964f, -0.005942f, -0.004070f, -0.007568f, - +0.009542f, +0.003441f, +0.017789f, -0.005924f, +0.004993f, -0.009557f, +0.004099f, +0.017163f, +0.001365f, -0.008036f, - +0.023002f, -0.010531f, +0.003131f, -0.003459f, +0.001865f, +0.004429f, -0.003440f, -0.000407f, -0.001726f, +0.008604f, - -0.003337f, -0.001150f, -0.001914f, +0.002100f, -0.006277f, +0.001671f, -0.002084f, +0.001415f, -0.006780f, -0.000130f, - +0.002057f, +0.003534f, +0.000534f, -0.001358f, +0.002033f, +0.005850f, +0.002603f, +0.001771f, -0.003983f, -0.003940f, - +0.002615f, -0.006608f, -0.004047f, -0.005005f, +0.000568f, -0.002111f, +0.003297f, -0.000743f, +0.005056f, -0.000613f, - -0.001554f, -0.000253f, +0.003917f, -0.000702f, -0.003552f, +0.001275f - }, - { - -0.031140f, -0.052877f, -0.036906f, -0.018560f, +0.019187f, -0.013136f, +0.003389f, +0.010173f, -0.007198f, +0.000071f, - -0.004636f, +0.007908f, +0.022079f, -0.008046f, -0.027027f, -0.022983f, +0.036724f, +0.008882f, +0.039652f, +0.012950f, - -0.009636f, -0.002536f, -0.005231f, +0.006860f, +0.016885f, -0.010491f, +0.001335f, +0.007217f, +0.003280f, +0.007853f, - +0.010074f, +0.003467f, -0.014977f, -0.005696f, -0.007740f, +0.020461f, -0.019315f, -0.005467f, +0.003774f, -0.004069f, - +0.001481f, -0.003792f, +0.002871f, -0.009031f, -0.000307f, -0.009300f, -0.003812f, -0.008254f, -0.012822f, +0.000843f, - +0.012486f, +0.003658f, +0.002235f, -0.000246f, +0.002780f, -0.002308f, -0.006106f, -0.000025f, -0.005288f, -0.013419f, - +0.002210f, -0.002363f, -0.005719f, -0.006012f, -0.009709f, +0.001358f, +0.002809f, -0.000511f, -0.003474f, -0.002510f, - -0.000313f, -0.005035f, +0.005084f, -0.001449f, -0.005182f, -0.004740f, +0.004070f, -0.006853f, +0.000033f, -0.002593f, - -0.001493f, -0.002767f, +0.001833f, +0.001452f, +0.002700f, -0.001220f, -0.000552f, +0.000611f, -0.003051f, +0.000527f, - -0.001997f, -0.003187f, +0.000510f, +0.002941f, +0.002701f, +0.000774f - }, - { - +0.000405f, +0.063496f, +0.007891f, -0.015403f, -0.000447f, +0.004930f, +0.012062f, -0.000142f, +0.010400f, +0.008043f, - +0.002747f, -0.003425f, +0.015515f, -0.019741f, -0.015608f, -0.009442f, -0.038886f, -0.010041f, +0.013332f, -0.006425f, - +0.034407f, +0.008425f, -0.000598f, +0.016272f, +0.007811f, -0.027313f, -0.004349f, -0.013010f, +0.020830f, +0.008191f, - +0.006458f, -0.009221f, -0.004171f, -0.011732f, -0.001494f, -0.009557f, +0.002518f, -0.003348f, -0.001409f, +0.010080f, - -0.005963f, -0.003928f, -0.005186f, -0.007263f, -0.002592f, -0.010552f, -0.002641f, +0.012975f, -0.001707f, -0.001190f, - -0.004350f, +0.009985f, -0.004782f, +0.012100f, +0.004836f, +0.003655f, -0.010062f, +0.008668f, -0.004133f, +0.001581f, - +0.001679f, +0.007216f, +0.004669f, +0.007550f, -0.001384f, -0.000462f, -0.000055f, +0.004666f, -0.002117f, -0.002399f, - +0.001551f, -0.005755f, -0.004421f, -0.001575f, +0.001387f, +0.007073f, +0.003749f, +0.000599f, -0.002200f, +0.001209f, - +0.003142f, +0.001934f, +0.000621f, -0.004691f, -0.001424f, -0.002384f, +0.002672f, -0.000120f, +0.005216f, -0.002299f, - +0.001009f, +0.002183f, +0.003358f, -0.001898f, +0.000410f, +0.001181f - }, - { - -0.025940f, -0.055351f, -0.018909f, -0.017904f, -0.009930f, -0.021777f, +0.000213f, -0.009233f, +0.015381f, +0.004027f, - +0.018450f, -0.018140f, +0.012744f, +0.042040f, -0.033283f, -0.004285f, +0.012669f, +0.013034f, -0.019626f, -0.001073f, - +0.002332f, +0.004021f, -0.016598f, +0.000789f, +0.014224f, +0.004260f, -0.016813f, +0.004807f, -0.000339f, +0.005008f, - -0.002598f, -0.007393f, -0.011379f, -0.013470f, +0.001983f, +0.004015f, +0.000587f, -0.000707f, +0.011597f, +0.004982f, - -0.006962f, +0.017721f, -0.002011f, +0.004621f, -0.005023f, -0.001675f, +0.002441f, +0.001421f, +0.006169f, +0.006847f, - +0.009700f, -0.005904f, -0.004932f, +0.000200f, -0.003245f, +0.001361f, +0.006620f, +0.010318f, +0.002564f, +0.004162f, - -0.000716f, -0.006021f, -0.005916f, +0.004572f, +0.001043f, -0.000871f, -0.002635f, -0.009522f, -0.004949f, -0.003335f, - -0.005228f, +0.003390f, +0.001583f, +0.003512f, -0.001977f, +0.001345f, -0.004800f, +0.008732f, +0.005605f, -0.001832f, - +0.001247f, +0.001011f, +0.002179f, -0.002367f, -0.006020f, +0.000791f, +0.002517f, +0.000665f, +0.002337f, -0.003389f, - -0.001178f, +0.003220f, +0.003527f, -0.002901f, -0.002510f, +0.000048f - } - }, - { - { - +0.000245f, -0.014068f, +0.026797f, +0.065150f, -0.020748f, -0.004243f, +0.001653f, -0.002266f, +0.001209f, +0.005580f, - -0.008129f, -0.018250f, -0.018446f, -0.007815f, +0.002021f, +0.011038f, -0.022833f, -0.009363f, -0.019510f, -0.005111f, - +0.008857f, -0.016132f, -0.040787f, -0.011875f, +0.008412f, -0.000655f, -0.000317f, -0.003435f, -0.006406f, -0.000375f, - +0.009468f, -0.008064f, +0.007110f, -0.014429f, -0.001078f, +0.003389f, +0.014845f, -0.000787f, -0.004465f, -0.006249f, - -0.002049f, -0.007794f, +0.006726f, +0.003885f, -0.001396f, -0.011497f, -0.001331f, +0.001765f, +0.001788f, +0.007061f, - +0.004334f, +0.010216f, -0.003833f, -0.000722f, -0.008354f, +0.003968f, +0.002759f, -0.008644f, -0.001626f, +0.001051f, - -0.005979f, +0.001607f, +0.005387f, +0.000248f, +0.001212f, -0.003603f, +0.000432f, +0.004758f, +0.003995f, +0.002466f, - +0.002882f, -0.005023f, -0.006824f, +0.003644f, -0.002869f, +0.001620f, +0.004139f, +0.004086f, -0.002062f, +0.000349f, - +0.001528f, -0.001789f, +0.000699f, +0.003658f, -0.000486f, +0.002805f, -0.000842f, -0.000416f, +0.000044f, +0.001705f, - +0.003653f, +0.002290f, +0.002577f, +0.003168f, -0.000534f, -0.001094f - }, - { - -0.007616f, +0.293974f, -0.017633f, -0.106164f, -0.032509f, +0.008405f, +0.015694f, +0.024423f, +0.011515f, -0.031116f, - +0.002389f, +0.036281f, +0.011679f, +0.005057f, -0.000198f, -0.000528f, +0.030884f, -0.011745f, -0.001235f, +0.023407f, - -0.003411f, +0.004450f, -0.011100f, -0.017873f, -0.007545f, -0.004735f, +0.015161f, -0.000353f, -0.015807f, +0.019138f, - -0.009005f, +0.001537f, +0.017755f, -0.000559f, -0.000792f, -0.001621f, +0.006755f, +0.013259f, +0.018541f, +0.010075f, - -0.007974f, -0.007055f, +0.005285f, -0.003414f, -0.001104f, -0.004942f, +0.002415f, +0.008235f, +0.007124f, -0.002696f, - -0.001949f, +0.006533f, -0.003443f, -0.006698f, -0.003819f, -0.002584f, +0.002481f, -0.008504f, -0.008719f, +0.000675f, - -0.000643f, -0.003775f, +0.003413f, -0.002702f, +0.004722f, -0.000020f, +0.000194f, -0.005516f, -0.002812f, -0.002265f, - +0.006342f, +0.001992f, -0.001067f, -0.004479f, -0.002691f, +0.005575f, -0.001123f, -0.000190f, +0.004252f, -0.003812f, - -0.002365f, -0.000475f, -0.001022f, +0.001507f, -0.001362f, -0.000561f, +0.001053f, +0.002389f, +0.001497f, -0.001967f, - -0.001315f, -0.000142f, -0.002946f, +0.000925f, +0.000310f, +0.000992f - }, - { - +0.008355f, -0.121090f, -0.030040f, -0.003239f, +0.018980f, -0.004623f, +0.014222f, +0.001379f, -0.005244f, +0.021426f, - +0.005471f, +0.012795f, -0.003502f, +0.008605f, +0.023983f, +0.012503f, +0.021888f, -0.018050f, +0.003872f, +0.021788f, - -0.000049f, -0.004598f, +0.006408f, +0.018338f, +0.010739f, +0.003953f, -0.005770f, +0.005790f, +0.010650f, +0.000975f, - -0.000013f, -0.000411f, -0.000438f, -0.010100f, -0.003461f, +0.013171f, -0.004551f, -0.003717f, +0.001829f, +0.010283f, - -0.002955f, -0.000139f, +0.009695f, +0.004754f, -0.005376f, +0.010773f, +0.005572f, +0.002887f, -0.005968f, +0.006789f, - -0.001070f, +0.006499f, +0.004045f, -0.000946f, +0.005581f, +0.004816f, -0.002252f, -0.004023f, -0.006569f, +0.001961f, - +0.000350f, +0.002630f, -0.005509f, -0.003998f, +0.004729f, -0.003968f, +0.002136f, +0.004580f, -0.003003f, -0.001149f, - +0.000159f, +0.002082f, -0.001863f, -0.000578f, -0.000608f, -0.005120f, -0.004560f, +0.001584f, +0.003690f, +0.005226f, - +0.001035f, -0.002021f, -0.000562f, +0.000590f, +0.004709f, +0.000320f, -0.001344f, -0.002701f, -0.001037f, +0.000610f, - -0.001743f, -0.003473f, -0.000908f, +0.003489f, +0.000854f, -0.003799f - }, - { - +0.003163f, -0.068756f, -0.004152f, +0.016838f, +0.006060f, -0.001439f, -0.002180f, -0.001224f, +0.003049f, -0.019819f, - -0.002744f, -0.014122f, -0.007158f, +0.002353f, +0.025767f, -0.004947f, +0.013532f, +0.007183f, +0.004132f, +0.001230f, - -0.016226f, -0.014778f, +0.010230f, +0.004531f, -0.011114f, -0.010225f, -0.007620f, -0.004453f, +0.003914f, -0.003857f, - +0.004014f, +0.014946f, -0.000034f, +0.013033f, +0.002451f, -0.001861f, +0.012936f, -0.005270f, +0.000672f, -0.004912f, - -0.002523f, +0.014029f, -0.002266f, +0.002547f, +0.011322f, +0.001603f, +0.001176f, -0.001272f, -0.008657f, -0.003069f, - -0.003363f, -0.003102f, -0.008411f, +0.003709f, +0.001973f, -0.001642f, -0.000385f, +0.003791f, -0.001091f, +0.006483f, - +0.001810f, +0.002117f, +0.002891f, -0.001394f, +0.003966f, -0.002844f, -0.007102f, -0.000455f, -0.002767f, -0.002437f, - +0.006120f, +0.002437f, -0.000096f, +0.001211f, -0.005139f, -0.001903f, +0.001223f, -0.003244f, -0.002522f, +0.003347f, - -0.003962f, -0.000482f, -0.000258f, -0.001736f, +0.002040f, +0.001429f, -0.002224f, -0.000544f, +0.000283f, -0.000137f, - +0.002487f, -0.003352f, +0.000583f, +0.000813f, -0.000540f, -0.000581f - }, - { - +0.017885f, -0.063203f, +0.012991f, +0.042167f, -0.007484f, -0.005431f, -0.002440f, +0.014916f, -0.013990f, +0.017422f, - +0.012953f, +0.014663f, +0.003089f, +0.004793f, +0.006352f, -0.011674f, +0.008537f, -0.000324f, +0.041015f, -0.004181f, - -0.003439f, +0.006162f, +0.012114f, +0.002091f, +0.003921f, +0.001426f, -0.001396f, -0.001732f, +0.008660f, +0.005969f, - +0.008183f, -0.006156f, +0.012806f, +0.004892f, -0.000120f, -0.007931f, +0.002763f, +0.009014f, +0.001908f, -0.005755f, - -0.004734f, -0.010044f, -0.000897f, +0.007138f, +0.011674f, +0.006481f, -0.008837f, +0.006017f, +0.004268f, +0.000190f, - -0.000774f, -0.005608f, +0.001460f, -0.002520f, +0.005795f, -0.008074f, -0.004258f, -0.003530f, -0.001903f, +0.006986f, - -0.003580f, -0.001301f, +0.002959f, -0.004740f, +0.006249f, -0.000753f, +0.004468f, +0.002553f, -0.004229f, -0.000928f, - -0.001209f, -0.000932f, +0.000786f, +0.003652f, -0.001767f, -0.002947f, +0.000595f, +0.003815f, +0.000688f, -0.000286f, - +0.001430f, -0.000317f, -0.000549f, +0.001319f, +0.002198f, -0.000135f, -0.001834f, -0.003414f, +0.000982f, -0.000083f, - -0.000206f, -0.002138f, -0.002526f, +0.002047f, -0.002895f, +0.000553f - }, - { - -0.002906f, +0.006029f, +0.004991f, +0.006745f, -0.002844f, -0.001806f, +0.005413f, +0.000579f, -0.000367f, -0.007732f, - -0.007596f, -0.005095f, +0.004240f, -0.009945f, +0.070097f, +0.027067f, +0.032156f, -0.003792f, +0.003055f, -0.000419f, - -0.001362f, +0.017853f, -0.004153f, -0.010112f, -0.000772f, +0.008681f, +0.025045f, +0.005203f, +0.004290f, +0.002130f, - -0.020857f, -0.012207f, -0.012718f, -0.007343f, -0.000303f, -0.006482f, -0.001630f, -0.008053f, -0.002683f, +0.009163f, - -0.005982f, -0.009023f, +0.004160f, +0.004320f, +0.001799f, +0.009457f, +0.004559f, +0.006454f, -0.001777f, +0.006937f, - +0.002743f, -0.000018f, +0.008390f, -0.007957f, -0.005211f, -0.003993f, +0.004484f, -0.002242f, -0.002010f, -0.003515f, - +0.002377f, +0.001875f, +0.003387f, +0.001118f, +0.004862f, -0.000184f, -0.002813f, -0.001330f, +0.000655f, -0.007626f, - +0.003035f, -0.002167f, +0.000176f, +0.005348f, +0.004635f, +0.001542f, -0.001672f, -0.002710f, -0.003517f, -0.004826f, - +0.002248f, -0.000718f, +0.000182f, +0.003730f, -0.000808f, -0.001560f, +0.000952f, -0.000577f, +0.003497f, +0.000409f, - -0.000581f, -0.002442f, -0.002166f, -0.001154f, -0.001704f, -0.002186f - }, - { - +0.030302f, +0.001869f, -0.021688f, +0.078637f, +0.002439f, +0.007165f, -0.000862f, -0.002786f, -0.002352f, -0.013198f, - -0.007319f, +0.013134f, +0.012540f, -0.009745f, -0.020817f, +0.011246f, +0.017413f, +0.019584f, +0.007672f, -0.001935f, - +0.011813f, +0.010430f, +0.003291f, -0.018642f, +0.007422f, +0.003020f, -0.010807f, -0.004198f, +0.005714f, +0.000031f, - +0.014148f, +0.020780f, -0.011998f, +0.008891f, -0.001558f, +0.020359f, -0.004237f, +0.002937f, +0.002331f, +0.002577f, - +0.001752f, -0.000044f, +0.006245f, -0.007636f, +0.011218f, -0.000391f, -0.000982f, +0.007932f, -0.000873f, +0.010388f, - +0.003471f, +0.001677f, +0.001853f, -0.006373f, +0.003184f, +0.001412f, +0.007631f, +0.001236f, +0.005600f, +0.000642f, - -0.001732f, -0.002140f, +0.004041f, -0.000707f, -0.006917f, -0.004909f, -0.003726f, -0.000069f, +0.008151f, +0.006586f, - +0.001353f, -0.004417f, -0.001250f, +0.000608f, +0.004212f, +0.000261f, +0.003950f, -0.006308f, +0.002171f, +0.000280f, - -0.001567f, -0.001117f, -0.003258f, -0.003565f, -0.002689f, +0.002144f, -0.000160f, +0.001510f, -0.002569f, +0.001485f, - -0.003318f, +0.000460f, +0.002218f, -0.001126f, +0.001970f, +0.001576f - }, - { - -0.006558f, -0.043411f, -0.016275f, -0.018264f, +0.009099f, -0.001106f, +0.001022f, +0.005945f, +0.005865f, -0.006670f, - -0.003034f, +0.015628f, -0.003485f, -0.046527f, -0.001903f, +0.012885f, +0.023102f, +0.011067f, -0.013232f, -0.005528f, - -0.009400f, -0.015631f, +0.008251f, -0.015216f, +0.000304f, -0.011471f, +0.002523f, -0.005074f, +0.008924f, +0.012014f, - -0.006948f, +0.015486f, -0.005319f, +0.010415f, +0.003281f, +0.002618f, +0.015928f, -0.005277f, -0.004841f, -0.012012f, - +0.000472f, +0.011390f, +0.004200f, +0.005588f, -0.001464f, +0.011940f, +0.000043f, -0.002230f, +0.001055f, -0.002575f, - +0.002444f, +0.008968f, -0.007087f, +0.003935f, -0.005446f, -0.004872f, +0.007191f, -0.004816f, +0.004588f, +0.010491f, - +0.003437f, +0.001956f, +0.002862f, +0.005262f, -0.003679f, +0.000150f, -0.003479f, +0.004508f, -0.001384f, +0.004543f, - +0.004982f, +0.001502f, +0.003274f, -0.005582f, -0.006007f, -0.001462f, +0.000445f, +0.001658f, -0.000448f, -0.005029f, - -0.002445f, +0.000407f, +0.001421f, +0.001047f, -0.005230f, -0.000702f, -0.000161f, -0.002697f, +0.000548f, -0.000088f, - +0.000232f, -0.002310f, -0.001535f, -0.000479f, -0.000021f, -0.003015f - }, - { - +0.031972f, -0.044615f, -0.009200f, +0.080944f, -0.008678f, +0.004819f, -0.007966f, +0.003097f, +0.016650f, -0.017342f, - +0.019485f, -0.007342f, -0.011805f, -0.015859f, +0.030061f, +0.003036f, -0.014318f, +0.002162f, +0.001638f, -0.001607f, - -0.006251f, -0.017565f, -0.009949f, +0.005307f, +0.007227f, +0.008088f, -0.006978f, +0.004882f, -0.012619f, -0.004614f, - -0.005491f, -0.007586f, -0.001434f, +0.003457f, +0.008341f, +0.009811f, -0.001789f, -0.004132f, -0.000411f, -0.003673f, - -0.000898f, -0.001541f, -0.006491f, +0.005745f, +0.006995f, -0.003814f, -0.001299f, -0.000762f, +0.003408f, -0.006024f, - +0.004911f, -0.000056f, +0.004186f, -0.007602f, +0.008406f, -0.002502f, +0.000563f, -0.003735f, -0.003571f, +0.003126f, - -0.005865f, +0.001101f, +0.000916f, +0.003974f, +0.000113f, +0.000721f, +0.002029f, -0.000140f, -0.001958f, -0.001436f, - +0.003691f, -0.000113f, +0.000172f, +0.002972f, -0.000638f, +0.002684f, -0.000967f, -0.002473f, -0.000555f, +0.001633f, - -0.001275f, -0.000572f, -0.000082f, +0.000048f, +0.000047f, -0.000699f, -0.000916f, -0.000619f, -0.004050f, -0.000636f, - -0.000813f, -0.001076f, -0.000098f, +0.002155f, +0.001211f, -0.001447f - }, - { - +0.007257f, -0.013929f, -0.016307f, +0.001469f, +0.012282f, -0.017963f, -0.042032f, -0.004732f, +0.014056f, +0.003092f, - -0.002883f, +0.016219f, -0.000582f, +0.030104f, +0.009931f, -0.002086f, +0.003750f, -0.012067f, -0.011128f, +0.019531f, - -0.025480f, +0.005451f, +0.007079f, -0.020279f, -0.017411f, +0.004528f, -0.005805f, -0.007415f, +0.006186f, -0.007960f, - +0.011473f, +0.014184f, -0.007098f, -0.011243f, -0.012060f, -0.000463f, -0.003158f, -0.002472f, +0.012044f, -0.001175f, - -0.001311f, -0.010062f, +0.011046f, -0.003490f, +0.007294f, -0.000578f, +0.001630f, -0.008929f, +0.003694f, -0.000457f, - +0.000062f, +0.002862f, -0.003946f, +0.000100f, +0.007654f, -0.012496f, -0.002181f, -0.002649f, +0.003601f, +0.003600f, - -0.010258f, +0.006076f, +0.002501f, -0.006755f, -0.005454f, +0.002827f, +0.000828f, +0.000884f, -0.010197f, +0.001659f, - -0.001434f, +0.000778f, -0.001345f, +0.003823f, +0.000835f, +0.000097f, +0.000009f, +0.004899f, -0.003186f, -0.003352f, - -0.001032f, -0.000548f, +0.000111f, +0.000840f, -0.002273f, +0.001675f, +0.000741f, -0.002990f, +0.004130f, +0.000207f, - -0.003729f, +0.001299f, -0.002687f, -0.001795f, +0.000663f, +0.000293f - }, - { - -0.021326f, -0.108604f, -0.004676f, -0.007831f, +0.013048f, +0.001451f, +0.025859f, -0.008861f, +0.013623f, +0.021033f, - -0.000946f, -0.000077f, -0.010249f, -0.011949f, -0.008337f, -0.003370f, -0.019506f, -0.011768f, -0.006622f, -0.019653f, - +0.009879f, -0.003429f, +0.001895f, -0.016324f, -0.009123f, +0.006285f, +0.001242f, -0.000560f, -0.011019f, -0.009505f, - -0.010740f, -0.019453f, -0.007070f, -0.008147f, +0.000947f, +0.014918f, +0.024147f, +0.002407f, +0.010441f, -0.000738f, - -0.007277f, -0.013719f, +0.005655f, +0.005082f, -0.000921f, +0.006657f, -0.000242f, -0.006392f, +0.004602f, +0.003908f, - -0.014594f, -0.001632f, -0.007296f, +0.010765f, -0.001216f, +0.010621f, -0.006112f, +0.007056f, -0.000182f, -0.004265f, - -0.006779f, +0.007023f, +0.003492f, +0.003892f, -0.006895f, +0.000224f, -0.002345f, +0.002803f, -0.001659f, -0.003136f, - +0.002248f, +0.001290f, +0.000112f, -0.000857f, +0.002499f, -0.001207f, -0.000953f, -0.000506f, +0.000546f, -0.001584f, - +0.004466f, -0.001872f, -0.001696f, -0.001835f, -0.000476f, -0.002494f, -0.001559f, -0.002931f, -0.001523f, -0.001473f, - +0.001095f, -0.001904f, +0.004342f, +0.000479f, +0.001717f, +0.002037f - }, - { - +0.004422f, -0.050168f, -0.016994f, -0.007784f, +0.002928f, +0.002439f, +0.007551f, -0.004839f, -0.000581f, +0.000891f, - +0.024675f, -0.006597f, +0.012822f, -0.051586f, +0.004134f, -0.010013f, -0.004238f, -0.000878f, +0.013329f, +0.003110f, - +0.007279f, +0.004930f, +0.003411f, +0.000450f, -0.003681f, -0.011652f, +0.020663f, +0.026289f, -0.001962f, +0.012668f, - +0.026701f, -0.003379f, +0.004314f, +0.022370f, +0.003935f, +0.001098f, -0.009927f, +0.010163f, +0.000718f, -0.005088f, - +0.009580f, +0.001426f, +0.014600f, -0.012020f, +0.002219f, -0.013019f, -0.003176f, +0.012869f, -0.000217f, -0.016454f, - +0.016804f, +0.001661f, +0.016949f, +0.001172f, -0.000640f, +0.006977f, +0.003911f, +0.007953f, +0.001862f, +0.005582f, - -0.001860f, +0.001020f, -0.006579f, +0.002792f, -0.004362f, +0.002637f, +0.000685f, +0.002594f, -0.006149f, +0.000340f, - -0.005839f, -0.003576f, -0.003097f, -0.000195f, +0.002778f, +0.000744f, +0.001443f, +0.002073f, -0.000465f, +0.001835f, - -0.000488f, -0.003783f, +0.002735f, -0.000978f, +0.001864f, -0.003451f, +0.002317f, +0.000080f, +0.003549f, -0.003254f, - -0.001873f, +0.000520f, +0.005458f, +0.000517f, -0.003214f, +0.002024f - }, - { - +0.027244f, +0.062653f, -0.013275f, -0.012378f, +0.014916f, -0.047121f, -0.007986f, -0.006053f, -0.022401f, -0.010362f, - -0.013663f, +0.016086f, +0.014789f, -0.030105f, +0.005225f, -0.004968f, +0.015134f, -0.002761f, +0.031201f, -0.001274f, - -0.015345f, -0.004712f, +0.006003f, +0.009177f, -0.000271f, -0.016036f, -0.006929f, -0.012758f, -0.006541f, +0.003194f, - -0.008306f, -0.009844f, -0.011727f, -0.000025f, +0.001280f, +0.018834f, -0.011952f, +0.012855f, -0.011019f, -0.010661f, - +0.000975f, -0.015195f, +0.003094f, +0.011582f, +0.018869f, +0.002193f, +0.006970f, +0.005893f, +0.000897f, +0.002346f, - +0.009253f, -0.002881f, -0.008862f, -0.006438f, +0.000213f, -0.001403f, +0.000402f, -0.002114f, -0.006639f, -0.007288f, - +0.003663f, +0.000103f, -0.005548f, -0.009784f, -0.006959f, +0.002450f, -0.001476f, +0.002488f, +0.000839f, -0.004780f, - +0.002346f, -0.004302f, -0.000115f, -0.005413f, -0.005300f, -0.000053f, +0.007516f, +0.000528f, +0.003566f, -0.004229f, - +0.000664f, +0.001791f, +0.000640f, -0.003135f, +0.001484f, +0.000167f, +0.001665f, +0.002375f, +0.000415f, +0.002576f, - -0.000287f, -0.001120f, -0.001123f, -0.000127f, +0.000167f, -0.000654f - }, - { - +0.003043f, +0.053434f, +0.006697f, -0.000761f, +0.013583f, +0.005198f, +0.002163f, -0.019413f, -0.009436f, +0.008950f, - +0.009593f, -0.008150f, -0.004859f, +0.057312f, +0.146504f, +0.040140f, -0.041345f, -0.022146f, +0.011050f, -0.019553f, - +0.023440f, +0.020899f, +0.004970f, -0.009580f, -0.005466f, -0.027085f, +0.000444f, -0.003055f, +0.013410f, -0.008059f, - +0.008432f, -0.011773f, -0.000362f, -0.005536f, +0.008694f, -0.000624f, +0.012597f, +0.001106f, -0.018864f, +0.003938f, - +0.002787f, -0.012531f, -0.012902f, -0.001152f, -0.000286f, -0.011449f, -0.002076f, +0.011143f, -0.011117f, -0.004143f, - -0.001250f, +0.003660f, -0.007067f, +0.008653f, +0.006320f, +0.001703f, -0.012513f, +0.005571f, -0.003309f, +0.003763f, - -0.007687f, +0.001222f, +0.003833f, -0.002107f, -0.006309f, -0.000838f, +0.000495f, +0.004571f, -0.004792f, -0.002144f, - +0.001287f, +0.000838f, +0.000289f, -0.003195f, -0.000516f, +0.004080f, +0.003324f, +0.000123f, -0.001210f, -0.001125f, - -0.001867f, +0.000438f, -0.000500f, -0.003767f, +0.001629f, -0.000955f, +0.002267f, -0.003028f, +0.001301f, -0.001541f, - +0.000247f, +0.000003f, +0.000546f, -0.005216f, -0.002132f, +0.000469f - }, - { - +0.026735f, +0.031288f, -0.002974f, -0.006824f, -0.004170f, -0.013950f, +0.011532f, +0.002059f, +0.006090f, -0.029031f, - -0.028275f, -0.037291f, +0.011784f, -0.011819f, -0.088485f, -0.012323f, +0.034292f, +0.030290f, +0.010350f, +0.029581f, - +0.011878f, +0.005004f, +0.001352f, +0.006735f, +0.026741f, +0.012338f, -0.015733f, +0.016495f, +0.007052f, +0.008444f, - +0.030838f, +0.017473f, -0.017911f, -0.006537f, +0.005844f, +0.000417f, -0.010016f, -0.003186f, -0.008354f, -0.005565f, - -0.008116f, +0.005375f, -0.010838f, -0.002865f, -0.012073f, -0.004017f, +0.004086f, -0.002171f, -0.002174f, -0.010004f, - -0.001678f, -0.011466f, -0.005279f, -0.000309f, -0.009145f, +0.001148f, +0.008472f, +0.005005f, -0.000930f, -0.005817f, - -0.005180f, -0.008613f, -0.004948f, +0.008810f, -0.001157f, +0.000486f, -0.000715f, -0.004680f, -0.003026f, -0.000576f, - -0.003119f, +0.003072f, +0.000514f, -0.001704f, -0.003354f, +0.004596f, -0.001313f, +0.007905f, -0.002778f, -0.006430f, - +0.002881f, +0.000034f, +0.002011f, -0.001730f, -0.005185f, +0.001395f, +0.004191f, +0.000159f, +0.003630f, +0.001044f, - -0.000678f, +0.000536f, -0.000323f, -0.003476f, -0.001146f, +0.000327f - } - }, - { - { - +0.002141f, +0.058218f, -0.016126f, +0.015408f, +0.002458f, -0.004789f, +0.003331f, -0.008028f, -0.012076f, +0.005837f, - +0.012799f, -0.036831f, +0.003183f, -0.008745f, -0.006536f, +0.004108f, -0.016613f, -0.001759f, -0.001840f, -0.018749f, - -0.005244f, -0.010422f, -0.023884f, -0.013142f, +0.014564f, -0.009334f, +0.006058f, -0.025888f, +0.007273f, -0.006025f, - -0.007141f, +0.002197f, +0.002904f, +0.002643f, -0.000352f, -0.011392f, +0.008480f, +0.006069f, -0.008357f, -0.010972f, - +0.004683f, -0.002619f, +0.006741f, -0.004043f, +0.001512f, -0.012293f, -0.003597f, +0.006969f, -0.005265f, +0.011418f, - +0.008416f, +0.004677f, +0.002739f, -0.004189f, -0.008997f, +0.002225f, -0.000848f, -0.005069f, +0.004935f, -0.001796f, - -0.003291f, -0.001403f, +0.000467f, +0.002912f, -0.002362f, -0.004775f, +0.004417f, -0.003583f, +0.010178f, +0.003184f, - -0.000002f, -0.004177f, -0.006014f, +0.003474f, -0.002964f, -0.000768f, +0.004205f, +0.005897f, +0.000947f, -0.001229f, - +0.000833f, -0.000778f, +0.002753f, -0.000657f, +0.000024f, +0.002540f, +0.000095f, +0.001882f, -0.002057f, +0.003952f, - +0.002676f, +0.001606f, +0.004102f, -0.000000f, -0.000032f, +0.001169f - }, - { - +0.007317f, +0.237430f, +0.033904f, -0.161933f, +0.031218f, +0.000566f, +0.019346f, +0.033601f, -0.003239f, -0.016472f, - -0.000577f, +0.047694f, -0.000383f, -0.001986f, -0.004823f, +0.002085f, +0.012025f, +0.005409f, +0.024144f, +0.004625f, - -0.010788f, +0.004471f, -0.010975f, -0.009028f, -0.002251f, -0.009598f, +0.006464f, +0.010912f, -0.015429f, +0.007776f, - -0.000950f, +0.004891f, +0.003836f, -0.003482f, +0.001621f, +0.004469f, +0.004795f, +0.014123f, +0.016509f, +0.002852f, - -0.001885f, -0.010978f, -0.004018f, +0.001668f, +0.007750f, -0.008904f, +0.003446f, -0.000342f, +0.019578f, -0.011567f, - -0.003536f, +0.006057f, -0.003403f, -0.003437f, -0.002377f, -0.000314f, -0.005362f, -0.005690f, -0.002245f, -0.006161f, - +0.001824f, -0.008650f, -0.002449f, +0.002885f, +0.001010f, +0.006024f, +0.001005f, -0.002379f, -0.007322f, +0.003270f, - -0.002632f, +0.001492f, -0.002443f, +0.000880f, -0.003342f, +0.004490f, +0.000176f, +0.001764f, +0.001140f, +0.000826f, - -0.003458f, -0.002609f, +0.001539f, -0.002619f, +0.002156f, -0.000838f, +0.002607f, -0.000648f, +0.000724f, -0.001595f, - -0.000493f, -0.000509f, +0.000219f, +0.002928f, -0.001134f, -0.001329f - }, - { - -0.007839f, -0.151081f, +0.016031f, +0.063568f, -0.056096f, +0.015111f, -0.001031f, -0.011990f, +0.020499f, +0.001629f, - +0.008320f, +0.020093f, -0.003100f, +0.017618f, +0.018170f, +0.016606f, +0.021841f, -0.014833f, +0.001374f, +0.049415f, - -0.024645f, -0.005746f, +0.019716f, +0.007774f, +0.007514f, +0.006151f, -0.012420f, +0.018230f, +0.009989f, -0.001436f, - -0.005004f, +0.002693f, +0.006178f, -0.016725f, +0.005804f, -0.003180f, +0.018145f, -0.014805f, +0.004793f, +0.004600f, - +0.008873f, -0.007611f, -0.004542f, +0.014147f, -0.005524f, +0.009697f, +0.010273f, -0.001110f, -0.000578f, -0.003794f, - +0.011698f, +0.006335f, +0.006710f, +0.000071f, +0.001867f, +0.004392f, -0.001037f, -0.001787f, -0.003918f, +0.000025f, - +0.000644f, +0.001449f, -0.007385f, -0.001215f, +0.005105f, -0.001729f, +0.000043f, -0.000402f, +0.004212f, -0.005505f, - +0.000402f, +0.002191f, -0.000657f, +0.001376f, +0.001779f, -0.004531f, -0.002516f, -0.003980f, +0.007005f, +0.006159f, - -0.000047f, -0.005655f, +0.000199f, +0.001636f, +0.004410f, +0.002178f, -0.004007f, +0.000452f, -0.003924f, +0.004126f, - -0.003818f, -0.002500f, -0.000888f, +0.002553f, +0.000650f, -0.002057f - }, - { - -0.000253f, -0.053200f, -0.006889f, +0.013469f, +0.003832f, -0.001180f, -0.000770f, -0.009605f, +0.004088f, -0.001739f, - -0.015785f, -0.018885f, +0.000689f, -0.013582f, +0.031017f, +0.013743f, -0.008594f, +0.006933f, +0.032503f, -0.012305f, - -0.013261f, -0.006080f, -0.012117f, +0.006131f, -0.002146f, -0.013285f, -0.013530f, -0.010193f, +0.013410f, -0.000488f, - +0.012595f, +0.009999f, -0.001265f, +0.011833f, +0.005059f, -0.005932f, +0.004602f, -0.007762f, +0.011093f, +0.001050f, - -0.003268f, +0.001033f, +0.008567f, +0.004803f, +0.004701f, +0.004329f, +0.005018f, -0.003950f, -0.002828f, -0.007975f, - -0.003135f, -0.006492f, +0.001237f, -0.001020f, -0.001711f, -0.002839f, +0.002266f, +0.004126f, -0.003826f, +0.005787f, - +0.002782f, +0.003593f, +0.002129f, -0.000307f, -0.000066f, +0.001200f, -0.008813f, +0.001666f, -0.006303f, +0.001474f, - +0.004714f, -0.000829f, -0.000479f, +0.001096f, -0.002683f, +0.002024f, -0.006135f, -0.000177f, -0.002970f, +0.001419f, - +0.001209f, +0.001941f, -0.008041f, +0.001139f, -0.000552f, +0.000701f, -0.000528f, +0.000245f, -0.002075f, +0.001511f, - +0.001661f, -0.000963f, -0.001310f, -0.000289f, -0.001992f, +0.001872f - }, - { - -0.024490f, -0.018803f, +0.020645f, +0.055123f, -0.014883f, -0.007046f, +0.000199f, +0.006319f, -0.002353f, +0.009169f, - +0.015881f, +0.025483f, +0.008671f, -0.009449f, +0.006961f, -0.013047f, +0.002119f, -0.002751f, +0.035258f, -0.005052f, - +0.009029f, -0.008550f, +0.017317f, +0.019518f, -0.008793f, +0.008623f, -0.010036f, +0.009909f, +0.003633f, -0.006908f, - +0.000206f, +0.010277f, +0.005062f, +0.004705f, +0.000501f, -0.004775f, -0.001334f, +0.013568f, +0.001431f, -0.009343f, - +0.003227f, +0.006449f, -0.002070f, +0.009699f, +0.008853f, +0.005070f, -0.012032f, +0.007182f, -0.002437f, +0.008868f, - -0.007703f, -0.001810f, -0.004833f, +0.005825f, -0.004380f, -0.000923f, -0.010241f, +0.000882f, -0.004542f, +0.007074f, - -0.000607f, -0.000999f, -0.001652f, +0.000863f, -0.000776f, +0.003772f, +0.004062f, -0.002558f, +0.000636f, -0.000955f, - -0.005223f, +0.002967f, +0.001153f, -0.000263f, +0.003361f, -0.002507f, +0.001820f, +0.000209f, +0.000666f, +0.001288f, - -0.002994f, +0.001234f, +0.002919f, -0.000569f, -0.002703f, +0.001628f, -0.000419f, -0.001877f, +0.000114f, +0.001614f, - -0.002884f, -0.001596f, -0.002799f, +0.002006f, -0.002132f, +0.002452f - }, - { - -0.000279f, +0.007443f, -0.013502f, -0.002138f, +0.009889f, -0.000239f, +0.000154f, -0.000214f, -0.001714f, -0.004484f, - +0.004934f, -0.007514f, -0.007397f, -0.020801f, +0.084137f, +0.035220f, +0.025858f, +0.001684f, +0.000036f, +0.007756f, - -0.002526f, +0.019999f, -0.011970f, -0.003110f, +0.015035f, +0.001837f, +0.019184f, +0.002371f, +0.014812f, -0.015979f, - +0.009105f, -0.017541f, -0.003697f, +0.000878f, -0.004781f, -0.007189f, -0.003463f, -0.005742f, +0.002347f, +0.005131f, - -0.006188f, -0.004242f, -0.006385f, -0.002695f, +0.004140f, +0.008194f, +0.010633f, +0.003456f, +0.001183f, +0.001136f, - +0.003751f, +0.000149f, +0.005411f, -0.001530f, -0.008687f, -0.005259f, +0.007414f, -0.001083f, -0.005949f, +0.001444f, - -0.000034f, -0.000721f, -0.001007f, +0.005488f, +0.001216f, +0.002497f, -0.001805f, -0.000825f, -0.001653f, -0.001663f, - +0.000181f, -0.002522f, -0.000969f, +0.003229f, +0.003867f, -0.000676f, +0.005063f, -0.005157f, -0.006931f, -0.001570f, - -0.003355f, +0.001537f, +0.000966f, +0.005394f, +0.000846f, -0.000626f, -0.001945f, -0.001744f, +0.002519f, +0.000968f, - +0.002189f, -0.002712f, -0.003151f, -0.000817f, +0.000548f, -0.002323f - }, - { - -0.031000f, +0.070114f, -0.000492f, +0.082610f, -0.003048f, +0.003957f, -0.010588f, -0.004652f, +0.030959f, -0.025693f, - +0.005253f, +0.005581f, +0.005745f, -0.002465f, -0.019575f, +0.007483f, +0.058382f, -0.011384f, +0.009546f, +0.010160f, - +0.008702f, -0.001005f, +0.005695f, -0.019201f, +0.020159f, +0.011770f, -0.004114f, -0.015469f, +0.001061f, -0.003858f, - +0.014210f, +0.018758f, +0.000540f, -0.003052f, +0.006616f, +0.014533f, -0.005922f, +0.008060f, +0.006437f, -0.003546f, - -0.001110f, -0.003126f, -0.001081f, -0.008118f, +0.019064f, -0.004790f, +0.004204f, +0.006817f, -0.005239f, +0.013282f, - +0.003298f, +0.001229f, +0.000754f, -0.004390f, +0.006071f, -0.001986f, +0.005876f, -0.000080f, +0.004660f, +0.003738f, - -0.002305f, +0.000617f, -0.001616f, +0.002469f, -0.006360f, -0.004458f, -0.003926f, +0.000170f, +0.010614f, +0.004499f, - -0.001466f, +0.000346f, +0.002055f, -0.001458f, +0.001523f, +0.004123f, -0.003683f, +0.000788f, -0.002136f, +0.003281f, - -0.003676f, +0.000642f, -0.006242f, -0.001505f, -0.000836f, +0.002124f, +0.000010f, +0.000702f, -0.002538f, +0.000637f, - -0.000619f, +0.000393f, +0.000157f, +0.000385f, +0.002574f, -0.001552f - }, - { - -0.000689f, -0.071311f, -0.024826f, -0.001798f, -0.008283f, +0.010476f, +0.004003f, +0.006736f, -0.001905f, -0.004404f, - -0.007441f, +0.016129f, -0.008130f, -0.024835f, +0.004959f, +0.001853f, +0.039561f, -0.012510f, -0.021603f, +0.003713f, - -0.006561f, -0.006882f, -0.002762f, -0.020127f, +0.002366f, -0.008140f, +0.008826f, -0.013953f, -0.000595f, +0.007450f, - +0.013536f, +0.012927f, -0.005796f, +0.005608f, +0.011459f, -0.003432f, +0.009021f, -0.006652f, -0.016308f, -0.002167f, - +0.005698f, -0.001890f, +0.011927f, -0.001847f, +0.004903f, +0.005129f, +0.000431f, +0.001266f, -0.003085f, -0.000867f, - +0.008130f, +0.004976f, +0.001282f, -0.003896f, -0.001585f, -0.002398f, -0.000801f, -0.003241f, +0.005347f, +0.012406f, - +0.002074f, +0.004646f, -0.001149f, +0.006593f, -0.006072f, +0.006095f, -0.003386f, -0.000846f, +0.000769f, +0.003344f, - +0.001786f, +0.003637f, -0.001156f, +0.001046f, -0.005007f, -0.004582f, +0.000279f, +0.002308f, -0.000597f, -0.003029f, - -0.001069f, -0.000837f, -0.001221f, +0.001153f, -0.000452f, -0.003362f, -0.002511f, +0.000833f, +0.000278f, +0.000498f, - -0.000213f, -0.003015f, -0.002509f, -0.000023f, +0.001261f, -0.003172f - }, - { - -0.038860f, +0.035952f, +0.017102f, +0.097596f, -0.022765f, -0.002401f, +0.006166f, -0.010894f, +0.006965f, -0.003084f, - -0.030230f, +0.039614f, -0.027867f, +0.004132f, -0.017271f, -0.012578f, +0.030685f, -0.008582f, -0.005834f, -0.011416f, - -0.012314f, -0.013880f, -0.003588f, +0.008509f, -0.000172f, +0.021979f, -0.014853f, +0.000936f, -0.009050f, -0.000300f, - -0.002106f, -0.004623f, -0.006403f, -0.004364f, +0.003388f, +0.008849f, +0.003223f, -0.006146f, +0.002366f, -0.001269f, - -0.002285f, -0.000468f, -0.006700f, +0.001533f, -0.000772f, +0.001296f, +0.002609f, -0.005715f, +0.009498f, -0.002120f, - -0.004210f, +0.004567f, -0.003737f, +0.003147f, -0.001982f, +0.006248f, -0.012607f, +0.002739f, -0.011138f, +0.012673f, - -0.002276f, -0.004791f, -0.001364f, +0.001205f, +0.003202f, +0.003576f, -0.000204f, +0.001232f, -0.001115f, +0.000962f, - -0.000796f, +0.004375f, +0.000456f, -0.001001f, +0.002759f, -0.001975f, +0.000981f, -0.001271f, -0.001621f, +0.000864f, - +0.000383f, -0.001732f, +0.001224f, +0.001472f, -0.001025f, -0.000239f, -0.000116f, -0.002944f, -0.004001f, +0.001627f, - -0.003676f, +0.000018f, -0.002727f, +0.003360f, +0.001675f, -0.001302f - }, - { - -0.006894f, -0.026370f, +0.030270f, -0.007668f, -0.004044f, -0.040667f, -0.001410f, -0.010666f, +0.001050f, +0.019325f, - -0.013586f, -0.003238f, +0.027467f, +0.011833f, +0.027012f, -0.006634f, -0.007992f, -0.005537f, -0.015706f, -0.003091f, - +0.003550f, -0.011244f, +0.006908f, -0.030323f, -0.022588f, +0.008425f, -0.011548f, +0.005975f, +0.010776f, -0.000549f, - +0.004634f, +0.010294f, -0.004726f, -0.012867f, -0.011830f, +0.002603f, +0.000147f, +0.001507f, +0.005864f, +0.008884f, - -0.008785f, -0.002448f, +0.005201f, +0.000095f, +0.006151f, +0.007204f, -0.004537f, -0.005625f, -0.009082f, +0.010535f, - -0.000422f, +0.001478f, -0.002006f, -0.005659f, +0.004587f, -0.007925f, +0.000611f, +0.007874f, -0.005401f, +0.007176f, - +0.000575f, +0.002697f, -0.001112f, -0.001525f, -0.004829f, +0.005537f, -0.003651f, -0.006014f, -0.001798f, -0.002364f, - +0.000422f, -0.003169f, +0.002669f, +0.005197f, -0.003021f, +0.000427f, -0.000033f, +0.000496f, +0.004665f, -0.003870f, - -0.000388f, -0.000160f, -0.001550f, +0.001569f, -0.003745f, +0.003791f, -0.001481f, -0.000341f, +0.000384f, +0.002219f, - -0.001080f, -0.000258f, -0.003525f, +0.002008f, -0.001899f, -0.001323f - }, - { - +0.021500f, -0.127454f, -0.055492f, -0.023221f, +0.039214f, +0.040737f, +0.003892f, +0.006992f, -0.004379f, +0.003439f, - -0.011872f, +0.007718f, +0.021834f, -0.012115f, +0.003343f, -0.023179f, -0.009541f, -0.030827f, +0.003927f, -0.002981f, - -0.004506f, +0.001404f, -0.000548f, -0.028830f, +0.003329f, -0.005650f, +0.011277f, -0.001690f, -0.016047f, -0.016610f, - -0.007736f, -0.013640f, -0.005142f, -0.014244f, +0.011057f, +0.005922f, +0.021641f, -0.001860f, +0.016358f, -0.000641f, - -0.007998f, -0.015604f, +0.014154f, -0.001418f, +0.004319f, +0.006459f, -0.005856f, -0.003901f, +0.000770f, +0.000649f, - -0.014159f, -0.007494f, -0.005760f, +0.006623f, +0.001925f, +0.007040f, +0.001177f, -0.003966f, +0.004167f, +0.000536f, - -0.000159f, -0.004351f, +0.004079f, +0.002195f, -0.002583f, -0.001644f, -0.000930f, +0.002395f, -0.000755f, -0.003966f, - +0.004074f, -0.000128f, -0.001773f, -0.002748f, +0.003741f, -0.000958f, -0.000184f, -0.000184f, +0.002893f, -0.002850f, - +0.001979f, +0.000332f, -0.003303f, +0.001746f, -0.000416f, -0.002528f, -0.003716f, -0.001381f, -0.004767f, +0.002168f, - -0.001399f, +0.002514f, +0.001614f, -0.000991f, +0.001816f, -0.000048f - }, - { - -0.002394f, -0.043604f, -0.009018f, -0.005631f, -0.012881f, +0.010326f, +0.007849f, -0.005465f, +0.001999f, -0.002938f, - +0.019549f, +0.007110f, -0.015659f, -0.016561f, +0.005394f, -0.003371f, +0.002012f, +0.013046f, -0.007304f, -0.000349f, - +0.000680f, +0.015577f, -0.009251f, +0.003972f, +0.011304f, -0.018908f, +0.023948f, +0.026957f, +0.036160f, -0.013005f, - -0.002054f, +0.017427f, +0.012682f, +0.012876f, -0.011493f, +0.011525f, -0.008570f, +0.016565f, -0.005425f, +0.001450f, - +0.000671f, +0.005640f, +0.001773f, +0.002262f, +0.001109f, -0.001913f, -0.006480f, -0.005562f, +0.003153f, -0.004129f, - +0.008218f, +0.005914f, +0.008487f, +0.000749f, -0.001007f, +0.009439f, +0.007762f, +0.003877f, +0.005529f, +0.002941f, - -0.001552f, +0.003677f, -0.008612f, +0.000475f, +0.000819f, +0.000750f, -0.000986f, -0.001162f, +0.001336f, -0.000110f, - -0.007371f, -0.007831f, -0.004804f, +0.006380f, -0.000951f, -0.000213f, +0.001550f, +0.000578f, -0.002429f, +0.006072f, - -0.002807f, +0.000013f, +0.000295f, +0.000480f, +0.003843f, -0.003800f, +0.004336f, +0.000855f, -0.001124f, -0.001752f, - -0.000061f, +0.000781f, +0.001288f, +0.000637f, +0.000260f, +0.000597f - }, - { - -0.009445f, +0.127947f, -0.009894f, -0.030695f, -0.017873f, -0.014443f, -0.012185f, -0.005693f, -0.021477f, -0.024077f, - +0.011129f, +0.002539f, +0.025959f, -0.032257f, +0.016773f, -0.004448f, +0.004443f, -0.002450f, +0.015202f, -0.008926f, - +0.005859f, -0.010994f, +0.000786f, +0.018684f, -0.007261f, +0.002732f, -0.013944f, -0.026127f, -0.006051f, +0.002116f, - -0.001897f, -0.017488f, +0.002205f, -0.004726f, +0.007757f, +0.012699f, -0.020998f, +0.022733f, -0.009375f, -0.007982f, - -0.001887f, -0.015208f, -0.000180f, +0.014906f, +0.019861f, +0.011278f, +0.005652f, +0.002650f, +0.002510f, -0.000884f, - +0.009503f, -0.005471f, -0.006179f, -0.003454f, -0.006687f, +0.001929f, -0.000526f, -0.000018f, -0.002483f, -0.006864f, - -0.000317f, +0.003203f, -0.007847f, -0.012820f, +0.004980f, +0.000442f, -0.008180f, +0.004341f, -0.005961f, +0.000107f, - +0.001124f, -0.001745f, +0.000519f, -0.005942f, -0.003763f, +0.002338f, +0.000689f, +0.005023f, +0.000538f, -0.003255f, - +0.003012f, +0.002417f, -0.002469f, -0.002776f, +0.001107f, +0.003573f, +0.001391f, +0.001358f, -0.000802f, +0.005072f, - -0.000908f, +0.000583f, -0.004465f, +0.001794f, -0.001278f, +0.000604f - }, - { - -0.003628f, +0.054341f, +0.006482f, +0.010395f, +0.013371f, +0.001707f, +0.001521f, -0.021767f, -0.010321f, +0.003295f, - +0.016357f, +0.003097f, -0.019935f, -0.007249f, +0.249690f, +0.039433f, -0.025345f, -0.036166f, +0.016461f, +0.000622f, - -0.010853f, +0.024208f, +0.023041f, -0.015043f, -0.021030f, -0.026867f, +0.007043f, +0.002302f, +0.000324f, -0.002311f, - +0.004780f, -0.011845f, -0.002471f, -0.014582f, +0.021952f, +0.000575f, +0.005704f, +0.003300f, -0.013801f, -0.004300f, - +0.009186f, -0.020633f, -0.002589f, -0.002421f, -0.007662f, -0.000709f, +0.002296f, -0.005240f, -0.000228f, -0.007946f, - -0.003931f, +0.003048f, -0.006891f, +0.002494f, +0.005700f, -0.005651f, -0.001796f, +0.001713f, -0.004174f, +0.007364f, - -0.011345f, -0.009144f, +0.013150f, -0.006527f, -0.005590f, +0.000221f, -0.003996f, +0.009010f, -0.009669f, +0.003902f, - +0.000320f, +0.000659f, -0.000549f, -0.002664f, -0.001148f, +0.002031f, +0.003224f, -0.003738f, +0.003543f, +0.000611f, - -0.001793f, -0.001481f, -0.003798f, +0.003605f, -0.003133f, +0.000915f, -0.000773f, +0.000592f, -0.003229f, +0.002698f, - +0.000498f, -0.001443f, -0.003695f, -0.001990f, -0.004396f, -0.000172f - }, - { - -0.018617f, +0.097431f, +0.004326f, -0.018222f, -0.020174f, +0.011611f, +0.005877f, +0.006564f, +0.002567f, -0.021423f, - -0.043211f, -0.023602f, -0.008714f, -0.032266f, -0.091180f, +0.004470f, +0.060203f, +0.009616f, +0.039555f, +0.009136f, - +0.025003f, -0.011400f, +0.018854f, +0.009712f, +0.019325f, +0.014282f, -0.006264f, +0.013737f, +0.015106f, +0.011249f, - +0.016450f, +0.020649f, -0.005990f, -0.003469f, +0.003164f, -0.002360f, -0.015877f, +0.004181f, -0.009971f, -0.018376f, - +0.004416f, -0.002735f, +0.004166f, -0.012005f, -0.005045f, -0.008021f, +0.007076f, -0.002592f, -0.009603f, -0.005539f, - -0.001183f, -0.013570f, +0.005554f, -0.012147f, -0.003687f, +0.002521f, +0.011382f, -0.004337f, -0.003064f, -0.004004f, - -0.008875f, -0.006752f, -0.000190f, +0.004727f, -0.002303f, +0.001682f, -0.001980f, +0.002611f, -0.002636f, -0.008160f, - -0.001342f, +0.002836f, +0.003922f, -0.001979f, -0.002691f, +0.004941f, -0.001661f, +0.003866f, -0.001473f, -0.005850f, - +0.003339f, +0.000917f, +0.001254f, -0.002142f, -0.000796f, -0.000042f, +0.001902f, +0.000726f, +0.000495f, +0.000051f, - +0.001080f, +0.000596f, -0.000996f, -0.002582f, +0.001680f, -0.000142f - } - }, - { - { - -0.001512f, +0.092096f, +0.022725f, -0.048405f, -0.027445f, +0.009791f, +0.001837f, +0.002579f, -0.006484f, +0.008674f, - +0.021944f, -0.011945f, +0.027018f, -0.003670f, -0.019597f, +0.013655f, +0.023679f, +0.036464f, +0.015870f, -0.028666f, - +0.009351f, +0.017035f, -0.001581f, -0.001179f, +0.002617f, -0.015820f, +0.007758f, -0.029150f, -0.000977f, -0.004994f, - -0.004793f, +0.004241f, +0.004271f, -0.004256f, -0.010455f, -0.018157f, +0.001884f, -0.004171f, -0.018860f, -0.006821f, - +0.013648f, +0.007963f, +0.004674f, -0.012244f, +0.009907f, -0.005968f, -0.007261f, +0.001940f, -0.008068f, +0.005947f, - +0.000338f, -0.001999f, +0.000795f, +0.001410f, -0.003350f, -0.002345f, -0.003430f, -0.001952f, +0.000170f, -0.011411f, - -0.002944f, +0.002217f, +0.003693f, +0.004166f, -0.003773f, -0.004348f, +0.004572f, -0.000165f, +0.010759f, +0.001092f, - -0.005940f, -0.000408f, +0.001913f, -0.000548f, -0.002617f, -0.000265f, +0.001337f, +0.002447f, +0.003669f, +0.002236f, - -0.000201f, -0.000376f, +0.001818f, -0.001343f, +0.000400f, +0.000308f, -0.002132f, +0.001926f, -0.002687f, +0.001604f, - +0.000348f, -0.000730f, +0.001565f, -0.000647f, -0.000987f, -0.000071f - }, - { - -0.004837f, +0.182593f, -0.002630f, -0.105206f, +0.091073f, +0.014126f, +0.008452f, -0.006046f, -0.007786f, -0.010315f, - -0.034361f, +0.013588f, -0.008042f, -0.007420f, +0.004908f, -0.010851f, -0.019964f, -0.008839f, +0.014122f, -0.006236f, - -0.004759f, +0.007171f, -0.010896f, -0.004992f, +0.008279f, +0.007857f, +0.014271f, +0.014404f, -0.022406f, -0.005900f, - -0.013687f, -0.000188f, +0.008426f, -0.003179f, -0.008397f, -0.005158f, -0.003063f, +0.003738f, -0.000263f, -0.009082f, - -0.005782f, -0.014483f, -0.004362f, +0.000279f, +0.005260f, -0.009159f, -0.001518f, -0.007755f, +0.004412f, -0.015922f, - -0.003722f, +0.004601f, +0.001191f, +0.000499f, +0.000827f, +0.000803f, -0.002582f, +0.001068f, +0.000524f, -0.010076f, - +0.001269f, -0.008215f, -0.001467f, +0.005999f, -0.004775f, -0.001127f, -0.003343f, +0.004527f, -0.001667f, +0.001392f, - -0.008382f, +0.000322f, -0.000439f, +0.003734f, -0.005616f, +0.000900f, +0.003329f, +0.001384f, -0.000492f, +0.004194f, - -0.000211f, -0.000708f, +0.002280f, -0.004496f, +0.003654f, +0.000009f, +0.001655f, -0.001892f, -0.003562f, -0.000998f, - +0.003134f, +0.001960f, +0.003344f, +0.003273f, -0.001290f, -0.001831f - }, - { - +0.002174f, -0.157647f, +0.007759f, +0.121977f, -0.017540f, +0.014369f, +0.003777f, -0.003529f, +0.016121f, -0.001977f, - +0.024859f, +0.036908f, -0.007511f, +0.011648f, +0.019321f, +0.000663f, +0.013406f, -0.000813f, +0.003379f, +0.036195f, - -0.014864f, +0.009300f, +0.014562f, +0.005626f, +0.003419f, +0.000516f, -0.009202f, +0.016354f, +0.001547f, +0.001945f, - -0.013096f, -0.007004f, +0.021237f, +0.003275f, +0.008480f, -0.005068f, +0.013734f, -0.017503f, +0.004780f, -0.008988f, - +0.006693f, -0.003962f, -0.007991f, +0.022415f, -0.002523f, -0.008573f, -0.002704f, -0.003509f, -0.002289f, -0.003184f, - +0.008794f, +0.002333f, +0.003209f, +0.000407f, -0.003042f, -0.003073f, +0.000242f, +0.005005f, +0.004590f, +0.003421f, - +0.003988f, +0.006537f, +0.000040f, +0.001781f, +0.002982f, +0.001027f, +0.002876f, -0.003861f, +0.005558f, -0.007917f, - -0.004080f, +0.000400f, +0.001176f, +0.001692f, +0.000468f, -0.004534f, -0.001506f, -0.004071f, +0.001118f, -0.001744f, - -0.002711f, -0.005498f, -0.000949f, +0.000227f, +0.001481f, -0.000480f, -0.003170f, +0.002182f, -0.002074f, +0.004830f, - -0.002476f, +0.000208f, +0.000052f, +0.002589f, +0.001114f, +0.000083f - }, - { - -0.002995f, -0.050766f, -0.003370f, -0.001805f, -0.006943f, -0.001634f, -0.004478f, -0.002462f, +0.005530f, +0.001169f, - -0.003272f, -0.021742f, +0.000148f, -0.015143f, +0.005079f, -0.004765f, -0.029616f, +0.000047f, +0.033838f, -0.015435f, - -0.001976f, -0.004916f, -0.028641f, +0.005215f, -0.008058f, -0.016731f, -0.002296f, -0.008776f, +0.007593f, +0.000872f, - +0.011424f, +0.016329f, -0.003669f, +0.007863f, +0.003248f, -0.004361f, +0.005702f, +0.002171f, +0.019756f, +0.006679f, - -0.007072f, -0.000060f, +0.010797f, +0.004287f, -0.008364f, -0.009023f, +0.000366f, -0.002103f, +0.007810f, -0.008502f, - -0.003669f, +0.003908f, +0.005366f, -0.003121f, -0.001009f, +0.000482f, +0.001165f, +0.003155f, -0.003638f, +0.001038f, - -0.001517f, -0.001145f, +0.000712f, +0.003242f, -0.001425f, +0.005016f, -0.002173f, +0.005250f, -0.003140f, +0.002320f, - -0.000741f, -0.004385f, -0.000902f, -0.002279f, -0.004101f, +0.001001f, -0.003151f, +0.004542f, -0.000579f, +0.003200f, - +0.002291f, +0.002182f, -0.003201f, +0.002105f, -0.004819f, -0.000702f, -0.000283f, +0.000790f, -0.001516f, +0.001007f, - -0.000077f, +0.001056f, -0.000591f, -0.002054f, -0.001915f, +0.003673f - }, - { - +0.023873f, +0.030719f, +0.017558f, +0.075618f, -0.005020f, +0.005829f, +0.001236f, -0.004205f, +0.004671f, +0.017882f, - +0.003256f, +0.014361f, +0.016958f, -0.007788f, +0.008102f, -0.009484f, -0.005559f, -0.015786f, +0.023562f, -0.011644f, - -0.003029f, +0.001868f, +0.008828f, -0.017112f, -0.014483f, +0.008191f, +0.002327f, +0.044005f, +0.013283f, -0.012632f, - -0.003656f, +0.009984f, +0.000849f, +0.007508f, +0.011992f, +0.000326f, -0.010539f, -0.003312f, +0.003909f, +0.001772f, - +0.009855f, +0.012382f, -0.000291f, -0.000571f, +0.002098f, +0.007620f, -0.009506f, +0.005709f, -0.009516f, +0.006548f, - -0.002702f, +0.000587f, -0.013405f, -0.003456f, -0.008355f, +0.003347f, -0.002780f, +0.005557f, -0.002212f, +0.005214f, - +0.003093f, -0.001199f, -0.002686f, +0.002227f, -0.000550f, +0.001302f, -0.001408f, -0.007920f, -0.000277f, +0.002055f, - -0.004296f, -0.001170f, -0.002601f, +0.003043f, +0.008465f, -0.000422f, -0.000052f, -0.002716f, -0.002103f, +0.000403f, - -0.004224f, +0.000784f, +0.002054f, -0.001762f, -0.006944f, +0.001781f, +0.001686f, -0.000647f, +0.001171f, +0.003454f, - -0.001926f, -0.000009f, -0.000468f, +0.002773f, -0.000769f, +0.002987f - }, - { - +0.002937f, +0.028401f, -0.005901f, -0.006481f, +0.006750f, -0.002264f, +0.002187f, +0.001020f, +0.003051f, +0.010582f, - +0.004216f, -0.020368f, -0.016832f, -0.043502f, +0.062218f, +0.012454f, +0.003098f, -0.010920f, -0.005323f, -0.000492f, - -0.019707f, +0.009401f, +0.021944f, +0.020362f, +0.002089f, +0.000126f, +0.012201f, -0.011894f, +0.014769f, -0.005686f, - +0.021636f, +0.004312f, +0.010686f, +0.006529f, -0.002043f, -0.001517f, +0.007586f, -0.004107f, -0.004237f, -0.008942f, - -0.005692f, +0.006127f, -0.006009f, -0.003872f, +0.000735f, -0.000364f, +0.007259f, +0.000859f, -0.003698f, -0.003826f, - +0.001914f, -0.002039f, +0.001217f, +0.000359f, -0.002127f, -0.007618f, -0.000526f, -0.002206f, -0.000405f, +0.005517f, - -0.002581f, -0.004398f, -0.004489f, +0.004196f, -0.001252f, +0.003079f, +0.001288f, +0.001500f, -0.000775f, +0.001438f, - +0.001942f, +0.003481f, -0.002161f, -0.004358f, +0.000640f, -0.002490f, +0.007877f, -0.000620f, -0.003098f, -0.002591f, - -0.005599f, +0.005066f, +0.000146f, +0.002982f, +0.000111f, -0.003082f, -0.002409f, -0.000195f, +0.000593f, -0.002248f, - +0.001770f, -0.000366f, +0.000502f, +0.001127f, +0.001226f, -0.000557f - }, - { - +0.020837f, +0.124920f, +0.001142f, +0.100057f, -0.002591f, +0.007993f, -0.001959f, -0.017106f, +0.017868f, +0.004681f, - -0.003248f, -0.017535f, +0.026510f, +0.023405f, -0.000084f, +0.022576f, +0.063044f, -0.018036f, +0.002612f, +0.000013f, - +0.003525f, +0.003834f, +0.018775f, +0.004555f, +0.011883f, +0.001245f, -0.005673f, -0.008845f, +0.005232f, -0.006119f, - +0.008382f, +0.012708f, -0.005798f, -0.014842f, -0.001765f, +0.002552f, -0.012435f, +0.006957f, +0.008910f, -0.003352f, - +0.003653f, -0.000034f, -0.005210f, -0.009225f, +0.007052f, -0.011878f, -0.005502f, -0.007189f, -0.010343f, +0.002274f, - -0.002828f, +0.001004f, +0.001620f, -0.000028f, +0.008772f, -0.001728f, +0.004158f, +0.002459f, +0.003938f, -0.000943f, - +0.000500f, +0.004807f, -0.003083f, +0.004893f, +0.001323f, +0.002070f, -0.002249f, -0.004109f, +0.005701f, +0.005249f, - +0.001341f, +0.004352f, +0.004442f, -0.000942f, +0.000783f, +0.001961f, -0.001107f, +0.006589f, -0.002955f, +0.000616f, - -0.005798f, +0.004089f, -0.001830f, -0.000011f, +0.000345f, +0.002152f, +0.002232f, +0.002295f, -0.004895f, -0.000998f, - +0.002802f, +0.000895f, -0.000458f, -0.000150f, +0.001790f, -0.003026f - }, - { - +0.006206f, -0.004386f, +0.015331f, +0.027484f, +0.006998f, +0.005081f, +0.007086f, +0.003765f, -0.009707f, -0.000512f, - -0.009421f, +0.001794f, -0.003612f, +0.003726f, +0.028204f, +0.008096f, +0.018929f, -0.020634f, -0.013138f, +0.014173f, - -0.000035f, -0.001779f, -0.003679f, -0.012738f, -0.003133f, -0.028671f, -0.002981f, -0.014800f, -0.004562f, -0.000485f, - -0.011963f, -0.010056f, -0.002965f, +0.007422f, +0.010700f, -0.010292f, -0.003695f, -0.017297f, -0.013872f, +0.005034f, - -0.002054f, +0.001640f, +0.014922f, +0.000308f, +0.004788f, -0.000831f, +0.001545f, +0.005007f, +0.000752f, +0.002904f, - +0.003788f, +0.006387f, +0.004466f, -0.003954f, +0.006419f, +0.001701f, +0.000002f, -0.000661f, -0.001392f, +0.002114f, - -0.005217f, +0.005282f, -0.006054f, +0.006049f, -0.006213f, +0.003350f, -0.000116f, -0.004995f, -0.001886f, -0.000902f, - -0.005165f, +0.000297f, -0.004619f, +0.000588f, -0.001347f, -0.002731f, +0.001955f, +0.008145f, +0.002824f, +0.000159f, - +0.002706f, -0.002310f, -0.004315f, +0.001193f, +0.001286f, -0.000864f, -0.000171f, +0.003396f, +0.000573f, +0.001306f, - +0.001855f, -0.001073f, -0.000792f, +0.000184f, +0.002729f, -0.003746f - }, - { - +0.035906f, +0.122675f, +0.020299f, +0.132683f, -0.010382f, -0.000237f, -0.002189f, -0.034367f, -0.008888f, +0.002554f, - -0.050122f, +0.015725f, -0.023421f, +0.001359f, -0.048641f, -0.022121f, +0.039852f, -0.024678f, -0.017499f, -0.012055f, - -0.016505f, -0.019342f, -0.003330f, +0.006154f, -0.004066f, +0.020008f, -0.006453f, +0.012755f, -0.000803f, -0.002156f, - -0.004869f, -0.018914f, -0.025568f, -0.009973f, -0.009608f, -0.004503f, +0.002224f, +0.000892f, +0.011044f, +0.008527f, - -0.004440f, +0.000436f, -0.007859f, +0.002851f, +0.000617f, +0.004404f, +0.008615f, -0.008674f, +0.002133f, -0.000022f, - -0.005655f, -0.001473f, -0.007010f, +0.000539f, -0.006428f, +0.005101f, -0.013373f, +0.005766f, -0.003336f, +0.013785f, - -0.004519f, -0.007395f, -0.005817f, -0.006268f, -0.008202f, -0.001600f, +0.004956f, +0.004033f, +0.003746f, +0.006381f, - -0.001668f, +0.001319f, -0.000828f, -0.005496f, +0.002634f, -0.004840f, -0.004683f, +0.001276f, +0.002960f, -0.000217f, - +0.001897f, +0.001327f, +0.004701f, +0.000741f, -0.004900f, -0.000842f, +0.001044f, -0.001798f, -0.003027f, +0.000851f, - -0.001932f, +0.001707f, -0.003817f, +0.001819f, +0.001171f, -0.001193f - }, - { - +0.004026f, -0.045896f, +0.006804f, -0.004468f, -0.008903f, -0.000184f, +0.039414f, -0.031794f, -0.029086f, +0.029769f, - -0.001038f, -0.013562f, +0.000298f, -0.026615f, +0.010567f, +0.002230f, -0.000188f, -0.015039f, +0.005532f, +0.015184f, - +0.009174f, -0.004924f, -0.000052f, -0.022622f, -0.024047f, +0.006388f, -0.002757f, +0.000368f, +0.008652f, +0.011009f, - -0.001553f, +0.012171f, +0.017859f, +0.001414f, -0.016993f, +0.000609f, +0.010972f, -0.001029f, +0.004920f, +0.030856f, - +0.008336f, +0.001954f, +0.004361f, -0.012799f, -0.007097f, +0.007067f, -0.003952f, +0.003046f, -0.010805f, +0.004231f, - +0.005215f, +0.002775f, -0.000567f, -0.011615f, -0.004181f, -0.012784f, +0.000012f, +0.011410f, -0.006582f, +0.006395f, - +0.002011f, +0.000986f, -0.004336f, -0.005416f, -0.001590f, +0.006180f, -0.003694f, -0.002721f, +0.005783f, +0.002179f, - -0.000369f, -0.004418f, +0.001539f, +0.001982f, +0.001832f, +0.001940f, -0.003277f, +0.003929f, +0.011319f, +0.001855f, - -0.001608f, -0.001671f, -0.000463f, +0.004060f, -0.002300f, +0.001718f, -0.001537f, +0.000619f, -0.000769f, +0.002784f, - -0.000006f, -0.000512f, -0.001582f, +0.003826f, -0.001702f, -0.000548f - }, - { - -0.020847f, -0.164871f, -0.033359f, -0.009741f, +0.027424f, +0.012009f, -0.001361f, +0.010331f, +0.013107f, -0.006963f, - -0.008458f, +0.012288f, +0.042557f, +0.022310f, +0.016413f, -0.027729f, +0.006946f, -0.010358f, +0.014727f, -0.000262f, - -0.004918f, +0.004910f, +0.009870f, -0.010539f, +0.017349f, -0.021265f, +0.007305f, +0.005718f, +0.005168f, +0.009553f, - +0.016755f, +0.007609f, -0.007846f, -0.017645f, +0.000676f, -0.025632f, -0.000948f, -0.001844f, +0.015900f, +0.006589f, - +0.009063f, -0.003847f, +0.011432f, -0.002563f, -0.001485f, -0.004185f, -0.010704f, -0.008109f, -0.003956f, -0.003792f, - -0.000188f, +0.004404f, -0.006435f, -0.002817f, -0.002001f, +0.009011f, +0.001448f, -0.006229f, +0.002939f, +0.000099f, - +0.006430f, -0.002013f, -0.002223f, -0.003954f, -0.005129f, -0.003009f, +0.001467f, +0.003513f, -0.000429f, -0.002608f, - +0.002902f, -0.001747f, -0.005002f, -0.000708f, +0.008080f, +0.000454f, -0.000998f, -0.000027f, +0.003927f, -0.001621f, - -0.000663f, -0.002865f, -0.005506f, -0.000193f, +0.000668f, +0.004152f, -0.001435f, -0.002207f, -0.003299f, +0.002645f, - -0.001744f, +0.002776f, +0.001171f, -0.002343f, -0.000772f, -0.001905f - }, - { - -0.000689f, -0.046939f, -0.004468f, +0.004409f, -0.017615f, -0.007484f, -0.007643f, -0.001284f, -0.000488f, -0.000684f, - +0.005624f, -0.002890f, +0.012795f, +0.030376f, +0.013577f, -0.004709f, +0.016586f, +0.025452f, -0.019182f, -0.011844f, - -0.009829f, +0.005911f, -0.010366f, +0.010639f, +0.031899f, -0.001146f, +0.007475f, -0.012794f, +0.010925f, -0.016768f, - -0.017030f, +0.001575f, -0.004005f, +0.008226f, -0.014774f, -0.005947f, -0.007192f, +0.029345f, -0.002137f, -0.002087f, - -0.002346f, +0.002269f, +0.002157f, +0.007393f, +0.002103f, +0.013417f, +0.005082f, -0.013543f, -0.008386f, -0.003849f, - +0.003508f, -0.007786f, -0.003002f, -0.003086f, +0.003301f, +0.006598f, -0.005298f, -0.008032f, -0.001423f, -0.000397f, - +0.001486f, +0.002638f, -0.008833f, +0.003018f, +0.004565f, +0.005334f, -0.002365f, -0.003765f, +0.006133f, -0.001007f, - -0.005625f, -0.002258f, -0.004054f, +0.008721f, -0.001188f, -0.000155f, +0.002436f, -0.002293f, -0.005126f, +0.004504f, - -0.004623f, +0.001706f, -0.000485f, -0.003416f, +0.003087f, -0.004884f, +0.003415f, +0.002716f, -0.000259f, -0.000333f, - +0.000977f, +0.000001f, -0.001002f, -0.002051f, -0.001539f, +0.000163f - }, - { - -0.015371f, +0.090404f, -0.024343f, +0.006079f, -0.007202f, +0.019875f, +0.015332f, +0.009801f, +0.003059f, -0.024681f, - +0.003706f, -0.011758f, -0.010269f, -0.042191f, +0.025241f, -0.017770f, -0.005371f, +0.009113f, -0.007868f, +0.004463f, - +0.033588f, -0.006565f, +0.009204f, +0.004802f, -0.004235f, +0.025511f, -0.007855f, -0.008246f, +0.013994f, +0.001037f, - +0.002888f, -0.003068f, +0.021226f, +0.004149f, -0.005668f, +0.000530f, -0.011729f, +0.023852f, +0.001955f, +0.007873f, - +0.008063f, -0.009869f, -0.001592f, -0.002109f, +0.001747f, -0.002299f, -0.003989f, -0.002944f, -0.008768f, -0.009701f, - -0.000959f, -0.003846f, +0.008297f, +0.003866f, -0.003407f, +0.010936f, +0.001862f, -0.001824f, -0.004671f, -0.005001f, - -0.002350f, -0.001329f, -0.000421f, -0.004398f, +0.003627f, +0.002333f, -0.005877f, -0.003035f, -0.010423f, -0.002417f, - -0.002325f, -0.003293f, -0.000211f, -0.001925f, -0.000679f, +0.004013f, +0.002669f, +0.004926f, +0.000310f, -0.002329f, - +0.003117f, +0.002281f, -0.000860f, +0.001011f, +0.002074f, +0.002977f, -0.001393f, -0.001722f, -0.004937f, +0.003373f, - -0.000451f, +0.002761f, -0.003266f, +0.001137f, -0.001966f, +0.001567f - }, - { - +0.003740f, +0.042564f, -0.013449f, +0.003624f, -0.002693f, +0.001731f, +0.017458f, +0.003391f, +0.009155f, +0.000363f, - +0.009154f, +0.001076f, -0.014747f, -0.053271f, +0.150468f, +0.026030f, +0.017688f, -0.003791f, +0.029024f, +0.027652f, - -0.024065f, -0.006601f, +0.008784f, -0.026319f, -0.027937f, -0.008067f, +0.006481f, -0.020627f, -0.003033f, -0.007133f, - +0.001450f, +0.003277f, +0.002733f, -0.010286f, +0.013113f, -0.009240f, +0.008459f, +0.006886f, -0.007344f, -0.003554f, - +0.005422f, -0.009973f, -0.000093f, -0.004775f, -0.004144f, +0.002388f, +0.008217f, -0.003051f, -0.001701f, -0.003848f, - +0.000990f, +0.005327f, -0.016773f, -0.019667f, -0.003340f, -0.003208f, -0.000405f, +0.002833f, -0.004184f, +0.005150f, - +0.000874f, -0.006638f, +0.004321f, -0.000087f, +0.004175f, +0.000386f, -0.010012f, +0.004365f, -0.006736f, +0.007620f, - +0.000084f, -0.005205f, -0.003681f, -0.001073f, -0.003811f, -0.000706f, +0.000004f, -0.004216f, +0.002429f, -0.000339f, - +0.002593f, +0.000896f, -0.001416f, +0.005842f, -0.005013f, +0.000386f, -0.000985f, +0.003709f, +0.001034f, +0.001048f, - -0.000529f, -0.000782f, -0.002829f, +0.000941f, -0.003940f, +0.000423f - }, - { - +0.002129f, +0.113632f, -0.014444f, -0.045759f, -0.022421f, +0.044932f, +0.026294f, +0.012051f, +0.001491f, -0.003618f, - -0.026106f, -0.007640f, +0.001025f, +0.032987f, -0.002619f, +0.016931f, +0.050399f, +0.004758f, +0.027450f, +0.008066f, - +0.021767f, -0.024194f, +0.023743f, +0.007166f, -0.005981f, +0.005075f, -0.000797f, +0.022643f, +0.021165f, -0.013823f, - -0.011015f, -0.003207f, -0.010584f, -0.001803f, +0.008109f, +0.002511f, +0.001947f, +0.009948f, -0.011880f, -0.006965f, - +0.017105f, +0.008126f, +0.016044f, -0.013360f, -0.002388f, -0.006240f, +0.003418f, +0.001093f, +0.005425f, +0.000810f, - +0.000710f, -0.010827f, +0.003796f, -0.006677f, +0.003113f, +0.006631f, +0.011759f, -0.002323f, -0.005348f, -0.006737f, - -0.005381f, -0.001120f, +0.002987f, +0.001875f, -0.000945f, +0.001300f, -0.003593f, -0.001347f, -0.001258f, -0.004098f, - +0.000375f, -0.000459f, +0.003950f, +0.008037f, +0.001707f, +0.001320f, -0.007156f, +0.001994f, +0.002245f, -0.005687f, - +0.000543f, -0.000506f, +0.001070f, -0.000782f, +0.000681f, +0.000341f, -0.001483f, -0.000446f, -0.000062f, -0.002581f, - +0.002392f, +0.000559f, -0.001304f, +0.000641f, +0.004735f, +0.001327f - } - }, - { - { - -0.001828f, +0.096569f, +0.019613f, -0.074319f, +0.011641f, +0.002763f, -0.005559f, +0.011787f, -0.005212f, +0.010179f, - +0.015948f, +0.005291f, +0.003879f, +0.008041f, -0.017480f, +0.020014f, +0.032246f, +0.031820f, +0.010449f, -0.024704f, - +0.015199f, +0.003202f, +0.011599f, +0.016515f, -0.021632f, +0.006440f, -0.024039f, -0.003083f, -0.006905f, +0.002606f, - -0.011918f, -0.011291f, +0.009537f, +0.002945f, -0.022167f, -0.009721f, +0.008112f, +0.000604f, -0.020573f, -0.003499f, - -0.000783f, +0.008270f, +0.013175f, -0.012622f, +0.005551f, -0.003870f, -0.004636f, +0.006953f, -0.006597f, -0.003682f, - +0.003573f, +0.002642f, -0.007402f, -0.002047f, +0.009027f, -0.001655f, -0.009333f, -0.001422f, -0.006671f, -0.010130f, - +0.004335f, +0.000002f, +0.002422f, +0.000309f, +0.001003f, +0.004476f, -0.004716f, +0.006903f, -0.000817f, +0.003547f, - -0.003516f, +0.000831f, +0.005432f, -0.002121f, -0.002527f, -0.000516f, +0.002035f, -0.002492f, +0.002671f, +0.004292f, - +0.000252f, +0.004937f, -0.002970f, -0.000828f, +0.001571f, -0.002421f, -0.003044f, -0.000786f, +0.001460f, +0.001167f, - -0.001544f, +0.000188f, -0.000370f, +0.002901f, -0.002242f, -0.001152f - }, - { - -0.000070f, +0.235554f, -0.036219f, +0.005810f, -0.043754f, +0.031298f, +0.023651f, -0.038108f, +0.007010f, +0.004221f, - -0.019197f, -0.037165f, +0.013149f, -0.013084f, +0.007448f, -0.010035f, -0.018825f, -0.005429f, -0.012201f, +0.006221f, - +0.014324f, -0.015268f, -0.003562f, -0.004017f, +0.009488f, +0.009464f, +0.002836f, +0.013739f, -0.004022f, -0.018306f, - -0.008643f, +0.002123f, +0.003218f, +0.001283f, -0.007225f, -0.000398f, +0.000350f, -0.003337f, -0.005018f, -0.006950f, - -0.007748f, -0.018603f, -0.002769f, +0.000071f, -0.000027f, +0.007885f, -0.015402f, -0.003992f, -0.008210f, +0.002511f, - -0.008799f, -0.000826f, +0.004338f, -0.002639f, +0.001578f, -0.000039f, +0.000062f, +0.009556f, -0.010286f, -0.004693f, - -0.003331f, -0.000382f, -0.000779f, +0.000839f, -0.004513f, +0.001573f, -0.010038f, +0.005999f, +0.003346f, -0.002911f, - -0.008444f, +0.002108f, +0.001923f, -0.002396f, +0.000568f, -0.004597f, +0.004615f, +0.003814f, +0.000493f, -0.000298f, - +0.001852f, +0.000406f, -0.000371f, -0.001998f, +0.003041f, +0.001003f, +0.000872f, +0.000275f, -0.005193f, -0.000292f, - +0.002523f, -0.000025f, +0.005439f, -0.000561f, -0.000011f, +0.001145f - }, - { - +0.005037f, -0.190573f, +0.031395f, +0.095125f, +0.002124f, +0.009079f, +0.012541f, +0.018029f, +0.002007f, +0.003718f, - +0.000719f, +0.046979f, +0.015756f, +0.002630f, +0.022420f, -0.002069f, +0.003120f, +0.002656f, +0.023414f, +0.007709f, - -0.005633f, +0.021109f, -0.003158f, +0.012633f, -0.000428f, +0.000231f, +0.003125f, +0.002312f, -0.003596f, +0.004348f, - -0.001659f, -0.006119f, +0.026121f, -0.000077f, -0.005022f, +0.020467f, -0.013813f, -0.012714f, +0.010505f, -0.009959f, - -0.007717f, +0.006913f, -0.008824f, +0.012854f, +0.003079f, -0.011115f, -0.002549f, -0.001843f, -0.007991f, +0.008554f, - -0.000943f, +0.006627f, +0.006449f, -0.006044f, -0.008563f, -0.009866f, +0.006787f, +0.006592f, +0.003177f, +0.006897f, - +0.004655f, -0.000634f, +0.006675f, -0.001163f, +0.000187f, -0.002790f, +0.011150f, -0.004389f, +0.002254f, -0.005440f, - -0.002303f, -0.004767f, +0.000634f, +0.000248f, -0.001976f, -0.001104f, -0.004902f, +0.001505f, -0.001554f, -0.006362f, - -0.002367f, -0.000794f, -0.002266f, +0.001295f, +0.000139f, -0.003184f, +0.000116f, +0.000358f, +0.002901f, +0.000407f, - -0.000329f, +0.000422f, +0.000267f, +0.003010f, -0.001566f, -0.000208f - }, - { - +0.003580f, -0.052339f, -0.010298f, -0.010180f, +0.001778f, -0.002734f, -0.009010f, +0.007013f, +0.004344f, -0.000215f, - -0.000738f, -0.024636f, -0.002061f, +0.004654f, -0.018377f, +0.008682f, -0.029820f, +0.001994f, +0.017008f, -0.005162f, - +0.003914f, -0.002186f, -0.035184f, +0.005908f, -0.009014f, -0.022227f, +0.010026f, -0.010302f, -0.011909f, +0.015644f, - +0.016290f, +0.012759f, -0.008194f, +0.014509f, -0.015026f, +0.024864f, +0.000036f, +0.006417f, -0.002364f, +0.019463f, - -0.020155f, +0.009993f, +0.006428f, +0.003679f, -0.005421f, -0.008659f, -0.000367f, -0.000329f, +0.009848f, -0.006074f, - -0.009038f, +0.005415f, +0.001943f, -0.001113f, +0.001496f, +0.001770f, +0.000186f, +0.001926f, +0.000201f, +0.004638f, - -0.000461f, -0.003914f, -0.004556f, +0.006728f, -0.006198f, +0.003482f, +0.001112f, +0.000539f, +0.005393f, +0.002415f, - -0.001013f, -0.006809f, +0.000722f, -0.004111f, -0.001002f, -0.001498f, +0.002770f, +0.001253f, +0.000165f, +0.002807f, - +0.002197f, -0.000885f, +0.001855f, +0.002701f, -0.006036f, +0.000113f, -0.001258f, +0.001819f, -0.000905f, +0.000055f, - +0.000094f, +0.002530f, -0.001002f, -0.002787f, +0.000444f, +0.001670f - }, - { - -0.012796f, +0.076098f, +0.000082f, +0.089648f, +0.006916f, +0.001737f, +0.010064f, -0.004758f, +0.007828f, +0.018944f, - +0.003279f, +0.002848f, +0.012117f, -0.003787f, -0.003152f, +0.002464f, -0.007901f, -0.010721f, +0.011551f, -0.000638f, - -0.020234f, +0.020416f, -0.008518f, -0.030243f, -0.011153f, +0.017860f, -0.002396f, +0.035086f, +0.019346f, -0.002782f, - +0.006428f, -0.009186f, +0.007920f, -0.002374f, +0.019397f, -0.001900f, -0.000047f, -0.012644f, -0.003241f, +0.009786f, - +0.011145f, +0.005447f, +0.002390f, +0.003411f, -0.008350f, +0.005324f, +0.006079f, -0.001234f, -0.014701f, +0.007597f, - +0.006483f, -0.005826f, -0.013587f, -0.009849f, +0.004482f, -0.002345f, +0.003144f, +0.003653f, +0.000283f, -0.002003f, - +0.003701f, +0.001064f, +0.003612f, +0.002568f, -0.005424f, -0.000201f, +0.001020f, -0.007910f, -0.003385f, +0.002463f, - -0.001066f, -0.001525f, -0.004870f, +0.003671f, +0.005311f, +0.006218f, -0.004673f, -0.000820f, -0.004666f, +0.002230f, - -0.004117f, +0.001977f, +0.000045f, +0.000186f, -0.005320f, +0.000407f, +0.000355f, +0.003440f, -0.000690f, +0.003099f, - -0.000715f, -0.002715f, +0.000597f, +0.001561f, +0.002408f, +0.000999f - }, - { - +0.000016f, +0.014968f, +0.020008f, +0.002054f, -0.007235f, -0.000998f, +0.000627f, +0.003842f, +0.006197f, +0.003880f, - +0.007599f, -0.024885f, -0.016131f, -0.033356f, +0.059635f, +0.009903f, +0.006760f, -0.026315f, -0.005130f, -0.016083f, - -0.009269f, +0.007009f, +0.024829f, +0.025802f, -0.003068f, +0.004269f, -0.004620f, -0.005753f, -0.009678f, +0.014402f, - +0.008054f, +0.010039f, +0.002116f, +0.003034f, +0.004987f, +0.001515f, +0.007816f, +0.002061f, -0.004142f, -0.009730f, - -0.001920f, +0.000307f, -0.009294f, +0.002837f, +0.004309f, -0.005848f, +0.002379f, +0.001002f, -0.004244f, +0.001514f, - -0.001760f, +0.001658f, -0.004135f, +0.006232f, -0.001884f, -0.003987f, -0.011182f, -0.002146f, +0.004016f, +0.006557f, - -0.007637f, +0.001368f, -0.004733f, -0.000930f, +0.001563f, +0.000250f, +0.003290f, +0.002146f, -0.000613f, +0.003361f, - +0.000584f, +0.003393f, +0.000533f, -0.001391f, -0.003080f, -0.000738f, +0.005590f, -0.001345f, +0.000166f, -0.004575f, - -0.002751f, +0.002527f, -0.001544f, +0.003611f, -0.000173f, -0.002743f, -0.000789f, -0.001720f, -0.000834f, -0.002773f, - +0.001479f, +0.001225f, +0.000839f, +0.001847f, +0.000427f, +0.000183f - }, - { - +0.001035f, +0.149983f, -0.008916f, +0.117574f, -0.008571f, -0.003121f, +0.009765f, +0.002670f, -0.017128f, +0.025105f, - -0.004169f, -0.020861f, +0.033248f, +0.002099f, +0.029905f, +0.022166f, +0.030633f, -0.014291f, +0.004394f, +0.016440f, - -0.017437f, +0.020477f, +0.003208f, +0.041497f, -0.012495f, -0.005020f, -0.011774f, -0.008326f, +0.003035f, -0.002671f, - +0.001773f, +0.010958f, -0.010381f, -0.010195f, -0.005605f, -0.010896f, +0.004862f, +0.003035f, +0.001395f, +0.004137f, - +0.004064f, +0.002540f, -0.005251f, -0.000202f, -0.003740f, -0.013544f, -0.008308f, -0.000963f, -0.007669f, +0.001247f, - -0.007392f, -0.008437f, +0.015061f, +0.001452f, -0.000190f, +0.003228f, +0.004346f, +0.002024f, +0.004787f, -0.003476f, - +0.002669f, +0.009562f, -0.005033f, +0.003132f, +0.005156f, -0.003282f, +0.002426f, -0.001198f, -0.001829f, +0.003904f, - +0.003958f, +0.001658f, +0.002740f, +0.001013f, +0.002745f, +0.000526f, +0.000608f, +0.004612f, -0.003036f, -0.000935f, - -0.001014f, +0.001015f, +0.003486f, -0.002861f, +0.002207f, -0.000907f, +0.004314f, +0.000393f, -0.004139f, -0.000768f, - +0.002058f, -0.000832f, +0.001483f, +0.000972f, -0.000986f, -0.001586f - }, - { - -0.000786f, +0.063199f, -0.011171f, +0.015329f, +0.018495f, -0.002414f, +0.008910f, +0.003928f, -0.012817f, -0.008245f, - +0.013486f, -0.005553f, -0.009936f, +0.014998f, +0.035809f, +0.016033f, -0.017254f, -0.018633f, +0.000639f, +0.030474f, - -0.004279f, +0.006479f, -0.023248f, -0.000633f, +0.006842f, -0.036152f, -0.015429f, -0.007744f, -0.018281f, +0.023853f, - -0.036617f, -0.016262f, +0.015921f, -0.001517f, +0.022684f, -0.005171f, -0.030062f, -0.003290f, +0.006700f, +0.002774f, - -0.010743f, +0.009304f, +0.004155f, +0.014094f, -0.008391f, -0.002419f, +0.004938f, +0.005995f, +0.005040f, +0.011683f, - -0.014962f, +0.010328f, +0.003290f, -0.003224f, +0.005278f, +0.005085f, -0.004961f, +0.001597f, -0.001187f, +0.000621f, - -0.000414f, -0.004169f, -0.000887f, +0.007903f, -0.007111f, -0.000047f, +0.001820f, -0.002064f, -0.004076f, -0.002729f, - -0.004790f, +0.000894f, -0.006207f, +0.000122f, -0.001724f, -0.002066f, +0.002159f, +0.007119f, +0.004499f, +0.001117f, - +0.002881f, -0.001083f, -0.004103f, +0.001438f, -0.000074f, -0.001914f, +0.001757f, +0.002746f, +0.001456f, -0.000625f, - +0.000773f, +0.002917f, -0.000570f, -0.001887f, +0.003581f, -0.002970f - }, - { - -0.019425f, +0.208707f, -0.004175f, +0.145299f, -0.008486f, -0.017543f, -0.000918f, -0.022952f, -0.004124f, +0.003660f, - -0.026178f, -0.010900f, +0.015968f, -0.027376f, -0.028816f, -0.004377f, +0.010129f, -0.017829f, -0.015086f, -0.017119f, - -0.016956f, -0.006298f, -0.008212f, -0.008343f, +0.006400f, +0.004739f, +0.007267f, +0.007737f, +0.003354f, -0.006144f, - -0.005723f, -0.012521f, -0.026320f, -0.001575f, -0.025069f, -0.003027f, +0.005588f, +0.015456f, -0.006982f, +0.008578f, - +0.000199f, -0.008145f, -0.005712f, +0.009139f, -0.004302f, +0.009885f, +0.002277f, -0.007795f, -0.005126f, +0.003161f, - +0.003343f, -0.010896f, -0.008333f, +0.000745f, +0.002696f, -0.006691f, -0.004004f, -0.001097f, +0.006654f, +0.002186f, - +0.000611f, -0.003661f, -0.002102f, -0.009387f, -0.011279f, -0.006651f, +0.007816f, +0.003094f, +0.006969f, +0.001466f, - +0.000753f, +0.001198f, -0.000412f, -0.010627f, +0.004520f, -0.002249f, -0.008574f, +0.001018f, +0.004974f, +0.000181f, - +0.000448f, +0.003208f, +0.005458f, -0.002173f, -0.004046f, -0.001100f, -0.000070f, +0.000416f, -0.002722f, -0.000545f, - +0.001018f, -0.001372f, -0.000891f, -0.001054f, +0.001448f, -0.000131f - }, - { - -0.002875f, -0.065813f, +0.001166f, +0.011017f, -0.011497f, +0.023556f, +0.013950f, -0.029465f, -0.021938f, +0.022264f, - +0.004118f, -0.010575f, -0.001603f, -0.009015f, -0.009383f, -0.010791f, +0.013074f, -0.003687f, +0.004072f, +0.018799f, - +0.009112f, +0.004001f, -0.019465f, -0.006922f, -0.008101f, -0.009527f, +0.002016f, -0.002302f, +0.000857f, +0.026313f, - -0.015468f, +0.007232f, +0.031017f, +0.004534f, -0.025002f, +0.002631f, +0.014789f, -0.001030f, -0.003177f, +0.029567f, - +0.023549f, -0.004943f, +0.000356f, -0.014639f, -0.001562f, +0.004121f, +0.003340f, -0.003574f, -0.000873f, -0.008652f, - +0.005309f, +0.002846f, -0.005236f, -0.005476f, -0.001807f, -0.017835f, +0.001090f, -0.001017f, +0.002927f, -0.000866f, - +0.001796f, +0.000098f, -0.003566f, -0.005659f, +0.004169f, -0.001568f, -0.001997f, +0.000886f, +0.004534f, +0.001363f, - -0.001463f, -0.001394f, +0.004627f, -0.000039f, -0.000238f, +0.003924f, -0.004435f, +0.002078f, +0.007547f, +0.008943f, - -0.002662f, -0.001622f, -0.001220f, +0.004584f, -0.003070f, -0.000947f, +0.002145f, -0.000498f, -0.001396f, +0.001202f, - +0.001101f, -0.003399f, +0.003104f, +0.000585f, +0.000755f, -0.001541f - }, - { - +0.017469f, -0.257384f, +0.021138f, -0.003863f, +0.020824f, -0.056961f, +0.081643f, -0.004020f, +0.005457f, -0.000037f, - -0.001241f, -0.007098f, +0.044825f, +0.009043f, +0.024014f, -0.025845f, +0.026001f, +0.001593f, +0.006877f, -0.012168f, - -0.000359f, -0.005900f, +0.011625f, +0.005278f, +0.007994f, -0.011427f, +0.011607f, -0.012488f, +0.016208f, +0.024929f, - +0.000163f, +0.011181f, +0.002529f, -0.018810f, -0.013443f, -0.004735f, -0.014520f, +0.003679f, +0.008411f, +0.001405f, - +0.015848f, +0.009621f, -0.003583f, +0.000226f, +0.004778f, -0.010088f, -0.008838f, -0.012057f, +0.004659f, -0.010363f, - +0.005120f, +0.002512f, +0.001003f, -0.008707f, +0.001964f, +0.004561f, -0.001328f, -0.001474f, +0.000486f, -0.005411f, - +0.009047f, +0.002477f, -0.005373f, -0.006997f, -0.002832f, +0.001940f, -0.002734f, +0.004349f, -0.000675f, -0.000249f, - -0.001450f, -0.000150f, -0.004058f, +0.001355f, +0.003368f, +0.002261f, -0.001988f, +0.000821f, +0.002825f, +0.001618f, - -0.005045f, +0.000073f, -0.002753f, -0.004061f, +0.000511f, +0.004490f, -0.002644f, -0.002214f, -0.000170f, -0.000860f, - +0.001914f, +0.000625f, +0.001116f, +0.001284f, -0.003383f, -0.000923f - }, - { - +0.001992f, -0.064388f, +0.000694f, +0.007766f, -0.008353f, -0.002051f, -0.022742f, +0.006823f, -0.002052f, +0.005486f, - -0.030872f, +0.012084f, +0.011014f, +0.025510f, +0.032079f, -0.014615f, +0.016625f, +0.028299f, -0.036388f, -0.008053f, - -0.003966f, -0.000193f, -0.005536f, +0.002549f, +0.034227f, +0.000731f, +0.019920f, -0.003825f, -0.018757f, -0.009099f, - -0.014690f, -0.010540f, -0.020539f, +0.018865f, -0.001070f, -0.011223f, -0.000413f, +0.009893f, +0.004474f, -0.005064f, - -0.004805f, -0.001557f, +0.008797f, +0.008347f, -0.001334f, +0.010974f, +0.000798f, -0.011065f, -0.002787f, +0.000545f, - -0.004341f, -0.006275f, -0.005669f, -0.000610f, +0.002520f, +0.010786f, -0.012949f, -0.000028f, -0.002631f, -0.004858f, - +0.000911f, +0.000619f, -0.001053f, +0.003434f, -0.001250f, +0.003707f, +0.000506f, -0.003502f, +0.004355f, -0.002000f, - -0.001506f, -0.000358f, -0.003237f, +0.005447f, +0.001815f, +0.001407f, -0.002284f, -0.001872f, -0.002190f, -0.000610f, - -0.004375f, +0.006199f, -0.001316f, -0.004834f, +0.001760f, -0.002485f, +0.001395f, +0.002922f, +0.001258f, -0.002392f, - +0.001228f, +0.001487f, -0.001195f, -0.003209f, -0.001327f, +0.002836f - }, - { - +0.034600f, +0.004758f, -0.018678f, +0.023568f, -0.009706f, +0.047721f, -0.011518f, +0.023850f, -0.003538f, +0.009250f, - -0.035490f, +0.017809f, -0.039035f, -0.025682f, +0.000076f, -0.010732f, -0.000648f, +0.021918f, -0.011564f, +0.008066f, - +0.018867f, -0.001057f, +0.015613f, +0.005322f, +0.003710f, +0.014283f, -0.008385f, -0.003487f, +0.006537f, +0.002358f, - +0.012867f, -0.021664f, +0.024417f, +0.004433f, -0.006983f, +0.001620f, +0.009278f, -0.001364f, +0.011602f, +0.003288f, - +0.014967f, -0.000309f, -0.004567f, -0.008399f, -0.006189f, +0.002314f, -0.003557f, +0.000351f, -0.017963f, -0.002324f, - -0.008610f, -0.003366f, +0.008732f, +0.007328f, -0.005610f, +0.008592f, -0.001256f, -0.004377f, -0.001422f, -0.003059f, - -0.005613f, -0.002499f, +0.001239f, +0.001001f, -0.004183f, +0.003448f, +0.003710f, -0.009089f, -0.009992f, -0.003659f, - -0.005247f, +0.000092f, +0.000115f, -0.001877f, -0.000803f, +0.002532f, +0.004932f, +0.003764f, -0.002904f, +0.000571f, - +0.004316f, +0.002522f, -0.001038f, +0.002527f, +0.000995f, +0.000400f, -0.000725f, -0.000379f, -0.005118f, +0.002560f, - -0.000173f, +0.000848f, -0.002013f, +0.001422f, -0.001352f, +0.000905f - }, - { - -0.005777f, +0.051308f, -0.010272f, -0.000697f, -0.011795f, +0.010732f, +0.020658f, +0.005045f, +0.012664f, +0.004214f, - +0.000710f, -0.005951f, +0.008228f, +0.100190f, -0.068661f, -0.000711f, +0.026068f, +0.030645f, +0.008704f, +0.023414f, - -0.012118f, -0.014030f, -0.005471f, -0.018178f, -0.032611f, -0.007160f, -0.006552f, -0.011871f, -0.008192f, +0.006720f, - +0.001868f, +0.016977f, +0.000059f, -0.002995f, -0.007357f, +0.000263f, +0.005214f, +0.007833f, -0.005390f, +0.003735f, - -0.002098f, +0.001897f, -0.000765f, -0.007328f, +0.003326f, +0.003104f, -0.007381f, +0.002657f, -0.006306f, +0.008125f, - +0.002249f, -0.000260f, -0.010662f, -0.017907f, -0.013628f, +0.004246f, -0.003223f, -0.001914f, +0.006591f, -0.002937f, - +0.006096f, -0.001225f, -0.007876f, +0.007405f, +0.009003f, +0.000368f, -0.008331f, -0.000972f, +0.005604f, -0.000530f, - -0.001355f, -0.003055f, -0.006383f, +0.001659f, -0.005780f, -0.000393f, -0.002562f, +0.003160f, -0.003518f, -0.000575f, - +0.003634f, -0.000687f, +0.002670f, +0.002231f, -0.001301f, -0.001287f, -0.001344f, +0.002177f, +0.003952f, +0.000856f, - -0.003112f, +0.002022f, -0.002648f, +0.001062f, -0.000035f, -0.002556f - }, - { - +0.017759f, +0.085213f, -0.005907f, -0.057037f, +0.004691f, +0.037147f, +0.024678f, +0.008157f, -0.009916f, +0.009998f, - -0.006765f, -0.001904f, -0.031734f, +0.007104f, +0.085210f, +0.013654f, +0.007736f, +0.031086f, -0.002275f, +0.018640f, - +0.002049f, +0.000247f, +0.009542f, +0.004116f, -0.015160f, +0.013293f, +0.020933f, +0.005482f, +0.005053f, -0.022780f, - +0.005506f, -0.021765f, +0.002550f, -0.003371f, +0.009198f, -0.013744f, +0.014068f, +0.001064f, +0.006204f, -0.004034f, - +0.012455f, -0.000379f, +0.024634f, -0.003608f, -0.006844f, -0.005979f, -0.009537f, +0.004350f, +0.005544f, +0.005252f, - -0.006358f, -0.003263f, -0.009739f, +0.010433f, -0.001175f, +0.007205f, +0.006630f, +0.001530f, -0.004181f, -0.007436f, - -0.004633f, +0.000502f, +0.007505f, +0.001490f, -0.009340f, +0.001531f, -0.000093f, -0.004072f, -0.001683f, +0.001752f, - +0.001515f, +0.001072f, +0.000809f, +0.007219f, +0.001110f, -0.001535f, -0.003203f, +0.000613f, -0.000067f, -0.003661f, - +0.002643f, -0.001174f, -0.001623f, +0.000003f, +0.000891f, +0.000941f, -0.002902f, -0.000609f, +0.002863f, -0.005839f, - +0.002967f, +0.002413f, -0.000934f, +0.001556f, +0.001874f, +0.001654f - } - }, - { - { - +0.003666f, +0.070616f, -0.008442f, -0.016774f, +0.048447f, -0.000983f, -0.012015f, -0.006057f, -0.016951f, +0.007404f, - +0.000226f, -0.014619f, -0.003707f, +0.018053f, +0.000429f, +0.017994f, -0.007094f, -0.012845f, +0.003355f, -0.003351f, - +0.030798f, +0.001006f, -0.007397f, +0.015969f, -0.021733f, +0.005805f, -0.021267f, +0.012986f, +0.000222f, +0.003897f, - -0.018234f, -0.019148f, +0.006137f, +0.002176f, -0.006925f, -0.005897f, -0.001109f, +0.012485f, +0.001286f, +0.002843f, - -0.005661f, +0.012307f, +0.017038f, -0.007663f, +0.005344f, +0.003762f, +0.012444f, +0.013112f, -0.005190f, -0.004570f, - +0.005293f, +0.005947f, -0.005509f, -0.001268f, +0.010538f, +0.002692f, -0.010254f, -0.000907f, -0.000174f, +0.002856f, - +0.006004f, -0.004573f, +0.000227f, -0.002675f, -0.001512f, +0.000890f, -0.005954f, +0.006296f, -0.001403f, +0.002108f, - -0.002644f, +0.003628f, +0.006365f, +0.000058f, -0.002476f, -0.001625f, -0.000780f, -0.004009f, +0.000407f, +0.004030f, - +0.000130f, +0.006011f, -0.002737f, +0.001604f, -0.000568f, -0.003553f, -0.001289f, -0.000661f, +0.002669f, +0.002229f, - -0.000222f, +0.001456f, -0.001163f, +0.001192f, -0.001355f, +0.000957f - }, - { - +0.003807f, +0.354570f, +0.037188f, +0.100238f, +0.018193f, +0.013310f, +0.029373f, -0.000128f, +0.025010f, +0.018595f, - -0.007354f, -0.067306f, -0.005320f, -0.009220f, +0.021795f, +0.008518f, -0.019033f, -0.016017f, -0.007876f, +0.003670f, - +0.004039f, -0.004641f, +0.005805f, -0.008196f, +0.003071f, +0.004667f, -0.002091f, +0.006565f, +0.014447f, +0.001137f, - +0.000405f, +0.003494f, +0.007522f, +0.016306f, +0.001508f, -0.007515f, -0.010340f, -0.004097f, +0.003641f, +0.006146f, - +0.000674f, -0.009428f, +0.010116f, +0.001209f, -0.005331f, +0.004832f, -0.008830f, +0.004162f, +0.005040f, +0.013815f, - -0.005237f, -0.001396f, -0.002355f, -0.012333f, -0.006350f, +0.003881f, +0.002411f, +0.005165f, -0.009465f, +0.002194f, - -0.007834f, -0.000875f, +0.003625f, -0.001595f, -0.000684f, +0.007718f, -0.007868f, +0.002162f, +0.002193f, +0.002416f, - -0.003849f, +0.000650f, +0.003113f, -0.001423f, +0.003390f, -0.006711f, +0.000899f, +0.001958f, -0.001762f, +0.000382f, - +0.000613f, -0.002886f, -0.000336f, +0.001036f, +0.002460f, +0.003537f, +0.002673f, +0.000942f, -0.002517f, -0.001484f, - +0.001644f, -0.000015f, +0.003159f, -0.000711f, +0.002618f, +0.001165f - }, - { - -0.010342f, -0.209390f, +0.022984f, +0.001144f, -0.056639f, +0.012706f, +0.014683f, +0.015001f, -0.005230f, -0.007648f, - +0.001600f, +0.063926f, +0.018033f, -0.000685f, +0.025721f, -0.001999f, -0.001170f, +0.004826f, +0.028970f, -0.015439f, - -0.017152f, +0.021827f, -0.005873f, +0.012565f, -0.016981f, -0.013051f, +0.001038f, +0.004989f, +0.006537f, +0.006839f, - +0.006131f, -0.005359f, +0.016447f, -0.007363f, +0.005303f, +0.022574f, -0.028204f, -0.014177f, +0.009513f, -0.009330f, - -0.015794f, +0.000830f, -0.005337f, +0.007398f, -0.001020f, -0.002271f, +0.005278f, -0.005054f, -0.014903f, +0.009943f, - +0.004713f, +0.003126f, -0.000767f, -0.008619f, -0.002606f, -0.008476f, +0.002245f, +0.003499f, -0.000779f, +0.007516f, - +0.002682f, -0.008821f, +0.001055f, -0.006979f, -0.003813f, -0.008025f, +0.009645f, -0.004126f, +0.000626f, -0.000562f, - -0.001271f, -0.006431f, -0.004152f, -0.005373f, -0.003880f, +0.000116f, -0.001940f, +0.004600f, -0.002502f, -0.004348f, - +0.004599f, +0.003295f, +0.000765f, +0.002339f, -0.000552f, -0.000965f, +0.002897f, -0.000193f, +0.002482f, -0.000157f, - +0.001955f, +0.002446f, -0.000881f, +0.000590f, +0.000132f, +0.001438f - }, - { - -0.003239f, -0.023437f, +0.025347f, -0.013494f, -0.002867f, +0.001378f, -0.001447f, +0.011538f, +0.002678f, -0.002889f, - +0.009458f, +0.003791f, +0.013478f, +0.003878f, -0.028705f, +0.018801f, -0.000610f, +0.013276f, +0.015976f, +0.000376f, - -0.000303f, -0.001063f, -0.022333f, +0.007704f, -0.015460f, -0.019045f, +0.023115f, +0.008799f, -0.003535f, +0.016697f, - +0.010237f, -0.004483f, -0.009555f, +0.012014f, -0.009330f, +0.033181f, +0.010449f, +0.001334f, -0.024654f, +0.016065f, - -0.011738f, +0.009061f, -0.003756f, -0.001995f, +0.001155f, -0.007095f, -0.000186f, +0.000123f, +0.007169f, +0.001026f, - +0.002531f, +0.003776f, -0.002499f, +0.002314f, -0.002875f, -0.006981f, -0.002116f, +0.002401f, -0.001223f, +0.006074f, - +0.007705f, +0.002599f, -0.002970f, +0.004027f, -0.009506f, +0.003059f, +0.004540f, +0.000946f, +0.005886f, +0.002236f, - +0.002751f, +0.004209f, +0.005818f, -0.007907f, -0.002024f, -0.000402f, +0.003998f, +0.000531f, -0.002314f, +0.003321f, - +0.004944f, +0.000491f, +0.001096f, +0.002636f, -0.001790f, +0.002535f, -0.000043f, +0.005305f, +0.000714f, +0.000469f, - +0.001022f, -0.001031f, -0.001254f, +0.001555f, +0.002549f, -0.001072f - }, - { - -0.007282f, +0.062777f, -0.003454f, +0.089053f, -0.006931f, +0.001270f, +0.018768f, -0.001664f, -0.007120f, -0.017086f, - -0.043129f, -0.016730f, +0.015504f, +0.003304f, +0.019001f, +0.026436f, +0.007222f, -0.023920f, -0.031471f, -0.022486f, - -0.033423f, +0.011897f, -0.012869f, -0.028596f, -0.003509f, +0.023353f, -0.016636f, +0.003903f, +0.003796f, +0.013413f, - +0.012081f, -0.015069f, +0.004537f, -0.011854f, +0.017546f, +0.004709f, +0.005968f, -0.016023f, -0.019584f, -0.000146f, - -0.001915f, -0.002458f, -0.001937f, +0.009720f, -0.003742f, +0.001865f, +0.019200f, +0.007844f, -0.011732f, +0.004758f, - +0.001189f, -0.010719f, -0.008504f, +0.002465f, +0.011882f, +0.002091f, +0.001436f, +0.000005f, +0.001460f, -0.005205f, - +0.001023f, +0.007853f, +0.009043f, -0.001662f, -0.010003f, +0.003491f, +0.001729f, +0.000390f, +0.001861f, +0.003563f, - +0.002077f, +0.002216f, -0.002388f, +0.000335f, +0.000633f, +0.005774f, -0.003336f, +0.000483f, -0.005111f, +0.000391f, - -0.003158f, +0.001561f, -0.000236f, +0.002383f, +0.000134f, +0.002515f, -0.002350f, -0.000592f, -0.003209f, +0.001989f, - +0.000566f, -0.000194f, +0.002243f, +0.001193f, +0.000721f, -0.001201f - }, - { - -0.002558f, -0.029810f, +0.000633f, +0.013268f, -0.005452f, -0.003469f, -0.000867f, -0.002594f, -0.002575f, -0.004862f, - +0.007648f, -0.014259f, -0.002556f, +0.001765f, +0.087725f, +0.004735f, -0.007631f, -0.015601f, -0.014682f, -0.021690f, - +0.013800f, +0.015410f, -0.007010f, +0.000599f, -0.001876f, +0.004370f, -0.019606f, -0.007884f, +0.007022f, +0.012753f, - -0.019448f, -0.023108f, -0.013774f, +0.000357f, +0.008403f, +0.012521f, +0.003071f, -0.005024f, +0.000351f, +0.001855f, - -0.011384f, -0.010272f, +0.001024f, +0.004088f, +0.005831f, -0.006850f, -0.003225f, +0.003095f, -0.003437f, +0.007193f, - -0.001079f, -0.000530f, -0.002957f, +0.011204f, +0.000364f, +0.000530f, -0.004586f, -0.000329f, +0.003563f, +0.008526f, - -0.003399f, +0.004384f, -0.002700f, -0.008596f, -0.002268f, +0.001234f, +0.002550f, -0.001129f, +0.001525f, +0.007855f, - +0.000289f, -0.001464f, -0.000095f, +0.002105f, -0.001164f, +0.001331f, +0.002161f, -0.006371f, +0.001398f, +0.000986f, - -0.000076f, -0.000986f, -0.005982f, +0.002178f, +0.000212f, -0.002742f, +0.001996f, -0.001596f, -0.003345f, -0.003517f, - +0.001446f, +0.002758f, -0.000188f, -0.001662f, -0.002027f, -0.000552f - }, - { - -0.031536f, +0.115950f, +0.007673f, +0.115482f, -0.014437f, -0.003913f, +0.024467f, +0.028979f, -0.013869f, -0.000151f, - -0.001445f, -0.002226f, +0.031644f, -0.004632f, +0.023419f, -0.001391f, +0.000745f, -0.031731f, -0.004776f, +0.004803f, - -0.015367f, +0.032032f, -0.004366f, +0.011364f, -0.021401f, +0.001087f, -0.018012f, -0.017991f, -0.002335f, +0.004886f, - -0.013813f, -0.009594f, -0.008746f, +0.003158f, +0.008442f, -0.008154f, +0.005246f, +0.007226f, +0.004314f, -0.000079f, - +0.000909f, +0.011331f, -0.000314f, +0.001341f, +0.003078f, -0.006995f, +0.001364f, +0.002795f, -0.012554f, +0.004414f, - +0.001910f, -0.008328f, +0.014826f, -0.002161f, -0.005061f, +0.004805f, +0.004582f, +0.001787f, +0.005041f, -0.005423f, - -0.000118f, +0.002818f, -0.007807f, +0.001001f, -0.003920f, -0.006391f, +0.006662f, +0.004314f, -0.000860f, +0.001713f, - +0.002041f, -0.001525f, -0.002100f, -0.000176f, +0.002719f, -0.002131f, -0.001876f, +0.001300f, -0.000323f, -0.001123f, - -0.002556f, +0.000465f, +0.003899f, -0.000402f, +0.004542f, -0.004397f, +0.000434f, -0.000399f, -0.001574f, +0.002311f, - +0.001409f, +0.000741f, +0.002758f, -0.000444f, +0.000316f, +0.000174f - }, - { - -0.005051f, +0.032632f, -0.023391f, -0.007221f, +0.001044f, -0.003229f, +0.005354f, +0.000487f, -0.011952f, -0.000373f, - +0.022806f, +0.003734f, +0.000190f, +0.015495f, +0.032847f, +0.000813f, -0.023704f, -0.005278f, +0.011259f, +0.032663f, - -0.011060f, -0.004709f, -0.019977f, +0.012673f, +0.017371f, -0.032904f, -0.028458f, -0.000095f, +0.002446f, +0.009119f, - -0.037212f, +0.010671f, +0.026735f, -0.001786f, +0.017745f, +0.006713f, -0.014793f, +0.017657f, +0.013174f, +0.002862f, - +0.001727f, +0.006602f, -0.010352f, +0.005129f, -0.010639f, +0.001906f, +0.008920f, +0.003999f, +0.007197f, +0.008727f, - -0.016339f, +0.005930f, -0.007558f, -0.009021f, -0.000720f, +0.000909f, -0.005185f, +0.001539f, +0.004349f, +0.006470f, - +0.003392f, -0.002624f, -0.003864f, +0.007628f, -0.001444f, +0.004723f, +0.001406f, -0.002146f, -0.000265f, +0.000456f, - -0.005205f, +0.000186f, -0.007856f, -0.001615f, -0.000627f, -0.001532f, -0.001721f, +0.002249f, +0.003898f, +0.001736f, - +0.004227f, +0.002208f, -0.002034f, -0.001094f, -0.002545f, -0.001529f, -0.000347f, -0.000792f, +0.002200f, -0.000102f, - +0.001098f, +0.000504f, -0.001533f, -0.001110f, +0.002674f, -0.001652f - }, - { - -0.011639f, +0.244054f, +0.015473f, +0.120510f, -0.021818f, -0.004595f, +0.020531f, +0.014216f, +0.023731f, -0.007602f, - -0.009503f, +0.012775f, +0.033919f, +0.012896f, +0.010476f, -0.005946f, +0.015484f, +0.013591f, -0.004577f, -0.001644f, - +0.006172f, -0.002246f, -0.017236f, -0.011927f, +0.015112f, +0.004537f, +0.005498f, +0.006472f, +0.002767f, -0.008907f, - -0.002013f, +0.010381f, -0.001525f, +0.010232f, -0.012900f, +0.006562f, -0.000399f, +0.009897f, -0.016270f, -0.008599f, - -0.007727f, -0.004740f, -0.003379f, +0.003196f, -0.003558f, -0.001271f, -0.011143f, -0.002632f, -0.011378f, -0.018008f, - -0.006188f, -0.010701f, -0.006267f, -0.004082f, +0.000714f, -0.002976f, +0.002901f, +0.003282f, +0.011203f, -0.000644f, - -0.003886f, -0.001033f, +0.000242f, -0.009428f, -0.006784f, -0.006841f, +0.002109f, -0.003504f, +0.000186f, -0.004467f, - -0.000584f, +0.001614f, +0.000336f, -0.010521f, +0.002068f, -0.000702f, -0.005732f, +0.001227f, +0.003103f, +0.003352f, - +0.003858f, -0.000127f, +0.003773f, +0.001128f, -0.002509f, +0.001548f, +0.001005f, -0.001440f, -0.003748f, -0.001093f, - +0.001860f, +0.000856f, +0.001650f, -0.002575f, +0.000486f, +0.001740f - }, - { - +0.002956f, -0.102441f, -0.053326f, -0.001381f, -0.010653f, -0.010297f, -0.014481f, +0.000753f, +0.007769f, +0.032736f, - +0.014579f, +0.019189f, +0.029129f, +0.006075f, -0.014667f, -0.007624f, +0.008080f, -0.012809f, -0.000305f, +0.011667f, - +0.015304f, +0.018085f, -0.013419f, -0.004030f, +0.013474f, -0.003963f, +0.009161f, +0.000714f, +0.002042f, +0.018674f, - -0.024467f, +0.014591f, +0.018972f, -0.012064f, -0.014183f, +0.001188f, -0.009634f, -0.018922f, -0.009761f, +0.008862f, - +0.010436f, -0.005789f, +0.004737f, +0.000549f, +0.004001f, -0.000784f, +0.000866f, -0.004348f, +0.011223f, -0.006447f, - -0.006926f, -0.009757f, -0.008335f, +0.002391f, +0.003487f, -0.008937f, +0.000592f, -0.004014f, +0.004370f, -0.004499f, - -0.002191f, -0.003121f, +0.001757f, -0.002570f, +0.000625f, +0.001050f, +0.000104f, +0.000583f, +0.000070f, -0.000761f, - +0.000207f, +0.000935f, +0.004798f, -0.003440f, -0.004610f, +0.002060f, -0.002709f, +0.001718f, +0.001585f, +0.006486f, - -0.002309f, +0.002248f, +0.001167f, +0.000918f, -0.006107f, -0.003908f, +0.001184f, -0.001132f, -0.004000f, -0.003157f, - +0.000194f, -0.003832f, +0.000220f, -0.000012f, +0.001311f, -0.001566f - }, - { - -0.011139f, -0.260271f, +0.084204f, -0.002630f, -0.010164f, -0.092200f, +0.060123f, -0.000278f, +0.011775f, +0.018659f, - +0.003604f, -0.012848f, +0.013057f, -0.034434f, +0.008601f, -0.013756f, +0.036200f, +0.033273f, +0.019484f, -0.018589f, - +0.001522f, -0.003358f, +0.007793f, -0.003553f, +0.001130f, -0.006982f, -0.002998f, -0.020203f, +0.002764f, +0.015273f, - -0.002448f, -0.001205f, +0.005627f, -0.014441f, -0.007219f, +0.013544f, -0.007104f, -0.002755f, +0.008153f, +0.003614f, - +0.008498f, +0.006640f, -0.001071f, +0.004821f, +0.003527f, -0.007789f, -0.001520f, -0.014631f, +0.005102f, -0.003391f, - +0.005261f, -0.007785f, -0.003952f, -0.002399f, +0.006603f, -0.003094f, -0.006288f, -0.007065f, -0.001544f, -0.003960f, - +0.002155f, -0.003283f, -0.005230f, -0.001451f, +0.001957f, +0.006740f, +0.001206f, +0.000213f, -0.000414f, +0.002708f, - -0.001678f, +0.000181f, +0.000359f, +0.000190f, -0.001124f, +0.000629f, -0.004569f, -0.000874f, +0.002457f, +0.005469f, - -0.002515f, +0.000093f, +0.000309f, -0.002461f, -0.000013f, +0.001108f, -0.003201f, -0.002388f, +0.000762f, +0.001062f, - +0.000020f, -0.004025f, +0.000032f, +0.003835f, -0.000785f, -0.000952f - }, - { - -0.002473f, -0.072923f, +0.009017f, +0.022773f, +0.008308f, +0.005541f, -0.018061f, +0.011396f, -0.003512f, +0.003268f, - -0.026919f, +0.003464f, -0.020958f, -0.014199f, +0.033129f, -0.028648f, -0.008301f, +0.010420f, -0.046183f, +0.000458f, - +0.010630f, +0.001321f, -0.021000f, -0.016800f, +0.011176f, +0.007053f, +0.028462f, -0.005981f, -0.008081f, +0.002398f, - -0.007197f, -0.004949f, -0.015199f, +0.025029f, +0.001983f, -0.010263f, -0.015073f, -0.027867f, -0.017775f, +0.001159f, - +0.016066f, +0.002317f, -0.011283f, -0.003525f, -0.002403f, -0.000777f, -0.002905f, -0.004003f, +0.001680f, +0.004839f, - -0.004198f, -0.004915f, -0.001188f, -0.000091f, +0.002692f, +0.009049f, -0.008214f, +0.014764f, +0.010690f, -0.000463f, - -0.007378f, +0.002414f, +0.002529f, +0.003583f, -0.002690f, +0.001689f, +0.004744f, +0.000805f, -0.000384f, -0.002221f, - -0.001042f, -0.001167f, -0.004153f, +0.000314f, +0.001952f, +0.004848f, -0.004642f, -0.001867f, -0.000085f, -0.002530f, - -0.004378f, +0.003583f, +0.000241f, -0.003641f, +0.000002f, +0.001213f, -0.001276f, +0.001442f, +0.001907f, -0.001245f, - +0.001927f, +0.000392f, +0.000295f, -0.000456f, +0.000351f, +0.002576f - }, - { - -0.039216f, -0.081783f, -0.009576f, +0.024996f, -0.010745f, +0.023887f, -0.035958f, +0.021938f, +0.021290f, +0.015485f, - -0.061283f, +0.024454f, -0.000985f, -0.004328f, -0.008470f, +0.012916f, +0.020761f, +0.006486f, -0.020558f, -0.007364f, - -0.008767f, +0.000225f, +0.002851f, +0.011145f, +0.009065f, -0.018155f, -0.021894f, -0.014215f, -0.024487f, -0.005452f, - +0.021764f, -0.036866f, +0.006834f, +0.012842f, +0.005140f, +0.007957f, +0.012488f, -0.009402f, -0.007003f, -0.011287f, - +0.020169f, +0.016930f, +0.000400f, -0.002226f, -0.002420f, +0.010768f, +0.006943f, +0.008108f, -0.014941f, -0.006393f, - -0.008741f, -0.009261f, -0.002723f, -0.004006f, -0.017497f, -0.008674f, -0.009578f, +0.001236f, -0.000647f, +0.000777f, - +0.003058f, +0.002688f, +0.006299f, +0.001680f, -0.006171f, +0.005997f, +0.010039f, -0.005288f, -0.010013f, -0.003499f, - -0.003464f, +0.004575f, -0.001147f, -0.005088f, -0.001684f, +0.001276f, +0.005069f, +0.000445f, -0.001965f, +0.003384f, - +0.003485f, +0.004478f, +0.001417f, -0.000455f, -0.002956f, -0.000553f, +0.000569f, +0.001166f, -0.005866f, +0.001163f, - +0.000182f, +0.001367f, -0.000022f, +0.000140f, -0.003854f, -0.002858f - }, - { - +0.007708f, +0.079932f, -0.006838f, -0.003282f, -0.003023f, +0.012750f, +0.012379f, -0.002631f, +0.005506f, +0.005596f, - -0.010131f, -0.005292f, +0.014491f, +0.038071f, -0.124812f, -0.008298f, -0.002384f, +0.025464f, -0.023646f, -0.017826f, - -0.001353f, -0.000627f, -0.006862f, -0.011350f, -0.022757f, -0.002609f, -0.012361f, +0.005653f, -0.011750f, +0.004983f, - +0.011489f, +0.024502f, +0.004319f, -0.003170f, -0.000574f, +0.022683f, +0.011105f, +0.002722f, +0.001751f, +0.003025f, - -0.008496f, -0.003677f, -0.007432f, +0.003596f, +0.005411f, +0.002056f, -0.004353f, +0.005420f, -0.004546f, +0.008823f, - -0.000279f, -0.004342f, +0.008766f, +0.001136f, -0.008884f, +0.008774f, -0.003363f, +0.004408f, +0.006988f, -0.009738f, - +0.000921f, -0.001733f, -0.001411f, +0.014050f, +0.006482f, +0.002725f, +0.002903f, +0.005065f, +0.009075f, -0.003445f, - +0.000588f, +0.006885f, -0.001118f, -0.000682f, -0.009384f, +0.003356f, +0.001843f, +0.001547f, -0.007934f, -0.002019f, - +0.001205f, -0.000103f, +0.002310f, -0.001749f, +0.001025f, +0.004169f, +0.003802f, -0.000971f, +0.003317f, +0.004159f, - -0.006378f, +0.002166f, +0.000802f, +0.002981f, +0.002699f, -0.002353f - }, - { - -0.034593f, +0.037598f, +0.043336f, -0.036530f, +0.003696f, +0.011195f, +0.003983f, +0.006540f, -0.016483f, +0.007089f, - +0.014978f, +0.000106f, -0.032032f, +0.010811f, +0.081698f, +0.006988f, -0.008362f, -0.005593f, -0.037414f, -0.001811f, - -0.014874f, +0.015473f, +0.018537f, -0.005148f, -0.018937f, +0.013216f, +0.002237f, -0.019650f, -0.011276f, -0.021903f, - +0.000871f, -0.022459f, +0.014701f, +0.006863f, +0.006189f, -0.012952f, +0.007061f, -0.000476f, +0.010594f, -0.012385f, - +0.001753f, -0.008168f, +0.015351f, -0.004020f, -0.011156f, -0.009184f, -0.014830f, -0.008988f, -0.012683f, -0.004012f, - +0.000588f, +0.002851f, -0.015279f, +0.014653f, -0.000850f, -0.005240f, -0.001797f, +0.005058f, -0.001558f, -0.010933f, - -0.003005f, +0.006583f, +0.008337f, +0.003240f, -0.001497f, +0.003757f, -0.001395f, -0.000140f, +0.000696f, +0.002802f, - -0.002013f, -0.001404f, -0.002867f, +0.001484f, -0.001175f, -0.003301f, -0.003475f, +0.002494f, -0.000917f, -0.004095f, - +0.004193f, +0.000602f, -0.002888f, -0.000857f, +0.000527f, +0.000644f, -0.000572f, +0.000044f, +0.003056f, -0.002314f, - +0.004023f, +0.002842f, +0.000794f, +0.001006f, +0.000979f, +0.001401f - } - }, - { - { - -0.002235f, +0.014689f, +0.030726f, +0.052665f, -0.025664f, +0.004723f, -0.010426f, -0.004763f, -0.011727f, +0.004696f, - -0.009006f, -0.018568f, -0.004842f, +0.015563f, +0.024378f, +0.003829f, -0.045756f, -0.010499f, +0.025266f, -0.003779f, - +0.019506f, -0.001304f, +0.002528f, +0.013275f, -0.019600f, +0.011085f, -0.033420f, +0.021848f, -0.005451f, +0.001079f, - -0.003478f, -0.024662f, +0.007648f, -0.000294f, -0.003813f, -0.004009f, -0.007455f, -0.001093f, +0.014208f, +0.002386f, - -0.005948f, +0.016353f, +0.008911f, +0.001418f, -0.004671f, +0.002532f, +0.028125f, +0.006058f, -0.012597f, -0.001183f, - +0.004058f, +0.013795f, -0.008712f, +0.008575f, +0.011281f, -0.001543f, -0.009292f, +0.003448f, -0.003624f, +0.004926f, - +0.000905f, +0.002380f, -0.000614f, -0.007140f, -0.000945f, -0.002405f, -0.001515f, +0.002335f, +0.003362f, +0.004640f, - -0.001786f, +0.003697f, -0.004056f, +0.007660f, -0.004003f, +0.000551f, -0.001855f, +0.002129f, -0.005326f, +0.003878f, - +0.001779f, +0.003094f, +0.002022f, +0.001346f, -0.004428f, -0.002311f, +0.001043f, +0.000185f, +0.001408f, +0.002290f, - +0.002078f, +0.000563f, -0.000124f, -0.001936f, +0.000236f, +0.001894f - }, - { - -0.006450f, +0.464562f, +0.004074f, +0.132112f, -0.020974f, +0.011546f, +0.016134f, +0.016808f, +0.016468f, -0.003589f, - +0.006472f, -0.048092f, -0.017988f, -0.002791f, -0.000955f, +0.019947f, -0.000465f, -0.017120f, +0.003685f, -0.004085f, - -0.003895f, -0.003233f, +0.007904f, +0.000108f, -0.000780f, -0.014273f, +0.002567f, +0.007475f, +0.023872f, -0.003202f, - +0.001560f, +0.013278f, -0.006477f, +0.015537f, +0.010923f, -0.009125f, -0.003190f, -0.002502f, +0.002479f, +0.000872f, - +0.004045f, -0.001677f, +0.015352f, -0.010639f, -0.000853f, -0.011023f, -0.000499f, +0.009444f, +0.010866f, +0.003897f, - -0.001472f, -0.000523f, -0.000594f, -0.018200f, +0.000031f, +0.010683f, -0.009554f, -0.000166f, -0.003415f, +0.000720f, - -0.001974f, -0.002306f, +0.003388f, -0.001044f, +0.004482f, +0.001783f, +0.001016f, -0.003065f, +0.000511f, +0.003522f, - -0.003618f, +0.000080f, +0.003026f, +0.001171f, +0.001691f, -0.000330f, -0.001539f, -0.001894f, -0.003444f, +0.000415f, - +0.003558f, -0.002547f, -0.001492f, +0.001187f, +0.001896f, +0.003504f, +0.003724f, -0.001924f, -0.000003f, -0.000936f, - +0.001590f, +0.002993f, +0.001912f, -0.001504f, +0.001726f, -0.000483f - }, - { - +0.012981f, -0.178506f, -0.036178f, -0.072328f, +0.028175f, -0.006702f, +0.019710f, +0.001389f, +0.006497f, -0.020357f, - +0.003438f, +0.048807f, +0.017699f, +0.006281f, +0.003890f, +0.018087f, -0.006741f, +0.015700f, -0.006527f, +0.011431f, - -0.014638f, +0.002377f, +0.003208f, +0.010618f, -0.007731f, -0.013300f, -0.014326f, -0.002664f, +0.021810f, -0.007848f, - +0.016130f, +0.007063f, +0.003259f, -0.010393f, +0.018353f, -0.007339f, -0.003664f, -0.013308f, -0.005890f, +0.000026f, - -0.012222f, -0.005295f, +0.003743f, +0.001231f, +0.003698f, +0.002892f, +0.002302f, -0.004333f, -0.012781f, -0.000453f, - +0.019612f, -0.004474f, -0.001205f, -0.006913f, +0.000934f, +0.001383f, -0.001968f, -0.001100f, -0.001385f, +0.009459f, - +0.002206f, -0.009751f, -0.003708f, -0.006291f, -0.004155f, -0.002153f, +0.004490f, -0.004323f, -0.003524f, +0.002192f, - -0.001414f, -0.006811f, -0.005894f, +0.001036f, -0.002276f, +0.001273f, +0.000183f, -0.000225f, -0.000113f, -0.004598f, - +0.003899f, +0.003366f, +0.003768f, +0.000007f, -0.000278f, +0.000428f, +0.002328f, -0.001376f, +0.003795f, +0.001380f, - +0.002759f, -0.000322f, -0.000936f, -0.001968f, +0.003478f, +0.002147f - }, - { - +0.004102f, +0.006495f, -0.003469f, -0.007297f, -0.004122f, -0.002383f, +0.006036f, +0.004991f, +0.004420f, +0.007229f, - -0.007275f, +0.013983f, +0.008884f, +0.011684f, -0.031193f, -0.015930f, +0.025657f, +0.040655f, +0.013340f, -0.010841f, - -0.002072f, +0.005806f, -0.013090f, -0.024283f, +0.007774f, +0.014818f, +0.002207f, -0.004027f, +0.002658f, +0.006788f, - +0.013476f, -0.021869f, +0.015361f, -0.009983f, -0.003780f, +0.016272f, +0.031815f, -0.001863f, -0.004816f, -0.002997f, - +0.009534f, -0.003091f, -0.014287f, -0.003099f, +0.003520f, -0.001103f, +0.000043f, -0.000824f, +0.010469f, -0.001365f, - +0.002008f, -0.007011f, +0.006094f, +0.008794f, -0.008278f, -0.002823f, -0.004849f, -0.002505f, +0.003634f, +0.002961f, - +0.006182f, +0.002008f, +0.001926f, +0.002186f, -0.002367f, -0.000424f, +0.004932f, -0.004177f, +0.006808f, +0.004639f, - -0.001226f, +0.006576f, +0.002221f, -0.000974f, -0.005028f, +0.003498f, -0.000187f, -0.001260f, +0.000960f, +0.001016f, - +0.003195f, -0.000421f, +0.001611f, +0.000764f, +0.000754f, +0.000580f, +0.003466f, +0.004958f, -0.001236f, +0.001061f, - +0.004225f, -0.001351f, -0.002176f, +0.001396f, +0.001717f, -0.002916f - }, - { - +0.030327f, -0.007903f, -0.008205f, +0.084008f, +0.012648f, -0.001769f, +0.004562f, +0.006664f, -0.017920f, -0.007216f, - -0.051865f, -0.019183f, +0.039220f, -0.009042f, +0.031846f, +0.017555f, +0.000294f, -0.027926f, -0.029026f, -0.035834f, - -0.010472f, -0.007037f, -0.028560f, +0.003542f, -0.012454f, +0.018265f, -0.021520f, -0.001742f, +0.009834f, +0.020304f, - +0.000135f, -0.000700f, -0.004462f, -0.010837f, +0.003749f, +0.019375f, -0.019830f, +0.018818f, -0.024517f, -0.005066f, - -0.006930f, -0.000788f, -0.003064f, +0.008279f, +0.007924f, -0.008540f, +0.016059f, +0.007213f, -0.007688f, +0.002935f, - -0.002760f, -0.010413f, +0.001659f, +0.002145f, +0.006929f, +0.002922f, -0.002830f, +0.002663f, +0.000327f, +0.003917f, - -0.013929f, +0.008108f, +0.008124f, +0.003431f, -0.010526f, +0.011370f, -0.008348f, +0.004777f, +0.004284f, +0.001934f, - -0.002689f, +0.003348f, +0.003760f, -0.000615f, +0.001409f, -0.001453f, -0.001958f, -0.001917f, +0.001102f, -0.003760f, - +0.000779f, +0.000436f, +0.003070f, -0.004849f, +0.005621f, +0.003001f, -0.001430f, -0.003949f, -0.003780f, +0.002219f, - +0.000402f, -0.001568f, +0.002672f, +0.002809f, -0.002151f, -0.000159f - }, - { - -0.000190f, -0.047520f, +0.003167f, +0.011532f, -0.000917f, -0.003474f, -0.001874f, -0.002373f, +0.000047f, -0.005333f, - -0.002089f, -0.006932f, +0.005528f, +0.019918f, +0.049360f, +0.004434f, +0.001528f, -0.008067f, -0.011495f, -0.006984f, - +0.017896f, +0.007687f, -0.012418f, -0.001636f, -0.008956f, +0.002188f, -0.007186f, -0.028009f, +0.023925f, +0.005968f, - -0.010371f, -0.006710f, -0.020298f, -0.005600f, +0.004155f, +0.019984f, -0.007387f, -0.009417f, +0.007450f, +0.000569f, - -0.014729f, -0.007441f, +0.002229f, +0.006914f, -0.001599f, +0.005183f, -0.008159f, +0.002458f, -0.003502f, +0.002712f, - +0.002625f, +0.000221f, +0.005719f, +0.006344f, -0.005393f, -0.003661f, +0.004667f, +0.000051f, +0.008507f, +0.000851f, - +0.002312f, -0.000650f, -0.001743f, -0.008845f, -0.000699f, -0.000504f, +0.002453f, -0.006290f, +0.008582f, +0.002070f, - -0.002445f, +0.003036f, +0.000872f, +0.002688f, +0.000020f, -0.001661f, +0.003257f, -0.004545f, +0.001973f, -0.001448f, - -0.000168f, -0.000869f, -0.005937f, +0.001588f, -0.000452f, -0.001927f, -0.000322f, -0.000492f, +0.000273f, -0.002399f, - -0.000998f, +0.001569f, +0.001239f, -0.003695f, -0.000853f, -0.000767f - }, - { - +0.060840f, -0.026404f, +0.013560f, +0.096031f, +0.015030f, -0.005843f, +0.012912f, +0.018676f, +0.016147f, -0.017737f, - +0.024242f, -0.004126f, +0.025738f, +0.007518f, +0.014343f, -0.010803f, -0.022284f, -0.030802f, +0.005694f, +0.008907f, - +0.001068f, +0.001726f, +0.012121f, -0.017688f, +0.005698f, +0.007883f, -0.010888f, -0.026049f, +0.003730f, -0.006169f, - -0.006100f, -0.010846f, +0.002394f, +0.002103f, +0.008082f, -0.005563f, +0.001366f, +0.006453f, +0.001289f, -0.002210f, - +0.007310f, +0.003130f, +0.004308f, +0.007744f, -0.001076f, -0.010499f, +0.020308f, -0.005801f, -0.014409f, +0.001533f, - +0.005226f, -0.008014f, +0.009069f, -0.001632f, -0.000639f, +0.001224f, +0.005556f, -0.000904f, +0.005096f, -0.001997f, - -0.003448f, +0.001997f, -0.012519f, +0.007838f, -0.007951f, -0.000678f, -0.002340f, +0.007797f, +0.000325f, +0.000116f, - +0.002770f, -0.001089f, -0.002205f, -0.002080f, -0.000153f, -0.001122f, +0.000709f, -0.000172f, -0.000732f, +0.000787f, - -0.000777f, -0.001685f, +0.000845f, +0.003331f, +0.000588f, -0.003947f, -0.000776f, +0.000161f, +0.000862f, +0.005020f, - -0.000831f, +0.001874f, +0.000718f, +0.000329f, -0.000215f, +0.001687f - }, - { - +0.001484f, -0.028140f, +0.009102f, -0.010372f, -0.007471f, +0.002956f, -0.001945f, +0.001877f, -0.009995f, +0.003493f, - +0.014666f, +0.008935f, +0.021591f, +0.016776f, +0.000187f, -0.016379f, -0.004615f, -0.009007f, -0.001415f, +0.032330f, - -0.004926f, -0.018596f, -0.006331f, +0.000475f, +0.016581f, -0.036674f, -0.024386f, +0.009491f, +0.023412f, -0.012001f, - -0.033639f, +0.028648f, +0.001501f, +0.007684f, +0.012740f, +0.000669f, -0.018049f, +0.032011f, +0.003114f, +0.000431f, - +0.016128f, -0.011163f, +0.010391f, -0.012063f, -0.004066f, +0.003561f, +0.007847f, +0.001472f, +0.004818f, +0.010759f, - -0.008208f, -0.003964f, -0.004932f, -0.007207f, -0.002115f, -0.000590f, -0.006601f, +0.005078f, +0.002037f, +0.008785f, - +0.002114f, -0.000016f, -0.001943f, +0.004624f, +0.005811f, +0.004079f, +0.001258f, -0.002525f, +0.000660f, -0.000269f, - -0.010913f, +0.000940f, -0.001486f, -0.004903f, +0.000800f, +0.000633f, -0.001659f, -0.000816f, +0.003209f, +0.002861f, - -0.000142f, +0.002292f, +0.001737f, -0.004679f, -0.000571f, +0.000313f, -0.001025f, -0.003078f, +0.001433f, +0.000423f, - +0.001432f, -0.003032f, +0.001142f, +0.002353f, -0.001483f, -0.000903f - }, - { - +0.053074f, +0.189622f, -0.024697f, +0.111632f, +0.029453f, -0.018744f, +0.014672f, +0.014218f, +0.040873f, -0.019197f, - +0.021791f, -0.005851f, -0.003741f, +0.026045f, +0.024829f, -0.005418f, +0.018034f, +0.004471f, -0.007413f, +0.008643f, - +0.012506f, +0.003728f, -0.015850f, -0.008618f, +0.024895f, +0.004902f, -0.006409f, +0.001318f, +0.002213f, -0.003110f, - +0.012923f, +0.006909f, -0.003335f, +0.009425f, -0.001440f, +0.001159f, -0.005889f, +0.007378f, -0.000523f, -0.021536f, - -0.017983f, +0.002633f, +0.008151f, -0.002012f, -0.013760f, -0.001432f, -0.005355f, -0.007255f, -0.003394f, -0.020315f, - -0.010425f, -0.007314f, +0.005234f, -0.015063f, -0.006358f, +0.000156f, +0.001042f, +0.005054f, +0.004231f, -0.001558f, - +0.001775f, -0.000716f, +0.004690f, -0.008669f, -0.010151f, +0.000196f, -0.007174f, -0.003001f, -0.000824f, -0.005789f, - +0.005038f, +0.000698f, +0.000900f, -0.006974f, -0.004409f, -0.000040f, +0.000081f, -0.003323f, +0.002198f, +0.005902f, - +0.007771f, -0.001864f, -0.000852f, +0.007711f, -0.004570f, +0.001275f, -0.001213f, -0.002867f, -0.000617f, -0.001870f, - +0.000790f, +0.001413f, +0.001615f, -0.001907f, -0.000269f, +0.002242f - }, - { - -0.001137f, -0.099824f, -0.044545f, -0.010512f, +0.006063f, -0.031526f, -0.018155f, -0.004203f, +0.020402f, +0.020526f, - -0.004609f, +0.045650f, +0.021964f, +0.023392f, -0.019060f, -0.011706f, -0.015276f, +0.010325f, +0.010007f, -0.014201f, - +0.038286f, -0.004148f, +0.009348f, -0.019135f, +0.026319f, -0.004240f, -0.002847f, +0.003387f, +0.014810f, +0.008577f, - -0.023661f, +0.006323f, +0.031013f, -0.021568f, -0.009168f, +0.008960f, -0.033174f, -0.004338f, +0.002389f, -0.012430f, - +0.003069f, +0.002908f, -0.002982f, +0.007297f, +0.009036f, -0.001881f, -0.002377f, -0.001144f, +0.017521f, -0.008717f, - -0.012611f, -0.011114f, -0.008160f, +0.019335f, -0.008494f, +0.003958f, -0.001101f, -0.001063f, -0.003288f, -0.002344f, - +0.000535f, -0.002982f, -0.001624f, +0.005578f, -0.004525f, +0.003869f, -0.004490f, +0.000945f, -0.002656f, +0.003901f, - +0.001469f, -0.000611f, -0.002764f, +0.003819f, -0.006160f, -0.002378f, +0.004234f, +0.001589f, +0.001169f, +0.003663f, - +0.000057f, -0.001121f, +0.000517f, +0.000750f, -0.004410f, -0.002570f, -0.000453f, -0.001619f, -0.004876f, -0.005079f, - +0.001008f, -0.001107f, -0.000926f, -0.002615f, +0.001488f, +0.001142f - }, - { - +0.003785f, -0.268941f, +0.071919f, -0.003534f, -0.031390f, +0.017005f, -0.029529f, +0.015174f, +0.003677f, +0.004524f, - -0.005775f, +0.021483f, -0.016447f, -0.013211f, -0.002575f, -0.011706f, +0.017230f, +0.051855f, -0.009994f, +0.002046f, - +0.005691f, +0.015400f, -0.008276f, -0.002544f, -0.020179f, +0.009183f, -0.007631f, -0.011494f, -0.019839f, +0.009634f, - +0.016091f, -0.019157f, +0.007013f, -0.011015f, -0.003861f, +0.011866f, +0.003464f, -0.010891f, +0.009200f, +0.011568f, - +0.000801f, -0.001010f, +0.004839f, +0.008103f, -0.005502f, -0.004147f, +0.000131f, -0.008727f, -0.000764f, -0.002527f, - -0.003789f, -0.007188f, -0.000654f, -0.006311f, +0.008015f, -0.003095f, -0.005502f, -0.008193f, -0.000519f, +0.004147f, - -0.008712f, -0.006343f, +0.002933f, -0.000096f, +0.001587f, +0.005629f, +0.003721f, -0.006824f, +0.003243f, +0.001318f, - +0.003653f, -0.003744f, +0.005923f, -0.004794f, +0.001572f, +0.001653f, -0.004344f, -0.001458f, -0.000036f, +0.004032f, - +0.000323f, +0.000006f, -0.000839f, -0.000174f, +0.001541f, -0.002543f, +0.000278f, -0.002282f, -0.002436f, +0.002490f, - +0.000102f, -0.003720f, +0.002337f, -0.000780f, +0.001072f, -0.001665f - }, - { - +0.004158f, -0.053501f, -0.006180f, +0.003805f, +0.025596f, +0.005108f, -0.008599f, -0.000102f, +0.002643f, -0.009560f, - +0.001210f, -0.016397f, -0.014623f, -0.037114f, +0.032186f, -0.014769f, +0.004518f, +0.006018f, -0.048936f, -0.013185f, - +0.020872f, -0.008382f, -0.025631f, +0.008610f, -0.001206f, -0.002575f, +0.044871f, -0.010625f, -0.004833f, +0.013443f, - -0.019086f, +0.002857f, -0.012629f, +0.023380f, -0.001997f, -0.017023f, -0.003529f, -0.019418f, -0.026486f, +0.000329f, - +0.023962f, +0.001513f, -0.007335f, -0.011539f, +0.000135f, -0.006759f, -0.014222f, +0.009647f, -0.003878f, +0.003627f, - -0.000786f, -0.001354f, +0.002939f, -0.005156f, +0.001110f, -0.001620f, +0.003126f, +0.016275f, +0.010947f, +0.004828f, - -0.010279f, +0.006654f, -0.003071f, +0.010656f, -0.004425f, -0.000519f, +0.006462f, -0.003004f, -0.001890f, +0.002079f, - -0.001648f, -0.004681f, -0.003587f, -0.001358f, +0.004094f, +0.002146f, -0.004903f, -0.001714f, +0.000880f, -0.001942f, - -0.001586f, +0.000003f, -0.000969f, +0.001072f, -0.005385f, +0.002132f, -0.000839f, +0.002580f, -0.001353f, +0.003252f, - +0.001053f, -0.002358f, +0.000062f, +0.000111f, +0.001671f, +0.000967f - }, - { - +0.023543f, -0.167861f, -0.009686f, +0.049400f, -0.038171f, -0.032696f, +0.010360f, +0.005174f, +0.021793f, +0.015491f, - -0.046722f, +0.013097f, -0.001378f, +0.023008f, -0.010717f, +0.001073f, +0.033889f, -0.017019f, +0.002626f, -0.000819f, - -0.032624f, -0.002436f, -0.006123f, +0.016984f, +0.003421f, -0.011581f, -0.018236f, -0.010902f, -0.033054f, +0.006900f, - +0.005518f, -0.018129f, -0.000585f, +0.012861f, +0.013582f, +0.001467f, +0.002702f, +0.003406f, -0.015269f, -0.003607f, - +0.002252f, +0.018198f, +0.009456f, -0.000068f, +0.000822f, +0.004981f, +0.008402f, +0.004333f, -0.004412f, -0.000716f, - -0.016780f, -0.005931f, -0.004192f, -0.014901f, -0.009831f, -0.011978f, -0.013050f, +0.004146f, +0.000789f, +0.006551f, - +0.000118f, +0.006394f, +0.004131f, -0.001819f, -0.000957f, +0.007536f, +0.001043f, -0.000896f, -0.005813f, -0.001322f, - -0.003511f, +0.004017f, -0.001824f, -0.007961f, +0.001741f, +0.000404f, +0.002488f, +0.000360f, -0.000836f, +0.002376f, - +0.004063f, +0.002969f, +0.005324f, -0.001740f, -0.004305f, -0.002621f, +0.005113f, -0.000674f, -0.005429f, +0.000580f, - +0.003917f, +0.000244f, +0.000394f, -0.004730f, -0.002000f, -0.003065f - }, - { - -0.007576f, +0.099986f, +0.000007f, -0.004563f, +0.006112f, +0.015693f, -0.011359f, +0.004712f, -0.007614f, +0.011684f, - -0.010972f, -0.007455f, +0.020204f, -0.065201f, +0.024860f, -0.020987f, -0.009823f, +0.011923f, -0.014491f, -0.016589f, - -0.018911f, -0.004432f, +0.015927f, -0.013225f, -0.027560f, +0.012444f, -0.018126f, +0.023792f, -0.036041f, +0.004314f, - +0.013604f, +0.017956f, +0.012879f, +0.012950f, -0.012888f, +0.022657f, +0.011532f, +0.003229f, +0.000789f, -0.023355f, - +0.003540f, +0.001934f, -0.012077f, +0.007231f, +0.008290f, +0.002668f, +0.002765f, +0.005167f, -0.004410f, +0.007856f, - -0.003060f, -0.016837f, +0.015325f, -0.000107f, +0.002177f, +0.010236f, -0.007087f, +0.001121f, +0.000179f, +0.001254f, - -0.002753f, -0.002585f, +0.005763f, +0.008602f, -0.000489f, +0.007892f, +0.003519f, +0.007746f, +0.005074f, +0.003127f, - -0.003506f, +0.008470f, +0.001144f, -0.002965f, -0.005542f, +0.000073f, +0.002461f, -0.000487f, -0.003968f, -0.001539f, - -0.002040f, +0.001783f, +0.001229f, +0.000008f, -0.000991f, +0.001105f, +0.006530f, +0.000924f, -0.002492f, +0.005141f, - -0.003943f, +0.000609f, +0.000195f, +0.002006f, +0.003583f, -0.002047f - }, - { - +0.039316f, -0.059393f, +0.050304f, -0.033522f, -0.017303f, -0.010308f, +0.019376f, +0.010417f, +0.008931f, -0.018882f, - +0.033526f, -0.026061f, -0.011636f, +0.052070f, +0.006657f, -0.019030f, +0.018762f, -0.028731f, -0.002474f, -0.008954f, - -0.026679f, +0.027642f, +0.015240f, +0.011167f, -0.018491f, +0.009103f, -0.014154f, -0.024259f, -0.018792f, +0.015669f, - -0.013568f, -0.006584f, +0.002720f, +0.019021f, -0.014543f, -0.002815f, +0.004735f, +0.020223f, +0.005775f, -0.014971f, - -0.010253f, -0.012136f, +0.000942f, +0.011500f, -0.015984f, -0.010869f, -0.012983f, -0.014812f, -0.010519f, -0.000605f, - +0.008309f, +0.000736f, -0.006767f, +0.006027f, +0.008207f, -0.008384f, -0.010688f, +0.000143f, -0.001263f, -0.007408f, - +0.002555f, -0.000593f, +0.007293f, +0.001166f, +0.006993f, -0.000497f, -0.006335f, +0.005483f, +0.000180f, +0.002444f, - -0.006991f, -0.003994f, -0.000367f, +0.000372f, -0.000620f, -0.003263f, -0.005090f, +0.003771f, -0.002665f, -0.000273f, - +0.003998f, -0.000205f, -0.001457f, -0.000206f, +0.000697f, -0.000049f, +0.002220f, +0.000032f, -0.001602f, +0.001749f, - +0.004489f, +0.000073f, +0.003051f, -0.001832f, +0.004095f, -0.000597f - } - }, - { - { - +0.000260f, -0.077718f, -0.047276f, +0.048477f, -0.030764f, -0.001722f, -0.013081f, +0.006441f, +0.000174f, -0.000879f, - -0.013683f, -0.010457f, -0.009772f, -0.028218f, -0.014908f, -0.011470f, -0.034677f, +0.004911f, +0.021658f, -0.010013f, - +0.026713f, +0.011533f, -0.006319f, +0.005466f, -0.008616f, +0.011952f, -0.029644f, +0.012374f, -0.009090f, +0.002045f, - +0.009310f, +0.006761f, +0.017889f, -0.009807f, -0.002479f, -0.001756f, -0.011703f, -0.005881f, +0.010816f, -0.000669f, - -0.007950f, +0.005130f, +0.003183f, +0.001992f, -0.004641f, -0.002369f, +0.017330f, -0.004135f, -0.014632f, -0.001971f, - +0.006074f, +0.012974f, -0.005049f, +0.018882f, +0.007760f, -0.003909f, -0.003607f, +0.001650f, -0.007394f, +0.005329f, - +0.000168f, +0.008277f, +0.007269f, +0.002213f, +0.004594f, -0.000963f, -0.003205f, -0.001378f, +0.005281f, +0.009657f, - +0.004384f, +0.005766f, -0.005862f, +0.009162f, +0.000510f, +0.005815f, -0.000797f, +0.004080f, -0.000364f, +0.004267f, - -0.000524f, +0.000785f, +0.002674f, +0.001841f, -0.001950f, +0.000770f, +0.002643f, -0.000054f, -0.000042f, -0.000929f, - +0.001866f, +0.001740f, +0.000705f, -0.003209f, -0.001763f, +0.000228f - }, - { - +0.011217f, +0.551291f, +0.055243f, +0.124283f, -0.023879f, -0.014312f, -0.015743f, -0.011599f, -0.008870f, -0.030515f, - -0.011070f, +0.003419f, +0.012830f, -0.019361f, -0.017748f, -0.001262f, +0.005189f, +0.008393f, +0.019173f, +0.008962f, - +0.003451f, -0.005992f, +0.010001f, +0.014384f, +0.004806f, -0.008210f, -0.004191f, -0.005827f, +0.008771f, -0.006312f, - -0.000160f, +0.004339f, -0.018022f, +0.001641f, +0.006791f, -0.009984f, -0.000866f, -0.000468f, -0.000289f, -0.002907f, - +0.007103f, -0.005069f, +0.012170f, -0.005652f, -0.003347f, -0.017551f, -0.001777f, +0.004177f, +0.002387f, -0.005238f, - -0.006342f, -0.002793f, +0.005588f, -0.005994f, +0.005725f, +0.006355f, -0.015213f, -0.001617f, -0.000512f, +0.006706f, - +0.004934f, -0.003617f, +0.007101f, +0.010156f, +0.002610f, -0.003476f, +0.004367f, +0.001083f, +0.005722f, +0.004772f, - -0.003753f, -0.001876f, +0.001962f, +0.001914f, -0.000104f, +0.001447f, +0.001532f, +0.001249f, -0.002114f, -0.000872f, - +0.004022f, -0.003517f, -0.003299f, +0.000821f, -0.001216f, +0.000281f, +0.001806f, -0.001455f, +0.002668f, +0.001121f, - +0.001482f, +0.002398f, +0.001541f, -0.001448f, +0.001832f, -0.001510f - }, - { - -0.013753f, -0.085934f, +0.057205f, -0.083064f, +0.031432f, +0.001232f, +0.010334f, -0.010200f, +0.006922f, -0.014453f, - -0.018279f, +0.010655f, -0.011844f, -0.013728f, +0.007725f, +0.023156f, -0.019422f, +0.019339f, -0.012792f, +0.003301f, - -0.019164f, -0.009854f, -0.008755f, -0.001242f, +0.000545f, +0.004969f, -0.009041f, +0.001852f, +0.006212f, -0.030799f, - +0.014631f, +0.018064f, +0.003081f, -0.019333f, +0.007795f, -0.006888f, +0.025735f, +0.014769f, +0.009696f, -0.002046f, - -0.011554f, +0.007548f, +0.008215f, -0.000405f, +0.006284f, -0.003425f, -0.009104f, +0.000827f, -0.000489f, +0.002262f, - +0.018838f, -0.009308f, -0.001983f, +0.000104f, +0.006676f, +0.007716f, +0.001363f, +0.000800f, -0.000429f, +0.006227f, - +0.000806f, -0.007144f, -0.001305f, -0.000241f, +0.000197f, +0.000847f, +0.001632f, -0.004362f, -0.005313f, -0.006462f, - +0.002476f, +0.000206f, -0.000741f, +0.008291f, +0.002703f, +0.006802f, +0.002337f, -0.004994f, -0.003368f, -0.005635f, - +0.000028f, -0.000812f, +0.004372f, -0.000365f, -0.000313f, +0.001322f, +0.000310f, -0.001346f, +0.003542f, +0.000565f, - +0.000604f, -0.003689f, -0.000156f, -0.000085f, +0.003218f, +0.002480f - }, - { - -0.004796f, +0.021413f, +0.016122f, +0.001551f, +0.000250f, -0.002132f, +0.006051f, -0.004171f, -0.000924f, +0.005458f, - -0.009985f, +0.007992f, -0.000800f, +0.001133f, -0.034431f, -0.017123f, +0.025240f, +0.015777f, -0.008308f, +0.006765f, - +0.020043f, -0.002726f, -0.006936f, -0.004263f, +0.017370f, +0.031948f, +0.013418f, +0.000930f, +0.001052f, -0.020183f, - -0.001884f, -0.005293f, +0.018245f, +0.001440f, +0.003799f, +0.002273f, +0.030777f, +0.005024f, +0.011705f, -0.001884f, - +0.012002f, -0.004928f, -0.017337f, -0.007049f, +0.004490f, +0.010633f, +0.000612f, -0.005879f, +0.005826f, -0.006861f, - +0.004005f, -0.003103f, +0.001924f, -0.003090f, -0.005451f, +0.000175f, -0.010508f, -0.006703f, +0.006658f, +0.005134f, - +0.003476f, +0.002491f, +0.003276f, +0.001386f, +0.002855f, +0.005240f, +0.002488f, -0.008110f, -0.001835f, -0.000556f, - -0.001704f, +0.003876f, -0.001753f, -0.001216f, -0.000872f, +0.003751f, -0.001684f, +0.000678f, -0.000494f, -0.003120f, - -0.000407f, -0.001854f, +0.001863f, +0.003106f, +0.001085f, -0.003025f, +0.000854f, +0.003584f, -0.000336f, +0.000499f, - +0.002824f, -0.001014f, -0.001031f, -0.000126f, -0.000220f, -0.001140f - }, - { - -0.048227f, -0.130418f, -0.006290f, +0.068483f, -0.013329f, -0.004415f, -0.008694f, +0.001273f, -0.017353f, -0.018791f, - -0.004718f, +0.030401f, +0.024409f, -0.021079f, -0.000044f, -0.005936f, +0.004044f, -0.027421f, -0.020522f, -0.028218f, - -0.005985f, -0.011832f, -0.021979f, +0.007177f, -0.015968f, +0.021500f, -0.013058f, +0.014872f, +0.019909f, +0.000376f, - -0.016542f, +0.005762f, -0.012074f, -0.006214f, +0.006100f, +0.002142f, -0.027297f, +0.020077f, -0.017816f, +0.005634f, - +0.004545f, +0.009913f, -0.007530f, -0.003815f, +0.000248f, -0.014155f, +0.003012f, -0.001970f, -0.000394f, +0.001564f, - -0.005324f, -0.006446f, +0.005189f, +0.000364f, +0.002826f, -0.000765f, -0.005010f, +0.001418f, +0.000677f, -0.001561f, - -0.019570f, +0.001531f, +0.002535f, +0.011668f, -0.007779f, +0.007047f, -0.008202f, +0.001903f, +0.000378f, -0.002330f, - -0.005424f, +0.003225f, +0.004390f, -0.000546f, -0.000426f, -0.000477f, +0.005097f, +0.000544f, +0.001639f, -0.004015f, - -0.001802f, +0.000146f, +0.005722f, -0.007052f, +0.000923f, +0.002653f, +0.000607f, -0.005122f, -0.003204f, +0.002271f, - -0.000829f, -0.001960f, +0.002966f, +0.001481f, -0.001893f, +0.001609f - }, - { - +0.002651f, -0.015268f, +0.016786f, +0.003749f, -0.001455f, +0.000513f, +0.000658f, +0.000068f, +0.003639f, -0.009598f, - -0.012943f, -0.007599f, +0.009876f, -0.008261f, +0.006137f, -0.013079f, +0.008626f, +0.016504f, +0.015540f, +0.014164f, - +0.013041f, -0.006444f, -0.001722f, +0.013762f, -0.022353f, -0.012448f, +0.014953f, -0.023544f, +0.008734f, +0.003025f, - +0.018528f, +0.015629f, -0.019144f, -0.003214f, -0.007424f, +0.002119f, -0.011734f, -0.011643f, +0.003756f, -0.006904f, - -0.012964f, +0.007569f, +0.015002f, +0.018458f, +0.005889f, +0.008399f, -0.009992f, +0.002172f, -0.012391f, -0.000997f, - +0.010586f, +0.002072f, +0.003639f, -0.004826f, -0.004348f, -0.001265f, +0.006604f, +0.001559f, +0.005966f, -0.002554f, - +0.002509f, -0.002513f, -0.001250f, -0.005516f, +0.004869f, -0.000798f, -0.002297f, -0.007648f, +0.009117f, +0.000766f, - -0.003287f, +0.004861f, -0.001223f, +0.001924f, +0.002881f, -0.000637f, +0.005224f, -0.000062f, +0.004681f, -0.001990f, - -0.001470f, +0.000493f, -0.004534f, -0.000145f, +0.000252f, +0.001131f, +0.000983f, -0.000328f, +0.002110f, -0.000700f, - -0.002992f, -0.000184f, +0.003014f, +0.000112f, +0.000806f, -0.001145f - }, - { - -0.074655f, -0.260866f, -0.020177f, +0.079553f, +0.009044f, -0.002662f, -0.006705f, +0.020983f, +0.028349f, -0.011190f, - +0.052574f, +0.002309f, +0.011813f, +0.011108f, +0.003872f, +0.000409f, -0.003165f, -0.015006f, -0.004149f, -0.003211f, - +0.008666f, -0.012887f, +0.014433f, +0.004795f, +0.028881f, +0.005765f, +0.002382f, +0.000010f, +0.017764f, -0.001883f, - +0.006954f, +0.004548f, +0.012381f, -0.001083f, +0.013245f, +0.006242f, -0.002452f, -0.002460f, -0.002542f, -0.002980f, - +0.003564f, -0.002553f, +0.002855f, +0.007775f, +0.010419f, -0.006542f, +0.005908f, -0.018739f, -0.011169f, -0.002852f, - +0.002250f, -0.006356f, -0.000718f, -0.010890f, -0.002520f, +0.000733f, +0.002314f, -0.007310f, +0.002029f, +0.000366f, - -0.003188f, +0.012467f, -0.006198f, +0.007532f, +0.000765f, +0.008606f, -0.005298f, +0.000813f, -0.000820f, +0.000472f, - -0.001713f, -0.001324f, +0.001196f, +0.000034f, -0.000333f, -0.000622f, -0.000561f, -0.002107f, -0.002593f, +0.002773f, - -0.000407f, -0.004185f, +0.000690f, +0.002888f, -0.001870f, -0.002491f, -0.000103f, +0.000584f, -0.001213f, +0.004197f, - +0.000635f, +0.000559f, -0.001624f, +0.001135f, +0.001656f, +0.002200f - }, - { - +0.003722f, -0.029396f, -0.000871f, -0.001915f, -0.003914f, +0.002519f, -0.003972f, +0.003738f, -0.006709f, -0.002369f, - -0.004036f, -0.002731f, +0.008185f, -0.006947f, -0.033922f, -0.018382f, +0.015852f, -0.015200f, -0.037948f, +0.002024f, - -0.020094f, -0.025562f, +0.021195f, +0.008634f, +0.009011f, -0.017627f, -0.009572f, -0.013195f, -0.006790f, -0.012989f, - -0.013489f, +0.016878f, -0.015262f, +0.001377f, +0.001605f, +0.008489f, -0.021397f, +0.008480f, -0.016231f, +0.000464f, - +0.024540f, -0.015182f, +0.011854f, -0.008066f, -0.002499f, +0.001079f, +0.011703f, +0.010977f, -0.004935f, +0.010799f, - +0.005753f, +0.006315f, +0.001693f, -0.004688f, +0.001954f, +0.000176f, -0.004342f, +0.010228f, -0.009301f, -0.006547f, - -0.000232f, +0.008054f, -0.000317f, +0.001115f, +0.008322f, +0.005317f, +0.003030f, -0.005190f, -0.004418f, +0.001871f, - -0.006070f, +0.005474f, +0.005665f, -0.002183f, +0.002946f, +0.000213f, -0.002564f, -0.002280f, +0.001014f, +0.000996f, - -0.001873f, -0.001575f, +0.001165f, -0.001686f, +0.001830f, +0.003582f, -0.000937f, -0.004739f, +0.000425f, +0.001063f, - -0.001030f, -0.002727f, +0.001859f, -0.000174f, -0.004235f, -0.002589f - }, - { - -0.094860f, +0.063786f, +0.043413f, +0.123446f, +0.035331f, -0.009268f, +0.031508f, -0.015153f, -0.002359f, +0.000831f, - +0.027470f, -0.014172f, -0.013225f, -0.003864f, +0.001461f, -0.011511f, +0.003468f, -0.017054f, +0.001613f, +0.009176f, - +0.014900f, +0.018972f, -0.007742f, -0.008069f, +0.016606f, +0.007680f, -0.006503f, -0.005543f, +0.000143f, +0.005012f, - +0.021596f, +0.001911f, -0.018809f, +0.008827f, +0.018485f, +0.021758f, -0.012561f, -0.013347f, +0.011539f, -0.006542f, - -0.010466f, +0.018460f, +0.012976f, -0.007565f, -0.011215f, +0.000329f, +0.002472f, +0.001714f, -0.000259f, -0.014072f, - -0.001527f, -0.006012f, +0.004227f, -0.013520f, -0.002488f, -0.002595f, -0.009917f, -0.000587f, +0.000625f, +0.002308f, - +0.006751f, -0.002477f, +0.003036f, -0.001991f, -0.003449f, +0.004326f, -0.004977f, -0.001155f, +0.000833f, -0.005090f, - +0.003882f, -0.000306f, +0.002610f, -0.000712f, +0.000959f, +0.002817f, +0.004324f, -0.002281f, +0.001178f, +0.005276f, - +0.005504f, -0.003308f, -0.000443f, +0.001711f, -0.006410f, -0.001249f, -0.004041f, -0.000625f, +0.003420f, -0.000416f, - -0.001472f, -0.001235f, -0.000583f, -0.000131f, +0.000291f, +0.000309f - }, - { - -0.002590f, -0.097412f, -0.024113f, -0.001004f, +0.002037f, -0.025853f, -0.007369f, -0.006779f, +0.010437f, +0.005083f, - -0.027059f, +0.019110f, +0.008439f, +0.023431f, -0.021645f, -0.009476f, -0.018902f, +0.004596f, +0.009100f, -0.041556f, - +0.000224f, -0.012842f, +0.023545f, -0.005227f, +0.008782f, -0.007196f, +0.008725f, +0.011963f, +0.012291f, -0.003152f, - -0.014818f, +0.001500f, +0.016973f, -0.007029f, +0.002562f, +0.017557f, -0.018764f, +0.001982f, +0.000118f, -0.012236f, - +0.010159f, +0.005980f, -0.002643f, +0.009764f, -0.003919f, -0.010023f, -0.002881f, +0.007242f, +0.025473f, -0.002189f, - -0.003320f, +0.006445f, +0.004621f, +0.013823f, -0.016658f, +0.006254f, -0.003326f, -0.002045f, +0.002035f, +0.005047f, - +0.006048f, -0.003220f, -0.007609f, +0.010116f, -0.005238f, +0.000722f, +0.001158f, +0.003827f, -0.004010f, -0.001292f, - -0.002345f, +0.000302f, -0.006226f, +0.002625f, -0.002421f, -0.003652f, +0.002209f, -0.001563f, +0.000528f, +0.002603f, - +0.003098f, +0.000604f, -0.000428f, -0.000120f, -0.002665f, +0.001893f, -0.000607f, -0.002961f, -0.003718f, -0.003545f, - +0.000087f, -0.000672f, -0.001202f, -0.003049f, +0.001296f, -0.000088f - }, - { - +0.003907f, -0.319354f, +0.009422f, -0.008483f, -0.007520f, +0.049822f, -0.060413f, +0.002330f, +0.011275f, -0.011170f, - -0.014644f, +0.013502f, -0.019363f, +0.001389f, -0.003410f, -0.015411f, +0.005839f, +0.051284f, -0.010534f, +0.005244f, - -0.002478f, +0.011675f, +0.007644f, -0.004726f, -0.027722f, +0.012847f, +0.000159f, -0.008953f, -0.032454f, -0.012588f, - +0.008170f, -0.009519f, +0.004517f, -0.010367f, +0.017089f, +0.020057f, +0.000073f, -0.011691f, -0.006250f, +0.007726f, - +0.008331f, -0.006025f, +0.007879f, +0.005008f, -0.018875f, -0.007486f, -0.000091f, -0.004859f, +0.001360f, -0.011100f, - -0.005991f, -0.003920f, -0.001677f, -0.003791f, +0.010469f, -0.003422f, -0.007415f, +0.000703f, +0.001582f, +0.004705f, - -0.001605f, +0.002884f, +0.007135f, -0.000257f, +0.000525f, +0.004844f, +0.006091f, -0.004501f, +0.004257f, -0.000120f, - +0.000366f, -0.002782f, +0.010114f, -0.002859f, +0.002896f, +0.002483f, -0.001159f, +0.001352f, +0.000093f, +0.005953f, - +0.002078f, +0.000880f, -0.000430f, +0.001674f, +0.001371f, -0.000370f, +0.004093f, -0.000094f, -0.003230f, +0.000494f, - +0.000790f, -0.002876f, +0.001395f, -0.005016f, +0.001325f, +0.000148f - }, - { - -0.006293f, -0.044488f, +0.009727f, -0.001799f, +0.008008f, -0.004428f, +0.000265f, -0.001407f, +0.004078f, +0.000395f, - +0.016967f, -0.005538f, -0.012946f, -0.002017f, +0.052217f, -0.003707f, +0.021236f, +0.020253f, -0.022691f, -0.021211f, - +0.002227f, +0.022602f, +0.020372f, +0.019378f, +0.003267f, -0.025733f, +0.019089f, -0.002910f, -0.007256f, +0.006945f, - +0.001245f, +0.023586f, -0.010772f, +0.020014f, -0.007489f, -0.020756f, +0.015403f, +0.005778f, -0.014592f, -0.000399f, - +0.012724f, -0.010871f, -0.009149f, +0.001724f, +0.008262f, -0.000931f, -0.011064f, +0.009302f, -0.000218f, +0.007782f, - -0.003058f, -0.006376f, -0.002226f, -0.009284f, +0.001257f, -0.002944f, +0.004400f, +0.003520f, -0.002943f, +0.005302f, - -0.001205f, +0.012541f, +0.001854f, +0.005549f, -0.012193f, -0.004753f, +0.003129f, -0.004953f, -0.000668f, +0.001687f, - -0.003178f, -0.000521f, +0.005231f, +0.003017f, +0.001070f, -0.000663f, -0.001855f, -0.001463f, +0.001797f, -0.000295f, - -0.001873f, -0.002645f, -0.005646f, +0.001008f, -0.003897f, -0.000709f, -0.003974f, +0.001709f, -0.004362f, -0.001984f, - -0.001091f, -0.001664f, +0.000821f, +0.000802f, +0.003281f, +0.002238f - }, - { - +0.012152f, -0.203078f, -0.031865f, +0.027970f, -0.062166f, -0.048458f, -0.000394f, -0.008108f, -0.007677f, +0.011983f, - -0.018868f, -0.002203f, -0.001730f, +0.023475f, -0.014149f, +0.012554f, +0.035538f, +0.013090f, +0.024623f, +0.004355f, - -0.012954f, +0.009128f, +0.007650f, -0.001348f, -0.014473f, +0.004485f, +0.001233f, +0.023168f, -0.006489f, +0.011557f, - +0.014949f, -0.001737f, -0.001890f, +0.014304f, +0.007389f, -0.006959f, +0.009988f, +0.007009f, -0.009130f, +0.003435f, - -0.000692f, +0.007283f, -0.001448f, -0.007679f, -0.000093f, -0.007017f, +0.005768f, +0.013017f, +0.000120f, +0.004752f, - -0.009130f, -0.006766f, -0.006661f, -0.003549f, +0.006109f, -0.003475f, -0.013700f, +0.001440f, +0.002213f, +0.010005f, - +0.003046f, +0.006929f, +0.005909f, +0.006982f, +0.001624f, -0.002794f, -0.010512f, -0.000756f, -0.004888f, -0.002831f, - -0.002822f, +0.000287f, -0.000604f, -0.000789f, +0.004302f, -0.002724f, -0.003599f, -0.000190f, +0.001610f, -0.000703f, - +0.002781f, -0.000283f, +0.001308f, -0.001339f, -0.000790f, -0.002846f, +0.002537f, +0.000151f, +0.000353f, +0.000190f, - +0.002481f, +0.000704f, +0.001183f, -0.003902f, +0.000538f, +0.003258f - }, - { - +0.007618f, +0.084600f, -0.030316f, -0.010579f, +0.004988f, +0.003958f, -0.019354f, +0.011157f, -0.000771f, +0.016939f, - +0.002864f, -0.002671f, +0.006820f, +0.011982f, +0.150269f, -0.034845f, -0.010668f, +0.008734f, -0.027723f, +0.001622f, - -0.026058f, -0.010520f, +0.035223f, +0.000737f, -0.011992f, +0.033130f, -0.007011f, +0.015755f, -0.032104f, -0.007012f, - -0.015815f, -0.015875f, -0.000752f, +0.009569f, -0.010632f, +0.018867f, -0.005992f, -0.011776f, +0.006183f, -0.021000f, - +0.004317f, +0.008845f, -0.005478f, +0.008564f, +0.001929f, +0.005789f, +0.010049f, -0.010741f, -0.009474f, -0.001887f, - -0.002964f, -0.006656f, +0.011091f, +0.003890f, +0.007808f, +0.010233f, -0.010294f, +0.003491f, +0.002482f, -0.000261f, - -0.001413f, -0.001435f, +0.002704f, -0.000434f, -0.005275f, +0.002577f, -0.001937f, +0.008055f, +0.003244f, +0.004148f, - -0.004521f, +0.001949f, -0.001640f, +0.003525f, +0.001889f, +0.000156f, -0.001798f, -0.001498f, +0.000285f, +0.002705f, - -0.000675f, -0.001677f, -0.000332f, +0.000836f, -0.002194f, -0.000148f, +0.002765f, -0.002596f, -0.005582f, +0.004012f, - -0.000697f, +0.002220f, -0.003405f, -0.001119f, +0.003297f, -0.001739f - }, - { - -0.023947f, -0.193677f, -0.013113f, -0.039710f, -0.006410f, -0.009431f, +0.022247f, +0.022748f, +0.027241f, -0.037135f, - +0.019020f, +0.020544f, +0.014426f, -0.040227f, -0.105046f, +0.000157f, +0.051065f, -0.003654f, +0.051023f, -0.000462f, - -0.036403f, +0.024870f, +0.027680f, +0.020675f, -0.021980f, -0.011100f, -0.017072f, +0.014432f, +0.003640f, +0.026619f, - -0.003882f, -0.008177f, +0.000067f, +0.032289f, +0.007464f, +0.008727f, +0.000737f, +0.008949f, +0.020763f, +0.003278f, - -0.006829f, -0.013735f, -0.007526f, +0.020338f, -0.005805f, +0.001739f, +0.008820f, +0.001674f, +0.002064f, +0.010927f, - +0.010661f, +0.004283f, +0.001290f, +0.000112f, +0.004493f, -0.007087f, -0.011340f, -0.008603f, -0.002895f, -0.002044f, - -0.000634f, -0.008651f, -0.000328f, -0.002833f, +0.001586f, -0.007018f, -0.004816f, -0.001465f, -0.007595f, +0.002447f, - -0.003282f, -0.006583f, -0.001162f, +0.002590f, +0.003545f, +0.001738f, -0.003235f, +0.003406f, +0.000005f, +0.000556f, - +0.003342f, +0.002176f, +0.002258f, +0.001153f, +0.002623f, +0.001015f, +0.002997f, +0.000301f, -0.003102f, -0.003182f, - +0.000206f, -0.001544f, +0.003005f, -0.000484f, +0.003212f, -0.001661f - } - }, - { - { - -0.000203f, -0.139800f, +0.002357f, +0.018682f, +0.000826f, -0.008412f, -0.004587f, +0.002304f, -0.005642f, +0.008867f, - -0.020724f, -0.032019f, +0.026152f, -0.014086f, -0.025398f, -0.028038f, -0.007870f, -0.005324f, +0.034094f, -0.001054f, - -0.009047f, +0.010007f, -0.002240f, +0.011038f, -0.005096f, +0.000352f, -0.003615f, -0.016477f, +0.006436f, +0.006252f, - +0.010935f, +0.006972f, +0.011056f, -0.009664f, -0.008208f, -0.003240f, +0.000062f, -0.011238f, +0.016498f, -0.007562f, - -0.004746f, -0.001001f, +0.003087f, +0.000194f, -0.006787f, +0.004944f, +0.019762f, -0.012465f, -0.007334f, -0.008819f, - +0.005253f, +0.005076f, -0.000615f, +0.019209f, +0.006285f, -0.000334f, +0.004199f, -0.009903f, -0.001369f, +0.001243f, - -0.001433f, +0.011882f, +0.005524f, +0.006805f, +0.001867f, +0.002794f, -0.002199f, -0.003124f, +0.000331f, +0.011709f, - +0.004962f, +0.004874f, +0.001059f, +0.002785f, +0.003942f, +0.003246f, -0.000205f, +0.001357f, +0.003034f, +0.002725f, - -0.000843f, +0.001253f, +0.002103f, -0.000687f, +0.001929f, -0.000464f, +0.003527f, -0.001450f, -0.001456f, -0.002844f, - +0.001707f, +0.002557f, +0.002394f, -0.003097f, -0.001888f, -0.000682f - }, - { - -0.017301f, +0.588153f, +0.055606f, +0.070844f, +0.014476f, -0.013777f, -0.027724f, -0.013629f, -0.016464f, -0.005166f, - -0.049686f, +0.016691f, +0.019986f, -0.028178f, -0.008048f, -0.005224f, +0.028453f, +0.013555f, +0.010254f, +0.010091f, - +0.005692f, -0.010117f, +0.000509f, +0.025760f, +0.006935f, -0.002659f, -0.022505f, +0.012981f, -0.013317f, +0.010373f, - -0.003207f, -0.014118f, +0.003453f, -0.017153f, +0.000979f, -0.002590f, +0.009605f, -0.004458f, +0.000374f, -0.003141f, - +0.004317f, +0.003748f, -0.010537f, +0.005313f, -0.011182f, +0.000624f, -0.006139f, -0.006465f, +0.007347f, -0.006346f, - -0.005763f, -0.001908f, +0.003722f, +0.000817f, -0.004167f, -0.002345f, -0.005435f, -0.003006f, +0.002640f, -0.000047f, - +0.008807f, -0.006485f, +0.007858f, +0.013777f, -0.000062f, -0.002030f, +0.005355f, -0.000272f, +0.006575f, +0.000828f, - -0.002255f, -0.001838f, +0.000552f, +0.003066f, +0.000832f, -0.001469f, +0.001739f, +0.000534f, -0.000368f, -0.000813f, - +0.002812f, +0.000830f, -0.007210f, +0.001132f, -0.000010f, +0.000005f, -0.001350f, +0.001566f, +0.001263f, +0.002033f, - +0.001225f, +0.000160f, +0.001947f, +0.000019f, +0.000051f, -0.000440f - }, - { - +0.013268f, +0.054696f, -0.074955f, -0.038944f, +0.007227f, +0.012014f, -0.014427f, -0.005184f, -0.007275f, +0.019718f, - -0.010226f, -0.010408f, -0.015801f, -0.007864f, +0.016049f, -0.000194f, -0.009297f, +0.034195f, -0.021976f, +0.006128f, - -0.006474f, -0.012273f, -0.023105f, +0.013412f, +0.006192f, -0.007290f, -0.002540f, +0.001863f, -0.008605f, -0.012856f, - +0.011080f, +0.006902f, -0.005725f, +0.003463f, -0.003287f, -0.008887f, +0.034334f, +0.016892f, +0.016464f, -0.010955f, - -0.009899f, +0.009799f, -0.000554f, -0.002353f, +0.011460f, -0.004112f, -0.018922f, +0.014598f, -0.000906f, +0.003989f, - +0.006356f, -0.004481f, +0.000713f, +0.002620f, -0.001646f, +0.010125f, +0.003674f, +0.002722f, -0.000510f, +0.000530f, - -0.000512f, -0.003559f, -0.000209f, +0.002507f, -0.002443f, +0.006748f, -0.001208f, -0.011437f, +0.000657f, -0.008184f, - +0.002563f, -0.002277f, +0.003147f, +0.006389f, +0.006364f, +0.002915f, -0.000871f, +0.001304f, -0.004056f, -0.005614f, - -0.000736f, +0.001665f, -0.001057f, +0.001059f, +0.000332f, -0.000711f, -0.000722f, +0.002774f, +0.000900f, -0.000890f, - -0.000560f, -0.002331f, +0.000144f, +0.001154f, +0.001863f, +0.001436f - }, - { - +0.003735f, +0.036371f, -0.004259f, +0.002013f, -0.001735f, +0.000949f, +0.003546f, -0.004430f, -0.004595f, +0.007687f, - -0.007972f, -0.001583f, +0.003065f, +0.003584f, +0.004833f, -0.035677f, +0.013075f, +0.013657f, +0.006279f, -0.026712f, - +0.030872f, +0.010084f, -0.019708f, +0.002319f, +0.003813f, +0.034410f, +0.021678f, -0.002205f, -0.000132f, +0.007285f, - -0.039832f, +0.029411f, -0.008584f, +0.015663f, +0.014417f, -0.003958f, +0.022689f, +0.000915f, +0.023177f, -0.001641f, - +0.010764f, -0.013273f, -0.001432f, -0.006316f, -0.005483f, +0.010589f, -0.005699f, -0.001440f, -0.005857f, +0.000769f, - +0.002651f, -0.003414f, +0.000440f, -0.006877f, +0.003409f, -0.007338f, -0.002711f, -0.010403f, +0.008017f, +0.005912f, - +0.000145f, +0.005867f, -0.000049f, +0.000237f, +0.003179f, +0.008171f, -0.000872f, -0.003637f, -0.006884f, +0.000722f, - +0.003045f, -0.003976f, -0.002291f, +0.001882f, +0.000348f, +0.000831f, -0.000400f, -0.000542f, +0.001553f, -0.003491f, - +0.002878f, -0.002080f, +0.000026f, +0.002720f, -0.000599f, -0.001458f, +0.000359f, +0.001319f, +0.001529f, -0.000098f, - +0.000929f, +0.000835f, +0.000351f, -0.001561f, -0.001606f, +0.001825f - }, - { - +0.053944f, -0.260097f, -0.037466f, +0.048352f, +0.022642f, -0.000634f, -0.011956f, -0.025621f, +0.012374f, -0.040070f, - +0.010817f, +0.042278f, +0.022260f, -0.005333f, -0.029035f, +0.016160f, -0.011470f, -0.036645f, +0.013267f, -0.030063f, - -0.001518f, -0.020724f, -0.009145f, +0.007456f, -0.017740f, +0.018566f, -0.002911f, +0.016748f, +0.012095f, -0.002005f, - -0.015131f, -0.005642f, -0.009489f, -0.002578f, +0.002170f, -0.005508f, +0.015575f, -0.023259f, +0.001605f, +0.008179f, - +0.009533f, +0.002317f, -0.006292f, -0.006873f, -0.007648f, -0.003053f, -0.005324f, -0.003823f, +0.013839f, -0.008310f, - -0.009486f, -0.002731f, +0.007204f, +0.001480f, -0.003292f, -0.007875f, +0.009689f, -0.005947f, -0.000044f, -0.006113f, - -0.008309f, +0.000142f, +0.002340f, +0.002420f, +0.001666f, -0.001186f, -0.002372f, -0.000488f, +0.001087f, -0.003070f, - -0.002806f, +0.001154f, +0.001259f, +0.001402f, -0.001290f, +0.001368f, +0.004544f, +0.000540f, +0.003612f, -0.007045f, - -0.001241f, +0.005230f, +0.000727f, -0.002220f, -0.001409f, +0.000490f, +0.002000f, -0.002729f, -0.002113f, -0.001203f, - +0.001383f, -0.001459f, +0.001312f, +0.002384f, +0.000316f, -0.000635f - }, - { - +0.000154f, +0.024230f, -0.003820f, -0.004378f, -0.000453f, +0.000798f, +0.002174f, +0.004617f, -0.001120f, -0.008753f, - -0.008907f, -0.011212f, +0.011607f, -0.009867f, -0.007242f, -0.006108f, +0.028167f, -0.015913f, +0.051038f, +0.000091f, - -0.005427f, -0.001155f, +0.010282f, +0.017640f, -0.042720f, -0.003562f, +0.023100f, -0.020851f, +0.011148f, -0.003538f, - +0.001187f, +0.024150f, -0.020888f, +0.010008f, -0.005520f, -0.008256f, -0.011455f, -0.010129f, -0.003390f, -0.002334f, - -0.001533f, +0.010071f, +0.003740f, +0.022345f, +0.003983f, +0.004642f, -0.006368f, -0.002674f, -0.017007f, +0.006935f, - +0.015781f, -0.003127f, +0.000966f, -0.011302f, +0.005474f, -0.005271f, +0.009561f, -0.001337f, +0.004750f, -0.000873f, - +0.002195f, +0.000404f, -0.002402f, -0.000425f, -0.000194f, +0.006289f, -0.004732f, -0.008523f, +0.002210f, +0.004565f, - -0.002688f, +0.002378f, +0.000020f, +0.002431f, +0.007067f, -0.001333f, +0.001553f, +0.002006f, +0.007575f, -0.004941f, - -0.002138f, +0.000801f, -0.000335f, -0.004353f, -0.000306f, +0.003235f, +0.001297f, -0.001062f, +0.001392f, +0.000963f, - -0.003023f, -0.000891f, +0.001787f, +0.003744f, -0.000156f, -0.001547f - }, - { - +0.063234f, -0.471319f, -0.026524f, +0.079025f, +0.010226f, +0.008015f, -0.009975f, +0.026044f, +0.007240f, +0.012160f, - +0.027952f, +0.005634f, -0.006821f, +0.015978f, +0.012233f, +0.012387f, -0.022174f, +0.008425f, +0.005190f, -0.035946f, - +0.030874f, -0.015861f, +0.003106f, +0.026648f, +0.032827f, -0.007984f, +0.002342f, +0.008870f, +0.010683f, +0.009068f, - +0.006283f, -0.004125f, +0.019335f, -0.000304f, +0.010264f, +0.002240f, +0.010656f, -0.007382f, -0.009582f, +0.006803f, - -0.005920f, +0.000940f, +0.001877f, +0.003871f, +0.013273f, +0.000889f, -0.011214f, -0.013523f, -0.004240f, -0.015475f, - -0.002161f, +0.004820f, -0.001351f, -0.013947f, +0.001373f, +0.008352f, -0.004356f, -0.010232f, -0.000103f, +0.003302f, - -0.001414f, +0.013492f, +0.000372f, -0.000727f, +0.007254f, +0.006605f, -0.003364f, -0.002697f, -0.000457f, -0.000569f, - -0.004562f, +0.001133f, +0.001454f, -0.001410f, +0.000525f, +0.002045f, -0.005139f, +0.000598f, -0.003501f, +0.003064f, - -0.000028f, -0.003753f, -0.000324f, +0.004231f, -0.004465f, -0.001093f, +0.000088f, +0.000901f, +0.000858f, +0.000929f, - +0.001130f, +0.000076f, -0.000963f, +0.000715f, +0.001572f, +0.001036f - }, - { - -0.001349f, +0.009490f, -0.022802f, +0.006382f, -0.004706f, -0.002312f, -0.001614f, -0.002325f, -0.000829f, +0.003028f, - -0.016100f, +0.009941f, -0.012263f, -0.013742f, -0.022537f, -0.026569f, +0.007709f, -0.002366f, -0.015489f, -0.003540f, - -0.025233f, -0.009211f, +0.032676f, +0.019508f, -0.018016f, +0.005767f, +0.001029f, -0.032331f, -0.028850f, +0.007381f, - +0.007203f, -0.014580f, -0.001863f, -0.002862f, +0.003794f, +0.016608f, -0.020957f, -0.023321f, +0.001428f, +0.006641f, - +0.001423f, -0.000316f, +0.013853f, -0.002885f, -0.003969f, +0.005961f, -0.007488f, +0.025985f, -0.007459f, +0.005336f, - +0.018579f, +0.005768f, -0.006498f, -0.001806f, -0.005831f, +0.002886f, +0.003338f, +0.007942f, -0.009042f, -0.006283f, - -0.001691f, +0.005297f, -0.002630f, +0.003086f, +0.004634f, +0.005283f, +0.002689f, -0.007067f, -0.000213f, -0.001862f, - +0.000226f, +0.000811f, +0.007647f, -0.004294f, +0.004348f, +0.000411f, -0.001165f, -0.001953f, +0.001533f, -0.001841f, - -0.001031f, +0.000581f, -0.002142f, +0.002009f, -0.001176f, +0.004387f, +0.001189f, -0.001715f, -0.002895f, +0.001782f, - -0.003346f, +0.001300f, -0.001902f, -0.000456f, -0.003453f, -0.002757f - }, - { - +0.125381f, -0.112987f, -0.078019f, +0.141806f, +0.024767f, +0.016266f, +0.029617f, -0.010539f, -0.036068f, -0.003640f, - +0.025630f, +0.005578f, -0.000804f, -0.009272f, -0.009198f, -0.005403f, +0.014462f, -0.054315f, -0.004948f, +0.019971f, - +0.003188f, +0.021564f, +0.001538f, -0.004008f, -0.003945f, +0.015026f, -0.001633f, -0.001508f, -0.011483f, +0.008351f, - +0.013914f, +0.003367f, -0.024933f, +0.013484f, +0.019872f, +0.012413f, +0.011995f, -0.020867f, -0.004675f, +0.012029f, - -0.005151f, +0.017822f, +0.010991f, -0.008320f, -0.015649f, +0.002660f, +0.014089f, -0.000534f, -0.007675f, -0.004660f, - +0.002283f, -0.005192f, -0.001588f, -0.008961f, -0.000871f, -0.000945f, -0.013849f, -0.004736f, +0.001644f, +0.004212f, - +0.006431f, +0.004894f, -0.006291f, -0.000081f, +0.001708f, -0.001384f, -0.001564f, +0.001039f, +0.001592f, -0.002186f, - +0.000102f, -0.000971f, +0.001954f, -0.000037f, +0.003454f, +0.001255f, +0.004810f, -0.000335f, +0.003935f, +0.000193f, - +0.004769f, -0.002216f, +0.002508f, -0.006701f, -0.000860f, -0.004805f, -0.002550f, +0.002437f, +0.003545f, -0.002759f, - -0.000859f, +0.000149f, -0.001551f, -0.000657f, -0.001595f, +0.000530f - }, - { - +0.005673f, -0.121000f, -0.021282f, +0.022683f, -0.007475f, -0.037450f, +0.003026f, +0.004176f, -0.006502f, +0.008113f, - -0.014254f, +0.014374f, -0.001027f, +0.014672f, -0.016171f, -0.001925f, -0.007025f, -0.022970f, -0.009781f, -0.003707f, - -0.019945f, -0.001915f, +0.011044f, +0.008575f, -0.008384f, -0.000722f, +0.015717f, +0.019138f, -0.009908f, +0.008376f, - -0.003931f, -0.003122f, +0.008562f, +0.002211f, -0.007674f, +0.006224f, -0.000960f, -0.001599f, -0.013766f, +0.008358f, - +0.018762f, -0.007542f, +0.000984f, +0.009213f, -0.017945f, -0.000193f, -0.004137f, +0.017484f, +0.012112f, -0.000817f, - +0.001307f, +0.005412f, +0.009429f, +0.001641f, -0.006374f, -0.001313f, -0.004580f, -0.003457f, +0.003251f, +0.007048f, - -0.000788f, +0.002175f, -0.008328f, +0.004802f, +0.000561f, -0.003050f, -0.001780f, +0.002961f, -0.002707f, +0.000414f, - -0.001085f, -0.000833f, -0.003093f, -0.002270f, +0.002239f, -0.004486f, +0.000216f, -0.002364f, +0.006144f, -0.000598f, - +0.001463f, -0.000181f, +0.000862f, +0.000531f, -0.003853f, +0.000962f, +0.000993f, -0.001649f, -0.002693f, -0.002233f, - -0.000489f, -0.000894f, -0.001028f, -0.002030f, -0.001417f, +0.001073f - }, - { - -0.013294f, -0.378256f, +0.073112f, -0.007170f, -0.004854f, -0.002392f, -0.003778f, -0.003125f, +0.008810f, -0.014266f, - +0.013598f, -0.038286f, +0.005150f, +0.000173f, -0.005778f, -0.012125f, +0.017040f, +0.027616f, -0.012896f, +0.024898f, - -0.003680f, -0.005405f, +0.010775f, +0.002485f, -0.015247f, +0.004073f, -0.008848f, +0.001146f, -0.024004f, -0.019052f, - +0.008250f, -0.020384f, -0.007290f, +0.006423f, +0.016778f, +0.015787f, +0.003383f, -0.003656f, -0.011234f, +0.000819f, - +0.003406f, +0.006656f, +0.006794f, +0.001997f, -0.015359f, -0.005736f, -0.001006f, -0.008001f, -0.002216f, -0.010994f, - +0.001197f, -0.003299f, +0.002189f, -0.003470f, +0.002232f, +0.007935f, -0.014017f, +0.009212f, +0.000072f, +0.001894f, - +0.001094f, +0.006468f, +0.004215f, +0.003580f, +0.001159f, -0.001689f, +0.006311f, +0.004636f, -0.001533f, +0.004279f, - -0.005042f, -0.002865f, +0.005599f, +0.004515f, -0.000116f, +0.002235f, -0.001295f, +0.004499f, +0.001680f, +0.005246f, - -0.001692f, -0.000194f, +0.000281f, +0.002651f, +0.001111f, +0.003660f, +0.000458f, -0.000045f, -0.001359f, -0.000513f, - +0.001661f, -0.001678f, -0.000381f, -0.005265f, +0.001272f, -0.001576f - }, - { - +0.006911f, -0.025357f, -0.017331f, -0.001801f, -0.011864f, +0.002375f, +0.004737f, -0.003083f, +0.001488f, +0.008111f, - +0.019976f, -0.008398f, -0.035766f, +0.027209f, +0.047186f, +0.009807f, +0.029316f, -0.008399f, -0.008570f, +0.019500f, - -0.025235f, +0.004216f, +0.060992f, -0.015806f, +0.014842f, -0.002204f, -0.020468f, +0.010110f, -0.012654f, +0.021919f, - +0.008248f, +0.014639f, -0.006977f, +0.025878f, -0.011739f, -0.015806f, +0.009497f, -0.000470f, +0.008106f, -0.008192f, - -0.003133f, -0.006509f, -0.002315f, +0.005407f, +0.000795f, +0.005198f, -0.008960f, +0.003871f, +0.006170f, -0.001746f, - +0.002823f, -0.007461f, -0.008954f, -0.011045f, +0.005364f, -0.000102f, +0.001328f, -0.002361f, -0.003076f, +0.000742f, - +0.008305f, +0.006252f, +0.009019f, -0.001485f, -0.007702f, -0.008821f, +0.003056f, -0.003408f, +0.000601f, +0.000148f, - -0.002114f, +0.002528f, +0.006039f, +0.002858f, -0.002981f, -0.001699f, +0.005392f, -0.003000f, -0.001878f, -0.000291f, - -0.001871f, +0.002488f, -0.005703f, -0.003801f, +0.000292f, -0.003004f, -0.002913f, +0.000183f, -0.001986f, -0.002913f, - -0.001158f, -0.003998f, +0.003836f, +0.000838f, +0.000329f, +0.000135f - }, - { - -0.053007f, -0.120464f, -0.019376f, +0.007141f, -0.041694f, -0.021962f, -0.031681f, +0.006793f, -0.002489f, -0.009406f, - +0.007344f, -0.009878f, -0.010347f, +0.010488f, -0.025446f, +0.036743f, +0.032130f, +0.033172f, +0.028724f, -0.012123f, - +0.007317f, -0.010455f, +0.013652f, +0.000717f, -0.019115f, +0.003250f, -0.004460f, +0.025131f, +0.027390f, -0.011631f, - +0.005980f, +0.017954f, -0.000563f, +0.005025f, +0.001527f, -0.003471f, +0.011374f, +0.009094f, -0.002972f, +0.000275f, - +0.004972f, -0.001317f, +0.005099f, -0.020783f, +0.003875f, -0.002261f, +0.005095f, +0.003645f, +0.005221f, +0.002214f, - -0.008743f, -0.009356f, +0.000427f, -0.000995f, +0.002524f, +0.002132f, -0.010596f, -0.000939f, +0.001210f, +0.005899f, - +0.006066f, +0.009163f, +0.004450f, +0.007866f, -0.001376f, -0.003795f, -0.013452f, -0.002257f, -0.000125f, -0.004751f, - -0.000462f, +0.000878f, -0.001496f, +0.003122f, -0.002588f, -0.004734f, +0.000644f, -0.001857f, +0.004256f, -0.005449f, - +0.003845f, -0.000973f, +0.000161f, +0.000120f, -0.001527f, -0.000005f, +0.001023f, -0.003576f, +0.004953f, +0.000152f, - -0.000310f, +0.000969f, +0.003076f, -0.003429f, +0.000258f, +0.004810f - }, - { - -0.010093f, +0.066302f, +0.000968f, -0.017596f, -0.005531f, -0.006829f, +0.013768f, -0.003806f, +0.013012f, +0.009991f, - +0.010723f, +0.007992f, -0.000731f, +0.069876f, +0.076557f, -0.054872f, -0.000964f, -0.002908f, -0.023838f, -0.001815f, - -0.014268f, -0.031341f, +0.035148f, +0.013919f, +0.003095f, +0.005125f, +0.020639f, -0.018440f, +0.006244f, -0.012234f, - -0.017398f, -0.026097f, +0.002089f, +0.006261f, -0.002124f, -0.002204f, -0.009554f, +0.007344f, +0.007868f, -0.009714f, - -0.015094f, +0.012668f, +0.007866f, -0.006069f, +0.009065f, -0.000119f, +0.003414f, -0.017961f, +0.007796f, -0.005536f, - -0.001012f, +0.004314f, -0.005700f, +0.012600f, +0.000834f, +0.011643f, -0.009055f, -0.000001f, +0.000334f, +0.004421f, - -0.000056f, -0.004287f, +0.003510f, -0.000953f, -0.007191f, +0.000037f, -0.001243f, +0.003600f, +0.004679f, +0.004531f, - -0.003552f, -0.002504f, -0.004395f, +0.005601f, +0.007562f, -0.001955f, -0.000802f, +0.001449f, -0.001141f, -0.002373f, - -0.000315f, -0.002210f, +0.002401f, +0.001091f, -0.000981f, +0.002786f, -0.005729f, +0.002337f, -0.001266f, -0.004533f, - +0.002837f, +0.001804f, -0.000281f, -0.002924f, +0.001343f, -0.002049f - }, - { - -0.008403f, -0.215667f, -0.037317f, -0.034671f, +0.009126f, -0.002344f, -0.005483f, +0.022951f, +0.017008f, +0.006823f, - -0.028121f, +0.029311f, +0.033201f, -0.026887f, -0.128842f, +0.028423f, +0.058664f, -0.013401f, +0.053174f, +0.000093f, - -0.001600f, -0.001815f, +0.024479f, +0.009692f, -0.014477f, -0.009301f, -0.023811f, +0.011380f, +0.011038f, +0.010576f, - +0.005421f, -0.016731f, +0.017806f, +0.012812f, +0.019781f, +0.016291f, -0.003191f, -0.003271f, +0.034045f, +0.002937f, - -0.025655f, +0.018267f, -0.010761f, +0.016841f, +0.009306f, -0.002507f, +0.004222f, +0.002390f, +0.007746f, +0.016996f, - +0.007492f, +0.000078f, +0.006796f, -0.003499f, +0.000189f, -0.004979f, -0.002711f, -0.004977f, -0.005735f, -0.002278f, - -0.005394f, -0.006613f, +0.004768f, -0.008460f, +0.002652f, -0.007896f, -0.001161f, -0.013781f, +0.001815f, -0.004677f, - +0.000509f, -0.006697f, +0.003176f, -0.001448f, +0.001764f, +0.008287f, -0.002088f, -0.000241f, +0.003652f, -0.002276f, - +0.006053f, +0.002102f, +0.003407f, -0.001314f, +0.003176f, +0.000435f, +0.002979f, +0.000585f, -0.004762f, -0.002542f, - -0.000505f, -0.002032f, +0.000742f, +0.002025f, -0.001309f, +0.002682f - } - }, - { - { - +0.000849f, -0.110880f, +0.027714f, -0.000013f, -0.004675f, -0.002802f, +0.000599f, +0.002926f, +0.018415f, +0.028952f, - -0.020988f, -0.044748f, +0.035435f, +0.002033f, -0.029991f, -0.021282f, +0.018644f, -0.018103f, +0.004079f, +0.021087f, - +0.011181f, -0.006977f, -0.017500f, +0.011579f, -0.013013f, -0.008470f, -0.002546f, -0.016948f, -0.007212f, -0.013717f, - +0.011217f, +0.005792f, +0.004577f, -0.005432f, -0.010086f, +0.003489f, +0.023690f, +0.015127f, +0.023749f, -0.003933f, - -0.001622f, -0.005691f, +0.007833f, +0.006991f, -0.005777f, -0.002210f, +0.011236f, -0.001734f, +0.000378f, -0.012445f, - +0.002503f, -0.004491f, -0.004460f, +0.007736f, -0.002236f, +0.005073f, +0.013226f, -0.004447f, -0.003656f, -0.007173f, - -0.001735f, +0.002821f, -0.001786f, +0.006246f, +0.000305f, -0.002821f, -0.006290f, -0.003983f, -0.008943f, +0.005783f, - +0.007642f, +0.003671f, -0.001376f, -0.000146f, -0.001231f, -0.000274f, -0.002504f, -0.001345f, +0.001616f, -0.002160f, - -0.002426f, +0.001412f, -0.002519f, -0.004336f, +0.001091f, +0.000055f, +0.003958f, -0.002141f, -0.001710f, -0.002269f, - -0.000429f, -0.001216f, +0.001309f, +0.000098f, +0.002071f, +0.000833f - }, - { - +0.021654f, +0.507075f, -0.057054f, +0.006284f, -0.010263f, +0.009384f, -0.013878f, +0.013801f, -0.000629f, -0.015144f, - -0.030314f, +0.039742f, +0.018104f, +0.005426f, +0.020806f, +0.016792f, +0.036163f, +0.001931f, +0.016778f, +0.028279f, - +0.016389f, -0.015311f, -0.019522f, +0.012784f, +0.013292f, +0.012499f, -0.019905f, +0.005535f, -0.027906f, +0.005239f, - +0.000946f, -0.006703f, +0.015308f, -0.006619f, +0.007606f, +0.001377f, +0.013105f, +0.001357f, +0.004763f, +0.007546f, - -0.004576f, -0.001396f, -0.009257f, +0.001283f, -0.013817f, +0.008116f, +0.002596f, +0.000706f, +0.015723f, -0.008156f, - -0.004587f, +0.002856f, +0.002323f, +0.007287f, -0.003255f, -0.008562f, -0.004855f, -0.007854f, -0.001374f, +0.002663f, - +0.007100f, -0.004297f, +0.004007f, -0.000942f, -0.002811f, -0.000787f, +0.000579f, -0.006112f, +0.000220f, -0.001770f, - +0.001785f, -0.000191f, -0.001357f, -0.000999f, +0.001050f, -0.002065f, -0.000630f, +0.001490f, +0.001559f, -0.000778f, - +0.000781f, +0.000412f, -0.006635f, +0.000324f, +0.000772f, +0.001179f, -0.000789f, +0.001619f, -0.001370f, -0.001354f, - -0.001413f, -0.001439f, +0.000240f, +0.000262f, +0.001559f, +0.001506f - }, - { - -0.011433f, +0.186330f, +0.046516f, -0.014047f, +0.011573f, +0.005854f, -0.015217f, -0.000283f, +0.008395f, +0.024140f, - -0.041825f, -0.008217f, +0.011925f, +0.004113f, +0.026533f, -0.000036f, -0.002046f, +0.031771f, -0.026973f, +0.030288f, - +0.022108f, -0.002413f, -0.014532f, +0.035940f, +0.035472f, +0.005835f, +0.005460f, +0.003375f, -0.004108f, -0.003781f, - +0.005086f, -0.009701f, -0.009473f, +0.005118f, -0.009778f, -0.008416f, +0.021527f, -0.001283f, +0.010370f, -0.008815f, - -0.014034f, +0.000247f, -0.004709f, -0.004337f, +0.005333f, +0.002181f, -0.014408f, +0.006616f, -0.003493f, +0.000337f, - +0.003109f, +0.001562f, +0.005233f, -0.000376f, -0.009385f, +0.005254f, +0.001283f, +0.000520f, +0.000282f, +0.006450f, - -0.000883f, -0.004801f, -0.001494f, +0.000202f, -0.004958f, +0.004578f, -0.005646f, -0.008811f, +0.007517f, -0.005965f, - +0.000236f, -0.004302f, +0.001663f, -0.000076f, +0.001286f, +0.000617f, +0.000395f, +0.006314f, -0.000663f, -0.001270f, - +0.001295f, +0.001008f, -0.003588f, +0.001299f, +0.001928f, -0.001692f, -0.001046f, +0.003105f, -0.001358f, -0.002949f, - -0.001286f, -0.001434f, +0.000084f, +0.000548f, +0.000681f, -0.000821f - }, - { - -0.002307f, +0.046511f, +0.004786f, +0.005313f, +0.002621f, -0.001756f, +0.000713f, +0.001033f, -0.003707f, +0.009816f, - -0.001743f, +0.001449f, +0.010855f, +0.007289f, +0.031692f, -0.010524f, -0.000130f, -0.025203f, -0.002022f, -0.014139f, - +0.028860f, +0.010398f, -0.020466f, +0.009098f, +0.013423f, +0.033267f, +0.008205f, -0.011755f, +0.003465f, +0.043498f, - -0.008334f, +0.026036f, -0.020897f, +0.004239f, -0.002067f, -0.027570f, +0.019581f, +0.015763f, +0.010079f, -0.011796f, - +0.010014f, -0.006813f, -0.004885f, -0.012795f, -0.008549f, +0.003284f, -0.008369f, -0.001723f, -0.018568f, -0.005151f, - +0.001943f, -0.007263f, +0.000693f, +0.001428f, +0.007010f, -0.006839f, +0.002154f, -0.004967f, +0.006538f, +0.001630f, - -0.000847f, +0.004348f, -0.002233f, +0.000626f, -0.002681f, -0.000197f, -0.000838f, +0.002744f, -0.003235f, -0.001738f, - +0.001245f, -0.004759f, -0.001433f, +0.000308f, +0.000246f, +0.001382f, -0.001962f, -0.001425f, +0.002660f, +0.000049f, - +0.006141f, -0.001987f, -0.001939f, +0.000994f, -0.002257f, -0.000315f, +0.000182f, -0.000411f, -0.000664f, +0.000106f, - +0.001612f, +0.000567f, +0.001509f, -0.002748f, -0.002787f, +0.000233f - }, - { - -0.043344f, -0.372667f, +0.004137f, +0.017157f, -0.019759f, +0.002358f, +0.002721f, -0.020064f, +0.033241f, -0.038122f, - -0.005638f, +0.026774f, +0.026311f, +0.014834f, -0.045147f, +0.001091f, +0.008640f, -0.028523f, +0.021957f, +0.010312f, - +0.013793f, -0.000437f, +0.015995f, +0.007039f, -0.018348f, -0.002010f, -0.017355f, +0.026462f, +0.020631f, -0.005508f, - -0.013474f, -0.008873f, -0.002003f, -0.005006f, -0.008515f, +0.007515f, +0.040806f, -0.024124f, +0.000694f, +0.002219f, - -0.003426f, -0.011683f, -0.006025f, -0.000010f, -0.003694f, +0.009006f, +0.002340f, +0.000136f, +0.016525f, -0.009673f, - -0.000289f, -0.005696f, -0.009111f, -0.005432f, +0.000915f, -0.001136f, +0.014666f, -0.003841f, +0.004366f, -0.003108f, - -0.002951f, +0.005795f, +0.002171f, +0.004752f, +0.005846f, -0.002376f, -0.000847f, -0.001199f, +0.004089f, +0.000551f, - -0.002306f, +0.000672f, -0.000071f, +0.002858f, -0.000932f, -0.001673f, +0.002593f, +0.004134f, +0.008256f, -0.002976f, - +0.000854f, +0.002961f, +0.000438f, +0.002538f, +0.000008f, +0.000359f, +0.002283f, -0.000037f, +0.002350f, +0.000402f, - +0.001331f, -0.001328f, +0.000302f, +0.002275f, +0.000929f, -0.001606f - }, - { - -0.003140f, +0.013381f, -0.006741f, -0.003732f, +0.000492f, -0.000522f, -0.000704f, +0.000931f, +0.001178f, +0.005825f, - +0.009521f, -0.003934f, +0.014454f, +0.029520f, +0.003535f, -0.011337f, +0.023574f, -0.034381f, +0.006512f, -0.025073f, - +0.008457f, +0.010529f, +0.010994f, +0.024296f, -0.008156f, +0.011139f, +0.008923f, -0.030005f, -0.009556f, -0.015347f, - +0.002140f, +0.022869f, -0.012436f, +0.012569f, -0.006091f, -0.010516f, -0.015743f, -0.014492f, +0.002883f, +0.007981f, - +0.002296f, +0.001407f, -0.007675f, +0.012963f, -0.000099f, +0.002015f, +0.001742f, +0.007714f, -0.017593f, +0.002813f, - +0.004079f, -0.014135f, -0.000549f, +0.002864f, +0.013017f, -0.007213f, +0.005554f, +0.003094f, +0.006109f, -0.001558f, - +0.002166f, +0.006727f, +0.008136f, +0.004212f, +0.001233f, +0.006545f, -0.003036f, -0.003440f, -0.003516f, +0.001359f, - -0.003869f, -0.002014f, +0.000329f, +0.003410f, +0.002699f, -0.004853f, -0.001399f, -0.001517f, +0.005948f, -0.002872f, - +0.000219f, +0.000346f, +0.001743f, -0.001848f, -0.001437f, +0.000325f, +0.002178f, +0.000251f, -0.000728f, +0.000413f, - -0.002212f, -0.000385f, +0.000179f, +0.001896f, -0.000611f, -0.000110f - }, - { - -0.027145f, -0.605965f, -0.009919f, +0.065256f, -0.028404f, +0.000445f, -0.019182f, -0.011194f, -0.023681f, -0.008053f, - -0.016638f, -0.011469f, -0.001735f, +0.017645f, +0.022736f, +0.004081f, -0.019314f, +0.019268f, +0.006133f, -0.018124f, - +0.048705f, +0.010937f, +0.011854f, +0.002624f, +0.007210f, -0.003919f, -0.003038f, -0.010483f, -0.009676f, +0.017663f, - +0.012731f, -0.007796f, +0.019010f, -0.006009f, -0.012308f, -0.011955f, +0.013206f, -0.005666f, -0.009246f, +0.002580f, - -0.008127f, +0.002422f, -0.000319f, -0.004141f, +0.005572f, -0.001356f, -0.009551f, +0.000032f, -0.002831f, -0.017559f, - -0.000112f, +0.009480f, +0.011795f, +0.001727f, +0.006301f, +0.006301f, -0.001044f, +0.002597f, +0.001199f, -0.000832f, - -0.000110f, +0.012393f, +0.005129f, -0.001937f, +0.002597f, +0.001166f, -0.005740f, -0.002309f, +0.002912f, -0.001452f, - -0.008559f, -0.001308f, +0.001675f, -0.002072f, +0.000308f, +0.002799f, -0.007655f, -0.002135f, -0.004971f, +0.001397f, - -0.000686f, -0.000338f, +0.001712f, +0.003238f, -0.001317f, +0.000988f, -0.000444f, -0.002167f, -0.001058f, +0.000058f, - -0.000202f, -0.001256f, -0.001194f, +0.000538f, +0.001669f, +0.001146f - }, - { - -0.002870f, +0.006005f, -0.018208f, +0.002535f, -0.004978f, -0.001731f, -0.003274f, +0.000295f, +0.008065f, +0.009093f, - -0.005698f, +0.013428f, -0.021509f, +0.001542f, +0.012013f, +0.010789f, +0.027973f, -0.000207f, +0.004409f, +0.018168f, - +0.003718f, +0.002871f, +0.035536f, +0.038063f, -0.011282f, +0.018479f, +0.031857f, -0.033019f, -0.023285f, +0.033143f, - -0.001523f, -0.024047f, +0.007002f, +0.002971f, +0.019951f, +0.021813f, -0.024210f, -0.023779f, +0.006188f, -0.010253f, - -0.021043f, +0.004937f, +0.014781f, +0.002882f, +0.002521f, +0.004389f, -0.022195f, +0.013872f, +0.004949f, +0.010739f, - +0.008335f, -0.002872f, -0.001396f, +0.002052f, -0.010389f, +0.000458f, -0.003161f, -0.000997f, -0.003321f, -0.002469f, - -0.004160f, -0.000942f, -0.012828f, -0.001109f, -0.001202f, +0.000735f, +0.004128f, -0.002150f, -0.002419f, -0.001265f, - +0.004681f, -0.003946f, +0.003181f, -0.003318f, +0.002890f, +0.001229f, -0.000236f, -0.001267f, +0.005057f, +0.001876f, - +0.001687f, -0.000062f, -0.004747f, +0.002451f, -0.000522f, +0.003991f, +0.001043f, -0.000488f, -0.002726f, -0.001875f, - -0.003169f, +0.002732f, -0.002216f, +0.002567f, +0.000791f, -0.000122f - }, - { - -0.135615f, -0.330402f, +0.039433f, +0.099226f, -0.043485f, -0.012640f, +0.016292f, +0.001075f, -0.033205f, -0.010904f, - +0.006611f, +0.018917f, +0.030057f, +0.025408f, +0.019023f, -0.008377f, -0.011178f, -0.052393f, -0.003051f, +0.014227f, - -0.012692f, +0.013919f, -0.006509f, -0.012716f, -0.018700f, +0.000781f, -0.010010f, +0.008405f, -0.003506f, -0.004292f, - -0.005495f, -0.000248f, -0.014867f, +0.008873f, +0.008376f, +0.007222f, +0.016775f, -0.001136f, +0.003545f, +0.014030f, - -0.008770f, +0.003978f, +0.009737f, -0.000140f, +0.001673f, +0.009797f, +0.003883f, -0.003359f, -0.000670f, +0.007077f, - +0.001705f, -0.008066f, +0.003684f, -0.002906f, -0.002085f, +0.008528f, -0.000766f, -0.001233f, +0.007665f, +0.003181f, - +0.000082f, +0.000892f, -0.007332f, +0.006926f, +0.008083f, +0.000090f, +0.001085f, +0.003881f, +0.007276f, +0.000595f, - -0.003160f, -0.000135f, +0.001138f, -0.002884f, +0.002276f, +0.001698f, +0.004153f, -0.002560f, +0.002140f, -0.003567f, - +0.001818f, -0.001970f, +0.001930f, -0.006962f, +0.002828f, -0.000189f, -0.000782f, +0.000843f, +0.001106f, -0.001982f, - +0.000932f, +0.000387f, -0.001808f, +0.000165f, -0.001263f, -0.000506f - }, - { - -0.007286f, -0.115691f, -0.003296f, +0.012555f, -0.015207f, -0.036172f, -0.007574f, -0.006620f, -0.014103f, +0.013711f, - +0.012813f, +0.031851f, +0.002598f, -0.005806f, -0.036475f, +0.010210f, +0.005821f, -0.021677f, -0.015642f, -0.006478f, - -0.008099f, +0.019387f, +0.007071f, -0.005661f, +0.004726f, +0.005473f, +0.004182f, +0.004111f, -0.008619f, +0.006967f, - -0.008159f, -0.009413f, -0.001395f, +0.002094f, -0.017370f, -0.000217f, +0.002107f, -0.008008f, -0.014021f, +0.022527f, - +0.030160f, -0.001324f, +0.003527f, -0.001026f, -0.019170f, +0.011210f, -0.003664f, +0.005108f, -0.003969f, -0.019345f, - -0.002396f, +0.001526f, -0.005911f, -0.007914f, -0.000752f, +0.001798f, -0.006326f, -0.009321f, -0.007757f, -0.005692f, - -0.002928f, +0.011086f, -0.004363f, -0.001869f, -0.004339f, -0.001813f, -0.002377f, -0.003209f, -0.001645f, +0.001925f, - -0.005594f, -0.002249f, +0.001148f, +0.000379f, +0.003644f, -0.002440f, +0.000896f, -0.004955f, +0.004493f, +0.002928f, - +0.003808f, +0.001219f, -0.000160f, -0.000018f, -0.003156f, -0.000316f, +0.002388f, +0.000229f, +0.002112f, -0.000771f, - -0.000956f, +0.000138f, +0.000932f, -0.001240f, -0.003151f, +0.000253f - }, - { - +0.024285f, -0.400620f, +0.031113f, +0.014887f, +0.049061f, -0.019851f, -0.015231f, +0.002116f, +0.020384f, +0.003165f, - +0.027621f, -0.033062f, +0.021033f, -0.001227f, -0.006711f, -0.007370f, -0.001485f, +0.003452f, -0.035285f, -0.013351f, - -0.030590f, -0.015340f, +0.013875f, +0.004038f, -0.012390f, +0.005809f, -0.000577f, +0.015202f, -0.009119f, -0.013864f, - -0.000639f, -0.010112f, +0.007335f, -0.002251f, +0.001102f, +0.010655f, +0.001292f, +0.000485f, +0.001284f, +0.005570f, - -0.004205f, -0.001539f, +0.007531f, +0.006028f, +0.002115f, +0.000792f, -0.002820f, -0.008434f, -0.003331f, -0.000161f, - +0.008993f, +0.001030f, +0.004062f, -0.005711f, +0.005577f, +0.015907f, -0.004725f, +0.013238f, -0.005502f, -0.000861f, - +0.002768f, +0.007097f, -0.001176f, +0.002509f, +0.008206f, -0.001670f, +0.003149f, +0.007700f, +0.000079f, +0.004632f, - -0.004704f, -0.007104f, -0.001635f, +0.000887f, -0.004013f, +0.000635f, -0.001458f, +0.006441f, +0.001359f, +0.004021f, - -0.002714f, -0.001453f, -0.000979f, -0.000927f, -0.002920f, +0.001961f, -0.001006f, -0.000932f, -0.000967f, -0.000548f, - +0.002208f, +0.000460f, +0.001959f, -0.000953f, +0.002885f, -0.001399f - }, - { - -0.006113f, +0.013834f, +0.025836f, -0.004911f, -0.022689f, -0.003543f, +0.006613f, -0.007921f, +0.000347f, +0.004796f, - +0.013804f, -0.004776f, -0.007064f, +0.032962f, +0.018903f, +0.028759f, +0.059000f, -0.005483f, -0.016169f, +0.022063f, - +0.005386f, +0.019006f, +0.028648f, -0.048115f, +0.004012f, +0.010775f, -0.033804f, +0.003739f, +0.016826f, +0.035680f, - +0.003565f, +0.005840f, -0.007108f, +0.018173f, -0.006755f, +0.005003f, +0.001546f, -0.019427f, +0.002500f, -0.006035f, - -0.003061f, -0.001397f, +0.001072f, +0.004274f, -0.002519f, +0.000394f, -0.001193f, +0.001282f, -0.011198f, -0.011839f, - +0.009015f, +0.000615f, -0.001998f, -0.004756f, +0.001075f, -0.005994f, -0.003792f, +0.003242f, -0.002635f, -0.004408f, - +0.006947f, +0.004149f, +0.000987f, -0.002290f, +0.004193f, -0.007402f, -0.001685f, -0.003151f, -0.003687f, +0.002738f, - +0.003898f, +0.004508f, +0.005863f, -0.002425f, -0.006033f, +0.001562f, +0.007807f, -0.001979f, -0.001526f, +0.001879f, - +0.002954f, +0.006987f, -0.004772f, -0.001682f, +0.003333f, -0.000432f, +0.000666f, -0.000628f, -0.001244f, -0.001328f, - +0.001258f, -0.001653f, -0.000442f, -0.003003f, -0.000307f, -0.003606f - }, - { - +0.072776f, +0.062798f, +0.001728f, +0.007249f, -0.025863f, +0.025536f, +0.013241f, +0.042790f, +0.011991f, -0.011787f, - -0.006076f, +0.013423f, +0.010003f, +0.015031f, -0.025208f, +0.052070f, +0.030542f, +0.001208f, +0.016177f, -0.025014f, - -0.009228f, -0.031273f, +0.000055f, -0.001343f, -0.024413f, -0.006723f, -0.014606f, +0.005777f, +0.015964f, -0.006799f, - +0.014656f, +0.009671f, -0.009167f, -0.011023f, -0.009387f, -0.004784f, +0.003913f, +0.009936f, -0.003685f, -0.010218f, - +0.014369f, -0.000060f, -0.001107f, -0.020186f, +0.009854f, +0.012940f, +0.003998f, -0.004043f, +0.002727f, +0.010488f, - -0.002262f, -0.009203f, +0.010234f, -0.006093f, -0.003641f, +0.005358f, -0.011983f, +0.001100f, +0.003477f, +0.001514f, - +0.001186f, +0.008088f, +0.002067f, +0.002820f, -0.001663f, +0.000489f, -0.009253f, -0.000406f, -0.002298f, -0.006644f, - +0.001569f, -0.000170f, -0.003443f, -0.001218f, -0.005881f, -0.002898f, +0.003706f, -0.000281f, -0.000616f, -0.006702f, - +0.003404f, -0.001334f, -0.000470f, -0.003102f, -0.003489f, -0.001110f, +0.000795f, +0.000267f, +0.005192f, -0.002627f, - -0.000510f, -0.000114f, +0.003429f, -0.002451f, +0.001134f, +0.003996f - }, - { - +0.012968f, +0.073737f, -0.008797f, -0.007196f, -0.005457f, -0.007892f, +0.007176f, -0.014363f, +0.010876f, +0.016425f, - +0.003595f, -0.004452f, -0.017002f, -0.110437f, -0.123622f, -0.036812f, -0.002074f, -0.002112f, +0.013280f, -0.004668f, - -0.036655f, -0.028207f, +0.028312f, +0.006302f, +0.027897f, +0.018267f, +0.015128f, -0.003080f, +0.026605f, -0.002317f, - -0.001292f, +0.001685f, +0.022632f, +0.002137f, -0.002410f, -0.013566f, -0.000795f, +0.017741f, +0.008540f, +0.007748f, - -0.019409f, +0.004102f, +0.007362f, -0.011719f, -0.003645f, -0.011656f, +0.001122f, -0.015666f, +0.012346f, -0.001483f, - -0.001840f, +0.006906f, -0.003728f, +0.003655f, -0.006570f, +0.008571f, -0.007382f, +0.000943f, -0.004413f, +0.001723f, - -0.004557f, -0.007862f, -0.002962f, -0.004684f, -0.007975f, +0.006453f, +0.003692f, -0.007808f, -0.005373f, +0.001510f, - -0.003907f, -0.002472f, -0.004151f, +0.000490f, +0.006649f, -0.000090f, +0.003691f, +0.001510f, -0.005833f, -0.002693f, - -0.001927f, +0.000268f, +0.005809f, +0.000449f, -0.000133f, +0.005851f, -0.001616f, +0.004873f, +0.000418f, -0.003744f, - +0.001197f, -0.001031f, +0.001071f, -0.001183f, +0.000584f, -0.000320f - }, - { - +0.041102f, -0.132478f, -0.024407f, -0.025884f, +0.014035f, +0.011579f, +0.007374f, +0.017197f, +0.001937f, +0.007411f, - -0.040152f, +0.016519f, +0.036663f, +0.052435f, -0.035869f, +0.022713f, +0.021508f, -0.024476f, +0.039573f, +0.008051f, - +0.000994f, -0.023393f, +0.004286f, -0.005327f, -0.009897f, +0.006209f, -0.010615f, -0.008507f, -0.010414f, +0.011489f, - +0.005118f, -0.026945f, +0.010570f, -0.003760f, +0.006834f, +0.009576f, -0.009428f, -0.004384f, +0.019011f, +0.002528f, - -0.013318f, +0.028212f, -0.004933f, +0.014125f, +0.008094f, +0.004616f, +0.007091f, -0.004821f, +0.001269f, +0.009343f, - -0.004874f, -0.004859f, +0.008088f, +0.005970f, +0.001537f, -0.004267f, +0.014650f, +0.004258f, -0.006406f, -0.001631f, - -0.005377f, -0.006102f, +0.010299f, -0.005956f, +0.001529f, -0.001254f, +0.009509f, -0.002152f, +0.005379f, -0.010299f, - +0.001095f, +0.000250f, +0.002549f, -0.003727f, +0.000712f, +0.010299f, +0.001406f, -0.000879f, +0.004370f, +0.000192f, - +0.009439f, +0.001827f, +0.000166f, -0.002910f, +0.001289f, -0.001909f, -0.001770f, -0.002474f, -0.003730f, -0.002863f, - -0.003565f, -0.001976f, -0.001045f, -0.001909f, -0.003375f, +0.003346f - } - }, - { - { - -0.000004f, -0.025128f, -0.028436f, -0.023789f, +0.002351f, +0.006887f, -0.003219f, -0.005129f, +0.014110f, +0.004486f, - +0.010925f, -0.020794f, +0.004335f, -0.005326f, -0.000368f, -0.030043f, -0.009654f, +0.017438f, -0.021662f, +0.036128f, - +0.013231f, -0.010535f, -0.017410f, -0.006901f, +0.009461f, -0.026033f, -0.014596f, -0.004728f, -0.018901f, +0.006185f, - -0.010964f, +0.018403f, -0.020265f, +0.008153f, +0.007557f, +0.018911f, +0.001491f, +0.014024f, +0.029141f, -0.005348f, - -0.002693f, -0.007742f, +0.006491f, +0.013280f, +0.000251f, -0.003629f, -0.005063f, +0.002933f, +0.003664f, -0.004029f, - +0.001962f, -0.011343f, +0.008597f, -0.002038f, +0.006582f, -0.003773f, +0.015236f, -0.003012f, -0.000621f, -0.008310f, - +0.000355f, -0.003863f, +0.000686f, -0.002657f, +0.002410f, -0.005994f, -0.007301f, -0.002792f, -0.002027f, +0.005352f, - -0.000043f, +0.002035f, -0.002177f, +0.002142f, -0.002170f, +0.001455f, -0.002742f, +0.001421f, -0.001294f, -0.002400f, - -0.001022f, +0.000771f, -0.002050f, -0.001781f, -0.001750f, -0.001128f, +0.004575f, -0.001944f, -0.001796f, -0.001206f, - -0.000049f, -0.000453f, -0.001246f, +0.001309f, +0.003567f, -0.000040f - }, - { - -0.025942f, +0.390884f, +0.063283f, -0.015332f, +0.023642f, -0.004843f, -0.012209f, +0.031390f, -0.013613f, -0.022891f, - -0.003834f, +0.040075f, +0.004986f, +0.012742f, +0.000353f, +0.030616f, +0.050716f, -0.013533f, +0.022828f, +0.030645f, - +0.004744f, -0.017294f, -0.020388f, +0.013833f, +0.014383f, +0.001269f, -0.013106f, +0.012420f, -0.016469f, -0.007873f, - -0.005729f, +0.011265f, +0.009597f, -0.006877f, +0.007917f, -0.003514f, +0.006063f, +0.020742f, +0.002337f, +0.015329f, - -0.009805f, +0.002984f, +0.001363f, -0.014773f, -0.001749f, -0.003517f, +0.000970f, +0.002713f, +0.016216f, -0.002856f, - +0.006183f, +0.007219f, -0.004073f, +0.008272f, -0.004688f, -0.009491f, -0.000099f, -0.011360f, -0.002138f, +0.008975f, - +0.003608f, +0.002776f, -0.001978f, -0.009684f, +0.005380f, -0.002368f, -0.003463f, -0.000798f, -0.000331f, -0.006614f, - +0.005024f, -0.000168f, -0.004110f, -0.000569f, +0.003392f, +0.000249f, -0.004762f, +0.003326f, +0.000970f, +0.002020f, - +0.000781f, -0.005230f, -0.000144f, -0.000481f, +0.000649f, +0.000090f, +0.001665f, -0.000237f, -0.002290f, -0.003311f, - -0.000380f, -0.000399f, +0.000518f, +0.000861f, +0.000961f, +0.000828f - }, - { - +0.008079f, +0.250663f, -0.014189f, -0.010798f, -0.010956f, +0.008573f, -0.008460f, +0.010705f, -0.002242f, +0.014980f, - -0.037509f, -0.032070f, +0.028621f, +0.030338f, +0.002638f, +0.002246f, +0.003558f, -0.007702f, -0.016141f, +0.035077f, - +0.013309f, +0.005858f, +0.009341f, +0.017002f, +0.034581f, +0.009464f, +0.011988f, +0.003264f, +0.012150f, -0.014326f, - +0.000158f, -0.009159f, -0.016742f, -0.003707f, -0.000394f, +0.004570f, +0.004971f, -0.001117f, +0.007794f, -0.000667f, - -0.006580f, -0.018690f, -0.002545f, +0.000744f, -0.003661f, +0.009850f, -0.001311f, -0.009503f, +0.006615f, -0.000956f, - +0.005311f, +0.007082f, -0.004560f, -0.000400f, -0.002448f, -0.000238f, +0.003342f, -0.001862f, +0.004856f, +0.002487f, - -0.002454f, -0.002952f, -0.002972f, -0.001219f, +0.002034f, -0.002135f, -0.010212f, -0.002161f, +0.001819f, +0.000954f, - -0.002738f, +0.000679f, +0.000302f, -0.001416f, +0.000873f, +0.000525f, +0.001901f, +0.004342f, +0.000266f, +0.002582f, - +0.000331f, -0.000397f, -0.001563f, +0.000877f, -0.001006f, -0.000219f, +0.000691f, +0.001628f, -0.002691f, -0.001458f, - -0.001483f, -0.001767f, +0.002259f, -0.000777f, -0.000403f, -0.001029f - }, - { - +0.001934f, +0.051356f, -0.002324f, +0.010588f, -0.002729f, +0.001445f, -0.003134f, +0.004349f, -0.006235f, +0.005028f, - +0.011092f, -0.005669f, +0.011114f, +0.009651f, +0.007158f, +0.033447f, -0.024282f, -0.028610f, +0.000148f, +0.005825f, - -0.004453f, -0.010887f, +0.005858f, -0.003006f, +0.023477f, +0.021505f, -0.004500f, +0.006805f, -0.015639f, +0.038788f, - +0.029098f, -0.003444f, -0.003714f, -0.007312f, -0.000009f, -0.016444f, +0.005411f, +0.022739f, +0.004133f, -0.009649f, - +0.007087f, -0.005358f, -0.013298f, -0.004186f, -0.014381f, +0.002860f, +0.002682f, -0.001213f, -0.025766f, +0.001311f, - +0.003594f, -0.011397f, +0.003883f, -0.000731f, +0.002020f, -0.002199f, +0.000393f, +0.005035f, +0.000556f, -0.000403f, - +0.001446f, +0.001767f, -0.002737f, +0.003910f, -0.005337f, -0.001680f, +0.002170f, -0.003341f, +0.001795f, -0.002015f, - -0.005296f, -0.000084f, -0.002085f, +0.000095f, +0.001207f, +0.001929f, -0.004066f, +0.000598f, +0.001366f, +0.002730f, - +0.003167f, +0.003059f, -0.005657f, +0.000208f, -0.002948f, +0.001240f, +0.000988f, -0.001504f, -0.000870f, +0.001781f, - +0.002085f, -0.000720f, +0.000421f, -0.001252f, -0.003840f, +0.000329f - }, - { - +0.016527f, -0.484179f, +0.021641f, -0.007141f, +0.008691f, -0.003008f, -0.000684f, -0.008572f, +0.023932f, -0.044448f, - +0.014450f, +0.015571f, +0.029702f, +0.005160f, -0.035665f, -0.005518f, +0.007836f, -0.035223f, +0.033397f, +0.014819f, - -0.006236f, +0.014241f, +0.014280f, +0.002735f, -0.009797f, -0.008528f, -0.014265f, +0.027227f, +0.008126f, -0.004139f, - +0.005773f, -0.030055f, +0.012218f, -0.016681f, -0.002963f, +0.005469f, +0.005087f, +0.022224f, -0.020758f, +0.006720f, - -0.001650f, -0.014164f, -0.003320f, -0.007499f, +0.004996f, +0.003364f, +0.012470f, -0.004541f, +0.018997f, -0.006334f, - +0.000667f, -0.003368f, -0.016411f, +0.002295f, -0.002930f, +0.004494f, +0.002278f, +0.006001f, +0.004401f, -0.004582f, - -0.002784f, +0.006511f, +0.004883f, +0.001200f, +0.008769f, -0.002557f, -0.007971f, +0.002295f, +0.004481f, +0.002108f, - -0.000250f, -0.001446f, +0.001717f, +0.001453f, -0.001016f, +0.000007f, +0.001281f, +0.002602f, +0.008083f, -0.001632f, - +0.002672f, +0.000057f, +0.001738f, +0.002055f, -0.000500f, +0.002105f, +0.000914f, -0.000453f, +0.003668f, +0.001216f, - -0.000980f, -0.000395f, -0.000003f, +0.000753f, +0.002051f, -0.000395f - }, - { - +0.000975f, -0.005453f, -0.002931f, -0.003807f, +0.003925f, +0.001015f, -0.002367f, +0.002940f, +0.001987f, +0.004150f, - +0.006520f, +0.008052f, +0.000339f, +0.021203f, -0.017606f, +0.025272f, +0.000150f, -0.008767f, -0.007526f, -0.004485f, - -0.001552f, +0.017437f, +0.007916f, -0.008401f, -0.002173f, +0.020063f, -0.011273f, -0.029919f, +0.008689f, -0.014469f, - +0.012605f, +0.009589f, +0.004206f, +0.002410f, -0.002527f, -0.012871f, -0.013312f, -0.008260f, +0.010235f, -0.005561f, - +0.009093f, -0.010971f, -0.005131f, +0.012443f, -0.002273f, -0.000391f, +0.003520f, +0.003795f, -0.007721f, +0.003194f, - -0.005139f, -0.004876f, -0.006382f, +0.013945f, +0.004625f, -0.005966f, +0.000585f, +0.010687f, -0.001414f, +0.009146f, - -0.001786f, +0.005250f, +0.012496f, -0.001350f, +0.004103f, +0.003639f, -0.002795f, -0.001066f, -0.003821f, +0.002150f, - -0.007113f, -0.003166f, +0.000141f, +0.004714f, -0.003236f, +0.000174f, -0.000828f, -0.004703f, +0.002160f, +0.000546f, - +0.002216f, +0.000108f, +0.000555f, +0.000538f, -0.000897f, -0.003025f, +0.000886f, +0.001559f, -0.000918f, +0.000122f, - -0.001516f, +0.000147f, +0.000893f, -0.000352f, -0.000333f, -0.000642f - }, - { - -0.025059f, -0.671750f, +0.040931f, +0.035155f, -0.004364f, -0.003652f, +0.000707f, -0.025909f, -0.018907f, -0.021093f, - -0.001606f, -0.004240f, +0.009794f, -0.028177f, +0.021465f, +0.017510f, -0.009334f, +0.033218f, -0.028054f, +0.009874f, - +0.013010f, +0.035419f, +0.011647f, -0.004481f, -0.004096f, +0.007651f, -0.013953f, -0.001583f, -0.014536f, +0.009583f, - +0.020012f, -0.001527f, -0.002385f, +0.010843f, -0.022720f, -0.013221f, +0.020419f, -0.009607f, -0.002566f, -0.012400f, - +0.006179f, +0.000676f, -0.002677f, -0.002408f, +0.002569f, -0.005777f, -0.015312f, +0.017853f, -0.016011f, -0.003242f, - +0.004918f, -0.000674f, +0.016137f, +0.005676f, +0.006511f, +0.000384f, +0.001693f, +0.005820f, -0.002235f, -0.000777f, - +0.001994f, +0.003559f, +0.011348f, -0.002274f, -0.001117f, -0.000911f, -0.001548f, -0.000893f, +0.004254f, -0.002468f, - -0.007715f, -0.003467f, +0.003126f, -0.000471f, -0.005463f, +0.000667f, -0.000632f, -0.003831f, -0.006971f, +0.004124f, - -0.003523f, +0.001980f, +0.003591f, -0.002269f, +0.003948f, +0.000833f, +0.002116f, -0.004417f, -0.000513f, -0.000022f, - -0.001645f, +0.001512f, -0.003055f, -0.001415f, +0.003406f, +0.000493f - }, - { - +0.000903f, -0.018697f, -0.002525f, -0.007544f, +0.001618f, +0.000474f, -0.002102f, +0.003036f, +0.002097f, +0.005664f, - +0.002626f, -0.000798f, -0.008870f, +0.005873f, +0.006116f, +0.034613f, +0.024660f, -0.025598f, +0.048946f, -0.031990f, - +0.030047f, +0.014466f, -0.006696f, +0.010715f, +0.015900f, +0.010748f, +0.025938f, -0.004822f, +0.011542f, -0.016169f, - -0.012318f, -0.011103f, +0.011097f, +0.024509f, +0.002067f, +0.009151f, -0.013444f, -0.004726f, -0.012938f, -0.012502f, - -0.009343f, -0.000353f, +0.009120f, +0.004546f, -0.004141f, +0.007525f, -0.009029f, -0.010576f, +0.019164f, +0.012513f, - -0.000783f, -0.004236f, +0.002811f, +0.001269f, -0.009364f, +0.005245f, +0.001016f, -0.010802f, +0.001768f, -0.001721f, - -0.007963f, +0.003292f, -0.014251f, -0.001583f, -0.002326f, +0.004989f, -0.006548f, +0.005645f, -0.000507f, -0.002483f, - +0.004837f, -0.002020f, -0.000289f, -0.001202f, -0.003923f, +0.003663f, +0.000257f, -0.000472f, +0.002177f, +0.003843f, - +0.000202f, -0.001333f, +0.000917f, -0.002820f, +0.003377f, +0.000084f, +0.001450f, -0.001696f, +0.002122f, -0.004897f, - -0.001639f, +0.000624f, -0.000538f, +0.001034f, +0.002453f, +0.001723f - }, - { - +0.120527f, -0.566917f, -0.038031f, +0.058110f, -0.016555f, -0.010939f, +0.003488f, -0.000168f, -0.010432f, +0.000496f, - -0.022734f, +0.037850f, +0.019077f, +0.046159f, -0.001927f, +0.008966f, -0.039558f, -0.012392f, -0.015968f, -0.001450f, - +0.002641f, +0.004502f, -0.010247f, -0.006364f, -0.013384f, -0.002585f, -0.012274f, +0.006390f, +0.003780f, -0.000471f, - -0.010493f, -0.002107f, -0.008885f, +0.015917f, -0.001233f, +0.003022f, +0.006450f, +0.022086f, +0.006298f, -0.007670f, - -0.005696f, +0.004152f, +0.010044f, -0.005905f, +0.004364f, +0.004899f, +0.005639f, +0.000479f, +0.000985f, +0.007876f, - -0.003820f, -0.011243f, +0.004720f, +0.003402f, -0.010763f, +0.010919f, +0.004676f, +0.002020f, +0.003379f, +0.004077f, - -0.002264f, -0.003464f, +0.006420f, -0.001795f, +0.006580f, +0.003540f, -0.000545f, +0.005258f, +0.004906f, +0.003093f, - -0.004195f, +0.000599f, +0.000822f, -0.001351f, -0.001328f, +0.000745f, +0.006575f, -0.002369f, +0.000245f, -0.002900f, - +0.000723f, +0.000007f, -0.001947f, +0.000654f, -0.001049f, +0.003648f, -0.000379f, -0.001132f, -0.002619f, +0.001350f, - +0.001602f, -0.001483f, -0.000691f, -0.002015f, +0.000351f, +0.001601f - }, - { - +0.008374f, -0.084784f, -0.043197f, +0.001593f, -0.015335f, -0.014135f, -0.017492f, -0.008318f, -0.009803f, +0.013869f, - +0.018482f, +0.016992f, +0.010542f, -0.021593f, -0.029352f, +0.014985f, -0.020803f, +0.004919f, +0.025030f, -0.070324f, - +0.021813f, +0.023728f, +0.012745f, -0.015428f, +0.019163f, -0.005210f, +0.009443f, +0.002690f, -0.008479f, -0.010899f, - -0.007846f, +0.006014f, -0.004703f, -0.004004f, -0.008104f, -0.008554f, +0.005546f, -0.004634f, -0.004742f, +0.006399f, - +0.025531f, +0.001850f, +0.008340f, -0.004598f, -0.006162f, +0.001274f, +0.002543f, -0.006530f, +0.004317f, -0.021062f, - +0.000585f, -0.000679f, -0.015250f, -0.003876f, -0.004697f, +0.006200f, -0.004832f, -0.000730f, -0.015800f, -0.005514f, - -0.000562f, +0.007386f, -0.001502f, -0.003725f, -0.004803f, +0.001433f, -0.000917f, -0.010189f, +0.004028f, -0.000256f, - -0.001752f, -0.007338f, -0.000360f, +0.003114f, +0.001304f, -0.002369f, +0.003350f, -0.000308f, +0.000038f, +0.001416f, - +0.000295f, +0.003541f, +0.003238f, -0.001700f, -0.001900f, -0.003323f, +0.003916f, -0.000323f, +0.003100f, -0.001348f, - +0.001211f, -0.002626f, +0.003870f, -0.003260f, -0.002427f, -0.000109f - }, - { - -0.033805f, -0.431365f, +0.105930f, +0.025498f, +0.054001f, -0.005442f, -0.004820f, -0.004308f, +0.020848f, -0.001701f, - +0.007841f, -0.000375f, +0.014191f, -0.009573f, -0.005412f, +0.009626f, -0.008824f, -0.011723f, -0.030678f, -0.002685f, - -0.046453f, -0.001791f, +0.001565f, +0.009830f, -0.016300f, +0.009713f, -0.010735f, +0.005193f, +0.004762f, +0.008916f, - -0.009347f, -0.006158f, +0.007573f, -0.007903f, -0.001458f, +0.003268f, +0.012754f, -0.000362f, +0.012231f, +0.000767f, - -0.007270f, -0.007464f, +0.004814f, -0.003253f, +0.006752f, +0.009762f, -0.003955f, -0.012950f, -0.005760f, +0.016851f, - -0.005672f, -0.000963f, +0.010622f, -0.007032f, +0.005487f, +0.004519f, +0.009893f, +0.008442f, -0.004269f, -0.005212f, - +0.005374f, +0.001541f, +0.005323f, +0.000437f, +0.006811f, -0.002961f, +0.000870f, +0.005017f, +0.004764f, +0.004515f, - -0.005494f, -0.006717f, -0.000958f, -0.000385f, -0.004342f, +0.002882f, -0.001288f, +0.005588f, -0.000145f, -0.000526f, - +0.000425f, +0.000931f, -0.004153f, -0.000083f, -0.003462f, +0.000655f, -0.000751f, -0.000103f, -0.001596f, +0.000345f, - +0.000602f, +0.001744f, -0.000123f, +0.001555f, +0.002317f, +0.000856f - }, - { - +0.005222f, +0.056425f, -0.008784f, -0.011672f, -0.010980f, -0.008659f, +0.005245f, +0.000788f, -0.009139f, +0.008273f, - +0.015103f, -0.011536f, +0.026412f, +0.003081f, +0.022820f, +0.004564f, +0.072040f, -0.018266f, +0.006883f, -0.013953f, - +0.007022f, +0.048945f, -0.029501f, +0.007968f, -0.029571f, +0.024428f, -0.026681f, -0.001734f, +0.019520f, +0.036046f, - +0.002801f, -0.014851f, +0.025618f, -0.004284f, -0.009459f, +0.017141f, -0.015741f, +0.007011f, -0.009652f, +0.000233f, - +0.001699f, +0.002534f, +0.003195f, -0.003302f, +0.005418f, -0.018615f, +0.010880f, +0.000715f, -0.009738f, -0.003147f, - -0.000411f, +0.001428f, +0.000211f, -0.000166f, -0.009687f, -0.011418f, -0.001269f, +0.009692f, -0.002607f, +0.004133f, - -0.000315f, +0.001824f, -0.000931f, -0.001606f, -0.000954f, +0.001008f, -0.006904f, +0.001563f, -0.004737f, +0.001401f, - +0.002143f, +0.003883f, +0.004693f, -0.005209f, +0.002382f, +0.004434f, -0.000956f, +0.004566f, -0.002585f, -0.002547f, - +0.007947f, +0.003760f, -0.002823f, +0.003467f, -0.001965f, +0.002990f, -0.001021f, -0.001256f, +0.001890f, -0.001847f, - +0.001155f, -0.000255f, -0.003545f, -0.001542f, +0.000529f, -0.004574f - }, - { - -0.053912f, +0.259795f, +0.000041f, -0.012490f, -0.026804f, +0.047868f, +0.007870f, +0.040483f, -0.027298f, +0.016350f, - -0.001890f, +0.022110f, -0.004837f, -0.003023f, +0.014450f, +0.035953f, +0.028918f, -0.001719f, +0.000733f, -0.013990f, - -0.020627f, -0.014175f, -0.017254f, -0.010919f, -0.010141f, -0.005613f, +0.007009f, +0.002384f, -0.017245f, -0.010804f, - +0.024005f, +0.009447f, -0.009352f, -0.007581f, +0.004733f, -0.013941f, -0.007278f, +0.001444f, +0.004586f, -0.009853f, - +0.014323f, -0.009580f, -0.006798f, -0.007363f, -0.001205f, +0.024935f, -0.005192f, -0.006765f, +0.004340f, +0.009594f, - +0.005626f, -0.013173f, +0.004057f, +0.003272f, -0.004950f, -0.003559f, -0.000772f, +0.003364f, +0.000866f, +0.001982f, - -0.002048f, +0.010521f, +0.002326f, -0.001059f, -0.001581f, +0.001151f, -0.006541f, +0.000044f, +0.001713f, -0.008173f, - -0.000227f, -0.000686f, -0.003241f, -0.000639f, -0.005255f, +0.000862f, -0.000254f, -0.000198f, -0.005621f, +0.000428f, - -0.001796f, +0.003407f, -0.001000f, -0.004511f, -0.001135f, -0.003031f, +0.001537f, +0.003773f, +0.002621f, -0.004876f, - +0.003440f, -0.001905f, +0.000880f, -0.000336f, +0.001482f, +0.001936f - }, - { - -0.013488f, +0.081782f, +0.013612f, +0.013230f, -0.018627f, +0.004213f, -0.010673f, +0.006566f, -0.005795f, -0.006316f, - +0.002702f, +0.006003f, -0.012232f, -0.075665f, -0.184234f, +0.006377f, -0.045958f, +0.023760f, +0.019086f, -0.068435f, - +0.024741f, -0.016969f, +0.008274f, +0.018924f, +0.003361f, +0.034777f, +0.002910f, +0.016251f, +0.013147f, +0.017197f, - -0.014704f, +0.006661f, +0.017768f, +0.008756f, -0.003114f, -0.032457f, +0.021335f, +0.015757f, -0.001643f, +0.010970f, - -0.010213f, -0.008821f, +0.009198f, -0.004911f, -0.012637f, -0.006387f, -0.001735f, -0.006704f, -0.002879f, +0.006036f, - +0.002194f, -0.003176f, +0.002982f, -0.006195f, +0.001184f, +0.005170f, -0.004729f, +0.005927f, -0.010265f, +0.001540f, - -0.006370f, -0.003915f, -0.007817f, -0.006800f, -0.001805f, +0.000269f, +0.007788f, -0.004759f, -0.006555f, -0.000081f, - -0.008558f, -0.001546f, +0.007208f, -0.004859f, +0.002906f, +0.003794f, +0.000620f, +0.001643f, -0.002688f, -0.000281f, - -0.004124f, +0.002272f, +0.002643f, -0.003364f, +0.003567f, +0.003841f, -0.000127f, +0.005954f, -0.000195f, -0.001458f, - -0.001913f, -0.002106f, +0.001009f, +0.002019f, -0.001137f, +0.002671f - }, - { - -0.055737f, -0.009783f, +0.008988f, -0.002457f, -0.028149f, +0.012964f, +0.011374f, +0.031829f, -0.003939f, -0.004484f, - -0.018706f, +0.017675f, -0.000739f, +0.010788f, +0.053842f, +0.025129f, -0.001045f, -0.008816f, +0.000965f, +0.028457f, - -0.009676f, -0.019302f, +0.009891f, -0.006328f, -0.020152f, +0.012802f, -0.011467f, -0.005130f, -0.001967f, +0.005049f, - -0.011998f, -0.007393f, -0.006177f, -0.003144f, +0.019387f, +0.010911f, -0.030311f, +0.017531f, -0.001928f, +0.008746f, - -0.013930f, +0.006381f, +0.008253f, +0.005407f, +0.006500f, +0.005724f, +0.013932f, -0.003758f, -0.002042f, -0.003083f, - +0.001202f, -0.005990f, +0.000105f, +0.016878f, -0.006737f, -0.008286f, +0.020098f, +0.004678f, -0.003305f, -0.005265f, - -0.008742f, +0.000370f, +0.007449f, -0.000478f, +0.001953f, +0.000176f, +0.005704f, +0.006935f, -0.005879f, -0.001480f, - +0.000379f, +0.002673f, -0.006120f, -0.002316f, +0.002718f, +0.005829f, +0.008042f, -0.003941f, +0.001928f, +0.005696f, - +0.002706f, +0.005923f, -0.002327f, -0.001251f, +0.001284f, -0.003591f, -0.001779f, -0.001486f, -0.003089f, -0.001411f, - -0.005439f, -0.000355f, -0.004460f, -0.001730f, -0.000187f, +0.001541f - } - }, - { - { - -0.001967f, +0.059869f, +0.030841f, -0.042580f, -0.018684f, +0.003712f, +0.002148f, -0.005977f, +0.005193f, +0.007183f, - +0.013423f, -0.010044f, -0.004284f, -0.027925f, -0.025414f, -0.052686f, -0.034978f, -0.004892f, -0.034498f, +0.016190f, - -0.009752f, +0.008980f, +0.010490f, -0.008229f, -0.012130f, -0.034905f, -0.019332f, -0.009749f, -0.016276f, +0.009049f, - -0.029144f, +0.002803f, -0.016131f, +0.012729f, +0.005385f, +0.022926f, +0.003056f, +0.005882f, +0.012637f, -0.009549f, - -0.002317f, -0.006745f, -0.000457f, -0.003741f, -0.002913f, +0.010014f, +0.000193f, +0.006061f, +0.007180f, +0.006286f, - +0.010866f, +0.002242f, +0.015648f, +0.000216f, +0.014597f, -0.003975f, +0.005346f, -0.006926f, +0.005095f, -0.004349f, - +0.003145f, +0.002625f, +0.003284f, -0.006567f, -0.001201f, -0.003551f, -0.004459f, -0.001996f, +0.004232f, +0.004790f, - -0.005883f, -0.003094f, -0.002577f, +0.006891f, +0.000089f, +0.003296f, -0.000374f, +0.002138f, +0.002646f, +0.000230f, - -0.002528f, +0.003388f, +0.003116f, +0.000506f, +0.000020f, +0.000337f, +0.003904f, -0.000471f, +0.000042f, -0.000784f, - +0.000496f, -0.001533f, -0.001587f, +0.002589f, +0.003667f, -0.001731f - }, - { - +0.032523f, +0.278998f, -0.066119f, -0.007358f, +0.010908f, -0.000649f, -0.013765f, +0.000384f, -0.038899f, -0.006645f, - +0.015056f, +0.024814f, -0.012249f, -0.010086f, +0.004708f, -0.012903f, -0.004407f, -0.006985f, +0.012958f, +0.012148f, - -0.005462f, -0.023542f, -0.023776f, +0.015386f, +0.007095f, -0.006856f, -0.002067f, +0.019596f, -0.004003f, -0.008076f, - -0.009648f, +0.018399f, +0.002305f, -0.022003f, +0.023940f, +0.015863f, +0.002514f, +0.009575f, -0.012564f, +0.010962f, - -0.006889f, +0.011959f, +0.004414f, -0.011209f, +0.012434f, -0.002982f, +0.005431f, +0.003869f, +0.009996f, +0.005535f, - +0.012982f, +0.015749f, +0.006247f, +0.013768f, +0.002678f, -0.004078f, +0.008551f, -0.000558f, +0.002202f, +0.009512f, - +0.005026f, +0.007354f, +0.000106f, -0.010404f, +0.004085f, -0.001355f, -0.004987f, -0.000871f, +0.005000f, -0.002400f, - +0.003406f, -0.000803f, +0.000263f, +0.004503f, +0.000995f, +0.001303f, -0.002487f, +0.001399f, +0.001194f, +0.003211f, - +0.001418f, -0.004389f, +0.002516f, +0.001446f, +0.000787f, -0.001791f, +0.002546f, +0.001941f, -0.001440f, -0.002277f, - +0.002919f, +0.001586f, +0.001137f, +0.003854f, +0.001283f, -0.002573f - }, - { - -0.003947f, +0.221195f, -0.043193f, -0.015932f, -0.008332f, +0.008594f, -0.008949f, +0.010120f, -0.013757f, -0.016587f, - -0.043415f, -0.039830f, +0.002519f, -0.001056f, -0.012559f, +0.008957f, -0.002707f, -0.017094f, -0.015486f, +0.005167f, - -0.014796f, -0.012729f, -0.005418f, +0.004389f, +0.031492f, +0.011267f, +0.004354f, +0.002637f, +0.012239f, -0.025197f, - -0.011276f, -0.003814f, -0.001489f, -0.007989f, -0.013923f, +0.001590f, +0.000652f, -0.011434f, +0.009918f, +0.011189f, - +0.002897f, -0.006826f, +0.007780f, +0.005985f, +0.002390f, +0.009558f, +0.004873f, +0.001508f, +0.013190f, +0.002649f, - +0.006069f, +0.003390f, -0.006484f, +0.003650f, +0.000356f, -0.006643f, +0.005193f, +0.002372f, +0.002627f, -0.003531f, - +0.000676f, -0.000989f, -0.001668f, -0.002695f, +0.007021f, +0.000753f, -0.007685f, +0.003078f, +0.004588f, +0.008479f, - +0.001699f, +0.001198f, +0.000879f, +0.002722f, +0.001647f, -0.002725f, -0.001780f, +0.001274f, +0.002687f, +0.003663f, - -0.000717f, -0.001884f, -0.001156f, -0.000033f, -0.002024f, +0.001141f, -0.000771f, -0.001363f, -0.001078f, +0.000827f, - +0.000709f, +0.000622f, +0.002286f, -0.001467f, -0.000633f, -0.001322f - }, - { - -0.001338f, +0.044481f, -0.003129f, +0.014685f, -0.001043f, +0.001503f, -0.000693f, +0.003793f, -0.008363f, +0.000284f, - +0.003523f, -0.015654f, +0.016627f, -0.006424f, -0.061584f, +0.001259f, -0.020177f, -0.017766f, -0.004779f, -0.009189f, - -0.027128f, -0.027096f, -0.003675f, -0.002089f, +0.020290f, -0.004317f, -0.016648f, +0.007686f, -0.019748f, +0.021493f, - +0.017057f, -0.002089f, +0.001721f, -0.011635f, -0.004838f, -0.002856f, +0.013549f, -0.007065f, -0.005306f, +0.000252f, - +0.004013f, -0.002207f, -0.013168f, -0.002328f, -0.004921f, +0.011601f, +0.010415f, +0.003920f, -0.006978f, +0.009535f, - +0.000035f, -0.013839f, +0.001332f, -0.002882f, -0.000396f, -0.003017f, -0.000311f, +0.007096f, +0.001803f, -0.003876f, - -0.004348f, +0.002574f, +0.000959f, +0.007197f, -0.003446f, -0.004120f, +0.001086f, -0.000901f, +0.002456f, -0.003926f, - -0.007208f, +0.002471f, -0.000294f, -0.000928f, -0.000890f, +0.000888f, -0.000470f, +0.003755f, -0.000189f, +0.001755f, - +0.000733f, +0.004264f, -0.002745f, +0.000962f, -0.002444f, +0.000075f, +0.000570f, +0.000256f, +0.000173f, +0.002866f, - +0.001428f, -0.001845f, +0.000708f, +0.001169f, -0.001273f, +0.000830f - }, - { - +0.020631f, -0.544589f, -0.018512f, -0.013048f, -0.004873f, -0.000194f, -0.003779f, -0.001673f, +0.028960f, -0.031043f, - +0.000487f, -0.010240f, +0.021500f, +0.004886f, -0.012910f, -0.009678f, +0.011416f, -0.027388f, +0.009015f, -0.016746f, - -0.019125f, +0.011265f, +0.007035f, -0.007771f, -0.016153f, -0.005303f, -0.028433f, +0.002371f, -0.009053f, +0.001458f, - +0.028181f, -0.015963f, +0.008540f, -0.019567f, +0.005644f, +0.009798f, -0.043340f, -0.012869f, -0.017386f, -0.003739f, - -0.014770f, -0.014707f, -0.000859f, -0.000218f, +0.003192f, +0.006337f, +0.012285f, -0.012297f, +0.014148f, +0.003639f, - +0.009662f, +0.003938f, -0.003893f, +0.009983f, +0.004398f, +0.002293f, -0.010331f, +0.005231f, +0.002315f, -0.000091f, - -0.000007f, +0.001219f, -0.000315f, -0.002432f, +0.009945f, +0.001488f, -0.011850f, -0.000733f, +0.004167f, +0.000327f, - +0.000148f, -0.001872f, -0.002650f, -0.001241f, -0.003020f, -0.003544f, -0.001053f, -0.001394f, +0.005086f, +0.001084f, - +0.003393f, -0.000787f, +0.002870f, +0.000689f, -0.003115f, -0.001993f, -0.001284f, -0.000496f, +0.001103f, -0.001346f, - -0.002188f, +0.000015f, -0.000277f, -0.003065f, +0.000727f, -0.000195f - }, - { - +0.002225f, +0.008703f, +0.003311f, +0.001196f, +0.006814f, +0.000252f, -0.000485f, +0.003279f, +0.003273f, +0.001918f, - +0.003559f, -0.001084f, -0.025696f, -0.031219f, -0.101872f, -0.000418f, +0.010524f, +0.003081f, -0.009022f, +0.016613f, - +0.023488f, -0.003749f, -0.022632f, -0.025018f, -0.019430f, -0.015017f, -0.018625f, -0.026295f, +0.021666f, -0.007969f, - -0.010939f, -0.015542f, -0.004414f, +0.021232f, +0.022983f, +0.007005f, +0.010131f, -0.001136f, +0.001829f, -0.018825f, - +0.006312f, -0.012259f, -0.012356f, +0.004672f, -0.004658f, -0.003456f, -0.002855f, +0.001293f, +0.004274f, +0.007461f, - -0.004654f, +0.003362f, -0.000453f, +0.011787f, +0.004524f, -0.004280f, +0.000655f, +0.012022f, -0.003143f, +0.007878f, - -0.006193f, -0.000611f, +0.008168f, -0.006656f, -0.001143f, -0.001641f, -0.004542f, +0.002703f, +0.000306f, -0.005671f, - -0.010000f, +0.001130f, -0.003854f, -0.001867f, -0.003676f, +0.003658f, +0.003208f, -0.004923f, -0.000853f, +0.000351f, - +0.000932f, -0.000261f, +0.000071f, +0.001133f, -0.001846f, -0.004085f, +0.000875f, +0.001755f, -0.001094f, +0.001219f, - +0.000427f, +0.000033f, -0.000092f, -0.001083f, +0.000130f, -0.000717f - }, - { - +0.080318f, -0.636161f, -0.045165f, +0.017000f, -0.002233f, +0.007073f, +0.014109f, +0.004157f, +0.003094f, -0.013441f, - -0.007674f, +0.000324f, +0.018041f, -0.050383f, -0.000224f, +0.011474f, -0.002365f, +0.035512f, -0.038729f, +0.003429f, - +0.011086f, +0.011379f, -0.006992f, +0.001091f, +0.004337f, +0.017367f, -0.005003f, +0.000098f, -0.011991f, -0.000234f, - +0.000294f, +0.001852f, -0.001309f, +0.004243f, -0.022085f, -0.002243f, +0.021387f, -0.013322f, +0.002417f, -0.011529f, - +0.010386f, +0.001328f, -0.000628f, -0.004420f, +0.004619f, +0.005578f, -0.018188f, +0.012652f, -0.004907f, +0.006030f, - +0.006174f, -0.003279f, +0.013184f, +0.005874f, +0.003245f, -0.000950f, +0.004827f, +0.010483f, +0.004071f, +0.001059f, - +0.000523f, -0.006216f, +0.007143f, +0.001414f, -0.004248f, +0.002209f, +0.005585f, +0.004140f, +0.002759f, +0.000611f, - -0.003351f, -0.003325f, +0.004904f, +0.000853f, -0.004839f, +0.001738f, +0.003715f, +0.000373f, -0.004954f, +0.005447f, - -0.004896f, +0.000271f, +0.004648f, +0.000431f, +0.002722f, -0.001209f, +0.003630f, -0.002121f, -0.000019f, +0.000185f, - +0.000317f, +0.002996f, -0.001719f, -0.001806f, +0.001917f, +0.001352f - }, - { - +0.002620f, +0.000722f, +0.009459f, -0.002107f, +0.002919f, +0.002269f, +0.001638f, -0.007853f, -0.007742f, +0.010364f, - -0.007370f, -0.000680f, +0.000009f, +0.018536f, -0.005557f, -0.004893f, -0.019631f, -0.068311f, +0.023913f, -0.063955f, - +0.003368f, -0.000021f, -0.006610f, -0.012985f, -0.005517f, -0.011523f, +0.008574f, +0.007674f, +0.011181f, -0.061075f, - -0.026406f, +0.009628f, +0.002541f, +0.026394f, -0.001382f, -0.001351f, -0.002778f, +0.013446f, -0.007600f, +0.003985f, - +0.007473f, -0.010073f, +0.004016f, +0.000512f, +0.000412f, +0.016358f, +0.003557f, -0.008787f, +0.003819f, +0.000352f, - -0.003527f, +0.005171f, +0.004710f, +0.004878f, -0.002418f, +0.006104f, +0.002429f, -0.013206f, +0.001789f, +0.004114f, - -0.005515f, +0.006895f, -0.006213f, +0.001606f, -0.001807f, +0.003000f, -0.008505f, +0.004395f, -0.003076f, -0.000437f, - +0.007489f, -0.001402f, -0.001588f, -0.001991f, -0.005366f, +0.001597f, -0.001511f, -0.001546f, +0.001771f, +0.004271f, - -0.001741f, -0.003633f, +0.002993f, -0.002358f, +0.003237f, -0.002383f, -0.000495f, -0.003709f, +0.002242f, -0.001037f, - +0.001289f, -0.000674f, +0.000050f, +0.000620f, +0.000135f, +0.001296f - }, - { - -0.080897f, -0.739112f, +0.049233f, +0.063673f, +0.001102f, -0.002372f, +0.012517f, +0.003736f, +0.012795f, +0.017160f, - -0.036974f, -0.010327f, -0.016589f, +0.031055f, -0.018217f, -0.001380f, -0.009335f, +0.020783f, -0.009438f, +0.000779f, - -0.008557f, -0.015449f, -0.005846f, +0.019613f, +0.013639f, +0.012027f, -0.006237f, +0.006662f, +0.008828f, -0.005041f, - -0.011019f, +0.011744f, -0.006175f, +0.012276f, -0.006911f, -0.006032f, -0.007573f, +0.013709f, +0.000975f, -0.021581f, - -0.016584f, -0.001483f, +0.001500f, -0.005756f, -0.001631f, -0.005070f, +0.013825f, +0.010140f, -0.007595f, -0.008294f, - -0.005247f, -0.008745f, +0.005839f, +0.006163f, -0.009979f, +0.007257f, +0.005120f, +0.006810f, +0.002611f, -0.000308f, - -0.003581f, -0.002245f, +0.007324f, -0.003638f, +0.001875f, -0.001313f, -0.000466f, +0.003354f, +0.001421f, +0.003200f, - -0.000945f, +0.003185f, -0.000258f, -0.003430f, -0.000650f, -0.001790f, +0.002167f, -0.000312f, +0.001982f, -0.000110f, - +0.002456f, +0.000012f, -0.000625f, +0.004271f, -0.002452f, +0.000879f, -0.001708f, -0.003106f, -0.001628f, +0.003895f, - +0.001776f, -0.001462f, -0.000877f, -0.003057f, -0.000401f, +0.003667f - }, - { - -0.008907f, -0.028148f, +0.019244f, -0.005860f, -0.027928f, +0.008389f, +0.008024f, +0.008022f, +0.004978f, +0.011274f, - -0.002151f, -0.007698f, -0.004970f, -0.045033f, -0.039265f, +0.004627f, -0.036250f, +0.025952f, +0.089757f, -0.027382f, - +0.001877f, -0.016698f, -0.011494f, -0.017552f, +0.033099f, -0.003021f, -0.002042f, -0.013061f, -0.012625f, -0.013748f, - -0.020796f, +0.003564f, +0.022319f, +0.014075f, +0.000087f, -0.006109f, +0.001781f, +0.024247f, +0.002091f, -0.023231f, - +0.007706f, -0.005499f, -0.000490f, -0.001632f, +0.011857f, +0.006749f, +0.006226f, -0.001420f, +0.009704f, -0.001694f, - +0.015089f, -0.002781f, -0.012141f, +0.000202f, -0.011444f, +0.009015f, +0.004589f, +0.000337f, -0.016216f, +0.004796f, - +0.006369f, +0.002593f, -0.001945f, -0.000858f, -0.002291f, +0.003744f, -0.001855f, -0.010943f, +0.007751f, +0.002573f, - +0.003884f, -0.006169f, -0.004338f, +0.002511f, +0.001548f, -0.001822f, +0.004515f, +0.000861f, -0.002208f, -0.002219f, - -0.000585f, +0.002481f, +0.003890f, -0.001487f, -0.001417f, -0.003005f, +0.002505f, -0.000687f, -0.000253f, -0.002506f, - +0.002614f, -0.000984f, +0.004975f, -0.002736f, +0.000697f, +0.002453f - }, - { - +0.039409f, -0.459045f, -0.003757f, +0.020210f, +0.009744f, +0.022951f, +0.034072f, +0.006016f, +0.006741f, -0.027334f, - -0.008626f, +0.023301f, +0.035180f, +0.020598f, +0.011192f, +0.007058f, -0.008607f, -0.001030f, -0.021067f, +0.013949f, - -0.031668f, -0.007264f, -0.009034f, +0.002603f, -0.011617f, +0.015683f, -0.025657f, -0.000382f, +0.009582f, +0.017995f, - +0.003942f, +0.004936f, +0.007250f, -0.015081f, -0.001733f, +0.005500f, +0.017326f, +0.001845f, +0.005906f, +0.004908f, - +0.006255f, -0.011911f, -0.008988f, -0.016326f, +0.000839f, +0.005421f, -0.008618f, -0.006688f, -0.005568f, +0.010935f, - -0.017566f, -0.014625f, +0.001423f, -0.001876f, +0.009074f, +0.002341f, +0.006883f, +0.003873f, +0.005131f, -0.003902f, - -0.007678f, -0.010520f, +0.003730f, +0.000347f, -0.000409f, -0.007079f, -0.003869f, -0.002689f, +0.004457f, +0.005375f, - -0.002403f, -0.001782f, +0.001580f, +0.003977f, +0.003525f, +0.002986f, -0.000592f, +0.001063f, -0.006665f, -0.001666f, - +0.002029f, +0.001086f, -0.005335f, +0.001620f, -0.001404f, +0.001384f, +0.000835f, -0.000168f, -0.002328f, +0.002077f, - +0.001736f, +0.001957f, -0.000563f, +0.001095f, +0.002790f, +0.001077f - }, - { - -0.004199f, +0.086956f, +0.020941f, +0.001038f, +0.017798f, +0.007116f, -0.000772f, -0.002474f, -0.008074f, +0.011171f, - +0.017834f, -0.015451f, +0.040597f, -0.012176f, -0.003977f, -0.030504f, +0.037184f, -0.012649f, +0.017870f, -0.032072f, - -0.006461f, +0.013736f, -0.026784f, +0.058725f, -0.029197f, +0.003214f, -0.006721f, +0.015868f, +0.006529f, +0.029684f, - -0.008999f, -0.024439f, +0.048660f, -0.006556f, -0.019990f, +0.015737f, -0.018320f, +0.026077f, +0.016983f, +0.026350f, - +0.018900f, -0.007070f, -0.000451f, +0.012942f, +0.011948f, -0.017656f, +0.007980f, +0.002273f, +0.009374f, +0.004425f, - -0.007115f, -0.001294f, +0.003300f, +0.001868f, -0.013917f, -0.007129f, +0.000850f, +0.002518f, -0.004037f, -0.000363f, - -0.006651f, -0.001607f, -0.000863f, +0.000792f, -0.005731f, -0.002005f, -0.006116f, +0.000023f, -0.002130f, +0.001346f, - -0.000652f, -0.000098f, +0.001957f, -0.002836f, +0.007246f, +0.006301f, -0.005899f, +0.003709f, -0.000259f, -0.002301f, - +0.006846f, +0.003393f, -0.000955f, +0.004956f, -0.002460f, +0.002530f, -0.000902f, +0.000026f, +0.003677f, -0.000668f, - +0.000603f, -0.000361f, -0.002154f, +0.001369f, +0.000816f, -0.002188f - }, - { - +0.002298f, +0.339212f, +0.002453f, +0.003012f, -0.022563f, +0.045461f, -0.030651f, -0.027328f, -0.067342f, -0.007661f, - -0.019460f, +0.012608f, -0.008771f, +0.000691f, +0.005060f, +0.010836f, +0.014855f, -0.007680f, -0.020343f, -0.001364f, - +0.010543f, -0.016068f, -0.030318f, +0.003594f, +0.018129f, +0.017583f, +0.019237f, -0.000520f, -0.024485f, -0.009586f, - +0.007032f, -0.006085f, -0.000152f, -0.002310f, +0.002019f, -0.003149f, -0.011288f, -0.015170f, -0.004144f, -0.019463f, - +0.001481f, -0.003659f, +0.006213f, +0.002513f, -0.012712f, +0.002052f, -0.006983f, -0.012344f, -0.006944f, +0.001512f, - +0.010462f, -0.009364f, +0.003559f, +0.012086f, -0.005269f, -0.000476f, +0.005995f, +0.010642f, -0.000927f, +0.002044f, - +0.005360f, +0.009135f, +0.000184f, +0.002652f, +0.004195f, +0.001943f, -0.004839f, +0.004082f, +0.009311f, +0.001380f, - +0.003498f, +0.000243f, +0.001130f, +0.003059f, -0.002287f, -0.000067f, -0.003716f, -0.003014f, -0.006375f, +0.006185f, - +0.001785f, +0.001194f, +0.000826f, -0.002618f, +0.001014f, -0.000094f, +0.001640f, +0.000848f, +0.001465f, -0.003967f, - +0.003673f, -0.001672f, +0.000447f, +0.000599f, +0.000424f, -0.000369f - }, - { - +0.012725f, +0.066439f, -0.022130f, +0.020092f, -0.004925f, +0.008762f, -0.020369f, -0.000386f, -0.018298f, -0.018650f, - -0.010526f, +0.002665f, +0.002309f, +0.046358f, -0.048192f, +0.013438f, -0.029056f, +0.010242f, -0.002876f, -0.028549f, - +0.063422f, +0.011040f, +0.002516f, -0.013353f, -0.029421f, +0.018194f, +0.027190f, +0.056331f, +0.004399f, -0.006684f, - -0.029561f, -0.003260f, -0.004350f, -0.009261f, -0.016086f, -0.022414f, +0.024066f, +0.004570f, -0.004458f, -0.003609f, - -0.015086f, -0.013056f, -0.003093f, +0.000456f, +0.001721f, +0.003189f, +0.002679f, -0.002020f, -0.009422f, -0.007117f, - -0.004463f, -0.003966f, -0.001185f, -0.003719f, +0.004719f, +0.000634f, -0.011346f, +0.004073f, -0.003353f, +0.001609f, - -0.001540f, +0.002025f, -0.001176f, -0.001677f, -0.000128f, -0.001282f, +0.003299f, -0.000862f, -0.000196f, +0.002812f, - -0.002482f, +0.007661f, +0.013327f, -0.004905f, -0.001263f, +0.005594f, -0.000237f, +0.000280f, +0.000535f, +0.002944f, - -0.004832f, -0.001531f, -0.000172f, -0.005875f, +0.000105f, +0.001352f, +0.000794f, +0.002982f, -0.004260f, -0.001227f, - +0.001927f, +0.002422f, +0.001131f, +0.001455f, -0.000777f, +0.000924f - }, - { - +0.044843f, +0.140038f, +0.006984f, -0.005066f, -0.025534f, -0.006134f, -0.002534f, +0.040641f, +0.009835f, -0.014887f, - +0.022482f, +0.042206f, -0.015513f, +0.019434f, +0.052829f, +0.021093f, +0.019417f, -0.000909f, -0.017293f, -0.000807f, - -0.030994f, -0.019961f, +0.005710f, -0.004997f, -0.006197f, -0.007801f, -0.018856f, +0.003162f, +0.007568f, +0.015643f, - -0.014475f, +0.007434f, -0.000020f, -0.005235f, -0.012237f, -0.015141f, -0.026275f, +0.015258f, -0.019523f, -0.004504f, - -0.013625f, -0.009677f, -0.008437f, -0.005588f, -0.000785f, +0.003539f, +0.000006f, -0.014023f, +0.005924f, +0.003935f, - +0.000338f, -0.003404f, -0.000094f, +0.011822f, -0.004606f, -0.009050f, +0.008352f, -0.002753f, -0.002581f, -0.002200f, - -0.001320f, +0.002526f, +0.005546f, -0.000947f, +0.002774f, -0.000011f, -0.001172f, +0.003401f, -0.003748f, +0.003248f, - -0.004529f, +0.001419f, -0.000067f, -0.000185f, +0.001205f, -0.002497f, -0.000634f, -0.003033f, +0.001391f, -0.001087f, - -0.003749f, +0.005082f, -0.001788f, -0.000727f, +0.000916f, -0.002794f, -0.000755f, +0.002575f, +0.001200f, +0.000519f, - -0.002281f, +0.002121f, -0.001473f, -0.001796f, -0.000215f, -0.000400f - } - }, - { - { - +0.003091f, +0.081387f, -0.002105f, -0.010578f, -0.028840f, +0.000940f, +0.001777f, +0.004029f, -0.008413f, +0.030725f, - -0.008660f, +0.014242f, -0.034273f, -0.001967f, -0.060902f, -0.021076f, -0.038038f, -0.027369f, +0.002537f, -0.002507f, - -0.009753f, -0.007624f, +0.008090f, -0.021772f, -0.002708f, -0.012313f, -0.031853f, -0.018806f, -0.024988f, +0.006013f, - +0.001438f, -0.008633f, -0.013809f, +0.012347f, -0.005559f, +0.021098f, +0.000934f, +0.019996f, -0.007098f, -0.004466f, - -0.011393f, +0.003005f, +0.006248f, -0.014070f, -0.008554f, +0.016067f, +0.009152f, +0.004453f, -0.002023f, +0.008696f, - +0.006024f, +0.004036f, +0.013453f, +0.007145f, +0.010178f, +0.004433f, -0.004819f, -0.003437f, +0.003143f, -0.002967f, - +0.004743f, +0.007401f, -0.002297f, -0.000800f, -0.001626f, -0.001410f, +0.000091f, -0.004468f, +0.003277f, +0.005048f, - -0.004469f, -0.003466f, +0.000379f, +0.008819f, -0.000588f, -0.000656f, +0.004241f, +0.000432f, +0.003573f, -0.000980f, - -0.000441f, +0.000950f, +0.003109f, +0.002259f, +0.001815f, -0.001372f, +0.001024f, -0.000385f, +0.001210f, -0.000353f, - +0.000262f, -0.001298f, -0.000285f, +0.002069f, +0.002705f, -0.001118f - }, - { - -0.036309f, +0.230435f, +0.021129f, +0.025687f, -0.009602f, +0.000046f, -0.001448f, -0.027572f, -0.019703f, +0.001712f, - +0.021069f, -0.010727f, -0.001285f, -0.018615f, +0.003506f, -0.043641f, +0.008123f, +0.013757f, +0.001099f, +0.003805f, - -0.010622f, -0.021659f, -0.018599f, +0.023068f, +0.000369f, +0.015254f, -0.003542f, +0.002646f, +0.005648f, -0.003560f, - -0.011633f, +0.004211f, +0.004710f, -0.019063f, +0.017094f, +0.018116f, -0.000547f, +0.012804f, -0.000098f, -0.005323f, - -0.006296f, +0.001049f, -0.001421f, +0.008259f, -0.004656f, +0.005814f, +0.002318f, +0.013279f, -0.000526f, +0.008935f, - +0.009685f, +0.009025f, +0.012803f, +0.013052f, +0.006988f, -0.006244f, +0.001812f, +0.004779f, +0.005154f, +0.012690f, - -0.003552f, +0.006703f, +0.004144f, -0.000825f, -0.004550f, +0.002402f, -0.006184f, +0.001487f, +0.003774f, -0.001221f, - +0.002513f, +0.000169f, +0.003130f, +0.001249f, +0.000582f, -0.000179f, +0.003518f, +0.000678f, -0.001150f, +0.001582f, - +0.000786f, +0.000946f, -0.000206f, -0.000024f, +0.000795f, +0.001072f, +0.001403f, +0.001642f, -0.000724f, +0.000104f, - +0.001020f, +0.001584f, +0.001015f, +0.003898f, +0.001209f, -0.002941f - }, - { - +0.000485f, +0.142915f, +0.012900f, +0.012008f, -0.024996f, +0.000188f, -0.005683f, +0.004916f, -0.007273f, -0.021421f, - -0.030361f, -0.030474f, -0.008641f, -0.000225f, -0.008646f, -0.006520f, +0.002711f, -0.009376f, +0.005378f, -0.029494f, - +0.008999f, -0.021457f, +0.009762f, -0.012429f, +0.005228f, +0.012621f, -0.001744f, +0.009353f, -0.003888f, -0.019758f, - -0.027677f, +0.015095f, -0.005816f, +0.003545f, -0.015972f, +0.001258f, -0.002868f, +0.000963f, +0.005822f, +0.011937f, - +0.001326f, -0.001565f, +0.015509f, -0.009034f, +0.004818f, +0.017308f, -0.000516f, +0.006049f, +0.012131f, -0.000906f, - +0.008680f, -0.002494f, -0.006356f, +0.004262f, +0.004124f, -0.008507f, +0.007184f, -0.003683f, +0.002284f, -0.004176f, - +0.008082f, -0.008223f, +0.005704f, -0.004461f, +0.005474f, +0.001588f, -0.001782f, +0.000288f, +0.004963f, +0.006121f, - +0.004520f, +0.000512f, +0.000582f, +0.002468f, +0.001577f, -0.003258f, -0.002339f, -0.001242f, +0.003321f, +0.001336f, - -0.001835f, -0.000505f, +0.001442f, +0.001152f, -0.002343f, -0.000381f, -0.000011f, -0.001632f, -0.000608f, -0.000006f, - +0.000600f, +0.001497f, +0.000670f, -0.001643f, +0.000321f, -0.000538f - }, - { - -0.000571f, +0.037839f, -0.001633f, +0.008792f, +0.007629f, -0.000867f, +0.002696f, -0.005183f, -0.003803f, -0.000307f, - -0.000278f, +0.001187f, +0.006800f, -0.015041f, -0.058775f, -0.023105f, -0.010176f, +0.017108f, -0.012600f, -0.026225f, - -0.026711f, -0.000076f, -0.027781f, -0.004023f, +0.024091f, -0.000020f, -0.013566f, -0.015596f, +0.009956f, +0.005643f, - +0.002518f, -0.012521f, +0.001957f, +0.021774f, -0.017734f, -0.010044f, +0.026842f, -0.017990f, +0.009626f, -0.008175f, - +0.002282f, +0.000035f, -0.011304f, -0.001677f, +0.000452f, +0.006470f, +0.002769f, -0.003559f, +0.018073f, -0.002167f, - +0.000405f, -0.005931f, -0.006448f, -0.000671f, -0.001447f, -0.002175f, -0.002167f, +0.007864f, -0.001464f, +0.002613f, - -0.004692f, -0.000342f, +0.006717f, +0.003706f, -0.004501f, +0.003155f, -0.000473f, -0.003212f, -0.001235f, +0.000730f, - -0.001430f, -0.004032f, -0.000437f, +0.001823f, -0.002247f, -0.001218f, +0.000682f, +0.005374f, +0.000638f, +0.000341f, - -0.000756f, +0.003537f, -0.000274f, +0.000378f, -0.000758f, -0.001524f, -0.000039f, -0.000914f, +0.002412f, +0.002747f, - -0.000658f, +0.000644f, -0.001442f, +0.001153f, +0.000719f, -0.000708f - }, - { - -0.057375f, -0.524580f, +0.028697f, +0.002278f, -0.006748f, -0.001346f, -0.005304f, +0.010560f, +0.005115f, -0.005109f, - -0.002848f, -0.004320f, +0.014050f, +0.000804f, -0.011296f, -0.031294f, +0.009397f, +0.011550f, -0.004410f, -0.023310f, - -0.015101f, +0.017000f, -0.016117f, +0.002324f, -0.009694f, -0.015906f, -0.017855f, -0.005576f, -0.016546f, +0.010638f, - +0.016817f, +0.002301f, -0.008016f, -0.009758f, +0.006565f, +0.008045f, -0.031201f, -0.030625f, -0.017918f, +0.002012f, - -0.010050f, -0.008519f, -0.007924f, +0.001232f, +0.000292f, +0.001855f, +0.012656f, -0.010444f, +0.007476f, +0.013735f, - +0.003651f, -0.001262f, +0.004501f, +0.010433f, +0.005345f, -0.002812f, -0.006104f, +0.004955f, -0.005074f, +0.004548f, - +0.000975f, -0.000802f, -0.001628f, -0.000103f, +0.003203f, +0.002483f, -0.006925f, -0.001237f, +0.003993f, +0.000424f, - -0.001128f, -0.003690f, -0.005389f, -0.000671f, -0.005793f, -0.001057f, -0.000810f, -0.000591f, +0.003074f, +0.001886f, - +0.000689f, +0.001210f, +0.001250f, +0.000900f, -0.000855f, -0.004078f, -0.000015f, +0.000405f, -0.002386f, -0.002207f, - +0.000477f, -0.001569f, +0.001138f, -0.003276f, +0.000525f, -0.001884f - }, - { - -0.001142f, +0.032121f, -0.004059f, +0.002456f, -0.000491f, +0.000456f, +0.001638f, -0.002538f, +0.007975f, +0.007849f, - -0.011193f, -0.003476f, -0.012784f, -0.055394f, -0.122561f, +0.023018f, +0.001753f, +0.000199f, +0.011903f, +0.020517f, - -0.006322f, -0.029939f, -0.000293f, -0.020400f, -0.025045f, -0.024170f, -0.003550f, -0.028974f, +0.018223f, -0.004994f, - -0.020189f, -0.002634f, -0.021628f, +0.024729f, +0.026565f, +0.007471f, +0.003003f, +0.000990f, -0.001811f, -0.000921f, - -0.007937f, -0.011244f, -0.007808f, -0.009469f, +0.007376f, -0.007163f, -0.000001f, +0.006807f, +0.003112f, -0.006667f, - +0.003667f, +0.001405f, +0.005269f, -0.000208f, +0.008434f, +0.003683f, -0.003418f, +0.011780f, +0.000130f, +0.004348f, - -0.009085f, +0.000143f, +0.003966f, -0.002744f, -0.003467f, -0.004726f, +0.004819f, -0.003432f, +0.001575f, -0.001088f, - -0.005166f, -0.001008f, -0.006653f, -0.006791f, -0.000208f, +0.000304f, +0.005989f, -0.001470f, -0.002967f, +0.004616f, - -0.000818f, -0.000891f, -0.000085f, +0.000249f, -0.003161f, -0.000172f, -0.001339f, +0.002552f, -0.000754f, +0.000324f, - -0.000032f, +0.000172f, -0.000358f, -0.001366f, +0.002110f, -0.001501f - }, - { - -0.122157f, -0.480561f, +0.029047f, +0.032963f, -0.003092f, +0.003405f, +0.007549f, -0.009667f, +0.018425f, +0.019627f, - -0.009524f, -0.007978f, -0.006493f, -0.024509f, -0.023473f, +0.009452f, +0.016037f, +0.012291f, -0.015130f, -0.001733f, - +0.010521f, +0.001539f, -0.016203f, +0.013262f, +0.008092f, +0.007050f, -0.002102f, +0.006422f, +0.001781f, -0.014928f, - -0.001528f, +0.010994f, -0.004869f, +0.000314f, -0.008404f, -0.006747f, +0.005774f, -0.013230f, +0.009990f, -0.001660f, - +0.003805f, -0.005046f, +0.010811f, -0.009618f, +0.009613f, +0.000992f, -0.008823f, -0.005099f, +0.005320f, +0.009216f, - +0.003984f, +0.014633f, -0.011005f, +0.004518f, +0.010782f, -0.003789f, +0.006557f, +0.007928f, +0.003240f, +0.001543f, - +0.000741f, +0.001545f, +0.000687f, +0.006973f, -0.004696f, +0.003287f, +0.000691f, +0.004629f, -0.001736f, +0.002104f, - +0.002652f, -0.002181f, -0.000981f, -0.001167f, +0.002300f, -0.000022f, +0.001484f, +0.002991f, -0.003092f, +0.002276f, - -0.002221f, -0.000369f, +0.002345f, +0.002174f, +0.001856f, -0.000420f, +0.002364f, +0.000321f, -0.000559f, -0.000170f, - +0.000125f, +0.000761f, +0.000348f, +0.000811f, +0.000278f, +0.003071f - }, - { - -0.000760f, +0.032893f, -0.013185f, +0.004698f, +0.000084f, +0.003938f, +0.002499f, +0.002773f, -0.014514f, +0.004307f, - -0.011834f, +0.005092f, +0.013202f, +0.003475f, -0.011451f, -0.018000f, -0.025698f, -0.029963f, -0.018131f, -0.041165f, - +0.009068f, -0.024590f, +0.015884f, -0.021340f, -0.003092f, +0.006119f, -0.001231f, +0.024384f, -0.023081f, -0.053406f, - -0.021385f, +0.014405f, -0.008009f, +0.025960f, +0.007350f, -0.006416f, -0.003975f, +0.020776f, -0.014153f, +0.011659f, - +0.016662f, -0.019590f, +0.011423f, -0.008120f, +0.006666f, +0.004622f, +0.007083f, +0.003389f, -0.010968f, +0.002753f, - -0.001890f, +0.014628f, -0.004344f, +0.007131f, +0.008048f, +0.003054f, -0.004403f, -0.005422f, -0.003327f, +0.001748f, - -0.001939f, -0.002301f, -0.000890f, +0.004015f, +0.001360f, -0.004370f, -0.002275f, +0.002521f, -0.003108f, -0.000245f, - +0.006028f, +0.000246f, -0.002851f, -0.000699f, -0.000785f, -0.003438f, +0.000257f, -0.000364f, +0.001194f, +0.003953f, - -0.002981f, -0.003879f, +0.003783f, -0.001844f, +0.001097f, -0.001814f, +0.000045f, -0.002593f, +0.000709f, +0.000497f, - +0.001428f, -0.001726f, +0.000202f, -0.000597f, +0.001544f, +0.000176f - }, - { - +0.025685f, -0.805313f, -0.017354f, +0.070208f, +0.012320f, -0.012268f, +0.017586f, +0.004167f, +0.013661f, +0.004836f, - +0.018685f, -0.060088f, -0.014604f, +0.014468f, +0.016017f, -0.039987f, +0.018917f, +0.016834f, -0.004505f, -0.004577f, - +0.002369f, -0.026276f, -0.003990f, +0.020506f, +0.014803f, +0.002069f, +0.003418f, +0.001864f, +0.003374f, +0.003091f, - -0.001247f, -0.003149f, -0.009321f, +0.018435f, -0.006695f, -0.009637f, +0.002353f, +0.005864f, -0.012797f, -0.010389f, - -0.021896f, -0.004807f, -0.002708f, +0.003316f, -0.004380f, -0.004137f, +0.011847f, +0.009092f, -0.009387f, -0.000312f, - -0.002130f, -0.013872f, +0.008418f, -0.004367f, +0.008675f, -0.000861f, +0.005738f, +0.007324f, +0.001427f, -0.000138f, - -0.004228f, -0.001744f, +0.001090f, +0.000254f, +0.001479f, +0.001685f, +0.000010f, -0.001330f, +0.002859f, +0.001362f, - +0.003398f, +0.001066f, -0.004624f, -0.000964f, +0.002047f, -0.000734f, +0.000085f, +0.002975f, -0.001332f, +0.000629f, - +0.001496f, +0.000608f, +0.000317f, +0.003814f, -0.001362f, -0.002614f, -0.001324f, -0.002539f, -0.000877f, +0.002605f, - +0.001458f, -0.001138f, -0.001571f, -0.001199f, -0.001239f, +0.003210f - }, - { - +0.008200f, +0.044704f, -0.038442f, -0.018640f, -0.021192f, -0.007693f, +0.021577f, +0.021272f, -0.007028f, +0.017437f, - -0.022143f, -0.004330f, -0.021040f, -0.046429f, -0.023205f, +0.000286f, -0.008460f, +0.011453f, +0.025724f, +0.027501f, - +0.006846f, -0.018262f, -0.011418f, -0.010918f, +0.008194f, +0.004166f, -0.007210f, -0.022483f, -0.012194f, -0.007498f, - -0.002159f, -0.008694f, +0.020384f, +0.029882f, -0.010816f, +0.000655f, -0.013945f, +0.039991f, +0.002288f, -0.020713f, - -0.001130f, +0.002681f, -0.015608f, +0.010082f, +0.003730f, +0.013380f, +0.002938f, +0.004303f, +0.003862f, +0.006163f, - +0.009865f, -0.001893f, -0.002906f, -0.008900f, -0.004511f, -0.000081f, +0.002845f, +0.002470f, -0.006946f, -0.000211f, - +0.011752f, +0.002656f, -0.007996f, +0.003399f, -0.001872f, -0.000318f, -0.005685f, -0.006841f, +0.008605f, -0.000146f, - +0.009556f, -0.005731f, -0.007100f, +0.000719f, +0.004350f, +0.003139f, +0.000730f, -0.000628f, -0.001258f, -0.003879f, - +0.002635f, -0.001982f, +0.002819f, +0.002350f, -0.000936f, -0.002172f, +0.000172f, +0.000233f, -0.002452f, -0.000700f, - +0.001779f, +0.000997f, +0.003106f, -0.002027f, +0.001311f, +0.001847f - }, - { - -0.042311f, -0.452011f, +0.051289f, +0.041399f, -0.034327f, +0.050550f, -0.004465f, +0.026235f, -0.016203f, -0.011835f, - -0.012186f, +0.018686f, +0.030761f, +0.064479f, -0.024074f, +0.010115f, -0.020790f, +0.002987f, -0.016940f, +0.009372f, - -0.006419f, -0.009281f, -0.013487f, -0.019695f, +0.007747f, -0.000922f, -0.010549f, -0.003180f, +0.001437f, +0.020801f, - +0.011350f, +0.001190f, +0.001948f, -0.005226f, +0.005804f, +0.008600f, -0.001458f, +0.005603f, -0.010457f, +0.014086f, - +0.007991f, -0.007994f, -0.015162f, -0.008895f, -0.004738f, +0.004031f, -0.004317f, +0.000358f, +0.005657f, -0.010116f, - -0.016546f, -0.012593f, -0.005030f, +0.014736f, +0.002071f, +0.007723f, -0.003338f, -0.000818f, +0.011004f, -0.005375f, - -0.005942f, -0.010744f, +0.003607f, +0.001463f, -0.003983f, -0.002249f, -0.005592f, -0.005789f, +0.006402f, -0.001865f, - +0.000789f, +0.005282f, -0.000043f, +0.001430f, +0.007797f, -0.001027f, +0.000654f, -0.001966f, -0.006429f, +0.001248f, - +0.001761f, -0.000434f, -0.004234f, +0.000532f, +0.001458f, +0.001430f, +0.000634f, -0.000662f, -0.001398f, +0.000923f, - +0.001439f, +0.001223f, +0.001890f, +0.001111f, +0.000722f, +0.000397f - }, - { - +0.002259f, +0.106395f, -0.017351f, +0.015495f, +0.019465f, +0.013759f, -0.001503f, -0.009749f, -0.004534f, +0.005224f, - +0.003961f, +0.003127f, +0.001052f, -0.037143f, +0.085397f, -0.022473f, -0.013952f, -0.003053f, +0.047182f, -0.029161f, - -0.007617f, -0.004450f, +0.007316f, +0.017262f, -0.011686f, -0.021996f, +0.016229f, +0.024830f, +0.006979f, +0.011091f, - +0.009692f, -0.005625f, +0.028276f, -0.012551f, -0.008755f, +0.004577f, -0.005679f, +0.013162f, +0.029397f, +0.015354f, - +0.016703f, -0.001373f, +0.001052f, +0.014815f, +0.002397f, +0.009290f, -0.001110f, -0.005603f, +0.005764f, +0.004650f, - -0.004019f, +0.006360f, -0.011002f, +0.000365f, -0.006924f, -0.000450f, +0.004167f, -0.007621f, +0.007666f, -0.006014f, - -0.006650f, -0.006389f, +0.002819f, -0.000694f, -0.005152f, -0.007919f, +0.005728f, -0.002491f, +0.000766f, -0.003786f, - +0.001690f, -0.002938f, -0.002578f, +0.007762f, +0.004516f, +0.000345f, -0.002812f, +0.004313f, +0.002395f, -0.001031f, - +0.001088f, +0.004668f, +0.000165f, +0.001578f, -0.000246f, -0.000869f, -0.000582f, +0.001578f, +0.001405f, +0.002050f, - -0.001231f, -0.001117f, +0.000173f, +0.002386f, -0.002322f, +0.001096f - }, - { - +0.058638f, +0.311273f, -0.060785f, +0.053216f, -0.034413f, -0.012509f, -0.010020f, -0.023015f, -0.042282f, -0.036280f, - -0.016863f, -0.021451f, +0.007721f, +0.001967f, -0.002726f, +0.032639f, -0.012406f, +0.012928f, -0.021442f, -0.010014f, - +0.028820f, -0.037307f, -0.017789f, +0.020164f, +0.024725f, +0.007371f, +0.008743f, +0.012956f, -0.000377f, -0.011854f, - -0.009506f, +0.003340f, -0.022993f, +0.015735f, +0.004227f, -0.003652f, -0.003305f, -0.029900f, -0.007864f, -0.002481f, - -0.002888f, -0.011748f, +0.015481f, -0.009183f, -0.003682f, -0.008225f, +0.007224f, -0.004175f, -0.016754f, -0.003337f, - +0.001761f, +0.000814f, -0.006594f, +0.018997f, -0.007854f, +0.008393f, +0.004215f, +0.012199f, +0.000726f, -0.005618f, - +0.009135f, +0.004216f, +0.001270f, +0.003155f, +0.007376f, +0.002357f, -0.002263f, +0.003277f, +0.003982f, +0.003523f, - +0.005760f, -0.000764f, +0.004121f, +0.000881f, +0.001181f, -0.003410f, -0.003781f, -0.004898f, -0.000493f, +0.000782f, - +0.007891f, -0.004445f, +0.002955f, -0.002586f, -0.003481f, +0.006396f, -0.000201f, -0.002521f, +0.002563f, -0.000610f, - +0.000453f, +0.000919f, -0.000983f, +0.002478f, -0.000046f, -0.001704f - }, - { - -0.013075f, +0.028277f, +0.031233f, +0.007587f, +0.009707f, +0.012450f, -0.024221f, -0.011472f, +0.003425f, -0.023398f, - -0.001625f, -0.000733f, +0.005023f, -0.045671f, +0.080458f, -0.007846f, +0.020259f, -0.016728f, -0.035549f, +0.045057f, - +0.007571f, +0.022106f, -0.004725f, -0.025370f, -0.024754f, +0.008890f, +0.029855f, +0.046911f, -0.010314f, -0.007283f, - -0.009168f, -0.020397f, -0.010245f, -0.000696f, -0.028426f, +0.008466f, +0.003212f, +0.004968f, -0.007648f, -0.008298f, - -0.011456f, -0.006274f, +0.001689f, -0.007271f, -0.000134f, +0.011624f, -0.007386f, +0.000266f, -0.009134f, -0.002043f, - -0.011926f, +0.006286f, -0.009159f, +0.002445f, +0.002983f, -0.000351f, -0.012069f, -0.006581f, +0.006416f, -0.004957f, - +0.007452f, -0.000280f, +0.001211f, -0.000582f, +0.003736f, +0.001015f, -0.006923f, -0.002933f, +0.006327f, +0.002946f, - +0.004039f, +0.007095f, +0.006879f, -0.000936f, -0.004127f, +0.005624f, +0.000667f, -0.001959f, +0.000130f, +0.001895f, - -0.002837f, +0.000210f, +0.001185f, -0.003305f, -0.002725f, -0.001614f, +0.002686f, +0.001269f, -0.002406f, -0.001087f, - +0.002665f, +0.000571f, +0.000735f, +0.001687f, +0.000549f, -0.000553f - }, - { - -0.013250f, +0.234976f, -0.016168f, +0.005440f, -0.028913f, -0.037036f, +0.025841f, +0.018984f, +0.012348f, +0.003827f, - +0.028332f, +0.031882f, +0.006628f, +0.024538f, +0.018084f, -0.000749f, +0.039763f, -0.012616f, +0.005348f, -0.004504f, - -0.021849f, -0.008184f, -0.003840f, -0.012582f, +0.012831f, -0.044394f, +0.003454f, -0.006095f, +0.000526f, +0.038086f, - -0.009850f, +0.006569f, -0.012265f, -0.010140f, -0.007133f, -0.015284f, -0.006076f, -0.025639f, +0.011146f, -0.020633f, - -0.016465f, +0.008758f, -0.024292f, +0.008557f, -0.005315f, -0.000338f, -0.004677f, -0.006637f, +0.019277f, -0.000349f, - -0.000241f, -0.006518f, -0.003574f, +0.003682f, +0.006344f, -0.003303f, -0.002590f, -0.000450f, +0.003446f, -0.002083f, - -0.004603f, +0.004946f, +0.000280f, +0.003570f, +0.001490f, -0.002618f, -0.003419f, +0.001733f, +0.002889f, -0.001841f, - -0.001400f, -0.000386f, +0.001974f, +0.000734f, -0.000336f, +0.000048f, -0.005330f, -0.000693f, -0.000777f, +0.001095f, - -0.003697f, +0.000924f, +0.001608f, -0.003862f, -0.000057f, +0.001594f, +0.001077f, -0.000625f, +0.003646f, -0.001970f, - +0.001473f, +0.000312f, -0.000152f, -0.001266f, -0.002025f, -0.001349f - } - }, - { - { - -0.002566f, +0.050243f, -0.021820f, +0.028525f, +0.011430f, +0.001468f, +0.007022f, +0.013800f, -0.002760f, +0.018414f, - -0.017799f, +0.026106f, -0.035899f, +0.001282f, -0.049750f, +0.024153f, +0.004952f, -0.001625f, +0.013911f, -0.028400f, - -0.025181f, -0.025635f, -0.006846f, -0.050474f, -0.016863f, +0.010870f, -0.018228f, -0.009710f, -0.020818f, -0.021245f, - -0.019514f, -0.004513f, -0.001076f, +0.014366f, -0.010333f, +0.017673f, +0.003909f, +0.017552f, -0.012832f, +0.003536f, - -0.005216f, -0.001329f, +0.004082f, -0.004091f, +0.004817f, +0.010463f, -0.001472f, +0.005808f, -0.001428f, +0.003463f, - +0.000282f, -0.003525f, +0.005074f, -0.000375f, +0.001501f, +0.000588f, -0.008256f, -0.001738f, +0.009027f, +0.003663f, - +0.007955f, +0.004412f, -0.001117f, +0.009407f, +0.006994f, +0.001377f, -0.000601f, -0.001357f, -0.000137f, +0.004018f, - +0.001633f, +0.000941f, +0.002567f, +0.005381f, -0.002454f, +0.001953f, +0.003649f, -0.003191f, +0.002459f, +0.000953f, - +0.001047f, -0.002951f, -0.000873f, -0.000338f, +0.002223f, -0.001168f, +0.000037f, +0.000767f, +0.002091f, +0.000296f, - -0.000234f, -0.002239f, -0.000639f, +0.000741f, +0.001091f, -0.000850f - }, - { - +0.031258f, +0.198943f, -0.055473f, -0.004978f, -0.027515f, +0.003763f, -0.005648f, -0.006877f, +0.004195f, -0.016032f, - -0.021589f, -0.029254f, +0.011252f, -0.014059f, +0.015920f, -0.012498f, +0.015912f, +0.003185f, -0.000629f, +0.002111f, - +0.007988f, +0.016625f, -0.004555f, +0.005553f, -0.014049f, +0.018473f, -0.004210f, +0.005625f, +0.014339f, +0.006522f, - -0.012755f, -0.004338f, -0.001764f, -0.010768f, +0.006873f, -0.003716f, -0.004206f, +0.003700f, -0.005152f, -0.009998f, - -0.015643f, -0.013013f, -0.003940f, +0.009851f, -0.017450f, -0.000948f, +0.000208f, +0.011900f, -0.009614f, -0.000424f, - +0.005480f, -0.000687f, -0.001665f, +0.003607f, -0.003998f, -0.010376f, +0.000358f, -0.000352f, -0.001341f, +0.004166f, - -0.005607f, +0.005170f, +0.001371f, -0.000453f, -0.003051f, +0.004055f, -0.002601f, +0.007404f, +0.003659f, -0.000560f, - +0.000994f, +0.001183f, +0.005849f, +0.001101f, +0.003811f, +0.002199f, +0.004931f, +0.000281f, -0.002506f, -0.002770f, - -0.002114f, +0.004608f, +0.000795f, -0.002365f, +0.000317f, +0.002861f, +0.000644f, +0.000528f, -0.001439f, +0.000641f, - +0.001558f, +0.001303f, -0.000141f, +0.001369f, +0.000670f, -0.000965f - }, - { - +0.001699f, +0.046089f, -0.041345f, +0.061538f, +0.007330f, -0.004926f, -0.012212f, -0.000898f, -0.000443f, +0.007311f, - +0.027081f, +0.009992f, -0.005483f, +0.026352f, +0.021770f, -0.002565f, +0.008272f, +0.022312f, +0.029746f, -0.020978f, - +0.020356f, -0.026694f, +0.012265f, -0.007309f, -0.011570f, -0.000646f, -0.016386f, -0.012875f, -0.012317f, -0.011825f, - -0.013146f, +0.024118f, -0.012253f, +0.003473f, -0.012371f, -0.003687f, -0.000084f, +0.007405f, -0.003772f, +0.013768f, - +0.004949f, -0.001357f, +0.009149f, -0.015006f, +0.005012f, +0.014057f, -0.001135f, +0.001564f, +0.000611f, -0.006245f, - +0.009095f, +0.000132f, -0.008078f, -0.004828f, -0.004210f, -0.009455f, +0.000496f, -0.005005f, +0.005948f, -0.004161f, - +0.007787f, -0.007033f, +0.008708f, -0.001439f, +0.000755f, -0.000305f, -0.001130f, +0.000842f, +0.007512f, +0.001413f, - -0.002556f, -0.002037f, -0.001264f, -0.001353f, -0.000618f, -0.003439f, -0.001907f, -0.001310f, -0.001791f, -0.002990f, - -0.001456f, -0.000716f, -0.000634f, -0.000035f, -0.001545f, +0.000349f, +0.002279f, -0.000001f, -0.001116f, +0.000376f, - +0.000120f, -0.000577f, -0.000709f, -0.000618f, +0.002032f, +0.001678f - }, - { - +0.002206f, +0.049686f, +0.005171f, -0.004706f, +0.000055f, -0.000640f, +0.001054f, -0.004375f, +0.002514f, -0.004793f, - -0.008648f, -0.002761f, +0.011035f, -0.008814f, -0.025100f, +0.055083f, +0.037973f, +0.001240f, +0.002888f, +0.005272f, - +0.015055f, +0.029624f, -0.018822f, +0.004228f, -0.001092f, +0.014498f, +0.015840f, -0.039602f, -0.000981f, -0.016882f, - -0.010398f, +0.001517f, -0.009844f, +0.022840f, -0.000173f, -0.018111f, +0.012897f, -0.017202f, -0.002832f, -0.012515f, - -0.000278f, +0.006011f, +0.004881f, +0.012970f, +0.008922f, -0.013004f, -0.018170f, -0.007652f, +0.009280f, -0.008191f, - +0.005372f, -0.002470f, -0.005908f, -0.002611f, -0.000944f, +0.005721f, +0.003272f, +0.002276f, +0.000983f, +0.012590f, - +0.005404f, -0.000047f, -0.002825f, -0.000642f, -0.001849f, +0.005765f, +0.001177f, +0.001677f, +0.000466f, -0.000479f, - +0.005264f, -0.000244f, -0.002695f, +0.001555f, +0.002573f, +0.001559f, -0.001698f, +0.001070f, -0.001582f, -0.001432f, - -0.003298f, +0.000166f, +0.000616f, +0.001584f, -0.000256f, -0.000590f, -0.001196f, -0.002873f, +0.000070f, -0.000132f, - -0.000909f, +0.000979f, -0.001834f, +0.000771f, +0.000026f, -0.002048f - }, - { - +0.082802f, -0.453920f, -0.052884f, +0.032903f, +0.010915f, +0.003417f, -0.000950f, +0.015352f, +0.001570f, -0.009642f, - -0.020646f, -0.008426f, +0.013104f, -0.008035f, -0.010178f, -0.011401f, +0.032779f, +0.018314f, -0.001492f, -0.004101f, - -0.000646f, +0.001192f, -0.038415f, +0.008768f, -0.000426f, -0.001639f, +0.005182f, -0.014514f, -0.028909f, +0.017711f, - +0.018535f, -0.002348f, -0.017394f, -0.002436f, +0.005236f, -0.001011f, +0.010140f, +0.014976f, +0.015728f, +0.015718f, - -0.004432f, -0.005108f, -0.020824f, -0.012388f, +0.004889f, -0.001585f, -0.003633f, -0.006022f, +0.009209f, -0.001272f, - -0.010485f, -0.003515f, +0.004859f, +0.007285f, +0.002892f, -0.007877f, -0.004853f, +0.003672f, -0.007891f, +0.003877f, - +0.000538f, -0.003084f, -0.006010f, -0.002152f, -0.000321f, +0.004286f, +0.002451f, +0.002233f, +0.001687f, -0.000851f, - -0.000122f, -0.002488f, -0.003709f, +0.000979f, -0.008688f, -0.000356f, -0.001173f, -0.002072f, +0.000494f, -0.000807f, - -0.000018f, -0.000481f, -0.000255f, +0.003017f, -0.000827f, -0.003152f, +0.002407f, +0.001222f, -0.002147f, -0.001013f, - +0.002192f, -0.000247f, +0.003126f, -0.001728f, +0.001194f, -0.001510f - }, - { - -0.001211f, +0.011767f, -0.015865f, +0.004095f, -0.002175f, -0.000264f, +0.000167f, -0.003743f, -0.000074f, -0.007224f, - -0.016004f, +0.007629f, +0.003442f, -0.012207f, -0.085480f, -0.030291f, -0.042527f, +0.007336f, +0.001050f, +0.014144f, - +0.006649f, -0.017294f, +0.012156f, -0.016617f, -0.018035f, -0.004598f, -0.005620f, -0.040828f, -0.023829f, -0.036970f, - -0.004837f, +0.019374f, -0.022176f, -0.006600f, -0.002495f, -0.001170f, -0.004192f, +0.005781f, +0.004302f, +0.002909f, - -0.006845f, -0.000873f, +0.001394f, -0.011908f, +0.001089f, -0.007263f, +0.001830f, +0.010187f, +0.001553f, -0.011092f, - +0.001499f, -0.000197f, +0.000850f, -0.007207f, +0.010824f, +0.002556f, -0.011458f, +0.004570f, -0.002615f, +0.007354f, - -0.004185f, -0.000496f, +0.001872f, -0.001345f, -0.002572f, -0.003841f, +0.006188f, +0.001707f, +0.005595f, +0.003035f, - +0.003054f, +0.004094f, -0.004872f, -0.002538f, +0.001791f, -0.005905f, +0.001271f, +0.001067f, +0.000657f, +0.004841f, - -0.001849f, +0.000122f, +0.000799f, -0.000365f, -0.000481f, +0.001678f, -0.001103f, +0.002701f, -0.001811f, -0.000349f, - +0.001470f, +0.001442f, -0.001384f, -0.001096f, +0.002507f, -0.001344f - }, - { - +0.135466f, -0.286606f, -0.088552f, +0.074547f, +0.020597f, -0.000041f, -0.002505f, -0.029607f, +0.000737f, +0.009254f, - -0.004735f, -0.002090f, -0.015279f, -0.011747f, -0.010004f, +0.021745f, +0.013569f, +0.012098f, +0.010462f, +0.003975f, - +0.002587f, -0.012558f, -0.017768f, +0.004486f, -0.001982f, +0.001139f, -0.000595f, +0.012838f, +0.010828f, +0.000983f, - +0.000814f, -0.003899f, -0.010347f, +0.006290f, -0.005118f, -0.009242f, -0.002472f, -0.026311f, -0.001589f, -0.001750f, - +0.004484f, -0.000250f, +0.020851f, +0.003278f, +0.022529f, +0.008881f, +0.000229f, -0.003288f, +0.001900f, +0.003063f, - -0.002302f, +0.013527f, -0.014419f, +0.001365f, +0.011241f, -0.006377f, +0.002927f, -0.002772f, -0.002777f, -0.000552f, - +0.001864f, +0.008657f, +0.001139f, +0.004247f, +0.000376f, +0.003313f, -0.009999f, -0.002908f, -0.003157f, +0.005425f, - +0.005188f, -0.000723f, -0.002211f, -0.003227f, +0.003728f, +0.000074f, +0.000485f, +0.005550f, -0.000013f, +0.001991f, - -0.000693f, +0.000186f, -0.000246f, -0.001640f, -0.000327f, -0.001451f, +0.000743f, +0.000211f, -0.000003f, +0.002191f, - -0.000323f, -0.000455f, +0.001371f, +0.000525f, -0.001208f, +0.000135f - }, - { - -0.002414f, +0.011490f, -0.028637f, +0.003873f, +0.000969f, +0.001238f, +0.001459f, +0.003134f, -0.013109f, +0.003023f, - -0.006935f, +0.009091f, +0.002716f, -0.026839f, -0.031040f, +0.013358f, +0.030399f, +0.004491f, -0.022638f, -0.000253f, - +0.062826f, +0.011166f, +0.045874f, -0.002140f, -0.002421f, +0.018455f, +0.013079f, +0.024082f, -0.026608f, -0.003164f, - +0.016162f, +0.011927f, -0.000648f, +0.037219f, +0.015790f, +0.000455f, +0.001715f, +0.013421f, +0.000240f, +0.012526f, - +0.006067f, -0.017621f, +0.009896f, -0.000535f, +0.009024f, -0.004386f, -0.000605f, +0.011239f, +0.000217f, +0.002500f, - -0.002466f, +0.002436f, -0.010355f, -0.000400f, -0.002353f, +0.004953f, -0.003590f, +0.000817f, -0.002473f, -0.003487f, - -0.001319f, -0.005576f, -0.002300f, +0.004305f, -0.001024f, -0.005828f, +0.002304f, +0.000752f, -0.003471f, +0.001535f, - +0.004792f, -0.001871f, -0.002343f, +0.000561f, -0.001081f, -0.002429f, +0.001250f, +0.001103f, +0.002109f, +0.002668f, - +0.000617f, -0.001707f, +0.003047f, +0.002003f, -0.000503f, -0.002887f, +0.002116f, -0.000876f, +0.001503f, -0.000749f, - -0.000294f, -0.002157f, -0.001293f, -0.000861f, +0.000640f, -0.001171f - }, - { - +0.030096f, -0.756684f, +0.003793f, +0.098305f, +0.025058f, -0.019077f, +0.002018f, -0.003209f, +0.015145f, -0.005568f, - +0.041332f, -0.008948f, +0.023168f, +0.029575f, +0.046400f, -0.029127f, -0.000739f, -0.009932f, -0.005639f, -0.012007f, - -0.003657f, -0.015577f, +0.000007f, +0.011252f, -0.001913f, -0.006464f, -0.006548f, -0.011455f, -0.000878f, +0.002049f, - -0.014646f, -0.012086f, -0.002280f, +0.006883f, -0.018290f, -0.002953f, +0.010487f, -0.005768f, -0.017791f, +0.002817f, - -0.008054f, -0.001948f, -0.002135f, -0.001634f, -0.003537f, -0.001936f, +0.000439f, +0.002270f, -0.000697f, +0.020765f, - +0.013671f, -0.009032f, +0.005923f, -0.007708f, +0.009220f, +0.001798f, +0.003535f, +0.003276f, +0.007288f, +0.004788f, - -0.004505f, -0.001707f, -0.003830f, -0.001555f, +0.002900f, +0.000921f, -0.000942f, -0.000499f, +0.005753f, +0.003055f, - +0.004975f, +0.002011f, -0.004309f, +0.000448f, +0.003406f, -0.001685f, -0.002351f, +0.001952f, -0.001225f, -0.001170f, - -0.001439f, +0.000847f, +0.000268f, +0.001420f, -0.001153f, -0.000409f, +0.000669f, -0.003064f, -0.002659f, +0.001436f, - +0.001467f, -0.000937f, -0.000380f, +0.000306f, -0.002249f, +0.002778f - }, - { - -0.006837f, +0.100197f, +0.015638f, -0.008790f, -0.004280f, -0.013353f, +0.012328f, +0.011263f, -0.007036f, +0.019344f, - -0.027670f, -0.010086f, -0.003162f, -0.019425f, -0.017903f, +0.009061f, +0.002487f, -0.013855f, -0.034001f, +0.022736f, - +0.023883f, -0.021315f, -0.017268f, -0.023111f, -0.019974f, -0.006857f, +0.004658f, -0.005402f, -0.000253f, +0.016251f, - +0.013404f, -0.007935f, -0.006274f, +0.016326f, -0.015162f, -0.001316f, -0.017824f, +0.020789f, -0.004130f, -0.011622f, - -0.003301f, -0.002392f, -0.008529f, +0.012405f, -0.010852f, +0.007662f, +0.000480f, +0.006536f, +0.008694f, -0.001209f, - -0.005843f, -0.007870f, +0.002416f, -0.004406f, +0.000694f, -0.002184f, -0.003417f, -0.002860f, -0.009874f, -0.001979f, - +0.010102f, +0.001850f, -0.007556f, -0.000379f, -0.004435f, +0.004246f, +0.001268f, -0.006149f, +0.001490f, +0.000634f, - +0.011285f, -0.000016f, -0.002008f, +0.003784f, +0.005115f, -0.000288f, -0.000973f, +0.000490f, +0.002703f, +0.000239f, - +0.005629f, -0.002311f, -0.000073f, +0.000409f, -0.001165f, -0.000596f, +0.001168f, +0.001640f, -0.000055f, -0.000378f, - -0.000522f, -0.000066f, +0.000677f, -0.003274f, -0.000004f, +0.000363f - }, - { - +0.044810f, -0.457175f, -0.046238f, +0.012416f, -0.065660f, -0.027118f, -0.084625f, +0.027609f, +0.018007f, -0.002269f, - -0.016419f, +0.010204f, -0.010281f, +0.009962f, -0.051262f, +0.007548f, -0.018027f, +0.001750f, -0.013757f, +0.002932f, - +0.002536f, -0.004233f, -0.019185f, -0.017684f, +0.001916f, -0.015993f, -0.000736f, +0.000444f, -0.009565f, -0.002890f, - -0.000176f, +0.000823f, +0.008088f, +0.000826f, -0.004659f, +0.004710f, -0.004058f, +0.007345f, -0.003298f, +0.009113f, - -0.001658f, -0.008746f, -0.003724f, +0.002164f, -0.003945f, +0.005460f, -0.003665f, +0.003964f, +0.008207f, -0.000847f, - +0.002389f, -0.002888f, -0.001857f, +0.011846f, -0.003870f, +0.006948f, -0.003251f, -0.000119f, +0.008856f, -0.002719f, - +0.003116f, -0.001525f, +0.004958f, -0.000355f, -0.003304f, +0.000657f, -0.002718f, -0.006095f, +0.001833f, -0.006344f, - -0.001948f, +0.003510f, -0.001269f, -0.001211f, +0.003429f, -0.005775f, -0.002970f, +0.000482f, -0.002008f, +0.003699f, - +0.001770f, +0.000074f, +0.000060f, +0.000265f, +0.000764f, +0.002264f, -0.001463f, -0.000357f, -0.000845f, -0.000867f, - +0.000731f, -0.000542f, +0.001263f, +0.001804f, -0.000516f, -0.001019f - }, - { - +0.000143f, +0.103642f, -0.025321f, +0.008449f, +0.002453f, +0.010869f, +0.007456f, -0.012230f, +0.002676f, -0.000584f, - -0.009062f, -0.000907f, +0.005944f, -0.006091f, +0.103717f, -0.016075f, +0.003398f, +0.011214f, +0.062450f, +0.024976f, - +0.036583f, +0.011122f, -0.012154f, -0.008832f, -0.009057f, +0.010210f, +0.047890f, +0.038143f, +0.028253f, -0.001482f, - +0.015642f, -0.001586f, -0.001110f, -0.003873f, +0.005410f, -0.000353f, -0.003712f, -0.003058f, +0.008949f, -0.001069f, - -0.006177f, -0.006172f, +0.001678f, +0.011696f, +0.001994f, +0.013332f, +0.001724f, -0.005706f, -0.003038f, -0.002686f, - -0.000285f, +0.010057f, -0.010650f, +0.002161f, +0.001734f, +0.009938f, +0.004900f, -0.005264f, +0.011487f, +0.000297f, - -0.000320f, -0.004790f, +0.009832f, +0.001887f, -0.003241f, -0.007036f, +0.008908f, -0.000440f, +0.001438f, -0.003497f, - +0.003046f, -0.001134f, -0.002980f, +0.007936f, -0.001690f, -0.005456f, -0.001542f, +0.002581f, +0.000193f, -0.000543f, - -0.000337f, +0.000882f, -0.002509f, +0.001199f, +0.000662f, -0.001834f, -0.002972f, +0.000508f, +0.000065f, -0.000404f, - -0.001277f, +0.000175f, +0.001454f, +0.002669f, -0.001925f, +0.001758f - }, - { - -0.102240f, +0.178404f, +0.009384f, +0.037071f, -0.042003f, -0.053038f, -0.038522f, +0.015559f, -0.008132f, -0.031862f, - -0.000791f, -0.022061f, +0.006735f, +0.014676f, +0.004035f, +0.032810f, +0.009194f, +0.037452f, -0.015657f, -0.030978f, - +0.013519f, -0.029273f, +0.009601f, +0.037707f, +0.017124f, +0.003018f, +0.009459f, +0.003294f, +0.004291f, -0.001461f, - -0.009484f, +0.001030f, -0.012199f, +0.017549f, -0.009723f, -0.001832f, +0.012389f, -0.011744f, +0.007813f, -0.004740f, - -0.007472f, +0.000431f, +0.024211f, -0.003262f, +0.018780f, +0.004339f, +0.011561f, +0.001434f, -0.011228f, +0.003002f, - +0.001294f, +0.000563f, -0.007817f, +0.012284f, -0.015239f, +0.003604f, -0.001741f, +0.009620f, +0.003444f, -0.007610f, - +0.005472f, -0.001438f, -0.001129f, +0.005220f, +0.008127f, +0.002859f, -0.002220f, -0.000694f, -0.004254f, -0.001943f, - +0.005471f, +0.000660f, +0.002961f, -0.002546f, -0.001211f, -0.003351f, +0.002392f, -0.001274f, -0.001195f, -0.005403f, - +0.002368f, -0.005484f, +0.000061f, -0.003470f, -0.002897f, +0.004998f, +0.000909f, -0.001036f, +0.002990f, +0.000633f, - -0.000450f, +0.001794f, -0.002609f, +0.000810f, +0.000828f, -0.000243f - }, - { - +0.014007f, +0.001358f, -0.017224f, -0.006907f, -0.000741f, +0.017389f, -0.006311f, -0.006026f, +0.022825f, +0.008117f, - +0.015087f, +0.016722f, +0.011293f, -0.079573f, +0.059795f, +0.001982f, +0.021214f, -0.042106f, -0.024712f, +0.036131f, - -0.045632f, -0.028133f, -0.027315f, -0.025567f, -0.031156f, -0.027280f, -0.016821f, -0.004161f, -0.007663f, +0.003169f, - +0.005550f, -0.000622f, -0.003748f, +0.008608f, -0.010053f, +0.015970f, -0.003767f, -0.001327f, -0.002075f, +0.002441f, - -0.002816f, +0.000985f, -0.002862f, -0.010135f, -0.005685f, +0.017079f, -0.009598f, -0.009905f, -0.003190f, +0.006350f, - -0.009888f, +0.004487f, -0.009065f, +0.005098f, -0.005053f, -0.009718f, -0.006364f, +0.001599f, +0.006903f, -0.002046f, - +0.011840f, -0.005168f, -0.002075f, +0.000486f, +0.001510f, -0.001235f, -0.003964f, -0.001025f, +0.007198f, +0.002742f, - +0.001876f, -0.001092f, -0.000247f, +0.003040f, -0.002088f, +0.001835f, +0.000816f, -0.001141f, -0.001654f, +0.002684f, - -0.000599f, +0.000049f, +0.001992f, +0.001816f, +0.002364f, -0.000081f, +0.001797f, +0.000241f, -0.000343f, -0.001162f, - -0.000133f, -0.001165f, +0.000613f, +0.001492f, +0.000361f, +0.000885f - }, - { - -0.026863f, +0.267019f, -0.007253f, -0.026440f, -0.016721f, -0.042033f, +0.005724f, +0.011531f, +0.016174f, +0.019304f, - +0.018373f, +0.015521f, +0.010542f, +0.000602f, -0.002324f, +0.009619f, +0.026572f, -0.013445f, +0.009067f, +0.002869f, - +0.007030f, +0.002269f, -0.012469f, -0.040826f, -0.001922f, -0.036457f, +0.011197f, -0.001609f, -0.009053f, +0.036148f, - +0.005735f, +0.002062f, -0.008086f, +0.000785f, +0.008595f, -0.007683f, +0.002230f, -0.039093f, +0.008659f, -0.004256f, - -0.009528f, +0.019464f, -0.000867f, +0.027495f, +0.002874f, +0.001394f, +0.002872f, +0.004683f, +0.028058f, +0.001142f, - -0.005345f, -0.003791f, -0.003238f, +0.001695f, +0.005777f, +0.001841f, +0.004008f, +0.006752f, +0.008641f, +0.002499f, - -0.006038f, +0.002068f, -0.000014f, +0.003126f, -0.002057f, -0.004697f, -0.004324f, -0.006892f, +0.001780f, +0.002672f, - +0.001053f, -0.000093f, +0.001736f, +0.002660f, +0.000768f, +0.001208f, -0.001096f, +0.002788f, +0.000172f, -0.000114f, - -0.006319f, -0.001127f, +0.003213f, -0.002819f, +0.002894f, +0.001586f, -0.001146f, +0.000523f, +0.003119f, -0.003745f, - +0.000108f, +0.000308f, +0.002678f, -0.000304f, -0.002047f, +0.002376f - } - }, - { - { - +0.001090f, -0.000145f, +0.017223f, +0.022689f, +0.018861f, -0.001296f, +0.005542f, +0.007892f, +0.000819f, +0.024043f, - -0.007943f, -0.001847f, -0.006862f, +0.005547f, -0.060703f, +0.021444f, +0.019947f, +0.006207f, -0.015488f, -0.035263f, - +0.011014f, -0.036235f, -0.006885f, -0.039403f, -0.009230f, -0.017401f, -0.010102f, -0.006859f, -0.009599f, -0.031509f, - -0.013789f, +0.002451f, -0.010511f, +0.023219f, +0.000143f, +0.014437f, -0.002177f, -0.005409f, +0.004541f, +0.005464f, - -0.001719f, -0.005539f, +0.003181f, +0.002822f, +0.009724f, -0.006381f, +0.003008f, +0.011714f, +0.004961f, +0.004380f, - -0.006699f, -0.006750f, +0.003884f, +0.000169f, +0.005836f, -0.004107f, -0.005954f, +0.001288f, +0.003691f, +0.004222f, - +0.006932f, +0.007028f, -0.000917f, +0.007131f, +0.005345f, -0.000976f, +0.002377f, -0.001542f, -0.001664f, +0.002650f, - +0.002947f, +0.003712f, -0.000046f, +0.004271f, -0.001308f, +0.002985f, +0.002241f, -0.002923f, +0.001265f, +0.000035f, - +0.000975f, -0.001925f, +0.000007f, +0.001054f, -0.001444f, -0.001349f, +0.001275f, +0.001303f, +0.000594f, +0.001799f, - -0.001102f, -0.000179f, -0.001351f, +0.000447f, -0.000119f, +0.000865f - }, - { - -0.022173f, +0.025248f, +0.131878f, -0.056540f, +0.020122f, +0.005370f, -0.016235f, +0.010738f, +0.001449f, -0.025767f, - -0.018149f, -0.009676f, -0.000737f, -0.008034f, -0.003081f, +0.020345f, +0.006522f, +0.007683f, -0.003048f, -0.010225f, - +0.021333f, +0.023394f, -0.013642f, +0.001035f, -0.004131f, +0.010784f, +0.002081f, +0.014875f, +0.006482f, +0.008378f, - -0.016074f, -0.002438f, -0.014397f, +0.003971f, +0.006925f, -0.013052f, -0.003780f, +0.003338f, -0.010391f, -0.014480f, - -0.002015f, -0.018035f, +0.001825f, +0.002805f, -0.012695f, -0.005964f, -0.000972f, +0.005089f, +0.005908f, -0.002346f, - +0.002810f, -0.001476f, -0.009970f, +0.001503f, -0.001748f, -0.002323f, -0.003740f, -0.001987f, -0.003430f, -0.001024f, - -0.002053f, -0.000127f, +0.000546f, -0.000106f, +0.002337f, +0.000413f, +0.002288f, +0.005382f, -0.000578f, +0.005478f, - +0.001152f, -0.000610f, +0.005649f, +0.000549f, +0.004391f, +0.001736f, +0.002858f, -0.000705f, -0.001735f, -0.000909f, - -0.001735f, +0.004945f, -0.001318f, -0.001666f, +0.001817f, +0.001442f, +0.001541f, -0.000982f, -0.000841f, +0.000528f, - +0.000066f, +0.002102f, +0.001350f, -0.000681f, +0.000389f, -0.000038f - }, - { - -0.003162f, -0.044611f, +0.027444f, +0.047538f, +0.022697f, -0.007732f, -0.005458f, -0.001687f, +0.004251f, +0.012358f, - +0.019897f, +0.014753f, -0.002282f, +0.026637f, +0.022343f, +0.006653f, +0.016402f, +0.015047f, +0.012665f, +0.016703f, - -0.006744f, +0.006602f, -0.001089f, -0.006215f, -0.002779f, -0.014820f, -0.017730f, -0.017221f, +0.002263f, -0.007287f, - -0.010883f, +0.008962f, -0.010028f, -0.003419f, +0.003048f, -0.003834f, -0.008795f, +0.013024f, -0.015297f, +0.019540f, - +0.006545f, -0.003532f, -0.002499f, -0.008214f, +0.009870f, +0.003844f, +0.000583f, +0.005892f, -0.002232f, -0.002082f, - +0.001093f, +0.003055f, -0.002355f, -0.006217f, -0.011099f, -0.003417f, -0.002592f, +0.001138f, -0.000945f, +0.001763f, - -0.000664f, +0.004964f, -0.001523f, +0.001136f, +0.000422f, +0.002349f, -0.000936f, -0.000256f, +0.006953f, -0.000514f, - -0.003348f, -0.000819f, -0.001247f, -0.002014f, -0.005383f, +0.000730f, -0.000521f, -0.000640f, -0.003017f, -0.001418f, - -0.001144f, -0.001572f, -0.001194f, -0.001238f, +0.000987f, -0.001287f, +0.001774f, +0.001992f, -0.001359f, -0.000142f, - -0.000261f, +0.000394f, -0.001907f, +0.000325f, +0.001217f, +0.001740f - }, - { - -0.002259f, +0.050317f, +0.013464f, -0.011939f, +0.001096f, +0.001547f, -0.002754f, +0.001394f, -0.001213f, -0.008894f, - +0.002029f, -0.008623f, +0.006131f, +0.022178f, +0.025755f, -0.012527f, +0.060542f, +0.009431f, +0.007303f, +0.003244f, - +0.007555f, +0.027813f, -0.014321f, +0.002407f, -0.014688f, +0.013505f, +0.032159f, -0.022726f, -0.029261f, -0.002766f, - +0.004121f, -0.015853f, -0.020522f, +0.015386f, +0.007365f, -0.000877f, +0.008270f, -0.008386f, -0.022362f, -0.006329f, - -0.000447f, +0.008629f, +0.007359f, +0.012500f, +0.007551f, -0.011214f, -0.019056f, -0.005241f, -0.000156f, -0.001507f, - -0.003584f, -0.000569f, +0.000367f, -0.004354f, -0.004113f, +0.005547f, +0.003665f, +0.004986f, +0.006064f, +0.005012f, - +0.008906f, -0.000645f, -0.005423f, -0.002375f, +0.001708f, +0.002581f, +0.004249f, -0.000107f, +0.001156f, -0.000046f, - +0.003903f, +0.000210f, -0.000064f, -0.001579f, +0.004319f, +0.001129f, -0.001557f, -0.001302f, -0.002659f, -0.000213f, - -0.002061f, -0.001379f, +0.001126f, +0.001065f, +0.000002f, -0.001789f, +0.001064f, -0.002343f, -0.001686f, -0.001504f, - +0.000524f, +0.000081f, -0.000255f, -0.000616f, -0.000706f, -0.001782f - }, - { - -0.090268f, -0.320500f, +0.028018f, +0.052461f, +0.002112f, +0.005245f, -0.003617f, +0.017524f, -0.001101f, -0.015416f, - -0.009287f, -0.030441f, +0.025994f, -0.001066f, -0.026583f, +0.011735f, +0.012423f, +0.002672f, +0.032519f, -0.001537f, - +0.004176f, -0.026530f, -0.023219f, +0.011595f, -0.001786f, +0.015529f, +0.009333f, -0.006598f, -0.039617f, +0.005942f, - +0.001055f, +0.003966f, -0.000654f, -0.009419f, -0.004321f, +0.007278f, +0.031453f, +0.007672f, +0.020650f, -0.007717f, - +0.010699f, -0.004924f, -0.013393f, -0.016812f, +0.006957f, +0.006474f, -0.014006f, -0.003282f, +0.009902f, -0.010859f, - -0.008841f, +0.000251f, -0.003942f, +0.011112f, -0.001859f, -0.003128f, -0.000983f, -0.006547f, +0.001681f, +0.003992f, - -0.007144f, +0.003092f, -0.007098f, -0.001964f, -0.000607f, +0.005144f, +0.001398f, +0.002350f, +0.001234f, +0.002473f, - -0.004459f, +0.000064f, -0.003589f, +0.000451f, -0.002720f, -0.002360f, -0.001625f, -0.000615f, -0.001192f, -0.000831f, - -0.001653f, +0.001063f, -0.001003f, +0.002989f, -0.001258f, -0.002981f, +0.003414f, +0.000485f, +0.000781f, -0.000423f, - -0.000449f, -0.000065f, +0.001862f, +0.001309f, +0.000080f, +0.000282f - }, - { - +0.000174f, -0.012842f, -0.007852f, -0.000811f, +0.006343f, +0.000195f, -0.001044f, -0.006758f, +0.000436f, -0.013936f, - -0.001099f, +0.001841f, +0.004941f, +0.015788f, -0.059478f, -0.051365f, -0.047004f, -0.002305f, +0.015771f, +0.001984f, - +0.007924f, -0.006523f, -0.000537f, -0.030475f, -0.008962f, +0.044362f, -0.038696f, -0.031227f, -0.012446f, -0.040590f, - -0.010480f, -0.004303f, +0.001847f, -0.007218f, -0.025880f, +0.013483f, +0.004304f, +0.001775f, -0.003831f, +0.003776f, - +0.003031f, -0.002470f, -0.007829f, -0.011313f, -0.005909f, +0.001636f, -0.002080f, +0.006524f, -0.006334f, +0.002913f, - +0.006529f, +0.000199f, -0.006557f, -0.000948f, +0.006445f, -0.002668f, -0.005596f, -0.000107f, -0.000298f, +0.007665f, - -0.000690f, -0.000062f, -0.002213f, -0.000828f, +0.001346f, -0.001784f, +0.000052f, +0.004633f, +0.004473f, +0.003549f, - +0.002663f, +0.002240f, -0.001724f, -0.001170f, +0.002066f, -0.003568f, -0.001119f, +0.000153f, +0.001240f, +0.002141f, - +0.000757f, -0.003528f, +0.001960f, -0.000298f, -0.000511f, +0.002527f, +0.000593f, +0.001154f, -0.001982f, +0.000839f, - +0.000899f, -0.000615f, -0.000243f, +0.000170f, +0.000426f, +0.000008f - }, - { - -0.115399f, -0.108737f, +0.053038f, +0.112358f, -0.013290f, -0.007991f, -0.007916f, -0.011059f, -0.009773f, -0.017109f, - +0.006479f, -0.006422f, -0.004511f, -0.004099f, +0.012644f, -0.006608f, +0.014068f, +0.019191f, +0.002344f, +0.011125f, - +0.002116f, -0.014674f, -0.003166f, -0.011336f, -0.000850f, +0.000174f, +0.007354f, -0.001870f, +0.011220f, +0.010504f, - +0.003152f, -0.009372f, -0.013707f, +0.014970f, -0.006729f, -0.015459f, -0.011038f, -0.024688f, +0.002874f, +0.004571f, - -0.004174f, +0.013832f, +0.004842f, +0.019279f, +0.017196f, -0.001530f, +0.007852f, -0.003354f, +0.004658f, +0.000249f, - -0.002173f, +0.007727f, +0.000063f, -0.002494f, +0.007167f, -0.003540f, +0.001678f, -0.002793f, -0.001951f, -0.003955f, - +0.001079f, +0.007604f, +0.004088f, -0.000592f, +0.000942f, -0.000060f, -0.006626f, -0.005798f, +0.001592f, +0.003874f, - +0.002732f, +0.001184f, -0.001950f, -0.002160f, +0.000571f, +0.001056f, +0.001060f, +0.003039f, +0.000372f, +0.001147f, - -0.000624f, +0.001626f, -0.001910f, -0.001762f, +0.000873f, -0.003041f, +0.000040f, +0.001474f, -0.000031f, +0.002429f, - -0.000761f, +0.000697f, +0.000721f, -0.000633f, -0.000376f, -0.002077f - }, - { - +0.000741f, -0.028466f, -0.001238f, -0.003229f, +0.003752f, +0.001823f, -0.000351f, -0.001030f, -0.007462f, -0.000076f, - +0.002538f, +0.003037f, -0.018011f, +0.003245f, -0.027633f, -0.006072f, +0.044640f, +0.004728f, -0.024883f, +0.026601f, - +0.033719f, +0.037412f, +0.019676f, +0.006871f, +0.016744f, +0.018585f, +0.025370f, -0.004697f, -0.023200f, +0.025191f, - +0.004128f, -0.003274f, +0.019779f, +0.030963f, +0.028338f, -0.008506f, +0.011968f, -0.002178f, +0.018157f, +0.007991f, - -0.012858f, +0.000011f, -0.011418f, +0.002657f, +0.010700f, +0.003908f, +0.000207f, -0.004530f, +0.015856f, -0.004105f, - -0.002010f, -0.006835f, -0.000722f, +0.000499f, -0.005828f, -0.000308f, -0.000857f, -0.002835f, -0.000679f, +0.001128f, - -0.002391f, -0.007355f, +0.000760f, -0.000831f, -0.001871f, -0.003905f, +0.006804f, -0.003897f, -0.003518f, +0.004202f, - +0.001255f, -0.000367f, -0.001815f, +0.001045f, -0.002317f, +0.000284f, +0.001515f, +0.001404f, -0.000056f, +0.003279f, - +0.001485f, +0.000115f, +0.001327f, +0.000650f, +0.001170f, -0.002626f, -0.000179f, +0.001989f, +0.000797f, -0.000033f, - -0.001907f, -0.001659f, -0.001306f, +0.000163f, +0.000550f, +0.000296f - }, - { - -0.072011f, -0.607115f, -0.002239f, +0.141530f, -0.018108f, -0.011547f, -0.011573f, -0.005336f, +0.027739f, -0.014286f, - +0.011060f, +0.044263f, +0.020171f, +0.026523f, +0.031534f, +0.005229f, -0.026441f, -0.006540f, -0.002765f, -0.005561f, - -0.017140f, -0.008509f, +0.004914f, +0.003549f, -0.004437f, -0.000113f, -0.001591f, -0.014994f, -0.003586f, -0.003185f, - -0.009489f, -0.022089f, +0.011149f, -0.014260f, -0.004543f, +0.005141f, +0.001703f, -0.012245f, +0.004163f, +0.002924f, - -0.003093f, -0.017375f, +0.002487f, -0.005043f, +0.001687f, +0.007336f, -0.005035f, -0.002373f, +0.002389f, +0.016359f, - +0.012611f, +0.002366f, +0.002239f, +0.000330f, -0.003687f, +0.004406f, +0.002650f, +0.001299f, +0.007186f, +0.005851f, - -0.003430f, -0.003132f, -0.003923f, +0.001558f, +0.001503f, -0.001105f, +0.000044f, +0.000948f, +0.001296f, +0.005994f, - +0.004546f, +0.001255f, -0.002020f, +0.001470f, +0.000659f, -0.001576f, -0.000582f, -0.001985f, -0.000614f, +0.001064f, - -0.000690f, -0.001577f, +0.000294f, +0.001261f, -0.001211f, +0.000971f, -0.000226f, -0.001675f, -0.001907f, +0.000240f, - -0.000024f, +0.000087f, -0.000550f, +0.001574f, -0.002079f, +0.000913f - }, - { - +0.005702f, +0.109048f, -0.009820f, -0.000394f, +0.005140f, -0.011743f, +0.004400f, -0.000390f, +0.002939f, +0.007039f, - -0.002551f, -0.015469f, -0.024446f, +0.028287f, -0.015153f, -0.014347f, +0.014845f, -0.013157f, -0.049812f, +0.010152f, - +0.029972f, -0.012390f, -0.013313f, -0.025027f, -0.016890f, -0.002136f, -0.002305f, +0.007692f, -0.003259f, +0.025185f, - -0.001519f, +0.001538f, -0.024070f, +0.007343f, -0.007468f, -0.003322f, -0.001225f, +0.003760f, -0.002482f, -0.014236f, - -0.004008f, +0.007065f, -0.001708f, -0.004152f, +0.000701f, +0.005060f, +0.000536f, +0.001181f, +0.008774f, -0.004931f, - -0.008260f, -0.006038f, +0.001194f, -0.003071f, +0.002607f, +0.000888f, -0.003058f, -0.003949f, -0.008393f, -0.003691f, - +0.001699f, +0.006540f, -0.008889f, -0.000023f, -0.001570f, +0.002623f, +0.001855f, +0.000514f, -0.006013f, +0.002574f, - +0.003865f, +0.006278f, +0.001867f, +0.005112f, -0.000545f, +0.000330f, +0.002307f, -0.002702f, +0.002637f, +0.002495f, - +0.002692f, +0.000154f, -0.000667f, -0.002864f, -0.001064f, +0.001881f, +0.001978f, +0.000524f, +0.000447f, +0.000129f, - -0.000905f, +0.000359f, -0.001504f, -0.001097f, -0.001107f, +0.000445f - }, - { - -0.046422f, -0.391819f, -0.004579f, -0.023413f, -0.006498f, -0.064752f, -0.059842f, +0.008923f, +0.023036f, -0.004494f, - -0.005132f, +0.013029f, -0.020142f, -0.010873f, -0.026070f, +0.001911f, -0.013405f, -0.020704f, -0.005670f, -0.022589f, - +0.017177f, -0.000556f, -0.011674f, -0.016749f, -0.002939f, -0.013905f, +0.012045f, -0.010702f, -0.013221f, +0.001415f, - -0.006024f, +0.000389f, +0.007459f, -0.003912f, +0.003151f, +0.001156f, +0.008334f, -0.011240f, +0.009148f, +0.007165f, - -0.009648f, -0.002113f, +0.002192f, +0.006641f, -0.003272f, -0.002267f, +0.002392f, +0.004453f, -0.002170f, +0.008362f, - +0.004844f, -0.005419f, -0.000968f, +0.004221f, -0.002803f, +0.009620f, -0.001799f, +0.003958f, +0.002264f, +0.003387f, - +0.002594f, -0.000329f, +0.000557f, -0.004609f, +0.002737f, -0.002310f, +0.001021f, -0.005412f, -0.001950f, -0.002193f, - -0.001221f, +0.000836f, -0.000801f, -0.001461f, +0.000546f, -0.002362f, -0.006341f, +0.001728f, -0.001402f, +0.003640f, - +0.000914f, +0.000113f, +0.001790f, -0.000343f, -0.000248f, +0.001868f, -0.002554f, +0.001060f, -0.001173f, -0.000376f, - -0.000244f, +0.000117f, +0.000615f, +0.001532f, -0.000138f, -0.001839f - }, - { - -0.001991f, +0.075447f, +0.012579f, -0.005080f, -0.007067f, +0.007712f, +0.018684f, -0.004375f, +0.000435f, -0.002134f, - -0.016013f, -0.001403f, -0.013197f, +0.032941f, +0.053745f, +0.046319f, -0.018006f, -0.000723f, +0.067390f, +0.035491f, - -0.005135f, +0.064100f, -0.015165f, -0.018207f, -0.015462f, +0.031383f, +0.046301f, +0.015277f, +0.049677f, -0.007092f, - +0.002588f, +0.006274f, -0.009056f, +0.009000f, +0.002028f, -0.000639f, +0.001935f, -0.000731f, -0.012231f, +0.002575f, - -0.006874f, -0.007917f, +0.006999f, +0.004887f, -0.002644f, +0.015333f, +0.004754f, -0.002573f, -0.009534f, -0.009183f, - +0.010872f, +0.002476f, -0.002483f, +0.000031f, +0.001363f, +0.009502f, -0.002870f, +0.008500f, +0.002720f, +0.000656f, - +0.006240f, -0.004357f, +0.002430f, +0.002613f, +0.003364f, -0.002914f, +0.005222f, +0.000945f, -0.002461f, +0.002577f, - -0.002461f, -0.002945f, +0.001530f, +0.001106f, +0.000282f, -0.001289f, +0.000175f, -0.001672f, -0.001975f, -0.000141f, - +0.002723f, -0.001952f, -0.003565f, +0.002085f, +0.000926f, -0.001786f, -0.002247f, +0.001548f, -0.000897f, +0.000924f, - +0.000449f, -0.000124f, +0.001071f, -0.000251f, +0.001809f, -0.000360f - }, - { - +0.107916f, -0.042160f, +0.004942f, -0.004232f, -0.013006f, -0.057321f, -0.030897f, -0.000314f, -0.010707f, -0.004440f, - -0.015135f, -0.019801f, -0.003266f, +0.025887f, +0.029602f, -0.003698f, +0.029484f, +0.007040f, -0.006165f, -0.018615f, - -0.014189f, -0.008266f, +0.017920f, +0.036480f, +0.007238f, -0.001403f, +0.010022f, -0.008021f, +0.018076f, -0.005478f, - +0.004939f, -0.011768f, +0.003807f, -0.004593f, -0.000235f, +0.002713f, +0.001889f, -0.001408f, +0.006729f, -0.002787f, - -0.009407f, +0.006458f, +0.018245f, +0.001645f, +0.012086f, +0.013313f, -0.002738f, -0.003744f, -0.001240f, +0.009840f, - -0.002127f, +0.000459f, +0.007426f, -0.000658f, -0.005192f, -0.004669f, -0.003274f, -0.000751f, +0.009420f, -0.002270f, - +0.003805f, -0.002872f, -0.001899f, +0.006189f, +0.003912f, -0.001633f, +0.002898f, +0.000760f, -0.004077f, -0.005995f, - +0.004285f, +0.005965f, -0.002462f, -0.000309f, -0.000328f, -0.002451f, +0.001040f, +0.000890f, -0.004023f, -0.003025f, - -0.002233f, -0.000149f, -0.002810f, -0.003337f, -0.001976f, +0.001121f, +0.002480f, +0.002267f, +0.000329f, -0.000514f, - +0.000306f, +0.002329f, -0.001795f, -0.000694f, +0.000851f, -0.000677f - }, - { - -0.013656f, -0.007875f, +0.011505f, -0.005394f, +0.003642f, -0.002143f, +0.009829f, -0.001907f, +0.015279f, +0.022374f, - +0.010994f, +0.018978f, +0.004239f, -0.023702f, +0.009652f, -0.019377f, +0.012756f, -0.028615f, -0.008035f, -0.032172f, - -0.013061f, -0.052718f, -0.006828f, -0.029544f, -0.008681f, -0.039387f, -0.022396f, -0.012205f, +0.010415f, +0.004279f, - +0.006651f, +0.006752f, +0.002510f, +0.002058f, +0.004517f, -0.001977f, +0.010168f, -0.010812f, +0.002766f, +0.009517f, - -0.008136f, +0.005820f, -0.017618f, -0.005776f, +0.002421f, +0.016685f, -0.007636f, -0.016996f, +0.001023f, +0.002509f, - -0.001499f, -0.003035f, -0.002778f, -0.006161f, -0.000588f, -0.010276f, -0.000488f, +0.004769f, -0.000879f, +0.004797f, - +0.005732f, -0.004303f, -0.007409f, +0.001048f, +0.002877f, -0.004671f, +0.004494f, +0.000605f, -0.000031f, +0.002867f, - -0.001532f, -0.001119f, +0.001447f, +0.006421f, -0.001050f, -0.004883f, +0.003897f, +0.002317f, -0.000919f, +0.001444f, - -0.001830f, +0.001003f, +0.000793f, +0.002543f, +0.001365f, +0.001628f, +0.001453f, +0.000958f, +0.001671f, -0.002046f, - -0.002817f, -0.000820f, +0.000147f, +0.001118f, +0.000546f, +0.000589f - }, - { - +0.059105f, +0.186549f, -0.003387f, -0.021234f, -0.024502f, -0.029342f, -0.014941f, +0.012507f, +0.017957f, +0.010749f, - -0.001049f, +0.029258f, +0.006138f, +0.003755f, -0.018383f, +0.023020f, -0.009883f, -0.012306f, +0.011030f, +0.020862f, - +0.017261f, -0.007318f, -0.017312f, -0.024798f, -0.009080f, -0.032841f, +0.009506f, +0.002015f, +0.007781f, +0.011220f, - +0.010578f, +0.003330f, -0.000479f, -0.011398f, +0.010666f, -0.011372f, +0.000447f, -0.016262f, -0.010031f, +0.000110f, - +0.000221f, +0.011544f, +0.020280f, +0.012577f, +0.000929f, +0.002287f, +0.006463f, +0.011404f, +0.013603f, +0.007451f, - -0.009485f, -0.001166f, -0.003341f, +0.006312f, +0.002068f, +0.000303f, +0.003949f, +0.007201f, +0.005966f, +0.005742f, - -0.001038f, -0.001337f, -0.002502f, +0.002299f, -0.000517f, -0.002729f, -0.002216f, -0.004847f, -0.003149f, +0.002621f, - +0.001916f, -0.001599f, +0.002963f, +0.002554f, -0.000153f, +0.003541f, +0.001023f, -0.000481f, -0.000318f, -0.001721f, - -0.001825f, -0.000659f, +0.001150f, -0.000314f, +0.001004f, +0.002380f, -0.002139f, +0.000802f, +0.000899f, -0.000539f, - -0.003552f, +0.000966f, +0.002977f, +0.000626f, -0.001655f, +0.002856f - } - }, - { - { - +0.000375f, -0.024613f, +0.004998f, -0.009052f, -0.008551f, +0.000547f, -0.001436f, +0.000878f, -0.000840f, +0.024249f, - +0.000716f, +0.006428f, +0.018128f, +0.014194f, -0.040790f, +0.001038f, -0.026294f, +0.001754f, -0.002233f, +0.006768f, - +0.039594f, -0.019635f, +0.015790f, -0.035311f, -0.009525f, -0.008060f, +0.018058f, +0.014282f, +0.015879f, +0.001521f, - +0.001370f, +0.008148f, -0.018325f, +0.009780f, -0.003435f, +0.011062f, -0.010527f, -0.013900f, +0.006262f, +0.008021f, - +0.006420f, -0.004429f, -0.005687f, +0.003113f, +0.014647f, -0.007101f, -0.002722f, +0.010097f, +0.003785f, +0.004690f, - +0.004805f, -0.001388f, +0.002837f, +0.001121f, +0.003518f, -0.003379f, +0.000608f, +0.000538f, -0.000897f, +0.000988f, - +0.000540f, +0.003665f, -0.003365f, -0.000413f, +0.001455f, +0.000355f, +0.002936f, +0.001190f, +0.002214f, +0.000399f, - -0.001067f, +0.001781f, -0.001969f, +0.004132f, +0.000418f, +0.002556f, +0.001050f, -0.001266f, +0.000954f, -0.001109f, - +0.000762f, -0.000962f, +0.000970f, +0.000987f, +0.000260f, +0.000267f, +0.001015f, +0.001138f, -0.000446f, +0.000602f, - -0.001416f, +0.000481f, -0.000939f, +0.000807f, -0.000209f, +0.001145f - }, - { - +0.018257f, -0.154483f, -0.037326f, -0.056208f, +0.008325f, -0.004541f, -0.005895f, -0.002269f, -0.011291f, +0.004673f, - -0.002653f, -0.008859f, +0.007506f, +0.000193f, -0.008183f, +0.018135f, -0.009332f, -0.001952f, -0.002145f, -0.014121f, - +0.011679f, +0.014946f, -0.007173f, -0.008708f, -0.017489f, +0.001663f, -0.003309f, +0.013409f, -0.000323f, +0.003077f, - -0.003124f, +0.006461f, -0.009600f, +0.002349f, +0.002160f, -0.010505f, -0.010148f, -0.001811f, -0.005746f, -0.005741f, - +0.007568f, -0.007997f, +0.007609f, +0.005209f, +0.000098f, -0.000026f, -0.003033f, -0.005999f, +0.000489f, -0.005343f, - -0.000693f, +0.001165f, -0.004477f, +0.004704f, -0.000259f, +0.001589f, +0.002509f, +0.000245f, -0.003827f, +0.000448f, - +0.000361f, -0.001557f, -0.001524f, +0.001726f, +0.004066f, -0.000894f, +0.001952f, +0.005744f, -0.000284f, +0.003295f, - -0.000425f, -0.001691f, +0.002489f, -0.001121f, +0.001417f, -0.001585f, +0.000221f, -0.001389f, +0.000079f, +0.002308f, - -0.001272f, +0.001033f, -0.002030f, -0.001174f, +0.001309f, -0.000016f, +0.001487f, -0.001642f, -0.001953f, +0.000275f, - +0.000123f, +0.001296f, +0.000962f, -0.001841f, -0.000438f, -0.000032f - }, - { - +0.003799f, -0.072499f, -0.017891f, -0.013674f, -0.006035f, +0.002199f, +0.001979f, +0.000769f, +0.000404f, -0.013662f, - +0.004383f, +0.023948f, -0.020746f, +0.000246f, +0.019845f, +0.002217f, +0.004105f, -0.001113f, -0.014758f, +0.010569f, - -0.005110f, +0.010514f, +0.012533f, +0.011196f, +0.009878f, +0.000651f, -0.001346f, -0.009327f, +0.001259f, -0.004251f, - -0.001148f, +0.001512f, -0.016069f, -0.005010f, +0.006262f, +0.002145f, -0.007571f, +0.010826f, -0.016208f, +0.006283f, - -0.000574f, +0.002520f, +0.003929f, -0.002487f, +0.006908f, +0.001204f, +0.000838f, +0.004078f, -0.002232f, -0.000191f, - +0.000516f, +0.001671f, -0.000547f, -0.002520f, -0.003070f, +0.003676f, -0.000125f, +0.007070f, +0.001648f, +0.000695f, - -0.004226f, +0.005402f, -0.003793f, +0.000198f, -0.001103f, +0.001615f, -0.000822f, -0.002638f, +0.002292f, -0.000942f, - -0.001451f, -0.000984f, -0.000679f, +0.001653f, -0.001979f, +0.000436f, -0.000400f, +0.003118f, +0.000100f, +0.001608f, - +0.000955f, +0.000327f, +0.000580f, -0.001746f, +0.000951f, -0.000748f, -0.000756f, +0.000303f, -0.001121f, -0.000300f, - +0.000582f, +0.001521f, -0.001644f, -0.000758f, -0.000343f, +0.000885f - }, - { - +0.002276f, +0.032537f, -0.006922f, -0.009229f, +0.002432f, +0.000565f, -0.003053f, +0.003000f, +0.000701f, -0.005204f, - +0.002790f, -0.011888f, -0.001405f, +0.013159f, +0.060506f, +0.001391f, +0.015724f, -0.024664f, -0.008408f, +0.005028f, - -0.003556f, +0.027001f, -0.000871f, -0.002526f, -0.005279f, +0.007623f, +0.019892f, -0.000528f, -0.013558f, +0.008673f, - +0.004081f, -0.020478f, -0.012491f, +0.007662f, -0.001925f, +0.010270f, +0.016482f, -0.004159f, -0.010090f, +0.006812f, - +0.010104f, +0.009668f, -0.004830f, -0.000128f, +0.007883f, +0.000640f, -0.003897f, +0.000362f, -0.004585f, +0.003907f, - -0.003211f, -0.001431f, +0.003101f, -0.000310f, -0.002285f, +0.002643f, -0.003564f, +0.003352f, +0.003235f, -0.006100f, - +0.004075f, +0.001032f, -0.003970f, -0.003174f, +0.003468f, +0.000478f, +0.001695f, +0.000764f, +0.001045f, -0.002412f, - -0.001319f, -0.002131f, -0.000807f, -0.002045f, +0.001990f, -0.000346f, -0.000927f, -0.000504f, -0.001881f, +0.000279f, - -0.000799f, +0.000577f, -0.000328f, -0.000448f, +0.001331f, -0.001091f, +0.001144f, -0.000785f, -0.000246f, -0.000516f, - +0.000388f, -0.000742f, +0.001070f, +0.000287f, -0.000606f, -0.001181f - }, - { - +0.078009f, -0.130401f, +0.014911f, +0.068014f, -0.003452f, +0.005844f, -0.007656f, +0.001515f, -0.011333f, -0.010509f, - +0.019120f, -0.018295f, +0.022514f, +0.000815f, -0.016653f, +0.016097f, +0.000575f, -0.014829f, +0.028127f, +0.006224f, - -0.003635f, -0.013505f, +0.000649f, -0.002750f, -0.010742f, +0.008906f, -0.004838f, +0.018827f, -0.013676f, +0.001851f, - -0.001725f, -0.003167f, +0.000410f, -0.000772f, -0.003788f, -0.003596f, +0.007197f, -0.009108f, +0.017404f, -0.008916f, - +0.012343f, +0.000627f, +0.001595f, -0.005994f, +0.001003f, +0.004365f, -0.009251f, -0.002361f, +0.006017f, -0.011112f, - -0.002962f, +0.002280f, -0.009510f, +0.002749f, -0.006248f, +0.002457f, +0.001223f, -0.008782f, +0.001068f, +0.006376f, - -0.003355f, +0.004693f, -0.005268f, -0.001825f, -0.001462f, +0.004066f, -0.002406f, -0.000773f, -0.000516f, +0.001901f, - -0.003523f, +0.001812f, -0.002838f, +0.000855f, +0.000123f, -0.000335f, +0.001690f, +0.001932f, -0.000522f, +0.000108f, - -0.001161f, +0.000473f, -0.001120f, +0.001708f, -0.000733f, -0.001645f, +0.001333f, -0.001213f, +0.001099f, +0.000520f, - -0.000070f, -0.000246f, +0.000135f, +0.000525f, +0.000202f, +0.000644f - }, - { - +0.001743f, -0.019271f, -0.013570f, -0.002860f, +0.003061f, +0.001394f, -0.000934f, -0.003583f, +0.005261f, -0.005109f, - +0.010896f, +0.004836f, -0.003454f, +0.001382f, -0.008340f, +0.007191f, -0.030522f, +0.004091f, +0.009440f, -0.011111f, - +0.019645f, -0.001882f, -0.004754f, -0.021057f, -0.008538f, +0.054514f, -0.006952f, -0.008535f, +0.013306f, -0.016085f, - -0.000092f, +0.000283f, +0.006502f, +0.004914f, -0.013491f, +0.004518f, -0.005791f, +0.003565f, -0.001145f, +0.002292f, - +0.009533f, -0.003171f, -0.011182f, -0.005916f, -0.004608f, +0.004106f, -0.003283f, +0.001310f, -0.005391f, +0.008174f, - +0.008416f, -0.000319f, -0.004106f, +0.004025f, +0.004619f, -0.000007f, -0.002594f, -0.001136f, -0.002470f, +0.002097f, - -0.003238f, -0.002708f, -0.002897f, +0.000896f, +0.006069f, -0.000802f, -0.003068f, +0.001832f, -0.001815f, -0.000558f, - +0.001230f, +0.001242f, +0.000212f, +0.002054f, +0.004181f, -0.002059f, -0.001265f, +0.000137f, +0.001162f, -0.001211f, - -0.000162f, -0.003330f, +0.000559f, +0.000005f, -0.000670f, +0.000781f, -0.000436f, +0.000099f, -0.002492f, +0.000431f, - +0.000115f, -0.000919f, +0.000283f, -0.000143f, -0.000057f, +0.000229f - }, - { - +0.070552f, +0.053573f, -0.009624f, +0.105289f, -0.012326f, +0.001053f, +0.012697f, +0.004978f, -0.015890f, -0.022649f, - +0.010940f, +0.002104f, +0.018443f, +0.008921f, +0.018736f, -0.002257f, +0.009278f, +0.008560f, +0.000079f, +0.007109f, - -0.019127f, -0.018895f, +0.003063f, -0.014951f, -0.001891f, +0.002065f, +0.010599f, -0.003045f, +0.002330f, +0.000551f, - -0.001755f, -0.001173f, -0.009305f, +0.009134f, -0.001826f, -0.005655f, -0.005129f, -0.009410f, +0.009271f, -0.002842f, - -0.012239f, +0.007237f, -0.003614f, +0.002210f, -0.003307f, -0.006680f, +0.008705f, -0.005383f, +0.002239f, +0.002018f, - -0.005652f, +0.004266f, +0.011914f, -0.000690f, +0.000810f, -0.001767f, +0.006122f, +0.002083f, -0.001580f, -0.002701f, - -0.000951f, -0.000382f, +0.000535f, -0.001349f, -0.001451f, -0.000436f, -0.000903f, -0.000179f, +0.001447f, +0.000246f, - +0.000558f, -0.000136f, +0.000228f, +0.000018f, -0.001215f, -0.001207f, -0.001797f, -0.000057f, -0.001119f, -0.000369f, - -0.001509f, +0.001402f, -0.001105f, +0.000567f, +0.001338f, -0.001586f, +0.000551f, -0.000201f, -0.001426f, +0.000631f, - -0.001712f, +0.001289f, +0.000968f, -0.000932f, -0.000248f, -0.001929f - }, - { - +0.002111f, -0.014149f, +0.014504f, -0.005823f, -0.003179f, +0.000564f, -0.001397f, +0.002853f, -0.002999f, -0.000576f, - -0.000053f, -0.004820f, -0.013210f, -0.000829f, -0.007219f, -0.014647f, -0.016726f, -0.009892f, -0.005312f, +0.030228f, - +0.001197f, +0.004109f, -0.003045f, -0.003780f, +0.023643f, +0.019639f, +0.004345f, -0.001026f, -0.012079f, +0.019051f, - +0.006299f, -0.013600f, +0.013180f, +0.000336f, +0.004694f, -0.013302f, +0.010484f, -0.009754f, +0.009364f, -0.000951f, - -0.018455f, +0.004637f, -0.008557f, +0.000239f, -0.005268f, -0.001571f, +0.001809f, -0.008573f, +0.013252f, -0.006068f, - -0.000649f, -0.006415f, +0.003069f, +0.002195f, -0.003940f, +0.000176f, -0.000950f, -0.005512f, -0.001369f, +0.003602f, - +0.002012f, -0.001172f, +0.002383f, -0.001799f, -0.000910f, -0.004778f, +0.002854f, -0.002111f, -0.000900f, +0.002982f, - +0.000356f, +0.000185f, -0.001655f, +0.001518f, -0.000936f, +0.001070f, +0.001208f, +0.001204f, -0.001199f, +0.001771f, - +0.000998f, -0.001154f, -0.001153f, -0.001654f, +0.002152f, -0.001175f, +0.000324f, +0.001783f, +0.000646f, +0.001766f, - -0.000015f, +0.000449f, -0.000207f, -0.000174f, +0.000262f, +0.000572f - }, - { - +0.091009f, -0.367194f, +0.008985f, +0.116226f, -0.031367f, +0.001904f, -0.001499f, -0.004436f, +0.019206f, -0.006796f, - -0.002362f, +0.010185f, -0.018899f, +0.001895f, +0.014364f, +0.012913f, -0.017843f, +0.012012f, +0.010866f, +0.002363f, - -0.005043f, -0.005565f, +0.002855f, +0.004489f, -0.008262f, +0.004348f, +0.007867f, -0.013927f, -0.004944f, +0.001085f, - +0.003280f, -0.011230f, +0.012890f, -0.010843f, -0.002628f, -0.000460f, -0.000379f, -0.001801f, +0.018150f, +0.000773f, - +0.005410f, -0.002511f, +0.008806f, -0.001132f, +0.000785f, +0.006427f, +0.000912f, +0.001593f, -0.002126f, +0.002325f, - +0.004824f, +0.003874f, +0.001395f, -0.001409f, -0.006468f, +0.001633f, -0.002097f, -0.002271f, +0.003499f, +0.001898f, - -0.003898f, -0.001255f, +0.000075f, +0.001792f, -0.001655f, -0.001641f, -0.000508f, +0.001069f, +0.000579f, +0.003282f, - -0.000408f, -0.000280f, +0.000376f, -0.000323f, -0.000538f, -0.000433f, +0.000048f, -0.002085f, -0.000908f, +0.002581f, - +0.001546f, -0.001975f, -0.001208f, +0.001057f, +0.000000f, +0.000810f, +0.000228f, +0.001326f, -0.000921f, -0.000255f, - +0.000559f, +0.001004f, -0.001940f, +0.001092f, -0.000503f, -0.000358f - }, - { - -0.004117f, +0.086314f, +0.004614f, +0.013132f, -0.000210f, -0.019261f, -0.012160f, -0.006067f, -0.001463f, +0.002931f, - +0.004396f, -0.010449f, -0.001839f, +0.033520f, -0.011748f, -0.008762f, +0.004164f, +0.004443f, -0.010383f, +0.015734f, - +0.014150f, -0.003174f, +0.018017f, +0.005611f, +0.009687f, +0.003346f, +0.002678f, +0.031934f, +0.000869f, +0.010804f, - -0.008149f, +0.007709f, -0.018187f, +0.003797f, -0.007330f, +0.001766f, -0.000740f, -0.001977f, +0.000895f, -0.008525f, - -0.005408f, +0.007714f, +0.001252f, -0.007054f, +0.002201f, +0.004505f, +0.003987f, -0.002348f, -0.001368f, -0.009558f, - -0.002843f, -0.000907f, +0.002332f, -0.001207f, +0.005326f, +0.003299f, -0.002160f, -0.003803f, -0.001531f, +0.002049f, - -0.003291f, +0.005300f, -0.003163f, +0.001128f, -0.002987f, +0.000906f, +0.000631f, +0.002220f, -0.002267f, +0.001952f, - -0.001568f, +0.001516f, -0.001367f, +0.003086f, -0.002834f, +0.000133f, +0.004237f, -0.002824f, -0.000779f, +0.000173f, - +0.000294f, -0.000383f, -0.000244f, -0.000628f, +0.002189f, +0.000525f, -0.000532f, -0.001189f, +0.000009f, +0.000142f, - -0.001277f, +0.000619f, +0.000033f, +0.001053f, -0.000700f, -0.000152f - }, - { - +0.045184f, -0.289196f, -0.012278f, -0.000500f, +0.023771f, +0.006847f, -0.005837f, -0.014631f, +0.012558f, -0.003044f, - +0.000828f, +0.013249f, -0.010340f, +0.006224f, -0.013447f, +0.009571f, -0.001383f, -0.017196f, -0.003228f, -0.006044f, - +0.009604f, -0.005092f, +0.004576f, -0.009721f, +0.004045f, +0.003472f, +0.009116f, -0.010722f, +0.001322f, +0.009215f, - +0.001015f, +0.005665f, +0.004647f, -0.003994f, +0.004848f, -0.005247f, +0.009163f, -0.003961f, +0.007451f, +0.000282f, - -0.001944f, +0.001689f, -0.002258f, +0.002301f, -0.001010f, +0.001257f, +0.000826f, +0.001182f, -0.002834f, +0.007590f, - -0.002034f, -0.008597f, -0.003339f, -0.001282f, -0.000035f, +0.007892f, -0.003401f, +0.001883f, -0.000119f, +0.001697f, - -0.000036f, -0.000536f, -0.001466f, -0.006661f, +0.001874f, +0.000991f, +0.006360f, -0.003551f, -0.001500f, +0.002009f, - -0.000571f, +0.001128f, +0.002549f, -0.000836f, -0.001445f, -0.000396f, -0.002883f, +0.002769f, -0.002065f, +0.002151f, - +0.001181f, -0.000815f, +0.000227f, +0.001260f, -0.000660f, +0.000754f, -0.002512f, +0.001517f, +0.000264f, +0.000644f, - -0.000124f, +0.000982f, -0.000109f, +0.000263f, -0.000206f, -0.001549f - }, - { - +0.003411f, +0.047445f, -0.008514f, -0.003509f, -0.002764f, +0.009717f, +0.014535f, -0.002419f, +0.002485f, +0.000705f, - -0.009213f, -0.003084f, -0.004547f, +0.040195f, -0.008193f, +0.003508f, -0.020567f, -0.000740f, +0.042746f, +0.007179f, - -0.012981f, +0.056532f, +0.006219f, +0.007430f, -0.020806f, +0.010765f, +0.006620f, -0.015129f, +0.035193f, -0.003661f, - +0.000298f, +0.001042f, -0.013461f, +0.005107f, -0.004702f, -0.000504f, +0.005504f, +0.000136f, -0.012450f, +0.007930f, - -0.001029f, -0.001384f, +0.009140f, -0.004706f, -0.009634f, +0.002547f, +0.001730f, +0.005024f, -0.001050f, -0.003146f, - +0.008035f, +0.001024f, +0.001285f, -0.003243f, -0.004571f, +0.001900f, -0.005875f, +0.006602f, -0.000775f, -0.001692f, - +0.004497f, +0.000175f, -0.001726f, -0.004851f, +0.004499f, +0.000765f, +0.001287f, +0.000453f, -0.002671f, +0.001688f, - -0.000907f, -0.002513f, +0.000774f, -0.000070f, +0.002036f, +0.000974f, +0.002197f, -0.001507f, -0.002592f, +0.000024f, - +0.002991f, -0.001237f, -0.003273f, +0.002025f, +0.002845f, +0.001369f, -0.000578f, +0.000548f, -0.000836f, +0.001989f, - +0.002053f, +0.000477f, -0.000045f, -0.000982f, +0.001258f, -0.001280f - }, - { - -0.069158f, -0.273804f, +0.002358f, -0.014624f, +0.010684f, +0.022158f, +0.029815f, -0.001725f, -0.018819f, +0.015207f, - +0.008733f, +0.000661f, +0.008350f, +0.019052f, +0.005830f, -0.012995f, +0.011640f, -0.020410f, +0.003747f, +0.004240f, - -0.008899f, -0.018031f, -0.002671f, +0.012742f, -0.008948f, +0.009214f, +0.010923f, -0.020134f, +0.019748f, -0.001149f, - +0.005775f, -0.012971f, +0.006767f, -0.009962f, -0.001412f, +0.002886f, -0.000552f, +0.003262f, +0.008855f, +0.000717f, - -0.004815f, -0.001717f, +0.006349f, -0.003338f, +0.001328f, +0.006914f, -0.008425f, +0.000088f, +0.004367f, +0.005969f, - -0.003982f, -0.002143f, +0.004899f, +0.001334f, +0.002304f, -0.004147f, -0.003108f, -0.003310f, +0.006153f, -0.000974f, - +0.003951f, -0.002699f, -0.005493f, +0.000580f, -0.000168f, -0.004273f, +0.002982f, +0.002557f, +0.000148f, -0.002080f, - +0.001756f, +0.004374f, -0.000548f, -0.000232f, +0.000256f, -0.000737f, +0.001058f, +0.002669f, -0.000135f, +0.000091f, - -0.003109f, +0.001336f, -0.001236f, -0.000796f, -0.000030f, -0.001347f, -0.000198f, +0.000937f, -0.001044f, -0.001657f, - -0.000834f, +0.001113f, -0.001322f, -0.000512f, +0.000982f, -0.000644f - }, - { - +0.012357f, -0.016816f, -0.024235f, -0.001691f, +0.004064f, -0.011070f, +0.002242f, -0.010979f, -0.010704f, -0.002644f, - -0.009104f, +0.011306f, +0.027859f, -0.040475f, -0.019191f, +0.007403f, +0.025045f, -0.007925f, +0.004404f, -0.023785f, - +0.014258f, -0.016797f, +0.026774f, -0.008486f, +0.015091f, -0.008162f, -0.006571f, +0.004175f, +0.010746f, -0.015068f, - +0.004160f, +0.009670f, +0.002335f, +0.011431f, +0.008977f, -0.010461f, +0.011611f, -0.007523f, -0.003806f, +0.002494f, - -0.003793f, +0.010624f, -0.009993f, +0.001328f, -0.000079f, +0.004425f, -0.005889f, -0.003048f, +0.006769f, +0.001575f, - -0.000994f, -0.002484f, +0.002573f, -0.007296f, +0.005330f, -0.004140f, +0.001706f, +0.004641f, -0.005465f, +0.000672f, - +0.001521f, -0.002672f, -0.005676f, +0.000317f, +0.001079f, -0.004535f, +0.007389f, +0.002130f, -0.004519f, -0.000364f, - -0.000227f, -0.000099f, +0.001623f, +0.006048f, +0.000275f, -0.002805f, +0.003483f, +0.002050f, +0.000557f, +0.001692f, - -0.001777f, +0.000509f, -0.002316f, +0.000383f, -0.000257f, +0.001157f, +0.001134f, -0.000619f, +0.000439f, -0.001622f, - -0.001720f, +0.000054f, -0.001396f, -0.000477f, -0.000245f, +0.000125f - }, - { - -0.067596f, +0.044247f, +0.019953f, -0.001057f, +0.032606f, +0.018984f, -0.010356f, +0.000034f, +0.000101f, -0.013428f, - -0.017469f, +0.010787f, -0.023151f, -0.013398f, -0.025103f, +0.002372f, -0.024158f, -0.000429f, +0.009792f, +0.010910f, - +0.005305f, -0.016663f, -0.002566f, +0.008070f, +0.008306f, -0.013918f, +0.016639f, -0.001763f, +0.003397f, -0.004562f, - -0.004820f, +0.001942f, +0.002530f, -0.010269f, +0.010606f, -0.008358f, +0.004147f, +0.004972f, -0.001688f, +0.000431f, - +0.006170f, +0.005738f, +0.000571f, +0.000335f, -0.002474f, -0.005782f, -0.001433f, +0.003608f, +0.005818f, +0.000980f, - -0.011029f, +0.002472f, +0.001749f, +0.005431f, -0.001404f, -0.002753f, +0.001883f, +0.001117f, -0.001915f, +0.006551f, - +0.004347f, -0.001822f, -0.003950f, -0.000883f, -0.000016f, +0.003104f, +0.000932f, -0.002299f, -0.001578f, +0.004411f, - +0.001225f, -0.002908f, +0.001182f, +0.001427f, -0.001521f, +0.001617f, +0.000698f, -0.002318f, -0.001261f, +0.000247f, - +0.000575f, +0.000405f, -0.001174f, -0.000814f, +0.000685f, -0.000065f, -0.002876f, +0.001715f, +0.000123f, +0.000317f, - -0.001825f, +0.000787f, +0.000584f, +0.000519f, +0.000243f, +0.002026f - } - }, - { - { - -0.001058f, -0.013486f, -0.005863f, -0.014193f, -0.003597f, +0.000297f, -0.003004f, +0.000602f, +0.003709f, +0.005604f, - +0.018715f, +0.014507f, +0.006357f, -0.000826f, -0.023606f, -0.009586f, -0.023096f, +0.000589f, +0.002548f, -0.001893f, - +0.030324f, +0.005717f, +0.008758f, +0.004527f, -0.026790f, -0.000320f, +0.003350f, +0.005077f, +0.020570f, +0.019771f, - -0.000668f, -0.006133f, +0.007849f, -0.003510f, -0.001614f, +0.000787f, -0.001316f, -0.010572f, -0.002185f, +0.007923f, - +0.000572f, +0.001443f, -0.003634f, +0.001769f, +0.006124f, +0.001957f, -0.001677f, +0.004205f, +0.001348f, +0.005712f, - +0.005184f, +0.001179f, +0.001005f, +0.003819f, -0.000163f, +0.000203f, +0.002261f, -0.000620f, -0.002060f, +0.001848f, - -0.000108f, +0.003379f, -0.001859f, -0.000207f, -0.001803f, +0.002290f, +0.002464f, +0.001195f, +0.004575f, -0.000408f, - -0.000960f, -0.000202f, +0.000427f, +0.000437f, +0.002125f, +0.001757f, +0.000858f, -0.000067f, -0.000112f, -0.000244f, - +0.000649f, +0.000724f, +0.000675f, +0.000402f, +0.000736f, +0.000735f, -0.000048f, +0.001429f, -0.000566f, -0.000140f, - -0.000743f, -0.000399f, +0.000043f, +0.001292f, -0.000479f, +0.000308f - }, - { - -0.017648f, -0.171606f, -0.022307f, -0.020279f, -0.012084f, -0.003122f, +0.003218f, -0.013834f, -0.010690f, +0.003439f, - -0.004160f, +0.003461f, +0.000783f, -0.006328f, +0.002919f, +0.005402f, -0.010268f, +0.003279f, -0.006126f, -0.011422f, - +0.014734f, -0.004152f, +0.008463f, -0.009749f, -0.022388f, +0.001581f, -0.003237f, +0.006488f, +0.002059f, -0.006187f, - +0.007850f, -0.003712f, +0.006194f, -0.006701f, -0.006726f, +0.001262f, -0.005326f, -0.006293f, +0.000131f, -0.002508f, - -0.000424f, +0.001236f, +0.003900f, +0.001255f, +0.007296f, -0.001988f, -0.002904f, -0.002438f, -0.003198f, -0.003694f, - -0.002278f, -0.000205f, +0.005830f, -0.001269f, +0.001006f, +0.001214f, +0.001373f, +0.003449f, -0.002205f, -0.001155f, - +0.002289f, +0.000381f, -0.004069f, +0.004086f, +0.002666f, +0.001195f, +0.000973f, +0.003402f, +0.001478f, +0.001047f, - +0.000356f, -0.001278f, -0.000121f, -0.000233f, +0.000268f, -0.001672f, +0.000156f, -0.000889f, +0.001343f, -0.000091f, - +0.000509f, -0.000649f, -0.001311f, -0.000010f, +0.000223f, +0.000457f, +0.000342f, -0.000913f, -0.001448f, -0.000285f, - +0.000735f, +0.000641f, +0.000901f, -0.001024f, -0.000716f, -0.000175f - }, - { - -0.002328f, -0.035070f, -0.037193f, -0.041164f, +0.003469f, +0.003086f, +0.006475f, +0.001662f, -0.003352f, -0.007867f, - +0.000416f, +0.009279f, -0.003166f, -0.008317f, -0.002471f, +0.004055f, -0.003305f, -0.004034f, -0.002787f, -0.003562f, - +0.010920f, +0.003610f, +0.011320f, +0.009705f, +0.008113f, +0.003879f, +0.000850f, -0.000617f, -0.007370f, -0.005460f, - +0.002098f, -0.001410f, -0.009680f, -0.008615f, +0.007648f, +0.003232f, -0.001682f, -0.006674f, -0.000760f, +0.000750f, - +0.000279f, +0.001462f, +0.003469f, +0.001494f, +0.003882f, +0.003775f, -0.005160f, +0.001612f, +0.003360f, +0.002473f, - -0.001802f, -0.000525f, -0.000272f, -0.000817f, -0.001978f, +0.001436f, +0.002415f, +0.004422f, +0.002659f, -0.000375f, - -0.001241f, +0.001144f, -0.000019f, +0.000835f, -0.002519f, +0.000058f, +0.000636f, +0.000639f, -0.001796f, +0.000719f, - +0.000249f, -0.001566f, -0.001124f, +0.001683f, -0.000220f, -0.000275f, -0.001020f, +0.001442f, +0.001897f, +0.001450f, - +0.000755f, +0.000985f, -0.000710f, -0.000551f, +0.000854f, +0.000152f, -0.001408f, -0.000866f, -0.000283f, -0.000473f, - +0.000861f, +0.000782f, -0.000659f, -0.000387f, -0.000482f, +0.000034f - }, - { - -0.003741f, +0.017142f, +0.006336f, -0.002477f, -0.000556f, -0.000375f, -0.002457f, +0.001717f, -0.000343f, -0.002287f, - +0.001217f, -0.006333f, +0.000422f, +0.013986f, +0.054315f, +0.013038f, -0.028263f, +0.009848f, -0.021480f, -0.013448f, - +0.013200f, +0.013819f, +0.005741f, -0.002322f, -0.001143f, -0.002798f, +0.011272f, +0.006066f, -0.002323f, +0.013205f, - -0.014805f, -0.020320f, +0.005502f, +0.005984f, -0.000423f, +0.009279f, +0.011507f, -0.000793f, -0.001483f, +0.003991f, - +0.008092f, +0.007950f, +0.001170f, -0.004916f, +0.001517f, +0.004140f, +0.002355f, +0.000953f, -0.003549f, +0.005082f, - -0.005525f, +0.000594f, -0.000400f, +0.002842f, -0.001342f, +0.000318f, -0.002293f, +0.002196f, +0.000195f, -0.005056f, - +0.000302f, +0.002413f, -0.002918f, -0.001322f, +0.002066f, +0.001201f, +0.001015f, +0.000881f, +0.000474f, -0.000593f, - -0.004053f, -0.002750f, -0.001381f, +0.000129f, -0.000050f, -0.000430f, -0.000149f, -0.000145f, -0.001535f, +0.000059f, - +0.000594f, -0.000123f, -0.000068f, +0.000338f, +0.000179f, +0.000022f, +0.000000f, +0.000356f, +0.000011f, -0.000474f, - -0.000259f, +0.000218f, +0.000438f, +0.001026f, -0.000698f, +0.000176f - }, - { - -0.049011f, +0.070004f, -0.021702f, +0.070562f, +0.010487f, -0.000167f, -0.006627f, -0.003615f, -0.003017f, -0.010495f, - +0.007944f, +0.008040f, +0.004250f, +0.000454f, -0.000350f, +0.006485f, -0.001456f, -0.008322f, +0.013826f, +0.006218f, - -0.006522f, -0.003132f, -0.002591f, -0.008755f, -0.000126f, +0.005312f, -0.010164f, +0.014303f, -0.000373f, -0.003544f, - +0.002708f, -0.004622f, +0.001746f, -0.001772f, +0.000550f, +0.001239f, -0.012871f, +0.001361f, +0.003059f, +0.000182f, - +0.007961f, +0.001322f, +0.001596f, +0.000940f, -0.006418f, -0.000785f, -0.002038f, -0.001715f, -0.005309f, -0.002294f, - -0.000263f, -0.001946f, -0.000383f, -0.005284f, -0.002986f, +0.001350f, -0.000075f, -0.001974f, -0.000582f, +0.000511f, - +0.001550f, -0.000975f, +0.001051f, -0.001682f, -0.001293f, -0.000600f, +0.000645f, -0.002742f, +0.000597f, -0.001138f, - -0.002299f, +0.000676f, -0.001008f, +0.000987f, -0.000499f, +0.000311f, +0.001337f, +0.001695f, -0.000143f, +0.000555f, - -0.001068f, -0.000286f, +0.000649f, +0.000028f, -0.000793f, -0.001225f, +0.000183f, -0.000388f, +0.000334f, +0.000166f, - +0.000255f, -0.000142f, +0.000236f, -0.000846f, +0.000321f, +0.000639f - }, - { - -0.000432f, -0.015223f, -0.006293f, -0.001400f, -0.002876f, +0.001651f, +0.000891f, -0.001193f, -0.000345f, +0.006249f, - +0.005338f, +0.000265f, +0.000834f, +0.002047f, +0.000533f, -0.014663f, +0.006254f, -0.006415f, +0.009601f, -0.013994f, - +0.006044f, +0.007739f, -0.008642f, -0.000241f, -0.004407f, +0.012270f, +0.020202f, -0.004112f, +0.001895f, -0.007315f, - +0.005601f, +0.005787f, +0.002771f, +0.010516f, -0.005407f, -0.009171f, -0.001199f, +0.000532f, +0.007716f, +0.000369f, - +0.002088f, -0.003269f, -0.006903f, -0.004057f, -0.001125f, +0.001887f, +0.000802f, -0.004367f, +0.001695f, +0.003426f, - +0.007029f, -0.001662f, +0.000923f, +0.002587f, -0.000511f, +0.001471f, +0.001708f, -0.002891f, -0.001392f, -0.002159f, - -0.002682f, -0.002100f, -0.003137f, +0.002488f, +0.004585f, -0.000581f, -0.001509f, -0.001333f, -0.001857f, -0.000389f, - +0.000034f, +0.001781f, +0.002107f, +0.000737f, +0.003240f, +0.000711f, -0.001325f, +0.000358f, +0.001217f, -0.002521f, - -0.000871f, -0.001259f, -0.001180f, +0.000353f, +0.000144f, -0.000321f, -0.000023f, -0.000848f, -0.000969f, -0.000391f, - -0.000019f, -0.000756f, -0.000695f, +0.000808f, -0.000118f, +0.000058f - }, - { - -0.016935f, +0.148656f, +0.009292f, +0.088850f, -0.007201f, +0.004386f, +0.004828f, +0.007748f, -0.008920f, +0.000446f, - +0.000045f, +0.000901f, +0.018961f, +0.006119f, +0.008858f, -0.002361f, +0.010132f, +0.010573f, +0.003602f, +0.002815f, - -0.017498f, -0.016138f, +0.000481f, -0.011480f, +0.002180f, -0.000586f, +0.005499f, +0.005102f, -0.000863f, -0.006728f, - -0.001522f, +0.001854f, -0.003266f, -0.001412f, +0.005677f, -0.003200f, -0.008142f, -0.000179f, -0.000759f, -0.001811f, - -0.001912f, +0.001159f, +0.000110f, -0.007364f, -0.002238f, -0.006063f, -0.000200f, +0.003429f, -0.003744f, +0.002558f, - -0.006947f, +0.008963f, +0.004783f, +0.002605f, +0.000636f, +0.000903f, +0.003157f, +0.001100f, +0.001719f, -0.001859f, - +0.000021f, -0.000836f, -0.002989f, +0.001303f, -0.001994f, -0.001164f, +0.000773f, +0.002529f, -0.000763f, -0.001346f, - +0.001689f, -0.000718f, +0.000669f, +0.001205f, -0.001528f, -0.001431f, -0.001646f, -0.000957f, -0.000207f, -0.000827f, - -0.000530f, +0.000078f, -0.000300f, +0.001644f, -0.000749f, +0.000455f, +0.000419f, -0.001444f, -0.000732f, +0.000027f, - -0.000463f, +0.000017f, +0.000304f, -0.000201f, -0.000896f, -0.000340f - }, - { - -0.000643f, +0.007922f, +0.001604f, +0.000074f, -0.002472f, -0.000798f, +0.000253f, -0.000486f, +0.000884f, -0.002322f, - -0.000806f, -0.004474f, -0.000579f, -0.004620f, +0.006709f, -0.020002f, -0.028412f, -0.018137f, -0.001786f, +0.029562f, - +0.014903f, -0.017829f, -0.007005f, -0.000445f, +0.013991f, +0.013638f, +0.006043f, -0.006760f, +0.001135f, +0.004668f, - +0.009560f, -0.007787f, -0.008623f, +0.005301f, -0.001659f, -0.005195f, -0.001112f, -0.006144f, +0.003954f, -0.001049f, - -0.006750f, -0.003155f, -0.003221f, +0.000808f, -0.012709f, -0.000636f, +0.002122f, +0.001064f, +0.001143f, -0.006138f, - +0.001811f, -0.002196f, +0.004167f, +0.000253f, -0.001376f, -0.001443f, +0.000369f, -0.003077f, -0.002341f, +0.002507f, - +0.002504f, -0.000598f, +0.001368f, -0.001818f, +0.000841f, -0.003166f, -0.001363f, +0.001130f, +0.000336f, -0.000929f, - +0.001843f, -0.000117f, -0.000075f, -0.001047f, +0.001351f, +0.000322f, +0.001403f, -0.000690f, -0.000316f, +0.001177f, - -0.000504f, +0.000559f, -0.001098f, -0.001155f, +0.000669f, -0.000473f, +0.000469f, +0.001070f, +0.000069f, +0.001461f, - +0.000569f, +0.000511f, +0.000023f, -0.000931f, +0.001287f, -0.000436f - }, - { - -0.084217f, -0.105594f, +0.001691f, +0.081515f, -0.001245f, -0.001068f, +0.001656f, -0.001180f, +0.003486f, +0.010008f, - -0.009077f, -0.012157f, -0.011487f, -0.003112f, +0.011702f, +0.004498f, +0.000952f, +0.006364f, +0.004011f, +0.009022f, - -0.000967f, -0.006162f, -0.001752f, +0.002195f, -0.005099f, +0.007422f, +0.004603f, -0.007401f, -0.009381f, +0.001428f, - +0.000428f, +0.001960f, -0.004982f, +0.001239f, -0.005701f, -0.002792f, +0.001404f, +0.005072f, +0.014907f, +0.001112f, - +0.001488f, +0.004285f, +0.004452f, +0.002597f, -0.002013f, +0.004494f, +0.006302f, -0.003462f, +0.002601f, -0.003544f, - -0.000858f, +0.006159f, -0.001856f, +0.001152f, -0.004229f, -0.003377f, -0.000497f, -0.001027f, +0.002630f, -0.001655f, - -0.001813f, -0.000279f, +0.002224f, +0.000001f, -0.002024f, -0.000436f, -0.001435f, +0.000654f, +0.001161f, +0.000823f, - -0.000753f, -0.001377f, +0.002751f, -0.000998f, +0.000272f, -0.000273f, -0.001184f, -0.000210f, +0.000009f, +0.001541f, - +0.000534f, -0.000832f, -0.001433f, +0.000638f, +0.001115f, +0.000033f, -0.000196f, +0.000767f, -0.000010f, +0.000052f, - -0.000478f, +0.000731f, -0.000491f, +0.000173f, +0.000369f, -0.000142f - }, - { - +0.001204f, +0.052506f, +0.017207f, +0.015819f, -0.002557f, -0.007664f, -0.012974f, -0.011152f, +0.003559f, -0.007478f, - +0.004157f, -0.004713f, +0.001080f, +0.015064f, -0.000545f, +0.004937f, +0.004044f, -0.005082f, +0.023063f, -0.003353f, - +0.010786f, +0.005079f, +0.003518f, +0.016185f, +0.013763f, +0.009922f, -0.006641f, +0.019244f, +0.013238f, +0.007262f, - -0.007615f, -0.000852f, +0.002138f, -0.002977f, -0.009035f, +0.004177f, -0.005777f, +0.008862f, -0.004889f, -0.006321f, - +0.004495f, +0.000552f, -0.004369f, -0.005568f, +0.004774f, +0.001658f, +0.004816f, -0.001302f, -0.006256f, -0.004556f, - +0.002221f, -0.001431f, +0.002761f, -0.001297f, +0.002665f, +0.000853f, +0.000870f, -0.003534f, -0.001317f, +0.001344f, - +0.000936f, -0.000240f, +0.000002f, -0.000701f, -0.000151f, -0.000201f, +0.001274f, +0.000939f, +0.001087f, +0.000013f, - +0.000214f, -0.002345f, +0.000425f, +0.000945f, -0.001789f, +0.001117f, +0.000816f, +0.000059f, -0.001405f, -0.000905f, - -0.000335f, -0.000998f, +0.000637f, -0.000066f, +0.002346f, -0.000183f, -0.001123f, -0.000401f, -0.000706f, -0.001086f, - +0.000317f, +0.000018f, +0.000516f, +0.001078f, -0.000171f, -0.000495f - }, - { - -0.041777f, -0.177907f, -0.005917f, +0.010660f, +0.016855f, +0.012975f, +0.012164f, -0.010551f, -0.005342f, -0.003818f, - +0.004796f, +0.010306f, -0.000267f, +0.005217f, -0.007640f, +0.009140f, -0.000608f, -0.003400f, -0.008752f, +0.003679f, - -0.008215f, -0.001587f, +0.004199f, -0.001519f, -0.005035f, +0.016451f, -0.007338f, +0.006087f, +0.006201f, +0.003369f, - +0.008715f, +0.003198f, +0.002865f, -0.002570f, +0.000066f, +0.000644f, +0.005705f, +0.003204f, -0.002394f, +0.000183f, - +0.003334f, -0.000768f, +0.001204f, -0.000818f, -0.000189f, -0.001820f, +0.002385f, -0.000626f, +0.002078f, +0.003210f, - -0.004870f, -0.004182f, -0.005847f, -0.001096f, +0.004086f, +0.001268f, +0.000797f, -0.000878f, -0.000629f, +0.002982f, - -0.003095f, +0.000853f, -0.003216f, -0.001820f, -0.002807f, +0.002241f, +0.002737f, +0.000256f, -0.003060f, +0.003580f, - +0.001427f, -0.000121f, +0.002450f, +0.000434f, -0.001112f, -0.001653f, +0.000888f, +0.001312f, -0.001661f, -0.000078f, - +0.001348f, +0.000161f, -0.000221f, +0.000716f, +0.000108f, +0.000362f, -0.001284f, +0.000505f, +0.000788f, +0.000493f, - +0.000077f, +0.000588f, +0.000343f, -0.000078f, -0.000522f, -0.000015f - }, - { - -0.004892f, +0.024593f, +0.010279f, -0.004181f, +0.009535f, +0.011603f, +0.001075f, +0.007417f, +0.001524f, -0.001282f, - -0.001152f, -0.009625f, +0.003777f, -0.000452f, +0.013150f, +0.000790f, -0.021743f, +0.010567f, +0.014803f, +0.009080f, - +0.015939f, -0.007600f, +0.027223f, +0.009808f, +0.000205f, +0.006750f, -0.015395f, -0.000839f, +0.015367f, -0.004932f, - -0.001415f, +0.006125f, -0.005584f, -0.007390f, -0.003482f, -0.001627f, +0.006778f, +0.001879f, -0.003385f, +0.000889f, - +0.003695f, +0.002434f, +0.001583f, -0.002917f, -0.006371f, +0.001443f, +0.004692f, +0.000338f, +0.001578f, +0.006068f, - -0.000913f, -0.000468f, +0.003451f, -0.006001f, -0.001546f, -0.002005f, -0.000819f, +0.000043f, -0.000970f, -0.001221f, - +0.002415f, +0.000585f, -0.000453f, -0.003435f, +0.000021f, +0.002702f, -0.000487f, -0.001136f, +0.000512f, +0.000792f, - -0.000525f, -0.002339f, +0.001686f, -0.000205f, +0.002004f, +0.000275f, +0.002178f, -0.000921f, -0.000937f, +0.001351f, - +0.000010f, -0.001413f, +0.000256f, +0.000436f, +0.002647f, +0.000358f, +0.000156f, -0.000221f, -0.000542f, +0.001760f, - +0.001773f, +0.000977f, +0.000183f, -0.000167f, -0.000088f, -0.000399f - }, - { - +0.001366f, -0.357240f, -0.046428f, +0.008744f, +0.012506f, +0.051100f, +0.024702f, -0.011405f, -0.018514f, +0.019302f, - +0.011180f, -0.001741f, +0.010253f, +0.003522f, +0.002646f, -0.003138f, -0.009477f, -0.005215f, -0.003490f, +0.010708f, - -0.006568f, -0.015031f, -0.007996f, +0.006954f, +0.005149f, +0.006714f, +0.000524f, -0.010427f, +0.001898f, +0.009999f, - +0.001021f, -0.007359f, +0.000191f, -0.001737f, -0.003534f, -0.001350f, -0.001995f, +0.008192f, +0.005248f, +0.005185f, - -0.001329f, -0.006070f, -0.000762f, +0.004494f, -0.008107f, +0.002338f, -0.000100f, -0.002232f, +0.003631f, +0.002608f, - +0.001417f, -0.004569f, +0.000967f, +0.003381f, +0.000261f, +0.000008f, -0.002523f, -0.001980f, +0.000749f, +0.000581f, - +0.002860f, -0.001302f, -0.002771f, -0.005301f, -0.000367f, -0.000940f, +0.001823f, +0.001085f, +0.000577f, +0.003837f, - +0.000082f, +0.000103f, +0.003488f, +0.000422f, -0.000498f, +0.000485f, +0.000975f, +0.000998f, +0.000347f, +0.000542f, - -0.001758f, +0.000043f, +0.000152f, -0.000154f, +0.000165f, -0.001688f, +0.000199f, -0.000547f, -0.000469f, -0.001866f, - -0.000250f, -0.000346f, +0.000018f, -0.000078f, +0.000509f, -0.000431f - }, - { - -0.011519f, -0.017176f, -0.002612f, +0.003499f, -0.000355f, -0.007799f, -0.004878f, -0.000531f, -0.019511f, -0.007005f, - -0.011826f, +0.008951f, +0.021283f, -0.002470f, -0.029942f, -0.000979f, +0.015163f, +0.006784f, -0.000968f, -0.015261f, - +0.007474f, +0.007519f, +0.015380f, -0.005109f, +0.009308f, +0.003243f, +0.002714f, +0.009314f, +0.000333f, -0.005650f, - -0.006842f, +0.015239f, +0.000106f, +0.002433f, +0.007964f, -0.001340f, -0.000970f, +0.005224f, -0.003505f, -0.004779f, - +0.002132f, -0.002762f, +0.000476f, +0.002197f, +0.002170f, -0.003706f, +0.000702f, -0.000181f, +0.002885f, +0.001057f, - +0.002446f, -0.003223f, -0.000063f, -0.004586f, +0.004709f, +0.001212f, -0.000308f, +0.002846f, -0.004448f, -0.000047f, - +0.000245f, -0.000822f, -0.001111f, -0.002777f, +0.000653f, +0.000126f, +0.000412f, +0.001947f, -0.000212f, -0.002716f, - -0.000343f, +0.001624f, +0.003278f, +0.002735f, +0.000534f, +0.000730f, +0.001627f, +0.000669f, +0.000703f, +0.000477f, - -0.000209f, -0.000013f, -0.001478f, -0.000408f, -0.001048f, +0.000152f, +0.001201f, -0.000660f, +0.000462f, -0.001211f, - -0.001050f, +0.000537f, -0.001624f, -0.000461f, -0.000080f, -0.000367f - }, - { - +0.046651f, -0.103470f, -0.012704f, +0.015636f, +0.024142f, +0.015735f, +0.013920f, -0.009627f, +0.004063f, -0.021852f, - +0.006477f, -0.017713f, -0.014123f, -0.009181f, -0.025635f, -0.006044f, -0.008111f, -0.006971f, +0.006809f, +0.003662f, - -0.003480f, -0.006031f, -0.007055f, +0.015834f, +0.002625f, +0.006480f, +0.000769f, -0.000701f, +0.004113f, -0.002830f, - -0.003836f, -0.005137f, +0.002734f, -0.000144f, -0.003662f, +0.000659f, +0.000076f, +0.011775f, -0.000738f, -0.006235f, - +0.005911f, +0.003868f, +0.000363f, +0.001515f, -0.005134f, -0.005407f, -0.003428f, -0.001137f, +0.007051f, -0.001999f, - -0.002862f, +0.000120f, +0.002695f, +0.000089f, +0.002025f, -0.000608f, -0.001148f, -0.000114f, -0.000922f, +0.003257f, - +0.005062f, +0.001115f, -0.004443f, -0.002262f, -0.000403f, +0.003531f, +0.000681f, -0.000733f, -0.001545f, +0.004141f, - +0.000751f, -0.001010f, -0.000088f, +0.001729f, -0.001183f, -0.000562f, +0.000334f, -0.002152f, -0.000314f, -0.001544f, - +0.001062f, +0.001334f, -0.001765f, -0.000141f, -0.000713f, -0.000528f, -0.001922f, +0.001569f, +0.000800f, -0.000190f, - -0.000441f, -0.000090f, -0.000604f, +0.000793f, +0.000922f, +0.000172f - } - }, - { - { - +0.000799f, +0.005775f, +0.002777f, +0.011541f, +0.014104f, -0.001438f, -0.002109f, -0.002364f, -0.003428f, -0.002095f, - +0.007603f, -0.003808f, -0.003432f, +0.007572f, -0.003270f, +0.017155f, -0.001894f, +0.017160f, +0.005898f, -0.018148f, - +0.019316f, +0.003688f, +0.002021f, +0.013375f, -0.018312f, +0.006843f, -0.004742f, -0.016113f, -0.000137f, +0.016900f, - +0.004659f, -0.001888f, +0.014070f, -0.006582f, +0.000270f, -0.000746f, +0.000235f, -0.002949f, -0.002252f, +0.003361f, - -0.002870f, +0.002338f, -0.002383f, -0.002737f, -0.001068f, +0.002973f, +0.001432f, +0.002106f, -0.001002f, +0.000980f, - +0.000343f, -0.001174f, +0.000027f, +0.003551f, -0.002260f, +0.002259f, +0.002309f, +0.000038f, +0.000280f, +0.001866f, - +0.000288f, +0.004980f, +0.000019f, +0.002686f, +0.001822f, +0.002609f, +0.000856f, +0.000045f, +0.002128f, +0.000288f, - +0.000637f, -0.000187f, +0.000580f, -0.001480f, -0.000267f, +0.000512f, +0.000700f, -0.000966f, +0.000009f, +0.000216f, - -0.000318f, +0.000018f, -0.000394f, +0.000161f, +0.000559f, -0.000176f, -0.001463f, -0.000046f, -0.000597f, -0.000402f, - -0.000762f, +0.000255f, +0.000238f, +0.000592f, -0.000571f, +0.000190f - }, - { - +0.011518f, -0.123879f, -0.016944f, +0.017254f, +0.006114f, +0.002611f, +0.005642f, -0.007285f, -0.000159f, -0.004025f, - -0.012962f, +0.002304f, -0.001290f, -0.001029f, +0.000458f, -0.002415f, -0.006393f, +0.006656f, +0.004411f, +0.004199f, - +0.017116f, -0.008634f, +0.011622f, -0.001812f, -0.023729f, -0.004537f, -0.001313f, -0.000614f, -0.003933f, -0.006623f, - +0.002745f, -0.011741f, +0.013918f, -0.000093f, -0.005236f, +0.005417f, +0.004363f, +0.005725f, +0.008041f, +0.000111f, - -0.004179f, +0.002555f, +0.003208f, -0.000976f, +0.006662f, +0.004413f, +0.001872f, +0.001065f, -0.000624f, -0.001236f, - +0.001615f, -0.001549f, +0.003232f, -0.004190f, +0.000675f, +0.002063f, -0.000526f, +0.002068f, -0.000449f, -0.000767f, - +0.000141f, +0.001631f, -0.002809f, +0.001291f, +0.000185f, +0.001722f, +0.000262f, -0.000052f, -0.000979f, -0.001043f, - -0.000896f, -0.001331f, -0.000008f, -0.000405f, +0.000474f, -0.000471f, +0.001763f, -0.001159f, +0.000494f, -0.001248f, - +0.000379f, +0.000374f, -0.000340f, +0.000286f, -0.000505f, +0.000620f, +0.000209f, +0.000462f, -0.000245f, +0.000176f, - +0.000142f, -0.000368f, +0.000267f, -0.000042f, +0.000071f, -0.000535f - }, - { - -0.001226f, +0.005775f, +0.011695f, -0.000330f, +0.011902f, -0.001901f, +0.003706f, +0.003736f, +0.003403f, +0.002998f, - +0.004645f, +0.001431f, -0.004099f, -0.004819f, +0.001708f, +0.003607f, +0.000350f, +0.008974f, +0.008202f, -0.011338f, - +0.002466f, -0.010978f, +0.001360f, +0.002732f, +0.000228f, -0.001326f, -0.004418f, -0.005819f, -0.004315f, -0.000754f, - -0.002258f, -0.005519f, +0.002653f, -0.002637f, +0.006278f, +0.002089f, -0.007536f, -0.008200f, +0.008952f, +0.001898f, - -0.007373f, -0.002375f, +0.000324f, -0.004078f, -0.001106f, +0.001290f, -0.005855f, -0.000790f, -0.000865f, +0.001427f, - -0.000328f, +0.001057f, +0.000168f, -0.000706f, -0.001995f, -0.000393f, -0.000538f, -0.000362f, +0.000741f, +0.000121f, - -0.000822f, -0.000048f, +0.000243f, +0.001079f, -0.001044f, +0.000345f, +0.002090f, +0.002035f, -0.001754f, -0.000566f, - +0.000289f, -0.001563f, -0.002043f, +0.000591f, -0.000374f, -0.000219f, -0.002119f, -0.000840f, -0.000028f, -0.000397f, - -0.000123f, +0.001486f, -0.000054f, +0.000015f, +0.001052f, +0.000103f, -0.000619f, +0.000145f, +0.000187f, -0.000601f, - +0.000060f, -0.000230f, -0.000317f, +0.000177f, -0.000524f, -0.000346f - }, - { - +0.005229f, +0.013113f, -0.004920f, +0.001215f, +0.002178f, -0.000576f, -0.000889f, +0.001345f, -0.001498f, -0.004928f, - +0.002827f, +0.004693f, +0.005539f, +0.003371f, +0.037143f, +0.010683f, -0.016715f, +0.012423f, -0.015005f, +0.004648f, - +0.017478f, +0.005900f, +0.002665f, +0.003849f, -0.004121f, -0.008645f, +0.010942f, +0.004672f, -0.000079f, +0.011050f, - -0.007835f, +0.001420f, +0.013001f, +0.005056f, -0.001551f, +0.003657f, +0.001871f, -0.006202f, +0.002819f, +0.001051f, - -0.000318f, +0.001458f, -0.000236f, -0.004650f, +0.002318f, +0.003398f, +0.001972f, +0.002619f, -0.002800f, +0.003723f, - -0.000665f, +0.002542f, -0.004076f, +0.002693f, -0.000910f, -0.002294f, -0.002872f, +0.000133f, -0.000347f, -0.000146f, - +0.000904f, +0.002349f, -0.000085f, -0.000227f, +0.001260f, +0.000873f, +0.000357f, -0.000932f, -0.000925f, +0.001301f, - -0.001603f, -0.001474f, -0.000523f, +0.000722f, +0.000292f, -0.000483f, -0.000053f, +0.000543f, -0.000068f, +0.000821f, - +0.000796f, -0.000593f, +0.000166f, +0.000478f, -0.000188f, +0.000081f, +0.000276f, +0.000855f, -0.000077f, -0.000401f, - -0.000139f, +0.000481f, +0.000235f, +0.001033f, -0.000438f, +0.000343f - }, - { - +0.012568f, +0.160851f, -0.017435f, +0.065937f, -0.002850f, +0.000815f, -0.001525f, +0.000618f, +0.002611f, -0.009630f, - -0.003766f, -0.001157f, -0.002714f, +0.002647f, -0.002415f, +0.000797f, -0.008836f, -0.005736f, +0.008032f, -0.004360f, - -0.005519f, +0.001978f, -0.003252f, -0.003276f, -0.000637f, -0.002193f, -0.009458f, +0.012471f, +0.002548f, +0.000227f, - +0.003363f, -0.002987f, +0.006184f, +0.004739f, +0.003769f, +0.001933f, -0.009241f, +0.000097f, +0.002370f, +0.005016f, - +0.003398f, -0.004869f, -0.006551f, -0.002247f, -0.006138f, -0.003941f, -0.003289f, -0.001925f, -0.006650f, +0.001476f, - +0.003342f, +0.000364f, +0.003912f, -0.000966f, +0.001396f, +0.001578f, +0.003094f, +0.001794f, -0.002538f, -0.000830f, - +0.003936f, -0.002879f, +0.000757f, -0.000757f, -0.000647f, -0.000743f, +0.002558f, -0.000780f, +0.001439f, -0.002301f, - -0.002036f, +0.000791f, +0.000016f, +0.000563f, -0.002225f, -0.000321f, +0.000758f, +0.000953f, -0.000436f, +0.000412f, - -0.001387f, -0.000348f, +0.000416f, -0.000528f, -0.000432f, -0.001223f, -0.000355f, -0.000519f, -0.000839f, -0.000273f, - +0.001013f, +0.000232f, +0.000503f, -0.000665f, -0.000493f, -0.000072f - }, - { - -0.001776f, -0.015605f, +0.000114f, +0.002210f, -0.002107f, +0.000086f, -0.000069f, -0.000586f, -0.000060f, +0.005060f, - -0.002886f, -0.001349f, +0.002608f, -0.008097f, +0.006315f, +0.004761f, +0.025259f, +0.015366f, +0.010829f, -0.016228f, - +0.000644f, +0.009370f, +0.008039f, +0.007609f, -0.015480f, +0.005753f, +0.023120f, -0.000059f, +0.001426f, -0.015186f, - +0.004893f, +0.010931f, +0.002441f, +0.018634f, +0.003952f, -0.008449f, -0.004033f, -0.003751f, +0.003977f, -0.002384f, - -0.000843f, +0.000539f, -0.000513f, +0.000398f, +0.000436f, -0.002225f, +0.000589f, -0.001805f, +0.001830f, -0.001378f, - +0.000623f, -0.004651f, +0.000176f, -0.000471f, -0.001747f, +0.000246f, +0.000880f, -0.001899f, -0.000509f, -0.001576f, - +0.000798f, +0.001874f, -0.000195f, +0.002348f, +0.001807f, -0.000408f, +0.001089f, +0.001123f, +0.000622f, +0.001731f, - +0.000354f, +0.001740f, +0.002778f, -0.000269f, +0.000379f, +0.000988f, +0.000247f, -0.000045f, +0.000642f, -0.001710f, - -0.000642f, -0.000399f, -0.000365f, +0.000508f, +0.000084f, -0.000672f, -0.000146f, -0.000198f, +0.000177f, -0.000562f, - +0.000089f, -0.000581f, -0.000999f, +0.000708f, -0.000171f, +0.000472f - }, - { - -0.028570f, +0.142406f, +0.000757f, +0.079307f, -0.006764f, +0.002228f, -0.002286f, +0.011954f, -0.001501f, +0.010502f, - -0.000980f, -0.008892f, -0.000832f, -0.011245f, +0.003237f, +0.001346f, +0.001724f, -0.000876f, +0.008586f, +0.009111f, - -0.000693f, -0.008562f, +0.004053f, +0.002325f, +0.005757f, -0.007550f, -0.006333f, +0.001348f, -0.000414f, -0.004892f, - -0.003906f, +0.002033f, +0.003053f, -0.004045f, +0.002363f, -0.001202f, -0.004815f, -0.001527f, -0.003121f, +0.004430f, - -0.000713f, -0.002322f, +0.004531f, -0.007884f, -0.001447f, -0.007108f, -0.006193f, +0.001807f, -0.002338f, +0.004652f, - -0.007451f, +0.002849f, -0.000979f, +0.004603f, +0.002244f, +0.000895f, -0.000511f, -0.001547f, +0.001679f, -0.001211f, - +0.001292f, +0.001455f, -0.001724f, +0.003030f, -0.000612f, -0.001168f, +0.000856f, +0.001881f, -0.001086f, -0.001666f, - +0.001080f, +0.000618f, +0.000439f, +0.001565f, +0.001024f, +0.000233f, +0.000100f, -0.000406f, -0.000466f, +0.000422f, - +0.001476f, +0.000071f, -0.000493f, +0.000156f, -0.001629f, +0.000600f, +0.000535f, -0.001143f, -0.000341f, +0.000412f, - +0.000443f, -0.000132f, -0.000122f, -0.000056f, -0.000867f, -0.000159f - }, - { - -0.001767f, +0.002266f, -0.004004f, +0.003286f, +0.002076f, +0.000092f, +0.000417f, +0.002160f, +0.005800f, +0.000014f, - +0.005655f, +0.001622f, +0.000459f, -0.013984f, +0.010422f, +0.017627f, +0.022761f, +0.010582f, +0.002997f, +0.014452f, - +0.002391f, -0.013780f, -0.004364f, -0.013115f, -0.005317f, +0.007327f, -0.000204f, -0.007442f, +0.005067f, -0.001498f, - +0.006945f, -0.005735f, -0.019377f, +0.000832f, -0.001521f, +0.001903f, +0.005415f, -0.002253f, -0.002109f, -0.003548f, - -0.000913f, +0.003933f, +0.004705f, +0.003373f, -0.011432f, -0.000094f, +0.000985f, +0.002700f, +0.001280f, -0.001849f, - +0.006513f, -0.001312f, +0.002038f, -0.003199f, -0.000414f, -0.001529f, -0.001533f, +0.001708f, +0.001308f, +0.001942f, - +0.000945f, -0.003400f, -0.001518f, -0.001242f, +0.002876f, -0.002180f, -0.001568f, +0.000243f, -0.001633f, -0.001724f, - +0.002830f, -0.001018f, -0.001503f, -0.001708f, +0.002059f, +0.000192f, +0.000005f, -0.002047f, -0.000580f, +0.000368f, - -0.000900f, +0.000791f, -0.000012f, +0.000075f, +0.000021f, -0.000600f, -0.000246f, +0.000079f, -0.000528f, -0.000144f, - -0.000285f, +0.000143f, -0.000372f, -0.001094f, +0.001152f, -0.000741f - }, - { - +0.055432f, +0.099860f, -0.000121f, +0.071189f, +0.002313f, -0.000125f, +0.003120f, +0.003069f, +0.001837f, +0.002676f, - -0.009307f, -0.010624f, -0.000045f, -0.003002f, +0.001019f, -0.005845f, +0.001376f, +0.001672f, -0.007471f, +0.003720f, - +0.001255f, -0.001114f, -0.001320f, -0.002422f, -0.006511f, +0.000874f, +0.002028f, -0.001423f, -0.007817f, +0.002722f, - -0.002537f, -0.000962f, -0.010938f, +0.004668f, +0.000442f, +0.002726f, +0.004294f, -0.001822f, +0.001077f, -0.005860f, - +0.002522f, +0.009475f, +0.001492f, +0.000796f, -0.003509f, +0.001190f, +0.003069f, -0.007269f, -0.000941f, -0.007795f, - -0.006353f, +0.002674f, -0.005354f, +0.002732f, +0.002752f, -0.002583f, +0.000260f, +0.000321f, +0.001693f, -0.000873f, - -0.000871f, +0.000595f, +0.000509f, -0.001404f, -0.000482f, -0.000381f, -0.001481f, +0.000615f, -0.000015f, -0.001169f, - +0.000055f, -0.000307f, +0.002347f, -0.000304f, +0.000895f, +0.001019f, -0.000247f, +0.001036f, +0.000269f, +0.001255f, - -0.000349f, -0.000936f, +0.000003f, +0.000447f, +0.000239f, -0.000783f, -0.000823f, +0.000442f, -0.000451f, -0.000135f, - -0.000310f, +0.000452f, -0.000125f, +0.000000f, -0.000358f, -0.000344f - }, - { - +0.001927f, +0.035730f, -0.012597f, +0.002116f, +0.006916f, -0.003990f, -0.005560f, -0.001664f, +0.003645f, -0.008972f, - +0.001734f, +0.001800f, +0.001955f, -0.000068f, -0.003932f, +0.006794f, +0.009333f, -0.007631f, +0.023726f, -0.002977f, - +0.003203f, +0.002576f, -0.007465f, +0.005996f, +0.006846f, +0.008632f, -0.002347f, +0.005267f, +0.004505f, +0.005977f, - -0.003155f, +0.003941f, +0.008595f, -0.000882f, -0.011550f, +0.003693f, -0.006007f, +0.008808f, -0.005676f, -0.002256f, - +0.005686f, -0.007008f, -0.006268f, -0.002901f, +0.000103f, +0.001007f, +0.001251f, -0.002431f, -0.000461f, +0.002121f, - +0.004065f, -0.003216f, +0.001885f, -0.001508f, -0.001130f, +0.000753f, +0.001457f, -0.003712f, +0.000793f, +0.001278f, - +0.002529f, -0.001158f, +0.001297f, +0.001740f, +0.000656f, -0.001073f, -0.000562f, -0.001794f, +0.000209f, -0.000276f, - +0.001028f, -0.001902f, -0.000291f, -0.000170f, -0.000866f, +0.000590f, -0.001141f, +0.001367f, +0.000150f, -0.000207f, - +0.000688f, -0.000237f, +0.000276f, -0.000361f, +0.000473f, -0.000837f, +0.000114f, +0.000346f, -0.000165f, -0.000493f, - +0.000056f, -0.000908f, -0.000258f, +0.000544f, +0.000152f, +0.000018f - }, - { - +0.039298f, -0.107858f, -0.033545f, +0.019091f, +0.010333f, -0.012951f, -0.000032f, -0.003344f, -0.008293f, -0.004063f, - +0.000188f, +0.011609f, +0.001096f, +0.000706f, -0.004416f, +0.010184f, +0.003443f, +0.002327f, -0.010758f, +0.002243f, - -0.013378f, -0.003639f, +0.006040f, +0.005144f, -0.004856f, +0.015455f, -0.004771f, +0.012582f, +0.013174f, -0.000509f, - +0.001618f, +0.000891f, +0.003879f, -0.002163f, -0.000420f, +0.001412f, +0.001159f, +0.002639f, -0.005804f, -0.003833f, - +0.001247f, +0.000579f, +0.004234f, +0.003601f, -0.000112f, -0.003063f, +0.002140f, -0.002001f, +0.000816f, +0.000381f, - -0.002429f, +0.002562f, -0.001322f, -0.002120f, -0.000460f, -0.001421f, +0.001893f, +0.000219f, -0.001068f, +0.001715f, - -0.002616f, +0.002264f, -0.000453f, +0.000376f, -0.003246f, +0.000822f, -0.001588f, +0.000610f, -0.001726f, +0.000869f, - +0.000009f, -0.000422f, +0.001284f, +0.000857f, -0.000631f, -0.001655f, +0.001488f, +0.000654f, -0.001781f, -0.000286f, - +0.000556f, +0.000395f, +0.000351f, +0.000032f, +0.000340f, +0.000533f, -0.000460f, -0.000152f, +0.000268f, +0.000224f, - +0.000005f, -0.000056f, +0.000209f, -0.000005f, -0.000668f, +0.000455f - }, - { - +0.005726f, +0.006836f, -0.015951f, -0.004541f, +0.012954f, +0.009406f, +0.002107f, +0.011605f, +0.000207f, -0.004787f, - +0.002955f, -0.002030f, +0.001274f, -0.026432f, +0.008321f, +0.003835f, -0.011725f, +0.005418f, -0.010700f, -0.002065f, - +0.002839f, -0.035471f, +0.010438f, -0.006205f, -0.007685f, +0.006728f, +0.001301f, +0.005985f, +0.000652f, -0.018987f, - -0.007423f, +0.006181f, +0.006080f, +0.002943f, +0.002473f, -0.005129f, +0.000794f, +0.004970f, +0.000872f, -0.002171f, - +0.002376f, +0.000673f, -0.002208f, -0.003183f, -0.002833f, +0.004521f, +0.004474f, -0.002318f, +0.000946f, +0.007418f, - +0.000602f, +0.001714f, +0.001823f, -0.003935f, +0.001753f, -0.000502f, +0.000435f, -0.002155f, -0.000415f, -0.000868f, - -0.001607f, -0.001080f, +0.001685f, -0.000915f, -0.001174f, +0.000884f, +0.000717f, -0.000965f, +0.001831f, +0.000903f, - -0.000601f, -0.001142f, +0.000482f, -0.001239f, +0.001079f, -0.000467f, +0.001603f, +0.000120f, +0.001550f, +0.001931f, - -0.000199f, -0.000165f, +0.001074f, -0.000448f, +0.000760f, -0.001251f, -0.000528f, -0.000580f, -0.001204f, +0.000024f, - -0.000194f, +0.000100f, +0.000474f, +0.000586f, -0.000561f, -0.000174f - }, - { - +0.063063f, -0.278205f, -0.039671f, +0.023902f, +0.025312f, +0.017294f, -0.023075f, -0.008527f, -0.010824f, +0.014375f, - +0.014389f, +0.004940f, -0.000602f, -0.012720f, +0.001812f, +0.001313f, -0.006072f, +0.000766f, -0.014450f, +0.001914f, - -0.000668f, -0.007840f, -0.005478f, +0.006300f, +0.001468f, -0.011856f, +0.000537f, +0.004074f, +0.001504f, +0.005338f, - +0.001599f, -0.003071f, -0.004355f, -0.002035f, -0.003350f, -0.003670f, -0.006362f, +0.001691f, +0.001810f, +0.004955f, - +0.002627f, -0.002083f, +0.000490f, +0.009171f, +0.001455f, +0.009224f, +0.000036f, -0.004393f, -0.002697f, -0.003755f, - -0.003637f, -0.004193f, +0.003771f, +0.003866f, -0.001175f, -0.001129f, -0.003168f, -0.000692f, -0.000153f, -0.002263f, - +0.000881f, +0.000231f, +0.000392f, -0.002715f, +0.000175f, -0.000229f, +0.000058f, -0.000203f, +0.001924f, +0.004245f, - +0.000517f, +0.000065f, +0.002934f, -0.000041f, -0.000875f, -0.001107f, -0.001186f, +0.000017f, -0.000389f, -0.000092f, - -0.000471f, +0.000168f, +0.000405f, +0.000372f, +0.001606f, +0.000066f, +0.000931f, -0.000117f, +0.000690f, -0.000240f, - +0.000823f, +0.000497f, -0.000060f, -0.000193f, +0.000472f, -0.000145f - }, - { - +0.010849f, -0.013021f, -0.017647f, +0.001814f, -0.000954f, -0.001311f, +0.002955f, +0.009786f, -0.002343f, +0.006287f, - -0.006675f, -0.002351f, +0.006375f, -0.017139f, -0.011598f, +0.022613f, +0.006697f, +0.005198f, -0.001393f, -0.003207f, - +0.013671f, +0.002631f, -0.003011f, -0.019196f, -0.004429f, -0.001699f, +0.006971f, +0.020358f, +0.008844f, +0.007972f, - -0.013340f, +0.001540f, -0.004312f, -0.000118f, +0.005722f, +0.003737f, +0.005852f, +0.009007f, -0.005744f, -0.002741f, - +0.001769f, -0.003019f, +0.001768f, -0.003149f, -0.000530f, -0.001927f, +0.003289f, +0.002714f, +0.001151f, -0.001166f, - +0.003568f, -0.002004f, -0.000524f, -0.001592f, +0.003357f, +0.002932f, -0.002019f, +0.002001f, +0.001010f, +0.000316f, - -0.002176f, +0.000238f, +0.002571f, -0.000928f, -0.000439f, -0.000460f, -0.002861f, +0.000648f, +0.002478f, -0.001978f, - -0.000073f, +0.000113f, +0.001273f, +0.000795f, -0.000027f, +0.000334f, +0.000497f, -0.000145f, -0.000046f, +0.000138f, - -0.000207f, +0.000880f, +0.000344f, +0.000951f, -0.000552f, -0.000580f, +0.001436f, -0.000432f, +0.001057f, +0.000552f, - +0.000221f, +0.001343f, -0.000300f, +0.000350f, +0.000958f, +0.000270f - }, - { - -0.006620f, -0.204228f, -0.030984f, +0.018097f, +0.008175f, -0.016265f, +0.001241f, -0.012709f, +0.000489f, +0.001128f, - +0.018834f, -0.016320f, +0.004159f, +0.005432f, -0.008831f, +0.007293f, +0.006135f, -0.013345f, -0.012758f, -0.013855f, - +0.005239f, +0.003008f, -0.012652f, +0.002424f, +0.003864f, +0.014107f, +0.002676f, +0.000808f, +0.003648f, +0.002162f, - +0.002894f, -0.003116f, +0.000899f, +0.004302f, +0.001432f, +0.004006f, -0.002547f, +0.001696f, +0.000284f, -0.003696f, - -0.004010f, -0.005784f, -0.004917f, -0.000399f, -0.001787f, +0.001128f, +0.002926f, +0.001782f, +0.004105f, +0.001242f, - +0.004629f, +0.002309f, -0.002039f, -0.004341f, +0.001390f, +0.000715f, -0.001201f, -0.002162f, -0.002151f, +0.001415f, - +0.000338f, +0.002138f, -0.002109f, -0.001270f, +0.000348f, +0.001936f, +0.000047f, +0.001170f, +0.001049f, +0.003256f, - -0.000368f, +0.000535f, +0.000163f, +0.000723f, -0.000747f, -0.000117f, -0.000444f, -0.001142f, +0.001023f, -0.001136f, - +0.000244f, -0.000826f, -0.001602f, -0.000030f, -0.001241f, -0.000439f, -0.001686f, +0.000815f, +0.000395f, -0.000474f, - +0.000445f, -0.000129f, -0.001163f, +0.000096f, -0.000259f, -0.000540f - } - }, - { - { - -0.000674f, +0.025484f, -0.011719f, +0.031493f, -0.002843f, +0.000382f, -0.003131f, -0.002809f, -0.001260f, -0.000113f, - -0.005692f, -0.009160f, +0.002239f, +0.006914f, +0.005751f, +0.027285f, +0.009128f, +0.006269f, +0.006104f, -0.010107f, - -0.000870f, +0.005735f, +0.000007f, +0.011451f, -0.002147f, +0.001450f, -0.020833f, -0.007667f, -0.003493f, +0.009728f, - +0.001961f, +0.001569f, +0.008406f, -0.002275f, +0.002059f, -0.002170f, +0.002375f, +0.000967f, -0.003310f, +0.001480f, - +0.003688f, -0.005992f, -0.003397f, -0.000932f, +0.002641f, +0.001058f, +0.002067f, +0.001509f, -0.002094f, +0.000018f, - +0.001198f, -0.001986f, -0.000850f, -0.000206f, -0.000897f, +0.002420f, +0.001177f, +0.001186f, +0.001520f, +0.002696f, - +0.000582f, +0.001500f, +0.002684f, +0.002264f, +0.002326f, +0.001793f, +0.000123f, -0.000197f, -0.000150f, +0.000747f, - +0.001867f, -0.000066f, -0.000024f, -0.000148f, -0.001240f, +0.000464f, +0.000553f, -0.000347f, -0.001404f, +0.000731f, - -0.000360f, -0.000257f, -0.001277f, +0.000464f, +0.000073f, -0.000463f, -0.001009f, -0.000560f, -0.000022f, -0.000591f, - -0.000388f, +0.000029f, +0.000358f, -0.000267f, +0.000179f, +0.000038f - }, - { - -0.001282f, -0.101385f, +0.000149f, +0.012574f, +0.004734f, +0.003070f, -0.002190f, +0.005505f, +0.001462f, -0.005975f, - -0.019011f, +0.009150f, -0.003909f, +0.005460f, -0.000512f, -0.008161f, +0.002387f, +0.005487f, +0.008911f, +0.006394f, - +0.015950f, +0.000698f, -0.005150f, +0.002213f, -0.013337f, -0.006576f, +0.001239f, -0.004906f, -0.005634f, +0.003885f, - -0.008708f, -0.007601f, +0.006687f, +0.004469f, -0.001526f, +0.002775f, +0.004658f, +0.007103f, +0.004251f, +0.002748f, - -0.001422f, -0.000138f, +0.003305f, +0.000696f, +0.001157f, +0.003898f, +0.002867f, +0.002008f, +0.002715f, +0.000455f, - +0.001980f, -0.004825f, +0.000444f, -0.001032f, -0.002683f, +0.002321f, +0.000220f, -0.000441f, +0.000860f, +0.000127f, - -0.001924f, +0.001323f, -0.001792f, -0.000586f, +0.001754f, +0.000583f, +0.001285f, -0.001961f, -0.000220f, -0.001584f, - -0.001263f, -0.001210f, +0.000834f, -0.000656f, +0.001481f, -0.000746f, +0.001418f, -0.001073f, +0.000378f, -0.000472f, - -0.001095f, +0.001048f, -0.000507f, +0.000284f, +0.000094f, +0.000574f, -0.000207f, +0.000507f, -0.000001f, +0.000471f, - -0.000737f, -0.000207f, +0.000010f, +0.000103f, +0.000240f, -0.000658f - }, - { - +0.004354f, -0.002402f, +0.021918f, +0.062429f, -0.036406f, -0.001033f, +0.000618f, +0.004010f, +0.005936f, +0.004273f, - +0.003471f, +0.000984f, +0.000706f, +0.003534f, +0.009490f, -0.010152f, +0.008621f, +0.005507f, +0.011796f, -0.001428f, - -0.004516f, -0.021094f, +0.006869f, +0.002367f, -0.004332f, -0.000911f, +0.000808f, -0.008556f, -0.002028f, -0.000572f, - -0.005968f, -0.009458f, +0.009618f, +0.000699f, -0.000332f, +0.002508f, -0.008806f, -0.001933f, +0.002238f, +0.006439f, - -0.006964f, -0.003364f, -0.002883f, -0.005613f, -0.001113f, +0.001376f, -0.002271f, -0.001833f, -0.001827f, -0.001172f, - +0.002561f, +0.003009f, -0.000556f, -0.002857f, -0.002805f, +0.000043f, -0.000519f, +0.000228f, -0.000549f, +0.001388f, - -0.001562f, -0.001296f, +0.001320f, -0.000866f, +0.001395f, +0.000348f, +0.001651f, -0.000654f, +0.001098f, -0.000774f, - -0.001192f, -0.000184f, -0.000811f, -0.000500f, -0.000814f, -0.000597f, -0.001185f, -0.001073f, -0.000798f, +0.000349f, - -0.000126f, +0.000168f, +0.000335f, +0.000059f, +0.000899f, -0.000675f, +0.000550f, +0.000177f, -0.000128f, -0.000106f, - +0.000464f, -0.001000f, -0.000023f, +0.000120f, -0.000389f, +0.000146f - }, - { - -0.004938f, +0.011682f, +0.008535f, +0.000898f, +0.000915f, -0.001246f, +0.001332f, -0.002487f, +0.001075f, -0.003546f, - +0.000472f, +0.003873f, +0.011387f, +0.010297f, +0.008565f, +0.008043f, +0.033446f, -0.026397f, +0.015078f, +0.008979f, - +0.003504f, +0.010104f, -0.003362f, +0.006844f, -0.008406f, +0.005980f, +0.007596f, +0.000409f, -0.006447f, +0.007174f, - +0.002338f, +0.001076f, +0.009244f, +0.007479f, -0.002468f, +0.002859f, -0.004195f, -0.000867f, -0.000743f, -0.002180f, - -0.001711f, +0.000554f, -0.001326f, +0.004227f, +0.000693f, +0.001809f, -0.000113f, +0.001097f, -0.000975f, -0.000691f, - +0.003926f, -0.000293f, -0.001681f, +0.002619f, -0.001232f, -0.002837f, -0.001586f, -0.000110f, -0.001631f, +0.001601f, - +0.001870f, +0.000022f, +0.000869f, +0.000676f, +0.001621f, -0.000482f, -0.000315f, -0.001529f, -0.000584f, +0.000248f, - +0.000901f, -0.001042f, +0.000719f, -0.000237f, +0.001189f, -0.000297f, -0.001510f, +0.000409f, +0.000760f, +0.000463f, - +0.000799f, -0.000745f, -0.000082f, +0.000819f, -0.000851f, +0.000155f, +0.000299f, +0.000886f, -0.000995f, -0.000091f, - +0.000562f, +0.000167f, +0.000367f, +0.000075f, -0.000091f, +0.000111f - }, - { - +0.017277f, +0.137196f, -0.014053f, +0.061965f, +0.006144f, +0.001604f, +0.004373f, -0.007067f, -0.000992f, -0.008677f, - -0.000310f, -0.004151f, -0.008521f, +0.007714f, -0.015524f, +0.008628f, -0.009246f, +0.001828f, -0.001264f, -0.001960f, - -0.007126f, -0.000092f, -0.000415f, -0.000623f, +0.001737f, -0.004809f, -0.004418f, -0.001481f, +0.004121f, +0.000393f, - +0.005210f, +0.000178f, -0.000496f, +0.012185f, -0.000225f, -0.000975f, +0.004399f, -0.004421f, +0.004791f, +0.001320f, - +0.001209f, -0.004161f, -0.007158f, -0.003489f, -0.002656f, -0.002329f, -0.002013f, -0.003473f, -0.006188f, -0.001520f, - +0.004383f, +0.002855f, -0.001087f, +0.003436f, +0.001663f, +0.000806f, +0.003924f, -0.000012f, -0.000083f, +0.000049f, - +0.002758f, -0.002944f, +0.000837f, -0.000149f, -0.002335f, +0.000858f, +0.002928f, -0.000176f, +0.002018f, -0.002092f, - -0.001395f, +0.000323f, +0.000907f, +0.000104f, -0.001969f, -0.000154f, -0.000179f, -0.000215f, -0.000227f, -0.000274f, - -0.000867f, +0.000036f, +0.000033f, -0.000416f, -0.000252f, -0.000560f, -0.000449f, -0.000554f, -0.000945f, +0.000580f, - +0.000356f, +0.000424f, +0.000328f, +0.000250f, -0.000607f, -0.000609f - }, - { - +0.000940f, -0.016543f, -0.003623f, +0.001758f, -0.002071f, +0.000572f, +0.000446f, -0.001896f, +0.001208f, +0.003137f, - -0.005128f, +0.000019f, -0.000965f, +0.013464f, -0.006567f, +0.007785f, +0.012310f, +0.026586f, +0.000392f, -0.004126f, - +0.001816f, +0.002107f, +0.006899f, -0.001498f, +0.004368f, +0.003156f, -0.009868f, +0.026167f, +0.003348f, -0.016675f, - +0.004777f, +0.001147f, +0.004736f, +0.013901f, +0.001652f, +0.001414f, -0.006188f, -0.003227f, -0.001206f, +0.001531f, - -0.003929f, -0.000883f, +0.005112f, +0.000404f, +0.000074f, -0.003360f, -0.002064f, +0.001898f, +0.000231f, +0.000617f, - -0.004006f, -0.001504f, -0.000730f, -0.002657f, +0.000731f, -0.000632f, -0.001011f, -0.000452f, -0.001173f, -0.000157f, - -0.000059f, +0.003021f, +0.001979f, +0.000862f, -0.000112f, +0.001630f, +0.001282f, +0.002333f, +0.000387f, +0.001976f, - +0.002278f, +0.001173f, +0.000616f, +0.001168f, -0.001363f, +0.001181f, +0.000535f, -0.000610f, -0.000258f, -0.000310f, - +0.000249f, -0.000491f, -0.000615f, -0.000010f, +0.000664f, -0.000828f, +0.000614f, -0.000498f, +0.000151f, -0.000407f, - -0.000444f, -0.000045f, -0.000564f, +0.000094f, +0.000241f, -0.000270f - }, - { - +0.050863f, +0.053880f, -0.004017f, +0.079882f, -0.011566f, +0.000546f, +0.001284f, +0.000861f, +0.000614f, +0.004539f, - +0.003658f, -0.006640f, -0.011571f, -0.008662f, -0.003600f, +0.005118f, +0.003465f, -0.001565f, +0.004941f, +0.007099f, - +0.007431f, -0.003746f, -0.005569f, +0.006003f, +0.001959f, -0.006446f, -0.004214f, -0.002426f, -0.003330f, -0.000949f, - -0.004707f, +0.003712f, +0.002200f, -0.001644f, -0.001113f, +0.001105f, -0.002198f, -0.006405f, -0.001694f, +0.004303f, - -0.003125f, -0.002479f, +0.002067f, -0.001108f, -0.003882f, +0.000989f, -0.006817f, -0.002656f, +0.000152f, +0.000278f, - +0.000481f, -0.003950f, -0.001468f, +0.004241f, +0.001934f, +0.001074f, +0.000319f, -0.002250f, +0.000720f, -0.000258f, - +0.001574f, +0.000749f, +0.000561f, +0.000445f, -0.000253f, -0.000261f, +0.001081f, -0.000545f, -0.001205f, -0.000488f, - +0.000061f, +0.002164f, +0.000044f, +0.000417f, +0.002879f, -0.000244f, -0.000595f, -0.000181f, +0.000795f, -0.000192f, - +0.001179f, +0.000815f, -0.000861f, -0.001376f, +0.000290f, -0.000043f, +0.000599f, -0.001126f, -0.000222f, +0.000555f, - +0.000530f, +0.000151f, -0.000245f, -0.000055f, -0.000491f, -0.000591f - }, - { - +0.000268f, -0.001139f, -0.008807f, +0.001949f, +0.000551f, +0.001922f, -0.001153f, -0.000751f, +0.010134f, -0.000755f, - +0.006014f, -0.000890f, +0.004201f, -0.004875f, +0.002548f, +0.016722f, +0.021887f, +0.014833f, +0.008744f, -0.002110f, - +0.003768f, +0.000082f, +0.000033f, -0.012917f, -0.006122f, +0.010367f, -0.006084f, -0.007135f, -0.006629f, +0.016791f, - -0.007791f, +0.003859f, -0.006405f, -0.004825f, -0.002035f, +0.003517f, +0.004640f, +0.005046f, -0.002453f, -0.007044f, - -0.000997f, +0.005480f, +0.005348f, -0.001090f, -0.004567f, -0.003663f, +0.001820f, +0.001510f, +0.002586f, -0.000372f, - +0.004677f, -0.001354f, -0.000635f, -0.000834f, -0.002299f, -0.001127f, -0.000740f, +0.001025f, +0.001546f, +0.001611f, - -0.001067f, -0.002023f, -0.001592f, +0.000489f, +0.002105f, -0.002470f, -0.000268f, -0.001733f, -0.001509f, +0.000379f, - +0.002200f, -0.002325f, -0.001711f, +0.000300f, +0.000045f, +0.000490f, -0.000398f, -0.001924f, -0.000578f, +0.000777f, - +0.000047f, +0.000190f, +0.000724f, +0.000073f, -0.000290f, -0.000294f, -0.000392f, +0.000183f, +0.000037f, -0.000345f, - -0.000434f, -0.000208f, -0.000531f, -0.001072f, +0.000626f, +0.000077f - }, - { - -0.015464f, +0.203524f, +0.003531f, +0.073897f, -0.006766f, -0.001782f, -0.001370f, +0.005427f, +0.003895f, -0.004500f, - -0.010179f, -0.000867f, +0.001613f, -0.001368f, +0.003531f, +0.000115f, -0.007249f, +0.001111f, -0.008862f, +0.006478f, - +0.004928f, -0.000745f, -0.004426f, -0.001010f, -0.002919f, -0.000025f, -0.002292f, -0.000805f, -0.001969f, -0.000910f, - -0.004667f, -0.006449f, -0.002118f, -0.000259f, +0.005009f, +0.002201f, +0.000524f, +0.002353f, -0.004736f, -0.001324f, - -0.000564f, +0.007293f, +0.001930f, -0.000854f, +0.000088f, +0.001081f, -0.001717f, -0.005637f, -0.001801f, -0.005652f, - -0.002509f, -0.001172f, -0.001038f, +0.001220f, -0.000668f, +0.002040f, +0.000416f, +0.002838f, -0.003894f, +0.001353f, - -0.001152f, +0.002115f, -0.002238f, -0.000995f, +0.001182f, -0.001474f, -0.000062f, +0.000272f, -0.000927f, +0.000370f, - -0.000239f, +0.001166f, +0.000579f, +0.000383f, +0.000353f, +0.000938f, +0.001135f, +0.000694f, +0.000381f, +0.000295f, - -0.001111f, +0.000124f, +0.000202f, +0.000357f, -0.000475f, -0.000400f, -0.000705f, +0.000330f, -0.000655f, +0.000263f, - -0.000216f, -0.000223f, +0.000103f, +0.000025f, -0.000518f, -0.000013f - }, - { - -0.003439f, +0.037383f, -0.005242f, -0.007440f, +0.008479f, -0.008895f, +0.004807f, +0.003708f, -0.001211f, -0.007862f, - +0.001105f, +0.004850f, +0.006198f, -0.001164f, +0.002978f, -0.005046f, +0.007773f, -0.004984f, +0.016052f, -0.002240f, - +0.003938f, -0.005606f, -0.004648f, +0.002715f, +0.005753f, -0.004178f, +0.006185f, +0.002983f, -0.003457f, +0.006470f, - +0.006687f, -0.000686f, +0.010187f, -0.005147f, -0.010955f, +0.006653f, -0.002382f, +0.001753f, -0.003506f, -0.000275f, - +0.001755f, -0.003604f, -0.005532f, -0.001103f, -0.004793f, +0.002300f, -0.001266f, -0.001484f, +0.001664f, +0.003923f, - -0.000135f, -0.002364f, -0.000240f, -0.001696f, +0.000540f, +0.001094f, -0.000550f, -0.000744f, +0.000049f, +0.000853f, - +0.002236f, -0.001134f, +0.000982f, +0.001564f, +0.000181f, +0.000554f, -0.001254f, -0.001998f, -0.000321f, -0.000689f, - +0.001106f, +0.000632f, -0.002000f, +0.000734f, -0.000796f, +0.000717f, -0.000755f, +0.000860f, +0.000328f, +0.000768f, - +0.000626f, +0.000190f, -0.000364f, -0.000066f, -0.001158f, +0.000612f, -0.000066f, +0.000021f, -0.000167f, +0.000590f, - -0.000519f, -0.000066f, -0.000936f, -0.000342f, +0.000467f, -0.000019f - }, - { - -0.038838f, -0.055096f, +0.006596f, +0.011652f, +0.004914f, -0.009050f, -0.014620f, +0.000111f, -0.009166f, +0.003861f, - -0.001742f, +0.008958f, -0.005043f, +0.006044f, +0.000207f, -0.004222f, +0.011678f, -0.002254f, -0.005152f, -0.010658f, - -0.008738f, -0.002077f, +0.001362f, +0.006279f, -0.003491f, +0.009276f, +0.006450f, +0.004168f, +0.008676f, -0.000572f, - -0.002246f, +0.004142f, +0.001370f, -0.001777f, +0.008798f, -0.002251f, -0.006094f, +0.005974f, -0.004920f, -0.001989f, - -0.004857f, +0.003619f, +0.005500f, +0.002515f, +0.001551f, -0.003560f, +0.003065f, -0.002226f, +0.000176f, +0.001643f, - -0.001889f, -0.000276f, +0.001629f, -0.001314f, -0.004899f, +0.001829f, +0.000688f, +0.001986f, -0.000971f, -0.003449f, - +0.001028f, +0.001096f, +0.001284f, -0.000371f, -0.000362f, -0.000613f, -0.002448f, +0.000074f, +0.000036f, -0.001034f, - +0.000062f, +0.000278f, -0.000837f, +0.000985f, -0.000545f, -0.001152f, +0.001461f, -0.001670f, +0.000626f, -0.000270f, - -0.000029f, +0.000554f, +0.001086f, -0.000032f, -0.000075f, -0.000645f, +0.000501f, -0.000219f, -0.000488f, -0.000269f, - +0.000552f, -0.000490f, +0.000516f, +0.000474f, -0.000517f, -0.000205f - }, - { - -0.004983f, -0.010087f, +0.013322f, -0.009805f, +0.010125f, +0.000281f, +0.013190f, +0.008713f, +0.000222f, -0.005692f, - +0.002997f, -0.000593f, -0.001148f, -0.022464f, +0.013488f, -0.008194f, -0.000342f, +0.003477f, -0.023843f, +0.012380f, - -0.018720f, -0.005566f, -0.014007f, +0.001484f, +0.003123f, -0.009195f, +0.005449f, +0.018912f, +0.000721f, -0.020655f, - -0.002146f, +0.004094f, -0.000271f, +0.005244f, +0.006390f, -0.000219f, +0.000191f, +0.001274f, -0.005531f, -0.004030f, - +0.005326f, +0.000544f, -0.005315f, -0.004540f, +0.002608f, +0.004333f, -0.000697f, -0.002425f, +0.004621f, +0.000653f, - +0.002010f, +0.002436f, -0.000088f, +0.000895f, -0.002491f, +0.002734f, -0.000171f, +0.000245f, +0.000528f, -0.000872f, - -0.003898f, +0.000995f, -0.000569f, +0.001418f, +0.000403f, -0.002306f, +0.001144f, +0.001612f, +0.000286f, +0.001299f, - -0.002310f, +0.000024f, -0.000766f, -0.000243f, +0.000393f, +0.000136f, -0.000225f, +0.000799f, +0.002321f, +0.000019f, - +0.001171f, +0.000509f, +0.000145f, +0.000001f, -0.000494f, -0.000477f, -0.000955f, -0.000026f, -0.000892f, -0.000649f, - -0.000442f, +0.000044f, +0.000192f, +0.000679f, -0.000856f, +0.000251f - }, - { - -0.094872f, -0.102125f, +0.027667f, +0.008892f, +0.037536f, -0.028966f, -0.013621f, +0.012109f, -0.007038f, -0.006334f, - +0.011811f, +0.012793f, +0.001923f, -0.010703f, +0.000692f, -0.006876f, +0.005572f, +0.004999f, -0.020903f, +0.005267f, - -0.009341f, -0.004317f, +0.002558f, -0.003176f, +0.003485f, -0.015541f, +0.002969f, +0.005911f, +0.004342f, -0.001254f, - -0.000076f, +0.000139f, -0.006427f, -0.003626f, +0.001554f, -0.002911f, -0.003195f, -0.000526f, -0.003123f, +0.002637f, - +0.002452f, +0.002028f, +0.005813f, +0.005269f, +0.004536f, +0.011766f, -0.000887f, -0.002280f, -0.002683f, -0.003393f, - -0.008457f, +0.001623f, +0.000045f, -0.000124f, +0.000602f, -0.002859f, -0.001969f, +0.001311f, +0.000030f, -0.000442f, - -0.003414f, +0.001129f, +0.000029f, +0.000741f, -0.000990f, +0.000222f, -0.000058f, +0.001655f, +0.000659f, +0.001135f, - +0.001717f, +0.000609f, +0.000573f, +0.001017f, -0.001860f, -0.000505f, -0.001249f, +0.000783f, -0.001165f, -0.001008f, - -0.000350f, +0.000593f, -0.000457f, +0.000958f, +0.000711f, +0.000836f, +0.000515f, +0.000824f, -0.000040f, +0.000164f, - +0.000502f, +0.001251f, -0.000267f, -0.000360f, +0.000130f, +0.000214f - }, - { - -0.009373f, -0.022872f, +0.015120f, +0.002026f, -0.002388f, +0.000016f, +0.008719f, +0.001376f, +0.014588f, +0.004022f, - -0.003922f, -0.003030f, -0.002438f, -0.027887f, +0.025116f, +0.010542f, +0.000375f, -0.000060f, +0.007245f, +0.006349f, - -0.004770f, +0.005652f, -0.009854f, -0.010425f, -0.017030f, +0.011107f, -0.015379f, +0.029654f, +0.011056f, +0.010059f, - -0.008877f, -0.011212f, +0.001840f, +0.007306f, -0.001778f, +0.004511f, +0.009315f, +0.004220f, -0.000028f, +0.002288f, - -0.004299f, -0.000963f, -0.001394f, -0.002787f, -0.003699f, +0.002431f, +0.002026f, +0.003360f, -0.000932f, -0.001346f, - +0.002258f, -0.000151f, +0.000153f, -0.000720f, +0.001135f, +0.000705f, -0.001324f, +0.003030f, +0.000173f, +0.002226f, - -0.003061f, -0.000013f, +0.000912f, -0.001422f, -0.000921f, -0.000329f, -0.000776f, -0.000862f, +0.002278f, -0.000876f, - +0.000855f, -0.002203f, +0.000819f, +0.000980f, -0.000457f, +0.000333f, +0.000697f, -0.000271f, -0.000324f, +0.001365f, - -0.000359f, +0.000668f, +0.000399f, +0.001099f, -0.000194f, +0.000556f, +0.000436f, +0.000231f, +0.000970f, +0.000839f, - -0.000116f, +0.000481f, +0.000439f, +0.000540f, +0.000579f, +0.000482f - }, - { - -0.032571f, -0.183388f, +0.006618f, -0.012537f, +0.004010f, -0.003174f, -0.010001f, -0.000081f, -0.011719f, +0.011068f, - +0.008502f, -0.016548f, +0.016818f, -0.011041f, +0.017461f, +0.007429f, -0.007830f, -0.010239f, -0.009330f, -0.010401f, - +0.004506f, +0.002506f, -0.002119f, -0.009051f, +0.005547f, +0.005390f, +0.012584f, -0.003672f, +0.003330f, +0.004138f, - +0.004731f, -0.006157f, +0.004710f, +0.012232f, +0.000039f, +0.000514f, +0.000941f, -0.003748f, -0.000914f, -0.000203f, - -0.010388f, -0.001529f, -0.003040f, -0.004321f, +0.003125f, +0.002489f, +0.002196f, +0.003435f, +0.000197f, +0.003106f, - +0.002238f, +0.004828f, -0.007043f, +0.000683f, -0.002948f, +0.003116f, -0.002452f, +0.000597f, -0.003049f, +0.000448f, - -0.002227f, +0.004130f, -0.001636f, -0.001023f, +0.001380f, +0.000196f, +0.001019f, +0.002196f, -0.000430f, +0.002211f, - -0.000611f, +0.002122f, +0.000065f, -0.000542f, +0.000551f, -0.000121f, -0.000660f, -0.000177f, +0.000372f, -0.000869f, - +0.000397f, -0.000670f, -0.000988f, -0.000223f, -0.000476f, -0.001469f, -0.000353f, -0.000489f, +0.000185f, -0.000283f, - +0.000561f, -0.000338f, -0.000453f, -0.000645f, -0.000672f, -0.000044f - } - }, - { - { - +0.001805f, +0.042635f, -0.001119f, +0.005192f, -0.025707f, -0.001351f, -0.001336f, +0.001892f, +0.000975f, -0.002352f, - -0.012033f, -0.008921f, +0.007856f, +0.000976f, +0.004950f, +0.023437f, -0.000303f, -0.001240f, +0.001744f, -0.008412f, - -0.014013f, +0.002588f, -0.002543f, +0.002029f, -0.002017f, -0.006457f, -0.015315f, -0.001382f, -0.001901f, +0.008389f, - -0.000834f, -0.001154f, +0.003810f, -0.000278f, +0.002878f, -0.002973f, +0.001079f, +0.002781f, -0.002639f, -0.004107f, - +0.004434f, -0.002960f, -0.004268f, +0.004217f, +0.007978f, -0.003115f, -0.001223f, -0.000372f, -0.003951f, -0.000277f, - -0.000084f, -0.001410f, -0.001370f, -0.002662f, -0.000337f, +0.001087f, +0.000903f, +0.001501f, +0.000886f, +0.001815f, - +0.000344f, -0.000080f, +0.000924f, -0.000157f, +0.000562f, +0.000699f, -0.001158f, -0.002213f, -0.001076f, +0.000256f, - +0.001075f, -0.000145f, +0.000082f, +0.000596f, -0.000623f, -0.000021f, +0.000253f, +0.000292f, -0.001415f, -0.000145f, - -0.000909f, +0.000143f, -0.000875f, +0.000779f, +0.000513f, +0.000166f, +0.000070f, +0.000128f, -0.000154f, -0.000827f, - +0.000054f, -0.000216f, -0.000312f, -0.000777f, -0.000126f, -0.000058f - }, - { - -0.003272f, -0.089421f, +0.017246f, -0.030578f, -0.023992f, -0.001372f, -0.000615f, +0.010069f, -0.001269f, +0.004047f, - -0.009558f, +0.003954f, +0.001797f, +0.017229f, +0.007334f, -0.012428f, -0.009351f, -0.002729f, +0.008449f, +0.005182f, - +0.013361f, +0.007985f, -0.002563f, +0.001028f, -0.004729f, +0.006244f, +0.009660f, -0.005528f, -0.008471f, +0.007882f, - -0.003363f, -0.004799f, -0.001872f, +0.001306f, -0.003698f, +0.001256f, -0.000729f, +0.002511f, -0.001452f, -0.000401f, - -0.002594f, -0.002532f, +0.003343f, -0.001109f, -0.000049f, +0.001288f, +0.000791f, +0.000086f, -0.000847f, -0.000241f, - +0.001354f, -0.005583f, +0.000730f, +0.001541f, -0.001827f, -0.000025f, +0.000168f, +0.001721f, +0.000622f, +0.001304f, - -0.000699f, +0.000435f, -0.001855f, -0.001468f, +0.001462f, -0.000352f, +0.001240f, -0.000724f, +0.001990f, +0.000360f, - -0.000240f, -0.001580f, +0.000747f, +0.000019f, +0.001238f, -0.001191f, +0.000515f, -0.001633f, -0.000110f, +0.000195f, - -0.001147f, +0.000417f, -0.000475f, +0.000320f, +0.000422f, +0.000469f, -0.000617f, -0.000651f, -0.000902f, +0.000233f, - -0.000684f, +0.000149f, +0.000057f, -0.000145f, +0.000482f, -0.000310f - }, - { - -0.004898f, -0.011146f, +0.015996f, +0.065092f, -0.023166f, +0.000918f, +0.002808f, +0.003784f, +0.003062f, -0.002773f, - -0.007704f, +0.005111f, +0.002287f, +0.001670f, +0.011191f, -0.012723f, +0.004897f, -0.003557f, +0.001367f, -0.006560f, - -0.005383f, -0.014675f, +0.002020f, -0.005148f, +0.001894f, +0.004065f, +0.009218f, +0.001422f, -0.001099f, +0.000862f, - -0.005653f, -0.005030f, +0.008034f, -0.002713f, -0.002936f, +0.000284f, -0.008036f, +0.004375f, -0.000633f, +0.005307f, - -0.003461f, -0.000295f, +0.000463f, -0.003252f, -0.002342f, +0.001038f, +0.001300f, +0.001773f, +0.000804f, +0.000029f, - +0.002540f, +0.001690f, -0.001351f, -0.001683f, -0.001833f, +0.002194f, +0.001385f, +0.001256f, -0.001945f, +0.001524f, - -0.001134f, +0.000287f, +0.003014f, -0.000452f, +0.001967f, -0.000427f, +0.000394f, -0.000183f, +0.002524f, +0.000232f, - -0.001197f, +0.000543f, -0.000071f, +0.000253f, -0.000340f, -0.000194f, +0.000094f, -0.000378f, -0.000199f, +0.000704f, - +0.000327f, +0.000498f, +0.000038f, -0.001125f, +0.000317f, -0.000702f, +0.000024f, +0.000102f, +0.000176f, +0.000109f, - +0.000919f, -0.000220f, +0.000655f, +0.000202f, -0.000218f, +0.000143f - }, - { - +0.003714f, -0.008028f, -0.015019f, +0.002975f, +0.000735f, -0.001582f, +0.001310f, +0.000307f, +0.003951f, -0.003524f, - +0.000521f, +0.000546f, +0.003133f, +0.012838f, -0.002799f, -0.003065f, +0.028636f, -0.017555f, +0.024934f, +0.000156f, - +0.002230f, +0.002375f, -0.006464f, +0.004758f, -0.007616f, +0.009390f, +0.009014f, -0.000074f, -0.011611f, +0.009579f, - +0.006892f, -0.005807f, +0.000601f, +0.001265f, -0.006418f, -0.003520f, -0.008229f, -0.002147f, -0.005084f, -0.000559f, - +0.000728f, +0.000701f, -0.001137f, +0.006307f, +0.000919f, +0.000712f, -0.002607f, +0.002726f, +0.001132f, +0.001174f, - +0.002939f, +0.000086f, -0.000396f, +0.000599f, -0.001766f, -0.000397f, +0.000845f, +0.001369f, -0.001846f, -0.000700f, - -0.000372f, -0.001804f, +0.000874f, +0.001714f, +0.001670f, -0.001844f, +0.000632f, -0.000280f, -0.001276f, -0.000158f, - +0.001392f, -0.000707f, +0.000932f, -0.000309f, +0.000758f, +0.000488f, -0.000529f, -0.000264f, -0.000429f, -0.000221f, - +0.000352f, -0.000550f, -0.000661f, +0.000288f, -0.001244f, -0.000239f, +0.000616f, +0.001035f, -0.000670f, -0.000073f, - +0.000367f, -0.000381f, -0.000052f, -0.000393f, -0.000225f, +0.000073f - }, - { - -0.029451f, +0.030376f, -0.033023f, +0.045851f, -0.015128f, +0.000031f, +0.000958f, -0.015183f, -0.007552f, -0.014935f, - -0.006389f, -0.014656f, -0.009378f, +0.012501f, -0.014312f, +0.016109f, -0.003501f, -0.006940f, -0.009614f, -0.000365f, - -0.007564f, -0.006319f, +0.005022f, +0.004257f, -0.000701f, -0.006473f, -0.009152f, -0.007585f, +0.000200f, -0.003902f, - +0.002878f, -0.000570f, -0.006948f, +0.002710f, -0.006674f, +0.000101f, +0.008744f, -0.003784f, +0.005425f, -0.002540f, - -0.004553f, -0.006352f, -0.000863f, +0.003893f, +0.001287f, -0.000021f, +0.003222f, +0.000654f, -0.003458f, -0.003083f, - +0.000782f, +0.001553f, -0.001534f, +0.003952f, +0.000825f, -0.000822f, +0.000013f, -0.001237f, +0.001202f, +0.000111f, - +0.001056f, -0.002437f, +0.000608f, +0.000835f, -0.000286f, +0.002408f, +0.001520f, -0.000987f, +0.001901f, -0.000817f, - -0.000112f, -0.000127f, -0.000896f, -0.000012f, -0.000938f, +0.000614f, -0.000665f, -0.000493f, -0.000132f, -0.000233f, - -0.000650f, -0.000359f, +0.000545f, +0.000565f, +0.000232f, +0.000138f, -0.000271f, -0.000085f, -0.000191f, +0.000372f, - -0.000484f, +0.000176f, +0.000230f, +0.000563f, -0.000092f, -0.000123f - }, - { - +0.001031f, +0.004850f, +0.009069f, +0.000063f, -0.003847f, -0.000168f, -0.000351f, -0.000949f, +0.000991f, +0.000900f, - -0.001233f, +0.001527f, -0.001465f, +0.009061f, -0.010346f, -0.002631f, -0.021307f, +0.009143f, +0.004033f, -0.001498f, - +0.004203f, -0.004391f, +0.000854f, -0.000529f, +0.004276f, -0.001172f, -0.017771f, +0.023526f, +0.001552f, -0.016583f, - +0.007436f, -0.009417f, -0.007363f, +0.002349f, -0.001483f, +0.011168f, +0.005119f, +0.004432f, +0.000478f, -0.001155f, - -0.000485f, +0.002063f, +0.004800f, -0.000290f, -0.003192f, -0.002991f, -0.001008f, +0.000511f, -0.003299f, +0.001205f, - +0.000411f, +0.001902f, +0.000584f, -0.001418f, -0.000087f, -0.001383f, -0.001391f, -0.000644f, -0.001409f, +0.000679f, - -0.000045f, +0.003079f, +0.001938f, +0.000670f, -0.000206f, +0.000404f, -0.000223f, +0.001004f, +0.000030f, +0.000630f, - +0.000663f, +0.000484f, -0.000447f, +0.000953f, -0.001748f, +0.000362f, -0.000298f, -0.000888f, -0.000183f, -0.000163f, - +0.001292f, +0.000309f, -0.000568f, -0.000124f, +0.000637f, -0.000850f, +0.000636f, -0.000435f, +0.000123f, -0.000207f, - -0.000797f, +0.000065f, -0.000221f, -0.000112f, +0.000358f, -0.000214f - }, - { - -0.041432f, -0.061753f, +0.007117f, +0.088049f, +0.003788f, +0.001838f, -0.005533f, -0.005091f, +0.000763f, -0.009225f, - -0.001114f, -0.004365f, -0.000030f, +0.001757f, +0.001320f, +0.002832f, +0.000389f, -0.000683f, -0.002866f, -0.001966f, - -0.002146f, -0.001701f, -0.005867f, -0.006030f, -0.010288f, -0.004947f, +0.000294f, -0.006569f, -0.005799f, +0.000948f, - -0.002844f, +0.001704f, +0.002398f, +0.005435f, +0.002259f, +0.003983f, -0.001990f, -0.003386f, -0.003041f, -0.001614f, - -0.000291f, -0.002060f, +0.000469f, +0.004559f, -0.000599f, +0.004925f, -0.000983f, -0.001947f, -0.001679f, -0.001024f, - -0.002042f, -0.005909f, -0.002700f, -0.000175f, -0.000211f, +0.002110f, +0.001671f, -0.002712f, +0.001076f, -0.000798f, - +0.000629f, +0.000584f, -0.000194f, -0.001136f, -0.000080f, +0.000878f, +0.001314f, -0.000474f, -0.000392f, +0.000055f, - -0.000363f, +0.001672f, +0.000098f, -0.000189f, +0.000900f, -0.000893f, -0.000287f, -0.000331f, +0.000432f, -0.000058f, - +0.000547f, +0.000928f, +0.000271f, -0.000079f, +0.001054f, -0.000306f, +0.000556f, +0.000076f, +0.000023f, -0.000026f, - +0.000410f, +0.000277f, +0.000025f, +0.000195f, +0.000511f, +0.000447f - }, - { - +0.001801f, +0.010744f, -0.003272f, -0.003228f, -0.005309f, +0.001250f, -0.002155f, -0.004402f, +0.004761f, -0.003923f, - +0.004953f, +0.000855f, +0.006409f, -0.003902f, -0.000084f, -0.014804f, -0.033313f, -0.001633f, +0.019267f, -0.009830f, - -0.002212f, +0.011201f, +0.000799f, -0.006469f, -0.000542f, -0.005165f, -0.016787f, -0.006649f, +0.003323f, +0.020713f, - -0.010589f, +0.012967f, +0.012152f, +0.006677f, +0.002460f, -0.000239f, +0.003653f, -0.000134f, -0.003630f, -0.000332f, - -0.001597f, +0.001166f, +0.002236f, -0.002823f, -0.003139f, -0.002150f, +0.000408f, -0.000763f, +0.004871f, -0.000963f, - +0.000421f, -0.001830f, +0.000448f, -0.000045f, -0.001053f, -0.000718f, -0.000804f, -0.001577f, +0.000069f, +0.002816f, - +0.001061f, +0.001339f, +0.000088f, +0.000104f, +0.001661f, -0.001557f, +0.000879f, -0.001062f, -0.000729f, -0.000164f, - +0.000638f, -0.001111f, +0.000191f, +0.001154f, -0.000350f, +0.000051f, -0.000413f, -0.001308f, -0.000256f, +0.001807f, - +0.000868f, -0.000023f, +0.000984f, +0.000081f, +0.000097f, +0.000471f, +0.000798f, +0.000816f, +0.000268f, +0.000247f, - -0.000259f, -0.000509f, -0.000189f, -0.001001f, +0.000061f, +0.000054f - }, - { - -0.021436f, +0.166361f, -0.018486f, +0.089721f, +0.008118f, -0.001476f, -0.003425f, -0.004861f, -0.004406f, -0.003565f, - -0.006904f, -0.000855f, -0.003675f, +0.012103f, +0.012541f, +0.008795f, -0.003892f, -0.001073f, -0.009081f, +0.008525f, - +0.007356f, +0.001744f, -0.001138f, +0.004430f, +0.001207f, +0.002589f, +0.001243f, +0.003512f, -0.000961f, -0.004699f, - -0.004316f, -0.004119f, +0.000374f, -0.001578f, +0.002668f, -0.004086f, +0.000846f, +0.005988f, -0.000916f, +0.001892f, - +0.000103f, +0.003034f, +0.001262f, -0.001262f, +0.003753f, +0.003474f, -0.000685f, -0.001421f, +0.005764f, -0.002219f, - -0.001199f, +0.002374f, +0.000472f, +0.000993f, -0.001884f, +0.003627f, -0.000012f, +0.001112f, -0.003478f, +0.004099f, - -0.000760f, +0.000324f, -0.000626f, +0.001443f, +0.000409f, -0.001241f, +0.001013f, +0.001052f, +0.000593f, +0.000972f, - -0.000784f, +0.001269f, +0.000494f, +0.000182f, +0.000321f, +0.000366f, +0.000625f, -0.000050f, +0.000062f, -0.000102f, - -0.001464f, -0.000326f, +0.000177f, +0.000164f, -0.000879f, +0.000806f, -0.000274f, -0.000402f, -0.000808f, +0.000862f, - +0.000207f, -0.000513f, -0.000557f, -0.000176f, -0.000213f, +0.000541f - }, - { - +0.003328f, +0.041050f, -0.000193f, -0.009342f, -0.004043f, +0.003039f, +0.015491f, +0.003849f, +0.007752f, -0.004402f, - -0.004038f, -0.005975f, +0.001774f, -0.003464f, -0.001193f, +0.000492f, -0.001150f, -0.002857f, +0.015578f, -0.011819f, - -0.006444f, -0.021944f, -0.012739f, +0.002661f, +0.000056f, -0.012240f, +0.007194f, -0.000218f, -0.010664f, +0.005359f, - +0.007296f, -0.001157f, +0.005613f, -0.007929f, -0.004277f, +0.004784f, -0.001468f, +0.004334f, -0.000187f, -0.000796f, - +0.004918f, +0.004230f, +0.002219f, +0.000956f, -0.005163f, +0.001512f, -0.000258f, -0.001684f, -0.000934f, +0.002642f, - -0.000537f, -0.002593f, +0.000176f, -0.000842f, +0.000407f, +0.000825f, -0.001238f, +0.001898f, +0.000483f, -0.001270f, - -0.000136f, -0.001067f, -0.000649f, +0.001034f, -0.000586f, +0.000567f, -0.000223f, -0.001149f, +0.000452f, -0.000176f, - +0.001294f, +0.001310f, -0.001413f, +0.001847f, +0.000216f, +0.001529f, +0.000146f, +0.000571f, +0.000066f, +0.000202f, - -0.000604f, +0.000647f, +0.000535f, +0.000137f, -0.000455f, +0.001030f, -0.000283f, -0.000265f, -0.000501f, +0.000597f, - -0.000463f, +0.000049f, -0.000648f, -0.000351f, +0.000482f, -0.000317f - }, - { - +0.038261f, -0.019065f, -0.054666f, -0.009493f, -0.006351f, +0.002729f, -0.011647f, -0.007171f, -0.009219f, -0.002448f, - -0.007609f, +0.003481f, -0.006518f, +0.004376f, +0.004128f, -0.008831f, -0.003363f, -0.002962f, +0.009067f, +0.001884f, - +0.007364f, +0.005172f, -0.008157f, -0.002599f, -0.005910f, +0.005305f, +0.001403f, -0.009239f, -0.001151f, -0.005157f, - -0.004071f, +0.002561f, -0.002480f, -0.005137f, +0.011223f, +0.000930f, -0.006303f, +0.004263f, +0.000039f, +0.001749f, - -0.004704f, +0.002528f, +0.001961f, -0.000455f, +0.002560f, -0.000930f, +0.005144f, -0.002348f, -0.000097f, +0.003323f, - -0.002858f, -0.002759f, +0.000295f, -0.001976f, -0.004318f, +0.001716f, -0.002560f, -0.000435f, -0.001094f, -0.000933f, - +0.002438f, -0.001071f, -0.000316f, -0.001693f, +0.000881f, -0.000237f, -0.000847f, +0.000810f, +0.000932f, -0.000418f, - -0.000226f, +0.000671f, -0.001123f, +0.000716f, -0.000025f, -0.001388f, +0.000597f, -0.002031f, +0.001218f, +0.000473f, - +0.000404f, +0.000370f, +0.000687f, -0.000071f, -0.000432f, -0.000887f, +0.000209f, +0.000268f, -0.000476f, -0.000337f, - +0.000383f, -0.000324f, +0.000450f, +0.000646f, +0.000152f, -0.000251f - }, - { - +0.003288f, -0.033894f, -0.005127f, -0.007287f, -0.001034f, -0.004800f, +0.009079f, -0.001951f, -0.001657f, +0.002532f, - +0.000280f, -0.005431f, +0.002114f, -0.008937f, +0.011142f, -0.004538f, +0.004152f, +0.010089f, -0.008325f, +0.017153f, - -0.010063f, +0.012487f, -0.010662f, +0.009435f, +0.002369f, -0.004946f, -0.000041f, +0.004355f, -0.003900f, -0.009401f, - -0.001352f, -0.000290f, -0.003982f, +0.002773f, +0.004410f, -0.001230f, +0.002184f, -0.000199f, -0.003999f, -0.003166f, - +0.003207f, +0.001808f, -0.004493f, -0.004535f, +0.001075f, -0.003597f, -0.005746f, -0.006150f, +0.002110f, -0.001131f, - +0.001198f, +0.000592f, +0.001667f, +0.003558f, -0.004195f, -0.000387f, -0.001388f, +0.002413f, +0.001981f, +0.001070f, - -0.001998f, +0.002615f, -0.001763f, -0.001772f, -0.000176f, -0.000817f, -0.000424f, +0.000986f, -0.001188f, -0.000117f, - -0.002090f, +0.000463f, -0.001607f, -0.001084f, +0.001129f, +0.001286f, -0.000064f, +0.000052f, +0.000377f, -0.001505f, - +0.001088f, -0.000065f, -0.000371f, +0.000153f, -0.000525f, +0.000342f, -0.000819f, +0.000251f, -0.000027f, -0.000604f, - -0.000711f, +0.000256f, -0.000095f, +0.000438f, -0.000625f, +0.000419f - }, - { - +0.084728f, +0.114795f, +0.001662f, -0.009273f, +0.030420f, -0.027579f, -0.001441f, +0.015230f, -0.013602f, -0.016945f, - -0.002799f, +0.013203f, +0.007929f, -0.007964f, +0.003152f, -0.004160f, +0.007534f, +0.005445f, -0.021365f, -0.000691f, - -0.012708f, +0.001476f, +0.010709f, -0.000172f, +0.007926f, -0.003178f, +0.008702f, +0.004243f, +0.002249f, -0.001610f, - +0.002960f, +0.001563f, -0.002002f, -0.001802f, +0.002618f, -0.001509f, -0.001860f, +0.005569f, -0.001493f, -0.004967f, - +0.001086f, +0.001021f, -0.000135f, +0.003719f, -0.002755f, +0.003093f, -0.001612f, -0.001095f, +0.000378f, +0.002143f, - -0.004410f, +0.003271f, +0.001911f, +0.000573f, -0.001341f, -0.001484f, +0.000258f, +0.001620f, -0.000128f, +0.000868f, - -0.001970f, +0.000769f, +0.000474f, +0.002169f, -0.000860f, +0.000033f, -0.000346f, +0.001411f, -0.000864f, -0.001479f, - +0.000247f, -0.000612f, -0.001073f, +0.000159f, -0.001490f, +0.000807f, +0.000637f, +0.001258f, -0.001756f, -0.001352f, - -0.001680f, +0.000558f, -0.000940f, +0.000168f, -0.000071f, -0.000274f, -0.000342f, +0.000516f, -0.000316f, -0.000028f, - +0.000187f, +0.001304f, +0.000189f, -0.000319f, +0.000180f, -0.000032f - }, - { - +0.007641f, -0.030510f, -0.007763f, +0.004503f, +0.000415f, +0.004717f, +0.012042f, -0.001602f, +0.014403f, -0.003536f, - -0.006960f, -0.002463f, +0.001389f, -0.004342f, +0.054301f, +0.015928f, -0.004292f, -0.014246f, -0.003481f, +0.006239f, - +0.002153f, +0.009399f, +0.002873f, +0.004959f, -0.015585f, +0.011882f, -0.017062f, +0.013473f, -0.003074f, +0.006746f, - +0.001730f, -0.001029f, +0.003841f, +0.007265f, -0.005640f, -0.002693f, +0.005929f, +0.004477f, +0.004446f, +0.003531f, - -0.004848f, +0.000485f, +0.000675f, -0.001097f, +0.001003f, +0.004181f, -0.003930f, +0.000179f, +0.000401f, -0.001076f, - +0.001505f, -0.000539f, -0.000370f, -0.004325f, -0.001691f, -0.000272f, -0.002585f, +0.001697f, -0.001592f, +0.000657f, - -0.002009f, +0.000294f, -0.001632f, -0.001578f, +0.001329f, +0.000632f, +0.000779f, -0.000184f, +0.000570f, -0.000869f, - +0.001195f, -0.001920f, +0.000055f, +0.000644f, +0.000530f, +0.001162f, +0.000790f, -0.000092f, -0.000545f, +0.000875f, - -0.000199f, +0.000814f, -0.000531f, +0.000873f, +0.000100f, +0.001007f, +0.000263f, +0.000087f, +0.000132f, -0.000003f, - -0.000546f, +0.000190f, -0.000176f, +0.000028f, +0.000465f, +0.000182f - }, - { - +0.053987f, -0.071861f, +0.004445f, -0.026576f, +0.002720f, +0.011205f, +0.000420f, +0.011827f, -0.009927f, +0.003920f, - +0.003631f, -0.000649f, +0.012268f, -0.016909f, +0.023223f, +0.005933f, -0.014198f, +0.000382f, +0.003903f, -0.000623f, - -0.001170f, -0.003712f, +0.003550f, -0.003186f, +0.005219f, -0.005144f, +0.008437f, -0.006391f, +0.004680f, +0.007175f, - +0.001528f, +0.000200f, +0.009008f, +0.007831f, -0.004255f, -0.002861f, -0.000210f, -0.003430f, -0.001117f, +0.006518f, - -0.000988f, -0.000676f, -0.000631f, -0.002933f, -0.001225f, -0.002048f, +0.000108f, +0.000483f, -0.004427f, -0.001006f, - -0.000719f, +0.004617f, -0.006761f, +0.000630f, -0.005391f, +0.001286f, -0.003990f, +0.001089f, -0.002642f, -0.000713f, - -0.002827f, +0.002454f, -0.000342f, +0.000337f, +0.001773f, -0.000738f, -0.000317f, +0.000837f, -0.002901f, +0.001221f, - -0.000480f, +0.001631f, +0.000401f, -0.000268f, +0.000717f, +0.000409f, -0.000189f, +0.000083f, +0.001060f, -0.000417f, - +0.001096f, +0.001585f, -0.000066f, -0.000010f, +0.001005f, -0.000543f, +0.000089f, -0.000318f, -0.000342f, -0.000030f, - +0.000254f, -0.000610f, -0.000099f, -0.000242f, -0.000302f, -0.000021f - } - }, - { - { - -0.003085f, +0.043678f, +0.003338f, -0.026308f, -0.002989f, +0.003512f, +0.000910f, -0.004501f, +0.009742f, -0.008791f, - -0.009630f, -0.006089f, +0.005982f, +0.001082f, +0.007008f, +0.009468f, -0.015567f, +0.013821f, -0.004895f, -0.009283f, - -0.012595f, -0.002837f, +0.000821f, -0.005085f, +0.003182f, -0.008895f, -0.002612f, -0.004014f, +0.000396f, +0.002689f, - +0.006882f, -0.007312f, +0.005599f, -0.000583f, -0.003368f, +0.005783f, -0.004445f, +0.005650f, +0.001310f, -0.005394f, - +0.005144f, -0.000207f, -0.009685f, +0.006931f, +0.008020f, -0.001597f, -0.003447f, -0.001682f, -0.001988f, -0.000156f, - -0.003604f, +0.000993f, +0.000338f, -0.001688f, +0.001616f, -0.000088f, -0.000023f, +0.001363f, +0.000742f, -0.000199f, - +0.001483f, -0.000450f, +0.001463f, -0.001412f, +0.001338f, +0.000851f, -0.001239f, -0.001775f, -0.000733f, +0.000636f, - -0.000622f, -0.000074f, +0.000889f, -0.000034f, +0.000210f, -0.000711f, +0.000199f, +0.000618f, -0.000283f, -0.001064f, - -0.000467f, -0.000312f, +0.000601f, +0.000196f, +0.000221f, +0.000270f, +0.000390f, +0.000036f, -0.000392f, -0.000546f, - -0.000415f, -0.000320f, -0.000348f, -0.000150f, -0.000264f, -0.000122f - }, - { - +0.002359f, -0.073614f, -0.010625f, -0.050859f, -0.007075f, -0.005544f, +0.005845f, +0.004909f, -0.004862f, +0.006824f, - +0.008934f, -0.018832f, +0.013717f, +0.007975f, +0.010730f, -0.019576f, -0.004221f, +0.000859f, -0.004357f, +0.005403f, - +0.006177f, +0.017562f, -0.001004f, -0.005129f, +0.003332f, +0.001555f, +0.004503f, +0.002825f, -0.005692f, -0.001835f, - -0.005797f, +0.007772f, -0.001374f, -0.001824f, -0.006962f, +0.002893f, -0.004787f, +0.003371f, -0.003697f, +0.000967f, - -0.002219f, -0.002009f, +0.002999f, -0.001837f, -0.000131f, +0.003042f, -0.001532f, -0.000693f, -0.002282f, +0.001966f, - -0.001426f, -0.002709f, -0.001193f, +0.001130f, +0.002645f, -0.001748f, +0.000206f, +0.003330f, +0.001333f, +0.000082f, - +0.000947f, -0.000250f, -0.000577f, -0.001123f, +0.001062f, -0.000087f, -0.000292f, +0.000649f, +0.002031f, +0.000910f, - -0.000917f, -0.001040f, -0.000224f, +0.000998f, +0.000294f, -0.000194f, -0.001305f, -0.000470f, -0.000151f, +0.000105f, - -0.000476f, -0.000225f, -0.000243f, +0.000149f, +0.000689f, -0.000062f, -0.000758f, -0.000262f, -0.000854f, -0.000243f, - -0.000189f, +0.000146f, +0.000002f, -0.000240f, +0.000316f, -0.000008f - }, - { - +0.003233f, +0.025116f, -0.039619f, -0.014594f, +0.051811f, -0.000547f, +0.006405f, +0.003049f, +0.002083f, -0.001110f, - -0.010559f, +0.004977f, -0.001783f, -0.004902f, +0.000335f, +0.001063f, -0.004751f, -0.000125f, +0.003345f, -0.009526f, - -0.006838f, -0.017473f, -0.001656f, -0.000643f, -0.002026f, +0.011395f, +0.006799f, +0.006796f, -0.006521f, +0.001515f, - -0.004131f, +0.004295f, -0.007354f, +0.006085f, -0.003516f, -0.001096f, -0.006292f, +0.004356f, -0.003551f, +0.005090f, - +0.000439f, -0.000018f, -0.000371f, -0.000707f, -0.003349f, +0.000997f, +0.001843f, +0.000238f, +0.001303f, +0.004049f, - +0.000384f, -0.000491f, -0.003811f, +0.002399f, -0.000223f, +0.002120f, +0.000099f, +0.002251f, -0.003234f, -0.000369f, - +0.000158f, +0.001167f, +0.002680f, +0.000223f, +0.000229f, +0.001267f, -0.000438f, +0.000897f, +0.000191f, +0.001662f, - -0.000223f, -0.000037f, +0.000692f, +0.000268f, +0.000974f, -0.000780f, -0.000049f, -0.000922f, +0.000496f, -0.000173f, - +0.000692f, +0.000038f, +0.000622f, -0.000603f, -0.000555f, +0.000111f, -0.000205f, -0.000150f, +0.000289f, +0.000008f, - +0.000566f, +0.000415f, +0.000686f, +0.000040f, -0.000390f, +0.000036f - }, - { - -0.003106f, -0.040377f, +0.010819f, +0.006376f, +0.000803f, +0.000516f, -0.000063f, -0.000160f, +0.006088f, -0.001518f, - -0.003984f, +0.002756f, -0.002749f, +0.012902f, -0.011587f, +0.012546f, -0.008650f, -0.001329f, +0.023905f, +0.001668f, - +0.006064f, -0.002747f, -0.002550f, +0.004816f, -0.006773f, +0.006814f, +0.005720f, -0.000476f, -0.006664f, +0.009275f, - +0.003401f, -0.012082f, +0.001823f, +0.002780f, -0.004109f, -0.005241f, -0.004878f, -0.005899f, -0.002325f, +0.002060f, - +0.001227f, -0.001166f, -0.001499f, +0.007012f, -0.000401f, +0.000263f, -0.001547f, +0.002594f, +0.002949f, +0.004235f, - -0.000087f, +0.001474f, -0.000377f, -0.000516f, -0.001570f, +0.001846f, -0.000328f, +0.000270f, -0.001253f, -0.001356f, - -0.000945f, -0.000717f, +0.000882f, +0.001709f, +0.001239f, -0.001618f, +0.000538f, +0.000146f, -0.001036f, +0.000808f, - -0.000729f, -0.000220f, +0.000137f, +0.000310f, +0.000553f, +0.000008f, +0.000449f, -0.000517f, -0.000712f, +0.000122f, - +0.000025f, +0.000076f, -0.000641f, -0.000082f, -0.000565f, -0.000275f, +0.000580f, +0.000550f, +0.000037f, +0.000034f, - +0.000233f, -0.000480f, -0.000027f, -0.000123f, -0.000118f, +0.000004f - }, - { - +0.022231f, -0.105416f, +0.003345f, +0.026902f, +0.010924f, +0.002199f, -0.004808f, -0.007860f, -0.010844f, -0.006224f, - -0.012878f, -0.021509f, +0.003372f, +0.010186f, -0.011566f, -0.008337f, +0.011263f, -0.010616f, +0.000040f, +0.002920f, - -0.014143f, -0.007052f, +0.009200f, -0.005893f, -0.004435f, -0.000265f, -0.003611f, -0.008026f, +0.001580f, -0.007302f, - +0.001935f, +0.001347f, -0.008650f, +0.002207f, -0.000406f, -0.002975f, +0.005951f, -0.006410f, +0.001565f, -0.001682f, - -0.003674f, -0.002943f, +0.000905f, +0.003913f, +0.001326f, -0.000477f, +0.001575f, -0.000926f, +0.000684f, -0.001930f, - -0.001831f, +0.000137f, +0.000229f, +0.001920f, +0.001706f, -0.000334f, -0.002693f, -0.000564f, +0.000063f, +0.002344f, - -0.001752f, -0.001947f, +0.001171f, +0.001458f, +0.000284f, +0.001414f, +0.000291f, +0.000422f, -0.001197f, +0.000261f, - +0.000876f, +0.000024f, -0.003078f, +0.000595f, -0.001164f, +0.001146f, -0.000694f, -0.000015f, +0.000301f, -0.000204f, - -0.000656f, -0.000278f, -0.000237f, +0.000968f, -0.000142f, +0.000197f, -0.000399f, +0.000351f, +0.000248f, -0.000612f, - -0.000445f, +0.000481f, -0.000019f, -0.000114f, -0.000101f, +0.000371f - }, - { - -0.000474f, +0.032693f, -0.005795f, -0.002778f, -0.003260f, -0.000359f, +0.000039f, -0.001548f, +0.002393f, -0.003925f, - +0.010735f, -0.005119f, -0.005091f, +0.008111f, -0.004025f, -0.019393f, -0.019628f, +0.007567f, +0.013989f, -0.023644f, - +0.021035f, +0.001361f, +0.000221f, -0.000698f, -0.006968f, +0.004032f, +0.003986f, +0.002257f, -0.000265f, -0.006584f, - -0.002982f, -0.009898f, -0.002442f, -0.007061f, +0.004945f, +0.013292f, +0.007821f, +0.002682f, +0.000228f, +0.000619f, - +0.001373f, +0.003608f, +0.002317f, -0.001759f, -0.001386f, -0.003395f, -0.001243f, -0.000302f, -0.001246f, -0.001816f, - +0.001532f, +0.003891f, -0.000665f, -0.000223f, +0.000481f, -0.001935f, -0.001431f, -0.001592f, -0.001236f, -0.000045f, - +0.000096f, +0.002724f, +0.001163f, +0.000808f, -0.000472f, +0.000290f, +0.000356f, -0.000281f, +0.001715f, -0.001315f, - -0.000241f, +0.001375f, -0.000632f, -0.000099f, -0.000261f, -0.000557f, -0.000939f, +0.000171f, -0.000165f, +0.000490f, - +0.000195f, +0.000254f, -0.000402f, -0.000239f, +0.000234f, -0.000655f, +0.000422f, +0.000090f, -0.000476f, -0.000233f, - -0.000317f, -0.000174f, -0.000371f, -0.000150f, +0.000362f, +0.000466f - }, - { - +0.005541f, -0.136758f, +0.018517f, +0.086926f, +0.000659f, +0.000813f, +0.002654f, -0.011591f, +0.003606f, -0.005348f, - -0.001954f, -0.003270f, +0.004774f, +0.002372f, +0.000543f, +0.002132f, -0.002579f, +0.005425f, -0.004717f, -0.000818f, - -0.013693f, -0.000496f, -0.000472f, -0.003385f, -0.017636f, -0.002392f, +0.000234f, -0.004664f, +0.000212f, -0.006092f, - +0.002052f, +0.002592f, -0.002622f, +0.006177f, +0.001115f, +0.005877f, -0.005213f, +0.005190f, -0.002503f, -0.006435f, - +0.003961f, -0.003562f, -0.003969f, +0.004856f, +0.000731f, +0.004479f, +0.000315f, -0.003746f, -0.000739f, +0.001173f, - -0.003675f, -0.004205f, -0.002111f, -0.000781f, -0.001019f, +0.001956f, +0.003271f, -0.002624f, -0.000156f, -0.000387f, - +0.000849f, +0.001334f, -0.001783f, -0.001144f, -0.000498f, +0.002029f, +0.000749f, +0.000177f, -0.000816f, -0.000003f, - -0.000119f, -0.000368f, +0.000902f, +0.000880f, -0.001013f, +0.000457f, -0.000798f, +0.000797f, -0.000718f, +0.000607f, - +0.000397f, +0.000517f, +0.000327f, +0.000637f, -0.000131f, +0.000278f, +0.000091f, +0.000528f, +0.000089f, -0.000166f, - +0.000438f, +0.000146f, -0.000003f, +0.000556f, +0.000382f, +0.000654f - }, - { - -0.000018f, +0.014448f, +0.005792f, -0.008155f, -0.004824f, +0.000361f, -0.001330f, +0.000646f, -0.003725f, +0.000867f, - -0.003596f, +0.008073f, +0.006279f, +0.005413f, -0.012645f, -0.020642f, -0.037835f, -0.004893f, +0.019789f, -0.004092f, - +0.000832f, +0.005823f, -0.002209f, +0.001977f, -0.008154f, -0.004607f, -0.005053f, -0.016281f, +0.014726f, -0.001173f, - +0.001923f, +0.004537f, +0.013617f, +0.007289f, +0.005984f, -0.008709f, +0.002064f, +0.000402f, -0.001118f, +0.005003f, - -0.007113f, -0.000736f, +0.003750f, -0.003668f, -0.003792f, +0.001033f, +0.002130f, +0.000697f, +0.000431f, -0.002562f, - +0.001911f, +0.000556f, -0.001303f, +0.001009f, +0.001807f, -0.002418f, +0.001254f, -0.002795f, -0.000661f, +0.003042f, - +0.000476f, +0.001135f, +0.002121f, +0.000044f, +0.000971f, -0.002056f, +0.000351f, -0.000346f, +0.000836f, -0.001216f, - +0.000272f, +0.000243f, +0.000230f, +0.000507f, +0.000695f, -0.001100f, -0.000706f, -0.000005f, -0.000033f, +0.000932f, - +0.001196f, -0.000195f, +0.000369f, -0.000001f, +0.000476f, +0.000025f, +0.001191f, +0.000669f, -0.000205f, +0.000294f, - +0.000135f, -0.000165f, -0.000066f, -0.000569f, -0.000709f, +0.000288f - }, - { - +0.043627f, +0.013154f, +0.026845f, +0.091444f, +0.002098f, +0.001538f, +0.001504f, -0.010203f, -0.011165f, +0.007886f, - -0.011498f, +0.005117f, -0.008116f, +0.000723f, +0.007932f, +0.014828f, -0.002800f, +0.000596f, -0.002249f, +0.004810f, - +0.004814f, -0.003464f, +0.004897f, +0.002603f, +0.005076f, -0.001622f, +0.006001f, +0.001190f, -0.000729f, -0.007211f, - -0.003163f, -0.002256f, +0.001837f, +0.000216f, -0.001385f, -0.004555f, +0.005521f, +0.001086f, -0.000720f, +0.003659f, - +0.002049f, +0.001998f, +0.000497f, -0.000713f, +0.002991f, +0.003082f, -0.000738f, +0.003859f, +0.005094f, -0.005281f, - +0.001371f, +0.000884f, -0.000297f, +0.001699f, -0.000495f, +0.002891f, -0.000721f, +0.000108f, -0.000160f, +0.001434f, - +0.001385f, -0.001607f, +0.001653f, +0.001120f, -0.001534f, -0.000125f, +0.000326f, +0.001941f, +0.000891f, +0.000733f, - -0.000232f, +0.000377f, +0.000510f, +0.000325f, +0.001196f, +0.000073f, -0.000304f, -0.000075f, +0.000450f, -0.000407f, - -0.000979f, -0.000405f, -0.000549f, +0.000065f, -0.000758f, +0.000757f, -0.000165f, -0.000608f, -0.000056f, +0.000451f, - +0.000175f, -0.000439f, -0.000224f, -0.000424f, +0.000088f, +0.000908f - }, - { - -0.002886f, +0.016150f, +0.010790f, +0.013732f, -0.005807f, -0.008916f, +0.022058f, +0.001337f, +0.006674f, -0.000270f, - -0.004373f, +0.003766f, -0.011894f, +0.008333f, -0.020078f, +0.009910f, -0.003469f, +0.001859f, -0.009503f, +0.007571f, - -0.003088f, -0.020121f, -0.010451f, +0.006307f, -0.003004f, -0.012987f, +0.001353f, +0.004565f, -0.004435f, -0.003418f, - +0.008362f, -0.002062f, +0.004484f, -0.000166f, +0.002444f, -0.004173f, +0.003071f, +0.000031f, +0.002337f, -0.003370f, - +0.004550f, +0.004068f, +0.002635f, -0.001173f, +0.000054f, -0.000170f, +0.000748f, +0.000256f, -0.003369f, +0.002279f, - +0.002102f, -0.000369f, -0.001505f, -0.002244f, +0.000941f, -0.001261f, +0.000889f, +0.000949f, -0.000072f, -0.000206f, - -0.001574f, +0.000574f, -0.000276f, +0.000152f, -0.000652f, +0.000301f, +0.000504f, -0.001308f, -0.000092f, +0.001332f, - +0.000227f, +0.000167f, +0.000035f, +0.000644f, +0.001168f, +0.000802f, +0.000123f, +0.000784f, +0.000550f, -0.000474f, - -0.000630f, -0.000051f, +0.000870f, +0.000076f, +0.000488f, +0.000276f, +0.000303f, -0.000310f, -0.000368f, -0.000104f, - +0.000174f, -0.000033f, -0.000622f, -0.000098f, +0.000367f, -0.000248f - }, - { - -0.036233f, -0.008770f, +0.005670f, -0.014071f, -0.002509f, +0.013512f, -0.003215f, -0.016284f, -0.001271f, -0.011122f, - +0.006900f, -0.013883f, +0.006459f, -0.001020f, +0.006953f, -0.008933f, +0.002914f, -0.009537f, +0.010869f, +0.012053f, - +0.009141f, -0.003514f, -0.003659f, -0.006390f, -0.000132f, +0.002542f, +0.000323f, -0.003701f, -0.004523f, -0.004224f, - -0.000890f, +0.000876f, -0.006827f, -0.001390f, +0.007160f, -0.001953f, -0.003012f, +0.004310f, +0.000334f, +0.002706f, - -0.000688f, -0.002698f, +0.001721f, -0.000761f, +0.002668f, +0.000178f, +0.002219f, -0.001026f, +0.001971f, -0.000301f, - +0.001630f, -0.003966f, -0.002767f, -0.000794f, -0.001829f, +0.001189f, -0.003702f, -0.001470f, -0.000552f, +0.000615f, - +0.001513f, -0.001059f, -0.000383f, -0.001243f, -0.000887f, +0.000100f, -0.000186f, +0.000603f, +0.001513f, -0.000413f, - -0.000363f, -0.000043f, +0.000523f, +0.000012f, +0.000246f, -0.000910f, +0.000348f, -0.000690f, +0.000815f, +0.000466f, - +0.000581f, +0.000163f, +0.000046f, -0.000038f, -0.000379f, -0.000395f, +0.000408f, +0.000893f, -0.000804f, +0.000356f, - -0.000383f, -0.000057f, +0.000287f, +0.000444f, +0.000242f, +0.000048f - }, - { - -0.002003f, -0.052888f, +0.006047f, +0.006992f, -0.013722f, +0.008575f, -0.005832f, +0.000937f, -0.000165f, +0.004933f, - -0.003331f, -0.000505f, -0.008378f, +0.015733f, -0.009229f, +0.005344f, -0.001692f, +0.008956f, +0.010833f, -0.004218f, - +0.004294f, -0.002997f, +0.007223f, +0.001644f, +0.001383f, +0.003118f, -0.015135f, +0.007010f, -0.004676f, -0.007191f, - -0.002692f, -0.002569f, -0.003617f, +0.004216f, +0.005349f, -0.005091f, +0.013271f, -0.006825f, -0.001873f, -0.000246f, - +0.004539f, -0.003628f, -0.004566f, -0.001653f, -0.001635f, -0.005913f, -0.005700f, -0.001868f, +0.002571f, -0.001868f, - +0.003110f, -0.001581f, +0.001202f, +0.000098f, -0.001980f, -0.002614f, +0.000972f, +0.001612f, +0.000180f, +0.001899f, - -0.000687f, +0.000533f, -0.001096f, -0.001912f, -0.000806f, +0.000570f, -0.000733f, -0.000515f, -0.000573f, -0.000599f, - -0.000802f, -0.000353f, -0.000897f, -0.000379f, +0.000541f, +0.002079f, +0.000061f, -0.000253f, -0.000407f, -0.001311f, - +0.000785f, -0.000485f, +0.000007f, -0.000092f, -0.000532f, +0.000384f, -0.000463f, +0.000064f, -0.000275f, +0.000003f, - -0.000341f, +0.000089f, -0.000072f, +0.000539f, -0.000436f, +0.000241f - }, - { - -0.043072f, +0.285754f, -0.034020f, +0.012638f, +0.026989f, -0.026095f, +0.011750f, +0.002201f, -0.022357f, -0.013515f, - -0.005992f, +0.016211f, +0.005209f, -0.008062f, -0.005970f, +0.008289f, -0.000752f, +0.006536f, -0.015888f, -0.003926f, - -0.004669f, +0.003538f, +0.004732f, +0.001200f, +0.000251f, +0.009210f, +0.006876f, -0.001621f, +0.007897f, +0.000849f, - -0.000615f, +0.002289f, +0.003343f, -0.002053f, -0.000889f, -0.002755f, -0.001129f, +0.007245f, -0.003510f, +0.000379f, - -0.000654f, +0.001081f, +0.000219f, +0.002392f, -0.009625f, +0.000045f, +0.002135f, +0.000850f, +0.000480f, -0.000643f, - -0.000179f, +0.000796f, +0.001427f, +0.001391f, -0.003320f, +0.002390f, +0.000087f, +0.001581f, +0.000065f, +0.000803f, - -0.000678f, -0.001038f, +0.000663f, +0.000940f, +0.000162f, -0.000205f, +0.000374f, +0.001535f, -0.001196f, -0.000683f, - -0.000533f, -0.001251f, +0.000356f, -0.001221f, +0.000685f, -0.000701f, +0.001699f, -0.000468f, -0.000092f, -0.001523f, - -0.001595f, +0.000470f, -0.000009f, -0.000906f, +0.000274f, -0.000343f, -0.000385f, -0.000253f, +0.000036f, -0.000964f, - +0.000635f, +0.000754f, +0.000264f, +0.000238f, +0.000632f, +0.000103f - }, - { - -0.006619f, -0.047632f, +0.015573f, +0.014140f, +0.001067f, -0.002408f, +0.007136f, +0.003314f, +0.008244f, -0.011320f, - -0.003483f, +0.000559f, -0.002292f, +0.027076f, +0.025126f, -0.000874f, +0.005022f, -0.008847f, -0.001034f, -0.005787f, - +0.011387f, +0.014079f, +0.005789f, +0.006143f, -0.006242f, -0.000380f, +0.006559f, -0.015194f, +0.001178f, +0.005547f, - +0.000320f, +0.006279f, -0.001254f, +0.005156f, -0.005354f, -0.004141f, +0.006143f, +0.000147f, +0.005852f, -0.000088f, - +0.004905f, -0.003858f, +0.001687f, -0.001827f, +0.003355f, +0.004988f, -0.004773f, -0.002411f, +0.002097f, +0.000244f, - -0.002678f, +0.001683f, -0.000042f, -0.005074f, -0.000315f, -0.000134f, -0.000439f, +0.000363f, -0.002120f, -0.000782f, - +0.000100f, +0.000150f, -0.002054f, -0.001573f, +0.002657f, +0.001218f, -0.000370f, +0.000368f, -0.000970f, -0.000248f, - +0.000769f, +0.000956f, -0.001765f, +0.000125f, +0.001438f, +0.001406f, +0.000240f, -0.000471f, -0.000771f, +0.001211f, - -0.000006f, +0.000177f, -0.000120f, +0.000207f, -0.000027f, +0.000835f, -0.000001f, +0.000604f, -0.000234f, -0.000519f, - +0.000102f, +0.000100f, -0.000170f, +0.000032f, +0.000312f, -0.000019f - }, - { - -0.050960f, +0.053373f, +0.002221f, -0.020122f, +0.010460f, +0.012975f, +0.008723f, +0.010649f, -0.007611f, +0.000672f, - -0.002929f, +0.011925f, -0.005459f, -0.001319f, -0.001617f, +0.009269f, -0.009797f, +0.008201f, -0.007674f, +0.006929f, - -0.003206f, -0.012958f, +0.001664f, +0.011680f, -0.007878f, -0.004139f, +0.006188f, +0.006125f, -0.004007f, +0.009403f, - -0.007290f, +0.005415f, +0.009918f, -0.002042f, -0.003656f, -0.003018f, +0.004125f, -0.004767f, +0.000888f, +0.005303f, - +0.003114f, +0.001539f, -0.002905f, -0.002495f, -0.004133f, -0.001351f, -0.004258f, +0.000177f, -0.003227f, -0.000479f, - -0.000141f, -0.000815f, -0.001054f, -0.002814f, -0.003841f, +0.000625f, -0.001971f, -0.001286f, -0.000906f, +0.000070f, - +0.000362f, -0.002270f, +0.000956f, -0.000106f, +0.000774f, -0.000239f, -0.000543f, -0.000224f, -0.001813f, -0.000397f, - +0.001871f, -0.000190f, -0.000222f, +0.000641f, +0.001290f, +0.000293f, -0.000503f, +0.000005f, +0.000874f, -0.000414f, - +0.001120f, +0.001194f, +0.000059f, -0.000073f, +0.001444f, -0.000380f, -0.000214f, -0.000196f, +0.000123f, -0.000021f, - -0.000475f, -0.000078f, -0.000520f, -0.000177f, +0.000192f, -0.000021f - } - }, - { - { - +0.002088f, +0.016141f, -0.021465f, -0.016655f, +0.009822f, +0.005217f, +0.005004f, +0.003027f, +0.011269f, -0.004761f, - +0.006186f, -0.008175f, -0.014317f, -0.014245f, -0.008484f, -0.012108f, -0.026699f, +0.001800f, -0.013229f, -0.003793f, - -0.001696f, +0.001331f, +0.012931f, +0.001158f, -0.003026f, -0.005117f, +0.001600f, -0.004023f, +0.005913f, +0.007297f, - -0.003026f, -0.016307f, +0.000933f, -0.007574f, -0.005327f, +0.011572f, +0.006346f, +0.015725f, +0.005145f, -0.004190f, - +0.001395f, +0.001785f, -0.005439f, +0.001290f, +0.005313f, +0.001472f, -0.004588f, -0.001597f, -0.001222f, -0.000234f, - +0.001444f, +0.004974f, +0.001720f, +0.000864f, +0.001482f, +0.000576f, +0.000001f, +0.003198f, +0.002163f, -0.002331f, - +0.000154f, -0.001694f, +0.000350f, -0.001365f, +0.001211f, +0.001997f, +0.000731f, -0.000354f, -0.001454f, -0.000226f, - +0.000768f, +0.000203f, +0.000457f, +0.000494f, +0.000223f, -0.001542f, -0.000604f, -0.000026f, -0.000211f, -0.000266f, - +0.000039f, -0.000102f, +0.000400f, -0.000062f, +0.000281f, -0.000068f, -0.000194f, -0.000399f, -0.000197f, -0.000560f, - -0.000734f, -0.000049f, +0.000403f, +0.000767f, +0.000025f, +0.000030f - }, - { - -0.006631f, -0.080735f, -0.017363f, -0.033208f, +0.013517f, +0.000252f, +0.002588f, -0.000584f, -0.002552f, +0.008271f, - +0.007434f, -0.026133f, +0.004826f, -0.002330f, +0.010014f, -0.012975f, -0.001491f, -0.008195f, -0.016515f, -0.001730f, - -0.004000f, +0.003395f, -0.004169f, -0.003844f, -0.002292f, -0.003318f, +0.002164f, +0.004943f, +0.000124f, -0.001892f, - +0.001108f, +0.016848f, +0.002612f, -0.004635f, -0.006399f, +0.009246f, +0.000121f, +0.003250f, -0.000371f, +0.003218f, - -0.002674f, -0.008271f, -0.001214f, -0.001697f, -0.001900f, +0.002193f, -0.001306f, +0.002734f, -0.000524f, +0.003324f, - +0.000893f, -0.000047f, -0.001503f, -0.001565f, +0.004015f, -0.000868f, +0.001191f, +0.005316f, +0.002909f, +0.000007f, - -0.000225f, -0.000168f, +0.000492f, -0.000390f, -0.000128f, +0.000269f, -0.000440f, -0.000806f, +0.000997f, +0.000264f, - -0.001300f, -0.000243f, -0.000471f, -0.000021f, +0.000209f, +0.000089f, -0.001242f, +0.001080f, +0.000779f, +0.000180f, - -0.000225f, -0.000422f, -0.000061f, -0.000345f, +0.000201f, +0.000232f, -0.000660f, +0.000625f, -0.000437f, -0.000609f, - -0.000164f, +0.000189f, +0.000016f, -0.000056f, +0.000147f, -0.000018f - }, - { - -0.000252f, +0.099883f, +0.013170f, -0.090856f, -0.001292f, -0.003333f, +0.000118f, +0.001141f, +0.003430f, +0.005308f, - -0.009990f, -0.005321f, -0.009679f, -0.001265f, +0.011152f, +0.011262f, +0.004744f, -0.000202f, +0.001317f, -0.005679f, - +0.000769f, -0.023603f, -0.013460f, +0.002010f, +0.002893f, +0.008563f, -0.002900f, +0.005135f, -0.005126f, +0.000794f, - +0.000721f, +0.005478f, -0.009792f, +0.007232f, -0.002660f, -0.000187f, -0.000289f, +0.001473f, -0.008400f, +0.001247f, - +0.000011f, -0.000055f, +0.000088f, +0.001055f, -0.003115f, +0.001178f, -0.000845f, -0.002543f, +0.001289f, +0.004828f, - -0.000769f, +0.001756f, -0.000662f, +0.003716f, -0.001453f, -0.001038f, -0.001279f, +0.000955f, -0.004080f, +0.000094f, - +0.000267f, -0.001039f, +0.000620f, -0.002272f, -0.002983f, +0.000940f, -0.000026f, +0.000554f, -0.000702f, +0.001383f, - -0.000081f, -0.000425f, +0.001153f, +0.001474f, +0.001069f, -0.001119f, +0.000051f, -0.000908f, +0.000289f, -0.000691f, - +0.000344f, +0.000144f, +0.001120f, +0.000177f, -0.000161f, +0.000980f, +0.000337f, -0.000212f, +0.000397f, +0.000011f, - +0.000471f, -0.000095f, -0.000039f, +0.000101f, -0.000280f, -0.000104f - }, - { - +0.002559f, -0.061697f, -0.011795f, +0.000628f, +0.000548f, +0.001453f, -0.001605f, -0.001287f, +0.004993f, -0.005111f, - -0.003865f, +0.006916f, -0.011633f, -0.002285f, -0.027138f, -0.009209f, -0.014329f, +0.008454f, +0.013338f, +0.006569f, - +0.008667f, -0.006598f, +0.002485f, +0.012754f, -0.001614f, +0.002470f, +0.002652f, +0.001950f, +0.000837f, -0.000511f, - -0.011219f, -0.009597f, +0.009320f, +0.006274f, -0.000897f, -0.000947f, +0.006744f, -0.002117f, +0.001133f, +0.002781f, - -0.000634f, -0.002744f, -0.006185f, +0.002916f, +0.000761f, +0.002692f, -0.000096f, +0.001650f, +0.003846f, +0.003593f, - -0.000561f, +0.003362f, -0.000230f, -0.001233f, -0.001409f, +0.002676f, +0.000041f, +0.000066f, +0.000083f, -0.000314f, - -0.000058f, +0.000052f, -0.000282f, +0.000917f, +0.001329f, +0.000684f, +0.001014f, +0.000598f, +0.000994f, +0.001106f, - -0.001078f, +0.000295f, +0.000238f, +0.000095f, +0.000187f, +0.000013f, +0.001007f, -0.000002f, +0.000442f, +0.001148f, - +0.000526f, +0.000560f, +0.000034f, +0.000771f, +0.000268f, -0.000361f, -0.000100f, +0.000185f, +0.000181f, +0.000409f, - +0.000252f, -0.000461f, +0.000161f, +0.000285f, +0.000068f, -0.000204f - }, - { - -0.000818f, -0.211527f, -0.033873f, +0.014620f, -0.009119f, -0.000419f, -0.003018f, +0.002885f, -0.002733f, +0.007685f, - -0.002171f, -0.009093f, +0.006622f, -0.006666f, -0.023830f, -0.014796f, +0.006194f, -0.013021f, +0.015585f, +0.021928f, - -0.009824f, -0.002978f, +0.003331f, -0.015250f, -0.006475f, +0.002362f, +0.008468f, -0.001408f, +0.005714f, -0.007072f, - -0.004758f, -0.002626f, -0.002060f, +0.005751f, +0.000142f, -0.000277f, +0.009704f, -0.007717f, -0.000120f, +0.002266f, - +0.000998f, -0.000757f, +0.000797f, +0.006098f, +0.000372f, -0.004626f, -0.001469f, +0.000008f, +0.000026f, +0.000289f, - -0.003780f, -0.003511f, -0.000430f, -0.001619f, +0.000342f, -0.000731f, -0.000901f, +0.000491f, -0.001538f, +0.001019f, - -0.001087f, -0.001938f, +0.001510f, +0.002511f, +0.000787f, +0.000673f, +0.000300f, +0.000051f, -0.003106f, -0.001863f, - +0.000598f, +0.000555f, -0.001676f, +0.000940f, -0.001812f, +0.001057f, -0.001018f, -0.000565f, -0.000070f, +0.000218f, - -0.001016f, -0.001542f, -0.001032f, +0.000610f, -0.000287f, +0.000110f, -0.001078f, +0.000204f, +0.000163f, -0.000500f, - +0.000370f, +0.000256f, -0.000843f, -0.000632f, -0.000003f, +0.000380f - }, - { - -0.001149f, +0.031610f, -0.002743f, -0.002069f, -0.001253f, +0.000282f, +0.000546f, -0.000485f, +0.002499f, -0.004741f, - +0.011445f, -0.003860f, -0.001314f, +0.018659f, +0.007570f, -0.005261f, -0.009302f, -0.002410f, +0.006887f, -0.034148f, - +0.019242f, +0.013083f, -0.000959f, -0.012350f, -0.004172f, +0.005790f, -0.002428f, -0.004930f, +0.000497f, +0.002015f, - -0.001940f, -0.004716f, +0.005146f, +0.002796f, +0.010311f, +0.010955f, +0.005446f, -0.000211f, +0.002458f, +0.004948f, - +0.002461f, -0.001020f, -0.001481f, -0.001132f, +0.000513f, -0.002160f, -0.000436f, +0.000666f, +0.001747f, -0.000790f, - -0.000002f, +0.000709f, -0.001255f, +0.000799f, +0.000972f, -0.000780f, +0.000215f, -0.002656f, -0.001391f, +0.000007f, - -0.000388f, +0.001069f, -0.001473f, +0.000218f, -0.000020f, +0.000832f, +0.001112f, -0.000305f, +0.001695f, -0.002097f, - -0.001681f, +0.000709f, +0.000039f, -0.000659f, -0.001587f, -0.001264f, -0.000382f, -0.000062f, -0.000646f, +0.000065f, - -0.000722f, +0.000051f, +0.000032f, -0.000513f, -0.000119f, -0.000349f, +0.000755f, +0.000372f, -0.000616f, -0.000408f, - -0.000001f, -0.000164f, -0.000982f, -0.000117f, +0.000632f, +0.001003f - }, - { - +0.038924f, -0.129758f, -0.020809f, +0.076340f, -0.003360f, +0.001790f, +0.005116f, -0.010396f, +0.005815f, +0.008702f, - +0.012408f, +0.011438f, +0.008289f, -0.000296f, -0.002390f, +0.004162f, -0.002107f, +0.002051f, -0.003576f, -0.001465f, - -0.010929f, +0.003948f, +0.004338f, +0.004028f, -0.004178f, +0.004141f, +0.001396f, +0.003915f, +0.006521f, -0.005871f, - +0.000548f, +0.000622f, -0.007794f, +0.002299f, -0.000180f, +0.003236f, -0.000897f, +0.007265f, -0.003024f, -0.002215f, - +0.008456f, -0.003033f, -0.006228f, +0.001256f, -0.000278f, +0.002105f, +0.002397f, -0.000698f, +0.001657f, +0.001122f, - -0.004225f, +0.000986f, +0.000585f, +0.002191f, +0.000349f, +0.000829f, +0.001663f, -0.002666f, -0.000015f, -0.000001f, - +0.001186f, +0.000719f, -0.002547f, -0.001619f, -0.001797f, +0.000532f, -0.000563f, +0.000064f, -0.001388f, -0.000467f, - -0.000268f, -0.001075f, +0.000130f, +0.000201f, -0.000306f, +0.001036f, -0.001323f, +0.000390f, -0.000387f, +0.001281f, - +0.000424f, -0.000583f, -0.000069f, +0.000430f, -0.001015f, -0.000124f, -0.000108f, +0.000259f, +0.000497f, +0.000251f, - +0.000156f, -0.000351f, -0.000216f, +0.000212f, -0.000424f, -0.000079f - }, - { - -0.002130f, -0.009173f, -0.000178f, -0.000290f, -0.001481f, +0.000697f, +0.000318f, +0.003014f, -0.004006f, +0.002373f, - +0.001068f, +0.011945f, +0.005414f, +0.005730f, -0.011462f, -0.003286f, -0.010166f, +0.011371f, +0.006617f, +0.005337f, - +0.021547f, +0.000305f, -0.008017f, +0.009125f, -0.004646f, +0.002386f, +0.006234f, -0.000287f, +0.016204f, -0.014943f, - -0.002992f, -0.008008f, +0.003539f, -0.001227f, -0.000577f, -0.007356f, -0.002745f, -0.002995f, +0.002043f, +0.006632f, - -0.005865f, +0.000823f, +0.006417f, -0.002887f, -0.002131f, +0.006002f, +0.004789f, +0.002442f, +0.003916f, -0.000493f, - +0.000245f, -0.000748f, +0.000603f, +0.004468f, +0.003763f, -0.000818f, +0.002766f, -0.002917f, -0.002671f, -0.000751f, - -0.001964f, +0.000707f, +0.001209f, -0.001126f, +0.001084f, -0.002092f, +0.000390f, +0.000634f, +0.000425f, -0.001035f, - +0.001680f, +0.000874f, +0.000136f, -0.000359f, +0.000606f, -0.001421f, -0.000619f, +0.000796f, +0.000731f, -0.000394f, - +0.000357f, -0.000346f, +0.000087f, +0.000307f, -0.000060f, -0.000486f, -0.000360f, -0.000395f, -0.000325f, -0.000007f, - +0.000118f, -0.000065f, -0.000262f, -0.000282f, -0.000599f, -0.000222f - }, - { - -0.045131f, -0.205233f, -0.044040f, +0.074656f, -0.007631f, -0.002266f, -0.003104f, -0.008603f, -0.013618f, +0.001450f, - -0.020315f, +0.010136f, +0.006133f, -0.008980f, -0.018364f, +0.001206f, +0.004827f, +0.006665f, +0.004754f, +0.000974f, - -0.004455f, -0.006731f, +0.004988f, +0.001545f, +0.001830f, -0.004852f, +0.004976f, -0.000192f, +0.000445f, -0.002721f, - +0.001783f, -0.002260f, -0.005179f, +0.000436f, -0.000283f, -0.001990f, +0.010112f, -0.001669f, -0.005816f, +0.004847f, - +0.004221f, +0.002799f, -0.002564f, -0.000193f, +0.000256f, -0.002933f, -0.000856f, +0.006585f, +0.005224f, -0.004943f, - -0.001779f, -0.003145f, -0.001811f, +0.001370f, -0.001254f, -0.000522f, -0.000383f, +0.001526f, +0.001497f, +0.001752f, - +0.002055f, +0.000428f, +0.001531f, -0.000539f, -0.001972f, -0.000414f, -0.000124f, +0.001589f, -0.000256f, +0.000170f, - +0.000740f, -0.000422f, -0.000160f, +0.000606f, -0.000201f, -0.000995f, +0.000001f, +0.000275f, +0.000054f, +0.000242f, - +0.000014f, -0.000158f, -0.000637f, +0.000478f, +0.000015f, +0.000547f, -0.000329f, -0.000629f, +0.000489f, +0.000389f, - +0.000050f, +0.000156f, +0.000431f, +0.000022f, +0.000232f, +0.000789f - }, - { - +0.002452f, -0.023818f, -0.041085f, +0.004186f, +0.008350f, -0.012088f, +0.014354f, +0.004883f, +0.006586f, +0.003274f, - +0.004398f, +0.014398f, -0.003325f, +0.015500f, -0.023644f, +0.012382f, +0.011078f, -0.010076f, -0.033237f, +0.007274f, - +0.014505f, +0.010532f, +0.000267f, +0.002564f, -0.006959f, -0.008708f, -0.008774f, -0.005003f, +0.001463f, +0.005958f, - +0.015871f, -0.002881f, +0.005027f, +0.004853f, -0.000402f, -0.010589f, -0.000787f, -0.005464f, -0.000125f, -0.003185f, - +0.001690f, -0.002463f, +0.002557f, +0.005223f, +0.001245f, -0.000050f, +0.000747f, +0.000103f, -0.001207f, +0.005586f, - +0.002916f, +0.002036f, -0.000888f, -0.004326f, +0.000240f, -0.001107f, +0.002560f, +0.001748f, +0.001660f, +0.001559f, - -0.000479f, +0.000920f, +0.000053f, +0.000249f, -0.000674f, -0.000327f, -0.000070f, -0.002660f, -0.000642f, +0.001155f, - -0.000563f, -0.000384f, -0.000336f, -0.001248f, -0.000544f, -0.000525f, -0.000553f, +0.000746f, -0.000118f, +0.000293f, - +0.000595f, -0.000636f, -0.000063f, -0.000527f, +0.000355f, -0.000631f, +0.000106f, +0.000024f, -0.000012f, -0.000324f, - +0.000284f, +0.000377f, -0.000290f, +0.000142f, +0.000319f, -0.000255f - }, - { - +0.034652f, -0.039730f, -0.087321f, +0.003609f, +0.000333f, +0.006375f, +0.021981f, +0.000823f, +0.010092f, -0.001518f, - +0.013363f, -0.014002f, +0.001427f, +0.005135f, +0.020329f, -0.001296f, +0.009080f, -0.010278f, +0.006753f, -0.000675f, - +0.001840f, -0.002905f, +0.000433f, +0.001122f, +0.002825f, +0.000108f, +0.002531f, +0.006071f, +0.004821f, +0.001529f, - +0.000798f, -0.000595f, -0.006473f, +0.000776f, +0.001629f, -0.003649f, +0.000079f, +0.002683f, -0.002846f, -0.002191f, - -0.004402f, -0.001885f, +0.003461f, +0.002126f, +0.003309f, -0.001534f, -0.000402f, -0.001898f, +0.002063f, -0.004060f, - +0.001279f, -0.000178f, -0.002361f, +0.001304f, +0.001720f, +0.001931f, -0.001597f, -0.000925f, +0.001395f, +0.000932f, - +0.000200f, -0.000768f, +0.000437f, +0.000545f, -0.002347f, -0.000392f, -0.000853f, -0.000568f, +0.001310f, +0.000592f, - +0.000824f, +0.000353f, +0.000572f, +0.000097f, +0.000953f, -0.000386f, +0.000641f, +0.000302f, +0.001247f, +0.000518f, - +0.000266f, -0.000444f, -0.000377f, +0.000005f, +0.000459f, +0.000269f, +0.000650f, +0.000812f, -0.000464f, +0.000627f, - -0.000490f, -0.000211f, +0.000044f, -0.000099f, -0.000115f, +0.000007f - }, - { - +0.001242f, -0.073885f, -0.017140f, +0.026647f, +0.006105f, +0.012930f, -0.008471f, -0.002436f, -0.003080f, +0.005287f, - +0.001644f, +0.006958f, -0.004940f, +0.010964f, -0.011151f, +0.017414f, +0.000877f, +0.006994f, +0.007765f, -0.007575f, - +0.012431f, -0.013803f, +0.007339f, -0.002356f, +0.004125f, +0.005397f, -0.012161f, +0.001440f, -0.008413f, -0.007609f, - -0.003380f, +0.001939f, -0.001630f, +0.000791f, -0.001947f, -0.011200f, +0.009483f, -0.004980f, +0.006649f, -0.001293f, - -0.002389f, -0.004743f, -0.000358f, +0.000384f, -0.000253f, -0.000388f, -0.001576f, +0.000284f, +0.002941f, -0.003392f, - +0.002196f, -0.002945f, -0.001189f, -0.000858f, -0.000540f, -0.002857f, -0.000856f, +0.000820f, +0.001225f, +0.002079f, - -0.000671f, +0.000378f, -0.000482f, -0.000936f, -0.000150f, +0.001057f, -0.000278f, -0.001003f, +0.000191f, -0.001290f, - +0.000918f, +0.002601f, +0.000284f, +0.000542f, +0.000262f, +0.001325f, +0.000052f, -0.000528f, +0.000067f, -0.000400f, - +0.000084f, -0.000570f, +0.000471f, -0.000309f, -0.000228f, +0.000514f, -0.000402f, -0.000239f, -0.000578f, +0.000104f, - +0.000134f, +0.000820f, +0.000172f, +0.000245f, -0.000563f, +0.000217f - }, - { - -0.009161f, +0.313805f, -0.074347f, -0.000754f, +0.021987f, -0.023267f, +0.001278f, -0.012058f, -0.016823f, -0.004945f, - -0.013326f, +0.002886f, -0.001853f, -0.007806f, -0.006743f, +0.014090f, -0.005126f, -0.000206f, -0.011456f, -0.003296f, - +0.004232f, +0.009959f, +0.001768f, -0.004393f, -0.009278f, +0.003086f, -0.003487f, -0.000639f, +0.012255f, +0.000313f, - -0.000547f, +0.004891f, +0.008558f, -0.000634f, -0.007863f, -0.000883f, +0.004131f, +0.004625f, +0.001034f, +0.003892f, - -0.001737f, +0.002049f, +0.000144f, +0.002566f, -0.005336f, +0.001014f, +0.001755f, +0.001530f, +0.001032f, +0.000355f, - -0.000885f, -0.003687f, -0.002484f, -0.003532f, -0.004618f, +0.003631f, +0.000065f, +0.002166f, -0.000753f, -0.000034f, - -0.001098f, -0.002303f, -0.001151f, -0.000972f, +0.000228f, +0.001790f, +0.001161f, +0.000509f, -0.000514f, +0.001636f, - +0.001206f, -0.000300f, +0.001464f, -0.001556f, +0.001057f, -0.000637f, +0.001010f, -0.001128f, +0.000841f, -0.000737f, - -0.000232f, +0.000647f, +0.000221f, -0.000812f, -0.000175f, +0.000429f, +0.000861f, -0.000330f, +0.000290f, -0.001006f, - +0.000248f, +0.000056f, -0.000307f, +0.000378f, +0.000679f, +0.000225f - }, - { - +0.005797f, -0.049927f, +0.001320f, +0.008205f, -0.006485f, -0.007638f, +0.002387f, -0.002746f, -0.001402f, -0.007082f, - +0.003339f, +0.005643f, -0.004119f, -0.030499f, -0.031142f, +0.005767f, +0.009933f, +0.005482f, +0.015854f, +0.001441f, - +0.011141f, +0.002692f, -0.008105f, +0.004810f, -0.008345f, -0.011837f, +0.002082f, -0.021394f, -0.000307f, -0.000908f, - +0.001276f, +0.001644f, -0.008402f, +0.005669f, -0.003071f, -0.002909f, +0.002440f, -0.005008f, +0.003744f, -0.000230f, - +0.009714f, +0.000183f, +0.003502f, +0.001554f, +0.004146f, +0.002724f, -0.002893f, -0.000300f, +0.001528f, -0.000060f, - -0.002730f, +0.001947f, +0.000148f, -0.001661f, +0.002298f, +0.001412f, -0.000418f, -0.000212f, -0.000045f, +0.001667f, - +0.001702f, +0.000024f, -0.000948f, -0.000698f, +0.000791f, +0.001337f, -0.000839f, -0.000942f, -0.000371f, -0.000106f, - +0.000542f, +0.001448f, -0.001067f, +0.001162f, +0.001566f, +0.000192f, -0.000998f, -0.001820f, -0.001379f, +0.000658f, - -0.000771f, -0.000067f, +0.000469f, -0.000251f, -0.000613f, +0.000381f, -0.000495f, +0.000122f, +0.000108f, -0.000519f, - +0.000006f, +0.000002f, -0.000262f, +0.000045f, +0.000249f, -0.000146f - }, - { - +0.027346f, +0.143837f, -0.013432f, -0.018301f, +0.009739f, +0.007620f, -0.001909f, +0.002767f, -0.006109f, -0.002438f, - -0.006482f, +0.011541f, -0.001218f, -0.019077f, -0.042834f, +0.005840f, +0.006772f, +0.004298f, -0.019767f, -0.004864f, - -0.008856f, -0.009482f, -0.002782f, +0.002479f, -0.006197f, +0.008014f, +0.003636f, -0.003268f, -0.014020f, +0.007309f, - -0.008377f, -0.005162f, +0.000758f, -0.001939f, -0.004091f, -0.004740f, +0.005416f, -0.006203f, +0.001080f, +0.004585f, - -0.000147f, +0.002298f, -0.002107f, -0.002284f, -0.005707f, -0.004047f, -0.006416f, +0.001342f, -0.002049f, +0.002004f, - +0.003325f, -0.001279f, -0.001664f, -0.002947f, -0.001460f, +0.002446f, +0.001053f, -0.000192f, -0.000536f, +0.001008f, - +0.001616f, -0.001544f, +0.001350f, -0.001268f, -0.001354f, +0.000581f, +0.000750f, +0.000281f, -0.000253f, -0.000779f, - +0.001202f, -0.001090f, -0.001950f, -0.000189f, +0.000959f, +0.000016f, -0.000566f, -0.000252f, +0.001271f, -0.000312f, - -0.000600f, -0.000742f, -0.000186f, -0.000500f, +0.000633f, -0.000934f, -0.001175f, -0.000797f, +0.000285f, +0.000419f, - -0.000011f, +0.000237f, -0.000059f, -0.000019f, +0.000070f, +0.000016f - } - }, - { - { - +0.000978f, -0.048415f, +0.028247f, -0.000343f, +0.000751f, +0.000927f, +0.008283f, +0.004883f, +0.008728f, -0.000732f, - +0.005341f, -0.014582f, -0.014706f, -0.004007f, -0.010938f, -0.014343f, -0.016371f, -0.014181f, -0.003525f, -0.005346f, - +0.012722f, -0.001389f, +0.007933f, +0.004734f, -0.019811f, +0.005210f, -0.003300f, -0.005961f, +0.004169f, +0.009087f, - -0.008513f, -0.008033f, -0.001972f, -0.010849f, +0.002627f, +0.009781f, +0.003549f, +0.016291f, +0.004923f, +0.000891f, - +0.002134f, -0.001374f, +0.000747f, -0.002321f, +0.001742f, +0.001795f, -0.003933f, -0.004639f, +0.001973f, +0.002614f, - +0.002917f, +0.001784f, +0.000946f, +0.002357f, -0.000899f, +0.002344f, +0.000418f, +0.001110f, +0.002581f, -0.000366f, - -0.000904f, -0.002883f, -0.000293f, +0.001480f, +0.000264f, +0.000930f, +0.000111f, +0.000306f, -0.000860f, -0.000483f, - +0.000872f, +0.000407f, +0.000585f, +0.001028f, -0.001547f, -0.000718f, -0.000991f, +0.000505f, -0.000575f, -0.000304f, - -0.000280f, +0.000631f, -0.000345f, +0.000058f, -0.000585f, +0.000087f, -0.000118f, -0.000706f, +0.000459f, -0.000250f, - -0.000737f, -0.000237f, +0.000409f, +0.000886f, +0.000355f, +0.000227f - }, - { - +0.017685f, -0.192625f, +0.050759f, -0.003206f, -0.006708f, +0.003541f, -0.002565f, -0.000181f, +0.001363f, +0.006549f, - -0.004083f, -0.006818f, -0.004413f, +0.001108f, -0.004958f, -0.008532f, -0.002673f, -0.006743f, -0.010323f, -0.010023f, - +0.002375f, -0.006989f, +0.004105f, -0.001076f, -0.005543f, -0.001882f, -0.001623f, +0.011203f, -0.001373f, -0.003215f, - +0.002816f, +0.013008f, +0.008561f, -0.011691f, +0.004412f, +0.001136f, +0.004055f, +0.000827f, +0.001995f, +0.004755f, - +0.000022f, -0.011713f, -0.003468f, +0.000911f, -0.000542f, -0.001101f, +0.003096f, +0.002829f, -0.000019f, -0.000022f, - +0.003690f, +0.000612f, -0.002301f, -0.002736f, +0.003070f, -0.000485f, +0.003358f, +0.001136f, +0.002657f, +0.001270f, - -0.001990f, +0.001267f, +0.000537f, -0.000982f, +0.000517f, -0.000355f, +0.000137f, -0.001109f, -0.000667f, -0.000057f, - -0.000194f, +0.000669f, -0.000473f, -0.001750f, +0.000844f, +0.000662f, -0.001188f, +0.001170f, +0.000073f, +0.000798f, - +0.000051f, -0.000696f, -0.000218f, -0.000126f, -0.000074f, +0.000022f, +0.000123f, +0.000447f, -0.000307f, -0.000588f, - -0.000271f, +0.000242f, -0.000011f, +0.000037f, +0.000224f, -0.000089f - }, - { - -0.004254f, +0.166517f, -0.013816f, -0.057324f, -0.035364f, -0.002266f, +0.001750f, -0.001630f, +0.003183f, -0.004440f, - +0.005352f, -0.013149f, +0.000903f, +0.004839f, -0.001364f, +0.008436f, +0.007669f, +0.005733f, +0.002163f, -0.002053f, - +0.002755f, -0.013502f, -0.014005f, +0.006122f, +0.002478f, -0.003204f, -0.002279f, +0.000964f, +0.000883f, -0.002881f, - +0.007040f, -0.003355f, -0.002338f, -0.003555f, +0.002408f, -0.005377f, +0.007605f, -0.002483f, -0.005210f, -0.003180f, - -0.001439f, +0.001905f, +0.000598f, +0.000088f, -0.003898f, +0.002900f, -0.001600f, +0.000045f, +0.001612f, +0.001707f, - -0.001044f, +0.000927f, +0.002510f, +0.002156f, -0.000596f, -0.002239f, -0.000283f, -0.001676f, -0.001387f, +0.000844f, - -0.000954f, -0.000261f, -0.001415f, -0.001920f, -0.002724f, +0.000206f, -0.000374f, -0.000274f, +0.000187f, +0.000516f, - +0.000305f, -0.000044f, +0.000968f, +0.001572f, -0.000327f, -0.000196f, -0.000330f, -0.000941f, -0.000214f, +0.000404f, - -0.000166f, +0.000341f, +0.000975f, +0.000510f, +0.000210f, +0.000514f, +0.000417f, +0.000082f, +0.000260f, -0.000257f, - +0.000450f, -0.000260f, -0.000128f, -0.000076f, +0.000523f, -0.000240f - }, - { - -0.000967f, -0.074287f, +0.005813f, -0.005162f, +0.002367f, +0.000655f, -0.001482f, +0.000019f, +0.002030f, -0.002059f, - -0.003830f, +0.010164f, -0.008762f, -0.017624f, -0.026209f, -0.008390f, -0.002971f, +0.011557f, +0.004430f, +0.011423f, - +0.000693f, -0.005954f, +0.015384f, +0.001483f, +0.003504f, -0.004106f, +0.008166f, +0.000794f, +0.004030f, -0.005998f, - -0.010381f, -0.001041f, +0.002804f, +0.005543f, +0.001196f, -0.007239f, +0.011671f, -0.003056f, +0.005758f, -0.001507f, - +0.001433f, -0.002990f, -0.002943f, -0.000398f, +0.001755f, +0.001298f, +0.004127f, -0.002794f, +0.004896f, +0.000878f, - -0.000201f, +0.002632f, +0.001626f, -0.002070f, -0.000560f, +0.002931f, -0.000218f, +0.000331f, -0.001019f, -0.000397f, - +0.000346f, +0.001512f, -0.001744f, +0.001210f, +0.001041f, +0.001074f, +0.000231f, +0.000264f, +0.001805f, +0.000027f, - -0.000145f, +0.000531f, +0.000109f, +0.000646f, +0.000035f, +0.000710f, +0.000160f, +0.000568f, +0.000860f, +0.000650f, - +0.000748f, +0.000396f, -0.000286f, +0.001086f, +0.000287f, -0.000283f, -0.000256f, +0.000081f, +0.000011f, +0.000396f, - +0.000126f, -0.000118f, -0.000054f, +0.000111f, -0.000049f, -0.000245f - }, - { - -0.028403f, -0.278906f, +0.036879f, +0.003455f, +0.006995f, -0.005373f, -0.000066f, +0.005058f, -0.000409f, +0.012163f, - -0.003176f, -0.003327f, +0.000799f, +0.002373f, -0.033572f, -0.005775f, -0.007915f, -0.004754f, +0.017993f, +0.014210f, - -0.000921f, -0.006248f, +0.006923f, -0.015582f, -0.009237f, -0.003298f, +0.013335f, -0.006235f, +0.010487f, -0.007196f, - -0.005689f, -0.003393f, +0.006843f, +0.002791f, -0.003373f, +0.001589f, -0.002738f, +0.006189f, +0.000792f, -0.001677f, - +0.001600f, +0.002204f, +0.000389f, +0.003164f, +0.001334f, -0.001201f, -0.003882f, +0.002359f, -0.002187f, +0.003591f, - -0.003896f, -0.005080f, -0.001702f, -0.002752f, +0.001957f, +0.000965f, -0.000428f, +0.000677f, -0.000767f, -0.001057f, - +0.000467f, -0.001435f, +0.001945f, +0.001888f, +0.000095f, +0.000269f, +0.001012f, +0.000766f, -0.002736f, -0.002099f, - +0.001117f, -0.001113f, +0.001165f, -0.000061f, -0.001066f, -0.000728f, -0.000371f, -0.000502f, -0.000851f, +0.000632f, - -0.000950f, -0.001932f, -0.000912f, +0.000091f, +0.000235f, -0.000257f, -0.000754f, +0.000288f, -0.000300f, +0.000019f, - +0.001005f, -0.000369f, -0.000685f, -0.000501f, +0.000152f, +0.000060f - }, - { - +0.000589f, +0.005732f, +0.013720f, -0.004890f, +0.001184f, +0.001068f, -0.000119f, +0.000664f, +0.002221f, -0.000288f, - +0.005346f, -0.004301f, -0.005283f, +0.014231f, +0.012271f, +0.004502f, +0.000262f, -0.006245f, +0.003046f, -0.022163f, - +0.008263f, +0.009880f, +0.004765f, -0.025659f, -0.007253f, +0.021664f, -0.006024f, -0.003725f, +0.003976f, -0.001477f, - -0.008457f, +0.007140f, +0.002569f, +0.005704f, +0.010083f, +0.006357f, +0.002532f, -0.005209f, +0.005177f, +0.008352f, - -0.001313f, -0.001969f, -0.000163f, -0.000801f, +0.002139f, -0.000066f, -0.001500f, -0.000628f, +0.002607f, +0.000627f, - -0.001555f, +0.001203f, -0.003167f, +0.001778f, +0.000902f, -0.003243f, +0.001208f, -0.000525f, -0.002157f, -0.001741f, - +0.002646f, +0.000391f, -0.001315f, -0.000731f, +0.001766f, -0.000159f, +0.001166f, +0.000221f, +0.000638f, -0.001375f, - -0.000927f, -0.000202f, +0.000574f, -0.001379f, -0.001268f, -0.001473f, +0.000373f, -0.000706f, -0.000449f, +0.000519f, - -0.000916f, -0.000637f, +0.000774f, -0.000690f, -0.000102f, +0.000124f, +0.000458f, +0.000399f, -0.000261f, -0.000904f, - +0.000491f, +0.000058f, -0.001214f, -0.000329f, +0.000763f, +0.000548f - }, - { - -0.073409f, -0.052484f, +0.039048f, +0.056575f, +0.004253f, +0.006468f, -0.003614f, -0.000564f, -0.009509f, +0.014735f, - +0.015728f, +0.015704f, +0.004896f, -0.007787f, +0.008173f, -0.000564f, -0.003690f, -0.001099f, +0.000195f, -0.005616f, - -0.001530f, +0.002823f, -0.000454f, -0.003910f, +0.013083f, +0.004092f, +0.003359f, +0.006166f, -0.003485f, +0.004169f, - -0.002315f, -0.004860f, -0.002921f, -0.000448f, +0.001484f, -0.001600f, +0.007804f, -0.004958f, +0.003241f, +0.001532f, - +0.002926f, +0.000833f, -0.008997f, +0.000260f, +0.004669f, -0.000654f, +0.000208f, +0.002144f, +0.001128f, +0.000236f, - -0.001057f, +0.000148f, +0.003434f, +0.001493f, +0.000135f, +0.000113f, -0.000232f, -0.000312f, -0.001458f, -0.000297f, - -0.000250f, -0.001284f, -0.000487f, -0.000434f, -0.001717f, -0.000156f, -0.000433f, -0.001215f, -0.000610f, -0.000596f, - -0.000967f, -0.000977f, +0.001200f, -0.001238f, +0.000721f, +0.000669f, -0.000605f, -0.000212f, +0.000665f, -0.000191f, - +0.000474f, +0.000145f, +0.000057f, -0.000576f, -0.000602f, +0.000074f, -0.000010f, +0.000205f, +0.000735f, -0.000239f, - +0.000301f, -0.000471f, -0.000101f, -0.000383f, -0.000036f, -0.000501f - }, - { - +0.000232f, -0.026705f, +0.002008f, +0.006345f, -0.000728f, -0.001800f, +0.000454f, +0.000933f, +0.001961f, -0.001187f, - +0.004981f, +0.014935f, +0.000813f, +0.007516f, -0.019896f, +0.010933f, -0.002845f, +0.006396f, +0.002101f, +0.022272f, - +0.006722f, -0.000844f, -0.006351f, +0.008277f, -0.000696f, -0.002541f, -0.003477f, +0.018423f, +0.008022f, -0.010341f, - +0.001634f, -0.004502f, -0.002625f, -0.002107f, -0.006963f, +0.006070f, -0.004239f, -0.002207f, +0.004677f, +0.001430f, - -0.002381f, -0.001813f, +0.005420f, +0.000457f, -0.001187f, +0.003929f, +0.002084f, +0.003225f, +0.005404f, +0.001156f, - +0.000573f, -0.002430f, +0.001580f, +0.002875f, +0.001669f, +0.001809f, +0.002173f, -0.003651f, -0.002208f, -0.000146f, - -0.001380f, -0.002210f, -0.000779f, +0.001508f, +0.000023f, -0.000189f, -0.000544f, +0.000266f, +0.000104f, -0.001174f, - +0.002218f, +0.000600f, +0.000838f, -0.000923f, +0.000677f, -0.001444f, -0.000927f, +0.000360f, +0.001157f, -0.000084f, - +0.000008f, +0.000069f, +0.000141f, +0.000931f, -0.000790f, -0.000162f, -0.000998f, -0.000103f, +0.000087f, -0.000439f, - -0.000458f, -0.000082f, -0.000296f, -0.000088f, -0.000174f, -0.000335f - }, - { - +0.025843f, -0.398486f, +0.026231f, +0.042697f, +0.014505f, -0.000334f, -0.013525f, -0.005022f, -0.010185f, -0.001409f, - -0.017376f, +0.011031f, +0.001612f, -0.001286f, -0.006755f, -0.010751f, +0.011091f, -0.000529f, +0.000538f, +0.001618f, - -0.003139f, -0.003204f, +0.002089f, +0.005051f, -0.001749f, -0.002815f, +0.002373f, -0.000293f, -0.000008f, +0.000083f, - +0.005301f, -0.005865f, -0.003057f, -0.005115f, +0.001474f, +0.005602f, +0.003432f, -0.001267f, -0.006697f, +0.004448f, - +0.006683f, +0.003377f, -0.005218f, +0.001558f, -0.001157f, -0.005919f, +0.000692f, +0.004366f, +0.001451f, -0.000505f, - -0.005268f, -0.002080f, +0.000860f, +0.000480f, -0.001131f, -0.004192f, +0.002166f, +0.002394f, +0.000154f, +0.001973f, - +0.001529f, +0.001912f, -0.000924f, -0.000481f, -0.000383f, -0.000304f, +0.000035f, +0.000422f, -0.000467f, +0.000290f, - +0.001089f, -0.000851f, -0.000903f, +0.000762f, -0.000793f, -0.000617f, +0.000794f, +0.000005f, -0.000713f, +0.000600f, - +0.000647f, -0.000133f, -0.000577f, +0.000117f, +0.000929f, +0.000644f, -0.000237f, -0.000651f, +0.000038f, +0.000352f, - -0.000184f, +0.000327f, +0.000591f, +0.000727f, -0.000021f, +0.000010f - }, - { - -0.001482f, -0.065980f, +0.011437f, -0.014366f, +0.016281f, -0.001911f, -0.005932f, +0.005578f, +0.003107f, +0.006265f, - +0.014095f, +0.013644f, -0.001721f, +0.005209f, -0.007442f, -0.003497f, +0.016786f, -0.014765f, -0.027237f, -0.001984f, - +0.013733f, +0.030959f, -0.006784f, +0.004727f, -0.008749f, -0.020563f, -0.003350f, +0.003929f, -0.006125f, +0.011695f, - +0.007950f, -0.000744f, +0.002143f, +0.004685f, -0.004176f, -0.009597f, -0.004124f, -0.000714f, +0.002182f, -0.003482f, - +0.002383f, -0.003915f, -0.001888f, +0.007718f, +0.004234f, +0.001179f, -0.005666f, +0.000247f, +0.003315f, +0.004891f, - +0.000391f, +0.003082f, -0.003018f, -0.001065f, -0.001204f, -0.000542f, +0.002248f, +0.002989f, +0.002683f, -0.000680f, - +0.001358f, +0.000554f, -0.000683f, -0.000574f, -0.000269f, +0.000521f, -0.001312f, -0.001370f, -0.000903f, +0.000000f, - -0.000076f, +0.000118f, -0.000958f, -0.000724f, -0.001228f, -0.000918f, -0.000782f, +0.001319f, -0.000109f, +0.000312f, - +0.000761f, -0.000574f, -0.000508f, -0.000427f, -0.000386f, -0.000864f, +0.000352f, +0.000077f, +0.000411f, +0.000295f, - -0.000547f, -0.000115f, -0.000078f, +0.000358f, +0.000270f, -0.000410f - }, - { - -0.035288f, -0.088981f, +0.022502f, +0.016117f, +0.006055f, -0.014740f, +0.021301f, +0.007800f, +0.002485f, +0.015095f, - +0.001871f, -0.002420f, -0.005122f, -0.003434f, +0.022483f, +0.006287f, +0.002841f, -0.004984f, -0.001811f, -0.003160f, - +0.001370f, +0.000720f, +0.001962f, -0.002304f, +0.005422f, -0.006085f, +0.004337f, +0.003055f, +0.008502f, +0.002652f, - -0.003586f, +0.000854f, -0.002808f, -0.001702f, +0.000064f, +0.000675f, +0.001924f, -0.000611f, -0.000990f, -0.004397f, - -0.004290f, -0.001958f, +0.005348f, +0.002255f, -0.001378f, +0.003496f, +0.000360f, -0.001228f, -0.002567f, -0.000911f, - -0.000400f, +0.001478f, -0.000489f, -0.000358f, +0.001376f, -0.001020f, +0.003229f, -0.001471f, +0.001594f, -0.000339f, - -0.002071f, +0.001809f, +0.000565f, +0.001237f, -0.002890f, -0.001588f, +0.000196f, -0.000424f, +0.000512f, +0.001253f, - +0.000600f, -0.000127f, +0.000692f, +0.000326f, +0.000354f, +0.000240f, -0.000524f, +0.001294f, +0.001005f, +0.000395f, - +0.000150f, -0.000073f, -0.000345f, -0.000217f, +0.000137f, +0.000489f, +0.000440f, +0.000384f, +0.000083f, -0.000197f, - +0.000004f, -0.000158f, +0.000001f, -0.000080f, -0.000291f, -0.000372f - }, - { - -0.000162f, -0.060728f, -0.014223f, +0.017008f, +0.015347f, -0.002490f, -0.001421f, -0.006587f, +0.002986f, -0.003697f, - +0.006212f, +0.015159f, +0.005905f, -0.016616f, -0.000956f, +0.016634f, +0.008273f, +0.001102f, -0.000553f, -0.000248f, - +0.004376f, -0.007339f, +0.009448f, -0.007717f, +0.009604f, -0.011075f, -0.001600f, +0.001411f, -0.005434f, +0.000514f, - -0.010119f, +0.004799f, -0.002071f, +0.001290f, -0.005877f, -0.003923f, +0.000624f, +0.000226f, +0.007586f, -0.003527f, - -0.009032f, +0.001533f, -0.000883f, -0.003147f, -0.000978f, +0.003317f, -0.000845f, +0.002239f, -0.002125f, -0.001231f, - -0.000177f, -0.000951f, -0.000710f, -0.002745f, +0.002516f, -0.004451f, -0.001187f, -0.000035f, +0.004030f, +0.000922f, - -0.000415f, +0.000335f, -0.001190f, -0.001171f, +0.001427f, -0.000143f, +0.000533f, -0.000725f, -0.000672f, -0.000086f, - +0.000539f, +0.003436f, -0.000769f, +0.001081f, +0.000152f, +0.000709f, -0.000001f, -0.000011f, +0.000495f, -0.000482f, - +0.000055f, -0.001199f, +0.001207f, -0.000375f, +0.000006f, +0.000776f, -0.000845f, -0.000308f, -0.000404f, +0.000124f, - +0.000242f, +0.000302f, +0.000108f, +0.000064f, -0.000060f, -0.000165f - }, - { - +0.048997f, +0.208193f, -0.030149f, -0.009386f, +0.010642f, +0.000221f, -0.025404f, -0.003095f, -0.016649f, -0.005658f, - +0.003805f, -0.008588f, -0.000054f, -0.002600f, -0.005557f, +0.004536f, -0.005810f, +0.008872f, -0.008658f, -0.003689f, - -0.001259f, +0.014493f, +0.001928f, -0.008442f, -0.013814f, -0.000472f, +0.002549f, +0.002226f, +0.004792f, +0.001808f, - +0.005535f, -0.002451f, +0.008584f, +0.003771f, -0.012765f, +0.005721f, +0.002249f, -0.006983f, +0.007821f, +0.000115f, - +0.000984f, +0.003017f, +0.007257f, -0.004805f, -0.002099f, -0.000490f, +0.002100f, +0.002122f, +0.001630f, -0.000235f, - -0.003991f, -0.001856f, -0.004917f, -0.004531f, -0.000481f, -0.000590f, +0.000283f, +0.002834f, -0.000315f, +0.000696f, - -0.001517f, -0.001427f, -0.001622f, +0.000089f, -0.000697f, +0.001322f, +0.001133f, -0.000155f, +0.000138f, +0.001830f, - +0.001012f, -0.000750f, +0.002541f, -0.000988f, -0.000217f, +0.000631f, +0.000386f, -0.001297f, +0.000744f, -0.000540f, - -0.000143f, +0.000474f, +0.000005f, -0.000694f, -0.000250f, +0.000542f, +0.000814f, +0.000057f, +0.000367f, -0.000170f, - -0.000641f, +0.000184f, +0.000195f, +0.000167f, +0.000317f, +0.000430f - }, - { - -0.004362f, -0.040761f, +0.009091f, +0.001708f, -0.004935f, -0.001320f, -0.000660f, -0.001214f, -0.011601f, +0.004307f, - +0.000481f, -0.000229f, +0.005086f, -0.047068f, -0.008106f, +0.017744f, +0.002298f, +0.005296f, +0.021468f, -0.012386f, - +0.014444f, +0.004303f, -0.010549f, -0.004889f, -0.007016f, -0.004323f, -0.008645f, -0.012581f, -0.001893f, -0.008351f, - +0.010149f, -0.003509f, -0.006160f, +0.004102f, -0.006878f, +0.000533f, +0.003673f, -0.005150f, +0.004975f, +0.002169f, - +0.004230f, -0.000070f, +0.002677f, +0.004563f, +0.001427f, +0.000061f, +0.000298f, +0.000920f, +0.002535f, -0.001536f, - -0.001748f, +0.000676f, -0.001263f, +0.001498f, +0.001719f, +0.000486f, -0.001329f, +0.001437f, -0.000600f, +0.001262f, - +0.002834f, -0.001224f, +0.000071f, -0.000229f, -0.000548f, +0.001295f, -0.000697f, -0.001466f, +0.000242f, +0.000647f, - -0.000111f, +0.000725f, -0.000231f, +0.001347f, +0.000977f, -0.000573f, -0.000713f, -0.002028f, -0.000448f, -0.000100f, - -0.000664f, -0.000526f, +0.000992f, -0.000456f, -0.000097f, +0.000354f, -0.000475f, -0.000088f, +0.000151f, -0.000214f, - -0.000413f, +0.000031f, +0.000021f, +0.000032f, -0.000118f, +0.000161f - }, - { - +0.004988f, +0.159136f, -0.002088f, -0.009033f, +0.003790f, +0.002699f, +0.002013f, +0.003301f, -0.008135f, +0.008167f, - -0.005376f, -0.008685f, +0.013527f, -0.015715f, -0.045449f, -0.001601f, +0.023055f, -0.000206f, -0.012800f, -0.016870f, - -0.006205f, -0.001569f, -0.004649f, -0.002393f, -0.004760f, +0.014934f, -0.000577f, -0.010067f, -0.007335f, +0.002153f, - +0.001861f, -0.008829f, -0.007341f, -0.002191f, -0.004393f, +0.000894f, -0.000669f, -0.001325f, +0.002927f, -0.000285f, - +0.001496f, +0.004132f, -0.004376f, -0.003770f, -0.004993f, -0.003279f, -0.001935f, -0.001248f, -0.001796f, +0.001613f, - +0.001340f, +0.002437f, -0.000331f, -0.004258f, +0.001307f, +0.000052f, +0.000582f, +0.001592f, +0.000750f, -0.000069f, - +0.000722f, -0.001155f, -0.000321f, +0.000470f, -0.001568f, +0.001521f, +0.000318f, +0.000370f, +0.000615f, -0.000666f, - +0.000511f, -0.001022f, -0.001112f, -0.000916f, +0.000316f, -0.000372f, -0.000078f, -0.000037f, +0.000566f, +0.000568f, - -0.000683f, -0.001571f, +0.000318f, -0.000534f, -0.000601f, -0.000693f, -0.001307f, -0.000642f, +0.000228f, +0.000694f, - +0.000250f, +0.000066f, +0.000240f, -0.000441f, -0.000131f, -0.000263f - } - }, - { - { - -0.002690f, -0.113906f, -0.007630f, +0.009879f, +0.000558f, -0.001695f, +0.006495f, -0.001851f, -0.000542f, +0.004772f, - +0.007487f, -0.006462f, -0.004796f, -0.008623f, -0.004820f, +0.013585f, +0.002718f, -0.004271f, +0.024179f, +0.010159f, - +0.002542f, +0.000207f, +0.004669f, +0.008496f, -0.010153f, -0.008460f, -0.015499f, -0.007390f, -0.004767f, -0.013223f, - -0.011308f, +0.007412f, +0.007532f, -0.001905f, +0.000768f, +0.001062f, -0.001363f, +0.008329f, +0.001895f, +0.001134f, - +0.001217f, -0.003536f, -0.001357f, -0.003561f, -0.000181f, +0.000731f, -0.001090f, -0.001850f, +0.005954f, +0.003073f, - +0.001638f, +0.000849f, +0.000284f, +0.001154f, -0.001368f, +0.001014f, -0.001551f, -0.001960f, +0.001479f, -0.000561f, - -0.002243f, -0.001173f, +0.001027f, +0.000352f, +0.000286f, +0.000125f, -0.001432f, +0.000409f, +0.000320f, +0.000105f, - +0.000535f, -0.000161f, -0.000392f, +0.000341f, -0.001282f, +0.001073f, +0.000170f, +0.001690f, -0.000043f, +0.000332f, - -0.000106f, -0.000143f, -0.000532f, +0.000420f, -0.000547f, -0.000039f, +0.000012f, -0.000837f, +0.000432f, +0.000447f, - +0.000472f, +0.000273f, +0.000058f, +0.000150f, -0.000049f, +0.000326f - }, - { - -0.024368f, -0.335530f, +0.010211f, +0.024076f, +0.006753f, -0.000758f, -0.003999f, -0.000577f, -0.007696f, -0.009047f, - -0.017941f, -0.006814f, +0.002649f, -0.002776f, -0.019271f, -0.010659f, -0.008156f, -0.001656f, +0.005286f, -0.003422f, - +0.002727f, -0.007571f, +0.007780f, +0.001936f, -0.006951f, -0.001845f, +0.002920f, +0.010838f, -0.000882f, +0.002546f, - +0.001212f, -0.000348f, +0.004073f, -0.001503f, +0.005458f, -0.002862f, +0.006483f, +0.002445f, +0.003648f, +0.006510f, - -0.000520f, -0.005924f, -0.000268f, -0.000635f, -0.000186f, -0.003400f, +0.001756f, +0.000856f, -0.000201f, -0.000146f, - +0.004503f, +0.003724f, +0.001580f, -0.004147f, -0.000455f, -0.000459f, +0.002510f, -0.002692f, -0.000589f, +0.001164f, - -0.002326f, +0.000047f, -0.000180f, -0.001224f, -0.000338f, -0.001800f, +0.000759f, -0.000649f, -0.000974f, -0.000271f, - +0.000478f, +0.001079f, +0.000363f, -0.001008f, +0.000111f, +0.001158f, -0.000482f, +0.000149f, -0.000345f, +0.001011f, - -0.000251f, -0.000530f, -0.000083f, -0.000105f, +0.000357f, -0.000168f, -0.000025f, -0.000058f, -0.000205f, +0.000193f, - +0.000124f, +0.000495f, +0.000248f, -0.000115f, +0.000027f, -0.000160f - }, - { - +0.009300f, +0.247111f, +0.045845f, +0.005404f, +0.010514f, +0.003804f, +0.003730f, -0.002392f, -0.005308f, -0.010953f, - +0.004292f, -0.011263f, -0.004090f, +0.001834f, +0.001168f, +0.005442f, +0.009981f, +0.004912f, +0.003937f, +0.006795f, - +0.007959f, -0.000112f, +0.007090f, +0.015005f, -0.006267f, -0.004394f, -0.003301f, -0.005994f, -0.002714f, -0.006563f, - +0.001374f, -0.002054f, +0.000904f, -0.008452f, +0.001040f, -0.004164f, +0.006047f, -0.001536f, +0.000167f, -0.005804f, - -0.003519f, +0.002016f, +0.001645f, +0.003174f, -0.001399f, +0.002805f, -0.000704f, +0.002508f, +0.001236f, +0.000906f, - -0.001575f, +0.001122f, +0.003127f, -0.001160f, -0.002925f, -0.000452f, +0.002579f, -0.001395f, +0.000887f, +0.003737f, - -0.000269f, -0.000232f, -0.001050f, +0.001195f, +0.000500f, -0.000411f, -0.001492f, -0.001016f, +0.000573f, +0.000055f, - -0.000236f, +0.000705f, +0.000851f, +0.000275f, -0.001559f, -0.000064f, +0.000115f, -0.000029f, -0.000025f, +0.000285f, - -0.000268f, +0.000199f, +0.000611f, -0.000103f, +0.000047f, +0.000132f, +0.000072f, -0.000215f, -0.000183f, -0.000359f, - +0.000331f, -0.000476f, -0.000186f, -0.000071f, +0.000711f, -0.000187f - }, - { - -0.000879f, -0.071201f, +0.008900f, -0.006767f, +0.000415f, +0.000432f, -0.000236f, +0.000121f, -0.000463f, -0.003243f, - -0.003170f, +0.013273f, -0.004418f, +0.005567f, -0.007141f, -0.014283f, -0.004784f, -0.003628f, -0.013823f, +0.002902f, - -0.010256f, -0.016919f, +0.011528f, -0.004286f, +0.006895f, +0.000206f, +0.007554f, -0.000052f, +0.001765f, -0.010109f, - -0.000624f, +0.006738f, -0.001724f, +0.006171f, +0.000668f, -0.009212f, +0.005795f, -0.003671f, +0.005337f, -0.003989f, - +0.003235f, -0.000614f, -0.001040f, +0.000199f, +0.002667f, +0.002674f, +0.004604f, -0.005163f, +0.000071f, -0.003130f, - -0.002034f, +0.000850f, +0.001414f, -0.001334f, -0.000981f, +0.002206f, -0.000453f, +0.001007f, -0.000423f, -0.001229f, - -0.001624f, +0.000104f, -0.002409f, -0.000047f, -0.000265f, -0.000123f, -0.000864f, +0.000471f, +0.001064f, -0.000754f, - +0.000330f, +0.000095f, -0.000271f, +0.000860f, +0.000041f, +0.000467f, -0.000106f, +0.000464f, +0.000250f, -0.000093f, - +0.000505f, -0.000057f, -0.001561f, +0.000489f, +0.000390f, -0.000197f, -0.000431f, -0.000244f, -0.000360f, +0.000078f, - +0.000223f, +0.000030f, -0.000053f, +0.000024f, +0.000027f, -0.000281f - }, - { - +0.057917f, -0.251025f, -0.021837f, +0.004713f, +0.001645f, -0.002582f, -0.000509f, +0.004957f, -0.003063f, +0.005561f, - +0.010888f, +0.016240f, +0.003024f, +0.006065f, -0.022965f, -0.000372f, -0.008163f, -0.013106f, +0.001260f, +0.004284f, - -0.000480f, -0.004235f, +0.008696f, -0.007887f, +0.000266f, -0.001773f, +0.001140f, -0.015331f, -0.000528f, -0.007674f, - +0.000989f, -0.003844f, +0.002463f, -0.003503f, -0.008700f, +0.000574f, -0.015812f, +0.001333f, +0.006295f, -0.005387f, - -0.004293f, +0.004670f, +0.000695f, +0.000737f, +0.007463f, +0.005892f, +0.001780f, +0.008214f, +0.000232f, +0.001729f, - -0.000543f, -0.000215f, -0.000074f, -0.000023f, +0.002674f, +0.001248f, +0.000956f, +0.002197f, +0.000716f, -0.000543f, - -0.000033f, -0.001028f, +0.001926f, +0.000934f, -0.000915f, +0.001359f, +0.001404f, +0.001774f, +0.000150f, -0.000047f, - +0.001516f, -0.000774f, +0.001206f, -0.000824f, -0.000805f, -0.001039f, -0.000669f, -0.000849f, -0.000782f, +0.000254f, - -0.000907f, -0.000191f, +0.000212f, -0.000400f, -0.000176f, -0.000081f, -0.000292f, +0.000172f, +0.000047f, +0.000161f, - +0.000715f, +0.000136f, -0.000315f, -0.000194f, +0.000339f, -0.000014f - }, - { - +0.001039f, -0.016929f, -0.001958f, +0.001368f, +0.001566f, +0.000729f, -0.000146f, +0.001955f, +0.003509f, -0.004989f, - -0.001144f, -0.005925f, -0.010866f, +0.006796f, +0.008467f, +0.000606f, +0.002036f, +0.005767f, +0.011607f, -0.026488f, - -0.002605f, +0.003765f, -0.003403f, -0.028690f, -0.009168f, +0.021309f, -0.002883f, -0.002044f, -0.002229f, -0.007407f, - -0.004471f, +0.010668f, +0.003155f, -0.001266f, -0.000331f, +0.001752f, +0.002494f, -0.006623f, -0.000783f, +0.003184f, - +0.000614f, -0.001053f, -0.000411f, -0.000400f, +0.003377f, +0.001035f, -0.001169f, +0.000552f, +0.003308f, +0.001556f, - -0.003528f, -0.000811f, -0.004220f, +0.000089f, +0.000025f, -0.001528f, +0.001606f, +0.000775f, +0.000780f, +0.000171f, - +0.002627f, +0.000681f, +0.000161f, -0.000597f, +0.001425f, -0.001274f, +0.000487f, -0.000223f, -0.000647f, -0.001324f, - +0.000901f, -0.000003f, +0.000092f, -0.000442f, +0.000464f, +0.000780f, +0.001328f, -0.000228f, -0.000545f, +0.000854f, - +0.000168f, -0.000621f, +0.000757f, -0.000197f, +0.000622f, -0.000032f, -0.000180f, +0.000323f, +0.000600f, -0.000001f, - +0.000310f, +0.000161f, -0.000465f, -0.000319f, +0.000140f, -0.000147f - }, - { - +0.088119f, +0.084596f, -0.025317f, +0.027895f, -0.013481f, +0.000312f, -0.002606f, +0.001039f, -0.011934f, +0.006322f, - +0.002278f, -0.006899f, -0.011522f, -0.008515f, +0.015288f, -0.001573f, -0.001223f, +0.003209f, +0.002303f, -0.001007f, - -0.001594f, +0.000451f, -0.003701f, -0.005922f, +0.015880f, +0.003572f, +0.000250f, +0.001020f, -0.005471f, +0.006022f, - -0.000039f, -0.002438f, +0.002564f, +0.003946f, +0.003296f, -0.003361f, +0.003004f, -0.012084f, -0.001261f, +0.001118f, - +0.004200f, +0.003710f, -0.008620f, -0.001098f, +0.002855f, +0.001581f, +0.000551f, -0.000284f, +0.000703f, +0.002178f, - -0.000089f, -0.003375f, +0.003352f, -0.000665f, -0.001702f, -0.001144f, -0.001322f, +0.000213f, -0.001269f, -0.000898f, - -0.000177f, -0.000284f, -0.000427f, +0.000196f, -0.000781f, +0.000234f, +0.001234f, -0.001252f, +0.000037f, -0.000197f, - -0.001125f, -0.000314f, +0.001339f, -0.001583f, +0.000674f, +0.001138f, -0.000026f, -0.000749f, +0.000479f, -0.000983f, - -0.000665f, +0.000285f, +0.000677f, +0.000330f, +0.000658f, +0.000365f, -0.000070f, -0.000106f, -0.000146f, -0.000694f, - +0.000434f, -0.000352f, -0.000075f, -0.000638f, -0.000163f, -0.000275f - }, - { - +0.002284f, -0.007096f, +0.003291f, +0.001118f, +0.000589f, +0.000099f, +0.000147f, +0.000385f, +0.005203f, -0.001005f, - +0.000031f, +0.004611f, -0.003062f, +0.011702f, -0.023602f, +0.005703f, -0.001818f, -0.002715f, -0.002735f, +0.023590f, - -0.009305f, -0.014572f, -0.006988f, +0.000014f, +0.005549f, -0.003587f, -0.011099f, +0.011467f, -0.001646f, -0.001361f, - +0.010092f, +0.007141f, +0.001442f, -0.002571f, -0.001247f, +0.010770f, -0.002437f, -0.001645f, +0.003738f, +0.000097f, - -0.001726f, -0.003532f, +0.000509f, +0.002213f, -0.000137f, -0.001227f, -0.001562f, -0.002309f, +0.002118f, +0.002816f, - -0.000189f, -0.002261f, +0.001348f, -0.000515f, -0.000286f, -0.001151f, -0.000641f, -0.004409f, -0.001991f, +0.001361f, - +0.000107f, +0.000499f, +0.000120f, +0.001507f, +0.000204f, +0.000069f, -0.001239f, -0.000805f, -0.000128f, -0.002815f, - +0.001066f, +0.000253f, -0.000207f, -0.000371f, +0.000998f, -0.000567f, -0.000002f, +0.000717f, +0.001574f, +0.001337f, - +0.000877f, -0.000072f, +0.000121f, +0.000832f, -0.000549f, +0.000036f, -0.000843f, +0.000439f, +0.000630f, -0.000142f, - -0.000210f, -0.000113f, +0.000056f, +0.000686f, +0.000528f, +0.000035f - }, - { - +0.007517f, -0.470856f, -0.000840f, +0.018815f, -0.005468f, -0.006646f, -0.012332f, -0.001343f, -0.005012f, +0.005546f, - -0.014665f, +0.000388f, -0.007899f, +0.004078f, +0.009115f, -0.002047f, +0.000741f, -0.002037f, +0.003287f, +0.005125f, - +0.007634f, +0.002823f, -0.000279f, +0.002465f, -0.001666f, -0.000929f, +0.000414f, +0.000109f, +0.001614f, -0.000782f, - +0.004339f, -0.007483f, -0.000476f, -0.003872f, +0.003237f, -0.002970f, -0.004121f, +0.004313f, -0.001355f, +0.002541f, - +0.007111f, +0.000835f, -0.003024f, +0.004458f, +0.000147f, -0.006209f, -0.000717f, +0.000773f, -0.001681f, +0.000137f, - -0.002135f, -0.000017f, +0.000470f, +0.000176f, -0.000287f, -0.002276f, +0.001803f, -0.001445f, -0.003446f, +0.000544f, - +0.000251f, +0.001817f, -0.000798f, +0.000428f, +0.000986f, -0.000663f, -0.001149f, -0.000395f, -0.000846f, -0.000592f, - +0.000883f, +0.000282f, -0.001094f, +0.000303f, +0.000084f, -0.000356f, +0.000411f, -0.000027f, -0.000530f, +0.000502f, - +0.000951f, +0.000116f, -0.000402f, -0.000121f, +0.000937f, +0.000848f, -0.000227f, +0.000310f, +0.000067f, +0.000084f, - -0.000025f, +0.000433f, +0.000177f, +0.000449f, -0.000330f, -0.000268f - }, - { - +0.000118f, -0.082694f, +0.015439f, -0.010706f, +0.006560f, -0.001269f, -0.006125f, +0.003574f, -0.002241f, -0.001959f, - +0.007806f, +0.008934f, -0.003186f, +0.007471f, -0.003981f, -0.017566f, +0.002442f, -0.006848f, -0.002442f, +0.004374f, - -0.003293f, +0.019378f, -0.007398f, +0.004661f, +0.005475f, -0.009027f, -0.000301f, -0.002077f, -0.015949f, +0.008168f, - +0.000921f, -0.007008f, -0.003918f, -0.002899f, -0.006758f, +0.000089f, +0.005340f, +0.001641f, +0.004453f, -0.001385f, - +0.003693f, -0.002246f, -0.002406f, +0.004375f, +0.002025f, -0.000004f, -0.006708f, -0.001024f, +0.000821f, -0.000070f, - -0.002999f, +0.002564f, -0.001444f, +0.002838f, -0.000241f, -0.000683f, +0.001038f, +0.000869f, +0.000458f, -0.003975f, - +0.000252f, +0.001389f, -0.000599f, -0.000196f, -0.000504f, +0.000212f, -0.000856f, +0.000935f, +0.000003f, -0.001110f, - -0.000268f, +0.000125f, -0.001499f, -0.000946f, -0.002187f, -0.000443f, -0.000664f, +0.000572f, -0.001011f, -0.000935f, - +0.000712f, +0.000018f, -0.000023f, -0.000181f, -0.000554f, -0.000473f, +0.000145f, -0.000060f, +0.000274f, -0.000046f, - -0.000771f, +0.000036f, +0.000232f, +0.000075f, -0.000180f, -0.000102f - }, - { - +0.036299f, -0.088325f, -0.046420f, +0.000907f, +0.019469f, -0.006958f, -0.000454f, +0.004705f, -0.007586f, +0.008459f, - -0.008295f, -0.004772f, -0.002072f, -0.002759f, +0.007121f, -0.004053f, +0.000562f, -0.004170f, -0.006416f, -0.010032f, - +0.000170f, +0.004654f, +0.001153f, -0.006448f, +0.004251f, -0.009727f, +0.003990f, -0.003198f, +0.001752f, -0.000098f, - -0.002478f, +0.000744f, -0.002047f, -0.001118f, +0.002047f, +0.005398f, +0.001749f, -0.001848f, -0.000044f, -0.002446f, - -0.000994f, +0.000334f, +0.004529f, +0.000154f, -0.002210f, +0.006122f, +0.002624f, -0.001955f, -0.005114f, +0.000261f, - +0.000837f, +0.001819f, +0.000833f, -0.001515f, -0.001478f, -0.004506f, +0.001358f, -0.000145f, +0.000130f, -0.002058f, - -0.001181f, +0.002658f, +0.000102f, +0.000864f, -0.000428f, -0.000957f, -0.000005f, -0.000468f, +0.000201f, +0.001116f, - +0.000131f, -0.000567f, +0.000068f, -0.000647f, -0.000351f, +0.000602f, -0.000298f, +0.000438f, -0.000125f, -0.000025f, - +0.000339f, +0.000376f, +0.000070f, +0.000075f, -0.000166f, -0.000142f, -0.000774f, -0.000164f, +0.000127f, -0.000340f, - -0.000113f, -0.000173f, -0.000121f, +0.000046f, -0.000046f, -0.000435f - }, - { - -0.001249f, -0.031921f, +0.010982f, +0.006511f, +0.008854f, -0.004529f, +0.003811f, -0.006920f, -0.000326f, -0.004982f, - +0.002381f, +0.007856f, -0.017603f, -0.051735f, -0.006196f, +0.009745f, +0.003068f, +0.002655f, +0.001087f, +0.002481f, - +0.002644f, -0.006393f, +0.011031f, -0.007055f, -0.002103f, -0.008029f, +0.009055f, +0.008809f, +0.005428f, +0.006159f, - -0.011404f, +0.007227f, -0.000211f, +0.002918f, -0.005906f, -0.002863f, -0.008355f, -0.005505f, +0.003183f, -0.002937f, - -0.005936f, +0.003612f, -0.001668f, -0.004332f, +0.000097f, +0.003257f, -0.002569f, +0.002529f, -0.003863f, -0.002566f, - +0.000415f, -0.000292f, +0.000294f, -0.000666f, +0.001586f, -0.005525f, +0.000851f, -0.001080f, +0.001261f, -0.000776f, - -0.000687f, +0.000456f, +0.000082f, -0.000117f, +0.001182f, -0.000342f, -0.000548f, -0.000900f, -0.000687f, +0.001199f, - -0.000409f, +0.001472f, -0.000195f, +0.001250f, -0.000097f, +0.000604f, -0.000246f, -0.000293f, +0.000627f, -0.000049f, - +0.000805f, -0.000579f, +0.001090f, -0.000173f, -0.000328f, +0.000200f, -0.000576f, +0.000029f, -0.000448f, -0.000093f, - -0.000115f, -0.000270f, -0.000202f, -0.000052f, +0.000134f, +0.000086f - }, - { - -0.060837f, +0.070627f, +0.005917f, +0.002340f, +0.023197f, +0.020299f, -0.026988f, -0.007067f, -0.009153f, +0.003128f, - +0.020626f, +0.006389f, +0.001300f, +0.005819f, +0.013311f, +0.001501f, +0.000676f, +0.012805f, -0.002917f, +0.001467f, - -0.007790f, +0.000950f, -0.005497f, -0.003446f, -0.009625f, -0.003328f, +0.001698f, +0.003313f, +0.006532f, -0.002645f, - -0.000669f, -0.004517f, +0.006289f, +0.005027f, -0.005184f, +0.008327f, -0.007451f, -0.011271f, +0.006209f, -0.002628f, - +0.000720f, +0.001209f, +0.006528f, -0.009703f, -0.006865f, -0.003484f, +0.000643f, -0.000169f, -0.001288f, -0.000455f, - -0.002352f, +0.000550f, -0.003608f, -0.003449f, +0.001435f, +0.000642f, +0.002290f, +0.002771f, +0.000479f, +0.003653f, - -0.000494f, -0.001003f, -0.000098f, +0.000952f, -0.001568f, +0.000277f, -0.000554f, -0.001527f, -0.000841f, -0.000528f, - +0.000383f, +0.000226f, +0.003437f, +0.000105f, +0.000100f, +0.000969f, +0.000916f, -0.000766f, -0.000338f, +0.000360f, - +0.000484f, +0.000053f, -0.000647f, +0.000049f, +0.000413f, -0.000195f, +0.000141f, +0.000015f, +0.000044f, +0.000344f, - -0.000205f, +0.000122f, +0.000291f, +0.000109f, -0.000050f, -0.000089f - }, - { - +0.002867f, -0.033389f, +0.001541f, +0.000317f, +0.002585f, +0.002254f, +0.001545f, +0.004032f, -0.005534f, +0.008608f, - +0.005925f, +0.004912f, +0.005791f, +0.031958f, +0.105524f, +0.020349f, -0.011069f, -0.001922f, +0.014345f, -0.015907f, - +0.005477f, +0.002912f, -0.007316f, -0.008971f, +0.000984f, +0.007486f, -0.001932f, -0.004330f, -0.002147f, -0.010157f, - +0.010293f, +0.004567f, -0.002227f, +0.002664f, -0.009327f, -0.001617f, +0.003632f, -0.007409f, +0.005960f, +0.004655f, - -0.001589f, -0.001731f, +0.003029f, +0.001585f, -0.002850f, -0.001970f, +0.001780f, -0.000448f, +0.000823f, -0.000259f, - -0.000959f, +0.001230f, +0.000391f, +0.000278f, +0.000371f, -0.001525f, -0.001056f, +0.002093f, -0.002113f, -0.000088f, - +0.000886f, -0.001944f, +0.001527f, +0.001039f, -0.001613f, -0.000576f, -0.000556f, -0.001343f, +0.000350f, +0.000586f, - -0.001368f, +0.000454f, +0.000112f, +0.000061f, -0.000247f, +0.000063f, +0.000197f, -0.000306f, +0.000665f, -0.000226f, - -0.000031f, -0.000585f, +0.000579f, -0.000130f, -0.000076f, +0.000246f, -0.000251f, +0.000196f, +0.000015f, +0.000045f, - -0.000233f, +0.000125f, -0.000002f, +0.000142f, +0.000005f, -0.000316f - }, - { - -0.031095f, +0.109140f, +0.014362f, -0.000583f, +0.000051f, +0.002327f, +0.005433f, +0.014091f, -0.002738f, +0.011297f, - +0.002328f, +0.001851f, +0.017488f, +0.023337f, +0.011760f, +0.008249f, +0.021617f, -0.010230f, -0.004141f, -0.000749f, - +0.004962f, +0.005449f, +0.000177f, -0.001497f, -0.003447f, +0.012411f, +0.002330f, -0.010729f, -0.006260f, -0.000440f, - +0.001282f, -0.001809f, -0.000836f, +0.005384f, -0.000240f, +0.000757f, -0.007072f, -0.003282f, +0.000962f, -0.000356f, - +0.003559f, +0.004849f, -0.003902f, -0.005705f, -0.001155f, +0.000333f, +0.002712f, +0.001510f, -0.000818f, +0.000361f, - -0.000320f, +0.003821f, +0.002767f, -0.000970f, +0.004088f, -0.001260f, -0.002453f, +0.001820f, -0.000251f, -0.002159f, - -0.001358f, -0.002918f, -0.000592f, +0.001524f, -0.001127f, +0.000711f, -0.000301f, +0.000330f, +0.001262f, -0.000894f, - -0.000565f, -0.000681f, -0.000162f, -0.000510f, +0.000237f, +0.000124f, +0.000785f, +0.000054f, +0.000360f, +0.000190f, - -0.000143f, -0.000779f, +0.000569f, -0.000701f, -0.001130f, -0.000013f, -0.000135f, -0.000106f, -0.000408f, +0.000363f, - +0.000275f, -0.000039f, +0.000346f, -0.000014f, +0.000133f, -0.000674f - } - }, - { - { - +0.001273f, -0.120991f, -0.000660f, +0.009554f, -0.005477f, +0.000141f, +0.003655f, +0.001745f, -0.005301f, +0.005881f, - -0.000472f, +0.000426f, +0.000763f, -0.000695f, -0.013876f, +0.022468f, -0.000932f, +0.001191f, +0.003455f, +0.021201f, - -0.001801f, +0.001441f, +0.001827f, +0.001590f, +0.013929f, -0.017878f, -0.014810f, -0.005202f, -0.004354f, -0.024743f, - +0.003117f, +0.003597f, -0.000552f, +0.005751f, +0.001633f, -0.002085f, -0.002745f, +0.001799f, +0.008547f, -0.003085f, - +0.001835f, -0.001535f, -0.006167f, +0.001332f, +0.000157f, -0.002830f, +0.000549f, +0.000289f, +0.003920f, +0.001688f, - +0.001389f, +0.000042f, +0.000932f, -0.000623f, +0.001685f, -0.001218f, -0.000768f, -0.002462f, +0.000498f, -0.002116f, - -0.000203f, -0.000165f, +0.001178f, +0.000398f, -0.001073f, +0.001184f, -0.001106f, -0.000296f, +0.000898f, +0.000583f, - -0.000232f, -0.000078f, -0.000081f, -0.000297f, -0.000263f, +0.000746f, +0.000463f, +0.001459f, +0.000089f, -0.000036f, - +0.000605f, -0.000471f, +0.000356f, -0.000341f, +0.000032f, +0.000058f, +0.000291f, -0.000623f, -0.000237f, +0.000373f, - +0.000613f, +0.000219f, +0.000117f, -0.000022f, -0.000219f, +0.000419f - }, - { - +0.022245f, -0.377694f, +0.003063f, +0.019555f, +0.001784f, -0.006312f, +0.001565f, -0.000159f, -0.008224f, -0.015448f, - -0.012904f, -0.009347f, +0.007755f, -0.008908f, -0.014506f, -0.006818f, -0.020318f, -0.004581f, +0.014777f, -0.004156f, - -0.003600f, +0.008239f, -0.005800f, +0.005934f, -0.005016f, -0.004027f, +0.010728f, +0.002349f, -0.001184f, +0.001272f, - +0.001533f, -0.000005f, -0.003493f, +0.009355f, -0.003809f, +0.003965f, +0.002233f, +0.006644f, +0.004841f, +0.001214f, - -0.003256f, +0.000766f, -0.002835f, +0.000825f, +0.002980f, -0.004355f, -0.001513f, +0.001151f, +0.000209f, +0.001829f, - +0.004185f, +0.000300f, +0.002587f, -0.001573f, -0.002410f, +0.001037f, +0.001131f, -0.000951f, -0.002223f, +0.001944f, - -0.001212f, -0.000799f, -0.000441f, -0.000235f, -0.000307f, -0.002941f, +0.000477f, +0.000283f, -0.000174f, -0.001101f, - +0.000149f, +0.000333f, +0.000754f, -0.000357f, -0.000565f, +0.000549f, +0.001095f, -0.000730f, -0.000501f, +0.000775f, - +0.000530f, -0.000694f, -0.000159f, +0.000168f, +0.000558f, -0.000362f, -0.000232f, -0.000094f, -0.000392f, +0.000586f, - -0.000364f, +0.000588f, +0.000240f, +0.000099f, -0.000191f, -0.000142f - }, - { - -0.011872f, +0.247660f, +0.053103f, +0.028237f, +0.007730f, -0.003696f, +0.001596f, +0.002037f, -0.006472f, -0.006134f, - -0.001762f, -0.006631f, -0.008446f, +0.000603f, -0.005496f, +0.013504f, +0.007283f, -0.008937f, +0.001369f, +0.010783f, - +0.006853f, +0.002520f, +0.003485f, +0.016700f, -0.005766f, -0.004550f, +0.001156f, -0.006570f, -0.013732f, -0.001984f, - +0.000451f, +0.002576f, -0.003251f, -0.001549f, -0.004028f, +0.002177f, +0.001485f, -0.000816f, +0.006238f, -0.007373f, - -0.001731f, -0.000432f, -0.001492f, +0.009268f, -0.002370f, -0.000039f, +0.003337f, +0.001226f, +0.000098f, +0.000539f, - -0.000375f, +0.000928f, -0.000465f, -0.000402f, +0.000449f, -0.000768f, +0.000255f, -0.000547f, +0.001265f, +0.003083f, - +0.000158f, -0.000722f, +0.001090f, +0.000710f, +0.001542f, -0.001002f, -0.001364f, -0.001025f, +0.000574f, -0.000326f, - +0.001028f, +0.000045f, +0.001337f, +0.000036f, -0.001210f, -0.000380f, +0.000072f, +0.000055f, -0.000310f, +0.000320f, - -0.000126f, +0.000488f, -0.000281f, -0.000000f, +0.000316f, -0.000270f, -0.000267f, +0.000255f, -0.000258f, -0.000070f, - +0.000052f, -0.000431f, +0.000187f, -0.000141f, -0.000002f, +0.000282f - }, - { - +0.001673f, -0.053315f, -0.009248f, -0.004227f, -0.000513f, -0.000476f, +0.000022f, +0.002545f, -0.004478f, +0.001942f, - -0.002633f, +0.005064f, +0.001957f, -0.002038f, +0.008528f, -0.016629f, +0.002698f, -0.013425f, -0.022340f, +0.003882f, - -0.008175f, -0.018482f, +0.000691f, +0.001660f, +0.004116f, +0.005329f, +0.001649f, +0.004345f, -0.006520f, -0.006880f, - +0.001207f, +0.003718f, +0.001548f, +0.005350f, -0.003988f, +0.001096f, -0.003896f, +0.001197f, -0.002854f, +0.000519f, - +0.002804f, +0.000854f, -0.000413f, +0.000551f, +0.000789f, +0.003875f, +0.002000f, -0.002639f, -0.001271f, -0.002700f, - +0.000167f, -0.000683f, +0.000295f, -0.001153f, -0.000895f, +0.002940f, -0.001444f, +0.000839f, +0.000526f, -0.001793f, - -0.000921f, -0.001768f, -0.001498f, +0.000396f, -0.000648f, +0.000437f, -0.000530f, -0.000388f, +0.000637f, -0.000618f, - +0.000313f, -0.000613f, +0.000042f, +0.000597f, -0.000160f, -0.000051f, +0.000134f, +0.000431f, +0.000330f, -0.000461f, - +0.000362f, -0.000003f, -0.000878f, -0.000253f, +0.000234f, +0.000398f, -0.000898f, -0.000338f, -0.000016f, +0.000108f, - +0.000239f, -0.000106f, +0.000022f, +0.000176f, +0.000117f, -0.000064f - }, - { - -0.077156f, -0.097905f, -0.012245f, +0.011094f, +0.006460f, -0.001510f, -0.001957f, +0.001178f, +0.001376f, +0.001670f, - +0.009535f, +0.014673f, +0.006746f, +0.002389f, -0.003933f, -0.009224f, -0.011449f, -0.001847f, -0.003086f, -0.004094f, - -0.003570f, +0.007438f, -0.001010f, -0.001512f, -0.000806f, -0.001234f, -0.004308f, -0.004471f, -0.012962f, -0.003147f, - +0.002964f, -0.004624f, -0.001083f, -0.004605f, -0.007151f, +0.001927f, -0.017517f, -0.002127f, +0.005468f, -0.002772f, - -0.003941f, +0.002929f, +0.000096f, +0.001643f, +0.008122f, +0.005735f, +0.002647f, +0.004318f, +0.004418f, -0.001842f, - +0.002596f, +0.001009f, +0.000646f, +0.000598f, +0.000590f, +0.002744f, +0.000174f, +0.002370f, -0.000205f, -0.000708f, - +0.000131f, -0.000452f, -0.000297f, +0.002096f, -0.000893f, +0.000529f, +0.001463f, +0.000399f, +0.001604f, +0.000092f, - +0.000832f, +0.001429f, -0.000833f, -0.001415f, -0.000204f, +0.000360f, -0.001552f, -0.000465f, -0.000685f, -0.000116f, - -0.000648f, +0.000461f, -0.000274f, +0.000258f, -0.000625f, +0.000169f, +0.000047f, -0.000851f, +0.000428f, +0.000376f, - -0.000137f, +0.000254f, +0.000078f, +0.000076f, -0.000084f, +0.000251f - }, - { - -0.000924f, -0.013500f, -0.002829f, +0.003330f, +0.000458f, +0.000364f, +0.000083f, +0.001780f, +0.002616f, -0.000749f, - -0.003220f, -0.008686f, -0.002213f, -0.002374f, +0.008227f, -0.008295f, +0.006935f, +0.006905f, +0.005226f, -0.033721f, - +0.004686f, +0.000620f, -0.009252f, -0.012085f, -0.008028f, +0.001602f, +0.003300f, +0.000250f, -0.002585f, -0.009628f, - -0.001499f, +0.005656f, -0.000477f, +0.000940f, +0.002275f, +0.001641f, +0.001953f, -0.002450f, -0.004997f, +0.000473f, - +0.004541f, -0.001379f, -0.002427f, +0.001524f, +0.001826f, +0.001392f, +0.000376f, -0.000684f, +0.001981f, +0.002036f, - -0.003274f, -0.001786f, -0.000472f, -0.001893f, -0.001578f, -0.000215f, +0.000516f, +0.002181f, -0.000161f, +0.001469f, - +0.001960f, +0.000808f, -0.000069f, -0.000634f, +0.001306f, -0.000635f, +0.000917f, -0.001593f, -0.001111f, +0.000048f, - -0.000517f, +0.001240f, -0.000092f, -0.000016f, -0.000035f, +0.001657f, +0.000402f, +0.000393f, -0.000619f, +0.000965f, - +0.000547f, -0.000331f, +0.000114f, +0.000087f, +0.000336f, +0.000379f, -0.000557f, +0.000093f, +0.000875f, +0.000154f, - -0.000184f, +0.000014f, +0.000131f, -0.000257f, -0.000007f, -0.000296f - }, - { - -0.080403f, +0.274587f, +0.011083f, +0.011555f, +0.001410f, -0.005205f, -0.000355f, +0.001227f, -0.001983f, -0.005389f, - -0.001037f, -0.014458f, -0.008995f, -0.003992f, +0.012470f, -0.000674f, +0.004049f, -0.000055f, +0.004742f, -0.001585f, - -0.000751f, -0.003872f, -0.003842f, -0.004501f, +0.006012f, +0.009518f, +0.002806f, +0.000251f, +0.000900f, -0.003455f, - +0.001829f, -0.004843f, +0.005565f, +0.001754f, +0.001833f, +0.000905f, -0.003613f, -0.003325f, -0.006172f, -0.001212f, - +0.004942f, +0.002815f, -0.002128f, -0.005780f, +0.001264f, +0.002370f, -0.000727f, +0.002116f, +0.000535f, +0.003330f, - -0.000437f, -0.002620f, +0.001248f, -0.003170f, -0.000913f, +0.000175f, -0.000846f, -0.000399f, -0.000114f, -0.001489f, - +0.000394f, -0.000096f, -0.000891f, -0.000145f, +0.000094f, -0.000774f, +0.001725f, -0.000918f, +0.000142f, -0.000269f, - -0.000445f, -0.000475f, +0.000352f, +0.000323f, -0.000167f, +0.000347f, +0.000529f, -0.000290f, +0.000138f, -0.001150f, - -0.000135f, +0.000315f, -0.000037f, +0.001209f, +0.000806f, +0.000059f, -0.000164f, +0.000075f, -0.000443f, -0.000374f, - +0.000157f, -0.000125f, -0.000236f, -0.000354f, -0.000384f, +0.000267f - }, - { - -0.000749f, +0.024469f, -0.010431f, -0.003463f, +0.000741f, -0.000047f, -0.000387f, +0.002156f, +0.003017f, -0.000983f, - +0.000004f, -0.002613f, +0.002869f, +0.004719f, +0.006093f, -0.025110f, +0.009879f, -0.005660f, -0.001467f, +0.006164f, - +0.000552f, -0.017885f, +0.005762f, +0.003384f, -0.007863f, -0.007774f, -0.009183f, +0.006502f, -0.006318f, +0.007397f, - +0.002358f, +0.007170f, +0.001438f, +0.001239f, -0.001760f, +0.003972f, +0.000920f, +0.000529f, +0.002808f, +0.003827f, - -0.002851f, -0.004350f, +0.000718f, +0.000258f, -0.001421f, +0.001324f, -0.001309f, -0.002146f, -0.001828f, +0.004281f, - -0.000346f, +0.000034f, +0.000747f, -0.002669f, +0.001506f, -0.002716f, -0.001018f, -0.002912f, -0.001650f, -0.000168f, - +0.000306f, +0.001532f, +0.001443f, +0.000653f, +0.000925f, -0.000154f, -0.001628f, -0.000667f, +0.000902f, -0.003612f, - -0.000050f, +0.001384f, -0.000284f, -0.000539f, +0.000477f, -0.000061f, +0.000615f, +0.000748f, +0.000526f, +0.002064f, - +0.000615f, -0.000598f, +0.001172f, -0.000239f, -0.000241f, +0.000249f, -0.000592f, +0.000152f, +0.000564f, +0.000111f, - +0.000214f, -0.000092f, +0.000372f, +0.000268f, +0.000287f, +0.000107f - }, - { - -0.042241f, -0.436374f, +0.027659f, +0.008785f, -0.000080f, -0.006487f, -0.005215f, -0.002738f, -0.002839f, +0.001590f, - -0.003028f, -0.011393f, -0.009796f, -0.006812f, +0.014291f, +0.003779f, -0.003741f, +0.005749f, +0.002916f, +0.000811f, - +0.008742f, +0.004397f, +0.000627f, +0.004238f, -0.000113f, -0.003208f, +0.000975f, -0.000098f, +0.001868f, -0.001946f, - +0.006146f, -0.008885f, +0.000319f, -0.004021f, +0.003605f, -0.007481f, +0.000870f, +0.002155f, -0.000885f, +0.002198f, - +0.011169f, -0.008538f, +0.003095f, +0.001031f, +0.001977f, -0.002961f, +0.001161f, -0.004068f, +0.001762f, -0.001971f, - -0.001003f, +0.001081f, -0.002661f, -0.001055f, +0.002691f, -0.000465f, +0.001111f, -0.003171f, -0.001792f, +0.000095f, - +0.000198f, +0.000943f, -0.000600f, +0.000812f, +0.000131f, +0.000025f, -0.000013f, -0.000362f, -0.000051f, -0.000345f, - -0.000580f, +0.000458f, -0.000700f, -0.000149f, -0.000039f, +0.000270f, +0.000040f, +0.000630f, -0.000046f, +0.000383f, - +0.000111f, +0.000202f, -0.000263f, -0.000058f, +0.000520f, +0.000638f, -0.000426f, +0.000818f, +0.000061f, +0.000260f, - +0.000011f, +0.000731f, -0.000071f, -0.000170f, -0.000013f, -0.000344f - }, - { - +0.000952f, -0.071240f, +0.003557f, +0.001730f, -0.007897f, +0.004935f, -0.002251f, -0.003998f, +0.001015f, -0.002779f, - +0.003797f, +0.000407f, +0.007207f, -0.007945f, -0.001474f, -0.011240f, -0.005780f, +0.003796f, +0.005036f, +0.005408f, - -0.009876f, +0.010854f, +0.004970f, -0.003002f, +0.001231f, +0.005347f, -0.007297f, -0.007374f, -0.005742f, -0.004836f, - +0.009995f, -0.006925f, -0.006883f, -0.004944f, -0.005616f, +0.002646f, +0.002411f, -0.000141f, +0.006528f, +0.000798f, - -0.000943f, +0.002138f, +0.000832f, +0.002361f, -0.001172f, +0.001662f, -0.002705f, -0.003641f, +0.000520f, -0.004050f, - +0.000583f, +0.000463f, -0.000173f, +0.001985f, +0.000531f, -0.001400f, -0.000157f, +0.001543f, -0.002217f, -0.003078f, - -0.000090f, +0.002044f, -0.000370f, -0.000523f, -0.000384f, +0.000391f, -0.001182f, +0.002214f, -0.000615f, -0.001020f, - -0.000235f, +0.000557f, -0.001411f, -0.000942f, -0.001615f, -0.000227f, -0.000755f, -0.000559f, -0.000169f, -0.001496f, - -0.000004f, +0.000472f, +0.000173f, +0.000145f, -0.000666f, +0.000251f, -0.000290f, +0.000150f, +0.000027f, -0.000235f, - -0.000170f, -0.000378f, +0.000315f, -0.000140f, +0.000176f, -0.000027f - }, - { - -0.034719f, -0.079898f, +0.022328f, -0.008715f, +0.015753f, +0.019444f, -0.019003f, -0.003972f, -0.005515f, +0.001698f, - -0.000893f, -0.007648f, -0.004428f, +0.004688f, -0.001585f, +0.000664f, -0.009239f, +0.005093f, -0.004499f, -0.013795f, - +0.004124f, +0.002639f, +0.002745f, -0.012634f, +0.011793f, -0.007117f, -0.000229f, -0.004668f, -0.001798f, -0.001527f, - +0.001062f, +0.001704f, +0.000807f, -0.001874f, +0.001584f, +0.003956f, +0.004126f, +0.000397f, -0.006092f, +0.002378f, - +0.000996f, +0.002978f, -0.001362f, -0.000078f, +0.000651f, +0.002686f, +0.001518f, -0.001006f, -0.002710f, -0.002183f, - +0.001170f, +0.001190f, +0.002030f, -0.001061f, -0.004253f, -0.001062f, -0.001780f, +0.000100f, +0.000213f, -0.000767f, - -0.000018f, +0.000745f, +0.000589f, -0.000670f, +0.000815f, -0.000537f, -0.000715f, +0.000340f, -0.000081f, +0.000924f, - +0.000343f, -0.000557f, -0.000493f, +0.000379f, -0.000342f, +0.000091f, +0.000808f, -0.000119f, -0.000996f, +0.000218f, - +0.000392f, +0.000103f, +0.000590f, -0.000162f, -0.000519f, +0.000094f, -0.000525f, -0.000172f, +0.000402f, -0.000730f, - -0.000095f, -0.000263f, +0.000004f, +0.000059f, +0.000031f, -0.000317f - }, - { - +0.002121f, -0.009481f, -0.006604f, -0.000478f, +0.004202f, +0.000678f, +0.001672f, -0.003570f, -0.002222f, -0.004922f, - -0.000119f, +0.000669f, -0.005998f, -0.041034f, -0.014784f, -0.003171f, -0.001614f, +0.003587f, +0.009061f, -0.000934f, - +0.001176f, -0.008801f, +0.014715f, -0.001486f, -0.015551f, +0.004263f, +0.002430f, +0.010619f, -0.002007f, +0.005285f, - +0.003461f, -0.007586f, +0.003227f, +0.002888f, -0.009063f, +0.001474f, -0.007875f, +0.000556f, -0.003233f, -0.002884f, - +0.000271f, +0.001834f, -0.001420f, -0.002181f, -0.002487f, +0.000406f, -0.000547f, -0.000991f, +0.000925f, -0.002646f, - -0.000879f, -0.001352f, +0.000764f, +0.001765f, -0.000124f, -0.003505f, +0.000539f, -0.001631f, -0.001198f, -0.000364f, - +0.000725f, -0.000535f, +0.000602f, -0.000827f, -0.000780f, +0.000806f, -0.000199f, -0.000780f, -0.000672f, +0.001187f, - -0.000301f, -0.000260f, +0.000668f, +0.000771f, +0.001150f, +0.000590f, -0.000251f, -0.000412f, +0.000434f, +0.000121f, - +0.000174f, +0.000373f, +0.000218f, -0.000353f, -0.000535f, +0.000062f, -0.000032f, -0.000577f, -0.000075f, +0.000262f, - -0.000196f, -0.000458f, -0.000006f, +0.000052f, +0.000005f, +0.000306f - }, - { - +0.045452f, -0.066326f, -0.021020f, +0.022840f, +0.015296f, +0.001738f, +0.010106f, -0.013649f, -0.004224f, +0.001450f, - +0.016675f, +0.007932f, +0.015803f, -0.014015f, +0.017796f, +0.002589f, -0.001163f, +0.001643f, +0.005280f, -0.006471f, - +0.003809f, -0.008118f, -0.004995f, -0.007521f, +0.000980f, -0.001712f, +0.004246f, +0.001797f, -0.003350f, +0.001625f, - -0.001608f, +0.005988f, -0.000563f, +0.004135f, -0.000000f, -0.002404f, -0.002304f, -0.005149f, -0.004154f, +0.002698f, - +0.002525f, -0.001363f, +0.001618f, -0.004665f, -0.008940f, -0.004717f, -0.000204f, +0.002330f, -0.001458f, -0.003755f, - -0.000575f, -0.000726f, -0.000318f, -0.000135f, +0.000261f, +0.001515f, -0.000396f, +0.004267f, +0.000983f, +0.001220f, - +0.001131f, -0.001670f, -0.000168f, +0.001900f, -0.000855f, -0.000118f, -0.001887f, -0.001324f, -0.000768f, -0.000484f, - +0.001232f, -0.000342f, +0.001865f, +0.001736f, -0.000486f, +0.000898f, +0.000198f, +0.000561f, -0.000393f, +0.000250f, - +0.000200f, -0.000039f, -0.000524f, +0.000253f, +0.000496f, +0.000420f, -0.000627f, +0.000133f, -0.000327f, +0.000194f, - +0.000179f, +0.000122f, +0.000378f, +0.000076f, -0.000071f, +0.000038f - }, - { - -0.002081f, -0.019097f, -0.003982f, -0.001758f, -0.000079f, +0.003703f, +0.003657f, +0.002975f, +0.000059f, +0.000799f, - +0.003821f, +0.006239f, +0.008531f, +0.023309f, +0.138036f, -0.010591f, +0.006264f, -0.012048f, +0.006724f, +0.003547f, - -0.006076f, +0.006961f, -0.006115f, -0.009284f, +0.003972f, +0.007419f, +0.006086f, -0.005478f, -0.012487f, +0.006666f, - -0.003325f, +0.007395f, -0.001004f, -0.001394f, -0.004963f, +0.003448f, +0.000730f, -0.007891f, +0.001015f, +0.007206f, - -0.003462f, +0.000013f, +0.003860f, -0.001220f, +0.000681f, -0.001670f, -0.001064f, -0.000359f, +0.002590f, -0.000576f, - -0.000561f, -0.001086f, +0.001645f, +0.000578f, +0.000882f, -0.001752f, -0.001335f, +0.000394f, -0.000979f, -0.000695f, - +0.000733f, +0.000261f, -0.000193f, +0.000333f, +0.000101f, -0.001289f, -0.001206f, -0.000364f, +0.000185f, -0.000093f, - -0.001122f, +0.000001f, +0.000199f, +0.000003f, -0.000030f, +0.000097f, +0.000359f, +0.000295f, +0.000349f, -0.000024f, - +0.000248f, -0.000369f, +0.000127f, -0.000202f, -0.000112f, +0.000204f, -0.000278f, +0.000107f, +0.000091f, -0.000146f, - +0.000264f, +0.000132f, +0.000156f, -0.000128f, +0.000088f, -0.000296f - }, - { - +0.040554f, +0.006683f, +0.014598f, -0.001815f, +0.001398f, +0.005257f, +0.003183f, +0.016280f, -0.003777f, +0.010866f, - +0.003054f, +0.012655f, -0.003115f, -0.012924f, +0.078788f, +0.002497f, +0.013726f, -0.010536f, +0.001009f, +0.000452f, - +0.005328f, +0.002757f, +0.002181f, +0.002312f, -0.001388f, +0.002452f, +0.005520f, -0.013773f, +0.002629f, -0.003048f, - -0.006091f, +0.003033f, -0.001112f, +0.008445f, +0.001844f, +0.002691f, -0.008608f, -0.002380f, -0.001466f, -0.000436f, - +0.007432f, -0.000496f, -0.000093f, -0.005474f, +0.003027f, -0.001031f, -0.001563f, +0.000669f, +0.001233f, -0.000481f, - +0.001546f, +0.001978f, +0.001827f, +0.001279f, +0.003182f, -0.001106f, -0.003121f, +0.000280f, +0.000309f, -0.001809f, - -0.001366f, -0.001625f, -0.001054f, +0.000040f, +0.000848f, -0.001449f, -0.000310f, -0.000544f, +0.001806f, -0.000773f, - -0.000224f, -0.000347f, -0.000780f, +0.000159f, -0.000107f, +0.000383f, +0.001038f, -0.000163f, +0.000775f, -0.000723f, - +0.000056f, -0.000571f, +0.000797f, -0.000603f, -0.000936f, -0.000074f, +0.000351f, -0.000190f, -0.000185f, +0.000011f, - +0.000250f, +0.000082f, +0.000300f, +0.000231f, -0.000017f, -0.000225f - } - }, - { - { - +0.000472f, -0.041204f, +0.050237f, +0.007229f, -0.004853f, -0.000560f, +0.001478f, +0.001730f, -0.005379f, -0.001302f, - -0.001599f, +0.001792f, +0.006967f, +0.013582f, -0.018673f, +0.005840f, -0.014770f, -0.007372f, -0.009092f, +0.001702f, - -0.014378f, -0.007025f, -0.001472f, +0.007962f, +0.016797f, -0.006002f, -0.004495f, -0.007995f, -0.008516f, -0.017862f, - +0.009330f, -0.005625f, -0.003441f, +0.003125f, -0.001824f, -0.006478f, -0.002477f, +0.000646f, +0.006467f, -0.002875f, - +0.001950f, -0.000565f, -0.005298f, +0.001874f, -0.000518f, -0.001556f, +0.002220f, -0.001208f, +0.000935f, +0.000115f, - -0.001713f, -0.000298f, +0.001185f, -0.001832f, -0.000557f, -0.000990f, +0.001130f, -0.000470f, -0.000367f, -0.003322f, - +0.000655f, +0.000072f, +0.001231f, +0.000061f, -0.002325f, +0.001010f, -0.000798f, -0.000181f, +0.001517f, +0.001122f, - +0.000272f, +0.000153f, +0.000244f, -0.000188f, +0.000540f, +0.000528f, +0.000167f, +0.000587f, -0.000348f, -0.000321f, - +0.000572f, -0.000011f, +0.000525f, -0.000349f, +0.000567f, +0.000321f, +0.000515f, -0.000423f, -0.000376f, +0.000171f, - -0.000234f, -0.000343f, -0.000025f, -0.000140f, -0.000426f, +0.000109f - }, - { - -0.021043f, -0.240596f, +0.127411f, +0.006529f, -0.002458f, -0.000252f, +0.006146f, +0.004495f, +0.000925f, -0.005142f, - -0.000027f, -0.012487f, -0.001392f, -0.007984f, -0.000944f, +0.001334f, -0.005497f, -0.007861f, -0.005928f, -0.000524f, - -0.002138f, +0.011385f, -0.002972f, +0.004874f, -0.005259f, -0.005954f, +0.009808f, -0.002432f, -0.002088f, -0.001393f, - -0.001105f, -0.000722f, -0.003825f, +0.004663f, -0.006896f, +0.003276f, +0.000679f, +0.007509f, +0.002906f, +0.002975f, - +0.001338f, +0.003145f, -0.002914f, +0.005230f, +0.006264f, -0.001133f, -0.002193f, -0.000509f, +0.002199f, +0.001365f, - -0.001854f, -0.002678f, +0.002836f, -0.000322f, -0.001277f, +0.001079f, +0.002241f, -0.000868f, -0.003539f, +0.000535f, - -0.001225f, +0.000001f, +0.000695f, +0.001522f, -0.000293f, -0.002724f, -0.000256f, +0.000555f, -0.000143f, -0.001827f, - +0.000403f, -0.000681f, -0.000220f, +0.000004f, -0.000203f, +0.000451f, +0.000923f, -0.000653f, -0.000506f, +0.000076f, - +0.001005f, -0.000262f, -0.000040f, +0.000326f, +0.000569f, +0.000112f, -0.000185f, -0.000161f, -0.000463f, +0.000240f, - -0.000752f, +0.000273f, +0.000102f, +0.000215f, -0.000339f, +0.000021f - }, - { - +0.011175f, +0.106505f, -0.104212f, +0.000501f, +0.001959f, -0.010311f, -0.002755f, +0.002826f, +0.000836f, +0.003492f, - -0.002189f, -0.009658f, -0.016152f, +0.001873f, +0.004693f, +0.008890f, -0.002966f, -0.005513f, -0.010268f, -0.012300f, - -0.008293f, -0.017258f, -0.004064f, +0.011289f, -0.003006f, -0.000599f, -0.000110f, -0.006265f, -0.010785f, +0.005228f, - +0.007395f, +0.009195f, -0.005405f, +0.004428f, +0.003101f, +0.003052f, -0.000153f, +0.001693f, +0.009969f, -0.002989f, - +0.002167f, -0.000629f, -0.002480f, +0.007496f, -0.003238f, -0.002065f, +0.000254f, -0.001557f, -0.000199f, +0.002711f, - -0.000515f, -0.002268f, -0.002635f, -0.001997f, +0.000654f, +0.000707f, -0.003019f, -0.002042f, -0.000013f, -0.000112f, - +0.000027f, +0.000424f, +0.001041f, -0.001406f, +0.000535f, +0.000481f, -0.000469f, -0.000081f, +0.001385f, -0.000178f, - +0.001382f, -0.000004f, +0.001347f, +0.000297f, -0.001056f, -0.000854f, -0.000249f, -0.000327f, -0.000380f, +0.000356f, - -0.000056f, +0.000159f, -0.000681f, +0.000196f, +0.000680f, -0.000108f, -0.000144f, +0.000187f, +0.000139f, +0.000618f, - -0.000001f, -0.000356f, +0.000307f, -0.000041f, -0.000100f, +0.000215f - }, - { - -0.001879f, -0.020867f, +0.015677f, -0.004990f, +0.000117f, -0.000475f, -0.001451f, +0.001499f, -0.003190f, +0.002187f, - -0.004031f, +0.002430f, +0.001890f, -0.002597f, +0.026008f, +0.007173f, +0.002276f, -0.019258f, -0.029889f, -0.004009f, - -0.002156f, -0.018946f, -0.012098f, -0.010375f, -0.006517f, +0.006976f, +0.001040f, +0.006287f, -0.002247f, -0.002741f, - +0.000461f, -0.005738f, -0.002941f, +0.001638f, -0.006151f, +0.003933f, -0.001105f, +0.004286f, -0.005434f, -0.000463f, - +0.001543f, +0.002115f, -0.000893f, -0.000281f, +0.000534f, +0.000564f, -0.000836f, +0.000818f, +0.002768f, -0.000642f, - +0.003702f, -0.000014f, -0.002471f, -0.001233f, -0.001957f, +0.002309f, -0.000456f, -0.000491f, +0.000127f, +0.000126f, - +0.000581f, -0.000882f, -0.000410f, +0.000730f, +0.000076f, +0.000910f, -0.000002f, -0.000878f, +0.000046f, -0.000565f, - -0.000093f, -0.000895f, +0.000015f, -0.000010f, -0.000606f, -0.000794f, -0.000152f, +0.000329f, -0.000028f, -0.000810f, - -0.000559f, -0.000215f, +0.000435f, +0.000104f, +0.000206f, +0.000440f, -0.000606f, +0.000104f, +0.000083f, +0.000110f, - +0.000171f, +0.000012f, +0.000166f, +0.000355f, +0.000165f, -0.000053f - }, - { - +0.077480f, +0.072366f, -0.047084f, +0.017156f, +0.005841f, +0.001001f, -0.001494f, -0.003144f, -0.003707f, +0.005733f, - -0.002721f, -0.001895f, +0.005306f, +0.007312f, +0.019412f, +0.003350f, +0.009120f, +0.007586f, -0.016016f, -0.012842f, - -0.006487f, +0.003121f, -0.006972f, +0.000914f, +0.002193f, +0.002378f, -0.003374f, +0.002912f, -0.004927f, +0.001336f, - +0.005378f, -0.005443f, -0.006941f, -0.007537f, -0.000663f, +0.006323f, -0.003384f, +0.003315f, +0.003504f, -0.000640f, - +0.001151f, +0.003001f, -0.004735f, -0.001121f, +0.001546f, -0.000329f, -0.001712f, -0.001357f, +0.001822f, -0.001748f, - +0.002043f, +0.000409f, +0.002117f, +0.001077f, +0.000440f, +0.001170f, -0.000591f, -0.000252f, -0.002760f, -0.000296f, - +0.000635f, -0.001068f, -0.001355f, +0.001586f, -0.001401f, -0.000525f, +0.001052f, -0.001019f, +0.000267f, -0.000840f, - -0.000304f, +0.000774f, -0.001169f, -0.001119f, +0.000081f, +0.000992f, -0.000531f, +0.000909f, -0.000027f, +0.000192f, - -0.000351f, +0.001285f, +0.000237f, +0.000637f, -0.000655f, -0.000248f, +0.000159f, -0.000369f, +0.000143f, +0.000101f, - -0.000271f, -0.000010f, -0.000020f, +0.000008f, -0.000264f, +0.000435f - }, - { - -0.000202f, -0.009494f, -0.001819f, +0.002031f, +0.001605f, +0.000647f, +0.000930f, +0.002690f, +0.000048f, -0.001697f, - -0.001490f, -0.002313f, +0.001744f, -0.007617f, +0.007342f, -0.007434f, -0.000865f, -0.004525f, -0.004584f, -0.055361f, - -0.001727f, +0.010800f, -0.012965f, -0.005668f, +0.002365f, -0.011749f, -0.001736f, +0.006452f, -0.002503f, -0.010828f, - -0.001926f, +0.002045f, -0.002981f, -0.002154f, +0.004412f, +0.002345f, +0.003036f, +0.001133f, -0.006003f, -0.000889f, - +0.004752f, +0.000441f, -0.001279f, +0.000847f, -0.001478f, -0.000239f, -0.000909f, -0.003098f, +0.000839f, +0.001974f, - -0.000550f, +0.001718f, +0.002497f, -0.002488f, -0.001236f, +0.000598f, -0.000685f, +0.000453f, -0.000940f, +0.001883f, - +0.000744f, -0.000881f, -0.000127f, -0.000572f, +0.000473f, +0.000498f, +0.001289f, -0.001023f, +0.000535f, +0.000778f, - -0.000606f, +0.001089f, -0.000694f, +0.000086f, +0.000285f, +0.000374f, -0.000901f, +0.000583f, +0.000085f, +0.000667f, - -0.000554f, +0.000130f, +0.000211f, -0.000306f, -0.000116f, +0.000052f, -0.000556f, +0.000211f, +0.000626f, -0.000081f, - -0.000052f, -0.000009f, +0.000304f, +0.000190f, -0.000034f, -0.000590f - }, - { - +0.051213f, +0.491177f, +0.028651f, +0.021484f, +0.012504f, -0.003749f, +0.000541f, -0.000357f, +0.000843f, +0.000301f, - +0.008413f, -0.006350f, -0.004184f, +0.001520f, +0.006096f, -0.010248f, +0.001551f, -0.004024f, +0.001281f, -0.002842f, - +0.000895f, -0.000321f, -0.003332f, -0.006344f, -0.004054f, +0.001172f, -0.001247f, +0.002886f, +0.005478f, -0.004972f, - +0.002484f, -0.004326f, +0.001513f, -0.003977f, -0.003405f, -0.004211f, -0.003764f, +0.002916f, -0.003091f, +0.000279f, - +0.002991f, +0.000636f, -0.001124f, -0.001836f, +0.001825f, -0.001184f, +0.000855f, +0.002800f, +0.001320f, +0.003205f, - -0.000414f, -0.000214f, +0.000813f, -0.003149f, -0.001524f, +0.000725f, -0.000600f, -0.000343f, +0.000257f, -0.001788f, - +0.001402f, +0.001598f, -0.000705f, -0.000632f, +0.000106f, -0.001527f, +0.000433f, -0.000075f, +0.000779f, -0.000404f, - +0.000440f, +0.000015f, -0.000118f, +0.000397f, -0.000009f, +0.000215f, +0.000486f, +0.000154f, +0.000497f, -0.000070f, - +0.000812f, -0.000393f, -0.000811f, +0.000607f, +0.000189f, -0.000132f, -0.000268f, +0.000679f, +0.000424f, -0.000168f, - +0.000023f, +0.000430f, +0.000329f, +0.000225f, -0.000069f, +0.000426f - }, - { - -0.001941f, +0.020340f, -0.003242f, -0.000792f, +0.000949f, -0.000527f, -0.002130f, -0.001916f, -0.001677f, -0.002288f, - -0.002177f, -0.003788f, +0.005558f, +0.007913f, +0.043964f, +0.007501f, +0.023041f, +0.005668f, +0.007706f, +0.002435f, - +0.013734f, +0.004126f, +0.015311f, -0.004853f, -0.024007f, -0.001148f, -0.010414f, -0.000789f, -0.009161f, -0.002515f, - -0.005970f, +0.000343f, -0.004070f, -0.000190f, -0.000958f, -0.002763f, -0.002927f, +0.001538f, +0.001071f, +0.003194f, - -0.000067f, -0.003550f, +0.002756f, +0.003108f, -0.001172f, +0.000595f, -0.001325f, +0.000771f, -0.001736f, +0.002717f, - +0.000773f, +0.001251f, +0.000383f, -0.002266f, +0.001885f, -0.004222f, -0.001132f, -0.000625f, -0.000647f, -0.001673f, - -0.000212f, +0.002629f, +0.001989f, -0.000697f, +0.000800f, +0.001070f, -0.001340f, -0.000738f, +0.002232f, -0.001783f, - +0.000156f, +0.000100f, -0.000707f, -0.000320f, +0.000435f, +0.000061f, +0.000408f, -0.000347f, -0.000872f, +0.000664f, - -0.000234f, -0.000574f, +0.001199f, -0.000688f, -0.000244f, +0.000726f, -0.000439f, -0.000226f, -0.000018f, -0.000129f, - +0.000360f, -0.000266f, +0.000079f, -0.000081f, -0.000187f, -0.000302f - }, - { - +0.066323f, -0.343189f, -0.019325f, +0.009584f, +0.005697f, +0.000575f, +0.001609f, +0.002477f, -0.001987f, +0.001578f, - +0.004233f, -0.006969f, -0.001116f, -0.007521f, -0.001270f, -0.005127f, -0.006976f, +0.005054f, +0.011333f, -0.001124f, - -0.001432f, +0.000539f, +0.005732f, +0.005260f, -0.004438f, -0.002480f, +0.001109f, -0.001918f, -0.001040f, -0.007966f, - +0.009279f, -0.004405f, -0.002781f, -0.002247f, +0.002140f, -0.006419f, +0.004223f, +0.000120f, -0.001127f, +0.005464f, - +0.006820f, -0.010374f, +0.007101f, -0.000615f, +0.000379f, -0.001257f, +0.001144f, -0.001558f, +0.004689f, -0.002502f, - -0.002225f, -0.000721f, -0.003892f, +0.000339f, +0.004865f, -0.000084f, +0.001168f, -0.001647f, +0.001048f, +0.001155f, - +0.000306f, +0.000887f, +0.000980f, +0.001572f, +0.000315f, +0.000942f, +0.000279f, -0.000010f, +0.001046f, +0.000110f, - -0.000955f, +0.000694f, -0.000041f, +0.000221f, +0.000618f, +0.000749f, -0.000036f, +0.001305f, -0.000017f, -0.000180f, - -0.000026f, +0.000315f, -0.000644f, -0.000554f, -0.000257f, +0.000219f, -0.000394f, +0.000511f, +0.000067f, +0.000043f, - -0.000130f, +0.000569f, -0.000232f, -0.000356f, +0.000098f, -0.000011f - }, - { - -0.001723f, -0.046074f, +0.020307f, +0.006563f, -0.009929f, -0.001574f, -0.001351f, +0.002060f, +0.002784f, -0.005218f, - -0.006741f, -0.005014f, +0.000126f, -0.014888f, -0.005208f, -0.020545f, +0.002443f, +0.007223f, +0.007415f, +0.023182f, - -0.006428f, +0.006816f, -0.000651f, -0.007936f, +0.002089f, +0.003943f, -0.007537f, -0.005562f, +0.001941f, -0.006105f, - +0.011352f, -0.000089f, -0.000121f, -0.001925f, -0.005421f, +0.000163f, -0.002336f, -0.003005f, +0.000503f, -0.002677f, - -0.001968f, +0.002025f, +0.002119f, +0.002374f, -0.000584f, +0.002741f, -0.002030f, -0.002415f, +0.000800f, -0.005422f, - +0.001413f, +0.000473f, -0.002900f, +0.000260f, +0.000604f, -0.003679f, -0.003605f, -0.000553f, -0.001882f, -0.001619f, - +0.000722f, +0.002236f, +0.000058f, -0.000317f, +0.000298f, +0.000768f, -0.000841f, +0.001555f, -0.000737f, +0.000154f, - -0.000441f, +0.000731f, -0.000165f, +0.000494f, +0.000447f, +0.001129f, -0.000437f, -0.000422f, +0.000868f, -0.000254f, - -0.000278f, +0.000125f, +0.000463f, +0.000797f, -0.000100f, +0.000550f, +0.000150f, +0.000161f, +0.000280f, -0.000314f, - +0.000169f, -0.000248f, +0.000171f, -0.000059f, +0.000246f, -0.000125f - }, - { - +0.031005f, -0.097161f, -0.048984f, -0.009709f, -0.006890f, +0.012187f, -0.010318f, -0.011187f, -0.011012f, +0.004445f, - +0.005660f, -0.008245f, -0.009156f, +0.003334f, -0.008870f, -0.002597f, -0.018762f, +0.003164f, +0.011419f, -0.005749f, - +0.010004f, +0.003259f, +0.003962f, -0.011928f, +0.008376f, -0.005603f, +0.001939f, +0.000955f, -0.003162f, -0.005288f, - +0.000175f, +0.004600f, +0.007712f, +0.003369f, +0.002295f, +0.003535f, +0.002156f, +0.000245f, -0.004492f, +0.004103f, - +0.003223f, +0.003670f, -0.002950f, -0.001503f, -0.000471f, -0.000012f, -0.000438f, +0.001097f, +0.000557f, -0.004073f, - -0.000700f, +0.000603f, +0.000973f, +0.000104f, -0.000904f, +0.000968f, -0.000792f, +0.000168f, +0.000612f, +0.000184f, - +0.000763f, +0.000592f, -0.000081f, -0.001325f, +0.000361f, +0.000153f, -0.000568f, +0.001325f, +0.000008f, -0.000474f, - -0.000212f, +0.000274f, -0.000016f, +0.000393f, -0.000603f, -0.000638f, +0.000377f, -0.000311f, -0.000992f, +0.000020f, - -0.000010f, -0.000385f, +0.000295f, -0.000615f, -0.000335f, +0.000405f, +0.000148f, +0.000077f, +0.000543f, -0.000618f, - -0.000154f, -0.000262f, +0.000312f, +0.000311f, +0.000073f, -0.000214f - }, - { - -0.002145f, +0.006040f, -0.000087f, -0.009818f, -0.005125f, -0.001877f, +0.001621f, -0.001386f, -0.001524f, -0.002748f, - -0.000681f, -0.003391f, +0.021056f, +0.002722f, -0.005872f, -0.006373f, -0.009154f, +0.001159f, +0.011884f, -0.000788f, - -0.000567f, -0.012328f, +0.003880f, -0.012657f, -0.020312f, +0.008772f, +0.001241f, +0.000179f, -0.006462f, -0.000133f, - +0.003292f, -0.007025f, +0.002981f, +0.001347f, -0.005316f, +0.005371f, -0.001058f, +0.004532f, -0.001477f, -0.004287f, - +0.000346f, +0.004121f, +0.001591f, -0.000559f, -0.004146f, -0.000412f, +0.000310f, +0.000602f, +0.004442f, -0.001670f, - -0.001028f, -0.000018f, +0.000269f, -0.001061f, +0.000268f, +0.000196f, +0.003492f, +0.000288f, -0.001085f, -0.000559f, - +0.000774f, -0.000575f, +0.000389f, -0.001687f, -0.001622f, +0.000874f, +0.000465f, -0.000409f, -0.000434f, +0.000124f, - -0.000668f, -0.000406f, -0.000399f, -0.000276f, +0.001165f, +0.000478f, +0.000059f, -0.000345f, +0.000288f, +0.000199f, - -0.000158f, +0.000338f, -0.000215f, -0.000681f, -0.000338f, +0.000016f, +0.000347f, +0.000082f, +0.000216f, +0.000155f, - -0.000095f, -0.000036f, +0.000216f, +0.000048f, -0.000225f, +0.000131f - }, - { - -0.017931f, -0.133639f, -0.031316f, -0.000164f, +0.007766f, -0.002068f, +0.009774f, -0.018719f, +0.003009f, -0.003668f, - +0.003047f, +0.001188f, -0.014666f, -0.034599f, +0.015463f, -0.012433f, -0.013931f, -0.002949f, +0.011768f, -0.003132f, - +0.008034f, -0.004953f, +0.005348f, -0.000434f, +0.002408f, -0.003780f, -0.002785f, -0.002781f, -0.005575f, +0.000720f, - -0.003366f, +0.006124f, -0.003953f, +0.003366f, +0.002187f, -0.004671f, +0.002136f, +0.000020f, -0.004253f, +0.000243f, - -0.000151f, -0.001562f, +0.003726f, +0.005330f, -0.003328f, +0.000649f, +0.003124f, +0.001362f, -0.002662f, -0.001906f, - +0.001923f, -0.001356f, +0.001849f, +0.002960f, -0.000617f, +0.000173f, -0.001765f, +0.003660f, +0.000643f, -0.003193f, - -0.001276f, -0.000446f, +0.000433f, +0.002136f, -0.000020f, +0.001336f, -0.000247f, -0.000877f, -0.001559f, -0.001095f, - +0.000353f, -0.001554f, +0.000011f, +0.000519f, -0.000449f, +0.000113f, +0.000090f, +0.000717f, -0.000893f, -0.000642f, - +0.000259f, +0.000520f, -0.000521f, -0.000157f, +0.000384f, +0.001137f, +0.000016f, +0.000536f, +0.000188f, -0.000118f, - +0.000020f, +0.000059f, +0.000291f, +0.000399f, +0.000013f, +0.000157f - }, - { - +0.001561f, -0.011143f, -0.001273f, +0.003758f, -0.000429f, +0.002291f, +0.005099f, -0.002763f, -0.004450f, -0.000880f, - +0.001490f, +0.005217f, -0.003233f, -0.082635f, +0.030048f, -0.016539f, -0.009484f, -0.013562f, +0.007524f, +0.014482f, - +0.001459f, +0.004427f, -0.007117f, +0.003917f, +0.007319f, -0.001195f, +0.008630f, -0.007752f, -0.013728f, +0.009729f, - -0.003307f, +0.001448f, -0.007282f, -0.003872f, +0.000030f, +0.009137f, +0.004621f, -0.001333f, +0.000029f, +0.004260f, - -0.001620f, -0.000335f, -0.000450f, -0.002612f, +0.002907f, -0.000472f, -0.000387f, -0.001086f, +0.002283f, -0.000363f, - -0.000797f, -0.002040f, -0.000437f, +0.000029f, +0.000630f, +0.000361f, -0.000325f, +0.000769f, +0.000253f, -0.000361f, - +0.001644f, +0.000230f, -0.000328f, +0.000298f, +0.000147f, -0.001193f, -0.001577f, +0.000155f, +0.000024f, -0.001123f, - -0.000814f, -0.000256f, -0.000131f, +0.000213f, -0.000084f, +0.000108f, +0.000152f, -0.000347f, +0.000608f, +0.000507f, - +0.000568f, +0.000532f, +0.000387f, -0.000312f, -0.000329f, +0.000051f, -0.000022f, +0.000222f, +0.000661f, -0.000116f, - +0.000231f, +0.000109f, +0.000316f, -0.000068f, +0.000153f, +0.000056f - }, - { - -0.032649f, -0.095281f, -0.001887f, -0.008593f, +0.004775f, -0.008427f, -0.010824f, +0.011134f, -0.000985f, +0.010387f, - +0.000622f, +0.001383f, -0.013808f, -0.003778f, +0.082778f, -0.019173f, -0.010482f, -0.015793f, +0.002157f, -0.000718f, - -0.000234f, -0.003300f, -0.002808f, +0.001459f, +0.002332f, +0.004319f, +0.004830f, -0.017418f, -0.001173f, -0.001113f, - -0.006585f, +0.004807f, -0.001698f, +0.002457f, +0.001197f, +0.006702f, -0.000807f, +0.002094f, +0.001724f, -0.001826f, - +0.004756f, +0.003418f, +0.003061f, -0.004429f, +0.001738f, +0.001442f, +0.000618f, -0.001414f, -0.001284f, -0.000497f, - +0.000627f, -0.001222f, -0.001258f, -0.001582f, +0.000632f, -0.001510f, -0.001549f, -0.000061f, -0.000389f, -0.000476f, - +0.001134f, -0.000877f, -0.002120f, -0.001256f, +0.000632f, -0.001233f, +0.000005f, -0.000645f, +0.002318f, -0.000149f, - +0.000791f, +0.000827f, -0.000791f, -0.000219f, -0.000018f, +0.000344f, +0.000636f, -0.000553f, +0.000821f, -0.000420f, - +0.000107f, -0.000741f, +0.000849f, -0.000074f, -0.000595f, -0.000291f, +0.000222f, -0.000149f, +0.000280f, +0.000147f, - +0.000254f, -0.000111f, -0.000092f, -0.000101f, -0.000063f, +0.000208f - } - }, - { - { - +0.000593f, +0.084231f, -0.053294f, +0.001581f, +0.007484f, -0.004204f, -0.000262f, +0.000044f, -0.000071f, -0.003392f, - -0.003616f, +0.000020f, +0.013649f, +0.008505f, -0.022297f, -0.002198f, -0.000616f, -0.005944f, -0.019357f, -0.010886f, - +0.003611f, -0.015454f, -0.000719f, +0.013053f, +0.007265f, +0.006417f, -0.007186f, -0.012964f, -0.003484f, -0.015635f, - +0.008480f, -0.008444f, -0.006836f, -0.005433f, +0.000620f, -0.002019f, -0.001303f, +0.004109f, +0.002972f, +0.001043f, - -0.000780f, -0.001254f, -0.000567f, -0.000494f, -0.003751f, +0.000704f, +0.002248f, +0.000388f, -0.003691f, +0.001515f, - -0.000378f, -0.000906f, -0.000028f, -0.000076f, -0.002943f, +0.000659f, -0.000535f, +0.001795f, -0.001099f, -0.001990f, - +0.001572f, -0.001350f, +0.001067f, +0.000185f, -0.001913f, -0.000047f, +0.000451f, -0.000116f, +0.000764f, +0.001200f, - +0.000289f, -0.000191f, +0.000225f, +0.000781f, -0.000055f, +0.000208f, +0.000823f, -0.000769f, -0.000174f, -0.000015f, - +0.000036f, +0.000502f, +0.000085f, -0.000446f, +0.000466f, +0.000105f, +0.000353f, -0.000329f, +0.000279f, +0.000221f, - -0.000625f, -0.000394f, -0.000328f, -0.000025f, -0.000084f, +0.000078f - }, - { - +0.026883f, -0.034828f, -0.089426f, +0.014128f, +0.000231f, +0.005435f, +0.002931f, -0.000456f, +0.008574f, -0.001517f, - +0.000505f, -0.012381f, -0.001195f, -0.001077f, -0.012698f, -0.002994f, +0.017595f, +0.004403f, -0.028982f, +0.006921f, - -0.005716f, +0.002127f, +0.006807f, +0.000800f, +0.000366f, -0.007945f, +0.004665f, +0.001729f, -0.002407f, -0.001692f, - +0.000718f, -0.000767f, -0.000316f, -0.004788f, +0.003656f, -0.000952f, +0.001673f, +0.004858f, +0.004527f, +0.000552f, - +0.001298f, +0.005444f, -0.000535f, +0.003727f, +0.003995f, -0.000746f, +0.000410f, -0.001280f, +0.002158f, -0.000468f, - -0.002857f, -0.000152f, +0.000122f, +0.000219f, +0.001213f, -0.001205f, +0.000922f, -0.001473f, -0.001044f, +0.000003f, - -0.000599f, -0.000032f, -0.000100f, +0.000685f, -0.000668f, -0.000752f, +0.000094f, -0.000754f, -0.000038f, -0.001039f, - -0.000004f, -0.001209f, -0.000092f, +0.000054f, +0.000309f, +0.000400f, +0.000603f, -0.000327f, -0.000369f, -0.000430f, - +0.000965f, -0.000247f, +0.000505f, +0.000066f, +0.000241f, +0.000331f, +0.000013f, -0.000102f, -0.000008f, -0.000256f, - -0.000305f, -0.000319f, -0.000196f, +0.000316f, -0.000053f, +0.000117f - }, - { - -0.010615f, -0.091554f, +0.062404f, +0.006429f, -0.007969f, -0.011554f, -0.005330f, -0.000876f, +0.003278f, +0.005060f, - -0.007766f, -0.001842f, -0.016706f, +0.004418f, +0.017004f, -0.004281f, +0.000738f, +0.002716f, -0.014746f, -0.017332f, - -0.010885f, -0.012466f, -0.000244f, +0.002550f, +0.001636f, -0.003270f, -0.000339f, -0.011136f, +0.001474f, +0.007772f, - +0.003884f, +0.001613f, -0.000094f, +0.000681f, +0.006651f, +0.007753f, -0.006134f, +0.001589f, +0.008681f, -0.001526f, - +0.004055f, -0.003201f, +0.002651f, +0.004384f, -0.001264f, -0.004968f, +0.000298f, -0.002580f, +0.002149f, +0.002847f, - -0.001568f, -0.002767f, -0.002846f, -0.002313f, +0.002008f, +0.000890f, -0.004827f, -0.001003f, -0.001242f, -0.000936f, - +0.001212f, +0.000161f, +0.000382f, -0.001378f, -0.000822f, +0.002014f, -0.001454f, +0.000614f, +0.000969f, +0.000097f, - +0.001657f, -0.000031f, +0.000052f, +0.000998f, -0.000684f, -0.001263f, +0.000135f, -0.000567f, -0.000764f, +0.000509f, - +0.000479f, -0.000522f, -0.000154f, +0.000187f, +0.000686f, -0.000139f, +0.000012f, -0.000062f, +0.000463f, +0.000344f, - +0.000113f, -0.000179f, -0.000036f, -0.000128f, +0.000119f, +0.000059f - }, - { - +0.002509f, +0.010150f, -0.010989f, -0.002891f, -0.000552f, +0.000137f, -0.002089f, -0.000992f, +0.000008f, +0.000852f, - -0.001187f, -0.000416f, +0.002968f, -0.004749f, +0.021559f, +0.011873f, +0.004243f, -0.022639f, -0.024782f, +0.002144f, - -0.004213f, -0.014451f, -0.013214f, -0.008720f, -0.007790f, +0.004699f, +0.003954f, +0.003687f, -0.002473f, -0.003090f, - +0.000494f, -0.007797f, -0.000038f, -0.001592f, -0.000564f, +0.001662f, -0.001525f, +0.005352f, -0.003980f, -0.000215f, - -0.000597f, +0.001750f, -0.003028f, +0.001507f, +0.002837f, +0.000078f, -0.003531f, +0.001280f, +0.003666f, +0.000941f, - +0.001880f, +0.000171f, -0.002271f, -0.000657f, -0.001122f, +0.000243f, +0.000274f, -0.000624f, -0.001129f, +0.002017f, - +0.000107f, +0.000185f, +0.000093f, +0.000066f, +0.000338f, +0.000048f, +0.000928f, -0.000501f, -0.000350f, -0.000459f, - +0.000188f, -0.001453f, +0.000653f, +0.000011f, -0.000780f, -0.000117f, -0.000535f, -0.000007f, -0.000257f, -0.000267f, - -0.000598f, -0.000448f, +0.000754f, +0.000073f, +0.000391f, -0.000007f, -0.000122f, +0.000220f, -0.000357f, +0.000278f, - -0.000048f, +0.000103f, +0.000118f, +0.000085f, +0.000163f, -0.000077f - }, - { - -0.059984f, +0.204113f, -0.012400f, +0.011302f, +0.013158f, -0.001521f, +0.001310f, -0.003157f, -0.005260f, +0.009593f, - -0.006612f, -0.003449f, +0.002197f, +0.006711f, +0.029124f, -0.000296f, -0.000007f, +0.008095f, -0.004592f, -0.021672f, - +0.001062f, -0.004293f, -0.003176f, +0.000123f, +0.009967f, -0.007019f, +0.000663f, -0.007448f, +0.010820f, -0.001108f, - +0.001651f, -0.000884f, -0.007909f, -0.004991f, -0.001502f, +0.000869f, +0.017605f, -0.007822f, +0.003052f, -0.001516f, - +0.003674f, +0.001878f, -0.004422f, -0.000239f, -0.000618f, -0.001164f, -0.003856f, +0.000294f, -0.001348f, -0.000571f, - +0.001845f, +0.001166f, +0.001911f, +0.000552f, +0.001295f, +0.000260f, -0.000130f, -0.002883f, -0.000712f, +0.000604f, - -0.000943f, +0.000032f, -0.001564f, -0.000291f, +0.000669f, -0.001145f, +0.000766f, -0.000090f, -0.000055f, -0.001063f, - -0.001032f, +0.000604f, -0.000451f, -0.000574f, -0.000215f, +0.000387f, +0.000699f, +0.000831f, -0.000462f, +0.000330f, - -0.000210f, +0.000542f, +0.000599f, +0.000230f, -0.000220f, -0.000238f, -0.000222f, +0.000248f, -0.000186f, +0.000176f, - -0.000227f, +0.000298f, -0.000206f, +0.000326f, -0.000434f, +0.000333f - }, - { - +0.000234f, -0.008162f, -0.006993f, +0.003569f, +0.002078f, +0.000477f, +0.000474f, +0.000923f, -0.001771f, +0.001473f, - -0.003111f, -0.000675f, -0.003879f, -0.004859f, +0.016171f, -0.002242f, -0.001989f, -0.010848f, -0.004897f, -0.050706f, - -0.006104f, +0.010052f, -0.003985f, -0.015313f, +0.008083f, -0.013691f, -0.006647f, +0.005506f, -0.005966f, +0.002937f, - -0.005805f, -0.003828f, +0.000835f, -0.001910f, +0.006735f, -0.000217f, +0.000978f, +0.000652f, -0.002359f, +0.001291f, - +0.002801f, -0.003242f, +0.000926f, -0.001213f, -0.001294f, -0.000213f, +0.000476f, -0.001656f, -0.001357f, +0.001090f, - +0.001133f, +0.002427f, +0.000896f, -0.001398f, +0.000635f, -0.002283f, +0.000811f, +0.000281f, -0.000467f, +0.000474f, - +0.000681f, -0.001051f, -0.000879f, +0.001448f, -0.000656f, +0.001553f, +0.000036f, +0.000615f, +0.000472f, +0.000728f, - -0.000288f, +0.000543f, -0.000448f, -0.000034f, +0.000097f, +0.000114f, -0.001248f, -0.000107f, +0.000865f, +0.000038f, - -0.000473f, +0.000277f, +0.000478f, -0.000288f, -0.000497f, -0.000219f, +0.000197f, -0.000189f, +0.000715f, -0.000363f, - +0.000386f, -0.000098f, +0.000230f, +0.000242f, -0.000202f, -0.000346f - }, - { - -0.008024f, +0.642203f, -0.020992f, +0.032725f, +0.004047f, -0.002292f, +0.000103f, -0.000865f, -0.004480f, +0.006810f, - +0.007947f, +0.000581f, -0.006218f, +0.000009f, +0.006546f, -0.014948f, +0.001243f, -0.000948f, -0.002535f, +0.000396f, - +0.001413f, +0.001455f, -0.003501f, -0.005658f, -0.003775f, -0.002560f, -0.003794f, +0.003899f, +0.002980f, +0.000266f, - +0.004447f, -0.003586f, -0.002492f, -0.006793f, -0.003538f, -0.004230f, -0.004110f, +0.003510f, -0.000966f, +0.000438f, - -0.000263f, +0.001944f, +0.000129f, -0.000366f, +0.002325f, -0.005307f, +0.004085f, +0.000389f, +0.003356f, +0.001544f, - -0.002551f, +0.002424f, -0.000863f, +0.000371f, -0.001926f, +0.000989f, -0.000814f, -0.000973f, +0.001231f, -0.001464f, - +0.000995f, +0.000713f, -0.000365f, -0.000273f, -0.000259f, -0.001561f, +0.000248f, -0.000164f, +0.001027f, -0.000425f, - -0.000412f, +0.000807f, +0.000017f, -0.000155f, +0.000651f, +0.000134f, +0.000253f, +0.000595f, -0.000208f, +0.000142f, - +0.000914f, -0.000459f, -0.000630f, -0.000070f, +0.000180f, +0.000066f, -0.000009f, +0.000181f, +0.000398f, +0.000403f, - -0.000166f, +0.000555f, +0.000238f, +0.000318f, +0.000141f, -0.000028f - }, - { - +0.001054f, -0.013126f, +0.016849f, +0.001318f, +0.001036f, -0.000545f, -0.001942f, -0.001854f, -0.002852f, -0.000525f, - -0.001324f, +0.000958f, +0.003904f, +0.004682f, +0.058722f, +0.021525f, +0.005662f, +0.004556f, +0.013449f, -0.012623f, - +0.014984f, +0.021685f, +0.000240f, +0.004919f, -0.020115f, -0.001254f, -0.003306f, -0.006154f, -0.003594f, -0.011510f, - +0.001743f, -0.002345f, -0.007781f, +0.003527f, -0.000119f, -0.002776f, -0.005102f, -0.000229f, +0.003443f, +0.001635f, - +0.001421f, -0.001674f, +0.001251f, +0.001570f, +0.000842f, +0.000497f, -0.000257f, +0.000012f, -0.000881f, +0.001414f, - +0.001429f, -0.000937f, +0.002790f, -0.000503f, -0.000944f, -0.001745f, -0.002870f, +0.000397f, -0.000884f, -0.001452f, - +0.002311f, +0.000375f, +0.001249f, -0.000846f, +0.000182f, +0.000692f, -0.000129f, +0.000340f, -0.000351f, +0.000855f, - -0.000219f, -0.001669f, +0.000031f, -0.000195f, +0.000128f, +0.000332f, +0.000656f, -0.001173f, -0.000254f, +0.000114f, - -0.000960f, +0.000430f, -0.000022f, +0.000190f, -0.000092f, +0.000155f, +0.000149f, -0.000277f, -0.000484f, -0.000127f, - +0.000338f, -0.000140f, -0.000170f, -0.000050f, -0.000274f, -0.000387f - }, - { - -0.075424f, -0.242926f, +0.042822f, +0.022396f, -0.003771f, +0.001100f, +0.000014f, +0.001938f, +0.000552f, -0.001004f, - +0.000776f, +0.004003f, +0.001355f, -0.005036f, -0.011066f, -0.002798f, +0.003770f, -0.003855f, +0.005145f, +0.001278f, - -0.001826f, -0.000936f, +0.007375f, +0.000566f, -0.001241f, -0.002734f, -0.000490f, -0.001962f, -0.002678f, -0.003035f, - +0.004396f, -0.000846f, -0.006431f, +0.001107f, -0.001924f, +0.002795f, +0.000138f, +0.000313f, -0.000064f, +0.004685f, - +0.000162f, -0.002142f, +0.002121f, +0.001687f, -0.001838f, -0.000283f, +0.000093f, +0.000049f, +0.000934f, -0.000101f, - -0.001193f, -0.002514f, -0.001819f, +0.000253f, +0.003457f, +0.000328f, +0.000356f, +0.000204f, +0.001824f, +0.000362f, - +0.001003f, -0.000274f, +0.001314f, +0.001127f, +0.000694f, +0.001375f, -0.000671f, -0.000028f, +0.000600f, +0.000247f, - +0.000026f, +0.000131f, +0.000192f, +0.000128f, +0.000487f, -0.000327f, +0.000979f, +0.000954f, -0.000131f, +0.000041f, - -0.000006f, +0.000246f, -0.000807f, -0.000222f, -0.000251f, +0.000196f, +0.000212f, -0.000142f, -0.000021f, +0.000042f, - -0.000022f, +0.000191f, -0.000038f, -0.000212f, -0.000120f, +0.000105f - }, - { - +0.002567f, -0.004071f, -0.014011f, -0.001073f, -0.000770f, -0.000590f, -0.011876f, +0.005905f, +0.002639f, -0.003739f, - -0.010829f, -0.005055f, +0.001017f, -0.016653f, -0.010971f, -0.010559f, +0.011401f, -0.001513f, +0.007623f, +0.020755f, - +0.003393f, -0.002410f, +0.008982f, -0.011446f, +0.001406f, -0.004369f, -0.000532f, -0.006301f, +0.007008f, -0.000433f, - -0.001349f, +0.002647f, +0.003808f, -0.003141f, -0.005314f, +0.001365f, -0.001110f, -0.005695f, -0.000687f, -0.001270f, - -0.002132f, +0.000204f, +0.001489f, +0.003404f, +0.002347f, +0.000289f, -0.001385f, -0.001757f, +0.000308f, -0.003418f, - -0.000910f, +0.000117f, -0.001727f, +0.000397f, -0.001050f, -0.001439f, -0.003242f, -0.001729f, -0.001626f, -0.000128f, - +0.000612f, +0.001014f, +0.001046f, -0.000982f, +0.001374f, +0.000465f, -0.000501f, +0.000343f, -0.000845f, +0.000762f, - -0.000555f, +0.000002f, +0.000706f, +0.000636f, +0.000668f, +0.000715f, +0.000130f, -0.000359f, +0.000578f, +0.000996f, - -0.000473f, -0.000276f, +0.000561f, +0.000383f, +0.000260f, -0.000163f, +0.000383f, +0.000395f, +0.000322f, -0.000146f, - +0.000040f, -0.000198f, -0.000101f, +0.000215f, -0.000079f, +0.000043f - }, - { - -0.028175f, -0.134172f, +0.034378f, -0.001967f, -0.006443f, -0.010941f, -0.002826f, +0.001689f, -0.012139f, +0.004470f, - +0.011134f, -0.011091f, -0.004929f, +0.001464f, -0.015516f, +0.003677f, -0.013003f, +0.003442f, +0.005800f, -0.003473f, - +0.007781f, +0.002291f, +0.000656f, -0.004065f, -0.003211f, +0.002244f, -0.001478f, +0.006548f, -0.000860f, -0.005789f, - -0.005440f, -0.001696f, +0.014270f, +0.007215f, -0.000597f, +0.003269f, +0.005710f, +0.000411f, -0.004178f, +0.003827f, - +0.002489f, -0.000845f, -0.001800f, -0.000162f, -0.002136f, -0.000026f, +0.000600f, -0.000589f, +0.001167f, -0.003363f, - -0.001287f, +0.000618f, +0.001724f, -0.001086f, +0.000669f, -0.000217f, +0.001882f, -0.001655f, +0.001493f, -0.000537f, - +0.000682f, +0.000934f, -0.000380f, +0.000115f, -0.000890f, +0.000401f, -0.000366f, +0.001045f, +0.000129f, -0.000535f, - -0.000344f, +0.000167f, +0.000178f, +0.000354f, -0.000665f, -0.000332f, -0.000419f, -0.000220f, -0.000103f, -0.000600f, - +0.000170f, -0.000571f, -0.000187f, -0.000277f, +0.000199f, +0.000031f, +0.000195f, +0.000376f, -0.000152f, -0.000278f, - -0.000358f, +0.000134f, +0.000310f, +0.000130f, +0.000015f, -0.000164f - }, - { - +0.001824f, +0.020132f, -0.020902f, -0.007801f, +0.000270f, -0.001723f, -0.000754f, +0.002884f, -0.004088f, -0.001350f, - -0.001322f, -0.006595f, -0.005515f, +0.043773f, -0.005020f, +0.003941f, -0.010496f, -0.001499f, +0.004127f, +0.010654f, - -0.020187f, +0.005154f, -0.001990f, -0.009749f, -0.008830f, -0.005417f, +0.009779f, -0.007426f, -0.000046f, -0.004495f, - +0.001448f, -0.002959f, +0.005791f, -0.000748f, -0.000778f, +0.001360f, -0.001000f, +0.001400f, +0.000804f, -0.004211f, - -0.000908f, +0.002374f, +0.002280f, +0.000419f, -0.003519f, -0.000718f, -0.000870f, +0.003233f, +0.003237f, -0.000520f, - -0.001267f, +0.000755f, -0.000129f, -0.002339f, +0.000445f, +0.000725f, +0.002257f, +0.001695f, +0.001342f, +0.000125f, - +0.000730f, -0.002164f, -0.000054f, -0.000839f, -0.001319f, +0.000271f, +0.000859f, -0.000325f, +0.000054f, -0.000589f, - +0.000063f, -0.000432f, -0.001143f, +0.000156f, +0.000706f, -0.000028f, +0.000292f, -0.000396f, +0.000229f, +0.000226f, - -0.000015f, -0.000302f, -0.000203f, -0.000293f, +0.000025f, -0.000014f, +0.000109f, +0.000275f, +0.000325f, +0.000122f, - -0.000078f, +0.000027f, +0.000228f, -0.000185f, +0.000033f, -0.000095f - }, - { - -0.005845f, -0.148771f, -0.021341f, -0.015773f, +0.019185f, -0.005678f, -0.008865f, -0.007560f, +0.000673f, +0.000077f, - -0.010134f, +0.006707f, -0.013035f, -0.037889f, +0.012761f, -0.013231f, -0.002343f, -0.003379f, +0.004366f, -0.000229f, - -0.000889f, +0.003633f, +0.006029f, +0.003300f, -0.001585f, -0.005777f, -0.004860f, -0.002267f, -0.003384f, -0.001602f, - +0.002024f, -0.000005f, -0.005186f, +0.000951f, +0.003427f, -0.005480f, +0.005372f, -0.000716f, -0.002443f, -0.002652f, - +0.000616f, +0.004402f, +0.001903f, +0.002569f, +0.001223f, +0.003329f, +0.002549f, -0.001405f, -0.000254f, +0.000022f, - +0.001003f, -0.001899f, -0.000480f, +0.002321f, -0.000165f, -0.000661f, -0.000190f, +0.002416f, -0.000524f, -0.002645f, - -0.002420f, +0.000922f, +0.000309f, +0.001813f, +0.000502f, +0.001861f, -0.000645f, -0.001012f, -0.001407f, -0.000811f, - -0.000014f, -0.000527f, -0.001148f, -0.000614f, +0.000593f, -0.000165f, -0.000316f, +0.000971f, -0.001181f, -0.000319f, - +0.000050f, +0.000195f, -0.000545f, +0.000172f, +0.000230f, +0.000722f, +0.000647f, +0.000440f, +0.000505f, -0.000013f, - -0.000096f, -0.000029f, +0.000179f, +0.000170f, +0.000138f, +0.000005f - }, - { - -0.000784f, -0.002350f, -0.001455f, +0.000129f, -0.000885f, +0.000799f, +0.003285f, -0.002654f, -0.004645f, +0.000025f, - -0.000316f, +0.001702f, -0.004388f, +0.009197f, -0.080829f, -0.025914f, -0.007539f, -0.003520f, -0.000841f, +0.014910f, - +0.006084f, -0.004262f, -0.005613f, +0.010508f, -0.001344f, -0.000260f, -0.001492f, -0.002565f, -0.002777f, +0.002736f, - -0.000166f, -0.007628f, -0.001749f, -0.005372f, +0.000383f, +0.012422f, +0.001660f, -0.000715f, +0.002502f, -0.002489f, - +0.004948f, +0.000725f, -0.004519f, +0.000938f, +0.001152f, -0.002587f, +0.000944f, -0.001196f, +0.004446f, -0.000856f, - -0.002286f, -0.001503f, -0.000805f, +0.001094f, -0.001993f, +0.002415f, -0.000078f, -0.000492f, +0.001139f, -0.000176f, - +0.000611f, +0.000012f, +0.000474f, -0.001241f, +0.000751f, -0.001103f, -0.001263f, +0.000341f, +0.000793f, -0.001002f, - -0.001341f, -0.000478f, +0.000357f, -0.000724f, +0.000142f, +0.000068f, +0.000233f, -0.000095f, +0.000527f, +0.000647f, - +0.000323f, +0.000704f, -0.000148f, +0.000110f, -0.000420f, -0.000233f, +0.000437f, +0.000174f, +0.000640f, -0.000053f, - +0.000159f, +0.000208f, +0.000132f, +0.000053f, +0.000054f, +0.000015f - }, - { - +0.014671f, -0.143561f, -0.018234f, -0.011926f, +0.006329f, -0.005994f, -0.014314f, +0.005019f, +0.002960f, +0.010086f, - +0.003362f, -0.010671f, -0.002680f, +0.032153f, +0.037607f, -0.016831f, -0.018322f, -0.013234f, +0.000608f, -0.001601f, - +0.002135f, -0.008221f, -0.004466f, +0.000541f, -0.001385f, +0.006772f, +0.001064f, -0.004139f, -0.013932f, +0.004111f, - -0.002566f, +0.002967f, +0.001168f, -0.004729f, +0.005324f, +0.000408f, +0.003965f, +0.004116f, -0.001698f, +0.001133f, - +0.001353f, +0.006408f, +0.000087f, -0.001099f, +0.000132f, -0.000340f, +0.000772f, +0.001517f, -0.002806f, -0.000553f, - -0.000406f, +0.001129f, -0.001917f, -0.002469f, +0.001276f, -0.001415f, +0.000148f, -0.001957f, -0.001024f, +0.001486f, - -0.000124f, -0.000144f, -0.001022f, -0.000915f, -0.000633f, -0.001513f, +0.001329f, +0.000448f, +0.000116f, +0.000733f, - +0.000589f, +0.000114f, +0.000504f, -0.000779f, -0.000130f, +0.000664f, +0.000051f, +0.000256f, +0.000110f, -0.000010f, - -0.000643f, -0.000034f, +0.000028f, +0.000364f, -0.000299f, -0.000376f, -0.000110f, -0.000257f, +0.000277f, +0.000194f, - +0.000107f, +0.000057f, +0.000049f, -0.000348f, -0.000209f, +0.000252f - } - }, - { - { - -0.002922f, +0.130487f, -0.023142f, -0.014260f, +0.001688f, -0.000628f, +0.000722f, +0.000599f, -0.000057f, +0.000014f, - -0.000423f, -0.007433f, +0.004892f, -0.007524f, -0.029235f, +0.002683f, +0.008845f, +0.006597f, -0.012258f, -0.022835f, - +0.002571f, -0.005102f, +0.002470f, +0.006105f, -0.000546f, -0.000325f, -0.005843f, +0.000647f, +0.006166f, -0.009669f, - +0.007102f, -0.001139f, -0.001717f, -0.009223f, +0.001814f, -0.000212f, +0.000927f, -0.000546f, -0.003982f, +0.003457f, - -0.001127f, -0.003299f, +0.000261f, +0.000388f, -0.002589f, -0.000540f, -0.000709f, +0.000733f, -0.001853f, +0.001706f, - +0.000023f, -0.000948f, -0.000505f, +0.000960f, -0.001940f, +0.000533f, -0.001046f, -0.000209f, -0.000340f, +0.001357f, - +0.001621f, -0.002199f, +0.000682f, +0.000413f, -0.000775f, +0.000045f, +0.000377f, +0.000554f, +0.000745f, +0.000123f, - -0.000531f, -0.000037f, +0.000236f, +0.000663f, -0.000175f, -0.000237f, +0.000538f, +0.000077f, +0.000069f, -0.000461f, - -0.000324f, +0.000331f, -0.000030f, -0.000519f, -0.000055f, -0.000136f, +0.000366f, -0.000144f, +0.000462f, +0.000181f, - -0.000145f, -0.000047f, -0.000339f, +0.000045f, +0.000177f, +0.000197f - }, - { - -0.031646f, +0.059881f, +0.029214f, +0.002544f, -0.001595f, +0.005815f, -0.003208f, -0.005874f, +0.006700f, -0.000374f, - +0.010683f, +0.006595f, +0.002699f, -0.002882f, -0.011787f, -0.004128f, +0.013606f, +0.005089f, -0.022350f, +0.012861f, - -0.002822f, -0.003019f, +0.001000f, +0.001892f, +0.006983f, -0.005511f, -0.001267f, +0.000598f, +0.000065f, +0.001934f, - +0.000671f, +0.000413f, +0.003140f, -0.003234f, +0.007279f, -0.002012f, +0.000316f, +0.001972f, +0.001861f, -0.000360f, - +0.000057f, +0.001379f, -0.001058f, +0.003318f, +0.000666f, -0.004429f, -0.000798f, -0.002091f, +0.002277f, -0.000436f, - -0.000820f, +0.003634f, +0.000973f, -0.000010f, +0.001053f, -0.002126f, -0.000098f, -0.001603f, +0.000584f, +0.001253f, - +0.000318f, -0.000638f, -0.000902f, +0.000311f, -0.000162f, +0.000444f, +0.000286f, -0.001045f, +0.000419f, -0.000462f, - +0.000594f, -0.000663f, -0.000049f, -0.000184f, +0.000063f, +0.000273f, +0.000776f, +0.000068f, -0.000096f, +0.000043f, - +0.000580f, -0.000509f, +0.000514f, +0.000015f, +0.000163f, -0.000248f, +0.000360f, +0.000247f, +0.000445f, -0.000080f, - -0.000261f, -0.000157f, +0.000012f, +0.000071f, -0.000121f, +0.000208f - }, - { - +0.012174f, -0.227355f, -0.033757f, +0.030663f, -0.002102f, -0.002750f, -0.001268f, -0.002764f, +0.000176f, -0.000578f, - -0.008196f, +0.008632f, -0.001088f, +0.010728f, +0.011504f, -0.001200f, +0.007706f, +0.008469f, +0.001120f, +0.000638f, - -0.001498f, -0.006073f, +0.000327f, -0.002706f, +0.000336f, -0.001187f, +0.005883f, -0.002844f, +0.009100f, +0.004695f, - -0.000767f, -0.003003f, -0.002294f, -0.004190f, -0.000772f, +0.002387f, -0.004218f, -0.001809f, +0.001900f, -0.001064f, - +0.006506f, -0.001489f, +0.000459f, +0.001387f, +0.000533f, -0.001319f, +0.002029f, -0.002764f, +0.002052f, +0.001448f, - -0.001221f, -0.000299f, +0.001670f, -0.001830f, -0.001409f, +0.000220f, -0.002580f, +0.000450f, +0.000436f, -0.000319f, - -0.000524f, +0.000131f, +0.000879f, -0.000346f, -0.000290f, +0.002024f, -0.001288f, +0.000216f, -0.000089f, -0.001095f, - +0.000847f, +0.000634f, +0.000321f, +0.000769f, -0.000377f, -0.000331f, +0.000811f, -0.000003f, -0.000662f, +0.000556f, - +0.000693f, -0.000533f, +0.000259f, +0.000051f, -0.000135f, -0.000435f, +0.000225f, -0.000155f, +0.000359f, +0.000095f, - -0.000101f, -0.000197f, -0.000034f, -0.000311f, +0.000036f, -0.000018f - }, - { - -0.003046f, +0.023424f, +0.006049f, +0.000820f, +0.000857f, +0.000744f, -0.001034f, -0.000224f, +0.000040f, -0.001001f, - -0.002702f, +0.001881f, +0.006714f, -0.017054f, +0.003733f, +0.006570f, +0.006861f, -0.003173f, -0.006286f, +0.002538f, - -0.003676f, -0.000677f, +0.000815f, -0.001056f, -0.006024f, -0.002290f, -0.001218f, +0.002801f, +0.000185f, -0.002998f, - +0.004991f, -0.002230f, -0.000488f, -0.002534f, +0.002471f, +0.000679f, -0.003401f, +0.005049f, -0.001344f, +0.000927f, - +0.000762f, +0.001776f, -0.002583f, +0.001326f, +0.003155f, +0.001111f, -0.002805f, +0.000318f, +0.001747f, -0.000600f, - -0.001433f, -0.000104f, +0.001174f, +0.001347f, +0.000131f, -0.000385f, -0.000680f, +0.000915f, -0.000954f, +0.000554f, - -0.000178f, -0.000236f, -0.000412f, +0.000667f, -0.000223f, -0.001424f, +0.000524f, +0.000720f, -0.000113f, -0.000949f, - +0.000210f, -0.000792f, +0.000672f, -0.000115f, -0.000020f, +0.000602f, -0.000132f, +0.000226f, -0.000204f, +0.000439f, - -0.000081f, -0.000499f, +0.000318f, -0.000213f, +0.000259f, -0.000113f, +0.000115f, +0.000228f, -0.000462f, +0.000035f, - -0.000198f, +0.000086f, -0.000088f, -0.000138f, -0.000011f, -0.000059f - }, - { - +0.034355f, +0.222198f, -0.083685f, +0.000568f, -0.004145f, -0.000250f, +0.001020f, -0.000895f, -0.004958f, +0.002714f, - -0.000769f, -0.002715f, -0.004947f, +0.006918f, +0.027289f, -0.005453f, +0.000841f, -0.007114f, -0.012297f, -0.007547f, - +0.000424f, -0.003118f, +0.003310f, -0.006287f, +0.004265f, -0.010184f, +0.003689f, -0.005746f, +0.007118f, -0.001810f, - +0.001692f, +0.001309f, +0.001358f, -0.000912f, -0.002846f, -0.004560f, +0.013370f, -0.005100f, +0.003534f, -0.004131f, - +0.002121f, -0.000089f, -0.004027f, +0.000019f, +0.000513f, -0.000776f, -0.004390f, +0.000757f, +0.000889f, +0.002308f, - +0.001183f, -0.000260f, +0.001001f, -0.000613f, +0.000875f, +0.001191f, -0.000321f, -0.002577f, +0.000500f, +0.001312f, - -0.002011f, -0.000209f, -0.000546f, +0.000083f, +0.000948f, -0.000673f, +0.000460f, +0.000196f, +0.000780f, -0.000249f, - -0.000951f, -0.000018f, -0.000077f, +0.000373f, -0.000092f, -0.000080f, +0.000575f, -0.000013f, -0.000357f, +0.000779f, - -0.000031f, -0.000034f, +0.000158f, -0.000255f, -0.000158f, +0.000107f, +0.000059f, +0.000521f, -0.000251f, +0.000395f, - -0.000322f, +0.000278f, -0.000150f, +0.000296f, -0.000369f, +0.000221f - }, - { - +0.000175f, +0.000646f, -0.003743f, -0.001183f, -0.000343f, -0.000287f, +0.001046f, -0.000456f, -0.003171f, +0.002642f, - -0.002938f, +0.000862f, -0.004850f, -0.011357f, +0.016959f, +0.007901f, +0.002487f, -0.007428f, +0.007937f, -0.046563f, - -0.017059f, +0.002077f, -0.005191f, -0.020179f, +0.009577f, -0.002534f, -0.015398f, +0.000591f, +0.006017f, +0.008268f, - -0.003887f, -0.000703f, +0.008465f, -0.002496f, +0.001959f, -0.001199f, -0.002231f, -0.000407f, +0.001786f, +0.002992f, - +0.001898f, -0.003209f, +0.002634f, +0.000941f, -0.000552f, -0.000786f, +0.001114f, -0.000305f, -0.001518f, +0.000950f, - +0.000104f, +0.000300f, -0.000266f, -0.000650f, +0.001254f, -0.002713f, +0.000113f, +0.000033f, -0.000074f, +0.001187f, - +0.000358f, -0.000024f, +0.000203f, +0.000899f, -0.000734f, +0.001316f, -0.000581f, +0.000185f, +0.000190f, +0.000206f, - -0.000833f, -0.000228f, -0.000666f, +0.000018f, +0.000250f, +0.001323f, -0.000413f, -0.000623f, +0.000085f, -0.000494f, - -0.000101f, -0.000048f, +0.000199f, +0.000015f, -0.000175f, +0.000111f, +0.000646f, -0.000328f, +0.000496f, -0.000351f, - +0.000370f, +0.000108f, +0.000460f, +0.000035f, -0.000324f, -0.000225f - }, - { - -0.033504f, +0.631298f, +0.000748f, +0.023060f, -0.000408f, -0.000997f, -0.000923f, -0.000159f, -0.002945f, +0.005121f, - +0.003068f, -0.000055f, -0.004996f, +0.000167f, +0.003324f, -0.017020f, +0.003446f, -0.003003f, -0.006254f, +0.001519f, - +0.002645f, +0.003636f, -0.002818f, -0.004533f, +0.001940f, -0.001506f, -0.005736f, +0.001182f, +0.001488f, +0.001844f, - +0.002427f, -0.001006f, +0.002602f, -0.006514f, -0.004725f, -0.001409f, -0.001909f, +0.002068f, -0.001748f, -0.001643f, - -0.000863f, +0.002720f, -0.001899f, -0.001439f, +0.002575f, -0.003762f, +0.004399f, +0.000387f, -0.000254f, -0.002744f, - -0.002647f, +0.000283f, +0.000117f, +0.002264f, +0.000894f, +0.003227f, -0.001908f, -0.001771f, +0.001131f, -0.001322f, - +0.001097f, +0.000486f, -0.000831f, +0.000313f, +0.000856f, -0.000051f, +0.000148f, -0.001006f, +0.001024f, -0.000591f, - -0.000610f, +0.000827f, -0.000278f, -0.000870f, +0.000546f, +0.000215f, +0.000262f, +0.000562f, +0.000128f, +0.000164f, - +0.000073f, -0.000242f, -0.000070f, -0.000303f, -0.000059f, +0.000368f, +0.000251f, -0.000100f, +0.000088f, +0.000188f, - -0.000383f, +0.000117f, -0.000078f, +0.000127f, +0.000003f, +0.000026f - }, - { - +0.001357f, -0.017087f, +0.007909f, +0.000215f, +0.001308f, -0.000313f, -0.001022f, -0.000385f, +0.000071f, -0.000048f, - -0.001992f, +0.001611f, +0.003640f, -0.001774f, +0.041604f, +0.004209f, -0.011390f, -0.000129f, +0.010192f, -0.009359f, - +0.009298f, +0.013251f, -0.006414f, +0.001459f, -0.006830f, +0.008867f, +0.003256f, +0.006294f, +0.003626f, -0.010688f, - +0.005287f, +0.000840f, -0.005036f, +0.004164f, +0.001432f, -0.000059f, -0.003554f, +0.000688f, +0.001611f, -0.001092f, - +0.000415f, -0.000248f, -0.001051f, -0.001366f, -0.000912f, -0.001191f, +0.001285f, -0.000819f, +0.001673f, +0.002736f, - +0.000417f, -0.000792f, +0.002334f, +0.001186f, +0.000690f, +0.001015f, -0.000220f, -0.000164f, -0.001181f, -0.000905f, - +0.002338f, -0.000346f, +0.000042f, -0.000828f, -0.001220f, -0.000111f, +0.000667f, +0.000359f, -0.001102f, +0.000809f, - -0.000562f, -0.001371f, +0.000112f, -0.000190f, -0.000186f, -0.000675f, +0.000359f, -0.000610f, -0.000089f, +0.000307f, - -0.000973f, +0.000614f, -0.000268f, +0.000105f, +0.000379f, +0.000114f, -0.000110f, -0.000025f, +0.000101f, -0.000112f, - +0.000057f, -0.000115f, -0.000167f, -0.000045f, -0.000153f, -0.000254f - }, - { - +0.071576f, -0.176631f, -0.058883f, +0.031554f, -0.001408f, -0.001736f, -0.006872f, -0.001340f, +0.003349f, -0.000436f, - -0.000260f, +0.007609f, +0.003474f, +0.002627f, -0.005451f, +0.003069f, +0.006398f, -0.009301f, -0.004588f, -0.001097f, - +0.001230f, -0.001326f, +0.003050f, -0.003543f, -0.002597f, -0.001366f, +0.000275f, -0.002050f, +0.001170f, +0.000388f, - +0.001501f, +0.002441f, -0.000352f, +0.002697f, -0.001515f, +0.004658f, -0.001395f, +0.001508f, +0.000850f, +0.001673f, - -0.003718f, -0.003623f, -0.000949f, -0.000085f, -0.002260f, +0.001300f, +0.000823f, -0.001357f, -0.001122f, +0.000995f, - +0.000287f, -0.002074f, -0.000406f, -0.000292f, +0.001270f, -0.000891f, -0.000052f, -0.000117f, -0.000321f, -0.001375f, - +0.000134f, -0.000806f, -0.000109f, -0.000489f, -0.000609f, +0.000662f, -0.000151f, -0.000246f, +0.000306f, +0.000292f, - -0.000305f, -0.000379f, -0.000366f, -0.000685f, +0.000121f, -0.000622f, +0.000888f, +0.000114f, -0.000523f, -0.000098f, - +0.000015f, +0.000167f, -0.000624f, +0.000082f, -0.000212f, +0.000314f, +0.000387f, -0.000289f, -0.000044f, +0.000221f, - -0.000116f, +0.000102f, +0.000133f, +0.000159f, -0.000140f, -0.000120f - }, - { - -0.003190f, +0.029990f, +0.015313f, -0.010472f, +0.001804f, +0.004126f, -0.018218f, -0.000519f, +0.000184f, -0.000474f, - -0.003123f, -0.004432f, +0.004827f, -0.000887f, -0.006149f, -0.007032f, +0.018901f, +0.003958f, +0.007203f, +0.004256f, - -0.003281f, +0.000140f, +0.008201f, -0.011681f, +0.004594f, -0.000045f, +0.003782f, -0.007715f, +0.004628f, +0.001110f, - -0.004748f, -0.000215f, +0.004335f, -0.000734f, -0.000958f, +0.001257f, +0.003970f, +0.000738f, +0.001588f, +0.001324f, - +0.001836f, +0.003811f, +0.001897f, +0.000636f, +0.000438f, -0.000412f, +0.000713f, -0.001082f, +0.001989f, -0.001086f, - -0.001494f, +0.000505f, +0.000147f, +0.002212f, -0.000452f, +0.001775f, -0.000118f, +0.000209f, +0.000217f, +0.001371f, - +0.000600f, -0.000173f, +0.000463f, -0.000335f, +0.000483f, -0.000614f, -0.000536f, +0.000307f, -0.000745f, +0.000276f, - -0.000220f, +0.000052f, -0.000418f, +0.000273f, -0.000019f, +0.000060f, +0.000582f, -0.000236f, -0.000159f, +0.000708f, - -0.000088f, -0.000378f, +0.000440f, +0.000064f, -0.000234f, -0.000551f, -0.000060f, +0.000001f, +0.000040f, +0.000154f, - +0.000046f, -0.000172f, -0.000119f, +0.000264f, -0.000085f, -0.000048f - }, - { - +0.026930f, -0.149177f, -0.015685f, +0.018005f, -0.001332f, -0.002239f, +0.000491f, +0.002356f, -0.007409f, +0.001669f, - +0.008892f, -0.002137f, +0.001678f, +0.001980f, -0.010163f, +0.004246f, -0.001145f, +0.009192f, -0.001600f, -0.004173f, - +0.004136f, +0.003800f, +0.002796f, +0.002447f, -0.000686f, +0.004071f, -0.002279f, +0.001665f, -0.001722f, -0.000878f, - -0.003973f, -0.008517f, +0.008018f, +0.003017f, -0.002318f, +0.002854f, +0.004884f, +0.001490f, -0.002884f, +0.002395f, - +0.000109f, -0.002127f, -0.000531f, +0.001521f, -0.000392f, -0.000611f, -0.000878f, -0.002859f, -0.000453f, -0.001490f, - -0.000106f, -0.000124f, +0.001285f, -0.001883f, +0.000570f, -0.000327f, +0.002723f, -0.000286f, +0.000889f, -0.000894f, - +0.000031f, +0.000331f, +0.000189f, +0.001127f, -0.000653f, +0.000306f, -0.000268f, +0.000631f, +0.000130f, -0.000708f, - -0.000234f, -0.000061f, -0.000112f, +0.000244f, +0.000029f, +0.000585f, -0.000385f, -0.000206f, +0.000267f, -0.000347f, - +0.000435f, -0.000108f, -0.000255f, -0.000171f, +0.000118f, +0.000060f, +0.000019f, +0.000248f, -0.000356f, +0.000032f, - -0.000136f, -0.000094f, -0.000088f, -0.000019f, +0.000121f, +0.000023f - }, - { - -0.001456f, +0.027929f, -0.002122f, -0.000832f, +0.002595f, +0.000697f, +0.001394f, +0.003753f, -0.001418f, -0.000846f, - +0.000763f, -0.002040f, -0.005065f, +0.051260f, +0.003208f, +0.008151f, -0.006754f, +0.004313f, +0.000409f, +0.000079f, - -0.010431f, +0.023708f, +0.003437f, -0.001490f, -0.010401f, -0.004862f, +0.012607f, -0.007575f, +0.008591f, +0.004057f, - +0.003414f, +0.000201f, -0.000904f, -0.002780f, -0.000926f, -0.002488f, -0.001933f, +0.000815f, +0.001850f, +0.002887f, - -0.000257f, -0.002935f, +0.000176f, +0.000828f, -0.001439f, +0.001249f, -0.000275f, +0.003529f, +0.001588f, +0.000478f, - +0.000192f, +0.000288f, +0.000614f, -0.000699f, +0.001398f, +0.000293f, +0.000235f, +0.000563f, +0.000769f, -0.001056f, - +0.000802f, -0.001448f, +0.000157f, -0.000262f, -0.001217f, -0.000043f, -0.000149f, -0.000249f, -0.000419f, -0.000461f, - +0.001182f, +0.000301f, -0.000897f, +0.000003f, +0.000254f, -0.000255f, +0.000145f, -0.000494f, -0.000122f, -0.000074f, - +0.000236f, -0.000543f, -0.000141f, +0.000259f, +0.000381f, +0.000250f, -0.000100f, -0.000018f, +0.000031f, +0.000001f, - -0.000049f, -0.000064f, -0.000014f, -0.000393f, +0.000020f, -0.000265f - }, - { - +0.018805f, -0.114090f, -0.005677f, -0.013261f, +0.011884f, -0.004502f, -0.003802f, -0.000386f, +0.002700f, +0.005250f, - -0.002572f, +0.007277f, +0.003584f, -0.017058f, +0.011987f, -0.007516f, +0.004803f, -0.007477f, -0.005310f, +0.003603f, - +0.000269f, -0.000448f, +0.000346f, +0.002849f, -0.000558f, -0.000488f, +0.001131f, -0.000679f, -0.001444f, -0.002768f, - +0.004954f, -0.000115f, -0.007626f, -0.000802f, +0.003449f, -0.002972f, +0.002528f, -0.001622f, +0.003101f, -0.000645f, - +0.002015f, +0.002199f, -0.002148f, -0.002520f, +0.000470f, +0.004994f, +0.001082f, -0.004214f, +0.000222f, -0.001281f, - +0.000202f, +0.000934f, -0.001903f, +0.000197f, -0.000839f, -0.000580f, +0.000595f, +0.001088f, -0.000175f, -0.001112f, - -0.002135f, +0.001030f, -0.000619f, +0.001148f, -0.000604f, +0.000347f, +0.000304f, -0.000293f, -0.000848f, -0.000069f, - -0.000081f, +0.000042f, -0.000700f, -0.000354f, +0.000811f, +0.000179f, -0.000852f, +0.000523f, -0.000587f, +0.000092f, - -0.000496f, -0.000056f, -0.000666f, +0.000265f, +0.000162f, +0.000169f, +0.000022f, -0.000108f, +0.000159f, -0.000257f, - -0.000093f, +0.000143f, +0.000334f, -0.000175f, +0.000061f, +0.000068f - }, - { - +0.000298f, -0.003660f, -0.006638f, -0.002643f, -0.000530f, -0.002111f, +0.000488f, -0.001471f, -0.003159f, -0.000063f, - -0.003809f, +0.000272f, -0.006921f, +0.029209f, -0.036858f, -0.002073f, -0.001968f, +0.002764f, -0.003062f, +0.002174f, - +0.002271f, -0.001954f, -0.003830f, +0.010508f, -0.004848f, -0.003173f, -0.006919f, +0.005705f, +0.005005f, -0.002428f, - -0.002465f, -0.005162f, +0.004217f, -0.003098f, -0.005688f, +0.004873f, +0.000160f, +0.001685f, +0.003043f, -0.002777f, - +0.003412f, -0.000903f, -0.003197f, +0.002303f, +0.001317f, -0.000649f, +0.003514f, -0.003425f, +0.001347f, -0.002047f, - -0.000936f, -0.001635f, -0.001624f, +0.000719f, -0.002191f, +0.001285f, -0.000281f, +0.000320f, -0.000225f, -0.000461f, - +0.000805f, -0.001486f, +0.000646f, -0.000300f, +0.000698f, -0.000137f, +0.000070f, +0.000335f, +0.000868f, -0.000405f, - -0.001107f, -0.000167f, +0.001081f, -0.000811f, -0.000403f, -0.000139f, +0.000083f, +0.000396f, +0.000292f, -0.000081f, - -0.000334f, +0.000074f, -0.000448f, +0.000106f, -0.000162f, +0.000302f, +0.000425f, -0.000347f, +0.000053f, -0.000048f, - +0.000162f, +0.000055f, -0.000169f, +0.000092f, +0.000085f, -0.000091f - }, - { - +0.003718f, -0.133567f, +0.002175f, -0.011781f, +0.010627f, +0.013410f, -0.002759f, +0.002268f, -0.000997f, +0.001478f, - +0.004321f, -0.002748f, +0.006907f, -0.015928f, -0.016000f, +0.008108f, +0.006721f, +0.000753f, -0.002593f, -0.004335f, - +0.002273f, -0.002959f, -0.001047f, -0.002129f, -0.005066f, +0.006105f, +0.000288f, +0.005215f, -0.005903f, +0.004071f, - -0.000982f, +0.001296f, +0.000654f, -0.005646f, +0.001968f, -0.004161f, -0.000966f, +0.000324f, -0.003871f, +0.000442f, - -0.001368f, +0.004001f, -0.001406f, -0.002119f, +0.001448f, +0.001351f, +0.001699f, +0.002804f, -0.000244f, +0.000300f, - +0.000592f, +0.002529f, -0.000302f, -0.000770f, +0.001324f, -0.000562f, +0.000968f, +0.000092f, +0.001361f, +0.000621f, - -0.002218f, -0.000510f, -0.000002f, +0.000422f, +0.000570f, -0.000604f, +0.001066f, -0.000078f, -0.000906f, +0.000369f, - -0.000472f, -0.000655f, +0.000678f, +0.000007f, +0.000221f, +0.000142f, -0.000094f, +0.000525f, +0.000036f, -0.000097f, - -0.000326f, +0.000368f, -0.000441f, +0.000131f, -0.000057f, -0.000275f, +0.000031f, +0.000177f, +0.000079f, +0.000163f, - +0.000143f, +0.000121f, +0.000139f, -0.000316f, -0.000002f, +0.000181f - } - }, - { - { - +0.002615f, +0.069124f, +0.019724f, -0.009280f, -0.003160f, +0.001997f, +0.000857f, +0.002780f, -0.000110f, -0.003467f, - -0.000090f, -0.003023f, -0.003709f, -0.006969f, -0.014679f, -0.001974f, +0.003637f, +0.004754f, -0.005127f, -0.010686f, - -0.004297f, -0.004847f, +0.002357f, +0.001204f, +0.004307f, -0.009744f, -0.000980f, +0.003737f, +0.005234f, -0.007392f, - +0.004442f, +0.004466f, -0.001445f, -0.003368f, -0.002587f, -0.000288f, -0.000294f, -0.006073f, -0.000457f, +0.001600f, - -0.000510f, -0.002641f, +0.000011f, +0.000293f, -0.002928f, -0.000800f, -0.001192f, +0.001307f, -0.000210f, -0.000043f, - +0.001445f, -0.000470f, -0.000375f, -0.000029f, +0.000129f, -0.000973f, -0.000302f, -0.000978f, -0.000468f, +0.001519f, - -0.000170f, -0.000037f, +0.000660f, -0.000373f, +0.000007f, +0.000382f, +0.000422f, +0.000894f, +0.000074f, +0.000133f, - -0.000545f, +0.000034f, +0.000366f, +0.000072f, -0.000020f, -0.000029f, +0.000229f, +0.000628f, +0.000197f, -0.000608f, - -0.000220f, +0.000274f, +0.000116f, -0.000300f, +0.000056f, -0.000214f, +0.000059f, +0.000172f, +0.000264f, +0.000044f, - +0.000125f, -0.000136f, -0.000076f, +0.000060f, +0.000056f, -0.000017f - }, - { - +0.027646f, +0.043374f, -0.022996f, +0.011106f, -0.002819f, +0.001497f, -0.001563f, -0.003465f, -0.001285f, +0.006732f, - +0.002297f, +0.010100f, +0.002055f, -0.003092f, -0.005102f, -0.004518f, +0.000613f, -0.003367f, +0.000205f, +0.002850f, - -0.000002f, -0.000536f, -0.001451f, +0.005215f, +0.001884f, -0.000960f, -0.000573f, -0.001049f, -0.001637f, +0.002851f, - +0.000064f, +0.002178f, +0.001035f, +0.002291f, +0.002132f, -0.000192f, +0.000760f, +0.002484f, -0.001578f, +0.000383f, - +0.000456f, -0.000868f, -0.000410f, +0.001897f, -0.000120f, -0.003558f, -0.001328f, +0.000421f, -0.000110f, -0.000503f, - +0.001517f, +0.002135f, +0.000655f, +0.000999f, +0.000457f, -0.001146f, -0.001111f, -0.000311f, +0.000549f, +0.000296f, - +0.000843f, +0.000121f, -0.000921f, -0.000460f, -0.000010f, +0.000059f, +0.000188f, +0.000105f, +0.000179f, +0.000238f, - -0.000160f, +0.000013f, -0.000054f, -0.000099f, -0.000485f, +0.000442f, +0.000560f, +0.000249f, +0.000246f, +0.000087f, - +0.000033f, -0.000057f, +0.000325f, +0.000137f, +0.000138f, -0.000306f, +0.000080f, +0.000252f, +0.000326f, +0.000192f, - -0.000244f, -0.000072f, +0.000010f, -0.000068f, +0.000034f, +0.000071f - }, - { - -0.012094f, -0.233769f, -0.009561f, +0.015135f, +0.021649f, +0.002178f, -0.000161f, -0.002520f, -0.001268f, -0.005325f, - -0.003956f, +0.002996f, +0.005740f, +0.009488f, +0.002458f, +0.009101f, +0.001941f, +0.002069f, +0.007652f, +0.005080f, - -0.005524f, +0.000813f, +0.001114f, -0.004096f, -0.000251f, +0.000387f, +0.006881f, +0.004271f, +0.002895f, -0.001300f, - +0.000001f, -0.002981f, -0.002018f, -0.003954f, -0.000398f, -0.001422f, +0.001672f, -0.001444f, -0.001902f, +0.000470f, - +0.004088f, +0.001031f, -0.000153f, +0.000837f, +0.000822f, +0.000267f, -0.000176f, +0.001300f, +0.001341f, -0.000266f, - -0.001132f, -0.000187f, +0.001273f, +0.000016f, -0.001815f, -0.000512f, +0.000079f, +0.000721f, -0.000745f, +0.000027f, - -0.001449f, +0.000867f, +0.000117f, +0.000921f, +0.000583f, +0.000512f, -0.000431f, -0.000116f, -0.000526f, +0.000109f, - +0.000415f, +0.000380f, +0.000576f, +0.000328f, +0.000156f, -0.000121f, +0.000125f, +0.000085f, +0.000089f, +0.000032f, - +0.000252f, -0.000003f, +0.000392f, -0.000086f, -0.000528f, -0.000182f, -0.000042f, -0.000093f, +0.000195f, +0.000009f, - -0.000111f, +0.000030f, -0.000112f, -0.000044f, -0.000084f, -0.000039f - }, - { - +0.002514f, +0.017887f, +0.002740f, +0.002653f, +0.000906f, +0.000118f, +0.000744f, -0.000700f, -0.000730f, +0.000242f, - -0.001933f, -0.001359f, +0.003240f, -0.006159f, -0.002058f, -0.004965f, +0.008718f, -0.000508f, -0.007601f, +0.004401f, - -0.003429f, +0.002694f, +0.003643f, -0.004327f, +0.001835f, -0.005228f, -0.001215f, +0.000836f, -0.001139f, -0.001399f, - +0.001417f, +0.000965f, -0.000219f, -0.000413f, +0.000595f, -0.000577f, +0.000102f, +0.000744f, +0.001550f, +0.000473f, - +0.000810f, +0.000731f, +0.001205f, +0.000148f, +0.002602f, +0.000864f, -0.001132f, -0.000635f, -0.000236f, +0.000693f, - -0.002185f, -0.000440f, +0.002442f, +0.000340f, +0.000613f, +0.000074f, -0.000450f, -0.000099f, -0.000156f, +0.000172f, - -0.000891f, -0.000327f, -0.000341f, +0.000258f, -0.000094f, -0.000627f, -0.000116f, +0.000765f, -0.000095f, -0.000398f, - -0.000658f, -0.000193f, +0.000113f, -0.000408f, +0.000475f, +0.000375f, +0.000219f, +0.000054f, -0.000025f, +0.000284f, - -0.000116f, -0.000131f, +0.000006f, -0.000043f, +0.000129f, -0.000029f, +0.000068f, -0.000022f, -0.000147f, -0.000087f, - -0.000078f, -0.000008f, +0.000021f, -0.000064f, -0.000099f, +0.000166f - }, - { - -0.009785f, +0.175226f, +0.006625f, -0.013594f, +0.000300f, -0.000341f, +0.000724f, +0.000966f, -0.002784f, -0.000422f, - +0.003454f, -0.003277f, -0.004048f, +0.002948f, +0.016154f, +0.004264f, -0.009273f, -0.011284f, -0.001578f, -0.003952f, - -0.000273f, -0.000294f, +0.000881f, -0.002826f, -0.003116f, -0.005321f, +0.001178f, +0.001832f, -0.001065f, +0.001096f, - +0.001232f, -0.001189f, +0.002839f, -0.000855f, -0.000779f, -0.003629f, +0.001811f, +0.002312f, +0.000461f, -0.001953f, - -0.000967f, -0.001291f, -0.000928f, -0.002299f, +0.002421f, -0.000290f, -0.001908f, -0.000672f, +0.000012f, +0.002006f, - +0.002119f, +0.001013f, -0.000297f, +0.000483f, +0.000756f, +0.001049f, -0.000925f, -0.001593f, +0.000376f, +0.000739f, - -0.001327f, -0.000412f, -0.000240f, +0.000268f, +0.000298f, +0.000645f, -0.000757f, +0.000330f, +0.000678f, -0.000091f, - -0.000585f, -0.000405f, +0.000090f, +0.000146f, +0.000063f, -0.000025f, +0.000385f, -0.000091f, +0.000026f, +0.000438f, - +0.000240f, -0.000009f, -0.000090f, -0.000309f, +0.000088f, +0.000026f, +0.000196f, +0.000172f, -0.000260f, +0.000295f, - -0.000142f, +0.000225f, -0.000100f, +0.000064f, -0.000191f, +0.000058f - }, - { - +0.000328f, +0.002211f, -0.001555f, -0.001901f, +0.000278f, -0.000405f, +0.000765f, -0.000421f, -0.001363f, -0.000474f, - -0.000696f, -0.001883f, -0.004345f, -0.006959f, +0.006922f, +0.005697f, +0.010288f, -0.008188f, -0.000536f, -0.043787f, - -0.001874f, -0.006316f, -0.001712f, -0.014547f, +0.000303f, +0.002375f, -0.005925f, -0.005141f, +0.004925f, +0.003126f, - -0.002188f, +0.003629f, +0.001981f, -0.000005f, +0.000446f, -0.000726f, -0.001008f, +0.001487f, +0.001896f, +0.001619f, - +0.000222f, -0.000104f, +0.000769f, +0.000701f, +0.000318f, +0.000012f, -0.000518f, +0.000806f, +0.000326f, +0.000412f, - -0.000889f, -0.000419f, -0.000453f, -0.000804f, +0.000635f, -0.001634f, +0.000226f, -0.000359f, +0.000095f, +0.000973f, - +0.000696f, +0.000023f, -0.000039f, +0.001004f, +0.000065f, -0.000056f, -0.000291f, +0.000319f, -0.000095f, -0.000662f, - -0.000452f, -0.000025f, -0.000443f, +0.000058f, +0.000071f, +0.000927f, +0.000307f, -0.000094f, -0.000731f, -0.000184f, - -0.000026f, +0.000060f, +0.000030f, -0.000126f, +0.000099f, +0.000106f, +0.000279f, +0.000037f, +0.000237f, +0.000093f, - -0.000073f, +0.000244f, +0.000213f, +0.000027f, -0.000055f, -0.000015f - }, - { - +0.057810f, +0.436435f, +0.051308f, +0.014107f, +0.005564f, +0.000118f, -0.000835f, -0.000601f, +0.001204f, +0.001075f, - +0.001591f, -0.001361f, -0.003916f, -0.003042f, +0.001401f, -0.003196f, -0.004846f, -0.001668f, -0.003116f, -0.001250f, - +0.001072f, +0.000161f, -0.000822f, -0.000823f, -0.000686f, -0.000078f, -0.001430f, -0.000216f, +0.000043f, +0.000119f, - +0.002283f, -0.002187f, +0.001034f, -0.000877f, -0.005109f, +0.000892f, -0.000145f, -0.000519f, -0.002629f, -0.002110f, - +0.000049f, +0.000429f, +0.001074f, -0.002359f, -0.001245f, +0.002470f, +0.001230f, -0.001399f, -0.000228f, -0.002188f, - -0.001223f, -0.001165f, -0.000190f, +0.002137f, +0.001276f, +0.000904f, +0.000625f, -0.001241f, -0.000188f, +0.000447f, - +0.000509f, -0.000000f, -0.000791f, +0.000417f, +0.000355f, +0.000719f, +0.000349f, -0.000706f, +0.000197f, -0.000005f, - -0.000313f, +0.000106f, -0.000191f, -0.000202f, +0.000319f, +0.000335f, +0.000262f, +0.000097f, +0.000272f, +0.000041f, - +0.000129f, -0.000042f, -0.000023f, -0.000151f, -0.000155f, +0.000439f, +0.000087f, +0.000032f, -0.000030f, -0.000099f, - -0.000034f, -0.000066f, -0.000191f, +0.000054f, +0.000057f, +0.000065f - }, - { - -0.000985f, +0.002249f, -0.006865f, +0.003694f, +0.001272f, -0.000702f, -0.000273f, -0.001117f, +0.001089f, -0.000152f, - -0.001890f, +0.002373f, +0.000721f, +0.004195f, +0.017842f, +0.001051f, -0.003587f, -0.006626f, +0.005468f, +0.008410f, - +0.000460f, +0.002518f, -0.005696f, -0.001433f, -0.003812f, +0.002810f, +0.010152f, +0.009790f, -0.003356f, -0.005253f, - +0.005145f, +0.003481f, -0.002489f, +0.000430f, +0.000549f, -0.000763f, +0.001188f, -0.000498f, +0.001397f, -0.000658f, - -0.001310f, -0.000952f, -0.000587f, -0.001685f, -0.001164f, -0.000458f, +0.000302f, +0.000252f, +0.002008f, +0.001797f, - -0.001107f, +0.001689f, +0.001150f, +0.000803f, +0.000641f, +0.001656f, +0.000856f, -0.000497f, -0.000832f, -0.000374f, - +0.000966f, +0.000202f, -0.000660f, -0.000138f, -0.000727f, -0.000581f, +0.000171f, -0.000119f, -0.000571f, +0.000389f, - -0.000299f, -0.000520f, -0.000642f, +0.000133f, -0.000300f, -0.000551f, +0.000151f, +0.000134f, -0.000182f, -0.000079f, - -0.000243f, +0.000120f, +0.000028f, -0.000240f, +0.000271f, +0.000022f, +0.000072f, +0.000005f, +0.000203f, +0.000009f, - -0.000136f, -0.000005f, -0.000079f, -0.000011f, -0.000079f, -0.000134f - }, - { - -0.057317f, -0.067821f, -0.002241f, +0.019892f, +0.000350f, -0.000178f, -0.005695f, -0.002695f, +0.000155f, +0.002778f, - +0.002374f, +0.001326f, +0.002782f, -0.006187f, +0.004876f, +0.004190f, -0.000579f, -0.003251f, -0.004488f, -0.000710f, - +0.000751f, +0.001556f, -0.002333f, +0.000985f, -0.001606f, -0.002425f, -0.000201f, -0.000652f, -0.000620f, +0.003333f, - +0.000799f, +0.000888f, +0.002378f, +0.001146f, -0.001199f, +0.002818f, -0.001273f, +0.001300f, +0.000909f, -0.001123f, - -0.005175f, +0.003253f, -0.001408f, -0.002362f, -0.001277f, +0.000283f, +0.002225f, -0.001346f, -0.002217f, +0.000188f, - +0.001281f, -0.000840f, +0.000665f, -0.001017f, -0.000026f, -0.000069f, -0.000928f, +0.000334f, -0.001174f, -0.000898f, - -0.001190f, +0.000182f, -0.000435f, -0.000229f, -0.000899f, -0.000534f, +0.000291f, +0.000434f, +0.000158f, +0.000154f, - -0.000511f, -0.000493f, -0.000076f, -0.000764f, -0.000030f, +0.000064f, +0.000410f, -0.000134f, -0.000278f, -0.000375f, - +0.000206f, -0.000221f, -0.000224f, -0.000066f, -0.000281f, +0.000090f, +0.000171f, +0.000183f, +0.000045f, +0.000180f, - +0.000063f, +0.000025f, +0.000112f, -0.000055f, +0.000108f, -0.000001f - }, - { - +0.003026f, +0.030860f, +0.005828f, -0.002283f, -0.001860f, -0.001610f, -0.007981f, -0.002237f, +0.000507f, -0.001301f, - +0.001060f, -0.005319f, +0.001401f, +0.003373f, -0.010706f, +0.003765f, +0.002456f, +0.008028f, +0.010761f, +0.002172f, - -0.003533f, +0.001672f, +0.000366f, -0.001263f, +0.004091f, +0.000353f, -0.000510f, -0.003518f, +0.001261f, -0.002125f, - +0.002906f, -0.004099f, +0.003038f, +0.000318f, +0.000655f, +0.001657f, +0.003048f, +0.001193f, +0.003472f, +0.001500f, - +0.001871f, +0.003311f, +0.003389f, -0.001167f, -0.000032f, -0.000394f, +0.000249f, +0.000398f, +0.000140f, +0.000271f, - -0.000738f, +0.000373f, +0.000996f, +0.001829f, -0.000490f, +0.000978f, +0.001031f, +0.000180f, +0.000704f, +0.000934f, - +0.000083f, +0.000451f, -0.000147f, +0.000063f, -0.000543f, -0.000642f, -0.000250f, +0.000061f, +0.000190f, -0.000079f, - +0.000305f, -0.000436f, -0.000395f, +0.000059f, -0.000034f, +0.000072f, +0.000328f, -0.000219f, -0.000203f, +0.000047f, - -0.000009f, -0.000030f, +0.000272f, -0.000103f, -0.000119f, -0.000098f, -0.000259f, -0.000128f, -0.000115f, +0.000143f, - +0.000052f, -0.000050f, -0.000019f, +0.000081f, +0.000037f, +0.000010f - }, - { - -0.024696f, -0.096373f, +0.006055f, -0.001107f, +0.005589f, -0.002824f, +0.004514f, +0.000785f, -0.001338f, -0.001174f, - +0.001717f, +0.005033f, +0.001376f, +0.000221f, -0.001474f, -0.002787f, +0.010179f, +0.003694f, -0.003780f, +0.001856f, - +0.001438f, +0.001510f, +0.003424f, +0.001498f, +0.001965f, +0.001467f, +0.000432f, -0.001164f, +0.000291f, -0.003344f, - -0.002528f, -0.003785f, +0.002163f, +0.002624f, +0.000551f, +0.002611f, +0.001529f, +0.000464f, -0.001094f, +0.003124f, - -0.000102f, -0.000347f, -0.001239f, +0.000936f, -0.001178f, -0.001132f, -0.000406f, -0.001550f, -0.001170f, -0.001008f, - +0.000250f, -0.000209f, +0.000296f, -0.001226f, -0.000036f, -0.000179f, +0.000511f, +0.001743f, +0.000299f, +0.000007f, - -0.000027f, -0.000204f, +0.000399f, +0.000462f, -0.000162f, -0.000066f, +0.000030f, -0.000075f, +0.000356f, -0.000485f, - +0.000042f, -0.000397f, +0.000075f, +0.000433f, +0.000202f, +0.000391f, -0.000364f, -0.000011f, +0.000161f, -0.000047f, - +0.000119f, +0.000261f, -0.000396f, +0.000120f, -0.000115f, +0.000110f, +0.000054f, +0.000026f, -0.000132f, +0.000102f, - -0.000136f, -0.000025f, -0.000167f, -0.000107f, +0.000175f, +0.000047f - }, - { - +0.000879f, +0.021614f, +0.003546f, -0.001102f, +0.003330f, +0.000643f, +0.001125f, +0.001606f, -0.000036f, +0.000187f, - -0.000331f, +0.001569f, +0.014111f, +0.018317f, +0.007521f, +0.000116f, +0.001304f, +0.004223f, -0.000698f, -0.005187f, - -0.001272f, +0.014815f, +0.003547f, -0.000236f, -0.002732f, -0.004061f, +0.002383f, +0.004412f, +0.004754f, +0.007362f, - +0.001388f, -0.000757f, -0.002668f, -0.001332f, -0.001740f, -0.001506f, -0.000789f, +0.000034f, +0.000646f, +0.003176f, - +0.000709f, -0.001931f, -0.000853f, +0.000903f, +0.000533f, -0.000713f, -0.000053f, +0.003125f, -0.000923f, +0.001839f, - +0.001198f, +0.000005f, +0.000552f, +0.000429f, +0.000544f, +0.000307f, +0.000129f, -0.000312f, -0.000318f, -0.000123f, - -0.000949f, +0.000108f, -0.000123f, -0.000407f, -0.001051f, -0.000232f, -0.000421f, -0.000589f, -0.000341f, +0.000197f, - +0.000799f, +0.000186f, -0.000271f, +0.000302f, -0.000299f, +0.000141f, -0.000057f, -0.000257f, -0.000217f, -0.000160f, - +0.000046f, -0.000209f, -0.000050f, +0.000163f, +0.000123f, +0.000111f, -0.000066f, +0.000024f, -0.000029f, -0.000112f, - +0.000065f, -0.000007f, -0.000177f, -0.000121f, -0.000121f, -0.000144f - }, - { - -0.020629f, -0.067501f, -0.009707f, +0.004091f, -0.000891f, +0.003811f, +0.006723f, -0.000579f, -0.000673f, +0.004197f, - +0.003611f, -0.001606f, -0.006462f, +0.008758f, +0.010050f, -0.003553f, +0.000282f, -0.004740f, -0.005899f, +0.002744f, - +0.002221f, -0.001319f, -0.000771f, -0.000614f, +0.001265f, +0.000998f, +0.002400f, +0.000047f, -0.002094f, -0.001534f, - +0.005196f, -0.003219f, -0.001966f, -0.001589f, +0.002176f, +0.000572f, -0.001696f, -0.000769f, +0.003595f, +0.002169f, - +0.000220f, +0.000249f, -0.000190f, -0.004316f, -0.001911f, +0.002623f, -0.000072f, -0.001802f, -0.000826f, -0.000991f, - -0.000093f, -0.000191f, -0.000135f, +0.000278f, +0.001010f, -0.000863f, -0.000284f, +0.000336f, +0.000032f, +0.000137f, - -0.001103f, -0.000429f, +0.000478f, -0.000034f, -0.000249f, -0.000170f, -0.000021f, -0.000136f, -0.000255f, +0.000148f, - -0.000381f, +0.000045f, -0.000261f, +0.000212f, +0.000429f, +0.000183f, -0.000643f, -0.000143f, +0.000214f, +0.000201f, - -0.000608f, +0.000006f, -0.000508f, +0.000121f, +0.000242f, +0.000084f, -0.000233f, -0.000159f, -0.000165f, -0.000176f, - +0.000050f, -0.000077f, +0.000279f, -0.000043f, +0.000148f, +0.000214f - }, - { - -0.000475f, -0.003233f, -0.006720f, -0.005002f, +0.002366f, -0.001042f, -0.002372f, +0.001113f, -0.001634f, -0.000575f, - -0.003391f, -0.003007f, -0.004932f, -0.022877f, +0.056077f, -0.005553f, -0.006002f, +0.002792f, -0.004351f, -0.003989f, - +0.000534f, +0.002039f, +0.004574f, +0.001260f, -0.000126f, -0.006633f, -0.002826f, +0.006058f, +0.004687f, -0.003414f, - -0.002592f, -0.001060f, +0.000185f, -0.001435f, -0.003006f, +0.000173f, +0.001706f, +0.000963f, +0.002349f, +0.000012f, - -0.000593f, -0.000676f, +0.000401f, +0.001684f, -0.000591f, +0.000344f, +0.001896f, -0.000572f, -0.000678f, -0.001528f, - -0.000956f, -0.000327f, -0.000958f, -0.001291f, -0.000403f, -0.000483f, -0.000419f, +0.001133f, -0.000912f, -0.000283f, - +0.000549f, -0.000503f, -0.000307f, +0.000123f, +0.000671f, +0.000215f, +0.000164f, +0.000435f, -0.000027f, +0.000040f, - -0.000390f, +0.000148f, +0.000026f, +0.000051f, -0.000358f, +0.000090f, -0.000249f, +0.000345f, -0.000040f, -0.000062f, - +0.000003f, -0.000250f, -0.000327f, +0.000002f, +0.000056f, +0.000053f, +0.000063f, -0.000110f, -0.000081f, -0.000124f, - +0.000169f, +0.000161f, -0.000062f, +0.000030f, +0.000154f, -0.000164f - }, - { - -0.014971f, -0.089993f, -0.012952f, -0.002355f, +0.006688f, +0.012018f, +0.007861f, +0.002633f, -0.004723f, -0.001832f, - +0.002763f, +0.008486f, +0.002306f, +0.002627f, -0.036012f, +0.004175f, +0.013439f, +0.000839f, -0.002854f, -0.001701f, - -0.000140f, -0.000725f, -0.001627f, -0.001920f, -0.000812f, +0.001177f, +0.000320f, +0.005582f, +0.000202f, -0.002081f, - +0.000045f, +0.002811f, +0.000799f, -0.004633f, -0.001050f, -0.002994f, -0.001427f, -0.001741f, -0.000445f, -0.001810f, - -0.000529f, +0.001724f, -0.000850f, -0.001623f, +0.000935f, +0.000904f, +0.001333f, +0.001572f, +0.001363f, -0.000223f, - +0.001533f, +0.000668f, +0.001044f, +0.000957f, +0.000486f, -0.000061f, +0.000364f, +0.000919f, +0.001030f, -0.000404f, - -0.001121f, -0.000568f, -0.000427f, +0.000322f, +0.000656f, -0.000015f, -0.000001f, -0.000068f, -0.000528f, -0.000107f, - -0.000362f, -0.000531f, +0.000203f, +0.000580f, +0.000326f, -0.000342f, +0.000513f, +0.000238f, -0.000249f, +0.000126f, - -0.000191f, +0.000242f, -0.000362f, -0.000014f, -0.000082f, -0.000030f, -0.000014f, +0.000255f, +0.000099f, +0.000163f, - +0.000283f, +0.000061f, -0.000052f, -0.000137f, +0.000189f, +0.000026f - } - }, - { - { - +0.000569f, +0.011821f, -0.014026f, -0.001390f, +0.001642f, -0.000259f, -0.001026f, +0.000613f, +0.000215f, -0.002792f, - +0.000439f, -0.000130f, -0.001133f, +0.000033f, -0.001963f, +0.001131f, -0.002265f, +0.001728f, +0.000015f, -0.000564f, - +0.002473f, +0.003832f, +0.003199f, -0.000142f, +0.006401f, -0.006788f, -0.002084f, +0.000703f, +0.002145f, -0.006902f, - +0.006184f, +0.002362f, -0.003374f, -0.002157f, -0.001546f, +0.001331f, +0.002288f, -0.002976f, +0.001435f, +0.000411f, - -0.000010f, -0.000513f, -0.000310f, +0.000665f, -0.000493f, +0.000862f, -0.001156f, +0.000940f, +0.000005f, -0.000964f, - +0.000457f, -0.000734f, +0.000014f, +0.000280f, +0.000692f, -0.000366f, +0.000132f, -0.000640f, -0.000471f, -0.000017f, - -0.000933f, +0.000646f, +0.000809f, -0.000103f, +0.000149f, +0.000330f, -0.000047f, +0.000384f, -0.000285f, +0.000307f, - -0.000079f, -0.000069f, +0.000270f, -0.000294f, -0.000107f, +0.000062f, -0.000013f, +0.000232f, +0.000337f, -0.000132f, - +0.000080f, +0.000086f, +0.000011f, -0.000054f, +0.000426f, +0.000028f, -0.000053f, +0.000009f, +0.000068f, -0.000026f, - +0.000060f, +0.000003f, +0.000059f, +0.000120f, -0.000003f, -0.000113f - }, - { - -0.020268f, +0.029939f, +0.010806f, +0.006051f, -0.005559f, -0.002206f, +0.001257f, -0.000527f, -0.003473f, +0.001473f, - -0.005301f, +0.003591f, +0.001929f, -0.000456f, +0.001953f, -0.002111f, -0.005317f, +0.003278f, +0.010856f, -0.002178f, - -0.001748f, +0.001207f, -0.004304f, +0.002451f, +0.001063f, +0.001012f, +0.000612f, -0.001952f, -0.001723f, +0.001504f, - -0.000749f, +0.002321f, +0.000351f, +0.000742f, +0.000233f, +0.001576f, -0.002417f, -0.000145f, -0.001942f, +0.000656f, - -0.001155f, -0.001259f, +0.000010f, +0.001594f, +0.000713f, +0.000364f, -0.000379f, +0.000345f, -0.000431f, -0.000058f, - +0.001090f, -0.000372f, -0.000293f, -0.000360f, +0.000036f, -0.000053f, -0.000539f, +0.000590f, -0.000128f, -0.000524f, - +0.000073f, +0.000542f, -0.000125f, +0.000096f, +0.000251f, -0.000392f, -0.000145f, +0.000391f, +0.000140f, +0.000120f, - -0.000160f, +0.000545f, -0.000156f, -0.000088f, +0.000044f, +0.000097f, +0.000180f, +0.000186f, +0.000203f, -0.000216f, - -0.000209f, +0.000104f, +0.000040f, -0.000079f, -0.000002f, -0.000136f, -0.000105f, +0.000128f, -0.000104f, +0.000145f, - -0.000159f, -0.000009f, +0.000009f, -0.000027f, -0.000080f, -0.000056f - }, - { - +0.006560f, -0.150414f, +0.029082f, -0.015815f, +0.002934f, +0.000459f, +0.000053f, -0.000431f, -0.000825f, -0.000035f, - +0.000765f, +0.000408f, +0.001195f, +0.003867f, -0.005690f, +0.001011f, -0.006373f, -0.001690f, +0.005505f, +0.004067f, - -0.003241f, +0.002105f, +0.002343f, -0.001768f, +0.003910f, +0.001248f, +0.004054f, +0.002143f, -0.002787f, -0.004653f, - +0.001550f, +0.002303f, +0.001888f, -0.000069f, -0.000700f, -0.002422f, +0.001712f, -0.001891f, -0.000691f, -0.000258f, - +0.000914f, +0.000048f, -0.000437f, -0.000021f, +0.000173f, +0.001561f, -0.000327f, +0.000635f, +0.000138f, +0.000605f, - +0.000276f, -0.000080f, +0.000101f, +0.000619f, -0.000212f, +0.000047f, +0.000151f, +0.000429f, -0.000608f, +0.000442f, - -0.001234f, +0.000381f, -0.000444f, +0.000303f, -0.000101f, +0.000428f, +0.000052f, -0.000078f, -0.000356f, +0.000068f, - -0.000064f, -0.000289f, +0.000159f, +0.000101f, +0.000269f, -0.000305f, -0.000077f, +0.000248f, +0.000365f, -0.000134f, - +0.000156f, +0.000142f, +0.000137f, +0.000115f, -0.000189f, -0.000153f, -0.000107f, -0.000094f, +0.000149f, +0.000085f, - -0.000179f, +0.000117f, -0.000063f, +0.000048f, -0.000068f, +0.000015f - }, - { - -0.001430f, +0.009794f, -0.000474f, +0.000352f, -0.000116f, -0.000532f, +0.000524f, +0.000378f, -0.000484f, +0.000171f, - -0.000301f, -0.001223f, +0.003287f, -0.006063f, -0.004144f, -0.006175f, +0.000085f, +0.002051f, -0.003255f, +0.002121f, - +0.000206f, -0.000447f, +0.002464f, -0.001608f, +0.001534f, -0.003713f, -0.000486f, +0.002642f, +0.001653f, +0.000864f, - -0.000531f, +0.001333f, +0.001257f, +0.000862f, +0.001018f, -0.000220f, +0.000667f, -0.001623f, +0.000363f, +0.001264f, - +0.000860f, +0.000013f, +0.001456f, -0.000105f, +0.000214f, -0.000094f, +0.000279f, -0.000666f, -0.000643f, +0.001699f, - -0.000552f, -0.000725f, +0.001187f, -0.000780f, -0.000385f, -0.000001f, -0.000175f, -0.000410f, +0.000183f, +0.000327f, - -0.000628f, -0.000070f, -0.000302f, -0.000317f, -0.000156f, +0.000021f, -0.000280f, +0.000032f, -0.000277f, +0.000194f, - -0.000134f, -0.000351f, +0.000025f, -0.000032f, +0.000388f, -0.000185f, +0.000021f, +0.000033f, +0.000153f, +0.000149f, - -0.000024f, +0.000030f, +0.000133f, +0.000063f, +0.000131f, +0.000015f, -0.000081f, -0.000098f, +0.000007f, -0.000014f, - -0.000056f, -0.000050f, +0.000019f, +0.000078f, -0.000061f, +0.000145f - }, - { - -0.009536f, +0.140766f, -0.004172f, -0.008758f, -0.000715f, +0.000288f, +0.000480f, +0.002569f, +0.000850f, -0.000060f, - -0.001420f, -0.003909f, +0.000293f, -0.000381f, +0.004909f, +0.001261f, +0.003515f, +0.000843f, -0.000807f, -0.002021f, - +0.001473f, +0.001355f, +0.000104f, -0.001717f, -0.003119f, -0.000902f, +0.001203f, +0.002017f, -0.002739f, -0.000732f, - +0.001147f, -0.001535f, +0.000395f, +0.000003f, +0.002093f, -0.002642f, -0.001026f, -0.000186f, +0.000381f, +0.000756f, - -0.000810f, -0.001616f, +0.000164f, -0.000322f, +0.002252f, -0.000129f, +0.000816f, +0.000250f, -0.000605f, +0.000800f, - +0.000797f, -0.000581f, -0.000708f, +0.001176f, +0.000432f, -0.000023f, -0.000257f, +0.000164f, +0.000182f, -0.000090f, - -0.000274f, +0.000211f, -0.000149f, +0.000400f, -0.000167f, +0.000347f, -0.000661f, -0.000230f, -0.000127f, -0.000267f, - -0.000051f, -0.000094f, -0.000131f, -0.000340f, -0.000107f, +0.000063f, -0.000088f, +0.000149f, +0.000031f, +0.000017f, - +0.000139f, +0.000035f, -0.000289f, -0.000039f, +0.000083f, -0.000156f, +0.000056f, +0.000067f, -0.000195f, +0.000170f, - -0.000158f, +0.000095f, -0.000078f, +0.000075f, -0.000132f, +0.000102f - }, - { - -0.000700f, +0.003701f, +0.006645f, +0.000411f, -0.000576f, -0.000637f, +0.000177f, -0.000126f, -0.000969f, +0.000152f, - +0.001088f, -0.000455f, -0.000919f, -0.003233f, +0.000931f, -0.003790f, +0.009220f, -0.003759f, +0.006487f, -0.033194f, - +0.005903f, -0.003102f, +0.005380f, -0.001190f, +0.003126f, +0.000992f, +0.001620f, -0.000724f, -0.000429f, -0.001664f, - -0.001447f, +0.001501f, -0.003632f, -0.001224f, +0.000986f, +0.000584f, +0.001125f, +0.001342f, +0.000287f, -0.000330f, - -0.000860f, +0.000069f, -0.001777f, -0.000681f, -0.000260f, +0.000652f, +0.000240f, +0.000778f, -0.000068f, -0.000193f, - -0.000458f, -0.000526f, +0.000295f, -0.000585f, -0.000063f, -0.000235f, +0.000813f, -0.000700f, +0.000197f, +0.000234f, - +0.000182f, -0.000228f, -0.000398f, +0.000500f, -0.000367f, -0.000046f, -0.000133f, -0.000071f, -0.000192f, -0.000146f, - -0.000196f, +0.000435f, +0.000088f, +0.000023f, -0.000307f, +0.000272f, +0.000058f, +0.000162f, -0.000261f, +0.000170f, - -0.000222f, +0.000070f, -0.000075f, -0.000060f, +0.000018f, -0.000094f, +0.000034f, -0.000062f, -0.000010f, +0.000122f, - -0.000123f, -0.000063f, -0.000105f, +0.000023f, -0.000031f, -0.000008f - }, - { - -0.059982f, +0.191282f, -0.014337f, +0.004649f, +0.000433f, +0.000559f, -0.000477f, +0.000871f, +0.001976f, -0.000403f, - +0.000141f, -0.000894f, -0.002455f, -0.002233f, -0.000186f, +0.000900f, -0.001390f, +0.000659f, +0.001631f, -0.000079f, - +0.000905f, +0.000342f, +0.000416f, +0.000550f, -0.000564f, +0.000693f, -0.000167f, +0.000512f, -0.000111f, -0.002155f, - +0.000340f, -0.003211f, -0.000155f, +0.001098f, -0.000680f, +0.004231f, -0.000018f, -0.001287f, -0.001356f, +0.000117f, - +0.000121f, -0.001421f, +0.002043f, -0.001032f, -0.001146f, +0.002295f, +0.000083f, -0.002106f, +0.000603f, -0.000106f, - +0.000096f, -0.000630f, -0.001152f, +0.000891f, +0.000003f, -0.000861f, +0.000347f, -0.000530f, -0.000014f, +0.000516f, - +0.000163f, +0.000169f, -0.000469f, +0.000066f, -0.000103f, +0.000107f, +0.000215f, +0.000026f, -0.000043f, +0.000212f, - +0.000330f, -0.000034f, -0.000323f, +0.000180f, +0.000311f, +0.000078f, -0.000134f, -0.000163f, +0.000046f, -0.000127f, - +0.000284f, -0.000040f, +0.000027f, +0.000136f, -0.000054f, +0.000060f, -0.000078f, +0.000151f, +0.000015f, -0.000076f, - -0.000025f, -0.000021f, -0.000128f, +0.000104f, -0.000051f, +0.000006f - }, - { - -0.000846f, +0.008629f, -0.002235f, +0.000998f, +0.001004f, -0.000509f, +0.000992f, -0.000205f, -0.000071f, +0.000611f, - -0.000753f, +0.000885f, -0.002605f, -0.001812f, +0.003451f, -0.005568f, -0.002122f, -0.006673f, +0.002071f, +0.004809f, - -0.002772f, -0.002961f, -0.002162f, +0.001702f, -0.001602f, +0.003736f, +0.001262f, +0.001470f, -0.002371f, -0.002825f, - +0.003261f, +0.001629f, -0.003396f, +0.000245f, +0.000344f, -0.001337f, +0.001990f, +0.000288f, +0.000759f, -0.000593f, - -0.001117f, -0.000677f, +0.000885f, -0.000510f, -0.000511f, +0.000145f, -0.000114f, +0.001192f, +0.000744f, +0.000273f, - -0.001039f, +0.001453f, -0.000100f, -0.000435f, -0.000372f, +0.000288f, +0.000058f, +0.000063f, +0.000430f, -0.000154f, - +0.000387f, -0.000038f, -0.000053f, +0.000366f, +0.000084f, -0.000305f, -0.000351f, -0.000118f, +0.000081f, +0.000007f, - -0.000033f, +0.000325f, -0.000209f, +0.000214f, -0.000248f, -0.000282f, +0.000021f, +0.000159f, -0.000081f, +0.000010f, - +0.000165f, -0.000108f, +0.000040f, -0.000359f, -0.000027f, -0.000050f, -0.000033f, +0.000116f, +0.000007f, -0.000105f, - +0.000041f, -0.000031f, -0.000067f, +0.000005f, -0.000017f, +0.000062f - }, - { - +0.035394f, +0.046217f, -0.014230f, +0.010605f, -0.001482f, +0.001370f, -0.001165f, +0.000568f, -0.001231f, +0.000869f, - +0.000535f, -0.003425f, -0.000250f, -0.009582f, +0.006532f, -0.000725f, -0.000782f, +0.003688f, -0.001775f, -0.000722f, - +0.001479f, +0.001735f, -0.003732f, +0.002755f, +0.001115f, -0.000996f, +0.001504f, +0.001767f, -0.001047f, +0.001722f, - -0.000715f, -0.000124f, +0.001364f, +0.001097f, -0.001521f, +0.001357f, -0.001281f, -0.000064f, +0.000215f, +0.001045f, - -0.004820f, +0.002344f, -0.000264f, -0.001421f, -0.000651f, -0.001812f, +0.001119f, +0.001559f, -0.000046f, -0.000997f, - +0.000050f, -0.000849f, +0.001046f, -0.000517f, +0.000778f, +0.001150f, -0.000637f, +0.000076f, -0.000405f, +0.000316f, - -0.000688f, +0.000338f, -0.000449f, +0.000028f, -0.000308f, -0.000578f, +0.000259f, +0.000594f, +0.000012f, -0.000183f, - -0.000229f, +0.000082f, +0.000285f, -0.000382f, +0.000203f, +0.000425f, +0.000020f, -0.000006f, +0.000118f, +0.000028f, - +0.000087f, -0.000123f, +0.000061f, +0.000093f, -0.000148f, -0.000156f, -0.000072f, +0.000204f, +0.000044f, +0.000092f, - +0.000071f, -0.000018f, +0.000025f, -0.000238f, +0.000209f, +0.000003f - }, - { - -0.002257f, +0.018403f, -0.004632f, +0.001627f, +0.000875f, +0.001574f, +0.005601f, +0.001454f, +0.000018f, -0.000473f, - +0.004635f, -0.001346f, +0.001592f, +0.000967f, -0.012601f, +0.004963f, -0.003877f, +0.001308f, +0.004375f, +0.001787f, - -0.000924f, +0.003900f, -0.002769f, -0.002750f, +0.000896f, -0.000110f, -0.000707f, -0.001858f, +0.000279f, -0.003372f, - +0.005478f, -0.004343f, +0.000832f, -0.000172f, +0.000037f, +0.000504f, -0.000108f, -0.001010f, +0.002511f, -0.000262f, - -0.000113f, +0.000173f, +0.001382f, -0.000859f, -0.000621f, +0.000403f, +0.000073f, +0.001254f, -0.000173f, -0.000779f, - -0.000301f, +0.000274f, -0.000060f, +0.000520f, -0.000436f, +0.000076f, +0.000522f, -0.000477f, -0.000286f, +0.000224f, - -0.000160f, +0.000022f, -0.000357f, -0.000088f, -0.000023f, -0.000081f, -0.000056f, -0.000032f, +0.000048f, +0.000233f, - +0.000487f, -0.000190f, -0.000000f, -0.000226f, -0.000046f, +0.000163f, +0.000080f, -0.000154f, -0.000055f, -0.000132f, - +0.000069f, +0.000000f, +0.000146f, -0.000026f, +0.000079f, +0.000095f, -0.000105f, -0.000034f, -0.000022f, +0.000012f, - +0.000067f, -0.000057f, -0.000001f, +0.000002f, +0.000074f, +0.000063f - }, - { - +0.019898f, -0.040251f, -0.000171f, -0.006664f, +0.001249f, -0.006408f, +0.004445f, +0.001775f, +0.001646f, -0.000014f, - -0.000457f, +0.002785f, +0.000404f, -0.000092f, +0.003008f, +0.002467f, +0.013502f, +0.004233f, -0.002118f, +0.000877f, - -0.000130f, -0.000425f, +0.001184f, -0.001594f, +0.001802f, -0.000049f, +0.001720f, -0.001755f, -0.001526f, -0.000796f, - +0.001325f, -0.000034f, -0.000014f, -0.000259f, +0.000812f, +0.001705f, -0.000965f, +0.001204f, -0.000010f, +0.001717f, - -0.000083f, +0.001766f, -0.000943f, +0.001303f, -0.000072f, +0.000282f, +0.000475f, -0.000057f, +0.000806f, -0.000730f, - +0.000233f, -0.000773f, -0.000012f, +0.000246f, +0.000217f, -0.000459f, -0.000690f, +0.000608f, +0.000387f, +0.000181f, - -0.000008f, +0.000245f, +0.000177f, -0.000050f, +0.000074f, +0.000169f, +0.000117f, +0.000061f, +0.000360f, -0.000037f, - +0.000254f, -0.000342f, -0.000099f, +0.000284f, +0.000027f, +0.000007f, -0.000140f, +0.000139f, -0.000012f, +0.000041f, - -0.000049f, +0.000183f, -0.000132f, +0.000004f, +0.000030f, +0.000003f, +0.000054f, +0.000006f, -0.000004f, +0.000059f, - -0.000104f, +0.000065f, -0.000016f, -0.000057f, -0.000017f, +0.000001f - }, - { - -0.000144f, +0.013611f, -0.003714f, -0.003439f, +0.001551f, +0.001440f, -0.000459f, -0.000306f, +0.000183f, +0.001388f, - +0.000258f, +0.002359f, -0.000623f, -0.009659f, +0.005320f, -0.001355f, -0.001734f, -0.000377f, +0.000050f, -0.002754f, - -0.003475f, -0.000546f, +0.000579f, +0.001969f, +0.001854f, -0.000517f, -0.001405f, +0.002439f, +0.000543f, +0.002322f, - +0.001095f, -0.002115f, -0.000082f, +0.000675f, -0.000482f, -0.000690f, +0.000427f, -0.000349f, -0.000138f, +0.001195f, - +0.000706f, -0.000571f, -0.000827f, +0.001007f, +0.000466f, -0.001021f, -0.000906f, +0.000677f, -0.001776f, +0.000383f, - +0.000236f, +0.000113f, +0.000400f, +0.000422f, -0.000073f, +0.000052f, +0.000281f, -0.000447f, -0.000986f, +0.000132f, - -0.001189f, +0.000478f, +0.000578f, +0.000356f, -0.000784f, -0.000218f, +0.000313f, -0.000389f, -0.000162f, -0.000271f, - -0.000150f, -0.000284f, -0.000154f, +0.000384f, -0.000356f, +0.000183f, +0.000186f, +0.000052f, +0.000055f, +0.000050f, - -0.000099f, +0.000002f, +0.000043f, -0.000049f, -0.000134f, +0.000009f, -0.000064f, -0.000087f, +0.000056f, -0.000109f, - -0.000065f, -0.000025f, -0.000002f, +0.000120f, -0.000093f, +0.000010f - }, - { - +0.013729f, -0.005983f, +0.001946f, +0.010148f, -0.006372f, +0.001177f, +0.008604f, -0.001777f, +0.000370f, -0.000595f, - +0.000112f, -0.001902f, +0.001441f, +0.020342f, +0.005488f, -0.004566f, +0.000341f, -0.000303f, -0.001343f, +0.000362f, - +0.003315f, -0.001588f, -0.001686f, -0.001035f, +0.000991f, -0.002055f, -0.000971f, -0.000574f, +0.001245f, +0.000897f, - +0.002805f, -0.002105f, +0.002370f, -0.000400f, -0.000768f, -0.000657f, +0.000553f, +0.000150f, +0.000915f, +0.000552f, - -0.001474f, +0.000090f, +0.000808f, -0.002122f, -0.002037f, +0.000738f, -0.000620f, -0.000238f, -0.000456f, -0.000274f, - +0.000704f, +0.000079f, +0.000382f, +0.000326f, +0.001134f, +0.000141f, -0.000395f, +0.000162f, +0.000033f, +0.000114f, - +0.000131f, -0.000058f, +0.000773f, -0.000242f, +0.000303f, +0.000314f, -0.000195f, +0.000046f, +0.000119f, +0.000338f, - -0.000016f, +0.000139f, +0.000032f, +0.000249f, -0.000190f, -0.000041f, -0.000177f, -0.000249f, +0.000145f, +0.000172f, - +0.000037f, +0.000277f, -0.000232f, -0.000073f, -0.000057f, +0.000182f, -0.000093f, -0.000166f, -0.000031f, +0.000002f, - +0.000138f, -0.000010f, +0.000125f, +0.000060f, +0.000008f, +0.000087f - }, - { - +0.000551f, +0.004337f, +0.000555f, -0.002530f, +0.002796f, +0.000029f, -0.000963f, -0.000298f, -0.000930f, +0.000711f, - -0.000832f, +0.002581f, -0.003666f, -0.013083f, +0.077420f, -0.002589f, -0.004499f, -0.000197f, -0.002396f, -0.004337f, - -0.006781f, -0.003285f, +0.003366f, +0.000320f, +0.001634f, -0.004469f, +0.001686f, +0.000111f, +0.000542f, -0.000494f, - +0.000162f, +0.002059f, +0.001304f, +0.000002f, +0.000800f, +0.000052f, +0.001761f, +0.000028f, -0.000450f, +0.000929f, - -0.000688f, -0.000094f, +0.000889f, +0.000166f, -0.000871f, +0.000470f, +0.000582f, +0.000391f, -0.000296f, -0.000178f, - -0.000199f, +0.000605f, -0.000103f, -0.000931f, +0.000720f, +0.000667f, -0.000608f, +0.000623f, -0.000774f, -0.000029f, - +0.000563f, -0.000153f, -0.000274f, -0.000174f, +0.000136f, +0.000041f, -0.000631f, -0.000108f, -0.000053f, +0.000069f, - +0.000060f, +0.000385f, -0.000256f, +0.000651f, +0.000039f, +0.000016f, -0.000086f, +0.000063f, -0.000116f, -0.000048f, - +0.000096f, +0.000100f, -0.000073f, -0.000022f, +0.000092f, -0.000117f, -0.000083f, -0.000169f, +0.000180f, -0.000097f, - +0.000110f, +0.000115f, -0.000005f, -0.000048f, +0.000096f, -0.000064f - }, - { - +0.016168f, -0.035344f, +0.002678f, +0.009884f, +0.001426f, -0.001356f, +0.005031f, +0.004005f, -0.001749f, -0.000682f, - -0.000763f, +0.008610f, -0.003043f, +0.009263f, -0.020696f, -0.001624f, +0.005235f, -0.000515f, +0.001421f, +0.001313f, - -0.000364f, +0.000034f, +0.001058f, -0.000377f, +0.000102f, +0.001141f, -0.001965f, +0.001483f, -0.001338f, -0.003346f, - -0.000498f, +0.000724f, +0.000128f, -0.002018f, +0.001121f, -0.000028f, +0.000421f, -0.001074f, +0.000779f, -0.000343f, - +0.000069f, -0.000054f, -0.000678f, -0.001284f, -0.000078f, +0.000367f, -0.000594f, -0.000714f, +0.001083f, -0.000174f, - +0.000927f, -0.000971f, -0.000288f, +0.000625f, +0.000510f, +0.000105f, -0.000137f, +0.000510f, +0.000838f, -0.000472f, - -0.000090f, +0.000382f, -0.000179f, -0.000069f, +0.000178f, -0.000206f, -0.000186f, -0.000100f, -0.000341f, -0.000029f, - -0.000022f, -0.000135f, +0.000069f, +0.000187f, +0.000291f, -0.000171f, +0.000207f, -0.000118f, -0.000137f, +0.000166f, - -0.000180f, +0.000179f, -0.000138f, -0.000019f, -0.000131f, +0.000039f, +0.000103f, +0.000010f, +0.000132f, -0.000051f, - +0.000110f, +0.000003f, -0.000125f, -0.000022f, +0.000114f, +0.000004f - } - }, - { - { - -0.002966f, -0.017605f, +0.008481f, +0.003496f, +0.000874f, -0.001711f, -0.001170f, -0.000787f, +0.000672f, -0.001703f, - -0.001305f, +0.000937f, +0.000523f, +0.000894f, +0.000363f, +0.002069f, -0.003639f, +0.001123f, +0.002264f, -0.000335f, - +0.003180f, +0.000641f, +0.001467f, +0.003907f, +0.000066f, +0.000347f, -0.002326f, -0.000697f, -0.002506f, -0.002028f, - +0.002441f, +0.002086f, -0.003933f, -0.001028f, -0.000303f, -0.000183f, +0.000466f, +0.000686f, +0.002289f, -0.000377f, - +0.000286f, -0.000143f, -0.000128f, -0.000098f, +0.000873f, +0.000217f, +0.000217f, +0.000307f, -0.000702f, -0.000116f, - +0.000324f, -0.000659f, -0.000464f, -0.000070f, -0.000162f, +0.000516f, -0.000003f, +0.000113f, +0.000057f, -0.001006f, - -0.000227f, +0.000190f, +0.000174f, +0.000451f, +0.000001f, +0.000165f, -0.000079f, +0.000020f, -0.000239f, -0.000034f, - +0.000228f, +0.000063f, +0.000050f, -0.000178f, -0.000151f, +0.000222f, +0.000028f, +0.000012f, -0.000065f, +0.000094f, - +0.000079f, -0.000002f, -0.000104f, +0.000035f, +0.000143f, +0.000091f, -0.000006f, -0.000046f, +0.000049f, +0.000117f, - +0.000020f, -0.000030f, +0.000082f, +0.000101f, +0.000002f, -0.000010f - }, - { - +0.017437f, +0.012091f, -0.014694f, -0.000791f, +0.002262f, -0.001181f, +0.000971f, +0.000361f, +0.000358f, -0.002912f, - -0.001762f, +0.000516f, +0.000411f, +0.000543f, +0.002389f, -0.002258f, -0.001132f, +0.006248f, +0.004654f, -0.000238f, - -0.001784f, +0.000545f, -0.001771f, +0.000719f, +0.000618f, -0.000391f, +0.000758f, -0.001064f, -0.001008f, -0.000517f, - +0.001519f, +0.001047f, -0.000225f, +0.000933f, -0.000919f, +0.002573f, -0.001746f, -0.002036f, +0.000606f, +0.000607f, - -0.001523f, +0.000142f, -0.000278f, +0.000195f, +0.000937f, +0.000646f, +0.000840f, -0.000226f, +0.000485f, -0.000187f, - +0.000665f, -0.000820f, -0.000722f, -0.000387f, -0.000074f, -0.000158f, -0.000154f, +0.000412f, -0.000634f, -0.000338f, - -0.000188f, +0.000114f, +0.000250f, +0.000103f, +0.000039f, +0.000011f, -0.000092f, -0.000044f, +0.000114f, -0.000016f, - +0.000004f, +0.000342f, -0.000016f, -0.000413f, +0.000353f, +0.000171f, -0.000007f, +0.000340f, -0.000030f, -0.000193f, - -0.000019f, -0.000043f, -0.000131f, -0.000046f, -0.000045f, +0.000098f, -0.000089f, -0.000018f, -0.000012f, -0.000055f, - -0.000058f, -0.000087f, -0.000010f, -0.000043f, -0.000016f, -0.000042f - }, - { - +0.001229f, -0.096815f, -0.000442f, -0.022560f, -0.002445f, +0.001439f, -0.001035f, -0.000019f, -0.000375f, +0.002593f, - +0.000845f, +0.002923f, -0.001895f, +0.002189f, -0.001394f, -0.001697f, -0.006199f, +0.000830f, +0.003004f, -0.001153f, - +0.002478f, -0.001618f, +0.001059f, +0.000092f, +0.004380f, +0.002173f, +0.001282f, +0.000780f, -0.003247f, -0.001651f, - +0.001859f, +0.002551f, +0.001412f, +0.000989f, -0.000832f, -0.001512f, +0.001678f, -0.002755f, -0.000891f, -0.000097f, - +0.001129f, -0.001119f, -0.000441f, -0.000282f, -0.000660f, +0.001588f, +0.000830f, -0.000335f, -0.000494f, +0.000904f, - +0.000245f, +0.000441f, -0.000717f, +0.000493f, +0.000734f, -0.000207f, -0.000763f, +0.000026f, +0.000277f, -0.000111f, - -0.000588f, -0.000326f, +0.000101f, -0.000342f, -0.000389f, +0.000314f, +0.000062f, +0.000039f, -0.000200f, -0.000048f, - -0.000241f, -0.000369f, +0.000141f, +0.000138f, +0.000055f, -0.000224f, -0.000032f, +0.000203f, +0.000248f, +0.000080f, - +0.000125f, +0.000051f, -0.000044f, +0.000108f, +0.000102f, -0.000128f, +0.000001f, +0.000037f, +0.000055f, +0.000077f, - -0.000116f, +0.000023f, -0.000015f, -0.000017f, -0.000064f, +0.000069f - }, - { - +0.000906f, +0.007223f, -0.000160f, -0.001399f, -0.000095f, +0.000066f, +0.000064f, +0.000062f, +0.000124f, +0.000121f, - +0.000041f, +0.000155f, +0.000498f, -0.004133f, -0.009944f, +0.005677f, -0.001615f, -0.003731f, +0.003320f, +0.001494f, - +0.000061f, +0.000853f, +0.001537f, -0.000274f, -0.003116f, -0.000812f, +0.000546f, +0.001676f, +0.000719f, +0.001247f, - +0.000127f, +0.001598f, +0.000969f, +0.000332f, +0.000949f, +0.000598f, +0.000393f, -0.001894f, -0.000572f, +0.001268f, - +0.000745f, +0.000709f, +0.000088f, +0.000150f, -0.000016f, -0.000438f, +0.000447f, -0.000758f, -0.000021f, +0.000377f, - +0.001000f, -0.000540f, -0.000104f, -0.000178f, -0.000740f, -0.000032f, +0.000081f, -0.000359f, -0.000067f, +0.000598f, - -0.000249f, +0.000151f, -0.000025f, -0.000619f, -0.000303f, +0.000305f, -0.000087f, -0.000459f, -0.000161f, +0.000107f, - +0.000164f, +0.000035f, -0.000092f, +0.000090f, +0.000126f, -0.000072f, -0.000095f, -0.000071f, +0.000079f, +0.000080f, - +0.000047f, +0.000077f, +0.000041f, +0.000129f, +0.000088f, +0.000135f, -0.000098f, -0.000112f, +0.000011f, -0.000105f, - +0.000050f, -0.000039f, -0.000043f, +0.000007f, +0.000001f, -0.000037f - }, - { - +0.021105f, +0.086112f, +0.005885f, -0.003986f, -0.000094f, -0.000152f, +0.000335f, +0.001965f, +0.001875f, -0.000121f, - -0.003610f, -0.003297f, +0.000662f, -0.001034f, +0.005494f, +0.001111f, -0.002036f, +0.007784f, +0.001795f, -0.000256f, - +0.000850f, +0.001760f, -0.002205f, +0.000176f, -0.000905f, -0.001027f, +0.001731f, -0.001383f, -0.000885f, -0.000744f, - +0.000877f, +0.000391f, -0.000280f, -0.000819f, +0.000415f, -0.000985f, +0.001046f, -0.000243f, +0.000778f, +0.000853f, - +0.000232f, -0.001537f, -0.000900f, +0.001768f, +0.000350f, +0.000211f, +0.000846f, -0.000479f, +0.000067f, +0.000620f, - -0.000526f, -0.000368f, -0.000285f, +0.001052f, -0.000371f, -0.000401f, +0.000328f, +0.000555f, -0.000258f, -0.000077f, - +0.000195f, +0.000167f, -0.000565f, +0.000433f, -0.000170f, -0.000128f, +0.000182f, -0.000379f, -0.000374f, -0.000399f, - +0.000110f, -0.000009f, +0.000136f, -0.000276f, -0.000203f, +0.000134f, -0.000238f, +0.000203f, -0.000024f, -0.000094f, - -0.000000f, +0.000025f, -0.000252f, +0.000065f, +0.000083f, -0.000099f, -0.000047f, +0.000137f, -0.000108f, +0.000007f, - +0.000005f, -0.000012f, +0.000014f, +0.000054f, -0.000054f, +0.000035f - }, - { - -0.000083f, +0.005616f, +0.002323f, +0.000475f, -0.000297f, +0.000040f, -0.000672f, -0.000181f, -0.000699f, +0.000464f, - +0.000326f, +0.000177f, +0.000678f, -0.000785f, +0.002554f, -0.000444f, +0.000303f, +0.001997f, -0.002400f, -0.027170f, - +0.005400f, +0.000757f, +0.001252f, +0.006137f, +0.000929f, +0.000991f, +0.002020f, -0.001928f, +0.000424f, -0.003062f, - +0.001154f, -0.000660f, -0.002308f, -0.001985f, +0.001224f, +0.000108f, +0.001117f, +0.000414f, +0.000698f, -0.000360f, - -0.000885f, +0.000042f, -0.002029f, -0.000570f, -0.000763f, +0.000338f, +0.000004f, +0.000751f, +0.000549f, -0.000872f, - +0.000323f, -0.001068f, +0.000544f, -0.000092f, -0.000190f, +0.000129f, -0.000216f, +0.000053f, -0.000148f, +0.000051f, - +0.000373f, -0.000333f, +0.000021f, +0.000194f, -0.000439f, -0.000005f, +0.000123f, -0.000045f, -0.000009f, +0.000175f, - -0.000028f, +0.000047f, +0.000214f, -0.000113f, -0.000190f, +0.000026f, -0.000116f, -0.000052f, +0.000040f, +0.000025f, - -0.000149f, +0.000033f, -0.000031f, -0.000026f, +0.000083f, -0.000046f, -0.000085f, -0.000061f, -0.000072f, -0.000066f, - +0.000142f, -0.000042f, -0.000204f, -0.000045f, -0.000028f, -0.000041f - }, - { - +0.046170f, +0.013052f, +0.000054f, +0.006919f, +0.000018f, -0.000157f, +0.000484f, +0.000663f, +0.000089f, -0.000438f, - +0.000866f, -0.000128f, -0.001332f, -0.000638f, -0.002148f, +0.000860f, -0.000584f, +0.000746f, +0.001540f, +0.000742f, - +0.000978f, +0.001094f, +0.001009f, +0.000296f, -0.001022f, +0.000743f, -0.000840f, +0.000621f, +0.000412f, -0.001345f, - -0.000732f, -0.002300f, -0.000570f, +0.000296f, +0.000490f, +0.001406f, +0.001615f, -0.002198f, -0.000256f, +0.000674f, - +0.000114f, -0.000947f, +0.000115f, +0.000623f, -0.000006f, +0.000440f, +0.000556f, -0.001244f, +0.000805f, +0.000283f, - -0.000058f, -0.000493f, -0.000344f, +0.000228f, -0.000059f, -0.001099f, -0.000174f, -0.000021f, -0.000085f, -0.000043f, - +0.000146f, +0.000141f, -0.000154f, +0.000021f, +0.000023f, -0.000367f, -0.000204f, +0.000370f, -0.000039f, +0.000266f, - +0.000100f, +0.000379f, -0.000313f, -0.000102f, +0.000300f, +0.000086f, -0.000064f, -0.000215f, +0.000040f, +0.000038f, - +0.000150f, -0.000025f, -0.000092f, +0.000014f, +0.000085f, -0.000126f, -0.000037f, +0.000162f, +0.000118f, -0.000007f, - -0.000081f, -0.000041f, +0.000055f, +0.000101f, +0.000014f, -0.000073f - }, - { - +0.000633f, +0.000509f, +0.001573f, -0.000804f, +0.000929f, +0.000242f, +0.000310f, +0.000719f, -0.000945f, -0.000160f, - +0.000372f, +0.000646f, -0.001509f, -0.001397f, -0.005074f, +0.000567f, +0.000651f, +0.002340f, -0.001488f, +0.001725f, - -0.002290f, -0.000776f, +0.002103f, -0.000367f, -0.000848f, +0.002602f, +0.001597f, -0.002338f, -0.003419f, +0.002038f, - -0.001537f, +0.000967f, -0.001563f, -0.000526f, +0.000882f, -0.000328f, -0.000712f, +0.001833f, +0.000309f, -0.000794f, - -0.000782f, -0.000509f, +0.000436f, +0.000657f, -0.000398f, +0.000445f, -0.000681f, +0.001292f, +0.000901f, -0.000001f, - -0.000326f, +0.000085f, +0.000287f, -0.000349f, -0.000493f, -0.000592f, -0.000596f, +0.000677f, +0.000599f, -0.000066f, - +0.000147f, -0.000248f, +0.000606f, -0.000202f, +0.000136f, -0.000032f, -0.000206f, -0.000025f, +0.000257f, -0.000195f, - +0.000021f, +0.000067f, -0.000013f, +0.000337f, -0.000248f, -0.000200f, -0.000005f, -0.000066f, -0.000119f, -0.000059f, - +0.000140f, +0.000047f, +0.000005f, -0.000085f, -0.000234f, +0.000008f, -0.000055f, -0.000001f, -0.000037f, -0.000121f, - +0.000021f, -0.000035f, -0.000099f, +0.000012f, +0.000014f, +0.000057f - }, - { - -0.012511f, +0.101740f, +0.001025f, +0.003861f, +0.002297f, -0.000859f, +0.000406f, +0.000432f, -0.000090f, -0.000318f, - -0.001217f, +0.000027f, -0.000451f, -0.004351f, +0.001701f, -0.000719f, +0.000697f, +0.001712f, -0.000734f, -0.001295f, - +0.000668f, +0.000992f, -0.000161f, +0.000867f, +0.001012f, -0.000434f, +0.000315f, +0.003364f, -0.001606f, -0.000298f, - -0.000170f, +0.001067f, -0.000955f, +0.000548f, -0.000737f, +0.000378f, +0.001413f, +0.000819f, -0.002109f, +0.000269f, - -0.001981f, +0.000502f, -0.001109f, -0.000360f, +0.000000f, -0.001379f, -0.001239f, +0.001740f, +0.001231f, -0.000196f, - -0.000934f, -0.000943f, +0.000594f, +0.000255f, +0.000389f, +0.000870f, +0.000101f, -0.000019f, +0.000187f, +0.000199f, - -0.000393f, -0.000007f, -0.000081f, -0.000339f, +0.000179f, +0.000018f, +0.000085f, +0.000055f, +0.000089f, -0.000070f, - -0.000056f, +0.000061f, +0.000037f, -0.000027f, +0.000249f, +0.000256f, +0.000037f, -0.000020f, +0.000130f, +0.000172f, - -0.000075f, -0.000011f, +0.000116f, +0.000145f, +0.000040f, -0.000090f, -0.000091f, +0.000075f, -0.000070f, +0.000051f, - +0.000056f, -0.000015f, +0.000009f, -0.000126f, +0.000040f, +0.000037f - }, - { - +0.001506f, +0.008673f, -0.008098f, +0.002980f, +0.005426f, -0.000807f, +0.007645f, +0.002003f, +0.000263f, +0.001547f, - +0.001570f, +0.000828f, +0.000651f, +0.001328f, -0.009727f, +0.000772f, -0.001783f, +0.001836f, -0.003174f, +0.005679f, - +0.001659f, +0.002923f, -0.002027f, -0.002287f, -0.001629f, -0.000319f, -0.001418f, +0.000332f, -0.000305f, -0.001751f, - +0.001809f, +0.000673f, -0.001505f, -0.000122f, +0.000041f, +0.000633f, -0.002110f, -0.000545f, +0.000317f, -0.000011f, - +0.000478f, -0.000853f, -0.000451f, +0.000654f, -0.000434f, +0.000467f, +0.000031f, +0.000480f, +0.000279f, -0.000315f, - -0.000683f, +0.000532f, -0.000270f, -0.000589f, +0.000556f, +0.000020f, -0.000216f, -0.000265f, -0.000470f, -0.000076f, - +0.000109f, -0.000367f, +0.000220f, -0.000140f, +0.000129f, +0.000341f, -0.000118f, -0.000184f, -0.000177f, +0.000134f, - +0.000330f, -0.000022f, +0.000161f, -0.000097f, -0.000035f, +0.000041f, +0.000173f, -0.000078f, +0.000192f, -0.000021f, - +0.000188f, +0.000024f, +0.000007f, -0.000024f, +0.000010f, -0.000091f, +0.000070f, +0.000020f, +0.000033f, -0.000019f, - +0.000023f, -0.000037f, -0.000031f, -0.000000f, +0.000012f, +0.000024f - }, - { - -0.014379f, -0.006611f, +0.007433f, +0.001811f, -0.002977f, -0.000746f, -0.007571f, +0.002484f, +0.001591f, +0.002139f, - +0.001234f, -0.000048f, +0.000739f, -0.000650f, +0.002193f, +0.007547f, +0.005559f, +0.002905f, +0.004033f, -0.001324f, - -0.001430f, +0.000243f, +0.000242f, -0.001560f, +0.000352f, -0.000052f, +0.000706f, +0.000336f, -0.001636f, -0.000660f, - +0.001175f, +0.001573f, -0.000697f, -0.001923f, +0.002287f, +0.000230f, -0.000057f, +0.001280f, +0.001416f, -0.000725f, - +0.000269f, +0.000871f, +0.000700f, +0.001149f, +0.000272f, +0.000360f, +0.000106f, +0.000193f, +0.000688f, -0.000479f, - +0.000050f, -0.000170f, -0.000472f, +0.000125f, +0.000520f, -0.000298f, -0.000103f, -0.000158f, +0.000441f, +0.000410f, - -0.000135f, +0.000255f, -0.000029f, +0.000143f, +0.000146f, +0.000196f, +0.000186f, +0.000229f, +0.000013f, +0.000024f, - +0.000276f, -0.000111f, -0.000183f, -0.000046f, -0.000104f, -0.000178f, -0.000159f, +0.000176f, +0.000130f, -0.000082f, - +0.000036f, +0.000032f, +0.000006f, -0.000135f, +0.000065f, -0.000042f, -0.000052f, +0.000039f, +0.000049f, +0.000017f, - -0.000083f, -0.000001f, +0.000058f, +0.000046f, -0.000095f, -0.000048f - }, - { - -0.000387f, +0.010448f, -0.000717f, -0.005202f, +0.000505f, +0.001846f, -0.000179f, -0.000470f, +0.000240f, -0.000483f, - +0.000139f, +0.001853f, -0.002657f, -0.004468f, +0.004521f, -0.001857f, +0.000846f, -0.005392f, +0.001652f, -0.001687f, - -0.003010f, -0.003768f, +0.001034f, +0.000996f, -0.000843f, +0.002912f, +0.001128f, +0.000583f, +0.001111f, -0.001009f, - +0.000744f, -0.001264f, +0.000682f, +0.000283f, +0.000036f, -0.000764f, +0.000548f, -0.000113f, +0.000047f, -0.000329f, - +0.000250f, +0.000053f, +0.000191f, +0.000521f, -0.000745f, +0.000280f, -0.000404f, -0.000626f, -0.000493f, -0.000484f, - -0.000602f, +0.000620f, +0.000189f, +0.000361f, -0.000011f, +0.000011f, +0.000283f, +0.000166f, -0.000395f, -0.000001f, - -0.000587f, +0.000247f, +0.000263f, +0.000302f, +0.000006f, -0.000326f, +0.000160f, +0.000064f, -0.000174f, -0.000216f, - -0.000521f, -0.000254f, -0.000145f, -0.000036f, -0.000061f, -0.000025f, +0.000089f, +0.000019f, +0.000076f, +0.000146f, - -0.000082f, +0.000035f, +0.000122f, -0.000028f, -0.000058f, -0.000016f, +0.000025f, -0.000018f, -0.000034f, -0.000060f, - -0.000087f, -0.000036f, +0.000079f, +0.000014f, -0.000033f, +0.000006f - }, - { - -0.003791f, +0.027693f, +0.005085f, -0.002136f, -0.004259f, +0.000137f, +0.003315f, +0.000054f, +0.000692f, -0.001680f, - -0.000297f, -0.001477f, +0.004916f, +0.015190f, +0.001590f, -0.001494f, -0.001376f, +0.001700f, +0.000001f, -0.001473f, - +0.001464f, -0.000345f, -0.000393f, -0.000686f, -0.001194f, -0.003101f, +0.000535f, -0.002964f, +0.000874f, +0.002231f, - +0.001031f, -0.000936f, +0.001596f, +0.000678f, -0.000217f, -0.001542f, +0.001069f, +0.000566f, -0.000094f, +0.000601f, - -0.001532f, +0.000181f, -0.000361f, +0.000422f, -0.000207f, +0.000286f, +0.000206f, -0.000147f, -0.000307f, +0.000706f, - +0.000401f, -0.000695f, +0.000549f, +0.000341f, +0.000189f, +0.000572f, -0.000522f, -0.000003f, +0.000165f, -0.000128f, - -0.000037f, +0.000056f, +0.000417f, +0.000038f, +0.000428f, +0.000407f, -0.000015f, +0.000264f, -0.000004f, +0.000235f, - +0.000042f, +0.000173f, +0.000036f, -0.000261f, -0.000105f, -0.000087f, +0.000043f, -0.000210f, -0.000124f, -0.000033f, - +0.000261f, +0.000186f, +0.000015f, -0.000222f, -0.000220f, +0.000126f, +0.000057f, +0.000095f, +0.000011f, +0.000084f, - +0.000083f, +0.000149f, -0.000086f, +0.000051f, -0.000043f, -0.000039f - }, - { - -0.000050f, +0.004590f, +0.002894f, +0.000912f, -0.000402f, +0.001260f, -0.000045f, -0.001366f, -0.001209f, +0.001151f, - +0.000166f, +0.001016f, -0.001261f, +0.022114f, +0.013520f, +0.001077f, -0.000148f, -0.002865f, +0.003975f, -0.005160f, - -0.009743f, -0.002138f, +0.001287f, +0.002717f, -0.001469f, -0.002787f, +0.002088f, -0.000959f, -0.000411f, -0.002142f, - +0.003296f, +0.000486f, +0.000908f, +0.001061f, +0.001667f, +0.001264f, +0.001085f, -0.000428f, +0.000080f, +0.000346f, - -0.000068f, +0.000673f, -0.000247f, -0.000891f, +0.000234f, +0.000579f, +0.000081f, +0.000461f, -0.000363f, +0.000123f, - -0.000081f, +0.000003f, -0.000270f, +0.000340f, +0.000224f, +0.000387f, +0.000077f, -0.000094f, -0.000060f, +0.000151f, - +0.000045f, -0.000369f, +0.000053f, -0.000085f, -0.000185f, -0.000000f, -0.000588f, -0.000386f, +0.000145f, -0.000100f, - +0.000054f, +0.000312f, -0.000048f, +0.000359f, +0.000204f, -0.000035f, +0.000101f, -0.000144f, -0.000044f, +0.000005f, - -0.000034f, +0.000081f, +0.000054f, +0.000091f, +0.000075f, -0.000010f, -0.000140f, -0.000014f, +0.000161f, +0.000091f, - -0.000088f, +0.000001f, +0.000062f, +0.000006f, -0.000065f, +0.000013f - }, - { - -0.009930f, +0.001101f, +0.003178f, +0.010711f, +0.000477f, -0.002527f, -0.000630f, +0.002108f, +0.001741f, +0.002987f, - -0.002296f, +0.003084f, -0.002151f, -0.005120f, +0.006805f, -0.003983f, -0.005167f, -0.000584f, +0.001240f, +0.002987f, - -0.000271f, -0.000117f, +0.000806f, -0.000273f, -0.000733f, +0.002396f, -0.002209f, -0.001634f, -0.001771f, -0.001929f, - +0.000006f, +0.000107f, -0.001178f, +0.000668f, -0.000252f, +0.001113f, +0.001005f, +0.000082f, -0.000087f, -0.000533f, - -0.000339f, +0.000085f, -0.000418f, +0.000173f, -0.000426f, +0.000313f, -0.001075f, -0.000356f, -0.000066f, +0.000190f, - +0.000485f, -0.000747f, -0.000034f, -0.000217f, +0.000255f, -0.000114f, +0.000153f, +0.000564f, +0.000240f, -0.000092f, - +0.000272f, +0.000444f, +0.000119f, -0.000061f, -0.000215f, -0.000144f, -0.000073f, +0.000005f, -0.000016f, -0.000090f, - +0.000028f, +0.000064f, +0.000102f, -0.000005f, -0.000274f, +0.000390f, -0.000048f, +0.000014f, -0.000024f, -0.000021f, - +0.000039f, -0.000031f, -0.000072f, -0.000042f, -0.000012f, -0.000027f, +0.000001f, -0.000169f, +0.000174f, +0.000039f, - -0.000059f, +0.000082f, -0.000089f, -0.000046f, -0.000006f, +0.000013f - } - }, - { - { - +0.002467f, -0.027596f, -0.007297f, +0.002037f, -0.000172f, -0.001550f, -0.000683f, -0.001097f, +0.000163f, +0.000789f, - +0.000596f, +0.001710f, +0.002137f, -0.000199f, +0.002789f, +0.004666f, -0.002753f, -0.000643f, +0.000835f, -0.001830f, - +0.005316f, -0.000074f, -0.000768f, +0.004009f, -0.000276f, +0.004190f, +0.000910f, -0.000608f, -0.001471f, -0.001173f, - -0.003068f, -0.001121f, -0.003678f, +0.000458f, +0.001665f, +0.001003f, +0.000128f, -0.000233f, -0.000437f, -0.000495f, - +0.000774f, -0.000007f, +0.000527f, +0.000067f, +0.001237f, +0.000435f, +0.000310f, -0.000085f, -0.000608f, +0.000571f, - +0.000296f, -0.000447f, -0.000370f, -0.000017f, -0.000732f, +0.000115f, -0.000015f, -0.000024f, +0.000442f, -0.000187f, - +0.000347f, -0.000015f, -0.000333f, +0.000060f, -0.000282f, +0.000003f, -0.000274f, +0.000010f, +0.000013f, -0.000329f, - +0.000079f, +0.000090f, +0.000041f, +0.000262f, +0.000069f, +0.000293f, -0.000028f, -0.000011f, -0.000168f, +0.000032f, - -0.000002f, +0.000038f, -0.000080f, -0.000019f, -0.000105f, -0.000016f, +0.000052f, -0.000114f, -0.000043f, +0.000049f, - +0.000104f, -0.000088f, +0.000025f, -0.000015f, -0.000051f, +0.000072f - }, - { - -0.017038f, -0.037529f, -0.008881f, -0.002559f, +0.000061f, +0.000606f, -0.000528f, -0.000234f, +0.002086f, -0.001037f, - -0.000215f, +0.001142f, -0.000449f, -0.000564f, +0.000764f, -0.001732f, +0.001423f, +0.000894f, -0.002776f, +0.001580f, - -0.001472f, +0.000227f, -0.000454f, +0.000245f, +0.000985f, -0.000346f, +0.000660f, +0.000844f, +0.000763f, +0.000424f, - +0.002183f, -0.000276f, -0.002224f, +0.000077f, +0.000707f, +0.001720f, -0.000584f, -0.000498f, +0.000843f, +0.000072f, - -0.000747f, +0.000425f, -0.000160f, +0.000161f, +0.000927f, -0.000590f, +0.000992f, -0.000471f, +0.000739f, -0.000469f, - +0.000352f, +0.000136f, -0.000578f, -0.000384f, +0.000122f, -0.000224f, -0.000433f, -0.000299f, -0.000091f, +0.000078f, - -0.000015f, -0.000366f, -0.000044f, -0.000052f, -0.000059f, +0.000324f, -0.000003f, -0.000323f, +0.000088f, -0.000213f, - -0.000045f, +0.000060f, +0.000007f, -0.000364f, +0.000045f, +0.000151f, -0.000312f, +0.000133f, -0.000070f, +0.000090f, - +0.000141f, -0.000229f, -0.000050f, +0.000001f, -0.000164f, -0.000135f, +0.000178f, -0.000082f, +0.000048f, -0.000084f, - +0.000081f, -0.000007f, +0.000039f, -0.000088f, +0.000019f, -0.000023f - }, - { - -0.004945f, -0.086014f, +0.014126f, -0.009736f, +0.000321f, +0.000646f, +0.000087f, -0.000410f, -0.000843f, +0.000341f, - -0.001192f, +0.000870f, -0.002057f, +0.005891f, +0.004307f, +0.000267f, -0.000728f, +0.003372f, +0.000677f, +0.000252f, - +0.003969f, -0.002582f, -0.000232f, -0.002017f, +0.002666f, +0.000107f, -0.001066f, -0.000214f, -0.001430f, -0.000828f, - +0.001360f, +0.001238f, +0.000816f, -0.000454f, -0.000639f, -0.000484f, +0.001467f, -0.001534f, -0.000633f, -0.000107f, - +0.001165f, -0.001311f, +0.000032f, -0.000056f, -0.000998f, -0.000108f, +0.000862f, +0.000278f, -0.000072f, +0.000328f, - -0.000450f, +0.000101f, -0.000492f, +0.000349f, +0.000196f, -0.000048f, -0.000343f, -0.000146f, +0.000681f, +0.000320f, - -0.000033f, +0.000205f, +0.000049f, -0.000442f, -0.000247f, +0.000248f, -0.000052f, +0.000155f, +0.000073f, -0.000044f, - -0.000146f, -0.000169f, -0.000042f, +0.000073f, -0.000034f, -0.000089f, +0.000001f, +0.000011f, -0.000017f, +0.000073f, - -0.000057f, -0.000123f, -0.000011f, -0.000205f, +0.000089f, +0.000136f, +0.000061f, +0.000087f, +0.000027f, -0.000014f, - +0.000006f, -0.000070f, -0.000035f, -0.000068f, -0.000005f, +0.000099f - }, - { - -0.000860f, +0.005860f, +0.001532f, -0.000235f, -0.000393f, +0.000116f, -0.000183f, +0.000199f, +0.000498f, -0.000611f, - -0.000304f, -0.000936f, +0.000147f, +0.001326f, -0.009130f, +0.003685f, +0.001889f, +0.001034f, +0.007376f, +0.001487f, - -0.001123f, +0.000447f, -0.001053f, -0.001176f, -0.002041f, +0.000676f, +0.002924f, +0.000932f, -0.000514f, +0.000438f, - -0.000941f, +0.000641f, +0.000246f, -0.000439f, +0.001126f, +0.000706f, -0.000436f, -0.000144f, +0.000590f, +0.000055f, - -0.000042f, +0.000226f, -0.000888f, -0.000075f, +0.000064f, -0.000217f, +0.000345f, -0.000446f, +0.000434f, -0.000332f, - +0.000430f, -0.000145f, -0.000124f, +0.000149f, +0.000051f, -0.000008f, +0.000157f, +0.000282f, -0.000351f, +0.000499f, - -0.000153f, +0.000341f, +0.000270f, -0.000026f, -0.000102f, +0.000066f, -0.000012f, -0.000092f, +0.000027f, -0.000179f, - +0.000043f, +0.000289f, -0.000016f, -0.000007f, -0.000078f, +0.000080f, +0.000051f, +0.000012f, -0.000068f, -0.000045f, - -0.000094f, -0.000008f, -0.000160f, +0.000090f, -0.000064f, +0.000050f, +0.000083f, -0.000004f, +0.000027f, -0.000074f, - +0.000125f, +0.000058f, -0.000044f, -0.000080f, +0.000013f, -0.000075f - }, - { - -0.022418f, +0.023156f, +0.005724f, -0.000984f, -0.000751f, -0.000564f, -0.001015f, +0.000406f, +0.000524f, -0.000197f, - +0.000851f, -0.000139f, +0.001672f, -0.000929f, +0.001667f, -0.000117f, +0.001204f, +0.010013f, +0.000335f, +0.000054f, - +0.002562f, +0.001895f, -0.001393f, -0.000403f, +0.001327f, -0.001460f, +0.000818f, -0.001347f, +0.000860f, -0.000478f, - +0.001097f, +0.000450f, -0.000101f, -0.000730f, -0.000170f, -0.001012f, +0.001999f, +0.001164f, +0.000717f, -0.000544f, - +0.000715f, +0.000124f, -0.000769f, +0.000221f, -0.000031f, +0.000223f, -0.000242f, -0.000181f, +0.000069f, -0.000003f, - +0.000100f, +0.000093f, -0.000922f, +0.000515f, -0.001162f, -0.000980f, -0.000315f, +0.000385f, -0.000179f, +0.000104f, - +0.000065f, +0.000234f, -0.000313f, +0.000093f, -0.000333f, +0.000167f, +0.000211f, -0.000183f, +0.000117f, -0.000256f, - +0.000042f, -0.000091f, +0.000206f, +0.000100f, -0.000038f, -0.000091f, -0.000076f, +0.000019f, +0.000096f, +0.000087f, - -0.000051f, -0.000061f, -0.000068f, -0.000042f, +0.000049f, -0.000070f, -0.000020f, +0.000177f, -0.000115f, +0.000047f, - -0.000018f, +0.000084f, +0.000003f, +0.000004f, +0.000024f, +0.000044f - }, - { - +0.000613f, +0.007622f, -0.001441f, -0.000810f, -0.000025f, +0.000341f, -0.000386f, +0.000081f, -0.000003f, +0.000101f, - -0.000740f, +0.000360f, -0.000098f, -0.000758f, +0.005855f, +0.002253f, -0.004274f, +0.001057f, +0.004503f, -0.023396f, - -0.000918f, -0.001571f, -0.001361f, +0.001329f, +0.000922f, +0.000965f, -0.000879f, -0.002297f, +0.001438f, -0.000183f, - +0.002815f, -0.000157f, -0.000051f, -0.000171f, +0.001194f, -0.001239f, -0.000277f, -0.001357f, -0.000099f, -0.000395f, - -0.000063f, +0.000267f, -0.000389f, +0.000474f, -0.001056f, +0.000031f, -0.000387f, -0.000001f, -0.000081f, -0.000777f, - +0.000943f, -0.000500f, +0.000015f, +0.000164f, +0.000178f, -0.000326f, -0.000478f, +0.000069f, -0.000324f, -0.000161f, - +0.000141f, -0.000158f, +0.000358f, +0.000130f, -0.000241f, +0.000123f, +0.000153f, +0.000241f, +0.000158f, +0.000166f, - +0.000240f, -0.000067f, -0.000075f, +0.000007f, +0.000093f, +0.000025f, -0.000041f, -0.000013f, +0.000077f, -0.000032f, - -0.000002f, -0.000067f, -0.000041f, -0.000070f, +0.000192f, -0.000001f, -0.000006f, -0.000020f, -0.000014f, -0.000076f, - +0.000102f, +0.000060f, -0.000014f, -0.000068f, -0.000016f, -0.000063f - }, - { - -0.025877f, -0.085914f, +0.001838f, +0.006538f, -0.000345f, -0.000023f, +0.000721f, -0.000400f, -0.001290f, -0.000626f, - +0.001110f, +0.000131f, +0.001341f, +0.001947f, -0.000270f, +0.000197f, -0.000598f, +0.000168f, -0.000869f, +0.000564f, - +0.000424f, +0.000356f, +0.000049f, -0.000363f, -0.000507f, +0.000571f, -0.000006f, +0.000664f, +0.000374f, -0.000162f, - +0.000410f, -0.000172f, +0.000208f, +0.000238f, -0.000023f, -0.001488f, -0.000024f, -0.001562f, +0.001114f, +0.000635f, - -0.000234f, -0.000799f, -0.000689f, +0.000890f, +0.000289f, -0.000201f, +0.000162f, -0.000423f, +0.001009f, -0.000312f, - +0.000393f, -0.000239f, -0.000058f, -0.000226f, +0.000326f, -0.000119f, +0.000130f, +0.000090f, +0.000132f, +0.000175f, - -0.000237f, -0.000423f, +0.000120f, +0.000328f, +0.000168f, -0.000286f, -0.000293f, +0.000024f, +0.000057f, +0.000250f, - -0.000305f, +0.000419f, +0.000064f, -0.000361f, -0.000038f, +0.000108f, +0.000128f, -0.000161f, +0.000155f, +0.000145f, - -0.000112f, -0.000059f, -0.000016f, -0.000041f, +0.000030f, +0.000110f, -0.000012f, -0.000039f, +0.000043f, +0.000046f, - -0.000020f, -0.000130f, +0.000078f, +0.000069f, +0.000055f, -0.000088f - }, - { - +0.000625f, -0.002649f, -0.001716f, +0.000108f, -0.000131f, +0.000345f, +0.000042f, +0.000688f, -0.000241f, -0.000286f, - -0.000037f, +0.000024f, -0.000009f, -0.003284f, -0.012393f, -0.003496f, -0.001843f, +0.004436f, -0.001695f, -0.000489f, - -0.003251f, +0.002293f, +0.001853f, +0.000274f, -0.002495f, -0.003226f, -0.000127f, -0.002509f, -0.003830f, +0.001707f, - -0.002128f, +0.000983f, +0.000564f, +0.000285f, +0.000221f, -0.000062f, -0.000838f, +0.001292f, +0.000072f, -0.000569f, - +0.000186f, -0.000348f, -0.000677f, +0.000360f, +0.000354f, +0.000440f, -0.000950f, -0.000267f, +0.000589f, +0.000225f, - -0.000260f, -0.000300f, +0.000211f, -0.000083f, -0.000359f, -0.000044f, -0.000246f, +0.000254f, -0.000354f, -0.000023f, - +0.000335f, -0.000278f, +0.000226f, -0.000178f, +0.000058f, +0.000222f, +0.000344f, -0.000004f, -0.000050f, -0.000056f, - +0.000037f, -0.000083f, -0.000039f, +0.000320f, -0.000126f, +0.000045f, +0.000260f, -0.000025f, -0.000111f, +0.000023f, - -0.000056f, +0.000014f, +0.000001f, +0.000130f, +0.000036f, +0.000028f, -0.000005f, -0.000097f, +0.000006f, -0.000006f, - -0.000107f, +0.000016f, -0.000028f, +0.000018f, -0.000047f, -0.000051f - }, - { - -0.002854f, +0.105206f, -0.003202f, +0.002725f, +0.001013f, -0.001353f, -0.000570f, -0.000976f, +0.001348f, +0.000051f, - -0.002071f, +0.000966f, -0.000017f, +0.000855f, +0.000943f, +0.001405f, +0.001813f, +0.000868f, +0.000021f, -0.000140f, - +0.000615f, -0.000448f, +0.000954f, +0.000272f, -0.000709f, -0.000176f, -0.001074f, +0.000903f, -0.001980f, +0.000624f, - +0.001013f, +0.000178f, -0.001649f, +0.000819f, -0.000299f, +0.000650f, +0.000950f, +0.001625f, -0.001500f, -0.001797f, - -0.002620f, -0.000294f, -0.000905f, +0.000929f, +0.000595f, +0.000131f, -0.000375f, +0.000371f, +0.000658f, +0.000432f, - -0.000410f, -0.000705f, +0.000207f, -0.000083f, -0.000849f, -0.000064f, +0.000481f, +0.000152f, +0.000008f, +0.000434f, - -0.000034f, +0.000099f, +0.000141f, -0.000520f, +0.000012f, +0.000243f, -0.000095f, -0.000441f, +0.000118f, +0.000214f, - -0.000013f, -0.000059f, +0.000125f, -0.000035f, +0.000063f, -0.000102f, +0.000170f, -0.000151f, +0.000060f, +0.000053f, - +0.000128f, +0.000008f, +0.000003f, +0.000044f, -0.000081f, +0.000106f, +0.000114f, -0.000004f, -0.000161f, -0.000051f, - -0.000073f, -0.000011f, +0.000005f, +0.000083f, -0.000046f, -0.000006f - }, - { - -0.000973f, +0.002776f, -0.001037f, +0.002972f, +0.000721f, -0.001200f, +0.003138f, +0.001585f, -0.000257f, -0.000216f, - -0.000340f, -0.000501f, +0.000520f, +0.003540f, -0.001680f, +0.005002f, -0.000205f, +0.004848f, -0.000829f, +0.000851f, - -0.001459f, +0.002555f, +0.001374f, -0.000480f, -0.001221f, -0.000272f, +0.000191f, +0.001346f, +0.000127f, -0.000298f, - -0.000722f, +0.002254f, -0.000545f, -0.001203f, -0.000117f, +0.001880f, -0.000937f, -0.000744f, -0.000250f, +0.000015f, - +0.000436f, -0.000468f, -0.000434f, +0.000640f, +0.001261f, -0.000057f, -0.000668f, +0.000102f, +0.000538f, +0.000177f, - -0.001153f, +0.000177f, +0.000079f, -0.000606f, +0.000010f, +0.000554f, -0.000117f, -0.000021f, -0.000295f, -0.000189f, - -0.000075f, -0.000200f, +0.000444f, +0.000096f, +0.000037f, +0.000354f, -0.000023f, -0.000109f, +0.000054f, -0.000180f, - +0.000093f, -0.000087f, -0.000017f, +0.000256f, +0.000036f, -0.000134f, +0.000219f, -0.000065f, +0.000128f, +0.000072f, - +0.000194f, -0.000022f, +0.000001f, -0.000063f, +0.000052f, -0.000129f, -0.000007f, +0.000059f, +0.000014f, +0.000042f, - -0.000045f, +0.000004f, -0.000130f, -0.000009f, +0.000027f, -0.000032f - }, - { - +0.010405f, +0.015225f, +0.000572f, +0.004955f, +0.001066f, -0.000633f, -0.014143f, -0.000016f, -0.000036f, +0.003177f, - +0.001046f, +0.000366f, +0.000247f, -0.000433f, +0.000805f, +0.003157f, -0.002214f, -0.002794f, +0.002023f, -0.000245f, - -0.001257f, +0.001570f, -0.000796f, -0.001632f, -0.001460f, -0.001337f, +0.000241f, +0.000748f, -0.000050f, +0.000747f, - -0.000453f, +0.000171f, +0.000954f, -0.001157f, +0.000670f, -0.001220f, +0.001595f, -0.000044f, +0.000167f, -0.000822f, - -0.000347f, -0.000750f, +0.000045f, +0.000084f, +0.000138f, +0.001221f, +0.000285f, -0.000557f, +0.000047f, +0.000374f, - +0.000407f, -0.000004f, -0.000251f, -0.000310f, +0.000231f, -0.000417f, +0.000123f, -0.000153f, -0.000064f, +0.000459f, - -0.000182f, -0.000153f, -0.000187f, +0.000088f, +0.000092f, -0.000075f, +0.000207f, +0.000153f, -0.000072f, -0.000234f, - +0.000165f, -0.000072f, -0.000065f, -0.000042f, -0.000181f, -0.000006f, -0.000203f, -0.000003f, +0.000133f, -0.000231f, - +0.000064f, +0.000063f, -0.000080f, +0.000090f, -0.000011f, +0.000076f, -0.000081f, +0.000075f, -0.000060f, +0.000017f, - -0.000010f, +0.000005f, -0.000025f, +0.000044f, +0.000050f, -0.000039f - }, - { - +0.000589f, +0.008261f, -0.002108f, -0.003899f, +0.001513f, -0.000719f, +0.000107f, +0.000200f, -0.000136f, -0.000826f, - -0.000611f, -0.000075f, +0.003233f, +0.005540f, -0.000143f, -0.000490f, +0.004708f, -0.002932f, +0.002046f, +0.000920f, - +0.002368f, +0.002865f, -0.001004f, -0.000897f, -0.004113f, +0.000376f, +0.002057f, -0.000856f, +0.001090f, -0.000534f, - -0.001270f, +0.001185f, -0.000138f, +0.000423f, +0.000706f, -0.000599f, -0.000142f, +0.000193f, -0.000205f, -0.000039f, - +0.000144f, +0.000506f, +0.000884f, +0.000547f, -0.000673f, +0.000767f, +0.000150f, +0.000463f, +0.000190f, +0.000387f, - -0.000088f, +0.000257f, +0.000278f, +0.000237f, -0.000121f, -0.000461f, -0.000686f, -0.000134f, +0.000459f, +0.000499f, - +0.000077f, +0.000257f, -0.000298f, -0.000039f, +0.000283f, -0.000115f, -0.000288f, +0.000262f, -0.000083f, +0.000025f, - -0.000163f, +0.000110f, +0.000043f, -0.000088f, +0.000019f, +0.000009f, -0.000104f, -0.000126f, +0.000036f, +0.000006f, - +0.000062f, -0.000086f, +0.000029f, +0.000111f, +0.000050f, +0.000067f, +0.000060f, +0.000064f, +0.000014f, +0.000030f, - -0.000003f, +0.000026f, +0.000007f, -0.000088f, +0.000058f, -0.000035f - }, - { - -0.002038f, +0.019957f, -0.000654f, -0.005187f, -0.000888f, +0.000302f, -0.001982f, +0.000722f, +0.001758f, +0.000285f, - +0.000180f, -0.001618f, -0.003970f, -0.002339f, -0.001953f, -0.001367f, +0.000180f, +0.002312f, -0.000921f, -0.000068f, - -0.000559f, +0.000532f, -0.000216f, +0.000350f, +0.000297f, -0.000201f, +0.003029f, -0.001799f, +0.001454f, +0.001770f, - +0.000599f, -0.002106f, +0.000942f, +0.001151f, +0.000839f, -0.000717f, +0.001010f, +0.000754f, +0.000019f, -0.000440f, - -0.001467f, +0.000160f, +0.000158f, +0.001164f, +0.000887f, +0.000582f, +0.000574f, -0.000738f, +0.000132f, +0.000825f, - +0.000188f, -0.000681f, +0.000012f, +0.000454f, -0.000032f, +0.000177f, -0.000541f, -0.000503f, -0.000197f, +0.000199f, - -0.000054f, +0.000175f, -0.000005f, +0.000066f, -0.000066f, -0.000002f, +0.000009f, +0.000196f, +0.000010f, +0.000049f, - -0.000117f, +0.000261f, +0.000192f, -0.000268f, -0.000107f, -0.000065f, +0.000033f, +0.000264f, -0.000065f, +0.000041f, - -0.000190f, -0.000099f, +0.000092f, +0.000089f, -0.000147f, -0.000121f, -0.000016f, +0.000111f, -0.000095f, -0.000007f, - +0.000053f, +0.000110f, -0.000007f, -0.000052f, -0.000020f, -0.000051f - }, - { - -0.000277f, +0.001464f, +0.000616f, +0.001617f, -0.000795f, +0.000464f, +0.000128f, -0.000190f, -0.000883f, +0.000118f, - -0.000251f, +0.002015f, +0.000602f, +0.000740f, -0.025677f, +0.000989f, +0.003564f, -0.003990f, +0.004623f, +0.002743f, - -0.000585f, +0.000371f, +0.000941f, +0.001363f, -0.002214f, -0.000804f, -0.001021f, +0.000444f, +0.000630f, -0.002221f, - +0.002514f, -0.002092f, +0.000500f, +0.001041f, -0.000954f, -0.000184f, +0.000525f, -0.000647f, +0.000648f, -0.000632f, - +0.000466f, +0.001447f, -0.000462f, -0.000482f, +0.000169f, +0.000119f, +0.000359f, -0.000040f, -0.000229f, +0.000018f, - +0.000087f, -0.000335f, -0.000324f, +0.000188f, +0.000111f, +0.000142f, -0.000117f, -0.000031f, +0.000465f, +0.000432f, - +0.000025f, -0.000581f, +0.000110f, -0.000008f, -0.000067f, -0.000048f, +0.000148f, +0.000032f, -0.000003f, -0.000028f, - -0.000236f, +0.000032f, +0.000154f, +0.000002f, +0.000010f, -0.000120f, -0.000042f, +0.000188f, +0.000064f, +0.000154f, - +0.000013f, -0.000193f, -0.000046f, +0.000125f, -0.000094f, +0.000048f, +0.000014f, +0.000111f, -0.000031f, +0.000196f, - -0.000021f, -0.000047f, -0.000061f, +0.000103f, -0.000039f, -0.000112f - }, - { - +0.002126f, +0.015326f, -0.003159f, +0.002568f, +0.001463f, +0.000731f, -0.002534f, +0.001070f, +0.001555f, +0.003201f, - -0.000588f, -0.000307f, -0.001495f, -0.002901f, +0.010098f, -0.001557f, -0.003450f, +0.001440f, -0.000759f, +0.001040f, - -0.001210f, -0.000179f, +0.001184f, -0.000427f, -0.001819f, +0.001400f, -0.002401f, -0.000341f, -0.000259f, +0.000020f, - +0.000706f, +0.000618f, -0.001351f, +0.001185f, -0.000036f, -0.000477f, +0.000040f, +0.000414f, -0.000832f, -0.000382f, - +0.000037f, +0.000711f, -0.000363f, +0.000401f, +0.000552f, +0.000477f, +0.000108f, +0.000723f, -0.000674f, -0.000211f, - +0.000515f, -0.000305f, -0.000260f, -0.000575f, +0.000258f, -0.000484f, +0.000265f, +0.000524f, -0.000154f, +0.000035f, - +0.000166f, +0.000038f, +0.000001f, +0.000098f, +0.000044f, +0.000119f, +0.000070f, +0.000114f, -0.000022f, +0.000020f, - -0.000061f, +0.000089f, +0.000306f, +0.000053f, -0.000405f, +0.000169f, -0.000122f, +0.000130f, +0.000079f, +0.000094f, - +0.000093f, +0.000119f, +0.000001f, +0.000064f, +0.000084f, -0.000026f, -0.000023f, -0.000053f, -0.000088f, +0.000071f, - -0.000048f, +0.000042f, +0.000092f, +0.000025f, +0.000004f, -0.000035f - } - }, - { - { - -0.000880f, -0.031078f, -0.000227f, +0.000028f, -0.000909f, -0.000908f, +0.000066f, -0.000833f, -0.000007f, +0.000027f, - +0.001619f, +0.000544f, +0.002226f, +0.000062f, +0.003309f, -0.000301f, +0.000869f, +0.000009f, +0.002249f, -0.000853f, - +0.003519f, -0.000705f, +0.000093f, +0.002523f, +0.001590f, +0.003169f, +0.000803f, -0.000304f, -0.000553f, -0.001054f, - -0.003010f, -0.001702f, -0.001027f, +0.000476f, +0.000879f, +0.001313f, -0.001800f, +0.001144f, -0.002500f, +0.000183f, - +0.000610f, -0.000361f, +0.000427f, +0.000864f, +0.000971f, -0.000023f, +0.000246f, -0.000342f, -0.000416f, +0.000486f, - +0.000349f, -0.000198f, -0.000201f, -0.000033f, -0.000321f, -0.000289f, -0.000117f, +0.000104f, +0.000005f, +0.000206f, - +0.000183f, +0.000260f, -0.000190f, -0.000295f, -0.000218f, +0.000012f, -0.000060f, +0.000006f, +0.000274f, -0.000306f, - -0.000167f, +0.000116f, +0.000158f, +0.000196f, +0.000390f, -0.000010f, +0.000038f, +0.000028f, -0.000005f, +0.000009f, - +0.000016f, +0.000107f, +0.000072f, +0.000044f, -0.000154f, -0.000036f, +0.000041f, -0.000080f, -0.000014f, -0.000066f, - +0.000091f, -0.000017f, -0.000059f, -0.000000f, -0.000049f, +0.000018f - }, - { - +0.013684f, -0.087790f, -0.000936f, -0.005775f, -0.000450f, +0.000586f, -0.000748f, -0.000328f, -0.001212f, +0.001516f, - +0.000200f, +0.001030f, -0.000479f, -0.000384f, -0.001419f, -0.000218f, +0.000555f, -0.001503f, -0.001805f, -0.000163f, - +0.000152f, -0.000893f, -0.000440f, +0.001176f, +0.001063f, +0.000481f, -0.000325f, +0.001248f, +0.001482f, +0.000320f, - +0.001349f, -0.000107f, -0.001621f, -0.000938f, +0.001038f, +0.000211f, +0.001280f, -0.000528f, +0.000377f, -0.000580f, - +0.000483f, -0.000403f, +0.000200f, -0.000033f, +0.000607f, -0.000325f, -0.000080f, -0.000367f, +0.000038f, +0.000053f, - -0.000221f, +0.000705f, -0.000015f, +0.000074f, -0.000165f, -0.000289f, -0.000399f, -0.000359f, +0.000375f, +0.000237f, - +0.000131f, -0.000291f, -0.000229f, +0.000090f, -0.000069f, +0.000144f, +0.000043f, -0.000272f, +0.000024f, +0.000138f, - -0.000181f, -0.000088f, +0.000007f, -0.000096f, -0.000201f, -0.000032f, -0.000106f, -0.000004f, -0.000110f, +0.000213f, - +0.000119f, -0.000209f, -0.000017f, +0.000049f, -0.000087f, -0.000236f, +0.000081f, +0.000011f, +0.000005f, +0.000016f, - +0.000014f, +0.000066f, +0.000028f, -0.000038f, -0.000033f, -0.000014f - }, - { - +0.004049f, -0.062907f, -0.018174f, +0.002707f, -0.001723f, +0.001038f, +0.000646f, -0.000409f, -0.000777f, -0.001336f, - -0.000898f, -0.001136f, +0.000729f, +0.002765f, +0.004503f, -0.001445f, +0.004730f, -0.000227f, +0.001976f, +0.000300f, - +0.002533f, -0.000038f, +0.000521f, -0.001539f, -0.000252f, +0.000750f, +0.000317f, -0.000202f, -0.001015f, -0.001432f, - +0.001066f, +0.001386f, +0.000073f, +0.000122f, -0.001277f, -0.000863f, +0.001294f, -0.000982f, -0.000530f, +0.000682f, - -0.000860f, +0.001711f, -0.000732f, +0.000219f, +0.000230f, -0.001049f, +0.000171f, +0.000306f, +0.000954f, -0.000277f, - -0.000414f, -0.000237f, -0.000010f, -0.000006f, -0.000261f, +0.000130f, +0.000311f, +0.000027f, +0.000522f, +0.000308f, - +0.000171f, +0.000471f, -0.000367f, -0.000012f, +0.000075f, +0.000109f, -0.000220f, +0.000262f, +0.000203f, -0.000172f, - -0.000023f, +0.000028f, -0.000012f, +0.000063f, -0.000013f, -0.000066f, -0.000016f, -0.000021f, -0.000114f, -0.000008f, - -0.000104f, -0.000094f, +0.000072f, -0.000160f, -0.000064f, +0.000140f, +0.000011f, +0.000012f, +0.000026f, -0.000048f, - -0.000022f, -0.000014f, +0.000010f, -0.000051f, +0.000016f, +0.000035f - }, - { - +0.000618f, +0.005872f, -0.001399f, +0.001055f, -0.000254f, -0.000160f, +0.000126f, +0.000315f, +0.000097f, -0.000427f, - -0.000493f, -0.000977f, -0.000610f, -0.001690f, -0.001956f, -0.002518f, +0.002471f, +0.003448f, +0.003506f, +0.001931f, - -0.000100f, -0.000523f, -0.001126f, -0.000568f, -0.001080f, +0.001359f, +0.001435f, -0.000711f, +0.000728f, -0.000081f, - -0.001453f, +0.001358f, +0.000055f, -0.000165f, -0.000244f, +0.001099f, +0.000024f, +0.000678f, +0.000326f, +0.000356f, - +0.000105f, -0.000013f, -0.000375f, -0.000660f, -0.000037f, +0.000296f, -0.000132f, -0.000127f, +0.000641f, -0.000033f, - -0.000278f, -0.000090f, +0.000196f, +0.000209f, +0.000017f, +0.000281f, -0.000088f, +0.000233f, +0.000118f, -0.000019f, - -0.000369f, +0.000163f, +0.000265f, +0.000134f, +0.000056f, -0.000117f, -0.000017f, +0.000191f, -0.000031f, -0.000152f, - -0.000210f, +0.000146f, -0.000015f, -0.000060f, -0.000045f, -0.000004f, +0.000245f, +0.000057f, -0.000040f, -0.000053f, - -0.000116f, -0.000012f, -0.000096f, -0.000012f, +0.000002f, -0.000074f, +0.000081f, +0.000060f, +0.000061f, +0.000002f, - +0.000030f, +0.000056f, +0.000028f, -0.000058f, +0.000013f, +0.000020f - }, - { - +0.014622f, -0.023180f, -0.004011f, -0.000162f, +0.000789f, -0.000659f, -0.001300f, -0.000194f, +0.000438f, -0.000548f, - +0.002105f, +0.002546f, -0.000206f, +0.000021f, +0.000972f, -0.000899f, -0.000183f, +0.007940f, +0.001875f, +0.001074f, - +0.001865f, -0.000106f, +0.000332f, -0.000329f, +0.000207f, +0.000063f, -0.000437f, -0.000007f, -0.000798f, +0.000050f, - +0.000692f, +0.000235f, +0.000166f, +0.000270f, -0.000179f, -0.000391f, -0.001283f, +0.001140f, +0.000494f, -0.000580f, - +0.000166f, +0.000202f, +0.000154f, -0.000975f, +0.000051f, +0.000489f, -0.000224f, +0.000118f, +0.000353f, -0.000249f, - +0.000379f, +0.000143f, -0.000421f, -0.000349f, -0.000708f, -0.000519f, -0.000893f, -0.000110f, +0.000305f, -0.000069f, - +0.000149f, +0.000184f, -0.000176f, -0.000104f, -0.000130f, +0.000241f, -0.000017f, -0.000277f, +0.000282f, +0.000010f, - -0.000059f, -0.000120f, -0.000077f, +0.000175f, -0.000017f, -0.000240f, +0.000127f, -0.000025f, +0.000096f, +0.000128f, - +0.000020f, -0.000047f, +0.000031f, -0.000128f, +0.000047f, -0.000105f, +0.000068f, +0.000091f, -0.000117f, +0.000027f, - -0.000040f, +0.000040f, +0.000048f, -0.000054f, +0.000034f, +0.000027f - }, - { - +0.000104f, +0.004501f, +0.002755f, -0.000992f, +0.000255f, -0.000167f, +0.000166f, -0.000358f, +0.000471f, -0.000025f, - -0.000337f, -0.000250f, +0.000241f, +0.001996f, -0.001151f, -0.000367f, -0.000293f, +0.000068f, +0.001016f, -0.015846f, - -0.001833f, -0.002716f, -0.000609f, -0.002173f, +0.001902f, -0.000230f, -0.000384f, -0.001726f, -0.000074f, +0.003250f, - +0.002269f, -0.001048f, +0.000175f, +0.000815f, +0.000555f, -0.001388f, -0.000547f, -0.000263f, -0.000803f, -0.000426f, - +0.000241f, +0.000285f, +0.000555f, -0.000059f, -0.000319f, -0.000091f, -0.000551f, -0.000224f, -0.000137f, -0.000554f, - +0.000242f, +0.000108f, -0.000219f, +0.000309f, -0.000184f, -0.000438f, -0.000162f, -0.000069f, +0.000011f, -0.000390f, - +0.000009f, +0.000099f, -0.000045f, +0.000070f, +0.000117f, +0.000074f, +0.000149f, -0.000006f, +0.000143f, -0.000069f, - +0.000304f, +0.000094f, -0.000110f, -0.000067f, +0.000035f, +0.000198f, +0.000108f, +0.000223f, -0.000084f, -0.000077f, - +0.000081f, -0.000014f, -0.000121f, -0.000061f, +0.000116f, +0.000017f, +0.000059f, -0.000101f, +0.000028f, +0.000092f, - -0.000076f, -0.000020f, +0.000134f, -0.000051f, -0.000037f, +0.000030f - }, - { - +0.006822f, -0.115110f, -0.006962f, +0.003654f, +0.000084f, +0.000981f, +0.000315f, -0.000552f, -0.000462f, -0.000944f, - +0.001196f, +0.000292f, +0.000935f, +0.000373f, +0.000696f, +0.000351f, +0.000898f, -0.000658f, -0.000425f, -0.000277f, - -0.000142f, -0.000470f, -0.000180f, -0.000546f, +0.000506f, +0.000010f, -0.000094f, +0.000553f, -0.000167f, +0.000882f, - +0.000915f, +0.000186f, +0.000687f, -0.000672f, +0.000079f, -0.000875f, -0.000407f, -0.001580f, +0.001783f, -0.000032f, - -0.000223f, +0.000156f, -0.001291f, +0.000483f, +0.000092f, +0.000128f, -0.000197f, -0.000188f, +0.000145f, -0.000308f, - +0.000042f, -0.000175f, +0.000138f, -0.000288f, +0.000230f, +0.000166f, +0.000267f, +0.000322f, +0.000076f, +0.000145f, - -0.000198f, -0.000201f, +0.000014f, +0.000191f, +0.000053f, +0.000103f, +0.000162f, -0.000158f, -0.000128f, +0.000100f, - -0.000058f, -0.000030f, +0.000233f, -0.000106f, -0.000138f, -0.000039f, +0.000223f, -0.000038f, +0.000054f, +0.000123f, - -0.000158f, -0.000055f, +0.000117f, +0.000009f, -0.000051f, +0.000156f, +0.000137f, -0.000070f, -0.000079f, -0.000063f, - +0.000053f, -0.000067f, -0.000056f, +0.000039f, +0.000052f, -0.000026f - }, - { - -0.000275f, +0.000676f, -0.000970f, +0.000857f, -0.000369f, +0.000159f, +0.000192f, -0.000238f, +0.000470f, -0.000023f, - -0.000616f, -0.000993f, +0.000876f, -0.002023f, -0.016004f, -0.004041f, -0.003215f, +0.000618f, -0.000714f, +0.000651f, - -0.003477f, +0.000552f, +0.000849f, +0.000220f, -0.000191f, -0.006238f, -0.000532f, -0.000691f, -0.002561f, -0.000873f, - -0.000078f, +0.000811f, +0.000072f, +0.000155f, +0.000001f, +0.000203f, -0.000082f, +0.000451f, -0.000299f, +0.000659f, - -0.000232f, -0.000477f, -0.000529f, +0.000019f, -0.000026f, +0.000172f, -0.000117f, -0.000657f, -0.000430f, +0.000320f, - +0.000210f, -0.000260f, +0.000033f, +0.000196f, +0.000017f, -0.000136f, +0.000263f, +0.000145f, -0.000519f, +0.000260f, - +0.000085f, +0.000087f, -0.000077f, +0.000010f, +0.000010f, -0.000091f, +0.000160f, +0.000140f, -0.000141f, +0.000054f, - -0.000011f, -0.000049f, -0.000079f, +0.000091f, +0.000131f, +0.000066f, +0.000230f, +0.000104f, -0.000045f, +0.000096f, - -0.000146f, -0.000048f, +0.000007f, +0.000046f, +0.000102f, +0.000013f, +0.000065f, -0.000050f, -0.000024f, +0.000103f, - -0.000091f, -0.000004f, +0.000032f, +0.000012f, -0.000066f, -0.000053f - }, - { - +0.007730f, +0.078546f, +0.004586f, +0.001450f, +0.000145f, +0.000508f, -0.000673f, -0.001090f, +0.000686f, +0.001027f, - -0.000399f, -0.000679f, -0.002264f, +0.001243f, +0.001910f, +0.001238f, +0.001809f, +0.000150f, +0.000129f, +0.000492f, - +0.000660f, -0.000114f, +0.000523f, +0.000745f, -0.000869f, -0.000650f, +0.000649f, -0.000162f, -0.001412f, -0.000283f, - +0.000825f, +0.000089f, -0.000807f, +0.000632f, +0.000437f, +0.000599f, +0.000212f, -0.000238f, +0.000040f, -0.001697f, - -0.001951f, -0.000901f, -0.000335f, +0.000965f, +0.000153f, +0.000277f, +0.000461f, +0.000025f, +0.000606f, -0.000305f, - +0.000070f, -0.000029f, -0.000232f, -0.000227f, -0.000671f, -0.000406f, +0.000352f, +0.000084f, +0.000198f, +0.000145f, - +0.000240f, -0.000208f, +0.000032f, -0.000200f, -0.000315f, -0.000011f, +0.000052f, -0.000401f, -0.000020f, +0.000309f, - +0.000054f, -0.000181f, -0.000050f, +0.000070f, +0.000180f, -0.000182f, +0.000092f, +0.000037f, -0.000099f, +0.000068f, - +0.000047f, -0.000016f, -0.000063f, +0.000016f, -0.000146f, +0.000010f, +0.000144f, +0.000099f, -0.000006f, -0.000142f, - -0.000116f, +0.000047f, -0.000028f, +0.000110f, -0.000004f, -0.000004f - }, - { - +0.000598f, +0.001423f, +0.003180f, +0.001458f, -0.001953f, +0.002633f, +0.000143f, +0.000665f, -0.000657f, -0.000719f, - -0.000889f, +0.000057f, +0.000267f, +0.001351f, +0.001216f, +0.003366f, +0.001113f, +0.000879f, +0.005172f, +0.000431f, - -0.001973f, +0.000064f, +0.001599f, +0.001265f, +0.000415f, -0.000646f, +0.000860f, +0.000800f, -0.000564f, +0.000566f, - -0.001762f, +0.000682f, +0.001086f, -0.001185f, +0.000996f, +0.000829f, +0.000189f, -0.000077f, +0.000055f, -0.000307f, - +0.000563f, +0.000453f, -0.000039f, -0.000033f, +0.001065f, -0.000171f, -0.000406f, +0.000227f, -0.000194f, +0.000425f, - -0.000382f, -0.000264f, +0.000654f, -0.000392f, -0.000537f, +0.000171f, +0.000392f, -0.000106f, -0.000092f, +0.000059f, - -0.000329f, +0.000114f, +0.000117f, +0.000022f, -0.000040f, -0.000163f, +0.000241f, +0.000072f, +0.000323f, -0.000064f, - -0.000117f, -0.000095f, -0.000225f, +0.000222f, +0.000019f, -0.000024f, +0.000069f, -0.000040f, -0.000046f, -0.000008f, - +0.000054f, -0.000002f, +0.000027f, +0.000012f, +0.000079f, +0.000011f, -0.000099f, +0.000032f, -0.000045f, +0.000028f, - -0.000008f, +0.000017f, -0.000102f, -0.000014f, +0.000058f, +0.000036f - }, - { - -0.007562f, +0.032197f, +0.010437f, +0.002182f, +0.000154f, -0.003954f, -0.004737f, -0.002739f, +0.000537f, +0.002120f, - +0.000193f, +0.000738f, +0.000038f, +0.001275f, +0.000724f, -0.000396f, -0.002485f, -0.000980f, +0.000935f, +0.000911f, - -0.000679f, +0.000956f, -0.000535f, -0.000881f, -0.001483f, -0.000515f, -0.000370f, -0.000293f, +0.000540f, +0.000952f, - -0.000103f, -0.000188f, +0.000069f, -0.000326f, -0.000209f, -0.000863f, +0.000921f, +0.000302f, -0.000241f, -0.000262f, - -0.000325f, -0.000097f, -0.000389f, -0.000709f, +0.000100f, +0.000748f, +0.000327f, +0.000063f, -0.000388f, +0.000305f, - +0.000665f, -0.000113f, -0.000296f, -0.000159f, -0.000360f, -0.000285f, -0.000091f, +0.000163f, -0.000185f, +0.000126f, - -0.000009f, -0.000183f, -0.000173f, +0.000073f, +0.000096f, -0.000165f, +0.000140f, -0.000062f, +0.000026f, -0.000170f, - +0.000087f, +0.000018f, -0.000019f, -0.000002f, -0.000015f, +0.000120f, -0.000086f, -0.000120f, -0.000029f, +0.000013f, - +0.000014f, +0.000073f, -0.000094f, +0.000103f, -0.000042f, +0.000092f, +0.000090f, +0.000034f, -0.000044f, +0.000001f, - +0.000020f, -0.000016f, -0.000062f, +0.000019f, +0.000063f, +0.000039f - }, - { - -0.000640f, +0.003881f, +0.002373f, -0.001415f, +0.000655f, -0.001089f, +0.000094f, -0.000053f, -0.000070f, -0.000775f, - -0.000829f, +0.000109f, +0.002909f, +0.005503f, -0.002240f, +0.003495f, -0.000111f, +0.000190f, +0.001394f, +0.000754f, - +0.003414f, +0.002313f, +0.000046f, +0.000514f, -0.002046f, -0.002111f, -0.000519f, -0.000544f, +0.001221f, +0.001111f, - -0.001606f, +0.001111f, -0.000323f, +0.000424f, -0.000446f, +0.000134f, -0.000613f, +0.000307f, +0.000302f, +0.000480f, - +0.000343f, +0.000208f, +0.000665f, +0.000648f, +0.000007f, +0.000425f, +0.000099f, +0.000479f, +0.000192f, +0.000844f, - +0.000368f, -0.000245f, +0.000152f, +0.000348f, -0.000141f, -0.000423f, -0.000776f, -0.000393f, -0.000047f, +0.000293f, - +0.000211f, +0.000168f, -0.000206f, -0.000266f, +0.000109f, +0.000057f, -0.000354f, +0.000015f, -0.000077f, +0.000006f, - +0.000215f, +0.000040f, -0.000026f, +0.000111f, +0.000051f, +0.000111f, -0.000093f, -0.000101f, +0.000008f, -0.000073f, - +0.000027f, -0.000035f, -0.000061f, +0.000102f, +0.000041f, +0.000033f, +0.000050f, +0.000028f, -0.000011f, +0.000039f, - +0.000022f, +0.000073f, -0.000026f, -0.000045f, +0.000036f, +0.000003f - }, - { - +0.001727f, +0.003592f, -0.000294f, +0.001511f, -0.001026f, +0.001793f, +0.000322f, +0.001671f, +0.000329f, +0.000116f, - +0.001076f, -0.000048f, -0.000557f, -0.008597f, -0.003922f, +0.000768f, -0.000226f, +0.000184f, -0.000585f, +0.002411f, - -0.000553f, -0.000207f, -0.000328f, -0.000227f, +0.001449f, +0.001872f, +0.002318f, -0.000797f, +0.001838f, +0.001637f, - -0.000003f, -0.001004f, +0.000202f, +0.000957f, +0.000599f, +0.001038f, -0.000670f, +0.000747f, +0.000395f, -0.000528f, - -0.000815f, -0.000333f, +0.000400f, +0.000348f, -0.000335f, +0.000205f, +0.000042f, -0.000391f, -0.000186f, +0.000177f, - +0.000371f, +0.000115f, -0.000150f, +0.000638f, +0.000182f, +0.000155f, -0.000117f, -0.000493f, -0.000499f, +0.000361f, - +0.000063f, +0.000048f, -0.000128f, +0.000215f, -0.000163f, -0.000296f, +0.000034f, +0.000097f, +0.000137f, -0.000044f, - -0.000084f, +0.000154f, +0.000218f, +0.000024f, +0.000042f, -0.000012f, -0.000164f, +0.000296f, +0.000119f, +0.000103f, - -0.000136f, -0.000255f, -0.000017f, +0.000125f, +0.000025f, -0.000124f, -0.000089f, -0.000117f, -0.000101f, -0.000073f, - +0.000058f, +0.000033f, +0.000091f, +0.000014f, +0.000029f, +0.000014f - }, - { - -0.000045f, +0.002073f, -0.002852f, +0.000666f, +0.000661f, -0.000456f, -0.000131f, +0.000453f, +0.000161f, -0.001227f, - -0.000459f, +0.001588f, +0.001491f, -0.012117f, +0.004399f, -0.007132f, +0.003577f, -0.001004f, +0.000589f, +0.004165f, - +0.002245f, +0.000466f, +0.002580f, +0.000936f, -0.003053f, +0.002124f, -0.002212f, +0.000296f, +0.000144f, +0.001272f, - -0.001433f, -0.000468f, -0.000440f, +0.000831f, -0.002070f, -0.000737f, +0.000299f, -0.000411f, +0.000953f, -0.000657f, - +0.000143f, +0.000985f, +0.000211f, -0.000162f, -0.000145f, +0.000359f, +0.000161f, -0.000223f, -0.000101f, -0.000210f, - +0.000312f, +0.000013f, -0.000235f, -0.000263f, +0.000352f, -0.000296f, -0.000003f, +0.000118f, +0.000302f, +0.000230f, - -0.000062f, +0.000025f, -0.000219f, +0.000020f, +0.000214f, -0.000046f, +0.000213f, +0.000159f, -0.000020f, -0.000016f, - -0.000133f, -0.000011f, +0.000243f, -0.000200f, -0.000061f, +0.000085f, -0.000060f, +0.000139f, +0.000051f, +0.000032f, - +0.000129f, -0.000123f, -0.000216f, +0.000074f, -0.000095f, -0.000046f, -0.000005f, +0.000095f, -0.000080f, +0.000059f, - +0.000086f, +0.000063f, -0.000049f, +0.000079f, +0.000008f, -0.000104f - }, - { - +0.002753f, +0.013921f, +0.001082f, -0.003762f, +0.001571f, +0.002680f, -0.000519f, +0.001395f, +0.001606f, +0.000754f, - +0.002287f, -0.001327f, -0.000306f, +0.004363f, -0.000999f, -0.001197f, +0.000995f, +0.002100f, -0.001861f, +0.000733f, - -0.001404f, +0.000596f, +0.000487f, +0.000781f, -0.001184f, -0.000945f, -0.001082f, +0.000780f, -0.000709f, +0.000719f, - +0.000104f, +0.000766f, -0.000637f, +0.000218f, +0.000787f, -0.000729f, -0.000921f, +0.000282f, -0.000786f, +0.000263f, - +0.000501f, -0.000126f, -0.000214f, +0.000093f, +0.000973f, +0.000325f, +0.000280f, +0.000194f, +0.000130f, -0.000565f, - +0.000184f, +0.000328f, -0.000100f, -0.000299f, +0.000013f, -0.000141f, -0.000108f, +0.000102f, +0.000133f, +0.000290f, - -0.000099f, -0.000140f, -0.000132f, +0.000245f, +0.000118f, -0.000025f, +0.000132f, -0.000169f, -0.000013f, +0.000041f, - -0.000018f, -0.000067f, +0.000184f, +0.000183f, +0.000066f, -0.000123f, -0.000178f, +0.000197f, +0.000045f, +0.000029f, - +0.000111f, +0.000209f, +0.000029f, +0.000026f, +0.000057f, +0.000049f, -0.000014f, +0.000009f, +0.000004f, -0.000069f, - +0.000080f, -0.000007f, +0.000074f, +0.000080f, +0.000031f, -0.000040f - } - }, - { - { - +0.000334f, -0.025325f, +0.005920f, +0.001240f, -0.000460f, -0.000023f, +0.000623f, -0.000035f, +0.001183f, -0.000337f, - +0.000818f, -0.001704f, +0.000700f, -0.000412f, +0.000478f, -0.002966f, -0.000130f, +0.000685f, +0.000619f, -0.001187f, - +0.002842f, -0.001019f, -0.000042f, +0.001715f, +0.001081f, +0.001209f, +0.000807f, +0.001782f, +0.001303f, +0.000649f, - +0.000302f, +0.000569f, +0.000677f, -0.000680f, -0.001027f, -0.001043f, -0.001573f, +0.001819f, -0.001982f, +0.000385f, - -0.000076f, -0.000626f, +0.000030f, +0.000529f, -0.000149f, +0.000059f, +0.000285f, -0.000330f, +0.000109f, +0.000269f, - -0.000304f, -0.000328f, -0.000048f, -0.000347f, +0.000083f, +0.000134f, +0.000004f, +0.000211f, -0.000158f, +0.000070f, - -0.000196f, +0.000166f, +0.000182f, +0.000065f, -0.000023f, +0.000154f, +0.000086f, +0.000002f, +0.000079f, -0.000084f, - -0.000057f, -0.000056f, +0.000196f, -0.000051f, +0.000208f, -0.000216f, +0.000071f, +0.000010f, +0.000060f, +0.000119f, - +0.000020f, -0.000010f, +0.000016f, +0.000069f, +0.000056f, +0.000029f, -0.000002f, -0.000041f, +0.000025f, -0.000037f, - -0.000076f, +0.000042f, -0.000057f, +0.000086f, +0.000020f, -0.000046f - }, - { - -0.009411f, -0.083437f, +0.023110f, -0.005002f, -0.001782f, -0.001021f, +0.000052f, +0.000742f, -0.002478f, +0.001209f, - +0.000182f, -0.000148f, +0.000557f, -0.000204f, -0.002049f, -0.000343f, -0.001167f, -0.000152f, +0.001909f, -0.000648f, - +0.000113f, -0.000334f, -0.000600f, +0.000524f, +0.000161f, +0.000641f, -0.000253f, +0.000450f, +0.000504f, -0.000688f, - +0.000024f, -0.000036f, -0.000277f, +0.000240f, +0.000007f, -0.000957f, +0.000421f, +0.000104f, +0.000416f, -0.001101f, - +0.000331f, +0.000375f, +0.000732f, -0.000476f, -0.000181f, +0.000317f, -0.000745f, +0.000076f, -0.000205f, -0.000331f, - -0.000744f, -0.000273f, +0.000026f, +0.000177f, -0.000132f, +0.000143f, -0.000164f, +0.000124f, +0.000174f, +0.000058f, - +0.000029f, +0.000026f, -0.000080f, +0.000272f, +0.000174f, +0.000136f, -0.000175f, -0.000260f, -0.000128f, +0.000182f, - -0.000112f, +0.000050f, -0.000032f, +0.000049f, -0.000022f, -0.000228f, +0.000066f, +0.000052f, -0.000070f, +0.000019f, - +0.000041f, +0.000017f, -0.000045f, +0.000045f, +0.000053f, +0.000052f, -0.000135f, +0.000114f, -0.000066f, +0.000020f, - -0.000029f, +0.000016f, -0.000017f, +0.000053f, -0.000046f, +0.000042f - }, - { - -0.003242f, -0.021477f, +0.015182f, +0.003844f, +0.003903f, +0.000362f, -0.000133f, +0.000289f, +0.000253f, +0.000606f, - -0.000456f, -0.001214f, -0.000205f, -0.000255f, +0.004340f, -0.000306f, +0.001903f, -0.002872f, +0.002582f, -0.001072f, - +0.002000f, +0.000959f, +0.001412f, -0.000870f, -0.001276f, -0.000048f, +0.000583f, +0.001422f, +0.000387f, -0.000269f, - +0.000534f, +0.000842f, +0.000210f, +0.000911f, -0.001035f, -0.000730f, +0.001254f, -0.000690f, +0.000617f, +0.001517f, - -0.001599f, +0.001741f, -0.000384f, +0.000557f, +0.000348f, -0.000723f, -0.000278f, -0.000193f, +0.000306f, +0.000064f, - -0.000098f, -0.000578f, -0.000010f, -0.000174f, -0.000247f, +0.000131f, -0.000138f, -0.000024f, +0.000286f, +0.000132f, - -0.000195f, +0.000107f, -0.000159f, +0.000223f, -0.000211f, -0.000119f, -0.000365f, +0.000116f, +0.000159f, -0.000097f, - +0.000030f, -0.000028f, +0.000050f, -0.000012f, +0.000136f, -0.000016f, -0.000022f, -0.000000f, +0.000021f, -0.000054f, - -0.000103f, -0.000066f, -0.000037f, +0.000068f, -0.000090f, -0.000026f, +0.000039f, -0.000053f, -0.000019f, +0.000025f, - -0.000091f, +0.000018f, -0.000009f, +0.000039f, -0.000031f, -0.000050f - }, - { - -0.000308f, +0.007487f, -0.000055f, +0.000506f, +0.000414f, -0.000101f, -0.000075f, -0.000080f, +0.000029f, +0.000269f, - +0.000475f, -0.000043f, -0.000746f, -0.001105f, +0.005416f, -0.001870f, -0.004206f, +0.000395f, +0.001535f, +0.000031f, - +0.000806f, -0.000188f, -0.000988f, +0.000787f, -0.000805f, -0.000661f, -0.002067f, -0.001409f, +0.000161f, -0.000228f, - -0.002228f, +0.001078f, +0.000666f, +0.000759f, -0.000546f, +0.000537f, +0.001417f, +0.000425f, -0.000354f, +0.000693f, - -0.000130f, -0.000142f, +0.000027f, -0.000277f, +0.000014f, +0.000028f, -0.000152f, -0.000345f, +0.000301f, +0.000228f, - +0.000003f, -0.000394f, +0.000112f, +0.000089f, -0.000240f, +0.000416f, -0.000229f, -0.000317f, +0.000292f, +0.000143f, - -0.000326f, -0.000118f, +0.000148f, -0.000166f, -0.000045f, +0.000075f, +0.000006f, +0.000163f, -0.000061f, +0.000075f, - -0.000085f, -0.000136f, -0.000055f, -0.000051f, +0.000116f, -0.000131f, +0.000043f, +0.000041f, +0.000114f, -0.000012f, - -0.000015f, -0.000020f, +0.000067f, -0.000031f, +0.000064f, -0.000022f, -0.000056f, -0.000011f, +0.000051f, -0.000005f, - -0.000053f, -0.000047f, +0.000031f, +0.000038f, -0.000004f, +0.000029f - }, - { - -0.003799f, -0.040216f, +0.001691f, -0.002482f, -0.000494f, +0.000276f, -0.000580f, -0.000863f, +0.000700f, +0.000021f, - +0.000002f, +0.001761f, -0.000461f, +0.001019f, +0.000712f, -0.001409f, +0.000995f, +0.005930f, -0.000693f, -0.000011f, - +0.000118f, -0.000391f, +0.000872f, +0.000862f, -0.000885f, +0.001129f, -0.000257f, +0.000582f, -0.001411f, -0.000161f, - -0.000275f, -0.000563f, -0.000805f, +0.000412f, +0.000112f, -0.000013f, -0.001871f, -0.001357f, -0.000347f, +0.000240f, - +0.000006f, -0.000179f, +0.000171f, -0.000471f, -0.000278f, -0.000277f, -0.000141f, +0.000125f, +0.000117f, -0.000331f, - -0.000273f, -0.000207f, +0.000521f, -0.000105f, -0.000110f, +0.000088f, +0.000077f, -0.000141f, -0.000152f, -0.000340f, - +0.000094f, +0.000125f, -0.000121f, +0.000185f, +0.000112f, +0.000028f, -0.000063f, -0.000258f, +0.000167f, +0.000006f, - +0.000030f, +0.000010f, -0.000260f, -0.000128f, -0.000015f, -0.000014f, +0.000026f, +0.000139f, -0.000014f, -0.000083f, - -0.000005f, +0.000056f, +0.000001f, +0.000085f, +0.000002f, -0.000163f, +0.000037f, +0.000003f, -0.000021f, -0.000017f, - +0.000008f, +0.000016f, +0.000041f, -0.000031f, -0.000050f, -0.000034f - }, - { - -0.000524f, -0.004345f, +0.000853f, +0.000153f, +0.000139f, -0.000348f, -0.000131f, -0.000368f, +0.000250f, -0.000058f, - +0.000449f, +0.000216f, +0.000876f, +0.000248f, -0.002889f, +0.000900f, +0.001591f, -0.000260f, +0.003368f, -0.009970f, - +0.000343f, -0.001373f, +0.001971f, +0.000136f, +0.000324f, -0.001252f, +0.000616f, -0.001486f, -0.001610f, +0.002349f, - +0.002618f, -0.000173f, -0.000385f, +0.000024f, +0.000820f, -0.000471f, -0.000058f, +0.000360f, -0.000426f, +0.000030f, - -0.000414f, +0.000975f, +0.000803f, +0.000142f, +0.000256f, -0.000193f, -0.000256f, -0.000088f, -0.000070f, -0.000594f, - -0.000286f, -0.000071f, -0.000306f, -0.000257f, -0.000476f, -0.000098f, +0.000244f, +0.000048f, +0.000318f, -0.000049f, - +0.000042f, -0.000060f, -0.000110f, +0.000079f, -0.000064f, -0.000021f, +0.000022f, -0.000257f, +0.000092f, -0.000135f, - +0.000037f, +0.000138f, +0.000100f, -0.000014f, -0.000124f, +0.000011f, -0.000043f, +0.000274f, -0.000098f, +0.000066f, - +0.000012f, +0.000158f, +0.000057f, -0.000039f, -0.000103f, -0.000003f, +0.000066f, -0.000090f, +0.000019f, +0.000122f, - -0.000020f, -0.000108f, -0.000015f, +0.000047f, +0.000052f, +0.000102f - }, - { - +0.005400f, -0.091752f, +0.011522f, +0.002923f, -0.000876f, +0.000806f, +0.000049f, +0.000648f, +0.000896f, -0.001041f, - +0.000238f, -0.000014f, -0.000010f, -0.000611f, -0.000004f, +0.000747f, +0.000630f, -0.000522f, +0.001555f, -0.000592f, - -0.000576f, -0.000640f, -0.000007f, -0.000143f, +0.000480f, -0.000038f, -0.000324f, +0.000844f, -0.000400f, +0.000273f, - +0.000522f, -0.000258f, +0.000651f, -0.000631f, -0.000040f, -0.000019f, +0.000202f, -0.001640f, +0.000742f, -0.000487f, - +0.000375f, +0.001086f, -0.000474f, +0.000017f, +0.000273f, +0.000339f, +0.000113f, -0.000090f, -0.000150f, -0.000255f, - -0.000319f, -0.000234f, -0.000277f, -0.000008f, +0.000089f, -0.000031f, +0.000064f, +0.000066f, -0.000120f, +0.000045f, - +0.000010f, +0.000079f, -0.000042f, -0.000022f, -0.000234f, -0.000045f, +0.000063f, +0.000018f, -0.000156f, +0.000007f, - +0.000272f, -0.000160f, -0.000169f, +0.000106f, +0.000069f, -0.000150f, +0.000041f, +0.000018f, -0.000069f, -0.000050f, - +0.000089f, -0.000039f, +0.000069f, +0.000112f, +0.000009f, -0.000098f, +0.000049f, +0.000011f, -0.000031f, -0.000067f, - -0.000006f, +0.000040f, -0.000070f, +0.000004f, -0.000015f, -0.000005f - }, - { - -0.000634f, +0.001003f, +0.001818f, -0.000208f, +0.000193f, +0.000098f, -0.000013f, -0.000499f, -0.000041f, +0.000295f, - +0.000465f, +0.000087f, +0.001539f, -0.000048f, -0.010765f, +0.000021f, -0.000995f, -0.001081f, +0.000096f, +0.002248f, - -0.001984f, -0.000607f, +0.002125f, +0.002430f, +0.001389f, -0.002476f, +0.001262f, +0.000478f, -0.000937f, -0.000852f, - +0.000780f, +0.000129f, -0.000628f, +0.000111f, -0.000210f, -0.000009f, +0.000222f, +0.000348f, -0.000785f, +0.001022f, - -0.000241f, -0.000114f, +0.000272f, +0.000080f, -0.000578f, +0.000085f, -0.000025f, +0.000450f, -0.000752f, -0.000467f, - +0.000229f, -0.000153f, -0.000347f, -0.000240f, +0.000341f, +0.000116f, -0.000091f, +0.000018f, -0.000046f, +0.000041f, - -0.000227f, -0.000174f, +0.000034f, +0.000137f, +0.000081f, -0.000323f, -0.000215f, +0.000116f, +0.000171f, +0.000054f, - -0.000044f, +0.000040f, -0.000130f, -0.000098f, +0.000100f, -0.000002f, +0.000018f, +0.000095f, +0.000044f, +0.000013f, - +0.000083f, +0.000053f, -0.000022f, -0.000131f, -0.000094f, +0.000001f, -0.000022f, +0.000062f, -0.000036f, +0.000028f, - +0.000025f, -0.000020f, +0.000033f, +0.000066f, +0.000009f, +0.000016f - }, - { - -0.006076f, +0.054560f, -0.002434f, -0.001149f, -0.000496f, +0.000336f, +0.000503f, +0.000828f, -0.000970f, +0.000414f, - +0.002297f, -0.000199f, -0.001213f, -0.001767f, +0.001215f, -0.001408f, +0.000104f, -0.000396f, -0.000129f, -0.000208f, - -0.000347f, -0.000099f, -0.000956f, +0.000440f, +0.000510f, -0.000608f, +0.000839f, +0.000185f, -0.000568f, -0.000218f, - -0.000318f, +0.000570f, +0.000069f, +0.000840f, +0.000229f, -0.000141f, -0.000576f, -0.000733f, +0.000343f, -0.000659f, - -0.000428f, +0.000785f, -0.000032f, +0.000031f, -0.000011f, -0.000324f, +0.000230f, +0.000331f, +0.000162f, -0.001155f, - -0.000194f, +0.000208f, -0.000215f, +0.000250f, +0.000542f, +0.000002f, -0.000140f, -0.000303f, +0.000316f, -0.000170f, - +0.000027f, -0.000027f, -0.000004f, +0.000093f, -0.000009f, -0.000239f, +0.000045f, +0.000066f, +0.000040f, +0.000074f, - +0.000100f, -0.000013f, -0.000005f, +0.000127f, +0.000078f, -0.000029f, -0.000160f, +0.000076f, -0.000090f, +0.000103f, - -0.000127f, +0.000060f, +0.000004f, +0.000015f, -0.000048f, -0.000057f, -0.000033f, +0.000077f, +0.000073f, -0.000036f, - +0.000035f, +0.000072f, -0.000021f, -0.000046f, +0.000072f, +0.000014f - }, - { - -0.000513f, +0.005073f, +0.001327f, +0.000281f, -0.000844f, -0.000334f, +0.000947f, +0.001125f, -0.001000f, -0.000338f, - -0.000512f, +0.000749f, -0.001411f, -0.002237f, -0.001042f, +0.003844f, +0.001111f, -0.003533f, +0.001053f, +0.001158f, - -0.001417f, -0.000119f, -0.000502f, +0.000466f, +0.001235f, +0.000443f, +0.000590f, +0.000899f, -0.000744f, -0.000559f, - +0.000049f, -0.000838f, +0.000384f, -0.000859f, -0.000082f, -0.000141f, +0.000162f, +0.000078f, +0.000683f, -0.000247f, - +0.000519f, +0.000494f, +0.000220f, -0.000150f, -0.000333f, +0.000313f, +0.000016f, +0.000462f, -0.000555f, -0.000109f, - +0.000230f, +0.000042f, +0.000393f, -0.000097f, -0.000034f, -0.000365f, +0.000184f, -0.000196f, -0.000054f, +0.000146f, - -0.000126f, +0.000134f, +0.000085f, -0.000174f, -0.000059f, -0.000395f, -0.000039f, -0.000072f, +0.000289f, +0.000256f, - -0.000129f, +0.000036f, -0.000059f, -0.000079f, -0.000020f, +0.000100f, -0.000016f, -0.000077f, -0.000003f, -0.000025f, - -0.000008f, -0.000058f, +0.000028f, +0.000003f, -0.000023f, +0.000091f, -0.000012f, +0.000012f, -0.000019f, -0.000075f, - +0.000061f, -0.000002f, -0.000032f, -0.000041f, +0.000019f, +0.000096f - }, - { - +0.004265f, +0.041440f, +0.004288f, +0.003727f, -0.001515f, +0.002801f, +0.010016f, -0.001590f, -0.000519f, -0.000829f, - -0.000392f, -0.000063f, -0.000116f, -0.000379f, +0.000510f, +0.000820f, -0.001371f, -0.001391f, -0.000735f, -0.000655f, - +0.000164f, -0.000290f, +0.000287f, -0.000404f, -0.000557f, +0.000128f, -0.000363f, -0.000732f, -0.000627f, +0.000482f, - -0.000007f, -0.000056f, -0.000069f, -0.000563f, -0.000300f, +0.000178f, -0.000502f, +0.000012f, +0.000043f, -0.000208f, - -0.000211f, +0.000529f, -0.000532f, -0.000419f, -0.000051f, -0.000135f, +0.000018f, +0.000316f, -0.000044f, -0.000119f, - +0.000454f, -0.000042f, -0.000154f, +0.000361f, +0.000051f, -0.000083f, -0.000554f, -0.000057f, +0.000118f, +0.000170f, - -0.000001f, +0.000024f, +0.000017f, -0.000046f, -0.000093f, -0.000015f, +0.000007f, -0.000095f, -0.000058f, -0.000049f, - +0.000077f, -0.000055f, -0.000088f, +0.000028f, +0.000105f, +0.000026f, +0.000132f, +0.000084f, -0.000115f, +0.000173f, - -0.000110f, -0.000007f, +0.000028f, -0.000125f, +0.000012f, -0.000051f, +0.000140f, -0.000014f, +0.000045f, -0.000018f, - -0.000048f, +0.000004f, +0.000022f, -0.000013f, -0.000086f, +0.000059f - }, - { - +0.000646f, -0.000602f, -0.002076f, +0.000161f, +0.000352f, +0.000233f, -0.000094f, -0.000681f, +0.000088f, +0.000153f, - +0.000249f, +0.000667f, -0.004993f, -0.002453f, +0.000635f, +0.000846f, -0.002632f, -0.000531f, +0.000128f, -0.000773f, - +0.001480f, -0.003233f, -0.000401f, +0.000404f, +0.000431f, -0.000852f, -0.001359f, -0.000446f, -0.000103f, +0.001007f, - +0.000721f, -0.000296f, -0.000114f, +0.000259f, -0.000442f, -0.000042f, -0.001029f, -0.000665f, +0.001216f, -0.000007f, - +0.000133f, +0.000156f, -0.000372f, +0.000124f, -0.000044f, -0.000228f, -0.000085f, +0.000264f, +0.000165f, +0.000072f, - +0.000138f, -0.000224f, -0.000386f, +0.000175f, -0.000102f, +0.000308f, +0.000050f, -0.000023f, -0.000341f, +0.000020f, - -0.000298f, +0.000051f, +0.000130f, -0.000018f, -0.000245f, -0.000172f, +0.000212f, -0.000069f, -0.000013f, -0.000081f, - +0.000185f, +0.000057f, -0.000178f, +0.000054f, -0.000050f, -0.000031f, +0.000095f, +0.000118f, +0.000017f, +0.000021f, - -0.000114f, +0.000078f, +0.000033f, -0.000026f, -0.000029f, +0.000015f, +0.000041f, -0.000057f, -0.000069f, +0.000005f, - -0.000014f, +0.000032f, +0.000038f, +0.000040f, -0.000041f, +0.000003f - }, - { - +0.000260f, +0.002004f, -0.003471f, +0.004301f, -0.002518f, +0.001707f, +0.004089f, +0.001147f, +0.000922f, -0.001136f, - +0.000071f, +0.000251f, +0.001725f, -0.003855f, -0.003440f, +0.001547f, -0.001442f, -0.000000f, +0.000122f, +0.000024f, - +0.000864f, -0.000007f, +0.000421f, +0.000644f, +0.001369f, +0.000140f, +0.001085f, -0.000842f, +0.001378f, +0.001180f, - -0.000652f, -0.000720f, -0.000024f, +0.000519f, -0.000498f, +0.000557f, -0.000177f, +0.000477f, -0.000483f, +0.000778f, - +0.000229f, +0.000287f, +0.000161f, +0.000090f, -0.000826f, -0.000300f, -0.000395f, +0.000331f, -0.000713f, -0.000318f, - +0.000331f, +0.000416f, +0.000103f, +0.000046f, +0.000113f, +0.000290f, +0.000127f, +0.000179f, -0.000078f, +0.000068f, - +0.000163f, -0.000133f, +0.000074f, +0.000137f, -0.000068f, -0.000120f, +0.000008f, -0.000012f, -0.000185f, -0.000011f, - +0.000136f, -0.000043f, +0.000019f, +0.000160f, +0.000104f, -0.000027f, -0.000085f, -0.000028f, +0.000119f, +0.000026f, - +0.000191f, -0.000166f, -0.000133f, -0.000059f, +0.000063f, +0.000173f, +0.000006f, -0.000163f, +0.000018f, -0.000057f, - -0.000008f, -0.000038f, -0.000025f, +0.000089f, +0.000001f, +0.000004f - }, - { - +0.000251f, +0.005872f, -0.000966f, -0.001688f, -0.000385f, -0.000384f, -0.000270f, -0.000215f, +0.001046f, -0.000026f, - -0.000260f, +0.001413f, -0.000849f, -0.003404f, +0.033013f, -0.001366f, -0.000836f, -0.002464f, -0.001581f, +0.002352f, - +0.001448f, +0.000782f, +0.001710f, +0.000193f, -0.001939f, +0.001067f, +0.000158f, +0.000930f, +0.000539f, +0.002857f, - -0.001013f, +0.000834f, -0.000866f, -0.000192f, +0.000012f, -0.000080f, +0.000030f, -0.000444f, -0.000029f, -0.000368f, - -0.000391f, +0.000300f, +0.000137f, -0.000322f, -0.000223f, +0.000183f, -0.000677f, -0.000166f, -0.000098f, -0.000065f, - -0.000242f, +0.000298f, +0.000110f, -0.000242f, +0.000268f, -0.000368f, -0.000181f, +0.000002f, -0.000010f, -0.000105f, - -0.000079f, +0.000523f, -0.000190f, -0.000080f, +0.000141f, +0.000262f, -0.000099f, -0.000156f, +0.000056f, +0.000043f, - +0.000141f, +0.000070f, +0.000002f, -0.000103f, -0.000040f, +0.000065f, +0.000102f, -0.000187f, -0.000051f, -0.000228f, - -0.000012f, +0.000145f, -0.000143f, +0.000033f, +0.000050f, -0.000074f, -0.000104f, -0.000069f, +0.000044f, -0.000101f, - -0.000033f, +0.000104f, +0.000064f, -0.000014f, +0.000012f, +0.000051f - }, - { - -0.003883f, +0.007999f, +0.003868f, -0.002244f, -0.000428f, -0.000596f, +0.001012f, +0.000050f, -0.000450f, +0.000229f, - +0.000209f, +0.000575f, +0.001619f, +0.000373f, -0.007890f, +0.000207f, +0.002943f, +0.001339f, -0.000627f, +0.000895f, - -0.001446f, -0.000355f, -0.000528f, +0.000341f, +0.000564f, -0.000786f, -0.000940f, +0.001589f, +0.000141f, +0.001307f, - -0.000441f, +0.000089f, +0.000163f, -0.000421f, +0.000368f, -0.000201f, -0.000623f, -0.000451f, -0.000458f, +0.000510f, - +0.000529f, +0.000203f, +0.000278f, +0.000114f, +0.000348f, +0.000299f, -0.000049f, -0.000202f, +0.000387f, -0.000313f, - -0.000018f, -0.000087f, +0.000082f, +0.000386f, +0.000271f, +0.000363f, -0.000043f, -0.000185f, +0.000227f, +0.000225f, - -0.000022f, +0.000003f, -0.000341f, -0.000086f, +0.000071f, -0.000004f, +0.000016f, -0.000237f, +0.000054f, -0.000084f, - +0.000150f, -0.000104f, -0.000246f, -0.000033f, +0.000252f, +0.000050f, -0.000131f, +0.000096f, -0.000028f, -0.000020f, - -0.000025f, -0.000044f, -0.000015f, +0.000003f, +0.000001f, +0.000045f, +0.000013f, -0.000119f, +0.000184f, -0.000110f, - +0.000098f, +0.000041f, -0.000020f, +0.000020f, -0.000010f, +0.000039f - } - }, - { - { - -0.000332f, -0.011102f, -0.004470f, +0.001800f, +0.000766f, -0.000106f, +0.000263f, +0.000580f, +0.000197f, +0.000416f, - +0.000036f, -0.000182f, -0.000804f, -0.000866f, -0.000667f, -0.000030f, +0.000325f, -0.000983f, -0.000890f, -0.000830f, - +0.001845f, -0.000818f, +0.000122f, +0.001008f, +0.001072f, +0.001550f, +0.000946f, +0.001222f, +0.000854f, +0.000906f, - +0.000350f, +0.001718f, -0.000239f, -0.001423f, -0.000108f, -0.002470f, -0.000348f, +0.000379f, +0.000072f, +0.000708f, - -0.000127f, -0.000165f, -0.000066f, +0.000300f, -0.000211f, +0.000324f, +0.000062f, -0.000005f, +0.000242f, -0.000422f, - -0.000097f, -0.000583f, -0.000155f, -0.000268f, -0.000148f, +0.000285f, +0.000229f, +0.000314f, +0.000030f, -0.000017f, - -0.000134f, -0.000178f, +0.000251f, +0.000253f, -0.000011f, -0.000002f, -0.000035f, -0.000017f, -0.000104f, -0.000024f, - -0.000007f, +0.000003f, +0.000141f, +0.000009f, -0.000074f, -0.000147f, +0.000088f, +0.000024f, -0.000045f, +0.000049f, - -0.000023f, +0.000010f, -0.000072f, -0.000013f, +0.000051f, +0.000050f, -0.000006f, -0.000015f, +0.000001f, +0.000090f, - -0.000112f, -0.000029f, +0.000039f, +0.000051f, +0.000038f, -0.000004f - }, - { - +0.008797f, -0.040961f, -0.029053f, -0.002101f, -0.000289f, -0.000846f, +0.000035f, +0.000950f, -0.000117f, -0.000251f, - -0.000329f, -0.000440f, +0.000706f, +0.001599f, -0.001951f, -0.000300f, -0.000174f, +0.000411f, +0.001441f, -0.001029f, - +0.000069f, -0.000209f, -0.000237f, +0.000143f, +0.000189f, -0.000106f, -0.000111f, +0.000924f, -0.000482f, +0.000348f, - -0.000575f, +0.000417f, -0.000599f, +0.000933f, -0.001055f, +0.000108f, -0.001112f, +0.000788f, +0.000559f, -0.000793f, - +0.000105f, +0.000635f, +0.000307f, -0.000117f, -0.000435f, +0.000333f, -0.000043f, -0.000289f, +0.000345f, -0.000543f, - -0.000145f, -0.000831f, -0.000425f, -0.000112f, -0.000016f, +0.000067f, -0.000010f, +0.000147f, -0.000123f, -0.000130f, - -0.000122f, +0.000104f, +0.000058f, +0.000083f, +0.000229f, +0.000131f, -0.000041f, -0.000276f, -0.000148f, -0.000129f, - -0.000022f, +0.000134f, -0.000029f, -0.000006f, +0.000080f, -0.000072f, -0.000043f, +0.000100f, +0.000040f, -0.000109f, - -0.000013f, +0.000068f, -0.000039f, -0.000032f, +0.000040f, +0.000158f, -0.000042f, +0.000006f, -0.000044f, -0.000018f, - -0.000004f, -0.000032f, -0.000010f, +0.000021f, -0.000013f, +0.000033f - }, - { - +0.004364f, +0.011511f, -0.010102f, -0.000362f, +0.000686f, +0.000191f, -0.000382f, +0.000055f, +0.000685f, +0.001110f, - -0.000144f, -0.000639f, -0.000397f, +0.000079f, +0.004698f, +0.000358f, -0.002063f, +0.001302f, +0.001006f, -0.000864f, - +0.000916f, +0.001009f, -0.000130f, +0.000530f, -0.000137f, -0.000477f, +0.000053f, +0.000514f, +0.000984f, +0.000356f, - +0.000333f, +0.000588f, +0.000406f, +0.000462f, +0.000047f, -0.000023f, +0.000718f, -0.000626f, +0.000441f, +0.000730f, - -0.000390f, +0.000582f, +0.000222f, -0.000324f, +0.000168f, -0.000135f, -0.000322f, -0.000343f, -0.000655f, +0.000116f, - +0.000417f, -0.000312f, -0.000029f, -0.000287f, +0.000038f, -0.000079f, -0.000436f, -0.000082f, +0.000061f, +0.000035f, - -0.000003f, -0.000218f, -0.000043f, -0.000127f, -0.000285f, -0.000233f, -0.000216f, -0.000042f, +0.000182f, -0.000028f, - -0.000109f, -0.000031f, +0.000098f, -0.000046f, +0.000034f, +0.000021f, +0.000023f, +0.000018f, +0.000083f, -0.000103f, - +0.000027f, -0.000044f, -0.000114f, +0.000019f, +0.000083f, -0.000055f, +0.000025f, +0.000042f, -0.000041f, +0.000061f, - -0.000038f, -0.000042f, -0.000049f, +0.000035f, -0.000033f, -0.000053f - }, - { - +0.000339f, +0.008694f, -0.000061f, -0.000570f, +0.000251f, +0.000154f, -0.000206f, -0.000169f, -0.000135f, +0.000465f, - +0.000598f, +0.000430f, -0.000344f, +0.001282f, +0.006298f, -0.002177f, -0.004194f, +0.000377f, +0.000329f, +0.000677f, - +0.001267f, +0.000211f, +0.000221f, -0.000390f, -0.000474f, +0.000356f, -0.002770f, -0.002314f, -0.000346f, +0.000315f, - -0.002665f, +0.000591f, +0.001375f, +0.000461f, -0.000044f, +0.001084f, +0.000862f, +0.000088f, -0.000322f, +0.000141f, - -0.000194f, -0.000202f, +0.000123f, -0.000056f, +0.000200f, -0.000499f, -0.000238f, +0.000230f, -0.000324f, +0.000009f, - +0.000207f, -0.000167f, -0.000133f, +0.000248f, -0.000329f, -0.000032f, +0.000128f, -0.000283f, +0.000141f, +0.000199f, - +0.000003f, -0.000118f, +0.000129f, -0.000236f, -0.000117f, +0.000200f, -0.000010f, +0.000002f, -0.000029f, +0.000087f, - +0.000085f, -0.000081f, +0.000060f, -0.000040f, +0.000111f, -0.000017f, -0.000126f, -0.000071f, +0.000105f, -0.000002f, - +0.000053f, -0.000041f, +0.000045f, -0.000011f, -0.000002f, +0.000075f, -0.000044f, -0.000020f, -0.000018f, -0.000021f, - -0.000028f, -0.000052f, -0.000047f, +0.000042f, -0.000018f, -0.000027f - }, - { - -0.003880f, -0.034254f, -0.000037f, -0.002594f, +0.000544f, -0.000161f, +0.000078f, -0.000649f, +0.000271f, +0.000788f, - -0.000884f, -0.000441f, +0.000623f, +0.001675f, -0.000828f, +0.000741f, +0.000466f, +0.005467f, +0.000740f, -0.000107f, - -0.000481f, -0.000287f, +0.000899f, +0.000387f, +0.000497f, +0.000166f, +0.000324f, +0.000187f, -0.000094f, -0.000736f, - -0.001065f, -0.000648f, -0.000699f, +0.000346f, +0.000354f, -0.000493f, -0.000471f, -0.000887f, -0.000326f, +0.000672f, - +0.000040f, -0.000273f, -0.000115f, -0.000121f, -0.000228f, -0.000735f, -0.000218f, +0.000108f, -0.000107f, -0.000000f, - -0.000414f, -0.000295f, +0.000114f, -0.000065f, +0.000160f, -0.000089f, +0.000373f, +0.000080f, -0.000322f, +0.000062f, - +0.000040f, -0.000072f, -0.000145f, +0.000115f, +0.000103f, -0.000142f, -0.000021f, +0.000069f, -0.000012f, +0.000002f, - -0.000051f, +0.000088f, +0.000009f, -0.000180f, -0.000058f, +0.000139f, -0.000162f, +0.000164f, -0.000015f, -0.000120f, - -0.000061f, +0.000061f, -0.000079f, +0.000128f, -0.000014f, -0.000063f, +0.000009f, -0.000068f, +0.000069f, +0.000031f, - +0.000024f, +0.000012f, +0.000021f, -0.000000f, -0.000041f, -0.000023f - }, - { - -0.000300f, -0.007224f, +0.000494f, +0.000734f, +0.000022f, -0.000057f, -0.000416f, -0.000194f, -0.000136f, +0.000120f, - +0.000302f, +0.000680f, +0.001085f, +0.002054f, -0.001108f, +0.000219f, -0.000453f, +0.000056f, +0.000663f, -0.006154f, - -0.001185f, +0.001408f, +0.000762f, +0.001950f, +0.000709f, -0.001609f, +0.001313f, -0.001745f, -0.002145f, +0.002179f, - +0.001574f, +0.000711f, -0.000072f, -0.000080f, +0.000050f, +0.000226f, +0.000224f, -0.000195f, -0.000202f, +0.000064f, - -0.000095f, +0.000575f, +0.000302f, +0.000156f, -0.000007f, -0.000179f, +0.000086f, -0.000008f, -0.000440f, -0.000195f, - -0.000332f, -0.000222f, -0.000158f, -0.000231f, -0.000395f, -0.000061f, +0.000257f, +0.000021f, +0.000229f, +0.000082f, - +0.000043f, +0.000022f, -0.000134f, +0.000067f, -0.000141f, -0.000013f, +0.000038f, -0.000145f, +0.000137f, +0.000192f, - -0.000064f, -0.000004f, +0.000107f, +0.000004f, -0.000138f, -0.000160f, -0.000062f, +0.000008f, +0.000013f, +0.000115f, - -0.000083f, +0.000132f, +0.000103f, +0.000044f, -0.000078f, -0.000031f, -0.000001f, +0.000007f, -0.000018f, +0.000024f, - +0.000063f, -0.000035f, -0.000105f, +0.000021f, +0.000075f, +0.000050f - }, - { - -0.008112f, -0.045556f, -0.008426f, +0.001732f, +0.000265f, -0.000193f, +0.000087f, +0.000505f, +0.000364f, +0.000021f, - -0.000644f, +0.000552f, +0.000063f, -0.000904f, -0.000002f, +0.000890f, -0.000057f, -0.000565f, +0.001162f, +0.000192f, - +0.000361f, -0.000270f, -0.000130f, +0.000187f, -0.000417f, +0.000159f, +0.000041f, +0.000138f, +0.000530f, -0.000259f, - +0.000505f, -0.000618f, -0.000286f, +0.000371f, -0.000614f, -0.000134f, +0.000309f, -0.001032f, -0.000173f, +0.000387f, - -0.000033f, +0.000428f, +0.000656f, -0.000148f, +0.000263f, -0.000017f, +0.000686f, +0.000231f, -0.000292f, +0.000046f, - -0.000259f, -0.000295f, -0.000275f, +0.000188f, +0.000004f, -0.000116f, -0.000242f, +0.000031f, -0.000168f, -0.000089f, - +0.000090f, +0.000071f, -0.000092f, -0.000105f, -0.000200f, -0.000178f, -0.000223f, +0.000126f, -0.000037f, -0.000033f, - +0.000297f, +0.000019f, -0.000286f, +0.000019f, +0.000090f, -0.000066f, -0.000045f, +0.000033f, -0.000083f, -0.000094f, - +0.000097f, +0.000049f, -0.000029f, -0.000010f, +0.000095f, -0.000102f, -0.000063f, +0.000012f, +0.000012f, +0.000030f, - -0.000033f, +0.000050f, +0.000017f, +0.000002f, -0.000035f, +0.000002f - }, - { - +0.000083f, -0.002175f, +0.000968f, -0.000113f, +0.000092f, +0.000135f, +0.000041f, -0.000096f, -0.000540f, +0.000090f, - +0.000874f, +0.000875f, +0.000896f, +0.001034f, -0.003820f, -0.001973f, -0.001062f, +0.001929f, +0.000548f, -0.000103f, - +0.001499f, +0.000114f, +0.001694f, +0.000986f, -0.000193f, +0.002264f, +0.001059f, -0.001439f, +0.000675f, +0.000480f, - +0.000544f, -0.000601f, -0.000387f, -0.000380f, +0.000426f, +0.000075f, +0.000071f, -0.000055f, -0.000756f, +0.000753f, - -0.000351f, +0.000516f, +0.000185f, +0.000255f, -0.000554f, +0.000140f, -0.000108f, +0.000433f, -0.000192f, -0.000356f, - -0.000275f, -0.000139f, -0.000208f, -0.000222f, -0.000053f, +0.000182f, -0.000144f, -0.000286f, +0.000234f, +0.000143f, - -0.000310f, -0.000250f, -0.000042f, +0.000080f, +0.000087f, -0.000101f, -0.000180f, -0.000025f, +0.000209f, +0.000038f, - +0.000035f, -0.000052f, -0.000031f, -0.000117f, -0.000021f, +0.000027f, -0.000054f, -0.000034f, +0.000060f, -0.000038f, - +0.000129f, +0.000105f, +0.000017f, -0.000079f, -0.000107f, -0.000039f, -0.000049f, -0.000000f, -0.000013f, -0.000043f, - +0.000035f, -0.000023f, -0.000010f, +0.000072f, +0.000041f, +0.000020f - }, - { - +0.002741f, +0.040632f, +0.001226f, -0.003657f, -0.000355f, -0.000027f, +0.000760f, +0.000968f, -0.000547f, -0.000505f, - +0.001516f, +0.000833f, +0.000250f, -0.002869f, +0.001844f, -0.001255f, -0.000670f, +0.000123f, -0.000071f, -0.000690f, - -0.001091f, +0.000027f, -0.000817f, -0.000154f, +0.000484f, +0.000548f, -0.000312f, +0.000012f, +0.000687f, -0.000451f, - -0.000144f, -0.000169f, +0.000121f, +0.000543f, +0.000039f, -0.000419f, +0.000831f, -0.000910f, -0.000243f, -0.000264f, - +0.000344f, +0.000039f, -0.000022f, -0.000297f, +0.000126f, -0.000007f, -0.000410f, +0.000120f, +0.000313f, -0.000930f, - -0.000411f, +0.000203f, +0.000075f, +0.000196f, +0.000554f, +0.000171f, -0.000278f, -0.000152f, +0.000207f, +0.000172f, - -0.000002f, -0.000011f, +0.000030f, +0.000074f, +0.000171f, -0.000040f, -0.000147f, +0.000067f, +0.000022f, -0.000026f, - +0.000152f, +0.000197f, -0.000004f, +0.000084f, -0.000017f, +0.000087f, -0.000121f, -0.000033f, -0.000057f, +0.000036f, - -0.000048f, +0.000093f, +0.000081f, +0.000010f, +0.000076f, -0.000011f, -0.000072f, +0.000004f, -0.000014f, +0.000004f, - +0.000057f, +0.000025f, +0.000045f, -0.000064f, +0.000007f, +0.000050f - }, - { - +0.000686f, +0.008614f, -0.003023f, -0.000864f, -0.000156f, -0.001704f, +0.001125f, +0.001298f, -0.000400f, -0.000022f, - -0.001012f, +0.001126f, -0.000204f, -0.001244f, -0.001239f, -0.000116f, +0.002552f, -0.002471f, -0.003064f, +0.001213f, - +0.000978f, +0.000002f, -0.000928f, -0.000513f, +0.000710f, +0.000921f, -0.000085f, +0.000154f, +0.000249f, -0.000170f, - +0.000041f, +0.000065f, -0.000504f, -0.000771f, -0.000013f, -0.000641f, -0.000690f, -0.000286f, +0.000384f, -0.000299f, - +0.000180f, +0.000098f, +0.000277f, +0.000372f, -0.000356f, +0.000088f, +0.000148f, +0.000106f, -0.000041f, -0.000286f, - +0.000058f, -0.000058f, -0.000149f, -0.000046f, +0.000315f, -0.000056f, -0.000075f, -0.000007f, -0.000195f, -0.000092f, - +0.000101f, +0.000130f, +0.000091f, -0.000067f, -0.000001f, -0.000116f, -0.000060f, -0.000207f, -0.000148f, +0.000261f, - +0.000006f, +0.000044f, +0.000092f, -0.000049f, -0.000012f, +0.000041f, +0.000008f, +0.000019f, +0.000056f, +0.000079f, - +0.000071f, -0.000026f, -0.000050f, -0.000001f, -0.000088f, -0.000012f, +0.000089f, -0.000003f, +0.000018f, -0.000047f, - +0.000018f, +0.000001f, -0.000027f, -0.000013f, -0.000046f, +0.000035f - }, - { - -0.000640f, +0.047561f, -0.000689f, +0.004519f, +0.000706f, +0.002294f, +0.007543f, +0.000525f, -0.000432f, -0.000686f, - -0.000182f, -0.000174f, -0.000038f, -0.000815f, -0.001183f, +0.000748f, +0.000380f, -0.002089f, -0.000184f, -0.000900f, - +0.000158f, -0.000722f, -0.000185f, -0.000288f, -0.000504f, -0.000381f, -0.000178f, -0.000210f, -0.000764f, -0.000080f, - -0.000292f, +0.000273f, -0.000021f, -0.000192f, -0.000160f, +0.000154f, -0.000127f, -0.000554f, -0.000137f, -0.000160f, - -0.000226f, +0.000220f, -0.000158f, -0.000221f, +0.000366f, -0.000062f, -0.000129f, +0.000058f, +0.000195f, +0.000186f, - +0.000057f, -0.000026f, -0.000076f, +0.000369f, +0.000188f, +0.000107f, -0.000274f, -0.000174f, +0.000029f, +0.000174f, - -0.000000f, +0.000195f, -0.000012f, +0.000014f, -0.000049f, -0.000093f, +0.000036f, -0.000034f, -0.000079f, +0.000010f, - +0.000030f, -0.000048f, -0.000079f, -0.000100f, -0.000042f, -0.000057f, +0.000046f, +0.000173f, -0.000017f, +0.000095f, - -0.000098f, -0.000085f, +0.000094f, -0.000133f, +0.000004f, -0.000075f, -0.000005f, +0.000035f, +0.000025f, -0.000021f, - -0.000066f, +0.000014f, +0.000065f, -0.000012f, -0.000092f, -0.000003f - }, - { - -0.000600f, -0.003086f, +0.001019f, -0.000109f, -0.000054f, +0.000295f, +0.000089f, -0.000273f, -0.000356f, +0.000452f, - +0.000266f, +0.000160f, -0.003006f, -0.004283f, +0.002785f, -0.001543f, -0.001459f, -0.001420f, -0.000282f, +0.000911f, - -0.000499f, -0.002799f, -0.002040f, +0.000562f, -0.000039f, +0.000861f, -0.001892f, +0.000044f, -0.001499f, +0.001334f, - +0.001079f, -0.000388f, +0.000337f, +0.000668f, -0.000628f, -0.000400f, -0.000450f, -0.000285f, +0.000190f, -0.000275f, - -0.000108f, +0.000403f, -0.000358f, -0.000413f, -0.000160f, -0.000329f, +0.000326f, -0.000294f, +0.000432f, -0.000276f, - -0.000246f, +0.000062f, -0.000165f, +0.000006f, -0.000022f, +0.000173f, +0.000328f, +0.000414f, +0.000002f, -0.000034f, - -0.000211f, -0.000124f, +0.000139f, +0.000134f, -0.000079f, -0.000161f, +0.000246f, +0.000012f, +0.000083f, -0.000041f, - -0.000087f, -0.000030f, -0.000114f, -0.000145f, -0.000033f, -0.000096f, +0.000038f, +0.000147f, +0.000059f, +0.000036f, - -0.000034f, +0.000046f, +0.000053f, +0.000021f, -0.000024f, +0.000043f, +0.000070f, -0.000043f, -0.000034f, -0.000031f, - -0.000017f, +0.000016f, +0.000013f, +0.000036f, -0.000051f, -0.000003f - }, - { - -0.000043f, +0.005544f, +0.000432f, -0.001659f, -0.000271f, -0.001684f, +0.002977f, +0.001482f, +0.001665f, -0.000662f, - -0.001551f, +0.000148f, -0.001905f, +0.000952f, -0.000885f, +0.000678f, -0.000499f, -0.000878f, +0.000289f, -0.001164f, - +0.000485f, +0.000447f, +0.000624f, +0.001167f, +0.000230f, -0.000114f, -0.000326f, -0.000047f, +0.000486f, +0.000481f, - -0.000447f, -0.000612f, +0.000118f, +0.000348f, -0.000041f, -0.000374f, +0.000247f, +0.000311f, -0.000497f, +0.000367f, - +0.000374f, +0.000449f, +0.000495f, +0.000266f, +0.000212f, -0.000085f, +0.000013f, +0.000192f, -0.000310f, -0.000254f, - +0.000333f, -0.000034f, +0.000471f, -0.000402f, -0.000209f, +0.000128f, +0.000038f, +0.000413f, +0.000135f, -0.000215f, - +0.000161f, -0.000013f, +0.000162f, -0.000146f, +0.000015f, +0.000128f, +0.000024f, +0.000049f, -0.000197f, -0.000047f, - +0.000109f, +0.000040f, -0.000063f, -0.000060f, +0.000035f, +0.000024f, -0.000013f, -0.000082f, -0.000006f, -0.000079f, - +0.000125f, +0.000051f, -0.000084f, -0.000189f, -0.000031f, +0.000155f, +0.000154f, +0.000037f, +0.000010f, +0.000001f, - -0.000011f, -0.000037f, -0.000082f, +0.000005f, -0.000033f, -0.000054f - }, - { - +0.000168f, +0.005495f, +0.001993f, -0.001889f, -0.000690f, -0.000160f, -0.000053f, -0.000580f, +0.000269f, +0.000998f, - +0.000660f, +0.000506f, -0.000478f, +0.012134f, +0.004761f, +0.005153f, -0.003821f, -0.001745f, -0.000247f, -0.000153f, - +0.001063f, -0.000121f, +0.000581f, +0.000338f, -0.000166f, -0.002081f, -0.000416f, +0.001588f, +0.000237f, +0.002524f, - +0.000293f, +0.000605f, -0.000824f, -0.000457f, +0.001458f, +0.000402f, -0.000301f, +0.000145f, -0.000791f, +0.000132f, - -0.000242f, -0.000155f, -0.000007f, -0.000295f, -0.000256f, +0.000021f, -0.000500f, -0.000141f, -0.000184f, +0.000015f, - -0.000093f, -0.000288f, +0.000198f, +0.000004f, +0.000035f, -0.000123f, -0.000134f, -0.000052f, +0.000085f, -0.000097f, - -0.000159f, +0.000152f, +0.000065f, -0.000120f, +0.000009f, +0.000218f, -0.000019f, -0.000277f, +0.000052f, -0.000006f, - +0.000184f, +0.000016f, -0.000108f, +0.000018f, +0.000030f, -0.000039f, +0.000064f, -0.000130f, -0.000148f, -0.000107f, - -0.000126f, +0.000132f, +0.000034f, -0.000034f, +0.000095f, +0.000001f, -0.000034f, -0.000052f, +0.000054f, -0.000059f, - -0.000105f, +0.000001f, +0.000087f, -0.000007f, -0.000030f, +0.000074f - }, - { - +0.002475f, -0.000910f, +0.000372f, +0.004246f, -0.001687f, -0.002168f, +0.000396f, -0.000952f, -0.000083f, +0.000551f, - -0.001544f, +0.001679f, +0.000398f, -0.002118f, -0.003196f, -0.000544f, +0.001974f, -0.000259f, +0.000203f, +0.000359f, - +0.000098f, -0.000666f, -0.000796f, -0.000372f, +0.000533f, +0.000051f, -0.000231f, -0.000505f, +0.000968f, +0.000131f, - +0.000444f, -0.000892f, +0.000319f, -0.000023f, +0.000232f, +0.000510f, -0.000096f, -0.000874f, +0.000012f, +0.000085f, - -0.000219f, +0.000568f, +0.000660f, +0.000240f, -0.000336f, +0.000284f, +0.000023f, -0.000015f, +0.000152f, -0.000313f, - -0.000096f, -0.000067f, -0.000106f, +0.000215f, +0.000277f, +0.000283f, +0.000249f, -0.000102f, +0.000174f, +0.000197f, - -0.000067f, +0.000184f, -0.000143f, -0.000138f, -0.000051f, +0.000096f, -0.000018f, -0.000099f, +0.000126f, -0.000047f, - +0.000021f, +0.000108f, -0.000242f, -0.000211f, +0.000042f, +0.000121f, +0.000061f, -0.000015f, -0.000092f, +0.000085f, - -0.000027f, -0.000150f, -0.000016f, +0.000010f, -0.000005f, -0.000003f, -0.000004f, -0.000148f, +0.000044f, +0.000034f, - +0.000024f, +0.000057f, +0.000006f, -0.000017f, -0.000051f, +0.000057f - } - }, - { - { - -0.000355f, -0.000278f, +0.000117f, -0.000383f, +0.000598f, -0.000314f, +0.000041f, +0.000506f, -0.000466f, +0.000159f, - -0.000560f, +0.000873f, -0.001611f, -0.000350f, +0.000654f, -0.000637f, +0.002258f, -0.000854f, -0.001116f, -0.001266f, - +0.001747f, -0.000183f, +0.000202f, +0.000243f, -0.000561f, +0.000482f, -0.000025f, -0.000508f, +0.000766f, +0.001453f, - -0.001767f, +0.001353f, -0.001061f, -0.000956f, +0.001196f, -0.001295f, +0.000366f, -0.000584f, -0.000588f, +0.000113f, - +0.000061f, +0.000279f, -0.000126f, -0.000063f, +0.000028f, +0.000354f, -0.000194f, +0.000248f, +0.000358f, -0.000376f, - +0.000268f, -0.000737f, -0.000246f, +0.000108f, -0.000407f, +0.000102f, +0.000331f, +0.000068f, +0.000209f, +0.000328f, - +0.000240f, -0.000158f, -0.000069f, +0.000152f, +0.000130f, -0.000041f, -0.000224f, -0.000037f, +0.000099f, -0.000047f, - -0.000013f, +0.000015f, -0.000080f, +0.000145f, -0.000065f, -0.000058f, +0.000054f, +0.000093f, -0.000031f, -0.000031f, - -0.000049f, +0.000106f, +0.000014f, -0.000043f, -0.000120f, -0.000029f, +0.000060f, +0.000019f, -0.000056f, +0.000025f, - +0.000048f, -0.000068f, +0.000018f, -0.000041f, -0.000006f, +0.000032f - }, - { - -0.010001f, -0.023968f, +0.001764f, -0.002906f, +0.001948f, +0.000458f, -0.001133f, +0.000496f, +0.001663f, -0.000031f, - -0.000176f, +0.000757f, -0.000551f, +0.001551f, -0.000382f, +0.000587f, +0.001734f, -0.000112f, -0.001076f, -0.000495f, - -0.000126f, -0.000756f, +0.000456f, +0.000457f, -0.000232f, -0.000457f, -0.000008f, +0.001320f, +0.000041f, +0.000714f, - -0.000445f, +0.000630f, -0.001055f, +0.000188f, -0.000201f, +0.000354f, -0.001252f, +0.000226f, +0.000109f, -0.000261f, - +0.000457f, +0.000380f, -0.000019f, +0.000200f, +0.000076f, -0.000347f, +0.000560f, -0.000600f, +0.000516f, -0.000322f, - +0.000346f, +0.000121f, -0.000270f, -0.000288f, +0.000021f, -0.000072f, +0.000140f, -0.000189f, -0.000188f, -0.000064f, - +0.000059f, -0.000091f, -0.000010f, -0.000125f, -0.000062f, +0.000045f, +0.000299f, -0.000050f, +0.000036f, -0.000219f, - -0.000063f, +0.000029f, +0.000061f, -0.000071f, -0.000115f, +0.000194f, -0.000109f, +0.000022f, +0.000082f, +0.000079f, - +0.000018f, -0.000032f, +0.000054f, -0.000026f, -0.000045f, -0.000093f, +0.000162f, -0.000094f, +0.000036f, -0.000043f, - -0.000018f, -0.000012f, +0.000049f, -0.000043f, +0.000014f, -0.000038f - }, - { - -0.004756f, +0.020018f, +0.009213f, +0.002699f, -0.002076f, -0.000697f, +0.000033f, -0.000570f, +0.000116f, -0.000092f, - -0.000083f, -0.000199f, -0.000079f, -0.000561f, +0.002822f, +0.000321f, -0.001260f, +0.002202f, -0.000868f, -0.001434f, - +0.000103f, +0.000665f, -0.000052f, +0.001049f, +0.000750f, -0.000087f, -0.000270f, -0.000644f, +0.000335f, +0.000560f, - +0.000229f, -0.000368f, -0.000114f, +0.000025f, +0.000278f, -0.000062f, +0.000188f, -0.000270f, +0.000138f, -0.000229f, - +0.000138f, -0.000297f, +0.000456f, +0.000024f, -0.000142f, -0.000401f, +0.000244f, +0.000109f, -0.000212f, -0.000368f, - +0.000101f, +0.000151f, +0.000220f, -0.000323f, +0.000113f, +0.000288f, -0.000077f, -0.000285f, -0.000106f, -0.000028f, - +0.000303f, -0.000083f, -0.000186f, -0.000084f, +0.000063f, -0.000078f, -0.000066f, -0.000003f, +0.000246f, +0.000099f, - -0.000095f, +0.000032f, +0.000104f, -0.000029f, -0.000095f, +0.000031f, +0.000003f, +0.000011f, +0.000001f, +0.000035f, - +0.000128f, -0.000037f, -0.000004f, -0.000144f, +0.000076f, +0.000036f, -0.000048f, +0.000040f, +0.000007f, +0.000041f, - +0.000068f, -0.000062f, -0.000012f, -0.000029f, +0.000015f, +0.000014f - }, - { - -0.000383f, +0.008210f, +0.001052f, -0.000266f, -0.000467f, +0.000037f, +0.000051f, +0.000160f, -0.000060f, -0.000070f, - +0.000022f, +0.000492f, +0.000519f, -0.000278f, +0.003190f, +0.002994f, +0.002529f, +0.001586f, +0.000221f, +0.000774f, - -0.000903f, +0.000417f, +0.001489f, -0.000399f, +0.000917f, +0.001861f, -0.000334f, -0.002320f, -0.002274f, +0.001505f, - +0.000655f, -0.000179f, +0.000239f, +0.000467f, +0.000378f, +0.000836f, -0.000667f, +0.000656f, +0.000321f, -0.000580f, - -0.000318f, -0.000056f, -0.000021f, +0.000110f, +0.000531f, -0.000048f, -0.000117f, +0.000233f, -0.000094f, -0.000115f, - -0.000025f, +0.000295f, -0.000088f, +0.000044f, -0.000337f, -0.000372f, +0.000128f, +0.000207f, -0.000220f, -0.000096f, - +0.000199f, +0.000150f, +0.000000f, -0.000120f, -0.000098f, +0.000095f, +0.000018f, +0.000025f, -0.000013f, -0.000089f, - -0.000063f, +0.000084f, +0.000205f, +0.000004f, -0.000070f, +0.000148f, +0.000031f, -0.000064f, -0.000029f, -0.000070f, - -0.000002f, +0.000063f, -0.000058f, -0.000026f, -0.000134f, +0.000021f, +0.000073f, +0.000043f, -0.000013f, -0.000053f, - +0.000039f, +0.000053f, -0.000053f, -0.000026f, +0.000021f, -0.000042f - }, - { - +0.006274f, -0.015100f, +0.007043f, -0.000098f, +0.000612f, -0.000548f, -0.000134f, -0.000481f, +0.000314f, +0.001267f, - +0.000396f, -0.001758f, +0.000190f, +0.001667f, -0.000782f, +0.001580f, -0.000909f, +0.003445f, +0.001106f, +0.000413f, - -0.000141f, -0.000483f, +0.000324f, -0.000935f, +0.001726f, -0.000800f, +0.000084f, -0.000428f, +0.000693f, +0.000218f, - -0.000186f, -0.000023f, +0.000193f, -0.000148f, -0.000101f, -0.000072f, -0.000037f, +0.000234f, +0.000041f, -0.000354f, - -0.000043f, -0.000147f, +0.000281f, -0.000110f, -0.000043f, -0.000274f, -0.000096f, +0.000274f, -0.000046f, +0.000022f, - +0.000252f, +0.000184f, -0.000595f, -0.000172f, -0.000056f, -0.000130f, -0.000184f, +0.000094f, -0.000008f, +0.000362f, - -0.000160f, -0.000084f, +0.000100f, -0.000126f, -0.000153f, -0.000026f, -0.000077f, +0.000163f, +0.000108f, +0.000034f, - -0.000094f, -0.000049f, +0.000110f, +0.000188f, +0.000095f, +0.000028f, -0.000009f, -0.000065f, +0.000003f, +0.000022f, - -0.000101f, +0.000013f, +0.000009f, -0.000094f, -0.000029f, +0.000033f, +0.000026f, -0.000016f, +0.000022f, +0.000072f, - -0.000042f, -0.000011f, +0.000007f, -0.000015f, +0.000040f, +0.000036f - }, - { - +0.000743f, -0.002709f, -0.000637f, +0.000440f, -0.000076f, +0.000166f, +0.000077f, +0.000128f, +0.000029f, -0.000198f, - -0.000460f, +0.000158f, -0.000802f, -0.002042f, +0.000974f, +0.003305f, -0.002967f, -0.000836f, +0.002186f, -0.003281f, - -0.001407f, +0.000382f, -0.001207f, -0.000496f, +0.000216f, +0.000195f, +0.001504f, -0.001433f, -0.000166f, +0.000620f, - -0.001079f, -0.000260f, +0.000435f, +0.000262f, -0.000429f, +0.000372f, +0.000150f, -0.000792f, -0.000188f, +0.000004f, - +0.000477f, -0.000284f, +0.000162f, +0.000271f, -0.000373f, -0.000145f, -0.000119f, +0.000178f, +0.000045f, +0.000273f, - +0.000156f, +0.000011f, -0.000146f, +0.000241f, +0.000272f, -0.000132f, -0.000068f, -0.000039f, +0.000110f, -0.000005f, - -0.000003f, +0.000160f, -0.000025f, -0.000019f, -0.000021f, -0.000095f, -0.000006f, -0.000030f, +0.000034f, +0.000122f, - +0.000096f, -0.000018f, -0.000063f, +0.000006f, +0.000058f, -0.000037f, +0.000030f, -0.000162f, -0.000054f, +0.000009f, - +0.000008f, -0.000037f, -0.000019f, +0.000042f, +0.000062f, -0.000024f, -0.000021f, +0.000028f, -0.000024f, -0.000065f, - -0.000013f, +0.000069f, +0.000039f, -0.000063f, -0.000016f, -0.000038f - }, - { - +0.003288f, -0.010633f, +0.004842f, +0.000458f, -0.000013f, -0.000561f, +0.000177f, -0.000581f, -0.000727f, +0.000575f, - +0.000162f, +0.000227f, -0.000045f, +0.000052f, +0.000555f, -0.001326f, -0.000413f, -0.000366f, -0.000721f, +0.000515f, - +0.000790f, +0.000612f, -0.000158f, -0.000278f, -0.000427f, -0.000003f, +0.000526f, -0.000402f, +0.000059f, -0.000662f, - +0.000483f, -0.000203f, -0.000549f, +0.000324f, -0.000735f, -0.000431f, +0.000448f, -0.000425f, +0.000202f, +0.000331f, - -0.000429f, -0.000354f, +0.000344f, +0.000162f, +0.000027f, -0.000213f, +0.000175f, +0.000460f, +0.000001f, +0.000093f, - +0.000254f, -0.000285f, +0.000173f, -0.000043f, +0.000052f, +0.000071f, -0.000260f, +0.000153f, +0.000017f, -0.000103f, - +0.000011f, +0.000001f, -0.000019f, +0.000066f, +0.000059f, +0.000078f, -0.000142f, -0.000086f, +0.000095f, +0.000027f, - -0.000049f, +0.000183f, +0.000100f, -0.000104f, -0.000073f, -0.000011f, +0.000088f, -0.000056f, -0.000026f, -0.000012f, - -0.000156f, +0.000065f, +0.000002f, -0.000175f, -0.000036f, +0.000096f, -0.000033f, -0.000033f, +0.000003f, +0.000085f, - +0.000043f, -0.000042f, +0.000033f, -0.000015f, -0.000004f, +0.000013f - }, - { - +0.000666f, -0.000547f, -0.001958f, -0.000051f, -0.000394f, +0.000061f, +0.000036f, -0.000068f, +0.000050f, -0.000193f, - -0.000129f, -0.000058f, +0.000121f, +0.000590f, +0.002188f, +0.004920f, -0.000416f, +0.003089f, -0.000318f, -0.001381f, - +0.000177f, +0.000005f, -0.000589f, +0.000020f, -0.000125f, +0.002034f, +0.001997f, -0.001067f, +0.000759f, +0.000757f, - -0.000136f, -0.000362f, +0.000588f, -0.000480f, +0.000325f, +0.000523f, +0.000008f, -0.000269f, -0.000942f, -0.000157f, - -0.000516f, +0.000499f, -0.000319f, +0.000038f, +0.000001f, +0.000235f, +0.000172f, -0.000397f, +0.000155f, +0.000609f, - -0.000219f, -0.000225f, +0.000149f, +0.000376f, -0.000195f, +0.000090f, -0.000015f, -0.000415f, +0.000007f, +0.000461f, - -0.000152f, -0.000065f, -0.000167f, +0.000004f, -0.000002f, +0.000137f, +0.000186f, -0.000037f, -0.000055f, -0.000047f, - -0.000021f, -0.000113f, +0.000041f, +0.000061f, -0.000077f, -0.000069f, +0.000056f, -0.000035f, -0.000047f, -0.000009f, - -0.000066f, +0.000063f, +0.000027f, +0.000041f, +0.000093f, -0.000035f, +0.000037f, -0.000068f, +0.000016f, +0.000019f, - -0.000070f, -0.000004f, -0.000005f, +0.000019f, +0.000015f, +0.000003f - }, - { - +0.000102f, +0.034658f, +0.001798f, -0.002796f, -0.000464f, -0.000254f, -0.000231f, -0.000634f, +0.001113f, -0.000323f, - -0.001311f, +0.000488f, +0.000596f, -0.001232f, +0.000737f, +0.001415f, +0.000175f, +0.000099f, +0.000488f, -0.000116f, - -0.000873f, -0.000598f, +0.000147f, +0.000131f, -0.000184f, +0.001117f, -0.000750f, -0.000230f, +0.001087f, -0.000518f, - +0.000400f, -0.000553f, -0.000119f, +0.000229f, +0.000090f, +0.000031f, +0.001272f, -0.000239f, +0.000511f, -0.000190f, - +0.000465f, -0.000408f, -0.000261f, -0.000459f, -0.000508f, +0.000340f, -0.000644f, -0.000917f, +0.000618f, +0.000017f, - -0.000082f, +0.000237f, +0.000346f, +0.000227f, -0.000078f, -0.000079f, +0.000085f, +0.000164f, -0.000199f, +0.000162f, - +0.000283f, -0.000113f, -0.000031f, -0.000198f, -0.000104f, +0.000339f, +0.000120f, -0.000101f, +0.000006f, +0.000028f, - +0.000018f, +0.000176f, +0.000089f, -0.000068f, -0.000095f, -0.000129f, +0.000173f, -0.000065f, -0.000094f, -0.000014f, - +0.000072f, -0.000021f, +0.000019f, +0.000027f, +0.000052f, +0.000060f, +0.000067f, +0.000007f, -0.000078f, -0.000029f, - -0.000027f, -0.000001f, +0.000014f, +0.000049f, -0.000068f, +0.000044f - }, - { - -0.000683f, +0.008085f, -0.001011f, -0.002160f, +0.001197f, +0.000854f, -0.000469f, +0.000580f, -0.000099f, +0.000356f, - -0.001374f, +0.000352f, +0.001324f, +0.000907f, -0.000551f, -0.002547f, +0.001661f, +0.000160f, -0.001840f, -0.002413f, - +0.000724f, +0.000915f, +0.000146f, -0.000681f, -0.000442f, +0.000303f, +0.000319f, -0.000382f, -0.000512f, +0.000576f, - -0.000694f, +0.001021f, -0.000345f, -0.000473f, +0.000279f, -0.000362f, -0.000439f, -0.000638f, +0.000138f, -0.000226f, - -0.000256f, -0.000229f, -0.000146f, +0.000190f, +0.000486f, -0.000286f, -0.000012f, -0.000246f, +0.000366f, +0.000299f, - -0.000048f, -0.000187f, -0.000137f, -0.000270f, -0.000077f, +0.000497f, -0.000001f, +0.000138f, -0.000093f, -0.000171f, - +0.000018f, +0.000060f, -0.000057f, +0.000117f, -0.000063f, +0.000128f, +0.000213f, -0.000115f, -0.000114f, -0.000125f, - +0.000005f, +0.000005f, +0.000001f, +0.000198f, -0.000038f, -0.000084f, +0.000047f, +0.000085f, -0.000019f, +0.000016f, - +0.000083f, +0.000024f, -0.000034f, +0.000005f, -0.000013f, -0.000096f, +0.000006f, +0.000041f, +0.000021f, +0.000054f, - -0.000068f, +0.000037f, -0.000036f, +0.000024f, -0.000020f, -0.000038f - }, - { - -0.001978f, +0.040089f, -0.007545f, +0.000508f, +0.000522f, -0.002341f, -0.003302f, +0.000425f, +0.000530f, +0.000547f, - +0.000365f, +0.000657f, -0.000074f, -0.000350f, -0.001295f, -0.000461f, -0.000594f, -0.001087f, +0.000520f, +0.000277f, - -0.000143f, +0.000011f, -0.000372f, +0.000344f, -0.000598f, -0.000325f, +0.000226f, -0.000102f, -0.000092f, +0.000349f, - -0.000442f, +0.000064f, +0.000516f, +0.000456f, +0.000083f, -0.000911f, +0.000735f, -0.000629f, -0.000208f, +0.000370f, - -0.000732f, -0.000634f, +0.000216f, -0.000124f, +0.000532f, +0.000185f, +0.000056f, -0.000071f, -0.000256f, +0.000230f, - -0.000079f, +0.000056f, -0.000024f, -0.000150f, -0.000006f, +0.000157f, +0.000156f, +0.000278f, -0.000225f, -0.000007f, - -0.000050f, +0.000197f, -0.000005f, +0.000075f, +0.000111f, -0.000261f, +0.000089f, +0.000002f, +0.000080f, -0.000009f, - +0.000035f, -0.000002f, +0.000104f, +0.000006f, -0.000159f, +0.000006f, -0.000117f, -0.000038f, +0.000040f, -0.000026f, - +0.000017f, -0.000029f, -0.000004f, +0.000123f, -0.000036f, +0.000071f, -0.000130f, +0.000027f, -0.000080f, +0.000003f, - +0.000028f, -0.000014f, -0.000020f, +0.000021f, +0.000045f, -0.000055f - }, - { - +0.000553f, -0.003501f, +0.000221f, -0.000743f, +0.000135f, -0.000826f, +0.000360f, +0.000277f, -0.000343f, +0.000449f, - +0.000007f, -0.000612f, +0.002550f, +0.003798f, +0.001826f, -0.001713f, -0.000121f, -0.000311f, +0.000098f, +0.000111f, - -0.001471f, +0.002793f, -0.000339f, +0.001150f, -0.002201f, +0.000436f, +0.000072f, +0.001229f, -0.001200f, +0.001204f, - -0.001065f, +0.000465f, -0.000069f, +0.001257f, -0.000056f, +0.000119f, -0.000191f, +0.000401f, -0.000756f, +0.000016f, - -0.000444f, +0.000095f, +0.000226f, -0.000452f, -0.000307f, -0.000205f, +0.000178f, -0.000033f, +0.000308f, -0.000023f, - -0.000063f, +0.000012f, +0.000200f, +0.000005f, -0.000097f, -0.000226f, -0.000108f, +0.000309f, +0.000354f, +0.000033f, - +0.000151f, -0.000216f, -0.000156f, -0.000021f, +0.000194f, +0.000096f, -0.000154f, +0.000155f, +0.000003f, +0.000100f, - -0.000045f, -0.000077f, +0.000051f, -0.000069f, +0.000032f, +0.000024f, -0.000053f, -0.000072f, +0.000002f, -0.000027f, - +0.000110f, -0.000044f, -0.000044f, +0.000091f, +0.000013f, -0.000010f, +0.000021f, +0.000046f, +0.000020f, -0.000012f, - +0.000025f, +0.000040f, -0.000051f, -0.000033f, +0.000029f, +0.000000f - }, - { - -0.001178f, +0.002080f, +0.005296f, -0.002417f, +0.000829f, -0.001903f, -0.002108f, -0.000574f, +0.000036f, +0.001120f, - -0.000033f, -0.000243f, -0.000557f, +0.001907f, +0.000992f, +0.000498f, +0.000494f, -0.000177f, -0.000258f, -0.000217f, - -0.000926f, +0.000882f, -0.000216f, +0.000465f, -0.000238f, +0.000175f, -0.000819f, -0.000075f, -0.000003f, -0.000364f, - +0.000260f, -0.000474f, +0.000088f, +0.000786f, +0.000952f, -0.000335f, -0.000286f, -0.000011f, +0.000254f, -0.000284f, - -0.000448f, -0.000084f, +0.000610f, +0.000115f, +0.000567f, +0.000090f, +0.000331f, -0.000471f, +0.000570f, +0.000180f, - +0.000168f, -0.000160f, +0.000207f, -0.000132f, -0.000170f, -0.000235f, -0.000135f, +0.000135f, -0.000015f, +0.000129f, - -0.000052f, -0.000049f, +0.000063f, -0.000055f, -0.000145f, -0.000000f, -0.000005f, +0.000148f, +0.000142f, -0.000087f, - -0.000147f, +0.000159f, +0.000071f, -0.000117f, -0.000041f, +0.000049f, -0.000044f, +0.000103f, -0.000058f, +0.000000f, - -0.000151f, +0.000098f, +0.000054f, -0.000016f, -0.000039f, -0.000142f, +0.000041f, +0.000110f, -0.000031f, +0.000024f, - +0.000048f, -0.000002f, +0.000026f, -0.000061f, +0.000022f, -0.000033f - }, - { - -0.000496f, +0.002585f, +0.001551f, -0.000376f, -0.000008f, +0.000298f, +0.000272f, +0.000284f, -0.000194f, +0.000229f, - +0.000691f, -0.000253f, +0.001349f, -0.001256f, -0.028400f, +0.000777f, -0.001191f, -0.000733f, +0.001638f, -0.001025f, - -0.000821f, -0.001399f, -0.000237f, +0.000096f, -0.000774f, -0.001012f, -0.002243f, +0.000879f, -0.000895f, +0.001120f, - -0.000079f, +0.000057f, +0.000163f, +0.000604f, +0.000312f, +0.000604f, +0.000107f, +0.000092f, -0.000193f, +0.000190f, - +0.000415f, -0.000208f, -0.000489f, -0.000015f, +0.000034f, -0.000042f, +0.000137f, -0.000172f, +0.000056f, -0.000115f, - +0.000327f, -0.000476f, -0.000056f, -0.000179f, +0.000090f, -0.000018f, -0.000033f, +0.000103f, +0.000057f, +0.000063f, - +0.000101f, -0.000276f, +0.000026f, -0.000017f, +0.000055f, -0.000114f, +0.000313f, +0.000084f, -0.000026f, -0.000086f, - -0.000044f, -0.000048f, +0.000093f, -0.000037f, +0.000072f, -0.000014f, -0.000151f, +0.000158f, -0.000056f, +0.000119f, - -0.000023f, -0.000104f, -0.000005f, -0.000011f, -0.000046f, +0.000062f, +0.000096f, +0.000101f, -0.000076f, +0.000083f, - +0.000000f, -0.000060f, -0.000021f, +0.000061f, -0.000002f, -0.000063f - }, - { - +0.000014f, -0.006451f, -0.001769f, +0.003606f, +0.000041f, +0.001673f, -0.000167f, -0.000794f, +0.000601f, +0.000917f, - -0.000538f, -0.000116f, -0.000518f, +0.001476f, +0.003561f, -0.000459f, +0.000296f, +0.000364f, -0.000483f, +0.000235f, - +0.001368f, +0.000302f, +0.000245f, +0.000154f, -0.000710f, +0.000270f, -0.000319f, -0.002391f, -0.000259f, -0.000907f, - +0.000563f, -0.000650f, -0.000123f, -0.000076f, -0.000716f, -0.000264f, +0.000353f, -0.000017f, -0.000493f, -0.000309f, - -0.000271f, +0.000085f, -0.000032f, +0.000153f, +0.000209f, -0.000004f, +0.000090f, +0.000288f, -0.000066f, -0.000305f, - +0.000119f, +0.000149f, -0.000086f, -0.000271f, -0.000018f, -0.000196f, +0.000130f, +0.000124f, +0.000008f, +0.000131f, - -0.000039f, +0.000059f, -0.000038f, +0.000090f, -0.000060f, +0.000080f, +0.000156f, +0.000085f, +0.000108f, +0.000031f, - -0.000113f, +0.000107f, +0.000112f, -0.000013f, -0.000143f, -0.000048f, +0.000010f, +0.000018f, -0.000086f, +0.000028f, - +0.000040f, +0.000036f, -0.000046f, +0.000004f, +0.000024f, -0.000019f, +0.000012f, +0.000064f, -0.000137f, +0.000068f, - -0.000019f, -0.000031f, +0.000051f, -0.000007f, -0.000005f, +0.000015f - } - }, - { - { - +0.001201f, +0.000446f, -0.000980f, -0.002257f, -0.000202f, +0.000057f, +0.000063f, +0.000117f, -0.000098f, +0.000230f, - -0.000268f, +0.000464f, -0.000296f, -0.001995f, +0.000265f, +0.000064f, +0.001822f, +0.000155f, -0.000101f, -0.000400f, - +0.000049f, +0.000420f, +0.000212f, -0.000262f, +0.000042f, -0.000542f, +0.000047f, +0.000162f, +0.000678f, +0.000978f, - -0.001779f, +0.000985f, +0.000014f, -0.000838f, +0.000272f, -0.000046f, +0.000283f, -0.001300f, -0.000995f, -0.000617f, - +0.000669f, +0.000027f, -0.000055f, -0.000076f, -0.000035f, +0.000280f, +0.000049f, -0.000066f, +0.000252f, -0.000273f, - +0.000271f, -0.000439f, -0.000284f, +0.000079f, -0.000140f, -0.000042f, +0.000057f, +0.000054f, +0.000081f, +0.000300f, - +0.000176f, +0.000095f, +0.000117f, -0.000100f, +0.000190f, +0.000006f, -0.000127f, -0.000013f, +0.000193f, -0.000004f, - -0.000038f, -0.000045f, -0.000032f, +0.000065f, +0.000079f, -0.000018f, +0.000032f, +0.000054f, +0.000096f, -0.000027f, - -0.000033f, +0.000091f, +0.000116f, +0.000006f, -0.000078f, -0.000006f, +0.000023f, -0.000012f, -0.000022f, -0.000076f, - +0.000050f, -0.000021f, -0.000022f, -0.000027f, -0.000028f, -0.000001f - }, - { - +0.008584f, -0.037044f, -0.007252f, -0.002921f, -0.000186f, +0.000542f, -0.000599f, -0.001130f, +0.000798f, +0.000828f, - +0.000254f, +0.000670f, -0.000001f, -0.000385f, +0.000528f, +0.000758f, +0.000498f, -0.000238f, -0.000781f, -0.000186f, - -0.000364f, -0.001249f, +0.000352f, +0.000664f, -0.000227f, -0.000138f, +0.000084f, +0.000878f, +0.000599f, +0.000717f, - +0.000309f, +0.000196f, -0.001055f, -0.000470f, -0.000086f, +0.000472f, -0.000403f, -0.000303f, -0.000359f, -0.000086f, - +0.000182f, +0.000195f, +0.000314f, +0.000178f, +0.000173f, -0.000431f, +0.000119f, -0.000122f, -0.000212f, +0.000037f, - +0.000075f, +0.000315f, +0.000274f, -0.000251f, +0.000110f, -0.000146f, +0.000167f, -0.000092f, +0.000032f, +0.000048f, - +0.000072f, -0.000082f, +0.000021f, -0.000023f, -0.000063f, -0.000127f, +0.000224f, +0.000031f, +0.000159f, -0.000012f, - -0.000107f, -0.000103f, +0.000083f, -0.000030f, -0.000165f, +0.000044f, +0.000028f, -0.000042f, +0.000031f, +0.000154f, - +0.000009f, -0.000043f, +0.000039f, +0.000057f, -0.000024f, -0.000164f, +0.000102f, -0.000048f, +0.000021f, -0.000006f, - -0.000020f, +0.000023f, +0.000040f, -0.000036f, -0.000004f, -0.000039f - }, - { - +0.003303f, +0.013609f, +0.002337f, +0.005777f, -0.000500f, -0.000306f, -0.000037f, -0.000279f, -0.000361f, -0.000746f, - -0.000501f, -0.000031f, +0.000221f, +0.000678f, -0.000018f, -0.000162f, +0.000296f, +0.000846f, -0.001462f, -0.000389f, - +0.000067f, +0.000737f, +0.000426f, +0.000692f, +0.000250f, +0.000292f, +0.000038f, +0.000125f, -0.000628f, +0.000306f, - -0.000058f, -0.000271f, +0.000012f, -0.000247f, -0.000016f, -0.000102f, +0.000029f, +0.000197f, +0.000249f, -0.000517f, - +0.000168f, -0.000172f, +0.000810f, +0.000162f, -0.000047f, -0.000317f, -0.000188f, +0.000451f, +0.000429f, -0.000171f, - -0.000349f, +0.000079f, +0.000169f, -0.000200f, +0.000027f, +0.000322f, +0.000217f, -0.000089f, -0.000141f, -0.000091f, - +0.000247f, +0.000174f, -0.000162f, +0.000042f, +0.000147f, +0.000059f, -0.000036f, +0.000186f, +0.000043f, +0.000163f, - -0.000001f, +0.000060f, +0.000042f, +0.000027f, -0.000034f, -0.000011f, -0.000035f, -0.000054f, -0.000032f, +0.000099f, - +0.000007f, +0.000016f, +0.000074f, -0.000142f, -0.000048f, +0.000034f, -0.000048f, -0.000026f, +0.000032f, -0.000004f, - +0.000057f, +0.000001f, +0.000010f, -0.000023f, -0.000003f, +0.000022f - }, - { - +0.000051f, +0.007501f, +0.000016f, +0.000189f, -0.000137f, -0.000191f, +0.000090f, -0.000033f, +0.000256f, +0.000076f, - -0.000241f, +0.000138f, +0.000090f, +0.001943f, +0.001283f, -0.000179f, +0.003361f, +0.002666f, -0.000181f, +0.000104f, - -0.001613f, +0.001035f, +0.000295f, +0.001194f, +0.001217f, -0.000290f, +0.000386f, -0.000517f, -0.001465f, -0.000219f, - +0.000926f, +0.000664f, -0.000452f, +0.000456f, +0.000385f, +0.000526f, -0.000014f, -0.000012f, +0.000584f, -0.000247f, - -0.000180f, +0.000010f, +0.000169f, -0.000146f, +0.000356f, +0.000309f, +0.000054f, +0.000020f, +0.000223f, -0.000213f, - -0.000200f, +0.000428f, +0.000049f, -0.000133f, -0.000034f, -0.000263f, -0.000135f, +0.000357f, -0.000224f, -0.000203f, - -0.000035f, +0.000169f, -0.000000f, -0.000016f, -0.000047f, +0.000029f, -0.000016f, +0.000063f, +0.000079f, -0.000144f, - -0.000150f, +0.000008f, +0.000139f, +0.000069f, -0.000121f, +0.000090f, +0.000091f, +0.000052f, -0.000064f, -0.000053f, - -0.000039f, +0.000071f, -0.000050f, -0.000021f, -0.000102f, -0.000055f, +0.000056f, +0.000031f, +0.000062f, -0.000016f, - +0.000010f, +0.000041f, +0.000017f, -0.000013f, +0.000015f, +0.000031f - }, - { - -0.004036f, +0.003992f, +0.000290f, +0.001554f, -0.000067f, -0.000251f, -0.000159f, -0.000441f, +0.000272f, -0.000051f, - +0.001849f, -0.000375f, -0.000127f, -0.000501f, +0.000849f, +0.000255f, +0.000365f, +0.001308f, +0.001054f, +0.000728f, - -0.000487f, +0.000139f, +0.000432f, -0.000904f, +0.000529f, -0.000067f, -0.000299f, +0.000402f, +0.000116f, -0.000018f, - +0.000404f, +0.000103f, +0.000229f, -0.000312f, -0.000082f, -0.000192f, -0.000464f, -0.000323f, +0.000295f, -0.000740f, - -0.000750f, -0.000007f, +0.000690f, -0.000061f, -0.000574f, +0.000341f, +0.000311f, +0.000082f, -0.000036f, +0.000066f, - +0.000386f, +0.000365f, -0.000363f, -0.000230f, -0.000393f, +0.000118f, -0.000475f, -0.000014f, +0.000166f, +0.000111f, - -0.000055f, -0.000103f, +0.000188f, -0.000072f, -0.000166f, -0.000014f, -0.000022f, +0.000050f, +0.000070f, +0.000045f, - -0.000023f, -0.000093f, -0.000018f, +0.000123f, +0.000155f, -0.000019f, +0.000095f, -0.000101f, -0.000013f, +0.000120f, - -0.000056f, -0.000000f, +0.000031f, -0.000111f, -0.000082f, +0.000035f, +0.000011f, +0.000024f, -0.000025f, +0.000018f, - -0.000039f, -0.000028f, -0.000005f, -0.000029f, +0.000032f, +0.000039f - }, - { - +0.000120f, +0.001346f, -0.000427f, -0.000562f, +0.000021f, -0.000088f, +0.000331f, +0.000062f, +0.000332f, -0.000224f, - -0.000276f, -0.000357f, -0.000765f, -0.001698f, -0.000208f, -0.000149f, +0.000458f, -0.001525f, +0.002058f, -0.000925f, - -0.001984f, -0.001261f, -0.000305f, -0.001577f, -0.000771f, +0.000362f, -0.000269f, -0.000168f, -0.000315f, +0.000209f, - -0.001063f, -0.000517f, +0.000573f, +0.000925f, -0.000631f, -0.000069f, +0.000289f, -0.000447f, -0.000293f, -0.000179f, - +0.000687f, -0.000274f, +0.000176f, +0.000281f, -0.000129f, -0.000074f, -0.000049f, -0.000302f, +0.000359f, +0.000129f, - +0.000325f, +0.000100f, -0.000219f, +0.000034f, +0.000441f, +0.000045f, -0.000129f, -0.000037f, +0.000016f, -0.000014f, - -0.000079f, +0.000018f, +0.000108f, -0.000108f, +0.000062f, -0.000048f, -0.000047f, +0.000005f, -0.000087f, -0.000103f, - +0.000082f, +0.000081f, -0.000091f, -0.000017f, +0.000121f, +0.000071f, +0.000116f, -0.000040f, -0.000015f, -0.000079f, - +0.000066f, -0.000022f, -0.000069f, -0.000030f, +0.000041f, +0.000013f, -0.000003f, -0.000009f, +0.000001f, -0.000024f, - -0.000089f, +0.000033f, +0.000096f, -0.000023f, -0.000033f, -0.000027f - }, - { - +0.003729f, +0.002348f, -0.004645f, -0.001690f, +0.000516f, +0.000096f, -0.000083f, -0.000261f, -0.000287f, +0.000179f, - +0.000403f, -0.000313f, -0.000104f, -0.000005f, +0.000035f, -0.000997f, +0.000086f, +0.000157f, -0.000693f, -0.000051f, - +0.000226f, +0.000271f, -0.000446f, -0.000122f, -0.000021f, -0.000444f, +0.000820f, +0.000105f, -0.000612f, -0.000573f, - +0.000067f, +0.000210f, +0.000407f, -0.000413f, -0.000014f, -0.000194f, -0.000106f, -0.000178f, +0.000174f, +0.000062f, - -0.000224f, +0.000001f, -0.000029f, +0.000218f, -0.000481f, +0.000118f, -0.000320f, +0.000192f, +0.000151f, -0.000136f, - +0.000093f, -0.000055f, +0.000153f, -0.000342f, +0.000143f, +0.000187f, +0.000010f, +0.000091f, +0.000168f, -0.000003f, - -0.000015f, +0.000052f, -0.000010f, +0.000055f, +0.000086f, +0.000160f, +0.000113f, -0.000090f, +0.000026f, -0.000002f, - -0.000105f, +0.000025f, +0.000169f, +0.000014f, -0.000079f, -0.000022f, +0.000111f, -0.000065f, -0.000001f, -0.000028f, - -0.000123f, -0.000029f, +0.000052f, -0.000036f, -0.000135f, +0.000095f, +0.000062f, -0.000009f, -0.000042f, +0.000011f, - +0.000054f, -0.000038f, -0.000028f, -0.000004f, -0.000005f, +0.000020f - }, - { - +0.000007f, +0.002677f, -0.001349f, -0.000107f, -0.000365f, -0.000132f, -0.000107f, +0.000041f, +0.000317f, -0.000122f, - -0.000548f, -0.000453f, -0.001079f, +0.004515f, +0.003468f, -0.000748f, -0.001266f, +0.000679f, -0.000447f, +0.000563f, - -0.002113f, -0.000685f, -0.000943f, +0.000142f, +0.000982f, -0.000076f, +0.000760f, +0.000681f, -0.000413f, +0.000526f, - -0.000118f, +0.000086f, +0.000561f, +0.000076f, +0.000026f, +0.000102f, -0.000009f, -0.000262f, -0.000643f, -0.000386f, - -0.000063f, +0.000140f, -0.000329f, -0.000351f, +0.000342f, +0.000031f, +0.000063f, -0.000475f, +0.000019f, +0.000477f, - -0.000000f, -0.000067f, +0.000224f, +0.000365f, +0.000213f, +0.000029f, +0.000071f, -0.000245f, -0.000139f, +0.000178f, - +0.000128f, -0.000052f, -0.000037f, -0.000043f, -0.000067f, +0.000081f, +0.000140f, +0.000036f, -0.000101f, -0.000111f, - -0.000047f, -0.000050f, +0.000032f, +0.000065f, -0.000007f, -0.000024f, +0.000014f, +0.000099f, -0.000048f, +0.000031f, - -0.000102f, -0.000021f, -0.000011f, +0.000032f, +0.000113f, +0.000001f, +0.000075f, -0.000028f, -0.000008f, +0.000054f, - -0.000055f, -0.000000f, +0.000040f, -0.000007f, +0.000002f, -0.000016f - }, - { - -0.000725f, +0.043383f, -0.005436f, -0.001977f, -0.000347f, -0.000021f, -0.000180f, -0.001017f, +0.000912f, +0.000442f, - -0.001018f, -0.000468f, -0.000249f, -0.001461f, +0.000332f, +0.002231f, +0.000891f, +0.000229f, +0.000145f, +0.000004f, - -0.000205f, -0.000247f, -0.000745f, +0.000584f, -0.000170f, +0.000462f, +0.000238f, -0.000153f, +0.000527f, -0.000008f, - +0.000194f, -0.000552f, -0.000249f, +0.000025f, +0.000274f, +0.000763f, +0.000289f, +0.000002f, +0.000586f, +0.000169f, - -0.000042f, -0.000416f, -0.000043f, -0.000403f, -0.000621f, +0.000330f, +0.000075f, -0.001023f, -0.000070f, +0.000481f, - +0.000097f, +0.000283f, +0.000246f, +0.000246f, -0.000347f, -0.000102f, +0.000107f, +0.000153f, -0.000114f, -0.000087f, - +0.000168f, +0.000033f, -0.000087f, -0.000150f, -0.000142f, +0.000021f, +0.000215f, -0.000047f, +0.000035f, +0.000133f, - -0.000061f, +0.000024f, +0.000103f, -0.000081f, -0.000026f, -0.000129f, +0.000097f, -0.000050f, +0.000023f, -0.000087f, - +0.000070f, -0.000032f, -0.000073f, +0.000023f, -0.000047f, +0.000036f, +0.000086f, +0.000027f, +0.000004f, -0.000010f, - -0.000061f, -0.000029f, -0.000005f, +0.000081f, -0.000044f, +0.000022f - }, - { - +0.000345f, +0.006058f, +0.000304f, -0.001125f, -0.000229f, +0.002298f, -0.000506f, -0.000537f, -0.000079f, +0.000215f, - -0.000441f, -0.000988f, +0.000155f, +0.001399f, -0.000903f, -0.000350f, -0.000283f, +0.001254f, +0.000489f, -0.002082f, - -0.000144f, +0.000169f, -0.000136f, -0.000009f, -0.000256f, +0.000220f, +0.000388f, -0.000498f, -0.000817f, +0.000756f, - -0.000953f, +0.000496f, +0.000125f, +0.000033f, +0.000088f, +0.000142f, -0.000124f, -0.000057f, +0.000159f, -0.000152f, - -0.000205f, -0.000055f, -0.000003f, -0.000156f, +0.000493f, -0.000123f, -0.000106f, -0.000182f, +0.000111f, +0.000267f, - +0.000256f, -0.000029f, +0.000019f, -0.000084f, -0.000345f, +0.000345f, +0.000069f, +0.000108f, +0.000002f, -0.000032f, - -0.000088f, -0.000071f, -0.000106f, +0.000097f, -0.000132f, +0.000028f, +0.000180f, +0.000090f, +0.000122f, -0.000176f, - +0.000024f, -0.000034f, -0.000115f, +0.000143f, -0.000020f, -0.000058f, +0.000000f, -0.000011f, -0.000053f, -0.000068f, - -0.000012f, +0.000006f, -0.000001f, +0.000032f, +0.000075f, -0.000019f, -0.000068f, +0.000014f, -0.000008f, +0.000065f, - -0.000031f, +0.000011f, -0.000004f, +0.000014f, +0.000039f, -0.000028f - }, - { - +0.003340f, +0.027046f, -0.000230f, -0.002793f, +0.001192f, -0.001061f, -0.003957f, -0.000549f, +0.000369f, +0.000248f, - +0.000294f, +0.000402f, +0.000455f, -0.000269f, -0.000356f, -0.001308f, -0.000883f, -0.000111f, +0.000083f, +0.000885f, - -0.000184f, +0.000568f, +0.000004f, -0.000436f, +0.000190f, -0.000041f, -0.000225f, -0.000281f, +0.000410f, +0.000031f, - +0.000473f, -0.000022f, +0.000436f, -0.000002f, +0.000253f, -0.000657f, +0.000105f, +0.000008f, -0.000629f, +0.000298f, - -0.000130f, -0.000501f, -0.000150f, -0.000129f, -0.000037f, +0.000230f, +0.000168f, -0.000006f, -0.000176f, +0.000010f, - -0.000014f, +0.000078f, +0.000055f, -0.000209f, -0.000141f, -0.000041f, +0.000124f, +0.000238f, -0.000067f, -0.000104f, - +0.000009f, +0.000035f, +0.000029f, -0.000005f, +0.000051f, -0.000134f, +0.000003f, +0.000010f, +0.000062f, -0.000001f, - +0.000013f, +0.000040f, +0.000118f, +0.000132f, -0.000008f, +0.000006f, -0.000041f, -0.000115f, -0.000005f, -0.000058f, - +0.000050f, +0.000049f, -0.000058f, +0.000144f, -0.000019f, +0.000114f, -0.000060f, -0.000006f, -0.000049f, -0.000002f, - +0.000038f, +0.000006f, -0.000057f, -0.000016f, +0.000080f, -0.000001f - }, - { - -0.000499f, -0.002837f, +0.000215f, -0.000346f, +0.000153f, -0.000411f, -0.000154f, +0.000303f, +0.000010f, +0.000127f, - -0.000336f, -0.000461f, +0.001118f, +0.006914f, +0.000802f, -0.001902f, -0.000198f, +0.000281f, +0.001282f, -0.000797f, - -0.001291f, +0.003434f, +0.000750f, +0.000976f, -0.001150f, -0.001105f, -0.000073f, +0.001177f, -0.000172f, +0.000902f, - -0.001130f, +0.000360f, -0.000307f, +0.000202f, +0.000603f, +0.000065f, +0.000143f, +0.000347f, -0.000473f, +0.000352f, - -0.000190f, -0.000228f, +0.000091f, +0.000067f, -0.000070f, -0.000207f, -0.000212f, +0.000082f, +0.000280f, +0.000248f, - +0.000138f, -0.000058f, +0.000020f, +0.000070f, -0.000047f, -0.000173f, -0.000280f, -0.000092f, +0.000004f, +0.000031f, - +0.000106f, -0.000080f, -0.000145f, -0.000127f, +0.000010f, +0.000154f, -0.000205f, +0.000104f, -0.000002f, +0.000065f, - +0.000047f, -0.000020f, +0.000060f, +0.000076f, +0.000065f, +0.000081f, +0.000007f, -0.000083f, -0.000076f, -0.000032f, - +0.000074f, -0.000038f, -0.000048f, +0.000010f, +0.000032f, -0.000039f, -0.000026f, +0.000024f, +0.000016f, +0.000015f, - +0.000014f, +0.000041f, -0.000009f, -0.000030f, +0.000023f, +0.000019f - }, - { - +0.001114f, -0.003730f, +0.002183f, +0.000873f, +0.000776f, +0.002089f, -0.002702f, -0.001273f, +0.000099f, +0.001019f, - +0.000810f, -0.000366f, +0.000516f, -0.000079f, +0.001004f, +0.000337f, +0.000052f, +0.000382f, -0.001059f, +0.000751f, - -0.000164f, +0.000407f, -0.000167f, -0.000046f, -0.000170f, +0.000906f, -0.000184f, -0.000041f, +0.000169f, -0.000244f, - +0.000020f, +0.000145f, +0.000123f, +0.000543f, +0.000702f, +0.000364f, -0.000256f, -0.000586f, +0.000541f, -0.000142f, - -0.000468f, -0.000334f, -0.000049f, +0.000249f, -0.000152f, -0.000301f, +0.000320f, -0.000570f, +0.000272f, +0.000199f, - +0.000174f, +0.000039f, +0.000148f, +0.000148f, +0.000065f, -0.000061f, +0.000107f, -0.000093f, -0.000232f, +0.000179f, - -0.000033f, -0.000016f, -0.000070f, +0.000008f, -0.000126f, -0.000165f, +0.000060f, +0.000022f, +0.000138f, +0.000077f, - -0.000193f, +0.000046f, +0.000133f, +0.000124f, -0.000029f, +0.000014f, -0.000081f, +0.000138f, +0.000025f, +0.000092f, - -0.000131f, -0.000062f, +0.000041f, +0.000114f, +0.000038f, -0.000134f, -0.000096f, -0.000010f, -0.000059f, +0.000002f, - +0.000021f, -0.000005f, +0.000088f, +0.000003f, +0.000039f, +0.000045f - }, - { - +0.000223f, +0.000733f, -0.001341f, +0.001564f, +0.000008f, +0.000178f, +0.000245f, +0.000555f, +0.000448f, -0.000546f, - +0.000045f, -0.000049f, +0.000241f, -0.006493f, -0.015994f, -0.003659f, +0.001467f, -0.000645f, +0.001429f, -0.000255f, - -0.001191f, +0.000149f, -0.000729f, +0.000191f, -0.000663f, -0.000096f, -0.001005f, +0.000777f, -0.001677f, +0.000078f, - -0.000137f, +0.000222f, +0.000773f, +0.000434f, -0.000649f, +0.000273f, -0.000053f, -0.000105f, +0.000295f, -0.000169f, - +0.000280f, +0.000046f, -0.000246f, +0.000064f, +0.000060f, +0.000016f, -0.000026f, +0.000044f, +0.000077f, -0.000097f, - +0.000210f, -0.000057f, -0.000108f, -0.000293f, +0.000020f, -0.000051f, -0.000002f, +0.000055f, -0.000016f, +0.000054f, - +0.000182f, -0.000030f, -0.000084f, +0.000079f, +0.000134f, -0.000080f, +0.000214f, +0.000261f, -0.000049f, -0.000016f, - -0.000136f, -0.000116f, +0.000168f, -0.000017f, -0.000009f, +0.000087f, -0.000126f, +0.000126f, +0.000000f, +0.000041f, - +0.000093f, -0.000113f, -0.000090f, -0.000007f, -0.000100f, -0.000014f, +0.000061f, +0.000099f, -0.000071f, +0.000025f, - +0.000085f, +0.000015f, -0.000047f, +0.000032f, +0.000050f, -0.000082f - }, - { - -0.001852f, -0.004762f, +0.000229f, +0.000345f, +0.000574f, +0.004129f, -0.000648f, -0.000423f, +0.000618f, +0.000254f, - +0.001590f, -0.001160f, -0.000265f, +0.001399f, +0.002488f, +0.000648f, +0.000624f, +0.001201f, +0.000058f, -0.000095f, - +0.000820f, -0.000170f, +0.000533f, +0.001302f, -0.000696f, -0.000541f, -0.000755f, -0.002052f, -0.000088f, -0.000690f, - +0.000262f, -0.000030f, -0.000154f, -0.000521f, -0.000693f, -0.000696f, -0.000051f, +0.000340f, -0.000308f, -0.000652f, - +0.000148f, -0.000011f, +0.000009f, -0.000042f, +0.000379f, -0.000122f, -0.000144f, +0.000345f, -0.000014f, -0.000037f, - +0.000246f, +0.000075f, +0.000138f, -0.000244f, -0.000086f, -0.000306f, +0.000054f, +0.000140f, +0.000079f, -0.000028f, - -0.000014f, -0.000065f, -0.000029f, +0.000058f, -0.000019f, +0.000039f, +0.000086f, +0.000036f, +0.000007f, +0.000125f, - -0.000076f, -0.000106f, +0.000179f, +0.000184f, -0.000048f, -0.000097f, -0.000078f, -0.000010f, +0.000017f, -0.000049f, - +0.000022f, +0.000107f, +0.000020f, -0.000031f, +0.000005f, +0.000027f, +0.000007f, +0.000143f, -0.000063f, -0.000024f, - +0.000003f, -0.000012f, +0.000007f, +0.000030f, +0.000029f, -0.000010f - } - }, - { - { - -0.001056f, -0.003041f, +0.000517f, -0.001443f, -0.000352f, +0.000273f, -0.000048f, -0.000464f, +0.000167f, +0.000016f, - +0.000130f, -0.000048f, +0.001090f, +0.000852f, -0.000198f, -0.001504f, -0.000380f, +0.000279f, +0.001492f, -0.000257f, - -0.001892f, -0.000456f, +0.000629f, +0.000216f, +0.000789f, -0.000517f, -0.000604f, +0.000327f, -0.000421f, -0.000256f, - -0.000725f, -0.000403f, +0.000517f, -0.000134f, -0.000457f, -0.000349f, +0.000802f, -0.000118f, -0.000571f, -0.000794f, - +0.000230f, +0.000128f, +0.000148f, -0.000184f, -0.000431f, +0.000298f, +0.000129f, -0.000418f, +0.000046f, -0.000567f, - +0.000149f, -0.000008f, -0.000091f, -0.000113f, +0.000069f, +0.000009f, -0.000160f, +0.000232f, -0.000225f, -0.000139f, - -0.000040f, -0.000066f, +0.000151f, -0.000074f, +0.000052f, -0.000027f, +0.000092f, -0.000102f, -0.000064f, +0.000113f, - +0.000070f, -0.000070f, +0.000114f, -0.000043f, +0.000104f, -0.000012f, +0.000025f, -0.000102f, +0.000079f, +0.000040f, - -0.000007f, -0.000004f, +0.000021f, +0.000038f, +0.000097f, +0.000079f, -0.000031f, -0.000068f, +0.000027f, -0.000001f, - -0.000081f, +0.000049f, -0.000018f, +0.000042f, +0.000019f, -0.000045f - }, - { - -0.005313f, -0.043666f, +0.001634f, -0.000165f, -0.000234f, -0.000106f, +0.000506f, -0.000943f, -0.000681f, +0.000189f, - +0.000161f, -0.000403f, +0.000264f, -0.001093f, +0.000413f, +0.000779f, -0.001085f, +0.000339f, +0.001024f, -0.000188f, - +0.000114f, -0.000337f, +0.000054f, +0.000195f, +0.000065f, +0.000766f, +0.000468f, +0.000263f, +0.000068f, +0.000220f, - -0.000126f, +0.000058f, -0.000193f, -0.000154f, -0.000969f, +0.000489f, +0.000603f, +0.000437f, -0.000071f, -0.000247f, - -0.000688f, -0.000217f, +0.000351f, +0.000288f, -0.000043f, +0.000091f, -0.000290f, +0.000473f, -0.000525f, -0.000078f, - +0.000051f, -0.000175f, +0.000471f, +0.000008f, +0.000184f, +0.000057f, -0.000057f, +0.000243f, +0.000125f, +0.000136f, - +0.000047f, +0.000127f, +0.000056f, +0.000094f, +0.000096f, -0.000163f, -0.000066f, -0.000100f, +0.000088f, +0.000223f, - -0.000000f, -0.000036f, -0.000081f, -0.000046f, +0.000044f, -0.000205f, +0.000130f, +0.000002f, -0.000047f, -0.000028f, - -0.000038f, +0.000069f, -0.000038f, +0.000034f, +0.000065f, +0.000068f, -0.000164f, +0.000065f, -0.000011f, +0.000039f, - +0.000014f, -0.000001f, -0.000038f, +0.000029f, -0.000029f, +0.000012f - }, - { - -0.002307f, +0.004416f, -0.003567f, +0.001698f, +0.002094f, +0.000643f, -0.000534f, +0.000077f, -0.000120f, +0.000486f, - -0.000155f, +0.000123f, +0.000355f, -0.001204f, -0.002364f, -0.000396f, -0.000454f, -0.000743f, -0.001133f, -0.000081f, - +0.000554f, +0.000132f, +0.000001f, -0.000270f, -0.000836f, +0.000485f, +0.000848f, +0.001012f, -0.001084f, -0.000276f, - +0.000240f, +0.000190f, +0.000153f, +0.000489f, -0.000196f, -0.000432f, +0.000072f, +0.000099f, +0.000753f, +0.000128f, - -0.000181f, +0.000180f, +0.000502f, +0.000149f, +0.000370f, +0.000459f, -0.000268f, +0.000233f, +0.000265f, +0.000396f, - +0.000061f, +0.000014f, +0.000079f, +0.000023f, +0.000021f, -0.000010f, +0.000076f, +0.000206f, +0.000031f, -0.000025f, - -0.000142f, +0.000012f, +0.000048f, +0.000052f, -0.000025f, +0.000092f, -0.000053f, +0.000180f, -0.000140f, +0.000053f, - +0.000078f, +0.000018f, -0.000001f, -0.000032f, +0.000058f, -0.000018f, -0.000019f, -0.000006f, +0.000034f, -0.000007f, - -0.000069f, +0.000015f, +0.000002f, +0.000029f, -0.000026f, -0.000028f, +0.000042f, -0.000066f, -0.000040f, -0.000001f, - -0.000048f, +0.000051f, -0.000025f, +0.000037f, -0.000025f, -0.000016f - }, - { - +0.000280f, +0.007871f, -0.000776f, -0.000438f, +0.000435f, -0.000134f, -0.000277f, -0.000389f, +0.000094f, +0.000162f, - -0.000125f, +0.000314f, -0.000178f, +0.000955f, +0.002366f, -0.003056f, -0.002480f, +0.000272f, -0.000840f, +0.000566f, - +0.000280f, +0.000256f, -0.000904f, +0.002026f, -0.000025f, -0.001179f, -0.000702f, +0.000642f, +0.000297f, -0.000809f, - +0.000362f, +0.000821f, -0.000716f, +0.000204f, -0.000612f, -0.000450f, +0.000816f, -0.000443f, +0.000151f, +0.000402f, - -0.000139f, +0.000262f, +0.000541f, -0.000028f, +0.000108f, -0.000243f, +0.000142f, +0.000071f, +0.000112f, +0.000162f, - +0.000272f, +0.000032f, -0.000032f, -0.000071f, +0.000091f, +0.000274f, -0.000023f, +0.000008f, +0.000106f, +0.000014f, - -0.000174f, -0.000028f, +0.000136f, -0.000003f, +0.000014f, +0.000095f, -0.000062f, -0.000042f, +0.000052f, +0.000124f, - +0.000070f, -0.000188f, -0.000045f, +0.000031f, +0.000022f, -0.000060f, -0.000022f, +0.000045f, +0.000043f, +0.000049f, - +0.000015f, -0.000050f, +0.000026f, -0.000021f, +0.000035f, -0.000006f, -0.000100f, -0.000047f, +0.000074f, +0.000047f, - -0.000014f, -0.000053f, +0.000019f, +0.000067f, -0.000017f, +0.000031f - }, - { - -0.001459f, +0.009452f, -0.001917f, +0.001210f, -0.000190f, +0.000193f, +0.000388f, -0.000449f, +0.000395f, -0.000624f, - +0.000795f, +0.001727f, -0.000595f, -0.001467f, +0.001303f, -0.001471f, +0.000153f, +0.000099f, -0.000453f, +0.000387f, - -0.000533f, +0.000630f, +0.000184f, -0.000159f, -0.000954f, +0.000472f, -0.000189f, +0.001766f, +0.000586f, +0.000167f, - +0.000057f, -0.000124f, -0.000484f, +0.000227f, +0.000512f, +0.000059f, +0.000083f, -0.001209f, +0.000040f, +0.000250f, - -0.000435f, -0.000024f, +0.000152f, +0.000059f, -0.000506f, +0.000065f, +0.000467f, +0.000163f, -0.000019f, -0.000085f, - -0.000092f, +0.000101f, +0.000284f, +0.000166f, -0.000219f, +0.000056f, +0.000055f, +0.000071f, -0.000083f, -0.000279f, - +0.000115f, -0.000082f, +0.000002f, +0.000098f, +0.000024f, -0.000063f, +0.000097f, -0.000018f, -0.000128f, -0.000035f, - +0.000093f, +0.000034f, -0.000056f, -0.000121f, +0.000007f, +0.000011f, -0.000093f, +0.000055f, -0.000067f, +0.000024f, - -0.000023f, +0.000039f, -0.000038f, +0.000083f, -0.000071f, -0.000043f, +0.000004f, +0.000008f, +0.000007f, -0.000052f, - +0.000030f, -0.000018f, -0.000006f, +0.000014f, -0.000037f, -0.000015f - }, - { - -0.000653f, +0.000686f, +0.003792f, -0.000434f, -0.000021f, -0.000221f, +0.000008f, -0.000003f, +0.000313f, +0.000191f, - +0.000403f, -0.000077f, +0.000447f, -0.000803f, -0.001760f, -0.000505f, +0.004376f, -0.000407f, +0.000504f, +0.001200f, - +0.001186f, -0.001049f, -0.000406f, +0.000332f, -0.001393f, -0.001490f, -0.000584f, -0.000162f, -0.002324f, -0.000709f, - -0.000445f, -0.000335f, -0.000067f, +0.000426f, -0.000036f, -0.000013f, +0.000252f, +0.000338f, +0.000158f, -0.000049f, - -0.000282f, +0.000368f, +0.000169f, -0.000041f, +0.000444f, +0.000239f, +0.000086f, -0.000459f, +0.000099f, -0.000167f, - +0.000125f, +0.000225f, +0.000130f, -0.000254f, +0.000059f, +0.000118f, -0.000053f, -0.000048f, -0.000027f, +0.000039f, - -0.000085f, -0.000188f, +0.000102f, -0.000018f, -0.000055f, +0.000010f, +0.000025f, -0.000022f, -0.000012f, -0.000121f, - -0.000145f, +0.000114f, +0.000046f, -0.000035f, -0.000007f, -0.000010f, +0.000019f, +0.000128f, +0.000113f, -0.000009f, - -0.000069f, +0.000093f, +0.000000f, -0.000029f, -0.000071f, +0.000035f, +0.000015f, -0.000031f, +0.000003f, +0.000063f, - -0.000006f, -0.000071f, -0.000039f, +0.000046f, +0.000007f, +0.000010f - }, - { - -0.008027f, -0.005575f, +0.001612f, -0.001996f, -0.000782f, +0.000481f, -0.000048f, +0.000723f, +0.000593f, -0.000267f, - -0.000238f, -0.000234f, -0.000670f, +0.000878f, +0.000719f, -0.000511f, -0.000106f, +0.000245f, +0.000920f, -0.000592f, - -0.000465f, -0.000670f, -0.000361f, +0.000296f, -0.000028f, -0.000474f, +0.000044f, +0.000517f, -0.000604f, -0.000509f, - -0.000137f, +0.000150f, +0.001007f, -0.000439f, +0.000455f, +0.000320f, -0.000329f, -0.000360f, -0.000059f, -0.000059f, - -0.000174f, +0.000637f, +0.000491f, -0.000222f, -0.000466f, +0.000059f, -0.000094f, -0.000177f, -0.000011f, +0.000230f, - -0.000365f, +0.000133f, -0.000039f, -0.000317f, -0.000018f, +0.000024f, +0.000050f, +0.000012f, +0.000076f, +0.000067f, - +0.000116f, +0.000070f, -0.000083f, +0.000020f, -0.000098f, -0.000084f, +0.000081f, +0.000150f, -0.000086f, -0.000119f, - +0.000121f, -0.000152f, -0.000203f, +0.000117f, +0.000038f, -0.000057f, -0.000014f, +0.000022f, +0.000014f, -0.000058f, - +0.000134f, -0.000095f, -0.000008f, +0.000138f, -0.000006f, -0.000111f, +0.000035f, +0.000069f, +0.000004f, -0.000044f, - -0.000046f, +0.000056f, -0.000025f, +0.000022f, -0.000030f, +0.000013f - }, - { - -0.000659f, +0.000631f, +0.001539f, +0.000310f, +0.000456f, -0.000085f, -0.000182f, +0.000132f, -0.000040f, +0.000203f, - +0.000063f, -0.000052f, -0.000959f, +0.001080f, +0.002747f, +0.000298f, -0.000931f, -0.000789f, -0.001047f, +0.002821f, - +0.000170f, -0.000817f, -0.000158f, -0.000240f, -0.000633f, -0.001707f, -0.000838f, +0.000415f, -0.000369f, +0.000052f, - +0.000249f, +0.000423f, -0.000425f, -0.000048f, +0.000117f, -0.000595f, -0.000146f, +0.000011f, -0.000151f, +0.000382f, - +0.000126f, +0.000015f, +0.000114f, -0.000083f, -0.000125f, -0.000321f, -0.000245f, +0.000462f, -0.000353f, -0.000284f, - +0.000242f, -0.000049f, -0.000079f, -0.000101f, +0.000291f, +0.000010f, +0.000103f, +0.000183f, +0.000067f, -0.000273f, - +0.000008f, -0.000133f, +0.000186f, -0.000023f, +0.000051f, -0.000072f, -0.000163f, -0.000001f, +0.000077f, -0.000027f, - +0.000026f, +0.000053f, +0.000007f, -0.000042f, +0.000052f, +0.000047f, -0.000110f, +0.000095f, +0.000059f, +0.000002f, - +0.000070f, -0.000027f, -0.000022f, -0.000017f, -0.000024f, +0.000037f, -0.000003f, +0.000043f, -0.000031f, -0.000022f, - +0.000067f, -0.000009f, +0.000009f, -0.000007f, -0.000007f, +0.000005f - }, - { - -0.002835f, +0.059745f, +0.006370f, -0.002171f, +0.000437f, +0.000265f, +0.000257f, -0.000058f, -0.000695f, +0.000177f, - +0.001311f, -0.000566f, +0.000188f, -0.002021f, +0.001683f, -0.000091f, -0.000104f, +0.000302f, -0.000463f, -0.000443f, - -0.000254f, +0.000536f, -0.001482f, +0.000401f, +0.000479f, -0.000534f, +0.000258f, +0.000363f, +0.000103f, -0.000223f, - -0.000219f, +0.000017f, -0.000283f, -0.000334f, -0.000471f, +0.000033f, -0.000208f, -0.000161f, +0.000264f, +0.000626f, - -0.000408f, +0.000163f, +0.000707f, -0.000029f, -0.000099f, -0.000373f, +0.000146f, +0.000090f, -0.000042f, +0.000000f, - -0.000214f, +0.000279f, -0.000099f, +0.000031f, +0.000100f, +0.000105f, -0.000099f, -0.000128f, +0.000163f, -0.000051f, - -0.000035f, +0.000087f, -0.000063f, +0.000088f, +0.000118f, -0.000309f, -0.000045f, +0.000124f, +0.000025f, +0.000044f, - +0.000000f, -0.000013f, -0.000074f, -0.000008f, +0.000046f, +0.000093f, -0.000138f, -0.000031f, +0.000023f, -0.000024f, - -0.000022f, +0.000013f, -0.000088f, +0.000020f, -0.000038f, -0.000076f, -0.000054f, +0.000009f, +0.000040f, +0.000041f, - +0.000028f, -0.000035f, -0.000006f, -0.000046f, +0.000032f, +0.000015f - }, - { - -0.000102f, +0.005168f, -0.000921f, +0.001106f, -0.000704f, -0.000330f, +0.000813f, +0.000040f, -0.000211f, +0.000263f, - +0.000333f, +0.000501f, -0.000721f, +0.000170f, -0.001857f, +0.001167f, -0.000214f, -0.000955f, +0.000256f, +0.001599f, - +0.000032f, -0.001759f, -0.001637f, +0.000379f, +0.000659f, +0.000782f, -0.000300f, -0.000168f, -0.000194f, +0.000215f, - +0.000277f, -0.000218f, -0.000206f, +0.000310f, -0.000005f, -0.000118f, -0.000320f, +0.000202f, +0.000427f, -0.000132f, - -0.000203f, -0.000200f, +0.000290f, +0.000072f, -0.000454f, +0.000281f, -0.000105f, +0.000039f, -0.000162f, -0.000375f, - +0.000405f, +0.000310f, +0.000165f, +0.000301f, +0.000159f, -0.000198f, -0.000135f, +0.000007f, -0.000029f, +0.000121f, - +0.000102f, +0.000000f, +0.000072f, -0.000026f, +0.000023f, -0.000130f, -0.000119f, +0.000023f, +0.000083f, +0.000137f, - -0.000012f, -0.000004f, -0.000009f, -0.000081f, +0.000008f, +0.000040f, -0.000042f, -0.000067f, -0.000018f, -0.000034f, - -0.000052f, -0.000068f, -0.000026f, +0.000025f, +0.000033f, +0.000055f, -0.000003f, -0.000049f, -0.000030f, -0.000035f, - +0.000063f, -0.000024f, +0.000012f, -0.000009f, +0.000007f, +0.000033f - }, - { - -0.004230f, +0.017198f, +0.002745f, -0.001624f, -0.000435f, -0.000218f, +0.002921f, +0.000252f, -0.000266f, -0.000533f, - +0.000107f, -0.000437f, +0.000162f, -0.000116f, +0.000800f, -0.000998f, -0.000451f, +0.000084f, +0.000300f, +0.000548f, - +0.000290f, -0.000415f, +0.000772f, -0.000739f, +0.000572f, +0.000146f, -0.000209f, +0.000074f, -0.000266f, -0.000432f, - +0.000880f, +0.000396f, +0.000065f, -0.000649f, -0.000056f, +0.000285f, -0.000757f, +0.000191f, -0.000269f, +0.000128f, - +0.000439f, +0.000592f, -0.000099f, -0.000017f, -0.000410f, -0.000165f, -0.000142f, -0.000103f, +0.000259f, -0.000157f, - +0.000056f, +0.000015f, +0.000119f, +0.000288f, -0.000145f, -0.000145f, -0.000207f, -0.000225f, +0.000202f, -0.000003f, - +0.000033f, +0.000029f, +0.000067f, -0.000049f, -0.000102f, +0.000098f, -0.000068f, -0.000040f, -0.000077f, +0.000029f, - -0.000024f, +0.000010f, -0.000047f, +0.000045f, +0.000133f, -0.000038f, +0.000125f, +0.000056f, -0.000104f, +0.000017f, - -0.000025f, +0.000007f, +0.000055f, -0.000078f, +0.000021f, -0.000046f, +0.000066f, -0.000009f, +0.000058f, -0.000005f, - -0.000038f, +0.000024f, +0.000013f, -0.000029f, -0.000028f, +0.000050f - }, - { - +0.000330f, -0.003017f, -0.002175f, -0.000457f, -0.000369f, +0.000451f, -0.000265f, +0.000162f, +0.000016f, -0.000121f, - -0.000189f, +0.000063f, -0.001350f, +0.001666f, +0.000170f, -0.001060f, +0.000078f, -0.000311f, +0.001681f, -0.000192f, - -0.001363f, -0.000699f, +0.000728f, -0.000433f, +0.001222f, +0.000848f, -0.001168f, +0.000418f, -0.000108f, -0.000357f, - +0.000719f, +0.000195f, +0.000164f, -0.000536f, +0.000423f, -0.000294f, +0.000254f, -0.000174f, +0.000518f, +0.000349f, - +0.000264f, -0.000004f, -0.000345f, +0.000330f, +0.000187f, -0.000208f, -0.000046f, -0.000320f, +0.000040f, -0.000058f, - +0.000073f, +0.000091f, -0.000259f, +0.000127f, +0.000079f, +0.000119f, -0.000023f, -0.000063f, -0.000419f, -0.000095f, - -0.000225f, +0.000009f, +0.000034f, +0.000016f, -0.000180f, -0.000095f, +0.000175f, -0.000083f, +0.000028f, -0.000033f, - -0.000007f, +0.000063f, -0.000022f, +0.000062f, +0.000045f, +0.000008f, +0.000101f, +0.000069f, -0.000075f, +0.000032f, - -0.000063f, +0.000048f, +0.000063f, -0.000054f, +0.000002f, -0.000018f, -0.000014f, -0.000049f, -0.000026f, -0.000009f, - -0.000033f, +0.000001f, +0.000043f, +0.000038f, -0.000045f, +0.000015f - }, - { - -0.000169f, -0.005936f, -0.003667f, +0.002568f, -0.000220f, +0.003263f, +0.002446f, -0.000114f, +0.000728f, -0.000849f, - -0.000043f, -0.000030f, -0.000034f, -0.000812f, -0.000494f, +0.000788f, -0.001555f, +0.000118f, -0.000159f, -0.000363f, - +0.001265f, +0.000135f, +0.000197f, -0.000102f, -0.000029f, +0.000530f, -0.000058f, -0.000587f, +0.000128f, +0.000556f, - -0.000222f, +0.000451f, +0.000207f, -0.000102f, -0.000657f, +0.000072f, +0.000394f, -0.000335f, +0.000024f, +0.000469f, - +0.000127f, -0.000205f, -0.000218f, +0.000743f, -0.000463f, -0.000221f, +0.000097f, +0.000015f, -0.000415f, -0.000207f, - -0.000036f, -0.000082f, +0.000166f, -0.000005f, +0.000335f, +0.000166f, +0.000265f, +0.000188f, -0.000080f, -0.000231f, - +0.000009f, -0.000041f, -0.000014f, -0.000062f, +0.000023f, +0.000019f, +0.000056f, -0.000074f, -0.000088f, +0.000116f, - +0.000043f, -0.000052f, -0.000043f, +0.000154f, -0.000000f, -0.000003f, -0.000039f, -0.000063f, +0.000061f, +0.000005f, - +0.000139f, -0.000084f, -0.000044f, +0.000005f, +0.000043f, +0.000136f, -0.000010f, -0.000094f, -0.000002f, -0.000009f, - -0.000028f, -0.000037f, -0.000025f, +0.000067f, -0.000007f, +0.000055f - }, - { - -0.000003f, +0.000579f, -0.003242f, +0.000474f, -0.000045f, +0.000016f, +0.000196f, +0.000189f, +0.000688f, -0.000394f, - -0.000396f, +0.000198f, -0.001763f, +0.000499f, +0.007622f, +0.001532f, +0.001822f, -0.000386f, +0.000173f, -0.000207f, - -0.000295f, +0.001430f, -0.000036f, +0.001346f, +0.001486f, +0.000370f, +0.000820f, +0.000154f, -0.001475f, +0.000207f, - -0.001074f, +0.000186f, +0.000786f, +0.000101f, +0.000034f, -0.000026f, -0.000027f, -0.000096f, -0.000094f, +0.000313f, - -0.000390f, +0.000009f, +0.000243f, -0.000184f, -0.000045f, +0.000214f, -0.000543f, +0.000153f, +0.000059f, +0.000218f, - -0.000247f, +0.000306f, +0.000372f, -0.000044f, +0.000009f, -0.000003f, -0.000075f, -0.000037f, +0.000052f, -0.000100f, - -0.000128f, +0.000319f, -0.000068f, -0.000075f, +0.000028f, +0.000168f, -0.000195f, -0.000026f, +0.000039f, +0.000033f, - +0.000078f, -0.000061f, -0.000019f, +0.000046f, -0.000037f, +0.000064f, +0.000126f, -0.000127f, -0.000032f, -0.000092f, - -0.000015f, +0.000073f, -0.000033f, -0.000006f, +0.000036f, -0.000071f, -0.000053f, -0.000080f, +0.000058f, -0.000076f, - +0.000002f, +0.000069f, +0.000046f, -0.000055f, +0.000019f, +0.000058f - }, - { - +0.001628f, +0.001573f, +0.001020f, -0.000487f, -0.001114f, -0.000586f, -0.001199f, -0.000325f, +0.000220f, -0.000634f, - +0.001213f, +0.000421f, -0.000122f, -0.001460f, -0.003150f, -0.000685f, +0.001217f, +0.000062f, +0.000134f, -0.000292f, - +0.000026f, -0.000369f, -0.000017f, +0.000461f, +0.000206f, -0.000053f, -0.000454f, -0.000618f, +0.000726f, -0.000022f, - +0.000169f, +0.000020f, +0.000449f, -0.000050f, -0.000154f, -0.000594f, -0.000377f, -0.000255f, +0.000402f, -0.000418f, - +0.000188f, +0.000329f, +0.000358f, +0.000088f, -0.000073f, +0.000223f, -0.000251f, -0.000219f, -0.000085f, +0.000006f, - +0.000128f, +0.000019f, +0.000230f, +0.000227f, +0.000054f, +0.000025f, +0.000111f, -0.000118f, +0.000168f, -0.000072f, - +0.000047f, +0.000099f, -0.000087f, -0.000100f, +0.000023f, -0.000052f, -0.000162f, -0.000004f, +0.000045f, +0.000019f, - +0.000066f, -0.000105f, -0.000148f, +0.000041f, +0.000123f, +0.000047f, -0.000027f, -0.000060f, +0.000034f, +0.000003f, - -0.000065f, -0.000066f, +0.000084f, -0.000015f, -0.000032f, +0.000031f, +0.000019f, -0.000029f, +0.000127f, -0.000029f, - +0.000003f, +0.000039f, -0.000051f, +0.000007f, -0.000025f, -0.000003f - } - }, - { - { - +0.000262f, -0.000635f, -0.003161f, +0.001037f, -0.000725f, -0.000132f, +0.000137f, -0.000482f, -0.000027f, -0.000065f, - +0.000166f, -0.000161f, +0.001181f, +0.000976f, +0.000345f, -0.000829f, -0.000594f, -0.000323f, +0.000423f, -0.000253f, - -0.001191f, -0.001121f, +0.000590f, +0.000127f, +0.000589f, +0.000199f, -0.001017f, +0.000431f, -0.000444f, -0.001201f, - -0.000053f, -0.000519f, -0.000578f, +0.000733f, -0.000328f, -0.000293f, +0.000451f, +0.000649f, -0.000223f, -0.000432f, - -0.000021f, -0.000094f, +0.000268f, -0.000239f, -0.000142f, +0.000158f, +0.000102f, -0.000106f, -0.000220f, -0.000373f, - -0.000099f, +0.000044f, -0.000056f, -0.000208f, -0.000113f, +0.000013f, -0.000012f, +0.000247f, +0.000096f, -0.000291f, - -0.000098f, -0.000231f, +0.000015f, +0.000092f, -0.000003f, -0.000103f, +0.000038f, -0.000080f, -0.000222f, +0.000064f, - +0.000135f, +0.000035f, +0.000045f, -0.000020f, +0.000035f, -0.000004f, +0.000005f, -0.000060f, -0.000051f, +0.000016f, - +0.000024f, -0.000055f, -0.000058f, -0.000020f, +0.000097f, +0.000063f, +0.000002f, -0.000066f, +0.000017f, +0.000068f, - -0.000060f, +0.000021f, +0.000013f, +0.000014f, +0.000035f, -0.000009f - }, - { - +0.003558f, -0.032283f, -0.010037f, -0.001355f, -0.000288f, -0.000779f, +0.000416f, +0.000443f, +0.000105f, -0.000646f, - -0.000003f, -0.000501f, +0.000041f, -0.000101f, -0.001047f, +0.001054f, +0.000225f, +0.000083f, +0.000903f, -0.000188f, - +0.000247f, +0.000882f, -0.000718f, -0.000036f, +0.000407f, +0.000503f, +0.000005f, +0.000854f, -0.000128f, -0.000052f, - -0.000414f, -0.000441f, +0.000372f, +0.000324f, -0.000869f, -0.000132f, +0.000629f, +0.000580f, +0.000278f, -0.000484f, - -0.000208f, -0.000473f, +0.000273f, +0.000368f, -0.000337f, +0.000370f, -0.000192f, +0.000416f, -0.000162f, +0.000177f, - -0.000059f, -0.000487f, +0.000103f, +0.000140f, -0.000050f, +0.000106f, -0.000052f, +0.000225f, +0.000082f, +0.000035f, - -0.000128f, +0.000245f, +0.000050f, +0.000024f, +0.000095f, +0.000007f, -0.000137f, -0.000113f, -0.000129f, +0.000163f, - +0.000075f, +0.000005f, -0.000051f, -0.000117f, +0.000145f, -0.000098f, +0.000016f, +0.000066f, -0.000011f, -0.000117f, - -0.000034f, +0.000037f, -0.000019f, +0.000003f, +0.000021f, +0.000156f, -0.000114f, +0.000033f, -0.000001f, +0.000004f, - +0.000010f, +0.000001f, -0.000050f, +0.000023f, -0.000022f, +0.000023f - }, - { - +0.002744f, -0.005425f, +0.000254f, -0.002096f, +0.001846f, +0.000591f, -0.000546f, -0.000048f, -0.000047f, +0.001171f, - +0.000013f, +0.000187f, +0.000182f, +0.000053f, -0.002539f, -0.000889f, -0.000564f, -0.000438f, -0.000318f, -0.000681f, - +0.000524f, -0.000463f, -0.000016f, -0.000578f, -0.000337f, +0.000156f, +0.000854f, +0.000443f, -0.000579f, -0.000258f, - +0.000733f, +0.000329f, -0.000301f, +0.000692f, +0.000086f, -0.000479f, -0.000253f, +0.000178f, +0.000598f, +0.000182f, - -0.000349f, +0.000091f, +0.000334f, -0.000129f, +0.000158f, +0.000751f, +0.000126f, +0.000052f, -0.000183f, +0.000179f, - +0.000182f, +0.000163f, +0.000186f, +0.000025f, -0.000005f, +0.000009f, -0.000251f, +0.000183f, +0.000057f, +0.000030f, - -0.000210f, -0.000148f, +0.000052f, -0.000094f, -0.000083f, -0.000012f, +0.000038f, -0.000033f, -0.000014f, -0.000030f, - +0.000011f, -0.000006f, -0.000009f, -0.000085f, +0.000039f, +0.000016f, +0.000036f, +0.000009f, +0.000084f, -0.000000f, - -0.000041f, +0.000006f, -0.000083f, +0.000042f, +0.000052f, -0.000025f, +0.000059f, +0.000005f, -0.000056f, +0.000039f, - -0.000060f, +0.000008f, -0.000025f, +0.000008f, -0.000017f, -0.000024f - }, - { - -0.000236f, +0.007600f, +0.001046f, -0.000742f, +0.000217f, +0.000108f, -0.000411f, -0.000294f, -0.000162f, +0.000055f, - +0.000129f, +0.000275f, -0.000131f, -0.000685f, +0.004541f, +0.000229f, -0.004323f, +0.000140f, -0.001626f, +0.000892f, - +0.001204f, -0.001295f, +0.000287f, +0.000904f, -0.001003f, +0.000610f, -0.001140f, -0.000314f, +0.000957f, -0.000754f, - +0.000243f, +0.000347f, -0.000490f, -0.000128f, -0.000192f, -0.000338f, +0.000079f, +0.000123f, -0.000110f, -0.000075f, - +0.000150f, +0.000235f, +0.000343f, +0.000148f, -0.000008f, -0.000218f, -0.000054f, +0.000048f, +0.000084f, +0.000180f, - +0.000475f, -0.000112f, -0.000160f, +0.000084f, +0.000004f, +0.000164f, +0.000158f, -0.000097f, +0.000096f, +0.000135f, - -0.000053f, -0.000076f, +0.000163f, +0.000018f, -0.000043f, +0.000060f, +0.000006f, -0.000072f, -0.000040f, +0.000173f, - +0.000142f, -0.000066f, -0.000048f, +0.000017f, +0.000049f, +0.000003f, -0.000103f, -0.000052f, +0.000034f, +0.000080f, - +0.000049f, -0.000068f, +0.000013f, -0.000014f, +0.000032f, +0.000048f, -0.000086f, -0.000041f, +0.000011f, +0.000023f, - -0.000008f, -0.000053f, -0.000028f, +0.000062f, -0.000023f, -0.000014f - }, - { - +0.007597f, +0.004839f, -0.007591f, +0.001195f, -0.000282f, +0.000224f, +0.000350f, -0.000053f, +0.000046f, +0.000545f, - -0.000638f, +0.000852f, -0.000292f, -0.000493f, +0.000572f, -0.001033f, +0.000448f, -0.000175f, -0.000013f, +0.000002f, - -0.000169f, +0.000324f, -0.000456f, +0.000644f, -0.000593f, +0.000252f, +0.000188f, +0.002096f, +0.000082f, +0.000209f, - -0.000000f, -0.000410f, -0.000717f, +0.000478f, +0.000162f, +0.000423f, +0.000196f, +0.000055f, -0.000105f, +0.000135f, - +0.000396f, -0.000229f, -0.000156f, +0.000017f, -0.000334f, -0.000109f, +0.000162f, +0.000182f, -0.000037f, +0.000032f, - -0.000265f, -0.000112f, +0.000105f, +0.000261f, +0.000060f, -0.000109f, +0.000328f, +0.000014f, -0.000082f, -0.000204f, - +0.000052f, -0.000011f, -0.000115f, +0.000060f, +0.000059f, -0.000141f, +0.000104f, +0.000090f, -0.000086f, -0.000034f, - -0.000023f, +0.000141f, +0.000069f, -0.000074f, -0.000084f, +0.000057f, -0.000158f, +0.000029f, -0.000036f, -0.000058f, - +0.000003f, -0.000010f, -0.000051f, +0.000069f, +0.000032f, -0.000061f, -0.000007f, -0.000018f, +0.000023f, +0.000010f, - +0.000047f, -0.000007f, -0.000005f, +0.000040f, -0.000031f, -0.000027f - }, - { - -0.000059f, -0.001421f, +0.002573f, +0.000671f, -0.000046f, -0.000005f, -0.000229f, +0.000103f, +0.000018f, +0.000252f, - +0.000367f, +0.000070f, +0.000765f, +0.000946f, -0.001272f, +0.001118f, +0.001172f, +0.001235f, -0.000815f, +0.002157f, - +0.001008f, -0.000319f, -0.001219f, +0.001876f, -0.001503f, -0.000983f, -0.000954f, -0.000249f, -0.000484f, -0.001912f, - -0.000401f, -0.000278f, +0.000110f, -0.000392f, +0.000613f, +0.000291f, -0.000372f, +0.000428f, +0.000264f, +0.000125f, - -0.000537f, +0.000388f, +0.000264f, -0.000122f, +0.000163f, +0.000275f, -0.000002f, -0.000062f, -0.000148f, -0.000047f, - -0.000083f, +0.000234f, +0.000166f, -0.000022f, -0.000235f, +0.000029f, -0.000076f, +0.000130f, -0.000012f, +0.000021f, - +0.000063f, -0.000184f, -0.000013f, +0.000075f, -0.000100f, -0.000052f, +0.000112f, +0.000015f, +0.000086f, -0.000004f, - -0.000121f, -0.000008f, +0.000030f, +0.000054f, -0.000075f, -0.000092f, -0.000092f, +0.000067f, +0.000049f, +0.000079f, - -0.000081f, +0.000046f, +0.000057f, +0.000022f, -0.000054f, -0.000007f, +0.000010f, -0.000001f, -0.000018f, +0.000041f, - +0.000064f, -0.000048f, -0.000102f, +0.000015f, +0.000016f, +0.000022f - }, - { - +0.007260f, -0.023002f, +0.000260f, -0.002664f, -0.000262f, +0.000084f, -0.000083f, +0.000840f, +0.000199f, -0.000287f, - -0.000497f, +0.000216f, -0.000164f, +0.000432f, +0.000414f, -0.000100f, +0.000105f, -0.000449f, +0.001212f, +0.000093f, - -0.000426f, -0.000463f, -0.000246f, +0.000275f, -0.000344f, -0.000193f, -0.000209f, +0.000209f, -0.000510f, +0.000113f, - -0.000143f, -0.000148f, +0.000658f, +0.000112f, -0.000178f, +0.000275f, -0.000069f, -0.000109f, -0.000660f, +0.000017f, - +0.000033f, +0.000486f, +0.000456f, -0.000154f, +0.000018f, -0.000173f, +0.000070f, +0.000083f, -0.000088f, +0.000309f, - -0.000233f, +0.000074f, -0.000079f, -0.000118f, -0.000072f, -0.000128f, -0.000010f, +0.000057f, -0.000116f, +0.000009f, - +0.000062f, +0.000048f, -0.000019f, -0.000010f, -0.000097f, -0.000190f, -0.000110f, +0.000149f, -0.000044f, -0.000078f, - +0.000119f, -0.000000f, -0.000255f, +0.000012f, +0.000030f, -0.000032f, -0.000043f, +0.000029f, +0.000009f, -0.000060f, - +0.000133f, -0.000020f, -0.000068f, +0.000026f, +0.000085f, -0.000086f, -0.000063f, +0.000058f, +0.000042f, +0.000017f, - -0.000075f, +0.000049f, +0.000029f, +0.000015f, +0.000010f, -0.000023f - }, - { - -0.000066f, -0.002202f, +0.000572f, +0.000882f, +0.000253f, +0.000056f, -0.000169f, +0.000114f, -0.000138f, +0.000005f, - +0.000495f, +0.000234f, +0.000164f, +0.001337f, +0.002529f, +0.000336f, +0.000364f, +0.000482f, -0.000791f, +0.001132f, - +0.002615f, +0.000524f, -0.000750f, +0.001084f, -0.001196f, -0.002129f, -0.000346f, -0.000126f, -0.000225f, +0.000085f, - +0.000716f, -0.000243f, -0.000136f, -0.000400f, +0.000313f, -0.000319f, -0.000320f, -0.000167f, +0.000132f, +0.000157f, - +0.000199f, +0.000149f, +0.000035f, +0.000214f, -0.000145f, -0.000300f, -0.000353f, +0.000506f, +0.000060f, -0.000346f, - +0.000001f, -0.000016f, -0.000213f, -0.000105f, -0.000027f, +0.000045f, -0.000060f, +0.000159f, +0.000179f, -0.000177f, - -0.000083f, -0.000076f, +0.000050f, +0.000028f, +0.000082f, -0.000033f, -0.000116f, -0.000110f, +0.000097f, +0.000064f, - +0.000043f, +0.000055f, -0.000020f, -0.000006f, -0.000009f, +0.000023f, -0.000039f, -0.000046f, +0.000048f, -0.000038f, - +0.000097f, +0.000020f, +0.000027f, -0.000012f, -0.000056f, +0.000048f, -0.000056f, -0.000005f, +0.000015f, -0.000058f, - +0.000041f, +0.000002f, -0.000040f, +0.000018f, +0.000002f, +0.000009f - }, - { - +0.009605f, +0.059006f, -0.002942f, -0.001563f, -0.000685f, +0.000087f, -0.000459f, +0.000856f, -0.000559f, -0.000638f, - +0.001005f, +0.000352f, +0.000618f, +0.000495f, +0.000599f, -0.001310f, -0.000803f, +0.000338f, -0.000356f, -0.000219f, - -0.000597f, +0.000384f, -0.000698f, -0.000439f, +0.000369f, -0.000426f, +0.000035f, -0.000117f, -0.000121f, +0.000145f, - -0.000027f, -0.000250f, +0.000088f, -0.000713f, -0.000390f, -0.000358f, -0.000073f, +0.000888f, -0.001163f, +0.000895f, - -0.000380f, +0.000547f, +0.000256f, +0.000160f, -0.000099f, -0.000247f, -0.000184f, +0.000200f, +0.000294f, -0.000250f, - -0.000265f, -0.000080f, -0.000076f, +0.000136f, +0.000301f, +0.000051f, -0.000063f, -0.000113f, +0.000149f, +0.000072f, - +0.000030f, +0.000007f, -0.000074f, +0.000130f, +0.000179f, -0.000093f, -0.000173f, +0.000075f, -0.000018f, -0.000003f, - +0.000015f, +0.000077f, -0.000094f, +0.000075f, -0.000037f, +0.000103f, -0.000091f, -0.000026f, -0.000027f, -0.000026f, - -0.000045f, +0.000070f, -0.000009f, +0.000025f, +0.000018f, -0.000023f, -0.000067f, -0.000056f, +0.000005f, -0.000000f, - +0.000067f, -0.000012f, +0.000000f, -0.000072f, +0.000030f, +0.000015f - }, - { - +0.000206f, +0.004493f, -0.000835f, +0.000810f, +0.000120f, -0.001558f, +0.000202f, +0.000809f, +0.000216f, +0.000131f, - +0.000332f, +0.001322f, -0.000459f, +0.000179f, -0.002081f, +0.000257f, +0.000647f, -0.000917f, -0.001279f, +0.001531f, - +0.000133f, -0.001226f, -0.000880f, -0.000099f, +0.000377f, +0.000331f, -0.000292f, -0.000101f, +0.000355f, +0.000287f, - +0.000059f, -0.000223f, -0.000247f, +0.000257f, -0.000378f, -0.000071f, -0.000652f, -0.000137f, +0.000249f, -0.000272f, - -0.000179f, -0.000347f, +0.000100f, +0.000420f, -0.000491f, +0.000126f, +0.000061f, -0.000077f, +0.000006f, -0.000257f, - -0.000047f, +0.000319f, +0.000017f, +0.000233f, +0.000457f, -0.000262f, -0.000048f, -0.000004f, -0.000074f, +0.000037f, - +0.000139f, +0.000086f, +0.000151f, +0.000018f, +0.000046f, +0.000017f, -0.000145f, -0.000092f, -0.000124f, +0.000128f, - +0.000005f, +0.000035f, +0.000110f, -0.000103f, +0.000015f, +0.000008f, +0.000008f, -0.000028f, +0.000032f, +0.000046f, - +0.000017f, -0.000049f, -0.000035f, -0.000029f, -0.000040f, +0.000020f, +0.000050f, -0.000034f, -0.000012f, -0.000049f, - +0.000055f, -0.000018f, -0.000010f, -0.000012f, -0.000033f, +0.000018f - }, - { - +0.004775f, +0.009026f, -0.003382f, +0.001237f, -0.000272f, +0.000156f, +0.001583f, +0.001178f, +0.000428f, -0.000658f, - +0.000156f, -0.000181f, -0.000147f, -0.000199f, -0.000381f, +0.000364f, -0.000483f, -0.000385f, +0.000069f, +0.000032f, - +0.000339f, -0.000424f, +0.000370f, -0.000146f, +0.000307f, -0.000067f, -0.000407f, +0.000408f, -0.000154f, -0.000462f, - +0.000221f, -0.000063f, +0.000455f, -0.000418f, -0.000530f, +0.000646f, -0.000315f, -0.000313f, +0.000207f, +0.000085f, - -0.000001f, +0.000441f, +0.000222f, +0.000051f, -0.000102f, -0.000173f, -0.000214f, -0.000127f, +0.000138f, +0.000065f, - +0.000065f, -0.000079f, +0.000078f, +0.000250f, +0.000110f, -0.000049f, -0.000143f, -0.000319f, +0.000124f, +0.000102f, - +0.000067f, -0.000006f, +0.000140f, +0.000003f, -0.000129f, +0.000099f, -0.000032f, -0.000020f, -0.000116f, +0.000034f, - +0.000025f, -0.000024f, -0.000085f, -0.000062f, +0.000017f, -0.000048f, +0.000060f, +0.000102f, -0.000053f, +0.000019f, - -0.000018f, -0.000050f, +0.000085f, -0.000102f, +0.000001f, -0.000099f, +0.000028f, -0.000000f, +0.000043f, +0.000009f, - -0.000042f, -0.000009f, +0.000045f, +0.000011f, -0.000064f, +0.000016f - }, - { - -0.000103f, -0.003991f, -0.000610f, -0.000924f, -0.000487f, +0.000316f, +0.000030f, -0.000181f, +0.000147f, -0.000029f, - -0.000207f, +0.000163f, -0.000330f, -0.000812f, -0.000205f, +0.000024f, -0.000338f, -0.000046f, +0.000120f, +0.000118f, - +0.000991f, -0.003104f, +0.000397f, -0.001503f, +0.001168f, +0.001393f, +0.000164f, -0.000731f, -0.000009f, -0.000059f, - +0.000663f, +0.000260f, +0.000735f, -0.000279f, -0.000192f, +0.000088f, +0.000034f, -0.000350f, +0.000575f, +0.000041f, - +0.000070f, +0.000191f, -0.000144f, -0.000030f, +0.000018f, +0.000020f, +0.000007f, -0.000341f, -0.000079f, -0.000348f, - -0.000124f, +0.000311f, -0.000144f, +0.000112f, -0.000043f, +0.000185f, +0.000141f, +0.000126f, -0.000125f, -0.000031f, - -0.000119f, -0.000072f, -0.000018f, +0.000105f, -0.000047f, -0.000125f, +0.000247f, -0.000067f, +0.000065f, -0.000054f, - -0.000049f, +0.000052f, -0.000085f, -0.000012f, -0.000037f, -0.000043f, +0.000036f, +0.000079f, -0.000007f, +0.000061f, - -0.000052f, +0.000044f, +0.000079f, -0.000001f, +0.000012f, +0.000011f, +0.000022f, -0.000035f, -0.000025f, -0.000023f, - -0.000038f, -0.000009f, +0.000016f, +0.000026f, -0.000019f, -0.000023f - }, - { - -0.000747f, -0.004479f, -0.000193f, +0.000153f, -0.000489f, -0.000367f, +0.003964f, +0.000184f, +0.000969f, -0.000662f, - -0.001256f, -0.000074f, -0.000728f, +0.001000f, -0.000794f, +0.000979f, -0.001451f, -0.000166f, +0.000239f, -0.000950f, - +0.000803f, +0.000188f, +0.000368f, +0.000131f, +0.000125f, -0.000394f, -0.000350f, -0.000496f, -0.000522f, +0.000440f, - +0.000071f, +0.000178f, -0.000031f, -0.000050f, -0.000569f, -0.000377f, +0.000505f, +0.000080f, -0.000083f, +0.000333f, - +0.000032f, +0.000048f, +0.000283f, +0.000467f, +0.000244f, +0.000368f, -0.000186f, +0.000199f, -0.000239f, -0.000368f, - +0.000094f, -0.000229f, +0.000111f, -0.000080f, +0.000030f, +0.000083f, +0.000102f, +0.000246f, +0.000109f, -0.000233f, - -0.000073f, -0.000024f, +0.000001f, -0.000054f, +0.000045f, +0.000189f, -0.000004f, +0.000037f, -0.000116f, -0.000042f, - +0.000156f, -0.000000f, -0.000128f, -0.000025f, +0.000011f, -0.000049f, +0.000045f, -0.000090f, -0.000017f, -0.000077f, - +0.000139f, +0.000028f, -0.000032f, -0.000068f, -0.000038f, +0.000129f, +0.000084f, +0.000016f, +0.000045f, +0.000005f, - -0.000024f, -0.000001f, -0.000095f, +0.000002f, -0.000024f, -0.000018f - }, - { - +0.000315f, +0.001138f, -0.001496f, -0.000770f, -0.000028f, +0.000023f, +0.000009f, +0.000291f, +0.000147f, +0.000176f, - -0.000153f, +0.000018f, -0.001601f, +0.003673f, +0.002302f, +0.002967f, +0.000020f, +0.000751f, +0.000219f, -0.000941f, - -0.000434f, +0.000644f, +0.000413f, +0.000973f, +0.001202f, +0.000348f, +0.000408f, -0.000297f, -0.000229f, +0.000254f, - -0.000961f, +0.000430f, +0.000442f, +0.000304f, +0.000470f, +0.000089f, +0.000401f, -0.000109f, -0.000301f, +0.000544f, - -0.000333f, -0.000306f, +0.000145f, -0.000186f, -0.000098f, +0.000097f, -0.000349f, -0.000141f, +0.000094f, +0.000327f, - -0.000243f, +0.000089f, +0.000299f, +0.000231f, -0.000040f, +0.000018f, -0.000042f, -0.000089f, +0.000160f, -0.000076f, - -0.000229f, +0.000106f, -0.000020f, -0.000062f, -0.000076f, +0.000146f, -0.000137f, -0.000173f, +0.000041f, +0.000001f, - +0.000089f, +0.000024f, -0.000102f, +0.000042f, +0.000034f, -0.000066f, +0.000157f, -0.000122f, -0.000048f, -0.000061f, - -0.000080f, +0.000062f, +0.000060f, -0.000022f, +0.000100f, -0.000018f, -0.000026f, -0.000093f, +0.000056f, -0.000016f, - -0.000060f, -0.000004f, +0.000060f, -0.000034f, -0.000038f, +0.000075f - }, - { - +0.000017f, +0.003353f, +0.003389f, -0.001240f, -0.000730f, -0.004263f, +0.000107f, +0.000055f, -0.000056f, -0.000235f, - -0.000175f, -0.000032f, +0.000502f, -0.001707f, -0.003217f, -0.000798f, +0.001080f, -0.001438f, +0.000568f, -0.000131f, - -0.000098f, +0.000087f, -0.000305f, -0.000539f, +0.000549f, +0.000314f, -0.000149f, +0.000765f, -0.001055f, +0.000464f, - +0.000364f, -0.000184f, +0.000257f, +0.000599f, -0.000121f, -0.000058f, -0.000613f, -0.000189f, +0.000175f, +0.000101f, - -0.000244f, +0.000376f, +0.000338f, +0.000226f, -0.000158f, +0.000213f, +0.000136f, -0.000306f, -0.000300f, +0.000011f, - +0.000071f, -0.000164f, +0.000021f, +0.000181f, +0.000102f, +0.000112f, +0.000204f, -0.000060f, +0.000122f, +0.000024f, - -0.000009f, +0.000128f, +0.000040f, -0.000112f, -0.000019f, +0.000007f, -0.000140f, +0.000096f, +0.000049f, -0.000091f, - +0.000120f, +0.000010f, -0.000188f, -0.000142f, +0.000030f, +0.000082f, +0.000057f, -0.000030f, -0.000043f, +0.000070f, - -0.000029f, -0.000149f, +0.000040f, +0.000053f, -0.000035f, -0.000004f, -0.000003f, -0.000123f, +0.000084f, +0.000040f, - -0.000003f, +0.000039f, -0.000010f, -0.000034f, -0.000052f, -0.000005f - } - }, - { - { - +0.000034f, +0.007674f, +0.001430f, +0.001471f, +0.000347f, -0.000350f, +0.000190f, +0.000193f, -0.000147f, +0.000409f, - -0.000095f, +0.000133f, +0.000168f, -0.000240f, +0.001120f, -0.000540f, +0.001085f, -0.000622f, -0.000239f, -0.000158f, - +0.000663f, -0.000114f, -0.000288f, -0.000751f, -0.000730f, -0.000591f, -0.000838f, +0.000028f, -0.000341f, -0.000182f, - +0.000419f, +0.000755f, -0.001472f, +0.000718f, +0.000492f, +0.000115f, +0.000008f, +0.000203f, +0.000326f, +0.000253f, - +0.000240f, -0.000427f, +0.000048f, -0.000081f, +0.000347f, +0.000015f, -0.000317f, +0.000111f, +0.000039f, +0.000192f, - +0.000175f, -0.000092f, -0.000080f, +0.000117f, -0.000256f, -0.000246f, +0.000091f, -0.000103f, +0.000298f, +0.000098f, - +0.000150f, -0.000060f, -0.000189f, +0.000077f, +0.000147f, -0.000038f, -0.000118f, -0.000014f, -0.000029f, -0.000137f, - -0.000001f, +0.000087f, -0.000091f, +0.000082f, +0.000022f, +0.000001f, -0.000026f, +0.000084f, -0.000043f, -0.000079f, - +0.000031f, +0.000057f, +0.000024f, -0.000044f, -0.000079f, -0.000046f, +0.000059f, -0.000013f, -0.000020f, +0.000010f, - +0.000084f, -0.000040f, +0.000023f, -0.000050f, -0.000024f, +0.000031f - }, - { - -0.003066f, -0.021749f, +0.010729f, +0.002001f, +0.000924f, +0.000154f, -0.000129f, +0.000422f, +0.000815f, -0.000908f, - -0.000284f, -0.000022f, -0.000685f, +0.000842f, -0.001399f, -0.000584f, +0.001069f, -0.000454f, -0.001020f, -0.000098f, - -0.000250f, +0.000772f, +0.000320f, +0.000383f, -0.000002f, -0.000287f, -0.000799f, +0.000749f, -0.000088f, -0.000487f, - -0.000529f, -0.000571f, -0.000372f, +0.000190f, +0.000043f, -0.000441f, -0.000266f, +0.000102f, +0.000335f, -0.000056f, - +0.000659f, -0.000321f, -0.000154f, +0.000224f, -0.000072f, -0.000362f, +0.000048f, -0.000079f, +0.000039f, +0.000352f, - +0.000232f, +0.000029f, -0.000229f, -0.000097f, -0.000207f, -0.000222f, +0.000089f, -0.000019f, +0.000129f, -0.000012f, - -0.000071f, +0.000005f, -0.000033f, -0.000057f, -0.000039f, +0.000096f, +0.000075f, +0.000001f, -0.000134f, -0.000103f, - +0.000027f, -0.000078f, +0.000121f, -0.000056f, -0.000031f, +0.000179f, -0.000099f, -0.000025f, +0.000029f, +0.000046f, - +0.000033f, -0.000073f, +0.000061f, +0.000025f, -0.000058f, -0.000050f, +0.000143f, -0.000066f, +0.000033f, -0.000032f, - -0.000007f, +0.000037f, +0.000027f, -0.000047f, +0.000003f, -0.000019f - }, - { - -0.002705f, -0.012349f, +0.003664f, -0.001637f, -0.002783f, -0.000371f, -0.000116f, -0.000424f, -0.000130f, +0.000178f, - -0.000258f, +0.000187f, -0.000016f, +0.001111f, -0.001741f, -0.000890f, +0.000321f, +0.000760f, +0.000657f, -0.000096f, - -0.000027f, +0.000000f, -0.000105f, -0.000156f, +0.000639f, -0.000357f, -0.000426f, -0.000723f, -0.000511f, -0.000005f, - +0.000849f, +0.000027f, -0.000696f, -0.000611f, -0.000191f, -0.000172f, -0.000439f, -0.000039f, -0.000015f, -0.000352f, - -0.000108f, -0.000420f, +0.000243f, -0.000142f, -0.000246f, +0.000035f, +0.000266f, +0.000257f, -0.000072f, -0.000556f, - -0.000270f, +0.000364f, +0.000372f, -0.000077f, -0.000029f, +0.000163f, -0.000192f, -0.000230f, -0.000136f, +0.000121f, - +0.000100f, -0.000043f, -0.000139f, -0.000169f, +0.000118f, -0.000032f, +0.000024f, -0.000129f, +0.000116f, +0.000059f, - -0.000041f, -0.000011f, -0.000009f, -0.000059f, -0.000088f, +0.000002f, +0.000017f, +0.000005f, +0.000012f, +0.000078f, - +0.000030f, +0.000020f, +0.000017f, -0.000088f, +0.000016f, +0.000036f, -0.000024f, +0.000036f, -0.000003f, +0.000024f, - +0.000052f, -0.000025f, +0.000013f, -0.000055f, -0.000006f, +0.000022f - }, - { - +0.000186f, +0.006223f, +0.001131f, +0.000402f, -0.000293f, +0.000105f, -0.000034f, -0.000033f, -0.000272f, -0.000187f, - -0.000107f, +0.000044f, +0.000774f, -0.000497f, +0.000796f, +0.001491f, +0.000079f, +0.000157f, -0.002452f, +0.001334f, - +0.000493f, -0.001460f, -0.000368f, -0.000499f, -0.000210f, +0.001070f, +0.000209f, -0.000306f, +0.000455f, -0.001061f, - -0.000527f, -0.000459f, +0.000035f, -0.000116f, +0.000161f, +0.000653f, -0.001045f, +0.000162f, +0.000344f, -0.000781f, - +0.000241f, +0.000155f, -0.000120f, -0.000106f, -0.000028f, +0.000410f, -0.000080f, -0.000013f, +0.000334f, -0.000065f, - +0.000017f, +0.000170f, -0.000166f, -0.000011f, +0.000097f, -0.000150f, +0.000033f, +0.000246f, -0.000114f, -0.000063f, - +0.000033f, +0.000046f, -0.000029f, +0.000076f, -0.000047f, -0.000084f, +0.000000f, +0.000013f, -0.000058f, -0.000073f, - -0.000035f, +0.000173f, +0.000081f, +0.000004f, -0.000075f, +0.000138f, -0.000014f, -0.000026f, -0.000072f, -0.000007f, - +0.000018f, +0.000049f, -0.000072f, +0.000013f, -0.000042f, +0.000019f, +0.000048f, +0.000026f, +0.000006f, -0.000045f, - +0.000011f, +0.000058f, -0.000030f, -0.000016f, +0.000012f, -0.000031f - }, - { - -0.010798f, -0.013854f, +0.000122f, +0.002418f, -0.000246f, -0.000444f, -0.000359f, +0.000378f, -0.000221f, +0.000536f, - +0.000018f, -0.000672f, +0.000298f, +0.000392f, +0.000261f, +0.000523f, -0.000217f, -0.000770f, +0.000444f, +0.000177f, - +0.000516f, -0.000416f, -0.000642f, -0.000018f, +0.000483f, -0.000277f, +0.000362f, +0.001192f, -0.000502f, -0.000527f, - +0.000157f, -0.000087f, +0.000058f, +0.000040f, -0.000660f, +0.000086f, -0.000350f, +0.001229f, +0.000329f, -0.000606f, - +0.000672f, -0.000022f, +0.000019f, -0.000237f, +0.000054f, +0.000284f, -0.000376f, -0.000046f, +0.000140f, -0.000000f, - +0.000070f, +0.000220f, -0.000445f, +0.000067f, -0.000042f, -0.000053f, -0.000083f, -0.000052f, +0.000194f, +0.000252f, - +0.000027f, -0.000003f, -0.000027f, -0.000194f, -0.000120f, -0.000042f, -0.000058f, +0.000138f, +0.000061f, -0.000015f, - -0.000119f, -0.000034f, +0.000043f, +0.000175f, -0.000021f, -0.000009f, +0.000012f, -0.000111f, +0.000058f, +0.000030f, - +0.000003f, -0.000031f, +0.000024f, -0.000111f, +0.000037f, +0.000015f, +0.000006f, -0.000026f, -0.000041f, +0.000070f, - -0.000004f, -0.000013f, -0.000014f, +0.000013f, +0.000047f, +0.000015f - }, - { - +0.000469f, +0.000450f, -0.001271f, -0.000217f, +0.000048f, +0.000166f, +0.000138f, +0.000001f, -0.000094f, -0.000094f, - -0.000370f, +0.000003f, -0.000089f, -0.000371f, +0.001030f, +0.002088f, -0.002778f, +0.000790f, -0.000484f, +0.000920f, - -0.000875f, +0.000370f, +0.000667f, +0.002018f, -0.000197f, +0.001308f, +0.000078f, +0.000008f, +0.001219f, +0.000140f, - +0.000590f, -0.000655f, +0.000408f, -0.000347f, +0.000283f, +0.000399f, -0.000160f, -0.000227f, -0.000334f, +0.000089f, - +0.000326f, -0.000247f, +0.000170f, +0.000076f, -0.000129f, +0.000027f, -0.000408f, +0.000087f, +0.000012f, +0.000222f, - +0.000094f, +0.000086f, -0.000093f, +0.000255f, +0.000053f, -0.000054f, -0.000070f, +0.000234f, -0.000032f, -0.000024f, - +0.000135f, -0.000019f, -0.000021f, +0.000116f, +0.000070f, -0.000136f, -0.000023f, -0.000046f, +0.000067f, +0.000074f, - +0.000117f, -0.000008f, -0.000088f, +0.000034f, +0.000015f, -0.000035f, -0.000019f, -0.000078f, -0.000103f, -0.000019f, - +0.000053f, -0.000047f, -0.000020f, +0.000014f, +0.000069f, -0.000028f, -0.000021f, +0.000024f, -0.000006f, -0.000036f, - -0.000007f, +0.000064f, +0.000029f, -0.000050f, -0.000017f, -0.000019f - }, - { - -0.001549f, -0.035610f, +0.000965f, -0.002170f, +0.000987f, -0.000117f, +0.000097f, -0.000074f, -0.000810f, +0.000065f, - -0.000040f, +0.000091f, +0.000401f, +0.000535f, +0.000793f, -0.000379f, +0.000687f, -0.000642f, -0.000595f, +0.000579f, - +0.000258f, +0.000513f, -0.000252f, -0.000077f, -0.000642f, -0.000174f, +0.000197f, -0.000185f, -0.000099f, +0.000115f, - +0.000304f, +0.000136f, +0.000186f, +0.000271f, -0.000351f, +0.000219f, +0.000097f, +0.000250f, -0.000342f, +0.000085f, - -0.000142f, -0.000318f, -0.000104f, +0.000229f, +0.000097f, -0.000049f, -0.000213f, +0.000327f, +0.000099f, -0.000019f, - +0.000152f, -0.000097f, +0.000170f, +0.000055f, +0.000140f, -0.000048f, -0.000025f, +0.000236f, -0.000008f, -0.000042f, - -0.000086f, -0.000071f, -0.000007f, +0.000008f, +0.000036f, +0.000004f, -0.000098f, -0.000107f, +0.000061f, +0.000018f, - -0.000111f, +0.000157f, +0.000077f, -0.000109f, -0.000098f, +0.000028f, +0.000064f, -0.000071f, +0.000043f, +0.000032f, - -0.000092f, +0.000060f, +0.000016f, -0.000111f, -0.000013f, +0.000129f, -0.000068f, -0.000043f, -0.000006f, +0.000069f, - +0.000007f, -0.000055f, +0.000021f, -0.000033f, +0.000027f, -0.000020f - }, - { - +0.000612f, -0.000868f, -0.003613f, +0.000592f, -0.000192f, +0.000002f, +0.000063f, -0.000034f, +0.000041f, -0.000299f, - -0.000083f, +0.000165f, +0.000812f, -0.001331f, +0.000370f, +0.002815f, +0.000831f, +0.001926f, -0.000248f, -0.001266f, - +0.001054f, +0.001884f, -0.001489f, +0.000964f, +0.000288f, -0.000405f, +0.000574f, -0.000796f, -0.001004f, -0.000075f, - +0.000396f, -0.000290f, +0.000583f, -0.000532f, +0.000256f, +0.000572f, -0.000008f, -0.000413f, +0.000226f, -0.000219f, - +0.000109f, +0.000335f, -0.000263f, +0.000074f, +0.000220f, -0.000035f, +0.000128f, -0.000249f, +0.000310f, +0.000429f, - +0.000005f, +0.000006f, -0.000058f, +0.000167f, -0.000370f, -0.000073f, -0.000038f, -0.000127f, +0.000061f, +0.000248f, - -0.000005f, +0.000153f, -0.000138f, +0.000020f, -0.000017f, +0.000071f, +0.000246f, -0.000049f, -0.000093f, +0.000005f, - -0.000002f, -0.000076f, -0.000033f, +0.000119f, -0.000041f, -0.000006f, +0.000093f, -0.000074f, -0.000020f, +0.000006f, - -0.000089f, -0.000001f, +0.000035f, +0.000036f, +0.000032f, -0.000023f, +0.000003f, -0.000087f, +0.000040f, +0.000010f, - -0.000068f, +0.000032f, -0.000025f, +0.000011f, +0.000018f, -0.000004f - }, - { - -0.015411f, +0.036952f, +0.007928f, -0.000745f, +0.000485f, +0.000139f, -0.000826f, +0.000122f, +0.000990f, -0.000429f, - -0.001424f, +0.000198f, +0.000068f, +0.001359f, -0.000679f, +0.000561f, -0.000501f, -0.000075f, -0.000280f, +0.000193f, - -0.000171f, -0.000079f, -0.000001f, -0.000676f, -0.000507f, +0.000141f, -0.000486f, -0.000706f, +0.000062f, +0.000188f, - +0.000594f, -0.000644f, +0.000202f, -0.000701f, -0.000059f, -0.000622f, -0.000449f, +0.001156f, -0.001263f, -0.000149f, - -0.000159f, +0.000588f, -0.000148f, +0.000352f, -0.000099f, +0.000279f, -0.000105f, -0.000389f, +0.000230f, +0.000004f, - -0.000121f, -0.000561f, -0.000187f, +0.000017f, -0.000191f, -0.000069f, +0.000114f, -0.000056f, -0.000246f, +0.000011f, - +0.000096f, -0.000132f, -0.000053f, -0.000063f, -0.000136f, +0.000268f, +0.000117f, -0.000099f, -0.000011f, +0.000044f, - -0.000088f, +0.000107f, +0.000056f, +0.000031f, -0.000037f, -0.000121f, +0.000106f, -0.000030f, -0.000000f, -0.000055f, - +0.000011f, +0.000007f, +0.000017f, +0.000025f, -0.000001f, +0.000056f, +0.000066f, -0.000026f, -0.000010f, -0.000061f, - -0.000015f, +0.000026f, +0.000003f, +0.000041f, -0.000046f, +0.000012f - }, - { - -0.000322f, +0.001772f, +0.000427f, +0.000367f, +0.000758f, +0.000893f, -0.001044f, +0.000058f, +0.000384f, +0.000072f, - -0.000512f, +0.000220f, +0.000704f, +0.001396f, -0.001042f, -0.000825f, +0.000720f, +0.001297f, -0.000350f, -0.001249f, - -0.000241f, +0.000046f, +0.000978f, +0.000129f, -0.000440f, -0.000281f, +0.000363f, -0.000028f, -0.000337f, +0.000500f, - -0.001034f, +0.000409f, +0.000077f, +0.000072f, -0.000341f, +0.000464f, +0.000032f, -0.000337f, -0.000384f, -0.000410f, - -0.000082f, -0.000102f, -0.000181f, +0.000117f, +0.000416f, -0.000338f, +0.000085f, -0.000299f, +0.000105f, +0.000157f, - -0.000278f, +0.000052f, -0.000120f, -0.000257f, -0.000091f, +0.000194f, +0.000100f, +0.000024f, -0.000026f, -0.000049f, - +0.000007f, +0.000038f, -0.000073f, +0.000102f, -0.000067f, +0.000219f, +0.000149f, -0.000010f, -0.000042f, -0.000184f, - -0.000018f, -0.000037f, +0.000034f, +0.000095f, -0.000026f, -0.000085f, +0.000031f, +0.000018f, +0.000004f, +0.000021f, - +0.000062f, +0.000052f, +0.000028f, -0.000024f, -0.000008f, -0.000057f, -0.000013f, +0.000027f, -0.000003f, +0.000043f, - -0.000045f, +0.000009f, -0.000024f, +0.000015f, -0.000002f, -0.000044f - }, - { - -0.004436f, +0.001496f, -0.000145f, +0.000904f, -0.000018f, +0.002008f, -0.002909f, -0.000327f, +0.000792f, -0.000007f, - -0.000075f, +0.000046f, +0.000061f, +0.000234f, -0.001487f, +0.000574f, -0.000133f, -0.000327f, -0.000282f, +0.000103f, - -0.000104f, +0.000709f, -0.000222f, +0.000164f, -0.000349f, -0.000052f, -0.000178f, +0.000040f, +0.000349f, -0.000024f, - -0.000418f, -0.001045f, +0.000521f, +0.000151f, -0.000518f, -0.000452f, +0.000493f, -0.000363f, +0.000166f, +0.000624f, - -0.000226f, -0.000518f, +0.000183f, -0.000026f, +0.000270f, +0.000124f, -0.000106f, -0.000005f, -0.000324f, +0.000094f, - +0.000004f, -0.000017f, +0.000053f, -0.000258f, +0.000155f, +0.000014f, +0.000139f, +0.000095f, -0.000200f, -0.000006f, - +0.000024f, -0.000041f, +0.000052f, +0.000103f, +0.000114f, -0.000083f, +0.000007f, -0.000012f, +0.000004f, -0.000026f, - +0.000048f, +0.000017f, +0.000058f, -0.000007f, -0.000120f, +0.000017f, -0.000089f, -0.000054f, +0.000045f, -0.000061f, - +0.000065f, -0.000024f, -0.000061f, +0.000102f, -0.000052f, +0.000049f, -0.000069f, +0.000011f, -0.000064f, +0.000017f, - +0.000030f, -0.000041f, -0.000029f, +0.000028f, +0.000045f, -0.000034f - }, - { - +0.000035f, -0.004731f, +0.000228f, -0.000560f, +0.000284f, -0.000659f, +0.000009f, +0.000231f, +0.000055f, -0.000246f, - -0.000360f, -0.000319f, +0.001045f, +0.001104f, -0.003026f, -0.000692f, +0.001291f, +0.000178f, -0.001872f, -0.000609f, - +0.000883f, +0.000365f, +0.000847f, -0.000596f, -0.000763f, -0.000243f, +0.001057f, -0.000634f, -0.000564f, +0.000882f, - -0.000885f, +0.000972f, +0.000222f, +0.000168f, -0.000346f, -0.000010f, -0.000206f, +0.000225f, -0.000474f, +0.000002f, - -0.000176f, +0.000141f, +0.000501f, -0.000155f, -0.000235f, +0.000206f, +0.000062f, +0.000050f, -0.000024f, -0.000079f, - -0.000158f, +0.000133f, +0.000197f, +0.000038f, -0.000182f, -0.000059f, -0.000009f, +0.000192f, +0.000300f, +0.000037f, - +0.000221f, -0.000063f, -0.000156f, -0.000011f, +0.000207f, +0.000193f, -0.000048f, +0.000134f, +0.000002f, +0.000027f, - +0.000015f, -0.000024f, +0.000002f, -0.000009f, -0.000048f, +0.000022f, -0.000092f, -0.000076f, +0.000020f, -0.000010f, - +0.000072f, -0.000021f, -0.000009f, +0.000053f, +0.000028f, -0.000009f, +0.000022f, +0.000045f, +0.000023f, +0.000014f, - +0.000021f, +0.000022f, -0.000049f, -0.000038f, +0.000061f, -0.000011f - }, - { - +0.001975f, -0.001605f, +0.005358f, -0.000821f, -0.000142f, -0.002497f, -0.001477f, -0.000364f, +0.000439f, +0.000990f, - -0.000587f, -0.000790f, +0.000741f, +0.002311f, -0.000579f, +0.000128f, +0.000169f, +0.000334f, -0.000131f, +0.000300f, - -0.000976f, +0.000256f, -0.000053f, +0.000054f, +0.000001f, -0.000056f, -0.000207f, +0.000179f, -0.000433f, -0.000321f, - +0.000091f, -0.000356f, -0.000329f, -0.000088f, +0.000392f, -0.000119f, -0.000300f, +0.000181f, +0.000494f, -0.000493f, - -0.000543f, -0.000109f, +0.000372f, -0.000208f, +0.000323f, +0.000240f, +0.000033f, -0.000371f, +0.000354f, +0.000020f, - +0.000421f, -0.000035f, -0.000157f, +0.000004f, -0.000201f, -0.000158f, -0.000121f, -0.000062f, +0.000015f, +0.000204f, - -0.000049f, +0.000049f, +0.000021f, +0.000063f, -0.000153f, +0.000004f, -0.000062f, +0.000111f, +0.000120f, -0.000144f, - -0.000103f, +0.000121f, +0.000057f, -0.000076f, -0.000016f, -0.000038f, +0.000022f, +0.000107f, -0.000062f, -0.000017f, - -0.000127f, +0.000065f, +0.000060f, +0.000041f, -0.000053f, -0.000119f, +0.000013f, +0.000104f, +0.000004f, +0.000015f, - +0.000026f, +0.000023f, +0.000006f, -0.000062f, +0.000023f, -0.000041f - }, - { - -0.000577f, +0.001765f, +0.001940f, -0.000104f, +0.000065f, -0.000128f, -0.000322f, +0.000466f, -0.000750f, -0.000627f, - +0.000346f, +0.000045f, +0.000704f, +0.002782f, -0.009970f, +0.001331f, -0.000002f, -0.000281f, +0.000485f, -0.000841f, - -0.000403f, -0.000351f, +0.000313f, +0.000549f, -0.000049f, +0.001076f, -0.001131f, +0.000394f, +0.000616f, +0.000012f, - -0.000105f, +0.000710f, -0.000011f, +0.000421f, -0.000114f, +0.000293f, +0.000474f, +0.000013f, +0.000081f, +0.000062f, - +0.000309f, -0.000139f, -0.000013f, +0.000100f, -0.000039f, -0.000148f, +0.000191f, -0.000229f, +0.000048f, -0.000079f, - +0.000220f, -0.000202f, -0.000265f, +0.000004f, -0.000006f, -0.000083f, +0.000015f, +0.000038f, +0.000081f, +0.000027f, - +0.000147f, -0.000233f, -0.000105f, +0.000011f, -0.000065f, -0.000185f, +0.000142f, +0.000014f, -0.000065f, -0.000007f, - -0.000079f, +0.000003f, +0.000068f, -0.000048f, +0.000040f, -0.000057f, -0.000081f, +0.000112f, -0.000019f, +0.000091f, - +0.000018f, -0.000136f, +0.000024f, -0.000011f, -0.000017f, +0.000037f, +0.000074f, +0.000085f, -0.000074f, +0.000080f, - +0.000026f, -0.000064f, -0.000041f, +0.000043f, -0.000008f, -0.000049f - }, - { - -0.000851f, -0.000497f, +0.004042f, +0.000702f, +0.000503f, -0.000196f, +0.000913f, +0.000589f, -0.000278f, -0.000594f, - -0.000080f, -0.001690f, +0.000212f, +0.001946f, +0.003231f, +0.000072f, -0.000173f, -0.000567f, +0.000598f, -0.000666f, - +0.000095f, +0.000541f, +0.000041f, -0.000331f, -0.000487f, -0.000028f, +0.000452f, +0.002462f, +0.000083f, +0.000028f, - +0.000300f, +0.000133f, -0.000068f, +0.000417f, -0.000306f, +0.000240f, -0.000234f, +0.000429f, -0.000130f, +0.000520f, - +0.000013f, +0.000124f, +0.000073f, +0.000010f, -0.000015f, -0.000366f, +0.000323f, +0.000243f, -0.000209f, -0.000197f, - +0.000008f, -0.000035f, -0.000102f, -0.000224f, +0.000146f, -0.000264f, -0.000034f, +0.000073f, -0.000011f, +0.000177f, - -0.000073f, -0.000058f, +0.000115f, +0.000042f, -0.000002f, +0.000041f, +0.000010f, +0.000117f, -0.000063f, -0.000081f, - -0.000022f, -0.000010f, +0.000108f, +0.000006f, -0.000131f, -0.000100f, +0.000036f, +0.000052f, -0.000085f, +0.000020f, - +0.000080f, -0.000002f, -0.000052f, +0.000039f, +0.000018f, -0.000003f, -0.000030f, +0.000016f, -0.000134f, +0.000032f, - -0.000003f, -0.000018f, +0.000061f, +0.000003f, +0.000007f, -0.000016f - } - }, - { - { - +0.000229f, +0.013538f, -0.002371f, -0.000321f, +0.000499f, -0.000103f, -0.000104f, +0.000448f, -0.000007f, +0.000411f, - +0.000027f, +0.000551f, -0.000316f, +0.000285f, -0.000778f, -0.000347f, +0.001231f, +0.000127f, +0.000473f, -0.000624f, - +0.001014f, +0.000145f, -0.000476f, -0.000525f, -0.001310f, -0.000969f, -0.000349f, -0.000152f, +0.000148f, -0.000005f, - +0.000647f, +0.000286f, -0.000094f, -0.000139f, +0.000578f, +0.000103f, -0.000298f, +0.000250f, -0.000481f, +0.000503f, - +0.000101f, -0.000088f, -0.000174f, +0.000002f, +0.000318f, +0.000019f, -0.000431f, +0.000049f, +0.000034f, +0.000296f, - +0.000265f, +0.000019f, -0.000125f, +0.000176f, -0.000016f, -0.000276f, +0.000049f, -0.000269f, +0.000139f, +0.000252f, - +0.000053f, +0.000202f, -0.000064f, -0.000062f, +0.000098f, +0.000096f, -0.000067f, +0.000000f, +0.000092f, -0.000085f, - -0.000096f, +0.000031f, -0.000058f, +0.000096f, +0.000046f, +0.000000f, -0.000027f, +0.000087f, +0.000021f, -0.000048f, - +0.000003f, +0.000097f, +0.000082f, +0.000016f, -0.000068f, -0.000039f, +0.000018f, +0.000005f, -0.000018f, -0.000058f, - +0.000080f, -0.000020f, -0.000009f, -0.000016f, -0.000049f, +0.000005f - }, - { - +0.001743f, -0.020879f, +0.006169f, -0.000164f, -0.000423f, +0.000445f, -0.000261f, -0.000070f, -0.000078f, +0.000364f, - -0.000564f, +0.000003f, -0.000430f, -0.000522f, +0.000209f, -0.000902f, +0.000170f, -0.000356f, -0.001053f, -0.000593f, - +0.000144f, +0.000303f, +0.000542f, +0.000545f, -0.000159f, -0.000290f, -0.000477f, +0.000227f, -0.000039f, -0.000520f, - -0.000075f, -0.000632f, -0.000290f, -0.000098f, +0.000139f, -0.000089f, -0.000424f, -0.000211f, -0.000035f, +0.000199f, - +0.000429f, +0.000063f, -0.000392f, +0.000026f, +0.000168f, -0.000329f, -0.000081f, -0.000335f, -0.000018f, +0.000071f, - +0.000321f, +0.000276f, +0.000036f, -0.000097f, -0.000139f, -0.000288f, +0.000065f, +0.000039f, +0.000142f, +0.000038f, - +0.000142f, -0.000119f, +0.000035f, +0.000040f, -0.000150f, +0.000013f, +0.000092f, +0.000041f, +0.000018f, -0.000069f, - -0.000025f, -0.000083f, +0.000074f, +0.000048f, -0.000137f, +0.000112f, -0.000050f, -0.000053f, +0.000017f, +0.000070f, - +0.000061f, -0.000052f, +0.000047f, +0.000039f, -0.000000f, -0.000137f, +0.000100f, -0.000018f, +0.000017f, -0.000009f, - +0.000003f, +0.000023f, +0.000045f, -0.000046f, -0.000002f, -0.000025f - }, - { - +0.001485f, -0.001345f, -0.011872f, -0.000003f, -0.001341f, -0.000512f, +0.000340f, -0.000522f, +0.000110f, -0.000631f, - -0.000459f, +0.000301f, -0.000233f, +0.000106f, -0.000729f, -0.000445f, +0.000081f, +0.000281f, +0.001188f, +0.000122f, - -0.000292f, +0.000065f, +0.000044f, +0.000062f, +0.000441f, -0.000328f, -0.000268f, -0.000572f, -0.000338f, -0.000229f, - +0.000218f, -0.000275f, -0.000246f, -0.000652f, -0.000598f, -0.000175f, +0.000022f, -0.000245f, -0.000090f, -0.000510f, - +0.000084f, -0.000043f, +0.000070f, +0.000127f, -0.000120f, -0.000325f, +0.000270f, +0.000135f, +0.000239f, -0.000285f, - -0.000266f, +0.000069f, +0.000125f, +0.000049f, +0.000041f, +0.000007f, +0.000050f, -0.000099f, -0.000107f, +0.000022f, - +0.000078f, +0.000058f, +0.000014f, -0.000100f, +0.000122f, +0.000024f, -0.000017f, +0.000016f, +0.000061f, +0.000110f, - -0.000002f, +0.000002f, +0.000009f, -0.000027f, -0.000029f, -0.000017f, -0.000051f, +0.000020f, -0.000059f, +0.000030f, - +0.000026f, +0.000024f, +0.000075f, -0.000055f, -0.000064f, +0.000027f, -0.000037f, -0.000009f, +0.000034f, -0.000018f, - +0.000051f, -0.000006f, +0.000030f, -0.000027f, -0.000017f, +0.000025f - }, - { - -0.000448f, +0.003984f, +0.002468f, +0.000983f, -0.000217f, -0.000104f, +0.000069f, +0.000025f, -0.000131f, -0.000022f, - -0.000223f, -0.000530f, +0.000400f, +0.000340f, -0.003395f, +0.002013f, +0.002317f, +0.000015f, -0.003067f, +0.000881f, - -0.000829f, -0.000674f, +0.000110f, -0.000874f, +0.000566f, -0.000600f, +0.001744f, +0.000528f, -0.000647f, -0.000810f, - -0.000309f, -0.000623f, +0.000044f, -0.000275f, +0.000418f, +0.000427f, -0.000703f, -0.000006f, +0.000400f, -0.000536f, - +0.000183f, +0.000242f, -0.000150f, +0.000027f, -0.000301f, +0.000527f, +0.000196f, -0.000047f, +0.000334f, +0.000060f, - -0.000199f, +0.000085f, +0.000072f, -0.000107f, +0.000153f, -0.000108f, -0.000081f, +0.000301f, -0.000086f, -0.000206f, - -0.000062f, +0.000079f, -0.000039f, +0.000017f, -0.000036f, -0.000027f, -0.000035f, +0.000034f, +0.000006f, -0.000091f, - -0.000089f, +0.000070f, +0.000056f, +0.000010f, -0.000048f, +0.000039f, +0.000070f, +0.000033f, -0.000052f, -0.000033f, - -0.000021f, +0.000071f, -0.000051f, +0.000005f, -0.000023f, -0.000021f, +0.000032f, +0.000044f, +0.000044f, -0.000021f, - -0.000013f, +0.000055f, +0.000031f, -0.000026f, +0.000018f, +0.000017f - }, - { - +0.009309f, -0.036379f, -0.004170f, +0.002567f, +0.000371f, -0.000131f, -0.000784f, +0.000329f, -0.000281f, -0.000215f, - +0.000937f, -0.000226f, +0.000377f, +0.000551f, +0.000127f, +0.000274f, -0.000398f, -0.000729f, +0.000204f, +0.000012f, - +0.000350f, -0.000276f, +0.000015f, -0.000648f, +0.000184f, -0.000289f, +0.000308f, -0.000866f, +0.001504f, -0.000851f, - +0.000287f, -0.000090f, +0.000343f, -0.000336f, -0.000441f, -0.000009f, -0.000372f, +0.000300f, +0.000242f, -0.000341f, - +0.000329f, -0.000231f, +0.000111f, -0.000166f, +0.000086f, +0.000314f, -0.000237f, -0.000061f, +0.000215f, -0.000043f, - +0.000167f, +0.000320f, -0.000210f, -0.000117f, -0.000112f, +0.000042f, -0.000214f, -0.000184f, +0.000171f, +0.000205f, - +0.000122f, -0.000034f, +0.000084f, -0.000185f, -0.000171f, +0.000021f, -0.000091f, +0.000065f, +0.000089f, +0.000013f, - -0.000076f, -0.000085f, -0.000097f, +0.000111f, +0.000068f, -0.000068f, +0.000112f, -0.000071f, +0.000021f, +0.000079f, - +0.000043f, +0.000008f, +0.000031f, -0.000111f, -0.000048f, +0.000041f, +0.000003f, -0.000003f, -0.000055f, +0.000009f, - -0.000014f, -0.000003f, -0.000022f, -0.000016f, +0.000033f, +0.000033f - }, - { - +0.000216f, +0.002179f, -0.001067f, -0.000791f, +0.000040f, +0.000036f, +0.000184f, +0.000102f, +0.000073f, +0.000039f, - -0.000507f, -0.000280f, -0.000274f, -0.001338f, +0.000548f, +0.000994f, -0.000504f, -0.000328f, +0.000710f, +0.000847f, - -0.002074f, +0.000024f, +0.000654f, +0.000341f, +0.000888f, +0.000371f, +0.001039f, -0.000050f, +0.000415f, +0.001791f, - +0.000306f, -0.000355f, -0.000136f, +0.000146f, +0.000044f, +0.000384f, -0.000021f, -0.000203f, -0.000176f, -0.000323f, - +0.000619f, -0.000198f, +0.000093f, +0.000069f, -0.000025f, +0.000010f, -0.000325f, -0.000042f, +0.000042f, +0.000130f, - +0.000300f, -0.000005f, -0.000044f, +0.000051f, +0.000174f, +0.000068f, -0.000060f, +0.000168f, -0.000019f, -0.000083f, - +0.000049f, +0.000094f, +0.000075f, +0.000015f, +0.000073f, -0.000082f, -0.000084f, -0.000080f, -0.000022f, -0.000017f, - +0.000106f, +0.000062f, -0.000087f, +0.000004f, +0.000046f, +0.000050f, +0.000066f, -0.000045f, -0.000076f, -0.000067f, - +0.000059f, -0.000018f, -0.000074f, -0.000005f, +0.000054f, -0.000006f, -0.000011f, +0.000001f, +0.000014f, -0.000021f, - -0.000057f, +0.000034f, +0.000082f, -0.000023f, -0.000012f, -0.000027f - }, - { - -0.006717f, -0.033473f, +0.004251f, -0.000709f, -0.000772f, +0.000037f, +0.000575f, -0.000515f, -0.000620f, +0.000312f, - +0.000111f, -0.000258f, +0.000428f, +0.000676f, +0.000253f, +0.000320f, +0.000151f, +0.000363f, -0.000806f, -0.000107f, - +0.000260f, +0.000265f, -0.000409f, -0.000147f, -0.000243f, -0.000220f, -0.000042f, +0.000070f, +0.000125f, -0.000187f, - +0.000111f, +0.000687f, +0.000099f, -0.000169f, +0.000160f, -0.000075f, +0.000522f, +0.000390f, -0.000362f, -0.000004f, - -0.000031f, -0.000387f, -0.000320f, +0.000358f, -0.000154f, -0.000080f, -0.000238f, +0.000074f, +0.000357f, -0.000272f, - +0.000207f, -0.000021f, +0.000017f, +0.000031f, +0.000071f, +0.000157f, -0.000037f, +0.000270f, +0.000095f, -0.000018f, - -0.000011f, -0.000055f, -0.000022f, -0.000031f, +0.000065f, +0.000116f, +0.000050f, -0.000113f, -0.000019f, +0.000026f, - -0.000113f, +0.000066f, +0.000147f, -0.000043f, -0.000099f, +0.000001f, +0.000070f, -0.000017f, +0.000013f, +0.000052f, - -0.000097f, +0.000027f, +0.000041f, -0.000036f, -0.000084f, +0.000105f, +0.000032f, -0.000050f, -0.000024f, +0.000005f, - +0.000047f, -0.000063f, -0.000036f, -0.000026f, -0.000000f, +0.000012f - }, - { - +0.000147f, +0.001391f, -0.002438f, -0.000138f, -0.000284f, -0.000093f, +0.000033f, -0.000005f, +0.000180f, -0.000233f, - -0.000406f, -0.000282f, +0.000277f, -0.001042f, +0.000345f, +0.000531f, +0.000871f, +0.000227f, +0.000056f, -0.000745f, - -0.000061f, +0.000004f, -0.000842f, +0.000543f, +0.000153f, +0.000846f, +0.000094f, -0.000185f, -0.001207f, -0.000467f, - +0.000036f, -0.000040f, +0.000509f, -0.000152f, -0.000195f, +0.000861f, +0.000086f, -0.000312f, +0.000034f, +0.000071f, - -0.000249f, +0.000227f, -0.000210f, -0.000153f, +0.000179f, +0.000112f, +0.000317f, -0.000234f, -0.000020f, +0.000421f, - +0.000140f, -0.000000f, +0.000122f, +0.000087f, -0.000126f, -0.000040f, +0.000070f, -0.000144f, -0.000093f, +0.000247f, - +0.000095f, +0.000155f, -0.000010f, -0.000030f, +0.000000f, -0.000045f, +0.000189f, +0.000038f, -0.000043f, -0.000102f, - -0.000006f, -0.000057f, -0.000043f, +0.000105f, +0.000003f, +0.000011f, +0.000057f, +0.000048f, -0.000024f, +0.000036f, - -0.000098f, -0.000061f, -0.000028f, +0.000039f, +0.000059f, -0.000020f, +0.000039f, -0.000043f, +0.000002f, +0.000046f, - -0.000061f, +0.000015f, +0.000033f, -0.000021f, +0.000014f, -0.000003f - }, - { - +0.017198f, +0.004072f, -0.002279f, -0.000804f, -0.000005f, -0.000023f, +0.000107f, -0.000759f, +0.000653f, +0.000437f, - -0.001290f, -0.000368f, -0.000867f, +0.001236f, -0.001081f, +0.000600f, +0.000924f, -0.000465f, -0.000490f, +0.000619f, - +0.000240f, -0.000115f, -0.000593f, -0.000292f, -0.000557f, +0.000397f, -0.000235f, -0.000502f, +0.000082f, -0.000034f, - +0.000187f, -0.000258f, +0.000012f, -0.000232f, -0.000148f, -0.000500f, -0.000580f, +0.000230f, +0.000190f, -0.000686f, - -0.000252f, +0.000207f, +0.000269f, +0.000039f, +0.000133f, +0.000232f, -0.000105f, -0.000320f, -0.000002f, +0.000014f, - +0.000045f, -0.000268f, -0.000321f, -0.000104f, -0.000179f, -0.000183f, +0.000077f, -0.000055f, -0.000245f, +0.000028f, - -0.000016f, -0.000055f, -0.000056f, -0.000112f, -0.000268f, +0.000177f, +0.000201f, -0.000102f, +0.000039f, +0.000054f, - -0.000043f, -0.000045f, +0.000103f, -0.000008f, -0.000002f, -0.000126f, +0.000066f, +0.000019f, -0.000001f, -0.000015f, - +0.000011f, -0.000048f, +0.000009f, -0.000016f, -0.000050f, +0.000029f, +0.000053f, +0.000035f, +0.000025f, -0.000027f, - -0.000041f, +0.000014f, -0.000014f, +0.000058f, -0.000030f, -0.000009f - }, - { - +0.000249f, -0.002353f, +0.003656f, +0.000221f, +0.000216f, +0.001338f, -0.000103f, -0.000628f, +0.000121f, -0.000117f, - -0.000371f, -0.000227f, +0.000626f, +0.001338f, -0.000237f, -0.000269f, -0.000496f, +0.001028f, +0.001343f, -0.001390f, - -0.000720f, -0.000239f, +0.000442f, +0.000924f, -0.000024f, -0.000476f, +0.000669f, +0.000004f, -0.000551f, +0.000237f, - -0.001087f, +0.000003f, +0.000475f, +0.000030f, +0.000054f, +0.000092f, +0.000595f, -0.000137f, -0.000278f, -0.000235f, - +0.000022f, +0.000034f, -0.000077f, -0.000167f, +0.000543f, -0.000308f, +0.000030f, -0.000166f, -0.000161f, +0.000144f, - +0.000095f, -0.000058f, +0.000036f, -0.000178f, -0.000327f, +0.000080f, +0.000108f, -0.000027f, +0.000046f, +0.000030f, - -0.000035f, -0.000041f, -0.000132f, +0.000001f, -0.000078f, +0.000089f, +0.000174f, +0.000134f, +0.000120f, -0.000193f, - -0.000027f, -0.000039f, -0.000067f, +0.000066f, -0.000026f, -0.000033f, -0.000026f, -0.000012f, -0.000017f, -0.000067f, - +0.000001f, +0.000048f, +0.000044f, +0.000010f, +0.000042f, -0.000010f, -0.000054f, +0.000020f, -0.000018f, +0.000050f, - -0.000032f, +0.000001f, -0.000007f, +0.000017f, +0.000035f, -0.000027f - }, - { - +0.003346f, -0.001845f, -0.003569f, -0.001860f, +0.000656f, -0.000157f, -0.000669f, -0.000964f, +0.000236f, +0.000508f, - -0.000154f, -0.000118f, +0.000077f, +0.000467f, -0.000767f, +0.000274f, -0.000453f, +0.000142f, -0.000353f, +0.000366f, - -0.000339f, +0.000749f, -0.000036f, -0.000017f, -0.000186f, +0.000219f, -0.000054f, -0.000137f, +0.000086f, +0.000312f, - -0.000260f, -0.000624f, -0.000024f, +0.000386f, -0.000302f, -0.000750f, +0.000272f, -0.000108f, +0.000010f, +0.000258f, - +0.000336f, -0.000350f, -0.000111f, -0.000102f, +0.000124f, +0.000063f, -0.000089f, +0.000030f, -0.000135f, -0.000002f, - -0.000020f, -0.000052f, +0.000032f, -0.000276f, +0.000057f, -0.000011f, +0.000016f, +0.000175f, -0.000101f, -0.000085f, - -0.000055f, +0.000008f, -0.000034f, +0.000054f, +0.000160f, -0.000068f, -0.000024f, -0.000057f, +0.000044f, +0.000031f, - -0.000019f, +0.000039f, +0.000096f, +0.000080f, -0.000040f, +0.000034f, -0.000056f, -0.000112f, +0.000032f, -0.000046f, - +0.000042f, +0.000027f, -0.000090f, +0.000110f, -0.000031f, +0.000084f, -0.000017f, -0.000001f, -0.000042f, -0.000004f, - +0.000035f, -0.000017f, -0.000055f, -0.000002f, +0.000073f, -0.000008f - }, - { - -0.000104f, -0.003911f, +0.000155f, -0.000780f, +0.000339f, -0.000525f, -0.000232f, +0.000000f, +0.000333f, -0.000420f, - -0.000175f, -0.000414f, -0.000089f, +0.001261f, -0.000980f, -0.000855f, -0.000431f, +0.000633f, -0.000942f, +0.000067f, - -0.000634f, +0.002345f, +0.000075f, +0.000737f, -0.000846f, -0.000559f, +0.000040f, +0.000102f, -0.000359f, +0.000301f, - -0.000240f, +0.000404f, -0.000353f, +0.000393f, -0.000356f, -0.000151f, -0.000155f, +0.000466f, -0.000364f, +0.000209f, - -0.000117f, -0.000134f, +0.000535f, -0.000024f, -0.000132f, +0.000235f, -0.000162f, +0.000256f, -0.000003f, +0.000160f, - -0.000015f, -0.000118f, +0.000163f, -0.000074f, -0.000008f, -0.000126f, -0.000089f, -0.000020f, +0.000165f, -0.000028f, - +0.000181f, +0.000026f, -0.000160f, -0.000092f, +0.000063f, +0.000269f, -0.000100f, +0.000052f, +0.000027f, +0.000058f, - +0.000029f, +0.000005f, +0.000049f, +0.000043f, +0.000018f, +0.000029f, -0.000025f, -0.000088f, +0.000008f, -0.000041f, - +0.000057f, -0.000024f, -0.000051f, +0.000019f, +0.000034f, -0.000013f, -0.000026f, +0.000033f, +0.000025f, +0.000016f, - +0.000041f, +0.000018f, -0.000028f, -0.000019f, +0.000042f, +0.000011f - }, - { - -0.002735f, +0.008645f, +0.000164f, -0.000153f, -0.000226f, -0.000459f, -0.002835f, +0.000043f, +0.000120f, +0.000802f, - +0.000350f, -0.000243f, +0.000330f, +0.001681f, -0.000194f, -0.000511f, +0.000592f, +0.000357f, -0.000098f, +0.000804f, - -0.000341f, -0.000157f, -0.000241f, -0.000113f, -0.000194f, +0.000853f, -0.000156f, +0.000233f, +0.000237f, -0.000286f, - -0.000263f, -0.000228f, -0.000276f, -0.000080f, +0.000546f, +0.000193f, -0.000422f, -0.000069f, +0.000449f, -0.000269f, - -0.000389f, -0.000312f, -0.000016f, -0.000320f, -0.000162f, -0.000148f, -0.000114f, -0.000349f, +0.000123f, +0.000210f, - +0.000341f, +0.000152f, -0.000164f, +0.000228f, -0.000103f, -0.000061f, +0.000008f, -0.000155f, -0.000116f, +0.000240f, - +0.000049f, -0.000077f, +0.000001f, +0.000112f, -0.000150f, -0.000128f, -0.000066f, +0.000016f, +0.000132f, -0.000010f, - -0.000159f, +0.000032f, +0.000145f, +0.000039f, -0.000003f, +0.000010f, -0.000042f, +0.000122f, +0.000012f, +0.000058f, - -0.000116f, -0.000021f, +0.000039f, +0.000094f, +0.000020f, -0.000123f, -0.000067f, +0.000012f, -0.000038f, +0.000001f, - +0.000020f, +0.000004f, +0.000057f, -0.000004f, +0.000033f, +0.000015f - }, - { - +0.000379f, +0.000584f, +0.001049f, +0.000121f, -0.000118f, -0.000125f, -0.000238f, +0.000496f, -0.000766f, -0.000582f, - +0.000116f, +0.000023f, +0.001436f, -0.003926f, +0.002176f, -0.003458f, +0.000891f, +0.000633f, -0.000018f, -0.000760f, - +0.000106f, -0.000012f, +0.000292f, +0.000963f, -0.000415f, +0.001043f, -0.000281f, +0.000040f, +0.001111f, -0.000413f, - +0.000167f, +0.000034f, +0.000057f, +0.000242f, -0.000429f, +0.000260f, +0.000115f, -0.000125f, +0.000299f, +0.000009f, - +0.000173f, +0.000111f, +0.000094f, +0.000271f, +0.000049f, -0.000210f, +0.000185f, -0.000169f, +0.000054f, -0.000167f, - +0.000249f, -0.000083f, -0.000235f, -0.000229f, +0.000012f, -0.000063f, -0.000057f, +0.000074f, +0.000015f, +0.000016f, - +0.000214f, -0.000101f, -0.000137f, +0.000030f, +0.000071f, -0.000176f, +0.000081f, +0.000164f, -0.000072f, -0.000025f, - -0.000062f, +0.000000f, +0.000083f, -0.000044f, -0.000001f, +0.000055f, -0.000136f, +0.000089f, +0.000030f, +0.000056f, - +0.000060f, -0.000103f, -0.000045f, -0.000005f, -0.000074f, +0.000003f, +0.000035f, +0.000098f, -0.000059f, +0.000029f, - +0.000070f, +0.000002f, -0.000060f, +0.000034f, +0.000033f, -0.000074f - }, - { - -0.000086f, -0.002190f, +0.001986f, +0.000874f, +0.001411f, +0.003695f, -0.000407f, +0.000610f, -0.000257f, -0.000715f, - -0.000645f, -0.000495f, +0.000019f, -0.000100f, +0.006653f, +0.000461f, -0.000928f, +0.000823f, +0.000222f, -0.000380f, - -0.000210f, +0.000584f, +0.000189f, +0.000286f, -0.000465f, -0.000481f, +0.000022f, +0.002561f, +0.000503f, +0.000074f, - +0.000073f, +0.000142f, +0.000029f, -0.000022f, -0.000110f, +0.000039f, -0.000063f, +0.000093f, -0.000097f, +0.000418f, - +0.000445f, +0.000068f, -0.000177f, -0.000082f, +0.000315f, -0.000289f, -0.000145f, +0.000195f, +0.000124f, -0.000174f, - -0.000040f, +0.000058f, +0.000074f, -0.000128f, +0.000011f, -0.000254f, -0.000251f, +0.000029f, -0.000009f, +0.000157f, - -0.000024f, -0.000117f, +0.000041f, +0.000034f, +0.000023f, -0.000020f, +0.000056f, +0.000025f, -0.000092f, +0.000001f, - -0.000111f, -0.000027f, +0.000125f, +0.000120f, -0.000077f, -0.000102f, -0.000045f, +0.000069f, -0.000051f, -0.000032f, - +0.000043f, +0.000086f, -0.000013f, -0.000020f, +0.000037f, +0.000004f, -0.000019f, +0.000079f, -0.000090f, -0.000025f, - +0.000011f, -0.000031f, +0.000034f, +0.000043f, +0.000032f, -0.000011f - } - }, - { - { - -0.000246f, +0.011429f, -0.001860f, -0.000462f, -0.000113f, +0.000243f, -0.000324f, -0.000341f, +0.000277f, +0.000164f, - +0.000250f, -0.000368f, +0.000065f, -0.000116f, -0.003640f, -0.000755f, -0.000615f, +0.000129f, +0.001102f, -0.000257f, - -0.000061f, -0.000294f, +0.000278f, +0.000252f, -0.000714f, +0.000317f, +0.000535f, +0.000505f, +0.000600f, -0.000201f, - +0.000514f, -0.001001f, +0.001118f, -0.000112f, -0.000365f, -0.000583f, -0.000199f, +0.000902f, -0.000538f, +0.000113f, - -0.000239f, +0.000202f, -0.000031f, -0.000241f, -0.000047f, +0.000355f, -0.000031f, -0.000042f, -0.000086f, +0.000041f, - +0.000175f, +0.000214f, +0.000027f, -0.000050f, +0.000201f, +0.000095f, -0.000018f, -0.000022f, -0.000116f, -0.000058f, - -0.000135f, +0.000110f, +0.000184f, -0.000020f, -0.000030f, +0.000086f, +0.000114f, -0.000025f, -0.000053f, +0.000110f, - +0.000014f, -0.000029f, +0.000019f, -0.000068f, +0.000031f, +0.000020f, +0.000022f, -0.000055f, +0.000000f, +0.000032f, - -0.000020f, -0.000037f, -0.000019f, +0.000049f, +0.000075f, +0.000035f, -0.000040f, -0.000027f, +0.000014f, -0.000004f, - -0.000064f, +0.000041f, -0.000027f, +0.000039f, +0.000009f, -0.000028f - }, - { - -0.000097f, -0.026372f, +0.000968f, +0.000760f, -0.000786f, -0.000392f, +0.000697f, -0.000050f, -0.000931f, +0.000571f, - -0.000218f, -0.000220f, +0.000430f, +0.000089f, +0.002192f, +0.000841f, -0.000348f, +0.000233f, +0.001167f, -0.000396f, - +0.000020f, -0.000366f, -0.000446f, -0.000136f, -0.000373f, +0.000181f, -0.000213f, -0.000229f, -0.000223f, -0.000253f, - +0.000214f, -0.000204f, +0.000475f, +0.000093f, -0.000411f, +0.000173f, -0.000014f, +0.000202f, +0.000329f, -0.000113f, - -0.000535f, -0.000080f, -0.000041f, +0.000147f, -0.000075f, +0.000277f, -0.000450f, +0.000110f, -0.000286f, -0.000220f, - +0.000207f, -0.000249f, +0.000151f, +0.000065f, +0.000035f, +0.000053f, -0.000176f, +0.000181f, +0.000081f, +0.000005f, - +0.000059f, +0.000035f, +0.000068f, +0.000181f, -0.000005f, -0.000070f, -0.000080f, -0.000011f, +0.000038f, +0.000166f, - +0.000040f, -0.000002f, -0.000101f, +0.000028f, +0.000026f, -0.000159f, +0.000068f, +0.000024f, -0.000032f, -0.000079f, - +0.000019f, +0.000050f, -0.000049f, -0.000012f, +0.000065f, +0.000080f, -0.000155f, +0.000074f, -0.000020f, +0.000032f, - +0.000013f, -0.000027f, -0.000012f, +0.000034f, -0.000025f, +0.000015f - }, - { - -0.000862f, +0.018445f, +0.001382f, -0.000788f, +0.002292f, +0.000457f, +0.000120f, -0.000092f, +0.000106f, -0.000165f, - -0.000718f, +0.000133f, -0.000088f, +0.000283f, +0.000046f, +0.000074f, -0.000063f, -0.000563f, +0.001213f, +0.000537f, - +0.000638f, +0.000100f, +0.000432f, -0.000176f, -0.000548f, -0.000287f, +0.000298f, +0.000195f, +0.000080f, -0.000356f, - -0.000246f, -0.000314f, +0.000023f, +0.000479f, -0.000085f, -0.000094f, +0.000345f, -0.000315f, -0.000006f, -0.000110f, - -0.000118f, +0.000276f, -0.000049f, +0.000168f, +0.000353f, +0.000215f, -0.000242f, -0.000438f, -0.000021f, +0.000276f, - +0.000177f, -0.000177f, -0.000201f, +0.000081f, +0.000053f, -0.000197f, -0.000048f, +0.000204f, +0.000029f, -0.000027f, - -0.000178f, -0.000076f, +0.000246f, +0.000044f, -0.000060f, +0.000085f, -0.000037f, +0.000101f, -0.000066f, +0.000021f, - +0.000093f, +0.000015f, +0.000010f, -0.000009f, +0.000076f, -0.000039f, -0.000022f, +0.000011f, -0.000011f, -0.000038f, - -0.000052f, -0.000004f, +0.000015f, +0.000119f, -0.000035f, -0.000039f, +0.000040f, -0.000038f, -0.000004f, -0.000000f, - -0.000067f, +0.000009f, -0.000013f, +0.000048f, -0.000004f, -0.000006f - }, - { - +0.000635f, +0.002119f, -0.001450f, +0.000042f, +0.000276f, -0.000091f, -0.000124f, +0.000136f, +0.000157f, +0.000100f, - -0.000059f, -0.000117f, +0.000059f, -0.000476f, -0.006312f, -0.002384f, -0.001440f, -0.000439f, -0.002324f, -0.000538f, - +0.000410f, +0.000364f, +0.000577f, +0.000028f, +0.000224f, -0.001232f, -0.000460f, +0.000907f, +0.000311f, -0.000357f, - -0.000278f, -0.000369f, +0.000453f, -0.000118f, -0.000059f, -0.000724f, +0.000317f, -0.000011f, -0.000047f, +0.000160f, - +0.000044f, +0.000146f, +0.000096f, +0.000352f, -0.000400f, -0.000117f, +0.000324f, -0.000037f, -0.000039f, +0.000121f, - +0.000137f, -0.000239f, +0.000061f, -0.000080f, +0.000017f, +0.000197f, +0.000030f, +0.000018f, +0.000200f, -0.000005f, - -0.000131f, -0.000029f, +0.000073f, -0.000164f, -0.000092f, +0.000102f, +0.000016f, -0.000002f, -0.000010f, +0.000112f, - +0.000083f, -0.000133f, -0.000082f, -0.000017f, +0.000085f, -0.000105f, -0.000024f, +0.000037f, +0.000089f, +0.000023f, - -0.000036f, -0.000044f, +0.000049f, -0.000021f, +0.000051f, +0.000011f, -0.000084f, -0.000025f, +0.000032f, +0.000040f, - -0.000042f, -0.000053f, +0.000025f, +0.000037f, -0.000013f, +0.000021f - }, - { - -0.004432f, -0.047551f, +0.000831f, +0.001666f, -0.000346f, +0.000080f, -0.000353f, +0.000467f, +0.000186f, -0.000495f, - -0.000271f, +0.000800f, -0.000102f, -0.000952f, -0.000133f, -0.000422f, +0.000649f, -0.000331f, -0.000157f, +0.000028f, - -0.000204f, -0.000019f, +0.000354f, +0.000078f, -0.000979f, +0.000279f, +0.000251f, -0.001983f, +0.000349f, -0.000685f, - -0.000063f, -0.000173f, -0.000051f, +0.000097f, +0.000170f, +0.000374f, +0.000768f, -0.000632f, -0.000405f, +0.000271f, - +0.000093f, -0.000365f, -0.000127f, +0.000191f, -0.000212f, -0.000247f, +0.000119f, -0.000104f, -0.000107f, +0.000129f, - +0.000001f, -0.000028f, +0.000306f, -0.000008f, -0.000069f, -0.000055f, +0.000271f, -0.000068f, -0.000062f, -0.000191f, - +0.000179f, +0.000008f, +0.000064f, +0.000066f, -0.000011f, -0.000039f, +0.000052f, -0.000018f, -0.000041f, +0.000035f, - +0.000037f, +0.000062f, -0.000064f, -0.000129f, +0.000027f, +0.000025f, -0.000020f, +0.000131f, -0.000021f, +0.000019f, - +0.000042f, +0.000032f, -0.000019f, +0.000077f, -0.000068f, -0.000033f, +0.000025f, +0.000045f, +0.000026f, -0.000065f, - +0.000027f, +0.000009f, -0.000010f, -0.000001f, -0.000060f, -0.000002f - }, - { - -0.000503f, -0.000235f, +0.001978f, -0.000042f, +0.000035f, -0.000137f, -0.000126f, +0.000157f, -0.000033f, +0.000178f, - +0.000046f, -0.000131f, +0.000676f, -0.000174f, -0.000777f, +0.000218f, +0.002069f, -0.000984f, -0.000579f, +0.002381f, - -0.000193f, -0.000145f, -0.000900f, +0.000308f, +0.000623f, -0.001699f, +0.000629f, +0.000341f, -0.001111f, +0.000948f, - +0.000386f, +0.000203f, -0.000232f, +0.000029f, -0.000042f, +0.000066f, -0.000274f, +0.000319f, +0.000390f, -0.000207f, - -0.000227f, +0.000312f, +0.000048f, -0.000177f, +0.000127f, +0.000148f, +0.000219f, +0.000049f, -0.000006f, -0.000172f, - +0.000026f, +0.000027f, +0.000161f, -0.000122f, -0.000013f, +0.000198f, -0.000052f, +0.000014f, +0.000087f, -0.000002f, - +0.000070f, +0.000008f, +0.000127f, +0.000071f, -0.000051f, +0.000033f, +0.000012f, -0.000085f, -0.000009f, -0.000043f, - -0.000184f, +0.000029f, +0.000076f, +0.000007f, -0.000046f, +0.000016f, +0.000004f, +0.000055f, +0.000055f, +0.000031f, - -0.000079f, +0.000090f, -0.000013f, -0.000010f, -0.000069f, -0.000004f, +0.000019f, -0.000006f, -0.000012f, +0.000034f, - +0.000017f, -0.000061f, -0.000024f, +0.000043f, +0.000020f, +0.000018f - }, - { - +0.013512f, -0.014431f, -0.004021f, +0.000840f, -0.000167f, +0.000352f, +0.000414f, +0.000268f, +0.000367f, +0.000183f, - -0.000119f, +0.000093f, +0.000061f, +0.000306f, -0.000561f, +0.001177f, -0.000134f, +0.000366f, +0.000835f, -0.000468f, - -0.000160f, -0.000438f, -0.000454f, -0.000084f, +0.000228f, +0.000105f, -0.000290f, +0.001034f, +0.000426f, -0.000271f, - -0.000370f, +0.000336f, +0.000095f, -0.000529f, +0.000341f, -0.000047f, +0.000361f, +0.000533f, -0.000033f, +0.000038f, - -0.000037f, +0.000012f, -0.000035f, +0.000099f, +0.000039f, -0.000092f, +0.000196f, -0.000201f, +0.000057f, -0.000082f, - -0.000126f, +0.000148f, -0.000275f, +0.000013f, -0.000180f, -0.000078f, -0.000111f, +0.000054f, -0.000011f, +0.000055f, - +0.000100f, -0.000000f, -0.000010f, -0.000028f, -0.000037f, -0.000038f, +0.000053f, +0.000141f, -0.000099f, -0.000018f, - +0.000146f, -0.000086f, -0.000148f, +0.000121f, +0.000057f, -0.000027f, -0.000046f, +0.000054f, -0.000017f, -0.000046f, - +0.000099f, -0.000034f, -0.000045f, +0.000081f, +0.000004f, -0.000121f, +0.000021f, +0.000035f, +0.000035f, -0.000049f, - -0.000028f, +0.000059f, -0.000021f, +0.000020f, -0.000023f, +0.000001f - }, - { - -0.000575f, +0.000003f, +0.001802f, +0.000120f, +0.000282f, -0.000023f, -0.000009f, +0.000110f, -0.000238f, +0.000069f, - +0.000135f, -0.000226f, -0.000653f, -0.000679f, +0.001447f, -0.002377f, -0.000621f, -0.001277f, -0.000320f, +0.000023f, - -0.000497f, -0.001791f, +0.000338f, +0.000476f, -0.000476f, +0.001649f, +0.000129f, +0.000292f, -0.000283f, -0.000161f, - +0.000183f, -0.000336f, -0.000174f, +0.000206f, -0.000305f, +0.000181f, +0.000124f, +0.000080f, -0.000006f, +0.000158f, - -0.000251f, -0.000057f, +0.000084f, +0.000174f, -0.000203f, -0.000109f, -0.000049f, +0.000452f, -0.000362f, -0.000325f, - +0.000163f, +0.000001f, +0.000123f, -0.000127f, +0.000108f, +0.000010f, -0.000044f, +0.000165f, +0.000180f, -0.000134f, - +0.000033f, -0.000048f, +0.000181f, -0.000054f, +0.000094f, -0.000082f, -0.000125f, +0.000004f, +0.000113f, -0.000090f, - +0.000019f, +0.000042f, -0.000025f, -0.000026f, +0.000006f, +0.000053f, -0.000074f, +0.000050f, +0.000068f, +0.000002f, - +0.000083f, -0.000031f, -0.000049f, -0.000025f, -0.000056f, +0.000027f, -0.000010f, +0.000059f, -0.000020f, -0.000016f, - +0.000051f, -0.000025f, +0.000022f, -0.000006f, -0.000001f, +0.000008f - }, - { - -0.015056f, -0.032371f, -0.000311f, -0.001092f, +0.000999f, +0.000066f, +0.000915f, +0.000345f, -0.000919f, +0.000192f, - +0.001145f, -0.000093f, -0.000719f, -0.000799f, -0.000073f, -0.000088f, +0.001318f, -0.000046f, -0.000518f, +0.000635f, - +0.000134f, +0.000389f, -0.001076f, +0.000134f, +0.000248f, +0.000114f, +0.000246f, +0.000460f, +0.000134f, -0.000186f, - -0.000492f, +0.000296f, +0.000236f, +0.000281f, -0.000185f, -0.000081f, -0.000217f, -0.000543f, +0.000033f, -0.000077f, - -0.000337f, +0.000217f, +0.000493f, -0.000346f, -0.000009f, -0.000343f, -0.000189f, +0.000245f, -0.000048f, -0.000112f, - +0.000030f, +0.000339f, -0.000115f, -0.000140f, +0.000198f, +0.000001f, -0.000032f, -0.000078f, +0.000153f, +0.000051f, - -0.000131f, +0.000136f, -0.000020f, +0.000070f, +0.000030f, -0.000186f, -0.000094f, +0.000040f, -0.000013f, -0.000001f, - +0.000067f, -0.000114f, -0.000049f, +0.000009f, -0.000017f, +0.000109f, -0.000150f, +0.000016f, +0.000003f, +0.000050f, - -0.000052f, +0.000024f, -0.000013f, -0.000006f, -0.000008f, -0.000057f, -0.000064f, +0.000012f, +0.000044f, +0.000043f, - +0.000022f, -0.000024f, -0.000000f, -0.000046f, +0.000047f, -0.000005f - }, - { - -0.000289f, -0.004910f, +0.000109f, +0.000650f, -0.000614f, -0.000738f, +0.001617f, -0.000188f, -0.000783f, -0.000709f, - +0.000042f, +0.000645f, -0.000805f, -0.000581f, -0.000719f, +0.000615f, -0.001162f, -0.000676f, +0.000773f, +0.001554f, - -0.000096f, -0.000429f, -0.000768f, -0.000278f, +0.000246f, +0.000122f, -0.000066f, -0.000270f, +0.000069f, +0.000392f, - +0.000354f, -0.000597f, -0.000197f, +0.000132f, +0.000193f, -0.000500f, +0.000060f, +0.000112f, +0.000315f, -0.000033f, - +0.000059f, -0.000037f, +0.000208f, -0.000078f, -0.000283f, +0.000233f, +0.000068f, +0.000212f, -0.000260f, -0.000360f, - +0.000285f, +0.000155f, +0.000040f, +0.000177f, +0.000157f, -0.000384f, -0.000056f, -0.000115f, -0.000060f, +0.000104f, - +0.000096f, -0.000006f, +0.000063f, -0.000126f, -0.000001f, -0.000142f, -0.000109f, +0.000068f, +0.000053f, +0.000138f, - -0.000021f, +0.000024f, +0.000037f, -0.000103f, +0.000024f, +0.000079f, -0.000017f, -0.000034f, +0.000009f, -0.000042f, - -0.000064f, -0.000074f, -0.000012f, +0.000008f, -0.000001f, +0.000061f, +0.000012f, -0.000029f, -0.000005f, -0.000027f, - +0.000051f, -0.000035f, +0.000021f, -0.000005f, -0.000002f, +0.000038f - }, - { - -0.002240f, -0.003118f, +0.003226f, -0.000713f, -0.000255f, -0.002214f, +0.003559f, -0.000310f, -0.001048f, -0.000559f, - +0.000041f, -0.000340f, -0.000072f, -0.000029f, +0.000097f, +0.000485f, -0.000559f, +0.000206f, +0.000116f, +0.000094f, - +0.000233f, -0.000474f, +0.000252f, -0.000225f, +0.000218f, +0.000267f, +0.000054f, -0.000002f, -0.000510f, +0.000191f, - +0.000285f, +0.000416f, -0.000096f, -0.000035f, -0.000105f, +0.000222f, -0.000571f, +0.000038f, -0.000014f, -0.000579f, - +0.000346f, +0.000500f, -0.000138f, +0.000118f, -0.000027f, -0.000240f, -0.000068f, -0.000002f, +0.000274f, -0.000102f, - -0.000059f, -0.000133f, +0.000042f, +0.000130f, +0.000064f, +0.000022f, -0.000200f, -0.000222f, +0.000226f, +0.000002f, - -0.000097f, +0.000043f, +0.000026f, -0.000060f, -0.000061f, +0.000098f, -0.000056f, -0.000017f, -0.000044f, +0.000088f, - -0.000041f, +0.000007f, -0.000057f, +0.000009f, +0.000083f, -0.000024f, +0.000086f, +0.000022f, -0.000066f, +0.000029f, - -0.000049f, -0.000001f, +0.000055f, -0.000091f, +0.000038f, -0.000056f, +0.000079f, -0.000029f, +0.000051f, -0.000005f, - -0.000033f, +0.000034f, +0.000026f, -0.000028f, -0.000043f, +0.000037f - }, - { - +0.000044f, -0.002321f, +0.000066f, -0.000353f, +0.000098f, +0.000576f, -0.000163f, -0.000580f, +0.000050f, -0.000491f, - +0.000125f, +0.000222f, -0.001866f, -0.001184f, +0.001854f, +0.000604f, -0.000981f, -0.000049f, -0.000143f, +0.000774f, - -0.000017f, +0.000871f, +0.000237f, -0.000100f, +0.000677f, +0.000382f, -0.001024f, -0.000254f, -0.000019f, -0.000745f, - +0.001513f, -0.000543f, -0.000057f, +0.000127f, -0.000086f, +0.000056f, -0.000030f, -0.000372f, +0.000224f, +0.000018f, - -0.000005f, -0.000141f, -0.000164f, +0.000008f, -0.000003f, -0.000058f, -0.000113f, -0.000092f, +0.000042f, +0.000133f, - +0.000065f, +0.000066f, -0.000253f, -0.000159f, +0.000131f, +0.000070f, +0.000040f, -0.000049f, -0.000192f, -0.000060f, - -0.000161f, +0.000089f, +0.000030f, +0.000025f, -0.000235f, -0.000116f, +0.000175f, -0.000105f, +0.000087f, -0.000027f, - -0.000055f, +0.000076f, -0.000035f, +0.000039f, +0.000025f, -0.000057f, +0.000073f, +0.000055f, +0.000000f, +0.000032f, - -0.000052f, +0.000031f, +0.000028f, -0.000047f, -0.000002f, +0.000021f, -0.000017f, -0.000044f, -0.000017f, -0.000002f, - -0.000001f, -0.000017f, +0.000025f, +0.000034f, -0.000044f, -0.000001f - }, - { - +0.000856f, +0.016062f, -0.004267f, +0.001610f, -0.000476f, +0.000812f, +0.001615f, +0.000811f, +0.000297f, -0.000727f, - +0.000317f, +0.001000f, -0.000801f, +0.001111f, -0.000201f, +0.000073f, -0.000486f, +0.000067f, +0.000424f, -0.000511f, - +0.001294f, -0.000102f, +0.000282f, -0.000299f, -0.000409f, +0.000696f, +0.000438f, +0.000142f, +0.000151f, +0.000148f, - -0.000560f, +0.000130f, +0.000142f, +0.000156f, -0.000108f, -0.000024f, +0.000043f, -0.000247f, -0.000335f, +0.000436f, - +0.000391f, +0.000087f, -0.000179f, +0.000185f, -0.000385f, -0.000096f, -0.000330f, +0.000120f, -0.000351f, +0.000081f, - +0.000045f, +0.000026f, -0.000024f, -0.000059f, +0.000069f, +0.000155f, +0.000126f, +0.000086f, -0.000050f, -0.000233f, - +0.000082f, -0.000049f, -0.000007f, -0.000025f, -0.000006f, -0.000025f, -0.000057f, -0.000107f, -0.000121f, +0.000096f, - +0.000091f, -0.000109f, -0.000059f, +0.000081f, +0.000079f, +0.000049f, -0.000010f, -0.000047f, +0.000067f, -0.000007f, - +0.000144f, -0.000060f, -0.000070f, -0.000018f, +0.000035f, +0.000116f, -0.000001f, -0.000093f, -0.000018f, -0.000019f, - -0.000040f, -0.000031f, -0.000047f, +0.000062f, -0.000009f, +0.000035f - }, - { - -0.000248f, -0.000372f, -0.001133f, -0.000441f, +0.000024f, -0.000014f, +0.000179f, +0.000141f, -0.000177f, +0.000182f, - -0.000357f, +0.000042f, -0.001149f, -0.004113f, +0.015850f, -0.000588f, +0.001230f, +0.000988f, -0.000700f, -0.000192f, - +0.001001f, +0.000898f, -0.000878f, -0.000165f, +0.000023f, +0.000199f, +0.001379f, -0.000557f, +0.000762f, -0.000042f, - -0.000200f, -0.000205f, -0.000183f, -0.000492f, +0.000278f, +0.000048f, -0.000090f, -0.000145f, -0.000232f, +0.000201f, - -0.000432f, +0.000056f, +0.000119f, +0.000106f, +0.000155f, +0.000074f, -0.000277f, -0.000028f, +0.000032f, +0.000028f, - -0.000170f, +0.000209f, +0.000128f, -0.000094f, -0.000040f, -0.000008f, -0.000111f, -0.000039f, +0.000002f, -0.000091f, - -0.000097f, +0.000274f, +0.000009f, +0.000016f, +0.000056f, +0.000171f, -0.000145f, +0.000031f, +0.000092f, -0.000012f, - +0.000084f, +0.000034f, -0.000073f, +0.000036f, -0.000005f, +0.000058f, +0.000089f, -0.000152f, +0.000044f, -0.000075f, - -0.000031f, +0.000120f, -0.000017f, -0.000020f, +0.000029f, -0.000051f, -0.000061f, -0.000066f, +0.000080f, -0.000072f, - -0.000020f, +0.000075f, +0.000049f, -0.000045f, +0.000002f, +0.000050f - }, - { - +0.001541f, -0.000066f, -0.000753f, -0.001315f, -0.000521f, +0.001376f, -0.000056f, +0.000172f, +0.000410f, +0.000383f, - -0.001235f, +0.000709f, +0.000601f, -0.001925f, +0.003397f, +0.000027f, -0.000427f, -0.000326f, -0.000127f, +0.000658f, - -0.000093f, -0.000024f, -0.000171f, +0.000153f, +0.000296f, -0.000215f, -0.000684f, +0.000811f, -0.000367f, +0.000391f, - -0.000253f, +0.000067f, +0.000450f, -0.000266f, -0.000098f, +0.000111f, +0.000201f, -0.000402f, +0.000093f, +0.000024f, - +0.000152f, +0.000324f, +0.000108f, +0.000030f, +0.000107f, +0.000185f, -0.000392f, -0.000375f, +0.000072f, +0.000055f, - -0.000031f, -0.000057f, +0.000151f, +0.000128f, -0.000142f, -0.000025f, -0.000144f, -0.000089f, +0.000090f, +0.000010f, - -0.000003f, +0.000065f, -0.000026f, -0.000142f, +0.000032f, -0.000021f, -0.000034f, +0.000002f, -0.000021f, +0.000025f, - +0.000043f, +0.000028f, -0.000151f, -0.000012f, +0.000115f, +0.000080f, -0.000035f, -0.000021f, +0.000002f, +0.000043f, - -0.000025f, -0.000024f, +0.000044f, -0.000045f, -0.000019f, +0.000015f, +0.000013f, -0.000035f, +0.000136f, -0.000050f, - -0.000012f, +0.000008f, -0.000044f, +0.000014f, -0.000013f, +0.000011f - } - }, - { - { - -0.000138f, +0.003979f, +0.003569f, +0.000017f, +0.000154f, +0.000122f, -0.000199f, -0.000334f, -0.000006f, +0.000239f, - -0.000135f, -0.000683f, +0.000035f, +0.000782f, -0.004281f, -0.000233f, -0.001368f, +0.000176f, +0.000283f, +0.000614f, - +0.000183f, -0.001036f, -0.000070f, +0.000947f, -0.000720f, +0.000976f, +0.000619f, +0.000299f, +0.000448f, -0.000658f, - +0.000127f, -0.000443f, +0.000660f, +0.000139f, -0.001020f, -0.000269f, +0.000227f, +0.000725f, -0.000081f, +0.000025f, - -0.000195f, +0.000065f, +0.000082f, -0.000102f, -0.000161f, +0.000103f, +0.000269f, +0.000019f, -0.000128f, -0.000057f, - +0.000134f, +0.000185f, +0.000028f, -0.000054f, +0.000024f, +0.000166f, -0.000011f, +0.000145f, -0.000060f, -0.000169f, - -0.000065f, -0.000093f, +0.000138f, +0.000066f, -0.000039f, -0.000009f, +0.000055f, -0.000011f, -0.000118f, +0.000079f, - +0.000086f, +0.000000f, -0.000001f, -0.000078f, -0.000033f, +0.000059f, +0.000019f, -0.000073f, -0.000045f, +0.000020f, - -0.000019f, -0.000066f, -0.000080f, +0.000010f, +0.000060f, +0.000037f, -0.000023f, -0.000013f, -0.000003f, +0.000043f, - -0.000060f, +0.000034f, -0.000006f, +0.000014f, +0.000035f, -0.000005f - }, - { - -0.000459f, -0.031696f, +0.006406f, +0.002130f, -0.000801f, -0.000405f, +0.000921f, +0.000057f, -0.000037f, +0.000105f, - -0.000281f, -0.000399f, +0.000499f, +0.000565f, +0.001848f, +0.001488f, -0.000144f, +0.000138f, +0.001381f, -0.000156f, - +0.000177f, -0.000555f, -0.000233f, -0.000700f, +0.000106f, -0.000084f, -0.000073f, -0.000088f, -0.000253f, -0.000439f, - -0.000173f, +0.000293f, +0.000249f, +0.000296f, -0.000532f, +0.000252f, +0.000315f, +0.000231f, +0.000294f, -0.000120f, - -0.000428f, -0.000347f, +0.000145f, +0.000193f, -0.000157f, +0.000262f, -0.000266f, +0.000114f, +0.000021f, -0.000112f, - -0.000020f, -0.000282f, -0.000118f, +0.000021f, -0.000057f, +0.000222f, -0.000190f, +0.000075f, +0.000058f, +0.000014f, - -0.000072f, +0.000081f, +0.000068f, +0.000087f, +0.000016f, -0.000016f, -0.000060f, -0.000022f, -0.000073f, +0.000126f, - +0.000039f, +0.000063f, -0.000114f, -0.000046f, +0.000133f, -0.000145f, +0.000036f, +0.000067f, -0.000021f, -0.000085f, - -0.000025f, +0.000046f, -0.000036f, -0.000029f, +0.000015f, +0.000149f, -0.000119f, +0.000043f, -0.000011f, +0.000010f, - +0.000003f, -0.000010f, -0.000040f, +0.000037f, -0.000020f, +0.000021f - }, - { - +0.001388f, +0.031439f, -0.005806f, -0.002775f, +0.000525f, +0.000757f, -0.000376f, +0.000142f, -0.000060f, +0.000315f, - -0.000409f, +0.000005f, +0.000616f, -0.000460f, +0.000361f, +0.000302f, +0.000111f, +0.000126f, +0.000408f, +0.000128f, - +0.000990f, -0.000123f, +0.000208f, -0.000023f, -0.001053f, -0.000120f, +0.000121f, +0.000424f, +0.000251f, -0.000068f, - -0.000353f, -0.000130f, +0.000136f, +0.000285f, +0.000134f, -0.000090f, +0.000251f, +0.000039f, -0.000233f, +0.000001f, - -0.000056f, -0.000118f, +0.000103f, -0.000016f, +0.000153f, +0.000346f, -0.000219f, -0.000288f, -0.000256f, +0.000119f, - +0.000275f, +0.000015f, -0.000155f, +0.000035f, +0.000039f, -0.000165f, -0.000158f, +0.000064f, +0.000034f, -0.000003f, - -0.000151f, -0.000139f, +0.000106f, +0.000065f, -0.000146f, +0.000037f, -0.000019f, +0.000033f, -0.000015f, -0.000033f, - +0.000033f, -0.000003f, +0.000020f, +0.000003f, +0.000034f, -0.000031f, +0.000030f, -0.000001f, +0.000034f, -0.000010f, - -0.000026f, -0.000019f, -0.000036f, +0.000089f, +0.000045f, -0.000049f, +0.000058f, +0.000015f, -0.000045f, +0.000018f, - -0.000062f, -0.000007f, -0.000027f, +0.000034f, +0.000000f, -0.000010f - }, - { - -0.000470f, +0.001368f, +0.000466f, -0.000504f, +0.000271f, +0.000150f, -0.000188f, -0.000055f, +0.000207f, +0.000054f, - -0.000011f, +0.000114f, +0.000067f, -0.001117f, -0.007666f, +0.000519f, -0.001474f, -0.002651f, -0.000914f, +0.000310f, - +0.000277f, +0.000356f, +0.000823f, -0.000305f, +0.000241f, +0.000174f, -0.002040f, +0.000928f, +0.000151f, -0.000581f, - +0.000287f, -0.000218f, +0.000170f, -0.000025f, -0.000203f, -0.000759f, +0.000363f, +0.000074f, -0.000404f, +0.000262f, - -0.000096f, +0.000037f, +0.000318f, +0.000119f, +0.000070f, -0.000389f, +0.000007f, +0.000071f, -0.000161f, +0.000101f, - +0.000223f, -0.000161f, -0.000061f, +0.000012f, -0.000144f, +0.000178f, +0.000159f, -0.000061f, +0.000153f, +0.000149f, - -0.000002f, -0.000069f, +0.000087f, -0.000133f, -0.000128f, +0.000090f, +0.000030f, -0.000027f, -0.000059f, +0.000134f, - +0.000138f, -0.000058f, -0.000086f, -0.000006f, +0.000085f, -0.000049f, -0.000069f, -0.000015f, +0.000059f, +0.000046f, - -0.000000f, -0.000078f, +0.000046f, -0.000012f, +0.000029f, +0.000049f, -0.000069f, -0.000028f, -0.000023f, +0.000025f, - -0.000005f, -0.000072f, -0.000020f, +0.000032f, -0.000016f, -0.000014f - }, - { - -0.001590f, -0.049095f, -0.001060f, +0.000989f, +0.000699f, -0.000159f, +0.000284f, +0.000139f, +0.000294f, -0.000003f, - -0.000719f, +0.000294f, +0.000253f, -0.001735f, +0.000286f, -0.000495f, +0.000848f, -0.000508f, +0.000237f, -0.000040f, - -0.000021f, -0.000091f, -0.000005f, +0.000383f, -0.000681f, +0.000180f, +0.000282f, -0.001518f, -0.000543f, -0.000194f, - -0.000521f, -0.000215f, -0.000140f, +0.000263f, +0.000129f, +0.000564f, +0.000933f, -0.000255f, -0.000604f, +0.000478f, - +0.000125f, -0.000127f, -0.000281f, +0.000235f, -0.000059f, -0.000555f, +0.000086f, +0.000111f, -0.000201f, -0.000055f, - -0.000019f, -0.000199f, +0.000244f, +0.000133f, -0.000077f, -0.000087f, +0.000360f, +0.000075f, -0.000092f, -0.000149f, - +0.000106f, +0.000021f, +0.000037f, +0.000020f, +0.000080f, -0.000081f, +0.000062f, -0.000013f, -0.000008f, -0.000011f, - +0.000063f, +0.000088f, +0.000068f, -0.000105f, -0.000030f, +0.000074f, -0.000082f, +0.000096f, -0.000003f, -0.000022f, - +0.000013f, +0.000009f, -0.000024f, +0.000071f, -0.000008f, -0.000046f, +0.000021f, +0.000035f, +0.000050f, -0.000024f, - +0.000030f, +0.000010f, -0.000001f, +0.000019f, -0.000044f, -0.000017f - }, - { - -0.000237f, -0.000756f, +0.000848f, +0.000470f, -0.000019f, -0.000011f, -0.000180f, +0.000025f, -0.000064f, -0.000033f, - +0.000284f, +0.000160f, +0.000631f, -0.000029f, +0.001253f, -0.000239f, +0.000862f, +0.000089f, -0.000547f, +0.003201f, - -0.001123f, +0.000107f, -0.002200f, +0.002446f, +0.000130f, -0.001280f, -0.000177f, +0.000666f, -0.000207f, -0.000861f, - +0.000105f, +0.000689f, +0.000032f, -0.000135f, -0.000055f, -0.000042f, -0.000217f, +0.000210f, +0.000481f, +0.000258f, - -0.000694f, +0.000276f, +0.000087f, -0.000188f, +0.000092f, +0.000063f, +0.000263f, +0.000152f, +0.000015f, -0.000181f, - -0.000181f, +0.000155f, +0.000077f, -0.000012f, -0.000019f, +0.000050f, +0.000042f, -0.000037f, +0.000126f, +0.000004f, - +0.000097f, -0.000006f, +0.000076f, +0.000081f, -0.000026f, +0.000021f, +0.000033f, -0.000030f, +0.000056f, +0.000014f, - -0.000134f, -0.000080f, +0.000076f, +0.000045f, -0.000057f, -0.000066f, -0.000062f, +0.000011f, +0.000058f, +0.000053f, - -0.000077f, +0.000051f, +0.000034f, +0.000018f, -0.000062f, -0.000013f, +0.000020f, -0.000001f, -0.000016f, +0.000007f, - +0.000056f, -0.000033f, -0.000070f, +0.000035f, +0.000014f, +0.000022f - }, - { - -0.015500f, +0.016170f, +0.003602f, +0.001516f, -0.000572f, +0.000211f, -0.000043f, +0.000850f, -0.000143f, +0.000019f, - -0.000088f, +0.000521f, -0.000075f, +0.000296f, -0.000592f, +0.000770f, +0.000044f, +0.000117f, +0.000869f, +0.000059f, - -0.000066f, -0.000437f, -0.000207f, -0.000157f, +0.000294f, -0.000032f, -0.000172f, +0.000894f, +0.000460f, -0.000058f, - -0.000031f, -0.000132f, -0.000252f, -0.000210f, -0.000116f, +0.000166f, +0.000370f, +0.000300f, -0.000002f, -0.000056f, - -0.000026f, -0.000070f, +0.000465f, -0.000199f, +0.000282f, -0.000091f, +0.000211f, +0.000026f, -0.000032f, +0.000020f, - -0.000161f, +0.000073f, -0.000173f, -0.000049f, -0.000088f, -0.000167f, -0.000170f, -0.000079f, -0.000059f, +0.000005f, - +0.000070f, +0.000002f, +0.000002f, -0.000006f, -0.000056f, -0.000099f, -0.000090f, +0.000108f, +0.000003f, -0.000019f, - +0.000166f, -0.000040f, -0.000181f, +0.000046f, +0.000095f, -0.000002f, -0.000084f, +0.000035f, -0.000012f, -0.000041f, - +0.000096f, -0.000011f, -0.000074f, +0.000029f, +0.000058f, -0.000117f, -0.000042f, +0.000039f, +0.000059f, -0.000011f, - -0.000050f, +0.000061f, +0.000021f, +0.000029f, -0.000014f, -0.000019f - }, - { - -0.000237f, -0.001221f, +0.001210f, +0.000251f, +0.000173f, +0.000112f, -0.000088f, +0.000095f, -0.000251f, -0.000008f, - +0.000405f, +0.000239f, -0.000239f, -0.001956f, +0.001205f, -0.001442f, +0.000273f, +0.000362f, -0.000194f, +0.000758f, - -0.000724f, -0.000523f, +0.001458f, -0.000656f, -0.000222f, +0.000832f, +0.000262f, -0.000556f, +0.000449f, +0.000145f, - +0.000347f, -0.000221f, -0.000329f, +0.000000f, +0.000090f, -0.000424f, +0.000167f, +0.000056f, +0.000089f, -0.000014f, - -0.000068f, +0.000031f, +0.000106f, +0.000125f, -0.000061f, -0.000133f, -0.000133f, +0.000363f, -0.000097f, -0.000362f, - +0.000009f, -0.000026f, -0.000020f, -0.000084f, -0.000095f, +0.000077f, -0.000183f, +0.000177f, +0.000261f, -0.000171f, - +0.000007f, -0.000072f, +0.000098f, -0.000050f, +0.000095f, +0.000077f, -0.000147f, -0.000020f, +0.000060f, +0.000027f, - -0.000008f, +0.000021f, +0.000024f, -0.000041f, -0.000026f, +0.000033f, -0.000064f, -0.000024f, +0.000051f, -0.000060f, - +0.000099f, +0.000046f, +0.000007f, -0.000035f, -0.000071f, +0.000024f, -0.000037f, +0.000032f, +0.000005f, -0.000051f, - +0.000048f, -0.000015f, -0.000017f, +0.000014f, -0.000005f, +0.000013f - }, - { - +0.009811f, -0.063110f, -0.001394f, -0.000145f, -0.000386f, -0.000050f, +0.000446f, +0.000767f, -0.000752f, -0.000385f, - +0.001174f, +0.000350f, +0.000290f, -0.000319f, +0.000292f, -0.000719f, -0.000072f, +0.000672f, +0.000042f, +0.000125f, - -0.000381f, +0.000460f, -0.000972f, +0.000142f, +0.000230f, +0.000146f, +0.000103f, +0.000624f, -0.000220f, +0.000058f, - -0.000458f, +0.000402f, +0.000210f, +0.000171f, -0.000024f, -0.000145f, -0.000063f, -0.000413f, -0.000160f, +0.000384f, - -0.000159f, -0.000031f, +0.000284f, -0.000188f, -0.000108f, -0.000363f, -0.000337f, +0.000316f, +0.000001f, +0.000078f, - -0.000171f, +0.000094f, +0.000105f, -0.000052f, +0.000118f, +0.000176f, -0.000079f, -0.000027f, +0.000155f, +0.000112f, - +0.000015f, +0.000035f, +0.000043f, +0.000074f, +0.000169f, -0.000117f, -0.000214f, +0.000008f, -0.000022f, -0.000040f, - +0.000062f, -0.000009f, -0.000078f, +0.000004f, -0.000030f, +0.000103f, -0.000125f, -0.000012f, +0.000006f, +0.000018f, - -0.000026f, +0.000043f, +0.000014f, +0.000005f, +0.000038f, -0.000020f, -0.000070f, -0.000015f, -0.000003f, +0.000016f, - +0.000057f, -0.000025f, +0.000016f, -0.000059f, +0.000030f, +0.000012f - }, - { - +0.000546f, -0.004086f, -0.002094f, +0.000455f, -0.000246f, -0.001248f, +0.000793f, +0.000527f, -0.000782f, -0.000552f, - -0.000079f, +0.000842f, -0.000473f, -0.000376f, -0.001235f, +0.000097f, -0.000057f, -0.001022f, -0.001177f, +0.001933f, - +0.000280f, +0.000004f, -0.000366f, -0.000645f, +0.000115f, -0.000034f, -0.000625f, -0.000116f, +0.000358f, +0.000377f, - +0.001010f, -0.000379f, -0.000456f, -0.000093f, -0.000058f, -0.000385f, -0.000293f, -0.000053f, +0.000182f, -0.000034f, - -0.000128f, -0.000141f, +0.000197f, +0.000153f, -0.000427f, +0.000244f, +0.000042f, +0.000232f, -0.000114f, -0.000282f, - +0.000044f, +0.000097f, -0.000080f, +0.000209f, +0.000307f, -0.000273f, -0.000137f, -0.000050f, -0.000092f, +0.000039f, - +0.000117f, +0.000041f, +0.000129f, -0.000064f, -0.000003f, -0.000037f, -0.000102f, -0.000053f, -0.000117f, +0.000139f, - +0.000035f, +0.000012f, +0.000110f, -0.000081f, +0.000026f, +0.000056f, +0.000009f, +0.000001f, +0.000025f, +0.000034f, - -0.000017f, -0.000060f, -0.000032f, -0.000031f, -0.000038f, +0.000030f, +0.000043f, -0.000025f, +0.000007f, -0.000034f, - +0.000044f, -0.000024f, +0.000005f, -0.000009f, -0.000026f, +0.000019f - }, - { - +0.001259f, -0.005155f, +0.001517f, +0.000877f, -0.000721f, -0.000937f, +0.001154f, +0.001009f, -0.001221f, -0.000391f, - +0.000301f, -0.000200f, -0.000094f, -0.000456f, +0.000213f, +0.000604f, -0.000775f, +0.000069f, +0.000209f, -0.000030f, - -0.000116f, -0.000452f, +0.000131f, -0.000121f, +0.000047f, +0.000094f, +0.000073f, +0.000044f, -0.000308f, -0.000123f, - +0.000257f, +0.000353f, +0.000181f, -0.000249f, -0.000229f, +0.000495f, -0.000437f, -0.000107f, +0.000025f, -0.000428f, - -0.000098f, +0.000391f, +0.000110f, +0.000234f, +0.000033f, -0.000190f, -0.000011f, -0.000032f, +0.000230f, -0.000139f, - +0.000002f, -0.000100f, -0.000050f, +0.000212f, +0.000101f, +0.000060f, -0.000075f, -0.000244f, +0.000109f, +0.000079f, - -0.000006f, -0.000033f, +0.000050f, +0.000017f, -0.000109f, +0.000048f, -0.000003f, +0.000011f, -0.000059f, +0.000058f, - +0.000004f, -0.000012f, -0.000082f, -0.000071f, +0.000020f, -0.000041f, +0.000051f, +0.000065f, -0.000053f, +0.000035f, - -0.000044f, -0.000039f, +0.000097f, -0.000115f, +0.000021f, -0.000074f, +0.000014f, -0.000000f, +0.000030f, +0.000015f, - -0.000046f, +0.000021f, +0.000043f, +0.000001f, -0.000061f, +0.000010f - }, - { - +0.000150f, -0.000962f, -0.001154f, -0.000164f, -0.000204f, +0.000504f, +0.000009f, -0.000356f, -0.000264f, -0.000322f, - -0.000095f, +0.000580f, -0.001466f, -0.000507f, +0.001911f, -0.000359f, -0.000386f, -0.000542f, -0.000185f, +0.000122f, - +0.000824f, +0.000001f, -0.000221f, -0.000739f, +0.000261f, +0.001415f, -0.000559f, -0.001115f, +0.000479f, -0.000798f, - +0.001080f, -0.000122f, +0.000279f, +0.000278f, -0.000087f, +0.000145f, -0.000311f, -0.000517f, +0.000222f, -0.000118f, - -0.000097f, +0.000069f, -0.000269f, -0.000189f, +0.000044f, -0.000210f, -0.000002f, -0.000098f, -0.000012f, -0.000047f, - -0.000067f, +0.000196f, -0.000245f, -0.000130f, +0.000081f, +0.000086f, +0.000082f, +0.000106f, -0.000041f, +0.000005f, - -0.000162f, +0.000046f, +0.000073f, +0.000055f, -0.000104f, -0.000204f, +0.000190f, -0.000037f, +0.000060f, -0.000000f, - -0.000084f, +0.000043f, -0.000060f, -0.000029f, -0.000036f, -0.000062f, +0.000006f, +0.000092f, +0.000022f, +0.000034f, - -0.000030f, +0.000027f, +0.000039f, -0.000001f, -0.000013f, +0.000039f, +0.000013f, -0.000031f, -0.000019f, -0.000012f, - -0.000015f, -0.000019f, +0.000013f, +0.000026f, -0.000036f, -0.000020f - }, - { - +0.003341f, +0.015511f, -0.004034f, -0.000255f, -0.000163f, -0.000113f, +0.001797f, +0.000671f, +0.000855f, -0.000935f, - -0.000119f, +0.000755f, +0.000630f, +0.000086f, -0.000497f, +0.000354f, -0.000401f, -0.000047f, +0.000382f, -0.000910f, - +0.000940f, -0.000016f, +0.000190f, -0.000055f, +0.000121f, -0.000322f, +0.000068f, +0.000259f, -0.000385f, +0.000311f, - -0.000216f, +0.000044f, -0.000016f, +0.000290f, -0.000226f, -0.000127f, +0.000155f, -0.000153f, -0.000470f, +0.000207f, - +0.000461f, +0.000386f, -0.000075f, +0.000434f, -0.000093f, +0.000221f, -0.000189f, +0.000252f, -0.000228f, -0.000026f, - -0.000050f, -0.000074f, +0.000082f, -0.000187f, -0.000049f, +0.000074f, -0.000012f, +0.000165f, +0.000062f, -0.000220f, - -0.000006f, -0.000001f, +0.000019f, -0.000110f, +0.000019f, +0.000092f, +0.000010f, -0.000092f, -0.000134f, -0.000018f, - +0.000128f, -0.000042f, -0.000123f, -0.000007f, +0.000048f, +0.000050f, +0.000053f, -0.000091f, +0.000005f, -0.000052f, - +0.000131f, +0.000004f, -0.000051f, -0.000072f, -0.000018f, +0.000105f, +0.000077f, -0.000031f, +0.000029f, -0.000002f, - -0.000044f, -0.000016f, -0.000084f, +0.000012f, -0.000024f, -0.000006f - }, - { - +0.000500f, -0.000042f, -0.001936f, -0.000000f, -0.000195f, +0.000065f, +0.000227f, -0.000169f, -0.000054f, +0.000250f, - -0.000062f, -0.000101f, -0.000668f, +0.001722f, +0.004842f, +0.003177f, -0.000534f, +0.000105f, -0.000281f, +0.000086f, - +0.000657f, +0.000490f, -0.000721f, -0.000786f, -0.000172f, +0.000323f, +0.001130f, -0.000779f, +0.000029f, +0.000717f, - -0.000146f, -0.000053f, -0.000431f, -0.000213f, +0.000675f, -0.000250f, +0.000098f, +0.000027f, -0.000333f, +0.000254f, - -0.000344f, -0.000050f, -0.000001f, -0.000030f, -0.000010f, +0.000197f, -0.000226f, -0.000065f, -0.000015f, +0.000164f, - -0.000295f, +0.000127f, +0.000190f, +0.000029f, -0.000044f, -0.000040f, -0.000061f, -0.000030f, +0.000000f, -0.000028f, - -0.000192f, +0.000117f, +0.000053f, +0.000028f, -0.000034f, +0.000185f, -0.000081f, -0.000077f, +0.000070f, -0.000013f, - +0.000081f, +0.000049f, -0.000089f, +0.000061f, +0.000010f, -0.000017f, +0.000108f, -0.000120f, -0.000003f, -0.000039f, - -0.000086f, +0.000117f, +0.000036f, -0.000024f, +0.000068f, -0.000012f, -0.000024f, -0.000091f, +0.000077f, -0.000031f, - -0.000067f, +0.000022f, +0.000055f, -0.000032f, -0.000037f, +0.000070f - }, - { - -0.002221f, +0.004153f, +0.000923f, -0.001737f, -0.000647f, -0.001713f, +0.000854f, +0.000061f, +0.000353f, +0.000604f, - -0.000387f, -0.000356f, +0.000205f, +0.001703f, -0.001006f, -0.000380f, -0.000233f, -0.000875f, -0.000602f, +0.000644f, - +0.000102f, -0.000203f, -0.000122f, -0.000197f, +0.000316f, +0.000236f, -0.000612f, +0.000085f, -0.000156f, +0.000132f, - +0.000175f, -0.000253f, +0.000336f, +0.000062f, +0.000106f, +0.000051f, -0.000010f, -0.000170f, +0.000174f, -0.000182f, - +0.000017f, +0.000347f, +0.000255f, +0.000081f, -0.000166f, +0.000404f, -0.000095f, -0.000358f, -0.000175f, -0.000102f, - +0.000010f, +0.000000f, +0.000048f, +0.000091f, -0.000118f, +0.000027f, +0.000004f, -0.000107f, +0.000077f, -0.000031f, - +0.000027f, +0.000145f, -0.000022f, -0.000128f, -0.000062f, +0.000080f, -0.000018f, +0.000021f, +0.000033f, +0.000002f, - +0.000064f, +0.000072f, -0.000157f, -0.000138f, +0.000073f, +0.000097f, +0.000031f, -0.000027f, +0.000004f, +0.000038f, - +0.000019f, -0.000074f, +0.000020f, -0.000013f, -0.000031f, -0.000005f, -0.000003f, -0.000074f, +0.000094f, +0.000005f, - -0.000036f, +0.000021f, -0.000026f, -0.000028f, -0.000023f, +0.000014f - } - }, - { - { - +0.000374f, -0.001624f, -0.001899f, -0.000299f, +0.000192f, -0.000139f, -0.000115f, +0.000144f, -0.000449f, +0.000358f, - -0.000462f, +0.000084f, -0.000427f, -0.001190f, -0.003393f, +0.001378f, +0.001410f, +0.001054f, -0.001551f, -0.001027f, - +0.002150f, +0.000489f, -0.000090f, +0.000560f, -0.000769f, +0.000737f, +0.000040f, -0.000595f, +0.000192f, +0.000047f, - -0.000268f, +0.000264f, -0.000637f, -0.000090f, -0.000762f, +0.000053f, +0.000149f, +0.000226f, +0.000205f, +0.000284f, - +0.000067f, -0.000272f, -0.000028f, +0.000180f, +0.000184f, -0.000231f, -0.000091f, +0.000024f, -0.000003f, +0.000067f, - +0.000033f, -0.000161f, -0.000168f, +0.000137f, -0.000199f, -0.000137f, +0.000051f, -0.000059f, +0.000132f, +0.000017f, - +0.000085f, -0.000005f, -0.000088f, +0.000054f, +0.000065f, -0.000016f, -0.000105f, +0.000040f, +0.000068f, -0.000093f, - -0.000022f, +0.000086f, -0.000027f, +0.000057f, -0.000050f, +0.000055f, +0.000001f, +0.000080f, -0.000017f, -0.000079f, - -0.000016f, +0.000054f, +0.000003f, -0.000019f, -0.000089f, -0.000051f, +0.000051f, +0.000041f, -0.000036f, -0.000002f, - +0.000081f, -0.000034f, +0.000021f, -0.000033f, -0.000017f, +0.000030f - }, - { - +0.000543f, -0.038094f, +0.002469f, +0.001602f, +0.000214f, +0.000305f, -0.000302f, -0.000298f, +0.000959f, +0.000051f, - -0.000355f, +0.000167f, -0.000218f, +0.000172f, +0.000547f, +0.000402f, +0.000603f, -0.000675f, -0.000531f, +0.000091f, - +0.000287f, -0.000441f, +0.000300f, -0.000038f, +0.000464f, -0.000299f, -0.000465f, -0.000072f, +0.000156f, -0.000312f, - -0.000214f, +0.000199f, -0.000729f, -0.000120f, +0.000319f, +0.000365f, +0.000067f, -0.000132f, -0.000009f, +0.000087f, - +0.000271f, -0.000210f, -0.000070f, +0.000066f, +0.000059f, -0.000277f, +0.000152f, -0.000286f, +0.000467f, +0.000304f, - -0.000036f, +0.000160f, -0.000286f, -0.000152f, -0.000090f, +0.000129f, +0.000071f, -0.000172f, +0.000108f, +0.000039f, - +0.000047f, -0.000068f, +0.000015f, -0.000092f, -0.000129f, +0.000042f, +0.000059f, +0.000080f, -0.000054f, -0.000106f, - -0.000006f, -0.000045f, +0.000019f, -0.000032f, -0.000048f, +0.000126f, -0.000065f, -0.000014f, +0.000026f, +0.000075f, - +0.000011f, -0.000065f, +0.000055f, +0.000014f, -0.000067f, -0.000063f, +0.000136f, -0.000052f, +0.000018f, -0.000038f, - -0.000012f, +0.000034f, +0.000004f, -0.000039f, +0.000025f, -0.000014f - }, - { - -0.001366f, +0.030537f, +0.002268f, +0.001216f, -0.001661f, -0.000078f, -0.000226f, -0.000341f, -0.000028f, -0.000046f, - -0.000200f, -0.000062f, -0.000172f, +0.000193f, +0.000987f, -0.000190f, +0.000317f, -0.000622f, -0.001363f, -0.000785f, - -0.000622f, -0.000096f, +0.000087f, +0.000214f, -0.000146f, +0.000179f, -0.000020f, -0.000053f, -0.000081f, -0.000044f, - +0.000185f, +0.000351f, +0.000052f, -0.000488f, +0.000123f, -0.000056f, -0.000173f, +0.000199f, -0.000355f, -0.000314f, - +0.000428f, -0.000357f, +0.000135f, +0.000015f, -0.000328f, -0.000267f, +0.000392f, +0.000385f, +0.000043f, -0.000447f, - -0.000262f, +0.000197f, +0.000087f, -0.000000f, +0.000024f, +0.000052f, +0.000057f, -0.000137f, -0.000051f, +0.000050f, - +0.000179f, +0.000035f, -0.000086f, -0.000042f, -0.000028f, -0.000012f, +0.000007f, -0.000041f, +0.000108f, +0.000000f, - -0.000057f, +0.000006f, +0.000029f, +0.000012f, -0.000034f, +0.000010f, -0.000008f, -0.000027f, -0.000024f, +0.000061f, - +0.000041f, -0.000008f, +0.000016f, -0.000096f, +0.000008f, +0.000019f, -0.000024f, +0.000056f, -0.000000f, -0.000010f, - +0.000052f, -0.000015f, +0.000015f, -0.000038f, -0.000005f, +0.000010f - }, - { - +0.000329f, -0.000817f, -0.000940f, +0.000103f, -0.000399f, +0.000083f, +0.000003f, -0.000040f, -0.000046f, -0.000171f, - -0.000150f, -0.000338f, +0.000357f, -0.000096f, -0.008409f, +0.001803f, +0.001916f, -0.000504f, +0.000244f, +0.001108f, - +0.000467f, -0.000037f, -0.001198f, -0.001991f, +0.000653f, +0.000164f, -0.001025f, +0.000961f, -0.000112f, -0.000665f, - +0.000486f, -0.000375f, -0.000019f, -0.000168f, +0.000155f, +0.000343f, -0.000602f, +0.000209f, +0.000079f, -0.000254f, - +0.000222f, +0.000041f, +0.000006f, -0.000035f, +0.000350f, +0.000094f, -0.000222f, +0.000126f, +0.000089f, -0.000116f, - -0.000187f, +0.000150f, -0.000123f, -0.000022f, +0.000057f, -0.000045f, +0.000016f, +0.000158f, -0.000075f, +0.000071f, - +0.000095f, +0.000049f, +0.000008f, +0.000104f, -0.000020f, -0.000070f, -0.000069f, +0.000010f, -0.000055f, -0.000102f, - -0.000078f, +0.000115f, +0.000054f, +0.000059f, -0.000060f, +0.000099f, +0.000058f, -0.000012f, -0.000070f, +0.000004f, - -0.000001f, +0.000015f, -0.000050f, +0.000007f, -0.000053f, +0.000017f, +0.000060f, +0.000048f, -0.000028f, -0.000046f, - +0.000022f, +0.000031f, -0.000019f, -0.000039f, +0.000019f, -0.000016f - }, - { - +0.007164f, -0.042359f, -0.003342f, +0.000267f, -0.000574f, -0.000112f, +0.000282f, +0.000048f, -0.000201f, +0.000448f, - +0.000991f, -0.000815f, +0.000041f, -0.001025f, -0.000067f, -0.000128f, -0.000054f, -0.001263f, +0.000180f, -0.000287f, - +0.000252f, -0.000420f, -0.000436f, -0.000854f, +0.000624f, -0.000042f, -0.000237f, -0.001383f, -0.000150f, -0.000333f, - -0.000236f, -0.000199f, +0.000163f, +0.000057f, -0.000208f, -0.000141f, -0.000207f, +0.000726f, -0.000210f, -0.000279f, - +0.000289f, +0.000128f, -0.000011f, -0.000248f, +0.000137f, +0.000053f, -0.000104f, +0.000251f, -0.000021f, -0.000057f, - +0.000381f, -0.000095f, -0.000258f, +0.000205f, +0.000015f, +0.000108f, -0.000090f, -0.000040f, +0.000002f, +0.000094f, - +0.000010f, -0.000015f, +0.000102f, -0.000100f, -0.000029f, +0.000013f, -0.000103f, -0.000046f, +0.000092f, -0.000028f, - -0.000083f, -0.000087f, +0.000069f, +0.000155f, +0.000021f, +0.000003f, +0.000047f, -0.000130f, +0.000012f, +0.000020f, - -0.000009f, -0.000038f, +0.000015f, -0.000100f, +0.000029f, +0.000027f, -0.000005f, -0.000003f, -0.000019f, +0.000042f, - -0.000023f, +0.000009f, +0.000011f, +0.000001f, +0.000044f, +0.000021f - }, - { - +0.000490f, +0.001495f, -0.002089f, +0.000280f, +0.000022f, +0.000112f, +0.000107f, -0.000039f, +0.000002f, -0.000208f, - -0.000084f, +0.000027f, -0.000457f, -0.000283f, +0.004896f, -0.000442f, -0.002498f, +0.001745f, -0.001192f, +0.002736f, - -0.000097f, +0.000141f, -0.001656f, +0.001238f, -0.000428f, +0.000537f, -0.000177f, +0.000004f, +0.000916f, -0.000886f, - -0.000417f, +0.000539f, +0.000634f, +0.000246f, -0.000196f, +0.000176f, +0.000231f, -0.000223f, +0.000191f, +0.000283f, - +0.000177f, -0.000233f, +0.000075f, +0.000155f, +0.000004f, -0.000046f, -0.000136f, +0.000103f, -0.000008f, +0.000027f, - +0.000038f, +0.000084f, -0.000201f, +0.000112f, +0.000152f, -0.000105f, -0.000025f, +0.000018f, -0.000002f, -0.000102f, - +0.000084f, +0.000052f, -0.000073f, -0.000032f, +0.000084f, -0.000067f, -0.000011f, -0.000005f, +0.000021f, +0.000065f, - +0.000183f, -0.000063f, -0.000078f, +0.000035f, +0.000060f, +0.000008f, +0.000026f, -0.000080f, -0.000065f, -0.000036f, - +0.000056f, -0.000086f, -0.000033f, +0.000026f, +0.000060f, -0.000014f, +0.000004f, +0.000023f, +0.000004f, -0.000049f, - -0.000027f, +0.000061f, +0.000047f, -0.000033f, -0.000020f, -0.000016f - }, - { - +0.012153f, +0.046620f, -0.001559f, +0.000726f, +0.000409f, -0.000272f, -0.000214f, -0.000254f, -0.001225f, +0.000144f, - +0.000182f, +0.000182f, -0.000102f, +0.000027f, -0.000187f, +0.000165f, +0.000127f, -0.000250f, -0.000700f, +0.000501f, - +0.000427f, +0.000396f, -0.000075f, -0.000035f, +0.000379f, -0.000165f, -0.000121f, -0.000011f, +0.000529f, +0.000168f, - +0.000441f, +0.000044f, -0.000439f, +0.000382f, -0.000274f, -0.000317f, -0.000238f, +0.000107f, +0.000299f, -0.000112f, - +0.000043f, -0.000232f, +0.000085f, -0.000134f, +0.000070f, -0.000072f, -0.000147f, +0.000279f, +0.000212f, -0.000262f, - -0.000032f, -0.000280f, +0.000093f, -0.000129f, +0.000059f, -0.000009f, -0.000170f, -0.000013f, +0.000027f, -0.000076f, - -0.000087f, -0.000017f, +0.000007f, +0.000005f, +0.000073f, +0.000080f, -0.000072f, -0.000147f, +0.000084f, +0.000064f, - -0.000095f, +0.000060f, +0.000130f, -0.000097f, -0.000076f, +0.000041f, +0.000030f, -0.000070f, +0.000005f, +0.000045f, - -0.000099f, +0.000052f, +0.000006f, -0.000088f, -0.000021f, +0.000125f, -0.000023f, -0.000051f, -0.000013f, +0.000044f, - +0.000036f, -0.000058f, +0.000023f, -0.000002f, +0.000013f, -0.000002f - }, - { - +0.000565f, +0.001444f, -0.001832f, +0.000104f, -0.000305f, +0.000078f, +0.000035f, -0.000002f, +0.000038f, -0.000323f, - -0.000080f, +0.000086f, +0.000424f, -0.002098f, -0.001292f, +0.000150f, +0.001752f, +0.001530f, -0.000112f, +0.000799f, - +0.000417f, +0.001553f, +0.000240f, -0.001749f, -0.000627f, -0.001117f, +0.000544f, -0.000293f, +0.000439f, +0.000418f, - -0.000058f, -0.000288f, +0.000273f, -0.000239f, +0.000020f, -0.000100f, -0.000116f, -0.000351f, +0.000065f, -0.000348f, - +0.000028f, +0.000309f, -0.000121f, -0.000143f, +0.000230f, +0.000014f, +0.000126f, -0.000534f, +0.000204f, +0.000349f, - -0.000234f, -0.000083f, +0.000031f, +0.000173f, -0.000349f, +0.000007f, -0.000063f, -0.000122f, +0.000028f, +0.000222f, - +0.000043f, +0.000094f, -0.000131f, -0.000081f, -0.000050f, +0.000108f, +0.000085f, -0.000031f, -0.000047f, +0.000086f, - +0.000000f, -0.000003f, +0.000077f, +0.000090f, -0.000061f, -0.000033f, +0.000056f, -0.000054f, -0.000059f, -0.000063f, - -0.000099f, +0.000037f, +0.000025f, +0.000014f, +0.000055f, -0.000004f, +0.000020f, -0.000062f, +0.000036f, +0.000021f, - -0.000054f, +0.000018f, -0.000010f, +0.000001f, +0.000003f, +0.000001f - }, - { - -0.001980f, -0.081125f, +0.000884f, +0.001555f, +0.000271f, -0.000267f, -0.000433f, -0.000319f, +0.000870f, -0.000034f, - -0.001010f, +0.000077f, +0.000267f, +0.001619f, -0.000184f, +0.001006f, -0.000813f, -0.000230f, +0.000327f, +0.000135f, - -0.000329f, -0.000355f, -0.000644f, +0.000085f, -0.000254f, +0.000375f, -0.000274f, +0.000130f, +0.000099f, +0.000640f, - +0.000577f, -0.000253f, -0.000165f, -0.000029f, +0.000099f, +0.000073f, +0.000218f, +0.000631f, +0.000523f, -0.000142f, - +0.000260f, -0.000115f, -0.000206f, +0.000028f, -0.000165f, +0.000609f, +0.000211f, -0.000135f, -0.000120f, +0.000076f, - -0.000165f, -0.000307f, +0.000157f, +0.000053f, -0.000158f, +0.000106f, +0.000142f, +0.000122f, -0.000148f, +0.000047f, - +0.000119f, -0.000061f, +0.000122f, -0.000065f, -0.000118f, +0.000212f, +0.000076f, -0.000114f, +0.000013f, +0.000011f, - -0.000038f, +0.000054f, +0.000064f, -0.000035f, -0.000024f, -0.000131f, +0.000090f, +0.000011f, +0.000020f, -0.000071f, - +0.000040f, -0.000019f, +0.000015f, -0.000001f, +0.000012f, +0.000068f, +0.000054f, -0.000008f, -0.000035f, -0.000051f, - -0.000023f, +0.000004f, +0.000004f, +0.000048f, -0.000039f, +0.000018f - }, - { - -0.000631f, -0.001670f, +0.001807f, -0.000922f, +0.000555f, +0.000581f, -0.001260f, +0.000093f, +0.000167f, +0.000266f, - -0.000425f, -0.000442f, -0.000081f, +0.000510f, -0.000299f, -0.000119f, +0.000994f, +0.001020f, -0.001053f, -0.001744f, - -0.000718f, +0.001079f, +0.001378f, -0.000022f, -0.000293f, -0.000459f, +0.000106f, +0.000139f, -0.000187f, +0.000533f, - -0.000002f, +0.000628f, +0.000137f, -0.000343f, +0.000028f, +0.000152f, +0.000304f, -0.000157f, -0.000456f, -0.000172f, - -0.000164f, -0.000053f, -0.000069f, -0.000106f, +0.000248f, -0.000267f, -0.000002f, -0.000103f, +0.000115f, +0.000295f, - -0.000179f, -0.000089f, -0.000092f, -0.000173f, -0.000131f, +0.000255f, +0.000070f, +0.000054f, +0.000021f, -0.000066f, - -0.000130f, -0.000050f, -0.000029f, +0.000127f, -0.000092f, +0.000109f, +0.000141f, +0.000013f, -0.000061f, -0.000174f, - +0.000064f, -0.000050f, -0.000001f, +0.000082f, -0.000024f, -0.000053f, +0.000020f, +0.000040f, -0.000012f, +0.000015f, - +0.000051f, +0.000053f, +0.000016f, -0.000033f, +0.000010f, -0.000041f, -0.000022f, +0.000022f, -0.000003f, +0.000043f, - -0.000043f, +0.000018f, -0.000013f, +0.000005f, +0.000006f, -0.000038f - }, - { - -0.000052f, -0.005268f, +0.003880f, +0.002675f, +0.000755f, +0.002314f, -0.002643f, +0.000436f, -0.000155f, +0.000255f, - +0.000144f, +0.000337f, +0.000207f, -0.000385f, -0.000504f, +0.000784f, -0.000550f, -0.000212f, -0.000310f, +0.000524f, - -0.000467f, +0.000777f, -0.000356f, +0.000027f, -0.000507f, -0.000163f, +0.000028f, -0.000051f, +0.000293f, -0.000088f, - -0.000022f, -0.000460f, +0.000016f, +0.000191f, +0.000166f, -0.000196f, +0.000433f, -0.000276f, -0.000236f, +0.000352f, - -0.000344f, -0.000644f, +0.000147f, +0.000033f, +0.000229f, +0.000120f, +0.000049f, +0.000039f, -0.000182f, -0.000002f, - +0.000059f, -0.000064f, -0.000064f, -0.000147f, -0.000014f, -0.000023f, +0.000160f, +0.000207f, -0.000185f, +0.000033f, - +0.000092f, -0.000063f, -0.000080f, +0.000069f, +0.000067f, -0.000128f, +0.000043f, +0.000018f, +0.000046f, -0.000019f, - +0.000036f, +0.000025f, +0.000060f, -0.000007f, -0.000109f, +0.000020f, -0.000074f, -0.000059f, +0.000055f, -0.000028f, - +0.000049f, -0.000011f, -0.000042f, +0.000087f, -0.000056f, +0.000059f, -0.000092f, +0.000033f, -0.000054f, +0.000019f, - +0.000018f, -0.000031f, -0.000032f, +0.000027f, +0.000050f, -0.000035f - }, - { - -0.000196f, -0.000768f, +0.000572f, -0.000102f, +0.000079f, -0.000467f, +0.000145f, +0.000255f, -0.000033f, +0.000029f, - -0.000194f, +0.000021f, +0.001078f, +0.000103f, -0.000038f, +0.001771f, +0.000885f, +0.000618f, -0.000451f, -0.000729f, - -0.001165f, +0.000370f, -0.000201f, +0.000312f, -0.001256f, +0.000239f, +0.000459f, -0.001158f, +0.000008f, +0.000035f, - -0.001236f, +0.000419f, -0.000077f, +0.000649f, -0.000105f, +0.000037f, -0.000450f, +0.000218f, -0.000286f, +0.000039f, - -0.000295f, +0.000100f, +0.000247f, -0.000254f, -0.000076f, -0.000070f, -0.000046f, +0.000202f, -0.000017f, +0.000020f, - -0.000192f, +0.000031f, +0.000126f, -0.000077f, -0.000142f, -0.000230f, -0.000166f, -0.000022f, +0.000234f, +0.000096f, - +0.000219f, -0.000043f, -0.000104f, -0.000096f, +0.000135f, +0.000124f, -0.000112f, +0.000116f, +0.000005f, +0.000089f, - +0.000011f, -0.000020f, +0.000023f, -0.000008f, -0.000042f, +0.000022f, -0.000095f, -0.000053f, +0.000021f, -0.000057f, - +0.000070f, -0.000041f, -0.000064f, +0.000044f, -0.000007f, -0.000010f, +0.000003f, +0.000038f, +0.000021f, +0.000002f, - +0.000018f, +0.000022f, -0.000036f, -0.000034f, +0.000032f, -0.000010f - }, - { - -0.006371f, +0.002192f, +0.002147f, -0.001030f, +0.000759f, +0.000149f, -0.001122f, -0.000273f, +0.000075f, +0.000329f, - -0.000027f, -0.000375f, +0.000328f, -0.001187f, -0.000546f, -0.000284f, +0.000636f, -0.000024f, -0.000366f, +0.000071f, - -0.000794f, +0.000202f, -0.000098f, +0.000124f, +0.000373f, -0.000147f, -0.000464f, +0.000473f, -0.000210f, +0.000201f, - +0.000329f, -0.000176f, -0.000300f, +0.000225f, +0.000244f, -0.000045f, -0.000212f, -0.000009f, +0.000310f, -0.000410f, - -0.000142f, +0.000191f, +0.000102f, +0.000079f, +0.000167f, +0.000141f, +0.000133f, +0.000003f, +0.000387f, +0.000088f, - +0.000041f, +0.000024f, +0.000140f, +0.000117f, -0.000236f, -0.000124f, -0.000139f, -0.000034f, -0.000006f, +0.000186f, - -0.000029f, +0.000070f, +0.000030f, -0.000014f, -0.000089f, -0.000010f, +0.000019f, +0.000024f, +0.000130f, -0.000102f, - -0.000098f, +0.000115f, +0.000072f, -0.000053f, -0.000050f, +0.000003f, +0.000021f, +0.000065f, -0.000058f, +0.000004f, - -0.000138f, +0.000028f, +0.000050f, +0.000032f, -0.000023f, -0.000131f, +0.000010f, +0.000069f, +0.000002f, +0.000013f, - +0.000027f, +0.000026f, +0.000033f, -0.000049f, +0.000013f, -0.000025f - }, - { - -0.000623f, -0.000154f, +0.000757f, +0.000705f, -0.000059f, -0.000042f, -0.000220f, +0.000228f, -0.000190f, -0.000195f, - +0.000319f, -0.000701f, +0.001031f, +0.000801f, -0.014085f, -0.001577f, -0.000544f, -0.001383f, -0.000060f, +0.000588f, - +0.000423f, -0.000531f, -0.000059f, -0.000299f, -0.000868f, +0.000802f, -0.000425f, -0.000383f, -0.000501f, -0.000067f, - -0.000146f, -0.000132f, -0.000378f, +0.000526f, -0.000152f, -0.000234f, +0.000378f, +0.000000f, -0.000027f, -0.000027f, - +0.000370f, +0.000008f, -0.000199f, -0.000036f, -0.000268f, -0.000171f, +0.000331f, -0.000021f, +0.000134f, +0.000079f, - +0.000149f, -0.000154f, -0.000080f, +0.000013f, +0.000068f, -0.000103f, -0.000020f, +0.000057f, +0.000007f, +0.000059f, - +0.000119f, -0.000253f, -0.000099f, +0.000026f, -0.000042f, -0.000102f, +0.000153f, +0.000009f, -0.000108f, -0.000009f, - -0.000084f, -0.000039f, +0.000056f, -0.000021f, +0.000022f, -0.000016f, -0.000129f, +0.000125f, -0.000026f, +0.000089f, - +0.000010f, -0.000102f, +0.000018f, -0.000005f, -0.000038f, +0.000032f, +0.000060f, +0.000066f, -0.000076f, +0.000063f, - +0.000023f, -0.000055f, -0.000056f, +0.000036f, -0.000007f, -0.000052f - }, - { - +0.002093f, +0.006985f, +0.000306f, -0.000809f, +0.000610f, -0.000834f, -0.000725f, +0.000323f, -0.000379f, -0.000052f, - +0.001475f, -0.000416f, -0.000435f, -0.000127f, -0.002088f, +0.000615f, -0.000320f, -0.000219f, -0.000387f, -0.000121f, - -0.000140f, +0.000060f, +0.000209f, -0.000095f, -0.000870f, +0.000176f, +0.000716f, +0.000735f, -0.000228f, -0.000340f, - +0.000176f, -0.000156f, +0.000057f, +0.000243f, -0.000017f, -0.000216f, -0.000190f, +0.000505f, +0.000096f, +0.000114f, - +0.000152f, -0.000056f, -0.000070f, +0.000031f, +0.000071f, -0.000004f, +0.000191f, +0.000263f, -0.000013f, -0.000145f, - +0.000261f, +0.000305f, -0.000033f, -0.000246f, +0.000042f, -0.000141f, -0.000010f, +0.000107f, -0.000071f, +0.000045f, - -0.000002f, -0.000056f, -0.000029f, +0.000057f, -0.000030f, +0.000054f, +0.000058f, +0.000006f, -0.000047f, +0.000004f, - -0.000042f, +0.000036f, +0.000077f, -0.000007f, -0.000085f, -0.000071f, +0.000031f, +0.000063f, +0.000003f, -0.000031f, - +0.000065f, +0.000027f, -0.000048f, +0.000007f, +0.000023f, -0.000010f, -0.000035f, +0.000048f, -0.000137f, +0.000012f, - -0.000005f, -0.000026f, +0.000031f, -0.000005f, +0.000007f, -0.000022f - } - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX] /* Q29 */= { { @@ -85521,9139 +47154,19 @@ const Word32 rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTA }, }, }; -#else -const float rightBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]= -{ - { - { - -0.003791f, +0.035616f, -0.034450f, +0.040441f, -0.029208f, +0.017954f, +0.011952f, +0.008329f, -0.020104f, -0.006243f, - +0.004245f, -0.010854f, +0.001877f, +0.018565f, +0.016323f, -0.029876f, +0.012277f, -0.005391f, +0.019624f, -0.011547f, - +0.004712f, -0.005113f, +0.019768f, -0.018680f, +0.007412f, -0.020217f, +0.010813f, -0.006206f, +0.003340f, +0.001228f, - -0.003712f, +0.012907f, -0.008330f, -0.003791f, -0.000284f, +0.001418f, +0.012931f, -0.024378f, +0.007858f, -0.010698f, - +0.012380f, +0.017354f, -0.014538f, -0.004443f, -0.001842f, -0.001028f, +0.000687f, +0.010936f, -0.003543f, +0.003378f, - -0.005550f, +0.002422f, -0.001987f, +0.003558f, -0.001605f, -0.002153f, -0.004844f, +0.003678f, -0.001028f, +0.009272f, - -0.002623f, -0.003425f, +0.001118f, +0.001615f, +0.000303f, +0.000069f, +0.002704f, -0.001183f, -0.003852f, -0.005380f, - +0.003144f, -0.001632f, +0.000334f, +0.001724f, -0.003079f, +0.003885f, -0.003650f, +0.002843f, +0.000534f, +0.000864f, - +0.000686f, +0.000315f, +0.000489f, +0.000848f, -0.003228f, +0.000289f, -0.002032f, +0.003090f, -0.002176f, -0.002891f, - +0.002361f, -0.000048f, +0.000530f, -0.002042f, +0.000599f, -0.000001f - }, - { - +0.015156f, -0.046919f, +0.023866f, +0.056551f, -0.018603f, +0.018204f, -0.006295f, +0.005841f, -0.017601f, +0.000850f, - +0.005508f, -0.025128f, +0.017630f, +0.004815f, +0.013452f, -0.013149f, -0.012112f, -0.002673f, +0.025048f, -0.020564f, - +0.008179f, -0.000026f, -0.006170f, -0.006985f, +0.015915f, -0.004689f, -0.011409f, +0.002401f, +0.008634f, -0.013774f, - +0.025872f, -0.016717f, +0.001849f, +0.000660f, -0.002988f, +0.019139f, -0.002357f, -0.007661f, -0.008487f, -0.005312f, - +0.017901f, -0.004952f, -0.005629f, -0.004625f, +0.011985f, -0.009104f, +0.003950f, +0.001489f, +0.002572f, -0.001056f, - +0.000930f, -0.001780f, -0.005631f, +0.005814f, -0.007183f, +0.003234f, -0.001103f, +0.003008f, -0.002753f, -0.000448f, - +0.004966f, +0.002010f, -0.007550f, +0.008200f, +0.000854f, +0.000047f, +0.002977f, -0.003688f, -0.002937f, +0.000292f, - -0.003802f, -0.000313f, +0.001301f, +0.000813f, -0.001391f, +0.002152f, +0.000637f, +0.000919f, +0.004756f, -0.002570f, - +0.001029f, +0.001605f, -0.000617f, +0.000673f, -0.001594f, -0.002762f, +0.003751f, -0.002323f, -0.001274f, -0.000698f, - +0.000647f, +0.002001f, -0.000753f, +0.000262f, +0.000371f, -0.000401f - }, - { - +0.004299f, -0.003209f, -0.003761f, +0.055760f, -0.024853f, +0.024391f, -0.001604f, -0.015957f, +0.002351f, +0.006343f, - -0.008115f, -0.020569f, +0.012643f, +0.009013f, -0.009925f, +0.003359f, +0.012535f, -0.012377f, +0.010433f, -0.000091f, - -0.010594f, +0.011266f, +0.006100f, -0.002060f, +0.002277f, -0.002171f, -0.012298f, -0.017392f, -0.006387f, +0.003138f, - +0.021639f, -0.000998f, -0.008441f, +0.007443f, +0.004154f, -0.005729f, +0.006390f, +0.002980f, +0.006195f, -0.009220f, - -0.008181f, +0.011127f, +0.006971f, -0.007298f, -0.001284f, -0.002612f, +0.002489f, +0.004926f, -0.000254f, -0.004375f, - -0.007130f, +0.002882f, -0.002582f, +0.000713f, +0.000041f, +0.002210f, +0.002881f, -0.008372f, +0.000127f, +0.003099f, - +0.008382f, +0.001015f, +0.000337f, -0.005586f, +0.007747f, -0.004040f, +0.002872f, -0.002689f, +0.003474f, -0.004804f, - -0.004120f, -0.003075f, +0.001198f, -0.002518f, +0.001058f, -0.002374f, +0.001928f, -0.000488f, +0.004656f, +0.002497f, - +0.002037f, +0.000146f, +0.000636f, -0.002417f, +0.000216f, +0.001828f, -0.004316f, -0.002718f, -0.001475f, +0.003910f, - +0.000325f, -0.001053f, +0.000272f, +0.000247f, +0.000219f, -0.001413f - }, - { - +0.000562f, +0.015049f, -0.031657f, +0.038521f, -0.033022f, +0.012710f, +0.010685f, -0.001883f, +0.000869f, -0.001471f, - -0.005622f, -0.010958f, -0.003235f, +0.030773f, -0.030455f, +0.027403f, +0.004990f, -0.020239f, -0.000620f, +0.002078f, - +0.000073f, +0.009197f, +0.002127f, -0.016887f, +0.015101f, +0.013827f, -0.020001f, -0.014559f, +0.014014f, -0.013660f, - +0.020513f, -0.015651f, +0.004790f, +0.001380f, -0.006340f, +0.001655f, +0.000017f, -0.004094f, +0.008944f, -0.005050f, - +0.002472f, +0.006787f, -0.005301f, -0.003325f, +0.000165f, +0.007203f, -0.010677f, +0.002142f, +0.006378f, -0.001557f, - -0.008835f, +0.005949f, +0.003548f, -0.006529f, +0.003132f, -0.001672f, +0.001931f, -0.004389f, -0.000620f, +0.006489f, - +0.000236f, -0.003725f, -0.002856f, +0.006497f, +0.003731f, -0.003336f, -0.003984f, +0.005417f, -0.002780f, -0.003150f, - +0.001674f, -0.001999f, +0.002759f, -0.000623f, +0.000414f, +0.001472f, -0.001143f, -0.000976f, +0.002069f, -0.000229f, - -0.000752f, -0.000053f, +0.000146f, +0.001228f, -0.001831f, +0.001328f, +0.000937f, +0.000171f, -0.002131f, +0.001937f, - -0.000823f, +0.000024f, -0.001228f, +0.000033f, +0.000899f, +0.000148f - }, - { - +0.031079f, -0.100963f, +0.034014f, +0.043930f, -0.015193f, +0.011117f, -0.002004f, +0.000328f, -0.003409f, -0.022653f, - +0.010101f, -0.016582f, +0.017336f, -0.001914f, +0.003425f, +0.004211f, +0.006719f, -0.007042f, -0.003467f, +0.006217f, - -0.011715f, +0.013506f, -0.012220f, -0.017549f, +0.030531f, +0.000010f, -0.011696f, -0.013516f, +0.015369f, +0.015785f, - -0.001777f, -0.020855f, +0.025498f, -0.019570f, +0.007411f, +0.007851f, -0.004696f, -0.008433f, +0.012166f, -0.003196f, - +0.005940f, -0.005937f, +0.004706f, -0.005311f, +0.001921f, +0.005805f, -0.004376f, -0.003911f, -0.000236f, +0.004180f, - +0.001336f, -0.003118f, +0.003544f, -0.003611f, +0.000195f, +0.004241f, -0.012135f, +0.005817f, -0.000021f, +0.006245f, - -0.001650f, -0.001215f, -0.000318f, +0.001569f, -0.002899f, +0.009029f, -0.003874f, -0.002748f, -0.000394f, +0.000273f, - -0.004816f, -0.001913f, -0.000162f, +0.002463f, +0.001834f, +0.001245f, +0.001416f, -0.000379f, +0.001714f, +0.003885f, - -0.003784f, +0.000354f, -0.001659f, +0.002297f, -0.002478f, +0.000657f, +0.000994f, -0.000099f, -0.002571f, +0.003597f, - -0.001896f, +0.001375f, -0.000341f, -0.000967f, -0.000569f, +0.000971f - }, - { - -0.004541f, +0.045081f, -0.061054f, +0.043177f, -0.033020f, +0.011133f, +0.018265f, -0.006689f, +0.000432f, -0.012501f, - +0.010020f, -0.014024f, -0.016100f, +0.006235f, -0.000806f, +0.025484f, -0.000778f, -0.011684f, -0.007542f, -0.008898f, - +0.025761f, +0.001589f, -0.018234f, -0.013261f, +0.009468f, -0.004788f, +0.034638f, -0.026602f, +0.010301f, -0.008334f, - -0.008825f, -0.013069f, +0.016905f, +0.007814f, -0.001121f, -0.017714f, +0.005769f, -0.002227f, -0.004115f, +0.010645f, - -0.002158f, -0.018715f, +0.013931f, +0.004391f, -0.002375f, -0.010036f, +0.007984f, -0.006945f, +0.003214f, -0.002949f, - +0.003658f, -0.001122f, +0.000061f, +0.002870f, +0.004568f, +0.006022f, -0.006356f, -0.004375f, -0.000618f, +0.002222f, - -0.001832f, +0.001598f, -0.005641f, -0.002685f, +0.005231f, -0.002316f, +0.002807f, +0.000707f, -0.004551f, +0.001686f, - +0.000074f, +0.000185f, +0.002129f, -0.003117f, -0.002030f, +0.004874f, -0.000430f, +0.000043f, -0.002739f, +0.001221f, - -0.000975f, -0.004325f, +0.000197f, +0.001261f, +0.003576f, +0.002260f, -0.001576f, -0.001480f, -0.001593f, +0.000692f, - +0.000285f, -0.001473f, +0.002741f, -0.000002f, -0.000450f, -0.000607f - }, - { - +0.036117f, -0.119327f, +0.044976f, +0.037739f, -0.001219f, +0.002103f, +0.007910f, -0.005947f, +0.000356f, -0.018261f, - +0.019002f, -0.028213f, -0.003305f, +0.022168f, +0.006128f, +0.018084f, -0.014664f, -0.011038f, -0.007963f, +0.000761f, - +0.021748f, -0.009466f, -0.025281f, +0.008730f, +0.005341f, -0.007303f, +0.016566f, -0.015863f, +0.012280f, -0.001132f, - -0.005262f, -0.011727f, +0.016218f, +0.013931f, -0.009602f, -0.011008f, +0.008522f, -0.008221f, +0.011200f, -0.002612f, - -0.000806f, -0.010326f, +0.006563f, +0.005927f, -0.008185f, -0.004359f, +0.003896f, +0.002613f, +0.001596f, -0.004896f, - +0.001641f, -0.003403f, +0.007664f, +0.001231f, -0.000518f, +0.005706f, -0.006250f, +0.000972f, +0.004981f, -0.003980f, - -0.000078f, +0.000348f, -0.004083f, +0.001331f, -0.000848f, +0.001826f, +0.003498f, -0.003738f, +0.001630f, -0.004187f, - +0.001313f, +0.000447f, +0.002926f, +0.000433f, +0.003567f, -0.004496f, -0.000221f, +0.002305f, -0.000183f, -0.000633f, - -0.001989f, -0.001657f, -0.000426f, +0.002021f, -0.003825f, +0.007214f, -0.003633f, +0.001283f, -0.003259f, -0.000361f, - +0.002577f, -0.003052f, +0.001919f, -0.000278f, +0.000787f, +0.000639f - }, - { - -0.004144f, +0.045374f, -0.072072f, +0.045968f, -0.026150f, +0.002220f, +0.016361f, +0.001348f, +0.003320f, -0.012047f, - +0.002106f, -0.018684f, -0.005858f, +0.018462f, +0.003925f, +0.001033f, -0.004733f, -0.010901f, +0.019465f, +0.009475f, - -0.015377f, -0.000092f, -0.001831f, -0.001823f, -0.028757f, +0.025943f, +0.021352f, -0.013191f, -0.010846f, +0.003222f, - -0.008877f, +0.007365f, -0.010518f, +0.020756f, -0.015993f, +0.008567f, -0.009150f, +0.009497f, -0.009918f, +0.000967f, - +0.004153f, +0.001123f, -0.016148f, +0.004013f, +0.009431f, -0.001843f, -0.006558f, -0.006791f, +0.007685f, +0.009283f, - -0.008128f, -0.010130f, +0.015240f, +0.002291f, +0.003442f, -0.000674f, +0.000825f, +0.000382f, -0.011712f, +0.002348f, - +0.002999f, -0.006862f, +0.000962f, -0.000590f, -0.000935f, -0.001273f, +0.005840f, +0.004162f, -0.009001f, +0.000338f, - +0.003104f, +0.001575f, +0.004593f, +0.001355f, -0.000290f, -0.002256f, +0.004355f, -0.001903f, -0.003263f, -0.000659f, - -0.001294f, -0.000832f, +0.000698f, -0.000816f, +0.002170f, -0.000212f, +0.002000f, -0.001026f, -0.004872f, -0.000179f, - +0.001854f, -0.000515f, +0.004120f, +0.000527f, -0.000354f, -0.001380f - }, - { - +0.034893f, -0.116598f, +0.051025f, +0.035694f, -0.000997f, +0.018245f, -0.005301f, -0.002292f, -0.008323f, -0.000000f, - +0.006370f, -0.022686f, -0.004512f, +0.042219f, -0.034481f, +0.020360f, -0.012263f, -0.007853f, +0.020722f, -0.005794f, - +0.005172f, -0.028014f, +0.028510f, -0.021731f, -0.020878f, +0.019570f, +0.009691f, +0.004412f, -0.023657f, +0.007119f, - -0.001198f, +0.000920f, -0.005098f, +0.000793f, +0.012300f, -0.012051f, +0.001785f, +0.006111f, +0.001740f, -0.004239f, - -0.005123f, -0.004060f, -0.000797f, +0.001264f, +0.002020f, +0.002966f, +0.000674f, -0.001972f, -0.002580f, +0.002055f, - +0.004382f, -0.010227f, +0.002932f, +0.006830f, +0.001417f, +0.004780f, -0.002332f, -0.000024f, -0.008105f, -0.000001f, - +0.002378f, -0.004309f, +0.002387f, +0.007005f, -0.006738f, +0.001774f, +0.005883f, -0.000985f, +0.001149f, -0.005486f, - +0.001724f, +0.002457f, +0.000348f, +0.004471f, -0.003903f, -0.000096f, +0.001148f, -0.002147f, -0.001909f, -0.000392f, - -0.000904f, -0.002897f, +0.002295f, +0.000806f, +0.001663f, +0.000673f, +0.000174f, -0.000742f, -0.000727f, -0.000970f, - +0.000703f, +0.002098f, -0.001480f, +0.002680f, -0.000201f, -0.000227f - }, - { - +0.005126f, -0.001538f, -0.015235f, +0.030695f, +0.005281f, +0.006940f, -0.039109f, +0.010453f, +0.025729f, -0.008861f, - -0.003570f, -0.022616f, +0.023200f, +0.008870f, -0.021218f, +0.004430f, -0.018785f, +0.010071f, +0.008505f, +0.003754f, - -0.012304f, +0.018236f, -0.001993f, +0.002251f, +0.006982f, -0.022933f, +0.013043f, -0.018298f, -0.002656f, +0.005637f, - +0.008741f, -0.003656f, +0.012688f, -0.010035f, -0.003106f, +0.012127f, +0.000493f, -0.001092f, -0.009893f, +0.015247f, - -0.000467f, +0.003941f, -0.000487f, -0.021390f, +0.003195f, -0.003115f, -0.006729f, +0.009499f, +0.002141f, +0.005978f, - -0.009898f, -0.000030f, -0.005210f, +0.003261f, -0.004086f, +0.008716f, +0.002369f, -0.002758f, +0.007527f, -0.010094f, - +0.001631f, -0.009640f, +0.007037f, -0.004069f, +0.003800f, +0.001849f, +0.001873f, -0.001975f, +0.003919f, -0.004245f, - +0.001578f, -0.003325f, +0.001115f, -0.003713f, -0.002063f, -0.000404f, +0.000261f, +0.001356f, -0.000226f, +0.000382f, - +0.001363f, +0.000463f, -0.000105f, -0.000621f, +0.000770f, -0.002227f, -0.000718f, +0.002514f, -0.000664f, -0.003633f, - +0.001976f, -0.001506f, -0.000715f, -0.000132f, +0.002516f, -0.002111f - }, - { - +0.022350f, -0.075938f, +0.035126f, +0.029207f, +0.003163f, -0.004521f, -0.020930f, -0.014418f, +0.030501f, -0.006740f, - -0.011390f, -0.000896f, +0.012382f, -0.006164f, -0.001313f, +0.002459f, -0.002104f, +0.021712f, -0.012193f, +0.009687f, - +0.004707f, +0.014163f, -0.023884f, +0.021911f, -0.026152f, +0.001162f, +0.006696f, -0.000469f, +0.000056f, +0.004718f, - -0.001990f, -0.000962f, +0.004848f, -0.013501f, +0.007453f, +0.000046f, +0.003247f, -0.006705f, +0.006898f, -0.006236f, - +0.006251f, -0.005148f, +0.001841f, -0.002463f, +0.000287f, -0.000001f, -0.007061f, +0.013003f, -0.004662f, -0.000785f, - +0.009561f, -0.011175f, -0.002834f, -0.002082f, +0.007184f, -0.000181f, -0.000345f, +0.009599f, -0.003307f, -0.002433f, - -0.001748f, -0.000585f, -0.000145f, +0.005346f, +0.003550f, -0.003113f, -0.001236f, -0.001061f, +0.000341f, -0.001713f, - +0.003038f, -0.000514f, +0.003507f, -0.004291f, -0.000841f, +0.001188f, -0.002748f, +0.003677f, -0.000286f, -0.001103f, - +0.002232f, +0.004038f, -0.003380f, -0.000870f, -0.000191f, +0.002415f, -0.004147f, +0.000529f, -0.000457f, -0.000480f, - +0.000047f, -0.002087f, +0.002915f, +0.001516f, -0.000635f, +0.000426f - }, - { - +0.001111f, +0.011867f, -0.017990f, +0.028297f, +0.000426f, -0.002363f, -0.039425f, +0.031221f, -0.005193f, +0.008364f, - +0.006401f, -0.025754f, +0.026080f, -0.023642f, +0.002052f, +0.003631f, +0.009743f, -0.017352f, +0.007839f, +0.000594f, - -0.014943f, +0.001556f, -0.013070f, +0.022447f, +0.000669f, -0.015098f, +0.015087f, +0.007037f, -0.005164f, -0.004471f, - -0.004559f, +0.009403f, -0.010427f, +0.012295f, +0.008748f, -0.010688f, +0.004361f, -0.009843f, -0.000076f, +0.003307f, - -0.002826f, -0.014185f, +0.022416f, -0.006705f, -0.010075f, +0.012218f, -0.003595f, +0.003724f, -0.005893f, +0.008991f, - +0.009057f, -0.015570f, +0.004597f, -0.001585f, +0.002206f, -0.000167f, -0.009879f, +0.004410f, +0.000127f, -0.007267f, - +0.006999f, +0.006806f, -0.003321f, -0.000730f, +0.001635f, -0.001273f, +0.000587f, -0.005776f, +0.001981f, +0.007074f, - -0.002171f, -0.003334f, +0.005375f, +0.004819f, -0.003044f, -0.001193f, +0.002751f, -0.002876f, +0.001043f, -0.003590f, - +0.003531f, -0.002616f, -0.001019f, -0.000056f, +0.001974f, -0.001485f, -0.001004f, +0.005073f, +0.001846f, -0.000808f, - +0.002524f, +0.000703f, +0.000142f, -0.000624f, +0.000828f, -0.003011f - }, - { - +0.034061f, -0.110442f, +0.048213f, +0.025239f, +0.012269f, -0.002514f, -0.019908f, +0.023970f, -0.019269f, +0.028416f, - -0.046883f, -0.000178f, +0.012888f, -0.032642f, +0.030844f, +0.001553f, +0.000074f, -0.004604f, +0.003820f, -0.010144f, - -0.000311f, +0.007779f, -0.005806f, +0.007944f, -0.014090f, -0.000900f, +0.002712f, +0.013894f, +0.004462f, -0.016205f, - -0.005337f, +0.000814f, -0.006058f, +0.012871f, +0.007492f, -0.003853f, -0.000002f, -0.010796f, +0.012141f, -0.004061f, - -0.014549f, +0.001839f, +0.014417f, -0.002074f, -0.006590f, +0.007401f, -0.001645f, +0.005736f, -0.004139f, +0.000785f, - +0.001653f, -0.002559f, +0.000538f, +0.002989f, -0.008537f, +0.004625f, -0.010530f, +0.011204f, -0.007167f, +0.007388f, - -0.002460f, +0.002414f, -0.002064f, -0.000228f, +0.001363f, -0.001512f, -0.003710f, +0.000004f, +0.007957f, +0.003478f, - -0.005423f, +0.002982f, -0.000691f, +0.001599f, +0.000515f, -0.001164f, -0.001368f, +0.001924f, -0.004302f, +0.002464f, - -0.003819f, +0.000138f, -0.002363f, -0.000981f, +0.002320f, +0.000650f, -0.000354f, +0.002478f, -0.001367f, +0.001364f, - -0.000283f, +0.002098f, +0.001957f, +0.000225f, +0.000149f, -0.001690f - }, - { - +0.008157f, -0.014952f, -0.004610f, +0.021016f, +0.004300f, -0.001303f, -0.048770f, +0.041565f, -0.008153f, -0.009920f, - +0.012004f, -0.032354f, +0.010967f, +0.009596f, +0.019598f, -0.022471f, +0.025230f, -0.003797f, -0.009861f, -0.015772f, - +0.014787f, -0.015178f, +0.026701f, +0.003907f, -0.021712f, +0.012796f, +0.010293f, -0.020113f, +0.003656f, +0.005975f, - -0.013944f, +0.007406f, +0.004362f, +0.006323f, -0.024994f, +0.018065f, -0.003672f, -0.002683f, +0.001180f, +0.002073f, - +0.009488f, -0.004959f, -0.001422f, -0.006185f, +0.005975f, -0.003506f, -0.003574f, +0.008883f, +0.000407f, +0.002029f, - +0.001688f, +0.000331f, -0.002574f, -0.002714f, -0.000760f, -0.000615f, -0.002091f, +0.001747f, -0.002336f, -0.001154f, - +0.003304f, -0.005443f, +0.001853f, +0.003146f, +0.004879f, -0.002264f, -0.004307f, +0.003847f, -0.003045f, +0.000536f, - +0.001209f, +0.000809f, +0.000078f, -0.002629f, +0.002595f, +0.001081f, -0.001842f, -0.000580f, -0.000494f, +0.001876f, - +0.000284f, +0.000530f, +0.000551f, +0.000242f, +0.000446f, +0.000477f, -0.000401f, +0.000882f, -0.000876f, -0.001634f, - -0.000019f, -0.000847f, +0.000083f, +0.000996f, +0.001146f, -0.003415f - }, - { - +0.031471f, -0.102371f, +0.048731f, +0.002571f, +0.031337f, -0.013155f, -0.021248f, +0.022650f, -0.018393f, +0.012535f, - -0.013414f, -0.001893f, -0.018236f, +0.028763f, -0.008034f, +0.003288f, +0.004925f, -0.009888f, -0.012764f, +0.000884f, - +0.005916f, +0.015517f, -0.013872f, +0.014332f, -0.013445f, -0.016763f, +0.018277f, +0.003870f, -0.005788f, +0.005802f, - -0.011611f, +0.006351f, +0.000286f, +0.004177f, -0.016282f, +0.009266f, +0.000629f, +0.004378f, -0.008592f, +0.007596f, - +0.003657f, +0.008392f, -0.015385f, +0.001600f, +0.002894f, -0.006831f, -0.000403f, +0.004026f, +0.004754f, -0.000294f, - +0.003344f, -0.003990f, -0.003904f, +0.002277f, -0.005484f, +0.002950f, -0.003668f, +0.002270f, +0.000406f, +0.004562f, - -0.004674f, +0.001137f, +0.000017f, +0.000317f, +0.000708f, -0.004247f, +0.002698f, -0.000040f, +0.000686f, -0.005979f, - +0.005994f, -0.005415f, +0.004858f, -0.002041f, -0.001598f, +0.001694f, -0.000177f, -0.003148f, +0.000052f, -0.001476f, - +0.002110f, -0.001808f, +0.000649f, -0.001596f, +0.001986f, -0.000151f, +0.002280f, -0.000636f, -0.000539f, -0.001988f, - +0.000286f, +0.001015f, +0.000693f, -0.002775f, +0.002611f, -0.000593f - } - }, - { - { - -0.000492f, +0.127142f, +0.030490f, +0.014264f, -0.035944f, +0.023620f, +0.016300f, +0.015501f, -0.016171f, +0.001100f, - +0.002479f, -0.006976f, +0.021283f, +0.029754f, +0.011380f, -0.041859f, +0.028271f, +0.004580f, +0.009514f, -0.023580f, - +0.013174f, +0.012351f, +0.037096f, -0.033694f, -0.007608f, -0.028563f, +0.014571f, +0.002913f, +0.019502f, +0.004183f, - -0.021282f, -0.001475f, -0.019316f, -0.001425f, -0.004670f, -0.007110f, +0.009945f, -0.033870f, +0.003142f, -0.022763f, - +0.006673f, +0.019557f, -0.011205f, +0.002269f, -0.006265f, -0.008485f, +0.004070f, +0.024582f, -0.001157f, +0.003195f, - +0.001529f, +0.004204f, -0.000652f, +0.005671f, -0.000359f, -0.001155f, -0.009685f, -0.001868f, -0.002569f, +0.016346f, - -0.001001f, -0.009543f, -0.005063f, +0.000231f, -0.000778f, -0.003100f, -0.000187f, -0.000874f, -0.003108f, -0.005018f, - +0.009271f, +0.000628f, +0.000157f, +0.003205f, -0.002344f, +0.001975f, -0.008487f, +0.000500f, -0.000589f, +0.000350f, - -0.000638f, -0.001753f, -0.000961f, -0.002041f, -0.005803f, -0.000833f, -0.003869f, +0.002965f, +0.001063f, +0.001273f, - +0.004055f, -0.000334f, -0.000921f, -0.003242f, -0.000172f, -0.001795f - }, - { - -0.007837f, +0.022107f, +0.127114f, +0.120839f, +0.001794f, +0.002773f, -0.015184f, +0.015920f, -0.002210f, +0.007927f, - +0.008238f, -0.028435f, +0.016593f, +0.007225f, +0.033784f, -0.024372f, -0.029858f, -0.012470f, +0.011342f, -0.024519f, - -0.004079f, -0.013535f, -0.012085f, -0.005937f, +0.029009f, -0.002930f, -0.007080f, +0.007354f, +0.003273f, -0.013310f, - +0.037567f, -0.019525f, +0.007405f, +0.018909f, +0.008826f, +0.023754f, -0.005211f, -0.012007f, -0.023086f, -0.016654f, - +0.016544f, -0.010107f, -0.005647f, -0.004065f, +0.012187f, -0.003826f, +0.013470f, +0.003581f, +0.001941f, -0.002853f, - +0.003480f, -0.002259f, -0.009590f, +0.004383f, -0.002683f, +0.010189f, -0.003419f, -0.000946f, -0.007792f, -0.005691f, - +0.002501f, +0.000188f, -0.010032f, +0.015210f, +0.004677f, +0.000532f, +0.003285f, -0.002984f, -0.001447f, +0.000496f, - -0.003362f, +0.003906f, +0.003948f, +0.004497f, +0.000189f, +0.000256f, -0.000929f, -0.001518f, +0.002044f, -0.002702f, - +0.004598f, +0.001435f, -0.003800f, +0.000606f, +0.002298f, -0.000827f, +0.004897f, -0.002414f, -0.003063f, -0.000538f, - +0.001736f, +0.002346f, +0.001046f, +0.001436f, -0.001316f, -0.003433f - }, - { - +0.000671f, +0.110839f, +0.101416f, +0.091860f, +0.005660f, +0.012777f, -0.008042f, -0.007811f, +0.005404f, +0.017988f, - -0.007726f, -0.035331f, +0.004686f, +0.004796f, -0.012038f, +0.004397f, +0.029637f, +0.000049f, +0.017032f, +0.002561f, - -0.013992f, +0.004338f, +0.002661f, -0.006978f, -0.001991f, -0.016686f, -0.030465f, -0.026391f, -0.008065f, +0.006298f, - +0.027376f, +0.005574f, -0.013353f, +0.005959f, +0.013166f, +0.005872f, +0.019797f, +0.014006f, +0.017696f, -0.005558f, - -0.015198f, +0.008329f, +0.010258f, -0.006952f, -0.005429f, -0.008932f, -0.002966f, +0.003579f, +0.002287f, -0.006145f, - -0.006903f, +0.008747f, -0.006150f, +0.000402f, -0.001114f, -0.001603f, +0.012201f, +0.003396f, +0.000947f, -0.002934f, - +0.010431f, +0.004735f, +0.000763f, -0.009370f, +0.004800f, -0.004450f, +0.001665f, -0.002129f, +0.006339f, -0.005015f, - -0.000539f, -0.002990f, -0.000544f, -0.002495f, -0.000746f, -0.004227f, +0.001651f, +0.000630f, +0.010454f, +0.005959f, - +0.004160f, +0.001907f, +0.001995f, -0.003650f, -0.003609f, -0.000892f, -0.005898f, -0.001278f, -0.001766f, +0.002991f, - +0.001625f, -0.001037f, -0.002750f, -0.002003f, -0.000188f, +0.000621f - }, - { - +0.000990f, +0.080842f, +0.006590f, +0.002939f, -0.063577f, +0.008257f, +0.010604f, -0.004919f, +0.005113f, +0.037113f, - +0.012699f, -0.015215f, -0.006199f, +0.018887f, -0.053634f, +0.035855f, +0.043012f, -0.015612f, -0.032205f, -0.010302f, - +0.001258f, +0.015463f, +0.019228f, -0.008104f, +0.015893f, +0.009870f, -0.028033f, -0.028344f, +0.002831f, -0.025566f, - +0.028636f, -0.011375f, -0.007755f, -0.005683f, -0.007843f, -0.003330f, -0.008150f, -0.007394f, +0.013685f, +0.003644f, - +0.008056f, +0.006824f, -0.003341f, -0.007880f, -0.003775f, +0.008857f, -0.015107f, +0.002661f, +0.007104f, +0.003490f, - -0.010954f, -0.003320f, +0.005706f, -0.003025f, +0.004389f, -0.000141f, -0.001093f, -0.010051f, -0.001956f, +0.010995f, - +0.002149f, -0.003701f, -0.000580f, +0.012925f, +0.011365f, -0.002934f, -0.007096f, -0.000541f, -0.008584f, +0.001509f, - +0.008050f, -0.000326f, +0.005580f, -0.000333f, +0.000527f, +0.000851f, -0.000600f, +0.000707f, +0.001200f, -0.001471f, - -0.000259f, +0.000664f, +0.000207f, +0.001260f, -0.002235f, +0.001211f, +0.001370f, +0.003000f, +0.000330f, +0.002028f, - -0.001790f, -0.000677f, +0.000545f, +0.000926f, -0.000186f, -0.000303f - }, - { - -0.026835f, -0.181865f, +0.037564f, +0.107751f, +0.032150f, +0.003916f, -0.013587f, -0.004438f, -0.013500f, -0.019061f, - +0.018127f, -0.027756f, +0.016303f, -0.018435f, -0.007393f, +0.008794f, +0.039105f, -0.003404f, -0.028716f, -0.011274f, - -0.044767f, +0.001436f, +0.013655f, +0.001732f, +0.026819f, -0.000095f, +0.001978f, +0.001876f, +0.026554f, +0.017451f, - -0.002075f, -0.028912f, +0.026192f, -0.012989f, +0.015906f, +0.014152f, +0.001101f, -0.007629f, +0.014840f, +0.001461f, - +0.001782f, -0.011494f, +0.011753f, -0.003328f, -0.003503f, +0.006511f, +0.000759f, +0.005716f, +0.003309f, -0.000564f, - +0.001223f, -0.006044f, +0.007236f, -0.001145f, -0.007203f, +0.004614f, -0.014844f, +0.001762f, +0.001465f, +0.007694f, - +0.001861f, +0.003301f, -0.004797f, -0.003294f, -0.004021f, +0.015571f, +0.000944f, -0.003031f, -0.003769f, -0.004734f, - -0.010545f, -0.004038f, +0.002712f, +0.006084f, +0.007743f, +0.002468f, +0.000482f, +0.002498f, +0.006597f, +0.009007f, - -0.001043f, +0.000108f, -0.003056f, +0.002881f, -0.005147f, -0.001948f, +0.002383f, +0.002622f, -0.000338f, +0.005018f, - -0.001357f, +0.002903f, +0.000944f, -0.000235f, -0.000181f, +0.002126f - }, - { - -0.003185f, +0.100270f, -0.029126f, -0.009281f, -0.072169f, +0.013546f, +0.016975f, -0.009072f, +0.010034f, -0.005103f, - +0.007802f, -0.018048f, -0.010867f, -0.011273f, -0.023622f, +0.012181f, -0.009776f, -0.008777f, -0.016221f, -0.021456f, - +0.020390f, +0.001323f, -0.002958f, -0.025382f, -0.008702f, -0.010006f, +0.039060f, -0.025220f, +0.005527f, -0.018304f, - -0.010691f, -0.032201f, +0.000142f, +0.010727f, -0.006689f, -0.024096f, +0.007994f, -0.009646f, -0.010656f, +0.009432f, - +0.005178f, -0.016290f, +0.008334f, +0.004069f, +0.003675f, -0.004658f, +0.006706f, -0.013866f, +0.002914f, -0.000667f, - +0.005199f, +0.003319f, +0.000516f, +0.003473f, +0.010426f, +0.006826f, -0.012693f, -0.007533f, -0.001723f, +0.001412f, - -0.001387f, +0.002234f, -0.008857f, -0.005027f, +0.002840f, -0.007341f, +0.004239f, +0.007672f, -0.002719f, +0.000126f, - +0.000082f, -0.002792f, -0.005425f, -0.012384f, -0.008279f, +0.006008f, +0.000589f, +0.000922f, -0.002687f, +0.000674f, - -0.001525f, -0.004787f, +0.000102f, +0.004109f, +0.006266f, +0.001595f, -0.003404f, -0.000900f, -0.000193f, +0.002951f, - +0.001078f, -0.003480f, +0.001421f, -0.002189f, -0.000761f, +0.000053f - }, - { - -0.030217f, -0.221214f, +0.038313f, +0.121312f, +0.064707f, -0.003907f, +0.010002f, -0.007884f, +0.004944f, -0.022780f, - +0.023826f, -0.005094f, +0.000909f, +0.020493f, +0.008115f, -0.005734f, -0.029788f, -0.003137f, -0.018553f, -0.030074f, - +0.006583f, -0.014134f, -0.029065f, +0.014021f, +0.006633f, -0.019995f, +0.009369f, -0.009166f, +0.024812f, +0.003127f, - -0.000021f, -0.011782f, +0.009195f, +0.018955f, -0.001175f, -0.014172f, -0.001517f, -0.015883f, +0.015238f, +0.000148f, - +0.006233f, -0.010534f, +0.004895f, +0.001454f, -0.021112f, -0.010564f, +0.005267f, +0.009229f, +0.012845f, -0.003395f, - -0.009352f, -0.007743f, +0.014193f, -0.001162f, -0.005752f, +0.009354f, -0.000337f, +0.012997f, +0.012746f, -0.004475f, - +0.005915f, +0.002550f, -0.009430f, -0.001723f, -0.001543f, +0.000441f, +0.002673f, -0.002115f, +0.001608f, -0.007624f, - +0.002453f, -0.000548f, +0.004768f, +0.003531f, +0.003776f, -0.008140f, -0.002597f, +0.006363f, +0.003781f, +0.000026f, - -0.001018f, -0.002478f, -0.001446f, +0.000320f, -0.006837f, +0.007249f, -0.005413f, +0.001959f, -0.003069f, -0.001351f, - +0.003129f, -0.001881f, +0.000818f, -0.001412f, +0.002122f, +0.001692f - }, - { - -0.004134f, +0.078893f, -0.059682f, -0.002127f, -0.060617f, -0.007065f, +0.016696f, +0.014501f, +0.011325f, -0.005655f, - +0.014505f, -0.010427f, -0.010943f, +0.000286f, +0.009830f, +0.007337f, +0.003271f, +0.014110f, +0.015331f, -0.001794f, - -0.025418f, -0.008408f, -0.008112f, +0.017243f, -0.011046f, +0.014224f, -0.004306f, -0.010070f, +0.001507f, -0.000426f, - +0.006884f, +0.007839f, -0.029931f, +0.009998f, -0.019037f, +0.012281f, -0.010893f, +0.001655f, -0.015497f, +0.000224f, - +0.009042f, +0.008738f, -0.022560f, -0.003224f, +0.011806f, -0.000160f, -0.005826f, -0.009557f, +0.001611f, +0.012995f, - -0.003841f, -0.006817f, +0.020858f, +0.002630f, +0.006933f, +0.002031f, -0.004101f, -0.003763f, -0.009439f, +0.000590f, - -0.003484f, -0.009424f, +0.004092f, +0.001133f, +0.001681f, -0.001448f, +0.001601f, -0.001946f, -0.006213f, +0.009829f, - +0.009660f, +0.007110f, +0.009400f, +0.003770f, -0.000927f, -0.007563f, +0.001073f, +0.001559f, +0.001140f, +0.000655f, - +0.000532f, +0.000921f, -0.000204f, -0.004870f, -0.002147f, -0.003474f, +0.002213f, +0.001794f, -0.005261f, -0.003304f, - +0.001486f, -0.000281f, +0.003085f, +0.001261f, +0.001769f, -0.000273f - }, - { - -0.029485f, -0.205707f, +0.057007f, +0.129426f, +0.081460f, +0.020928f, -0.011809f, -0.003713f, +0.001069f, +0.017510f, - +0.030232f, -0.016894f, -0.021508f, +0.027481f, -0.061490f, +0.003144f, -0.004036f, -0.014495f, +0.013101f, +0.005423f, - +0.006718f, -0.051342f, +0.019772f, -0.010063f, -0.033144f, +0.004254f, +0.006226f, +0.007016f, -0.012031f, +0.007262f, - -0.022784f, -0.018352f, +0.006932f, +0.005257f, +0.005291f, -0.012935f, +0.001822f, +0.000522f, -0.004537f, +0.002376f, - +0.000423f, -0.012098f, +0.001181f, +0.000544f, +0.000884f, +0.017346f, +0.012489f, -0.004209f, -0.012583f, -0.000402f, - +0.005246f, -0.010863f, +0.003781f, +0.000229f, -0.003368f, +0.005246f, -0.010223f, -0.000779f, -0.003906f, +0.005584f, - +0.007814f, -0.002715f, +0.006893f, +0.014089f, -0.000233f, +0.005548f, +0.003548f, -0.000286f, +0.000730f, -0.008074f, - +0.001699f, +0.000446f, -0.003747f, +0.002418f, -0.002163f, -0.001382f, -0.003948f, -0.005746f, -0.004252f, +0.002258f, - -0.000749f, -0.005488f, +0.002416f, +0.002479f, +0.001478f, +0.000712f, +0.002446f, +0.001543f, +0.001608f, -0.000083f, - -0.002007f, +0.000949f, -0.001753f, +0.003297f, +0.001064f, -0.000843f - }, - { - -0.000633f, +0.082188f, +0.048760f, +0.019632f, -0.017441f, -0.012185f, -0.045362f, +0.033211f, +0.046861f, -0.012585f, - +0.004360f, -0.030819f, +0.023468f, +0.025510f, -0.027721f, -0.024079f, -0.052916f, +0.027297f, +0.033162f, +0.009518f, - -0.011374f, +0.009831f, -0.010468f, -0.008194f, +0.004808f, -0.018884f, +0.014603f, -0.028812f, -0.000211f, +0.014420f, - +0.025996f, +0.000904f, +0.010663f, -0.009868f, +0.002204f, +0.027928f, +0.018839f, +0.007836f, -0.012974f, +0.015666f, - -0.005101f, -0.000679f, -0.004716f, -0.034668f, -0.007855f, -0.004884f, -0.016476f, +0.001579f, -0.003905f, -0.002110f, - -0.004217f, +0.002836f, -0.005910f, +0.012871f, +0.007021f, +0.015379f, -0.003426f, -0.003500f, +0.008908f, -0.020345f, - -0.000759f, -0.009878f, +0.003412f, -0.014077f, -0.003098f, +0.002591f, +0.008189f, +0.000578f, +0.003295f, -0.005207f, - -0.000990f, -0.005295f, +0.003115f, +0.000478f, -0.001554f, -0.005935f, -0.003133f, +0.001822f, +0.000705f, -0.002703f, - -0.004657f, -0.001924f, +0.001114f, -0.000978f, -0.003733f, -0.009387f, -0.001607f, +0.005996f, +0.003084f, -0.000329f, - +0.002784f, -0.002209f, -0.002129f, -0.002315f, -0.000030f, -0.006689f - }, - { - -0.016943f, -0.090729f, +0.085556f, +0.053957f, -0.002613f, +0.022006f, +0.000939f, -0.053566f, +0.028333f, -0.011225f, - +0.001241f, +0.001394f, +0.002168f, +0.009110f, +0.003073f, +0.009243f, +0.032560f, +0.065612f, +0.002608f, +0.022439f, - +0.028054f, +0.008371f, -0.037395f, +0.012039f, -0.025103f, +0.012142f, +0.012665f, +0.003970f, +0.010219f, -0.010216f, - -0.013918f, +0.013853f, +0.005000f, -0.013590f, +0.004497f, -0.001230f, +0.003010f, -0.009149f, +0.005757f, -0.009027f, - +0.010926f, +0.003460f, +0.016835f, +0.014114f, +0.007280f, -0.002770f, -0.022847f, +0.001379f, -0.003756f, -0.004804f, - +0.007888f, +0.000071f, +0.002686f, -0.002363f, +0.013375f, -0.000237f, +0.000169f, +0.014090f, -0.006365f, -0.006978f, - -0.003995f, +0.001151f, +0.004938f, +0.006669f, +0.004054f, -0.001068f, +0.000367f, -0.000199f, +0.001694f, -0.002071f, - +0.003131f, +0.000020f, +0.003951f, -0.004189f, -0.003484f, -0.003453f, -0.005239f, +0.005992f, +0.000068f, -0.002283f, - +0.002626f, +0.003949f, -0.004534f, +0.001314f, +0.003123f, +0.002455f, -0.007052f, -0.003418f, +0.000452f, +0.001266f, - -0.002274f, -0.002218f, +0.005999f, +0.001854f, -0.002535f, +0.000091f - }, - { - +0.000033f, +0.102045f, +0.043645f, +0.002350f, -0.028552f, -0.028841f, -0.048966f, +0.037118f, -0.009384f, +0.003191f, - +0.044805f, +0.012357f, +0.017346f, -0.026996f, -0.015394f, -0.047681f, -0.020342f, -0.012786f, +0.004794f, -0.005811f, - -0.027102f, -0.020956f, -0.011366f, +0.031116f, +0.013367f, +0.002588f, +0.018276f, +0.002396f, -0.002242f, +0.017254f, - +0.011884f, +0.009059f, -0.014139f, +0.003768f, +0.000473f, -0.005948f, +0.003630f, -0.031937f, -0.013405f, +0.004003f, - -0.000864f, -0.025657f, +0.023404f, -0.003349f, -0.015876f, +0.012644f, -0.004422f, +0.001269f, -0.010534f, +0.002678f, - +0.006516f, -0.014638f, +0.006894f, -0.002403f, +0.006401f, +0.007271f, -0.008773f, +0.007737f, +0.009868f, -0.008148f, - -0.000620f, +0.002854f, -0.007012f, +0.003549f, +0.000967f, -0.009368f, +0.004110f, +0.000346f, -0.000081f, +0.005454f, - -0.001003f, +0.000914f, +0.010178f, +0.002794f, -0.004786f, +0.000250f, +0.006214f, +0.002368f, +0.006170f, -0.001266f, - +0.004588f, -0.003319f, +0.000325f, +0.002422f, +0.004334f, +0.000189f, -0.000962f, +0.006950f, +0.003820f, +0.000201f, - +0.002909f, -0.000344f, +0.000879f, -0.000758f, +0.000546f, -0.005139f - }, - { - -0.024284f, -0.223206f, +0.037317f, +0.063289f, +0.052465f, +0.041019f, +0.008409f, +0.002862f, -0.043321f, -0.004690f, - -0.064343f, +0.001365f, +0.002791f, -0.043344f, +0.015558f, -0.010789f, +0.009228f, +0.000521f, -0.009767f, -0.005770f, - +0.016872f, +0.020933f, -0.005034f, -0.013734f, -0.025611f, +0.006051f, +0.013147f, +0.020925f, +0.001304f, -0.030472f, - -0.024297f, -0.008688f, -0.009350f, +0.019448f, +0.009052f, -0.001193f, +0.018630f, -0.002733f, +0.010437f, -0.002388f, - -0.020802f, -0.002194f, +0.009713f, +0.000938f, +0.010130f, +0.005118f, -0.007277f, +0.014773f, -0.008043f, -0.014581f, - -0.012544f, -0.006333f, +0.012915f, +0.007133f, -0.010056f, +0.015554f, -0.009099f, +0.016380f, -0.000907f, +0.005543f, - -0.006839f, -0.000726f, -0.004014f, +0.000180f, -0.000753f, -0.003436f, +0.000198f, +0.002889f, +0.009349f, +0.008555f, - -0.006448f, +0.000573f, -0.002764f, -0.001837f, -0.001285f, -0.006676f, -0.006083f, +0.005393f, -0.001769f, +0.004199f, - -0.005701f, -0.003992f, -0.008274f, -0.006427f, +0.002390f, +0.002250f, -0.001011f, +0.003754f, +0.000952f, +0.001146f, - -0.000172f, +0.004184f, +0.004210f, +0.003103f, +0.001616f, -0.003751f - }, - { - -0.002932f, +0.052919f, +0.047219f, -0.000490f, -0.024037f, -0.034001f, -0.071996f, +0.041005f, -0.025998f, -0.030701f, - +0.013798f, -0.036311f, +0.025725f, +0.021322f, +0.024050f, -0.005789f, +0.039130f, -0.012558f, -0.027915f, -0.034758f, - +0.002694f, -0.024811f, +0.036765f, +0.026944f, -0.020713f, +0.010310f, +0.002021f, -0.028153f, +0.012715f, +0.007126f, - -0.018811f, +0.011754f, +0.005309f, -0.006874f, -0.028563f, +0.022301f, -0.008155f, -0.006463f, -0.007457f, -0.002199f, - -0.001840f, -0.003810f, +0.012105f, +0.004819f, +0.015545f, +0.009521f, +0.003408f, +0.009476f, -0.004297f, -0.007252f, - +0.006604f, +0.008925f, -0.005192f, +0.001975f, +0.003181f, -0.007491f, -0.010705f, -0.002736f, -0.005499f, -0.007492f, - -0.002105f, -0.005298f, +0.008634f, +0.006697f, +0.004462f, -0.008720f, -0.009375f, +0.003176f, -0.002495f, +0.007735f, - +0.007820f, +0.001562f, +0.000515f, -0.000296f, +0.003658f, +0.001739f, -0.001186f, +0.002915f, +0.002585f, +0.003299f, - +0.001596f, +0.001295f, +0.000364f, -0.001972f, +0.000521f, +0.000687f, -0.004676f, -0.000272f, +0.002218f, -0.001851f, - -0.002763f, -0.002747f, +0.000607f, +0.002785f, +0.001474f, -0.004432f - }, - { - -0.023631f, -0.213962f, +0.027535f, +0.022393f, +0.051924f, +0.006589f, -0.012179f, +0.002871f, -0.021780f, -0.000197f, - -0.029364f, +0.008522f, -0.040051f, +0.018047f, +0.005705f, +0.000597f, -0.022049f, -0.034058f, -0.032891f, -0.002640f, - +0.022029f, +0.027775f, -0.030585f, -0.004056f, -0.027018f, -0.019276f, +0.036675f, +0.015325f, -0.012532f, -0.005416f, - -0.012346f, +0.021477f, +0.005231f, -0.007126f, -0.016103f, +0.025494f, +0.006598f, +0.010278f, -0.005712f, +0.004479f, - -0.002062f, +0.006364f, -0.018989f, -0.013151f, -0.005207f, -0.004013f, -0.000146f, -0.001291f, -0.004322f, -0.005807f, - +0.009029f, +0.002328f, -0.007284f, +0.004808f, -0.003689f, -0.000337f, -0.015451f, -0.004066f, +0.002110f, +0.009638f, - -0.001699f, +0.004829f, +0.006107f, +0.001273f, -0.007343f, -0.012112f, +0.002609f, -0.004282f, -0.005854f, -0.009464f, - +0.006030f, -0.007585f, +0.004678f, -0.002966f, -0.002705f, -0.000390f, -0.003388f, -0.002970f, +0.000247f, -0.006616f, - -0.000990f, -0.004819f, -0.002281f, -0.004609f, +0.001736f, +0.003352f, +0.003851f, +0.000245f, -0.000413f, -0.003137f, - +0.000224f, +0.002396f, +0.000992f, -0.004449f, +0.002995f, -0.002844f - } - }, - { - { - +0.004321f, +0.053914f, +0.070227f, -0.043621f, +0.040426f, +0.006642f, +0.017140f, -0.000059f, -0.004976f, -0.000420f, - +0.019670f, -0.021323f, +0.031517f, +0.029682f, -0.024665f, +0.001095f, -0.007585f, +0.002040f, +0.012807f, -0.018304f, - -0.009669f, +0.025349f, +0.043196f, -0.017436f, -0.009303f, -0.017048f, -0.004253f, +0.007567f, +0.013073f, -0.002208f, - -0.007856f, -0.021014f, -0.014202f, +0.011682f, -0.003206f, -0.010536f, -0.005873f, -0.012495f, -0.004106f, -0.017846f, - -0.001869f, +0.012476f, -0.003338f, +0.000898f, -0.003351f, -0.007277f, +0.008533f, +0.003814f, +0.013344f, +0.000013f, - +0.000845f, -0.001932f, +0.005752f, +0.000488f, -0.001516f, -0.002337f, -0.007410f, +0.001861f, -0.001140f, +0.004946f, - +0.001062f, -0.009567f, -0.000507f, +0.003416f, -0.006419f, -0.003406f, +0.000819f, -0.001973f, -0.001069f, -0.006550f, - +0.007555f, +0.006583f, -0.000291f, +0.000146f, +0.003243f, -0.000609f, -0.005467f, -0.004913f, +0.000784f, -0.002886f, - -0.000635f, -0.000039f, -0.003224f, -0.000216f, +0.000205f, -0.003937f, -0.001853f, +0.002322f, +0.001139f, +0.002995f, - +0.001389f, -0.000351f, -0.000200f, -0.002210f, -0.000836f, +0.001040f - }, - { - +0.001404f, +0.202612f, -0.042440f, +0.042075f, +0.040288f, +0.012624f, -0.009198f, -0.001598f, +0.012517f, +0.009249f, - -0.004603f, -0.001052f, -0.002570f, +0.002424f, +0.032080f, -0.019415f, -0.019799f, -0.003964f, -0.002234f, -0.004261f, - -0.027784f, -0.005372f, -0.005935f, -0.010948f, +0.022820f, -0.002299f, +0.001537f, +0.003022f, -0.014020f, +0.008343f, - +0.015405f, +0.003231f, +0.008117f, +0.012929f, +0.007872f, +0.009931f, -0.006384f, +0.001512f, -0.021693f, -0.012426f, - +0.005484f, -0.006434f, +0.001723f, +0.001663f, +0.005521f, +0.002866f, +0.000973f, +0.002400f, +0.003538f, -0.003656f, - +0.006753f, -0.008159f, -0.001383f, +0.001717f, -0.000288f, +0.005608f, -0.005822f, -0.001478f, -0.003612f, -0.004677f, - -0.003276f, +0.003143f, -0.006166f, +0.011693f, +0.005600f, -0.002922f, +0.001373f, +0.000051f, -0.008068f, +0.005697f, - +0.000673f, +0.005470f, -0.001595f, +0.002558f, +0.001276f, -0.001123f, -0.002280f, -0.000423f, +0.002044f, -0.002254f, - +0.005768f, -0.002566f, -0.000582f, -0.004826f, +0.005662f, +0.003137f, -0.000383f, -0.001742f, -0.001549f, +0.002319f, - -0.001765f, +0.002823f, +0.000973f, +0.001441f, -0.002637f, -0.001701f - }, - { - -0.003738f, +0.192876f, +0.032853f, -0.010317f, +0.085002f, +0.010323f, -0.010316f, -0.014287f, +0.009075f, +0.018472f, - -0.004150f, -0.020018f, -0.008771f, -0.003165f, +0.006240f, +0.001989f, +0.017927f, +0.011792f, +0.003424f, +0.004040f, - +0.010452f, -0.016447f, +0.000277f, -0.014527f, +0.003329f, -0.000882f, -0.028772f, -0.033206f, -0.005893f, +0.020099f, - +0.001834f, -0.001162f, -0.001330f, +0.010529f, +0.015824f, -0.000676f, +0.011731f, +0.013850f, +0.014365f, -0.003119f, - -0.007439f, +0.007710f, +0.000391f, -0.000930f, -0.009413f, -0.005542f, +0.006061f, -0.005673f, -0.005941f, +0.004577f, - +0.002858f, +0.003853f, -0.006141f, +0.004428f, -0.002424f, -0.000921f, +0.004220f, +0.005460f, +0.010321f, -0.007394f, - +0.004027f, +0.005359f, +0.000558f, -0.003956f, +0.004071f, -0.003201f, -0.004122f, +0.003092f, +0.000218f, +0.000760f, - -0.000107f, -0.001355f, -0.001785f, +0.000397f, -0.003019f, -0.000860f, -0.001309f, +0.002932f, +0.011788f, +0.003408f, - +0.002505f, +0.003143f, +0.001253f, +0.000025f, -0.005133f, -0.001552f, -0.003305f, -0.001395f, -0.001231f, +0.003274f, - +0.001087f, -0.000923f, -0.003768f, -0.000567f, +0.000649f, +0.001732f - }, - { - -0.000732f, +0.077533f, +0.019690f, -0.027300f, -0.018640f, -0.003579f, +0.002577f, -0.001561f, -0.003751f, +0.035189f, - +0.011266f, -0.010551f, +0.001022f, -0.001342f, -0.020076f, +0.019502f, +0.020950f, +0.018138f, -0.044158f, -0.007474f, - +0.007178f, -0.013682f, +0.015086f, +0.007612f, +0.017129f, -0.003447f, -0.016675f, -0.012533f, -0.010560f, -0.017076f, - +0.011157f, -0.000261f, -0.010697f, +0.004924f, -0.017230f, -0.003620f, -0.011755f, +0.005374f, +0.002166f, +0.009919f, - +0.007996f, -0.003070f, +0.001867f, +0.002955f, -0.001957f, -0.002559f, -0.014315f, +0.007213f, -0.001207f, +0.005798f, - +0.006749f, -0.018098f, +0.002680f, +0.008346f, -0.005970f, +0.003758f, -0.003791f, -0.002991f, -0.007425f, +0.007453f, - +0.004194f, +0.000966f, +0.004115f, +0.005305f, +0.011083f, -0.005834f, -0.001052f, -0.005206f, -0.006001f, +0.003852f, - +0.007096f, -0.001618f, +0.002814f, +0.002228f, +0.003802f, -0.002883f, +0.000290f, +0.000830f, +0.002850f, -0.001793f, - -0.001194f, +0.000345f, +0.002560f, -0.000486f, -0.002107f, +0.001644f, +0.000938f, -0.000070f, +0.001878f, +0.001000f, - +0.000796f, -0.003144f, +0.000896f, -0.000250f, +0.000683f, +0.000880f - }, - { - +0.024130f, -0.114797f, -0.070598f, +0.081480f, +0.037148f, +0.026473f, -0.021092f, +0.012851f, -0.009915f, -0.003073f, - -0.018367f, -0.019361f, +0.008026f, -0.006310f, +0.001784f, -0.023030f, +0.044276f, -0.003089f, -0.020861f, -0.022160f, - -0.031876f, +0.007702f, +0.016020f, +0.002359f, +0.014321f, -0.006915f, +0.015495f, +0.011918f, +0.011604f, +0.008844f, - -0.003610f, -0.007191f, +0.002918f, +0.008963f, -0.003311f, +0.011779f, -0.002543f, +0.003964f, +0.003999f, +0.013222f, - +0.000658f, -0.002984f, -0.005895f, -0.000374f, +0.002951f, -0.008446f, +0.003554f, +0.008426f, +0.009754f, -0.004118f, - -0.003316f, -0.004508f, +0.007181f, +0.000474f, -0.006587f, +0.006844f, -0.001511f, -0.005132f, -0.003987f, +0.004498f, - -0.000381f, -0.000929f, +0.001587f, -0.001410f, -0.000199f, +0.003069f, +0.007892f, -0.005159f, -0.004704f, -0.003745f, - -0.005388f, -0.003770f, +0.007413f, -0.001964f, +0.009141f, +0.001140f, -0.002234f, +0.006816f, +0.006514f, +0.003038f, - -0.000697f, +0.002548f, -0.002241f, +0.002036f, -0.003800f, -0.001234f, +0.004082f, -0.000567f, +0.004820f, +0.000509f, - +0.000146f, +0.001813f, +0.002022f, +0.000415f, -0.001923f, +0.001246f - }, - { - +0.005397f, -0.041378f, +0.104895f, -0.030359f, -0.035936f, +0.001265f, +0.001423f, +0.001481f, -0.002751f, +0.008702f, - +0.004326f, -0.015264f, -0.010821f, +0.002652f, -0.032210f, -0.004588f, +0.011177f, -0.020715f, -0.007297f, -0.000396f, - -0.012409f, -0.009549f, +0.000000f, -0.035048f, +0.021117f, -0.014946f, +0.001528f, -0.003568f, +0.006234f, -0.008428f, - -0.018761f, -0.017378f, -0.000225f, +0.003401f, -0.016052f, -0.002899f, -0.004890f, -0.012130f, +0.003582f, +0.004717f, - +0.006950f, -0.014722f, +0.011250f, -0.004198f, +0.003078f, +0.011121f, -0.005651f, -0.007370f, -0.003614f, +0.013448f, - -0.000961f, +0.010947f, -0.009922f, +0.003742f, +0.006057f, +0.007461f, -0.001792f, -0.004469f, -0.012353f, +0.003948f, - +0.000361f, -0.007041f, -0.005357f, -0.000495f, -0.007863f, +0.002966f, +0.003114f, +0.011557f, -0.002112f, -0.009488f, - +0.001481f, +0.000333f, -0.006428f, -0.004755f, -0.008993f, +0.003119f, +0.001767f, -0.003300f, -0.002591f, +0.000337f, - +0.002670f, -0.006812f, +0.000204f, +0.008286f, -0.000813f, +0.002605f, -0.003225f, +0.002017f, +0.000352f, +0.001225f, - +0.001804f, -0.003582f, +0.001999f, -0.006066f, +0.001079f, +0.002094f - }, - { - +0.026756f, -0.150037f, -0.088445f, +0.134905f, +0.044992f, +0.009202f, +0.004801f, -0.003703f, +0.012814f, -0.019796f, - -0.012653f, +0.026007f, +0.006770f, -0.001287f, +0.027595f, -0.017305f, -0.026466f, -0.006647f, -0.015578f, -0.009289f, - -0.009770f, -0.019482f, -0.015026f, +0.000224f, -0.004476f, +0.003594f, -0.000272f, +0.002927f, +0.002999f, +0.013749f, - -0.001428f, -0.008273f, -0.002814f, +0.013355f, +0.005024f, -0.015830f, +0.004083f, -0.014448f, +0.009483f, +0.002492f, - +0.005243f, -0.005318f, +0.000354f, -0.003664f, -0.003631f, -0.005962f, -0.003470f, +0.005552f, +0.003536f, +0.007630f, - -0.018407f, -0.002872f, +0.006794f, -0.003804f, +0.001791f, +0.005345f, -0.000423f, +0.012406f, +0.013029f, +0.000032f, - +0.004580f, -0.005694f, -0.001438f, +0.005730f, -0.003617f, -0.005708f, +0.000535f, +0.002215f, -0.000814f, -0.004637f, - +0.004577f, +0.001222f, -0.000830f, +0.006053f, +0.002644f, -0.006597f, -0.000004f, +0.003940f, +0.000390f, -0.001516f, - +0.003165f, -0.002668f, -0.000628f, -0.000762f, -0.002055f, -0.000856f, -0.001133f, +0.003348f, -0.003888f, +0.000508f, - +0.001525f, +0.000186f, +0.002632f, -0.002987f, +0.002142f, -0.000581f - }, - { - +0.004805f, -0.075133f, +0.095286f, -0.023720f, -0.034003f, -0.014303f, +0.009346f, +0.011973f, +0.005667f, +0.006888f, - +0.007557f, +0.008500f, -0.028944f, +0.030826f, +0.000145f, +0.008449f, +0.015027f, +0.016640f, -0.010198f, -0.013519f, - -0.007359f, -0.009585f, -0.005426f, +0.014209f, -0.009076f, -0.010839f, +0.017982f, -0.017595f, +0.025975f, -0.021533f, - +0.032545f, -0.000272f, -0.026021f, +0.001272f, -0.004301f, -0.020776f, +0.011566f, -0.009135f, +0.002110f, +0.001859f, - +0.007556f, -0.003226f, -0.001812f, -0.007344f, +0.002927f, +0.004491f, -0.005740f, +0.002137f, -0.009661f, +0.004341f, - +0.003702f, -0.003229f, +0.010267f, +0.007147f, +0.007066f, +0.003526f, -0.002295f, -0.007314f, +0.001675f, -0.008600f, - -0.000579f, -0.007268f, +0.001743f, -0.003111f, +0.009945f, -0.010111f, +0.000556f, -0.001200f, +0.001869f, +0.005317f, - +0.006611f, +0.017747f, +0.001903f, +0.000197f, -0.001245f, -0.000041f, -0.000570f, -0.001455f, +0.001764f, +0.002215f, - -0.000622f, +0.000634f, +0.000200f, -0.005149f, -0.001290f, -0.002031f, -0.000311f, +0.001363f, -0.003725f, -0.003192f, - +0.001199f, +0.001746f, -0.000946f, +0.002252f, +0.002949f, -0.001050f - }, - { - +0.026323f, -0.132667f, -0.079924f, +0.146226f, +0.060814f, +0.018220f, -0.013642f, +0.008330f, -0.003740f, +0.031773f, - +0.014619f, -0.012688f, -0.008770f, -0.007333f, -0.013782f, -0.037298f, +0.025655f, -0.009435f, +0.000293f, +0.021691f, - -0.014192f, -0.023026f, +0.001271f, -0.029793f, +0.001736f, -0.004256f, +0.005236f, -0.004142f, -0.004361f, +0.001894f, - -0.011909f, -0.011089f, +0.008801f, +0.001918f, +0.001613f, -0.010844f, +0.002200f, -0.000318f, +0.006861f, +0.002337f, - -0.003029f, -0.016362f, +0.004510f, +0.001324f, +0.009695f, +0.005650f, +0.003024f, +0.013916f, -0.021660f, +0.000440f, - -0.002577f, +0.002187f, +0.005373f, -0.006808f, -0.003001f, +0.001974f, -0.007142f, -0.001394f, -0.003693f, +0.009230f, - -0.000148f, -0.003242f, +0.008835f, +0.007323f, +0.002040f, +0.002694f, +0.002108f, +0.003683f, -0.005682f, -0.003422f, - +0.003023f, -0.000800f, -0.005954f, +0.004664f, +0.002240f, -0.002295f, -0.006517f, -0.004769f, -0.005127f, +0.004631f, - -0.002705f, +0.000619f, -0.003447f, +0.002990f, -0.000189f, +0.000523f, +0.000399f, +0.002833f, -0.002152f, +0.003652f, - +0.000245f, -0.004143f, +0.000479f, +0.000881f, +0.004260f, -0.002754f - }, - { - -0.001718f, +0.134150f, -0.008816f, +0.013269f, -0.001244f, -0.041296f, +0.002181f, +0.031839f, +0.015639f, +0.000134f, - +0.004179f, -0.009358f, -0.005626f, +0.030049f, -0.030780f, -0.018819f, -0.019812f, -0.003249f, +0.037288f, +0.000976f, - -0.001154f, -0.005032f, +0.001591f, -0.005541f, +0.009526f, -0.014606f, +0.005417f, -0.019642f, +0.016185f, -0.005901f, - +0.024996f, +0.002813f, +0.009207f, -0.003164f, -0.008630f, +0.018128f, +0.020157f, +0.011682f, -0.008626f, +0.002625f, - +0.008633f, -0.008304f, -0.004122f, -0.017536f, -0.020417f, +0.006680f, -0.005452f, -0.009377f, +0.004829f, -0.007608f, - -0.001925f, +0.006763f, -0.011599f, +0.001900f, +0.022401f, +0.008668f, -0.005743f, +0.000429f, -0.005111f, -0.005363f, - -0.008324f, -0.004519f, +0.005762f, -0.005223f, -0.012381f, -0.002584f, +0.006545f, +0.002682f, -0.000485f, +0.006592f, - -0.008175f, -0.001470f, -0.002334f, +0.002766f, +0.003623f, -0.006995f, -0.000793f, +0.000495f, -0.002188f, -0.000923f, - -0.003996f, -0.004496f, +0.001341f, -0.000238f, -0.003911f, -0.004030f, -0.001553f, +0.003343f, +0.003692f, +0.001317f, - +0.001841f, -0.003450f, -0.000517f, -0.002465f, -0.001486f, -0.003387f - }, - { - +0.012721f, -0.008627f, -0.003767f, +0.042753f, -0.011710f, -0.019395f, +0.088755f, -0.035649f, -0.016319f, -0.033758f, - +0.028400f, +0.001539f, -0.002913f, +0.020676f, +0.007217f, +0.000252f, +0.027777f, +0.033256f, +0.045715f, +0.013819f, - +0.025088f, -0.009499f, -0.010396f, -0.003629f, -0.011775f, -0.001053f, +0.007717f, +0.008052f, +0.021379f, -0.013792f, - -0.010606f, +0.015825f, +0.004397f, -0.003720f, -0.003268f, +0.004786f, -0.014910f, +0.006112f, +0.009035f, -0.011433f, - +0.011781f, +0.011193f, +0.005875f, +0.028115f, -0.000705f, -0.003338f, -0.013553f, -0.010364f, +0.003403f, +0.006547f, - -0.008289f, -0.001686f, -0.002782f, +0.015208f, +0.006001f, -0.003247f, +0.002767f, +0.005414f, -0.000592f, -0.012017f, - -0.005447f, -0.000864f, +0.013500f, -0.003662f, +0.002212f, +0.004420f, -0.000090f, -0.001816f, +0.005006f, -0.003789f, - -0.001755f, +0.005703f, -0.003384f, -0.002232f, -0.002090f, -0.007192f, -0.000337f, +0.004027f, -0.003301f, +0.003489f, - -0.000185f, -0.000983f, +0.002565f, -0.004770f, +0.006099f, -0.003356f, -0.000879f, -0.003491f, +0.000570f, +0.002099f, - -0.002555f, +0.003552f, -0.001031f, +0.002759f, -0.002965f, +0.000732f - }, - { - -0.000037f, +0.111740f, +0.013164f, +0.000290f, -0.009778f, -0.013178f, -0.034187f, +0.011712f, -0.000027f, +0.003586f, - +0.015235f, +0.028557f, -0.017692f, -0.008294f, +0.013152f, -0.027725f, -0.050000f, -0.007112f, +0.000992f, -0.003848f, - -0.032505f, -0.019660f, -0.009361f, +0.038317f, +0.014370f, +0.008867f, +0.002026f, -0.018809f, +0.027116f, +0.017156f, - +0.029046f, -0.001004f, -0.002208f, -0.024314f, -0.004183f, +0.006591f, -0.008341f, -0.036756f, +0.001451f, +0.000955f, - -0.005635f, -0.018408f, -0.001204f, +0.005772f, -0.007373f, +0.015373f, -0.007035f, -0.001714f, -0.003510f, -0.008495f, - +0.003976f, -0.002719f, +0.001481f, -0.003303f, +0.006744f, +0.007155f, -0.002937f, +0.006129f, +0.001423f, +0.004594f, - -0.012148f, +0.004510f, +0.000519f, -0.000017f, -0.000603f, -0.009500f, -0.003429f, +0.003007f, +0.001968f, -0.002434f, - +0.001893f, +0.003921f, +0.009184f, -0.003214f, +0.000120f, +0.000076f, +0.005644f, +0.004345f, -0.000154f, +0.005242f, - +0.002871f, -0.004191f, +0.000371f, +0.004037f, +0.000378f, +0.002473f, +0.002877f, +0.002602f, +0.003593f, -0.002462f, - +0.001944f, +0.000802f, +0.002274f, -0.001753f, -0.000064f, -0.003456f - }, - { - +0.014898f, -0.235522f, -0.003958f, +0.050408f, +0.041201f, +0.008810f, +0.068310f, -0.024066f, -0.010810f, -0.028775f, - -0.059863f, +0.021873f, -0.005468f, -0.006487f, -0.003824f, -0.018420f, +0.014775f, -0.016760f, -0.001273f, -0.008338f, - +0.021560f, +0.014015f, +0.021056f, -0.023360f, -0.017611f, -0.003652f, +0.009718f, +0.026735f, -0.015173f, -0.017100f, - -0.023117f, +0.010874f, -0.014738f, +0.007141f, +0.006680f, -0.009307f, +0.024614f, -0.003563f, +0.008304f, -0.005208f, - -0.008753f, -0.002542f, +0.003595f, +0.007942f, +0.005775f, +0.002137f, -0.006934f, +0.013885f, -0.012576f, -0.010867f, - -0.002311f, -0.008668f, +0.014730f, -0.000988f, +0.001383f, +0.003736f, -0.004241f, +0.010918f, +0.003796f, -0.004520f, - -0.000989f, -0.003714f, +0.002527f, -0.001951f, -0.004186f, +0.005296f, -0.000588f, +0.006161f, -0.001768f, +0.001399f, - +0.002288f, -0.006056f, -0.000127f, -0.001377f, -0.005459f, -0.000542f, -0.010269f, +0.004704f, -0.003646f, +0.001985f, - +0.000269f, -0.008089f, -0.004638f, -0.007263f, -0.000054f, +0.003325f, +0.004343f, -0.000844f, +0.005318f, -0.000251f, - -0.000022f, +0.004240f, +0.000453f, +0.003439f, -0.000514f, -0.002699f - }, - { - -0.000446f, +0.120440f, -0.014049f, -0.002632f, -0.013834f, -0.036474f, -0.048834f, +0.014829f, -0.034502f, -0.004332f, - +0.003828f, -0.013295f, +0.014497f, -0.004259f, +0.014119f, +0.046080f, +0.004778f, -0.017647f, -0.019912f, -0.020270f, - -0.034335f, +0.016998f, -0.019424f, +0.046940f, -0.000350f, -0.007187f, -0.002976f, -0.022017f, +0.011991f, +0.026022f, - -0.010042f, -0.011777f, +0.009236f, -0.026214f, -0.008509f, +0.010801f, -0.014019f, +0.007363f, -0.008644f, -0.011304f, - -0.004800f, +0.004475f, +0.006550f, +0.014899f, +0.018823f, +0.009798f, -0.006354f, +0.003810f, -0.001097f, -0.003984f, - +0.010197f, +0.002791f, +0.001087f, +0.005007f, -0.001127f, -0.008972f, -0.005937f, -0.004143f, -0.007425f, -0.006322f, - +0.005967f, -0.010333f, +0.007644f, +0.005781f, +0.000965f, -0.006443f, -0.007022f, +0.005973f, -0.003910f, +0.007771f, - +0.009589f, -0.002729f, +0.000704f, +0.007161f, -0.002664f, -0.001023f, +0.002193f, +0.002858f, +0.002868f, +0.000323f, - -0.003983f, +0.006578f, +0.000289f, -0.003605f, +0.000965f, +0.003756f, -0.003504f, -0.002904f, +0.002559f, -0.003556f, - -0.002010f, -0.001951f, -0.000093f, +0.002263f, +0.000390f, -0.001459f - }, - { - +0.015533f, -0.217392f, -0.029264f, +0.039516f, -0.005477f, -0.011817f, +0.065533f, +0.001464f, -0.015145f, -0.023538f, - -0.028276f, -0.006198f, -0.032400f, +0.013709f, -0.024705f, +0.029803f, -0.005442f, -0.055178f, -0.026604f, +0.026836f, - +0.012067f, -0.001128f, -0.007017f, -0.017517f, -0.029885f, +0.000470f, +0.028084f, +0.014413f, -0.013600f, -0.019257f, - -0.002030f, +0.022797f, +0.022735f, -0.010051f, -0.003418f, +0.002729f, +0.015448f, -0.001654f, +0.000443f, +0.001639f, - -0.001268f, -0.009343f, +0.000842f, -0.023260f, -0.011952f, +0.013001f, -0.003874f, -0.012571f, -0.005670f, -0.006264f, - +0.007368f, +0.002857f, -0.005564f, +0.006202f, -0.000236f, -0.006623f, -0.012341f, -0.008381f, +0.008210f, +0.013582f, - -0.008578f, +0.009904f, +0.005580f, -0.001637f, -0.001120f, -0.014548f, -0.002287f, +0.001782f, -0.008710f, -0.003526f, - -0.005416f, +0.000984f, +0.001080f, -0.007568f, +0.000957f, -0.000622f, +0.000077f, -0.002593f, +0.001455f, -0.007941f, - -0.004242f, -0.000045f, -0.002966f, -0.003038f, -0.002868f, +0.005184f, +0.003547f, -0.000916f, +0.002398f, -0.003022f, - +0.000903f, +0.001653f, -0.000354f, -0.002814f, +0.000395f, -0.002002f - } - }, - { - { - -0.003573f, -0.081733f, -0.033613f, -0.048322f, +0.047765f, -0.011505f, -0.004872f, -0.006668f, +0.009166f, +0.008773f, - +0.017553f, -0.022748f, +0.011597f, -0.007788f, -0.044793f, -0.002946f, -0.041352f, -0.015513f, +0.008628f, -0.005137f, - -0.003417f, -0.004172f, +0.011452f, -0.004734f, +0.009196f, -0.001917f, -0.001851f, +0.001243f, +0.000542f, +0.011452f, - +0.015705f, -0.017771f, -0.003296f, +0.018516f, -0.000468f, -0.000935f, -0.004132f, +0.000067f, -0.000902f, -0.016444f, - +0.000638f, +0.006491f, -0.000600f, +0.004425f, +0.000977f, +0.004082f, +0.004180f, -0.023381f, +0.006404f, +0.002569f, - -0.008485f, -0.011973f, +0.001698f, -0.010077f, -0.003704f, +0.010446f, -0.001620f, -0.001600f, -0.001360f, -0.007403f, - -0.001193f, -0.002957f, -0.000488f, +0.003924f, -0.006726f, -0.001584f, +0.006027f, +0.006144f, +0.007628f, -0.001957f, - +0.001880f, +0.004030f, +0.002932f, -0.000348f, +0.000102f, -0.001361f, +0.003151f, -0.001057f, +0.000222f, -0.004455f, - -0.000721f, +0.002124f, +0.001844f, +0.004723f, +0.004218f, +0.000486f, +0.002231f, +0.002131f, -0.000116f, +0.000960f, - +0.001022f, +0.000533f, +0.003638f, +0.001681f, -0.000675f, +0.000127f - }, - { - +0.001325f, +0.258823f, -0.023265f, -0.066995f, -0.050062f, +0.001583f, +0.007162f, +0.011001f, +0.017679f, +0.013444f, - -0.000383f, +0.005400f, -0.007168f, +0.002107f, +0.030082f, -0.021303f, -0.014787f, +0.009969f, -0.010270f, -0.008774f, - -0.008140f, +0.008949f, +0.013683f, +0.001589f, +0.006284f, -0.006116f, +0.001496f, -0.001804f, -0.007914f, +0.006815f, - -0.004879f, -0.001371f, +0.006140f, -0.000221f, -0.009389f, -0.001773f, -0.003034f, +0.009226f, -0.001197f, +0.002465f, - +0.006257f, -0.003219f, -0.000156f, +0.005315f, -0.004608f, -0.007229f, -0.007910f, -0.007853f, +0.003950f, -0.004033f, - +0.002117f, -0.000781f, +0.000469f, -0.001346f, -0.000409f, -0.000068f, -0.006826f, -0.004326f, +0.000202f, -0.004211f, - -0.004835f, +0.007414f, +0.000440f, +0.009932f, +0.000985f, -0.006046f, -0.004355f, -0.001277f, -0.004188f, +0.008457f, - +0.000311f, +0.002304f, -0.007723f, -0.001404f, -0.000116f, -0.004000f, -0.005926f, -0.003495f, -0.000791f, -0.001529f, - +0.007104f, -0.003328f, +0.000034f, -0.006690f, +0.005657f, +0.002708f, +0.000115f, +0.001984f, +0.000280f, +0.000439f, - -0.004128f, +0.001724f, +0.000421f, +0.001923f, -0.001069f, -0.000385f - }, - { - +0.001785f, +0.108612f, -0.081131f, -0.111231f, +0.011833f, +0.001847f, +0.000748f, -0.001536f, +0.010987f, -0.000600f, - +0.003293f, -0.003315f, -0.010173f, -0.010070f, +0.002274f, -0.006817f, -0.001416f, +0.003580f, -0.000532f, -0.006772f, - +0.005847f, -0.022992f, -0.001714f, -0.012367f, +0.017074f, +0.012387f, -0.003752f, -0.014853f, -0.013834f, +0.016053f, - -0.006804f, -0.005026f, +0.004464f, +0.001606f, -0.002830f, -0.013943f, -0.004392f, +0.007239f, +0.006226f, -0.003479f, - +0.007111f, +0.009779f, -0.003280f, -0.001748f, -0.004537f, +0.003237f, +0.012180f, +0.001287f, -0.000203f, +0.010777f, - +0.006613f, +0.005059f, +0.005097f, +0.013998f, +0.007323f, +0.000385f, -0.004334f, -0.001898f, +0.008347f, -0.009771f, - -0.000800f, +0.000770f, +0.001646f, -0.000206f, +0.003864f, -0.000962f, +0.000807f, +0.005538f, -0.003132f, +0.004340f, - +0.001570f, +0.001393f, +0.000773f, +0.000171f, -0.000552f, +0.003152f, -0.001175f, +0.004212f, +0.008854f, -0.002093f, - -0.000404f, +0.001185f, -0.002581f, -0.001292f, -0.003088f, +0.001628f, +0.000077f, +0.001595f, +0.000798f, +0.001512f, - +0.002448f, +0.002498f, -0.000129f, +0.000235f, -0.001331f, +0.002435f - }, - { - -0.001320f, +0.026169f, -0.006234f, -0.013365f, +0.007838f, -0.005023f, -0.004119f, -0.001316f, -0.015499f, -0.006531f, - -0.007196f, +0.012125f, +0.008794f, -0.007501f, -0.004983f, -0.001045f, -0.008534f, +0.031487f, -0.033270f, -0.003853f, - +0.005365f, -0.022586f, +0.000962f, -0.011395f, -0.008865f, -0.006712f, +0.011636f, +0.006953f, -0.009030f, -0.017142f, - +0.001029f, +0.009818f, -0.008089f, +0.008143f, -0.008586f, +0.002942f, -0.004568f, +0.005127f, -0.011579f, +0.011939f, - +0.010797f, -0.012906f, +0.005816f, +0.003487f, -0.000342f, +0.000935f, -0.011898f, +0.004502f, -0.000313f, +0.012895f, - +0.010946f, -0.013571f, +0.007833f, +0.007803f, -0.011327f, +0.000183f, -0.004010f, -0.001010f, -0.008922f, +0.005820f, - +0.004211f, +0.001779f, +0.001608f, -0.000448f, +0.001318f, -0.005604f, +0.004396f, -0.005379f, -0.002523f, -0.000674f, - +0.000661f, -0.000524f, +0.002889f, +0.000787f, +0.002432f, -0.006242f, -0.001116f, +0.000787f, +0.004346f, -0.001130f, - -0.001672f, +0.000179f, +0.002715f, +0.000142f, -0.002718f, -0.001225f, +0.000399f, -0.001765f, -0.001392f, -0.001090f, - -0.000180f, -0.003002f, -0.000128f, -0.002313f, -0.000974f, -0.000921f - }, - { - -0.026569f, +0.002897f, +0.047517f, +0.015956f, -0.015614f, +0.016296f, -0.006972f, +0.028840f, -0.007182f, +0.028224f, - -0.006085f, -0.023276f, +0.004731f, -0.018243f, -0.004767f, -0.023180f, +0.026704f, +0.003335f, +0.016675f, -0.003237f, - -0.007670f, +0.010186f, +0.012429f, +0.004075f, +0.006531f, -0.005076f, +0.012776f, -0.002601f, -0.009714f, -0.011737f, - -0.004722f, +0.007143f, -0.001510f, +0.006030f, -0.016091f, -0.003156f, -0.011550f, -0.000682f, -0.004640f, +0.010333f, - -0.006114f, -0.007617f, -0.003055f, +0.007963f, +0.011570f, -0.003138f, -0.007478f, -0.006880f, +0.013535f, -0.001569f, - +0.009029f, +0.007101f, -0.004633f, -0.007309f, -0.007122f, +0.008654f, +0.002863f, -0.003118f, -0.005377f, -0.002418f, - -0.001214f, -0.001099f, -0.000535f, -0.000784f, -0.000166f, -0.006715f, +0.002057f, -0.004295f, -0.001820f, +0.002056f, - +0.004983f, +0.002565f, +0.009139f, -0.005805f, +0.001448f, -0.002858f, +0.000636f, +0.004393f, -0.000903f, -0.003407f, - -0.004701f, +0.002025f, -0.001598f, +0.002123f, -0.000001f, -0.000174f, +0.002660f, -0.002560f, +0.003635f, -0.000878f, - +0.001074f, +0.000726f, +0.000751f, +0.002078f, +0.000533f, +0.000186f - }, - { - +0.001069f, -0.085750f, +0.075918f, -0.005048f, +0.013694f, -0.002220f, -0.004348f, +0.007877f, -0.004145f, +0.004188f, - +0.005077f, +0.002977f, -0.005913f, +0.013373f, -0.019508f, -0.015649f, +0.011829f, -0.008588f, -0.007899f, -0.013484f, - -0.039278f, -0.026026f, +0.004474f, -0.042905f, +0.031716f, -0.000542f, -0.018453f, -0.002562f, +0.012390f, +0.026115f, - +0.006057f, -0.010971f, -0.001290f, +0.002061f, -0.014363f, +0.010857f, -0.004480f, -0.002023f, +0.023329f, +0.002886f, - +0.000102f, -0.008346f, +0.013612f, -0.001809f, +0.002565f, +0.011109f, -0.002537f, +0.000631f, -0.002949f, +0.015572f, - -0.006125f, +0.007126f, -0.010257f, -0.002577f, -0.005378f, -0.003610f, -0.003097f, +0.000584f, -0.005983f, +0.012886f, - +0.005402f, -0.004684f, -0.003283f, +0.000748f, -0.007821f, +0.006472f, +0.001524f, +0.010605f, +0.000772f, -0.006851f, - -0.000468f, -0.003691f, -0.000247f, +0.007473f, -0.001561f, +0.001220f, -0.002187f, -0.005675f, -0.003228f, -0.002158f, - +0.005769f, -0.004081f, -0.002473f, +0.003575f, -0.007005f, +0.000874f, +0.000366f, +0.002840f, -0.000085f, -0.002130f, - -0.000534f, -0.004214f, +0.001947f, -0.003388f, +0.001976f, +0.001537f - }, - { - -0.029805f, -0.026883f, +0.055853f, +0.065978f, -0.019727f, +0.008894f, +0.001145f, +0.010318f, +0.032826f, -0.007957f, - -0.023149f, +0.006535f, -0.000327f, -0.010631f, +0.024674f, -0.005443f, -0.016352f, -0.005469f, +0.000372f, -0.002550f, - -0.015086f, -0.009734f, +0.002058f, +0.006687f, -0.005374f, +0.020508f, +0.010790f, +0.004183f, +0.004441f, +0.010260f, - -0.001045f, -0.005620f, -0.014370f, -0.002101f, -0.000325f, -0.014970f, +0.004411f, -0.004681f, +0.013042f, -0.000819f, - +0.000792f, -0.000050f, +0.004896f, -0.003677f, +0.009011f, +0.002009f, -0.006840f, +0.002564f, -0.005307f, +0.005096f, - -0.010710f, +0.001513f, +0.000584f, -0.007483f, +0.000070f, -0.001698f, -0.008995f, +0.008781f, +0.012900f, -0.001173f, - -0.005840f, -0.008554f, +0.009403f, +0.008390f, -0.002092f, -0.002557f, -0.000761f, +0.002041f, +0.000374f, -0.000649f, - +0.002804f, +0.001267f, +0.000415f, +0.006803f, +0.003276f, -0.004921f, +0.000101f, +0.000946f, -0.000034f, +0.000963f, - +0.005499f, -0.001436f, +0.000337f, -0.000217f, -0.000215f, -0.000128f, +0.000295f, +0.003823f, +0.000061f, +0.001925f, - -0.000273f, +0.000091f, +0.002243f, -0.003175f, +0.002820f, -0.001711f - }, - { - +0.003763f, -0.065127f, +0.108393f, -0.009194f, +0.009940f, -0.008879f, -0.005875f, +0.000734f, -0.005205f, +0.002855f, - +0.001050f, +0.024859f, -0.008435f, +0.032258f, +0.011343f, -0.000722f, -0.009275f, +0.030237f, -0.013837f, -0.030145f, - -0.007778f, -0.005892f, -0.015662f, +0.017517f, -0.003297f, -0.016538f, +0.020485f, -0.008818f, +0.038873f, -0.031073f, - +0.024264f, +0.004120f, -0.008432f, +0.011442f, +0.004853f, -0.019504f, +0.021036f, -0.011550f, +0.000436f, +0.008508f, - +0.009595f, -0.003323f, +0.008814f, +0.003822f, +0.006095f, +0.007369f, +0.007900f, +0.015896f, -0.018240f, -0.007102f, - +0.000766f, -0.013052f, +0.000258f, +0.001247f, +0.000237f, +0.008171f, +0.007733f, -0.005258f, +0.000549f, -0.008982f, - +0.002593f, -0.007406f, -0.001220f, -0.004258f, +0.008002f, -0.010659f, +0.002889f, +0.003466f, +0.003546f, +0.001093f, - -0.000938f, +0.008998f, -0.007685f, -0.003020f, +0.003282f, +0.003324f, -0.003902f, -0.002400f, -0.000914f, -0.004694f, - -0.004414f, +0.001101f, +0.000480f, -0.002967f, +0.001487f, -0.001895f, -0.003470f, -0.000879f, +0.000037f, +0.001330f, - +0.001761f, +0.000040f, -0.004331f, +0.001492f, +0.002639f, -0.001078f - }, - { - -0.029270f, -0.038847f, +0.035887f, +0.075120f, -0.029438f, -0.007200f, -0.012619f, +0.020210f, -0.000073f, +0.012124f, - -0.008993f, -0.004835f, +0.005688f, -0.007550f, +0.011831f, -0.007079f, +0.040903f, -0.013913f, -0.017832f, +0.021697f, - +0.001257f, -0.007737f, +0.003521f, -0.022371f, +0.016746f, -0.003029f, +0.007882f, +0.000471f, -0.001836f, +0.007143f, - +0.005809f, +0.006592f, +0.011916f, -0.008535f, -0.005241f, -0.005149f, +0.012760f, -0.002724f, +0.001999f, +0.010335f, - +0.013866f, -0.010881f, +0.002737f, -0.002593f, +0.002547f, -0.000363f, +0.005686f, +0.018771f, -0.016996f, +0.004940f, - -0.005883f, +0.001454f, +0.002871f, -0.004533f, -0.000307f, -0.002632f, -0.007129f, -0.002298f, -0.009960f, -0.002767f, - -0.008234f, -0.009450f, +0.001135f, +0.000950f, -0.002143f, +0.001100f, -0.001714f, +0.001212f, -0.004490f, -0.002630f, - +0.004366f, +0.002267f, -0.000849f, +0.005744f, +0.003065f, +0.000618f, -0.002780f, -0.001159f, -0.003211f, +0.003474f, - -0.002613f, +0.004580f, -0.002649f, -0.001947f, -0.005756f, +0.001345f, -0.000018f, +0.000392f, -0.004423f, +0.002813f, - +0.001721f, -0.004745f, +0.001232f, -0.000462f, +0.000749f, -0.002460f - }, - { - -0.000135f, +0.111291f, -0.046999f, -0.022021f, -0.003252f, -0.004750f, +0.030936f, +0.005604f, -0.006536f, -0.000316f, - +0.000814f, -0.023667f, -0.013214f, +0.030520f, -0.009704f, +0.035665f, +0.026361f, -0.023788f, -0.002280f, -0.015218f, - +0.001374f, -0.011169f, +0.006066f, +0.001864f, +0.018760f, -0.010055f, +0.007834f, +0.004759f, +0.021412f, -0.030229f, - +0.000992f, -0.013566f, +0.013616f, -0.001190f, -0.024204f, +0.015446f, +0.006080f, -0.012025f, -0.007765f, +0.003252f, - +0.008054f, -0.005958f, +0.016455f, -0.000974f, -0.015756f, +0.014531f, +0.004041f, -0.001474f, +0.007097f, +0.002829f, - +0.005484f, -0.004250f, -0.008258f, +0.000791f, +0.009061f, -0.000860f, -0.006519f, +0.005965f, -0.004565f, +0.003907f, - -0.004756f, -0.006294f, +0.000501f, -0.001173f, -0.005041f, -0.002157f, -0.000481f, +0.002126f, -0.005769f, +0.000820f, - -0.006184f, +0.004631f, +0.001827f, +0.001613f, +0.003837f, -0.000927f, +0.003304f, +0.000539f, -0.004296f, -0.001295f, - -0.002322f, -0.004752f, +0.002209f, +0.003403f, +0.001756f, +0.004794f, +0.005003f, +0.007721f, +0.003767f, +0.001449f, - +0.002422f, -0.000605f, +0.002821f, -0.000561f, +0.000335f, -0.000358f - }, - { - -0.013478f, +0.100273f, +0.070821f, +0.018209f, -0.013814f, -0.024278f, +0.079866f, -0.020457f, -0.007669f, -0.059648f, - +0.002029f, +0.003142f, +0.007095f, +0.018241f, +0.017298f, +0.003490f, -0.004483f, -0.011010f, +0.020103f, -0.013258f, - -0.003403f, -0.016420f, -0.000697f, +0.000021f, +0.012276f, -0.008629f, -0.019665f, +0.003106f, +0.014059f, -0.011631f, - +0.004507f, +0.007244f, +0.003255f, +0.001312f, +0.007480f, +0.016850f, -0.008566f, +0.017650f, +0.018944f, +0.000506f, - +0.011173f, +0.004332f, -0.016009f, +0.005252f, -0.000878f, +0.014608f, +0.004065f, -0.002395f, +0.001421f, +0.001351f, - -0.012331f, -0.010714f, -0.012339f, +0.009681f, -0.000488f, -0.011228f, -0.005972f, -0.003241f, -0.012652f, -0.010061f, - +0.002401f, -0.003199f, +0.003310f, -0.014864f, -0.000972f, -0.004037f, -0.002726f, +0.003510f, +0.003594f, -0.003015f, - -0.007429f, -0.001194f, -0.003857f, -0.000378f, +0.003123f, -0.002079f, +0.002788f, +0.002902f, -0.004934f, +0.006452f, - -0.003894f, -0.009111f, +0.001008f, -0.003828f, +0.004368f, -0.001702f, +0.005139f, +0.002949f, +0.000520f, -0.000919f, - -0.000759f, +0.004668f, -0.005013f, +0.000796f, -0.002413f, +0.003014f - }, - { - -0.000995f, +0.035189f, -0.048727f, -0.001066f, +0.005145f, +0.016234f, -0.010840f, +0.004490f, -0.000504f, -0.005556f, - -0.025195f, +0.007076f, -0.010769f, -0.003365f, +0.035734f, +0.011821f, -0.024474f, +0.014824f, -0.005958f, -0.000370f, - -0.011656f, +0.011840f, -0.009526f, +0.004284f, -0.015120f, +0.000409f, +0.000546f, -0.019929f, +0.024872f, +0.013221f, - +0.021253f, -0.007297f, +0.005809f, -0.012765f, -0.000465f, +0.012226f, -0.008781f, -0.031851f, +0.014460f, +0.007338f, - +0.009485f, -0.002137f, -0.001521f, +0.009737f, -0.011103f, +0.007166f, -0.007664f, -0.000788f, -0.002524f, -0.011166f, - +0.013556f, +0.007821f, +0.003715f, -0.007414f, +0.002889f, +0.011178f, -0.007271f, -0.004566f, -0.007741f, +0.006851f, - -0.006912f, -0.003923f, -0.003981f, +0.001510f, +0.003198f, -0.006465f, -0.009795f, -0.001153f, -0.002994f, -0.012417f, - +0.000672f, +0.003258f, +0.003642f, -0.007788f, -0.001150f, +0.001597f, +0.001642f, +0.001026f, +0.000516f, +0.000600f, - -0.002345f, +0.000314f, +0.002249f, +0.000630f, -0.003723f, -0.000500f, -0.000160f, -0.002084f, +0.001896f, -0.002065f, - +0.001275f, +0.000101f, +0.001364f, -0.003693f, -0.002379f, +0.001189f - }, - { - -0.011118f, -0.253622f, -0.016353f, +0.014093f, +0.021331f, -0.027796f, +0.058390f, -0.005729f, +0.006352f, -0.005428f, - -0.020252f, +0.034169f, -0.006941f, +0.004112f, -0.029520f, -0.045344f, +0.011143f, -0.006528f, +0.016287f, +0.016790f, - +0.030494f, +0.004005f, +0.023619f, -0.009650f, -0.004597f, -0.005093f, -0.008704f, +0.016943f, -0.005567f, +0.013424f, - -0.011650f, +0.015600f, -0.004227f, +0.001562f, +0.010998f, -0.005726f, +0.013421f, -0.013386f, -0.000073f, -0.004740f, - -0.010189f, -0.012045f, +0.001148f, +0.012311f, +0.003527f, -0.002689f, -0.004276f, +0.010016f, +0.002870f, +0.003690f, - +0.011595f, -0.001135f, +0.010012f, -0.012125f, -0.004371f, -0.003662f, -0.008398f, -0.002067f, -0.009728f, -0.007076f, - +0.010628f, +0.008041f, +0.008950f, -0.002616f, -0.005955f, +0.001344f, -0.005220f, +0.003076f, -0.006737f, -0.001406f, - +0.005078f, -0.005295f, -0.002307f, -0.000455f, -0.006531f, +0.002866f, -0.008647f, -0.000112f, -0.006574f, +0.000287f, - +0.002399f, -0.002804f, +0.002684f, +0.000271f, +0.001383f, -0.002834f, +0.001892f, +0.000882f, +0.006728f, +0.001044f, - -0.000401f, +0.002677f, -0.001450f, +0.000210f, -0.001079f, +0.000211f - }, - { - -0.000424f, +0.132792f, -0.017521f, -0.016671f, +0.000808f, +0.011182f, -0.024495f, +0.000483f, -0.010725f, +0.008726f, - -0.003823f, -0.010735f, +0.000321f, +0.027862f, +0.077612f, +0.021166f, -0.041425f, -0.007251f, +0.014194f, -0.000650f, - -0.025202f, +0.038421f, -0.037178f, +0.032189f, -0.004174f, -0.025424f, -0.006757f, +0.004367f, +0.008035f, -0.003507f, - -0.020770f, -0.014119f, +0.005443f, -0.021312f, +0.005520f, +0.014373f, -0.014815f, +0.002948f, -0.000770f, +0.000238f, - +0.002800f, +0.008320f, +0.007133f, +0.014974f, +0.004079f, -0.003638f, -0.011905f, -0.002804f, +0.004465f, +0.004827f, - +0.006161f, -0.006469f, +0.006714f, +0.002506f, -0.008308f, +0.001393f, +0.002904f, -0.000669f, -0.002339f, +0.000277f, - +0.011181f, -0.012627f, -0.000765f, +0.003092f, +0.003319f, +0.004442f, -0.001641f, +0.003890f, -0.003261f, +0.002507f, - +0.005203f, -0.003789f, +0.000801f, +0.003907f, -0.005286f, +0.000305f, +0.002543f, +0.000680f, -0.003989f, -0.001167f, - +0.000634f, +0.005680f, -0.005050f, -0.005521f, +0.000473f, +0.004176f, -0.003060f, -0.003161f, +0.004925f, -0.003341f, - -0.001589f, +0.001386f, -0.001882f, -0.000990f, +0.000215f, -0.001813f - }, - { - -0.012044f, -0.207752f, -0.019262f, +0.020293f, -0.024489f, -0.030076f, +0.064274f, +0.005907f, -0.006587f, -0.006834f, - -0.019585f, +0.004371f, -0.024566f, +0.008014f, -0.032656f, +0.009310f, +0.012891f, -0.009088f, -0.004543f, +0.015965f, - -0.009087f, -0.014673f, +0.010468f, -0.000022f, -0.008693f, +0.010350f, +0.006297f, -0.002099f, -0.007414f, -0.020775f, - -0.001787f, +0.005867f, +0.012919f, +0.002126f, +0.014226f, -0.005990f, -0.004657f, -0.006167f, +0.019874f, +0.015167f, - +0.004831f, -0.005820f, +0.002726f, -0.019051f, -0.014358f, -0.001201f, -0.011345f, -0.013036f, -0.004678f, -0.004179f, - +0.011373f, +0.004729f, -0.011284f, -0.002462f, -0.000518f, -0.003979f, -0.005616f, -0.000352f, +0.014539f, +0.009811f, - -0.009123f, +0.008232f, +0.004762f, +0.005022f, +0.006368f, -0.003901f, +0.006896f, +0.010178f, -0.005127f, -0.002381f, - -0.005299f, +0.001564f, -0.001814f, +0.000433f, +0.006523f, -0.001517f, -0.000645f, -0.000486f, +0.003991f, -0.006671f, - -0.003248f, +0.002628f, -0.000581f, +0.000134f, -0.001946f, +0.003064f, +0.003284f, +0.000776f, +0.001192f, -0.002815f, - +0.001835f, +0.001498f, +0.002728f, -0.000719f, -0.000440f, +0.000053f - } - }, - { - { - -0.000466f, -0.125731f, -0.007070f, +0.023464f, -0.023260f, -0.008159f, -0.011378f, +0.000350f, +0.015998f, +0.008716f, - -0.000254f, +0.009272f, -0.009642f, -0.011709f, -0.026469f, -0.012563f, -0.035499f, -0.020960f, -0.017087f, +0.002091f, - +0.016799f, -0.017939f, -0.001200f, -0.008981f, +0.029746f, +0.000415f, -0.006214f, -0.004049f, -0.000808f, +0.033251f, - +0.005142f, -0.005748f, -0.009493f, +0.014125f, -0.008631f, +0.002500f, +0.004392f, +0.001132f, -0.005162f, -0.000981f, - -0.003970f, -0.005790f, +0.009000f, +0.005275f, +0.001249f, -0.000221f, +0.003364f, -0.008901f, -0.006345f, +0.000973f, - -0.007962f, -0.010050f, +0.004548f, -0.008790f, -0.000824f, +0.001828f, +0.001629f, -0.006388f, +0.002792f, -0.004975f, - -0.003498f, -0.003392f, +0.005198f, -0.001340f, -0.006409f, +0.004493f, -0.000894f, +0.007836f, +0.007898f, +0.002698f, - -0.002028f, -0.000326f, +0.005351f, +0.000665f, +0.001247f, -0.003040f, +0.005693f, -0.000915f, +0.001997f, -0.004546f, - -0.000498f, +0.005232f, +0.000767f, +0.004504f, +0.002255f, +0.000846f, +0.004860f, -0.001576f, +0.000928f, +0.000251f, - +0.002097f, -0.000845f, +0.005265f, -0.000384f, +0.000142f, +0.000450f - }, - { - -0.005551f, +0.252702f, +0.010507f, -0.153487f, +0.033990f, -0.000045f, +0.010190f, -0.000666f, +0.014739f, +0.010816f, - +0.020538f, -0.021089f, +0.001413f, +0.011067f, +0.005830f, -0.009888f, -0.006479f, -0.016010f, +0.002423f, -0.016785f, - +0.004747f, -0.001244f, +0.022520f, +0.018280f, -0.016806f, +0.004477f, -0.007874f, +0.000004f, +0.015002f, -0.002299f, - -0.010106f, -0.012292f, +0.016362f, -0.008304f, -0.004815f, -0.003829f, +0.003206f, -0.004115f, +0.011189f, -0.001423f, - +0.002680f, +0.003357f, -0.007091f, +0.005160f, -0.003632f, -0.000961f, -0.016560f, -0.002061f, +0.003211f, -0.001857f, - -0.001915f, +0.005134f, -0.001285f, -0.005877f, +0.000484f, -0.005882f, -0.002896f, -0.004947f, +0.007307f, -0.007374f, - -0.002578f, +0.005136f, +0.000795f, +0.001814f, +0.001964f, -0.001386f, -0.007309f, -0.000271f, +0.001557f, +0.005646f, - +0.000861f, +0.001600f, -0.003437f, -0.003289f, -0.001494f, -0.005274f, -0.004031f, -0.004452f, -0.001736f, +0.000692f, - +0.008093f, -0.005139f, +0.001641f, -0.004854f, +0.002973f, -0.001313f, +0.004428f, +0.000570f, +0.003077f, -0.001636f, - -0.004314f, +0.001326f, +0.001240f, +0.000300f, +0.001754f, -0.000729f - }, - { - +0.000634f, -0.014443f, -0.002122f, -0.078482f, -0.036740f, +0.001133f, +0.016370f, -0.005855f, +0.008625f, -0.017511f, - +0.022073f, -0.022728f, +0.010704f, -0.003988f, -0.016217f, -0.002519f, +0.001138f, +0.008082f, -0.007024f, -0.010579f, - -0.001713f, -0.012970f, -0.000315f, -0.020943f, +0.021173f, +0.003286f, +0.008443f, -0.016050f, -0.007697f, +0.011366f, - +0.003219f, -0.010500f, +0.000938f, -0.001236f, -0.007609f, -0.009776f, -0.011848f, +0.018403f, +0.000657f, -0.001229f, - +0.011515f, -0.004075f, +0.006572f, +0.003294f, -0.007726f, +0.002807f, +0.005184f, +0.005688f, +0.010965f, -0.005071f, - +0.013278f, +0.005822f, +0.011175f, +0.004566f, +0.017662f, -0.002586f, -0.002989f, -0.008717f, +0.003018f, -0.000325f, - -0.001376f, -0.002539f, -0.001474f, +0.003604f, +0.003519f, -0.004480f, +0.007262f, +0.002591f, -0.001172f, +0.005280f, - -0.003002f, +0.004150f, -0.001851f, +0.000489f, +0.004129f, -0.002187f, -0.001189f, +0.003651f, +0.003173f, -0.001360f, - -0.000873f, +0.001462f, +0.002044f, -0.004819f, -0.004398f, +0.003275f, +0.001581f, -0.000093f, +0.000863f, -0.000333f, - +0.004799f, +0.000781f, +0.000291f, +0.000181f, -0.000411f, +0.000582f - }, - { - +0.001449f, -0.066164f, +0.057274f, +0.009986f, -0.005861f, -0.007080f, -0.002207f, +0.002128f, -0.014265f, -0.021293f, - -0.006111f, +0.028666f, -0.000122f, +0.002289f, +0.006265f, -0.011253f, -0.019048f, +0.033346f, -0.032256f, -0.005234f, - -0.000959f, -0.013468f, -0.019639f, -0.001361f, -0.005479f, -0.020439f, +0.022856f, +0.009122f, -0.005871f, -0.008458f, - -0.014776f, +0.000945f, +0.008113f, -0.000909f, +0.004047f, +0.013563f, -0.017455f, +0.003132f, -0.002027f, +0.000365f, - +0.012264f, -0.006038f, +0.002779f, +0.000458f, +0.004383f, -0.008070f, +0.001197f, -0.003950f, +0.003682f, +0.014558f, - +0.011123f, -0.011888f, -0.001575f, +0.007306f, -0.006114f, -0.008129f, -0.001715f, -0.000849f, -0.004121f, +0.003897f, - +0.007190f, +0.000850f, -0.005762f, +0.001414f, +0.000808f, -0.006553f, +0.003268f, -0.001367f, +0.002940f, -0.008726f, - +0.002636f, -0.001409f, +0.002544f, +0.002909f, -0.002102f, -0.005385f, +0.002997f, +0.002082f, -0.001035f, +0.000529f, - -0.000461f, -0.002480f, +0.000300f, +0.003861f, -0.004156f, -0.002614f, +0.000475f, -0.000310f, -0.001926f, -0.000501f, - -0.001607f, +0.000182f, +0.000853f, -0.006260f, +0.001684f, -0.003676f - }, - { - +0.031131f, +0.081428f, -0.081883f, -0.010873f, +0.006902f, +0.011456f, +0.014306f, -0.005262f, +0.014844f, +0.008466f, - +0.014511f, -0.009352f, -0.010181f, -0.018360f, -0.017914f, +0.006799f, +0.017541f, -0.019653f, +0.035016f, +0.016263f, - +0.002704f, +0.000304f, -0.003517f, +0.004901f, +0.005664f, +0.006663f, -0.005908f, -0.001325f, -0.013502f, -0.009146f, - +0.009079f, -0.000409f, +0.002155f, -0.000321f, -0.012101f, -0.007678f, -0.004756f, -0.002312f, -0.001413f, +0.003310f, - -0.002327f, -0.004177f, +0.005550f, -0.001626f, +0.006052f, -0.000677f, -0.003194f, -0.001500f, +0.005463f, -0.005411f, - +0.019122f, +0.004328f, -0.011823f, -0.002738f, -0.005432f, +0.006925f, -0.001366f, -0.001958f, -0.004805f, +0.002585f, - -0.002792f, -0.000429f, +0.005687f, -0.008829f, -0.001918f, -0.000310f, -0.003000f, -0.003650f, -0.001245f, -0.001049f, - +0.006688f, +0.004172f, +0.003166f, +0.000831f, -0.005186f, -0.001640f, +0.006680f, +0.001023f, -0.003098f, -0.003014f, - -0.003358f, -0.003009f, +0.006595f, -0.002039f, +0.001339f, +0.001972f, -0.001210f, +0.000397f, -0.000077f, +0.000971f, - -0.000415f, -0.000150f, +0.002389f, +0.000695f, +0.003134f, -0.000501f - }, - { - -0.004639f, +0.019209f, -0.035066f, +0.007517f, +0.019851f, -0.005507f, -0.000902f, -0.001382f, -0.001791f, +0.013878f, - -0.008086f, +0.010793f, -0.006078f, -0.004265f, -0.011763f, +0.008741f, -0.009830f, +0.000823f, -0.010695f, -0.022081f, - -0.035597f, -0.020513f, -0.013737f, -0.018810f, +0.011923f, +0.014659f, -0.005328f, -0.009284f, -0.005478f, +0.046684f, - -0.009035f, +0.006704f, -0.001440f, -0.007880f, -0.008403f, +0.007371f, -0.007746f, +0.009281f, +0.009962f, +0.004351f, - -0.008944f, -0.003049f, +0.007014f, -0.001202f, +0.010589f, +0.005999f, -0.004149f, +0.002544f, -0.003462f, +0.009383f, - -0.002757f, -0.002374f, -0.000410f, -0.003063f, -0.004936f, -0.003391f, -0.003848f, -0.000010f, -0.003239f, +0.008723f, - +0.009500f, -0.001086f, -0.004332f, -0.001861f, -0.005627f, +0.005975f, +0.002708f, +0.004611f, +0.000932f, -0.002760f, - -0.000151f, -0.002237f, +0.001468f, +0.002019f, +0.002292f, -0.000728f, -0.002993f, -0.006861f, -0.001328f, -0.001510f, - +0.007715f, -0.006027f, -0.001929f, +0.001702f, -0.002549f, -0.005616f, +0.004830f, +0.001284f, +0.001260f, -0.003114f, - -0.003902f, +0.000401f, +0.000907f, -0.002406f, -0.000724f, +0.003676f - }, - { - +0.033754f, +0.019182f, -0.031750f, +0.003452f, +0.032885f, +0.003072f, +0.005864f, +0.007524f, +0.024068f, +0.004037f, - -0.002227f, -0.034886f, +0.000907f, +0.015578f, +0.015097f, -0.011424f, -0.010408f, +0.006771f, -0.014069f, -0.004825f, - -0.012585f, +0.006779f, -0.002813f, -0.009250f, +0.018822f, +0.011074f, +0.022618f, -0.011231f, +0.019476f, +0.001954f, - +0.013646f, -0.017988f, -0.009966f, -0.005966f, -0.007953f, -0.000315f, -0.003898f, +0.001456f, +0.008782f, -0.004449f, - +0.002551f, -0.000695f, +0.000033f, +0.009155f, +0.004641f, +0.005544f, -0.003830f, -0.007811f, -0.000388f, +0.002611f, - +0.006349f, -0.009978f, -0.004924f, +0.000146f, -0.003670f, +0.008469f, -0.007200f, +0.006504f, +0.005673f, +0.002676f, - -0.011737f, -0.002620f, +0.004452f, +0.006017f, +0.006376f, -0.003075f, -0.002326f, +0.003423f, -0.002853f, +0.005257f, - -0.003281f, +0.003585f, +0.004725f, +0.000449f, +0.001537f, -0.002265f, +0.000682f, -0.000346f, +0.002383f, +0.001617f, - +0.001334f, +0.000825f, +0.001285f, -0.004273f, +0.000443f, +0.004671f, -0.002984f, +0.003140f, +0.004351f, +0.000042f, - -0.002534f, -0.000411f, +0.001346f, +0.000389f, -0.000274f, -0.000511f - }, - { - -0.005606f, +0.086721f, -0.048725f, +0.001654f, +0.013303f, -0.000273f, -0.009083f, +0.001177f, -0.007869f, -0.002175f, - -0.005511f, +0.019531f, +0.023983f, +0.007285f, +0.000756f, +0.036379f, -0.026669f, +0.010145f, -0.033189f, -0.015824f, - -0.001903f, -0.010462f, -0.006303f, +0.022239f, -0.020287f, +0.007977f, +0.005737f, -0.011950f, +0.017611f, +0.003055f, - -0.005067f, +0.010434f, +0.003687f, +0.004018f, +0.002061f, -0.002344f, -0.001258f, -0.005304f, -0.008317f, +0.009780f, - +0.007101f, +0.000938f, +0.006434f, +0.005541f, +0.006255f, +0.002126f, +0.016071f, +0.002958f, -0.008056f, -0.001606f, - -0.008087f, -0.009263f, +0.004868f, -0.010370f, +0.001495f, +0.007666f, +0.007610f, -0.000982f, -0.001870f, -0.002833f, - -0.008926f, -0.000635f, -0.005246f, +0.002705f, -0.001229f, -0.004603f, +0.001361f, +0.007104f, +0.001519f, +0.000824f, - -0.002992f, +0.000821f, -0.002814f, -0.003417f, +0.001048f, +0.007341f, -0.003767f, -0.000155f, -0.004904f, -0.005135f, - -0.005486f, +0.000577f, -0.000116f, +0.000613f, -0.001843f, +0.001437f, -0.002992f, -0.004627f, +0.001630f, +0.001754f, - +0.000553f, +0.000542f, -0.003363f, +0.001841f, +0.001564f, -0.001229f - }, - { - +0.033490f, -0.006765f, -0.037810f, +0.012394f, +0.021632f, -0.011869f, -0.003561f, +0.003530f, +0.008811f, -0.000771f, - +0.009858f, -0.015902f, -0.012274f, +0.029659f, -0.007983f, +0.034473f, -0.010938f, -0.000612f, -0.018741f, +0.009373f, - +0.012605f, -0.020947f, +0.013535f, -0.011729f, -0.003124f, +0.015649f, -0.011868f, +0.010379f, -0.003778f, +0.003344f, - +0.001687f, +0.006425f, +0.006959f, -0.007595f, +0.001058f, -0.002429f, +0.014301f, -0.011559f, +0.016277f, -0.002393f, - +0.010188f, -0.005803f, +0.000827f, +0.001022f, +0.003980f, +0.001813f, -0.001815f, +0.009581f, -0.004388f, +0.000770f, - -0.000817f, +0.001319f, -0.002574f, -0.005490f, +0.003393f, -0.004041f, -0.000707f, -0.003343f, -0.005835f, -0.013803f, - -0.000458f, -0.003076f, -0.009481f, +0.000519f, -0.005373f, +0.007533f, +0.001067f, -0.002425f, +0.000097f, -0.002178f, - -0.000754f, +0.000672f, +0.004025f, +0.000962f, +0.006358f, -0.004635f, +0.003421f, -0.002291f, +0.000887f, -0.001609f, - -0.000258f, +0.001961f, +0.000152f, -0.003276f, -0.003823f, +0.002341f, -0.000516f, -0.000484f, -0.000184f, -0.000133f, - +0.000229f, -0.002340f, -0.000808f, +0.002413f, -0.003053f, +0.000801f - }, - { - +0.000857f, -0.005759f, +0.057178f, -0.022825f, -0.007007f, -0.011499f, +0.042927f, -0.011027f, +0.006543f, -0.012257f, - -0.004821f, -0.028397f, +0.002481f, +0.015719f, +0.010343f, +0.009572f, +0.040383f, -0.021545f, +0.009590f, -0.022300f, - -0.011068f, -0.006652f, +0.001309f, +0.019804f, +0.016871f, -0.004090f, -0.002773f, +0.007545f, +0.017787f, -0.012773f, - -0.021427f, +0.002816f, +0.006791f, +0.011158f, -0.021727f, -0.002948f, +0.007293f, -0.017090f, +0.000134f, -0.005739f, - +0.004629f, -0.003871f, +0.014828f, -0.000318f, +0.009121f, -0.010676f, +0.011022f, -0.010428f, +0.011231f, +0.001438f, - +0.008647f, -0.005162f, -0.008287f, -0.005196f, -0.002254f, +0.011855f, -0.005316f, +0.003669f, -0.006141f, +0.006841f, - -0.005884f, +0.002327f, -0.008622f, +0.001853f, -0.005564f, +0.001911f, -0.004583f, +0.000387f, +0.001553f, -0.006862f, - -0.002341f, +0.003455f, -0.003930f, +0.002762f, +0.004247f, +0.002067f, -0.000138f, -0.001929f, -0.000611f, -0.003586f, - -0.000737f, -0.000758f, -0.003885f, +0.006756f, +0.003630f, +0.005610f, +0.001277f, +0.007934f, +0.003930f, +0.002306f, - -0.000182f, -0.000844f, +0.003749f, +0.001899f, -0.000367f, -0.000276f - }, - { - +0.015756f, +0.202496f, -0.046292f, -0.006937f, -0.005308f, +0.017654f, +0.000606f, -0.011287f, +0.015754f, -0.039307f, - -0.025350f, +0.000632f, +0.002420f, +0.010670f, +0.023221f, +0.013406f, -0.009630f, -0.024702f, +0.011628f, -0.006029f, - +0.001054f, -0.010706f, -0.003813f, +0.004317f, +0.004587f, -0.003566f, -0.021760f, +0.005730f, +0.012507f, -0.011734f, - +0.003266f, -0.007832f, +0.014517f, +0.001533f, +0.016941f, -0.011531f, +0.013870f, +0.007955f, +0.016894f, +0.007120f, - -0.001041f, +0.003883f, -0.013335f, +0.003707f, +0.004586f, +0.009723f, +0.008731f, -0.005557f, +0.000306f, -0.003232f, - -0.013856f, -0.004988f, -0.008710f, -0.004028f, +0.000954f, -0.007950f, -0.004624f, -0.004783f, -0.016944f, -0.002785f, - -0.004289f, +0.005863f, -0.002693f, -0.006698f, -0.003048f, -0.010286f, -0.003696f, +0.008020f, +0.001740f, -0.002636f, - -0.006052f, -0.000096f, +0.001774f, -0.001150f, -0.003383f, +0.001526f, +0.000648f, +0.003832f, -0.004651f, +0.006702f, - -0.002133f, -0.005660f, -0.007273f, +0.003770f, -0.003444f, +0.003563f, +0.000855f, +0.004402f, -0.000555f, +0.000852f, - -0.000513f, +0.002582f, -0.005351f, +0.003225f, -0.000268f, -0.002014f - }, - { - +0.000459f, -0.059531f, +0.031728f, -0.017425f, +0.019203f, +0.001344f, +0.004375f, +0.003565f, +0.000343f, -0.007046f, - -0.027415f, -0.000400f, -0.010188f, +0.009531f, +0.001392f, +0.022827f, +0.003858f, +0.017728f, -0.021256f, -0.008819f, - -0.004504f, +0.017309f, -0.007174f, +0.018370f, -0.032052f, -0.004813f, +0.006609f, -0.007376f, +0.024918f, +0.006986f, - -0.000440f, +0.009255f, -0.008691f, +0.010881f, +0.010486f, -0.004626f, -0.017144f, -0.002504f, +0.005955f, +0.007355f, - +0.018879f, +0.003162f, -0.002895f, +0.007928f, +0.001962f, -0.010242f, -0.005408f, +0.007324f, -0.002763f, -0.000176f, - +0.012545f, +0.002817f, +0.004094f, -0.012102f, +0.005598f, +0.000418f, +0.001768f, -0.012076f, -0.006773f, +0.004681f, - +0.001595f, -0.010556f, +0.003189f, -0.000964f, +0.003543f, +0.001655f, -0.015394f, -0.002389f, -0.004916f, -0.008560f, - +0.001216f, +0.001365f, +0.005375f, -0.010938f, -0.003323f, +0.007657f, -0.001704f, -0.001561f, +0.005739f, -0.003963f, - -0.003547f, +0.004832f, +0.001345f, -0.003195f, -0.003903f, +0.000337f, +0.001102f, -0.001396f, -0.000095f, -0.000074f, - +0.000194f, +0.002172f, -0.000924f, -0.000393f, -0.004058f, +0.001238f - }, - { - +0.008256f, -0.253050f, +0.004243f, -0.028030f, -0.001671f, +0.025857f, +0.012985f, +0.011478f, -0.017087f, +0.014383f, - -0.014168f, +0.013539f, -0.020065f, +0.003447f, -0.026630f, -0.035319f, +0.003448f, -0.003644f, +0.012934f, +0.019010f, - +0.027529f, +0.004293f, +0.006947f, +0.019595f, -0.017465f, +0.008048f, -0.018151f, -0.002664f, +0.015938f, +0.012417f, - -0.001748f, +0.006829f, -0.009514f, +0.000347f, +0.011734f, -0.003151f, +0.005438f, -0.005063f, -0.010387f, -0.007649f, - +0.003718f, -0.019772f, +0.003129f, +0.011542f, +0.012106f, -0.016698f, +0.000731f, -0.001769f, +0.019663f, -0.001195f, - +0.013572f, +0.007819f, -0.001402f, -0.008097f, +0.001311f, -0.013392f, +0.003805f, -0.015946f, -0.011747f, +0.001346f, - +0.010202f, +0.004968f, +0.003242f, +0.003900f, -0.002008f, -0.003897f, +0.001663f, +0.002944f, -0.007333f, -0.002981f, - +0.001975f, -0.000465f, -0.000940f, -0.001384f, -0.008932f, +0.005973f, -0.000681f, +0.002019f, -0.009431f, +0.000412f, - -0.003206f, +0.000691f, +0.001040f, +0.006346f, -0.000299f, -0.005069f, +0.000124f, +0.000626f, +0.003440f, +0.006846f, - -0.000176f, +0.001428f, +0.001193f, -0.000904f, -0.000266f, -0.001134f - }, - { - +0.000273f, +0.078636f, +0.022373f, -0.025053f, +0.001286f, +0.005855f, -0.017354f, -0.007741f, +0.013481f, -0.006040f, - +0.003702f, -0.009258f, +0.014230f, -0.005433f, +0.116881f, -0.003623f, -0.041405f, -0.003910f, +0.026436f, +0.015024f, - -0.012312f, +0.007192f, -0.012219f, +0.015877f, -0.014794f, +0.002388f, -0.022345f, +0.001985f, +0.014968f, -0.021582f, - -0.010782f, -0.011540f, +0.001094f, -0.009966f, +0.018212f, -0.006524f, -0.010096f, +0.002629f, +0.008374f, +0.001238f, - -0.000722f, +0.007617f, +0.010124f, +0.013616f, -0.005674f, -0.000609f, -0.007462f, -0.007276f, +0.001599f, +0.002496f, - +0.008689f, -0.006327f, +0.004520f, -0.000539f, -0.009164f, +0.010269f, +0.000664f, +0.000186f, -0.001675f, +0.008982f, - +0.008291f, -0.010642f, -0.009801f, +0.005859f, +0.002091f, +0.007718f, -0.001758f, +0.000643f, -0.001466f, -0.002106f, - +0.007283f, +0.001339f, -0.004854f, +0.001993f, -0.001138f, -0.000869f, -0.001606f, +0.001697f, -0.004012f, +0.000882f, - +0.005333f, +0.000401f, -0.003962f, -0.003876f, -0.002097f, +0.001565f, +0.003868f, -0.003236f, +0.000217f, -0.000230f, - -0.004210f, +0.003321f, -0.001249f, -0.002403f, +0.003179f, -0.009035f - }, - { - +0.010918f, -0.187265f, -0.046800f, +0.012151f, -0.018121f, +0.000435f, +0.013562f, +0.018913f, -0.019486f, +0.004714f, - -0.004506f, -0.020189f, -0.011774f, -0.031200f, +0.009339f, +0.007138f, +0.000954f, +0.004252f, +0.009667f, -0.008479f, - +0.017823f, -0.028090f, +0.025225f, -0.004373f, +0.003158f, +0.008016f, +0.000593f, -0.008115f, +0.003408f, -0.009577f, - -0.009827f, -0.013145f, +0.005100f, +0.009808f, +0.022963f, -0.010741f, -0.010244f, +0.006871f, +0.024511f, +0.010035f, - -0.001633f, +0.003588f, -0.009219f, -0.009548f, -0.006825f, -0.015559f, -0.009843f, +0.003400f, -0.008293f, +0.004630f, - +0.005054f, +0.004281f, -0.010944f, -0.005973f, -0.000413f, -0.006698f, +0.000600f, +0.004574f, +0.006713f, +0.003737f, - -0.001594f, +0.005449f, +0.004126f, +0.006412f, +0.002252f, +0.005044f, +0.007942f, +0.009541f, -0.009109f, -0.000575f, - -0.004672f, +0.002742f, +0.002028f, +0.004407f, +0.001875f, -0.005194f, -0.000073f, +0.002163f, -0.000052f, -0.004233f, - -0.004103f, +0.007167f, -0.000966f, -0.003533f, +0.001110f, -0.001013f, +0.004286f, +0.002219f, -0.000863f, -0.000699f, - +0.000767f, -0.000866f, +0.003467f, +0.002362f, +0.000544f, +0.001945f - } - }, - { - { - +0.002779f, -0.034787f, +0.068367f, +0.054749f, -0.018390f, +0.002452f, -0.005483f, +0.006023f, +0.008923f, +0.005565f, - +0.000998f, +0.009690f, +0.004957f, +0.002540f, -0.006828f, +0.003849f, -0.031761f, -0.033772f, -0.033187f, -0.004754f, - +0.014253f, -0.019371f, +0.013276f, -0.005083f, +0.001304f, -0.010803f, +0.012086f, +0.005602f, +0.002272f, +0.019209f, - +0.002284f, +0.004573f, -0.005111f, +0.013399f, -0.012277f, -0.001178f, +0.014240f, +0.004619f, -0.002687f, +0.013572f, - +0.001753f, -0.000768f, +0.000895f, -0.001340f, +0.011024f, -0.003597f, +0.007449f, +0.009827f, -0.007029f, -0.009364f, - -0.011631f, -0.004780f, +0.004563f, -0.000692f, +0.004815f, -0.010118f, -0.004912f, -0.002384f, +0.005766f, +0.000836f, - -0.003067f, -0.003225f, +0.009432f, -0.003987f, -0.002973f, +0.008377f, -0.002308f, +0.002944f, +0.001051f, +0.001487f, - -0.001560f, -0.003405f, +0.003747f, +0.002965f, +0.002566f, -0.004148f, +0.002223f, -0.001638f, +0.005346f, +0.000061f, - +0.002070f, +0.007567f, -0.000464f, +0.001726f, -0.001430f, -0.000130f, +0.004850f, -0.003119f, +0.000181f, +0.002788f, - +0.001634f, -0.004951f, +0.000290f, -0.003784f, -0.000136f, +0.002010f - }, - { - +0.013126f, +0.229410f, -0.012127f, -0.114628f, +0.090216f, +0.011521f, -0.006574f, -0.034168f, +0.002653f, +0.003229f, - +0.018022f, -0.026729f, -0.001323f, +0.003100f, -0.010539f, -0.012578f, -0.008633f, -0.018373f, +0.001637f, -0.016998f, - +0.018152f, +0.002624f, +0.018733f, +0.004590f, -0.023954f, +0.021587f, -0.000315f, -0.011393f, +0.006651f, -0.008398f, - -0.009590f, -0.015016f, +0.017275f, +0.001421f, +0.006946f, +0.008344f, +0.009147f, -0.015118f, -0.006857f, -0.008830f, - +0.000231f, +0.004952f, -0.007700f, +0.000193f, +0.000795f, +0.004414f, -0.004447f, +0.007923f, +0.001669f, -0.004017f, - -0.008095f, -0.004355f, -0.002513f, -0.000212f, +0.001075f, -0.011333f, +0.001951f, -0.001230f, +0.001829f, -0.004132f, - +0.002335f, +0.002400f, +0.000569f, -0.000515f, -0.003910f, +0.000604f, -0.001058f, +0.001631f, -0.000265f, +0.003225f, - -0.001295f, -0.000855f, -0.001369f, -0.003291f, -0.000617f, -0.000440f, +0.001828f, -0.000388f, +0.005298f, +0.001745f, - +0.002315f, -0.004680f, +0.002635f, -0.002599f, +0.000301f, -0.007184f, +0.004890f, +0.000981f, +0.001304f, -0.000202f, - -0.002229f, +0.001151f, -0.000959f, -0.001973f, +0.001551f, +0.000402f - }, - { - +0.000288f, -0.162622f, -0.084476f, +0.028560f, +0.017012f, -0.003575f, +0.012440f, -0.015021f, -0.004354f, -0.015455f, - +0.011252f, -0.036488f, +0.027489f, +0.014645f, +0.000812f, +0.006885f, +0.001368f, -0.002785f, -0.012622f, +0.004942f, - +0.013029f, -0.009399f, -0.008118f, -0.009106f, +0.011266f, -0.021899f, +0.002717f, -0.014860f, -0.009194f, +0.015187f, - +0.028729f, +0.002403f, -0.014188f, -0.012732f, +0.009652f, +0.008343f, +0.002675f, +0.024838f, -0.009946f, -0.004671f, - +0.013591f, -0.004692f, +0.000459f, -0.008250f, -0.000511f, +0.007557f, -0.009936f, -0.003532f, +0.011735f, -0.006544f, - +0.002114f, -0.000634f, +0.010487f, -0.005201f, +0.012927f, -0.000410f, +0.002782f, -0.006662f, -0.003236f, -0.001001f, - -0.000535f, -0.000736f, +0.000318f, +0.000369f, -0.003924f, -0.007391f, +0.002259f, -0.004275f, -0.000952f, +0.004168f, - -0.007180f, +0.003898f, -0.000696f, -0.003853f, +0.002793f, -0.004444f, -0.003303f, -0.001499f, -0.002523f, -0.000460f, - -0.000365f, +0.000821f, +0.001604f, -0.003797f, -0.001164f, +0.002652f, -0.001517f, -0.003509f, -0.002156f, -0.000922f, - +0.003359f, -0.002914f, -0.002265f, -0.000479f, -0.000112f, +0.000631f - }, - { - +0.000647f, -0.106520f, +0.025742f, +0.026254f, -0.003288f, -0.004843f, +0.003005f, +0.006731f, -0.000408f, -0.007004f, - -0.009913f, +0.025657f, -0.002464f, +0.003902f, +0.017903f, -0.007469f, -0.031331f, +0.019332f, -0.019519f, -0.000152f, - +0.006059f, +0.006644f, -0.009326f, +0.008211f, +0.002755f, -0.032794f, +0.007880f, +0.018193f, -0.001009f, -0.006416f, - -0.003274f, -0.005920f, +0.005555f, -0.005588f, -0.001070f, +0.011050f, -0.005265f, +0.016527f, +0.009609f, -0.009340f, - +0.003082f, -0.009549f, -0.002453f, +0.000229f, +0.006115f, +0.001757f, -0.000458f, -0.000511f, +0.007681f, -0.007260f, - +0.002003f, -0.002133f, -0.002448f, -0.004982f, -0.006600f, +0.003428f, +0.001166f, -0.001285f, +0.000587f, -0.000694f, - +0.003284f, +0.001380f, -0.006859f, +0.002891f, +0.001456f, -0.008046f, +0.005792f, +0.002784f, +0.008087f, -0.004339f, - +0.003238f, -0.001730f, +0.002841f, +0.001571f, -0.000485f, -0.000533f, -0.000933f, -0.002476f, -0.002816f, +0.001170f, - +0.002004f, -0.002125f, -0.000332f, +0.004068f, -0.003440f, -0.002642f, +0.001725f, +0.000611f, -0.004228f, -0.000440f, - -0.000496f, +0.001010f, +0.001028f, -0.002135f, +0.004974f, -0.003833f - }, - { - -0.032339f, +0.073068f, -0.012460f, -0.025593f, -0.017569f, +0.003431f, +0.008094f, -0.026695f, -0.010208f, -0.002320f, - +0.029278f, -0.006208f, -0.007655f, -0.010548f, -0.010396f, +0.023114f, +0.018477f, -0.028938f, +0.040739f, +0.039646f, - +0.010267f, +0.000551f, -0.015182f, -0.018647f, -0.001406f, +0.006620f, -0.009372f, +0.010090f, +0.000715f, -0.001398f, - +0.011360f, -0.015149f, -0.001374f, -0.001394f, -0.009512f, +0.000998f, +0.007412f, +0.009608f, +0.009894f, +0.004494f, - +0.006518f, +0.003137f, +0.009441f, -0.006757f, -0.004816f, -0.000452f, +0.001777f, +0.000398f, +0.000316f, -0.006546f, - +0.013469f, +0.005176f, -0.004211f, +0.002444f, +0.001150f, +0.001522f, -0.006408f, +0.002933f, +0.001106f, +0.003566f, - -0.007128f, -0.004782f, +0.006734f, -0.002494f, +0.004184f, +0.000425f, -0.008288f, -0.002713f, -0.003025f, -0.003389f, - +0.002652f, -0.001484f, -0.004106f, +0.002018f, -0.003137f, -0.002498f, +0.006162f, -0.000896f, +0.001431f, +0.004009f, - -0.000126f, -0.003960f, +0.004687f, +0.000446f, +0.002373f, +0.003136f, +0.002390f, +0.001739f, -0.001817f, +0.001493f, - +0.001263f, -0.001676f, -0.003422f, -0.001215f, +0.002887f, +0.000610f - }, - { - +0.000161f, +0.046753f, -0.042440f, -0.003481f, +0.001547f, -0.003964f, +0.001006f, -0.005170f, +0.003875f, +0.019340f, - -0.003822f, +0.018668f, -0.009954f, -0.020352f, -0.011710f, -0.007144f, -0.038271f, -0.010065f, -0.009154f, -0.001139f, - -0.005927f, +0.003230f, -0.000611f, -0.006341f, +0.009010f, +0.016773f, +0.004814f, -0.007061f, -0.019337f, +0.023640f, - -0.022372f, +0.005053f, -0.001236f, -0.009674f, -0.008817f, -0.001858f, -0.015841f, +0.003066f, -0.006773f, -0.007286f, - -0.013093f, -0.003543f, +0.005142f, -0.006734f, +0.002152f, -0.001409f, -0.002914f, +0.001088f, -0.000694f, +0.001029f, - -0.011573f, -0.001619f, +0.004136f, -0.003639f, -0.000316f, -0.000774f, -0.003571f, +0.004885f, -0.001493f, +0.008692f, - +0.016670f, +0.004528f, -0.000800f, +0.001760f, -0.003250f, +0.000338f, -0.003582f, +0.000153f, +0.003703f, +0.000056f, - -0.000395f, -0.001534f, +0.002339f, -0.002129f, -0.001780f, -0.000877f, -0.003557f, -0.003222f, +0.004027f, -0.001778f, - +0.006297f, -0.002251f, -0.001548f, +0.001523f, +0.001379f, -0.005081f, +0.004589f, -0.001233f, +0.000150f, -0.003022f, - -0.004808f, +0.001242f, +0.003581f, +0.000556f, -0.003241f, +0.000748f - }, - { - -0.031616f, +0.004171f, +0.055720f, -0.012970f, -0.001912f, -0.002699f, +0.007151f, +0.004118f, +0.005572f, -0.004886f, - +0.019424f, -0.032444f, +0.009721f, +0.037078f, +0.012639f, -0.001079f, -0.006975f, -0.005031f, -0.007941f, +0.013708f, - -0.006919f, +0.005537f, +0.018062f, +0.004651f, +0.011766f, +0.000413f, +0.022392f, -0.008779f, +0.013065f, -0.007175f, - +0.012082f, -0.021475f, -0.004415f, -0.005830f, -0.006933f, +0.010433f, -0.004565f, -0.008388f, +0.002742f, -0.004192f, - +0.012332f, +0.004180f, +0.000389f, +0.015356f, -0.000701f, +0.003755f, +0.001741f, -0.003059f, +0.011570f, +0.010840f, - +0.007822f, -0.007358f, +0.000593f, +0.001600f, -0.005899f, +0.015758f, +0.002949f, +0.002925f, -0.000809f, +0.001843f, - -0.004935f, +0.002011f, +0.000980f, +0.001887f, +0.006793f, +0.003261f, +0.001009f, +0.000891f, +0.002155f, +0.010542f, - -0.002160f, +0.002119f, -0.001695f, -0.005932f, +0.003848f, +0.001797f, +0.001021f, -0.003126f, -0.001764f, -0.002321f, - -0.000680f, +0.001573f, +0.004128f, -0.002920f, +0.000540f, +0.006964f, -0.005041f, +0.000538f, +0.001881f, -0.001644f, - -0.002068f, +0.001248f, +0.001424f, -0.001598f, -0.000802f, +0.001964f - }, - { - -0.002980f, +0.051164f, -0.106722f, -0.005785f, -0.003325f, +0.004115f, -0.003836f, +0.002517f, -0.012197f, -0.003898f, - -0.010134f, +0.000034f, +0.022549f, +0.014778f, -0.011895f, +0.017548f, -0.023992f, +0.000556f, -0.029735f, -0.003151f, - -0.003804f, -0.012766f, -0.011415f, +0.013859f, -0.038019f, +0.002978f, +0.003042f, -0.036358f, -0.012445f, +0.005333f, - -0.002609f, +0.012468f, +0.000572f, -0.001156f, -0.007183f, +0.000066f, -0.003780f, -0.009213f, -0.022857f, -0.000080f, - -0.004765f, -0.009516f, -0.006484f, +0.003464f, +0.004425f, -0.004231f, +0.016770f, +0.002814f, +0.005005f, +0.007444f, - -0.008127f, -0.014808f, +0.008414f, -0.003531f, -0.004455f, -0.002855f, +0.000448f, -0.003181f, -0.001006f, -0.001415f, - -0.011047f, +0.005857f, +0.001903f, +0.007869f, +0.000165f, +0.001294f, +0.001052f, -0.000636f, -0.004069f, +0.002945f, - -0.002112f, -0.001158f, +0.001347f, -0.000753f, +0.000904f, +0.004755f, -0.004521f, +0.002865f, -0.003278f, -0.002183f, - -0.005286f, -0.001806f, +0.001003f, +0.002520f, +0.000103f, +0.000592f, -0.002543f, -0.003133f, -0.000018f, -0.000358f, - -0.001530f, -0.000260f, -0.002082f, -0.001249f, -0.000173f, +0.001239f - }, - { - -0.032962f, -0.017536f, +0.054289f, -0.018492f, -0.010057f, -0.001358f, +0.000944f, -0.009297f, -0.006956f, -0.005455f, - +0.043093f, +0.008565f, -0.012551f, +0.040225f, -0.008940f, +0.018775f, -0.054045f, -0.019893f, -0.025664f, -0.007817f, - +0.007069f, -0.018699f, +0.013958f, -0.010964f, -0.007038f, +0.014319f, -0.019341f, +0.008906f, -0.017172f, -0.009405f, - -0.008127f, -0.009442f, -0.006507f, -0.004257f, +0.014373f, +0.005118f, +0.010695f, -0.018913f, +0.007727f, -0.015810f, - -0.006707f, -0.009331f, -0.002146f, +0.002063f, +0.001374f, +0.002904f, +0.005185f, +0.006239f, -0.001134f, +0.004225f, - -0.002038f, +0.000498f, -0.000025f, -0.007254f, +0.003126f, -0.001400f, +0.001274f, +0.000016f, +0.002479f, -0.007593f, - +0.002824f, +0.000728f, -0.004618f, +0.003341f, -0.006036f, +0.006501f, -0.000731f, -0.003566f, +0.003556f, +0.002134f, - +0.004238f, -0.001066f, -0.003473f, -0.003398f, +0.004393f, -0.002285f, +0.007782f, -0.000795f, +0.000799f, +0.000896f, - +0.004020f, +0.002287f, -0.001653f, -0.003014f, +0.001580f, +0.004677f, +0.001002f, +0.000396f, +0.000912f, -0.002616f, - -0.000682f, +0.000262f, -0.001027f, +0.002152f, -0.001293f, +0.002694f - }, - { - +0.002235f, -0.094738f, +0.000163f, -0.008835f, +0.011160f, +0.003144f, +0.037546f, -0.036438f, -0.007498f, -0.013921f, - +0.003256f, -0.014615f, -0.001291f, +0.007549f, +0.008166f, -0.021228f, +0.019592f, -0.013473f, +0.018088f, -0.000963f, - -0.003231f, -0.000110f, -0.005221f, +0.017757f, +0.019820f, -0.001119f, +0.012148f, +0.006802f, +0.014735f, +0.006683f, - -0.005742f, +0.024175f, +0.006812f, +0.009214f, -0.008842f, -0.003371f, +0.008822f, -0.011612f, -0.012456f, -0.017973f, - +0.010198f, -0.007393f, +0.009727f, +0.000777f, +0.015733f, -0.006830f, +0.007774f, -0.010228f, +0.005531f, -0.017552f, - -0.003059f, +0.001339f, +0.000982f, -0.003977f, -0.006650f, +0.015393f, +0.001534f, +0.010518f, +0.001066f, +0.003582f, - -0.007849f, +0.003950f, -0.009030f, -0.000990f, -0.000266f, +0.005088f, -0.005387f, +0.001473f, +0.001394f, -0.009861f, - -0.005032f, -0.002296f, -0.006413f, -0.004048f, -0.003470f, +0.002228f, -0.000061f, +0.001439f, +0.003082f, -0.004824f, - -0.005757f, -0.006111f, -0.007283f, +0.004536f, +0.001144f, +0.002302f, -0.004033f, +0.001667f, +0.001442f, +0.001942f, - -0.001166f, -0.000406f, +0.002535f, +0.004140f, +0.000993f, -0.003168f - }, - { - -0.015330f, +0.183692f, -0.042598f, -0.018534f, +0.008643f, +0.006985f, -0.045937f, +0.026815f, +0.081074f, +0.004521f, - -0.031585f, -0.011249f, +0.007178f, +0.018369f, +0.015137f, -0.013525f, -0.014235f, -0.025445f, +0.000303f, -0.007623f, - +0.009782f, +0.000014f, -0.005366f, +0.004132f, -0.008071f, -0.009389f, -0.005871f, +0.011792f, -0.005657f, -0.028522f, - -0.002409f, -0.008389f, +0.014607f, +0.006108f, +0.016969f, -0.014851f, +0.001718f, -0.019006f, +0.000355f, -0.009543f, - -0.003722f, +0.006171f, -0.013999f, +0.008440f, +0.004320f, -0.000042f, -0.014147f, -0.016105f, +0.007576f, -0.001421f, - -0.009172f, -0.000687f, +0.002294f, -0.000274f, +0.004047f, -0.003633f, -0.000089f, -0.000001f, -0.012903f, +0.007291f, - +0.000181f, +0.010706f, +0.004877f, -0.001080f, -0.000311f, -0.001972f, -0.000577f, -0.002234f, -0.005038f, +0.000342f, - -0.003216f, +0.003563f, +0.005463f, -0.002514f, -0.004380f, +0.001522f, +0.001605f, +0.005080f, -0.004904f, +0.004675f, - -0.001612f, -0.000295f, -0.005501f, +0.004514f, -0.006406f, -0.000129f, -0.003112f, +0.001432f, -0.003160f, +0.001071f, - -0.003257f, -0.001152f, -0.003316f, +0.004936f, +0.001243f, -0.002351f - }, - { - +0.001570f, -0.093088f, +0.019595f, -0.012280f, +0.007700f, -0.020111f, -0.003884f, +0.007440f, +0.004461f, +0.001452f, - +0.008372f, +0.020737f, -0.001422f, +0.009625f, -0.014956f, +0.006989f, -0.002478f, +0.014408f, -0.018665f, -0.002157f, - -0.012034f, +0.016346f, +0.000161f, +0.017993f, -0.005104f, +0.010822f, +0.010964f, +0.005403f, +0.027376f, -0.003297f, - +0.004203f, +0.028757f, +0.002286f, +0.016283f, +0.011420f, -0.009283f, -0.008250f, +0.024062f, +0.015640f, +0.010224f, - +0.018421f, +0.003410f, +0.010934f, +0.011475f, +0.002740f, -0.010191f, +0.001332f, +0.022431f, +0.003248f, +0.000616f, - +0.011286f, -0.003057f, +0.002129f, -0.009487f, +0.001309f, -0.007982f, +0.004090f, -0.006008f, -0.005977f, +0.000182f, - +0.005857f, -0.006665f, +0.008795f, +0.008053f, +0.006801f, +0.002061f, -0.009691f, -0.001959f, +0.002252f, +0.001231f, - +0.002412f, +0.001280f, +0.005845f, -0.007001f, -0.005124f, +0.001746f, -0.000935f, +0.003201f, +0.008122f, -0.007590f, - -0.006072f, +0.003211f, +0.001358f, -0.001299f, -0.000779f, +0.002321f, +0.003803f, +0.002632f, +0.000117f, -0.001014f, - +0.003644f, +0.003661f, -0.001206f, +0.004967f, -0.000956f, -0.001924f - }, - { - -0.002170f, -0.208905f, +0.061525f, -0.018328f, -0.020898f, -0.022671f, -0.047474f, +0.012242f, -0.007397f, +0.013651f, - -0.040959f, -0.014857f, -0.014094f, +0.017028f, -0.023281f, -0.018317f, +0.006240f, -0.010914f, +0.005261f, -0.019295f, - +0.004400f, +0.002584f, -0.011122f, +0.014543f, -0.020317f, +0.002102f, -0.024054f, -0.013505f, -0.001595f, -0.000519f, - +0.009590f, -0.000767f, -0.020612f, -0.011376f, +0.008195f, +0.005666f, +0.003168f, -0.001552f, -0.005149f, +0.005382f, - +0.015364f, -0.015019f, +0.002296f, -0.002669f, +0.006958f, -0.005383f, +0.004858f, -0.010491f, +0.011525f, +0.004449f, - +0.010538f, +0.003259f, -0.004183f, -0.012133f, +0.005382f, -0.007703f, +0.009778f, -0.004639f, -0.003485f, +0.004595f, - +0.005729f, -0.002987f, +0.001275f, +0.005320f, -0.004954f, -0.004814f, +0.007993f, +0.007436f, +0.004062f, +0.008883f, - +0.008987f, +0.006848f, -0.000061f, +0.002626f, -0.005863f, +0.009683f, +0.005117f, +0.003719f, -0.003601f, +0.001832f, - -0.007562f, -0.001961f, -0.002064f, +0.006864f, +0.000264f, -0.005180f, -0.001358f, +0.000014f, -0.001312f, +0.002116f, - -0.001858f, +0.001952f, +0.005867f, +0.004866f, +0.002249f, -0.000985f - }, - { - +0.003717f, -0.004608f, -0.029781f, -0.005521f, -0.003705f, -0.009974f, -0.021285f, +0.004005f, +0.022882f, -0.004373f, - +0.004108f, -0.012403f, +0.015462f, -0.037023f, +0.051828f, -0.010967f, +0.001644f, +0.007402f, +0.012384f, -0.004198f, - -0.023648f, +0.003958f, +0.000436f, +0.002651f, -0.031679f, +0.015343f, +0.001699f, +0.007498f, +0.012501f, -0.044819f, - -0.024343f, +0.008234f, +0.024100f, +0.001060f, +0.014911f, -0.004716f, +0.002222f, +0.004165f, +0.004896f, -0.007539f, - -0.012696f, +0.002510f, -0.005269f, -0.001639f, -0.010222f, +0.001150f, +0.001275f, -0.003557f, -0.007022f, -0.007283f, - +0.011971f, +0.006167f, +0.003592f, -0.001347f, -0.002411f, +0.005455f, -0.006392f, +0.002648f, -0.001411f, +0.009149f, - +0.001977f, -0.010948f, -0.005626f, +0.008424f, -0.001735f, +0.002005f, -0.003910f, +0.000825f, +0.000668f, -0.001183f, - +0.004618f, +0.001162f, -0.004849f, +0.000233f, +0.001232f, +0.000048f, -0.003835f, +0.000377f, -0.000537f, +0.006707f, - +0.007806f, +0.002096f, +0.000442f, -0.002167f, -0.000312f, -0.001785f, +0.000116f, -0.002250f, -0.002265f, -0.001380f, - -0.003043f, -0.000177f, -0.001729f, +0.000055f, +0.003822f, -0.007051f - }, - { - -0.008563f, -0.130346f, +0.016786f, +0.003924f, +0.016339f, +0.005727f, -0.035318f, +0.005955f, -0.015946f, -0.000205f, - -0.009639f, -0.030825f, -0.004764f, +0.010088f, +0.037581f, +0.006841f, +0.001748f, -0.015465f, +0.001483f, -0.003301f, - +0.033071f, -0.001256f, +0.054065f, +0.017989f, -0.001337f, -0.012744f, -0.002484f, -0.002996f, +0.006377f, -0.018390f, - -0.037228f, -0.027004f, +0.008698f, +0.017429f, +0.006433f, -0.014915f, +0.005782f, +0.016954f, +0.019800f, +0.002988f, - +0.001183f, +0.011023f, -0.009714f, +0.004885f, -0.001050f, -0.016276f, +0.004968f, +0.021738f, +0.004405f, +0.001587f, - -0.013441f, -0.000454f, -0.006525f, -0.001605f, +0.001151f, -0.007986f, -0.001814f, +0.003689f, +0.003778f, -0.000443f, - -0.004079f, +0.000605f, -0.007378f, +0.000687f, +0.000344f, +0.002556f, +0.007193f, +0.012868f, -0.001856f, +0.002316f, - -0.001594f, +0.004491f, +0.003209f, -0.000186f, -0.003540f, -0.008302f, -0.003522f, +0.003608f, -0.001111f, -0.008072f, - -0.004345f, +0.008729f, -0.000708f, -0.000980f, +0.002526f, -0.000441f, +0.005187f, -0.000566f, -0.004032f, +0.002458f, - +0.005634f, +0.002100f, +0.002801f, +0.001590f, +0.001434f, +0.000811f - } - }, - { - { - -0.001143f, +0.068575f, -0.005898f, +0.048672f, +0.001942f, +0.000487f, -0.005893f, -0.003453f, +0.012261f, -0.007128f, - +0.020831f, -0.009744f, +0.020686f, +0.006728f, -0.018904f, -0.014113f, -0.016245f, -0.030090f, -0.024684f, -0.015735f, - +0.016716f, +0.002956f, -0.011709f, +0.018196f, -0.001015f, -0.001116f, -0.000541f, -0.000476f, +0.008752f, +0.000111f, - +0.016900f, -0.004444f, +0.009528f, -0.002057f, -0.004987f, -0.003335f, +0.002764f, +0.012761f, -0.002289f, +0.011006f, - -0.000668f, +0.004252f, -0.004279f, +0.000500f, +0.012754f, -0.003631f, +0.001771f, +0.011643f, -0.003275f, -0.014367f, - -0.007954f, -0.000084f, -0.000499f, +0.003713f, +0.004314f, -0.007540f, -0.011072f, -0.002441f, +0.003512f, +0.002246f, - -0.000810f, -0.000982f, +0.008841f, -0.005586f, -0.001719f, +0.006043f, +0.000701f, +0.002096f, -0.001565f, -0.000327f, - +0.004353f, -0.005521f, +0.000773f, +0.007451f, -0.002282f, -0.001915f, +0.000502f, -0.002402f, +0.003881f, +0.004121f, - -0.003196f, +0.007759f, -0.000401f, +0.003347f, -0.001283f, +0.001026f, +0.001037f, -0.001209f, -0.000308f, +0.002559f, - -0.000112f, -0.000786f, -0.003310f, -0.002840f, -0.000177f, +0.000467f - }, - { - -0.019514f, +0.150088f, +0.087840f, -0.037265f, -0.001091f, +0.011784f, +0.002981f, -0.040237f, -0.009647f, -0.010542f, - +0.007258f, +0.013813f, -0.004088f, -0.007798f, -0.022093f, +0.002551f, -0.002765f, -0.011901f, -0.001084f, -0.003725f, - +0.003118f, -0.001518f, +0.009865f, -0.001381f, -0.005341f, +0.004032f, +0.010645f, -0.021300f, -0.002241f, +0.000941f, - -0.010021f, -0.002898f, +0.001139f, +0.008990f, -0.000910f, +0.019277f, +0.012249f, -0.008984f, -0.018268f, -0.004129f, - +0.004114f, -0.000847f, +0.004774f, -0.009118f, +0.003723f, -0.000058f, -0.001739f, +0.008627f, +0.006169f, -0.007117f, - -0.002186f, -0.010101f, -0.006553f, -0.001294f, +0.004012f, -0.005970f, -0.003240f, +0.003693f, -0.010121f, -0.000464f, - +0.007261f, +0.001735f, +0.000824f, -0.001624f, -0.006098f, +0.002451f, -0.000348f, +0.000060f, +0.001920f, -0.003100f, - +0.000792f, -0.002497f, -0.000652f, -0.003042f, +0.000847f, -0.000221f, +0.003454f, +0.002646f, +0.001093f, +0.001203f, - -0.000842f, -0.000768f, +0.000606f, -0.001677f, -0.000818f, -0.003155f, +0.001041f, +0.002518f, -0.000730f, +0.000159f, - -0.001433f, -0.000998f, -0.000318f, -0.001044f, +0.002412f, -0.000891f - }, - { - -0.001328f, -0.224486f, -0.018828f, +0.071426f, -0.017968f, +0.009861f, +0.007308f, +0.002954f, -0.028475f, +0.011202f, - -0.000005f, -0.030057f, +0.017213f, +0.005393f, +0.010614f, +0.006406f, +0.000426f, +0.001337f, -0.009842f, +0.013573f, - +0.007971f, +0.002027f, -0.018924f, -0.000539f, -0.004448f, -0.013979f, -0.009871f, -0.003672f, +0.002159f, +0.005183f, - +0.019444f, +0.006694f, -0.005337f, -0.014764f, +0.011891f, +0.009926f, +0.009514f, +0.009010f, -0.007340f, -0.000207f, - +0.008083f, -0.003723f, -0.003094f, -0.001204f, +0.003962f, +0.007598f, -0.014918f, -0.005282f, -0.000789f, +0.005717f, - +0.002018f, +0.000041f, +0.001387f, -0.000502f, +0.002086f, +0.002669f, -0.000345f, +0.001724f, -0.011352f, +0.001573f, - -0.000552f, +0.003530f, +0.000630f, -0.001800f, -0.004333f, -0.002844f, -0.002135f, -0.004752f, -0.000975f, +0.002095f, - -0.002018f, -0.003082f, +0.003170f, -0.002040f, -0.001452f, -0.001800f, +0.000435f, -0.002457f, -0.002082f, -0.000948f, - -0.001543f, +0.002431f, -0.001791f, -0.000936f, +0.001171f, -0.000019f, +0.000105f, -0.003906f, -0.004285f, +0.001234f, - +0.000070f, -0.001079f, -0.002675f, -0.000769f, +0.000318f, +0.000185f - }, - { - -0.000715f, -0.057882f, -0.022096f, +0.029521f, -0.000332f, -0.001627f, +0.003221f, +0.000188f, +0.006593f, +0.000757f, - +0.003193f, +0.015114f, -0.003605f, +0.007292f, +0.003332f, +0.005734f, -0.015620f, -0.007741f, +0.001278f, -0.004893f, - +0.009488f, -0.013542f, +0.009150f, -0.009995f, +0.005477f, -0.008406f, -0.016376f, +0.007576f, +0.012659f, -0.018424f, - +0.018615f, -0.010790f, -0.001054f, +0.000657f, +0.002913f, -0.001626f, +0.015860f, +0.005010f, +0.011295f, -0.003166f, - -0.011501f, +0.005234f, -0.010657f, +0.003711f, -0.000095f, +0.006956f, -0.003357f, -0.002190f, +0.000409f, -0.005929f, - +0.002997f, -0.001631f, -0.003395f, -0.006286f, +0.001037f, +0.002353f, +0.004771f, -0.005593f, +0.001669f, +0.000317f, - -0.001956f, +0.005994f, -0.005967f, +0.000561f, +0.004019f, -0.004858f, +0.001000f, +0.003320f, +0.004438f, +0.005781f, - +0.001857f, +0.000510f, -0.000424f, +0.002946f, +0.001003f, -0.000145f, -0.001641f, -0.005682f, +0.000545f, +0.003388f, - +0.001010f, -0.000268f, -0.002218f, +0.001890f, -0.001822f, -0.003307f, +0.001951f, +0.000476f, -0.004459f, -0.000843f, - -0.000303f, +0.000461f, +0.000339f, -0.001087f, +0.003940f, -0.001706f - }, - { - +0.027734f, -0.010680f, -0.027167f, -0.016215f, +0.003459f, -0.003731f, +0.005124f, -0.015293f, -0.022160f, -0.000010f, - +0.006510f, -0.001900f, -0.004287f, +0.002985f, -0.007554f, +0.001594f, +0.025690f, -0.000397f, +0.021443f, +0.028130f, - +0.010719f, -0.003980f, -0.009312f, -0.006826f, -0.010275f, -0.001280f, -0.009048f, +0.024989f, -0.005887f, -0.008121f, - +0.011006f, -0.013793f, -0.007872f, -0.003405f, +0.004906f, -0.003209f, +0.017967f, +0.007185f, +0.004059f, +0.016960f, - +0.000771f, +0.004536f, +0.003016f, -0.003233f, -0.008576f, +0.001453f, +0.000285f, -0.001302f, -0.001655f, +0.010603f, - -0.000107f, -0.002378f, +0.004938f, -0.001241f, +0.005825f, -0.002283f, -0.000047f, +0.003610f, +0.002614f, -0.004735f, - -0.003340f, -0.002597f, -0.003832f, +0.003048f, +0.003991f, +0.000042f, -0.007351f, -0.001476f, -0.000982f, -0.000645f, - -0.001275f, +0.000315f, -0.002035f, -0.003250f, +0.001445f, -0.004637f, +0.004750f, -0.000317f, +0.001785f, +0.004836f, - -0.001863f, +0.000875f, +0.000582f, +0.003755f, -0.001972f, +0.005717f, +0.000949f, +0.003163f, +0.000455f, -0.000563f, - -0.000430f, -0.000866f, -0.004417f, -0.000208f, +0.002175f, -0.000390f - }, - { - +0.003184f, +0.007806f, +0.003880f, -0.013882f, -0.006110f, +0.003003f, -0.000211f, -0.004711f, +0.006746f, +0.009672f, - +0.006869f, +0.006073f, -0.009043f, -0.012054f, -0.022056f, -0.003790f, -0.016950f, -0.021961f, -0.010519f, -0.006096f, - +0.004609f, -0.004582f, +0.003556f, +0.004551f, -0.000282f, +0.004844f, +0.008621f, -0.000772f, -0.006479f, -0.021205f, - -0.000725f, -0.006573f, +0.008233f, -0.009769f, -0.006219f, +0.000599f, -0.009600f, +0.000234f, -0.007039f, -0.003305f, - -0.009730f, -0.003637f, +0.004155f, -0.008404f, -0.000481f, -0.007459f, +0.011703f, -0.006856f, +0.000304f, -0.003061f, - -0.009816f, +0.001689f, +0.005261f, -0.000090f, -0.003390f, +0.001854f, -0.004803f, +0.004140f, +0.003706f, +0.004458f, - +0.014223f, +0.004497f, +0.000108f, +0.003341f, -0.000305f, -0.004412f, +0.000375f, +0.001595f, +0.002040f, +0.000545f, - -0.002489f, +0.000349f, +0.001684f, -0.004074f, -0.000501f, -0.001557f, -0.003392f, -0.000011f, +0.003076f, +0.001093f, - +0.001408f, -0.000331f, -0.000473f, +0.000561f, +0.001594f, +0.000234f, +0.000731f, -0.002249f, -0.002438f, -0.000365f, - -0.001627f, -0.002075f, +0.003073f, +0.001816f, -0.003343f, -0.001849f - }, - { - +0.022128f, -0.057500f, +0.019618f, -0.005925f, +0.019735f, -0.004215f, +0.004425f, +0.026705f, -0.020653f, -0.015615f, - +0.010703f, +0.001349f, +0.007862f, +0.042323f, -0.003454f, +0.010343f, -0.006430f, -0.019737f, +0.021494f, -0.006835f, - -0.002198f, -0.002578f, +0.025355f, +0.007605f, -0.003318f, +0.005063f, +0.009239f, +0.012728f, -0.000971f, -0.009354f, - +0.007236f, -0.022961f, -0.009368f, +0.008648f, -0.000618f, +0.009778f, -0.011134f, +0.000817f, -0.008140f, +0.000882f, - +0.010699f, +0.010004f, +0.005608f, +0.012291f, -0.002760f, -0.005300f, +0.006362f, +0.001858f, +0.008759f, +0.009600f, - +0.007009f, -0.005996f, +0.002444f, +0.002907f, -0.004485f, +0.005895f, +0.009464f, -0.003403f, +0.002337f, -0.003550f, - -0.000616f, +0.002499f, +0.004847f, +0.000033f, +0.004834f, +0.000400f, +0.000564f, +0.004650f, +0.002753f, +0.005633f, - +0.005759f, -0.002957f, -0.003508f, -0.004110f, +0.004904f, -0.000165f, +0.001206f, -0.000465f, -0.002452f, -0.003893f, - +0.002562f, +0.002141f, -0.000921f, -0.000751f, +0.002201f, +0.002624f, -0.000657f, -0.001010f, -0.000113f, -0.000794f, - -0.000740f, +0.002531f, -0.001086f, +0.000784f, -0.001049f, -0.000874f - }, - { - +0.006384f, -0.064413f, -0.007065f, -0.015080f, -0.003242f, +0.001266f, +0.001807f, -0.005285f, -0.010062f, -0.005209f, - +0.002458f, -0.004954f, +0.000570f, +0.006247f, +0.031468f, -0.009982f, +0.007483f, -0.005818f, -0.014554f, -0.014531f, - -0.025262f, +0.003636f, -0.010449f, +0.001264f, -0.026524f, -0.005455f, -0.011426f, -0.014181f, -0.010075f, +0.003742f, - +0.000594f, -0.001212f, -0.002560f, +0.006268f, -0.002341f, -0.005520f, -0.002508f, -0.011293f, -0.019700f, +0.008351f, - -0.004847f, -0.015274f, -0.007641f, +0.005407f, -0.004617f, +0.001508f, +0.011370f, +0.001722f, +0.010522f, +0.001135f, - -0.004051f, -0.007739f, +0.003837f, -0.003499f, +0.000115f, -0.003199f, -0.005565f, +0.000190f, -0.002832f, -0.001184f, - -0.003476f, +0.003004f, +0.005795f, +0.002622f, +0.001317f, +0.006845f, -0.002268f, -0.003144f, -0.001862f, +0.002533f, - +0.000895f, -0.004549f, +0.004041f, -0.000977f, +0.000309f, +0.003016f, -0.002933f, +0.001218f, -0.003508f, +0.001128f, - -0.000977f, -0.001707f, +0.000382f, -0.000909f, +0.003724f, -0.001081f, -0.003603f, -0.002180f, -0.000487f, -0.001391f, - -0.000252f, -0.000180f, -0.001113f, -0.000863f, -0.000442f, +0.001403f - }, - { - +0.026601f, -0.070384f, +0.009711f, -0.017724f, +0.002638f, +0.008098f, -0.001720f, -0.011152f, -0.013533f, +0.003157f, - +0.038805f, +0.011451f, +0.004871f, +0.013884f, +0.013992f, -0.004630f, -0.058494f, -0.011846f, -0.018006f, -0.010705f, - -0.000699f, -0.000807f, -0.001474f, -0.002898f, -0.000020f, -0.001002f, -0.002807f, +0.006733f, -0.010913f, -0.009805f, - -0.029936f, +0.001567f, -0.007157f, -0.002863f, +0.008752f, +0.012042f, -0.002798f, -0.016984f, +0.004680f, -0.004051f, - -0.020673f, +0.002134f, -0.002971f, -0.001138f, +0.004404f, +0.003253f, +0.005382f, +0.002242f, -0.001118f, +0.001345f, - +0.002085f, +0.000202f, +0.000220f, -0.004549f, +0.005708f, -0.006055f, +0.002249f, -0.004556f, +0.005934f, -0.002622f, - +0.002971f, -0.000743f, -0.001412f, +0.001016f, +0.001560f, -0.004029f, -0.005732f, +0.001099f, +0.002706f, -0.000650f, - +0.005015f, +0.001243f, -0.003916f, +0.001103f, -0.000463f, +0.000173f, +0.003352f, +0.001963f, -0.001570f, +0.005224f, - -0.000898f, +0.001425f, -0.000239f, -0.002052f, +0.004084f, +0.000030f, +0.002038f, -0.000275f, +0.001187f, -0.001534f, - -0.000292f, -0.001351f, -0.003144f, +0.002945f, +0.001854f, +0.000262f - }, - { - -0.004201f, -0.088740f, +0.000268f, -0.018073f, +0.009711f, +0.000881f, +0.019489f, -0.023089f, -0.006320f, +0.003650f, - -0.001914f, -0.009645f, -0.010280f, +0.014329f, -0.005318f, -0.014725f, +0.007101f, +0.001927f, -0.026656f, +0.040479f, - -0.003448f, +0.003178f, +0.000551f, +0.008009f, +0.017888f, -0.000344f, -0.001989f, +0.013825f, +0.009062f, +0.010423f, - +0.004107f, +0.018786f, +0.007249f, -0.002390f, +0.008853f, -0.000330f, -0.004708f, -0.005968f, -0.006606f, -0.006185f, - +0.000572f, -0.000090f, +0.007841f, +0.008641f, -0.004851f, +0.005857f, +0.006427f, -0.000463f, -0.000154f, -0.019273f, - -0.000706f, -0.001019f, -0.003608f, +0.008025f, -0.000869f, +0.004669f, +0.008649f, +0.001301f, +0.008385f, -0.001344f, - -0.001890f, -0.005676f, +0.001169f, -0.003369f, +0.004944f, -0.001734f, -0.007070f, +0.001641f, -0.003067f, -0.002507f, - -0.000383f, -0.004993f, -0.004176f, -0.002882f, -0.007730f, +0.004110f, +0.000987f, -0.002505f, +0.004912f, -0.002637f, - -0.008130f, -0.001395f, -0.007987f, +0.000030f, -0.000085f, +0.000621f, -0.003358f, +0.001835f, +0.000919f, +0.002264f, - -0.002056f, +0.002628f, +0.001291f, +0.001571f, +0.002026f, -0.001453f - }, - { - +0.013697f, +0.136584f, -0.029659f, -0.011855f, -0.006170f, +0.026274f, -0.011679f, +0.048915f, +0.022308f, +0.018499f, - -0.017485f, +0.000308f, +0.026969f, -0.010652f, -0.003446f, +0.003895f, -0.012234f, -0.018757f, -0.009949f, -0.005596f, - +0.008095f, +0.008788f, +0.008967f, -0.009677f, -0.011910f, -0.011424f, -0.009280f, +0.024935f, -0.017242f, -0.023721f, - +0.000876f, +0.009992f, -0.002307f, +0.001078f, +0.028525f, -0.003733f, -0.018951f, -0.014651f, -0.001441f, -0.018460f, - +0.000777f, +0.005166f, -0.006269f, +0.007588f, -0.001297f, -0.000510f, -0.020192f, -0.005266f, +0.004607f, -0.007554f, - +0.001244f, +0.000474f, +0.003902f, +0.002344f, +0.004459f, -0.003528f, -0.005094f, -0.003418f, +0.002445f, +0.000521f, - -0.001651f, +0.010354f, +0.005913f, -0.000884f, -0.000638f, +0.002481f, -0.001073f, -0.008233f, -0.003161f, +0.002267f, - -0.002189f, +0.005328f, -0.002364f, -0.001090f, -0.002552f, +0.001091f, +0.002699f, +0.002258f, -0.003079f, +0.002337f, - +0.001884f, -0.001237f, -0.002571f, -0.002100f, -0.001579f, -0.002674f, -0.002310f, -0.000292f, -0.000071f, -0.000716f, - -0.004123f, -0.001824f, -0.000240f, +0.001222f, +0.002713f, -0.002381f - }, - { - -0.001548f, -0.062638f, +0.001029f, -0.004092f, -0.012280f, -0.010500f, +0.002613f, -0.008326f, +0.013909f, -0.001664f, - +0.022736f, +0.012445f, +0.018618f, -0.015711f, -0.008955f, +0.002334f, -0.001407f, -0.004700f, -0.013177f, +0.013799f, - +0.007391f, +0.003653f, +0.005574f, -0.000913f, +0.015002f, +0.007030f, +0.015033f, +0.006969f, +0.014568f, -0.014898f, - +0.023073f, +0.017756f, +0.008230f, +0.010113f, +0.008017f, -0.012017f, +0.008505f, +0.021037f, +0.007730f, +0.010619f, - +0.004236f, +0.005603f, +0.011795f, +0.005464f, +0.006691f, -0.005660f, -0.000098f, +0.016333f, +0.008388f, -0.008175f, - +0.011015f, +0.008376f, -0.004848f, -0.004745f, -0.005139f, -0.004111f, +0.001281f, -0.000885f, -0.007826f, -0.001710f, - +0.009713f, -0.005349f, +0.008230f, +0.006780f, +0.007221f, -0.003248f, +0.001917f, -0.007969f, +0.005923f, -0.000373f, - +0.000170f, +0.003956f, +0.000511f, -0.001011f, -0.006746f, -0.004406f, +0.006192f, +0.001538f, +0.009791f, -0.010936f, - -0.002326f, +0.005094f, -0.001715f, -0.001878f, -0.000245f, +0.000088f, +0.003844f, +0.003648f, -0.001259f, +0.000295f, - +0.004485f, +0.001568f, +0.001024f, +0.002747f, +0.001174f, -0.002193f - }, - { - -0.005779f, -0.109258f, -0.019697f, +0.011958f, -0.054739f, -0.029975f, -0.040327f, -0.006133f, +0.013302f, -0.014056f, - -0.030199f, -0.012238f, -0.023533f, +0.033846f, +0.011531f, -0.037488f, -0.004735f, +0.001687f, -0.009596f, -0.004338f, - -0.003174f, +0.008041f, -0.004001f, -0.016754f, -0.002372f, -0.003533f, -0.016922f, -0.013669f, -0.003978f, -0.015142f, - +0.008845f, +0.005708f, -0.010469f, -0.009663f, -0.004573f, +0.007956f, +0.016815f, -0.015501f, -0.008446f, +0.020983f, - -0.000510f, -0.005130f, +0.002504f, -0.000245f, -0.004381f, +0.008709f, +0.000152f, +0.001741f, -0.005499f, +0.001631f, - +0.006027f, +0.001673f, -0.000567f, -0.004398f, -0.000565f, +0.003689f, +0.001863f, -0.005364f, +0.010767f, +0.000166f, - -0.001725f, +0.001671f, +0.001010f, +0.001808f, -0.003650f, -0.003525f, +0.005229f, +0.010754f, +0.003604f, +0.005509f, - +0.012599f, +0.000492f, +0.001666f, +0.002693f, +0.001501f, +0.004253f, +0.005416f, +0.004153f, -0.003968f, -0.000306f, - -0.003957f, -0.002615f, -0.005637f, +0.004273f, -0.000842f, +0.000228f, -0.003568f, +0.002151f, -0.001351f, -0.002386f, - +0.001436f, +0.001534f, +0.001585f, +0.004998f, +0.001512f, +0.000891f - }, - { - -0.007193f, -0.031339f, +0.003054f, +0.002446f, -0.009944f, -0.018991f, -0.009511f, +0.001380f, +0.010936f, +0.007623f, - -0.000368f, -0.007947f, +0.006194f, +0.028940f, -0.079654f, +0.031136f, +0.009556f, -0.001371f, -0.005221f, -0.007321f, - -0.023842f, +0.011574f, -0.015454f, -0.000573f, +0.000177f, +0.003169f, +0.007673f, +0.000929f, -0.010848f, -0.020594f, - -0.010323f, -0.000017f, +0.028047f, -0.004673f, +0.011284f, -0.003861f, +0.007580f, -0.000725f, -0.009305f, +0.007393f, - -0.015885f, -0.001906f, -0.006072f, +0.000627f, -0.012014f, +0.000868f, -0.002454f, +0.002148f, -0.011972f, +0.010210f, - -0.005432f, +0.013176f, -0.000764f, -0.001600f, +0.004988f, +0.000381f, -0.006449f, +0.003411f, +0.003314f, +0.002762f, - -0.004295f, -0.003867f, -0.006387f, +0.006288f, +0.002532f, -0.002954f, -0.002762f, +0.000182f, +0.003397f, -0.001296f, - +0.004190f, +0.004455f, -0.006513f, -0.000467f, -0.001436f, -0.001314f, +0.000418f, -0.001065f, +0.000746f, +0.004063f, - +0.006009f, +0.005030f, +0.001862f, -0.000382f, +0.001147f, -0.004963f, -0.001642f, -0.002832f, -0.000198f, -0.001597f, - -0.001219f, -0.002280f, -0.000678f, +0.001662f, +0.000124f, -0.001572f - }, - { - +0.003673f, -0.095424f, -0.002023f, +0.003660f, +0.013735f, -0.009811f, -0.024080f, -0.012281f, -0.010980f, -0.005570f, - -0.015300f, +0.003124f, -0.033142f, +0.017825f, +0.048239f, -0.011691f, +0.009460f, -0.019477f, +0.009031f, +0.000935f, - +0.006196f, +0.030701f, +0.027193f, +0.013346f, +0.004876f, -0.012159f, +0.000851f, -0.002863f, -0.010866f, -0.007417f, - -0.013494f, -0.040949f, +0.014341f, +0.014644f, -0.006701f, -0.007827f, +0.009679f, +0.012091f, +0.005534f, +0.016438f, - -0.009184f, +0.005837f, -0.002699f, +0.008551f, -0.008187f, -0.003834f, +0.000813f, +0.018933f, +0.000316f, -0.005065f, - -0.006034f, -0.000475f, -0.001786f, +0.001887f, -0.007440f, +0.002612f, -0.011106f, +0.009147f, -0.002512f, +0.000468f, - +0.002714f, -0.004311f, -0.003652f, -0.007620f, +0.001499f, +0.004656f, +0.005829f, +0.009886f, +0.003196f, +0.002916f, - -0.004985f, +0.001273f, +0.001043f, -0.002196f, -0.001435f, -0.003963f, -0.004811f, -0.002440f, -0.002479f, +0.000401f, - -0.004845f, +0.004257f, +0.001384f, +0.003732f, -0.000192f, +0.001910f, +0.002470f, -0.000922f, +0.000626f, +0.002270f, - +0.001486f, +0.002280f, +0.002594f, +0.004024f, -0.000309f, +0.000684f - } - }, - { - { - -0.001082f, +0.107383f, +0.008464f, -0.018373f, -0.013470f, +0.008905f, -0.003465f, -0.008446f, -0.004391f, -0.028271f, - +0.006924f, -0.024917f, +0.006164f, +0.001162f, -0.015862f, -0.013203f, -0.011002f, -0.008749f, +0.000951f, +0.008645f, - +0.011120f, -0.010911f, -0.009433f, +0.037765f, +0.011901f, +0.013325f, +0.004245f, -0.005941f, +0.002360f, -0.003736f, - +0.001364f, -0.021687f, -0.003317f, -0.005252f, +0.012865f, +0.002561f, -0.015700f, -0.002599f, -0.007193f, +0.001730f, - -0.010713f, +0.003728f, -0.000297f, -0.001084f, +0.002959f, -0.009747f, -0.004225f, +0.002502f, +0.001246f, -0.008068f, - +0.000884f, +0.001316f, -0.002067f, +0.002786f, +0.001337f, -0.002614f, -0.012298f, -0.007841f, +0.001032f, +0.002827f, - +0.008915f, +0.008823f, +0.007014f, -0.005336f, -0.001839f, +0.002274f, +0.003194f, +0.001743f, -0.004502f, -0.001667f, - +0.003683f, -0.003616f, +0.001222f, +0.006040f, -0.001752f, -0.000801f, -0.002168f, -0.006568f, +0.000892f, +0.002952f, - -0.006307f, +0.004919f, +0.001737f, +0.004566f, -0.000647f, -0.000585f, -0.001252f, +0.000754f, +0.000865f, +0.003157f, - +0.000785f, +0.001334f, -0.000268f, -0.000981f, -0.001871f, +0.000700f - }, - { - +0.023258f, +0.039554f, -0.063653f, -0.035015f, -0.022437f, -0.006544f, -0.001945f, -0.024329f, -0.006283f, -0.012603f, - +0.030405f, +0.050062f, +0.006561f, -0.000582f, -0.013920f, +0.012392f, -0.001509f, -0.010800f, +0.022467f, +0.016408f, - -0.006292f, -0.018805f, -0.010173f, -0.004443f, +0.010591f, +0.007806f, +0.008264f, -0.031961f, +0.000676f, +0.007225f, - -0.004165f, +0.022556f, -0.000642f, -0.005107f, -0.010836f, +0.014392f, +0.017805f, +0.009889f, -0.003385f, +0.000503f, - +0.002118f, +0.003689f, +0.004866f, -0.015292f, +0.001257f, +0.000841f, +0.002361f, +0.001656f, +0.001986f, -0.000719f, - +0.004429f, -0.008111f, -0.008510f, -0.002599f, +0.005878f, +0.000033f, -0.004713f, -0.002412f, -0.006686f, +0.004863f, - +0.006094f, -0.000405f, -0.002131f, -0.007274f, -0.010914f, -0.002636f, +0.000942f, +0.002634f, +0.003104f, -0.000382f, - +0.003806f, -0.006877f, -0.006418f, -0.005535f, +0.002654f, +0.000086f, -0.000829f, +0.001582f, -0.002655f, -0.001908f, - +0.000033f, -0.000542f, -0.000184f, -0.002695f, +0.000339f, +0.000173f, +0.001760f, +0.000996f, -0.003150f, -0.000742f, - -0.001871f, -0.003152f, -0.000017f, +0.001629f, +0.003886f, -0.000267f - }, - { - -0.002277f, -0.155573f, +0.048633f, +0.103840f, +0.004709f, +0.014250f, +0.004905f, -0.006369f, -0.021310f, +0.017196f, - -0.008577f, -0.032650f, -0.003111f, -0.001629f, +0.008651f, -0.001666f, -0.006839f, +0.002029f, +0.007284f, +0.028602f, - +0.015463f, +0.006029f, -0.006166f, +0.009681f, -0.008352f, -0.011766f, -0.009172f, +0.002495f, +0.003843f, -0.007666f, - -0.005862f, +0.001742f, +0.006404f, -0.007418f, +0.012575f, +0.001292f, -0.002029f, +0.005607f, -0.000900f, +0.001845f, - +0.011807f, +0.005508f, -0.003939f, -0.008575f, -0.003577f, +0.002255f, -0.010563f, -0.006784f, -0.004777f, +0.003846f, - -0.001296f, +0.000933f, +0.000336f, +0.002857f, -0.001779f, -0.002697f, -0.003396f, +0.006221f, -0.003199f, +0.004899f, - +0.001062f, +0.002817f, -0.002087f, +0.000071f, -0.001333f, +0.001486f, -0.000169f, -0.005970f, -0.003558f, +0.002843f, - +0.001941f, -0.003275f, +0.002605f, -0.000495f, -0.000754f, +0.003294f, +0.007460f, +0.002648f, +0.000500f, +0.000800f, - -0.000968f, +0.001553f, -0.002835f, +0.001770f, +0.001950f, -0.001075f, +0.001820f, -0.000139f, -0.000442f, +0.001336f, - -0.000761f, +0.001054f, +0.001728f, +0.000760f, -0.001155f, +0.000876f - }, - { - -0.002614f, -0.008750f, +0.009887f, +0.015734f, -0.000818f, -0.000282f, +0.001991f, -0.002617f, -0.003555f, +0.010103f, - +0.010026f, +0.001063f, -0.004257f, -0.002194f, -0.018820f, +0.005825f, -0.001394f, -0.011446f, +0.003282f, -0.003547f, - +0.003009f, -0.012594f, +0.014115f, -0.027053f, -0.005342f, -0.001049f, -0.019575f, -0.011549f, -0.002163f, -0.015616f, - +0.033926f, +0.002172f, +0.001741f, +0.008337f, +0.003079f, +0.002780f, +0.011620f, -0.011340f, -0.001697f, -0.002591f, - -0.003102f, +0.003331f, -0.015854f, +0.006234f, -0.007715f, -0.000115f, -0.005760f, -0.002769f, -0.001356f, -0.002127f, - +0.007204f, -0.001340f, +0.003108f, +0.006627f, +0.005494f, +0.000014f, +0.003512f, -0.002876f, +0.000055f, -0.002379f, - -0.005228f, +0.009594f, +0.000018f, +0.002019f, +0.002347f, -0.005054f, +0.000652f, +0.000972f, +0.000731f, +0.008889f, - +0.004155f, +0.000773f, -0.003070f, -0.000568f, +0.000550f, +0.004934f, +0.001652f, -0.004505f, +0.003375f, +0.001358f, - +0.000159f, +0.007261f, +0.000212f, -0.000880f, -0.001250f, -0.004612f, -0.000710f, +0.000197f, -0.002967f, -0.000895f, - -0.001039f, +0.000125f, +0.001655f, -0.001353f, +0.002406f, -0.000556f - }, - { - -0.018082f, -0.070411f, -0.003224f, -0.006998f, +0.002018f, -0.003132f, +0.006773f, -0.001424f, -0.007300f, +0.009096f, - -0.014182f, -0.001360f, +0.008565f, +0.018984f, -0.006365f, -0.010578f, +0.018752f, +0.009659f, -0.004456f, -0.021502f, - +0.001809f, +0.001669f, -0.008224f, +0.007175f, +0.005711f, +0.006135f, +0.007493f, +0.028798f, -0.009652f, -0.020182f, - -0.007628f, -0.016247f, -0.007387f, -0.008596f, -0.005494f, -0.014711f, +0.006614f, -0.001329f, -0.010842f, +0.001062f, - -0.014890f, +0.002288f, +0.007145f, +0.010494f, +0.005162f, +0.000050f, -0.000002f, +0.003075f, -0.001855f, +0.010174f, - -0.005029f, -0.005076f, +0.003738f, +0.000856f, +0.006814f, -0.000363f, +0.006215f, +0.002360f, +0.000580f, -0.009186f, - -0.004458f, +0.000528f, -0.004453f, +0.004831f, +0.002056f, -0.003765f, -0.001012f, -0.000370f, +0.001859f, +0.004461f, - -0.000588f, +0.001726f, +0.003446f, -0.004305f, -0.000688f, -0.004095f, +0.005330f, -0.000266f, -0.000361f, +0.002557f, - -0.002499f, +0.000443f, -0.000053f, +0.004348f, -0.004175f, +0.001499f, -0.002432f, +0.003527f, +0.003193f, -0.000602f, - -0.001066f, -0.001088f, -0.002523f, -0.001275f, -0.000541f, +0.000028f - }, - { - +0.000170f, -0.004405f, +0.025914f, -0.010818f, -0.006718f, +0.007430f, -0.000159f, -0.007452f, -0.004567f, -0.007126f, - +0.000058f, +0.010675f, -0.008308f, +0.002405f, -0.012085f, -0.004551f, -0.000820f, -0.012647f, +0.001176f, -0.007862f, - +0.002352f, -0.002578f, -0.000790f, -0.010980f, -0.000075f, +0.006891f, -0.006579f, -0.009725f, -0.003750f, -0.038584f, - -0.005651f, -0.006085f, +0.006330f, +0.004393f, +0.008769f, +0.016879f, +0.001949f, +0.005835f, +0.011445f, +0.015331f, - +0.012276f, +0.014849f, +0.014102f, -0.008919f, -0.002770f, -0.006600f, +0.011119f, -0.005190f, +0.004317f, +0.004801f, - -0.005352f, +0.004652f, -0.002191f, -0.002555f, -0.000924f, +0.004203f, +0.000534f, +0.006797f, +0.003661f, +0.000641f, - +0.007940f, -0.000153f, -0.000957f, +0.002301f, -0.001645f, -0.005457f, +0.002535f, +0.003742f, -0.001061f, +0.001111f, - +0.003516f, +0.001952f, +0.002056f, -0.000356f, -0.000297f, -0.003267f, -0.000449f, +0.002397f, +0.000415f, -0.000192f, - +0.000611f, -0.003071f, -0.001745f, -0.001054f, -0.000175f, +0.003796f, +0.001943f, -0.001764f, -0.004495f, -0.002678f, - -0.001070f, -0.002468f, +0.000552f, -0.000883f, -0.002206f, +0.000194f - }, - { - -0.006944f, -0.124001f, +0.015987f, +0.001441f, +0.000171f, -0.010147f, -0.017614f, +0.003140f, -0.015442f, -0.002258f, - +0.014695f, +0.035257f, +0.005466f, +0.005412f, -0.011713f, +0.016213f, +0.009450f, -0.004511f, +0.017653f, -0.003304f, - +0.006742f, -0.009208f, +0.005331f, -0.009876f, -0.014107f, +0.004636f, +0.014145f, +0.026447f, -0.006324f, -0.012914f, - +0.005455f, -0.026767f, -0.011904f, +0.013674f, +0.006274f, +0.010740f, -0.011721f, +0.012808f, +0.002224f, +0.010559f, - +0.009649f, +0.005648f, -0.006445f, -0.005037f, -0.008745f, -0.011347f, +0.001117f, +0.000762f, +0.001106f, -0.001292f, - -0.000315f, -0.005158f, -0.001212f, +0.000023f, -0.002711f, -0.001491f, +0.002249f, -0.009234f, -0.002218f, -0.006619f, - +0.001712f, +0.003584f, +0.005487f, -0.003668f, +0.000270f, -0.002932f, -0.001081f, +0.006714f, +0.004741f, +0.001932f, - +0.000650f, -0.004596f, +0.000976f, +0.002258f, +0.004574f, +0.000183f, -0.000015f, -0.002324f, -0.000619f, -0.003325f, - +0.003684f, +0.001679f, -0.003573f, -0.001101f, +0.003052f, +0.001984f, +0.002129f, -0.000840f, -0.001038f, +0.000985f, - +0.001054f, +0.004769f, -0.001250f, +0.001176f, +0.000700f, -0.002289f - }, - { - +0.001548f, -0.065743f, +0.046074f, +0.011178f, +0.000153f, -0.007384f, +0.004819f, -0.000624f, -0.003539f, -0.002027f, - +0.007857f, -0.008211f, -0.024988f, +0.003278f, +0.054968f, +0.001641f, +0.025051f, +0.004736f, -0.017200f, -0.019781f, - -0.026105f, +0.018071f, -0.007180f, -0.002102f, -0.018235f, -0.003361f, +0.006205f, +0.013703f, +0.002408f, -0.015228f, - -0.001573f, +0.005214f, +0.004609f, +0.012857f, +0.005163f, +0.006529f, +0.007367f, -0.004019f, -0.004913f, +0.013686f, - +0.010043f, -0.000649f, -0.002990f, +0.002064f, -0.008219f, -0.000389f, -0.001606f, -0.004433f, +0.000432f, -0.006221f, - +0.005013f, -0.000062f, +0.003420f, +0.002022f, +0.002821f, +0.003588f, -0.003042f, -0.003768f, +0.000314f, +0.001551f, - +0.003054f, +0.005264f, +0.003185f, -0.002751f, -0.003591f, +0.005216f, +0.000107f, -0.001468f, +0.000858f, +0.002729f, - -0.000168f, -0.005041f, -0.002563f, -0.005832f, +0.002717f, +0.004096f, -0.001732f, +0.000401f, -0.004052f, +0.004238f, - +0.004647f, +0.002590f, +0.000875f, -0.004550f, +0.003278f, +0.001086f, -0.003662f, -0.000844f, +0.001606f, +0.000754f, - +0.000472f, +0.000095f, -0.001858f, -0.001642f, -0.001765f, +0.000309f - }, - { - -0.015020f, -0.133924f, +0.021967f, -0.001632f, -0.012758f, +0.001000f, -0.002270f, +0.009533f, -0.001587f, +0.004538f, - +0.001176f, -0.009422f, +0.014160f, +0.018939f, +0.018345f, -0.025259f, -0.033611f, +0.027841f, +0.007910f, -0.001963f, - -0.009632f, -0.000223f, +0.001665f, +0.007118f, +0.009626f, -0.002728f, +0.004963f, +0.001775f, -0.011242f, -0.001429f, - -0.019661f, +0.011633f, +0.009125f, +0.001613f, -0.004633f, -0.005806f, -0.009642f, -0.009811f, +0.007846f, +0.002476f, - -0.008346f, +0.009151f, +0.003665f, +0.003443f, -0.005227f, -0.007306f, -0.000444f, -0.003091f, -0.004426f, +0.003612f, - +0.003608f, +0.000652f, -0.001043f, -0.003213f, +0.006903f, -0.008294f, +0.001141f, -0.008990f, +0.003420f, -0.003805f, - +0.003979f, +0.002785f, -0.000598f, -0.005755f, -0.003035f, -0.004410f, -0.006131f, -0.000809f, +0.000591f, +0.000069f, - +0.002743f, +0.000847f, +0.000970f, +0.003443f, +0.000033f, -0.001821f, -0.002013f, +0.002279f, -0.001394f, +0.002593f, - -0.003734f, -0.000332f, -0.002098f, -0.003792f, +0.001263f, -0.003154f, +0.000944f, -0.001945f, -0.000705f, +0.000430f, - +0.000536f, -0.002724f, -0.003848f, +0.000322f, -0.000575f, -0.001401f - }, - { - +0.000918f, -0.069912f, +0.004579f, -0.010570f, -0.000508f, -0.035393f, -0.009375f, -0.004558f, +0.006429f, +0.013680f, - +0.005227f, -0.014387f, -0.019091f, +0.016040f, -0.005036f, +0.006588f, +0.005451f, +0.003287f, -0.019357f, +0.016360f, - -0.013156f, +0.012190f, -0.009421f, -0.020347f, -0.008431f, -0.016464f, -0.028947f, -0.003350f, -0.002045f, +0.006407f, - +0.006713f, +0.002581f, -0.009894f, -0.015944f, +0.003830f, +0.003490f, -0.002131f, +0.007790f, +0.009263f, +0.004170f, - +0.002176f, +0.004707f, +0.007393f, +0.005464f, -0.002562f, +0.015997f, +0.015522f, +0.008712f, +0.003246f, -0.010208f, - +0.009694f, +0.000446f, -0.003119f, +0.008009f, -0.008294f, -0.011518f, +0.002412f, -0.002169f, +0.006104f, -0.006072f, - +0.003410f, +0.004651f, +0.004110f, +0.000423f, +0.010584f, +0.003243f, -0.000620f, -0.000512f, -0.002031f, +0.006256f, - +0.004249f, +0.000152f, +0.002742f, +0.007421f, -0.002281f, +0.002252f, +0.001250f, -0.006710f, -0.001679f, -0.000615f, - -0.003846f, +0.004156f, -0.003329f, -0.001354f, -0.003351f, +0.000374f, -0.003635f, +0.001817f, -0.000432f, -0.001136f, - -0.001118f, +0.003967f, -0.000809f, +0.001029f, +0.003375f, -0.001195f - }, - { - -0.015068f, +0.127424f, +0.013053f, -0.001496f, -0.020045f, +0.059216f, +0.042979f, +0.069414f, +0.005468f, +0.003082f, - -0.014244f, -0.009089f, +0.022095f, -0.003648f, +0.000137f, +0.012833f, +0.000784f, -0.002665f, -0.005737f, +0.010836f, - +0.016890f, +0.012993f, +0.014871f, -0.009961f, -0.003397f, -0.002804f, -0.005380f, +0.026377f, -0.003320f, -0.008837f, - +0.001565f, +0.006835f, -0.006023f, -0.000384f, +0.024943f, +0.008713f, -0.011378f, -0.009426f, -0.000559f, -0.015244f, - -0.000503f, +0.002424f, -0.000989f, +0.004703f, -0.003500f, +0.009090f, -0.007997f, +0.008447f, +0.012053f, -0.003792f, - +0.007540f, +0.002003f, +0.002290f, +0.002671f, +0.001539f, -0.006178f, -0.007852f, -0.004591f, -0.004776f, -0.004262f, - +0.002281f, +0.005724f, -0.005424f, -0.010999f, -0.004463f, +0.004793f, +0.000811f, -0.005905f, -0.001933f, +0.003265f, - -0.001692f, +0.002418f, -0.006960f, -0.000441f, -0.003570f, -0.003935f, -0.001250f, -0.001074f, -0.003125f, +0.002332f, - -0.001029f, -0.004360f, -0.000464f, -0.000526f, +0.004251f, +0.001405f, +0.000067f, +0.000787f, +0.001038f, +0.000424f, - -0.001097f, +0.002932f, +0.002333f, -0.001390f, +0.002572f, -0.002022f - }, - { - -0.001800f, -0.031833f, +0.014643f, +0.000345f, -0.009725f, -0.004081f, +0.008143f, -0.015288f, +0.011123f, -0.003091f, - +0.000323f, -0.006242f, -0.009466f, -0.038998f, +0.001199f, +0.001868f, +0.003066f, +0.011673f, +0.004954f, +0.015908f, - +0.009358f, +0.001155f, -0.000125f, -0.018023f, -0.000105f, -0.003988f, -0.002514f, -0.016581f, +0.022586f, +0.018074f, - +0.009521f, -0.011080f, +0.009578f, +0.001063f, -0.014191f, -0.016165f, +0.014324f, +0.009363f, -0.013062f, -0.001064f, - -0.010698f, -0.007156f, -0.011771f, -0.014927f, +0.004079f, +0.003420f, +0.006892f, -0.002083f, -0.014994f, -0.009970f, - +0.009294f, +0.008883f, -0.002650f, -0.007814f, -0.005307f, -0.004232f, +0.001757f, +0.002227f, -0.001098f, +0.001199f, - +0.005784f, -0.007649f, +0.006429f, -0.000663f, +0.002080f, -0.003304f, +0.002367f, -0.009478f, +0.002880f, -0.002828f, - +0.000562f, +0.001495f, -0.004731f, +0.001457f, -0.002942f, -0.005123f, +0.003491f, -0.005480f, +0.002854f, -0.009710f, - -0.002420f, +0.003152f, -0.003278f, -0.002190f, -0.000978f, -0.000578f, +0.004383f, +0.003630f, -0.002514f, -0.002922f, - +0.002862f, +0.002574f, -0.000110f, -0.003114f, +0.001713f, +0.001671f - }, - { - +0.014945f, -0.062272f, -0.012135f, +0.023310f, -0.075375f, -0.035436f, -0.018718f, -0.018159f, +0.002587f, -0.021548f, - -0.005202f, +0.014577f, -0.016665f, +0.049382f, +0.036712f, -0.007739f, +0.025850f, +0.019822f, -0.002407f, -0.003868f, - -0.008684f, +0.015370f, +0.001591f, -0.020114f, +0.012198f, +0.012084f, +0.009411f, +0.002978f, -0.006876f, -0.023133f, - +0.001525f, +0.006706f, -0.001614f, -0.003953f, -0.003631f, +0.002753f, +0.009205f, -0.017186f, -0.009662f, +0.018432f, - -0.008173f, -0.003808f, +0.002513f, -0.004605f, -0.010697f, +0.007883f, +0.010600f, +0.007212f, -0.005739f, +0.002555f, - +0.002245f, -0.000831f, +0.004429f, +0.006039f, +0.004128f, +0.002512f, -0.003496f, -0.007650f, +0.011781f, +0.002301f, - -0.001370f, +0.001319f, -0.000500f, -0.004249f, +0.000698f, +0.006110f, +0.001604f, +0.003245f, -0.008239f, -0.006634f, - +0.003287f, -0.006408f, +0.002217f, +0.002334f, +0.003936f, +0.005206f, -0.000407f, -0.001272f, -0.005551f, -0.001587f, - +0.001117f, +0.000787f, -0.005638f, -0.000415f, -0.004010f, +0.001085f, -0.000728f, +0.001878f, -0.001642f, -0.003662f, - +0.000239f, -0.000575f, -0.003064f, +0.000782f, -0.000135f, +0.002665f - }, - { - +0.006781f, -0.026211f, -0.008556f, +0.003793f, +0.002390f, -0.001908f, +0.001244f, -0.007478f, -0.003358f, +0.002154f, - -0.007530f, -0.000509f, +0.009869f, +0.024208f, -0.127374f, -0.000686f, +0.002862f, +0.007078f, -0.006911f, +0.007302f, - -0.014290f, +0.003616f, -0.025183f, +0.012520f, +0.013153f, -0.002046f, -0.000109f, +0.007818f, -0.002972f, +0.000850f, - +0.009151f, -0.006518f, +0.011730f, -0.021205f, -0.003364f, -0.002442f, +0.005261f, -0.014713f, -0.011251f, +0.012139f, - -0.013033f, -0.002386f, -0.001329f, +0.015023f, -0.005371f, +0.006359f, +0.010234f, +0.004192f, -0.009470f, +0.021679f, - -0.004183f, +0.008054f, -0.001175f, +0.007775f, +0.006217f, -0.008178f, -0.004126f, +0.007181f, +0.001841f, +0.001961f, - -0.000927f, -0.002621f, -0.007996f, +0.001783f, -0.001043f, -0.003355f, -0.000256f, +0.000148f, +0.002030f, +0.000919f, - +0.003162f, +0.005037f, -0.001465f, +0.003043f, -0.000212f, +0.000251f, +0.000578f, -0.002592f, -0.002898f, +0.000479f, - +0.002999f, +0.003414f, -0.000627f, +0.000498f, +0.003872f, -0.002095f, -0.001232f, -0.001051f, +0.000965f, -0.000460f, - +0.004554f, +0.001005f, -0.001012f, +0.000004f, +0.001256f, +0.000850f - }, - { - +0.005290f, -0.084534f, -0.000865f, -0.001444f, -0.005089f, -0.006355f, +0.004791f, -0.002889f, -0.010047f, -0.006756f, - -0.004412f, +0.035385f, -0.017117f, -0.034433f, -0.022663f, -0.023412f, +0.015720f, -0.021722f, +0.008779f, -0.001266f, - -0.028161f, -0.001948f, -0.007757f, -0.005259f, -0.003036f, -0.018355f, +0.005478f, +0.006063f, -0.017315f, +0.005772f, - +0.012308f, -0.036755f, +0.011368f, +0.018435f, +0.000263f, -0.006988f, -0.000141f, -0.010314f, -0.010228f, +0.004533f, - -0.020957f, -0.004527f, -0.005705f, +0.008816f, -0.002763f, +0.012940f, -0.000053f, +0.007578f, -0.010552f, -0.010969f, - -0.002582f, +0.001872f, +0.008869f, +0.007582f, -0.003067f, +0.013847f, -0.004366f, +0.007477f, -0.008237f, -0.000830f, - -0.000400f, -0.005936f, +0.003290f, -0.005170f, -0.003431f, -0.003562f, -0.005514f, +0.002746f, +0.007773f, +0.002839f, - -0.008789f, -0.002944f, -0.001398f, -0.001892f, +0.003137f, +0.002235f, +0.001293f, -0.000719f, -0.005052f, +0.004098f, - -0.000666f, +0.004332f, +0.002461f, +0.003764f, +0.002769f, +0.007934f, +0.003045f, +0.001740f, +0.002038f, -0.001364f, - -0.002210f, -0.000541f, -0.000860f, +0.002127f, +0.000152f, +0.003540f - } - }, - { - { - +0.000046f, +0.083033f, +0.025842f, -0.075043f, +0.035395f, -0.009488f, -0.000099f, +0.002091f, -0.020254f, -0.018686f, - -0.000913f, +0.001390f, -0.017830f, -0.005117f, -0.017992f, +0.001547f, -0.011329f, +0.004178f, -0.007765f, +0.015816f, - +0.013287f, -0.013016f, -0.003396f, +0.011941f, +0.010437f, +0.022828f, +0.005530f, -0.004721f, -0.009915f, +0.016562f, - -0.011699f, -0.011331f, -0.015751f, +0.000223f, +0.014140f, -0.005111f, -0.014816f, -0.004262f, +0.008187f, -0.004453f, - -0.007127f, -0.003042f, -0.005587f, +0.009195f, -0.001565f, -0.008476f, -0.008170f, -0.003534f, +0.005067f, -0.009081f, - +0.002226f, +0.002353f, +0.004085f, +0.004161f, -0.006908f, -0.002222f, -0.001155f, -0.009463f, -0.006454f, +0.004311f, - +0.010260f, +0.009476f, +0.001193f, -0.002744f, -0.000335f, +0.000644f, +0.005365f, +0.000377f, -0.004219f, -0.001516f, - -0.000637f, +0.006860f, -0.004190f, +0.001635f, +0.005319f, -0.005432f, -0.002058f, -0.004184f, +0.003724f, -0.002364f, - -0.001546f, +0.001656f, +0.004468f, +0.002737f, +0.000298f, -0.000726f, -0.000428f, +0.001202f, -0.000820f, +0.001276f, - +0.001474f, +0.000454f, +0.000420f, +0.002198f, -0.002215f, +0.001491f - }, - { - -0.028258f, -0.018252f, +0.047062f, +0.037736f, -0.087978f, -0.010197f, -0.024245f, +0.002587f, +0.003442f, -0.007410f, - +0.011744f, +0.049077f, +0.013960f, +0.008334f, -0.000889f, -0.009898f, -0.003387f, +0.001710f, +0.014142f, +0.013464f, - +0.010323f, -0.022936f, -0.003988f, -0.007681f, +0.018523f, +0.001004f, -0.000200f, -0.019789f, +0.001554f, -0.001022f, - +0.003136f, +0.019370f, +0.002878f, -0.009011f, -0.010162f, +0.007890f, +0.014747f, +0.008704f, +0.002495f, +0.011900f, - +0.001906f, +0.008311f, -0.008058f, -0.012801f, -0.000355f, +0.001283f, +0.006439f, -0.006955f, -0.002006f, +0.013810f, - -0.004641f, -0.002859f, -0.005484f, -0.002293f, +0.001607f, -0.000385f, -0.002926f, -0.003628f, +0.000114f, -0.001375f, - +0.008699f, -0.004876f, +0.001398f, -0.011239f, -0.007453f, -0.006530f, +0.007660f, +0.002466f, +0.001853f, -0.001528f, - +0.002363f, -0.004924f, -0.004393f, -0.003659f, -0.003325f, +0.002431f, -0.002095f, -0.002053f, +0.001324f, +0.000196f, - -0.000168f, -0.000780f, -0.001068f, -0.003392f, +0.002433f, -0.001971f, +0.003091f, -0.001337f, -0.000649f, +0.000753f, - -0.001915f, -0.002892f, -0.001183f, +0.001426f, +0.003079f, -0.000376f - }, - { - +0.009298f, -0.079688f, -0.021397f, +0.100131f, +0.002717f, +0.004763f, +0.007551f, -0.012225f, -0.014527f, +0.009879f, - -0.010429f, -0.024282f, -0.015465f, +0.003521f, -0.000689f, -0.007935f, +0.010666f, +0.000663f, -0.003160f, +0.028928f, - +0.030618f, -0.009544f, +0.000562f, +0.005960f, -0.008770f, -0.003925f, -0.005769f, -0.004529f, +0.004888f, -0.002990f, - -0.019604f, +0.005007f, +0.015595f, +0.003463f, -0.008679f, +0.002493f, +0.001380f, +0.003985f, -0.000389f, +0.001425f, - +0.017266f, +0.001129f, -0.000710f, -0.003732f, -0.009765f, -0.012108f, +0.005301f, -0.006104f, -0.000056f, -0.002730f, - -0.001007f, -0.001109f, +0.005628f, +0.008345f, -0.005137f, -0.002464f, -0.001035f, +0.004880f, +0.001925f, -0.001584f, - +0.005703f, +0.001381f, -0.000119f, -0.003948f, +0.000822f, +0.002984f, -0.004289f, -0.001818f, -0.000692f, -0.000959f, - +0.001944f, +0.000442f, -0.000210f, -0.000534f, +0.000281f, +0.005564f, +0.004429f, -0.000039f, -0.001395f, +0.002364f, - +0.002954f, -0.000527f, -0.002416f, -0.000272f, +0.000983f, +0.001518f, +0.002459f, -0.001310f, +0.002312f, -0.001690f, - +0.002725f, -0.000763f, +0.001496f, -0.000044f, +0.001644f, -0.000681f - }, - { - +0.005159f, +0.012353f, -0.008362f, -0.007345f, +0.014650f, -0.001232f, +0.001265f, +0.003173f, -0.013488f, +0.019052f, - +0.011494f, -0.013045f, +0.002776f, -0.017441f, -0.026110f, +0.016666f, -0.001534f, -0.005748f, -0.004058f, +0.006994f, - -0.000266f, -0.010840f, +0.003877f, -0.018259f, -0.008771f, +0.003327f, -0.016061f, -0.020843f, -0.017051f, +0.003146f, - +0.007063f, +0.022332f, -0.011832f, +0.014852f, +0.001868f, +0.009352f, +0.008295f, -0.005184f, -0.012773f, +0.001002f, - -0.001447f, -0.007050f, -0.008174f, +0.001576f, -0.011336f, +0.003155f, -0.003143f, +0.002671f, -0.001216f, -0.000665f, - +0.008406f, -0.000577f, -0.000052f, +0.005981f, +0.005691f, +0.000592f, -0.005659f, +0.006855f, -0.007423f, -0.000825f, - -0.000492f, +0.005915f, +0.005552f, +0.002527f, -0.003229f, +0.003568f, -0.003592f, -0.000599f, +0.000604f, +0.002400f, - +0.002480f, +0.006278f, -0.006223f, +0.000247f, -0.000291f, +0.003882f, +0.003199f, -0.000877f, -0.000090f, +0.001061f, - -0.001526f, +0.009141f, +0.002125f, -0.005385f, +0.000224f, -0.002584f, -0.001028f, -0.001713f, -0.000153f, -0.003131f, - -0.000147f, +0.001399f, +0.000215f, -0.000802f, +0.000776f, +0.000861f - }, - { - +0.005067f, -0.111573f, +0.000247f, -0.010550f, +0.017401f, -0.001610f, -0.008146f, +0.006221f, +0.002894f, +0.002526f, - -0.026171f, +0.023576f, +0.013677f, +0.012277f, +0.002927f, -0.008628f, +0.004054f, +0.001497f, +0.001565f, -0.019264f, - +0.001525f, +0.010171f, -0.023057f, +0.012495f, +0.020583f, -0.009734f, +0.036690f, -0.003318f, -0.004006f, -0.017798f, - -0.009297f, -0.011576f, -0.009705f, -0.004081f, -0.007813f, -0.009536f, -0.011716f, +0.004402f, -0.007173f, -0.007339f, - -0.016311f, +0.005893f, -0.000292f, +0.008045f, +0.014729f, -0.001415f, +0.002802f, -0.001236f, -0.000116f, +0.004102f, - +0.004835f, -0.004613f, -0.004371f, +0.002835f, +0.003638f, +0.008767f, +0.000460f, +0.003530f, -0.004139f, -0.007202f, - -0.001240f, -0.003019f, +0.001902f, +0.002217f, +0.002496f, -0.009091f, +0.003857f, -0.000082f, +0.003659f, +0.002865f, - -0.000858f, -0.000917f, +0.004869f, -0.002260f, -0.003977f, -0.001958f, +0.002920f, +0.000715f, +0.000023f, +0.000229f, - -0.000320f, -0.002539f, +0.002340f, +0.001031f, -0.001040f, +0.000870f, -0.002987f, +0.002447f, +0.003090f, +0.000239f, - -0.000324f, -0.000562f, -0.002104f, -0.002503f, -0.000774f, -0.000089f - }, - { - -0.002899f, +0.010395f, +0.004974f, +0.001470f, -0.002802f, +0.002258f, +0.002582f, -0.008017f, +0.000968f, -0.007738f, - -0.009583f, +0.015614f, -0.005677f, -0.026839f, -0.017357f, +0.006101f, +0.017279f, +0.004306f, -0.000733f, -0.003061f, - -0.017082f, +0.007571f, +0.014465f, -0.033442f, +0.006385f, +0.010324f, -0.015927f, +0.000923f, -0.001108f, -0.025103f, - -0.007937f, +0.000962f, -0.012142f, +0.005769f, +0.007374f, +0.017532f, +0.001140f, +0.002495f, +0.010145f, +0.011796f, - +0.027314f, +0.012560f, +0.005694f, -0.004270f, -0.007599f, +0.000117f, +0.002284f, +0.003550f, -0.001114f, +0.006226f, - -0.000789f, +0.003170f, -0.004978f, +0.005110f, -0.000215f, -0.002311f, +0.005146f, +0.006430f, +0.004078f, -0.000598f, - +0.002616f, -0.001404f, +0.002022f, -0.002977f, -0.000191f, -0.002289f, +0.002615f, +0.001789f, -0.000427f, -0.000558f, - +0.005004f, +0.004350f, -0.006434f, +0.002918f, +0.000887f, -0.003097f, +0.004270f, +0.002145f, +0.000506f, -0.004592f, - +0.002572f, -0.003450f, -0.005781f, +0.000630f, -0.000236f, +0.003201f, +0.003686f, -0.001871f, -0.005860f, -0.002899f, - -0.000568f, +0.000407f, -0.001109f, -0.003422f, +0.000758f, +0.000943f - }, - { - -0.012443f, -0.131236f, +0.008151f, -0.006995f, +0.018399f, -0.006076f, -0.013231f, -0.028653f, +0.014559f, +0.015554f, - -0.018602f, +0.043755f, +0.015820f, -0.010571f, -0.006300f, -0.001576f, +0.007807f, +0.018852f, -0.004120f, +0.005680f, - +0.009525f, -0.003604f, +0.003784f, -0.016407f, -0.008616f, +0.012553f, +0.019188f, +0.019542f, -0.008932f, -0.005382f, - -0.013696f, -0.007307f, -0.009053f, +0.007192f, +0.002668f, +0.005091f, -0.003978f, +0.011481f, +0.006286f, +0.009235f, - +0.011994f, -0.004294f, -0.000019f, -0.013550f, -0.012677f, +0.004607f, -0.015557f, +0.005544f, -0.000753f, -0.007403f, - +0.008374f, -0.008263f, +0.001571f, -0.001597f, -0.001440f, -0.004863f, -0.001036f, -0.003651f, -0.008925f, -0.002226f, - +0.002793f, -0.000221f, +0.005743f, -0.000543f, +0.002284f, -0.003019f, -0.003154f, +0.002889f, +0.004122f, +0.004317f, - -0.001539f, -0.001571f, -0.000996f, +0.004157f, -0.000785f, +0.003145f, +0.003327f, -0.004593f, -0.001659f, -0.001522f, - +0.002269f, +0.003734f, -0.004321f, +0.000164f, -0.000000f, +0.001895f, +0.003324f, +0.000220f, -0.002488f, +0.002760f, - +0.001438f, +0.000576f, -0.000192f, +0.000518f, +0.001702f, -0.002533f - }, - { - -0.006512f, +0.021521f, -0.000661f, +0.017970f, -0.013045f, -0.006407f, +0.007601f, -0.005650f, +0.009268f, -0.001332f, - -0.008584f, -0.004309f, +0.003683f, -0.004056f, +0.027084f, +0.013063f, +0.005705f, +0.023656f, -0.025540f, -0.016396f, - -0.012966f, +0.008046f, -0.001719f, -0.001939f, -0.016801f, +0.000729f, +0.011499f, +0.020967f, -0.010161f, -0.022971f, - -0.005239f, +0.009747f, +0.010760f, +0.002319f, +0.005237f, +0.013444f, +0.006316f, -0.004692f, +0.007944f, +0.001707f, - +0.006286f, +0.011815f, -0.011023f, +0.010006f, -0.011732f, +0.003704f, -0.007701f, +0.000972f, -0.003715f, -0.004868f, - -0.000489f, +0.007458f, +0.001759f, +0.002791f, +0.006214f, -0.003871f, +0.006437f, -0.011665f, -0.001800f, -0.002882f, - +0.011439f, +0.004375f, -0.006380f, +0.007410f, -0.008360f, +0.004494f, +0.000702f, -0.003050f, +0.004509f, -0.004805f, - +0.000718f, -0.001613f, -0.004056f, -0.003130f, +0.005416f, -0.002243f, +0.000421f, -0.001241f, -0.002588f, +0.004236f, - +0.001746f, +0.002132f, +0.000140f, -0.001661f, +0.002343f, +0.001311f, -0.004089f, +0.000026f, -0.000921f, +0.003993f, - -0.001212f, +0.001421f, -0.001323f, -0.002938f, +0.000033f, -0.002461f - }, - { - -0.002868f, -0.164171f, +0.009671f, +0.008246f, +0.013751f, -0.010118f, -0.007238f, +0.009952f, +0.005800f, +0.013897f, - -0.031182f, -0.000045f, +0.027596f, +0.013100f, -0.000423f, -0.005451f, -0.016236f, +0.017451f, +0.019162f, +0.003314f, - -0.010923f, -0.004008f, +0.002776f, +0.001488f, +0.004869f, -0.002782f, +0.014675f, -0.005399f, -0.004787f, -0.011592f, - -0.000495f, -0.006699f, +0.019803f, -0.003106f, -0.006044f, -0.016630f, +0.002733f, -0.002386f, +0.009312f, -0.010702f, - +0.005783f, +0.007161f, -0.001544f, +0.004619f, -0.007692f, -0.005464f, +0.001553f, -0.010004f, -0.000813f, +0.003184f, - +0.000955f, +0.003749f, -0.001979f, -0.006289f, +0.005912f, +0.000675f, -0.001934f, -0.003401f, -0.003357f, -0.006400f, - +0.005783f, +0.002986f, -0.001052f, -0.005987f, -0.006080f, +0.001793f, -0.003861f, -0.001892f, +0.002671f, +0.001646f, - -0.003157f, +0.002187f, +0.004977f, -0.000740f, +0.002546f, -0.002927f, -0.001048f, +0.003538f, -0.001349f, -0.001166f, - +0.000532f, -0.004134f, +0.000768f, -0.004501f, -0.001100f, -0.000005f, -0.001739f, +0.000693f, -0.002191f, +0.000036f, - +0.002336f, -0.004194f, -0.002682f, -0.002088f, +0.000073f, -0.001631f - }, - { - +0.004170f, -0.067460f, -0.001654f, -0.000211f, -0.007078f, +0.002436f, -0.046155f, -0.009511f, +0.006561f, +0.024745f, - -0.005977f, -0.017947f, -0.030443f, +0.017297f, +0.001272f, +0.030186f, -0.016452f, +0.011040f, +0.006995f, -0.025560f, - +0.008464f, -0.001430f, -0.005601f, -0.006960f, -0.033338f, -0.007932f, -0.030144f, -0.017464f, +0.002391f, -0.001762f, - +0.000337f, +0.002945f, -0.005366f, -0.009492f, -0.011328f, +0.003685f, -0.000313f, -0.000623f, +0.014221f, +0.005823f, - +0.002979f, +0.004722f, +0.005068f, -0.007426f, +0.008323f, +0.010660f, +0.015978f, +0.016986f, -0.013014f, +0.004990f, - +0.006813f, -0.002691f, +0.007126f, -0.007455f, +0.000670f, -0.010716f, -0.001844f, -0.001438f, -0.003203f, +0.002190f, - -0.001376f, +0.007868f, +0.000177f, +0.005498f, +0.007842f, +0.001744f, +0.004733f, -0.001980f, +0.001610f, +0.002311f, - +0.001059f, +0.003151f, -0.000392f, +0.009017f, +0.005314f, -0.005360f, +0.004213f, -0.005427f, -0.004394f, +0.000143f, - -0.003747f, +0.005426f, -0.002838f, +0.000926f, -0.004580f, -0.001583f, +0.000003f, +0.000020f, -0.001192f, -0.000907f, - +0.000549f, +0.001714f, +0.000071f, +0.000163f, +0.002287f, +0.001262f - }, - { - +0.020071f, +0.122850f, -0.019224f, -0.001846f, -0.040515f, +0.053290f, +0.032461f, +0.078940f, -0.003727f, -0.007409f, - +0.010107f, -0.024559f, +0.014916f, +0.011983f, -0.014306f, +0.020294f, +0.000615f, +0.009607f, -0.018852f, +0.024568f, - +0.004318f, +0.021464f, +0.001599f, +0.007892f, -0.019861f, -0.002739f, +0.008264f, +0.013365f, +0.009764f, -0.001484f, - +0.003726f, -0.008602f, -0.008851f, +0.009702f, -0.004557f, +0.004610f, +0.007930f, -0.002363f, -0.006594f, +0.000904f, - -0.002270f, -0.005906f, -0.001344f, +0.003005f, -0.008570f, +0.015202f, +0.000220f, +0.009507f, +0.000538f, +0.011242f, - +0.006752f, -0.000583f, -0.007411f, +0.002062f, -0.000295f, +0.000142f, -0.009107f, -0.002402f, -0.008090f, -0.001855f, - +0.002961f, +0.000629f, -0.009558f, -0.004721f, -0.005654f, +0.003731f, -0.001367f, -0.002956f, +0.002098f, -0.000430f, - -0.000616f, -0.000642f, -0.003770f, +0.000487f, -0.003523f, -0.004254f, -0.002497f, -0.002481f, -0.000736f, +0.002000f, - -0.002953f, -0.002695f, +0.000396f, -0.000575f, +0.005584f, +0.004104f, -0.001674f, +0.000580f, +0.001440f, -0.002599f, - +0.001460f, +0.001934f, +0.002376f, -0.001203f, +0.002176f, -0.000797f - }, - { - +0.005062f, -0.013033f, -0.006641f, -0.002301f, -0.009987f, -0.008906f, +0.014628f, -0.008318f, -0.000707f, +0.008174f, - -0.021571f, -0.005665f, +0.011957f, -0.057307f, -0.004367f, +0.002223f, +0.011635f, -0.002184f, +0.017053f, -0.002602f, - +0.013196f, -0.003537f, +0.004769f, -0.013286f, -0.004706f, -0.008268f, -0.032963f, -0.004046f, +0.030092f, +0.032479f, - -0.013560f, -0.001416f, -0.003810f, +0.012194f, -0.019716f, -0.006142f, +0.019773f, -0.001841f, -0.010482f, +0.000183f, - -0.010534f, -0.010702f, -0.012048f, -0.011779f, +0.001500f, +0.012263f, +0.002225f, -0.013817f, -0.014683f, +0.003894f, - -0.004499f, +0.006265f, +0.001363f, -0.005593f, -0.004433f, -0.009830f, +0.005918f, -0.001894f, +0.006462f, +0.001565f, - +0.004101f, -0.007064f, +0.007914f, -0.002928f, +0.001429f, -0.001264f, -0.005241f, -0.001945f, -0.000387f, -0.005146f, - +0.007071f, -0.003328f, -0.006302f, +0.000789f, -0.002373f, +0.000228f, -0.002399f, -0.003395f, -0.003307f, -0.003451f, - -0.003449f, +0.000685f, -0.002395f, -0.002705f, +0.000511f, -0.000820f, +0.003200f, +0.003491f, -0.000773f, +0.000102f, - -0.002064f, +0.002662f, -0.000470f, -0.001214f, -0.000399f, +0.003902f - }, - { - -0.025438f, -0.034789f, +0.029768f, +0.003155f, -0.074394f, +0.004236f, -0.034217f, -0.004066f, -0.009304f, -0.027188f, - +0.009357f, -0.011992f, +0.013976f, +0.039188f, +0.017340f, -0.010413f, +0.038918f, +0.003263f, -0.000972f, +0.028970f, - -0.024184f, +0.017575f, -0.010360f, -0.013512f, +0.033716f, +0.010259f, +0.015876f, +0.010489f, -0.017826f, -0.014134f, - +0.007053f, +0.004015f, -0.005462f, -0.004754f, -0.015657f, +0.014235f, +0.000609f, -0.013182f, +0.006772f, +0.000270f, - -0.004232f, +0.000793f, -0.006404f, -0.012739f, -0.000961f, -0.001349f, +0.019006f, +0.005383f, +0.003265f, -0.000394f, - -0.000181f, +0.012304f, -0.000579f, +0.005086f, +0.006535f, -0.001209f, -0.004086f, -0.002512f, +0.003987f, +0.007413f, - -0.007523f, +0.005686f, +0.004723f, -0.008441f, -0.002871f, +0.011576f, -0.003679f, +0.000788f, -0.003657f, -0.009676f, - -0.000078f, -0.005791f, +0.004858f, +0.004418f, +0.001344f, +0.002631f, -0.001344f, -0.003029f, +0.000178f, -0.005047f, - +0.001675f, +0.000464f, +0.000969f, -0.004922f, -0.002731f, -0.001671f, +0.001821f, -0.000343f, -0.002037f, +0.000073f, - +0.000646f, +0.000133f, -0.003417f, -0.001837f, +0.001961f, +0.001169f - }, - { - -0.005529f, -0.033938f, +0.013734f, -0.008988f, +0.002555f, +0.009534f, +0.004404f, +0.002827f, -0.019737f, -0.004925f, - -0.008226f, +0.014123f, -0.002710f, -0.064701f, -0.003638f, +0.019007f, +0.017679f, -0.010719f, -0.002463f, +0.010278f, - -0.018847f, -0.003353f, +0.000593f, +0.012522f, +0.019409f, +0.002678f, -0.031794f, +0.014777f, +0.000797f, -0.005300f, - +0.018947f, +0.001140f, -0.004005f, -0.008756f, -0.024392f, +0.010703f, -0.000384f, -0.014234f, +0.002773f, -0.010076f, - +0.008698f, -0.001434f, -0.005706f, +0.018867f, -0.003030f, +0.009349f, +0.009373f, -0.001936f, -0.002945f, +0.017269f, - -0.003728f, +0.007482f, -0.006020f, +0.008045f, +0.010266f, -0.006822f, -0.000669f, +0.002553f, -0.001697f, +0.005631f, - +0.008080f, -0.015330f, -0.003833f, +0.006116f, -0.005656f, +0.000044f, -0.003719f, +0.002428f, +0.002305f, +0.002331f, - -0.000723f, +0.004184f, +0.004120f, +0.001111f, -0.002605f, +0.002300f, -0.001938f, +0.002381f, -0.005286f, +0.002344f, - +0.003105f, +0.001045f, -0.001062f, +0.001078f, +0.000719f, +0.002606f, -0.002568f, +0.001807f, -0.001761f, -0.001525f, - +0.006124f, +0.000699f, +0.002359f, -0.002345f, +0.001333f, +0.000270f - }, - { - -0.018900f, -0.067675f, +0.010546f, -0.009222f, -0.003143f, +0.002858f, +0.001773f, +0.002648f, -0.011085f, +0.011855f, - -0.002550f, +0.022764f, -0.006721f, +0.002000f, -0.083981f, -0.039602f, -0.002291f, +0.001718f, -0.002234f, +0.007779f, - -0.031454f, -0.003499f, -0.008549f, -0.017642f, -0.012391f, +0.002137f, -0.004114f, +0.014266f, -0.017648f, -0.006901f, - +0.006666f, -0.011102f, +0.009072f, +0.007812f, +0.007896f, -0.000228f, -0.000917f, -0.024500f, -0.003007f, +0.004961f, - -0.026576f, +0.002200f, -0.011087f, +0.011435f, +0.003292f, +0.013083f, -0.005402f, +0.009861f, -0.006538f, -0.012582f, - +0.006912f, -0.004428f, +0.008188f, +0.006888f, -0.001603f, +0.004009f, +0.002917f, +0.007808f, -0.007941f, +0.004944f, - -0.002879f, -0.004496f, -0.002876f, +0.001994f, -0.001054f, -0.010243f, -0.000328f, -0.004314f, +0.013023f, -0.004085f, - -0.004110f, -0.009192f, +0.006345f, +0.001788f, -0.001315f, +0.000525f, +0.002507f, +0.001219f, +0.000130f, -0.002638f, - +0.001828f, +0.002956f, +0.004990f, +0.001873f, +0.003404f, +0.005401f, +0.001078f, +0.005038f, -0.000252f, -0.000418f, - -0.002634f, -0.001944f, +0.001349f, +0.001420f, +0.000099f, +0.001713f - } - }, - { - { - +0.002898f, +0.032579f, -0.012817f, -0.068437f, +0.025888f, -0.012050f, -0.005647f, +0.000083f, -0.006437f, +0.001915f, - -0.007458f, +0.017488f, -0.006572f, -0.011574f, -0.004629f, +0.017451f, +0.001453f, +0.016301f, -0.015634f, +0.007946f, - +0.015891f, -0.026199f, -0.012441f, +0.005854f, -0.000960f, +0.020023f, +0.000281f, -0.003923f, +0.002600f, +0.025944f, - -0.000877f, -0.000257f, -0.019527f, -0.006714f, -0.000005f, -0.007208f, +0.006705f, +0.005912f, +0.019020f, +0.013560f, - +0.005239f, -0.007067f, -0.014275f, +0.008652f, -0.003190f, -0.009704f, -0.004025f, -0.002546f, +0.006705f, -0.004215f, - -0.000549f, +0.003684f, +0.005350f, -0.001885f, -0.004263f, +0.007230f, +0.009469f, +0.000817f, -0.007556f, -0.004000f, - +0.001591f, +0.003008f, -0.002421f, -0.007276f, -0.004704f, +0.004873f, +0.007444f, +0.002501f, -0.003791f, -0.009496f, - -0.005431f, +0.006584f, -0.003784f, -0.000629f, +0.006119f, -0.001557f, +0.004696f, +0.000281f, +0.002854f, -0.004686f, - +0.000602f, +0.003255f, +0.004473f, +0.000553f, +0.000137f, +0.000535f, -0.000436f, -0.001908f, -0.003268f, +0.001053f, - -0.000371f, -0.000585f, -0.000515f, +0.002557f, +0.000915f, +0.001589f - }, - { - +0.035248f, +0.028615f, +0.033399f, +0.176972f, +0.029328f, -0.009158f, -0.012324f, +0.005863f, -0.012269f, -0.012504f, - +0.004399f, +0.015602f, -0.007186f, +0.016490f, -0.000019f, -0.023039f, -0.011717f, +0.009709f, +0.002527f, -0.013736f, - +0.028475f, -0.001530f, +0.000900f, +0.001252f, +0.018999f, +0.001059f, -0.002479f, -0.019587f, +0.005939f, -0.001587f, - -0.003497f, +0.011653f, +0.001208f, -0.011718f, -0.009238f, +0.005397f, +0.015274f, +0.012352f, +0.004092f, +0.010128f, - -0.000843f, +0.006527f, -0.008251f, -0.007871f, -0.003487f, +0.003602f, +0.010034f, -0.004513f, -0.010362f, +0.004111f, - +0.001122f, +0.000083f, -0.006172f, -0.004218f, -0.002806f, -0.002465f, -0.002425f, +0.003200f, +0.003755f, -0.005373f, - +0.003352f, -0.003271f, +0.010498f, -0.003067f, +0.001789f, -0.001302f, +0.006136f, -0.002369f, +0.001093f, -0.001845f, - -0.001150f, -0.000506f, +0.002634f, -0.001972f, -0.004699f, +0.002311f, -0.002503f, -0.002358f, +0.006593f, +0.002643f, - -0.001107f, +0.001731f, -0.000144f, -0.001452f, +0.003569f, -0.002445f, +0.002202f, -0.000970f, +0.001781f, +0.004291f, - +0.001894f, -0.000323f, -0.000725f, -0.001631f, -0.002631f, -0.001505f - }, - { - -0.014254f, -0.040197f, +0.018094f, +0.014355f, -0.061851f, -0.005780f, -0.011361f, +0.001359f, +0.002595f, +0.013470f, - -0.000296f, -0.032290f, -0.016971f, +0.020060f, -0.006604f, -0.004216f, +0.010298f, -0.006922f, +0.000318f, +0.001888f, - +0.005313f, -0.004303f, +0.004187f, -0.005954f, -0.011780f, -0.001704f, +0.010239f, +0.001850f, -0.004345f, -0.007999f, - -0.012251f, +0.018783f, +0.022531f, +0.011214f, -0.009821f, +0.003407f, +0.001266f, +0.001575f, +0.003336f, +0.002400f, - +0.007046f, -0.007716f, +0.011133f, -0.002156f, -0.016263f, -0.009514f, +0.006170f, -0.002997f, +0.004135f, +0.002731f, - +0.004191f, +0.001667f, +0.012344f, +0.014047f, -0.000299f, -0.003148f, -0.002064f, +0.003298f, +0.002711f, +0.001620f, - +0.007056f, -0.001111f, -0.001073f, -0.001344f, -0.000443f, -0.001494f, -0.004025f, +0.003630f, +0.001959f, -0.005050f, - +0.002042f, +0.002041f, -0.003415f, -0.003127f, -0.003379f, -0.000614f, -0.000451f, -0.001673f, -0.000267f, +0.000778f, - -0.001403f, -0.002558f, +0.000222f, -0.001011f, -0.000917f, -0.001896f, -0.000459f, -0.003540f, +0.003122f, -0.001030f, - +0.001928f, -0.001162f, +0.000830f, +0.000323f, +0.000213f, -0.005144f - }, - { - -0.004040f, +0.018761f, +0.003638f, -0.018714f, +0.003639f, -0.003622f, -0.001382f, +0.005000f, -0.012744f, +0.007716f, - -0.001336f, -0.015248f, -0.003454f, -0.008511f, -0.011194f, +0.006889f, +0.000304f, +0.015681f, -0.010647f, -0.008285f, - +0.009335f, -0.000162f, +0.011747f, -0.000062f, -0.005804f, +0.012610f, +0.001813f, -0.000290f, -0.013807f, -0.005885f, - -0.010797f, +0.009779f, -0.016748f, +0.008837f, -0.011982f, +0.003229f, +0.011142f, +0.005382f, -0.007976f, -0.006112f, - -0.008258f, -0.008042f, -0.009149f, -0.007799f, -0.015362f, +0.005250f, +0.004173f, +0.008894f, +0.005989f, +0.003727f, - +0.009600f, -0.002687f, -0.005665f, -0.005261f, -0.002553f, +0.000591f, -0.003076f, +0.005736f, -0.003006f, +0.011176f, - +0.010046f, +0.007687f, +0.005497f, +0.002356f, -0.001803f, +0.003054f, -0.005376f, -0.004697f, -0.004833f, -0.001556f, - -0.001142f, +0.004240f, -0.007672f, -0.002468f, -0.000967f, +0.002169f, +0.004750f, +0.002976f, -0.000134f, +0.002088f, - -0.004037f, +0.000021f, -0.001376f, -0.002716f, +0.002315f, +0.000556f, +0.000563f, -0.001143f, +0.000752f, -0.001306f, - -0.000624f, +0.001230f, +0.000576f, -0.001089f, +0.000612f, -0.000260f - }, - { - +0.009065f, -0.098193f, +0.016618f, -0.032870f, -0.007677f, +0.001436f, -0.007423f, +0.004678f, +0.014407f, +0.010164f, - +0.005468f, +0.053251f, +0.014831f, +0.007081f, +0.008442f, -0.007280f, -0.005398f, -0.007441f, +0.010833f, -0.003457f, - +0.011180f, +0.018862f, -0.022600f, -0.004489f, +0.011297f, -0.018975f, +0.024451f, -0.025392f, -0.014415f, -0.004365f, - +0.010598f, +0.002011f, -0.003587f, -0.002555f, -0.008169f, -0.009282f, -0.013276f, +0.002638f, -0.006499f, -0.006875f, - -0.004755f, +0.006495f, -0.002471f, +0.007324f, +0.010996f, -0.007898f, +0.005382f, -0.000992f, -0.006460f, -0.005283f, - +0.005210f, -0.002205f, -0.004654f, -0.002291f, -0.002012f, +0.006490f, -0.004380f, +0.005182f, +0.001960f, +0.001656f, - -0.000641f, -0.004615f, +0.003988f, +0.002796f, +0.006191f, -0.005409f, +0.002092f, -0.000052f, +0.000778f, -0.004804f, - -0.004731f, -0.002772f, +0.002008f, +0.000130f, -0.005108f, -0.002732f, +0.001451f, -0.001826f, -0.001855f, -0.002132f, - -0.000413f, -0.002070f, +0.001244f, -0.001959f, +0.001155f, +0.002941f, -0.004316f, +0.001735f, +0.003846f, +0.001932f, - +0.001559f, +0.001228f, -0.001173f, -0.002761f, -0.000660f, +0.001322f - }, - { - -0.000201f, -0.003252f, -0.026328f, +0.010248f, +0.002700f, -0.002028f, +0.003345f, -0.006325f, +0.010878f, +0.000588f, - -0.015148f, +0.006245f, -0.007315f, +0.009676f, +0.009677f, -0.004836f, +0.018939f, +0.013087f, +0.002079f, +0.002942f, - -0.004586f, +0.018072f, +0.015798f, -0.014842f, +0.017552f, +0.023428f, -0.006628f, +0.010468f, -0.001964f, -0.016267f, - -0.005534f, -0.001651f, -0.014428f, -0.011295f, -0.013059f, -0.001457f, -0.013425f, -0.003939f, +0.003099f, +0.000122f, - +0.013123f, +0.004858f, -0.004689f, +0.000131f, +0.003189f, +0.005854f, +0.000162f, -0.002864f, -0.006892f, +0.003969f, - -0.000473f, +0.004836f, +0.001658f, +0.009435f, +0.003573f, +0.003924f, +0.004425f, -0.002596f, +0.001640f, -0.001497f, - -0.002680f, -0.003292f, +0.003017f, -0.005503f, +0.000298f, -0.001625f, -0.002398f, -0.003165f, -0.000225f, +0.000214f, - +0.000749f, -0.000301f, -0.007183f, +0.005533f, +0.003976f, +0.001506f, +0.004406f, -0.002025f, +0.001763f, -0.003878f, - +0.004226f, -0.000876f, -0.005287f, +0.000681f, -0.002731f, -0.000300f, +0.003980f, -0.000225f, -0.003659f, -0.001548f, - -0.000547f, +0.000130f, -0.000476f, -0.001171f, +0.002283f, +0.001741f - }, - { - +0.031571f, -0.083900f, +0.013026f, -0.021671f, -0.009555f, -0.007657f, -0.015240f, -0.018056f, +0.017106f, +0.001962f, - -0.024512f, +0.027283f, +0.011808f, -0.014544f, -0.002951f, +0.020451f, -0.009183f, -0.011078f, -0.014604f, +0.005953f, - +0.020072f, +0.001727f, +0.000739f, +0.002311f, +0.031429f, +0.015145f, +0.007650f, +0.009586f, +0.002267f, +0.007063f, - -0.004286f, +0.004348f, -0.004399f, +0.003522f, -0.005482f, -0.012738f, -0.008197f, +0.008594f, -0.009008f, -0.009554f, - +0.001569f, -0.012668f, -0.002822f, +0.000463f, -0.004098f, +0.004514f, -0.015788f, -0.000747f, +0.004724f, +0.004179f, - +0.011986f, -0.010398f, +0.000294f, +0.004724f, +0.001217f, -0.003976f, +0.000244f, +0.000329f, -0.008344f, -0.002790f, - +0.000122f, -0.003046f, +0.005269f, +0.000605f, +0.004846f, +0.002523f, -0.000662f, +0.005771f, +0.003938f, -0.000947f, - -0.004260f, -0.000607f, -0.005170f, -0.001030f, -0.003644f, +0.000505f, +0.003764f, -0.003017f, -0.002470f, -0.004702f, - +0.000164f, +0.003856f, -0.002208f, +0.003749f, +0.000014f, +0.001376f, +0.001709f, -0.000483f, -0.002019f, +0.003375f, - -0.000710f, -0.003237f, -0.002554f, +0.000461f, +0.000840f, -0.002494f - }, - { - +0.000112f, +0.070325f, +0.004281f, +0.005657f, -0.015212f, +0.001148f, +0.007523f, -0.007436f, +0.007316f, -0.007399f, - -0.008404f, +0.009405f, +0.015894f, +0.000567f, +0.014126f, +0.014485f, -0.010040f, -0.006641f, -0.016050f, +0.010368f, - +0.004237f, +0.012901f, +0.001859f, +0.003371f, -0.008537f, +0.015103f, +0.006752f, +0.005997f, -0.019243f, -0.019693f, - -0.006314f, -0.003993f, -0.004131f, -0.007157f, -0.006265f, +0.009876f, -0.009225f, -0.020931f, +0.006609f, +0.005601f, - +0.004604f, +0.015883f, -0.011285f, +0.014670f, -0.003391f, +0.001644f, -0.010002f, +0.001949f, +0.002065f, +0.006267f, - +0.000812f, -0.001799f, -0.004356f, -0.001330f, +0.003194f, -0.006966f, +0.005815f, -0.011526f, -0.001178f, -0.009438f, - +0.004382f, -0.004479f, -0.010575f, +0.010122f, -0.007218f, +0.004254f, -0.003256f, -0.001010f, +0.005079f, -0.007881f, - -0.000535f, -0.000586f, -0.000060f, +0.000643f, +0.002547f, -0.004584f, +0.001783f, -0.001524f, -0.005776f, -0.000289f, - -0.003153f, -0.002670f, +0.000683f, +0.001536f, +0.001248f, +0.000667f, -0.001786f, +0.001504f, -0.002074f, +0.002525f, - -0.004347f, -0.000369f, +0.002589f, +0.000463f, +0.000080f, -0.002093f - }, - { - +0.026448f, -0.133584f, +0.025158f, -0.014327f, -0.010610f, -0.008681f, -0.030922f, -0.010903f, -0.009600f, -0.008265f, - -0.006356f, +0.014296f, +0.023817f, +0.013528f, -0.013196f, +0.047383f, +0.011586f, -0.006601f, +0.011519f, +0.004110f, - -0.012795f, -0.002340f, +0.015749f, -0.002706f, -0.002415f, -0.010017f, +0.004443f, -0.005286f, -0.007190f, -0.008567f, - +0.003385f, -0.011140f, +0.017186f, +0.004284f, +0.005015f, -0.010256f, +0.010542f, +0.008584f, +0.013312f, -0.016088f, - +0.004362f, -0.000034f, -0.009853f, +0.004446f, -0.004349f, -0.001822f, +0.001609f, -0.009994f, -0.003046f, -0.004887f, - +0.002584f, +0.005784f, -0.001954f, -0.005563f, +0.010952f, +0.005270f, +0.000603f, +0.001855f, -0.001674f, -0.010872f, - -0.004481f, +0.002654f, +0.004793f, +0.006422f, +0.003293f, +0.010169f, +0.001862f, +0.000490f, +0.005747f, +0.001498f, - -0.003958f, +0.003439f, +0.003645f, -0.001872f, +0.001702f, -0.001654f, +0.002747f, +0.003463f, -0.002381f, -0.000450f, - +0.002010f, -0.002067f, +0.005348f, -0.003120f, -0.000289f, +0.003110f, -0.003234f, -0.000784f, -0.000097f, +0.000274f, - +0.003589f, -0.001604f, -0.000566f, -0.001116f, -0.001688f, -0.001684f - }, - { - -0.006064f, -0.067326f, +0.012364f, +0.000634f, -0.000900f, +0.034063f, -0.022461f, -0.019812f, +0.010672f, +0.010551f, - -0.029260f, -0.012859f, -0.030098f, +0.014237f, +0.002943f, +0.004998f, -0.045861f, +0.005933f, +0.024763f, -0.019022f, - +0.004359f, -0.007232f, -0.018324f, -0.005098f, -0.007940f, +0.013168f, -0.016433f, -0.012742f, -0.001112f, -0.012851f, - -0.007504f, -0.006141f, -0.017487f, -0.009630f, -0.013216f, -0.002371f, -0.006295f, -0.005639f, +0.012981f, -0.006994f, - -0.006503f, +0.003306f, -0.003984f, -0.019709f, +0.006388f, -0.002979f, +0.001276f, +0.011432f, -0.007093f, +0.011605f, - -0.001651f, -0.006555f, +0.003029f, -0.008482f, +0.008013f, +0.002579f, +0.008740f, -0.003004f, -0.008441f, +0.002635f, - -0.007367f, +0.000878f, -0.008045f, -0.000966f, +0.008577f, +0.001369f, -0.000249f, +0.000346f, +0.003207f, -0.003890f, - -0.006632f, +0.000249f, -0.001020f, +0.005277f, +0.005078f, -0.005974f, +0.006296f, +0.000231f, -0.005080f, -0.002543f, - -0.001248f, +0.006836f, -0.000918f, +0.002602f, -0.002579f, -0.001323f, +0.000632f, +0.000403f, -0.000780f, -0.001725f, - -0.001513f, -0.003120f, -0.000253f, -0.000270f, -0.001282f, +0.001044f - }, - { - -0.026194f, +0.072573f, -0.033856f, +0.002255f, -0.041848f, -0.023353f, -0.040674f, +0.048630f, -0.000206f, -0.003118f, - +0.016761f, -0.013540f, -0.003495f, -0.007329f, -0.027736f, +0.009087f, +0.007410f, +0.031677f, -0.005923f, +0.015883f, - -0.006264f, +0.004969f, -0.026796f, +0.008369f, -0.019482f, -0.003007f, +0.016413f, +0.000594f, -0.002008f, +0.006554f, - -0.002012f, -0.022579f, -0.010807f, +0.009639f, -0.017871f, +0.001263f, +0.023456f, +0.011910f, +0.005393f, -0.000333f, - -0.007555f, +0.002500f, +0.003111f, -0.001063f, -0.007625f, +0.013136f, -0.003169f, +0.005115f, -0.001972f, +0.010210f, - +0.001200f, -0.005694f, -0.006616f, +0.003382f, +0.002841f, +0.005855f, -0.007242f, +0.003171f, -0.000734f, -0.000283f, - -0.002439f, -0.000952f, -0.002799f, +0.002757f, -0.004034f, +0.004631f, +0.001144f, -0.000361f, +0.002385f, +0.000960f, - +0.000275f, -0.002123f, +0.001217f, +0.005877f, -0.001007f, -0.004077f, -0.001521f, +0.001257f, +0.000150f, +0.001161f, - -0.002821f, -0.001146f, +0.003725f, +0.002305f, +0.003146f, +0.000686f, -0.005258f, -0.002492f, +0.001288f, -0.003588f, - -0.000382f, +0.000687f, +0.000924f, +0.000408f, +0.002663f, -0.000194f - }, - { - -0.005333f, -0.013961f, +0.006058f, -0.008244f, -0.006553f, -0.002089f, +0.015833f, +0.000534f, +0.001294f, +0.015083f, - -0.026749f, -0.023236f, +0.013265f, -0.044125f, -0.006224f, -0.004086f, +0.020042f, -0.017766f, -0.002643f, -0.022544f, - -0.006801f, -0.025366f, -0.003397f, -0.001923f, -0.004693f, -0.008588f, -0.019055f, +0.024417f, +0.029883f, +0.007153f, - -0.010096f, +0.006203f, -0.014926f, +0.001558f, -0.012403f, +0.003994f, +0.022072f, +0.002079f, -0.004033f, +0.014122f, - +0.002101f, -0.007592f, -0.002507f, +0.002449f, +0.003907f, +0.005226f, -0.011198f, -0.017777f, -0.005850f, +0.017528f, - -0.005843f, -0.002664f, +0.000306f, -0.001851f, +0.002720f, -0.009128f, +0.003896f, +0.000298f, +0.010455f, -0.001401f, - +0.003695f, -0.007571f, +0.008414f, +0.006200f, +0.005619f, -0.002622f, -0.006733f, +0.000355f, -0.001028f, -0.008103f, - +0.004013f, -0.002580f, +0.000861f, +0.003151f, -0.001391f, +0.005796f, -0.003215f, -0.004343f, -0.000696f, -0.001122f, - -0.005309f, +0.001446f, +0.000059f, +0.000263f, +0.002120f, -0.000098f, +0.003159f, +0.002416f, +0.000889f, +0.002787f, - -0.003339f, +0.001324f, -0.000231f, +0.000119f, -0.001042f, +0.004037f - }, - { - +0.029813f, +0.021308f, +0.019922f, +0.017327f, -0.023762f, +0.056590f, -0.008786f, +0.015970f, -0.013899f, -0.013982f, - +0.022262f, -0.009262f, +0.001982f, +0.005517f, -0.003679f, -0.033679f, +0.014489f, -0.015208f, +0.002996f, +0.039557f, - -0.020541f, +0.006996f, -0.002844f, +0.006287f, +0.033331f, +0.006163f, +0.008959f, +0.019999f, +0.004219f, +0.006522f, - +0.013949f, +0.002653f, -0.004288f, -0.006279f, -0.015130f, +0.006864f, +0.008028f, +0.001464f, +0.000716f, -0.001311f, - -0.002444f, +0.007952f, +0.007181f, +0.001661f, +0.004716f, -0.005944f, +0.009543f, +0.003341f, +0.005550f, +0.006752f, - +0.003887f, +0.012829f, -0.001831f, -0.000574f, +0.009093f, +0.002500f, -0.000490f, -0.002974f, -0.004640f, +0.009986f, - -0.003977f, +0.003679f, +0.001180f, -0.003374f, +0.000349f, +0.003417f, -0.005388f, +0.001946f, +0.003314f, -0.001083f, - +0.000590f, -0.003200f, +0.003299f, +0.002926f, +0.001197f, +0.003097f, +0.000511f, -0.001543f, +0.000327f, -0.005199f, - +0.001991f, +0.000767f, +0.003396f, -0.000884f, +0.002550f, -0.002024f, -0.000368f, -0.001001f, +0.001995f, +0.006297f, - +0.003075f, +0.002307f, -0.000839f, -0.000169f, +0.002298f, +0.001661f - }, - { - +0.006619f, -0.035063f, +0.006079f, -0.004825f, -0.002176f, +0.006128f, -0.000716f, +0.008780f, -0.006182f, +0.000807f, - -0.004724f, +0.003277f, +0.001636f, +0.092291f, +0.199568f, -0.001970f, -0.014985f, -0.004706f, +0.014987f, -0.000349f, - -0.007548f, +0.010211f, +0.004299f, -0.009772f, +0.002414f, -0.001544f, -0.044721f, -0.008754f, -0.013429f, -0.018359f, - +0.012034f, +0.004103f, +0.001805f, +0.015064f, -0.010205f, +0.004475f, -0.002353f, -0.016202f, +0.003135f, -0.010728f, - +0.007030f, +0.000472f, +0.002027f, +0.016598f, +0.001442f, +0.019692f, +0.006257f, -0.007956f, -0.009646f, +0.006488f, - -0.001993f, +0.004836f, -0.009632f, +0.006239f, +0.008997f, -0.003903f, +0.002055f, -0.003972f, -0.006850f, +0.005214f, - +0.003880f, -0.006756f, +0.001486f, +0.001366f, -0.005527f, +0.003493f, -0.000827f, +0.001882f, +0.003902f, +0.006950f, - -0.002878f, +0.000555f, +0.001329f, -0.001452f, +0.000258f, +0.004574f, -0.005038f, +0.003768f, +0.000334f, +0.004443f, - +0.003049f, -0.001090f, -0.000202f, +0.000873f, +0.000085f, +0.005740f, -0.001118f, +0.000539f, -0.003141f, -0.004344f, - +0.000180f, -0.002352f, +0.001960f, -0.004105f, +0.000612f, -0.000221f - }, - { - +0.030820f, -0.015704f, -0.012518f, -0.017558f, +0.029422f, +0.026762f, -0.004679f, +0.001497f, -0.013952f, +0.012121f, - -0.001900f, +0.029267f, +0.006595f, -0.011783f, -0.081573f, +0.002779f, -0.012010f, -0.015129f, -0.010497f, +0.000095f, - -0.032652f, -0.002663f, -0.001632f, -0.027158f, -0.017970f, -0.004950f, -0.001082f, +0.028749f, -0.016059f, -0.023869f, - -0.003629f, -0.006145f, +0.003083f, +0.004201f, +0.010101f, -0.004099f, -0.004137f, -0.020921f, -0.001778f, +0.023552f, - -0.001505f, +0.011614f, -0.018616f, +0.011357f, +0.010698f, +0.014719f, -0.005235f, +0.009064f, +0.000797f, +0.001030f, - +0.009024f, -0.007817f, +0.000168f, +0.002301f, +0.002098f, +0.005086f, +0.002434f, +0.002378f, -0.008044f, +0.006506f, - +0.002378f, +0.003367f, +0.002865f, +0.009830f, +0.002702f, -0.011784f, -0.000023f, -0.007643f, +0.001820f, -0.007918f, - +0.005583f, -0.000084f, +0.012775f, +0.002211f, -0.004427f, -0.005924f, +0.000402f, +0.003350f, -0.003234f, -0.005911f, - +0.002308f, +0.000566f, +0.000581f, -0.003306f, -0.000342f, -0.000326f, -0.002686f, +0.001332f, -0.002485f, +0.000176f, - -0.002559f, -0.002798f, +0.001291f, +0.002158f, -0.000438f, -0.002978f - } - }, - { - { - -0.003373f, -0.026072f, +0.027737f, +0.021078f, -0.045470f, +0.003257f, -0.012750f, -0.008346f, +0.006075f, +0.001826f, - -0.011470f, +0.018426f, +0.002870f, -0.006068f, -0.000434f, +0.001287f, -0.004585f, +0.006528f, +0.025006f, -0.007036f, - +0.003309f, -0.019491f, -0.015075f, +0.027205f, -0.009573f, +0.025063f, -0.000355f, -0.003256f, +0.007354f, +0.009847f, - +0.005683f, -0.001836f, -0.019611f, +0.002167f, +0.002947f, -0.020624f, +0.015387f, +0.017162f, +0.009834f, +0.005906f, - +0.003860f, -0.005234f, -0.008793f, +0.006689f, -0.006339f, +0.001925f, -0.011191f, +0.001507f, +0.002117f, -0.004846f, - -0.001797f, +0.003135f, +0.007921f, -0.011396f, +0.006431f, +0.009096f, +0.003500f, +0.005262f, +0.000921f, -0.006382f, - -0.009119f, +0.002763f, -0.001652f, -0.003745f, -0.007893f, +0.006730f, +0.002335f, +0.000377f, -0.001807f, -0.008552f, - +0.001496f, -0.001456f, +0.000920f, -0.002330f, +0.004590f, -0.002962f, +0.005782f, +0.000477f, +0.001411f, -0.004913f, - +0.002419f, +0.002137f, +0.003979f, +0.001898f, -0.002550f, +0.003958f, -0.002966f, -0.002071f, -0.003394f, +0.001729f, - -0.000532f, +0.000282f, -0.002086f, +0.001647f, +0.003347f, +0.000858f - }, - { - -0.040305f, +0.116461f, +0.036514f, +0.209998f, +0.008867f, -0.020062f, +0.022635f, +0.000386f, -0.028635f, +0.009596f, - -0.016591f, -0.001241f, -0.003281f, +0.015694f, -0.005311f, -0.016855f, -0.012717f, +0.008968f, +0.001672f, -0.022145f, - +0.025160f, +0.020838f, -0.013993f, +0.008075f, +0.001051f, +0.011452f, -0.022027f, -0.000013f, +0.008421f, +0.002151f, - -0.015391f, +0.003041f, +0.005248f, -0.007344f, -0.005812f, +0.000651f, +0.010996f, +0.018468f, +0.007461f, +0.007911f, - +0.000080f, +0.004433f, -0.006936f, -0.002119f, -0.009158f, +0.012608f, +0.001858f, -0.003260f, -0.000811f, -0.009325f, - +0.006685f, -0.007757f, -0.001168f, -0.006576f, -0.004813f, +0.005739f, -0.005866f, +0.004440f, +0.006181f, -0.004945f, - -0.007593f, +0.008968f, +0.002117f, +0.001388f, +0.003646f, +0.003841f, -0.002374f, -0.002349f, +0.001043f, +0.004596f, - -0.007428f, -0.000846f, +0.003648f, -0.002548f, -0.000800f, -0.004579f, +0.002468f, -0.002754f, +0.006814f, +0.001600f, - -0.002769f, +0.003143f, +0.000791f, +0.000386f, -0.002288f, +0.004499f, -0.004068f, +0.006142f, -0.001527f, +0.002303f, - +0.001241f, +0.000840f, -0.001718f, +0.002834f, -0.005548f, -0.000595f - }, - { - +0.014201f, -0.000440f, -0.053130f, -0.065916f, +0.014266f, -0.009369f, -0.025501f, +0.018424f, +0.001778f, +0.018579f, - -0.013651f, -0.018519f, -0.022264f, +0.030297f, -0.014813f, +0.012376f, -0.002365f, +0.006126f, -0.009846f, -0.012211f, - +0.020811f, -0.015299f, +0.011683f, -0.013907f, -0.005487f, +0.006036f, +0.009961f, +0.001369f, -0.006124f, -0.005145f, - +0.000002f, +0.007869f, +0.016149f, +0.016847f, +0.002296f, -0.005928f, +0.009135f, +0.003750f, -0.005685f, +0.008169f, - -0.007065f, +0.000892f, +0.002538f, -0.008527f, -0.004574f, +0.001718f, -0.006254f, +0.001810f, -0.003072f, +0.005868f, - +0.000041f, +0.004532f, +0.011061f, +0.015566f, +0.002376f, -0.006510f, -0.003474f, +0.003731f, -0.001799f, +0.008630f, - +0.000681f, +0.002785f, -0.001247f, +0.000318f, -0.001266f, -0.006146f, +0.001896f, +0.001008f, +0.003892f, -0.002346f, - -0.001617f, +0.001632f, -0.006663f, -0.001940f, -0.000784f, -0.002352f, +0.001207f, -0.002690f, +0.000242f, +0.003079f, - -0.003437f, -0.004413f, +0.001584f, -0.003274f, +0.000663f, -0.001294f, -0.002844f, -0.002933f, -0.000035f, +0.002111f, - +0.001982f, -0.000431f, -0.002251f, +0.001171f, +0.000834f, -0.005026f - }, - { - +0.001781f, +0.044265f, -0.019376f, -0.019376f, +0.001258f, -0.000576f, -0.001934f, -0.006368f, -0.000394f, +0.000916f, - +0.009531f, -0.007330f, -0.020044f, -0.006488f, +0.005060f, -0.001126f, -0.000353f, -0.005288f, +0.005738f, -0.003449f, - +0.008016f, +0.016207f, +0.008477f, -0.002055f, -0.004727f, +0.017955f, +0.007904f, +0.012613f, -0.019120f, -0.014279f, - -0.013758f, +0.011008f, -0.006559f, +0.005889f, -0.013741f, -0.007468f, +0.010306f, +0.001641f, -0.003365f, +0.006465f, - -0.012715f, -0.007115f, -0.010812f, -0.006516f, -0.004675f, -0.005980f, +0.008488f, +0.001143f, +0.010137f, +0.011527f, - +0.003503f, -0.011479f, -0.002270f, -0.002909f, -0.008155f, +0.001548f, +0.006279f, -0.002992f, +0.003596f, +0.010433f, - +0.014918f, +0.004314f, +0.002751f, -0.000133f, +0.004714f, -0.000495f, -0.001096f, -0.006609f, -0.005655f, +0.001912f, - +0.002598f, +0.001945f, -0.008501f, -0.002364f, +0.001708f, +0.000124f, +0.004951f, +0.001317f, +0.000395f, +0.003001f, - -0.000943f, -0.003920f, -0.004182f, +0.003447f, +0.000564f, -0.000670f, -0.000817f, +0.002453f, -0.003032f, +0.001000f, - -0.002415f, +0.001206f, +0.003647f, -0.000034f, -0.001889f, -0.001567f - }, - { - -0.020701f, -0.060666f, -0.000839f, -0.046255f, +0.018864f, -0.001763f, +0.004106f, -0.008052f, +0.013819f, -0.010465f, - +0.041384f, +0.025547f, +0.026081f, +0.004553f, +0.017346f, -0.009079f, +0.006912f, -0.030853f, +0.007656f, +0.019643f, - -0.001005f, +0.013751f, -0.002790f, -0.008881f, -0.003269f, -0.014077f, -0.004353f, -0.027967f, +0.004185f, +0.008858f, - -0.002122f, +0.008501f, -0.005681f, -0.003297f, -0.007132f, -0.002219f, -0.006411f, -0.014555f, +0.008991f, -0.014026f, - +0.006050f, +0.002239f, +0.002614f, +0.010890f, -0.001229f, -0.000145f, +0.007620f, -0.001565f, -0.003480f, -0.014800f, - +0.008202f, -0.000945f, +0.006326f, -0.009275f, -0.003752f, +0.004521f, -0.007053f, +0.005924f, +0.003286f, +0.002357f, - +0.001861f, -0.005416f, -0.000014f, +0.000130f, +0.009229f, -0.001211f, +0.000955f, +0.004350f, -0.007341f, -0.001837f, - -0.004264f, -0.001621f, -0.002837f, -0.002016f, -0.002169f, +0.002127f, -0.000874f, -0.002023f, -0.003826f, -0.001254f, - -0.000457f, -0.002212f, +0.000897f, +0.001349f, -0.000239f, +0.000359f, -0.002435f, +0.002425f, +0.001788f, +0.003424f, - +0.003684f, +0.000953f, -0.003932f, -0.001289f, -0.001466f, +0.000787f - }, - { - +0.002791f, -0.039373f, +0.003226f, +0.003728f, +0.002587f, -0.002258f, +0.001450f, -0.008698f, +0.010829f, -0.000591f, - +0.006203f, -0.002592f, +0.001535f, +0.005814f, +0.002506f, -0.008789f, +0.026316f, +0.020423f, -0.019301f, +0.018341f, - +0.001322f, +0.006170f, -0.012531f, +0.030803f, +0.004626f, +0.022645f, -0.005206f, +0.019246f, -0.019457f, -0.017745f, - -0.012831f, +0.001598f, +0.005278f, -0.013810f, -0.011551f, -0.006527f, -0.015637f, +0.004253f, +0.001998f, +0.010100f, - -0.016367f, +0.021647f, -0.010266f, -0.002728f, +0.009580f, -0.001926f, +0.006434f, -0.004441f, -0.003080f, +0.002223f, - -0.004328f, +0.004664f, +0.005561f, +0.009296f, +0.006196f, +0.007362f, -0.000342f, -0.006981f, -0.000369f, +0.003781f, - -0.001673f, -0.001036f, +0.000424f, -0.007932f, +0.004110f, -0.002595f, -0.003479f, -0.004762f, +0.004086f, +0.000525f, - -0.003815f, -0.004232f, +0.002926f, +0.002399f, +0.005099f, +0.000371f, +0.000349f, +0.001311f, +0.004068f, +0.000424f, - -0.002779f, +0.000123f, -0.003043f, +0.000265f, -0.000022f, -0.000770f, +0.003201f, -0.004006f, +0.000533f, -0.001462f, - -0.000406f, -0.000434f, -0.001636f, +0.001161f, +0.001042f, +0.002260f - }, - { - -0.041635f, +0.018181f, -0.022480f, -0.020219f, +0.016876f, -0.010029f, -0.006852f, -0.003638f, -0.009486f, -0.015831f, - +0.017987f, -0.003557f, -0.000737f, +0.009181f, -0.011878f, +0.018715f, -0.003936f, -0.009569f, -0.019761f, +0.003433f, - +0.030048f, -0.010589f, -0.002517f, +0.002505f, +0.051214f, +0.001008f, +0.017319f, -0.006976f, +0.013916f, +0.003604f, - -0.016513f, +0.016019f, +0.005684f, +0.002035f, -0.004263f, -0.019631f, -0.003700f, +0.000413f, -0.009238f, -0.014826f, - -0.001909f, +0.000819f, -0.014224f, +0.009213f, +0.004844f, -0.005749f, -0.007703f, -0.002575f, +0.001294f, +0.013349f, - +0.005345f, -0.009588f, -0.004252f, +0.005998f, +0.002696f, -0.000523f, -0.004040f, +0.003774f, -0.006364f, +0.001032f, - -0.005316f, +0.001099f, +0.005021f, -0.001795f, +0.004080f, +0.007708f, +0.000696f, +0.003393f, +0.001368f, -0.002489f, - -0.001614f, -0.000822f, -0.005228f, +0.000102f, -0.004396f, -0.000215f, -0.000949f, +0.002321f, -0.000887f, -0.007174f, - +0.001737f, +0.000626f, +0.001608f, +0.003730f, -0.000720f, -0.000934f, +0.000554f, +0.001964f, -0.000081f, +0.000297f, - -0.001530f, +0.000108f, -0.004093f, +0.000519f, +0.001515f, -0.003413f - }, - { - +0.005705f, +0.022543f, +0.024256f, -0.015689f, +0.005729f, +0.003987f, -0.002109f, +0.003935f, +0.002009f, -0.007747f, - -0.009548f, +0.019941f, -0.001830f, +0.009730f, +0.008181f, +0.008988f, +0.022337f, -0.017282f, -0.017428f, +0.004759f, - +0.013087f, +0.012237f, +0.015175f, -0.013945f, +0.005570f, +0.014072f, -0.017353f, +0.010156f, -0.024722f, -0.007708f, - +0.017536f, -0.025816f, -0.008244f, -0.014749f, +0.003360f, +0.017958f, -0.018660f, -0.015868f, -0.007280f, +0.014636f, - +0.003622f, -0.002198f, -0.001743f, +0.012665f, +0.003982f, -0.003087f, -0.007368f, +0.000208f, +0.001196f, +0.008677f, - +0.009296f, -0.016040f, +0.000229f, +0.000296f, -0.003844f, +0.001712f, -0.000256f, -0.007790f, +0.001225f, -0.009635f, - +0.002651f, -0.007767f, -0.006318f, +0.006222f, +0.000961f, +0.000768f, -0.004120f, +0.004957f, +0.001694f, -0.002206f, - -0.003289f, -0.001187f, +0.000426f, +0.002883f, -0.000770f, -0.003375f, -0.002132f, -0.000901f, -0.001059f, -0.002430f, - +0.000263f, -0.002942f, +0.000766f, -0.000496f, +0.002333f, +0.000442f, -0.002329f, +0.001325f, +0.000679f, -0.001108f, - -0.002028f, -0.003444f, +0.004673f, -0.000424f, +0.000927f, +0.000744f - }, - { - -0.050001f, -0.039459f, -0.010088f, -0.034530f, +0.044948f, -0.006264f, -0.024922f, -0.017641f, -0.025316f, -0.014234f, - +0.032042f, +0.002240f, +0.016386f, +0.026897f, -0.021872f, +0.022864f, +0.032251f, -0.005697f, -0.004946f, +0.011790f, - -0.016217f, -0.004044f, +0.011090f, -0.002312f, -0.004472f, -0.002357f, -0.001913f, -0.003240f, -0.004803f, -0.004077f, - +0.004126f, +0.012007f, -0.002415f, +0.008357f, +0.005482f, -0.005849f, -0.004723f, +0.012644f, +0.005282f, +0.000234f, - +0.000112f, +0.000097f, -0.014558f, +0.003932f, +0.001734f, -0.013450f, +0.010804f, -0.003204f, -0.014204f, -0.004164f, - +0.009976f, +0.002896f, -0.000176f, -0.002791f, +0.009171f, +0.004659f, -0.000465f, -0.000672f, -0.001977f, -0.009627f, - -0.004465f, +0.004962f, +0.000934f, +0.015954f, +0.003254f, +0.001119f, +0.000843f, -0.000002f, +0.004008f, +0.000675f, - +0.000344f, +0.003625f, +0.003708f, +0.000543f, -0.002568f, +0.003772f, +0.001330f, -0.000771f, -0.004676f, +0.005096f, - -0.003063f, +0.000836f, +0.003838f, +0.001812f, +0.000315f, +0.001883f, -0.002696f, -0.001800f, +0.001065f, -0.000920f, - +0.002596f, +0.000573f, -0.001209f, -0.002797f, -0.000390f, -0.000770f - }, - { - +0.005748f, -0.063657f, +0.000455f, -0.000281f, +0.007427f, -0.006892f, +0.037384f, -0.008578f, -0.016977f, -0.002951f, - -0.021726f, -0.003252f, -0.021523f, -0.002561f, +0.012087f, -0.011674f, -0.043982f, -0.002336f, +0.013774f, -0.002113f, - -0.000235f, +0.007497f, -0.022503f, +0.002592f, -0.000348f, +0.004524f, -0.002820f, -0.016960f, -0.003206f, -0.009506f, - +0.002425f, -0.016389f, -0.028196f, +0.018056f, -0.008606f, -0.019631f, -0.005185f, +0.001534f, +0.005282f, -0.016727f, - +0.009719f, -0.000955f, +0.003182f, -0.011585f, -0.008489f, +0.002126f, +0.001186f, +0.005505f, +0.007910f, +0.002016f, - -0.009922f, +0.002796f, -0.002320f, -0.001697f, +0.008119f, +0.007748f, -0.002016f, +0.005771f, -0.007787f, -0.000945f, - -0.005460f, -0.000503f, -0.000734f, -0.007797f, +0.005573f, +0.005881f, -0.004637f, +0.001846f, -0.002921f, +0.000758f, - -0.004533f, -0.001745f, -0.001315f, +0.000889f, +0.005060f, -0.002864f, +0.004425f, -0.002644f, -0.003198f, -0.000408f, - +0.004107f, +0.003732f, -0.001856f, -0.000714f, +0.002335f, -0.004288f, +0.003392f, -0.001345f, +0.000152f, -0.003365f, - +0.001418f, -0.005521f, -0.000328f, +0.001777f, -0.003502f, +0.001874f - }, - { - +0.032627f, +0.063910f, -0.080475f, -0.030679f, -0.008481f, -0.052312f, -0.007505f, +0.025200f, +0.019512f, +0.013208f, - -0.010385f, -0.001370f, -0.015478f, -0.009758f, +0.009835f, -0.002031f, +0.003731f, +0.036289f, -0.004511f, +0.006633f, - -0.006868f, -0.002967f, -0.019205f, -0.000551f, -0.001654f, -0.011031f, +0.007055f, +0.014891f, -0.028940f, +0.020136f, - -0.012052f, -0.008885f, +0.002697f, +0.003808f, -0.010538f, +0.002788f, +0.008398f, +0.006230f, +0.009915f, -0.002450f, - -0.008646f, +0.012905f, -0.000506f, +0.002364f, -0.004357f, +0.013201f, -0.003833f, -0.002911f, +0.004585f, +0.006711f, - -0.004535f, -0.008360f, +0.005836f, +0.003789f, -0.004531f, +0.002175f, +0.001839f, -0.002434f, +0.006866f, -0.003298f, - -0.004861f, +0.000364f, +0.003984f, +0.004062f, -0.006105f, +0.005258f, +0.000414f, -0.002664f, +0.004582f, -0.001158f, - +0.000437f, +0.000090f, +0.003345f, -0.001451f, +0.000310f, -0.000590f, -0.000762f, +0.001490f, -0.000126f, +0.002556f, - -0.004563f, +0.001432f, +0.003882f, +0.000828f, -0.000215f, -0.001532f, -0.000807f, -0.003824f, +0.000828f, -0.003447f, - -0.003030f, +0.000154f, +0.001730f, +0.003242f, +0.000675f, -0.000573f - }, - { - +0.004146f, -0.004189f, -0.000224f, -0.014485f, -0.000480f, +0.001139f, +0.010259f, -0.000123f, +0.003240f, +0.009621f, - -0.011827f, -0.029556f, -0.016910f, -0.008868f, +0.003027f, -0.022465f, +0.015235f, -0.000901f, +0.011223f, -0.025457f, - -0.018612f, -0.023185f, -0.009107f, -0.022501f, +0.011632f, -0.004261f, -0.010229f, +0.039146f, +0.024645f, -0.003540f, - +0.007338f, -0.001890f, -0.013647f, -0.013531f, +0.002201f, +0.005954f, -0.007401f, +0.007110f, +0.015487f, +0.009549f, - +0.006366f, -0.015239f, -0.003920f, +0.018424f, -0.003683f, +0.002323f, -0.007813f, -0.010131f, -0.003986f, +0.007734f, - -0.003927f, -0.000542f, -0.003012f, +0.000601f, +0.000228f, -0.005355f, +0.004084f, +0.000946f, +0.009294f, -0.005207f, - +0.000741f, +0.004192f, -0.000820f, +0.008058f, +0.006533f, -0.004577f, +0.004527f, -0.005486f, -0.003071f, +0.000648f, - -0.002293f, +0.001666f, -0.000338f, -0.001266f, +0.003301f, +0.005280f, -0.004167f, +0.000971f, -0.003663f, -0.000190f, - -0.003993f, -0.001238f, +0.005467f, -0.003209f, +0.004736f, -0.000644f, -0.001768f, +0.004992f, +0.000321f, +0.003122f, - -0.003045f, +0.001126f, +0.001545f, -0.000442f, -0.001751f, +0.001182f - }, - { - -0.016122f, +0.120275f, -0.022465f, +0.022309f, +0.007732f, +0.012737f, +0.003782f, +0.025340f, -0.006806f, -0.010905f, - +0.009440f, +0.012088f, +0.022004f, -0.038556f, +0.014077f, -0.009376f, -0.021018f, -0.011568f, +0.017376f, +0.002784f, - +0.010490f, -0.001864f, -0.013762f, +0.039046f, -0.011540f, +0.012071f, +0.019996f, +0.007288f, +0.001038f, +0.017987f, - +0.013491f, -0.011431f, +0.002366f, +0.003639f, -0.009955f, +0.003317f, +0.002052f, +0.006544f, -0.009050f, +0.007483f, - +0.004017f, +0.008568f, +0.000376f, +0.016149f, -0.008716f, +0.013460f, -0.008705f, +0.014491f, -0.007087f, +0.011795f, - +0.008276f, -0.002970f, +0.005099f, -0.000401f, +0.005388f, +0.001672f, +0.007164f, -0.000993f, -0.009074f, +0.013236f, - -0.001756f, -0.000741f, +0.000157f, -0.002038f, +0.001003f, -0.002433f, +0.003485f, +0.000034f, +0.003029f, +0.001869f, - -0.000883f, +0.000577f, -0.002644f, +0.004587f, -0.002519f, +0.003673f, -0.000124f, +0.000015f, +0.003103f, -0.007439f, - +0.000778f, +0.002140f, +0.002209f, -0.001168f, +0.004530f, -0.001084f, -0.001499f, +0.002282f, +0.000947f, +0.004239f, - +0.002749f, +0.004764f, +0.000174f, -0.000140f, +0.000520f, +0.000952f - }, - { - -0.007982f, -0.019290f, +0.003205f, +0.008390f, -0.001356f, -0.007039f, +0.008470f, -0.000664f, +0.011155f, -0.005476f, - +0.004864f, -0.000135f, -0.000788f, +0.065342f, +0.207535f, -0.017658f, -0.004473f, -0.008221f, +0.006340f, +0.005352f, - +0.020846f, -0.017696f, +0.010486f, -0.005108f, -0.004468f, -0.026043f, -0.017180f, -0.018450f, -0.025851f, -0.010528f, - -0.004362f, +0.002841f, +0.007890f, +0.010964f, +0.014368f, -0.010433f, -0.011158f, +0.000389f, +0.003098f, -0.017442f, - +0.000786f, -0.001870f, +0.010488f, +0.006832f, -0.003274f, +0.023161f, -0.000218f, +0.000503f, -0.006148f, -0.005156f, - +0.008170f, -0.000378f, +0.010804f, -0.008229f, +0.000636f, -0.000888f, -0.000161f, -0.000441f, -0.013764f, +0.006765f, - -0.003482f, +0.005408f, +0.000615f, -0.005950f, -0.005451f, +0.009112f, +0.000101f, -0.001978f, +0.004624f, +0.003188f, - +0.007073f, -0.003523f, +0.000092f, -0.004004f, +0.004860f, +0.001970f, -0.004163f, -0.001564f, +0.004488f, +0.003035f, - +0.000911f, +0.002268f, -0.002122f, +0.001839f, +0.004331f, +0.002213f, -0.001280f, -0.004412f, +0.002771f, -0.004929f, - -0.003002f, +0.000747f, -0.001247f, -0.002882f, +0.000241f, -0.001632f - }, - { - -0.029652f, +0.074370f, +0.003590f, -0.012669f, +0.008611f, -0.007839f, +0.013520f, +0.003986f, -0.002347f, +0.012983f, - +0.009738f, +0.014807f, +0.006496f, -0.044508f, -0.032595f, +0.012885f, -0.028133f, -0.021413f, -0.003070f, -0.007488f, - -0.010081f, -0.004543f, -0.012965f, -0.016258f, -0.005560f, -0.020664f, +0.005218f, +0.015305f, -0.001053f, -0.015732f, - -0.012834f, +0.006894f, +0.000161f, -0.001152f, +0.008538f, -0.002929f, -0.021564f, +0.004315f, +0.001197f, +0.007809f, - +0.018218f, -0.003601f, -0.010041f, +0.014932f, +0.007698f, +0.008839f, -0.002707f, -0.001333f, -0.001218f, +0.009630f, - +0.006260f, -0.005776f, -0.006020f, +0.005404f, +0.000172f, +0.002903f, +0.007972f, +0.001763f, -0.003855f, +0.000538f, - +0.005815f, +0.002590f, -0.001258f, +0.013094f, +0.001724f, -0.009377f, -0.002095f, -0.001557f, -0.005579f, -0.004454f, - +0.003611f, +0.004770f, +0.004197f, +0.000283f, +0.000847f, -0.005866f, -0.000321f, +0.000553f, -0.003446f, -0.004589f, - +0.001463f, +0.000113f, -0.002207f, -0.001720f, -0.001170f, -0.001113f, +0.000540f, -0.004104f, +0.001163f, -0.000589f, - -0.004173f, +0.000042f, +0.000584f, -0.000333f, -0.000117f, -0.001998f - } - }, - { - { - +0.000567f, -0.078455f, -0.014022f, +0.078781f, -0.001611f, -0.006773f, -0.014416f, -0.007692f, +0.014302f, +0.015974f, - -0.007435f, +0.006048f, +0.002159f, -0.004832f, +0.018453f, +0.017847f, -0.010728f, -0.012347f, +0.023036f, +0.008632f, - +0.013061f, -0.014631f, -0.004423f, +0.035262f, -0.007039f, +0.025193f, +0.004260f, +0.006295f, +0.006132f, -0.008440f, - +0.004089f, +0.017281f, -0.001046f, +0.010408f, +0.009816f, -0.011970f, +0.012617f, +0.002294f, -0.013952f, -0.008363f, - -0.002088f, +0.003846f, -0.008653f, +0.002443f, -0.004687f, +0.000345f, -0.007276f, +0.000336f, -0.005256f, -0.008255f, - -0.006005f, -0.009361f, +0.000331f, -0.007056f, +0.009871f, +0.002034f, -0.001880f, +0.007680f, +0.008914f, -0.000311f, - -0.009230f, +0.003776f, +0.002668f, +0.000217f, -0.007509f, -0.000864f, -0.003580f, -0.000069f, +0.001167f, -0.000737f, - +0.009743f, +0.003371f, +0.000581f, -0.006271f, +0.001075f, -0.004667f, +0.001782f, +0.000619f, +0.003804f, -0.005423f, - +0.000293f, -0.001562f, +0.000353f, +0.003683f, -0.003719f, +0.001412f, -0.003159f, +0.001511f, -0.000707f, +0.001169f, - +0.000406f, +0.001659f, -0.001707f, -0.000388f, +0.000663f, +0.000894f - }, - { - +0.042745f, +0.137323f, -0.055737f, +0.140146f, -0.038142f, -0.012829f, +0.014641f, -0.009713f, -0.015015f, -0.006884f, - -0.048946f, +0.002902f, -0.006265f, -0.001798f, -0.015076f, -0.028108f, -0.001091f, +0.020321f, +0.016859f, -0.003616f, - +0.007975f, +0.010062f, -0.015003f, +0.007419f, -0.002356f, +0.001229f, -0.030731f, -0.003154f, -0.003088f, -0.000723f, - -0.017060f, +0.003761f, +0.002586f, -0.007952f, -0.009157f, -0.002997f, +0.008814f, +0.024324f, +0.011547f, +0.009690f, - -0.003035f, +0.012846f, +0.015562f, +0.009026f, -0.005177f, +0.002307f, -0.009137f, -0.000408f, +0.011597f, -0.008914f, - +0.002528f, -0.004500f, +0.003764f, -0.003456f, +0.003318f, +0.014623f, -0.000241f, -0.004450f, -0.002494f, -0.004414f, - -0.008844f, +0.011497f, +0.001145f, -0.000518f, +0.002947f, +0.003063f, -0.001928f, +0.004825f, +0.000011f, +0.000591f, - -0.008011f, -0.001124f, -0.000439f, -0.003229f, +0.000049f, -0.001387f, +0.009345f, -0.002844f, -0.001382f, -0.004541f, - -0.006584f, +0.001291f, +0.001686f, +0.000444f, -0.003292f, +0.004808f, -0.005713f, +0.003497f, -0.005360f, +0.000382f, - -0.000642f, +0.002292f, +0.000889f, +0.005153f, -0.003348f, -0.001602f - }, - { - -0.010640f, +0.084811f, +0.030523f, -0.114623f, +0.019694f, +0.028707f, -0.006320f, +0.022253f, -0.001132f, +0.024295f, - +0.011366f, +0.005361f, -0.034090f, +0.028470f, -0.013467f, -0.001700f, -0.006720f, +0.021579f, -0.018748f, -0.029874f, - +0.036404f, -0.006823f, +0.008282f, -0.003686f, +0.012413f, +0.028190f, +0.015309f, -0.002169f, -0.011188f, -0.002273f, - -0.001468f, +0.009012f, +0.006366f, +0.005880f, +0.019649f, -0.011547f, -0.005393f, +0.009464f, -0.014939f, -0.012367f, - -0.008044f, -0.000585f, -0.006301f, -0.007363f, -0.002003f, +0.008093f, -0.003234f, -0.000867f, -0.002375f, +0.005070f, - -0.007338f, -0.001900f, -0.003793f, +0.002707f, -0.002224f, +0.001408f, +0.007892f, +0.005177f, -0.004105f, +0.006187f, - -0.004130f, +0.004424f, +0.000030f, -0.001380f, -0.002548f, -0.000379f, +0.005220f, -0.003723f, -0.000709f, -0.002483f, - -0.002196f, -0.002928f, -0.007652f, -0.001427f, +0.002364f, +0.001956f, +0.004841f, -0.000095f, -0.001187f, +0.004001f, - -0.001993f, -0.003449f, +0.002843f, -0.001914f, +0.001180f, +0.000221f, -0.000997f, -0.001072f, -0.000820f, +0.002246f, - +0.003322f, +0.001138f, -0.001753f, -0.000608f, +0.000421f, -0.000497f - }, - { - -0.001146f, +0.069208f, +0.000707f, -0.012934f, +0.010187f, -0.000645f, -0.000291f, -0.005334f, +0.002279f, +0.007200f, - +0.015476f, -0.002289f, -0.010302f, -0.010403f, +0.014865f, -0.009833f, -0.021946f, -0.000046f, +0.031763f, +0.013726f, - +0.005800f, +0.010629f, +0.026888f, +0.000780f, -0.009894f, +0.046780f, +0.042709f, +0.020672f, -0.006682f, +0.002029f, - -0.001446f, +0.006028f, -0.000223f, +0.008749f, -0.016092f, -0.019243f, -0.017058f, -0.011486f, +0.011034f, +0.020760f, - +0.001447f, +0.014779f, -0.003276f, -0.000229f, -0.001743f, -0.007262f, +0.001946f, -0.003624f, +0.003322f, +0.005654f, - -0.000079f, -0.018210f, -0.008613f, +0.002659f, -0.000916f, +0.005581f, +0.013044f, -0.000644f, +0.004629f, +0.005077f, - +0.003449f, -0.004964f, -0.001271f, -0.002680f, +0.008453f, +0.006836f, +0.003819f, -0.000888f, -0.000861f, +0.007736f, - +0.004824f, +0.002761f, -0.008669f, +0.000601f, +0.007362f, +0.002832f, +0.005592f, -0.002464f, +0.001238f, +0.006241f, - +0.000386f, -0.002994f, -0.003703f, +0.001044f, -0.003853f, -0.002901f, -0.001148f, +0.003523f, -0.004981f, +0.000086f, - -0.001803f, +0.002571f, +0.005622f, +0.002632f, -0.000727f, -0.001403f - }, - { - +0.025155f, +0.004468f, +0.016118f, -0.062087f, -0.008844f, +0.000691f, -0.001993f, -0.023413f, -0.008279f, -0.027353f, - +0.023963f, -0.013885f, +0.004857f, +0.006289f, +0.025252f, -0.000230f, +0.005657f, -0.030925f, +0.000750f, +0.006133f, - +0.004652f, +0.020753f, -0.008961f, -0.004879f, +0.018637f, -0.009403f, -0.010350f, -0.014194f, +0.002561f, +0.005638f, - -0.008237f, +0.009435f, -0.000274f, +0.009800f, -0.004362f, -0.007492f, -0.007210f, -0.012065f, +0.032680f, +0.011686f, - +0.015412f, +0.002771f, +0.002345f, +0.008741f, -0.000470f, +0.013727f, +0.007530f, -0.006375f, +0.004679f, -0.005570f, - +0.001516f, -0.005024f, +0.015131f, +0.005178f, +0.001617f, +0.001713f, -0.005894f, +0.003770f, -0.001287f, +0.002229f, - +0.006722f, -0.007315f, -0.007428f, -0.009105f, +0.006179f, +0.004769f, +0.002570f, +0.004300f, -0.001946f, +0.005781f, - -0.000396f, -0.002129f, -0.002063f, +0.002342f, +0.005364f, +0.002596f, -0.006227f, -0.007135f, -0.004883f, -0.001231f, - -0.000064f, +0.002252f, +0.002259f, +0.000784f, -0.000935f, +0.002963f, +0.001559f, +0.004209f, +0.001825f, +0.002119f, - +0.001572f, +0.000765f, -0.003152f, +0.000129f, -0.001183f, -0.000902f - }, - { - +0.000022f, -0.035947f, +0.023888f, -0.005123f, -0.003714f, -0.001504f, -0.000094f, -0.008330f, +0.006845f, +0.001660f, - +0.008502f, -0.005704f, +0.009779f, +0.035774f, +0.011487f, -0.045697f, +0.000492f, +0.002360f, -0.024175f, +0.022926f, - +0.007380f, +0.000900f, -0.016506f, +0.026922f, -0.016617f, +0.002153f, -0.016609f, +0.011128f, -0.022116f, -0.021433f, - -0.017901f, +0.011544f, +0.033825f, +0.013401f, +0.005748f, +0.010677f, -0.003652f, +0.004900f, +0.001949f, +0.009479f, - -0.016302f, +0.024679f, -0.001751f, +0.000787f, +0.003465f, -0.006251f, +0.013360f, +0.001125f, +0.003361f, +0.005652f, - -0.008188f, +0.001644f, +0.005830f, +0.009239f, +0.000922f, -0.001636f, -0.004125f, -0.001787f, +0.006234f, +0.006248f, - +0.000968f, +0.002324f, -0.000158f, -0.002502f, +0.009269f, -0.000281f, +0.000753f, -0.002225f, +0.006581f, -0.002186f, - -0.007846f, -0.005589f, +0.006022f, +0.003241f, +0.005529f, +0.000518f, -0.002481f, +0.002478f, +0.007959f, +0.002878f, - -0.002137f, +0.001121f, +0.000915f, +0.003426f, -0.000385f, -0.000621f, -0.000225f, -0.006815f, +0.002566f, +0.003258f, - +0.003528f, -0.000189f, -0.001567f, +0.000405f, -0.001108f, +0.001228f - }, - { - +0.034975f, +0.120090f, +0.002513f, -0.029772f, -0.013804f, +0.005452f, +0.011316f, -0.012873f, -0.032186f, -0.013810f, - +0.024263f, +0.004812f, +0.002478f, +0.015920f, +0.003021f, +0.014908f, -0.025675f, -0.032950f, -0.023524f, -0.008021f, - +0.022676f, -0.013500f, -0.009004f, -0.022976f, +0.003063f, -0.017200f, +0.014393f, -0.001741f, +0.010572f, -0.006213f, - -0.020220f, +0.012941f, +0.005422f, +0.016068f, +0.009463f, -0.005776f, +0.003483f, +0.001395f, -0.008731f, -0.011506f, - +0.001996f, +0.005885f, -0.015412f, +0.012766f, +0.003912f, -0.010765f, +0.002271f, +0.007812f, +0.004637f, +0.009792f, - -0.003885f, -0.002923f, -0.003710f, -0.004428f, +0.005975f, +0.005800f, -0.001398f, +0.006892f, +0.000162f, +0.006504f, - +0.004116f, +0.003808f, +0.002836f, -0.000160f, +0.002895f, +0.009426f, +0.001559f, -0.002082f, -0.000072f, -0.001185f, - +0.000037f, +0.001156f, -0.001323f, +0.002872f, -0.005768f, -0.004140f, -0.002834f, +0.002672f, +0.000226f, -0.003843f, - +0.004755f, +0.003631f, +0.001268f, +0.002173f, -0.002180f, -0.004521f, -0.001419f, -0.001753f, -0.000487f, +0.003098f, - +0.001168f, +0.003896f, -0.001965f, +0.000354f, +0.000931f, -0.002691f - }, - { - -0.001258f, -0.047092f, -0.002599f, -0.007058f, +0.009199f, -0.000244f, -0.008190f, -0.007759f, -0.004611f, +0.003813f, - -0.006509f, +0.008387f, +0.001785f, +0.037450f, +0.011718f, -0.021220f, +0.009143f, -0.007191f, -0.011554f, -0.016410f, - -0.008274f, +0.005054f, +0.013672f, -0.011965f, -0.012616f, -0.023360f, -0.030087f, +0.015120f, +0.007626f, +0.013092f, - +0.037129f, +0.003230f, +0.008095f, -0.009739f, +0.012253f, +0.003188f, -0.017231f, -0.002647f, -0.007076f, +0.009161f, - -0.003649f, -0.014994f, +0.001888f, +0.008433f, -0.000026f, +0.007953f, +0.002960f, -0.002364f, -0.005317f, -0.001127f, - +0.012569f, -0.008772f, -0.005678f, +0.002622f, -0.000579f, +0.000373f, -0.001294f, -0.003796f, +0.004649f, -0.003712f, - +0.005468f, -0.003315f, +0.000756f, +0.005080f, +0.004680f, +0.006229f, -0.000592f, +0.007735f, +0.008042f, +0.005206f, - -0.000823f, -0.003291f, -0.002514f, +0.002826f, -0.001112f, +0.000514f, +0.003561f, +0.004918f, +0.003905f, +0.002681f, - +0.003548f, -0.003317f, +0.001169f, -0.001764f, +0.001480f, +0.001443f, +0.000136f, +0.003021f, +0.001623f, -0.002168f, - -0.000956f, -0.004886f, +0.000223f, +0.000332f, +0.002745f, +0.001082f - }, - { - +0.065298f, +0.101848f, -0.014203f, -0.066230f, -0.000336f, +0.018271f, -0.004374f, -0.015465f, -0.006061f, -0.001190f, - +0.045663f, +0.021101f, -0.012585f, -0.017230f, -0.033675f, +0.003544f, +0.020354f, -0.012805f, -0.025041f, -0.000477f, - -0.014078f, -0.005426f, +0.003721f, +0.012273f, +0.019058f, +0.014443f, +0.005546f, -0.002608f, -0.004942f, -0.001130f, - +0.013722f, +0.020669f, -0.000940f, +0.008577f, +0.008347f, +0.001896f, -0.016438f, +0.001768f, +0.003574f, +0.011571f, - -0.002964f, -0.003218f, -0.009166f, +0.009698f, +0.000816f, -0.018891f, +0.008721f, -0.003014f, -0.015311f, +0.003239f, - +0.011428f, +0.001337f, +0.012456f, +0.008707f, +0.003765f, -0.006220f, -0.001866f, +0.000180f, -0.002474f, -0.011685f, - -0.008231f, +0.001450f, -0.003845f, +0.010263f, -0.000353f, -0.002089f, -0.002584f, -0.006858f, -0.004302f, -0.004726f, - +0.001575f, +0.003402f, +0.000746f, +0.004647f, +0.000219f, -0.001311f, -0.000979f, +0.000032f, -0.005870f, +0.003975f, - -0.004039f, +0.003509f, +0.000771f, -0.000424f, +0.002725f, +0.002506f, -0.001470f, -0.002965f, +0.000144f, -0.000673f, - +0.000328f, -0.000942f, -0.001546f, -0.001398f, +0.001609f, -0.000195f - }, - { - -0.006985f, -0.041919f, +0.033977f, +0.004181f, +0.012421f, -0.004877f, +0.042294f, -0.000072f, -0.014678f, -0.006268f, - -0.032896f, -0.001089f, -0.017667f, -0.016133f, +0.002254f, -0.004419f, -0.037756f, -0.013928f, +0.005871f, -0.001807f, - +0.008104f, +0.016574f, -0.004716f, +0.020092f, +0.007444f, +0.019087f, +0.011807f, -0.008233f, +0.009508f, -0.000731f, - +0.014530f, +0.003356f, -0.017743f, +0.023918f, +0.006806f, -0.001382f, -0.004752f, +0.000802f, +0.018524f, +0.001293f, - +0.008349f, -0.007312f, +0.007726f, -0.005418f, -0.007884f, +0.009068f, +0.005160f, +0.007179f, +0.011224f, -0.001669f, - -0.008344f, -0.001296f, -0.007805f, +0.000943f, +0.005787f, +0.006084f, +0.002505f, +0.016234f, +0.000881f, -0.000463f, - -0.003120f, +0.002264f, +0.005180f, -0.003223f, +0.003161f, +0.004224f, -0.005565f, -0.002407f, -0.009347f, +0.002207f, - +0.002827f, +0.002738f, -0.004785f, -0.004895f, +0.003644f, -0.003663f, +0.002424f, +0.001403f, +0.004549f, +0.003057f, - +0.004450f, +0.002172f, -0.004311f, -0.005470f, +0.001726f, -0.000541f, +0.004261f, -0.002206f, +0.000766f, -0.002069f, - +0.001076f, -0.002222f, +0.002699f, +0.002210f, -0.004442f, +0.001959f - }, - { - -0.040589f, +0.074499f, +0.019944f, -0.022315f, +0.000428f, +0.040682f, +0.087025f, +0.027556f, +0.021370f, +0.009746f, - -0.017868f, +0.019515f, +0.005085f, +0.012251f, +0.035368f, +0.017038f, +0.010206f, +0.018586f, -0.029489f, -0.011864f, - -0.005660f, +0.022103f, +0.011691f, +0.006667f, +0.008252f, -0.010098f, -0.000816f, +0.022717f, -0.014680f, +0.013365f, - -0.004332f, +0.012326f, -0.000907f, +0.004374f, +0.007022f, -0.002277f, -0.011601f, -0.001345f, +0.002686f, +0.005067f, - -0.000675f, +0.005670f, -0.005804f, +0.002964f, -0.007749f, +0.006043f, -0.006833f, +0.003354f, +0.009278f, +0.002298f, - -0.005270f, -0.009554f, +0.009649f, +0.006689f, -0.009492f, -0.006807f, +0.000848f, -0.002173f, +0.006716f, +0.001755f, - +0.000133f, -0.004694f, +0.000770f, +0.004344f, -0.000597f, +0.007103f, -0.000518f, -0.005922f, +0.000564f, -0.005351f, - -0.000286f, +0.002235f, +0.001632f, -0.003285f, +0.001343f, +0.001684f, +0.003017f, +0.003850f, +0.001067f, -0.000378f, - -0.006584f, +0.000132f, -0.000467f, -0.002844f, -0.000664f, -0.002173f, +0.000760f, -0.000410f, +0.001569f, -0.002839f, - -0.003592f, +0.000202f, +0.003244f, +0.001933f, -0.001125f, -0.001616f - }, - { - -0.003989f, +0.029621f, +0.042213f, -0.012531f, -0.003289f, +0.001854f, +0.016654f, +0.002387f, +0.002632f, +0.000386f, - +0.006732f, -0.005224f, -0.011646f, +0.016611f, -0.014764f, -0.041669f, +0.022039f, +0.007071f, +0.019647f, -0.001562f, - +0.002446f, -0.008960f, -0.018749f, -0.020507f, +0.011329f, -0.002597f, -0.009623f, +0.013037f, +0.002672f, +0.004277f, - +0.016342f, -0.004334f, -0.000674f, -0.010480f, -0.012173f, -0.007718f, -0.018458f, +0.004812f, +0.018674f, +0.007118f, - +0.002902f, -0.010240f, +0.008200f, +0.027690f, -0.000763f, +0.005325f, -0.007188f, -0.002236f, -0.001461f, -0.010165f, - -0.013460f, +0.003882f, +0.002332f, +0.005381f, +0.002431f, -0.011178f, -0.003502f, -0.002385f, +0.001765f, -0.006719f, - +0.003526f, +0.008383f, -0.003674f, +0.001089f, +0.007664f, +0.003412f, +0.011734f, -0.001499f, -0.000600f, +0.003340f, - +0.002408f, +0.006242f, +0.000816f, -0.001177f, +0.002360f, +0.000767f, -0.005091f, +0.003153f, -0.003077f, +0.000052f, - +0.001771f, +0.001162f, +0.003342f, -0.002610f, +0.004351f, -0.004487f, -0.004175f, +0.002887f, -0.004432f, +0.001976f, - +0.001100f, +0.001582f, +0.000038f, -0.002163f, -0.001671f, -0.002651f - }, - { - -0.015431f, +0.140840f, -0.012133f, +0.026533f, +0.012752f, -0.036588f, -0.027067f, +0.024119f, -0.000250f, -0.014700f, - +0.015062f, +0.032842f, +0.022344f, -0.017965f, +0.052357f, +0.024020f, -0.000370f, -0.004523f, +0.009964f, +0.014962f, - +0.023118f, -0.000418f, -0.028581f, +0.009064f, -0.040760f, -0.010760f, +0.005323f, -0.004168f, -0.011648f, +0.018809f, - -0.002929f, -0.012038f, +0.023462f, +0.011745f, -0.001611f, +0.012182f, -0.005913f, -0.001811f, -0.003835f, +0.019058f, - +0.006604f, -0.010231f, -0.013173f, +0.013597f, -0.006443f, +0.017617f, -0.010296f, +0.001375f, -0.019008f, +0.013225f, - +0.006532f, -0.005984f, +0.011321f, -0.002380f, -0.003284f, -0.001052f, +0.003946f, -0.000511f, -0.006765f, +0.011467f, - -0.001016f, +0.000289f, +0.001328f, -0.007194f, -0.003326f, -0.000020f, +0.000254f, -0.008969f, -0.001094f, +0.004688f, - +0.005440f, +0.004581f, -0.002401f, +0.003191f, -0.003045f, +0.003593f, -0.001506f, -0.001107f, +0.003731f, -0.003851f, - +0.001276f, -0.001167f, +0.000024f, +0.000218f, +0.003933f, -0.000565f, +0.000157f, +0.003025f, -0.000302f, +0.000647f, - +0.001562f, +0.005547f, +0.001958f, -0.000621f, -0.001614f, +0.000775f - }, - { - +0.007212f, -0.023992f, -0.012930f, +0.019534f, +0.016253f, +0.011515f, +0.016867f, -0.006941f, +0.008906f, -0.008772f, - +0.002777f, +0.001046f, -0.003473f, -0.078365f, -0.022739f, -0.045413f, +0.014457f, -0.027941f, -0.020230f, +0.011047f, - +0.006975f, -0.038391f, -0.016778f, -0.016118f, -0.005937f, -0.016443f, +0.001454f, -0.000292f, -0.020183f, -0.008326f, - -0.017710f, -0.013728f, -0.006860f, +0.011000f, +0.030206f, -0.002404f, -0.011590f, +0.010047f, +0.008252f, -0.027136f, - -0.017430f, -0.014751f, +0.000906f, -0.003764f, -0.014272f, +0.009201f, -0.006077f, +0.007766f, +0.008751f, +0.006475f, - +0.014503f, -0.002183f, +0.008027f, -0.016952f, -0.000931f, +0.001936f, +0.001493f, +0.004654f, -0.021576f, -0.002669f, - -0.003595f, +0.004916f, +0.005244f, -0.000961f, -0.008445f, +0.001535f, +0.001715f, +0.000291f, -0.000354f, -0.001816f, - +0.010091f, -0.003850f, +0.001595f, -0.003535f, +0.004458f, +0.002675f, -0.003643f, -0.004279f, +0.001306f, +0.002238f, - -0.002209f, +0.001923f, -0.000678f, +0.002649f, +0.005315f, -0.001386f, -0.004652f, -0.003293f, +0.006245f, -0.006155f, - -0.002108f, +0.001619f, -0.003372f, -0.002105f, -0.002347f, -0.002767f - }, - { - +0.010683f, +0.143497f, +0.012330f, +0.000397f, +0.008080f, -0.042482f, -0.005340f, -0.008920f, +0.001859f, +0.015276f, - +0.019256f, -0.004922f, -0.006785f, +0.024311f, +0.057960f, +0.017120f, -0.031647f, -0.024541f, -0.000435f, +0.004493f, - +0.006705f, +0.016207f, -0.004193f, -0.002276f, +0.026553f, +0.007774f, +0.009852f, -0.002260f, -0.018934f, -0.001403f, - +0.007511f, +0.023110f, +0.019687f, +0.004820f, -0.005039f, -0.011981f, -0.015702f, +0.022247f, +0.016931f, +0.007269f, - +0.015467f, -0.009263f, -0.009975f, -0.004447f, -0.006115f, -0.002370f, -0.011027f, -0.018346f, -0.016374f, -0.002887f, - +0.000810f, -0.004438f, +0.002933f, +0.011453f, +0.001367f, +0.009770f, +0.009446f, -0.000612f, -0.006826f, -0.002589f, - +0.009566f, +0.005584f, -0.005375f, +0.002651f, +0.000870f, -0.000040f, -0.001113f, +0.001156f, +0.002564f, +0.003045f, - -0.002048f, -0.003134f, -0.005162f, -0.003897f, +0.000263f, -0.004570f, -0.001452f, -0.002739f, -0.006203f, -0.002025f, - +0.002647f, -0.001709f, -0.002566f, +0.001648f, +0.000277f, +0.000264f, +0.002604f, -0.000738f, +0.001048f, -0.000211f, - +0.000931f, +0.001684f, +0.000134f, -0.001016f, -0.000505f, +0.000826f - } - }, - { - { - +0.001916f, -0.120157f, +0.008225f, +0.054829f, +0.027659f, -0.014513f, -0.004872f, +0.004228f, +0.001738f, +0.002726f, - +0.022034f, -0.014115f, -0.015396f, -0.013743f, +0.040653f, +0.021437f, +0.014356f, -0.033857f, +0.004382f, +0.033850f, - +0.008929f, -0.010487f, -0.012265f, +0.029814f, +0.009501f, +0.005859f, +0.017421f, -0.006914f, +0.013288f, -0.010085f, - +0.021559f, +0.016783f, -0.010780f, +0.019135f, +0.008598f, -0.003810f, -0.002975f, +0.000130f, -0.018440f, +0.002517f, - -0.015276f, +0.000813f, +0.002312f, +0.000483f, -0.005443f, -0.016823f, -0.000751f, +0.010358f, -0.002744f, -0.011235f, - -0.008080f, -0.011586f, +0.002250f, -0.008332f, +0.003767f, +0.007914f, +0.003170f, -0.001539f, +0.008582f, +0.000526f, - -0.005546f, +0.004973f, +0.003186f, +0.001795f, -0.006194f, -0.003627f, -0.004155f, +0.001497f, +0.000099f, +0.004409f, - +0.006739f, +0.002481f, -0.000107f, -0.000617f, -0.000716f, +0.000083f, -0.005309f, +0.006501f, -0.000957f, -0.002616f, - -0.002694f, +0.000579f, +0.000280f, +0.004063f, -0.000729f, -0.000796f, -0.003173f, +0.002251f, -0.000698f, -0.000835f, - +0.002288f, +0.000506f, +0.000495f, -0.000107f, -0.001422f, +0.001205f - }, - { - -0.045767f, +0.082199f, +0.072573f, +0.050805f, +0.022360f, -0.017582f, +0.015538f, -0.019786f, +0.010679f, -0.028563f, - +0.006168f, +0.006427f, -0.032228f, -0.016719f, -0.012083f, -0.030149f, +0.024400f, +0.006799f, +0.016926f, +0.010563f, - -0.000078f, -0.006825f, +0.002744f, -0.000558f, +0.005567f, -0.003073f, -0.027940f, -0.010112f, -0.004467f, +0.005064f, - -0.010630f, +0.002591f, -0.007079f, -0.001268f, -0.008130f, +0.000979f, +0.008131f, +0.019437f, +0.006759f, +0.014579f, - -0.001315f, +0.008162f, +0.020405f, +0.005566f, -0.000398f, -0.006096f, -0.002207f, -0.007979f, +0.010676f, +0.001441f, - +0.000922f, -0.002859f, +0.010989f, -0.000796f, -0.000343f, +0.005224f, +0.007537f, -0.007843f, -0.001693f, -0.001883f, - -0.005251f, +0.001913f, +0.002559f, +0.002314f, -0.005613f, +0.007331f, +0.000670f, +0.007358f, -0.002434f, -0.000535f, - -0.003552f, -0.004269f, -0.001892f, -0.001265f, -0.000547f, +0.003653f, +0.003680f, +0.002425f, -0.007606f, -0.004792f, - -0.003943f, -0.000439f, +0.002755f, -0.002695f, -0.002454f, +0.001726f, -0.001167f, +0.001083f, -0.003211f, -0.001337f, - -0.001708f, +0.002132f, +0.002126f, +0.003261f, -0.000673f, -0.002266f - }, - { - +0.006127f, +0.183323f, -0.047388f, -0.083534f, +0.003003f, +0.014536f, +0.012473f, +0.005068f, +0.013893f, +0.006720f, - -0.007436f, +0.012238f, -0.008229f, +0.007823f, +0.007216f, -0.017490f, -0.007574f, +0.020673f, -0.016695f, -0.008813f, - +0.017134f, +0.007691f, -0.003551f, +0.004343f, +0.033863f, +0.019713f, +0.005794f, -0.003078f, -0.021531f, +0.001003f, - +0.001683f, +0.008030f, +0.001987f, -0.001696f, +0.018805f, -0.000805f, -0.000954f, +0.000688f, -0.009187f, -0.019771f, - +0.002187f, -0.005309f, -0.012335f, -0.002880f, -0.002118f, +0.001117f, +0.001884f, +0.004926f, +0.002002f, -0.009879f, - -0.001389f, -0.004175f, +0.000933f, -0.001812f, -0.001982f, +0.001640f, +0.009573f, +0.002555f, -0.000572f, -0.003006f, - +0.006255f, +0.001975f, +0.000264f, +0.000265f, -0.004373f, -0.000386f, +0.003355f, +0.003607f, -0.010698f, +0.000364f, - +0.004913f, -0.007896f, -0.005243f, -0.003231f, +0.000718f, +0.006373f, -0.002046f, +0.001404f, +0.001620f, +0.001894f, - -0.005539f, +0.001710f, +0.002212f, -0.001156f, +0.002291f, -0.000713f, -0.001027f, +0.000654f, -0.001388f, +0.002392f, - +0.001272f, +0.002404f, +0.001809f, -0.003175f, -0.001557f, +0.002642f - }, - { - +0.000803f, +0.063452f, +0.005278f, +0.000740f, +0.000238f, -0.000892f, -0.002132f, -0.004217f, +0.004752f, +0.005969f, - +0.015349f, -0.015644f, +0.004577f, -0.007984f, +0.024373f, -0.015115f, -0.033214f, -0.012022f, +0.059794f, +0.026493f, - -0.016433f, +0.009041f, +0.049994f, -0.018218f, -0.004712f, +0.032904f, +0.042182f, +0.013546f, -0.009055f, -0.000753f, - +0.026658f, -0.011396f, +0.000095f, +0.009349f, -0.020386f, -0.022812f, -0.010080f, -0.005733f, +0.011149f, +0.008144f, - +0.015363f, +0.012063f, +0.001612f, +0.000083f, -0.000616f, +0.001636f, -0.011149f, +0.001294f, -0.004688f, +0.009295f, - -0.001788f, -0.010603f, -0.017498f, +0.003649f, +0.013078f, -0.002361f, +0.008189f, +0.003197f, +0.002069f, +0.001042f, - -0.001779f, -0.000544f, -0.003659f, +0.000690f, +0.006587f, +0.004359f, +0.001519f, +0.002812f, -0.004221f, +0.009727f, - +0.003075f, +0.001603f, -0.005633f, +0.004175f, +0.005685f, -0.001669f, +0.007463f, -0.002555f, +0.000013f, +0.003456f, - +0.000111f, +0.001884f, -0.003564f, +0.001334f, -0.006728f, -0.001602f, -0.002712f, +0.003541f, -0.002352f, -0.001850f, - -0.000891f, +0.004705f, +0.003209f, +0.001091f, +0.000919f, +0.000999f - }, - { - -0.017979f, +0.094034f, -0.018996f, -0.080108f, +0.018217f, -0.001063f, -0.007319f, -0.007967f, -0.022919f, -0.008610f, - +0.034648f, -0.064124f, -0.002988f, +0.025717f, -0.012239f, +0.038388f, +0.001078f, -0.006276f, -0.001051f, -0.001169f, - -0.002801f, +0.023091f, -0.006807f, -0.004433f, +0.011622f, +0.003710f, -0.008227f, -0.001901f, -0.014145f, -0.004191f, - +0.014453f, +0.005020f, -0.002839f, +0.016828f, -0.018929f, -0.007487f, +0.005500f, -0.000241f, +0.018654f, +0.019380f, - +0.007162f, +0.008882f, -0.009353f, +0.011921f, +0.001546f, +0.016647f, -0.008146f, +0.010626f, +0.002397f, -0.000734f, - +0.002067f, -0.002196f, +0.004221f, +0.009094f, +0.003721f, -0.000697f, -0.001351f, +0.002744f, -0.000946f, -0.001259f, - +0.008675f, -0.013001f, -0.000406f, +0.000358f, -0.007420f, +0.007863f, +0.004412f, -0.002457f, +0.003975f, +0.004753f, - +0.002367f, -0.003084f, +0.000258f, +0.001625f, +0.004572f, +0.003455f, -0.003766f, -0.009921f, -0.002223f, -0.001458f, - -0.004356f, +0.005226f, +0.002469f, -0.001779f, -0.001262f, +0.006076f, +0.001803f, +0.004138f, +0.002431f, -0.001169f, - +0.001215f, +0.000662f, -0.002150f, -0.000708f, +0.002700f, -0.002986f - }, - { - -0.002449f, +0.007566f, -0.009036f, -0.002672f, +0.003169f, -0.003518f, -0.002340f, -0.001828f, +0.003582f, -0.002926f, - +0.009065f, -0.001170f, +0.007222f, -0.002066f, +0.018532f, -0.021493f, +0.008020f, -0.003136f, -0.011815f, +0.018325f, - -0.018255f, +0.014966f, -0.006305f, +0.016441f, -0.023664f, +0.001060f, +0.001594f, -0.012931f, -0.024976f, +0.007938f, - -0.010478f, +0.002029f, +0.023156f, +0.011371f, +0.000386f, +0.016610f, +0.013001f, -0.005345f, +0.003083f, -0.000732f, - +0.013140f, +0.003678f, +0.007057f, -0.002167f, +0.003746f, -0.004780f, +0.010691f, +0.003485f, -0.001973f, +0.006566f, - -0.003930f, +0.000767f, +0.000928f, +0.006571f, +0.007935f, -0.009723f, -0.000434f, -0.000594f, +0.003210f, +0.008505f, - +0.000606f, +0.003654f, +0.001640f, +0.000924f, +0.006317f, -0.006656f, +0.009257f, -0.002810f, +0.002301f, -0.005122f, - -0.000956f, -0.006609f, +0.003153f, +0.003238f, +0.005449f, +0.000196f, +0.000118f, +0.002680f, +0.004765f, +0.003675f, - -0.000766f, +0.002076f, +0.000248f, +0.001515f, +0.000327f, -0.000014f, -0.002763f, -0.003781f, +0.002050f, +0.002505f, - +0.001451f, +0.000445f, +0.000830f, -0.000108f, -0.001813f, +0.000680f - }, - { - -0.009844f, +0.183997f, -0.007835f, -0.049970f, +0.028158f, -0.008024f, +0.005408f, -0.004760f, -0.026396f, -0.000373f, - +0.027293f, -0.018704f, +0.016234f, -0.004752f, +0.019778f, +0.017308f, -0.016946f, -0.039490f, -0.037082f, +0.010522f, - -0.008805f, +0.000741f, -0.011525f, -0.009318f, -0.028313f, -0.001688f, +0.018047f, +0.003207f, -0.008833f, -0.000361f, - -0.006299f, +0.000687f, -0.003061f, +0.014533f, +0.011247f, +0.006789f, -0.011727f, +0.010798f, -0.008690f, -0.000910f, - -0.004860f, +0.004901f, -0.008261f, +0.008054f, +0.006579f, -0.013874f, +0.000549f, +0.016733f, +0.008676f, -0.006816f, - +0.001966f, -0.006266f, -0.001080f, -0.005580f, +0.005686f, +0.002344f, +0.006166f, -0.001106f, +0.007817f, +0.002805f, - +0.005656f, +0.010167f, -0.004816f, +0.002138f, +0.007797f, +0.002555f, -0.000545f, -0.002399f, +0.003946f, -0.003440f, - -0.000693f, +0.003308f, +0.001621f, -0.000312f, -0.005592f, -0.001735f, -0.003877f, +0.000854f, -0.000353f, +0.002443f, - -0.000060f, +0.005051f, -0.000049f, -0.000570f, +0.001747f, -0.003899f, -0.002573f, -0.003064f, -0.002020f, +0.004965f, - +0.001684f, +0.001620f, -0.000188f, +0.002311f, -0.001355f, -0.000415f - }, - { - -0.004353f, -0.033570f, -0.004006f, +0.005012f, +0.000192f, -0.004901f, -0.004935f, -0.005035f, -0.006613f, -0.003987f, - -0.003529f, -0.001641f, +0.011658f, +0.025780f, +0.014319f, +0.008683f, -0.030709f, -0.009019f, -0.030878f, -0.003064f, - -0.005391f, +0.005052f, +0.008064f, -0.018462f, +0.007657f, -0.020628f, -0.020750f, -0.016548f, +0.026360f, +0.020488f, - +0.026354f, -0.011880f, +0.031703f, -0.021054f, +0.018940f, +0.005197f, -0.014373f, -0.013938f, +0.002039f, +0.006070f, - -0.000890f, -0.019090f, +0.011291f, +0.004843f, -0.001538f, +0.005249f, +0.008583f, -0.007700f, -0.006936f, +0.005514f, - +0.005164f, +0.004927f, -0.006641f, -0.000979f, +0.001866f, -0.006139f, +0.002077f, -0.004426f, -0.005459f, +0.003551f, - +0.008608f, +0.001692f, -0.003864f, +0.001658f, +0.007709f, +0.001931f, +0.008335f, +0.000564f, +0.009082f, +0.009453f, - -0.002263f, -0.002849f, -0.002143f, -0.001162f, -0.000921f, +0.001499f, +0.004214f, +0.003063f, +0.003238f, +0.004641f, - +0.001318f, -0.002662f, +0.004527f, -0.002668f, +0.001354f, -0.000664f, +0.001921f, +0.001786f, +0.001970f, -0.002308f, - -0.001154f, +0.000018f, -0.004184f, +0.000653f, +0.003802f, -0.000593f - }, - { - -0.065447f, +0.292990f, -0.045472f, -0.061734f, +0.019237f, +0.014213f, +0.013943f, -0.043522f, +0.037151f, +0.016003f, - -0.001148f, +0.044640f, -0.030681f, -0.030184f, -0.004407f, -0.001586f, -0.004032f, +0.020496f, -0.028263f, -0.022156f, - +0.004288f, -0.004563f, -0.000964f, +0.007412f, +0.010177f, +0.025315f, +0.000086f, +0.002601f, -0.003334f, +0.000536f, - +0.005825f, +0.016467f, +0.000151f, +0.011249f, +0.008537f, +0.003080f, -0.030662f, +0.017638f, +0.007553f, +0.006307f, - -0.004951f, -0.003600f, -0.011535f, +0.016181f, -0.002086f, -0.016902f, +0.007785f, -0.003332f, -0.007985f, +0.007123f, - +0.003432f, -0.001006f, +0.014859f, +0.010771f, +0.000110f, -0.009139f, +0.000103f, -0.001736f, -0.003696f, -0.005165f, - -0.009343f, -0.002000f, +0.004563f, +0.005064f, -0.001469f, -0.002743f, -0.002082f, -0.007447f, -0.004077f, -0.005150f, - -0.000284f, +0.002484f, +0.003675f, +0.004913f, -0.001790f, -0.002235f, -0.001207f, -0.002656f, -0.003216f, -0.000210f, - -0.002449f, +0.007118f, -0.002986f, -0.000723f, +0.006726f, -0.002770f, +0.001983f, -0.001935f, +0.000210f, -0.000970f, - -0.002600f, -0.000495f, -0.000168f, +0.002074f, -0.002475f, -0.000217f - }, - { - +0.009501f, +0.000529f, -0.008106f, -0.006825f, +0.017822f, +0.017804f, -0.002703f, +0.003289f, -0.016800f, -0.006880f, - -0.028242f, -0.019675f, +0.005907f, -0.009475f, +0.000031f, -0.002439f, -0.023133f, -0.011976f, -0.003885f, -0.026533f, - +0.026220f, +0.013952f, +0.018406f, +0.003744f, -0.003755f, +0.033555f, -0.000098f, +0.002046f, -0.006454f, +0.010202f, - +0.023659f, -0.023692f, +0.012347f, +0.028888f, -0.006746f, +0.015409f, -0.005470f, -0.006318f, +0.009579f, +0.007520f, - +0.006777f, -0.006126f, +0.005240f, -0.008843f, -0.006496f, +0.008964f, +0.005090f, +0.005611f, +0.009432f, +0.000296f, - +0.003741f, -0.007074f, -0.012568f, -0.004039f, +0.010495f, +0.004039f, +0.001926f, +0.013646f, +0.004206f, -0.000931f, - -0.000562f, -0.000735f, +0.002555f, +0.006754f, -0.006409f, +0.009101f, -0.002630f, -0.007983f, -0.007066f, -0.003199f, - +0.007386f, +0.003995f, -0.007878f, +0.001792f, -0.000869f, -0.002098f, -0.000574f, +0.001441f, +0.005214f, +0.004502f, - +0.006194f, -0.001132f, -0.003455f, -0.003114f, +0.002195f, +0.000608f, -0.001342f, +0.002045f, +0.000784f, -0.002423f, - -0.002383f, +0.002347f, +0.000537f, +0.001326f, -0.002723f, -0.000075f - }, - { - +0.049399f, -0.017031f, -0.006236f, +0.024172f, -0.000727f, +0.043195f, +0.051799f, +0.046068f, +0.010309f, -0.003214f, - +0.004790f, +0.005020f, +0.014172f, +0.022145f, +0.017766f, +0.021251f, -0.013792f, +0.027389f, -0.026833f, -0.002679f, - -0.013695f, +0.038954f, +0.017129f, +0.000340f, +0.011154f, -0.000296f, +0.003882f, +0.006084f, +0.007010f, -0.015359f, - +0.022055f, +0.015368f, -0.019371f, +0.010511f, +0.007551f, -0.013713f, -0.004202f, +0.001076f, -0.016054f, +0.020257f, - -0.003139f, -0.004527f, +0.004122f, -0.008829f, +0.004749f, -0.000720f, -0.000276f, +0.006325f, +0.005099f, -0.005903f, - +0.004148f, -0.009879f, +0.005503f, +0.001225f, -0.006336f, -0.007178f, +0.005167f, -0.001654f, -0.004500f, +0.007208f, - +0.004870f, -0.006704f, -0.004464f, +0.000924f, +0.004090f, +0.001817f, +0.002230f, -0.003443f, -0.001875f, -0.005910f, - +0.001780f, +0.002646f, -0.000369f, -0.002071f, +0.001915f, +0.001276f, +0.006311f, -0.001518f, +0.002287f, -0.000934f, - -0.001956f, -0.002075f, -0.002307f, -0.002385f, -0.002153f, +0.002959f, -0.000680f, +0.002050f, -0.002916f, -0.001001f, - -0.000086f, -0.000343f, +0.002180f, -0.000084f, +0.002998f, -0.003161f - }, - { - +0.004119f, +0.054014f, +0.008125f, -0.010001f, -0.007656f, +0.013811f, +0.017860f, -0.008988f, +0.013999f, -0.006775f, - +0.013277f, +0.002805f, -0.007896f, +0.006772f, -0.052354f, +0.006562f, -0.012068f, +0.037051f, +0.001655f, -0.019806f, - +0.016989f, +0.019447f, -0.045866f, -0.000913f, -0.018083f, -0.009828f, -0.000691f, +0.017784f, -0.027103f, +0.025424f, - +0.015062f, -0.009420f, -0.004806f, -0.008431f, +0.000783f, -0.013613f, +0.005520f, -0.005204f, +0.009243f, -0.003967f, - -0.001493f, +0.002432f, +0.017218f, +0.018297f, -0.000543f, +0.008609f, -0.005116f, -0.006292f, +0.003060f, -0.014666f, - -0.009539f, +0.003556f, +0.003637f, +0.002669f, -0.002738f, -0.005812f, -0.006568f, -0.011076f, +0.003453f, +0.004910f, - +0.000625f, +0.002602f, -0.000054f, -0.005077f, +0.010854f, +0.003919f, +0.006267f, +0.004229f, -0.000514f, +0.000983f, - +0.005193f, +0.008220f, -0.000667f, -0.001881f, -0.000343f, +0.000421f, -0.000816f, -0.001700f, +0.000044f, -0.002182f, - +0.002330f, -0.001234f, +0.003222f, +0.001792f, -0.000501f, -0.004897f, -0.002170f, +0.000895f, -0.004033f, -0.000037f, - +0.005907f, +0.000381f, -0.001449f, -0.000834f, -0.001044f, -0.002739f - }, - { - +0.046591f, +0.061951f, -0.014144f, +0.005669f, +0.035047f, -0.040569f, -0.021593f, -0.003218f, -0.005428f, +0.039559f, - -0.005745f, +0.016321f, +0.016963f, +0.002906f, +0.036760f, +0.009466f, +0.006855f, +0.030965f, -0.021641f, +0.047086f, - +0.006379f, +0.007408f, -0.031397f, -0.025760f, -0.001609f, -0.002734f, -0.006535f, +0.003178f, -0.021521f, +0.014402f, - -0.004925f, -0.001024f, +0.003828f, +0.016987f, -0.008047f, +0.019689f, -0.006697f, -0.004011f, +0.012617f, +0.000757f, - +0.004967f, -0.018960f, +0.002781f, +0.003505f, +0.003268f, -0.005787f, +0.012640f, -0.006955f, -0.006676f, +0.011621f, - +0.003223f, -0.007699f, +0.008525f, +0.008047f, -0.009728f, -0.001457f, -0.004368f, -0.002956f, -0.000182f, +0.001857f, - +0.001109f, -0.001217f, +0.004299f, -0.002229f, -0.011057f, +0.000078f, +0.000275f, -0.002217f, -0.007371f, +0.005360f, - +0.003301f, +0.001521f, +0.007968f, +0.000361f, -0.002480f, -0.001080f, -0.002378f, +0.004824f, -0.002540f, +0.000424f, - -0.001234f, -0.000652f, -0.001394f, +0.007760f, -0.000549f, -0.001987f, +0.001206f, +0.005854f, -0.001748f, -0.003567f, - +0.004524f, +0.002246f, +0.004924f, -0.000272f, -0.000345f, +0.001243f - }, - { - -0.006401f, -0.054502f, +0.029506f, +0.009015f, +0.012361f, +0.006630f, +0.019938f, -0.000200f, -0.006666f, +0.001470f, - +0.001697f, -0.006488f, -0.010410f, +0.003509f, -0.140299f, -0.015465f, +0.013303f, -0.024859f, -0.019556f, +0.028339f, - -0.026542f, -0.009040f, -0.037257f, +0.008280f, -0.021696f, +0.005717f, -0.025729f, +0.024082f, -0.020780f, -0.012270f, - -0.031933f, +0.000954f, -0.011669f, +0.022867f, +0.011493f, +0.002723f, -0.011730f, +0.011219f, +0.017872f, -0.021678f, - -0.018166f, -0.014514f, -0.001070f, -0.009268f, -0.011924f, +0.012709f, -0.010482f, +0.000841f, +0.016613f, +0.002027f, - +0.027145f, -0.008523f, -0.001274f, -0.004380f, -0.004398f, +0.001542f, +0.005899f, +0.001149f, -0.016648f, -0.007989f, - +0.004418f, -0.002223f, -0.000859f, +0.002757f, -0.000183f, -0.007780f, +0.007030f, -0.002776f, -0.000886f, +0.001706f, - +0.003922f, -0.002013f, +0.006120f, -0.000396f, +0.000928f, -0.001369f, -0.001581f, +0.001734f, +0.000879f, +0.000303f, - -0.003886f, -0.001754f, +0.002233f, +0.002522f, +0.003378f, -0.002518f, -0.003939f, -0.000478f, +0.003535f, -0.003076f, - +0.000247f, -0.001720f, -0.004042f, +0.000438f, -0.002853f, -0.000543f - }, - { - +0.017791f, +0.109493f, +0.032743f, +0.021093f, -0.012588f, -0.033255f, -0.012139f, -0.010339f, +0.007830f, -0.019383f, - +0.048234f, +0.001949f, -0.038820f, -0.009446f, +0.118006f, +0.002809f, -0.029216f, +0.008904f, -0.012302f, -0.003367f, - +0.006005f, +0.012965f, +0.006048f, +0.008497f, +0.021068f, +0.010416f, +0.028977f, +0.000097f, -0.041670f, +0.009305f, - +0.009169f, +0.011800f, +0.010973f, +0.020641f, -0.008995f, -0.017403f, -0.009322f, +0.008737f, +0.037842f, +0.005240f, - +0.005024f, -0.018500f, +0.003311f, -0.011115f, +0.005038f, -0.003171f, -0.004420f, -0.028616f, -0.012269f, -0.014153f, - +0.000850f, +0.004171f, +0.003374f, +0.000988f, +0.008040f, +0.014312f, +0.003242f, -0.003620f, +0.005543f, -0.005086f, - +0.003855f, +0.001801f, -0.000416f, +0.002990f, -0.004611f, +0.011804f, -0.001891f, -0.005171f, +0.004797f, +0.011267f, - -0.006767f, -0.005090f, -0.006967f, +0.002075f, -0.004157f, +0.001774f, -0.005895f, -0.003014f, -0.003088f, -0.003181f, - +0.000052f, +0.002955f, -0.002906f, +0.002196f, -0.001075f, +0.001513f, +0.000458f, +0.003750f, -0.001167f, -0.003441f, - +0.004250f, +0.001478f, +0.000488f, +0.000267f, -0.002819f, +0.002974f - } - }, - { - { - -0.001715f, -0.112406f, +0.014238f, -0.002407f, -0.011472f, -0.004696f, +0.009994f, +0.014985f, -0.011152f, -0.024435f, - +0.000459f, -0.035861f, -0.026023f, -0.002354f, +0.052146f, +0.018258f, +0.028012f, -0.006519f, +0.008704f, +0.050757f, - +0.011719f, -0.035609f, -0.025236f, +0.003503f, +0.000588f, -0.012054f, +0.013773f, -0.004528f, +0.006238f, +0.012514f, - +0.035922f, +0.022293f, -0.009440f, +0.006750f, +0.004779f, -0.003452f, -0.000533f, +0.004849f, -0.009194f, +0.005973f, - -0.011969f, +0.001128f, -0.003012f, -0.010727f, -0.016001f, -0.015093f, +0.004999f, +0.004778f, -0.002083f, +0.000415f, - -0.000372f, -0.014683f, +0.001266f, -0.007830f, -0.006745f, +0.003239f, +0.008018f, -0.004594f, +0.001401f, +0.004836f, - -0.002111f, +0.003442f, +0.001170f, +0.003063f, -0.003050f, -0.001927f, +0.002454f, +0.006465f, +0.000803f, +0.002758f, - -0.000499f, -0.004353f, +0.001763f, +0.004935f, +0.001506f, +0.004396f, -0.004425f, +0.006440f, -0.001129f, +0.001195f, - -0.000282f, +0.002471f, +0.000771f, +0.002114f, +0.000662f, +0.003680f, +0.000380f, +0.003416f, -0.000427f, -0.001882f, - -0.000129f, -0.001066f, +0.001485f, +0.002378f, +0.001399f, +0.002585f - }, - { - +0.049073f, -0.006499f, -0.062564f, -0.020022f, -0.010369f, +0.004583f, +0.026017f, -0.003955f, +0.014324f, -0.010670f, - +0.046873f, +0.003945f, -0.026446f, -0.015033f, -0.002814f, -0.018513f, +0.021454f, +0.012027f, +0.029653f, +0.010101f, - +0.003134f, -0.008034f, +0.009036f, -0.002511f, +0.010239f, +0.004730f, -0.013952f, +0.001364f, +0.002578f, +0.009098f, - +0.009687f, -0.000328f, -0.002825f, +0.006498f, -0.018354f, -0.009796f, +0.002455f, +0.005738f, -0.002575f, +0.008834f, - -0.005039f, +0.007852f, +0.006195f, -0.013070f, -0.005192f, +0.002617f, +0.017259f, -0.001982f, +0.002196f, +0.002277f, - +0.008462f, +0.006758f, +0.014404f, +0.006609f, +0.001232f, -0.012552f, -0.001371f, -0.001604f, +0.006796f, +0.002755f, - -0.007105f, -0.003590f, -0.002458f, -0.000680f, -0.007833f, +0.006588f, +0.002436f, +0.007778f, -0.000409f, +0.000148f, - -0.002181f, -0.000820f, -0.000644f, -0.000161f, +0.001012f, +0.002326f, -0.001697f, -0.000952f, -0.007223f, -0.000324f, - -0.001678f, -0.001474f, +0.002827f, -0.002329f, -0.001122f, +0.001505f, -0.001470f, -0.000102f, -0.000852f, -0.000074f, - -0.000327f, +0.000985f, -0.001904f, +0.001309f, +0.000263f, -0.001792f - }, - { - -0.001732f, +0.269234f, +0.028709f, -0.001651f, +0.039421f, +0.001574f, +0.004177f, -0.018638f, -0.010881f, -0.024881f, - +0.005130f, +0.030794f, -0.004674f, +0.008001f, +0.018184f, -0.022956f, -0.010352f, +0.016163f, -0.003545f, +0.007423f, - +0.007548f, +0.013491f, +0.004856f, +0.006169f, +0.027897f, -0.002991f, -0.006943f, -0.001760f, -0.025021f, +0.003256f, - +0.015674f, -0.003006f, -0.020537f, -0.012983f, +0.010258f, -0.000708f, +0.003340f, +0.001300f, +0.004995f, -0.009072f, - +0.011152f, +0.005257f, -0.006787f, -0.005066f, -0.007706f, -0.007138f, -0.004029f, +0.005782f, +0.010851f, +0.001470f, - +0.002406f, -0.008324f, +0.006663f, +0.002551f, +0.004187f, -0.001563f, +0.004751f, +0.002761f, +0.008312f, -0.002503f, - -0.001369f, -0.003768f, +0.000491f, +0.001386f, -0.001028f, +0.003546f, +0.003382f, +0.003496f, -0.011518f, +0.000941f, - +0.005515f, -0.006793f, -0.000775f, -0.001816f, +0.000888f, +0.004170f, -0.009464f, -0.002694f, +0.001874f, +0.004772f, - +0.000060f, +0.007008f, +0.004017f, -0.001540f, +0.002708f, -0.000437f, -0.001387f, +0.002020f, +0.000406f, +0.000182f, - -0.002708f, -0.000026f, +0.003140f, -0.000397f, +0.000053f, +0.000923f - }, - { - +0.001025f, +0.055196f, +0.005052f, +0.007769f, -0.002801f, +0.002006f, +0.003773f, -0.000278f, +0.002638f, -0.005065f, - +0.006735f, -0.015104f, +0.003606f, -0.008564f, +0.041245f, +0.033725f, +0.002796f, -0.008485f, +0.059910f, +0.028009f, - -0.024280f, -0.006504f, +0.032608f, -0.014902f, -0.009345f, -0.013986f, -0.018809f, -0.016539f, -0.018098f, +0.000785f, - +0.016323f, -0.022069f, -0.006461f, -0.005908f, -0.007011f, +0.008573f, +0.013433f, -0.012498f, -0.005166f, -0.000606f, - +0.011976f, -0.004467f, +0.001418f, +0.015761f, +0.012248f, +0.006519f, -0.009172f, +0.004370f, -0.009074f, +0.004025f, - +0.002555f, -0.000502f, -0.009026f, -0.002869f, +0.007655f, -0.010101f, -0.001692f, +0.003760f, +0.001600f, -0.001342f, - -0.004070f, -0.001200f, -0.002799f, -0.002275f, -0.001675f, -0.001327f, -0.005118f, +0.000902f, -0.006292f, +0.000536f, - -0.000351f, +0.000485f, -0.007626f, +0.000115f, +0.002496f, -0.006552f, +0.001614f, -0.003960f, -0.003651f, -0.000252f, - -0.000114f, +0.005815f, +0.001765f, +0.002404f, -0.005705f, +0.001188f, -0.000502f, +0.001918f, -0.001744f, +0.001063f, - -0.001760f, +0.000899f, +0.000048f, -0.000571f, +0.000234f, +0.002219f - }, - { - -0.002972f, +0.175251f, +0.037588f, -0.095445f, -0.010728f, +0.000227f, -0.001749f, -0.015473f, -0.030114f, -0.023964f, - +0.024995f, -0.049097f, -0.009799f, +0.010300f, -0.022621f, +0.041807f, -0.001235f, -0.013678f, +0.009626f, +0.017432f, - +0.002423f, +0.016786f, -0.004335f, +0.009978f, +0.020061f, +0.017240f, +0.016218f, +0.030563f, -0.004899f, -0.008502f, - +0.018714f, +0.001891f, -0.011550f, +0.011855f, -0.016244f, -0.008820f, +0.020826f, +0.002574f, -0.005397f, +0.010661f, - +0.003117f, +0.009375f, -0.008806f, +0.013263f, -0.005336f, +0.011201f, -0.008248f, +0.008169f, +0.002701f, +0.005462f, - +0.001541f, -0.004685f, +0.000581f, +0.010695f, +0.006026f, -0.004775f, -0.000427f, +0.005432f, -0.001217f, -0.010543f, - +0.009806f, +0.002276f, +0.013269f, +0.001764f, -0.012156f, +0.003885f, -0.001925f, -0.002882f, +0.001981f, -0.000960f, - +0.003469f, +0.002109f, +0.000556f, -0.001206f, -0.000549f, +0.003422f, +0.001431f, -0.004289f, -0.000353f, -0.002263f, - -0.006253f, +0.004261f, +0.000290f, -0.002464f, +0.001704f, +0.003154f, -0.004300f, +0.000855f, +0.003571f, -0.001587f, - -0.001577f, +0.002027f, +0.000578f, -0.001236f, +0.004234f, +0.000349f - }, - { - -0.000346f, +0.041887f, +0.004271f, -0.003607f, +0.000260f, -0.004380f, -0.000137f, +0.002847f, +0.003462f, -0.009888f, - +0.002804f, +0.002651f, +0.002545f, -0.016742f, -0.004034f, -0.014784f, +0.023554f, +0.004746f, -0.001314f, +0.039396f, - -0.015647f, +0.017333f, +0.002043f, +0.014691f, -0.027730f, +0.001782f, -0.003176f, -0.006159f, +0.006084f, +0.043646f, - +0.001762f, -0.024847f, -0.014600f, -0.004250f, +0.000404f, +0.010592f, +0.006499f, +0.000916f, +0.003868f, -0.009653f, - +0.021483f, +0.013787f, +0.014925f, -0.000868f, +0.004420f, -0.009338f, +0.003444f, -0.007747f, -0.016320f, +0.003573f, - +0.001469f, +0.004374f, +0.001271f, -0.002126f, +0.003532f, -0.006458f, +0.004516f, +0.001343f, -0.002838f, +0.001998f, - -0.000819f, +0.003622f, +0.001693f, +0.001936f, +0.005998f, -0.006851f, +0.011510f, -0.000327f, +0.000185f, -0.008638f, - +0.002071f, -0.006016f, -0.003278f, -0.002919f, +0.000912f, +0.002958f, +0.002133f, +0.000211f, +0.001499f, +0.000694f, - -0.001037f, -0.000705f, -0.000528f, +0.001307f, -0.001656f, -0.000876f, -0.000543f, -0.001670f, -0.000568f, -0.001809f, - +0.000150f, +0.001847f, +0.000132f, +0.000017f, +0.000038f, +0.000800f - }, - { - -0.030435f, +0.221015f, +0.063503f, -0.055794f, -0.002680f, -0.018200f, +0.006565f, +0.016268f, +0.000908f, +0.019927f, - +0.027017f, -0.032501f, +0.008650f, -0.028561f, -0.004025f, +0.004026f, -0.009993f, -0.015905f, -0.005149f, +0.015478f, - -0.022374f, +0.001167f, -0.017640f, -0.007223f, -0.008212f, +0.000855f, +0.004205f, -0.000463f, -0.006748f, +0.006595f, - +0.001262f, -0.005216f, -0.014444f, -0.001883f, -0.000640f, +0.000963f, -0.008179f, +0.017819f, -0.000298f, +0.010423f, - -0.000545f, +0.004569f, -0.000287f, +0.005044f, +0.002015f, -0.002942f, +0.002344f, +0.002105f, +0.008534f, -0.005584f, - -0.000545f, -0.007534f, +0.004192f, -0.003810f, +0.004231f, +0.005038f, +0.009806f, -0.003949f, +0.000797f, -0.005343f, - +0.003873f, +0.005516f, -0.006978f, +0.002570f, +0.003759f, -0.003208f, -0.002212f, +0.001345f, +0.004370f, -0.004094f, - -0.003514f, +0.002190f, +0.001178f, -0.001529f, -0.003801f, +0.001074f, -0.003317f, -0.001053f, +0.000251f, +0.003373f, - -0.003687f, +0.003265f, -0.000611f, -0.001899f, +0.001316f, -0.001966f, -0.001138f, -0.001764f, +0.001078f, +0.005139f, - -0.001432f, -0.000347f, +0.001104f, +0.004298f, -0.000087f, +0.000585f - }, - { - +0.001483f, +0.013711f, +0.014023f, +0.007415f, +0.001967f, -0.001615f, +0.001811f, -0.000802f, -0.007885f, -0.001805f, - -0.003230f, -0.004203f, +0.002317f, -0.014975f, -0.011591f, +0.011715f, -0.062395f, -0.047737f, -0.023772f, +0.017527f, - -0.017314f, +0.001978f, +0.022766f, +0.000484f, +0.012637f, +0.003442f, +0.012191f, -0.015599f, +0.008353f, -0.013697f, - +0.007967f, -0.012231f, +0.023128f, -0.014039f, +0.015435f, +0.000599f, -0.000259f, -0.009101f, -0.010943f, +0.006227f, - -0.002045f, -0.015960f, +0.009634f, +0.002084f, +0.002959f, +0.007426f, +0.006280f, -0.007285f, +0.002442f, +0.004029f, - -0.001784f, +0.014170f, +0.000614f, -0.004549f, -0.002319f, -0.016028f, +0.003226f, -0.001969f, -0.007729f, +0.005804f, - +0.011808f, +0.001274f, -0.004745f, +0.003381f, +0.003770f, -0.002789f, +0.003479f, -0.009252f, +0.002260f, +0.003952f, - -0.001220f, +0.002666f, -0.000916f, -0.001878f, -0.001326f, -0.001840f, +0.000863f, +0.001110f, +0.000668f, -0.001359f, - -0.003929f, -0.003874f, +0.003913f, -0.001980f, +0.001268f, -0.003501f, -0.001311f, +0.002298f, +0.003482f, -0.000481f, - +0.000894f, +0.004153f, -0.000555f, -0.001338f, +0.000073f, -0.001848f - }, - { - +0.045932f, +0.505659f, +0.041134f, -0.044142f, -0.014218f, +0.011923f, +0.043044f, -0.013601f, +0.051795f, +0.004112f, - -0.035158f, +0.024999f, -0.002259f, +0.013524f, +0.014967f, +0.007143f, +0.006137f, +0.033578f, -0.016065f, -0.023877f, - +0.001727f, -0.022907f, -0.017737f, +0.002657f, -0.008012f, +0.000998f, -0.005985f, +0.013605f, -0.001796f, -0.000364f, - -0.009363f, -0.009394f, -0.008365f, +0.006967f, +0.003559f, -0.004706f, -0.023358f, +0.031910f, -0.001849f, -0.010805f, - +0.004109f, +0.015357f, -0.006522f, +0.010206f, -0.000312f, -0.013586f, +0.006833f, +0.006472f, -0.000168f, +0.005320f, - +0.000843f, +0.003505f, +0.008503f, +0.004315f, +0.007958f, +0.002679f, +0.005968f, +0.001545f, -0.003572f, -0.002165f, - -0.004837f, +0.002227f, +0.007378f, +0.000051f, +0.000006f, +0.000981f, -0.000710f, -0.000217f, +0.000985f, -0.000860f, - +0.000847f, -0.000696f, -0.001399f, -0.000650f, -0.002357f, -0.001339f, -0.003113f, -0.001687f, +0.002933f, +0.001891f, - -0.003754f, +0.004282f, -0.000177f, -0.002121f, +0.003870f, -0.003378f, +0.001259f, +0.001942f, +0.003796f, +0.000480f, - -0.001059f, +0.002399f, +0.003137f, +0.003992f, -0.003593f, -0.001092f - }, - { - -0.010173f, -0.001218f, +0.002287f, -0.003946f, +0.009191f, -0.001759f, -0.028054f, +0.003052f, +0.003652f, -0.001495f, - +0.002029f, +0.007406f, +0.020889f, -0.012083f, +0.000571f, +0.019918f, +0.010680f, +0.008031f, -0.022647f, -0.026929f, - +0.034118f, +0.007039f, +0.005557f, -0.007016f, -0.013509f, +0.012397f, -0.004674f, +0.012680f, -0.005798f, -0.005685f, - +0.025253f, -0.004529f, +0.021923f, +0.018967f, -0.004479f, +0.005843f, -0.012630f, -0.004901f, -0.002789f, +0.001154f, - +0.010114f, -0.007653f, -0.001293f, -0.013115f, -0.012478f, -0.005002f, -0.005602f, +0.007350f, -0.001120f, -0.008739f, - +0.010570f, -0.000425f, -0.002703f, -0.006562f, +0.005379f, +0.005023f, -0.005142f, +0.004812f, +0.000952f, +0.003508f, - +0.002740f, -0.004565f, +0.002037f, +0.005793f, -0.007076f, +0.012421f, -0.001815f, -0.008840f, -0.005534f, -0.006831f, - +0.003553f, +0.003821f, -0.002670f, +0.005231f, -0.002136f, +0.000856f, -0.000095f, -0.000161f, +0.006582f, +0.004890f, - +0.002269f, -0.004229f, -0.002211f, -0.000297f, +0.001108f, -0.001800f, -0.005803f, +0.000221f, +0.000416f, -0.001170f, - -0.000365f, +0.002169f, -0.001068f, +0.001527f, -0.001094f, -0.001715f - }, - { - -0.056120f, -0.099621f, +0.024836f, +0.019668f, -0.006613f, -0.056240f, -0.042759f, +0.032886f, -0.002483f, -0.015551f, - +0.013937f, -0.014259f, -0.019317f, -0.003867f, -0.016757f, +0.001644f, -0.008818f, +0.015358f, -0.045401f, +0.012249f, - +0.005587f, +0.038061f, -0.002890f, -0.009534f, +0.020778f, +0.023877f, +0.005576f, -0.010449f, +0.014791f, -0.000011f, - +0.022950f, +0.005037f, -0.036839f, -0.008792f, +0.002779f, -0.019149f, -0.004682f, +0.009407f, -0.005668f, +0.016491f, - -0.019586f, -0.008200f, +0.011048f, -0.013657f, +0.003381f, +0.003037f, +0.004966f, +0.003257f, -0.004801f, -0.014080f, - +0.005008f, -0.010164f, -0.001475f, -0.000779f, -0.001878f, -0.008961f, +0.005881f, -0.001400f, -0.004620f, +0.006663f, - +0.004083f, -0.002186f, -0.004840f, +0.002633f, +0.006826f, -0.002018f, -0.002976f, +0.000807f, +0.003485f, -0.001130f, - +0.003293f, +0.001728f, -0.001928f, -0.003183f, +0.004309f, -0.001092f, +0.003805f, -0.000805f, +0.006109f, +0.003887f, - +0.000527f, -0.002299f, -0.003381f, -0.000856f, -0.000441f, +0.006939f, +0.000476f, +0.000703f, -0.001521f, +0.003126f, - +0.003071f, +0.002412f, +0.002869f, -0.000521f, +0.003959f, -0.003571f - }, - { - -0.002567f, +0.066284f, +0.017377f, -0.004615f, -0.013843f, -0.003395f, +0.004562f, -0.010801f, +0.010489f, -0.006917f, - +0.014597f, +0.001743f, -0.012462f, -0.000273f, -0.046008f, +0.019110f, -0.013923f, -0.010849f, -0.043970f, -0.009833f, - +0.025188f, -0.002760f, -0.055004f, +0.000464f, -0.036520f, -0.008240f, -0.008011f, -0.005955f, -0.038598f, +0.002370f, - +0.006969f, -0.014371f, -0.000561f, +0.009098f, +0.009396f, +0.002314f, +0.018109f, -0.020435f, +0.006274f, +0.009497f, - +0.002262f, -0.004347f, +0.013437f, +0.012955f, -0.001176f, +0.005159f, +0.005059f, -0.002522f, +0.010222f, +0.004318f, - +0.000864f, +0.005019f, +0.000228f, -0.004290f, -0.005023f, -0.001497f, +0.002019f, -0.010594f, -0.001133f, +0.000646f, - -0.001722f, -0.001678f, -0.001284f, -0.006494f, +0.002808f, -0.001490f, -0.003291f, -0.000958f, +0.000588f, +0.000249f, - +0.000242f, +0.004980f, -0.000358f, -0.002171f, -0.003249f, -0.002377f, -0.001535f, -0.000342f, +0.000147f, -0.006467f, - -0.003343f, -0.004946f, +0.003014f, +0.002177f, -0.002050f, -0.001706f, +0.000386f, +0.001005f, -0.001716f, +0.002906f, - +0.005678f, -0.000493f, -0.001041f, +0.004236f, +0.001606f, -0.003387f - }, - { - -0.056095f, -0.073067f, +0.018098f, -0.012970f, +0.018293f, +0.027312f, +0.025329f, -0.002086f, -0.007493f, +0.027248f, - -0.019397f, +0.009461f, +0.004019f, -0.025467f, -0.018688f, -0.014895f, -0.014958f, +0.025773f, -0.018570f, +0.029215f, - -0.001879f, +0.020938f, -0.016210f, -0.015965f, +0.019574f, +0.009374f, -0.005293f, +0.001541f, -0.007436f, +0.027070f, - -0.016553f, -0.011846f, +0.000440f, +0.013164f, -0.019009f, +0.013659f, -0.002681f, -0.003260f, +0.011328f, -0.000578f, - +0.009819f, -0.010480f, +0.008639f, +0.003959f, +0.006538f, -0.007514f, +0.020692f, -0.004189f, -0.001589f, +0.003837f, - -0.009960f, -0.009924f, -0.002147f, +0.003738f, -0.007928f, -0.008466f, -0.003593f, +0.004919f, +0.000787f, -0.004069f, - -0.002694f, +0.001533f, +0.005363f, +0.002297f, -0.007773f, -0.003135f, -0.004220f, -0.003060f, -0.009091f, +0.004676f, - +0.000673f, +0.002220f, +0.009310f, +0.005151f, +0.001401f, -0.003522f, -0.002075f, +0.004920f, -0.003647f, +0.002177f, - -0.002500f, -0.001054f, -0.003326f, +0.004699f, -0.002283f, +0.000173f, +0.003231f, +0.002791f, -0.003197f, -0.000089f, - +0.003741f, -0.001754f, +0.002280f, +0.000679f, +0.003073f, +0.001673f - }, - { - +0.007824f, -0.088637f, -0.012820f, -0.004758f, -0.010750f, -0.031999f, -0.003606f, +0.005052f, -0.005138f, -0.000023f, - -0.009941f, +0.003199f, +0.002398f, +0.101042f, +0.014826f, +0.022259f, +0.037875f, -0.000266f, -0.002948f, +0.009588f, - -0.022411f, +0.032193f, -0.018986f, +0.011410f, +0.004520f, +0.014026f, -0.033282f, +0.019306f, -0.012913f, +0.019120f, - -0.004152f, +0.025382f, -0.005066f, +0.010638f, +0.000251f, -0.001639f, -0.024278f, +0.000369f, +0.021926f, +0.004752f, - +0.009947f, -0.006212f, +0.004696f, +0.000586f, -0.005544f, +0.018902f, -0.015948f, -0.016261f, +0.007621f, -0.003677f, - +0.019140f, +0.000996f, +0.004441f, +0.001183f, +0.004259f, -0.000831f, +0.004359f, +0.004564f, -0.009725f, -0.002575f, - +0.006360f, -0.002813f, -0.001014f, +0.005198f, +0.005960f, -0.005358f, +0.001917f, -0.006280f, -0.003320f, -0.001680f, - -0.000891f, -0.002720f, +0.001813f, -0.003064f, +0.000078f, -0.000209f, +0.002191f, +0.006296f, +0.006798f, +0.002710f, - -0.004379f, -0.003586f, -0.000031f, -0.000900f, +0.001659f, +0.003058f, -0.000827f, -0.002579f, +0.005177f, -0.000594f, - -0.001597f, -0.002054f, -0.000612f, +0.005008f, -0.001588f, -0.001277f - }, - { - -0.041496f, +0.043611f, +0.027492f, +0.010045f, +0.012331f, +0.015759f, -0.000337f, -0.028707f, -0.029054f, -0.036205f, - +0.029413f, -0.026283f, -0.049640f, -0.049498f, +0.057493f, +0.001200f, -0.005768f, +0.037018f, -0.002824f, -0.019532f, - +0.023276f, +0.042230f, +0.015257f, -0.003589f, +0.007381f, +0.010419f, +0.025311f, +0.001968f, -0.024264f, +0.004718f, - -0.025836f, -0.014066f, +0.002577f, +0.011993f, -0.012101f, -0.003780f, +0.002212f, -0.001243f, +0.019285f, -0.008618f, - -0.011401f, -0.017152f, +0.020690f, -0.002870f, +0.012269f, +0.014690f, +0.007861f, -0.013986f, +0.004663f, -0.000552f, - +0.006830f, +0.005981f, +0.003470f, +0.000295f, -0.002532f, +0.001236f, +0.000684f, +0.002351f, +0.015197f, +0.000676f, - +0.000415f, +0.001820f, +0.007706f, +0.008834f, -0.001151f, +0.015257f, +0.006100f, -0.005847f, -0.000540f, +0.007488f, - -0.006284f, -0.001539f, +0.001479f, +0.007550f, -0.005966f, +0.001776f, -0.001293f, +0.002479f, +0.000694f, -0.000155f, - -0.000090f, +0.003566f, -0.000194f, +0.002717f, -0.001160f, +0.000147f, -0.001363f, +0.002726f, -0.001971f, -0.002559f, - +0.004734f, +0.001758f, +0.000072f, +0.000839f, -0.002513f, +0.001220f - } - }, - { - { - +0.000686f, -0.026170f, -0.044584f, -0.028456f, -0.002379f, +0.004153f, +0.007436f, +0.004526f, +0.003519f, -0.036379f, - -0.008528f, -0.037436f, -0.009099f, +0.003899f, +0.029816f, +0.033047f, +0.007000f, -0.018593f, +0.029301f, +0.043935f, - +0.004100f, -0.036830f, +0.000009f, -0.013061f, +0.001679f, +0.002527f, -0.000646f, +0.002508f, -0.014179f, +0.025142f, - +0.034542f, -0.001204f, +0.018969f, -0.014165f, +0.007906f, -0.000207f, +0.019766f, -0.015683f, -0.001789f, +0.008999f, - -0.006645f, -0.005705f, -0.001578f, -0.014260f, -0.010289f, -0.016737f, +0.009102f, +0.008324f, -0.009636f, +0.002870f, - -0.004651f, -0.009228f, -0.002842f, -0.012027f, +0.003293f, +0.005994f, +0.002673f, +0.005232f, -0.011189f, +0.009268f, - -0.001217f, -0.005543f, +0.006992f, +0.001792f, -0.001942f, -0.001050f, +0.005246f, +0.002205f, -0.006187f, +0.006987f, - -0.000904f, -0.005250f, +0.002414f, +0.002428f, -0.000057f, +0.005961f, -0.001604f, +0.003192f, -0.000958f, +0.000196f, - +0.004276f, -0.001013f, +0.001298f, +0.001976f, +0.002468f, +0.002289f, +0.001653f, +0.003076f, +0.000058f, -0.000690f, - -0.004419f, +0.000426f, +0.003110f, +0.003249f, +0.001663f, +0.000777f - }, - { - -0.049354f, -0.165838f, +0.136996f, -0.054067f, +0.055355f, +0.005878f, +0.015497f, +0.007679f, +0.002989f, -0.006876f, - +0.056646f, -0.050718f, +0.018032f, -0.006810f, -0.019710f, -0.017678f, +0.005541f, +0.018397f, +0.033459f, +0.002242f, - +0.016854f, -0.011208f, +0.000293f, -0.006218f, +0.024523f, +0.001772f, -0.011073f, -0.008808f, +0.013277f, +0.002543f, - +0.021080f, -0.011893f, +0.013974f, -0.007775f, -0.007807f, -0.018788f, +0.002869f, -0.003979f, +0.005835f, -0.000914f, - -0.007734f, +0.017258f, -0.001670f, -0.006008f, -0.006329f, +0.012324f, +0.007089f, +0.002809f, -0.006596f, +0.002451f, - +0.011387f, +0.008485f, +0.008049f, +0.014093f, -0.005214f, -0.008457f, -0.003137f, -0.001730f, +0.005601f, +0.000199f, - -0.006711f, +0.003091f, -0.013308f, -0.000749f, +0.003070f, +0.001228f, +0.000549f, +0.004447f, -0.000009f, +0.005308f, - -0.002726f, -0.000007f, -0.003207f, -0.001278f, +0.004104f, -0.000257f, -0.001520f, -0.002531f, -0.003249f, -0.002248f, - -0.000312f, +0.001968f, -0.000783f, -0.001648f, +0.001326f, -0.000143f, -0.000094f, -0.001587f, +0.000132f, -0.000675f, - +0.000736f, +0.000004f, -0.002011f, +0.002248f, -0.000783f, +0.000111f - }, - { - -0.002535f, +0.290216f, +0.010991f, +0.040995f, -0.007118f, +0.012761f, -0.000448f, -0.012825f, -0.006751f, -0.036994f, - +0.017257f, +0.036491f, -0.013284f, +0.005997f, +0.014093f, -0.009866f, +0.001488f, -0.005533f, +0.009548f, +0.015214f, - +0.000231f, +0.003590f, +0.011047f, +0.002746f, +0.020257f, -0.011106f, +0.000575f, -0.013949f, +0.002284f, -0.004939f, - +0.007715f, -0.001844f, -0.007285f, -0.018232f, +0.002419f, -0.001562f, -0.005584f, +0.003851f, +0.014800f, +0.005622f, - +0.002229f, +0.003381f, +0.000101f, -0.012400f, -0.006468f, +0.004695f, -0.013463f, +0.001223f, +0.009937f, +0.001048f, - +0.008046f, -0.002646f, +0.007110f, -0.003100f, +0.007316f, -0.004012f, +0.005769f, +0.000763f, +0.012799f, +0.000598f, - -0.005195f, -0.002167f, -0.000846f, -0.000623f, +0.001056f, +0.004437f, +0.003088f, +0.004591f, -0.008564f, -0.001442f, - -0.001665f, -0.001119f, -0.002959f, -0.002973f, +0.003427f, +0.000595f, -0.002803f, -0.002772f, +0.003089f, +0.002916f, - +0.001463f, +0.004675f, +0.003082f, +0.001536f, +0.001091f, -0.001715f, +0.000245f, -0.000165f, +0.001715f, -0.000448f, - -0.000740f, -0.001167f, +0.000231f, +0.001401f, +0.000414f, -0.001105f - }, - { - -0.002921f, +0.044908f, +0.012359f, +0.014877f, -0.006813f, +0.002624f, +0.003805f, +0.006459f, -0.006479f, +0.002089f, - -0.005848f, +0.001581f, -0.013342f, +0.005025f, +0.044646f, +0.021315f, +0.008821f, -0.000781f, +0.059459f, +0.011032f, - -0.004523f, +0.002310f, +0.001240f, +0.007021f, -0.021567f, -0.023746f, -0.028717f, -0.002163f, -0.011356f, +0.008854f, - -0.012964f, -0.020192f, +0.001502f, -0.022845f, +0.002746f, +0.000884f, +0.032072f, -0.018834f, -0.007303f, +0.002751f, - +0.012240f, -0.002471f, -0.004484f, +0.016201f, +0.009656f, -0.003240f, +0.007509f, -0.001910f, -0.004029f, -0.005054f, - +0.009036f, -0.005500f, +0.004451f, -0.005028f, -0.003141f, -0.002488f, -0.002595f, +0.000178f, -0.003084f, +0.002123f, - -0.001094f, -0.001323f, +0.000483f, -0.002441f, -0.006989f, -0.000509f, +0.001872f, +0.000250f, -0.006638f, -0.003713f, - +0.000893f, -0.001309f, -0.003099f, -0.005364f, +0.002656f, -0.003982f, -0.001640f, -0.002492f, -0.002133f, -0.001386f, - +0.000890f, +0.002576f, +0.004270f, -0.001116f, +0.000112f, -0.000814f, +0.000151f, -0.000377f, -0.000483f, +0.002061f, - -0.001731f, +0.000465f, +0.000113f, -0.001129f, +0.001524f, -0.002407f - }, - { - +0.034945f, +0.217215f, -0.048974f, -0.106686f, +0.008585f, +0.006321f, +0.005664f, -0.029917f, -0.000076f, -0.041540f, - -0.015926f, -0.022068f, +0.010940f, +0.003976f, -0.022293f, +0.022251f, +0.031844f, -0.039769f, +0.017079f, +0.030303f, - -0.016286f, +0.027516f, -0.023535f, +0.021307f, +0.004204f, +0.006219f, +0.027619f, +0.026342f, +0.002761f, +0.000418f, - +0.016295f, -0.003628f, -0.001943f, -0.009813f, -0.007901f, +0.006768f, +0.000575f, +0.004912f, -0.002846f, -0.007141f, - +0.011750f, +0.005265f, +0.011839f, -0.000847f, +0.000182f, +0.003593f, -0.004626f, +0.003849f, -0.002076f, +0.015701f, - +0.000281f, -0.011957f, +0.002113f, +0.009207f, +0.011841f, -0.009037f, +0.002887f, -0.000275f, +0.005482f, -0.007837f, - +0.005022f, +0.001499f, +0.009272f, +0.004311f, -0.008692f, +0.003827f, -0.004615f, -0.003037f, +0.002667f, -0.003433f, - +0.001956f, +0.001740f, -0.000320f, +0.002045f, -0.004056f, +0.001487f, +0.002343f, +0.001102f, -0.001298f, -0.000444f, - -0.007497f, +0.000169f, +0.002983f, +0.000052f, -0.000397f, +0.000097f, -0.001851f, +0.001440f, +0.001190f, -0.000908f, - -0.001120f, +0.001101f, -0.000780f, +0.000838f, +0.001607f, +0.001817f - }, - { - +0.002980f, +0.021782f, +0.013738f, -0.001620f, -0.004715f, -0.001985f, -0.001333f, +0.001675f, +0.009671f, -0.001884f, - -0.002883f, -0.004866f, +0.000221f, +0.011037f, -0.048954f, +0.013745f, -0.004613f, +0.014251f, -0.025005f, +0.071098f, - -0.010674f, +0.017627f, -0.002893f, +0.031221f, -0.016701f, -0.024066f, -0.000191f, -0.006609f, +0.001556f, +0.042248f, - -0.004262f, -0.010924f, -0.016386f, -0.007646f, +0.005148f, +0.006146f, +0.001028f, +0.004486f, +0.006947f, -0.004771f, - +0.007058f, +0.013532f, +0.007189f, +0.002272f, +0.010690f, -0.007224f, +0.009872f, -0.015006f, -0.013812f, -0.010716f, - +0.007068f, +0.004660f, +0.011492f, -0.004136f, -0.001303f, -0.004113f, +0.001036f, +0.004924f, -0.007433f, +0.000467f, - +0.002290f, +0.004819f, +0.003090f, -0.000314f, +0.001394f, -0.000405f, +0.011045f, -0.001628f, -0.007026f, +0.001342f, - -0.003042f, -0.004365f, -0.003167f, -0.004974f, -0.000335f, +0.004469f, +0.003032f, -0.002270f, +0.003017f, +0.001721f, - -0.001705f, -0.002120f, +0.003238f, -0.001248f, -0.002037f, -0.002116f, +0.002762f, -0.002600f, -0.001623f, -0.000343f, - +0.000396f, +0.000352f, -0.001709f, +0.001613f, +0.002012f, +0.001203f - }, - { - +0.078215f, +0.199219f, -0.058748f, -0.060550f, +0.007040f, -0.002710f, -0.008418f, +0.005655f, +0.033889f, -0.004018f, - +0.001861f, +0.015753f, -0.007424f, -0.012378f, -0.022228f, -0.000686f, +0.011304f, -0.024114f, +0.028543f, -0.010128f, - -0.010132f, -0.007210f, -0.016835f, -0.029917f, +0.026891f, +0.003223f, -0.006998f, -0.011628f, +0.006286f, +0.007113f, - -0.000218f, -0.004594f, -0.008587f, -0.013353f, +0.000580f, -0.004149f, +0.006498f, +0.011136f, +0.003529f, +0.001423f, - +0.005776f, -0.000518f, +0.005665f, -0.006001f, +0.009916f, +0.004086f, +0.009265f, -0.005366f, +0.005076f, -0.003120f, - -0.000411f, -0.008218f, +0.008908f, +0.000232f, -0.004177f, +0.005327f, +0.014266f, +0.000425f, -0.011749f, +0.000504f, - -0.000560f, -0.000929f, +0.002792f, -0.002514f, -0.000278f, -0.001282f, -0.000168f, +0.003606f, +0.000969f, -0.001495f, - -0.002861f, -0.000456f, +0.000511f, -0.001884f, -0.000183f, -0.002294f, -0.002078f, -0.000021f, -0.000885f, -0.000449f, - +0.001107f, +0.000998f, -0.002468f, +0.000113f, +0.001453f, -0.002362f, -0.001844f, -0.000640f, +0.002578f, +0.002891f, - -0.000961f, +0.000491f, +0.003157f, +0.000782f, +0.001065f, +0.000377f - }, - { - +0.003234f, +0.018094f, +0.005820f, +0.000203f, +0.004441f, +0.001605f, -0.000703f, +0.004492f, -0.008928f, -0.001328f, - +0.000134f, -0.004817f, -0.004409f, -0.003446f, -0.017665f, -0.003397f, -0.048209f, -0.040853f, -0.010700f, +0.023918f, - -0.020632f, -0.005610f, +0.017590f, +0.015404f, -0.008026f, +0.023157f, +0.011989f, -0.020765f, +0.013918f, -0.014877f, - -0.018409f, +0.016629f, -0.015532f, +0.015520f, +0.001425f, +0.000378f, +0.008387f, -0.004228f, -0.014519f, -0.009480f, - +0.004394f, -0.001442f, -0.006005f, +0.013099f, -0.001273f, +0.002574f, -0.002881f, +0.001037f, +0.011262f, -0.008024f, - +0.001097f, +0.013203f, +0.009523f, -0.009367f, -0.005431f, -0.014645f, -0.001546f, +0.002606f, +0.005161f, -0.002953f, - +0.008770f, -0.003466f, +0.003423f, +0.001243f, -0.000776f, +0.001078f, +0.006026f, -0.008934f, -0.001786f, +0.004602f, - -0.000400f, -0.001951f, +0.005472f, -0.000615f, -0.003208f, -0.000450f, -0.000083f, +0.000436f, +0.001508f, -0.003758f, - -0.002697f, -0.004841f, +0.002467f, +0.000378f, -0.001383f, -0.002231f, -0.000894f, +0.003234f, +0.000432f, +0.001075f, - +0.003566f, -0.000197f, +0.002928f, -0.000511f, -0.001489f, -0.001907f - }, - { - -0.006287f, +0.662294f, -0.046053f, -0.072931f, +0.033295f, +0.000050f, +0.046377f, +0.019806f, +0.023684f, -0.013034f, - -0.020295f, +0.010306f, +0.024298f, +0.024931f, +0.017308f, -0.015020f, +0.040771f, +0.013412f, -0.010838f, -0.028343f, - -0.007762f, -0.013780f, -0.010950f, -0.000884f, -0.014117f, -0.002264f, +0.000055f, +0.021149f, -0.012381f, -0.003616f, - -0.009369f, +0.002865f, -0.007837f, -0.012812f, +0.006982f, -0.007060f, +0.006435f, +0.018344f, -0.008476f, -0.002468f, - -0.004818f, +0.010093f, +0.013796f, +0.006985f, +0.001590f, -0.019159f, -0.000960f, +0.017061f, +0.005184f, +0.002309f, - -0.006304f, +0.013236f, +0.002149f, +0.005475f, +0.002050f, +0.015404f, -0.001773f, -0.000040f, -0.002725f, -0.008162f, - +0.001443f, +0.001079f, +0.009337f, +0.002860f, -0.003462f, +0.003875f, -0.004208f, +0.002127f, +0.002300f, -0.002081f, - +0.000741f, +0.000650f, -0.004784f, -0.000092f, -0.002256f, -0.001020f, -0.003915f, +0.000630f, +0.001512f, +0.000867f, - +0.000328f, +0.001955f, +0.000792f, +0.001531f, +0.000743f, -0.000537f, -0.001800f, +0.001405f, +0.004132f, +0.002117f, - -0.000057f, +0.002260f, +0.003129f, +0.003394f, -0.004150f, -0.000204f - }, - { - +0.008444f, +0.033179f, -0.044102f, -0.016401f, +0.024707f, -0.017071f, -0.018616f, -0.006152f, +0.010018f, -0.002200f, - +0.018445f, +0.000896f, +0.016719f, -0.015332f, +0.020959f, +0.015247f, +0.011935f, -0.003252f, -0.017795f, +0.002947f, - +0.002280f, +0.012148f, -0.019085f, +0.009150f, +0.002738f, -0.012413f, -0.006078f, +0.018716f, +0.016815f, -0.016360f, - +0.023111f, -0.005600f, +0.031977f, +0.001760f, +0.007275f, -0.004410f, -0.003267f, -0.003346f, +0.000913f, -0.006158f, - +0.004117f, +0.003598f, -0.013086f, -0.003920f, -0.001987f, -0.007043f, -0.016649f, +0.004114f, -0.003837f, +0.003806f, - +0.005668f, -0.000317f, -0.003405f, +0.004917f, +0.003528f, +0.001527f, -0.001092f, -0.000924f, -0.000486f, +0.002547f, - +0.010308f, -0.003407f, +0.000221f, -0.003895f, +0.004060f, +0.006080f, -0.002780f, -0.006401f, -0.000112f, -0.008729f, - +0.001638f, +0.003124f, +0.002795f, -0.000360f, +0.001213f, -0.000103f, -0.001056f, -0.001097f, +0.006781f, +0.005844f, - -0.001216f, -0.003417f, -0.002381f, +0.003938f, -0.002176f, -0.003561f, -0.003027f, -0.000542f, +0.001837f, -0.003907f, - +0.002910f, -0.000313f, +0.000630f, +0.000055f, -0.001621f, -0.000338f - }, - { - +0.059661f, -0.174120f, -0.064962f, +0.032902f, +0.000281f, -0.093006f, -0.022483f, +0.012090f, +0.005521f, -0.000490f, - +0.001935f, -0.004748f, -0.019927f, -0.021732f, -0.013475f, -0.011397f, -0.017464f, +0.018282f, -0.040716f, +0.009959f, - +0.017336f, +0.020190f, -0.008443f, +0.004917f, +0.015835f, +0.016193f, +0.015164f, -0.010177f, +0.008508f, +0.000567f, - +0.014689f, +0.008802f, -0.028218f, -0.025844f, -0.002263f, -0.009461f, -0.000318f, +0.011185f, +0.006363f, +0.002175f, - -0.019442f, -0.000945f, +0.006382f, -0.001553f, +0.006987f, -0.012689f, +0.017214f, -0.007937f, -0.002984f, -0.010391f, - +0.001292f, -0.009667f, -0.001210f, -0.002793f, +0.002269f, -0.006791f, +0.003723f, -0.007146f, +0.003003f, +0.004144f, - -0.000038f, +0.000281f, -0.004866f, +0.010718f, +0.003190f, -0.002788f, -0.004726f, +0.005968f, -0.001659f, +0.005875f, - +0.003651f, -0.004356f, -0.002165f, +0.000074f, +0.002232f, +0.000827f, +0.001639f, +0.001546f, +0.003435f, +0.005595f, - +0.000091f, -0.000868f, -0.002959f, -0.001678f, +0.001322f, +0.004148f, +0.001993f, +0.000105f, +0.000985f, +0.001308f, - +0.003813f, +0.002899f, +0.002975f, +0.000161f, -0.000621f, -0.001047f - }, - { - -0.000183f, +0.090290f, -0.010319f, +0.004678f, -0.015841f, -0.003556f, -0.007471f, -0.000773f, +0.005179f, -0.012599f, - +0.020556f, +0.006027f, +0.005531f, -0.053147f, +0.001846f, +0.016218f, -0.014019f, -0.009029f, -0.055799f, +0.021415f, - +0.002882f, -0.042575f, -0.031463f, -0.007366f, -0.014179f, -0.005795f, -0.015963f, -0.005683f, -0.012316f, -0.035251f, - +0.017078f, -0.014713f, +0.000977f, +0.002134f, +0.027987f, -0.002699f, -0.002938f, -0.012630f, +0.015379f, +0.002097f, - +0.009774f, -0.005591f, +0.010077f, +0.002020f, +0.008345f, -0.000192f, +0.009606f, -0.011833f, +0.009591f, +0.012974f, - +0.011279f, -0.001280f, +0.005056f, -0.009327f, -0.004699f, -0.002796f, -0.000553f, -0.000608f, -0.008749f, -0.001951f, - -0.000009f, -0.003293f, -0.004141f, +0.009623f, -0.001635f, -0.009630f, -0.000694f, -0.002950f, -0.001148f, +0.006206f, - -0.004581f, -0.000287f, +0.000701f, -0.002520f, -0.001717f, -0.000438f, -0.002664f, +0.002318f, -0.000797f, -0.004191f, - -0.006599f, -0.000383f, -0.001373f, +0.004921f, -0.004945f, +0.003037f, -0.001303f, -0.001959f, +0.002636f, +0.002457f, - +0.003082f, -0.000111f, -0.004709f, +0.007658f, -0.000688f, -0.001999f - }, - { - +0.035528f, -0.186578f, +0.021208f, -0.005840f, +0.014614f, +0.040997f, +0.021507f, -0.011280f, +0.004791f, -0.017636f, - +0.003644f, +0.020401f, -0.012151f, -0.021214f, -0.041234f, -0.005772f, -0.041467f, +0.020464f, +0.014660f, +0.006031f, - +0.004853f, +0.001525f, +0.007679f, -0.002586f, +0.006788f, +0.001396f, -0.005754f, -0.003910f, +0.017896f, +0.014060f, - -0.020291f, -0.010213f, +0.007334f, -0.002387f, +0.004436f, +0.001628f, -0.002815f, +0.012335f, -0.005256f, +0.009821f, - +0.009049f, -0.004619f, +0.011166f, +0.004774f, +0.002434f, +0.002491f, +0.004101f, +0.001059f, -0.002390f, +0.007247f, - -0.013346f, -0.001811f, -0.007239f, -0.011007f, +0.007823f, -0.008596f, -0.004857f, +0.008528f, -0.006531f, -0.001181f, - -0.005473f, +0.006389f, -0.000277f, +0.006749f, +0.000030f, -0.001421f, -0.006480f, -0.004847f, -0.007302f, +0.007601f, - -0.004982f, +0.005522f, +0.003129f, +0.004346f, +0.005088f, -0.003207f, +0.000168f, -0.000054f, -0.003493f, +0.004040f, - -0.006207f, +0.001067f, -0.002040f, -0.000321f, +0.000927f, -0.000123f, +0.002847f, +0.002164f, -0.004520f, +0.004294f, - -0.000008f, +0.000040f, +0.001331f, +0.001588f, +0.001598f, -0.001028f - }, - { - -0.009274f, -0.087405f, +0.007445f, -0.004927f, -0.016637f, -0.030685f, -0.016547f, +0.010273f, +0.000745f, +0.002972f, - -0.022761f, +0.015984f, +0.007294f, -0.032680f, +0.230276f, +0.013263f, +0.010221f, +0.002001f, +0.050952f, -0.061191f, - +0.009270f, +0.021244f, -0.026799f, +0.016260f, +0.026646f, -0.021649f, -0.002767f, +0.006393f, -0.011636f, +0.025596f, - +0.013734f, +0.015173f, -0.010683f, -0.000520f, +0.012529f, -0.016997f, -0.004687f, -0.017007f, +0.020686f, +0.017751f, - -0.004185f, +0.003346f, -0.000705f, +0.003310f, -0.004700f, +0.013845f, -0.004387f, -0.011355f, -0.004030f, +0.000806f, - +0.004209f, +0.013807f, -0.003321f, -0.000074f, +0.005311f, +0.001019f, +0.006476f, -0.002477f, -0.001456f, -0.000879f, - +0.003523f, -0.000391f, -0.000607f, +0.005479f, +0.002193f, +0.003407f, -0.012276f, -0.003689f, -0.000782f, +0.003162f, - -0.003025f, -0.001866f, -0.005379f, -0.003397f, +0.003268f, +0.000149f, +0.005159f, -0.001304f, +0.010848f, +0.002445f, - -0.002962f, -0.000212f, -0.003163f, -0.000879f, -0.000481f, +0.005989f, -0.000158f, -0.003625f, +0.004651f, +0.000581f, - -0.004700f, -0.001610f, +0.003161f, +0.000977f, -0.000199f, -0.000711f - }, - { - +0.049435f, -0.029715f, -0.014712f, +0.018215f, -0.001772f, +0.031982f, -0.018646f, -0.031479f, -0.021131f, -0.006104f, - -0.013476f, -0.033008f, -0.012680f, +0.022995f, -0.053321f, -0.028182f, +0.026986f, +0.024404f, -0.006021f, +0.007970f, - +0.009943f, +0.026914f, +0.010782f, +0.015692f, +0.005831f, +0.011128f, +0.012020f, -0.029857f, +0.017391f, -0.007415f, - -0.021830f, -0.022042f, -0.000370f, -0.011154f, +0.002154f, +0.006953f, +0.008040f, -0.009230f, +0.001287f, +0.016360f, - -0.012204f, -0.015544f, +0.007906f, +0.001968f, +0.009811f, +0.019419f, -0.002883f, +0.003325f, -0.000636f, +0.003641f, - +0.003766f, +0.013657f, -0.002754f, +0.010900f, -0.008563f, +0.001976f, +0.001637f, +0.000852f, +0.011042f, +0.005083f, - -0.001334f, -0.001225f, +0.011854f, +0.001273f, +0.008487f, +0.009329f, +0.008856f, -0.000752f, -0.007075f, -0.002427f, - +0.005919f, -0.003072f, +0.001053f, +0.002147f, -0.005061f, +0.000882f, +0.001154f, +0.002445f, +0.000325f, +0.001017f, - -0.000723f, -0.000384f, +0.004053f, +0.000213f, +0.000688f, -0.000629f, -0.002235f, +0.003841f, -0.000041f, -0.001678f, - +0.001958f, +0.002785f, -0.002179f, -0.000577f, +0.000803f, -0.001100f - } - }, - { - { - -0.001188f, +0.075567f, +0.030522f, -0.033787f, -0.003297f, +0.006425f, +0.002783f, -0.005801f, +0.006994f, -0.055871f, - -0.038536f, +0.002365f, +0.020770f, -0.038378f, -0.013552f, +0.019572f, -0.010368f, -0.019650f, +0.045569f, +0.023669f, - +0.012024f, +0.001861f, +0.032027f, -0.006239f, -0.000838f, +0.018049f, -0.010456f, -0.003168f, -0.020462f, +0.008556f, - +0.011507f, -0.018740f, +0.008867f, -0.030431f, +0.013310f, +0.026174f, +0.035852f, -0.010530f, -0.001597f, +0.004768f, - -0.000578f, -0.001938f, +0.001634f, -0.007221f, +0.014984f, +0.010248f, +0.006205f, -0.008070f, -0.016146f, +0.004614f, - +0.002780f, -0.006113f, +0.002246f, -0.003233f, +0.008071f, +0.006050f, -0.007311f, +0.002562f, -0.008389f, +0.009022f, - +0.003948f, -0.003562f, +0.003736f, -0.003075f, -0.007552f, -0.005895f, -0.004644f, -0.005705f, -0.004414f, +0.010993f, - -0.000242f, -0.008889f, -0.002873f, -0.004221f, -0.006384f, +0.000854f, -0.002942f, +0.002222f, -0.001045f, -0.003423f, - +0.004275f, -0.000876f, -0.000639f, +0.003124f, +0.003912f, +0.000682f, -0.001851f, -0.000917f, -0.001289f, +0.000246f, - -0.002995f, +0.001601f, +0.001742f, +0.000532f, +0.000003f, -0.001120f - }, - { - +0.047273f, -0.302853f, -0.062975f, -0.069689f, +0.035890f, -0.008904f, -0.003214f, -0.002567f, -0.002846f, -0.022879f, - +0.035799f, -0.036129f, +0.019625f, -0.002549f, -0.023038f, -0.031111f, +0.003356f, +0.008892f, +0.015866f, -0.004085f, - -0.000913f, -0.021070f, +0.000001f, -0.002953f, +0.009518f, -0.013305f, -0.013892f, -0.011457f, +0.013592f, +0.006849f, - +0.006863f, -0.008894f, +0.013620f, -0.004628f, +0.006974f, -0.022609f, -0.014394f, -0.016037f, +0.008539f, +0.003414f, - -0.003399f, +0.018457f, +0.007115f, +0.011274f, +0.002411f, +0.011484f, -0.010414f, -0.006866f, -0.016056f, -0.012763f, - +0.008333f, +0.011228f, +0.005210f, +0.008103f, -0.007524f, -0.003231f, -0.000854f, -0.003656f, -0.000162f, +0.000045f, - -0.004872f, +0.010104f, -0.006449f, -0.003437f, +0.000952f, -0.001031f, -0.007015f, +0.000899f, +0.002584f, +0.004178f, - -0.003640f, -0.000101f, -0.003795f, -0.004869f, +0.000042f, -0.000311f, +0.000542f, -0.000345f, -0.000064f, +0.000203f, - +0.001738f, -0.000060f, -0.000363f, +0.003665f, +0.003783f, +0.001553f, +0.002712f, +0.001006f, -0.000093f, -0.001420f, - -0.000785f, -0.000604f, -0.000448f, +0.003136f, -0.001404f, +0.000086f - }, - { - +0.006492f, +0.220010f, -0.052932f, +0.042052f, -0.001894f, +0.003878f, -0.000838f, +0.017339f, +0.020772f, -0.024373f, - +0.014916f, +0.032375f, -0.023135f, +0.025180f, +0.037694f, +0.007309f, +0.023133f, -0.018667f, -0.014719f, +0.003750f, - -0.022339f, -0.020055f, +0.018512f, +0.016548f, -0.003364f, -0.023122f, +0.003359f, -0.004185f, +0.015681f, +0.006759f, - +0.002958f, +0.000862f, +0.004084f, -0.022978f, -0.007267f, +0.009698f, -0.001401f, -0.001346f, +0.010879f, +0.003041f, - +0.012391f, +0.009499f, -0.003279f, -0.007021f, -0.003397f, +0.000627f, -0.004830f, +0.001985f, -0.000926f, +0.003328f, - +0.010077f, +0.005648f, +0.008501f, -0.008719f, +0.006074f, +0.000398f, +0.005734f, -0.001893f, +0.010114f, +0.003108f, - -0.005938f, +0.000102f, +0.001078f, -0.000131f, +0.005771f, +0.003967f, -0.005054f, +0.004183f, -0.004967f, -0.002719f, - -0.003932f, +0.001323f, +0.002921f, +0.000114f, +0.001972f, +0.000417f, +0.004313f, +0.001277f, +0.000075f, +0.001204f, - +0.000841f, +0.000016f, +0.001050f, +0.003459f, -0.000086f, -0.003313f, +0.001847f, +0.000742f, +0.000123f, -0.000489f, - +0.001115f, -0.001147f, -0.000519f, +0.002098f, +0.000163f, -0.001700f - }, - { - +0.003288f, +0.031285f, -0.008272f, +0.011005f, -0.005846f, +0.002487f, +0.000378f, +0.001079f, -0.005353f, +0.001164f, - -0.007240f, +0.013235f, -0.010739f, -0.009656f, +0.000403f, -0.000915f, +0.022398f, -0.005088f, +0.032413f, +0.012383f, - +0.020541f, -0.018235f, -0.015868f, +0.017039f, -0.006759f, -0.014424f, -0.025155f, +0.003028f, -0.003070f, -0.016974f, - -0.028273f, -0.014875f, -0.005630f, -0.018021f, -0.006065f, +0.003958f, +0.028323f, -0.021470f, -0.000484f, +0.002947f, - +0.004624f, -0.008732f, -0.015071f, +0.003492f, +0.001616f, -0.012633f, +0.002292f, -0.002396f, -0.002067f, -0.004640f, - +0.006189f, -0.003564f, +0.012179f, +0.000212f, -0.008722f, -0.002150f, +0.000543f, +0.004505f, +0.001825f, +0.002291f, - +0.005190f, +0.004852f, +0.002499f, +0.001294f, -0.002309f, +0.003616f, +0.007879f, +0.002063f, -0.003753f, +0.002262f, - +0.000419f, -0.002142f, -0.000297f, -0.004922f, +0.003501f, -0.000549f, -0.000012f, -0.000344f, +0.001123f, +0.001745f, - +0.000759f, -0.000784f, +0.003898f, -0.001976f, +0.000155f, -0.001171f, +0.001026f, -0.000673f, -0.000991f, +0.002531f, - -0.000497f, +0.001316f, +0.000166f, -0.001761f, +0.001746f, -0.003649f - }, - { - -0.069636f, +0.148031f, +0.016928f, -0.093360f, +0.007801f, +0.005570f, -0.002595f, -0.011229f, +0.009271f, -0.046935f, - +0.000433f, +0.010414f, +0.022801f, -0.007976f, -0.022657f, +0.007579f, +0.010636f, -0.045615f, +0.008638f, +0.015342f, - -0.025517f, +0.015134f, -0.026616f, -0.007635f, -0.015104f, -0.015353f, +0.012577f, +0.024273f, -0.005670f, -0.010000f, - +0.009923f, -0.004269f, -0.003125f, -0.012271f, -0.001125f, +0.004832f, -0.047624f, -0.017360f, +0.008647f, -0.014790f, - +0.010932f, +0.004623f, +0.021647f, -0.005928f, -0.001109f, +0.002352f, -0.007578f, +0.005040f, -0.004229f, +0.011551f, - +0.003249f, -0.005270f, +0.006451f, +0.006394f, +0.011606f, -0.003630f, +0.003182f, -0.005167f, +0.009042f, -0.005515f, - +0.003396f, -0.002903f, +0.002079f, +0.005161f, -0.002972f, +0.002625f, -0.006226f, -0.002909f, -0.000054f, -0.006262f, - +0.001077f, +0.000197f, -0.001567f, +0.002024f, -0.004916f, +0.001433f, +0.003911f, +0.003345f, -0.002105f, -0.000103f, - -0.002206f, +0.000519f, +0.000936f, -0.000543f, -0.002795f, -0.000630f, -0.000144f, +0.000714f, -0.000187f, +0.000076f, - -0.000414f, -0.000298f, -0.001437f, -0.000440f, -0.001795f, +0.001186f - }, - { - -0.000340f, -0.007689f, +0.001326f, -0.002610f, -0.005163f, -0.000194f, -0.000761f, +0.001089f, +0.011373f, +0.003229f, - -0.005997f, -0.009720f, +0.002914f, -0.003410f, -0.073008f, +0.012474f, -0.033900f, -0.000770f, -0.028449f, +0.065761f, - -0.002036f, +0.013700f, +0.004538f, +0.021634f, -0.031732f, -0.028442f, -0.023113f, -0.032172f, -0.022449f, +0.001095f, - -0.006301f, +0.006364f, +0.011070f, +0.015852f, +0.000755f, -0.000958f, -0.008895f, +0.004817f, +0.018428f, +0.002715f, - -0.001436f, -0.001259f, -0.001222f, +0.000381f, +0.006532f, -0.006886f, +0.010042f, -0.013687f, -0.002199f, +0.000153f, - +0.000025f, -0.000348f, +0.012562f, +0.000980f, -0.001043f, -0.004270f, -0.001715f, -0.000527f, -0.011406f, -0.002018f, - +0.004180f, +0.003848f, +0.001110f, -0.003480f, +0.000240f, -0.003169f, +0.002445f, -0.002104f, -0.003424f, +0.004618f, - +0.000128f, -0.000098f, +0.001216f, -0.000749f, -0.002230f, -0.000287f, +0.002177f, -0.001423f, +0.000060f, -0.002355f, - +0.000217f, +0.000667f, +0.004645f, -0.000137f, +0.002326f, +0.001857f, +0.002525f, -0.003474f, -0.000084f, +0.000295f, - -0.000123f, +0.000211f, -0.000197f, +0.001804f, +0.000893f, +0.000354f - }, - { - -0.119996f, +0.037900f, +0.033136f, -0.064969f, -0.014857f, -0.002205f, -0.003923f, +0.002424f, +0.013158f, -0.019328f, - -0.002359f, +0.055457f, +0.028544f, +0.015508f, -0.029808f, -0.015042f, +0.030251f, +0.008838f, +0.032504f, +0.008801f, - +0.005376f, -0.017867f, +0.004946f, -0.013414f, +0.025062f, -0.007594f, -0.012543f, -0.014568f, +0.016027f, +0.002651f, - -0.005698f, +0.012551f, -0.000681f, -0.015763f, +0.006383f, +0.002045f, +0.005930f, +0.001002f, +0.002721f, -0.005483f, - +0.004541f, +0.005180f, +0.006768f, -0.001114f, +0.015727f, -0.002001f, -0.000990f, -0.005191f, -0.000510f, +0.000492f, - +0.015383f, +0.004247f, +0.009169f, +0.001535f, +0.003031f, +0.002732f, +0.008214f, +0.003913f, -0.009254f, +0.000578f, - -0.000642f, -0.004219f, +0.001914f, -0.003745f, -0.001183f, -0.002744f, -0.001023f, +0.003336f, +0.000090f, -0.000992f, - +0.000141f, +0.001356f, -0.000048f, -0.000555f, +0.001251f, -0.008580f, -0.004578f, +0.000736f, -0.001767f, -0.002409f, - -0.000086f, +0.000424f, +0.000249f, -0.001496f, -0.002346f, -0.001026f, +0.001668f, +0.002288f, +0.003269f, +0.002499f, - +0.000388f, +0.001925f, +0.003285f, -0.001590f, +0.000032f, -0.000822f - }, - { - -0.001143f, -0.012226f, -0.004643f, -0.005751f, +0.000082f, +0.003342f, +0.000509f, +0.011522f, +0.005058f, -0.001379f, - +0.002294f, -0.006784f, -0.014374f, +0.013108f, -0.022786f, +0.007203f, +0.005728f, +0.014916f, +0.031267f, +0.033327f, - -0.003643f, +0.039339f, +0.028327f, -0.026063f, -0.043516f, +0.002659f, -0.020494f, -0.024119f, +0.053806f, +0.014183f, - -0.020996f, +0.009292f, -0.019679f, +0.031074f, +0.013591f, -0.013628f, -0.002287f, +0.016962f, +0.004891f, -0.011639f, - +0.007921f, +0.012662f, -0.004889f, +0.004835f, -0.006279f, -0.011411f, -0.002270f, +0.000605f, -0.000628f, -0.007003f, - -0.001203f, -0.002799f, -0.000664f, -0.010327f, -0.004109f, -0.002694f, +0.005576f, +0.008112f, +0.012515f, -0.002028f, - +0.005101f, -0.004791f, +0.006706f, +0.003391f, +0.000680f, +0.003331f, +0.004016f, -0.007554f, +0.003225f, +0.009572f, - +0.002282f, +0.001410f, +0.008664f, +0.003452f, +0.000444f, -0.000879f, -0.000414f, +0.003190f, +0.003799f, -0.002740f, - -0.000560f, -0.005095f, +0.002561f, +0.001483f, +0.000368f, -0.000645f, -0.002736f, -0.000269f, +0.000263f, +0.001918f, - +0.003127f, -0.002683f, +0.001822f, -0.000775f, -0.001910f, +0.000580f - }, - { - -0.046664f, +0.693915f, +0.040999f, -0.082664f, -0.010479f, -0.006600f, +0.017312f, -0.023838f, -0.005674f, +0.000708f, - +0.001006f, +0.009368f, +0.030186f, +0.023223f, +0.012801f, -0.017088f, +0.028933f, +0.000698f, +0.023466f, -0.013269f, - -0.002578f, +0.007055f, -0.001608f, +0.006562f, +0.001539f, +0.004404f, -0.001521f, +0.012321f, -0.015801f, +0.004588f, - +0.007732f, +0.009641f, -0.000747f, +0.001376f, +0.011661f, -0.002926f, +0.001006f, +0.008091f, +0.006644f, +0.006815f, - -0.007474f, +0.009582f, +0.012037f, +0.001060f, +0.001463f, -0.013710f, -0.006343f, +0.005115f, -0.000802f, +0.005776f, - -0.003535f, +0.009432f, -0.004336f, -0.001691f, -0.003902f, +0.004522f, -0.009195f, +0.002772f, +0.000744f, -0.007274f, - +0.001228f, -0.006543f, +0.005911f, +0.006803f, -0.008240f, -0.001472f, -0.004731f, +0.001349f, -0.000604f, -0.004550f, - +0.001281f, +0.001678f, -0.005195f, +0.002581f, +0.000899f, -0.000842f, -0.003334f, +0.002313f, +0.000385f, +0.000838f, - -0.001038f, -0.000381f, -0.002284f, +0.001353f, +0.001639f, +0.000715f, +0.001780f, +0.002928f, +0.001218f, +0.000375f, - +0.001119f, +0.000181f, -0.000462f, +0.000912f, -0.002765f, +0.002533f - }, - { - -0.006238f, +0.080201f, +0.013587f, -0.028706f, -0.001900f, -0.004732f, +0.017630f, +0.003256f, +0.008679f, +0.002865f, - +0.020862f, -0.009619f, -0.011125f, -0.038291f, +0.008298f, +0.001125f, -0.017094f, -0.011014f, +0.010730f, -0.001407f, - -0.031360f, +0.006285f, -0.016836f, +0.024634f, +0.016789f, -0.008891f, -0.001595f, +0.018508f, +0.024961f, -0.018645f, - +0.004691f, -0.002008f, +0.029550f, -0.011790f, +0.011041f, +0.002612f, +0.006801f, +0.008702f, +0.015044f, +0.012259f, - -0.000410f, -0.000207f, -0.001991f, +0.010137f, +0.016855f, +0.011433f, -0.005045f, +0.005453f, -0.004908f, +0.011055f, - +0.010953f, +0.003544f, +0.000046f, +0.006041f, +0.001784f, -0.002729f, -0.003502f, +0.002129f, +0.006952f, +0.004108f, - +0.012828f, -0.001324f, +0.000111f, -0.004828f, +0.002520f, +0.001249f, +0.000158f, +0.000918f, +0.006748f, -0.002604f, - +0.004094f, +0.003137f, +0.001803f, -0.002376f, -0.000415f, -0.002249f, -0.002080f, +0.000301f, +0.006782f, +0.001601f, - -0.004973f, -0.005589f, -0.002143f, +0.002290f, -0.001465f, -0.000778f, -0.000612f, -0.001207f, +0.001369f, -0.002593f, - +0.004465f, -0.000039f, +0.000439f, -0.000618f, -0.000929f, +0.000316f - }, - { - -0.061968f, -0.220343f, +0.004219f, +0.004002f, +0.002350f, -0.036013f, +0.029520f, +0.023684f, +0.006681f, +0.014196f, - -0.008956f, +0.009329f, +0.008169f, -0.019496f, -0.020923f, -0.008292f, -0.009487f, +0.004690f, -0.040812f, +0.008117f, - -0.004920f, +0.009499f, -0.004405f, -0.004643f, +0.008442f, -0.004150f, -0.000520f, -0.022692f, -0.015750f, +0.003951f, - +0.015957f, +0.021838f, +0.001522f, -0.003678f, +0.013578f, -0.001840f, -0.004456f, +0.009509f, +0.015416f, +0.013825f, - -0.003580f, +0.006976f, +0.002711f, -0.008189f, -0.002987f, -0.020883f, +0.012310f, -0.012009f, +0.000187f, -0.000173f, - +0.005740f, -0.005871f, +0.006372f, +0.008089f, +0.011154f, -0.011002f, -0.000678f, -0.002603f, +0.003757f, -0.001414f, - -0.002995f, +0.002478f, +0.000474f, +0.014277f, +0.001461f, +0.000964f, -0.001404f, +0.002138f, -0.003725f, +0.004483f, - -0.001063f, -0.003019f, +0.000964f, +0.001354f, +0.000353f, +0.000914f, +0.003654f, +0.001796f, +0.000989f, +0.000760f, - -0.004240f, +0.001086f, +0.000970f, -0.000623f, +0.000638f, +0.000578f, -0.000278f, -0.000275f, +0.002239f, +0.000930f, - +0.000655f, -0.000425f, -0.001077f, -0.001796f, -0.002249f, -0.000188f - }, - { - +0.002303f, +0.105350f, -0.003020f, +0.003445f, -0.003998f, +0.006918f, -0.007840f, +0.001159f, +0.010661f, -0.008160f, - +0.011962f, -0.003909f, +0.034684f, -0.017192f, +0.027229f, +0.021421f, -0.018700f, -0.002646f, -0.021127f, +0.031589f, - -0.017737f, -0.021806f, -0.019504f, -0.014615f, +0.004200f, -0.007213f, -0.003904f, +0.015999f, +0.013099f, -0.026416f, - +0.005560f, -0.015709f, +0.000462f, -0.018592f, +0.000833f, -0.017485f, -0.024311f, -0.008087f, +0.017881f, -0.007528f, - +0.000935f, -0.008781f, +0.011339f, -0.000507f, +0.003398f, -0.007619f, +0.001224f, -0.010923f, +0.002984f, +0.010780f, - +0.014491f, -0.002864f, +0.006496f, -0.003330f, -0.000799f, -0.008987f, -0.007956f, -0.002136f, -0.009498f, +0.003304f, - +0.008711f, -0.000558f, -0.005166f, +0.008706f, -0.007947f, -0.010845f, +0.002743f, -0.002513f, +0.001736f, +0.006674f, - -0.006825f, -0.003192f, -0.004068f, -0.007293f, +0.001903f, +0.007267f, -0.000342f, +0.003224f, +0.004001f, +0.001441f, - -0.001119f, +0.000671f, -0.004627f, +0.007374f, -0.002152f, +0.003318f, -0.001749f, -0.003862f, +0.001021f, +0.000285f, - -0.000487f, -0.000543f, -0.004953f, +0.003740f, -0.002304f, +0.000422f - }, - { - +0.009114f, -0.226441f, +0.026045f, -0.010244f, -0.002671f, +0.013474f, +0.002503f, -0.017852f, -0.016160f, -0.051039f, - +0.014409f, +0.032219f, -0.007331f, -0.032789f, -0.025307f, +0.026623f, -0.049113f, +0.005394f, -0.000817f, -0.012521f, - -0.009917f, -0.008656f, +0.021656f, -0.009171f, -0.013411f, -0.003866f, +0.010736f, +0.026520f, +0.018811f, -0.002490f, - -0.017679f, -0.003072f, +0.011560f, +0.002281f, +0.030431f, +0.022117f, +0.008153f, +0.010429f, -0.010482f, +0.024821f, - +0.023584f, +0.001507f, -0.001396f, -0.001113f, +0.000718f, +0.004785f, -0.004906f, -0.004242f, -0.005748f, +0.005165f, - -0.009208f, +0.007967f, -0.002793f, -0.012871f, +0.016304f, -0.003905f, -0.000982f, +0.017133f, +0.000168f, +0.008615f, - +0.000294f, +0.006409f, -0.001314f, +0.006667f, +0.000750f, -0.000745f, -0.001544f, +0.003274f, -0.002389f, +0.009576f, - -0.004816f, -0.000323f, -0.005097f, -0.002492f, +0.002071f, +0.001422f, +0.002439f, -0.002097f, -0.005834f, +0.003702f, - -0.006152f, -0.000142f, -0.001530f, -0.003049f, +0.001821f, +0.000793f, +0.000473f, +0.003831f, -0.001384f, +0.002361f, - +0.000030f, +0.002582f, -0.000379f, -0.001003f, +0.002170f, -0.000680f - }, - { - +0.007955f, -0.087025f, -0.010159f, +0.011287f, +0.008772f, -0.000693f, +0.001089f, +0.019768f, +0.024360f, +0.004867f, - -0.030829f, +0.010743f, +0.001315f, -0.054520f, +0.188336f, +0.012390f, +0.020471f, -0.002083f, +0.064372f, -0.066724f, - -0.004083f, +0.038787f, -0.012780f, +0.017455f, +0.029122f, -0.019346f, +0.010504f, +0.000484f, -0.027382f, +0.011953f, - +0.008982f, +0.005277f, -0.018512f, -0.013083f, +0.010220f, -0.017443f, +0.003557f, -0.013547f, -0.000259f, -0.009617f, - -0.009078f, +0.008776f, -0.006425f, +0.005980f, -0.005519f, +0.006012f, +0.000213f, +0.001447f, -0.003229f, -0.008353f, - +0.002086f, +0.009298f, -0.005550f, -0.005329f, -0.000876f, -0.005311f, +0.000918f, +0.002812f, +0.005866f, -0.000596f, - +0.000914f, +0.003481f, +0.001709f, -0.003844f, -0.000503f, +0.005309f, -0.013918f, +0.000240f, +0.005984f, +0.005363f, - -0.003731f, -0.005663f, -0.005625f, +0.001408f, +0.002465f, -0.002579f, +0.000591f, -0.010909f, +0.003148f, +0.001596f, - +0.000806f, +0.007035f, -0.000514f, -0.003026f, -0.001286f, +0.002857f, -0.002430f, -0.003939f, +0.001958f, +0.002656f, - -0.001058f, -0.002478f, -0.001250f, -0.002074f, -0.000008f, +0.001806f - }, - { - -0.036207f, -0.139168f, -0.021421f, +0.037524f, +0.000989f, +0.002617f, -0.016736f, -0.007470f, +0.001101f, -0.001288f, - +0.007484f, +0.009003f, +0.009959f, -0.031076f, -0.103883f, -0.000236f, +0.012184f, +0.003056f, -0.014790f, -0.015584f, - -0.021990f, +0.000553f, -0.001383f, +0.010369f, -0.006381f, -0.014346f, -0.003700f, -0.030551f, +0.037881f, +0.003119f, - -0.014725f, -0.010099f, +0.001423f, -0.030011f, +0.003997f, +0.016985f, +0.013099f, +0.003003f, +0.000439f, +0.014147f, - +0.009284f, -0.014370f, -0.006054f, -0.003515f, -0.006748f, +0.002279f, -0.009662f, +0.013840f, +0.013762f, +0.003391f, - -0.004019f, +0.015210f, -0.004647f, +0.009686f, -0.010618f, -0.001683f, -0.004041f, -0.008098f, +0.002657f, +0.002973f, - -0.006103f, -0.004377f, +0.003244f, -0.007776f, +0.007454f, +0.002272f, +0.002488f, +0.001822f, -0.007903f, -0.007600f, - +0.009224f, +0.002953f, -0.003242f, -0.006892f, -0.003395f, -0.002605f, -0.002088f, +0.003537f, -0.002010f, +0.002579f, - +0.000768f, -0.004863f, +0.001267f, -0.000126f, +0.001808f, +0.000635f, -0.001648f, +0.003214f, +0.001973f, +0.001674f, - +0.001567f, +0.002794f, -0.003269f, -0.003035f, +0.002392f, +0.000229f - } - }, - { - { - +0.002433f, +0.121055f, -0.013473f, -0.020738f, -0.002822f, +0.001202f, +0.007197f, -0.015797f, -0.002046f, -0.034778f, - -0.033457f, +0.015150f, +0.007008f, -0.037585f, -0.001702f, -0.000168f, -0.003493f, -0.021894f, +0.045062f, -0.006114f, - +0.041928f, +0.030791f, +0.016052f, -0.014826f, -0.004629f, +0.033317f, -0.015254f, +0.000474f, -0.013842f, -0.008272f, - -0.008880f, +0.010426f, -0.000533f, -0.019481f, +0.004940f, +0.030173f, +0.019560f, -0.008106f, +0.008431f, +0.007132f, - +0.001894f, -0.006558f, -0.002160f, -0.002678f, +0.026077f, +0.008484f, +0.002675f, -0.009089f, -0.005517f, -0.001622f, - +0.002529f, -0.001157f, -0.011107f, +0.008386f, +0.004087f, -0.000439f, -0.006121f, +0.004854f, +0.001255f, -0.000158f, - +0.003950f, +0.002739f, -0.003363f, -0.004312f, -0.005418f, -0.000370f, -0.010406f, -0.004184f, -0.002250f, +0.002252f, - +0.002684f, -0.006001f, -0.001954f, -0.005167f, -0.003587f, -0.002153f, -0.001455f, -0.000467f, +0.004630f, -0.005992f, - +0.002167f, +0.002464f, -0.000761f, +0.001531f, +0.004517f, -0.001846f, -0.001686f, +0.000335f, -0.002187f, -0.001267f, - -0.000776f, -0.000038f, +0.001811f, -0.001185f, -0.000493f, -0.000858f - }, - { - -0.045217f, -0.365939f, +0.064879f, -0.047686f, +0.006842f, +0.009902f, -0.021470f, -0.005967f, +0.005556f, +0.013736f, - -0.030353f, +0.010346f, -0.004541f, +0.005144f, -0.003895f, -0.077255f, +0.029512f, +0.021343f, -0.023697f, +0.025590f, - -0.010698f, +0.000764f, -0.025259f, +0.010439f, -0.017585f, +0.011941f, -0.012539f, -0.004251f, +0.007848f, +0.006093f, - -0.005206f, +0.006329f, -0.008845f, +0.010574f, +0.009072f, -0.022961f, -0.024019f, -0.014019f, +0.008762f, +0.015575f, - +0.003352f, +0.013520f, +0.000636f, +0.023022f, +0.000820f, -0.002172f, -0.004719f, -0.020394f, -0.003814f, -0.007610f, - -0.002651f, +0.014272f, +0.001068f, +0.005355f, +0.000218f, -0.000600f, -0.000948f, -0.004902f, -0.010101f, +0.000223f, - +0.002722f, +0.003530f, +0.001231f, -0.004817f, -0.000060f, -0.000742f, -0.005135f, -0.000995f, +0.008642f, -0.003262f, - -0.002448f, +0.000688f, -0.000179f, -0.006023f, -0.005305f, +0.005966f, -0.003777f, +0.001532f, +0.001061f, -0.000028f, - +0.002414f, +0.000266f, +0.000168f, +0.003218f, +0.001268f, +0.001405f, +0.004352f, +0.001768f, -0.000501f, -0.000468f, - -0.000909f, -0.002493f, +0.001364f, +0.001937f, -0.001938f, -0.000231f - }, - { - -0.009344f, +0.088853f, +0.069880f, +0.033132f, -0.001915f, +0.008470f, -0.006395f, +0.028728f, -0.003481f, +0.012660f, - +0.021804f, -0.002812f, -0.022060f, +0.027432f, +0.044472f, +0.015021f, +0.004914f, +0.002478f, -0.026164f, -0.019702f, - -0.007182f, -0.007975f, +0.003596f, +0.028146f, -0.017163f, +0.000450f, -0.015442f, +0.020636f, -0.001104f, +0.017478f, - -0.015870f, +0.016140f, -0.004308f, -0.025607f, -0.007350f, +0.006949f, -0.003047f, -0.001492f, +0.014912f, +0.002744f, - +0.016725f, +0.007264f, -0.009471f, +0.002276f, -0.008863f, -0.007450f, +0.014382f, -0.005188f, -0.003480f, +0.005652f, - +0.000107f, +0.013928f, +0.001569f, -0.000538f, -0.004053f, +0.004655f, +0.007122f, +0.001383f, -0.002596f, +0.006540f, - +0.000720f, -0.000428f, -0.001200f, +0.000555f, +0.008483f, +0.000096f, +0.001091f, -0.003849f, -0.001548f, -0.001563f, - -0.005145f, +0.000641f, +0.002834f, +0.002878f, -0.003243f, +0.003245f, +0.001011f, +0.004602f, -0.000887f, -0.000044f, - +0.000324f, -0.000754f, +0.001286f, +0.002115f, +0.001460f, -0.001754f, -0.000644f, +0.002686f, +0.001991f, -0.001815f, - +0.002432f, -0.002076f, -0.000466f, +0.001717f, -0.000531f, -0.000250f - }, - { - -0.003370f, +0.013786f, +0.008619f, +0.003520f, +0.001654f, +0.000470f, +0.001184f, -0.002847f, -0.003218f, -0.005858f, - -0.000729f, +0.001894f, +0.013829f, -0.028972f, -0.021816f, +0.021297f, +0.023444f, -0.005424f, +0.015097f, +0.004199f, - +0.022442f, -0.021545f, +0.000392f, -0.007632f, -0.010852f, -0.009131f, +0.009921f, -0.018244f, -0.006806f, -0.032562f, - -0.007471f, -0.004256f, -0.026905f, -0.001474f, -0.006495f, +0.015057f, -0.017137f, -0.015003f, +0.024047f, -0.000205f, - -0.007130f, +0.010542f, -0.021235f, +0.007773f, -0.011146f, -0.003874f, -0.008936f, +0.005935f, -0.001854f, -0.008313f, - -0.001512f, +0.006788f, +0.000471f, +0.004808f, -0.007677f, +0.000751f, -0.002537f, +0.005158f, +0.002522f, -0.002033f, - +0.006262f, +0.006388f, -0.000683f, +0.005049f, -0.000867f, +0.001065f, +0.009632f, +0.002616f, -0.003714f, +0.003539f, - +0.000271f, +0.000650f, -0.004480f, -0.001716f, +0.000304f, +0.001820f, +0.002346f, -0.004183f, +0.002359f, +0.001552f, - -0.000339f, +0.003378f, +0.001847f, -0.001962f, +0.000456f, -0.003272f, +0.003017f, -0.001210f, -0.001130f, +0.000978f, - +0.000243f, +0.001856f, +0.001193f, -0.000390f, +0.000128f, -0.002672f - }, - { - +0.096413f, -0.009619f, -0.037930f, -0.065215f, -0.002467f, +0.004987f, -0.013545f, +0.004606f, -0.007153f, -0.013424f, - -0.038605f, +0.028885f, +0.010692f, +0.019035f, -0.003134f, -0.022522f, +0.006030f, -0.031629f, -0.009836f, +0.002995f, - +0.004538f, -0.017715f, +0.008901f, -0.034184f, +0.012831f, -0.017914f, -0.006300f, +0.005298f, +0.008581f, -0.002929f, - +0.012496f, -0.008620f, -0.005299f, -0.007461f, +0.001978f, -0.009953f, -0.059683f, +0.005154f, +0.010456f, -0.032611f, - +0.030136f, -0.006656f, +0.028542f, -0.015816f, +0.004379f, -0.003217f, -0.005237f, +0.000454f, +0.001635f, +0.013341f, - +0.001186f, +0.006959f, +0.002256f, +0.001496f, +0.010410f, -0.006819f, +0.003527f, -0.000804f, +0.005361f, +0.003979f, - -0.004076f, -0.003324f, +0.001457f, +0.002139f, +0.006155f, -0.000467f, -0.005195f, -0.003384f, -0.001762f, -0.002084f, - +0.003309f, -0.002998f, -0.001651f, +0.001883f, -0.002350f, -0.001616f, +0.004086f, -0.001972f, +0.002625f, +0.000914f, - -0.001750f, +0.001001f, -0.000175f, -0.001285f, -0.002023f, -0.001541f, +0.003042f, -0.000334f, -0.001232f, +0.000738f, - +0.000552f, -0.000331f, -0.001975f, -0.001637f, +0.000841f, -0.000765f - }, - { - -0.002893f, +0.002103f, -0.003478f, +0.002068f, -0.007656f, +0.000960f, -0.000023f, +0.000290f, +0.005477f, +0.002166f, - +0.002086f, -0.018356f, +0.005618f, -0.022756f, -0.058210f, +0.011766f, -0.024590f, -0.006755f, -0.012084f, +0.050871f, - -0.001486f, -0.014704f, +0.015350f, +0.012929f, -0.031723f, -0.031321f, -0.003466f, -0.038229f, -0.015214f, -0.027132f, - -0.012781f, +0.016965f, +0.020643f, +0.023409f, -0.003575f, +0.010686f, -0.010597f, -0.008470f, +0.007613f, +0.009043f, - +0.007561f, -0.008351f, -0.006234f, +0.001234f, +0.001596f, +0.000783f, -0.005729f, +0.004186f, +0.003848f, -0.002199f, - -0.002800f, +0.004656f, -0.004014f, +0.003315f, +0.000664f, -0.002241f, -0.004472f, -0.005009f, -0.004494f, -0.001530f, - +0.002008f, -0.001505f, +0.002028f, -0.002023f, -0.000100f, -0.002504f, +0.000398f, +0.003234f, -0.005852f, -0.001031f, - +0.010072f, -0.002002f, -0.002128f, +0.001093f, +0.000851f, -0.003232f, +0.001372f, -0.002237f, -0.000824f, -0.002863f, - +0.001726f, +0.002052f, +0.002841f, +0.001675f, +0.001977f, +0.003294f, -0.000247f, -0.002262f, +0.000961f, +0.000997f, - -0.000366f, -0.002045f, +0.001935f, +0.000357f, +0.001030f, -0.000582f - }, - { - +0.139701f, -0.219260f, -0.052228f, -0.047600f, -0.001152f, -0.009719f, +0.010814f, +0.010890f, -0.029710f, +0.008872f, - -0.012711f, +0.072025f, +0.008137f, +0.021507f, -0.031317f, +0.000475f, +0.009456f, +0.033552f, +0.004637f, +0.021765f, - -0.005172f, -0.022276f, +0.023784f, -0.001378f, +0.007954f, -0.006385f, -0.003079f, -0.018505f, +0.021806f, -0.019627f, - +0.001661f, +0.021690f, -0.007367f, -0.002292f, +0.010823f, +0.002196f, -0.005673f, +0.007359f, +0.003718f, -0.005849f, - +0.004234f, +0.004597f, +0.005638f, +0.002281f, +0.011111f, +0.007285f, -0.021032f, +0.010238f, -0.002670f, -0.003245f, - +0.008344f, +0.009519f, +0.008941f, -0.002534f, +0.006270f, +0.006845f, +0.000878f, +0.005813f, -0.002156f, -0.004585f, - -0.000867f, -0.009430f, +0.010829f, -0.006015f, +0.002353f, -0.000431f, +0.002441f, -0.003822f, +0.001100f, +0.003059f, - -0.000562f, -0.000387f, +0.001353f, -0.000901f, +0.000352f, -0.007968f, -0.001202f, -0.001766f, -0.001589f, -0.003799f, - -0.000299f, -0.001830f, +0.002706f, -0.002378f, -0.005119f, +0.001279f, +0.003890f, +0.002553f, +0.001032f, +0.002273f, - +0.002106f, +0.000736f, +0.002695f, -0.003977f, +0.000915f, -0.000347f - }, - { - -0.002675f, +0.002002f, -0.006820f, -0.006356f, -0.003494f, +0.002467f, +0.003960f, -0.002728f, +0.024194f, -0.004657f, - -0.005451f, +0.004792f, -0.018441f, +0.028766f, -0.046597f, +0.011334f, +0.006117f, +0.033409f, +0.029735f, +0.015435f, - +0.007860f, +0.052319f, +0.011196f, -0.033841f, -0.025540f, -0.020793f, -0.010931f, +0.009051f, +0.032844f, +0.009436f, - +0.015069f, -0.014267f, -0.015512f, +0.029578f, +0.005075f, +0.005895f, +0.000194f, +0.012138f, +0.007683f, -0.003801f, - -0.001344f, +0.001596f, +0.006214f, -0.001032f, +0.001956f, -0.013978f, +0.003448f, -0.011334f, -0.012845f, +0.000852f, - +0.002764f, -0.002133f, -0.011455f, +0.002215f, -0.010707f, +0.005607f, +0.005840f, +0.007024f, +0.009579f, +0.004436f, - -0.003582f, +0.004573f, +0.001902f, -0.001811f, +0.001938f, +0.002704f, +0.000978f, -0.004473f, +0.006210f, +0.007191f, - +0.001178f, +0.004309f, +0.004890f, +0.004305f, +0.001047f, -0.000594f, +0.000080f, +0.003671f, +0.001212f, +0.000928f, - -0.001138f, -0.002137f, +0.001617f, -0.000197f, +0.000374f, -0.001463f, +0.000237f, -0.002541f, +0.002690f, +0.003089f, - -0.000818f, -0.001501f, +0.001066f, -0.002535f, -0.001180f, +0.002449f - }, - { - +0.099595f, +0.608834f, -0.071879f, -0.041209f, -0.016350f, +0.000057f, -0.007132f, -0.014202f, -0.001579f, -0.007666f, - +0.004429f, -0.000809f, +0.022626f, +0.009801f, +0.019326f, +0.007777f, +0.026811f, -0.016541f, +0.023288f, -0.011772f, - -0.006793f, +0.015341f, +0.009513f, +0.006736f, +0.004218f, +0.001180f, -0.003029f, -0.003342f, -0.003045f, -0.006237f, - +0.023581f, +0.008044f, -0.011374f, +0.005754f, +0.010640f, -0.001843f, -0.007581f, +0.009955f, +0.016258f, +0.003549f, - -0.000348f, -0.002658f, +0.008221f, +0.007825f, -0.011497f, -0.003657f, +0.000708f, -0.004953f, -0.008128f, +0.006676f, - +0.015328f, -0.005956f, -0.001554f, -0.002525f, -0.005925f, -0.003981f, -0.001887f, +0.002820f, -0.003340f, -0.001147f, - +0.000590f, -0.004525f, -0.001423f, +0.005724f, -0.009830f, -0.000336f, +0.001064f, -0.005075f, +0.000359f, -0.000137f, - +0.001133f, -0.000824f, -0.003104f, +0.000674f, +0.002489f, -0.006319f, +0.001231f, +0.004196f, -0.000530f, +0.001512f, - -0.003631f, +0.000277f, -0.001648f, +0.000598f, -0.000710f, +0.002167f, +0.003004f, +0.002341f, +0.001634f, -0.001934f, - +0.001623f, +0.000250f, -0.000970f, -0.001314f, -0.000920f, +0.003006f - }, - { - +0.004191f, +0.127155f, -0.017650f, -0.022846f, -0.009972f, +0.021504f, -0.008318f, +0.019605f, -0.011552f, +0.005786f, - -0.001207f, -0.004545f, -0.009870f, -0.022544f, -0.010778f, -0.015302f, -0.009173f, -0.006266f, +0.036817f, -0.036749f, - -0.052821f, +0.004886f, +0.005356f, +0.028371f, +0.006067f, -0.002956f, -0.000032f, +0.013233f, +0.015181f, -0.006864f, - -0.018692f, +0.019957f, +0.011663f, -0.003649f, +0.010896f, -0.000800f, +0.005123f, +0.023601f, -0.011809f, +0.016443f, - +0.001410f, +0.005780f, +0.001340f, +0.016665f, +0.016426f, -0.000840f, +0.013139f, -0.005526f, +0.007988f, +0.011464f, - +0.001691f, +0.001668f, +0.012882f, -0.005728f, -0.001071f, +0.001114f, -0.002968f, -0.001108f, +0.013042f, +0.003265f, - -0.000142f, +0.004117f, +0.005173f, -0.003508f, +0.003953f, -0.003912f, +0.005395f, -0.001022f, +0.004417f, +0.000085f, - +0.007869f, +0.000076f, -0.001274f, -0.002538f, -0.000962f, -0.001492f, -0.000582f, +0.000947f, +0.003610f, -0.000668f, - -0.002254f, -0.006445f, +0.000779f, -0.002098f, +0.003891f, -0.003306f, +0.000558f, -0.001470f, -0.000900f, +0.001676f, - +0.001136f, +0.001127f, -0.000488f, +0.001358f, -0.000624f, -0.001233f - }, - { - +0.063959f, -0.299295f, -0.057032f, -0.003382f, -0.025401f, +0.073342f, -0.002544f, +0.017266f, -0.007645f, +0.020039f, - -0.010114f, +0.021256f, -0.015712f, +0.022763f, -0.034941f, -0.001305f, -0.002070f, -0.003519f, -0.024054f, +0.006334f, - -0.007346f, -0.011219f, +0.013320f, -0.010715f, +0.013933f, -0.014882f, -0.012163f, -0.007255f, -0.022225f, +0.009748f, - +0.014927f, +0.016794f, +0.000612f, +0.009293f, +0.007977f, +0.002622f, -0.000927f, +0.005123f, +0.007940f, +0.017920f, - +0.009870f, -0.007199f, +0.002022f, -0.012250f, -0.003826f, -0.017512f, +0.011895f, -0.005821f, -0.005779f, +0.006513f, - -0.000031f, -0.002874f, +0.004186f, +0.014810f, -0.000180f, -0.000795f, -0.007848f, +0.005362f, +0.006406f, -0.010806f, - -0.003709f, +0.002393f, +0.005026f, +0.006895f, +0.000518f, +0.006964f, -0.004359f, -0.000365f, +0.000021f, +0.003712f, - -0.001490f, +0.000545f, -0.002626f, +0.006397f, -0.003364f, +0.000221f, +0.004182f, -0.002153f, +0.003778f, -0.001033f, - -0.002412f, +0.000772f, +0.001469f, +0.000185f, -0.000758f, -0.000247f, +0.000480f, -0.000483f, +0.002160f, +0.000786f, - -0.001208f, -0.000670f, -0.002154f, -0.001257f, -0.001276f, -0.000659f - }, - { - -0.003639f, +0.093278f, +0.016361f, +0.002656f, +0.007915f, -0.006862f, -0.001654f, +0.005358f, +0.003326f, -0.003225f, - +0.003773f, -0.005914f, +0.036060f, -0.035621f, +0.022327f, +0.005151f, -0.000686f, +0.016159f, -0.006811f, +0.014975f, - -0.027232f, -0.008303f, +0.020865f, -0.012833f, -0.025216f, +0.001746f, +0.008068f, -0.007090f, -0.006877f, +0.009668f, - -0.019655f, +0.009607f, -0.000396f, -0.020459f, -0.006853f, -0.015941f, -0.020490f, +0.006713f, +0.000197f, +0.002969f, - -0.016160f, -0.005846f, +0.014907f, +0.006060f, -0.008195f, +0.004132f, -0.014109f, +0.011588f, -0.001318f, -0.002840f, - +0.010435f, +0.001652f, +0.008880f, -0.007330f, +0.002187f, -0.008081f, -0.015739f, -0.004460f, -0.003015f, +0.001327f, - +0.009670f, -0.001134f, +0.001363f, +0.001012f, -0.009110f, -0.002899f, -0.002119f, -0.000656f, +0.005500f, -0.002822f, - -0.001587f, -0.005009f, -0.002673f, -0.005238f, +0.003725f, +0.002653f, +0.000030f, +0.004224f, +0.004801f, +0.000573f, - -0.000326f, +0.001800f, -0.000849f, +0.002458f, +0.001700f, +0.000440f, -0.000329f, -0.002562f, -0.000216f, -0.000688f, - -0.000429f, -0.000674f, -0.000282f, -0.001627f, -0.000846f, +0.001829f - }, - { - -0.061141f, -0.154771f, +0.043098f, -0.012086f, +0.008883f, -0.029669f, -0.015102f, -0.008298f, +0.007394f, -0.052166f, - +0.025027f, +0.004129f, +0.005813f, -0.028653f, -0.033110f, +0.006225f, -0.000649f, -0.010920f, -0.000019f, +0.011531f, - -0.012746f, -0.014773f, +0.009414f, -0.002854f, -0.014605f, -0.001357f, +0.003487f, +0.026995f, +0.021340f, -0.007457f, - -0.023517f, +0.016591f, +0.017130f, -0.013649f, +0.042546f, +0.024566f, +0.001767f, +0.005244f, +0.001341f, +0.012801f, - +0.023575f, +0.018293f, -0.012885f, +0.004937f, -0.025449f, +0.012827f, +0.000388f, -0.003832f, -0.003645f, +0.000786f, - +0.007230f, -0.001976f, -0.000648f, -0.006079f, +0.004917f, +0.002955f, -0.000297f, +0.011665f, +0.000873f, +0.014560f, - -0.002030f, +0.000359f, +0.004917f, +0.005626f, -0.002416f, +0.001538f, +0.001939f, +0.000879f, +0.004432f, +0.002584f, - -0.002852f, -0.001712f, -0.003021f, -0.001939f, -0.000364f, +0.001333f, +0.001685f, -0.001660f, -0.002360f, +0.001924f, - -0.006576f, -0.000185f, +0.001401f, -0.001638f, +0.000877f, -0.000620f, -0.000140f, +0.000150f, +0.004968f, -0.001492f, - +0.001874f, +0.001646f, +0.000579f, -0.001059f, +0.000477f, +0.001379f - }, - { - -0.005396f, -0.107631f, +0.015827f, +0.013482f, +0.014785f, +0.001825f, +0.016096f, +0.001000f, +0.031002f, -0.004400f, - -0.019081f, +0.008866f, +0.012965f, +0.095299f, -0.055668f, +0.040833f, +0.017112f, -0.007361f, +0.038707f, +0.004023f, - -0.031544f, +0.031128f, -0.017469f, +0.024577f, +0.001729f, +0.005575f, +0.026603f, -0.007132f, -0.026109f, +0.003818f, - +0.013596f, -0.008434f, -0.020254f, +0.001408f, +0.002831f, +0.000369f, -0.022964f, +0.004723f, -0.001693f, -0.022571f, - +0.010633f, -0.011724f, +0.000725f, +0.016880f, -0.004553f, -0.004651f, +0.002616f, +0.002215f, -0.008424f, -0.008893f, - +0.011149f, -0.002697f, +0.000700f, -0.002500f, -0.007369f, -0.001182f, -0.000148f, +0.006523f, +0.005194f, -0.006021f, - +0.007367f, -0.002080f, +0.007461f, -0.010420f, +0.001759f, -0.003611f, -0.001698f, +0.001226f, +0.002686f, +0.001492f, - +0.002198f, -0.008701f, -0.001822f, +0.000258f, -0.001625f, +0.002155f, -0.005272f, -0.002146f, -0.003238f, +0.002013f, - -0.001311f, +0.004442f, +0.001833f, -0.001318f, -0.002095f, +0.001242f, -0.002811f, -0.002759f, +0.002615f, +0.002180f, - +0.002888f, -0.002872f, -0.005173f, -0.000834f, +0.000300f, -0.000271f - }, - { - +0.003207f, -0.186630f, -0.028887f, +0.040167f, +0.003521f, -0.035307f, -0.009164f, +0.011533f, +0.000667f, -0.010377f, - +0.043270f, -0.027696f, +0.021870f, -0.050737f, -0.074583f, +0.011207f, -0.000523f, -0.003509f, -0.029021f, -0.007453f, - -0.011250f, -0.003366f, -0.009792f, +0.022632f, -0.005322f, -0.030848f, +0.011812f, -0.021223f, +0.021147f, -0.004831f, - +0.010424f, -0.004109f, -0.006134f, -0.029806f, -0.013724f, +0.036249f, +0.016551f, -0.006210f, +0.001088f, +0.021888f, - +0.005984f, -0.017735f, -0.001061f, -0.013699f, +0.007240f, -0.013593f, -0.002947f, +0.011560f, +0.020662f, -0.001268f, - +0.000300f, +0.013192f, -0.009847f, +0.004353f, -0.000748f, -0.007181f, -0.012301f, +0.004910f, -0.002601f, +0.008070f, - -0.007505f, -0.008165f, -0.001706f, -0.003849f, +0.006523f, -0.001166f, -0.002508f, +0.003178f, +0.000382f, -0.005977f, - -0.001583f, +0.011794f, -0.004538f, -0.008937f, -0.003113f, -0.007102f, +0.003019f, +0.004670f, -0.005712f, +0.000070f, - +0.003949f, -0.002324f, +0.001739f, -0.000483f, +0.000702f, +0.001751f, -0.000352f, +0.004908f, -0.000453f, +0.004213f, - +0.000109f, +0.002693f, -0.001824f, -0.003973f, +0.001873f, -0.000353f - } - }, - { - { - -0.002255f, +0.087084f, -0.038704f, +0.001192f, +0.015206f, +0.001260f, +0.007085f, -0.008645f, +0.006490f, -0.001134f, - +0.003358f, +0.017498f, +0.002727f, -0.013843f, +0.016106f, +0.007269f, +0.028791f, -0.021759f, +0.025439f, -0.001612f, - +0.046497f, +0.021941f, -0.008326f, -0.036210f, -0.016351f, +0.028458f, +0.002697f, +0.008928f, -0.012538f, -0.021626f, - -0.000712f, +0.040835f, +0.018055f, +0.007951f, +0.008846f, +0.009551f, -0.004374f, -0.004632f, +0.009003f, -0.001176f, - -0.004871f, -0.007466f, +0.007601f, +0.001084f, +0.012991f, -0.008418f, +0.004653f, +0.009232f, +0.004289f, -0.002201f, - -0.004076f, -0.003137f, -0.015376f, +0.003226f, -0.004575f, -0.002925f, -0.002619f, +0.004426f, +0.001221f, -0.005413f, - +0.000564f, +0.001534f, -0.005305f, -0.004783f, -0.002854f, +0.000082f, -0.003656f, +0.004690f, -0.000040f, -0.003300f, - -0.001077f, -0.001880f, +0.004142f, +0.002532f, +0.004384f, +0.001236f, -0.000699f, +0.003130f, +0.007123f, -0.004119f, - +0.002092f, +0.003325f, -0.002169f, -0.000918f, +0.003744f, -0.000128f, -0.001739f, -0.002431f, -0.004242f, -0.002214f, - -0.001260f, -0.002096f, +0.001879f, +0.000122f, -0.000920f, -0.000661f - }, - { - +0.040108f, -0.362267f, -0.026417f, -0.027787f, +0.016967f, +0.000669f, -0.010455f, -0.000178f, -0.000510f, +0.038242f, - +0.009060f, +0.035985f, -0.011885f, +0.015683f, +0.018902f, -0.071172f, +0.006450f, +0.009952f, -0.014686f, +0.018001f, - -0.022807f, -0.011514f, -0.026146f, +0.010631f, -0.023531f, +0.023664f, +0.019778f, +0.011790f, +0.001514f, +0.005510f, - +0.007974f, +0.011358f, -0.023720f, +0.013181f, +0.012028f, -0.015463f, -0.010529f, -0.010790f, +0.015685f, +0.021143f, - +0.002161f, +0.004075f, -0.023058f, +0.008069f, -0.006553f, -0.010575f, +0.002374f, -0.009257f, +0.007648f, +0.001724f, - -0.004160f, -0.001950f, -0.010566f, -0.000968f, -0.003335f, +0.003937f, -0.002577f, -0.008251f, -0.005695f, +0.004592f, - +0.002406f, -0.007992f, -0.005391f, +0.000895f, +0.006363f, +0.000489f, +0.002482f, +0.003657f, +0.006537f, -0.004039f, - +0.000459f, +0.003323f, +0.006341f, +0.000366f, -0.004892f, +0.003307f, -0.004347f, +0.004849f, +0.001778f, -0.001016f, - -0.000571f, +0.001143f, +0.001566f, -0.000519f, -0.003240f, -0.000590f, +0.003952f, -0.000029f, -0.000806f, +0.003372f, - +0.002513f, -0.001679f, +0.001242f, +0.000629f, -0.002743f, -0.000621f - }, - { - +0.010233f, -0.041850f, -0.037912f, +0.046770f, +0.005483f, +0.005751f, -0.010329f, +0.013646f, -0.014651f, +0.008545f, - +0.005308f, +0.001649f, +0.007404f, +0.018115f, +0.022878f, -0.001313f, -0.011614f, +0.012347f, -0.000414f, -0.002952f, - +0.003650f, +0.019506f, +0.029851f, +0.050963f, -0.007518f, -0.004917f, -0.028218f, +0.012326f, -0.025089f, -0.005424f, - -0.029138f, -0.006400f, -0.020494f, -0.023491f, -0.003782f, +0.005425f, -0.007421f, -0.002155f, +0.017105f, -0.004032f, - +0.001635f, +0.001796f, -0.000308f, +0.006645f, -0.010987f, -0.009420f, +0.013899f, -0.001927f, +0.000685f, -0.000228f, - -0.006413f, -0.000294f, -0.008302f, -0.002490f, -0.007029f, +0.005200f, +0.007069f, -0.000373f, -0.011322f, -0.001137f, - +0.002354f, -0.001608f, -0.001932f, +0.000280f, +0.003816f, -0.007026f, +0.004197f, +0.002362f, +0.001101f, -0.002676f, - -0.004841f, +0.000685f, +0.000467f, +0.001074f, -0.005567f, +0.000401f, -0.003032f, +0.000609f, -0.003914f, -0.003022f, - -0.004320f, -0.003929f, +0.000559f, +0.002085f, +0.004522f, +0.002103f, +0.000099f, +0.002490f, +0.003418f, -0.000485f, - +0.001972f, -0.000535f, +0.000276f, -0.000635f, -0.001405f, +0.000269f - }, - { - +0.004401f, -0.001463f, -0.011766f, -0.008092f, -0.006896f, -0.001139f, +0.001028f, -0.006351f, -0.007792f, -0.007768f, - -0.005728f, +0.006842f, +0.033454f, -0.033100f, -0.003929f, +0.021075f, -0.027521f, -0.011691f, +0.024171f, -0.009492f, - -0.002533f, -0.016093f, +0.014288f, -0.019934f, -0.020753f, -0.005788f, +0.008829f, -0.033409f, +0.000535f, -0.006810f, - +0.005776f, -0.020733f, -0.048180f, +0.000110f, -0.003865f, +0.000547f, -0.026862f, -0.017543f, +0.023474f, +0.003753f, - -0.005674f, +0.014987f, -0.011824f, +0.011820f, -0.007691f, +0.004723f, -0.012567f, -0.006922f, -0.003434f, +0.001385f, - -0.008306f, +0.005924f, -0.002299f, +0.002970f, -0.001675f, +0.002183f, -0.004861f, -0.000045f, -0.002759f, -0.007993f, - +0.001466f, -0.001887f, -0.002906f, +0.004890f, -0.004186f, +0.000556f, +0.007792f, +0.002421f, -0.006822f, -0.001427f, - +0.004892f, +0.004773f, -0.004198f, +0.001590f, +0.000895f, -0.001487f, +0.000343f, -0.004211f, +0.001697f, +0.001052f, - -0.000812f, +0.001549f, +0.000518f, -0.001245f, +0.001577f, -0.000823f, +0.002324f, -0.001726f, -0.000340f, +0.001760f, - -0.000690f, +0.001305f, +0.001249f, -0.001518f, -0.000040f, -0.001263f - }, - { - -0.106765f, -0.190532f, +0.056317f, -0.025935f, +0.008970f, -0.002112f, -0.014553f, +0.014761f, -0.019721f, -0.005159f, - -0.014189f, +0.042562f, +0.008408f, +0.018274f, +0.007908f, -0.013497f, -0.016990f, -0.021128f, +0.008771f, -0.002799f, - +0.016855f, -0.008071f, +0.018828f, -0.023176f, +0.031231f, -0.001896f, -0.005833f, -0.003325f, +0.007378f, +0.007299f, - +0.002043f, -0.014795f, +0.000185f, -0.003231f, +0.008367f, -0.005498f, -0.019306f, +0.024706f, +0.001630f, -0.039155f, - +0.017299f, -0.012576f, +0.022249f, -0.008364f, +0.013079f, -0.003267f, -0.007205f, +0.005485f, +0.000885f, +0.006248f, - +0.003387f, +0.003986f, -0.002711f, +0.000044f, +0.004818f, -0.010195f, +0.006580f, +0.005002f, +0.001433f, +0.003712f, - +0.000005f, +0.001228f, +0.004071f, +0.005458f, +0.005869f, -0.005494f, -0.001197f, +0.004500f, +0.003584f, +0.002785f, - +0.006877f, -0.001867f, -0.000494f, -0.000779f, -0.004125f, -0.002469f, +0.001866f, -0.001307f, +0.003936f, +0.001453f, - -0.001675f, -0.000114f, -0.000071f, -0.003273f, -0.000326f, +0.001727f, +0.004048f, +0.001594f, -0.000346f, -0.000757f, - +0.000436f, +0.001345f, -0.000934f, +0.000103f, +0.003239f, -0.001501f - }, - { - +0.001334f, +0.017947f, +0.002045f, +0.012172f, -0.001941f, -0.000276f, +0.000855f, -0.003941f, -0.004149f, +0.002178f, - +0.009169f, -0.018302f, +0.003541f, -0.027545f, -0.044321f, +0.037427f, +0.007704f, +0.008907f, +0.004823f, +0.058873f, - -0.009992f, -0.047621f, -0.028431f, -0.012546f, -0.022620f, -0.018948f, +0.002631f, -0.010561f, +0.006955f, -0.006037f, - +0.002824f, +0.014408f, +0.010789f, +0.012786f, -0.006942f, +0.013453f, -0.007687f, -0.015910f, -0.012811f, +0.004498f, - +0.015074f, -0.011487f, -0.003594f, -0.006958f, -0.011816f, -0.002326f, -0.007613f, +0.011175f, +0.007551f, -0.007667f, - -0.010702f, -0.001778f, -0.011181f, -0.002303f, -0.010083f, -0.006754f, +0.002064f, -0.002756f, +0.002714f, +0.001734f, - -0.004280f, -0.004055f, -0.004286f, -0.007287f, -0.000598f, -0.006606f, +0.000536f, +0.005334f, -0.008704f, -0.004533f, - +0.015270f, +0.003758f, -0.001586f, -0.001199f, -0.002294f, -0.005248f, -0.003369f, -0.002870f, +0.000608f, -0.000830f, - +0.003907f, +0.002318f, +0.000481f, +0.000228f, -0.001398f, +0.001719f, +0.001328f, -0.001087f, +0.001369f, +0.001222f, - -0.000918f, -0.002863f, +0.000177f, -0.001849f, -0.000693f, -0.000778f - }, - { - -0.128047f, -0.470872f, +0.071798f, -0.002606f, +0.016254f, -0.001851f, +0.001335f, -0.010738f, -0.042396f, +0.029240f, - +0.010908f, +0.056075f, -0.027577f, +0.016816f, +0.002149f, -0.000029f, -0.006964f, +0.007228f, -0.029680f, +0.026746f, - -0.001666f, -0.018862f, +0.013581f, -0.007372f, +0.004560f, -0.008676f, -0.000748f, -0.015399f, +0.022521f, -0.012810f, - -0.005049f, +0.011249f, -0.000687f, -0.000937f, +0.009888f, +0.018437f, -0.014785f, -0.009343f, +0.001675f, +0.007074f, - +0.011183f, -0.002100f, +0.002330f, +0.002466f, +0.004241f, -0.003516f, -0.017183f, +0.009977f, -0.012778f, -0.004938f, - +0.001855f, +0.013656f, +0.011518f, -0.009140f, -0.001410f, +0.003657f, -0.001049f, +0.003447f, -0.000487f, -0.004674f, - +0.001438f, -0.002531f, +0.013798f, -0.002890f, +0.011845f, +0.005423f, +0.005098f, -0.003108f, +0.000511f, -0.000918f, - -0.001631f, +0.005961f, +0.003511f, -0.005648f, +0.001196f, +0.000361f, +0.001629f, -0.003972f, +0.001124f, -0.002326f, - -0.002977f, -0.000698f, +0.000048f, -0.003864f, -0.003730f, +0.001925f, +0.001332f, -0.000323f, +0.000560f, +0.001104f, - -0.000133f, -0.003717f, -0.001644f, -0.001759f, +0.003480f, +0.002106f - }, - { - +0.000773f, +0.025730f, +0.004351f, +0.001038f, -0.003319f, -0.000132f, +0.003513f, -0.001876f, +0.034198f, -0.001134f, - -0.006513f, +0.011942f, +0.002578f, +0.038622f, -0.026596f, +0.024126f, -0.036476f, +0.012628f, +0.006984f, +0.003478f, - +0.019042f, +0.016917f, -0.014631f, -0.024358f, -0.000736f, +0.014741f, +0.024604f, +0.026640f, +0.008834f, -0.007160f, - +0.029247f, +0.002006f, +0.002959f, +0.015911f, -0.012927f, +0.012571f, -0.001909f, +0.004339f, +0.001654f, -0.001135f, - -0.001264f, +0.002799f, +0.012437f, +0.000500f, +0.007867f, -0.012293f, -0.006313f, -0.009820f, -0.012366f, -0.007775f, - -0.005874f, -0.000712f, -0.007359f, +0.001319f, -0.000805f, +0.014460f, -0.000160f, +0.000602f, +0.003243f, -0.000769f, - -0.004966f, -0.001302f, -0.009626f, -0.005622f, -0.000873f, -0.002664f, -0.002137f, -0.003362f, +0.001569f, +0.003029f, - -0.004488f, -0.002700f, -0.001527f, -0.001534f, +0.002720f, +0.002442f, -0.000568f, +0.003906f, +0.001788f, +0.001631f, - -0.001267f, -0.000248f, +0.002124f, -0.000791f, -0.001622f, -0.002436f, +0.000409f, -0.001322f, +0.002113f, +0.000810f, - -0.000513f, -0.000216f, +0.001350f, -0.001902f, -0.000258f, +0.003026f - }, - { - -0.138639f, +0.431837f, +0.078122f, +0.000877f, -0.021532f, +0.002148f, -0.012626f, -0.006869f, +0.007194f, -0.021693f, - +0.013394f, +0.013166f, -0.002132f, -0.029148f, -0.010954f, -0.010119f, -0.002605f, -0.024795f, +0.013503f, -0.011459f, - +0.000608f, +0.014847f, +0.011636f, +0.002685f, -0.004258f, -0.010599f, -0.013149f, -0.004111f, -0.008654f, -0.018860f, - +0.019661f, +0.005694f, -0.016448f, -0.000424f, +0.003173f, +0.002237f, -0.001878f, +0.012716f, +0.002166f, -0.006505f, - +0.002917f, -0.008470f, -0.011893f, -0.002363f, -0.008713f, +0.005075f, +0.004964f, -0.011165f, -0.011710f, +0.004065f, - +0.011275f, -0.006628f, +0.002577f, -0.006706f, -0.001962f, +0.006798f, +0.003171f, +0.006964f, -0.001510f, +0.000371f, - +0.001204f, +0.000090f, -0.007038f, +0.000071f, -0.006332f, +0.004869f, +0.009001f, -0.000845f, +0.001415f, -0.000531f, - +0.000414f, -0.000509f, -0.005420f, -0.004180f, -0.000055f, -0.004454f, +0.003690f, +0.004436f, -0.000223f, +0.000021f, - -0.002934f, +0.000217f, +0.000043f, +0.000264f, -0.000219f, +0.001895f, -0.001086f, -0.000619f, +0.002524f, -0.001969f, - -0.001617f, -0.001764f, -0.001870f, -0.001933f, +0.000231f, +0.000957f - }, - { - -0.001616f, +0.154783f, +0.028428f, +0.007946f, +0.002080f, +0.021649f, -0.031545f, +0.013001f, -0.007423f, -0.002969f, - -0.021598f, -0.014014f, -0.019158f, -0.039705f, -0.010092f, -0.014519f, +0.009689f, +0.026796f, -0.011477f, -0.078660f, - -0.035751f, +0.003558f, +0.007714f, +0.029650f, +0.001757f, -0.008166f, -0.007659f, -0.017738f, -0.014503f, -0.018798f, - -0.017438f, +0.018557f, -0.003981f, -0.008805f, -0.000418f, -0.005101f, -0.005284f, +0.004365f, -0.029686f, +0.015866f, - +0.001372f, +0.005122f, +0.000592f, +0.003256f, +0.005384f, -0.008595f, +0.011212f, -0.001518f, +0.004952f, +0.002389f, - -0.004866f, -0.009604f, +0.012321f, -0.008920f, +0.000518f, +0.004557f, -0.009382f, -0.013042f, +0.009547f, +0.008336f, - -0.001708f, +0.005373f, +0.007530f, +0.001537f, +0.011243f, +0.000653f, -0.000889f, -0.005677f, +0.004435f, -0.003610f, - +0.002721f, -0.001848f, -0.000003f, -0.001842f, -0.003896f, +0.002144f, +0.005312f, +0.000747f, +0.000466f, -0.001522f, - +0.001718f, -0.003518f, -0.001997f, -0.005424f, +0.004888f, -0.000123f, +0.001830f, -0.002093f, -0.002983f, -0.000344f, - -0.001614f, +0.000640f, -0.001495f, +0.000163f, +0.001243f, -0.000920f - }, - { - -0.063238f, -0.313998f, +0.079316f, +0.004536f, -0.022939f, +0.064222f, -0.017316f, +0.007666f, -0.031442f, -0.009238f, - -0.005851f, +0.013059f, -0.032470f, +0.042549f, +0.004637f, +0.015289f, +0.000092f, -0.007508f, -0.013149f, -0.000240f, - -0.003651f, +0.007354f, +0.025820f, -0.014087f, +0.003275f, -0.015720f, -0.008756f, +0.011658f, -0.012727f, +0.000206f, - +0.002776f, +0.005795f, -0.011623f, +0.002078f, +0.014923f, +0.022669f, +0.009186f, -0.002432f, -0.012664f, -0.005455f, - -0.007013f, -0.016198f, -0.000688f, -0.012367f, +0.006412f, -0.014681f, +0.008295f, +0.005989f, +0.014568f, +0.013680f, - -0.008565f, -0.003273f, -0.004895f, +0.006967f, +0.003462f, +0.010466f, -0.000074f, +0.000289f, -0.003455f, -0.012762f, - -0.004101f, +0.000406f, -0.000704f, -0.002730f, -0.006374f, +0.003349f, -0.002339f, +0.001885f, +0.000243f, -0.003114f, - -0.006848f, +0.003974f, +0.002604f, +0.006838f, -0.002947f, -0.000752f, +0.002426f, -0.005258f, +0.000003f, -0.000041f, - +0.000408f, -0.001017f, -0.000762f, -0.000902f, -0.000798f, +0.000884f, -0.000380f, -0.001816f, +0.000299f, +0.000590f, - -0.002250f, -0.002519f, -0.001114f, +0.001971f, +0.000385f, -0.002336f - }, - { - +0.005105f, +0.064518f, -0.018905f, -0.002863f, +0.006563f, -0.002488f, +0.004829f, +0.007203f, +0.003791f, -0.001646f, - -0.017011f, -0.019046f, -0.001593f, -0.105160f, -0.024377f, +0.026259f, +0.019805f, -0.003584f, -0.003041f, +0.019603f, - +0.009157f, +0.000970f, +0.048594f, +0.008490f, -0.033512f, -0.002399f, -0.009669f, -0.016070f, -0.012198f, +0.001710f, - -0.029102f, +0.035948f, +0.026366f, -0.015777f, +0.009136f, -0.000204f, +0.005274f, +0.017284f, -0.005519f, +0.002188f, - -0.023660f, -0.007229f, +0.017792f, +0.008161f, -0.017139f, +0.013086f, +0.005719f, +0.017219f, -0.006109f, -0.016267f, - -0.002077f, -0.000873f, +0.003719f, -0.020626f, -0.006155f, -0.002385f, -0.005759f, -0.000931f, +0.002877f, +0.005282f, - +0.005494f, -0.001756f, +0.000511f, -0.006077f, -0.008340f, -0.001657f, -0.002296f, +0.003473f, +0.008351f, -0.001881f, - +0.002735f, -0.002037f, -0.003396f, -0.002840f, +0.005343f, -0.004025f, -0.004557f, +0.001444f, +0.002527f, +0.004740f, - +0.002470f, -0.000358f, +0.001781f, +0.001045f, +0.000016f, -0.000879f, -0.000862f, +0.000756f, -0.000475f, -0.000685f, - +0.001895f, -0.000417f, +0.001844f, +0.000421f, -0.000916f, +0.001738f - }, - { - +0.095573f, +0.037159f, +0.010115f, -0.015980f, +0.039851f, -0.039748f, -0.036540f, -0.000310f, +0.038916f, +0.008089f, - +0.028821f, -0.026759f, -0.010922f, -0.010592f, -0.022130f, +0.010500f, +0.013870f, -0.021604f, -0.006565f, +0.019204f, - -0.005783f, -0.021969f, -0.003781f, +0.005600f, +0.007549f, +0.008597f, -0.017024f, -0.010744f, +0.016895f, +0.025156f, - +0.000954f, +0.021520f, +0.009291f, -0.026224f, +0.025175f, +0.016868f, +0.002495f, +0.008718f, -0.006319f, -0.002720f, - +0.019233f, +0.017985f, -0.010449f, +0.004071f, -0.025482f, +0.004072f, -0.001615f, +0.010729f, +0.017326f, +0.008122f, - -0.000045f, -0.010243f, +0.001461f, -0.013049f, -0.007968f, +0.002366f, +0.002217f, +0.007264f, -0.002406f, +0.011640f, - -0.003736f, -0.004563f, -0.001196f, +0.000277f, -0.006323f, -0.001173f, +0.003452f, +0.005881f, +0.002219f, -0.002039f, - -0.001723f, +0.000788f, +0.002341f, +0.000760f, +0.000327f, +0.002134f, +0.000865f, -0.002316f, +0.001620f, +0.005534f, - -0.002213f, +0.003860f, +0.002719f, +0.002451f, +0.000538f, -0.001046f, +0.002078f, -0.001961f, +0.001455f, -0.001490f, - +0.002905f, -0.000089f, +0.001993f, +0.001294f, +0.002232f, +0.000933f - }, - { - +0.004469f, -0.139209f, -0.016750f, -0.005605f, +0.003238f, +0.002971f, +0.011869f, -0.013133f, +0.011186f, +0.000216f, - +0.000318f, +0.014262f, -0.003122f, +0.010114f, -0.175926f, +0.012754f, +0.012479f, +0.016202f, +0.012905f, +0.045261f, - +0.002463f, +0.018052f, -0.009261f, +0.014106f, -0.005311f, +0.025755f, +0.032107f, +0.001836f, -0.022303f, -0.021040f, - +0.005982f, +0.003806f, -0.015690f, +0.003785f, -0.006588f, +0.020282f, -0.001981f, +0.007611f, +0.004094f, -0.021744f, - +0.008620f, -0.010401f, +0.009199f, +0.018864f, -0.002110f, -0.001015f, -0.005926f, -0.005777f, -0.006140f, -0.004038f, - +0.009643f, -0.005191f, +0.004965f, +0.005363f, +0.000013f, +0.004463f, +0.005401f, +0.002311f, -0.004812f, -0.009511f, - +0.001122f, -0.008911f, +0.004256f, -0.007409f, +0.005530f, +0.002995f, +0.004801f, -0.004557f, -0.004409f, -0.004121f, - +0.006046f, +0.004772f, +0.003573f, -0.001267f, -0.000204f, +0.001969f, -0.004023f, +0.002116f, -0.004199f, -0.002519f, - -0.007318f, +0.000892f, +0.002099f, +0.004244f, +0.002940f, +0.000747f, -0.000865f, -0.001457f, +0.001243f, +0.003005f, - +0.005742f, -0.000176f, -0.003320f, -0.000562f, +0.000286f, -0.001737f - }, - { - +0.037432f, -0.140682f, -0.031964f, +0.027759f, +0.009157f, -0.027875f, +0.004232f, +0.013976f, -0.024806f, -0.016477f, - +0.050699f, -0.039726f, +0.020766f, +0.010645f, -0.000784f, -0.004171f, -0.046363f, -0.033517f, -0.038374f, -0.004279f, - -0.002400f, +0.018763f, +0.002146f, +0.019656f, +0.016899f, -0.012511f, +0.025836f, -0.003130f, +0.004801f, -0.007125f, - +0.023461f, +0.019675f, +0.008895f, -0.012504f, -0.018085f, +0.019394f, +0.019373f, -0.004990f, -0.001146f, +0.015682f, - -0.006313f, -0.002127f, +0.012278f, -0.006076f, +0.017212f, -0.009601f, -0.007114f, +0.001880f, +0.020606f, +0.001427f, - +0.002911f, +0.009197f, -0.010796f, -0.007472f, -0.008506f, +0.003357f, -0.005983f, +0.001587f, -0.003924f, +0.008188f, - -0.003820f, -0.001986f, -0.002508f, -0.003951f, +0.003111f, -0.003079f, -0.005116f, -0.001576f, +0.006520f, -0.000027f, - -0.004383f, +0.009932f, -0.000676f, +0.000151f, +0.000678f, -0.002949f, +0.003809f, +0.003351f, -0.005363f, -0.002469f, - +0.006826f, +0.001663f, +0.001215f, -0.000783f, -0.002573f, -0.001156f, +0.003060f, +0.005452f, -0.003271f, +0.001780f, - +0.000575f, +0.004255f, +0.000729f, -0.000583f, +0.002947f, -0.002733f - } - }, - { - { - +0.000440f, +0.013717f, +0.012986f, +0.035782f, -0.012181f, -0.001245f, +0.006452f, -0.001889f, -0.004908f, -0.008629f, - +0.044858f, -0.002011f, -0.004341f, +0.022582f, +0.021734f, +0.004993f, +0.015411f, -0.000478f, -0.012287f, +0.004099f, - +0.041604f, +0.003069f, +0.000496f, -0.040834f, +0.015040f, +0.011948f, +0.005778f, +0.004137f, -0.017492f, -0.033387f, - +0.014350f, +0.038470f, +0.010100f, +0.006201f, +0.009482f, +0.000813f, +0.001262f, -0.006155f, +0.010836f, +0.003731f, - -0.009550f, -0.010529f, +0.009478f, +0.011704f, -0.005761f, -0.016886f, +0.005347f, +0.017483f, -0.001571f, +0.002083f, - -0.004883f, -0.006997f, -0.010075f, -0.003668f, -0.003772f, +0.003835f, +0.000163f, +0.003864f, -0.000015f, -0.004144f, - -0.004979f, -0.002257f, +0.004630f, -0.005711f, +0.000207f, -0.006901f, +0.002999f, +0.004716f, -0.007581f, +0.003212f, - -0.003554f, +0.000982f, -0.001400f, +0.002902f, +0.008103f, +0.001857f, -0.002756f, +0.005724f, +0.002020f, +0.004043f, - -0.003208f, +0.001312f, -0.001410f, +0.000431f, +0.003883f, -0.000749f, -0.000763f, -0.002192f, -0.004410f, -0.000985f, - -0.002462f, -0.000933f, +0.000406f, -0.000693f, +0.000727f, +0.000753f - }, - { - -0.028363f, -0.327548f, -0.007752f, -0.025987f, +0.026605f, -0.009377f, +0.004631f, +0.015008f, -0.012369f, +0.006165f, - +0.022757f, +0.041083f, +0.000622f, +0.005621f, +0.013260f, -0.029813f, -0.037300f, +0.005472f, +0.013782f, -0.010599f, - +0.009059f, -0.017256f, -0.028028f, -0.024570f, +0.007945f, +0.008751f, +0.026013f, +0.012893f, +0.007758f, +0.005211f, - +0.011154f, -0.002808f, -0.004226f, +0.005819f, -0.016119f, +0.006082f, -0.004915f, -0.010708f, +0.022676f, +0.006104f, - +0.004679f, -0.005333f, -0.008808f, -0.009548f, -0.004015f, -0.009133f, +0.001125f, -0.005622f, +0.002543f, +0.004789f, - +0.001142f, -0.011156f, -0.006879f, -0.002485f, -0.001546f, +0.009874f, -0.008300f, -0.005212f, -0.004640f, +0.003175f, - +0.005828f, -0.013632f, -0.002197f, +0.001704f, +0.006475f, -0.001285f, +0.007241f, +0.000926f, -0.000288f, +0.001012f, - -0.001253f, +0.006888f, +0.001290f, +0.004020f, -0.001464f, -0.000826f, -0.002836f, +0.004340f, -0.000429f, -0.001217f, - -0.000101f, +0.003691f, -0.000652f, -0.002013f, -0.001646f, +0.000246f, +0.000351f, +0.001989f, -0.000533f, +0.004177f, - +0.000757f, +0.000134f, -0.000807f, +0.000032f, +0.000675f, +0.000215f - }, - { - -0.009276f, -0.115991f, +0.031629f, +0.050203f, -0.002302f, -0.002659f, -0.002670f, -0.003953f, +0.005421f, +0.011892f, - +0.016885f, -0.024517f, +0.013774f, +0.019556f, +0.002365f, -0.002197f, -0.005789f, +0.024809f, -0.009738f, +0.014570f, - -0.000019f, +0.015267f, +0.046841f, +0.020741f, +0.004360f, -0.002492f, -0.021858f, -0.005867f, -0.004117f, -0.007806f, - -0.015971f, -0.030113f, -0.020785f, -0.007714f, -0.007101f, -0.003402f, +0.003447f, -0.008823f, +0.006413f, +0.006173f, - -0.002182f, -0.001737f, +0.002367f, +0.003662f, -0.013728f, -0.002761f, +0.006196f, -0.006932f, +0.006595f, -0.003103f, - +0.001776f, -0.007823f, -0.005205f, -0.008546f, +0.003345f, -0.000517f, -0.000405f, +0.005429f, -0.007999f, -0.006965f, - +0.003996f, -0.004048f, +0.003046f, -0.004759f, -0.002384f, -0.000616f, +0.003042f, +0.002287f, -0.000414f, -0.005134f, - -0.000174f, +0.001847f, -0.001547f, -0.000061f, -0.000962f, -0.002374f, -0.001457f, -0.003611f, -0.004398f, -0.000192f, - -0.002910f, -0.004704f, -0.000227f, +0.002271f, +0.004730f, +0.001880f, +0.001323f, +0.000625f, +0.002580f, +0.001497f, - -0.001340f, +0.000428f, +0.001556f, -0.001191f, -0.000611f, -0.000136f - }, - { - -0.004962f, -0.001175f, -0.004682f, -0.014843f, -0.000601f, -0.000224f, -0.001398f, -0.001028f, -0.006780f, -0.015115f, - -0.000709f, +0.005955f, +0.024033f, -0.013132f, +0.037346f, +0.017297f, -0.081576f, +0.015484f, +0.032164f, +0.006301f, - -0.011212f, -0.014827f, +0.011455f, -0.029113f, -0.034439f, +0.032112f, -0.028216f, -0.020485f, +0.004290f, -0.023364f, - +0.034667f, -0.029991f, -0.044394f, -0.002487f, +0.008301f, -0.038885f, +0.005232f, -0.006913f, +0.003049f, +0.012046f, - -0.008135f, +0.015896f, -0.003425f, +0.004990f, -0.005984f, -0.006898f, +0.004385f, -0.011191f, -0.009772f, +0.012769f, - -0.005023f, +0.001656f, -0.001241f, -0.001205f, +0.003299f, +0.001258f, -0.008240f, -0.006475f, +0.006253f, -0.007088f, - +0.003296f, -0.012097f, +0.001262f, +0.004271f, -0.000575f, -0.001608f, +0.006413f, +0.003187f, -0.007290f, -0.002564f, - +0.009656f, -0.001550f, -0.001535f, +0.002459f, +0.002326f, -0.003314f, -0.003795f, -0.000982f, +0.001126f, +0.000332f, - -0.000362f, +0.000097f, +0.002506f, -0.001226f, +0.001972f, +0.000828f, -0.001348f, +0.000703f, -0.002224f, +0.002535f, - +0.000544f, +0.000578f, +0.000223f, -0.000298f, -0.001376f, +0.000463f - }, - { - +0.096553f, -0.363943f, -0.028731f, +0.001540f, -0.002858f, -0.006950f, -0.002966f, -0.001070f, -0.007286f, -0.007130f, - -0.000308f, +0.031810f, -0.005792f, +0.030273f, +0.009668f, -0.004770f, -0.030346f, -0.024675f, +0.018020f, +0.011353f, - -0.002369f, -0.003811f, +0.003152f, +0.014495f, +0.002102f, +0.021902f, -0.008518f, -0.006975f, +0.013240f, +0.003012f, - -0.006683f, -0.011776f, +0.004618f, +0.004740f, -0.013098f, -0.001865f, +0.039604f, +0.000168f, -0.009727f, -0.026244f, - -0.000551f, +0.000526f, -0.004390f, +0.009483f, +0.008214f, -0.012104f, +0.003928f, +0.010629f, -0.010657f, +0.003596f, - +0.006684f, +0.005870f, -0.009072f, +0.000891f, +0.002714f, -0.004231f, +0.006854f, +0.001884f, +0.000266f, +0.002669f, - +0.002030f, +0.001021f, +0.005858f, +0.003247f, +0.001000f, +0.001844f, +0.001875f, -0.002212f, +0.004127f, +0.004458f, - +0.007672f, -0.002111f, +0.003026f, -0.006234f, -0.002185f, +0.000079f, -0.003244f, +0.001946f, +0.000587f, +0.002616f, - -0.000346f, -0.002977f, +0.002327f, -0.002917f, +0.001177f, +0.002660f, +0.000444f, +0.002079f, +0.000934f, +0.000077f, - -0.000492f, +0.001231f, -0.000537f, +0.000418f, +0.002171f, -0.000697f - }, - { - +0.001488f, -0.002856f, +0.023225f, +0.000942f, +0.003276f, -0.000974f, +0.001200f, -0.003821f, -0.011345f, +0.006285f, - +0.007373f, +0.001153f, -0.007131f, +0.027760f, -0.046138f, -0.039911f, +0.061800f, -0.004457f, +0.002090f, +0.053641f, - +0.005380f, -0.029264f, -0.035531f, -0.018187f, -0.020116f, -0.005320f, -0.008953f, -0.002797f, -0.017187f, +0.040737f, - +0.010938f, +0.002853f, -0.010718f, -0.008890f, +0.013445f, +0.004182f, +0.003792f, -0.003324f, -0.014320f, +0.000138f, - +0.013758f, +0.001072f, -0.005259f, -0.015795f, -0.011203f, -0.001495f, -0.007537f, +0.007523f, +0.000148f, -0.008333f, - -0.008165f, -0.002665f, -0.009388f, -0.006416f, -0.005116f, -0.009025f, +0.000335f, -0.002294f, +0.004384f, +0.004909f, - -0.003922f, -0.007287f, -0.002302f, -0.005221f, -0.001592f, -0.005940f, +0.000968f, +0.003083f, -0.006887f, +0.001324f, - +0.009443f, +0.003451f, +0.000127f, -0.000761f, -0.008216f, -0.004444f, -0.002410f, +0.002091f, -0.003281f, +0.000706f, - +0.003156f, +0.004159f, -0.003425f, +0.003093f, -0.001591f, -0.001534f, +0.001579f, +0.000331f, +0.000327f, +0.000958f, - +0.000356f, -0.002306f, -0.002151f, -0.000089f, -0.002295f, +0.001094f - }, - { - +0.088137f, -0.654913f, -0.031764f, +0.036073f, +0.004134f, +0.001976f, -0.006573f, -0.022287f, -0.011797f, +0.006711f, - +0.042691f, +0.005121f, +0.000026f, +0.006746f, +0.005312f, -0.002186f, -0.026409f, +0.017640f, -0.017429f, -0.000037f, - -0.006094f, +0.004978f, -0.001331f, -0.014057f, +0.007122f, -0.004760f, -0.000047f, -0.004851f, +0.005375f, +0.004947f, - -0.016567f, +0.002556f, +0.008732f, +0.002400f, +0.006572f, +0.010430f, -0.011736f, -0.012366f, -0.008963f, +0.018890f, - +0.002458f, +0.001446f, +0.002273f, +0.001606f, +0.003283f, -0.005791f, -0.001571f, -0.007550f, -0.013391f, +0.000672f, - -0.004266f, +0.016888f, +0.004242f, +0.000094f, -0.005556f, +0.003973f, -0.001998f, -0.000927f, +0.007265f, -0.005285f, - +0.003706f, +0.000966f, +0.003757f, +0.005629f, +0.013202f, -0.001804f, +0.003566f, +0.001628f, +0.000741f, -0.000368f, - -0.001700f, +0.007453f, -0.000315f, -0.002470f, -0.000654f, +0.002530f, -0.000014f, +0.000562f, -0.001487f, -0.001177f, - -0.002157f, -0.001565f, -0.002753f, -0.003338f, +0.000425f, +0.000264f, -0.000892f, +0.000914f, +0.000843f, +0.001908f, - -0.004144f, -0.000322f, -0.003473f, +0.000802f, +0.000989f, +0.002485f - }, - { - +0.002539f, +0.004975f, +0.013932f, +0.002862f, -0.005297f, +0.000919f, +0.002764f, +0.008450f, +0.017343f, +0.001062f, - +0.004265f, -0.000190f, +0.012440f, -0.000391f, +0.029154f, +0.016149f, -0.019281f, -0.012578f, -0.000167f, +0.026263f, - +0.001592f, -0.007258f, -0.009141f, -0.016759f, -0.008785f, +0.030416f, +0.020622f, +0.029913f, +0.008834f, +0.024753f, - -0.022432f, +0.007453f, +0.001328f, +0.004630f, -0.008658f, +0.022930f, -0.015666f, +0.008164f, +0.005842f, -0.011917f, - +0.011941f, +0.002847f, +0.006251f, +0.005632f, -0.008687f, -0.001331f, -0.010292f, +0.004519f, -0.016071f, -0.006395f, - -0.010744f, -0.007042f, +0.007256f, -0.013972f, +0.013827f, +0.010039f, +0.000592f, +0.004690f, -0.009018f, +0.002352f, - -0.000737f, -0.006255f, -0.009055f, -0.003676f, -0.004377f, +0.000811f, -0.005262f, -0.001402f, -0.000207f, -0.002240f, - -0.003442f, -0.001776f, -0.000624f, -0.003421f, +0.002187f, +0.002783f, -0.001360f, +0.003706f, -0.000681f, +0.001602f, - +0.003925f, -0.004189f, +0.002913f, +0.000659f, -0.005672f, +0.002693f, -0.002658f, +0.000772f, +0.000071f, -0.000887f, - +0.001756f, +0.000005f, -0.000109f, -0.000183f, -0.001277f, +0.002703f - }, - { - +0.154158f, +0.187149f, -0.071261f, +0.032881f, -0.007274f, -0.000308f, -0.023725f, +0.010054f, -0.006937f, -0.011006f, - +0.020359f, +0.024428f, -0.031337f, -0.019363f, -0.004514f, -0.014685f, -0.031026f, -0.000621f, +0.007018f, -0.015700f, - +0.020383f, +0.000757f, +0.001027f, -0.008993f, -0.000760f, -0.005517f, -0.016157f, +0.002198f, -0.008595f, -0.006675f, - -0.001647f, +0.017130f, -0.018763f, -0.006514f, +0.000799f, +0.014735f, -0.007724f, +0.010392f, +0.001572f, +0.006743f, - -0.002277f, -0.008771f, -0.016642f, -0.008568f, +0.003020f, -0.002787f, -0.002006f, +0.001336f, -0.001026f, +0.000693f, - +0.001143f, -0.002226f, -0.002714f, -0.000726f, -0.000815f, +0.009540f, -0.002535f, +0.009890f, +0.002687f, +0.000869f, - +0.000262f, +0.001820f, -0.008743f, -0.000443f, -0.001434f, +0.004480f, +0.005065f, +0.004233f, -0.001292f, -0.000896f, - +0.000538f, +0.001174f, -0.003856f, -0.004803f, -0.002310f, -0.001828f, +0.002809f, +0.002719f, +0.001761f, -0.003739f, - +0.001533f, -0.000168f, -0.000500f, +0.000124f, +0.003029f, +0.000990f, -0.001691f, -0.001975f, +0.001215f, -0.001016f, - -0.001027f, -0.001684f, -0.000198f, -0.002779f, -0.000289f, -0.000732f - }, - { - -0.001028f, +0.153034f, +0.023282f, +0.022547f, +0.002228f, -0.009103f, -0.020175f, +0.002959f, +0.010508f, -0.014383f, - -0.007136f, -0.011548f, +0.006243f, -0.051146f, -0.001382f, -0.016212f, +0.010086f, +0.007637f, -0.037393f, -0.034640f, - -0.016670f, -0.009115f, +0.020971f, -0.001378f, +0.007343f, -0.001424f, +0.008453f, -0.025017f, -0.011241f, -0.020404f, - -0.003689f, -0.002628f, -0.019857f, +0.012778f, -0.008846f, +0.003104f, -0.020371f, -0.009128f, +0.004587f, +0.004167f, - -0.009244f, +0.009181f, +0.007569f, -0.010908f, -0.003833f, +0.005074f, +0.001376f, +0.008531f, -0.000097f, -0.005675f, - -0.002815f, +0.000475f, +0.006265f, -0.004913f, -0.000443f, -0.001694f, -0.006222f, -0.006138f, +0.003421f, +0.006404f, - -0.002288f, +0.009449f, +0.005944f, -0.000810f, +0.011652f, +0.005514f, -0.002009f, -0.009998f, +0.001519f, +0.000062f, - -0.002392f, +0.004842f, -0.003356f, -0.000187f, -0.006042f, +0.002562f, +0.007181f, +0.002502f, -0.000178f, -0.001279f, - +0.000504f, -0.002839f, -0.003446f, -0.002027f, +0.002228f, +0.000339f, +0.000488f, -0.000695f, -0.001476f, -0.003923f, - -0.000503f, -0.000670f, -0.000286f, +0.000389f, +0.000055f, -0.000613f - }, - { - +0.057748f, -0.333521f, -0.031587f, -0.014596f, +0.025950f, -0.032828f, +0.025406f, +0.015205f, -0.011356f, -0.036932f, - +0.009236f, -0.018224f, -0.026815f, +0.024322f, +0.049077f, +0.004754f, +0.013213f, -0.017098f, +0.001876f, -0.023983f, - +0.012665f, +0.001280f, +0.015587f, -0.000009f, -0.024418f, +0.004185f, -0.001706f, +0.003717f, -0.014940f, -0.008529f, - +0.014255f, -0.005389f, +0.003428f, -0.010724f, +0.005935f, +0.029424f, +0.006777f, +0.006957f, -0.018784f, -0.013959f, - -0.008265f, -0.004385f, +0.001451f, -0.013067f, +0.003490f, -0.005540f, +0.000890f, +0.011418f, +0.011996f, +0.020490f, - -0.006252f, -0.005797f, -0.010993f, -0.002107f, +0.007488f, +0.008197f, +0.008539f, -0.007915f, -0.002774f, -0.002436f, - -0.000191f, -0.004270f, -0.004313f, -0.003721f, -0.002043f, -0.000230f, +0.000654f, -0.002008f, -0.001831f, -0.002327f, - -0.005135f, +0.002091f, +0.005440f, -0.000358f, +0.001037f, +0.000609f, +0.001109f, +0.000452f, -0.003680f, -0.001245f, - +0.000883f, +0.000303f, -0.000048f, -0.005248f, +0.002159f, -0.000992f, -0.000702f, +0.000795f, -0.002501f, -0.000046f, - -0.001496f, -0.003494f, +0.001149f, +0.000968f, +0.000117f, -0.001621f - }, - { - -0.006378f, +0.027100f, +0.010028f, +0.003381f, -0.014089f, +0.021007f, -0.006235f, +0.016794f, -0.001779f, -0.008129f, - -0.013409f, -0.013025f, -0.017656f, -0.093381f, -0.042537f, +0.035853f, +0.046587f, -0.052559f, +0.025549f, +0.024852f, - +0.011289f, -0.026761f, +0.041586f, +0.011209f, -0.003754f, -0.008386f, -0.029567f, -0.009097f, -0.003968f, -0.025947f, - +0.022471f, -0.010497f, +0.031129f, +0.014694f, -0.003731f, +0.001111f, +0.017790f, -0.011408f, +0.010077f, -0.009376f, - -0.007167f, +0.004409f, -0.000562f, +0.008558f, -0.007710f, +0.005674f, +0.019329f, +0.004463f, -0.004359f, -0.009264f, - -0.006100f, +0.001625f, -0.001812f, -0.013216f, -0.006621f, -0.005550f, -0.002982f, +0.001093f, +0.002659f, +0.010407f, - -0.003302f, +0.001923f, -0.001912f, -0.009666f, -0.000309f, -0.006994f, -0.000097f, +0.003339f, +0.006326f, -0.000520f, - +0.004278f, -0.003545f, -0.003933f, -0.002751f, -0.000723f, +0.000938f, -0.002453f, -0.002017f, +0.003779f, +0.003802f, - +0.000117f, -0.000059f, +0.003629f, -0.000012f, -0.000067f, -0.001086f, -0.002235f, +0.001713f, -0.001690f, +0.000211f, - +0.003878f, -0.000842f, +0.001239f, +0.000711f, +0.000801f, -0.000626f - }, - { - -0.089600f, +0.306687f, -0.017096f, +0.007612f, +0.045675f, -0.038564f, -0.006355f, +0.029933f, +0.000219f, +0.042446f, - +0.002053f, -0.026672f, -0.019632f, -0.004795f, -0.017299f, +0.004521f, +0.019568f, -0.017039f, -0.005768f, -0.012187f, - +0.011871f, -0.009507f, -0.012589f, -0.011221f, +0.014876f, +0.009484f, -0.017214f, -0.020477f, +0.025131f, +0.024666f, - +0.006397f, +0.019632f, +0.004971f, -0.019905f, +0.005564f, +0.025799f, +0.009713f, +0.012576f, -0.013900f, -0.008259f, - +0.018152f, +0.010720f, -0.005361f, +0.006254f, -0.007760f, -0.013207f, +0.006412f, +0.008150f, +0.017020f, -0.000353f, - -0.001612f, -0.011806f, -0.001623f, -0.013055f, -0.002368f, -0.001927f, +0.003244f, +0.003900f, +0.004442f, +0.000912f, - -0.001725f, -0.003020f, -0.000405f, -0.003330f, -0.002457f, -0.000546f, +0.000492f, +0.003938f, +0.000268f, +0.000267f, - -0.002550f, +0.003554f, +0.000056f, +0.001741f, +0.001943f, +0.003689f, +0.002167f, -0.004662f, +0.001964f, -0.002291f, - +0.004618f, +0.004022f, +0.000598f, +0.006134f, -0.003258f, -0.001925f, +0.005177f, -0.003562f, +0.001056f, -0.000627f, - +0.001224f, +0.000536f, -0.000030f, +0.003061f, +0.002699f, +0.000764f - }, - { - -0.004528f, -0.149227f, -0.002402f, -0.013304f, +0.000440f, +0.014787f, +0.001922f, -0.008564f, +0.003057f, +0.009095f, - -0.003725f, +0.022371f, -0.005045f, -0.051916f, -0.082711f, +0.008183f, -0.020642f, +0.050447f, +0.008877f, +0.002369f, - +0.017088f, +0.009101f, +0.013351f, +0.010945f, -0.018874f, +0.016468f, -0.004981f, +0.012573f, +0.017804f, -0.032774f, - +0.017778f, -0.003264f, -0.011146f, +0.006943f, -0.001980f, -0.001319f, +0.007936f, +0.006557f, +0.005944f, -0.006777f, - +0.002125f, -0.010433f, +0.011348f, +0.005979f, -0.004669f, +0.012863f, -0.013963f, -0.000734f, -0.002918f, -0.000022f, - -0.002415f, +0.000112f, +0.006584f, +0.002720f, -0.002923f, +0.010993f, +0.008936f, -0.004341f, -0.010313f, +0.001255f, - -0.008966f, -0.003416f, +0.000115f, -0.002586f, -0.000197f, +0.007527f, +0.004528f, -0.006457f, -0.005356f, -0.003729f, - +0.002483f, +0.002497f, +0.006911f, +0.002625f, -0.001363f, -0.002486f, +0.001519f, -0.000311f, -0.002077f, -0.000808f, - -0.005953f, -0.002523f, +0.003798f, +0.006126f, +0.002047f, -0.001568f, -0.000124f, +0.000172f, +0.003238f, +0.000740f, - +0.003369f, +0.000844f, -0.000701f, -0.001147f, +0.000283f, +0.000578f - }, - { - -0.065218f, -0.000121f, -0.033615f, +0.042708f, +0.021220f, -0.027715f, -0.005517f, +0.008265f, -0.017596f, +0.004989f, - -0.010682f, -0.000930f, +0.008690f, +0.003028f, +0.046337f, -0.034086f, -0.036817f, -0.025024f, -0.047419f, +0.009077f, - +0.005039f, +0.008031f, +0.008727f, -0.003437f, +0.035266f, +0.008580f, -0.006749f, +0.017801f, -0.031124f, +0.030220f, - +0.003730f, +0.025939f, +0.011688f, +0.002086f, -0.013394f, +0.007664f, +0.011508f, -0.008701f, +0.009259f, +0.011878f, - -0.022319f, +0.014831f, +0.006191f, +0.002128f, +0.002687f, -0.000518f, -0.001471f, -0.003776f, +0.011374f, +0.004472f, - +0.010686f, +0.001867f, -0.008071f, -0.011070f, -0.003510f, +0.004486f, -0.002559f, -0.003065f, -0.000891f, +0.004792f, - -0.005073f, +0.002350f, -0.004072f, -0.000961f, -0.002099f, +0.002618f, -0.006060f, -0.004480f, +0.010282f, -0.000157f, - -0.001673f, +0.002057f, +0.000885f, +0.005245f, -0.004297f, +0.003601f, +0.003325f, -0.000687f, -0.002684f, -0.002509f, - +0.002882f, +0.003902f, +0.001359f, -0.000534f, -0.001329f, -0.005655f, +0.006933f, +0.001352f, -0.001715f, +0.001157f, - +0.000902f, +0.002838f, +0.002377f, -0.000226f, +0.002457f, -0.001397f - } - }, - { - { - +0.001490f, -0.036543f, -0.018651f, +0.026680f, -0.014126f, +0.004473f, +0.006037f, -0.004775f, -0.001563f, -0.011962f, - +0.043043f, -0.010558f, -0.007322f, +0.022251f, +0.016700f, -0.007056f, -0.002858f, +0.018025f, -0.016875f, -0.040479f, - -0.009633f, -0.009598f, -0.000185f, -0.017888f, +0.052051f, +0.005638f, -0.015817f, -0.012438f, -0.018122f, -0.031023f, - +0.000515f, +0.006713f, -0.007392f, -0.007505f, +0.011799f, +0.011754f, +0.009556f, -0.017062f, -0.010534f, -0.001280f, - -0.008502f, -0.009861f, -0.000502f, +0.004881f, -0.003539f, -0.020424f, -0.009932f, +0.003728f, -0.004404f, +0.012368f, - +0.000825f, -0.004388f, -0.006116f, -0.005268f, +0.001140f, +0.006374f, +0.000076f, +0.007678f, +0.002010f, -0.003218f, - -0.004709f, -0.003108f, +0.011040f, +0.001819f, +0.001986f, -0.008524f, +0.001340f, +0.003211f, -0.007241f, +0.002670f, - -0.004767f, +0.001550f, -0.001486f, -0.002581f, +0.001176f, +0.001121f, -0.004245f, +0.001734f, -0.002698f, +0.001488f, - -0.006649f, -0.001511f, -0.000101f, +0.003546f, +0.003660f, -0.002594f, -0.000100f, +0.000191f, -0.002027f, +0.000150f, - -0.002047f, +0.000664f, +0.002177f, +0.000739f, +0.000726f, +0.000401f - }, - { - +0.015552f, -0.378485f, -0.102404f, -0.067299f, -0.010074f, -0.013440f, -0.002604f, +0.001793f, -0.017852f, -0.022518f, - -0.017950f, +0.024873f, +0.004558f, -0.007847f, -0.003619f, -0.010563f, -0.022249f, +0.004331f, +0.012472f, -0.020506f, - +0.008484f, -0.007507f, -0.018126f, -0.031087f, +0.011728f, -0.004619f, +0.005645f, +0.012223f, +0.010415f, +0.002070f, - +0.005689f, -0.004355f, -0.006872f, -0.001749f, -0.013835f, +0.006277f, +0.000061f, -0.008316f, +0.005133f, -0.020442f, - -0.007850f, -0.001719f, +0.005959f, -0.010599f, -0.004060f, -0.003533f, -0.002536f, -0.015435f, -0.005487f, +0.009717f, - +0.010158f, -0.003179f, +0.000384f, -0.005295f, -0.008569f, +0.013496f, +0.002344f, +0.003017f, +0.002112f, -0.000597f, - +0.002306f, -0.009256f, -0.005284f, -0.005146f, +0.001905f, -0.004983f, +0.004083f, -0.000379f, -0.007336f, +0.000054f, - +0.000168f, +0.005906f, -0.003113f, +0.002449f, -0.000387f, -0.000688f, -0.003634f, -0.001876f, -0.005173f, -0.002529f, - +0.000347f, +0.004073f, -0.002422f, -0.001083f, +0.002266f, +0.001916f, -0.001313f, +0.001131f, -0.000777f, +0.003646f, - -0.000757f, -0.000319f, +0.000131f, +0.001553f, +0.001189f, +0.001064f - }, - { - +0.007522f, -0.144942f, -0.018174f, +0.004985f, -0.033115f, -0.009662f, -0.004489f, -0.001101f, +0.008707f, +0.015920f, - +0.024704f, -0.029257f, -0.000251f, +0.011285f, -0.018610f, -0.005512f, +0.008993f, +0.027445f, -0.024503f, +0.021493f, - +0.001944f, +0.007896f, +0.041314f, -0.003185f, +0.011159f, +0.010022f, -0.014232f, -0.008501f, +0.005764f, +0.012095f, - +0.019009f, -0.012935f, -0.010109f, +0.001820f, -0.001246f, +0.007009f, +0.011315f, -0.008956f, -0.000323f, +0.003821f, - -0.002091f, +0.002615f, -0.008131f, -0.007135f, -0.001931f, -0.002966f, -0.011211f, -0.014177f, +0.000768f, -0.000177f, - +0.003521f, -0.013853f, -0.002258f, -0.002884f, +0.002429f, -0.006246f, -0.004767f, +0.006367f, -0.004168f, -0.007428f, - -0.002224f, -0.004918f, +0.004195f, -0.010085f, -0.004806f, -0.000031f, +0.002522f, +0.004336f, +0.001648f, -0.004197f, - +0.000286f, +0.002509f, +0.000368f, +0.001830f, -0.001519f, -0.003869f, +0.002741f, -0.000167f, -0.001672f, +0.002536f, - +0.001091f, -0.001610f, -0.000777f, -0.001160f, +0.001010f, -0.000331f, -0.001323f, -0.002262f, +0.000755f, +0.001119f, - -0.002234f, -0.000363f, +0.000456f, -0.000254f, +0.000648f, -0.000899f - }, - { - +0.003854f, -0.005241f, -0.013175f, -0.007808f, +0.003148f, +0.000408f, -0.002415f, +0.003183f, +0.000263f, -0.012744f, - +0.001433f, +0.004313f, +0.007752f, +0.003989f, +0.102062f, +0.051866f, -0.070870f, +0.036053f, +0.051680f, +0.034127f, - +0.022203f, -0.004150f, +0.008251f, -0.004006f, -0.019668f, +0.018883f, -0.039495f, +0.007470f, +0.023762f, -0.023604f, - +0.043474f, -0.001595f, -0.012465f, -0.009035f, -0.010784f, -0.021719f, +0.032170f, +0.007994f, +0.003807f, +0.008424f, - -0.005822f, +0.008939f, -0.001193f, +0.010405f, -0.003781f, -0.007847f, +0.015873f, +0.004424f, -0.002354f, +0.015194f, - -0.001625f, -0.003201f, +0.002808f, +0.002961f, +0.003349f, +0.000085f, -0.006784f, -0.003837f, +0.012849f, +0.000854f, - +0.005928f, -0.007897f, +0.003430f, +0.001301f, +0.002018f, -0.001183f, +0.004093f, +0.002773f, -0.003869f, +0.000563f, - +0.007178f, -0.005208f, +0.001732f, +0.003738f, +0.002680f, -0.001855f, -0.001400f, +0.000508f, -0.000781f, -0.001458f, - +0.000588f, -0.000313f, +0.001698f, -0.000793f, +0.001354f, -0.000708f, -0.002268f, +0.002992f, -0.000434f, +0.001110f, - -0.000584f, -0.000402f, +0.000610f, +0.001037f, -0.001852f, +0.000137f - }, - { - -0.067128f, -0.465579f, +0.061759f, +0.005608f, -0.000022f, +0.000399f, +0.006838f, +0.001813f, +0.002215f, -0.001673f, - +0.003948f, +0.015045f, -0.022695f, +0.010291f, -0.001357f, +0.006394f, -0.011750f, -0.044349f, +0.001180f, +0.011157f, - +0.000193f, -0.010938f, -0.016274f, +0.011603f, -0.016720f, +0.020661f, +0.015867f, +0.022511f, +0.033724f, +0.013471f, - -0.021633f, -0.029648f, +0.003135f, +0.011566f, -0.017397f, -0.003380f, +0.046684f, +0.009043f, +0.008059f, -0.018766f, - -0.011714f, -0.005363f, -0.007319f, +0.011482f, +0.006332f, -0.004958f, +0.009601f, +0.010964f, -0.009122f, -0.005417f, - -0.003740f, +0.002609f, -0.007223f, -0.002994f, -0.003428f, -0.005770f, +0.007055f, -0.004647f, -0.002313f, +0.003690f, - -0.002362f, -0.005370f, +0.001026f, +0.000255f, +0.000674f, +0.002573f, +0.000876f, -0.004332f, -0.000332f, +0.000032f, - +0.002557f, -0.005684f, +0.002434f, -0.007306f, +0.001154f, +0.006011f, -0.001279f, +0.004216f, +0.000226f, +0.001694f, - +0.000004f, -0.002571f, +0.004268f, -0.001379f, -0.000789f, +0.000202f, -0.001548f, -0.000281f, +0.001244f, +0.003345f, - +0.000167f, -0.000346f, -0.002797f, -0.001173f, +0.000560f, -0.000297f - }, - { - -0.000574f, -0.031017f, +0.009454f, -0.010840f, -0.002498f, -0.000062f, +0.000526f, -0.000723f, -0.010353f, -0.002803f, - +0.004587f, +0.006964f, -0.012954f, +0.035073f, +0.008731f, -0.012748f, +0.060099f, +0.000682f, -0.002743f, +0.042986f, - +0.005659f, +0.003988f, -0.002731f, -0.014590f, -0.013506f, +0.019642f, +0.003021f, +0.007642f, +0.001523f, +0.056445f, - +0.028378f, -0.011625f, -0.023836f, -0.001185f, +0.008403f, -0.008041f, +0.019030f, +0.025107f, +0.003460f, -0.001023f, - +0.011112f, +0.013143f, +0.002898f, -0.009316f, -0.006720f, -0.001278f, -0.003984f, -0.006134f, -0.020544f, -0.012861f, - +0.001222f, +0.007288f, +0.000109f, +0.001827f, +0.003066f, -0.012256f, -0.002219f, -0.002550f, -0.001679f, +0.001670f, - -0.001533f, +0.002303f, +0.003293f, -0.002649f, +0.001498f, +0.001813f, +0.003326f, +0.000929f, -0.002871f, +0.002058f, - +0.001423f, -0.004070f, -0.001664f, +0.003091f, -0.004938f, +0.001682f, +0.004651f, +0.005459f, -0.000132f, +0.000316f, - -0.000139f, +0.002000f, -0.005189f, +0.001000f, -0.002929f, -0.002889f, +0.001642f, +0.000308f, -0.000839f, +0.001921f, - +0.002101f, -0.002121f, -0.003275f, +0.001881f, -0.001449f, +0.000394f - }, - { - -0.032266f, -0.728063f, +0.039001f, +0.054079f, +0.001359f, -0.000431f, -0.017312f, -0.013230f, +0.015502f, -0.019371f, - +0.003024f, -0.027266f, -0.010564f, -0.003881f, +0.014361f, +0.006221f, -0.033908f, +0.007074f, -0.018362f, -0.020653f, - -0.017588f, -0.000219f, +0.000825f, -0.008154f, +0.008086f, -0.004217f, +0.004431f, -0.005062f, -0.011863f, +0.001413f, - -0.011293f, -0.000307f, +0.002630f, +0.000200f, -0.000961f, +0.001740f, -0.020219f, -0.019026f, -0.018662f, +0.006172f, - -0.005067f, +0.005663f, +0.000157f, -0.000492f, +0.011078f, -0.006580f, -0.002992f, -0.009074f, -0.005886f, +0.004997f, - -0.005910f, +0.004636f, -0.003054f, +0.011848f, -0.001923f, +0.004415f, +0.003685f, -0.000442f, +0.010519f, +0.001207f, - +0.006478f, +0.000255f, +0.001579f, +0.002063f, +0.004468f, -0.009908f, -0.000985f, +0.002278f, +0.001835f, +0.004192f, - -0.002636f, +0.002565f, -0.001147f, +0.002752f, +0.001554f, +0.000893f, +0.002065f, +0.003068f, -0.001678f, -0.000457f, - +0.000045f, +0.000490f, -0.000996f, -0.000919f, +0.001674f, -0.000878f, -0.002665f, -0.000391f, +0.000832f, +0.001644f, - -0.002914f, +0.003956f, -0.000583f, +0.000598f, -0.000912f, -0.001112f - }, - { - -0.000740f, -0.034338f, -0.008842f, +0.000111f, -0.004942f, +0.001034f, -0.001214f, -0.005156f, -0.003495f, -0.004614f, - +0.005968f, -0.003165f, -0.017248f, -0.026256f, +0.046575f, +0.011302f, -0.005139f, -0.002657f, +0.001176f, +0.040530f, - -0.008457f, -0.012067f, -0.004362f, -0.022631f, -0.003285f, +0.023217f, +0.012553f, +0.009948f, -0.020445f, +0.032026f, - -0.027655f, -0.010455f, -0.015766f, -0.002930f, -0.013561f, +0.017069f, -0.008500f, +0.008081f, +0.010308f, +0.001066f, - +0.009170f, +0.001426f, +0.001172f, -0.010373f, -0.019706f, +0.003617f, +0.004187f, +0.012948f, -0.009986f, +0.001924f, - -0.004828f, -0.009962f, +0.006941f, -0.008023f, +0.014825f, +0.001677f, -0.006555f, +0.002641f, -0.010104f, +0.003697f, - +0.002696f, -0.002969f, +0.000287f, +0.000343f, -0.008146f, +0.000044f, -0.000959f, +0.000046f, -0.002633f, -0.001639f, - -0.003473f, -0.003790f, +0.000143f, -0.002909f, -0.001308f, +0.001471f, -0.000495f, +0.003764f, -0.000956f, -0.000102f, - +0.002893f, -0.002593f, +0.003960f, +0.000278f, -0.004684f, +0.004760f, -0.002488f, +0.000357f, +0.000196f, -0.001109f, - +0.001269f, -0.001730f, -0.000848f, +0.000870f, -0.000765f, +0.002826f - }, - { - -0.141774f, -0.064875f, +0.052014f, +0.042377f, -0.008425f, +0.006794f, -0.013825f, +0.006107f, -0.012550f, -0.002393f, - -0.013868f, -0.003845f, +0.002015f, +0.017512f, -0.009116f, -0.016320f, -0.004877f, +0.005508f, +0.003675f, -0.008854f, - +0.013963f, -0.013822f, +0.001920f, -0.009948f, -0.003826f, +0.002598f, -0.001077f, +0.018473f, +0.008935f, +0.001599f, - -0.008009f, +0.017299f, -0.009075f, -0.013506f, -0.013544f, +0.021491f, -0.003994f, -0.004555f, -0.000135f, +0.022452f, - +0.013749f, +0.007017f, -0.007254f, -0.006498f, +0.004796f, +0.003486f, +0.008574f, +0.010752f, +0.008225f, +0.002308f, - -0.011228f, +0.000998f, +0.004567f, +0.010238f, +0.008050f, +0.005841f, -0.005674f, +0.006528f, +0.001437f, -0.002654f, - -0.000322f, +0.004360f, -0.003560f, +0.005091f, +0.002609f, +0.000212f, -0.001356f, +0.005201f, -0.001810f, -0.002978f, - +0.000386f, +0.000602f, -0.000774f, +0.002745f, +0.001859f, -0.000863f, +0.002524f, +0.000165f, -0.000407f, -0.001541f, - +0.004984f, +0.001408f, -0.000131f, +0.000104f, +0.001405f, +0.000048f, -0.001738f, -0.002496f, +0.002553f, +0.002087f, - -0.000331f, -0.002298f, +0.000594f, -0.001263f, +0.001661f, -0.000031f - }, - { - +0.002724f, +0.099670f, -0.042180f, -0.011262f, -0.008584f, -0.002469f, +0.010393f, +0.000714f, +0.011491f, -0.010846f, - +0.008161f, +0.017635f, +0.017529f, -0.029359f, +0.054432f, +0.012873f, +0.015576f, +0.013739f, +0.001630f, +0.018010f, - -0.005513f, -0.007676f, +0.020887f, -0.005733f, +0.016629f, +0.012219f, +0.029112f, -0.002160f, +0.018263f, +0.007881f, - +0.010048f, -0.003186f, -0.012910f, +0.000751f, -0.021142f, -0.000402f, -0.007019f, +0.005920f, +0.004428f, -0.003315f, - -0.014377f, +0.004460f, +0.013567f, -0.007498f, -0.004350f, +0.014707f, +0.000217f, +0.007190f, -0.005803f, -0.007808f, - -0.002052f, +0.002993f, +0.002631f, -0.001486f, +0.001401f, -0.002365f, +0.002143f, +0.002024f, +0.005093f, +0.008879f, - -0.004029f, -0.001626f, -0.002789f, -0.008650f, +0.004912f, +0.002184f, -0.003606f, -0.002733f, +0.006044f, +0.001990f, - -0.006523f, -0.001308f, +0.001239f, +0.008324f, -0.001767f, +0.000944f, +0.005011f, +0.001962f, -0.000038f, +0.000884f, - +0.000095f, -0.002056f, +0.000481f, -0.001540f, -0.003170f, -0.002528f, +0.001096f, +0.000339f, +0.000324f, -0.002253f, - +0.001720f, +0.000867f, -0.000367f, -0.000240f, +0.000863f, +0.000546f - }, - { - -0.049335f, -0.304949f, +0.087068f, -0.053716f, +0.009835f, -0.049000f, +0.028036f, +0.036952f, -0.004523f, -0.032410f, - +0.018595f, -0.001032f, -0.005186f, -0.010896f, +0.029262f, +0.013436f, +0.022618f, -0.007932f, +0.005301f, -0.032899f, - -0.015484f, -0.021765f, -0.003623f, +0.005752f, -0.016521f, +0.006383f, +0.005921f, +0.008670f, -0.009679f, -0.004360f, - +0.012228f, -0.006647f, +0.003113f, -0.020570f, -0.007320f, +0.012184f, -0.000325f, +0.008362f, -0.014359f, -0.005425f, - -0.007917f, -0.001417f, +0.010929f, +0.003057f, +0.017087f, +0.002040f, +0.000102f, +0.011652f, +0.001381f, +0.008855f, - -0.003300f, +0.003350f, -0.000205f, -0.003700f, -0.002683f, -0.003583f, +0.003283f, -0.001511f, +0.004643f, +0.003958f, - +0.008700f, +0.002812f, +0.001034f, -0.004703f, -0.000684f, -0.000648f, -0.001923f, -0.002253f, -0.002085f, -0.001493f, - +0.000779f, +0.001961f, +0.000781f, -0.001991f, +0.000528f, +0.000658f, +0.003164f, +0.001875f, -0.001898f, +0.000523f, - -0.001044f, -0.001388f, +0.001485f, -0.003632f, +0.002269f, -0.002892f, -0.001862f, +0.001037f, -0.002233f, +0.000192f, - -0.000473f, -0.002014f, +0.001085f, -0.001504f, -0.002091f, -0.001108f - }, - { - +0.006491f, -0.020018f, -0.029569f, +0.013315f, -0.020737f, +0.009196f, -0.025093f, +0.012979f, +0.006806f, -0.001067f, - -0.001035f, -0.003120f, -0.006192f, -0.023764f, -0.030949f, +0.002676f, +0.054955f, -0.032237f, +0.019735f, +0.006364f, - -0.015698f, -0.061885f, +0.019872f, -0.000828f, +0.005798f, +0.016195f, -0.001403f, +0.006635f, +0.002183f, -0.018981f, - +0.020949f, -0.039240f, +0.004778f, +0.006990f, -0.003142f, -0.000674f, +0.011265f, -0.003982f, +0.017556f, -0.011138f, - -0.000692f, +0.006897f, -0.006664f, +0.004917f, -0.006844f, -0.003394f, +0.008941f, -0.000471f, +0.001405f, -0.004794f, - -0.000234f, +0.000899f, -0.001134f, +0.001138f, +0.003738f, +0.000220f, -0.004814f, +0.002471f, -0.000462f, -0.001928f, - -0.007922f, +0.004887f, -0.004100f, -0.012486f, +0.000612f, -0.000327f, +0.006222f, +0.000748f, +0.001671f, +0.001147f, - +0.004613f, -0.006393f, -0.000825f, -0.003218f, -0.007784f, +0.002281f, +0.005081f, +0.000432f, -0.000614f, -0.001189f, - -0.001582f, -0.001782f, -0.000503f, -0.002332f, -0.003057f, -0.003792f, -0.004528f, +0.000097f, -0.002558f, -0.001032f, - +0.003399f, +0.000283f, +0.001974f, -0.000755f, +0.000501f, +0.000768f - }, - { - +0.040617f, +0.473019f, +0.008585f, +0.036434f, +0.053918f, +0.027498f, +0.058263f, +0.045043f, -0.019841f, +0.040506f, - +0.017397f, +0.001694f, +0.000004f, -0.003507f, +0.010359f, +0.014151f, +0.001643f, -0.022722f, -0.030094f, -0.024081f, - -0.006798f, -0.018826f, +0.014653f, -0.001704f, +0.003525f, +0.002121f, -0.018648f, -0.023548f, +0.008073f, +0.003875f, - +0.001670f, +0.013724f, +0.015636f, -0.006834f, -0.005519f, +0.020757f, +0.002470f, +0.009263f, -0.007087f, -0.004182f, - +0.011920f, +0.010793f, -0.000071f, +0.010384f, +0.006178f, -0.009365f, -0.002190f, -0.022847f, -0.012858f, -0.013635f, - -0.007388f, -0.015467f, +0.008254f, -0.001273f, +0.008203f, +0.007791f, +0.004526f, -0.003418f, -0.008342f, -0.003466f, - +0.002383f, -0.001731f, +0.001551f, +0.001059f, -0.000555f, -0.006971f, -0.007005f, -0.001537f, -0.002241f, +0.001524f, - -0.005259f, +0.000735f, -0.004400f, -0.002580f, +0.001181f, +0.003909f, +0.002277f, -0.005005f, -0.000239f, -0.005072f, - +0.001654f, +0.000025f, -0.001549f, +0.001957f, -0.001930f, -0.002575f, +0.000715f, -0.002738f, +0.001539f, -0.003409f, - -0.001677f, -0.001352f, -0.001541f, +0.002014f, -0.000295f, -0.001254f - }, - { - +0.003317f, -0.132928f, +0.000903f, -0.011154f, +0.001483f, -0.002953f, -0.017087f, -0.000607f, +0.006278f, +0.013081f, - +0.009324f, +0.031538f, -0.014726f, +0.020458f, +0.088671f, +0.045601f, -0.038899f, +0.021677f, +0.024010f, -0.040746f, - -0.036484f, -0.023664f, -0.025068f, -0.018151f, -0.028947f, -0.006135f, -0.031233f, -0.010575f, +0.007043f, -0.015425f, - +0.023733f, -0.005361f, +0.003268f, +0.007077f, +0.002618f, -0.005717f, +0.002402f, -0.000122f, +0.003330f, +0.003424f, - +0.008736f, -0.003671f, +0.000713f, -0.013052f, -0.003900f, +0.016696f, -0.005932f, +0.011102f, +0.003935f, -0.000803f, - -0.003526f, +0.004902f, +0.004571f, -0.002649f, -0.012804f, +0.000645f, +0.006065f, +0.001252f, -0.004793f, +0.008931f, - -0.003751f, -0.001193f, +0.000198f, -0.004610f, -0.005504f, +0.000289f, +0.000753f, +0.001587f, +0.001623f, -0.003465f, - -0.004018f, -0.007685f, +0.000207f, +0.001090f, +0.001383f, -0.002263f, -0.001331f, -0.001258f, +0.003937f, +0.004702f, - -0.000791f, +0.000671f, +0.002484f, +0.003254f, -0.000210f, -0.001715f, +0.000080f, -0.000043f, +0.004425f, +0.001555f, - +0.001673f, +0.000597f, +0.001404f, -0.000291f, +0.000538f, +0.001686f - }, - { - +0.064501f, +0.162786f, -0.038154f, +0.067782f, +0.042634f, +0.011483f, +0.024196f, +0.013688f, +0.002656f, +0.016277f, - -0.023351f, +0.003003f, +0.011512f, +0.006780f, +0.041301f, -0.013537f, -0.010934f, -0.018638f, -0.041193f, +0.004134f, - -0.001390f, -0.000179f, -0.007508f, -0.012175f, +0.023614f, +0.006242f, -0.011806f, +0.008162f, -0.004855f, +0.039082f, - -0.015074f, +0.013939f, +0.012162f, +0.012437f, -0.010671f, -0.009957f, -0.013322f, -0.008178f, +0.010317f, -0.004585f, - -0.014961f, +0.009504f, +0.005609f, +0.009615f, -0.012025f, -0.001929f, +0.000637f, +0.003939f, +0.002070f, -0.011520f, - +0.005692f, +0.001594f, +0.000836f, +0.001921f, +0.003060f, +0.005155f, -0.000402f, -0.004019f, -0.004983f, -0.001847f, - -0.002723f, +0.007375f, -0.002153f, -0.003129f, -0.004705f, +0.002790f, -0.001791f, +0.001472f, +0.009699f, -0.003214f, - -0.003092f, -0.002697f, -0.003051f, +0.002460f, -0.004964f, +0.003579f, +0.003100f, -0.000896f, -0.001925f, -0.004918f, - -0.002152f, +0.003305f, -0.000303f, +0.001254f, +0.002116f, -0.005202f, +0.004960f, +0.000009f, -0.002276f, +0.000372f, - -0.000202f, -0.001001f, -0.000895f, -0.002197f, +0.002316f, +0.000281f - } - }, - { - { - -0.002409f, -0.043268f, -0.000837f, -0.021804f, +0.021078f, +0.003336f, -0.003907f, +0.003277f, -0.007606f, +0.005754f, - +0.010194f, +0.014534f, +0.004834f, +0.007950f, +0.021007f, -0.050579f, +0.008749f, +0.022643f, +0.002474f, -0.028729f, - -0.050781f, +0.015195f, -0.013374f, +0.001838f, +0.036621f, +0.006772f, -0.006804f, -0.030664f, -0.000145f, -0.023128f, - -0.011420f, -0.011592f, -0.013280f, -0.003781f, +0.012759f, +0.012716f, +0.009518f, -0.008354f, -0.016620f, -0.002016f, - -0.001760f, -0.012975f, -0.004057f, +0.002683f, -0.000801f, -0.011670f, -0.014894f, -0.000940f, -0.002718f, +0.014348f, - +0.008387f, -0.012961f, -0.001499f, -0.006405f, +0.003717f, +0.007951f, +0.001026f, -0.000848f, +0.003860f, -0.004171f, - -0.003834f, +0.003431f, +0.005548f, +0.002119f, +0.004560f, -0.004085f, -0.001168f, +0.001533f, -0.003545f, -0.002541f, - -0.000704f, +0.000100f, -0.000940f, -0.001270f, -0.002161f, -0.001125f, -0.000233f, -0.000080f, -0.003554f, -0.000361f, - -0.004155f, -0.001295f, -0.000608f, +0.004141f, +0.003319f, -0.003329f, -0.000829f, +0.000094f, -0.000541f, -0.000936f, - +0.000345f, +0.000628f, +0.001249f, +0.000947f, +0.000307f, +0.000658f - }, - { - -0.009906f, -0.425455f, -0.009219f, -0.065060f, -0.045708f, +0.005079f, -0.000163f, -0.030680f, +0.017595f, -0.014208f, - -0.039440f, +0.012564f, +0.011949f, -0.011636f, -0.020988f, -0.002910f, -0.017015f, +0.013362f, -0.001871f, -0.008914f, - -0.017215f, +0.011819f, -0.011271f, -0.023385f, +0.003856f, -0.004703f, -0.001470f, +0.010002f, +0.007287f, +0.013816f, - +0.003637f, -0.007833f, -0.001314f, -0.017588f, +0.004656f, -0.002737f, -0.004976f, +0.002363f, -0.000054f, -0.015990f, - -0.007796f, -0.002326f, +0.000564f, -0.002293f, -0.000294f, -0.006573f, -0.011531f, -0.015667f, +0.000684f, +0.003729f, - +0.008746f, +0.004763f, +0.001523f, -0.006869f, -0.004486f, +0.008452f, +0.006240f, +0.000000f, +0.004332f, -0.001337f, - -0.002636f, -0.003341f, -0.005250f, -0.003837f, -0.004148f, -0.000467f, -0.001551f, +0.001676f, -0.005766f, -0.001493f, - +0.003444f, +0.001476f, -0.002542f, +0.002101f, -0.002178f, +0.000795f, -0.002006f, -0.001897f, -0.004073f, -0.001140f, - -0.002966f, +0.002193f, +0.000722f, -0.000951f, +0.001439f, +0.001072f, +0.000769f, +0.000067f, +0.000354f, +0.001471f, - -0.001295f, -0.000528f, +0.001541f, +0.001183f, +0.001681f, +0.000711f - }, - { - -0.005462f, -0.101151f, -0.034630f, -0.046397f, +0.007588f, -0.004295f, -0.009269f, +0.006016f, +0.000657f, +0.003437f, - +0.027697f, -0.004956f, -0.030750f, +0.020033f, -0.011498f, -0.011066f, +0.014803f, +0.004206f, -0.015419f, +0.023839f, - +0.000823f, +0.013036f, +0.030206f, -0.001424f, +0.011023f, +0.013118f, -0.006043f, -0.012298f, +0.002170f, +0.018981f, - +0.008522f, -0.008110f, +0.006997f, -0.008992f, +0.003981f, +0.009357f, +0.003202f, +0.000119f, -0.006075f, -0.009224f, - +0.014713f, +0.003714f, -0.007502f, -0.011637f, -0.002760f, +0.000617f, -0.013728f, -0.008850f, -0.002853f, +0.003309f, - -0.003250f, -0.006519f, -0.000844f, +0.000319f, +0.002326f, -0.011046f, -0.001455f, +0.000908f, -0.003315f, -0.006153f, - -0.005449f, -0.000512f, -0.001603f, -0.004617f, -0.005766f, +0.002409f, -0.000290f, +0.001807f, +0.000967f, +0.002409f, - -0.000522f, +0.000367f, +0.002797f, +0.002144f, -0.002082f, -0.005164f, +0.004716f, +0.000417f, -0.000647f, +0.001376f, - +0.000522f, +0.000738f, -0.001759f, -0.002206f, -0.000009f, -0.000839f, -0.003094f, +0.000629f, -0.000520f, +0.000182f, - -0.000691f, -0.000388f, -0.000607f, -0.000363f, +0.000135f, -0.000451f - }, - { - -0.002664f, -0.029099f, +0.010900f, +0.003282f, -0.004181f, +0.001481f, -0.001428f, +0.001961f, +0.002318f, -0.006184f, - -0.002268f, +0.004781f, -0.009906f, +0.019019f, +0.105888f, +0.001351f, -0.016434f, +0.026064f, +0.059357f, +0.025707f, - +0.012347f, +0.023860f, -0.004299f, +0.001193f, +0.006971f, -0.032871f, +0.000757f, +0.025362f, -0.001665f, -0.002047f, - +0.011338f, +0.019354f, -0.011859f, -0.019849f, -0.013433f, +0.009512f, +0.008298f, +0.022459f, +0.007485f, -0.003692f, - +0.000531f, -0.005783f, +0.002203f, +0.007991f, +0.007351f, +0.000713f, +0.010625f, -0.003041f, +0.006226f, +0.009263f, - -0.000606f, -0.002723f, +0.004210f, +0.004237f, -0.000621f, -0.004127f, -0.004602f, +0.004049f, +0.002298f, +0.005009f, - +0.004825f, +0.002355f, +0.000473f, -0.002144f, +0.004310f, -0.004850f, +0.006829f, +0.000165f, +0.000811f, +0.000266f, - +0.002724f, -0.001852f, +0.002894f, +0.000697f, +0.000817f, +0.001059f, +0.001065f, -0.000069f, -0.000546f, -0.002541f, - +0.001783f, -0.000970f, -0.001334f, +0.001638f, +0.001374f, -0.002654f, +0.000040f, +0.002096f, +0.000850f, -0.000686f, - -0.001290f, +0.000125f, +0.001606f, -0.000593f, +0.000302f, -0.001216f - }, - { - +0.026684f, -0.437979f, -0.055388f, -0.017904f, +0.018503f, +0.007291f, -0.001253f, -0.004771f, +0.018291f, +0.004182f, - +0.017410f, -0.027357f, -0.000233f, -0.000658f, +0.009680f, -0.018093f, +0.001561f, -0.041348f, +0.003299f, +0.007387f, - -0.001270f, +0.017516f, -0.033140f, -0.013388f, +0.001922f, +0.000218f, +0.027747f, +0.053664f, +0.005920f, +0.003678f, - -0.014750f, -0.022877f, +0.006649f, +0.006565f, -0.018447f, +0.000648f, +0.014339f, +0.018671f, +0.017323f, -0.013286f, - -0.007226f, -0.005307f, +0.008458f, -0.006456f, -0.001625f, +0.009949f, +0.009120f, -0.002680f, +0.000151f, -0.002993f, - -0.002966f, -0.006268f, -0.003415f, -0.005846f, +0.001506f, -0.000259f, -0.000644f, -0.004624f, -0.000954f, +0.004511f, - -0.002300f, -0.005805f, +0.000577f, -0.002535f, +0.001416f, +0.000758f, -0.000291f, -0.001519f, -0.002162f, +0.002265f, - -0.000432f, -0.002808f, -0.002353f, -0.002583f, +0.002218f, +0.002993f, +0.002527f, +0.000606f, +0.001391f, +0.000897f, - -0.000016f, -0.001238f, +0.002098f, -0.000363f, +0.001791f, -0.003268f, -0.001766f, +0.000500f, +0.001522f, +0.003116f, - +0.000452f, -0.001946f, -0.002379f, -0.000041f, -0.000822f, +0.000417f - }, - { - -0.001389f, -0.021550f, +0.002172f, -0.015177f, -0.000359f, +0.000319f, +0.000466f, +0.001474f, -0.005473f, -0.001484f, - -0.002180f, +0.000762f, -0.007418f, +0.023905f, +0.075064f, -0.022182f, +0.011133f, +0.002903f, -0.001654f, +0.026774f, - +0.014517f, -0.004375f, +0.020426f, -0.013838f, -0.020935f, +0.020072f, +0.028322f, -0.007384f, +0.028124f, +0.016301f, - +0.021270f, -0.014350f, -0.012324f, +0.011125f, -0.003280f, -0.019702f, +0.024785f, +0.020897f, +0.009689f, +0.000044f, - +0.012424f, +0.005149f, +0.010532f, -0.006643f, -0.006931f, -0.004233f, -0.003576f, -0.009575f, -0.013275f, -0.012330f, - +0.001184f, +0.006804f, +0.005446f, -0.000831f, +0.000993f, -0.001853f, -0.009412f, +0.000881f, -0.007961f, +0.001867f, - +0.000985f, +0.004110f, +0.002699f, -0.001078f, +0.002610f, +0.000619f, +0.002571f, -0.002737f, -0.000806f, +0.003827f, - -0.002239f, -0.002505f, +0.000644f, +0.000475f, -0.001387f, +0.002083f, +0.004282f, +0.003656f, +0.001228f, -0.001470f, - +0.003066f, -0.002014f, -0.002335f, -0.000812f, -0.002912f, -0.001546f, +0.000511f, +0.000693f, -0.000078f, +0.001050f, - +0.001205f, -0.000424f, -0.002319f, -0.000035f, +0.000333f, -0.000696f - }, - { - -0.023276f, -0.611765f, -0.075708f, +0.029662f, +0.043210f, -0.006824f, -0.001197f, -0.022047f, +0.011409f, -0.014189f, - -0.008889f, -0.020879f, -0.000265f, -0.018306f, +0.015260f, -0.005440f, -0.024199f, -0.007253f, +0.002295f, -0.033721f, - -0.003336f, -0.000600f, -0.000785f, -0.004007f, +0.001518f, -0.004970f, +0.005127f, -0.008460f, -0.010995f, -0.003065f, - -0.000746f, +0.010170f, -0.014860f, +0.002925f, +0.008008f, -0.002925f, -0.014759f, -0.013627f, -0.026016f, -0.004479f, - -0.005134f, +0.005865f, -0.001716f, -0.005254f, +0.012841f, +0.006173f, -0.009841f, -0.006101f, +0.000548f, +0.001528f, - -0.005752f, +0.001380f, +0.006929f, -0.003971f, +0.009033f, +0.002502f, +0.006597f, +0.000235f, +0.005602f, +0.006760f, - -0.002180f, +0.001724f, +0.004590f, +0.001493f, -0.001496f, -0.001955f, -0.000605f, -0.000726f, -0.002530f, +0.004362f, - -0.000215f, +0.000617f, +0.001935f, +0.001990f, +0.000898f, -0.000939f, +0.001640f, +0.002738f, -0.000262f, -0.000818f, - +0.001572f, -0.000735f, +0.001710f, -0.000720f, -0.000012f, +0.000097f, -0.003241f, -0.000634f, +0.000322f, -0.000132f, - +0.001136f, +0.002170f, +0.000858f, -0.000265f, -0.000444f, -0.001333f - }, - { - -0.002302f, -0.014503f, -0.019689f, -0.010469f, +0.000880f, -0.000681f, -0.001493f, +0.000615f, -0.012107f, -0.001069f, - -0.003184f, +0.000060f, -0.011956f, -0.023309f, +0.064237f, -0.050436f, +0.015479f, +0.030286f, -0.002215f, +0.001184f, - -0.010984f, +0.012986f, -0.002952f, -0.012744f, +0.004772f, -0.001077f, +0.004852f, +0.041636f, -0.042499f, +0.031905f, - -0.024333f, -0.006079f, -0.026810f, -0.018759f, +0.020464f, +0.003003f, +0.005182f, -0.003737f, +0.010290f, +0.008081f, - +0.012382f, +0.002511f, -0.001763f, -0.019275f, -0.016976f, +0.007840f, +0.006027f, +0.004785f, -0.004800f, +0.004778f, - -0.003893f, -0.005899f, -0.001971f, +0.002722f, +0.006995f, -0.001256f, -0.002578f, -0.001984f, -0.003511f, +0.000638f, - +0.004959f, -0.002009f, -0.000531f, -0.000373f, -0.004082f, -0.004995f, +0.000668f, +0.004121f, -0.005083f, -0.001863f, - -0.002317f, -0.001554f, -0.001793f, +0.000342f, -0.002548f, -0.000036f, +0.000224f, +0.003447f, -0.001896f, +0.001118f, - +0.000834f, -0.000334f, +0.001781f, -0.000029f, +0.001159f, +0.000666f, -0.000408f, -0.001790f, +0.001456f, +0.000294f, - +0.000349f, -0.001343f, -0.001820f, -0.000241f, +0.000547f, +0.001803f - }, - { - +0.103698f, -0.243994f, -0.089203f, +0.007699f, +0.055970f, -0.002233f, +0.000983f, -0.019505f, -0.007726f, +0.014469f, - -0.037414f, -0.019412f, +0.015797f, +0.013351f, -0.000191f, +0.004856f, +0.004672f, +0.004520f, -0.006298f, +0.008605f, - +0.005124f, -0.016803f, -0.000022f, -0.003730f, -0.006005f, +0.008862f, +0.007937f, +0.010427f, +0.010559f, +0.004937f, - +0.004158f, -0.001361f, -0.003817f, -0.006302f, -0.014972f, +0.006357f, +0.005817f, -0.004071f, +0.000331f, +0.015423f, - +0.027111f, +0.000597f, -0.004251f, -0.002129f, -0.004816f, +0.007899f, +0.013425f, +0.006463f, -0.000546f, +0.001687f, - -0.003062f, +0.003395f, +0.003687f, +0.009653f, +0.010427f, -0.003718f, +0.001386f, -0.000615f, +0.001903f, -0.001395f, - +0.004341f, -0.000319f, +0.001533f, +0.000226f, +0.003847f, -0.000387f, -0.000892f, +0.002208f, -0.001663f, -0.003438f, - +0.000370f, +0.002485f, +0.000325f, +0.001142f, +0.005137f, -0.000419f, +0.001364f, -0.000277f, -0.001605f, +0.002174f, - +0.002368f, +0.001313f, -0.000995f, +0.001196f, +0.000697f, -0.001681f, +0.001818f, -0.001202f, -0.000199f, +0.001836f, - +0.000626f, -0.002273f, -0.001337f, +0.001602f, +0.000857f, -0.001807f - }, - { - -0.003943f, +0.034798f, +0.023899f, -0.038661f, +0.004360f, -0.009683f, +0.022942f, -0.001734f, -0.001002f, +0.005445f, - +0.008132f, +0.020271f, +0.006596f, -0.026315f, +0.064534f, -0.005287f, +0.025935f, +0.019195f, +0.025675f, -0.012376f, - -0.001633f, +0.022224f, +0.010530f, +0.001679f, +0.007443f, +0.003351f, +0.033167f, +0.003972f, +0.001118f, +0.014804f, - +0.016865f, -0.002986f, -0.003290f, -0.016058f, -0.005937f, -0.008070f, -0.005556f, +0.006761f, +0.011645f, -0.007975f, - -0.014289f, +0.006719f, +0.006233f, -0.000675f, -0.005054f, +0.012691f, +0.002535f, +0.000780f, -0.006666f, +0.003470f, - -0.001543f, +0.001864f, -0.003262f, +0.004306f, -0.003039f, -0.001135f, +0.002769f, +0.006649f, +0.008216f, -0.002392f, - -0.004220f, +0.001886f, -0.003598f, -0.008969f, +0.000291f, -0.001550f, -0.000334f, +0.003538f, +0.003897f, -0.003456f, - -0.002608f, -0.003318f, +0.003409f, +0.005743f, +0.003248f, +0.000540f, +0.003510f, +0.000036f, +0.000394f, +0.001424f, - -0.000710f, +0.000415f, +0.000638f, +0.000860f, -0.005522f, -0.003438f, +0.001312f, +0.000538f, +0.001408f, -0.001202f, - +0.000898f, +0.001408f, +0.000469f, -0.000352f, -0.000343f, +0.000809f - }, - { - +0.041241f, -0.239305f, -0.049526f, -0.033275f, -0.013919f, +0.033893f, -0.037738f, +0.010255f, +0.011648f, -0.008807f, - -0.001090f, +0.000035f, +0.022528f, -0.011463f, +0.005390f, +0.018350f, +0.019709f, -0.003103f, -0.000288f, -0.015292f, - -0.045097f, +0.005248f, -0.009166f, -0.003489f, +0.000322f, -0.003689f, -0.003808f, +0.014937f, -0.004416f, -0.006222f, - +0.008523f, -0.005376f, -0.002960f, -0.006807f, -0.010251f, -0.005002f, +0.008567f, +0.005300f, -0.018867f, +0.004501f, - +0.001762f, -0.008140f, +0.003684f, +0.011128f, +0.013442f, +0.003935f, -0.002898f, +0.010755f, +0.000173f, +0.000866f, - +0.002185f, +0.008630f, -0.003483f, -0.000360f, -0.004062f, -0.006805f, +0.002052f, +0.000780f, +0.005977f, +0.001185f, - +0.012113f, +0.001699f, +0.003639f, -0.005105f, +0.001267f, -0.000716f, -0.001070f, -0.004472f, -0.000054f, -0.002436f, - +0.000578f, +0.002832f, -0.000569f, -0.001435f, +0.000270f, +0.004193f, +0.000699f, +0.000315f, -0.000532f, -0.000494f, - -0.000426f, -0.002117f, +0.001502f, +0.000299f, -0.002329f, +0.000128f, -0.001692f, +0.000222f, -0.000362f, -0.001301f, - -0.000221f, -0.000556f, -0.001591f, -0.000767f, -0.001567f, -0.000577f - }, - { - -0.005700f, -0.052324f, +0.013349f, +0.003760f, -0.010448f, -0.007867f, -0.011998f, +0.009468f, +0.006310f, +0.006855f, - +0.002886f, -0.009771f, -0.006195f, -0.020492f, -0.055444f, +0.042932f, +0.022178f, -0.003891f, -0.018541f, +0.027447f, - -0.030121f, -0.024559f, +0.017764f, -0.007749f, -0.006398f, -0.003252f, +0.010877f, +0.009569f, +0.004754f, +0.015690f, - -0.012924f, -0.015171f, -0.011123f, +0.006235f, -0.005975f, +0.008526f, -0.007558f, +0.014060f, +0.004730f, -0.001041f, - -0.002326f, +0.006613f, -0.012208f, +0.002567f, -0.002360f, -0.009479f, +0.012571f, +0.002185f, +0.004082f, -0.009246f, - -0.000001f, +0.002851f, -0.000870f, +0.001904f, +0.001928f, -0.000040f, -0.000839f, -0.003443f, +0.003197f, -0.009808f, - +0.001347f, +0.002756f, -0.011074f, -0.003977f, +0.000172f, +0.000261f, +0.003080f, +0.004753f, -0.003129f, +0.003965f, - +0.003586f, -0.005927f, -0.002024f, -0.002214f, -0.005124f, +0.001325f, +0.005035f, +0.000434f, -0.000968f, -0.003009f, - -0.000398f, +0.000268f, -0.004497f, -0.001584f, -0.001877f, -0.002827f, -0.005182f, -0.002272f, -0.000667f, -0.001608f, - +0.002238f, +0.000236f, +0.001664f, -0.000743f, +0.000006f, +0.001671f - }, - { - +0.028170f, +0.443481f, +0.052738f, +0.031704f, +0.055632f, +0.063672f, +0.029775f, +0.018372f, +0.005659f, +0.018960f, - +0.029101f, +0.003610f, -0.003180f, -0.021330f, +0.014566f, +0.031703f, -0.032509f, +0.012358f, -0.024398f, -0.012334f, - -0.025354f, -0.018325f, +0.000090f, +0.000195f, +0.009480f, +0.012885f, -0.025377f, -0.000257f, -0.003982f, -0.002271f, - +0.005461f, +0.010335f, +0.010201f, +0.000367f, +0.003185f, +0.008082f, +0.005677f, +0.000415f, +0.000891f, +0.006122f, - +0.007005f, -0.005470f, +0.011877f, +0.001225f, +0.008733f, -0.006858f, -0.000220f, -0.018515f, -0.023878f, -0.014758f, - -0.002609f, -0.011360f, +0.003181f, +0.010283f, +0.007918f, +0.004053f, +0.005806f, -0.009705f, -0.004782f, -0.003463f, - +0.002897f, +0.000115f, -0.001281f, +0.000835f, -0.000755f, -0.005343f, -0.006076f, -0.002278f, -0.000000f, -0.001994f, - -0.006922f, +0.001349f, -0.002878f, -0.003442f, +0.002670f, +0.001575f, +0.000722f, -0.000275f, -0.000584f, -0.005085f, - -0.000075f, -0.001252f, +0.000990f, -0.000865f, -0.001187f, -0.003914f, -0.001540f, -0.000102f, +0.000988f, -0.002885f, - -0.002941f, -0.000263f, -0.000215f, -0.000022f, -0.000640f, -0.000793f - }, - { - -0.001217f, -0.116855f, -0.003782f, -0.005846f, +0.000236f, -0.010071f, -0.008898f, -0.006162f, +0.006074f, +0.005505f, - +0.017047f, +0.014950f, +0.026071f, -0.019274f, +0.154294f, -0.004877f, +0.013044f, -0.014577f, +0.033255f, -0.040182f, - -0.027412f, -0.030630f, -0.028630f, -0.029247f, -0.010025f, -0.019827f, -0.032227f, -0.006575f, -0.027476f, +0.008436f, - +0.014025f, -0.010689f, +0.018075f, +0.000774f, +0.000277f, -0.006134f, +0.007532f, -0.004415f, -0.000781f, +0.006990f, - +0.010685f, +0.000744f, -0.000265f, -0.018701f, -0.004349f, +0.003526f, +0.020245f, +0.005318f, -0.003034f, -0.000308f, - -0.000346f, +0.007597f, +0.000476f, -0.006589f, -0.003901f, -0.006471f, +0.001665f, +0.000128f, +0.001997f, -0.000133f, - +0.004978f, +0.001759f, -0.001762f, -0.006774f, -0.003215f, -0.000874f, -0.001312f, +0.002896f, -0.000117f, +0.000763f, - -0.004199f, -0.009778f, -0.001714f, +0.001018f, +0.004241f, -0.002157f, -0.003905f, +0.000633f, +0.004194f, +0.002250f, - +0.003043f, -0.000175f, +0.000968f, +0.002218f, -0.000902f, -0.000099f, -0.001442f, +0.000967f, +0.003653f, +0.003335f, - +0.000932f, +0.000160f, -0.000400f, +0.000741f, +0.000359f, +0.001439f - }, - { - -0.035979f, +0.260265f, +0.010535f, +0.058886f, +0.048701f, +0.001147f, +0.008272f, +0.002554f, +0.014733f, +0.007370f, - -0.012025f, +0.006598f, +0.006239f, +0.026456f, +0.004964f, -0.003777f, +0.012387f, -0.017912f, -0.038292f, -0.004655f, - -0.001036f, +0.005620f, +0.003879f, -0.006657f, +0.008235f, +0.000837f, -0.010590f, -0.010832f, +0.020655f, +0.007281f, - +0.010674f, +0.004752f, +0.016985f, +0.001313f, +0.001366f, -0.014922f, -0.008637f, -0.000196f, +0.000057f, -0.014035f, - +0.002898f, -0.014284f, +0.003020f, +0.019202f, -0.010028f, -0.003163f, -0.002958f, +0.004089f, -0.001421f, -0.003024f, - +0.004164f, +0.002340f, -0.000125f, +0.000715f, +0.005169f, +0.002161f, -0.000481f, -0.006521f, -0.002681f, +0.000587f, - +0.000359f, +0.002449f, +0.000809f, -0.006584f, +0.002070f, -0.000682f, +0.000257f, +0.004099f, +0.002668f, -0.002878f, - -0.001649f, -0.002841f, -0.003605f, +0.000185f, -0.001082f, +0.001183f, +0.002821f, -0.000849f, -0.000502f, -0.002005f, - -0.004327f, +0.001486f, -0.001728f, +0.004036f, -0.001348f, +0.000407f, +0.001516f, +0.000128f, -0.001162f, +0.002103f, - -0.000721f, -0.003404f, -0.001847f, +0.000873f, +0.000079f, -0.000331f - } - }, - { - { - +0.002178f, -0.012052f, +0.018461f, -0.028448f, +0.014607f, -0.000363f, -0.003940f, +0.004568f, +0.000569f, +0.000663f, - -0.013744f, +0.022319f, +0.012097f, -0.024065f, +0.005546f, -0.043245f, +0.006952f, +0.012753f, +0.000141f, +0.000399f, - -0.052357f, +0.001493f, -0.020711f, +0.002435f, +0.040137f, +0.020445f, +0.013271f, -0.024544f, +0.006373f, -0.006744f, - +0.001367f, -0.013415f, -0.006043f, +0.011906f, +0.011933f, +0.002301f, -0.000250f, +0.011003f, +0.004173f, +0.003949f, - -0.000420f, -0.009598f, +0.002179f, +0.009611f, +0.003262f, -0.001552f, +0.003867f, +0.007481f, -0.004525f, +0.005883f, - +0.003840f, -0.008903f, +0.004515f, -0.003183f, -0.001411f, +0.000761f, +0.000496f, -0.002233f, +0.003482f, -0.001033f, - +0.002321f, +0.003333f, +0.000181f, +0.002097f, +0.004955f, -0.001619f, -0.000908f, +0.000730f, -0.000256f, -0.001249f, - +0.001367f, +0.000466f, +0.001163f, +0.000605f, -0.003010f, -0.001190f, -0.001307f, +0.000288f, -0.002146f, -0.000607f, - -0.001629f, +0.001496f, +0.000317f, +0.001145f, +0.000541f, -0.002540f, -0.000094f, -0.000250f, -0.000086f, -0.001179f, - +0.001123f, -0.000038f, +0.000062f, +0.000690f, +0.000387f, +0.000234f - }, - { - +0.008567f, -0.289920f, +0.100177f, -0.009776f, -0.004973f, +0.007158f, +0.003418f, -0.020652f, +0.027951f, +0.000907f, - -0.032180f, +0.009064f, +0.008358f, -0.009722f, -0.007937f, +0.005188f, -0.010927f, +0.014627f, -0.006027f, +0.006476f, - -0.005018f, +0.010033f, -0.003022f, -0.002826f, +0.007035f, +0.004673f, +0.003244f, +0.004547f, -0.003974f, +0.002335f, - -0.000507f, -0.006903f, +0.003500f, -0.006949f, +0.002806f, -0.011471f, -0.000578f, +0.005705f, +0.002857f, +0.004302f, - +0.003040f, +0.001395f, +0.003533f, -0.000791f, +0.000950f, -0.003828f, -0.007626f, -0.004985f, +0.005475f, -0.000343f, - +0.002348f, -0.000152f, +0.004333f, +0.001846f, -0.001857f, +0.002185f, -0.000628f, -0.005322f, +0.002420f, -0.001275f, - -0.001549f, +0.001483f, +0.000724f, +0.000832f, -0.001915f, +0.003035f, +0.002355f, +0.003406f, -0.001357f, -0.000372f, - +0.001704f, +0.002010f, -0.000609f, +0.001111f, -0.002661f, +0.001786f, -0.000888f, +0.000499f, +0.000937f, +0.001203f, - -0.002981f, +0.000058f, -0.000341f, -0.000153f, +0.000388f, -0.000260f, +0.000754f, -0.001543f, +0.000139f, +0.000545f, - -0.001056f, -0.000234f, +0.000249f, -0.000318f, +0.000928f, -0.000099f - }, - { - +0.002682f, -0.019565f, +0.035110f, -0.031363f, +0.011324f, -0.000422f, -0.004103f, +0.008655f, -0.006384f, -0.002974f, - +0.026803f, -0.005020f, -0.018519f, +0.043118f, -0.002872f, -0.022928f, -0.008792f, -0.025045f, -0.025400f, +0.005024f, - -0.011282f, +0.009772f, +0.013687f, -0.006254f, -0.001731f, -0.000000f, -0.006854f, +0.000852f, +0.002140f, +0.006090f, - +0.000687f, -0.005073f, +0.011713f, -0.003496f, +0.004647f, +0.002590f, +0.005030f, +0.001703f, -0.004950f, -0.006618f, - +0.012626f, +0.004654f, -0.003221f, -0.002561f, +0.002170f, +0.003521f, -0.001476f, -0.003200f, -0.002567f, +0.004689f, - +0.000482f, -0.000206f, +0.000916f, +0.000499f, +0.004084f, -0.006613f, +0.001251f, -0.002046f, -0.005536f, -0.004439f, - -0.001067f, -0.000428f, -0.004144f, +0.001948f, -0.001151f, +0.000885f, -0.004550f, +0.000441f, -0.000022f, +0.001316f, - -0.000205f, +0.000066f, +0.002525f, +0.000545f, -0.001008f, -0.002478f, +0.003436f, -0.000891f, -0.001573f, +0.000575f, - -0.000377f, +0.001431f, -0.001830f, -0.002534f, -0.000146f, -0.000329f, -0.001321f, +0.001207f, -0.001341f, -0.000065f, - +0.000230f, -0.000896f, -0.001150f, +0.000104f, +0.000779f, +0.000555f - }, - { - +0.002836f, -0.043753f, -0.004679f, +0.008075f, -0.000714f, +0.000394f, -0.000304f, -0.000032f, -0.001593f, -0.002359f, - -0.002116f, +0.004684f, +0.001586f, +0.015029f, +0.054821f, -0.016801f, +0.001676f, -0.000611f, +0.042920f, -0.001047f, - -0.003659f, +0.019109f, -0.011065f, +0.005417f, +0.017577f, -0.018260f, +0.003782f, -0.000708f, -0.009578f, +0.008179f, - -0.009957f, -0.003980f, -0.009302f, -0.004395f, +0.000402f, +0.020801f, -0.015914f, +0.001972f, +0.008079f, -0.000280f, - +0.001994f, -0.010106f, +0.000011f, +0.009866f, +0.005154f, -0.005531f, +0.002585f, -0.004013f, +0.006470f, +0.004540f, - -0.002254f, -0.000296f, +0.000424f, +0.000105f, +0.000289f, -0.002143f, +0.000204f, +0.008278f, -0.003643f, +0.000778f, - +0.001577f, -0.001162f, -0.002766f, -0.001384f, +0.004244f, -0.006294f, +0.003637f, -0.001962f, +0.000974f, -0.001166f, - +0.000717f, -0.001713f, +0.000348f, -0.001132f, -0.000860f, -0.000459f, +0.001168f, -0.000815f, -0.000548f, -0.002493f, - +0.001362f, -0.000343f, -0.001990f, +0.001345f, +0.000304f, -0.002102f, +0.000737f, +0.000155f, +0.000403f, -0.000776f, - -0.001402f, +0.000056f, +0.000806f, -0.001945f, +0.000200f, -0.000615f - }, - { - +0.011501f, -0.306944f, +0.069632f, -0.037924f, -0.006455f, +0.001605f, -0.007381f, -0.010403f, +0.006364f, +0.006221f, - +0.003251f, -0.023547f, +0.014967f, -0.016105f, +0.015379f, -0.003458f, +0.012896f, -0.002221f, +0.015415f, -0.009124f, - -0.007123f, +0.021113f, -0.017713f, -0.012375f, +0.013588f, +0.002373f, +0.013836f, +0.020880f, -0.019175f, +0.004873f, - -0.000751f, -0.003474f, +0.010972f, +0.004685f, -0.008980f, +0.005296f, -0.006436f, +0.008522f, +0.014977f, -0.008113f, - +0.005698f, -0.004787f, +0.009149f, -0.004985f, +0.003103f, +0.002613f, +0.000160f, +0.000322f, +0.000640f, -0.003998f, - +0.004223f, -0.005192f, +0.001976f, -0.000321f, +0.002513f, +0.001563f, -0.004843f, -0.000923f, +0.007530f, +0.004809f, - -0.002051f, -0.004712f, +0.000446f, +0.001269f, +0.004818f, -0.000225f, -0.001471f, +0.001632f, -0.000047f, +0.001034f, - -0.001054f, -0.001321f, -0.001055f, +0.001906f, +0.002136f, +0.001684f, +0.002654f, -0.002014f, +0.000380f, +0.000109f, - +0.000364f, -0.000764f, +0.001497f, -0.000351f, +0.001562f, -0.001671f, -0.000107f, +0.000432f, +0.000802f, +0.001272f, - +0.000063f, -0.000412f, +0.000188f, +0.000817f, -0.000656f, +0.000062f - }, - { - +0.000108f, -0.007908f, +0.004688f, -0.001790f, +0.005209f, -0.001483f, -0.000323f, +0.005546f, -0.002301f, +0.001987f, - +0.001564f, -0.002724f, -0.009804f, +0.002704f, +0.078061f, -0.020533f, +0.001180f, +0.014991f, -0.006867f, +0.010899f, - -0.001203f, -0.022241f, +0.009190f, -0.007871f, +0.018549f, +0.013414f, -0.006277f, -0.012093f, +0.006091f, -0.029183f, - +0.003293f, -0.007052f, +0.003041f, +0.009589f, -0.003878f, -0.019571f, +0.003580f, -0.004445f, -0.000949f, +0.002523f, - +0.004000f, -0.015928f, +0.001810f, -0.002423f, +0.000141f, -0.000048f, +0.002270f, +0.002121f, +0.004943f, +0.003879f, - +0.000715f, -0.000576f, +0.004538f, +0.003618f, +0.000523f, -0.001190f, -0.005235f, +0.005369f, -0.003321f, +0.002018f, - -0.002387f, +0.000820f, +0.000851f, +0.000563f, +0.001970f, -0.003278f, +0.002598f, -0.002423f, -0.002987f, +0.001196f, - -0.002266f, -0.002204f, -0.000075f, +0.000256f, -0.001856f, -0.000250f, +0.001572f, +0.000641f, +0.000279f, -0.002365f, - +0.001306f, -0.001773f, +0.000101f, -0.000619f, -0.000544f, +0.000466f, +0.000176f, -0.000069f, -0.000059f, +0.000960f, - -0.000009f, +0.000761f, -0.000415f, -0.000480f, +0.000655f, -0.000570f - }, - { - +0.061308f, -0.358616f, +0.055074f, +0.003856f, -0.001251f, -0.003877f, +0.005355f, -0.032091f, -0.005225f, +0.008883f, - +0.013687f, -0.002746f, +0.010163f, -0.011706f, +0.006561f, -0.014450f, -0.019605f, -0.008672f, +0.007998f, -0.018842f, - +0.000863f, +0.004871f, +0.005600f, -0.001816f, +0.002415f, -0.002300f, +0.003885f, -0.004258f, -0.000361f, -0.004343f, - -0.002612f, +0.006527f, -0.012062f, +0.001944f, +0.001078f, +0.001520f, -0.004065f, +0.007277f, -0.009110f, -0.009756f, - -0.004022f, +0.009780f, +0.001451f, -0.003775f, +0.005358f, +0.009355f, -0.005511f, +0.002529f, +0.008639f, -0.002152f, - -0.003936f, +0.005202f, +0.005688f, -0.012157f, +0.005560f, +0.000428f, +0.004095f, -0.006046f, -0.002235f, +0.002675f, - -0.002889f, +0.001870f, +0.001870f, -0.001826f, -0.001134f, +0.001016f, -0.000044f, -0.000666f, -0.002412f, +0.001333f, - -0.001830f, -0.000371f, +0.000972f, -0.000073f, -0.000523f, -0.001840f, -0.000047f, -0.000414f, -0.000579f, -0.000427f, - +0.000712f, -0.001493f, +0.001177f, -0.000372f, -0.001050f, +0.001202f, -0.000667f, -0.000729f, -0.000393f, -0.000569f, - +0.001433f, +0.000668f, -0.001134f, -0.001398f, -0.000695f, -0.000392f - }, - { - +0.000755f, +0.017524f, -0.005048f, -0.010109f, +0.002748f, -0.000370f, +0.000855f, +0.002083f, -0.008578f, +0.000500f, - -0.008322f, -0.000943f, +0.010206f, -0.004161f, +0.063996f, -0.026737f, +0.022662f, +0.015657f, -0.008050f, -0.007251f, - +0.000649f, +0.031035f, +0.002020f, +0.005634f, +0.018595f, -0.009543f, -0.014608f, +0.029534f, -0.038063f, +0.033466f, - -0.017634f, +0.015245f, -0.004367f, -0.012855f, +0.017342f, +0.003533f, +0.006869f, -0.011819f, +0.000999f, -0.008190f, - +0.007719f, +0.004603f, +0.000237f, -0.006117f, -0.005760f, +0.005087f, -0.005380f, +0.002461f, -0.002931f, -0.001638f, - -0.006934f, -0.003376f, -0.000471f, +0.000142f, -0.000018f, -0.004128f, -0.001893f, -0.000563f, +0.001316f, +0.000050f, - +0.000833f, -0.001601f, -0.001918f, -0.001373f, -0.002168f, -0.001544f, +0.001546f, +0.002706f, -0.000154f, +0.002215f, - -0.001477f, -0.000512f, -0.000086f, +0.002505f, -0.001332f, +0.000881f, -0.000152f, +0.001038f, -0.003160f, +0.000401f, - -0.002524f, -0.001162f, +0.001280f, +0.001542f, +0.002423f, -0.000618f, +0.001505f, -0.000909f, +0.001320f, -0.000489f, - -0.000799f, -0.000770f, -0.001590f, -0.000974f, -0.000236f, -0.000189f - }, - { - -0.050564f, -0.309953f, +0.058386f, -0.019412f, +0.005357f, +0.004218f, +0.008953f, -0.005008f, -0.002103f, +0.011106f, - -0.017426f, -0.018654f, +0.000305f, +0.005462f, +0.004047f, +0.008705f, +0.010988f, +0.017515f, -0.007358f, +0.005925f, - +0.006907f, +0.000230f, +0.011992f, -0.001255f, -0.004925f, +0.013550f, +0.002229f, +0.000396f, +0.009307f, +0.003985f, - -0.000168f, -0.002783f, +0.000455f, +0.000094f, -0.005561f, -0.001632f, -0.001769f, +0.004011f, +0.004186f, +0.001800f, - +0.016832f, -0.002931f, -0.000134f, +0.001023f, -0.003203f, +0.005067f, +0.005785f, -0.002715f, -0.003507f, +0.006397f, - +0.000813f, -0.000734f, -0.003047f, +0.000234f, +0.004427f, -0.006432f, +0.000748f, -0.001461f, +0.000987f, -0.004525f, - +0.000692f, -0.001889f, +0.002067f, -0.001114f, +0.001667f, +0.001747f, +0.002565f, +0.001330f, +0.000700f, -0.001195f, - -0.001565f, -0.000316f, -0.000801f, -0.000920f, +0.003454f, -0.000778f, +0.000535f, -0.000281f, +0.000940f, +0.002917f, - -0.001702f, -0.000773f, -0.000116f, +0.000554f, +0.000503f, -0.000276f, +0.003633f, -0.000516f, -0.001366f, +0.000677f, - +0.000476f, -0.002445f, -0.001089f, +0.001766f, +0.000191f, -0.000458f - }, - { - +0.005521f, -0.011096f, -0.007666f, -0.024821f, +0.002027f, -0.011020f, +0.021318f, -0.003240f, -0.001544f, +0.003379f, - -0.012256f, -0.000351f, +0.009359f, -0.035129f, +0.020939f, -0.013868f, +0.029695f, +0.011947f, +0.038943f, -0.000163f, - -0.000591f, +0.025737f, +0.004527f, -0.003856f, +0.001154f, -0.003366f, +0.021308f, -0.016023f, -0.021752f, -0.000976f, - +0.003139f, -0.011210f, -0.000162f, -0.008465f, -0.003171f, -0.005746f, -0.009831f, -0.001544f, +0.000278f, -0.007204f, - -0.000695f, +0.011055f, -0.002442f, -0.002001f, -0.002536f, +0.003680f, -0.005244f, -0.002331f, -0.007511f, +0.002973f, - +0.000113f, +0.002392f, -0.002205f, +0.003596f, -0.001853f, -0.001981f, -0.003129f, +0.002133f, +0.005068f, -0.006859f, - -0.003767f, +0.001298f, -0.003295f, -0.006069f, -0.001633f, -0.001725f, +0.001005f, +0.001933f, +0.002422f, -0.002697f, - +0.001861f, -0.001864f, +0.001547f, +0.001964f, +0.001703f, +0.001887f, +0.001336f, -0.001486f, +0.002197f, +0.002312f, - +0.000131f, +0.000658f, +0.000552f, +0.003038f, -0.001333f, -0.001092f, +0.000702f, -0.000049f, +0.001524f, -0.001698f, - -0.000666f, +0.000607f, +0.000025f, -0.000382f, -0.000809f, -0.000062f - }, - { - -0.033735f, -0.202946f, +0.065766f, +0.003585f, -0.005361f, +0.040879f, -0.045668f, +0.011427f, +0.017297f, -0.005980f, - -0.000327f, -0.007312f, +0.018259f, -0.006215f, -0.004434f, +0.007676f, +0.001608f, -0.000996f, +0.015705f, +0.017414f, - -0.020102f, +0.016583f, -0.006714f, -0.003004f, +0.003989f, -0.005608f, -0.016943f, +0.003705f, +0.004125f, -0.005763f, - +0.003675f, -0.003760f, -0.004573f, +0.000833f, -0.008795f, -0.009266f, +0.006317f, +0.003807f, -0.011439f, +0.004710f, - +0.003067f, -0.010179f, -0.000857f, +0.002695f, +0.002436f, -0.000377f, -0.005716f, +0.004109f, -0.002268f, -0.000002f, - -0.002736f, +0.006257f, -0.002217f, +0.002278f, +0.003564f, -0.001686f, +0.001973f, +0.002169f, +0.001678f, -0.004060f, - +0.005385f, -0.002736f, +0.000835f, -0.002326f, +0.004586f, -0.000274f, -0.002661f, -0.004782f, +0.001926f, -0.002303f, - +0.001424f, +0.003991f, -0.000143f, -0.000589f, +0.000039f, +0.001894f, +0.000248f, +0.001061f, +0.001612f, +0.001277f, - -0.000444f, -0.001234f, +0.002176f, +0.001631f, -0.001814f, +0.001642f, -0.000547f, +0.001028f, +0.000142f, -0.000636f, - +0.000303f, -0.000159f, -0.001426f, +0.000477f, -0.000341f, +0.001065f - }, - { - +0.004791f, -0.064656f, -0.005109f, +0.000200f, +0.000530f, +0.004507f, -0.004652f, +0.003064f, +0.002319f, +0.005314f, - +0.006597f, -0.001811f, +0.011237f, -0.020594f, -0.063772f, +0.026430f, -0.001469f, +0.020328f, -0.021509f, +0.004350f, - +0.007937f, +0.008449f, -0.010275f, -0.027567f, -0.005672f, +0.014882f, +0.010660f, +0.010329f, +0.004784f, +0.007473f, - -0.014294f, +0.001906f, +0.003999f, +0.008765f, -0.009826f, +0.005836f, -0.009262f, +0.006551f, -0.001123f, +0.004447f, - -0.006094f, +0.010380f, -0.006443f, -0.002962f, +0.001766f, -0.002817f, +0.010878f, +0.001395f, +0.003029f, -0.000369f, - +0.005241f, -0.001906f, -0.003742f, -0.002125f, +0.000474f, -0.001706f, +0.001089f, -0.002721f, +0.001659f, -0.006755f, - +0.003433f, +0.000536f, -0.006860f, +0.003913f, +0.002660f, -0.000665f, -0.001377f, -0.000072f, -0.004669f, +0.001396f, - +0.001287f, -0.003206f, +0.001116f, +0.001600f, -0.001260f, -0.000693f, -0.000512f, -0.003034f, +0.000006f, +0.000141f, - +0.000665f, -0.001590f, -0.002191f, +0.002700f, +0.000685f, -0.000705f, -0.001936f, -0.000778f, +0.000404f, -0.001147f, - +0.000092f, -0.001480f, +0.000754f, -0.000177f, -0.000202f, +0.001069f - }, - { - -0.083502f, +0.257166f, +0.008855f, -0.016928f, +0.008505f, +0.023732f, -0.000291f, -0.002417f, +0.009865f, +0.016770f, - +0.015826f, +0.000428f, +0.007488f, -0.013827f, -0.005739f, +0.024294f, -0.029300f, +0.019893f, -0.000738f, +0.010957f, - -0.013448f, -0.003881f, +0.007818f, -0.000252f, +0.012677f, +0.034084f, -0.006969f, +0.019839f, -0.001581f, -0.011600f, - -0.002401f, +0.000243f, -0.000310f, -0.001843f, +0.008999f, +0.000526f, -0.003580f, -0.000744f, +0.006084f, +0.003024f, - +0.007545f, -0.000644f, +0.009407f, -0.004424f, +0.008210f, -0.012056f, +0.002318f, +0.001250f, -0.004082f, -0.002693f, - +0.007572f, +0.004054f, +0.004717f, +0.004220f, -0.003060f, -0.005010f, +0.004405f, -0.002721f, +0.000383f, -0.002547f, - +0.000925f, -0.003125f, +0.000476f, +0.000870f, -0.005353f, -0.002499f, -0.000297f, -0.001248f, -0.001775f, -0.000827f, - -0.001378f, +0.001037f, -0.002614f, -0.001109f, +0.001415f, -0.000386f, +0.002582f, +0.002391f, +0.000707f, -0.002780f, - +0.000645f, -0.000625f, +0.001169f, +0.000544f, +0.000835f, -0.002104f, -0.000056f, +0.000198f, +0.000550f, -0.000973f, - -0.000009f, +0.000162f, -0.000279f, +0.000567f, -0.000168f, -0.000208f - }, - { - +0.000054f, -0.104799f, +0.009045f, +0.003323f, +0.004477f, -0.002545f, +0.002959f, -0.002299f, +0.008619f, -0.005620f, - +0.002663f, -0.001755f, +0.007774f, -0.040495f, +0.122681f, -0.020084f, +0.017879f, -0.027421f, +0.024278f, -0.009801f, - -0.004461f, -0.009445f, -0.001432f, -0.015844f, +0.000974f, -0.008336f, -0.002003f, +0.014386f, -0.025949f, +0.002379f, - +0.008369f, -0.008766f, +0.021801f, +0.001108f, -0.008998f, -0.001031f, +0.004327f, -0.010362f, +0.006526f, +0.006412f, - +0.010928f, -0.005243f, -0.004656f, -0.006639f, +0.002779f, -0.005030f, +0.010822f, +0.002606f, -0.004299f, -0.002618f, - +0.000322f, +0.004282f, -0.003759f, -0.003591f, +0.001737f, -0.004879f, +0.003500f, -0.000494f, +0.001005f, -0.002889f, - +0.002564f, -0.001900f, +0.001765f, -0.000044f, -0.000619f, +0.002706f, +0.001316f, -0.002376f, -0.002498f, +0.002824f, - -0.000889f, -0.003759f, +0.003552f, +0.000069f, +0.000469f, +0.000830f, +0.000898f, +0.001494f, +0.001204f, -0.002023f, - +0.000723f, -0.001262f, -0.000142f, +0.001401f, -0.001250f, +0.000549f, -0.001934f, -0.000641f, +0.000078f, +0.000558f, - +0.000393f, -0.000436f, -0.001379f, +0.000660f, -0.000322f, -0.000161f - }, - { - -0.005483f, +0.261057f, -0.024098f, +0.013438f, -0.000260f, -0.047108f, -0.014051f, -0.002762f, +0.004866f, +0.000204f, - +0.008354f, +0.005559f, -0.014488f, +0.011127f, +0.001063f, +0.002106f, +0.017287f, +0.010998f, -0.009752f, +0.004788f, - -0.005504f, -0.000346f, +0.013124f, +0.000951f, -0.000872f, +0.004590f, +0.008444f, -0.012966f, +0.011122f, -0.009093f, - +0.012315f, -0.001547f, +0.002025f, +0.001767f, +0.006428f, -0.007270f, +0.004234f, +0.003883f, +0.005218f, -0.008142f, - +0.006049f, -0.016535f, -0.002428f, +0.016361f, -0.001276f, +0.002839f, +0.001972f, +0.003625f, -0.002661f, -0.006320f, - +0.000427f, +0.002854f, -0.001854f, -0.003848f, -0.001444f, +0.000644f, +0.001411f, -0.003576f, +0.003136f, +0.003244f, - -0.003104f, -0.001122f, +0.002956f, -0.001043f, +0.004871f, -0.000636f, -0.000702f, +0.002103f, +0.002563f, -0.000930f, - -0.000680f, +0.001705f, +0.001749f, +0.001811f, +0.001124f, +0.000248f, -0.000100f, -0.000514f, +0.001566f, +0.000437f, - -0.003057f, +0.001384f, -0.001494f, +0.003813f, -0.001038f, +0.000228f, +0.000638f, +0.001413f, -0.000646f, +0.002344f, - +0.001177f, -0.000328f, -0.000425f, +0.001013f, -0.000003f, -0.001039f - } - }, - { - { - -0.001252f, +0.015087f, -0.003216f, +0.007172f, -0.011113f, +0.002080f, +0.000201f, -0.003833f, +0.002425f, -0.002846f, - -0.008614f, +0.009736f, +0.016326f, -0.004828f, -0.007148f, -0.016755f, -0.001573f, +0.006480f, -0.019113f, +0.003949f, - -0.027741f, -0.011999f, -0.015156f, +0.023168f, +0.018362f, +0.024231f, +0.004110f, -0.015409f, -0.003784f, +0.009952f, - +0.003771f, -0.007407f, -0.005342f, +0.013271f, +0.008925f, -0.003510f, +0.002442f, +0.014134f, +0.004001f, +0.000918f, - +0.002395f, -0.002545f, +0.001100f, +0.003627f, +0.000932f, +0.005779f, +0.005367f, +0.005410f, +0.000244f, -0.003061f, - +0.002969f, -0.000635f, +0.001694f, -0.001941f, -0.002622f, -0.000698f, -0.000586f, +0.002012f, -0.000450f, -0.000308f, - +0.004211f, +0.001294f, -0.000219f, +0.002942f, +0.002634f, -0.003034f, +0.001835f, -0.001691f, +0.000859f, +0.000751f, - +0.000042f, +0.000737f, +0.000389f, +0.000350f, -0.001611f, -0.000184f, -0.001035f, +0.000173f, -0.000214f, -0.002250f, - -0.000024f, +0.001176f, +0.000703f, -0.000194f, -0.000889f, -0.000101f, -0.000660f, -0.000454f, +0.000545f, -0.000788f, - +0.001146f, -0.000458f, -0.000687f, +0.000320f, +0.001265f, -0.000135f - }, - { - -0.002609f, -0.110806f, -0.020799f, +0.022890f, -0.008075f, +0.000764f, -0.003091f, +0.009367f, +0.000849f, -0.000937f, - -0.005012f, -0.006991f, +0.007384f, -0.002178f, -0.008537f, +0.007526f, -0.004412f, +0.005316f, +0.007662f, -0.000402f, - -0.003238f, +0.009167f, -0.000985f, +0.012585f, -0.009463f, +0.009167f, +0.005944f, -0.003479f, +0.002750f, -0.003530f, - +0.000172f, -0.003712f, +0.006463f, -0.003390f, -0.002745f, -0.009180f, +0.005960f, +0.000319f, +0.001210f, +0.006947f, - +0.001895f, +0.004639f, -0.004432f, +0.002763f, -0.001337f, +0.001987f, -0.009095f, +0.003815f, +0.000889f, +0.002467f, - -0.000382f, -0.003747f, +0.001631f, +0.005060f, +0.001407f, -0.001865f, -0.004133f, -0.000835f, +0.000592f, -0.001582f, - -0.001081f, +0.002959f, -0.000381f, -0.001590f, +0.002852f, +0.002199f, +0.003409f, +0.000227f, +0.002676f, -0.000664f, - +0.002108f, +0.000913f, +0.001932f, -0.001401f, +0.000569f, +0.000413f, -0.000565f, -0.000209f, +0.002336f, +0.000202f, - -0.000571f, -0.001077f, +0.000291f, -0.001400f, -0.000022f, -0.000195f, +0.001011f, -0.000659f, -0.000075f, -0.000651f, - -0.000326f, -0.000207f, -0.000009f, +0.000537f, -0.000343f, -0.000075f - }, - { - +0.000239f, +0.036346f, -0.003985f, +0.009143f, -0.012033f, -0.001688f, -0.001138f, +0.004366f, -0.001844f, +0.001533f, - +0.003470f, -0.003668f, +0.009595f, +0.018985f, +0.006627f, -0.016224f, -0.016852f, -0.020028f, -0.017841f, -0.011247f, - -0.003765f, +0.006700f, +0.000884f, +0.005664f, -0.005513f, -0.001109f, -0.007497f, +0.008439f, +0.004058f, -0.001482f, - -0.005394f, +0.003717f, +0.006943f, -0.006150f, +0.004219f, -0.001343f, +0.005528f, +0.003611f, -0.002951f, -0.006146f, - +0.005728f, +0.003067f, +0.000137f, -0.000593f, -0.000464f, +0.003609f, +0.005125f, -0.007384f, +0.000956f, +0.001863f, - +0.003413f, +0.000628f, +0.001450f, +0.001370f, +0.000092f, -0.003072f, -0.002188f, -0.002906f, -0.002158f, -0.002048f, - -0.000841f, -0.001634f, -0.004177f, +0.003832f, -0.001105f, -0.001554f, -0.002456f, -0.000393f, -0.001008f, +0.000278f, - +0.001241f, +0.000032f, +0.000827f, -0.000037f, +0.000224f, +0.000259f, -0.001096f, -0.000591f, -0.001208f, +0.000405f, - +0.000220f, +0.001103f, -0.001345f, -0.001987f, -0.000311f, -0.000130f, +0.000404f, -0.000034f, -0.001047f, -0.000457f, - -0.000564f, -0.000023f, -0.000396f, -0.000279f, +0.000351f, +0.000527f - }, - { - -0.002893f, -0.043871f, +0.004471f, +0.004852f, -0.001024f, +0.000667f, +0.000568f, -0.002535f, -0.002889f, -0.002146f, - +0.002670f, +0.002004f, +0.002102f, +0.005989f, +0.016782f, +0.012595f, +0.014215f, -0.007458f, +0.032676f, -0.000639f, - -0.017304f, +0.012737f, +0.000892f, +0.010385f, -0.006207f, +0.003257f, -0.003685f, -0.004962f, -0.006560f, +0.005913f, - +0.004452f, -0.016261f, -0.021344f, +0.003852f, +0.003645f, +0.006820f, -0.012196f, +0.005614f, +0.003305f, -0.001796f, - -0.002973f, -0.003197f, +0.002239f, +0.006051f, +0.003557f, -0.003690f, +0.000446f, +0.000139f, +0.001425f, +0.002582f, - +0.002261f, -0.002855f, -0.001988f, +0.001306f, -0.000290f, -0.000578f, +0.002708f, +0.002227f, +0.001816f, -0.000732f, - -0.002821f, +0.000533f, -0.001886f, -0.001705f, -0.000132f, -0.001381f, -0.000048f, -0.001509f, +0.001055f, -0.000070f, - -0.000239f, +0.000160f, -0.002593f, -0.000406f, -0.001184f, +0.000173f, -0.000367f, -0.000273f, -0.000953f, -0.001308f, - -0.000276f, +0.000260f, -0.001136f, +0.000422f, -0.000092f, -0.000180f, +0.000387f, -0.000634f, +0.000116f, -0.000474f, - -0.000811f, -0.000407f, -0.000294f, -0.000795f, -0.000188f, -0.000183f - }, - { - -0.035669f, -0.164718f, +0.000755f, -0.043841f, +0.011884f, +0.001623f, -0.004075f, -0.002848f, -0.003134f, +0.003570f, - -0.015227f, -0.000711f, +0.009045f, -0.006390f, +0.002183f, +0.004930f, +0.004686f, +0.016095f, +0.000556f, -0.002819f, - +0.006418f, -0.001683f, +0.000850f, -0.006376f, +0.002798f, +0.011461f, +0.010549f, -0.003153f, -0.004410f, -0.000688f, - -0.000608f, +0.007409f, +0.003728f, +0.000767f, -0.000165f, +0.001887f, +0.001460f, +0.000399f, +0.009282f, -0.002194f, - +0.001876f, +0.002161f, +0.000511f, +0.004470f, +0.003663f, -0.004223f, +0.001951f, +0.001851f, +0.000752f, -0.003719f, - +0.002158f, -0.003117f, +0.001968f, +0.001373f, -0.000013f, -0.001820f, -0.000304f, +0.000262f, +0.003893f, +0.004226f, - -0.001470f, -0.002160f, +0.000675f, +0.003216f, +0.002541f, -0.000934f, +0.000172f, +0.002055f, -0.000047f, +0.001039f, - -0.000672f, -0.000739f, -0.000109f, +0.001760f, +0.001428f, +0.001396f, +0.001019f, -0.000762f, +0.000616f, -0.000317f, - +0.000213f, -0.000331f, +0.000048f, +0.000486f, +0.001443f, -0.001116f, +0.000356f, -0.000044f, +0.000617f, +0.000432f, - +0.000545f, -0.000058f, +0.001034f, +0.000240f, -0.000480f, +0.000561f - }, - { - +0.001960f, +0.001933f, -0.007880f, +0.006362f, -0.000348f, -0.000853f, +0.000914f, +0.003651f, -0.001979f, +0.000179f, - +0.002566f, +0.000394f, -0.005511f, +0.004813f, +0.059592f, -0.010451f, +0.008265f, +0.007398f, -0.005201f, +0.009265f, - -0.007004f, -0.005911f, -0.000447f, -0.011758f, +0.016230f, +0.016386f, -0.022237f, +0.002420f, -0.006890f, -0.022081f, - -0.002721f, -0.003540f, +0.004631f, +0.004955f, -0.001712f, -0.008261f, -0.008748f, -0.009360f, -0.003486f, +0.005285f, - +0.001479f, -0.010373f, -0.004017f, -0.001469f, -0.002687f, +0.000040f, +0.004336f, +0.003500f, +0.003668f, +0.003819f, - +0.000670f, +0.001642f, +0.001279f, +0.003834f, -0.000442f, -0.001764f, +0.000642f, +0.002561f, +0.000332f, +0.000949f, - -0.000757f, -0.001933f, -0.000358f, -0.001838f, +0.001467f, -0.000806f, +0.001484f, -0.001086f, -0.001904f, -0.002535f, - -0.001112f, -0.000875f, -0.000242f, -0.001840f, -0.000909f, +0.001494f, -0.000500f, -0.000949f, +0.000646f, -0.000004f, - -0.001105f, +0.000247f, -0.000402f, -0.000872f, +0.000025f, +0.000271f, +0.000351f, +0.000798f, -0.000270f, +0.000087f, - +0.000375f, +0.000306f, +0.000205f, -0.001061f, +0.000737f, +0.000144f - }, - { - -0.069384f, -0.088555f, -0.025450f, +0.011015f, +0.009506f, -0.001403f, -0.003980f, -0.006828f, -0.019788f, +0.015984f, - +0.002269f, +0.009386f, -0.005467f, +0.007357f, -0.001513f, -0.011634f, -0.023431f, -0.000381f, +0.000511f, +0.000388f, - +0.004499f, -0.004607f, +0.009581f, -0.005667f, -0.002911f, -0.000874f, -0.003150f, +0.004254f, +0.002271f, -0.003024f, - -0.005221f, +0.000560f, -0.001046f, -0.007913f, +0.002077f, +0.004011f, +0.001027f, +0.000546f, -0.002237f, -0.004509f, - -0.007487f, +0.006758f, +0.004387f, -0.001613f, +0.003870f, +0.001172f, +0.002470f, +0.003253f, +0.006741f, -0.002252f, - -0.002907f, -0.000561f, +0.006802f, -0.006558f, +0.001243f, -0.000723f, +0.000729f, -0.002712f, -0.002049f, -0.000715f, - +0.000362f, +0.001604f, -0.000253f, -0.000302f, -0.000369f, +0.000374f, -0.000419f, -0.000941f, +0.001343f, -0.003595f, - +0.000011f, +0.000434f, -0.000796f, +0.000120f, -0.000539f, +0.000368f, -0.000849f, -0.002585f, +0.000033f, +0.001196f, - -0.001831f, -0.000132f, -0.000453f, -0.000830f, +0.000445f, +0.000067f, +0.000562f, -0.000310f, -0.000961f, +0.000149f, - +0.000653f, -0.000730f, -0.000745f, -0.000715f, -0.000475f, -0.000303f - }, - { - +0.001885f, +0.009795f, +0.001229f, -0.002409f, -0.001735f, +0.000354f, +0.001128f, +0.000624f, -0.004072f, -0.001221f, - -0.002894f, -0.001918f, +0.009154f, +0.010463f, +0.032900f, +0.030409f, +0.008799f, -0.011329f, -0.010124f, -0.020016f, - +0.023389f, +0.023661f, -0.004032f, +0.007930f, +0.003996f, +0.009542f, -0.008762f, +0.013222f, -0.014543f, -0.002152f, - +0.011761f, +0.003071f, +0.001703f, -0.002771f, +0.004859f, +0.007685f, +0.002846f, -0.010575f, -0.004953f, -0.001475f, - +0.002690f, +0.004948f, -0.003388f, +0.001671f, -0.000576f, -0.002085f, -0.008936f, +0.002087f, +0.001161f, -0.002310f, - -0.008485f, -0.002488f, -0.001502f, -0.000642f, +0.001447f, -0.007028f, +0.001500f, +0.000494f, -0.000391f, -0.001646f, - -0.000250f, -0.001360f, -0.002664f, -0.000561f, -0.001083f, +0.000183f, -0.000492f, +0.000122f, +0.001131f, +0.001796f, - -0.000688f, -0.000253f, -0.000065f, +0.001549f, -0.000340f, +0.000265f, -0.000368f, +0.000222f, -0.002606f, -0.000486f, - -0.002104f, -0.000121f, +0.000886f, +0.001570f, +0.000744f, +0.000342f, -0.000333f, +0.001002f, +0.000039f, -0.000735f, - +0.000026f, -0.000655f, -0.000375f, -0.001483f, -0.000722f, -0.000317f - }, - { - -0.001398f, -0.287156f, -0.024284f, -0.006410f, +0.009638f, +0.007504f, +0.002538f, +0.002562f, -0.000102f, -0.006720f, - +0.006180f, -0.012397f, -0.003761f, -0.014332f, +0.007201f, +0.012274f, +0.006466f, +0.012143f, -0.007925f, +0.007616f, - +0.004154f, +0.013534f, -0.000915f, +0.001994f, -0.001717f, +0.002814f, +0.009533f, +0.001971f, +0.002767f, +0.003471f, - -0.003355f, +0.000662f, -0.002680f, +0.005324f, -0.004022f, -0.001345f, -0.007502f, +0.002154f, +0.004386f, +0.004810f, - +0.011012f, -0.003817f, +0.000870f, +0.001282f, +0.000722f, +0.000824f, +0.003336f, -0.002458f, -0.000228f, +0.001597f, - +0.002087f, -0.001414f, -0.002354f, +0.003904f, -0.001169f, -0.003528f, -0.000029f, -0.001130f, -0.000168f, -0.000508f, - -0.002783f, -0.000277f, -0.000614f, +0.000900f, +0.001331f, +0.001799f, +0.002985f, -0.000223f, +0.000367f, -0.000127f, - +0.000578f, -0.002827f, -0.000176f, -0.000599f, +0.000440f, +0.001193f, -0.000403f, +0.000289f, +0.000742f, +0.002033f, - -0.001775f, +0.000037f, +0.000757f, -0.001404f, +0.001176f, +0.000982f, +0.001618f, +0.000140f, -0.000842f, +0.000158f, - -0.000151f, -0.001417f, -0.000113f, +0.000012f, +0.000151f, +0.000855f - }, - { - -0.006485f, -0.025973f, -0.004124f, +0.008033f, -0.003028f, -0.006111f, +0.009161f, -0.002287f, +0.000197f, -0.001247f, - -0.010643f, +0.001522f, -0.008185f, -0.009793f, -0.003250f, +0.004381f, +0.020014f, +0.013656f, +0.018731f, +0.009169f, - +0.004980f, +0.023170f, -0.007382f, +0.005027f, -0.004909f, +0.014523f, -0.005119f, -0.016895f, -0.010452f, -0.006347f, - +0.003523f, -0.008212f, -0.005223f, +0.001054f, -0.009840f, -0.003613f, -0.010226f, -0.004918f, -0.001245f, -0.003539f, - -0.000438f, +0.006718f, +0.003547f, -0.007081f, -0.000479f, -0.002243f, -0.004746f, -0.000175f, -0.000189f, -0.004480f, - +0.001048f, -0.002628f, +0.004124f, -0.002946f, -0.000012f, +0.002815f, -0.005805f, +0.002636f, -0.000842f, -0.004383f, - -0.001064f, -0.001505f, -0.000302f, -0.003863f, -0.003401f, -0.000495f, -0.000040f, +0.000098f, +0.001415f, -0.001071f, - +0.001689f, +0.000135f, -0.000092f, +0.001183f, +0.001640f, +0.000432f, +0.002054f, +0.000630f, +0.001480f, +0.001117f, - +0.001756f, +0.000052f, -0.000059f, +0.001478f, -0.000415f, +0.001592f, -0.000275f, -0.000200f, +0.000599f, -0.001081f, - -0.001392f, +0.000006f, -0.000064f, -0.000057f, -0.000118f, -0.000590f - }, - { - +0.025090f, -0.201293f, -0.000988f, +0.006277f, +0.006425f, -0.005305f, -0.000039f, +0.000711f, +0.009397f, -0.005769f, - -0.001961f, +0.002757f, -0.001528f, +0.003362f, +0.005854f, -0.006889f, +0.008557f, -0.001082f, +0.016908f, +0.010033f, - -0.000211f, +0.003697f, -0.002309f, +0.001352f, -0.009656f, -0.000860f, -0.010933f, -0.001511f, +0.002248f, -0.006343f, - -0.000943f, -0.000515f, -0.001661f, -0.002756f, -0.004713f, -0.003654f, +0.002278f, +0.000281f, +0.000624f, -0.003887f, - +0.001208f, -0.006277f, +0.001194f, +0.000364f, -0.000874f, -0.000403f, -0.002870f, -0.000006f, -0.001615f, +0.003379f, - +0.001380f, +0.001757f, -0.002599f, -0.001439f, +0.003595f, +0.002524f, +0.003394f, +0.000905f, -0.000837f, +0.000258f, - -0.000939f, -0.000311f, -0.000368f, -0.000389f, +0.001572f, -0.001748f, -0.002426f, +0.000871f, -0.002182f, -0.002444f, - +0.002835f, +0.001252f, +0.001476f, -0.000139f, +0.000947f, -0.000123f, +0.000071f, +0.001168f, +0.001618f, +0.000830f, - -0.000543f, +0.000909f, +0.000223f, +0.001345f, -0.000142f, +0.001060f, +0.000097f, -0.000372f, +0.000451f, -0.000090f, - -0.000247f, -0.000584f, -0.000281f, +0.000581f, +0.000439f, +0.000625f - }, - { - -0.003454f, -0.065734f, +0.005207f, -0.003682f, -0.000253f, +0.000717f, +0.005409f, -0.000890f, +0.001779f, +0.004638f, - +0.006758f, +0.003725f, -0.002322f, -0.037407f, -0.021318f, +0.012839f, -0.000154f, -0.003260f, -0.010935f, -0.003038f, - +0.016322f, +0.003844f, -0.014519f, -0.022001f, +0.001680f, +0.022301f, +0.008032f, -0.008357f, +0.012897f, -0.000630f, - -0.004409f, +0.007153f, +0.017395f, -0.003789f, -0.001054f, -0.007960f, +0.006036f, +0.001333f, -0.001514f, +0.001616f, - -0.003044f, +0.003333f, +0.002291f, -0.003810f, +0.000300f, +0.000207f, +0.007593f, +0.001935f, +0.001872f, +0.003709f, - +0.003983f, -0.003553f, -0.001779f, -0.000659f, -0.003089f, -0.001473f, +0.001185f, -0.002029f, +0.002000f, -0.002798f, - -0.000658f, -0.000284f, -0.000059f, +0.001566f, +0.000864f, +0.000005f, -0.001734f, -0.002328f, -0.000490f, -0.001666f, - +0.001163f, -0.001409f, -0.000591f, +0.000931f, +0.001094f, -0.001729f, -0.002358f, -0.001159f, -0.000125f, -0.000238f, - +0.001528f, -0.002330f, +0.000021f, +0.000550f, +0.000826f, +0.000444f, -0.000249f, -0.000494f, -0.000485f, -0.000955f, - -0.000568f, -0.000406f, +0.000200f, +0.000718f, -0.000345f, +0.000483f - }, - { - +0.101952f, +0.010906f, -0.006288f, -0.021925f, +0.003011f, -0.022170f, +0.024229f, +0.016045f, +0.004467f, +0.014644f, - +0.006182f, +0.007930f, -0.011807f, +0.013675f, -0.007654f, +0.006675f, -0.007217f, +0.002888f, +0.001257f, +0.012371f, - +0.001650f, -0.000303f, -0.005366f, +0.007600f, +0.006712f, +0.021560f, +0.018939f, +0.004970f, -0.005540f, -0.004667f, - +0.003160f, -0.004382f, -0.005135f, +0.000095f, +0.005070f, -0.003572f, -0.003085f, +0.000141f, +0.006202f, +0.000703f, - +0.009285f, +0.000706f, +0.003482f, +0.003015f, +0.003149f, -0.008074f, -0.001162f, +0.006471f, -0.001407f, +0.004916f, - +0.003134f, +0.011052f, +0.000621f, -0.000665f, -0.004126f, -0.003112f, +0.000231f, +0.001545f, -0.000861f, -0.001200f, - -0.000784f, -0.000637f, +0.000710f, -0.001050f, -0.006191f, -0.000973f, -0.002113f, +0.002024f, -0.002684f, -0.002101f, - +0.002167f, -0.001357f, -0.001665f, +0.001127f, +0.000230f, -0.001451f, +0.002671f, +0.002552f, +0.000157f, +0.000474f, - -0.000573f, +0.000572f, -0.000149f, +0.001517f, +0.000587f, -0.001163f, +0.000489f, -0.000045f, +0.000351f, +0.000123f, - +0.000126f, -0.000508f, -0.000438f, +0.000616f, +0.000048f, -0.000083f - }, - { - +0.000353f, -0.088462f, -0.002842f, -0.000404f, +0.005743f, -0.000310f, +0.004584f, +0.002871f, +0.004698f, -0.003567f, - -0.002869f, -0.015154f, +0.009230f, -0.003437f, +0.060992f, -0.008814f, +0.004323f, +0.001022f, -0.000714f, +0.014767f, - -0.007442f, -0.012539f, +0.007095f, -0.009838f, +0.000163f, -0.006026f, +0.013267f, -0.008562f, +0.007304f, -0.007825f, - -0.004410f, +0.005356f, +0.009724f, +0.003038f, -0.006120f, +0.003758f, -0.000040f, -0.009132f, +0.009038f, +0.007575f, - +0.003885f, -0.001464f, -0.007974f, -0.001824f, +0.004281f, -0.002081f, +0.002426f, +0.000378f, -0.002987f, -0.001922f, - +0.003292f, -0.001881f, +0.001013f, -0.003132f, +0.000256f, +0.001212f, -0.002095f, +0.003665f, +0.000154f, -0.004614f, - +0.001372f, -0.000680f, +0.002547f, +0.000157f, -0.000936f, +0.002407f, +0.000750f, -0.001851f, -0.001547f, +0.000873f, - -0.000733f, -0.000484f, +0.001487f, +0.000725f, +0.000729f, -0.000442f, +0.003136f, +0.001319f, +0.000061f, -0.001044f, - -0.000931f, +0.000147f, -0.000143f, +0.000734f, -0.000808f, -0.000277f, +0.000097f, -0.001636f, +0.000243f, +0.000577f, - -0.000614f, -0.000233f, -0.000607f, -0.000206f, +0.000032f, -0.001296f - }, - { - +0.041458f, +0.151156f, +0.031011f, -0.019178f, -0.016562f, -0.038871f, +0.004207f, -0.010546f, +0.008062f, +0.006296f, - -0.000777f, +0.009160f, -0.015217f, +0.011732f, -0.001561f, +0.008715f, +0.001922f, +0.002801f, -0.006506f, +0.010333f, - +0.006667f, -0.008176f, +0.009325f, -0.003632f, +0.010323f, -0.002369f, +0.014562f, -0.006408f, -0.001239f, -0.003592f, - +0.009455f, -0.000695f, -0.006970f, +0.010373f, +0.001535f, -0.000629f, +0.000371f, +0.003294f, +0.009438f, -0.002343f, - -0.010270f, -0.003313f, +0.000841f, +0.006529f, +0.010025f, +0.001166f, +0.005365f, -0.004758f, -0.001993f, +0.003357f, - -0.003944f, +0.000103f, -0.003915f, -0.001274f, -0.003034f, +0.001802f, +0.000031f, -0.001608f, +0.004122f, -0.000159f, - -0.002835f, +0.003501f, +0.000668f, +0.002575f, +0.000292f, -0.000227f, +0.001452f, +0.001915f, +0.000554f, -0.001414f, - +0.001700f, +0.001917f, +0.002115f, +0.001611f, +0.002202f, -0.000367f, -0.000409f, +0.001190f, +0.000174f, +0.000157f, - -0.002151f, +0.000358f, +0.001882f, +0.000021f, +0.000985f, -0.000320f, +0.000216f, +0.000066f, +0.000539f, +0.001664f, - +0.001234f, +0.000478f, +0.000158f, +0.000300f, -0.000278f, -0.000513f - } - }, - { - { - +0.000631f, +0.021361f, -0.000159f, +0.023536f, -0.003921f, +0.001508f, +0.000702f, -0.005872f, +0.004194f, +0.004573f, - -0.004539f, -0.009018f, +0.004472f, -0.004773f, +0.004024f, +0.006612f, +0.008595f, +0.014722f, -0.021854f, +0.017780f, - +0.000430f, -0.005252f, -0.007239f, +0.014315f, +0.004384f, +0.023225f, -0.002188f, -0.004764f, +0.006786f, +0.009953f, - +0.000638f, -0.000442f, -0.006063f, -0.002604f, -0.001076f, -0.009142f, -0.001049f, +0.006936f, +0.001781f, -0.000275f, - +0.006315f, +0.002247f, -0.002801f, -0.002180f, -0.003693f, +0.003939f, +0.002591f, +0.001335f, -0.000471f, -0.004888f, - +0.001006f, +0.002240f, +0.002882f, -0.002631f, -0.002018f, +0.000412f, -0.002347f, +0.001006f, -0.000909f, -0.000119f, - +0.003029f, -0.001618f, -0.001269f, +0.002169f, +0.000476f, -0.003340f, +0.001882f, -0.001580f, -0.000332f, -0.000460f, - -0.001297f, +0.000062f, -0.001159f, +0.000117f, +0.000872f, +0.001678f, -0.000329f, +0.000582f, +0.000920f, -0.000938f, - +0.000741f, +0.000682f, +0.000486f, +0.000375f, -0.000250f, +0.000507f, -0.000124f, -0.000174f, +0.000567f, -0.000259f, - +0.000597f, -0.000330f, -0.000583f, -0.000346f, +0.000693f, -0.000135f - }, - { - -0.006554f, -0.029139f, +0.013403f, +0.015156f, -0.001181f, +0.002733f, -0.005715f, +0.005818f, -0.008736f, -0.003809f, - +0.004784f, -0.002457f, +0.007656f, +0.001719f, -0.004707f, +0.004940f, -0.005003f, +0.009052f, +0.011205f, +0.005579f, - +0.000246f, +0.010129f, -0.004372f, -0.005629f, -0.008566f, +0.013516f, +0.005390f, -0.006202f, +0.002422f, +0.002306f, - +0.001437f, -0.001234f, +0.008381f, -0.009896f, -0.001341f, -0.001198f, +0.007532f, -0.001671f, -0.004980f, -0.004420f, - -0.001178f, +0.007175f, -0.003901f, +0.003379f, -0.000511f, +0.000986f, -0.008256f, +0.001986f, -0.002849f, +0.004612f, - +0.003502f, -0.002178f, -0.001029f, +0.001803f, +0.002256f, -0.001746f, -0.002061f, +0.001156f, +0.000070f, +0.000966f, - +0.000449f, +0.001491f, -0.001111f, -0.000088f, +0.003727f, +0.000743f, +0.001651f, -0.001505f, +0.001757f, -0.000229f, - +0.000319f, -0.000847f, +0.001046f, -0.001100f, +0.001713f, +0.000180f, -0.000570f, -0.001361f, +0.001272f, -0.000077f, - +0.001218f, -0.000480f, +0.000338f, -0.001128f, +0.001033f, +0.000638f, +0.000325f, -0.000229f, +0.000452f, +0.000366f, - +0.000205f, -0.000047f, -0.000438f, +0.000432f, -0.000628f, -0.000336f - }, - { - -0.001139f, +0.031601f, -0.006240f, +0.050468f, +0.012818f, -0.000100f, -0.002876f, -0.002265f, -0.002594f, -0.000267f, - -0.004235f, -0.007781f, -0.000787f, +0.005202f, +0.011325f, +0.001165f, +0.000049f, +0.002133f, -0.005411f, +0.002946f, - +0.008286f, -0.000219f, -0.007882f, +0.001754f, -0.006583f, -0.002158f, -0.003914f, +0.007313f, +0.005980f, -0.001783f, - -0.007100f, -0.002000f, -0.000942f, -0.003204f, +0.005678f, -0.010190f, -0.000902f, +0.005317f, +0.001843f, -0.006358f, - +0.001153f, +0.003350f, +0.000044f, -0.002302f, -0.000756f, -0.000009f, +0.003277f, -0.004151f, +0.002463f, +0.000477f, - +0.002386f, +0.000924f, +0.002064f, +0.000047f, -0.000235f, -0.001159f, -0.001432f, +0.000799f, +0.002663f, +0.000636f, - +0.000232f, +0.000234f, -0.002318f, +0.001231f, -0.002968f, +0.000164f, +0.000303f, -0.001432f, -0.003058f, -0.000781f, - +0.000032f, -0.001116f, +0.001035f, +0.001501f, +0.001578f, +0.001012f, -0.000707f, +0.000873f, -0.000120f, +0.000960f, - +0.001142f, +0.000392f, -0.001362f, +0.000055f, +0.000319f, -0.001015f, +0.000325f, -0.000200f, -0.001056f, -0.000081f, - -0.000147f, +0.000616f, +0.000140f, -0.000050f, +0.000129f, +0.000526f - }, - { - +0.001177f, -0.040975f, +0.000693f, +0.002093f, -0.000965f, -0.000222f, +0.000412f, -0.002431f, -0.005064f, +0.000097f, - +0.004178f, -0.001963f, -0.002497f, +0.006976f, -0.011023f, -0.026560f, +0.001475f, -0.006399f, +0.007584f, +0.015222f, - -0.007363f, +0.002503f, -0.003983f, +0.001909f, -0.015330f, +0.016821f, +0.005356f, +0.000158f, +0.000933f, -0.002520f, - +0.000231f, -0.006784f, -0.013107f, +0.001979f, -0.003092f, -0.001635f, -0.006671f, +0.005604f, +0.001853f, -0.001317f, - -0.004032f, -0.003587f, -0.003572f, +0.000414f, +0.004345f, -0.002806f, +0.003546f, -0.001337f, -0.001923f, +0.000101f, - +0.000880f, -0.003533f, -0.001025f, +0.002872f, -0.000050f, +0.001239f, +0.002564f, -0.000562f, +0.001581f, -0.000168f, - -0.001475f, +0.000767f, -0.000901f, -0.000238f, +0.000917f, +0.001117f, +0.000258f, -0.002838f, -0.000151f, -0.000622f, - -0.001427f, +0.000387f, -0.000607f, +0.001641f, +0.000377f, +0.000954f, -0.001079f, -0.000571f, +0.000108f, +0.000621f, - -0.000362f, +0.000247f, +0.000070f, +0.000632f, +0.000297f, +0.000642f, +0.000187f, -0.000884f, -0.000750f, -0.000422f, - +0.000160f, -0.000044f, +0.000369f, +0.000011f, -0.000232f, +0.000008f - }, - { - +0.040979f, -0.065364f, +0.006996f, -0.040753f, -0.003544f, +0.002879f, +0.005167f, +0.004927f, -0.008633f, -0.005310f, - -0.005057f, +0.012006f, +0.013922f, -0.002284f, -0.005686f, -0.006705f, -0.009935f, +0.010960f, -0.001970f, -0.002534f, - +0.003523f, -0.008500f, +0.005741f, -0.000296f, -0.004787f, +0.002635f, +0.006899f, -0.005806f, -0.006243f, -0.003798f, - -0.006493f, +0.003721f, -0.003026f, -0.002471f, +0.002263f, +0.000786f, +0.007359f, +0.002362f, +0.004714f, -0.003132f, - -0.004311f, -0.001663f, -0.002869f, +0.003394f, +0.000546f, -0.003878f, +0.005708f, +0.002265f, +0.000538f, -0.002846f, - -0.000399f, -0.001578f, +0.000799f, -0.001972f, -0.001078f, -0.002067f, +0.001531f, -0.002782f, -0.002053f, +0.001760f, - -0.000787f, -0.000979f, +0.000617f, +0.001515f, +0.000343f, -0.001148f, +0.000148f, +0.001014f, -0.000527f, +0.000299f, - +0.001020f, +0.000808f, +0.000869f, +0.000278f, +0.000603f, +0.001699f, +0.000706f, -0.000180f, -0.000429f, -0.001490f, - -0.000668f, +0.000014f, -0.000099f, -0.000323f, +0.000093f, -0.000747f, +0.000715f, -0.000401f, -0.000026f, +0.000133f, - +0.000558f, -0.000284f, +0.000120f, -0.000291f, -0.000259f, +0.000579f - }, - { - -0.000826f, +0.004562f, +0.004455f, +0.004613f, -0.002718f, -0.000247f, +0.000163f, +0.002608f, +0.000124f, +0.001448f, - +0.001174f, +0.002764f, -0.004265f, +0.001013f, +0.032336f, -0.016219f, +0.014624f, +0.003873f, -0.011991f, +0.007180f, - +0.008399f, +0.008129f, +0.000732f, -0.021001f, +0.004429f, +0.020857f, -0.034092f, -0.008120f, -0.005603f, +0.004712f, - +0.017901f, -0.003065f, -0.000642f, -0.003292f, -0.005793f, +0.000895f, +0.001088f, +0.000950f, -0.001805f, +0.000048f, - +0.001109f, -0.005725f, -0.003624f, -0.000463f, -0.000704f, +0.001424f, +0.001437f, -0.002206f, -0.000969f, +0.001880f, - -0.001058f, +0.000213f, +0.000570f, -0.000096f, -0.001553f, +0.000235f, +0.001136f, +0.000653f, -0.000123f, +0.000893f, - -0.000178f, -0.002814f, -0.000255f, -0.001722f, -0.001691f, -0.001995f, +0.001272f, +0.000252f, +0.000782f, -0.001203f, - +0.000797f, +0.002411f, +0.001077f, -0.001309f, -0.000466f, +0.000642f, -0.001069f, -0.000310f, -0.000047f, +0.000257f, - -0.000044f, +0.001785f, +0.000806f, -0.000235f, -0.000468f, -0.000189f, +0.000618f, +0.001160f, -0.000101f, +0.000131f, - +0.000244f, -0.000600f, +0.000564f, -0.000020f, +0.000889f, +0.000377f - }, - { - +0.047506f, +0.111960f, +0.019853f, +0.019490f, -0.009139f, +0.002914f, +0.004713f, +0.013173f, -0.013656f, +0.006643f, - -0.006758f, +0.015686f, -0.001382f, +0.009802f, -0.001966f, -0.007536f, -0.009289f, +0.008301f, +0.002379f, -0.005271f, - -0.002176f, -0.002880f, +0.006381f, -0.010587f, -0.003652f, -0.003510f, -0.002759f, +0.005214f, +0.000271f, -0.001667f, - -0.005257f, +0.001730f, +0.004048f, -0.005472f, +0.000577f, -0.000657f, +0.002115f, +0.000895f, +0.001977f, +0.004924f, - -0.004763f, +0.002682f, -0.002713f, -0.005710f, +0.000214f, -0.003127f, +0.008754f, -0.000391f, +0.001875f, -0.003417f, - -0.001382f, +0.000912f, +0.003626f, -0.003225f, -0.001088f, -0.003806f, -0.000912f, +0.000526f, +0.000460f, +0.000026f, - +0.003533f, +0.001491f, +0.001046f, +0.002258f, -0.000934f, +0.000256f, +0.001616f, +0.000567f, +0.000832f, -0.003255f, - +0.000767f, -0.000201f, -0.001252f, +0.000243f, -0.000118f, +0.001694f, -0.000362f, -0.001905f, +0.000577f, +0.002073f, - -0.000939f, +0.000383f, -0.000468f, -0.001224f, +0.000352f, -0.000382f, +0.000280f, +0.000053f, -0.000221f, +0.000298f, - -0.000141f, -0.000219f, +0.000230f, +0.000050f, +0.000257f, -0.000105f - }, - { - -0.000453f, -0.001761f, +0.007672f, +0.005596f, +0.000891f, +0.001428f, +0.000328f, +0.000957f, -0.002814f, +0.003283f, - +0.003408f, -0.005802f, -0.004166f, +0.004894f, +0.021119f, +0.018246f, -0.001263f, -0.015794f, -0.001761f, -0.024170f, - -0.007519f, -0.005279f, -0.012870f, +0.006113f, +0.000411f, +0.014167f, -0.004092f, +0.012190f, -0.005777f, -0.010690f, - +0.001307f, -0.014655f, +0.002952f, +0.005461f, -0.006357f, -0.003024f, -0.004958f, -0.008264f, +0.003031f, +0.001090f, - -0.000230f, +0.002010f, -0.002782f, -0.000817f, -0.002303f, +0.001571f, -0.005618f, +0.005233f, +0.000119f, +0.000391f, - -0.003709f, -0.000733f, -0.002221f, -0.003033f, +0.003358f, -0.004820f, +0.003277f, +0.002609f, +0.000563f, -0.001764f, - -0.003356f, -0.003883f, -0.001458f, +0.001403f, +0.000203f, -0.000090f, -0.001072f, -0.001953f, -0.001728f, +0.001415f, - +0.000622f, -0.000589f, -0.001222f, +0.001012f, -0.000161f, -0.000833f, -0.001990f, -0.000379f, -0.000895f, +0.000257f, - -0.000356f, +0.000372f, -0.000167f, +0.000091f, -0.001143f, +0.000058f, -0.001044f, +0.000502f, -0.000550f, -0.000284f, - +0.001015f, +0.000021f, +0.000416f, -0.000184f, -0.000513f, -0.000258f - }, - { - +0.037579f, -0.193603f, +0.027441f, +0.013520f, -0.009866f, +0.000176f, -0.004153f, +0.000581f, -0.001421f, -0.011329f, - +0.005950f, -0.007194f, +0.002778f, -0.013479f, -0.005520f, -0.007407f, -0.008157f, -0.006230f, -0.013551f, +0.003002f, - -0.002418f, +0.007909f, -0.008628f, -0.001629f, +0.001768f, +0.001834f, +0.005664f, -0.002945f, +0.000957f, +0.005106f, - -0.004328f, +0.001425f, -0.003623f, +0.006666f, -0.002560f, +0.007055f, -0.004876f, +0.000082f, -0.000549f, +0.002542f, - +0.006909f, -0.005377f, -0.001917f, -0.002319f, +0.001705f, -0.001484f, -0.003037f, -0.002786f, -0.000297f, -0.005651f, - +0.002775f, +0.000583f, -0.001020f, +0.006648f, -0.003365f, -0.002001f, +0.001355f, +0.002692f, +0.002308f, -0.000783f, - -0.003054f, +0.001221f, -0.001122f, -0.000793f, -0.000935f, -0.002025f, -0.000453f, -0.000546f, -0.001430f, -0.000837f, - +0.002023f, -0.000717f, +0.000526f, -0.000745f, -0.000559f, -0.000044f, -0.000808f, +0.000962f, +0.000693f, +0.001158f, - -0.001920f, +0.000623f, +0.001404f, -0.001074f, +0.000649f, -0.000733f, -0.000753f, -0.000660f, -0.000359f, +0.000834f, - +0.000441f, -0.000474f, +0.000165f, -0.000662f, -0.000033f, +0.000709f - }, - { - +0.005367f, -0.020868f, -0.014177f, +0.008040f, -0.007105f, -0.014427f, -0.000378f, +0.002574f, +0.002614f, -0.002024f, - -0.001543f, +0.006935f, +0.002769f, +0.007312f, +0.013994f, +0.014076f, +0.002842f, +0.003229f, -0.001861f, +0.003149f, - +0.002990f, +0.008618f, -0.006728f, +0.015560f, +0.000618f, +0.010750f, -0.009151f, -0.006324f, +0.001051f, -0.010723f, - +0.001446f, -0.000815f, -0.004726f, +0.003195f, -0.003966f, +0.004162f, +0.002802f, +0.003016f, +0.000549f, +0.004120f, - -0.000196f, -0.000597f, +0.005862f, -0.002244f, +0.002670f, -0.000374f, -0.004131f, -0.000123f, +0.002857f, -0.002243f, - +0.001647f, -0.002131f, +0.005007f, -0.004441f, +0.000207f, +0.002577f, -0.006388f, +0.001342f, -0.001001f, +0.000244f, - +0.002437f, -0.000797f, +0.002036f, -0.001608f, -0.002371f, +0.000004f, -0.001213f, -0.001241f, +0.000619f, -0.000062f, - +0.000083f, +0.000530f, +0.000632f, -0.000257f, +0.000193f, -0.000668f, +0.001569f, +0.000520f, -0.000363f, -0.000284f, - +0.001120f, -0.000123f, -0.000884f, +0.000166f, -0.001266f, +0.001194f, -0.000095f, -0.000744f, -0.000427f, -0.000510f, - -0.000245f, +0.000652f, +0.001129f, +0.000288f, +0.000125f, +0.000072f - }, - { - -0.015995f, -0.228278f, +0.013865f, -0.001427f, -0.007200f, -0.028106f, +0.016840f, -0.003688f, -0.003905f, -0.006498f, - +0.009538f, +0.006558f, -0.010387f, -0.000697f, +0.020684f, -0.004495f, +0.009447f, +0.000426f, +0.013689f, +0.001422f, - -0.003799f, -0.001771f, -0.005734f, -0.001075f, -0.007814f, +0.003513f, -0.003215f, +0.006936f, -0.003054f, -0.008347f, - -0.000909f, +0.001628f, +0.000619f, -0.003021f, +0.008652f, +0.008984f, +0.000422f, -0.001258f, +0.003822f, -0.002811f, - +0.002470f, -0.000186f, +0.005657f, +0.000527f, -0.001390f, +0.001989f, -0.000688f, -0.000236f, +0.001896f, +0.004233f, - +0.000965f, -0.000334f, -0.003387f, -0.001149f, +0.001277f, +0.000100f, +0.002160f, -0.000594f, +0.002390f, +0.000772f, - -0.004106f, -0.001095f, -0.001262f, -0.001088f, +0.001394f, +0.000102f, -0.000244f, +0.001111f, -0.001866f, -0.001480f, - +0.000666f, -0.001081f, -0.000082f, -0.002160f, -0.000656f, -0.000557f, +0.000660f, -0.000860f, -0.000805f, +0.000777f, - -0.000612f, +0.000660f, -0.000508f, +0.000478f, +0.000586f, -0.000409f, -0.000097f, +0.000167f, +0.000375f, -0.000657f, - -0.000749f, -0.000497f, +0.000029f, +0.000130f, +0.000133f, +0.000306f - }, - { - +0.001128f, -0.064215f, -0.000831f, -0.001152f, +0.000715f, -0.006049f, -0.001143f, -0.004684f, -0.003105f, -0.002436f, - +0.000122f, +0.001158f, -0.005401f, -0.007521f, +0.019881f, +0.004639f, -0.005120f, -0.006649f, -0.008428f, -0.007810f, - -0.011720f, -0.015454f, -0.007950f, -0.020334f, +0.011817f, +0.014160f, -0.015114f, -0.015760f, +0.006902f, -0.003913f, - +0.011691f, +0.010905f, +0.010796f, -0.008309f, -0.000711f, -0.001784f, +0.015884f, +0.005344f, +0.001296f, -0.000781f, - -0.001470f, +0.000806f, -0.000358f, -0.003000f, +0.003243f, +0.004073f, +0.003823f, -0.003219f, +0.005121f, +0.003943f, - +0.000454f, -0.002146f, -0.001797f, +0.000338f, -0.002359f, -0.001799f, +0.001942f, -0.000110f, +0.003680f, -0.000185f, - -0.001796f, +0.000003f, -0.000128f, -0.001220f, +0.001080f, -0.000249f, -0.001763f, -0.001037f, +0.002338f, -0.001378f, - -0.000206f, -0.001135f, -0.001436f, +0.000074f, +0.001757f, +0.000134f, -0.000476f, -0.000192f, +0.000772f, -0.000736f, - +0.000342f, -0.000859f, +0.001262f, -0.000445f, -0.000727f, -0.000545f, -0.000242f, -0.000485f, -0.000112f, -0.000244f, - -0.000159f, +0.000001f, -0.000112f, +0.000141f, -0.000958f, -0.000120f - }, - { - -0.077811f, -0.244827f, -0.000149f, +0.013592f, +0.020904f, -0.041144f, +0.007104f, +0.015484f, +0.013200f, +0.015031f, - -0.007558f, +0.003175f, -0.014598f, +0.021524f, -0.001590f, -0.004614f, -0.009465f, -0.004226f, -0.004405f, +0.009057f, - +0.004638f, +0.004854f, +0.003724f, +0.007051f, -0.013722f, -0.001833f, +0.007053f, -0.007511f, -0.002149f, +0.000981f, - -0.001645f, -0.009694f, -0.005689f, -0.006588f, -0.003691f, -0.005500f, +0.004273f, +0.005848f, -0.001512f, -0.007340f, - -0.000698f, -0.007603f, +0.003318f, +0.003241f, +0.002258f, -0.002197f, -0.002140f, +0.006246f, +0.002869f, +0.007072f, - -0.001234f, +0.008528f, +0.000773f, -0.005865f, -0.005335f, -0.002231f, -0.002135f, +0.002429f, +0.000261f, +0.001369f, - +0.000370f, -0.001432f, -0.001680f, -0.000898f, -0.001742f, +0.001285f, -0.001440f, +0.003931f, +0.000601f, -0.000568f, - +0.001512f, -0.000484f, -0.001501f, +0.000005f, +0.000011f, -0.001305f, +0.001138f, +0.000057f, -0.000137f, +0.000837f, - +0.000142f, +0.001130f, -0.000954f, +0.001083f, +0.000399f, -0.000188f, +0.001326f, -0.000055f, +0.000175f, -0.000195f, - -0.000343f, -0.000955f, -0.001111f, +0.000415f, -0.000323f, -0.000193f - }, - { - -0.001276f, -0.087759f, -0.005329f, -0.000749f, +0.001817f, -0.000745f, +0.003044f, -0.002693f, +0.001649f, +0.002512f, - +0.004156f, -0.002361f, +0.006640f, -0.019800f, +0.032100f, -0.009676f, -0.007050f, -0.001642f, -0.005801f, +0.024524f, - +0.008524f, -0.005609f, +0.007071f, -0.001600f, +0.011633f, +0.000429f, +0.015935f, -0.013386f, +0.016748f, -0.002055f, - +0.002903f, +0.003333f, -0.006391f, +0.001222f, +0.000209f, +0.000670f, +0.003070f, -0.009904f, +0.002081f, +0.005569f, - +0.000915f, +0.002986f, -0.002108f, -0.000393f, +0.004053f, -0.002288f, -0.000082f, +0.001652f, +0.000954f, -0.000377f, - +0.000300f, -0.003615f, +0.004486f, +0.000753f, +0.003591f, +0.001564f, -0.002565f, +0.003498f, +0.000060f, -0.001712f, - +0.003107f, +0.002740f, +0.002810f, -0.000669f, -0.002057f, -0.000133f, +0.000216f, +0.000688f, -0.001044f, +0.000220f, - +0.001285f, +0.001030f, -0.000140f, -0.000414f, -0.000099f, -0.001593f, +0.001576f, -0.001360f, -0.000758f, -0.000133f, - +0.000509f, +0.001473f, +0.000201f, +0.000641f, -0.000660f, +0.000701f, +0.000916f, -0.001175f, +0.001057f, +0.000265f, - -0.000366f, +0.000162f, -0.000242f, +0.000244f, +0.000270f, -0.000881f - }, - { - -0.057711f, +0.001207f, +0.035056f, -0.001933f, -0.011082f, -0.009915f, +0.028519f, -0.001835f, +0.015924f, +0.011410f, - -0.010572f, +0.003134f, -0.009600f, +0.004862f, -0.007872f, +0.010400f, -0.012294f, -0.010325f, -0.009190f, +0.012665f, - +0.005155f, -0.014240f, +0.006356f, +0.000549f, +0.011248f, -0.009164f, +0.004025f, -0.004699f, -0.001141f, -0.003789f, - +0.001384f, -0.004152f, -0.009310f, +0.008780f, +0.003704f, +0.001303f, +0.000088f, +0.003000f, +0.005942f, +0.001298f, - -0.009248f, +0.001437f, +0.004359f, -0.000874f, +0.004071f, +0.003893f, +0.006408f, -0.003830f, -0.000738f, +0.004900f, - -0.001621f, -0.000368f, -0.004016f, +0.001821f, -0.001163f, +0.000589f, -0.000662f, -0.000721f, +0.003545f, -0.000960f, - -0.002676f, +0.002730f, -0.000989f, +0.001748f, -0.000597f, -0.000966f, +0.000680f, +0.001561f, +0.000857f, -0.001947f, - -0.000422f, -0.000333f, +0.000022f, -0.001005f, +0.000869f, +0.000206f, -0.000681f, +0.000776f, -0.000654f, -0.000265f, - -0.001336f, -0.000617f, +0.001351f, -0.000554f, +0.001223f, -0.000766f, +0.000429f, -0.000128f, -0.000384f, -0.000014f, - -0.000073f, -0.000017f, +0.000229f, +0.000092f, -0.000702f, -0.000045f - } - }, - { - { - -0.000973f, +0.017293f, +0.000352f, -0.001860f, +0.016338f, +0.000010f, +0.003004f, -0.002471f, -0.001330f, +0.005912f, - -0.003827f, -0.004653f, -0.007870f, -0.007764f, +0.005155f, +0.005197f, +0.011032f, +0.004662f, +0.009447f, -0.001661f, - +0.001724f, +0.003240f, -0.008783f, +0.007828f, +0.004879f, +0.018418f, +0.001860f, -0.005210f, +0.004582f, +0.002066f, - -0.000556f, -0.000340f, -0.004555f, -0.004078f, -0.005754f, -0.004611f, +0.002187f, -0.000515f, -0.001459f, -0.001223f, - +0.009161f, +0.004824f, -0.006005f, -0.002966f, -0.003901f, +0.002047f, +0.002166f, -0.001868f, +0.001548f, -0.002010f, - -0.000277f, +0.003032f, -0.000936f, +0.000032f, -0.000637f, -0.000100f, -0.001396f, -0.000412f, -0.001020f, +0.001381f, - +0.000239f, -0.000758f, -0.000129f, +0.001519f, -0.001286f, +0.001081f, -0.001050f, +0.000425f, -0.001035f, -0.000133f, - -0.001302f, +0.000410f, -0.001168f, +0.000010f, +0.000556f, +0.000405f, +0.000855f, +0.000351f, +0.000647f, -0.000512f, - +0.000945f, +0.000581f, -0.000101f, +0.001388f, +0.000040f, +0.000400f, -0.000324f, +0.000297f, -0.000367f, +0.000526f, - -0.000227f, -0.000376f, -0.000210f, -0.000081f, -0.000211f, +0.000190f - }, - { - +0.009763f, +0.004454f, -0.034351f, -0.018608f, +0.016159f, -0.000144f, +0.000234f, -0.005902f, -0.002649f, +0.005296f, - -0.008636f, +0.001683f, +0.005663f, +0.001229f, -0.001300f, -0.003418f, -0.005309f, +0.009072f, +0.006164f, +0.003134f, - +0.001791f, +0.012477f, +0.000292f, -0.011256f, +0.008059f, +0.001602f, +0.000261f, -0.004599f, +0.004050f, +0.005592f, - +0.001246f, -0.006871f, +0.002575f, -0.004830f, +0.000663f, +0.000300f, +0.000570f, -0.000308f, -0.003393f, -0.005693f, - +0.000229f, +0.002155f, +0.002937f, -0.000867f, +0.003095f, -0.004861f, -0.000172f, -0.006154f, -0.001405f, +0.004710f, - +0.003651f, +0.001214f, -0.000083f, -0.000854f, +0.000571f, -0.002675f, +0.003413f, -0.001110f, +0.000114f, +0.002887f, - -0.000772f, +0.001588f, -0.000809f, +0.000189f, +0.001123f, +0.001391f, +0.000226f, +0.000812f, +0.000211f, +0.001036f, - -0.000600f, -0.001631f, -0.000239f, -0.000174f, +0.000726f, -0.000002f, +0.000393f, -0.001519f, +0.000221f, +0.000493f, - +0.000759f, -0.000171f, +0.000310f, -0.000693f, +0.001344f, +0.000431f, -0.000165f, +0.000152f, +0.000384f, +0.000822f, - -0.000046f, +0.000006f, -0.000365f, +0.000418f, -0.000226f, -0.000086f - }, - { - -0.001096f, +0.022313f, -0.004648f, +0.036195f, +0.016938f, +0.000861f, -0.002972f, -0.003099f, -0.001159f, +0.000544f, - -0.005685f, +0.007919f, -0.016394f, +0.008968f, +0.000305f, +0.008267f, +0.000170f, +0.002546f, -0.003156f, +0.011450f, - +0.015241f, -0.005330f, -0.017237f, +0.003558f, +0.000452f, -0.009852f, +0.012480f, -0.003109f, +0.006475f, -0.002289f, - -0.001475f, -0.003500f, -0.006414f, +0.000576f, +0.003587f, -0.005415f, +0.002834f, -0.000711f, -0.001607f, -0.000637f, - +0.003545f, +0.002445f, +0.001064f, -0.004704f, +0.000139f, -0.000935f, +0.001266f, +0.000155f, +0.000030f, +0.000048f, - -0.000040f, +0.001571f, +0.003306f, -0.000390f, -0.000523f, -0.000753f, -0.000540f, +0.000865f, +0.002198f, +0.001500f, - -0.000796f, +0.000698f, -0.000625f, -0.001983f, -0.001337f, -0.000781f, +0.001802f, -0.001302f, -0.002002f, -0.001176f, - -0.000292f, -0.000700f, +0.000623f, +0.002168f, +0.000834f, +0.001414f, +0.000440f, +0.000464f, +0.000328f, +0.000124f, - +0.001609f, -0.000406f, -0.000951f, +0.000342f, +0.000065f, -0.000772f, -0.000494f, +0.000242f, -0.000739f, -0.000295f, - +0.000315f, +0.000686f, -0.000124f, +0.000329f, +0.000039f, -0.000138f - }, - { - +0.001129f, -0.051037f, +0.005440f, +0.002638f, -0.000638f, +0.000794f, -0.001314f, +0.001625f, -0.005840f, +0.003220f, - +0.000222f, -0.004674f, -0.008826f, +0.013927f, -0.024110f, -0.011530f, -0.012142f, +0.026837f, -0.036461f, +0.032834f, - -0.003450f, +0.001357f, +0.000850f, -0.003213f, -0.001174f, +0.003654f, +0.011294f, +0.004884f, +0.001911f, -0.004996f, - -0.001521f, -0.004507f, -0.007145f, +0.000394f, -0.002642f, -0.005366f, +0.008311f, -0.004279f, +0.005295f, -0.001872f, - -0.002038f, -0.004355f, -0.002292f, -0.003412f, +0.004816f, -0.002460f, +0.004662f, -0.000648f, -0.000998f, -0.000883f, - -0.001577f, +0.001020f, -0.002195f, +0.002355f, +0.001704f, +0.002786f, -0.000159f, +0.000117f, +0.000014f, -0.000274f, - -0.000488f, +0.001225f, -0.000264f, +0.000272f, +0.000581f, +0.002108f, +0.001050f, -0.002120f, -0.001619f, +0.000698f, - -0.001430f, -0.000895f, +0.000885f, +0.000677f, +0.000698f, +0.001912f, -0.001119f, -0.000912f, +0.000044f, +0.000663f, - -0.000097f, +0.000478f, -0.000273f, +0.000915f, -0.000038f, +0.000430f, -0.000415f, +0.000052f, -0.000500f, -0.000994f, - +0.000163f, +0.000080f, +0.000454f, +0.000348f, -0.000055f, +0.000100f - }, - { - -0.028478f, +0.008696f, +0.002069f, -0.047326f, +0.014084f, +0.003024f, +0.008180f, +0.000785f, +0.002763f, -0.014122f, - +0.009982f, +0.002187f, +0.011877f, +0.002001f, -0.002959f, -0.008782f, -0.010356f, -0.003530f, -0.000308f, +0.008026f, - -0.004985f, -0.006035f, +0.006968f, -0.004802f, -0.006153f, +0.001570f, +0.000586f, +0.001456f, -0.004596f, -0.006207f, - -0.004321f, +0.000997f, -0.008076f, -0.001141f, +0.004803f, +0.005120f, +0.002410f, +0.003199f, +0.001205f, -0.002583f, - -0.004719f, +0.000482f, +0.001461f, -0.001346f, -0.003129f, +0.002009f, +0.005848f, -0.000235f, +0.000250f, -0.003508f, - -0.004041f, +0.003176f, -0.000849f, -0.002803f, -0.000510f, -0.001715f, +0.001000f, -0.001280f, -0.002865f, -0.000838f, - +0.002052f, -0.001115f, -0.000488f, +0.001463f, -0.000087f, -0.001935f, +0.000138f, -0.000062f, +0.000462f, +0.000450f, - +0.000747f, -0.000739f, +0.001501f, +0.000021f, +0.001406f, +0.000372f, +0.000614f, +0.000631f, -0.001338f, -0.000122f, - -0.001311f, +0.000054f, +0.000537f, -0.000450f, -0.000715f, -0.000086f, -0.000150f, +0.000457f, -0.000936f, +0.000195f, - +0.000055f, -0.000038f, -0.000334f, +0.000082f, -0.000187f, -0.000009f - }, - { - -0.001346f, +0.019723f, -0.000836f, -0.002422f, +0.000419f, -0.001402f, +0.001410f, +0.002104f, -0.001715f, +0.003476f, - -0.000098f, +0.002418f, -0.005293f, +0.003895f, +0.016771f, -0.008781f, -0.007015f, +0.010681f, +0.005818f, -0.003336f, - +0.002709f, +0.008355f, +0.004256f, -0.005528f, -0.010140f, +0.010294f, -0.016610f, -0.009766f, -0.000524f, +0.017874f, - +0.007051f, -0.004353f, -0.004571f, -0.001322f, -0.002126f, +0.004693f, +0.003077f, +0.004233f, -0.002614f, -0.003267f, - +0.003773f, -0.005148f, -0.001282f, -0.000532f, +0.001080f, +0.003930f, -0.002385f, -0.003654f, -0.001653f, +0.003472f, - +0.000307f, -0.001499f, +0.001727f, -0.002549f, -0.000493f, +0.001544f, +0.000097f, -0.000159f, -0.000785f, +0.000290f, - -0.001564f, -0.001262f, -0.000837f, +0.000078f, -0.003199f, -0.001011f, -0.000108f, +0.000327f, +0.001642f, -0.001123f, - +0.000920f, +0.002322f, +0.000988f, +0.000207f, -0.000260f, -0.000227f, +0.000054f, +0.000596f, -0.000221f, -0.000454f, - +0.001537f, +0.000679f, +0.000776f, -0.000647f, -0.000003f, -0.000281f, +0.000516f, +0.000643f, +0.000429f, +0.000074f, - -0.000030f, -0.000195f, -0.000052f, +0.000610f, +0.000385f, +0.000259f - }, - { - -0.008571f, +0.188020f, -0.008568f, +0.031091f, +0.010201f, +0.000318f, +0.000859f, +0.019666f, -0.008434f, -0.001519f, - +0.002451f, +0.011166f, +0.007019f, -0.000628f, -0.002804f, -0.011806f, +0.003709f, +0.002190f, +0.000004f, -0.006312f, - +0.000951f, +0.003666f, -0.006096f, -0.006252f, +0.001642f, -0.002885f, -0.000996f, -0.001704f, +0.002720f, -0.000240f, - -0.006532f, +0.001471f, +0.004781f, +0.000030f, -0.002238f, +0.000023f, +0.001062f, +0.002288f, -0.002375f, +0.005553f, - +0.002617f, -0.004832f, -0.001349f, -0.003629f, -0.001992f, -0.001746f, +0.008741f, -0.006230f, +0.002006f, -0.003751f, - +0.001559f, +0.002556f, -0.003613f, +0.000646f, -0.001215f, -0.001062f, -0.001790f, +0.002349f, +0.000854f, -0.000102f, - +0.003139f, +0.001762f, +0.001587f, +0.001941f, -0.000194f, -0.000385f, +0.001496f, +0.001835f, -0.000888f, -0.000874f, - -0.000870f, -0.000692f, -0.000478f, +0.000016f, +0.000101f, +0.001855f, -0.000356f, -0.000722f, +0.000295f, +0.001069f, - -0.000027f, +0.000813f, +0.000439f, -0.000902f, -0.000732f, -0.000642f, +0.000764f, +0.000379f, -0.001071f, +0.000013f, - +0.000045f, +0.000354f, +0.000511f, -0.000141f, +0.000886f, -0.000690f - }, - { - -0.001736f, +0.005523f, +0.005937f, +0.001971f, +0.002739f, +0.001216f, -0.000302f, -0.002417f, -0.000360f, +0.003120f, - +0.003847f, -0.006112f, -0.005254f, +0.005452f, +0.019622f, -0.020173f, +0.001896f, +0.007850f, -0.005185f, -0.020293f, - -0.008009f, -0.007788f, -0.008812f, +0.010854f, -0.009308f, +0.000172f, +0.016028f, +0.005816f, -0.002416f, -0.011589f, - -0.001844f, -0.007956f, -0.000571f, +0.003916f, -0.006938f, -0.005900f, -0.007300f, -0.005176f, +0.009968f, +0.002648f, - -0.004649f, -0.002446f, +0.002342f, -0.001545f, -0.001979f, -0.002098f, -0.001384f, +0.004999f, -0.001133f, -0.001156f, - -0.001662f, +0.002400f, -0.004285f, -0.000549f, +0.001121f, -0.001074f, +0.000296f, +0.002032f, +0.000042f, -0.000040f, - -0.002156f, -0.003663f, -0.001012f, -0.000212f, +0.001747f, -0.000097f, -0.001179f, -0.001092f, -0.002123f, -0.000483f, - +0.001182f, +0.001618f, -0.001917f, -0.000222f, -0.000051f, -0.000890f, -0.000884f, -0.000500f, -0.000439f, -0.000103f, - +0.000195f, -0.000049f, +0.000153f, -0.000655f, -0.000590f, +0.000256f, -0.000824f, -0.000355f, -0.000573f, +0.000685f, - -0.000068f, +0.000552f, +0.000412f, -0.000135f, -0.000508f, -0.000148f - }, - { - -0.049888f, -0.081645f, +0.005626f, +0.032198f, +0.005603f, -0.004636f, -0.001105f, -0.007612f, +0.001004f, +0.002377f, - -0.000860f, -0.013526f, +0.007968f, -0.002669f, -0.019305f, -0.003603f, -0.005844f, -0.017577f, +0.000785f, -0.007369f, - +0.006901f, -0.002120f, -0.001879f, -0.002643f, +0.002444f, +0.002094f, +0.004077f, +0.000503f, -0.001977f, +0.005059f, - -0.000669f, +0.000715f, -0.006837f, +0.005837f, -0.004752f, +0.007603f, -0.000915f, +0.000041f, -0.001207f, +0.004641f, - -0.002821f, -0.000265f, -0.001505f, -0.001210f, +0.000338f, -0.003379f, +0.000875f, -0.003087f, +0.002604f, -0.009498f, - +0.002756f, +0.000343f, -0.000839f, +0.003474f, -0.001887f, -0.000854f, -0.000479f, +0.003555f, +0.003147f, -0.001730f, - -0.002776f, +0.000470f, +0.001068f, -0.001590f, -0.002674f, -0.000917f, -0.002981f, +0.000690f, -0.001563f, -0.001155f, - +0.001055f, +0.000185f, +0.000331f, +0.000093f, +0.000050f, -0.001017f, +0.000007f, +0.000831f, +0.000786f, +0.000591f, - -0.000482f, +0.000330f, +0.000405f, -0.000374f, +0.000360f, -0.000560f, -0.001699f, -0.000569f, +0.000301f, +0.000722f, - +0.000142f, -0.000242f, -0.000190f, -0.000073f, +0.000068f, +0.000406f - }, - { - -0.002803f, -0.020361f, +0.001513f, -0.015564f, +0.003679f, +0.000142f, -0.018963f, +0.011190f, +0.001410f, -0.003742f, - -0.002071f, +0.001210f, +0.010752f, +0.003973f, +0.026532f, +0.007620f, -0.006805f, +0.009636f, -0.008173f, +0.003691f, - +0.003501f, -0.001057f, +0.003653f, +0.009766f, +0.001978f, +0.008220f, -0.005422f, -0.004007f, +0.002086f, -0.005176f, - -0.005655f, +0.003729f, -0.006433f, +0.008923f, -0.001581f, -0.001692f, +0.011517f, +0.004702f, +0.001975f, +0.002050f, - +0.003565f, -0.002904f, +0.007178f, -0.003788f, +0.002754f, -0.002148f, +0.001493f, -0.003288f, +0.001391f, -0.000241f, - +0.003030f, -0.000247f, +0.003558f, -0.003498f, -0.000410f, -0.002223f, -0.000114f, +0.000402f, -0.002087f, +0.000525f, - +0.002078f, -0.000075f, -0.000786f, +0.000824f, -0.002689f, +0.000504f, -0.000919f, +0.000464f, -0.000745f, +0.000618f, - -0.000916f, +0.001016f, +0.000193f, -0.000024f, -0.000082f, -0.000364f, +0.000185f, +0.000139f, -0.000266f, -0.000479f, - +0.000052f, +0.001113f, -0.000954f, -0.000070f, -0.000896f, -0.000148f, +0.000282f, -0.000248f, -0.000880f, +0.000103f, - +0.000123f, +0.000944f, +0.001277f, -0.000356f, +0.000525f, -0.000143f - }, - { - +0.009682f, -0.238430f, -0.006568f, -0.013793f, -0.008123f, +0.000096f, +0.007677f, -0.006038f, -0.004406f, -0.008444f, - +0.009419f, +0.002497f, -0.000295f, -0.004510f, +0.021770f, -0.008543f, +0.006271f, +0.018505f, +0.002431f, +0.003953f, - -0.002857f, -0.009451f, -0.010249f, +0.002939f, -0.006476f, +0.001385f, -0.001245f, +0.006136f, -0.001289f, -0.001695f, - -0.000550f, +0.001074f, +0.001810f, -0.003727f, +0.012236f, +0.008244f, -0.004901f, +0.001946f, +0.003526f, -0.002041f, - +0.003453f, -0.001644f, +0.003018f, +0.001454f, +0.002131f, +0.000998f, -0.000129f, -0.001386f, +0.003455f, +0.000837f, - +0.001624f, +0.000269f, -0.002125f, +0.001200f, -0.001817f, -0.001699f, -0.000093f, +0.001118f, +0.004267f, -0.000423f, - -0.003848f, -0.001415f, -0.000357f, -0.000530f, +0.001338f, -0.000042f, +0.001868f, -0.002482f, +0.000706f, -0.001604f, - -0.000204f, -0.000683f, -0.001749f, -0.000469f, -0.001092f, -0.001057f, +0.000879f, -0.000867f, -0.000738f, +0.000057f, - -0.000371f, -0.000213f, +0.000183f, +0.000129f, +0.001020f, -0.001070f, +0.000094f, +0.000738f, +0.000042f, -0.000876f, - -0.000333f, -0.000313f, -0.000460f, +0.000112f, +0.000186f, -0.000156f - }, - { - +0.001324f, -0.065339f, +0.004474f, -0.005516f, -0.003283f, -0.002870f, -0.007421f, -0.004432f, +0.008554f, -0.004634f, - -0.004422f, +0.001055f, -0.001431f, +0.007396f, +0.013676f, +0.000638f, -0.007760f, -0.000169f, -0.002555f, -0.012673f, - -0.010242f, -0.022724f, -0.007092f, -0.011509f, +0.004113f, +0.007105f, -0.026385f, -0.007078f, +0.009305f, +0.008630f, - -0.005617f, +0.014559f, -0.006729f, +0.001310f, -0.005919f, +0.008498f, +0.005130f, +0.013817f, +0.004084f, -0.007987f, - +0.002362f, +0.004887f, -0.004542f, +0.001999f, -0.002727f, +0.004622f, +0.002006f, -0.004251f, +0.006119f, +0.002013f, - +0.000648f, -0.000551f, +0.000985f, -0.000696f, -0.001592f, -0.002851f, +0.001958f, +0.000692f, +0.002065f, +0.000215f, - -0.000793f, -0.000676f, -0.001508f, -0.002471f, +0.002710f, -0.000777f, -0.001738f, +0.000692f, +0.000019f, +0.000981f, - +0.000396f, -0.001659f, -0.001667f, +0.000473f, +0.000548f, +0.000988f, +0.000988f, -0.001027f, +0.000343f, -0.000230f, - -0.000560f, +0.000618f, +0.000522f, -0.000667f, -0.000452f, -0.000866f, -0.001011f, -0.000065f, -0.000108f, -0.000909f, - +0.000264f, +0.000113f, -0.000354f, -0.000109f, -0.000513f, -0.000142f - }, - { - +0.022673f, -0.373714f, -0.009900f, +0.000787f, +0.031600f, -0.011753f, -0.004965f, +0.006388f, +0.016903f, -0.003656f, - -0.003702f, +0.003070f, +0.000890f, +0.006249f, +0.003489f, -0.007214f, -0.009668f, +0.004944f, -0.008892f, +0.002053f, - +0.009269f, +0.003200f, +0.006554f, -0.003087f, -0.004379f, -0.006768f, -0.003242f, -0.005920f, -0.000886f, +0.004239f, - -0.005837f, -0.006988f, -0.000558f, -0.009018f, -0.004618f, -0.000498f, +0.000690f, +0.006971f, -0.007279f, -0.006664f, - +0.002403f, -0.013085f, +0.003745f, +0.003581f, -0.004515f, +0.002040f, +0.004104f, -0.000864f, +0.006531f, +0.003953f, - +0.000012f, +0.000679f, +0.003156f, -0.005156f, -0.002966f, +0.000727f, -0.004063f, +0.000487f, -0.000567f, +0.003850f, - -0.000017f, -0.001827f, -0.001141f, -0.001633f, +0.000539f, -0.000262f, -0.000980f, +0.001795f, +0.001469f, +0.000823f, - +0.000070f, -0.000356f, -0.000352f, -0.000417f, +0.000794f, -0.000062f, -0.000074f, -0.001417f, +0.001318f, -0.000212f, - +0.000362f, +0.000134f, -0.000208f, +0.000128f, +0.000425f, +0.000469f, +0.000344f, +0.000429f, +0.000570f, -0.000976f, - -0.001189f, -0.000051f, -0.000622f, -0.000365f, -0.000378f, -0.000069f - }, - { - +0.002352f, -0.084206f, -0.018370f, +0.006025f, -0.001206f, +0.005765f, -0.009887f, +0.001233f, -0.000063f, +0.005906f, - +0.003403f, +0.004337f, +0.002363f, +0.000296f, +0.001308f, +0.001091f, -0.009172f, -0.006848f, +0.002657f, +0.018814f, - +0.003671f, +0.001674f, +0.007495f, +0.004074f, -0.001058f, +0.009945f, -0.001318f, -0.008001f, +0.009480f, +0.011477f, - +0.011904f, -0.008254f, -0.006438f, -0.002200f, +0.006423f, -0.007371f, +0.005342f, -0.002001f, -0.000016f, +0.000273f, - +0.004074f, +0.003913f, +0.001567f, -0.002044f, +0.002993f, -0.006046f, +0.002369f, +0.003117f, +0.003568f, -0.002257f, - +0.000247f, -0.002526f, +0.003920f, -0.000888f, +0.003464f, +0.000751f, -0.001607f, +0.002713f, +0.000303f, +0.001037f, - +0.004483f, +0.001427f, +0.002043f, -0.000026f, -0.000980f, -0.001909f, +0.000422f, +0.000585f, +0.000037f, +0.000365f, - +0.000896f, +0.000440f, -0.001503f, +0.000603f, -0.000397f, -0.000591f, -0.000720f, -0.000757f, -0.001398f, -0.000029f, - +0.002183f, +0.000437f, +0.000136f, +0.000661f, -0.000519f, +0.000312f, -0.000049f, +0.000123f, +0.000442f, +0.000336f, - +0.000350f, +0.000122f, -0.000414f, +0.000320f, +0.000227f, -0.000289f - }, - { - +0.048070f, -0.124361f, +0.003022f, +0.002885f, -0.002167f, +0.007516f, +0.018385f, +0.005566f, +0.013320f, -0.001483f, - +0.005198f, +0.002602f, -0.011035f, +0.004164f, -0.014522f, +0.011422f, -0.005623f, -0.000757f, -0.010522f, +0.004080f, - -0.008987f, +0.005383f, -0.006829f, +0.010129f, -0.002215f, -0.007726f, -0.002009f, -0.000838f, +0.005311f, -0.003898f, - -0.001223f, -0.002654f, -0.009798f, +0.003346f, +0.006477f, +0.001259f, +0.000131f, +0.005089f, +0.000676f, +0.005190f, - -0.004129f, -0.003805f, +0.007151f, -0.004399f, -0.001745f, +0.006336f, +0.002098f, -0.001634f, +0.001339f, -0.000291f, - +0.002872f, -0.000190f, -0.001002f, -0.000335f, -0.000537f, -0.000520f, -0.000853f, +0.002425f, -0.001307f, -0.000330f, - -0.000704f, +0.000680f, +0.001975f, -0.001738f, +0.000084f, -0.001402f, +0.000663f, +0.000872f, +0.000518f, -0.000661f, - -0.001194f, -0.000727f, -0.000181f, -0.001732f, +0.000823f, +0.000444f, -0.000069f, -0.000306f, +0.000299f, -0.001517f, - -0.000088f, -0.000053f, -0.000566f, +0.000278f, +0.001211f, -0.000273f, +0.000061f, -0.000227f, -0.000228f, +0.000011f, - -0.000757f, +0.000227f, +0.000074f, -0.000150f, -0.000755f, +0.000155f - } - }, - { - { - +0.001187f, -0.003202f, -0.018527f, -0.033678f, -0.007379f, -0.000161f, +0.007330f, +0.001660f, -0.006333f, +0.002357f, - -0.007882f, +0.000756f, -0.005939f, -0.005538f, +0.011401f, -0.003452f, -0.003868f, -0.003607f, +0.015925f, -0.002938f, - +0.001504f, +0.004899f, -0.015837f, -0.014167f, -0.016724f, -0.003881f, -0.002751f, -0.002193f, +0.006168f, -0.009803f, - -0.015372f, -0.002942f, -0.006785f, -0.002938f, -0.006081f, -0.002543f, +0.000105f, -0.008130f, -0.005807f, +0.000046f, - +0.006655f, +0.003211f, -0.002759f, +0.002408f, -0.001203f, -0.000500f, +0.001986f, -0.002197f, +0.002884f, +0.003596f, - -0.000331f, -0.001858f, -0.002702f, +0.002318f, +0.002410f, +0.003146f, +0.001362f, +0.000196f, -0.000820f, +0.000494f, - -0.000921f, +0.000019f, -0.000395f, +0.000609f, -0.000078f, +0.003065f, -0.001763f, +0.001436f, +0.000789f, +0.001688f, - -0.000207f, +0.000108f, -0.000062f, +0.000274f, -0.000724f, -0.000668f, +0.000258f, -0.000246f, +0.001099f, +0.000275f, - +0.001065f, +0.000624f, -0.000092f, +0.001821f, -0.000575f, -0.000544f, -0.000646f, +0.000208f, -0.001173f, +0.000089f, - +0.000037f, -0.000451f, -0.000256f, -0.000155f, -0.000339f, +0.000399f - }, - { - -0.007757f, +0.027969f, +0.004724f, -0.034436f, +0.005908f, -0.001564f, +0.000998f, -0.004299f, +0.002790f, +0.005644f, - -0.006651f, +0.007075f, +0.003870f, +0.004148f, -0.008697f, -0.014095f, -0.006400f, +0.007574f, -0.000162f, -0.002671f, - -0.007864f, +0.001578f, +0.005912f, -0.003074f, +0.012284f, +0.005909f, -0.005211f, -0.004863f, +0.010867f, +0.004991f, - -0.005022f, -0.009094f, +0.004726f, +0.002234f, +0.008440f, +0.001418f, -0.004635f, -0.001686f, -0.002616f, -0.002426f, - -0.000417f, +0.000372f, +0.004345f, -0.001054f, +0.004181f, -0.003462f, +0.004021f, -0.005075f, -0.000852f, +0.002537f, - -0.001184f, +0.001346f, +0.001072f, -0.003912f, -0.000916f, -0.001749f, +0.004479f, -0.002283f, -0.000831f, +0.000667f, - -0.002175f, +0.000192f, -0.000721f, +0.000793f, -0.000452f, +0.001047f, -0.000591f, +0.001070f, +0.000090f, -0.000292f, - -0.000692f, -0.000851f, +0.000283f, -0.000097f, -0.000369f, +0.000260f, +0.000746f, -0.000940f, +0.000523f, +0.000125f, - +0.000140f, -0.000127f, +0.000600f, -0.000327f, +0.000717f, -0.000651f, -0.000376f, -0.000274f, +0.000302f, +0.000485f, - -0.000017f, +0.000575f, +0.000098f, +0.000398f, -0.000073f, +0.000122f - }, - { - +0.004862f, +0.051467f, -0.000038f, -0.059997f, -0.047661f, +0.003732f, +0.004369f, +0.006185f, +0.003385f, +0.004908f, - +0.004003f, +0.020579f, -0.007347f, +0.015821f, -0.014782f, -0.004573f, -0.005119f, -0.005901f, -0.003071f, +0.008900f, - +0.007586f, -0.002999f, -0.008113f, +0.008462f, +0.005042f, -0.008360f, +0.012760f, -0.005986f, +0.003455f, -0.001134f, - +0.002775f, +0.007148f, -0.000566f, -0.002196f, +0.005481f, -0.000076f, +0.006168f, +0.000143f, -0.001388f, -0.001467f, - +0.003727f, +0.003638f, +0.002270f, -0.002813f, +0.002637f, -0.000181f, +0.002924f, +0.002862f, +0.000181f, +0.000109f, - +0.001003f, +0.000174f, -0.000752f, -0.002184f, +0.001345f, +0.002619f, +0.001753f, -0.000716f, -0.000220f, -0.000119f, - -0.002471f, +0.000999f, -0.000968f, -0.001431f, +0.000580f, -0.000384f, +0.001804f, +0.000178f, -0.000450f, -0.001686f, - -0.000219f, -0.000189f, +0.000595f, +0.000982f, -0.000487f, +0.001419f, +0.000674f, +0.000349f, +0.000504f, -0.000455f, - +0.000551f, -0.000604f, -0.001048f, +0.000210f, +0.000214f, -0.000230f, -0.000155f, +0.001065f, +0.000065f, +0.000199f, - +0.000066f, -0.000018f, -0.000081f, -0.000004f, -0.000406f, -0.000500f - }, - { - -0.002207f, -0.067160f, -0.005098f, +0.000931f, -0.002571f, +0.002061f, +0.001176f, +0.005398f, -0.002647f, +0.005792f, - +0.003234f, -0.000878f, -0.003541f, +0.013047f, -0.016996f, +0.015675f, -0.008134f, +0.013088f, -0.036938f, +0.021014f, - -0.003107f, +0.005797f, +0.007805f, +0.005046f, +0.009553f, +0.004057f, +0.008050f, -0.002985f, +0.002366f, +0.002726f, - -0.000991f, +0.002263f, -0.001647f, -0.002967f, +0.000588f, +0.001324f, +0.006587f, -0.008156f, +0.004487f, -0.001290f, - +0.002913f, -0.002098f, +0.001099f, -0.001023f, +0.004182f, -0.002976f, +0.001582f, -0.000332f, +0.000275f, +0.000656f, - -0.000634f, +0.002475f, -0.001948f, +0.001162f, +0.000475f, +0.002574f, +0.000260f, +0.000639f, -0.001628f, -0.000056f, - -0.000211f, +0.001556f, +0.001147f, +0.001866f, +0.000018f, +0.000497f, +0.000569f, -0.000986f, -0.000475f, +0.001399f, - -0.000791f, -0.000530f, +0.000351f, -0.000788f, -0.000385f, +0.001065f, -0.000409f, -0.000444f, -0.000606f, -0.000368f, - -0.000644f, +0.000043f, -0.000647f, -0.000091f, -0.001188f, +0.000327f, +0.000196f, +0.000065f, -0.000288f, -0.000496f, - -0.000013f, +0.000022f, +0.000087f, -0.000155f, +0.000129f, +0.000029f - }, - { - +0.002370f, +0.018066f, -0.012417f, -0.060047f, -0.011080f, -0.000393f, -0.000692f, -0.003000f, +0.010921f, -0.000255f, - +0.013079f, -0.009443f, +0.008426f, +0.003281f, +0.012254f, -0.002407f, -0.018790f, -0.007453f, +0.004196f, +0.010023f, - -0.002574f, +0.000365f, +0.003912f, -0.009080f, -0.009856f, -0.005684f, -0.002015f, +0.007412f, -0.001325f, -0.002440f, - -0.001560f, +0.000105f, -0.002846f, +0.000403f, +0.004968f, +0.009756f, -0.002795f, -0.000427f, -0.000587f, -0.007075f, - -0.005832f, +0.000153f, +0.006996f, -0.001822f, -0.003182f, +0.004364f, +0.002636f, -0.006006f, -0.000013f, +0.002219f, - -0.000248f, +0.002845f, -0.000859f, -0.000786f, +0.000685f, +0.000658f, +0.000731f, +0.000140f, -0.000514f, +0.001226f, - +0.001834f, -0.001689f, +0.000428f, +0.000663f, +0.000583f, -0.000656f, -0.001407f, -0.000729f, -0.000406f, -0.001414f, - +0.000678f, -0.000752f, +0.000869f, -0.000960f, +0.000159f, -0.001079f, -0.000516f, -0.000121f, -0.000362f, +0.001057f, - -0.000687f, +0.000735f, +0.000857f, -0.000756f, -0.000539f, -0.000475f, -0.000667f, +0.000609f, -0.000313f, +0.000557f, - -0.000423f, +0.000075f, +0.000094f, +0.000157f, -0.000439f, -0.000317f - }, - { - +0.000737f, +0.032727f, +0.000981f, -0.003429f, +0.001196f, -0.000110f, +0.001082f, +0.001035f, -0.002814f, -0.000262f, - -0.000800f, +0.004193f, -0.003990f, -0.008128f, +0.009258f, -0.011611f, -0.025394f, +0.001647f, -0.001108f, -0.013683f, - -0.009777f, +0.001968f, +0.009518f, +0.009096f, -0.007580f, +0.002677f, +0.020336f, +0.020383f, -0.000989f, +0.014830f, - +0.002252f, -0.007863f, +0.003627f, +0.003251f, -0.004912f, +0.002704f, +0.000560f, +0.002137f, -0.004530f, -0.002953f, - +0.005928f, -0.000554f, +0.004940f, +0.000655f, +0.000978f, +0.004524f, -0.000976f, +0.000155f, +0.001949f, +0.004418f, - -0.000606f, -0.001369f, +0.001529f, -0.001519f, +0.001530f, +0.001994f, -0.000865f, -0.001219f, -0.000819f, -0.000404f, - -0.001101f, +0.000200f, -0.000782f, +0.000876f, -0.001820f, -0.000788f, -0.000560f, -0.000466f, +0.001164f, -0.000472f, - +0.000380f, +0.000440f, -0.000289f, -0.000535f, -0.000103f, +0.000636f, -0.000404f, -0.000088f, -0.000092f, -0.000059f, - +0.001916f, -0.000962f, -0.000165f, -0.000476f, +0.000199f, -0.000320f, -0.000050f, -0.000318f, +0.000055f, -0.000644f, - -0.000164f, +0.000401f, -0.000023f, +0.000243f, -0.000417f, -0.000104f - }, - { - -0.030346f, +0.134082f, -0.002187f, +0.027020f, -0.010595f, -0.001053f, -0.002105f, +0.015737f, -0.004751f, +0.006875f, - +0.006302f, +0.003048f, +0.002625f, -0.003971f, +0.002127f, -0.005172f, +0.001787f, -0.002063f, +0.001161f, +0.001678f, - +0.004341f, +0.000415f, -0.005287f, +0.002507f, +0.005358f, -0.000623f, -0.000365f, -0.005631f, +0.003598f, +0.001495f, - -0.000165f, +0.005659f, +0.004171f, +0.002101f, -0.002126f, -0.001475f, -0.003636f, +0.001617f, +0.000226f, +0.005369f, - +0.002603f, -0.003225f, +0.001436f, -0.004182f, -0.002303f, -0.002081f, +0.002983f, -0.007194f, +0.002159f, -0.004146f, - +0.003107f, +0.003265f, -0.000602f, +0.003172f, +0.001768f, +0.002434f, -0.000859f, +0.003112f, +0.001078f, -0.001174f, - +0.000798f, +0.000339f, +0.000363f, +0.000212f, +0.000368f, +0.000622f, +0.000838f, +0.000324f, -0.000713f, +0.000958f, - -0.000103f, -0.000532f, -0.000847f, -0.000073f, -0.001101f, -0.000052f, -0.000132f, +0.000555f, +0.000899f, +0.000647f, - -0.000096f, +0.000602f, +0.000784f, -0.000234f, -0.000775f, -0.000312f, +0.000170f, -0.000391f, -0.001203f, -0.000134f, - -0.000015f, -0.000325f, +0.000044f, -0.000321f, +0.000861f, -0.000348f - }, - { - +0.000094f, +0.006424f, -0.002427f, -0.002685f, -0.000143f, -0.000594f, -0.001244f, +0.001627f, +0.002195f, +0.000555f, - +0.000437f, -0.004958f, +0.000874f, +0.005058f, +0.012933f, -0.038656f, +0.000337f, +0.016852f, -0.006869f, -0.007737f, - +0.011627f, +0.001481f, -0.005700f, +0.011829f, -0.007781f, -0.007188f, +0.015074f, +0.014136f, +0.005627f, -0.006455f, - -0.000793f, +0.005761f, -0.000594f, +0.000509f, +0.000645f, +0.003043f, -0.004489f, -0.005164f, +0.008323f, +0.005502f, - -0.000377f, -0.000496f, +0.000212f, -0.004304f, -0.000245f, +0.000476f, +0.001152f, +0.005643f, -0.001089f, -0.003612f, - -0.002908f, +0.003365f, -0.001748f, -0.000118f, -0.000364f, -0.000124f, -0.000667f, -0.000286f, -0.000088f, +0.001188f, - +0.000316f, -0.001280f, -0.000958f, +0.000825f, +0.001433f, -0.000606f, -0.000155f, -0.000358f, -0.000525f, +0.000689f, - +0.000065f, +0.001582f, -0.000357f, +0.000386f, +0.000290f, +0.000006f, -0.000365f, +0.000135f, +0.000697f, +0.000331f, - -0.000298f, +0.000451f, +0.000531f, -0.000570f, +0.000279f, +0.000388f, -0.000295f, -0.000328f, -0.000530f, +0.000110f, - -0.001328f, +0.000230f, +0.000041f, +0.000368f, +0.000445f, +0.000288f - }, - { - +0.037299f, +0.002424f, -0.001450f, +0.026346f, -0.015979f, -0.006415f, +0.002118f, -0.007413f, +0.001098f, +0.002424f, - +0.002628f, -0.000334f, +0.019764f, +0.004572f, -0.014916f, +0.006464f, +0.002622f, -0.007694f, +0.014143f, +0.001202f, - +0.007105f, -0.005404f, +0.003940f, -0.000071f, +0.000514f, +0.002364f, +0.001562f, -0.000207f, -0.004686f, +0.000811f, - -0.003319f, -0.004227f, -0.005367f, +0.009229f, -0.005332f, +0.004020f, +0.002345f, +0.000523f, -0.003281f, +0.000086f, - -0.003524f, +0.000953f, -0.002499f, -0.000553f, -0.001262f, -0.003428f, +0.000860f, -0.002314f, +0.003488f, -0.009205f, - +0.003051f, -0.001273f, -0.003049f, -0.000961f, -0.001112f, +0.000894f, -0.000216f, -0.000196f, +0.001581f, -0.000515f, - -0.001562f, +0.000200f, +0.000976f, -0.000485f, -0.002057f, +0.001242f, -0.000985f, +0.000516f, -0.000380f, -0.000662f, - +0.000318f, +0.000406f, +0.000289f, -0.000155f, +0.001037f, +0.000576f, +0.001144f, +0.000193f, +0.000239f, +0.000143f, - -0.000182f, +0.000610f, +0.000219f, -0.000730f, +0.000010f, -0.000022f, -0.000727f, +0.000027f, +0.000560f, +0.000084f, - -0.000566f, -0.000462f, -0.000051f, +0.000506f, +0.000138f, +0.000342f - }, - { - +0.000676f, -0.042817f, -0.020600f, -0.010351f, +0.019446f, +0.013730f, -0.017605f, +0.005559f, -0.007490f, -0.007386f, - -0.004239f, +0.003357f, +0.011369f, -0.003904f, +0.012914f, -0.006353f, -0.013810f, +0.005661f, -0.018950f, -0.021188f, - -0.005948f, -0.006813f, +0.005274f, +0.006072f, -0.006120f, +0.004867f, -0.004075f, -0.004153f, +0.006772f, +0.007051f, - -0.008668f, +0.000551f, -0.009817f, +0.001821f, +0.004793f, +0.002265f, +0.010769f, +0.004165f, +0.000245f, +0.002524f, - +0.003793f, -0.004496f, +0.003616f, -0.008557f, +0.000666f, -0.001827f, +0.002075f, -0.002425f, +0.003278f, +0.000491f, - +0.001015f, +0.000398f, +0.003357f, -0.002845f, +0.000826f, -0.001990f, +0.002027f, +0.001338f, -0.002263f, -0.002180f, - -0.001841f, -0.001694f, -0.000700f, +0.002018f, -0.001967f, +0.001253f, -0.000233f, +0.001734f, -0.000494f, -0.000356f, - -0.000678f, -0.001252f, -0.001077f, -0.000089f, -0.000231f, -0.000668f, -0.001148f, -0.000775f, +0.000045f, +0.000041f, - -0.000295f, +0.001076f, -0.001015f, +0.000090f, -0.000370f, -0.000739f, -0.000145f, +0.000432f, +0.000201f, +0.000583f, - -0.000031f, +0.000583f, +0.000530f, -0.000232f, +0.000375f, -0.000695f - }, - { - -0.007393f, -0.268351f, -0.003347f, -0.006154f, -0.009009f, +0.020645f, -0.003380f, -0.007489f, +0.004113f, -0.004464f, - +0.007436f, -0.002139f, +0.004635f, +0.001737f, +0.003838f, -0.014382f, +0.001470f, +0.014360f, -0.006538f, +0.003801f, - +0.007408f, -0.003057f, -0.006448f, +0.004765f, -0.001241f, +0.004560f, -0.004781f, +0.007255f, +0.004860f, +0.002172f, - +0.004385f, +0.001702f, -0.001312f, -0.000542f, +0.003754f, -0.007142f, -0.007118f, -0.001176f, -0.001570f, -0.002395f, - +0.005340f, -0.002311f, -0.002988f, -0.002092f, -0.000586f, -0.000239f, -0.001399f, -0.003805f, +0.000850f, -0.004452f, - +0.000479f, +0.003781f, -0.000941f, +0.000807f, -0.000294f, +0.000350f, -0.000826f, +0.000781f, +0.001029f, -0.000755f, - -0.001072f, -0.000336f, +0.000747f, +0.000450f, +0.001350f, -0.001100f, +0.001416f, -0.001638f, +0.002184f, -0.000625f, - +0.000464f, -0.000652f, -0.001244f, +0.000637f, -0.001982f, -0.001310f, -0.000171f, -0.000597f, +0.000920f, +0.000081f, - +0.000118f, -0.000096f, +0.000098f, -0.000245f, -0.000151f, -0.000699f, +0.000027f, +0.000411f, +0.000141f, +0.000217f, - +0.000526f, +0.000030f, -0.000301f, +0.000012f, +0.000057f, -0.000314f - }, - { - -0.002560f, -0.058642f, +0.018257f, +0.002580f, +0.000598f, +0.001432f, -0.002759f, -0.006456f, +0.009917f, +0.000645f, - -0.004762f, +0.001598f, -0.001434f, +0.003362f, +0.002276f, -0.002717f, -0.003396f, +0.002334f, +0.004029f, -0.002307f, - -0.001910f, -0.009342f, +0.002880f, -0.001705f, -0.012668f, -0.003457f, -0.017660f, -0.008373f, -0.001047f, +0.006241f, - -0.013944f, +0.004255f, -0.015424f, +0.003449f, -0.005349f, +0.008204f, +0.003050f, +0.013400f, +0.001556f, -0.001846f, - +0.009171f, +0.008014f, -0.004004f, +0.003854f, -0.004199f, -0.001946f, -0.004262f, -0.002271f, +0.005889f, -0.000378f, - +0.002710f, +0.001984f, +0.003916f, -0.002759f, -0.001775f, -0.002848f, +0.001325f, +0.001070f, +0.000791f, -0.001412f, - +0.001740f, -0.000154f, -0.002813f, -0.001397f, +0.002831f, +0.000488f, -0.000082f, +0.001499f, -0.001411f, +0.000737f, - +0.002188f, -0.000355f, -0.000858f, +0.001873f, +0.000574f, +0.000321f, +0.000950f, -0.000639f, +0.000052f, -0.000403f, - -0.000267f, -0.000034f, -0.000281f, -0.000470f, +0.000215f, -0.000679f, -0.000585f, +0.000521f, -0.000056f, -0.000749f, - +0.000990f, +0.000527f, -0.000227f, -0.000020f, +0.000177f, +0.000713f - }, - { - +0.037973f, -0.335646f, -0.000300f, -0.009042f, +0.017104f, -0.006782f, +0.002363f, -0.006789f, -0.005202f, -0.017698f, - -0.007507f, -0.002089f, -0.006617f, -0.007528f, -0.005421f, -0.004634f, -0.004646f, +0.002873f, -0.006079f, +0.004668f, - +0.006256f, +0.006524f, +0.003402f, -0.005950f, +0.000847f, -0.003467f, +0.001202f, -0.000216f, -0.002706f, +0.005279f, - -0.001376f, -0.001550f, +0.004061f, +0.000337f, +0.002236f, +0.002384f, -0.003321f, +0.000938f, -0.007959f, -0.004731f, - +0.007169f, -0.007514f, +0.007416f, +0.003113f, -0.006865f, -0.003087f, -0.000367f, -0.002750f, +0.004620f, -0.001904f, - -0.002185f, -0.001187f, +0.000733f, -0.003992f, -0.002728f, -0.000087f, -0.002455f, -0.000784f, -0.001926f, +0.003056f, - +0.000798f, +0.000077f, +0.000566f, -0.000969f, +0.000177f, -0.000155f, -0.000374f, +0.001158f, +0.001285f, +0.001204f, - -0.000338f, -0.000331f, +0.001091f, -0.000313f, +0.001339f, +0.000900f, +0.000537f, -0.001252f, +0.000525f, -0.000536f, - +0.000279f, +0.000011f, +0.000668f, +0.000512f, +0.000036f, +0.000176f, -0.000183f, +0.000085f, +0.000250f, -0.000877f, - -0.000601f, +0.000093f, -0.000712f, -0.000618f, -0.000089f, +0.000125f - }, - { - -0.002512f, -0.078673f, -0.007571f, +0.006640f, +0.004497f, +0.013430f, -0.011635f, +0.001631f, -0.001705f, -0.006650f, - -0.005667f, +0.000206f, -0.005302f, +0.018025f, +0.032457f, -0.005892f, -0.012831f, -0.003797f, +0.008908f, +0.006230f, - -0.012571f, -0.004462f, +0.006330f, +0.000056f, -0.000474f, +0.014473f, +0.007011f, +0.006606f, -0.002483f, +0.006221f, - +0.007019f, -0.003436f, +0.009323f, +0.002511f, +0.004483f, -0.001593f, +0.008009f, +0.000951f, -0.000483f, -0.004390f, - +0.005435f, +0.005507f, +0.002154f, -0.001552f, +0.002512f, -0.005503f, +0.004622f, +0.001594f, -0.000255f, -0.001978f, - +0.000790f, -0.005125f, -0.000488f, -0.003084f, +0.001993f, -0.001167f, -0.000087f, +0.004259f, +0.001156f, +0.000160f, - +0.002455f, -0.001583f, -0.000290f, +0.000313f, +0.001177f, -0.000392f, +0.001060f, +0.000719f, -0.000597f, -0.000429f, - -0.000604f, +0.000397f, +0.000712f, +0.000397f, -0.000778f, -0.000173f, -0.001416f, -0.000222f, -0.000883f, -0.000577f, - +0.001183f, -0.001084f, -0.000762f, -0.000040f, -0.001012f, -0.000203f, -0.000922f, +0.000280f, -0.000157f, -0.000296f, - +0.000444f, -0.000055f, -0.000574f, +0.000618f, +0.000308f, -0.000354f - }, - { - -0.017620f, -0.210453f, -0.017072f, -0.013864f, +0.003972f, -0.004726f, +0.002532f, +0.001787f, +0.008051f, +0.001035f, - +0.011323f, +0.007732f, -0.011975f, +0.005655f, -0.001362f, +0.003172f, -0.001278f, +0.014742f, -0.005104f, +0.000188f, - -0.002471f, +0.013302f, -0.009880f, +0.010124f, -0.003309f, -0.009715f, -0.006523f, -0.000029f, +0.015522f, -0.001841f, - -0.002506f, +0.000244f, -0.000807f, -0.003542f, -0.005826f, -0.003067f, -0.002112f, +0.000473f, -0.001628f, +0.001400f, - -0.002035f, -0.001853f, +0.006260f, -0.002699f, -0.001546f, +0.002126f, +0.000124f, -0.002408f, +0.000815f, -0.000856f, - +0.003255f, -0.004042f, -0.003235f, -0.001475f, -0.001227f, -0.000958f, -0.001130f, +0.001985f, -0.002034f, +0.002388f, - +0.003680f, +0.001670f, +0.001099f, -0.000737f, +0.001289f, -0.000811f, +0.000796f, -0.000994f, +0.000340f, +0.000357f, - -0.000331f, +0.000453f, -0.000130f, -0.001031f, +0.000779f, +0.000283f, +0.000608f, +0.000836f, +0.001031f, -0.001064f, - +0.001217f, +0.000313f, -0.001273f, +0.000164f, +0.000513f, -0.000116f, +0.000483f, +0.000396f, +0.000267f, +0.000995f, - -0.000503f, +0.000003f, +0.000031f, -0.000215f, -0.000439f, +0.000286f - } - }, - { - { - +0.000417f, -0.037139f, +0.013902f, -0.020689f, -0.022905f, -0.000886f, +0.007081f, +0.002082f, -0.009551f, +0.012125f, - -0.005929f, -0.009166f, -0.010357f, +0.007458f, +0.001593f, +0.002385f, +0.001371f, -0.011728f, +0.017293f, +0.007120f, - -0.003762f, -0.001026f, -0.006422f, -0.020809f, -0.010103f, -0.011854f, +0.002763f, -0.006761f, +0.004527f, -0.017194f, - -0.009956f, -0.002665f, -0.008152f, +0.001850f, -0.008211f, +0.001659f, -0.005685f, -0.005795f, -0.002676f, +0.000743f, - +0.000165f, +0.009616f, -0.003597f, -0.001455f, +0.004187f, -0.000117f, +0.001430f, +0.002694f, -0.002821f, +0.005410f, - +0.001530f, -0.005102f, -0.000275f, +0.001224f, +0.000424f, +0.003502f, +0.001358f, +0.002093f, -0.002072f, -0.000365f, - +0.000727f, -0.001102f, -0.000387f, -0.000226f, +0.001114f, +0.002364f, +0.000073f, +0.000455f, -0.000281f, +0.001544f, - +0.001460f, -0.001982f, +0.001226f, +0.000950f, -0.000820f, -0.000673f, -0.000284f, +0.000319f, +0.000920f, +0.001166f, - -0.000104f, +0.000863f, -0.000381f, +0.001157f, -0.000733f, -0.000369f, -0.000440f, -0.000067f, -0.000673f, -0.000038f, - +0.000160f, -0.000419f, -0.000347f, -0.000416f, -0.000070f, +0.000382f - }, - { - +0.010658f, +0.033874f, -0.007677f, +0.000115f, -0.019925f, -0.003000f, -0.006487f, +0.007604f, -0.000741f, +0.002182f, - +0.002626f, +0.004466f, -0.004665f, +0.007375f, +0.002342f, -0.009126f, -0.012900f, +0.001294f, +0.004124f, -0.008227f, - -0.007952f, -0.002855f, +0.010643f, +0.005759f, -0.001063f, +0.011749f, -0.007454f, +0.005124f, +0.008014f, -0.000135f, - -0.000484f, -0.010344f, +0.005122f, +0.006613f, +0.004580f, +0.004174f, -0.008612f, +0.000026f, -0.003089f, +0.000483f, - -0.000376f, -0.003117f, +0.004405f, -0.000477f, +0.000792f, -0.000784f, +0.004147f, +0.000720f, -0.000376f, +0.000220f, - -0.000569f, +0.000544f, -0.002129f, -0.002801f, +0.000278f, -0.001312f, +0.001321f, -0.001705f, -0.000180f, -0.001524f, - -0.000817f, -0.001080f, +0.001151f, -0.000733f, -0.000274f, +0.001988f, -0.000546f, +0.000089f, +0.000448f, -0.000747f, - +0.000423f, +0.000055f, -0.000063f, -0.000441f, +0.000221f, +0.000665f, +0.000023f, +0.000691f, -0.000658f, +0.000785f, - -0.000836f, +0.000482f, +0.000182f, -0.000609f, +0.000291f, -0.000368f, -0.000001f, -0.000213f, +0.000100f, -0.000111f, - +0.000603f, +0.000156f, +0.000436f, -0.000232f, +0.000088f, +0.000178f - }, - { - -0.008153f, +0.095831f, -0.021118f, -0.100559f, -0.008404f, -0.004598f, +0.005337f, +0.008560f, +0.004044f, +0.009377f, - -0.000884f, +0.013119f, +0.004761f, +0.018191f, -0.013561f, -0.005630f, -0.010481f, -0.015693f, +0.010929f, +0.004423f, - +0.005056f, -0.008707f, +0.000983f, +0.006909f, +0.001489f, -0.006762f, +0.002572f, +0.006208f, -0.002589f, +0.002647f, - +0.004056f, +0.003566f, +0.001690f, -0.000670f, +0.001219f, +0.005906f, +0.001631f, -0.002649f, +0.000008f, -0.000998f, - +0.003887f, -0.000778f, +0.005302f, -0.000442f, -0.000106f, +0.000126f, +0.002958f, +0.001252f, +0.001809f, -0.001069f, - +0.003786f, +0.001817f, -0.003478f, -0.001485f, +0.000040f, +0.003118f, +0.001748f, -0.000333f, -0.000277f, +0.000007f, - -0.002717f, -0.000536f, -0.000679f, -0.000056f, +0.000181f, +0.000811f, +0.000069f, +0.000192f, -0.000205f, -0.001260f, - -0.000029f, -0.000096f, +0.000962f, -0.000065f, -0.000141f, +0.001486f, +0.000557f, -0.000022f, -0.000189f, -0.000038f, - -0.000386f, -0.000197f, -0.000567f, +0.000017f, +0.000236f, +0.000456f, -0.000337f, +0.000918f, +0.000171f, +0.000364f, - -0.000371f, -0.000456f, +0.000161f, +0.000137f, -0.000544f, -0.000027f - }, - { - +0.002608f, -0.062255f, -0.015283f, -0.001437f, +0.000682f, +0.001145f, +0.001846f, +0.001833f, +0.000498f, +0.004092f, - +0.005127f, -0.000760f, +0.000090f, +0.004980f, -0.008916f, +0.004473f, +0.021438f, -0.029977f, -0.002470f, +0.006446f, - -0.003501f, +0.009102f, +0.005340f, +0.012449f, +0.002284f, +0.002038f, +0.003002f, +0.002578f, -0.002479f, -0.001965f, - +0.007019f, +0.003621f, -0.005137f, -0.004608f, +0.005931f, +0.001909f, +0.000171f, -0.008082f, +0.001607f, -0.003938f, - +0.004764f, -0.002285f, -0.001162f, +0.002049f, +0.003722f, -0.000913f, -0.002371f, -0.000201f, -0.000109f, +0.000141f, - +0.002212f, +0.001278f, -0.001168f, +0.000877f, -0.000058f, +0.001747f, +0.001051f, +0.001320f, -0.000892f, -0.001372f, - +0.000732f, -0.000992f, +0.001539f, +0.001201f, +0.001168f, +0.000596f, -0.001945f, +0.001382f, -0.000776f, -0.000668f, - +0.000823f, +0.000103f, -0.001230f, -0.000834f, -0.000218f, +0.000423f, -0.000044f, -0.000407f, -0.000227f, -0.001202f, - -0.000117f, -0.000190f, -0.000446f, -0.000443f, -0.000715f, -0.000254f, +0.000249f, +0.000023f, -0.000103f, +0.000010f, - -0.000287f, +0.000171f, -0.000199f, -0.000189f, +0.000009f, -0.000331f - }, - { - +0.028795f, -0.023407f, -0.011631f, -0.070495f, -0.002435f, -0.002064f, +0.000667f, +0.001783f, +0.001034f, +0.014728f, - +0.001644f, -0.002264f, -0.010333f, +0.003792f, +0.023144f, -0.010272f, -0.010809f, -0.007359f, +0.014958f, -0.001461f, - +0.003941f, -0.000420f, -0.008996f, +0.006342f, -0.011267f, -0.003715f, -0.000730f, -0.001978f, -0.002016f, +0.001341f, - -0.007568f, +0.005109f, +0.001103f, -0.002388f, +0.005673f, +0.007028f, -0.000162f, -0.002704f, +0.000144f, -0.004999f, - -0.002541f, -0.003399f, +0.004769f, -0.000804f, +0.000080f, +0.000501f, +0.001583f, -0.002828f, -0.001760f, +0.004466f, - -0.000897f, +0.001931f, -0.002266f, +0.000020f, +0.000441f, +0.002565f, +0.000522f, +0.000095f, -0.000213f, +0.002147f, - +0.001225f, -0.001173f, +0.000294f, +0.001012f, +0.000173f, -0.000085f, -0.001496f, +0.000482f, -0.000662f, -0.001563f, - +0.000982f, +0.000620f, +0.000418f, -0.001163f, -0.000287f, -0.001068f, -0.000954f, -0.000625f, +0.000737f, +0.000593f, - -0.000177f, +0.000182f, +0.000480f, -0.000916f, +0.000582f, -0.000794f, -0.000688f, +0.000390f, +0.000386f, +0.000459f, - -0.000503f, +0.000014f, +0.000304f, +0.000432f, -0.000358f, -0.000366f - }, - { - +0.000978f, +0.016417f, +0.008579f, +0.002831f, -0.001489f, +0.000202f, +0.000677f, -0.000462f, -0.001575f, -0.003016f, - +0.003461f, +0.004497f, -0.003820f, -0.005118f, +0.001689f, +0.000769f, -0.031538f, -0.008478f, +0.000914f, -0.010378f, - -0.007589f, +0.003747f, -0.001569f, +0.014282f, +0.002568f, -0.012506f, +0.024316f, +0.020987f, +0.009549f, +0.007675f, - -0.002635f, +0.000029f, +0.002957f, +0.002140f, -0.010973f, +0.004545f, -0.001265f, +0.002226f, -0.005831f, +0.002943f, - -0.000427f, -0.001437f, +0.007078f, +0.001488f, +0.000935f, +0.002993f, -0.000300f, +0.002694f, +0.002749f, +0.001968f, - -0.002921f, +0.000665f, +0.002420f, -0.000852f, +0.001928f, +0.001800f, -0.000758f, -0.001773f, +0.001707f, -0.002770f, - -0.000842f, -0.000878f, -0.000042f, +0.001166f, -0.000771f, -0.000709f, -0.000845f, -0.000127f, +0.000214f, +0.000521f, - -0.000511f, +0.000511f, -0.000107f, -0.000846f, -0.000630f, +0.001462f, -0.001174f, -0.000962f, -0.000105f, +0.000728f, - +0.000870f, -0.000334f, -0.000194f, -0.000459f, +0.000444f, -0.000459f, -0.000039f, -0.000387f, +0.000103f, -0.000697f, - -0.000062f, +0.000492f, -0.000076f, -0.000100f, -0.000677f, +0.000376f - }, - { - +0.055329f, -0.022012f, +0.008629f, +0.015740f, +0.012924f, +0.000427f, +0.003810f, +0.001475f, +0.002705f, +0.003262f, - +0.008805f, -0.001052f, -0.000224f, -0.001177f, +0.000139f, +0.005810f, -0.008173f, -0.000750f, +0.002151f, +0.006575f, - +0.003597f, -0.003374f, -0.001232f, +0.004387f, +0.003611f, -0.004644f, -0.000896f, -0.000059f, -0.000593f, -0.001521f, - +0.004294f, +0.001931f, +0.001431f, +0.002367f, -0.003129f, -0.000270f, +0.000141f, -0.002798f, +0.003187f, +0.005127f, - -0.000879f, +0.001235f, -0.001551f, -0.004580f, -0.001598f, +0.000156f, +0.002041f, -0.003822f, -0.000355f, -0.003972f, - +0.005475f, +0.000779f, +0.000867f, +0.002509f, +0.000739f, +0.001111f, +0.001372f, +0.002692f, -0.000093f, -0.000424f, - -0.000858f, +0.000169f, +0.000483f, -0.000692f, +0.000420f, +0.000315f, +0.000929f, +0.000415f, -0.000073f, +0.000633f, - -0.000385f, -0.000219f, -0.001517f, -0.000048f, -0.000666f, -0.000586f, -0.000231f, +0.000512f, +0.001316f, -0.000023f, - -0.000590f, +0.000458f, +0.000749f, -0.000145f, -0.000555f, +0.000100f, -0.000579f, -0.000458f, -0.000066f, -0.000414f, - -0.000492f, -0.000164f, -0.000333f, -0.000059f, +0.000095f, +0.000384f - }, - { - +0.001966f, -0.012274f, +0.009257f, -0.003281f, -0.001275f, -0.001753f, +0.000604f, +0.000850f, +0.002311f, +0.000015f, - -0.001904f, -0.005621f, +0.009054f, +0.006680f, +0.007130f, -0.008166f, +0.002341f, -0.013645f, -0.014542f, +0.023452f, - -0.000129f, -0.002001f, +0.003821f, +0.006484f, -0.005042f, +0.003377f, +0.004025f, +0.011941f, -0.010612f, +0.007510f, - -0.007565f, +0.008590f, +0.000057f, -0.002008f, +0.005537f, +0.005382f, -0.007815f, +0.002828f, +0.000249f, +0.005917f, - +0.002025f, -0.000233f, -0.003063f, +0.000167f, +0.001103f, +0.000198f, -0.001573f, +0.002624f, +0.004740f, -0.007091f, - -0.001911f, +0.001476f, +0.002188f, -0.002095f, -0.000817f, +0.000199f, +0.000093f, -0.001678f, -0.000363f, -0.000793f, - +0.002973f, -0.000199f, -0.002887f, +0.001538f, +0.001359f, -0.000375f, +0.000346f, -0.001126f, -0.000059f, +0.001324f, - -0.000671f, +0.000819f, +0.000145f, +0.000531f, +0.000279f, +0.001098f, -0.000586f, +0.000050f, -0.000357f, -0.000235f, - +0.000487f, +0.000358f, +0.000581f, -0.000164f, +0.000363f, -0.000207f, -0.000774f, +0.000802f, -0.000140f, -0.000559f, - -0.000751f, -0.000070f, -0.000056f, +0.000679f, -0.000139f, +0.000285f - }, - { - -0.005768f, +0.039682f, +0.003054f, -0.004978f, +0.017214f, -0.007196f, +0.004886f, -0.001734f, -0.003412f, -0.006010f, - +0.004340f, +0.013842f, +0.011302f, -0.011849f, -0.002998f, +0.013654f, +0.001752f, +0.006297f, +0.003055f, -0.001276f, - +0.005240f, +0.000652f, +0.001076f, -0.000059f, -0.000424f, +0.003009f, -0.001759f, +0.001793f, -0.000070f, -0.001768f, - -0.002673f, -0.008627f, -0.000690f, +0.007348f, -0.003215f, +0.001569f, +0.003267f, -0.001106f, -0.000478f, -0.003705f, - -0.000406f, -0.000665f, +0.000124f, +0.000338f, -0.003718f, -0.000129f, -0.000201f, -0.002214f, +0.001913f, -0.002480f, - -0.002736f, -0.001413f, -0.001211f, -0.002585f, -0.000255f, +0.000519f, +0.001938f, -0.001985f, +0.001284f, -0.000939f, - +0.000834f, +0.000168f, -0.001205f, +0.000297f, +0.000194f, +0.000540f, +0.000229f, -0.000868f, +0.000202f, +0.000491f, - +0.000093f, -0.000344f, +0.000766f, -0.000951f, -0.000152f, +0.002163f, +0.001233f, -0.000501f, +0.000255f, +0.000614f, - -0.000142f, +0.000105f, +0.000330f, -0.000232f, -0.000541f, +0.000052f, +0.000318f, -0.000010f, +0.000344f, -0.000904f, - +0.000260f, -0.000454f, -0.000054f, +0.000354f, -0.000137f, +0.000385f - }, - { - +0.000542f, -0.066836f, -0.013850f, +0.014562f, +0.015060f, -0.001830f, -0.001504f, +0.000614f, -0.007895f, -0.000868f, - -0.005190f, +0.009569f, +0.008843f, +0.000499f, -0.004517f, -0.002813f, -0.003456f, -0.012134f, -0.012841f, -0.022137f, - +0.003964f, -0.001064f, -0.006903f, -0.002009f, +0.007292f, +0.001348f, -0.021300f, +0.011400f, +0.002177f, +0.007738f, - -0.007137f, -0.004931f, -0.004318f, -0.000800f, +0.001940f, +0.006411f, +0.001123f, +0.001412f, +0.004785f, +0.000118f, - -0.000118f, +0.000712f, +0.001555f, -0.005857f, -0.003939f, +0.002028f, -0.001241f, -0.000549f, +0.002936f, -0.000668f, - -0.000670f, +0.003841f, -0.000635f, -0.000868f, +0.001083f, -0.000012f, +0.000205f, -0.000198f, -0.000148f, -0.002480f, - -0.002533f, -0.001000f, -0.000156f, +0.001169f, -0.001422f, +0.001362f, -0.000186f, +0.000463f, -0.000291f, -0.001555f, - +0.000285f, -0.001238f, -0.001032f, -0.000939f, -0.000219f, -0.000118f, -0.000685f, -0.001068f, +0.000259f, +0.001659f, - -0.000671f, +0.000151f, -0.000820f, +0.000283f, -0.000107f, -0.001011f, +0.000201f, +0.000271f, +0.000552f, +0.000052f, - +0.000579f, +0.000168f, -0.000054f, -0.000028f, -0.000021f, -0.000230f - }, - { - +0.006745f, -0.297007f, +0.003031f, +0.004533f, -0.023128f, +0.024387f, -0.009222f, -0.000300f, +0.000169f, -0.002919f, - +0.004090f, -0.001666f, -0.002712f, +0.015131f, -0.015139f, +0.000853f, -0.003791f, +0.004138f, -0.006062f, -0.003761f, - +0.018909f, -0.001629f, +0.002054f, +0.000058f, -0.003384f, +0.001809f, +0.000057f, +0.004257f, +0.004712f, +0.001839f, - +0.000765f, +0.000286f, +0.000553f, -0.001383f, -0.006215f, -0.000725f, -0.004634f, -0.006510f, +0.001239f, -0.003214f, - +0.003541f, -0.000380f, -0.005452f, +0.001185f, -0.004566f, -0.000636f, -0.001367f, -0.000526f, -0.002324f, -0.003509f, - +0.003079f, +0.002868f, -0.001752f, +0.002192f, -0.000700f, +0.001638f, +0.000324f, +0.000061f, -0.000562f, -0.001325f, - -0.000053f, -0.000634f, +0.001468f, +0.001053f, -0.000487f, +0.000250f, -0.001497f, +0.000670f, +0.000923f, +0.000957f, - -0.000148f, -0.000941f, -0.000671f, +0.000112f, -0.001108f, -0.001116f, -0.001148f, +0.000041f, +0.000521f, +0.000218f, - +0.000349f, -0.000066f, +0.000356f, +0.000035f, -0.000616f, -0.000332f, -0.000579f, +0.000373f, +0.000322f, +0.000503f, - +0.000153f, +0.000073f, -0.000274f, +0.000258f, +0.000236f, -0.000214f - }, - { - +0.002723f, -0.043809f, +0.002951f, +0.014531f, -0.006100f, +0.000617f, -0.000575f, -0.004065f, +0.000623f, +0.006050f, - -0.005680f, +0.005155f, -0.001525f, -0.007395f, -0.000958f, +0.009002f, -0.011027f, +0.010977f, -0.009754f, +0.014999f, - -0.003698f, -0.005106f, +0.002110f, -0.002691f, -0.007390f, -0.004174f, -0.008198f, -0.017266f, +0.007941f, -0.006580f, - -0.002613f, -0.005580f, -0.006308f, -0.004216f, +0.001034f, +0.004239f, +0.005152f, +0.013238f, -0.001334f, +0.003017f, - +0.004812f, +0.010749f, +0.000123f, -0.001486f, -0.000975f, -0.001704f, -0.005297f, +0.000036f, +0.001471f, -0.000187f, - +0.004010f, +0.000458f, +0.005082f, -0.003080f, -0.000229f, -0.003005f, -0.000387f, +0.002260f, -0.000022f, +0.000612f, - +0.001298f, -0.000166f, -0.001553f, +0.000462f, +0.000132f, +0.001322f, -0.000829f, +0.001935f, -0.001418f, +0.000142f, - +0.002380f, -0.000145f, -0.000126f, +0.000679f, +0.000108f, +0.000027f, +0.000428f, -0.000245f, +0.001020f, -0.000784f, - -0.000109f, -0.000178f, -0.000589f, +0.000339f, -0.000017f, -0.000085f, +0.000091f, +0.000066f, +0.000106f, -0.000117f, - +0.000753f, +0.000271f, -0.000578f, +0.000426f, +0.000498f, +0.000310f - }, - { - -0.076065f, -0.175709f, -0.004256f, -0.004919f, -0.000651f, +0.016759f, -0.015012f, +0.005472f, -0.000456f, -0.019795f, - -0.021141f, -0.000023f, -0.003270f, +0.000261f, -0.014571f, +0.000620f, -0.013386f, +0.004857f, +0.007257f, -0.004074f, - +0.009607f, -0.004130f, +0.007476f, -0.004351f, +0.004213f, -0.006494f, +0.001044f, +0.008284f, -0.007255f, +0.006316f, - +0.001552f, +0.003439f, -0.001067f, +0.005000f, -0.000581f, +0.007388f, -0.006881f, -0.001794f, -0.001594f, -0.006386f, - +0.001600f, +0.001819f, +0.002399f, +0.007978f, -0.003759f, -0.006755f, -0.002682f, +0.002675f, +0.001685f, +0.000532f, - -0.003915f, -0.000907f, -0.001004f, -0.004444f, +0.000271f, -0.005186f, +0.000413f, -0.002096f, +0.000273f, +0.001039f, - +0.000821f, +0.000082f, -0.000005f, +0.000085f, +0.000116f, +0.000395f, -0.000856f, +0.001507f, +0.001609f, +0.000457f, - +0.000457f, -0.000445f, +0.000501f, +0.000051f, +0.001274f, -0.000166f, +0.000781f, +0.000402f, -0.000009f, +0.000079f, - -0.000204f, -0.000324f, +0.001183f, +0.000250f, -0.000597f, +0.000968f, -0.000305f, -0.000234f, +0.000061f, -0.000400f, - -0.000337f, -0.000789f, -0.000051f, -0.000565f, +0.000115f, +0.000158f - }, - { - +0.002225f, -0.066716f, -0.016644f, -0.000059f, +0.011543f, +0.005510f, -0.001345f, -0.002649f, +0.001484f, -0.000833f, - -0.008780f, -0.002109f, -0.008016f, -0.018779f, +0.066718f, -0.004659f, -0.002800f, +0.002570f, +0.008183f, -0.005186f, - -0.015648f, -0.003451f, +0.009346f, +0.007236f, -0.003206f, +0.011239f, +0.010122f, +0.012778f, -0.007048f, +0.003671f, - +0.004764f, +0.000325f, +0.011679f, +0.006973f, +0.000004f, +0.001741f, -0.000314f, +0.003683f, -0.000042f, -0.000241f, - +0.005938f, +0.002499f, -0.000224f, +0.002439f, -0.004366f, +0.001556f, +0.003087f, -0.001573f, -0.002806f, +0.002147f, - -0.001926f, -0.003426f, -0.001290f, -0.000199f, -0.001422f, -0.000333f, +0.000249f, +0.002787f, +0.002454f, -0.000568f, - -0.000551f, -0.001410f, +0.000665f, -0.000796f, -0.000686f, +0.003206f, -0.000273f, +0.000308f, -0.000586f, -0.000896f, - -0.000563f, +0.001268f, +0.001687f, -0.000930f, -0.000915f, -0.000607f, +0.000267f, -0.000241f, -0.000496f, -0.000742f, - -0.000292f, -0.000590f, -0.000542f, -0.000828f, -0.000252f, -0.000420f, -0.000498f, -0.000072f, +0.000095f, -0.000528f, - +0.000070f, -0.000536f, +0.000099f, +0.000257f, +0.000043f, -0.000375f - }, - { - -0.018221f, -0.204943f, -0.011791f, -0.024148f, -0.001526f, -0.013854f, -0.004959f, +0.013051f, +0.001021f, +0.002726f, - +0.013390f, -0.000028f, -0.001742f, -0.008734f, +0.015936f, +0.001007f, +0.001364f, +0.001787f, +0.008680f, -0.007696f, - +0.013602f, +0.004100f, -0.007148f, +0.001162f, +0.008110f, -0.011294f, -0.006673f, +0.001257f, +0.009352f, +0.000749f, - +0.001091f, -0.006098f, +0.008237f, -0.001734f, -0.009605f, -0.004725f, +0.000707f, -0.005100f, +0.001100f, -0.002974f, - -0.001416f, +0.004542f, +0.003177f, +0.000386f, +0.000304f, -0.002532f, +0.002913f, -0.001306f, -0.001407f, +0.001365f, - -0.000469f, -0.004537f, -0.000845f, -0.001233f, -0.002153f, -0.001145f, +0.000920f, -0.001666f, +0.000726f, +0.002129f, - +0.003656f, +0.001811f, -0.000170f, +0.000093f, +0.000884f, +0.001263f, -0.000231f, -0.000372f, +0.000480f, -0.001145f, - +0.000924f, +0.000653f, -0.000066f, +0.000548f, -0.000471f, +0.001436f, +0.000385f, +0.000825f, +0.000958f, -0.000561f, - +0.000382f, +0.000747f, -0.000043f, -0.000558f, +0.000335f, +0.000021f, +0.000381f, +0.000190f, +0.000252f, +0.001201f, - -0.000229f, +0.000339f, +0.000147f, -0.000437f, -0.000156f, -0.000131f - } - }, - { - { - -0.002995f, -0.075268f, -0.003420f, +0.013466f, +0.001737f, +0.000870f, +0.000965f, +0.003042f, -0.003428f, +0.015917f, - -0.000665f, -0.009873f, -0.009694f, +0.014518f, +0.012838f, +0.009195f, +0.009399f, -0.005796f, +0.003010f, -0.000703f, - +0.002009f, +0.015670f, +0.011420f, -0.001296f, -0.004973f, -0.013524f, +0.002063f, -0.009055f, -0.002876f, -0.016438f, - -0.003109f, +0.003391f, -0.001893f, -0.000901f, -0.002705f, +0.007380f, -0.002226f, -0.003841f, -0.006568f, -0.001115f, - -0.000318f, +0.007701f, +0.000807f, +0.006101f, +0.004845f, -0.001988f, -0.000283f, +0.001346f, -0.006707f, +0.002975f, - +0.005077f, -0.000972f, -0.000015f, -0.000484f, -0.001296f, +0.000429f, +0.000377f, +0.002649f, -0.003756f, -0.001210f, - +0.001210f, -0.001147f, -0.001020f, +0.000023f, +0.001684f, -0.000288f, -0.001097f, -0.001581f, -0.001251f, +0.001509f, - +0.001298f, -0.002001f, +0.001406f, +0.001292f, -0.000032f, -0.000157f, -0.000001f, -0.000065f, +0.000027f, +0.000554f, - -0.001390f, +0.000189f, -0.000317f, +0.000712f, -0.000809f, -0.000291f, -0.000531f, -0.000216f, -0.000053f, +0.000437f, - +0.000404f, -0.000080f, -0.000328f, -0.000435f, +0.000160f, +0.000537f - }, - { - -0.019113f, -0.011094f, -0.017962f, +0.035001f, +0.005855f, -0.000193f, -0.004455f, +0.004522f, -0.007210f, +0.001242f, - -0.003885f, +0.008554f, +0.009187f, +0.009554f, +0.004687f, -0.003793f, -0.010742f, -0.003724f, +0.004851f, -0.006285f, - -0.007584f, -0.008994f, -0.001849f, +0.001779f, -0.005514f, +0.010502f, -0.002922f, +0.004864f, +0.004472f, -0.001475f, - +0.004534f, -0.005537f, +0.002959f, -0.001119f, -0.001098f, +0.005649f, -0.007379f, -0.001022f, -0.005197f, -0.003533f, - -0.002945f, -0.001724f, +0.000739f, -0.004928f, +0.000706f, +0.000318f, +0.004130f, +0.005134f, +0.002378f, +0.000776f, - -0.000740f, -0.000469f, -0.002092f, -0.000152f, +0.001838f, -0.001852f, +0.001794f, -0.000339f, -0.001702f, -0.002859f, - -0.001144f, -0.000924f, +0.001113f, -0.000383f, +0.000984f, +0.001944f, -0.000466f, +0.000233f, +0.000637f, -0.001414f, - +0.000445f, +0.001244f, +0.000847f, -0.000316f, +0.000097f, -0.000367f, -0.000201f, +0.000911f, -0.001329f, -0.000289f, - -0.000776f, +0.000828f, -0.000279f, -0.000575f, +0.000554f, -0.000509f, -0.000055f, +0.000313f, -0.000099f, -0.000117f, - +0.000458f, -0.000215f, -0.000032f, -0.000239f, +0.000102f, +0.000163f - }, - { - +0.010561f, +0.101631f, -0.037004f, -0.027033f, +0.054884f, -0.003884f, +0.003473f, +0.004047f, +0.000129f, -0.001813f, - -0.012025f, +0.005446f, +0.002617f, +0.027689f, -0.001433f, -0.004544f, -0.014976f, -0.017188f, +0.006732f, -0.006577f, - -0.005174f, -0.007858f, +0.015566f, +0.009318f, +0.008325f, -0.000800f, -0.004480f, +0.002662f, -0.004246f, +0.001923f, - +0.003098f, -0.000024f, +0.001039f, -0.000568f, -0.006356f, -0.001529f, -0.004172f, -0.004185f, +0.000946f, +0.000039f, - -0.001940f, -0.005174f, +0.003623f, -0.001370f, -0.000841f, -0.000663f, -0.000939f, -0.000676f, +0.005227f, +0.001105f, - +0.002769f, +0.000218f, -0.003717f, -0.001111f, -0.000996f, +0.002683f, +0.001062f, -0.000430f, +0.001276f, +0.002742f, - -0.001349f, +0.001288f, +0.001166f, -0.000007f, +0.000280f, +0.000937f, -0.000838f, -0.000762f, -0.000222f, -0.000897f, - +0.000118f, +0.000680f, +0.001143f, +0.000166f, -0.000327f, +0.000707f, +0.000016f, -0.000681f, -0.001225f, -0.000267f, - -0.000307f, +0.000020f, -0.000320f, +0.000073f, +0.000667f, +0.000732f, -0.000547f, +0.000172f, -0.000152f, +0.000201f, - -0.000722f, -0.000634f, +0.000063f, +0.000070f, -0.000079f, +0.000786f - }, - { - -0.003593f, -0.040893f, +0.007710f, -0.000629f, +0.001028f, -0.001057f, -0.001943f, +0.000134f, -0.002120f, -0.000801f, - +0.009536f, +0.002570f, +0.002426f, -0.001832f, -0.023880f, -0.008382f, +0.017885f, -0.014895f, +0.012807f, +0.003623f, - -0.013173f, +0.000119f, +0.004883f, +0.008262f, -0.008487f, -0.002302f, -0.007610f, +0.000389f, -0.002223f, -0.005665f, - +0.004552f, +0.005601f, +0.000844f, -0.006396f, -0.002396f, -0.007472f, -0.005629f, -0.009746f, -0.000666f, -0.005941f, - +0.000274f, -0.004350f, +0.001621f, +0.003540f, +0.001034f, -0.002782f, -0.001249f, +0.000640f, -0.000396f, -0.000904f, - +0.001444f, -0.000903f, -0.001335f, +0.000587f, +0.000158f, +0.002212f, +0.001098f, +0.001260f, +0.000041f, -0.002141f, - -0.000492f, -0.001810f, +0.001199f, -0.000106f, +0.000519f, +0.000923f, -0.001417f, +0.001141f, -0.001190f, -0.001165f, - -0.000067f, -0.000348f, -0.001625f, -0.000406f, -0.000064f, +0.000080f, -0.000495f, -0.000092f, +0.001234f, +0.000087f, - +0.000219f, -0.000370f, +0.000060f, +0.000342f, -0.000005f, +0.000071f, +0.000196f, +0.000057f, +0.000099f, +0.000607f, - -0.000207f, +0.000135f, +0.000269f, +0.000144f, -0.000195f, -0.000295f - }, - { - -0.051955f, -0.131513f, +0.002624f, -0.058790f, -0.003867f, -0.007034f, -0.004605f, -0.004199f, -0.009237f, +0.007636f, - -0.004215f, +0.000909f, -0.013318f, -0.008381f, +0.011427f, -0.001864f, -0.001969f, -0.004091f, +0.023423f, -0.011394f, - -0.003109f, +0.003720f, -0.007017f, +0.012405f, -0.003953f, -0.003527f, -0.008252f, -0.011349f, -0.006130f, -0.000098f, - -0.008336f, +0.002921f, +0.004347f, +0.001399f, +0.002203f, +0.004754f, -0.007403f, -0.007493f, +0.004401f, -0.001870f, - -0.000736f, -0.001822f, +0.003630f, +0.001654f, -0.001887f, -0.002856f, +0.003183f, +0.000124f, -0.002928f, +0.002332f, - -0.000611f, +0.002662f, -0.001966f, -0.001408f, -0.002425f, +0.001100f, +0.001889f, +0.000193f, -0.000037f, +0.000108f, - -0.000757f, +0.000710f, +0.002335f, +0.001521f, +0.000421f, +0.000342f, -0.000810f, +0.000655f, -0.000187f, +0.000243f, - +0.001681f, -0.000273f, +0.000216f, -0.000664f, +0.000760f, -0.000050f, -0.001191f, +0.000475f, +0.000773f, -0.000230f, - -0.000024f, +0.000258f, +0.000596f, -0.000452f, +0.000686f, -0.000481f, -0.000305f, +0.000694f, +0.000122f, +0.000121f, - +0.000320f, +0.000083f, -0.000169f, +0.000574f, +0.000010f, +0.000069f - }, - { - -0.000368f, -0.015221f, -0.007219f, +0.001987f, -0.002706f, +0.000467f, -0.000050f, +0.001273f, +0.000568f, +0.003950f, - +0.008192f, +0.000672f, +0.000988f, -0.007386f, -0.022436f, -0.004927f, -0.007157f, +0.007428f, -0.006126f, +0.003598f, - +0.015842f, -0.000964f, -0.015542f, +0.002444f, -0.003175f, -0.020111f, +0.001753f, +0.008072f, +0.005530f, +0.008004f, - -0.003583f, +0.005662f, +0.005046f, +0.005137f, +0.000352f, +0.009750f, -0.004961f, -0.000589f, -0.005436f, +0.003672f, - -0.004470f, -0.005120f, +0.000971f, -0.001612f, -0.000412f, +0.002753f, +0.003235f, +0.002069f, -0.000751f, -0.000494f, - -0.001546f, +0.002467f, +0.003418f, +0.000767f, +0.001771f, +0.000413f, -0.001318f, -0.000381f, +0.003658f, -0.002553f, - -0.000050f, -0.000194f, +0.000026f, +0.000900f, +0.000082f, +0.001411f, +0.000035f, +0.000605f, -0.000447f, -0.000248f, - -0.000008f, +0.000881f, +0.000473f, -0.000708f, -0.000993f, +0.001164f, -0.001072f, -0.000484f, +0.000206f, +0.001286f, - +0.000258f, +0.000185f, +0.000237f, -0.000022f, +0.000262f, -0.000164f, +0.000623f, -0.000277f, +0.000383f, -0.000176f, - +0.000151f, +0.000155f, -0.000091f, +0.000432f, -0.000095f, +0.000361f - }, - { - -0.056417f, -0.222638f, -0.016158f, -0.008353f, -0.019717f, +0.000915f, -0.002731f, -0.005178f, -0.000571f, -0.012721f, - -0.001917f, -0.002126f, +0.003009f, +0.001781f, +0.002853f, +0.009223f, -0.005379f, -0.001609f, -0.001107f, -0.003693f, - -0.002390f, -0.000392f, -0.004426f, -0.011263f, -0.006606f, -0.004641f, +0.001694f, +0.007871f, -0.001328f, -0.002697f, - +0.005120f, -0.003936f, -0.002043f, +0.000445f, -0.004510f, -0.002494f, +0.001359f, -0.005707f, -0.002709f, +0.007705f, - -0.000888f, -0.001434f, -0.001246f, -0.002557f, +0.001241f, +0.001760f, -0.000449f, -0.004489f, -0.000234f, -0.005291f, - +0.001368f, +0.000299f, +0.002416f, +0.003528f, +0.000434f, +0.000642f, +0.000107f, +0.001932f, +0.001728f, +0.001393f, - -0.000208f, -0.003147f, -0.002487f, -0.000642f, +0.000603f, +0.000289f, +0.000328f, +0.000089f, -0.000234f, -0.000107f, - -0.000880f, -0.000760f, -0.001672f, +0.000110f, -0.000129f, -0.000763f, -0.000778f, +0.000282f, +0.000870f, -0.000317f, - -0.001249f, +0.000044f, +0.000579f, -0.000072f, -0.000467f, -0.000108f, -0.000152f, +0.000448f, +0.001166f, +0.000307f, - -0.000357f, +0.000304f, +0.000101f, -0.000134f, -0.000278f, +0.000412f - }, - { - -0.000080f, -0.022385f, +0.006423f, -0.001780f, +0.004440f, +0.001289f, +0.000563f, -0.001845f, -0.000211f, +0.001088f, - +0.002995f, +0.000546f, +0.007973f, -0.001999f, +0.000868f, +0.011294f, +0.016198f, -0.009012f, -0.013749f, +0.028794f, - -0.009420f, -0.012295f, -0.000893f, +0.001893f, -0.007414f, -0.001699f, -0.019841f, -0.007872f, -0.019751f, -0.001966f, - -0.009995f, +0.005238f, -0.003243f, -0.007917f, -0.007318f, -0.004217f, -0.005171f, +0.005955f, +0.001090f, +0.001198f, - +0.000481f, +0.002688f, -0.004147f, +0.000759f, +0.003482f, +0.002266f, -0.004635f, -0.001090f, +0.003875f, -0.005175f, - +0.001065f, +0.001824f, +0.004058f, -0.000714f, -0.001584f, -0.000403f, +0.001123f, -0.000841f, +0.001845f, -0.000007f, - +0.004352f, +0.001217f, -0.003875f, -0.000351f, -0.000251f, -0.000406f, +0.001302f, -0.001154f, -0.000698f, +0.000752f, - -0.000340f, -0.000304f, +0.000239f, +0.001203f, +0.000229f, +0.001238f, +0.000021f, +0.000187f, -0.000783f, -0.000359f, - +0.000408f, -0.000536f, +0.000379f, -0.000004f, -0.000025f, -0.000141f, -0.000680f, +0.001287f, +0.000281f, +0.000096f, - -0.000101f, -0.000580f, -0.000585f, +0.000036f, -0.000772f, -0.000086f - }, - { - -0.032697f, +0.024421f, +0.024741f, -0.037219f, -0.020884f, -0.007194f, +0.001297f, -0.007501f, -0.005506f, -0.012687f, - +0.002572f, +0.011624f, -0.006528f, -0.019924f, +0.008736f, +0.014758f, +0.002503f, +0.009018f, -0.006796f, -0.009625f, - -0.004054f, -0.000924f, -0.002708f, -0.000880f, +0.000060f, +0.002044f, +0.000197f, +0.002105f, +0.000782f, +0.000077f, - +0.003055f, +0.001885f, +0.005398f, +0.006484f, -0.004545f, +0.006677f, +0.007613f, -0.002614f, +0.002422f, +0.002802f, - +0.003574f, +0.002300f, +0.005108f, +0.005201f, +0.000760f, +0.000927f, +0.002878f, +0.001420f, -0.001155f, -0.002576f, - -0.003063f, -0.002166f, +0.001385f, +0.000749f, +0.000822f, -0.000496f, -0.000503f, -0.001674f, +0.002205f, -0.000165f, - +0.000725f, +0.000640f, -0.001822f, -0.000800f, -0.000055f, -0.000137f, +0.000968f, -0.000074f, -0.000310f, +0.001053f, - +0.000950f, -0.000775f, +0.000018f, -0.001430f, -0.001978f, +0.000384f, +0.000133f, -0.000652f, -0.000244f, -0.000077f, - -0.000379f, -0.000034f, +0.000392f, -0.000103f, -0.000259f, +0.000120f, +0.000345f, +0.000350f, +0.000492f, -0.000634f, - +0.000294f, -0.000515f, -0.000267f, +0.000132f, +0.000430f, +0.000181f - }, - { - -0.001672f, -0.073155f, -0.003502f, +0.028508f, +0.007425f, +0.007476f, +0.020846f, +0.001375f, -0.005602f, +0.003253f, - +0.009000f, +0.014743f, +0.011361f, -0.003222f, -0.006705f, +0.011732f, -0.004455f, -0.017489f, +0.001603f, +0.003327f, - +0.004834f, +0.003780f, +0.000695f, +0.006367f, +0.013452f, -0.000061f, -0.023136f, +0.015401f, +0.007795f, +0.012254f, - -0.005190f, -0.005011f, -0.000727f, -0.001974f, -0.005983f, +0.000008f, -0.010124f, -0.006795f, +0.004050f, +0.000038f, - +0.000210f, +0.001753f, +0.002316f, -0.005268f, -0.003044f, +0.006126f, -0.001430f, -0.003094f, +0.002180f, -0.000091f, - -0.001186f, +0.003083f, -0.002742f, +0.000735f, +0.001847f, +0.000003f, -0.001517f, -0.001116f, +0.001091f, +0.000290f, - +0.001018f, +0.001577f, +0.000305f, -0.000780f, -0.002722f, +0.000271f, -0.002214f, -0.000880f, +0.000610f, -0.000439f, - +0.000297f, -0.000052f, -0.000031f, -0.000423f, +0.000604f, +0.000734f, +0.000341f, -0.000127f, +0.000365f, +0.002265f, - -0.000422f, +0.000028f, -0.000517f, +0.000287f, -0.000000f, -0.000668f, +0.000127f, -0.000296f, +0.000206f, +0.000358f, - +0.001169f, -0.000412f, -0.000637f, -0.000085f, +0.000095f, +0.000210f - }, - { - -0.005743f, -0.333773f, -0.013506f, +0.021276f, -0.003896f, +0.012003f, -0.006036f, -0.000329f, -0.008212f, -0.003769f, - +0.001766f, +0.001171f, +0.001848f, +0.010762f, -0.020090f, +0.003781f, -0.004740f, -0.003047f, -0.004071f, -0.011043f, - +0.011160f, -0.003705f, +0.006349f, +0.002144f, -0.004197f, +0.000042f, -0.002513f, -0.005285f, -0.006046f, -0.004768f, - -0.005723f, -0.006752f, +0.000268f, -0.001835f, -0.007571f, +0.001933f, +0.000355f, -0.002837f, +0.002220f, -0.004170f, - +0.001833f, +0.004535f, -0.000463f, +0.004046f, -0.006204f, -0.002050f, -0.000266f, +0.003016f, +0.000567f, -0.000154f, - +0.003197f, +0.000106f, -0.000104f, +0.003633f, -0.000809f, -0.000724f, -0.000163f, +0.001450f, +0.001494f, +0.000473f, - -0.000760f, -0.001613f, +0.001285f, +0.000345f, -0.001084f, -0.000368f, -0.002351f, +0.001077f, -0.000236f, +0.000263f, - -0.000511f, -0.001117f, -0.000776f, +0.000417f, +0.000449f, +0.000316f, -0.000303f, +0.000318f, +0.000275f, -0.000009f, - -0.000047f, +0.000043f, +0.000689f, +0.000036f, -0.000306f, -0.000447f, -0.000067f, +0.000010f, +0.000144f, +0.000028f, - -0.000663f, +0.000297f, +0.000160f, +0.000304f, +0.000045f, -0.000274f - }, - { - -0.002908f, -0.012995f, +0.036247f, +0.020010f, -0.003589f, +0.000548f, -0.007597f, -0.007488f, -0.005169f, +0.000268f, - -0.009378f, +0.004712f, +0.006515f, +0.008604f, +0.012418f, +0.018334f, -0.002085f, +0.019880f, -0.010069f, +0.019370f, - -0.004085f, -0.004888f, +0.009362f, +0.003144f, +0.011924f, +0.003355f, -0.005510f, -0.013298f, +0.003499f, -0.007925f, - +0.010859f, -0.002408f, +0.000203f, -0.004188f, -0.004793f, +0.001136f, +0.000455f, +0.006309f, +0.004107f, +0.005161f, - -0.000921f, +0.004952f, +0.002731f, +0.000758f, +0.000809f, -0.000268f, -0.000108f, +0.004145f, +0.000023f, -0.000054f, - +0.003026f, -0.002261f, +0.004810f, -0.001085f, +0.001077f, +0.000659f, +0.001271f, +0.001442f, -0.000131f, +0.001289f, - +0.000477f, +0.001283f, +0.000136f, +0.000085f, -0.001532f, -0.000401f, -0.001899f, +0.001188f, -0.001274f, -0.000549f, - +0.001263f, -0.000109f, -0.000530f, -0.000662f, -0.000093f, -0.000319f, -0.000383f, +0.000185f, +0.001779f, +0.000251f, - +0.000467f, -0.000151f, -0.000380f, +0.000204f, +0.000037f, +0.000583f, +0.000332f, -0.000345f, +0.000087f, +0.000329f, - +0.000737f, +0.000154f, -0.000651f, +0.000079f, +0.000226f, +0.000034f - }, - { - +0.077732f, -0.004763f, -0.025311f, +0.027683f, -0.010491f, +0.008647f, -0.001810f, +0.009028f, +0.007631f, -0.002713f, - +0.000435f, +0.017693f, -0.000250f, +0.013796f, +0.000606f, +0.002353f, -0.023364f, -0.006912f, +0.006474f, -0.001810f, - +0.010372f, -0.005705f, +0.011113f, -0.000617f, +0.002389f, -0.007349f, +0.001713f, +0.015367f, -0.003483f, +0.002046f, - +0.007682f, +0.009574f, -0.001242f, +0.003124f, +0.000540f, +0.010811f, +0.001627f, +0.002038f, -0.001941f, -0.004957f, - -0.001598f, +0.002625f, +0.002024f, +0.008438f, +0.001212f, -0.000625f, -0.002614f, +0.002318f, +0.000391f, +0.002057f, - -0.003924f, -0.000993f, -0.002257f, -0.005071f, +0.004607f, -0.001586f, +0.000023f, -0.002334f, -0.000266f, -0.001138f, - -0.001624f, +0.000113f, +0.000323f, +0.000909f, +0.001472f, +0.000917f, -0.001874f, -0.000275f, -0.000374f, +0.000402f, - +0.000640f, -0.001068f, -0.001218f, -0.000200f, +0.000979f, -0.000563f, +0.000630f, -0.000077f, -0.000086f, +0.000213f, - +0.000376f, -0.000502f, -0.000163f, -0.000467f, -0.000833f, +0.000864f, -0.000570f, -0.000797f, -0.000270f, +0.000180f, - +0.000203f, -0.001099f, +0.000209f, +0.000528f, +0.000497f, +0.000359f - }, - { - -0.002486f, -0.038689f, +0.014708f, -0.000512f, +0.003724f, +0.006932f, +0.011617f, +0.004504f, +0.003347f, +0.004246f, - +0.000031f, -0.005065f, -0.010775f, -0.026671f, +0.034336f, -0.005045f, +0.010610f, +0.013139f, +0.008254f, -0.005418f, - -0.006761f, +0.001148f, +0.009236f, +0.007917f, -0.006755f, +0.007302f, +0.003749f, +0.010294f, +0.003607f, +0.001516f, - +0.003604f, -0.002039f, +0.004408f, +0.000494f, -0.007951f, -0.002256f, -0.005183f, +0.001251f, +0.003310f, +0.003268f, - +0.001530f, -0.003508f, -0.004574f, -0.000036f, -0.004350f, -0.001452f, -0.003499f, -0.002317f, -0.000211f, +0.002998f, - -0.000684f, +0.000606f, -0.001401f, +0.000048f, -0.000613f, -0.000558f, -0.001461f, -0.001061f, +0.000208f, -0.002090f, - -0.002611f, -0.000707f, +0.000976f, -0.000817f, -0.001392f, +0.002224f, -0.002114f, -0.000326f, -0.000056f, -0.000088f, - +0.000589f, +0.000504f, +0.000548f, +0.000194f, +0.000092f, -0.000705f, +0.000343f, -0.000783f, +0.000366f, -0.000121f, - -0.000639f, +0.000237f, -0.000086f, -0.000773f, +0.000333f, -0.000029f, -0.000225f, -0.000323f, -0.000039f, -0.000729f, - -0.000376f, -0.000642f, +0.000278f, +0.000063f, -0.000415f, -0.000416f - }, - { - +0.042167f, -0.118793f, -0.009581f, -0.016056f, +0.005768f, -0.014166f, -0.004677f, +0.006725f, -0.003897f, +0.004666f, - +0.015438f, -0.000949f, -0.008111f, -0.012532f, +0.014811f, +0.000410f, -0.010512f, -0.009770f, +0.014945f, +0.001495f, - +0.005930f, -0.001405f, -0.001396f, -0.002260f, +0.012329f, +0.001710f, -0.000144f, -0.006666f, +0.003910f, +0.002250f, - +0.004725f, +0.004705f, +0.010447f, -0.005503f, -0.013078f, -0.005402f, -0.002979f, -0.006754f, +0.007006f, -0.000406f, - -0.001789f, +0.006543f, +0.001576f, -0.000257f, -0.000390f, -0.002838f, +0.005380f, +0.000493f, -0.002328f, +0.001488f, - -0.003293f, -0.004342f, +0.002307f, +0.002008f, +0.001305f, +0.000433f, -0.000079f, -0.002869f, +0.001339f, +0.001292f, - +0.000744f, +0.001096f, -0.001065f, -0.001742f, +0.000056f, +0.001602f, +0.000070f, +0.000084f, +0.000374f, -0.000410f, - +0.001662f, +0.000200f, +0.000836f, +0.002497f, +0.000394f, +0.001164f, -0.000366f, +0.000420f, +0.000213f, -0.000657f, - +0.000294f, +0.000524f, +0.000699f, +0.000057f, +0.000120f, -0.001104f, -0.000473f, -0.000547f, +0.000076f, +0.000666f, - -0.000076f, +0.000762f, +0.000355f, -0.000150f, -0.000259f, -0.000522f - } - }, - { - { - +0.003458f, -0.086758f, -0.006690f, +0.020108f, +0.004724f, -0.001056f, -0.001798f, -0.000868f, +0.008115f, +0.012169f, - -0.001848f, +0.004630f, -0.012530f, +0.002873f, +0.023556f, +0.014609f, -0.000803f, +0.005204f, +0.001696f, -0.022429f, - +0.007318f, +0.020479f, +0.000321f, +0.020155f, -0.015804f, -0.008589f, -0.003681f, -0.001775f, -0.017485f, -0.006429f, - +0.008578f, -0.000644f, +0.000220f, -0.006911f, -0.006067f, +0.006684f, +0.000708f, -0.008233f, +0.000062f, -0.002318f, - +0.001514f, +0.005350f, +0.002159f, +0.004889f, +0.002470f, +0.003750f, -0.001317f, -0.002418f, -0.003490f, -0.001827f, - +0.005614f, +0.001111f, +0.000089f, -0.001357f, +0.000840f, -0.001540f, +0.000489f, +0.000008f, -0.000750f, -0.001187f, - +0.000240f, +0.001626f, -0.003345f, +0.000745f, +0.001588f, -0.001819f, +0.000365f, -0.001670f, +0.000008f, +0.000159f, - +0.000309f, -0.000698f, +0.000759f, +0.000689f, +0.001587f, -0.000277f, -0.000437f, -0.000213f, +0.000233f, +0.000099f, - -0.001615f, -0.000309f, +0.000723f, +0.000438f, -0.000422f, -0.000662f, -0.000168f, -0.000426f, +0.000461f, +0.000302f, - +0.000350f, -0.000419f, -0.000527f, -0.000165f, +0.000203f, +0.000365f - }, - { - +0.022095f, -0.050248f, -0.034219f, +0.040914f, -0.003428f, +0.003293f, -0.002746f, -0.001458f, -0.008755f, +0.002349f, - -0.002197f, +0.010726f, +0.012630f, -0.002342f, +0.008870f, +0.002938f, -0.009683f, +0.000366f, -0.006595f, -0.000277f, - -0.016918f, +0.001418f, -0.007291f, -0.000368f, -0.001076f, +0.003107f, -0.000008f, +0.001056f, +0.007146f, +0.000586f, - -0.006338f, -0.003695f, +0.011125f, -0.003754f, -0.006525f, +0.003087f, -0.000128f, -0.006685f, +0.000154f, -0.007922f, - +0.001317f, +0.003654f, -0.008331f, -0.003292f, +0.000845f, +0.000586f, +0.000541f, +0.003405f, +0.002756f, -0.000132f, - +0.001030f, +0.002143f, -0.000922f, -0.003059f, +0.002196f, -0.001342f, +0.000793f, -0.000329f, -0.000478f, -0.001055f, - -0.001092f, -0.000637f, +0.001008f, +0.000098f, +0.000679f, +0.001190f, +0.000331f, -0.000141f, +0.000702f, -0.000770f, - +0.000386f, +0.000030f, +0.001642f, -0.000687f, -0.000964f, +0.000449f, -0.000511f, -0.000382f, -0.000346f, -0.001328f, - +0.000666f, +0.000642f, -0.000817f, +0.000111f, +0.000499f, -0.000488f, -0.000273f, +0.000598f, +0.000108f, +0.000321f, - -0.000548f, -0.000089f, -0.000133f, -0.000030f, +0.000081f, +0.000238f - }, - { - -0.011540f, +0.068826f, +0.008736f, +0.047143f, +0.004466f, -0.006130f, +0.004649f, -0.002189f, +0.001780f, -0.002604f, - -0.006497f, +0.006328f, -0.009057f, +0.026997f, -0.001430f, -0.008015f, -0.002894f, -0.012777f, +0.000453f, -0.007901f, - -0.000372f, +0.001327f, +0.013275f, -0.009144f, +0.014028f, +0.006438f, -0.007496f, +0.002220f, +0.000256f, -0.003991f, - -0.000088f, +0.008065f, -0.004512f, -0.000317f, -0.004617f, -0.004554f, -0.008222f, +0.004919f, -0.001396f, -0.001956f, - -0.001850f, -0.002420f, +0.000370f, -0.000470f, +0.000912f, -0.004802f, +0.000737f, -0.000495f, +0.003394f, +0.003859f, - -0.001200f, +0.000799f, -0.003442f, -0.001573f, +0.001361f, +0.002876f, -0.000121f, +0.000250f, +0.002013f, +0.000802f, - +0.000339f, +0.000707f, +0.002467f, +0.000717f, -0.000707f, -0.000327f, +0.000195f, -0.001196f, -0.000267f, -0.001160f, - +0.000639f, +0.000532f, -0.000234f, +0.001091f, +0.000441f, +0.000500f, -0.000024f, -0.000008f, -0.002108f, -0.000061f, - -0.000273f, -0.000109f, -0.000183f, +0.000297f, +0.000407f, +0.000131f, +0.000020f, -0.000623f, +0.000388f, -0.000347f, - -0.000246f, -0.000341f, -0.000029f, +0.000068f, +0.000115f, +0.000440f - }, - { - +0.004472f, -0.013345f, -0.018119f, -0.000823f, +0.000446f, -0.000997f, -0.001678f, -0.001841f, +0.000180f, -0.000487f, - +0.007222f, +0.003246f, +0.003903f, +0.013403f, -0.036054f, -0.008885f, -0.007388f, +0.008199f, -0.000312f, +0.011132f, - -0.010258f, +0.001311f, -0.000429f, +0.006151f, -0.000919f, -0.004552f, -0.007894f, +0.005110f, -0.001068f, -0.003961f, - +0.009417f, -0.006629f, +0.003544f, -0.000523f, -0.006266f, -0.007585f, -0.006808f, -0.001889f, -0.005530f, -0.002616f, - -0.001080f, -0.001941f, +0.001525f, +0.000566f, +0.000397f, -0.003183f, +0.001930f, -0.001917f, +0.000012f, +0.000221f, - +0.000551f, -0.002377f, +0.002077f, -0.000027f, -0.000887f, +0.001705f, +0.001681f, +0.000605f, +0.001154f, -0.002338f, - -0.001628f, +0.000614f, -0.000291f, -0.001124f, +0.001300f, +0.000386f, +0.000803f, +0.000027f, -0.001632f, +0.001207f, - -0.001740f, -0.000930f, -0.000670f, +0.000120f, -0.000518f, +0.000003f, -0.000221f, +0.000141f, +0.000655f, +0.000869f, - -0.000068f, -0.000042f, -0.000138f, +0.000805f, +0.000176f, +0.000124f, -0.000172f, +0.000184f, +0.000010f, +0.000400f, - +0.000164f, +0.000166f, +0.000275f, +0.000287f, -0.000119f, -0.000105f - }, - { - +0.056654f, -0.248414f, -0.025365f, -0.043915f, -0.003992f, -0.006391f, -0.007953f, -0.003677f, -0.010777f, +0.000464f, - +0.011075f, -0.006334f, -0.015391f, +0.008779f, -0.000859f, -0.004342f, +0.002004f, -0.015018f, +0.012052f, -0.001557f, - +0.003972f, -0.005272f, +0.008071f, +0.004058f, +0.002145f, -0.016199f, -0.007460f, -0.005168f, -0.005894f, +0.003255f, - -0.005420f, -0.004314f, +0.000774f, +0.006271f, +0.000696f, +0.005159f, -0.016265f, +0.000677f, +0.002297f, -0.003313f, - -0.000490f, +0.003204f, -0.004166f, +0.004777f, -0.001260f, -0.000112f, +0.001981f, +0.000394f, -0.003698f, +0.000852f, - +0.003633f, +0.000876f, -0.001289f, -0.001899f, -0.004219f, +0.001466f, +0.002550f, -0.001083f, +0.001453f, -0.001949f, - +0.000178f, +0.000689f, +0.000897f, +0.000851f, +0.001604f, +0.000020f, -0.000585f, +0.000950f, +0.000282f, -0.000002f, - -0.000126f, +0.000506f, -0.000935f, +0.000525f, +0.000623f, +0.000149f, -0.000282f, +0.000574f, +0.000143f, -0.000541f, - +0.001171f, +0.000795f, -0.000882f, -0.000049f, -0.000054f, +0.000374f, -0.000089f, +0.000234f, +0.000084f, -0.000586f, - +0.000963f, +0.000167f, -0.000387f, +0.000282f, -0.000213f, +0.000202f - }, - { - -0.001257f, -0.030837f, +0.013128f, -0.004376f, -0.002515f, +0.000319f, -0.000034f, +0.001871f, +0.001224f, +0.002022f, - +0.010089f, +0.001464f, -0.005558f, -0.007540f, -0.019108f, -0.006428f, +0.005717f, +0.006868f, -0.001523f, -0.002486f, - +0.007109f, +0.002156f, -0.006195f, +0.004821f, -0.024095f, -0.001787f, -0.006208f, +0.003334f, -0.000913f, +0.018341f, - -0.006840f, +0.006240f, -0.001640f, +0.001833f, +0.004446f, +0.009652f, +0.000593f, -0.000769f, -0.006214f, +0.002431f, - -0.000532f, -0.002962f, -0.002838f, -0.000941f, +0.001228f, +0.001184f, +0.005018f, -0.001029f, -0.001051f, -0.000413f, - +0.000080f, +0.002521f, +0.002059f, +0.000758f, +0.002870f, +0.000365f, -0.003338f, +0.002564f, +0.000992f, -0.002446f, - -0.001359f, +0.001957f, +0.000459f, -0.000773f, -0.000006f, +0.001656f, +0.000508f, +0.000741f, -0.000661f, +0.000896f, - +0.000049f, -0.000757f, +0.001673f, -0.000040f, +0.000236f, -0.000612f, -0.000516f, +0.000577f, -0.000617f, +0.001366f, - +0.000136f, +0.000275f, +0.000066f, +0.000442f, -0.000360f, -0.000099f, +0.000477f, +0.000196f, +0.000765f, -0.000100f, - -0.000392f, +0.000442f, +0.000193f, -0.000138f, -0.000125f, +0.000293f - }, - { - +0.029486f, -0.384550f, -0.005855f, -0.018316f, +0.002108f, +0.001622f, +0.001854f, -0.006069f, -0.000714f, -0.019183f, - -0.005215f, -0.004757f, +0.012779f, +0.001335f, +0.002877f, +0.000085f, +0.009174f, -0.007652f, +0.003177f, -0.008118f, - -0.005588f, +0.000903f, -0.005176f, -0.011397f, -0.011839f, -0.004270f, +0.003610f, +0.008193f, +0.003034f, -0.000106f, - +0.003113f, -0.001595f, -0.003122f, -0.001808f, -0.002751f, -0.004648f, +0.000495f, -0.003116f, -0.001586f, +0.004119f, - +0.000534f, +0.000985f, -0.003335f, -0.002193f, -0.001746f, +0.005530f, -0.006498f, -0.001616f, -0.001084f, -0.000806f, - -0.002920f, +0.001280f, +0.002603f, +0.001920f, +0.002028f, -0.000139f, +0.001555f, +0.001751f, +0.002434f, +0.000884f, - +0.001170f, -0.002773f, -0.003167f, +0.001080f, -0.001329f, +0.001059f, +0.000311f, -0.000403f, +0.000062f, -0.000949f, - -0.000059f, -0.001824f, -0.001183f, +0.000384f, -0.000217f, -0.000414f, -0.000799f, +0.000026f, +0.000356f, -0.000323f, - -0.000718f, +0.000405f, +0.000387f, +0.000368f, -0.000493f, -0.000772f, +0.000589f, -0.000044f, +0.001074f, +0.000455f, - +0.000272f, +0.000230f, +0.000368f, -0.000453f, -0.000005f, +0.000117f - }, - { - -0.002246f, +0.002043f, -0.012119f, +0.005507f, +0.004356f, +0.001439f, -0.002008f, -0.000496f, -0.000264f, +0.000609f, - -0.002959f, +0.003420f, +0.004335f, +0.006917f, -0.006468f, +0.016492f, -0.003470f, +0.001717f, -0.007939f, +0.015624f, - -0.017133f, +0.009575f, -0.014387f, +0.003756f, +0.004491f, -0.015836f, -0.016820f, -0.022265f, -0.002211f, -0.005065f, - -0.006426f, -0.001259f, -0.008744f, -0.000903f, -0.008963f, -0.012005f, +0.000870f, -0.000508f, +0.003322f, +0.001139f, - +0.003786f, -0.003701f, -0.001045f, +0.003851f, -0.003149f, +0.000647f, +0.000119f, -0.004000f, +0.001569f, +0.000377f, - +0.000676f, +0.003130f, -0.000287f, +0.000453f, +0.000380f, -0.002401f, +0.003621f, +0.000942f, +0.000935f, +0.000866f, - +0.002767f, +0.000863f, -0.003205f, -0.001118f, -0.000195f, +0.000035f, +0.000388f, -0.000480f, +0.000185f, -0.001489f, - +0.001011f, -0.001412f, +0.001522f, +0.001153f, +0.000407f, +0.001159f, -0.000348f, +0.000014f, -0.000438f, +0.000183f, - -0.000052f, -0.000828f, +0.000043f, +0.000379f, -0.000051f, +0.000058f, -0.000103f, +0.000501f, -0.000073f, +0.000774f, - -0.000141f, -0.000714f, -0.000191f, -0.000201f, -0.000613f, -0.000253f - }, - { - +0.065067f, -0.013794f, -0.067041f, -0.038840f, -0.006233f, +0.000447f, +0.003151f, -0.011173f, -0.004761f, -0.003343f, - -0.003793f, -0.004105f, -0.002227f, -0.009938f, +0.008963f, -0.001395f, +0.001940f, +0.010790f, -0.008583f, -0.002723f, - -0.005010f, -0.005225f, -0.006531f, +0.001769f, +0.005137f, -0.001146f, +0.001291f, +0.003328f, -0.000436f, +0.000347f, - +0.004028f, +0.008912f, +0.003355f, +0.003568f, -0.003602f, +0.001435f, +0.010138f, +0.004416f, -0.002041f, +0.001058f, - +0.005074f, +0.004230f, +0.007283f, +0.001382f, +0.003839f, -0.001356f, +0.003002f, +0.000141f, -0.000880f, +0.000939f, - -0.002227f, -0.003440f, +0.000021f, +0.002181f, +0.000922f, -0.001005f, -0.004102f, +0.000521f, +0.001111f, +0.000152f, - -0.000038f, +0.001535f, -0.001364f, -0.000224f, -0.001341f, -0.001742f, +0.000514f, +0.001120f, -0.000551f, +0.000639f, - +0.001762f, -0.000297f, -0.001316f, -0.000136f, -0.000896f, -0.001830f, -0.000241f, +0.000480f, -0.000570f, -0.000479f, - +0.000128f, +0.000005f, -0.000027f, -0.000644f, +0.000229f, -0.000389f, +0.000776f, +0.000572f, -0.000615f, +0.000535f, - -0.000246f, -0.000368f, -0.000429f, +0.000352f, +0.000492f, +0.000295f - }, - { - +0.002786f, -0.052853f, -0.002646f, +0.002260f, +0.008593f, +0.014348f, +0.020683f, -0.005162f, +0.000014f, -0.003752f, - +0.014084f, +0.010555f, +0.009338f, +0.006402f, -0.006439f, +0.004781f, -0.005783f, +0.005593f, +0.001977f, -0.000411f, - -0.017724f, +0.018279f, +0.003540f, +0.016537f, +0.015331f, -0.007169f, -0.010560f, +0.000137f, +0.012618f, +0.002097f, - -0.001831f, +0.002761f, -0.002542f, -0.000126f, -0.001907f, +0.001757f, -0.013466f, -0.006359f, +0.000824f, +0.002097f, - -0.000726f, +0.000873f, -0.000999f, -0.003864f, +0.000928f, +0.004871f, +0.000998f, -0.003502f, -0.002187f, +0.001508f, - +0.001023f, +0.003052f, -0.001103f, +0.002189f, -0.002992f, +0.001159f, -0.004277f, +0.000967f, +0.000866f, +0.001243f, - +0.001841f, +0.001447f, +0.000307f, -0.001236f, -0.002299f, -0.001037f, -0.000489f, -0.000341f, -0.000329f, +0.000116f, - -0.000088f, +0.000229f, +0.000564f, -0.000359f, +0.000917f, +0.001066f, -0.001030f, +0.000718f, -0.000118f, +0.001479f, - +0.000175f, -0.000003f, +0.000117f, -0.000122f, -0.000166f, -0.000035f, -0.000694f, +0.000253f, -0.000462f, +0.000891f, - +0.000967f, -0.000118f, -0.000494f, -0.000587f, +0.000384f, +0.000891f - }, - { - +0.005703f, -0.307829f, -0.038576f, -0.004004f, +0.033788f, -0.025020f, +0.022184f, -0.009556f, -0.010706f, -0.000450f, - -0.000245f, +0.008570f, +0.005659f, -0.009140f, -0.014123f, +0.011474f, -0.002748f, -0.001664f, -0.005990f, -0.004159f, - -0.001384f, +0.002166f, +0.002142f, +0.002165f, -0.002397f, +0.000996f, -0.001702f, -0.009495f, -0.005595f, -0.003222f, - -0.003374f, -0.008427f, +0.004066f, -0.007054f, -0.000247f, -0.001558f, -0.002950f, +0.005040f, -0.002743f, +0.001173f, - +0.000539f, +0.001847f, +0.000668f, +0.002127f, -0.003398f, -0.000551f, -0.001078f, +0.003174f, +0.000666f, +0.002121f, - -0.000432f, +0.000378f, +0.001559f, +0.001388f, -0.000835f, -0.002922f, +0.001079f, +0.001664f, +0.000075f, +0.002290f, - -0.000525f, -0.001528f, -0.000031f, +0.001150f, +0.000436f, -0.002309f, -0.001017f, -0.000298f, -0.000542f, +0.000012f, - -0.000539f, -0.000228f, -0.001448f, +0.000548f, +0.000817f, +0.000887f, -0.000123f, -0.000386f, +0.000220f, +0.000316f, - -0.000113f, +0.000426f, +0.000371f, +0.000048f, -0.000124f, -0.000971f, +0.000359f, +0.000192f, +0.000444f, -0.000428f, - -0.000378f, +0.000265f, -0.000079f, +0.000339f, -0.000218f, +0.000127f - }, - { - +0.003213f, +0.028185f, -0.007983f, +0.008620f, +0.008664f, +0.002647f, -0.006540f, -0.009229f, -0.004066f, -0.002579f, - -0.011806f, +0.003474f, +0.001138f, +0.034499f, +0.011886f, -0.001092f, +0.013564f, +0.010059f, +0.004991f, +0.006089f, - -0.003577f, -0.003798f, +0.009933f, +0.002395f, +0.011872f, +0.009891f, -0.013580f, -0.002645f, -0.002552f, -0.006993f, - +0.010981f, -0.002490f, -0.002040f, -0.003405f, -0.003112f, -0.004403f, -0.002856f, +0.005094f, +0.008565f, +0.005685f, - +0.000348f, -0.001135f, +0.004765f, +0.002325f, +0.001124f, -0.002387f, +0.002230f, +0.003032f, -0.000983f, +0.002755f, - +0.000466f, -0.000277f, +0.000684f, +0.002787f, -0.001466f, +0.004973f, -0.000311f, -0.002100f, +0.000437f, +0.001370f, - +0.000823f, +0.001528f, +0.002046f, -0.002344f, -0.001687f, -0.000785f, -0.000765f, +0.000421f, -0.000562f, -0.000045f, - -0.001711f, +0.001141f, +0.000360f, -0.001644f, +0.000038f, +0.000230f, +0.000457f, +0.000014f, +0.001563f, +0.000410f, - +0.000552f, -0.000222f, -0.000517f, +0.000294f, -0.000707f, +0.000579f, +0.000599f, -0.000701f, -0.000184f, +0.000203f, - +0.000405f, +0.000141f, +0.000048f, -0.000432f, +0.000259f, +0.000062f - }, - { - -0.049774f, +0.158774f, -0.006751f, +0.003716f, +0.006378f, -0.000419f, -0.003581f, +0.015551f, +0.002154f, -0.000368f, - +0.010467f, +0.013062f, -0.005600f, +0.029012f, -0.007666f, +0.000699f, -0.010011f, -0.012213f, +0.007123f, -0.002930f, - -0.000262f, -0.002790f, +0.015119f, +0.005245f, -0.009780f, -0.005278f, +0.002034f, +0.011027f, +0.003396f, -0.007380f, - +0.010913f, +0.004824f, +0.003733f, +0.004720f, +0.007308f, -0.001507f, +0.005026f, +0.006230f, -0.008022f, +0.002152f, - -0.004670f, +0.001476f, +0.002327f, +0.005935f, +0.002192f, -0.000024f, -0.002535f, -0.000928f, +0.000977f, +0.004228f, - -0.003547f, -0.000176f, -0.004224f, -0.000095f, +0.000307f, +0.003306f, -0.003594f, -0.001830f, +0.000003f, -0.000057f, - -0.002227f, +0.001467f, -0.001001f, +0.000562f, +0.001017f, +0.000713f, -0.002190f, +0.000114f, -0.001714f, +0.000562f, - +0.001144f, -0.000851f, -0.001517f, +0.000688f, +0.000050f, -0.000357f, +0.000970f, -0.001187f, +0.000297f, +0.001239f, - -0.000698f, -0.000704f, -0.000213f, +0.000058f, -0.001025f, -0.000122f, -0.000208f, -0.000691f, -0.000092f, +0.000267f, - -0.000472f, -0.000713f, +0.000245f, +0.000583f, +0.000112f, +0.000651f - }, - { - +0.002833f, -0.022580f, -0.005014f, +0.008855f, +0.001263f, +0.001849f, +0.013244f, +0.006153f, +0.005796f, -0.002821f, - +0.006327f, -0.011553f, -0.005807f, +0.036800f, -0.060972f, +0.003248f, +0.018780f, +0.008465f, +0.002095f, +0.005893f, - -0.013076f, +0.018187f, -0.001802f, +0.010344f, -0.002227f, +0.002491f, +0.006394f, +0.003947f, +0.003778f, -0.003415f, - +0.004961f, +0.002127f, -0.005012f, -0.000439f, -0.005061f, -0.006619f, +0.000011f, -0.002521f, +0.004862f, -0.000287f, - +0.000230f, -0.000698f, -0.004704f, -0.003577f, -0.000655f, -0.001604f, -0.002245f, -0.004683f, +0.004509f, +0.001640f, - -0.000560f, +0.002572f, -0.002501f, -0.001622f, +0.000351f, -0.000039f, -0.000278f, -0.003006f, -0.000031f, -0.002727f, - -0.001272f, +0.001918f, +0.000513f, -0.001543f, -0.001202f, +0.000598f, -0.000607f, -0.000475f, +0.000521f, -0.000769f, - +0.000879f, +0.000258f, -0.000766f, -0.000032f, +0.001130f, +0.000657f, -0.000690f, +0.000103f, -0.001188f, +0.000324f, - +0.000374f, -0.000513f, +0.000055f, -0.000089f, -0.000616f, +0.000228f, -0.000058f, -0.000323f, -0.000158f, -0.000252f, - -0.000574f, -0.000090f, -0.000220f, +0.000231f, -0.000494f, -0.000296f - }, - { - -0.045036f, +0.000567f, -0.003553f, -0.012887f, -0.003685f, -0.003185f, +0.001616f, +0.002145f, +0.000302f, +0.002280f, - +0.013991f, +0.000061f, -0.007620f, +0.021062f, -0.034713f, +0.000844f, -0.018604f, +0.004955f, +0.015780f, +0.005287f, - -0.008206f, -0.001141f, -0.001495f, +0.001216f, +0.004302f, +0.001052f, +0.009258f, -0.009337f, +0.002309f, +0.000187f, - +0.007584f, +0.009102f, +0.001339f, -0.004982f, -0.010060f, -0.006362f, -0.005227f, -0.001080f, +0.001765f, +0.002911f, - -0.001759f, +0.007134f, -0.000972f, +0.001965f, -0.001482f, +0.000047f, +0.001501f, +0.000074f, -0.001904f, -0.001705f, - -0.002920f, -0.000078f, +0.002058f, +0.001687f, +0.001512f, -0.001339f, -0.000446f, -0.001110f, -0.000466f, +0.001554f, - -0.000333f, +0.001361f, -0.000554f, -0.001737f, -0.000799f, +0.000950f, +0.000299f, +0.000456f, +0.000165f, -0.000296f, - +0.001196f, +0.000879f, +0.000681f, +0.001154f, +0.001179f, +0.000577f, -0.000402f, -0.000156f, -0.000126f, -0.000213f, - +0.000969f, -0.000449f, +0.000656f, +0.000038f, +0.000222f, -0.000217f, -0.000896f, -0.000799f, -0.000327f, +0.000233f, - +0.000333f, +0.000327f, +0.000350f, +0.000282f, -0.000587f, -0.000426f - } - }, - { - { - -0.001021f, -0.035151f, +0.031154f, +0.009273f, +0.000709f, +0.001359f, -0.000323f, -0.000731f, +0.005478f, +0.005102f, - -0.009841f, +0.002629f, -0.009119f, -0.000864f, +0.016410f, +0.006431f, -0.001063f, +0.017091f, +0.005215f, -0.034280f, - -0.003674f, +0.004206f, -0.014855f, -0.000102f, -0.019594f, +0.003558f, -0.000819f, +0.007078f, -0.004555f, +0.002173f, - +0.011563f, +0.006281f, -0.001936f, -0.007630f, -0.002559f, +0.007219f, +0.004145f, -0.005738f, +0.001070f, +0.000230f, - +0.000681f, +0.001078f, -0.000897f, +0.002320f, +0.003719f, +0.004255f, -0.001221f, +0.002095f, +0.003808f, -0.002644f, - +0.002154f, -0.000871f, -0.000965f, -0.002591f, +0.000460f, -0.001166f, -0.000676f, -0.000863f, -0.000427f, -0.002415f, - -0.000985f, +0.003102f, -0.002046f, +0.000896f, +0.001274f, -0.001067f, +0.001424f, +0.000890f, +0.001168f, -0.000020f, - +0.000073f, -0.000187f, +0.000824f, +0.000022f, +0.001477f, +0.000242f, +0.000239f, +0.000188f, -0.000029f, -0.000173f, - -0.000891f, +0.000129f, +0.000738f, +0.000230f, -0.000547f, -0.000340f, +0.000158f, +0.000224f, +0.000634f, -0.000281f, - +0.000053f, -0.000326f, -0.000072f, +0.000053f, -0.000040f, +0.000345f - }, - { - -0.016432f, +0.044654f, +0.076273f, +0.022946f, -0.011185f, +0.002311f, -0.004396f, -0.000445f, -0.002182f, +0.002819f, - -0.008658f, +0.007367f, +0.008538f, -0.007502f, +0.004702f, +0.009812f, +0.000299f, -0.002791f, -0.010308f, +0.007691f, - -0.011973f, +0.012599f, -0.000204f, -0.004332f, -0.001617f, +0.004163f, +0.003913f, -0.000453f, +0.000738f, -0.002875f, - -0.008156f, -0.005445f, +0.003085f, -0.005806f, -0.003535f, +0.000518f, +0.003165f, -0.003741f, +0.009111f, -0.001944f, - -0.002363f, +0.001056f, -0.006096f, -0.000735f, +0.000851f, -0.000000f, -0.002635f, -0.003129f, -0.000346f, +0.000313f, - +0.002653f, +0.003281f, -0.002487f, -0.003549f, +0.001915f, -0.000888f, +0.000340f, -0.002011f, +0.001435f, +0.000241f, - +0.001157f, +0.001148f, +0.001175f, +0.000133f, +0.000116f, +0.001128f, +0.000740f, +0.000050f, +0.001284f, +0.000393f, - +0.000481f, -0.001612f, +0.000312f, -0.000821f, -0.000906f, -0.000028f, -0.000982f, +0.000054f, +0.000292f, -0.000830f, - +0.000313f, +0.000396f, -0.000316f, +0.000589f, +0.000437f, -0.000292f, +0.000125f, +0.000279f, +0.000153f, +0.000501f, - -0.000450f, -0.000100f, -0.000314f, -0.000213f, -0.000077f, -0.000015f - }, - { - +0.009487f, -0.016250f, -0.067291f, +0.051262f, -0.001033f, -0.004451f, +0.001324f, -0.006923f, -0.000282f, +0.004264f, - -0.000284f, +0.007420f, -0.005929f, +0.023360f, -0.003158f, -0.000953f, +0.014155f, -0.006233f, -0.009310f, -0.007803f, - +0.001749f, +0.004372f, +0.013386f, -0.017049f, +0.006120f, +0.003099f, -0.002906f, +0.004431f, -0.000759f, -0.006748f, - -0.002920f, +0.003255f, -0.009567f, +0.000810f, -0.001919f, -0.000472f, -0.003342f, +0.004431f, -0.002177f, -0.000050f, - +0.005263f, +0.001871f, -0.001359f, -0.002832f, +0.002012f, -0.004559f, +0.003407f, +0.002766f, +0.001630f, -0.000664f, - -0.004273f, +0.002433f, -0.002026f, -0.002877f, +0.002424f, +0.004097f, -0.000945f, -0.001546f, +0.000736f, -0.000756f, - -0.000382f, -0.001173f, +0.000611f, +0.000943f, +0.000051f, -0.000346f, +0.000411f, -0.000147f, +0.000173f, -0.001588f, - +0.000080f, +0.000006f, -0.000816f, +0.000037f, -0.000232f, +0.000554f, -0.000079f, +0.000769f, -0.000952f, +0.000216f, - +0.000006f, +0.000586f, -0.000141f, -0.000468f, -0.000138f, -0.000455f, -0.000552f, -0.000643f, +0.000612f, -0.000076f, - +0.000297f, -0.000148f, +0.000190f, +0.000234f, -0.000437f, -0.000537f - }, - { - -0.004026f, +0.018848f, +0.013290f, +0.000010f, +0.001596f, -0.001108f, -0.000561f, +0.000318f, +0.000629f, -0.001611f, - +0.008736f, -0.001319f, -0.002047f, +0.014250f, -0.026634f, +0.001472f, -0.002820f, +0.014867f, -0.004965f, +0.012886f, - -0.005916f, +0.012656f, +0.001439f, +0.002995f, +0.010566f, +0.006110f, +0.004053f, +0.008474f, -0.001383f, -0.004314f, - +0.008541f, -0.008907f, +0.006345f, +0.004292f, -0.002926f, +0.006127f, +0.003368f, +0.003853f, -0.002157f, -0.002349f, - +0.001045f, -0.001431f, +0.001554f, +0.001131f, +0.001597f, -0.000717f, +0.000304f, -0.002573f, +0.000402f, -0.001933f, - +0.000691f, -0.001160f, +0.000285f, -0.001859f, -0.001008f, +0.000437f, -0.000807f, -0.000810f, +0.000168f, -0.001127f, - +0.000144f, +0.001162f, -0.001208f, -0.000218f, +0.001117f, -0.000137f, +0.001664f, +0.001026f, -0.001062f, +0.001196f, - -0.001087f, +0.000030f, +0.000646f, +0.000573f, -0.000674f, +0.000104f, +0.000140f, -0.000266f, -0.000547f, +0.000126f, - -0.000301f, -0.000084f, +0.000117f, +0.001019f, -0.000569f, -0.000153f, +0.000017f, -0.000037f, -0.000281f, +0.000026f, - -0.000010f, +0.000055f, -0.000153f, -0.000105f, -0.000131f, -0.000018f - }, - { - -0.042747f, -0.309007f, +0.046999f, -0.021969f, +0.003538f, -0.001877f, -0.001997f, -0.001239f, -0.003045f, +0.004534f, - +0.007404f, -0.007200f, -0.011017f, +0.003898f, -0.000538f, +0.004180f, -0.001210f, -0.017514f, +0.011194f, -0.000606f, - +0.001870f, -0.002851f, +0.010020f, -0.002495f, +0.010016f, -0.008384f, -0.003383f, +0.007062f, +0.000706f, +0.004375f, - -0.000119f, -0.003019f, -0.001787f, +0.002102f, -0.000081f, +0.003870f, -0.010451f, +0.008884f, -0.001712f, -0.005856f, - +0.003637f, +0.003871f, -0.006297f, +0.003325f, +0.000340f, +0.002025f, +0.001648f, -0.001354f, -0.004186f, +0.000019f, - +0.001610f, +0.001489f, +0.001070f, +0.002346f, -0.001426f, +0.001120f, +0.001993f, -0.000307f, +0.002304f, -0.000518f, - +0.000663f, +0.000838f, +0.000202f, -0.001723f, +0.000583f, +0.000021f, -0.001526f, -0.001126f, -0.001363f, -0.000246f, - -0.001341f, +0.000696f, -0.000036f, +0.000396f, +0.000038f, +0.000854f, +0.001251f, +0.000454f, +0.000503f, -0.000316f, - +0.000830f, +0.001051f, -0.000930f, -0.000176f, -0.000020f, +0.000637f, +0.000553f, +0.000128f, -0.000417f, -0.000355f, - +0.000445f, -0.000645f, -0.000569f, +0.000484f, +0.000131f, +0.000181f - }, - { - +0.000862f, -0.016833f, +0.016473f, -0.004416f, +0.000008f, +0.000475f, +0.000366f, +0.001111f, -0.003293f, -0.001393f, - +0.006736f, -0.001588f, +0.002022f, +0.009676f, +0.001154f, +0.001835f, +0.004493f, +0.011994f, -0.008029f, -0.013021f, - +0.007593f, -0.000227f, -0.012273f, +0.011795f, +0.001837f, +0.012881f, -0.007690f, -0.002064f, -0.008965f, +0.011520f, - -0.005382f, +0.002781f, -0.011965f, -0.004175f, +0.000481f, +0.005176f, -0.000300f, +0.000499f, -0.001256f, +0.002275f, - +0.001613f, -0.000110f, -0.000945f, +0.000604f, +0.001308f, -0.001855f, +0.002172f, +0.001112f, +0.000807f, -0.000762f, - -0.000342f, -0.000573f, -0.000529f, +0.001005f, +0.000960f, -0.000695f, -0.004003f, +0.000652f, -0.001052f, -0.001564f, - -0.001193f, +0.001215f, -0.000113f, -0.000864f, -0.000676f, +0.000644f, +0.000807f, +0.000781f, -0.001285f, +0.001150f, - +0.000723f, -0.001474f, +0.001079f, +0.000745f, +0.001148f, -0.000423f, +0.000014f, +0.000084f, -0.001020f, +0.000069f, - -0.000239f, +0.000505f, -0.000157f, +0.000244f, -0.000122f, -0.000067f, +0.000610f, +0.000214f, +0.000377f, -0.000095f, - -0.000529f, +0.000024f, +0.000005f, -0.000033f, -0.000259f, +0.000114f - }, - { - +0.017844f, -0.414556f, +0.001874f, -0.011060f, -0.000003f, +0.006328f, +0.005688f, -0.001935f, +0.014281f, +0.002919f, - -0.002523f, -0.016576f, +0.000760f, -0.002678f, -0.002507f, -0.011583f, +0.011221f, -0.005499f, +0.004025f, -0.002760f, - +0.003212f, +0.004812f, -0.002499f, +0.002030f, -0.005274f, -0.005451f, +0.005011f, +0.006969f, +0.010240f, +0.006977f, - +0.003273f, +0.000392f, +0.000373f, +0.000898f, -0.002983f, -0.002611f, -0.000303f, +0.000284f, +0.004488f, +0.000549f, - -0.002899f, -0.004330f, -0.001177f, +0.004094f, -0.004521f, +0.002474f, -0.008175f, +0.000382f, +0.002199f, +0.001411f, - -0.001137f, +0.003554f, +0.002165f, -0.002944f, -0.000032f, +0.000108f, +0.001989f, +0.000867f, +0.001095f, +0.000703f, - +0.002198f, -0.000017f, -0.000961f, +0.001551f, -0.000875f, +0.001453f, -0.000710f, -0.001411f, -0.000211f, -0.000943f, - +0.000348f, -0.000077f, -0.000527f, +0.000162f, +0.000659f, -0.000400f, -0.001173f, -0.000064f, +0.000206f, -0.000393f, - -0.000261f, +0.000773f, +0.000311f, +0.000063f, +0.000029f, -0.000095f, +0.000566f, -0.000532f, -0.000184f, +0.000052f, - +0.000482f, -0.000283f, +0.000110f, -0.000431f, +0.000165f, +0.000063f - }, - { - +0.000478f, +0.027919f, +0.001765f, +0.006045f, +0.000442f, -0.000366f, -0.001966f, +0.001801f, +0.001773f, -0.000354f, - -0.001923f, +0.000623f, +0.002807f, +0.003399f, +0.001418f, +0.012290f, -0.015541f, +0.012143f, +0.002848f, -0.001112f, - -0.027709f, +0.011665f, -0.008073f, +0.014646f, +0.014968f, -0.012289f, -0.001945f, -0.007050f, -0.001561f, +0.001290f, - -0.000110f, -0.003648f, -0.011980f, +0.001873f, -0.001167f, -0.010809f, -0.005109f, -0.004436f, +0.000553f, -0.000779f, - +0.002443f, -0.002710f, +0.002191f, +0.000542f, -0.007956f, -0.002282f, +0.001955f, -0.002523f, +0.000449f, -0.000509f, - -0.001700f, +0.002006f, -0.001167f, -0.000188f, -0.000486f, -0.003129f, +0.001574f, -0.000953f, +0.001551f, +0.000220f, - -0.000233f, -0.000155f, -0.002043f, -0.000001f, +0.000017f, -0.000199f, -0.000088f, +0.000707f, +0.000688f, -0.000823f, - +0.001391f, -0.001742f, +0.001465f, +0.000941f, -0.000510f, -0.000188f, -0.000167f, +0.000749f, -0.000254f, -0.000085f, - -0.000744f, -0.000824f, +0.000254f, +0.000174f, -0.000148f, -0.000003f, +0.000143f, -0.000040f, -0.000764f, +0.000372f, - -0.000190f, +0.000141f, +0.000781f, +0.000348f, -0.000272f, -0.000251f - }, - { - -0.083125f, -0.089545f, +0.041181f, -0.018209f, -0.000614f, -0.000103f, +0.006647f, -0.003621f, +0.008020f, +0.003677f, - -0.001882f, -0.001177f, +0.004342f, -0.006987f, -0.006098f, -0.010029f, -0.003883f, +0.009708f, +0.000342f, +0.001603f, - -0.004103f, -0.005052f, -0.001407f, +0.001324f, +0.004147f, +0.001709f, -0.000024f, +0.001610f, -0.002957f, +0.002055f, - +0.002850f, +0.001817f, +0.000672f, +0.004042f, -0.002132f, -0.003599f, +0.007873f, +0.005830f, -0.001045f, +0.000434f, - +0.002420f, -0.001787f, +0.000302f, -0.005229f, -0.003568f, -0.002504f, +0.005628f, -0.001017f, -0.002068f, +0.001190f, - +0.000332f, -0.001115f, -0.000834f, -0.002043f, -0.002965f, -0.000486f, -0.001752f, -0.000367f, +0.000047f, +0.000586f, - -0.000110f, +0.000792f, -0.001633f, -0.000726f, -0.002645f, -0.002393f, +0.000270f, +0.001375f, +0.000429f, +0.001445f, - +0.001605f, -0.000280f, -0.000606f, +0.000825f, -0.000476f, -0.002034f, -0.000125f, +0.000429f, -0.000040f, +0.000550f, - +0.000208f, -0.000779f, -0.000372f, -0.000179f, +0.000662f, -0.000625f, +0.000199f, +0.000310f, -0.000796f, +0.000456f, - +0.000057f, +0.000444f, +0.000315f, +0.000532f, +0.000000f, +0.000304f - }, - { - -0.003192f, -0.006834f, +0.033781f, -0.009293f, +0.003971f, +0.002397f, +0.009481f, -0.008440f, -0.003070f, -0.006760f, - +0.003643f, -0.008623f, -0.003538f, +0.001864f, -0.019531f, -0.000752f, -0.000677f, +0.010745f, +0.015921f, +0.002680f, - -0.014503f, +0.011270f, -0.002603f, +0.016048f, -0.001689f, -0.006355f, +0.004924f, -0.009518f, +0.005161f, +0.000250f, - -0.004215f, +0.008021f, +0.002561f, -0.001262f, -0.000664f, +0.006217f, -0.006716f, -0.005777f, -0.006605f, -0.000856f, - -0.004071f, -0.004521f, +0.000715f, +0.000810f, +0.000406f, -0.002597f, +0.002452f, +0.002187f, -0.000749f, +0.000876f, - +0.000741f, +0.000744f, -0.001814f, +0.001572f, -0.004896f, +0.002052f, -0.001987f, +0.002078f, -0.001007f, -0.001417f, - +0.000571f, -0.000571f, -0.000424f, +0.000368f, -0.000344f, +0.000194f, +0.001244f, +0.000987f, -0.000230f, -0.000808f, - -0.000209f, -0.000198f, +0.000721f, +0.000165f, +0.001357f, +0.001404f, -0.000537f, +0.000780f, -0.000899f, +0.000796f, - -0.000220f, -0.000062f, +0.000216f, -0.000007f, -0.000297f, +0.000262f, -0.000522f, +0.000540f, -0.000546f, +0.000117f, - +0.000364f, +0.000300f, -0.000167f, -0.000675f, -0.000045f, +0.000473f - }, - { - -0.008210f, -0.276835f, +0.010031f, -0.002507f, +0.024499f, -0.014640f, +0.027695f, -0.015995f, -0.004477f, -0.001892f, - -0.008942f, +0.003986f, +0.003039f, -0.004337f, -0.008730f, +0.010432f, -0.004701f, +0.006242f, +0.001461f, +0.003862f, - -0.000309f, +0.000791f, -0.004559f, -0.001081f, -0.001283f, +0.006729f, +0.006851f, -0.003565f, -0.000985f, -0.003158f, - +0.000206f, -0.004658f, +0.005264f, -0.001135f, +0.003972f, -0.003618f, -0.003998f, +0.007085f, -0.003025f, +0.002406f, - +0.002062f, +0.002353f, +0.000102f, -0.001262f, +0.001868f, +0.003404f, -0.003927f, -0.001609f, -0.002017f, +0.000640f, - -0.002575f, -0.001268f, -0.001310f, -0.000187f, -0.002409f, -0.002359f, +0.001196f, -0.000641f, -0.003046f, +0.000637f, - +0.001768f, -0.000117f, -0.001259f, +0.000113f, +0.000073f, -0.001242f, +0.000162f, -0.000337f, -0.000089f, -0.000278f, - -0.000407f, +0.000780f, -0.001266f, +0.000091f, +0.000266f, +0.000532f, +0.000144f, +0.000226f, +0.000299f, +0.000191f, - +0.000033f, +0.000075f, +0.000043f, +0.000475f, -0.000027f, -0.000625f, +0.000270f, +0.000373f, +0.000456f, -0.000159f, - +0.000037f, +0.000095f, -0.000360f, +0.000209f, -0.000261f, +0.000152f - }, - { - -0.002817f, +0.041968f, +0.002990f, +0.000088f, -0.000912f, -0.001304f, -0.001858f, -0.001943f, +0.004060f, +0.002755f, - -0.006701f, -0.004549f, -0.013533f, +0.031122f, +0.022030f, -0.006102f, +0.001448f, -0.004101f, -0.001256f, -0.004665f, - -0.008327f, -0.003161f, +0.004508f, -0.003891f, +0.000955f, +0.006162f, -0.003384f, +0.003865f, -0.002201f, -0.012250f, - +0.006350f, +0.002569f, -0.005684f, -0.003770f, -0.004764f, -0.006399f, -0.005068f, +0.005610f, +0.003071f, -0.002763f, - +0.002753f, +0.001532f, +0.002467f, +0.002878f, +0.003138f, -0.003393f, -0.000112f, -0.000115f, -0.003917f, +0.003021f, - -0.000117f, -0.001643f, -0.002831f, +0.002071f, -0.001770f, +0.004882f, +0.001589f, -0.001508f, +0.000540f, -0.000499f, - +0.001467f, +0.001329f, +0.001579f, -0.001291f, -0.000583f, -0.000860f, -0.000782f, +0.000819f, +0.000465f, +0.000885f, - -0.000760f, +0.000814f, -0.000046f, -0.000969f, +0.000318f, +0.000757f, +0.000679f, -0.000088f, +0.000905f, -0.000064f, - +0.000234f, +0.000114f, -0.000171f, -0.000158f, -0.000906f, -0.000378f, +0.000145f, -0.000723f, -0.000645f, -0.000212f, - +0.000099f, -0.000081f, +0.000103f, -0.000407f, +0.000129f, +0.000068f - }, - { - +0.010162f, +0.218556f, -0.029875f, -0.005793f, +0.004306f, -0.031914f, -0.032049f, +0.012582f, +0.004456f, +0.008851f, - +0.009218f, -0.000939f, -0.003661f, +0.037875f, -0.008428f, +0.008356f, +0.015102f, -0.000128f, +0.001733f, -0.008293f, - -0.005209f, -0.005052f, +0.000876f, -0.009532f, -0.012176f, +0.000676f, +0.003140f, +0.009068f, -0.002526f, -0.016966f, - +0.000245f, +0.003111f, +0.007641f, +0.001020f, +0.006722f, -0.007456f, -0.006472f, +0.007463f, -0.005163f, +0.000175f, - -0.000505f, +0.004045f, -0.002725f, -0.003946f, +0.000038f, +0.002523f, -0.000658f, -0.001397f, +0.002373f, +0.003999f, - -0.003462f, -0.000424f, -0.003007f, +0.004859f, +0.001445f, +0.004742f, -0.001970f, -0.001324f, +0.000626f, +0.000613f, - -0.002228f, +0.001410f, -0.001443f, -0.000773f, +0.000075f, +0.001111f, -0.002135f, -0.000248f, -0.001514f, +0.000346f, - +0.001119f, +0.001572f, -0.000217f, -0.000085f, +0.000088f, -0.000459f, +0.000002f, -0.001754f, +0.000765f, +0.001277f, - -0.000941f, -0.000972f, -0.000236f, +0.000597f, -0.000660f, -0.000075f, +0.000198f, -0.000032f, +0.000108f, -0.000155f, - -0.000352f, +0.000090f, +0.000559f, +0.000011f, -0.000530f, -0.000027f - }, - { - -0.002388f, -0.008793f, +0.012419f, +0.008809f, -0.004471f, -0.006399f, +0.001045f, -0.003884f, +0.004038f, -0.003927f, - +0.000185f, -0.013615f, -0.008860f, +0.048265f, -0.048252f, -0.019540f, +0.003257f, +0.005788f, -0.009281f, +0.009714f, - -0.006103f, +0.010803f, -0.010069f, +0.006598f, -0.005387f, -0.000595f, -0.002294f, -0.001970f, -0.003830f, -0.000659f, - +0.007348f, -0.005579f, -0.006341f, -0.000852f, -0.002391f, +0.004564f, +0.006844f, +0.000660f, +0.004175f, -0.006349f, - -0.001898f, +0.000337f, -0.000888f, -0.002354f, +0.001048f, +0.002422f, +0.002742f, -0.003078f, +0.004473f, +0.000715f, - +0.001338f, +0.002106f, -0.003101f, +0.000046f, +0.002440f, +0.001561f, +0.002435f, -0.001598f, +0.000083f, -0.000103f, - +0.000317f, +0.001940f, +0.001465f, -0.001650f, -0.000709f, +0.000243f, +0.000088f, +0.000252f, +0.001056f, -0.000984f, - +0.000436f, -0.000172f, -0.001071f, -0.000637f, +0.000624f, +0.000601f, -0.001318f, +0.001227f, -0.000637f, +0.000350f, - +0.000737f, -0.000441f, +0.000177f, -0.000115f, -0.000683f, +0.000373f, +0.000209f, +0.000199f, -0.000319f, +0.000009f, - +0.000085f, +0.000324f, -0.000195f, +0.000473f, -0.000244f, -0.000214f - }, - { - +0.028834f, +0.099985f, -0.002873f, -0.005679f, -0.000495f, -0.000255f, +0.006957f, -0.000163f, -0.001393f, -0.004241f, - +0.004221f, +0.001992f, -0.006760f, -0.010990f, -0.074253f, +0.001919f, -0.013468f, +0.002362f, +0.006737f, -0.000452f, - -0.008301f, +0.000247f, -0.001978f, +0.002635f, +0.003103f, -0.003462f, -0.002333f, -0.014294f, +0.005281f, -0.000253f, - -0.000016f, -0.002017f, -0.006433f, -0.003451f, -0.000599f, +0.002950f, +0.001532f, +0.004947f, -0.000294f, +0.000472f, - -0.000564f, -0.000121f, -0.008671f, +0.001770f, +0.003304f, +0.005176f, -0.000283f, -0.003568f, -0.002491f, -0.002020f, - -0.000828f, +0.001696f, -0.002311f, -0.001016f, +0.000727f, -0.002838f, +0.000759f, -0.000185f, -0.002565f, +0.001007f, - -0.001339f, +0.000865f, +0.002300f, +0.000421f, +0.000615f, +0.001542f, -0.000236f, -0.000024f, -0.000611f, -0.000951f, - +0.000347f, +0.000435f, -0.000077f, -0.000251f, -0.000122f, -0.000622f, -0.000538f, -0.000016f, +0.000299f, -0.000562f, - +0.000209f, -0.000990f, -0.000174f, -0.000852f, +0.000229f, +0.000411f, -0.000274f, -0.000089f, -0.000294f, +0.000052f, - -0.000245f, -0.000351f, +0.000105f, +0.000442f, -0.000252f, +0.000167f - } - }, - { - { - -0.001039f, +0.061699f, -0.032324f, +0.001053f, +0.001570f, +0.002327f, -0.001407f, +0.004097f, -0.001822f, -0.000829f, - +0.000548f, -0.009178f, +0.003065f, +0.008565f, -0.005407f, -0.000623f, +0.009748f, +0.012173f, -0.002352f, -0.025430f, - +0.004046f, -0.012267f, -0.003544f, -0.014867f, -0.006739f, +0.015090f, -0.003934f, +0.001144f, +0.004757f, +0.010342f, - -0.009315f, +0.013079f, -0.004526f, -0.003071f, -0.003635f, +0.004334f, +0.001354f, -0.004854f, +0.004319f, +0.002568f, - +0.000987f, -0.000045f, +0.001419f, -0.000590f, +0.004672f, +0.001443f, +0.001548f, +0.000389f, +0.005427f, -0.002556f, - +0.000503f, +0.000146f, -0.001713f, -0.002100f, -0.001482f, +0.001623f, -0.000959f, -0.000994f, -0.001593f, -0.000872f, - -0.001252f, +0.000876f, -0.000893f, +0.001026f, -0.000149f, +0.001169f, -0.000019f, +0.002524f, -0.000260f, +0.000722f, - +0.000041f, +0.000486f, +0.000037f, +0.001021f, +0.000630f, -0.000067f, +0.000634f, +0.000194f, +0.000170f, -0.000580f, - +0.000228f, +0.000230f, +0.000005f, +0.000140f, -0.000625f, -0.000052f, +0.000333f, +0.000312f, -0.000134f, +0.000155f, - -0.000451f, +0.000284f, -0.000220f, +0.000104f, -0.000118f, +0.000306f - }, - { - +0.012637f, +0.242424f, -0.091859f, +0.009160f, +0.009116f, -0.000191f, -0.006097f, +0.006296f, -0.000015f, +0.005261f, - -0.006701f, -0.004057f, -0.001767f, +0.014753f, -0.001265f, +0.002090f, +0.007416f, -0.020441f, +0.005068f, +0.007502f, - -0.008566f, +0.009439f, -0.001668f, -0.000397f, -0.001862f, +0.002930f, -0.000477f, +0.003303f, +0.001263f, -0.007362f, - -0.002716f, -0.003982f, -0.001556f, -0.005791f, +0.004173f, -0.006801f, +0.005927f, -0.003510f, +0.007823f, +0.006680f, - -0.003595f, -0.004939f, -0.000454f, -0.000021f, -0.001114f, +0.002409f, -0.004991f, -0.000712f, +0.000417f, -0.002345f, - +0.001324f, +0.004202f, -0.003034f, +0.000202f, -0.001833f, +0.000735f, -0.000657f, -0.002391f, +0.000960f, -0.000422f, - +0.003118f, -0.000152f, +0.001987f, -0.000619f, +0.000820f, +0.000738f, +0.000105f, +0.001424f, -0.000600f, +0.001648f, - -0.000113f, -0.001644f, +0.000414f, -0.000419f, -0.000652f, -0.000473f, -0.000984f, +0.001348f, -0.000761f, +0.000134f, - -0.000134f, +0.000224f, -0.000054f, +0.000326f, -0.000251f, +0.000695f, -0.000184f, +0.000031f, +0.000312f, +0.000008f, - +0.000206f, -0.000265f, -0.000211f, -0.000366f, -0.000074f, -0.000013f - }, - { - -0.004820f, -0.184847f, +0.071400f, +0.032891f, +0.007128f, +0.005074f, -0.005327f, -0.000266f, -0.000244f, +0.003663f, - +0.000843f, +0.003808f, +0.003877f, +0.011458f, -0.000681f, -0.005250f, +0.013525f, +0.006359f, -0.025071f, +0.001881f, - -0.004238f, +0.006575f, +0.006298f, -0.009063f, +0.012363f, -0.009738f, +0.007209f, -0.000714f, +0.001104f, -0.009453f, - +0.002052f, -0.005804f, -0.006319f, +0.003316f, -0.005248f, -0.001739f, +0.003579f, -0.002282f, +0.000092f, +0.003124f, - +0.002193f, +0.000148f, -0.002870f, -0.001929f, +0.003414f, -0.003445f, +0.003170f, +0.002692f, +0.001138f, -0.001435f, - -0.001711f, +0.000258f, +0.001018f, -0.004645f, +0.004550f, +0.001981f, -0.001551f, +0.000093f, -0.002360f, -0.000354f, - +0.001421f, -0.001455f, -0.001581f, +0.001277f, +0.000926f, +0.000599f, -0.000568f, +0.000382f, -0.000556f, -0.001281f, - -0.000217f, -0.000048f, -0.000423f, -0.000109f, +0.000057f, +0.000133f, -0.000100f, +0.000437f, +0.000038f, -0.000267f, - +0.000055f, +0.000322f, -0.000004f, -0.000601f, +0.000113f, -0.000381f, -0.000510f, -0.000376f, +0.000640f, -0.000031f, - +0.000031f, +0.000096f, -0.000045f, +0.000067f, -0.000507f, -0.000578f - }, - { - +0.002893f, +0.046494f, -0.012065f, +0.000429f, -0.000490f, -0.000167f, -0.000861f, +0.001206f, +0.000665f, -0.000794f, - +0.004238f, -0.000948f, +0.004492f, -0.003481f, +0.003097f, -0.003240f, -0.002757f, +0.014688f, -0.009692f, +0.005764f, - +0.009341f, +0.001876f, -0.001451f, +0.000567f, +0.011552f, +0.008548f, +0.003891f, +0.008627f, -0.000168f, +0.000808f, - -0.004156f, -0.005669f, +0.004819f, +0.000644f, +0.005747f, +0.005112f, +0.004589f, +0.001561f, -0.002012f, -0.001324f, - -0.000210f, +0.001983f, -0.002237f, +0.002415f, -0.000291f, +0.000287f, +0.000426f, +0.000788f, -0.002327f, -0.001433f, - +0.001115f, -0.001868f, -0.000715f, -0.000269f, -0.003140f, +0.001631f, -0.001267f, -0.001257f, -0.000117f, +0.000455f, - -0.000140f, +0.000551f, -0.001420f, +0.000480f, +0.000066f, -0.000301f, +0.001411f, +0.000023f, +0.000599f, -0.000651f, - +0.000539f, +0.000545f, -0.000206f, +0.000221f, +0.000100f, -0.000393f, +0.000420f, -0.000847f, -0.000368f, -0.000348f, - -0.000371f, +0.000762f, +0.000177f, -0.000095f, -0.000336f, +0.000237f, +0.000458f, -0.000498f, -0.000384f, -0.000116f, - +0.000130f, +0.000022f, -0.000440f, -0.000225f, -0.000133f, +0.000025f - }, - { - +0.018170f, -0.336924f, +0.012598f, -0.024417f, +0.003036f, +0.000758f, -0.001395f, -0.003599f, +0.000451f, +0.009895f, - -0.015551f, +0.004652f, -0.003388f, +0.001627f, +0.011097f, +0.000161f, +0.004006f, -0.026483f, +0.011389f, +0.000970f, - +0.000804f, -0.005338f, +0.010956f, -0.001193f, +0.007789f, -0.000815f, -0.003137f, +0.010259f, -0.004778f, +0.005377f, - -0.004280f, +0.002671f, -0.005074f, +0.004917f, +0.000965f, -0.003239f, +0.008560f, -0.003549f, -0.003283f, -0.000268f, - +0.002520f, -0.002115f, -0.001544f, -0.000937f, +0.000046f, +0.004737f, -0.001539f, -0.001208f, -0.000367f, +0.000559f, - -0.001212f, +0.002076f, +0.001163f, +0.002738f, -0.000377f, +0.000614f, +0.001453f, +0.000580f, +0.002400f, +0.001608f, - -0.000499f, +0.000970f, -0.000495f, -0.001077f, -0.000167f, +0.000166f, -0.001921f, -0.000795f, -0.000956f, -0.000185f, - -0.001632f, +0.001166f, +0.001251f, +0.000326f, -0.000756f, +0.000980f, +0.001455f, +0.000061f, +0.000590f, -0.000064f, - +0.000430f, +0.000552f, -0.000648f, -0.000138f, +0.000220f, +0.000153f, +0.001070f, -0.000324f, -0.000628f, +0.000404f, - -0.000506f, -0.000210f, -0.000230f, +0.000366f, +0.000278f, +0.000227f - }, - { - +0.000621f, -0.000172f, -0.004786f, +0.002951f, +0.000395f, +0.000196f, +0.000830f, -0.001361f, -0.004258f, +0.001710f, - +0.004622f, +0.002844f, -0.002580f, +0.003486f, +0.012435f, +0.004563f, -0.005977f, +0.013441f, -0.000276f, -0.010524f, - +0.003676f, -0.000690f, -0.009554f, +0.018404f, +0.001997f, +0.003168f, +0.002133f, -0.000305f, -0.008321f, +0.003104f, - -0.001299f, -0.003573f, -0.006273f, -0.007405f, +0.003015f, -0.001174f, +0.005278f, -0.002519f, +0.000065f, -0.000647f, - +0.004090f, +0.000446f, +0.000121f, -0.002017f, -0.000600f, +0.000760f, -0.001490f, +0.004099f, -0.000037f, +0.001178f, - -0.000303f, -0.001016f, -0.001312f, +0.000426f, +0.000952f, -0.002222f, -0.002784f, -0.000428f, -0.000335f, -0.000671f, - -0.001903f, +0.001414f, -0.000267f, -0.001008f, -0.000304f, +0.000539f, +0.000065f, +0.001859f, -0.001212f, +0.000414f, - +0.000349f, -0.001052f, +0.000397f, +0.001453f, +0.000024f, -0.000740f, +0.000984f, -0.000941f, -0.000160f, -0.001357f, - +0.000619f, +0.000472f, -0.000444f, +0.000377f, -0.000015f, -0.000033f, +0.000593f, +0.000019f, -0.000234f, +0.000343f, - -0.000410f, +0.000109f, -0.000204f, +0.000026f, -0.000517f, -0.000016f - }, - { - -0.066580f, -0.300457f, +0.001690f, +0.007060f, -0.001986f, +0.005321f, +0.001947f, +0.002285f, +0.011548f, +0.007030f, - +0.003256f, -0.013605f, -0.003264f, -0.009484f, -0.005878f, -0.004745f, +0.004313f, -0.004818f, +0.005086f, +0.001375f, - +0.008880f, +0.001053f, +0.000904f, -0.000193f, -0.005950f, +0.000272f, +0.003870f, +0.006451f, +0.009004f, +0.005433f, - +0.006254f, -0.001369f, +0.000407f, +0.000583f, -0.003200f, -0.000528f, +0.002516f, -0.000087f, +0.004782f, -0.004824f, - -0.003444f, -0.002860f, +0.003453f, +0.003545f, -0.007093f, +0.001046f, -0.003948f, -0.000721f, +0.001409f, +0.001086f, - +0.003062f, +0.000359f, +0.002065f, -0.002858f, -0.000702f, +0.000245f, +0.001505f, +0.000336f, +0.000194f, +0.000587f, - +0.001462f, +0.000946f, -0.000296f, +0.000180f, +0.000881f, -0.000495f, -0.000852f, +0.000282f, -0.001333f, +0.000119f, - -0.000106f, +0.000227f, -0.000656f, -0.000201f, +0.000362f, -0.000228f, -0.000590f, -0.000171f, +0.000491f, -0.000299f, - -0.000644f, +0.000153f, +0.000310f, -0.000732f, +0.000910f, +0.000298f, -0.000086f, +0.000217f, -0.000684f, -0.000167f, - +0.000252f, -0.000068f, -0.000254f, -0.000002f, -0.000080f, -0.000008f - }, - { - +0.002161f, +0.014557f, +0.010708f, +0.000681f, -0.000324f, +0.000018f, -0.001518f, -0.000132f, +0.004294f, -0.001328f, - +0.000499f, +0.000284f, +0.004710f, -0.004760f, +0.030721f, -0.005807f, -0.000630f, +0.003491f, +0.008171f, -0.018776f, - +0.002669f, -0.008728f, -0.001575f, +0.001959f, +0.020795f, +0.000726f, -0.012878f, +0.006831f, -0.010415f, +0.003386f, - -0.003334f, +0.002689f, -0.011133f, +0.002693f, -0.003083f, -0.005940f, -0.004343f, -0.004955f, -0.005360f, +0.003465f, - +0.001980f, -0.002079f, +0.002618f, -0.001998f, -0.004853f, -0.003542f, +0.001737f, +0.000119f, -0.001459f, -0.002234f, - +0.000872f, -0.001449f, +0.000431f, -0.000080f, -0.001703f, -0.001159f, +0.000896f, -0.001549f, +0.001067f, -0.001843f, - +0.000478f, -0.000599f, -0.001619f, +0.000215f, +0.000614f, +0.000917f, -0.001438f, +0.001090f, +0.001220f, +0.000235f, - -0.001063f, -0.000651f, +0.001516f, +0.000216f, -0.000554f, -0.000210f, -0.000320f, +0.000194f, -0.000492f, +0.000072f, - -0.000313f, +0.000059f, -0.000326f, +0.000240f, +0.000336f, -0.000239f, +0.000035f, -0.000446f, -0.000171f, -0.000264f, - +0.000037f, +0.000232f, +0.000794f, +0.000145f, +0.000155f, -0.000326f - }, - { - +0.083885f, -0.219985f, -0.035348f, -0.001634f, +0.004458f, -0.002859f, +0.003017f, +0.001221f, +0.005935f, +0.000917f, - +0.005036f, -0.000411f, +0.009879f, -0.014479f, -0.012412f, -0.000308f, -0.007511f, +0.011228f, +0.004497f, -0.007401f, - -0.001663f, -0.001031f, +0.004060f, -0.004895f, +0.003709f, +0.006245f, -0.006576f, +0.004075f, -0.005246f, +0.001612f, - +0.007862f, -0.004903f, +0.002560f, +0.000933f, -0.001258f, +0.000034f, +0.002199f, +0.003708f, +0.002955f, -0.003414f, - -0.000088f, +0.004567f, -0.005100f, -0.006603f, -0.000498f, -0.001244f, +0.001543f, +0.001395f, -0.002395f, +0.000156f, - +0.000186f, -0.000315f, -0.000317f, -0.003666f, -0.003534f, +0.000060f, +0.000426f, -0.000074f, -0.000975f, +0.000573f, - -0.000358f, +0.000864f, -0.000675f, -0.001903f, -0.001299f, -0.000541f, -0.000592f, +0.001016f, +0.001100f, +0.000860f, - +0.000529f, +0.001053f, -0.000611f, +0.000233f, -0.000674f, -0.001028f, -0.000589f, +0.000436f, -0.000513f, +0.000987f, - +0.000131f, -0.000522f, -0.000357f, +0.000016f, -0.000095f, +0.000749f, -0.000426f, +0.000077f, -0.000222f, -0.000200f, - +0.000403f, +0.000333f, +0.000784f, +0.000387f, -0.000054f, +0.000244f - }, - { - +0.002911f, +0.033235f, -0.004451f, -0.002579f, +0.001804f, -0.000751f, +0.005824f, -0.004148f, -0.005834f, -0.002904f, - -0.008011f, -0.001280f, -0.010182f, +0.007886f, -0.022773f, -0.008731f, +0.013142f, -0.006012f, +0.019284f, -0.004688f, - -0.001802f, -0.000500f, +0.000504f, +0.015916f, -0.009692f, +0.000350f, +0.006125f, -0.006257f, -0.000425f, -0.004377f, - +0.004560f, +0.005131f, +0.003604f, -0.004267f, +0.001331f, -0.003227f, +0.000701f, -0.007225f, -0.008647f, +0.001201f, - -0.004308f, -0.003122f, -0.001676f, +0.001183f, +0.001801f, -0.004401f, +0.004024f, +0.001649f, +0.001249f, -0.001262f, - +0.001270f, -0.002723f, -0.000338f, -0.000109f, -0.000533f, -0.000522f, +0.000206f, +0.001181f, +0.000634f, -0.002933f, - -0.000460f, -0.001452f, +0.001048f, +0.000084f, +0.000462f, +0.000775f, +0.000907f, -0.000410f, +0.001334f, -0.001842f, - -0.000057f, -0.000083f, +0.001046f, +0.000632f, +0.000816f, +0.000460f, +0.000339f, +0.000149f, +0.000183f, +0.000153f, - -0.000717f, +0.000596f, -0.000463f, +0.000750f, -0.000730f, +0.000369f, -0.000664f, +0.000255f, +0.000095f, -0.000302f, - +0.000367f, -0.000096f, -0.000204f, -0.000233f, -0.000308f, -0.000183f - }, - { - +0.011319f, -0.272942f, +0.000407f, -0.014047f, -0.000156f, +0.019496f, +0.002251f, -0.012001f, +0.005360f, -0.010485f, - +0.000250f, -0.001875f, -0.004595f, +0.002618f, -0.008107f, +0.009262f, -0.010517f, +0.015485f, +0.006606f, -0.001461f, - +0.001621f, -0.003512f, +0.002448f, -0.006837f, -0.000423f, +0.007476f, +0.004851f, +0.000188f, -0.002516f, -0.000899f, - -0.001819f, -0.000348f, -0.000641f, +0.003999f, -0.002043f, -0.002069f, -0.001854f, +0.007616f, +0.000467f, -0.000490f, - +0.002021f, +0.001613f, +0.000713f, -0.001819f, +0.003211f, +0.000233f, -0.000033f, -0.001381f, -0.002429f, -0.001913f, - -0.002183f, -0.001448f, -0.001996f, +0.002146f, -0.001720f, -0.001733f, +0.001037f, -0.002481f, -0.002119f, +0.000167f, - +0.000541f, +0.000028f, -0.000931f, +0.000186f, -0.000374f, -0.000065f, -0.000541f, +0.000328f, -0.001026f, -0.000386f, - +0.000617f, +0.000601f, -0.001031f, -0.000346f, -0.000102f, +0.000071f, -0.000024f, +0.001105f, +0.000211f, -0.000131f, - +0.000248f, -0.000070f, +0.000012f, +0.000560f, -0.000238f, +0.000144f, -0.000232f, +0.000198f, +0.000351f, +0.000329f, - -0.000087f, -0.000164f, +0.000041f, +0.000050f, +0.000071f, -0.000141f - }, - { - +0.001622f, +0.043357f, -0.002970f, -0.004250f, -0.003476f, +0.000966f, +0.002883f, -0.000199f, +0.005107f, -0.000276f, - -0.003185f, -0.007842f, +0.019077f, -0.011394f, +0.016174f, -0.005691f, +0.003760f, -0.012605f, +0.001842f, -0.010287f, - +0.007327f, -0.015573f, +0.001249f, +0.001508f, +0.002413f, +0.000128f, +0.000257f, +0.000922f, +0.005009f, -0.013919f, - +0.006038f, +0.002351f, -0.005904f, +0.001632f, -0.002498f, -0.004672f, -0.000625f, -0.001111f, +0.001567f, -0.003329f, - +0.003200f, +0.003053f, +0.001819f, +0.001281f, +0.001382f, -0.001131f, -0.000958f, -0.001056f, -0.001545f, +0.000863f, - -0.000007f, -0.000681f, -0.003438f, -0.000735f, +0.003239f, +0.001065f, +0.002002f, -0.000513f, +0.000369f, -0.000625f, - +0.002340f, +0.000597f, +0.000427f, +0.000261f, +0.000186f, -0.001558f, -0.000018f, +0.000676f, +0.000104f, +0.000325f, - +0.000737f, +0.000122f, -0.000973f, +0.000099f, +0.000387f, +0.000555f, +0.000591f, -0.000004f, +0.000402f, +0.000207f, - +0.000262f, -0.000133f, +0.000137f, +0.000045f, -0.000483f, -0.000643f, +0.000407f, -0.000414f, -0.000924f, -0.000237f, - +0.000320f, -0.000228f, -0.000342f, +0.000169f, -0.000180f, +0.000118f - }, - { - +0.023947f, +0.192144f, -0.027057f, -0.010272f, +0.000053f, -0.017815f, -0.029821f, +0.008266f, +0.006571f, -0.003494f, - +0.006914f, -0.007100f, +0.001855f, +0.039285f, -0.015245f, +0.010676f, +0.014902f, +0.008054f, +0.001943f, -0.007484f, - -0.006289f, -0.000759f, -0.001526f, -0.014278f, -0.003958f, -0.003645f, +0.002288f, +0.006218f, -0.004378f, -0.008817f, - -0.005156f, +0.004714f, +0.003551f, +0.004784f, +0.001980f, -0.005350f, -0.003878f, +0.001803f, -0.002163f, -0.006991f, - +0.004486f, +0.001909f, +0.003033f, -0.001929f, -0.002959f, +0.003221f, -0.004127f, +0.001630f, +0.002954f, +0.003886f, - -0.003315f, -0.000830f, -0.000193f, +0.001842f, -0.000536f, +0.002826f, -0.001296f, +0.000512f, +0.000854f, -0.001595f, - +0.001394f, -0.000069f, -0.001731f, -0.000454f, -0.000210f, +0.001460f, -0.000283f, -0.001268f, -0.001103f, -0.000626f, - +0.000669f, +0.001943f, -0.000391f, +0.000488f, +0.000017f, -0.000657f, +0.000269f, -0.001183f, +0.000590f, +0.000009f, - +0.000210f, -0.000371f, -0.000703f, +0.000201f, -0.000450f, +0.000393f, +0.000153f, +0.000463f, -0.000285f, -0.000212f, - +0.000168f, +0.000004f, +0.000443f, -0.000142f, -0.000371f, -0.000187f - }, - { - +0.001595f, -0.001882f, +0.007246f, +0.006047f, -0.008012f, -0.001609f, -0.005746f, -0.003286f, +0.001676f, -0.001107f, - -0.008498f, -0.006443f, -0.010292f, -0.055410f, +0.088452f, -0.025624f, -0.002024f, +0.009976f, -0.011637f, +0.012484f, - -0.004004f, +0.002532f, -0.000532f, +0.005076f, -0.015939f, +0.003973f, -0.001012f, -0.000325f, -0.005450f, +0.001408f, - +0.003342f, -0.006757f, +0.000243f, -0.000318f, -0.001210f, +0.003830f, +0.009966f, +0.002206f, -0.005277f, -0.001356f, - -0.001481f, -0.002022f, -0.001080f, +0.002368f, -0.000215f, +0.003855f, +0.000977f, -0.002382f, +0.001775f, +0.002412f, - +0.002277f, -0.001846f, -0.001115f, +0.001238f, +0.002610f, +0.002615f, +0.001004f, +0.000874f, -0.001649f, +0.001343f, - -0.000392f, -0.000172f, +0.002153f, -0.001337f, -0.000030f, +0.000101f, +0.000707f, -0.000622f, -0.000307f, +0.000643f, - +0.000252f, -0.001000f, +0.000409f, -0.001127f, +0.000077f, -0.000060f, -0.000519f, +0.000881f, +0.000461f, -0.000050f, - +0.000267f, +0.000011f, -0.000237f, +0.000084f, -0.000426f, +0.000483f, +0.000106f, +0.000101f, -0.000254f, -0.000134f, - +0.000031f, +0.000026f, +0.000319f, +0.000143f, +0.000006f, -0.000050f - }, - { - -0.003144f, +0.139956f, -0.004022f, +0.007111f, -0.008603f, -0.007066f, +0.005477f, +0.000748f, -0.000848f, -0.006959f, - +0.004853f, -0.009670f, +0.007022f, -0.037868f, -0.046899f, -0.006608f, +0.006364f, +0.004429f, -0.001989f, -0.003700f, - -0.002147f, +0.003261f, -0.004237f, +0.006028f, -0.001642f, -0.002506f, -0.005548f, -0.005922f, -0.000141f, -0.000112f, - -0.002297f, -0.003988f, -0.008825f, -0.002272f, +0.003240f, +0.006387f, +0.003411f, +0.002094f, -0.000508f, -0.005684f, - +0.002584f, -0.000425f, -0.004711f, +0.000025f, +0.002774f, +0.008215f, -0.003264f, -0.004066f, -0.001923f, -0.000642f, - -0.002781f, +0.001283f, -0.002473f, -0.001029f, -0.000763f, +0.001419f, +0.000377f, -0.000988f, -0.001882f, +0.001711f, - -0.000679f, -0.000428f, +0.001905f, +0.001641f, +0.001626f, +0.001108f, -0.000534f, -0.000205f, -0.000240f, -0.000475f, - +0.000366f, +0.000512f, -0.000521f, -0.000093f, -0.000893f, -0.000692f, +0.000062f, -0.000080f, +0.000827f, -0.000171f, - -0.000155f, -0.001002f, -0.000211f, -0.000416f, -0.000050f, -0.000301f, +0.000437f, -0.000214f, -0.000191f, -0.000079f, - -0.000297f, -0.000423f, +0.000280f, +0.000136f, +0.000444f, -0.000138f - } - }, - { - { - +0.000123f, +0.142952f, +0.026987f, -0.008724f, -0.005549f, +0.002947f, -0.004739f, -0.003582f, -0.007232f, -0.000290f, - +0.000197f, -0.012098f, +0.008867f, +0.002246f, -0.012814f, -0.006526f, -0.002110f, +0.009250f, +0.000040f, -0.017142f, - +0.009997f, -0.001492f, +0.012120f, +0.002629f, +0.002239f, +0.015006f, +0.005111f, +0.004275f, +0.001975f, +0.015864f, - -0.004432f, +0.012370f, -0.002482f, -0.004447f, -0.013023f, -0.005417f, -0.001181f, -0.002326f, +0.004059f, +0.001141f, - +0.000418f, -0.001515f, +0.003651f, +0.001326f, +0.000079f, -0.002058f, +0.000841f, -0.000350f, +0.002207f, -0.005442f, - -0.000650f, +0.000670f, -0.001718f, -0.001684f, -0.001413f, +0.001343f, -0.001959f, -0.001053f, -0.001690f, -0.000030f, - -0.000145f, +0.000569f, +0.000014f, +0.000148f, -0.000458f, +0.001002f, -0.000477f, +0.002702f, -0.000382f, +0.001005f, - +0.000445f, +0.000362f, -0.000621f, +0.000868f, +0.000689f, -0.000140f, +0.001035f, -0.000154f, -0.000574f, -0.000080f, - +0.000522f, +0.000081f, -0.000107f, +0.000263f, +0.000051f, +0.000269f, -0.000213f, -0.000427f, +0.000024f, +0.000753f, - -0.000285f, +0.000438f, -0.000423f, -0.000263f, -0.000094f, +0.000183f - }, - { - -0.016247f, +0.419941f, +0.050334f, -0.015271f, +0.000093f, -0.000938f, -0.004700f, +0.001626f, -0.011155f, +0.002542f, - -0.003192f, -0.008462f, -0.008931f, +0.012403f, -0.005799f, -0.016270f, -0.000700f, -0.003231f, +0.023931f, +0.008740f, - -0.004152f, -0.001551f, -0.009669f, -0.000052f, -0.004729f, +0.004728f, -0.002916f, -0.001404f, +0.001829f, -0.003800f, - +0.003263f, +0.002001f, +0.004536f, -0.003908f, +0.005147f, -0.001101f, +0.009157f, -0.002361f, +0.002592f, +0.002794f, - -0.005125f, -0.004370f, +0.006552f, +0.005554f, -0.002488f, +0.001990f, -0.000366f, +0.005938f, +0.003005f, -0.003137f, - -0.001681f, +0.002070f, -0.002796f, +0.000365f, -0.000555f, +0.002488f, -0.002276f, -0.004422f, +0.000069f, -0.000734f, - +0.002109f, +0.000126f, +0.001852f, -0.001700f, -0.001330f, -0.000670f, +0.000073f, +0.000954f, -0.002038f, +0.001776f, - +0.000646f, -0.001051f, +0.000150f, -0.000152f, +0.000567f, +0.000371f, -0.000598f, +0.000982f, -0.000574f, +0.000530f, - -0.000732f, -0.000311f, -0.000082f, +0.000323f, -0.000494f, +0.000466f, -0.000509f, -0.000009f, +0.000372f, -0.000074f, - +0.000635f, +0.000269f, -0.000332f, -0.000640f, -0.000178f, +0.000221f - }, - { - +0.001022f, -0.319421f, -0.033222f, +0.018208f, +0.005700f, +0.008929f, -0.000630f, +0.001225f, -0.002704f, -0.001917f, - -0.008722f, -0.005792f, +0.000613f, +0.003334f, +0.001974f, -0.003870f, -0.002259f, +0.006924f, -0.015819f, +0.002629f, - -0.017983f, -0.005750f, +0.008875f, -0.005852f, +0.006332f, -0.010650f, +0.002497f, -0.010074f, +0.001805f, +0.000221f, - +0.006379f, -0.012180f, -0.008531f, +0.001622f, -0.008308f, -0.000387f, +0.003327f, -0.005454f, -0.003710f, -0.001746f, - -0.002822f, -0.004991f, -0.000286f, +0.001468f, +0.003754f, +0.000229f, -0.000342f, -0.001663f, +0.001454f, +0.002255f, - +0.001641f, +0.000432f, +0.000793f, -0.004818f, +0.003460f, +0.000698f, -0.001097f, +0.002835f, -0.000356f, -0.000803f, - +0.001107f, +0.000459f, -0.000994f, +0.000743f, +0.000515f, +0.000314f, -0.000739f, +0.000816f, -0.000218f, -0.000077f, - +0.001334f, +0.001295f, +0.000136f, -0.000616f, +0.000439f, +0.000760f, +0.000238f, +0.000198f, +0.000084f, -0.000357f, - -0.000276f, -0.000262f, -0.000029f, +0.000205f, +0.000426f, +0.000008f, +0.000200f, -0.000340f, +0.000313f, -0.000354f, - -0.000638f, +0.000095f, -0.000135f, -0.000217f, -0.000251f, -0.000297f - }, - { - -0.002306f, +0.060494f, +0.000488f, -0.000709f, +0.001396f, +0.000242f, -0.000473f, -0.001273f, -0.000801f, -0.001493f, - +0.004118f, +0.002480f, -0.000543f, -0.003596f, +0.010904f, -0.007774f, -0.011542f, -0.005520f, -0.015523f, +0.002551f, - +0.000623f, -0.005934f, -0.002943f, -0.002254f, +0.004602f, +0.003911f, -0.003264f, +0.004901f, -0.005196f, -0.000634f, - -0.007123f, -0.008488f, -0.000444f, -0.005485f, +0.002485f, +0.000473f, +0.001506f, -0.001863f, -0.002816f, +0.003323f, - +0.000628f, +0.000500f, -0.005392f, +0.000381f, -0.000779f, +0.000413f, +0.000647f, +0.000944f, -0.002780f, +0.000780f, - +0.002962f, -0.002549f, -0.000068f, +0.000942f, -0.000991f, +0.002294f, -0.001634f, -0.001285f, -0.001235f, -0.000449f, - -0.001376f, -0.000853f, +0.000031f, +0.000569f, -0.000721f, -0.000919f, -0.000030f, -0.000248f, +0.000667f, -0.000456f, - +0.001008f, +0.000206f, -0.000956f, +0.000103f, +0.000413f, -0.000177f, +0.000702f, -0.000409f, -0.000167f, -0.000165f, - -0.000204f, +0.000715f, +0.000141f, -0.000119f, +0.000302f, +0.000205f, +0.000313f, +0.000030f, +0.000044f, +0.000232f, - +0.000211f, -0.000068f, -0.000105f, +0.000003f, -0.000353f, -0.000030f - }, - { - +0.009364f, -0.361754f, +0.011426f, -0.019713f, -0.001227f, -0.001155f, -0.000824f, -0.001387f, +0.000305f, +0.009368f, - -0.015138f, +0.009953f, +0.001059f, +0.002343f, +0.008462f, -0.003551f, +0.004815f, -0.036192f, +0.007442f, -0.002992f, - -0.000330f, -0.007804f, +0.000929f, -0.003057f, +0.005476f, +0.002245f, -0.003613f, -0.002501f, -0.011855f, +0.007432f, - -0.008717f, +0.002431f, -0.004484f, +0.004123f, +0.002673f, -0.005496f, +0.015365f, +0.002690f, -0.003311f, -0.000383f, - +0.000799f, -0.004879f, -0.000991f, +0.002638f, -0.000169f, +0.000787f, -0.002613f, +0.001375f, +0.000269f, -0.001404f, - -0.003742f, +0.000636f, +0.000548f, +0.001336f, +0.000438f, +0.000378f, +0.000637f, -0.001900f, -0.000170f, +0.001460f, - -0.001106f, +0.000516f, +0.000648f, -0.000677f, -0.000936f, +0.001365f, -0.000788f, +0.000540f, +0.000463f, +0.000708f, - -0.000566f, +0.000367f, +0.000127f, +0.000017f, -0.000373f, -0.000063f, +0.000318f, +0.000623f, +0.000793f, -0.000132f, - +0.000387f, +0.000184f, -0.000554f, -0.000153f, -0.000185f, -0.000174f, +0.000363f, -0.000538f, -0.000240f, +0.000186f, - -0.000783f, +0.000111f, -0.000037f, +0.000297f, +0.000186f, +0.000203f - }, - { - -0.000699f, +0.001617f, -0.002950f, +0.002968f, +0.000081f, -0.000148f, +0.000106f, -0.003292f, -0.006146f, -0.000966f, - -0.000261f, +0.000020f, -0.011763f, -0.007155f, +0.002060f, -0.000005f, -0.003977f, +0.008145f, -0.012466f, -0.004054f, - +0.024767f, +0.001725f, -0.006057f, +0.024870f, +0.003701f, -0.000548f, +0.003065f, +0.006467f, -0.012194f, +0.002092f, - +0.008365f, +0.001644f, -0.002620f, -0.003790f, +0.006790f, -0.001724f, +0.003177f, -0.004405f, +0.001899f, +0.003329f, - +0.004378f, -0.000831f, -0.000698f, -0.004394f, -0.004116f, -0.000945f, -0.003104f, +0.003222f, -0.000034f, -0.001209f, - -0.001599f, +0.000811f, -0.001350f, -0.001337f, +0.001719f, -0.001001f, -0.000287f, +0.000968f, +0.002010f, +0.001325f, - -0.002343f, +0.000043f, -0.001825f, -0.000957f, +0.000193f, +0.000531f, -0.001375f, +0.001065f, -0.000219f, -0.000205f, - +0.000055f, -0.000227f, +0.000464f, +0.001181f, -0.000172f, -0.000678f, +0.000479f, -0.001137f, +0.000217f, -0.001017f, - -0.000085f, +0.000353f, -0.000255f, +0.000476f, -0.000108f, -0.000581f, +0.000008f, -0.000094f, -0.000656f, +0.000035f, - -0.000251f, -0.000005f, -0.000522f, -0.000096f, -0.000648f, +0.000033f - }, - { - +0.098114f, -0.114412f, -0.027310f, +0.014385f, -0.005241f, +0.000071f, -0.000452f, -0.000001f, +0.001655f, -0.000990f, - +0.003801f, -0.004639f, +0.006556f, -0.000967f, -0.004397f, -0.001533f, +0.001164f, -0.005134f, +0.006894f, +0.000585f, - +0.007743f, -0.001225f, +0.001743f, +0.003040f, +0.002835f, +0.002243f, -0.001199f, +0.000172f, -0.003608f, -0.003458f, - +0.004418f, +0.002230f, +0.002188f, -0.002938f, -0.003439f, -0.000474f, +0.002890f, -0.003913f, +0.001708f, -0.001382f, - -0.000706f, -0.002862f, +0.001629f, +0.005216f, -0.002334f, +0.001967f, -0.000209f, -0.001805f, -0.002241f, -0.000907f, - -0.001432f, -0.003982f, -0.001290f, -0.003400f, +0.000556f, -0.001443f, -0.000651f, -0.000545f, -0.000535f, +0.001059f, - +0.002120f, -0.000288f, -0.000920f, +0.000066f, +0.000164f, -0.001252f, -0.000539f, +0.001533f, -0.000663f, +0.000343f, - -0.000245f, -0.000505f, -0.000829f, +0.000083f, +0.000547f, +0.000476f, +0.000199f, +0.000498f, +0.000374f, -0.000519f, - -0.000680f, -0.000586f, +0.000045f, -0.000646f, +0.000370f, -0.000422f, -0.000116f, +0.000540f, -0.000853f, -0.000536f, - -0.000011f, +0.000169f, -0.000294f, -0.000086f, -0.000146f, -0.000185f - }, - { - -0.000928f, -0.019440f, -0.010863f, -0.002719f, -0.000540f, -0.000191f, -0.000899f, +0.000009f, +0.002275f, -0.000693f, - +0.004231f, +0.006087f, +0.009571f, +0.002759f, +0.034449f, +0.009372f, +0.022566f, -0.004130f, +0.004692f, -0.016477f, - -0.006358f, -0.019801f, -0.011608f, -0.024437f, +0.009797f, +0.004474f, -0.007287f, +0.010368f, -0.011167f, +0.001381f, - -0.005181f, +0.005189f, -0.008330f, +0.002363f, -0.001139f, -0.000491f, +0.001306f, -0.002100f, -0.005958f, +0.001371f, - -0.000367f, +0.000148f, +0.003572f, -0.001904f, -0.001950f, +0.000024f, +0.002486f, +0.002747f, +0.001145f, -0.002506f, - +0.000032f, -0.003468f, -0.000697f, +0.001506f, -0.000519f, -0.000335f, +0.001228f, -0.001863f, +0.000709f, -0.001933f, - +0.003525f, +0.002065f, -0.000113f, +0.000366f, +0.000670f, +0.000041f, -0.002070f, +0.001648f, +0.000622f, -0.000029f, - +0.000370f, -0.000703f, +0.000064f, -0.000366f, -0.000468f, +0.000146f, +0.000228f, +0.000124f, +0.000382f, +0.000913f, - +0.000121f, +0.000748f, -0.000585f, -0.000500f, +0.000594f, -0.000338f, -0.000213f, +0.000648f, +0.000303f, -0.000377f, - +0.000233f, +0.000006f, +0.000539f, +0.000014f, +0.000192f, -0.000093f - }, - { - -0.067216f, -0.353023f, +0.032833f, +0.008466f, +0.006282f, -0.004780f, +0.001871f, +0.000938f, +0.000210f, -0.002899f, - +0.002878f, -0.001344f, +0.011291f, -0.007321f, -0.004555f, +0.001106f, +0.000065f, +0.015910f, -0.001014f, -0.011321f, - +0.000241f, +0.001951f, +0.003215f, -0.009752f, -0.001107f, +0.005516f, -0.006572f, +0.003581f, -0.005606f, +0.001828f, - +0.005766f, -0.007631f, +0.000489f, -0.002626f, -0.004059f, +0.001637f, +0.001296f, -0.002102f, +0.003484f, +0.000628f, - -0.007044f, +0.003507f, +0.000427f, -0.003287f, +0.003240f, -0.000653f, -0.001052f, +0.002847f, -0.002321f, -0.003301f, - -0.001072f, -0.000086f, +0.000981f, +0.001444f, -0.001379f, +0.000248f, +0.000088f, +0.000141f, +0.001273f, +0.001909f, - +0.000703f, +0.001776f, +0.000357f, -0.000000f, +0.000979f, +0.001206f, -0.000603f, +0.000342f, -0.000158f, -0.001018f, - -0.000030f, +0.001169f, -0.000499f, +0.000628f, -0.000012f, -0.000280f, -0.000825f, -0.000073f, -0.001147f, +0.000688f, - +0.000228f, -0.000247f, -0.000331f, +0.000128f, -0.000108f, +0.000691f, -0.000304f, +0.000415f, +0.000112f, -0.000095f, - +0.000516f, -0.000035f, +0.000055f, -0.000091f, -0.000173f, +0.000114f - }, - { - -0.002552f, +0.062496f, +0.015504f, -0.004599f, +0.001462f, +0.000603f, +0.008615f, +0.001405f, -0.001425f, +0.002508f, - -0.004484f, +0.002709f, -0.012803f, +0.002778f, -0.027767f, -0.007299f, +0.017157f, -0.017077f, +0.006777f, -0.009455f, - +0.002569f, -0.000259f, -0.009217f, +0.013887f, -0.001997f, -0.001082f, -0.002789f, +0.000578f, +0.005177f, +0.005553f, - +0.007570f, -0.005271f, -0.000364f, -0.003854f, +0.001178f, -0.002562f, +0.005822f, +0.000541f, -0.001618f, +0.003864f, - +0.000982f, +0.001115f, -0.002085f, -0.001450f, +0.002230f, -0.001203f, +0.001736f, +0.001448f, +0.001538f, -0.001979f, - +0.002808f, -0.003296f, +0.000586f, +0.002055f, +0.000507f, -0.001464f, +0.001548f, +0.000961f, +0.000222f, -0.000775f, - +0.001947f, -0.001289f, +0.000498f, -0.000938f, +0.000151f, +0.000089f, +0.000276f, -0.001273f, +0.000619f, -0.000790f, - +0.000743f, -0.000409f, +0.000134f, +0.000217f, +0.000061f, -0.000176f, +0.000024f, +0.000275f, +0.000210f, +0.000340f, - -0.000136f, +0.000741f, -0.000477f, +0.000363f, -0.000738f, +0.000563f, -0.000773f, +0.000072f, +0.000213f, -0.000193f, - +0.000430f, -0.000171f, +0.000013f, +0.000149f, -0.000184f, -0.000075f - }, - { - -0.011564f, -0.282379f, +0.015674f, -0.017090f, -0.005489f, -0.001808f, -0.024378f, -0.013157f, +0.008955f, -0.005776f, - +0.002190f, -0.003575f, -0.002300f, +0.008156f, -0.007567f, +0.003678f, -0.002392f, +0.023745f, +0.007071f, +0.000099f, - +0.009653f, -0.002714f, +0.001493f, -0.003621f, -0.002485f, -0.003160f, -0.000335f, -0.001164f, +0.000773f, +0.005926f, - +0.000766f, -0.002041f, -0.005685f, +0.001108f, -0.000360f, +0.002243f, -0.000184f, +0.007784f, +0.005853f, +0.004604f, - +0.005029f, +0.003221f, +0.000426f, +0.000301f, +0.001396f, -0.002268f, +0.001198f, +0.000478f, -0.001118f, +0.000181f, - +0.001140f, +0.000391f, -0.000278f, +0.002611f, +0.000523f, -0.000207f, +0.001755f, -0.001366f, -0.000222f, +0.000174f, - -0.000900f, -0.000498f, -0.000794f, +0.000205f, -0.000254f, -0.000090f, -0.000545f, +0.000457f, -0.001796f, -0.000307f, - +0.000309f, -0.000210f, -0.000896f, -0.000232f, +0.000034f, +0.000305f, -0.000100f, +0.000347f, +0.000006f, +0.000190f, - +0.000001f, -0.000063f, -0.000511f, -0.000429f, +0.000223f, +0.000530f, -0.000038f, +0.000383f, +0.000125f, -0.000003f, - -0.000238f, +0.000086f, +0.000692f, +0.000148f, -0.000023f, -0.000081f - }, - { - -0.000435f, +0.037225f, -0.007835f, -0.008322f, -0.004280f, +0.003940f, +0.002490f, -0.001974f, +0.001904f, -0.001453f, - +0.001259f, -0.006546f, -0.004100f, -0.051732f, +0.000459f, -0.004570f, +0.011976f, -0.002376f, +0.001497f, -0.007015f, - +0.007466f, -0.023083f, -0.002438f, -0.006123f, +0.017464f, +0.013780f, +0.000563f, -0.000218f, +0.010169f, -0.007364f, - +0.004893f, -0.001766f, +0.002018f, +0.006877f, +0.006811f, +0.006263f, +0.005463f, -0.001656f, +0.000775f, -0.001155f, - +0.002799f, +0.000104f, -0.002239f, -0.002122f, +0.001906f, +0.001457f, -0.000610f, -0.000075f, -0.000647f, -0.000119f, - +0.001281f, +0.001831f, -0.000689f, -0.000581f, +0.001719f, -0.001889f, -0.000705f, -0.002582f, -0.000197f, +0.001095f, - +0.002939f, +0.000256f, -0.000497f, -0.000231f, +0.001071f, -0.000779f, +0.000215f, +0.000167f, +0.000266f, +0.000533f, - +0.000906f, +0.000563f, -0.000699f, +0.000904f, +0.000811f, -0.000054f, +0.000173f, +0.000238f, +0.000444f, +0.000218f, - +0.000320f, -0.000343f, -0.000354f, -0.000136f, +0.000096f, -0.000064f, +0.000247f, -0.000389f, -0.000451f, +0.000020f, - +0.000271f, -0.000065f, -0.000172f, +0.000325f, -0.000014f, +0.000250f - }, - { - -0.040843f, +0.092334f, -0.018926f, +0.013172f, +0.006240f, +0.011029f, -0.009845f, +0.004877f, +0.004370f, -0.008758f, - -0.001742f, -0.016356f, -0.014593f, +0.024970f, -0.018757f, -0.008193f, +0.002713f, +0.013116f, +0.007796f, -0.000430f, - -0.002486f, -0.000581f, +0.006351f, -0.001840f, +0.006256f, -0.001484f, -0.000331f, -0.000025f, -0.000169f, +0.002694f, - +0.003946f, +0.003991f, -0.002391f, +0.000200f, -0.005841f, -0.004775f, -0.001785f, -0.000369f, -0.001205f, -0.006215f, - +0.000608f, +0.000999f, +0.007103f, -0.000709f, -0.002498f, +0.005167f, -0.003645f, +0.000349f, -0.000879f, +0.004367f, - +0.000628f, +0.002027f, +0.000372f, -0.002074f, -0.003279f, +0.000657f, +0.000014f, +0.002451f, -0.001405f, -0.003676f, - +0.001135f, -0.000384f, -0.000461f, +0.000308f, -0.000234f, +0.002183f, +0.000316f, -0.001129f, -0.000683f, +0.000047f, - +0.000051f, +0.001142f, -0.000250f, -0.000036f, -0.000311f, -0.000302f, +0.000325f, -0.000982f, -0.000114f, -0.000255f, - +0.001127f, -0.000081f, -0.001077f, +0.000171f, +0.000104f, +0.000426f, -0.000279f, +0.000293f, -0.000468f, +0.000073f, - +0.000542f, -0.000041f, +0.000064f, -0.000211f, -0.000096f, +0.000010f - }, - { - -0.001225f, -0.000043f, +0.010986f, +0.005578f, -0.004547f, +0.003995f, -0.004301f, -0.005573f, +0.000850f, +0.001809f, - -0.005234f, -0.002978f, -0.017517f, +0.006827f, +0.183056f, -0.016162f, -0.000092f, +0.017951f, +0.000513f, +0.007562f, - -0.000538f, +0.000357f, -0.000086f, +0.012937f, -0.010330f, +0.004360f, -0.003487f, -0.005610f, +0.003772f, +0.007976f, - +0.003005f, -0.005217f, -0.000395f, -0.000523f, +0.000740f, +0.001953f, +0.002931f, -0.002255f, -0.005108f, -0.001441f, - -0.005039f, +0.000718f, -0.000284f, +0.004498f, +0.000087f, +0.000957f, -0.003898f, -0.003307f, +0.000864f, +0.002010f, - +0.000986f, -0.001598f, +0.001963f, +0.002128f, +0.000710f, +0.000677f, +0.000987f, +0.001292f, -0.001893f, +0.001892f, - -0.001625f, -0.001772f, +0.001640f, -0.001813f, -0.001278f, -0.000637f, -0.000389f, -0.000875f, -0.000425f, +0.001149f, - +0.000932f, -0.000362f, +0.001071f, -0.000993f, -0.000612f, -0.000505f, -0.000124f, +0.000366f, +0.000824f, +0.000068f, - +0.000315f, +0.000835f, -0.000116f, +0.000080f, +0.000116f, +0.000064f, -0.000597f, -0.000138f, -0.000072f, -0.000398f, - -0.000239f, +0.000013f, +0.000458f, -0.000077f, +0.000058f, +0.000056f - }, - { - -0.020146f, +0.131110f, +0.002686f, +0.007301f, -0.008243f, -0.009391f, +0.004518f, -0.003537f, -0.004342f, -0.005797f, - +0.001873f, -0.014729f, +0.009485f, +0.024816f, +0.033745f, +0.003773f, +0.014147f, +0.001394f, +0.002329f, +0.003140f, - +0.006401f, +0.005336f, -0.005198f, +0.002864f, -0.002465f, -0.003468f, -0.012539f, -0.001589f, +0.002177f, -0.004453f, - -0.000433f, +0.002185f, -0.000235f, +0.002219f, +0.001641f, +0.000094f, -0.003317f, +0.001025f, +0.000413f, -0.003131f, - +0.004959f, +0.003193f, -0.001252f, +0.001737f, +0.002860f, +0.004393f, -0.005339f, -0.002798f, -0.000240f, +0.001051f, - -0.003313f, +0.000272f, -0.000008f, +0.001500f, +0.000197f, +0.003103f, +0.002549f, +0.000810f, -0.001747f, +0.000940f, - -0.000310f, -0.000877f, +0.001382f, +0.002436f, +0.001401f, -0.000171f, -0.000384f, +0.001840f, +0.000865f, -0.000660f, - +0.000649f, -0.000394f, -0.000854f, +0.000979f, +0.000055f, +0.000727f, +0.000544f, +0.000283f, +0.001030f, +0.000102f, - -0.000194f, -0.000466f, +0.000451f, -0.000466f, +0.000150f, -0.000018f, +0.000734f, -0.000249f, +0.000226f, -0.000032f, - -0.000323f, -0.000336f, +0.000167f, -0.000199f, +0.000328f, -0.000507f - } - }, - { - { - +0.001585f, +0.124613f, +0.026275f, -0.007861f, +0.001809f, +0.000322f, -0.006680f, -0.002755f, -0.005568f, +0.004644f, - -0.007797f, -0.010054f, +0.005780f, -0.004817f, +0.004759f, -0.009021f, -0.003546f, +0.011993f, -0.006929f, -0.013649f, - +0.013878f, +0.005450f, +0.001756f, +0.003188f, +0.010945f, +0.005974f, +0.016716f, +0.003267f, +0.000388f, +0.008841f, - -0.002999f, +0.015662f, -0.006920f, -0.004696f, -0.009301f, -0.007243f, +0.000673f, -0.008511f, +0.004599f, +0.002256f, - -0.001961f, +0.002294f, +0.000409f, +0.004161f, -0.002338f, -0.002709f, -0.001630f, +0.002636f, -0.002330f, -0.003533f, - -0.000299f, +0.000288f, -0.001496f, +0.000377f, -0.001040f, -0.000538f, -0.002032f, -0.001795f, +0.001325f, -0.001341f, - -0.000619f, +0.000510f, +0.000726f, +0.000403f, +0.000139f, -0.000670f, +0.000750f, +0.000986f, +0.000153f, +0.000693f, - +0.001022f, +0.000257f, -0.000588f, +0.000298f, +0.000941f, -0.000610f, +0.001337f, -0.000049f, -0.000618f, -0.000013f, - +0.000198f, -0.000206f, +0.000721f, -0.000018f, +0.000445f, +0.000025f, -0.000207f, -0.000413f, +0.000164f, +0.000325f, - +0.000586f, -0.000171f, -0.000199f, -0.000294f, -0.000057f, -0.000223f - }, - { - +0.018453f, +0.413372f, +0.000494f, -0.006272f, -0.000116f, -0.002677f, -0.002479f, -0.003819f, -0.007959f, -0.000016f, - +0.007110f, -0.010563f, -0.008829f, +0.003808f, +0.001648f, -0.024649f, -0.004925f, +0.013308f, +0.016816f, -0.000230f, - +0.001610f, -0.012877f, -0.004807f, +0.001273f, +0.001326f, -0.003501f, -0.003963f, +0.001997f, +0.000479f, -0.000005f, - -0.001245f, +0.006968f, +0.001680f, -0.001131f, +0.000163f, +0.003891f, +0.002713f, +0.001024f, +0.001049f, -0.000507f, - -0.003708f, -0.001205f, +0.006845f, +0.001518f, +0.000704f, +0.001153f, +0.001317f, +0.004311f, +0.001733f, -0.000385f, - -0.000759f, -0.000167f, -0.001332f, -0.000329f, +0.000651f, +0.001055f, -0.001589f, -0.001415f, -0.001677f, +0.000345f, - +0.000093f, +0.001040f, +0.000703f, -0.000571f, -0.001452f, -0.000921f, -0.001224f, +0.001092f, -0.000865f, +0.000894f, - +0.000396f, -0.000306f, -0.001045f, +0.000456f, -0.000011f, +0.000069f, +0.000798f, -0.000371f, +0.000193f, -0.000319f, - -0.000428f, -0.000067f, -0.000375f, +0.000517f, -0.000126f, -0.000112f, +0.000099f, -0.000028f, +0.000229f, +0.000033f, - +0.000386f, +0.000282f, -0.000333f, -0.000612f, +0.000033f, +0.000105f - }, - { - +0.000360f, -0.320014f, -0.020574f, -0.006910f, +0.018747f, +0.004227f, +0.000810f, -0.002389f, -0.001501f, -0.004291f, - -0.004735f, -0.001579f, -0.006409f, -0.008846f, -0.000145f, +0.011769f, -0.013403f, +0.010348f, -0.002887f, -0.002547f, - -0.018448f, -0.008650f, -0.002399f, +0.002255f, -0.000496f, +0.000687f, -0.002958f, -0.003894f, -0.006107f, +0.000199f, - +0.003516f, -0.007985f, -0.004835f, -0.005755f, -0.009034f, +0.004356f, +0.001364f, -0.009189f, +0.000285f, -0.001961f, - -0.003442f, -0.003624f, -0.003869f, +0.005416f, +0.003678f, +0.002731f, -0.005796f, -0.000246f, -0.000035f, +0.004788f, - +0.001926f, +0.001169f, -0.000588f, -0.004338f, +0.000125f, +0.002819f, +0.000981f, +0.001299f, +0.001512f, -0.002499f, - +0.000189f, +0.002011f, +0.000338f, -0.000139f, -0.000260f, +0.000599f, +0.000174f, -0.000579f, -0.000124f, +0.000272f, - +0.001738f, +0.001609f, -0.000210f, +0.000053f, +0.001174f, +0.000394f, +0.000276f, +0.000213f, -0.000576f, -0.000234f, - -0.000161f, -0.000295f, +0.000164f, +0.000093f, -0.000083f, +0.000633f, +0.000093f, -0.000545f, +0.000075f, -0.000526f, - -0.000247f, +0.000089f, -0.000104f, -0.000339f, -0.000101f, -0.000126f - }, - { - +0.001878f, +0.050123f, +0.003940f, +0.000507f, +0.000097f, +0.000240f, -0.000247f, -0.001058f, -0.002302f, +0.000302f, - +0.002096f, +0.005077f, -0.004628f, -0.010621f, +0.009649f, -0.006318f, -0.003684f, +0.006797f, -0.025118f, -0.006476f, - +0.003945f, -0.001149f, -0.005935f, -0.000758f, -0.007380f, +0.003198f, -0.004272f, +0.010702f, -0.005817f, -0.001788f, - -0.004961f, -0.004009f, -0.008561f, +0.001296f, -0.003705f, -0.000118f, -0.000880f, -0.000180f, -0.000404f, +0.002548f, - -0.000522f, -0.000268f, -0.002926f, -0.002611f, +0.000007f, +0.001814f, +0.001223f, -0.001937f, -0.000949f, +0.001593f, - +0.000620f, +0.000869f, +0.000614f, -0.000510f, +0.000740f, -0.000509f, -0.000096f, +0.000094f, -0.002891f, -0.000737f, - -0.000455f, -0.001736f, +0.001299f, -0.000527f, -0.000782f, -0.000309f, -0.000023f, +0.000702f, -0.000622f, +0.001106f, - -0.000023f, +0.000113f, -0.001493f, +0.001072f, -0.000036f, +0.000106f, +0.000362f, +0.000151f, -0.000106f, +0.000462f, - -0.000573f, +0.000247f, -0.000064f, +0.000214f, +0.000420f, +0.000128f, +0.000060f, +0.000252f, +0.000291f, -0.000064f, - +0.000331f, -0.000168f, +0.000220f, +0.000074f, -0.000299f, +0.000175f - }, - { - -0.034534f, -0.345404f, +0.041495f, -0.034385f, +0.007162f, +0.001211f, -0.004747f, +0.005884f, -0.007028f, +0.000634f, - +0.007409f, -0.005378f, +0.003556f, -0.000485f, -0.000065f, +0.002055f, +0.006743f, -0.042359f, +0.022384f, -0.010686f, - -0.009894f, +0.004625f, -0.009787f, -0.004937f, +0.004526f, +0.003002f, +0.001157f, -0.011610f, -0.008145f, +0.005877f, - -0.007060f, +0.004862f, -0.001123f, -0.001343f, +0.000121f, -0.004773f, +0.008966f, +0.006820f, -0.002811f, +0.000623f, - -0.002987f, -0.001665f, +0.000668f, +0.001044f, -0.000808f, +0.000001f, -0.000419f, +0.000590f, +0.001407f, -0.004115f, - -0.004107f, +0.001217f, +0.001107f, -0.001270f, +0.002271f, +0.000159f, +0.001130f, -0.002102f, -0.001334f, +0.000219f, - -0.000492f, +0.000613f, +0.000569f, -0.000739f, -0.000795f, +0.000737f, -0.000055f, +0.000233f, +0.001045f, +0.000512f, - -0.000186f, -0.000823f, +0.000326f, -0.000358f, -0.000136f, -0.000287f, -0.000174f, +0.001086f, +0.000837f, -0.000107f, - +0.000391f, -0.000505f, +0.000308f, -0.000252f, -0.000096f, -0.000109f, -0.000100f, -0.000296f, -0.000292f, -0.000083f, - -0.000651f, +0.000229f, -0.000195f, +0.000263f, -0.000012f, +0.000128f - }, - { - +0.000000f, +0.008197f, -0.008120f, -0.001549f, +0.001366f, +0.000154f, +0.000070f, -0.004014f, -0.001971f, -0.000849f, - -0.002699f, +0.000246f, -0.011109f, -0.014788f, +0.000041f, -0.000038f, +0.002712f, +0.002470f, +0.006631f, -0.011420f, - +0.005383f, +0.003971f, +0.010207f, +0.009961f, +0.004261f, +0.004840f, -0.012434f, +0.018723f, -0.010860f, +0.002709f, - +0.005339f, +0.003593f, -0.001089f, -0.007155f, +0.007461f, -0.000228f, +0.000190f, +0.001032f, +0.002869f, -0.000546f, - +0.004802f, +0.000375f, -0.001434f, -0.002939f, -0.004383f, -0.002145f, +0.000324f, -0.001082f, +0.000374f, -0.001972f, - -0.000805f, -0.000106f, +0.001633f, -0.002431f, +0.002144f, -0.001446f, +0.000264f, +0.000723f, +0.002054f, +0.000314f, - -0.001537f, +0.001170f, -0.003265f, -0.000668f, +0.000284f, +0.000298f, -0.000916f, -0.000074f, +0.000867f, -0.000766f, - -0.000099f, +0.000446f, +0.001016f, +0.000167f, +0.000330f, +0.000429f, -0.000753f, -0.000250f, -0.000514f, +0.000063f, - -0.000379f, -0.000313f, +0.000425f, +0.000311f, -0.000327f, -0.000139f, -0.000559f, -0.000361f, -0.000258f, +0.000016f, - -0.000215f, -0.000197f, -0.000351f, -0.000229f, -0.000104f, -0.000147f - }, - { - -0.105303f, +0.027846f, +0.057243f, +0.006262f, +0.010544f, -0.001158f, -0.000350f, +0.003125f, -0.003309f, -0.006996f, - +0.001317f, +0.007265f, +0.002759f, -0.000186f, -0.006237f, +0.007577f, -0.004828f, -0.001880f, +0.004956f, -0.000276f, - +0.002815f, +0.001618f, +0.001565f, +0.002370f, +0.004552f, -0.003314f, +0.000710f, -0.002685f, -0.002094f, -0.005054f, - +0.001917f, +0.009030f, -0.000678f, -0.004156f, -0.000330f, -0.000255f, -0.000904f, -0.002801f, -0.000479f, -0.000197f, - +0.000812f, -0.002468f, -0.000438f, +0.003277f, +0.001988f, -0.000424f, -0.000211f, -0.001856f, -0.005364f, +0.002383f, - -0.003379f, -0.003876f, -0.000620f, -0.003143f, +0.002335f, -0.003836f, -0.000530f, -0.000204f, +0.000395f, +0.000890f, - +0.001971f, -0.000924f, -0.000139f, +0.000206f, -0.000324f, -0.000845f, -0.000959f, +0.001340f, -0.000586f, +0.000527f, - -0.000314f, -0.001329f, -0.000369f, +0.000493f, +0.000384f, +0.000341f, +0.000470f, +0.000712f, +0.000173f, -0.000692f, - -0.000463f, +0.000241f, -0.000483f, -0.000134f, -0.000508f, -0.000022f, -0.000013f, +0.000063f, -0.000423f, -0.000490f, - -0.000097f, +0.000164f, +0.000001f, -0.000172f, -0.000227f, +0.000149f - }, - { - -0.001684f, -0.019988f, -0.011971f, +0.000615f, -0.000164f, +0.000260f, -0.000021f, +0.000784f, -0.000609f, +0.000754f, - +0.002955f, +0.005536f, +0.004423f, -0.002356f, +0.014700f, +0.021891f, +0.025866f, -0.000956f, -0.003925f, +0.000396f, - -0.027457f, -0.006200f, -0.012747f, -0.015178f, +0.008307f, -0.011430f, +0.002878f, +0.001906f, -0.004084f, -0.006918f, - -0.002477f, -0.001283f, +0.000025f, -0.005204f, +0.003666f, -0.003403f, +0.003656f, -0.004730f, -0.002734f, +0.000194f, - +0.000707f, +0.002027f, -0.002185f, +0.001446f, -0.003523f, +0.003893f, +0.001401f, +0.001882f, +0.001419f, -0.002813f, - +0.000744f, -0.002874f, -0.001468f, +0.003499f, -0.000670f, +0.001463f, -0.000519f, -0.001219f, +0.000628f, -0.001731f, - +0.003126f, +0.001190f, +0.002299f, -0.000603f, +0.000186f, -0.000290f, -0.000015f, -0.000110f, +0.000912f, -0.000827f, - +0.001598f, -0.000385f, -0.000922f, -0.000371f, -0.000123f, -0.000659f, +0.001546f, +0.000048f, +0.000585f, +0.000768f, - +0.000373f, +0.000146f, -0.000522f, -0.000189f, +0.000313f, -0.000313f, -0.000088f, +0.001131f, -0.000136f, -0.000158f, - +0.000245f, +0.000085f, +0.000134f, +0.000147f, +0.000206f, +0.000010f - }, - { - +0.037362f, -0.446193f, -0.000069f, +0.005772f, +0.006837f, -0.001605f, +0.001176f, +0.001393f, -0.001992f, -0.000797f, - +0.001284f, -0.001159f, +0.004544f, +0.001798f, -0.005634f, -0.001178f, +0.004214f, +0.004152f, -0.002473f, -0.001387f, - -0.000964f, -0.001090f, -0.001921f, -0.002264f, +0.000790f, +0.001145f, -0.000418f, -0.001188f, +0.001825f, -0.004724f, - +0.002978f, +0.003133f, -0.004425f, -0.003622f, -0.003476f, +0.001811f, -0.000499f, -0.000236f, -0.000999f, +0.002963f, - -0.006172f, +0.001327f, +0.000696f, +0.001785f, +0.001579f, +0.000251f, -0.001695f, +0.002017f, -0.002323f, -0.001294f, - -0.002582f, +0.001322f, -0.000784f, +0.001837f, -0.000822f, +0.000602f, -0.000608f, +0.000344f, +0.000979f, +0.001715f, - +0.001181f, +0.001267f, -0.000440f, +0.001454f, +0.000144f, +0.001316f, +0.000212f, -0.000621f, -0.000011f, -0.001049f, - +0.000250f, +0.000049f, +0.000277f, +0.000293f, +0.000665f, -0.000738f, -0.000809f, -0.000256f, +0.000056f, -0.000307f, - +0.000333f, +0.000037f, -0.000143f, -0.000251f, -0.000175f, -0.000046f, +0.000130f, +0.000222f, +0.000419f, +0.000098f, - +0.000077f, +0.000106f, -0.000102f, -0.000097f, -0.000170f, -0.000158f - }, - { - +0.002073f, +0.070053f, -0.006156f, +0.005188f, +0.001481f, +0.005032f, +0.002152f, +0.000982f, +0.002127f, +0.006668f, - -0.000064f, -0.006588f, -0.000508f, -0.001302f, -0.024037f, -0.000352f, -0.002386f, -0.006957f, -0.009327f, -0.001157f, - +0.006471f, -0.000888f, -0.005910f, +0.010379f, +0.003144f, +0.002468f, -0.009371f, +0.004058f, +0.002162f, +0.009981f, - +0.000344f, -0.001281f, -0.002033f, +0.003911f, -0.003614f, -0.002106f, +0.009625f, -0.000580f, +0.001538f, +0.002360f, - +0.002844f, -0.000724f, -0.001811f, -0.002349f, +0.001785f, +0.004172f, +0.000362f, -0.000557f, +0.002613f, -0.001891f, - +0.001851f, -0.001466f, +0.001206f, +0.000677f, +0.000983f, -0.000849f, +0.001080f, +0.000029f, +0.000381f, +0.000075f, - +0.000451f, -0.000769f, +0.000965f, -0.001191f, -0.000909f, +0.000067f, +0.000293f, -0.000546f, +0.000082f, +0.000094f, - +0.000813f, -0.000710f, -0.000734f, +0.000784f, -0.000629f, +0.000570f, -0.000084f, +0.000132f, -0.000463f, +0.000812f, - +0.000220f, -0.000222f, +0.000381f, -0.000432f, +0.000054f, +0.000125f, -0.000380f, -0.000098f, +0.000212f, +0.000410f, - +0.000048f, +0.000171f, -0.000061f, +0.000198f, -0.000054f, +0.000194f - }, - { - +0.008727f, -0.259163f, -0.009385f, -0.019733f, -0.005082f, -0.003087f, -0.030274f, -0.001495f, -0.005340f, -0.003801f, - +0.003382f, +0.003684f, -0.004031f, +0.004989f, +0.001294f, -0.008146f, +0.017995f, -0.000802f, +0.014220f, -0.000184f, - +0.006503f, +0.001752f, +0.002044f, +0.000399f, -0.004702f, -0.004640f, -0.003823f, -0.001651f, +0.005686f, +0.008210f, - -0.003137f, -0.007593f, -0.004054f, -0.000038f, +0.004736f, -0.000107f, +0.002366f, +0.008954f, +0.002094f, +0.005493f, - +0.005704f, +0.005711f, -0.000332f, +0.002810f, -0.001859f, -0.002687f, +0.000931f, +0.000706f, +0.001582f, +0.000533f, - +0.000609f, -0.000944f, +0.002799f, +0.000255f, +0.001780f, -0.001435f, +0.001381f, -0.000774f, +0.000697f, -0.000075f, - -0.001193f, -0.000114f, +0.000340f, -0.000448f, -0.000110f, -0.000018f, -0.000814f, -0.000059f, -0.001122f, +0.000006f, - -0.000209f, -0.000656f, -0.000661f, +0.000375f, +0.000632f, -0.000033f, +0.000287f, -0.000474f, +0.000251f, +0.000036f, - -0.000213f, +0.000240f, -0.000778f, -0.000463f, +0.000353f, +0.000253f, +0.000275f, +0.000277f, +0.000335f, -0.000104f, - -0.000320f, -0.000054f, +0.000589f, +0.000066f, +0.000112f, +0.000204f - }, - { - -0.000310f, +0.028686f, +0.004547f, -0.013839f, -0.002029f, +0.003528f, -0.003184f, +0.001273f, +0.000507f, -0.002958f, - +0.003691f, -0.005613f, -0.024181f, -0.021349f, -0.008865f, -0.000214f, +0.005556f, +0.006628f, -0.009236f, +0.003433f, - +0.008329f, -0.027913f, +0.005314f, -0.007737f, +0.014268f, +0.012012f, -0.005706f, +0.005402f, +0.005924f, -0.000985f, - +0.003571f, -0.006371f, +0.000987f, +0.010124f, +0.003411f, +0.007648f, +0.005612f, -0.001274f, +0.004437f, +0.001287f, - -0.004115f, -0.001266f, +0.000646f, -0.000496f, +0.002299f, +0.000742f, -0.001678f, -0.001198f, +0.000860f, +0.000793f, - +0.000944f, +0.000081f, +0.002379f, -0.000344f, +0.000163f, -0.002512f, -0.001867f, -0.001981f, -0.000668f, +0.001285f, - +0.003243f, +0.000006f, +0.000297f, -0.000983f, +0.000029f, -0.000372f, +0.000291f, +0.000338f, -0.000380f, +0.001187f, - +0.000562f, +0.000578f, -0.000339f, +0.000321f, +0.000649f, +0.000316f, +0.000586f, +0.000119f, +0.000149f, +0.000319f, - +0.000224f, -0.000200f, -0.000264f, -0.000439f, +0.000061f, -0.000059f, -0.000423f, -0.000383f, -0.000126f, +0.000172f, - +0.000023f, +0.000103f, +0.000092f, +0.000012f, +0.000116f, +0.000258f - }, - { - +0.036915f, -0.009512f, -0.011914f, -0.000598f, -0.001338f, +0.023592f, +0.002919f, -0.002080f, -0.002877f, -0.002008f, - -0.004334f, -0.014268f, +0.011602f, -0.020047f, -0.004280f, -0.003932f, -0.006926f, +0.007339f, +0.004902f, +0.010152f, - -0.006296f, -0.002438f, +0.005274f, +0.006774f, +0.002619f, +0.004614f, -0.004221f, -0.001367f, +0.002784f, -0.000453f, - +0.008845f, -0.000789f, -0.000902f, -0.003006f, -0.004353f, -0.001281f, -0.004259f, +0.002879f, -0.002435f, -0.002088f, - -0.003366f, -0.002173f, +0.006613f, +0.000243f, +0.001379f, -0.000093f, -0.000822f, -0.000606f, -0.000240f, -0.000090f, - +0.005268f, +0.001491f, -0.002569f, -0.000451f, -0.001818f, +0.002125f, -0.001891f, +0.001984f, -0.001110f, -0.001654f, - -0.000677f, -0.000707f, -0.001026f, +0.001411f, -0.000898f, +0.002288f, +0.001041f, -0.001556f, +0.000049f, -0.000018f, - -0.000395f, +0.000552f, -0.000144f, -0.000103f, -0.000690f, +0.000621f, -0.001306f, +0.000540f, -0.000317f, -0.000237f, - +0.000529f, -0.000071f, -0.000599f, -0.000283f, +0.000263f, +0.000096f, -0.000528f, +0.000134f, -0.000089f, +0.000012f, - +0.000493f, -0.000068f, -0.000081f, -0.000237f, +0.000268f, -0.000049f - }, - { - +0.000905f, -0.000615f, +0.005862f, +0.004756f, -0.000902f, +0.000541f, +0.000405f, -0.002385f, +0.001036f, -0.002245f, - -0.001879f, -0.001391f, -0.014876f, +0.064780f, +0.103135f, +0.004309f, +0.002724f, +0.004261f, +0.004838f, -0.005741f, - +0.014921f, -0.003559f, +0.002828f, +0.004613f, +0.000848f, -0.001254f, -0.001345f, -0.000790f, +0.000207f, +0.003629f, - +0.004797f, -0.000609f, -0.002553f, -0.003742f, -0.003361f, -0.000083f, +0.004484f, -0.002579f, -0.004364f, +0.000043f, - -0.008094f, +0.005933f, -0.001523f, +0.003005f, +0.000683f, +0.000634f, -0.005945f, -0.002695f, +0.001003f, +0.003317f, - +0.000691f, -0.001094f, +0.002337f, +0.001073f, +0.000263f, -0.000709f, +0.001992f, -0.000236f, -0.000790f, +0.001313f, - -0.001300f, -0.000706f, +0.001297f, -0.001944f, -0.001302f, +0.000307f, -0.002358f, -0.000098f, +0.000215f, +0.001129f, - +0.000505f, -0.000156f, +0.000281f, -0.000576f, -0.000620f, -0.000247f, -0.000021f, -0.000110f, +0.000102f, +0.000266f, - +0.000719f, +0.000948f, +0.000159f, -0.000015f, +0.000411f, -0.000503f, -0.000894f, -0.000229f, +0.000299f, -0.000359f, - -0.000103f, +0.000039f, +0.000335f, -0.000051f, +0.000180f, +0.000019f - }, - { - +0.031851f, +0.086029f, -0.014072f, -0.000616f, -0.004129f, +0.007288f, -0.011684f, -0.002239f, -0.005223f, -0.005655f, - +0.005794f, -0.004404f, -0.000507f, -0.014480f, +0.099322f, +0.008908f, +0.012540f, -0.009954f, +0.003554f, +0.004091f, - +0.006914f, +0.004891f, -0.004767f, -0.001981f, -0.001372f, -0.004658f, -0.008717f, +0.007932f, -0.005967f, -0.003418f, - -0.001384f, +0.001017f, +0.006346f, -0.000541f, -0.000653f, -0.001277f, -0.004635f, +0.002058f, +0.001850f, +0.000104f, - +0.000643f, +0.005064f, +0.001447f, +0.001707f, +0.002617f, +0.000042f, -0.004422f, +0.000139f, +0.000440f, -0.001472f, - -0.000902f, -0.001785f, +0.003300f, -0.000511f, +0.001353f, +0.003060f, +0.001039f, +0.002455f, -0.001848f, -0.001732f, - +0.001046f, +0.000209f, +0.000941f, +0.001039f, +0.001523f, -0.001206f, -0.000210f, +0.001466f, +0.000957f, -0.000279f, - +0.000107f, -0.000290f, -0.000533f, +0.001429f, -0.000259f, +0.000914f, +0.000131f, +0.000947f, +0.000121f, +0.000603f, - -0.000209f, -0.000282f, -0.000033f, +0.000130f, +0.000265f, +0.000059f, +0.000491f, -0.000155f, +0.000142f, -0.000279f, - -0.000028f, -0.000261f, +0.000030f, -0.000100f, +0.000048f, -0.000363f - } - }, - { - { - -0.000497f, +0.008506f, -0.070354f, -0.005849f, +0.004905f, -0.002152f, -0.003559f, +0.002629f, -0.000037f, +0.004739f, - -0.009322f, -0.002592f, -0.000705f, -0.019499f, +0.017505f, +0.010457f, +0.001361f, +0.000949f, -0.010488f, +0.000458f, - +0.023691f, +0.004460f, -0.002429f, -0.004555f, +0.000648f, -0.009852f, +0.004700f, +0.000599f, -0.006425f, +0.003421f, - -0.005021f, +0.006656f, -0.007520f, +0.006536f, +0.006496f, +0.002227f, +0.005345f, -0.009915f, +0.001635f, -0.000021f, - -0.004353f, +0.001035f, -0.001337f, +0.002119f, -0.002881f, -0.002455f, -0.003093f, +0.000745f, -0.001733f, -0.001135f, - -0.000313f, +0.000766f, +0.000635f, +0.001447f, -0.000324f, +0.000097f, -0.000682f, -0.000596f, +0.002706f, -0.000450f, - -0.001430f, -0.000104f, +0.000682f, -0.000392f, +0.000085f, -0.000258f, +0.000667f, +0.000849f, +0.000210f, -0.000607f, - +0.000055f, +0.000390f, +0.000022f, -0.000170f, +0.000178f, -0.000845f, +0.000740f, -0.000064f, -0.000080f, -0.000084f, - +0.000182f, -0.000198f, +0.000463f, -0.000183f, +0.000422f, -0.000042f, -0.000155f, -0.000200f, +0.000117f, -0.000331f, - +0.000477f, -0.000337f, +0.000170f, +0.000244f, +0.000153f, -0.000190f - }, - { - -0.012304f, +0.285445f, -0.062787f, -0.002972f, +0.002357f, -0.000109f, -0.002491f, +0.002002f, +0.001730f, +0.004030f, - +0.010219f, -0.006096f, -0.006342f, -0.004919f, +0.007119f, -0.003982f, +0.002355f, -0.008682f, -0.005155f, -0.004259f, - -0.003349f, -0.007253f, +0.001966f, +0.005197f, +0.000673f, -0.005704f, -0.000056f, +0.003486f, -0.000031f, -0.000635f, - -0.004704f, +0.003205f, -0.002288f, +0.001156f, +0.001183f, -0.000711f, +0.000355f, +0.002634f, +0.001564f, -0.000342f, - +0.001054f, +0.000664f, +0.002237f, -0.001909f, -0.002687f, -0.002427f, -0.001471f, +0.001343f, +0.001325f, +0.000153f, - +0.001446f, +0.001998f, -0.001357f, -0.000924f, -0.000176f, +0.000135f, +0.000299f, +0.000621f, +0.000362f, +0.000396f, - -0.001541f, +0.000008f, +0.000748f, +0.000067f, -0.001476f, -0.000771f, -0.001924f, +0.000712f, -0.000460f, +0.000113f, - -0.000155f, -0.000379f, -0.000414f, +0.000588f, -0.000591f, -0.000043f, +0.000390f, -0.001023f, +0.000546f, +0.000214f, - -0.000119f, +0.000105f, -0.000014f, +0.000616f, -0.000045f, -0.000099f, +0.000581f, -0.000208f, -0.000051f, -0.000264f, - +0.000016f, +0.000240f, +0.000017f, -0.000352f, +0.000177f, +0.000078f - }, - { - -0.002674f, -0.193308f, +0.070324f, -0.034935f, -0.013867f, -0.004919f, +0.002095f, -0.000422f, +0.001550f, -0.003769f, - +0.000246f, +0.000509f, -0.006882f, -0.002846f, -0.006680f, +0.010585f, -0.006864f, +0.005357f, -0.005246f, +0.001833f, - -0.009270f, -0.000576f, -0.000922f, +0.002951f, -0.001015f, +0.003716f, -0.001006f, +0.004499f, +0.001213f, -0.003333f, - -0.001852f, -0.005249f, -0.004020f, -0.005858f, -0.005817f, +0.001511f, -0.001107f, -0.000837f, +0.004032f, -0.000391f, - -0.000300f, -0.001394f, -0.001897f, +0.002845f, -0.001076f, +0.001494f, -0.004862f, +0.002031f, +0.001875f, +0.001857f, - -0.001973f, +0.000224f, -0.001162f, -0.002980f, +0.000411f, +0.001294f, +0.001043f, +0.001888f, +0.001828f, -0.001959f, - -0.000065f, +0.001014f, -0.000616f, -0.000935f, +0.000469f, +0.000121f, -0.000504f, -0.000604f, -0.000750f, +0.000102f, - +0.001414f, +0.000590f, -0.000183f, -0.000037f, +0.000431f, +0.000430f, +0.000179f, -0.000304f, -0.000225f, +0.000555f, - -0.000247f, -0.000321f, +0.000422f, -0.000143f, -0.000589f, +0.000338f, -0.000059f, -0.000340f, +0.000202f, -0.000604f, - -0.000071f, +0.000053f, -0.000079f, -0.000152f, +0.000227f, +0.000092f - }, - { - -0.000693f, +0.026931f, -0.009738f, +0.000242f, -0.001041f, -0.000556f, +0.000646f, +0.001140f, -0.001550f, +0.000316f, - +0.001285f, +0.004150f, -0.009373f, -0.007476f, +0.015473f, -0.005867f, -0.006160f, +0.008993f, -0.019000f, -0.003487f, - +0.000671f, +0.003487f, +0.000925f, +0.000903f, -0.003431f, +0.008462f, +0.003338f, +0.012668f, -0.004809f, +0.003088f, - -0.000915f, -0.001227f, -0.004965f, +0.005462f, -0.002141f, -0.000966f, -0.001289f, +0.001248f, -0.000325f, +0.001772f, - -0.001402f, -0.001638f, -0.000121f, +0.001210f, +0.001578f, +0.001403f, +0.001072f, +0.000291f, +0.000076f, -0.000571f, - -0.001408f, +0.001307f, +0.000319f, -0.001415f, +0.000081f, -0.001331f, +0.000820f, +0.001445f, -0.002036f, +0.000401f, - +0.000376f, -0.001131f, +0.000961f, -0.000743f, -0.000952f, +0.000362f, +0.000848f, +0.000683f, -0.001011f, +0.001314f, - -0.000420f, +0.000634f, -0.000212f, +0.000701f, -0.000539f, +0.000159f, +0.000418f, +0.000182f, -0.000274f, +0.000347f, - -0.000871f, +0.000108f, -0.000270f, +0.000083f, +0.000031f, -0.000194f, +0.000040f, -0.000068f, +0.000027f, -0.000365f, - +0.000140f, -0.000070f, +0.000136f, +0.000085f, -0.000067f, +0.000258f - }, - { - +0.050777f, -0.293171f, -0.004898f, -0.021263f, +0.005091f, -0.002158f, -0.008296f, +0.003316f, -0.006103f, +0.000455f, - +0.010101f, -0.006270f, +0.005463f, +0.003548f, -0.013792f, -0.011744f, +0.002578f, -0.048138f, +0.010897f, -0.009578f, - -0.005113f, +0.008546f, -0.008185f, -0.004139f, +0.001792f, -0.002615f, +0.001816f, -0.002391f, +0.000283f, +0.006269f, - -0.001436f, +0.003613f, -0.002098f, -0.002882f, -0.000045f, -0.000044f, -0.001734f, +0.000513f, -0.000199f, +0.001004f, - -0.000666f, -0.001829f, +0.000548f, -0.000389f, -0.002322f, -0.000218f, +0.001284f, +0.001204f, +0.000405f, -0.004213f, - -0.003498f, +0.000721f, -0.000024f, -0.002337f, +0.001930f, -0.000773f, -0.000403f, -0.001084f, +0.000044f, -0.000614f, - -0.000766f, +0.000496f, +0.000317f, -0.000282f, -0.000990f, +0.000266f, -0.000051f, -0.000502f, +0.000035f, -0.000704f, - -0.000391f, -0.001036f, +0.000029f, -0.000033f, +0.000008f, -0.000029f, -0.000174f, -0.000021f, +0.000449f, -0.000083f, - +0.000194f, -0.000314f, +0.000375f, -0.000433f, +0.000184f, +0.000274f, +0.000231f, -0.000028f, -0.000332f, -0.000109f, - -0.000380f, +0.000458f, -0.000125f, +0.000094f, -0.000061f, +0.000102f - }, - { - -0.000206f, +0.008921f, -0.009376f, -0.002893f, +0.000013f, +0.000398f, +0.001096f, -0.002217f, +0.002236f, +0.000202f, - -0.003868f, +0.000478f, -0.007984f, -0.001800f, +0.007780f, -0.005080f, -0.002236f, +0.002421f, -0.007369f, -0.029819f, - +0.004203f, +0.002817f, +0.002591f, +0.004733f, +0.001859f, +0.001540f, -0.003900f, +0.026780f, -0.002918f, +0.001280f, - -0.004385f, +0.003107f, -0.001014f, -0.008627f, +0.002969f, -0.004690f, -0.001629f, +0.001264f, +0.002956f, -0.001837f, - +0.001354f, -0.001168f, +0.001275f, -0.000542f, -0.001726f, -0.000089f, +0.000540f, -0.002697f, +0.002005f, +0.001510f, - +0.001184f, -0.000414f, +0.001349f, -0.002211f, +0.000851f, -0.001889f, +0.000198f, -0.000539f, +0.000235f, -0.000852f, - -0.001437f, +0.001768f, -0.001958f, -0.000228f, +0.000657f, +0.000260f, -0.000980f, -0.000069f, +0.001023f, -0.000787f, - -0.000081f, +0.000155f, +0.000434f, +0.000102f, +0.000845f, +0.000035f, -0.001292f, +0.000433f, -0.000457f, -0.000152f, - -0.000106f, -0.000470f, +0.000218f, -0.000116f, -0.000239f, +0.000362f, -0.000578f, -0.000242f, +0.000045f, +0.000075f, - -0.000063f, +0.000124f, -0.000040f, -0.000506f, -0.000073f, +0.000182f - }, - { - +0.091408f, +0.083147f, -0.102340f, -0.009627f, -0.000832f, -0.001898f, +0.000888f, +0.001581f, -0.000605f, -0.001698f, - -0.002375f, +0.001008f, -0.001159f, -0.000211f, -0.012122f, +0.009192f, +0.003769f, -0.002801f, +0.003941f, +0.000910f, - +0.000388f, -0.002928f, -0.005395f, +0.000865f, +0.002115f, -0.006678f, +0.004320f, +0.002843f, +0.003526f, -0.001889f, - -0.000276f, +0.004432f, -0.005827f, -0.004799f, +0.003414f, +0.001153f, +0.001298f, +0.001713f, +0.000126f, -0.000402f, - +0.001644f, -0.003222f, -0.002355f, +0.002343f, -0.000907f, -0.000194f, +0.001266f, -0.001036f, -0.004622f, +0.001736f, - -0.000571f, +0.000299f, +0.001902f, -0.002046f, +0.003158f, -0.004223f, -0.001554f, +0.001054f, +0.000362f, -0.000073f, - +0.001827f, -0.001214f, -0.000214f, +0.000384f, -0.000549f, -0.000440f, -0.001109f, +0.000400f, -0.001073f, -0.000171f, - +0.000063f, -0.000729f, -0.000363f, +0.000363f, +0.000291f, +0.000146f, +0.000501f, +0.000198f, -0.000100f, -0.000320f, - -0.000188f, +0.000750f, +0.000128f, +0.000297f, -0.000285f, +0.000527f, +0.000024f, -0.000165f, -0.000069f, -0.000173f, - +0.000170f, +0.000182f, +0.000218f, +0.000037f, +0.000038f, +0.000534f - }, - { - +0.001089f, +0.007004f, +0.000301f, -0.000225f, -0.000139f, +0.000104f, +0.000527f, +0.000329f, -0.001066f, -0.000853f, - -0.000483f, +0.003071f, +0.001619f, +0.003133f, -0.007072f, -0.021702f, +0.000944f, +0.002854f, -0.007618f, +0.012033f, - -0.000436f, +0.010088f, -0.003215f, -0.005903f, +0.006211f, -0.018874f, -0.003101f, +0.000513f, -0.006259f, -0.006732f, - +0.001448f, -0.003327f, +0.006082f, -0.000777f, +0.002229f, -0.006500f, +0.003546f, -0.000511f, +0.001428f, +0.001592f, - +0.000526f, +0.000416f, -0.003880f, +0.001366f, -0.003219f, +0.003585f, -0.000215f, -0.000832f, +0.002394f, -0.000475f, - +0.000534f, -0.000513f, -0.000346f, +0.002114f, -0.002087f, +0.000202f, -0.000440f, -0.000317f, +0.001355f, +0.000426f, - +0.002003f, -0.001048f, +0.000776f, -0.001661f, +0.000209f, +0.000419f, +0.000741f, -0.001196f, -0.000189f, -0.001571f, - +0.000792f, +0.000149f, -0.000148f, -0.000186f, -0.000035f, -0.000759f, +0.001185f, -0.000189f, +0.000611f, -0.000018f, - -0.000214f, +0.000323f, -0.000035f, +0.000456f, +0.000338f, -0.000446f, -0.000089f, +0.000489f, -0.000414f, +0.000139f, - -0.000051f, -0.000160f, -0.000115f, -0.000060f, +0.000144f, +0.000068f - }, - { - -0.005057f, -0.416340f, +0.073874f, +0.007108f, -0.003215f, -0.000068f, +0.003791f, +0.003687f, +0.000469f, +0.000338f, - +0.002446f, -0.000959f, +0.000296f, -0.000426f, -0.006306f, +0.002583f, -0.003219f, -0.007247f, -0.000458f, +0.005717f, - +0.000860f, -0.001517f, -0.000665f, +0.001072f, +0.004161f, +0.003441f, +0.002038f, -0.000793f, +0.002873f, -0.004158f, - +0.003754f, +0.003981f, -0.001653f, +0.000598f, -0.000842f, +0.000204f, -0.001757f, +0.001158f, -0.003425f, -0.002294f, - -0.010506f, -0.000571f, +0.002186f, +0.001878f, -0.000595f, +0.000638f, -0.001394f, +0.000533f, -0.002004f, -0.000177f, - -0.002807f, +0.000835f, +0.000065f, +0.002806f, -0.000340f, -0.000157f, -0.000889f, -0.000137f, -0.000578f, +0.000343f, - -0.000230f, -0.000234f, -0.000756f, +0.001027f, -0.000356f, +0.000730f, -0.000277f, -0.000619f, +0.000631f, -0.000616f, - +0.000042f, -0.000513f, +0.000064f, +0.000167f, +0.000666f, -0.000348f, +0.000514f, +0.000042f, +0.000430f, -0.000474f, - +0.000091f, -0.000250f, -0.000141f, -0.000116f, -0.000180f, -0.000294f, -0.000264f, -0.000261f, +0.000169f, -0.000195f, - -0.000194f, +0.000177f, -0.000085f, -0.000004f, -0.000240f, +0.000061f - }, - { - -0.001041f, +0.047189f, -0.025051f, +0.002951f, +0.003987f, -0.003295f, -0.009502f, +0.001360f, +0.000944f, +0.004018f, - +0.000797f, -0.001193f, +0.005176f, +0.001601f, -0.010705f, +0.012264f, -0.003548f, -0.006909f, -0.008197f, -0.007736f, - -0.000104f, +0.001593f, -0.009170f, +0.003021f, +0.004650f, +0.004457f, -0.008521f, +0.000486f, -0.001624f, +0.000572f, - -0.003675f, +0.005354f, +0.000278f, +0.003497f, -0.000710f, +0.001402f, +0.007021f, -0.003030f, +0.000386f, +0.000851f, - +0.002444f, -0.001415f, -0.000927f, -0.001344f, +0.000800f, +0.001818f, -0.001379f, -0.001930f, +0.000568f, -0.002459f, - +0.002143f, -0.000592f, +0.001587f, -0.000631f, -0.000081f, -0.000563f, +0.000001f, -0.000334f, +0.000847f, +0.000095f, - -0.000765f, -0.000675f, +0.001031f, -0.000041f, -0.000562f, -0.000506f, +0.000598f, -0.000412f, -0.000218f, -0.000249f, - +0.000573f, -0.000630f, -0.000699f, +0.000842f, -0.000408f, +0.000864f, -0.000320f, +0.000039f, -0.000346f, +0.000476f, - -0.000214f, -0.000037f, +0.000780f, -0.000494f, -0.000010f, +0.000145f, +0.000221f, +0.000315f, +0.000176f, +0.000408f, - -0.000217f, +0.000320f, +0.000183f, +0.000245f, -0.000024f, +0.000190f - }, - { - -0.005748f, -0.183614f, +0.075395f, -0.007765f, -0.003738f, +0.003002f, -0.021591f, +0.000363f, -0.004052f, +0.003246f, - -0.001389f, +0.000132f, -0.000979f, -0.001528f, +0.004301f, -0.003980f, +0.017602f, -0.007882f, +0.003674f, +0.000089f, - +0.007147f, +0.001613f, -0.000075f, +0.000751f, -0.000996f, -0.002368f, -0.002861f, -0.001734f, +0.004067f, +0.003987f, - -0.006072f, -0.001737f, +0.002358f, -0.001874f, +0.005168f, +0.001427f, +0.001532f, +0.000987f, -0.004435f, +0.003097f, - +0.000977f, +0.002152f, +0.000212f, +0.002961f, -0.001470f, -0.002015f, -0.000878f, +0.000285f, +0.001397f, +0.000087f, - +0.000939f, -0.000085f, +0.001912f, -0.001388f, +0.001342f, -0.001179f, +0.000220f, -0.001043f, +0.000433f, +0.000324f, - +0.001128f, +0.001193f, +0.001051f, +0.000155f, +0.000406f, +0.000366f, -0.000169f, +0.000230f, -0.000696f, +0.000069f, - +0.000062f, -0.000029f, -0.000044f, +0.000640f, +0.000420f, -0.000313f, -0.000289f, -0.000815f, +0.000152f, +0.000023f, - -0.000132f, +0.000103f, -0.000484f, +0.000191f, +0.000227f, -0.000046f, -0.000060f, -0.000255f, -0.000154f, -0.000114f, - -0.000128f, -0.000168f, +0.000162f, -0.000070f, +0.000100f, +0.000047f - }, - { - +0.000869f, +0.011068f, -0.005559f, -0.005058f, +0.003790f, +0.002200f, -0.003172f, +0.000880f, -0.000686f, -0.001781f, - +0.002675f, -0.000564f, +0.014339f, +0.021816f, -0.008799f, -0.007099f, -0.002463f, +0.009389f, -0.008409f, -0.004035f, - +0.012366f, -0.011886f, +0.001888f, -0.019257f, -0.003671f, +0.005871f, -0.012288f, +0.000664f, +0.005285f, +0.000973f, - +0.001540f, -0.005414f, -0.003010f, +0.003383f, -0.003141f, +0.001620f, +0.003625f, +0.000706f, +0.003361f, -0.000668f, - -0.005771f, -0.000405f, +0.003307f, -0.000016f, +0.001816f, +0.000717f, -0.000726f, +0.000013f, -0.001285f, -0.001966f, - -0.000823f, -0.001149f, +0.001636f, -0.000276f, +0.000505f, -0.001250f, -0.000169f, -0.000866f, -0.000546f, +0.000235f, - +0.001503f, -0.001047f, +0.000898f, -0.001503f, +0.000090f, +0.000409f, -0.000345f, -0.000281f, -0.001282f, +0.000811f, - +0.000034f, -0.000333f, -0.000089f, +0.000576f, +0.000107f, -0.000021f, +0.000117f, -0.000446f, -0.000034f, -0.000047f, - -0.000187f, -0.000199f, +0.000260f, +0.000020f, +0.000146f, -0.000308f, -0.000506f, -0.000029f, +0.000135f, +0.000004f, - -0.000162f, +0.000170f, +0.000069f, -0.000141f, +0.000109f, +0.000118f - }, - { - -0.019635f, -0.071124f, -0.005288f, -0.011708f, -0.013112f, +0.001754f, -0.004902f, -0.000330f, -0.000252f, -0.000316f, - +0.002692f, -0.010256f, -0.003904f, -0.032996f, +0.002662f, +0.003434f, -0.003026f, -0.000305f, +0.000478f, +0.008564f, - -0.007764f, -0.002626f, +0.002005f, +0.001929f, -0.004424f, +0.002323f, -0.005011f, -0.000901f, +0.000161f, -0.005038f, - +0.003502f, -0.008032f, -0.001860f, +0.001458f, -0.000668f, +0.002977f, -0.002082f, +0.002533f, -0.000818f, +0.002122f, - +0.000808f, -0.003227f, +0.003381f, +0.000869f, +0.003756f, -0.001140f, -0.002482f, -0.001142f, +0.001146f, -0.001530f, - +0.003960f, -0.001565f, -0.003487f, +0.001832f, -0.000103f, +0.003932f, -0.001964f, -0.000048f, -0.002035f, -0.000046f, - +0.000730f, +0.000407f, -0.000539f, +0.001362f, -0.001838f, +0.000813f, -0.000227f, -0.001576f, +0.000515f, +0.000243f, - -0.000638f, +0.000017f, -0.000044f, +0.000446f, -0.000414f, +0.000370f, -0.001081f, +0.000639f, -0.000378f, +0.000024f, - -0.000169f, -0.000179f, +0.000246f, +0.000296f, +0.000092f, -0.000244f, -0.000559f, +0.000286f, +0.000102f, -0.000138f, - +0.000411f, +0.000027f, -0.000118f, -0.000539f, +0.000080f, -0.000176f - }, - { - -0.000161f, -0.004751f, +0.000202f, +0.001969f, -0.001547f, +0.001010f, +0.001853f, -0.000291f, +0.004215f, +0.000268f, - +0.004867f, +0.003486f, -0.007852f, -0.005197f, -0.034657f, -0.013499f, +0.009967f, -0.002274f, +0.002300f, -0.009461f, - +0.003682f, -0.009227f, +0.005628f, +0.000570f, -0.002812f, -0.002182f, -0.002260f, +0.000791f, -0.004767f, -0.003551f, - +0.000736f, +0.002417f, -0.001578f, -0.005701f, -0.000898f, +0.000673f, +0.001933f, -0.000563f, -0.001577f, +0.003277f, - -0.004198f, +0.003195f, -0.001799f, +0.003268f, -0.000664f, +0.000534f, -0.003883f, -0.001019f, +0.001174f, +0.000529f, - +0.000244f, -0.000880f, +0.002077f, +0.000058f, +0.000636f, -0.000814f, +0.000155f, -0.000953f, -0.000702f, +0.001236f, - -0.000532f, -0.000315f, +0.001105f, -0.001311f, -0.000400f, +0.000185f, -0.001210f, +0.001036f, -0.000322f, -0.000681f, - +0.000004f, +0.000645f, +0.000006f, -0.000628f, +0.000436f, +0.000780f, +0.000206f, +0.000175f, -0.000640f, -0.000343f, - +0.000402f, +0.000028f, -0.000105f, +0.000028f, +0.000372f, +0.000056f, -0.000519f, -0.000001f, +0.000297f, -0.000058f, - +0.000181f, -0.000256f, -0.000003f, +0.000102f, +0.000196f, -0.000030f - }, - { - -0.029582f, +0.022097f, -0.000396f, -0.000003f, +0.002748f, +0.004000f, -0.012684f, +0.005169f, -0.000327f, -0.004615f, - +0.003584f, -0.001628f, +0.000432f, -0.020033f, +0.081533f, -0.004452f, +0.005179f, -0.008153f, +0.002716f, +0.000528f, - +0.002006f, +0.002955f, -0.001444f, -0.002175f, +0.002233f, +0.002033f, -0.003070f, +0.007033f, -0.003321f, +0.001388f, - -0.001490f, +0.000685f, +0.004388f, +0.000606f, +0.001002f, -0.000211f, -0.000319f, +0.002337f, +0.002650f, +0.003347f, - +0.000019f, +0.001769f, -0.001969f, +0.001590f, +0.002396f, -0.000916f, -0.001949f, +0.001369f, -0.000018f, -0.001997f, - +0.000669f, -0.002745f, +0.000098f, -0.001608f, +0.000638f, +0.000236f, -0.000813f, +0.002517f, -0.000797f, -0.002279f, - +0.000575f, +0.000729f, +0.000586f, -0.000343f, +0.000159f, -0.000835f, -0.000023f, -0.000486f, +0.000391f, -0.000032f, - -0.000387f, +0.000496f, +0.000018f, +0.000836f, -0.000654f, +0.000000f, -0.000329f, +0.000894f, -0.000571f, +0.000125f, - +0.000347f, +0.000075f, -0.000297f, +0.000119f, +0.000022f, +0.000027f, +0.000225f, -0.000230f, -0.000225f, -0.000283f, - +0.000282f, -0.000067f, +0.000027f, -0.000044f, +0.000196f, -0.000117f - } - }, - { - { - -0.002652f, -0.065558f, -0.011734f, -0.000658f, -0.005829f, -0.001869f, -0.000182f, +0.000527f, +0.005120f, -0.001493f, - -0.004381f, -0.000265f, -0.005697f, -0.003855f, +0.011298f, -0.000088f, +0.009009f, -0.007838f, +0.005609f, +0.000506f, - +0.019178f, -0.003087f, -0.004488f, -0.006450f, +0.001739f, -0.006500f, -0.003696f, -0.000768f, +0.000126f, -0.001883f, - -0.002308f, -0.001684f, +0.001482f, +0.006031f, +0.008475f, +0.003184f, +0.002667f, -0.003985f, -0.002072f, -0.000751f, - -0.000338f, -0.001661f, -0.000943f, +0.001022f, -0.000992f, -0.003483f, -0.002002f, -0.000208f, -0.000152f, -0.001187f, - -0.000404f, +0.000649f, +0.001587f, +0.000186f, -0.000259f, +0.000301f, -0.000069f, +0.000491f, +0.001131f, -0.000753f, - +0.000069f, -0.001051f, -0.000006f, +0.000093f, -0.000248f, -0.000070f, +0.000260f, +0.001110f, +0.000165f, -0.000416f, - -0.000071f, -0.000114f, +0.000518f, -0.000123f, -0.000125f, -0.000244f, -0.000153f, +0.000331f, +0.000364f, -0.000099f, - -0.000060f, -0.000148f, +0.000186f, -0.000148f, -0.000003f, +0.000127f, -0.000176f, -0.000043f, -0.000154f, +0.000008f, - +0.000178f, -0.000119f, +0.000043f, +0.000237f, +0.000188f, +0.000047f - }, - { - +0.004757f, +0.191307f, -0.006897f, -0.004699f, +0.002865f, -0.000330f, +0.002268f, +0.001233f, +0.003877f, +0.001009f, - +0.005018f, -0.001494f, +0.000209f, -0.003782f, +0.004604f, +0.000872f, +0.000627f, -0.002820f, -0.016716f, -0.002985f, - -0.001948f, -0.002145f, +0.000143f, +0.003771f, +0.001486f, -0.002529f, +0.000407f, +0.002949f, -0.000599f, -0.003387f, - -0.001293f, -0.001192f, -0.001468f, +0.000835f, +0.004374f, -0.004066f, -0.000304f, +0.003286f, +0.002955f, +0.001185f, - +0.000751f, +0.002113f, -0.001487f, -0.001235f, -0.001358f, -0.001221f, -0.003465f, +0.000847f, +0.001390f, +0.000667f, - +0.000065f, +0.001790f, -0.001030f, -0.001349f, +0.001084f, -0.000408f, +0.000632f, -0.000386f, +0.000814f, -0.000448f, - -0.000906f, +0.000150f, +0.000357f, -0.000090f, -0.000867f, -0.000975f, -0.000521f, -0.000585f, +0.000010f, -0.000357f, - +0.000231f, -0.000368f, +0.000096f, +0.000232f, -0.000260f, -0.000594f, +0.000030f, -0.000245f, +0.000568f, +0.000113f, - +0.000026f, +0.000044f, +0.000090f, +0.000269f, -0.000087f, +0.000354f, +0.000309f, -0.000386f, -0.000023f, +0.000067f, - +0.000039f, +0.000105f, -0.000089f, -0.000117f, -0.000065f, +0.000062f - }, - { - +0.008422f, -0.030570f, -0.068697f, -0.041163f, -0.010868f, -0.000685f, +0.001510f, +0.000196f, -0.000042f, +0.002684f, - -0.003034f, -0.002699f, -0.003492f, -0.000466f, -0.005825f, +0.003426f, +0.004901f, -0.002338f, -0.002879f, +0.003041f, - -0.002681f, +0.000987f, -0.002465f, +0.002849f, -0.000790f, -0.002560f, +0.001009f, +0.004542f, +0.003464f, -0.002168f, - -0.001679f, -0.002400f, -0.004944f, -0.005254f, -0.003705f, -0.000546f, -0.001896f, +0.004213f, +0.000759f, -0.001178f, - +0.000420f, +0.000802f, -0.000490f, -0.000554f, -0.000520f, +0.000163f, -0.001093f, +0.000808f, +0.001600f, +0.000888f, - -0.001115f, -0.000519f, -0.001735f, +0.000052f, -0.000029f, +0.000584f, +0.000132f, +0.001243f, +0.001150f, -0.000087f, - -0.000470f, -0.001080f, -0.000756f, -0.000244f, +0.000166f, +0.000360f, -0.000769f, -0.000294f, -0.000475f, -0.000556f, - +0.000844f, +0.000059f, +0.000232f, +0.000013f, +0.000276f, +0.000235f, +0.000202f, -0.000331f, +0.000159f, +0.000254f, - -0.000012f, -0.000226f, +0.000051f, +0.000024f, -0.000147f, -0.000213f, -0.000027f, -0.000030f, -0.000051f, -0.000151f, - -0.000140f, -0.000080f, -0.000124f, -0.000054f, +0.000190f, -0.000039f - }, - { - -0.000662f, +0.009136f, +0.003753f, -0.001396f, -0.000478f, -0.000059f, +0.000959f, +0.001644f, -0.001979f, +0.001186f, - +0.002113f, -0.001691f, -0.001635f, -0.004419f, +0.007840f, -0.002912f, -0.003614f, +0.009410f, -0.015589f, -0.001528f, - -0.001215f, -0.000443f, +0.008436f, -0.001697f, +0.002733f, +0.004999f, +0.007290f, +0.004019f, +0.002174f, +0.000375f, - -0.000694f, -0.001013f, -0.001593f, +0.001974f, +0.001042f, -0.001019f, -0.001438f, +0.000832f, +0.000327f, +0.000001f, - -0.000786f, -0.002211f, +0.001528f, +0.000665f, +0.001332f, +0.002938f, +0.000009f, +0.000439f, +0.000025f, -0.000879f, - -0.000741f, -0.000114f, -0.000723f, -0.000386f, -0.000794f, -0.000297f, +0.000816f, +0.000583f, -0.000946f, +0.000293f, - +0.000619f, -0.000533f, -0.000290f, -0.000252f, -0.000480f, +0.000032f, +0.000379f, +0.000283f, +0.000058f, +0.000371f, - +0.000359f, +0.000107f, +0.000943f, -0.000397f, -0.000410f, +0.000221f, +0.000257f, -0.000033f, -0.000220f, -0.000235f, - +0.000012f, -0.000436f, -0.000108f, -0.000099f, -0.000207f, +0.000100f, +0.000086f, -0.000149f, -0.000171f, -0.000237f, - -0.000012f, -0.000014f, -0.000139f, +0.000050f, -0.000004f, +0.000036f - }, - { - -0.051672f, -0.141833f, -0.014933f, -0.013450f, -0.004972f, -0.001994f, -0.005677f, +0.001337f, -0.002480f, +0.001440f, - +0.000626f, +0.003761f, +0.000525f, -0.006116f, -0.012049f, +0.001575f, -0.005767f, -0.027712f, -0.010281f, -0.000224f, - -0.004332f, +0.002329f, -0.002453f, -0.001096f, +0.001373f, -0.002249f, -0.003921f, +0.004041f, +0.001187f, +0.002015f, - +0.004388f, -0.001018f, -0.000074f, -0.000483f, -0.000824f, +0.000080f, -0.003447f, +0.000968f, +0.001715f, -0.000068f, - +0.000484f, -0.000671f, +0.000105f, -0.002270f, -0.001274f, +0.000842f, +0.001235f, -0.000426f, -0.001654f, -0.002732f, - -0.001611f, -0.001363f, +0.000452f, -0.000560f, +0.000054f, -0.000089f, +0.000031f, +0.000466f, -0.001078f, +0.000166f, - -0.000029f, -0.000031f, -0.000177f, -0.000534f, -0.000436f, +0.000081f, -0.000200f, -0.000482f, -0.000211f, -0.000403f, - -0.000446f, -0.000636f, +0.000020f, +0.000075f, -0.000131f, -0.000140f, -0.000002f, -0.000156f, +0.000071f, +0.000040f, - +0.000093f, -0.000060f, +0.000081f, -0.000191f, +0.000207f, +0.000242f, +0.000173f, +0.000155f, -0.000152f, -0.000159f, - -0.000162f, +0.000272f, +0.000121f, +0.000098f, +0.000078f, -0.000092f - }, - { - +0.000492f, +0.004518f, -0.004111f, -0.004243f, -0.000521f, +0.000784f, -0.000164f, +0.000342f, +0.000422f, +0.000272f, - -0.002011f, -0.000638f, -0.003050f, +0.002389f, -0.000485f, -0.000421f, +0.000783f, +0.004959f, -0.001654f, -0.020362f, - -0.014174f, +0.003788f, +0.002919f, +0.001573f, +0.000394f, +0.000849f, +0.010592f, +0.006433f, +0.002710f, +0.001558f, - -0.004395f, -0.001673f, +0.000234f, -0.003328f, -0.003411f, -0.001192f, -0.003037f, -0.001164f, +0.001549f, +0.000067f, - +0.000998f, -0.002274f, +0.001961f, -0.000637f, -0.000191f, +0.000305f, -0.000848f, -0.001025f, +0.001161f, +0.002760f, - +0.001094f, -0.000799f, +0.000818f, -0.001057f, -0.000895f, +0.000152f, -0.001559f, +0.000093f, -0.000797f, -0.001461f, - +0.000442f, -0.000122f, -0.000412f, -0.000514f, +0.000892f, -0.000253f, -0.000294f, -0.000134f, +0.000704f, +0.000171f, - -0.000364f, +0.000023f, -0.000197f, +0.000259f, +0.000152f, -0.000256f, -0.000487f, -0.000087f, -0.000031f, -0.000637f, - +0.000035f, -0.000526f, +0.000218f, -0.000097f, -0.000113f, -0.000024f, -0.000091f, -0.000303f, +0.000072f, +0.000046f, - -0.000074f, +0.000180f, -0.000020f, -0.000424f, -0.000087f, +0.000131f - }, - { - -0.062941f, +0.101190f, +0.042811f, -0.011274f, +0.002850f, -0.000136f, +0.000800f, -0.000164f, -0.000747f, +0.002498f, - -0.002262f, +0.000867f, -0.002919f, -0.002162f, -0.006950f, +0.006362f, +0.002730f, -0.001379f, +0.001813f, +0.001787f, - -0.000024f, -0.001883f, -0.004854f, +0.001478f, -0.000914f, -0.002109f, +0.002082f, +0.001692f, +0.004613f, -0.000456f, - +0.001873f, -0.001491f, -0.003469f, -0.000787f, +0.001547f, -0.000605f, +0.000449f, +0.003900f, +0.001411f, -0.001693f, - -0.001275f, -0.001941f, +0.000823f, +0.000565f, -0.002201f, -0.000309f, +0.001190f, +0.000276f, -0.001576f, +0.000056f, - +0.000627f, +0.000551f, +0.000497f, -0.000685f, +0.000653f, -0.002076f, -0.000517f, +0.000401f, -0.000441f, -0.000391f, - +0.000393f, +0.000590f, -0.000570f, -0.000316f, -0.000046f, -0.000693f, -0.000233f, -0.000673f, -0.000514f, -0.000181f, - -0.000247f, +0.000046f, -0.000160f, -0.000534f, +0.000145f, +0.000242f, +0.000388f, -0.000085f, +0.000059f, -0.000248f, - +0.000051f, +0.000580f, +0.000268f, +0.000028f, +0.000124f, +0.000249f, +0.000053f, -0.000256f, +0.000070f, +0.000106f, - +0.000008f, +0.000043f, +0.000171f, +0.000080f, +0.000215f, +0.000306f - }, - { - +0.001057f, +0.012164f, -0.003599f, -0.001023f, +0.000428f, +0.000846f, +0.001102f, -0.001021f, -0.000099f, -0.000131f, - -0.001275f, +0.000833f, +0.002185f, -0.002521f, -0.009958f, -0.009328f, -0.009235f, +0.006489f, -0.008814f, +0.008319f, - +0.010749f, +0.008054f, +0.002646f, +0.001303f, -0.002535f, -0.012859f, -0.011013f, +0.007903f, -0.002734f, -0.005704f, - -0.001505f, +0.001167f, +0.003898f, +0.001643f, -0.000762f, -0.001185f, -0.000944f, +0.001220f, +0.000269f, +0.002647f, - +0.000186f, -0.000352f, -0.002143f, +0.000018f, -0.000407f, -0.000059f, -0.000343f, -0.001149f, +0.001579f, +0.001333f, - -0.000388f, -0.000730f, +0.001065f, -0.000267f, -0.001217f, -0.000541f, -0.000084f, +0.000408f, +0.001172f, +0.000724f, - +0.000044f, -0.000092f, -0.000448f, -0.000456f, -0.000045f, +0.000495f, -0.000041f, -0.000335f, -0.001006f, -0.000699f, - +0.000272f, +0.000261f, +0.000021f, -0.000412f, -0.000045f, -0.000176f, -0.000106f, +0.000321f, +0.000133f, +0.000032f, - -0.000424f, +0.000228f, +0.000476f, +0.000322f, +0.000156f, -0.000360f, +0.000137f, -0.000138f, -0.000173f, +0.000164f, - -0.000254f, -0.000051f, -0.000054f, -0.000084f, +0.000163f, +0.000134f - }, - { - -0.017843f, -0.277277f, -0.029246f, +0.007513f, +0.002543f, +0.002504f, +0.002716f, +0.002594f, +0.000834f, -0.001892f, - +0.001372f, +0.003337f, +0.001582f, +0.000151f, -0.006302f, +0.000213f, -0.000111f, -0.005050f, -0.001431f, +0.004107f, - +0.000006f, -0.001372f, +0.001448f, +0.001837f, +0.003597f, +0.003266f, +0.000144f, +0.001262f, -0.001422f, -0.000233f, - +0.001150f, +0.002001f, +0.000775f, +0.001899f, -0.000797f, -0.001397f, -0.001214f, +0.001614f, -0.002241f, -0.003786f, - -0.008492f, -0.001747f, +0.002329f, +0.000616f, -0.001400f, -0.000739f, +0.000402f, +0.000572f, -0.001992f, -0.001186f, - -0.000848f, -0.000158f, +0.001384f, +0.000368f, +0.000529f, +0.000234f, -0.000648f, -0.000356f, -0.000213f, +0.000551f, - -0.000990f, -0.000637f, -0.000162f, +0.000402f, +0.000392f, +0.000205f, -0.000433f, -0.000381f, +0.000361f, +0.000063f, - +0.000222f, -0.000372f, -0.000057f, -0.000135f, +0.000018f, +0.000040f, +0.000725f, +0.000160f, +0.000354f, -0.000234f, - -0.000289f, +0.000033f, -0.000128f, +0.000069f, -0.000194f, -0.000157f, -0.000335f, -0.000288f, -0.000141f, -0.000265f, - +0.000003f, +0.000099f, +0.000094f, +0.000020f, -0.000269f, +0.000087f - }, - { - -0.000242f, +0.016097f, +0.000181f, +0.002446f, +0.000548f, -0.000669f, -0.011530f, -0.002241f, +0.000838f, +0.002221f, - +0.001750f, +0.001125f, +0.002358f, -0.000308f, +0.001235f, -0.001189f, -0.003218f, -0.005485f, -0.007430f, -0.007477f, - +0.004092f, -0.004380f, -0.001627f, -0.004924f, +0.003659f, +0.001700f, +0.001391f, -0.006828f, -0.000128f, -0.003388f, - -0.000785f, +0.003727f, +0.000825f, +0.000958f, +0.001047f, +0.002499f, +0.000836f, -0.000817f, -0.001133f, +0.000079f, - +0.001042f, -0.001895f, +0.000777f, +0.000680f, -0.000076f, -0.000799f, -0.001139f, -0.000104f, -0.001860f, -0.000007f, - -0.000547f, +0.000095f, +0.000080f, -0.000033f, +0.000414f, +0.000470f, -0.000520f, -0.000066f, -0.000070f, +0.000121f, - -0.000981f, +0.000002f, +0.000485f, +0.000908f, +0.000045f, -0.000117f, -0.000095f, -0.000529f, -0.000490f, -0.000353f, - +0.000164f, -0.000117f, -0.000213f, -0.000002f, +0.000197f, +0.000300f, +0.000122f, +0.000195f, -0.000228f, +0.000295f, - -0.000006f, +0.000126f, +0.000178f, +0.000106f, -0.000139f, -0.000029f, +0.000348f, +0.000300f, +0.000158f, +0.000046f, - -0.000072f, +0.000238f, +0.000067f, +0.000197f, -0.000012f, -0.000006f - }, - { - +0.004101f, -0.112845f, +0.002408f, +0.001477f, -0.000269f, -0.006105f, -0.005956f, -0.005285f, +0.003003f, -0.002990f, - -0.001074f, -0.002030f, +0.001634f, -0.003112f, +0.005024f, -0.000618f, +0.005337f, -0.000938f, +0.000894f, +0.000541f, - +0.006061f, +0.001092f, -0.000870f, +0.000712f, -0.000527f, -0.001029f, +0.000385f, -0.003350f, +0.005860f, +0.000257f, - -0.003906f, -0.001053f, -0.000604f, +0.001574f, +0.001859f, +0.001432f, +0.003132f, -0.001168f, -0.002092f, -0.000677f, - +0.001384f, +0.000576f, +0.001197f, +0.001455f, +0.000994f, -0.000806f, -0.001817f, +0.000446f, -0.000073f, +0.000417f, - -0.000343f, +0.000657f, +0.000605f, +0.000038f, -0.000553f, +0.000707f, -0.001062f, -0.000400f, -0.000165f, +0.000597f, - +0.001578f, +0.001168f, +0.000053f, +0.001259f, +0.000212f, +0.000078f, +0.000397f, -0.000205f, +0.000174f, -0.000169f, - -0.000013f, +0.000219f, -0.000051f, +0.000231f, -0.000070f, +0.000043f, -0.000623f, -0.000358f, -0.000021f, +0.000093f, - -0.000066f, -0.000035f, -0.000025f, +0.000145f, -0.000021f, -0.000175f, -0.000194f, -0.000243f, -0.000330f, +0.000110f, - -0.000026f, -0.000168f, +0.000014f, +0.000055f, -0.000022f, -0.000016f - }, - { - -0.001324f, -0.001771f, +0.004698f, -0.000106f, +0.001052f, +0.000638f, +0.000121f, +0.000761f, -0.000070f, +0.000399f, - -0.001423f, +0.000910f, +0.002843f, +0.025638f, +0.005683f, -0.006114f, -0.003127f, +0.001241f, -0.000209f, -0.002964f, - -0.001946f, -0.000083f, -0.001492f, -0.010171f, -0.009860f, -0.001550f, -0.006162f, -0.000806f, +0.002442f, +0.001658f, - +0.001041f, +0.000684f, -0.001050f, -0.001341f, -0.000896f, -0.001252f, +0.002552f, +0.000388f, +0.000394f, -0.001561f, - -0.001188f, +0.000166f, +0.001019f, +0.000610f, +0.000871f, +0.000500f, -0.000914f, +0.000334f, -0.001167f, -0.002563f, - -0.000457f, -0.000637f, +0.000583f, -0.000712f, +0.000181f, -0.000442f, +0.000714f, -0.000029f, +0.000316f, +0.000380f, - +0.000073f, -0.000420f, +0.000308f, -0.000023f, -0.000119f, +0.000117f, -0.000440f, -0.000348f, -0.000939f, -0.000095f, - -0.000102f, +0.000042f, +0.000143f, +0.000189f, +0.000044f, -0.000078f, -0.000316f, -0.000172f, -0.000107f, -0.000177f, - -0.000114f, -0.000233f, +0.000318f, +0.000231f, +0.000021f, -0.000060f, -0.000264f, +0.000173f, +0.000127f, -0.000175f, - -0.000071f, +0.000052f, +0.000011f, +0.000069f, +0.000077f, +0.000014f - }, - { - +0.002845f, -0.065287f, -0.023732f, -0.022200f, -0.007847f, -0.012297f, -0.005305f, +0.002231f, +0.001676f, -0.004084f, - +0.003220f, -0.005178f, -0.008444f, -0.026691f, -0.001722f, +0.008115f, +0.002558f, -0.001833f, +0.000496f, -0.002087f, - -0.001124f, -0.001564f, -0.000621f, +0.000446f, -0.003574f, -0.001857f, -0.002666f, +0.002127f, -0.002923f, -0.005029f, - -0.002723f, -0.001201f, -0.003063f, -0.000769f, +0.000048f, +0.003077f, -0.000462f, -0.000849f, -0.000590f, +0.001314f, - +0.002898f, +0.000640f, +0.001085f, +0.002409f, +0.000758f, -0.000693f, -0.000296f, -0.000123f, +0.001392f, -0.000793f, - +0.001655f, -0.002256f, -0.001859f, +0.000126f, +0.000975f, +0.002073f, -0.000983f, -0.000704f, -0.000882f, +0.000979f, - +0.000109f, +0.000137f, -0.000215f, +0.000303f, -0.000631f, -0.000244f, -0.000485f, +0.000096f, -0.000342f, -0.000197f, - +0.000077f, -0.000022f, +0.000159f, -0.000348f, -0.000058f, +0.000233f, -0.000072f, -0.000286f, -0.000230f, +0.000263f, - -0.000406f, +0.000138f, +0.000329f, +0.000059f, -0.000215f, -0.000100f, +0.000144f, +0.000033f, +0.000301f, -0.000060f, - +0.000247f, -0.000008f, -0.000205f, -0.000376f, -0.000296f, -0.000151f - }, - { - -0.000391f, +0.001723f, -0.003340f, -0.000620f, -0.002276f, +0.001882f, +0.000054f, +0.000399f, +0.003838f, +0.000976f, - +0.006455f, +0.001677f, +0.000429f, -0.019253f, -0.061641f, +0.009162f, -0.001269f, +0.000775f, +0.000631f, -0.004857f, - -0.008357f, -0.003566f, +0.003318f, -0.001451f, +0.001086f, -0.001323f, -0.006074f, -0.003014f, +0.000594f, -0.002089f, - -0.001062f, +0.002454f, -0.001349f, -0.002718f, -0.001262f, -0.000243f, +0.002450f, -0.001563f, +0.001313f, +0.001577f, - +0.000464f, -0.001344f, +0.000014f, +0.001118f, +0.000843f, -0.001039f, -0.000637f, -0.000385f, +0.000079f, +0.000542f, - -0.000500f, -0.000121f, +0.000693f, +0.000439f, +0.001167f, -0.000460f, -0.001103f, -0.000139f, -0.000351f, +0.000538f, - -0.000680f, -0.000086f, -0.000017f, -0.000523f, -0.000262f, -0.000098f, +0.000219f, +0.000057f, -0.000176f, -0.000725f, - -0.000027f, +0.000580f, +0.000050f, -0.000149f, +0.000149f, +0.000564f, +0.000452f, +0.000260f, -0.000367f, -0.000268f, - -0.000118f, -0.000175f, -0.000090f, +0.000094f, +0.000163f, +0.000327f, -0.000024f, -0.000107f, +0.000050f, +0.000117f, - -0.000074f, -0.000311f, +0.000038f, +0.000160f, +0.000058f, +0.000007f - }, - { - +0.018019f, -0.026436f, -0.003664f, -0.009753f, -0.003034f, -0.003891f, -0.000290f, +0.003138f, +0.000859f, -0.004236f, - -0.002231f, -0.000733f, -0.001856f, +0.017317f, +0.019255f, +0.002154f, +0.002799f, +0.003480f, -0.001076f, -0.001726f, - +0.002644f, +0.002315f, +0.001849f, -0.004137f, +0.001458f, +0.002082f, +0.000342f, +0.001027f, +0.000808f, +0.001278f, - -0.001691f, -0.001056f, +0.004360f, +0.002134f, +0.001358f, -0.000134f, +0.002067f, +0.001066f, +0.001320f, +0.004152f, - -0.002664f, +0.000277f, +0.000126f, +0.000814f, +0.001185f, -0.000098f, -0.000078f, +0.000029f, +0.000208f, -0.001865f, - +0.000064f, -0.001751f, -0.001901f, -0.000320f, +0.000198f, -0.000724f, +0.000001f, +0.000922f, +0.000196f, -0.000539f, - +0.000007f, +0.000530f, +0.000483f, -0.000276f, -0.000189f, +0.000134f, -0.000002f, -0.000789f, +0.000054f, +0.000312f, - -0.000468f, +0.000847f, -0.000044f, -0.000046f, -0.000162f, -0.000472f, -0.000094f, +0.000702f, -0.000163f, -0.000055f, - +0.000436f, +0.000144f, -0.000303f, -0.000000f, -0.000127f, +0.000070f, -0.000043f, -0.000318f, -0.000356f, -0.000025f, - +0.000173f, +0.000149f, +0.000159f, -0.000018f, -0.000038f, +0.000073f - } - }, - { - { - +0.003839f, -0.065261f, -0.001397f, +0.010974f, -0.003229f, +0.000505f, +0.001134f, -0.001269f, +0.001977f, -0.001223f, - +0.000545f, -0.000098f, +0.000562f, +0.002084f, +0.003528f, -0.005820f, +0.006537f, -0.006117f, +0.010682f, +0.002922f, - +0.013852f, -0.005521f, +0.000696f, -0.000481f, +0.002726f, -0.004085f, -0.000794f, +0.001397f, -0.000613f, -0.001334f, - +0.000997f, -0.004158f, +0.002385f, +0.003358f, +0.005295f, +0.000239f, -0.001428f, -0.002340f, +0.000573f, +0.000057f, - +0.000826f, -0.000593f, +0.000173f, +0.000126f, +0.000171f, -0.001296f, +0.000106f, +0.000609f, -0.000090f, -0.000447f, - +0.000303f, +0.000744f, +0.001355f, -0.000750f, -0.000878f, +0.000189f, -0.000278f, +0.000425f, +0.000414f, -0.000667f, - +0.000761f, -0.000498f, -0.000004f, -0.000081f, -0.000136f, +0.000015f, +0.000178f, +0.000516f, -0.000251f, +0.000089f, - -0.000052f, -0.000320f, +0.000250f, -0.000305f, -0.000030f, +0.000120f, -0.000049f, +0.000276f, +0.000073f, -0.000153f, - +0.000006f, -0.000253f, -0.000053f, +0.000041f, +0.000002f, +0.000030f, -0.000176f, -0.000034f, -0.000138f, +0.000085f, - -0.000100f, -0.000032f, -0.000085f, -0.000000f, +0.000056f, +0.000062f - }, - { - -0.004169f, +0.146469f, -0.019017f, -0.005048f, -0.004639f, -0.001332f, +0.001947f, -0.001046f, +0.000563f, -0.004164f, - +0.001697f, +0.001205f, +0.001766f, -0.001864f, +0.001274f, -0.002257f, +0.000219f, +0.005397f, -0.005972f, -0.000593f, - +0.001808f, +0.000014f, -0.000018f, +0.003355f, +0.001016f, -0.000280f, -0.000568f, +0.000229f, -0.000109f, -0.002298f, - +0.000806f, -0.000483f, -0.001372f, -0.000629f, +0.002336f, -0.005214f, -0.000047f, +0.000618f, +0.000334f, +0.000842f, - -0.000835f, +0.002051f, +0.001458f, +0.000870f, -0.000838f, +0.000485f, -0.002034f, +0.001303f, +0.000076f, +0.000036f, - -0.000818f, -0.000131f, -0.001075f, -0.000245f, +0.001373f, -0.000582f, +0.000115f, -0.000333f, +0.000327f, -0.000471f, - +0.000175f, +0.000240f, -0.000175f, +0.000098f, +0.000093f, -0.000235f, +0.000491f, -0.000368f, -0.000010f, -0.000007f, - +0.000654f, -0.000038f, -0.000026f, +0.000119f, +0.000220f, -0.000594f, +0.000104f, +0.000091f, +0.000125f, -0.000258f, - +0.000085f, +0.000193f, -0.000168f, -0.000180f, -0.000150f, +0.000501f, +0.000086f, -0.000193f, +0.000095f, +0.000131f, - +0.000058f, +0.000055f, -0.000115f, -0.000010f, -0.000111f, +0.000088f - }, - { - -0.013682f, +0.048836f, +0.012006f, -0.019695f, +0.006377f, +0.000656f, -0.000657f, -0.000873f, -0.000935f, +0.003498f, - -0.002164f, +0.001073f, +0.004653f, +0.001490f, -0.003854f, +0.001131f, +0.004111f, +0.001312f, +0.000370f, +0.001046f, - -0.003053f, +0.002683f, -0.003995f, +0.001087f, -0.000443f, -0.002960f, +0.001291f, -0.000062f, +0.000441f, +0.000228f, - +0.003450f, +0.000978f, +0.000107f, +0.000639f, +0.000343f, +0.001329f, +0.000205f, +0.003296f, -0.000126f, -0.000040f, - +0.000379f, +0.001023f, +0.000400f, -0.000524f, +0.000209f, +0.000587f, +0.000158f, +0.000411f, +0.000282f, +0.000734f, - +0.000155f, +0.000249f, -0.000589f, +0.000619f, -0.000023f, +0.000250f, -0.001052f, -0.000184f, +0.000302f, +0.000102f, - -0.000345f, -0.000849f, -0.000272f, +0.000539f, +0.000181f, +0.000379f, -0.000778f, +0.000160f, +0.000022f, -0.000445f, - +0.000236f, -0.000326f, +0.000227f, +0.000004f, +0.000031f, -0.000059f, +0.000323f, -0.000176f, +0.000063f, -0.000049f, - +0.000022f, -0.000218f, -0.000199f, -0.000028f, +0.000015f, -0.000230f, +0.000104f, +0.000119f, +0.000031f, -0.000004f, - -0.000192f, -0.000044f, -0.000072f, +0.000046f, +0.000100f, -0.000120f - }, - { - +0.001069f, +0.005479f, -0.000317f, -0.001837f, -0.000159f, -0.000072f, +0.000067f, +0.000399f, -0.001923f, +0.000829f, - +0.001455f, +0.000261f, +0.001614f, -0.005966f, +0.001005f, -0.000947f, +0.001677f, +0.004962f, -0.009276f, +0.004145f, - -0.001605f, -0.002916f, +0.007253f, +0.000354f, +0.002739f, +0.001128f, +0.002627f, -0.000655f, +0.000595f, -0.002531f, - -0.001399f, +0.001063f, +0.000257f, +0.000646f, +0.000934f, -0.000962f, +0.000871f, +0.000629f, -0.000811f, -0.000650f, - -0.000510f, -0.000689f, +0.001335f, -0.000436f, -0.000682f, +0.000494f, -0.000826f, -0.000004f, +0.000032f, -0.000465f, - -0.000409f, -0.000094f, -0.000463f, -0.000085f, -0.000409f, +0.000389f, +0.000335f, -0.000271f, -0.000100f, +0.000002f, - +0.000058f, -0.000302f, +0.000064f, +0.000191f, -0.000129f, -0.000038f, +0.000077f, -0.000046f, +0.000034f, -0.000040f, - +0.000230f, -0.000115f, +0.000697f, -0.000307f, +0.000024f, -0.000035f, -0.000104f, -0.000065f, +0.000027f, -0.000276f, - +0.000165f, -0.000261f, +0.000119f, -0.000155f, -0.000116f, +0.000161f, +0.000038f, -0.000131f, -0.000062f, +0.000037f, - +0.000031f, -0.000040f, -0.000085f, +0.000086f, -0.000060f, -0.000025f - }, - { - +0.037846f, -0.006540f, -0.008373f, -0.006370f, +0.000845f, +0.001657f, -0.000166f, +0.002310f, -0.001050f, +0.000613f, - -0.006545f, +0.003817f, -0.000487f, -0.003832f, -0.003334f, +0.006412f, -0.000633f, -0.014458f, -0.006114f, +0.005011f, - -0.000226f, +0.000903f, -0.000340f, +0.001694f, +0.001695f, +0.002358f, -0.000205f, +0.003290f, -0.001872f, -0.000767f, - +0.001197f, -0.000779f, +0.002391f, +0.002324f, -0.001448f, -0.000368f, +0.000329f, -0.000602f, +0.000072f, -0.000407f, - +0.000275f, -0.000309f, -0.000148f, +0.000231f, +0.000442f, -0.000296f, +0.000793f, -0.000582f, -0.000602f, +0.000754f, - -0.000192f, -0.001695f, +0.001688f, +0.001101f, -0.000417f, -0.000437f, +0.000469f, +0.000981f, -0.000818f, +0.000231f, - +0.000189f, +0.000168f, -0.000314f, -0.000291f, -0.000036f, -0.000114f, -0.000241f, +0.000230f, -0.000057f, -0.000111f, - +0.000073f, +0.000032f, +0.000225f, -0.000124f, +0.000009f, +0.000059f, +0.000105f, +0.000163f, +0.000005f, -0.000064f, - -0.000034f, -0.000216f, -0.000019f, +0.000090f, +0.000073f, +0.000020f, +0.000144f, +0.000094f, +0.000164f, +0.000036f, - -0.000143f, +0.000081f, -0.000040f, +0.000031f, -0.000042f, -0.000088f - }, - { - +0.000245f, +0.004007f, +0.001995f, -0.001270f, -0.000181f, +0.000424f, -0.000804f, -0.000383f, -0.000898f, +0.001020f, - -0.000532f, +0.000061f, -0.000903f, +0.005530f, -0.002502f, +0.003900f, +0.002643f, +0.004087f, -0.005500f, -0.009557f, - -0.000300f, +0.001210f, -0.002683f, +0.000164f, +0.002182f, -0.004044f, +0.004561f, -0.004301f, -0.002100f, +0.000077f, - -0.001024f, -0.001109f, +0.001255f, +0.001222f, -0.001120f, +0.000863f, -0.001474f, -0.001688f, +0.000458f, -0.000304f, - +0.000459f, -0.001585f, +0.001532f, -0.000745f, +0.000753f, +0.000792f, -0.000773f, -0.000881f, -0.000329f, +0.000929f, - +0.000068f, -0.000657f, +0.000357f, -0.000508f, -0.000529f, +0.001155f, -0.000974f, +0.000124f, -0.000084f, -0.000775f, - +0.000503f, -0.000740f, +0.000472f, -0.000107f, +0.000500f, -0.000144f, +0.000052f, +0.000016f, +0.000314f, +0.000254f, - -0.000166f, +0.000166f, -0.000265f, -0.000010f, -0.000396f, -0.000092f, -0.000023f, -0.000139f, +0.000275f, -0.000362f, - +0.000044f, -0.000113f, +0.000247f, +0.000001f, -0.000038f, +0.000060f, +0.000293f, -0.000111f, +0.000057f, -0.000051f, - -0.000083f, +0.000054f, -0.000012f, -0.000091f, -0.000010f, +0.000067f - }, - { - +0.027632f, +0.141924f, -0.006869f, -0.004110f, +0.001276f, -0.000949f, -0.000060f, +0.000953f, -0.000318f, +0.001271f, - -0.001923f, +0.000593f, -0.002157f, +0.001985f, -0.002886f, +0.002316f, -0.001060f, -0.000498f, +0.001368f, +0.000505f, - -0.000221f, -0.000804f, -0.001623f, +0.001476f, -0.000099f, -0.000200f, -0.000137f, -0.001396f, +0.000600f, -0.000951f, - +0.000827f, -0.002469f, +0.000708f, +0.000859f, +0.001011f, -0.001710f, -0.001656f, +0.000880f, +0.000147f, -0.001153f, - -0.001059f, +0.001086f, +0.001668f, -0.000887f, -0.000427f, +0.000054f, +0.000013f, +0.000506f, +0.000249f, +0.000452f, - +0.000415f, -0.000633f, +0.000292f, +0.000286f, -0.000084f, -0.000697f, +0.000333f, -0.000023f, -0.000084f, -0.000394f, - -0.000498f, +0.000308f, -0.000354f, -0.000179f, +0.000184f, -0.000425f, +0.000205f, -0.000069f, +0.000168f, +0.000089f, - -0.000133f, +0.000080f, -0.000085f, -0.000291f, +0.000064f, -0.000168f, -0.000009f, -0.000035f, +0.000129f, -0.000001f, - +0.000193f, +0.000067f, -0.000063f, -0.000097f, +0.000217f, -0.000220f, -0.000105f, +0.000019f, +0.000193f, +0.000091f, - -0.000145f, +0.000026f, +0.000036f, +0.000049f, +0.000056f, +0.000104f - }, - { - -0.000818f, +0.000326f, -0.002478f, +0.001545f, +0.000003f, +0.000465f, +0.000588f, -0.000849f, +0.000597f, +0.000032f, - -0.000990f, -0.001307f, -0.000467f, +0.000513f, -0.003504f, -0.002989f, -0.006222f, +0.007001f, -0.001592f, +0.003532f, - +0.002756f, -0.000872f, +0.003400f, +0.003197f, +0.001603f, +0.002135f, -0.003942f, +0.009141f, -0.001430f, +0.001320f, - +0.001707f, -0.001123f, +0.000022f, +0.001627f, -0.001198f, +0.001999f, -0.000527f, +0.000577f, -0.001408f, +0.000992f, - -0.000365f, +0.000412f, -0.000744f, +0.000301f, +0.000508f, -0.000629f, -0.000103f, +0.000175f, +0.000654f, -0.000280f, - +0.000107f, -0.000614f, +0.000526f, -0.000703f, +0.000352f, +0.000302f, -0.000507f, -0.000044f, +0.000348f, -0.000122f, - -0.000405f, -0.000248f, +0.000205f, +0.000492f, +0.000001f, +0.000120f, -0.000526f, +0.000238f, +0.000082f, +0.000289f, - +0.000028f, -0.000225f, -0.000109f, -0.000371f, +0.000069f, +0.000285f, -0.000314f, +0.000091f, -0.000077f, +0.000064f, - -0.000214f, +0.000014f, +0.000077f, -0.000069f, +0.000057f, -0.000234f, +0.000095f, -0.000047f, -0.000128f, +0.000002f, - -0.000080f, -0.000042f, +0.000050f, -0.000012f, +0.000063f, +0.000110f - }, - { - +0.027157f, -0.158117f, +0.001380f, +0.000063f, -0.003632f, -0.000401f, -0.001325f, +0.000830f, -0.001525f, -0.002826f, - +0.000587f, +0.003139f, +0.000019f, +0.002991f, +0.001051f, -0.000166f, +0.004952f, +0.000802f, -0.001998f, +0.000791f, - -0.001436f, -0.001691f, +0.001507f, +0.001267f, +0.000477f, +0.001186f, -0.000722f, +0.001830f, +0.000265f, +0.001610f, - -0.001473f, +0.000846f, +0.000979f, -0.000480f, -0.001799f, -0.001017f, -0.002012f, +0.002594f, +0.000844f, -0.000687f, - -0.002231f, +0.003120f, +0.000513f, -0.000659f, +0.000036f, +0.000927f, +0.001225f, +0.000532f, -0.001393f, +0.000130f, - +0.000536f, +0.000657f, +0.001029f, -0.000525f, +0.000699f, +0.000374f, -0.000266f, +0.000316f, +0.000727f, +0.000947f, - -0.000649f, -0.000021f, -0.000163f, +0.000067f, +0.000147f, +0.000021f, -0.000009f, +0.000101f, -0.000003f, +0.000134f, - +0.000632f, +0.000157f, -0.000236f, -0.000323f, +0.000052f, +0.000271f, +0.000131f, -0.000229f, +0.000073f, +0.000106f, - -0.000175f, +0.000024f, -0.000097f, +0.000097f, -0.000071f, +0.000236f, -0.000080f, -0.000103f, -0.000017f, -0.000033f, - +0.000141f, +0.000006f, +0.000024f, +0.000009f, -0.000066f, -0.000012f - }, - { - +0.001020f, +0.003254f, -0.008058f, -0.002846f, -0.004291f, +0.000517f, -0.003582f, -0.000413f, -0.000880f, +0.002395f, - +0.001816f, +0.000338f, -0.000630f, -0.004763f, +0.003451f, -0.001647f, -0.002765f, -0.002001f, -0.004718f, -0.005013f, - +0.006531f, -0.004446f, -0.001369f, -0.003906f, +0.002510f, -0.000950f, +0.001943f, -0.003503f, +0.002092f, -0.001647f, - -0.000855f, -0.001203f, -0.000671f, -0.001257f, +0.000457f, +0.000701f, -0.002280f, +0.000378f, -0.000076f, -0.001608f, - +0.000543f, -0.000103f, +0.000826f, -0.000207f, -0.000821f, -0.000981f, -0.000480f, +0.000692f, -0.002277f, -0.000517f, - -0.000662f, +0.000513f, +0.000361f, +0.000571f, +0.000982f, +0.000872f, -0.000470f, -0.000177f, -0.000227f, +0.000362f, - -0.000246f, +0.000055f, -0.000060f, +0.000374f, +0.000188f, +0.000034f, -0.000262f, -0.000237f, +0.000181f, +0.000330f, - -0.000004f, +0.000109f, +0.000185f, -0.000152f, +0.000047f, -0.000028f, +0.000007f, +0.000117f, -0.000051f, +0.000321f, - -0.000056f, +0.000093f, -0.000093f, +0.000164f, -0.000074f, -0.000087f, +0.000090f, -0.000010f, -0.000005f, -0.000179f, - -0.000074f, -0.000056f, -0.000110f, +0.000106f, -0.000094f, -0.000056f - }, - { - -0.002072f, -0.091008f, +0.002892f, -0.004628f, +0.002823f, -0.000017f, +0.013349f, -0.001578f, +0.002303f, -0.005028f, - +0.000986f, -0.002238f, -0.000565f, -0.002457f, +0.003420f, +0.000438f, +0.000057f, -0.006502f, +0.000293f, -0.000234f, - +0.003494f, -0.001193f, -0.000674f, +0.000579f, -0.000006f, +0.000214f, +0.001707f, -0.003853f, +0.003205f, -0.000354f, - -0.000313f, +0.003450f, +0.000971f, +0.000193f, -0.000774f, +0.000375f, +0.000635f, -0.000736f, +0.001727f, -0.001077f, - +0.000277f, +0.000215f, +0.000900f, +0.001606f, +0.001638f, +0.000985f, -0.000734f, +0.000618f, -0.000234f, +0.000285f, - -0.000544f, +0.000341f, +0.000562f, +0.000353f, -0.000917f, +0.000723f, -0.000256f, -0.000066f, -0.000074f, +0.000119f, - +0.000308f, +0.000146f, -0.000807f, +0.000389f, -0.000399f, -0.000008f, +0.000331f, -0.000019f, +0.000030f, -0.000234f, - -0.000151f, +0.000049f, +0.000069f, -0.000037f, -0.000194f, +0.000094f, -0.000281f, +0.000178f, -0.000119f, +0.000068f, - -0.000033f, +0.000040f, +0.000146f, -0.000036f, -0.000036f, -0.000204f, -0.000017f, -0.000094f, -0.000107f, +0.000205f, - +0.000009f, -0.000010f, +0.000047f, +0.000045f, -0.000079f, +0.000047f - }, - { - +0.001396f, -0.006326f, -0.000455f, +0.003551f, +0.000308f, +0.000098f, +0.001600f, +0.000812f, +0.000395f, -0.000040f, - -0.002840f, -0.001009f, -0.009667f, +0.006910f, +0.007048f, -0.000828f, +0.000198f, -0.000960f, +0.001653f, -0.000343f, - -0.002206f, -0.001014f, -0.000668f, -0.000789f, -0.002519f, +0.000662f, +0.001099f, +0.002432f, +0.003281f, -0.000152f, - +0.001945f, +0.001523f, +0.001763f, -0.001465f, -0.000315f, -0.001837f, +0.000512f, -0.001811f, +0.000518f, -0.000465f, - +0.000484f, -0.000248f, -0.000366f, +0.000271f, -0.000270f, +0.000071f, +0.000576f, +0.000618f, +0.000211f, +0.000069f, - +0.000655f, -0.000243f, -0.000042f, -0.001069f, +0.000270f, -0.000354f, +0.000709f, +0.000241f, +0.000531f, +0.000024f, - -0.000391f, +0.000359f, +0.000170f, +0.000035f, -0.000312f, +0.000140f, -0.000043f, -0.000038f, -0.000072f, +0.000157f, - +0.000034f, +0.000188f, +0.000117f, -0.000114f, +0.000014f, +0.000163f, -0.000167f, +0.000136f, -0.000068f, -0.000143f, - -0.000084f, -0.000237f, +0.000206f, +0.000078f, -0.000014f, +0.000181f, -0.000056f, +0.000179f, -0.000015f, -0.000191f, - -0.000002f, -0.000044f, -0.000037f, +0.000144f, -0.000012f, -0.000030f - }, - { - +0.005058f, -0.033415f, +0.011270f, -0.002712f, -0.000549f, -0.004645f, -0.000126f, +0.002076f, +0.001849f, -0.006186f, - +0.002058f, -0.000169f, +0.007449f, -0.001332f, -0.001547f, +0.002325f, +0.002244f, -0.001255f, +0.002501f, -0.001645f, - +0.002375f, -0.000063f, +0.000732f, +0.002123f, -0.001993f, -0.002178f, +0.000084f, +0.003029f, -0.002168f, -0.001456f, - -0.002622f, +0.000970f, -0.001308f, -0.001837f, -0.001272f, +0.002193f, +0.000189f, -0.001151f, -0.001314f, -0.000652f, - +0.002454f, +0.001624f, -0.001551f, -0.000582f, -0.000030f, -0.000048f, -0.000680f, +0.000246f, +0.000834f, -0.000249f, - +0.001011f, -0.001165f, +0.000138f, -0.000224f, +0.000078f, +0.000299f, +0.000037f, +0.000922f, +0.000155f, +0.000632f, - -0.000057f, +0.000133f, -0.000596f, -0.000299f, -0.000019f, -0.000133f, -0.000435f, +0.000579f, -0.000369f, -0.000108f, - +0.000428f, -0.000060f, -0.000084f, -0.000454f, -0.000040f, +0.000196f, +0.000252f, -0.000139f, -0.000110f, +0.000147f, - -0.000045f, +0.000197f, -0.000055f, -0.000074f, -0.000111f, +0.000173f, +0.000138f, -0.000192f, +0.000095f, -0.000127f, - +0.000052f, -0.000088f, -0.000121f, -0.000058f, -0.000078f, +0.000019f - }, - { - +0.000248f, +0.002328f, -0.004935f, +0.000670f, -0.000652f, +0.001099f, +0.000214f, -0.000499f, +0.002372f, -0.000129f, - +0.003261f, -0.000986f, -0.003459f, +0.026860f, +0.009168f, +0.004359f, -0.010263f, -0.000238f, +0.000397f, -0.001097f, - -0.006501f, -0.000782f, +0.001972f, -0.001199f, +0.000910f, -0.000724f, -0.000072f, +0.001165f, +0.004981f, +0.000064f, - -0.001450f, +0.001120f, -0.001093f, -0.001092f, +0.000786f, +0.000246f, +0.002186f, -0.002356f, +0.000855f, +0.000832f, - +0.000413f, -0.000756f, +0.000631f, -0.000129f, +0.000401f, +0.000775f, +0.000804f, +0.000374f, -0.000207f, +0.000570f, - -0.000440f, +0.000111f, -0.000054f, +0.000322f, +0.001451f, -0.000425f, -0.000744f, +0.000381f, -0.000519f, +0.000590f, - -0.001124f, -0.000225f, -0.000092f, +0.000004f, +0.000124f, +0.000276f, +0.000411f, -0.000176f, -0.000002f, -0.000182f, - +0.000058f, +0.000150f, +0.000119f, +0.000092f, -0.000387f, -0.000034f, +0.000568f, +0.000101f, +0.000143f, +0.000043f, - -0.000261f, -0.000001f, -0.000123f, +0.000021f, +0.000049f, +0.000189f, -0.000021f, -0.000189f, +0.000107f, -0.000005f, - -0.000121f, -0.000182f, +0.000157f, +0.000049f, -0.000085f, +0.000007f - }, - { - -0.004649f, -0.047338f, +0.006990f, -0.005321f, -0.004887f, -0.002004f, +0.004652f, -0.002510f, -0.002215f, -0.000733f, - +0.000272f, -0.001184f, -0.001998f, -0.003038f, -0.017307f, +0.004537f, +0.005744f, +0.000216f, -0.002454f, -0.001704f, - +0.001711f, +0.000396f, +0.001256f, -0.003035f, +0.002630f, +0.000802f, -0.001064f, -0.001939f, -0.002320f, +0.000723f, - -0.000774f, -0.001942f, +0.000338f, +0.000559f, +0.000425f, -0.001663f, +0.000583f, -0.000495f, -0.000423f, +0.001388f, - -0.003269f, -0.000118f, -0.000383f, +0.000298f, +0.001093f, +0.001209f, +0.000303f, -0.000796f, -0.000222f, -0.000737f, - +0.000022f, -0.000866f, +0.000230f, +0.001745f, +0.000225f, -0.000323f, +0.000149f, -0.000166f, -0.000154f, -0.000293f, - +0.000056f, +0.000115f, +0.000162f, +0.000119f, +0.000026f, +0.000086f, -0.000043f, -0.000583f, -0.000120f, +0.000264f, - -0.000349f, +0.000535f, -0.000414f, -0.000103f, -0.000014f, -0.000109f, +0.000012f, +0.000224f, +0.000134f, +0.000034f, - +0.000038f, +0.000063f, -0.000079f, +0.000032f, -0.000148f, +0.000058f, +0.000018f, -0.000285f, +0.000007f, +0.000118f, - -0.000006f, +0.000042f, +0.000083f, -0.000056f, -0.000050f, -0.000003f - } - }, - { - { - -0.001741f, -0.044785f, -0.000431f, +0.003188f, +0.001784f, +0.001020f, -0.000647f, -0.000638f, -0.000164f, +0.001948f, - -0.000840f, -0.001193f, +0.002658f, +0.000278f, +0.000855f, -0.002555f, -0.002276f, +0.001836f, +0.006476f, +0.006087f, - +0.005539f, +0.000927f, +0.002155f, +0.003055f, +0.001139f, +0.000644f, -0.001244f, +0.000262f, +0.000515f, -0.002202f, - -0.001386f, +0.000367f, +0.003927f, -0.000763f, +0.002432f, -0.000678f, -0.000673f, -0.003678f, +0.000700f, +0.000148f, - +0.000784f, +0.000404f, -0.000141f, -0.000736f, +0.000535f, -0.000044f, -0.000554f, -0.000019f, +0.000000f, -0.000833f, - +0.000934f, +0.001257f, +0.000063f, -0.000086f, -0.000484f, -0.000126f, -0.000459f, +0.000041f, +0.000077f, +0.000186f, - +0.000039f, +0.000182f, +0.000186f, -0.000207f, +0.000026f, +0.000187f, +0.000061f, +0.000112f, -0.000038f, +0.000341f, - -0.000175f, -0.000240f, -0.000002f, -0.000226f, -0.000041f, +0.000020f, +0.000058f, +0.000068f, +0.000092f, -0.000058f, - -0.000144f, -0.000083f, +0.000045f, +0.000271f, +0.000118f, -0.000137f, -0.000155f, -0.000157f, +0.000029f, -0.000075f, - -0.000081f, +0.000074f, -0.000100f, -0.000061f, -0.000040f, -0.000031f - }, - { - +0.007179f, +0.094494f, +0.014308f, -0.013822f, -0.003837f, -0.001176f, -0.000112f, -0.001835f, -0.001909f, -0.001318f, - -0.002097f, +0.002147f, +0.000731f, -0.000610f, +0.000538f, -0.003924f, -0.001967f, -0.000902f, +0.007147f, -0.001686f, - +0.001012f, +0.000191f, -0.001068f, +0.000984f, +0.002257f, +0.000328f, -0.000873f, -0.000912f, -0.000087f, -0.000604f, - -0.000361f, +0.000186f, -0.000221f, -0.001078f, -0.001031f, -0.001735f, +0.001735f, -0.001524f, -0.001772f, -0.000017f, - +0.000362f, +0.000965f, +0.002743f, +0.000337f, +0.000098f, -0.000261f, -0.000119f, +0.000096f, -0.000704f, -0.000024f, - -0.000380f, -0.000424f, -0.000095f, +0.000299f, +0.000674f, -0.000080f, -0.000469f, +0.000593f, -0.000141f, -0.000254f, - +0.000561f, +0.000048f, +0.000033f, -0.000071f, +0.000126f, -0.000187f, +0.000007f, +0.000200f, -0.000055f, +0.000199f, - +0.000397f, -0.000095f, +0.000061f, +0.000014f, -0.000154f, -0.000221f, +0.000055f, +0.000131f, -0.000192f, -0.000121f, - +0.000151f, +0.000096f, -0.000142f, -0.000174f, +0.000144f, +0.000159f, -0.000052f, +0.000122f, -0.000006f, +0.000164f, - +0.000047f, -0.000115f, +0.000073f, -0.000053f, -0.000001f, +0.000046f - }, - { - +0.013096f, +0.045993f, -0.011551f, +0.005121f, -0.003019f, +0.001171f, -0.000779f, -0.000495f, -0.000947f, -0.000025f, - -0.001382f, +0.001007f, +0.004086f, -0.000147f, +0.001024f, -0.000738f, +0.002367f, -0.000788f, +0.001253f, +0.001486f, - -0.004479f, +0.000041f, -0.001711f, -0.001233f, -0.000320f, -0.000538f, +0.001435f, +0.000145f, -0.000227f, -0.000365f, - +0.002532f, +0.000635f, +0.003130f, +0.000416f, +0.002464f, -0.001018f, +0.002412f, +0.001386f, -0.000293f, -0.000266f, - -0.000365f, +0.001459f, +0.000446f, +0.000102f, +0.000668f, -0.000683f, +0.000867f, +0.000033f, +0.000417f, +0.001024f, - +0.000203f, -0.000171f, +0.000430f, -0.000225f, -0.000105f, +0.000462f, -0.000477f, -0.000346f, +0.000323f, -0.000139f, - -0.000092f, -0.000036f, +0.000066f, +0.000290f, +0.000106f, +0.000194f, -0.000124f, +0.000038f, +0.000042f, +0.000057f, - +0.000051f, -0.000265f, -0.000033f, +0.000299f, +0.000121f, -0.000017f, +0.000044f, -0.000016f, -0.000083f, -0.000224f, - +0.000013f, -0.000029f, -0.000168f, -0.000022f, +0.000040f, -0.000134f, -0.000028f, -0.000006f, -0.000039f, +0.000016f, - -0.000117f, -0.000057f, +0.000074f, +0.000086f, -0.000039f, -0.000017f - }, - { - -0.000781f, +0.005294f, +0.001256f, -0.000710f, +0.000044f, -0.000651f, -0.000284f, -0.000047f, -0.000599f, -0.000021f, - +0.001314f, -0.000563f, +0.002016f, +0.001979f, -0.010265f, -0.002031f, +0.004504f, -0.000401f, -0.004837f, +0.000547f, - +0.000969f, -0.003794f, +0.003316f, +0.004216f, +0.001532f, -0.000137f, -0.000386f, -0.000133f, +0.000522f, -0.003508f, - -0.001538f, +0.002012f, +0.000978f, +0.000414f, -0.000803f, -0.000489f, +0.002147f, +0.000072f, -0.001163f, -0.001093f, - -0.000012f, +0.000599f, +0.000374f, -0.000384f, -0.001198f, -0.000230f, +0.000336f, -0.000360f, -0.000334f, +0.000047f, - +0.000030f, -0.000433f, +0.000045f, +0.000277f, +0.000150f, -0.000041f, +0.000202f, -0.000594f, +0.000241f, -0.000132f, - -0.000405f, +0.000063f, +0.000325f, +0.000047f, -0.000043f, +0.000087f, +0.000046f, +0.000095f, -0.000040f, +0.000120f, - -0.000232f, -0.000110f, +0.000043f, +0.000189f, +0.000048f, -0.000099f, +0.000036f, +0.000120f, +0.000053f, -0.000096f, - -0.000083f, -0.000006f, +0.000115f, -0.000118f, +0.000028f, +0.000024f, -0.000039f, +0.000021f, +0.000088f, +0.000073f, - -0.000056f, +0.000029f, +0.000123f, +0.000103f, -0.000072f, +0.000064f - }, - { - -0.017977f, +0.062642f, +0.003276f, -0.006835f, +0.001186f, +0.000648f, +0.001142f, +0.000134f, +0.000539f, -0.000911f, - -0.000439f, -0.000438f, -0.000830f, -0.004671f, -0.001120f, +0.005999f, -0.001394f, -0.011363f, -0.002789f, +0.002321f, - +0.000757f, +0.000530f, +0.000181f, +0.000208f, +0.001388f, +0.001228f, +0.002621f, +0.001330f, -0.002377f, -0.001317f, - -0.001201f, +0.000776f, +0.001745f, +0.002798f, -0.001058f, -0.000629f, +0.000178f, -0.002333f, +0.000189f, +0.000102f, - +0.000002f, +0.000316f, -0.001709f, +0.001183f, +0.000150f, -0.000299f, +0.000720f, +0.000443f, -0.001015f, +0.001450f, - -0.000088f, -0.000328f, +0.000704f, +0.000872f, -0.000435f, +0.000070f, +0.000383f, -0.000244f, -0.000543f, +0.000172f, - +0.000002f, +0.000267f, -0.000246f, -0.000328f, +0.000045f, -0.000087f, -0.000161f, +0.000317f, -0.000153f, +0.000041f, - +0.000054f, -0.000086f, -0.000197f, +0.000025f, +0.000099f, +0.000040f, +0.000141f, +0.000315f, -0.000002f, -0.000097f, - -0.000014f, -0.000062f, +0.000049f, +0.000041f, -0.000189f, +0.000075f, +0.000034f, +0.000087f, +0.000124f, -0.000076f, - +0.000037f, -0.000132f, -0.000140f, -0.000001f, -0.000123f, -0.000019f - }, - { - -0.000731f, +0.002680f, +0.004533f, +0.000403f, -0.000564f, -0.000154f, -0.000453f, -0.000028f, -0.000912f, +0.000105f, - -0.000001f, -0.000235f, -0.000189f, +0.000984f, -0.002429f, +0.002606f, +0.001652f, +0.002837f, +0.005157f, -0.011546f, - -0.002233f, -0.001759f, -0.001150f, -0.000861f, +0.001630f, -0.005086f, +0.003539f, -0.005243f, -0.001279f, -0.000414f, - +0.001246f, -0.000033f, +0.000616f, +0.001568f, +0.000007f, +0.000022f, -0.000147f, -0.000761f, +0.000681f, -0.000477f, - +0.000481f, +0.000376f, +0.000059f, -0.000373f, +0.000359f, +0.000499f, -0.000551f, -0.001387f, +0.000051f, -0.000093f, - +0.000410f, -0.000047f, -0.000761f, +0.000224f, -0.000013f, +0.000561f, -0.000234f, -0.000309f, +0.000051f, -0.000265f, - -0.000204f, +0.000020f, +0.000093f, +0.000027f, +0.000253f, +0.000059f, +0.000006f, +0.000102f, +0.000016f, -0.000021f, - +0.000095f, +0.000165f, +0.000109f, +0.000025f, -0.000439f, -0.000065f, +0.000390f, +0.000101f, +0.000142f, -0.000121f, - -0.000192f, +0.000248f, -0.000025f, -0.000059f, +0.000029f, +0.000099f, +0.000223f, -0.000023f, +0.000012f, -0.000061f, - -0.000074f, -0.000093f, +0.000057f, +0.000116f, +0.000008f, -0.000093f - }, - { - +0.004219f, +0.152101f, +0.005273f, -0.000510f, +0.001043f, -0.000167f, -0.000280f, +0.001183f, +0.000221f, -0.002366f, - -0.000504f, +0.000634f, +0.001326f, -0.000336f, +0.000341f, -0.001366f, -0.000884f, +0.000911f, +0.000188f, -0.001057f, - -0.001287f, -0.000646f, +0.000967f, -0.000263f, +0.000266f, -0.000140f, +0.000150f, -0.001875f, -0.001202f, -0.001027f, - +0.000288f, -0.000156f, +0.000183f, +0.001166f, -0.000692f, -0.001754f, +0.000592f, -0.000417f, -0.001560f, +0.000270f, - -0.000564f, +0.001986f, -0.000445f, -0.000631f, +0.000573f, -0.000487f, +0.000231f, -0.000205f, +0.000204f, +0.000358f, - +0.000191f, -0.000916f, -0.000588f, +0.000660f, +0.000214f, +0.000181f, -0.000130f, -0.000114f, +0.000545f, +0.000044f, - -0.000735f, +0.000097f, +0.000082f, -0.000334f, -0.000069f, -0.000090f, +0.000281f, +0.000194f, +0.000047f, +0.000094f, - -0.000090f, -0.000341f, +0.000255f, -0.000012f, -0.000004f, -0.000165f, -0.000005f, +0.000187f, -0.000114f, +0.000219f, - +0.000175f, -0.000146f, +0.000090f, +0.000016f, -0.000122f, -0.000204f, -0.000072f, +0.000196f, +0.000111f, +0.000001f, - -0.000036f, +0.000104f, -0.000028f, -0.000024f, +0.000030f, +0.000036f - }, - { - -0.000700f, -0.004634f, +0.004527f, -0.000632f, +0.000840f, +0.000002f, -0.000075f, +0.000311f, -0.000193f, +0.000354f, - -0.001174f, -0.001459f, -0.000617f, -0.000793f, -0.001680f, -0.004121f, +0.000646f, -0.001675f, +0.003945f, +0.000589f, - -0.000403f, -0.002946f, +0.002251f, +0.001530f, -0.001141f, +0.004410f, +0.001215f, +0.004402f, -0.000244f, +0.002061f, - -0.000484f, -0.000267f, -0.000433f, -0.000079f, -0.001052f, +0.002186f, -0.000167f, -0.000208f, +0.000264f, +0.000640f, - -0.000065f, -0.000462f, -0.000007f, +0.000020f, +0.000223f, -0.000358f, +0.000466f, +0.000418f, -0.000637f, +0.000057f, - +0.000790f, -0.000596f, -0.000233f, +0.000245f, +0.001140f, +0.000246f, -0.000453f, -0.000147f, -0.000363f, +0.000167f, - -0.000052f, +0.000004f, +0.000633f, +0.000605f, -0.000076f, -0.000119f, -0.000428f, +0.000211f, +0.000385f, +0.000364f, - -0.000038f, -0.000177f, -0.000458f, -0.000057f, +0.000310f, +0.000122f, -0.000093f, +0.000161f, +0.000028f, +0.000032f, - +0.000021f, -0.000266f, -0.000002f, -0.000169f, +0.000022f, -0.000083f, +0.000047f, +0.000023f, -0.000020f, -0.000044f, - +0.000077f, -0.000052f, -0.000017f, +0.000016f, -0.000028f, +0.000073f - }, - { - -0.026819f, -0.071304f, -0.008270f, -0.004000f, -0.000684f, +0.000007f, -0.001408f, -0.001227f, -0.002610f, +0.000854f, - +0.000065f, -0.001427f, +0.001464f, +0.000903f, +0.001615f, +0.000794f, +0.004245f, +0.002170f, -0.000688f, -0.001930f, - -0.001470f, -0.000629f, +0.000544f, +0.000630f, +0.000842f, +0.000546f, -0.000751f, +0.001947f, +0.002550f, +0.001128f, - -0.001468f, +0.000676f, +0.000538f, -0.001005f, -0.002265f, +0.000120f, -0.002019f, +0.002248f, +0.000535f, +0.001147f, - -0.000152f, +0.002660f, +0.000164f, +0.000067f, +0.000437f, +0.001520f, +0.000345f, -0.000753f, +0.000218f, -0.000033f, - +0.001203f, +0.000332f, -0.000185f, +0.000748f, -0.000099f, +0.000347f, +0.000020f, +0.000326f, +0.001094f, +0.000302f, - -0.000041f, +0.000237f, -0.000290f, +0.000110f, -0.000393f, -0.000286f, +0.000121f, +0.000515f, -0.000282f, +0.000318f, - +0.000255f, +0.000193f, -0.000083f, -0.000194f, +0.000127f, +0.000248f, -0.000375f, +0.000205f, -0.000189f, +0.000142f, - +0.000065f, -0.000190f, -0.000162f, -0.000116f, +0.000009f, +0.000073f, -0.000045f, +0.000066f, +0.000111f, +0.000112f, - +0.000039f, -0.000048f, -0.000064f, +0.000005f, +0.000028f, -0.000031f - }, - { - -0.001158f, -0.000132f, +0.003906f, -0.014033f, -0.000880f, -0.000408f, +0.003687f, -0.000949f, -0.000576f, +0.001298f, - +0.003105f, -0.001396f, -0.001737f, -0.000096f, +0.003996f, -0.004833f, -0.003147f, -0.002070f, -0.003379f, -0.001076f, - +0.000861f, -0.000500f, -0.000653f, -0.000462f, +0.001313f, -0.000415f, -0.000885f, +0.001072f, +0.000693f, -0.000398f, - -0.001228f, -0.001860f, -0.000925f, -0.000392f, -0.000128f, +0.000719f, -0.001132f, +0.001035f, +0.000483f, -0.000705f, - -0.000188f, +0.001599f, -0.000009f, -0.000690f, -0.000118f, -0.000795f, +0.000216f, -0.000373f, -0.001200f, -0.000735f, - +0.000294f, +0.000224f, +0.000966f, +0.000503f, +0.000266f, -0.000041f, +0.000134f, +0.000040f, -0.000131f, +0.000370f, - +0.000292f, +0.000011f, -0.000347f, -0.000232f, -0.000034f, -0.000254f, -0.000060f, +0.000233f, +0.000517f, +0.000352f, - +0.000022f, +0.000230f, -0.000103f, +0.000118f, -0.000142f, -0.000148f, -0.000100f, -0.000003f, +0.000027f, +0.000062f, - -0.000144f, +0.000072f, +0.000056f, +0.000073f, +0.000097f, +0.000024f, -0.000090f, -0.000043f, -0.000082f, -0.000058f, - +0.000059f, -0.000117f, -0.000036f, +0.000038f, +0.000006f, +0.000083f - }, - { - -0.001760f, -0.077741f, -0.015828f, +0.001445f, +0.003042f, +0.002412f, +0.012859f, -0.003857f, -0.000341f, -0.002450f, - +0.000513f, -0.000596f, -0.001808f, +0.001376f, -0.002216f, -0.000376f, -0.000711f, -0.003001f, +0.002044f, +0.001242f, - +0.000259f, -0.001048f, +0.000674f, +0.000547f, -0.000231f, -0.000006f, +0.000975f, -0.001190f, +0.000636f, +0.000274f, - +0.000552f, +0.003915f, +0.001373f, -0.001410f, -0.001211f, +0.001596f, -0.001605f, +0.000025f, +0.002275f, +0.000375f, - +0.000820f, +0.000304f, +0.000599f, +0.001284f, +0.001232f, +0.000863f, -0.000083f, +0.000511f, +0.000904f, -0.000341f, - +0.000111f, +0.000197f, +0.001017f, -0.000309f, -0.000358f, -0.000410f, -0.000155f, +0.000132f, +0.000450f, +0.000167f, - -0.000450f, +0.000019f, -0.000341f, -0.000531f, +0.000000f, +0.000026f, +0.000037f, +0.000055f, -0.000192f, -0.000132f, - -0.000142f, +0.000012f, +0.000060f, +0.000135f, +0.000017f, +0.000114f, +0.000068f, -0.000178f, -0.000087f, -0.000006f, - -0.000100f, +0.000228f, +0.000031f, -0.000072f, -0.000015f, -0.000003f, +0.000054f, -0.000000f, +0.000060f, -0.000014f, - +0.000049f, +0.000080f, -0.000058f, -0.000034f, +0.000001f, +0.000084f - }, - { - -0.001072f, -0.006721f, +0.003235f, +0.003314f, -0.001852f, +0.000900f, +0.001282f, -0.000383f, +0.000876f, -0.000695f, - -0.002319f, -0.002752f, -0.000894f, -0.007232f, +0.004062f, +0.004240f, +0.001225f, +0.000290f, +0.000767f, +0.002739f, - -0.002906f, -0.005664f, -0.001066f, +0.002551f, +0.002494f, -0.001645f, +0.002059f, +0.001113f, +0.003050f, +0.001014f, - +0.003395f, -0.000709f, +0.000177f, +0.000444f, -0.000579f, -0.000611f, -0.001221f, -0.000301f, +0.000730f, -0.000015f, - +0.000564f, -0.000808f, -0.000746f, +0.000973f, -0.000276f, +0.000364f, +0.000579f, +0.000356f, +0.000525f, +0.001070f, - +0.000227f, -0.000329f, -0.000119f, -0.000266f, +0.000280f, -0.000345f, -0.000199f, +0.000058f, +0.000251f, -0.000386f, - -0.000005f, +0.000290f, -0.000058f, -0.000124f, -0.000441f, +0.000254f, +0.000080f, +0.000026f, +0.000252f, +0.000032f, - +0.000322f, +0.000172f, -0.000097f, -0.000041f, +0.000091f, +0.000194f, +0.000247f, +0.000082f, -0.000147f, -0.000134f, - -0.000097f, -0.000066f, -0.000103f, -0.000098f, +0.000024f, +0.000027f, -0.000076f, -0.000031f, -0.000010f, -0.000075f, - -0.000031f, +0.000012f, +0.000022f, +0.000032f, -0.000056f, +0.000050f - }, - { - -0.005859f, -0.021042f, +0.009810f, +0.010058f, -0.003803f, +0.000974f, +0.002741f, +0.002015f, -0.001526f, -0.002333f, - -0.000371f, +0.002433f, -0.003653f, +0.010967f, +0.003578f, -0.002310f, +0.000393f, +0.000766f, +0.000860f, +0.001211f, - +0.002262f, +0.000650f, +0.001154f, +0.001954f, -0.000753f, -0.000690f, +0.000462f, +0.001030f, -0.001188f, -0.000598f, - -0.000678f, +0.000248f, -0.000385f, -0.001803f, -0.000528f, +0.001095f, +0.000924f, -0.001355f, -0.000941f, +0.000881f, - +0.000445f, +0.000083f, -0.000440f, -0.001445f, -0.000815f, -0.000696f, -0.000076f, -0.000654f, -0.000402f, +0.000084f, - +0.000477f, +0.000210f, +0.000248f, +0.000169f, +0.000265f, +0.000235f, +0.000624f, +0.000545f, +0.000176f, +0.000028f, - +0.000521f, -0.000477f, -0.000370f, -0.000297f, +0.000035f, +0.000061f, -0.000403f, -0.000031f, -0.000023f, +0.000287f, - +0.000062f, -0.000300f, +0.000099f, -0.000242f, -0.000003f, +0.000084f, +0.000175f, +0.000060f, -0.000112f, +0.000039f, - +0.000054f, +0.000043f, -0.000043f, -0.000038f, +0.000018f, +0.000163f, -0.000303f, -0.000122f, -0.000150f, -0.000111f, - -0.000119f, -0.000060f, +0.000058f, +0.000026f, +0.000106f, +0.000083f - }, - { - -0.000107f, -0.001873f, -0.000580f, +0.000018f, +0.000321f, +0.000669f, +0.001552f, -0.000025f, +0.001322f, -0.000429f, - +0.001419f, -0.000243f, -0.005055f, +0.004978f, +0.054047f, -0.000137f, -0.008447f, -0.002313f, +0.000681f, +0.005344f, - -0.005567f, -0.002368f, -0.002828f, +0.003473f, +0.001379f, -0.001816f, +0.001916f, +0.002605f, +0.003187f, +0.001183f, - -0.002659f, -0.000297f, -0.000772f, -0.000797f, +0.000386f, -0.000514f, +0.001230f, -0.001420f, +0.000473f, -0.000199f, - +0.000424f, +0.000573f, +0.000639f, -0.000296f, -0.000224f, +0.000611f, +0.000460f, +0.000831f, +0.000496f, +0.000057f, - -0.000162f, +0.000784f, -0.000215f, -0.000075f, +0.000656f, -0.000347f, -0.000384f, +0.000305f, +0.000051f, -0.000438f, - +0.000049f, +0.000084f, -0.000339f, -0.000046f, +0.000215f, +0.000282f, +0.000020f, -0.000071f, +0.000052f, +0.000301f, - -0.000238f, -0.000148f, +0.000050f, +0.000193f, -0.000238f, +0.000001f, +0.000304f, -0.000080f, +0.000207f, +0.000076f, - +0.000027f, +0.000169f, -0.000121f, -0.000118f, -0.000006f, -0.000041f, -0.000130f, -0.000114f, +0.000147f, -0.000125f, - +0.000054f, +0.000028f, +0.000067f, -0.000034f, +0.000039f, +0.000005f - }, - { - -0.004765f, -0.039106f, -0.008777f, +0.004586f, -0.002714f, +0.003316f, +0.001562f, -0.003118f, -0.001714f, +0.000715f, - +0.001168f, -0.000531f, +0.001122f, -0.007013f, -0.011719f, +0.006526f, +0.003834f, -0.002205f, -0.001904f, +0.000793f, - -0.000908f, +0.000639f, -0.000892f, +0.001095f, +0.001027f, -0.001023f, -0.000219f, -0.000965f, -0.001077f, -0.001115f, - -0.001416f, +0.000541f, -0.001439f, +0.000676f, -0.001628f, -0.001176f, -0.000756f, -0.000172f, +0.000898f, -0.000909f, - -0.000154f, -0.000307f, -0.000555f, +0.000008f, +0.000501f, +0.000977f, +0.000019f, -0.000873f, -0.000363f, +0.000377f, - -0.000739f, +0.000084f, +0.000967f, +0.001775f, -0.000041f, +0.000531f, -0.000462f, -0.000489f, -0.000243f, -0.000096f, - -0.000042f, -0.000193f, -0.000078f, +0.000010f, +0.000326f, -0.000423f, -0.000228f, +0.000003f, -0.000204f, -0.000060f, - +0.000089f, -0.000251f, -0.000438f, +0.000313f, +0.000063f, +0.000047f, +0.000000f, -0.000108f, +0.000381f, -0.000043f, - -0.000253f, +0.000169f, +0.000159f, -0.000098f, +0.000017f, +0.000054f, +0.000033f, -0.000115f, +0.000121f, +0.000029f, - -0.000083f, +0.000012f, +0.000030f, -0.000108f, -0.000008f, +0.000020f - } - }, - { - { - -0.000784f, -0.025572f, +0.007801f, -0.003085f, +0.000486f, -0.000120f, -0.001020f, +0.000438f, -0.000604f, +0.000805f, - -0.003372f, -0.001568f, -0.002434f, -0.004570f, +0.003965f, -0.003849f, -0.005103f, +0.001788f, +0.000469f, +0.002589f, - +0.002673f, -0.000284f, +0.000337f, +0.000218f, -0.001010f, +0.001593f, +0.000224f, -0.000657f, -0.000695f, -0.002249f, - -0.001538f, -0.000544f, +0.000033f, -0.001883f, +0.000533f, -0.000842f, +0.000301f, -0.003446f, +0.001109f, -0.000234f, - +0.000249f, -0.000188f, -0.000480f, -0.000277f, +0.001119f, +0.000369f, -0.000572f, -0.000130f, +0.000195f, -0.000690f, - +0.000075f, +0.000216f, -0.000413f, +0.000494f, -0.000037f, -0.000099f, -0.000414f, -0.000201f, +0.000464f, +0.000332f, - +0.000044f, +0.000446f, +0.000156f, -0.000220f, +0.000071f, -0.000017f, -0.000410f, -0.000074f, -0.000103f, +0.000014f, - -0.000234f, -0.000074f, +0.000070f, -0.000116f, +0.000117f, -0.000054f, -0.000050f, -0.000043f, +0.000032f, -0.000088f, - -0.000074f, +0.000101f, +0.000152f, +0.000216f, +0.000052f, -0.000195f, -0.000082f, -0.000079f, +0.000119f, -0.000078f, - +0.000094f, +0.000055f, +0.000050f, -0.000024f, -0.000081f, +0.000012f - }, - { - -0.006996f, +0.057143f, +0.006871f, -0.006472f, +0.001360f, +0.000787f, +0.000058f, -0.000307f, +0.000828f, +0.001425f, - -0.000187f, +0.002178f, -0.000553f, -0.001016f, +0.000882f, -0.002462f, +0.002230f, -0.000862f, +0.005786f, -0.002257f, - -0.000481f, -0.000073f, -0.001189f, +0.000237f, +0.001412f, -0.000076f, -0.000164f, -0.000316f, +0.001114f, +0.001505f, - -0.000427f, -0.000482f, +0.000949f, +0.000498f, -0.000461f, -0.001159f, +0.000862f, -0.000685f, -0.000917f, -0.000229f, - +0.001397f, +0.000707f, +0.000761f, -0.000130f, +0.000335f, -0.000486f, +0.000496f, -0.000743f, -0.000898f, +0.000138f, - -0.000074f, -0.000025f, +0.000332f, +0.000280f, +0.000256f, -0.000363f, -0.000098f, +0.000508f, -0.000104f, +0.000146f, - +0.000396f, -0.000105f, +0.000355f, +0.000036f, +0.000053f, -0.000062f, -0.000162f, +0.000458f, -0.000008f, -0.000184f, - +0.000173f, -0.000250f, -0.000018f, +0.000000f, -0.000217f, +0.000098f, +0.000076f, +0.000030f, -0.000100f, +0.000036f, - +0.000045f, -0.000096f, +0.000047f, +0.000035f, +0.000055f, -0.000112f, +0.000085f, +0.000064f, -0.000036f, +0.000085f, - -0.000032f, -0.000119f, +0.000117f, -0.000079f, +0.000088f, -0.000028f - }, - { - -0.008038f, +0.052943f, +0.019580f, +0.013208f, -0.000612f, -0.000174f, -0.000301f, -0.000215f, -0.000390f, -0.000760f, - +0.000060f, +0.000101f, +0.001615f, +0.000670f, -0.000915f, -0.004580f, -0.000338f, -0.000788f, -0.000378f, +0.000731f, - -0.005226f, -0.001227f, -0.000860f, +0.000700f, +0.000949f, -0.000584f, +0.000936f, -0.000090f, -0.001192f, -0.000455f, - +0.001324f, +0.000246f, +0.001558f, -0.001429f, +0.002156f, -0.000550f, +0.000739f, -0.000719f, -0.000170f, -0.000112f, - -0.000912f, +0.000458f, +0.000824f, +0.000379f, +0.001036f, +0.000111f, +0.001166f, -0.000136f, +0.000280f, +0.000141f, - -0.000812f, -0.000041f, +0.000872f, -0.000195f, -0.000492f, +0.000170f, +0.000172f, -0.000003f, +0.000271f, -0.000510f, - +0.000380f, +0.000694f, -0.000048f, -0.000330f, -0.000002f, +0.000074f, -0.000021f, -0.000156f, -0.000062f, +0.000055f, - -0.000100f, -0.000189f, +0.000015f, +0.000234f, +0.000007f, -0.000080f, -0.000049f, +0.000084f, -0.000050f, -0.000210f, - -0.000004f, +0.000091f, -0.000020f, -0.000068f, +0.000080f, +0.000051f, -0.000075f, -0.000008f, -0.000022f, -0.000020f, - +0.000040f, -0.000033f, +0.000083f, +0.000010f, -0.000027f, +0.000062f - }, - { - +0.000729f, +0.005057f, -0.000004f, +0.000066f, -0.000005f, -0.000459f, +0.000110f, +0.000680f, -0.000057f, -0.000586f, - +0.000140f, -0.001349f, +0.000972f, -0.000236f, -0.008938f, -0.000208f, +0.001494f, +0.002951f, -0.003130f, -0.002883f, - +0.001527f, -0.001767f, -0.000207f, +0.000711f, +0.000022f, +0.000341f, +0.001733f, -0.000732f, -0.000342f, -0.001448f, - -0.000234f, +0.001852f, -0.000009f, +0.000799f, -0.001372f, -0.000727f, -0.000300f, +0.000139f, +0.000509f, -0.000597f, - +0.000573f, +0.000393f, +0.000257f, +0.000042f, -0.000595f, +0.000314f, -0.000120f, -0.000622f, +0.000155f, +0.000160f, - -0.000116f, +0.000090f, +0.000150f, +0.000154f, +0.000334f, -0.000599f, +0.000103f, -0.000144f, +0.000305f, +0.000113f, - -0.000229f, +0.000256f, -0.000064f, -0.000174f, +0.000003f, +0.000037f, -0.000039f, +0.000222f, -0.000115f, +0.000122f, - -0.000344f, -0.000100f, -0.000128f, +0.000135f, -0.000164f, -0.000058f, +0.000206f, +0.000094f, -0.000113f, -0.000038f, - -0.000087f, +0.000071f, +0.000087f, +0.000032f, +0.000003f, -0.000051f, -0.000066f, +0.000078f, +0.000114f, -0.000010f, - -0.000024f, +0.000061f, +0.000060f, +0.000012f, -0.000022f, +0.000079f - }, - { - +0.001099f, +0.079827f, -0.000383f, -0.006837f, +0.001699f, -0.000473f, -0.000502f, -0.000584f, -0.000181f, -0.000298f, - +0.003575f, -0.001223f, +0.001397f, -0.000333f, -0.000451f, +0.003150f, +0.001080f, -0.008090f, -0.001587f, +0.001828f, - +0.001149f, -0.000332f, -0.002545f, -0.002081f, +0.000682f, -0.000586f, +0.001531f, +0.000442f, -0.001362f, -0.000013f, - -0.000620f, -0.000813f, -0.000501f, +0.001286f, -0.000113f, +0.001294f, -0.000042f, -0.000869f, +0.000767f, -0.000152f, - +0.000204f, +0.000439f, -0.000690f, +0.000757f, -0.000473f, -0.000217f, +0.000112f, +0.000462f, -0.000462f, +0.001084f, - +0.000242f, +0.000217f, +0.000034f, -0.000244f, -0.000747f, +0.000525f, +0.000151f, -0.000771f, -0.000466f, +0.000258f, - -0.000080f, +0.000198f, +0.000116f, -0.000280f, -0.000134f, -0.000007f, -0.000342f, -0.000029f, -0.000280f, -0.000043f, - +0.000029f, -0.000201f, -0.000221f, +0.000271f, +0.000113f, -0.000105f, +0.000059f, +0.000011f, -0.000046f, -0.000099f, - -0.000026f, -0.000053f, +0.000059f, -0.000086f, -0.000191f, +0.000088f, +0.000001f, -0.000005f, -0.000073f, -0.000065f, - +0.000125f, -0.000059f, -0.000096f, +0.000029f, +0.000023f, +0.000072f - }, - { - -0.000021f, -0.001403f, -0.003886f, -0.001099f, -0.000194f, -0.000023f, +0.000140f, +0.000415f, -0.000472f, -0.000436f, - -0.000190f, +0.000220f, -0.000446f, +0.003512f, +0.003761f, -0.002498f, -0.004863f, +0.000377f, -0.003177f, -0.013348f, - +0.004929f, -0.000299f, +0.002784f, -0.002016f, +0.000145f, -0.003258f, +0.002488f, -0.002059f, +0.001338f, +0.001136f, - +0.002243f, -0.000005f, -0.000415f, +0.001322f, +0.000127f, -0.000600f, +0.000319f, +0.000024f, +0.000931f, -0.000643f, - +0.001319f, +0.000342f, +0.000363f, +0.000361f, +0.000054f, +0.000429f, +0.000090f, -0.000501f, +0.000456f, +0.000095f, - +0.000323f, -0.000396f, -0.000403f, +0.000689f, +0.000280f, -0.000010f, -0.000224f, -0.000164f, +0.000209f, +0.000112f, - -0.000256f, +0.000534f, -0.000062f, -0.000545f, -0.000076f, +0.000033f, +0.000101f, +0.000044f, -0.000099f, -0.000082f, - +0.000307f, +0.000149f, +0.000185f, +0.000217f, +0.000008f, -0.000054f, +0.000256f, +0.000122f, -0.000004f, -0.000085f, - -0.000048f, +0.000107f, -0.000151f, -0.000047f, +0.000105f, -0.000008f, +0.000006f, -0.000058f, +0.000009f, -0.000017f, - -0.000032f, -0.000052f, +0.000082f, +0.000042f, -0.000036f, -0.000123f - }, - { - -0.022967f, +0.115758f, +0.003593f, -0.002072f, -0.000203f, -0.000067f, -0.000039f, -0.000613f, -0.001187f, -0.001742f, - -0.000431f, +0.000407f, +0.002229f, -0.001965f, -0.000802f, -0.002302f, -0.000167f, +0.000810f, -0.000729f, -0.000463f, - -0.000380f, +0.000280f, +0.000556f, -0.000629f, +0.000056f, -0.000329f, +0.000722f, -0.001929f, -0.001354f, -0.001170f, - +0.001015f, +0.001665f, +0.000252f, +0.000271f, -0.001314f, -0.000934f, +0.000382f, +0.000061f, -0.000461f, +0.001013f, - -0.000156f, +0.000977f, -0.000528f, +0.000224f, +0.000650f, -0.000004f, -0.000144f, +0.000401f, +0.000216f, -0.000365f, - -0.000019f, -0.000646f, -0.000109f, +0.000523f, +0.000615f, +0.000292f, -0.000220f, +0.000039f, +0.000664f, +0.000072f, - -0.000674f, +0.000133f, +0.000352f, -0.000162f, -0.000219f, -0.000025f, +0.000288f, +0.000138f, +0.000002f, -0.000014f, - -0.000075f, -0.000270f, +0.000206f, +0.000060f, +0.000156f, -0.000033f, -0.000014f, +0.000146f, -0.000026f, +0.000109f, - -0.000104f, -0.000117f, +0.000215f, -0.000007f, -0.000267f, +0.000064f, +0.000024f, +0.000100f, -0.000036f, -0.000056f, - +0.000018f, +0.000043f, +0.000077f, -0.000028f, +0.000014f, +0.000050f - }, - { - +0.000435f, -0.000346f, +0.001023f, -0.001556f, +0.000804f, -0.000109f, +0.000222f, +0.000144f, -0.000807f, +0.000174f, - -0.000883f, -0.000710f, -0.000104f, -0.002824f, -0.002321f, -0.002076f, +0.003524f, -0.000938f, +0.001621f, -0.001118f, - +0.000358f, +0.001731f, +0.000840f, -0.000579f, -0.002047f, +0.002440f, -0.000224f, -0.000807f, -0.000639f, +0.001890f, - -0.000672f, +0.001244f, +0.000535f, -0.000713f, -0.001028f, +0.000858f, +0.000386f, -0.000114f, +0.000197f, +0.000445f, - +0.000125f, -0.000334f, +0.000278f, +0.000215f, +0.000102f, -0.000293f, +0.000573f, +0.000151f, -0.000982f, -0.000287f, - +0.000331f, -0.000193f, -0.000606f, +0.000220f, +0.000576f, -0.000265f, -0.000334f, -0.000154f, -0.000414f, +0.000877f, - +0.000398f, +0.000393f, +0.000561f, +0.000313f, +0.000023f, +0.000179f, +0.000016f, +0.000056f, -0.000002f, -0.000030f, - +0.000161f, +0.000123f, -0.000135f, +0.000071f, +0.000077f, +0.000005f, +0.000147f, +0.000080f, -0.000039f, +0.000039f, - -0.000067f, -0.000221f, +0.000071f, -0.000041f, +0.000120f, -0.000061f, +0.000125f, -0.000033f, +0.000023f, +0.000070f, - +0.000057f, +0.000077f, -0.000015f, +0.000003f, -0.000024f, +0.000024f - }, - { - +0.021497f, -0.016968f, -0.008415f, +0.001035f, -0.001349f, -0.000257f, -0.000410f, -0.001047f, -0.000288f, +0.001934f, - -0.000774f, -0.002291f, +0.000502f, +0.000426f, +0.000633f, +0.000411f, +0.000217f, -0.001314f, -0.000709f, -0.000451f, - -0.000511f, -0.001077f, +0.000562f, +0.000405f, +0.000182f, +0.000179f, +0.000348f, +0.001248f, +0.002055f, +0.000796f, - -0.001244f, -0.000779f, -0.000392f, -0.000022f, -0.000820f, +0.001595f, -0.000053f, +0.000988f, -0.002803f, -0.000200f, - +0.000563f, +0.001335f, -0.000586f, +0.000846f, -0.000532f, +0.000413f, -0.000283f, -0.001442f, +0.000319f, -0.000237f, - +0.000374f, -0.000301f, -0.000382f, +0.000495f, -0.000337f, +0.000054f, -0.000253f, -0.000264f, +0.000279f, -0.000097f, - +0.000453f, +0.000591f, -0.000312f, +0.000226f, -0.000160f, +0.000215f, +0.000347f, +0.000427f, -0.000158f, -0.000020f, - -0.000240f, +0.000089f, +0.000031f, -0.000167f, +0.000178f, -0.000021f, -0.000237f, +0.000437f, +0.000017f, -0.000005f, - +0.000079f, -0.000203f, -0.000108f, -0.000198f, -0.000005f, -0.000029f, -0.000006f, +0.000089f, +0.000113f, +0.000042f, - -0.000127f, -0.000058f, -0.000076f, +0.000084f, -0.000010f, +0.000009f - }, - { - +0.001037f, +0.002351f, +0.007964f, -0.006410f, +0.003154f, +0.003263f, +0.004973f, -0.001213f, -0.000323f, -0.000353f, - +0.000269f, -0.002244f, +0.002057f, +0.000496f, +0.004050f, -0.002878f, -0.002564f, -0.000533f, -0.002930f, -0.001935f, - -0.000496f, +0.001750f, -0.000362f, +0.000298f, +0.001206f, +0.000227f, -0.000234f, +0.000956f, -0.000888f, +0.000934f, - +0.000108f, -0.000525f, -0.000673f, +0.000513f, +0.001032f, +0.001508f, -0.000306f, +0.001172f, +0.000342f, +0.000064f, - -0.000428f, +0.000508f, -0.000288f, -0.000255f, +0.000737f, -0.000930f, +0.000449f, -0.000314f, -0.000443f, -0.000256f, - +0.000702f, -0.000014f, +0.000301f, -0.000422f, -0.000502f, -0.000563f, -0.000156f, -0.000018f, -0.000069f, +0.000125f, - -0.000010f, +0.000282f, -0.000030f, -0.000066f, -0.000063f, -0.000251f, +0.000121f, +0.000383f, +0.000269f, -0.000068f, - +0.000049f, -0.000041f, -0.000297f, +0.000173f, -0.000167f, -0.000012f, -0.000181f, -0.000046f, -0.000044f, -0.000053f, - -0.000131f, +0.000034f, +0.000088f, -0.000027f, +0.000098f, -0.000029f, -0.000056f, +0.000073f, -0.000040f, +0.000087f, - +0.000021f, -0.000001f, +0.000026f, +0.000059f, +0.000041f, +0.000049f - }, - { - +0.005877f, -0.056500f, +0.002816f, +0.006700f, +0.001876f, -0.004413f, -0.002997f, -0.004858f, +0.000613f, +0.000293f, - +0.000169f, +0.000113f, -0.000976f, +0.001524f, -0.001192f, -0.002006f, -0.002870f, -0.002598f, +0.001438f, +0.000335f, - -0.000430f, -0.000021f, -0.000455f, +0.000313f, +0.000303f, +0.000243f, +0.001100f, -0.000613f, +0.000807f, +0.000497f, - -0.000576f, +0.001241f, -0.000497f, -0.000954f, -0.000384f, +0.000436f, -0.001302f, -0.000768f, +0.000202f, +0.000656f, - +0.000573f, -0.000713f, +0.000221f, +0.000143f, +0.000252f, +0.000027f, -0.000791f, +0.000289f, +0.000909f, -0.000418f, - +0.000263f, -0.000010f, +0.000511f, -0.000459f, -0.000100f, -0.000750f, -0.000048f, +0.000530f, +0.000335f, -0.000143f, - -0.000612f, +0.000104f, -0.000012f, -0.000194f, +0.000407f, +0.000070f, -0.000007f, -0.000137f, -0.000192f, -0.000022f, - -0.000035f, +0.000045f, +0.000157f, +0.000191f, -0.000105f, +0.000041f, +0.000107f, -0.000250f, -0.000053f, -0.000028f, - +0.000093f, +0.000172f, -0.000100f, +0.000141f, -0.000030f, +0.000102f, -0.000004f, +0.000057f, +0.000048f, -0.000065f, - +0.000073f, +0.000031f, -0.000126f, +0.000011f, +0.000073f, +0.000033f - }, - { - +0.000691f, -0.009124f, -0.002606f, +0.001524f, -0.000041f, -0.000186f, -0.000166f, -0.000699f, +0.000563f, -0.000398f, - -0.001084f, -0.001493f, +0.002742f, -0.004618f, -0.003227f, +0.002893f, +0.001082f, +0.000297f, -0.001061f, +0.000887f, - -0.000265f, -0.002933f, -0.000525f, +0.000818f, +0.002138f, +0.000524f, +0.000201f, -0.001916f, -0.000013f, +0.000166f, - +0.000370f, -0.001507f, -0.000969f, +0.001975f, -0.000583f, -0.000032f, -0.000426f, +0.000860f, +0.000389f, -0.000039f, - +0.000234f, -0.000379f, +0.000119f, +0.000571f, -0.000471f, +0.000497f, +0.000200f, +0.000196f, -0.000091f, +0.000534f, - -0.000051f, -0.000178f, +0.000412f, -0.000001f, +0.000173f, -0.000217f, -0.000266f, +0.000014f, +0.000508f, -0.000349f, - +0.000467f, +0.000108f, -0.000135f, -0.000188f, -0.000222f, +0.000524f, +0.000107f, +0.000180f, +0.000032f, -0.000099f, - +0.000301f, +0.000095f, -0.000124f, -0.000048f, -0.000065f, +0.000028f, +0.000096f, -0.000149f, -0.000101f, -0.000108f, - -0.000054f, +0.000025f, -0.000129f, -0.000155f, +0.000025f, -0.000080f, -0.000089f, -0.000011f, +0.000060f, -0.000014f, - -0.000022f, +0.000073f, +0.000028f, -0.000076f, -0.000048f, +0.000073f - }, - { - +0.004403f, -0.015490f, -0.002756f, +0.001344f, -0.002619f, +0.003416f, -0.000868f, +0.000433f, -0.001082f, +0.000486f, - -0.000895f, +0.001094f, -0.001390f, +0.009125f, +0.001932f, -0.001869f, +0.001686f, -0.000430f, -0.002353f, +0.001915f, - +0.000550f, -0.000580f, -0.000210f, +0.001131f, -0.000390f, +0.002224f, -0.000320f, +0.000071f, +0.000758f, -0.000025f, - -0.000561f, +0.000216f, +0.001517f, -0.000137f, +0.000295f, +0.001062f, +0.001038f, -0.000656f, +0.000156f, +0.000569f, - -0.000935f, -0.000526f, +0.000708f, -0.000266f, -0.000154f, -0.000528f, +0.000373f, -0.000960f, +0.000056f, -0.000412f, - -0.000124f, +0.000132f, +0.000218f, +0.000655f, -0.000083f, -0.000066f, -0.000195f, -0.000075f, -0.000039f, +0.000118f, - +0.000318f, -0.000395f, -0.000033f, -0.000079f, -0.000118f, +0.000074f, -0.000182f, -0.000107f, +0.000283f, +0.000270f, - -0.000231f, -0.000131f, +0.000283f, -0.000154f, +0.000023f, +0.000092f, +0.000105f, +0.000170f, -0.000012f, +0.000055f, - -0.000167f, +0.000046f, +0.000154f, +0.000011f, -0.000099f, -0.000086f, -0.000334f, +0.000038f, -0.000076f, +0.000012f, - -0.000018f, +0.000003f, +0.000131f, -0.000053f, +0.000079f, -0.000009f - }, - { - +0.000528f, -0.001415f, +0.001135f, -0.000480f, -0.000412f, -0.000509f, -0.000087f, -0.000750f, +0.000432f, -0.002128f, - +0.000498f, -0.000579f, -0.002609f, -0.011920f, +0.018061f, -0.004564f, -0.003033f, +0.000009f, +0.002524f, +0.005250f, - -0.002003f, +0.001230f, -0.001636f, +0.002599f, +0.000410f, +0.000582f, +0.002584f, +0.000746f, -0.002586f, +0.000936f, - -0.000554f, +0.000430f, +0.000600f, -0.000302f, -0.000741f, -0.001023f, +0.000097f, -0.001022f, +0.000747f, -0.000663f, - +0.001108f, +0.000269f, -0.000467f, -0.000482f, -0.000401f, -0.000362f, -0.000085f, -0.000132f, +0.000081f, -0.000456f, - -0.000070f, +0.000516f, -0.000343f, -0.000156f, +0.000292f, -0.000403f, -0.000024f, +0.000498f, +0.000459f, -0.000246f, - +0.000496f, +0.000041f, -0.000165f, -0.000107f, +0.000120f, -0.000196f, -0.000172f, +0.000095f, +0.000089f, +0.000216f, - -0.000179f, +0.000094f, +0.000079f, +0.000144f, -0.000067f, +0.000138f, +0.000002f, +0.000075f, -0.000055f, +0.000003f, - +0.000138f, +0.000011f, +0.000045f, -0.000060f, -0.000107f, -0.000045f, -0.000034f, +0.000084f, +0.000052f, -0.000099f, - +0.000110f, -0.000044f, -0.000076f, +0.000011f, +0.000052f, -0.000062f - }, - { - +0.007737f, -0.014121f, +0.000270f, +0.009152f, -0.000532f, +0.001949f, -0.002082f, -0.001105f, +0.000796f, +0.000654f, - +0.002619f, +0.000382f, -0.000377f, +0.002796f, +0.006061f, +0.003961f, -0.000854f, -0.000490f, -0.000772f, -0.000166f, - -0.002525f, +0.001692f, -0.000463f, +0.001276f, +0.000712f, -0.001381f, +0.001583f, +0.002366f, +0.000284f, -0.001116f, - -0.000657f, +0.000887f, -0.001403f, +0.000404f, -0.001282f, +0.000702f, +0.000579f, +0.000447f, +0.001226f, +0.000277f, - +0.002178f, +0.000358f, -0.000620f, +0.000389f, +0.000478f, -0.000031f, +0.000389f, +0.000345f, +0.000323f, +0.000627f, - -0.000595f, -0.000086f, +0.000260f, +0.000458f, -0.000445f, +0.000212f, -0.000317f, -0.000238f, -0.000613f, -0.000095f, - -0.000005f, -0.000402f, -0.000195f, -0.000031f, +0.000335f, -0.000404f, -0.000031f, +0.000112f, -0.000073f, -0.000008f, - +0.000084f, -0.000080f, -0.000080f, +0.000162f, -0.000057f, +0.000028f, -0.000047f, -0.000059f, +0.000181f, -0.000174f, - -0.000095f, +0.000174f, +0.000057f, -0.000023f, +0.000090f, +0.000093f, +0.000029f, +0.000040f, -0.000009f, -0.000029f, - -0.000012f, -0.000003f, +0.000035f, -0.000016f, +0.000016f, +0.000008f - } - }, - { - { - +0.001334f, -0.007753f, -0.011840f, -0.002263f, +0.000256f, -0.000754f, -0.000088f, +0.000316f, -0.000266f, -0.001733f, - -0.002848f, -0.001427f, -0.003560f, -0.002394f, +0.002613f, -0.002694f, +0.000317f, -0.002351f, -0.001326f, +0.003025f, - +0.001833f, -0.001321f, -0.002479f, -0.002113f, -0.001298f, +0.001282f, +0.002356f, -0.000616f, -0.000758f, -0.001688f, - -0.001629f, -0.000453f, -0.003791f, +0.000910f, -0.000265f, +0.000462f, +0.000105f, -0.001771f, +0.001633f, -0.001135f, - +0.000437f, -0.001156f, +0.000387f, -0.000581f, +0.000971f, +0.000475f, +0.000156f, +0.000595f, +0.000230f, -0.000520f, - -0.000665f, +0.000199f, -0.000278f, +0.000119f, -0.000111f, -0.000145f, +0.000030f, -0.000133f, +0.000914f, -0.000127f, - +0.000051f, +0.000022f, +0.000032f, +0.000021f, -0.000028f, -0.000296f, -0.000283f, +0.000010f, -0.000216f, -0.000185f, - -0.000255f, -0.000019f, +0.000079f, +0.000034f, +0.000025f, +0.000078f, +0.000007f, +0.000026f, -0.000109f, -0.000064f, - -0.000049f, +0.000119f, -0.000019f, -0.000027f, -0.000072f, -0.000065f, +0.000085f, -0.000046f, -0.000003f, +0.000044f, - +0.000129f, -0.000022f, +0.000037f, +0.000045f, +0.000009f, +0.000076f - }, - { - +0.005304f, +0.074682f, -0.018461f, -0.000582f, +0.001260f, +0.000091f, +0.000903f, +0.002273f, +0.001638f, +0.001318f, - +0.001262f, +0.000378f, +0.000282f, -0.000711f, +0.000464f, +0.001425f, +0.002996f, +0.001349f, -0.000543f, -0.000025f, - -0.001018f, +0.000670f, -0.000368f, -0.000718f, +0.000706f, +0.000247f, +0.000574f, +0.000369f, +0.000810f, +0.000540f, - +0.000282f, -0.000028f, +0.001121f, +0.001079f, -0.000489f, -0.001734f, +0.000449f, +0.000363f, +0.000408f, +0.000661f, - +0.001344f, +0.000441f, -0.000816f, -0.000198f, +0.000236f, -0.000203f, +0.000489f, -0.000281f, -0.000199f, -0.000336f, - +0.000034f, +0.000148f, -0.000142f, -0.000087f, +0.000154f, -0.000134f, +0.000025f, -0.000416f, +0.000159f, +0.000151f, - -0.000016f, -0.000106f, +0.000280f, -0.000009f, +0.000245f, +0.000077f, +0.000146f, +0.000115f, -0.000240f, -0.000040f, - +0.000004f, -0.000058f, +0.000143f, -0.000087f, -0.000078f, +0.000207f, -0.000145f, +0.000064f, +0.000200f, -0.000044f, - -0.000025f, -0.000058f, +0.000059f, +0.000011f, -0.000103f, +0.000010f, +0.000126f, -0.000086f, +0.000028f, -0.000005f, - +0.000023f, -0.000016f, -0.000007f, -0.000031f, +0.000041f, -0.000040f - }, - { - +0.004429f, +0.076451f, -0.006205f, +0.006976f, -0.005058f, -0.000151f, +0.000297f, -0.000226f, +0.000290f, +0.000027f, - +0.000786f, +0.000682f, -0.000909f, +0.001815f, -0.001017f, -0.002541f, -0.003012f, +0.000638f, -0.000346f, -0.001462f, - -0.000624f, -0.001197f, -0.000399f, +0.000518f, -0.000077f, -0.001165f, +0.000661f, +0.000985f, +0.000206f, -0.000663f, - -0.001553f, +0.001628f, -0.000531f, -0.000135f, +0.001615f, -0.000082f, -0.000254f, +0.000400f, -0.000780f, +0.000160f, - -0.000745f, -0.000104f, +0.001426f, -0.000335f, +0.000300f, +0.001221f, +0.001158f, -0.000229f, -0.000074f, -0.000494f, - -0.000367f, +0.000418f, +0.000541f, -0.000493f, +0.000463f, -0.000555f, +0.000049f, -0.000195f, +0.000043f, +0.000004f, - +0.000188f, +0.000188f, -0.000053f, -0.000332f, -0.000242f, -0.000013f, -0.000229f, -0.000177f, +0.000005f, -0.000139f, - -0.000243f, -0.000063f, -0.000016f, -0.000066f, +0.000112f, -0.000098f, -0.000045f, -0.000002f, +0.000150f, -0.000050f, - -0.000033f, -0.000040f, -0.000002f, -0.000085f, -0.000001f, +0.000166f, -0.000039f, +0.000073f, +0.000023f, +0.000061f, - +0.000011f, -0.000067f, -0.000009f, -0.000035f, -0.000009f, +0.000027f - }, - { - -0.000885f, +0.005728f, +0.001165f, -0.000029f, -0.000495f, +0.000213f, +0.000078f, +0.000448f, +0.000285f, -0.000336f, - -0.000096f, -0.000418f, +0.000539f, -0.002426f, +0.000213f, -0.002681f, -0.000932f, +0.002836f, -0.000504f, -0.002729f, - +0.001703f, +0.000976f, -0.000892f, +0.000570f, -0.000937f, +0.000121f, +0.004260f, -0.001513f, -0.001365f, +0.002217f, - -0.000811f, -0.000117f, -0.000033f, +0.000913f, -0.000874f, -0.000114f, -0.001255f, +0.000479f, +0.000311f, -0.000295f, - +0.000554f, -0.000193f, +0.000557f, +0.000371f, +0.000090f, +0.000212f, -0.000951f, -0.000235f, +0.000008f, -0.000322f, - +0.000133f, +0.000269f, -0.000337f, +0.000000f, +0.000058f, -0.000618f, +0.000196f, +0.000180f, -0.000079f, +0.000471f, - +0.000114f, -0.000209f, -0.000108f, -0.000030f, -0.000134f, -0.000129f, -0.000000f, +0.000151f, -0.000203f, -0.000056f, - +0.000016f, +0.000110f, +0.000073f, -0.000253f, -0.000001f, -0.000078f, +0.000010f, -0.000025f, -0.000242f, +0.000022f, - +0.000019f, -0.000022f, -0.000026f, +0.000016f, -0.000051f, +0.000058f, -0.000003f, -0.000017f, -0.000042f, -0.000022f, - +0.000054f, -0.000005f, -0.000095f, -0.000071f, +0.000022f, -0.000050f - }, - { - +0.009158f, +0.062902f, +0.002527f, -0.004743f, +0.000216f, -0.000164f, -0.001178f, -0.001082f, +0.000721f, +0.000437f, - +0.000840f, -0.001016f, +0.002398f, +0.000584f, -0.000119f, +0.001497f, -0.002836f, -0.005021f, +0.000900f, +0.000819f, - +0.001514f, -0.000164f, -0.001599f, -0.001076f, +0.000705f, -0.000491f, -0.000115f, +0.000781f, +0.000438f, +0.000021f, - -0.000106f, -0.000906f, -0.000572f, -0.000198f, +0.000672f, +0.002183f, -0.000633f, +0.001162f, +0.000163f, -0.000182f, - +0.001010f, -0.000092f, +0.000661f, -0.000709f, +0.000183f, -0.000409f, -0.000243f, -0.000052f, +0.000061f, +0.000332f, - +0.000217f, +0.000298f, -0.000184f, -0.000382f, +0.000117f, +0.000066f, -0.000130f, -0.000537f, +0.000296f, -0.000110f, - -0.000019f, +0.000397f, +0.000113f, -0.000229f, -0.000134f, -0.000253f, -0.000092f, -0.000133f, -0.000197f, -0.000197f, - +0.000011f, -0.000004f, +0.000125f, +0.000289f, -0.000051f, -0.000052f, -0.000126f, -0.000257f, +0.000060f, -0.000110f, - -0.000022f, -0.000075f, -0.000012f, -0.000155f, +0.000089f, +0.000061f, -0.000090f, +0.000072f, -0.000005f, -0.000003f, - +0.000065f, +0.000033f, +0.000046f, +0.000066f, +0.000078f, +0.000019f - }, - { - +0.000500f, -0.008590f, -0.000997f, -0.000664f, +0.000082f, +0.000196f, +0.000134f, -0.000038f, -0.000442f, -0.000514f, - +0.000355f, +0.000178f, +0.000116f, +0.003629f, +0.011167f, -0.005710f, -0.004163f, -0.001295f, -0.000834f, -0.008892f, - -0.002704f, +0.001411f, +0.001392f, -0.003466f, +0.001288f, +0.001432f, -0.001464f, +0.002449f, -0.001156f, +0.000821f, - +0.001177f, +0.001043f, -0.000519f, -0.000424f, +0.000341f, -0.000252f, -0.000567f, -0.000148f, +0.000517f, +0.000143f, - +0.000120f, +0.000360f, +0.000732f, +0.000657f, -0.000433f, +0.000179f, +0.000333f, +0.000361f, +0.000525f, +0.000270f, - -0.000315f, -0.000391f, -0.000114f, +0.000700f, +0.000174f, -0.000290f, -0.000117f, -0.000053f, +0.000166f, +0.000126f, - -0.000207f, +0.000419f, -0.000153f, -0.000387f, -0.000171f, -0.000156f, +0.000173f, +0.000111f, -0.000038f, +0.000101f, - +0.000261f, -0.000042f, +0.000176f, +0.000128f, +0.000066f, -0.000166f, -0.000076f, -0.000096f, -0.000031f, +0.000067f, - -0.000016f, -0.000087f, +0.000023f, -0.000070f, +0.000098f, -0.000003f, -0.000038f, +0.000007f, -0.000079f, -0.000035f, - +0.000094f, +0.000043f, -0.000019f, -0.000075f, -0.000077f, -0.000024f - }, - { - +0.025753f, +0.064043f, -0.009729f, -0.001034f, +0.000151f, -0.000295f, +0.000233f, -0.001118f, -0.001201f, +0.000226f, - -0.000981f, +0.000199f, +0.000548f, -0.001147f, -0.001485f, -0.001932f, +0.000936f, -0.000977f, +0.000142f, +0.000528f, - +0.001126f, +0.000388f, -0.000726f, +0.000511f, -0.000437f, +0.000219f, -0.000271f, -0.001478f, -0.000271f, -0.000341f, - +0.001063f, +0.000667f, +0.000291f, -0.000394f, -0.001038f, +0.000164f, -0.000508f, +0.000475f, -0.000363f, +0.000746f, - +0.000555f, -0.000150f, +0.000324f, +0.000536f, +0.000050f, +0.000179f, +0.000385f, +0.001008f, -0.000329f, +0.000037f, - +0.000138f, -0.000192f, +0.000561f, -0.000069f, +0.000461f, -0.000019f, -0.000392f, +0.000266f, -0.000073f, -0.000185f, - -0.000187f, +0.000046f, +0.000092f, -0.000026f, -0.000047f, -0.000042f, -0.000238f, +0.000227f, +0.000117f, -0.000242f, - +0.000077f, +0.000165f, -0.000126f, -0.000070f, +0.000042f, +0.000070f, -0.000020f, -0.000012f, +0.000093f, -0.000074f, - -0.000070f, +0.000010f, +0.000030f, -0.000118f, +0.000026f, +0.000050f, -0.000018f, -0.000013f, +0.000024f, +0.000031f, - -0.000071f, -0.000003f, +0.000035f, +0.000051f, +0.000088f, +0.000083f - }, - { - +0.000619f, +0.001377f, -0.004807f, +0.000464f, +0.000037f, +0.000305f, +0.000291f, +0.000014f, -0.000252f, -0.000547f, - +0.000285f, -0.000319f, +0.001111f, +0.000566f, +0.000167f, -0.003353f, -0.000980f, +0.001734f, +0.000306f, -0.000812f, - +0.003744f, +0.002023f, +0.000909f, +0.001551f, -0.000151f, +0.001089f, -0.001902f, -0.000031f, -0.001134f, +0.000790f, - +0.000354f, +0.001523f, +0.001513f, -0.001413f, +0.000380f, -0.000089f, +0.000241f, -0.000095f, -0.000301f, +0.000203f, - +0.000285f, +0.000185f, -0.000413f, +0.000570f, +0.000181f, -0.000206f, -0.000156f, -0.000185f, +0.000156f, -0.000631f, - -0.000309f, -0.000146f, -0.000204f, -0.000224f, -0.000079f, -0.000438f, -0.000660f, -0.000083f, +0.000307f, +0.000392f, - +0.000396f, +0.000216f, +0.000206f, +0.000183f, +0.000136f, +0.000452f, +0.000097f, -0.000141f, -0.000083f, -0.000154f, - +0.000153f, +0.000152f, +0.000106f, -0.000035f, -0.000150f, -0.000005f, +0.000071f, -0.000066f, -0.000087f, -0.000088f, - -0.000026f, +0.000005f, +0.000035f, +0.000131f, +0.000052f, -0.000067f, +0.000047f, -0.000020f, +0.000006f, +0.000013f, - -0.000022f, +0.000123f, -0.000008f, +0.000036f, +0.000023f, +0.000001f - }, - { - -0.013345f, +0.011591f, +0.009666f, +0.001906f, -0.001908f, -0.000902f, +0.000171f, +0.000151f, +0.000619f, -0.000534f, - +0.000430f, +0.001176f, +0.001230f, -0.001838f, +0.000308f, +0.001069f, -0.002715f, -0.000284f, -0.000210f, +0.000092f, - -0.000684f, -0.000484f, +0.000453f, +0.000287f, +0.000789f, -0.000584f, +0.000457f, +0.000992f, +0.001703f, -0.000799f, - -0.000356f, -0.000840f, -0.000191f, -0.000345f, +0.000767f, -0.000589f, +0.001708f, +0.000903f, -0.002773f, -0.001132f, - +0.001301f, -0.001085f, -0.000656f, +0.000065f, -0.000070f, -0.000330f, -0.000709f, -0.001098f, +0.000402f, +0.000384f, - -0.000394f, -0.000392f, +0.000293f, -0.000134f, -0.000121f, -0.000177f, -0.000135f, -0.000343f, -0.000313f, +0.000229f, - +0.000719f, +0.000226f, -0.000007f, +0.000156f, +0.000324f, +0.000515f, +0.000252f, +0.000066f, -0.000054f, -0.000225f, - -0.000033f, +0.000156f, -0.000095f, -0.000294f, -0.000065f, +0.000098f, +0.000201f, +0.000094f, +0.000164f, -0.000076f, - +0.000031f, -0.000039f, -0.000022f, -0.000021f, +0.000102f, +0.000003f, -0.000076f, +0.000016f, +0.000030f, -0.000042f, - -0.000093f, -0.000027f, +0.000024f, +0.000038f, -0.000063f, +0.000042f - }, - { - -0.000808f, +0.008320f, -0.002440f, +0.006085f, +0.000946f, +0.000261f, +0.001660f, +0.001069f, +0.000377f, -0.000530f, - -0.002198f, +0.000320f, +0.001663f, +0.001121f, +0.001054f, -0.001139f, -0.001281f, -0.001860f, -0.004317f, -0.002238f, - +0.001921f, +0.000876f, -0.001049f, -0.000402f, -0.000080f, +0.000627f, +0.000658f, -0.000802f, -0.001111f, +0.001195f, - +0.000219f, -0.000280f, +0.000410f, -0.000811f, +0.000872f, +0.001895f, -0.000080f, -0.000707f, +0.000100f, -0.000458f, - -0.000105f, -0.000690f, -0.000129f, +0.000075f, +0.000342f, -0.000566f, -0.000093f, -0.000322f, +0.000231f, -0.000293f, - +0.000176f, -0.000618f, +0.000032f, -0.000400f, -0.000096f, -0.000105f, -0.000369f, +0.000066f, -0.000218f, -0.000287f, - -0.000099f, +0.000089f, +0.000422f, +0.000272f, +0.000063f, +0.000157f, -0.000081f, +0.000109f, -0.000198f, -0.000257f, - +0.000189f, -0.000106f, -0.000092f, -0.000049f, -0.000050f, +0.000058f, -0.000026f, +0.000033f, -0.000025f, +0.000017f, - +0.000039f, +0.000055f, -0.000026f, -0.000083f, +0.000006f, -0.000057f, +0.000016f, +0.000093f, +0.000007f, +0.000011f, - -0.000079f, +0.000068f, -0.000010f, -0.000012f, -0.000017f, -0.000062f - }, - { - -0.008020f, -0.039874f, +0.013333f, +0.003285f, +0.000289f, +0.003033f, -0.016329f, +0.000544f, -0.001403f, +0.001355f, - +0.000040f, -0.000281f, -0.000029f, -0.002265f, +0.002558f, -0.002534f, -0.003157f, -0.002701f, -0.001040f, +0.001185f, - +0.000630f, -0.000129f, +0.000006f, -0.000462f, +0.000382f, +0.000382f, +0.000134f, +0.000263f, +0.000424f, +0.000115f, - -0.001182f, +0.000072f, +0.000146f, -0.000510f, +0.000077f, -0.000706f, -0.000181f, -0.000992f, -0.000001f, -0.000111f, - -0.001033f, -0.000578f, +0.000687f, -0.000147f, +0.000159f, -0.000291f, -0.000041f, -0.000430f, +0.000178f, +0.000025f, - +0.000062f, +0.000348f, -0.000432f, -0.000101f, +0.000365f, -0.000463f, +0.000362f, +0.000022f, -0.000173f, -0.000074f, - -0.000107f, +0.000010f, +0.000014f, +0.000161f, +0.000298f, +0.000005f, +0.000083f, -0.000062f, -0.000019f, -0.000053f, - -0.000003f, +0.000115f, +0.000201f, -0.000159f, -0.000141f, -0.000128f, -0.000016f, -0.000103f, +0.000058f, -0.000048f, - +0.000193f, -0.000027f, +0.000043f, +0.000112f, -0.000060f, -0.000034f, -0.000118f, +0.000031f, -0.000025f, +0.000088f, - +0.000020f, -0.000038f, -0.000022f, +0.000074f, +0.000038f, -0.000056f - }, - { - -0.000434f, -0.010560f, +0.000917f, -0.000686f, +0.000684f, -0.000548f, +0.000234f, +0.000133f, +0.000149f, -0.000106f, - -0.000990f, -0.001070f, -0.003201f, +0.006164f, -0.005613f, +0.002056f, +0.002078f, -0.001847f, -0.002582f, -0.000571f, - +0.001656f, +0.001295f, -0.001470f, -0.000726f, -0.000590f, +0.002384f, +0.000594f, -0.002653f, -0.000426f, -0.000086f, - -0.001799f, +0.000739f, -0.000503f, +0.001855f, -0.000531f, -0.000136f, -0.000296f, +0.000549f, -0.000555f, -0.000305f, - +0.000205f, +0.000421f, +0.000011f, -0.000077f, -0.000086f, -0.000053f, +0.000624f, +0.000288f, -0.000669f, -0.000192f, - +0.000206f, -0.000069f, +0.000294f, -0.000204f, +0.000196f, +0.000244f, +0.000035f, +0.000579f, +0.000356f, +0.000128f, - +0.000274f, -0.000166f, +0.000189f, -0.000049f, +0.000260f, +0.000206f, +0.000110f, +0.000087f, -0.000053f, -0.000012f, - +0.000065f, -0.000008f, -0.000090f, -0.000111f, -0.000158f, -0.000134f, -0.000128f, -0.000217f, -0.000009f, -0.000012f, - -0.000038f, -0.000041f, +0.000020f, +0.000015f, +0.000043f, -0.000030f, +0.000086f, +0.000095f, +0.000033f, +0.000013f, - -0.000045f, -0.000013f, -0.000004f, -0.000010f, +0.000033f, -0.000068f - }, - { - -0.002315f, -0.001648f, -0.005339f, -0.006079f, +0.000308f, -0.001397f, -0.005273f, +0.001362f, +0.001483f, +0.000593f, - -0.001526f, -0.000105f, +0.004530f, +0.001890f, +0.000164f, +0.000951f, +0.001986f, -0.001161f, -0.002044f, -0.000528f, - +0.000518f, -0.000240f, -0.000459f, +0.000077f, -0.000746f, +0.001093f, +0.000304f, -0.000107f, -0.000848f, +0.000300f, - +0.000108f, -0.000259f, +0.000505f, +0.000850f, +0.000487f, +0.000674f, +0.000104f, -0.000129f, +0.000698f, -0.000087f, - -0.000374f, +0.000319f, -0.000351f, +0.001329f, +0.000133f, +0.000223f, +0.000172f, +0.000281f, +0.000245f, -0.000504f, - -0.000222f, -0.000093f, -0.000512f, +0.000324f, -0.000369f, -0.000183f, -0.000110f, -0.000077f, +0.000217f, +0.000107f, - -0.000192f, -0.000020f, +0.000189f, -0.000291f, -0.000058f, -0.000081f, +0.000148f, +0.000033f, +0.000203f, -0.000018f, - -0.000075f, +0.000170f, +0.000074f, -0.000018f, -0.000136f, +0.000197f, +0.000075f, -0.000019f, +0.000116f, -0.000064f, - -0.000067f, +0.000161f, +0.000117f, +0.000043f, -0.000240f, -0.000161f, +0.000063f, +0.000141f, -0.000003f, +0.000063f, - +0.000020f, +0.000051f, -0.000028f, -0.000085f, -0.000046f, -0.000132f - }, - { - -0.000839f, +0.002325f, +0.000080f, -0.001401f, +0.000055f, -0.000849f, -0.001116f, -0.000227f, -0.000442f, -0.000931f, - -0.000791f, -0.001176f, +0.001304f, -0.001485f, -0.016081f, +0.000533f, -0.000304f, +0.001190f, +0.001349f, +0.001473f, - +0.000567f, +0.000353f, -0.000485f, +0.001436f, +0.000532f, +0.001702f, +0.000854f, +0.000107f, -0.003856f, +0.001165f, - +0.001009f, +0.001395f, -0.000063f, +0.000598f, -0.000342f, -0.000530f, -0.000428f, +0.000135f, -0.000082f, +0.000446f, - +0.000613f, -0.000888f, -0.000153f, -0.000088f, -0.000520f, -0.000332f, +0.000320f, -0.000596f, -0.000228f, -0.000610f, - +0.000032f, -0.000152f, -0.000039f, +0.000086f, +0.000181f, -0.000040f, +0.000234f, +0.000182f, +0.000076f, +0.000514f, - -0.000056f, -0.000403f, +0.000086f, -0.000061f, -0.000113f, -0.000016f, +0.000045f, -0.000091f, -0.000006f, +0.000020f, - -0.000083f, +0.000370f, +0.000066f, +0.000036f, -0.000018f, +0.000110f, +0.000022f, +0.000308f, -0.000107f, -0.000077f, - -0.000023f, -0.000131f, +0.000099f, +0.000014f, +0.000011f, +0.000112f, +0.000070f, +0.000034f, -0.000086f, +0.000058f, - -0.000093f, -0.000131f, -0.000065f, +0.000080f, -0.000009f, -0.000061f - }, - { - -0.005050f, +0.008647f, +0.001695f, +0.002175f, +0.001104f, -0.002890f, -0.002048f, -0.000882f, +0.000948f, +0.001535f, - -0.000365f, +0.002025f, -0.002218f, +0.000708f, +0.011507f, +0.000374f, -0.004569f, +0.003385f, -0.002589f, -0.000669f, - -0.000548f, +0.001065f, +0.000545f, +0.000137f, +0.000859f, -0.000068f, +0.002398f, +0.001266f, -0.000054f, -0.000771f, - -0.000595f, -0.000014f, -0.000292f, -0.001067f, +0.000937f, +0.001077f, +0.001700f, +0.000140f, +0.000510f, +0.000903f, - +0.001002f, +0.000348f, -0.000150f, +0.000513f, +0.000410f, +0.000196f, +0.001217f, +0.000335f, +0.000216f, +0.000032f, - -0.000386f, -0.000128f, -0.000337f, -0.000250f, -0.000302f, -0.000198f, +0.000001f, -0.000140f, -0.000461f, +0.000072f, - -0.000132f, -0.000091f, -0.000058f, +0.000238f, +0.000133f, +0.000061f, +0.000030f, -0.000041f, -0.000083f, +0.000097f, - -0.000000f, +0.000122f, +0.000246f, -0.000285f, -0.000095f, -0.000048f, +0.000090f, +0.000028f, -0.000037f, -0.000087f, - +0.000160f, -0.000028f, +0.000012f, +0.000065f, +0.000002f, +0.000003f, +0.000056f, -0.000062f, -0.000156f, +0.000082f, - +0.000015f, +0.000047f, +0.000036f, +0.000038f, +0.000035f, -0.000062f - } - }, - { - { - -0.000859f, +0.009238f, +0.005591f, +0.000521f, -0.001055f, -0.000420f, +0.000314f, +0.000145f, +0.000133f, -0.001206f, - +0.000445f, +0.000860f, +0.002071f, +0.001420f, -0.001762f, -0.001434f, +0.004912f, -0.001191f, -0.000879f, +0.002460f, - -0.000136f, -0.003493f, -0.000125f, -0.000784f, -0.000978f, +0.000236f, +0.000421f, -0.000372f, +0.000026f, -0.001125f, - -0.000670f, +0.000553f, -0.001433f, +0.002012f, -0.000069f, -0.000348f, +0.000228f, -0.001758f, -0.000210f, -0.001211f, - +0.000492f, -0.000565f, +0.001524f, -0.000398f, +0.000585f, +0.000406f, +0.000369f, +0.000590f, +0.000529f, -0.000197f, - -0.000827f, +0.000180f, -0.000234f, -0.000407f, -0.000015f, +0.000138f, +0.000101f, +0.000065f, +0.000298f, -0.000433f, - +0.000009f, -0.000343f, +0.000131f, +0.000227f, +0.000047f, -0.000103f, +0.000105f, +0.000157f, -0.000233f, +0.000123f, - +0.000012f, -0.000020f, +0.000083f, +0.000108f, -0.000059f, +0.000056f, +0.000026f, +0.000012f, -0.000031f, +0.000068f, - -0.000125f, -0.000056f, -0.000133f, -0.000056f, -0.000026f, +0.000107f, +0.000121f, -0.000035f, +0.000005f, +0.000101f, - +0.000002f, -0.000036f, -0.000036f, +0.000079f, +0.000061f, +0.000051f - }, - { - -0.006875f, +0.113664f, +0.016929f, -0.001482f, +0.001689f, -0.000689f, +0.001401f, +0.001354f, -0.000623f, -0.000064f, - +0.000074f, -0.001145f, +0.000391f, +0.000700f, +0.001716f, +0.003109f, +0.001840f, +0.001093f, -0.000653f, +0.000179f, - -0.000418f, +0.000452f, -0.000203f, -0.000803f, +0.000064f, +0.000347f, +0.000476f, +0.000332f, -0.000470f, -0.000386f, - +0.001321f, +0.000544f, +0.001030f, +0.001091f, +0.000003f, -0.001060f, +0.001019f, +0.000413f, +0.000515f, +0.000394f, - +0.000394f, -0.000017f, -0.000495f, -0.000260f, +0.000138f, +0.000007f, +0.000162f, +0.000521f, -0.000059f, -0.000624f, - +0.000295f, +0.000174f, -0.000258f, -0.000084f, +0.000208f, +0.000031f, -0.000248f, -0.000391f, +0.000128f, -0.000198f, - -0.000237f, -0.000130f, +0.000098f, -0.000093f, +0.000284f, -0.000149f, -0.000075f, -0.000162f, -0.000091f, +0.000229f, - -0.000018f, +0.000031f, +0.000023f, -0.000075f, +0.000140f, -0.000006f, -0.000119f, +0.000071f, +0.000130f, -0.000060f, - -0.000050f, -0.000010f, -0.000009f, -0.000089f, -0.000063f, +0.000161f, -0.000017f, -0.000044f, -0.000021f, -0.000030f, - +0.000087f, +0.000039f, -0.000024f, +0.000016f, -0.000017f, -0.000000f - }, - { - -0.004013f, +0.082676f, +0.000797f, +0.001880f, -0.003681f, +0.000714f, +0.000020f, +0.000118f, +0.000623f, +0.000035f, - -0.001089f, -0.000463f, -0.000924f, +0.001837f, -0.000021f, -0.000482f, -0.002714f, +0.000444f, +0.000327f, -0.000026f, - +0.002062f, -0.000619f, -0.000742f, -0.001274f, -0.000219f, -0.000775f, +0.001080f, +0.000725f, +0.000780f, -0.000054f, - -0.001703f, -0.000055f, -0.001154f, -0.000525f, -0.000203f, +0.000119f, +0.000155f, +0.000842f, +0.000068f, +0.000100f, - -0.000757f, +0.000265f, +0.001079f, -0.000514f, -0.000328f, +0.000972f, +0.000599f, -0.000495f, -0.000302f, -0.000538f, - +0.000118f, +0.000244f, +0.000205f, -0.000306f, +0.001003f, -0.000482f, -0.000239f, +0.000257f, +0.000290f, +0.000019f, - -0.000235f, -0.000249f, +0.000088f, +0.000009f, -0.000252f, -0.000027f, -0.000254f, +0.000094f, -0.000053f, -0.000202f, - -0.000113f, +0.000048f, +0.000041f, -0.000076f, +0.000135f, -0.000082f, +0.000071f, -0.000076f, +0.000155f, -0.000061f, - -0.000122f, -0.000118f, +0.000006f, +0.000024f, -0.000012f, +0.000094f, -0.000006f, +0.000018f, -0.000006f, +0.000059f, - -0.000075f, -0.000001f, -0.000017f, +0.000011f, +0.000016f, -0.000016f - }, - { - +0.000758f, +0.005444f, -0.001330f, -0.000188f, -0.000041f, +0.000349f, -0.000131f, -0.000046f, +0.000060f, -0.000060f, - +0.000494f, +0.000027f, +0.000491f, +0.001539f, +0.009097f, +0.000473f, -0.000749f, +0.001907f, +0.000896f, -0.001878f, - +0.000842f, +0.000267f, +0.001044f, +0.002017f, +0.000260f, +0.001705f, +0.003499f, -0.000393f, +0.000289f, +0.002108f, - -0.001286f, -0.000787f, -0.000597f, +0.000070f, -0.000278f, +0.000538f, +0.000667f, +0.000200f, -0.000368f, -0.000083f, - -0.000116f, -0.000574f, +0.000171f, +0.000535f, +0.000167f, -0.000138f, -0.000756f, +0.000392f, +0.000075f, -0.000453f, - -0.000041f, -0.000467f, -0.000331f, -0.000121f, -0.000022f, -0.000112f, +0.000045f, -0.000118f, +0.000011f, +0.000144f, - -0.000097f, -0.000297f, -0.000074f, -0.000100f, -0.000053f, -0.000019f, -0.000016f, -0.000081f, -0.000187f, +0.000001f, - +0.000212f, +0.000085f, +0.000067f, -0.000192f, +0.000262f, -0.000023f, -0.000095f, -0.000002f, -0.000060f, +0.000047f, - +0.000097f, -0.000049f, -0.000007f, -0.000054f, -0.000024f, +0.000071f, -0.000017f, -0.000044f, -0.000103f, +0.000043f, - +0.000071f, -0.000066f, -0.000081f, -0.000014f, -0.000016f, -0.000062f - }, - { - -0.012567f, +0.029668f, -0.003540f, -0.004273f, +0.000547f, -0.000006f, +0.000098f, +0.000141f, +0.001230f, -0.000683f, - -0.002032f, -0.000512f, +0.000865f, -0.000235f, -0.001160f, +0.000201f, +0.000359f, -0.001655f, -0.000193f, +0.000632f, - +0.000539f, -0.000326f, +0.001021f, +0.001091f, +0.000042f, +0.000081f, -0.000630f, +0.000400f, +0.001347f, +0.000880f, - -0.000248f, -0.000511f, -0.000639f, -0.000422f, -0.000101f, +0.000844f, -0.000678f, +0.000299f, -0.000405f, +0.000132f, - +0.000676f, -0.000505f, +0.000367f, -0.000567f, +0.000367f, -0.000675f, -0.000240f, -0.000268f, -0.000474f, -0.000154f, - -0.000162f, +0.000188f, +0.000198f, -0.000211f, +0.000116f, -0.000149f, +0.000083f, -0.000184f, +0.000327f, -0.000055f, - +0.000324f, +0.000405f, -0.000036f, +0.000045f, +0.000104f, -0.000182f, -0.000057f, +0.000079f, +0.000038f, -0.000059f, - +0.000092f, +0.000065f, +0.000169f, +0.000009f, -0.000149f, +0.000047f, -0.000094f, -0.000095f, +0.000043f, -0.000078f, - +0.000086f, +0.000006f, +0.000017f, -0.000009f, +0.000042f, +0.000003f, +0.000008f, +0.000058f, +0.000059f, +0.000028f, - +0.000033f, +0.000039f, +0.000044f, +0.000019f, -0.000038f, -0.000032f - }, - { - +0.000256f, -0.007825f, +0.003786f, +0.000253f, +0.000152f, +0.000032f, -0.000304f, -0.000078f, -0.000263f, +0.000077f, - +0.000794f, +0.000238f, +0.000040f, +0.001489f, +0.008666f, -0.003043f, +0.000102f, +0.000200f, -0.001957f, -0.003857f, - +0.000504f, -0.000027f, -0.000446f, -0.002383f, +0.002172f, +0.000843f, -0.002552f, +0.001830f, -0.001621f, -0.000059f, - -0.000811f, -0.000563f, +0.000035f, -0.000038f, +0.000382f, +0.000039f, -0.000065f, +0.000167f, +0.000767f, +0.000435f, - -0.000221f, +0.000896f, +0.000236f, -0.000250f, -0.000648f, +0.000043f, +0.000361f, +0.000508f, -0.000207f, -0.000156f, - -0.000253f, -0.000020f, -0.000039f, +0.000285f, -0.000257f, +0.000019f, +0.000288f, +0.000170f, +0.000058f, +0.000039f, - -0.000136f, -0.000031f, +0.000002f, -0.000050f, -0.000073f, -0.000106f, -0.000039f, +0.000048f, +0.000017f, +0.000138f, - +0.000096f, -0.000075f, +0.000123f, -0.000029f, -0.000114f, -0.000131f, -0.000030f, -0.000148f, +0.000040f, +0.000183f, - -0.000065f, -0.000022f, +0.000057f, -0.000078f, +0.000021f, +0.000010f, -0.000001f, +0.000010f, -0.000008f, +0.000006f, - +0.000083f, -0.000034f, -0.000073f, -0.000014f, +0.000010f, +0.000053f - }, - { - -0.017516f, +0.025808f, +0.009796f, +0.000743f, -0.001017f, +0.000106f, -0.000053f, -0.000026f, -0.000148f, +0.001102f, - +0.000199f, +0.000120f, -0.000338f, -0.000055f, -0.000371f, -0.000054f, +0.001123f, -0.000741f, +0.000834f, -0.000285f, - +0.000829f, +0.000092f, -0.000643f, +0.000585f, -0.000167f, -0.000087f, -0.000405f, -0.000355f, +0.000332f, +0.000536f, - +0.000191f, -0.000857f, -0.000192f, -0.000319f, -0.000057f, +0.000761f, -0.000526f, +0.000547f, +0.000020f, +0.000329f, - +0.000571f, -0.000227f, +0.000544f, +0.000730f, -0.000047f, -0.000418f, +0.000484f, +0.000571f, -0.000448f, +0.000396f, - +0.000284f, -0.000118f, +0.000378f, -0.000123f, -0.000126f, -0.000196f, -0.000094f, +0.000159f, -0.000298f, -0.000036f, - +0.000210f, +0.000206f, +0.000067f, -0.000087f, -0.000077f, -0.000140f, -0.000279f, +0.000248f, +0.000161f, -0.000167f, - +0.000162f, +0.000138f, -0.000271f, -0.000048f, -0.000042f, +0.000026f, -0.000028f, -0.000025f, +0.000057f, -0.000100f, - +0.000059f, -0.000001f, -0.000063f, -0.000079f, +0.000195f, -0.000090f, -0.000021f, +0.000019f, +0.000051f, +0.000017f, - -0.000128f, +0.000062f, -0.000020f, +0.000060f, +0.000020f, +0.000006f - }, - { - -0.000159f, -0.001417f, -0.001709f, +0.001439f, +0.000121f, +0.000166f, -0.000149f, +0.000267f, +0.000471f, -0.000005f, - +0.000909f, -0.000045f, +0.000388f, -0.000257f, +0.008103f, +0.005034f, -0.001720f, -0.001130f, -0.000106f, -0.002058f, - +0.001846f, +0.000658f, +0.001225f, -0.000091f, -0.004199f, -0.000048f, -0.002193f, -0.000407f, -0.002019f, +0.000619f, - +0.000373f, +0.000583f, +0.000425f, -0.000948f, +0.000332f, -0.000026f, +0.000103f, -0.000167f, -0.001023f, -0.000188f, - -0.000335f, +0.000205f, -0.000314f, +0.000308f, +0.000030f, -0.000385f, -0.000452f, +0.000036f, +0.000417f, -0.000433f, - -0.000300f, -0.000568f, +0.000218f, -0.000321f, +0.000002f, -0.000167f, -0.000230f, +0.000369f, +0.000390f, -0.000240f, - -0.000007f, -0.000008f, +0.000150f, +0.000076f, +0.000012f, +0.000287f, -0.000048f, -0.000074f, +0.000008f, -0.000084f, - -0.000059f, -0.000036f, +0.000093f, -0.000047f, -0.000158f, +0.000061f, -0.000113f, -0.000143f, -0.000035f, -0.000024f, - +0.000180f, +0.000045f, -0.000060f, +0.000029f, +0.000009f, -0.000004f, -0.000028f, +0.000059f, -0.000008f, -0.000093f, - -0.000011f, +0.000028f, +0.000015f, +0.000052f, -0.000005f, +0.000012f - }, - { - +0.005441f, +0.018446f, -0.006755f, +0.001242f, -0.001224f, -0.000407f, +0.000585f, +0.001355f, -0.000184f, -0.001067f, - +0.001576f, +0.001491f, +0.000069f, -0.003340f, -0.000368f, +0.000161f, -0.000994f, +0.001494f, +0.000327f, +0.000058f, - -0.000363f, +0.000475f, +0.000060f, -0.000502f, +0.000096f, -0.000701f, +0.000128f, -0.000328f, +0.000458f, +0.000008f, - +0.000997f, +0.000512f, +0.000529f, -0.000535f, +0.000138f, -0.001554f, +0.000136f, +0.000611f, -0.000897f, -0.000192f, - +0.001301f, -0.000675f, -0.000619f, -0.000550f, +0.000024f, -0.000289f, +0.000047f, +0.000405f, +0.000103f, -0.000279f, - -0.000363f, +0.000129f, +0.000724f, +0.000020f, -0.000101f, -0.000003f, -0.000120f, -0.000197f, -0.000200f, +0.000099f, - +0.000197f, -0.000118f, +0.000039f, +0.000157f, +0.000373f, +0.000095f, -0.000263f, -0.000127f, -0.000150f, -0.000158f, - +0.000065f, +0.000112f, -0.000100f, -0.000171f, -0.000212f, +0.000225f, +0.000167f, -0.000143f, +0.000052f, +0.000004f, - -0.000021f, +0.000112f, +0.000089f, +0.000123f, +0.000112f, +0.000096f, -0.000087f, -0.000052f, -0.000039f, +0.000041f, - +0.000095f, +0.000008f, +0.000039f, -0.000009f, -0.000002f, +0.000028f - }, - { - +0.000504f, +0.009593f, -0.003974f, +0.007887f, -0.000525f, -0.002458f, +0.000750f, +0.000086f, -0.000240f, +0.000371f, - -0.000860f, +0.001055f, -0.000901f, +0.000467f, +0.002453f, +0.000669f, -0.001688f, -0.001894f, -0.001765f, -0.000078f, - +0.003171f, +0.000012f, -0.001449f, -0.000732f, -0.000097f, +0.000773f, +0.000935f, -0.001082f, -0.000974f, +0.000578f, - +0.000530f, -0.000423f, +0.000535f, -0.000837f, +0.000837f, +0.001216f, -0.000651f, -0.000541f, +0.000479f, -0.000678f, - +0.000040f, -0.000721f, +0.000202f, +0.000388f, +0.000181f, +0.000119f, +0.000015f, +0.000040f, +0.000308f, -0.000456f, - -0.000047f, -0.000395f, -0.000205f, -0.000158f, +0.000424f, +0.000106f, -0.000262f, +0.000112f, -0.000110f, -0.000107f, - +0.000053f, -0.000032f, +0.000221f, -0.000057f, +0.000050f, +0.000204f, -0.000223f, +0.000032f, -0.000126f, -0.000144f, - +0.000075f, +0.000068f, +0.000128f, -0.000101f, -0.000016f, +0.000076f, +0.000044f, +0.000027f, +0.000015f, +0.000068f, - -0.000011f, -0.000007f, -0.000107f, -0.000077f, -0.000020f, +0.000009f, +0.000050f, +0.000002f, -0.000048f, -0.000085f, - -0.000027f, -0.000028f, -0.000039f, +0.000022f, +0.000015f, -0.000036f - }, - { - +0.008173f, -0.021820f, +0.003651f, -0.006115f, -0.003951f, +0.005815f, -0.007016f, +0.003602f, -0.000732f, +0.000560f, - +0.000214f, -0.000482f, +0.000015f, -0.001518f, +0.003331f, -0.003031f, -0.002500f, -0.000419f, -0.000498f, +0.000611f, - +0.001787f, -0.000049f, +0.000583f, -0.000925f, +0.000159f, +0.000279f, -0.000304f, -0.000221f, -0.000108f, -0.000342f, - -0.001186f, +0.000556f, +0.000181f, -0.000603f, +0.000244f, +0.000227f, +0.000388f, -0.000256f, +0.000175f, -0.001751f, - -0.001104f, +0.000353f, +0.000466f, -0.000139f, -0.000017f, -0.000151f, +0.000378f, -0.000708f, -0.000162f, +0.000412f, - +0.000121f, +0.000044f, -0.000303f, +0.000300f, +0.000365f, -0.000223f, +0.000503f, -0.000203f, +0.000051f, +0.000098f, - -0.000014f, +0.000100f, +0.000072f, +0.000105f, +0.000005f, +0.000025f, +0.000092f, +0.000007f, -0.000023f, +0.000087f, - +0.000023f, -0.000045f, +0.000101f, -0.000180f, +0.000041f, -0.000077f, -0.000006f, +0.000034f, +0.000053f, -0.000038f, - +0.000008f, -0.000092f, +0.000061f, -0.000074f, +0.000009f, -0.000092f, -0.000044f, -0.000017f, -0.000022f, +0.000084f, - -0.000059f, +0.000003f, +0.000078f, +0.000014f, -0.000060f, -0.000009f - }, - { - +0.000230f, -0.009636f, +0.001141f, -0.000110f, +0.000267f, -0.000143f, +0.000546f, +0.000005f, +0.000057f, +0.000026f, - +0.000166f, -0.000527f, -0.002935f, +0.007896f, -0.001128f, +0.000987f, -0.000248f, -0.001994f, -0.000533f, +0.001427f, - +0.001745f, +0.001295f, -0.000372f, +0.000013f, +0.000581f, +0.002968f, +0.001709f, -0.001452f, +0.000101f, -0.001536f, - -0.000379f, +0.001136f, +0.000342f, +0.000552f, -0.000567f, -0.000566f, -0.000649f, +0.000603f, +0.000103f, -0.000456f, - +0.000448f, +0.000454f, -0.000425f, -0.000206f, +0.000113f, -0.000245f, +0.000529f, +0.000014f, -0.000701f, -0.000268f, - +0.000154f, -0.000241f, +0.000033f, -0.000211f, +0.000235f, +0.000186f, +0.000056f, +0.000574f, +0.000008f, +0.000044f, - -0.000233f, -0.000153f, +0.000137f, +0.000060f, +0.000065f, -0.000184f, +0.000153f, -0.000149f, +0.000025f, +0.000131f, - -0.000023f, -0.000145f, -0.000147f, -0.000090f, -0.000085f, -0.000058f, -0.000049f, -0.000012f, +0.000075f, +0.000061f, - +0.000009f, -0.000000f, +0.000088f, +0.000060f, +0.000014f, +0.000049f, +0.000087f, +0.000007f, -0.000025f, +0.000035f, - -0.000008f, -0.000031f, -0.000026f, +0.000063f, +0.000049f, -0.000098f - }, - { - +0.000140f, +0.006079f, +0.000181f, -0.002460f, -0.000031f, -0.001807f, -0.003154f, +0.001835f, +0.001250f, +0.000023f, - -0.000440f, +0.000293f, -0.000667f, -0.004871f, -0.000647f, +0.001531f, +0.001452f, +0.000286f, -0.000296f, -0.001624f, - +0.001160f, +0.000224f, +0.000110f, +0.000051f, -0.001484f, -0.000511f, +0.000324f, +0.000286f, -0.000135f, +0.000326f, - -0.000480f, -0.000047f, +0.000329f, +0.000247f, -0.000366f, +0.000233f, +0.000041f, -0.000435f, +0.000023f, -0.000386f, - +0.000031f, +0.000771f, -0.001071f, +0.000748f, -0.000372f, +0.000213f, -0.000458f, +0.000449f, +0.000010f, +0.000003f, - -0.000178f, -0.000193f, -0.000428f, -0.000129f, -0.000132f, -0.000209f, +0.000165f, +0.000246f, +0.000411f, -0.000146f, - -0.000229f, +0.000194f, +0.000403f, -0.000277f, +0.000048f, -0.000036f, +0.000176f, +0.000022f, -0.000141f, -0.000010f, - +0.000213f, +0.000116f, -0.000151f, +0.000034f, -0.000095f, +0.000130f, +0.000062f, -0.000114f, +0.000062f, -0.000060f, - +0.000059f, +0.000053f, -0.000055f, +0.000005f, -0.000106f, +0.000067f, +0.000142f, +0.000107f, +0.000013f, +0.000042f, - +0.000003f, -0.000012f, -0.000127f, -0.000021f, -0.000077f, -0.000089f - }, - { - +0.000491f, +0.002327f, -0.003068f, -0.001254f, +0.000700f, +0.000072f, -0.000293f, +0.000173f, -0.000182f, +0.000282f, - +0.000177f, -0.000058f, +0.000184f, +0.012208f, +0.003394f, +0.000769f, +0.000201f, +0.002247f, +0.001582f, -0.001216f, - -0.000425f, +0.000728f, -0.000036f, +0.000382f, +0.001634f, +0.001586f, -0.000562f, +0.000260f, -0.000438f, +0.001250f, - -0.000348f, +0.000555f, -0.000834f, +0.000051f, +0.000336f, +0.000129f, -0.000234f, +0.000077f, -0.000456f, +0.000389f, - +0.000026f, -0.001118f, -0.000032f, +0.000447f, +0.000122f, +0.000177f, +0.000235f, -0.000014f, +0.000125f, -0.000076f, - +0.000153f, +0.000003f, +0.000184f, +0.000184f, +0.000049f, -0.000079f, +0.000204f, +0.000007f, -0.000226f, +0.000427f, - -0.000442f, -0.000289f, +0.000063f, +0.000037f, -0.000084f, +0.000306f, +0.000108f, -0.000080f, +0.000028f, +0.000054f, - +0.000016f, +0.000254f, -0.000136f, -0.000024f, -0.000058f, +0.000008f, +0.000108f, +0.000040f, +0.000007f, -0.000082f, - -0.000097f, -0.000022f, +0.000068f, +0.000066f, +0.000050f, +0.000053f, +0.000011f, -0.000051f, +0.000017f, +0.000031f, - -0.000150f, -0.000019f, +0.000043f, -0.000000f, -0.000061f, +0.000005f - }, - { - +0.000289f, +0.015173f, -0.003839f, -0.004517f, -0.000604f, -0.002047f, +0.001186f, -0.000317f, +0.000495f, +0.000441f, - -0.004172f, +0.001514f, -0.000467f, -0.003936f, +0.000508f, -0.001122f, -0.002390f, +0.002427f, -0.002444f, +0.000636f, - +0.000185f, +0.000698f, +0.000331f, -0.000618f, +0.000940f, -0.000150f, +0.000947f, -0.000491f, -0.000149f, +0.000475f, - -0.000652f, -0.000451f, -0.000200f, -0.000804f, +0.000878f, +0.000208f, +0.001241f, -0.000448f, +0.000311f, +0.000776f, - -0.000362f, +0.000055f, +0.000541f, +0.000714f, -0.000019f, -0.000004f, +0.000283f, -0.000709f, -0.000528f, +0.000019f, - -0.000331f, +0.000006f, -0.000055f, +0.000216f, -0.000199f, -0.000070f, +0.000078f, -0.000075f, +0.000060f, +0.000235f, - -0.000126f, +0.000061f, +0.000073f, +0.000308f, +0.000065f, +0.000209f, -0.000037f, -0.000061f, -0.000144f, +0.000059f, - -0.000011f, -0.000042f, +0.000085f, -0.000213f, +0.000086f, -0.000044f, +0.000133f, +0.000012f, -0.000075f, +0.000019f, - +0.000082f, -0.000146f, +0.000055f, +0.000062f, -0.000068f, -0.000103f, +0.000012f, -0.000096f, -0.000023f, +0.000052f, - -0.000031f, +0.000028f, -0.000024f, -0.000027f, +0.000042f, -0.000022f - } - }, - { - { - +0.001003f, +0.016549f, +0.001360f, +0.000590f, -0.000599f, -0.000138f, -0.000286f, +0.000023f, +0.000158f, -0.000603f, - +0.001994f, +0.000452f, +0.003645f, +0.001926f, -0.006272f, +0.001344f, +0.001871f, +0.001104f, +0.001742f, -0.000742f, - -0.000571f, +0.000343f, +0.000857f, +0.000040f, -0.000488f, -0.000374f, -0.000850f, +0.000268f, +0.000535f, -0.000365f, - -0.000581f, +0.000405f, +0.002007f, -0.000320f, -0.000289f, -0.000346f, -0.000370f, -0.002064f, -0.001816f, -0.001096f, - +0.000763f, +0.000492f, +0.000153f, +0.000265f, +0.000491f, +0.000431f, -0.000089f, +0.000370f, -0.000146f, +0.000187f, - -0.000036f, -0.000041f, -0.000101f, -0.000257f, +0.000145f, +0.000033f, -0.000338f, +0.000068f, -0.000341f, +0.000075f, - +0.000023f, -0.000058f, +0.000272f, +0.000230f, +0.000064f, +0.000138f, +0.000160f, -0.000118f, +0.000167f, +0.000262f, - +0.000008f, -0.000194f, +0.000034f, +0.000064f, +0.000029f, +0.000009f, -0.000103f, +0.000023f, +0.000106f, +0.000061f, - -0.000140f, -0.000080f, +0.000066f, +0.000119f, +0.000094f, +0.000006f, +0.000007f, -0.000007f, +0.000030f, -0.000006f, - -0.000007f, +0.000003f, -0.000050f, +0.000052f, -0.000004f, -0.000064f - }, - { - +0.009707f, +0.113708f, -0.000805f, -0.001305f, -0.002151f, -0.000155f, +0.000581f, -0.001095f, -0.001610f, -0.000399f, - -0.000299f, -0.000785f, -0.000499f, +0.002095f, +0.002070f, -0.000120f, +0.000230f, +0.000285f, +0.002162f, -0.000217f, - -0.000073f, -0.000475f, -0.000777f, -0.000437f, -0.000092f, +0.001173f, -0.001210f, -0.000066f, -0.000293f, +0.000154f, - +0.000899f, +0.001843f, +0.000167f, -0.000328f, +0.000390f, +0.000134f, +0.000954f, -0.000912f, +0.000419f, -0.000506f, - -0.000287f, +0.000140f, +0.000716f, -0.000011f, +0.000070f, +0.000045f, -0.000102f, +0.000035f, -0.000546f, +0.000047f, - +0.000102f, +0.000186f, +0.000241f, +0.000004f, +0.000223f, -0.000098f, -0.000123f, +0.000036f, -0.000088f, -0.000034f, - +0.000002f, +0.000050f, -0.000124f, +0.000022f, -0.000114f, -0.000183f, -0.000036f, -0.000096f, +0.000199f, +0.000112f, - -0.000039f, -0.000074f, -0.000165f, +0.000052f, +0.000030f, -0.000127f, +0.000076f, -0.000094f, -0.000061f, -0.000054f, - +0.000089f, +0.000019f, -0.000108f, -0.000022f, +0.000132f, -0.000050f, -0.000064f, +0.000118f, -0.000053f, -0.000018f, - +0.000007f, +0.000020f, +0.000057f, +0.000035f, -0.000026f, -0.000000f - }, - { - +0.003454f, +0.061391f, +0.004275f, +0.003763f, +0.003032f, -0.000029f, +0.000424f, -0.000029f, +0.000223f, -0.000660f, - -0.001278f, -0.001341f, -0.000669f, -0.002987f, +0.002527f, +0.000748f, -0.001728f, -0.000576f, +0.000043f, +0.000961f, - -0.000000f, -0.000439f, +0.000216f, -0.002010f, +0.000453f, +0.000509f, +0.000861f, -0.000472f, +0.000396f, +0.000051f, - -0.000714f, -0.001105f, +0.000540f, -0.000099f, -0.001587f, +0.000216f, +0.000226f, +0.001179f, -0.000326f, +0.000039f, - -0.000613f, +0.000444f, +0.000887f, +0.000189f, +0.000211f, +0.000346f, -0.000597f, +0.000107f, -0.000019f, -0.000089f, - +0.000094f, -0.000193f, -0.000057f, +0.000282f, +0.000168f, +0.000147f, -0.000062f, +0.000436f, +0.000118f, -0.000061f, - -0.000122f, +0.000112f, +0.000397f, +0.000000f, -0.000015f, -0.000039f, -0.000029f, -0.000082f, +0.000008f, +0.000082f, - +0.000001f, -0.000050f, +0.000081f, +0.000088f, +0.000100f, -0.000059f, +0.000088f, -0.000040f, -0.000064f, -0.000077f, - -0.000136f, -0.000040f, +0.000057f, +0.000068f, -0.000090f, -0.000013f, -0.000019f, -0.000084f, +0.000025f, -0.000075f, - +0.000001f, +0.000065f, +0.000041f, +0.000033f, +0.000039f, -0.000047f - }, - { - -0.000583f, +0.003263f, +0.000864f, +0.000383f, +0.000471f, -0.000185f, +0.000070f, -0.000237f, -0.000118f, -0.000104f, - +0.000557f, +0.000328f, -0.000551f, +0.000824f, +0.008967f, +0.002790f, -0.002236f, -0.000744f, +0.000453f, -0.000244f, - -0.000685f, +0.000123f, +0.001872f, +0.001003f, +0.001938f, +0.001677f, +0.000859f, +0.001084f, +0.000045f, +0.001979f, - -0.001851f, -0.001864f, +0.001054f, -0.000570f, -0.000583f, -0.000433f, +0.002627f, -0.000482f, -0.000003f, -0.000010f, - -0.000209f, +0.000150f, -0.000277f, +0.000338f, -0.000565f, +0.000169f, -0.000109f, +0.000095f, +0.000306f, +0.000083f, - -0.000434f, -0.000627f, +0.000036f, -0.000141f, +0.000225f, +0.000172f, -0.000269f, -0.000217f, +0.000108f, -0.000128f, - -0.000158f, -0.000203f, -0.000018f, -0.000096f, +0.000078f, +0.000139f, -0.000033f, -0.000189f, +0.000135f, +0.000106f, - -0.000147f, -0.000162f, -0.000007f, +0.000114f, +0.000102f, +0.000057f, +0.000051f, +0.000099f, +0.000157f, -0.000030f, - +0.000039f, +0.000043f, +0.000038f, -0.000038f, +0.000034f, -0.000070f, -0.000058f, +0.000047f, +0.000026f, +0.000065f, - -0.000004f, -0.000004f, +0.000079f, +0.000051f, -0.000032f, +0.000027f - }, - { - +0.009484f, -0.001684f, -0.004088f, -0.002611f, -0.000211f, +0.000287f, +0.000732f, +0.000236f, +0.000391f, -0.001443f, - -0.001129f, +0.000758f, -0.001101f, +0.000285f, -0.001171f, -0.000442f, -0.000479f, -0.000784f, +0.000817f, -0.000028f, - +0.000101f, -0.000163f, +0.000863f, +0.000679f, -0.000806f, +0.000593f, +0.000397f, -0.000249f, +0.001142f, +0.000639f, - -0.000808f, +0.000241f, -0.001120f, +0.000207f, -0.000057f, +0.000312f, -0.001501f, -0.001087f, -0.000239f, +0.000564f, - -0.000432f, -0.000194f, +0.000062f, +0.000267f, -0.000604f, -0.000103f, +0.000129f, -0.000483f, -0.000173f, -0.000256f, - +0.000180f, +0.000151f, +0.000429f, -0.000143f, -0.000232f, -0.000004f, -0.000067f, -0.000232f, -0.000274f, +0.000074f, - +0.000333f, +0.000265f, -0.000026f, +0.000048f, +0.000095f, -0.000004f, -0.000065f, -0.000041f, +0.000024f, +0.000206f, - +0.000017f, -0.000131f, -0.000094f, -0.000085f, -0.000005f, +0.000022f, +0.000062f, +0.000052f, -0.000011f, +0.000020f, - +0.000076f, +0.000112f, +0.000031f, +0.000029f, -0.000098f, -0.000049f, +0.000080f, +0.000002f, -0.000047f, +0.000003f, - +0.000016f, -0.000042f, +0.000002f, -0.000068f, -0.000078f, +0.000006f - }, - { - -0.000646f, -0.000152f, +0.001641f, -0.000463f, +0.000070f, -0.000166f, -0.000059f, -0.000018f, -0.000148f, +0.000417f, - +0.000056f, -0.000163f, -0.000131f, -0.001030f, +0.004321f, -0.000703f, +0.001457f, -0.001242f, +0.001495f, -0.000437f, - -0.001822f, -0.002108f, -0.000312f, +0.000623f, -0.001027f, +0.000479f, -0.001350f, +0.000759f, -0.002058f, -0.002057f, - +0.001179f, -0.000716f, +0.000415f, +0.000634f, +0.001190f, -0.000107f, +0.000484f, +0.001043f, +0.000584f, -0.000203f, - +0.000297f, +0.000863f, -0.000101f, -0.000195f, +0.000047f, +0.000128f, -0.000014f, +0.000295f, -0.000564f, -0.000350f, - +0.000016f, +0.000365f, -0.000257f, -0.000022f, -0.000018f, +0.000078f, +0.000145f, +0.000209f, -0.000043f, +0.000039f, - -0.000122f, -0.000084f, +0.000037f, -0.000011f, -0.000016f, -0.000029f, -0.000055f, -0.000148f, +0.000001f, -0.000033f, - +0.000083f, +0.000227f, +0.000082f, -0.000006f, -0.000076f, +0.000006f, +0.000124f, +0.000094f, +0.000144f, -0.000011f, - -0.000008f, +0.000045f, +0.000002f, -0.000084f, -0.000017f, +0.000032f, +0.000012f, -0.000010f, +0.000024f, +0.000056f, - -0.000034f, -0.000103f, +0.000022f, +0.000057f, +0.000039f, +0.000015f - }, - { - +0.006157f, +0.008677f, -0.001088f, -0.000467f, +0.000094f, +0.000349f, -0.000100f, +0.000442f, +0.000428f, -0.000325f, - +0.000651f, -0.000254f, +0.000173f, +0.000988f, -0.001536f, +0.000716f, +0.000937f, +0.000401f, -0.000003f, -0.001212f, - -0.000353f, +0.000315f, -0.000113f, -0.000227f, +0.000149f, -0.000880f, +0.000180f, -0.000025f, -0.000422f, +0.000056f, - -0.000112f, +0.000081f, -0.000466f, +0.000354f, +0.000416f, +0.000302f, +0.000300f, -0.000238f, -0.000386f, +0.000654f, - +0.000230f, +0.000268f, +0.000285f, +0.000002f, +0.000617f, -0.000737f, +0.000207f, -0.000279f, +0.000323f, +0.000149f, - -0.000125f, -0.000043f, -0.000323f, +0.000043f, -0.000103f, +0.000089f, +0.000229f, +0.000005f, +0.000228f, +0.000164f, - +0.000328f, +0.000049f, +0.000172f, -0.000131f, -0.000120f, -0.000074f, +0.000156f, +0.000050f, +0.000024f, -0.000013f, - +0.000032f, -0.000144f, +0.000008f, +0.000147f, -0.000063f, -0.000067f, +0.000021f, +0.000076f, -0.000023f, +0.000034f, - +0.000062f, -0.000086f, +0.000023f, +0.000060f, -0.000042f, -0.000092f, +0.000117f, +0.000084f, -0.000027f, -0.000084f, - +0.000008f, +0.000078f, -0.000022f, -0.000009f, -0.000035f, -0.000013f - }, - { - -0.000659f, -0.000560f, +0.002251f, +0.000415f, +0.000294f, -0.000226f, -0.000173f, +0.000335f, +0.000404f, +0.000228f, - -0.000085f, -0.000387f, -0.001346f, +0.001979f, +0.011893f, +0.001279f, -0.001687f, -0.004044f, +0.000400f, -0.000522f, - -0.002514f, -0.000374f, +0.000625f, -0.001347f, -0.003867f, -0.000877f, -0.000867f, -0.000861f, -0.001562f, -0.000422f, - +0.000049f, -0.000153f, -0.000583f, -0.000036f, -0.000511f, +0.000360f, +0.000048f, +0.000199f, -0.000814f, -0.000117f, - -0.000347f, -0.000041f, +0.000235f, -0.000217f, -0.000172f, -0.000248f, +0.000435f, -0.000151f, -0.000383f, +0.000059f, - +0.000008f, -0.000529f, +0.000069f, +0.000021f, +0.000234f, +0.000057f, +0.000396f, +0.000448f, -0.000256f, -0.000106f, - +0.000104f, +0.000233f, +0.000242f, +0.000028f, +0.000102f, -0.000135f, -0.000036f, +0.000073f, +0.000076f, -0.000028f, - -0.000011f, -0.000067f, -0.000068f, +0.000017f, -0.000024f, +0.000038f, -0.000021f, +0.000028f, +0.000044f, +0.000095f, - +0.000104f, -0.000087f, -0.000077f, -0.000072f, +0.000019f, +0.000056f, +0.000017f, +0.000087f, -0.000065f, +0.000012f, - +0.000049f, -0.000065f, +0.000016f, -0.000001f, +0.000023f, +0.000010f - }, - { - -0.002308f, +0.008586f, +0.006837f, -0.000021f, -0.000441f, +0.000297f, +0.000141f, +0.000423f, -0.000899f, +0.000851f, - +0.000326f, -0.000515f, -0.000792f, -0.002977f, -0.000741f, -0.000084f, +0.001460f, +0.000753f, +0.000440f, -0.000234f, - +0.000004f, +0.000381f, -0.000465f, -0.000326f, -0.000541f, -0.000119f, +0.000262f, -0.000016f, -0.000046f, +0.000814f, - +0.001203f, +0.001055f, -0.000286f, -0.000522f, -0.000600f, -0.000200f, -0.000896f, -0.000226f, +0.001174f, +0.000678f, - -0.000082f, +0.000736f, -0.000568f, -0.000359f, -0.000145f, +0.000196f, +0.000414f, +0.000781f, -0.000154f, -0.000610f, - -0.000063f, +0.000365f, +0.000063f, +0.000536f, -0.000154f, -0.000004f, -0.000222f, -0.000017f, -0.000120f, +0.000011f, - -0.000083f, -0.000079f, +0.000123f, +0.000064f, -0.000021f, -0.000241f, -0.000116f, -0.000034f, -0.000280f, +0.000013f, - -0.000044f, -0.000010f, -0.000033f, +0.000057f, +0.000027f, +0.000053f, -0.000037f, -0.000036f, -0.000006f, +0.000041f, - -0.000079f, +0.000069f, -0.000002f, +0.000074f, -0.000068f, +0.000001f, +0.000027f, +0.000020f, +0.000061f, +0.000135f, - +0.000020f, -0.000013f, -0.000053f, +0.000027f, +0.000079f, -0.000026f - }, - { - -0.000400f, +0.006138f, +0.002585f, +0.003509f, -0.000845f, +0.000247f, +0.001166f, -0.000513f, -0.000230f, +0.001025f, - +0.000059f, -0.000222f, -0.002036f, +0.001282f, +0.001134f, +0.000795f, -0.001664f, -0.000636f, +0.000741f, +0.001192f, - +0.001068f, -0.000774f, +0.000255f, -0.000172f, +0.000876f, +0.000544f, +0.000111f, +0.000201f, -0.000267f, +0.000197f, - +0.000441f, -0.001338f, +0.001044f, +0.000534f, -0.000127f, +0.000738f, +0.000205f, +0.000556f, +0.000851f, -0.000443f, - -0.000056f, -0.000042f, +0.000429f, -0.000074f, +0.000291f, +0.000896f, -0.000176f, +0.000315f, -0.000301f, -0.000019f, - +0.000254f, +0.000110f, -0.000185f, +0.000153f, -0.000291f, -0.000347f, +0.000047f, +0.000149f, +0.000100f, +0.000244f, - +0.000069f, -0.000125f, -0.000129f, -0.000298f, -0.000061f, -0.000175f, +0.000010f, +0.000196f, +0.000228f, +0.000088f, - -0.000004f, +0.000094f, +0.000000f, -0.000083f, +0.000065f, -0.000062f, -0.000044f, -0.000044f, -0.000080f, -0.000038f, - -0.000112f, -0.000015f, -0.000026f, +0.000013f, +0.000024f, +0.000068f, -0.000004f, -0.000041f, -0.000062f, -0.000029f, - +0.000045f, -0.000029f, +0.000018f, +0.000021f, +0.000074f, +0.000072f - }, - { - -0.007747f, -0.008646f, -0.000044f, -0.002963f, -0.001145f, -0.001322f, +0.008092f, -0.000653f, -0.000840f, +0.000134f, - +0.000379f, -0.000436f, -0.000030f, +0.001769f, -0.000435f, -0.002441f, +0.000059f, +0.000353f, -0.000679f, +0.000722f, - +0.000146f, +0.000484f, +0.001069f, -0.000328f, +0.000171f, -0.000288f, +0.000061f, -0.000948f, -0.000097f, -0.000267f, - +0.000314f, +0.000359f, -0.000158f, -0.000469f, +0.000236f, +0.000103f, +0.000045f, +0.000575f, -0.000154f, -0.001256f, - +0.000223f, +0.000838f, -0.000333f, +0.000038f, -0.000856f, +0.000196f, +0.000182f, +0.000000f, +0.000001f, -0.000052f, - +0.000531f, -0.000051f, +0.000328f, +0.000018f, -0.000044f, -0.000135f, -0.000081f, +0.000231f, +0.000264f, -0.000052f, - -0.000036f, +0.000173f, -0.000012f, -0.000162f, +0.000055f, +0.000067f, -0.000064f, +0.000021f, -0.000069f, +0.000052f, - -0.000038f, -0.000034f, +0.000021f, +0.000163f, +0.000080f, +0.000115f, +0.000013f, -0.000038f, -0.000051f, +0.000032f, - -0.000132f, +0.000041f, -0.000035f, -0.000076f, +0.000059f, +0.000005f, +0.000069f, +0.000016f, +0.000053f, -0.000038f, - -0.000027f, +0.000018f, +0.000038f, -0.000073f, -0.000037f, +0.000047f - }, - { - -0.000051f, -0.007085f, -0.000708f, +0.000526f, -0.000091f, +0.000466f, -0.000411f, -0.000366f, +0.000270f, -0.000192f, - +0.000452f, -0.000929f, +0.002605f, -0.000951f, +0.002057f, -0.000456f, -0.000580f, +0.000098f, +0.001059f, +0.000927f, - +0.000479f, +0.000763f, +0.000283f, +0.001064f, +0.003064f, +0.001316f, +0.000197f, +0.000288f, -0.001794f, -0.000323f, - +0.001386f, -0.000906f, +0.000513f, -0.000594f, +0.000479f, -0.000743f, -0.000538f, +0.000425f, +0.000986f, -0.000010f, - -0.000038f, -0.000065f, -0.000017f, +0.000184f, +0.000238f, -0.000130f, -0.000034f, -0.000219f, -0.000142f, +0.000324f, - +0.000117f, -0.000295f, -0.000141f, +0.000179f, +0.000201f, -0.000064f, -0.000165f, -0.000222f, -0.000253f, -0.000135f, - -0.000172f, +0.000071f, -0.000030f, -0.000152f, -0.000268f, -0.000034f, +0.000157f, -0.000195f, +0.000152f, +0.000125f, - +0.000042f, -0.000030f, -0.000071f, -0.000030f, -0.000034f, +0.000149f, +0.000107f, +0.000022f, +0.000064f, -0.000019f, - -0.000009f, +0.000070f, -0.000084f, -0.000056f, -0.000030f, -0.000042f, -0.000033f, -0.000058f, -0.000034f, +0.000024f, - +0.000013f, +0.000032f, +0.000043f, -0.000000f, -0.000011f, +0.000025f - }, - { - +0.000398f, +0.000771f, +0.004412f, +0.001862f, -0.001596f, +0.000607f, +0.001647f, -0.000204f, -0.000001f, +0.001278f, - +0.000947f, +0.000596f, -0.001231f, -0.004420f, +0.000016f, -0.001012f, +0.000495f, +0.001767f, -0.000526f, +0.000079f, - +0.001246f, -0.000178f, +0.000274f, -0.000023f, -0.000515f, -0.000464f, +0.000693f, +0.000578f, +0.000572f, +0.000654f, - +0.000315f, -0.000091f, +0.000034f, -0.000051f, -0.000427f, +0.000560f, +0.000467f, -0.000586f, +0.000131f, -0.000131f, - -0.000289f, -0.000438f, -0.000335f, -0.000683f, -0.000421f, -0.000527f, -0.000436f, -0.000278f, -0.000282f, -0.000288f, - -0.000003f, +0.000099f, +0.000091f, +0.000254f, +0.000267f, -0.000122f, +0.000371f, +0.000123f, +0.000092f, -0.000300f, - +0.000170f, +0.000039f, +0.000246f, -0.000036f, +0.000100f, -0.000080f, -0.000145f, -0.000024f, -0.000093f, +0.000158f, - +0.000079f, -0.000184f, +0.000004f, +0.000112f, +0.000008f, +0.000091f, -0.000081f, +0.000023f, +0.000027f, +0.000080f, - +0.000086f, -0.000126f, -0.000111f, -0.000004f, +0.000070f, +0.000074f, -0.000139f, -0.000004f, -0.000000f, -0.000079f, - -0.000025f, -0.000053f, +0.000003f, +0.000058f, +0.000011f, +0.000068f - }, - { - -0.000156f, -0.000684f, -0.001024f, +0.000052f, +0.000045f, +0.000707f, +0.000125f, +0.000240f, -0.000252f, +0.000448f, - -0.000106f, +0.000526f, -0.001118f, +0.001366f, +0.028285f, +0.000298f, +0.001219f, +0.000249f, +0.001220f, -0.002074f, - +0.001859f, +0.000071f, +0.000779f, +0.001264f, +0.002229f, +0.000934f, -0.000471f, -0.000604f, +0.002465f, -0.000483f, - -0.000399f, -0.000467f, -0.000290f, -0.000922f, +0.000119f, +0.000031f, -0.000296f, -0.000545f, +0.000108f, -0.000167f, - -0.000690f, +0.000196f, -0.000002f, +0.000483f, +0.000089f, +0.000081f, -0.000107f, +0.000525f, +0.000396f, -0.000050f, - +0.000362f, +0.000375f, +0.000078f, -0.000200f, +0.000067f, -0.000190f, -0.000045f, -0.000034f, -0.000063f, +0.000094f, - -0.000054f, +0.000239f, -0.000157f, -0.000005f, +0.000028f, +0.000154f, -0.000021f, +0.000259f, +0.000024f, +0.000134f, - +0.000109f, -0.000141f, -0.000107f, +0.000072f, -0.000054f, +0.000023f, +0.000017f, -0.000163f, +0.000087f, -0.000053f, - +0.000053f, +0.000160f, -0.000050f, +0.000012f, -0.000060f, -0.000082f, -0.000138f, +0.000032f, +0.000103f, -0.000062f, - -0.000001f, +0.000115f, +0.000004f, -0.000064f, +0.000031f, +0.000017f - }, - { - +0.002517f, +0.006937f, -0.004126f, -0.001446f, -0.000650f, +0.003285f, +0.000913f, -0.000063f, +0.000013f, -0.000651f, - -0.001827f, +0.000786f, +0.000883f, +0.000425f, -0.006411f, -0.000445f, +0.001497f, -0.000774f, +0.000346f, +0.001058f, - -0.000634f, -0.000151f, -0.000098f, +0.000285f, +0.000539f, +0.000067f, -0.001180f, -0.000453f, +0.000543f, +0.000445f, - -0.000158f, -0.000046f, -0.000487f, -0.000375f, -0.000795f, +0.000548f, -0.000009f, -0.000068f, +0.000472f, +0.000429f, - +0.000024f, -0.000031f, +0.000578f, +0.000490f, -0.000142f, -0.000152f, -0.000918f, -0.000454f, -0.000105f, +0.000292f, - -0.000466f, +0.000239f, +0.000545f, +0.000179f, +0.000033f, +0.000133f, -0.000295f, +0.000029f, -0.000067f, +0.000152f, - +0.000068f, -0.000158f, +0.000013f, -0.000066f, +0.000019f, -0.000010f, +0.000000f, -0.000025f, -0.000155f, -0.000020f, - +0.000034f, -0.000259f, -0.000107f, +0.000138f, +0.000184f, +0.000001f, -0.000067f, -0.000000f, +0.000003f, -0.000033f, - -0.000072f, -0.000007f, +0.000078f, +0.000000f, -0.000011f, +0.000008f, +0.000008f, +0.000040f, +0.000080f, -0.000108f, - -0.000052f, -0.000024f, -0.000060f, -0.000012f, +0.000028f, +0.000043f - } - }, - { - { - -0.001314f, +0.011728f, -0.000879f, +0.000016f, +0.000724f, +0.000067f, -0.000202f, -0.000044f, -0.000131f, -0.000142f, - +0.000871f, -0.000354f, +0.000333f, +0.000270f, -0.004773f, +0.000830f, -0.000545f, +0.000581f, +0.001414f, -0.000433f, - +0.000921f, +0.001913f, +0.000251f, -0.000783f, -0.000667f, -0.000646f, -0.000704f, +0.000387f, +0.000874f, -0.000590f, - -0.000797f, +0.000312f, +0.000636f, -0.000601f, -0.000712f, +0.000072f, +0.001003f, -0.001170f, -0.000255f, -0.000182f, - +0.000728f, +0.000316f, -0.000568f, +0.000296f, +0.000394f, +0.000190f, -0.000283f, +0.000576f, -0.000339f, +0.000345f, - +0.000340f, +0.000028f, +0.000325f, +0.000253f, +0.000129f, +0.000053f, -0.000272f, -0.000203f, -0.000070f, +0.000318f, - -0.000100f, +0.000054f, +0.000091f, +0.000056f, +0.000042f, +0.000091f, -0.000073f, -0.000097f, +0.000263f, -0.000032f, - -0.000054f, -0.000046f, +0.000095f, +0.000004f, -0.000021f, +0.000002f, -0.000011f, +0.000074f, +0.000092f, -0.000006f, - +0.000003f, +0.000063f, +0.000084f, +0.000042f, +0.000023f, -0.000076f, -0.000014f, -0.000022f, +0.000017f, -0.000080f, - +0.000054f, -0.000017f, +0.000013f, +0.000010f, -0.000070f, -0.000057f - }, - { - -0.009155f, +0.074733f, -0.005871f, +0.003459f, -0.000183f, -0.000009f, +0.000016f, -0.000871f, -0.000227f, +0.000315f, - +0.000231f, +0.000220f, -0.000502f, +0.000298f, -0.000044f, -0.001872f, -0.000226f, -0.000615f, +0.001350f, +0.000239f, - +0.000311f, -0.000110f, -0.000085f, -0.000047f, -0.000385f, +0.000292f, -0.001494f, -0.000436f, -0.000433f, +0.000033f, - -0.000078f, +0.001088f, -0.000461f, -0.000585f, +0.000101f, -0.000025f, +0.000550f, -0.000921f, -0.000087f, -0.000679f, - +0.000085f, -0.000200f, +0.000085f, -0.000036f, -0.000020f, -0.000306f, -0.000222f, -0.000451f, -0.000256f, +0.000479f, - +0.000041f, +0.000051f, +0.000158f, -0.000240f, -0.000087f, -0.000384f, +0.000089f, +0.000085f, -0.000017f, +0.000265f, - +0.000052f, -0.000122f, -0.000095f, +0.000069f, -0.000201f, +0.000062f, +0.000021f, -0.000021f, +0.000134f, -0.000185f, - -0.000012f, -0.000083f, -0.000105f, +0.000018f, -0.000141f, +0.000048f, +0.000090f, -0.000091f, -0.000001f, -0.000003f, - +0.000078f, -0.000049f, -0.000067f, +0.000034f, +0.000065f, -0.000194f, +0.000078f, +0.000078f, -0.000009f, -0.000012f, - -0.000054f, -0.000003f, +0.000069f, -0.000024f, +0.000008f, -0.000019f - }, - { - -0.001274f, +0.033827f, -0.007787f, +0.003496f, +0.000530f, -0.000634f, +0.000302f, -0.000612f, -0.000192f, -0.000931f, - -0.000270f, -0.000412f, -0.000017f, -0.000894f, +0.003712f, -0.000076f, -0.000074f, +0.000130f, -0.000950f, +0.000435f, - -0.000245f, +0.000075f, +0.000905f, -0.000556f, +0.001158f, +0.000914f, +0.000338f, -0.000686f, -0.000131f, +0.000331f, - +0.000288f, -0.000027f, +0.001148f, +0.000088f, -0.001099f, +0.000591f, -0.000178f, +0.000723f, -0.000230f, -0.000055f, - -0.000014f, +0.000187f, +0.000276f, +0.000213f, -0.000120f, -0.000274f, -0.000499f, +0.000315f, +0.000222f, +0.000174f, - -0.000013f, -0.000069f, +0.000013f, +0.000128f, -0.000133f, +0.000310f, +0.000142f, +0.000077f, -0.000083f, -0.000085f, - +0.000111f, +0.000152f, +0.000233f, -0.000091f, +0.000035f, -0.000106f, +0.000194f, +0.000042f, +0.000127f, +0.000116f, - +0.000036f, -0.000030f, +0.000016f, -0.000006f, +0.000043f, -0.000061f, +0.000002f, -0.000019f, -0.000151f, -0.000003f, - -0.000004f, +0.000058f, +0.000076f, +0.000007f, -0.000064f, -0.000027f, -0.000082f, -0.000052f, +0.000059f, -0.000093f, - +0.000066f, +0.000027f, +0.000065f, -0.000006f, +0.000004f, -0.000035f - }, - { - +0.000759f, +0.001021f, -0.001365f, +0.000506f, +0.000070f, -0.000193f, +0.000306f, -0.000122f, -0.000153f, -0.000051f, - +0.000361f, +0.000132f, -0.000592f, +0.000691f, +0.004401f, -0.000712f, -0.002067f, +0.000051f, +0.000148f, +0.000261f, - -0.000537f, +0.000752f, +0.000299f, -0.000827f, +0.001507f, -0.001318f, -0.002334f, +0.000087f, +0.000896f, +0.002619f, - -0.001448f, -0.000998f, +0.001515f, -0.000435f, -0.000476f, -0.000338f, +0.001345f, -0.000361f, +0.000233f, -0.000361f, - +0.000218f, +0.000589f, -0.000115f, +0.000210f, -0.000636f, +0.000452f, +0.000143f, -0.000030f, +0.000379f, +0.000139f, - -0.000500f, -0.000016f, +0.000136f, -0.000230f, +0.000290f, +0.000072f, -0.000141f, +0.000086f, -0.000021f, -0.000050f, - +0.000052f, +0.000043f, -0.000028f, +0.000012f, +0.000165f, +0.000103f, -0.000025f, -0.000058f, +0.000113f, +0.000025f, - -0.000311f, -0.000045f, +0.000057f, +0.000134f, -0.000046f, +0.000109f, +0.000148f, +0.000052f, +0.000026f, -0.000090f, - -0.000012f, +0.000066f, -0.000011f, +0.000015f, +0.000040f, -0.000046f, -0.000012f, +0.000076f, +0.000044f, -0.000013f, - -0.000024f, +0.000040f, +0.000068f, +0.000020f, -0.000002f, +0.000033f - }, - { - -0.002242f, -0.013632f, +0.002956f, -0.000795f, +0.000607f, -0.000153f, +0.000027f, +0.000262f, +0.000748f, -0.000653f, - +0.000905f, +0.000258f, -0.000074f, +0.000524f, -0.001561f, -0.000260f, +0.000274f, -0.000389f, +0.000119f, -0.000866f, - -0.000185f, +0.000151f, -0.000369f, -0.000252f, +0.000235f, +0.000123f, +0.001016f, +0.000357f, +0.000827f, +0.000338f, - -0.000203f, +0.000840f, -0.000017f, +0.000860f, -0.000032f, +0.000173f, -0.001574f, +0.000415f, +0.000638f, +0.000529f, - -0.000539f, -0.000166f, -0.000053f, +0.000093f, -0.000606f, +0.000347f, +0.000611f, -0.000047f, +0.000186f, -0.000037f, - +0.000514f, -0.000025f, +0.000121f, -0.000004f, -0.000140f, +0.000045f, -0.000186f, -0.000193f, -0.000208f, +0.000065f, - -0.000062f, +0.000021f, +0.000011f, -0.000106f, -0.000005f, +0.000036f, -0.000022f, +0.000020f, -0.000004f, +0.000052f, - -0.000110f, -0.000169f, -0.000064f, +0.000138f, +0.000024f, -0.000027f, +0.000152f, -0.000017f, +0.000020f, +0.000041f, - +0.000056f, +0.000114f, +0.000007f, -0.000047f, -0.000050f, +0.000008f, +0.000022f, -0.000039f, -0.000105f, -0.000036f, - -0.000009f, -0.000042f, -0.000023f, -0.000074f, +0.000011f, +0.000013f - }, - { - -0.000245f, +0.004252f, +0.000840f, -0.001104f, +0.000069f, -0.000063f, +0.000312f, +0.000130f, -0.000078f, -0.000037f, - -0.000336f, -0.000148f, -0.000348f, -0.001297f, +0.006314f, -0.000467f, -0.000579f, -0.000098f, +0.002000f, -0.000303f, - +0.001023f, -0.000465f, +0.002175f, +0.002397f, -0.000896f, +0.002394f, -0.000365f, -0.000122f, -0.000230f, -0.001265f, - +0.000667f, -0.000558f, +0.000161f, +0.000480f, +0.000999f, -0.000413f, +0.000123f, +0.000436f, -0.000001f, -0.000455f, - +0.000650f, +0.000271f, -0.000114f, +0.000164f, +0.000212f, +0.000055f, -0.000157f, +0.000157f, -0.000248f, -0.000007f, - +0.000145f, +0.000182f, -0.000320f, -0.000085f, -0.000028f, -0.000103f, -0.000066f, +0.000117f, -0.000065f, -0.000014f, - -0.000095f, +0.000097f, -0.000131f, -0.000118f, -0.000046f, -0.000021f, +0.000086f, -0.000047f, +0.000113f, -0.000054f, - +0.000145f, +0.000086f, -0.000116f, -0.000021f, +0.000082f, +0.000034f, +0.000096f, +0.000081f, +0.000047f, -0.000103f, - +0.000096f, +0.000014f, +0.000001f, -0.000022f, +0.000036f, +0.000020f, -0.000012f, +0.000004f, +0.000027f, +0.000018f, - -0.000078f, -0.000002f, +0.000089f, +0.000008f, +0.000009f, -0.000028f - }, - { - +0.002021f, +0.012371f, +0.004943f, -0.001976f, +0.000294f, +0.000242f, +0.000031f, -0.000315f, +0.000083f, -0.000435f, - +0.000047f, -0.000801f, +0.000270f, +0.000675f, -0.002542f, -0.001194f, +0.000042f, +0.000040f, -0.000356f, -0.000456f, - -0.000239f, +0.000420f, -0.000182f, -0.000274f, +0.000084f, -0.000597f, +0.000676f, -0.000036f, -0.000161f, -0.000018f, - +0.000090f, +0.000513f, -0.000189f, +0.000528f, +0.000231f, +0.000589f, +0.000249f, +0.000131f, -0.000108f, +0.000201f, - -0.000068f, +0.000312f, +0.000104f, -0.000086f, +0.000719f, -0.000118f, +0.000048f, -0.000311f, +0.000474f, -0.000123f, - -0.000364f, +0.000061f, -0.000147f, -0.000075f, +0.000202f, +0.000122f, +0.000125f, +0.000017f, +0.000234f, +0.000071f, - +0.000075f, -0.000162f, +0.000158f, -0.000017f, +0.000039f, +0.000101f, +0.000145f, -0.000135f, -0.000011f, +0.000091f, - -0.000035f, -0.000170f, +0.000137f, +0.000077f, -0.000058f, +0.000046f, +0.000086f, +0.000024f, +0.000005f, +0.000067f, - -0.000019f, -0.000021f, +0.000066f, +0.000021f, -0.000133f, +0.000054f, +0.000085f, +0.000011f, -0.000042f, -0.000022f, - +0.000086f, -0.000023f, +0.000007f, -0.000021f, +0.000013f, +0.000032f - }, - { - +0.000035f, +0.002503f, +0.000514f, -0.000288f, -0.000061f, -0.000217f, -0.000165f, -0.000017f, +0.000078f, -0.000148f, - -0.000667f, -0.000067f, -0.000816f, +0.001240f, +0.010845f, -0.000989f, -0.000133f, -0.001147f, +0.000326f, +0.000940f, - -0.001801f, +0.000445f, +0.000101f, +0.000064f, -0.000008f, +0.001266f, +0.000241f, -0.000673f, -0.000393f, -0.000761f, - -0.000477f, -0.000386f, -0.000277f, +0.000464f, +0.000428f, +0.000496f, -0.000102f, -0.000166f, +0.000134f, +0.000301f, - -0.000115f, +0.000198f, +0.000245f, -0.000299f, +0.000010f, +0.000299f, +0.000609f, -0.000746f, -0.000476f, +0.000361f, - -0.000065f, -0.000078f, +0.000052f, +0.000222f, +0.000181f, +0.000121f, +0.000281f, +0.000053f, -0.000246f, +0.000146f, - -0.000011f, +0.000259f, +0.000095f, +0.000021f, -0.000007f, -0.000198f, +0.000134f, +0.000107f, +0.000038f, -0.000093f, - +0.000065f, -0.000011f, -0.000075f, +0.000081f, +0.000020f, +0.000017f, +0.000156f, +0.000088f, +0.000012f, +0.000040f, - -0.000081f, -0.000083f, -0.000016f, -0.000012f, +0.000030f, -0.000001f, +0.000063f, -0.000015f, -0.000038f, +0.000087f, - -0.000020f, -0.000017f, -0.000002f, -0.000042f, +0.000028f, -0.000014f - }, - { - +0.004963f, +0.005081f, -0.002134f, -0.000087f, +0.000444f, +0.000456f, -0.000716f, -0.000896f, -0.000292f, +0.001053f, - -0.001415f, -0.001606f, -0.000144f, -0.000030f, +0.000075f, -0.000571f, +0.000263f, -0.000332f, +0.000369f, -0.000169f, - +0.000128f, +0.000185f, +0.000277f, +0.000119f, -0.000519f, -0.000313f, -0.000059f, +0.000325f, -0.000296f, +0.000062f, - +0.000659f, -0.000051f, -0.000648f, -0.000334f, -0.000617f, +0.000848f, +0.000132f, +0.000191f, +0.000769f, +0.000015f, - -0.000300f, +0.000478f, -0.000465f, -0.000001f, -0.000373f, +0.000244f, +0.000100f, +0.000304f, -0.000194f, -0.000448f, - +0.000476f, +0.000136f, -0.000457f, +0.000423f, -0.000188f, -0.000152f, -0.000108f, +0.000038f, -0.000090f, +0.000054f, - -0.000130f, -0.000164f, +0.000043f, -0.000092f, -0.000085f, +0.000094f, +0.000144f, +0.000006f, -0.000069f, +0.000110f, - -0.000100f, -0.000040f, -0.000001f, +0.000079f, +0.000126f, -0.000110f, -0.000020f, -0.000006f, +0.000045f, +0.000018f, - -0.000058f, -0.000021f, -0.000041f, -0.000030f, -0.000108f, -0.000037f, +0.000129f, +0.000061f, +0.000031f, +0.000050f, - -0.000066f, -0.000007f, -0.000076f, +0.000068f, +0.000039f, -0.000021f - }, - { - +0.000595f, +0.002663f, -0.000690f, +0.000425f, -0.000223f, +0.001984f, +0.000553f, -0.000872f, -0.000523f, +0.000046f, - -0.000133f, -0.000199f, -0.001732f, -0.000450f, -0.001886f, -0.000003f, -0.001163f, +0.000777f, +0.001523f, +0.000067f, - +0.000082f, +0.000352f, +0.001814f, +0.000719f, +0.000663f, -0.000349f, -0.000757f, -0.000357f, -0.000523f, +0.000178f, - -0.000055f, -0.000928f, +0.000445f, +0.000551f, -0.000676f, +0.000071f, +0.000491f, +0.000653f, +0.000414f, -0.000246f, - +0.000165f, +0.000014f, +0.000091f, -0.000449f, +0.000225f, +0.000321f, -0.000116f, +0.000165f, -0.000310f, +0.000293f, - +0.000231f, +0.000064f, -0.000009f, -0.000106f, -0.000450f, -0.000153f, +0.000167f, +0.000110f, +0.000121f, +0.000197f, - +0.000002f, -0.000095f, -0.000224f, -0.000138f, -0.000124f, -0.000135f, +0.000172f, +0.000159f, +0.000209f, -0.000079f, - +0.000028f, -0.000010f, -0.000059f, +0.000034f, +0.000060f, -0.000043f, -0.000067f, -0.000050f, -0.000121f, -0.000034f, - -0.000053f, +0.000016f, +0.000052f, +0.000028f, +0.000022f, +0.000005f, -0.000029f, +0.000012f, -0.000032f, +0.000058f, - +0.000025f, +0.000033f, +0.000025f, +0.000003f, +0.000051f, +0.000033f - }, - { - +0.007099f, -0.001117f, -0.006679f, +0.002499f, +0.000990f, -0.000971f, +0.005825f, -0.002270f, -0.000481f, +0.000467f, - -0.000038f, -0.000363f, -0.000015f, +0.001124f, -0.001737f, -0.001075f, +0.001180f, +0.000554f, -0.000437f, +0.000417f, - -0.001724f, +0.000301f, +0.000713f, -0.000274f, -0.000036f, -0.000323f, +0.000054f, -0.001013f, +0.000519f, +0.000026f, - +0.000309f, -0.000081f, -0.000118f, -0.000034f, +0.000025f, -0.000253f, +0.000272f, +0.000346f, +0.000146f, +0.000248f, - +0.000569f, +0.000267f, -0.000589f, +0.000110f, -0.000548f, -0.000023f, -0.000191f, +0.000192f, +0.000120f, -0.000333f, - +0.000256f, -0.000147f, +0.000270f, -0.000295f, -0.000067f, -0.000151f, -0.000206f, +0.000363f, -0.000033f, -0.000089f, - +0.000083f, +0.000125f, -0.000136f, -0.000146f, +0.000047f, -0.000043f, -0.000058f, +0.000006f, +0.000017f, -0.000041f, - -0.000061f, +0.000040f, +0.000031f, +0.000174f, -0.000017f, +0.000128f, -0.000011f, -0.000112f, +0.000008f, +0.000021f, - -0.000083f, +0.000078f, -0.000060f, +0.000051f, -0.000003f, +0.000097f, +0.000013f, +0.000010f, +0.000004f, -0.000055f, - +0.000024f, -0.000021f, -0.000031f, -0.000036f, +0.000028f, +0.000013f - }, - { - -0.000086f, -0.004481f, +0.000617f, -0.000318f, -0.000143f, -0.000002f, -0.000478f, -0.000319f, +0.000572f, +0.000002f, - -0.000296f, -0.001168f, +0.002263f, -0.003994f, -0.001081f, -0.000905f, +0.000237f, +0.001522f, +0.000565f, -0.000880f, - +0.000143f, +0.001058f, +0.000309f, +0.000004f, +0.000608f, -0.000705f, -0.001205f, +0.000491f, -0.001186f, +0.001711f, - +0.000404f, -0.000742f, +0.000091f, -0.000406f, -0.000081f, -0.000327f, -0.000023f, +0.000514f, +0.000377f, +0.000048f, - -0.000284f, -0.000127f, +0.000221f, +0.000092f, +0.000076f, +0.000142f, -0.000119f, -0.000110f, +0.000014f, +0.000273f, - -0.000101f, -0.000222f, +0.000079f, +0.000043f, -0.000097f, -0.000123f, -0.000126f, -0.000393f, -0.000190f, -0.000162f, - +0.000115f, +0.000011f, +0.000011f, -0.000157f, -0.000086f, +0.000177f, +0.000034f, -0.000003f, +0.000138f, +0.000061f, - +0.000071f, +0.000052f, +0.000081f, +0.000081f, -0.000009f, +0.000124f, +0.000066f, -0.000073f, +0.000025f, -0.000070f, - -0.000006f, +0.000058f, -0.000085f, -0.000054f, -0.000009f, -0.000063f, -0.000024f, -0.000008f, +0.000008f, +0.000022f, - +0.000017f, +0.000030f, +0.000037f, -0.000052f, -0.000022f, +0.000053f - }, - { - +0.000612f, -0.002065f, +0.001650f, -0.000913f, -0.001074f, +0.003461f, +0.001992f, -0.001118f, -0.000543f, +0.002144f, - +0.000890f, +0.000064f, +0.001206f, -0.000966f, +0.001768f, -0.000976f, +0.000088f, +0.001424f, -0.000750f, +0.001031f, - +0.000295f, -0.000534f, +0.000062f, +0.000704f, +0.000622f, +0.000297f, -0.000116f, +0.000568f, +0.000554f, -0.000012f, - +0.000030f, -0.000303f, +0.000487f, +0.000373f, -0.000165f, +0.000350f, +0.000604f, +0.000074f, +0.000634f, +0.000006f, - -0.000403f, -0.000460f, +0.000295f, -0.000940f, -0.000129f, -0.000377f, +0.000186f, -0.000348f, +0.000008f, -0.000452f, - +0.000168f, +0.000196f, +0.000062f, +0.000512f, +0.000053f, -0.000047f, +0.000299f, -0.000157f, -0.000123f, -0.000063f, - +0.000105f, -0.000192f, +0.000046f, -0.000119f, -0.000055f, -0.000111f, -0.000100f, +0.000032f, +0.000056f, +0.000048f, - -0.000091f, -0.000125f, +0.000116f, +0.000054f, -0.000009f, +0.000012f, -0.000115f, +0.000142f, +0.000016f, +0.000057f, - -0.000062f, -0.000113f, -0.000019f, +0.000052f, +0.000053f, -0.000038f, -0.000190f, -0.000010f, +0.000005f, -0.000025f, - +0.000003f, -0.000011f, +0.000118f, +0.000027f, +0.000040f, +0.000046f - }, - { - +0.000406f, -0.001450f, -0.000784f, +0.000362f, +0.000198f, +0.000390f, -0.000002f, +0.000485f, -0.000139f, +0.000137f, - -0.000074f, +0.000150f, -0.001030f, -0.010925f, +0.011123f, -0.001174f, +0.000299f, -0.001145f, +0.001350f, +0.000081f, - +0.002455f, +0.000061f, +0.000908f, -0.000214f, -0.000137f, -0.000190f, +0.000147f, +0.000293f, +0.001386f, -0.001597f, - -0.000906f, +0.000241f, +0.000967f, +0.000299f, +0.000069f, +0.000322f, -0.000087f, -0.000315f, +0.000648f, -0.000230f, - -0.000344f, +0.000529f, -0.000106f, +0.000115f, -0.000132f, -0.000304f, -0.000222f, +0.000160f, +0.000295f, -0.000190f, - +0.000320f, +0.000140f, -0.000167f, -0.000194f, +0.000161f, -0.000322f, -0.000022f, +0.000028f, -0.000044f, -0.000098f, - +0.000247f, +0.000161f, -0.000180f, +0.000096f, +0.000146f, -0.000109f, -0.000063f, +0.000258f, +0.000001f, +0.000144f, - +0.000070f, -0.000163f, -0.000078f, +0.000053f, +0.000023f, +0.000035f, -0.000129f, +0.000008f, -0.000003f, +0.000009f, - +0.000126f, +0.000030f, -0.000037f, +0.000014f, -0.000099f, -0.000037f, -0.000085f, +0.000082f, +0.000001f, -0.000006f, - +0.000101f, +0.000073f, -0.000072f, -0.000023f, +0.000039f, -0.000062f - }, - { - -0.002177f, -0.001694f, -0.001290f, +0.003456f, +0.000724f, +0.003709f, -0.000656f, +0.000239f, +0.000253f, -0.000149f, - +0.001988f, +0.001047f, -0.000290f, +0.001444f, -0.002923f, +0.001016f, +0.001482f, -0.001154f, +0.001148f, +0.001374f, - -0.000565f, -0.000115f, -0.000429f, +0.000395f, +0.000064f, +0.000094f, -0.001027f, +0.000076f, +0.000324f, -0.000435f, - +0.000009f, +0.000411f, -0.000027f, -0.000144f, -0.001126f, +0.000539f, -0.000494f, -0.000080f, +0.000356f, +0.000057f, - +0.000268f, -0.000370f, -0.000096f, +0.000272f, +0.000095f, -0.000390f, -0.000699f, +0.000268f, +0.000238f, +0.000182f, - +0.000027f, +0.000264f, +0.000208f, -0.000221f, +0.000038f, -0.000039f, -0.000399f, +0.000243f, -0.000131f, +0.000014f, - -0.000019f, -0.000318f, -0.000060f, -0.000113f, -0.000059f, -0.000130f, +0.000023f, -0.000016f, -0.000058f, -0.000041f, - +0.000057f, -0.000152f, -0.000009f, +0.000161f, +0.000019f, -0.000083f, -0.000096f, +0.000006f, +0.000008f, -0.000060f, - -0.000003f, +0.000067f, +0.000008f, +0.000006f, +0.000062f, +0.000103f, +0.000016f, +0.000086f, +0.000000f, -0.000073f, - -0.000015f, -0.000021f, +0.000001f, +0.000031f, +0.000009f, +0.000011f - } - }, - { - { - +0.000684f, +0.005315f, -0.000710f, +0.000454f, +0.000486f, -0.000110f, +0.000097f, -0.000139f, -0.000371f, +0.000106f, - -0.000568f, +0.000453f, -0.001539f, +0.001115f, -0.002467f, -0.000494f, -0.000074f, +0.000628f, -0.000430f, +0.000081f, - +0.001704f, -0.000571f, -0.001069f, -0.001826f, -0.000345f, -0.000596f, +0.000171f, -0.000215f, +0.000098f, +0.000022f, - -0.000762f, -0.000889f, +0.000073f, +0.000461f, -0.000189f, +0.000367f, +0.000520f, +0.000620f, +0.000735f, -0.000023f, - -0.000054f, +0.000148f, -0.000229f, +0.000305f, -0.000061f, +0.000082f, +0.000361f, +0.000715f, +0.000196f, +0.000187f, - +0.000116f, +0.000085f, +0.000167f, +0.000187f, -0.000349f, +0.000097f, +0.000117f, -0.000046f, +0.000265f, +0.000126f, - -0.000109f, -0.000315f, -0.000174f, +0.000119f, -0.000024f, +0.000026f, -0.000138f, +0.000029f, -0.000003f, -0.000264f, - +0.000064f, +0.000076f, +0.000119f, -0.000007f, +0.000005f, +0.000004f, +0.000064f, +0.000091f, -0.000032f, -0.000034f, - +0.000120f, +0.000002f, -0.000079f, -0.000125f, -0.000111f, +0.000032f, +0.000066f, -0.000019f, -0.000002f, +0.000028f, - +0.000052f, -0.000051f, +0.000031f, -0.000020f, +0.000023f, +0.000050f - }, - { - +0.006428f, +0.050680f, +0.000322f, +0.002705f, +0.001249f, +0.000014f, -0.000190f, +0.001379f, +0.000761f, +0.000320f, - +0.000583f, +0.000124f, -0.000052f, -0.000098f, -0.000680f, -0.000132f, +0.001340f, -0.000229f, -0.000934f, +0.001197f, - +0.000112f, +0.000847f, -0.000296f, +0.000013f, -0.000267f, -0.000586f, -0.000532f, -0.000265f, -0.000311f, -0.000243f, - +0.000047f, +0.000224f, +0.000103f, +0.000397f, -0.000183f, -0.000500f, +0.000166f, -0.000185f, +0.000512f, +0.000032f, - -0.000107f, -0.000454f, -0.000777f, +0.000424f, -0.000525f, -0.000118f, +0.000030f, -0.000084f, +0.000330f, +0.000149f, - +0.000176f, -0.000191f, -0.000387f, -0.000343f, -0.000268f, -0.000266f, -0.000120f, -0.000100f, +0.000045f, +0.000209f, - -0.000271f, -0.000268f, +0.000022f, -0.000037f, +0.000109f, +0.000228f, +0.000031f, -0.000028f, -0.000204f, -0.000107f, - +0.000005f, -0.000008f, +0.000071f, -0.000053f, -0.000017f, +0.000123f, -0.000088f, +0.000053f, +0.000139f, +0.000045f, - -0.000076f, -0.000060f, +0.000019f, -0.000054f, -0.000095f, -0.000020f, +0.000130f, -0.000055f, +0.000030f, -0.000008f, - +0.000001f, -0.000012f, -0.000015f, -0.000022f, +0.000011f, -0.000026f - }, - { - -0.000170f, +0.016323f, +0.006609f, -0.001083f, -0.001984f, -0.000098f, -0.000352f, -0.000528f, -0.000239f, +0.000093f, - +0.000530f, -0.000051f, +0.000532f, +0.001111f, +0.002375f, +0.000175f, +0.000115f, -0.000105f, +0.000477f, -0.000513f, - +0.000167f, +0.000658f, +0.000032f, +0.000854f, +0.000603f, +0.000070f, -0.000305f, +0.000387f, -0.000063f, +0.000525f, - +0.000366f, +0.000312f, -0.000068f, -0.000081f, +0.000494f, +0.000163f, +0.000018f, -0.000102f, +0.000231f, +0.000111f, - +0.000454f, -0.000770f, +0.000125f, +0.000108f, -0.000558f, +0.000254f, +0.000333f, -0.000225f, -0.000052f, -0.000129f, - +0.000238f, +0.000210f, +0.000117f, -0.000006f, -0.000157f, +0.000198f, +0.000069f, -0.000347f, +0.000081f, -0.000030f, - -0.000012f, -0.000045f, -0.000229f, -0.000022f, -0.000056f, -0.000170f, +0.000031f, +0.000024f, +0.000088f, -0.000043f, - +0.000023f, -0.000043f, +0.000003f, -0.000152f, +0.000025f, -0.000026f, -0.000025f, -0.000008f, -0.000066f, +0.000110f, - +0.000034f, +0.000037f, -0.000009f, -0.000066f, +0.000070f, -0.000010f, -0.000027f, +0.000029f, +0.000021f, +0.000022f, - +0.000052f, -0.000055f, -0.000001f, -0.000027f, -0.000007f, -0.000012f - }, - { - -0.000936f, +0.000088f, +0.001964f, -0.000348f, -0.000287f, +0.000325f, +0.000141f, +0.000010f, -0.000305f, +0.000148f, - +0.000006f, +0.000396f, +0.000398f, -0.000676f, +0.002792f, +0.000131f, +0.000034f, +0.000512f, +0.001872f, +0.000090f, - +0.000256f, +0.000415f, -0.000421f, -0.000034f, -0.000425f, +0.000046f, -0.001025f, -0.000623f, +0.000562f, +0.001552f, - +0.000054f, -0.001147f, +0.000496f, -0.000416f, +0.000408f, +0.000187f, -0.000458f, +0.000639f, -0.000070f, -0.000370f, - +0.000348f, -0.000027f, +0.000177f, +0.000200f, +0.000056f, +0.000166f, -0.000066f, +0.000023f, +0.000026f, -0.000169f, - -0.000258f, +0.000277f, -0.000237f, -0.000024f, +0.000058f, -0.000196f, +0.000104f, +0.000211f, -0.000123f, +0.000130f, - +0.000147f, -0.000035f, -0.000004f, +0.000166f, -0.000140f, -0.000108f, +0.000031f, +0.000027f, -0.000104f, -0.000089f, - +0.000057f, +0.000129f, +0.000057f, -0.000009f, +0.000008f, +0.000099f, +0.000021f, -0.000133f, -0.000110f, -0.000003f, - -0.000017f, -0.000013f, -0.000045f, +0.000039f, -0.000015f, +0.000050f, +0.000042f, -0.000019f, -0.000057f, -0.000016f, - +0.000016f, -0.000011f, -0.000100f, -0.000033f, -0.000000f, -0.000039f - }, - { - -0.004282f, -0.007442f, +0.003536f, -0.000637f, +0.000070f, -0.000223f, -0.000220f, +0.000206f, +0.000523f, +0.000261f, - +0.000953f, -0.000712f, +0.000205f, +0.000512f, -0.001009f, -0.000411f, -0.000706f, +0.000136f, +0.000393f, +0.000224f, - +0.000269f, -0.000491f, -0.000514f, +0.000563f, +0.000966f, -0.000192f, +0.000135f, +0.001530f, +0.000855f, +0.000390f, - +0.000443f, +0.000326f, +0.000574f, +0.000324f, -0.000152f, +0.000327f, +0.000329f, +0.001280f, +0.000236f, +0.000403f, - +0.000226f, -0.000348f, -0.000431f, +0.000243f, +0.000238f, -0.000363f, +0.000069f, +0.000371f, -0.000034f, -0.000043f, - +0.000452f, -0.000401f, +0.000097f, +0.000150f, -0.000042f, -0.000104f, -0.000064f, +0.000160f, +0.000091f, +0.000061f, - -0.000120f, -0.000026f, +0.000005f, -0.000094f, +0.000031f, -0.000045f, -0.000119f, +0.000169f, -0.000044f, -0.000090f, - -0.000072f, +0.000038f, +0.000256f, +0.000112f, -0.000123f, +0.000041f, -0.000010f, -0.000091f, +0.000054f, +0.000015f, - -0.000009f, +0.000014f, -0.000032f, -0.000025f, +0.000100f, +0.000022f, -0.000045f, -0.000020f, -0.000010f, +0.000014f, - +0.000002f, +0.000034f, -0.000005f, +0.000043f, +0.000026f, -0.000013f - }, - { - +0.000752f, +0.001995f, -0.002621f, +0.000742f, +0.000171f, +0.000142f, +0.000132f, -0.000131f, -0.000009f, -0.000329f, - +0.000054f, +0.000301f, +0.000175f, +0.002307f, +0.006785f, -0.000539f, -0.000455f, -0.000742f, +0.000112f, +0.001414f, - +0.000569f, +0.000470f, +0.001503f, +0.001341f, +0.001720f, +0.002253f, -0.000118f, -0.000205f, +0.000110f, +0.000236f, - -0.001146f, -0.000065f, -0.000364f, +0.000038f, +0.000119f, -0.000288f, -0.000030f, -0.000475f, -0.000093f, -0.000084f, - +0.000140f, -0.000037f, +0.000156f, +0.000226f, +0.000141f, -0.000322f, +0.000173f, +0.000238f, +0.000085f, +0.000286f, - -0.000146f, -0.000098f, +0.000071f, -0.000183f, -0.000132f, -0.000303f, +0.000100f, -0.000039f, +0.000054f, +0.000055f, - -0.000015f, +0.000096f, -0.000181f, -0.000063f, -0.000116f, -0.000063f, +0.000105f, +0.000143f, +0.000117f, +0.000117f, - +0.000088f, -0.000184f, -0.000138f, -0.000003f, +0.000055f, -0.000074f, -0.000124f, -0.000090f, -0.000092f, +0.000018f, - +0.000080f, -0.000075f, +0.000073f, +0.000086f, +0.000046f, -0.000035f, -0.000008f, +0.000030f, -0.000006f, -0.000028f, - +0.000016f, +0.000100f, -0.000022f, -0.000076f, -0.000026f, +0.000002f - }, - { - -0.003872f, +0.027176f, -0.000406f, -0.001341f, -0.000037f, -0.000088f, -0.000099f, -0.000836f, +0.000018f, +0.000521f, - -0.000420f, -0.000459f, -0.000191f, +0.000581f, -0.002165f, -0.001915f, -0.000284f, -0.000836f, -0.000086f, +0.001084f, - +0.000593f, +0.000214f, -0.000089f, -0.000058f, -0.000020f, +0.000110f, -0.000397f, +0.000413f, +0.000509f, +0.000383f, - +0.000019f, -0.000099f, -0.000070f, +0.000236f, +0.000088f, +0.000302f, +0.000016f, +0.000929f, -0.000024f, -0.000322f, - -0.000162f, +0.000275f, +0.000245f, +0.000532f, +0.000100f, +0.000394f, +0.000210f, +0.000294f, +0.000260f, -0.000071f, - -0.000043f, +0.000246f, +0.000197f, -0.000230f, +0.000138f, -0.000133f, -0.000121f, -0.000000f, -0.000163f, -0.000124f, - -0.000157f, -0.000065f, +0.000094f, +0.000097f, +0.000084f, +0.000011f, -0.000199f, -0.000065f, +0.000116f, -0.000018f, - +0.000018f, +0.000165f, -0.000051f, -0.000221f, +0.000044f, +0.000131f, -0.000014f, +0.000008f, +0.000077f, -0.000049f, - -0.000087f, +0.000071f, -0.000021f, -0.000070f, +0.000057f, +0.000075f, -0.000092f, -0.000036f, +0.000034f, +0.000062f, - -0.000003f, -0.000065f, +0.000046f, +0.000018f, +0.000079f, +0.000029f - }, - { - +0.000669f, +0.000498f, -0.002032f, +0.000150f, -0.000360f, +0.000202f, -0.000066f, -0.000143f, -0.000049f, -0.000317f, - -0.000122f, +0.000647f, +0.000361f, -0.001896f, +0.011427f, -0.000275f, +0.001672f, +0.000740f, -0.000046f, +0.001254f, - +0.001508f, +0.000871f, -0.000762f, +0.001287f, +0.001581f, +0.001344f, +0.000395f, -0.000236f, +0.000149f, -0.000872f, - +0.000608f, +0.000197f, -0.000133f, +0.000588f, +0.000759f, +0.000317f, -0.000028f, -0.000207f, +0.000235f, -0.000361f, - +0.000024f, +0.000208f, +0.000098f, +0.000064f, +0.000143f, +0.000262f, -0.000224f, -0.000497f, +0.000162f, +0.000128f, - -0.000433f, +0.000011f, +0.000023f, -0.000106f, -0.000190f, +0.000123f, +0.000034f, -0.000371f, +0.000177f, +0.000147f, - -0.000056f, +0.000054f, -0.000251f, +0.000131f, -0.000082f, +0.000163f, +0.000117f, -0.000084f, -0.000011f, -0.000021f, - -0.000027f, +0.000020f, +0.000027f, +0.000027f, -0.000077f, +0.000030f, +0.000031f, -0.000051f, -0.000043f, -0.000065f, - -0.000088f, +0.000080f, +0.000078f, +0.000063f, -0.000019f, -0.000041f, -0.000006f, -0.000054f, +0.000046f, -0.000032f, - -0.000039f, +0.000021f, -0.000019f, -0.000009f, +0.000025f, +0.000001f - }, - { - -0.009424f, +0.020441f, +0.002281f, +0.001628f, -0.001197f, -0.000282f, -0.001100f, +0.000062f, +0.000519f, -0.000808f, - -0.000890f, +0.000521f, +0.001489f, +0.000743f, -0.000640f, -0.000845f, -0.001189f, +0.000091f, +0.000269f, +0.000542f, - -0.000174f, +0.000307f, +0.000699f, -0.000484f, -0.000062f, -0.000727f, -0.000113f, +0.000136f, -0.000505f, -0.000019f, - +0.000124f, -0.000632f, -0.000205f, -0.000182f, -0.000386f, +0.000188f, +0.001113f, +0.001017f, -0.000971f, -0.000604f, - +0.000211f, -0.000169f, -0.000321f, -0.000020f, -0.000616f, -0.000235f, +0.000071f, -0.000196f, -0.000084f, +0.000126f, - -0.000023f, -0.000161f, -0.000105f, -0.000077f, +0.000083f, -0.000031f, +0.000064f, -0.000269f, +0.000039f, +0.000120f, - -0.000055f, -0.000056f, +0.000007f, -0.000100f, +0.000305f, +0.000370f, -0.000003f, -0.000079f, +0.000077f, -0.000047f, - -0.000005f, +0.000038f, -0.000045f, -0.000018f, -0.000067f, +0.000002f, +0.000137f, -0.000091f, +0.000045f, +0.000008f, - -0.000006f, -0.000040f, +0.000102f, -0.000006f, +0.000066f, +0.000046f, +0.000070f, -0.000031f, -0.000044f, -0.000064f, - +0.000012f, +0.000008f, +0.000020f, +0.000031f, -0.000050f, +0.000021f - }, - { - -0.000690f, +0.001756f, +0.001419f, -0.000294f, +0.000969f, -0.000559f, -0.000476f, +0.000112f, -0.000082f, -0.001012f, - -0.000182f, +0.000581f, -0.000334f, -0.000886f, -0.002257f, -0.001115f, -0.000397f, +0.001330f, -0.000859f, -0.001540f, - +0.000863f, +0.001151f, +0.001673f, -0.000565f, -0.000310f, -0.000666f, +0.000020f, -0.001009f, -0.000745f, +0.000165f, - -0.000107f, +0.000292f, -0.000610f, -0.000228f, -0.000113f, -0.000064f, +0.000009f, -0.000709f, -0.000197f, +0.000028f, - -0.000223f, -0.000243f, -0.000355f, +0.000068f, -0.000045f, -0.000403f, +0.000045f, +0.000051f, +0.000087f, +0.000025f, - -0.000319f, -0.000122f, -0.000052f, -0.000379f, +0.000222f, +0.000247f, +0.000029f, +0.000053f, -0.000031f, -0.000135f, - -0.000061f, +0.000050f, +0.000011f, +0.000199f, +0.000029f, +0.000102f, +0.000032f, -0.000092f, -0.000202f, -0.000191f, - +0.000056f, -0.000024f, +0.000073f, +0.000066f, -0.000016f, +0.000044f, +0.000063f, +0.000004f, -0.000019f, +0.000069f, - +0.000062f, +0.000042f, -0.000045f, -0.000026f, -0.000044f, -0.000073f, +0.000027f, +0.000018f, +0.000018f, +0.000007f, - -0.000028f, +0.000023f, -0.000016f, -0.000000f, -0.000053f, -0.000044f - }, - { - -0.005602f, +0.009477f, +0.004805f, -0.000488f, +0.000898f, +0.000820f, -0.003045f, +0.000595f, +0.000988f, +0.000011f, - -0.000517f, -0.000025f, -0.000147f, -0.000304f, -0.000758f, -0.000058f, -0.000159f, -0.000583f, -0.000284f, -0.000355f, - -0.000778f, +0.000148f, +0.000012f, -0.000496f, -0.000183f, -0.000029f, +0.000018f, -0.000417f, +0.000177f, -0.000198f, - -0.000595f, -0.000428f, +0.000277f, +0.000413f, -0.000451f, +0.000223f, +0.000501f, -0.000268f, +0.000348f, +0.000236f, - -0.000586f, -0.000358f, +0.000065f, -0.000154f, +0.000232f, -0.000175f, -0.000366f, -0.000059f, -0.000187f, +0.000091f, - -0.000210f, -0.000115f, -0.000152f, -0.000162f, +0.000172f, +0.000195f, +0.000142f, -0.000090f, -0.000283f, +0.000099f, - +0.000122f, -0.000064f, +0.000018f, +0.000173f, -0.000064f, -0.000052f, -0.000017f, +0.000069f, +0.000053f, -0.000059f, - +0.000005f, +0.000091f, -0.000031f, -0.000079f, -0.000070f, -0.000029f, -0.000106f, +0.000056f, +0.000029f, +0.000010f, - +0.000042f, -0.000062f, +0.000025f, +0.000070f, -0.000091f, +0.000033f, -0.000091f, -0.000040f, -0.000051f, +0.000040f, - -0.000004f, -0.000043f, +0.000006f, +0.000069f, -0.000004f, -0.000056f - }, - { - +0.000236f, -0.002978f, -0.000763f, -0.000473f, -0.000324f, -0.000449f, +0.000643f, +0.000147f, -0.000185f, +0.000303f, - -0.000654f, -0.000155f, -0.001265f, -0.002761f, +0.000549f, +0.001685f, -0.000652f, -0.000835f, -0.000604f, -0.000611f, - +0.000933f, +0.001710f, -0.000667f, -0.001224f, -0.000738f, -0.000152f, -0.000745f, -0.000002f, +0.000172f, +0.000018f, - +0.000016f, +0.000843f, -0.000299f, +0.000620f, -0.000921f, +0.000151f, +0.000376f, -0.000205f, -0.000467f, -0.000036f, - +0.000066f, +0.000135f, +0.000162f, -0.000432f, -0.000032f, +0.000147f, +0.000183f, -0.000227f, -0.000169f, -0.000108f, - -0.000365f, +0.000167f, +0.000067f, -0.000244f, -0.000170f, -0.000025f, +0.000198f, +0.000240f, +0.000169f, +0.000054f, - +0.000125f, -0.000182f, +0.000010f, +0.000194f, +0.000256f, -0.000039f, -0.000064f, +0.000112f, +0.000064f, +0.000042f, - -0.000023f, +0.000037f, +0.000033f, -0.000027f, -0.000002f, -0.000116f, -0.000139f, -0.000011f, -0.000003f, +0.000014f, - +0.000027f, -0.000025f, +0.000088f, +0.000065f, +0.000027f, +0.000044f, +0.000084f, +0.000082f, +0.000018f, +0.000010f, - -0.000007f, -0.000040f, -0.000025f, +0.000025f, +0.000005f, -0.000022f - }, - { - -0.000453f, +0.002233f, -0.001187f, -0.003370f, -0.000046f, +0.001272f, -0.001970f, +0.000431f, +0.000078f, +0.001789f, - -0.000449f, -0.000068f, +0.000698f, +0.000554f, +0.001067f, +0.000988f, +0.000895f, -0.000075f, +0.000140f, -0.000697f, - -0.000805f, +0.000203f, -0.000288f, +0.000798f, +0.000536f, +0.000122f, -0.000517f, -0.000076f, -0.000045f, -0.000298f, - -0.000423f, -0.000224f, +0.000222f, +0.000207f, +0.000440f, -0.000132f, +0.000210f, +0.000615f, +0.000096f, -0.000250f, - +0.000336f, -0.000034f, +0.000473f, -0.000229f, +0.000532f, +0.000272f, +0.000305f, +0.000286f, +0.000277f, -0.000309f, - -0.000002f, -0.000141f, -0.000187f, +0.000218f, -0.000493f, -0.000117f, +0.000042f, +0.000005f, +0.000225f, +0.000013f, - -0.000168f, -0.000079f, +0.000025f, -0.000177f, -0.000151f, -0.000038f, +0.000092f, +0.000189f, +0.000035f, -0.000218f, - +0.000075f, +0.000118f, -0.000029f, -0.000099f, +0.000006f, -0.000010f, +0.000024f, +0.000021f, -0.000013f, -0.000059f, - -0.000084f, +0.000098f, +0.000049f, -0.000001f, -0.000113f, -0.000036f, +0.000099f, +0.000083f, +0.000029f, +0.000092f, - +0.000034f, +0.000021f, +0.000001f, -0.000074f, -0.000019f, -0.000098f - }, - { - -0.000640f, +0.000299f, +0.000546f, -0.000229f, +0.000114f, -0.000477f, -0.000012f, +0.000119f, -0.000319f, +0.000354f, - +0.000115f, -0.000142f, +0.000538f, -0.000424f, -0.014313f, +0.000770f, -0.001013f, -0.000485f, +0.000587f, +0.002020f, - -0.000106f, +0.000288f, +0.000566f, -0.001179f, -0.000361f, -0.000559f, -0.000774f, +0.001138f, -0.000905f, -0.000894f, - -0.000078f, +0.000945f, +0.001303f, +0.000825f, +0.000082f, +0.000869f, +0.000312f, +0.000169f, +0.000390f, +0.000022f, - +0.000115f, -0.000156f, -0.000246f, -0.000162f, -0.000060f, -0.000055f, +0.000058f, -0.000467f, -0.000096f, -0.000011f, - -0.000085f, -0.000139f, -0.000093f, +0.000200f, +0.000067f, -0.000053f, +0.000052f, +0.000034f, -0.000104f, -0.000015f, - -0.000102f, -0.000293f, +0.000080f, +0.000052f, +0.000060f, -0.000090f, +0.000173f, -0.000050f, +0.000004f, +0.000070f, - +0.000022f, +0.000107f, -0.000032f, -0.000082f, +0.000060f, -0.000050f, +0.000029f, +0.000152f, -0.000031f, +0.000025f, - -0.000128f, -0.000082f, +0.000083f, +0.000025f, +0.000026f, +0.000085f, +0.000071f, -0.000027f, -0.000052f, +0.000079f, - -0.000033f, -0.000096f, -0.000018f, +0.000041f, -0.000055f, -0.000039f - }, - { - +0.000535f, -0.004818f, +0.001784f, +0.002100f, +0.000791f, -0.002632f, +0.000859f, +0.000432f, -0.000500f, +0.000445f, - +0.002676f, -0.001122f, -0.000570f, -0.001409f, +0.002233f, -0.000979f, -0.000432f, +0.000327f, +0.000261f, +0.000022f, - +0.001573f, +0.000422f, -0.000593f, -0.000527f, +0.000557f, +0.000791f, +0.000622f, +0.000055f, -0.001190f, -0.000579f, - +0.000038f, +0.000049f, +0.000107f, +0.000380f, -0.000256f, +0.000363f, +0.000060f, +0.000105f, +0.000010f, -0.000220f, - -0.000098f, -0.000626f, +0.000107f, +0.000266f, +0.000260f, -0.000087f, +0.000355f, +0.000034f, +0.000126f, -0.000406f, - +0.000542f, -0.000096f, -0.000420f, -0.000176f, -0.000183f, -0.000232f, -0.000015f, +0.000129f, +0.000032f, +0.000089f, - -0.000152f, -0.000034f, +0.000035f, +0.000177f, -0.000077f, -0.000038f, +0.000092f, -0.000014f, -0.000039f, +0.000020f, - +0.000019f, +0.000157f, +0.000060f, -0.000091f, -0.000228f, +0.000000f, +0.000060f, +0.000010f, -0.000060f, +0.000015f, - +0.000090f, +0.000005f, -0.000064f, +0.000054f, +0.000024f, -0.000001f, +0.000035f, -0.000079f, -0.000071f, +0.000077f, - -0.000026f, +0.000048f, +0.000053f, +0.000033f, -0.000021f, -0.000045f - } - }, - { - { - +0.000368f, +0.005727f, +0.000307f, +0.001606f, +0.000154f, -0.000262f, -0.000022f, -0.000204f, -0.000086f, -0.000227f, - -0.000303f, +0.000287f, -0.000170f, +0.002440f, -0.002399f, +0.000913f, +0.001162f, +0.000273f, -0.000798f, -0.000628f, - +0.000822f, -0.001612f, +0.000121f, -0.000537f, +0.000276f, -0.000245f, +0.000330f, -0.000175f, +0.000244f, +0.000374f, - -0.000146f, -0.000905f, -0.000034f, +0.000516f, +0.000312f, +0.000478f, +0.000169f, +0.000738f, +0.000628f, +0.000069f, - -0.000077f, -0.000090f, -0.000064f, -0.000215f, -0.000244f, +0.000038f, +0.000090f, +0.000375f, +0.000111f, +0.000002f, - -0.000095f, -0.000099f, +0.000059f, -0.000078f, -0.000276f, +0.000156f, +0.000127f, +0.000128f, +0.000055f, +0.000025f, - -0.000050f, -0.000393f, -0.000038f, +0.000124f, -0.000167f, -0.000080f, -0.000019f, +0.000020f, -0.000115f, -0.000092f, - +0.000092f, -0.000009f, +0.000069f, -0.000023f, +0.000007f, +0.000042f, +0.000029f, +0.000026f, -0.000046f, -0.000000f, - +0.000077f, -0.000066f, -0.000114f, -0.000079f, -0.000046f, +0.000103f, +0.000041f, -0.000010f, +0.000028f, +0.000064f, - -0.000028f, +0.000004f, +0.000007f, -0.000002f, +0.000062f, +0.000033f - }, - { - -0.005590f, +0.048965f, +0.010437f, +0.003590f, +0.001454f, -0.000471f, -0.000744f, +0.000997f, -0.000227f, -0.000403f, - +0.000246f, -0.000244f, +0.000356f, +0.000581f, -0.000302f, +0.000231f, +0.000741f, -0.000216f, -0.001226f, +0.000254f, - -0.000470f, +0.001115f, -0.000128f, -0.000380f, -0.000182f, +0.000149f, +0.000151f, +0.000095f, -0.000027f, -0.000160f, - +0.000270f, -0.000423f, -0.000101f, +0.000513f, +0.000278f, -0.000208f, +0.000264f, +0.000135f, +0.000504f, -0.000077f, - -0.000325f, -0.000023f, -0.000242f, +0.000386f, -0.000689f, +0.000226f, +0.000140f, +0.000225f, +0.000029f, -0.000026f, - +0.000294f, -0.000337f, -0.000460f, -0.000053f, +0.000059f, -0.000027f, -0.000267f, -0.000131f, -0.000029f, -0.000001f, - -0.000269f, -0.000056f, +0.000071f, -0.000010f, +0.000229f, +0.000106f, -0.000008f, -0.000066f, -0.000169f, +0.000071f, - -0.000003f, +0.000048f, +0.000043f, -0.000018f, +0.000155f, +0.000005f, -0.000071f, +0.000070f, +0.000096f, +0.000002f, - -0.000071f, +0.000006f, -0.000006f, -0.000091f, -0.000044f, +0.000094f, -0.000021f, -0.000039f, +0.000009f, -0.000000f, - +0.000038f, -0.000015f, -0.000047f, +0.000017f, -0.000013f, +0.000002f - }, - { - -0.000160f, +0.009231f, -0.001164f, -0.004206f, -0.001964f, +0.000159f, -0.000336f, +0.000380f, +0.000448f, +0.000510f, - +0.000049f, -0.000269f, +0.000196f, +0.000197f, +0.001311f, +0.000090f, -0.000100f, -0.000030f, +0.001057f, +0.000404f, - +0.000741f, -0.000009f, -0.000410f, +0.000160f, -0.000457f, -0.000653f, -0.000127f, +0.000502f, +0.000288f, +0.000636f, - -0.000032f, -0.000105f, -0.000205f, +0.000152f, +0.000757f, +0.000081f, +0.000095f, -0.000133f, +0.000332f, +0.000115f, - +0.000013f, -0.000648f, +0.000153f, -0.000244f, -0.000401f, +0.000463f, +0.000359f, -0.000168f, -0.000051f, -0.000042f, - +0.000328f, -0.000040f, -0.000200f, -0.000057f, -0.000037f, -0.000110f, -0.000243f, -0.000159f, +0.000279f, +0.000091f, - -0.000192f, -0.000161f, -0.000198f, +0.000097f, -0.000002f, -0.000062f, -0.000037f, +0.000025f, -0.000003f, -0.000078f, - +0.000005f, -0.000026f, +0.000013f, -0.000157f, +0.000037f, -0.000021f, +0.000058f, +0.000007f, +0.000034f, +0.000101f, - -0.000023f, -0.000043f, -0.000076f, -0.000026f, +0.000074f, -0.000023f, +0.000033f, +0.000006f, +0.000011f, +0.000082f, - -0.000002f, -0.000051f, -0.000025f, +0.000012f, +0.000019f, +0.000001f - }, - { - +0.000722f, -0.000884f, -0.001446f, -0.000778f, +0.000109f, +0.000261f, -0.000140f, +0.000100f, +0.000028f, +0.000152f, - +0.000046f, +0.000353f, -0.000029f, -0.002499f, +0.000526f, +0.000792f, +0.002889f, +0.001064f, +0.002997f, +0.000509f, - +0.000288f, -0.000939f, -0.000036f, +0.000848f, -0.001919f, +0.000953f, +0.000507f, -0.000217f, -0.000637f, +0.000102f, - +0.000565f, -0.000807f, +0.000032f, -0.000723f, +0.000535f, +0.000122f, -0.000406f, +0.000294f, -0.000209f, -0.000243f, - +0.000056f, -0.000131f, +0.000030f, +0.000221f, +0.000081f, -0.000233f, -0.000022f, +0.000019f, -0.000314f, -0.000026f, - +0.000251f, +0.000019f, -0.000192f, +0.000187f, +0.000030f, +0.000027f, +0.000185f, -0.000004f, -0.000041f, +0.000078f, - +0.000030f, -0.000153f, -0.000018f, +0.000032f, -0.000162f, -0.000127f, -0.000011f, +0.000004f, -0.000054f, -0.000020f, - +0.000200f, +0.000054f, -0.000018f, -0.000112f, +0.000079f, -0.000020f, -0.000123f, -0.000112f, -0.000024f, +0.000045f, - -0.000001f, -0.000075f, -0.000021f, -0.000010f, -0.000007f, +0.000045f, +0.000004f, -0.000015f, -0.000059f, +0.000035f, - +0.000019f, -0.000074f, -0.000095f, -0.000006f, -0.000036f, -0.000040f - }, - { - +0.006330f, +0.014080f, +0.007341f, -0.000614f, -0.000360f, +0.000079f, +0.000217f, +0.000084f, +0.000311f, +0.000332f, - -0.000035f, -0.000451f, -0.000703f, +0.000637f, -0.000055f, -0.000442f, +0.000082f, +0.000671f, +0.000141f, +0.000500f, - +0.000196f, -0.000617f, -0.000148f, +0.000799f, +0.000121f, -0.000006f, +0.000089f, +0.001407f, +0.000270f, -0.000195f, - +0.000031f, +0.000033f, -0.000131f, -0.000200f, -0.000580f, +0.000154f, +0.000548f, +0.000211f, -0.000154f, +0.000247f, - +0.000418f, +0.000186f, -0.000186f, +0.000396f, +0.000385f, -0.000537f, -0.000200f, +0.000118f, -0.000328f, -0.000160f, - +0.000212f, -0.000421f, +0.000171f, -0.000015f, -0.000062f, +0.000028f, +0.000236f, +0.000217f, +0.000012f, -0.000030f, - -0.000109f, -0.000077f, -0.000097f, -0.000062f, +0.000031f, -0.000106f, -0.000160f, +0.000017f, -0.000141f, +0.000017f, - +0.000030f, +0.000068f, +0.000212f, -0.000099f, -0.000120f, +0.000030f, -0.000113f, +0.000007f, +0.000009f, -0.000046f, - -0.000025f, -0.000014f, -0.000044f, +0.000026f, +0.000057f, +0.000018f, -0.000014f, +0.000004f, +0.000052f, +0.000025f, - +0.000004f, +0.000035f, +0.000023f, +0.000075f, -0.000029f, -0.000016f - }, - { - +0.000049f, -0.000594f, -0.002146f, +0.000465f, +0.000143f, +0.000069f, -0.000162f, -0.000138f, +0.000124f, -0.000011f, - +0.000393f, +0.000246f, -0.000012f, +0.001616f, +0.003326f, -0.000296f, +0.001575f, -0.001279f, -0.000493f, +0.002114f, - +0.000614f, +0.000222f, -0.000590f, -0.000830f, +0.000343f, -0.000125f, -0.001625f, -0.001023f, +0.000251f, +0.001926f, - -0.000731f, +0.000201f, -0.000081f, -0.000562f, -0.000291f, +0.000299f, -0.000019f, -0.000679f, +0.000249f, +0.000140f, - -0.000431f, +0.000053f, +0.000091f, +0.000039f, +0.000083f, -0.000348f, +0.000094f, +0.000227f, +0.000095f, +0.000267f, - -0.000184f, -0.000022f, +0.000170f, +0.000038f, -0.000024f, -0.000274f, +0.000087f, -0.000125f, +0.000082f, +0.000103f, - +0.000027f, +0.000043f, +0.000022f, +0.000057f, -0.000057f, -0.000020f, -0.000028f, +0.000114f, +0.000073f, +0.000079f, - -0.000032f, -0.000100f, -0.000020f, +0.000020f, -0.000053f, -0.000062f, -0.000095f, -0.000091f, -0.000056f, +0.000029f, - -0.000002f, -0.000032f, +0.000053f, +0.000048f, -0.000006f, -0.000038f, -0.000003f, +0.000008f, -0.000022f, -0.000005f, - +0.000065f, +0.000025f, -0.000092f, -0.000045f, -0.000025f, +0.000023f - }, - { - -0.000207f, +0.034850f, +0.000763f, -0.000200f, +0.000011f, -0.000049f, -0.000141f, -0.000065f, +0.000376f, +0.000359f, - -0.000178f, +0.000154f, -0.000030f, +0.001407f, -0.001519f, -0.000803f, +0.000296f, -0.000479f, +0.000370f, +0.000842f, - +0.000537f, -0.000339f, +0.000008f, -0.000148f, -0.000124f, +0.000308f, -0.000757f, +0.000188f, -0.000354f, +0.000373f, - +0.000074f, -0.000303f, -0.000031f, +0.000010f, +0.000157f, -0.000191f, -0.000203f, +0.000762f, +0.000087f, -0.000388f, - -0.000151f, +0.000553f, +0.000024f, -0.000061f, -0.000156f, +0.000184f, +0.000407f, +0.000150f, -0.000005f, +0.000007f, - +0.000032f, +0.000215f, +0.000033f, -0.000110f, -0.000102f, -0.000328f, -0.000079f, +0.000057f, -0.000222f, -0.000110f, - -0.000091f, -0.000087f, +0.000012f, +0.000018f, -0.000050f, -0.000091f, -0.000130f, +0.000111f, +0.000054f, -0.000104f, - +0.000079f, +0.000126f, -0.000112f, -0.000084f, +0.000069f, +0.000051f, -0.000081f, +0.000032f, +0.000038f, -0.000069f, - +0.000005f, +0.000041f, -0.000040f, -0.000044f, +0.000121f, -0.000047f, -0.000067f, +0.000015f, +0.000059f, +0.000026f, - -0.000069f, +0.000013f, -0.000000f, -0.000002f, +0.000040f, -0.000000f - }, - { - +0.000033f, -0.002604f, -0.000505f, +0.000787f, -0.000128f, +0.000219f, -0.000058f, -0.000076f, -0.000024f, +0.000003f, - +0.000372f, +0.000313f, +0.000822f, -0.001664f, +0.009950f, -0.000613f, +0.001177f, -0.000614f, -0.000071f, +0.000019f, - +0.000310f, -0.000236f, -0.000561f, +0.001356f, +0.001315f, +0.001218f, -0.000288f, +0.000417f, +0.000817f, -0.000113f, - +0.000954f, +0.000335f, -0.000490f, +0.000417f, -0.000044f, -0.000051f, +0.000043f, +0.000012f, -0.000058f, -0.000374f, - +0.000013f, +0.000017f, -0.000177f, +0.000070f, -0.000007f, -0.000125f, -0.000348f, +0.000107f, +0.000373f, -0.000007f, - -0.000363f, -0.000217f, +0.000113f, -0.000319f, -0.000212f, -0.000005f, -0.000142f, -0.000245f, +0.000190f, -0.000211f, - -0.000154f, -0.000042f, -0.000163f, +0.000118f, +0.000000f, +0.000198f, -0.000093f, -0.000186f, -0.000055f, +0.000017f, - -0.000106f, -0.000013f, +0.000056f, -0.000031f, -0.000073f, +0.000044f, -0.000088f, -0.000015f, +0.000014f, -0.000023f, - +0.000069f, +0.000075f, +0.000032f, +0.000011f, -0.000058f, -0.000005f, -0.000059f, +0.000011f, +0.000043f, -0.000075f, - +0.000039f, -0.000015f, +0.000004f, +0.000026f, +0.000006f, +0.000012f - }, - { - +0.011710f, +0.040726f, -0.007860f, +0.001920f, +0.000078f, -0.000131f, -0.000676f, +0.000965f, +0.000096f, -0.001017f, - +0.000529f, +0.001414f, +0.000409f, +0.000726f, +0.001753f, -0.000472f, -0.000522f, +0.000278f, -0.000489f, +0.000305f, - +0.000232f, +0.000595f, +0.000586f, +0.000279f, +0.000551f, -0.000435f, +0.000244f, +0.000313f, -0.000838f, -0.000290f, - -0.000183f, -0.000229f, +0.000288f, -0.000044f, -0.000053f, -0.000220f, +0.000130f, +0.000586f, -0.000525f, -0.000359f, - +0.000081f, +0.000125f, -0.000117f, -0.000225f, -0.000300f, -0.000445f, +0.000001f, +0.000161f, +0.000120f, +0.000037f, - -0.000345f, -0.000039f, -0.000008f, -0.000288f, +0.000102f, +0.000142f, +0.000016f, -0.000178f, +0.000216f, +0.000150f, - +0.000004f, +0.000065f, +0.000066f, +0.000013f, +0.000311f, +0.000058f, -0.000174f, -0.000033f, -0.000005f, -0.000103f, - +0.000071f, +0.000013f, -0.000165f, -0.000039f, -0.000141f, +0.000085f, +0.000049f, -0.000105f, +0.000028f, +0.000045f, - -0.000021f, -0.000028f, +0.000105f, +0.000073f, +0.000080f, +0.000062f, -0.000018f, -0.000072f, -0.000025f, -0.000014f, - +0.000062f, +0.000011f, +0.000053f, -0.000040f, -0.000015f, +0.000032f - }, - { - +0.000438f, +0.000668f, -0.000928f, +0.000936f, +0.000677f, -0.001597f, -0.000003f, +0.000178f, +0.000323f, -0.000395f, - +0.000343f, +0.001398f, +0.000149f, -0.000269f, -0.000671f, +0.000341f, -0.000460f, -0.000503f, -0.001115f, +0.000111f, - +0.000727f, -0.001033f, +0.000485f, -0.000507f, +0.000556f, +0.000015f, +0.000504f, -0.000107f, +0.000343f, +0.000472f, - +0.000415f, -0.000049f, -0.000871f, -0.000317f, +0.000095f, -0.000221f, -0.000493f, -0.000753f, -0.000089f, -0.000257f, - -0.000340f, -0.000048f, -0.000061f, +0.000192f, -0.000370f, -0.000270f, -0.000184f, +0.000101f, +0.000047f, -0.000201f, - -0.000272f, -0.000140f, -0.000118f, -0.000004f, +0.000556f, +0.000054f, -0.000174f, +0.000013f, -0.000125f, -0.000043f, - +0.000026f, +0.000037f, +0.000146f, +0.000136f, +0.000103f, +0.000093f, -0.000158f, -0.000138f, -0.000161f, +0.000007f, - +0.000005f, +0.000047f, +0.000161f, -0.000026f, -0.000063f, +0.000029f, +0.000100f, +0.000022f, +0.000043f, +0.000088f, - +0.000013f, -0.000001f, -0.000077f, -0.000015f, -0.000069f, -0.000031f, +0.000054f, -0.000022f, +0.000027f, -0.000052f, - -0.000009f, -0.000027f, -0.000018f, +0.000002f, -0.000065f, -0.000019f - }, - { - +0.003399f, +0.019321f, +0.000578f, -0.004451f, -0.000296f, +0.000795f, -0.002041f, +0.001005f, +0.000615f, -0.000348f, - -0.000229f, +0.000191f, -0.000129f, -0.000061f, +0.000397f, +0.000167f, -0.000296f, -0.000210f, +0.000109f, -0.000804f, - +0.000077f, -0.000312f, -0.000361f, -0.000690f, +0.000330f, +0.000268f, +0.000204f, -0.000236f, -0.000239f, +0.000123f, - -0.000186f, -0.000182f, -0.000072f, -0.000150f, -0.000600f, +0.000232f, +0.000099f, -0.000283f, +0.000504f, -0.000331f, - -0.000752f, -0.000016f, +0.000202f, -0.000132f, +0.000159f, -0.000097f, -0.000194f, -0.000107f, -0.000227f, +0.000263f, - -0.000108f, -0.000009f, -0.000108f, -0.000029f, +0.000066f, +0.000219f, +0.000207f, -0.000330f, -0.000099f, +0.000101f, - +0.000028f, -0.000088f, +0.000080f, +0.000181f, -0.000140f, +0.000018f, -0.000006f, +0.000065f, -0.000026f, +0.000014f, - +0.000044f, +0.000050f, -0.000055f, -0.000115f, -0.000010f, -0.000043f, -0.000050f, +0.000111f, -0.000059f, +0.000020f, - +0.000023f, -0.000052f, +0.000075f, -0.000045f, -0.000049f, -0.000073f, -0.000043f, -0.000030f, -0.000028f, +0.000047f, - -0.000034f, -0.000003f, +0.000035f, +0.000039f, -0.000047f, -0.000029f - }, - { - -0.000373f, -0.002990f, +0.000242f, +0.000567f, -0.000094f, -0.000028f, +0.000887f, -0.000197f, -0.001005f, -0.000043f, - -0.000175f, +0.000255f, -0.000191f, -0.000327f, +0.000998f, +0.001369f, -0.001284f, -0.002315f, -0.000670f, -0.001167f, - +0.000624f, +0.001657f, -0.001152f, -0.001170f, -0.000000f, -0.000242f, -0.000241f, -0.000417f, -0.000284f, -0.001427f, - +0.000625f, +0.000508f, -0.000185f, +0.000516f, -0.000736f, -0.000010f, +0.000294f, -0.000653f, -0.000175f, +0.000045f, - +0.000286f, +0.000067f, -0.000095f, -0.000279f, +0.000092f, +0.000111f, +0.000360f, -0.000126f, -0.000028f, -0.000214f, - -0.000208f, +0.000187f, -0.000047f, -0.000093f, +0.000003f, -0.000001f, +0.000297f, +0.000362f, +0.000010f, +0.000089f, - -0.000046f, -0.000002f, +0.000084f, +0.000281f, +0.000143f, -0.000208f, +0.000051f, -0.000041f, +0.000009f, -0.000005f, - -0.000074f, +0.000053f, -0.000027f, -0.000048f, +0.000042f, -0.000114f, -0.000119f, +0.000037f, -0.000017f, +0.000078f, - +0.000022f, -0.000043f, +0.000080f, +0.000051f, -0.000003f, +0.000074f, +0.000069f, +0.000031f, -0.000017f, +0.000002f, - -0.000007f, -0.000045f, -0.000040f, +0.000055f, +0.000014f, -0.000047f - }, - { - -0.001544f, +0.003171f, +0.000401f, -0.000648f, +0.000305f, -0.002195f, -0.002963f, +0.001609f, +0.000287f, -0.000044f, - -0.001018f, +0.000078f, -0.000387f, -0.000338f, +0.000215f, +0.000416f, +0.000153f, -0.000488f, +0.000288f, -0.001219f, - +0.000173f, +0.000533f, -0.000289f, -0.000041f, -0.000208f, -0.000351f, -0.000197f, -0.000059f, -0.000112f, -0.000207f, - -0.000355f, +0.000097f, -0.000259f, -0.000571f, -0.000066f, -0.000383f, -0.000204f, +0.000087f, -0.000259f, -0.000173f, - +0.000672f, +0.000307f, +0.000565f, +0.000223f, +0.000259f, +0.000517f, -0.000065f, +0.000250f, +0.000166f, -0.000007f, - -0.000179f, -0.000182f, -0.000161f, -0.000102f, -0.000189f, -0.000050f, +0.000097f, +0.000079f, +0.000204f, -0.000129f, - -0.000061f, +0.000047f, +0.000020f, -0.000180f, +0.000054f, +0.000108f, +0.000087f, +0.000118f, -0.000087f, -0.000174f, - +0.000216f, +0.000127f, -0.000144f, -0.000092f, +0.000017f, +0.000008f, +0.000028f, -0.000080f, -0.000037f, -0.000050f, - +0.000062f, +0.000131f, -0.000002f, -0.000031f, -0.000064f, +0.000084f, +0.000137f, +0.000031f, -0.000005f, +0.000054f, - -0.000006f, -0.000003f, -0.000071f, -0.000040f, -0.000032f, -0.000073f - }, - { - +0.000317f, +0.002105f, +0.000409f, +0.000096f, -0.000190f, -0.000360f, -0.000049f, -0.000236f, -0.000420f, +0.000650f, - +0.000180f, -0.000166f, +0.000536f, +0.003499f, -0.006820f, +0.002948f, -0.002610f, +0.000088f, -0.000013f, -0.000284f, - -0.001256f, -0.000400f, +0.000210f, -0.000457f, -0.000368f, -0.001294f, -0.000918f, -0.000014f, -0.000515f, +0.000609f, - +0.000401f, +0.000497f, +0.000146f, -0.000083f, +0.000099f, +0.000229f, +0.000089f, +0.000085f, +0.000015f, +0.000292f, - -0.000008f, -0.000261f, -0.000215f, -0.000029f, +0.000182f, +0.000189f, +0.000082f, -0.000257f, -0.000269f, -0.000003f, - -0.000299f, -0.000014f, +0.000074f, +0.000146f, +0.000010f, +0.000094f, +0.000069f, +0.000019f, -0.000152f, +0.000069f, - -0.000308f, -0.000217f, +0.000044f, -0.000072f, -0.000039f, +0.000098f, +0.000149f, -0.000126f, -0.000004f, +0.000016f, - -0.000033f, +0.000139f, +0.000036f, -0.000057f, +0.000015f, -0.000076f, +0.000135f, -0.000036f, +0.000040f, +0.000001f, - -0.000199f, +0.000021f, +0.000058f, +0.000022f, +0.000082f, +0.000077f, +0.000061f, -0.000091f, +0.000002f, +0.000027f, - -0.000101f, -0.000049f, +0.000061f, +0.000027f, -0.000046f, +0.000034f - }, - { - +0.000519f, -0.003446f, +0.002071f, -0.000910f, -0.001324f, -0.004553f, +0.000435f, +0.000491f, -0.000149f, +0.000692f, - +0.000200f, -0.002034f, +0.000324f, -0.001039f, +0.000840f, -0.001315f, -0.000080f, +0.000164f, -0.000695f, -0.000196f, - +0.001542f, +0.000107f, -0.000039f, -0.000726f, +0.000676f, +0.000677f, +0.000398f, +0.000964f, -0.000442f, -0.000150f, - -0.000023f, -0.000276f, +0.000006f, +0.000320f, +0.000230f, +0.000398f, +0.000344f, +0.000083f, -0.000196f, -0.000130f, - +0.000100f, -0.000079f, +0.000332f, -0.000153f, -0.000071f, +0.000353f, +0.000622f, -0.000191f, -0.000083f, -0.000115f, - +0.000561f, -0.000057f, -0.000253f, +0.000141f, -0.000260f, -0.000065f, +0.000155f, -0.000088f, +0.000134f, +0.000142f, - -0.000022f, +0.000157f, +0.000025f, +0.000205f, -0.000013f, +0.000037f, +0.000079f, +0.000107f, -0.000032f, +0.000005f, - -0.000020f, +0.000133f, +0.000002f, -0.000109f, -0.000122f, +0.000077f, +0.000059f, -0.000033f, -0.000042f, +0.000057f, - +0.000000f, -0.000043f, -0.000009f, +0.000040f, -0.000006f, -0.000061f, +0.000028f, -0.000141f, -0.000005f, +0.000063f, - -0.000042f, +0.000063f, +0.000016f, -0.000003f, -0.000006f, -0.000015f - } - }, - { - { - -0.000621f, +0.010962f, +0.000158f, +0.001124f, -0.000446f, -0.000075f, -0.000381f, +0.000227f, -0.000139f, +0.000066f, - +0.000026f, -0.000229f, +0.001920f, -0.000251f, -0.001364f, +0.000868f, +0.000513f, +0.000197f, +0.001495f, -0.001137f, - +0.000297f, -0.000186f, +0.001435f, +0.000839f, -0.000043f, +0.000030f, -0.000171f, -0.000252f, +0.000653f, +0.000988f, - +0.000109f, -0.000499f, +0.000423f, -0.000628f, +0.000101f, +0.000154f, +0.000162f, +0.000142f, -0.000259f, -0.000478f, - +0.000185f, -0.000087f, +0.000101f, -0.000501f, +0.000143f, -0.000175f, -0.000154f, -0.000211f, +0.000097f, -0.000081f, - +0.000017f, +0.000068f, -0.000029f, +0.000040f, +0.000208f, -0.000140f, -0.000144f, -0.000169f, -0.000062f, +0.000053f, - +0.000115f, +0.000008f, +0.000168f, -0.000003f, -0.000098f, +0.000071f, +0.000008f, -0.000037f, -0.000006f, +0.000165f, - -0.000041f, -0.000054f, -0.000041f, -0.000018f, +0.000029f, +0.000040f, -0.000048f, -0.000002f, +0.000066f, +0.000050f, - -0.000047f, -0.000022f, +0.000070f, +0.000106f, +0.000054f, +0.000005f, -0.000033f, +0.000025f, +0.000016f, -0.000045f, - -0.000046f, +0.000062f, -0.000012f, +0.000023f, -0.000034f, -0.000045f - }, - { - +0.006385f, +0.045511f, +0.001661f, +0.000070f, -0.000466f, -0.000019f, -0.000711f, -0.001856f, -0.001271f, +0.000008f, - -0.000058f, -0.000311f, +0.000746f, +0.000570f, -0.000884f, -0.001229f, -0.000460f, -0.000278f, +0.000661f, -0.000781f, - -0.000698f, +0.000707f, -0.000240f, -0.000590f, +0.000007f, +0.000672f, -0.000760f, -0.000093f, +0.000278f, +0.000155f, - +0.000608f, -0.000270f, -0.000386f, -0.000252f, +0.000307f, +0.000325f, +0.000115f, +0.000170f, -0.000381f, -0.000508f, - -0.000308f, +0.000278f, +0.000304f, +0.000043f, -0.000008f, -0.000028f, -0.000099f, -0.000043f, -0.000625f, +0.000283f, - +0.000131f, -0.000189f, +0.000090f, +0.000292f, +0.000058f, -0.000015f, -0.000123f, +0.000099f, -0.000058f, -0.000081f, - +0.000153f, +0.000050f, +0.000059f, +0.000101f, -0.000010f, -0.000133f, -0.000060f, +0.000073f, +0.000016f, +0.000103f, - -0.000021f, -0.000054f, -0.000050f, +0.000046f, +0.000009f, -0.000094f, +0.000073f, -0.000048f, -0.000062f, -0.000012f, - +0.000078f, -0.000002f, -0.000067f, -0.000002f, +0.000117f, -0.000044f, -0.000102f, +0.000069f, -0.000027f, +0.000017f, - -0.000023f, -0.000001f, +0.000024f, +0.000022f, -0.000010f, +0.000007f - }, - { - +0.000214f, +0.008771f, -0.004188f, -0.002026f, +0.002465f, -0.000160f, +0.000361f, +0.000563f, +0.000154f, -0.000312f, - -0.000722f, -0.000281f, -0.000984f, +0.000082f, +0.000609f, +0.000444f, -0.000530f, +0.000547f, +0.000584f, +0.000161f, - +0.000258f, -0.000554f, -0.000079f, -0.000267f, -0.000670f, -0.000065f, +0.000249f, +0.000544f, -0.000013f, +0.000037f, - -0.000184f, +0.000138f, +0.000468f, -0.000026f, +0.000356f, +0.000020f, -0.000036f, -0.000103f, +0.000510f, -0.000066f, - -0.000483f, +0.000134f, +0.000056f, +0.000076f, +0.000170f, -0.000291f, -0.000343f, +0.000423f, +0.000261f, +0.000401f, - -0.000102f, -0.000342f, -0.000242f, +0.000093f, -0.000088f, -0.000138f, -0.000019f, +0.000199f, +0.000215f, +0.000007f, - -0.000107f, +0.000133f, +0.000165f, +0.000043f, +0.000077f, +0.000085f, +0.000022f, +0.000051f, +0.000013f, +0.000092f, - +0.000041f, -0.000048f, +0.000067f, +0.000005f, -0.000007f, -0.000019f, +0.000084f, -0.000036f, -0.000002f, -0.000054f, - -0.000006f, -0.000042f, +0.000047f, +0.000019f, -0.000096f, -0.000025f, -0.000012f, -0.000050f, +0.000003f, +0.000005f, - +0.000001f, +0.000043f, +0.000026f, +0.000050f, +0.000004f, +0.000012f - }, - { - -0.000476f, -0.003100f, +0.000188f, +0.000247f, +0.000247f, -0.000077f, -0.000100f, -0.000002f, +0.000157f, +0.000115f, - +0.000099f, -0.000099f, -0.000850f, -0.001906f, -0.002344f, +0.003176f, +0.000991f, +0.000883f, +0.001879f, +0.000250f, - +0.000443f, -0.002045f, +0.000235f, +0.000743f, -0.000553f, -0.000318f, +0.000179f, +0.000969f, -0.000744f, -0.001256f, - -0.000227f, +0.001099f, +0.000058f, -0.000827f, -0.000261f, +0.000242f, +0.000228f, -0.000434f, +0.000293f, -0.000048f, - -0.000189f, +0.000087f, +0.000009f, -0.000058f, -0.000212f, -0.000010f, +0.000112f, -0.000018f, -0.000060f, +0.000245f, - +0.000139f, -0.000173f, +0.000233f, +0.000076f, +0.000230f, +0.000212f, -0.000124f, -0.000057f, +0.000167f, -0.000159f, - -0.000117f, -0.000107f, -0.000006f, -0.000072f, +0.000104f, -0.000004f, +0.000013f, -0.000080f, +0.000141f, +0.000068f, - -0.000056f, -0.000173f, -0.000077f, +0.000052f, +0.000051f, -0.000116f, +0.000051f, +0.000110f, +0.000051f, -0.000012f, - -0.000013f, -0.000002f, +0.000032f, -0.000010f, +0.000016f, -0.000065f, -0.000033f, +0.000030f, +0.000070f, +0.000029f, - -0.000009f, -0.000017f, +0.000053f, +0.000038f, -0.000022f, +0.000033f - }, - { - -0.003952f, +0.036933f, -0.002427f, -0.000477f, +0.000492f, +0.000003f, +0.000790f, +0.000048f, -0.000387f, -0.000256f, - +0.000009f, +0.000936f, -0.000667f, -0.000242f, +0.000400f, -0.000166f, +0.000188f, +0.000356f, -0.000280f, +0.000409f, - -0.000394f, -0.000364f, +0.000832f, -0.000823f, -0.000497f, +0.000416f, +0.000499f, -0.000223f, +0.000205f, -0.000252f, - +0.000179f, +0.000290f, -0.000588f, -0.000219f, -0.000354f, -0.000079f, -0.000743f, -0.000988f, +0.000320f, +0.000189f, - -0.000095f, +0.000226f, +0.000162f, +0.000494f, -0.000370f, -0.000118f, +0.000005f, +0.000018f, -0.000067f, -0.000184f, - +0.000068f, +0.000284f, +0.000081f, -0.000198f, -0.000093f, +0.000176f, +0.000146f, -0.000242f, -0.000142f, -0.000115f, - +0.000002f, -0.000187f, -0.000063f, -0.000014f, +0.000018f, -0.000134f, -0.000079f, -0.000201f, -0.000069f, +0.000149f, - +0.000024f, -0.000176f, -0.000116f, -0.000137f, +0.000086f, -0.000010f, +0.000018f, +0.000141f, -0.000107f, -0.000002f, - +0.000053f, +0.000033f, +0.000027f, +0.000021f, -0.000116f, +0.000018f, +0.000023f, -0.000008f, -0.000032f, -0.000034f, - +0.000008f, -0.000042f, +0.000001f, -0.000029f, -0.000048f, +0.000014f - }, - { - -0.000542f, +0.000528f, +0.000678f, -0.000226f, -0.000134f, -0.000106f, -0.000078f, -0.000078f, +0.000364f, +0.000216f, - +0.000150f, -0.000152f, -0.000221f, -0.000506f, -0.001082f, -0.000036f, +0.002458f, -0.000376f, +0.000447f, +0.001531f, - +0.001060f, +0.000687f, -0.000707f, -0.000653f, -0.001783f, -0.001610f, -0.001011f, -0.001292f, -0.000157f, +0.002285f, - -0.000539f, -0.000169f, -0.000128f, +0.000016f, +0.000228f, +0.000388f, +0.000371f, -0.000244f, +0.000502f, -0.000129f, - -0.000126f, +0.000144f, -0.000133f, +0.000211f, +0.000124f, -0.000033f, -0.000002f, -0.000110f, -0.000113f, -0.000029f, - +0.000046f, +0.000241f, -0.000078f, +0.000116f, +0.000051f, +0.000122f, -0.000138f, -0.000146f, +0.000033f, +0.000017f, - +0.000031f, -0.000081f, +0.000182f, +0.000035f, +0.000017f, +0.000033f, -0.000165f, +0.000013f, +0.000050f, -0.000072f, - -0.000076f, +0.000212f, +0.000024f, -0.000043f, +0.000003f, +0.000052f, +0.000124f, +0.000071f, +0.000060f, -0.000061f, - -0.000015f, +0.000079f, -0.000062f, -0.000045f, -0.000027f, +0.000019f, -0.000010f, -0.000009f, -0.000001f, +0.000030f, - -0.000002f, -0.000092f, +0.000011f, +0.000053f, -0.000004f, -0.000006f - }, - { - +0.006696f, +0.025433f, +0.000334f, +0.000749f, -0.000891f, +0.000172f, -0.000081f, +0.000752f, +0.000154f, -0.000245f, - -0.000055f, +0.000448f, -0.000037f, +0.000790f, -0.000748f, +0.000467f, -0.000098f, +0.000303f, +0.000174f, -0.000498f, - -0.000146f, -0.000229f, -0.000033f, -0.000356f, -0.000129f, -0.000108f, -0.000338f, +0.000478f, -0.001046f, -0.000366f, - +0.000224f, -0.000204f, +0.000384f, +0.000166f, +0.000489f, -0.000278f, +0.000079f, +0.000091f, +0.000035f, +0.000010f, - -0.000102f, +0.000318f, -0.000121f, -0.000370f, +0.000214f, -0.000168f, -0.000086f, -0.000367f, +0.000097f, -0.000072f, - -0.000016f, -0.000152f, -0.000100f, +0.000143f, -0.000356f, +0.000050f, +0.000097f, +0.000091f, +0.000151f, +0.000122f, - -0.000007f, -0.000036f, -0.000021f, -0.000062f, -0.000117f, +0.000054f, +0.000163f, +0.000101f, -0.000115f, -0.000004f, - -0.000004f, -0.000190f, +0.000099f, +0.000213f, +0.000017f, -0.000103f, +0.000007f, +0.000060f, -0.000014f, +0.000041f, - +0.000068f, -0.000041f, +0.000051f, +0.000058f, -0.000079f, -0.000081f, +0.000100f, +0.000051f, -0.000010f, -0.000051f, - +0.000014f, +0.000066f, -0.000068f, -0.000024f, -0.000037f, +0.000007f - }, - { - -0.000634f, -0.000596f, +0.002240f, +0.000344f, +0.000215f, -0.000180f, +0.000002f, -0.000276f, +0.000183f, +0.000271f, - -0.000083f, -0.000355f, -0.000722f, -0.000253f, +0.006524f, +0.001625f, -0.001219f, -0.001379f, +0.000057f, -0.001994f, - -0.001138f, -0.000339f, -0.000272f, -0.000377f, +0.001645f, -0.000121f, -0.001109f, +0.000835f, +0.000180f, +0.000256f, - -0.000127f, -0.000203f, -0.000424f, +0.000295f, -0.000696f, +0.000354f, -0.000060f, +0.000288f, -0.000118f, +0.000049f, - -0.000074f, -0.000074f, -0.000012f, -0.000302f, -0.000197f, +0.000007f, +0.000252f, +0.000050f, -0.000323f, +0.000165f, - +0.000171f, -0.000261f, -0.000022f, -0.000050f, +0.000201f, +0.000015f, +0.000049f, +0.000229f, -0.000259f, -0.000305f, - +0.000045f, +0.000067f, +0.000141f, +0.000019f, +0.000029f, -0.000084f, -0.000100f, +0.000001f, -0.000072f, +0.000008f, - -0.000080f, -0.000024f, -0.000025f, -0.000008f, +0.000086f, +0.000018f, -0.000027f, +0.000158f, +0.000101f, +0.000046f, - +0.000090f, -0.000101f, -0.000053f, -0.000086f, -0.000019f, +0.000051f, +0.000033f, +0.000048f, -0.000043f, +0.000042f, - +0.000069f, -0.000057f, +0.000020f, +0.000005f, -0.000004f, -0.000006f - }, - { - -0.011048f, +0.057113f, +0.001622f, +0.002728f, +0.000363f, +0.000178f, +0.000431f, -0.000432f, -0.000689f, +0.000841f, - +0.000209f, -0.000591f, -0.001567f, +0.000284f, +0.002389f, -0.000039f, +0.001213f, -0.000481f, -0.000281f, -0.000106f, - +0.000812f, +0.000342f, +0.000011f, +0.000739f, +0.000192f, +0.000150f, +0.000402f, +0.000391f, -0.000616f, -0.000034f, - +0.000092f, +0.000454f, -0.000139f, -0.000185f, +0.000064f, -0.000386f, -0.000530f, -0.000282f, +0.001058f, +0.000206f, - +0.000194f, +0.000107f, +0.000099f, +0.000121f, -0.000116f, -0.000296f, +0.000548f, +0.000085f, -0.000221f, -0.000099f, - -0.000071f, +0.000012f, -0.000126f, -0.000102f, +0.000173f, -0.000040f, -0.000195f, +0.000138f, +0.000167f, -0.000125f, - +0.000028f, +0.000134f, +0.000078f, +0.000019f, -0.000159f, -0.000249f, +0.000008f, +0.000048f, -0.000107f, +0.000007f, - +0.000015f, -0.000121f, -0.000065f, +0.000055f, +0.000069f, -0.000085f, -0.000117f, +0.000059f, +0.000032f, -0.000006f, - -0.000082f, +0.000036f, -0.000083f, +0.000043f, -0.000078f, -0.000025f, +0.000009f, +0.000040f, +0.000062f, +0.000059f, - +0.000009f, -0.000004f, -0.000031f, -0.000022f, +0.000059f, -0.000007f - }, - { - -0.000171f, -0.001519f, +0.001985f, +0.000210f, -0.000412f, +0.001135f, +0.000668f, -0.000856f, +0.000270f, +0.000487f, - +0.000475f, +0.000008f, -0.000427f, +0.000261f, +0.001261f, +0.000022f, -0.000338f, -0.001547f, +0.001941f, +0.001582f, - -0.000721f, -0.001225f, -0.000092f, +0.000497f, +0.001381f, +0.000306f, +0.000282f, +0.000831f, +0.000208f, +0.000591f, - +0.000503f, -0.001087f, +0.000104f, +0.000246f, -0.000131f, +0.000069f, -0.000114f, +0.000311f, +0.000107f, +0.000086f, - -0.000104f, +0.000246f, -0.000034f, -0.000117f, -0.000104f, +0.000302f, -0.000130f, -0.000007f, -0.000328f, -0.000029f, - +0.000316f, +0.000047f, -0.000040f, +0.000297f, -0.000106f, -0.000286f, -0.000091f, +0.000061f, +0.000075f, +0.000226f, - +0.000039f, -0.000075f, -0.000096f, -0.000121f, -0.000034f, -0.000152f, -0.000044f, +0.000139f, +0.000234f, +0.000142f, - -0.000081f, +0.000089f, +0.000007f, -0.000075f, +0.000043f, -0.000053f, -0.000050f, -0.000028f, -0.000009f, -0.000071f, - -0.000080f, -0.000023f, +0.000018f, +0.000010f, +0.000011f, +0.000061f, -0.000007f, -0.000027f, -0.000012f, -0.000017f, - +0.000034f, +0.000001f, +0.000021f, -0.000002f, +0.000039f, +0.000051f - }, - { - -0.001430f, +0.024775f, -0.001938f, -0.003971f, -0.000201f, +0.002303f, +0.001575f, -0.001009f, -0.000726f, +0.000230f, - -0.000027f, +0.000080f, +0.000580f, +0.000889f, -0.000205f, +0.000427f, +0.000242f, +0.000488f, -0.000096f, -0.000527f, - +0.000295f, -0.000803f, +0.000230f, -0.000388f, +0.000421f, +0.000451f, -0.000188f, -0.000482f, -0.000023f, +0.000391f, - +0.000521f, +0.000077f, -0.000386f, -0.000448f, +0.000022f, -0.000441f, -0.000136f, +0.000446f, -0.000169f, -0.000100f, - +0.000530f, +0.000202f, -0.000189f, -0.000001f, -0.000465f, -0.000063f, +0.000059f, +0.000180f, -0.000129f, -0.000008f, - +0.000184f, +0.000191f, +0.000052f, +0.000018f, -0.000203f, -0.000167f, -0.000048f, -0.000059f, +0.000248f, -0.000155f, - -0.000012f, +0.000033f, -0.000028f, -0.000045f, -0.000033f, +0.000019f, -0.000042f, -0.000014f, -0.000079f, +0.000019f, - +0.000024f, -0.000027f, +0.000017f, +0.000129f, +0.000105f, +0.000047f, +0.000080f, -0.000054f, -0.000077f, -0.000007f, - -0.000061f, +0.000068f, -0.000025f, -0.000041f, +0.000057f, -0.000028f, +0.000086f, -0.000003f, +0.000032f, -0.000047f, - -0.000004f, +0.000036f, -0.000028f, -0.000064f, -0.000010f, +0.000053f - }, - { - +0.000353f, -0.002618f, -0.000011f, +0.000541f, -0.000114f, +0.000221f, -0.000373f, -0.000430f, -0.000798f, -0.000007f, - +0.000246f, -0.000340f, -0.000181f, +0.000993f, -0.000745f, +0.000513f, -0.001044f, -0.001540f, +0.000766f, -0.000422f, - -0.000989f, +0.000554f, +0.000046f, +0.000613f, +0.000542f, -0.001324f, -0.000054f, -0.000740f, -0.000882f, -0.000000f, - +0.000777f, -0.001026f, -0.000052f, -0.000353f, +0.000172f, -0.000462f, +0.000050f, -0.000022f, +0.000431f, +0.000303f, - +0.000124f, -0.000294f, -0.000015f, +0.000348f, +0.000161f, +0.000168f, +0.000027f, -0.000093f, +0.000293f, -0.000009f, - +0.000116f, -0.000191f, -0.000023f, +0.000124f, +0.000184f, -0.000104f, +0.000005f, -0.000351f, -0.000279f, -0.000172f, - +0.000022f, +0.000266f, +0.000035f, -0.000104f, -0.000213f, +0.000008f, +0.000132f, -0.000140f, +0.000008f, +0.000026f, - +0.000038f, +0.000062f, +0.000020f, +0.000054f, +0.000060f, +0.000094f, +0.000086f, +0.000033f, -0.000044f, -0.000004f, - -0.000016f, +0.000035f, -0.000095f, -0.000082f, -0.000022f, -0.000011f, -0.000060f, -0.000056f, -0.000012f, +0.000010f, - -0.000002f, +0.000024f, +0.000025f, -0.000016f, -0.000007f, +0.000026f - }, - { - +0.002371f, -0.004672f, +0.002453f, +0.001896f, +0.000479f, -0.002509f, +0.002409f, +0.000044f, -0.000388f, -0.000253f, - +0.000718f, -0.000016f, +0.000045f, -0.001819f, -0.000150f, -0.000329f, -0.000541f, +0.000254f, -0.000131f, +0.000161f, - +0.000794f, +0.000305f, +0.000016f, -0.000258f, -0.000487f, +0.000385f, +0.000567f, +0.000243f, +0.000241f, -0.000102f, - +0.000103f, +0.000150f, -0.000208f, -0.000808f, +0.000091f, -0.000292f, +0.000203f, -0.000340f, -0.000232f, +0.000584f, - +0.000083f, -0.000158f, -0.000142f, +0.000032f, -0.000473f, -0.000003f, -0.000075f, -0.000421f, -0.000180f, +0.000004f, - -0.000074f, +0.000089f, +0.000010f, +0.000184f, +0.000445f, +0.000141f, +0.000062f, +0.000123f, -0.000231f, -0.000062f, - +0.000196f, -0.000039f, -0.000066f, -0.000048f, +0.000109f, +0.000034f, -0.000104f, -0.000087f, -0.000041f, +0.000150f, - -0.000016f, -0.000070f, -0.000024f, +0.000093f, +0.000019f, +0.000004f, -0.000081f, -0.000018f, +0.000017f, +0.000062f, - +0.000101f, -0.000082f, -0.000057f, +0.000022f, +0.000122f, +0.000071f, -0.000137f, -0.000073f, -0.000038f, -0.000065f, - -0.000039f, -0.000014f, +0.000026f, +0.000070f, +0.000013f, +0.000072f - }, - { - +0.000022f, +0.003232f, -0.001671f, +0.000526f, -0.000243f, +0.000316f, -0.000154f, -0.000176f, +0.000301f, +0.000188f, - +0.000344f, -0.000064f, -0.000958f, +0.001960f, +0.010069f, -0.001807f, -0.002023f, +0.000244f, -0.000058f, -0.000216f, - -0.000390f, -0.000607f, -0.000118f, +0.000782f, -0.000318f, -0.000469f, -0.000171f, -0.000300f, +0.000630f, +0.000384f, - +0.000115f, -0.001083f, -0.000825f, +0.000137f, +0.000111f, -0.000815f, +0.000062f, -0.000095f, -0.000284f, +0.000149f, - -0.000021f, +0.000273f, +0.000041f, +0.000019f, +0.000176f, -0.000033f, -0.000005f, +0.000194f, -0.000140f, -0.000050f, - +0.000164f, +0.000109f, +0.000024f, -0.000096f, -0.000089f, +0.000025f, -0.000052f, -0.000065f, -0.000074f, +0.000047f, - +0.000059f, +0.000185f, -0.000152f, -0.000125f, +0.000017f, +0.000113f, -0.000114f, +0.000158f, +0.000086f, +0.000024f, - -0.000016f, -0.000100f, +0.000008f, +0.000063f, -0.000038f, +0.000057f, -0.000030f, -0.000161f, +0.000072f, -0.000048f, - +0.000091f, +0.000107f, -0.000062f, -0.000010f, -0.000018f, -0.000078f, -0.000071f, +0.000031f, +0.000033f, -0.000068f, - +0.000046f, +0.000107f, +0.000018f, -0.000034f, +0.000058f, +0.000021f - }, - { - -0.000720f, -0.003142f, +0.001107f, -0.001534f, -0.000847f, +0.001990f, -0.001406f, +0.000161f, +0.000177f, +0.000628f, - -0.001086f, +0.000551f, +0.000405f, +0.001910f, -0.003870f, +0.000310f, +0.000765f, +0.000084f, -0.000376f, +0.000586f, - -0.000529f, -0.000277f, +0.000192f, +0.000417f, +0.000273f, -0.000264f, -0.000292f, +0.001669f, +0.000257f, -0.000478f, - +0.000085f, +0.000197f, -0.000313f, -0.000153f, +0.000235f, +0.000056f, -0.000199f, -0.000074f, +0.000142f, +0.000223f, - +0.000018f, +0.000545f, -0.000097f, -0.000380f, -0.000216f, +0.000290f, -0.000187f, +0.000036f, +0.000111f, +0.000267f, - +0.000154f, +0.000304f, +0.000270f, +0.000220f, -0.000006f, -0.000060f, -0.000069f, -0.000153f, +0.000121f, +0.000038f, - +0.000067f, +0.000031f, -0.000134f, -0.000055f, -0.000006f, -0.000030f, -0.000052f, +0.000090f, -0.000025f, +0.000024f, - -0.000041f, -0.000095f, -0.000077f, +0.000139f, +0.000133f, -0.000023f, -0.000067f, -0.000059f, +0.000030f, -0.000019f, - -0.000081f, -0.000014f, +0.000065f, -0.000003f, +0.000036f, +0.000027f, -0.000005f, +0.000041f, +0.000046f, -0.000082f, - -0.000000f, -0.000021f, -0.000022f, -0.000005f, +0.000032f, +0.000039f - } - }, - { - { - +0.000191f, +0.010921f, -0.000497f, +0.000252f, -0.000582f, +0.000144f, -0.000336f, +0.000316f, -0.000117f, +0.000301f, - -0.000402f, +0.000187f, +0.000714f, -0.001152f, +0.000196f, -0.000139f, -0.000339f, +0.000450f, +0.002407f, -0.000790f, - +0.000804f, +0.001194f, +0.000821f, +0.000336f, -0.000144f, -0.000149f, +0.000190f, -0.000153f, +0.000172f, +0.000602f, - +0.000190f, -0.000113f, +0.000481f, -0.000357f, -0.000395f, +0.000036f, +0.000030f, -0.000494f, -0.000548f, -0.000543f, - +0.000092f, -0.000145f, +0.000052f, -0.000138f, +0.000499f, -0.000219f, -0.000244f, -0.000248f, -0.000103f, -0.000110f, - -0.000000f, -0.000048f, -0.000097f, +0.000079f, +0.000069f, -0.000176f, -0.000040f, -0.000255f, +0.000039f, +0.000061f, - +0.000081f, +0.000157f, +0.000118f, +0.000023f, -0.000004f, +0.000061f, -0.000102f, -0.000017f, +0.000103f, +0.000092f, - -0.000063f, -0.000028f, -0.000045f, +0.000036f, +0.000024f, -0.000037f, -0.000056f, +0.000019f, +0.000041f, -0.000012f, - -0.000037f, +0.000025f, +0.000090f, +0.000065f, +0.000016f, -0.000061f, -0.000050f, +0.000009f, +0.000003f, -0.000075f, - +0.000020f, +0.000014f, -0.000005f, +0.000006f, -0.000060f, -0.000027f - }, - { - -0.006133f, +0.029145f, +0.005433f, +0.000148f, -0.000964f, +0.000366f, -0.000427f, -0.001732f, -0.000359f, +0.000702f, - +0.000525f, -0.000027f, +0.000440f, -0.000398f, -0.001222f, -0.000933f, -0.000124f, -0.000258f, +0.000772f, -0.000792f, - -0.000718f, +0.000292f, -0.000085f, -0.000047f, +0.000125f, +0.000202f, -0.000658f, +0.000216f, -0.000084f, -0.000113f, - +0.000123f, +0.000018f, -0.000053f, -0.000150f, +0.000229f, +0.000680f, +0.000320f, +0.000183f, -0.000595f, -0.000332f, - +0.000114f, +0.000289f, +0.000268f, -0.000149f, +0.000003f, -0.000231f, +0.000119f, -0.000251f, -0.000400f, +0.000470f, - -0.000244f, +0.000026f, +0.000369f, +0.000165f, -0.000102f, -0.000041f, +0.000180f, +0.000187f, -0.000077f, -0.000084f, - +0.000219f, -0.000018f, +0.000058f, +0.000128f, -0.000164f, -0.000094f, -0.000041f, +0.000113f, +0.000074f, -0.000008f, - -0.000064f, -0.000078f, +0.000003f, +0.000013f, -0.000115f, +0.000006f, +0.000048f, -0.000087f, -0.000042f, +0.000009f, - +0.000061f, -0.000031f, +0.000010f, +0.000047f, +0.000079f, -0.000121f, +0.000007f, +0.000049f, +0.000000f, +0.000012f, - -0.000036f, +0.000014f, +0.000037f, -0.000022f, +0.000014f, -0.000000f - }, - { - +0.000890f, +0.020136f, +0.006962f, +0.000669f, +0.002199f, -0.000493f, +0.000241f, -0.000105f, -0.000106f, -0.000461f, - -0.000088f, +0.000543f, -0.000504f, -0.000759f, -0.000487f, +0.001449f, +0.000559f, +0.000554f, +0.000225f, +0.000025f, - +0.000076f, -0.000315f, -0.000304f, -0.000115f, -0.000087f, +0.000391f, -0.000064f, -0.000065f, -0.000369f, +0.000491f, - +0.000122f, -0.000132f, +0.000146f, -0.000289f, -0.000077f, -0.000176f, -0.000006f, +0.000068f, +0.000074f, -0.000576f, - -0.000220f, +0.000527f, +0.000149f, +0.000199f, +0.000223f, -0.000613f, -0.000399f, +0.000461f, -0.000050f, +0.000107f, - -0.000004f, +0.000186f, -0.000042f, +0.000011f, -0.000040f, +0.000050f, +0.000116f, +0.000031f, +0.000084f, +0.000009f, - +0.000074f, +0.000172f, +0.000158f, +0.000038f, +0.000096f, -0.000042f, -0.000003f, -0.000036f, +0.000032f, +0.000083f, - -0.000008f, -0.000101f, +0.000031f, +0.000025f, +0.000006f, +0.000027f, +0.000044f, +0.000009f, +0.000004f, -0.000093f, - -0.000000f, +0.000021f, +0.000067f, -0.000027f, -0.000079f, +0.000007f, -0.000056f, -0.000024f, +0.000029f, -0.000032f, - +0.000035f, +0.000036f, +0.000029f, +0.000010f, -0.000008f, +0.000019f - }, - { - +0.000547f, -0.004959f, -0.001480f, +0.000409f, -0.000091f, -0.000211f, -0.000020f, -0.000048f, -0.000063f, +0.000036f, - +0.000062f, -0.000219f, -0.000868f, -0.001034f, -0.004573f, -0.000546f, -0.001174f, +0.000522f, +0.000318f, +0.000214f, - -0.000427f, -0.001801f, +0.000239f, -0.000118f, +0.000057f, -0.001845f, -0.000904f, +0.001427f, -0.000399f, -0.000899f, - -0.000068f, +0.001283f, +0.000220f, -0.000610f, -0.000474f, +0.000143f, -0.000204f, -0.000187f, +0.000299f, -0.000281f, - +0.000039f, +0.000009f, -0.000108f, -0.000225f, -0.000127f, +0.000232f, -0.000080f, +0.000086f, +0.000232f, +0.000130f, - -0.000103f, -0.000067f, +0.000095f, -0.000041f, +0.000226f, -0.000048f, -0.000156f, +0.000094f, +0.000011f, -0.000167f, - -0.000024f, +0.000054f, +0.000003f, -0.000036f, +0.000094f, +0.000004f, +0.000039f, -0.000077f, +0.000078f, +0.000006f, - -0.000153f, -0.000081f, -0.000022f, +0.000075f, -0.000022f, -0.000035f, +0.000144f, +0.000105f, -0.000023f, -0.000049f, - -0.000027f, +0.000036f, +0.000003f, +0.000018f, -0.000000f, -0.000062f, -0.000005f, +0.000051f, +0.000091f, -0.000029f, - +0.000000f, +0.000052f, +0.000078f, +0.000030f, +0.000008f, +0.000040f - }, - { - -0.000935f, +0.045161f, +0.000476f, -0.000970f, -0.000420f, -0.000129f, +0.000625f, +0.000075f, -0.000521f, -0.000480f, - +0.000487f, +0.000394f, -0.000187f, +0.000441f, +0.001047f, +0.000664f, -0.000020f, +0.000211f, +0.000405f, +0.000281f, - -0.000362f, -0.000032f, +0.000831f, -0.001039f, +0.000293f, +0.000245f, +0.000362f, -0.002208f, -0.001286f, +0.000296f, - +0.000659f, +0.000242f, -0.000018f, +0.000125f, +0.000011f, +0.000141f, -0.000715f, -0.000001f, +0.000197f, +0.000053f, - +0.000045f, +0.000071f, -0.000044f, -0.000102f, -0.000436f, +0.000329f, +0.000020f, +0.000023f, +0.000230f, -0.000022f, - +0.000205f, +0.000205f, -0.000125f, -0.000107f, -0.000045f, +0.000178f, -0.000045f, -0.000218f, -0.000086f, -0.000113f, - -0.000032f, -0.000147f, +0.000044f, -0.000068f, -0.000025f, -0.000058f, +0.000020f, -0.000130f, -0.000015f, +0.000069f, - -0.000022f, -0.000165f, -0.000103f, +0.000012f, +0.000072f, -0.000050f, +0.000059f, +0.000068f, -0.000050f, +0.000018f, - +0.000021f, +0.000058f, +0.000050f, -0.000010f, -0.000079f, +0.000032f, +0.000010f, -0.000022f, -0.000062f, -0.000029f, - -0.000013f, -0.000046f, +0.000002f, -0.000050f, +0.000002f, +0.000016f - }, - { - -0.000139f, +0.002463f, +0.000305f, -0.000320f, -0.000149f, -0.000089f, +0.000104f, -0.000153f, +0.000240f, +0.000003f, - -0.000061f, -0.000045f, -0.000474f, -0.001621f, -0.000133f, -0.000756f, +0.000375f, +0.000756f, +0.001912f, +0.000958f, - +0.000310f, +0.000950f, +0.000693f, -0.000654f, -0.002538f, -0.000601f, +0.000066f, -0.000627f, -0.001030f, +0.000605f, - -0.000916f, +0.000012f, -0.000046f, +0.000148f, +0.000258f, -0.000243f, +0.000317f, -0.000096f, +0.000294f, -0.000111f, - +0.000365f, +0.000104f, -0.000013f, +0.000274f, +0.000102f, -0.000064f, -0.000052f, -0.000003f, -0.000012f, -0.000101f, - +0.000106f, +0.000110f, -0.000185f, +0.000055f, -0.000004f, +0.000098f, -0.000132f, -0.000042f, -0.000050f, -0.000078f, - -0.000101f, -0.000051f, +0.000192f, +0.000015f, -0.000022f, +0.000012f, -0.000060f, -0.000011f, +0.000024f, -0.000099f, - +0.000035f, +0.000166f, -0.000071f, -0.000044f, +0.000080f, +0.000050f, +0.000136f, +0.000073f, +0.000025f, -0.000084f, - +0.000040f, +0.000005f, -0.000112f, -0.000049f, +0.000005f, +0.000021f, -0.000011f, +0.000001f, +0.000009f, +0.000009f, - -0.000052f, -0.000034f, +0.000069f, +0.000032f, +0.000006f, -0.000021f - }, - { - -0.011167f, -0.000806f, -0.000532f, +0.001783f, +0.001241f, +0.000135f, +0.000130f, +0.000175f, -0.000623f, -0.000231f, - -0.000189f, +0.000059f, -0.000053f, +0.000314f, -0.000576f, +0.000476f, -0.000279f, +0.000176f, +0.000236f, -0.000372f, - -0.000123f, +0.000254f, +0.000066f, -0.000056f, -0.000006f, +0.000322f, +0.000340f, +0.000184f, -0.000637f, -0.000212f, - +0.000360f, +0.000226f, +0.000280f, -0.000245f, +0.000171f, -0.000369f, -0.000188f, +0.000076f, -0.000006f, +0.000112f, - -0.000129f, -0.000063f, -0.000206f, -0.000188f, +0.000191f, -0.000261f, -0.000498f, -0.000345f, +0.000193f, -0.000132f, - +0.000032f, -0.000028f, +0.000035f, +0.000121f, -0.000090f, +0.000260f, +0.000131f, +0.000008f, +0.000117f, +0.000073f, - -0.000063f, +0.000012f, +0.000017f, -0.000035f, -0.000049f, +0.000134f, +0.000122f, -0.000069f, -0.000138f, +0.000033f, - -0.000067f, -0.000191f, +0.000170f, +0.000123f, -0.000038f, -0.000054f, +0.000017f, +0.000004f, +0.000012f, +0.000055f, - +0.000013f, -0.000010f, +0.000081f, +0.000032f, -0.000130f, +0.000012f, +0.000074f, +0.000012f, -0.000038f, -0.000030f, - +0.000070f, +0.000016f, -0.000034f, -0.000015f, -0.000032f, +0.000011f - }, - { - -0.000110f, +0.001754f, +0.001444f, +0.000572f, -0.000099f, -0.000245f, +0.000082f, -0.000306f, +0.000150f, +0.000050f, - -0.000471f, -0.000304f, -0.000818f, -0.001489f, +0.001809f, -0.002115f, -0.001729f, -0.000333f, -0.000340f, -0.001071f, - +0.000100f, +0.000289f, -0.000395f, -0.000813f, +0.000002f, -0.001102f, -0.000448f, +0.000230f, -0.000017f, +0.000565f, - -0.000526f, -0.000389f, -0.000144f, +0.000181f, -0.000252f, +0.000482f, -0.000125f, +0.000340f, +0.000327f, +0.000369f, - +0.000132f, -0.000188f, +0.000019f, -0.000332f, -0.000333f, +0.000061f, +0.000476f, -0.000159f, -0.000291f, +0.000386f, - +0.000226f, -0.000014f, -0.000026f, +0.000149f, +0.000143f, +0.000077f, +0.000209f, +0.000245f, -0.000287f, -0.000060f, - +0.000132f, +0.000117f, +0.000083f, +0.000030f, -0.000002f, -0.000092f, +0.000016f, +0.000043f, -0.000037f, +0.000020f, - +0.000019f, +0.000028f, -0.000006f, +0.000047f, +0.000074f, -0.000012f, +0.000036f, +0.000113f, +0.000040f, -0.000007f, - -0.000038f, -0.000084f, -0.000025f, -0.000057f, +0.000019f, +0.000028f, +0.000074f, +0.000001f, -0.000025f, +0.000082f, - +0.000010f, -0.000020f, +0.000005f, -0.000019f, -0.000003f, -0.000019f - }, - { - +0.007496f, +0.073055f, -0.001509f, +0.004104f, +0.000938f, +0.000186f, +0.000616f, -0.000744f, -0.000505f, +0.000879f, - -0.000785f, -0.001222f, -0.001037f, +0.000405f, +0.001220f, -0.000376f, +0.000610f, -0.000686f, +0.000201f, +0.000011f, - +0.000604f, -0.000247f, -0.000251f, +0.000141f, -0.000407f, +0.000151f, +0.000198f, +0.000506f, +0.000150f, +0.000449f, - +0.000016f, +0.000013f, -0.000433f, -0.000018f, +0.000239f, -0.000139f, +0.000314f, -0.000450f, +0.000755f, +0.000640f, - +0.000594f, +0.000001f, -0.000102f, +0.000240f, -0.000110f, +0.000253f, +0.000404f, -0.000370f, -0.000231f, -0.000100f, - +0.000060f, -0.000046f, -0.000047f, +0.000050f, +0.000122f, -0.000136f, -0.000197f, -0.000001f, -0.000096f, -0.000163f, - +0.000079f, +0.000051f, +0.000070f, -0.000034f, -0.000268f, -0.000037f, +0.000179f, -0.000002f, -0.000019f, +0.000020f, - -0.000059f, -0.000060f, +0.000046f, +0.000056f, +0.000106f, -0.000184f, -0.000077f, +0.000089f, +0.000014f, -0.000073f, - -0.000019f, +0.000033f, -0.000099f, -0.000011f, -0.000108f, -0.000035f, +0.000049f, +0.000059f, +0.000037f, -0.000003f, - -0.000034f, +0.000003f, -0.000050f, +0.000025f, +0.000024f, -0.000027f - }, - { - +0.000161f, -0.002932f, +0.001081f, -0.001114f, -0.000543f, +0.001501f, -0.000427f, -0.000907f, +0.000013f, -0.000071f, - -0.000147f, -0.000714f, +0.000202f, +0.000455f, +0.001655f, +0.001139f, +0.001350f, +0.000270f, +0.002122f, +0.000142f, - -0.001190f, +0.000040f, +0.000064f, -0.000095f, +0.000669f, -0.000130f, -0.000099f, +0.000329f, +0.000170f, +0.000507f, - +0.000034f, -0.000414f, +0.000618f, +0.000408f, -0.000191f, +0.000209f, +0.000070f, +0.000422f, -0.000248f, +0.000236f, - +0.000139f, +0.000245f, -0.000136f, -0.000130f, +0.000265f, +0.000284f, +0.000116f, -0.000004f, -0.000204f, +0.000249f, - +0.000489f, +0.000106f, -0.000000f, +0.000083f, -0.000337f, -0.000075f, +0.000102f, +0.000046f, +0.000137f, +0.000173f, - -0.000019f, -0.000043f, -0.000157f, -0.000085f, -0.000111f, -0.000115f, +0.000079f, +0.000158f, +0.000187f, -0.000039f, - -0.000049f, +0.000023f, -0.000079f, -0.000029f, +0.000043f, -0.000056f, -0.000097f, -0.000047f, -0.000039f, -0.000089f, - -0.000049f, +0.000007f, +0.000058f, +0.000011f, +0.000034f, +0.000013f, -0.000042f, +0.000007f, -0.000012f, +0.000034f, - -0.000000f, +0.000034f, +0.000022f, -0.000005f, +0.000047f, +0.000030f - }, - { - +0.000038f, +0.025670f, +0.000437f, +0.000694f, +0.000964f, +0.000510f, -0.001779f, -0.001790f, -0.001001f, +0.000422f, - +0.000199f, +0.000295f, +0.000727f, +0.000373f, -0.000733f, +0.000975f, +0.000676f, +0.000729f, +0.000169f, +0.000419f, - -0.000054f, -0.000516f, +0.000136f, -0.000290f, -0.000075f, -0.000138f, -0.000367f, -0.000224f, +0.000288f, +0.000007f, - +0.000008f, -0.000113f, -0.000190f, -0.000269f, +0.000415f, -0.000390f, +0.000110f, +0.000348f, -0.000304f, +0.000275f, - +0.000412f, -0.000126f, -0.000243f, +0.000045f, -0.000292f, -0.000011f, +0.000001f, +0.000171f, -0.000084f, -0.000034f, - +0.000219f, +0.000212f, -0.000023f, -0.000108f, -0.000141f, -0.000243f, -0.000117f, +0.000162f, +0.000165f, -0.000144f, - +0.000046f, +0.000073f, -0.000086f, -0.000115f, +0.000037f, -0.000020f, -0.000027f, -0.000031f, -0.000018f, +0.000011f, - +0.000024f, -0.000003f, +0.000056f, +0.000160f, +0.000032f, +0.000057f, +0.000035f, -0.000130f, -0.000005f, +0.000018f, - -0.000019f, +0.000054f, -0.000061f, +0.000052f, +0.000026f, +0.000060f, +0.000044f, +0.000004f, +0.000039f, -0.000038f, - +0.000023f, +0.000004f, -0.000054f, -0.000033f, +0.000037f, +0.000030f - }, - { - -0.000217f, -0.000853f, +0.001940f, +0.000351f, -0.000018f, -0.000275f, -0.000738f, -0.000213f, -0.000309f, +0.000133f, - +0.000011f, -0.000346f, -0.000275f, -0.001391f, -0.003126f, +0.001757f, +0.000216f, -0.000912f, +0.000455f, +0.000644f, - -0.000268f, +0.000568f, -0.000049f, +0.000168f, -0.000102f, -0.000957f, +0.000024f, -0.000239f, +0.000224f, +0.001442f, - +0.000124f, -0.000545f, -0.000403f, -0.000282f, +0.000431f, -0.000348f, -0.000073f, +0.000234f, +0.000311f, +0.000347f, - -0.000011f, -0.000139f, +0.000236f, +0.000197f, -0.000117f, +0.000071f, -0.000225f, -0.000060f, +0.000346f, +0.000127f, - +0.000202f, -0.000231f, -0.000021f, -0.000074f, -0.000010f, -0.000167f, -0.000159f, -0.000524f, -0.000124f, -0.000133f, - +0.000186f, +0.000106f, -0.000023f, -0.000218f, -0.000151f, +0.000167f, +0.000031f, -0.000067f, -0.000044f, +0.000022f, - +0.000073f, -0.000002f, +0.000047f, +0.000056f, -0.000017f, +0.000081f, +0.000053f, -0.000025f, -0.000014f, -0.000028f, - -0.000008f, +0.000060f, -0.000107f, -0.000091f, -0.000005f, -0.000041f, -0.000047f, -0.000023f, +0.000020f, +0.000007f, - -0.000002f, +0.000033f, +0.000026f, -0.000042f, -0.000012f, +0.000041f - }, - { - -0.000257f, -0.007456f, +0.005324f, +0.000879f, +0.000626f, +0.000377f, +0.002779f, -0.001406f, -0.000639f, +0.000241f, - +0.000614f, +0.000002f, +0.001279f, -0.001897f, -0.000400f, -0.000325f, -0.000384f, +0.000530f, -0.000345f, +0.001074f, - +0.000353f, +0.000201f, -0.000097f, +0.000199f, +0.000094f, +0.000811f, +0.000134f, -0.000120f, +0.000165f, +0.000014f, - +0.000230f, -0.000130f, +0.000051f, -0.000232f, +0.000517f, -0.000102f, +0.000402f, +0.000088f, +0.000032f, +0.000267f, - -0.000251f, -0.000169f, -0.000055f, -0.000242f, -0.000355f, -0.000191f, +0.000028f, -0.000533f, -0.000060f, -0.000139f, - +0.000073f, -0.000009f, -0.000042f, +0.000411f, +0.000259f, +0.000093f, -0.000040f, -0.000010f, -0.000228f, +0.000178f, - +0.000228f, -0.000078f, -0.000068f, -0.000013f, -0.000017f, -0.000028f, -0.000088f, -0.000058f, +0.000046f, +0.000123f, - -0.000139f, -0.000066f, +0.000099f, +0.000097f, -0.000040f, -0.000023f, -0.000040f, +0.000064f, +0.000010f, +0.000053f, - -0.000021f, -0.000102f, +0.000017f, +0.000047f, +0.000064f, -0.000042f, -0.000169f, -0.000031f, -0.000018f, -0.000046f, - -0.000015f, +0.000004f, +0.000085f, +0.000054f, +0.000030f, +0.000055f - }, - { - +0.000121f, +0.002431f, -0.001378f, +0.001121f, -0.000060f, +0.000181f, -0.000042f, +0.000044f, -0.000144f, -0.000382f, - +0.000566f, -0.000010f, -0.000033f, -0.002141f, +0.004210f, -0.001285f, -0.001190f, -0.000425f, +0.000148f, +0.000823f, - +0.000495f, -0.000325f, -0.000255f, +0.000681f, +0.000106f, +0.000280f, -0.000151f, +0.000100f, +0.000106f, -0.000256f, - +0.000489f, -0.000345f, -0.000547f, +0.000292f, -0.000203f, -0.000424f, +0.000044f, -0.000305f, -0.000224f, -0.000201f, - +0.000009f, +0.000313f, +0.000090f, -0.000022f, +0.000087f, -0.000212f, +0.000054f, +0.000254f, +0.000106f, -0.000014f, - +0.000405f, -0.000037f, -0.000168f, -0.000085f, -0.000094f, -0.000092f, -0.000060f, -0.000034f, -0.000004f, +0.000007f, - +0.000283f, +0.000064f, -0.000187f, -0.000053f, +0.000033f, -0.000067f, -0.000142f, +0.000174f, +0.000046f, -0.000012f, - -0.000028f, -0.000084f, +0.000002f, +0.000050f, +0.000009f, +0.000117f, -0.000109f, -0.000020f, +0.000002f, -0.000012f, - +0.000158f, -0.000005f, -0.000045f, -0.000005f, -0.000069f, -0.000065f, -0.000043f, +0.000087f, -0.000011f, -0.000010f, - +0.000105f, +0.000060f, -0.000056f, -0.000023f, +0.000057f, -0.000042f - }, - { - +0.000284f, -0.001294f, +0.000128f, -0.002775f, +0.000260f, +0.004861f, -0.000481f, +0.000220f, -0.000240f, +0.000144f, - -0.000693f, +0.000569f, -0.000252f, +0.000638f, -0.004172f, +0.000711f, +0.000200f, -0.000182f, -0.000045f, +0.000078f, - -0.001018f, -0.000207f, +0.000142f, +0.000661f, -0.000187f, -0.000318f, +0.000124f, +0.001059f, -0.000270f, -0.000432f, - +0.000371f, +0.000420f, -0.000451f, -0.000462f, -0.000142f, +0.000226f, -0.000077f, +0.000130f, +0.000055f, +0.000017f, - -0.000109f, +0.000300f, -0.000548f, -0.000363f, -0.000079f, +0.000048f, -0.000275f, +0.000115f, +0.000223f, +0.000128f, - -0.000054f, +0.000143f, +0.000164f, +0.000083f, +0.000217f, -0.000023f, +0.000010f, +0.000040f, -0.000015f, -0.000121f, - -0.000033f, -0.000036f, -0.000122f, -0.000090f, -0.000009f, -0.000086f, -0.000028f, +0.000011f, -0.000010f, +0.000098f, - -0.000026f, -0.000079f, +0.000046f, +0.000175f, +0.000035f, -0.000097f, -0.000051f, -0.000005f, +0.000062f, -0.000031f, - -0.000030f, +0.000009f, +0.000031f, -0.000019f, +0.000051f, +0.000068f, -0.000021f, +0.000103f, -0.000019f, -0.000072f, - +0.000029f, -0.000049f, -0.000017f, +0.000000f, +0.000011f, +0.000015f - } - }, - { - { - -0.000077f, +0.003609f, +0.003220f, -0.000319f, +0.000223f, +0.000100f, -0.000143f, -0.000117f, +0.000000f, -0.000224f, - -0.000329f, +0.000091f, -0.001023f, -0.000067f, +0.002864f, -0.001933f, +0.000500f, -0.000271f, +0.000612f, +0.000548f, - +0.000887f, +0.000162f, -0.000977f, -0.000548f, +0.000264f, +0.000361f, -0.000014f, -0.000079f, +0.000199f, -0.000719f, - -0.000446f, +0.000473f, -0.000468f, +0.000754f, -0.000103f, +0.000180f, -0.000330f, +0.000469f, +0.000254f, -0.000110f, - -0.000180f, -0.000161f, -0.000039f, +0.000168f, +0.000140f, -0.000014f, +0.000114f, +0.000175f, -0.000164f, -0.000051f, - -0.000284f, -0.000071f, +0.000021f, -0.000222f, -0.000220f, +0.000068f, +0.000095f, +0.000078f, +0.000128f, +0.000048f, - -0.000123f, -0.000098f, -0.000158f, +0.000072f, +0.000020f, -0.000119f, -0.000086f, +0.000064f, -0.000056f, -0.000154f, - +0.000025f, +0.000063f, -0.000019f, +0.000063f, -0.000001f, -0.000011f, +0.000023f, +0.000022f, -0.000070f, -0.000062f, - +0.000034f, -0.000021f, -0.000067f, -0.000125f, -0.000074f, +0.000017f, +0.000056f, -0.000023f, -0.000019f, +0.000050f, - +0.000032f, -0.000038f, +0.000001f, -0.000011f, +0.000036f, +0.000052f - }, - { - +0.005100f, +0.009659f, +0.006781f, +0.004477f, +0.000438f, +0.000092f, -0.000270f, +0.000958f, +0.001097f, +0.000125f, - +0.001046f, +0.000029f, -0.000146f, +0.000021f, -0.001169f, +0.000860f, +0.000673f, -0.000131f, -0.000303f, -0.000635f, - -0.000324f, -0.000133f, +0.000739f, -0.000115f, +0.000208f, -0.000341f, +0.000158f, +0.000586f, -0.000158f, -0.000147f, - -0.000437f, +0.000036f, -0.000080f, +0.000922f, +0.000106f, -0.000042f, +0.000235f, +0.000497f, +0.000268f, +0.000106f, - +0.000294f, -0.000081f, -0.000215f, -0.000115f, -0.000256f, -0.000052f, +0.000342f, +0.000050f, +0.000307f, +0.000002f, - -0.000156f, +0.000016f, -0.000157f, -0.000106f, -0.000067f, -0.000029f, -0.000080f, -0.000072f, -0.000029f, -0.000021f, - -0.000127f, -0.000123f, +0.000076f, +0.000058f, +0.000047f, +0.000128f, +0.000060f, -0.000052f, -0.000109f, -0.000101f, - +0.000025f, +0.000016f, +0.000107f, -0.000069f, +0.000011f, +0.000121f, -0.000102f, +0.000026f, +0.000098f, +0.000016f, - -0.000091f, -0.000026f, +0.000068f, -0.000035f, -0.000082f, +0.000054f, +0.000070f, -0.000066f, +0.000046f, -0.000006f, - +0.000011f, +0.000020f, -0.000017f, -0.000031f, +0.000011f, -0.000016f - }, - { - -0.001405f, +0.034769f, +0.003445f, -0.001748f, -0.002786f, -0.000060f, -0.000219f, -0.000611f, -0.000040f, +0.000394f, - +0.000814f, +0.000410f, +0.001051f, +0.000945f, -0.001250f, +0.001032f, +0.000794f, -0.000364f, +0.000956f, +0.000386f, - +0.000277f, +0.000558f, -0.000709f, +0.000196f, +0.000045f, -0.000319f, -0.000533f, +0.000078f, +0.000428f, +0.000259f, - +0.000348f, -0.000179f, -0.000573f, +0.000162f, +0.000198f, -0.000280f, -0.000031f, -0.000035f, -0.000369f, +0.000044f, - -0.000000f, -0.000166f, +0.000075f, +0.000055f, -0.000362f, +0.000017f, +0.000223f, -0.000033f, -0.000369f, -0.000287f, - +0.000364f, +0.000417f, +0.000137f, -0.000147f, +0.000120f, +0.000105f, -0.000134f, -0.000284f, +0.000054f, +0.000129f, - +0.000107f, -0.000291f, -0.000018f, -0.000009f, -0.000013f, -0.000168f, -0.000084f, -0.000077f, -0.000027f, -0.000069f, - -0.000032f, -0.000065f, -0.000033f, -0.000063f, -0.000027f, +0.000079f, -0.000007f, +0.000034f, +0.000091f, +0.000026f, - -0.000008f, +0.000020f, -0.000038f, -0.000070f, +0.000085f, +0.000007f, -0.000015f, +0.000068f, +0.000015f, +0.000036f, - +0.000011f, -0.000040f, -0.000021f, -0.000021f, +0.000009f, -0.000016f - }, - { - -0.000574f, -0.006177f, +0.001704f, -0.000326f, -0.000221f, +0.000162f, +0.000114f, +0.000013f, -0.000392f, -0.000017f, - +0.000142f, +0.000043f, -0.000290f, -0.000764f, -0.004546f, -0.000650f, -0.000401f, +0.002820f, -0.001331f, -0.000075f, - +0.000637f, -0.000787f, -0.000444f, -0.000759f, -0.000015f, -0.001663f, -0.000299f, +0.000374f, +0.000378f, +0.000618f, - -0.000394f, +0.000311f, -0.000161f, -0.000371f, +0.000157f, -0.000214f, -0.000409f, +0.000221f, -0.000205f, -0.000296f, - -0.000033f, -0.000345f, +0.000104f, +0.000100f, +0.000114f, +0.000003f, -0.000220f, +0.000049f, -0.000013f, -0.000190f, - +0.000162f, +0.000111f, -0.000237f, -0.000018f, -0.000040f, -0.000221f, +0.000160f, +0.000116f, -0.000118f, +0.000082f, - +0.000099f, -0.000021f, -0.000023f, +0.000079f, -0.000145f, -0.000101f, +0.000038f, -0.000012f, -0.000181f, -0.000080f, - +0.000109f, +0.000185f, +0.000001f, -0.000065f, -0.000021f, +0.000101f, -0.000041f, -0.000104f, -0.000096f, -0.000036f, - +0.000017f, -0.000009f, -0.000053f, -0.000007f, -0.000026f, +0.000070f, +0.000044f, -0.000043f, -0.000020f, -0.000022f, - +0.000038f, -0.000001f, -0.000069f, -0.000016f, +0.000014f, -0.000041f - }, - { - +0.006773f, +0.042829f, -0.003922f, -0.002646f, -0.000106f, +0.000034f, +0.000042f, +0.000263f, -0.000124f, +0.000162f, - -0.000343f, -0.000652f, +0.000528f, +0.000339f, +0.001276f, +0.001113f, -0.000409f, +0.000477f, +0.000731f, +0.000231f, - +0.000087f, +0.000173f, -0.000047f, +0.000517f, +0.001058f, -0.000497f, -0.000110f, -0.002357f, -0.000115f, +0.000876f, - +0.000253f, +0.000163f, +0.000353f, +0.000036f, -0.000072f, +0.000220f, +0.000980f, +0.000922f, -0.000295f, -0.000050f, - +0.000647f, +0.000128f, -0.000338f, -0.000341f, +0.000173f, +0.000097f, -0.000248f, -0.000101f, +0.000182f, +0.000322f, - -0.000117f, -0.000331f, -0.000118f, +0.000128f, +0.000105f, -0.000102f, +0.000083f, +0.000202f, +0.000064f, -0.000098f, - -0.000103f, +0.000060f, +0.000012f, -0.000100f, -0.000054f, -0.000008f, -0.000110f, +0.000079f, +0.000026f, -0.000102f, - -0.000042f, +0.000138f, +0.000167f, +0.000059f, -0.000095f, -0.000026f, -0.000043f, -0.000094f, +0.000068f, -0.000041f, - -0.000071f, +0.000038f, -0.000006f, +0.000004f, +0.000089f, +0.000009f, -0.000015f, -0.000002f, +0.000013f, +0.000016f, - -0.000010f, +0.000048f, +0.000014f, +0.000022f, +0.000048f, -0.000017f - }, - { - +0.000471f, -0.000357f, -0.000604f, +0.000384f, +0.000015f, +0.000074f, +0.000012f, -0.000228f, -0.000183f, -0.000071f, - +0.000287f, +0.000181f, +0.000180f, +0.000647f, +0.002355f, -0.000885f, -0.001390f, +0.001386f, +0.000215f, +0.002267f, - +0.000034f, +0.001063f, -0.000915f, -0.000280f, +0.000333f, +0.000216f, -0.000240f, -0.000005f, -0.000650f, -0.000723f, - -0.000419f, +0.000197f, +0.000051f, -0.000674f, -0.000437f, -0.000112f, -0.000142f, -0.000219f, -0.000110f, +0.000290f, - +0.000022f, -0.000127f, +0.000384f, +0.000013f, -0.000198f, +0.000048f, +0.000098f, +0.000227f, +0.000151f, -0.000049f, - -0.000064f, -0.000175f, +0.000158f, +0.000045f, -0.000210f, -0.000114f, -0.000089f, +0.000126f, +0.000038f, -0.000092f, - -0.000010f, -0.000019f, +0.000045f, +0.000029f, -0.000005f, -0.000065f, +0.000110f, +0.000015f, +0.000045f, +0.000085f, - +0.000013f, -0.000100f, -0.000101f, +0.000008f, +0.000040f, -0.000058f, -0.000097f, -0.000114f, -0.000044f, +0.000008f, - +0.000027f, -0.000108f, +0.000007f, +0.000037f, +0.000026f, -0.000043f, +0.000025f, +0.000000f, -0.000020f, -0.000015f, - +0.000012f, +0.000091f, -0.000034f, -0.000075f, +0.000004f, +0.000008f - }, - { - +0.010880f, -0.034645f, +0.002087f, +0.003608f, +0.000346f, -0.000309f, -0.000061f, -0.000311f, -0.000376f, +0.000154f, - -0.000179f, -0.000396f, -0.000006f, -0.000538f, +0.000379f, -0.000419f, -0.000466f, -0.000356f, +0.000534f, +0.000913f, - +0.000524f, +0.000478f, -0.000197f, +0.000305f, +0.000316f, +0.000441f, +0.000060f, -0.000389f, +0.000467f, +0.000138f, - +0.000147f, -0.000103f, +0.000071f, -0.000251f, -0.000428f, -0.000396f, -0.000313f, +0.000963f, -0.000058f, -0.000437f, - -0.000078f, -0.000260f, +0.000039f, +0.000373f, -0.000185f, +0.000043f, -0.000146f, +0.000072f, -0.000028f, +0.000171f, - +0.000121f, +0.000206f, +0.000236f, -0.000092f, +0.000067f, -0.000019f, -0.000108f, -0.000107f, -0.000123f, -0.000198f, - -0.000139f, +0.000042f, +0.000017f, +0.000031f, +0.000065f, -0.000052f, -0.000175f, -0.000098f, +0.000080f, -0.000059f, - -0.000052f, +0.000169f, -0.000023f, -0.000188f, -0.000005f, +0.000086f, -0.000082f, -0.000033f, +0.000068f, -0.000075f, - -0.000017f, +0.000075f, -0.000030f, -0.000067f, +0.000074f, +0.000052f, -0.000107f, -0.000019f, +0.000022f, +0.000059f, - +0.000002f, -0.000045f, +0.000045f, +0.000008f, +0.000033f, -0.000004f - }, - { - +0.000600f, +0.000519f, -0.001859f, +0.000540f, -0.000149f, +0.000173f, +0.000008f, -0.000194f, +0.000004f, -0.000182f, - -0.000072f, +0.000369f, +0.000182f, -0.000567f, -0.001359f, -0.002143f, +0.000514f, +0.001473f, -0.000966f, +0.000344f, - +0.001695f, +0.001178f, -0.000312f, +0.000628f, -0.000346f, +0.000303f, +0.000052f, +0.000058f, +0.000299f, +0.000184f, - -0.000104f, +0.000416f, +0.000275f, -0.000040f, +0.000179f, +0.000350f, -0.000009f, +0.000207f, -0.000078f, +0.000186f, - +0.000280f, -0.000293f, +0.000189f, -0.000123f, -0.000079f, -0.000087f, -0.000244f, -0.000057f, +0.000572f, -0.000008f, - -0.000144f, +0.000169f, +0.000042f, -0.000067f, -0.000291f, +0.000028f, -0.000035f, -0.000114f, +0.000099f, +0.000074f, - -0.000039f, -0.000091f, -0.000091f, +0.000016f, +0.000048f, +0.000159f, -0.000001f, -0.000076f, -0.000045f, +0.000053f, - +0.000008f, +0.000068f, +0.000025f, +0.000019f, -0.000079f, +0.000028f, -0.000017f, -0.000094f, -0.000037f, -0.000070f, - -0.000051f, +0.000101f, +0.000021f, +0.000043f, -0.000011f, -0.000024f, -0.000000f, -0.000041f, +0.000052f, -0.000015f, - -0.000054f, +0.000041f, -0.000014f, +0.000000f, -0.000007f, +0.000007f - }, - { - -0.000535f, +0.078144f, +0.006253f, +0.004030f, -0.000199f, -0.000162f, -0.000071f, +0.000315f, +0.000290f, -0.000954f, - -0.000322f, +0.000558f, +0.000932f, +0.000260f, +0.001180f, -0.000530f, -0.001553f, +0.000351f, +0.000192f, +0.000212f, - -0.000178f, +0.000174f, +0.000711f, -0.001086f, -0.000174f, -0.000125f, -0.000119f, +0.000408f, +0.000009f, +0.000267f, - -0.000352f, -0.000457f, +0.000080f, +0.000401f, -0.000157f, +0.000497f, +0.000182f, +0.000260f, -0.000653f, +0.000387f, - +0.000440f, -0.000474f, +0.000006f, -0.000182f, +0.000004f, +0.000482f, -0.000492f, -0.000351f, +0.000201f, +0.000158f, - -0.000208f, +0.000037f, -0.000085f, -0.000121f, -0.000031f, +0.000103f, +0.000019f, -0.000216f, -0.000244f, +0.000094f, - +0.000148f, +0.000006f, -0.000005f, +0.000017f, +0.000149f, +0.000224f, +0.000049f, -0.000110f, +0.000059f, -0.000040f, - -0.000047f, +0.000091f, -0.000001f, -0.000084f, -0.000063f, +0.000005f, +0.000048f, -0.000047f, -0.000018f, -0.000034f, - +0.000059f, -0.000016f, +0.000056f, +0.000047f, +0.000033f, +0.000059f, +0.000010f, -0.000065f, -0.000041f, -0.000076f, - +0.000007f, +0.000038f, +0.000028f, +0.000008f, -0.000058f, +0.000005f - }, - { - -0.000167f, -0.001751f, -0.000782f, -0.000196f, +0.000821f, -0.001153f, -0.001375f, +0.000357f, -0.000304f, -0.000505f, - -0.000607f, +0.000370f, +0.000697f, +0.000538f, +0.001246f, -0.000271f, +0.002357f, +0.001474f, -0.001407f, -0.001303f, - +0.000747f, +0.001012f, -0.001118f, -0.001221f, +0.000228f, -0.000425f, +0.000104f, -0.000685f, +0.000772f, +0.000123f, - +0.000060f, +0.000490f, -0.000384f, +0.000133f, -0.000046f, -0.000121f, -0.000264f, -0.000490f, -0.000444f, -0.000036f, - -0.000101f, -0.000126f, -0.000332f, +0.000181f, +0.000250f, -0.000338f, +0.000190f, +0.000075f, +0.000218f, +0.000006f, - -0.000199f, -0.000037f, -0.000043f, -0.000171f, +0.000317f, +0.000328f, +0.000046f, -0.000062f, -0.000038f, -0.000166f, - +0.000020f, +0.000095f, +0.000104f, +0.000150f, -0.000016f, +0.000129f, +0.000000f, -0.000128f, -0.000188f, -0.000156f, - +0.000030f, -0.000032f, +0.000049f, +0.000058f, -0.000076f, +0.000033f, +0.000052f, -0.000007f, +0.000007f, +0.000068f, - +0.000038f, +0.000024f, -0.000014f, -0.000032f, -0.000044f, -0.000072f, +0.000015f, +0.000027f, +0.000014f, -0.000010f, - -0.000043f, +0.000022f, -0.000026f, -0.000013f, -0.000042f, -0.000041f - }, - { - +0.001114f, +0.022684f, +0.005198f, +0.000971f, +0.000406f, -0.002543f, -0.004531f, +0.000296f, -0.000030f, +0.000060f, - +0.000266f, +0.000462f, -0.000169f, -0.000638f, +0.000222f, +0.000865f, +0.000027f, +0.000124f, -0.000009f, +0.000522f, - -0.000239f, -0.000258f, -0.000331f, -0.000107f, -0.000741f, -0.000120f, -0.000080f, +0.000047f, +0.000344f, -0.000585f, - -0.000626f, -0.000265f, -0.000077f, +0.000421f, -0.000120f, +0.000089f, +0.000439f, -0.000489f, +0.000149f, -0.000080f, - -0.000759f, -0.000192f, +0.000084f, +0.000146f, +0.000241f, +0.000028f, -0.000051f, -0.000440f, +0.000000f, +0.000132f, - +0.000011f, -0.000031f, -0.000193f, -0.000140f, +0.000216f, +0.000127f, +0.000119f, -0.000086f, -0.000190f, +0.000103f, - +0.000057f, -0.000026f, -0.000008f, +0.000066f, +0.000004f, -0.000032f, +0.000074f, +0.000027f, -0.000011f, +0.000008f, - +0.000052f, +0.000042f, -0.000002f, -0.000087f, -0.000085f, -0.000023f, -0.000100f, +0.000036f, +0.000047f, +0.000011f, - +0.000068f, -0.000063f, +0.000035f, +0.000040f, -0.000053f, -0.000006f, -0.000086f, -0.000020f, -0.000002f, +0.000046f, - +0.000004f, -0.000033f, +0.000007f, +0.000052f, +0.000004f, -0.000045f - }, - { - +0.000198f, +0.001514f, -0.000152f, +0.000158f, -0.000414f, -0.000344f, +0.000156f, -0.000159f, -0.000083f, +0.000128f, - -0.000475f, +0.000349f, -0.000915f, -0.002350f, -0.000118f, +0.001718f, -0.000051f, -0.001303f, -0.001348f, +0.000541f, - +0.001573f, +0.000898f, -0.001381f, -0.000908f, -0.001826f, +0.000971f, +0.000240f, +0.000121f, +0.000963f, -0.000045f, - -0.000464f, +0.000890f, +0.000124f, +0.000312f, +0.000048f, -0.000015f, -0.000103f, -0.000477f, -0.000194f, +0.000051f, - +0.000191f, +0.000256f, +0.000050f, -0.000220f, -0.000328f, +0.000026f, +0.000146f, -0.000100f, +0.000129f, -0.000127f, - -0.000097f, +0.000063f, -0.000058f, -0.000247f, -0.000200f, -0.000077f, +0.000037f, +0.000180f, +0.000294f, +0.000104f, - +0.000092f, -0.000125f, +0.000027f, +0.000058f, +0.000180f, -0.000065f, -0.000019f, +0.000070f, -0.000078f, +0.000022f, - -0.000038f, -0.000034f, -0.000001f, -0.000041f, -0.000072f, -0.000104f, -0.000149f, -0.000015f, +0.000025f, +0.000041f, - +0.000026f, -0.000021f, +0.000067f, +0.000031f, +0.000029f, +0.000050f, +0.000079f, +0.000053f, +0.000025f, -0.000009f, - -0.000011f, -0.000030f, -0.000037f, +0.000013f, +0.000014f, -0.000021f - }, - { - -0.002635f, -0.002299f, +0.004759f, -0.001108f, +0.000147f, +0.000864f, -0.002084f, -0.000804f, +0.000461f, +0.000654f, - -0.000910f, +0.000047f, -0.000364f, +0.001101f, -0.000517f, +0.000615f, +0.000236f, -0.000408f, +0.000113f, -0.000187f, - -0.000314f, +0.000427f, -0.000202f, +0.000257f, +0.000418f, +0.000120f, -0.000310f, -0.000719f, -0.000493f, +0.000015f, - -0.000022f, -0.000291f, +0.000096f, +0.000143f, +0.000138f, -0.000173f, +0.000010f, +0.000396f, +0.000024f, -0.000289f, - +0.000196f, +0.000398f, +0.000158f, +0.000215f, +0.000326f, +0.000395f, +0.000005f, +0.000164f, +0.000284f, -0.000333f, - -0.000019f, -0.000190f, -0.000206f, -0.000036f, -0.000219f, -0.000196f, -0.000026f, -0.000017f, +0.000242f, +0.000131f, - +0.000001f, +0.000036f, -0.000083f, +0.000003f, -0.000143f, +0.000041f, +0.000124f, +0.000099f, +0.000036f, -0.000149f, - +0.000028f, +0.000096f, -0.000001f, -0.000084f, -0.000025f, -0.000040f, +0.000083f, -0.000001f, -0.000044f, -0.000068f, - -0.000059f, +0.000099f, +0.000071f, -0.000008f, -0.000113f, -0.000053f, +0.000113f, +0.000068f, +0.000027f, +0.000068f, - +0.000022f, +0.000026f, -0.000023f, -0.000061f, -0.000017f, -0.000085f - }, - { - -0.000284f, +0.001839f, +0.001399f, +0.000622f, -0.000158f, -0.000339f, -0.000107f, -0.000035f, -0.000357f, -0.000236f, - +0.000134f, +0.000176f, +0.001382f, -0.002719f, -0.009241f, +0.003123f, -0.001089f, -0.000924f, +0.001147f, +0.000527f, - -0.000753f, -0.000201f, -0.000981f, -0.000217f, +0.000324f, -0.000088f, -0.000258f, -0.000070f, -0.000861f, +0.000310f, - +0.000672f, +0.000859f, +0.000231f, +0.000123f, +0.000054f, +0.000374f, +0.000178f, -0.000018f, -0.000243f, -0.000044f, - +0.000278f, -0.000482f, -0.000161f, +0.000190f, -0.000078f, +0.000160f, +0.000083f, -0.000147f, -0.000134f, +0.000098f, - +0.000061f, -0.000313f, -0.000034f, +0.000181f, -0.000003f, -0.000017f, +0.000062f, -0.000059f, -0.000005f, +0.000060f, - -0.000117f, -0.000278f, +0.000017f, -0.000013f, -0.000106f, -0.000025f, +0.000064f, -0.000091f, -0.000062f, -0.000055f, - -0.000031f, +0.000158f, +0.000002f, -0.000046f, +0.000057f, -0.000018f, +0.000045f, +0.000144f, -0.000053f, +0.000028f, - -0.000077f, -0.000126f, +0.000078f, +0.000019f, +0.000024f, +0.000096f, +0.000076f, -0.000023f, -0.000042f, +0.000083f, - -0.000042f, -0.000085f, -0.000020f, +0.000034f, -0.000050f, -0.000034f - }, - { - +0.000689f, -0.001625f, +0.000533f, -0.001349f, +0.000063f, -0.000468f, +0.000674f, +0.000388f, +0.000228f, +0.000104f, - -0.000557f, -0.001091f, -0.000773f, -0.002706f, +0.000680f, -0.000573f, -0.000507f, -0.000607f, +0.000142f, -0.000370f, - +0.000181f, +0.000144f, +0.000271f, -0.000414f, -0.000134f, +0.000982f, +0.000008f, -0.000591f, +0.000330f, -0.000218f, - +0.000342f, +0.000181f, -0.000491f, +0.000154f, +0.000023f, +0.000795f, +0.000334f, -0.000003f, -0.000433f, -0.000295f, - -0.000240f, -0.000143f, -0.000247f, +0.000099f, -0.000001f, +0.000097f, +0.000485f, -0.000013f, -0.000008f, -0.000161f, - -0.000014f, -0.000192f, -0.000296f, -0.000069f, +0.000163f, +0.000009f, +0.000274f, +0.000073f, -0.000114f, -0.000013f, - -0.000077f, +0.000083f, +0.000084f, +0.000133f, -0.000007f, +0.000010f, +0.000076f, -0.000051f, +0.000100f, +0.000040f, - +0.000014f, +0.000136f, +0.000115f, -0.000091f, -0.000182f, -0.000023f, +0.000060f, +0.000050f, +0.000017f, -0.000007f, - +0.000097f, -0.000050f, -0.000058f, +0.000030f, +0.000014f, -0.000007f, -0.000005f, -0.000047f, -0.000100f, +0.000065f, - +0.000009f, +0.000004f, +0.000030f, -0.000002f, -0.000020f, -0.000045f - } - }, - { - { - +0.000409f, -0.005816f, -0.004258f, -0.000036f, -0.000062f, -0.000070f, -0.000146f, -0.000026f, +0.000346f, -0.000203f, - +0.000074f, -0.000481f, -0.000670f, -0.000172f, +0.002292f, -0.000473f, +0.000657f, -0.001613f, -0.001398f, +0.000489f, - +0.001110f, -0.000828f, -0.000689f, -0.000653f, +0.000572f, +0.000810f, +0.000077f, +0.000336f, +0.000315f, -0.000731f, - -0.000897f, +0.000000f, -0.000049f, +0.000875f, -0.000045f, +0.000007f, +0.000132f, +0.000981f, +0.000227f, +0.000116f, - -0.000247f, -0.000069f, +0.000003f, +0.000058f, +0.000002f, -0.000181f, +0.000002f, +0.000197f, -0.000045f, +0.000020f, - -0.000294f, -0.000059f, +0.000081f, -0.000227f, -0.000067f, +0.000190f, +0.000060f, +0.000232f, +0.000016f, -0.000077f, - -0.000113f, -0.000171f, -0.000109f, +0.000068f, -0.000034f, -0.000105f, -0.000004f, +0.000011f, -0.000144f, -0.000058f, - +0.000078f, +0.000049f, -0.000027f, +0.000020f, -0.000028f, +0.000025f, +0.000028f, -0.000030f, -0.000087f, -0.000004f, - +0.000043f, -0.000057f, -0.000083f, -0.000086f, -0.000040f, +0.000072f, +0.000060f, -0.000016f, +0.000005f, +0.000079f, - -0.000039f, -0.000016f, -0.000014f, -0.000005f, +0.000059f, +0.000041f - }, - { - -0.005029f, -0.002707f, +0.001174f, +0.000798f, +0.000178f, +0.000002f, +0.000222f, +0.001403f, +0.000546f, -0.000431f, - +0.000606f, -0.000094f, +0.000015f, +0.001038f, -0.000242f, +0.001295f, +0.000256f, -0.000400f, -0.000410f, -0.000474f, - +0.000197f, -0.000287f, +0.000468f, -0.000455f, +0.000068f, -0.000146f, +0.000426f, +0.000662f, +0.000016f, +0.000065f, - -0.000308f, -0.000013f, -0.000002f, +0.000549f, -0.000292f, -0.000523f, +0.000217f, +0.000791f, +0.000466f, -0.000054f, - +0.000007f, -0.000168f, -0.000025f, +0.000070f, -0.000182f, +0.000171f, +0.000166f, +0.000356f, +0.000310f, -0.000031f, - +0.000041f, -0.000166f, -0.000273f, -0.000041f, +0.000038f, +0.000041f, -0.000244f, -0.000077f, -0.000044f, -0.000011f, - -0.000126f, -0.000019f, +0.000077f, -0.000024f, +0.000133f, +0.000072f, +0.000029f, -0.000086f, -0.000091f, +0.000051f, - +0.000025f, +0.000012f, +0.000056f, -0.000067f, +0.000109f, +0.000015f, -0.000103f, +0.000046f, +0.000052f, +0.000002f, - -0.000069f, -0.000003f, +0.000024f, -0.000064f, -0.000050f, +0.000117f, -0.000017f, -0.000039f, +0.000017f, -0.000003f, - +0.000026f, +0.000007f, -0.000029f, +0.000004f, -0.000006f, -0.000010f - }, - { - +0.000715f, +0.032996f, -0.001619f, -0.000290f, -0.001334f, +0.000201f, -0.000340f, -0.000158f, +0.000299f, +0.000272f, - +0.000396f, +0.000022f, +0.001291f, +0.001380f, -0.001868f, -0.000139f, -0.000145f, -0.000013f, +0.001516f, +0.000213f, - +0.000365f, +0.000731f, -0.000206f, +0.000286f, -0.000279f, -0.000720f, -0.000491f, +0.000153f, +0.000715f, +0.000161f, - +0.000218f, -0.000330f, -0.000203f, +0.000500f, +0.000084f, -0.000440f, -0.000179f, -0.000061f, -0.000014f, +0.000586f, - +0.000097f, -0.000338f, -0.000019f, -0.000004f, -0.000272f, +0.000332f, +0.000005f, -0.000379f, -0.000214f, -0.000102f, - +0.000318f, +0.000066f, +0.000059f, -0.000049f, +0.000124f, -0.000023f, -0.000111f, -0.000064f, +0.000069f, +0.000032f, - -0.000091f, -0.000276f, -0.000040f, -0.000096f, -0.000013f, -0.000070f, -0.000078f, +0.000006f, -0.000027f, -0.000051f, - +0.000016f, -0.000017f, -0.000026f, -0.000039f, +0.000008f, +0.000031f, +0.000011f, -0.000017f, +0.000078f, +0.000053f, - +0.000002f, +0.000002f, -0.000031f, -0.000017f, +0.000090f, +0.000008f, +0.000039f, +0.000053f, -0.000013f, +0.000035f, - -0.000049f, -0.000038f, -0.000031f, +0.000001f, +0.000016f, -0.000023f - }, - { - +0.000262f, -0.005693f, +0.000844f, -0.000769f, -0.000101f, +0.000200f, +0.000106f, +0.000042f, -0.000320f, +0.000011f, - +0.000120f, +0.000352f, +0.000092f, -0.001651f, -0.003207f, +0.001362f, +0.000523f, +0.001262f, -0.002172f, +0.000498f, - +0.000751f, -0.001194f, -0.000491f, -0.000236f, +0.000097f, +0.000616f, +0.001519f, +0.000531f, +0.000085f, +0.000326f, - -0.000535f, +0.000339f, +0.000100f, -0.000010f, +0.000632f, -0.000299f, +0.000347f, +0.000488f, -0.000334f, +0.000061f, - +0.000097f, -0.000368f, +0.000264f, +0.000218f, +0.000138f, +0.000082f, -0.000037f, -0.000052f, -0.000260f, -0.000190f, - +0.000256f, -0.000040f, -0.000055f, +0.000159f, -0.000056f, -0.000075f, +0.000200f, -0.000054f, -0.000095f, +0.000023f, - +0.000051f, -0.000058f, -0.000026f, +0.000007f, -0.000110f, -0.000057f, +0.000020f, -0.000017f, -0.000131f, -0.000023f, - +0.000162f, +0.000099f, -0.000034f, -0.000090f, +0.000029f, +0.000031f, -0.000136f, -0.000085f, -0.000005f, -0.000004f, - +0.000020f, -0.000041f, -0.000032f, -0.000020f, +0.000002f, +0.000058f, +0.000016f, -0.000050f, -0.000055f, -0.000001f, - +0.000034f, -0.000035f, -0.000077f, -0.000012f, -0.000015f, -0.000050f - }, - { - -0.011604f, +0.023544f, +0.001028f, -0.002815f, -0.000735f, +0.000043f, +0.000142f, +0.000328f, -0.000109f, +0.000402f, - -0.000775f, -0.000132f, +0.000297f, -0.000255f, +0.000275f, +0.000305f, -0.000550f, +0.000111f, +0.000083f, +0.000077f, - +0.000070f, +0.000047f, +0.000004f, +0.000866f, +0.000543f, -0.000233f, -0.000192f, -0.000399f, +0.001480f, +0.000510f, - -0.000083f, +0.000091f, +0.000161f, -0.000022f, -0.000075f, +0.000433f, +0.001316f, +0.000013f, -0.000608f, -0.000020f, - +0.000206f, -0.000182f, -0.000189f, +0.000060f, +0.000396f, -0.000121f, -0.000201f, +0.000065f, +0.000172f, +0.000316f, - -0.000389f, -0.000379f, +0.000085f, +0.000112f, -0.000002f, -0.000201f, +0.000071f, +0.000076f, +0.000039f, -0.000035f, - -0.000016f, +0.000033f, -0.000063f, -0.000075f, -0.000005f, +0.000033f, -0.000083f, +0.000067f, -0.000033f, -0.000106f, - -0.000004f, +0.000198f, +0.000176f, -0.000029f, -0.000062f, +0.000025f, -0.000057f, -0.000025f, +0.000053f, -0.000027f, - -0.000052f, -0.000005f, -0.000031f, +0.000036f, +0.000066f, -0.000001f, +0.000001f, +0.000010f, +0.000046f, +0.000030f, - +0.000012f, +0.000041f, +0.000006f, +0.000036f, +0.000013f, -0.000008f - }, - { - +0.000250f, -0.001412f, +0.000479f, +0.000473f, +0.000098f, +0.000067f, -0.000019f, -0.000110f, -0.000166f, -0.000013f, - +0.000295f, +0.000336f, +0.000431f, +0.000982f, +0.001300f, -0.000836f, -0.000473f, +0.000026f, +0.000003f, +0.003887f, - -0.000161f, +0.000185f, -0.002263f, +0.000125f, +0.001489f, +0.000511f, -0.000022f, +0.000303f, +0.000915f, +0.000664f, - -0.000260f, -0.000056f, +0.000131f, -0.000518f, -0.000176f, +0.000192f, -0.000266f, -0.000004f, -0.000023f, +0.000362f, - -0.000141f, -0.000037f, +0.000154f, -0.000211f, -0.000123f, +0.000138f, +0.000100f, +0.000087f, +0.000009f, +0.000056f, - -0.000118f, -0.000126f, +0.000208f, +0.000001f, -0.000161f, -0.000073f, +0.000038f, +0.000194f, +0.000077f, +0.000036f, - +0.000111f, -0.000103f, +0.000005f, -0.000024f, -0.000027f, -0.000013f, +0.000055f, +0.000016f, +0.000066f, +0.000086f, - -0.000072f, -0.000055f, +0.000008f, +0.000026f, -0.000036f, -0.000058f, -0.000128f, -0.000129f, +0.000003f, +0.000046f, - -0.000019f, -0.000045f, +0.000062f, +0.000049f, -0.000011f, -0.000036f, +0.000053f, -0.000006f, -0.000021f, +0.000008f, - +0.000039f, +0.000041f, -0.000079f, -0.000048f, +0.000012f, +0.000023f - }, - { - -0.005647f, -0.060554f, -0.001078f, +0.002771f, -0.000788f, -0.000208f, -0.000366f, -0.000103f, +0.000390f, +0.000066f, - -0.000087f, +0.000051f, +0.000099f, -0.000317f, +0.000689f, -0.000298f, -0.000727f, -0.000281f, +0.000377f, +0.000517f, - +0.000374f, -0.000166f, -0.000324f, +0.000230f, +0.000263f, -0.000046f, -0.000323f, +0.000018f, +0.000256f, +0.000045f, - +0.000214f, -0.000196f, -0.000049f, -0.000150f, -0.000357f, -0.000215f, +0.000183f, +0.000738f, -0.000275f, -0.000447f, - -0.000128f, -0.000150f, +0.000183f, +0.000397f, -0.000291f, +0.000149f, +0.000325f, +0.000135f, -0.000193f, +0.000172f, - +0.000048f, +0.000030f, +0.000049f, -0.000121f, -0.000135f, -0.000159f, -0.000021f, -0.000025f, -0.000157f, -0.000143f, - -0.000047f, +0.000028f, +0.000011f, +0.000039f, +0.000035f, -0.000125f, -0.000121f, +0.000023f, +0.000105f, -0.000035f, - +0.000031f, +0.000152f, -0.000133f, -0.000153f, +0.000019f, +0.000088f, -0.000074f, +0.000004f, +0.000022f, -0.000087f, - +0.000040f, +0.000019f, -0.000083f, -0.000034f, +0.000143f, -0.000022f, -0.000092f, +0.000026f, +0.000059f, +0.000042f, - -0.000047f, +0.000001f, +0.000028f, +0.000012f, +0.000030f, -0.000019f - }, - { - +0.000185f, -0.001320f, -0.000880f, +0.000543f, -0.000078f, +0.000196f, -0.000077f, -0.000238f, -0.000156f, +0.000008f, - +0.000310f, +0.000469f, +0.000422f, +0.000124f, -0.001240f, -0.001440f, +0.000191f, -0.000027f, -0.000399f, +0.001458f, - +0.001325f, +0.000219f, +0.000877f, +0.001902f, +0.000703f, +0.002038f, -0.000039f, -0.000167f, -0.000078f, -0.000060f, - -0.000026f, +0.000726f, +0.000462f, +0.000074f, +0.000213f, +0.000185f, -0.000355f, +0.000080f, -0.000505f, -0.000172f, - +0.000217f, -0.000097f, +0.000339f, +0.000064f, +0.000042f, -0.000056f, -0.000268f, +0.000206f, +0.000563f, -0.000218f, - -0.000160f, +0.000068f, +0.000085f, -0.000272f, -0.000260f, +0.000017f, -0.000149f, -0.000061f, +0.000204f, -0.000124f, - -0.000158f, -0.000198f, -0.000129f, -0.000083f, +0.000003f, +0.000138f, -0.000063f, -0.000028f, +0.000010f, +0.000083f, - -0.000015f, +0.000012f, +0.000016f, -0.000027f, -0.000090f, +0.000065f, -0.000086f, -0.000079f, -0.000008f, -0.000058f, - +0.000009f, +0.000065f, +0.000015f, +0.000049f, -0.000021f, -0.000008f, -0.000057f, +0.000006f, +0.000041f, -0.000071f, - -0.000019f, +0.000016f, +0.000000f, +0.000022f, -0.000012f, +0.000008f - }, - { - -0.008367f, +0.065609f, +0.001349f, +0.002586f, -0.000258f, -0.000297f, -0.000192f, +0.000622f, +0.000022f, -0.001082f, - +0.000583f, +0.001087f, +0.000989f, -0.000080f, +0.001527f, +0.000142f, -0.001374f, +0.000242f, +0.000370f, +0.000450f, - -0.000412f, +0.000045f, +0.000434f, -0.000667f, +0.000348f, -0.000228f, -0.000136f, +0.000395f, -0.000341f, -0.000208f, - -0.000566f, -0.000143f, +0.000331f, +0.000062f, -0.000320f, +0.000494f, -0.000384f, -0.000025f, -0.000999f, +0.000131f, - +0.000487f, -0.000008f, +0.000139f, -0.000301f, +0.000271f, +0.000157f, -0.000491f, +0.000146f, +0.000212f, +0.000185f, - -0.000147f, +0.000159f, -0.000071f, -0.000050f, -0.000045f, +0.000158f, +0.000058f, -0.000128f, -0.000035f, +0.000099f, - +0.000073f, +0.000034f, -0.000021f, +0.000085f, +0.000309f, +0.000113f, -0.000102f, -0.000069f, +0.000027f, -0.000024f, - +0.000016f, +0.000076f, -0.000039f, -0.000095f, -0.000097f, +0.000132f, +0.000033f, -0.000077f, -0.000017f, +0.000029f, - +0.000047f, -0.000001f, +0.000065f, +0.000074f, +0.000045f, +0.000054f, -0.000045f, -0.000078f, -0.000016f, -0.000031f, - +0.000040f, +0.000026f, +0.000047f, -0.000019f, -0.000022f, +0.000027f - }, - { - +0.000024f, +0.001894f, +0.001080f, +0.000748f, +0.000742f, -0.001454f, -0.000215f, +0.000445f, -0.000235f, -0.000114f, - +0.000027f, +0.000521f, -0.000254f, -0.000102f, +0.000522f, -0.001180f, +0.000994f, +0.000114f, -0.002434f, -0.001012f, - +0.000918f, +0.000202f, -0.001216f, -0.000748f, +0.000706f, -0.000021f, +0.000165f, -0.000844f, +0.000614f, -0.000578f, - -0.000025f, +0.000483f, -0.000396f, +0.000202f, +0.000010f, -0.000148f, -0.000263f, -0.000447f, -0.000042f, -0.000114f, - -0.000240f, -0.000155f, -0.000170f, +0.000210f, -0.000083f, -0.000316f, -0.000042f, -0.000006f, +0.000157f, -0.000192f, - -0.000262f, -0.000072f, -0.000119f, +0.000019f, +0.000449f, +0.000146f, -0.000083f, -0.000131f, -0.000095f, -0.000134f, - +0.000050f, +0.000065f, +0.000159f, +0.000090f, +0.000048f, +0.000126f, -0.000062f, -0.000135f, -0.000189f, -0.000010f, - +0.000025f, +0.000026f, +0.000091f, +0.000009f, -0.000062f, +0.000057f, +0.000099f, +0.000008f, +0.000026f, +0.000085f, - +0.000020f, +0.000007f, -0.000039f, -0.000028f, -0.000044f, -0.000021f, +0.000046f, -0.000002f, +0.000016f, -0.000043f, - -0.000020f, -0.000012f, -0.000019f, -0.000007f, -0.000045f, -0.000019f - }, - { - -0.001974f, +0.015606f, +0.001130f, -0.001510f, -0.000279f, -0.000662f, -0.000883f, +0.001020f, -0.000064f, -0.000378f, - +0.000086f, +0.000196f, -0.000438f, -0.000525f, +0.001264f, +0.000650f, -0.000695f, +0.000025f, +0.000187f, +0.000281f, - +0.000287f, -0.000250f, -0.000110f, +0.000042f, -0.000290f, +0.000272f, +0.000212f, +0.000014f, +0.000043f, -0.000292f, - -0.000241f, +0.000257f, +0.000278f, +0.000397f, -0.000350f, +0.000204f, +0.000092f, -0.000502f, +0.000299f, -0.000425f, - -0.000680f, +0.000112f, +0.000149f, +0.000178f, +0.000099f, -0.000096f, +0.000051f, -0.000336f, +0.000127f, +0.000130f, - -0.000172f, -0.000080f, -0.000046f, +0.000026f, +0.000216f, +0.000123f, +0.000142f, -0.000178f, -0.000052f, +0.000095f, - +0.000024f, -0.000025f, +0.000036f, +0.000105f, -0.000029f, -0.000018f, +0.000025f, +0.000025f, -0.000040f, +0.000014f, - +0.000006f, -0.000004f, -0.000055f, -0.000136f, -0.000039f, -0.000020f, -0.000059f, +0.000109f, -0.000004f, -0.000010f, - +0.000026f, -0.000062f, +0.000075f, -0.000041f, -0.000028f, -0.000063f, -0.000045f, -0.000022f, +0.000001f, +0.000041f, - -0.000019f, +0.000001f, +0.000039f, +0.000031f, -0.000029f, -0.000023f - }, - { - -0.000299f, +0.002241f, +0.000335f, +0.000212f, -0.000209f, +0.000033f, +0.000347f, -0.000092f, -0.000229f, -0.000159f, - -0.000358f, +0.000188f, -0.000533f, +0.000840f, +0.004864f, +0.001421f, -0.000491f, -0.001095f, -0.000692f, +0.000220f, - +0.000622f, +0.000759f, -0.001402f, -0.000518f, -0.001073f, +0.000952f, +0.000060f, -0.000288f, +0.000346f, -0.001128f, - -0.000126f, +0.000364f, +0.000535f, +0.000214f, -0.000020f, +0.000244f, +0.000039f, -0.000651f, -0.000116f, -0.000197f, - +0.000227f, +0.000272f, -0.000200f, -0.000205f, -0.000010f, +0.000095f, +0.000251f, -0.000121f, +0.000079f, -0.000259f, - -0.000080f, +0.000136f, -0.000142f, -0.000096f, -0.000047f, +0.000014f, +0.000178f, +0.000371f, +0.000175f, +0.000066f, - -0.000149f, -0.000156f, +0.000033f, +0.000183f, +0.000175f, -0.000147f, +0.000027f, +0.000013f, -0.000021f, -0.000014f, - -0.000047f, +0.000015f, -0.000036f, -0.000044f, -0.000039f, -0.000091f, -0.000113f, +0.000040f, +0.000017f, +0.000053f, - +0.000002f, -0.000050f, +0.000084f, +0.000055f, +0.000014f, +0.000058f, +0.000055f, +0.000022f, -0.000001f, -0.000008f, - -0.000011f, -0.000046f, -0.000039f, +0.000043f, +0.000018f, -0.000029f - }, - { - +0.003935f, +0.004871f, +0.001348f, -0.000581f, -0.000414f, -0.000280f, -0.001906f, +0.000135f, +0.000550f, -0.000116f, - -0.000815f, +0.000150f, +0.000010f, +0.003006f, -0.000288f, +0.000634f, +0.000184f, -0.000276f, +0.000349f, -0.000806f, - +0.000172f, +0.000311f, -0.000314f, -0.000468f, +0.000194f, -0.000286f, -0.000400f, -0.000841f, -0.000760f, -0.000309f, - -0.000232f, +0.000003f, +0.000036f, -0.000155f, -0.000367f, -0.000264f, -0.000053f, +0.000139f, -0.000168f, -0.000344f, - +0.000168f, +0.000285f, -0.000109f, +0.000228f, +0.000114f, +0.000244f, -0.000280f, +0.000401f, +0.000256f, -0.000083f, - -0.000185f, -0.000234f, -0.000173f, -0.000321f, -0.000104f, -0.000111f, +0.000071f, +0.000048f, +0.000216f, -0.000074f, - -0.000032f, +0.000090f, -0.000026f, -0.000016f, -0.000079f, +0.000064f, +0.000133f, +0.000128f, -0.000020f, -0.000121f, - +0.000120f, +0.000050f, -0.000121f, -0.000084f, +0.000026f, -0.000013f, +0.000087f, -0.000047f, -0.000046f, -0.000059f, - +0.000037f, +0.000097f, +0.000007f, -0.000037f, -0.000078f, +0.000038f, +0.000148f, +0.000031f, +0.000014f, +0.000067f, - +0.000016f, +0.000010f, -0.000071f, -0.000036f, -0.000026f, -0.000061f - }, - { - +0.000060f, +0.002822f, +0.000958f, -0.000047f, -0.000116f, -0.000120f, +0.000210f, -0.000215f, -0.000126f, +0.000247f, - -0.000261f, +0.000037f, +0.000841f, +0.004131f, -0.001651f, +0.003653f, +0.000398f, -0.000119f, +0.000428f, -0.000128f, - -0.000671f, -0.000055f, -0.000473f, +0.000201f, +0.000253f, -0.000317f, -0.000002f, -0.000012f, -0.000618f, -0.000047f, - +0.000132f, +0.000472f, +0.000045f, -0.000078f, +0.000453f, +0.000214f, -0.000157f, -0.000175f, -0.000179f, +0.000176f, - +0.000035f, -0.000479f, -0.000093f, +0.000226f, -0.000181f, +0.000212f, -0.000017f, -0.000089f, -0.000176f, +0.000072f, - -0.000214f, -0.000193f, +0.000172f, +0.000196f, +0.000007f, +0.000051f, +0.000072f, -0.000002f, -0.000045f, +0.000047f, - -0.000272f, -0.000183f, +0.000072f, -0.000028f, -0.000125f, +0.000103f, +0.000079f, -0.000117f, -0.000068f, -0.000038f, - -0.000028f, +0.000111f, -0.000025f, -0.000022f, +0.000023f, -0.000090f, +0.000100f, +0.000040f, +0.000018f, -0.000008f, - -0.000140f, -0.000029f, +0.000061f, +0.000012f, +0.000065f, +0.000079f, +0.000062f, -0.000065f, +0.000001f, +0.000042f, - -0.000092f, -0.000049f, +0.000034f, +0.000017f, -0.000053f, +0.000026f - }, - { - -0.001303f, -0.005272f, +0.000080f, -0.000253f, +0.000005f, -0.003269f, +0.000123f, +0.000345f, +0.000289f, +0.000216f, - -0.000130f, +0.000110f, -0.000236f, +0.000814f, +0.004882f, -0.000852f, -0.000046f, +0.000252f, +0.000683f, -0.000054f, - +0.000617f, -0.000073f, -0.000043f, -0.000735f, +0.000271f, +0.001164f, +0.000058f, -0.001328f, -0.000030f, +0.000137f, - +0.000069f, +0.000143f, -0.000225f, +0.000252f, +0.000230f, +0.000537f, -0.000031f, -0.000294f, -0.000267f, -0.000191f, - -0.000292f, -0.000110f, +0.000121f, +0.000226f, -0.000228f, +0.000048f, +0.000467f, -0.000067f, -0.000106f, -0.000148f, - -0.000102f, -0.000229f, -0.000243f, +0.000010f, -0.000031f, -0.000001f, +0.000288f, -0.000032f, -0.000006f, +0.000040f, - -0.000066f, +0.000160f, +0.000065f, +0.000141f, -0.000034f, -0.000009f, +0.000051f, -0.000042f, +0.000015f, -0.000016f, - +0.000026f, +0.000076f, -0.000028f, -0.000125f, -0.000092f, +0.000060f, +0.000059f, -0.000006f, -0.000001f, +0.000018f, - +0.000030f, -0.000060f, -0.000010f, +0.000045f, -0.000009f, -0.000058f, -0.000009f, -0.000089f, -0.000031f, +0.000065f, - -0.000015f, +0.000023f, +0.000025f, -0.000024f, -0.000020f, -0.000020f - } - }, - { - { - -0.000510f, -0.009470f, +0.000918f, -0.000441f, -0.000285f, +0.000012f, -0.000297f, +0.000367f, +0.000131f, +0.000365f, - +0.000169f, -0.000236f, +0.000597f, -0.000829f, +0.000797f, +0.000541f, -0.000784f, -0.000661f, -0.001711f, +0.000469f, - +0.001209f, +0.000261f, +0.001071f, -0.000031f, +0.000772f, -0.000635f, +0.000273f, +0.000105f, +0.000759f, +0.000502f, - -0.000745f, -0.000222f, +0.000785f, -0.000072f, -0.000257f, -0.000053f, +0.000150f, +0.000234f, -0.000705f, +0.000001f, - -0.000128f, +0.000124f, -0.000089f, -0.000070f, -0.000013f, -0.000098f, -0.000447f, -0.000210f, +0.000027f, -0.000234f, - +0.000116f, +0.000063f, -0.000020f, +0.000083f, +0.000327f, -0.000094f, -0.000074f, -0.000025f, -0.000218f, -0.000027f, - +0.000087f, +0.000099f, +0.000181f, -0.000021f, -0.000092f, +0.000159f, -0.000003f, -0.000066f, +0.000024f, +0.000150f, - -0.000026f, -0.000002f, -0.000025f, -0.000077f, +0.000001f, +0.000010f, -0.000029f, -0.000051f, +0.000047f, +0.000034f, - -0.000031f, -0.000007f, +0.000070f, +0.000113f, +0.000050f, -0.000005f, -0.000037f, +0.000018f, +0.000024f, -0.000056f, - -0.000063f, +0.000039f, -0.000006f, +0.000006f, -0.000034f, -0.000046f - }, - { - +0.005441f, -0.011229f, -0.006782f, -0.000063f, -0.000403f, -0.000184f, +0.000084f, -0.000647f, -0.001105f, +0.000486f, - -0.000120f, +0.000063f, +0.000064f, -0.000106f, +0.000664f, -0.000260f, -0.000638f, -0.000478f, +0.000751f, -0.000457f, - +0.000136f, -0.000392f, -0.000248f, -0.000204f, +0.000006f, +0.000358f, -0.000267f, -0.000072f, +0.000712f, +0.000096f, - -0.000043f, -0.000125f, -0.000194f, -0.000492f, -0.000106f, +0.000007f, +0.000253f, +0.000171f, -0.000214f, -0.000403f, - -0.000044f, +0.000262f, +0.000231f, -0.000054f, +0.000304f, +0.000135f, -0.000213f, +0.000010f, -0.000230f, +0.000126f, - +0.000040f, +0.000070f, +0.000160f, +0.000249f, +0.000053f, +0.000036f, -0.000134f, +0.000130f, -0.000067f, +0.000040f, - +0.000168f, +0.000111f, +0.000013f, +0.000032f, +0.000010f, -0.000230f, -0.000046f, +0.000113f, +0.000080f, +0.000131f, - -0.000045f, -0.000082f, -0.000054f, +0.000015f, -0.000016f, -0.000116f, +0.000042f, -0.000064f, -0.000082f, -0.000014f, - +0.000077f, +0.000013f, -0.000054f, +0.000030f, +0.000094f, -0.000054f, -0.000070f, +0.000065f, -0.000034f, +0.000017f, - -0.000011f, -0.000011f, +0.000028f, +0.000031f, -0.000006f, -0.000010f - }, - { - -0.000510f, +0.017772f, +0.006170f, +0.003004f, +0.001758f, -0.000172f, +0.000115f, +0.000517f, +0.000243f, -0.000461f, - -0.000587f, -0.000243f, -0.000497f, +0.000884f, -0.001425f, -0.000442f, -0.000449f, +0.000228f, +0.001093f, -0.000097f, - +0.000188f, +0.000289f, +0.000341f, +0.000198f, -0.000294f, +0.000035f, -0.000035f, -0.000164f, -0.000046f, +0.000031f, - +0.000256f, -0.000183f, +0.000498f, +0.000204f, -0.000487f, -0.000429f, -0.000188f, +0.000252f, +0.000337f, +0.000059f, - +0.000049f, +0.000085f, -0.000073f, +0.000267f, +0.000170f, -0.000123f, -0.000463f, -0.000173f, +0.000365f, +0.000178f, - -0.000197f, -0.000256f, -0.000031f, +0.000145f, -0.000031f, -0.000023f, +0.000192f, +0.000285f, -0.000010f, -0.000139f, - -0.000057f, +0.000180f, +0.000104f, -0.000072f, +0.000060f, +0.000112f, -0.000007f, +0.000074f, -0.000016f, +0.000100f, - +0.000070f, -0.000024f, +0.000023f, +0.000069f, +0.000072f, -0.000055f, +0.000030f, -0.000032f, -0.000033f, -0.000054f, - +0.000021f, -0.000006f, +0.000067f, +0.000047f, -0.000058f, -0.000005f, +0.000010f, -0.000033f, -0.000007f, -0.000041f, - -0.000016f, +0.000036f, +0.000006f, +0.000043f, -0.000014f, +0.000003f - }, - { - +0.000011f, -0.005947f, -0.000096f, +0.000191f, +0.000176f, -0.000185f, +0.000011f, -0.000026f, +0.000033f, +0.000142f, - +0.000047f, -0.000335f, -0.000190f, +0.000768f, -0.002939f, -0.001659f, +0.000895f, +0.000181f, -0.003150f, +0.000733f, - -0.000249f, -0.002108f, -0.000346f, +0.001113f, -0.000484f, +0.001418f, +0.000474f, +0.001659f, -0.000537f, -0.000595f, - -0.000344f, +0.000884f, +0.000368f, +0.000154f, -0.000034f, +0.000194f, +0.000658f, -0.000063f, +0.000238f, +0.000214f, - +0.000034f, -0.000087f, +0.000185f, +0.000032f, -0.000086f, +0.000068f, +0.000399f, -0.000178f, -0.000050f, +0.000176f, - -0.000001f, -0.000157f, +0.000307f, +0.000133f, +0.000145f, +0.000104f, -0.000187f, -0.000092f, +0.000132f, -0.000167f, - -0.000147f, +0.000050f, -0.000012f, -0.000026f, +0.000082f, +0.000021f, -0.000002f, -0.000030f, +0.000128f, +0.000029f, - -0.000102f, -0.000172f, +0.000004f, +0.000018f, +0.000002f, -0.000071f, +0.000025f, +0.000116f, +0.000079f, -0.000004f, - -0.000047f, +0.000015f, +0.000024f, +0.000001f, +0.000019f, -0.000068f, -0.000021f, +0.000029f, +0.000033f, +0.000024f, - -0.000019f, +0.000019f, +0.000064f, +0.000021f, -0.000009f, +0.000035f - }, - { - +0.012865f, -0.007933f, -0.002449f, -0.003101f, +0.000532f, +0.000358f, -0.000033f, +0.000037f, -0.000208f, -0.000103f, - +0.000160f, +0.000484f, -0.000128f, +0.000539f, -0.001057f, -0.000238f, +0.000517f, -0.000735f, -0.000519f, -0.000014f, - -0.000113f, +0.000261f, +0.000255f, -0.000184f, -0.000286f, +0.000210f, -0.000187f, +0.001552f, +0.000091f, -0.000207f, - +0.000101f, -0.000027f, -0.000249f, +0.000419f, -0.000229f, +0.000042f, -0.000007f, -0.000923f, +0.000030f, -0.000152f, - -0.000415f, -0.000149f, +0.000159f, +0.000129f, +0.000056f, +0.000028f, +0.000138f, +0.000203f, +0.000078f, +0.000161f, - -0.000306f, +0.000209f, +0.000227f, -0.000129f, -0.000115f, -0.000055f, -0.000096f, -0.000327f, -0.000161f, -0.000050f, - +0.000136f, -0.000200f, +0.000063f, +0.000026f, -0.000049f, +0.000010f, -0.000016f, -0.000155f, -0.000019f, +0.000049f, - -0.000010f, -0.000055f, -0.000127f, -0.000067f, +0.000103f, +0.000016f, +0.000057f, +0.000095f, -0.000053f, +0.000038f, - +0.000067f, -0.000008f, +0.000046f, +0.000028f, -0.000094f, -0.000009f, +0.000016f, +0.000010f, -0.000024f, -0.000021f, - +0.000007f, -0.000028f, -0.000020f, -0.000034f, -0.000033f, +0.000026f - }, - { - -0.000510f, +0.001064f, +0.002271f, -0.000544f, -0.000038f, -0.000121f, +0.000053f, +0.000120f, +0.000180f, +0.000180f, - -0.000112f, -0.000174f, +0.000071f, -0.000926f, -0.002416f, -0.000463f, +0.002966f, -0.001567f, -0.000311f, +0.005465f, - +0.000095f, -0.000949f, -0.001014f, -0.001028f, +0.000420f, -0.000303f, +0.000076f, +0.000098f, +0.001038f, +0.000957f, - +0.000258f, -0.000359f, +0.000070f, +0.000500f, +0.000193f, +0.000424f, -0.000110f, +0.000358f, +0.000191f, +0.000012f, - +0.000311f, +0.000050f, -0.000219f, +0.000085f, +0.000137f, +0.000134f, -0.000095f, -0.000235f, -0.000155f, +0.000135f, - -0.000028f, +0.000149f, -0.000121f, -0.000100f, +0.000143f, +0.000091f, +0.000075f, -0.000041f, +0.000038f, +0.000082f, - -0.000003f, -0.000095f, +0.000046f, -0.000009f, +0.000028f, +0.000095f, -0.000085f, -0.000049f, -0.000015f, -0.000046f, - -0.000027f, +0.000150f, +0.000071f, -0.000021f, +0.000016f, +0.000059f, +0.000077f, +0.000080f, +0.000048f, -0.000025f, - -0.000044f, +0.000077f, -0.000017f, -0.000064f, -0.000019f, +0.000024f, +0.000017f, -0.000016f, +0.000029f, +0.000022f, - -0.000036f, -0.000078f, +0.000021f, +0.000062f, +0.000019f, -0.000008f - }, - { - -0.002646f, -0.067888f, -0.000235f, +0.001657f, -0.000188f, +0.000131f, -0.000139f, +0.000398f, +0.000684f, -0.000806f, - +0.000261f, +0.000158f, -0.000037f, +0.000491f, -0.000066f, +0.000266f, -0.000354f, +0.000568f, -0.000190f, -0.000735f, - -0.000232f, -0.000356f, +0.000067f, -0.000206f, -0.000002f, -0.000548f, -0.000219f, +0.000454f, -0.000318f, -0.000223f, - +0.000132f, +0.000298f, +0.000161f, +0.000129f, -0.000191f, -0.000144f, +0.000140f, +0.000157f, -0.000023f, -0.000038f, - +0.000151f, -0.000148f, -0.000231f, -0.000036f, -0.000009f, +0.000059f, -0.000112f, -0.000238f, +0.000012f, -0.000084f, - -0.000201f, -0.000042f, -0.000175f, -0.000050f, -0.000153f, +0.000116f, +0.000156f, +0.000020f, +0.000203f, +0.000031f, - +0.000162f, -0.000034f, +0.000020f, -0.000043f, -0.000051f, +0.000058f, +0.000195f, +0.000029f, -0.000099f, +0.000059f, - -0.000012f, -0.000139f, +0.000032f, +0.000147f, -0.000027f, -0.000029f, +0.000021f, +0.000042f, -0.000065f, +0.000072f, - +0.000049f, -0.000063f, +0.000034f, +0.000071f, -0.000061f, -0.000050f, +0.000092f, +0.000025f, -0.000000f, -0.000027f, - +0.000011f, +0.000048f, -0.000037f, -0.000017f, -0.000023f, -0.000007f - }, - { - -0.000565f, +0.000889f, +0.001817f, -0.000020f, +0.000219f, -0.000240f, -0.000076f, -0.000175f, -0.000093f, +0.000233f, - -0.000066f, -0.000396f, +0.000140f, +0.000454f, -0.002129f, +0.000725f, -0.002474f, -0.001790f, +0.000356f, +0.001320f, - -0.001148f, -0.000281f, +0.000372f, +0.000980f, +0.000281f, +0.000770f, +0.000892f, -0.000238f, -0.000347f, -0.000536f, - -0.000195f, -0.000023f, +0.000259f, +0.000177f, -0.000111f, -0.000115f, -0.000090f, +0.000184f, -0.000279f, +0.000112f, - -0.000080f, +0.000123f, +0.000168f, -0.000125f, -0.000100f, +0.000081f, +0.000339f, +0.000212f, -0.000226f, -0.000019f, - +0.000213f, +0.000046f, -0.000068f, +0.000046f, +0.000158f, +0.000049f, +0.000065f, +0.000164f, -0.000119f, -0.000198f, - -0.000045f, +0.000022f, +0.000071f, -0.000108f, -0.000055f, -0.000153f, -0.000021f, +0.000129f, +0.000099f, -0.000025f, - +0.000043f, -0.000040f, -0.000051f, -0.000009f, +0.000070f, +0.000017f, -0.000012f, +0.000115f, +0.000051f, +0.000027f, - +0.000014f, -0.000124f, -0.000042f, -0.000024f, +0.000020f, +0.000026f, +0.000011f, +0.000059f, -0.000047f, +0.000030f, - +0.000034f, -0.000042f, +0.000024f, -0.000005f, -0.000005f, -0.000010f - }, - { - +0.015244f, +0.036921f, -0.005314f, +0.002303f, +0.000499f, +0.000271f, +0.000237f, -0.000147f, -0.000652f, +0.000764f, - +0.000130f, -0.000681f, -0.000865f, +0.000336f, +0.000796f, +0.000794f, +0.000163f, -0.000006f, +0.000173f, +0.000276f, - +0.000406f, -0.000196f, -0.000472f, +0.000578f, -0.000096f, -0.000178f, +0.000637f, -0.000079f, +0.000190f, -0.000296f, - -0.000060f, -0.000093f, +0.000233f, -0.000411f, +0.000136f, +0.000318f, -0.000917f, -0.000397f, +0.000233f, +0.000142f, - +0.000609f, +0.000167f, +0.000377f, +0.000074f, +0.000381f, +0.000001f, +0.000243f, +0.000159f, -0.000423f, +0.000019f, - +0.000290f, +0.000124f, -0.000135f, +0.000198f, -0.000032f, -0.000098f, -0.000084f, +0.000118f, +0.000061f, -0.000200f, - +0.000017f, +0.000092f, +0.000049f, +0.000027f, -0.000078f, -0.000180f, +0.000059f, +0.000037f, -0.000059f, +0.000035f, - +0.000041f, -0.000102f, +0.000012f, +0.000046f, +0.000075f, -0.000032f, -0.000064f, +0.000021f, +0.000019f, -0.000005f, - +0.000001f, -0.000015f, -0.000042f, -0.000023f, -0.000066f, -0.000053f, -0.000017f, +0.000038f, +0.000075f, +0.000048f, - -0.000010f, -0.000010f, -0.000027f, +0.000005f, +0.000053f, -0.000004f - }, - { - -0.000021f, +0.005476f, -0.001241f, +0.001035f, -0.000607f, +0.000787f, +0.001186f, -0.000556f, +0.000231f, +0.000333f, - +0.000187f, -0.000871f, -0.001081f, +0.000747f, +0.000605f, +0.000365f, -0.000904f, -0.000953f, +0.000602f, +0.000406f, - -0.000447f, -0.000970f, -0.000230f, +0.000741f, +0.000846f, +0.000530f, -0.000069f, +0.000131f, -0.000469f, -0.000247f, - +0.000031f, -0.000025f, +0.000236f, +0.000594f, -0.000014f, -0.000036f, +0.000346f, +0.000343f, +0.000384f, +0.000037f, - +0.000015f, +0.000066f, +0.000141f, -0.000218f, -0.000058f, +0.000323f, -0.000189f, -0.000038f, -0.000099f, -0.000149f, - +0.000374f, +0.000098f, -0.000026f, +0.000219f, -0.000162f, -0.000273f, -0.000042f, -0.000045f, +0.000068f, +0.000111f, - -0.000000f, -0.000023f, -0.000070f, -0.000142f, -0.000070f, -0.000165f, +0.000053f, +0.000159f, +0.000200f, +0.000126f, - -0.000043f, +0.000036f, -0.000044f, -0.000062f, +0.000057f, -0.000020f, -0.000039f, -0.000034f, -0.000019f, -0.000065f, - -0.000065f, -0.000015f, +0.000023f, +0.000031f, +0.000031f, +0.000068f, -0.000008f, -0.000022f, -0.000015f, -0.000002f, - +0.000037f, -0.000005f, +0.000024f, -0.000003f, +0.000056f, +0.000043f - }, - { - +0.002119f, +0.007949f, -0.001306f, -0.001389f, -0.000100f, +0.002490f, +0.002238f, -0.000689f, -0.001069f, -0.000382f, - +0.000129f, -0.000023f, +0.000168f, +0.000548f, +0.000896f, +0.000112f, +0.000375f, +0.000182f, +0.000608f, +0.000197f, - +0.000362f, -0.000249f, +0.000261f, +0.000137f, +0.000294f, +0.000186f, +0.000088f, -0.000076f, -0.000373f, +0.000422f, - +0.000739f, +0.000158f, +0.000102f, +0.000088f, +0.000278f, -0.000497f, -0.000272f, +0.000185f, -0.000201f, -0.000017f, - +0.000367f, +0.000324f, -0.000217f, -0.000077f, -0.000263f, -0.000120f, +0.000063f, +0.000233f, +0.000199f, -0.000108f, - -0.000003f, +0.000063f, +0.000244f, -0.000025f, -0.000205f, -0.000116f, -0.000081f, +0.000098f, +0.000233f, -0.000109f, - +0.000023f, +0.000009f, -0.000039f, -0.000078f, +0.000029f, +0.000023f, -0.000087f, -0.000033f, -0.000065f, +0.000014f, - -0.000035f, -0.000043f, +0.000007f, +0.000114f, +0.000081f, +0.000054f, +0.000085f, -0.000041f, -0.000060f, -0.000022f, - -0.000058f, +0.000055f, -0.000023f, -0.000025f, +0.000039f, +0.000014f, +0.000081f, +0.000023f, +0.000015f, -0.000035f, - +0.000003f, +0.000037f, -0.000015f, -0.000062f, +0.000008f, +0.000051f - }, - { - +0.000264f, +0.001628f, +0.000349f, +0.000013f, +0.000200f, +0.000253f, -0.000486f, -0.000273f, -0.000002f, -0.000272f, - -0.000012f, -0.000642f, +0.001108f, -0.000920f, +0.006823f, -0.001280f, -0.000157f, +0.000662f, +0.000896f, -0.000262f, - -0.002307f, +0.000690f, +0.000824f, +0.000789f, +0.000257f, -0.000812f, -0.000021f, -0.000605f, -0.000720f, +0.000059f, - +0.000062f, -0.000649f, -0.000171f, -0.000059f, +0.000249f, +0.000117f, +0.000023f, +0.000192f, +0.000289f, -0.000083f, - +0.000099f, -0.000259f, -0.000001f, +0.000370f, +0.000178f, +0.000088f, -0.000153f, -0.000025f, +0.000194f, +0.000027f, - +0.000202f, -0.000133f, -0.000057f, +0.000115f, +0.000010f, +0.000059f, -0.000117f, -0.000280f, -0.000255f, -0.000072f, - -0.000178f, +0.000092f, +0.000001f, -0.000078f, -0.000180f, +0.000078f, +0.000027f, -0.000085f, +0.000047f, -0.000030f, - +0.000090f, +0.000031f, +0.000019f, +0.000066f, +0.000025f, +0.000092f, +0.000093f, +0.000002f, -0.000016f, -0.000025f, - -0.000026f, +0.000016f, -0.000083f, -0.000055f, -0.000032f, -0.000025f, -0.000074f, -0.000052f, -0.000011f, +0.000002f, - +0.000006f, +0.000024f, +0.000025f, -0.000017f, -0.000004f, +0.000035f - }, - { - -0.003685f, +0.012899f, +0.001319f, +0.001701f, -0.000147f, +0.000212f, +0.001531f, -0.000584f, -0.000247f, -0.000526f, - +0.000832f, -0.000093f, +0.000258f, +0.001919f, +0.000327f, -0.000805f, -0.000364f, +0.000513f, +0.000210f, +0.000173f, - +0.001039f, -0.000151f, +0.000043f, -0.000852f, +0.000032f, +0.000066f, +0.000033f, -0.000162f, +0.000073f, -0.000304f, - -0.000125f, +0.000255f, -0.000202f, -0.000457f, -0.000413f, +0.000400f, +0.000185f, -0.000306f, +0.000001f, +0.000050f, - -0.000195f, -0.000470f, -0.000265f, -0.000227f, -0.000548f, -0.000484f, -0.000178f, -0.000146f, -0.000349f, +0.000203f, - -0.000268f, +0.000234f, +0.000003f, +0.000061f, +0.000327f, +0.000207f, +0.000046f, +0.000055f, -0.000256f, -0.000060f, - +0.000195f, -0.000012f, -0.000037f, +0.000043f, +0.000059f, -0.000069f, -0.000046f, -0.000059f, +0.000010f, +0.000137f, - -0.000036f, -0.000147f, -0.000013f, +0.000080f, +0.000009f, +0.000027f, -0.000048f, +0.000019f, +0.000032f, +0.000065f, - +0.000065f, -0.000093f, -0.000064f, +0.000022f, +0.000114f, +0.000031f, -0.000116f, -0.000074f, -0.000031f, -0.000041f, - -0.000007f, -0.000019f, +0.000040f, +0.000059f, +0.000025f, +0.000087f - }, - { - +0.000118f, +0.003612f, -0.001266f, -0.000085f, +0.000318f, +0.000170f, +0.000286f, +0.000063f, +0.000471f, -0.000186f, - -0.000091f, -0.000371f, -0.000448f, +0.004953f, +0.009447f, +0.001516f, +0.001044f, +0.000422f, -0.000271f, +0.000005f, - +0.000199f, +0.000189f, +0.000767f, +0.000973f, -0.000383f, -0.000165f, +0.000929f, -0.000183f, +0.000294f, -0.000433f, - -0.000351f, -0.000496f, -0.000329f, -0.000264f, -0.000034f, -0.000233f, -0.000477f, -0.000507f, -0.000030f, +0.000037f, - -0.000271f, +0.000286f, +0.000125f, -0.000012f, -0.000014f, -0.000118f, +0.000062f, +0.000199f, +0.000091f, -0.000017f, - -0.000090f, +0.000247f, +0.000105f, -0.000127f, -0.000074f, -0.000008f, -0.000123f, +0.000027f, -0.000001f, -0.000095f, - +0.000168f, +0.000160f, -0.000088f, -0.000135f, +0.000093f, +0.000031f, -0.000128f, +0.000137f, +0.000050f, +0.000034f, - -0.000077f, -0.000123f, -0.000003f, +0.000061f, -0.000019f, +0.000033f, -0.000028f, -0.000128f, +0.000048f, -0.000020f, - +0.000070f, +0.000105f, -0.000060f, -0.000020f, -0.000024f, -0.000093f, -0.000056f, +0.000040f, +0.000035f, -0.000045f, - +0.000042f, +0.000099f, +0.000006f, -0.000038f, +0.000057f, +0.000014f - }, - { - +0.000335f, -0.010967f, +0.001080f, +0.000018f, +0.000236f, -0.000154f, +0.000617f, -0.000179f, +0.000222f, -0.000007f, - +0.001104f, +0.001178f, -0.000238f, +0.000943f, +0.004132f, +0.001499f, +0.000241f, +0.000718f, +0.000716f, -0.000043f, - -0.000425f, -0.000363f, -0.000160f, +0.000288f, +0.000330f, +0.000072f, -0.000359f, -0.000926f, +0.000680f, -0.000013f, - -0.000044f, +0.000275f, +0.000077f, -0.000294f, +0.000087f, -0.000352f, -0.000153f, -0.000310f, +0.000272f, -0.000049f, - -0.000031f, +0.000072f, +0.000239f, -0.000292f, -0.000192f, -0.000078f, -0.000247f, +0.000097f, +0.000153f, +0.000126f, - -0.000193f, -0.000011f, +0.000244f, +0.000172f, +0.000026f, +0.000041f, -0.000063f, -0.000126f, +0.000006f, +0.000002f, - +0.000023f, -0.000039f, -0.000093f, -0.000030f, -0.000127f, -0.000095f, -0.000056f, +0.000007f, -0.000068f, +0.000007f, - +0.000003f, -0.000158f, -0.000095f, +0.000144f, +0.000120f, +0.000012f, -0.000091f, -0.000030f, +0.000042f, -0.000053f, - -0.000097f, +0.000049f, +0.000072f, +0.000003f, +0.000001f, +0.000025f, -0.000020f, +0.000052f, +0.000055f, -0.000054f, - -0.000007f, -0.000038f, -0.000025f, -0.000011f, +0.000001f, +0.000050f - } - }, - { - { - +0.000225f, -0.007398f, +0.001796f, -0.000312f, +0.000283f, +0.000047f, -0.000158f, +0.000426f, +0.000001f, +0.000305f, - -0.000546f, +0.000128f, +0.000548f, -0.001737f, +0.001359f, +0.001480f, -0.000543f, +0.000145f, -0.001382f, +0.000430f, - +0.000550f, +0.000255f, +0.000815f, -0.000758f, +0.000205f, -0.000949f, -0.000453f, -0.000510f, +0.001063f, +0.001017f, - -0.000170f, +0.000188f, +0.000512f, -0.000609f, -0.000214f, +0.000471f, +0.000118f, -0.000405f, -0.000859f, +0.000013f, - -0.000218f, -0.000069f, -0.000209f, +0.000041f, +0.000032f, -0.000007f, -0.000356f, -0.000182f, +0.000069f, -0.000110f, - +0.000320f, +0.000078f, -0.000060f, +0.000182f, +0.000189f, -0.000206f, -0.000023f, -0.000113f, -0.000105f, +0.000059f, - +0.000153f, +0.000205f, +0.000117f, -0.000063f, -0.000056f, +0.000162f, -0.000069f, -0.000017f, +0.000089f, +0.000044f, - -0.000062f, +0.000009f, -0.000030f, -0.000064f, +0.000036f, +0.000005f, -0.000039f, -0.000024f, +0.000048f, -0.000008f, - -0.000018f, +0.000033f, +0.000092f, +0.000089f, +0.000016f, -0.000049f, -0.000041f, +0.000009f, +0.000002f, -0.000065f, - +0.000009f, +0.000025f, +0.000015f, +0.000000f, -0.000054f, -0.000035f - }, - { - -0.005217f, -0.013473f, +0.006871f, -0.001004f, -0.001062f, +0.000352f, -0.000323f, -0.001210f, -0.000791f, +0.000436f, - -0.000276f, +0.000259f, -0.000101f, -0.000220f, +0.000781f, -0.001310f, -0.000734f, +0.000247f, +0.001532f, +0.000252f, - +0.000398f, -0.000001f, -0.000188f, -0.000213f, -0.000225f, -0.000096f, -0.000469f, -0.000012f, +0.000643f, +0.000049f, - -0.000221f, -0.000539f, -0.000569f, -0.000485f, +0.000136f, +0.000250f, -0.000333f, -0.000515f, -0.000596f, -0.000367f, - +0.000068f, +0.000322f, +0.000202f, -0.000139f, +0.000315f, -0.000081f, -0.000171f, -0.000117f, -0.000099f, +0.000181f, - -0.000040f, +0.000240f, +0.000212f, +0.000194f, +0.000060f, +0.000028f, -0.000037f, +0.000212f, -0.000030f, -0.000018f, - +0.000098f, -0.000003f, -0.000015f, -0.000030f, -0.000119f, -0.000155f, +0.000011f, +0.000157f, +0.000072f, +0.000033f, - -0.000054f, -0.000106f, -0.000020f, +0.000020f, -0.000117f, -0.000055f, +0.000053f, -0.000067f, -0.000050f, +0.000004f, - +0.000064f, +0.000003f, -0.000030f, +0.000032f, +0.000054f, -0.000119f, +0.000006f, +0.000038f, -0.000034f, +0.000006f, - -0.000017f, -0.000005f, +0.000026f, +0.000002f, +0.000008f, -0.000017f - }, - { - +0.001333f, -0.001695f, -0.008771f, +0.002746f, +0.001204f, -0.000358f, +0.000052f, +0.000505f, +0.000153f, -0.000734f, - -0.000456f, +0.000052f, -0.000965f, +0.000896f, -0.000494f, +0.000221f, +0.000072f, -0.000120f, +0.000164f, -0.000365f, - +0.000251f, +0.000453f, +0.000350f, +0.000157f, +0.000064f, +0.000905f, +0.000189f, -0.000483f, -0.000863f, -0.000219f, - +0.000489f, +0.000200f, +0.000144f, -0.000393f, -0.000510f, -0.000070f, +0.000062f, +0.000026f, -0.000198f, -0.000175f, - +0.000204f, +0.000067f, -0.000163f, +0.000176f, +0.000018f, -0.000209f, -0.000149f, +0.000058f, +0.000206f, -0.000127f, - -0.000291f, -0.000128f, -0.000031f, +0.000150f, -0.000095f, +0.000064f, +0.000250f, +0.000160f, -0.000009f, -0.000072f, - +0.000128f, +0.000298f, +0.000138f, -0.000066f, +0.000070f, +0.000092f, +0.000042f, +0.000071f, -0.000016f, +0.000062f, - +0.000018f, -0.000031f, +0.000042f, +0.000060f, +0.000029f, -0.000064f, +0.000005f, +0.000010f, -0.000029f, -0.000073f, - +0.000012f, +0.000014f, +0.000063f, -0.000004f, -0.000072f, +0.000018f, -0.000005f, -0.000029f, -0.000001f, -0.000042f, - +0.000044f, +0.000047f, +0.000016f, +0.000015f, -0.000027f, +0.000009f - }, - { - +0.000020f, -0.006424f, -0.000306f, +0.000536f, +0.000088f, -0.000241f, -0.000015f, +0.000075f, +0.000113f, +0.000012f, - -0.000195f, -0.000414f, -0.000159f, -0.000579f, -0.001040f, +0.001221f, -0.001387f, -0.001097f, -0.002736f, +0.000883f, - -0.000854f, -0.001959f, -0.000824f, +0.001436f, -0.000268f, -0.000804f, -0.000666f, +0.001469f, -0.001639f, -0.000083f, - +0.000458f, +0.001089f, +0.000429f, -0.000032f, -0.000282f, +0.000446f, +0.000354f, -0.000137f, +0.000417f, +0.000180f, - +0.000211f, +0.000068f, +0.000077f, -0.000082f, -0.000163f, +0.000016f, +0.000328f, -0.000173f, +0.000068f, +0.000140f, - -0.000090f, -0.000016f, +0.000171f, +0.000032f, +0.000253f, +0.000031f, -0.000203f, +0.000060f, +0.000105f, -0.000124f, - -0.000147f, +0.000085f, -0.000028f, +0.000034f, +0.000161f, +0.000044f, -0.000002f, -0.000012f, +0.000166f, +0.000045f, - -0.000151f, -0.000120f, +0.000070f, +0.000076f, -0.000043f, -0.000025f, +0.000105f, +0.000101f, +0.000003f, -0.000045f, - -0.000061f, +0.000062f, +0.000024f, +0.000015f, -0.000003f, -0.000077f, -0.000003f, +0.000037f, +0.000044f, -0.000008f, - -0.000036f, +0.000039f, +0.000069f, +0.000007f, +0.000007f, +0.000034f - }, - { - -0.009791f, -0.037136f, +0.000148f, -0.002456f, +0.000472f, +0.000335f, -0.000044f, -0.000007f, -0.000156f, +0.000038f, - +0.000654f, -0.000112f, -0.000325f, +0.001280f, -0.000398f, -0.000137f, +0.000003f, -0.001114f, -0.000145f, +0.000024f, - -0.000099f, +0.000235f, +0.000106f, -0.000526f, +0.000077f, -0.000062f, -0.000169f, +0.002313f, -0.000018f, -0.000473f, - +0.000136f, -0.000209f, -0.000129f, +0.000408f, -0.000246f, -0.000061f, -0.000340f, -0.000360f, +0.000392f, +0.000068f, - -0.000207f, +0.000025f, +0.000301f, +0.000040f, -0.000055f, +0.000220f, +0.000309f, +0.000148f, -0.000041f, +0.000213f, - -0.000010f, +0.000243f, +0.000121f, -0.000146f, -0.000073f, +0.000085f, -0.000103f, -0.000228f, -0.000072f, +0.000001f, - +0.000133f, -0.000146f, +0.000165f, +0.000006f, -0.000067f, -0.000046f, -0.000032f, -0.000094f, +0.000082f, +0.000041f, - -0.000076f, -0.000129f, -0.000136f, +0.000030f, +0.000095f, -0.000011f, +0.000064f, +0.000013f, -0.000039f, +0.000046f, - +0.000045f, -0.000017f, +0.000025f, -0.000029f, -0.000071f, +0.000017f, +0.000016f, -0.000001f, -0.000061f, -0.000021f, - +0.000009f, -0.000014f, -0.000012f, -0.000042f, +0.000003f, +0.000020f - }, - { - -0.000246f, +0.001178f, +0.000768f, -0.000525f, -0.000089f, -0.000101f, +0.000146f, +0.000110f, +0.000165f, +0.000045f, - -0.000264f, -0.000302f, -0.000107f, +0.000134f, -0.000603f, +0.000110f, +0.003292f, -0.001104f, +0.000809f, +0.005358f, - -0.000224f, -0.000445f, +0.001033f, -0.000286f, -0.000662f, -0.000098f, +0.000621f, +0.000364f, -0.000246f, -0.000582f, - +0.000386f, +0.000107f, +0.000146f, +0.000583f, +0.000134f, +0.000272f, -0.000109f, +0.000268f, +0.000124f, -0.000178f, - +0.000417f, -0.000080f, -0.000126f, +0.000274f, +0.000170f, +0.000017f, -0.000133f, -0.000175f, -0.000084f, +0.000170f, - +0.000149f, +0.000053f, -0.000326f, -0.000065f, +0.000157f, -0.000007f, -0.000029f, -0.000118f, -0.000022f, +0.000102f, - +0.000030f, -0.000006f, +0.000042f, +0.000022f, +0.000065f, +0.000079f, -0.000058f, -0.000038f, +0.000006f, -0.000027f, - +0.000051f, +0.000111f, +0.000037f, +0.000006f, +0.000073f, +0.000060f, +0.000087f, +0.000081f, +0.000006f, -0.000061f, - -0.000006f, +0.000039f, -0.000039f, -0.000054f, +0.000008f, +0.000023f, -0.000008f, -0.000021f, +0.000022f, -0.000004f, - -0.000057f, -0.000036f, +0.000060f, +0.000042f, +0.000008f, -0.000029f - }, - { - +0.010774f, -0.054038f, -0.003484f, +0.000674f, +0.000023f, +0.000335f, +0.000289f, +0.000136f, +0.000352f, -0.000358f, - +0.000387f, -0.000084f, +0.000054f, +0.000101f, -0.000723f, +0.000132f, -0.000077f, +0.000611f, -0.000292f, -0.000525f, - -0.000449f, -0.000237f, +0.000217f, -0.000016f, -0.000284f, -0.000564f, +0.000408f, +0.000644f, -0.000368f, -0.000264f, - +0.000222f, +0.000158f, +0.000003f, +0.000315f, +0.000063f, +0.000093f, -0.000123f, +0.000098f, +0.000177f, +0.000243f, - +0.000352f, +0.000020f, -0.000060f, -0.000039f, +0.000092f, +0.000039f, -0.000304f, -0.000142f, -0.000042f, -0.000350f, - -0.000149f, +0.000083f, -0.000063f, -0.000010f, +0.000056f, +0.000199f, +0.000118f, +0.000048f, +0.000258f, +0.000056f, - +0.000182f, -0.000001f, +0.000048f, -0.000035f, +0.000014f, +0.000136f, +0.000171f, -0.000015f, -0.000070f, +0.000088f, - -0.000049f, -0.000122f, +0.000124f, +0.000130f, -0.000058f, -0.000049f, +0.000013f, +0.000001f, -0.000048f, +0.000066f, - -0.000019f, -0.000028f, +0.000082f, +0.000059f, -0.000118f, +0.000015f, +0.000076f, -0.000016f, -0.000037f, -0.000028f, - +0.000035f, -0.000001f, -0.000022f, -0.000022f, -0.000025f, +0.000011f - }, - { - -0.000269f, +0.001446f, +0.000262f, -0.000234f, +0.000047f, -0.000226f, +0.000061f, -0.000052f, -0.000059f, +0.000138f, - -0.000244f, -0.000459f, -0.000507f, +0.000609f, -0.001491f, +0.002325f, +0.000569f, +0.000031f, -0.000031f, +0.000083f, - -0.001049f, +0.001240f, -0.001061f, -0.001151f, -0.000219f, -0.000785f, +0.000851f, -0.000307f, -0.000137f, -0.000409f, - -0.000262f, -0.000178f, +0.000185f, +0.000049f, -0.000092f, -0.000103f, +0.000089f, +0.000255f, -0.000003f, +0.000080f, - -0.000103f, +0.000079f, -0.000012f, -0.000032f, -0.000014f, +0.000140f, +0.000374f, -0.000079f, -0.000265f, +0.000133f, - +0.000191f, +0.000155f, -0.000128f, +0.000091f, +0.000142f, +0.000094f, +0.000124f, +0.000225f, -0.000126f, -0.000011f, - +0.000071f, +0.000147f, +0.000080f, -0.000015f, +0.000011f, -0.000181f, +0.000038f, +0.000139f, +0.000059f, -0.000084f, - +0.000072f, -0.000015f, -0.000054f, -0.000003f, +0.000066f, -0.000011f, +0.000048f, +0.000100f, -0.000005f, +0.000019f, - -0.000001f, -0.000096f, -0.000034f, -0.000004f, +0.000045f, +0.000012f, +0.000048f, +0.000016f, -0.000044f, +0.000065f, - +0.000002f, -0.000015f, +0.000011f, -0.000027f, +0.000012f, -0.000008f - }, - { - -0.017487f, +0.000881f, +0.003524f, +0.002022f, -0.000091f, +0.000268f, +0.000307f, -0.000451f, -0.000268f, +0.000960f, - -0.000621f, -0.001129f, -0.000530f, +0.000672f, +0.000317f, +0.001027f, +0.000622f, +0.000329f, +0.000380f, +0.000219f, - +0.000612f, -0.000581f, -0.000375f, +0.001063f, -0.000119f, +0.000039f, +0.000482f, -0.000581f, +0.000284f, +0.000052f, - +0.000085f, -0.000182f, +0.000293f, -0.000154f, +0.000075f, -0.000011f, -0.000490f, +0.000068f, +0.000515f, -0.000038f, - +0.000663f, +0.000134f, +0.000435f, +0.000205f, +0.000315f, +0.000139f, +0.000177f, -0.000250f, -0.000590f, -0.000138f, - +0.000230f, +0.000055f, -0.000112f, +0.000182f, +0.000014f, -0.000141f, -0.000120f, +0.000076f, -0.000015f, -0.000223f, - -0.000017f, +0.000062f, +0.000063f, -0.000079f, -0.000186f, -0.000083f, +0.000095f, -0.000012f, -0.000010f, +0.000026f, - +0.000001f, -0.000096f, +0.000035f, +0.000054f, +0.000124f, -0.000112f, +0.000009f, +0.000087f, +0.000012f, -0.000066f, - +0.000007f, -0.000033f, -0.000059f, -0.000071f, -0.000071f, -0.000056f, +0.000022f, +0.000059f, +0.000048f, +0.000019f, - -0.000035f, -0.000005f, -0.000044f, +0.000024f, +0.000034f, -0.000007f - }, - { - +0.000284f, +0.008835f, +0.000940f, -0.000138f, -0.000658f, +0.001291f, +0.000402f, -0.000747f, +0.000307f, +0.000386f, - +0.000163f, -0.000803f, +0.000061f, +0.001409f, +0.001126f, +0.001320f, -0.000573f, -0.000490f, +0.001454f, +0.000452f, - -0.000181f, +0.000004f, -0.000092f, +0.000286f, +0.000175f, +0.000476f, +0.000156f, +0.000109f, -0.000485f, +0.000500f, - +0.000007f, -0.000021f, +0.000055f, +0.000395f, -0.000074f, +0.000155f, +0.000509f, +0.000298f, +0.000138f, +0.000160f, - +0.000239f, +0.000241f, +0.000133f, -0.000262f, +0.000163f, +0.000331f, +0.000028f, -0.000059f, -0.000096f, +0.000035f, - +0.000427f, +0.000039f, -0.000023f, +0.000003f, -0.000385f, -0.000182f, +0.000052f, +0.000005f, +0.000123f, +0.000063f, - -0.000076f, -0.000008f, -0.000126f, -0.000145f, -0.000113f, -0.000115f, +0.000116f, +0.000153f, +0.000197f, +0.000055f, - -0.000019f, -0.000025f, -0.000081f, -0.000026f, +0.000072f, -0.000031f, -0.000071f, -0.000016f, -0.000023f, -0.000076f, - -0.000031f, +0.000004f, +0.000035f, +0.000036f, +0.000054f, +0.000026f, -0.000043f, -0.000001f, -0.000013f, +0.000035f, - +0.000018f, +0.000024f, +0.000028f, +0.000000f, +0.000061f, +0.000026f - }, - { - -0.001692f, +0.002117f, -0.001466f, -0.000853f, -0.000013f, +0.001316f, +0.000452f, -0.000672f, -0.000533f, +0.000386f, - +0.000053f, -0.000100f, +0.000258f, +0.000505f, +0.000456f, -0.000383f, +0.000698f, +0.000594f, +0.000583f, +0.000232f, - -0.000003f, +0.000160f, +0.000217f, +0.000275f, +0.000326f, +0.000027f, -0.000296f, -0.000206f, -0.000175f, +0.000461f, - +0.000577f, -0.000302f, -0.000154f, -0.000073f, +0.000312f, -0.000805f, -0.000225f, +0.000151f, -0.000291f, +0.000435f, - +0.000380f, +0.000081f, -0.000230f, -0.000133f, -0.000240f, -0.000105f, +0.000016f, +0.000275f, +0.000072f, -0.000208f, - +0.000045f, +0.000041f, +0.000178f, -0.000082f, -0.000174f, -0.000073f, -0.000025f, +0.000226f, +0.000129f, -0.000126f, - +0.000001f, -0.000020f, -0.000045f, -0.000092f, +0.000017f, -0.000006f, -0.000043f, -0.000017f, -0.000005f, +0.000004f, - -0.000023f, -0.000012f, +0.000038f, +0.000139f, +0.000049f, +0.000070f, +0.000053f, -0.000106f, -0.000019f, -0.000011f, - -0.000033f, +0.000056f, -0.000057f, +0.000029f, +0.000016f, +0.000066f, +0.000053f, +0.000032f, +0.000006f, -0.000035f, - +0.000019f, +0.000012f, -0.000037f, -0.000040f, +0.000029f, +0.000026f - }, - { - -0.000067f, +0.001211f, +0.000443f, -0.000276f, +0.000245f, +0.000024f, -0.000583f, -0.000109f, +0.000302f, +0.000119f, - +0.000286f, -0.000467f, +0.000878f, -0.004021f, +0.003002f, -0.001515f, +0.000367f, +0.001458f, +0.000979f, +0.000035f, - -0.001431f, +0.000517f, +0.000738f, +0.000717f, +0.000140f, -0.000772f, -0.000603f, -0.000626f, -0.000645f, +0.000845f, - -0.000201f, -0.000462f, -0.000489f, -0.000134f, +0.000013f, -0.000259f, -0.000038f, +0.000606f, +0.000250f, -0.000014f, - -0.000125f, -0.000289f, +0.000137f, +0.000330f, -0.000000f, -0.000040f, -0.000237f, +0.000041f, +0.000185f, +0.000101f, - +0.000162f, -0.000176f, +0.000019f, +0.000126f, +0.000033f, +0.000096f, -0.000105f, -0.000361f, -0.000167f, -0.000069f, - -0.000008f, +0.000063f, -0.000038f, -0.000158f, -0.000142f, +0.000183f, -0.000014f, +0.000004f, +0.000054f, -0.000030f, - +0.000091f, +0.000004f, +0.000046f, +0.000074f, +0.000003f, +0.000104f, +0.000099f, -0.000023f, -0.000015f, -0.000042f, - -0.000007f, +0.000016f, -0.000105f, -0.000066f, -0.000021f, -0.000046f, -0.000075f, -0.000037f, +0.000003f, +0.000011f, - +0.000013f, +0.000031f, +0.000029f, -0.000040f, -0.000012f, +0.000041f - }, - { - +0.002025f, +0.020677f, +0.002066f, +0.001219f, +0.000135f, +0.000367f, +0.001326f, -0.000790f, -0.000390f, -0.000077f, - +0.000849f, -0.000383f, -0.000212f, +0.000066f, +0.000035f, -0.000826f, -0.000462f, +0.000275f, -0.000116f, +0.000570f, - +0.000328f, -0.000534f, -0.000024f, -0.000339f, +0.000158f, +0.000100f, +0.000096f, +0.000142f, +0.000406f, -0.000045f, - -0.000082f, +0.000096f, -0.000104f, -0.000249f, -0.000303f, +0.000328f, +0.000134f, -0.000053f, +0.000215f, +0.000182f, - -0.000095f, -0.000577f, -0.000044f, -0.000275f, -0.000455f, -0.000380f, +0.000120f, -0.000188f, -0.000231f, +0.000175f, - -0.000113f, +0.000342f, +0.000068f, +0.000232f, +0.000144f, +0.000172f, -0.000051f, -0.000007f, -0.000265f, +0.000118f, - +0.000181f, -0.000099f, -0.000084f, +0.000059f, +0.000050f, -0.000082f, -0.000089f, -0.000086f, +0.000058f, +0.000102f, - -0.000114f, -0.000092f, +0.000094f, +0.000082f, -0.000028f, +0.000001f, -0.000086f, +0.000040f, +0.000030f, +0.000055f, - -0.000024f, -0.000110f, -0.000023f, +0.000042f, +0.000075f, -0.000041f, -0.000145f, -0.000046f, -0.000013f, -0.000042f, - -0.000004f, -0.000011f, +0.000083f, +0.000041f, +0.000032f, +0.000069f - }, - { - +0.000059f, +0.003258f, -0.000925f, +0.000260f, +0.000159f, +0.000043f, +0.000205f, +0.000282f, +0.000252f, -0.000389f, - +0.000077f, -0.000527f, -0.000117f, +0.000711f, +0.001027f, -0.001401f, +0.000528f, +0.000059f, +0.000309f, +0.000752f, - +0.000281f, -0.000164f, +0.000799f, +0.000915f, +0.000136f, +0.000625f, +0.000217f, +0.000024f, +0.000842f, -0.000148f, - +0.000126f, -0.000113f, +0.000229f, +0.000017f, -0.000701f, -0.000156f, -0.000316f, -0.000568f, +0.000080f, -0.000064f, - -0.000183f, +0.000276f, +0.000039f, -0.000235f, -0.000099f, -0.000187f, +0.000130f, +0.000141f, +0.000196f, -0.000083f, - +0.000033f, +0.000153f, -0.000104f, -0.000172f, -0.000112f, -0.000153f, -0.000153f, +0.000005f, -0.000011f, -0.000130f, - +0.000305f, +0.000083f, -0.000095f, -0.000077f, +0.000152f, -0.000061f, -0.000122f, +0.000168f, +0.000042f, +0.000035f, - -0.000079f, -0.000101f, +0.000034f, +0.000053f, +0.000007f, +0.000076f, -0.000093f, -0.000049f, -0.000010f, +0.000007f, - +0.000122f, +0.000045f, -0.000058f, -0.000030f, -0.000058f, -0.000085f, -0.000056f, +0.000066f, -0.000007f, -0.000019f, - +0.000083f, +0.000070f, -0.000032f, -0.000017f, +0.000067f, -0.000029f - }, - { - +0.001820f, -0.010752f, -0.000802f, -0.000895f, +0.000935f, +0.001515f, +0.000648f, -0.000396f, -0.000274f, -0.000253f, - +0.000884f, +0.000389f, -0.000372f, -0.000818f, +0.001176f, +0.001005f, -0.000529f, -0.000182f, +0.000036f, -0.000371f, - -0.000741f, +0.000061f, +0.000042f, +0.000477f, -0.000011f, -0.000086f, +0.000005f, -0.000242f, +0.000665f, -0.000178f, - +0.000067f, +0.000417f, +0.000156f, -0.000366f, -0.000203f, -0.000397f, +0.000290f, +0.000187f, +0.000369f, +0.000173f, - +0.000133f, +0.000083f, +0.000115f, -0.000248f, +0.000158f, -0.000101f, -0.000307f, +0.000243f, +0.000261f, +0.000240f, - +0.000039f, +0.000022f, +0.000145f, +0.000038f, +0.000074f, -0.000031f, -0.000071f, +0.000004f, -0.000046f, -0.000007f, - +0.000001f, -0.000195f, -0.000148f, -0.000068f, -0.000076f, -0.000037f, -0.000059f, -0.000059f, -0.000026f, +0.000037f, - -0.000023f, -0.000138f, -0.000014f, +0.000185f, +0.000071f, -0.000042f, -0.000080f, +0.000005f, +0.000042f, -0.000056f, - -0.000030f, +0.000065f, +0.000027f, -0.000021f, +0.000010f, +0.000056f, -0.000010f, +0.000095f, -0.000006f, -0.000058f, - +0.000011f, -0.000046f, -0.000007f, +0.000021f, +0.000004f, +0.000029f - } - } -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] /* Q31 */= { 921702144, 440470368, 434517536, 447499072, 463134912, 507976512, 495205440, 490485280, 488481664, 470204416, 485509536, 473953952, 475669760, 479900320, 480402816, 487614080, 489409376, 479041312, 472446400, 469403424, 473341888, 468688320, 457950880, 451686688, 445424608, 426812384, 421443680, 418581056, 408736992, 396210720, 387262176, 378315744, 379030848, 381356576, 394241504, 420728544, 436476064, 447572096, 460993888, 472446400, 478710624, 494816736, 502356544, 501753120, 507521248, 509872736, 518894336, 517796960, 512920032, 520515680, 528908032, 528169312, 528495712, 526983904, 523880768, 524250144, 513828416, 518561472, 504280704, 543399232 }; -#else -const float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX] = -{ - 0.429201f, 0.205110f, 0.202338f, 0.208383f, 0.215664f, 0.236545f, 0.230598f, 0.228400f, 0.227467f, 0.218956f, 0.226083f, 0.220702f, 0.221501f, 0.223471f, 0.223705f, 0.227063f, 0.227899f, 0.223071f, 0.220000f, 0.218583f, 0.220417f, 0.218250f, 0.213250f, 0.210333f, 0.207417f, 0.198750f, 0.196250f, 0.194917f, 0.190333f, 0.184500f, 0.180333f, 0.176167f, 0.176500f, 0.177583f, 0.183583f, 0.195917f, 0.203250f, 0.208417f, 0.214667f, 0.220000f, 0.222917f, 0.230417f, 0.233928f, 0.233647f, 0.236333f, 0.237428f, 0.241629f, 0.241118f, 0.238847f, 0.242384f, 0.246292f, 0.245948f, 0.246100f, 0.245396f, 0.243951f, 0.244123f, 0.239270f, 0.241474f, 0.234824f, 0.253040f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] /* Q31 */= { 1254130, 450971, 500363, 455266, 551903, 3259880, 2478196, 2355789, 2716566, 2787433, 4982162, 5222680, 5768141, 5802501, 5652177, 5506148, 5866925, 5856188, 5602785, 5420248, 7337951, 3828963, 2119566, 1501091, 1301375, 1151051, 1097364, 1221918, 1288490, 1166083, 2699387, 2596307, 2055141, 1290637, 588410, 227633, 154618, 109521, 85899, 64424, 51539, 38654, 30064, 27917, 25769, 23622, 19327, 19327, 17179, 17179, 15032, 12884, 10737, 6442, 4294, 4294, 2147, 2147, 0, 0 }; -#else -const float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX] = -{ - 0.000584f, 0.000210f, 0.000233f, 0.000212f, 0.000257f, 0.001518f, 0.001154f, 0.001097f, 0.001265f, 0.001298f, 0.002320f, 0.002432f, 0.002686f, 0.002702f, 0.002632f, 0.002564f, 0.002732f, 0.002727f, 0.002609f, 0.002524f, 0.003417f, 0.001783f, 0.000987f, 0.000699f, 0.000606f, 0.000536f, 0.000511f, 0.000569f, 0.000600f, 0.000543f, 0.001257f, 0.001209f, 0.000957f, 0.000601f, 0.000274f, 0.000106f, 0.000072f, 0.000051f, 0.000040f, 0.000030f, 0.000024f, 0.000018f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000006f, 0.000005f, 0.000003f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000000f, 0.000000f, -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] /* Q31 */= { 741942720,686022272,715028288,775076224,803800960,796237568,770141312,747545472,736820992, @@ -94664,20 +47177,8 @@ const Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX] /* Q31 */= 336405472,333613728,329810528,325506976,322043104,318265664,314490400,310715104,306939840, 303164576,299389280,295611872,291836576,288061312,284286048 }; -#else -const float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX] = -{ - 0.345494f, 0.319454f, 0.332961f, 0.360923f, 0.374299f, 0.370777f, 0.358625f, 0.348103f, 0.343109f, 0.331351f, - 0.316502f, 0.304975f, 0.294855f, 0.287549f, 0.279920f, 0.270277f, 0.264042f, 0.256404f, 0.249899f, 0.242040f, - 0.235074f, 0.229647f, 0.223730f, 0.218795f, 0.212599f, 0.207689f, 0.202082f, 0.198094f, 0.193907f, 0.185908f, - 0.182677f, 0.181960f, 0.179788f, 0.179081f, 0.176542f, 0.172328f, 0.171103f, 0.167951f, 0.167974f, 0.169209f, - 0.167340f, 0.165926f, 0.163565f, 0.161558f, 0.158405f, 0.156651f, 0.155351f, 0.153580f, 0.151576f, 0.149963f, - 0.148204f, 0.146446f, 0.144688f, 0.142930f, 0.141172f, 0.139414f, 0.137655f, 0.135897f, 0.134139f, 0.132381f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] /* Q31 */= { 412276064,308677152,243799520,201511280,193589216,171714944,143009520,156122064,164263168, @@ -94688,20 +47189,8 @@ const Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX] /* 167503,137438,128849,135291,133143,130996,111669,85899,64424, 30064,15032,6442,2147,0,0 }; -#else -const float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX] = -{ - 0.191981f, 0.143739f, 0.113528f, 0.093836f, 0.090147f, 0.079961f, 0.066594f, 0.072700f, 0.076491f, 0.082065f, - 0.085265f, 0.093864f, 0.101901f, 0.113728f, 0.117646f, 0.113494f, 0.126125f, 0.126304f, 0.123928f, 0.116067f, - 0.098528f, 0.051482f, 0.029950f, 0.025223f, 0.021143f, 0.019358f, 0.016707f, 0.016227f, 0.018416f, 0.018419f, - 0.017097f, 0.015219f, 0.014214f, 0.009693f, 0.003996f, 0.001613f, 0.000965f, 0.000643f, 0.000498f, 0.000417f, - 0.000304f, 0.000181f, 0.000116f, 0.000113f, 0.000102f, 0.000078f, 0.000064f, 0.000060f, 0.000063f, 0.000062f, - 0.000061f, 0.000052f, 0.000040f, 0.000030f, 0.000014f, 0.000007f, 0.000003f, 0.000001f, 0.000000f, 0.000000f -}; -#endif -#ifdef IVAS_FLOAT_FIXED const Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]/*Q-28*/ = { 159864320,183638576,279548416,236250576,195044928,142030544,122610040,102857488,89049168, @@ -94712,17 +47201,6 @@ const Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]/*Q-28*/ 2085475,2156073,2945273,3965865,4507031,4388919,11464610,20759992,17780628, 11286637,5373272,2119566,791079,250181,40802 }; -#else -const float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX] = -{ - 0.595541f, 0.684107f, 1.041399f, 0.880102f, 0.726599f, 0.529105f, 0.456758f, 0.383174f, 0.331734f, 0.330565f, - 0.436469f, 0.592478f, 0.767344f, 1.110786f, 1.548546f, 1.946089f, 2.550005f, 3.382855f, 4.235532f, 4.688064f, - 3.328668f, 1.312207f, 0.376543f, 0.176443f, 0.149840f, 0.130307f, 0.137089f, 0.292711f, 0.580265f, 0.733105f, - 0.734631f, 0.765035f, 0.759859f, 0.551234f, 0.257650f, 0.090947f, 0.052208f, 0.054891f, 0.050681f, 0.035657f, - 0.022300f, 0.015935f, 0.012629f, 0.010668f, 0.009082f, 0.007769f, 0.008032f, 0.010972f, 0.014774f, 0.016790f, - 0.016350f, 0.042709f, 0.077337f, 0.066238f, 0.042046f, 0.020017f, 0.007896f, 0.002947f, 0.000932f, 0.000152f -}; -#endif // IVAS_FLOAT_FIXED #undef WMC_TOOL_SKIP diff --git a/lib_rend/ivas_rom_binauralRenderer.h b/lib_rend/ivas_rom_binauralRenderer.h index fa9c6267f..8e7bd4a55 100644 --- a/lib_rend/ivas_rom_binauralRenderer.h +++ b/lib_rend/ivas_rom_binauralRenderer.h @@ -40,21 +40,6 @@ *------------------------------------------------------------------------*/ /* Binaural rendering data set based on HRIRs */ -#ifndef IVAS_FLOAT_FIXED -extern const float FASTCONV_HRIR_latency_s; -extern float leftHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float leftHRIRImag_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRReal_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRImag_HOA3[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float leftHRIRReal_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float leftHRIRImag_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRReal_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRImag_HOA2[BINAURAL_CONVBANDS][HOA2_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float leftHRIRReal_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float leftHRIRImag_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRReal_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; -extern float rightHRIRImag_FOA[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; -#else extern const Word32 FASTCONV_HRIR_latency_s_fx; extern Word32 leftHRIRReal_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; /* Q29 */ extern Word32 leftHRIRImag_HOA3_fx[BINAURAL_CONVBANDS][HOA3_CHANNELS][BINAURAL_NTAPS_SBA]; /* Q29 */ @@ -68,66 +53,31 @@ extern Word32 leftHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTA extern Word32 leftHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; /* Q29 */ extern Word32 rightHRIRReal_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; /* Q29 */ extern Word32 rightHRIRImag_FOA_fx[BINAURAL_CONVBANDS][FOA_CHANNELS][BINAURAL_NTAPS_SBA]; /* Q29 */ -#endif -#ifndef IVAS_FLOAT_FIXED -extern float leftHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; -extern float leftHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; -extern float rightHRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; -extern float rightHRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; -#else extern Word32 leftHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; /* Q29 */ extern Word32 leftHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; /* Q29 */ extern Word32 rightHRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; /* Q29 */ extern Word32 rightHRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS]; /* Q29 */ -#endif -#ifndef IVAS_FLOAT_FIXED -extern float FASTCONV_HOA3_latency_s; -extern float FASTCONV_HOA2_latency_s; -extern float FASTCONV_FOA_latency_s; -extern float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; -extern float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; -#else extern Word32 FASTCONV_HOA3_latency_s_fx; extern Word32 FASTCONV_HOA2_latency_s_fx; extern Word32 FASTCONV_FOA_latency_s_fx; extern Word16 hrtfShCoeffsRe_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /* Q15 */ extern Word16 hrtfShCoeffsIm_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /* Q14 */ -#endif // IVAS_FLOAT_FIXED /* Binaural rendering data set based on BRIRs */ -#ifdef IVAS_FLOAT_FIXED extern const Word32 FASTCONV_BRIR_latency_s_fx; extern Word32 leftBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; /* Q29 */ extern Word32 leftBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; /* Q29 */ extern Word32 rightBRIRReal_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; /* Q29 */ extern Word32 rightBRIRImag_fx[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; /* Q29 */ -#else -extern float leftBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; -extern float leftBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; -extern float rightBRIRReal[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; -extern float rightBRIRImag[BINAURAL_CONVBANDS][HRTF_LS_CHANNELS][BINAURAL_NTAPS_MAX]; -extern const float FASTCONV_BRIR_latency_s; -#endif /* Reverberation parameters based on BRIRs for fastconv */ -#ifdef IVAS_FLOAT_FIXED extern Word32 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ extern Word32 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ -#else -extern float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; -extern float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; -#endif /* Binaural rendering data set based on BRIRs, to be used in a combined manner * with the above binaural rendering data set based on HRIRs for parametric * renderer */ -#ifdef IVAS_FLOAT_FIXED extern const Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ extern const Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ extern const Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; /* Q28 */ -#else -extern const float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; -extern const float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; -extern const float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; -#endif diff --git a/lib_rend/ivas_rom_binaural_crend_head.c b/lib_rend/ivas_rom_binaural_crend_head.c index d688ccded..60925a31f 100644 --- a/lib_rend/ivas_rom_binaural_crend_head.c +++ b/lib_rend/ivas_rom_binaural_crend_head.c @@ -53,11 +53,7 @@ /********************** CRendBin_Combined_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_latency_s = 0.000020834f; -#else const Word32 CRendBin_Combined_HRIR_latency_s_fx = 44741;/*Q-31*/ -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ const int16_t CRendBin_Combined_HRIR_max_num_iterations_48kHz = 1; @@ -65,263 +61,10 @@ const uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[15][BINAURAL_CHANNELS const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][1]={{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}}}; const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15]={0, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz_fx[15]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; -#endif const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][240]={ - { - {1.101488f, 1.121686f, 1.165024f, 1.224338f, 1.257855f, 1.220486f, 1.149240f, 1.140890f, 1.185728f, 1.128055f, 0.902355f, 0.707875f, 0.788108f, 1.099541f, 1.375119f, 1.484928f, 1.549978f, 1.695559f, 1.876431f, 1.995635f, 2.041427f, 2.028898f, 1.921455f, 1.700966f, 1.448293f, 1.277519f, 1.224020f, 1.244684f, 1.297952f, 1.382592f, 1.515360f, 1.701068f, 1.918656f, 2.122718f, 2.265994f, 2.329628f, 2.329558f, 2.294332f, 2.241762f, 2.173492f, 2.084598f, 1.978110f, 1.871591f, 1.786593f, 1.731800f, 1.700143f, 1.679095f, 1.656899f, 1.622424f, 1.569381f, 1.502234f, 1.432448f, 1.368773f, 1.314020f, 1.268340f, 1.231321f, 1.202278f, 1.180534f, 1.163747f, 1.146145f, 1.121645f, 1.087903f, 1.043613f, 0.983612f, 0.901864f, 0.798972f, 0.683390f, 0.566766f, 0.461005f, 0.376682f, 0.319308f, 0.287365f, 0.275856f, 0.280196f, 0.295624f, 0.315889f, 0.334947f, 0.349113f, 0.357350f, 0.360958f, 0.362742f, 0.364984f, 0.368682f, 0.375343f, 0.387569f, 0.406700f, 0.431922f, 0.462716f, 0.499762f, 0.542220f, 0.586337f, 0.627805f, 0.663761f, 0.692071f, 0.710593f, 0.717887f, - 0.713731f, 0.699041f, 0.675854f, 0.646711f, 0.613681f, 0.578765f, 0.544708f, 0.513648f, 0.485423f, 0.459267f, 0.436523f, 0.419581f, 0.409130f, 0.404828f, 0.407589f, 0.418787f, 0.438090f, 0.464110f, 0.496246f, 0.534436f, 0.578397f, 0.628210f, 0.684323f, 0.746531f, 0.814569f, 0.889456f, 0.972140f, 1.061353f, 1.155269f, 1.254322f, 1.359452f, 1.468434f, 1.577080f, 1.683222f, 1.786114f, 1.882169f, 1.964521f, 2.027143f, 2.066756f, 2.079988f, 2.061244f, 2.005565f, 1.912874f, 1.787215f, 1.631793f, 1.447687f, 1.238656f, 1.013433f, 0.779817f, 0.539619f, 0.293632f, 0.048036f, -0.190045f, -0.420433f, -0.646524f, -0.866314f, -1.074294f, -1.270685f, -1.460857f, -1.646046f, -1.822195f, -1.988192f, -2.148163f, -2.304337f, -2.453363f, -2.591452f, -2.718826f, -2.836782f, -2.942783f, -3.031068f, -3.097979f, -3.144348f, -3.170915f, -3.173977f, -3.149931f, -3.102115f, -3.036603f, -2.952834f, -2.846787f, -2.721688f, -2.584617f, -2.433723f, -2.261283f, -2.067770f, -1.858490f, -1.628464f, -1.366934f, -1.074068f, -0.755851f, -0.407743f, -0.023711f, 0.384421f, 0.796944f, 1.204825f, 1.594892f, 1.931022f, - 2.176602f, 2.317416f, 2.335553f, 2.191195f, 1.867100f, 1.394310f, 0.795503f, 0.073196f, -0.660345f, -1.115477f, -1.048547f, -0.566404f, -0.073872f, 0.126575f, 0.081506f, 0.007169f, -0.000212f, 0.010105f, -0.000437f, -0.007848f, 0.001481f, 0.006032f, -0.001850f, -0.004621f, 0.002044f, 0.003718f, -0.001908f, -0.002879f, 0.001815f, 0.002240f, -0.001726f, -0.001819f, 0.001470f, 0.001293f, -0.001428f, -0.001063f, 0.001166f, 0.000684f, -0.001078f, -0.000479f, 0.000904f, 0.000264f, -0.000723f, -0.000016f, 0.000645f, -0.000071f, -0.000388f, 0.000349f}, - {0.968441f, 0.987234f, 0.869596f, 0.596073f, 0.334483f, 0.171136f, 0.017776f, -0.161778f, -0.245721f, -0.155540f, 0.006522f, 0.093937f, 0.049496f, -0.140506f, -0.468985f, -0.824439f, -1.026403f, -1.016121f, -0.905691f, -0.796722f, -0.670406f, -0.503266f, -0.362411f, -0.307750f, -0.295462f, -0.254770f, -0.185996f, -0.113263f, -0.005954f, 0.176006f, 0.400292f, 0.595777f, 0.744307f, 0.877077f, 0.990030f, 1.022653f, 0.934836f, 0.765351f, 0.591919f, 0.455498f, 0.344908f, 0.238899f, 0.133289f, 0.027739f, -0.086033f, -0.210079f, -0.329871f, -0.429681f, -0.507904f, -0.568659f, -0.608760f, -0.622380f, -0.610718f, -0.579218f, -0.531546f, -0.471669f, -0.405261f, -0.334310f, -0.255734f, -0.168133f, -0.074958f, 0.019479f, 0.110900f, 0.191660f, 0.253073f, 0.292584f, 0.314355f, 0.323012f, 0.320972f, 0.311128f, 0.297794f, 0.284665f, 0.273984f, 0.266907f, 0.262951f, 0.259722f, 0.253926f, 0.242085f, 0.221157f, 0.190535f, 0.153092f, 0.112713f, 0.071225f, 0.028184f, -0.018416f, -0.072225f, -0.136625f, -0.210590f, -0.287552f, -0.358747f, -0.416020f, -0.451958f, -0.460910f, -0.441509f, -0.397130f, -0.334256f, - -0.261823f, -0.190493f, -0.129257f, -0.082184f, -0.049250f, -0.028772f, -0.017399f, -0.009448f, 0.001351f, 0.020052f, 0.051375f, 0.100649f, 0.171779f, 0.264460f, 0.373677f, 0.490520f, 0.602599f, 0.695221f, 0.754355f, 0.769527f, 0.734768f, 0.648370f, 0.512977f, 0.335735f, 0.127409f, -0.099262f, -0.330468f, -0.551239f, -0.746022f, -0.900770f, -1.004813f, -1.051193f, -1.036965f, -0.964527f, -0.841753f, -0.679493f, -0.489227f, -0.282948f, -0.072808f, 0.131140f, 0.321905f, 0.493472f, 0.639377f, 0.754179f, 0.834298f, 0.876384f, 0.876941f, 0.834703f, 0.751683f, 0.631609f, 0.479801f, 0.305136f, 0.119699f, -0.064323f, -0.235835f, -0.383842f, -0.498638f, -0.574816f, -0.611505f, -0.610195f, -0.574481f, -0.511148f, -0.428865f, -0.335564f, -0.238096f, -0.143043f, -0.055734f, 0.021001f, 0.085880f, 0.137914f, 0.176979f, 0.204394f, 0.221855f, 0.230580f, 0.231755f, 0.226643f, 0.215971f, 0.200107f, 0.179730f, 0.155526f, 0.127749f, 0.096849f, 0.063819f, 0.029377f, -0.006197f, -0.042042f, -0.076719f, -0.109157f, -0.138085f, -0.160825f, -0.174403f, -0.177268f, -0.168206f, -0.145199f, -0.107970f, -0.060190f, - -0.006824f, 0.048104f, 0.098363f, 0.134090f, 0.147833f, 0.138301f, 0.104724f, 0.045824f, -0.026274f, -0.078996f, -0.083091f, -0.045128f, -0.003292f, 0.012791f, 0.007249f, 0.000493f, 0.000789f, 0.002389f, 0.001492f, 0.000972f, 0.002319f, 0.003080f, 0.002368f, 0.002183f, 0.003054f, 0.003303f, 0.002617f, 0.002416f, 0.002859f, 0.002736f, 0.002007f, 0.001718f, 0.001826f, 0.001446f, 0.000707f, 0.000373f, 0.000270f, -0.000226f, -0.000879f, -0.001162f, -0.001335f, -0.001802f, -0.002255f, -0.002384f, -0.002506f, -0.002821f, -0.002986f, -0.002896f} - }, - { - {0.968441f, 0.987234f, 0.869596f, 0.596073f, 0.334483f, 0.171136f, 0.017776f, -0.161778f, -0.245721f, -0.155540f, 0.006522f, 0.093937f, 0.049496f, -0.140506f, -0.468985f, -0.824439f, -1.026403f, -1.016121f, -0.905691f, -0.796722f, -0.670406f, -0.503266f, -0.362411f, -0.307750f, -0.295462f, -0.254770f, -0.185996f, -0.113263f, -0.005954f, 0.176006f, 0.400292f, 0.595777f, 0.744307f, 0.877077f, 0.990030f, 1.022653f, 0.934836f, 0.765351f, 0.591919f, 0.455498f, 0.344908f, 0.238899f, 0.133289f, 0.027739f, -0.086033f, -0.210079f, -0.329871f, -0.429681f, -0.507904f, -0.568659f, -0.608760f, -0.622380f, -0.610718f, -0.579218f, -0.531546f, -0.471669f, -0.405261f, -0.334310f, -0.255734f, -0.168133f, -0.074958f, 0.019479f, 0.110900f, 0.191660f, 0.253073f, 0.292584f, 0.314355f, 0.323012f, 0.320972f, 0.311128f, 0.297794f, 0.284665f, 0.273984f, 0.266907f, 0.262951f, 0.259722f, 0.253926f, 0.242085f, 0.221157f, 0.190535f, 0.153092f, 0.112713f, 0.071225f, 0.028184f, -0.018416f, -0.072225f, -0.136625f, -0.210590f, -0.287552f, -0.358747f, -0.416020f, -0.451958f, -0.460910f, -0.441509f, -0.397130f, -0.334256f, - -0.261823f, -0.190493f, -0.129257f, -0.082184f, -0.049250f, -0.028772f, -0.017399f, -0.009448f, 0.001351f, 0.020052f, 0.051375f, 0.100649f, 0.171779f, 0.264460f, 0.373677f, 0.490520f, 0.602599f, 0.695221f, 0.754355f, 0.769527f, 0.734768f, 0.648370f, 0.512977f, 0.335735f, 0.127409f, -0.099262f, -0.330468f, -0.551239f, -0.746022f, -0.900770f, -1.004813f, -1.051193f, -1.036965f, -0.964527f, -0.841753f, -0.679493f, -0.489227f, -0.282948f, -0.072808f, 0.131140f, 0.321905f, 0.493472f, 0.639377f, 0.754179f, 0.834298f, 0.876384f, 0.876941f, 0.834703f, 0.751683f, 0.631609f, 0.479801f, 0.305136f, 0.119699f, -0.064323f, -0.235835f, -0.383842f, -0.498638f, -0.574816f, -0.611505f, -0.610195f, -0.574481f, -0.511148f, -0.428865f, -0.335564f, -0.238096f, -0.143043f, -0.055734f, 0.021001f, 0.085880f, 0.137914f, 0.176979f, 0.204394f, 0.221855f, 0.230580f, 0.231755f, 0.226643f, 0.215971f, 0.200107f, 0.179730f, 0.155526f, 0.127749f, 0.096849f, 0.063819f, 0.029377f, -0.006197f, -0.042042f, -0.076719f, -0.109157f, -0.138085f, -0.160825f, -0.174403f, -0.177268f, -0.168206f, -0.145199f, -0.107970f, -0.060190f, - -0.006824f, 0.048104f, 0.098363f, 0.134090f, 0.147833f, 0.138301f, 0.104724f, 0.045824f, -0.026274f, -0.078996f, -0.083091f, -0.045128f, -0.003292f, 0.012791f, 0.007249f, 0.000493f, 0.000789f, 0.002389f, 0.001492f, 0.000972f, 0.002319f, 0.003080f, 0.002368f, 0.002183f, 0.003054f, 0.003303f, 0.002617f, 0.002416f, 0.002859f, 0.002736f, 0.002007f, 0.001718f, 0.001826f, 0.001446f, 0.000707f, 0.000373f, 0.000270f, -0.000226f, -0.000879f, -0.001162f, -0.001335f, -0.001802f, -0.002255f, -0.002384f, -0.002506f, -0.002821f, -0.002986f, -0.002896f}, - {1.101488f, 1.121686f, 1.165024f, 1.224338f, 1.257855f, 1.220486f, 1.149240f, 1.140890f, 1.185728f, 1.128055f, 0.902355f, 0.707875f, 0.788108f, 1.099541f, 1.375119f, 1.484928f, 1.549978f, 1.695559f, 1.876431f, 1.995635f, 2.041427f, 2.028898f, 1.921455f, 1.700966f, 1.448293f, 1.277519f, 1.224020f, 1.244684f, 1.297952f, 1.382592f, 1.515360f, 1.701068f, 1.918656f, 2.122718f, 2.265994f, 2.329628f, 2.329558f, 2.294332f, 2.241762f, 2.173492f, 2.084598f, 1.978110f, 1.871591f, 1.786593f, 1.731800f, 1.700143f, 1.679095f, 1.656899f, 1.622424f, 1.569381f, 1.502234f, 1.432448f, 1.368773f, 1.314020f, 1.268340f, 1.231321f, 1.202278f, 1.180534f, 1.163747f, 1.146145f, 1.121645f, 1.087903f, 1.043613f, 0.983612f, 0.901864f, 0.798972f, 0.683390f, 0.566766f, 0.461005f, 0.376682f, 0.319308f, 0.287365f, 0.275856f, 0.280196f, 0.295624f, 0.315889f, 0.334947f, 0.349113f, 0.357350f, 0.360958f, 0.362742f, 0.364984f, 0.368682f, 0.375343f, 0.387569f, 0.406700f, 0.431922f, 0.462716f, 0.499762f, 0.542220f, 0.586337f, 0.627805f, 0.663761f, 0.692071f, 0.710593f, 0.717887f, - 0.713731f, 0.699041f, 0.675854f, 0.646711f, 0.613681f, 0.578765f, 0.544708f, 0.513648f, 0.485423f, 0.459267f, 0.436523f, 0.419581f, 0.409130f, 0.404828f, 0.407589f, 0.418787f, 0.438090f, 0.464110f, 0.496246f, 0.534436f, 0.578397f, 0.628210f, 0.684323f, 0.746531f, 0.814569f, 0.889456f, 0.972140f, 1.061353f, 1.155269f, 1.254322f, 1.359452f, 1.468434f, 1.577080f, 1.683222f, 1.786114f, 1.882169f, 1.964521f, 2.027143f, 2.066756f, 2.079988f, 2.061244f, 2.005565f, 1.912874f, 1.787215f, 1.631793f, 1.447687f, 1.238656f, 1.013433f, 0.779817f, 0.539619f, 0.293632f, 0.048036f, -0.190045f, -0.420433f, -0.646524f, -0.866314f, -1.074294f, -1.270685f, -1.460857f, -1.646046f, -1.822195f, -1.988192f, -2.148163f, -2.304337f, -2.453363f, -2.591452f, -2.718826f, -2.836782f, -2.942783f, -3.031068f, -3.097979f, -3.144348f, -3.170915f, -3.173977f, -3.149931f, -3.102115f, -3.036603f, -2.952834f, -2.846787f, -2.721688f, -2.584617f, -2.433723f, -2.261283f, -2.067770f, -1.858490f, -1.628464f, -1.366934f, -1.074068f, -0.755851f, -0.407743f, -0.023711f, 0.384421f, 0.796944f, 1.204825f, 1.594892f, 1.931022f, - 2.176602f, 2.317416f, 2.335553f, 2.191195f, 1.867100f, 1.394310f, 0.795503f, 0.073196f, -0.660345f, -1.115477f, -1.048547f, -0.566404f, -0.073872f, 0.126575f, 0.081506f, 0.007169f, -0.000212f, 0.010105f, -0.000437f, -0.007848f, 0.001481f, 0.006032f, -0.001850f, -0.004621f, 0.002044f, 0.003718f, -0.001908f, -0.002879f, 0.001815f, 0.002240f, -0.001726f, -0.001819f, 0.001470f, 0.001293f, -0.001428f, -0.001063f, 0.001166f, 0.000684f, -0.001078f, -0.000479f, 0.000904f, 0.000264f, -0.000723f, -0.000016f, 0.000645f, -0.000071f, -0.000388f, 0.000349f} - }, - { - {1.038216f, 1.104846f, 1.163927f, 1.102788f, 0.923912f, 0.819249f, 0.926472f, 1.059186f, 0.908605f, 0.521079f, 0.320389f, 0.567071f, 1.017483f, 1.260167f, 1.219416f, 1.154021f, 1.266485f, 1.495235f, 1.659357f, 1.659964f, 1.521679f, 1.331268f, 1.173102f, 1.086498f, 1.062729f, 1.084446f, 1.154530f, 1.278122f, 1.436340f, 1.590950f, 1.702153f, 1.739769f, 1.697847f, 1.603508f, 1.493099f, 1.376523f, 1.241975f, 1.094803f, 0.970109f, 0.902161f, 0.896629f, 0.934468f, 0.987453f, 1.027530f, 1.036809f, 1.016896f, 0.982652f, 0.944071f, 0.898806f, 0.841885f, 0.776112f, 0.710836f, 0.654027f, 0.607313f, 0.567432f, 0.531208f, 0.497948f, 0.466697f, 0.434013f, 0.397715f, 0.361295f, 0.330786f, 0.307633f, 0.288052f, 0.269263f, 0.253095f, 0.242705f, 0.238292f, 0.237335f, 0.237844f, 0.240377f, 0.247162f, 0.259729f, 0.277460f, 0.298273f, 0.320255f, 0.342464f, 0.364784f, 0.387656f, 0.411614f, 0.436401f, 0.460723f, 0.483419f, 0.504828f, 0.526542f, 0.549671f, 0.573590f, 0.596528f, 0.617075f, 0.634482f, 0.647342f, 0.652773f, 0.647722f, 0.630886f, 0.603055f, 0.566478f, - 0.524993f, 0.484080f, 0.449179f, 0.423543f, 0.408382f, 0.404761f, 0.414320f, 0.438121f, 0.475810f, 0.526417f, 0.589717f, 0.666444f, 0.756971f, 0.859702f, 0.971057f, 1.087009f, 1.203748f, 1.316495f, 1.419260f, 1.507289f, 1.578795f, 1.632867f, 1.667033f, 1.679088f, 1.670086f, 1.642553f, 1.596178f, 1.528297f, 1.438394f, 1.328645f, 1.199676f, 1.049815f, 0.880200f, 0.697091f, 0.506741f, 0.310961f, 0.110587f, -0.089623f, -0.283659f, -0.470268f, -0.652095f, -0.829533f, -0.999868f, -1.162742f, -1.321790f, -1.479081f, -1.631784f, -1.776619f, -1.914009f, -2.044530f, -2.163955f, -2.265828f, -2.347346f, -2.408663f, -2.447423f, -2.458570f, -2.440006f, -2.394433f, -2.324575f, -2.230407f, -2.112872f, -1.976957f, -1.828529f, -1.670564f, -1.505122f, -1.337013f, -1.172529f, -1.015633f, -0.868055f, -0.732334f, -0.611993f, -0.508636f, -0.421038f, -0.347478f, -0.287300f, -0.239640f, -0.202007f, -0.171116f, -0.144652f, -0.121529f, -0.100585f, -0.079881f, -0.057816f, -0.034356f, -0.010170f, 0.015158f, 0.042807f, 0.072857f, 0.104483f, 0.137917f, 0.174070f, 0.211993f, 0.249072f, 0.283815f, 0.315644f, 0.341936f, - 0.358772f, 0.364654f, 0.359571f, 0.340892f, 0.305378f, 0.254287f, 0.189565f, 0.107161f, 0.007129f, -0.086814f, -0.133950f, -0.115538f, -0.059105f, -0.011956f, 0.004169f, 0.001902f, -0.000382f, 0.000624f, 0.000524f, -0.000621f, -0.000315f, 0.000592f, 0.000256f, -0.000424f, -0.000092f, 0.000403f, 0.000056f, -0.000345f, -0.000050f, 0.000231f, -0.000053f, -0.000269f, -0.000023f, 0.000132f, -0.000078f, -0.000176f, 0.000015f, 0.000089f, -0.000053f, -0.000079f, 0.000051f, 0.000072f, -0.000010f, 0.000002f, 0.000067f, 0.000056f, 0.000030f, 0.000052f}, - {1.038216f, 1.104846f, 1.163927f, 1.102788f, 0.923912f, 0.819249f, 0.926472f, 1.059186f, 0.908605f, 0.521079f, 0.320389f, 0.567071f, 1.017483f, 1.260167f, 1.219416f, 1.154021f, 1.266485f, 1.495235f, 1.659357f, 1.659964f, 1.521679f, 1.331268f, 1.173102f, 1.086498f, 1.062729f, 1.084446f, 1.154530f, 1.278122f, 1.436340f, 1.590950f, 1.702153f, 1.739769f, 1.697847f, 1.603508f, 1.493099f, 1.376523f, 1.241975f, 1.094803f, 0.970109f, 0.902161f, 0.896629f, 0.934468f, 0.987453f, 1.027530f, 1.036809f, 1.016896f, 0.982652f, 0.944071f, 0.898806f, 0.841885f, 0.776112f, 0.710836f, 0.654027f, 0.607313f, 0.567432f, 0.531208f, 0.497948f, 0.466697f, 0.434013f, 0.397715f, 0.361295f, 0.330786f, 0.307633f, 0.288052f, 0.269263f, 0.253095f, 0.242705f, 0.238292f, 0.237335f, 0.237844f, 0.240377f, 0.247162f, 0.259729f, 0.277460f, 0.298273f, 0.320255f, 0.342464f, 0.364784f, 0.387656f, 0.411614f, 0.436401f, 0.460723f, 0.483419f, 0.504828f, 0.526542f, 0.549671f, 0.573590f, 0.596528f, 0.617075f, 0.634482f, 0.647342f, 0.652773f, 0.647722f, 0.630886f, 0.603055f, 0.566478f, - 0.524993f, 0.484080f, 0.449179f, 0.423543f, 0.408382f, 0.404761f, 0.414320f, 0.438121f, 0.475810f, 0.526417f, 0.589717f, 0.666444f, 0.756971f, 0.859702f, 0.971057f, 1.087009f, 1.203748f, 1.316495f, 1.419260f, 1.507289f, 1.578795f, 1.632867f, 1.667033f, 1.679088f, 1.670086f, 1.642553f, 1.596178f, 1.528297f, 1.438394f, 1.328645f, 1.199676f, 1.049815f, 0.880200f, 0.697091f, 0.506741f, 0.310961f, 0.110587f, -0.089623f, -0.283659f, -0.470268f, -0.652095f, -0.829533f, -0.999868f, -1.162742f, -1.321790f, -1.479081f, -1.631784f, -1.776619f, -1.914009f, -2.044530f, -2.163955f, -2.265828f, -2.347346f, -2.408663f, -2.447423f, -2.458570f, -2.440006f, -2.394433f, -2.324575f, -2.230407f, -2.112872f, -1.976957f, -1.828529f, -1.670564f, -1.505122f, -1.337013f, -1.172529f, -1.015633f, -0.868055f, -0.732334f, -0.611993f, -0.508636f, -0.421038f, -0.347478f, -0.287300f, -0.239640f, -0.202007f, -0.171116f, -0.144652f, -0.121529f, -0.100585f, -0.079881f, -0.057816f, -0.034356f, -0.010170f, 0.015158f, 0.042807f, 0.072857f, 0.104483f, 0.137917f, 0.174070f, 0.211993f, 0.249072f, 0.283815f, 0.315644f, 0.341936f, - 0.358772f, 0.364654f, 0.359571f, 0.340892f, 0.305378f, 0.254287f, 0.189565f, 0.107161f, 0.007129f, -0.086814f, -0.133950f, -0.115538f, -0.059105f, -0.011956f, 0.004169f, 0.001902f, -0.000382f, 0.000624f, 0.000524f, -0.000621f, -0.000315f, 0.000592f, 0.000256f, -0.000424f, -0.000092f, 0.000403f, 0.000056f, -0.000345f, -0.000050f, 0.000231f, -0.000053f, -0.000269f, -0.000023f, 0.000132f, -0.000078f, -0.000176f, 0.000015f, 0.000089f, -0.000053f, -0.000079f, 0.000051f, 0.000072f, -0.000010f, 0.000002f, 0.000067f, 0.000056f, 0.000030f, 0.000052f} - }, - { - {0.984080f, 0.970476f, 1.006906f, 1.104260f, 1.216794f, 1.335635f, 1.464294f, 1.533054f, 1.477510f, 1.373694f, 1.348288f, 1.379970f, 1.341218f, 1.215083f, 1.111544f, 1.076764f, 1.041682f, 0.966496f, 0.893479f, 0.840686f, 0.769350f, 0.677157f, 0.617786f, 0.610740f, 0.620021f, 0.628332f, 0.649967f, 0.668214f, 0.639094f, 0.564000f, 0.493341f, 0.454442f, 0.430784f, 0.411315f, 0.408973f, 0.429006f, 0.460805f, 0.502650f, 0.562459f, 0.634539f, 0.699920f, 0.747237f, 0.776345f, 0.788052f, 0.785425f, 0.779422f, 0.782268f, 0.799652f, 0.833592f, 0.884572f, 0.946592f, 1.007188f, 1.054930f, 1.082330f, 1.083817f, 1.058335f, 1.012691f, 0.956250f, 0.893651f, 0.826213f, 0.756564f, 0.687438f, 0.619177f, 0.552166f, 0.489247f, 0.433687f, 0.387315f, 0.351696f, 0.328352f, 0.317105f, 0.316219f, 0.324077f, 0.339216f, 0.359831f, 0.385071f, 0.416020f, 0.454311f, 0.500915f, 0.557014f, 0.624731f, 0.706142f, 0.802040f, 0.911693f, 1.033446f, 1.165920f, 1.308336f, 1.458725f, 1.612356f, 1.763090f, 1.904749f, 2.029174f, 2.125343f, 2.184253f, 2.203656f, 2.185203f, 2.129319f, - 2.037039f, 1.914643f, 1.771288f, 1.612832f, 1.442204f, 1.264496f, 1.086482f, 0.911185f, 0.737532f, 0.566210f, 0.402309f, 0.251448f, 0.116550f, -0.000376f, -0.096273f, -0.169242f, -0.221428f, -0.257657f, -0.281475f, -0.293927f, -0.295924f, -0.289877f, -0.278242f, -0.261940f, -0.241537f, -0.219109f, -0.197455f, -0.177735f, -0.159025f, -0.140026f, -0.120145f, -0.098893f, -0.075279f, -0.048418f, -0.018567f, 0.012653f, 0.043076f, 0.070995f, 0.095137f, 0.113713f, 0.124275f, 0.125072f, 0.115890f, 0.096669f, 0.065855f, 0.021420f, -0.036755f, -0.106849f, -0.187293f, -0.277135f, -0.373714f, -0.471889f, -0.566991f, -0.657229f, -0.741912f, -0.818969f, -0.886425f, -0.945214f, -0.997930f, -1.045205f, -1.085732f, -1.119527f, -1.148452f, -1.173231f, -1.192402f, -1.204919f, -1.211832f, -1.214558f, -1.212985f, -1.206284f, -1.194921f, -1.180840f, -1.165524f, -1.148636f, -1.129578f, -1.109786f, -1.091431f, -1.073946f, -1.054811f, -1.033994f, -1.013549f, -0.992185f, -0.965310f, -0.931378f, -0.892025f, -0.844815f, -0.783136f, -0.704366f, -0.609651f, -0.494994f, -0.352963f, -0.184110f, 0.004235f, 0.209198f, 0.428300f, 0.646026f, - 0.840500f, 0.999858f, 1.113448f, 1.155053f, 1.100378f, 0.951048f, 0.711125f, 0.363726f, -0.066699f, -0.436902f, -0.559600f, -0.399070f, -0.132866f, 0.029384f, 0.043765f, 0.007950f, -0.001756f, 0.005023f, 0.001749f, -0.004233f, -0.000749f, 0.003458f, 0.000224f, -0.002740f, 0.000175f, 0.002291f, -0.000296f, -0.001833f, 0.000392f, 0.001448f, -0.000493f, -0.001223f, 0.000422f, 0.000882f, -0.000505f, -0.000755f, 0.000403f, 0.000509f, -0.000413f, -0.000382f, 0.000355f, 0.000254f, -0.000271f, -0.000091f, 0.000266f, 0.000059f, -0.000112f, 0.000122f}, - {0.883975f, 0.742747f, 0.483914f, 0.188904f, -0.047459f, -0.209233f, -0.344855f, -0.459879f, -0.499939f, -0.451850f, -0.382284f, -0.347274f, -0.330209f, -0.301172f, -0.273988f, -0.260328f, -0.215778f, -0.082603f, 0.135261f, 0.371525f, 0.553401f, 0.638210f, 0.619076f, 0.521305f, 0.383817f, 0.230837f, 0.070028f, -0.082040f, -0.195461f, -0.256180f, -0.280452f, -0.291260f, -0.295978f, -0.293653f, -0.286459f, -0.272643f, -0.239767f, -0.175784f, -0.082109f, 0.027789f, 0.135803f, 0.222618f, 0.272015f, 0.278079f, 0.246877f, 0.190947f, 0.124821f, 0.063584f, 0.018967f, -0.005841f, -0.015723f, -0.017984f, -0.018340f, -0.020401f, -0.025556f, -0.032860f, -0.040363f, -0.046742f, -0.051655f, -0.055748f, -0.060851f, -0.069127f, -0.081442f, -0.096777f, -0.112463f, -0.123699f, -0.123450f, -0.104852f, -0.064843f, -0.005816f, 0.065155f, 0.137891f, 0.201213f, 0.245836f, 0.266654f, 0.262765f, 0.235893f, 0.188819f, 0.124475f, 0.045794f, -0.043343f, -0.136558f, -0.224279f, -0.294747f, -0.336348f, -0.340593f, -0.304985f, -0.234374f, -0.139779f, -0.035298f, 0.065161f, 0.150165f, 0.211935f, 0.246636f, 0.254039f, 0.236891f, - 0.200185f, 0.150350f, 0.094455f, 0.039464f, -0.008619f, -0.045731f, -0.070400f, -0.083602f, -0.087939f, -0.086661f, -0.082872f, -0.078985f, -0.076432f, -0.075622f, -0.076068f, -0.076524f, -0.075078f, -0.069344f, -0.056965f, -0.036414f, -0.007704f, 0.027321f, 0.065163f, 0.101267f, 0.130992f, 0.150629f, 0.157941f, 0.152138f, 0.133674f, 0.104033f, 0.065396f, 0.020338f, -0.028149f, -0.076464f, -0.120497f, -0.155961f, -0.178741f, -0.185412f, -0.174114f, -0.145315f, -0.101960f, -0.049135f, 0.006550f, 0.058125f, 0.099789f, 0.127948f, 0.141382f, 0.140988f, 0.129340f, 0.109801f, 0.085494f, 0.058877f, 0.031865f, 0.005795f, -0.018626f, -0.040919f, -0.060327f, -0.075887f, -0.086696f, -0.091841f, -0.090471f, -0.082358f, -0.068247f, -0.049554f, -0.028075f, -0.006021f, 0.014334f, 0.031377f, 0.044342f, 0.052977f, 0.057575f, 0.059084f, 0.058543f, 0.056491f, 0.053219f, 0.048980f, 0.043403f, 0.035343f, 0.023794f, 0.008214f, -0.012079f, -0.037401f, -0.066035f, -0.094144f, -0.117200f, -0.129987f, -0.126089f, -0.100443f, -0.053216f, 0.010034f, 0.080385f, 0.145063f, 0.187642f, 0.194442f, 0.161633f, 0.094675f, - 0.005067f, -0.087812f, -0.157659f, -0.183614f, -0.160959f, -0.096474f, -0.003389f, 0.088590f, 0.132728f, 0.101387f, 0.023921f, -0.034469f, -0.038942f, -0.013063f, 0.003237f, 0.001212f, -0.002961f, -0.001216f, 0.000276f, -0.001620f, -0.002467f, -0.000772f, -0.000058f, -0.001118f, -0.001152f, 0.000189f, 0.000633f, 0.000071f, 0.000304f, 0.001243f, 0.001427f, 0.001031f, 0.001189f, 0.001646f, 0.001521f, 0.001094f, 0.001029f, 0.001052f, 0.000696f, 0.000238f, 0.000016f, -0.000186f, -0.000559f, -0.000907f, -0.001097f, -0.001249f, -0.001412f, -0.001512f} - }, - { - {0.883975f, 0.742747f, 0.483914f, 0.188904f, -0.047459f, -0.209233f, -0.344855f, -0.459879f, -0.499939f, -0.451850f, -0.382284f, -0.347274f, -0.330209f, -0.301172f, -0.273988f, -0.260328f, -0.215778f, -0.082603f, 0.135261f, 0.371525f, 0.553401f, 0.638210f, 0.619076f, 0.521305f, 0.383817f, 0.230837f, 0.070028f, -0.082040f, -0.195461f, -0.256180f, -0.280452f, -0.291260f, -0.295978f, -0.293653f, -0.286459f, -0.272643f, -0.239767f, -0.175784f, -0.082109f, 0.027789f, 0.135803f, 0.222618f, 0.272015f, 0.278079f, 0.246877f, 0.190947f, 0.124821f, 0.063584f, 0.018967f, -0.005841f, -0.015723f, -0.017984f, -0.018340f, -0.020401f, -0.025556f, -0.032860f, -0.040363f, -0.046742f, -0.051655f, -0.055748f, -0.060851f, -0.069127f, -0.081442f, -0.096777f, -0.112463f, -0.123699f, -0.123450f, -0.104852f, -0.064843f, -0.005816f, 0.065155f, 0.137891f, 0.201213f, 0.245836f, 0.266654f, 0.262765f, 0.235893f, 0.188819f, 0.124475f, 0.045794f, -0.043343f, -0.136558f, -0.224279f, -0.294747f, -0.336348f, -0.340593f, -0.304985f, -0.234374f, -0.139779f, -0.035298f, 0.065161f, 0.150165f, 0.211935f, 0.246636f, 0.254039f, 0.236891f, - 0.200185f, 0.150350f, 0.094455f, 0.039464f, -0.008619f, -0.045731f, -0.070400f, -0.083602f, -0.087939f, -0.086661f, -0.082872f, -0.078985f, -0.076432f, -0.075622f, -0.076068f, -0.076524f, -0.075078f, -0.069344f, -0.056965f, -0.036414f, -0.007704f, 0.027321f, 0.065163f, 0.101267f, 0.130992f, 0.150629f, 0.157941f, 0.152138f, 0.133674f, 0.104033f, 0.065396f, 0.020338f, -0.028149f, -0.076464f, -0.120497f, -0.155961f, -0.178741f, -0.185412f, -0.174114f, -0.145315f, -0.101960f, -0.049135f, 0.006550f, 0.058125f, 0.099789f, 0.127948f, 0.141382f, 0.140988f, 0.129340f, 0.109801f, 0.085494f, 0.058877f, 0.031865f, 0.005795f, -0.018626f, -0.040919f, -0.060327f, -0.075887f, -0.086696f, -0.091841f, -0.090471f, -0.082358f, -0.068247f, -0.049554f, -0.028075f, -0.006021f, 0.014334f, 0.031377f, 0.044342f, 0.052977f, 0.057575f, 0.059084f, 0.058543f, 0.056491f, 0.053219f, 0.048980f, 0.043403f, 0.035343f, 0.023794f, 0.008214f, -0.012079f, -0.037401f, -0.066035f, -0.094144f, -0.117200f, -0.129987f, -0.126089f, -0.100443f, -0.053216f, 0.010034f, 0.080385f, 0.145063f, 0.187642f, 0.194442f, 0.161633f, 0.094675f, - 0.005067f, -0.087812f, -0.157659f, -0.183614f, -0.160959f, -0.096474f, -0.003389f, 0.088590f, 0.132728f, 0.101387f, 0.023921f, -0.034469f, -0.038942f, -0.013063f, 0.003237f, 0.001212f, -0.002961f, -0.001216f, 0.000276f, -0.001620f, -0.002467f, -0.000772f, -0.000058f, -0.001118f, -0.001152f, 0.000189f, 0.000633f, 0.000071f, 0.000304f, 0.001243f, 0.001427f, 0.001031f, 0.001189f, 0.001646f, 0.001521f, 0.001094f, 0.001029f, 0.001052f, 0.000696f, 0.000238f, 0.000016f, -0.000186f, -0.000559f, -0.000907f, -0.001097f, -0.001249f, -0.001412f, -0.001512f}, - {0.984080f, 0.970476f, 1.006906f, 1.104260f, 1.216794f, 1.335635f, 1.464294f, 1.533054f, 1.477510f, 1.373694f, 1.348288f, 1.379970f, 1.341218f, 1.215083f, 1.111544f, 1.076764f, 1.041682f, 0.966496f, 0.893479f, 0.840686f, 0.769350f, 0.677157f, 0.617786f, 0.610740f, 0.620021f, 0.628332f, 0.649967f, 0.668214f, 0.639094f, 0.564000f, 0.493341f, 0.454442f, 0.430784f, 0.411315f, 0.408973f, 0.429006f, 0.460805f, 0.502650f, 0.562459f, 0.634539f, 0.699920f, 0.747237f, 0.776345f, 0.788052f, 0.785425f, 0.779422f, 0.782268f, 0.799652f, 0.833592f, 0.884572f, 0.946592f, 1.007188f, 1.054930f, 1.082330f, 1.083817f, 1.058335f, 1.012691f, 0.956250f, 0.893651f, 0.826213f, 0.756564f, 0.687438f, 0.619177f, 0.552166f, 0.489247f, 0.433687f, 0.387315f, 0.351696f, 0.328352f, 0.317105f, 0.316219f, 0.324077f, 0.339216f, 0.359831f, 0.385071f, 0.416020f, 0.454311f, 0.500915f, 0.557014f, 0.624731f, 0.706142f, 0.802040f, 0.911693f, 1.033446f, 1.165920f, 1.308336f, 1.458725f, 1.612356f, 1.763090f, 1.904749f, 2.029174f, 2.125343f, 2.184253f, 2.203656f, 2.185203f, 2.129319f, - 2.037039f, 1.914643f, 1.771288f, 1.612832f, 1.442204f, 1.264496f, 1.086482f, 0.911185f, 0.737532f, 0.566210f, 0.402309f, 0.251448f, 0.116550f, -0.000376f, -0.096273f, -0.169242f, -0.221428f, -0.257657f, -0.281475f, -0.293927f, -0.295924f, -0.289877f, -0.278242f, -0.261940f, -0.241537f, -0.219109f, -0.197455f, -0.177735f, -0.159025f, -0.140026f, -0.120145f, -0.098893f, -0.075279f, -0.048418f, -0.018567f, 0.012653f, 0.043076f, 0.070995f, 0.095137f, 0.113713f, 0.124275f, 0.125072f, 0.115890f, 0.096669f, 0.065855f, 0.021420f, -0.036755f, -0.106849f, -0.187293f, -0.277135f, -0.373714f, -0.471889f, -0.566991f, -0.657229f, -0.741912f, -0.818969f, -0.886425f, -0.945214f, -0.997930f, -1.045205f, -1.085732f, -1.119527f, -1.148452f, -1.173231f, -1.192402f, -1.204919f, -1.211832f, -1.214558f, -1.212985f, -1.206284f, -1.194921f, -1.180840f, -1.165524f, -1.148636f, -1.129578f, -1.109786f, -1.091431f, -1.073946f, -1.054811f, -1.033994f, -1.013549f, -0.992185f, -0.965310f, -0.931378f, -0.892025f, -0.844815f, -0.783136f, -0.704366f, -0.609651f, -0.494994f, -0.352963f, -0.184110f, 0.004235f, 0.209198f, 0.428300f, 0.646026f, - 0.840500f, 0.999858f, 1.113448f, 1.155053f, 1.100378f, 0.951048f, 0.711125f, 0.363726f, -0.066699f, -0.436902f, -0.559600f, -0.399070f, -0.132866f, 0.029384f, 0.043765f, 0.007950f, -0.001756f, 0.005023f, 0.001749f, -0.004233f, -0.000749f, 0.003458f, 0.000224f, -0.002740f, 0.000175f, 0.002291f, -0.000296f, -0.001833f, 0.000392f, 0.001448f, -0.000493f, -0.001223f, 0.000422f, 0.000882f, -0.000505f, -0.000755f, 0.000403f, 0.000509f, -0.000413f, -0.000382f, 0.000355f, 0.000254f, -0.000271f, -0.000091f, 0.000266f, 0.000059f, -0.000112f, 0.000122f} - }, - { - {1.063474f, 1.043131f, 1.080672f, 1.214000f, 1.381928f, 1.505441f, 1.571766f, 1.596869f, 1.559288f, 1.443460f, 1.315432f, 1.264794f, 1.275827f, 1.246689f, 1.147952f, 1.067945f, 1.069330f, 1.093255f, 1.060696f, 0.991275f, 0.952308f, 0.947628f, 0.931450f, 0.896088f, 0.875184f, 0.877635f, 0.877306f, 0.862455f, 0.851114f, 0.858664f, 0.880945f, 0.907411f, 0.929244f, 0.938406f, 0.935115f, 0.932668f, 0.945105f, 0.975372f, 1.020051f, 1.076159f, 1.138482f, 1.199314f, 1.255133f, 1.306848f, 1.352586f, 1.387511f, 1.411062f, 1.428044f, 1.442949f, 1.457837f, 1.473867f, 1.490422f, 1.504141f, 1.511326f, 1.509565f, 1.496836f, 1.472407f, 1.438435f, 1.397187f, 1.347911f, 1.289991f, 1.226763f, 1.162058f, 1.095742f, 1.026740f, 0.957251f, 0.889862f, 0.823884f, 0.758601f, 0.697267f, 0.644668f, 0.603523f, 0.575533f, 0.562861f, 0.566399f, 0.584922f, 0.616971f, 0.661507f, 0.716950f, 0.782071f, 0.857272f, 0.942702f, 1.036381f, 1.136549f, 1.244199f, 1.360630f, 1.484022f, 1.610883f, 1.739254f, 1.867675f, 1.991785f, 2.104459f, 2.199314f, 2.272351f, 2.319839f, 2.336536f, - 2.318055f, 2.264616f, 2.180165f, 2.067426f, 1.926830f, 1.761394f, 1.578694f, 1.385256f, 1.182714f, 0.972923f, 0.762994f, 0.560921f, 0.369676f, 0.190476f, 0.028730f, -0.108777f, -0.220619f, -0.309841f, -0.378087f, -0.425236f, -0.453644f, -0.468415f, -0.473457f, -0.470028f, -0.459061f, -0.442865f, -0.424328f, -0.405395f, -0.386539f, -0.367682f, -0.349391f, -0.332184f, -0.314542f, -0.293369f, -0.267138f, -0.236981f, -0.204194f, -0.168837f, -0.131697f, -0.095649f, -0.064007f, -0.038874f, -0.021740f, -0.014608f, -0.020128f, -0.040959f, -0.078587f, -0.132851f, -0.203536f, -0.291705f, -0.397394f, -0.516941f, -0.645343f, -0.780070f, -0.919041f, -1.056337f, -1.184558f, -1.300520f, -1.404186f, -1.493222f, -1.563734f, -1.615600f, -1.652081f, -1.674537f, -1.681849f, -1.674638f, -1.656140f, -1.629030f, -1.594189f, -1.552486f, -1.506033f, -1.457814f, -1.410294f, -1.363968f, -1.318341f, -1.274920f, -1.236490f, -1.202485f, -1.169363f, -1.136833f, -1.107851f, -1.080975f, -1.050211f, -1.014006f, -0.975256f, -0.930779f, -0.871463f, -0.793938f, -0.699614f, -0.581833f, -0.428980f, -0.240611f, -0.024812f, 0.217463f, 0.485342f, 0.758970f, - 1.009742f, 1.222711f, 1.383022f, 1.452948f, 1.397393f, 1.216786f, 0.913966f, 0.463363f, -0.102253f, -0.587837f, -0.741210f, -0.518203f, -0.161231f, 0.049607f, 0.061391f, 0.009945f, -0.002758f, 0.007110f, 0.002413f, -0.005996f, -0.001010f, 0.004903f, 0.000261f, -0.003925f, 0.000280f, 0.003284f, -0.000470f, -0.002645f, 0.000624f, 0.002115f, -0.000763f, -0.001772f, 0.000700f, 0.001304f, -0.000805f, -0.001090f, 0.000689f, 0.000741f, -0.000698f, -0.000535f, 0.000618f, 0.000330f, -0.000506f, -0.000092f, 0.000475f, 0.000007f, -0.000267f, 0.000243f}, - {0.905512f, 0.678641f, 0.311373f, -0.074151f, -0.391473f, -0.617374f, -0.746262f, -0.740996f, -0.564331f, -0.254460f, 0.070978f, 0.303423f, 0.417282f, 0.449447f, 0.432211f, 0.367816f, 0.255977f, 0.119310f, -0.009037f, -0.114250f, -0.203912f, -0.281083f, -0.325135f, -0.311110f, -0.241931f, -0.146174f, -0.046109f, 0.054859f, 0.151966f, 0.226035f, 0.259397f, 0.251854f, 0.213115f, 0.150155f, 0.069211f, -0.018634f, -0.100791f, -0.166658f, -0.205638f, -0.209754f, -0.181909f, -0.135245f, -0.081451f, -0.024331f, 0.034856f, 0.091963f, 0.141052f, 0.175632f, 0.187911f, 0.171589f, 0.127151f, 0.062454f, -0.011149f, -0.081170f, -0.135073f, -0.163849f, -0.165675f, -0.145034f, -0.109098f, -0.065479f, -0.020785f, 0.021411f, 0.060865f, 0.097933f, 0.130852f, 0.155355f, 0.165308f, 0.153592f, 0.114488f, 0.047274f, -0.041250f, -0.136303f, -0.216742f, -0.259900f, -0.249627f, -0.183769f, -0.076421f, 0.046233f, 0.154456f, 0.224564f, 0.245543f, 0.219702f, 0.158367f, 0.076598f, -0.010361f, -0.088906f, -0.147863f, -0.178885f, -0.177527f, -0.145152f, -0.089784f, -0.024237f, 0.037621f, 0.084404f, 0.109576f, 0.112370f, - 0.096930f, 0.070039f, 0.038778f, 0.009027f, -0.015303f, -0.032497f, -0.042624f, -0.046771f, -0.046440f, -0.043125f, -0.037867f, -0.031014f, -0.022391f, -0.011633f, 0.001488f, 0.016579f, 0.032114f, 0.045463f, 0.053594f, 0.054013f, 0.045545f, 0.028883f, 0.006695f, -0.016938f, -0.037553f, -0.051342f, -0.055978f, -0.051160f, -0.038603f, -0.021347f, -0.002781f, 0.014142f, 0.027341f, 0.035751f, 0.039167f, 0.037897f, 0.032496f, 0.023714f, 0.012505f, 0.000000f, -0.012486f, -0.023459f, -0.031401f, -0.035090f, -0.033864f, -0.027773f, -0.017676f, -0.005222f, 0.007471f, 0.018343f, 0.025831f, 0.029082f, 0.028059f, 0.023474f, 0.016464f, 0.008192f, -0.000309f, -0.008120f, -0.014522f, -0.019089f, -0.021594f, -0.021867f, -0.019862f, -0.015729f, -0.009742f, -0.002298f, 0.005904f, 0.013865f, 0.020516f, 0.024843f, 0.025909f, 0.023153f, 0.016760f, 0.007563f, -0.003225f, -0.014006f, -0.022916f, -0.028476f, -0.029983f, -0.027181f, -0.020128f, -0.009670f, 0.002656f, 0.015448f, 0.027375f, 0.036285f, 0.039574f, 0.035702f, 0.024364f, 0.005813f, -0.017861f, -0.040900f, -0.055655f, -0.056646f, -0.041947f, -0.012939f, - 0.023511f, 0.054222f, 0.066227f, 0.054969f, 0.024437f, -0.016387f, -0.051673f, -0.060245f, -0.033060f, 0.009957f, 0.033887f, 0.024885f, 0.002528f, -0.007913f, -0.003871f, 0.001012f, 0.000170f, -0.001482f, -0.000477f, 0.000417f, -0.000514f, -0.001048f, -0.000134f, 0.000401f, -0.000132f, -0.000249f, 0.000462f, 0.000732f, 0.000295f, 0.000193f, 0.000558f, 0.000516f, 0.000036f, -0.000136f, -0.000008f, -0.000166f, -0.000521f, -0.000566f, -0.000402f, -0.000420f, -0.000486f, -0.000304f, -0.000043f, 0.000060f, 0.000153f, 0.000366f, 0.000506f, 0.000491f} - }, - { - {0.905512f, 0.678641f, 0.311373f, -0.074151f, -0.391473f, -0.617374f, -0.746262f, -0.740996f, -0.564331f, -0.254460f, 0.070978f, 0.303423f, 0.417282f, 0.449447f, 0.432211f, 0.367816f, 0.255977f, 0.119310f, -0.009037f, -0.114250f, -0.203912f, -0.281083f, -0.325135f, -0.311110f, -0.241931f, -0.146174f, -0.046109f, 0.054859f, 0.151966f, 0.226035f, 0.259397f, 0.251854f, 0.213115f, 0.150155f, 0.069211f, -0.018634f, -0.100791f, -0.166658f, -0.205638f, -0.209754f, -0.181909f, -0.135245f, -0.081451f, -0.024331f, 0.034856f, 0.091963f, 0.141052f, 0.175632f, 0.187911f, 0.171589f, 0.127151f, 0.062454f, -0.011149f, -0.081170f, -0.135073f, -0.163849f, -0.165675f, -0.145034f, -0.109098f, -0.065479f, -0.020785f, 0.021411f, 0.060865f, 0.097933f, 0.130852f, 0.155355f, 0.165308f, 0.153592f, 0.114488f, 0.047274f, -0.041250f, -0.136303f, -0.216742f, -0.259900f, -0.249627f, -0.183769f, -0.076421f, 0.046233f, 0.154456f, 0.224564f, 0.245543f, 0.219702f, 0.158367f, 0.076598f, -0.010361f, -0.088906f, -0.147863f, -0.178885f, -0.177527f, -0.145152f, -0.089784f, -0.024237f, 0.037621f, 0.084404f, 0.109576f, 0.112370f, - 0.096930f, 0.070039f, 0.038778f, 0.009027f, -0.015303f, -0.032497f, -0.042624f, -0.046771f, -0.046440f, -0.043125f, -0.037867f, -0.031014f, -0.022391f, -0.011633f, 0.001488f, 0.016579f, 0.032114f, 0.045463f, 0.053594f, 0.054013f, 0.045545f, 0.028883f, 0.006695f, -0.016938f, -0.037553f, -0.051342f, -0.055978f, -0.051160f, -0.038603f, -0.021347f, -0.002781f, 0.014142f, 0.027341f, 0.035751f, 0.039167f, 0.037897f, 0.032496f, 0.023714f, 0.012505f, 0.000000f, -0.012486f, -0.023459f, -0.031401f, -0.035090f, -0.033864f, -0.027773f, -0.017676f, -0.005222f, 0.007471f, 0.018343f, 0.025831f, 0.029082f, 0.028059f, 0.023474f, 0.016464f, 0.008192f, -0.000309f, -0.008120f, -0.014522f, -0.019089f, -0.021594f, -0.021867f, -0.019862f, -0.015729f, -0.009742f, -0.002298f, 0.005904f, 0.013865f, 0.020516f, 0.024843f, 0.025909f, 0.023153f, 0.016760f, 0.007563f, -0.003225f, -0.014006f, -0.022916f, -0.028476f, -0.029983f, -0.027181f, -0.020128f, -0.009670f, 0.002656f, 0.015448f, 0.027375f, 0.036285f, 0.039574f, 0.035702f, 0.024364f, 0.005813f, -0.017861f, -0.040900f, -0.055655f, -0.056646f, -0.041947f, -0.012939f, - 0.023511f, 0.054222f, 0.066227f, 0.054969f, 0.024437f, -0.016387f, -0.051673f, -0.060245f, -0.033060f, 0.009957f, 0.033887f, 0.024885f, 0.002528f, -0.007913f, -0.003871f, 0.001012f, 0.000170f, -0.001482f, -0.000477f, 0.000417f, -0.000514f, -0.001048f, -0.000134f, 0.000401f, -0.000132f, -0.000249f, 0.000462f, 0.000732f, 0.000295f, 0.000193f, 0.000558f, 0.000516f, 0.000036f, -0.000136f, -0.000008f, -0.000166f, -0.000521f, -0.000566f, -0.000402f, -0.000420f, -0.000486f, -0.000304f, -0.000043f, 0.000060f, 0.000153f, 0.000366f, 0.000506f, 0.000491f}, - {1.063474f, 1.043131f, 1.080672f, 1.214000f, 1.381928f, 1.505441f, 1.571766f, 1.596869f, 1.559288f, 1.443460f, 1.315432f, 1.264794f, 1.275827f, 1.246689f, 1.147952f, 1.067945f, 1.069330f, 1.093255f, 1.060696f, 0.991275f, 0.952308f, 0.947628f, 0.931450f, 0.896088f, 0.875184f, 0.877635f, 0.877306f, 0.862455f, 0.851114f, 0.858664f, 0.880945f, 0.907411f, 0.929244f, 0.938406f, 0.935115f, 0.932668f, 0.945105f, 0.975372f, 1.020051f, 1.076159f, 1.138482f, 1.199314f, 1.255133f, 1.306848f, 1.352586f, 1.387511f, 1.411062f, 1.428044f, 1.442949f, 1.457837f, 1.473867f, 1.490422f, 1.504141f, 1.511326f, 1.509565f, 1.496836f, 1.472407f, 1.438435f, 1.397187f, 1.347911f, 1.289991f, 1.226763f, 1.162058f, 1.095742f, 1.026740f, 0.957251f, 0.889862f, 0.823884f, 0.758601f, 0.697267f, 0.644668f, 0.603523f, 0.575533f, 0.562861f, 0.566399f, 0.584922f, 0.616971f, 0.661507f, 0.716950f, 0.782071f, 0.857272f, 0.942702f, 1.036381f, 1.136549f, 1.244199f, 1.360630f, 1.484022f, 1.610883f, 1.739254f, 1.867675f, 1.991785f, 2.104459f, 2.199314f, 2.272351f, 2.319839f, 2.336536f, - 2.318055f, 2.264616f, 2.180165f, 2.067426f, 1.926830f, 1.761394f, 1.578694f, 1.385256f, 1.182714f, 0.972923f, 0.762994f, 0.560921f, 0.369676f, 0.190476f, 0.028730f, -0.108777f, -0.220619f, -0.309841f, -0.378087f, -0.425236f, -0.453644f, -0.468415f, -0.473457f, -0.470028f, -0.459061f, -0.442865f, -0.424328f, -0.405395f, -0.386539f, -0.367682f, -0.349391f, -0.332184f, -0.314542f, -0.293369f, -0.267138f, -0.236981f, -0.204194f, -0.168837f, -0.131697f, -0.095649f, -0.064007f, -0.038874f, -0.021740f, -0.014608f, -0.020128f, -0.040959f, -0.078587f, -0.132851f, -0.203536f, -0.291705f, -0.397394f, -0.516941f, -0.645343f, -0.780070f, -0.919041f, -1.056337f, -1.184558f, -1.300520f, -1.404186f, -1.493222f, -1.563734f, -1.615600f, -1.652081f, -1.674537f, -1.681849f, -1.674638f, -1.656140f, -1.629030f, -1.594189f, -1.552486f, -1.506033f, -1.457814f, -1.410294f, -1.363968f, -1.318341f, -1.274920f, -1.236490f, -1.202485f, -1.169363f, -1.136833f, -1.107851f, -1.080975f, -1.050211f, -1.014006f, -0.975256f, -0.930779f, -0.871463f, -0.793938f, -0.699614f, -0.581833f, -0.428980f, -0.240611f, -0.024812f, 0.217463f, 0.485342f, 0.758970f, - 1.009742f, 1.222711f, 1.383022f, 1.452948f, 1.397393f, 1.216786f, 0.913966f, 0.463363f, -0.102253f, -0.587837f, -0.741210f, -0.518203f, -0.161231f, 0.049607f, 0.061391f, 0.009945f, -0.002758f, 0.007110f, 0.002413f, -0.005996f, -0.001010f, 0.004903f, 0.000261f, -0.003925f, 0.000280f, 0.003284f, -0.000470f, -0.002645f, 0.000624f, 0.002115f, -0.000763f, -0.001772f, 0.000700f, 0.001304f, -0.000805f, -0.001090f, 0.000689f, 0.000741f, -0.000698f, -0.000535f, 0.000618f, 0.000330f, -0.000506f, -0.000092f, 0.000475f, 0.000007f, -0.000267f, 0.000243f} - }, - { - {1.090612f, 1.124607f, 1.168203f, 1.251890f, 1.418329f, 1.597546f, 1.655179f, 1.582145f, 1.504210f, 1.475289f, 1.403668f, 1.239120f, 1.093260f, 1.081569f, 1.155447f, 1.196594f, 1.194813f, 1.219751f, 1.274331f, 1.294266f, 1.269910f, 1.263313f, 1.300588f, 1.329007f, 1.297460f, 1.221672f, 1.152041f, 1.117220f, 1.113599f, 1.121528f, 1.121547f, 1.114494f, 1.129257f, 1.193632f, 1.297545f, 1.400895f, 1.475605f, 1.523950f, 1.558278f, 1.581891f, 1.594396f, 1.602121f, 1.615403f, 1.640470f, 1.677097f, 1.720927f, 1.766581f, 1.810296f, 1.849698f, 1.880635f, 1.896590f, 1.893026f, 1.870641f, 1.833225f, 1.784630f, 1.729383f, 1.673762f, 1.623245f, 1.579086f, 1.538579f, 1.497829f, 1.452657f, 1.397429f, 1.325606f, 1.233180f, 1.121272f, 0.995053f, 0.861250f, 0.727628f, 0.603189f, 0.495955f, 0.409941f, 0.345638f, 0.303340f, 0.284212f, 0.287909f, 0.311238f, 0.350209f, 0.402431f, 0.467015f, 0.543153f, 0.629394f, 0.723639f, 0.823272f, 0.925269f, 1.026136f, 1.122298f, 1.211920f, 1.296779f, 1.380918f, 1.466626f, 1.552846f, 1.637734f, 1.720181f, 1.796938f, 1.860399f, - 1.901996f, 1.916706f, 1.901778f, 1.852697f, 1.764610f, 1.638066f, 1.479859f, 1.297511f, 1.096512f, 0.884132f, 0.671480f, 0.468197f, 0.277415f, 0.098866f, -0.065566f, -0.213245f, -0.345768f, -0.467783f, -0.580825f, -0.682112f, -0.769567f, -0.844138f, -0.906188f, -0.953219f, -0.983275f, -0.998322f, -1.002195f, -0.996823f, -0.982433f, -0.960340f, -0.933166f, -0.902260f, -0.866678f, -0.825449f, -0.779784f, -0.732273f, -0.684647f, -0.637476f, -0.591811f, -0.549903f, -0.513900f, -0.484651f, -0.462485f, -0.448846f, -0.446501f, -0.458060f, -0.484778f, -0.527243f, -0.586726f, -0.664534f, -0.759541f, -0.867568f, -0.984007f, -1.105517f, -1.227820f, -1.343849f, -1.446666f, -1.533071f, -1.601920f, -1.650494f, -1.675782f, -1.678279f, -1.660970f, -1.625102f, -1.570297f, -1.498421f, -1.413974f, -1.320639f, -1.220302f, -1.115550f, -1.010636f, -0.909518f, -0.814469f, -0.726777f, -0.647886f, -0.579631f, -0.523222f, -0.477897f, -0.441703f, -0.414045f, -0.395476f, -0.384365f, -0.376980f, -0.371994f, -0.370648f, -0.371074f, -0.367650f, -0.357359f, -0.340112f, -0.311253f, -0.261890f, -0.188496f, -0.093373f, 0.024718f, 0.168335f, 0.328881f, - 0.489510f, 0.639645f, 0.770221f, 0.857680f, 0.874965f, 0.814834f, 0.675130f, 0.433231f, 0.090010f, -0.252149f, -0.424257f, -0.353241f, -0.152103f, -0.001328f, 0.031000f, 0.007695f, -0.002042f, 0.003578f, 0.002256f, -0.003204f, -0.001309f, 0.002742f, 0.000775f, -0.002211f, -0.000307f, 0.001911f, 0.000119f, -0.001567f, 0.000027f, 0.001244f, -0.000202f, -0.001092f, 0.000170f, 0.000778f, -0.000312f, -0.000692f, 0.000244f, 0.000463f, -0.000292f, -0.000352f, 0.000267f, 0.000241f, -0.000201f, -0.000080f, 0.000227f, 0.000070f, -0.000076f, 0.000114f}, - {0.917276f, 0.651543f, 0.241263f, -0.179200f, -0.536810f, -0.786529f, -0.861095f, -0.706896f, -0.361415f, 0.046576f, 0.387107f, 0.602460f, 0.691808f, 0.656249f, 0.487165f, 0.202283f, -0.131443f, -0.423124f, -0.603354f, -0.645005f, -0.551682f, -0.342497f, -0.055403f, 0.244110f, 0.476519f, 0.583184f, 0.550153f, 0.400664f, 0.174562f, -0.080033f, -0.307236f, -0.454647f, -0.492004f, -0.418390f, -0.256044f, -0.044660f, 0.162619f, 0.313362f, 0.377265f, 0.354834f, 0.266128f, 0.135954f, -0.009977f, -0.143596f, -0.238634f, -0.278506f, -0.259780f, -0.190547f, -0.088270f, 0.022745f, 0.117338f, 0.177563f, 0.197090f, 0.179340f, 0.132881f, 0.068619f, -0.001036f, -0.063710f, -0.109881f, -0.134545f, -0.136594f, -0.117710f, -0.082176f, -0.036408f, 0.012762f, 0.059536f, 0.098989f, 0.126240f, 0.136203f, 0.123860f, 0.085609f, 0.022846f, -0.054001f, -0.125717f, -0.170830f, -0.174541f, -0.134647f, -0.062373f, 0.021510f, 0.094181f, 0.139095f, 0.150662f, 0.132927f, 0.094500f, 0.044027f, -0.011484f, -0.065806f, -0.111701f, -0.140080f, -0.141689f, -0.111311f, -0.052311f, 0.021787f, 0.090808f, 0.135451f, 0.144793f, - 0.119617f, 0.070364f, 0.011865f, -0.041957f, -0.081346f, -0.101583f, -0.102258f, -0.086016f, -0.057310f, -0.021283f, 0.016947f, 0.052401f, 0.080081f, 0.095197f, 0.093880f, 0.074223f, 0.037586f, -0.010223f, -0.059028f, -0.096507f, -0.111982f, -0.100221f, -0.063756f, -0.012589f, 0.039076f, 0.077825f, 0.095266f, 0.089753f, 0.065616f, 0.030843f, -0.005738f, -0.036776f, -0.057529f, -0.065952f, -0.062341f, -0.048736f, -0.028162f, -0.004067f, 0.019866f, 0.039922f, 0.052856f, 0.056438f, 0.049836f, 0.033935f, 0.011469f, -0.013398f, -0.035916f, -0.051598f, -0.057074f, -0.050971f, -0.034395f, -0.010676f, 0.015312f, 0.037984f, 0.052292f, 0.055175f, 0.046354f, 0.028123f, 0.004662f, -0.018844f, -0.037452f, -0.047700f, -0.048091f, -0.039003f, -0.022561f, -0.002299f, 0.017721f, 0.033814f, 0.043099f, 0.043847f, 0.035955f, 0.020985f, 0.001707f, -0.018215f, -0.034574f, -0.043678f, -0.043517f, -0.034017f, -0.016874f, 0.004283f, 0.024420f, 0.038946f, 0.045076f, 0.041570f, 0.028591f, 0.008573f, -0.013985f, -0.034323f, -0.048076f, -0.050638f, -0.038773f, -0.014129f, 0.016384f, 0.043822f, 0.059238f, 0.054834f, - 0.028889f, -0.009231f, -0.043019f, -0.058834f, -0.050365f, -0.018436f, 0.024349f, 0.051843f, 0.042557f, 0.005228f, -0.025317f, -0.025348f, -0.006082f, 0.006509f, 0.004601f, -0.000170f, 0.000455f, 0.002497f, 0.001552f, 0.000003f, 0.000353f, 0.000671f, -0.000593f, -0.001643f, -0.001255f, -0.000846f, -0.001219f, -0.001146f, -0.000127f, 0.000663f, 0.000752f, 0.000985f, 0.001528f, 0.001552f, 0.000946f, 0.000436f, 0.000126f, -0.000453f, -0.001159f, -0.001450f, -0.001371f, -0.001268f, -0.001021f, -0.000425f, 0.000257f, 0.000753f, 0.001163f, 0.001494f} - }, - { - {0.917276f, 0.651543f, 0.241263f, -0.179200f, -0.536810f, -0.786529f, -0.861095f, -0.706896f, -0.361415f, 0.046576f, 0.387107f, 0.602460f, 0.691808f, 0.656249f, 0.487165f, 0.202283f, -0.131443f, -0.423124f, -0.603354f, -0.645005f, -0.551682f, -0.342497f, -0.055403f, 0.244110f, 0.476519f, 0.583184f, 0.550153f, 0.400664f, 0.174562f, -0.080033f, -0.307236f, -0.454647f, -0.492004f, -0.418390f, -0.256044f, -0.044660f, 0.162619f, 0.313362f, 0.377265f, 0.354834f, 0.266128f, 0.135954f, -0.009977f, -0.143596f, -0.238634f, -0.278506f, -0.259780f, -0.190547f, -0.088270f, 0.022745f, 0.117338f, 0.177563f, 0.197090f, 0.179340f, 0.132881f, 0.068619f, -0.001036f, -0.063710f, -0.109881f, -0.134545f, -0.136594f, -0.117710f, -0.082176f, -0.036408f, 0.012762f, 0.059536f, 0.098989f, 0.126240f, 0.136203f, 0.123860f, 0.085609f, 0.022846f, -0.054001f, -0.125717f, -0.170830f, -0.174541f, -0.134647f, -0.062373f, 0.021510f, 0.094181f, 0.139095f, 0.150662f, 0.132927f, 0.094500f, 0.044027f, -0.011484f, -0.065806f, -0.111701f, -0.140080f, -0.141689f, -0.111311f, -0.052311f, 0.021787f, 0.090808f, 0.135451f, 0.144793f, - 0.119617f, 0.070364f, 0.011865f, -0.041957f, -0.081346f, -0.101583f, -0.102258f, -0.086016f, -0.057310f, -0.021283f, 0.016947f, 0.052401f, 0.080081f, 0.095197f, 0.093880f, 0.074223f, 0.037586f, -0.010223f, -0.059028f, -0.096507f, -0.111982f, -0.100221f, -0.063756f, -0.012589f, 0.039076f, 0.077825f, 0.095266f, 0.089753f, 0.065616f, 0.030843f, -0.005738f, -0.036776f, -0.057529f, -0.065952f, -0.062341f, -0.048736f, -0.028162f, -0.004067f, 0.019866f, 0.039922f, 0.052856f, 0.056438f, 0.049836f, 0.033935f, 0.011469f, -0.013398f, -0.035916f, -0.051598f, -0.057074f, -0.050971f, -0.034395f, -0.010676f, 0.015312f, 0.037984f, 0.052292f, 0.055175f, 0.046354f, 0.028123f, 0.004662f, -0.018844f, -0.037452f, -0.047700f, -0.048091f, -0.039003f, -0.022561f, -0.002299f, 0.017721f, 0.033814f, 0.043099f, 0.043847f, 0.035955f, 0.020985f, 0.001707f, -0.018215f, -0.034574f, -0.043678f, -0.043517f, -0.034017f, -0.016874f, 0.004283f, 0.024420f, 0.038946f, 0.045076f, 0.041570f, 0.028591f, 0.008573f, -0.013985f, -0.034323f, -0.048076f, -0.050638f, -0.038773f, -0.014129f, 0.016384f, 0.043822f, 0.059238f, 0.054834f, - 0.028889f, -0.009231f, -0.043019f, -0.058834f, -0.050365f, -0.018436f, 0.024349f, 0.051843f, 0.042557f, 0.005228f, -0.025317f, -0.025348f, -0.006082f, 0.006509f, 0.004601f, -0.000170f, 0.000455f, 0.002497f, 0.001552f, 0.000003f, 0.000353f, 0.000671f, -0.000593f, -0.001643f, -0.001255f, -0.000846f, -0.001219f, -0.001146f, -0.000127f, 0.000663f, 0.000752f, 0.000985f, 0.001528f, 0.001552f, 0.000946f, 0.000436f, 0.000126f, -0.000453f, -0.001159f, -0.001450f, -0.001371f, -0.001268f, -0.001021f, -0.000425f, 0.000257f, 0.000753f, 0.001163f, 0.001494f}, - {1.090612f, 1.124607f, 1.168203f, 1.251890f, 1.418329f, 1.597546f, 1.655179f, 1.582145f, 1.504210f, 1.475289f, 1.403668f, 1.239120f, 1.093260f, 1.081569f, 1.155447f, 1.196594f, 1.194813f, 1.219751f, 1.274331f, 1.294266f, 1.269910f, 1.263313f, 1.300588f, 1.329007f, 1.297460f, 1.221672f, 1.152041f, 1.117220f, 1.113599f, 1.121528f, 1.121547f, 1.114494f, 1.129257f, 1.193632f, 1.297545f, 1.400895f, 1.475605f, 1.523950f, 1.558278f, 1.581891f, 1.594396f, 1.602121f, 1.615403f, 1.640470f, 1.677097f, 1.720927f, 1.766581f, 1.810296f, 1.849698f, 1.880635f, 1.896590f, 1.893026f, 1.870641f, 1.833225f, 1.784630f, 1.729383f, 1.673762f, 1.623245f, 1.579086f, 1.538579f, 1.497829f, 1.452657f, 1.397429f, 1.325606f, 1.233180f, 1.121272f, 0.995053f, 0.861250f, 0.727628f, 0.603189f, 0.495955f, 0.409941f, 0.345638f, 0.303340f, 0.284212f, 0.287909f, 0.311238f, 0.350209f, 0.402431f, 0.467015f, 0.543153f, 0.629394f, 0.723639f, 0.823272f, 0.925269f, 1.026136f, 1.122298f, 1.211920f, 1.296779f, 1.380918f, 1.466626f, 1.552846f, 1.637734f, 1.720181f, 1.796938f, 1.860399f, - 1.901996f, 1.916706f, 1.901778f, 1.852697f, 1.764610f, 1.638066f, 1.479859f, 1.297511f, 1.096512f, 0.884132f, 0.671480f, 0.468197f, 0.277415f, 0.098866f, -0.065566f, -0.213245f, -0.345768f, -0.467783f, -0.580825f, -0.682112f, -0.769567f, -0.844138f, -0.906188f, -0.953219f, -0.983275f, -0.998322f, -1.002195f, -0.996823f, -0.982433f, -0.960340f, -0.933166f, -0.902260f, -0.866678f, -0.825449f, -0.779784f, -0.732273f, -0.684647f, -0.637476f, -0.591811f, -0.549903f, -0.513900f, -0.484651f, -0.462485f, -0.448846f, -0.446501f, -0.458060f, -0.484778f, -0.527243f, -0.586726f, -0.664534f, -0.759541f, -0.867568f, -0.984007f, -1.105517f, -1.227820f, -1.343849f, -1.446666f, -1.533071f, -1.601920f, -1.650494f, -1.675782f, -1.678279f, -1.660970f, -1.625102f, -1.570297f, -1.498421f, -1.413974f, -1.320639f, -1.220302f, -1.115550f, -1.010636f, -0.909518f, -0.814469f, -0.726777f, -0.647886f, -0.579631f, -0.523222f, -0.477897f, -0.441703f, -0.414045f, -0.395476f, -0.384365f, -0.376980f, -0.371994f, -0.370648f, -0.371074f, -0.367650f, -0.357359f, -0.340112f, -0.311253f, -0.261890f, -0.188496f, -0.093373f, 0.024718f, 0.168335f, 0.328881f, - 0.489510f, 0.639645f, 0.770221f, 0.857680f, 0.874965f, 0.814834f, 0.675130f, 0.433231f, 0.090010f, -0.252149f, -0.424257f, -0.353241f, -0.152103f, -0.001328f, 0.031000f, 0.007695f, -0.002042f, 0.003578f, 0.002256f, -0.003204f, -0.001309f, 0.002742f, 0.000775f, -0.002211f, -0.000307f, 0.001911f, 0.000119f, -0.001567f, 0.000027f, 0.001244f, -0.000202f, -0.001092f, 0.000170f, 0.000778f, -0.000312f, -0.000692f, 0.000244f, 0.000463f, -0.000292f, -0.000352f, 0.000267f, 0.000241f, -0.000201f, -0.000080f, 0.000227f, 0.000070f, -0.000076f, 0.000114f} - }, - { - {1.112397f, 1.111335f, 1.098541f, 1.066221f, 1.017869f, 0.956090f, 0.875304f, 0.794051f, 0.783469f, 0.912714f, 1.154418f, 1.390208f, 1.523919f, 1.546110f, 1.485727f, 1.366225f, 1.230008f, 1.138792f, 1.115300f, 1.133121f, 1.181544f, 1.281430f, 1.418100f, 1.522549f, 1.547535f, 1.511683f, 1.451956f, 1.387778f, 1.346726f, 1.365986f, 1.445028f, 1.543010f, 1.636980f, 1.737911f, 1.841344f, 1.911123f, 1.925970f, 1.902958f, 1.864891f, 1.818149f, 1.768283f, 1.725885f, 1.690633f, 1.652687f, 1.611399f, 1.574846f, 1.545035f, 1.519441f, 1.500076f, 1.487021f, 1.471806f, 1.449320f, 1.426872f, 1.411941f, 1.401090f, 1.388324f, 1.373527f, 1.356198f, 1.331235f, 1.296699f, 1.257813f, 1.219852f, 1.183552f, 1.148414f, 1.114230f, 1.078765f, 1.038071f, 0.988570f, 0.927224f, 0.852801f, 0.768254f, 0.678135f, 0.583726f, 0.485145f, 0.386694f, 0.294105f, 0.207911f, 0.125603f, 0.048642f, -0.018544f, -0.074526f, -0.120226f, -0.154508f, -0.175796f, -0.186470f, -0.191357f, -0.193244f, -0.192820f, -0.191313f, -0.190742f, -0.192655f, -0.197592f, -0.204686f, -0.211940f, -0.218191f, -0.223996f, - -0.229614f, -0.234043f, -0.237357f, -0.241595f, -0.247842f, -0.254765f, -0.261227f, -0.267732f, -0.274126f, -0.278339f, -0.278541f, -0.274550f, -0.266501f, -0.253999f, -0.237013f, -0.216199f, -0.192291f, -0.166066f, -0.138455f, -0.109952f, -0.080598f, -0.050885f, -0.021663f, 0.007056f, 0.036069f, 0.065697f, 0.095709f, 0.126372f, 0.158482f, 0.192519f, 0.228577f, 0.266713f, 0.306680f, 0.347771f, 0.389146f, 0.429545f, 0.466699f, 0.498178f, 0.522837f, 0.540306f, 0.549440f, 0.548884f, 0.538969f, 0.521289f, 0.496435f, 0.463906f, 0.424432f, 0.380495f, 0.333949f, 0.284714f, 0.232690f, 0.179455f, 0.126660f, 0.073750f, 0.018927f, -0.038141f, -0.096401f, -0.156100f, -0.219366f, -0.287580f, -0.359934f, -0.435593f, -0.515692f, -0.601760f, -0.693176f, -0.787894f, -0.885348f, -0.986812f, -1.092377f, -1.199339f, -1.304999f, -1.409414f, -1.512886f, -1.612037f, -1.701983f, -1.781517f, -1.851454f, -1.908356f, -1.945802f, -1.961831f, -1.958173f, -1.932021f, -1.876786f, -1.791263f, -1.678747f, -1.537128f, -1.360504f, -1.150068f, -0.911518f, -0.643518f, -0.342730f, -0.017884f, 0.315739f, 0.650088f, 0.975129f, 1.264156f, - 1.488607f, 1.636372f, 1.693967f, 1.630407f, 1.428523f, 1.107711f, 0.682977f, 0.150519f, -0.414826f, -0.794658f, -0.785457f, -0.443271f, -0.068780f, 0.093541f, 0.063908f, 0.005868f, -0.000970f, 0.007761f, 0.000201f, -0.006097f, 0.000758f, 0.004704f, -0.001139f, -0.003615f, 0.001333f, 0.002891f, -0.001274f, -0.002236f, 0.001223f, 0.001737f, -0.001161f, -0.001399f, 0.000983f, 0.001007f, -0.000943f, -0.000823f, 0.000756f, 0.000549f, -0.000686f, -0.000398f, 0.000560f, 0.000246f, -0.000432f, -0.000077f, 0.000374f, 0.000016f, -0.000200f, 0.000171f}, - {1.079532f, 0.998235f, 0.850285f, 0.632018f, 0.357346f, 0.123599f, 0.061032f, 0.193395f, 0.396567f, 0.503127f, 0.416351f, 0.150118f, -0.179415f, -0.415063f, -0.477564f, -0.429570f, -0.389527f, -0.407796f, -0.468131f, -0.564318f, -0.698134f, -0.821601f, -0.860464f, -0.802613f, -0.711179f, -0.646626f, -0.616838f, -0.600835f, -0.578635f, -0.531502f, -0.444474f, -0.319603f, -0.174456f, -0.029034f, 0.098083f, 0.192379f, 0.255844f, 0.309193f, 0.371530f, 0.443415f, 0.513712f, 0.573199f, 0.617309f, 0.645288f, 0.661423f, 0.670890f, 0.673012f, 0.663713f, 0.642750f, 0.612720f, 0.573583f, 0.523581f, 0.462385f, 0.389021f, 0.300903f, 0.198899f, 0.089326f, -0.021841f, -0.132388f, -0.239961f, -0.339980f, -0.429136f, -0.506573f, -0.570849f, -0.620035f, -0.654986f, -0.678245f, -0.689440f, -0.685055f, -0.662509f, -0.621947f, -0.565149f, -0.495302f, -0.416936f, -0.333854f, -0.247460f, -0.158080f, -0.067051f, 0.023100f, 0.109595f, 0.190031f, 0.262592f, 0.325631f, 0.377009f, 0.414640f, 0.437919f, 0.447796f, 0.445623f, 0.433020f, 0.412348f, 0.385712f, 0.353870f, 0.317429f, 0.278358f, 0.238872f, 0.199766f, - 0.161294f, 0.124650f, 0.091143f, 0.061005f, 0.034231f, 0.011511f, -0.006807f, -0.021643f, -0.034229f, -0.045190f, -0.055109f, -0.065027f, -0.075849f, -0.087949f, -0.101562f, -0.117035f, -0.134702f, -0.154843f, -0.177496f, -0.202093f, -0.227631f, -0.253106f, -0.277270f, -0.298322f, -0.314656f, -0.325557f, -0.330409f, -0.327905f, -0.316927f, -0.297427f, -0.269514f, -0.232668f, -0.186868f, -0.133498f, -0.074069f, -0.009081f, 0.060877f, 0.133983f, 0.208161f, 0.282088f, 0.354192f, 0.421685f, 0.481644f, 0.532174f, 0.571494f, 0.596761f, 0.604942f, 0.594297f, 0.564069f, 0.513440f, 0.442118f, 0.351723f, 0.245530f, 0.127080f, 0.000223f, -0.129716f, -0.256333f, -0.374029f, -0.478501f, -0.565544f, -0.631076f, -0.672761f, -0.690270f, -0.683689f, -0.653190f, -0.600488f, -0.528942f, -0.441782f, -0.341626f, -0.231834f, -0.116682f, 0.000025f, 0.115102f, 0.224739f, 0.324534f, 0.410755f, 0.480542f, 0.531232f, 0.560568f, 0.567324f, 0.551195f, 0.512675f, 0.453339f, 0.375548f, 0.282095f, 0.176868f, 0.064992f, -0.048667f, -0.159757f, -0.262283f, -0.348547f, -0.412313f, -0.449169f, -0.453477f, -0.420000f, -0.349978f, - -0.250616f, -0.128884f, 0.006377f, 0.136800f, 0.239873f, 0.302094f, 0.314297f, 0.258860f, 0.129198f, -0.029823f, -0.132433f, -0.129413f, -0.059728f, -0.002602f, 0.007785f, -0.003487f, -0.007105f, -0.003815f, -0.004401f, -0.007051f, -0.005952f, -0.003689f, -0.004348f, -0.005493f, -0.004189f, -0.002643f, -0.003012f, -0.003342f, -0.002058f, -0.000889f, -0.000982f, -0.000846f, 0.000322f, 0.001228f, 0.001317f, 0.001678f, 0.002649f, 0.003310f, 0.003474f, 0.003877f, 0.004575f, 0.004982f, 0.005126f, 0.005431f, 0.005798f, 0.005946f, 0.006011f, 0.006127f} - }, - { - {1.079532f, 0.998235f, 0.850285f, 0.632018f, 0.357346f, 0.123599f, 0.061032f, 0.193395f, 0.396567f, 0.503127f, 0.416351f, 0.150118f, -0.179415f, -0.415063f, -0.477564f, -0.429570f, -0.389527f, -0.407796f, -0.468131f, -0.564318f, -0.698134f, -0.821601f, -0.860464f, -0.802613f, -0.711179f, -0.646626f, -0.616838f, -0.600835f, -0.578635f, -0.531502f, -0.444474f, -0.319603f, -0.174456f, -0.029034f, 0.098083f, 0.192379f, 0.255844f, 0.309193f, 0.371530f, 0.443415f, 0.513712f, 0.573199f, 0.617309f, 0.645288f, 0.661423f, 0.670890f, 0.673012f, 0.663713f, 0.642750f, 0.612720f, 0.573583f, 0.523581f, 0.462385f, 0.389021f, 0.300903f, 0.198899f, 0.089326f, -0.021841f, -0.132388f, -0.239961f, -0.339980f, -0.429136f, -0.506573f, -0.570849f, -0.620035f, -0.654986f, -0.678245f, -0.689440f, -0.685055f, -0.662509f, -0.621947f, -0.565149f, -0.495302f, -0.416936f, -0.333854f, -0.247460f, -0.158080f, -0.067051f, 0.023100f, 0.109595f, 0.190031f, 0.262592f, 0.325631f, 0.377009f, 0.414640f, 0.437919f, 0.447796f, 0.445623f, 0.433020f, 0.412348f, 0.385712f, 0.353870f, 0.317429f, 0.278358f, 0.238872f, 0.199766f, - 0.161294f, 0.124650f, 0.091143f, 0.061005f, 0.034231f, 0.011511f, -0.006807f, -0.021643f, -0.034229f, -0.045190f, -0.055109f, -0.065027f, -0.075849f, -0.087949f, -0.101562f, -0.117035f, -0.134702f, -0.154843f, -0.177496f, -0.202093f, -0.227631f, -0.253106f, -0.277270f, -0.298322f, -0.314656f, -0.325557f, -0.330409f, -0.327905f, -0.316927f, -0.297427f, -0.269514f, -0.232668f, -0.186868f, -0.133498f, -0.074069f, -0.009081f, 0.060877f, 0.133983f, 0.208161f, 0.282088f, 0.354192f, 0.421685f, 0.481644f, 0.532174f, 0.571494f, 0.596761f, 0.604942f, 0.594297f, 0.564069f, 0.513440f, 0.442118f, 0.351723f, 0.245530f, 0.127080f, 0.000223f, -0.129716f, -0.256333f, -0.374029f, -0.478501f, -0.565544f, -0.631076f, -0.672761f, -0.690270f, -0.683689f, -0.653190f, -0.600488f, -0.528942f, -0.441782f, -0.341626f, -0.231834f, -0.116682f, 0.000025f, 0.115102f, 0.224739f, 0.324534f, 0.410755f, 0.480542f, 0.531232f, 0.560568f, 0.567324f, 0.551195f, 0.512675f, 0.453339f, 0.375548f, 0.282095f, 0.176868f, 0.064992f, -0.048667f, -0.159757f, -0.262283f, -0.348547f, -0.412313f, -0.449169f, -0.453477f, -0.420000f, -0.349978f, - -0.250616f, -0.128884f, 0.006377f, 0.136800f, 0.239873f, 0.302094f, 0.314297f, 0.258860f, 0.129198f, -0.029823f, -0.132433f, -0.129413f, -0.059728f, -0.002602f, 0.007785f, -0.003487f, -0.007105f, -0.003815f, -0.004401f, -0.007051f, -0.005952f, -0.003689f, -0.004348f, -0.005493f, -0.004189f, -0.002643f, -0.003012f, -0.003342f, -0.002058f, -0.000889f, -0.000982f, -0.000846f, 0.000322f, 0.001228f, 0.001317f, 0.001678f, 0.002649f, 0.003310f, 0.003474f, 0.003877f, 0.004575f, 0.004982f, 0.005126f, 0.005431f, 0.005798f, 0.005946f, 0.006011f, 0.006127f}, - {1.112397f, 1.111335f, 1.098541f, 1.066221f, 1.017869f, 0.956090f, 0.875304f, 0.794051f, 0.783469f, 0.912714f, 1.154418f, 1.390208f, 1.523919f, 1.546110f, 1.485727f, 1.366225f, 1.230008f, 1.138792f, 1.115300f, 1.133121f, 1.181544f, 1.281430f, 1.418100f, 1.522549f, 1.547535f, 1.511683f, 1.451956f, 1.387778f, 1.346726f, 1.365986f, 1.445028f, 1.543010f, 1.636980f, 1.737911f, 1.841344f, 1.911123f, 1.925970f, 1.902958f, 1.864891f, 1.818149f, 1.768283f, 1.725885f, 1.690633f, 1.652687f, 1.611399f, 1.574846f, 1.545035f, 1.519441f, 1.500076f, 1.487021f, 1.471806f, 1.449320f, 1.426872f, 1.411941f, 1.401090f, 1.388324f, 1.373527f, 1.356198f, 1.331235f, 1.296699f, 1.257813f, 1.219852f, 1.183552f, 1.148414f, 1.114230f, 1.078765f, 1.038071f, 0.988570f, 0.927224f, 0.852801f, 0.768254f, 0.678135f, 0.583726f, 0.485145f, 0.386694f, 0.294105f, 0.207911f, 0.125603f, 0.048642f, -0.018544f, -0.074526f, -0.120226f, -0.154508f, -0.175796f, -0.186470f, -0.191357f, -0.193244f, -0.192820f, -0.191313f, -0.190742f, -0.192655f, -0.197592f, -0.204686f, -0.211940f, -0.218191f, -0.223996f, - -0.229614f, -0.234043f, -0.237357f, -0.241595f, -0.247842f, -0.254765f, -0.261227f, -0.267732f, -0.274126f, -0.278339f, -0.278541f, -0.274550f, -0.266501f, -0.253999f, -0.237013f, -0.216199f, -0.192291f, -0.166066f, -0.138455f, -0.109952f, -0.080598f, -0.050885f, -0.021663f, 0.007056f, 0.036069f, 0.065697f, 0.095709f, 0.126372f, 0.158482f, 0.192519f, 0.228577f, 0.266713f, 0.306680f, 0.347771f, 0.389146f, 0.429545f, 0.466699f, 0.498178f, 0.522837f, 0.540306f, 0.549440f, 0.548884f, 0.538969f, 0.521289f, 0.496435f, 0.463906f, 0.424432f, 0.380495f, 0.333949f, 0.284714f, 0.232690f, 0.179455f, 0.126660f, 0.073750f, 0.018927f, -0.038141f, -0.096401f, -0.156100f, -0.219366f, -0.287580f, -0.359934f, -0.435593f, -0.515692f, -0.601760f, -0.693176f, -0.787894f, -0.885348f, -0.986812f, -1.092377f, -1.199339f, -1.304999f, -1.409414f, -1.512886f, -1.612037f, -1.701983f, -1.781517f, -1.851454f, -1.908356f, -1.945802f, -1.961831f, -1.958173f, -1.932021f, -1.876786f, -1.791263f, -1.678747f, -1.537128f, -1.360504f, -1.150068f, -0.911518f, -0.643518f, -0.342730f, -0.017884f, 0.315739f, 0.650088f, 0.975129f, 1.264156f, - 1.488607f, 1.636372f, 1.693967f, 1.630407f, 1.428523f, 1.107711f, 0.682977f, 0.150519f, -0.414826f, -0.794658f, -0.785457f, -0.443271f, -0.068780f, 0.093541f, 0.063908f, 0.005868f, -0.000970f, 0.007761f, 0.000201f, -0.006097f, 0.000758f, 0.004704f, -0.001139f, -0.003615f, 0.001333f, 0.002891f, -0.001274f, -0.002236f, 0.001223f, 0.001737f, -0.001161f, -0.001399f, 0.000983f, 0.001007f, -0.000943f, -0.000823f, 0.000756f, 0.000549f, -0.000686f, -0.000398f, 0.000560f, 0.000246f, -0.000432f, -0.000077f, 0.000374f, 0.000016f, -0.000200f, 0.000171f} - }, - { - {1.075228f, 1.074217f, 1.098140f, 1.181350f, 1.301845f, 1.357285f, 1.275591f, 1.128376f, 1.051750f, 1.070717f, 1.096449f, 1.090338f, 1.120506f, 1.232710f, 1.365528f, 1.439321f, 1.453889f, 1.448913f, 1.426184f, 1.363771f, 1.270441f, 1.179270f, 1.105288f, 1.040796f, 0.980197f, 0.926868f, 0.882359f, 0.842806f, 0.803055f, 0.760151f, 0.717484f, 0.684947f, 0.668443f, 0.661086f, 0.651027f, 0.635243f, 0.620475f, 0.614727f, 0.622795f, 0.645718f, 0.679665f, 0.718175f, 0.758038f, 0.800110f, 0.844051f, 0.886529f, 0.924692f, 0.957013f, 0.980790f, 0.992993f, 0.994090f, 0.988656f, 0.982771f, 0.982211f, 0.991140f, 1.010513f, 1.038521f, 1.072547f, 1.108778f, 1.140961f, 1.163036f, 1.172913f, 1.171176f, 1.157532f, 1.131991f, 1.098142f, 1.061279f, 1.023708f, 0.984783f, 0.944459f, 0.903598f, 0.861374f, 0.815358f, 0.764360f, 0.709449f, 0.652291f, 0.594010f, 0.536028f, 0.481101f, 0.432577f, 0.392126f, 0.358508f, 0.329185f, 0.302679f, 0.278373f, 0.255008f, 0.231647f, 0.210110f, 0.194471f, 0.187914f, 0.191535f, 0.205810f, 0.231239f, 0.267417f, 0.313051f, 0.367052f, - 0.428780f, 0.497528f, 0.572254f, 0.650956f, 0.729921f, 0.804741f, 0.872337f, 0.930763f, 0.977405f, 1.009536f, 1.026754f, 1.030560f, 1.021257f, 0.997590f, 0.959821f, 0.910708f, 0.852633f, 0.785962f, 0.711354f, 0.631836f, 0.551033f, 0.470413f, 0.389791f, 0.309952f, 0.232974f, 0.159655f, 0.088252f, 0.016873f, -0.054104f, -0.123545f, -0.192358f, -0.262428f, -0.333151f, -0.401582f, -0.466079f, -0.527128f, -0.584149f, -0.634249f, -0.675298f, -0.707980f, -0.733621f, -0.751956f, -0.762482f, -0.766603f, -0.766968f, -0.765342f, -0.762185f, -0.758077f, -0.754691f, -0.753935f, -0.756401f, -0.761422f, -0.768926f, -0.780180f, -0.795912f, -0.814860f, -0.835536f, -0.858323f, -0.884145f, -0.912038f, -0.940032f, -0.967764f, -0.996212f, -1.025203f, -1.053082f, -1.078812f, -1.102840f, -1.125506f, -1.145684f, -1.161599f, -1.172538f, -1.178913f, -1.180387f, -1.174972f, -1.161052f, -1.139243f, -1.110357f, -1.072659f, -1.023765f, -0.964129f, -0.895301f, -0.815955f, -0.723787f, -0.620170f, -0.508278f, -0.387981f, -0.257793f, -0.120228f, 0.020407f, 0.163291f, 0.307901f, 0.448205f, 0.576448f, 0.689077f, 0.782089f, 0.845678f, - 0.871365f, 0.858316f, 0.804990f, 0.704160f, 0.556014f, 0.373959f, 0.167059f, -0.061388f, -0.274981f, -0.389171f, -0.341539f, -0.176854f, -0.021227f, 0.039404f, 0.025278f, 0.002978f, 0.000409f, 0.002891f, -0.000311f, -0.002218f, 0.000555f, 0.001691f, -0.000622f, -0.001274f, 0.000673f, 0.001036f, -0.000604f, -0.000793f, 0.000565f, 0.000609f, -0.000540f, -0.000507f, 0.000441f, 0.000341f, -0.000443f, -0.000297f, 0.000346f, 0.000177f, -0.000328f, -0.000127f, 0.000272f, 0.000068f, -0.000213f, 0.000010f, 0.000202f, -0.000020f, -0.000110f, 0.000118f}, - {0.960164f, 0.815843f, 0.531669f, 0.162241f, -0.177975f, -0.386498f, -0.458945f, -0.483857f, -0.540697f, -0.614327f, -0.622418f, -0.516530f, -0.334536f, -0.152125f, -0.004747f, 0.127804f, 0.271853f, 0.415700f, 0.517397f, 0.544153f, 0.497988f, 0.408320f, 0.305313f, 0.199510f, 0.083932f, -0.046923f, -0.183178f, -0.304770f, -0.395308f, -0.446238f, -0.451453f, -0.406776f, -0.317346f, -0.200175f, -0.075711f, 0.041366f, 0.142528f, 0.221292f, 0.272837f, 0.296528f, 0.295977f, 0.276382f, 0.242550f, 0.198393f, 0.146578f, 0.088571f, 0.025674f, -0.040051f, -0.105991f, -0.169238f, -0.225788f, -0.269676f, -0.293768f, -0.292136f, -0.262445f, -0.206810f, -0.130729f, -0.041117f, 0.054787f, 0.149042f, 0.232461f, 0.295490f, 0.330311f, 0.332628f, 0.302198f, 0.242289f, 0.158692f, 0.058771f, -0.048931f, -0.154433f, -0.246059f, -0.311363f, -0.339768f, -0.325985f, -0.272328f, -0.188549f, -0.089389f, 0.009037f, 0.093008f, 0.154155f, 0.190458f, 0.204754f, 0.201895f, 0.186430f, 0.161684f, 0.129742f, 0.091813f, 0.048922f, 0.002809f, -0.043495f, -0.085773f, -0.119474f, -0.141000f, -0.148803f, -0.143583f, -0.127578f, - -0.103627f, -0.074551f, -0.042812f, -0.010339f, 0.021376f, 0.050997f, 0.077158f, 0.098471f, 0.113527f, 0.120939f, 0.119561f, 0.108808f, 0.088872f, 0.060853f, 0.026832f, -0.010246f, -0.046936f, -0.079690f, -0.105211f, -0.120885f, -0.125248f, -0.118175f, -0.100717f, -0.074832f, -0.043111f, -0.008423f, 0.026401f, 0.058658f, 0.085759f, 0.105330f, 0.115404f, 0.114607f, 0.102460f, 0.079827f, 0.049121f, 0.014021f, -0.021124f, -0.052008f, -0.075132f, -0.088436f, -0.091490f, -0.085272f, -0.071781f, -0.053587f, -0.033279f, -0.013025f, 0.005554f, 0.021381f, 0.033930f, 0.043117f, 0.049029f, 0.051772f, 0.051505f, 0.048423f, 0.042645f, 0.034289f, 0.023665f, 0.011301f, -0.002140f, -0.015816f, -0.028671f, -0.039612f, -0.047707f, -0.052177f, -0.052427f, -0.048237f, -0.039850f, -0.027849f, -0.013136f, 0.003001f, 0.019065f, 0.033635f, 0.045427f, 0.053308f, 0.056554f, 0.054950f, 0.048521f, 0.037482f, 0.022572f, 0.005028f, -0.013904f, -0.032933f, -0.050205f, -0.063494f, -0.070939f, -0.070952f, -0.061845f, -0.042817f, -0.015369f, 0.017025f, 0.049963f, 0.077740f, 0.093374f, 0.091532f, 0.071535f, 0.036751f, - -0.006902f, -0.049951f, -0.080077f, -0.088199f, -0.073181f, -0.039187f, 0.006496f, 0.048670f, 0.065160f, 0.045077f, 0.005480f, -0.021584f, -0.021385f, -0.007456f, 0.000767f, 0.000082f, -0.001293f, 0.000161f, 0.001281f, 0.000763f, 0.000790f, 0.001871f, 0.002246f, 0.001673f, 0.001523f, 0.001855f, 0.001581f, 0.000775f, 0.000337f, 0.000178f, -0.000363f, -0.001094f, -0.001446f, -0.001566f, -0.001845f, -0.002088f, -0.001986f, -0.001712f, -0.001491f, -0.001185f, -0.000679f, -0.000134f, 0.000334f, 0.000795f, 0.001259f, 0.001626f, 0.001858f, 0.001978f} - }, - { - {0.960164f, 0.815843f, 0.531669f, 0.162241f, -0.177975f, -0.386498f, -0.458945f, -0.483857f, -0.540697f, -0.614327f, -0.622418f, -0.516530f, -0.334536f, -0.152125f, -0.004747f, 0.127804f, 0.271853f, 0.415700f, 0.517397f, 0.544153f, 0.497988f, 0.408320f, 0.305313f, 0.199510f, 0.083932f, -0.046923f, -0.183178f, -0.304770f, -0.395308f, -0.446238f, -0.451453f, -0.406776f, -0.317346f, -0.200175f, -0.075711f, 0.041366f, 0.142528f, 0.221292f, 0.272837f, 0.296528f, 0.295977f, 0.276382f, 0.242550f, 0.198393f, 0.146578f, 0.088571f, 0.025674f, -0.040051f, -0.105991f, -0.169238f, -0.225788f, -0.269676f, -0.293768f, -0.292136f, -0.262445f, -0.206810f, -0.130729f, -0.041117f, 0.054787f, 0.149042f, 0.232461f, 0.295490f, 0.330311f, 0.332628f, 0.302198f, 0.242289f, 0.158692f, 0.058771f, -0.048931f, -0.154433f, -0.246059f, -0.311363f, -0.339768f, -0.325985f, -0.272328f, -0.188549f, -0.089389f, 0.009037f, 0.093008f, 0.154155f, 0.190458f, 0.204754f, 0.201895f, 0.186430f, 0.161684f, 0.129742f, 0.091813f, 0.048922f, 0.002809f, -0.043495f, -0.085773f, -0.119474f, -0.141000f, -0.148803f, -0.143583f, -0.127578f, - -0.103627f, -0.074551f, -0.042812f, -0.010339f, 0.021376f, 0.050997f, 0.077158f, 0.098471f, 0.113527f, 0.120939f, 0.119561f, 0.108808f, 0.088872f, 0.060853f, 0.026832f, -0.010246f, -0.046936f, -0.079690f, -0.105211f, -0.120885f, -0.125248f, -0.118175f, -0.100717f, -0.074832f, -0.043111f, -0.008423f, 0.026401f, 0.058658f, 0.085759f, 0.105330f, 0.115404f, 0.114607f, 0.102460f, 0.079827f, 0.049121f, 0.014021f, -0.021124f, -0.052008f, -0.075132f, -0.088436f, -0.091490f, -0.085272f, -0.071781f, -0.053587f, -0.033279f, -0.013025f, 0.005554f, 0.021381f, 0.033930f, 0.043117f, 0.049029f, 0.051772f, 0.051505f, 0.048423f, 0.042645f, 0.034289f, 0.023665f, 0.011301f, -0.002140f, -0.015816f, -0.028671f, -0.039612f, -0.047707f, -0.052177f, -0.052427f, -0.048237f, -0.039850f, -0.027849f, -0.013136f, 0.003001f, 0.019065f, 0.033635f, 0.045427f, 0.053308f, 0.056554f, 0.054950f, 0.048521f, 0.037482f, 0.022572f, 0.005028f, -0.013904f, -0.032933f, -0.050205f, -0.063494f, -0.070939f, -0.070952f, -0.061845f, -0.042817f, -0.015369f, 0.017025f, 0.049963f, 0.077740f, 0.093374f, 0.091532f, 0.071535f, 0.036751f, - -0.006902f, -0.049951f, -0.080077f, -0.088199f, -0.073181f, -0.039187f, 0.006496f, 0.048670f, 0.065160f, 0.045077f, 0.005480f, -0.021584f, -0.021385f, -0.007456f, 0.000767f, 0.000082f, -0.001293f, 0.000161f, 0.001281f, 0.000763f, 0.000790f, 0.001871f, 0.002246f, 0.001673f, 0.001523f, 0.001855f, 0.001581f, 0.000775f, 0.000337f, 0.000178f, -0.000363f, -0.001094f, -0.001446f, -0.001566f, -0.001845f, -0.002088f, -0.001986f, -0.001712f, -0.001491f, -0.001185f, -0.000679f, -0.000134f, 0.000334f, 0.000795f, 0.001259f, 0.001626f, 0.001858f, 0.001978f}, - {1.075228f, 1.074217f, 1.098140f, 1.181350f, 1.301845f, 1.357285f, 1.275591f, 1.128376f, 1.051750f, 1.070717f, 1.096449f, 1.090338f, 1.120506f, 1.232710f, 1.365528f, 1.439321f, 1.453889f, 1.448913f, 1.426184f, 1.363771f, 1.270441f, 1.179270f, 1.105288f, 1.040796f, 0.980197f, 0.926868f, 0.882359f, 0.842806f, 0.803055f, 0.760151f, 0.717484f, 0.684947f, 0.668443f, 0.661086f, 0.651027f, 0.635243f, 0.620475f, 0.614727f, 0.622795f, 0.645718f, 0.679665f, 0.718175f, 0.758038f, 0.800110f, 0.844051f, 0.886529f, 0.924692f, 0.957013f, 0.980790f, 0.992993f, 0.994090f, 0.988656f, 0.982771f, 0.982211f, 0.991140f, 1.010513f, 1.038521f, 1.072547f, 1.108778f, 1.140961f, 1.163036f, 1.172913f, 1.171176f, 1.157532f, 1.131991f, 1.098142f, 1.061279f, 1.023708f, 0.984783f, 0.944459f, 0.903598f, 0.861374f, 0.815358f, 0.764360f, 0.709449f, 0.652291f, 0.594010f, 0.536028f, 0.481101f, 0.432577f, 0.392126f, 0.358508f, 0.329185f, 0.302679f, 0.278373f, 0.255008f, 0.231647f, 0.210110f, 0.194471f, 0.187914f, 0.191535f, 0.205810f, 0.231239f, 0.267417f, 0.313051f, 0.367052f, - 0.428780f, 0.497528f, 0.572254f, 0.650956f, 0.729921f, 0.804741f, 0.872337f, 0.930763f, 0.977405f, 1.009536f, 1.026754f, 1.030560f, 1.021257f, 0.997590f, 0.959821f, 0.910708f, 0.852633f, 0.785962f, 0.711354f, 0.631836f, 0.551033f, 0.470413f, 0.389791f, 0.309952f, 0.232974f, 0.159655f, 0.088252f, 0.016873f, -0.054104f, -0.123545f, -0.192358f, -0.262428f, -0.333151f, -0.401582f, -0.466079f, -0.527128f, -0.584149f, -0.634249f, -0.675298f, -0.707980f, -0.733621f, -0.751956f, -0.762482f, -0.766603f, -0.766968f, -0.765342f, -0.762185f, -0.758077f, -0.754691f, -0.753935f, -0.756401f, -0.761422f, -0.768926f, -0.780180f, -0.795912f, -0.814860f, -0.835536f, -0.858323f, -0.884145f, -0.912038f, -0.940032f, -0.967764f, -0.996212f, -1.025203f, -1.053082f, -1.078812f, -1.102840f, -1.125506f, -1.145684f, -1.161599f, -1.172538f, -1.178913f, -1.180387f, -1.174972f, -1.161052f, -1.139243f, -1.110357f, -1.072659f, -1.023765f, -0.964129f, -0.895301f, -0.815955f, -0.723787f, -0.620170f, -0.508278f, -0.387981f, -0.257793f, -0.120228f, 0.020407f, 0.163291f, 0.307901f, 0.448205f, 0.576448f, 0.689077f, 0.782089f, 0.845678f, - 0.871365f, 0.858316f, 0.804990f, 0.704160f, 0.556014f, 0.373959f, 0.167059f, -0.061388f, -0.274981f, -0.389171f, -0.341539f, -0.176854f, -0.021227f, 0.039404f, 0.025278f, 0.002978f, 0.000409f, 0.002891f, -0.000311f, -0.002218f, 0.000555f, 0.001691f, -0.000622f, -0.001274f, 0.000673f, 0.001036f, -0.000604f, -0.000793f, 0.000565f, 0.000609f, -0.000540f, -0.000507f, 0.000441f, 0.000341f, -0.000443f, -0.000297f, 0.000346f, 0.000177f, -0.000328f, -0.000127f, 0.000272f, 0.000068f, -0.000213f, 0.000010f, 0.000202f, -0.000020f, -0.000110f, 0.000118f} - }, - { - {1.021118f, 1.014910f, 1.036512f, 1.109450f, 1.204226f, 1.254141f, 1.223089f, 1.142720f, 1.068123f, 1.016578f, 0.975926f, 0.954919f, 0.983672f, 1.063545f, 1.153044f, 1.213027f, 1.237971f, 1.233999f, 1.196080f, 1.125290f, 1.047108f, 0.990282f, 0.956619f, 0.926662f, 0.887517f, 0.841653f, 0.794073f, 0.744757f, 0.693536f, 0.642684f, 0.592748f, 0.541229f, 0.486646f, 0.430740f, 0.376755f, 0.328893f, 0.293662f, 0.278018f, 0.283983f, 0.306520f, 0.338100f, 0.374086f, 0.412476f, 0.450359f, 0.483567f, 0.509814f, 0.530051f, 0.546442f, 0.560626f, 0.574155f, 0.588962f, 0.606627f, 0.627670f, 0.651329f, 0.675291f, 0.696162f, 0.711078f, 0.718475f, 0.717171f, 0.706200f, 0.686489f, 0.661160f, 0.632776f, 0.601270f, 0.565406f, 0.524818f, 0.479490f, 0.428872f, 0.373329f, 0.315884f, 0.261284f, 0.213734f, 0.176015f, 0.149705f, 0.134833f, 0.129330f, 0.129603f, 0.132071f, 0.134448f, 0.136068f, 0.137347f, 0.139019f, 0.141860f, 0.146786f, 0.154663f, 0.165925f, 0.180699f, 0.199281f, 0.222198f, 0.249879f, 0.282596f, 0.320651f, 0.364436f, 0.414340f, 0.470445f, 0.531869f, - 0.596501f, 0.661789f, 0.725419f, 0.784674f, 0.835991f, 0.876590f, 0.906270f, 0.926283f, 0.936909f, 0.937627f, 0.929116f, 0.912880f, 0.888746f, 0.854774f, 0.810155f, 0.756417f, 0.695219f, 0.626853f, 0.552031f, 0.473598f, 0.394918f, 0.317399f, 0.241080f, 0.167093f, 0.097815f, 0.034452f, -0.023969f, -0.078570f, -0.129051f, -0.175206f, -0.218772f, -0.262100f, -0.305551f, -0.347761f, -0.388005f, -0.426424f, -0.461940f, -0.491922f, -0.514586f, -0.530358f, -0.540303f, -0.544523f, -0.542936f, -0.536632f, -0.527481f, -0.516766f, -0.504935f, -0.492597f, -0.481194f, -0.472371f, -0.466907f, -0.464739f, -0.466171f, -0.472327f, -0.483927f, -0.500294f, -0.520400f, -0.544289f, -0.572382f, -0.603846f, -0.636952f, -0.670869f, -0.705849f, -0.741580f, -0.776574f, -0.809529f, -0.840302f, -0.868901f, -0.894171f, -0.914324f, -0.928590f, -0.937355f, -0.940432f, -0.936302f, -0.923833f, -0.903621f, -0.876334f, -0.840853f, -0.795869f, -0.742277f, -0.681702f, -0.613656f, -0.536857f, -0.452385f, -0.362495f, -0.267339f, -0.166250f, -0.061247f, 0.044313f, 0.149203f, 0.252532f, 0.350093f, 0.436582f, 0.509400f, 0.566085f, 0.600989f, - 0.609355f, 0.591229f, 0.546669f, 0.472573f, 0.370152f, 0.248355f, 0.113420f, -0.032320f, -0.167420f, -0.241605f, -0.216790f, -0.118416f, -0.021888f, 0.019213f, 0.014252f, 0.002063f, 0.000356f, 0.001651f, -0.000178f, -0.001272f, 0.000312f, 0.000978f, -0.000340f, -0.000724f, 0.000386f, 0.000598f, -0.000340f, -0.000457f, 0.000315f, 0.000344f, -0.000311f, -0.000299f, 0.000239f, 0.000188f, -0.000255f, -0.000177f, 0.000187f, 0.000099f, -0.000183f, -0.000075f, 0.000150f, 0.000044f, -0.000112f, 0.000008f, 0.000116f, 0.000000f, -0.000050f, 0.000071f}, - {0.932869f, 0.856258f, 0.680407f, 0.416625f, 0.148250f, -0.023842f, -0.087329f, -0.134616f, -0.244970f, -0.385661f, -0.472057f, -0.492517f, -0.512116f, -0.566410f, -0.616657f, -0.615445f, -0.560005f, -0.465857f, -0.336299f, -0.181373f, -0.031918f, 0.089726f, 0.191616f, 0.288900f, 0.377689f, 0.445599f, 0.491647f, 0.521680f, 0.534170f, 0.520833f, 0.475573f, 0.398359f, 0.296291f, 0.183195f, 0.072397f, -0.031357f, -0.128599f, -0.215418f, -0.282840f, -0.325105f, -0.343724f, -0.344232f, -0.333025f, -0.316310f, -0.298291f, -0.280189f, -0.262083f, -0.243767f, -0.222388f, -0.191534f, -0.144792f, -0.079668f, 0.001605f, 0.092568f, 0.183421f, 0.264250f, 0.329320f, 0.377813f, 0.410523f, 0.426997f, 0.425395f, 0.403296f, 0.358510f, 0.290739f, 0.203333f, 0.103082f, -0.001851f, -0.103927f, -0.197351f, -0.278599f, -0.345998f, -0.398008f, -0.431539f, -0.442137f, -0.426030f, -0.382422f, -0.314691f, -0.230120f, -0.138182f, -0.047827f, 0.034784f, 0.106607f, 0.166405f, 0.213658f, 0.248572f, 0.272118f, 0.285359f, 0.288978f, 0.283693f, 0.270537f, 0.250312f, 0.223174f, 0.189058f, 0.147974f, 0.099746f, 0.044338f, - -0.016931f, -0.080937f, -0.143711f, -0.201320f, -0.249848f, -0.285671f, -0.306377f, -0.311000f, -0.299308f, -0.271640f, -0.229566f, -0.175890f, -0.113809f, -0.046630f, 0.021800f, 0.087296f, 0.146188f, 0.195525f, 0.232719f, 0.255849f, 0.264337f, 0.258789f, 0.240297f, 0.210412f, 0.171477f, 0.126248f, 0.077212f, 0.026681f, -0.022772f, -0.068516f, -0.108321f, -0.140285f, -0.162670f, -0.174396f, -0.175576f, -0.167308f, -0.151206f, -0.129367f, -0.104330f, -0.078497f, -0.053556f, -0.030522f, -0.009982f, 0.007997f, 0.023907f, 0.038407f, 0.051943f, 0.064781f, 0.077079f, 0.088652f, 0.098819f, 0.106630f, 0.111137f, 0.111402f, 0.106532f, 0.095979f, 0.079769f, 0.058428f, 0.032870f, 0.004435f, -0.025130f, -0.053924f, -0.080127f, -0.102059f, -0.118226f, -0.127532f, -0.129459f, -0.124022f, -0.111628f, -0.093061f, -0.069546f, -0.042640f, -0.013957f, 0.014961f, 0.042540f, 0.067210f, 0.087700f, 0.103130f, 0.112745f, 0.115879f, 0.112351f, 0.102521f, 0.086750f, 0.065291f, 0.038932f, 0.009166f, -0.022462f, -0.054340f, -0.083825f, -0.107324f, -0.121750f, -0.124985f, -0.115062f, -0.090926f, -0.054663f, -0.011365f, - 0.033369f, 0.073724f, 0.102131f, 0.111537f, 0.100187f, 0.071073f, 0.027749f, -0.022644f, -0.062293f, -0.069966f, -0.043033f, -0.005541f, 0.014414f, 0.011811f, 0.002483f, -0.000779f, 0.000451f, 0.000500f, -0.000541f, -0.000273f, 0.000562f, 0.000328f, -0.000217f, 0.000101f, 0.000578f, 0.000346f, 0.000033f, 0.000279f, 0.000535f, 0.000325f, 0.000122f, 0.000275f, 0.000385f, 0.000200f, 0.000054f, 0.000128f, 0.000148f, -0.000006f, -0.000113f, -0.000089f, -0.000108f, -0.000221f, -0.000290f, -0.000280f, -0.000300f, -0.000368f, -0.000392f, -0.000365f} - }, - { - {0.932869f, 0.856258f, 0.680407f, 0.416625f, 0.148250f, -0.023842f, -0.087329f, -0.134616f, -0.244970f, -0.385661f, -0.472057f, -0.492517f, -0.512116f, -0.566410f, -0.616657f, -0.615445f, -0.560005f, -0.465857f, -0.336299f, -0.181373f, -0.031918f, 0.089726f, 0.191616f, 0.288900f, 0.377689f, 0.445599f, 0.491647f, 0.521680f, 0.534170f, 0.520833f, 0.475573f, 0.398359f, 0.296291f, 0.183195f, 0.072397f, -0.031357f, -0.128599f, -0.215418f, -0.282840f, -0.325105f, -0.343724f, -0.344232f, -0.333025f, -0.316310f, -0.298291f, -0.280189f, -0.262083f, -0.243767f, -0.222388f, -0.191534f, -0.144792f, -0.079668f, 0.001605f, 0.092568f, 0.183421f, 0.264250f, 0.329320f, 0.377813f, 0.410523f, 0.426997f, 0.425395f, 0.403296f, 0.358510f, 0.290739f, 0.203333f, 0.103082f, -0.001851f, -0.103927f, -0.197351f, -0.278599f, -0.345998f, -0.398008f, -0.431539f, -0.442137f, -0.426030f, -0.382422f, -0.314691f, -0.230120f, -0.138182f, -0.047827f, 0.034784f, 0.106607f, 0.166405f, 0.213658f, 0.248572f, 0.272118f, 0.285359f, 0.288978f, 0.283693f, 0.270537f, 0.250312f, 0.223174f, 0.189058f, 0.147974f, 0.099746f, 0.044338f, - -0.016931f, -0.080937f, -0.143711f, -0.201320f, -0.249848f, -0.285671f, -0.306377f, -0.311000f, -0.299308f, -0.271640f, -0.229566f, -0.175890f, -0.113809f, -0.046630f, 0.021800f, 0.087296f, 0.146188f, 0.195525f, 0.232719f, 0.255849f, 0.264337f, 0.258789f, 0.240297f, 0.210412f, 0.171477f, 0.126248f, 0.077212f, 0.026681f, -0.022772f, -0.068516f, -0.108321f, -0.140285f, -0.162670f, -0.174396f, -0.175576f, -0.167308f, -0.151206f, -0.129367f, -0.104330f, -0.078497f, -0.053556f, -0.030522f, -0.009982f, 0.007997f, 0.023907f, 0.038407f, 0.051943f, 0.064781f, 0.077079f, 0.088652f, 0.098819f, 0.106630f, 0.111137f, 0.111402f, 0.106532f, 0.095979f, 0.079769f, 0.058428f, 0.032870f, 0.004435f, -0.025130f, -0.053924f, -0.080127f, -0.102059f, -0.118226f, -0.127532f, -0.129459f, -0.124022f, -0.111628f, -0.093061f, -0.069546f, -0.042640f, -0.013957f, 0.014961f, 0.042540f, 0.067210f, 0.087700f, 0.103130f, 0.112745f, 0.115879f, 0.112351f, 0.102521f, 0.086750f, 0.065291f, 0.038932f, 0.009166f, -0.022462f, -0.054340f, -0.083825f, -0.107324f, -0.121750f, -0.124985f, -0.115062f, -0.090926f, -0.054663f, -0.011365f, - 0.033369f, 0.073724f, 0.102131f, 0.111537f, 0.100187f, 0.071073f, 0.027749f, -0.022644f, -0.062293f, -0.069966f, -0.043033f, -0.005541f, 0.014414f, 0.011811f, 0.002483f, -0.000779f, 0.000451f, 0.000500f, -0.000541f, -0.000273f, 0.000562f, 0.000328f, -0.000217f, 0.000101f, 0.000578f, 0.000346f, 0.000033f, 0.000279f, 0.000535f, 0.000325f, 0.000122f, 0.000275f, 0.000385f, 0.000200f, 0.000054f, 0.000128f, 0.000148f, -0.000006f, -0.000113f, -0.000089f, -0.000108f, -0.000221f, -0.000290f, -0.000280f, -0.000300f, -0.000368f, -0.000392f, -0.000365f}, - {1.021118f, 1.014910f, 1.036512f, 1.109450f, 1.204226f, 1.254141f, 1.223089f, 1.142720f, 1.068123f, 1.016578f, 0.975926f, 0.954919f, 0.983672f, 1.063545f, 1.153044f, 1.213027f, 1.237971f, 1.233999f, 1.196080f, 1.125290f, 1.047108f, 0.990282f, 0.956619f, 0.926662f, 0.887517f, 0.841653f, 0.794073f, 0.744757f, 0.693536f, 0.642684f, 0.592748f, 0.541229f, 0.486646f, 0.430740f, 0.376755f, 0.328893f, 0.293662f, 0.278018f, 0.283983f, 0.306520f, 0.338100f, 0.374086f, 0.412476f, 0.450359f, 0.483567f, 0.509814f, 0.530051f, 0.546442f, 0.560626f, 0.574155f, 0.588962f, 0.606627f, 0.627670f, 0.651329f, 0.675291f, 0.696162f, 0.711078f, 0.718475f, 0.717171f, 0.706200f, 0.686489f, 0.661160f, 0.632776f, 0.601270f, 0.565406f, 0.524818f, 0.479490f, 0.428872f, 0.373329f, 0.315884f, 0.261284f, 0.213734f, 0.176015f, 0.149705f, 0.134833f, 0.129330f, 0.129603f, 0.132071f, 0.134448f, 0.136068f, 0.137347f, 0.139019f, 0.141860f, 0.146786f, 0.154663f, 0.165925f, 0.180699f, 0.199281f, 0.222198f, 0.249879f, 0.282596f, 0.320651f, 0.364436f, 0.414340f, 0.470445f, 0.531869f, - 0.596501f, 0.661789f, 0.725419f, 0.784674f, 0.835991f, 0.876590f, 0.906270f, 0.926283f, 0.936909f, 0.937627f, 0.929116f, 0.912880f, 0.888746f, 0.854774f, 0.810155f, 0.756417f, 0.695219f, 0.626853f, 0.552031f, 0.473598f, 0.394918f, 0.317399f, 0.241080f, 0.167093f, 0.097815f, 0.034452f, -0.023969f, -0.078570f, -0.129051f, -0.175206f, -0.218772f, -0.262100f, -0.305551f, -0.347761f, -0.388005f, -0.426424f, -0.461940f, -0.491922f, -0.514586f, -0.530358f, -0.540303f, -0.544523f, -0.542936f, -0.536632f, -0.527481f, -0.516766f, -0.504935f, -0.492597f, -0.481194f, -0.472371f, -0.466907f, -0.464739f, -0.466171f, -0.472327f, -0.483927f, -0.500294f, -0.520400f, -0.544289f, -0.572382f, -0.603846f, -0.636952f, -0.670869f, -0.705849f, -0.741580f, -0.776574f, -0.809529f, -0.840302f, -0.868901f, -0.894171f, -0.914324f, -0.928590f, -0.937355f, -0.940432f, -0.936302f, -0.923833f, -0.903621f, -0.876334f, -0.840853f, -0.795869f, -0.742277f, -0.681702f, -0.613656f, -0.536857f, -0.452385f, -0.362495f, -0.267339f, -0.166250f, -0.061247f, 0.044313f, 0.149203f, 0.252532f, 0.350093f, 0.436582f, 0.509400f, 0.566085f, 0.600989f, - 0.609355f, 0.591229f, 0.546669f, 0.472573f, 0.370152f, 0.248355f, 0.113420f, -0.032320f, -0.167420f, -0.241605f, -0.216790f, -0.118416f, -0.021888f, 0.019213f, 0.014252f, 0.002063f, 0.000356f, 0.001651f, -0.000178f, -0.001272f, 0.000312f, 0.000978f, -0.000340f, -0.000724f, 0.000386f, 0.000598f, -0.000340f, -0.000457f, 0.000315f, 0.000344f, -0.000311f, -0.000299f, 0.000239f, 0.000188f, -0.000255f, -0.000177f, 0.000187f, 0.000099f, -0.000183f, -0.000075f, 0.000150f, 0.000044f, -0.000112f, 0.000008f, 0.000116f, 0.000000f, -0.000050f, 0.000071f} - } -}; -const float CRendBin_Combined_HRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][240]={ - { - {0.021740f, 0.062265f, 0.089497f, 0.079979f, 0.019873f, -0.044423f, -0.038634f, 0.014329f, -0.006309f, -0.113590f, -0.115115f, 0.141366f, 0.508608f, 0.696113f, 0.638660f, 0.530885f, 0.513220f, 0.511265f, 0.413104f, 0.233094f, 0.033856f, -0.178208f, -0.394112f, -0.532465f, -0.516289f, -0.373221f, -0.199312f, -0.054469f, 0.064669f, 0.175334f, 0.270929f, 0.322634f, 0.297348f, 0.180897f, -0.005107f, -0.214019f, -0.406250f, -0.568975f, -0.708995f, -0.834425f, -0.942413f, -1.020169f, -1.058870f, -1.066737f, -1.064744f, -1.070779f, -1.092413f, -1.130543f, -1.180471f, -1.230349f, -1.267218f, -1.286478f, -1.292217f, -1.290295f, -1.284789f, -1.278764f, -1.274804f, -1.275839f, -1.285956f, -1.307719f, -1.339100f, -1.376367f, -1.418521f, -1.464319f, -1.506155f, -1.531614f, -1.530826f, -1.499868f, -1.440010f, -1.357948f, -1.265010f, -1.172182f, -1.086077f, -1.010355f, -0.948076f, -0.900542f, -0.865729f, -0.839379f, -0.816783f, -0.793921f, -0.768744f, -0.741295f, -0.711733f, -0.679567f, -0.645630f, -0.612730f, -0.583124f, -0.557524f, -0.537573f, -0.526798f, -0.527799f, -0.540308f, -0.562652f, -0.593201f, -0.629808f, -0.669386f, - -0.708515f, -0.743933f, -0.773005f, -0.794365f, -0.807476f, -0.811721f, -0.807186f, -0.795749f, -0.779350f, -0.757689f, -0.729622f, -0.695999f, -0.658877f, -0.618992f, -0.576449f, -0.532906f, -0.490747f, -0.450976f, -0.413608f, -0.379004f, -0.347546f, -0.319332f, -0.295027f, -0.275613f, -0.261247f, -0.252274f, -0.250937f, -0.259815f, -0.279334f, -0.309493f, -0.353092f, -0.414158f, -0.493999f, -0.592040f, -0.709860f, -0.850917f, -1.016122f, -1.202501f, -1.406580f, -1.626368f, -1.858539f, -2.095454f, -2.327361f, -2.547430f, -2.752372f, -2.937831f, -3.096805f, -3.225146f, -3.325214f, -3.400274f, -3.448580f, -3.467955f, -3.462820f, -3.440091f, -3.400547f, -3.341377f, -3.265259f, -3.179036f, -3.084322f, -2.977173f, -2.856905f, -2.727864f, -2.591707f, -2.444451f, -2.282751f, -2.108111f, -1.922919f, -1.725836f, -1.513704f, -1.286797f, -1.049763f, -0.806612f, -0.557242f, -0.301864f, -0.046431f, 0.201936f, 0.443240f, 0.681014f, 0.912264f, 1.130667f, 1.338214f, 1.541861f, 1.739858f, 1.924684f, 2.097432f, 2.263703f, 2.417459f, 2.545568f, 2.644263f, 2.712279f, 2.733362f, 2.686342f, 2.565077f, 2.367465f, 2.078112f, 1.688067f, - 1.216823f, 0.689229f, 0.115322f, -0.475183f, -1.011572f, -1.432585f, -1.708631f, -1.762445f, -1.452538f, -0.765837f, 0.007791f, 0.454087f, 0.430600f, 0.177956f, 0.006027f, -0.013234f, 0.008162f, 0.000516f, -0.008800f, 0.001070f, 0.006785f, -0.001814f, -0.005338f, 0.001955f, 0.004159f, -0.001933f, -0.003203f, 0.001947f, 0.002621f, -0.001703f, -0.001961f, 0.001637f, 0.001565f, -0.001450f, -0.001190f, 0.001261f, 0.000818f, -0.001182f, -0.000645f, 0.000918f, 0.000295f, -0.000884f, -0.000203f, 0.000626f, -0.000076f, -0.000552f, 0.000190f, 0.000362f}, - {-0.080378f, -0.311517f, -0.607575f, -0.791939f, -0.801056f, -0.760728f, -0.739137f, -0.646344f, -0.447365f, -0.280582f, -0.279360f, -0.423325f, -0.622662f, -0.804319f, -0.867760f, -0.711139f, -0.374564f, -0.036973f, 0.187009f, 0.339438f, 0.474054f, 0.550709f, 0.537533f, 0.502849f, 0.524124f, 0.586937f, 0.644423f, 0.705382f, 0.790305f, 0.855034f, 0.834070f, 0.729675f, 0.593377f, 0.437006f, 0.224113f, -0.048481f, -0.312373f, -0.491566f, -0.576209f, -0.612643f, -0.640544f, -0.665031f, -0.680052f, -0.687657f, -0.686406f, -0.662500f, -0.605999f, -0.524271f, -0.429884f, -0.325685f, -0.210684f, -0.091141f, 0.023275f, 0.127676f, 0.220049f, 0.297836f, 0.361429f, 0.414922f, 0.459421f, 0.490535f, 0.503997f, 0.498318f, 0.471835f, 0.423949f, 0.360378f, 0.291632f, 0.225381f, 0.164098f, 0.109185f, 0.062781f, 0.025528f, -0.004197f, -0.028936f, -0.051742f, -0.076082f, -0.104578f, -0.138150f, -0.176078f, -0.215537f, -0.251862f, -0.281392f, -0.303940f, -0.321624f, -0.336474f, -0.349673f, -0.360447f, -0.363977f, -0.352405f, -0.319580f, -0.263976f, -0.187632f, -0.095277f, 0.004941f, 0.102546f, 0.187832f, 0.253454f, - 0.294802f, 0.311762f, 0.309781f, 0.297062f, 0.280794f, 0.266708f, 0.259989f, 0.264021f, 0.278984f, 0.303091f, 0.333931f, 0.367038f, 0.394275f, 0.405176f, 0.389668f, 0.339645f, 0.250213f, 0.121655f, -0.039539f, -0.222071f, -0.412200f, -0.595202f, -0.756231f, -0.881758f, -0.961227f, -0.987631f, -0.957056f, -0.868780f, -0.726460f, -0.538670f, -0.317638f, -0.077771f, 0.164807f, 0.393406f, 0.593707f, 0.755810f, 0.873499f, 0.943326f, 0.965432f, 0.943420f, 0.881696f, 0.783870f, 0.654305f, 0.499177f, 0.324930f, 0.137677f, -0.054836f, -0.242668f, -0.415940f, -0.565859f, -0.683493f, -0.760474f, -0.792077f, -0.778024f, -0.720589f, -0.624483f, -0.498476f, -0.354312f, -0.203363f, -0.055601f, 0.079448f, 0.193754f, 0.282950f, 0.345938f, 0.383039f, 0.396039f, 0.388837f, 0.366082f, 0.331570f, 0.288732f, 0.241345f, 0.192568f, 0.144151f, 0.097195f, 0.052704f, 0.011148f, -0.027394f, -0.062510f, -0.093642f, -0.120625f, -0.143214f, -0.160685f, -0.172569f, -0.178917f, -0.179375f, -0.173102f, -0.159797f, -0.139499f, -0.111633f, -0.075980f, -0.034252f, 0.010916f, 0.057404f, 0.101926f, 0.138613f, 0.161970f, - 0.169562f, 0.159632f, 0.129698f, 0.081381f, 0.023065f, -0.036010f, -0.088771f, -0.122396f, -0.117183f, -0.067536f, -0.000965f, 0.039915f, 0.038373f, 0.015920f, 0.001538f, 0.001251f, 0.003701f, 0.002572f, 0.001346f, 0.002248f, 0.002607f, 0.001294f, 0.000524f, 0.000987f, 0.000860f, -0.000262f, -0.000829f, -0.000606f, -0.000896f, -0.001788f, -0.002153f, -0.001988f, -0.002250f, -0.002848f, -0.002957f, -0.002725f, -0.002844f, -0.003107f, -0.002939f, -0.002590f, -0.002528f, -0.002470f, -0.002063f, -0.001626f, -0.001418f, -0.001114f, -0.000569f, -0.000134f} - }, - { - {-0.080378f, -0.311517f, -0.607575f, -0.791939f, -0.801056f, -0.760728f, -0.739137f, -0.646344f, -0.447365f, -0.280582f, -0.279360f, -0.423325f, -0.622662f, -0.804319f, -0.867760f, -0.711139f, -0.374564f, -0.036973f, 0.187009f, 0.339438f, 0.474054f, 0.550709f, 0.537533f, 0.502849f, 0.524124f, 0.586937f, 0.644423f, 0.705382f, 0.790305f, 0.855034f, 0.834070f, 0.729675f, 0.593377f, 0.437006f, 0.224113f, -0.048481f, -0.312373f, -0.491566f, -0.576209f, -0.612643f, -0.640544f, -0.665031f, -0.680052f, -0.687657f, -0.686406f, -0.662500f, -0.605999f, -0.524271f, -0.429884f, -0.325685f, -0.210684f, -0.091141f, 0.023275f, 0.127676f, 0.220049f, 0.297836f, 0.361429f, 0.414922f, 0.459421f, 0.490535f, 0.503997f, 0.498318f, 0.471835f, 0.423949f, 0.360378f, 0.291632f, 0.225381f, 0.164098f, 0.109185f, 0.062781f, 0.025528f, -0.004197f, -0.028936f, -0.051742f, -0.076082f, -0.104578f, -0.138150f, -0.176078f, -0.215537f, -0.251862f, -0.281392f, -0.303940f, -0.321624f, -0.336474f, -0.349673f, -0.360447f, -0.363977f, -0.352405f, -0.319580f, -0.263976f, -0.187632f, -0.095277f, 0.004941f, 0.102546f, 0.187832f, 0.253454f, - 0.294802f, 0.311762f, 0.309781f, 0.297062f, 0.280794f, 0.266708f, 0.259989f, 0.264021f, 0.278984f, 0.303091f, 0.333931f, 0.367038f, 0.394275f, 0.405176f, 0.389668f, 0.339645f, 0.250213f, 0.121655f, -0.039539f, -0.222071f, -0.412200f, -0.595202f, -0.756231f, -0.881758f, -0.961227f, -0.987631f, -0.957056f, -0.868780f, -0.726460f, -0.538670f, -0.317638f, -0.077771f, 0.164807f, 0.393406f, 0.593707f, 0.755810f, 0.873499f, 0.943326f, 0.965432f, 0.943420f, 0.881696f, 0.783870f, 0.654305f, 0.499177f, 0.324930f, 0.137677f, -0.054836f, -0.242668f, -0.415940f, -0.565859f, -0.683493f, -0.760474f, -0.792077f, -0.778024f, -0.720589f, -0.624483f, -0.498476f, -0.354312f, -0.203363f, -0.055601f, 0.079448f, 0.193754f, 0.282950f, 0.345938f, 0.383039f, 0.396039f, 0.388837f, 0.366082f, 0.331570f, 0.288732f, 0.241345f, 0.192568f, 0.144151f, 0.097195f, 0.052704f, 0.011148f, -0.027394f, -0.062510f, -0.093642f, -0.120625f, -0.143214f, -0.160685f, -0.172569f, -0.178917f, -0.179375f, -0.173102f, -0.159797f, -0.139499f, -0.111633f, -0.075980f, -0.034252f, 0.010916f, 0.057404f, 0.101926f, 0.138613f, 0.161970f, - 0.169562f, 0.159632f, 0.129698f, 0.081381f, 0.023065f, -0.036010f, -0.088771f, -0.122396f, -0.117183f, -0.067536f, -0.000965f, 0.039915f, 0.038373f, 0.015920f, 0.001538f, 0.001251f, 0.003701f, 0.002572f, 0.001346f, 0.002248f, 0.002607f, 0.001294f, 0.000524f, 0.000987f, 0.000860f, -0.000262f, -0.000829f, -0.000606f, -0.000896f, -0.001788f, -0.002153f, -0.001988f, -0.002250f, -0.002848f, -0.002957f, -0.002725f, -0.002844f, -0.003107f, -0.002939f, -0.002590f, -0.002528f, -0.002470f, -0.002063f, -0.001626f, -0.001418f, -0.001114f, -0.000569f, -0.000134f}, - {0.021740f, 0.062265f, 0.089497f, 0.079979f, 0.019873f, -0.044423f, -0.038634f, 0.014329f, -0.006309f, -0.113590f, -0.115115f, 0.141366f, 0.508608f, 0.696113f, 0.638660f, 0.530885f, 0.513220f, 0.511265f, 0.413104f, 0.233094f, 0.033856f, -0.178208f, -0.394112f, -0.532465f, -0.516289f, -0.373221f, -0.199312f, -0.054469f, 0.064669f, 0.175334f, 0.270929f, 0.322634f, 0.297348f, 0.180897f, -0.005107f, -0.214019f, -0.406250f, -0.568975f, -0.708995f, -0.834425f, -0.942413f, -1.020169f, -1.058870f, -1.066737f, -1.064744f, -1.070779f, -1.092413f, -1.130543f, -1.180471f, -1.230349f, -1.267218f, -1.286478f, -1.292217f, -1.290295f, -1.284789f, -1.278764f, -1.274804f, -1.275839f, -1.285956f, -1.307719f, -1.339100f, -1.376367f, -1.418521f, -1.464319f, -1.506155f, -1.531614f, -1.530826f, -1.499868f, -1.440010f, -1.357948f, -1.265010f, -1.172182f, -1.086077f, -1.010355f, -0.948076f, -0.900542f, -0.865729f, -0.839379f, -0.816783f, -0.793921f, -0.768744f, -0.741295f, -0.711733f, -0.679567f, -0.645630f, -0.612730f, -0.583124f, -0.557524f, -0.537573f, -0.526798f, -0.527799f, -0.540308f, -0.562652f, -0.593201f, -0.629808f, -0.669386f, - -0.708515f, -0.743933f, -0.773005f, -0.794365f, -0.807476f, -0.811721f, -0.807186f, -0.795749f, -0.779350f, -0.757689f, -0.729622f, -0.695999f, -0.658877f, -0.618992f, -0.576449f, -0.532906f, -0.490747f, -0.450976f, -0.413608f, -0.379004f, -0.347546f, -0.319332f, -0.295027f, -0.275613f, -0.261247f, -0.252274f, -0.250937f, -0.259815f, -0.279334f, -0.309493f, -0.353092f, -0.414158f, -0.493999f, -0.592040f, -0.709860f, -0.850917f, -1.016122f, -1.202501f, -1.406580f, -1.626368f, -1.858539f, -2.095454f, -2.327361f, -2.547430f, -2.752372f, -2.937831f, -3.096805f, -3.225146f, -3.325214f, -3.400274f, -3.448580f, -3.467955f, -3.462820f, -3.440091f, -3.400547f, -3.341377f, -3.265259f, -3.179036f, -3.084322f, -2.977173f, -2.856905f, -2.727864f, -2.591707f, -2.444451f, -2.282751f, -2.108111f, -1.922919f, -1.725836f, -1.513704f, -1.286797f, -1.049763f, -0.806612f, -0.557242f, -0.301864f, -0.046431f, 0.201936f, 0.443240f, 0.681014f, 0.912264f, 1.130667f, 1.338214f, 1.541861f, 1.739858f, 1.924684f, 2.097432f, 2.263703f, 2.417459f, 2.545568f, 2.644263f, 2.712279f, 2.733362f, 2.686342f, 2.565077f, 2.367465f, 2.078112f, 1.688067f, - 1.216823f, 0.689229f, 0.115322f, -0.475183f, -1.011572f, -1.432585f, -1.708631f, -1.762445f, -1.452538f, -0.765837f, 0.007791f, 0.454087f, 0.430600f, 0.177956f, 0.006027f, -0.013234f, 0.008162f, 0.000516f, -0.008800f, 0.001070f, 0.006785f, -0.001814f, -0.005338f, 0.001955f, 0.004159f, -0.001933f, -0.003203f, 0.001947f, 0.002621f, -0.001703f, -0.001961f, 0.001637f, 0.001565f, -0.001450f, -0.001190f, 0.001261f, 0.000818f, -0.001182f, -0.000645f, 0.000918f, 0.000295f, -0.000884f, -0.000203f, 0.000626f, -0.000076f, -0.000552f, 0.000190f, 0.000362f} - }, - { - {0.020843f, 0.021772f, -0.074620f, -0.219246f, -0.250987f, -0.107501f, 0.010495f, -0.117159f, -0.350087f, -0.299453f, 0.133095f, 0.571464f, 0.635503f, 0.397361f, 0.214127f, 0.251024f, 0.351688f, 0.309346f, 0.096268f, -0.170755f, -0.368550f, -0.441001f, -0.403762f, -0.312694f, -0.213644f, -0.118863f, -0.033052f, 0.019339f, 0.006766f, -0.084398f, -0.244267f, -0.442069f, -0.632048f, -0.778310f, -0.879952f, -0.956019f, -1.006298f, -1.007224f, -0.948454f, -0.854412f, -0.765413f, -0.711451f, -0.704679f, -0.740188f, -0.797729f, -0.853597f, -0.897547f, -0.934478f, -0.969795f, -0.999408f, -1.014937f, -1.013415f, -0.999640f, -0.981235f, -0.962830f, -0.944810f, -0.926848f, -0.910262f, -0.894988f, -0.876689f, -0.850723f, -0.818230f, -0.784731f, -0.753005f, -0.720667f, -0.685021f, -0.647235f, -0.610640f, -0.576758f, -0.544244f, -0.511073f, -0.477026f, -0.444129f, -0.414956f, -0.390763f, -0.371204f, -0.355270f, -0.342030f, -0.331009f, -0.322541f, -0.317554f, -0.316405f, -0.318065f, -0.320982f, -0.324817f, -0.330999f, -0.341429f, -0.356903f, -0.377097f, -0.401882f, -0.431767f, -0.466439f, -0.503289f, -0.537982f, -0.566063f, -0.583561f, - -0.587138f, -0.575315f, -0.549603f, -0.513357f, -0.469423f, -0.419580f, -0.365934f, -0.311618f, -0.259754f, -0.212337f, -0.170616f, -0.136551f, -0.113765f, -0.106742f, -0.118986f, -0.152388f, -0.208330f, -0.287999f, -0.390564f, -0.512325f, -0.649221f, -0.799131f, -0.960097f, -1.127778f, -1.297417f, -1.467538f, -1.638728f, -1.809064f, -1.973949f, -2.130414f, -2.277763f, -2.413033f, -2.529737f, -2.623312f, -2.694688f, -2.746001f, -2.775857f, -2.782337f, -2.768361f, -2.739709f, -2.698669f, -2.643816f, -2.575709f, -2.498064f, -2.412212f, -2.314661f, -2.202237f, -2.076018f, -1.937466f, -1.784021f, -1.612358f, -1.423970f, -1.223605f, -1.013553f, -0.793839f, -0.567739f, -0.342670f, -0.124736f, 0.083821f, 0.280550f, 0.459977f, 0.617159f, 0.751201f, 0.862726f, 0.950153f, 1.011333f, 1.047323f, 1.061710f, 1.057110f, 1.035001f, 0.998567f, 0.953069f, 0.903025f, 0.850779f, 0.798188f, 0.748048f, 0.702999f, 0.663889f, 0.630078f, 0.601056f, 0.577007f, 0.557689f, 0.541546f, 0.526776f, 0.512917f, 0.500274f, 0.488072f, 0.474647f, 0.459326f, 0.442142f, 0.421629f, 0.395188f, 0.361846f, 0.322187f, 0.275584f, 0.220730f, - 0.158999f, 0.093656f, 0.025970f, -0.043388f, -0.109763f, -0.167134f, -0.213607f, -0.244943f, -0.243677f, -0.190704f, -0.096080f, -0.005466f, 0.037995f, 0.033141f, 0.012469f, 0.001728f, 0.000979f, 0.000762f, -0.000671f, -0.000492f, 0.000547f, 0.000254f, -0.000496f, -0.000131f, 0.000467f, 0.000134f, -0.000309f, 0.000007f, 0.000336f, 0.000034f, -0.000227f, 0.000024f, 0.000194f, -0.000047f, -0.000184f, 0.000006f, 0.000083f, -0.000088f, -0.000140f, -0.000006f, 0.000018f, -0.000084f, -0.000083f, -0.000003f, -0.000007f, -0.000044f, -0.000017f, 0.000006f}, - {0.020843f, 0.021772f, -0.074620f, -0.219246f, -0.250987f, -0.107501f, 0.010495f, -0.117159f, -0.350087f, -0.299453f, 0.133095f, 0.571464f, 0.635503f, 0.397361f, 0.214127f, 0.251024f, 0.351688f, 0.309346f, 0.096268f, -0.170755f, -0.368550f, -0.441001f, -0.403762f, -0.312694f, -0.213644f, -0.118863f, -0.033052f, 0.019339f, 0.006766f, -0.084398f, -0.244267f, -0.442069f, -0.632048f, -0.778310f, -0.879952f, -0.956019f, -1.006298f, -1.007224f, -0.948454f, -0.854412f, -0.765413f, -0.711451f, -0.704679f, -0.740188f, -0.797729f, -0.853597f, -0.897547f, -0.934478f, -0.969795f, -0.999408f, -1.014937f, -1.013415f, -0.999640f, -0.981235f, -0.962830f, -0.944810f, -0.926848f, -0.910262f, -0.894988f, -0.876689f, -0.850723f, -0.818230f, -0.784731f, -0.753005f, -0.720667f, -0.685021f, -0.647235f, -0.610640f, -0.576758f, -0.544244f, -0.511073f, -0.477026f, -0.444129f, -0.414956f, -0.390763f, -0.371204f, -0.355270f, -0.342030f, -0.331009f, -0.322541f, -0.317554f, -0.316405f, -0.318065f, -0.320982f, -0.324817f, -0.330999f, -0.341429f, -0.356903f, -0.377097f, -0.401882f, -0.431767f, -0.466439f, -0.503289f, -0.537982f, -0.566063f, -0.583561f, - -0.587138f, -0.575315f, -0.549603f, -0.513357f, -0.469423f, -0.419580f, -0.365934f, -0.311618f, -0.259754f, -0.212337f, -0.170616f, -0.136551f, -0.113765f, -0.106742f, -0.118986f, -0.152388f, -0.208330f, -0.287999f, -0.390564f, -0.512325f, -0.649221f, -0.799131f, -0.960097f, -1.127778f, -1.297417f, -1.467538f, -1.638728f, -1.809064f, -1.973949f, -2.130414f, -2.277763f, -2.413033f, -2.529737f, -2.623312f, -2.694688f, -2.746001f, -2.775857f, -2.782337f, -2.768361f, -2.739709f, -2.698669f, -2.643816f, -2.575709f, -2.498064f, -2.412212f, -2.314661f, -2.202237f, -2.076018f, -1.937466f, -1.784021f, -1.612358f, -1.423970f, -1.223605f, -1.013553f, -0.793839f, -0.567739f, -0.342670f, -0.124736f, 0.083821f, 0.280550f, 0.459977f, 0.617159f, 0.751201f, 0.862726f, 0.950153f, 1.011333f, 1.047323f, 1.061710f, 1.057110f, 1.035001f, 0.998567f, 0.953069f, 0.903025f, 0.850779f, 0.798188f, 0.748048f, 0.702999f, 0.663889f, 0.630078f, 0.601056f, 0.577007f, 0.557689f, 0.541546f, 0.526776f, 0.512917f, 0.500274f, 0.488072f, 0.474647f, 0.459326f, 0.442142f, 0.421629f, 0.395188f, 0.361846f, 0.322187f, 0.275584f, 0.220730f, - 0.158999f, 0.093656f, 0.025970f, -0.043388f, -0.109763f, -0.167134f, -0.213607f, -0.244943f, -0.243677f, -0.190704f, -0.096080f, -0.005466f, 0.037995f, 0.033141f, 0.012469f, 0.001728f, 0.000979f, 0.000762f, -0.000671f, -0.000492f, 0.000547f, 0.000254f, -0.000496f, -0.000131f, 0.000467f, 0.000134f, -0.000309f, 0.000007f, 0.000336f, 0.000034f, -0.000227f, 0.000024f, 0.000194f, -0.000047f, -0.000184f, 0.000006f, 0.000083f, -0.000088f, -0.000140f, -0.000006f, 0.000018f, -0.000084f, -0.000083f, -0.000003f, -0.000007f, -0.000044f, -0.000017f, 0.000006f} - }, - { - {0.011569f, 0.065153f, 0.150153f, 0.203635f, 0.205376f, 0.173096f, 0.078721f, -0.099478f, -0.273114f, -0.336729f, -0.337980f, -0.407198f, -0.542930f, -0.623111f, -0.612944f, -0.602716f, -0.639352f, -0.670207f, -0.665746f, -0.663210f, -0.669807f, -0.639016f, -0.563037f, -0.492634f, -0.453350f, -0.425831f, -0.411451f, -0.435590f, -0.481467f, -0.493772f, -0.454614f, -0.397179f, -0.343898f, -0.284417f, -0.214324f, -0.148331f, -0.092876f, -0.042119f, -0.001362f, 0.013895f, 0.000977f, -0.028018f, -0.062315f, -0.094962f, -0.116574f, -0.120585f, -0.110386f, -0.094260f, -0.079595f, -0.075577f, -0.092822f, -0.135978f, -0.201707f, -0.283621f, -0.373297f, -0.458913f, -0.530510f, -0.586050f, -0.628047f, -0.657110f, -0.672676f, -0.676154f, -0.668940f, -0.650025f, -0.618410f, -0.575398f, -0.523084f, -0.463279f, -0.398758f, -0.333031f, -0.268412f, -0.205886f, -0.146127f, -0.088932f, -0.032678f, 0.024059f, 0.081192f, 0.138116f, 0.194573f, 0.249639f, 0.300758f, 0.344246f, 0.376397f, 0.394340f, 0.395940f, 0.378322f, 0.336985f, 0.267596f, 0.167862f, 0.036412f, -0.127823f, -0.321958f, -0.536530f, -0.759956f, -0.984191f, -1.203033f, - -1.407738f, -1.589491f, -1.745039f, -1.875334f, -1.979759f, -2.056311f, -2.106550f, -2.135185f, -2.144138f, -2.131027f, -2.094254f, -2.036298f, -1.961129f, -1.871617f, -1.771308f, -1.666459f, -1.563804f, -1.466752f, -1.375328f, -1.289465f, -1.210671f, -1.140298f, -1.077990f, -1.023002f, -0.975880f, -0.937424f, -0.906552f, -0.880558f, -0.857370f, -0.836543f, -0.818233f, -0.802387f, -0.789314f, -0.780403f, -0.777788f, -0.783208f, -0.797242f, -0.819642f, -0.850299f, -0.889299f, -0.935805f, -0.987623f, -1.042663f, -1.100181f, -1.159526f, -1.218087f, -1.271834f, -1.317746f, -1.354190f, -1.378859f, -1.388441f, -1.381422f, -1.359724f, -1.326229f, -1.282128f, -1.228339f, -1.167951f, -1.104670f, -1.039474f, -0.971238f, -0.900258f, -0.828583f, -0.756941f, -0.684007f, -0.609260f, -0.534389f, -0.461087f, -0.389218f, -0.318074f, -0.248322f, -0.181644f, -0.118710f, -0.058387f, 0.000515f, 0.057409f, 0.111358f, 0.163934f, 0.218134f, 0.274375f, 0.331038f, 0.389352f, 0.453139f, 0.522861f, 0.595488f, 0.671219f, 0.753543f, 0.841415f, 0.929099f, 1.014516f, 1.098177f, 1.173021f, 1.225991f, 1.249730f, 1.240661f, 1.187460f, 1.077175f, - 0.910930f, 0.697192f, 0.435982f, 0.132198f, -0.183809f, -0.475682f, -0.724582f, -0.891658f, -0.880755f, -0.621256f, -0.207028f, 0.126680f, 0.218186f, 0.126237f, 0.023051f, -0.005289f, 0.003972f, 0.002567f, -0.004554f, -0.001212f, 0.003755f, 0.000381f, -0.003113f, 0.000002f, 0.002534f, -0.000198f, -0.001991f, 0.000414f, 0.001690f, -0.000399f, -0.001292f, 0.000483f, 0.001055f, -0.000473f, -0.000835f, 0.000423f, 0.000587f, -0.000458f, -0.000496f, 0.000328f, 0.000259f, -0.000368f, -0.000220f, 0.000227f, 0.000038f, -0.000216f, 0.000017f, 0.000113f}, - {-0.169685f, -0.479052f, -0.687718f, -0.745489f, -0.686580f, -0.594247f, -0.494277f, -0.350304f, -0.167242f, -0.017921f, 0.055447f, 0.093676f, 0.144873f, 0.201507f, 0.248863f, 0.316742f, 0.432390f, 0.556193f, 0.607823f, 0.540609f, 0.367689f, 0.137632f, -0.092198f, -0.276561f, -0.400357f, -0.471390f, -0.492220f, -0.455722f, -0.371284f, -0.272306f, -0.186944f, -0.117169f, -0.053347f, 0.007736f, 0.067806f, 0.134068f, 0.208872f, 0.279806f, 0.327290f, 0.337195f, 0.304321f, 0.232209f, 0.134659f, 0.032521f, -0.055207f, -0.116778f, -0.147170f, -0.148130f, -0.129185f, -0.103778f, -0.082038f, -0.067724f, -0.060382f, -0.057666f, -0.056328f, -0.053688f, -0.048964f, -0.042853f, -0.036531f, -0.031221f, -0.027425f, -0.023816f, -0.017450f, -0.005051f, 0.016360f, 0.048944f, 0.092045f, 0.140182f, 0.183898f, 0.212996f, 0.219429f, 0.199052f, 0.152798f, 0.086601f, 0.009223f, -0.070626f, -0.145890f, -0.211261f, -0.262537f, -0.295616f, -0.305743f, -0.288061f, -0.239616f, -0.161593f, -0.060644f, 0.051193f, 0.158413f, 0.245651f, 0.301519f, 0.320779f, 0.304347f, 0.257927f, 0.190207f, 0.111091f, 0.030284f, -0.043708f, - -0.104254f, -0.147026f, -0.170155f, -0.174264f, -0.162372f, -0.139375f, -0.110912f, -0.082026f, -0.056260f, -0.035389f, -0.019595f, -0.007861f, 0.001522f, 0.010463f, 0.020713f, 0.033631f, 0.049942f, 0.069377f, 0.090322f, 0.109823f, 0.124132f, 0.129578f, 0.123456f, 0.104770f, 0.074585f, 0.035726f, -0.008012f, -0.052580f, -0.094098f, -0.129167f, -0.155076f, -0.169720f, -0.171437f, -0.159175f, -0.132888f, -0.093787f, -0.044490f, 0.010781f, 0.066337f, 0.115819f, 0.153314f, 0.174321f, 0.176622f, 0.160923f, 0.130685f, 0.091034f, 0.047547f, 0.005359f, -0.031604f, -0.061171f, -0.082725f, -0.096493f, -0.103137f, -0.103621f, -0.098835f, -0.089236f, -0.075087f, -0.056903f, -0.035467f, -0.011778f, 0.012643f, 0.035685f, 0.055241f, 0.069703f, 0.077958f, 0.079528f, 0.074957f, 0.065658f, 0.053228f, 0.039180f, 0.025001f, 0.011729f, -0.000451f, -0.011772f, -0.022406f, -0.032763f, -0.043533f, -0.054817f, -0.065772f, -0.075306f, -0.082031f, -0.083268f, -0.075551f, -0.056593f, -0.025842f, 0.016050f, 0.065745f, 0.115218f, 0.153630f, 0.171432f, 0.161627f, 0.120156f, 0.050082f, -0.035140f, -0.116350f, -0.176001f, - -0.199580f, -0.176780f, -0.109811f, -0.018038f, 0.072290f, 0.139214f, 0.162279f, 0.123993f, 0.034014f, -0.055650f, -0.086819f, -0.053222f, -0.004112f, 0.015109f, 0.006552f, -0.002295f, -0.000894f, 0.001475f, -0.000301f, -0.001224f, 0.000780f, 0.001739f, 0.000548f, 0.000335f, 0.001638f, 0.001930f, 0.000993f, 0.000852f, 0.001510f, 0.001347f, 0.000509f, 0.000293f, 0.000490f, 0.000108f, -0.000571f, -0.000767f, -0.000749f, -0.001070f, -0.001443f, -0.001463f, -0.001373f, -0.001433f, -0.001436f, -0.001227f, -0.000969f, -0.000757f, -0.000502f, -0.000175f} - }, - { - {-0.169685f, -0.479052f, -0.687718f, -0.745489f, -0.686580f, -0.594247f, -0.494277f, -0.350304f, -0.167242f, -0.017921f, 0.055447f, 0.093676f, 0.144873f, 0.201507f, 0.248863f, 0.316742f, 0.432390f, 0.556193f, 0.607823f, 0.540609f, 0.367689f, 0.137632f, -0.092198f, -0.276561f, -0.400357f, -0.471390f, -0.492220f, -0.455722f, -0.371284f, -0.272306f, -0.186944f, -0.117169f, -0.053347f, 0.007736f, 0.067806f, 0.134068f, 0.208872f, 0.279806f, 0.327290f, 0.337195f, 0.304321f, 0.232209f, 0.134659f, 0.032521f, -0.055207f, -0.116778f, -0.147170f, -0.148130f, -0.129185f, -0.103778f, -0.082038f, -0.067724f, -0.060382f, -0.057666f, -0.056328f, -0.053688f, -0.048964f, -0.042853f, -0.036531f, -0.031221f, -0.027425f, -0.023816f, -0.017450f, -0.005051f, 0.016360f, 0.048944f, 0.092045f, 0.140182f, 0.183898f, 0.212996f, 0.219429f, 0.199052f, 0.152798f, 0.086601f, 0.009223f, -0.070626f, -0.145890f, -0.211261f, -0.262537f, -0.295616f, -0.305743f, -0.288061f, -0.239616f, -0.161593f, -0.060644f, 0.051193f, 0.158413f, 0.245651f, 0.301519f, 0.320779f, 0.304347f, 0.257927f, 0.190207f, 0.111091f, 0.030284f, -0.043708f, - -0.104254f, -0.147026f, -0.170155f, -0.174264f, -0.162372f, -0.139375f, -0.110912f, -0.082026f, -0.056260f, -0.035389f, -0.019595f, -0.007861f, 0.001522f, 0.010463f, 0.020713f, 0.033631f, 0.049942f, 0.069377f, 0.090322f, 0.109823f, 0.124132f, 0.129578f, 0.123456f, 0.104770f, 0.074585f, 0.035726f, -0.008012f, -0.052580f, -0.094098f, -0.129167f, -0.155076f, -0.169720f, -0.171437f, -0.159175f, -0.132888f, -0.093787f, -0.044490f, 0.010781f, 0.066337f, 0.115819f, 0.153314f, 0.174321f, 0.176622f, 0.160923f, 0.130685f, 0.091034f, 0.047547f, 0.005359f, -0.031604f, -0.061171f, -0.082725f, -0.096493f, -0.103137f, -0.103621f, -0.098835f, -0.089236f, -0.075087f, -0.056903f, -0.035467f, -0.011778f, 0.012643f, 0.035685f, 0.055241f, 0.069703f, 0.077958f, 0.079528f, 0.074957f, 0.065658f, 0.053228f, 0.039180f, 0.025001f, 0.011729f, -0.000451f, -0.011772f, -0.022406f, -0.032763f, -0.043533f, -0.054817f, -0.065772f, -0.075306f, -0.082031f, -0.083268f, -0.075551f, -0.056593f, -0.025842f, 0.016050f, 0.065745f, 0.115218f, 0.153630f, 0.171432f, 0.161627f, 0.120156f, 0.050082f, -0.035140f, -0.116350f, -0.176001f, - -0.199580f, -0.176780f, -0.109811f, -0.018038f, 0.072290f, 0.139214f, 0.162279f, 0.123993f, 0.034014f, -0.055650f, -0.086819f, -0.053222f, -0.004112f, 0.015109f, 0.006552f, -0.002295f, -0.000894f, 0.001475f, -0.000301f, -0.001224f, 0.000780f, 0.001739f, 0.000548f, 0.000335f, 0.001638f, 0.001930f, 0.000993f, 0.000852f, 0.001510f, 0.001347f, 0.000509f, 0.000293f, 0.000490f, 0.000108f, -0.000571f, -0.000767f, -0.000749f, -0.001070f, -0.001443f, -0.001463f, -0.001373f, -0.001433f, -0.001436f, -0.001227f, -0.000969f, -0.000757f, -0.000502f, -0.000175f}, - {0.011569f, 0.065153f, 0.150153f, 0.203635f, 0.205376f, 0.173096f, 0.078721f, -0.099478f, -0.273114f, -0.336729f, -0.337980f, -0.407198f, -0.542930f, -0.623111f, -0.612944f, -0.602716f, -0.639352f, -0.670207f, -0.665746f, -0.663210f, -0.669807f, -0.639016f, -0.563037f, -0.492634f, -0.453350f, -0.425831f, -0.411451f, -0.435590f, -0.481467f, -0.493772f, -0.454614f, -0.397179f, -0.343898f, -0.284417f, -0.214324f, -0.148331f, -0.092876f, -0.042119f, -0.001362f, 0.013895f, 0.000977f, -0.028018f, -0.062315f, -0.094962f, -0.116574f, -0.120585f, -0.110386f, -0.094260f, -0.079595f, -0.075577f, -0.092822f, -0.135978f, -0.201707f, -0.283621f, -0.373297f, -0.458913f, -0.530510f, -0.586050f, -0.628047f, -0.657110f, -0.672676f, -0.676154f, -0.668940f, -0.650025f, -0.618410f, -0.575398f, -0.523084f, -0.463279f, -0.398758f, -0.333031f, -0.268412f, -0.205886f, -0.146127f, -0.088932f, -0.032678f, 0.024059f, 0.081192f, 0.138116f, 0.194573f, 0.249639f, 0.300758f, 0.344246f, 0.376397f, 0.394340f, 0.395940f, 0.378322f, 0.336985f, 0.267596f, 0.167862f, 0.036412f, -0.127823f, -0.321958f, -0.536530f, -0.759956f, -0.984191f, -1.203033f, - -1.407738f, -1.589491f, -1.745039f, -1.875334f, -1.979759f, -2.056311f, -2.106550f, -2.135185f, -2.144138f, -2.131027f, -2.094254f, -2.036298f, -1.961129f, -1.871617f, -1.771308f, -1.666459f, -1.563804f, -1.466752f, -1.375328f, -1.289465f, -1.210671f, -1.140298f, -1.077990f, -1.023002f, -0.975880f, -0.937424f, -0.906552f, -0.880558f, -0.857370f, -0.836543f, -0.818233f, -0.802387f, -0.789314f, -0.780403f, -0.777788f, -0.783208f, -0.797242f, -0.819642f, -0.850299f, -0.889299f, -0.935805f, -0.987623f, -1.042663f, -1.100181f, -1.159526f, -1.218087f, -1.271834f, -1.317746f, -1.354190f, -1.378859f, -1.388441f, -1.381422f, -1.359724f, -1.326229f, -1.282128f, -1.228339f, -1.167951f, -1.104670f, -1.039474f, -0.971238f, -0.900258f, -0.828583f, -0.756941f, -0.684007f, -0.609260f, -0.534389f, -0.461087f, -0.389218f, -0.318074f, -0.248322f, -0.181644f, -0.118710f, -0.058387f, 0.000515f, 0.057409f, 0.111358f, 0.163934f, 0.218134f, 0.274375f, 0.331038f, 0.389352f, 0.453139f, 0.522861f, 0.595488f, 0.671219f, 0.753543f, 0.841415f, 0.929099f, 1.014516f, 1.098177f, 1.173021f, 1.225991f, 1.249730f, 1.240661f, 1.187460f, 1.077175f, - 0.910930f, 0.697192f, 0.435982f, 0.132198f, -0.183809f, -0.475682f, -0.724582f, -0.891658f, -0.880755f, -0.621256f, -0.207028f, 0.126680f, 0.218186f, 0.126237f, 0.023051f, -0.005289f, 0.003972f, 0.002567f, -0.004554f, -0.001212f, 0.003755f, 0.000381f, -0.003113f, 0.000002f, 0.002534f, -0.000198f, -0.001991f, 0.000414f, 0.001690f, -0.000399f, -0.001292f, 0.000483f, 0.001055f, -0.000473f, -0.000835f, 0.000423f, 0.000587f, -0.000458f, -0.000496f, 0.000328f, 0.000259f, -0.000368f, -0.000220f, 0.000227f, 0.000038f, -0.000216f, 0.000017f, 0.000113f} - }, - { - {0.014162f, 0.079119f, 0.192373f, 0.273045f, 0.251924f, 0.149637f, 0.020926f, -0.122502f, -0.278057f, -0.388982f, -0.399742f, -0.356867f, -0.363688f, -0.430590f, -0.461817f, -0.411004f, -0.354648f, -0.367414f, -0.410842f, -0.409099f, -0.367287f, -0.341672f, -0.339623f, -0.322888f, -0.283709f, -0.252116f, -0.238516f, -0.220734f, -0.185306f, -0.144497f, -0.113533f, -0.096567f, -0.091951f, -0.092389f, -0.083826f, -0.057563f, -0.019655f, 0.018077f, 0.048708f, 0.067918f, 0.071323f, 0.059246f, 0.036544f, 0.005242f, -0.035854f, -0.084054f, -0.132500f, -0.177134f, -0.218733f, -0.259382f, -0.301515f, -0.348575f, -0.402779f, -0.463490f, -0.528869f, -0.596495f, -0.662478f, -0.723615f, -0.779891f, -0.831486f, -0.875283f, -0.908241f, -0.931583f, -0.947488f, -0.954629f, -0.951018f, -0.937871f, -0.916524f, -0.884692f, -0.839543f, -0.781782f, -0.714062f, -0.638421f, -0.557458f, -0.475213f, -0.395089f, -0.318909f, -0.248274f, -0.184492f, -0.127606f, -0.077917f, -0.037597f, -0.008569f, 0.009628f, 0.017312f, 0.011628f, -0.011443f, -0.053626f, -0.115452f, -0.199369f, -0.308884f, -0.444843f, -0.604506f, -0.784300f, -0.981549f, -1.192357f, - -1.409125f, -1.622569f, -1.826460f, -2.017987f, -2.192991f, -2.344549f, -2.468303f, -2.565362f, -2.636848f, -2.679384f, -2.689877f, -2.671088f, -2.627835f, -2.561060f, -2.470869f, -2.362808f, -2.245776f, -2.125343f, -2.003654f, -1.884247f, -1.772264f, -1.670297f, -1.577576f, -1.493238f, -1.418065f, -1.353009f, -1.297583f, -1.249988f, -1.208402f, -1.171974f, -1.140140f, -1.111192f, -1.083035f, -1.055899f, -1.032625f, -1.015658f, -1.005579f, -1.003175f, -1.010700f, -1.029943f, -1.060636f, -1.101560f, -1.151968f, -1.211363f, -1.278569f, -1.351093f, -1.425253f, -1.497653f, -1.566149f, -1.627979f, -1.677910f, -1.710781f, -1.724954f, -1.720277f, -1.694168f, -1.643923f, -1.571750f, -1.482954f, -1.380137f, -1.263897f, -1.138026f, -1.008765f, -0.879318f, -0.749674f, -0.621380f, -0.498272f, -0.382754f, -0.274712f, -0.174008f, -0.081729f, 0.000918f, 0.073950f, 0.139119f, 0.198670f, 0.253061f, 0.301763f, 0.347006f, 0.393182f, 0.441347f, 0.489362f, 0.538806f, 0.595052f, 0.658904f, 0.726443f, 0.798707f, 0.881537f, 0.974294f, 1.070091f, 1.167737f, 1.269490f, 1.366474f, 1.441595f, 1.485849f, 1.494333f, 1.449955f, 1.333119f, - 1.143665f, 0.890490f, 0.570130f, 0.186750f, -0.219462f, -0.600083f, -0.930100f, -1.155403f, -1.143394f, -0.798347f, -0.249038f, 0.187134f, 0.296878f, 0.165312f, 0.025951f, -0.009102f, 0.005434f, 0.003510f, -0.006460f, -0.001638f, 0.005342f, 0.000501f, -0.004432f, 0.000038f, 0.003617f, -0.000337f, -0.002882f, 0.000630f, 0.002437f, -0.000642f, -0.001890f, 0.000764f, 0.001542f, -0.000762f, -0.001213f, 0.000714f, 0.000864f, -0.000752f, -0.000696f, 0.000595f, 0.000364f, -0.000627f, -0.000266f, 0.000442f, 0.000006f, -0.000404f, 0.000101f, 0.000251f}, - {-0.227017f, -0.610853f, -0.818539f, -0.827113f, -0.686898f, -0.457087f, -0.160740f, 0.181063f, 0.492006f, 0.663270f, 0.645501f, 0.491623f, 0.296597f, 0.115853f, -0.045972f, -0.190366f, -0.298151f, -0.347926f, -0.342693f, -0.305048f, -0.248107f, -0.163349f, -0.044348f, 0.087150f, 0.193393f, 0.255393f, 0.280153f, 0.274932f, 0.233779f, 0.155052f, 0.055515f, -0.042313f, -0.126031f, -0.190062f, -0.227345f, -0.232206f, -0.205038f, -0.149865f, -0.073744f, 0.009150f, 0.080879f, 0.131334f, 0.161815f, 0.176140f, 0.173876f, 0.153042f, 0.113606f, 0.057194f, -0.011688f, -0.082861f, -0.142578f, -0.179538f, -0.187757f, -0.166078f, -0.118901f, -0.056731f, 0.007389f, 0.063005f, 0.104104f, 0.128523f, 0.137613f, 0.134941f, 0.123116f, 0.101857f, 0.069275f, 0.024158f, -0.032605f, -0.096564f, -0.158344f, -0.204423f, -0.220368f, -0.195089f, -0.125489f, -0.020636f, 0.097710f, 0.200646f, 0.261717f, 0.265867f, 0.214146f, 0.122474f, 0.014892f, -0.085103f, -0.160437f, -0.201917f, -0.207135f, -0.178873f, -0.123758f, -0.051585f, 0.024949f, 0.091673f, 0.136311f, 0.152061f, 0.139120f, 0.103823f, 0.056376f, 0.007840f, - -0.032834f, -0.060514f, -0.073885f, -0.074522f, -0.065753f, -0.051457f, -0.035012f, -0.018814f, -0.004264f, 0.008156f, 0.018669f, 0.027701f, 0.035397f, 0.041400f, 0.044773f, 0.044029f, 0.037643f, 0.024948f, 0.006808f, -0.014330f, -0.034848f, -0.050700f, -0.058465f, -0.056356f, -0.044689f, -0.025767f, -0.003347f, 0.018238f, 0.035205f, 0.045211f, 0.047611f, 0.043172f, 0.033577f, 0.020863f, 0.006937f, -0.006651f, -0.018658f, -0.028044f, -0.033981f, -0.035885f, -0.033444f, -0.026747f, -0.016470f, -0.003905f, 0.009212f, 0.020942f, 0.029423f, 0.033278f, 0.032010f, 0.026116f, 0.016859f, 0.005952f, -0.004786f, -0.013832f, -0.020263f, -0.023725f, -0.024216f, -0.022003f, -0.017612f, -0.011677f, -0.004775f, 0.002521f, 0.009563f, 0.015703f, 0.020359f, 0.022925f, 0.022827f, 0.019784f, 0.013935f, 0.005753f, -0.003874f, -0.013545f, -0.021660f, -0.026897f, -0.028311f, -0.025374f, -0.018350f, -0.008412f, 0.002946f, 0.014306f, 0.024069f, 0.030568f, 0.032809f, 0.030492f, 0.023239f, 0.010889f, -0.005219f, -0.022346f, -0.037579f, -0.047634f, -0.048151f, -0.035867f, -0.012072f, 0.017486f, 0.045290f, 0.062856f, - 0.061692f, 0.038856f, 0.001862f, -0.035283f, -0.059860f, -0.062195f, -0.036787f, 0.007937f, 0.044601f, 0.046634f, 0.017252f, -0.012271f, -0.017935f, -0.006337f, 0.002146f, 0.001029f, -0.001521f, -0.000459f, 0.000817f, -0.000067f, -0.000660f, 0.000353f, 0.000950f, 0.000276f, -0.000030f, 0.000569f, 0.000705f, 0.000053f, -0.000227f, 0.000069f, -0.000002f, -0.000506f, -0.000627f, -0.000349f, -0.000332f, -0.000528f, -0.000394f, -0.000037f, 0.000086f, 0.000082f, 0.000281f, 0.000519f, 0.000524f, 0.000449f, 0.000475f, 0.000435f, 0.000230f, 0.000050f} - }, - { - {-0.227017f, -0.610853f, -0.818539f, -0.827113f, -0.686898f, -0.457087f, -0.160740f, 0.181063f, 0.492006f, 0.663270f, 0.645501f, 0.491623f, 0.296597f, 0.115853f, -0.045972f, -0.190366f, -0.298151f, -0.347926f, -0.342693f, -0.305048f, -0.248107f, -0.163349f, -0.044348f, 0.087150f, 0.193393f, 0.255393f, 0.280153f, 0.274932f, 0.233779f, 0.155052f, 0.055515f, -0.042313f, -0.126031f, -0.190062f, -0.227345f, -0.232206f, -0.205038f, -0.149865f, -0.073744f, 0.009150f, 0.080879f, 0.131334f, 0.161815f, 0.176140f, 0.173876f, 0.153042f, 0.113606f, 0.057194f, -0.011688f, -0.082861f, -0.142578f, -0.179538f, -0.187757f, -0.166078f, -0.118901f, -0.056731f, 0.007389f, 0.063005f, 0.104104f, 0.128523f, 0.137613f, 0.134941f, 0.123116f, 0.101857f, 0.069275f, 0.024158f, -0.032605f, -0.096564f, -0.158344f, -0.204423f, -0.220368f, -0.195089f, -0.125489f, -0.020636f, 0.097710f, 0.200646f, 0.261717f, 0.265867f, 0.214146f, 0.122474f, 0.014892f, -0.085103f, -0.160437f, -0.201917f, -0.207135f, -0.178873f, -0.123758f, -0.051585f, 0.024949f, 0.091673f, 0.136311f, 0.152061f, 0.139120f, 0.103823f, 0.056376f, 0.007840f, - -0.032834f, -0.060514f, -0.073885f, -0.074522f, -0.065753f, -0.051457f, -0.035012f, -0.018814f, -0.004264f, 0.008156f, 0.018669f, 0.027701f, 0.035397f, 0.041400f, 0.044773f, 0.044029f, 0.037643f, 0.024948f, 0.006808f, -0.014330f, -0.034848f, -0.050700f, -0.058465f, -0.056356f, -0.044689f, -0.025767f, -0.003347f, 0.018238f, 0.035205f, 0.045211f, 0.047611f, 0.043172f, 0.033577f, 0.020863f, 0.006937f, -0.006651f, -0.018658f, -0.028044f, -0.033981f, -0.035885f, -0.033444f, -0.026747f, -0.016470f, -0.003905f, 0.009212f, 0.020942f, 0.029423f, 0.033278f, 0.032010f, 0.026116f, 0.016859f, 0.005952f, -0.004786f, -0.013832f, -0.020263f, -0.023725f, -0.024216f, -0.022003f, -0.017612f, -0.011677f, -0.004775f, 0.002521f, 0.009563f, 0.015703f, 0.020359f, 0.022925f, 0.022827f, 0.019784f, 0.013935f, 0.005753f, -0.003874f, -0.013545f, -0.021660f, -0.026897f, -0.028311f, -0.025374f, -0.018350f, -0.008412f, 0.002946f, 0.014306f, 0.024069f, 0.030568f, 0.032809f, 0.030492f, 0.023239f, 0.010889f, -0.005219f, -0.022346f, -0.037579f, -0.047634f, -0.048151f, -0.035867f, -0.012072f, 0.017486f, 0.045290f, 0.062856f, - 0.061692f, 0.038856f, 0.001862f, -0.035283f, -0.059860f, -0.062195f, -0.036787f, 0.007937f, 0.044601f, 0.046634f, 0.017252f, -0.012271f, -0.017935f, -0.006337f, 0.002146f, 0.001029f, -0.001521f, -0.000459f, 0.000817f, -0.000067f, -0.000660f, 0.000353f, 0.000950f, 0.000276f, -0.000030f, 0.000569f, 0.000705f, 0.000053f, -0.000227f, 0.000069f, -0.000002f, -0.000506f, -0.000627f, -0.000349f, -0.000332f, -0.000528f, -0.000394f, -0.000037f, 0.000086f, 0.000082f, 0.000281f, 0.000519f, 0.000524f, 0.000449f, 0.000475f, 0.000435f, 0.000230f, 0.000050f}, - {0.014162f, 0.079119f, 0.192373f, 0.273045f, 0.251924f, 0.149637f, 0.020926f, -0.122502f, -0.278057f, -0.388982f, -0.399742f, -0.356867f, -0.363688f, -0.430590f, -0.461817f, -0.411004f, -0.354648f, -0.367414f, -0.410842f, -0.409099f, -0.367287f, -0.341672f, -0.339623f, -0.322888f, -0.283709f, -0.252116f, -0.238516f, -0.220734f, -0.185306f, -0.144497f, -0.113533f, -0.096567f, -0.091951f, -0.092389f, -0.083826f, -0.057563f, -0.019655f, 0.018077f, 0.048708f, 0.067918f, 0.071323f, 0.059246f, 0.036544f, 0.005242f, -0.035854f, -0.084054f, -0.132500f, -0.177134f, -0.218733f, -0.259382f, -0.301515f, -0.348575f, -0.402779f, -0.463490f, -0.528869f, -0.596495f, -0.662478f, -0.723615f, -0.779891f, -0.831486f, -0.875283f, -0.908241f, -0.931583f, -0.947488f, -0.954629f, -0.951018f, -0.937871f, -0.916524f, -0.884692f, -0.839543f, -0.781782f, -0.714062f, -0.638421f, -0.557458f, -0.475213f, -0.395089f, -0.318909f, -0.248274f, -0.184492f, -0.127606f, -0.077917f, -0.037597f, -0.008569f, 0.009628f, 0.017312f, 0.011628f, -0.011443f, -0.053626f, -0.115452f, -0.199369f, -0.308884f, -0.444843f, -0.604506f, -0.784300f, -0.981549f, -1.192357f, - -1.409125f, -1.622569f, -1.826460f, -2.017987f, -2.192991f, -2.344549f, -2.468303f, -2.565362f, -2.636848f, -2.679384f, -2.689877f, -2.671088f, -2.627835f, -2.561060f, -2.470869f, -2.362808f, -2.245776f, -2.125343f, -2.003654f, -1.884247f, -1.772264f, -1.670297f, -1.577576f, -1.493238f, -1.418065f, -1.353009f, -1.297583f, -1.249988f, -1.208402f, -1.171974f, -1.140140f, -1.111192f, -1.083035f, -1.055899f, -1.032625f, -1.015658f, -1.005579f, -1.003175f, -1.010700f, -1.029943f, -1.060636f, -1.101560f, -1.151968f, -1.211363f, -1.278569f, -1.351093f, -1.425253f, -1.497653f, -1.566149f, -1.627979f, -1.677910f, -1.710781f, -1.724954f, -1.720277f, -1.694168f, -1.643923f, -1.571750f, -1.482954f, -1.380137f, -1.263897f, -1.138026f, -1.008765f, -0.879318f, -0.749674f, -0.621380f, -0.498272f, -0.382754f, -0.274712f, -0.174008f, -0.081729f, 0.000918f, 0.073950f, 0.139119f, 0.198670f, 0.253061f, 0.301763f, 0.347006f, 0.393182f, 0.441347f, 0.489362f, 0.538806f, 0.595052f, 0.658904f, 0.726443f, 0.798707f, 0.881537f, 0.974294f, 1.070091f, 1.167737f, 1.269490f, 1.366474f, 1.441595f, 1.485849f, 1.494333f, 1.449955f, 1.333119f, - 1.143665f, 0.890490f, 0.570130f, 0.186750f, -0.219462f, -0.600083f, -0.930100f, -1.155403f, -1.143394f, -0.798347f, -0.249038f, 0.187134f, 0.296878f, 0.165312f, 0.025951f, -0.009102f, 0.005434f, 0.003510f, -0.006460f, -0.001638f, 0.005342f, 0.000501f, -0.004432f, 0.000038f, 0.003617f, -0.000337f, -0.002882f, 0.000630f, 0.002437f, -0.000642f, -0.001890f, 0.000764f, 0.001542f, -0.000762f, -0.001213f, 0.000714f, 0.000864f, -0.000752f, -0.000696f, 0.000595f, 0.000364f, -0.000627f, -0.000266f, 0.000442f, 0.000006f, -0.000404f, 0.000101f, 0.000251f} - }, - { - {0.042732f, 0.113314f, 0.176202f, 0.252685f, 0.281884f, 0.174262f, -0.028902f, -0.180587f, -0.233986f, -0.287382f, -0.386130f, -0.425463f, -0.325835f, -0.178382f, -0.114461f, -0.125567f, -0.120866f, -0.091304f, -0.099788f, -0.149408f, -0.175401f, -0.160079f, -0.161819f, -0.218211f, -0.289828f, -0.318343f, -0.292465f, -0.240485f, -0.191978f, -0.159418f, -0.133666f, -0.090469f, -0.019098f, 0.054253f, 0.088015f, 0.069071f, 0.020080f, -0.033141f, -0.083529f, -0.132397f, -0.175396f, -0.206306f, -0.226074f, -0.242406f, -0.263892f, -0.296267f, -0.341457f, -0.399032f, -0.469188f, -0.552919f, -0.648193f, -0.748197f, -0.845109f, -0.933962f, -1.011947f, -1.076813f, -1.128569f, -1.171494f, -1.212173f, -1.255672f, -1.304491f, -1.359954f, -1.422038f, -1.487064f, -1.547033f, -1.592617f, -1.616640f, -1.614662f, -1.584205f, -1.525739f, -1.444021f, -1.346192f, -1.237997f, -1.123060f, -1.005499f, -0.890943f, -0.784138f, -0.686938f, -0.599442f, -0.522145f, -0.456501f, -0.404312f, -0.367214f, -0.346412f, -0.342532f, -0.355339f, -0.382875f, -0.421110f, -0.466097f, -0.517365f, -0.578173f, -0.651999f, -0.740613f, -0.846331f, -0.973383f, -1.124324f, - -1.296390f, -1.483783f, -1.682030f, -1.886821f, -2.089453f, -2.277670f, -2.441976f, -2.578074f, -2.682664f, -2.751303f, -2.783009f, -2.783561f, -2.760778f, -2.718619f, -2.658947f, -2.586450f, -2.507126f, -2.422614f, -2.330300f, -2.229205f, -2.122072f, -2.011250f, -1.896456f, -1.778273f, -1.660862f, -1.549002f, -1.444261f, -1.345971f, -1.254532f, -1.171530f, -1.097176f, -1.029833f, -0.968588f, -0.914945f, -0.871217f, -0.838134f, -0.814965f, -0.801436f, -0.798271f, -0.805721f, -0.822625f, -0.847489f, -0.879927f, -0.920297f, -0.968011f, -1.020724f, -1.075381f, -1.129486f, -1.180488f, -1.223986f, -1.253993f, -1.265791f, -1.257367f, -1.227234f, -1.172823f, -1.093165f, -0.991598f, -0.873296f, -0.741394f, -0.598215f, -0.448782f, -0.299472f, -0.153850f, -0.013150f, 0.119688f, 0.239921f, 0.344752f, 0.434094f, 0.507626f, 0.563828f, 0.602225f, 0.624544f, 0.633321f, 0.630521f, 0.617681f, 0.596899f, 0.571519f, 0.545119f, 0.519474f, 0.494984f, 0.473597f, 0.458663f, 0.451052f, 0.449131f, 0.453874f, 0.469249f, 0.496098f, 0.531445f, 0.575166f, 0.629762f, 0.691627f, 0.750864f, 0.800872f, 0.837878f, 0.850653f, 0.823774f, - 0.751946f, 0.637275f, 0.475061f, 0.262253f, 0.017602f, -0.229919f, -0.464480f, -0.657131f, -0.724380f, -0.581353f, -0.268217f, 0.032040f, 0.155663f, 0.110828f, 0.028755f, -0.002038f, 0.003059f, 0.003053f, -0.003352f, -0.001791f, 0.002885f, 0.000944f, -0.002489f, -0.000503f, 0.002099f, 0.000264f, -0.001661f, 0.000033f, 0.001463f, -0.000069f, -0.001127f, 0.000210f, 0.000935f, -0.000257f, -0.000759f, 0.000241f, 0.000524f, -0.000328f, -0.000468f, 0.000216f, 0.000230f, -0.000297f, -0.000215f, 0.000167f, 0.000034f, -0.000183f, 0.000005f, 0.000090f}, - {-0.250909f, -0.661336f, -0.861225f, -0.846916f, -0.664218f, -0.342701f, 0.076872f, 0.488737f, 0.753326f, 0.794678f, 0.644668f, 0.387694f, 0.087110f, -0.222402f, -0.495680f, -0.664775f, -0.675318f, -0.525707f, -0.265768f, 0.036302f, 0.319925f, 0.533105f, 0.627711f, 0.573382f, 0.381856f, 0.110168f, -0.167080f, -0.388791f, -0.515916f, -0.526706f, -0.420116f, -0.223812f, 0.011549f, 0.230567f, 0.386430f, 0.446123f, 0.398575f, 0.263648f, 0.086018f, -0.086830f, -0.222117f, -0.302172f, -0.318170f, -0.270419f, -0.172076f, -0.047006f, 0.077560f, 0.176959f, 0.232529f, 0.235587f, 0.190743f, 0.114082f, 0.026025f, -0.055703f, -0.118661f, -0.155078f, -0.161686f, -0.140558f, -0.098598f, -0.044962f, 0.011333f, 0.062126f, 0.100520f, 0.122077f, 0.125459f, 0.111411f, 0.081471f, 0.037876f, -0.015751f, -0.073456f, -0.125593f, -0.158578f, -0.158714f, -0.119549f, -0.047405f, 0.039448f, 0.117161f, 0.164530f, 0.170112f, 0.135882f, 0.075272f, 0.006299f, -0.055781f, -0.101955f, -0.128540f, -0.134431f, -0.119079f, -0.082497f, -0.027309f, 0.038596f, 0.101279f, 0.143737f, 0.152211f, 0.122702f, 0.063597f, -0.007521f, - -0.071051f, -0.112331f, -0.125169f, -0.111443f, -0.078301f, -0.034928f, 0.009839f, 0.048818f, 0.077025f, 0.091668f, 0.091678f, 0.077234f, 0.049800f, 0.012550f, -0.029326f, -0.068680f, -0.097051f, -0.106411f, -0.092004f, -0.054995f, -0.003302f, 0.050087f, 0.090874f, 0.108187f, 0.098374f, 0.065929f, 0.021166f, -0.023770f, -0.058591f, -0.077199f, -0.078302f, -0.064504f, -0.040631f, -0.012245f, 0.015405f, 0.038112f, 0.053035f, 0.058570f, 0.054242f, 0.040853f, 0.020584f, -0.003249f, -0.026598f, -0.045207f, -0.055424f, -0.055094f, -0.044048f, -0.024168f, 0.000785f, 0.025763f, 0.045560f, 0.056006f, 0.054767f, 0.041927f, 0.020280f, -0.005230f, -0.028930f, -0.045847f, -0.052644f, -0.048279f, -0.034253f, -0.014018f, 0.008118f, 0.027817f, 0.041328f, 0.046258f, 0.042077f, 0.029925f, 0.012195f, -0.007720f, -0.025950f, -0.039008f, -0.044357f, -0.040660f, -0.028307f, -0.009797f, 0.010916f, 0.029525f, 0.041957f, 0.045064f, 0.037975f, 0.022610f, 0.002456f, -0.018582f, -0.036115f, -0.045810f, -0.045173f, -0.034131f, -0.014018f, 0.012025f, 0.037399f, 0.053505f, 0.054220f, 0.038177f, 0.008264f, -0.027360f, - -0.054784f, -0.060832f, -0.042426f, -0.007657f, 0.030216f, 0.055369f, 0.051860f, 0.017076f, -0.025749f, -0.042575f, -0.023699f, 0.005650f, 0.016563f, 0.008110f, -0.000864f, -0.000797f, 0.001703f, 0.000500f, -0.001538f, -0.001141f, -0.000404f, -0.001262f, -0.001848f, -0.000816f, 0.000201f, 0.000154f, 0.000304f, 0.001238f, 0.001720f, 0.001244f, 0.000819f, 0.000784f, 0.000347f, -0.000573f, -0.001141f, -0.001202f, -0.001315f, -0.001446f, -0.001099f, -0.000403f, 0.000147f, 0.000578f, 0.001107f, 0.001494f, 0.001472f, 0.001216f, 0.000888f, 0.000349f} - }, - { - {-0.250909f, -0.661336f, -0.861225f, -0.846916f, -0.664218f, -0.342701f, 0.076872f, 0.488737f, 0.753326f, 0.794678f, 0.644668f, 0.387694f, 0.087110f, -0.222402f, -0.495680f, -0.664775f, -0.675318f, -0.525707f, -0.265768f, 0.036302f, 0.319925f, 0.533105f, 0.627711f, 0.573382f, 0.381856f, 0.110168f, -0.167080f, -0.388791f, -0.515916f, -0.526706f, -0.420116f, -0.223812f, 0.011549f, 0.230567f, 0.386430f, 0.446123f, 0.398575f, 0.263648f, 0.086018f, -0.086830f, -0.222117f, -0.302172f, -0.318170f, -0.270419f, -0.172076f, -0.047006f, 0.077560f, 0.176959f, 0.232529f, 0.235587f, 0.190743f, 0.114082f, 0.026025f, -0.055703f, -0.118661f, -0.155078f, -0.161686f, -0.140558f, -0.098598f, -0.044962f, 0.011333f, 0.062126f, 0.100520f, 0.122077f, 0.125459f, 0.111411f, 0.081471f, 0.037876f, -0.015751f, -0.073456f, -0.125593f, -0.158578f, -0.158714f, -0.119549f, -0.047405f, 0.039448f, 0.117161f, 0.164530f, 0.170112f, 0.135882f, 0.075272f, 0.006299f, -0.055781f, -0.101955f, -0.128540f, -0.134431f, -0.119079f, -0.082497f, -0.027309f, 0.038596f, 0.101279f, 0.143737f, 0.152211f, 0.122702f, 0.063597f, -0.007521f, - -0.071051f, -0.112331f, -0.125169f, -0.111443f, -0.078301f, -0.034928f, 0.009839f, 0.048818f, 0.077025f, 0.091668f, 0.091678f, 0.077234f, 0.049800f, 0.012550f, -0.029326f, -0.068680f, -0.097051f, -0.106411f, -0.092004f, -0.054995f, -0.003302f, 0.050087f, 0.090874f, 0.108187f, 0.098374f, 0.065929f, 0.021166f, -0.023770f, -0.058591f, -0.077199f, -0.078302f, -0.064504f, -0.040631f, -0.012245f, 0.015405f, 0.038112f, 0.053035f, 0.058570f, 0.054242f, 0.040853f, 0.020584f, -0.003249f, -0.026598f, -0.045207f, -0.055424f, -0.055094f, -0.044048f, -0.024168f, 0.000785f, 0.025763f, 0.045560f, 0.056006f, 0.054767f, 0.041927f, 0.020280f, -0.005230f, -0.028930f, -0.045847f, -0.052644f, -0.048279f, -0.034253f, -0.014018f, 0.008118f, 0.027817f, 0.041328f, 0.046258f, 0.042077f, 0.029925f, 0.012195f, -0.007720f, -0.025950f, -0.039008f, -0.044357f, -0.040660f, -0.028307f, -0.009797f, 0.010916f, 0.029525f, 0.041957f, 0.045064f, 0.037975f, 0.022610f, 0.002456f, -0.018582f, -0.036115f, -0.045810f, -0.045173f, -0.034131f, -0.014018f, 0.012025f, 0.037399f, 0.053505f, 0.054220f, 0.038177f, 0.008264f, -0.027360f, - -0.054784f, -0.060832f, -0.042426f, -0.007657f, 0.030216f, 0.055369f, 0.051860f, 0.017076f, -0.025749f, -0.042575f, -0.023699f, 0.005650f, 0.016563f, 0.008110f, -0.000864f, -0.000797f, 0.001703f, 0.000500f, -0.001538f, -0.001141f, -0.000404f, -0.001262f, -0.001848f, -0.000816f, 0.000201f, 0.000154f, 0.000304f, 0.001238f, 0.001720f, 0.001244f, 0.000819f, 0.000784f, 0.000347f, -0.000573f, -0.001141f, -0.001202f, -0.001315f, -0.001446f, -0.001099f, -0.000403f, 0.000147f, 0.000578f, 0.001107f, 0.001494f, 0.001472f, 0.001216f, 0.000888f, 0.000349f}, - {0.042732f, 0.113314f, 0.176202f, 0.252685f, 0.281884f, 0.174262f, -0.028902f, -0.180587f, -0.233986f, -0.287382f, -0.386130f, -0.425463f, -0.325835f, -0.178382f, -0.114461f, -0.125567f, -0.120866f, -0.091304f, -0.099788f, -0.149408f, -0.175401f, -0.160079f, -0.161819f, -0.218211f, -0.289828f, -0.318343f, -0.292465f, -0.240485f, -0.191978f, -0.159418f, -0.133666f, -0.090469f, -0.019098f, 0.054253f, 0.088015f, 0.069071f, 0.020080f, -0.033141f, -0.083529f, -0.132397f, -0.175396f, -0.206306f, -0.226074f, -0.242406f, -0.263892f, -0.296267f, -0.341457f, -0.399032f, -0.469188f, -0.552919f, -0.648193f, -0.748197f, -0.845109f, -0.933962f, -1.011947f, -1.076813f, -1.128569f, -1.171494f, -1.212173f, -1.255672f, -1.304491f, -1.359954f, -1.422038f, -1.487064f, -1.547033f, -1.592617f, -1.616640f, -1.614662f, -1.584205f, -1.525739f, -1.444021f, -1.346192f, -1.237997f, -1.123060f, -1.005499f, -0.890943f, -0.784138f, -0.686938f, -0.599442f, -0.522145f, -0.456501f, -0.404312f, -0.367214f, -0.346412f, -0.342532f, -0.355339f, -0.382875f, -0.421110f, -0.466097f, -0.517365f, -0.578173f, -0.651999f, -0.740613f, -0.846331f, -0.973383f, -1.124324f, - -1.296390f, -1.483783f, -1.682030f, -1.886821f, -2.089453f, -2.277670f, -2.441976f, -2.578074f, -2.682664f, -2.751303f, -2.783009f, -2.783561f, -2.760778f, -2.718619f, -2.658947f, -2.586450f, -2.507126f, -2.422614f, -2.330300f, -2.229205f, -2.122072f, -2.011250f, -1.896456f, -1.778273f, -1.660862f, -1.549002f, -1.444261f, -1.345971f, -1.254532f, -1.171530f, -1.097176f, -1.029833f, -0.968588f, -0.914945f, -0.871217f, -0.838134f, -0.814965f, -0.801436f, -0.798271f, -0.805721f, -0.822625f, -0.847489f, -0.879927f, -0.920297f, -0.968011f, -1.020724f, -1.075381f, -1.129486f, -1.180488f, -1.223986f, -1.253993f, -1.265791f, -1.257367f, -1.227234f, -1.172823f, -1.093165f, -0.991598f, -0.873296f, -0.741394f, -0.598215f, -0.448782f, -0.299472f, -0.153850f, -0.013150f, 0.119688f, 0.239921f, 0.344752f, 0.434094f, 0.507626f, 0.563828f, 0.602225f, 0.624544f, 0.633321f, 0.630521f, 0.617681f, 0.596899f, 0.571519f, 0.545119f, 0.519474f, 0.494984f, 0.473597f, 0.458663f, 0.451052f, 0.449131f, 0.453874f, 0.469249f, 0.496098f, 0.531445f, 0.575166f, 0.629762f, 0.691627f, 0.750864f, 0.800872f, 0.837878f, 0.850653f, 0.823774f, - 0.751946f, 0.637275f, 0.475061f, 0.262253f, 0.017602f, -0.229919f, -0.464480f, -0.657131f, -0.724380f, -0.581353f, -0.268217f, 0.032040f, 0.155663f, 0.110828f, 0.028755f, -0.002038f, 0.003059f, 0.003053f, -0.003352f, -0.001791f, 0.002885f, 0.000944f, -0.002489f, -0.000503f, 0.002099f, 0.000264f, -0.001661f, 0.000033f, 0.001463f, -0.000069f, -0.001127f, 0.000210f, 0.000935f, -0.000257f, -0.000759f, 0.000241f, 0.000524f, -0.000328f, -0.000468f, 0.000216f, 0.000230f, -0.000297f, -0.000215f, 0.000167f, 0.000034f, -0.000183f, 0.000005f, 0.000090f} - }, - { - {-0.008117f, -0.029088f, -0.057048f, -0.081735f, -0.092189f, -0.085100f, -0.046258f, 0.061013f, 0.247665f, 0.439587f, 0.518097f, 0.436893f, 0.258432f, 0.069209f, -0.085972f, -0.179131f, -0.182780f, -0.110632f, -0.018595f, 0.061348f, 0.137561f, 0.195698f, 0.184660f, 0.090981f, -0.029833f, -0.119427f, -0.163497f, -0.160991f, -0.107102f, -0.026915f, 0.027637f, 0.034786f, 0.014084f, -0.027320f, -0.111107f, -0.240023f, -0.378923f, -0.496585f, -0.591277f, -0.668375f, -0.726093f, -0.769534f, -0.811105f, -0.852336f, -0.884973f, -0.908307f, -0.928671f, -0.947596f, -0.965411f, -0.988396f, -1.019242f, -1.049599f, -1.072930f, -1.095057f, -1.123669f, -1.157984f, -1.195511f, -1.238117f, -1.285188f, -1.330071f, -1.368128f, -1.401405f, -1.433429f, -1.465837f, -1.500686f, -1.540528f, -1.585844f, -1.634999f, -1.684816f, -1.729881f, -1.764985f, -1.789120f, -1.803259f, -1.805236f, -1.792176f, -1.766414f, -1.732839f, -1.691843f, -1.640852f, -1.580948f, -1.516199f, -1.448521f, -1.378711f, -1.310591f, -1.249109f, -1.195647f, -1.148671f, -1.107399f, -1.072096f, -1.042222f, -1.016132f, -0.991629f, -0.966575f, -0.940263f, -0.913765f, -0.887830f, - -0.861818f, -0.835753f, -0.811153f, -0.788325f, -0.765201f, -0.740195f, -0.713773f, -0.686076f, -0.655627f, -0.621644f, -0.585391f, -0.548400f, -0.511253f, -0.474595f, -0.439641f, -0.407373f, -0.378310f, -0.352841f, -0.330952f, -0.312187f, -0.296447f, -0.283965f, -0.274268f, -0.266290f, -0.259673f, -0.254827f, -0.251774f, -0.250098f, -0.249925f, -0.251995f, -0.257051f, -0.265902f, -0.279634f, -0.299233f, -0.325552f, -0.359646f, -0.402100f, -0.451970f, -0.507511f, -0.567748f, -0.632019f, -0.698338f, -0.763997f, -0.827724f, -0.889545f, -0.948515f, -1.002452f, -1.050350f, -1.093294f, -1.132284f, -1.166691f, -1.195985f, -1.221676f, -1.245932f, -1.269000f, -1.289688f, -1.308062f, -1.325687f, -1.342928f, -1.357937f, -1.369096f, -1.376762f, -1.381406f, -1.381343f, -1.373935f, -1.358365f, -1.335436f, -1.304589f, -1.262934f, -1.208217f, -1.141032f, -1.062204f, -0.969496f, -0.859997f, -0.734719f, -0.596717f, -0.445375f, -0.277897f, -0.096215f, 0.094002f, 0.291185f, 0.497134f, 0.708325f, 0.916667f, 1.119036f, 1.316063f, 1.501707f, 1.665244f, 1.802397f, 1.911586f, 1.981297f, 1.995663f, 1.949047f, 1.839685f, 1.656456f, 1.391696f, - 1.058526f, 0.675467f, 0.249613f, -0.199264f, -0.619582f, -0.963618f, -1.208061f, -1.294816f, -1.109269f, -0.622127f, -0.037804f, 0.321944f, 0.325104f, 0.139499f, 0.005477f, -0.011392f, 0.006042f, 0.001000f, -0.006817f, 0.000382f, 0.005296f, -0.001059f, -0.004165f, 0.001245f, 0.003241f, -0.001280f, -0.002498f, 0.001306f, 0.002025f, -0.001148f, -0.001520f, 0.001099f, 0.001208f, -0.000964f, -0.000921f, 0.000826f, 0.000648f, -0.000761f, -0.000515f, 0.000575f, 0.000271f, -0.000542f, -0.000203f, 0.000365f, 0.000014f, -0.000310f, 0.000064f, 0.000181f}, - {-0.129981f, -0.372476f, -0.578529f, -0.729243f, -0.764475f, -0.635793f, -0.411234f, -0.258736f, -0.302102f, -0.525369f, -0.805126f, -0.991322f, -0.983991f, -0.803176f, -0.584723f, -0.458600f, -0.436987f, -0.451679f, -0.459616f, -0.451677f, -0.395154f, -0.251867f, -0.050784f, 0.123344f, 0.221870f, 0.269667f, 0.313652f, 0.376737f, 0.462841f, 0.567567f, 0.673170f, 0.754338f, 0.795107f, 0.792591f, 0.752470f, 0.691691f, 0.634947f, 0.595069f, 0.562305f, 0.519235f, 0.458575f, 0.383012f, 0.298227f, 0.211056f, 0.126529f, 0.043347f, -0.042514f, -0.130277f, -0.215859f, -0.298302f, -0.378918f, -0.456881f, -0.530468f, -0.598896f, -0.658825f, -0.703316f, -0.727822f, -0.733246f, -0.721133f, -0.690755f, -0.642644f, -0.580117f, -0.505916f, -0.421525f, -0.330087f, -0.235562f, -0.138750f, -0.037980f, 0.066169f, 0.169625f, 0.267531f, 0.355691f, 0.430568f, 0.490492f, 0.536392f, 0.569778f, 0.590566f, 0.597566f, 0.590084f, 0.568477f, 0.533880f, 0.487697f, 0.431144f, 0.365726f, 0.294260f, 0.220525f, 0.147743f, 0.078228f, 0.014043f, -0.043456f, -0.094326f, -0.138832f, -0.176068f, -0.205120f, -0.226671f, -0.241986f, - -0.251293f, -0.254596f, -0.252994f, -0.247846f, -0.239708f, -0.229246f, -0.218093f, -0.207780f, -0.198730f, -0.190983f, -0.184906f, -0.180621f, -0.177602f, -0.175210f, -0.173034f, -0.170646f, -0.167447f, -0.162637f, -0.155080f, -0.143537f, -0.127170f, -0.105418f, -0.077693f, -0.043897f, -0.004918f, 0.038190f, 0.084983f, 0.134821f, 0.186035f, 0.236843f, 0.286214f, 0.332895f, 0.374623f, 0.409400f, 0.436550f, 0.455532f, 0.464788f, 0.462789f, 0.449137f, 0.423624f, 0.385300f, 0.333570f, 0.269292f, 0.193801f, 0.107779f, 0.012194f, -0.090333f, -0.196122f, -0.301746f, -0.403692f, -0.497310f, -0.577424f, -0.639930f, -0.681870f, -0.700365f, -0.693007f, -0.659496f, -0.601723f, -0.522170f, -0.423547f, -0.310025f, -0.187155f, -0.060052f, 0.067102f, 0.189708f, 0.302691f, 0.402232f, 0.486145f, 0.552331f, 0.598446f, 0.623264f, 0.626838f, 0.609193f, 0.570294f, 0.511336f, 0.434835f, 0.343621f, 0.240782f, 0.130231f, 0.016430f, -0.096110f, -0.202773f, -0.299055f, -0.381032f, -0.445029f, -0.487486f, -0.506123f, -0.500243f, -0.469027f, -0.411517f, -0.329438f, -0.227615f, -0.111000f, 0.014761f, 0.139062f, 0.247906f, - 0.330788f, 0.380428f, 0.386990f, 0.342751f, 0.253257f, 0.133183f, -0.006044f, -0.145689f, -0.238420f, -0.230859f, -0.127035f, -0.005841f, 0.051207f, 0.037489f, 0.006530f, -0.003104f, 0.001464f, 0.002113f, -0.000555f, 0.000795f, 0.003689f, 0.003262f, 0.002035f, 0.003451f, 0.005181f, 0.004704f, 0.004097f, 0.005202f, 0.006175f, 0.005667f, 0.005284f, 0.005991f, 0.006394f, 0.005824f, 0.005470f, 0.005772f, 0.005730f, 0.005088f, 0.004674f, 0.004609f, 0.004237f, 0.003551f, 0.003059f, 0.002698f, 0.002121f, 0.001454f, 0.000907f, 0.000332f} - }, - { - {-0.129981f, -0.372476f, -0.578529f, -0.729243f, -0.764475f, -0.635793f, -0.411234f, -0.258736f, -0.302102f, -0.525369f, -0.805126f, -0.991322f, -0.983991f, -0.803176f, -0.584723f, -0.458600f, -0.436987f, -0.451679f, -0.459616f, -0.451677f, -0.395154f, -0.251867f, -0.050784f, 0.123344f, 0.221870f, 0.269667f, 0.313652f, 0.376737f, 0.462841f, 0.567567f, 0.673170f, 0.754338f, 0.795107f, 0.792591f, 0.752470f, 0.691691f, 0.634947f, 0.595069f, 0.562305f, 0.519235f, 0.458575f, 0.383012f, 0.298227f, 0.211056f, 0.126529f, 0.043347f, -0.042514f, -0.130277f, -0.215859f, -0.298302f, -0.378918f, -0.456881f, -0.530468f, -0.598896f, -0.658825f, -0.703316f, -0.727822f, -0.733246f, -0.721133f, -0.690755f, -0.642644f, -0.580117f, -0.505916f, -0.421525f, -0.330087f, -0.235562f, -0.138750f, -0.037980f, 0.066169f, 0.169625f, 0.267531f, 0.355691f, 0.430568f, 0.490492f, 0.536392f, 0.569778f, 0.590566f, 0.597566f, 0.590084f, 0.568477f, 0.533880f, 0.487697f, 0.431144f, 0.365726f, 0.294260f, 0.220525f, 0.147743f, 0.078228f, 0.014043f, -0.043456f, -0.094326f, -0.138832f, -0.176068f, -0.205120f, -0.226671f, -0.241986f, - -0.251293f, -0.254596f, -0.252994f, -0.247846f, -0.239708f, -0.229246f, -0.218093f, -0.207780f, -0.198730f, -0.190983f, -0.184906f, -0.180621f, -0.177602f, -0.175210f, -0.173034f, -0.170646f, -0.167447f, -0.162637f, -0.155080f, -0.143537f, -0.127170f, -0.105418f, -0.077693f, -0.043897f, -0.004918f, 0.038190f, 0.084983f, 0.134821f, 0.186035f, 0.236843f, 0.286214f, 0.332895f, 0.374623f, 0.409400f, 0.436550f, 0.455532f, 0.464788f, 0.462789f, 0.449137f, 0.423624f, 0.385300f, 0.333570f, 0.269292f, 0.193801f, 0.107779f, 0.012194f, -0.090333f, -0.196122f, -0.301746f, -0.403692f, -0.497310f, -0.577424f, -0.639930f, -0.681870f, -0.700365f, -0.693007f, -0.659496f, -0.601723f, -0.522170f, -0.423547f, -0.310025f, -0.187155f, -0.060052f, 0.067102f, 0.189708f, 0.302691f, 0.402232f, 0.486145f, 0.552331f, 0.598446f, 0.623264f, 0.626838f, 0.609193f, 0.570294f, 0.511336f, 0.434835f, 0.343621f, 0.240782f, 0.130231f, 0.016430f, -0.096110f, -0.202773f, -0.299055f, -0.381032f, -0.445029f, -0.487486f, -0.506123f, -0.500243f, -0.469027f, -0.411517f, -0.329438f, -0.227615f, -0.111000f, 0.014761f, 0.139062f, 0.247906f, - 0.330788f, 0.380428f, 0.386990f, 0.342751f, 0.253257f, 0.133183f, -0.006044f, -0.145689f, -0.238420f, -0.230859f, -0.127035f, -0.005841f, 0.051207f, 0.037489f, 0.006530f, -0.003104f, 0.001464f, 0.002113f, -0.000555f, 0.000795f, 0.003689f, 0.003262f, 0.002035f, 0.003451f, 0.005181f, 0.004704f, 0.004097f, 0.005202f, 0.006175f, 0.005667f, 0.005284f, 0.005991f, 0.006394f, 0.005824f, 0.005470f, 0.005772f, 0.005730f, 0.005088f, 0.004674f, 0.004609f, 0.004237f, 0.003551f, 0.003059f, 0.002698f, 0.002121f, 0.001454f, 0.000907f, 0.000332f}, - {-0.008117f, -0.029088f, -0.057048f, -0.081735f, -0.092189f, -0.085100f, -0.046258f, 0.061013f, 0.247665f, 0.439587f, 0.518097f, 0.436893f, 0.258432f, 0.069209f, -0.085972f, -0.179131f, -0.182780f, -0.110632f, -0.018595f, 0.061348f, 0.137561f, 0.195698f, 0.184660f, 0.090981f, -0.029833f, -0.119427f, -0.163497f, -0.160991f, -0.107102f, -0.026915f, 0.027637f, 0.034786f, 0.014084f, -0.027320f, -0.111107f, -0.240023f, -0.378923f, -0.496585f, -0.591277f, -0.668375f, -0.726093f, -0.769534f, -0.811105f, -0.852336f, -0.884973f, -0.908307f, -0.928671f, -0.947596f, -0.965411f, -0.988396f, -1.019242f, -1.049599f, -1.072930f, -1.095057f, -1.123669f, -1.157984f, -1.195511f, -1.238117f, -1.285188f, -1.330071f, -1.368128f, -1.401405f, -1.433429f, -1.465837f, -1.500686f, -1.540528f, -1.585844f, -1.634999f, -1.684816f, -1.729881f, -1.764985f, -1.789120f, -1.803259f, -1.805236f, -1.792176f, -1.766414f, -1.732839f, -1.691843f, -1.640852f, -1.580948f, -1.516199f, -1.448521f, -1.378711f, -1.310591f, -1.249109f, -1.195647f, -1.148671f, -1.107399f, -1.072096f, -1.042222f, -1.016132f, -0.991629f, -0.966575f, -0.940263f, -0.913765f, -0.887830f, - -0.861818f, -0.835753f, -0.811153f, -0.788325f, -0.765201f, -0.740195f, -0.713773f, -0.686076f, -0.655627f, -0.621644f, -0.585391f, -0.548400f, -0.511253f, -0.474595f, -0.439641f, -0.407373f, -0.378310f, -0.352841f, -0.330952f, -0.312187f, -0.296447f, -0.283965f, -0.274268f, -0.266290f, -0.259673f, -0.254827f, -0.251774f, -0.250098f, -0.249925f, -0.251995f, -0.257051f, -0.265902f, -0.279634f, -0.299233f, -0.325552f, -0.359646f, -0.402100f, -0.451970f, -0.507511f, -0.567748f, -0.632019f, -0.698338f, -0.763997f, -0.827724f, -0.889545f, -0.948515f, -1.002452f, -1.050350f, -1.093294f, -1.132284f, -1.166691f, -1.195985f, -1.221676f, -1.245932f, -1.269000f, -1.289688f, -1.308062f, -1.325687f, -1.342928f, -1.357937f, -1.369096f, -1.376762f, -1.381406f, -1.381343f, -1.373935f, -1.358365f, -1.335436f, -1.304589f, -1.262934f, -1.208217f, -1.141032f, -1.062204f, -0.969496f, -0.859997f, -0.734719f, -0.596717f, -0.445375f, -0.277897f, -0.096215f, 0.094002f, 0.291185f, 0.497134f, 0.708325f, 0.916667f, 1.119036f, 1.316063f, 1.501707f, 1.665244f, 1.802397f, 1.911586f, 1.981297f, 1.995663f, 1.949047f, 1.839685f, 1.656456f, 1.391696f, - 1.058526f, 0.675467f, 0.249613f, -0.199264f, -0.619582f, -0.963618f, -1.208061f, -1.294816f, -1.109269f, -0.622127f, -0.037804f, 0.321944f, 0.325104f, 0.139499f, 0.005477f, -0.011392f, 0.006042f, 0.001000f, -0.006817f, 0.000382f, 0.005296f, -0.001059f, -0.004165f, 0.001245f, 0.003241f, -0.001280f, -0.002498f, 0.001306f, 0.002025f, -0.001148f, -0.001520f, 0.001099f, 0.001208f, -0.000964f, -0.000921f, 0.000826f, 0.000648f, -0.000761f, -0.000515f, 0.000575f, 0.000271f, -0.000542f, -0.000203f, 0.000365f, 0.000014f, -0.000310f, 0.000064f, 0.000181f} - }, - { - {0.008190f, 0.034888f, 0.081874f, 0.116453f, 0.067094f, -0.082555f, -0.227904f, -0.249422f, -0.166350f, -0.098117f, -0.087469f, -0.065513f, 0.001855f, 0.042159f, -0.012688f, -0.131557f, -0.247601f, -0.349249f, -0.457508f, -0.561835f, -0.630448f, -0.658599f, -0.667824f, -0.671646f, -0.668196f, -0.656704f, -0.642420f, -0.629382f, -0.617003f, -0.600360f, -0.572717f, -0.533674f, -0.493429f, -0.462386f, -0.438760f, -0.412139f, -0.375853f, -0.330971f, -0.282717f, -0.238117f, -0.203462f, -0.180067f, -0.164967f, -0.156908f, -0.157974f, -0.169237f, -0.189236f, -0.216716f, -0.250505f, -0.286503f, -0.318305f, -0.341119f, -0.353602f, -0.357480f, -0.357254f, -0.358766f, -0.366736f, -0.384550f, -0.415390f, -0.460458f, -0.516507f, -0.578128f, -0.641870f, -0.705454f, -0.764761f, -0.815673f, -0.858195f, -0.895392f, -0.928966f, -0.958784f, -0.985672f, -1.011344f, -1.035621f, -1.056027f, -1.070215f, -1.077265f, -1.076660f, -1.067391f, -1.048879f, -1.022623f, -0.992247f, -0.961199f, -0.930579f, -0.899824f, -0.868625f, -0.836503f, -0.801127f, -0.759410f, -0.710653f, -0.657040f, -0.601236f, -0.545210f, -0.491176f, -0.441730f, -0.398758f, -0.363349f, - -0.336665f, -0.320266f, -0.316119f, -0.326652f, -0.353697f, -0.396932f, -0.454447f, -0.524739f, -0.606457f, -0.696467f, -0.790534f, -0.886232f, -0.982956f, -1.078838f, -1.170101f, -1.254114f, -1.330746f, -1.399796f, -1.459170f, -1.506984f, -1.544018f, -1.572526f, -1.593450f, -1.606422f, -1.612266f, -1.613693f, -1.612687f, -1.608581f, -1.599998f, -1.587506f, -1.572353f, -1.553391f, -1.527791f, -1.494748f, -1.455923f, -1.412055f, -1.361940f, -1.305585f, -1.245838f, -1.185662f, -1.125860f, -1.066742f, -1.010255f, -0.958897f, -0.913497f, -0.873308f, -0.837820f, -0.807504f, -0.782697f, -0.762352f, -0.744553f, -0.728283f, -0.713809f, -0.700821f, -0.687346f, -0.671620f, -0.653905f, -0.634922f, -0.613574f, -0.588053f, -0.558390f, -0.525864f, -0.490403f, -0.450535f, -0.405710f, -0.356898f, -0.304721f, -0.248343f, -0.186701f, -0.120081f, -0.049746f, 0.023859f, 0.101582f, 0.183602f, 0.268055f, 0.353082f, 0.439140f, 0.527019f, 0.614682f, 0.699065f, 0.779803f, 0.857431f, 0.929095f, 0.990466f, 1.040682f, 1.080471f, 1.106909f, 1.115475f, 1.105390f, 1.077041f, 1.026573f, 0.949561f, 0.847139f, 0.722093f, 0.573442f, 0.402441f, - 0.218506f, 0.031580f, -0.153644f, -0.327407f, -0.469724f, -0.565679f, -0.610055f, -0.583192f, -0.449188f, -0.214263f, 0.027773f, 0.156235f, 0.139393f, 0.057497f, 0.003774f, -0.003113f, 0.002375f, -0.000038f, -0.002481f, 0.000451f, 0.001892f, -0.000644f, -0.001493f, 0.000649f, 0.001158f, -0.000616f, -0.000874f, 0.000622f, 0.000731f, -0.000522f, -0.000530f, 0.000507f, 0.000429f, -0.000443f, -0.000326f, 0.000378f, 0.000213f, -0.000364f, -0.000182f, 0.000267f, 0.000064f, -0.000275f, -0.000058f, 0.000182f, -0.000037f, -0.000172f, 0.000059f, 0.000111f}, - {-0.185552f, -0.533696f, -0.795197f, -0.893542f, -0.804694f, -0.602960f, -0.410567f, -0.289207f, -0.193943f, -0.044154f, 0.172404f, 0.382927f, 0.509981f, 0.545225f, 0.535614f, 0.515453f, 0.471712f, 0.372577f, 0.213012f, 0.026048f, -0.142991f, -0.267749f, -0.350655f, -0.407879f, -0.446665f, -0.457344f, -0.425810f, -0.349287f, -0.237376f, -0.102660f, 0.042599f, 0.181681f, 0.293768f, 0.363653f, 0.388804f, 0.375465f, 0.331172f, 0.263138f, 0.180465f, 0.093512f, 0.010635f, -0.063321f, -0.126103f, -0.177013f, -0.216204f, -0.243567f, -0.258067f, -0.258312f, -0.243240f, -0.211844f, -0.162993f, -0.096687f, -0.016030f, 0.071984f, 0.157709f, 0.231389f, 0.285400f, 0.314867f, 0.316825f, 0.289600f, 0.233632f, 0.152889f, 0.055165f, -0.049222f, -0.149371f, -0.235386f, -0.299246f, -0.334965f, -0.338337f, -0.307007f, -0.241511f, -0.147028f, -0.034470f, 0.080542f, 0.180988f, 0.252633f, 0.287299f, 0.284302f, 0.249915f, 0.194921f, 0.130906f, 0.066951f, 0.008345f, -0.042679f, -0.085530f, -0.120133f, -0.146148f, -0.162494f, -0.167472f, -0.159538f, -0.138348f, -0.105550f, -0.064858f, -0.021185f, 0.020732f, 0.057343f, - 0.086513f, 0.107283f, 0.119553f, 0.123700f, 0.120200f, 0.109487f, 0.092076f, 0.068684f, 0.040301f, 0.008337f, -0.025230f, -0.057916f, -0.086954f, -0.109551f, -0.123233f, -0.126275f, -0.118020f, -0.098962f, -0.070752f, -0.036148f, 0.001325f, 0.037957f, 0.070371f, 0.095805f, 0.112323f, 0.118906f, 0.115335f, 0.102001f, 0.079886f, 0.050640f, 0.016580f, -0.019334f, -0.053532f, -0.082149f, -0.101715f, -0.109891f, -0.105925f, -0.090814f, -0.067155f, -0.038578f, -0.008949f, 0.018297f, 0.040562f, 0.056348f, 0.065287f, 0.067860f, 0.065030f, 0.058014f, 0.048082f, 0.036305f, 0.023471f, 0.010221f, -0.002870f, -0.015342f, -0.026773f, -0.036614f, -0.044221f, -0.049020f, -0.050549f, -0.048442f, -0.042587f, -0.033275f, -0.021107f, -0.006895f, 0.008283f, 0.023113f, 0.036282f, 0.046616f, 0.053077f, 0.054911f, 0.051880f, 0.044235f, 0.032557f, 0.017817f, 0.001348f, -0.015481f, -0.031425f, -0.045128f, -0.055171f, -0.060547f, -0.060691f, -0.055031f, -0.043176f, -0.025610f, -0.003626f, 0.021182f, 0.046431f, 0.068218f, 0.082097f, 0.084759f, 0.074213f, 0.049725f, 0.013674f, -0.027125f, -0.063792f, -0.088620f, - -0.095442f, -0.080235f, -0.045136f, -0.000219f, 0.041813f, 0.070718f, 0.077187f, 0.054136f, 0.008482f, -0.033225f, -0.044133f, -0.024284f, 0.000669f, 0.009571f, 0.005114f, 0.001035f, 0.001842f, 0.002776f, 0.001639f, 0.000950f, 0.001513f, 0.001381f, 0.000219f, -0.000400f, -0.000314f, -0.000719f, -0.001578f, -0.001885f, -0.001710f, -0.001817f, -0.002061f, -0.001831f, -0.001308f, -0.000982f, -0.000701f, -0.000138f, 0.000498f, 0.000915f, 0.001247f, 0.001644f, 0.001936f, 0.001998f, 0.001941f, 0.001829f, 0.001581f, 0.001190f, 0.000735f, 0.000251f} - }, - { - {-0.185552f, -0.533696f, -0.795197f, -0.893542f, -0.804694f, -0.602960f, -0.410567f, -0.289207f, -0.193943f, -0.044154f, 0.172404f, 0.382927f, 0.509981f, 0.545225f, 0.535614f, 0.515453f, 0.471712f, 0.372577f, 0.213012f, 0.026048f, -0.142991f, -0.267749f, -0.350655f, -0.407879f, -0.446665f, -0.457344f, -0.425810f, -0.349287f, -0.237376f, -0.102660f, 0.042599f, 0.181681f, 0.293768f, 0.363653f, 0.388804f, 0.375465f, 0.331172f, 0.263138f, 0.180465f, 0.093512f, 0.010635f, -0.063321f, -0.126103f, -0.177013f, -0.216204f, -0.243567f, -0.258067f, -0.258312f, -0.243240f, -0.211844f, -0.162993f, -0.096687f, -0.016030f, 0.071984f, 0.157709f, 0.231389f, 0.285400f, 0.314867f, 0.316825f, 0.289600f, 0.233632f, 0.152889f, 0.055165f, -0.049222f, -0.149371f, -0.235386f, -0.299246f, -0.334965f, -0.338337f, -0.307007f, -0.241511f, -0.147028f, -0.034470f, 0.080542f, 0.180988f, 0.252633f, 0.287299f, 0.284302f, 0.249915f, 0.194921f, 0.130906f, 0.066951f, 0.008345f, -0.042679f, -0.085530f, -0.120133f, -0.146148f, -0.162494f, -0.167472f, -0.159538f, -0.138348f, -0.105550f, -0.064858f, -0.021185f, 0.020732f, 0.057343f, - 0.086513f, 0.107283f, 0.119553f, 0.123700f, 0.120200f, 0.109487f, 0.092076f, 0.068684f, 0.040301f, 0.008337f, -0.025230f, -0.057916f, -0.086954f, -0.109551f, -0.123233f, -0.126275f, -0.118020f, -0.098962f, -0.070752f, -0.036148f, 0.001325f, 0.037957f, 0.070371f, 0.095805f, 0.112323f, 0.118906f, 0.115335f, 0.102001f, 0.079886f, 0.050640f, 0.016580f, -0.019334f, -0.053532f, -0.082149f, -0.101715f, -0.109891f, -0.105925f, -0.090814f, -0.067155f, -0.038578f, -0.008949f, 0.018297f, 0.040562f, 0.056348f, 0.065287f, 0.067860f, 0.065030f, 0.058014f, 0.048082f, 0.036305f, 0.023471f, 0.010221f, -0.002870f, -0.015342f, -0.026773f, -0.036614f, -0.044221f, -0.049020f, -0.050549f, -0.048442f, -0.042587f, -0.033275f, -0.021107f, -0.006895f, 0.008283f, 0.023113f, 0.036282f, 0.046616f, 0.053077f, 0.054911f, 0.051880f, 0.044235f, 0.032557f, 0.017817f, 0.001348f, -0.015481f, -0.031425f, -0.045128f, -0.055171f, -0.060547f, -0.060691f, -0.055031f, -0.043176f, -0.025610f, -0.003626f, 0.021182f, 0.046431f, 0.068218f, 0.082097f, 0.084759f, 0.074213f, 0.049725f, 0.013674f, -0.027125f, -0.063792f, -0.088620f, - -0.095442f, -0.080235f, -0.045136f, -0.000219f, 0.041813f, 0.070718f, 0.077187f, 0.054136f, 0.008482f, -0.033225f, -0.044133f, -0.024284f, 0.000669f, 0.009571f, 0.005114f, 0.001035f, 0.001842f, 0.002776f, 0.001639f, 0.000950f, 0.001513f, 0.001381f, 0.000219f, -0.000400f, -0.000314f, -0.000719f, -0.001578f, -0.001885f, -0.001710f, -0.001817f, -0.002061f, -0.001831f, -0.001308f, -0.000982f, -0.000701f, -0.000138f, 0.000498f, 0.000915f, 0.001247f, 0.001644f, 0.001936f, 0.001998f, 0.001941f, 0.001829f, 0.001581f, 0.001190f, 0.000735f, 0.000251f}, - {0.008190f, 0.034888f, 0.081874f, 0.116453f, 0.067094f, -0.082555f, -0.227904f, -0.249422f, -0.166350f, -0.098117f, -0.087469f, -0.065513f, 0.001855f, 0.042159f, -0.012688f, -0.131557f, -0.247601f, -0.349249f, -0.457508f, -0.561835f, -0.630448f, -0.658599f, -0.667824f, -0.671646f, -0.668196f, -0.656704f, -0.642420f, -0.629382f, -0.617003f, -0.600360f, -0.572717f, -0.533674f, -0.493429f, -0.462386f, -0.438760f, -0.412139f, -0.375853f, -0.330971f, -0.282717f, -0.238117f, -0.203462f, -0.180067f, -0.164967f, -0.156908f, -0.157974f, -0.169237f, -0.189236f, -0.216716f, -0.250505f, -0.286503f, -0.318305f, -0.341119f, -0.353602f, -0.357480f, -0.357254f, -0.358766f, -0.366736f, -0.384550f, -0.415390f, -0.460458f, -0.516507f, -0.578128f, -0.641870f, -0.705454f, -0.764761f, -0.815673f, -0.858195f, -0.895392f, -0.928966f, -0.958784f, -0.985672f, -1.011344f, -1.035621f, -1.056027f, -1.070215f, -1.077265f, -1.076660f, -1.067391f, -1.048879f, -1.022623f, -0.992247f, -0.961199f, -0.930579f, -0.899824f, -0.868625f, -0.836503f, -0.801127f, -0.759410f, -0.710653f, -0.657040f, -0.601236f, -0.545210f, -0.491176f, -0.441730f, -0.398758f, -0.363349f, - -0.336665f, -0.320266f, -0.316119f, -0.326652f, -0.353697f, -0.396932f, -0.454447f, -0.524739f, -0.606457f, -0.696467f, -0.790534f, -0.886232f, -0.982956f, -1.078838f, -1.170101f, -1.254114f, -1.330746f, -1.399796f, -1.459170f, -1.506984f, -1.544018f, -1.572526f, -1.593450f, -1.606422f, -1.612266f, -1.613693f, -1.612687f, -1.608581f, -1.599998f, -1.587506f, -1.572353f, -1.553391f, -1.527791f, -1.494748f, -1.455923f, -1.412055f, -1.361940f, -1.305585f, -1.245838f, -1.185662f, -1.125860f, -1.066742f, -1.010255f, -0.958897f, -0.913497f, -0.873308f, -0.837820f, -0.807504f, -0.782697f, -0.762352f, -0.744553f, -0.728283f, -0.713809f, -0.700821f, -0.687346f, -0.671620f, -0.653905f, -0.634922f, -0.613574f, -0.588053f, -0.558390f, -0.525864f, -0.490403f, -0.450535f, -0.405710f, -0.356898f, -0.304721f, -0.248343f, -0.186701f, -0.120081f, -0.049746f, 0.023859f, 0.101582f, 0.183602f, 0.268055f, 0.353082f, 0.439140f, 0.527019f, 0.614682f, 0.699065f, 0.779803f, 0.857431f, 0.929095f, 0.990466f, 1.040682f, 1.080471f, 1.106909f, 1.115475f, 1.105390f, 1.077041f, 1.026573f, 0.949561f, 0.847139f, 0.722093f, 0.573442f, 0.402441f, - 0.218506f, 0.031580f, -0.153644f, -0.327407f, -0.469724f, -0.565679f, -0.610055f, -0.583192f, -0.449188f, -0.214263f, 0.027773f, 0.156235f, 0.139393f, 0.057497f, 0.003774f, -0.003113f, 0.002375f, -0.000038f, -0.002481f, 0.000451f, 0.001892f, -0.000644f, -0.001493f, 0.000649f, 0.001158f, -0.000616f, -0.000874f, 0.000622f, 0.000731f, -0.000522f, -0.000530f, 0.000507f, 0.000429f, -0.000443f, -0.000326f, 0.000378f, 0.000213f, -0.000364f, -0.000182f, 0.000267f, 0.000064f, -0.000275f, -0.000058f, 0.000182f, -0.000037f, -0.000172f, 0.000059f, 0.000111f} - }, - { - {0.000548f, 0.016581f, 0.053765f, 0.073281f, 0.025961f, -0.087700f, -0.207119f, -0.273414f, -0.285064f, -0.274298f, -0.250255f, -0.200671f, -0.140017f, -0.114239f, -0.149921f, -0.229225f, -0.323553f, -0.423074f, -0.520572f, -0.593892f, -0.626821f, -0.633223f, -0.641666f, -0.663565f, -0.689675f, -0.710438f, -0.725598f, -0.736662f, -0.742149f, -0.741673f, -0.737421f, -0.729820f, -0.715763f, -0.691715f, -0.655607f, -0.606006f, -0.543295f, -0.472954f, -0.404984f, -0.347908f, -0.304206f, -0.272432f, -0.251856f, -0.242831f, -0.243698f, -0.250172f, -0.258244f, -0.266093f, -0.273123f, -0.278938f, -0.283885f, -0.289531f, -0.298203f, -0.312469f, -0.334435f, -0.364557f, -0.401392f, -0.442943f, -0.487333f, -0.531807f, -0.572843f, -0.608619f, -0.640227f, -0.669360f, -0.695931f, -0.718798f, -0.737129f, -0.749510f, -0.752911f, -0.744271f, -0.722888f, -0.690591f, -0.650434f, -0.606110f, -0.561850f, -0.521475f, -0.486993f, -0.458126f, -0.433048f, -0.409626f, -0.386312f, -0.362259f, -0.336987f, -0.310333f, -0.282627f, -0.254475f, -0.226254f, -0.198128f, -0.170462f, -0.143899f, -0.119124f, -0.096842f, -0.077957f, -0.063776f, -0.056222f, -0.057684f, - -0.070113f, -0.094371f, -0.130791f, -0.179633f, -0.239941f, -0.308585f, -0.381898f, -0.458052f, -0.536571f, -0.616164f, -0.694955f, -0.772624f, -0.850111f, -0.926782f, -0.999760f, -1.066559f, -1.126570f, -1.179184f, -1.222302f, -1.254125f, -1.275290f, -1.287722f, -1.292081f, -1.287917f, -1.276087f, -1.259277f, -1.239681f, -1.217607f, -1.193156f, -1.167869f, -1.143244f, -1.118482f, -1.091357f, -1.060859f, -1.027345f, -0.990451f, -0.948918f, -0.902895f, -0.854755f, -0.806966f, -0.760446f, -0.715619f, -0.673842f, -0.636793f, -0.605072f, -0.578270f, -0.556179f, -0.539266f, -0.527859f, -0.521263f, -0.518112f, -0.517554f, -0.519483f, -0.523339f, -0.527397f, -0.529962f, -0.530623f, -0.529392f, -0.525185f, -0.516374f, -0.502523f, -0.484304f, -0.461738f, -0.433778f, -0.399827f, -0.360530f, -0.316583f, -0.267592f, -0.212873f, -0.152952f, -0.089351f, -0.022879f, 0.046836f, 0.119626f, 0.193722f, 0.267453f, 0.340856f, 0.414052f, 0.485116f, 0.551637f, 0.613347f, 0.670732f, 0.722013f, 0.764382f, 0.797237f, 0.820973f, 0.833604f, 0.832100f, 0.815925f, 0.785566f, 0.739077f, 0.674193f, 0.592209f, 0.495751f, 0.385312f, 0.262580f, - 0.134060f, 0.006641f, -0.116089f, -0.227998f, -0.317292f, -0.375423f, -0.399942f, -0.380080f, -0.295089f, -0.148552f, 0.003715f, 0.088509f, 0.084442f, 0.037741f, 0.004798f, -0.000952f, 0.001504f, 0.000011f, -0.001418f, 0.000239f, 0.001076f, -0.000365f, -0.000858f, 0.000368f, 0.000671f, -0.000340f, -0.000494f, 0.000359f, 0.000427f, -0.000288f, -0.000300f, 0.000287f, 0.000246f, -0.000250f, -0.000191f, 0.000205f, 0.000117f, -0.000209f, -0.000114f, 0.000138f, 0.000031f, -0.000158f, -0.000043f, 0.000092f, -0.000022f, -0.000096f, 0.000027f, 0.000057f}, - {-0.132877f, -0.397611f, -0.632915f, -0.770285f, -0.762715f, -0.657573f, -0.569424f, -0.556718f, -0.559329f, -0.492160f, -0.364513f, -0.254027f, -0.187319f, -0.112359f, 0.013869f, 0.171586f, 0.321788f, 0.450390f, 0.550169f, 0.601920f, 0.599231f, 0.564879f, 0.522168f, 0.469068f, 0.394550f, 0.302090f, 0.202848f, 0.098985f, -0.013558f, -0.133110f, -0.250310f, -0.352539f, -0.427473f, -0.468674f, -0.479833f, -0.468872f, -0.438208f, -0.385801f, -0.314336f, -0.233571f, -0.153994f, -0.082221f, -0.021254f, 0.029103f, 0.071856f, 0.110418f, 0.147141f, 0.184866f, 0.227200f, 0.274979f, 0.323626f, 0.364907f, 0.390119f, 0.392168f, 0.367889f, 0.319988f, 0.255281f, 0.180008f, 0.097315f, 0.008624f, -0.084265f, -0.178270f, -0.268396f, -0.347509f, -0.407904f, -0.443969f, -0.453626f, -0.437976f, -0.400261f, -0.344545f, -0.274131f, -0.190824f, -0.096114f, 0.006594f, 0.110784f, 0.207596f, 0.287902f, 0.344723f, 0.375140f, 0.380738f, 0.366034f, 0.336036f, 0.294883f, 0.246060f, 0.192748f, 0.137428f, 0.081636f, 0.026552f, -0.026567f, -0.076804f, -0.123861f, -0.167467f, -0.206909f, -0.241250f, -0.269252f, -0.288705f, - -0.296573f, -0.290377f, -0.269166f, -0.233229f, -0.183841f, -0.123651f, -0.056479f, 0.013719f, 0.083262f, 0.148262f, 0.204724f, 0.249465f, 0.280399f, 0.296003f, 0.295349f, 0.278768f, 0.247829f, 0.204674f, 0.151948f, 0.093150f, 0.032213f, -0.027384f, -0.082725f, -0.131073f, -0.170143f, -0.198644f, -0.216046f, -0.222008f, -0.216506f, -0.200271f, -0.174654f, -0.141292f, -0.102339f, -0.060692f, -0.019479f, 0.018647f, 0.051612f, 0.077849f, 0.096642f, 0.108377f, 0.114133f, 0.115126f, 0.112602f, 0.107828f, 0.101742f, 0.094680f, 0.086589f, 0.077282f, 0.066381f, 0.053290f, 0.037528f, 0.019026f, -0.001919f, -0.024735f, -0.048435f, -0.071577f, -0.092532f, -0.109764f, -0.121883f, -0.127706f, -0.126482f, -0.118056f, -0.102791f, -0.081468f, -0.055311f, -0.025990f, 0.004604f, 0.034617f, 0.062318f, 0.086086f, 0.104528f, 0.116707f, 0.122180f, 0.120819f, 0.112758f, 0.098561f, 0.079222f, 0.055839f, 0.029513f, 0.001623f, -0.026174f, -0.052450f, -0.076110f, -0.095839f, -0.109976f, -0.117213f, -0.116756f, -0.107640f, -0.088934f, -0.061097f, -0.026291f, 0.012728f, 0.052593f, 0.088103f, 0.113109f, 0.123416f, - 0.117418f, 0.094520f, 0.056280f, 0.009387f, -0.036193f, -0.072454f, -0.092836f, -0.088360f, -0.054153f, -0.003640f, 0.033648f, 0.037891f, 0.018462f, 0.000482f, -0.003500f, -0.000290f, 0.000806f, -0.000263f, -0.000070f, 0.000856f, 0.000579f, -0.000126f, 0.000123f, 0.000593f, 0.000279f, -0.000154f, 0.000040f, 0.000275f, 0.000000f, -0.000274f, -0.000137f, -0.000025f, -0.000233f, -0.000394f, -0.000293f, -0.000233f, -0.000362f, -0.000433f, -0.000345f, -0.000295f, -0.000349f, -0.000351f, -0.000262f, -0.000205f, -0.000205f, -0.000164f, -0.000070f, -0.000011f} - }, - { - {-0.132877f, -0.397611f, -0.632915f, -0.770285f, -0.762715f, -0.657573f, -0.569424f, -0.556718f, -0.559329f, -0.492160f, -0.364513f, -0.254027f, -0.187319f, -0.112359f, 0.013869f, 0.171586f, 0.321788f, 0.450390f, 0.550169f, 0.601920f, 0.599231f, 0.564879f, 0.522168f, 0.469068f, 0.394550f, 0.302090f, 0.202848f, 0.098985f, -0.013558f, -0.133110f, -0.250310f, -0.352539f, -0.427473f, -0.468674f, -0.479833f, -0.468872f, -0.438208f, -0.385801f, -0.314336f, -0.233571f, -0.153994f, -0.082221f, -0.021254f, 0.029103f, 0.071856f, 0.110418f, 0.147141f, 0.184866f, 0.227200f, 0.274979f, 0.323626f, 0.364907f, 0.390119f, 0.392168f, 0.367889f, 0.319988f, 0.255281f, 0.180008f, 0.097315f, 0.008624f, -0.084265f, -0.178270f, -0.268396f, -0.347509f, -0.407904f, -0.443969f, -0.453626f, -0.437976f, -0.400261f, -0.344545f, -0.274131f, -0.190824f, -0.096114f, 0.006594f, 0.110784f, 0.207596f, 0.287902f, 0.344723f, 0.375140f, 0.380738f, 0.366034f, 0.336036f, 0.294883f, 0.246060f, 0.192748f, 0.137428f, 0.081636f, 0.026552f, -0.026567f, -0.076804f, -0.123861f, -0.167467f, -0.206909f, -0.241250f, -0.269252f, -0.288705f, - -0.296573f, -0.290377f, -0.269166f, -0.233229f, -0.183841f, -0.123651f, -0.056479f, 0.013719f, 0.083262f, 0.148262f, 0.204724f, 0.249465f, 0.280399f, 0.296003f, 0.295349f, 0.278768f, 0.247829f, 0.204674f, 0.151948f, 0.093150f, 0.032213f, -0.027384f, -0.082725f, -0.131073f, -0.170143f, -0.198644f, -0.216046f, -0.222008f, -0.216506f, -0.200271f, -0.174654f, -0.141292f, -0.102339f, -0.060692f, -0.019479f, 0.018647f, 0.051612f, 0.077849f, 0.096642f, 0.108377f, 0.114133f, 0.115126f, 0.112602f, 0.107828f, 0.101742f, 0.094680f, 0.086589f, 0.077282f, 0.066381f, 0.053290f, 0.037528f, 0.019026f, -0.001919f, -0.024735f, -0.048435f, -0.071577f, -0.092532f, -0.109764f, -0.121883f, -0.127706f, -0.126482f, -0.118056f, -0.102791f, -0.081468f, -0.055311f, -0.025990f, 0.004604f, 0.034617f, 0.062318f, 0.086086f, 0.104528f, 0.116707f, 0.122180f, 0.120819f, 0.112758f, 0.098561f, 0.079222f, 0.055839f, 0.029513f, 0.001623f, -0.026174f, -0.052450f, -0.076110f, -0.095839f, -0.109976f, -0.117213f, -0.116756f, -0.107640f, -0.088934f, -0.061097f, -0.026291f, 0.012728f, 0.052593f, 0.088103f, 0.113109f, 0.123416f, - 0.117418f, 0.094520f, 0.056280f, 0.009387f, -0.036193f, -0.072454f, -0.092836f, -0.088360f, -0.054153f, -0.003640f, 0.033648f, 0.037891f, 0.018462f, 0.000482f, -0.003500f, -0.000290f, 0.000806f, -0.000263f, -0.000070f, 0.000856f, 0.000579f, -0.000126f, 0.000123f, 0.000593f, 0.000279f, -0.000154f, 0.000040f, 0.000275f, 0.000000f, -0.000274f, -0.000137f, -0.000025f, -0.000233f, -0.000394f, -0.000293f, -0.000233f, -0.000362f, -0.000433f, -0.000345f, -0.000295f, -0.000349f, -0.000351f, -0.000262f, -0.000205f, -0.000205f, -0.000164f, -0.000070f, -0.000011f}, - {0.000548f, 0.016581f, 0.053765f, 0.073281f, 0.025961f, -0.087700f, -0.207119f, -0.273414f, -0.285064f, -0.274298f, -0.250255f, -0.200671f, -0.140017f, -0.114239f, -0.149921f, -0.229225f, -0.323553f, -0.423074f, -0.520572f, -0.593892f, -0.626821f, -0.633223f, -0.641666f, -0.663565f, -0.689675f, -0.710438f, -0.725598f, -0.736662f, -0.742149f, -0.741673f, -0.737421f, -0.729820f, -0.715763f, -0.691715f, -0.655607f, -0.606006f, -0.543295f, -0.472954f, -0.404984f, -0.347908f, -0.304206f, -0.272432f, -0.251856f, -0.242831f, -0.243698f, -0.250172f, -0.258244f, -0.266093f, -0.273123f, -0.278938f, -0.283885f, -0.289531f, -0.298203f, -0.312469f, -0.334435f, -0.364557f, -0.401392f, -0.442943f, -0.487333f, -0.531807f, -0.572843f, -0.608619f, -0.640227f, -0.669360f, -0.695931f, -0.718798f, -0.737129f, -0.749510f, -0.752911f, -0.744271f, -0.722888f, -0.690591f, -0.650434f, -0.606110f, -0.561850f, -0.521475f, -0.486993f, -0.458126f, -0.433048f, -0.409626f, -0.386312f, -0.362259f, -0.336987f, -0.310333f, -0.282627f, -0.254475f, -0.226254f, -0.198128f, -0.170462f, -0.143899f, -0.119124f, -0.096842f, -0.077957f, -0.063776f, -0.056222f, -0.057684f, - -0.070113f, -0.094371f, -0.130791f, -0.179633f, -0.239941f, -0.308585f, -0.381898f, -0.458052f, -0.536571f, -0.616164f, -0.694955f, -0.772624f, -0.850111f, -0.926782f, -0.999760f, -1.066559f, -1.126570f, -1.179184f, -1.222302f, -1.254125f, -1.275290f, -1.287722f, -1.292081f, -1.287917f, -1.276087f, -1.259277f, -1.239681f, -1.217607f, -1.193156f, -1.167869f, -1.143244f, -1.118482f, -1.091357f, -1.060859f, -1.027345f, -0.990451f, -0.948918f, -0.902895f, -0.854755f, -0.806966f, -0.760446f, -0.715619f, -0.673842f, -0.636793f, -0.605072f, -0.578270f, -0.556179f, -0.539266f, -0.527859f, -0.521263f, -0.518112f, -0.517554f, -0.519483f, -0.523339f, -0.527397f, -0.529962f, -0.530623f, -0.529392f, -0.525185f, -0.516374f, -0.502523f, -0.484304f, -0.461738f, -0.433778f, -0.399827f, -0.360530f, -0.316583f, -0.267592f, -0.212873f, -0.152952f, -0.089351f, -0.022879f, 0.046836f, 0.119626f, 0.193722f, 0.267453f, 0.340856f, 0.414052f, 0.485116f, 0.551637f, 0.613347f, 0.670732f, 0.722013f, 0.764382f, 0.797237f, 0.820973f, 0.833604f, 0.832100f, 0.815925f, 0.785566f, 0.739077f, 0.674193f, 0.592209f, 0.495751f, 0.385312f, 0.262580f, - 0.134060f, 0.006641f, -0.116089f, -0.227998f, -0.317292f, -0.375423f, -0.399942f, -0.380080f, -0.295089f, -0.148552f, 0.003715f, 0.088509f, 0.084442f, 0.037741f, 0.004798f, -0.000952f, 0.001504f, 0.000011f, -0.001418f, 0.000239f, 0.001076f, -0.000365f, -0.000858f, 0.000368f, 0.000671f, -0.000340f, -0.000494f, 0.000359f, 0.000427f, -0.000288f, -0.000300f, 0.000287f, 0.000246f, -0.000250f, -0.000191f, 0.000205f, 0.000117f, -0.000209f, -0.000114f, 0.000138f, 0.000031f, -0.000158f, -0.000043f, 0.000092f, -0.000022f, -0.000096f, 0.000027f, 0.000057f} - } -}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 32000 */ const int16_t CRendBin_Combined_HRIR_max_num_iterations_32kHz = 1; @@ -329,203 +72,10 @@ const uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[15][BINAURAL_CHANNELS const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][1]={{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}}}; const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz_fx[15]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; -#endif const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][160]={ - { - {1.274160f, 1.294020f, 1.337410f, 1.397007f, 1.430345f, 1.392644f, 1.321540f, 1.313359f, 1.357865f, 1.299918f, 1.074412f, 0.879944f, 0.959736f, 1.270988f, 1.546758f, 1.656396f, 1.720956f, 1.866458f, 2.047459f, 2.166309f, 2.211621f, 2.199100f, 2.091661f, 1.870665f, 1.617573f, 1.446851f, 1.393188f, 1.413236f, 1.466179f, 1.550859f, 1.683267f, 1.868310f, 2.085674f, 2.289697f, 2.432421f, 2.495403f, 2.495189f, 2.459782f, 2.406497f, 2.337636f, 2.248632f, 2.141773f, 2.034425f, 1.948929f, 1.893998f, 1.861756f, 1.839825f, 1.817228f, 1.782513f, 1.728672f, 1.660650f, 1.590534f, 1.526449f, 1.470717f, 1.424223f, 1.386891f, 1.357216f, 1.334362f, 1.316849f, 1.298879f, 1.273497f, 1.238579f, 1.193651f, 1.133144f, 1.050266f, 0.946198f, 0.830030f, 0.712686f, 0.605579f, 0.520129f, 0.462158f, 0.429220f, 0.416204f, 0.419491f, 0.434223f, 0.453184f, 0.470641f, 0.483821f, 0.491166f, 0.493159f, 0.493315f, 0.494589f, 0.497104f, 0.501870f, 0.512491f, 0.530588f, 0.554259f, 0.582935f, 0.618415f, 0.659661f, 0.701812f, 0.741007f, 0.775413f, 0.802205f, 0.818331f, 0.823262f, - 0.817499f, 0.800855f, 0.774865f, 0.743310f, 0.708492f, 0.671074f, 0.633855f, 0.600330f, 0.569970f, 0.540678f, 0.514469f, 0.494946f, 0.481818f, 0.473694f, 0.472732f, 0.481094f, 0.496964f, 0.518455f, 0.546609f, 0.581486f, 0.621040f, 0.665611f, 0.717402f, 0.775509f, 0.837954f, 0.906864f, 0.984687f, 1.068602f, 1.155523f, 1.247778f, 1.347134f, 1.449104f, 1.549101f, 1.647389f, 1.742972f, 1.829635f, 1.901324f, 1.954515f, 1.984287f, 1.984824f, 1.952760f, 1.885002f, 1.778297f, 1.635195f, 1.462468f, 1.261420f, 1.031242f, 0.781118f, 0.523064f, 0.255971f, -0.024648f, -0.309222f, -0.588359f, -0.870855f, -1.164972f, -1.466926f, -1.790488f, -2.153822f, -2.486393f, -2.616851f, -2.448223f, -2.105871f, -1.817613f, -1.687068f}, - {0.970276f, 0.989255f, 0.871577f, 0.597876f, 0.336366f, 0.173178f, 0.019706f, -0.159984f, -0.243784f, -0.153498f, 0.008399f, 0.095745f, 0.051486f, -0.138486f, -0.467152f, -0.822595f, -1.024373f, -1.014141f, -0.903886f, -0.794827f, -0.668354f, -0.501337f, -0.360612f, -0.305798f, -0.293410f, -0.252892f, -0.184179f, -0.111256f, -0.003926f, 0.177841f, 0.402150f, 0.597826f, 0.746294f, 0.878887f, 0.991944f, 1.024725f, 0.936772f, 0.767161f, 0.593896f, 0.457569f, 0.346793f, 0.240733f, 0.135325f, 0.029786f, -0.084188f, -0.208198f, -0.327790f, -0.427675f, -0.506080f, -0.566715f, -0.606654f, -0.620426f, -0.608890f, -0.577204f, -0.529440f, -0.469766f, -0.403401f, -0.332230f, -0.253653f, -0.166268f, -0.073041f, 0.021610f, 0.112939f, 0.193509f, 0.255064f, 0.294744f, 0.316342f, 0.324872f, 0.323044f, 0.313291f, 0.299731f, 0.286569f, 0.276133f, 0.269047f, 0.264854f, 0.261697f, 0.256138f, 0.244182f, 0.223051f, 0.192601f, 0.155342f, 0.114760f, 0.073144f, 0.030352f, -0.016156f, -0.070224f, -0.134644f, -0.208324f, -0.285309f, -0.356772f, -0.413944f, -0.449609f, -0.458703f, -0.439528f, -0.394930f, -0.331849f, - -0.259659f, -0.188462f, -0.126919f, -0.079747f, -0.047119f, -0.026644f, -0.014920f, -0.007007f, 0.003477f, 0.022326f, 0.053985f, 0.103077f, 0.173949f, 0.266925f, 0.376398f, 0.492936f, 0.604875f, 0.697909f, 0.757166f, 0.771956f, 0.737231f, 0.651307f, 0.515864f, 0.338233f, 0.130148f, -0.096058f, -0.327499f, -0.548579f, -0.742907f, -0.897278f, -1.001720f, -1.048233f, -1.033356f, -0.960708f, -0.838436f, -0.676033f, -0.484975f, -0.278710f, -0.069071f, 0.135392f, 0.327026f, 0.498327f, 0.643893f, 0.759696f, 0.840685f, 0.882278f, 0.882920f, 0.842334f, 0.760127f, 0.639470f, 0.488681f, 0.316680f, 0.131973f, -0.052258f, -0.220428f, -0.364266f, -0.478726f, -0.543965f, -0.528700f, -0.427785f, -0.288213f, -0.179234f, -0.133783f, -0.129365f} - }, - { - {0.970276f, 0.989255f, 0.871577f, 0.597876f, 0.336366f, 0.173178f, 0.019706f, -0.159984f, -0.243784f, -0.153498f, 0.008399f, 0.095745f, 0.051486f, -0.138486f, -0.467152f, -0.822595f, -1.024373f, -1.014141f, -0.903886f, -0.794827f, -0.668354f, -0.501337f, -0.360612f, -0.305798f, -0.293410f, -0.252892f, -0.184179f, -0.111256f, -0.003926f, 0.177841f, 0.402150f, 0.597826f, 0.746294f, 0.878887f, 0.991944f, 1.024725f, 0.936772f, 0.767161f, 0.593896f, 0.457569f, 0.346793f, 0.240733f, 0.135325f, 0.029786f, -0.084188f, -0.208198f, -0.327790f, -0.427675f, -0.506080f, -0.566715f, -0.606654f, -0.620426f, -0.608890f, -0.577204f, -0.529440f, -0.469766f, -0.403401f, -0.332230f, -0.253653f, -0.166268f, -0.073041f, 0.021610f, 0.112939f, 0.193509f, 0.255064f, 0.294744f, 0.316342f, 0.324872f, 0.323044f, 0.313291f, 0.299731f, 0.286569f, 0.276133f, 0.269047f, 0.264854f, 0.261697f, 0.256138f, 0.244182f, 0.223051f, 0.192601f, 0.155342f, 0.114760f, 0.073144f, 0.030352f, -0.016156f, -0.070224f, -0.134644f, -0.208324f, -0.285309f, -0.356772f, -0.413944f, -0.449609f, -0.458703f, -0.439528f, -0.394930f, -0.331849f, - -0.259659f, -0.188462f, -0.126919f, -0.079747f, -0.047119f, -0.026644f, -0.014920f, -0.007007f, 0.003477f, 0.022326f, 0.053985f, 0.103077f, 0.173949f, 0.266925f, 0.376398f, 0.492936f, 0.604875f, 0.697909f, 0.757166f, 0.771956f, 0.737231f, 0.651307f, 0.515864f, 0.338233f, 0.130148f, -0.096058f, -0.327499f, -0.548579f, -0.742907f, -0.897278f, -1.001720f, -1.048233f, -1.033356f, -0.960708f, -0.838436f, -0.676033f, -0.484975f, -0.278710f, -0.069071f, 0.135392f, 0.327026f, 0.498327f, 0.643893f, 0.759696f, 0.840685f, 0.882278f, 0.882920f, 0.842334f, 0.760127f, 0.639470f, 0.488681f, 0.316680f, 0.131973f, -0.052258f, -0.220428f, -0.364266f, -0.478726f, -0.543965f, -0.528700f, -0.427785f, -0.288213f, -0.179234f, -0.133783f, -0.129365f}, - {1.274160f, 1.294020f, 1.337410f, 1.397007f, 1.430345f, 1.392644f, 1.321540f, 1.313359f, 1.357865f, 1.299918f, 1.074412f, 0.879944f, 0.959736f, 1.270988f, 1.546758f, 1.656396f, 1.720956f, 1.866458f, 2.047459f, 2.166309f, 2.211621f, 2.199100f, 2.091661f, 1.870665f, 1.617573f, 1.446851f, 1.393188f, 1.413236f, 1.466179f, 1.550859f, 1.683267f, 1.868310f, 2.085674f, 2.289697f, 2.432421f, 2.495403f, 2.495189f, 2.459782f, 2.406497f, 2.337636f, 2.248632f, 2.141773f, 2.034425f, 1.948929f, 1.893998f, 1.861756f, 1.839825f, 1.817228f, 1.782513f, 1.728672f, 1.660650f, 1.590534f, 1.526449f, 1.470717f, 1.424223f, 1.386891f, 1.357216f, 1.334362f, 1.316849f, 1.298879f, 1.273497f, 1.238579f, 1.193651f, 1.133144f, 1.050266f, 0.946198f, 0.830030f, 0.712686f, 0.605579f, 0.520129f, 0.462158f, 0.429220f, 0.416204f, 0.419491f, 0.434223f, 0.453184f, 0.470641f, 0.483821f, 0.491166f, 0.493159f, 0.493315f, 0.494589f, 0.497104f, 0.501870f, 0.512491f, 0.530588f, 0.554259f, 0.582935f, 0.618415f, 0.659661f, 0.701812f, 0.741007f, 0.775413f, 0.802205f, 0.818331f, 0.823262f, - 0.817499f, 0.800855f, 0.774865f, 0.743310f, 0.708492f, 0.671074f, 0.633855f, 0.600330f, 0.569970f, 0.540678f, 0.514469f, 0.494946f, 0.481818f, 0.473694f, 0.472732f, 0.481094f, 0.496964f, 0.518455f, 0.546609f, 0.581486f, 0.621040f, 0.665611f, 0.717402f, 0.775509f, 0.837954f, 0.906864f, 0.984687f, 1.068602f, 1.155523f, 1.247778f, 1.347134f, 1.449104f, 1.549101f, 1.647389f, 1.742972f, 1.829635f, 1.901324f, 1.954515f, 1.984287f, 1.984824f, 1.952760f, 1.885002f, 1.778297f, 1.635195f, 1.462468f, 1.261420f, 1.031242f, 0.781118f, 0.523064f, 0.255971f, -0.024648f, -0.309222f, -0.588359f, -0.870855f, -1.164972f, -1.466926f, -1.790488f, -2.153822f, -2.486393f, -2.616851f, -2.448223f, -2.105871f, -1.817613f, -1.687068f} - }, - { - {1.085267f, 1.152261f, 1.211254f, 1.149749f, 0.971009f, 0.866642f, 0.973613f, 1.106024f, 0.955689f, 0.568331f, 0.367265f, 0.613757f, 1.064472f, 1.307157f, 1.265967f, 1.200519f, 1.313280f, 1.541852f, 1.705537f, 1.706229f, 1.568164f, 1.377410f, 1.218876f, 1.132463f, 1.108780f, 1.130031f, 1.199863f, 1.323700f, 1.481829f, 1.635911f, 1.747006f, 1.784852f, 1.742653f, 1.647793f, 1.537415f, 1.420984f, 1.285988f, 1.138370f, 1.013812f, 0.945860f, 0.939755f, 0.977271f, 1.030441f, 1.070328f, 1.078971f, 1.058884f, 1.024800f, 0.985828f, 0.939938f, 0.882986f, 0.817274f, 0.751424f, 0.694070f, 0.647432f, 0.607447f, 0.570514f, 0.536843f, 0.505711f, 0.472714f, 0.435641f, 0.398968f, 0.368542f, 0.344855f, 0.324511f, 0.305620f, 0.289416f, 0.278288f, 0.273203f, 0.272251f, 0.272533f, 0.274178f, 0.280435f, 0.293045f, 0.310308f, 0.330160f, 0.351786f, 0.373986f, 0.395582f, 0.417508f, 0.441271f, 0.465902f, 0.489267f, 0.511114f, 0.532441f, 0.553769f, 0.575766f, 0.598998f, 0.621885f, 0.641757f, 0.657943f, 0.670310f, 0.675616f, 0.669581f, 0.651537f, 0.623393f, 0.586505f, - 0.543751f, 0.501741f, 0.466651f, 0.440414f, 0.423767f, 0.419239f, 0.428634f, 0.451471f, 0.487558f, 0.537488f, 0.600521f, 0.675890f, 0.764826f, 0.867101f, 0.977943f, 1.092168f, 1.207453f, 1.319899f, 1.421773f, 1.507786f, 1.578085f, 1.631894f, 1.664687f, 1.674570f, 1.664682f, 1.636762f, 1.588484f, 1.518454f, 1.428003f, 1.317560f, 1.186183f, 1.034404f, 0.864540f, 0.680250f, 0.487109f, 0.289870f, 0.089451f, -0.112563f, -0.309528f, -0.496881f, -0.678674f, -0.858573f, -1.031550f, -1.194122f, -1.353146f, -1.513379f, -1.667664f, -1.810571f, -1.947846f, -2.081093f, -2.199345f, -2.296286f, -2.376795f, -2.438015f, -2.467707f, -2.466689f, -2.437081f, -2.336441f, -2.091727f, -1.697365f, -1.271170f, -0.969067f, -0.847236f, -0.833407f}, - {1.085267f, 1.152261f, 1.211254f, 1.149749f, 0.971009f, 0.866642f, 0.973613f, 1.106024f, 0.955689f, 0.568331f, 0.367265f, 0.613757f, 1.064472f, 1.307157f, 1.265967f, 1.200519f, 1.313280f, 1.541852f, 1.705537f, 1.706229f, 1.568164f, 1.377410f, 1.218876f, 1.132463f, 1.108780f, 1.130031f, 1.199863f, 1.323700f, 1.481829f, 1.635911f, 1.747006f, 1.784852f, 1.742653f, 1.647793f, 1.537415f, 1.420984f, 1.285988f, 1.138370f, 1.013812f, 0.945860f, 0.939755f, 0.977271f, 1.030441f, 1.070328f, 1.078971f, 1.058884f, 1.024800f, 0.985828f, 0.939938f, 0.882986f, 0.817274f, 0.751424f, 0.694070f, 0.647432f, 0.607447f, 0.570514f, 0.536843f, 0.505711f, 0.472714f, 0.435641f, 0.398968f, 0.368542f, 0.344855f, 0.324511f, 0.305620f, 0.289416f, 0.278288f, 0.273203f, 0.272251f, 0.272533f, 0.274178f, 0.280435f, 0.293045f, 0.310308f, 0.330160f, 0.351786f, 0.373986f, 0.395582f, 0.417508f, 0.441271f, 0.465902f, 0.489267f, 0.511114f, 0.532441f, 0.553769f, 0.575766f, 0.598998f, 0.621885f, 0.641757f, 0.657943f, 0.670310f, 0.675616f, 0.669581f, 0.651537f, 0.623393f, 0.586505f, - 0.543751f, 0.501741f, 0.466651f, 0.440414f, 0.423767f, 0.419239f, 0.428634f, 0.451471f, 0.487558f, 0.537488f, 0.600521f, 0.675890f, 0.764826f, 0.867101f, 0.977943f, 1.092168f, 1.207453f, 1.319899f, 1.421773f, 1.507786f, 1.578085f, 1.631894f, 1.664687f, 1.674570f, 1.664682f, 1.636762f, 1.588484f, 1.518454f, 1.428003f, 1.317560f, 1.186183f, 1.034404f, 0.864540f, 0.680250f, 0.487109f, 0.289870f, 0.089451f, -0.112563f, -0.309528f, -0.496881f, -0.678674f, -0.858573f, -1.031550f, -1.194122f, -1.353146f, -1.513379f, -1.667664f, -1.810571f, -1.947846f, -2.081093f, -2.199345f, -2.296286f, -2.376795f, -2.438015f, -2.467707f, -2.466689f, -2.437081f, -2.336441f, -2.091727f, -1.697365f, -1.271170f, -0.969067f, -0.847236f, -0.833407f} - }, - { - {1.063637f, 1.049948f, 1.086384f, 1.183797f, 1.296273f, 1.415018f, 1.543693f, 1.612469f, 1.556818f, 1.452907f, 1.427515f, 1.459162f, 1.420264f, 1.294044f, 1.190504f, 1.155630f, 1.120377f, 1.045118f, 0.972069f, 0.919124f, 0.847607f, 0.755348f, 0.695900f, 0.688650f, 0.697752f, 0.705992f, 0.727492f, 0.745497f, 0.716209f, 0.641022f, 0.570166f, 0.531001f, 0.507183f, 0.487583f, 0.484983f, 0.504740f, 0.536379f, 0.578041f, 0.637538f, 0.709342f, 0.774552f, 0.821621f, 0.850375f, 0.861813f, 0.858985f, 0.852665f, 0.855130f, 0.872248f, 0.905940f, 0.956533f, 1.018160f, 1.078485f, 1.125914f, 1.152867f, 1.153957f, 1.128181f, 1.082146f, 1.025211f, 0.962215f, 0.894440f, 0.824318f, 0.754663f, 0.686000f, 0.618588f, 0.555115f, 0.499006f, 0.452213f, 0.416110f, 0.392138f, 0.380331f, 0.378985f, 0.386260f, 0.400712f, 0.420754f, 0.445470f, 0.475732f, 0.513289f, 0.559298f, 0.614782f, 0.681710f, 0.762351f, 0.857613f, 0.966535f, 1.087403f, 1.219077f, 1.360788f, 1.510315f, 1.662975f, 1.812873f, 1.953724f, 2.077144f, 2.172270f, 2.230289f, 2.248747f, 2.229143f, 2.172148f, - 2.078893f, 1.955382f, 1.810735f, 1.651097f, 1.479367f, 1.300345f, 1.120903f, 0.944335f, 0.769404f, 0.596549f, 0.431085f, 0.278829f, 0.142420f, 0.023726f, -0.073876f, -0.148420f, -0.202406f, -0.240652f, -0.266342f, -0.280625f, -0.284772f, -0.281007f, -0.271464f, -0.257350f, -0.239505f, -0.219653f, -0.200403f, -0.183348f, -0.167670f, -0.151607f, -0.134585f, -0.116624f, -0.096605f, -0.073157f, -0.046830f, -0.019722f, 0.006408f, 0.030219f, 0.049849f, 0.063222f, 0.068554f, 0.064149f, 0.048963f, 0.023015f, -0.014445f, -0.065932f, -0.132497f, -0.211661f, -0.301246f, -0.401651f, -0.510888f, -0.622490f, -0.732373f, -0.841490f, -0.948993f, -1.053059f, -1.159075f, -1.265357f, -1.332750f, -1.299989f, -1.156448f, -0.976901f, -0.852061f, -0.803729f}, - {0.884083f, 0.742870f, 0.484034f, 0.189010f, -0.047347f, -0.209107f, -0.344738f, -0.459774f, -0.499823f, -0.451724f, -0.382172f, -0.347168f, -0.330087f, -0.301047f, -0.273879f, -0.260219f, -0.215653f, -0.082482f, 0.135367f, 0.371639f, 0.553528f, 0.638327f, 0.619182f, 0.521423f, 0.383944f, 0.230950f, 0.070136f, -0.081916f, -0.195335f, -0.256069f, -0.280341f, -0.291132f, -0.295855f, -0.293544f, -0.286342f, -0.272513f, -0.239647f, -0.175676f, -0.081987f, 0.027920f, 0.135920f, 0.222729f, 0.272143f, 0.278209f, 0.246991f, 0.191063f, 0.124955f, 0.063713f, 0.019080f, -0.005719f, -0.015586f, -0.017859f, -0.018227f, -0.020272f, -0.025418f, -0.032738f, -0.040246f, -0.046606f, -0.051516f, -0.055628f, -0.060728f, -0.068985f, -0.081305f, -0.096657f, -0.112333f, -0.123552f, -0.123315f, -0.104730f, -0.064704f, -0.005665f, 0.065287f, 0.138018f, 0.201361f, 0.245987f, 0.266784f, 0.262900f, 0.236050f, 0.188970f, 0.124607f, 0.045940f, -0.043179f, -0.136409f, -0.224142f, -0.294589f, -0.336178f, -0.340444f, -0.304841f, -0.234204f, -0.139606f, -0.035148f, 0.065318f, 0.150348f, 0.212111f, 0.246790f, 0.254210f, 0.237086f, - 0.200362f, 0.150513f, 0.094645f, 0.039670f, -0.008438f, -0.045554f, -0.070189f, -0.083386f, -0.087751f, -0.086464f, -0.082639f, -0.078760f, -0.076232f, -0.075397f, -0.075811f, -0.076287f, -0.074859f, -0.069085f, -0.056682f, -0.036162f, -0.007454f, 0.027621f, 0.065474f, 0.101542f, 0.131285f, 0.150979f, 0.158284f, 0.152450f, 0.134029f, 0.104444f, 0.065783f, 0.020707f, -0.027709f, -0.075976f, -0.120047f, -0.155502f, -0.178183f, -0.184820f, -0.173566f, -0.144714f, -0.101232f, -0.048394f, 0.007260f, 0.058957f, 0.100774f, 0.128927f, 0.142378f, 0.142213f, 0.130754f, 0.111206f, 0.087043f, 0.060849f, 0.034081f, 0.008064f, -0.015849f, -0.037361f, -0.056513f, -0.070516f, -0.073401f, -0.061979f, -0.041900f, -0.024640f, -0.017159f, -0.016562f} - }, - { - {0.884083f, 0.742870f, 0.484034f, 0.189010f, -0.047347f, -0.209107f, -0.344738f, -0.459774f, -0.499823f, -0.451724f, -0.382172f, -0.347168f, -0.330087f, -0.301047f, -0.273879f, -0.260219f, -0.215653f, -0.082482f, 0.135367f, 0.371639f, 0.553528f, 0.638327f, 0.619182f, 0.521423f, 0.383944f, 0.230950f, 0.070136f, -0.081916f, -0.195335f, -0.256069f, -0.280341f, -0.291132f, -0.295855f, -0.293544f, -0.286342f, -0.272513f, -0.239647f, -0.175676f, -0.081987f, 0.027920f, 0.135920f, 0.222729f, 0.272143f, 0.278209f, 0.246991f, 0.191063f, 0.124955f, 0.063713f, 0.019080f, -0.005719f, -0.015586f, -0.017859f, -0.018227f, -0.020272f, -0.025418f, -0.032738f, -0.040246f, -0.046606f, -0.051516f, -0.055628f, -0.060728f, -0.068985f, -0.081305f, -0.096657f, -0.112333f, -0.123552f, -0.123315f, -0.104730f, -0.064704f, -0.005665f, 0.065287f, 0.138018f, 0.201361f, 0.245987f, 0.266784f, 0.262900f, 0.236050f, 0.188970f, 0.124607f, 0.045940f, -0.043179f, -0.136409f, -0.224142f, -0.294589f, -0.336178f, -0.340444f, -0.304841f, -0.234204f, -0.139606f, -0.035148f, 0.065318f, 0.150348f, 0.212111f, 0.246790f, 0.254210f, 0.237086f, - 0.200362f, 0.150513f, 0.094645f, 0.039670f, -0.008438f, -0.045554f, -0.070189f, -0.083386f, -0.087751f, -0.086464f, -0.082639f, -0.078760f, -0.076232f, -0.075397f, -0.075811f, -0.076287f, -0.074859f, -0.069085f, -0.056682f, -0.036162f, -0.007454f, 0.027621f, 0.065474f, 0.101542f, 0.131285f, 0.150979f, 0.158284f, 0.152450f, 0.134029f, 0.104444f, 0.065783f, 0.020707f, -0.027709f, -0.075976f, -0.120047f, -0.155502f, -0.178183f, -0.184820f, -0.173566f, -0.144714f, -0.101232f, -0.048394f, 0.007260f, 0.058957f, 0.100774f, 0.128927f, 0.142378f, 0.142213f, 0.130754f, 0.111206f, 0.087043f, 0.060849f, 0.034081f, 0.008064f, -0.015849f, -0.037361f, -0.056513f, -0.070516f, -0.073401f, -0.061979f, -0.041900f, -0.024640f, -0.017159f, -0.016562f}, - {1.063637f, 1.049948f, 1.086384f, 1.183797f, 1.296273f, 1.415018f, 1.543693f, 1.612469f, 1.556818f, 1.452907f, 1.427515f, 1.459162f, 1.420264f, 1.294044f, 1.190504f, 1.155630f, 1.120377f, 1.045118f, 0.972069f, 0.919124f, 0.847607f, 0.755348f, 0.695900f, 0.688650f, 0.697752f, 0.705992f, 0.727492f, 0.745497f, 0.716209f, 0.641022f, 0.570166f, 0.531001f, 0.507183f, 0.487583f, 0.484983f, 0.504740f, 0.536379f, 0.578041f, 0.637538f, 0.709342f, 0.774552f, 0.821621f, 0.850375f, 0.861813f, 0.858985f, 0.852665f, 0.855130f, 0.872248f, 0.905940f, 0.956533f, 1.018160f, 1.078485f, 1.125914f, 1.152867f, 1.153957f, 1.128181f, 1.082146f, 1.025211f, 0.962215f, 0.894440f, 0.824318f, 0.754663f, 0.686000f, 0.618588f, 0.555115f, 0.499006f, 0.452213f, 0.416110f, 0.392138f, 0.380331f, 0.378985f, 0.386260f, 0.400712f, 0.420754f, 0.445470f, 0.475732f, 0.513289f, 0.559298f, 0.614782f, 0.681710f, 0.762351f, 0.857613f, 0.966535f, 1.087403f, 1.219077f, 1.360788f, 1.510315f, 1.662975f, 1.812873f, 1.953724f, 2.077144f, 2.172270f, 2.230289f, 2.248747f, 2.229143f, 2.172148f, - 2.078893f, 1.955382f, 1.810735f, 1.651097f, 1.479367f, 1.300345f, 1.120903f, 0.944335f, 0.769404f, 0.596549f, 0.431085f, 0.278829f, 0.142420f, 0.023726f, -0.073876f, -0.148420f, -0.202406f, -0.240652f, -0.266342f, -0.280625f, -0.284772f, -0.281007f, -0.271464f, -0.257350f, -0.239505f, -0.219653f, -0.200403f, -0.183348f, -0.167670f, -0.151607f, -0.134585f, -0.116624f, -0.096605f, -0.073157f, -0.046830f, -0.019722f, 0.006408f, 0.030219f, 0.049849f, 0.063222f, 0.068554f, 0.064149f, 0.048963f, 0.023015f, -0.014445f, -0.065932f, -0.132497f, -0.211661f, -0.301246f, -0.401651f, -0.510888f, -0.622490f, -0.732373f, -0.841490f, -0.948993f, -1.053059f, -1.159075f, -1.265357f, -1.332750f, -1.299989f, -1.156448f, -0.976901f, -0.852061f, -0.803729f} - }, - { - {1.162181f, 1.141798f, 1.179331f, 1.312669f, 1.480555f, 1.604003f, 1.670306f, 1.695382f, 1.657718f, 1.541807f, 1.413737f, 1.363031f, 1.373945f, 1.344708f, 1.245904f, 1.165785f, 1.167020f, 1.190832f, 1.158172f, 1.088594f, 1.049454f, 1.044643f, 1.028324f, 0.992763f, 0.971665f, 0.973963f, 0.973448f, 0.958360f, 0.946807f, 0.954173f, 0.976219f, 1.002416f, 1.024019f, 1.032959f, 1.029383f, 1.026640f, 1.038825f, 1.068822f, 1.113169f, 1.168957f, 1.230999f, 1.291508f, 1.346952f, 1.398324f, 1.443741f, 1.478287f, 1.501426f, 1.518040f, 1.532576f, 1.547027f, 1.562611f, 1.578765f, 1.592058f, 1.598749f, 1.596511f, 1.583342f, 1.558420f, 1.523901f, 1.482143f, 1.432374f, 1.373890f, 1.310066f, 1.244815f, 1.177941f, 1.108302f, 1.038172f, 0.970189f, 0.903576f, 0.837584f, 0.775562f, 0.722310f, 0.680443f, 0.651673f, 0.638265f, 0.641074f, 0.658779f, 0.689980f, 0.733722f, 0.788343f, 0.852546f, 0.926831f, 1.011394f, 1.104140f, 1.203288f, 1.309951f, 1.425422f, 1.547756f, 1.673494f, 1.800797f, 1.928139f, 2.051052f, 2.162499f, 2.256187f, 2.328001f, 2.374142f, 2.389503f, - 2.369730f, 2.314896f, 2.228939f, 2.114741f, 1.972694f, 1.805661f, 1.621289f, 1.426246f, 1.222051f, 1.010434f, 0.798653f, 0.594793f, 0.401641f, 0.220362f, 0.056562f, -0.082970f, -0.197029f, -0.288612f, -0.359153f, -0.408639f, -0.439636f, -0.457088f, -0.464729f, -0.464047f, -0.456113f, -0.442968f, -0.427436f, -0.411786f, -0.396493f, -0.381143f, -0.366415f, -0.353190f, -0.339754f, -0.322693f, -0.300816f, -0.275555f, -0.247788f, -0.217400f, -0.185761f, -0.155837f, -0.130316f, -0.111467f, -0.101559f, -0.102274f, -0.115577f, -0.144891f, -0.192498f, -0.257270f, -0.338656f, -0.439477f, -0.560090f, -0.695118f, -0.840907f, -0.998289f, -1.164095f, -1.332994f, -1.508120f, -1.680480f, -1.788383f, -1.743468f, -1.535858f, -1.279623f, -1.106724f, -1.043498f}, - {0.905588f, 0.678721f, 0.311452f, -0.074075f, -0.391395f, -0.617293f, -0.746184f, -0.740920f, -0.564252f, -0.254379f, 0.071055f, 0.303498f, 0.417361f, 0.449527f, 0.432288f, 0.367893f, 0.256058f, 0.119389f, -0.008961f, -0.114172f, -0.203831f, -0.281005f, -0.325060f, -0.311031f, -0.241850f, -0.146096f, -0.046032f, 0.054939f, 0.152046f, 0.226111f, 0.259475f, 0.251935f, 0.213195f, 0.150231f, 0.069290f, -0.018553f, -0.100712f, -0.166582f, -0.205558f, -0.209673f, -0.181832f, -0.135168f, -0.081370f, -0.024250f, 0.034933f, 0.092041f, 0.141134f, 0.175712f, 0.187987f, 0.171668f, 0.127233f, 0.062532f, -0.011072f, -0.081089f, -0.134991f, -0.163771f, -0.165597f, -0.144952f, -0.109017f, -0.065402f, -0.020706f, 0.021494f, 0.060945f, 0.098011f, 0.130933f, 0.155438f, 0.165387f, 0.153670f, 0.114571f, 0.047357f, -0.041172f, -0.136224f, -0.216658f, -0.259817f, -0.249548f, -0.183688f, -0.076336f, 0.046314f, 0.154535f, 0.224647f, 0.245627f, 0.219783f, 0.158447f, 0.076683f, -0.010276f, -0.088825f, -0.147781f, -0.178799f, -0.177443f, -0.145071f, -0.089700f, -0.024150f, 0.037705f, 0.084486f, 0.109662f, 0.112458f, - 0.097013f, 0.070123f, 0.038867f, 0.009115f, -0.015219f, -0.032411f, -0.042533f, -0.046682f, -0.046354f, -0.043035f, -0.037774f, -0.030925f, -0.022303f, -0.011540f, 0.001583f, 0.016669f, 0.032205f, 0.045559f, 0.053690f, 0.054105f, 0.045640f, 0.028983f, 0.006793f, -0.016842f, -0.037453f, -0.051237f, -0.055876f, -0.051059f, -0.038496f, -0.021237f, -0.002673f, 0.014251f, 0.027456f, 0.035870f, 0.039284f, 0.038016f, 0.032623f, 0.023845f, 0.012634f, 0.000134f, -0.012341f, -0.023309f, -0.031253f, -0.034934f, -0.033690f, -0.027594f, -0.017500f, -0.005027f, 0.007694f, 0.018568f, 0.026056f, 0.029352f, 0.028366f, 0.023762f, 0.016767f, 0.008566f, -0.000041f, -0.007969f, -0.013188f, -0.013852f, -0.010529f, -0.006339f, -0.004049f, -0.003641f} - }, - { - {0.905588f, 0.678721f, 0.311452f, -0.074075f, -0.391395f, -0.617293f, -0.746184f, -0.740920f, -0.564252f, -0.254379f, 0.071055f, 0.303498f, 0.417361f, 0.449527f, 0.432288f, 0.367893f, 0.256058f, 0.119389f, -0.008961f, -0.114172f, -0.203831f, -0.281005f, -0.325060f, -0.311031f, -0.241850f, -0.146096f, -0.046032f, 0.054939f, 0.152046f, 0.226111f, 0.259475f, 0.251935f, 0.213195f, 0.150231f, 0.069290f, -0.018553f, -0.100712f, -0.166582f, -0.205558f, -0.209673f, -0.181832f, -0.135168f, -0.081370f, -0.024250f, 0.034933f, 0.092041f, 0.141134f, 0.175712f, 0.187987f, 0.171668f, 0.127233f, 0.062532f, -0.011072f, -0.081089f, -0.134991f, -0.163771f, -0.165597f, -0.144952f, -0.109017f, -0.065402f, -0.020706f, 0.021494f, 0.060945f, 0.098011f, 0.130933f, 0.155438f, 0.165387f, 0.153670f, 0.114571f, 0.047357f, -0.041172f, -0.136224f, -0.216658f, -0.259817f, -0.249548f, -0.183688f, -0.076336f, 0.046314f, 0.154535f, 0.224647f, 0.245627f, 0.219783f, 0.158447f, 0.076683f, -0.010276f, -0.088825f, -0.147781f, -0.178799f, -0.177443f, -0.145071f, -0.089700f, -0.024150f, 0.037705f, 0.084486f, 0.109662f, 0.112458f, - 0.097013f, 0.070123f, 0.038867f, 0.009115f, -0.015219f, -0.032411f, -0.042533f, -0.046682f, -0.046354f, -0.043035f, -0.037774f, -0.030925f, -0.022303f, -0.011540f, 0.001583f, 0.016669f, 0.032205f, 0.045559f, 0.053690f, 0.054105f, 0.045640f, 0.028983f, 0.006793f, -0.016842f, -0.037453f, -0.051237f, -0.055876f, -0.051059f, -0.038496f, -0.021237f, -0.002673f, 0.014251f, 0.027456f, 0.035870f, 0.039284f, 0.038016f, 0.032623f, 0.023845f, 0.012634f, 0.000134f, -0.012341f, -0.023309f, -0.031253f, -0.034934f, -0.033690f, -0.027594f, -0.017500f, -0.005027f, 0.007694f, 0.018568f, 0.026056f, 0.029352f, 0.028366f, 0.023762f, 0.016767f, 0.008566f, -0.000041f, -0.007969f, -0.013188f, -0.013852f, -0.010529f, -0.006339f, -0.004049f, -0.003641f}, - {1.162181f, 1.141798f, 1.179331f, 1.312669f, 1.480555f, 1.604003f, 1.670306f, 1.695382f, 1.657718f, 1.541807f, 1.413737f, 1.363031f, 1.373945f, 1.344708f, 1.245904f, 1.165785f, 1.167020f, 1.190832f, 1.158172f, 1.088594f, 1.049454f, 1.044643f, 1.028324f, 0.992763f, 0.971665f, 0.973963f, 0.973448f, 0.958360f, 0.946807f, 0.954173f, 0.976219f, 1.002416f, 1.024019f, 1.032959f, 1.029383f, 1.026640f, 1.038825f, 1.068822f, 1.113169f, 1.168957f, 1.230999f, 1.291508f, 1.346952f, 1.398324f, 1.443741f, 1.478287f, 1.501426f, 1.518040f, 1.532576f, 1.547027f, 1.562611f, 1.578765f, 1.592058f, 1.598749f, 1.596511f, 1.583342f, 1.558420f, 1.523901f, 1.482143f, 1.432374f, 1.373890f, 1.310066f, 1.244815f, 1.177941f, 1.108302f, 1.038172f, 0.970189f, 0.903576f, 0.837584f, 0.775562f, 0.722310f, 0.680443f, 0.651673f, 0.638265f, 0.641074f, 0.658779f, 0.689980f, 0.733722f, 0.788343f, 0.852546f, 0.926831f, 1.011394f, 1.104140f, 1.203288f, 1.309951f, 1.425422f, 1.547756f, 1.673494f, 1.800797f, 1.928139f, 2.051052f, 2.162499f, 2.256187f, 2.328001f, 2.374142f, 2.389503f, - 2.369730f, 2.314896f, 2.228939f, 2.114741f, 1.972694f, 1.805661f, 1.621289f, 1.426246f, 1.222051f, 1.010434f, 0.798653f, 0.594793f, 0.401641f, 0.220362f, 0.056562f, -0.082970f, -0.197029f, -0.288612f, -0.359153f, -0.408639f, -0.439636f, -0.457088f, -0.464729f, -0.464047f, -0.456113f, -0.442968f, -0.427436f, -0.411786f, -0.396493f, -0.381143f, -0.366415f, -0.353190f, -0.339754f, -0.322693f, -0.300816f, -0.275555f, -0.247788f, -0.217400f, -0.185761f, -0.155837f, -0.130316f, -0.111467f, -0.101559f, -0.102274f, -0.115577f, -0.144891f, -0.192498f, -0.257270f, -0.338656f, -0.439477f, -0.560090f, -0.695118f, -0.840907f, -0.998289f, -1.164095f, -1.332994f, -1.508120f, -1.680480f, -1.788383f, -1.743468f, -1.535858f, -1.279623f, -1.106724f, -1.043498f} - }, - { - {1.159622f, 1.193691f, 1.237258f, 1.320849f, 1.487298f, 1.666553f, 1.724102f, 1.650966f, 1.573042f, 1.544114f, 1.472362f, 1.307714f, 1.161858f, 1.150104f, 1.223815f, 1.264871f, 1.263073f, 1.287888f, 1.342278f, 1.362131f, 1.337721f, 1.330944f, 1.368021f, 1.396360f, 1.364710f, 1.288691f, 1.218865f, 1.183954f, 1.180171f, 1.187830f, 1.187661f, 1.180495f, 1.195032f, 1.259113f, 1.362844f, 1.466040f, 1.540461f, 1.588501f, 1.622646f, 1.646051f, 1.658212f, 1.665631f, 1.678718f, 1.703510f, 1.739748f, 1.783278f, 1.828707f, 1.872076f, 1.911060f, 1.941699f, 1.957382f, 1.953400f, 1.930581f, 1.892863f, 1.843933f, 1.788203f, 1.732141f, 1.681303f, 1.636732f, 1.595689f, 1.554498f, 1.508967f, 1.453241f, 1.380844f, 1.287974f, 1.175649f, 1.048847f, 0.914443f, 0.780366f, 0.655432f, 0.547534f, 0.460905f, 0.396117f, 0.353230f, 0.333368f, 0.336440f, 0.359235f, 0.397509f, 0.448944f, 0.512890f, 0.588417f, 0.673852f, 0.767268f, 0.866240f, 0.967523f, 1.067477f, 1.162781f, 1.251696f, 1.335718f, 1.418848f, 1.503672f, 1.589111f, 1.673021f, 1.754375f, 1.830218f, 1.892793f, - 1.933260f, 1.946807f, 1.930919f, 1.880810f, 1.791440f, 1.663674f, 1.504434f, 1.320882f, 1.118452f, 0.904794f, 0.690996f, 0.486304f, 0.293952f, 0.114062f, -0.051677f, -0.200995f, -0.335215f, -0.458659f, -0.573224f, -0.676398f, -0.765669f, -0.841798f, -0.905649f, -0.954822f, -0.986818f, -1.003613f, -1.009628f, -1.006662f, -0.994352f, -0.974281f, -0.949658f, -0.921427f, -0.888107f, -0.849284f, -0.806653f, -0.762102f, -0.716996f, -0.672764f, -0.630702f, -0.592073f, -0.558976f, -0.533407f, -0.515537f, -0.505563f, -0.506735f, -0.523053f, -0.554958f, -0.601619f, -0.665696f, -0.750024f, -0.851507f, -0.964704f, -1.088238f, -1.219977f, -1.351507f, -1.477464f, -1.598506f, -1.692749f, -1.695051f, -1.547196f, -1.283387f, -1.029223f, -0.886823f, -0.846926f}, - {0.917530f, 0.651778f, 0.241502f, -0.178942f, -0.536560f, -0.786296f, -0.860850f, -0.706638f, -0.361171f, 0.046809f, 0.387357f, 0.602717f, 0.692047f, 0.656485f, 0.487419f, 0.202537f, -0.131209f, -0.422884f, -0.603096f, -0.644757f, -0.551449f, -0.342251f, -0.055144f, 0.244353f, 0.476752f, 0.583435f, 0.550410f, 0.400902f, 0.174798f, -0.079777f, -0.306983f, -0.454414f, -0.491763f, -0.418131f, -0.255796f, -0.044428f, 0.162865f, 0.313621f, 0.377506f, 0.355066f, 0.266380f, 0.136211f, -0.009740f, -0.143360f, -0.238377f, -0.278253f, -0.259547f, -0.190305f, -0.088010f, 0.022991f, 0.117569f, 0.177810f, 0.197350f, 0.179580f, 0.133113f, 0.068872f, -0.000779f, -0.063476f, -0.109645f, -0.134287f, -0.136342f, -0.117479f, -0.081934f, -0.036147f, 0.013007f, 0.059765f, 0.099237f, 0.126500f, 0.136441f, 0.124091f, 0.085864f, 0.023102f, -0.053770f, -0.125481f, -0.170570f, -0.174290f, -0.134420f, -0.062132f, 0.021772f, 0.094424f, 0.139321f, 0.150911f, 0.133188f, 0.094735f, 0.044256f, -0.011227f, -0.065550f, -0.111473f, -0.139846f, -0.141427f, -0.111062f, -0.052088f, 0.022029f, 0.091072f, 0.135690f, 0.145016f, - 0.119868f, 0.070626f, 0.012094f, -0.041731f, -0.081087f, -0.101328f, -0.102037f, -0.085784f, -0.057045f, -0.021038f, 0.017163f, 0.052643f, 0.080347f, 0.095430f, 0.094095f, 0.074476f, 0.037848f, -0.010003f, -0.058809f, -0.096245f, -0.111730f, -0.100012f, -0.063528f, -0.012321f, 0.039313f, 0.078026f, 0.095507f, 0.090021f, 0.065833f, 0.031042f, -0.005483f, -0.036519f, -0.057334f, -0.065748f, -0.062075f, -0.048499f, -0.027988f, -0.003851f, 0.020134f, 0.040124f, 0.053012f, 0.056670f, 0.050087f, 0.034085f, 0.011613f, -0.013157f, -0.035718f, -0.051525f, -0.056944f, -0.050760f, -0.034341f, -0.010740f, 0.015371f, 0.037961f, 0.051881f, 0.054631f, 0.045371f, 0.025148f, 0.000589f, -0.016591f, -0.019315f, -0.012675f, -0.006967f, -0.005603f} - }, - { - {0.917530f, 0.651778f, 0.241502f, -0.178942f, -0.536560f, -0.786296f, -0.860850f, -0.706638f, -0.361171f, 0.046809f, 0.387357f, 0.602717f, 0.692047f, 0.656485f, 0.487419f, 0.202537f, -0.131209f, -0.422884f, -0.603096f, -0.644757f, -0.551449f, -0.342251f, -0.055144f, 0.244353f, 0.476752f, 0.583435f, 0.550410f, 0.400902f, 0.174798f, -0.079777f, -0.306983f, -0.454414f, -0.491763f, -0.418131f, -0.255796f, -0.044428f, 0.162865f, 0.313621f, 0.377506f, 0.355066f, 0.266380f, 0.136211f, -0.009740f, -0.143360f, -0.238377f, -0.278253f, -0.259547f, -0.190305f, -0.088010f, 0.022991f, 0.117569f, 0.177810f, 0.197350f, 0.179580f, 0.133113f, 0.068872f, -0.000779f, -0.063476f, -0.109645f, -0.134287f, -0.136342f, -0.117479f, -0.081934f, -0.036147f, 0.013007f, 0.059765f, 0.099237f, 0.126500f, 0.136441f, 0.124091f, 0.085864f, 0.023102f, -0.053770f, -0.125481f, -0.170570f, -0.174290f, -0.134420f, -0.062132f, 0.021772f, 0.094424f, 0.139321f, 0.150911f, 0.133188f, 0.094735f, 0.044256f, -0.011227f, -0.065550f, -0.111473f, -0.139846f, -0.141427f, -0.111062f, -0.052088f, 0.022029f, 0.091072f, 0.135690f, 0.145016f, - 0.119868f, 0.070626f, 0.012094f, -0.041731f, -0.081087f, -0.101328f, -0.102037f, -0.085784f, -0.057045f, -0.021038f, 0.017163f, 0.052643f, 0.080347f, 0.095430f, 0.094095f, 0.074476f, 0.037848f, -0.010003f, -0.058809f, -0.096245f, -0.111730f, -0.100012f, -0.063528f, -0.012321f, 0.039313f, 0.078026f, 0.095507f, 0.090021f, 0.065833f, 0.031042f, -0.005483f, -0.036519f, -0.057334f, -0.065748f, -0.062075f, -0.048499f, -0.027988f, -0.003851f, 0.020134f, 0.040124f, 0.053012f, 0.056670f, 0.050087f, 0.034085f, 0.011613f, -0.013157f, -0.035718f, -0.051525f, -0.056944f, -0.050760f, -0.034341f, -0.010740f, 0.015371f, 0.037961f, 0.051881f, 0.054631f, 0.045371f, 0.025148f, 0.000589f, -0.016591f, -0.019315f, -0.012675f, -0.006967f, -0.005603f}, - {1.159622f, 1.193691f, 1.237258f, 1.320849f, 1.487298f, 1.666553f, 1.724102f, 1.650966f, 1.573042f, 1.544114f, 1.472362f, 1.307714f, 1.161858f, 1.150104f, 1.223815f, 1.264871f, 1.263073f, 1.287888f, 1.342278f, 1.362131f, 1.337721f, 1.330944f, 1.368021f, 1.396360f, 1.364710f, 1.288691f, 1.218865f, 1.183954f, 1.180171f, 1.187830f, 1.187661f, 1.180495f, 1.195032f, 1.259113f, 1.362844f, 1.466040f, 1.540461f, 1.588501f, 1.622646f, 1.646051f, 1.658212f, 1.665631f, 1.678718f, 1.703510f, 1.739748f, 1.783278f, 1.828707f, 1.872076f, 1.911060f, 1.941699f, 1.957382f, 1.953400f, 1.930581f, 1.892863f, 1.843933f, 1.788203f, 1.732141f, 1.681303f, 1.636732f, 1.595689f, 1.554498f, 1.508967f, 1.453241f, 1.380844f, 1.287974f, 1.175649f, 1.048847f, 0.914443f, 0.780366f, 0.655432f, 0.547534f, 0.460905f, 0.396117f, 0.353230f, 0.333368f, 0.336440f, 0.359235f, 0.397509f, 0.448944f, 0.512890f, 0.588417f, 0.673852f, 0.767268f, 0.866240f, 0.967523f, 1.067477f, 1.162781f, 1.251696f, 1.335718f, 1.418848f, 1.503672f, 1.589111f, 1.673021f, 1.754375f, 1.830218f, 1.892793f, - 1.933260f, 1.946807f, 1.930919f, 1.880810f, 1.791440f, 1.663674f, 1.504434f, 1.320882f, 1.118452f, 0.904794f, 0.690996f, 0.486304f, 0.293952f, 0.114062f, -0.051677f, -0.200995f, -0.335215f, -0.458659f, -0.573224f, -0.676398f, -0.765669f, -0.841798f, -0.905649f, -0.954822f, -0.986818f, -1.003613f, -1.009628f, -1.006662f, -0.994352f, -0.974281f, -0.949658f, -0.921427f, -0.888107f, -0.849284f, -0.806653f, -0.762102f, -0.716996f, -0.672764f, -0.630702f, -0.592073f, -0.558976f, -0.533407f, -0.515537f, -0.505563f, -0.506735f, -0.523053f, -0.554958f, -0.601619f, -0.665696f, -0.750024f, -0.851507f, -0.964704f, -1.088238f, -1.219977f, -1.351507f, -1.477464f, -1.598506f, -1.692749f, -1.695051f, -1.547196f, -1.283387f, -1.029223f, -0.886823f, -0.846926f} - }, - { - {1.204534f, 1.203210f, 1.190459f, 1.158364f, 1.109879f, 1.047847f, 0.967182f, 0.886071f, 0.875240f, 1.004287f, 1.246157f, 1.481970f, 1.615355f, 1.637426f, 1.577214f, 1.457598f, 1.321024f, 1.229774f, 1.206408f, 1.223980f, 1.272061f, 1.371986f, 1.508691f, 1.612777f, 1.637477f, 1.601706f, 1.541886f, 1.477270f, 1.436013f, 1.455349f, 1.534155f, 1.631670f, 1.725521f, 1.826471f, 1.929526f, 1.998858f, 2.013654f, 1.990557f, 1.951995f, 1.904864f, 1.854980f, 1.812358f, 1.776533f, 1.738280f, 1.696957f, 1.660023f, 1.629610f, 1.603794f, 1.584323f, 1.570732f, 1.554937f, 1.532291f, 1.509613f, 1.494021f, 1.482648f, 1.469744f, 1.454557f, 1.436482f, 1.411078f, 1.376370f, 1.336916f, 1.298175f, 1.261515f, 1.226108f, 1.191183f, 1.154956f, 1.113954f, 1.064034f, 1.001800f, 0.926672f, 0.841820f, 0.751089f, 0.655693f, 0.556482f, 0.457666f, 0.364250f, 0.277024f, 0.194155f, 0.116696f, 0.048473f, -0.008535f, -0.054762f, -0.089740f, -0.112245f, -0.123899f, -0.129341f, -0.132173f, -0.133099f, -0.132513f, -0.132606f, -0.135739f, -0.142102f, -0.150075f, -0.158190f, -0.165938f, -0.173194f, - -0.179698f, -0.185269f, -0.190331f, -0.196010f, -0.203236f, -0.211655f, -0.220071f, -0.228003f, -0.235580f, -0.241688f, -0.244000f, -0.241462f, -0.234924f, -0.224740f, -0.209975f, -0.190727f, -0.168794f, -0.145304f, -0.120014f, -0.093330f, -0.066541f, -0.039964f, -0.013201f, 0.013257f, 0.038995f, 0.065097f, 0.092403f, 0.120117f, 0.148133f, 0.178226f, 0.211116f, 0.245318f, 0.280246f, 0.316864f, 0.354258f, 0.389361f, 0.420350f, 0.446556f, 0.465866f, 0.476164f, 0.477674f, 0.470479f, 0.452941f, 0.425418f, 0.390777f, 0.349073f, 0.298093f, 0.240144f, 0.179989f, 0.116389f, 0.045546f, -0.029475f, -0.104553f, -0.184802f, -0.276288f, -0.377633f, -0.495071f, -0.645493f, -0.815390f, -0.936731f, -0.946277f, -0.861930f, -0.763516f, -0.709030f}, - {1.086199f, 1.004862f, 0.856920f, 0.638693f, 0.364003f, 0.130220f, 0.067679f, 0.200071f, 0.403211f, 0.509750f, 0.423010f, 0.156791f, -0.172783f, -0.408435f, -0.470895f, -0.422906f, -0.382903f, -0.401158f, -0.461457f, -0.557666f, -0.691515f, -0.814952f, -0.853789f, -0.795975f, -0.704559f, -0.639966f, -0.610169f, -0.594209f, -0.572008f, -0.524834f, -0.437816f, -0.312986f, -0.167818f, -0.022362f, 0.104727f, 0.198993f, 0.262493f, 0.315863f, 0.378159f, 0.450032f, 0.520371f, 0.579860f, 0.623926f, 0.651912f, 0.668089f, 0.677538f, 0.679621f, 0.670347f, 0.649417f, 0.619352f, 0.580188f, 0.530227f, 0.469047f, 0.395638f, 0.307512f, 0.205554f, 0.095977f, -0.015238f, -0.125770f, -0.233301f, -0.333345f, -0.422540f, -0.499945f, -0.564191f, -0.613419f, -0.648393f, -0.671605f, -0.682790f, -0.678457f, -0.655912f, -0.615299f, -0.558515f, -0.488718f, -0.410330f, -0.327205f, -0.240846f, -0.151506f, -0.060435f, 0.029743f, 0.116185f, 0.196603f, 0.269218f, 0.332259f, 0.383578f, 0.421216f, 0.444550f, 0.454402f, 0.452174f, 0.439605f, 0.418976f, 0.392290f, 0.360410f, 0.324023f, 0.284973f, 0.245420f, 0.206302f, - 0.167896f, 0.131240f, 0.097662f, 0.067544f, 0.040831f, 0.018067f, -0.000312f, -0.015097f, -0.027643f, -0.038677f, -0.048631f, -0.058475f, -0.069291f, -0.081482f, -0.095092f, -0.110486f, -0.128190f, -0.148421f, -0.171029f, -0.195562f, -0.221182f, -0.246725f, -0.270807f, -0.291832f, -0.308285f, -0.319211f, -0.323959f, -0.321487f, -0.310646f, -0.291111f, -0.263101f, -0.226361f, -0.180686f, -0.127219f, -0.067738f, -0.002935f, 0.066945f, 0.140199f, 0.214330f, 0.288003f, 0.360118f, 0.427762f, 0.487507f, 0.537747f, 0.577193f, 0.602502f, 0.610203f, 0.599283f, 0.569254f, 0.518270f, 0.446010f, 0.355357f, 0.248976f, 0.128708f, -0.000380f, -0.132271f, -0.265471f, -0.391680f, -0.476715f, -0.476959f, -0.392112f, -0.282972f, -0.214100f, -0.193429f} - }, - { - {1.086199f, 1.004862f, 0.856920f, 0.638693f, 0.364003f, 0.130220f, 0.067679f, 0.200071f, 0.403211f, 0.509750f, 0.423010f, 0.156791f, -0.172783f, -0.408435f, -0.470895f, -0.422906f, -0.382903f, -0.401158f, -0.461457f, -0.557666f, -0.691515f, -0.814952f, -0.853789f, -0.795975f, -0.704559f, -0.639966f, -0.610169f, -0.594209f, -0.572008f, -0.524834f, -0.437816f, -0.312986f, -0.167818f, -0.022362f, 0.104727f, 0.198993f, 0.262493f, 0.315863f, 0.378159f, 0.450032f, 0.520371f, 0.579860f, 0.623926f, 0.651912f, 0.668089f, 0.677538f, 0.679621f, 0.670347f, 0.649417f, 0.619352f, 0.580188f, 0.530227f, 0.469047f, 0.395638f, 0.307512f, 0.205554f, 0.095977f, -0.015238f, -0.125770f, -0.233301f, -0.333345f, -0.422540f, -0.499945f, -0.564191f, -0.613419f, -0.648393f, -0.671605f, -0.682790f, -0.678457f, -0.655912f, -0.615299f, -0.558515f, -0.488718f, -0.410330f, -0.327205f, -0.240846f, -0.151506f, -0.060435f, 0.029743f, 0.116185f, 0.196603f, 0.269218f, 0.332259f, 0.383578f, 0.421216f, 0.444550f, 0.454402f, 0.452174f, 0.439605f, 0.418976f, 0.392290f, 0.360410f, 0.324023f, 0.284973f, 0.245420f, 0.206302f, - 0.167896f, 0.131240f, 0.097662f, 0.067544f, 0.040831f, 0.018067f, -0.000312f, -0.015097f, -0.027643f, -0.038677f, -0.048631f, -0.058475f, -0.069291f, -0.081482f, -0.095092f, -0.110486f, -0.128190f, -0.148421f, -0.171029f, -0.195562f, -0.221182f, -0.246725f, -0.270807f, -0.291832f, -0.308285f, -0.319211f, -0.323959f, -0.321487f, -0.310646f, -0.291111f, -0.263101f, -0.226361f, -0.180686f, -0.127219f, -0.067738f, -0.002935f, 0.066945f, 0.140199f, 0.214330f, 0.288003f, 0.360118f, 0.427762f, 0.487507f, 0.537747f, 0.577193f, 0.602502f, 0.610203f, 0.599283f, 0.569254f, 0.518270f, 0.446010f, 0.355357f, 0.248976f, 0.128708f, -0.000380f, -0.132271f, -0.265471f, -0.391680f, -0.476715f, -0.476959f, -0.392112f, -0.282972f, -0.214100f, -0.193429f}, - {1.204534f, 1.203210f, 1.190459f, 1.158364f, 1.109879f, 1.047847f, 0.967182f, 0.886071f, 0.875240f, 1.004287f, 1.246157f, 1.481970f, 1.615355f, 1.637426f, 1.577214f, 1.457598f, 1.321024f, 1.229774f, 1.206408f, 1.223980f, 1.272061f, 1.371986f, 1.508691f, 1.612777f, 1.637477f, 1.601706f, 1.541886f, 1.477270f, 1.436013f, 1.455349f, 1.534155f, 1.631670f, 1.725521f, 1.826471f, 1.929526f, 1.998858f, 2.013654f, 1.990557f, 1.951995f, 1.904864f, 1.854980f, 1.812358f, 1.776533f, 1.738280f, 1.696957f, 1.660023f, 1.629610f, 1.603794f, 1.584323f, 1.570732f, 1.554937f, 1.532291f, 1.509613f, 1.494021f, 1.482648f, 1.469744f, 1.454557f, 1.436482f, 1.411078f, 1.376370f, 1.336916f, 1.298175f, 1.261515f, 1.226108f, 1.191183f, 1.154956f, 1.113954f, 1.064034f, 1.001800f, 0.926672f, 0.841820f, 0.751089f, 0.655693f, 0.556482f, 0.457666f, 0.364250f, 0.277024f, 0.194155f, 0.116696f, 0.048473f, -0.008535f, -0.054762f, -0.089740f, -0.112245f, -0.123899f, -0.129341f, -0.132173f, -0.133099f, -0.132513f, -0.132606f, -0.135739f, -0.142102f, -0.150075f, -0.158190f, -0.165938f, -0.173194f, - -0.179698f, -0.185269f, -0.190331f, -0.196010f, -0.203236f, -0.211655f, -0.220071f, -0.228003f, -0.235580f, -0.241688f, -0.244000f, -0.241462f, -0.234924f, -0.224740f, -0.209975f, -0.190727f, -0.168794f, -0.145304f, -0.120014f, -0.093330f, -0.066541f, -0.039964f, -0.013201f, 0.013257f, 0.038995f, 0.065097f, 0.092403f, 0.120117f, 0.148133f, 0.178226f, 0.211116f, 0.245318f, 0.280246f, 0.316864f, 0.354258f, 0.389361f, 0.420350f, 0.446556f, 0.465866f, 0.476164f, 0.477674f, 0.470479f, 0.452941f, 0.425418f, 0.390777f, 0.349073f, 0.298093f, 0.240144f, 0.179989f, 0.116389f, 0.045546f, -0.029475f, -0.104553f, -0.184802f, -0.276288f, -0.377633f, -0.495071f, -0.645493f, -0.815390f, -0.936731f, -0.946277f, -0.861930f, -0.763516f, -0.709030f} - }, - { - {1.136670f, 1.135642f, 1.159558f, 1.242764f, 1.363234f, 1.418639f, 1.336924f, 1.189682f, 1.113008f, 1.131924f, 1.157617f, 1.151455f, 1.181552f, 1.293689f, 1.426449f, 1.500166f, 1.514642f, 1.509585f, 1.486776f, 1.424261f, 1.330820f, 1.239551f, 1.165466f, 1.100846f, 1.040119f, 0.986673f, 0.942034f, 0.902330f, 0.862433f, 0.819391f, 0.776566f, 0.743854f, 0.727187f, 0.719668f, 0.709421f, 0.693441f, 0.678491f, 0.672553f, 0.680404f, 0.703111f, 0.736854f, 0.775141f, 0.814760f, 0.856596f, 0.900306f, 0.942530f, 0.980421f, 1.012484f, 1.035999f, 1.047912f, 1.048713f, 1.042995f, 1.036815f, 1.035930f, 1.044536f, 1.063597f, 1.091269f, 1.124936f, 1.160818f, 1.192654f, 1.214352f, 1.223836f, 1.221719f, 1.207688f, 1.181727f, 1.147450f, 1.110173f, 1.072170f, 1.032778f, 0.991992f, 0.950676f, 0.907968f, 0.861440f, 0.809940f, 0.754528f, 0.696829f, 0.637989f, 0.579463f, 0.523977f, 0.474852f, 0.433794f, 0.399580f, 0.369634f, 0.342464f, 0.317497f, 0.293477f, 0.269419f, 0.247151f, 0.230793f, 0.223510f, 0.226350f, 0.239825f, 0.264468f, 0.299833f, 0.344597f, 0.397722f, - 0.458584f, 0.526418f, 0.600176f, 0.677918f, 0.755919f, 0.829709f, 0.896231f, 0.953601f, 0.999158f, 1.030126f, 1.046156f, 1.048788f, 1.038255f, 1.013274f, 0.974186f, 0.923755f, 0.864275f, 0.796121f, 0.720041f, 0.639023f, 0.556603f, 0.474308f, 0.392028f, 0.310457f, 0.231609f, 0.156391f, 0.083091f, 0.009683f, -0.063465f, -0.135078f, -0.206105f, -0.278586f, -0.351844f, -0.422799f, -0.489943f, -0.553901f, -0.613917f, -0.667023f, -0.711334f, -0.747585f, -0.776837f, -0.798893f, -0.813586f, -0.822199f, -0.827084f, -0.830337f, -0.832774f, -0.834571f, -0.837262f, -0.843529f, -0.854126f, -0.867669f, -0.884714f, -0.908029f, -0.937931f, -0.973595f, -1.017808f, -1.066008f, -1.087268f, -1.038917f, -0.917834f, -0.780429f, -0.689733f, -0.656403f}, - {0.960640f, 0.816300f, 0.532130f, 0.162721f, -0.177503f, -0.386043f, -0.458478f, -0.483376f, -0.540231f, -0.613871f, -0.621946f, -0.516051f, -0.334075f, -0.151666f, -0.004270f, 0.128279f, 0.272309f, 0.416162f, 0.517877f, 0.544624f, 0.498443f, 0.408788f, 0.305793f, 0.199974f, 0.084387f, -0.046450f, -0.182699f, -0.304310f, -0.394850f, -0.445761f, -0.450978f, -0.406320f, -0.316884f, -0.199695f, -0.075242f, 0.041820f, 0.142995f, 0.221772f, 0.273300f, 0.296982f, 0.296450f, 0.276859f, 0.243007f, 0.198850f, 0.147055f, 0.089044f, 0.026127f, -0.039590f, -0.105511f, -0.168772f, -0.225337f, -0.269209f, -0.293289f, -0.291676f, -0.261993f, -0.206338f, -0.130253f, -0.040664f, 0.055241f, 0.149519f, 0.232931f, 0.295939f, 0.330770f, 0.333107f, 0.302661f, 0.242736f, 0.159157f, 0.059248f, -0.048476f, -0.153986f, -0.245588f, -0.310890f, -0.339319f, -0.325534f, -0.271853f, -0.188083f, -0.088946f, 0.009493f, 0.093484f, 0.154613f, 0.190898f, 0.205217f, 0.202369f, 0.186878f, 0.162125f, 0.130210f, 0.092281f, 0.049362f, 0.003253f, -0.043024f, -0.085315f, -0.119041f, -0.140550f, -0.148332f, -0.143136f, -0.127149f, - -0.103171f, -0.074084f, -0.042377f, -0.009910f, 0.021838f, 0.051455f, 0.077582f, 0.098903f, 0.113990f, 0.121384f, 0.119975f, 0.109245f, 0.089333f, 0.061281f, 0.027240f, -0.009804f, -0.046484f, -0.079281f, -0.104807f, -0.120441f, -0.124813f, -0.117785f, -0.100313f, -0.074391f, -0.042701f, -0.008052f, 0.026806f, 0.059088f, 0.086138f, 0.105684f, 0.115807f, 0.115012f, 0.102800f, 0.080165f, 0.049512f, 0.014383f, -0.020831f, -0.051690f, -0.074772f, -0.088141f, -0.091258f, -0.084989f, -0.071486f, -0.053399f, -0.033132f, -0.012815f, 0.005713f, 0.021390f, 0.033926f, 0.043146f, 0.048887f, 0.051423f, 0.051133f, 0.047899f, 0.041642f, 0.032825f, 0.021467f, 0.007161f, -0.008032f, -0.018531f, -0.020230f, -0.015601f, -0.010789f, -0.008773f} - }, - { - {0.960640f, 0.816300f, 0.532130f, 0.162721f, -0.177503f, -0.386043f, -0.458478f, -0.483376f, -0.540231f, -0.613871f, -0.621946f, -0.516051f, -0.334075f, -0.151666f, -0.004270f, 0.128279f, 0.272309f, 0.416162f, 0.517877f, 0.544624f, 0.498443f, 0.408788f, 0.305793f, 0.199974f, 0.084387f, -0.046450f, -0.182699f, -0.304310f, -0.394850f, -0.445761f, -0.450978f, -0.406320f, -0.316884f, -0.199695f, -0.075242f, 0.041820f, 0.142995f, 0.221772f, 0.273300f, 0.296982f, 0.296450f, 0.276859f, 0.243007f, 0.198850f, 0.147055f, 0.089044f, 0.026127f, -0.039590f, -0.105511f, -0.168772f, -0.225337f, -0.269209f, -0.293289f, -0.291676f, -0.261993f, -0.206338f, -0.130253f, -0.040664f, 0.055241f, 0.149519f, 0.232931f, 0.295939f, 0.330770f, 0.333107f, 0.302661f, 0.242736f, 0.159157f, 0.059248f, -0.048476f, -0.153986f, -0.245588f, -0.310890f, -0.339319f, -0.325534f, -0.271853f, -0.188083f, -0.088946f, 0.009493f, 0.093484f, 0.154613f, 0.190898f, 0.205217f, 0.202369f, 0.186878f, 0.162125f, 0.130210f, 0.092281f, 0.049362f, 0.003253f, -0.043024f, -0.085315f, -0.119041f, -0.140550f, -0.148332f, -0.143136f, -0.127149f, - -0.103171f, -0.074084f, -0.042377f, -0.009910f, 0.021838f, 0.051455f, 0.077582f, 0.098903f, 0.113990f, 0.121384f, 0.119975f, 0.109245f, 0.089333f, 0.061281f, 0.027240f, -0.009804f, -0.046484f, -0.079281f, -0.104807f, -0.120441f, -0.124813f, -0.117785f, -0.100313f, -0.074391f, -0.042701f, -0.008052f, 0.026806f, 0.059088f, 0.086138f, 0.105684f, 0.115807f, 0.115012f, 0.102800f, 0.080165f, 0.049512f, 0.014383f, -0.020831f, -0.051690f, -0.074772f, -0.088141f, -0.091258f, -0.084989f, -0.071486f, -0.053399f, -0.033132f, -0.012815f, 0.005713f, 0.021390f, 0.033926f, 0.043146f, 0.048887f, 0.051423f, 0.051133f, 0.047899f, 0.041642f, 0.032825f, 0.021467f, 0.007161f, -0.008032f, -0.018531f, -0.020230f, -0.015601f, -0.010789f, -0.008773f}, - {1.136670f, 1.135642f, 1.159558f, 1.242764f, 1.363234f, 1.418639f, 1.336924f, 1.189682f, 1.113008f, 1.131924f, 1.157617f, 1.151455f, 1.181552f, 1.293689f, 1.426449f, 1.500166f, 1.514642f, 1.509585f, 1.486776f, 1.424261f, 1.330820f, 1.239551f, 1.165466f, 1.100846f, 1.040119f, 0.986673f, 0.942034f, 0.902330f, 0.862433f, 0.819391f, 0.776566f, 0.743854f, 0.727187f, 0.719668f, 0.709421f, 0.693441f, 0.678491f, 0.672553f, 0.680404f, 0.703111f, 0.736854f, 0.775141f, 0.814760f, 0.856596f, 0.900306f, 0.942530f, 0.980421f, 1.012484f, 1.035999f, 1.047912f, 1.048713f, 1.042995f, 1.036815f, 1.035930f, 1.044536f, 1.063597f, 1.091269f, 1.124936f, 1.160818f, 1.192654f, 1.214352f, 1.223836f, 1.221719f, 1.207688f, 1.181727f, 1.147450f, 1.110173f, 1.072170f, 1.032778f, 0.991992f, 0.950676f, 0.907968f, 0.861440f, 0.809940f, 0.754528f, 0.696829f, 0.637989f, 0.579463f, 0.523977f, 0.474852f, 0.433794f, 0.399580f, 0.369634f, 0.342464f, 0.317497f, 0.293477f, 0.269419f, 0.247151f, 0.230793f, 0.223510f, 0.226350f, 0.239825f, 0.264468f, 0.299833f, 0.344597f, 0.397722f, - 0.458584f, 0.526418f, 0.600176f, 0.677918f, 0.755919f, 0.829709f, 0.896231f, 0.953601f, 0.999158f, 1.030126f, 1.046156f, 1.048788f, 1.038255f, 1.013274f, 0.974186f, 0.923755f, 0.864275f, 0.796121f, 0.720041f, 0.639023f, 0.556603f, 0.474308f, 0.392028f, 0.310457f, 0.231609f, 0.156391f, 0.083091f, 0.009683f, -0.063465f, -0.135078f, -0.206105f, -0.278586f, -0.351844f, -0.422799f, -0.489943f, -0.553901f, -0.613917f, -0.667023f, -0.711334f, -0.747585f, -0.776837f, -0.798893f, -0.813586f, -0.822199f, -0.827084f, -0.830337f, -0.832774f, -0.834571f, -0.837262f, -0.843529f, -0.854126f, -0.867669f, -0.884714f, -0.908029f, -0.937931f, -0.973595f, -1.017808f, -1.066008f, -1.087268f, -1.038917f, -0.917834f, -0.780429f, -0.689733f, -0.656403f} - }, - { - {1.068324f, 1.062066f, 1.083672f, 1.156642f, 1.251383f, 1.301241f, 1.270195f, 1.189834f, 1.115171f, 1.063568f, 1.022919f, 1.001888f, 1.030552f, 1.110370f, 1.199864f, 1.259787f, 1.284625f, 1.280603f, 1.242659f, 1.171775f, 1.093479f, 1.036606f, 1.002891f, 0.972808f, 0.933548f, 0.887633f, 0.839967f, 0.790500f, 0.739167f, 0.688251f, 0.638192f, 0.586505f, 0.531813f, 0.475822f, 0.421676f, 0.373637f, 0.338297f, 0.322536f, 0.328305f, 0.350663f, 0.382129f, 0.417959f, 0.456126f, 0.493831f, 0.526907f, 0.552956f, 0.572952f, 0.589166f, 0.603191f, 0.616479f, 0.631032f, 0.648516f, 0.669363f, 0.692743f, 0.716446f, 0.737125f, 0.751798f, 0.758883f, 0.757319f, 0.746131f, 0.726128f, 0.700462f, 0.671814f, 0.640056f, 0.603849f, 0.562908f, 0.517307f, 0.466388f, 0.410454f, 0.352646f, 0.297752f, 0.249844f, 0.211692f, 0.185011f, 0.169810f, 0.163886f, 0.163694f, 0.165778f, 0.167776f, 0.168909f, 0.169698f, 0.170965f, 0.173362f, 0.177738f, 0.185104f, 0.195926f, 0.210178f, 0.228154f, 0.250538f, 0.277725f, 0.309833f, 0.347232f, 0.390456f, 0.439791f, 0.495196f, 0.555920f, - 0.619949f, 0.684571f, 0.747409f, 0.805924f, 0.856574f, 0.896391f, 0.925191f, 0.944416f, 0.954283f, 0.954087f, 0.944612f, 0.927526f, 0.902506f, 0.867475f, 0.821809f, 0.767132f, 0.704886f, 0.635309f, 0.559349f, 0.479847f, 0.399919f, 0.321030f, 0.243461f, 0.168221f, 0.097457f, 0.032552f, -0.027272f, -0.083379f, -0.135625f, -0.183518f, -0.228709f, -0.273886f, -0.319427f, -0.363620f, -0.405822f, -0.446545f, -0.484543f, -0.516852f, -0.541980f, -0.560664f, -0.573598f, -0.580683f, -0.582341f, -0.579795f, -0.574373f, -0.567446f, -0.560136f, -0.552846f, -0.546452f, -0.543218f, -0.544596f, -0.549853f, -0.559220f, -0.575373f, -0.599427f, -0.630547f, -0.671011f, -0.720096f, -0.756779f, -0.745171f, -0.674094f, -0.580065f, -0.512363f, -0.485247f}, - {0.934518f, 0.857858f, 0.682018f, 0.418282f, 0.149886f, -0.022248f, -0.085705f, -0.132956f, -0.243348f, -0.384067f, -0.470420f, -0.490862f, -0.510507f, -0.564810f, -0.615008f, -0.613799f, -0.558408f, -0.464246f, -0.334644f, -0.179741f, -0.030327f, 0.091349f, 0.193272f, 0.290516f, 0.379280f, 0.447234f, 0.493298f, 0.523281f, 0.535766f, 0.522478f, 0.477212f, 0.399948f, 0.297897f, 0.184846f, 0.074020f, -0.029775f, -0.126981f, -0.213768f, -0.281234f, -0.323523f, -0.342095f, -0.342589f, -0.331435f, -0.314724f, -0.296652f, -0.278561f, -0.260507f, -0.242171f, -0.220746f, -0.189924f, -0.143224f, -0.078060f, 0.003244f, 0.094157f, 0.184987f, 0.265868f, 0.330948f, 0.379383f, 0.412093f, 0.428623f, 0.427005f, 0.404850f, 0.360089f, 0.292366f, 0.204920f, 0.104626f, -0.000261f, -0.102308f, -0.195788f, -0.277059f, -0.344399f, -0.396403f, -0.430000f, -0.440595f, -0.424427f, -0.380841f, -0.313172f, -0.228570f, -0.136582f, -0.046276f, 0.036288f, 0.108164f, 0.167991f, 0.215177f, 0.250068f, 0.273681f, 0.286922f, 0.290465f, 0.285187f, 0.272099f, 0.251841f, 0.224631f, 0.190554f, 0.149524f, 0.101233f, 0.045772f, - -0.015434f, -0.079411f, -0.142271f, -0.199904f, -0.248354f, -0.284186f, -0.304987f, -0.309598f, -0.297829f, -0.270211f, -0.228225f, -0.174500f, -0.112362f, -0.045271f, 0.023093f, 0.088668f, 0.147582f, 0.196800f, 0.233966f, 0.257190f, 0.265649f, 0.259970f, 0.241494f, 0.211697f, 0.172676f, 0.127321f, 0.078348f, 0.027873f, -0.021726f, -0.067568f, -0.107275f, -0.139243f, -0.161825f, -0.173602f, -0.174673f, -0.166498f, -0.150627f, -0.128782f, -0.103666f, -0.078044f, -0.053346f, -0.030259f, -0.009734f, 0.007887f, 0.023557f, 0.038115f, 0.051436f, 0.063720f, 0.075766f, 0.087264f, 0.096795f, 0.103721f, 0.107784f, 0.107330f, 0.100689f, 0.088113f, 0.069180f, 0.041288f, 0.006332f, -0.023956f, -0.037070f, -0.033441f, -0.024607f, -0.019448f} - }, - { - {0.934518f, 0.857858f, 0.682018f, 0.418282f, 0.149886f, -0.022248f, -0.085705f, -0.132956f, -0.243348f, -0.384067f, -0.470420f, -0.490862f, -0.510507f, -0.564810f, -0.615008f, -0.613799f, -0.558408f, -0.464246f, -0.334644f, -0.179741f, -0.030327f, 0.091349f, 0.193272f, 0.290516f, 0.379280f, 0.447234f, 0.493298f, 0.523281f, 0.535766f, 0.522478f, 0.477212f, 0.399948f, 0.297897f, 0.184846f, 0.074020f, -0.029775f, -0.126981f, -0.213768f, -0.281234f, -0.323523f, -0.342095f, -0.342589f, -0.331435f, -0.314724f, -0.296652f, -0.278561f, -0.260507f, -0.242171f, -0.220746f, -0.189924f, -0.143224f, -0.078060f, 0.003244f, 0.094157f, 0.184987f, 0.265868f, 0.330948f, 0.379383f, 0.412093f, 0.428623f, 0.427005f, 0.404850f, 0.360089f, 0.292366f, 0.204920f, 0.104626f, -0.000261f, -0.102308f, -0.195788f, -0.277059f, -0.344399f, -0.396403f, -0.430000f, -0.440595f, -0.424427f, -0.380841f, -0.313172f, -0.228570f, -0.136582f, -0.046276f, 0.036288f, 0.108164f, 0.167991f, 0.215177f, 0.250068f, 0.273681f, 0.286922f, 0.290465f, 0.285187f, 0.272099f, 0.251841f, 0.224631f, 0.190554f, 0.149524f, 0.101233f, 0.045772f, - -0.015434f, -0.079411f, -0.142271f, -0.199904f, -0.248354f, -0.284186f, -0.304987f, -0.309598f, -0.297829f, -0.270211f, -0.228225f, -0.174500f, -0.112362f, -0.045271f, 0.023093f, 0.088668f, 0.147582f, 0.196800f, 0.233966f, 0.257190f, 0.265649f, 0.259970f, 0.241494f, 0.211697f, 0.172676f, 0.127321f, 0.078348f, 0.027873f, -0.021726f, -0.067568f, -0.107275f, -0.139243f, -0.161825f, -0.173602f, -0.174673f, -0.166498f, -0.150627f, -0.128782f, -0.103666f, -0.078044f, -0.053346f, -0.030259f, -0.009734f, 0.007887f, 0.023557f, 0.038115f, 0.051436f, 0.063720f, 0.075766f, 0.087264f, 0.096795f, 0.103721f, 0.107784f, 0.107330f, 0.100689f, 0.088113f, 0.069180f, 0.041288f, 0.006332f, -0.023956f, -0.037070f, -0.033441f, -0.024607f, -0.019448f}, - {1.068324f, 1.062066f, 1.083672f, 1.156642f, 1.251383f, 1.301241f, 1.270195f, 1.189834f, 1.115171f, 1.063568f, 1.022919f, 1.001888f, 1.030552f, 1.110370f, 1.199864f, 1.259787f, 1.284625f, 1.280603f, 1.242659f, 1.171775f, 1.093479f, 1.036606f, 1.002891f, 0.972808f, 0.933548f, 0.887633f, 0.839967f, 0.790500f, 0.739167f, 0.688251f, 0.638192f, 0.586505f, 0.531813f, 0.475822f, 0.421676f, 0.373637f, 0.338297f, 0.322536f, 0.328305f, 0.350663f, 0.382129f, 0.417959f, 0.456126f, 0.493831f, 0.526907f, 0.552956f, 0.572952f, 0.589166f, 0.603191f, 0.616479f, 0.631032f, 0.648516f, 0.669363f, 0.692743f, 0.716446f, 0.737125f, 0.751798f, 0.758883f, 0.757319f, 0.746131f, 0.726128f, 0.700462f, 0.671814f, 0.640056f, 0.603849f, 0.562908f, 0.517307f, 0.466388f, 0.410454f, 0.352646f, 0.297752f, 0.249844f, 0.211692f, 0.185011f, 0.169810f, 0.163886f, 0.163694f, 0.165778f, 0.167776f, 0.168909f, 0.169698f, 0.170965f, 0.173362f, 0.177738f, 0.185104f, 0.195926f, 0.210178f, 0.228154f, 0.250538f, 0.277725f, 0.309833f, 0.347232f, 0.390456f, 0.439791f, 0.495196f, 0.555920f, - 0.619949f, 0.684571f, 0.747409f, 0.805924f, 0.856574f, 0.896391f, 0.925191f, 0.944416f, 0.954283f, 0.954087f, 0.944612f, 0.927526f, 0.902506f, 0.867475f, 0.821809f, 0.767132f, 0.704886f, 0.635309f, 0.559349f, 0.479847f, 0.399919f, 0.321030f, 0.243461f, 0.168221f, 0.097457f, 0.032552f, -0.027272f, -0.083379f, -0.135625f, -0.183518f, -0.228709f, -0.273886f, -0.319427f, -0.363620f, -0.405822f, -0.446545f, -0.484543f, -0.516852f, -0.541980f, -0.560664f, -0.573598f, -0.580683f, -0.582341f, -0.579795f, -0.574373f, -0.567446f, -0.560136f, -0.552846f, -0.546452f, -0.543218f, -0.544596f, -0.549853f, -0.559220f, -0.575373f, -0.599427f, -0.630547f, -0.671011f, -0.720096f, -0.756779f, -0.745171f, -0.674094f, -0.580065f, -0.512363f, -0.485247f} - } -}; -const float CRendBin_Combined_HRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][160]={ - { - {0.022597f, 0.065202f, 0.094800f, 0.087222f, 0.028863f, -0.033215f, -0.025115f, 0.029670f, 0.010871f, -0.094080f, -0.093395f, 0.164837f, 0.534054f, 0.723953f, 0.668586f, 0.562550f, 0.547018f, 0.547467f, 0.451265f, 0.273050f, 0.076100f, -0.133607f, -0.347652f, -0.484095f, -0.465506f, -0.320173f, -0.144456f, 0.002459f, 0.124086f, 0.236901f, 0.334318f, 0.388275f, 0.365496f, 0.251083f, 0.066984f, -0.139501f, -0.329262f, -0.490031f, -0.628003f, -0.750861f, -0.856460f, -0.932287f, -0.968749f, -0.973950f, -0.969671f, -0.973735f, -0.992918f, -1.028350f, -1.076088f, -1.123879f, -1.158091f, -1.174678f, -1.178288f, -1.174093f, -1.165759f, -1.157129f, -1.151037f, -1.149567f, -1.156736f, -1.175982f, -1.205151f, -1.239655f, -1.278806f, -1.322162f, -1.361620f, -1.384066f, -1.380279f, -1.346908f, -1.284430f, -1.199139f, -1.103249f, -1.007963f, -0.918939f, -0.839828f, -0.774659f, -0.724527f, -0.686467f, -0.656634f, -0.631187f, -0.605488f, -0.576739f, -0.545772f, -0.513340f, -0.478002f, -0.440201f, -0.403792f, -0.371197f, -0.342018f, -0.317969f, -0.303696f, -0.301471f, -0.309948f, -0.328028f, -0.355049f, -0.388060f, -0.423148f, - -0.457901f, -0.489672f, -0.514648f, -0.531085f, -0.539738f, -0.540079f, -0.530837f, -0.514091f, -0.493133f, -0.467135f, -0.433667f, -0.394405f, -0.352537f, -0.307676f, -0.258996f, -0.209516f, -0.162264f, -0.116664f, -0.072404f, -0.031550f, 0.005591f, 0.040704f, 0.072658f, 0.098740f, 0.119709f, 0.136856f, 0.146623f, 0.145056f, 0.133481f, 0.112977f, 0.078684f, 0.025978f, -0.044059f, -0.130730f, -0.238118f, -0.369115f, -0.521997f, -0.694951f, -0.886933f, -1.093940f, -1.310375f, -1.531202f, -1.748254f, -1.951169f, -2.135588f, -2.301024f, -2.440136f, -2.544008f, -2.616201f, -2.664228f, -2.682466f, -2.663745f, -2.617014f, -2.550432f, -2.454397f, -2.322601f, -2.151953f, -1.890105f, -1.449852f, -0.850895f, -0.291398f, 0.021597f, 0.081084f, 0.031473f}, - {-0.080276f, -0.311417f, -0.607640f, -0.791927f, -0.800857f, -0.760608f, -0.739148f, -0.646209f, -0.447092f, -0.280447f, -0.279295f, -0.423068f, -0.622336f, -0.804161f, -0.867594f, -0.710767f, -0.374205f, -0.036779f, 0.187292f, 0.339906f, 0.474434f, 0.550962f, 0.537943f, 0.503393f, 0.524522f, 0.587272f, 0.644960f, 0.705979f, 0.790728f, 0.855477f, 0.834725f, 0.730307f, 0.593843f, 0.437574f, 0.224869f, -0.047825f, -0.311841f, -0.490861f, -0.575373f, -0.611964f, -0.639917f, -0.664189f, -0.679158f, -0.686945f, -0.685661f, -0.661531f, -0.605064f, -0.523507f, -0.428999f, -0.324606f, -0.209719f, -0.090298f, 0.024311f, 0.128844f, 0.221046f, 0.298789f, 0.362618f, 0.416158f, 0.460462f, 0.491627f, 0.505331f, 0.499605f, 0.472944f, 0.425203f, 0.361839f, 0.292961f, 0.226591f, 0.165529f, 0.110752f, 0.064158f, 0.026873f, -0.002586f, -0.027283f, -0.050301f, -0.074568f, -0.102794f, -0.136426f, -0.174543f, -0.213824f, -0.249920f, -0.279603f, -0.302272f, -0.319692f, -0.334393f, -0.347809f, -0.358600f, -0.361817f, -0.350205f, -0.317616f, -0.261906f, -0.185247f, -0.092969f, 0.007045f, 0.104879f, 0.190432f, 0.255872f, - 0.297100f, 0.314390f, 0.312581f, 0.299610f, 0.283349f, 0.269653f, 0.262979f, 0.266740f, 0.281862f, 0.306365f, 0.337110f, 0.369991f, 0.397544f, 0.408784f, 0.393056f, 0.342920f, 0.253936f, 0.125604f, -0.035892f, -0.218368f, -0.407961f, -0.590892f, -0.752239f, -0.877499f, -0.956409f, -0.982915f, -0.952586f, -0.863813f, -0.720987f, -0.533454f, -0.312498f, -0.071910f, 0.171049f, 0.399293f, 0.599797f, 0.762809f, 0.880702f, 0.950183f, 0.972884f, 0.951927f, 0.890214f, 0.792224f, 0.663786f, 0.509824f, 0.335460f, 0.148522f, -0.042097f, -0.228597f, -0.401857f, -0.550339f, -0.664707f, -0.739759f, -0.770184f, -0.751394f, -0.686776f, -0.584706f, -0.445967f, -0.269185f, -0.078301f, 0.070423f, 0.128885f, 0.103757f, 0.049358f, 0.011607f} - }, - { - {-0.080276f, -0.311417f, -0.607640f, -0.791927f, -0.800857f, -0.760608f, -0.739148f, -0.646209f, -0.447092f, -0.280447f, -0.279295f, -0.423068f, -0.622336f, -0.804161f, -0.867594f, -0.710767f, -0.374205f, -0.036779f, 0.187292f, 0.339906f, 0.474434f, 0.550962f, 0.537943f, 0.503393f, 0.524522f, 0.587272f, 0.644960f, 0.705979f, 0.790728f, 0.855477f, 0.834725f, 0.730307f, 0.593843f, 0.437574f, 0.224869f, -0.047825f, -0.311841f, -0.490861f, -0.575373f, -0.611964f, -0.639917f, -0.664189f, -0.679158f, -0.686945f, -0.685661f, -0.661531f, -0.605064f, -0.523507f, -0.428999f, -0.324606f, -0.209719f, -0.090298f, 0.024311f, 0.128844f, 0.221046f, 0.298789f, 0.362618f, 0.416158f, 0.460462f, 0.491627f, 0.505331f, 0.499605f, 0.472944f, 0.425203f, 0.361839f, 0.292961f, 0.226591f, 0.165529f, 0.110752f, 0.064158f, 0.026873f, -0.002586f, -0.027283f, -0.050301f, -0.074568f, -0.102794f, -0.136426f, -0.174543f, -0.213824f, -0.249920f, -0.279603f, -0.302272f, -0.319692f, -0.334393f, -0.347809f, -0.358600f, -0.361817f, -0.350205f, -0.317616f, -0.261906f, -0.185247f, -0.092969f, 0.007045f, 0.104879f, 0.190432f, 0.255872f, - 0.297100f, 0.314390f, 0.312581f, 0.299610f, 0.283349f, 0.269653f, 0.262979f, 0.266740f, 0.281862f, 0.306365f, 0.337110f, 0.369991f, 0.397544f, 0.408784f, 0.393056f, 0.342920f, 0.253936f, 0.125604f, -0.035892f, -0.218368f, -0.407961f, -0.590892f, -0.752239f, -0.877499f, -0.956409f, -0.982915f, -0.952586f, -0.863813f, -0.720987f, -0.533454f, -0.312498f, -0.071910f, 0.171049f, 0.399293f, 0.599797f, 0.762809f, 0.880702f, 0.950183f, 0.972884f, 0.951927f, 0.890214f, 0.792224f, 0.663786f, 0.509824f, 0.335460f, 0.148522f, -0.042097f, -0.228597f, -0.401857f, -0.550339f, -0.664707f, -0.739759f, -0.770184f, -0.751394f, -0.686776f, -0.584706f, -0.445967f, -0.269185f, -0.078301f, 0.070423f, 0.128885f, 0.103757f, 0.049358f, 0.011607f}, - {0.022597f, 0.065202f, 0.094800f, 0.087222f, 0.028863f, -0.033215f, -0.025115f, 0.029670f, 0.010871f, -0.094080f, -0.093395f, 0.164837f, 0.534054f, 0.723953f, 0.668586f, 0.562550f, 0.547018f, 0.547467f, 0.451265f, 0.273050f, 0.076100f, -0.133607f, -0.347652f, -0.484095f, -0.465506f, -0.320173f, -0.144456f, 0.002459f, 0.124086f, 0.236901f, 0.334318f, 0.388275f, 0.365496f, 0.251083f, 0.066984f, -0.139501f, -0.329262f, -0.490031f, -0.628003f, -0.750861f, -0.856460f, -0.932287f, -0.968749f, -0.973950f, -0.969671f, -0.973735f, -0.992918f, -1.028350f, -1.076088f, -1.123879f, -1.158091f, -1.174678f, -1.178288f, -1.174093f, -1.165759f, -1.157129f, -1.151037f, -1.149567f, -1.156736f, -1.175982f, -1.205151f, -1.239655f, -1.278806f, -1.322162f, -1.361620f, -1.384066f, -1.380279f, -1.346908f, -1.284430f, -1.199139f, -1.103249f, -1.007963f, -0.918939f, -0.839828f, -0.774659f, -0.724527f, -0.686467f, -0.656634f, -0.631187f, -0.605488f, -0.576739f, -0.545772f, -0.513340f, -0.478002f, -0.440201f, -0.403792f, -0.371197f, -0.342018f, -0.317969f, -0.303696f, -0.301471f, -0.309948f, -0.328028f, -0.355049f, -0.388060f, -0.423148f, - -0.457901f, -0.489672f, -0.514648f, -0.531085f, -0.539738f, -0.540079f, -0.530837f, -0.514091f, -0.493133f, -0.467135f, -0.433667f, -0.394405f, -0.352537f, -0.307676f, -0.258996f, -0.209516f, -0.162264f, -0.116664f, -0.072404f, -0.031550f, 0.005591f, 0.040704f, 0.072658f, 0.098740f, 0.119709f, 0.136856f, 0.146623f, 0.145056f, 0.133481f, 0.112977f, 0.078684f, 0.025978f, -0.044059f, -0.130730f, -0.238118f, -0.369115f, -0.521997f, -0.694951f, -0.886933f, -1.093940f, -1.310375f, -1.531202f, -1.748254f, -1.951169f, -2.135588f, -2.301024f, -2.440136f, -2.544008f, -2.616201f, -2.664228f, -2.682466f, -2.663745f, -2.617014f, -2.550432f, -2.454397f, -2.322601f, -2.151953f, -1.890105f, -1.449852f, -0.850895f, -0.291398f, 0.021597f, 0.081084f, 0.031473f} - }, - { - {0.021336f, 0.022839f, -0.073302f, -0.217195f, -0.247984f, -0.104075f, 0.014239f, -0.112545f, -0.344615f, -0.293672f, 0.139315f, 0.578646f, 0.643404f, 0.405511f, 0.222872f, 0.260763f, 0.361987f, 0.319901f, 0.107580f, -0.158487f, -0.355870f, -0.427989f, -0.389853f, -0.297927f, -0.198578f, -0.103336f, -0.016535f, 0.036571f, 0.024244f, -0.066294f, -0.225146f, -0.422394f, -0.612111f, -0.757578f, -0.858245f, -0.933908f, -0.983839f, -0.983826f, -0.924185f, -0.829851f, -0.740362f, -0.685366f, -0.677873f, -0.713138f, -0.770012f, -0.824820f, -0.868218f, -0.904879f, -0.939349f, -0.967949f, -0.983081f, -0.981192f, -0.966416f, -0.947112f, -0.928422f, -0.909876f, -0.890814f, -0.873490f, -0.857977f, -0.838957f, -0.811865f, -0.778815f, -0.745042f, -0.712396f, -0.678987f, -0.642950f, -0.604773f, -0.567091f, -0.532266f, -0.499479f, -0.465735f, -0.430492f, -0.396831f, -0.367428f, -0.342441f, -0.321661f, -0.305164f, -0.291646f, -0.279605f, -0.269981f, -0.264614f, -0.263048f, -0.263497f, -0.265405f, -0.268988f, -0.274537f, -0.283634f, -0.298307f, -0.318291f, -0.342181f, -0.370706f, -0.404808f, -0.441384f, -0.474914f, -0.501713f, -0.518854f, - -0.521982f, -0.508767f, -0.481950f, -0.445493f, -0.400843f, -0.349459f, -0.294957f, -0.240473f, -0.187566f, -0.138571f, -0.096275f, -0.061952f, -0.037779f, -0.029269f, -0.041199f, -0.074110f, -0.128361f, -0.206759f, -0.309186f, -0.430094f, -0.565083f, -0.714033f, -0.874899f, -1.041263f, -1.208909f, -1.378424f, -1.549363f, -1.717858f, -1.880821f, -2.037000f, -2.183716f, -2.316614f, -2.431612f, -2.525085f, -2.595175f, -2.643617f, -2.672077f, -2.678363f, -2.662123f, -2.630131f, -2.587965f, -2.532325f, -2.460515f, -2.378974f, -2.291916f, -2.192016f, -2.073566f, -1.942343f, -1.801293f, -1.641629f, -1.459200f, -1.262257f, -1.053445f, -0.825148f, -0.579571f, -0.325028f, -0.046466f, 0.276154f, 0.595944f, 0.788105f, 0.756992f, 0.541774f, 0.282133f, 0.080550f}, - {0.021336f, 0.022839f, -0.073302f, -0.217195f, -0.247984f, -0.104075f, 0.014239f, -0.112545f, -0.344615f, -0.293672f, 0.139315f, 0.578646f, 0.643404f, 0.405511f, 0.222872f, 0.260763f, 0.361987f, 0.319901f, 0.107580f, -0.158487f, -0.355870f, -0.427989f, -0.389853f, -0.297927f, -0.198578f, -0.103336f, -0.016535f, 0.036571f, 0.024244f, -0.066294f, -0.225146f, -0.422394f, -0.612111f, -0.757578f, -0.858245f, -0.933908f, -0.983839f, -0.983826f, -0.924185f, -0.829851f, -0.740362f, -0.685366f, -0.677873f, -0.713138f, -0.770012f, -0.824820f, -0.868218f, -0.904879f, -0.939349f, -0.967949f, -0.983081f, -0.981192f, -0.966416f, -0.947112f, -0.928422f, -0.909876f, -0.890814f, -0.873490f, -0.857977f, -0.838957f, -0.811865f, -0.778815f, -0.745042f, -0.712396f, -0.678987f, -0.642950f, -0.604773f, -0.567091f, -0.532266f, -0.499479f, -0.465735f, -0.430492f, -0.396831f, -0.367428f, -0.342441f, -0.321661f, -0.305164f, -0.291646f, -0.279605f, -0.269981f, -0.264614f, -0.263048f, -0.263497f, -0.265405f, -0.268988f, -0.274537f, -0.283634f, -0.298307f, -0.318291f, -0.342181f, -0.370706f, -0.404808f, -0.441384f, -0.474914f, -0.501713f, -0.518854f, - -0.521982f, -0.508767f, -0.481950f, -0.445493f, -0.400843f, -0.349459f, -0.294957f, -0.240473f, -0.187566f, -0.138571f, -0.096275f, -0.061952f, -0.037779f, -0.029269f, -0.041199f, -0.074110f, -0.128361f, -0.206759f, -0.309186f, -0.430094f, -0.565083f, -0.714033f, -0.874899f, -1.041263f, -1.208909f, -1.378424f, -1.549363f, -1.717858f, -1.880821f, -2.037000f, -2.183716f, -2.316614f, -2.431612f, -2.525085f, -2.595175f, -2.643617f, -2.672077f, -2.678363f, -2.662123f, -2.630131f, -2.587965f, -2.532325f, -2.460515f, -2.378974f, -2.291916f, -2.192016f, -2.073566f, -1.942343f, -1.801293f, -1.641629f, -1.459200f, -1.262257f, -1.053445f, -0.825148f, -0.579571f, -0.325028f, -0.046466f, 0.276154f, 0.595944f, 0.788105f, 0.756992f, 0.541774f, 0.282133f, 0.080550f} - }, - { - {0.012018f, 0.066586f, 0.152639f, 0.207071f, 0.209717f, 0.178456f, 0.085121f, -0.092155f, -0.264863f, -0.327430f, -0.327666f, -0.395977f, -0.530744f, -0.609862f, -0.598708f, -0.587572f, -0.623204f, -0.652992f, -0.647573f, -0.644111f, -0.649663f, -0.617816f, -0.540898f, -0.469537f, -0.429175f, -0.400620f, -0.385308f, -0.408445f, -0.453223f, -0.464516f, -0.424417f, -0.365930f, -0.311545f, -0.251073f, -0.180010f, -0.112919f, -0.056366f, -0.004630f, 0.037141f, 0.053534f, 0.041699f, 0.013687f, -0.019541f, -0.051027f, -0.071574f, -0.074580f, -0.063254f, -0.045955f, -0.030239f, -0.025174f, -0.041237f, -0.083221f, -0.147899f, -0.228711f, -0.317157f, -0.401610f, -0.472141f, -0.526510f, -0.567243f, -0.595153f, -0.609617f, -0.611851f, -0.603354f, -0.583289f, -0.550511f, -0.506187f, -0.452584f, -0.391616f, -0.325856f, -0.258757f, -0.192849f, -0.129124f, -0.068038f, -0.009425f, 0.048121f, 0.106115f, 0.164670f, 0.223043f, 0.280807f, 0.337215f, 0.389845f, 0.434804f, 0.468298f, 0.487689f, 0.490882f, 0.474753f, 0.434821f, 0.367002f, 0.268928f, 0.138992f, -0.023741f, -0.216176f, -0.429032f, -0.650898f, -0.873502f, -1.090516f, - -1.293455f, -1.473572f, -1.627329f, -1.755674f, -1.858280f, -1.933078f, -1.981344f, -2.007913f, -2.014974f, -1.999942f, -1.960994f, -1.900865f, -1.823692f, -1.732040f, -1.629346f, -1.522206f, -1.417380f, -1.317914f, -1.223887f, -1.135589f, -1.054380f, -0.981265f, -0.916122f, -0.858499f, -0.808619f, -0.767042f, -0.733071f, -0.704146f, -0.677737f, -0.653344f, -0.631604f, -0.612382f, -0.595471f, -0.582461f, -0.575952f, -0.577320f, -0.586697f, -0.604312f, -0.630361f, -0.664275f, -0.705000f, -0.751057f, -0.800298f, -0.851098f, -0.903010f, -0.954211f, -0.999996f, -1.036419f, -1.062657f, -1.076833f, -1.073963f, -1.051969f, -1.014117f, -0.961872f, -0.892965f, -0.807931f, -0.703595f, -0.557881f, -0.349467f, -0.110075f, 0.071803f, 0.131434f, 0.094014f, 0.030195f}, - {-0.169676f, -0.479045f, -0.687725f, -0.745490f, -0.686566f, -0.594240f, -0.494282f, -0.350297f, -0.167225f, -0.017915f, 0.055446f, 0.093690f, 0.144892f, 0.201511f, 0.248867f, 0.316763f, 0.432409f, 0.556198f, 0.607835f, 0.540635f, 0.367708f, 0.137640f, -0.092179f, -0.276530f, -0.400339f, -0.471378f, -0.492192f, -0.455690f, -0.371267f, -0.272288f, -0.186910f, -0.117137f, -0.053329f, 0.007761f, 0.067846f, 0.134100f, 0.208892f, 0.279839f, 0.327334f, 0.337226f, 0.304345f, 0.232251f, 0.134706f, 0.032552f, -0.055175f, -0.116728f, -0.147122f, -0.148098f, -0.129145f, -0.103722f, -0.081991f, -0.067689f, -0.060332f, -0.057605f, -0.056281f, -0.053648f, -0.048905f, -0.042789f, -0.036484f, -0.031173f, -0.027357f, -0.023751f, -0.017402f, -0.004993f, 0.016436f, 0.049010f, 0.092097f, 0.140251f, 0.183980f, 0.213061f, 0.219488f, 0.199132f, 0.152883f, 0.086666f, 0.009291f, -0.070535f, -0.145803f, -0.211193f, -0.262456f, -0.295515f, -0.305654f, -0.287987f, -0.239522f, -0.161484f, -0.060555f, 0.051276f, 0.158521f, 0.245765f, 0.301610f, 0.320874f, 0.304470f, 0.258046f, 0.190303f, 0.111202f, 0.030420f, -0.043586f, - -0.104149f, -0.146895f, -0.170006f, -0.174138f, -0.162254f, -0.139224f, -0.110752f, -0.081894f, -0.056123f, -0.035216f, -0.019427f, -0.007720f, 0.001684f, 0.010659f, 0.020891f, 0.033788f, 0.050134f, 0.069595f, 0.090510f, 0.110004f, 0.124360f, 0.129820f, 0.123661f, 0.104987f, 0.074856f, 0.035992f, -0.007782f, -0.052315f, -0.093778f, -0.128870f, -0.154804f, -0.169387f, -0.171057f, -0.158834f, -0.132551f, -0.093363f, -0.044033f, 0.011189f, 0.066780f, 0.116375f, 0.153882f, 0.174846f, 0.177241f, 0.161682f, 0.131436f, 0.091780f, 0.048485f, 0.006475f, -0.030495f, -0.059949f, -0.081115f, -0.094605f, -0.101136f, -0.101084f, -0.095319f, -0.084867f, -0.069049f, -0.046151f, -0.018205f, 0.006293f, 0.017960f, 0.015621f, 0.007434f, 0.001653f} - }, - { - {-0.169676f, -0.479045f, -0.687725f, -0.745490f, -0.686566f, -0.594240f, -0.494282f, -0.350297f, -0.167225f, -0.017915f, 0.055446f, 0.093690f, 0.144892f, 0.201511f, 0.248867f, 0.316763f, 0.432409f, 0.556198f, 0.607835f, 0.540635f, 0.367708f, 0.137640f, -0.092179f, -0.276530f, -0.400339f, -0.471378f, -0.492192f, -0.455690f, -0.371267f, -0.272288f, -0.186910f, -0.117137f, -0.053329f, 0.007761f, 0.067846f, 0.134100f, 0.208892f, 0.279839f, 0.327334f, 0.337226f, 0.304345f, 0.232251f, 0.134706f, 0.032552f, -0.055175f, -0.116728f, -0.147122f, -0.148098f, -0.129145f, -0.103722f, -0.081991f, -0.067689f, -0.060332f, -0.057605f, -0.056281f, -0.053648f, -0.048905f, -0.042789f, -0.036484f, -0.031173f, -0.027357f, -0.023751f, -0.017402f, -0.004993f, 0.016436f, 0.049010f, 0.092097f, 0.140251f, 0.183980f, 0.213061f, 0.219488f, 0.199132f, 0.152883f, 0.086666f, 0.009291f, -0.070535f, -0.145803f, -0.211193f, -0.262456f, -0.295515f, -0.305654f, -0.287987f, -0.239522f, -0.161484f, -0.060555f, 0.051276f, 0.158521f, 0.245765f, 0.301610f, 0.320874f, 0.304470f, 0.258046f, 0.190303f, 0.111202f, 0.030420f, -0.043586f, - -0.104149f, -0.146895f, -0.170006f, -0.174138f, -0.162254f, -0.139224f, -0.110752f, -0.081894f, -0.056123f, -0.035216f, -0.019427f, -0.007720f, 0.001684f, 0.010659f, 0.020891f, 0.033788f, 0.050134f, 0.069595f, 0.090510f, 0.110004f, 0.124360f, 0.129820f, 0.123661f, 0.104987f, 0.074856f, 0.035992f, -0.007782f, -0.052315f, -0.093778f, -0.128870f, -0.154804f, -0.169387f, -0.171057f, -0.158834f, -0.132551f, -0.093363f, -0.044033f, 0.011189f, 0.066780f, 0.116375f, 0.153882f, 0.174846f, 0.177241f, 0.161682f, 0.131436f, 0.091780f, 0.048485f, 0.006475f, -0.030495f, -0.059949f, -0.081115f, -0.094605f, -0.101136f, -0.101084f, -0.095319f, -0.084867f, -0.069049f, -0.046151f, -0.018205f, 0.006293f, 0.017960f, 0.015621f, 0.007434f, 0.001653f}, - {0.012018f, 0.066586f, 0.152639f, 0.207071f, 0.209717f, 0.178456f, 0.085121f, -0.092155f, -0.264863f, -0.327430f, -0.327666f, -0.395977f, -0.530744f, -0.609862f, -0.598708f, -0.587572f, -0.623204f, -0.652992f, -0.647573f, -0.644111f, -0.649663f, -0.617816f, -0.540898f, -0.469537f, -0.429175f, -0.400620f, -0.385308f, -0.408445f, -0.453223f, -0.464516f, -0.424417f, -0.365930f, -0.311545f, -0.251073f, -0.180010f, -0.112919f, -0.056366f, -0.004630f, 0.037141f, 0.053534f, 0.041699f, 0.013687f, -0.019541f, -0.051027f, -0.071574f, -0.074580f, -0.063254f, -0.045955f, -0.030239f, -0.025174f, -0.041237f, -0.083221f, -0.147899f, -0.228711f, -0.317157f, -0.401610f, -0.472141f, -0.526510f, -0.567243f, -0.595153f, -0.609617f, -0.611851f, -0.603354f, -0.583289f, -0.550511f, -0.506187f, -0.452584f, -0.391616f, -0.325856f, -0.258757f, -0.192849f, -0.129124f, -0.068038f, -0.009425f, 0.048121f, 0.106115f, 0.164670f, 0.223043f, 0.280807f, 0.337215f, 0.389845f, 0.434804f, 0.468298f, 0.487689f, 0.490882f, 0.474753f, 0.434821f, 0.367002f, 0.268928f, 0.138992f, -0.023741f, -0.216176f, -0.429032f, -0.650898f, -0.873502f, -1.090516f, - -1.293455f, -1.473572f, -1.627329f, -1.755674f, -1.858280f, -1.933078f, -1.981344f, -2.007913f, -2.014974f, -1.999942f, -1.960994f, -1.900865f, -1.823692f, -1.732040f, -1.629346f, -1.522206f, -1.417380f, -1.317914f, -1.223887f, -1.135589f, -1.054380f, -0.981265f, -0.916122f, -0.858499f, -0.808619f, -0.767042f, -0.733071f, -0.704146f, -0.677737f, -0.653344f, -0.631604f, -0.612382f, -0.595471f, -0.582461f, -0.575952f, -0.577320f, -0.586697f, -0.604312f, -0.630361f, -0.664275f, -0.705000f, -0.751057f, -0.800298f, -0.851098f, -0.903010f, -0.954211f, -0.999996f, -1.036419f, -1.062657f, -1.076833f, -1.073963f, -1.051969f, -1.014117f, -0.961872f, -0.892965f, -0.807931f, -0.703595f, -0.557881f, -0.349467f, -0.110075f, 0.071803f, 0.131434f, 0.094014f, 0.030195f} - }, - { - {0.014752f, 0.080926f, 0.195425f, 0.277300f, 0.257363f, 0.156308f, 0.028839f, -0.113396f, -0.267755f, -0.377434f, -0.386960f, -0.342896f, -0.348502f, -0.414148f, -0.444149f, -0.392144f, -0.334551f, -0.346055f, -0.388264f, -0.385314f, -0.342243f, -0.315364f, -0.312098f, -0.294136f, -0.253677f, -0.220820f, -0.205998f, -0.186961f, -0.150236f, -0.108165f, -0.075965f, -0.057714f, -0.051787f, -0.050962f, -0.041140f, -0.013561f, 0.025666f, 0.064669f, 0.096591f, 0.117146f, 0.121878f, 0.111088f, 0.089713f, 0.059784f, 0.020022f, -0.026868f, -0.073943f, -0.117183f, -0.157438f, -0.196739f, -0.237459f, -0.283107f, -0.335948f, -0.395266f, -0.459191f, -0.525388f, -0.589979f, -0.649670f, -0.704454f, -0.754602f, -0.796966f, -0.828420f, -0.850237f, -0.864670f, -0.870324f, -0.865150f, -0.850447f, -0.827593f, -0.794208f, -0.747439f, -0.688089f, -0.618815f, -0.541545f, -0.458906f, -0.375037f, -0.293293f, -0.215404f, -0.143040f, -0.077588f, -0.019000f, 0.032484f, 0.074585f, 0.105344f, 0.125342f, 0.134906f, 0.131058f, 0.109800f, 0.069531f, 0.009669f, -0.072345f, -0.179941f, -0.313863f, -0.471475f, -0.649282f, -0.844479f, -1.053119f, - -1.267745f, -1.479091f, -1.680773f, -1.869994f, -2.042752f, -2.192065f, -2.313426f, -2.408035f, -2.477146f, -2.517248f, -2.525139f, -2.503743f, -2.457948f, -2.388501f, -2.295477f, -2.184628f, -2.064830f, -1.941431f, -1.816649f, -1.694232f, -1.579181f, -1.473891f, -1.377781f, -1.290140f, -1.211493f, -1.142683f, -1.083511f, -1.032207f, -0.986607f, -0.945898f, -0.909860f, -0.876620f, -0.843723f, -0.811646f, -0.783525f, -0.761406f, -0.745602f, -0.737373f, -0.739078f, -0.751862f, -0.775439f, -0.809243f, -0.852230f, -0.903080f, -0.961061f, -1.024309f, -1.088143f, -1.148390f, -1.204010f, -1.252283f, -1.285794f, -1.299183f, -1.292421f, -1.262728f, -1.203108f, -1.111036f, -0.979245f, -0.776277f, -0.476453f, -0.132899f, 0.122319f, 0.197804f, 0.136024f, 0.042576f}, - {-0.227014f, -0.610850f, -0.818539f, -0.827111f, -0.686892f, -0.457083f, -0.160737f, 0.181068f, 0.492015f, 0.663276f, 0.645507f, 0.491632f, 0.296608f, 0.115861f, -0.045963f, -0.190352f, -0.298137f, -0.347915f, -0.342680f, -0.305031f, -0.248092f, -0.163336f, -0.044330f, 0.087170f, 0.193410f, 0.255410f, 0.280175f, 0.274955f, 0.233799f, 0.155072f, 0.055541f, -0.042288f, -0.126009f, -0.190037f, -0.227316f, -0.232179f, -0.205012f, -0.149836f, -0.073712f, 0.009179f, 0.080908f, 0.131368f, 0.161850f, 0.176172f, 0.173910f, 0.153080f, 0.113644f, 0.057229f, -0.011649f, -0.082819f, -0.142538f, -0.179500f, -0.187713f, -0.166032f, -0.118858f, -0.056688f, 0.007437f, 0.063054f, 0.104150f, 0.128571f, 0.137667f, 0.134993f, 0.123166f, 0.101911f, 0.069333f, 0.024214f, -0.032551f, -0.096504f, -0.158282f, -0.204364f, -0.220307f, -0.195023f, -0.125423f, -0.020573f, 0.097777f, 0.200718f, 0.261787f, 0.265935f, 0.214220f, 0.122551f, 0.014966f, -0.085028f, -0.160356f, -0.201834f, -0.207055f, -0.178791f, -0.123669f, -0.051497f, 0.025035f, 0.091764f, 0.136407f, 0.152155f, 0.139214f, 0.103923f, 0.056479f, 0.007941f, - -0.032731f, -0.060404f, -0.073774f, -0.074412f, -0.065640f, -0.051337f, -0.034892f, -0.018694f, -0.004139f, 0.008287f, 0.018799f, 0.027833f, 0.035535f, 0.041544f, 0.044915f, 0.044175f, 0.037797f, 0.025105f, 0.006966f, -0.014167f, -0.034676f, -0.050526f, -0.058290f, -0.056172f, -0.044497f, -0.025572f, -0.003149f, 0.018446f, 0.035422f, 0.045432f, 0.047837f, 0.043411f, 0.033825f, 0.021117f, 0.007200f, -0.006372f, -0.018366f, -0.027745f, -0.033669f, -0.035551f, -0.033093f, -0.026384f, -0.016086f, -0.003488f, 0.009653f, 0.021402f, 0.029923f, 0.033831f, 0.032600f, 0.026745f, 0.017574f, 0.006768f, -0.003896f, -0.012818f, -0.019007f, -0.022208f, -0.022305f, -0.018895f, -0.012232f, -0.004535f, 0.000825f, 0.002230f, 0.001220f, 0.000243f} - }, - { - {-0.227014f, -0.610850f, -0.818539f, -0.827111f, -0.686892f, -0.457083f, -0.160737f, 0.181068f, 0.492015f, 0.663276f, 0.645507f, 0.491632f, 0.296608f, 0.115861f, -0.045963f, -0.190352f, -0.298137f, -0.347915f, -0.342680f, -0.305031f, -0.248092f, -0.163336f, -0.044330f, 0.087170f, 0.193410f, 0.255410f, 0.280175f, 0.274955f, 0.233799f, 0.155072f, 0.055541f, -0.042288f, -0.126009f, -0.190037f, -0.227316f, -0.232179f, -0.205012f, -0.149836f, -0.073712f, 0.009179f, 0.080908f, 0.131368f, 0.161850f, 0.176172f, 0.173910f, 0.153080f, 0.113644f, 0.057229f, -0.011649f, -0.082819f, -0.142538f, -0.179500f, -0.187713f, -0.166032f, -0.118858f, -0.056688f, 0.007437f, 0.063054f, 0.104150f, 0.128571f, 0.137667f, 0.134993f, 0.123166f, 0.101911f, 0.069333f, 0.024214f, -0.032551f, -0.096504f, -0.158282f, -0.204364f, -0.220307f, -0.195023f, -0.125423f, -0.020573f, 0.097777f, 0.200718f, 0.261787f, 0.265935f, 0.214220f, 0.122551f, 0.014966f, -0.085028f, -0.160356f, -0.201834f, -0.207055f, -0.178791f, -0.123669f, -0.051497f, 0.025035f, 0.091764f, 0.136407f, 0.152155f, 0.139214f, 0.103923f, 0.056479f, 0.007941f, - -0.032731f, -0.060404f, -0.073774f, -0.074412f, -0.065640f, -0.051337f, -0.034892f, -0.018694f, -0.004139f, 0.008287f, 0.018799f, 0.027833f, 0.035535f, 0.041544f, 0.044915f, 0.044175f, 0.037797f, 0.025105f, 0.006966f, -0.014167f, -0.034676f, -0.050526f, -0.058290f, -0.056172f, -0.044497f, -0.025572f, -0.003149f, 0.018446f, 0.035422f, 0.045432f, 0.047837f, 0.043411f, 0.033825f, 0.021117f, 0.007200f, -0.006372f, -0.018366f, -0.027745f, -0.033669f, -0.035551f, -0.033093f, -0.026384f, -0.016086f, -0.003488f, 0.009653f, 0.021402f, 0.029923f, 0.033831f, 0.032600f, 0.026745f, 0.017574f, 0.006768f, -0.003896f, -0.012818f, -0.019007f, -0.022208f, -0.022305f, -0.018895f, -0.012232f, -0.004535f, 0.000825f, 0.002230f, 0.001220f, 0.000243f}, - {0.014752f, 0.080926f, 0.195425f, 0.277300f, 0.257363f, 0.156308f, 0.028839f, -0.113396f, -0.267755f, -0.377434f, -0.386960f, -0.342896f, -0.348502f, -0.414148f, -0.444149f, -0.392144f, -0.334551f, -0.346055f, -0.388264f, -0.385314f, -0.342243f, -0.315364f, -0.312098f, -0.294136f, -0.253677f, -0.220820f, -0.205998f, -0.186961f, -0.150236f, -0.108165f, -0.075965f, -0.057714f, -0.051787f, -0.050962f, -0.041140f, -0.013561f, 0.025666f, 0.064669f, 0.096591f, 0.117146f, 0.121878f, 0.111088f, 0.089713f, 0.059784f, 0.020022f, -0.026868f, -0.073943f, -0.117183f, -0.157438f, -0.196739f, -0.237459f, -0.283107f, -0.335948f, -0.395266f, -0.459191f, -0.525388f, -0.589979f, -0.649670f, -0.704454f, -0.754602f, -0.796966f, -0.828420f, -0.850237f, -0.864670f, -0.870324f, -0.865150f, -0.850447f, -0.827593f, -0.794208f, -0.747439f, -0.688089f, -0.618815f, -0.541545f, -0.458906f, -0.375037f, -0.293293f, -0.215404f, -0.143040f, -0.077588f, -0.019000f, 0.032484f, 0.074585f, 0.105344f, 0.125342f, 0.134906f, 0.131058f, 0.109800f, 0.069531f, 0.009669f, -0.072345f, -0.179941f, -0.313863f, -0.471475f, -0.649282f, -0.844479f, -1.053119f, - -1.267745f, -1.479091f, -1.680773f, -1.869994f, -2.042752f, -2.192065f, -2.313426f, -2.408035f, -2.477146f, -2.517248f, -2.525139f, -2.503743f, -2.457948f, -2.388501f, -2.295477f, -2.184628f, -2.064830f, -1.941431f, -1.816649f, -1.694232f, -1.579181f, -1.473891f, -1.377781f, -1.290140f, -1.211493f, -1.142683f, -1.083511f, -1.032207f, -0.986607f, -0.945898f, -0.909860f, -0.876620f, -0.843723f, -0.811646f, -0.783525f, -0.761406f, -0.745602f, -0.737373f, -0.739078f, -0.751862f, -0.775439f, -0.809243f, -0.852230f, -0.903080f, -0.961061f, -1.024309f, -1.088143f, -1.148390f, -1.204010f, -1.252283f, -1.285794f, -1.299183f, -1.292421f, -1.262728f, -1.203108f, -1.111036f, -0.979245f, -0.776277f, -0.476453f, -0.132899f, 0.122319f, 0.197804f, 0.136024f, 0.042576f} - }, - { - {0.043211f, 0.114663f, 0.178350f, 0.255737f, 0.285888f, 0.179104f, -0.023247f, -0.173997f, -0.226462f, -0.279044f, -0.376950f, -0.415326f, -0.314791f, -0.166534f, -0.101737f, -0.111875f, -0.106297f, -0.075928f, -0.083496f, -0.132151f, -0.157295f, -0.141147f, -0.141935f, -0.197377f, -0.268166f, -0.295822f, -0.268965f, -0.216058f, -0.166730f, -0.133269f, -0.106523f, -0.062428f, 0.009773f, 0.084069f, 0.118826f, 0.100756f, 0.052619f, 0.000385f, -0.049019f, -0.097030f, -0.139136f, -0.169026f, -0.187831f, -0.203308f, -0.223852f, -0.255186f, -0.299437f, -0.356144f, -0.425306f, -0.507990f, -0.602347f, -0.701452f, -0.797320f, -0.885133f, -0.962214f, -1.026134f, -1.076805f, -1.118706f, -1.158479f, -1.200974f, -1.248680f, -1.303141f, -1.364299f, -1.428256f, -1.487099f, -1.531700f, -1.554756f, -1.551648f, -1.520065f, -1.460625f, -1.377882f, -1.278869f, -1.169561f, -1.053641f, -0.934981f, -0.819203f, -0.711302f, -0.613088f, -0.524413f, -0.445870f, -0.379143f, -0.325887f, -0.287530f, -0.265472f, -0.260511f, -0.272174f, -0.298377f, -0.335361f, -0.379247f, -0.429275f, -0.488690f, -0.561273f, -0.648741f, -0.753109f, -0.878725f, -1.028425f, - -1.199267f, -1.385196f, -1.581978f, -1.785517f, -1.986815f, -2.173455f, -2.336281f, -2.471087f, -2.574200f, -2.641158f, -2.671370f, -2.670549f, -2.646120f, -2.602190f, -2.540998f, -2.466998f, -2.385837f, -2.299472f, -2.205584f, -2.102795f, -1.993617f, -1.880860f, -1.764387f, -1.644251f, -1.524566f, -1.410674f, -1.304067f, -1.203483f, -1.109515f, -1.024333f, -0.947806f, -0.877724f, -0.813643f, -0.757572f, -0.711183f, -0.674763f, -0.648343f, -0.631942f, -0.625338f, -0.628602f, -0.641609f, -0.662782f, -0.690486f, -0.725337f, -0.767997f, -0.815397f, -0.862958f, -0.909125f, -0.952637f, -0.987183f, -1.004998f, -1.003395f, -0.980880f, -0.931098f, -0.849216f, -0.736166f, -0.582560f, -0.362530f, -0.077132f, 0.196027f, 0.339834f, 0.309726f, 0.180471f, 0.053468f}, - {-0.250917f, -0.661339f, -0.861207f, -0.846902f, -0.664218f, -0.342690f, 0.076900f, 0.488755f, 0.753334f, 0.794704f, 0.644706f, 0.387716f, 0.087130f, -0.222361f, -0.495635f, -0.664747f, -0.675285f, -0.525652f, -0.265718f, 0.036337f, 0.319974f, 0.533170f, 0.627765f, 0.573427f, 0.381921f, 0.110243f, -0.167021f, -0.388733f, -0.515836f, -0.526623f, -0.420050f, -0.223739f, 0.011644f, 0.230655f, 0.386504f, 0.446212f, 0.398682f, 0.263741f, 0.086103f, -0.086723f, -0.222001f, -0.302073f, -0.318070f, -0.270296f, -0.171952f, -0.046899f, 0.077676f, 0.177097f, 0.232660f, 0.235704f, 0.190877f, 0.114233f, 0.026162f, -0.055573f, -0.118508f, -0.154916f, -0.161542f, -0.140412f, -0.098426f, -0.044790f, 0.011487f, 0.062292f, 0.100710f, 0.122257f, 0.125625f, 0.111599f, 0.081676f, 0.038064f, -0.015568f, -0.073246f, -0.125374f, -0.158379f, -0.158510f, -0.119317f, -0.047174f, 0.039659f, 0.117388f, 0.164783f, 0.170354f, 0.136110f, 0.075525f, 0.006572f, -0.055527f, -0.101705f, -0.128258f, -0.134141f, -0.118811f, -0.082220f, -0.026999f, 0.038902f, 0.101566f, 0.144045f, 0.152550f, 0.123025f, 0.063907f, -0.007177f, - -0.070685f, -0.111988f, -0.124827f, -0.111060f, -0.077909f, -0.034563f, 0.010220f, 0.049241f, 0.077443f, 0.092064f, 0.092106f, 0.077698f, 0.050246f, 0.012985f, -0.028844f, -0.068172f, -0.096572f, -0.105925f, -0.091461f, -0.054444f, -0.002780f, 0.050639f, 0.091484f, 0.108787f, 0.098953f, 0.066563f, 0.021850f, -0.023112f, -0.057935f, -0.076466f, -0.077535f, -0.063771f, -0.039868f, -0.011391f, 0.016269f, 0.038948f, 0.053942f, 0.059572f, 0.055230f, 0.041838f, 0.021689f, -0.002057f, -0.025436f, -0.043993f, -0.054036f, -0.053641f, -0.042616f, -0.022580f, 0.002601f, 0.027618f, 0.047483f, 0.058276f, 0.057322f, 0.044558f, 0.023331f, -0.001451f, -0.024710f, -0.039879f, -0.040348f, -0.026668f, -0.009522f, -0.000100f, 0.000909f, 0.000035f} - }, - { - {-0.250917f, -0.661339f, -0.861207f, -0.846902f, -0.664218f, -0.342690f, 0.076900f, 0.488755f, 0.753334f, 0.794704f, 0.644706f, 0.387716f, 0.087130f, -0.222361f, -0.495635f, -0.664747f, -0.675285f, -0.525652f, -0.265718f, 0.036337f, 0.319974f, 0.533170f, 0.627765f, 0.573427f, 0.381921f, 0.110243f, -0.167021f, -0.388733f, -0.515836f, -0.526623f, -0.420050f, -0.223739f, 0.011644f, 0.230655f, 0.386504f, 0.446212f, 0.398682f, 0.263741f, 0.086103f, -0.086723f, -0.222001f, -0.302073f, -0.318070f, -0.270296f, -0.171952f, -0.046899f, 0.077676f, 0.177097f, 0.232660f, 0.235704f, 0.190877f, 0.114233f, 0.026162f, -0.055573f, -0.118508f, -0.154916f, -0.161542f, -0.140412f, -0.098426f, -0.044790f, 0.011487f, 0.062292f, 0.100710f, 0.122257f, 0.125625f, 0.111599f, 0.081676f, 0.038064f, -0.015568f, -0.073246f, -0.125374f, -0.158379f, -0.158510f, -0.119317f, -0.047174f, 0.039659f, 0.117388f, 0.164783f, 0.170354f, 0.136110f, 0.075525f, 0.006572f, -0.055527f, -0.101705f, -0.128258f, -0.134141f, -0.118811f, -0.082220f, -0.026999f, 0.038902f, 0.101566f, 0.144045f, 0.152550f, 0.123025f, 0.063907f, -0.007177f, - -0.070685f, -0.111988f, -0.124827f, -0.111060f, -0.077909f, -0.034563f, 0.010220f, 0.049241f, 0.077443f, 0.092064f, 0.092106f, 0.077698f, 0.050246f, 0.012985f, -0.028844f, -0.068172f, -0.096572f, -0.105925f, -0.091461f, -0.054444f, -0.002780f, 0.050639f, 0.091484f, 0.108787f, 0.098953f, 0.066563f, 0.021850f, -0.023112f, -0.057935f, -0.076466f, -0.077535f, -0.063771f, -0.039868f, -0.011391f, 0.016269f, 0.038948f, 0.053942f, 0.059572f, 0.055230f, 0.041838f, 0.021689f, -0.002057f, -0.025436f, -0.043993f, -0.054036f, -0.053641f, -0.042616f, -0.022580f, 0.002601f, 0.027618f, 0.047483f, 0.058276f, 0.057322f, 0.044558f, 0.023331f, -0.001451f, -0.024710f, -0.039879f, -0.040348f, -0.026668f, -0.009522f, -0.000100f, 0.000909f, 0.000035f}, - {0.043211f, 0.114663f, 0.178350f, 0.255737f, 0.285888f, 0.179104f, -0.023247f, -0.173997f, -0.226462f, -0.279044f, -0.376950f, -0.415326f, -0.314791f, -0.166534f, -0.101737f, -0.111875f, -0.106297f, -0.075928f, -0.083496f, -0.132151f, -0.157295f, -0.141147f, -0.141935f, -0.197377f, -0.268166f, -0.295822f, -0.268965f, -0.216058f, -0.166730f, -0.133269f, -0.106523f, -0.062428f, 0.009773f, 0.084069f, 0.118826f, 0.100756f, 0.052619f, 0.000385f, -0.049019f, -0.097030f, -0.139136f, -0.169026f, -0.187831f, -0.203308f, -0.223852f, -0.255186f, -0.299437f, -0.356144f, -0.425306f, -0.507990f, -0.602347f, -0.701452f, -0.797320f, -0.885133f, -0.962214f, -1.026134f, -1.076805f, -1.118706f, -1.158479f, -1.200974f, -1.248680f, -1.303141f, -1.364299f, -1.428256f, -1.487099f, -1.531700f, -1.554756f, -1.551648f, -1.520065f, -1.460625f, -1.377882f, -1.278869f, -1.169561f, -1.053641f, -0.934981f, -0.819203f, -0.711302f, -0.613088f, -0.524413f, -0.445870f, -0.379143f, -0.325887f, -0.287530f, -0.265472f, -0.260511f, -0.272174f, -0.298377f, -0.335361f, -0.379247f, -0.429275f, -0.488690f, -0.561273f, -0.648741f, -0.753109f, -0.878725f, -1.028425f, - -1.199267f, -1.385196f, -1.581978f, -1.785517f, -1.986815f, -2.173455f, -2.336281f, -2.471087f, -2.574200f, -2.641158f, -2.671370f, -2.670549f, -2.646120f, -2.602190f, -2.540998f, -2.466998f, -2.385837f, -2.299472f, -2.205584f, -2.102795f, -1.993617f, -1.880860f, -1.764387f, -1.644251f, -1.524566f, -1.410674f, -1.304067f, -1.203483f, -1.109515f, -1.024333f, -0.947806f, -0.877724f, -0.813643f, -0.757572f, -0.711183f, -0.674763f, -0.648343f, -0.631942f, -0.625338f, -0.628602f, -0.641609f, -0.662782f, -0.690486f, -0.725337f, -0.767997f, -0.815397f, -0.862958f, -0.909125f, -0.952637f, -0.987183f, -1.004998f, -1.003395f, -0.980880f, -0.931098f, -0.849216f, -0.736166f, -0.582560f, -0.362530f, -0.077132f, 0.196027f, 0.339834f, 0.309726f, 0.180471f, 0.053468f} - }, - { - {-0.007685f, -0.027507f, -0.054095f, -0.077744f, -0.087310f, -0.078964f, -0.038795f, 0.069420f, 0.257031f, 0.450295f, 0.530050f, 0.449733f, 0.272335f, 0.084500f, -0.069538f, -0.161822f, -0.164288f, -0.090752f, 0.002325f, 0.083182f, 0.160693f, 0.220174f, 0.210093f, 0.117413f, -0.002015f, -0.090343f, -0.133503f, -0.129881f, -0.074554f, 0.006798f, 0.062262f, 0.070660f, 0.051397f, 0.011062f, -0.071757f, -0.199300f, -0.336804f, -0.453472f, -0.547094f, -0.622722f, -0.679122f, -0.721601f, -0.761966f, -0.801674f, -0.833087f, -0.855441f, -0.874451f, -0.891846f, -0.908530f, -0.930458f, -0.959812f, -0.988680f, -1.010943f, -1.031888f, -1.058899f, -1.091801f, -1.128278f, -1.169543f, -1.214950f, -1.258511f, -1.295477f, -1.327242f, -1.357589f, -1.388759f, -1.422413f, -1.460583f, -1.504259f, -1.552224f, -1.600690f, -1.643955f, -1.677490f, -1.700431f, -1.713026f, -1.713123f, -1.698577f, -1.671550f, -1.636224f, -1.593323f, -1.540916f, -1.479604f, -1.412906f, -1.343349f, -1.272152f, -1.202419f, -1.138827f, -1.083544f, -1.035142f, -0.992009f, -0.954485f, -0.922860f, -0.895223f, -0.868589f, -0.841261f, -0.813242f, -0.784990f, -0.756664f, - -0.728377f, -0.700591f, -0.673949f, -0.648504f, -0.623136f, -0.596307f, -0.567494f, -0.537004f, -0.504339f, -0.468321f, -0.429292f, -0.389390f, -0.350011f, -0.310984f, -0.272863f, -0.237613f, -0.206211f, -0.177918f, -0.152490f, -0.130688f, -0.112365f, -0.096494f, -0.082923f, -0.071818f, -0.062192f, -0.053302f, -0.046074f, -0.041079f, -0.037253f, -0.034551f, -0.035132f, -0.040283f, -0.049461f, -0.063497f, -0.084978f, -0.114685f, -0.151385f, -0.194815f, -0.244968f, -0.299672f, -0.356620f, -0.415455f, -0.474774f, -0.531119f, -0.583532f, -0.633601f, -0.679431f, -0.716947f, -0.747534f, -0.775310f, -0.798076f, -0.811775f, -0.820314f, -0.828412f, -0.831431f, -0.825479f, -0.812449f, -0.774419f, -0.665729f, -0.468389f, -0.242150f, -0.078143f, -0.008766f, 0.002106f}, - {-0.129968f, -0.372393f, -0.578340f, -0.729002f, -0.764205f, -0.635435f, -0.410779f, -0.258243f, -0.301569f, -0.524734f, -0.804408f, -0.990576f, -0.983187f, -0.802264f, -0.583745f, -0.457595f, -0.435905f, -0.450492f, -0.458378f, -0.450407f, -0.393789f, -0.250404f, -0.049285f, 0.124891f, 0.223524f, 0.271404f, 0.315417f, 0.378570f, 0.464787f, 0.569578f, 0.675212f, 0.756468f, 0.797347f, 0.794880f, 0.754800f, 0.694127f, 0.637483f, 0.597643f, 0.564937f, 0.521985f, 0.461410f, 0.385881f, 0.301177f, 0.214129f, 0.129669f, 0.046526f, -0.039231f, -0.126876f, -0.212405f, -0.294795f, -0.375289f, -0.453145f, -0.526688f, -0.595041f, -0.654835f, -0.699235f, -0.723697f, -0.729022f, -0.716770f, -0.686317f, -0.638153f, -0.575500f, -0.501166f, -0.416714f, -0.325202f, -0.230531f, -0.133598f, -0.032773f, 0.071477f, 0.175093f, 0.273102f, 0.361324f, 0.436332f, 0.496419f, 0.542408f, 0.575872f, 0.596821f, 0.603979f, 0.596576f, 0.575075f, 0.540663f, 0.494625f, 0.438152f, 0.372876f, 0.301611f, 0.228007f, 0.155318f, 0.085985f, 0.022006f, -0.035375f, -0.086123f, -0.130408f, -0.167443f, -0.196380f, -0.217766f, -0.232828f, - -0.241945f, -0.245120f, -0.243300f, -0.237878f, -0.229559f, -0.218937f, -0.207509f, -0.196911f, -0.187682f, -0.179723f, -0.173313f, -0.168740f, -0.165527f, -0.162849f, -0.160290f, -0.157612f, -0.154177f, -0.148993f, -0.141009f, -0.129167f, -0.112488f, -0.090258f, -0.062070f, -0.027942f, 0.011466f, 0.055164f, 0.102457f, 0.152703f, 0.204508f, 0.256025f, 0.305953f, 0.353184f, 0.395721f, 0.431341f, 0.459153f, 0.478929f, 0.489277f, 0.488292f, 0.475516f, 0.451198f, 0.414350f, 0.363901f, 0.300928f, 0.227294f, 0.143319f, 0.049531f, -0.050798f, -0.153561f, -0.256130f, -0.355063f, -0.444423f, -0.519082f, -0.576123f, -0.611242f, -0.619307f, -0.598890f, -0.546613f, -0.447912f, -0.293914f, -0.116818f, 0.014790f, 0.058050f, 0.038715f, 0.010517f} - }, - { - {-0.129968f, -0.372393f, -0.578340f, -0.729002f, -0.764205f, -0.635435f, -0.410779f, -0.258243f, -0.301569f, -0.524734f, -0.804408f, -0.990576f, -0.983187f, -0.802264f, -0.583745f, -0.457595f, -0.435905f, -0.450492f, -0.458378f, -0.450407f, -0.393789f, -0.250404f, -0.049285f, 0.124891f, 0.223524f, 0.271404f, 0.315417f, 0.378570f, 0.464787f, 0.569578f, 0.675212f, 0.756468f, 0.797347f, 0.794880f, 0.754800f, 0.694127f, 0.637483f, 0.597643f, 0.564937f, 0.521985f, 0.461410f, 0.385881f, 0.301177f, 0.214129f, 0.129669f, 0.046526f, -0.039231f, -0.126876f, -0.212405f, -0.294795f, -0.375289f, -0.453145f, -0.526688f, -0.595041f, -0.654835f, -0.699235f, -0.723697f, -0.729022f, -0.716770f, -0.686317f, -0.638153f, -0.575500f, -0.501166f, -0.416714f, -0.325202f, -0.230531f, -0.133598f, -0.032773f, 0.071477f, 0.175093f, 0.273102f, 0.361324f, 0.436332f, 0.496419f, 0.542408f, 0.575872f, 0.596821f, 0.603979f, 0.596576f, 0.575075f, 0.540663f, 0.494625f, 0.438152f, 0.372876f, 0.301611f, 0.228007f, 0.155318f, 0.085985f, 0.022006f, -0.035375f, -0.086123f, -0.130408f, -0.167443f, -0.196380f, -0.217766f, -0.232828f, - -0.241945f, -0.245120f, -0.243300f, -0.237878f, -0.229559f, -0.218937f, -0.207509f, -0.196911f, -0.187682f, -0.179723f, -0.173313f, -0.168740f, -0.165527f, -0.162849f, -0.160290f, -0.157612f, -0.154177f, -0.148993f, -0.141009f, -0.129167f, -0.112488f, -0.090258f, -0.062070f, -0.027942f, 0.011466f, 0.055164f, 0.102457f, 0.152703f, 0.204508f, 0.256025f, 0.305953f, 0.353184f, 0.395721f, 0.431341f, 0.459153f, 0.478929f, 0.489277f, 0.488292f, 0.475516f, 0.451198f, 0.414350f, 0.363901f, 0.300928f, 0.227294f, 0.143319f, 0.049531f, -0.050798f, -0.153561f, -0.256130f, -0.355063f, -0.444423f, -0.519082f, -0.576123f, -0.611242f, -0.619307f, -0.598890f, -0.546613f, -0.447912f, -0.293914f, -0.116818f, 0.014790f, 0.058050f, 0.038715f, 0.010517f}, - {-0.007685f, -0.027507f, -0.054095f, -0.077744f, -0.087310f, -0.078964f, -0.038795f, 0.069420f, 0.257031f, 0.450295f, 0.530050f, 0.449733f, 0.272335f, 0.084500f, -0.069538f, -0.161822f, -0.164288f, -0.090752f, 0.002325f, 0.083182f, 0.160693f, 0.220174f, 0.210093f, 0.117413f, -0.002015f, -0.090343f, -0.133503f, -0.129881f, -0.074554f, 0.006798f, 0.062262f, 0.070660f, 0.051397f, 0.011062f, -0.071757f, -0.199300f, -0.336804f, -0.453472f, -0.547094f, -0.622722f, -0.679122f, -0.721601f, -0.761966f, -0.801674f, -0.833087f, -0.855441f, -0.874451f, -0.891846f, -0.908530f, -0.930458f, -0.959812f, -0.988680f, -1.010943f, -1.031888f, -1.058899f, -1.091801f, -1.128278f, -1.169543f, -1.214950f, -1.258511f, -1.295477f, -1.327242f, -1.357589f, -1.388759f, -1.422413f, -1.460583f, -1.504259f, -1.552224f, -1.600690f, -1.643955f, -1.677490f, -1.700431f, -1.713026f, -1.713123f, -1.698577f, -1.671550f, -1.636224f, -1.593323f, -1.540916f, -1.479604f, -1.412906f, -1.343349f, -1.272152f, -1.202419f, -1.138827f, -1.083544f, -1.035142f, -0.992009f, -0.954485f, -0.922860f, -0.895223f, -0.868589f, -0.841261f, -0.813242f, -0.784990f, -0.756664f, - -0.728377f, -0.700591f, -0.673949f, -0.648504f, -0.623136f, -0.596307f, -0.567494f, -0.537004f, -0.504339f, -0.468321f, -0.429292f, -0.389390f, -0.350011f, -0.310984f, -0.272863f, -0.237613f, -0.206211f, -0.177918f, -0.152490f, -0.130688f, -0.112365f, -0.096494f, -0.082923f, -0.071818f, -0.062192f, -0.053302f, -0.046074f, -0.041079f, -0.037253f, -0.034551f, -0.035132f, -0.040283f, -0.049461f, -0.063497f, -0.084978f, -0.114685f, -0.151385f, -0.194815f, -0.244968f, -0.299672f, -0.356620f, -0.415455f, -0.474774f, -0.531119f, -0.583532f, -0.633601f, -0.679431f, -0.716947f, -0.747534f, -0.775310f, -0.798076f, -0.811775f, -0.820314f, -0.828412f, -0.831431f, -0.825479f, -0.812449f, -0.774419f, -0.665729f, -0.468389f, -0.242150f, -0.078143f, -0.008766f, 0.002106f} - }, - { - {0.008569f, 0.036036f, 0.083803f, 0.119148f, 0.070548f, -0.078326f, -0.222894f, -0.243650f, -0.159814f, -0.090800f, -0.079375f, -0.056656f, 0.011482f, 0.052573f, -0.001498f, -0.119602f, -0.234866f, -0.335723f, -0.443207f, -0.546764f, -0.614586f, -0.641944f, -0.650393f, -0.653434f, -0.649185f, -0.636897f, -0.621833f, -0.608002f, -0.594814f, -0.577373f, -0.548943f, -0.509093f, -0.468031f, -0.436187f, -0.411762f, -0.384320f, -0.347210f, -0.301521f, -0.252453f, -0.207016f, -0.171531f, -0.147319f, -0.131387f, -0.122478f, -0.122706f, -0.133139f, -0.152285f, -0.178903f, -0.211845f, -0.246994f, -0.277923f, -0.299862f, -0.311486f, -0.314495f, -0.313374f, -0.313999f, -0.321093f, -0.338012f, -0.367937f, -0.412103f, -0.467256f, -0.527953f, -0.590760f, -0.653426f, -0.711811f, -0.761768f, -0.803336f, -0.839595f, -0.872213f, -0.901047f, -0.926960f, -0.951668f, -0.974952f, -0.994343f, -1.007533f, -1.013586f, -1.011948f, -1.001634f, -0.982097f, -0.954803f, -0.923350f, -0.891226f, -0.859546f, -0.827704f, -0.795383f, -0.762152f, -0.725674f, -0.682815f, -0.632889f, -0.578128f, -0.521168f, -0.463936f, -0.408686f, -0.358044f, -0.313851f, -0.277169f, - -0.249216f, -0.231562f, -0.226114f, -0.235302f, -0.261018f, -0.302923f, -0.359045f, -0.427912f, -0.508230f, -0.596814f, -0.689382f, -0.783568f, -0.878803f, -0.973138f, -1.062782f, -1.145182f, -1.220206f, -1.287561f, -1.345176f, -1.391256f, -1.426524f, -1.453153f, -1.472158f, -1.483234f, -1.487105f, -1.486427f, -1.483303f, -1.477082f, -1.466245f, -1.451366f, -1.433837f, -1.412447f, -1.384210f, -1.348415f, -1.306852f, -1.260094f, -1.206810f, -1.147202f, -1.084167f, -1.020388f, -0.956644f, -0.893519f, -0.832832f, -0.776711f, -0.726155f, -0.680677f, -0.639318f, -0.602179f, -0.570035f, -0.541815f, -0.514590f, -0.487168f, -0.460379f, -0.432551f, -0.399491f, -0.358843f, -0.305118f, -0.220990f, -0.093402f, 0.051282f, 0.149376f, 0.158777f, 0.102510f, 0.032573f}, - {-0.185559f, -0.533696f, -0.795174f, -0.893521f, -0.804685f, -0.602937f, -0.410524f, -0.289172f, -0.193916f, -0.044106f, 0.172466f, 0.382975f, 0.510029f, 0.545297f, 0.535692f, 0.515516f, 0.471783f, 0.372671f, 0.213104f, 0.026128f, -0.142895f, -0.267633f, -0.350549f, -0.407779f, -0.446543f, -0.457210f, -0.425690f, -0.349165f, -0.237230f, -0.102509f, 0.042736f, 0.181828f, 0.293938f, 0.363819f, 0.388959f, 0.375638f, 0.331364f, 0.263320f, 0.180641f, 0.093713f, 0.010848f, -0.063123f, -0.125901f, -0.176786f, -0.215972f, -0.243350f, -0.257838f, -0.258058f, -0.242990f, -0.211605f, -0.162734f, -0.096408f, -0.015762f, 0.072248f, 0.157999f, 0.231691f, 0.285687f, 0.315159f, 0.317146f, 0.289924f, 0.233942f, 0.153214f, 0.055517f, -0.048876f, -0.149035f, -0.235026f, -0.298865f, -0.334596f, -0.337970f, -0.306610f, -0.241101f, -0.146635f, -0.034068f, 0.080977f, 0.181425f, 0.253055f, 0.287741f, 0.284775f, 0.250380f, 0.195377f, 0.131392f, 0.067461f, 0.008841f, -0.042182f, -0.084996f, -0.119586f, -0.145618f, -0.161950f, -0.166889f, -0.158953f, -0.137777f, -0.104952f, -0.064224f, -0.020560f, 0.021350f, 0.058000f, - 0.087198f, 0.107952f, 0.120229f, 0.124423f, 0.120940f, 0.110209f, 0.092820f, 0.069478f, 0.041098f, 0.009121f, -0.024406f, -0.057046f, -0.086092f, -0.108691f, -0.122317f, -0.125322f, -0.117083f, -0.098008f, -0.069732f, -0.035104f, 0.002352f, 0.039025f, 0.071510f, 0.096953f, 0.113464f, 0.120114f, 0.116611f, 0.103273f, 0.081173f, 0.052018f, 0.018016f, -0.017906f, -0.052056f, -0.080561f, -0.100082f, -0.108258f, -0.104200f, -0.088962f, -0.065272f, -0.036665f, -0.006887f, 0.020495f, 0.042788f, 0.058666f, 0.067823f, 0.070539f, 0.067767f, 0.060956f, 0.051331f, 0.039723f, 0.027058f, 0.014228f, 0.001590f, -0.010580f, -0.021471f, -0.030400f, -0.037058f, -0.039808f, -0.035582f, -0.024114f, -0.010855f, -0.002418f, 0.000057f, 0.000072f} - }, - { - {-0.185559f, -0.533696f, -0.795174f, -0.893521f, -0.804685f, -0.602937f, -0.410524f, -0.289172f, -0.193916f, -0.044106f, 0.172466f, 0.382975f, 0.510029f, 0.545297f, 0.535692f, 0.515516f, 0.471783f, 0.372671f, 0.213104f, 0.026128f, -0.142895f, -0.267633f, -0.350549f, -0.407779f, -0.446543f, -0.457210f, -0.425690f, -0.349165f, -0.237230f, -0.102509f, 0.042736f, 0.181828f, 0.293938f, 0.363819f, 0.388959f, 0.375638f, 0.331364f, 0.263320f, 0.180641f, 0.093713f, 0.010848f, -0.063123f, -0.125901f, -0.176786f, -0.215972f, -0.243350f, -0.257838f, -0.258058f, -0.242990f, -0.211605f, -0.162734f, -0.096408f, -0.015762f, 0.072248f, 0.157999f, 0.231691f, 0.285687f, 0.315159f, 0.317146f, 0.289924f, 0.233942f, 0.153214f, 0.055517f, -0.048876f, -0.149035f, -0.235026f, -0.298865f, -0.334596f, -0.337970f, -0.306610f, -0.241101f, -0.146635f, -0.034068f, 0.080977f, 0.181425f, 0.253055f, 0.287741f, 0.284775f, 0.250380f, 0.195377f, 0.131392f, 0.067461f, 0.008841f, -0.042182f, -0.084996f, -0.119586f, -0.145618f, -0.161950f, -0.166889f, -0.158953f, -0.137777f, -0.104952f, -0.064224f, -0.020560f, 0.021350f, 0.058000f, - 0.087198f, 0.107952f, 0.120229f, 0.124423f, 0.120940f, 0.110209f, 0.092820f, 0.069478f, 0.041098f, 0.009121f, -0.024406f, -0.057046f, -0.086092f, -0.108691f, -0.122317f, -0.125322f, -0.117083f, -0.098008f, -0.069732f, -0.035104f, 0.002352f, 0.039025f, 0.071510f, 0.096953f, 0.113464f, 0.120114f, 0.116611f, 0.103273f, 0.081173f, 0.052018f, 0.018016f, -0.017906f, -0.052056f, -0.080561f, -0.100082f, -0.108258f, -0.104200f, -0.088962f, -0.065272f, -0.036665f, -0.006887f, 0.020495f, 0.042788f, 0.058666f, 0.067823f, 0.070539f, 0.067767f, 0.060956f, 0.051331f, 0.039723f, 0.027058f, 0.014228f, 0.001590f, -0.010580f, -0.021471f, -0.030400f, -0.037058f, -0.039808f, -0.035582f, -0.024114f, -0.010855f, -0.002418f, 0.000057f, 0.000072f}, - {0.008569f, 0.036036f, 0.083803f, 0.119148f, 0.070548f, -0.078326f, -0.222894f, -0.243650f, -0.159814f, -0.090800f, -0.079375f, -0.056656f, 0.011482f, 0.052573f, -0.001498f, -0.119602f, -0.234866f, -0.335723f, -0.443207f, -0.546764f, -0.614586f, -0.641944f, -0.650393f, -0.653434f, -0.649185f, -0.636897f, -0.621833f, -0.608002f, -0.594814f, -0.577373f, -0.548943f, -0.509093f, -0.468031f, -0.436187f, -0.411762f, -0.384320f, -0.347210f, -0.301521f, -0.252453f, -0.207016f, -0.171531f, -0.147319f, -0.131387f, -0.122478f, -0.122706f, -0.133139f, -0.152285f, -0.178903f, -0.211845f, -0.246994f, -0.277923f, -0.299862f, -0.311486f, -0.314495f, -0.313374f, -0.313999f, -0.321093f, -0.338012f, -0.367937f, -0.412103f, -0.467256f, -0.527953f, -0.590760f, -0.653426f, -0.711811f, -0.761768f, -0.803336f, -0.839595f, -0.872213f, -0.901047f, -0.926960f, -0.951668f, -0.974952f, -0.994343f, -1.007533f, -1.013586f, -1.011948f, -1.001634f, -0.982097f, -0.954803f, -0.923350f, -0.891226f, -0.859546f, -0.827704f, -0.795383f, -0.762152f, -0.725674f, -0.682815f, -0.632889f, -0.578128f, -0.521168f, -0.463936f, -0.408686f, -0.358044f, -0.313851f, -0.277169f, - -0.249216f, -0.231562f, -0.226114f, -0.235302f, -0.261018f, -0.302923f, -0.359045f, -0.427912f, -0.508230f, -0.596814f, -0.689382f, -0.783568f, -0.878803f, -0.973138f, -1.062782f, -1.145182f, -1.220206f, -1.287561f, -1.345176f, -1.391256f, -1.426524f, -1.453153f, -1.472158f, -1.483234f, -1.487105f, -1.486427f, -1.483303f, -1.477082f, -1.466245f, -1.451366f, -1.433837f, -1.412447f, -1.384210f, -1.348415f, -1.306852f, -1.260094f, -1.206810f, -1.147202f, -1.084167f, -1.020388f, -0.956644f, -0.893519f, -0.832832f, -0.776711f, -0.726155f, -0.680677f, -0.639318f, -0.602179f, -0.570035f, -0.541815f, -0.514590f, -0.487168f, -0.460379f, -0.432551f, -0.399491f, -0.358843f, -0.305118f, -0.220990f, -0.093402f, 0.051282f, 0.149376f, 0.158777f, 0.102510f, 0.032573f} - }, - { - {0.000818f, 0.017444f, 0.055261f, 0.075350f, 0.028576f, -0.084474f, -0.203267f, -0.269006f, -0.280096f, -0.268702f, -0.244047f, -0.193916f, -0.132682f, -0.106266f, -0.141353f, -0.220111f, -0.313836f, -0.412717f, -0.509637f, -0.582401f, -0.614704f, -0.620470f, -0.628348f, -0.649673f, -0.675138f, -0.695278f, -0.709877f, -0.720342f, -0.725172f, -0.724086f, -0.719270f, -0.711043f, -0.696324f, -0.671680f, -0.634992f, -0.584739f, -0.521369f, -0.450440f, -0.381867f, -0.324115f, -0.279763f, -0.247402f, -0.226194f, -0.216476f, -0.216704f, -0.222582f, -0.229987f, -0.237137f, -0.243538f, -0.248735f, -0.252984f, -0.257930f, -0.265977f, -0.279595f, -0.300835f, -0.330262f, -0.366467f, -0.407332f, -0.450975f, -0.494762f, -0.535151f, -0.570200f, -0.601049f, -0.629499f, -0.655394f, -0.677493f, -0.695060f, -0.706757f, -0.709441f, -0.699998f, -0.677852f, -0.644857f, -0.603934f, -0.558778f, -0.513757f, -0.472656f, -0.437355f, -0.407636f, -0.381795f, -0.357605f, -0.333418f, -0.308502f, -0.282455f, -0.254976f, -0.226350f, -0.197326f, -0.168302f, -0.139286f, -0.110657f, -0.083214f, -0.057592f, -0.034344f, -0.014464f, 0.000612f, 0.009079f, 0.008658f, - -0.002748f, -0.026081f, -0.061503f, -0.109231f, -0.168492f, -0.236158f, -0.308371f, -0.383343f, -0.460785f, -0.539319f, -0.616894f, -0.693318f, -0.769682f, -0.845181f, -0.916820f, -0.982312f, -1.041125f, -1.092420f, -1.134068f, -1.164515f, -1.184365f, -1.195293f, -1.198046f, -1.192412f, -1.179094f, -1.160558f, -1.139207f, -1.115521f, -1.089332f, -1.062057f, -1.035496f, -1.008900f, -0.979692f, -0.946885f, -0.911190f, -0.872108f, -0.828013f, -0.779273f, -0.728569f, -0.678022f, -0.628266f, -0.580141f, -0.535147f, -0.494398f, -0.458425f, -0.427379f, -0.400841f, -0.378568f, -0.361181f, -0.348470f, -0.338233f, -0.328932f, -0.321152f, -0.313945f, -0.303478f, -0.287185f, -0.261552f, -0.213238f, -0.127665f, -0.018184f, 0.068083f, 0.092632f, 0.064838f, 0.021246f}, - {-0.132893f, -0.397605f, -0.632845f, -0.770213f, -0.762671f, -0.657487f, -0.569283f, -0.556594f, -0.559219f, -0.491993f, -0.364307f, -0.253849f, -0.187137f, -0.112112f, 0.014136f, 0.171821f, 0.322049f, 0.450715f, 0.550492f, 0.602217f, 0.599573f, 0.565276f, 0.522546f, 0.469434f, 0.394977f, 0.302555f, 0.203283f, 0.099429f, -0.013047f, -0.132581f, -0.249813f, -0.352012f, -0.426880f, -0.468084f, -0.479268f, -0.468257f, -0.437536f, -0.385150f, -0.313695f, -0.232864f, -0.153248f, -0.081508f, -0.020528f, 0.029902f, 0.072671f, 0.111201f, 0.147960f, 0.185756f, 0.228084f, 0.275839f, 0.324544f, 0.365884f, 0.391073f, 0.393116f, 0.368911f, 0.321050f, 0.256310f, 0.181056f, 0.098444f, 0.009769f, -0.083153f, -0.177113f, -0.267162f, -0.346282f, -0.406698f, -0.442695f, -0.452288f, -0.436663f, -0.398947f, -0.343145f, -0.272690f, -0.189417f, -0.094678f, 0.008122f, 0.112328f, 0.209109f, 0.289473f, 0.346381f, 0.376791f, 0.382372f, 0.367753f, 0.337827f, 0.296648f, 0.247834f, 0.194626f, 0.139355f, 0.083528f, 0.028486f, -0.024521f, -0.074738f, -0.121823f, -0.165351f, -0.204687f, -0.239035f, -0.267045f, -0.286388f, - -0.294167f, -0.287997f, -0.266762f, -0.230689f, -0.181240f, -0.121082f, -0.053843f, 0.016500f, 0.086073f, 0.151052f, 0.207628f, 0.252510f, 0.283443f, 0.299057f, 0.298561f, 0.282101f, 0.251143f, 0.208046f, 0.155513f, 0.096805f, 0.035848f, -0.023629f, -0.078756f, -0.127050f, -0.166116f, -0.194424f, -0.211611f, -0.217549f, -0.211988f, -0.195487f, -0.169671f, -0.136297f, -0.097197f, -0.055217f, -0.013832f, 0.024328f, 0.057561f, 0.084189f, 0.103126f, 0.114971f, 0.121155f, 0.122583f, 0.120200f, 0.115693f, 0.110234f, 0.103651f, 0.095767f, 0.087016f, 0.077007f, 0.064469f, 0.049153f, 0.031743f, 0.012078f, -0.009949f, -0.032469f, -0.053467f, -0.072429f, -0.086119f, -0.086097f, -0.067552f, -0.038975f, -0.015688f, -0.004466f, -0.000879f} - }, - { - {-0.132893f, -0.397605f, -0.632845f, -0.770213f, -0.762671f, -0.657487f, -0.569283f, -0.556594f, -0.559219f, -0.491993f, -0.364307f, -0.253849f, -0.187137f, -0.112112f, 0.014136f, 0.171821f, 0.322049f, 0.450715f, 0.550492f, 0.602217f, 0.599573f, 0.565276f, 0.522546f, 0.469434f, 0.394977f, 0.302555f, 0.203283f, 0.099429f, -0.013047f, -0.132581f, -0.249813f, -0.352012f, -0.426880f, -0.468084f, -0.479268f, -0.468257f, -0.437536f, -0.385150f, -0.313695f, -0.232864f, -0.153248f, -0.081508f, -0.020528f, 0.029902f, 0.072671f, 0.111201f, 0.147960f, 0.185756f, 0.228084f, 0.275839f, 0.324544f, 0.365884f, 0.391073f, 0.393116f, 0.368911f, 0.321050f, 0.256310f, 0.181056f, 0.098444f, 0.009769f, -0.083153f, -0.177113f, -0.267162f, -0.346282f, -0.406698f, -0.442695f, -0.452288f, -0.436663f, -0.398947f, -0.343145f, -0.272690f, -0.189417f, -0.094678f, 0.008122f, 0.112328f, 0.209109f, 0.289473f, 0.346381f, 0.376791f, 0.382372f, 0.367753f, 0.337827f, 0.296648f, 0.247834f, 0.194626f, 0.139355f, 0.083528f, 0.028486f, -0.024521f, -0.074738f, -0.121823f, -0.165351f, -0.204687f, -0.239035f, -0.267045f, -0.286388f, - -0.294167f, -0.287997f, -0.266762f, -0.230689f, -0.181240f, -0.121082f, -0.053843f, 0.016500f, 0.086073f, 0.151052f, 0.207628f, 0.252510f, 0.283443f, 0.299057f, 0.298561f, 0.282101f, 0.251143f, 0.208046f, 0.155513f, 0.096805f, 0.035848f, -0.023629f, -0.078756f, -0.127050f, -0.166116f, -0.194424f, -0.211611f, -0.217549f, -0.211988f, -0.195487f, -0.169671f, -0.136297f, -0.097197f, -0.055217f, -0.013832f, 0.024328f, 0.057561f, 0.084189f, 0.103126f, 0.114971f, 0.121155f, 0.122583f, 0.120200f, 0.115693f, 0.110234f, 0.103651f, 0.095767f, 0.087016f, 0.077007f, 0.064469f, 0.049153f, 0.031743f, 0.012078f, -0.009949f, -0.032469f, -0.053467f, -0.072429f, -0.086119f, -0.086097f, -0.067552f, -0.038975f, -0.015688f, -0.004466f, -0.000879f}, - {0.000818f, 0.017444f, 0.055261f, 0.075350f, 0.028576f, -0.084474f, -0.203267f, -0.269006f, -0.280096f, -0.268702f, -0.244047f, -0.193916f, -0.132682f, -0.106266f, -0.141353f, -0.220111f, -0.313836f, -0.412717f, -0.509637f, -0.582401f, -0.614704f, -0.620470f, -0.628348f, -0.649673f, -0.675138f, -0.695278f, -0.709877f, -0.720342f, -0.725172f, -0.724086f, -0.719270f, -0.711043f, -0.696324f, -0.671680f, -0.634992f, -0.584739f, -0.521369f, -0.450440f, -0.381867f, -0.324115f, -0.279763f, -0.247402f, -0.226194f, -0.216476f, -0.216704f, -0.222582f, -0.229987f, -0.237137f, -0.243538f, -0.248735f, -0.252984f, -0.257930f, -0.265977f, -0.279595f, -0.300835f, -0.330262f, -0.366467f, -0.407332f, -0.450975f, -0.494762f, -0.535151f, -0.570200f, -0.601049f, -0.629499f, -0.655394f, -0.677493f, -0.695060f, -0.706757f, -0.709441f, -0.699998f, -0.677852f, -0.644857f, -0.603934f, -0.558778f, -0.513757f, -0.472656f, -0.437355f, -0.407636f, -0.381795f, -0.357605f, -0.333418f, -0.308502f, -0.282455f, -0.254976f, -0.226350f, -0.197326f, -0.168302f, -0.139286f, -0.110657f, -0.083214f, -0.057592f, -0.034344f, -0.014464f, 0.000612f, 0.009079f, 0.008658f, - -0.002748f, -0.026081f, -0.061503f, -0.109231f, -0.168492f, -0.236158f, -0.308371f, -0.383343f, -0.460785f, -0.539319f, -0.616894f, -0.693318f, -0.769682f, -0.845181f, -0.916820f, -0.982312f, -1.041125f, -1.092420f, -1.134068f, -1.164515f, -1.184365f, -1.195293f, -1.198046f, -1.192412f, -1.179094f, -1.160558f, -1.139207f, -1.115521f, -1.089332f, -1.062057f, -1.035496f, -1.008900f, -0.979692f, -0.946885f, -0.911190f, -0.872108f, -0.828013f, -0.779273f, -0.728569f, -0.678022f, -0.628266f, -0.580141f, -0.535147f, -0.494398f, -0.458425f, -0.427379f, -0.400841f, -0.378568f, -0.361181f, -0.348470f, -0.338233f, -0.328932f, -0.321152f, -0.313945f, -0.303478f, -0.287185f, -0.261552f, -0.213238f, -0.127665f, -0.018184f, 0.068083f, 0.092632f, 0.064838f, 0.021246f} - } -}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 16000 */ const int16_t CRendBin_Combined_HRIR_max_num_iterations_16kHz = 1; @@ -533,153 +83,16 @@ const uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[15][BINAURAL_CHANNELS const uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][1]={{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}}}; const uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz_fx[15]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; -#endif const uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_HRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][80]={ - { - { 1.239183f, 1.256884f, 1.300573f, 1.362041f, 1.394364f, 1.354510f, 1.284249f, 1.277360f, 1.319933f, 1.260104f, 1.035831f, 0.841818f, 0.918943f, 1.228789f, 1.505938f, 1.615001f, 1.676409f, 1.821102f, 2.003314f, 2.120456f, 2.162423f, 2.149697f, 2.042953f, 1.819108f, 1.562774f, 1.392343f, 1.338502f, 1.354661f, 1.404734f, 1.489962f, 1.620994f, 1.801308f, 2.016368f, 2.220843f, 2.360726f, 2.418417f, 2.416549f, 2.381039f, 2.323273f, 2.248889f, 2.158818f, 2.050759f, 1.937222f, 1.846306f, 1.790643f, 1.755504f, 1.725726f, 1.698099f, 1.662521f, 1.603450f, 1.526080f, 1.451493f, 1.385684f, 1.321724f, 1.264611f, 1.223329f, 1.190008f, 1.155210f, 1.126054f, 1.104272f, 1.071790f, 1.020334f, 0.962879f, 0.897728f, 0.801926f, 0.675382f, 0.545582f, 0.420598f, 0.290433f, 0.173783f, 0.099765f, 0.050651f, -0.006501f, -0.051832f, -0.062025f, -0.095855f, -0.220501f, -0.379318f, -0.456547f, -0.451019f}, - { 0.976240f, 0.994260f, 0.876770f, 0.603987f, 0.342097f, 0.178057f, 0.025122f, -0.153833f, -0.238337f, -0.148669f, 0.014037f, 0.101818f, 0.056629f, -0.133626f, -0.461333f, -0.816719f, -1.019518f, -1.009183f, -0.897964f, -0.789252f, -0.663741f, -0.496239f, -0.354698f, -0.300607f, -0.288976f, -0.247649f, -0.178409f, -0.106503f, 0.000399f, 0.183189f, 0.407624f, 0.602115f, 0.750568f, 0.884249f, 0.996966f, 1.028551f, 0.941028f, 0.772393f, 0.598310f, 0.460945f, 0.351012f, 0.245637f, 0.138980f, 0.032720f, -0.080090f, -0.203879f, -0.325054f, -0.425206f, -0.502279f, -0.563310f, -0.605020f, -0.618514f, -0.605694f, -0.575144f, -0.529166f, -0.468635f, -0.401310f, -0.332120f, -0.255156f, -0.166385f, -0.072884f, 0.018825f, 0.108885f, 0.191215f, 0.251825f, 0.287375f, 0.308166f, 0.318458f, 0.313465f, 0.297736f, 0.283754f, 0.271359f, 0.252697f, 0.235107f, 0.229934f, 0.221035f, 0.178105f, 0.103282f, 0.033631f, -0.002717f} - }, - { - { 0.976240f, 0.994260f, 0.876770f, 0.603987f, 0.342097f, 0.178057f, 0.025122f, -0.153833f, -0.238337f, -0.148669f, 0.014037f, 0.101818f, 0.056629f, -0.133626f, -0.461333f, -0.816719f, -1.019518f, -1.009183f, -0.897964f, -0.789252f, -0.663741f, -0.496239f, -0.354698f, -0.300607f, -0.288976f, -0.247649f, -0.178409f, -0.106503f, 0.000399f, 0.183189f, 0.407624f, 0.602115f, 0.750568f, 0.884249f, 0.996966f, 1.028551f, 0.941028f, 0.772393f, 0.598310f, 0.460945f, 0.351012f, 0.245637f, 0.138980f, 0.032720f, -0.080090f, -0.203879f, -0.325054f, -0.425206f, -0.502279f, -0.563310f, -0.605020f, -0.618514f, -0.605694f, -0.575144f, -0.529166f, -0.468635f, -0.401310f, -0.332120f, -0.255156f, -0.166385f, -0.072884f, 0.018825f, 0.108885f, 0.191215f, 0.251825f, 0.287375f, 0.308166f, 0.318458f, 0.313465f, 0.297736f, 0.283754f, 0.271359f, 0.252697f, 0.235107f, 0.229934f, 0.221035f, 0.178105f, 0.103282f, 0.033631f, -0.002717f}, - { 1.239183f, 1.256884f, 1.300573f, 1.362041f, 1.394364f, 1.354510f, 1.284249f, 1.277360f, 1.319933f, 1.260104f, 1.035831f, 0.841818f, 0.918943f, 1.228789f, 1.505938f, 1.615001f, 1.676409f, 1.821102f, 2.003314f, 2.120456f, 2.162423f, 2.149697f, 2.042953f, 1.819108f, 1.562774f, 1.392343f, 1.338502f, 1.354661f, 1.404734f, 1.489962f, 1.620994f, 1.801308f, 2.016368f, 2.220843f, 2.360726f, 2.418417f, 2.416549f, 2.381039f, 2.323273f, 2.248889f, 2.158818f, 2.050759f, 1.937222f, 1.846306f, 1.790643f, 1.755504f, 1.725726f, 1.698099f, 1.662521f, 1.603450f, 1.526080f, 1.451493f, 1.385684f, 1.321724f, 1.264611f, 1.223329f, 1.190008f, 1.155210f, 1.126054f, 1.104272f, 1.071790f, 1.020334f, 0.962879f, 0.897728f, 0.801926f, 0.675382f, 0.545582f, 0.420598f, 0.290433f, 0.173783f, 0.099765f, 0.050651f, -0.006501f, -0.051832f, -0.062025f, -0.095855f, -0.220501f, -0.379318f, -0.456547f, -0.451019f} - }, - { - { 1.122002f, 1.187509f, 1.246713f, 1.186481f, 1.007012f, 0.901165f, 1.008728f, 1.141977f, 0.990263f, 0.601633f, 0.401412f, 0.648122f, 1.096958f, 1.338723f, 1.298435f, 1.232461f, 1.343043f, 1.571111f, 1.735520f, 1.734892f, 1.594568f, 1.403703f, 1.245465f, 1.156974f, 1.131157f, 1.152575f, 1.222042f, 1.343151f, 1.499436f, 1.653765f, 1.763643f, 1.798287f, 1.754626f, 1.659827f, 1.547259f, 1.427359f, 1.291280f, 1.143229f, 1.015463f, 0.943988f, 0.937070f, 0.973335f, 1.022309f, 1.058798f, 1.066678f, 1.044204f, 1.005034f, 0.962902f, 0.915965f, 0.855193f, 0.783640f, 0.714878f, 0.655748f, 0.603582f, 0.557141f, 0.517413f, 0.480665f, 0.442018f, 0.402043f, 0.361971f, 0.320178f, 0.279891f, 0.248672f, 0.224537f, 0.197411f, 0.168385f, 0.148883f, 0.138139f, 0.123963f, 0.107044f, 0.098600f, 0.095015f, 0.084669f, 0.075757f, 0.080895f, 0.078392f, 0.031664f, -0.052589f, -0.126934f, -0.162192f}, - { 1.122002f, 1.187509f, 1.246713f, 1.186481f, 1.007012f, 0.901165f, 1.008728f, 1.141977f, 0.990263f, 0.601633f, 0.401412f, 0.648122f, 1.096958f, 1.338723f, 1.298435f, 1.232461f, 1.343043f, 1.571111f, 1.735520f, 1.734892f, 1.594568f, 1.403703f, 1.245465f, 1.156974f, 1.131157f, 1.152575f, 1.222042f, 1.343151f, 1.499436f, 1.653765f, 1.763643f, 1.798287f, 1.754626f, 1.659827f, 1.547259f, 1.427359f, 1.291280f, 1.143229f, 1.015463f, 0.943988f, 0.937070f, 0.973335f, 1.022309f, 1.058798f, 1.066678f, 1.044204f, 1.005034f, 0.962902f, 0.915965f, 0.855193f, 0.783640f, 0.714878f, 0.655748f, 0.603582f, 0.557141f, 0.517413f, 0.480665f, 0.442018f, 0.402043f, 0.361971f, 0.320178f, 0.279891f, 0.248672f, 0.224537f, 0.197411f, 0.168385f, 0.148883f, 0.138139f, 0.123963f, 0.107044f, 0.098600f, 0.095015f, 0.084669f, 0.075757f, 0.080895f, 0.078392f, 0.031664f, -0.052589f, -0.126934f, -0.162192f} - }, - { - { 1.032458f, 1.019232f, 1.055503f, 1.152346f, 1.264895f, 1.383916f, 1.512110f, 1.580287f, 1.524747f, 1.420851f, 1.394704f, 1.425779f, 1.386971f, 1.260446f, 1.155939f, 1.120555f, 1.085289f, 1.009371f, 0.935215f, 0.881823f, 0.810096f, 0.716819f, 0.656194f, 0.648528f, 0.657128f, 0.664016f, 0.684330f, 0.701881f, 0.671714f, 0.594887f, 0.522873f, 0.483118f, 0.457983f, 0.436517f, 0.432787f, 0.451700f, 0.481548f, 0.521185f, 0.579543f, 0.650119f, 0.713051f, 0.757998f, 0.785521f, 0.795209f, 0.789636f, 0.781137f, 0.782151f, 0.796868f, 0.827388f, 0.875753f, 0.935530f, 0.992686f, 1.036578f, 1.061213f, 1.059833f, 1.030025f, 0.980163f, 0.920722f, 0.854362f, 0.781629f, 0.707493f, 0.634976f, 0.561728f, 0.488448f, 0.420947f, 0.361366f, 0.308394f, 0.265774f, 0.238195f, 0.221960f, 0.212568f, 0.214004f, 0.226821f, 0.241055f, 0.257494f, 0.292604f, 0.336204f, 0.334653f, 0.260903f, 0.178438f}, - { 0.889328f, 0.746996f, 0.488378f, 0.194430f, -0.042359f, -0.205117f, -0.340122f, -0.454284f, -0.495140f, -0.447770f, -0.377268f, -0.341727f, -0.325720f, -0.297022f, -0.268715f, -0.254946f, -0.211569f, -0.078288f, 0.140726f, 0.376638f, 0.557395f, 0.642762f, 0.624635f, 0.526071f, 0.387689f, 0.235666f, 0.075552f, -0.077664f, -0.191603f, -0.251078f, -0.275106f, -0.287280f, -0.292024f, -0.288334f, -0.281437f, -0.269025f, -0.235621f, -0.170355f, -0.077550f, 0.031117f, 0.140203f, 0.228000f, 0.275992f, 0.281213f, 0.251542f, 0.196072f, 0.128119f, 0.066628f, 0.023837f, -0.001236f, -0.013179f, -0.014941f, -0.013424f, -0.016640f, -0.023836f, -0.029784f, -0.035699f, -0.044247f, -0.050866f, -0.052722f, -0.056962f, -0.068512f, -0.081828f, -0.094138f, -0.110312f, -0.126037f, -0.125656f, -0.103544f, -0.066475f, -0.013511f, 0.059218f, 0.135030f, 0.189944f, 0.225062f, 0.249597f, 0.241962f, 0.175370f, 0.075689f, 0.002323f, -0.024232f} - }, - { - { 0.889328f, 0.746996f, 0.488378f, 0.194430f, -0.042359f, -0.205117f, -0.340122f, -0.454284f, -0.495140f, -0.447770f, -0.377268f, -0.341727f, -0.325720f, -0.297022f, -0.268715f, -0.254946f, -0.211569f, -0.078288f, 0.140726f, 0.376638f, 0.557395f, 0.642762f, 0.624635f, 0.526071f, 0.387689f, 0.235666f, 0.075552f, -0.077664f, -0.191603f, -0.251078f, -0.275106f, -0.287280f, -0.292024f, -0.288334f, -0.281437f, -0.269025f, -0.235621f, -0.170355f, -0.077550f, 0.031117f, 0.140203f, 0.228000f, 0.275992f, 0.281213f, 0.251542f, 0.196072f, 0.128119f, 0.066628f, 0.023837f, -0.001236f, -0.013179f, -0.014941f, -0.013424f, -0.016640f, -0.023836f, -0.029784f, -0.035699f, -0.044247f, -0.050866f, -0.052722f, -0.056962f, -0.068512f, -0.081828f, -0.094138f, -0.110312f, -0.126037f, -0.125656f, -0.103544f, -0.066475f, -0.013511f, 0.059218f, 0.135030f, 0.189944f, 0.225062f, 0.249597f, 0.241962f, 0.175370f, 0.075689f, 0.002323f, -0.024232f}, - { 1.032458f, 1.019232f, 1.055503f, 1.152346f, 1.264895f, 1.383916f, 1.512110f, 1.580287f, 1.524747f, 1.420851f, 1.394704f, 1.425779f, 1.386971f, 1.260446f, 1.155939f, 1.120555f, 1.085289f, 1.009371f, 0.935215f, 0.881823f, 0.810096f, 0.716819f, 0.656194f, 0.648528f, 0.657128f, 0.664016f, 0.684330f, 0.701881f, 0.671714f, 0.594887f, 0.522873f, 0.483118f, 0.457983f, 0.436517f, 0.432787f, 0.451700f, 0.481548f, 0.521185f, 0.579543f, 0.650119f, 0.713051f, 0.757998f, 0.785521f, 0.795209f, 0.789636f, 0.781137f, 0.782151f, 0.796868f, 0.827388f, 0.875753f, 0.935530f, 0.992686f, 1.036578f, 1.061213f, 1.059833f, 1.030025f, 0.980163f, 0.920722f, 0.854362f, 0.781629f, 0.707493f, 0.634976f, 0.561728f, 0.488448f, 0.420947f, 0.361366f, 0.308394f, 0.265774f, 0.238195f, 0.221960f, 0.212568f, 0.214004f, 0.226821f, 0.241055f, 0.257494f, 0.292604f, 0.336204f, 0.334653f, 0.260903f, 0.178438f} - }, - { - { 1.158112f, 1.137057f, 1.174613f, 1.308407f, 1.475864f, 1.598510f, 1.664862f, 1.690093f, 1.651597f, 1.534827f, 1.406784f, 1.355852f, 1.365578f, 1.335480f, 1.236605f, 1.155816f, 1.155572f, 1.178545f, 1.145617f, 1.074884f, 1.034046f, 1.028410f, 1.011514f, 0.974296f, 0.951351f, 0.952791f, 0.951270f, 0.934033f, 0.920539f, 0.926929f, 0.947425f, 0.971010f, 0.990610f, 0.998330f, 0.992556f, 0.986782f, 0.996893f, 1.025270f, 1.066679f, 1.119066f, 1.178909f, 1.237203f, 1.288894f, 1.336531f, 1.379512f, 1.411025f, 1.429533f, 1.442089f, 1.453763f, 1.464108f, 1.474121f, 1.485855f, 1.495586f, 1.496799f, 1.487971f, 1.469903f, 1.440331f, 1.398591f, 1.349095f, 1.293717f, 1.228938f, 1.155645f, 1.081269f, 1.007672f, 0.929250f, 0.846598f, 0.767662f, 0.692536f, 0.613816f, 0.534651f, 0.467779f, 0.414464f, 0.365611f, 0.326004f, 0.311159f, 0.311495f, 0.285175f, 0.203678f, 0.091850f, 0.011559f}, - { 0.901656f, 0.675975f, 0.308472f, -0.078196f, -0.395054f, -0.619898f, -0.749461f, -0.745121f, -0.567593f, -0.256959f, 0.067459f, 0.299340f, 0.414342f, 0.446852f, 0.428396f, 0.363898f, 0.253318f, 0.116508f, -0.013083f, -0.117898f, -0.206372f, -0.284180f, -0.329308f, -0.314412f, -0.244304f, -0.149614f, -0.050276f, 0.051936f, 0.149545f, 0.222247f, 0.255380f, 0.249297f, 0.210511f, 0.146069f, 0.065487f, -0.020890f, -0.103702f, -0.170940f, -0.208945f, -0.211820f, -0.185220f, -0.139572f, -0.084250f, -0.026357f, 0.031102f, 0.087784f, 0.138807f, 0.173470f, 0.183734f, 0.167784f, 0.125449f, 0.059969f, -0.015648f, -0.084348f, -0.136303f, -0.166828f, -0.170290f, -0.147307f, -0.109984f, -0.069086f, -0.025167f, 0.020371f, 0.060146f, 0.093657f, 0.127308f, 0.156007f, 0.164553f, 0.148834f, 0.112994f, 0.050508f, -0.042163f, -0.140492f, -0.212717f, -0.251404f, -0.249732f, -0.178192f, -0.041065f, 0.077068f, 0.097809f, 0.059914f} - }, - { - { 0.901656f, 0.675975f, 0.308472f, -0.078196f, -0.395054f, -0.619898f, -0.749461f, -0.745121f, -0.567593f, -0.256959f, 0.067459f, 0.299340f, 0.414342f, 0.446852f, 0.428396f, 0.363898f, 0.253318f, 0.116508f, -0.013083f, -0.117898f, -0.206372f, -0.284180f, -0.329308f, -0.314412f, -0.244304f, -0.149614f, -0.050276f, 0.051936f, 0.149545f, 0.222247f, 0.255380f, 0.249297f, 0.210511f, 0.146069f, 0.065487f, -0.020890f, -0.103702f, -0.170940f, -0.208945f, -0.211820f, -0.185220f, -0.139572f, -0.084250f, -0.026357f, 0.031102f, 0.087784f, 0.138807f, 0.173470f, 0.183734f, 0.167784f, 0.125449f, 0.059969f, -0.015648f, -0.084348f, -0.136303f, -0.166828f, -0.170290f, -0.147307f, -0.109984f, -0.069086f, -0.025167f, 0.020371f, 0.060146f, 0.093657f, 0.127308f, 0.156007f, 0.164553f, 0.148834f, 0.112994f, 0.050508f, -0.042163f, -0.140492f, -0.212717f, -0.251404f, -0.249732f, -0.178192f, -0.041065f, 0.077068f, 0.097809f, 0.059914f}, - { 1.158112f, 1.137057f, 1.174613f, 1.308407f, 1.475864f, 1.598510f, 1.664862f, 1.690093f, 1.651597f, 1.534827f, 1.406784f, 1.355852f, 1.365578f, 1.335480f, 1.236605f, 1.155816f, 1.155572f, 1.178545f, 1.145617f, 1.074884f, 1.034046f, 1.028410f, 1.011514f, 0.974296f, 0.951351f, 0.952791f, 0.951270f, 0.934033f, 0.920539f, 0.926929f, 0.947425f, 0.971010f, 0.990610f, 0.998330f, 0.992556f, 0.986782f, 0.996893f, 1.025270f, 1.066679f, 1.119066f, 1.178909f, 1.237203f, 1.288894f, 1.336531f, 1.379512f, 1.411025f, 1.429533f, 1.442089f, 1.453763f, 1.464108f, 1.474121f, 1.485855f, 1.495586f, 1.496799f, 1.487971f, 1.469903f, 1.440331f, 1.398591f, 1.349095f, 1.293717f, 1.228938f, 1.155645f, 1.081269f, 1.007672f, 0.929250f, 0.846598f, 0.767662f, 0.692536f, 0.613816f, 0.534651f, 0.467779f, 0.414464f, 0.365611f, 0.326004f, 0.311159f, 0.311495f, 0.285175f, 0.203678f, 0.091850f, 0.011559f} - }, - { - { 1.235520f, 1.267745f, 1.311533f, 1.396643f, 1.562142f, 1.739490f, 1.797650f, 1.725448f, 1.645715f, 1.615047f, 1.544151f, 1.379627f, 1.231268f, 1.218112f, 1.292699f, 1.332906f, 1.328133f, 1.351971f, 1.406972f, 1.424922f, 1.397315f, 1.389969f, 1.427081f, 1.452470f, 1.417648f, 1.341339f, 1.270667f, 1.231859f, 1.225126f, 1.232539f, 1.230373f, 1.218536f, 1.230471f, 1.294017f, 1.394390f, 1.492369f, 1.564549f, 1.611356f, 1.640653f, 1.658539f, 1.668696f, 1.673718f, 1.680425f, 1.699615f, 1.733804f, 1.773278f, 1.810830f, 1.848659f, 1.885086f, 1.909496f, 1.915897f, 1.906449f, 1.879898f, 1.833243f, 1.773732f, 1.712413f, 1.650523f, 1.587448f, 1.531042f, 1.483778f, 1.433378f, 1.371553f, 1.302603f, 1.222332f, 1.114931f, 0.981061f, 0.839087f, 0.693154f, 0.535784f, 0.381622f, 0.254990f, 0.148531f, 0.043270f, -0.043620f, -0.091644f, -0.138174f, -0.231231f, -0.338131f, -0.386098f, -0.378792f}, - { 0.914782f, 0.650055f, 0.239576f, -0.181854f, -0.539073f, -0.787899f, -0.863032f, -0.709618f, -0.363410f, 0.045228f, 0.384901f, 0.599773f, 0.690085f, 0.654823f, 0.484709f, 0.199734f, -0.132928f, -0.424723f, -0.606004f, -0.647328f, -0.552997f, -0.344341f, -0.058161f, 0.242078f, 0.475279f, 0.581052f, 0.547396f, 0.398952f, 0.173288f, -0.082456f, -0.309870f, -0.456050f, -0.493427f, -0.421065f, -0.258435f, -0.045804f, 0.160944f, 0.310519f, 0.375222f, 0.353858f, 0.264124f, 0.133068f, -0.011592f, -0.144525f, -0.241005f, -0.281276f, -0.260926f, -0.191571f, -0.090994f, 0.020279f, 0.116661f, 0.176292f, 0.194091f, 0.177389f, 0.132627f, 0.066960f, -0.004147f, -0.064907f, -0.109797f, -0.136697f, -0.139536f, -0.117862f, -0.081864f, -0.039087f, 0.010472f, 0.060857f, 0.099437f, 0.123178f, 0.135545f, 0.127536f, 0.086281f, 0.020181f, -0.050211f, -0.116826f, -0.168642f, -0.170590f, -0.104626f, -0.017451f, 0.025994f, 0.025448f} - }, - { - { 0.914782f, 0.650055f, 0.239576f, -0.181854f, -0.539073f, -0.787899f, -0.863032f, -0.709618f, -0.363410f, 0.045228f, 0.384901f, 0.599773f, 0.690085f, 0.654823f, 0.484709f, 0.199734f, -0.132928f, -0.424723f, -0.606004f, -0.647328f, -0.552997f, -0.344341f, -0.058161f, 0.242078f, 0.475279f, 0.581052f, 0.547396f, 0.398952f, 0.173288f, -0.082456f, -0.309870f, -0.456050f, -0.493427f, -0.421065f, -0.258435f, -0.045804f, 0.160944f, 0.310519f, 0.375222f, 0.353858f, 0.264124f, 0.133068f, -0.011592f, -0.144525f, -0.241005f, -0.281276f, -0.260926f, -0.191571f, -0.090994f, 0.020279f, 0.116661f, 0.176292f, 0.194091f, 0.177389f, 0.132627f, 0.066960f, -0.004147f, -0.064907f, -0.109797f, -0.136697f, -0.139536f, -0.117862f, -0.081864f, -0.039087f, 0.010472f, 0.060857f, 0.099437f, 0.123178f, 0.135545f, 0.127536f, 0.086281f, 0.020181f, -0.050211f, -0.116826f, -0.168642f, -0.170590f, -0.104626f, -0.017451f, 0.025994f, 0.025448f}, - { 1.235520f, 1.267745f, 1.311533f, 1.396643f, 1.562142f, 1.739490f, 1.797650f, 1.725448f, 1.645715f, 1.615047f, 1.544151f, 1.379627f, 1.231268f, 1.218112f, 1.292699f, 1.332906f, 1.328133f, 1.351971f, 1.406972f, 1.424922f, 1.397315f, 1.389969f, 1.427081f, 1.452470f, 1.417648f, 1.341339f, 1.270667f, 1.231859f, 1.225126f, 1.232539f, 1.230373f, 1.218536f, 1.230471f, 1.294017f, 1.394390f, 1.492369f, 1.564549f, 1.611356f, 1.640653f, 1.658539f, 1.668696f, 1.673718f, 1.680425f, 1.699615f, 1.733804f, 1.773278f, 1.810830f, 1.848659f, 1.885086f, 1.909496f, 1.915897f, 1.906449f, 1.879898f, 1.833243f, 1.773732f, 1.712413f, 1.650523f, 1.587448f, 1.531042f, 1.483778f, 1.433378f, 1.371553f, 1.302603f, 1.222332f, 1.114931f, 0.981061f, 0.839087f, 0.693154f, 0.535784f, 0.381622f, 0.254990f, 0.148531f, 0.043270f, -0.043620f, -0.091644f, -0.138174f, -0.231231f, -0.338131f, -0.386098f, -0.378792f} - }, - { - { 1.300965f, 1.294750f, 1.282817f, 1.255178f, 1.204577f, 1.137923f, 1.059580f, 0.981805f, 0.966983f, 1.092308f, 1.337634f, 1.575073f, 1.703047f, 1.722782f, 1.666581f, 1.546456f, 1.403671f, 1.311746f, 1.292222f, 1.306949f, 1.348731f, 1.449654f, 1.589237f, 1.688195f, 1.707228f, 1.673858f, 1.615172f, 1.543456f, 1.497797f, 1.520390f, 1.597903f, 1.686893f, 1.778063f, 1.882324f, 1.981161f, 2.041271f, 2.055297f, 2.034562f, 1.988601f, 1.932387f, 1.883493f, 1.841147f, 1.794770f, 1.748405f, 1.709284f, 1.669343f, 1.625551f, 1.593305f, 1.576244f, 1.555177f, 1.523771f, 1.496823f, 1.475255f, 1.446578f, 1.418163f, 1.403084f, 1.385586f, 1.347706f, 1.304713f, 1.269256f, 1.221100f, 1.154593f, 1.100549f, 1.063945f, 1.009439f, 0.935611f, 0.877621f, 0.821786f, 0.720980f, 0.594304f, 0.491179f, 0.378481f, 0.204744f, 0.026392f, -0.103932f, -0.295951f, -0.642665f, -0.968133f, -1.033163f, -0.924785f}, - { 1.056881f, 0.977664f, 0.829309f, 0.609050f, 0.335194f, 0.103305f, 0.039580f, 0.170337f, 0.375031f, 0.482951f, 0.394424f, 0.127225f, -0.200288f, -0.435291f, -0.499884f, -0.452044f, -0.409762f, -0.428220f, -0.490681f, -0.586139f, -0.717818f, -0.842320f, -0.883008f, -0.823590f, -0.730446f, -0.667660f, -0.639081f, -0.620834f, -0.597634f, -0.552777f, -0.466079f, -0.338552f, -0.193325f, -0.050363f, 0.077475f, 0.174494f, 0.237020f, 0.288121f, 0.352285f, 0.426567f, 0.494946f, 0.552824f, 0.599792f, 0.629446f, 0.642872f, 0.651801f, 0.657595f, 0.648892f, 0.624781f, 0.595680f, 0.560679f, 0.509928f, 0.445668f, 0.375032f, 0.291050f, 0.186825f, 0.074986f, -0.031392f, -0.138355f, -0.249537f, -0.350061f, -0.432142f, -0.507157f, -0.576005f, -0.622512f, -0.647800f, -0.670394f, -0.686010f, -0.673194f, -0.637570f, -0.598466f, -0.542641f, -0.451741f, -0.353357f, -0.271891f, -0.162755f, 0.010957f, 0.173137f, 0.221085f, 0.187717f} - }, - { - { 1.056881f, 0.977664f, 0.829309f, 0.609050f, 0.335194f, 0.103305f, 0.039580f, 0.170337f, 0.375031f, 0.482951f, 0.394424f, 0.127225f, -0.200288f, -0.435291f, -0.499884f, -0.452044f, -0.409762f, -0.428220f, -0.490681f, -0.586139f, -0.717818f, -0.842320f, -0.883008f, -0.823590f, -0.730446f, -0.667660f, -0.639081f, -0.620834f, -0.597634f, -0.552777f, -0.466079f, -0.338552f, -0.193325f, -0.050363f, 0.077475f, 0.174494f, 0.237020f, 0.288121f, 0.352285f, 0.426567f, 0.494946f, 0.552824f, 0.599792f, 0.629446f, 0.642872f, 0.651801f, 0.657595f, 0.648892f, 0.624781f, 0.595680f, 0.560679f, 0.509928f, 0.445668f, 0.375032f, 0.291050f, 0.186825f, 0.074986f, -0.031392f, -0.138355f, -0.249537f, -0.350061f, -0.432142f, -0.507157f, -0.576005f, -0.622512f, -0.647800f, -0.670394f, -0.686010f, -0.673194f, -0.637570f, -0.598466f, -0.542641f, -0.451741f, -0.353357f, -0.271891f, -0.162755f, 0.010957f, 0.173137f, 0.221085f, 0.187717f}, - { 1.300965f, 1.294750f, 1.282817f, 1.255178f, 1.204577f, 1.137923f, 1.059580f, 0.981805f, 0.966983f, 1.092308f, 1.337634f, 1.575073f, 1.703047f, 1.722782f, 1.666581f, 1.546456f, 1.403671f, 1.311746f, 1.292222f, 1.306949f, 1.348731f, 1.449654f, 1.589237f, 1.688195f, 1.707228f, 1.673858f, 1.615172f, 1.543456f, 1.497797f, 1.520390f, 1.597903f, 1.686893f, 1.778063f, 1.882324f, 1.981161f, 2.041271f, 2.055297f, 2.034562f, 1.988601f, 1.932387f, 1.883493f, 1.841147f, 1.794770f, 1.748405f, 1.709284f, 1.669343f, 1.625551f, 1.593305f, 1.576244f, 1.555177f, 1.523771f, 1.496823f, 1.475255f, 1.446578f, 1.418163f, 1.403084f, 1.385586f, 1.347706f, 1.304713f, 1.269256f, 1.221100f, 1.154593f, 1.100549f, 1.063945f, 1.009439f, 0.935611f, 0.877621f, 0.821786f, 0.720980f, 0.594304f, 0.491179f, 0.378481f, 0.204744f, 0.026392f, -0.103932f, -0.295951f, -0.642665f, -0.968133f, -1.033163f, -0.924785f} - }, - { - { 1.199748f, 1.195187f, 1.219693f, 1.306113f, 1.425047f, 1.477111f, 1.397070f, 1.252223f, 1.172655f, 1.188882f, 1.217061f, 1.212048f, 1.238227f, 1.348679f, 1.484315f, 1.557633f, 1.567620f, 1.562073f, 1.542003f, 1.477405f, 1.379422f, 1.288860f, 1.216806f, 1.148467f, 1.083662f, 1.031921f, 0.988049f, 0.943225f, 0.900165f, 0.859424f, 0.815628f, 0.776796f, 0.758198f, 0.753004f, 0.739708f, 0.717133f, 0.701610f, 0.697315f, 0.699875f, 0.716105f, 0.750519f, 0.788979f, 0.821105f, 0.857164f, 0.902405f, 0.942513f, 0.970953f, 0.998437f, 1.023655f, 1.030364f, 1.020180f, 1.011394f, 1.006072f, 0.996138f, 0.992784f, 1.010311f, 1.036592f, 1.056629f, 1.080188f, 1.111608f, 1.127724f, 1.118163f, 1.103894f, 1.089439f, 1.050792f, 0.990760f, 0.941697f, 0.900735f, 0.836298f, 0.760105f, 0.706490f, 0.651720f, 0.554145f, 0.447475f, 0.372905f, 0.259179f, 0.022580f, -0.250587f, -0.394385f, -0.405028f}, - { 0.954653f, 0.811443f, 0.527050f, 0.156554f, -0.183229f, -0.390764f, -0.463838f, -0.489615f, -0.545649f, -0.618563f, -0.627603f, -0.522242f, -0.339179f, -0.156441f, -0.010199f, 0.122255f, 0.267483f, 0.411203f, 0.511742f, 0.538871f, 0.493820f, 0.403566f, 0.299556f, 0.194567f, 0.079866f, -0.051976f, -0.188907f, -0.309334f, -0.399390f, -0.451587f, -0.457014f, -0.410966f, -0.321563f, -0.205765f, -0.080962f, 0.037500f, 0.138072f, 0.215566f, 0.268025f, 0.292898f, 0.291211f, 0.270674f, 0.238281f, 0.194880f, 0.141481f, 0.083085f, 0.022016f, -0.043580f, -0.111370f, -0.174259f, -0.228801f, -0.273350f, -0.299289f, -0.296400f, -0.264810f, -0.210717f, -0.136124f, -0.044272f, 0.053064f, 0.144902f, 0.227652f, 0.293924f, 0.329277f, 0.328445f, 0.298807f, 0.243094f, 0.158591f, 0.055206f, -0.049168f, -0.149592f, -0.244281f, -0.312080f, -0.331894f, -0.311981f, -0.264235f, -0.173081f, -0.039856f, 0.070126f, 0.093737f, 0.064463f} - }, - { - { 0.954653f, 0.811443f, 0.527050f, 0.156554f, -0.183229f, -0.390764f, -0.463838f, -0.489615f, -0.545649f, -0.618563f, -0.627603f, -0.522242f, -0.339179f, -0.156441f, -0.010199f, 0.122255f, 0.267483f, 0.411203f, 0.511742f, 0.538871f, 0.493820f, 0.403566f, 0.299556f, 0.194567f, 0.079866f, -0.051976f, -0.188907f, -0.309334f, -0.399390f, -0.451587f, -0.457014f, -0.410966f, -0.321563f, -0.205765f, -0.080962f, 0.037500f, 0.138072f, 0.215566f, 0.268025f, 0.292898f, 0.291211f, 0.270674f, 0.238281f, 0.194880f, 0.141481f, 0.083085f, 0.022016f, -0.043580f, -0.111370f, -0.174259f, -0.228801f, -0.273350f, -0.299289f, -0.296400f, -0.264810f, -0.210717f, -0.136124f, -0.044272f, 0.053064f, 0.144902f, 0.227652f, 0.293924f, 0.329277f, 0.328445f, 0.298807f, 0.243094f, 0.158591f, 0.055206f, -0.049168f, -0.149592f, -0.244281f, -0.312080f, -0.331894f, -0.311981f, -0.264235f, -0.173081f, -0.039856f, 0.070126f, 0.093737f, 0.064463f}, - { 1.199748f, 1.195187f, 1.219693f, 1.306113f, 1.425047f, 1.477111f, 1.397070f, 1.252223f, 1.172655f, 1.188882f, 1.217061f, 1.212048f, 1.238227f, 1.348679f, 1.484315f, 1.557633f, 1.567620f, 1.562073f, 1.542003f, 1.477405f, 1.379422f, 1.288860f, 1.216806f, 1.148467f, 1.083662f, 1.031921f, 0.988049f, 0.943225f, 0.900165f, 0.859424f, 0.815628f, 0.776796f, 0.758198f, 0.753004f, 0.739708f, 0.717133f, 0.701610f, 0.697315f, 0.699875f, 0.716105f, 0.750519f, 0.788979f, 0.821105f, 0.857164f, 0.902405f, 0.942513f, 0.970953f, 0.998437f, 1.023655f, 1.030364f, 1.020180f, 1.011394f, 1.006072f, 0.996138f, 0.992784f, 1.010311f, 1.036592f, 1.056629f, 1.080188f, 1.111608f, 1.127724f, 1.118163f, 1.103894f, 1.089439f, 1.050792f, 0.990760f, 0.941697f, 0.900735f, 0.836298f, 0.760105f, 0.706490f, 0.651720f, 0.554145f, 0.447475f, 0.372905f, 0.259179f, 0.022580f, -0.250587f, -0.394385f, -0.405028f} - }, - { - { 1.095196f, 1.087659f, 1.109446f, 1.183526f, 1.277660f, 1.326248f, 1.295715f, 1.216113f, 1.140298f, 1.087599f, 1.047695f, 1.026918f, 1.054001f, 1.133020f, 1.223338f, 1.282899f, 1.305886f, 1.301427f, 1.264195f, 1.192277f, 1.112040f, 1.055091f, 1.021765f, 0.989986f, 0.948874f, 0.903167f, 0.855360f, 0.803610f, 0.750668f, 0.700093f, 0.649182f, 0.594756f, 0.538805f, 0.483071f, 0.427223f, 0.376166f, 0.339951f, 0.324096f, 0.327235f, 0.346493f, 0.377413f, 0.412489f, 0.447089f, 0.481805f, 0.514503f, 0.538815f, 0.554366f, 0.567855f, 0.581390f, 0.591629f, 0.600978f, 0.616082f, 0.635914f, 0.654604f, 0.672499f, 0.691101f, 0.703654f, 0.704072f, 0.696257f, 0.683064f, 0.659027f, 0.624315f, 0.589073f, 0.554838f, 0.511458f, 0.458475f, 0.405848f, 0.350815f, 0.282369f, 0.208212f, 0.145223f, 0.088601f, 0.027005f, -0.024496f, -0.052219f, -0.086724f, -0.160473f, -0.239945f, -0.266704f, -0.251269f}, - { 0.923781f, 0.848774f, 0.672610f, 0.407285f, 0.139533f, -0.031128f, -0.095513f, -0.144050f, -0.253242f, -0.392890f, -0.480646f, -0.501871f, -0.519927f, -0.573731f, -0.625609f, -0.624544f, -0.567395f, -0.473405f, -0.345515f, -0.190062f, -0.038979f, 0.081850f, 0.182290f, 0.280740f, 0.370828f, 0.437344f, 0.482403f, 0.514120f, 0.527356f, 0.512218f, 0.466630f, 0.391413f, 0.289373f, 0.174311f, 0.063977f, -0.037733f, -0.135747f, -0.224401f, -0.290520f, -0.330999f, -0.351174f, -0.353060f, -0.339776f, -0.321845f, -0.306033f, -0.288531f, -0.267741f, -0.249068f, -0.230297f, -0.198972f, -0.149214f, -0.084819f, -0.006186f, 0.086559f, 0.180387f, 0.259264f, 0.322166f, 0.373929f, 0.409115f, 0.422408f, 0.419773f, 0.402555f, 0.359218f, 0.287224f, 0.200865f, 0.107257f, 0.002147f, -0.104650f, -0.193281f, -0.265652f, -0.335513f, -0.391102f, -0.411622f, -0.408716f, -0.397569f, -0.345739f, -0.220230f, -0.069285f, 0.021400f, 0.041382f} - }, - { - { 0.923781f, 0.848774f, 0.672610f, 0.407285f, 0.139533f, -0.031128f, -0.095513f, -0.144050f, -0.253242f, -0.392890f, -0.480646f, -0.501871f, -0.519927f, -0.573731f, -0.625609f, -0.624544f, -0.567395f, -0.473405f, -0.345515f, -0.190062f, -0.038979f, 0.081850f, 0.182290f, 0.280740f, 0.370828f, 0.437344f, 0.482403f, 0.514120f, 0.527356f, 0.512218f, 0.466630f, 0.391413f, 0.289373f, 0.174311f, 0.063977f, -0.037733f, -0.135747f, -0.224401f, -0.290520f, -0.330999f, -0.351174f, -0.353060f, -0.339776f, -0.321845f, -0.306033f, -0.288531f, -0.267741f, -0.249068f, -0.230297f, -0.198972f, -0.149214f, -0.084819f, -0.006186f, 0.086559f, 0.180387f, 0.259264f, 0.322166f, 0.373929f, 0.409115f, 0.422408f, 0.419773f, 0.402555f, 0.359218f, 0.287224f, 0.200865f, 0.107257f, 0.002147f, -0.104650f, -0.193281f, -0.265652f, -0.335513f, -0.391102f, -0.411622f, -0.408716f, -0.397569f, -0.345739f, -0.220230f, -0.069285f, 0.021400f, 0.041382f}, - { 1.095196f, 1.087659f, 1.109446f, 1.183526f, 1.277660f, 1.326248f, 1.295715f, 1.216113f, 1.140298f, 1.087599f, 1.047695f, 1.026918f, 1.054001f, 1.133020f, 1.223338f, 1.282899f, 1.305886f, 1.301427f, 1.264195f, 1.192277f, 1.112040f, 1.055091f, 1.021765f, 0.989986f, 0.948874f, 0.903167f, 0.855360f, 0.803610f, 0.750668f, 0.700093f, 0.649182f, 0.594756f, 0.538805f, 0.483071f, 0.427223f, 0.376166f, 0.339951f, 0.324096f, 0.327235f, 0.346493f, 0.377413f, 0.412489f, 0.447089f, 0.481805f, 0.514503f, 0.538815f, 0.554366f, 0.567855f, 0.581390f, 0.591629f, 0.600978f, 0.616082f, 0.635914f, 0.654604f, 0.672499f, 0.691101f, 0.703654f, 0.704072f, 0.696257f, 0.683064f, 0.659027f, 0.624315f, 0.589073f, 0.554838f, 0.511458f, 0.458475f, 0.405848f, 0.350815f, 0.282369f, 0.208212f, 0.145223f, 0.088601f, 0.027005f, -0.024496f, -0.052219f, -0.086724f, -0.160473f, -0.239945f, -0.266704f, -0.251269f} - } -}; -const float CRendBin_Combined_HRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][80]={ - { - { 0.022378f, 0.066864f, 0.100220f, 0.093715f, 0.035070f, -0.024338f, -0.012768f, 0.042367f, 0.023721f, -0.077890f, -0.074274f, 0.183759f, 0.553809f, 0.747512f, 0.694343f, 0.587820f, 0.573964f, 0.578407f, 0.483568f, 0.304887f, 0.110523f, -0.095311f, -0.308826f, -0.445379f, -0.423336f, -0.274568f, -0.099040f, 0.048443f, 0.174236f, 0.289760f, 0.386501f, 0.441979f, 0.423813f, 0.311166f, 0.126234f, -0.077587f, -0.262644f, -0.422706f, -0.561257f, -0.680234f, -0.781458f, -0.857623f, -0.893951f, -0.894126f, -0.886249f, -0.891524f, -0.909393f, -0.938889f, -0.984242f, -1.033780f, -1.065068f, -1.075220f, -1.078048f, -1.075622f, -1.062402f, -1.047450f, -1.042480f, -1.042105f, -1.042212f, -1.056085f, -1.088475f, -1.122510f, -1.152405f, -1.192513f, -1.237398f, -1.256660f, -1.241724f, -1.209120f, -1.154430f, -1.061585f, -0.953719f, -0.867433f, -0.789453f, -0.695255f, -0.622912f, -0.610275f, -0.589097f, -0.460324f, -0.251406f, -0.070859f}, - { -0.080681f, -0.311575f, -0.606702f, -0.791121f, -0.800787f, -0.759923f, -0.737510f, -0.645040f, -0.446445f, -0.278883f, -0.277043f, -0.421529f, -0.620997f, -0.801710f, -0.864807f, -0.708809f, -0.372056f, -0.033461f, 0.190558f, 0.342379f, 0.477503f, 0.555106f, 0.541666f, 0.506512f, 0.528602f, 0.592193f, 0.649163f, 0.709906f, 0.795888f, 0.861129f, 0.839487f, 0.735222f, 0.600129f, 0.443934f, 0.230326f, -0.041733f, -0.304398f, -0.483776f, -0.569025f, -0.604499f, -0.631290f, -0.656305f, -0.671663f, -0.677909f, -0.675805f, -0.652694f, -0.596100f, -0.512689f, -0.417832f, -0.314565f, -0.198891f, -0.077460f, 0.036945f, 0.140466f, 0.234222f, 0.313941f, 0.376985f, 0.429901f, 0.476606f, 0.509493f, 0.521856f, 0.516234f, 0.492881f, 0.446350f, 0.381165f, 0.313562f, 0.251474f, 0.190729f, 0.133710f, 0.090238f, 0.058310f, 0.027284f, -0.000482f, -0.017253f, -0.035696f, -0.074905f, -0.120974f, -0.134483f, -0.099419f, -0.035389f} - }, - { - { -0.080681f, -0.311575f, -0.606702f, -0.791121f, -0.800787f, -0.759923f, -0.737510f, -0.645040f, -0.446445f, -0.278883f, -0.277043f, -0.421529f, -0.620997f, -0.801710f, -0.864807f, -0.708809f, -0.372056f, -0.033461f, 0.190558f, 0.342379f, 0.477503f, 0.555106f, 0.541666f, 0.506512f, 0.528602f, 0.592193f, 0.649163f, 0.709906f, 0.795888f, 0.861129f, 0.839487f, 0.735222f, 0.600129f, 0.443934f, 0.230326f, -0.041733f, -0.304398f, -0.483776f, -0.569025f, -0.604499f, -0.631290f, -0.656305f, -0.671663f, -0.677909f, -0.675805f, -0.652694f, -0.596100f, -0.512689f, -0.417832f, -0.314565f, -0.198891f, -0.077460f, 0.036945f, 0.140466f, 0.234222f, 0.313941f, 0.376985f, 0.429901f, 0.476606f, 0.509493f, 0.521856f, 0.516234f, 0.492881f, 0.446350f, 0.381165f, 0.313562f, 0.251474f, 0.190729f, 0.133710f, 0.090238f, 0.058310f, 0.027284f, -0.000482f, -0.017253f, -0.035696f, -0.074905f, -0.120974f, -0.134483f, -0.099419f, -0.035389f}, - { 0.022378f, 0.066864f, 0.100220f, 0.093715f, 0.035070f, -0.024338f, -0.012768f, 0.042367f, 0.023721f, -0.077890f, -0.074274f, 0.183759f, 0.553809f, 0.747512f, 0.694343f, 0.587820f, 0.573964f, 0.578407f, 0.483568f, 0.304887f, 0.110523f, -0.095311f, -0.308826f, -0.445379f, -0.423336f, -0.274568f, -0.099040f, 0.048443f, 0.174236f, 0.289760f, 0.386501f, 0.441979f, 0.423813f, 0.311166f, 0.126234f, -0.077587f, -0.262644f, -0.422706f, -0.561257f, -0.680234f, -0.781458f, -0.857623f, -0.893951f, -0.894126f, -0.886249f, -0.891524f, -0.909393f, -0.938889f, -0.984242f, -1.033780f, -1.065068f, -1.075220f, -1.078048f, -1.075622f, -1.062402f, -1.047450f, -1.042480f, -1.042105f, -1.042212f, -1.056085f, -1.088475f, -1.122510f, -1.152405f, -1.192513f, -1.237398f, -1.256660f, -1.241724f, -1.209120f, -1.154430f, -1.061585f, -0.953719f, -0.867433f, -0.789453f, -0.695255f, -0.622912f, -0.610275f, -0.589097f, -0.460324f, -0.251406f, -0.070859f} - }, - { - { 0.021476f, 0.024861f, -0.068116f, -0.210706f, -0.241100f, -0.094748f, 0.026510f, -0.099482f, -0.330829f, -0.276985f, 0.158539f, 0.598292f, 0.664270f, 0.429569f, 0.248929f, 0.287073f, 0.390113f, 0.351295f, 0.140379f, -0.125369f, -0.320323f, -0.389331f, -0.350352f, -0.257811f, -0.155492f, -0.057513f, 0.029687f, 0.083907f, 0.074937f, -0.013414f, -0.172122f, -0.367613f, -0.553803f, -0.697739f, -0.798279f, -0.871482f, -0.917974f, -0.917107f, -0.857095f, -0.759630f, -0.667061f, -0.611822f, -0.603464f, -0.635057f, -0.689467f, -0.744489f, -0.786319f, -0.818993f, -0.851830f, -0.880879f, -0.893605f, -0.887722f, -0.872310f, -0.853424f, -0.831447f, -0.809294f, -0.790708f, -0.773489f, -0.753887f, -0.732134f, -0.706732f, -0.673217f, -0.634788f, -0.600942f, -0.570621f, -0.533372f, -0.490462f, -0.454214f, -0.424442f, -0.389736f, -0.352307f, -0.323871f, -0.299518f, -0.268423f, -0.245492f, -0.252120f, -0.267604f, -0.242741f, -0.162571f, -0.055414f}, - { 0.021476f, 0.024861f, -0.068116f, -0.210706f, -0.241100f, -0.094748f, 0.026510f, -0.099482f, -0.330829f, -0.276985f, 0.158539f, 0.598292f, 0.664270f, 0.429569f, 0.248929f, 0.287073f, 0.390113f, 0.351295f, 0.140379f, -0.125369f, -0.320323f, -0.389331f, -0.350352f, -0.257811f, -0.155492f, -0.057513f, 0.029687f, 0.083907f, 0.074937f, -0.013414f, -0.172122f, -0.367613f, -0.553803f, -0.697739f, -0.798279f, -0.871482f, -0.917974f, -0.917107f, -0.857095f, -0.759630f, -0.667061f, -0.611822f, -0.603464f, -0.635057f, -0.689467f, -0.744489f, -0.786319f, -0.818993f, -0.851830f, -0.880879f, -0.893605f, -0.887722f, -0.872310f, -0.853424f, -0.831447f, -0.809294f, -0.790708f, -0.773489f, -0.753887f, -0.732134f, -0.706732f, -0.673217f, -0.634788f, -0.600942f, -0.570621f, -0.533372f, -0.490462f, -0.454214f, -0.424442f, -0.389736f, -0.352307f, -0.323871f, -0.299518f, -0.268423f, -0.245492f, -0.252120f, -0.267604f, -0.242741f, -0.162571f, -0.055414f} - }, - { - { 0.012550f, 0.067634f, 0.153766f, 0.208915f, 0.212582f, 0.181638f, 0.088456f, -0.087931f, -0.259740f, -0.322157f, -0.322103f, -0.389409f, -0.523465f, -0.602542f, -0.590922f, -0.578743f, -0.613891f, -0.643676f, -0.637605f, -0.633153f, -0.638458f, -0.606573f, -0.528838f, -0.456632f, -0.416245f, -0.387548f, -0.371313f, -0.393834f, -0.438762f, -0.449766f, -0.408723f, -0.349918f, -0.295796f, -0.234874f, -0.162960f, -0.095890f, -0.039645f, 0.012676f, 0.055074f, 0.071089f, 0.058963f, 0.031594f, -0.001372f, -0.033590f, -0.054377f, -0.056813f, -0.045737f, -0.029510f, -0.013991f, -0.008625f, -0.025610f, -0.068996f, -0.133912f, -0.214970f, -0.305196f, -0.391408f, -0.462418f, -0.517985f, -0.561601f, -0.591744f, -0.607334f, -0.612344f, -0.608226f, -0.591190f, -0.561003f, -0.522128f, -0.475155f, -0.418857f, -0.358993f, -0.302348f, -0.247114f, -0.192269f, -0.145964f, -0.109859f, -0.073493f, -0.044166f, -0.054356f, -0.104447f, -0.126755f, -0.059336f}, - { -0.170186f, -0.479342f, -0.686815f, -0.744803f, -0.686817f, -0.593855f, -0.492851f, -0.349481f, -0.167107f, -0.016808f, 0.057296f, 0.094634f, 0.145504f, 0.203344f, 0.251038f, 0.317878f, 0.433639f, 0.558726f, 0.610245f, 0.542010f, 0.369670f, 0.140805f, -0.089577f, -0.274767f, -0.397554f, -0.467654f, -0.489404f, -0.453378f, -0.367597f, -0.268088f, -0.183887f, -0.114096f, -0.048744f, 0.012366f, 0.071213f, 0.138060f, 0.214392f, 0.284810f, 0.331220f, 0.342296f, 0.310739f, 0.237599f, 0.139351f, 0.038916f, -0.047914f, -0.110918f, -0.141407f, -0.140257f, -0.121022f, -0.097260f, -0.074818f, -0.058184f, -0.051302f, -0.050167f, -0.047162f, -0.042256f, -0.038820f, -0.033860f, -0.024785f, -0.017581f, -0.015893f, -0.012525f, -0.002230f, 0.011304f, 0.029908f, 0.063841f, 0.112146f, 0.160147f, 0.200633f, 0.233829f, 0.246965f, 0.224183f, 0.174767f, 0.118281f, 0.049361f, -0.041130f, -0.119607f, -0.135637f, -0.090349f, -0.028741f} - }, - { - { -0.170186f, -0.479342f, -0.686815f, -0.744803f, -0.686817f, -0.593855f, -0.492851f, -0.349481f, -0.167107f, -0.016808f, 0.057296f, 0.094634f, 0.145504f, 0.203344f, 0.251038f, 0.317878f, 0.433639f, 0.558726f, 0.610245f, 0.542010f, 0.369670f, 0.140805f, -0.089577f, -0.274767f, -0.397554f, -0.467654f, -0.489404f, -0.453378f, -0.367597f, -0.268088f, -0.183887f, -0.114096f, -0.048744f, 0.012366f, 0.071213f, 0.138060f, 0.214392f, 0.284810f, 0.331220f, 0.342296f, 0.310739f, 0.237599f, 0.139351f, 0.038916f, -0.047914f, -0.110918f, -0.141407f, -0.140257f, -0.121022f, -0.097260f, -0.074818f, -0.058184f, -0.051302f, -0.050167f, -0.047162f, -0.042256f, -0.038820f, -0.033860f, -0.024785f, -0.017581f, -0.015893f, -0.012525f, -0.002230f, 0.011304f, 0.029908f, 0.063841f, 0.112146f, 0.160147f, 0.200633f, 0.233829f, 0.246965f, 0.224183f, 0.174767f, 0.118281f, 0.049361f, -0.041130f, -0.119607f, -0.135637f, -0.090349f, -0.028741f}, - { 0.012550f, 0.067634f, 0.153766f, 0.208915f, 0.212582f, 0.181638f, 0.088456f, -0.087931f, -0.259740f, -0.322157f, -0.322103f, -0.389409f, -0.523465f, -0.602542f, -0.590922f, -0.578743f, -0.613891f, -0.643676f, -0.637605f, -0.633153f, -0.638458f, -0.606573f, -0.528838f, -0.456632f, -0.416245f, -0.387548f, -0.371313f, -0.393834f, -0.438762f, -0.449766f, -0.408723f, -0.349918f, -0.295796f, -0.234874f, -0.162960f, -0.095890f, -0.039645f, 0.012676f, 0.055074f, 0.071089f, 0.058963f, 0.031594f, -0.001372f, -0.033590f, -0.054377f, -0.056813f, -0.045737f, -0.029510f, -0.013991f, -0.008625f, -0.025610f, -0.068996f, -0.133912f, -0.214970f, -0.305196f, -0.391408f, -0.462418f, -0.517985f, -0.561601f, -0.591744f, -0.607334f, -0.612344f, -0.608226f, -0.591190f, -0.561003f, -0.522128f, -0.475155f, -0.418857f, -0.358993f, -0.302348f, -0.247114f, -0.192269f, -0.145964f, -0.109859f, -0.073493f, -0.044166f, -0.054356f, -0.104447f, -0.126755f, -0.059336f} - }, - { - { 0.015207f, 0.082976f, 0.199626f, 0.282859f, 0.263873f, 0.164643f, 0.039240f, -0.101852f, -0.255135f, -0.362796f, -0.370418f, -0.325378f, -0.329716f, -0.393214f, -0.421530f, -0.368644f, -0.309548f, -0.318855f, -0.359634f, -0.355814f, -0.310990f, -0.281959f, -0.277523f, -0.258612f, -0.216166f, -0.181301f, -0.165545f, -0.145397f, -0.106504f, -0.062660f, -0.029709f, -0.010119f, -0.001929f, 0.000359f, 0.010822f, 0.040007f, 0.081478f, 0.121574f, 0.154115f, 0.176543f, 0.183358f, 0.173258f, 0.152571f, 0.124730f, 0.086728f, 0.040116f, -0.006130f, -0.047172f, -0.086178f, -0.125612f, -0.165320f, -0.208844f, -0.261164f, -0.321029f, -0.383783f, -0.448219f, -0.513294f, -0.573993f, -0.627582f, -0.676780f, -0.721051f, -0.754143f, -0.775079f, -0.790142f, -0.799884f, -0.797462f, -0.782973f, -0.763866f, -0.738491f, -0.696980f, -0.640957f, -0.582720f, -0.523012f, -0.453255f, -0.384196f, -0.344834f, -0.339145f, -0.323832f, -0.245458f, -0.092605f}, - { -0.226452f, -0.610474f, -0.819401f, -0.827692f, -0.686438f, -0.457267f, -0.161985f, 0.180520f, 0.492244f, 0.662493f, 0.643987f, 0.491123f, 0.296483f, 0.114481f, -0.047643f, -0.190865f, -0.298744f, -0.349852f, -0.344425f, -0.305636f, -0.249293f, -0.165753f, -0.046077f, 0.086344f, 0.191530f, 0.252611f, 0.278443f, 0.273750f, 0.231193f, 0.152001f, 0.053787f, -0.044048f, -0.129347f, -0.193281f, -0.229191f, -0.234673f, -0.209049f, -0.153181f, -0.075871f, 0.005780f, 0.076238f, 0.127944f, 0.159180f, 0.171718f, 0.168690f, 0.149525f, 0.110173f, 0.051594f, -0.017343f, -0.086655f, -0.147164f, -0.186425f, -0.193841f, -0.170433f, -0.125073f, -0.065012f, 0.000827f, 0.057616f, 0.095796f, 0.118697f, 0.130362f, 0.127750f, 0.111905f, 0.090197f, 0.060794f, 0.013835f, -0.047969f, -0.110704f, -0.169346f, -0.220565f, -0.242402f, -0.213355f, -0.142698f, -0.050054f, 0.062130f, 0.172554f, 0.213346f, 0.146844f, 0.042880f, -0.001215f} - }, - { - { -0.226452f, -0.610474f, -0.819401f, -0.827692f, -0.686438f, -0.457267f, -0.161985f, 0.180520f, 0.492244f, 0.662493f, 0.643987f, 0.491123f, 0.296483f, 0.114481f, -0.047643f, -0.190865f, -0.298744f, -0.349852f, -0.344425f, -0.305636f, -0.249293f, -0.165753f, -0.046077f, 0.086344f, 0.191530f, 0.252611f, 0.278443f, 0.273750f, 0.231193f, 0.152001f, 0.053787f, -0.044048f, -0.129347f, -0.193281f, -0.229191f, -0.234673f, -0.209049f, -0.153181f, -0.075871f, 0.005780f, 0.076238f, 0.127944f, 0.159180f, 0.171718f, 0.168690f, 0.149525f, 0.110173f, 0.051594f, -0.017343f, -0.086655f, -0.147164f, -0.186425f, -0.193841f, -0.170433f, -0.125073f, -0.065012f, 0.000827f, 0.057616f, 0.095796f, 0.118697f, 0.130362f, 0.127750f, 0.111905f, 0.090197f, 0.060794f, 0.013835f, -0.047969f, -0.110704f, -0.169346f, -0.220565f, -0.242402f, -0.213355f, -0.142698f, -0.050054f, 0.062130f, 0.172554f, 0.213346f, 0.146844f, 0.042880f, -0.001215f}, - { 0.015207f, 0.082976f, 0.199626f, 0.282859f, 0.263873f, 0.164643f, 0.039240f, -0.101852f, -0.255135f, -0.362796f, -0.370418f, -0.325378f, -0.329716f, -0.393214f, -0.421530f, -0.368644f, -0.309548f, -0.318855f, -0.359634f, -0.355814f, -0.310990f, -0.281959f, -0.277523f, -0.258612f, -0.216166f, -0.181301f, -0.165545f, -0.145397f, -0.106504f, -0.062660f, -0.029709f, -0.010119f, -0.001929f, 0.000359f, 0.010822f, 0.040007f, 0.081478f, 0.121574f, 0.154115f, 0.176543f, 0.183358f, 0.173258f, 0.152571f, 0.124730f, 0.086728f, 0.040116f, -0.006130f, -0.047172f, -0.086178f, -0.125612f, -0.165320f, -0.208844f, -0.261164f, -0.321029f, -0.383783f, -0.448219f, -0.513294f, -0.573993f, -0.627582f, -0.676780f, -0.721051f, -0.754143f, -0.775079f, -0.790142f, -0.799884f, -0.797462f, -0.782973f, -0.763866f, -0.738491f, -0.696980f, -0.640957f, -0.582720f, -0.523012f, -0.453255f, -0.384196f, -0.344834f, -0.339145f, -0.323832f, -0.245458f, -0.092605f} - }, - { - { 0.043874f, 0.118615f, 0.187170f, 0.267150f, 0.298762f, 0.195948f, -0.001786f, -0.150558f, -0.201169f, -0.249208f, -0.342968f, -0.379815f, -0.276823f, -0.123637f, -0.055321f, -0.064144f, -0.055372f, -0.019931f, -0.024681f, -0.071956f, -0.093125f, -0.072032f, -0.070681f, -0.124387f, -0.190477f, -0.213583f, -0.185140f, -0.129878f, -0.075285f, -0.037892f, -0.009897f, 0.037383f, 0.115172f, 0.192625f, 0.228584f, 0.214650f, 0.172116f, 0.122202f, 0.074293f, 0.031381f, -0.005454f, -0.033813f, -0.050480f, -0.060008f, -0.075967f, -0.106394f, -0.147540f, -0.197695f, -0.263287f, -0.345414f, -0.435440f, -0.527778f, -0.621378f, -0.708615f, -0.779992f, -0.837472f, -0.887412f, -0.928280f, -0.960992f, -0.998110f, -1.046834f, -1.099343f, -1.152347f, -1.213052f, -1.274952f, -1.316249f, -1.330774f, -1.328349f, -1.302567f, -1.238211f, -1.148431f, -1.058310f, -0.960029f, -0.838091f, -0.721675f, -0.643318f, -0.563976f, -0.420296f, -0.230992f, -0.067404f}, - { -0.250425f, -0.660993f, -0.861916f, -0.847354f, -0.663762f, -0.342769f, 0.075917f, 0.488389f, 0.753654f, 0.794167f, 0.643546f, 0.387442f, 0.087205f, -0.223353f, -0.496873f, -0.664962f, -0.675562f, -0.527061f, -0.266948f, 0.036108f, 0.319252f, 0.531415f, 0.626600f, 0.573077f, 0.380686f, 0.108230f, -0.168101f, -0.389333f, -0.517617f, -0.528794f, -0.421069f, -0.224730f, 0.009319f, 0.228421f, 0.385471f, 0.444687f, 0.395852f, 0.261516f, 0.084932f, -0.088913f, -0.225266f, -0.304256f, -0.319554f, -0.273259f, -0.175564f, -0.049060f, 0.075661f, 0.173276f, 0.228789f, 0.233471f, 0.188067f, 0.109495f, 0.022104f, -0.058067f, -0.122426f, -0.160617f, -0.165769f, -0.143482f, -0.103837f, -0.051510f, 0.007014f, 0.058136f, 0.093287f, 0.114398f, 0.120649f, 0.105501f, 0.071425f, 0.028778f, -0.021679f, -0.082945f, -0.140051f, -0.169785f, -0.167405f, -0.136951f, -0.070323f, 0.025342f, 0.097572f, 0.097658f, 0.048524f, 0.010072f} - }, - { - { -0.250425f, -0.660993f, -0.861916f, -0.847354f, -0.663762f, -0.342769f, 0.075917f, 0.488389f, 0.753654f, 0.794167f, 0.643546f, 0.387442f, 0.087205f, -0.223353f, -0.496873f, -0.664962f, -0.675562f, -0.527061f, -0.266948f, 0.036108f, 0.319252f, 0.531415f, 0.626600f, 0.573077f, 0.380686f, 0.108230f, -0.168101f, -0.389333f, -0.517617f, -0.528794f, -0.421069f, -0.224730f, 0.009319f, 0.228421f, 0.385471f, 0.444687f, 0.395852f, 0.261516f, 0.084932f, -0.088913f, -0.225266f, -0.304256f, -0.319554f, -0.273259f, -0.175564f, -0.049060f, 0.075661f, 0.173276f, 0.228789f, 0.233471f, 0.188067f, 0.109495f, 0.022104f, -0.058067f, -0.122426f, -0.160617f, -0.165769f, -0.143482f, -0.103837f, -0.051510f, 0.007014f, 0.058136f, 0.093287f, 0.114398f, 0.120649f, 0.105501f, 0.071425f, 0.028778f, -0.021679f, -0.082945f, -0.140051f, -0.169785f, -0.167405f, -0.136951f, -0.070323f, 0.025342f, 0.097572f, 0.097658f, 0.048524f, 0.010072f}, - { 0.043874f, 0.118615f, 0.187170f, 0.267150f, 0.298762f, 0.195948f, -0.001786f, -0.150558f, -0.201169f, -0.249208f, -0.342968f, -0.379815f, -0.276823f, -0.123637f, -0.055321f, -0.064144f, -0.055372f, -0.019931f, -0.024681f, -0.071956f, -0.093125f, -0.072032f, -0.070681f, -0.124387f, -0.190477f, -0.213583f, -0.185140f, -0.129878f, -0.075285f, -0.037892f, -0.009897f, 0.037383f, 0.115172f, 0.192625f, 0.228584f, 0.214650f, 0.172116f, 0.122202f, 0.074293f, 0.031381f, -0.005454f, -0.033813f, -0.050480f, -0.060008f, -0.075967f, -0.106394f, -0.147540f, -0.197695f, -0.263287f, -0.345414f, -0.435440f, -0.527778f, -0.621378f, -0.708615f, -0.779992f, -0.837472f, -0.887412f, -0.928280f, -0.960992f, -0.998110f, -1.046834f, -1.099343f, -1.152347f, -1.213052f, -1.274952f, -1.316249f, -1.330774f, -1.328349f, -1.302567f, -1.238211f, -1.148431f, -1.058310f, -0.960029f, -0.838091f, -0.721675f, -0.643318f, -0.563976f, -0.420296f, -0.230992f, -0.067404f} - }, - { - { -0.008249f, -0.023875f, -0.041979f, -0.063309f, -0.073640f, -0.059262f, -0.011284f, 0.097582f, 0.285477f, 0.486324f, 0.572624f, 0.491726f, 0.316227f, 0.137033f, -0.012156f, -0.105624f, -0.104202f, -0.021615f, 0.074402f, 0.154222f, 0.237747f, 0.305961f, 0.296964f, 0.204183f, 0.092769f, 0.012136f, -0.031471f, -0.026266f, 0.038678f, 0.126072f, 0.180148f, 0.192426f, 0.183756f, 0.147374f, 0.063045f, -0.057919f, -0.184667f, -0.299635f, -0.393907f, -0.460136f, -0.506533f, -0.549402f, -0.588487f, -0.616178f, -0.639266f, -0.663562f, -0.678297f, -0.681604f, -0.692468f, -0.716955f, -0.738071f, -0.751671f, -0.771237f, -0.794008f, -0.808030f, -0.825704f, -0.862898f, -0.903459f, -0.930585f, -0.960504f, -1.001446f, -1.027630f, -1.034152f, -1.055212f, -1.095329f, -1.119803f, -1.134174f, -1.178290f, -1.233939f, -1.250091f, -1.249470f, -1.280087f, -1.296222f, -1.243131f, -1.194568f, -1.207898f, -1.128089f, -0.791051f, -0.344783f, -0.068924f}, - { -0.129176f, -0.372355f, -0.580936f, -0.731519f, -0.765299f, -0.638093f, -0.415763f, -0.262408f, -0.304775f, -0.530180f, -0.811605f, -0.996409f, -0.988773f, -0.810534f, -0.593000f, -0.465223f, -0.444154f, -0.461572f, -0.469589f, -0.460057f, -0.404974f, -0.264243f, -0.062429f, 0.112893f, 0.209151f, 0.254875f, 0.300256f, 0.363823f, 0.447014f, 0.550411f, 0.657817f, 0.738504f, 0.775995f, 0.773071f, 0.734806f, 0.672431f, 0.612396f, 0.573088f, 0.541817f, 0.496000f, 0.432424f, 0.358322f, 0.274224f, 0.183255f, 0.096563f, 0.015492f, -0.070928f, -0.163303f, -0.249973f, -0.330065f, -0.412884f, -0.495910f, -0.569287f, -0.635706f, -0.699812f, -0.749341f, -0.772273f, -0.776809f, -0.771105f, -0.745172f, -0.694274f, -0.633019f, -0.567658f, -0.486467f, -0.391507f, -0.301919f, -0.216594f, -0.116973f, -0.009649f, 0.082575f, 0.165971f, 0.256392f, 0.331306f, 0.367070f, 0.395334f, 0.440161f, 0.436284f, 0.315312f, 0.139811f, 0.028354f} - }, - { - { -0.129176f, -0.372355f, -0.580936f, -0.731519f, -0.765299f, -0.638093f, -0.415763f, -0.262408f, -0.304775f, -0.530180f, -0.811605f, -0.996409f, -0.988773f, -0.810534f, -0.593000f, -0.465223f, -0.444154f, -0.461572f, -0.469589f, -0.460057f, -0.404974f, -0.264243f, -0.062429f, 0.112893f, 0.209151f, 0.254875f, 0.300256f, 0.363823f, 0.447014f, 0.550411f, 0.657817f, 0.738504f, 0.775995f, 0.773071f, 0.734806f, 0.672431f, 0.612396f, 0.573088f, 0.541817f, 0.496000f, 0.432424f, 0.358322f, 0.274224f, 0.183255f, 0.096563f, 0.015492f, -0.070928f, -0.163303f, -0.249973f, -0.330065f, -0.412884f, -0.495910f, -0.569287f, -0.635706f, -0.699812f, -0.749341f, -0.772273f, -0.776809f, -0.771105f, -0.745172f, -0.694274f, -0.633019f, -0.567658f, -0.486467f, -0.391507f, -0.301919f, -0.216594f, -0.116973f, -0.009649f, 0.082575f, 0.165971f, 0.256392f, 0.331306f, 0.367070f, 0.395334f, 0.440161f, 0.436284f, 0.315312f, 0.139811f, 0.028354f}, - { -0.008249f, -0.023875f, -0.041979f, -0.063309f, -0.073640f, -0.059262f, -0.011284f, 0.097582f, 0.285477f, 0.486324f, 0.572624f, 0.491726f, 0.316227f, 0.137033f, -0.012156f, -0.105624f, -0.104202f, -0.021615f, 0.074402f, 0.154222f, 0.237747f, 0.305961f, 0.296964f, 0.204183f, 0.092769f, 0.012136f, -0.031471f, -0.026266f, 0.038678f, 0.126072f, 0.180148f, 0.192426f, 0.183756f, 0.147374f, 0.063045f, -0.057919f, -0.184667f, -0.299635f, -0.393907f, -0.460136f, -0.506533f, -0.549402f, -0.588487f, -0.616178f, -0.639266f, -0.663562f, -0.678297f, -0.681604f, -0.692468f, -0.716955f, -0.738071f, -0.751671f, -0.771237f, -0.794008f, -0.808030f, -0.825704f, -0.862898f, -0.903459f, -0.930585f, -0.960504f, -1.001446f, -1.027630f, -1.034152f, -1.055212f, -1.095329f, -1.119803f, -1.134174f, -1.178290f, -1.233939f, -1.250091f, -1.249470f, -1.280087f, -1.296222f, -1.243131f, -1.194568f, -1.207898f, -1.128089f, -0.791051f, -0.344783f, -0.068924f} - }, - { - { 0.008075f, 0.038401f, 0.092119f, 0.128962f, 0.079637f, -0.065053f, -0.204165f, -0.224635f, -0.140768f, -0.066458f, -0.050504f, -0.028394f, 0.040936f, 0.088066f, 0.037282f, -0.081872f, -0.194521f, -0.289072f, -0.394663f, -0.499173f, -0.562874f, -0.584190f, -0.592102f, -0.595436f, -0.585667f, -0.568122f, -0.553640f, -0.538921f, -0.519114f, -0.497646f, -0.470495f, -0.428155f, -0.379841f, -0.345508f, -0.322485f, -0.290690f, -0.246286f, -0.199763f, -0.151541f, -0.099834f, -0.057672f, -0.034172f, -0.017802f, -0.000878f, 0.004292f, -0.008040f, -0.024761f, -0.042033f, -0.071452f, -0.109073f, -0.134965f, -0.146883f, -0.157322f, -0.162505f, -0.153258f, -0.144070f, -0.152591f, -0.170264f, -0.188683f, -0.224375f, -0.283614f, -0.342228f, -0.390085f, -0.447088f, -0.512027f, -0.555207f, -0.578613f, -0.614251f, -0.655544f, -0.670096f, -0.675523f, -0.709585f, -0.743735f, -0.735534f, -0.731747f, -0.782838f, -0.795910f, -0.638017f, -0.353740f, -0.100737f}, - { -0.185046f, -0.533405f, -0.796105f, -0.894228f, -0.804452f, -0.603356f, -0.412000f, -0.290027f, -0.194076f, -0.045276f, 0.170549f, 0.381975f, 0.509347f, 0.543373f, 0.533437f, 0.514324f, 0.470452f, 0.370026f, 0.210592f, 0.024650f, -0.144992f, -0.270937f, -0.353268f, -0.409676f, -0.449497f, -0.461092f, -0.428614f, -0.351647f, -0.241101f, -0.106882f, 0.039551f, 0.178574f, 0.289123f, 0.359025f, 0.385395f, 0.371418f, 0.325610f, 0.258144f, 0.176512f, 0.088334f, 0.004181f, -0.068701f, -0.130850f, -0.183510f, -0.223524f, -0.249431f, -0.263934f, -0.266307f, -0.251421f, -0.218401f, -0.170386f, -0.106369f, -0.025129f, 0.064373f, 0.148277f, 0.219795f, 0.275208f, 0.305623f, 0.304678f, 0.275767f, 0.221954f, 0.141085f, 0.039338f, -0.065853f, -0.163340f, -0.251323f, -0.320332f, -0.355470f, -0.356285f, -0.330135f, -0.270928f, -0.173746f, -0.060564f, 0.042406f, 0.135600f, 0.213726f, 0.231029f, 0.159392f, 0.057068f, 0.005821f} - }, - { - { -0.185046f, -0.533405f, -0.796105f, -0.894228f, -0.804452f, -0.603356f, -0.412000f, -0.290027f, -0.194076f, -0.045276f, 0.170549f, 0.381975f, 0.509347f, 0.543373f, 0.533437f, 0.514324f, 0.470452f, 0.370026f, 0.210592f, 0.024650f, -0.144992f, -0.270937f, -0.353268f, -0.409676f, -0.449497f, -0.461092f, -0.428614f, -0.351647f, -0.241101f, -0.106882f, 0.039551f, 0.178574f, 0.289123f, 0.359025f, 0.385395f, 0.371418f, 0.325610f, 0.258144f, 0.176512f, 0.088334f, 0.004181f, -0.068701f, -0.130850f, -0.183510f, -0.223524f, -0.249431f, -0.263934f, -0.266307f, -0.251421f, -0.218401f, -0.170386f, -0.106369f, -0.025129f, 0.064373f, 0.148277f, 0.219795f, 0.275208f, 0.305623f, 0.304678f, 0.275767f, 0.221954f, 0.141085f, 0.039338f, -0.065853f, -0.163340f, -0.251323f, -0.320332f, -0.355470f, -0.356285f, -0.330135f, -0.270928f, -0.173746f, -0.060564f, 0.042406f, 0.135600f, 0.213726f, 0.231029f, 0.159392f, 0.057068f, 0.005821f}, - { 0.008075f, 0.038401f, 0.092119f, 0.128962f, 0.079637f, -0.065053f, -0.204165f, -0.224635f, -0.140768f, -0.066458f, -0.050504f, -0.028394f, 0.040936f, 0.088066f, 0.037282f, -0.081872f, -0.194521f, -0.289072f, -0.394663f, -0.499173f, -0.562874f, -0.584190f, -0.592102f, -0.595436f, -0.585667f, -0.568122f, -0.553640f, -0.538921f, -0.519114f, -0.497646f, -0.470495f, -0.428155f, -0.379841f, -0.345508f, -0.322485f, -0.290690f, -0.246286f, -0.199763f, -0.151541f, -0.099834f, -0.057672f, -0.034172f, -0.017802f, -0.000878f, 0.004292f, -0.008040f, -0.024761f, -0.042033f, -0.071452f, -0.109073f, -0.134965f, -0.146883f, -0.157322f, -0.162505f, -0.153258f, -0.144070f, -0.152591f, -0.170264f, -0.188683f, -0.224375f, -0.283614f, -0.342228f, -0.390085f, -0.447088f, -0.512027f, -0.555207f, -0.578613f, -0.614251f, -0.655544f, -0.670096f, -0.675523f, -0.709585f, -0.743735f, -0.735534f, -0.731747f, -0.782838f, -0.795910f, -0.638017f, -0.353740f, -0.100737f} - }, - { - { 0.000904f, 0.019079f, 0.059553f, 0.080705f, 0.034196f, -0.076830f, -0.193142f, -0.258252f, -0.268806f, -0.254990f, -0.228184f, -0.177744f, -0.115561f, -0.086453f, -0.119832f, -0.198441f, -0.290706f, -0.386796f, -0.482507f, -0.555089f, -0.585391f, -0.588459f, -0.595614f, -0.616524f, -0.639482f, -0.657203f, -0.671485f, -0.681113f, -0.683039f, -0.679975f, -0.675099f, -0.665460f, -0.647607f, -0.621543f, -0.584847f, -0.532515f, -0.465996f, -0.394252f, -0.325482f, -0.264963f, -0.217691f, -0.185088f, -0.163233f, -0.150126f, -0.147912f, -0.154002f, -0.160060f, -0.163355f, -0.168022f, -0.173673f, -0.175655f, -0.176533f, -0.183744f, -0.197756f, -0.215649f, -0.241146f, -0.277541f, -0.318350f, -0.357489f, -0.397941f, -0.439603f, -0.473662f, -0.498885f, -0.525211f, -0.553450f, -0.573005f, -0.584023f, -0.595757f, -0.601812f, -0.587350f, -0.558307f, -0.529550f, -0.493088f, -0.438500f, -0.389008f, -0.365560f, -0.332967f, -0.244399f, -0.123587f, -0.032071f}, - { -0.132162f, -0.397236f, -0.634303f, -0.771385f, -0.762505f, -0.658311f, -0.571695f, -0.558140f, -0.559785f, -0.494070f, -0.367521f, -0.255768f, -0.188621f, -0.115450f, 0.010262f, 0.169458f, 0.319455f, 0.446157f, 0.546073f, 0.599271f, 0.595696f, 0.559582f, 0.517646f, 0.465704f, 0.389674f, 0.295832f, 0.197897f, 0.094666f, -0.019874f, -0.140220f, -0.255773f, -0.358086f, -0.435284f, -0.476549f, -0.485983f, -0.475938f, -0.447530f, -0.394402f, -0.321446f, -0.242452f, -0.164819f, -0.091592f, -0.029697f, 0.018115f, 0.059537f, 0.100122f, 0.136881f, 0.171477f, 0.213363f, 0.263443f, 0.310946f, 0.348805f, 0.374651f, 0.378869f, 0.352030f, 0.300800f, 0.237909f, 0.164126f, 0.077292f, -0.014164f, -0.104092f, -0.197998f, -0.293956f, -0.374701f, -0.431205f, -0.469564f, -0.486835f, -0.470926f, -0.428871f, -0.379532f, -0.318676f, -0.231739f, -0.133210f, -0.045037f, 0.047998f, 0.159994f, 0.240253f, 0.223460f, 0.130155f, 0.037254f} - }, - { - { -0.132162f, -0.397236f, -0.634303f, -0.771385f, -0.762505f, -0.658311f, -0.571695f, -0.558140f, -0.559785f, -0.494070f, -0.367521f, -0.255768f, -0.188621f, -0.115450f, 0.010262f, 0.169458f, 0.319455f, 0.446157f, 0.546073f, 0.599271f, 0.595696f, 0.559582f, 0.517646f, 0.465704f, 0.389674f, 0.295832f, 0.197897f, 0.094666f, -0.019874f, -0.140220f, -0.255773f, -0.358086f, -0.435284f, -0.476549f, -0.485983f, -0.475938f, -0.447530f, -0.394402f, -0.321446f, -0.242452f, -0.164819f, -0.091592f, -0.029697f, 0.018115f, 0.059537f, 0.100122f, 0.136881f, 0.171477f, 0.213363f, 0.263443f, 0.310946f, 0.348805f, 0.374651f, 0.378869f, 0.352030f, 0.300800f, 0.237909f, 0.164126f, 0.077292f, -0.014164f, -0.104092f, -0.197998f, -0.293956f, -0.374701f, -0.431205f, -0.469564f, -0.486835f, -0.470926f, -0.428871f, -0.379532f, -0.318676f, -0.231739f, -0.133210f, -0.045037f, 0.047998f, 0.159994f, 0.240253f, 0.223460f, 0.130155f, 0.037254f}, - { 0.000904f, 0.019079f, 0.059553f, 0.080705f, 0.034196f, -0.076830f, -0.193142f, -0.258252f, -0.268806f, -0.254990f, -0.228184f, -0.177744f, -0.115561f, -0.086453f, -0.119832f, -0.198441f, -0.290706f, -0.386796f, -0.482507f, -0.555089f, -0.585391f, -0.588459f, -0.595614f, -0.616524f, -0.639482f, -0.657203f, -0.671485f, -0.681113f, -0.683039f, -0.679975f, -0.675099f, -0.665460f, -0.647607f, -0.621543f, -0.584847f, -0.532515f, -0.465996f, -0.394252f, -0.325482f, -0.264963f, -0.217691f, -0.185088f, -0.163233f, -0.150126f, -0.147912f, -0.154002f, -0.160060f, -0.163355f, -0.168022f, -0.173673f, -0.175655f, -0.176533f, -0.183744f, -0.197756f, -0.215649f, -0.241146f, -0.277541f, -0.318350f, -0.357489f, -0.397941f, -0.439603f, -0.473662f, -0.498885f, -0.525211f, -0.553450f, -0.573005f, -0.584023f, -0.595757f, -0.601812f, -0.587350f, -0.558307f, -0.529550f, -0.493088f, -0.438500f, -0.389008f, -0.365560f, -0.332967f, -0.244399f, -0.123587f, -0.032071f} - } -}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /********************** CRendBin_FOA_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_latency_s = 0.000020834f; -#else const Word32 CRendBin_FOA_HRIR_latency_s_fx = 44741; // Q31 -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -688,87 +101,10 @@ const uint16_t CRendBin_FOA_HRIR_num_iterations_48kHz[4][BINAURAL_CHANNELS]={{1, const uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz[4][BINAURAL_CHANNELS][1]={{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}}}; const uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_48kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[4]={0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz_fx[4]={0, 0, 0, 0}; -#endif const uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_coeff_re_48kHz[4][BINAURAL_CHANNELS][240]={ - { - {0.966218f, 0.733332f, 0.371154f, 0.013886f, -0.255271f, -0.429740f, -0.543550f, -0.621345f, -0.659916f, -0.644001f, -0.568080f, -0.442479f, -0.285885f, -0.117060f, 0.048289f, 0.198155f, 0.325513f, 0.429363f, 0.513050f, 0.580002f, 0.630568f, 0.663334f, 0.679201f, 0.682684f, 0.678369f, 0.667227f, 0.647704f, 0.619700f, 0.585896f, 0.549425f, 0.511893f, 0.474018f, 0.436790f, 0.401079f, 0.366792f, 0.333238f, 0.300207f, 0.268253f, 0.237980f, 0.209327f, 0.181631f, 0.154220f, 0.126862f, 0.099653f, 0.072728f, 0.046213f, 0.020311f, -0.004833f, -0.029303f, -0.053269f, -0.076722f, -0.099506f, -0.121536f, -0.142793f, -0.163190f, -0.182595f, -0.200971f, -0.218400f, -0.234976f, -0.250747f, -0.265719f, -0.279920f, -0.293435f, -0.306316f, -0.318471f, -0.329791f, -0.340363f, -0.350414f, -0.360064f, -0.369343f, -0.378409f, -0.387487f, -0.396622f, -0.405768f, -0.415062f, -0.424742f, -0.434871f, -0.445428f, -0.456546f, -0.468369f, -0.480767f, -0.493503f, -0.506517f, -0.519763f, -0.532917f, -0.545542f, -0.557444f, -0.568682f, -0.579373f, -0.589605f, -0.599351f, -0.608366f, -0.616332f, -0.623173f, -0.629056f, -0.634137f, - -0.638497f, -0.642283f, -0.645662f, -0.648684f, -0.651369f, -0.653856f, -0.656358f, -0.659052f, -0.662067f, -0.665441f, -0.669082f, -0.672962f, -0.677320f, -0.682427f, -0.688193f, -0.694213f, -0.700145f, -0.705838f, -0.711215f, -0.716271f, -0.721089f, -0.725695f, -0.730008f, -0.734025f, -0.737880f, -0.741661f, -0.745353f, -0.748949f, -0.752427f, -0.755642f, -0.758483f, -0.761036f, -0.763409f, -0.765535f, -0.767317f, -0.768797f, -0.770037f, -0.771055f, -0.771976f, -0.773014f, -0.774208f, -0.775426f, -0.776630f, -0.777879f, -0.779146f, -0.780393f, -0.781721f, -0.783183f, -0.784625f, -0.785917f, -0.787109f, -0.788195f, -0.789049f, -0.789723f, -0.790445f, -0.791250f, -0.791985f, -0.792673f, -0.793450f, -0.794206f, -0.794720f, -0.795007f, -0.795162f, -0.795109f, -0.794841f, -0.794586f, -0.794452f, -0.794311f, -0.794201f, -0.794328f, -0.794586f, -0.794650f, -0.794553f, -0.794548f, -0.794548f, -0.794345f, -0.794130f, -0.794134f, -0.794153f, -0.793993f, -0.793868f, -0.793862f, -0.793701f, -0.793441f, -0.793538f, -0.793995f, -0.794422f, -0.794952f, -0.795989f, -0.797227f, -0.798155f, -0.799084f, -0.800408f, -0.801603f, -0.802279f, -0.803069f, - -0.804253f, -0.805010f, -0.805191f, -0.805803f, -0.806764f, -0.806769f, -0.806120f, -0.806405f, -0.806891f, -0.805335f, -0.802611f, -0.801532f, -0.801187f, -0.798575f, -0.795591f, -0.796825f, -0.800459f, -0.800016f, -0.795129f, -0.790229f, -0.782215f, -0.762867f, -0.737407f, -0.726767f, -0.742649f, -0.769892f, -0.782797f, -0.773088f, -0.754154f, -0.741924f, -0.738734f, -0.735957f, -0.729899f, -0.733260f, -0.765228f, -0.825366f, -0.883849f, -0.908419f, -0.898347f, -0.880383f, -0.873387f, -0.871922f, -0.866468f, -0.862326f, -0.868453f, -0.880014f, -0.885448f, -0.884194f}, - {0.966218f, 0.733332f, 0.371154f, 0.013886f, -0.255271f, -0.429740f, -0.543550f, -0.621345f, -0.659916f, -0.644001f, -0.568080f, -0.442479f, -0.285885f, -0.117060f, 0.048289f, 0.198155f, 0.325513f, 0.429363f, 0.513050f, 0.580002f, 0.630568f, 0.663334f, 0.679201f, 0.682684f, 0.678369f, 0.667227f, 0.647704f, 0.619700f, 0.585896f, 0.549425f, 0.511893f, 0.474018f, 0.436790f, 0.401079f, 0.366792f, 0.333238f, 0.300207f, 0.268253f, 0.237980f, 0.209327f, 0.181631f, 0.154220f, 0.126862f, 0.099653f, 0.072728f, 0.046213f, 0.020311f, -0.004833f, -0.029303f, -0.053269f, -0.076722f, -0.099506f, -0.121536f, -0.142793f, -0.163190f, -0.182595f, -0.200971f, -0.218400f, -0.234976f, -0.250747f, -0.265719f, -0.279920f, -0.293435f, -0.306316f, -0.318471f, -0.329791f, -0.340363f, -0.350414f, -0.360064f, -0.369343f, -0.378409f, -0.387487f, -0.396622f, -0.405768f, -0.415062f, -0.424742f, -0.434871f, -0.445428f, -0.456546f, -0.468369f, -0.480767f, -0.493503f, -0.506517f, -0.519763f, -0.532917f, -0.545542f, -0.557444f, -0.568682f, -0.579373f, -0.589605f, -0.599351f, -0.608366f, -0.616332f, -0.623173f, -0.629056f, -0.634137f, - -0.638497f, -0.642283f, -0.645662f, -0.648684f, -0.651369f, -0.653856f, -0.656358f, -0.659052f, -0.662067f, -0.665441f, -0.669082f, -0.672962f, -0.677320f, -0.682427f, -0.688193f, -0.694213f, -0.700145f, -0.705838f, -0.711215f, -0.716271f, -0.721089f, -0.725695f, -0.730008f, -0.734025f, -0.737880f, -0.741661f, -0.745353f, -0.748949f, -0.752427f, -0.755642f, -0.758483f, -0.761036f, -0.763409f, -0.765535f, -0.767317f, -0.768797f, -0.770037f, -0.771055f, -0.771976f, -0.773014f, -0.774208f, -0.775426f, -0.776630f, -0.777879f, -0.779146f, -0.780393f, -0.781721f, -0.783183f, -0.784625f, -0.785917f, -0.787109f, -0.788195f, -0.789049f, -0.789723f, -0.790445f, -0.791250f, -0.791985f, -0.792673f, -0.793450f, -0.794206f, -0.794720f, -0.795007f, -0.795162f, -0.795109f, -0.794841f, -0.794586f, -0.794452f, -0.794311f, -0.794201f, -0.794328f, -0.794586f, -0.794650f, -0.794553f, -0.794548f, -0.794548f, -0.794345f, -0.794130f, -0.794134f, -0.794153f, -0.793993f, -0.793868f, -0.793862f, -0.793701f, -0.793441f, -0.793538f, -0.793995f, -0.794422f, -0.794952f, -0.795989f, -0.797227f, -0.798155f, -0.799084f, -0.800408f, -0.801603f, -0.802279f, -0.803069f, - -0.804253f, -0.805010f, -0.805191f, -0.805803f, -0.806764f, -0.806769f, -0.806120f, -0.806405f, -0.806891f, -0.805335f, -0.802611f, -0.801532f, -0.801187f, -0.798575f, -0.795591f, -0.796825f, -0.800459f, -0.800016f, -0.795129f, -0.790229f, -0.782215f, -0.762867f, -0.737407f, -0.726767f, -0.742649f, -0.769892f, -0.782797f, -0.773088f, -0.754154f, -0.741924f, -0.738734f, -0.735957f, -0.729899f, -0.733260f, -0.765228f, -0.825366f, -0.883849f, -0.908419f, -0.898347f, -0.880383f, -0.873387f, -0.871922f, -0.866468f, -0.862326f, -0.868453f, -0.880014f, -0.885448f, -0.884194f} - }, - { - {0.069530f, 0.352738f, 0.714280f, 0.885288f, 0.713446f, 0.249298f, -0.318649f, -0.806052f, -1.124658f, -1.273893f, -1.286408f, -1.194906f, -1.028517f, -0.813598f, -0.570832f, -0.316123f, -0.064436f, 0.170206f, 0.377639f, 0.553010f, 0.696908f, 0.814493f, 0.911484f, 0.989435f, 1.046484f, 1.082848f, 1.103173f, 1.113184f, 1.116310f, 1.113920f, 1.106470f, 1.093611f, 1.074757f, 1.050402f, 1.022191f, 0.991595f, 0.959051f, 0.924074f, 0.885689f, 0.843261f, 0.797446f, 0.750023f, 0.702554f, 0.655685f, 0.609659f, 0.564706f, 0.520834f, 0.477976f, 0.436490f, 0.396954f, 0.359480f, 0.323618f, 0.288809f, 0.254673f, 0.221164f, 0.188708f, 0.157916f, 0.129070f, 0.102244f, 0.077759f, 0.055883f, 0.036223f, 0.018124f, 0.001473f, -0.013588f, -0.027502f, -0.041003f, -0.054210f, -0.066807f, -0.078910f, -0.090976f, -0.103076f, -0.114988f, -0.126900f, -0.139348f, -0.152546f, -0.166308f, -0.180589f, -0.195635f, -0.211564f, -0.228146f, -0.245089f, -0.262373f, -0.280192f, -0.298603f, -0.317350f, -0.336088f, -0.354672f, -0.373219f, -0.392122f, -0.412082f, -0.433737f, -0.456989f, -0.480976f, -0.504974f, -0.528975f, - -0.553152f, -0.577124f, -0.600047f, -0.621125f, -0.639881f, -0.656290f, -0.670723f, -0.683391f, -0.693803f, -0.701164f, -0.705315f, -0.706891f, -0.706661f, -0.705140f, -0.702740f, -0.699905f, -0.697104f, -0.694822f, -0.693380f, -0.692694f, -0.692541f, -0.693119f, -0.694952f, -0.698257f, -0.702754f, -0.707981f, -0.713393f, -0.718373f, -0.722645f, -0.726500f, -0.730288f, -0.733956f, -0.737383f, -0.740707f, -0.744006f, -0.747044f, -0.749626f, -0.751802f, -0.753644f, -0.755218f, -0.756809f, -0.758751f, -0.761058f, -0.763556f, -0.766202f, -0.768999f, -0.771906f, -0.775076f, -0.778852f, -0.783366f, -0.788481f, -0.794119f, -0.800196f, -0.806401f, -0.812542f, -0.818875f, -0.825636f, -0.832649f, -0.839808f, -0.847342f, -0.855190f, -0.862784f, -0.869788f, -0.876325f, -0.882332f, -0.887508f, -0.891946f, -0.895972f, -0.899482f, -0.902212f, -0.904315f, -0.905931f, -0.906830f, -0.907099f, -0.907371f, -0.907866f, -0.908254f, -0.908692f, -0.909708f, -0.910961f, -0.911524f, -0.911241f, -0.910472f, -0.909066f, -0.906977f, -0.904953f, -0.903361f, -0.901613f, -0.899703f, -0.898494f, -0.897842f, -0.896702f, -0.895299f, -0.894642f, -0.894316f, -0.893517f, - -0.893003f, -0.893248f, -0.893094f, -0.892684f, -0.893769f, -0.895229f, -0.894416f, -0.893811f, -0.897241f, -0.900009f, -0.896265f, -0.894143f, -0.903468f, -0.910502f, -0.893479f, -0.864358f, -0.859282f, -0.881749f, -0.897594f, -0.897013f, -0.910837f, -0.943680f, -0.945397f, -0.885614f, -0.810842f, -0.785450f, -0.810782f, -0.840026f, -0.841958f, -0.818240f, -0.787351f, -0.773027f, -0.771807f, -0.719767f, -0.550609f, -0.313730f, -0.167709f, -0.207926f, -0.353731f, -0.457636f, -0.477010f, -0.476826f, -0.500626f, -0.512220f, -0.460719f, -0.349140f, -0.228045f, -0.152067f}, - {-0.069530f, -0.352738f, -0.714280f, -0.885288f, -0.713446f, -0.249298f, 0.318649f, 0.806052f, 1.124658f, 1.273893f, 1.286408f, 1.194906f, 1.028517f, 0.813598f, 0.570832f, 0.316123f, 0.064436f, -0.170206f, -0.377639f, -0.553010f, -0.696908f, -0.814493f, -0.911484f, -0.989435f, -1.046484f, -1.082848f, -1.103173f, -1.113184f, -1.116310f, -1.113920f, -1.106470f, -1.093611f, -1.074757f, -1.050402f, -1.022191f, -0.991595f, -0.959051f, -0.924074f, -0.885689f, -0.843261f, -0.797446f, -0.750023f, -0.702554f, -0.655685f, -0.609659f, -0.564706f, -0.520834f, -0.477976f, -0.436490f, -0.396954f, -0.359480f, -0.323618f, -0.288809f, -0.254673f, -0.221164f, -0.188708f, -0.157916f, -0.129070f, -0.102244f, -0.077759f, -0.055883f, -0.036223f, -0.018124f, -0.001473f, 0.013588f, 0.027502f, 0.041003f, 0.054210f, 0.066807f, 0.078910f, 0.090976f, 0.103076f, 0.114988f, 0.126900f, 0.139348f, 0.152546f, 0.166308f, 0.180589f, 0.195635f, 0.211564f, 0.228146f, 0.245089f, 0.262373f, 0.280192f, 0.298603f, 0.317350f, 0.336088f, 0.354672f, 0.373219f, 0.392122f, 0.412082f, 0.433737f, 0.456989f, 0.480976f, 0.504974f, 0.528975f, - 0.553152f, 0.577124f, 0.600047f, 0.621125f, 0.639881f, 0.656290f, 0.670723f, 0.683391f, 0.693803f, 0.701164f, 0.705315f, 0.706891f, 0.706661f, 0.705140f, 0.702740f, 0.699905f, 0.697104f, 0.694822f, 0.693380f, 0.692694f, 0.692541f, 0.693119f, 0.694952f, 0.698257f, 0.702754f, 0.707981f, 0.713393f, 0.718373f, 0.722645f, 0.726500f, 0.730288f, 0.733956f, 0.737383f, 0.740707f, 0.744006f, 0.747044f, 0.749626f, 0.751802f, 0.753644f, 0.755218f, 0.756809f, 0.758751f, 0.761058f, 0.763556f, 0.766202f, 0.768999f, 0.771906f, 0.775076f, 0.778852f, 0.783366f, 0.788481f, 0.794119f, 0.800196f, 0.806401f, 0.812542f, 0.818875f, 0.825636f, 0.832649f, 0.839808f, 0.847342f, 0.855190f, 0.862784f, 0.869788f, 0.876325f, 0.882332f, 0.887508f, 0.891946f, 0.895972f, 0.899482f, 0.902212f, 0.904315f, 0.905931f, 0.906830f, 0.907099f, 0.907371f, 0.907866f, 0.908254f, 0.908692f, 0.909708f, 0.910961f, 0.911524f, 0.911241f, 0.910472f, 0.909066f, 0.906977f, 0.904953f, 0.903361f, 0.901613f, 0.899703f, 0.898494f, 0.897842f, 0.896702f, 0.895299f, 0.894642f, 0.894316f, 0.893517f, - 0.893003f, 0.893248f, 0.893094f, 0.892684f, 0.893769f, 0.895229f, 0.894416f, 0.893811f, 0.897241f, 0.900009f, 0.896265f, 0.894143f, 0.903468f, 0.910502f, 0.893479f, 0.864358f, 0.859282f, 0.881749f, 0.897594f, 0.897013f, 0.910837f, 0.943680f, 0.945397f, 0.885614f, 0.810842f, 0.785450f, 0.810782f, 0.840026f, 0.841958f, 0.818240f, 0.787351f, 0.773027f, 0.771807f, 0.719767f, 0.550609f, 0.313730f, 0.167709f, 0.207926f, 0.353731f, 0.457636f, 0.477010f, 0.476826f, 0.500626f, 0.512220f, 0.460719f, 0.349140f, 0.228045f, 0.152067f} - }, - { - {0.111800f, 0.092661f, 0.019679f, -0.084828f, -0.131610f, -0.075720f, 0.020947f, 0.070804f, 0.057095f, 0.017174f, -0.024764f, -0.063473f, -0.081887f, -0.063680f, -0.026483f, -0.005095f, -0.004637f, 0.001937f, 0.032512f, 0.076614f, 0.117317f, 0.150397f, 0.176796f, 0.192008f, 0.191179f, 0.177643f, 0.160955f, 0.148604f, 0.140863f, 0.132054f, 0.116684f, 0.094872f, 0.071200f, 0.049422f, 0.031033f, 0.018196f, 0.014048f, 0.019156f, 0.030249f, 0.043163f, 0.055421f, 0.066053f, 0.074723f, 0.081336f, 0.085615f, 0.087194f, 0.086271f, 0.083351f, 0.078080f, 0.069159f, 0.055488f, 0.036660f, 0.012659f, -0.016143f, -0.049048f, -0.085606f, -0.125572f, -0.168143f, -0.212165f, -0.257142f, -0.302871f, -0.348257f, -0.391847f, -0.433166f, -0.472058f, -0.507229f, -0.537018f, -0.560983f, -0.579257f, -0.591157f, -0.595846f, -0.593435f, -0.584148f, -0.567609f, -0.544156f, -0.515516f, -0.482987f, -0.446431f, -0.406289f, -0.365128f, -0.325668f, -0.288357f, -0.252382f, -0.218489f, -0.189259f, -0.166273f, -0.148047f, -0.131878f, -0.117566f, -0.107866f, -0.104589f, -0.105701f, -0.107613f, -0.109110f, -0.111389f, -0.115264f, - -0.120183f, -0.125324f, -0.129915f, -0.132847f, -0.133281f, -0.131381f, -0.127775f, -0.122673f, -0.115742f, -0.106161f, -0.092976f, -0.076359f, -0.058245f, -0.040715f, -0.024211f, -0.008209f, 0.007258f, 0.021783f, 0.035256f, 0.047287f, 0.056855f, 0.063257f, 0.066479f, 0.066398f, 0.062795f, 0.056194f, 0.047396f, 0.036403f, 0.022988f, 0.007826f, -0.008088f, -0.024369f, -0.040627f, -0.056023f, -0.070170f, -0.083234f, -0.094733f, -0.103775f, -0.110653f, -0.116618f, -0.122314f, -0.128068f, -0.134857f, -0.143057f, -0.151192f, -0.157728f, -0.162866f, -0.167154f, -0.170084f, -0.171405f, -0.171850f, -0.171588f, -0.169994f, -0.167442f, -0.165063f, -0.162823f, -0.160119f, -0.157592f, -0.156017f, -0.154586f, -0.152457f, -0.150257f, -0.148223f, -0.145186f, -0.140883f, -0.136504f, -0.132024f, -0.126153f, -0.119172f, -0.112453f, -0.105722f, -0.098322f, -0.091699f, -0.087128f, -0.083245f, -0.079038f, -0.075972f, -0.074448f, -0.072364f, -0.069148f, -0.066198f, -0.062479f, -0.055594f, -0.046807f, -0.038577f, -0.029196f, -0.016675f, -0.003950f, 0.006731f, 0.018542f, 0.032724f, 0.044915f, 0.054264f, 0.065298f, 0.077171f, 0.084883f, - 0.091733f, 0.103322f, 0.113002f, 0.114742f, 0.120485f, 0.137595f, 0.147068f, 0.139282f, 0.143207f, 0.172839f, 0.184844f, 0.156538f, 0.155945f, 0.236396f, 0.307519f, 0.240925f, 0.079148f, -0.007414f, 0.032856f, 0.086859f, 0.091724f, 0.123044f, 0.215138f, 0.257298f, 0.162344f, 0.014559f, -0.050405f, -0.023988f, 0.006360f, -0.000879f, -0.010258f, 0.021849f, 0.100940f, 0.184008f, 0.193280f, 0.089909f, -0.050182f, -0.095653f, -0.016073f, 0.083366f, 0.106152f, 0.075547f, 0.065316f, 0.083957f, 0.084840f, 0.051826f, 0.014987f, -0.002403f}, - {0.111800f, 0.092661f, 0.019679f, -0.084828f, -0.131610f, -0.075720f, 0.020947f, 0.070804f, 0.057095f, 0.017174f, -0.024764f, -0.063473f, -0.081887f, -0.063680f, -0.026483f, -0.005095f, -0.004637f, 0.001937f, 0.032512f, 0.076614f, 0.117317f, 0.150397f, 0.176796f, 0.192008f, 0.191179f, 0.177643f, 0.160955f, 0.148604f, 0.140863f, 0.132054f, 0.116684f, 0.094872f, 0.071200f, 0.049422f, 0.031033f, 0.018196f, 0.014048f, 0.019156f, 0.030249f, 0.043163f, 0.055421f, 0.066053f, 0.074723f, 0.081336f, 0.085615f, 0.087194f, 0.086271f, 0.083351f, 0.078080f, 0.069159f, 0.055488f, 0.036660f, 0.012659f, -0.016143f, -0.049048f, -0.085606f, -0.125572f, -0.168143f, -0.212165f, -0.257142f, -0.302871f, -0.348257f, -0.391847f, -0.433166f, -0.472058f, -0.507229f, -0.537018f, -0.560983f, -0.579257f, -0.591157f, -0.595846f, -0.593435f, -0.584148f, -0.567609f, -0.544156f, -0.515516f, -0.482987f, -0.446431f, -0.406289f, -0.365128f, -0.325668f, -0.288357f, -0.252382f, -0.218489f, -0.189259f, -0.166273f, -0.148047f, -0.131878f, -0.117566f, -0.107866f, -0.104589f, -0.105701f, -0.107613f, -0.109110f, -0.111389f, -0.115264f, - -0.120183f, -0.125324f, -0.129915f, -0.132847f, -0.133281f, -0.131381f, -0.127775f, -0.122673f, -0.115742f, -0.106161f, -0.092976f, -0.076359f, -0.058245f, -0.040715f, -0.024211f, -0.008209f, 0.007258f, 0.021783f, 0.035256f, 0.047287f, 0.056855f, 0.063257f, 0.066479f, 0.066398f, 0.062795f, 0.056194f, 0.047396f, 0.036403f, 0.022988f, 0.007826f, -0.008088f, -0.024369f, -0.040627f, -0.056023f, -0.070170f, -0.083234f, -0.094733f, -0.103775f, -0.110653f, -0.116618f, -0.122314f, -0.128068f, -0.134857f, -0.143057f, -0.151192f, -0.157728f, -0.162866f, -0.167154f, -0.170084f, -0.171405f, -0.171850f, -0.171588f, -0.169994f, -0.167442f, -0.165063f, -0.162823f, -0.160119f, -0.157592f, -0.156017f, -0.154586f, -0.152457f, -0.150257f, -0.148223f, -0.145186f, -0.140883f, -0.136504f, -0.132024f, -0.126153f, -0.119172f, -0.112453f, -0.105722f, -0.098322f, -0.091699f, -0.087128f, -0.083245f, -0.079038f, -0.075972f, -0.074448f, -0.072364f, -0.069148f, -0.066198f, -0.062479f, -0.055594f, -0.046807f, -0.038577f, -0.029196f, -0.016675f, -0.003950f, 0.006731f, 0.018542f, 0.032724f, 0.044915f, 0.054264f, 0.065298f, 0.077171f, 0.084883f, - 0.091733f, 0.103322f, 0.113002f, 0.114742f, 0.120485f, 0.137595f, 0.147068f, 0.139282f, 0.143207f, 0.172839f, 0.184844f, 0.156538f, 0.155945f, 0.236396f, 0.307519f, 0.240925f, 0.079148f, -0.007414f, 0.032856f, 0.086859f, 0.091724f, 0.123044f, 0.215138f, 0.257298f, 0.162344f, 0.014559f, -0.050405f, -0.023988f, 0.006360f, -0.000879f, -0.010258f, 0.021849f, 0.100940f, 0.184008f, 0.193280f, 0.089909f, -0.050182f, -0.095653f, -0.016073f, 0.083366f, 0.106152f, 0.075547f, 0.065316f, 0.083957f, 0.084840f, 0.051826f, 0.014987f, -0.002403f} - }, - { - {0.059457f, 0.085936f, 0.085241f, 0.027833f, -0.043944f, -0.063521f, -0.019521f, 0.033320f, 0.036813f, -0.016068f, -0.088274f, -0.140585f, -0.158479f, -0.151114f, -0.137138f, -0.128832f, -0.122444f, -0.103537f, -0.063178f, -0.006147f, 0.056899f, 0.119000f, 0.175976f, 0.223007f, 0.258809f, 0.290082f, 0.325544f, 0.366060f, 0.404748f, 0.435940f, 0.459659f, 0.477057f, 0.485768f, 0.481949f, 0.464583f, 0.435511f, 0.396430f, 0.348217f, 0.293152f, 0.235872f, 0.181156f, 0.131462f, 0.086995f, 0.047291f, 0.011925f, -0.019860f, -0.049234f, -0.077087f, -0.103305f, -0.126782f, -0.146073f, -0.160114f, -0.168584f, -0.172163f, -0.172742f, -0.172926f, -0.174658f, -0.178393f, -0.183847f, -0.190894f, -0.199120f, -0.207336f, -0.214617f, -0.221287f, -0.227964f, -0.234364f, -0.240080f, -0.245597f, -0.251299f, -0.256363f, -0.259991f, -0.262809f, -0.265586f, -0.267476f, -0.267095f, -0.264473f, -0.260252f, -0.253718f, -0.243511f, -0.229851f, -0.214251f, -0.197126f, -0.177462f, -0.155123f, -0.131960f, -0.110023f, -0.089716f, -0.070352f, -0.051528f, -0.033035f, -0.014169f, 0.005575f, 0.025309f, 0.043447f, 0.059669f, 0.074999f, - 0.089633f, 0.101857f, 0.109868f, 0.113881f, 0.115686f, 0.116439f, 0.115296f, 0.110050f, 0.099149f, 0.083422f, 0.065582f, 0.047620f, 0.029031f, 0.008119f, -0.015408f, -0.039719f, -0.062334f, -0.081886f, -0.098915f, -0.115347f, -0.132714f, -0.150577f, -0.167011f, -0.180529f, -0.191095f, -0.199667f, -0.207607f, -0.216183f, -0.225727f, -0.235418f, -0.244418f, -0.252854f, -0.261300f, -0.270058f, -0.279398f, -0.289700f, -0.300910f, -0.312505f, -0.324199f, -0.335987f, -0.347581f, -0.358572f, -0.368949f, -0.378735f, -0.387465f, -0.394661f, -0.400258f, -0.404073f, -0.405616f, -0.404811f, -0.402129f, -0.397863f, -0.392175f, -0.385744f, -0.379333f, -0.373003f, -0.366685f, -0.360900f, -0.356011f, -0.351700f, -0.347985f, -0.345621f, -0.344803f, -0.344833f, -0.345464f, -0.347028f, -0.349093f, -0.350709f, -0.351891f, -0.353267f, -0.354902f, -0.356927f, -0.360197f, -0.364876f, -0.369876f, -0.374777f, -0.380264f, -0.386061f, -0.390973f, -0.395145f, -0.399381f, -0.402703f, -0.403726f, -0.403187f, -0.401906f, -0.398520f, -0.392428f, -0.385687f, -0.379088f, -0.370803f, -0.361132f, -0.352826f, -0.345523f, -0.336817f, -0.328347f, -0.322499f, - -0.316073f, -0.307037f, -0.300969f, -0.299317f, -0.292838f, -0.280644f, -0.277266f, -0.283217f, -0.276239f, -0.255690f, -0.255875f, -0.279115f, -0.268071f, -0.203008f, -0.169784f, -0.245698f, -0.365333f, -0.404529f, -0.361687f, -0.334923f, -0.343079f, -0.311549f, -0.240812f, -0.239266f, -0.346481f, -0.455499f, -0.471686f, -0.438424f, -0.438562f, -0.467601f, -0.476962f, -0.461364f, -0.428614f, -0.352244f, -0.233087f, -0.153489f, -0.187619f, -0.290385f, -0.350672f, -0.336184f, -0.314805f, -0.337205f, -0.368617f, -0.359721f, -0.333879f, -0.360020f, -0.453502f, -0.541952f}, - {0.059457f, 0.085936f, 0.085241f, 0.027833f, -0.043944f, -0.063521f, -0.019521f, 0.033320f, 0.036813f, -0.016068f, -0.088274f, -0.140585f, -0.158479f, -0.151114f, -0.137138f, -0.128832f, -0.122444f, -0.103537f, -0.063178f, -0.006147f, 0.056899f, 0.119000f, 0.175976f, 0.223007f, 0.258809f, 0.290082f, 0.325544f, 0.366060f, 0.404748f, 0.435940f, 0.459659f, 0.477057f, 0.485768f, 0.481949f, 0.464583f, 0.435511f, 0.396430f, 0.348217f, 0.293152f, 0.235872f, 0.181156f, 0.131462f, 0.086995f, 0.047291f, 0.011925f, -0.019860f, -0.049234f, -0.077087f, -0.103305f, -0.126782f, -0.146073f, -0.160114f, -0.168584f, -0.172163f, -0.172742f, -0.172926f, -0.174658f, -0.178393f, -0.183847f, -0.190894f, -0.199120f, -0.207336f, -0.214617f, -0.221287f, -0.227964f, -0.234364f, -0.240080f, -0.245597f, -0.251299f, -0.256363f, -0.259991f, -0.262809f, -0.265586f, -0.267476f, -0.267095f, -0.264473f, -0.260252f, -0.253718f, -0.243511f, -0.229851f, -0.214251f, -0.197126f, -0.177462f, -0.155123f, -0.131960f, -0.110023f, -0.089716f, -0.070352f, -0.051528f, -0.033035f, -0.014169f, 0.005575f, 0.025309f, 0.043447f, 0.059669f, 0.074999f, - 0.089633f, 0.101857f, 0.109868f, 0.113881f, 0.115686f, 0.116439f, 0.115296f, 0.110050f, 0.099149f, 0.083422f, 0.065582f, 0.047620f, 0.029031f, 0.008119f, -0.015408f, -0.039719f, -0.062334f, -0.081886f, -0.098915f, -0.115347f, -0.132714f, -0.150577f, -0.167011f, -0.180529f, -0.191095f, -0.199667f, -0.207607f, -0.216183f, -0.225727f, -0.235418f, -0.244418f, -0.252854f, -0.261300f, -0.270058f, -0.279398f, -0.289700f, -0.300910f, -0.312505f, -0.324199f, -0.335987f, -0.347581f, -0.358572f, -0.368949f, -0.378735f, -0.387465f, -0.394661f, -0.400258f, -0.404073f, -0.405616f, -0.404811f, -0.402129f, -0.397863f, -0.392175f, -0.385744f, -0.379333f, -0.373003f, -0.366685f, -0.360900f, -0.356011f, -0.351700f, -0.347985f, -0.345621f, -0.344803f, -0.344833f, -0.345464f, -0.347028f, -0.349093f, -0.350709f, -0.351891f, -0.353267f, -0.354902f, -0.356927f, -0.360197f, -0.364876f, -0.369876f, -0.374777f, -0.380264f, -0.386061f, -0.390973f, -0.395145f, -0.399381f, -0.402703f, -0.403726f, -0.403187f, -0.401906f, -0.398520f, -0.392428f, -0.385687f, -0.379088f, -0.370803f, -0.361132f, -0.352826f, -0.345523f, -0.336817f, -0.328347f, -0.322499f, - -0.316073f, -0.307037f, -0.300969f, -0.299317f, -0.292838f, -0.280644f, -0.277266f, -0.283217f, -0.276239f, -0.255690f, -0.255875f, -0.279115f, -0.268071f, -0.203008f, -0.169784f, -0.245698f, -0.365333f, -0.404529f, -0.361687f, -0.334923f, -0.343079f, -0.311549f, -0.240812f, -0.239266f, -0.346481f, -0.455499f, -0.471686f, -0.438424f, -0.438562f, -0.467601f, -0.476962f, -0.461364f, -0.428614f, -0.352244f, -0.233087f, -0.153489f, -0.187619f, -0.290385f, -0.350672f, -0.336184f, -0.314805f, -0.337205f, -0.368617f, -0.359721f, -0.333879f, -0.360020f, -0.453502f, -0.541952f} - } -}; -const float CRendBin_FOA_HRIR_coeff_im_48kHz[4][BINAURAL_CHANNELS][240]={ - { - {-0.232642f, -0.619757f, -0.819335f, -0.824328f, -0.706584f, -0.546612f, -0.382357f, -0.211011f, -0.022767f, 0.174826f, 0.359188f, 0.508148f, 0.609626f, 0.661324f, 0.667146f, 0.635245f, 0.576667f, 0.502394f, 0.419701f, 0.331090f, 0.237324f, 0.141387f, 0.048569f, -0.037525f, -0.117560f, -0.193955f, -0.266698f, -0.333052f, -0.390834f, -0.440313f, -0.482842f, -0.519219f, -0.550026f, -0.576478f, -0.599941f, -0.620936f, -0.639198f, -0.654639f, -0.667907f, -0.679984f, -0.691454f, -0.702244f, -0.711985f, -0.720441f, -0.727553f, -0.733292f, -0.737699f, -0.740994f, -0.743411f, -0.744954f, -0.745498f, -0.745034f, -0.743668f, -0.741462f, -0.738438f, -0.734723f, -0.730530f, -0.726026f, -0.721284f, -0.716333f, -0.711223f, -0.706042f, -0.700845f, -0.695593f, -0.690269f, -0.685041f, -0.680161f, -0.675721f, -0.671676f, -0.668072f, -0.665011f, -0.662423f, -0.660150f, -0.658206f, -0.656688f, -0.655503f, -0.654437f, -0.653421f, -0.652408f, -0.651126f, -0.649247f, -0.646675f, -0.643399f, -0.639213f, -0.633903f, -0.627573f, -0.620560f, -0.613122f, -0.605346f, -0.597201f, -0.588552f, -0.579312f, -0.569672f, -0.560020f, -0.550630f, -0.541590f, - -0.532994f, -0.524947f, -0.517448f, -0.510454f, -0.504037f, -0.498304f, -0.493261f, -0.488818f, -0.484835f, -0.481127f, -0.477591f, -0.474316f, -0.471348f, -0.468385f, -0.464947f, -0.460801f, -0.456039f, -0.450823f, -0.445293f, -0.439599f, -0.433815f, -0.427903f, -0.421886f, -0.415901f, -0.410010f, -0.404135f, -0.398211f, -0.392213f, -0.386062f, -0.379728f, -0.373352f, -0.367079f, -0.360861f, -0.354623f, -0.348453f, -0.342474f, -0.336717f, -0.331241f, -0.326150f, -0.321375f, -0.316703f, -0.312055f, -0.307501f, -0.303027f, -0.298575f, -0.294194f, -0.289903f, -0.285550f, -0.281022f, -0.276422f, -0.271827f, -0.267178f, -0.262535f, -0.258098f, -0.253864f, -0.249627f, -0.245362f, -0.241189f, -0.237022f, -0.232677f, -0.228229f, -0.223866f, -0.219586f, -0.215378f, -0.211424f, -0.207793f, -0.204299f, -0.200877f, -0.197662f, -0.194546f, -0.191240f, -0.187807f, -0.184548f, -0.181425f, -0.178221f, -0.175084f, -0.172235f, -0.169471f, -0.166568f, -0.163737f, -0.161128f, -0.158515f, -0.155899f, -0.153649f, -0.151723f, -0.149662f, -0.147483f, -0.145537f, -0.143560f, -0.141061f, -0.138329f, -0.135814f, -0.133105f, -0.129813f, -0.126525f, -0.123593f, - -0.120298f, -0.116424f, -0.112883f, -0.109720f, -0.105787f, -0.101273f, -0.097619f, -0.094331f, -0.089558f, -0.084187f, -0.080833f, -0.078688f, -0.074889f, -0.070753f, -0.069809f, -0.069830f, -0.064961f, -0.055837f, -0.048252f, -0.041884f, -0.032181f, -0.025073f, -0.035481f, -0.064601f, -0.090757f, -0.092450f, -0.073213f, -0.055377f, -0.054369f, -0.066563f, -0.079976f, -0.091134f, -0.109543f, -0.143769f, -0.182405f, -0.196180f, -0.167685f, -0.114625f, -0.072411f, -0.055952f, -0.051237f, -0.043408f, -0.036029f, -0.036627f, -0.038865f, -0.031657f, -0.016835f, -0.004448f}, - {-0.232642f, -0.619757f, -0.819335f, -0.824328f, -0.706584f, -0.546612f, -0.382357f, -0.211011f, -0.022767f, 0.174826f, 0.359188f, 0.508148f, 0.609626f, 0.661324f, 0.667146f, 0.635245f, 0.576667f, 0.502394f, 0.419701f, 0.331090f, 0.237324f, 0.141387f, 0.048569f, -0.037525f, -0.117560f, -0.193955f, -0.266698f, -0.333052f, -0.390834f, -0.440313f, -0.482842f, -0.519219f, -0.550026f, -0.576478f, -0.599941f, -0.620936f, -0.639198f, -0.654639f, -0.667907f, -0.679984f, -0.691454f, -0.702244f, -0.711985f, -0.720441f, -0.727553f, -0.733292f, -0.737699f, -0.740994f, -0.743411f, -0.744954f, -0.745498f, -0.745034f, -0.743668f, -0.741462f, -0.738438f, -0.734723f, -0.730530f, -0.726026f, -0.721284f, -0.716333f, -0.711223f, -0.706042f, -0.700845f, -0.695593f, -0.690269f, -0.685041f, -0.680161f, -0.675721f, -0.671676f, -0.668072f, -0.665011f, -0.662423f, -0.660150f, -0.658206f, -0.656688f, -0.655503f, -0.654437f, -0.653421f, -0.652408f, -0.651126f, -0.649247f, -0.646675f, -0.643399f, -0.639213f, -0.633903f, -0.627573f, -0.620560f, -0.613122f, -0.605346f, -0.597201f, -0.588552f, -0.579312f, -0.569672f, -0.560020f, -0.550630f, -0.541590f, - -0.532994f, -0.524947f, -0.517448f, -0.510454f, -0.504037f, -0.498304f, -0.493261f, -0.488818f, -0.484835f, -0.481127f, -0.477591f, -0.474316f, -0.471348f, -0.468385f, -0.464947f, -0.460801f, -0.456039f, -0.450823f, -0.445293f, -0.439599f, -0.433815f, -0.427903f, -0.421886f, -0.415901f, -0.410010f, -0.404135f, -0.398211f, -0.392213f, -0.386062f, -0.379728f, -0.373352f, -0.367079f, -0.360861f, -0.354623f, -0.348453f, -0.342474f, -0.336717f, -0.331241f, -0.326150f, -0.321375f, -0.316703f, -0.312055f, -0.307501f, -0.303027f, -0.298575f, -0.294194f, -0.289903f, -0.285550f, -0.281022f, -0.276422f, -0.271827f, -0.267178f, -0.262535f, -0.258098f, -0.253864f, -0.249627f, -0.245362f, -0.241189f, -0.237022f, -0.232677f, -0.228229f, -0.223866f, -0.219586f, -0.215378f, -0.211424f, -0.207793f, -0.204299f, -0.200877f, -0.197662f, -0.194546f, -0.191240f, -0.187807f, -0.184548f, -0.181425f, -0.178221f, -0.175084f, -0.172235f, -0.169471f, -0.166568f, -0.163737f, -0.161128f, -0.158515f, -0.155899f, -0.153649f, -0.151723f, -0.149662f, -0.147483f, -0.145537f, -0.143560f, -0.141061f, -0.138329f, -0.135814f, -0.133105f, -0.129813f, -0.126525f, -0.123593f, - -0.120298f, -0.116424f, -0.112883f, -0.109720f, -0.105787f, -0.101273f, -0.097619f, -0.094331f, -0.089558f, -0.084187f, -0.080833f, -0.078688f, -0.074889f, -0.070753f, -0.069809f, -0.069830f, -0.064961f, -0.055837f, -0.048252f, -0.041884f, -0.032181f, -0.025073f, -0.035481f, -0.064601f, -0.090757f, -0.092450f, -0.073213f, -0.055377f, -0.054369f, -0.066563f, -0.079976f, -0.091134f, -0.109543f, -0.143769f, -0.182405f, -0.196180f, -0.167685f, -0.114625f, -0.072411f, -0.055952f, -0.051237f, -0.043408f, -0.036029f, -0.036627f, -0.038865f, -0.031657f, -0.016835f, -0.004448f} - }, - { - {0.140382f, 0.284796f, 0.113059f, -0.341301f, -0.862015f, -1.204634f, -1.248279f, -1.029758f, -0.664763f, -0.256066f, 0.137783f, 0.487211f, 0.775946f, 0.997771f, 1.153436f, 1.245420f, 1.277398f, 1.256961f, 1.195620f, 1.106451f, 1.001768f, 0.890131f, 0.774183f, 0.653473f, 0.530185f, 0.410173f, 0.298320f, 0.195312f, 0.099336f, 0.008646f, -0.078032f, -0.161428f, -0.241062f, -0.315649f, -0.384630f, -0.448733f, -0.509170f, -0.566793f, -0.621581f, -0.672385f, -0.717596f, -0.756520f, -0.789753f, -0.818228f, -0.842538f, -0.863181f, -0.880623f, -0.894965f, -0.906175f, -0.914704f, -0.921413f, -0.926918f, -0.931340f, -0.934448f, -0.935793f, -0.935022f, -0.932267f, -0.927970f, -0.922378f, -0.915726f, -0.908718f, -0.902136f, -0.896106f, -0.890432f, -0.885422f, -0.881597f, -0.878827f, -0.876579f, -0.874831f, -0.873952f, -0.873913f, -0.874370f, -0.875375f, -0.877274f, -0.880013f, -0.883133f, -0.886386f, -0.889857f, -0.893495f, -0.896943f, -0.899891f, -0.902370f, -0.904567f, -0.906469f, -0.907798f, -0.908330f, -0.908151f, -0.907581f, -0.906978f, -0.906626f, -0.906487f, -0.905858f, -0.903647f, -0.899249f, -0.892899f, -0.884927f, - -0.875053f, -0.862712f, -0.847727f, -0.830455f, -0.811563f, -0.791782f, -0.771500f, -0.750522f, -0.728617f, -0.706326f, -0.684815f, -0.664994f, -0.647154f, -0.631330f, -0.617578f, -0.605915f, -0.596270f, -0.588409f, -0.581848f, -0.576120f, -0.571189f, -0.567244f, -0.564062f, -0.560956f, -0.557300f, -0.552749f, -0.547149f, -0.540696f, -0.533982f, -0.527464f, -0.521067f, -0.514596f, -0.508155f, -0.501839f, -0.495465f, -0.488925f, -0.482422f, -0.476181f, -0.470299f, -0.464951f, -0.460286f, -0.456131f, -0.452168f, -0.448311f, -0.444625f, -0.441111f, -0.437847f, -0.435012f, -0.432529f, -0.430047f, -0.427337f, -0.424316f, -0.420805f, -0.416729f, -0.412382f, -0.407980f, -0.403285f, -0.398067f, -0.392448f, -0.386360f, -0.379335f, -0.371209f, -0.362359f, -0.353002f, -0.343026f, -0.332618f, -0.322186f, -0.311707f, -0.300948f, -0.290105f, -0.279460f, -0.268914f, -0.258530f, -0.248800f, -0.239810f, -0.231038f, -0.222364f, -0.214099f, -0.205871f, -0.196868f, -0.187179f, -0.177547f, -0.168128f, -0.158861f, -0.150296f, -0.142677f, -0.135313f, -0.127959f, -0.121270f, -0.115110f, -0.108460f, -0.101467f, -0.095154f, -0.089193f, -0.082636f, -0.076028f, - -0.070002f, -0.063579f, -0.056514f, -0.050189f, -0.043975f, -0.035661f, -0.026929f, -0.020905f, -0.014065f, -0.001634f, 0.010286f, 0.014441f, 0.021776f, 0.046877f, 0.075043f, 0.076336f, 0.055881f, 0.051243f, 0.071963f, 0.088061f, 0.093592f, 0.127625f, 0.202698f, 0.263860f, 0.260005f, 0.216330f, 0.195773f, 0.220955f, 0.268761f, 0.311828f, 0.337692f, 0.357947f, 0.413641f, 0.524316f, 0.615425f, 0.563270f, 0.351718f, 0.123833f, 0.026612f, 0.054001f, 0.097163f, 0.102905f, 0.112567f, 0.165999f, 0.234599f, 0.256682f, 0.199112f, 0.074735f}, - {-0.140382f, -0.284796f, -0.113059f, 0.341301f, 0.862015f, 1.204634f, 1.248279f, 1.029758f, 0.664763f, 0.256066f, -0.137783f, -0.487211f, -0.775946f, -0.997771f, -1.153436f, -1.245420f, -1.277398f, -1.256961f, -1.195620f, -1.106451f, -1.001768f, -0.890131f, -0.774183f, -0.653473f, -0.530185f, -0.410173f, -0.298320f, -0.195312f, -0.099336f, -0.008646f, 0.078032f, 0.161428f, 0.241062f, 0.315649f, 0.384630f, 0.448733f, 0.509170f, 0.566793f, 0.621581f, 0.672385f, 0.717596f, 0.756520f, 0.789753f, 0.818228f, 0.842538f, 0.863181f, 0.880623f, 0.894965f, 0.906175f, 0.914704f, 0.921413f, 0.926918f, 0.931340f, 0.934448f, 0.935793f, 0.935022f, 0.932267f, 0.927970f, 0.922378f, 0.915726f, 0.908718f, 0.902136f, 0.896106f, 0.890432f, 0.885422f, 0.881597f, 0.878827f, 0.876579f, 0.874831f, 0.873952f, 0.873913f, 0.874370f, 0.875375f, 0.877274f, 0.880013f, 0.883133f, 0.886386f, 0.889857f, 0.893495f, 0.896943f, 0.899891f, 0.902370f, 0.904567f, 0.906469f, 0.907798f, 0.908330f, 0.908151f, 0.907581f, 0.906978f, 0.906626f, 0.906487f, 0.905858f, 0.903647f, 0.899249f, 0.892899f, 0.884927f, - 0.875053f, 0.862712f, 0.847727f, 0.830455f, 0.811563f, 0.791782f, 0.771500f, 0.750522f, 0.728617f, 0.706326f, 0.684815f, 0.664994f, 0.647154f, 0.631330f, 0.617578f, 0.605915f, 0.596270f, 0.588409f, 0.581848f, 0.576120f, 0.571189f, 0.567244f, 0.564062f, 0.560956f, 0.557300f, 0.552749f, 0.547149f, 0.540696f, 0.533982f, 0.527464f, 0.521067f, 0.514596f, 0.508155f, 0.501839f, 0.495465f, 0.488925f, 0.482422f, 0.476181f, 0.470299f, 0.464951f, 0.460286f, 0.456131f, 0.452168f, 0.448311f, 0.444625f, 0.441111f, 0.437847f, 0.435012f, 0.432529f, 0.430047f, 0.427337f, 0.424316f, 0.420805f, 0.416729f, 0.412382f, 0.407980f, 0.403285f, 0.398067f, 0.392448f, 0.386360f, 0.379335f, 0.371209f, 0.362359f, 0.353002f, 0.343026f, 0.332618f, 0.322186f, 0.311707f, 0.300948f, 0.290105f, 0.279460f, 0.268914f, 0.258530f, 0.248800f, 0.239810f, 0.231038f, 0.222364f, 0.214099f, 0.205871f, 0.196868f, 0.187179f, 0.177547f, 0.168128f, 0.158861f, 0.150296f, 0.142677f, 0.135313f, 0.127959f, 0.121270f, 0.115110f, 0.108460f, 0.101467f, 0.095154f, 0.089193f, 0.082636f, 0.076028f, - 0.070002f, 0.063579f, 0.056514f, 0.050189f, 0.043975f, 0.035661f, 0.026929f, 0.020905f, 0.014065f, 0.001634f, -0.010286f, -0.014441f, -0.021776f, -0.046877f, -0.075043f, -0.076336f, -0.055881f, -0.051243f, -0.071963f, -0.088061f, -0.093592f, -0.127625f, -0.202698f, -0.263860f, -0.260005f, -0.216330f, -0.195773f, -0.220955f, -0.268761f, -0.311828f, -0.337692f, -0.357947f, -0.413641f, -0.524316f, -0.615425f, -0.563270f, -0.351718f, -0.123833f, -0.026612f, -0.054001f, -0.097163f, -0.102905f, -0.112567f, -0.165999f, -0.234599f, -0.256682f, -0.199112f, -0.074735f} - }, - { - {-0.025709f, -0.087852f, -0.139072f, -0.114670f, -0.010581f, 0.083762f, 0.089935f, 0.027679f, -0.033031f, -0.059926f, -0.060733f, -0.038043f, 0.008721f, 0.055627f, 0.072784f, 0.065756f, 0.067013f, 0.089127f, 0.112190f, 0.115989f, 0.101255f, 0.076571f, 0.043604f, 0.002504f, -0.039568f, -0.072838f, -0.093984f, -0.107885f, -0.122174f, -0.140465f, -0.159571f, -0.173362f, -0.178912f, -0.177313f, -0.169818f, -0.156888f, -0.141159f, -0.127823f, -0.120897f, -0.120944f, -0.126572f, -0.136377f, -0.149380f, -0.165024f, -0.183014f, -0.202776f, -0.223635f, -0.245715f, -0.269757f, -0.295840f, -0.323002f, -0.349990f, -0.375616f, -0.398737f, -0.418610f, -0.434862f, -0.446808f, -0.453571f, -0.454971f, -0.451233f, -0.441889f, -0.426235f, -0.404594f, -0.377728f, -0.345446f, -0.307343f, -0.264342f, -0.217973f, -0.168839f, -0.117241f, -0.064423f, -0.011833f, 0.039787f, 0.089385f, 0.134986f, 0.175305f, 0.210590f, 0.240697f, 0.263879f, 0.278867f, 0.286867f, 0.289982f, 0.288504f, 0.281317f, 0.268764f, 0.253745f, 0.239176f, 0.224979f, 0.208874f, 0.190415f, 0.172740f, 0.159261f, 0.149978f, 0.142540f, 0.135820f, 0.130669f, - 0.128026f, 0.128135f, 0.131114f, 0.136745f, 0.143982f, 0.151658f, 0.159406f, 0.167441f, 0.175977f, 0.184865f, 0.192984f, 0.198243f, 0.199231f, 0.196556f, 0.191632f, 0.184859f, 0.175906f, 0.164788f, 0.151549f, 0.135833f, 0.117715f, 0.098073f, 0.077678f, 0.056957f, 0.036748f, 0.018014f, 0.000872f, -0.014868f, -0.028575f, -0.039388f, -0.047290f, -0.052543f, -0.054987f, -0.054782f, -0.052664f, -0.048888f, -0.043302f, -0.036732f, -0.030687f, -0.025659f, -0.021283f, -0.017577f, -0.014246f, -0.009715f, -0.002804f, 0.005660f, 0.014470f, 0.023743f, 0.033647f, 0.043359f, 0.052494f, 0.061578f, 0.070378f, 0.077923f, 0.084389f, 0.090692f, 0.096591f, 0.101528f, 0.106380f, 0.112094f, 0.118037f, 0.123692f, 0.129929f, 0.136925f, 0.143401f, 0.149129f, 0.155244f, 0.161468f, 0.166321f, 0.169947f, 0.173303f, 0.175561f, 0.175884f, 0.175902f, 0.177023f, 0.178070f, 0.178540f, 0.180407f, 0.184301f, 0.188503f, 0.193141f, 0.199909f, 0.207375f, 0.212779f, 0.217314f, 0.222988f, 0.227302f, 0.227989f, 0.228035f, 0.229199f, 0.227725f, 0.222579f, 0.218340f, 0.215242f, 0.208655f, 0.200648f, - 0.196609f, 0.191792f, 0.180454f, 0.171665f, 0.171997f, 0.166224f, 0.145987f, 0.134797f, 0.144064f, 0.138339f, 0.100138f, 0.083322f, 0.120723f, 0.129214f, 0.021665f, -0.123541f, -0.144768f, -0.034350f, 0.057753f, 0.060616f, 0.056870f, 0.089515f, 0.067490f, -0.060009f, -0.181042f, -0.173043f, -0.072960f, -0.000831f, 0.008317f, 0.010713f, 0.046903f, 0.097902f, 0.114688f, 0.055575f, -0.066337f, -0.157373f, -0.122700f, 0.009537f, 0.105443f, 0.088390f, 0.020247f, -0.007578f, 0.004660f, 0.000024f, -0.033101f, -0.055003f, -0.043748f, -0.015207f}, - {-0.025709f, -0.087852f, -0.139072f, -0.114670f, -0.010581f, 0.083762f, 0.089935f, 0.027679f, -0.033031f, -0.059926f, -0.060733f, -0.038043f, 0.008721f, 0.055627f, 0.072784f, 0.065756f, 0.067013f, 0.089127f, 0.112190f, 0.115989f, 0.101255f, 0.076571f, 0.043604f, 0.002504f, -0.039568f, -0.072838f, -0.093984f, -0.107885f, -0.122174f, -0.140465f, -0.159571f, -0.173362f, -0.178912f, -0.177313f, -0.169818f, -0.156888f, -0.141159f, -0.127823f, -0.120897f, -0.120944f, -0.126572f, -0.136377f, -0.149380f, -0.165024f, -0.183014f, -0.202776f, -0.223635f, -0.245715f, -0.269757f, -0.295840f, -0.323002f, -0.349990f, -0.375616f, -0.398737f, -0.418610f, -0.434862f, -0.446808f, -0.453571f, -0.454971f, -0.451233f, -0.441889f, -0.426235f, -0.404594f, -0.377728f, -0.345446f, -0.307343f, -0.264342f, -0.217973f, -0.168839f, -0.117241f, -0.064423f, -0.011833f, 0.039787f, 0.089385f, 0.134986f, 0.175305f, 0.210590f, 0.240697f, 0.263879f, 0.278867f, 0.286867f, 0.289982f, 0.288504f, 0.281317f, 0.268764f, 0.253745f, 0.239176f, 0.224979f, 0.208874f, 0.190415f, 0.172740f, 0.159261f, 0.149978f, 0.142540f, 0.135820f, 0.130669f, - 0.128026f, 0.128135f, 0.131114f, 0.136745f, 0.143982f, 0.151658f, 0.159406f, 0.167441f, 0.175977f, 0.184865f, 0.192984f, 0.198243f, 0.199231f, 0.196556f, 0.191632f, 0.184859f, 0.175906f, 0.164788f, 0.151549f, 0.135833f, 0.117715f, 0.098073f, 0.077678f, 0.056957f, 0.036748f, 0.018014f, 0.000872f, -0.014868f, -0.028575f, -0.039388f, -0.047290f, -0.052543f, -0.054987f, -0.054782f, -0.052664f, -0.048888f, -0.043302f, -0.036732f, -0.030687f, -0.025659f, -0.021283f, -0.017577f, -0.014246f, -0.009715f, -0.002804f, 0.005660f, 0.014470f, 0.023743f, 0.033647f, 0.043359f, 0.052494f, 0.061578f, 0.070378f, 0.077923f, 0.084389f, 0.090692f, 0.096591f, 0.101528f, 0.106380f, 0.112094f, 0.118037f, 0.123692f, 0.129929f, 0.136925f, 0.143401f, 0.149129f, 0.155244f, 0.161468f, 0.166321f, 0.169947f, 0.173303f, 0.175561f, 0.175884f, 0.175902f, 0.177023f, 0.178070f, 0.178540f, 0.180407f, 0.184301f, 0.188503f, 0.193141f, 0.199909f, 0.207375f, 0.212779f, 0.217314f, 0.222988f, 0.227302f, 0.227989f, 0.228035f, 0.229199f, 0.227725f, 0.222579f, 0.218340f, 0.215242f, 0.208655f, 0.200648f, - 0.196609f, 0.191792f, 0.180454f, 0.171665f, 0.171997f, 0.166224f, 0.145987f, 0.134797f, 0.144064f, 0.138339f, 0.100138f, 0.083322f, 0.120723f, 0.129214f, 0.021665f, -0.123541f, -0.144768f, -0.034350f, 0.057753f, 0.060616f, 0.056870f, 0.089515f, 0.067490f, -0.060009f, -0.181042f, -0.173043f, -0.072960f, -0.000831f, 0.008317f, 0.010713f, 0.046903f, 0.097902f, 0.114688f, 0.055575f, -0.066337f, -0.157373f, -0.122700f, 0.009537f, 0.105443f, 0.088390f, 0.020247f, -0.007578f, 0.004660f, 0.000024f, -0.033101f, -0.055003f, -0.043748f, -0.015207f} - }, - { - {0.004301f, -0.013476f, -0.069855f, -0.112233f, -0.090233f, -0.023427f, 0.018901f, -0.004024f, -0.066053f, -0.110415f, -0.105009f, -0.058395f, 0.001235f, 0.050922f, 0.084875f, 0.113445f, 0.150612f, 0.198514f, 0.245067f, 0.276957f, 0.290295f, 0.287473f, 0.270798f, 0.244182f, 0.215808f, 0.191987f, 0.169678f, 0.140040f, 0.098790f, 0.049069f, -0.005223f, -0.064266f, -0.129212f, -0.197710f, -0.264893f, -0.327191f, -0.382959f, -0.430138f, -0.465663f, -0.487872f, -0.498285f, -0.500319f, -0.496901f, -0.489765f, -0.480177f, -0.469238f, -0.457371f, -0.444016f, -0.428168f, -0.409285f, -0.387825f, -0.365159f, -0.343191f, -0.324015f, -0.309255f, -0.299101f, -0.292156f, -0.286670f, -0.281620f, -0.276311f, -0.269794f, -0.261628f, -0.252562f, -0.243448f, -0.234059f, -0.223904f, -0.213327f, -0.202652f, -0.191162f, -0.178231f, -0.164569f, -0.150934f, -0.136555f, -0.120347f, -0.102808f, -0.085100f, -0.067101f, -0.048163f, -0.029184f, -0.012044f, 0.002742f, 0.016047f, 0.027774f, 0.036175f, 0.040005f, 0.040094f, 0.038140f, 0.034953f, 0.030572f, 0.025196f, 0.018816f, 0.010402f, -0.001256f, -0.015920f, -0.032251f, -0.049947f, - -0.070292f, -0.094062f, -0.119898f, -0.145560f, -0.170281f, -0.195266f, -0.222067f, -0.250644f, -0.278790f, -0.303633f, -0.324109f, -0.341676f, -0.358158f, -0.373323f, -0.385151f, -0.392113f, -0.394639f, -0.394771f, -0.394738f, -0.395368f, -0.395476f, -0.393190f, -0.388016f, -0.381245f, -0.374662f, -0.369480f, -0.366096f, -0.363936f, -0.361729f, -0.358693f, -0.355247f, -0.352152f, -0.349560f, -0.347298f, -0.345265f, -0.343082f, -0.340057f, -0.335871f, -0.330643f, -0.324295f, -0.316590f, -0.307660f, -0.297736f, -0.286624f, -0.274141f, -0.260611f, -0.246376f, -0.231487f, -0.216324f, -0.201731f, -0.188250f, -0.176027f, -0.165469f, -0.156991f, -0.150296f, -0.144906f, -0.140952f, -0.138536f, -0.137112f, -0.136366f, -0.136669f, -0.137907f, -0.139122f, -0.139867f, -0.140476f, -0.140741f, -0.139998f, -0.138538f, -0.137285f, -0.136389f, -0.135636f, -0.135341f, -0.135341f, -0.134436f, -0.132129f, -0.129168f, -0.125552f, -0.120298f, -0.113600f, -0.106478f, -0.098431f, -0.088467f, -0.077617f, -0.067238f, -0.056573f, -0.045203f, -0.035126f, -0.027288f, -0.019916f, -0.012845f, -0.008413f, -0.006290f, -0.003787f, -0.001744f, -0.002475f, -0.003553f, - -0.002665f, -0.004018f, -0.009329f, -0.011340f, -0.008882f, -0.013592f, -0.026133f, -0.028495f, -0.020197f, -0.028759f, -0.055232f, -0.055789f, -0.023439f, -0.031660f, -0.124564f, -0.217122f, -0.200917f, -0.107754f, -0.056107f, -0.066073f, -0.058846f, -0.027906f, -0.061373f, -0.169830f, -0.234929f, -0.183494f, -0.092827f, -0.059029f, -0.063888f, -0.041976f, 0.009389f, 0.060627f, 0.114330f, 0.163356f, 0.148189f, 0.037885f, -0.089951f, -0.129600f, -0.082891f, -0.043468f, -0.059765f, -0.084990f, -0.070715f, -0.045983f, -0.067518f, -0.125030f, -0.140466f, -0.062947f}, - {0.004301f, -0.013476f, -0.069855f, -0.112233f, -0.090233f, -0.023427f, 0.018901f, -0.004024f, -0.066053f, -0.110415f, -0.105009f, -0.058395f, 0.001235f, 0.050922f, 0.084875f, 0.113445f, 0.150612f, 0.198514f, 0.245067f, 0.276957f, 0.290295f, 0.287473f, 0.270798f, 0.244182f, 0.215808f, 0.191987f, 0.169678f, 0.140040f, 0.098790f, 0.049069f, -0.005223f, -0.064266f, -0.129212f, -0.197710f, -0.264893f, -0.327191f, -0.382959f, -0.430138f, -0.465663f, -0.487872f, -0.498285f, -0.500319f, -0.496901f, -0.489765f, -0.480177f, -0.469238f, -0.457371f, -0.444016f, -0.428168f, -0.409285f, -0.387825f, -0.365159f, -0.343191f, -0.324015f, -0.309255f, -0.299101f, -0.292156f, -0.286670f, -0.281620f, -0.276311f, -0.269794f, -0.261628f, -0.252562f, -0.243448f, -0.234059f, -0.223904f, -0.213327f, -0.202652f, -0.191162f, -0.178231f, -0.164569f, -0.150934f, -0.136555f, -0.120347f, -0.102808f, -0.085100f, -0.067101f, -0.048163f, -0.029184f, -0.012044f, 0.002742f, 0.016047f, 0.027774f, 0.036175f, 0.040005f, 0.040094f, 0.038140f, 0.034953f, 0.030572f, 0.025196f, 0.018816f, 0.010402f, -0.001256f, -0.015920f, -0.032251f, -0.049947f, - -0.070292f, -0.094062f, -0.119898f, -0.145560f, -0.170281f, -0.195266f, -0.222067f, -0.250644f, -0.278790f, -0.303633f, -0.324109f, -0.341676f, -0.358158f, -0.373323f, -0.385151f, -0.392113f, -0.394639f, -0.394771f, -0.394738f, -0.395368f, -0.395476f, -0.393190f, -0.388016f, -0.381245f, -0.374662f, -0.369480f, -0.366096f, -0.363936f, -0.361729f, -0.358693f, -0.355247f, -0.352152f, -0.349560f, -0.347298f, -0.345265f, -0.343082f, -0.340057f, -0.335871f, -0.330643f, -0.324295f, -0.316590f, -0.307660f, -0.297736f, -0.286624f, -0.274141f, -0.260611f, -0.246376f, -0.231487f, -0.216324f, -0.201731f, -0.188250f, -0.176027f, -0.165469f, -0.156991f, -0.150296f, -0.144906f, -0.140952f, -0.138536f, -0.137112f, -0.136366f, -0.136669f, -0.137907f, -0.139122f, -0.139867f, -0.140476f, -0.140741f, -0.139998f, -0.138538f, -0.137285f, -0.136389f, -0.135636f, -0.135341f, -0.135341f, -0.134436f, -0.132129f, -0.129168f, -0.125552f, -0.120298f, -0.113600f, -0.106478f, -0.098431f, -0.088467f, -0.077617f, -0.067238f, -0.056573f, -0.045203f, -0.035126f, -0.027288f, -0.019916f, -0.012845f, -0.008413f, -0.006290f, -0.003787f, -0.001744f, -0.002475f, -0.003553f, - -0.002665f, -0.004018f, -0.009329f, -0.011340f, -0.008882f, -0.013592f, -0.026133f, -0.028495f, -0.020197f, -0.028759f, -0.055232f, -0.055789f, -0.023439f, -0.031660f, -0.124564f, -0.217122f, -0.200917f, -0.107754f, -0.056107f, -0.066073f, -0.058846f, -0.027906f, -0.061373f, -0.169830f, -0.234929f, -0.183494f, -0.092827f, -0.059029f, -0.063888f, -0.041976f, 0.009389f, 0.060627f, 0.114330f, 0.163356f, 0.148189f, 0.037885f, -0.089951f, -0.129600f, -0.082891f, -0.043468f, -0.059765f, -0.084990f, -0.070715f, -0.045983f, -0.067518f, -0.125030f, -0.140466f, -0.062947f} - } -}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 32000 */ const int16_t CRendBin_FOA_HRIR_max_num_iterations_32kHz = 1; @@ -776,71 +112,10 @@ const uint16_t CRendBin_FOA_HRIR_num_iterations_32kHz[4][BINAURAL_CHANNELS]={{1, const uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz[4][BINAURAL_CHANNELS][1]={{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}}}; const uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_32kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[4]={0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz_fx[4]={0, 0, 0, 0}; -#endif const uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_coeff_re_32kHz[4][BINAURAL_CHANNELS][160]={ - { - {1.009979f, 0.777112f, 0.414923f, 0.057622f, -0.211538f, -0.386004f, -0.499848f, -0.577684f, -0.616265f, -0.600367f, -0.524501f, -0.398947f, -0.242372f, -0.073587f, 0.091690f, 0.241505f, 0.368831f, 0.472616f, 0.556219f, 0.623114f, 0.673631f, 0.706309f, 0.722082f, 0.725502f, 0.721116f, 0.709865f, 0.690241f, 0.662164f, 0.628264f, 0.591665f, 0.554026f, 0.516064f, 0.478714f, 0.442859f, 0.408459f, 0.374798f, 0.341619f, 0.309511f, 0.279115f, 0.250331f, 0.222462f, 0.194888f, 0.167394f, 0.140026f, 0.112906f, 0.086220f, 0.060166f, 0.034831f, 0.010148f, -0.013999f, -0.037628f, -0.060633f, -0.082892f, -0.104342f, -0.124944f, -0.144600f, -0.163218f, -0.180856f, -0.197673f, -0.213722f, -0.228947f, -0.243382f, -0.257175f, -0.270358f, -0.282781f, -0.294366f, -0.305254f, -0.315630f, -0.325566f, -0.335147f, -0.344568f, -0.353990f, -0.363436f, -0.372929f, -0.382614f, -0.392659f, -0.403132f, -0.414084f, -0.425629f, -0.437840f, -0.450624f, -0.463808f, -0.477282f, -0.490945f, -0.504537f, -0.517665f, -0.530059f, -0.541752f, -0.552944f, -0.563732f, -0.574004f, -0.583524f, -0.592061f, -0.599512f, -0.605962f, -0.611610f, - -0.616618f, -0.621070f, -0.625065f, -0.628734f, -0.632150f, -0.635359f, -0.638542f, -0.641977f, -0.645810f, -0.649971f, -0.654375f, -0.659108f, -0.664378f, -0.670346f, -0.676981f, -0.683983f, -0.690928f, -0.697577f, -0.703957f, -0.710141f, -0.716086f, -0.721769f, -0.727253f, -0.732564f, -0.737680f, -0.742698f, -0.747770f, -0.752853f, -0.757757f, -0.762422f, -0.766902f, -0.771169f, -0.775186f, -0.779046f, -0.782792f, -0.786271f, -0.789448f, -0.792589f, -0.795895f, -0.799306f, -0.802854f, -0.806744f, -0.810903f, -0.815048f, -0.819301f, -0.824043f, -0.829159f, -0.834320f, -0.839804f, -0.845960f, -0.852309f, -0.858549f, -0.865591f, -0.873918f, -0.882709f, -0.892835f, -0.906137f, -0.914609f, -0.894289f, -0.824242f, -0.716694f, -0.616066f, -0.558379f, -0.540483f}, - {1.009979f, 0.777112f, 0.414923f, 0.057622f, -0.211538f, -0.386004f, -0.499848f, -0.577684f, -0.616265f, -0.600367f, -0.524501f, -0.398947f, -0.242372f, -0.073587f, 0.091690f, 0.241505f, 0.368831f, 0.472616f, 0.556219f, 0.623114f, 0.673631f, 0.706309f, 0.722082f, 0.725502f, 0.721116f, 0.709865f, 0.690241f, 0.662164f, 0.628264f, 0.591665f, 0.554026f, 0.516064f, 0.478714f, 0.442859f, 0.408459f, 0.374798f, 0.341619f, 0.309511f, 0.279115f, 0.250331f, 0.222462f, 0.194888f, 0.167394f, 0.140026f, 0.112906f, 0.086220f, 0.060166f, 0.034831f, 0.010148f, -0.013999f, -0.037628f, -0.060633f, -0.082892f, -0.104342f, -0.124944f, -0.144600f, -0.163218f, -0.180856f, -0.197673f, -0.213722f, -0.228947f, -0.243382f, -0.257175f, -0.270358f, -0.282781f, -0.294366f, -0.305254f, -0.315630f, -0.325566f, -0.335147f, -0.344568f, -0.353990f, -0.363436f, -0.372929f, -0.382614f, -0.392659f, -0.403132f, -0.414084f, -0.425629f, -0.437840f, -0.450624f, -0.463808f, -0.477282f, -0.490945f, -0.504537f, -0.517665f, -0.530059f, -0.541752f, -0.552944f, -0.563732f, -0.574004f, -0.583524f, -0.592061f, -0.599512f, -0.605962f, -0.611610f, - -0.616618f, -0.621070f, -0.625065f, -0.628734f, -0.632150f, -0.635359f, -0.638542f, -0.641977f, -0.645810f, -0.649971f, -0.654375f, -0.659108f, -0.664378f, -0.670346f, -0.676981f, -0.683983f, -0.690928f, -0.697577f, -0.703957f, -0.710141f, -0.716086f, -0.721769f, -0.727253f, -0.732564f, -0.737680f, -0.742698f, -0.747770f, -0.752853f, -0.757757f, -0.762422f, -0.766902f, -0.771169f, -0.775186f, -0.779046f, -0.782792f, -0.786271f, -0.789448f, -0.792589f, -0.795895f, -0.799306f, -0.802854f, -0.806744f, -0.810903f, -0.815048f, -0.819301f, -0.824043f, -0.829159f, -0.834320f, -0.839804f, -0.845960f, -0.852309f, -0.858549f, -0.865591f, -0.873918f, -0.882709f, -0.892835f, -0.906137f, -0.914609f, -0.894289f, -0.824242f, -0.716694f, -0.616066f, -0.558379f, -0.540483f} - }, - { - {0.126193f, 0.409379f, 0.770915f, 0.941927f, 0.770060f, 0.305875f, -0.262088f, -0.749508f, -1.068164f, -1.217448f, -1.229991f, -1.138532f, -0.972214f, -0.757355f, -0.514633f, -0.259993f, -0.008395f, 0.226177f, 0.433546f, 0.608821f, 0.752615f, 0.870118f, 0.967021f, 1.044852f, 1.101784f, 1.138051f, 1.158261f, 1.168128f, 1.171126f, 1.168620f, 1.161027f, 1.148005f, 1.129009f, 1.104516f, 1.076132f, 1.045356f, 1.012656f, 0.977512f, 0.938926f, 0.896304f, 0.850314f, 0.802692f, 0.754998f, 0.707919f, 0.661694f, 0.616510f, 0.572388f, 0.529305f, 0.487590f, 0.447788f, 0.410045f, 0.373936f, 0.338864f, 0.304430f, 0.270631f, 0.237903f, 0.206810f, 0.177634f, 0.150497f, 0.125709f, 0.103489f, 0.083471f, 0.065037f, 0.048044f, 0.032597f, 0.018295f, 0.004431f, -0.009163f, -0.022189f, -0.034707f, -0.047174f, -0.059713f, -0.072094f, -0.084452f, -0.097346f, -0.111038f, -0.125310f, -0.140074f, -0.155621f, -0.172102f, -0.189235f, -0.206705f, -0.224555f, -0.242985f, -0.261989f, -0.281321f, -0.300697f, -0.319952f, -0.339143f, -0.358700f, -0.379378f, -0.401765f, -0.425720f, -0.450446f, -0.475248f, -0.500046f, - -0.525001f, -0.549812f, -0.573628f, -0.595576f, -0.615206f, -0.632568f, -0.647989f, -0.661616f, -0.673019f, -0.681460f, -0.686704f, -0.689348f, -0.690254f, -0.689954f, -0.688764f, -0.687137f, -0.685645f, -0.684742f, -0.684652f, -0.685353f, -0.686715f, -0.688850f, -0.692213f, -0.697136f, -0.703389f, -0.710382f, -0.717558f, -0.724449f, -0.730762f, -0.736643f, -0.742509f, -0.748462f, -0.754275f, -0.759964f, -0.765773f, -0.771574f, -0.776977f, -0.781995f, -0.786951f, -0.791913f, -0.796914f, -0.802402f, -0.808694f, -0.815443f, -0.822369f, -0.829834f, -0.838049f, -0.846765f, -0.856294f, -0.867454f, -0.880120f, -0.893624f, -0.908541f, -0.925665f, -0.944278f, -0.965081f, -0.991098f, -1.015883f, -1.012611f, -0.952141f, -0.840918f, -0.727278f, -0.656859f, -0.632381f}, - {-0.126193f, -0.409379f, -0.770915f, -0.941927f, -0.770060f, -0.305875f, 0.262088f, 0.749508f, 1.068164f, 1.217448f, 1.229991f, 1.138532f, 0.972214f, 0.757355f, 0.514633f, 0.259993f, 0.008395f, -0.226177f, -0.433546f, -0.608821f, -0.752615f, -0.870118f, -0.967021f, -1.044852f, -1.101784f, -1.138051f, -1.158261f, -1.168128f, -1.171126f, -1.168620f, -1.161027f, -1.148005f, -1.129009f, -1.104516f, -1.076132f, -1.045356f, -1.012656f, -0.977512f, -0.938926f, -0.896304f, -0.850314f, -0.802692f, -0.754998f, -0.707919f, -0.661694f, -0.616510f, -0.572388f, -0.529305f, -0.487590f, -0.447788f, -0.410045f, -0.373936f, -0.338864f, -0.304430f, -0.270631f, -0.237903f, -0.206810f, -0.177634f, -0.150497f, -0.125709f, -0.103489f, -0.083471f, -0.065037f, -0.048044f, -0.032597f, -0.018295f, -0.004431f, 0.009163f, 0.022189f, 0.034707f, 0.047174f, 0.059713f, 0.072094f, 0.084452f, 0.097346f, 0.111038f, 0.125310f, 0.140074f, 0.155621f, 0.172102f, 0.189235f, 0.206705f, 0.224555f, 0.242985f, 0.261989f, 0.281321f, 0.300697f, 0.319952f, 0.339143f, 0.358700f, 0.379378f, 0.401765f, 0.425720f, 0.450446f, 0.475248f, 0.500046f, - 0.525001f, 0.549812f, 0.573628f, 0.595576f, 0.615206f, 0.632568f, 0.647989f, 0.661616f, 0.673019f, 0.681460f, 0.686704f, 0.689348f, 0.690254f, 0.689954f, 0.688764f, 0.687137f, 0.685645f, 0.684742f, 0.684652f, 0.685353f, 0.686715f, 0.688850f, 0.692213f, 0.697136f, 0.703389f, 0.710382f, 0.717558f, 0.724449f, 0.730762f, 0.736643f, 0.742509f, 0.748462f, 0.754275f, 0.759964f, 0.765773f, 0.771574f, 0.776977f, 0.781995f, 0.786951f, 0.791913f, 0.796914f, 0.802402f, 0.808694f, 0.815443f, 0.822369f, 0.829834f, 0.838049f, 0.846765f, 0.856294f, 0.867454f, 0.880120f, 0.893624f, 0.908541f, 0.925665f, 0.944278f, 0.965081f, 0.991098f, 1.015883f, 1.012611f, 0.952141f, 0.840918f, 0.727278f, 0.656859f, 0.632381f} - }, - { - {0.100473f, 0.081403f, 0.008408f, -0.096160f, -0.142910f, -0.086957f, 0.009676f, 0.059490f, 0.045841f, 0.005967f, -0.036022f, -0.074745f, -0.093081f, -0.074850f, -0.037707f, -0.016301f, -0.015759f, -0.009186f, 0.021343f, 0.065496f, 0.106277f, 0.139333f, 0.165707f, 0.180998f, 0.180229f, 0.166656f, 0.149972f, 0.137718f, 0.130014f, 0.121165f, 0.105833f, 0.084123f, 0.060463f, 0.038655f, 0.020340f, 0.007598f, 0.003439f, 0.008540f, 0.019735f, 0.032727f, 0.044961f, 0.055618f, 0.064410f, 0.071075f, 0.075329f, 0.076972f, 0.076175f, 0.073282f, 0.067999f, 0.059179f, 0.045627f, 0.026803f, 0.002818f, -0.025852f, -0.058657f, -0.095222f, -0.135136f, -0.177554f, -0.221503f, -0.266485f, -0.312117f, -0.357344f, -0.400888f, -0.442195f, -0.480948f, -0.515968f, -0.545732f, -0.569651f, -0.587751f, -0.599520f, -0.604194f, -0.601692f, -0.592207f, -0.575564f, -0.552090f, -0.523307f, -0.490573f, -0.453940f, -0.413752f, -0.372396f, -0.332738f, -0.295372f, -0.259306f, -0.225175f, -0.195768f, -0.172732f, -0.154358f, -0.137922f, -0.123460f, -0.113695f, -0.110203f, -0.111037f, -0.112826f, -0.114219f, -0.116218f, -0.119819f, - -0.124632f, -0.129608f, -0.133861f, -0.136539f, -0.136862f, -0.134717f, -0.130731f, -0.125401f, -0.118326f, -0.108409f, -0.094822f, -0.077996f, -0.059675f, -0.041714f, -0.024804f, -0.008597f, 0.007173f, 0.022215f, 0.036085f, 0.048349f, 0.058347f, 0.065338f, 0.068946f, 0.069169f, 0.066144f, 0.060186f, 0.051779f, 0.041215f, 0.028539f, 0.014060f, -0.001423f, -0.017088f, -0.032440f, -0.047116f, -0.060725f, -0.072923f, -0.083344f, -0.091603f, -0.097740f, -0.102516f, -0.106948f, -0.111785f, -0.117487f, -0.124080f, -0.130710f, -0.136046f, -0.139531f, -0.141637f, -0.142666f, -0.142187f, -0.140003f, -0.136622f, -0.132265f, -0.126492f, -0.119386f, -0.111731f, -0.102678f, -0.088388f, -0.065422f, -0.036215f, -0.009683f, 0.005414f, 0.008111f, 0.005632f}, - {0.100473f, 0.081403f, 0.008408f, -0.096160f, -0.142910f, -0.086957f, 0.009676f, 0.059490f, 0.045841f, 0.005967f, -0.036022f, -0.074745f, -0.093081f, -0.074850f, -0.037707f, -0.016301f, -0.015759f, -0.009186f, 0.021343f, 0.065496f, 0.106277f, 0.139333f, 0.165707f, 0.180998f, 0.180229f, 0.166656f, 0.149972f, 0.137718f, 0.130014f, 0.121165f, 0.105833f, 0.084123f, 0.060463f, 0.038655f, 0.020340f, 0.007598f, 0.003439f, 0.008540f, 0.019735f, 0.032727f, 0.044961f, 0.055618f, 0.064410f, 0.071075f, 0.075329f, 0.076972f, 0.076175f, 0.073282f, 0.067999f, 0.059179f, 0.045627f, 0.026803f, 0.002818f, -0.025852f, -0.058657f, -0.095222f, -0.135136f, -0.177554f, -0.221503f, -0.266485f, -0.312117f, -0.357344f, -0.400888f, -0.442195f, -0.480948f, -0.515968f, -0.545732f, -0.569651f, -0.587751f, -0.599520f, -0.604194f, -0.601692f, -0.592207f, -0.575564f, -0.552090f, -0.523307f, -0.490573f, -0.453940f, -0.413752f, -0.372396f, -0.332738f, -0.295372f, -0.259306f, -0.225175f, -0.195768f, -0.172732f, -0.154358f, -0.137922f, -0.123460f, -0.113695f, -0.110203f, -0.111037f, -0.112826f, -0.114219f, -0.116218f, -0.119819f, - -0.124632f, -0.129608f, -0.133861f, -0.136539f, -0.136862f, -0.134717f, -0.130731f, -0.125401f, -0.118326f, -0.108409f, -0.094822f, -0.077996f, -0.059675f, -0.041714f, -0.024804f, -0.008597f, 0.007173f, 0.022215f, 0.036085f, 0.048349f, 0.058347f, 0.065338f, 0.068946f, 0.069169f, 0.066144f, 0.060186f, 0.051779f, 0.041215f, 0.028539f, 0.014060f, -0.001423f, -0.017088f, -0.032440f, -0.047116f, -0.060725f, -0.072923f, -0.083344f, -0.091603f, -0.097740f, -0.102516f, -0.106948f, -0.111785f, -0.117487f, -0.124080f, -0.130710f, -0.136046f, -0.139531f, -0.141637f, -0.142666f, -0.142187f, -0.140003f, -0.136622f, -0.132265f, -0.126492f, -0.119386f, -0.111731f, -0.102678f, -0.088388f, -0.065422f, -0.036215f, -0.009683f, 0.005414f, 0.008111f, 0.005632f} - }, - { - {0.084126f, 0.110632f, 0.109927f, 0.052485f, -0.019287f, -0.038848f, 0.005122f, 0.057928f, 0.061429f, 0.008547f, -0.063703f, -0.116047f, -0.133935f, -0.126590f, -0.112671f, -0.104392f, -0.098006f, -0.079140f, -0.038844f, 0.018165f, 0.081196f, 0.143237f, 0.200149f, 0.247159f, 0.282929f, 0.314126f, 0.349526f, 0.390018f, 0.428654f, 0.459758f, 0.483418f, 0.500784f, 0.509421f, 0.505506f, 0.488086f, 0.458967f, 0.419791f, 0.371480f, 0.316363f, 0.259016f, 0.204186f, 0.154396f, 0.109872f, 0.070078f, 0.034584f, 0.002707f, -0.026736f, -0.054704f, -0.081058f, -0.104625f, -0.124002f, -0.138182f, -0.146792f, -0.150463f, -0.151151f, -0.151495f, -0.153367f, -0.157201f, -0.162792f, -0.170016f, -0.178380f, -0.186711f, -0.194159f, -0.201018f, -0.207832f, -0.214370f, -0.220282f, -0.225993f, -0.231839f, -0.237070f, -0.240921f, -0.243936f, -0.246870f, -0.248962f, -0.248825f, -0.246404f, -0.242360f, -0.236067f, -0.226121f, -0.212667f, -0.197275f, -0.180428f, -0.161038f, -0.138916f, -0.116002f, -0.094379f, -0.074355f, -0.055230f, -0.036702f, -0.018555f, 0.000018f, 0.019490f, 0.038874f, 0.056640f, 0.072553f, 0.087565f, - 0.101794f, 0.113622f, 0.121301f, 0.124936f, 0.126283f, 0.126618f, 0.125103f, 0.119406f, 0.107998f, 0.091827f, 0.073557f, 0.055064f, 0.035918f, 0.014525f, -0.009510f, -0.034439f, -0.057660f, -0.077747f, -0.095384f, -0.112527f, -0.130553f, -0.149032f, -0.166196f, -0.180522f, -0.191817f, -0.201118f, -0.209934f, -0.219423f, -0.229793f, -0.240368f, -0.250415f, -0.259888f, -0.269297f, -0.279146f, -0.289735f, -0.301233f, -0.313608f, -0.326568f, -0.339762f, -0.352968f, -0.366026f, -0.378749f, -0.390962f, -0.402499f, -0.413143f, -0.422598f, -0.430524f, -0.436635f, -0.440820f, -0.443116f, -0.443609f, -0.442643f, -0.440995f, -0.439351f, -0.437985f, -0.437691f, -0.439475f, -0.440249f, -0.429869f, -0.398587f, -0.350485f, -0.304484f, -0.277094f, -0.267957f}, - {0.084126f, 0.110632f, 0.109927f, 0.052485f, -0.019287f, -0.038848f, 0.005122f, 0.057928f, 0.061429f, 0.008547f, -0.063703f, -0.116047f, -0.133935f, -0.126590f, -0.112671f, -0.104392f, -0.098006f, -0.079140f, -0.038844f, 0.018165f, 0.081196f, 0.143237f, 0.200149f, 0.247159f, 0.282929f, 0.314126f, 0.349526f, 0.390018f, 0.428654f, 0.459758f, 0.483418f, 0.500784f, 0.509421f, 0.505506f, 0.488086f, 0.458967f, 0.419791f, 0.371480f, 0.316363f, 0.259016f, 0.204186f, 0.154396f, 0.109872f, 0.070078f, 0.034584f, 0.002707f, -0.026736f, -0.054704f, -0.081058f, -0.104625f, -0.124002f, -0.138182f, -0.146792f, -0.150463f, -0.151151f, -0.151495f, -0.153367f, -0.157201f, -0.162792f, -0.170016f, -0.178380f, -0.186711f, -0.194159f, -0.201018f, -0.207832f, -0.214370f, -0.220282f, -0.225993f, -0.231839f, -0.237070f, -0.240921f, -0.243936f, -0.246870f, -0.248962f, -0.248825f, -0.246404f, -0.242360f, -0.236067f, -0.226121f, -0.212667f, -0.197275f, -0.180428f, -0.161038f, -0.138916f, -0.116002f, -0.094379f, -0.074355f, -0.055230f, -0.036702f, -0.018555f, 0.000018f, 0.019490f, 0.038874f, 0.056640f, 0.072553f, 0.087565f, - 0.101794f, 0.113622f, 0.121301f, 0.124936f, 0.126283f, 0.126618f, 0.125103f, 0.119406f, 0.107998f, 0.091827f, 0.073557f, 0.055064f, 0.035918f, 0.014525f, -0.009510f, -0.034439f, -0.057660f, -0.077747f, -0.095384f, -0.112527f, -0.130553f, -0.149032f, -0.166196f, -0.180522f, -0.191817f, -0.201118f, -0.209934f, -0.219423f, -0.229793f, -0.240368f, -0.250415f, -0.259888f, -0.269297f, -0.279146f, -0.289735f, -0.301233f, -0.313608f, -0.326568f, -0.339762f, -0.352968f, -0.366026f, -0.378749f, -0.390962f, -0.402499f, -0.413143f, -0.422598f, -0.430524f, -0.436635f, -0.440820f, -0.443116f, -0.443609f, -0.442643f, -0.440995f, -0.439351f, -0.437985f, -0.437691f, -0.439475f, -0.440249f, -0.429869f, -0.398587f, -0.350485f, -0.304484f, -0.277094f, -0.267957f} - } -}; -const float CRendBin_FOA_HRIR_coeff_im_32kHz[4][BINAURAL_CHANNELS][160]={ - { - {-0.232358f, -0.618932f, -0.817988f, -0.822429f, -0.704120f, -0.543614f, -0.378833f, -0.206926f, -0.018121f, 0.180000f, 0.364897f, 0.514426f, 0.616459f, 0.668682f, 0.675051f, 0.643723f, 0.585693f, 0.511949f, 0.429816f, 0.341780f, 0.248555f, 0.153155f, 0.060910f, -0.024611f, -0.104107f, -0.179953f, -0.252112f, -0.317896f, -0.375138f, -0.424053f, -0.465990f, -0.501801f, -0.532062f, -0.557932f, -0.580799f, -0.601232f, -0.618935f, -0.633778f, -0.646448f, -0.657961f, -0.668856f, -0.679034f, -0.688176f, -0.696064f, -0.702581f, -0.707694f, -0.711504f, -0.714221f, -0.716020f, -0.716930f, -0.716876f, -0.715816f, -0.713811f, -0.710965f, -0.707339f, -0.703007f, -0.698153f, -0.693006f, -0.687652f, -0.682057f, -0.676269f, -0.670441f, -0.664614f, -0.658690f, -0.652674f, -0.646792f, -0.641260f, -0.636117f, -0.631369f, -0.627101f, -0.623357f, -0.620039f, -0.617052f, -0.614426f, -0.612191f, -0.610248f, -0.608457f, -0.606735f, -0.604964f, -0.602902f, -0.600284f, -0.596973f, -0.592896f, -0.587908f, -0.581839f, -0.574727f, -0.566872f, -0.558610f, -0.550047f, -0.541068f, -0.531535f, -0.521448f, -0.510981f, -0.500437f, -0.490122f, -0.480207f, - -0.470732f, -0.461729f, -0.453265f, -0.445358f, -0.437994f, -0.431236f, -0.425185f, -0.419778f, -0.414766f, -0.409960f, -0.405367f, -0.401056f, -0.396961f, -0.392823f, -0.388266f, -0.382991f, -0.376987f, -0.370509f, -0.363780f, -0.356832f, -0.349674f, -0.342400f, -0.335071f, -0.327671f, -0.320250f, -0.312889f, -0.305495f, -0.297875f, -0.290005f, -0.282015f, -0.273947f, -0.265780f, -0.257599f, -0.249466f, -0.241282f, -0.233043f, -0.224988f, -0.217256f, -0.209671f, -0.202109f, -0.194641f, -0.187154f, -0.179346f, -0.171265f, -0.163191f, -0.154940f, -0.146069f, -0.136661f, -0.126931f, -0.116365f, -0.104453f, -0.091629f, -0.077926f, -0.061879f, -0.042494f, -0.019328f, 0.013280f, 0.066673f, 0.141327f, 0.209865f, 0.231108f, 0.189731f, 0.112424f, 0.035208f}, - {-0.232358f, -0.618932f, -0.817988f, -0.822429f, -0.704120f, -0.543614f, -0.378833f, -0.206926f, -0.018121f, 0.180000f, 0.364897f, 0.514426f, 0.616459f, 0.668682f, 0.675051f, 0.643723f, 0.585693f, 0.511949f, 0.429816f, 0.341780f, 0.248555f, 0.153155f, 0.060910f, -0.024611f, -0.104107f, -0.179953f, -0.252112f, -0.317896f, -0.375138f, -0.424053f, -0.465990f, -0.501801f, -0.532062f, -0.557932f, -0.580799f, -0.601232f, -0.618935f, -0.633778f, -0.646448f, -0.657961f, -0.668856f, -0.679034f, -0.688176f, -0.696064f, -0.702581f, -0.707694f, -0.711504f, -0.714221f, -0.716020f, -0.716930f, -0.716876f, -0.715816f, -0.713811f, -0.710965f, -0.707339f, -0.703007f, -0.698153f, -0.693006f, -0.687652f, -0.682057f, -0.676269f, -0.670441f, -0.664614f, -0.658690f, -0.652674f, -0.646792f, -0.641260f, -0.636117f, -0.631369f, -0.627101f, -0.623357f, -0.620039f, -0.617052f, -0.614426f, -0.612191f, -0.610248f, -0.608457f, -0.606735f, -0.604964f, -0.602902f, -0.600284f, -0.596973f, -0.592896f, -0.587908f, -0.581839f, -0.574727f, -0.566872f, -0.558610f, -0.550047f, -0.541068f, -0.531535f, -0.521448f, -0.510981f, -0.500437f, -0.490122f, -0.480207f, - -0.470732f, -0.461729f, -0.453265f, -0.445358f, -0.437994f, -0.431236f, -0.425185f, -0.419778f, -0.414766f, -0.409960f, -0.405367f, -0.401056f, -0.396961f, -0.392823f, -0.388266f, -0.382991f, -0.376987f, -0.370509f, -0.363780f, -0.356832f, -0.349674f, -0.342400f, -0.335071f, -0.327671f, -0.320250f, -0.312889f, -0.305495f, -0.297875f, -0.290005f, -0.282015f, -0.273947f, -0.265780f, -0.257599f, -0.249466f, -0.241282f, -0.233043f, -0.224988f, -0.217256f, -0.209671f, -0.202109f, -0.194641f, -0.187154f, -0.179346f, -0.171265f, -0.163191f, -0.154940f, -0.146069f, -0.136661f, -0.126931f, -0.116365f, -0.104453f, -0.091629f, -0.077926f, -0.061879f, -0.042494f, -0.019328f, 0.013280f, 0.066673f, 0.141327f, 0.209865f, 0.231108f, 0.189731f, 0.112424f, 0.035208f} - }, - { - {0.140725f, 0.285846f, 0.114832f, -0.338829f, -0.858853f, -1.200757f, -1.243681f, -1.024467f, -0.658777f, -0.249357f, 0.145208f, 0.495328f, 0.784769f, 1.007322f, 1.163699f, 1.256377f, 1.289073f, 1.269367f, 1.208734f, 1.120266f, 1.016312f, 0.905408f, 0.790167f, 0.670170f, 0.547622f, 0.428343f, 0.317200f, 0.214919f, 0.119693f, 0.029734f, -0.056227f, -0.138879f, -0.217755f, -0.291611f, -0.359863f, -0.423205f, -0.482880f, -0.539767f, -0.593809f, -0.643836f, -0.688282f, -0.726462f, -0.758927f, -0.786612f, -0.810154f, -0.830039f, -0.846690f, -0.860232f, -0.870666f, -0.878418f, -0.884314f, -0.889009f, -0.892646f, -0.894952f, -0.895464f, -0.893873f, -0.890318f, -0.885190f, -0.878745f, -0.871264f, -0.863433f, -0.855991f, -0.849090f, -0.842574f, -0.836712f, -0.831995f, -0.828338f, -0.825230f, -0.822595f, -0.820794f, -0.819852f, -0.819422f, -0.819501f, -0.820450f, -0.822267f, -0.824464f, -0.826748f, -0.829242f, -0.831935f, -0.834417f, -0.836352f, -0.837828f, -0.839046f, -0.839930f, -0.840203f, -0.839703f, -0.838501f, -0.836856f, -0.835153f, -0.833735f, -0.832516f, -0.830749f, -0.827395f, -0.821885f, -0.814387f, -0.805210f, - -0.794148f, -0.780636f, -0.764422f, -0.745876f, -0.725740f, -0.704713f, -0.683108f, -0.660784f, -0.637569f, -0.613932f, -0.590994f, -0.569749f, -0.550511f, -0.533220f, -0.517926f, -0.504746f, -0.493587f, -0.484110f, -0.475879f, -0.468521f, -0.461919f, -0.456181f, -0.451182f, -0.446293f, -0.440761f, -0.434205f, -0.426610f, -0.418162f, -0.409301f, -0.400521f, -0.391893f, -0.383127f, -0.374182f, -0.365278f, -0.356340f, -0.347069f, -0.337579f, -0.328306f, -0.319353f, -0.310619f, -0.302285f, -0.294430f, -0.286564f, -0.278288f, -0.269879f, -0.261530f, -0.252867f, -0.243819f, -0.234732f, -0.225124f, -0.213896f, -0.200946f, -0.186484f, -0.169123f, -0.147421f, -0.120998f, -0.084260f, -0.023064f, 0.068036f, 0.162002f, 0.209461f, 0.185183f, 0.113708f, 0.036109f}, - {-0.140725f, -0.285846f, -0.114832f, 0.338829f, 0.858853f, 1.200757f, 1.243681f, 1.024467f, 0.658777f, 0.249357f, -0.145208f, -0.495328f, -0.784769f, -1.007322f, -1.163699f, -1.256377f, -1.289073f, -1.269367f, -1.208734f, -1.120266f, -1.016312f, -0.905408f, -0.790167f, -0.670170f, -0.547622f, -0.428343f, -0.317200f, -0.214919f, -0.119693f, -0.029734f, 0.056227f, 0.138879f, 0.217755f, 0.291611f, 0.359863f, 0.423205f, 0.482880f, 0.539767f, 0.593809f, 0.643836f, 0.688282f, 0.726462f, 0.758927f, 0.786612f, 0.810154f, 0.830039f, 0.846690f, 0.860232f, 0.870666f, 0.878418f, 0.884314f, 0.889009f, 0.892646f, 0.894952f, 0.895464f, 0.893873f, 0.890318f, 0.885190f, 0.878745f, 0.871264f, 0.863433f, 0.855991f, 0.849090f, 0.842574f, 0.836712f, 0.831995f, 0.828338f, 0.825230f, 0.822595f, 0.820794f, 0.819852f, 0.819422f, 0.819501f, 0.820450f, 0.822267f, 0.824464f, 0.826748f, 0.829242f, 0.831935f, 0.834417f, 0.836352f, 0.837828f, 0.839046f, 0.839930f, 0.840203f, 0.839703f, 0.838501f, 0.836856f, 0.835153f, 0.833735f, 0.832516f, 0.830749f, 0.827395f, 0.821885f, 0.814387f, 0.805210f, - 0.794148f, 0.780636f, 0.764422f, 0.745876f, 0.725740f, 0.704713f, 0.683108f, 0.660784f, 0.637569f, 0.613932f, 0.590994f, 0.569749f, 0.550511f, 0.533220f, 0.517926f, 0.504746f, 0.493587f, 0.484110f, 0.475879f, 0.468521f, 0.461919f, 0.456181f, 0.451182f, 0.446293f, 0.440761f, 0.434205f, 0.426610f, 0.418162f, 0.409301f, 0.400521f, 0.391893f, 0.383127f, 0.374182f, 0.365278f, 0.356340f, 0.347069f, 0.337579f, 0.328306f, 0.319353f, 0.310619f, 0.302285f, 0.294430f, 0.286564f, 0.278288f, 0.269879f, 0.261530f, 0.252867f, 0.243819f, 0.234732f, 0.225124f, 0.213896f, 0.200946f, 0.186484f, 0.169123f, 0.147421f, 0.120998f, 0.084260f, 0.023064f, -0.068036f, -0.162002f, -0.209461f, -0.185183f, -0.113708f, -0.036109f} - }, - { - {-0.025748f, -0.088043f, -0.139476f, -0.115197f, -0.011193f, 0.082969f, 0.088942f, 0.026588f, -0.034225f, -0.061322f, -0.062307f, -0.039701f, 0.006935f, 0.053627f, 0.070634f, 0.063527f, 0.064625f, 0.086525f, 0.109466f, 0.113177f, 0.098256f, 0.073370f, 0.040304f, -0.000903f, -0.043184f, -0.076634f, -0.097864f, -0.111901f, -0.126411f, -0.144854f, -0.164041f, -0.178000f, -0.183770f, -0.182295f, -0.174892f, -0.162161f, -0.146640f, -0.133405f, -0.126594f, -0.126862f, -0.132675f, -0.142567f, -0.155716f, -0.171595f, -0.189741f, -0.209590f, -0.230631f, -0.252944f, -0.277113f, -0.303296f, -0.330673f, -0.357881f, -0.383611f, -0.406858f, -0.426972f, -0.443418f, -0.455456f, -0.462382f, -0.464036f, -0.460461f, -0.451211f, -0.435760f, -0.414371f, -0.387638f, -0.355468f, -0.317605f, -0.274841f, -0.228581f, -0.179590f, -0.128261f, -0.075652f, -0.023161f, 0.028274f, 0.077590f, 0.123014f, 0.163229f, 0.198282f, 0.228110f, 0.251149f, 0.266010f, 0.273735f, 0.276588f, 0.274993f, 0.267638f, 0.254778f, 0.239529f, 0.224852f, 0.210436f, 0.194008f, 0.175358f, 0.157564f, 0.143811f, 0.134209f, 0.126617f, 0.119747f, 0.114269f, - 0.111331f, 0.111312f, 0.114089f, 0.119358f, 0.126337f, 0.133893f, 0.141375f, 0.149029f, 0.157354f, 0.166105f, 0.173888f, 0.178773f, 0.179595f, 0.176738f, 0.171416f, 0.164301f, 0.155212f, 0.143845f, 0.130161f, 0.114157f, 0.095909f, 0.075932f, 0.055076f, 0.034130f, 0.013765f, -0.005393f, -0.022978f, -0.038882f, -0.052804f, -0.064120f, -0.072409f, -0.077779f, -0.080530f, -0.080874f, -0.079051f, -0.075375f, -0.070202f, -0.064178f, -0.058307f, -0.053393f, -0.049529f, -0.046287f, -0.042980f, -0.038600f, -0.032246f, -0.024048f, -0.015064f, -0.005957f, 0.003498f, 0.013364f, 0.023023f, 0.032130f, 0.041053f, 0.049833f, 0.057916f, 0.065747f, 0.075176f, 0.086297f, 0.094235f, 0.091380f, 0.074398f, 0.048616f, 0.024108f, 0.006730f}, - {-0.025748f, -0.088043f, -0.139476f, -0.115197f, -0.011193f, 0.082969f, 0.088942f, 0.026588f, -0.034225f, -0.061322f, -0.062307f, -0.039701f, 0.006935f, 0.053627f, 0.070634f, 0.063527f, 0.064625f, 0.086525f, 0.109466f, 0.113177f, 0.098256f, 0.073370f, 0.040304f, -0.000903f, -0.043184f, -0.076634f, -0.097864f, -0.111901f, -0.126411f, -0.144854f, -0.164041f, -0.178000f, -0.183770f, -0.182295f, -0.174892f, -0.162161f, -0.146640f, -0.133405f, -0.126594f, -0.126862f, -0.132675f, -0.142567f, -0.155716f, -0.171595f, -0.189741f, -0.209590f, -0.230631f, -0.252944f, -0.277113f, -0.303296f, -0.330673f, -0.357881f, -0.383611f, -0.406858f, -0.426972f, -0.443418f, -0.455456f, -0.462382f, -0.464036f, -0.460461f, -0.451211f, -0.435760f, -0.414371f, -0.387638f, -0.355468f, -0.317605f, -0.274841f, -0.228581f, -0.179590f, -0.128261f, -0.075652f, -0.023161f, 0.028274f, 0.077590f, 0.123014f, 0.163229f, 0.198282f, 0.228110f, 0.251149f, 0.266010f, 0.273735f, 0.276588f, 0.274993f, 0.267638f, 0.254778f, 0.239529f, 0.224852f, 0.210436f, 0.194008f, 0.175358f, 0.157564f, 0.143811f, 0.134209f, 0.126617f, 0.119747f, 0.114269f, - 0.111331f, 0.111312f, 0.114089f, 0.119358f, 0.126337f, 0.133893f, 0.141375f, 0.149029f, 0.157354f, 0.166105f, 0.173888f, 0.178773f, 0.179595f, 0.176738f, 0.171416f, 0.164301f, 0.155212f, 0.143845f, 0.130161f, 0.114157f, 0.095909f, 0.075932f, 0.055076f, 0.034130f, 0.013765f, -0.005393f, -0.022978f, -0.038882f, -0.052804f, -0.064120f, -0.072409f, -0.077779f, -0.080530f, -0.080874f, -0.079051f, -0.075375f, -0.070202f, -0.064178f, -0.058307f, -0.053393f, -0.049529f, -0.046287f, -0.042980f, -0.038600f, -0.032246f, -0.024048f, -0.015064f, -0.005957f, 0.003498f, 0.013364f, 0.023023f, 0.032130f, 0.041053f, 0.049833f, 0.057916f, 0.065747f, 0.075176f, 0.086297f, 0.094235f, 0.091380f, 0.074398f, 0.048616f, 0.024108f, 0.006730f} - }, - { - {0.004469f, -0.013004f, -0.069105f, -0.111166f, -0.088832f, -0.021733f, 0.020879f, -0.001719f, -0.063420f, -0.107499f, -0.101798f, -0.054848f, 0.005100f, 0.055067f, 0.089328f, 0.118238f, 0.155712f, 0.203896f, 0.250771f, 0.283001f, 0.296634f, 0.294104f, 0.277764f, 0.251482f, 0.223398f, 0.199881f, 0.177918f, 0.148605f, 0.107643f, 0.058242f, 0.004301f, -0.054426f, -0.119079f, -0.187240f, -0.254072f, -0.316062f, -0.371526f, -0.418353f, -0.453530f, -0.475436f, -0.485529f, -0.487199f, -0.483439f, -0.475999f, -0.466072f, -0.454762f, -0.442562f, -0.428896f, -0.412688f, -0.393430f, -0.371644f, -0.348652f, -0.326306f, -0.306758f, -0.291674f, -0.281173f, -0.273835f, -0.267982f, -0.262603f, -0.256924f, -0.250004f, -0.241478f, -0.232071f, -0.222562f, -0.212764f, -0.202253f, -0.191316f, -0.180223f, -0.168324f, -0.155035f, -0.140988f, -0.126915f, -0.112130f, -0.095556f, -0.077601f, -0.059440f, -0.041038f, -0.021717f, -0.002289f, 0.015312f, 0.030501f, 0.044216f, 0.056422f, 0.065288f, 0.069528f, 0.070062f, 0.068614f, 0.065893f, 0.061937f, 0.057048f, 0.051195f, 0.043250f, 0.032044f, 0.017911f, 0.002122f, -0.015098f, - -0.034951f, -0.058147f, -0.083429f, -0.108599f, -0.132778f, -0.157148f, -0.183384f, -0.211440f, -0.238983f, -0.263177f, -0.283075f, -0.300073f, -0.315887f, -0.330370f, -0.341598f, -0.347926f, -0.349714f, -0.349134f, -0.348462f, -0.348374f, -0.347673f, -0.344642f, -0.338765f, -0.331173f, -0.323708f, -0.317734f, -0.313552f, -0.310449f, -0.307281f, -0.303381f, -0.299002f, -0.294820f, -0.291172f, -0.287927f, -0.284777f, -0.281331f, -0.277114f, -0.271760f, -0.265156f, -0.257312f, -0.248203f, -0.237804f, -0.226127f, -0.213169f, -0.198913f, -0.183401f, -0.166800f, -0.149450f, -0.131791f, -0.114224f, -0.097167f, -0.081134f, -0.066331f, -0.052328f, -0.038637f, -0.024717f, -0.007855f, 0.017147f, 0.051304f, 0.083630f, 0.096079f, 0.080803f, 0.048580f, 0.015325f}, - {0.004469f, -0.013004f, -0.069105f, -0.111166f, -0.088832f, -0.021733f, 0.020879f, -0.001719f, -0.063420f, -0.107499f, -0.101798f, -0.054848f, 0.005100f, 0.055067f, 0.089328f, 0.118238f, 0.155712f, 0.203896f, 0.250771f, 0.283001f, 0.296634f, 0.294104f, 0.277764f, 0.251482f, 0.223398f, 0.199881f, 0.177918f, 0.148605f, 0.107643f, 0.058242f, 0.004301f, -0.054426f, -0.119079f, -0.187240f, -0.254072f, -0.316062f, -0.371526f, -0.418353f, -0.453530f, -0.475436f, -0.485529f, -0.487199f, -0.483439f, -0.475999f, -0.466072f, -0.454762f, -0.442562f, -0.428896f, -0.412688f, -0.393430f, -0.371644f, -0.348652f, -0.326306f, -0.306758f, -0.291674f, -0.281173f, -0.273835f, -0.267982f, -0.262603f, -0.256924f, -0.250004f, -0.241478f, -0.232071f, -0.222562f, -0.212764f, -0.202253f, -0.191316f, -0.180223f, -0.168324f, -0.155035f, -0.140988f, -0.126915f, -0.112130f, -0.095556f, -0.077601f, -0.059440f, -0.041038f, -0.021717f, -0.002289f, 0.015312f, 0.030501f, 0.044216f, 0.056422f, 0.065288f, 0.069528f, 0.070062f, 0.068614f, 0.065893f, 0.061937f, 0.057048f, 0.051195f, 0.043250f, 0.032044f, 0.017911f, 0.002122f, -0.015098f, - -0.034951f, -0.058147f, -0.083429f, -0.108599f, -0.132778f, -0.157148f, -0.183384f, -0.211440f, -0.238983f, -0.263177f, -0.283075f, -0.300073f, -0.315887f, -0.330370f, -0.341598f, -0.347926f, -0.349714f, -0.349134f, -0.348462f, -0.348374f, -0.347673f, -0.344642f, -0.338765f, -0.331173f, -0.323708f, -0.317734f, -0.313552f, -0.310449f, -0.307281f, -0.303381f, -0.299002f, -0.294820f, -0.291172f, -0.287927f, -0.284777f, -0.281331f, -0.277114f, -0.271760f, -0.265156f, -0.257312f, -0.248203f, -0.237804f, -0.226127f, -0.213169f, -0.198913f, -0.183401f, -0.166800f, -0.149450f, -0.131791f, -0.114224f, -0.097167f, -0.081134f, -0.066331f, -0.052328f, -0.038637f, -0.024717f, -0.007855f, 0.017147f, 0.051304f, 0.083630f, 0.096079f, 0.080803f, 0.048580f, 0.015325f} - } -}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 16000 */ const int16_t CRendBin_FOA_HRIR_max_num_iterations_16kHz = 1; @@ -848,64 +123,15 @@ const uint16_t CRendBin_FOA_HRIR_num_iterations_16kHz[4][BINAURAL_CHANNELS]={{1, const uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz[4][BINAURAL_CHANNELS][1]={{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}}}; const uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_16kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[4]={0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz_fx[4]={0, 0, 0, 0}; -#endif const uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_FOA_HRIR_coeff_re_16kHz[4][BINAURAL_CHANNELS][80]={ - { - { 1.066299f, 0.831753f, 0.469820f, 0.113997f, -0.155945f, -0.332046f, -0.445167f, -0.521969f, -0.562027f, -0.547501f, -0.470580f, -0.344643f, -0.190080f, -0.022238f, 0.144217f, 0.293618f, 0.418613f, 0.521970f, 0.606614f, 0.672232f, 0.720345f, 0.753099f, 0.769493f, 0.770796f, 0.764174f, 0.753391f, 0.733696f, 0.702773f, 0.667010f, 0.631061f, 0.592423f, 0.551074f, 0.512366f, 0.477047f, 0.440550f, 0.403206f, 0.369206f, 0.337153f, 0.303479f, 0.270983f, 0.242735f, 0.214328f, 0.182386f, 0.151528f, 0.124233f, 0.095401f, 0.063829f, 0.035419f, 0.010359f, -0.017668f, -0.047701f, -0.073299f, -0.096723f, -0.124198f, -0.151868f, -0.173748f, -0.195138f, -0.221363f, -0.245696f, -0.264016f, -0.284769f, -0.310840f, -0.332497f, -0.348925f, -0.371386f, -0.398406f, -0.417735f, -0.434354f, -0.462032f, -0.492418f, -0.512100f, -0.536134f, -0.579084f, -0.619428f, -0.648156f, -0.709398f, -0.814740f, -0.869114f, -0.792023f, -0.672661f}, - { 1.066299f, 0.831753f, 0.469820f, 0.113997f, -0.155945f, -0.332046f, -0.445167f, -0.521969f, -0.562027f, -0.547501f, -0.470580f, -0.344643f, -0.190080f, -0.022238f, 0.144217f, 0.293618f, 0.418613f, 0.521970f, 0.606614f, 0.672232f, 0.720345f, 0.753099f, 0.769493f, 0.770796f, 0.764174f, 0.753391f, 0.733696f, 0.702773f, 0.667010f, 0.631061f, 0.592423f, 0.551074f, 0.512366f, 0.477047f, 0.440550f, 0.403206f, 0.369206f, 0.337153f, 0.303479f, 0.270983f, 0.242735f, 0.214328f, 0.182386f, 0.151528f, 0.124233f, 0.095401f, 0.063829f, 0.035419f, 0.010359f, -0.017668f, -0.047701f, -0.073299f, -0.096723f, -0.124198f, -0.151868f, -0.173748f, -0.195138f, -0.221363f, -0.245696f, -0.264016f, -0.284769f, -0.310840f, -0.332497f, -0.348925f, -0.371386f, -0.398406f, -0.417735f, -0.434354f, -0.462032f, -0.492418f, -0.512100f, -0.536134f, -0.579084f, -0.619428f, -0.648156f, -0.709398f, -0.814740f, -0.869114f, -0.792023f, -0.672661f} - }, - { - { 0.198789f, 0.479449f, 0.841384f, 1.014645f, 0.841631f, 0.375013f, -0.191824f, -0.677633f, -0.998453f, -1.149750f, -1.160640f, -1.068514f, -0.905139f, -0.691625f, -0.447031f, -0.192888f, 0.055312f, 0.289339f, 0.498414f, 0.671927f, 0.812235f, 0.929986f, 1.028010f, 1.102848f, 1.156570f, 1.193717f, 1.214057f, 1.219865f, 1.220241f, 1.218942f, 1.210137f, 1.192271f, 1.171448f, 1.148056f, 1.116865f, 1.080826f, 1.047158f, 1.012474f, 0.969360f, 0.921459f, 0.875238f, 0.826839f, 0.772906f, 0.720924f, 0.674871f, 0.627049f, 0.575132f, 0.527820f, 0.486114f, 0.441193f, 0.394366f, 0.354847f, 0.318787f, 0.276146f, 0.232314f, 0.196874f, 0.162640f, 0.121555f, 0.083765f, 0.056442f, 0.027308f, -0.009054f, -0.038581f, -0.059134f, -0.087738f, -0.123968f, -0.149625f, -0.170423f, -0.207343f, -0.249859f, -0.276408f, -0.306618f, -0.365081f, -0.423301f, -0.461101f, -0.538219f, -0.693008f, -0.822733f, -0.808512f, -0.718004f}, - { -0.198789f, -0.479449f, -0.841384f, -1.014645f, -0.841631f, -0.375013f, 0.191824f, 0.677633f, 0.998453f, 1.149750f, 1.160640f, 1.068514f, 0.905139f, 0.691625f, 0.447031f, 0.192888f, -0.055312f, -0.289339f, -0.498414f, -0.671927f, -0.812235f, -0.929986f, -1.028010f, -1.102848f, -1.156570f, -1.193717f, -1.214057f, -1.219865f, -1.220241f, -1.218942f, -1.210137f, -1.192271f, -1.171448f, -1.148056f, -1.116865f, -1.080826f, -1.047158f, -1.012474f, -0.969360f, -0.921459f, -0.875238f, -0.826839f, -0.772906f, -0.720924f, -0.674871f, -0.627049f, -0.575132f, -0.527820f, -0.486114f, -0.441193f, -0.394366f, -0.354847f, -0.318787f, -0.276146f, -0.232314f, -0.196874f, -0.162640f, -0.121555f, -0.083765f, -0.056442f, -0.027308f, 0.009054f, 0.038581f, 0.059134f, 0.087738f, 0.123968f, 0.149625f, 0.170423f, 0.207343f, 0.249859f, 0.276408f, 0.306618f, 0.365081f, 0.423301f, 0.461101f, 0.538219f, 0.693008f, 0.822733f, 0.808512f, 0.718004f} - }, - { - { 0.103651f, 0.085763f, 0.012539f, -0.093163f, -0.139453f, -0.082442f, 0.013534f, 0.062431f, 0.049641f, 0.010543f, -0.032439f, -0.071721f, -0.088915f, -0.070311f, -0.034358f, -0.013054f, -0.011243f, -0.004768f, 0.024546f, 0.069095f, 0.111091f, 0.143571f, 0.168893f, 0.185054f, 0.185266f, 0.170698f, 0.153302f, 0.142305f, 0.135188f, 0.125048f, 0.109492f, 0.089281f, 0.065694f, 0.042479f, 0.024528f, 0.013336f, 0.008677f, 0.012472f, 0.024654f, 0.039032f, 0.050209f, 0.059898f, 0.070266f, 0.077933f, 0.080669f, 0.081921f, 0.083181f, 0.080706f, 0.073626f, 0.065218f, 0.054022f, 0.034879f, 0.009091f, -0.018174f, -0.048558f, -0.086265f, -0.127620f, -0.167472f, -0.209212f, -0.256149f, -0.302368f, -0.343698f, -0.385541f, -0.429466f, -0.467232f, -0.496747f, -0.525598f, -0.552414f, -0.566656f, -0.570548f, -0.575284f, -0.574945f, -0.555162f, -0.525091f, -0.502518f, -0.469417f, -0.387422f, -0.261252f, -0.144788f, -0.082088f}, - { 0.103651f, 0.085763f, 0.012539f, -0.093163f, -0.139453f, -0.082442f, 0.013534f, 0.062431f, 0.049641f, 0.010543f, -0.032439f, -0.071721f, -0.088915f, -0.070311f, -0.034358f, -0.013054f, -0.011243f, -0.004768f, 0.024546f, 0.069095f, 0.111091f, 0.143571f, 0.168893f, 0.185054f, 0.185266f, 0.170698f, 0.153302f, 0.142305f, 0.135188f, 0.125048f, 0.109492f, 0.089281f, 0.065694f, 0.042479f, 0.024528f, 0.013336f, 0.008677f, 0.012472f, 0.024654f, 0.039032f, 0.050209f, 0.059898f, 0.070266f, 0.077933f, 0.080669f, 0.081921f, 0.083181f, 0.080706f, 0.073626f, 0.065218f, 0.054022f, 0.034879f, 0.009091f, -0.018174f, -0.048558f, -0.086265f, -0.127620f, -0.167472f, -0.209212f, -0.256149f, -0.302368f, -0.343698f, -0.385541f, -0.429466f, -0.467232f, -0.496747f, -0.525598f, -0.552414f, -0.566656f, -0.570548f, -0.575284f, -0.574945f, -0.555162f, -0.525091f, -0.502518f, -0.469417f, -0.387422f, -0.261252f, -0.144788f, -0.082088f} - }, - { - { 0.083483f, 0.110085f, 0.109339f, 0.051764f, -0.020010f, -0.039528f, 0.004322f, 0.056971f, 0.060463f, 0.007557f, -0.064887f, -0.117401f, -0.135318f, -0.128075f, -0.114412f, -0.106312f, -0.099989f, -0.081312f, -0.041326f, 0.015498f, 0.078415f, 0.140173f, 0.196734f, 0.243546f, 0.279130f, 0.309950f, 0.344966f, 0.385237f, 0.423595f, 0.454230f, 0.477480f, 0.494581f, 0.502830f, 0.498359f, 0.480501f, 0.451053f, 0.411362f, 0.362412f, 0.306822f, 0.249052f, 0.193565f, 0.143055f, 0.098009f, 0.057666f, 0.021358f, -0.011323f, -0.041360f, -0.070040f, -0.097383f, -0.121846f, -0.141922f, -0.157021f, -0.166819f, -0.171494f, -0.173029f, -0.174559f, -0.177852f, -0.182824f, -0.189469f, -0.198225f, -0.208300f, -0.217936f, -0.226727f, -0.235597f, -0.244500f, -0.252545f, -0.260216f, -0.268673f, -0.277131f, -0.284050f, -0.290328f, -0.297485f, -0.303758f, -0.307256f, -0.311324f, -0.317826f, -0.314403f, -0.281644f, -0.222084f, -0.172483f}, - { 0.083483f, 0.110085f, 0.109339f, 0.051764f, -0.020010f, -0.039528f, 0.004322f, 0.056971f, 0.060463f, 0.007557f, -0.064887f, -0.117401f, -0.135318f, -0.128075f, -0.114412f, -0.106312f, -0.099989f, -0.081312f, -0.041326f, 0.015498f, 0.078415f, 0.140173f, 0.196734f, 0.243546f, 0.279130f, 0.309950f, 0.344966f, 0.385237f, 0.423595f, 0.454230f, 0.477480f, 0.494581f, 0.502830f, 0.498359f, 0.480501f, 0.451053f, 0.411362f, 0.362412f, 0.306822f, 0.249052f, 0.193565f, 0.143055f, 0.098009f, 0.057666f, 0.021358f, -0.011323f, -0.041360f, -0.070040f, -0.097383f, -0.121846f, -0.141922f, -0.157021f, -0.166819f, -0.171494f, -0.173029f, -0.174559f, -0.177852f, -0.182824f, -0.189469f, -0.198225f, -0.208300f, -0.217936f, -0.226727f, -0.235597f, -0.244500f, -0.252545f, -0.260216f, -0.268673f, -0.277131f, -0.284050f, -0.290328f, -0.297485f, -0.303758f, -0.307256f, -0.311324f, -0.317826f, -0.314403f, -0.281644f, -0.222084f, -0.172483f} - } -}; -const float CRendBin_FOA_HRIR_coeff_im_16kHz[4][BINAURAL_CHANNELS][80]={ - { - { -0.232163f, -0.616528f, -0.811918f, -0.814798f, -0.695968f, -0.532619f, -0.364404f, -0.191506f, -0.001808f, 0.199692f, 0.387587f, 0.537698f, 0.641196f, 0.697162f, 0.705949f, 0.675021f, 0.619155f, 0.549292f, 0.468934f, 0.381382f, 0.291066f, 0.199434f, 0.108353f, 0.023680f, -0.052215f, -0.124647f, -0.196123f, -0.260439f, -0.313530f, -0.359586f, -0.401100f, -0.434616f, -0.460396f, -0.484091f, -0.506500f, -0.523681f, -0.536851f, -0.550232f, -0.562059f, -0.569337f, -0.575950f, -0.585287f, -0.592832f, -0.595580f, -0.598359f, -0.603032f, -0.604124f, -0.600994f, -0.599842f, -0.600349f, -0.596133f, -0.588817f, -0.584797f, -0.581075f, -0.571581f, -0.560976f, -0.555050f, -0.547876f, -0.534759f, -0.523342f, -0.517217f, -0.507305f, -0.491703f, -0.480933f, -0.474754f, -0.461397f, -0.443990f, -0.435549f, -0.429457f, -0.411877f, -0.393966f, -0.389373f, -0.379526f, -0.350778f, -0.331174f, -0.325571f, -0.264083f, -0.109094f, 0.034816f, 0.040644f}, - { -0.232163f, -0.616528f, -0.811918f, -0.814798f, -0.695968f, -0.532619f, -0.364404f, -0.191506f, -0.001808f, 0.199692f, 0.387587f, 0.537698f, 0.641196f, 0.697162f, 0.705949f, 0.675021f, 0.619155f, 0.549292f, 0.468934f, 0.381382f, 0.291066f, 0.199434f, 0.108353f, 0.023680f, -0.052215f, -0.124647f, -0.196123f, -0.260439f, -0.313530f, -0.359586f, -0.401100f, -0.434616f, -0.460396f, -0.484091f, -0.506500f, -0.523681f, -0.536851f, -0.550232f, -0.562059f, -0.569337f, -0.575950f, -0.585287f, -0.592832f, -0.595580f, -0.598359f, -0.603032f, -0.604124f, -0.600994f, -0.599842f, -0.600349f, -0.596133f, -0.588817f, -0.584797f, -0.581075f, -0.571581f, -0.560976f, -0.555050f, -0.547876f, -0.534759f, -0.523342f, -0.517217f, -0.507305f, -0.491703f, -0.480933f, -0.474754f, -0.461397f, -0.443990f, -0.435549f, -0.429457f, -0.411877f, -0.393966f, -0.389373f, -0.379526f, -0.350778f, -0.331174f, -0.325571f, -0.264083f, -0.109094f, 0.034816f, 0.040644f} - }, - { - { 0.140804f, 0.288820f, 0.122901f, -0.328836f, -0.848509f, -1.186567f, -1.224746f, -1.004466f, -0.637872f, -0.223802f, 0.174851f, 0.525416f, 0.816608f, 1.044355f, 1.203947f, 1.296780f, 1.332269f, 1.317962f, 1.259572f, 1.171367f, 1.071313f, 0.965637f, 0.851706f, 0.732493f, 0.614874f, 0.500288f, 0.389707f, 0.289113f, 0.199637f, 0.113528f, 0.027703f, -0.052051f, -0.124690f, -0.195739f, -0.263851f, -0.322890f, -0.376254f, -0.431439f, -0.484825f, -0.529101f, -0.567623f, -0.605089f, -0.635842f, -0.656446f, -0.674899f, -0.694758f, -0.708108f, -0.713529f, -0.720098f, -0.728010f, -0.728543f, -0.724531f, -0.725793f, -0.727741f, -0.720454f, -0.710172f, -0.705821f, -0.698895f, -0.681963f, -0.666550f, -0.659346f, -0.647466f, -0.627275f, -0.614491f, -0.610170f, -0.596698f, -0.576958f, -0.570455f, -0.569107f, -0.551386f, -0.531742f, -0.532880f, -0.530696f, -0.501217f, -0.483082f, -0.497277f, -0.457348f, -0.288094f, -0.085091f, 0.000003f}, - { -0.140804f, -0.288820f, -0.122901f, 0.328836f, 0.848509f, 1.186567f, 1.224746f, 1.004466f, 0.637872f, 0.223802f, -0.174851f, -0.525416f, -0.816608f, -1.044355f, -1.203947f, -1.296780f, -1.332269f, -1.317962f, -1.259572f, -1.171367f, -1.071313f, -0.965637f, -0.851706f, -0.732493f, -0.614874f, -0.500288f, -0.389707f, -0.289113f, -0.199637f, -0.113528f, -0.027703f, 0.052051f, 0.124690f, 0.195739f, 0.263851f, 0.322890f, 0.376254f, 0.431439f, 0.484825f, 0.529101f, 0.567623f, 0.605089f, 0.635842f, 0.656446f, 0.674899f, 0.694758f, 0.708108f, 0.713529f, 0.720098f, 0.728010f, 0.728543f, 0.724531f, 0.725793f, 0.727741f, 0.720454f, 0.710172f, 0.705821f, 0.698895f, 0.681963f, 0.666550f, 0.659346f, 0.647466f, 0.627275f, 0.614491f, 0.610170f, 0.596698f, 0.576958f, 0.570455f, 0.569107f, 0.551386f, 0.531742f, 0.532880f, 0.530696f, 0.501217f, 0.483082f, 0.497277f, 0.457348f, 0.288094f, 0.085091f, -0.000003f} - }, - { - { -0.025177f, -0.087633f, -0.140274f, -0.115695f, -0.010636f, 0.082920f, 0.087853f, 0.026212f, -0.033798f, -0.061874f, -0.063579f, -0.039952f, 0.007102f, 0.052570f, 0.069283f, 0.063355f, 0.064400f, 0.084995f, 0.108122f, 0.112992f, 0.097520f, 0.071428f, 0.039020f, -0.001236f, -0.044527f, -0.078904f, -0.099083f, -0.112548f, -0.128423f, -0.147364f, -0.165244f, -0.179148f, -0.186479f, -0.184966f, -0.176189f, -0.164004f, -0.150041f, -0.136188f, -0.128157f, -0.129591f, -0.136736f, -0.145463f, -0.157784f, -0.175387f, -0.194418f, -0.212665f, -0.233498f, -0.257959f, -0.282364f, -0.306702f, -0.334694f, -0.364260f, -0.389417f, -0.410847f, -0.432554f, -0.451286f, -0.461837f, -0.467316f, -0.471644f, -0.469923f, -0.458220f, -0.442113f, -0.424518f, -0.398733f, -0.363110f, -0.325903f, -0.288018f, -0.241039f, -0.187411f, -0.138730f, -0.091862f, -0.035017f, 0.023593f, 0.067423f, 0.108501f, 0.170368f, 0.233774f, 0.244228f, 0.178383f, 0.063811f}, - { -0.025177f, -0.087633f, -0.140274f, -0.115695f, -0.010636f, 0.082920f, 0.087853f, 0.026212f, -0.033798f, -0.061874f, -0.063579f, -0.039952f, 0.007102f, 0.052570f, 0.069283f, 0.063355f, 0.064400f, 0.084995f, 0.108122f, 0.112992f, 0.097520f, 0.071428f, 0.039020f, -0.001236f, -0.044527f, -0.078904f, -0.099083f, -0.112548f, -0.128423f, -0.147364f, -0.165244f, -0.179148f, -0.186479f, -0.184966f, -0.176189f, -0.164004f, -0.150041f, -0.136188f, -0.128157f, -0.129591f, -0.136736f, -0.145463f, -0.157784f, -0.175387f, -0.194418f, -0.212665f, -0.233498f, -0.257959f, -0.282364f, -0.306702f, -0.334694f, -0.364260f, -0.389417f, -0.410847f, -0.432554f, -0.451286f, -0.461837f, -0.467316f, -0.471644f, -0.469923f, -0.458220f, -0.442113f, -0.424518f, -0.398733f, -0.363110f, -0.325903f, -0.288018f, -0.241039f, -0.187411f, -0.138730f, -0.091862f, -0.035017f, 0.023593f, 0.067423f, 0.108501f, 0.170368f, 0.233774f, 0.244228f, 0.178383f, 0.063811f} - }, - { - { 0.004703f, -0.012419f, -0.068264f, -0.109935f, -0.087140f, -0.019730f, 0.023154f, 0.000984f, -0.060278f, -0.104075f, -0.098075f, -0.050669f, 0.009688f, 0.059915f, 0.094514f, 0.123898f, 0.161742f, 0.210179f, 0.257436f, 0.290142f, 0.304107f, 0.301838f, 0.285923f, 0.260106f, 0.232315f, 0.209084f, 0.187584f, 0.158711f, 0.118014f, 0.068935f, 0.015486f, -0.042837f, -0.107244f, -0.175037f, -0.241360f, -0.302992f, -0.358214f, -0.404621f, -0.439290f, -0.460886f, -0.470726f, -0.471924f, -0.467673f, -0.459973f, -0.449766f, -0.437936f, -0.425279f, -0.411399f, -0.394870f, -0.375052f, -0.352862f, -0.329697f, -0.306974f, -0.286835f, -0.271419f, -0.260782f, -0.252993f, -0.246525f, -0.240909f, -0.235119f, -0.227642f, -0.218477f, -0.208956f, -0.199340f, -0.188795f, -0.177591f, -0.166699f, -0.155414f, -0.142302f, -0.128106f, -0.114274f, -0.099433f, -0.081705f, -0.063092f, -0.044843f, -0.019680f, 0.019853f, 0.060923f, 0.070962f, 0.031790f}, - { 0.004703f, -0.012419f, -0.068264f, -0.109935f, -0.087140f, -0.019730f, 0.023154f, 0.000984f, -0.060278f, -0.104075f, -0.098075f, -0.050669f, 0.009688f, 0.059915f, 0.094514f, 0.123898f, 0.161742f, 0.210179f, 0.257436f, 0.290142f, 0.304107f, 0.301838f, 0.285923f, 0.260106f, 0.232315f, 0.209084f, 0.187584f, 0.158711f, 0.118014f, 0.068935f, 0.015486f, -0.042837f, -0.107244f, -0.175037f, -0.241360f, -0.302992f, -0.358214f, -0.404621f, -0.439290f, -0.460886f, -0.470726f, -0.471924f, -0.467673f, -0.459973f, -0.449766f, -0.437936f, -0.425279f, -0.411399f, -0.394870f, -0.375052f, -0.352862f, -0.329697f, -0.306974f, -0.286835f, -0.271419f, -0.260782f, -0.252993f, -0.246525f, -0.240909f, -0.235119f, -0.227642f, -0.218477f, -0.208956f, -0.199340f, -0.188795f, -0.177591f, -0.166699f, -0.155414f, -0.142302f, -0.128106f, -0.114274f, -0.099433f, -0.081705f, -0.063092f, -0.044843f, -0.019680f, 0.019853f, 0.060923f, 0.070962f, 0.031790f} - } -}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /********************** CRendBin_HOA2_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_latency_s = 0.000020834f; -#else const Word32 CRendBin_HOA2_HRIR_latency_s_fx = 44741; // Q31 -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -914,167 +140,10 @@ const uint16_t CRendBin_HOA2_HRIR_num_iterations_48kHz[9][BINAURAL_CHANNELS]={{1 const uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz[9][BINAURAL_CHANNELS][1]={{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}}}; const uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_48kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[9]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz_fx[9]={0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_coeff_re_48kHz[9][BINAURAL_CHANNELS][240]={ - { - {0.955467f, 0.635681f, 0.166653f, -0.248686f, -0.508651f, -0.626077f, -0.650285f, -0.604530f, -0.488417f, -0.308510f, -0.090053f, 0.133390f, 0.331939f, 0.484574f, 0.581273f, 0.623235f, 0.619217f, 0.579562f, 0.512138f, 0.422298f, 0.315745f, 0.200824f, 0.086720f, -0.021278f, -0.123379f, -0.220908f, -0.311538f, -0.390400f, -0.454756f, -0.505495f, -0.544554f, -0.573087f, -0.592353f, -0.604514f, -0.611652f, -0.614839f, -0.614702f, -0.612258f, -0.608712f, -0.604725f, -0.600146f, -0.594359f, -0.586798f, -0.577264f, -0.565860f, -0.552745f, -0.538040f, -0.521885f, -0.504388f, -0.485535f, -0.465319f, -0.443966f, -0.421881f, -0.399382f, -0.376688f, -0.354132f, -0.332145f, -0.310934f, -0.290358f, -0.270218f, -0.250519f, -0.231307f, -0.212442f, -0.193768f, -0.175388f, -0.157519f, -0.140147f, -0.123115f, -0.106462f, -0.090326f, -0.074575f, -0.058912f, -0.043292f, -0.027843f, -0.012429f, 0.003258f, 0.019199f, 0.035158f, 0.051271f, 0.067966f, 0.085226f, 0.102477f, 0.119366f, 0.136149f, 0.153084f, 0.169846f, 0.185867f, 0.201051f, 0.215857f, 0.230656f, 0.245156f, 0.258620f, 0.270655f, 0.281594f, 0.291923f, 0.301545f, - 0.309937f, 0.316968f, 0.323239f, 0.329553f, 0.336281f, 0.343277f, 0.350289f, 0.357415f, 0.365174f, 0.374055f, 0.384018f, 0.394584f, 0.405384f, 0.416401f, 0.427714f, 0.439268f, 0.450898f, 0.462356f, 0.473320f, 0.483570f, 0.493122f, 0.502098f, 0.510577f, 0.518647f, 0.526423f, 0.533949f, 0.541211f, 0.548278f, 0.555224f, 0.561949f, 0.568280f, 0.574177f, 0.579652f, 0.584611f, 0.589021f, 0.593080f, 0.597009f, 0.600857f, 0.604651f, 0.608500f, 0.612417f, 0.616274f, 0.620049f, 0.623888f, 0.627902f, 0.632129f, 0.636648f, 0.641474f, 0.646442f, 0.651406f, 0.656384f, 0.661348f, 0.666127f, 0.670667f, 0.675091f, 0.679372f, 0.683315f, 0.686889f, 0.690210f, 0.693196f, 0.695655f, 0.697621f, 0.699235f, 0.700467f, 0.701329f, 0.702091f, 0.702934f, 0.703776f, 0.704674f, 0.705900f, 0.707411f, 0.708825f, 0.710050f, 0.711305f, 0.712526f, 0.713461f, 0.714246f, 0.715152f, 0.716020f, 0.716635f, 0.717247f, 0.718065f, 0.718834f, 0.719533f, 0.720673f, 0.722398f, 0.724272f, 0.726300f, 0.728964f, 0.732074f, 0.734989f, 0.737890f, 0.741305f, 0.744740f, 0.747549f, 0.750362f, - 0.753763f, 0.756792f, 0.758849f, 0.761249f, 0.764561f, 0.766959f, 0.767817f, 0.769595f, 0.772990f, 0.774514f, 0.772907f, 0.772944f, 0.777562f, 0.781372f, 0.778511f, 0.772279f, 0.769953f, 0.772161f, 0.774253f, 0.773522f, 0.767718f, 0.752282f, 0.729193f, 0.714109f, 0.722150f, 0.746693f, 0.763324f, 0.757243f, 0.738026f, 0.724006f, 0.720101f, 0.717852f, 0.714019f, 0.720891f, 0.753307f, 0.807040f, 0.856442f, 0.878090f, 0.873417f, 0.862096f, 0.856572f, 0.853129f, 0.847435f, 0.844863f, 0.848629f, 0.849468f, 0.838876f, 0.825576f}, - {0.955467f, 0.635681f, 0.166653f, -0.248686f, -0.508651f, -0.626077f, -0.650285f, -0.604530f, -0.488417f, -0.308510f, -0.090053f, 0.133390f, 0.331939f, 0.484574f, 0.581273f, 0.623235f, 0.619217f, 0.579562f, 0.512138f, 0.422298f, 0.315745f, 0.200824f, 0.086720f, -0.021278f, -0.123379f, -0.220908f, -0.311538f, -0.390400f, -0.454756f, -0.505495f, -0.544554f, -0.573087f, -0.592353f, -0.604514f, -0.611652f, -0.614839f, -0.614702f, -0.612258f, -0.608712f, -0.604725f, -0.600146f, -0.594359f, -0.586798f, -0.577264f, -0.565860f, -0.552745f, -0.538040f, -0.521885f, -0.504388f, -0.485535f, -0.465319f, -0.443966f, -0.421881f, -0.399382f, -0.376688f, -0.354132f, -0.332145f, -0.310934f, -0.290358f, -0.270218f, -0.250519f, -0.231307f, -0.212442f, -0.193768f, -0.175388f, -0.157519f, -0.140147f, -0.123115f, -0.106462f, -0.090326f, -0.074575f, -0.058912f, -0.043292f, -0.027843f, -0.012429f, 0.003258f, 0.019199f, 0.035158f, 0.051271f, 0.067966f, 0.085226f, 0.102477f, 0.119366f, 0.136149f, 0.153084f, 0.169846f, 0.185867f, 0.201051f, 0.215857f, 0.230656f, 0.245156f, 0.258620f, 0.270655f, 0.281594f, 0.291923f, 0.301545f, - 0.309937f, 0.316968f, 0.323239f, 0.329553f, 0.336281f, 0.343277f, 0.350289f, 0.357415f, 0.365174f, 0.374055f, 0.384018f, 0.394584f, 0.405384f, 0.416401f, 0.427714f, 0.439268f, 0.450898f, 0.462356f, 0.473320f, 0.483570f, 0.493122f, 0.502098f, 0.510577f, 0.518647f, 0.526423f, 0.533949f, 0.541211f, 0.548278f, 0.555224f, 0.561949f, 0.568280f, 0.574177f, 0.579652f, 0.584611f, 0.589021f, 0.593080f, 0.597009f, 0.600857f, 0.604651f, 0.608500f, 0.612417f, 0.616274f, 0.620049f, 0.623888f, 0.627902f, 0.632129f, 0.636648f, 0.641474f, 0.646442f, 0.651406f, 0.656384f, 0.661348f, 0.666127f, 0.670667f, 0.675091f, 0.679372f, 0.683315f, 0.686889f, 0.690210f, 0.693196f, 0.695655f, 0.697621f, 0.699235f, 0.700467f, 0.701329f, 0.702091f, 0.702934f, 0.703776f, 0.704674f, 0.705900f, 0.707411f, 0.708825f, 0.710050f, 0.711305f, 0.712526f, 0.713461f, 0.714246f, 0.715152f, 0.716020f, 0.716635f, 0.717247f, 0.718065f, 0.718834f, 0.719533f, 0.720673f, 0.722398f, 0.724272f, 0.726300f, 0.728964f, 0.732074f, 0.734989f, 0.737890f, 0.741305f, 0.744740f, 0.747549f, 0.750362f, - 0.753763f, 0.756792f, 0.758849f, 0.761249f, 0.764561f, 0.766959f, 0.767817f, 0.769595f, 0.772990f, 0.774514f, 0.772907f, 0.772944f, 0.777562f, 0.781372f, 0.778511f, 0.772279f, 0.769953f, 0.772161f, 0.774253f, 0.773522f, 0.767718f, 0.752282f, 0.729193f, 0.714109f, 0.722150f, 0.746693f, 0.763324f, 0.757243f, 0.738026f, 0.724006f, 0.720101f, 0.717852f, 0.714019f, 0.720891f, 0.753307f, 0.807040f, 0.856442f, 0.878090f, 0.873417f, 0.862096f, 0.856572f, 0.853129f, 0.847435f, 0.844863f, 0.848629f, 0.849468f, 0.838876f, 0.825576f} - }, - { - {0.097314f, 0.414173f, 0.747626f, 0.754590f, 0.330783f, -0.326705f, -0.901613f, -1.190599f, -1.185056f, -0.986921f, -0.692990f, -0.354873f, -0.002249f, 0.335288f, 0.631311f, 0.869888f, 1.042481f, 1.143077f, 1.170924f, 1.135842f, 1.056300f, 0.949835f, 0.825366f, 0.685238f, 0.533253f, 0.378103f, 0.228763f, 0.089252f, -0.040641f, -0.161495f, -0.272981f, -0.375031f, -0.468133f, -0.552605f, -0.628716f, -0.697354f, -0.759761f, -0.816645f, -0.867878f, -0.912811f, -0.950646f, -0.980831f, -1.003432f, -1.019091f, -1.028553f, -1.032320f, -1.030690f, -1.023992f, -1.012844f, -0.998265f, -0.981431f, -0.963113f, -0.943286f, -0.921325f, -0.896613f, -0.869049f, -0.839024f, -0.807064f, -0.773676f, -0.739520f, -0.705375f, -0.671722f, -0.638603f, -0.606135f, -0.574805f, -0.544984f, -0.516534f, -0.489311f, -0.463725f, -0.440280f, -0.418894f, -0.399253f, -0.381525f, -0.365999f, -0.352195f, -0.339137f, -0.326488f, -0.314596f, -0.303283f, -0.291474f, -0.278425f, -0.264548f, -0.250445f, -0.235726f, -0.219500f, -0.201656f, -0.182949f, -0.163967f, -0.144609f, -0.124484f, -0.103249f, -0.080535f, -0.055987f, -0.029425f, -0.000739f, 0.030319f, - 0.063929f, 0.099772f, 0.136966f, 0.174386f, 0.211037f, 0.246212f, 0.279379f, 0.309898f, 0.336976f, 0.360053f, 0.379082f, 0.394265f, 0.405690f, 0.413493f, 0.418257f, 0.421046f, 0.423069f, 0.425261f, 0.427920f, 0.430738f, 0.433463f, 0.436544f, 0.440906f, 0.447174f, 0.455301f, 0.464713f, 0.474496f, 0.483726f, 0.492054f, 0.499849f, 0.507562f, 0.515203f, 0.522591f, 0.529726f, 0.536646f, 0.543230f, 0.549348f, 0.554966f, 0.560050f, 0.564644f, 0.569000f, 0.573385f, 0.577839f, 0.582298f, 0.586765f, 0.591237f, 0.595738f, 0.600532f, 0.606012f, 0.612378f, 0.619693f, 0.628054f, 0.637369f, 0.647229f, 0.657409f, 0.668130f, 0.679533f, 0.691385f, 0.703604f, 0.716403f, 0.729644f, 0.742723f, 0.755282f, 0.767338f, 0.778713f, 0.789114f, 0.798667f, 0.807637f, 0.815884f, 0.823219f, 0.829774f, 0.835517f, 0.840126f, 0.843797f, 0.847226f, 0.850573f, 0.853543f, 0.856458f, 0.859889f, 0.863411f, 0.866099f, 0.867816f, 0.868779f, 0.868745f, 0.867866f, 0.867084f, 0.866670f, 0.865984f, 0.865256f, 0.865448f, 0.866168f, 0.866282f, 0.866234f, 0.866993f, 0.867839f, 0.868126f, - 0.868997f, 0.870630f, 0.871367f, 0.871898f, 0.874706f, 0.877884f, 0.877771f, 0.878026f, 0.884032f, 0.889476f, 0.886115f, 0.884433f, 0.898714f, 0.912808f, 0.896260f, 0.858730f, 0.845640f, 0.869140f, 0.891869f, 0.896006f, 0.911910f, 0.948673f, 0.954899f, 0.894533f, 0.814533f, 0.786292f, 0.814134f, 0.846554f, 0.848304f, 0.823226f, 0.793405f, 0.782599f, 0.785720f, 0.738162f, 0.572339f, 0.335226f, 0.185068f, 0.220164f, 0.362443f, 0.464261f, 0.482183f, 0.481394f, 0.504881f, 0.514608f, 0.459824f, 0.346966f, 0.228758f, 0.156688f}, - {-0.097314f, -0.414173f, -0.747626f, -0.754590f, -0.330783f, 0.326705f, 0.901613f, 1.190599f, 1.185056f, 0.986921f, 0.692990f, 0.354873f, 0.002249f, -0.335288f, -0.631311f, -0.869888f, -1.042481f, -1.143077f, -1.170924f, -1.135842f, -1.056300f, -0.949835f, -0.825366f, -0.685238f, -0.533253f, -0.378103f, -0.228763f, -0.089252f, 0.040641f, 0.161495f, 0.272981f, 0.375031f, 0.468133f, 0.552605f, 0.628716f, 0.697354f, 0.759761f, 0.816645f, 0.867878f, 0.912811f, 0.950646f, 0.980831f, 1.003432f, 1.019091f, 1.028553f, 1.032320f, 1.030690f, 1.023992f, 1.012844f, 0.998265f, 0.981431f, 0.963113f, 0.943286f, 0.921325f, 0.896613f, 0.869049f, 0.839024f, 0.807064f, 0.773676f, 0.739520f, 0.705375f, 0.671722f, 0.638603f, 0.606135f, 0.574805f, 0.544984f, 0.516534f, 0.489311f, 0.463725f, 0.440280f, 0.418894f, 0.399253f, 0.381525f, 0.365999f, 0.352195f, 0.339137f, 0.326488f, 0.314596f, 0.303283f, 0.291474f, 0.278425f, 0.264548f, 0.250445f, 0.235726f, 0.219500f, 0.201656f, 0.182949f, 0.163967f, 0.144609f, 0.124484f, 0.103249f, 0.080535f, 0.055987f, 0.029425f, 0.000739f, -0.030319f, - -0.063929f, -0.099772f, -0.136966f, -0.174386f, -0.211037f, -0.246212f, -0.279379f, -0.309898f, -0.336976f, -0.360053f, -0.379082f, -0.394265f, -0.405690f, -0.413493f, -0.418257f, -0.421046f, -0.423069f, -0.425261f, -0.427920f, -0.430738f, -0.433463f, -0.436544f, -0.440906f, -0.447174f, -0.455301f, -0.464713f, -0.474496f, -0.483726f, -0.492054f, -0.499849f, -0.507562f, -0.515203f, -0.522591f, -0.529726f, -0.536646f, -0.543230f, -0.549348f, -0.554966f, -0.560050f, -0.564644f, -0.569000f, -0.573385f, -0.577839f, -0.582298f, -0.586765f, -0.591237f, -0.595738f, -0.600532f, -0.606012f, -0.612378f, -0.619693f, -0.628054f, -0.637369f, -0.647229f, -0.657409f, -0.668130f, -0.679533f, -0.691385f, -0.703604f, -0.716403f, -0.729644f, -0.742723f, -0.755282f, -0.767338f, -0.778713f, -0.789114f, -0.798667f, -0.807637f, -0.815884f, -0.823219f, -0.829774f, -0.835517f, -0.840126f, -0.843797f, -0.847226f, -0.850573f, -0.853543f, -0.856458f, -0.859889f, -0.863411f, -0.866099f, -0.867816f, -0.868779f, -0.868745f, -0.867866f, -0.867084f, -0.866670f, -0.865984f, -0.865256f, -0.865448f, -0.866168f, -0.866282f, -0.866234f, -0.866993f, -0.867839f, -0.868126f, - -0.868997f, -0.870630f, -0.871367f, -0.871898f, -0.874706f, -0.877884f, -0.877771f, -0.878026f, -0.884032f, -0.889476f, -0.886115f, -0.884433f, -0.898714f, -0.912808f, -0.896260f, -0.858730f, -0.845640f, -0.869140f, -0.891869f, -0.896006f, -0.911910f, -0.948673f, -0.954899f, -0.894533f, -0.814533f, -0.786292f, -0.814134f, -0.846554f, -0.848304f, -0.823226f, -0.793405f, -0.782599f, -0.785720f, -0.738162f, -0.572339f, -0.335226f, -0.185068f, -0.220164f, -0.362443f, -0.464261f, -0.482183f, -0.481394f, -0.504881f, -0.514608f, -0.459824f, -0.346966f, -0.228758f, -0.156688f} - }, - { - {0.116713f, 0.072126f, -0.020631f, -0.112176f, -0.120235f, -0.031894f, 0.067439f, 0.091659f, 0.039310f, -0.034445f, -0.085235f, -0.095294f, -0.062685f, -0.007339f, 0.035234f, 0.050997f, 0.062562f, 0.092595f, 0.130453f, 0.149870f, 0.142288f, 0.116439f, 0.078486f, 0.030060f, -0.020701f, -0.060937f, -0.085675f, -0.101228f, -0.116230f, -0.133115f, -0.147632f, -0.154014f, -0.150236f, -0.138833f, -0.123518f, -0.107035f, -0.092734f, -0.085340f, -0.087853f, -0.099007f, -0.115280f, -0.134212f, -0.154704f, -0.175585f, -0.195498f, -0.213771f, -0.230537f, -0.246204f, -0.261004f, -0.274518f, -0.285368f, -0.291759f, -0.292561f, -0.287601f, -0.276917f, -0.260193f, -0.237217f, -0.208432f, -0.174533f, -0.135701f, -0.091811f, -0.043233f, 0.009243f, 0.065150f, 0.124187f, 0.185310f, 0.246775f, 0.307108f, 0.365223f, 0.419659f, 0.468551f, 0.510367f, 0.543904f, 0.567857f, 0.581410f, 0.585089f, 0.579988f, 0.566359f, 0.544196f, 0.515148f, 0.482355f, 0.447851f, 0.411415f, 0.372943f, 0.334830f, 0.300327f, 0.269892f, 0.241113f, 0.212758f, 0.187086f, 0.166978f, 0.152277f, 0.140516f, 0.130249f, 0.122026f, 0.116711f, - 0.114395f, 0.114642f, 0.116582f, 0.118903f, 0.120560f, 0.121397f, 0.121803f, 0.122096f, 0.122081f, 0.120568f, 0.115639f, 0.106376f, 0.094049f, 0.080746f, 0.067280f, 0.053238f, 0.038276f, 0.022433f, 0.005947f, -0.010351f, -0.025082f, -0.037294f, -0.046681f, -0.052842f, -0.055367f, -0.054587f, -0.051101f, -0.044816f, -0.035505f, -0.023804f, -0.010663f, 0.003451f, 0.018016f, 0.032133f, 0.045369f, 0.057764f, 0.068693f, 0.077173f, 0.083414f, 0.088574f, 0.093316f, 0.098141f, 0.104298f, 0.112463f, 0.121400f, 0.129615f, 0.137158f, 0.144434f, 0.150888f, 0.156189f, 0.160875f, 0.164864f, 0.167274f, 0.168212f, 0.168642f, 0.168568f, 0.167544f, 0.166341f, 0.165856f, 0.165449f, 0.164412f, 0.163410f, 0.162696f, 0.161164f, 0.158594f, 0.156177f, 0.153901f, 0.150467f, 0.146055f, 0.141871f, 0.137505f, 0.132216f, 0.127455f, 0.124584f, 0.122335f, 0.119725f, 0.118247f, 0.118393f, 0.118126f, 0.116848f, 0.115875f, 0.114029f, 0.108671f, 0.100879f, 0.093121f, 0.083708f, 0.070519f, 0.056452f, 0.043960f, 0.029990f, 0.013203f, -0.001963f, -0.014381f, -0.028555f, -0.043767f, -0.054771f, - -0.064616f, -0.079267f, -0.092295f, -0.096950f, -0.104863f, -0.124550f, -0.137426f, -0.132020f, -0.136512f, -0.167601f, -0.183275f, -0.156719f, -0.153305f, -0.232829f, -0.312161f, -0.256735f, -0.095012f, 0.003970f, -0.025692f, -0.079935f, -0.088484f, -0.118715f, -0.210193f, -0.259911f, -0.175437f, -0.030063f, 0.040705f, 0.019139f, -0.011331f, -0.004889f, 0.006382f, -0.022770f, -0.100066f, -0.183271f, -0.195497f, -0.097381f, 0.039125f, 0.086187f, 0.011399f, -0.085034f, -0.108289f, -0.079208f, -0.069267f, -0.087019f, -0.087070f, -0.054365f, -0.019140f, -0.003388f}, - {0.116713f, 0.072126f, -0.020631f, -0.112176f, -0.120235f, -0.031894f, 0.067439f, 0.091659f, 0.039310f, -0.034445f, -0.085235f, -0.095294f, -0.062685f, -0.007339f, 0.035234f, 0.050997f, 0.062562f, 0.092595f, 0.130453f, 0.149870f, 0.142288f, 0.116439f, 0.078486f, 0.030060f, -0.020701f, -0.060937f, -0.085675f, -0.101228f, -0.116230f, -0.133115f, -0.147632f, -0.154014f, -0.150236f, -0.138833f, -0.123518f, -0.107035f, -0.092734f, -0.085340f, -0.087853f, -0.099007f, -0.115280f, -0.134212f, -0.154704f, -0.175585f, -0.195498f, -0.213771f, -0.230537f, -0.246204f, -0.261004f, -0.274518f, -0.285368f, -0.291759f, -0.292561f, -0.287601f, -0.276917f, -0.260193f, -0.237217f, -0.208432f, -0.174533f, -0.135701f, -0.091811f, -0.043233f, 0.009243f, 0.065150f, 0.124187f, 0.185310f, 0.246775f, 0.307108f, 0.365223f, 0.419659f, 0.468551f, 0.510367f, 0.543904f, 0.567857f, 0.581410f, 0.585089f, 0.579988f, 0.566359f, 0.544196f, 0.515148f, 0.482355f, 0.447851f, 0.411415f, 0.372943f, 0.334830f, 0.300327f, 0.269892f, 0.241113f, 0.212758f, 0.187086f, 0.166978f, 0.152277f, 0.140516f, 0.130249f, 0.122026f, 0.116711f, - 0.114395f, 0.114642f, 0.116582f, 0.118903f, 0.120560f, 0.121397f, 0.121803f, 0.122096f, 0.122081f, 0.120568f, 0.115639f, 0.106376f, 0.094049f, 0.080746f, 0.067280f, 0.053238f, 0.038276f, 0.022433f, 0.005947f, -0.010351f, -0.025082f, -0.037294f, -0.046681f, -0.052842f, -0.055367f, -0.054587f, -0.051101f, -0.044816f, -0.035505f, -0.023804f, -0.010663f, 0.003451f, 0.018016f, 0.032133f, 0.045369f, 0.057764f, 0.068693f, 0.077173f, 0.083414f, 0.088574f, 0.093316f, 0.098141f, 0.104298f, 0.112463f, 0.121400f, 0.129615f, 0.137158f, 0.144434f, 0.150888f, 0.156189f, 0.160875f, 0.164864f, 0.167274f, 0.168212f, 0.168642f, 0.168568f, 0.167544f, 0.166341f, 0.165856f, 0.165449f, 0.164412f, 0.163410f, 0.162696f, 0.161164f, 0.158594f, 0.156177f, 0.153901f, 0.150467f, 0.146055f, 0.141871f, 0.137505f, 0.132216f, 0.127455f, 0.124584f, 0.122335f, 0.119725f, 0.118247f, 0.118393f, 0.118126f, 0.116848f, 0.115875f, 0.114029f, 0.108671f, 0.100879f, 0.093121f, 0.083708f, 0.070519f, 0.056452f, 0.043960f, 0.029990f, 0.013203f, -0.001963f, -0.014381f, -0.028555f, -0.043767f, -0.054771f, - -0.064616f, -0.079267f, -0.092295f, -0.096950f, -0.104863f, -0.124550f, -0.137426f, -0.132020f, -0.136512f, -0.167601f, -0.183275f, -0.156719f, -0.153305f, -0.232829f, -0.312161f, -0.256735f, -0.095012f, 0.003970f, -0.025692f, -0.079935f, -0.088484f, -0.118715f, -0.210193f, -0.259911f, -0.175437f, -0.030063f, 0.040705f, 0.019139f, -0.011331f, -0.004889f, 0.006382f, -0.022770f, -0.100066f, -0.183271f, -0.195497f, -0.097381f, 0.039125f, 0.086187f, 0.011399f, -0.085034f, -0.108289f, -0.079208f, -0.069267f, -0.087019f, -0.087070f, -0.054365f, -0.019140f, -0.003388f} - }, - { - {0.057716f, 0.076756f, 0.058868f, -0.013782f, -0.079436f, -0.074073f, -0.016187f, 0.017124f, -0.018250f, -0.093448f, -0.149405f, -0.153777f, -0.115034f, -0.060844f, -0.011733f, 0.031700f, 0.082185f, 0.146750f, 0.215597f, 0.270817f, 0.301494f, 0.306907f, 0.290675f, 0.258743f, 0.219989f, 0.180823f, 0.138641f, 0.085701f, 0.019654f, -0.054132f, -0.130307f, -0.208118f, -0.286879f, -0.361597f, -0.426062f, -0.477609f, -0.516371f, -0.541854f, -0.552928f, -0.550365f, -0.537270f, -0.517036f, -0.491948f, -0.463535f, -0.433204f, -0.402160f, -0.370923f, -0.339116f, -0.306013f, -0.271593f, -0.237008f, -0.204076f, -0.174628f, -0.150090f, -0.130726f, -0.115027f, -0.100582f, -0.085793f, -0.070243f, -0.053770f, -0.036295f, -0.018447f, -0.001151f, 0.015432f, 0.031657f, 0.047424f, 0.062600f, 0.078005f, 0.094600f, 0.112028f, 0.129305f, 0.146558f, 0.164522f, 0.182587f, 0.199005f, 0.212998f, 0.224982f, 0.234524f, 0.239833f, 0.239930f, 0.235886f, 0.228926f, 0.218536f, 0.203779f, 0.185737f, 0.167006f, 0.148890f, 0.130591f, 0.111280f, 0.091321f, 0.070885f, 0.048967f, 0.024866f, -0.000541f, -0.026100f, -0.051960f, - -0.078659f, -0.105381f, -0.130303f, -0.152361f, -0.171822f, -0.189236f, -0.204261f, -0.215422f, -0.221132f, -0.221347f, -0.217950f, -0.212885f, -0.206158f, -0.196258f, -0.182255f, -0.164983f, -0.146569f, -0.129160f, -0.113464f, -0.098109f, -0.081029f, -0.061799f, -0.042161f, -0.024344f, -0.009539f, 0.002365f, 0.012635f, 0.023134f, 0.034939f, 0.047539f, 0.059892f, 0.071761f, 0.083571f, 0.095796f, 0.109100f, 0.124264f, 0.141372f, 0.159700f, 0.178598f, 0.197760f, 0.216729f, 0.235064f, 0.252852f, 0.270238f, 0.286751f, 0.301767f, 0.315065f, 0.326358f, 0.335078f, 0.341096f, 0.344846f, 0.346536f, 0.346164f, 0.344265f, 0.341562f, 0.338166f, 0.334119f, 0.330115f, 0.326715f, 0.323760f, 0.321440f, 0.320712f, 0.321901f, 0.324294f, 0.327593f, 0.332127f, 0.337417f, 0.342367f, 0.346858f, 0.351462f, 0.356178f, 0.361075f, 0.367067f, 0.374444f, 0.382147f, 0.389740f, 0.397992f, 0.406725f, 0.414722f, 0.422146f, 0.429946f, 0.437160f, 0.442159f, 0.445488f, 0.447970f, 0.448137f, 0.445126f, 0.440944f, 0.436547f, 0.430064f, 0.421619f, 0.414105f, 0.407405f, 0.399002f, 0.390437f, 0.384435f, - 0.377920f, 0.368392f, 0.361461f, 0.359383f, 0.352793f, 0.339519f, 0.334298f, 0.339584f, 0.332793f, 0.310207f, 0.306283f, 0.327892f, 0.317434f, 0.246418f, 0.196934f, 0.258692f, 0.381164f, 0.436129f, 0.404093f, 0.376464f, 0.381882f, 0.351261f, 0.276746f, 0.261983f, 0.357657f, 0.468349f, 0.494143f, 0.465205f, 0.461850f, 0.487233f, 0.497133f, 0.484317f, 0.455264f, 0.383620f, 0.267215f, 0.184416f, 0.211056f, 0.308507f, 0.369236f, 0.358171f, 0.338304f, 0.358938f, 0.388546f, 0.381045f, 0.357053f, 0.377955f, 0.457097f, 0.532101f}, - {0.057716f, 0.076756f, 0.058868f, -0.013782f, -0.079436f, -0.074073f, -0.016187f, 0.017124f, -0.018250f, -0.093448f, -0.149405f, -0.153777f, -0.115034f, -0.060844f, -0.011733f, 0.031700f, 0.082185f, 0.146750f, 0.215597f, 0.270817f, 0.301494f, 0.306907f, 0.290675f, 0.258743f, 0.219989f, 0.180823f, 0.138641f, 0.085701f, 0.019654f, -0.054132f, -0.130307f, -0.208118f, -0.286879f, -0.361597f, -0.426062f, -0.477609f, -0.516371f, -0.541854f, -0.552928f, -0.550365f, -0.537270f, -0.517036f, -0.491948f, -0.463535f, -0.433204f, -0.402160f, -0.370923f, -0.339116f, -0.306013f, -0.271593f, -0.237008f, -0.204076f, -0.174628f, -0.150090f, -0.130726f, -0.115027f, -0.100582f, -0.085793f, -0.070243f, -0.053770f, -0.036295f, -0.018447f, -0.001151f, 0.015432f, 0.031657f, 0.047424f, 0.062600f, 0.078005f, 0.094600f, 0.112028f, 0.129305f, 0.146558f, 0.164522f, 0.182587f, 0.199005f, 0.212998f, 0.224982f, 0.234524f, 0.239833f, 0.239930f, 0.235886f, 0.228926f, 0.218536f, 0.203779f, 0.185737f, 0.167006f, 0.148890f, 0.130591f, 0.111280f, 0.091321f, 0.070885f, 0.048967f, 0.024866f, -0.000541f, -0.026100f, -0.051960f, - -0.078659f, -0.105381f, -0.130303f, -0.152361f, -0.171822f, -0.189236f, -0.204261f, -0.215422f, -0.221132f, -0.221347f, -0.217950f, -0.212885f, -0.206158f, -0.196258f, -0.182255f, -0.164983f, -0.146569f, -0.129160f, -0.113464f, -0.098109f, -0.081029f, -0.061799f, -0.042161f, -0.024344f, -0.009539f, 0.002365f, 0.012635f, 0.023134f, 0.034939f, 0.047539f, 0.059892f, 0.071761f, 0.083571f, 0.095796f, 0.109100f, 0.124264f, 0.141372f, 0.159700f, 0.178598f, 0.197760f, 0.216729f, 0.235064f, 0.252852f, 0.270238f, 0.286751f, 0.301767f, 0.315065f, 0.326358f, 0.335078f, 0.341096f, 0.344846f, 0.346536f, 0.346164f, 0.344265f, 0.341562f, 0.338166f, 0.334119f, 0.330115f, 0.326715f, 0.323760f, 0.321440f, 0.320712f, 0.321901f, 0.324294f, 0.327593f, 0.332127f, 0.337417f, 0.342367f, 0.346858f, 0.351462f, 0.356178f, 0.361075f, 0.367067f, 0.374444f, 0.382147f, 0.389740f, 0.397992f, 0.406725f, 0.414722f, 0.422146f, 0.429946f, 0.437160f, 0.442159f, 0.445488f, 0.447970f, 0.448137f, 0.445126f, 0.440944f, 0.436547f, 0.430064f, 0.421619f, 0.414105f, 0.407405f, 0.399002f, 0.390437f, 0.384435f, - 0.377920f, 0.368392f, 0.361461f, 0.359383f, 0.352793f, 0.339519f, 0.334298f, 0.339584f, 0.332793f, 0.310207f, 0.306283f, 0.327892f, 0.317434f, 0.246418f, 0.196934f, 0.258692f, 0.381164f, 0.436129f, 0.404093f, 0.376464f, 0.381882f, 0.351261f, 0.276746f, 0.261983f, 0.357657f, 0.468349f, 0.494143f, 0.465205f, 0.461850f, 0.487233f, 0.497133f, 0.484317f, 0.455264f, 0.383620f, 0.267215f, 0.184416f, 0.211056f, 0.308507f, 0.369236f, 0.358171f, 0.338304f, 0.358938f, 0.388546f, 0.381045f, 0.357053f, 0.377955f, 0.457097f, 0.532101f} - }, - { - {0.022217f, 0.015375f, 0.018397f, 0.035300f, 0.046690f, 0.037732f, 0.022017f, 0.019869f, 0.019459f, -0.017327f, -0.102816f, -0.194710f, -0.234177f, -0.204599f, -0.138417f, -0.071733f, -0.010515f, 0.056797f, 0.132305f, 0.206318f, 0.271841f, 0.327874f, 0.371103f, 0.395052f, 0.398096f, 0.384964f, 0.359169f, 0.319562f, 0.265403f, 0.199868f, 0.126987f, 0.048878f, -0.032648f, -0.114915f, -0.195782f, -0.273182f, -0.342322f, -0.396309f, -0.431191f, -0.448778f, -0.453935f, -0.450961f, -0.442889f, -0.431917f, -0.419114f, -0.404570f, -0.388255f, -0.370115f, -0.349678f, -0.326644f, -0.301721f, -0.276201f, -0.251220f, -0.227989f, -0.207822f, -0.191043f, -0.176530f, -0.162962f, -0.149778f, -0.136591f, -0.122722f, -0.107799f, -0.091935f, -0.075014f, -0.056648f, -0.036913f, -0.016138f, 0.005944f, 0.029814f, 0.055061f, 0.080836f, 0.107214f, 0.134806f, 0.163054f, 0.190286f, 0.215551f, 0.238967f, 0.259885f, 0.276238f, 0.286705f, 0.292383f, 0.294992f, 0.294208f, 0.288458f, 0.278037f, 0.265391f, 0.251792f, 0.235652f, 0.215265f, 0.191614f, 0.166954f, 0.141873f, 0.115571f, 0.088358f, 0.062140f, 0.038532f, - 0.017724f, -0.000836f, -0.017500f, -0.032211f, -0.044805f, -0.055481f, -0.064916f, -0.073629f, -0.081559f, -0.088826f, -0.096406f, -0.105164f, -0.114511f, -0.122871f, -0.129287f, -0.134060f, -0.138257f, -0.143042f, -0.148807f, -0.154441f, -0.158070f, -0.158906f, -0.157915f, -0.156673f, -0.156277f, -0.157153f, -0.158912f, -0.160379f, -0.160516f, -0.159249f, -0.156964f, -0.153673f, -0.149149f, -0.143200f, -0.135383f, -0.125140f, -0.112610f, -0.098657f, -0.084044f, -0.069283f, -0.055081f, -0.042021f, -0.030039f, -0.019014f, -0.009440f, -0.001841f, 0.003841f, 0.007710f, 0.009630f, 0.009945f, 0.009536f, 0.008864f, 0.007876f, 0.006845f, 0.006260f, 0.006131f, 0.006419f, 0.007674f, 0.010369f, 0.014373f, 0.019846f, 0.027504f, 0.037346f, 0.048440f, 0.060307f, 0.073056f, 0.086098f, 0.098456f, 0.110125f, 0.121485f, 0.132067f, 0.141513f, 0.150626f, 0.159945f, 0.168818f, 0.177104f, 0.185774f, 0.194992f, 0.203954f, 0.212873f, 0.222383f, 0.231384f, 0.238515f, 0.244594f, 0.250498f, 0.254857f, 0.256981f, 0.258841f, 0.261200f, 0.262096f, 0.261400f, 0.261397f, 0.261615f, 0.259828f, 0.257747f, 0.257682f, - 0.256474f, 0.252253f, 0.250769f, 0.253635f, 0.251629f, 0.243566f, 0.243777f, 0.253044f, 0.249024f, 0.229975f, 0.229614f, 0.251308f, 0.237376f, 0.164020f, 0.115660f, 0.179182f, 0.302935f, 0.361288f, 0.332595f, 0.300984f, 0.297187f, 0.266515f, 0.205485f, 0.199320f, 0.282776f, 0.373785f, 0.395770f, 0.375092f, 0.369258f, 0.379275f, 0.378846f, 0.358644f, 0.304226f, 0.203779f, 0.113276f, 0.133067f, 0.271506f, 0.405312f, 0.429713f, 0.382366f, 0.361258f, 0.383739f, 0.398504f, 0.388066f, 0.377952f, 0.369700f, 0.341555f, 0.307263f}, - {-0.022217f, -0.015375f, -0.018397f, -0.035300f, -0.046690f, -0.037732f, -0.022017f, -0.019869f, -0.019459f, 0.017327f, 0.102816f, 0.194710f, 0.234177f, 0.204599f, 0.138417f, 0.071733f, 0.010515f, -0.056797f, -0.132305f, -0.206318f, -0.271841f, -0.327874f, -0.371103f, -0.395052f, -0.398096f, -0.384964f, -0.359169f, -0.319562f, -0.265403f, -0.199868f, -0.126987f, -0.048878f, 0.032648f, 0.114915f, 0.195782f, 0.273182f, 0.342322f, 0.396309f, 0.431191f, 0.448778f, 0.453935f, 0.450961f, 0.442889f, 0.431917f, 0.419114f, 0.404570f, 0.388255f, 0.370115f, 0.349678f, 0.326644f, 0.301721f, 0.276201f, 0.251220f, 0.227989f, 0.207822f, 0.191043f, 0.176530f, 0.162962f, 0.149778f, 0.136591f, 0.122722f, 0.107799f, 0.091935f, 0.075014f, 0.056648f, 0.036913f, 0.016138f, -0.005944f, -0.029814f, -0.055061f, -0.080836f, -0.107214f, -0.134806f, -0.163054f, -0.190286f, -0.215551f, -0.238967f, -0.259885f, -0.276238f, -0.286705f, -0.292383f, -0.294992f, -0.294208f, -0.288458f, -0.278037f, -0.265391f, -0.251792f, -0.235652f, -0.215265f, -0.191614f, -0.166954f, -0.141873f, -0.115571f, -0.088358f, -0.062140f, -0.038532f, - -0.017724f, 0.000836f, 0.017500f, 0.032211f, 0.044805f, 0.055481f, 0.064916f, 0.073629f, 0.081559f, 0.088826f, 0.096406f, 0.105164f, 0.114511f, 0.122871f, 0.129287f, 0.134060f, 0.138257f, 0.143042f, 0.148807f, 0.154441f, 0.158070f, 0.158906f, 0.157915f, 0.156673f, 0.156277f, 0.157153f, 0.158912f, 0.160379f, 0.160516f, 0.159249f, 0.156964f, 0.153673f, 0.149149f, 0.143200f, 0.135383f, 0.125140f, 0.112610f, 0.098657f, 0.084044f, 0.069283f, 0.055081f, 0.042021f, 0.030039f, 0.019014f, 0.009440f, 0.001841f, -0.003841f, -0.007710f, -0.009630f, -0.009945f, -0.009536f, -0.008864f, -0.007876f, -0.006845f, -0.006260f, -0.006131f, -0.006419f, -0.007674f, -0.010369f, -0.014373f, -0.019846f, -0.027504f, -0.037346f, -0.048440f, -0.060307f, -0.073056f, -0.086098f, -0.098456f, -0.110125f, -0.121485f, -0.132067f, -0.141513f, -0.150626f, -0.159945f, -0.168818f, -0.177104f, -0.185774f, -0.194992f, -0.203954f, -0.212873f, -0.222383f, -0.231384f, -0.238515f, -0.244594f, -0.250498f, -0.254857f, -0.256981f, -0.258841f, -0.261200f, -0.262096f, -0.261400f, -0.261397f, -0.261615f, -0.259828f, -0.257747f, -0.257682f, - -0.256474f, -0.252253f, -0.250769f, -0.253635f, -0.251629f, -0.243566f, -0.243777f, -0.253044f, -0.249024f, -0.229975f, -0.229614f, -0.251308f, -0.237376f, -0.164020f, -0.115660f, -0.179182f, -0.302935f, -0.361288f, -0.332595f, -0.300984f, -0.297187f, -0.266515f, -0.205485f, -0.199320f, -0.282776f, -0.373785f, -0.395770f, -0.375092f, -0.369258f, -0.379275f, -0.378846f, -0.358644f, -0.304226f, -0.203779f, -0.113276f, -0.133067f, -0.271506f, -0.405312f, -0.429713f, -0.382366f, -0.361258f, -0.383739f, -0.398504f, -0.388066f, -0.377952f, -0.369700f, -0.341555f, -0.307263f} - }, - { - {0.003437f, -0.012198f, -0.001203f, 0.021097f, -0.002466f, -0.043512f, 0.000962f, 0.131262f, 0.193341f, 0.073245f, -0.141155f, -0.268143f, -0.241794f, -0.140847f, -0.054105f, 0.002619f, 0.050716f, 0.099528f, 0.145239f, 0.181794f, 0.200756f, 0.196431f, 0.173654f, 0.142090f, 0.107331f, 0.073891f, 0.048716f, 0.034602f, 0.027293f, 0.024058f, 0.027766f, 0.038832f, 0.050743f, 0.057603f, 0.060423f, 0.063103f, 0.066372f, 0.067205f, 0.061224f, 0.045463f, 0.021062f, -0.007194f, -0.035078f, -0.061177f, -0.084943f, -0.105741f, -0.124709f, -0.144522f, -0.166406f, -0.189512f, -0.213041f, -0.236632f, -0.259187f, -0.279363f, -0.296402f, -0.308917f, -0.314459f, -0.311746f, -0.301536f, -0.284320f, -0.259412f, -0.227155f, -0.189434f, -0.147199f, -0.099925f, -0.048097f, 0.006127f, 0.061017f, 0.115797f, 0.169006f, 0.218343f, 0.262025f, 0.298749f, 0.326845f, 0.345052f, 0.353588f, 0.353173f, 0.343709f, 0.325096f, 0.298746f, 0.267135f, 0.231913f, 0.193115f, 0.150515f, 0.105513f, 0.060953f, 0.018598f, -0.022322f, -0.063041f, -0.102759f, -0.139669f, -0.173357f, -0.204275f, -0.231780f, -0.254700f, -0.272996f, - -0.286913f, -0.295377f, -0.297011f, -0.291997f, -0.281495f, -0.266021f, -0.245380f, -0.219470f, -0.188934f, -0.156137f, -0.125122f, -0.098779f, -0.076246f, -0.054735f, -0.033488f, -0.014413f, 0.000330f, 0.009800f, 0.014374f, 0.015862f, 0.016591f, 0.017377f, 0.017391f, 0.016313f, 0.015068f, 0.014452f, 0.014844f, 0.017137f, 0.022089f, 0.029075f, 0.037043f, 0.045911f, 0.055611f, 0.064990f, 0.073012f, 0.079676f, 0.084818f, 0.087704f, 0.088459f, 0.088069f, 0.086787f, 0.084427f, 0.081841f, 0.080001f, 0.078313f, 0.075848f, 0.073092f, 0.070651f, 0.067838f, 0.064177f, 0.060367f, 0.056565f, 0.051968f, 0.046818f, 0.042330f, 0.038426f, 0.034201f, 0.030169f, 0.027300f, 0.024914f, 0.022225f, 0.020280f, 0.019900f, 0.019979f, 0.019917f, 0.020854f, 0.022870f, 0.024349f, 0.025106f, 0.026471f, 0.028137f, 0.028929f, 0.029895f, 0.032523f, 0.035592f, 0.037737f, 0.040348f, 0.044286f, 0.047546f, 0.049185f, 0.050714f, 0.051542f, 0.048951f, 0.043598f, 0.038299f, 0.031936f, 0.022010f, 0.010903f, 0.001637f, -0.008334f, -0.021151f, -0.033005f, -0.042008f, -0.052364f, -0.064471f, -0.073163f, - -0.079941f, -0.090963f, -0.101864f, -0.105166f, -0.109415f, -0.124289f, -0.135694f, -0.130563f, -0.130580f, -0.154548f, -0.170385f, -0.149105f, -0.139181f, -0.196892f, -0.261751f, -0.216013f, -0.071571f, 0.026285f, 0.005174f, -0.050751f, -0.064299f, -0.081628f, -0.152957f, -0.210051f, -0.161120f, -0.036845f, 0.049592f, 0.047608f, 0.003439f, -0.026155f, -0.042297f, -0.092917f, -0.208966f, -0.338758f, -0.363990f, -0.229119f, -0.040285f, 0.032605f, -0.046756f, -0.151981f, -0.170066f, -0.127443f, -0.110599f, -0.135320f, -0.151985f, -0.135982f, -0.110796f, -0.098463f}, - {-0.003437f, 0.012198f, 0.001203f, -0.021097f, 0.002466f, 0.043512f, -0.000962f, -0.131262f, -0.193341f, -0.073245f, 0.141155f, 0.268143f, 0.241794f, 0.140847f, 0.054105f, -0.002619f, -0.050716f, -0.099528f, -0.145239f, -0.181794f, -0.200756f, -0.196431f, -0.173654f, -0.142090f, -0.107331f, -0.073891f, -0.048716f, -0.034602f, -0.027293f, -0.024058f, -0.027766f, -0.038832f, -0.050743f, -0.057603f, -0.060423f, -0.063103f, -0.066372f, -0.067205f, -0.061224f, -0.045463f, -0.021062f, 0.007194f, 0.035078f, 0.061177f, 0.084943f, 0.105741f, 0.124709f, 0.144522f, 0.166406f, 0.189512f, 0.213041f, 0.236632f, 0.259187f, 0.279363f, 0.296402f, 0.308917f, 0.314459f, 0.311746f, 0.301536f, 0.284320f, 0.259412f, 0.227155f, 0.189434f, 0.147199f, 0.099925f, 0.048097f, -0.006127f, -0.061017f, -0.115797f, -0.169006f, -0.218343f, -0.262025f, -0.298749f, -0.326845f, -0.345052f, -0.353588f, -0.353173f, -0.343709f, -0.325096f, -0.298746f, -0.267135f, -0.231913f, -0.193115f, -0.150515f, -0.105513f, -0.060953f, -0.018598f, 0.022322f, 0.063041f, 0.102759f, 0.139669f, 0.173357f, 0.204275f, 0.231780f, 0.254700f, 0.272996f, - 0.286913f, 0.295377f, 0.297011f, 0.291997f, 0.281495f, 0.266021f, 0.245380f, 0.219470f, 0.188934f, 0.156137f, 0.125122f, 0.098779f, 0.076246f, 0.054735f, 0.033488f, 0.014413f, -0.000330f, -0.009800f, -0.014374f, -0.015862f, -0.016591f, -0.017377f, -0.017391f, -0.016313f, -0.015068f, -0.014452f, -0.014844f, -0.017137f, -0.022089f, -0.029075f, -0.037043f, -0.045911f, -0.055611f, -0.064990f, -0.073012f, -0.079676f, -0.084818f, -0.087704f, -0.088459f, -0.088069f, -0.086787f, -0.084427f, -0.081841f, -0.080001f, -0.078313f, -0.075848f, -0.073092f, -0.070651f, -0.067838f, -0.064177f, -0.060367f, -0.056565f, -0.051968f, -0.046818f, -0.042330f, -0.038426f, -0.034201f, -0.030169f, -0.027300f, -0.024914f, -0.022225f, -0.020280f, -0.019900f, -0.019979f, -0.019917f, -0.020854f, -0.022870f, -0.024349f, -0.025106f, -0.026471f, -0.028137f, -0.028929f, -0.029895f, -0.032523f, -0.035592f, -0.037737f, -0.040348f, -0.044286f, -0.047546f, -0.049185f, -0.050714f, -0.051542f, -0.048951f, -0.043598f, -0.038299f, -0.031936f, -0.022010f, -0.010903f, -0.001637f, 0.008334f, 0.021151f, 0.033005f, 0.042008f, 0.052364f, 0.064471f, 0.073163f, - 0.079941f, 0.090963f, 0.101864f, 0.105166f, 0.109415f, 0.124289f, 0.135694f, 0.130563f, 0.130580f, 0.154548f, 0.170385f, 0.149105f, 0.139181f, 0.196892f, 0.261751f, 0.216013f, 0.071571f, -0.026285f, -0.005174f, 0.050751f, 0.064299f, 0.081628f, 0.152957f, 0.210051f, 0.161120f, 0.036845f, -0.049592f, -0.047608f, -0.003439f, 0.026155f, 0.042297f, 0.092917f, 0.208966f, 0.338758f, 0.363990f, 0.229119f, 0.040285f, -0.032605f, 0.046756f, 0.151981f, 0.170066f, 0.127443f, 0.110599f, 0.135320f, 0.151985f, 0.135982f, 0.110796f, 0.098463f} - }, - { - {-0.013125f, -0.012286f, -0.029270f, -0.061330f, -0.081694f, -0.084134f, -0.091685f, -0.102795f, -0.065219f, 0.061788f, 0.237540f, 0.366702f, 0.391070f, 0.329203f, 0.231539f, 0.128665f, 0.030035f, -0.055797f, -0.120914f, -0.167779f, -0.204453f, -0.233321f, -0.251764f, -0.259124f, -0.256054f, -0.240951f, -0.214156f, -0.184034f, -0.162756f, -0.155363f, -0.156163f, -0.155957f, -0.150073f, -0.139152f, -0.125066f, -0.108295f, -0.088604f, -0.066285f, -0.041833f, -0.015371f, 0.012408f, 0.039073f, 0.061555f, 0.078734f, 0.092119f, 0.103815f, 0.114599f, 0.124104f, 0.131882f, 0.137736f, 0.141533f, 0.143131f, 0.142328f, 0.138733f, 0.131953f, 0.122040f, 0.109684f, 0.095975f, 0.082044f, 0.068749f, 0.056557f, 0.045720f, 0.036579f, 0.029561f, 0.024955f, 0.022883f, 0.023595f, 0.027669f, 0.035746f, 0.048030f, 0.064154f, 0.083701f, 0.106779f, 0.133727f, 0.164258f, 0.197388f, 0.232365f, 0.269041f, 0.306917f, 0.344448f, 0.379910f, 0.412508f, 0.441996f, 0.467563f, 0.487862f, 0.502016f, 0.509982f, 0.512033f, 0.508380f, 0.499122f, 0.483934f, 0.461848f, 0.432088f, 0.395456f, 0.354502f, 0.311899f, - 0.268761f, 0.224882f, 0.180662f, 0.138577f, 0.102422f, 0.074928f, 0.056036f, 0.043532f, 0.035361f, 0.031276f, 0.032342f, 0.039114f, 0.050516f, 0.064273f, 0.078040f, 0.090120f, 0.099605f, 0.106269f, 0.110292f, 0.111800f, 0.110505f, 0.105782f, 0.097125f, 0.084634f, 0.069175f, 0.052019f, 0.034230f, 0.016325f, -0.001585f, -0.019467f, -0.037208f, -0.054624f, -0.071625f, -0.088455f, -0.105611f, -0.123311f, -0.141167f, -0.158623f, -0.175578f, -0.192349f, -0.209294f, -0.226791f, -0.245271f, -0.264788f, -0.284670f, -0.303913f, -0.321795f, -0.337907f, -0.351875f, -0.363338f, -0.372063f, -0.377966f, -0.381198f, -0.382224f, -0.381582f, -0.379626f, -0.376697f, -0.373288f, -0.369744f, -0.366057f, -0.362215f, -0.358447f, -0.354924f, -0.351586f, -0.348440f, -0.345609f, -0.342984f, -0.340226f, -0.337164f, -0.333840f, -0.330365f, -0.327079f, -0.324467f, -0.322570f, -0.320900f, -0.319189f, -0.317555f, -0.315784f, -0.313305f, -0.309987f, -0.306067f, -0.301378f, -0.295609f, -0.289009f, -0.281841f, -0.273722f, -0.264499f, -0.254839f, -0.245040f, -0.234614f, -0.223819f, -0.213828f, -0.204802f, -0.195896f, -0.187327f, -0.179883f, - -0.172843f, -0.165369f, -0.158571f, -0.152828f, -0.145851f, -0.137397f, -0.131226f, -0.127613f, -0.121187f, -0.112221f, -0.109209f, -0.111868f, -0.106951f, -0.093814f, -0.094519f, -0.118779f, -0.140589f, -0.136582f, -0.124286f, -0.127257f, -0.127194f, -0.098697f, -0.071650f, -0.098895f, -0.168848f, -0.212657f, -0.201109f, -0.174379f, -0.169160f, -0.176945f, -0.183912f, -0.189724f, -0.175821f, -0.122967f, -0.075644f, -0.113343f, -0.231230f, -0.325873f, -0.333768f, -0.305146f, -0.299949f, -0.300130f, -0.283939f, -0.290832f, -0.324013f, -0.278523f, -0.090004f, 0.105839f}, - {-0.013125f, -0.012286f, -0.029270f, -0.061330f, -0.081694f, -0.084134f, -0.091685f, -0.102795f, -0.065219f, 0.061788f, 0.237540f, 0.366702f, 0.391070f, 0.329203f, 0.231539f, 0.128665f, 0.030035f, -0.055797f, -0.120914f, -0.167779f, -0.204453f, -0.233321f, -0.251764f, -0.259124f, -0.256054f, -0.240951f, -0.214156f, -0.184034f, -0.162756f, -0.155363f, -0.156163f, -0.155957f, -0.150073f, -0.139152f, -0.125066f, -0.108295f, -0.088604f, -0.066285f, -0.041833f, -0.015371f, 0.012408f, 0.039073f, 0.061555f, 0.078734f, 0.092119f, 0.103815f, 0.114599f, 0.124104f, 0.131882f, 0.137736f, 0.141533f, 0.143131f, 0.142328f, 0.138733f, 0.131953f, 0.122040f, 0.109684f, 0.095975f, 0.082044f, 0.068749f, 0.056557f, 0.045720f, 0.036579f, 0.029561f, 0.024955f, 0.022883f, 0.023595f, 0.027669f, 0.035746f, 0.048030f, 0.064154f, 0.083701f, 0.106779f, 0.133727f, 0.164258f, 0.197388f, 0.232365f, 0.269041f, 0.306917f, 0.344448f, 0.379910f, 0.412508f, 0.441996f, 0.467563f, 0.487862f, 0.502016f, 0.509982f, 0.512033f, 0.508380f, 0.499122f, 0.483934f, 0.461848f, 0.432088f, 0.395456f, 0.354502f, 0.311899f, - 0.268761f, 0.224882f, 0.180662f, 0.138577f, 0.102422f, 0.074928f, 0.056036f, 0.043532f, 0.035361f, 0.031276f, 0.032342f, 0.039114f, 0.050516f, 0.064273f, 0.078040f, 0.090120f, 0.099605f, 0.106269f, 0.110292f, 0.111800f, 0.110505f, 0.105782f, 0.097125f, 0.084634f, 0.069175f, 0.052019f, 0.034230f, 0.016325f, -0.001585f, -0.019467f, -0.037208f, -0.054624f, -0.071625f, -0.088455f, -0.105611f, -0.123311f, -0.141167f, -0.158623f, -0.175578f, -0.192349f, -0.209294f, -0.226791f, -0.245271f, -0.264788f, -0.284670f, -0.303913f, -0.321795f, -0.337907f, -0.351875f, -0.363338f, -0.372063f, -0.377966f, -0.381198f, -0.382224f, -0.381582f, -0.379626f, -0.376697f, -0.373288f, -0.369744f, -0.366057f, -0.362215f, -0.358447f, -0.354924f, -0.351586f, -0.348440f, -0.345609f, -0.342984f, -0.340226f, -0.337164f, -0.333840f, -0.330365f, -0.327079f, -0.324467f, -0.322570f, -0.320900f, -0.319189f, -0.317555f, -0.315784f, -0.313305f, -0.309987f, -0.306067f, -0.301378f, -0.295609f, -0.289009f, -0.281841f, -0.273722f, -0.264499f, -0.254839f, -0.245040f, -0.234614f, -0.223819f, -0.213828f, -0.204802f, -0.195896f, -0.187327f, -0.179883f, - -0.172843f, -0.165369f, -0.158571f, -0.152828f, -0.145851f, -0.137397f, -0.131226f, -0.127613f, -0.121187f, -0.112221f, -0.109209f, -0.111868f, -0.106951f, -0.093814f, -0.094519f, -0.118779f, -0.140589f, -0.136582f, -0.124286f, -0.127257f, -0.127194f, -0.098697f, -0.071650f, -0.098895f, -0.168848f, -0.212657f, -0.201109f, -0.174379f, -0.169160f, -0.176945f, -0.183912f, -0.189724f, -0.175821f, -0.122967f, -0.075644f, -0.113343f, -0.231230f, -0.325873f, -0.333768f, -0.305146f, -0.299949f, -0.300130f, -0.283939f, -0.290832f, -0.324013f, -0.278523f, -0.090004f, 0.105839f} - }, - { - {0.050610f, -0.021351f, -0.100660f, -0.104774f, -0.001476f, 0.148669f, 0.225308f, 0.152954f, -0.017164f, -0.150555f, -0.164165f, -0.095774f, -0.032833f, -0.010556f, -0.007376f, -0.005342f, -0.006979f, -0.005520f, 0.015106f, 0.047669f, 0.063520f, 0.053315f, 0.039601f, 0.043141f, 0.059336f, 0.074668f, 0.086926f, 0.099752f, 0.110453f, 0.112472f, 0.103586f, 0.087024f, 0.068584f, 0.053729f, 0.043401f, 0.032419f, 0.014740f, -0.010636f, -0.040573f, -0.071513f, -0.100005f, -0.122661f, -0.138393f, -0.148847f, -0.155444f, -0.158100f, -0.157286f, -0.154654f, -0.151141f, -0.146642f, -0.141589f, -0.136794f, -0.132018f, -0.126472f, -0.120197f, -0.113478f, -0.105693f, -0.096136f, -0.085272f, -0.074193f, -0.063578f, -0.053837f, -0.045575f, -0.039450f, -0.035848f, -0.034577f, -0.034666f, -0.035080f, -0.035819f, -0.037340f, -0.038869f, -0.038729f, -0.036395f, -0.032558f, -0.026954f, -0.017828f, -0.003894f, 0.014663f, 0.037307f, 0.063972f, 0.094584f, 0.128616f, 0.164960f, 0.201947f, 0.238243f, 0.273778f, 0.308471f, 0.340250f, 0.366585f, 0.388241f, 0.408822f, 0.429564f, 0.446929f, 0.456648f, 0.458222f, 0.454015f, - 0.445283f, 0.430644f, 0.408172f, 0.378082f, 0.342964f, 0.305191f, 0.264513f, 0.219134f, 0.169076f, 0.117258f, 0.067008f, 0.019484f, -0.026357f, -0.072188f, -0.118578f, -0.163875f, -0.204958f, -0.239778f, -0.268783f, -0.293465f, -0.314413f, -0.331340f, -0.343971f, -0.352262f, -0.356602f, -0.358148f, -0.358147f, -0.356868f, -0.354035f, -0.349981f, -0.345415f, -0.340428f, -0.334505f, -0.326935f, -0.316753f, -0.303400f, -0.288003f, -0.272824f, -0.259031f, -0.246114f, -0.233327f, -0.220114f, -0.205519f, -0.189122f, -0.172346f, -0.157167f, -0.143959f, -0.132013f, -0.121111f, -0.111003f, -0.100614f, -0.089445f, -0.078639f, -0.069419f, -0.061736f, -0.055228f, -0.049885f, -0.045103f, -0.039720f, -0.033390f, -0.026593f, -0.019544f, -0.012457f, -0.006080f, -0.000606f, 0.004882f, 0.010838f, 0.016694f, 0.022579f, 0.029413f, 0.036726f, 0.042841f, 0.047462f, 0.051547f, 0.054909f, 0.056743f, 0.057750f, 0.058983f, 0.059835f, 0.059730f, 0.059790f, 0.060557f, 0.060792f, 0.060463f, 0.061464f, 0.063958f, 0.066147f, 0.068356f, 0.072542f, 0.077895f, 0.082279f, 0.086766f, 0.093073f, 0.099166f, 0.103431f, 0.108681f, - 0.115924f, 0.120958f, 0.123369f, 0.129092f, 0.137670f, 0.140558f, 0.138996f, 0.145136f, 0.157044f, 0.157137f, 0.147369f, 0.154619f, 0.181695f, 0.189239f, 0.157222f, 0.128976f, 0.151684f, 0.202074f, 0.221839f, 0.206540f, 0.201774f, 0.218344f, 0.212651f, 0.164038f, 0.118748f, 0.127617f, 0.174253f, 0.199599f, 0.180895f, 0.151327f, 0.140967f, 0.129460f, 0.078567f, -0.000953f, -0.044718f, -0.008185f, 0.074463f, 0.126113f, 0.114079f, 0.078761f, 0.073555f, 0.099683f, 0.115917f, 0.100920f, 0.084812f, 0.112488f, 0.184986f, 0.249040f}, - {0.050610f, -0.021351f, -0.100660f, -0.104774f, -0.001476f, 0.148669f, 0.225308f, 0.152954f, -0.017164f, -0.150555f, -0.164165f, -0.095774f, -0.032833f, -0.010556f, -0.007376f, -0.005342f, -0.006979f, -0.005520f, 0.015106f, 0.047669f, 0.063520f, 0.053315f, 0.039601f, 0.043141f, 0.059336f, 0.074668f, 0.086926f, 0.099752f, 0.110453f, 0.112472f, 0.103586f, 0.087024f, 0.068584f, 0.053729f, 0.043401f, 0.032419f, 0.014740f, -0.010636f, -0.040573f, -0.071513f, -0.100005f, -0.122661f, -0.138393f, -0.148847f, -0.155444f, -0.158100f, -0.157286f, -0.154654f, -0.151141f, -0.146642f, -0.141589f, -0.136794f, -0.132018f, -0.126472f, -0.120197f, -0.113478f, -0.105693f, -0.096136f, -0.085272f, -0.074193f, -0.063578f, -0.053837f, -0.045575f, -0.039450f, -0.035848f, -0.034577f, -0.034666f, -0.035080f, -0.035819f, -0.037340f, -0.038869f, -0.038729f, -0.036395f, -0.032558f, -0.026954f, -0.017828f, -0.003894f, 0.014663f, 0.037307f, 0.063972f, 0.094584f, 0.128616f, 0.164960f, 0.201947f, 0.238243f, 0.273778f, 0.308471f, 0.340250f, 0.366585f, 0.388241f, 0.408822f, 0.429564f, 0.446929f, 0.456648f, 0.458222f, 0.454015f, - 0.445283f, 0.430644f, 0.408172f, 0.378082f, 0.342964f, 0.305191f, 0.264513f, 0.219134f, 0.169076f, 0.117258f, 0.067008f, 0.019484f, -0.026357f, -0.072188f, -0.118578f, -0.163875f, -0.204958f, -0.239778f, -0.268783f, -0.293465f, -0.314413f, -0.331340f, -0.343971f, -0.352262f, -0.356602f, -0.358148f, -0.358147f, -0.356868f, -0.354035f, -0.349981f, -0.345415f, -0.340428f, -0.334505f, -0.326935f, -0.316753f, -0.303400f, -0.288003f, -0.272824f, -0.259031f, -0.246114f, -0.233327f, -0.220114f, -0.205519f, -0.189122f, -0.172346f, -0.157167f, -0.143959f, -0.132013f, -0.121111f, -0.111003f, -0.100614f, -0.089445f, -0.078639f, -0.069419f, -0.061736f, -0.055228f, -0.049885f, -0.045103f, -0.039720f, -0.033390f, -0.026593f, -0.019544f, -0.012457f, -0.006080f, -0.000606f, 0.004882f, 0.010838f, 0.016694f, 0.022579f, 0.029413f, 0.036726f, 0.042841f, 0.047462f, 0.051547f, 0.054909f, 0.056743f, 0.057750f, 0.058983f, 0.059835f, 0.059730f, 0.059790f, 0.060557f, 0.060792f, 0.060463f, 0.061464f, 0.063958f, 0.066147f, 0.068356f, 0.072542f, 0.077895f, 0.082279f, 0.086766f, 0.093073f, 0.099166f, 0.103431f, 0.108681f, - 0.115924f, 0.120958f, 0.123369f, 0.129092f, 0.137670f, 0.140558f, 0.138996f, 0.145136f, 0.157044f, 0.157137f, 0.147369f, 0.154619f, 0.181695f, 0.189239f, 0.157222f, 0.128976f, 0.151684f, 0.202074f, 0.221839f, 0.206540f, 0.201774f, 0.218344f, 0.212651f, 0.164038f, 0.118748f, 0.127617f, 0.174253f, 0.199599f, 0.180895f, 0.151327f, 0.140967f, 0.129460f, 0.078567f, -0.000953f, -0.044718f, -0.008185f, 0.074463f, 0.126113f, 0.114079f, 0.078761f, 0.073555f, 0.099683f, 0.115917f, 0.100920f, 0.084812f, 0.112488f, 0.184986f, 0.249040f} - }, - { - {-0.007259f, 0.065962f, 0.096309f, 0.006203f, -0.159743f, -0.308935f, -0.381128f, -0.338419f, -0.157384f, 0.121690f, 0.390091f, 0.561354f, 0.636734f, 0.654536f, 0.616285f, 0.502886f, 0.333745f, 0.163082f, 0.024174f, -0.091879f, -0.205022f, -0.317570f, -0.417716f, -0.495244f, -0.549209f, -0.586773f, -0.616327f, -0.639690f, -0.652018f, -0.649196f, -0.631826f, -0.601837f, -0.559630f, -0.505851f, -0.442897f, -0.373591f, -0.300236f, -0.225238f, -0.151321f, -0.081172f, -0.017263f, 0.039030f, 0.088587f, 0.133536f, 0.174581f, 0.210389f, 0.239635f, 0.262423f, 0.279828f, 0.293433f, 0.305269f, 0.316863f, 0.328072f, 0.337528f, 0.344140f, 0.347611f, 0.347874f, 0.344828f, 0.338652f, 0.329942f, 0.319435f, 0.307658f, 0.294798f, 0.280926f, 0.266291f, 0.251209f, 0.235746f, 0.219931f, 0.204222f, 0.189273f, 0.175236f, 0.161855f, 0.149231f, 0.137841f, 0.127719f, 0.118342f, 0.109578f, 0.102141f, 0.096648f, 0.092633f, 0.088918f, 0.084709f, 0.079908f, 0.074514f, 0.068253f, 0.061036f, 0.053526f, 0.046953f, 0.042328f, 0.039859f, 0.039087f, 0.039576f, 0.041346f, 0.044345f, 0.047321f, 0.047623f, - 0.042687f, 0.031837f, 0.016339f, -0.002376f, -0.024180f, -0.049770f, -0.078870f, -0.109212f, -0.137584f, -0.161947f, -0.182317f, -0.199471f, -0.213209f, -0.222271f, -0.225693f, -0.223821f, -0.218155f, -0.210460f, -0.201796f, -0.192062f, -0.180645f, -0.167638f, -0.154215f, -0.141821f, -0.131276f, -0.122438f, -0.114188f, -0.104943f, -0.093887f, -0.081673f, -0.069541f, -0.058028f, -0.046937f, -0.035989f, -0.024863f, -0.013051f, -0.000327f, 0.012968f, 0.026458f, 0.040102f, 0.053835f, 0.067424f, 0.080870f, 0.094376f, 0.107841f, 0.120849f, 0.133049f, 0.144070f, 0.153324f, 0.160345f, 0.165072f, 0.167561f, 0.167875f, 0.166359f, 0.163402f, 0.158903f, 0.152585f, 0.144627f, 0.135297f, 0.124447f, 0.112145f, 0.099225f, 0.086451f, 0.073867f, 0.061586f, 0.050227f, 0.039978f, 0.030333f, 0.021214f, 0.013255f, 0.006789f, 0.001699f, -0.001887f, -0.003958f, -0.005254f, -0.006402f, -0.007235f, -0.007883f, -0.009180f, -0.011060f, -0.012189f, -0.011989f, -0.011177f, -0.009936f, -0.007788f, -0.005316f, -0.003617f, -0.002436f, -0.001133f, -0.000357f, -0.000436f, -0.000049f, 0.001324f, 0.002343f, 0.002892f, 0.004473f, - 0.006454f, 0.006882f, 0.007116f, 0.009391f, 0.011036f, 0.009231f, 0.008488f, 0.012900f, 0.016080f, 0.012730f, 0.012822f, 0.025048f, 0.034679f, 0.024410f, 0.011274f, 0.029631f, 0.076704f, 0.110326f, 0.108291f, 0.095726f, 0.100643f, 0.113980f, 0.112557f, 0.097168f, 0.087042f, 0.092041f, 0.107251f, 0.124685f, 0.138049f, 0.143937f, 0.145917f, 0.147885f, 0.136336f, 0.082786f, -0.018275f, -0.118932f, -0.151821f, -0.107798f, -0.055208f, -0.053504f, -0.072264f, -0.048152f, -0.003743f, -0.018576f, -0.062348f, 0.027201f, 0.312207f, 0.589094f}, - {-0.007259f, 0.065962f, 0.096309f, 0.006203f, -0.159743f, -0.308935f, -0.381128f, -0.338419f, -0.157384f, 0.121690f, 0.390091f, 0.561354f, 0.636734f, 0.654536f, 0.616285f, 0.502886f, 0.333745f, 0.163082f, 0.024174f, -0.091879f, -0.205022f, -0.317570f, -0.417716f, -0.495244f, -0.549209f, -0.586773f, -0.616327f, -0.639690f, -0.652018f, -0.649196f, -0.631826f, -0.601837f, -0.559630f, -0.505851f, -0.442897f, -0.373591f, -0.300236f, -0.225238f, -0.151321f, -0.081172f, -0.017263f, 0.039030f, 0.088587f, 0.133536f, 0.174581f, 0.210389f, 0.239635f, 0.262423f, 0.279828f, 0.293433f, 0.305269f, 0.316863f, 0.328072f, 0.337528f, 0.344140f, 0.347611f, 0.347874f, 0.344828f, 0.338652f, 0.329942f, 0.319435f, 0.307658f, 0.294798f, 0.280926f, 0.266291f, 0.251209f, 0.235746f, 0.219931f, 0.204222f, 0.189273f, 0.175236f, 0.161855f, 0.149231f, 0.137841f, 0.127719f, 0.118342f, 0.109578f, 0.102141f, 0.096648f, 0.092633f, 0.088918f, 0.084709f, 0.079908f, 0.074514f, 0.068253f, 0.061036f, 0.053526f, 0.046953f, 0.042328f, 0.039859f, 0.039087f, 0.039576f, 0.041346f, 0.044345f, 0.047321f, 0.047623f, - 0.042687f, 0.031837f, 0.016339f, -0.002376f, -0.024180f, -0.049770f, -0.078870f, -0.109212f, -0.137584f, -0.161947f, -0.182317f, -0.199471f, -0.213209f, -0.222271f, -0.225693f, -0.223821f, -0.218155f, -0.210460f, -0.201796f, -0.192062f, -0.180645f, -0.167638f, -0.154215f, -0.141821f, -0.131276f, -0.122438f, -0.114188f, -0.104943f, -0.093887f, -0.081673f, -0.069541f, -0.058028f, -0.046937f, -0.035989f, -0.024863f, -0.013051f, -0.000327f, 0.012968f, 0.026458f, 0.040102f, 0.053835f, 0.067424f, 0.080870f, 0.094376f, 0.107841f, 0.120849f, 0.133049f, 0.144070f, 0.153324f, 0.160345f, 0.165072f, 0.167561f, 0.167875f, 0.166359f, 0.163402f, 0.158903f, 0.152585f, 0.144627f, 0.135297f, 0.124447f, 0.112145f, 0.099225f, 0.086451f, 0.073867f, 0.061586f, 0.050227f, 0.039978f, 0.030333f, 0.021214f, 0.013255f, 0.006789f, 0.001699f, -0.001887f, -0.003958f, -0.005254f, -0.006402f, -0.007235f, -0.007883f, -0.009180f, -0.011060f, -0.012189f, -0.011989f, -0.011177f, -0.009936f, -0.007788f, -0.005316f, -0.003617f, -0.002436f, -0.001133f, -0.000357f, -0.000436f, -0.000049f, 0.001324f, 0.002343f, 0.002892f, 0.004473f, - 0.006454f, 0.006882f, 0.007116f, 0.009391f, 0.011036f, 0.009231f, 0.008488f, 0.012900f, 0.016080f, 0.012730f, 0.012822f, 0.025048f, 0.034679f, 0.024410f, 0.011274f, 0.029631f, 0.076704f, 0.110326f, 0.108291f, 0.095726f, 0.100643f, 0.113980f, 0.112557f, 0.097168f, 0.087042f, 0.092041f, 0.107251f, 0.124685f, 0.138049f, 0.143937f, 0.145917f, 0.147885f, 0.136336f, 0.082786f, -0.018275f, -0.118932f, -0.151821f, -0.107798f, -0.055208f, -0.053504f, -0.072264f, -0.048152f, -0.003743f, -0.018576f, -0.062348f, 0.027201f, 0.312207f, 0.589094f} - } -}; -const float CRendBin_HOA2_HRIR_coeff_im_48kHz[9][BINAURAL_CHANNELS][240]={ - { - {-0.279578f, -0.717721f, -0.877611f, -0.774906f, -0.535062f, -0.269989f, -0.021067f, 0.209874f, 0.413226f, 0.563225f, 0.637276f, 0.629373f, 0.548884f, 0.414833f, 0.250811f, 0.079096f, -0.084627f, -0.232375f, -0.360791f, -0.467119f, -0.547631f, -0.599855f, -0.625984f, -0.632346f, -0.624188f, -0.602062f, -0.564595f, -0.513530f, -0.454080f, -0.391123f, -0.327168f, -0.263808f, -0.202953f, -0.145944f, -0.092780f, -0.042980f, 0.003472f, 0.046452f, 0.086451f, 0.124553f, 0.161794f, 0.198667f, 0.235068f, 0.270617f, 0.305017f, 0.338134f, 0.369878f, 0.400174f, 0.429020f, 0.456378f, 0.482018f, 0.505631f, 0.527097f, 0.546486f, 0.563827f, 0.579121f, 0.592594f, 0.604726f, 0.615911f, 0.626238f, 0.635705f, 0.644462f, 0.652664f, 0.660229f, 0.667010f, 0.673113f, 0.678788f, 0.684082f, 0.688924f, 0.693472f, 0.698001f, 0.702510f, 0.706806f, 0.710936f, 0.715101f, 0.719195f, 0.722909f, 0.726269f, 0.729530f, 0.732512f, 0.734617f, 0.735606f, 0.735863f, 0.735678f, 0.734755f, 0.732698f, 0.729673f, 0.726255f, 0.722712f, 0.718664f, 0.713561f, 0.707417f, 0.700900f, 0.694611f, 0.688481f, 0.682146f, - 0.675755f, 0.670059f, 0.665672f, 0.662528f, 0.660105f, 0.658010f, 0.656294f, 0.655275f, 0.655042f, 0.655135f, 0.654860f, 0.653870f, 0.652278f, 0.650245f, 0.647706f, 0.644488f, 0.640451f, 0.635518f, 0.629758f, 0.623449f, 0.616889f, 0.610232f, 0.603544f, 0.596898f, 0.590297f, 0.583682f, 0.577056f, 0.570442f, 0.563736f, 0.556801f, 0.549678f, 0.542492f, 0.535279f, 0.528093f, 0.521154f, 0.514648f, 0.508527f, 0.502690f, 0.497140f, 0.491836f, 0.486633f, 0.481501f, 0.476572f, 0.471906f, 0.467418f, 0.463039f, 0.458686f, 0.454164f, 0.449331f, 0.444241f, 0.438935f, 0.433317f, 0.427381f, 0.421288f, 0.415067f, 0.408572f, 0.401819f, 0.394993f, 0.388100f, 0.381032f, 0.373904f, 0.366955f, 0.360223f, 0.353709f, 0.347609f, 0.342029f, 0.336786f, 0.331780f, 0.327133f, 0.322727f, 0.318173f, 0.313407f, 0.308724f, 0.304155f, 0.299488f, 0.294851f, 0.290528f, 0.286392f, 0.282213f, 0.278211f, 0.274620f, 0.271203f, 0.267853f, 0.264940f, 0.262515f, 0.260046f, 0.257391f, 0.254933f, 0.252512f, 0.249509f, 0.246067f, 0.242749f, 0.239216f, 0.234883f, 0.230316f, 0.226146f, - 0.221603f, 0.216109f, 0.210802f, 0.206272f, 0.200974f, 0.194324f, 0.188446f, 0.183987f, 0.178038f, 0.169726f, 0.163182f, 0.160324f, 0.155860f, 0.145447f, 0.133826f, 0.127980f, 0.126532f, 0.122924f, 0.114883f, 0.103866f, 0.090500f, 0.079053f, 0.080753f, 0.100935f, 0.125261f, 0.130967f, 0.113407f, 0.091776f, 0.085866f, 0.095550f, 0.107946f, 0.118310f, 0.135431f, 0.165381f, 0.195627f, 0.202054f, 0.174034f, 0.127848f, 0.089951f, 0.070123f, 0.058538f, 0.046398f, 0.036783f, 0.032164f, 0.024778f, 0.009249f, -0.004637f, -0.004463f}, - {-0.279578f, -0.717721f, -0.877611f, -0.774906f, -0.535062f, -0.269989f, -0.021067f, 0.209874f, 0.413226f, 0.563225f, 0.637276f, 0.629373f, 0.548884f, 0.414833f, 0.250811f, 0.079096f, -0.084627f, -0.232375f, -0.360791f, -0.467119f, -0.547631f, -0.599855f, -0.625984f, -0.632346f, -0.624188f, -0.602062f, -0.564595f, -0.513530f, -0.454080f, -0.391123f, -0.327168f, -0.263808f, -0.202953f, -0.145944f, -0.092780f, -0.042980f, 0.003472f, 0.046452f, 0.086451f, 0.124553f, 0.161794f, 0.198667f, 0.235068f, 0.270617f, 0.305017f, 0.338134f, 0.369878f, 0.400174f, 0.429020f, 0.456378f, 0.482018f, 0.505631f, 0.527097f, 0.546486f, 0.563827f, 0.579121f, 0.592594f, 0.604726f, 0.615911f, 0.626238f, 0.635705f, 0.644462f, 0.652664f, 0.660229f, 0.667010f, 0.673113f, 0.678788f, 0.684082f, 0.688924f, 0.693472f, 0.698001f, 0.702510f, 0.706806f, 0.710936f, 0.715101f, 0.719195f, 0.722909f, 0.726269f, 0.729530f, 0.732512f, 0.734617f, 0.735606f, 0.735863f, 0.735678f, 0.734755f, 0.732698f, 0.729673f, 0.726255f, 0.722712f, 0.718664f, 0.713561f, 0.707417f, 0.700900f, 0.694611f, 0.688481f, 0.682146f, - 0.675755f, 0.670059f, 0.665672f, 0.662528f, 0.660105f, 0.658010f, 0.656294f, 0.655275f, 0.655042f, 0.655135f, 0.654860f, 0.653870f, 0.652278f, 0.650245f, 0.647706f, 0.644488f, 0.640451f, 0.635518f, 0.629758f, 0.623449f, 0.616889f, 0.610232f, 0.603544f, 0.596898f, 0.590297f, 0.583682f, 0.577056f, 0.570442f, 0.563736f, 0.556801f, 0.549678f, 0.542492f, 0.535279f, 0.528093f, 0.521154f, 0.514648f, 0.508527f, 0.502690f, 0.497140f, 0.491836f, 0.486633f, 0.481501f, 0.476572f, 0.471906f, 0.467418f, 0.463039f, 0.458686f, 0.454164f, 0.449331f, 0.444241f, 0.438935f, 0.433317f, 0.427381f, 0.421288f, 0.415067f, 0.408572f, 0.401819f, 0.394993f, 0.388100f, 0.381032f, 0.373904f, 0.366955f, 0.360223f, 0.353709f, 0.347609f, 0.342029f, 0.336786f, 0.331780f, 0.327133f, 0.322727f, 0.318173f, 0.313407f, 0.308724f, 0.304155f, 0.299488f, 0.294851f, 0.290528f, 0.286392f, 0.282213f, 0.278211f, 0.274620f, 0.271203f, 0.267853f, 0.264940f, 0.262515f, 0.260046f, 0.257391f, 0.254933f, 0.252512f, 0.249509f, 0.246067f, 0.242749f, 0.239216f, 0.234883f, 0.230316f, 0.226146f, - 0.221603f, 0.216109f, 0.210802f, 0.206272f, 0.200974f, 0.194324f, 0.188446f, 0.183987f, 0.178038f, 0.169726f, 0.163182f, 0.160324f, 0.155860f, 0.145447f, 0.133826f, 0.127980f, 0.126532f, 0.122924f, 0.114883f, 0.103866f, 0.090500f, 0.079053f, 0.080753f, 0.100935f, 0.125261f, 0.130967f, 0.113407f, 0.091776f, 0.085866f, 0.095550f, 0.107946f, 0.118310f, 0.135431f, 0.165381f, 0.195627f, 0.202054f, 0.174034f, 0.127848f, 0.089951f, 0.070123f, 0.058538f, 0.046398f, 0.036783f, 0.032164f, 0.024778f, 0.009249f, -0.004637f, -0.004463f} - }, - { - {0.138076f, 0.232898f, -0.059293f, -0.612224f, -1.079196f, -1.174106f, -0.864429f, -0.332847f, 0.203546f, 0.626268f, 0.915930f, 1.086338f, 1.145817f, 1.101913f, 0.971577f, 0.776715f, 0.537327f, 0.273208f, 0.007437f, -0.237576f, -0.448750f, -0.625455f, -0.772863f, -0.892799f, -0.982209f, -1.039402f, -1.068583f, -1.077066f, -1.070181f, -1.050445f, -1.019817f, -0.980553f, -0.934407f, -0.882631f, -0.826646f, -0.767793f, -0.706548f, -0.642564f, -0.575417f, -0.505095f, -0.432158f, -0.357731f, -0.283190f, -0.209614f, -0.137562f, -0.067329f, 0.000718f, 0.066025f, 0.127937f, 0.186022f, 0.240454f, 0.292036f, 0.341688f, 0.389810f, 0.436063f, 0.479708f, 0.520133f, 0.557017f, 0.590135f, 0.619320f, 0.644743f, 0.666931f, 0.686264f, 0.702737f, 0.716446f, 0.727930f, 0.737674f, 0.745631f, 0.751724f, 0.756469f, 0.760579f, 0.764261f, 0.767563f, 0.771136f, 0.775889f, 0.781953f, 0.788798f, 0.796429f, 0.805575f, 0.816463f, 0.828227f, 0.840053f, 0.852209f, 0.865317f, 0.879077f, 0.892490f, 0.905078f, 0.917237f, 0.929509f, 0.942079f, 0.954921f, 0.967923f, 0.980775f, 0.993059f, 1.004433f, 1.014471f, - 1.022368f, 1.027077f, 1.027777f, 1.024171f, 1.016419f, 1.004875f, 0.989829f, 0.971522f, 0.950481f, 0.927664f, 0.904094f, 0.880496f, 0.857481f, 0.835889f, 0.816673f, 0.800449f, 0.787227f, 0.776425f, 0.767212f, 0.759123f, 0.752399f, 0.747484f, 0.744215f, 0.741719f, 0.738940f, 0.735065f, 0.729726f, 0.723226f, 0.716367f, 0.709723f, 0.703224f, 0.696593f, 0.689822f, 0.683015f, 0.676123f, 0.669098f, 0.662044f, 0.655092f, 0.648381f, 0.642144f, 0.636550f, 0.631509f, 0.626846f, 0.622532f, 0.618608f, 0.615118f, 0.612225f, 0.610115f, 0.608697f, 0.607677f, 0.606831f, 0.605900f, 0.604476f, 0.602385f, 0.599878f, 0.597091f, 0.593736f, 0.589617f, 0.584851f, 0.579299f, 0.572456f, 0.564168f, 0.554769f, 0.544430f, 0.533113f, 0.521100f, 0.508789f, 0.496142f, 0.483005f, 0.469593f, 0.456081f, 0.442365f, 0.428689f, 0.415677f, 0.403373f, 0.391276f, 0.379404f, 0.368075f, 0.356787f, 0.344691f, 0.331928f, 0.319178f, 0.306569f, 0.294254f, 0.282956f, 0.272791f, 0.262941f, 0.253310f, 0.244606f, 0.236417f, 0.227600f, 0.218521f, 0.210224f, 0.202126f, 0.193377f, 0.184872f, - 0.177026f, 0.168429f, 0.159251f, 0.151477f, 0.143811f, 0.133179f, 0.122218f, 0.115290f, 0.107467f, 0.092035f, 0.077002f, 0.072747f, 0.065602f, 0.034483f, -0.005140f, -0.013392f, 0.010536f, 0.022405f, 0.003341f, -0.016208f, -0.024400f, -0.060491f, -0.141552f, -0.211147f, -0.211352f, -0.166013f, -0.144212f, -0.172423f, -0.224227f, -0.268380f, -0.293530f, -0.314223f, -0.372350f, -0.487543f, -0.585910f, -0.542642f, -0.338207f, -0.113721f, -0.017641f, -0.045890f, -0.089863f, -0.096510f, -0.108175f, -0.164168f, -0.233196f, -0.252807f, -0.193549f, -0.071985f}, - {-0.138076f, -0.232898f, 0.059293f, 0.612224f, 1.079196f, 1.174106f, 0.864429f, 0.332847f, -0.203546f, -0.626268f, -0.915930f, -1.086338f, -1.145817f, -1.101913f, -0.971577f, -0.776715f, -0.537327f, -0.273208f, -0.007437f, 0.237576f, 0.448750f, 0.625455f, 0.772863f, 0.892799f, 0.982209f, 1.039402f, 1.068583f, 1.077066f, 1.070181f, 1.050445f, 1.019817f, 0.980553f, 0.934407f, 0.882631f, 0.826646f, 0.767793f, 0.706548f, 0.642564f, 0.575417f, 0.505095f, 0.432158f, 0.357731f, 0.283190f, 0.209614f, 0.137562f, 0.067329f, -0.000718f, -0.066025f, -0.127937f, -0.186022f, -0.240454f, -0.292036f, -0.341688f, -0.389810f, -0.436063f, -0.479708f, -0.520133f, -0.557017f, -0.590135f, -0.619320f, -0.644743f, -0.666931f, -0.686264f, -0.702737f, -0.716446f, -0.727930f, -0.737674f, -0.745631f, -0.751724f, -0.756469f, -0.760579f, -0.764261f, -0.767563f, -0.771136f, -0.775889f, -0.781953f, -0.788798f, -0.796429f, -0.805575f, -0.816463f, -0.828227f, -0.840053f, -0.852209f, -0.865317f, -0.879077f, -0.892490f, -0.905078f, -0.917237f, -0.929509f, -0.942079f, -0.954921f, -0.967923f, -0.980775f, -0.993059f, -1.004433f, -1.014471f, - -1.022368f, -1.027077f, -1.027777f, -1.024171f, -1.016419f, -1.004875f, -0.989829f, -0.971522f, -0.950481f, -0.927664f, -0.904094f, -0.880496f, -0.857481f, -0.835889f, -0.816673f, -0.800449f, -0.787227f, -0.776425f, -0.767212f, -0.759123f, -0.752399f, -0.747484f, -0.744215f, -0.741719f, -0.738940f, -0.735065f, -0.729726f, -0.723226f, -0.716367f, -0.709723f, -0.703224f, -0.696593f, -0.689822f, -0.683015f, -0.676123f, -0.669098f, -0.662044f, -0.655092f, -0.648381f, -0.642144f, -0.636550f, -0.631509f, -0.626846f, -0.622532f, -0.618608f, -0.615118f, -0.612225f, -0.610115f, -0.608697f, -0.607677f, -0.606831f, -0.605900f, -0.604476f, -0.602385f, -0.599878f, -0.597091f, -0.593736f, -0.589617f, -0.584851f, -0.579299f, -0.572456f, -0.564168f, -0.554769f, -0.544430f, -0.533113f, -0.521100f, -0.508789f, -0.496142f, -0.483005f, -0.469593f, -0.456081f, -0.442365f, -0.428689f, -0.415677f, -0.403373f, -0.391276f, -0.379404f, -0.368075f, -0.356787f, -0.344691f, -0.331928f, -0.319178f, -0.306569f, -0.294254f, -0.282956f, -0.272791f, -0.262941f, -0.253310f, -0.244606f, -0.236417f, -0.227600f, -0.218521f, -0.210224f, -0.202126f, -0.193377f, -0.184872f, - -0.177026f, -0.168429f, -0.159251f, -0.151477f, -0.143811f, -0.133179f, -0.122218f, -0.115290f, -0.107467f, -0.092035f, -0.077002f, -0.072747f, -0.065602f, -0.034483f, 0.005140f, 0.013392f, -0.010536f, -0.022405f, -0.003341f, 0.016208f, 0.024400f, 0.060491f, 0.141552f, 0.211147f, 0.211352f, 0.166013f, 0.144212f, 0.172423f, 0.224227f, 0.268380f, 0.293530f, 0.314223f, 0.372350f, 0.487543f, 0.585910f, 0.542642f, 0.338207f, 0.113721f, 0.017641f, 0.045890f, 0.089863f, 0.096510f, 0.108175f, 0.164168f, 0.233196f, 0.252807f, 0.193549f, 0.071985f} - }, - { - {-0.037543f, -0.106298f, -0.132530f, -0.073451f, 0.040855f, 0.110624f, 0.077156f, -0.013882f, -0.078578f, -0.081147f, -0.036444f, 0.028042f, 0.082921f, 0.101725f, 0.085482f, 0.065260f, 0.061559f, 0.057998f, 0.029356f, -0.022782f, -0.077787f, -0.123346f, -0.158215f, -0.178489f, -0.178126f, -0.160401f, -0.137683f, -0.119363f, -0.104942f, -0.088255f, -0.065195f, -0.037559f, -0.011105f, 0.009311f, 0.021969f, 0.026322f, 0.021717f, 0.009661f, -0.004873f, -0.016525f, -0.022987f, -0.024411f, -0.021007f, -0.012643f, 0.000208f, 0.016512f, 0.035490f, 0.057006f, 0.081545f, 0.110024f, 0.143089f, 0.180306f, 0.220287f, 0.261700f, 0.303801f, 0.345902f, 0.386845f, 0.425449f, 0.461174f, 0.493797f, 0.522610f, 0.546536f, 0.564888f, 0.577273f, 0.582799f, 0.580231f, 0.568985f, 0.549222f, 0.521000f, 0.484211f, 0.439353f, 0.387577f, 0.330111f, 0.268508f, 0.205168f, 0.142536f, 0.081907f, 0.024074f, -0.029079f, -0.075065f, -0.113125f, -0.144667f, -0.170681f, -0.189953f, -0.201133f, -0.205765f, -0.207348f, -0.207284f, -0.203651f, -0.194832f, -0.182670f, -0.170621f, -0.160017f, -0.149783f, -0.139015f, -0.128209f, - -0.118405f, -0.110532f, -0.105361f, -0.103080f, -0.102998f, -0.104199f, -0.106317f, -0.109616f, -0.114814f, -0.122543f, -0.132141f, -0.141277f, -0.147750f, -0.151340f, -0.153125f, -0.153636f, -0.152546f, -0.149354f, -0.143412f, -0.133993f, -0.121078f, -0.105467f, -0.087876f, -0.068787f, -0.049126f, -0.029929f, -0.011465f, 0.006234f, 0.022384f, 0.036020f, 0.046948f, 0.055235f, 0.060646f, 0.063321f, 0.063920f, 0.062627f, 0.059315f, 0.054877f, 0.050886f, 0.047979f, 0.046017f, 0.045215f, 0.045354f, 0.044782f, 0.042070f, 0.037698f, 0.032628f, 0.026663f, 0.019561f, 0.011982f, 0.004168f, -0.004450f, -0.013603f, -0.022173f, -0.030039f, -0.037798f, -0.045029f, -0.051093f, -0.056790f, -0.063043f, -0.069298f, -0.075124f, -0.081416f, -0.088384f, -0.094829f, -0.100596f, -0.106885f, -0.113537f, -0.119188f, -0.124015f, -0.128908f, -0.132920f, -0.135078f, -0.136917f, -0.139850f, -0.142734f, -0.145054f, -0.148801f, -0.154723f, -0.161242f, -0.168600f, -0.178599f, -0.189814f, -0.199312f, -0.208105f, -0.218177f, -0.226967f, -0.231947f, -0.235940f, -0.240788f, -0.242709f, -0.240449f, -0.238584f, -0.237547f, -0.232614f, -0.225682f, - -0.222453f, -0.218439f, -0.207392f, -0.198145f, -0.198203f, -0.192708f, -0.171847f, -0.158579f, -0.166585f, -0.161468f, -0.122471f, -0.101708f, -0.137293f, -0.150514f, -0.047189f, 0.105121f, 0.141538f, 0.038879f, -0.058972f, -0.070125f, -0.067759f, -0.100256f, -0.083756f, 0.038302f, 0.163436f, 0.166050f, 0.072134f, -0.001083f, -0.012004f, -0.012920f, -0.047149f, -0.098550f, -0.117690f, -0.061872f, 0.057074f, 0.148338f, 0.118443f, -0.008074f, -0.102218f, -0.087453f, -0.021704f, 0.005998f, -0.005131f, 0.000032f, 0.032495f, 0.053140f, 0.041387f, 0.014100f}, - {-0.037543f, -0.106298f, -0.132530f, -0.073451f, 0.040855f, 0.110624f, 0.077156f, -0.013882f, -0.078578f, -0.081147f, -0.036444f, 0.028042f, 0.082921f, 0.101725f, 0.085482f, 0.065260f, 0.061559f, 0.057998f, 0.029356f, -0.022782f, -0.077787f, -0.123346f, -0.158215f, -0.178489f, -0.178126f, -0.160401f, -0.137683f, -0.119363f, -0.104942f, -0.088255f, -0.065195f, -0.037559f, -0.011105f, 0.009311f, 0.021969f, 0.026322f, 0.021717f, 0.009661f, -0.004873f, -0.016525f, -0.022987f, -0.024411f, -0.021007f, -0.012643f, 0.000208f, 0.016512f, 0.035490f, 0.057006f, 0.081545f, 0.110024f, 0.143089f, 0.180306f, 0.220287f, 0.261700f, 0.303801f, 0.345902f, 0.386845f, 0.425449f, 0.461174f, 0.493797f, 0.522610f, 0.546536f, 0.564888f, 0.577273f, 0.582799f, 0.580231f, 0.568985f, 0.549222f, 0.521000f, 0.484211f, 0.439353f, 0.387577f, 0.330111f, 0.268508f, 0.205168f, 0.142536f, 0.081907f, 0.024074f, -0.029079f, -0.075065f, -0.113125f, -0.144667f, -0.170681f, -0.189953f, -0.201133f, -0.205765f, -0.207348f, -0.207284f, -0.203651f, -0.194832f, -0.182670f, -0.170621f, -0.160017f, -0.149783f, -0.139015f, -0.128209f, - -0.118405f, -0.110532f, -0.105361f, -0.103080f, -0.102998f, -0.104199f, -0.106317f, -0.109616f, -0.114814f, -0.122543f, -0.132141f, -0.141277f, -0.147750f, -0.151340f, -0.153125f, -0.153636f, -0.152546f, -0.149354f, -0.143412f, -0.133993f, -0.121078f, -0.105467f, -0.087876f, -0.068787f, -0.049126f, -0.029929f, -0.011465f, 0.006234f, 0.022384f, 0.036020f, 0.046948f, 0.055235f, 0.060646f, 0.063321f, 0.063920f, 0.062627f, 0.059315f, 0.054877f, 0.050886f, 0.047979f, 0.046017f, 0.045215f, 0.045354f, 0.044782f, 0.042070f, 0.037698f, 0.032628f, 0.026663f, 0.019561f, 0.011982f, 0.004168f, -0.004450f, -0.013603f, -0.022173f, -0.030039f, -0.037798f, -0.045029f, -0.051093f, -0.056790f, -0.063043f, -0.069298f, -0.075124f, -0.081416f, -0.088384f, -0.094829f, -0.100596f, -0.106885f, -0.113537f, -0.119188f, -0.124015f, -0.128908f, -0.132920f, -0.135078f, -0.136917f, -0.139850f, -0.142734f, -0.145054f, -0.148801f, -0.154723f, -0.161242f, -0.168600f, -0.178599f, -0.189814f, -0.199312f, -0.208105f, -0.218177f, -0.226967f, -0.231947f, -0.235940f, -0.240788f, -0.242709f, -0.240449f, -0.238584f, -0.237547f, -0.232614f, -0.225682f, - -0.222453f, -0.218439f, -0.207392f, -0.198145f, -0.198203f, -0.192708f, -0.171847f, -0.158579f, -0.166585f, -0.161468f, -0.122471f, -0.101708f, -0.137293f, -0.150514f, -0.047189f, 0.105121f, 0.141538f, 0.038879f, -0.058972f, -0.070125f, -0.067759f, -0.100256f, -0.083756f, 0.038302f, 0.163436f, 0.166050f, 0.072134f, -0.001083f, -0.012004f, -0.012920f, -0.047149f, -0.098550f, -0.117690f, -0.061872f, 0.057074f, 0.148338f, 0.118443f, -0.008074f, -0.102218f, -0.087453f, -0.021704f, 0.005998f, -0.005131f, 0.000032f, 0.032495f, 0.053140f, 0.041387f, 0.014100f} - }, - { - {-0.001106f, -0.029336f, -0.088077f, -0.114632f, -0.068558f, 0.003679f, 0.023786f, -0.022926f, -0.076983f, -0.077263f, -0.017663f, 0.063789f, 0.127856f, 0.160626f, 0.172314f, 0.179408f, 0.185660f, 0.178469f, 0.143908f, 0.081866f, 0.004191f, -0.076672f, -0.152185f, -0.216145f, -0.266904f, -0.310241f, -0.353459f, -0.395898f, -0.429566f, -0.448814f, -0.454423f, -0.447805f, -0.426583f, -0.388419f, -0.335647f, -0.273327f, -0.204930f, -0.132418f, -0.058962f, 0.011028f, 0.074401f, 0.130338f, 0.179186f, 0.221323f, 0.257177f, 0.287606f, 0.313805f, 0.336653f, 0.356005f, 0.370794f, 0.380013f, 0.383528f, 0.382178f, 0.377769f, 0.372920f, 0.369927f, 0.369378f, 0.370338f, 0.371805f, 0.373185f, 0.373702f, 0.372612f, 0.370075f, 0.366792f, 0.362926f, 0.358356f, 0.353579f, 0.349053f, 0.343991f, 0.337160f, 0.328527f, 0.318673f, 0.306976f, 0.292001f, 0.273582f, 0.252844f, 0.230152f, 0.204754f, 0.176888f, 0.148599f, 0.121626f, 0.095786f, 0.070566f, 0.047273f, 0.028034f, 0.013069f, 0.000532f, -0.010938f, -0.021026f, -0.029352f, -0.036545f, -0.042848f, -0.047044f, -0.047912f, -0.045699f, -0.041015f, - -0.033180f, -0.020912f, -0.004151f, 0.015844f, 0.037990f, 0.062328f, 0.089567f, 0.119856f, 0.151790f, 0.182876f, 0.211529f, 0.238379f, 0.264991f, 0.291575f, 0.316519f, 0.337842f, 0.354699f, 0.367998f, 0.379918f, 0.392155f, 0.404219f, 0.413945f, 0.419814f, 0.422264f, 0.423013f, 0.423999f, 0.426644f, 0.431049f, 0.435919f, 0.439985f, 0.443271f, 0.446555f, 0.450297f, 0.454641f, 0.459593f, 0.464544f, 0.468334f, 0.470226f, 0.470176f, 0.468166f, 0.464117f, 0.458340f, 0.451170f, 0.442355f, 0.431549f, 0.418970f, 0.404970f, 0.389655f, 0.373457f, 0.357280f, 0.341693f, 0.326836f, 0.313170f, 0.301285f, 0.291120f, 0.282416f, 0.275493f, 0.270594f, 0.267224f, 0.265075f, 0.264513f, 0.265346f, 0.266418f, 0.267094f, 0.267617f, 0.267704f, 0.266552f, 0.264373f, 0.262126f, 0.260015f, 0.257862f, 0.256090f, 0.254673f, 0.252424f, 0.248786f, 0.244534f, 0.239712f, 0.233258f, 0.225288f, 0.216847f, 0.207365f, 0.195576f, 0.182346f, 0.169120f, 0.155183f, 0.140015f, 0.125688f, 0.113431f, 0.101547f, 0.089772f, 0.080598f, 0.073961f, 0.067095f, 0.060688f, 0.057289f, 0.054588f, - 0.049873f, 0.047292f, 0.049167f, 0.048148f, 0.042023f, 0.042578f, 0.052039f, 0.052105f, 0.039829f, 0.042979f, 0.066307f, 0.065764f, 0.028206f, 0.026431f, 0.116043f, 0.221103f, 0.223358f, 0.136204f, 0.075662f, 0.075938f, 0.065554f, 0.030357f, 0.054492f, 0.158858f, 0.232985f, 0.194413f, 0.106812f, 0.067102f, 0.067912f, 0.048003f, 0.000150f, -0.049393f, -0.102920f, -0.154412f, -0.145923f, -0.043235f, 0.082041f, 0.125246f, 0.083044f, 0.044160f, 0.057384f, 0.079976f, 0.065854f, 0.041133f, 0.057617f, 0.106489f, 0.119625f, 0.053552f}, - {-0.001106f, -0.029336f, -0.088077f, -0.114632f, -0.068558f, 0.003679f, 0.023786f, -0.022926f, -0.076983f, -0.077263f, -0.017663f, 0.063789f, 0.127856f, 0.160626f, 0.172314f, 0.179408f, 0.185660f, 0.178469f, 0.143908f, 0.081866f, 0.004191f, -0.076672f, -0.152185f, -0.216145f, -0.266904f, -0.310241f, -0.353459f, -0.395898f, -0.429566f, -0.448814f, -0.454423f, -0.447805f, -0.426583f, -0.388419f, -0.335647f, -0.273327f, -0.204930f, -0.132418f, -0.058962f, 0.011028f, 0.074401f, 0.130338f, 0.179186f, 0.221323f, 0.257177f, 0.287606f, 0.313805f, 0.336653f, 0.356005f, 0.370794f, 0.380013f, 0.383528f, 0.382178f, 0.377769f, 0.372920f, 0.369927f, 0.369378f, 0.370338f, 0.371805f, 0.373185f, 0.373702f, 0.372612f, 0.370075f, 0.366792f, 0.362926f, 0.358356f, 0.353579f, 0.349053f, 0.343991f, 0.337160f, 0.328527f, 0.318673f, 0.306976f, 0.292001f, 0.273582f, 0.252844f, 0.230152f, 0.204754f, 0.176888f, 0.148599f, 0.121626f, 0.095786f, 0.070566f, 0.047273f, 0.028034f, 0.013069f, 0.000532f, -0.010938f, -0.021026f, -0.029352f, -0.036545f, -0.042848f, -0.047044f, -0.047912f, -0.045699f, -0.041015f, - -0.033180f, -0.020912f, -0.004151f, 0.015844f, 0.037990f, 0.062328f, 0.089567f, 0.119856f, 0.151790f, 0.182876f, 0.211529f, 0.238379f, 0.264991f, 0.291575f, 0.316519f, 0.337842f, 0.354699f, 0.367998f, 0.379918f, 0.392155f, 0.404219f, 0.413945f, 0.419814f, 0.422264f, 0.423013f, 0.423999f, 0.426644f, 0.431049f, 0.435919f, 0.439985f, 0.443271f, 0.446555f, 0.450297f, 0.454641f, 0.459593f, 0.464544f, 0.468334f, 0.470226f, 0.470176f, 0.468166f, 0.464117f, 0.458340f, 0.451170f, 0.442355f, 0.431549f, 0.418970f, 0.404970f, 0.389655f, 0.373457f, 0.357280f, 0.341693f, 0.326836f, 0.313170f, 0.301285f, 0.291120f, 0.282416f, 0.275493f, 0.270594f, 0.267224f, 0.265075f, 0.264513f, 0.265346f, 0.266418f, 0.267094f, 0.267617f, 0.267704f, 0.266552f, 0.264373f, 0.262126f, 0.260015f, 0.257862f, 0.256090f, 0.254673f, 0.252424f, 0.248786f, 0.244534f, 0.239712f, 0.233258f, 0.225288f, 0.216847f, 0.207365f, 0.195576f, 0.182346f, 0.169120f, 0.155183f, 0.140015f, 0.125688f, 0.113431f, 0.101547f, 0.089772f, 0.080598f, 0.073961f, 0.067095f, 0.060688f, 0.057289f, 0.054588f, - 0.049873f, 0.047292f, 0.049167f, 0.048148f, 0.042023f, 0.042578f, 0.052039f, 0.052105f, 0.039829f, 0.042979f, 0.066307f, 0.065764f, 0.028206f, 0.026431f, 0.116043f, 0.221103f, 0.223358f, 0.136204f, 0.075662f, 0.075938f, 0.065554f, 0.030357f, 0.054492f, 0.158858f, 0.232985f, 0.194413f, 0.106812f, 0.067102f, 0.067912f, 0.048003f, 0.000150f, -0.049393f, -0.102920f, -0.154412f, -0.145923f, -0.043235f, 0.082041f, 0.125246f, 0.083044f, 0.044160f, 0.057384f, 0.079976f, 0.065854f, 0.041133f, 0.057617f, 0.106489f, 0.119625f, 0.053552f} - }, - { - {-0.003789f, -0.003563f, 0.005390f, 0.004253f, -0.016392f, -0.039478f, -0.046987f, -0.050995f, -0.077966f, -0.121934f, -0.135164f, -0.078389f, 0.031562f, 0.138714f, 0.205564f, 0.238423f, 0.259289f, 0.272913f, 0.269301f, 0.243849f, 0.201082f, 0.144127f, 0.072703f, -0.009192f, -0.092622f, -0.171911f, -0.247325f, -0.318739f, -0.382003f, -0.432956f, -0.470676f, -0.495269f, -0.505851f, -0.501895f, -0.483566f, -0.449894f, -0.399742f, -0.335951f, -0.266183f, -0.198350f, -0.136588f, -0.081779f, -0.033568f, 0.009088f, 0.047647f, 0.083109f, 0.115870f, 0.146272f, 0.174342f, 0.199243f, 0.219907f, 0.235988f, 0.247660f, 0.255290f, 0.260042f, 0.263953f, 0.268571f, 0.274114f, 0.280349f, 0.287365f, 0.295056f, 0.302862f, 0.310459f, 0.317888f, 0.324842f, 0.330747f, 0.335542f, 0.339373f, 0.341625f, 0.341355f, 0.338531f, 0.333589f, 0.325911f, 0.314093f, 0.297767f, 0.277788f, 0.254435f, 0.226961f, 0.195597f, 0.162625f, 0.130256f, 0.098385f, 0.065891f, 0.033566f, 0.003825f, -0.022571f, -0.047471f, -0.072174f, -0.095089f, -0.113849f, -0.128315f, -0.139798f, -0.148327f, -0.152538f, -0.151922f, -0.147693f, - -0.141449f, -0.134009f, -0.125542f, -0.116170f, -0.106339f, -0.096745f, -0.087767f, -0.079178f, -0.070833f, -0.063188f, -0.056416f, -0.049448f, -0.040822f, -0.030317f, -0.019055f, -0.008311f, 0.001362f, 0.010417f, 0.020238f, 0.032100f, 0.045698f, 0.059224f, 0.071090f, 0.081057f, 0.089857f, 0.098613f, 0.108519f, 0.120125f, 0.132885f, 0.145947f, 0.159099f, 0.172520f, 0.186195f, 0.200063f, 0.214027f, 0.227406f, 0.239060f, 0.248310f, 0.255115f, 0.259453f, 0.261381f, 0.261468f, 0.260276f, 0.257747f, 0.253798f, 0.248995f, 0.243998f, 0.239084f, 0.234733f, 0.231749f, 0.230386f, 0.230266f, 0.231313f, 0.233779f, 0.237497f, 0.242150f, 0.247940f, 0.255021f, 0.262901f, 0.271206f, 0.280071f, 0.289077f, 0.297036f, 0.303388f, 0.308430f, 0.311992f, 0.313524f, 0.313400f, 0.312461f, 0.310668f, 0.307845f, 0.304798f, 0.302098f, 0.299086f, 0.295438f, 0.291960f, 0.288762f, 0.284855f, 0.280127f, 0.275167f, 0.269236f, 0.261328f, 0.252490f, 0.244013f, 0.235006f, 0.224872f, 0.215456f, 0.207625f, 0.199481f, 0.190596f, 0.183143f, 0.177022f, 0.169991f, 0.163109f, 0.158683f, 0.154359f, - 0.148010f, 0.143942f, 0.143859f, 0.140381f, 0.132047f, 0.130317f, 0.136071f, 0.131329f, 0.114971f, 0.114353f, 0.131726f, 0.123744f, 0.081739f, 0.079871f, 0.169779f, 0.273251f, 0.274171f, 0.185331f, 0.118375f, 0.110316f, 0.100500f, 0.075041f, 0.100840f, 0.188865f, 0.245753f, 0.209825f, 0.136354f, 0.098537f, 0.089245f, 0.068116f, 0.030138f, -0.014604f, -0.058375f, -0.058884f, 0.036565f, 0.189080f, 0.269087f, 0.211524f, 0.102010f, 0.054393f, 0.068058f, 0.069962f, 0.039279f, 0.011969f, -0.001065f, -0.019914f, -0.036169f, -0.019550f}, - {0.003789f, 0.003563f, -0.005390f, -0.004253f, 0.016392f, 0.039478f, 0.046987f, 0.050995f, 0.077966f, 0.121934f, 0.135164f, 0.078389f, -0.031562f, -0.138714f, -0.205564f, -0.238423f, -0.259289f, -0.272913f, -0.269301f, -0.243849f, -0.201082f, -0.144127f, -0.072703f, 0.009192f, 0.092622f, 0.171911f, 0.247325f, 0.318739f, 0.382003f, 0.432956f, 0.470676f, 0.495269f, 0.505851f, 0.501895f, 0.483566f, 0.449894f, 0.399742f, 0.335951f, 0.266183f, 0.198350f, 0.136588f, 0.081779f, 0.033568f, -0.009088f, -0.047647f, -0.083109f, -0.115870f, -0.146272f, -0.174342f, -0.199243f, -0.219907f, -0.235988f, -0.247660f, -0.255290f, -0.260042f, -0.263953f, -0.268571f, -0.274114f, -0.280349f, -0.287365f, -0.295056f, -0.302862f, -0.310459f, -0.317888f, -0.324842f, -0.330747f, -0.335542f, -0.339373f, -0.341625f, -0.341355f, -0.338531f, -0.333589f, -0.325911f, -0.314093f, -0.297767f, -0.277788f, -0.254435f, -0.226961f, -0.195597f, -0.162625f, -0.130256f, -0.098385f, -0.065891f, -0.033566f, -0.003825f, 0.022571f, 0.047471f, 0.072174f, 0.095089f, 0.113849f, 0.128315f, 0.139798f, 0.148327f, 0.152538f, 0.151922f, 0.147693f, - 0.141449f, 0.134009f, 0.125542f, 0.116170f, 0.106339f, 0.096745f, 0.087767f, 0.079178f, 0.070833f, 0.063188f, 0.056416f, 0.049448f, 0.040822f, 0.030317f, 0.019055f, 0.008311f, -0.001362f, -0.010417f, -0.020238f, -0.032100f, -0.045698f, -0.059224f, -0.071090f, -0.081057f, -0.089857f, -0.098613f, -0.108519f, -0.120125f, -0.132885f, -0.145947f, -0.159099f, -0.172520f, -0.186195f, -0.200063f, -0.214027f, -0.227406f, -0.239060f, -0.248310f, -0.255115f, -0.259453f, -0.261381f, -0.261468f, -0.260276f, -0.257747f, -0.253798f, -0.248995f, -0.243998f, -0.239084f, -0.234733f, -0.231749f, -0.230386f, -0.230266f, -0.231313f, -0.233779f, -0.237497f, -0.242150f, -0.247940f, -0.255021f, -0.262901f, -0.271206f, -0.280071f, -0.289077f, -0.297036f, -0.303388f, -0.308430f, -0.311992f, -0.313524f, -0.313400f, -0.312461f, -0.310668f, -0.307845f, -0.304798f, -0.302098f, -0.299086f, -0.295438f, -0.291960f, -0.288762f, -0.284855f, -0.280127f, -0.275167f, -0.269236f, -0.261328f, -0.252490f, -0.244013f, -0.235006f, -0.224872f, -0.215456f, -0.207625f, -0.199481f, -0.190596f, -0.183143f, -0.177022f, -0.169991f, -0.163109f, -0.158683f, -0.154359f, - -0.148010f, -0.143942f, -0.143859f, -0.140381f, -0.132047f, -0.130317f, -0.136071f, -0.131329f, -0.114971f, -0.114353f, -0.131726f, -0.123744f, -0.081739f, -0.079871f, -0.169779f, -0.273251f, -0.274171f, -0.185331f, -0.118375f, -0.110316f, -0.100500f, -0.075041f, -0.100840f, -0.188865f, -0.245753f, -0.209825f, -0.136354f, -0.098537f, -0.089245f, -0.068116f, -0.030138f, 0.014604f, 0.058375f, 0.058884f, -0.036565f, -0.189080f, -0.269087f, -0.211524f, -0.102010f, -0.054393f, -0.068058f, -0.069962f, -0.039279f, -0.011969f, 0.001065f, 0.019914f, 0.036169f, 0.019550f} - }, - { - {-0.006846f, -0.000152f, 0.019374f, 0.004568f, -0.021442f, 0.016645f, 0.094894f, 0.078760f, -0.081254f, -0.243610f, -0.240659f, -0.079782f, 0.093230f, 0.178154f, 0.191226f, 0.185348f, 0.178503f, 0.163321f, 0.134365f, 0.090634f, 0.035061f, -0.021392f, -0.066568f, -0.096797f, -0.113194f, -0.115470f, -0.106244f, -0.093474f, -0.082246f, -0.071041f, -0.059987f, -0.054977f, -0.059639f, -0.069988f, -0.080582f, -0.091156f, -0.105014f, -0.124424f, -0.148446f, -0.172697f, -0.191456f, -0.201829f, -0.205066f, -0.203411f, -0.198122f, -0.190935f, -0.184076f, -0.177679f, -0.169636f, -0.158353f, -0.143485f, -0.124415f, -0.100358f, -0.071388f, -0.037625f, 0.001321f, 0.044603f, 0.089548f, 0.134068f, 0.177680f, 0.219330f, 0.256720f, 0.288657f, 0.315550f, 0.336880f, 0.350608f, 0.355516f, 0.351864f, 0.339573f, 0.317907f, 0.287002f, 0.247963f, 0.201779f, 0.149696f, 0.094063f, 0.037338f, -0.019185f, -0.074517f, -0.126620f, -0.173157f, -0.213261f, -0.247652f, -0.276903f, -0.300055f, -0.315444f, -0.323001f, -0.324860f, -0.322914f, -0.316675f, -0.304809f, -0.287684f, -0.266683f, -0.242026f, -0.213279f, -0.181142f, -0.146760f, - -0.110142f, -0.071145f, -0.031211f, 0.007509f, 0.043988f, 0.078081f, 0.109247f, 0.136169f, 0.156829f, 0.169152f, 0.173118f, 0.171933f, 0.169302f, 0.165775f, 0.159289f, 0.148635f, 0.134827f, 0.119999f, 0.106488f, 0.096001f, 0.088379f, 0.082075f, 0.076456f, 0.072384f, 0.070438f, 0.070288f, 0.071753f, 0.074612f, 0.077583f, 0.079232f, 0.079389f, 0.078235f, 0.075055f, 0.069328f, 0.061745f, 0.052996f, 0.043060f, 0.032476f, 0.022488f, 0.013477f, 0.005059f, -0.002387f, -0.008316f, -0.013571f, -0.019235f, -0.024853f, -0.029688f, -0.034327f, -0.039294f, -0.043859f, -0.047636f, -0.051298f, -0.054721f, -0.056837f, -0.057796f, -0.058696f, -0.059300f, -0.058729f, -0.057642f, -0.056982f, -0.055954f, -0.053837f, -0.051823f, -0.050759f, -0.049643f, -0.048234f, -0.047974f, -0.049006f, -0.049803f, -0.050341f, -0.051811f, -0.053521f, -0.054180f, -0.055033f, -0.057656f, -0.060879f, -0.063704f, -0.067950f, -0.074626f, -0.081990f, -0.089761f, -0.099845f, -0.111314f, -0.121038f, -0.129556f, -0.139256f, -0.148166f, -0.153341f, -0.157148f, -0.162167f, -0.165226f, -0.164304f, -0.163483f, -0.164081f, -0.161527f, -0.156368f, - -0.154318f, -0.152643f, -0.144643f, -0.136635f, -0.137086f, -0.134879f, -0.118831f, -0.106512f, -0.113435f, -0.113117f, -0.082437f, -0.060570f, -0.086167f, -0.101264f, -0.021545f, 0.106592f, 0.140238f, 0.045381f, -0.056517f, -0.078374f, -0.074532f, -0.103109f, -0.107473f, -0.023777f, 0.086175f, 0.108098f, 0.028080f, -0.068297f, -0.117080f, -0.133674f, -0.164582f, -0.217773f, -0.236408f, -0.146856f, 0.037683f, 0.182002f, 0.158627f, 0.006930f, -0.106384f, -0.089821f, -0.015786f, 0.009329f, -0.016630f, -0.027747f, -0.002433f, 0.022946f, 0.022944f, 0.008213f}, - {0.006846f, 0.000152f, -0.019374f, -0.004568f, 0.021442f, -0.016645f, -0.094894f, -0.078760f, 0.081254f, 0.243610f, 0.240659f, 0.079782f, -0.093230f, -0.178154f, -0.191226f, -0.185348f, -0.178503f, -0.163321f, -0.134365f, -0.090634f, -0.035061f, 0.021392f, 0.066568f, 0.096797f, 0.113194f, 0.115470f, 0.106244f, 0.093474f, 0.082246f, 0.071041f, 0.059987f, 0.054977f, 0.059639f, 0.069988f, 0.080582f, 0.091156f, 0.105014f, 0.124424f, 0.148446f, 0.172697f, 0.191456f, 0.201829f, 0.205066f, 0.203411f, 0.198122f, 0.190935f, 0.184076f, 0.177679f, 0.169636f, 0.158353f, 0.143485f, 0.124415f, 0.100358f, 0.071388f, 0.037625f, -0.001321f, -0.044603f, -0.089548f, -0.134068f, -0.177680f, -0.219330f, -0.256720f, -0.288657f, -0.315550f, -0.336880f, -0.350608f, -0.355516f, -0.351864f, -0.339573f, -0.317907f, -0.287002f, -0.247963f, -0.201779f, -0.149696f, -0.094063f, -0.037338f, 0.019185f, 0.074517f, 0.126620f, 0.173157f, 0.213261f, 0.247652f, 0.276903f, 0.300055f, 0.315444f, 0.323001f, 0.324860f, 0.322914f, 0.316675f, 0.304809f, 0.287684f, 0.266683f, 0.242026f, 0.213279f, 0.181142f, 0.146760f, - 0.110142f, 0.071145f, 0.031211f, -0.007509f, -0.043988f, -0.078081f, -0.109247f, -0.136169f, -0.156829f, -0.169152f, -0.173118f, -0.171933f, -0.169302f, -0.165775f, -0.159289f, -0.148635f, -0.134827f, -0.119999f, -0.106488f, -0.096001f, -0.088379f, -0.082075f, -0.076456f, -0.072384f, -0.070438f, -0.070288f, -0.071753f, -0.074612f, -0.077583f, -0.079232f, -0.079389f, -0.078235f, -0.075055f, -0.069328f, -0.061745f, -0.052996f, -0.043060f, -0.032476f, -0.022488f, -0.013477f, -0.005059f, 0.002387f, 0.008316f, 0.013571f, 0.019235f, 0.024853f, 0.029688f, 0.034327f, 0.039294f, 0.043859f, 0.047636f, 0.051298f, 0.054721f, 0.056837f, 0.057796f, 0.058696f, 0.059300f, 0.058729f, 0.057642f, 0.056982f, 0.055954f, 0.053837f, 0.051823f, 0.050759f, 0.049643f, 0.048234f, 0.047974f, 0.049006f, 0.049803f, 0.050341f, 0.051811f, 0.053521f, 0.054180f, 0.055033f, 0.057656f, 0.060879f, 0.063704f, 0.067950f, 0.074626f, 0.081990f, 0.089761f, 0.099845f, 0.111314f, 0.121038f, 0.129556f, 0.139256f, 0.148166f, 0.153341f, 0.157148f, 0.162167f, 0.165226f, 0.164304f, 0.163483f, 0.164081f, 0.161527f, 0.156368f, - 0.154318f, 0.152643f, 0.144643f, 0.136635f, 0.137086f, 0.134879f, 0.118831f, 0.106512f, 0.113435f, 0.113117f, 0.082437f, 0.060570f, 0.086167f, 0.101264f, 0.021545f, -0.106592f, -0.140238f, -0.045381f, 0.056517f, 0.078374f, 0.074532f, 0.103109f, 0.107473f, 0.023777f, -0.086175f, -0.108098f, -0.028080f, 0.068297f, 0.117080f, 0.133674f, 0.164582f, 0.217773f, 0.236408f, 0.146856f, -0.037683f, -0.182002f, -0.158627f, -0.006930f, 0.106384f, 0.089821f, 0.015786f, -0.009329f, 0.016630f, 0.027747f, 0.002433f, -0.022946f, -0.022944f, -0.008213f} - }, - { - {-0.001420f, -0.012065f, -0.026492f, -0.020203f, 0.009739f, 0.039421f, 0.066264f, 0.123513f, 0.219923f, 0.294024f, 0.266235f, 0.127758f, -0.051262f, -0.196504f, -0.284732f, -0.327956f, -0.337211f, -0.317958f, -0.281436f, -0.240577f, -0.198997f, -0.153781f, -0.105052f, -0.056036f, -0.008353f, 0.035683f, 0.069060f, 0.085305f, 0.087456f, 0.087200f, 0.094464f, 0.110361f, 0.130021f, 0.149198f, 0.166810f, 0.183045f, 0.197421f, 0.209077f, 0.217550f, 0.222212f, 0.221593f, 0.214614f, 0.202528f, 0.188537f, 0.175138f, 0.162537f, 0.149700f, 0.136000f, 0.121499f, 0.106417f, 0.090943f, 0.075268f, 0.059568f, 0.044160f, 0.029790f, 0.017578f, 0.008567f, 0.003340f, 0.001927f, 0.003952f, 0.008947f, 0.016627f, 0.026844f, 0.039331f, 0.053686f, 0.069631f, 0.087084f, 0.105849f, 0.125258f, 0.144267f, 0.162023f, 0.178236f, 0.192755f, 0.204836f, 0.213266f, 0.217287f, 0.216843f, 0.211652f, 0.200710f, 0.183257f, 0.159710f, 0.131033f, 0.097576f, 0.059269f, 0.016690f, -0.028770f, -0.075739f, -0.123333f, -0.170970f, -0.218285f, -0.265068f, -0.310574f, -0.352756f, -0.388810f, -0.416934f, -0.437347f, - -0.451255f, -0.458880f, -0.458839f, -0.449713f, -0.432204f, -0.409619f, -0.386020f, -0.363800f, -0.342969f, -0.322690f, -0.303273f, -0.286626f, -0.275007f, -0.269641f, -0.270390f, -0.276241f, -0.285888f, -0.298144f, -0.312255f, -0.327971f, -0.345199f, -0.363508f, -0.381893f, -0.399002f, -0.413686f, -0.425507f, -0.434753f, -0.441996f, -0.447655f, -0.451917f, -0.454880f, -0.456722f, -0.457797f, -0.458478f, -0.458752f, -0.458121f, -0.456157f, -0.453025f, -0.449242f, -0.445115f, -0.440663f, -0.435765f, -0.429977f, -0.422410f, -0.412255f, -0.399353f, -0.384044f, -0.366690f, -0.347614f, -0.327259f, -0.306182f, -0.285019f, -0.264467f, -0.245070f, -0.227032f, -0.210404f, -0.195308f, -0.181726f, -0.169332f, -0.157853f, -0.147307f, -0.137689f, -0.128750f, -0.120299f, -0.112312f, -0.104627f, -0.096937f, -0.089190f, -0.081612f, -0.074406f, -0.067751f, -0.061796f, -0.056271f, -0.050527f, -0.044251f, -0.037633f, -0.030645f, -0.022940f, -0.014604f, -0.006131f, 0.002380f, 0.011084f, 0.019647f, 0.027656f, 0.035299f, 0.042653f, 0.049064f, 0.054179f, 0.058475f, 0.061913f, 0.063651f, 0.063792f, 0.063468f, 0.062805f, 0.061111f, 0.058940f, - 0.057196f, 0.055040f, 0.051853f, 0.049240f, 0.047435f, 0.043389f, 0.036776f, 0.032043f, 0.029194f, 0.021482f, 0.009242f, 0.002996f, 0.002545f, -0.009347f, -0.036379f, -0.052805f, -0.041320f, -0.024358f, -0.027246f, -0.034686f, -0.024798f, -0.022626f, -0.064861f, -0.125246f, -0.137627f, -0.092121f, -0.047334f, -0.041987f, -0.054463f, -0.057870f, -0.053789f, -0.041072f, -0.015593f, -0.013176f, -0.080518f, -0.182863f, -0.217493f, -0.150387f, -0.062968f, -0.026715f, -0.015171f, 0.011874f, 0.031103f, 0.034503f, 0.089489f, 0.214435f, 0.272951f, 0.129518f}, - {-0.001420f, -0.012065f, -0.026492f, -0.020203f, 0.009739f, 0.039421f, 0.066264f, 0.123513f, 0.219923f, 0.294024f, 0.266235f, 0.127758f, -0.051262f, -0.196504f, -0.284732f, -0.327956f, -0.337211f, -0.317958f, -0.281436f, -0.240577f, -0.198997f, -0.153781f, -0.105052f, -0.056036f, -0.008353f, 0.035683f, 0.069060f, 0.085305f, 0.087456f, 0.087200f, 0.094464f, 0.110361f, 0.130021f, 0.149198f, 0.166810f, 0.183045f, 0.197421f, 0.209077f, 0.217550f, 0.222212f, 0.221593f, 0.214614f, 0.202528f, 0.188537f, 0.175138f, 0.162537f, 0.149700f, 0.136000f, 0.121499f, 0.106417f, 0.090943f, 0.075268f, 0.059568f, 0.044160f, 0.029790f, 0.017578f, 0.008567f, 0.003340f, 0.001927f, 0.003952f, 0.008947f, 0.016627f, 0.026844f, 0.039331f, 0.053686f, 0.069631f, 0.087084f, 0.105849f, 0.125258f, 0.144267f, 0.162023f, 0.178236f, 0.192755f, 0.204836f, 0.213266f, 0.217287f, 0.216843f, 0.211652f, 0.200710f, 0.183257f, 0.159710f, 0.131033f, 0.097576f, 0.059269f, 0.016690f, -0.028770f, -0.075739f, -0.123333f, -0.170970f, -0.218285f, -0.265068f, -0.310574f, -0.352756f, -0.388810f, -0.416934f, -0.437347f, - -0.451255f, -0.458880f, -0.458839f, -0.449713f, -0.432204f, -0.409619f, -0.386020f, -0.363800f, -0.342969f, -0.322690f, -0.303273f, -0.286626f, -0.275007f, -0.269641f, -0.270390f, -0.276241f, -0.285888f, -0.298144f, -0.312255f, -0.327971f, -0.345199f, -0.363508f, -0.381893f, -0.399002f, -0.413686f, -0.425507f, -0.434753f, -0.441996f, -0.447655f, -0.451917f, -0.454880f, -0.456722f, -0.457797f, -0.458478f, -0.458752f, -0.458121f, -0.456157f, -0.453025f, -0.449242f, -0.445115f, -0.440663f, -0.435765f, -0.429977f, -0.422410f, -0.412255f, -0.399353f, -0.384044f, -0.366690f, -0.347614f, -0.327259f, -0.306182f, -0.285019f, -0.264467f, -0.245070f, -0.227032f, -0.210404f, -0.195308f, -0.181726f, -0.169332f, -0.157853f, -0.147307f, -0.137689f, -0.128750f, -0.120299f, -0.112312f, -0.104627f, -0.096937f, -0.089190f, -0.081612f, -0.074406f, -0.067751f, -0.061796f, -0.056271f, -0.050527f, -0.044251f, -0.037633f, -0.030645f, -0.022940f, -0.014604f, -0.006131f, 0.002380f, 0.011084f, 0.019647f, 0.027656f, 0.035299f, 0.042653f, 0.049064f, 0.054179f, 0.058475f, 0.061913f, 0.063651f, 0.063792f, 0.063468f, 0.062805f, 0.061111f, 0.058940f, - 0.057196f, 0.055040f, 0.051853f, 0.049240f, 0.047435f, 0.043389f, 0.036776f, 0.032043f, 0.029194f, 0.021482f, 0.009242f, 0.002996f, 0.002545f, -0.009347f, -0.036379f, -0.052805f, -0.041320f, -0.024358f, -0.027246f, -0.034686f, -0.024798f, -0.022626f, -0.064861f, -0.125246f, -0.137627f, -0.092121f, -0.047334f, -0.041987f, -0.054463f, -0.057870f, -0.053789f, -0.041072f, -0.015593f, -0.013176f, -0.080518f, -0.182863f, -0.217493f, -0.150387f, -0.062968f, -0.026715f, -0.015171f, 0.011874f, 0.031103f, 0.034503f, 0.089489f, 0.214435f, 0.272951f, 0.129518f} - }, - { - {-0.038036f, -0.074902f, -0.024728f, 0.087455f, 0.171578f, 0.138660f, -0.013344f, -0.177067f, -0.224993f, -0.133475f, 0.000768f, 0.073679f, 0.073125f, 0.051799f, 0.042554f, 0.040258f, 0.042095f, 0.055917f, 0.071808f, 0.065859f, 0.038024f, 0.016554f, 0.018640f, 0.030709f, 0.033652f, 0.026271f, 0.015742f, 0.001748f, -0.019927f, -0.047556f, -0.074394f, -0.094749f, -0.106738f, -0.113212f, -0.120520f, -0.132744f, -0.147313f, -0.158256f, -0.161754f, -0.156711f, -0.143250f, -0.123457f, -0.101193f, -0.079047f, -0.057237f, -0.036057f, -0.016869f, -0.000173f, 0.014829f, 0.028457f, 0.040426f, 0.051286f, 0.062027f, 0.072634f, 0.082611f, 0.092229f, 0.101796f, 0.110497f, 0.117155f, 0.121469f, 0.123745f, 0.124154f, 0.122894f, 0.120542f, 0.118067f, 0.116669f, 0.117188f, 0.119429f, 0.122852f, 0.127992f, 0.135991f, 0.146706f, 0.158839f, 0.172086f, 0.187416f, 0.204930f, 0.223054f, 0.240129f, 0.255405f, 0.268314f, 0.277870f, 0.282894f, 0.282322f, 0.275749f, 0.263854f, 0.247296f, 0.225295f, 0.197079f, 0.164656f, 0.131544f, 0.098081f, 0.060564f, 0.016252f, -0.032884f, -0.082704f, -0.131427f, - -0.180130f, -0.229646f, -0.278328f, -0.323025f, -0.361917f, -0.395929f, -0.426764f, -0.453823f, -0.474235f, -0.486045f, -0.490258f, -0.489520f, -0.485692f, -0.478679f, -0.466693f, -0.447817f, -0.422153f, -0.392219f, -0.360719f, -0.328559f, -0.295468f, -0.261492f, -0.227219f, -0.193485f, -0.161356f, -0.131578f, -0.103829f, -0.077323f, -0.051994f, -0.028199f, -0.005636f, 0.016498f, 0.038710f, 0.061118f, 0.083300f, 0.103747f, 0.120694f, 0.134062f, 0.145495f, 0.156353f, 0.166955f, 0.177434f, 0.187498f, 0.195642f, 0.200481f, 0.202621f, 0.203729f, 0.204510f, 0.205051f, 0.205904f, 0.207126f, 0.207456f, 0.205955f, 0.203314f, 0.200582f, 0.198064f, 0.196146f, 0.195517f, 0.195977f, 0.196494f, 0.196550f, 0.196111f, 0.194868f, 0.192897f, 0.191150f, 0.190037f, 0.188817f, 0.187238f, 0.185888f, 0.184302f, 0.181068f, 0.176285f, 0.171411f, 0.166717f, 0.161536f, 0.156496f, 0.152668f, 0.149485f, 0.146174f, 0.143623f, 0.142412f, 0.141376f, 0.140226f, 0.140504f, 0.142241f, 0.143471f, 0.144125f, 0.145942f, 0.148225f, 0.148788f, 0.148461f, 0.149129f, 0.149237f, 0.147094f, 0.145098f, 0.144601f, - 0.142172f, 0.137100f, 0.134404f, 0.134101f, 0.129092f, 0.120268f, 0.117850f, 0.120259f, 0.112981f, 0.098190f, 0.097531f, 0.110374f, 0.103615f, 0.067766f, 0.046475f, 0.073314f, 0.111894f, 0.105684f, 0.062494f, 0.035374f, 0.034378f, 0.017735f, -0.027142f, -0.052915f, -0.024407f, 0.022722f, 0.028116f, -0.013868f, -0.055362f, -0.066124f, -0.069119f, -0.094576f, -0.122680f, -0.100213f, -0.014486f, 0.075343f, 0.099155f, 0.055635f, 0.009056f, 0.009599f, 0.040799f, 0.054429f, 0.037946f, 0.027022f, 0.053523f, 0.098025f, 0.105408f, 0.046190f}, - {-0.038036f, -0.074902f, -0.024728f, 0.087455f, 0.171578f, 0.138660f, -0.013344f, -0.177067f, -0.224993f, -0.133475f, 0.000768f, 0.073679f, 0.073125f, 0.051799f, 0.042554f, 0.040258f, 0.042095f, 0.055917f, 0.071808f, 0.065859f, 0.038024f, 0.016554f, 0.018640f, 0.030709f, 0.033652f, 0.026271f, 0.015742f, 0.001748f, -0.019927f, -0.047556f, -0.074394f, -0.094749f, -0.106738f, -0.113212f, -0.120520f, -0.132744f, -0.147313f, -0.158256f, -0.161754f, -0.156711f, -0.143250f, -0.123457f, -0.101193f, -0.079047f, -0.057237f, -0.036057f, -0.016869f, -0.000173f, 0.014829f, 0.028457f, 0.040426f, 0.051286f, 0.062027f, 0.072634f, 0.082611f, 0.092229f, 0.101796f, 0.110497f, 0.117155f, 0.121469f, 0.123745f, 0.124154f, 0.122894f, 0.120542f, 0.118067f, 0.116669f, 0.117188f, 0.119429f, 0.122852f, 0.127992f, 0.135991f, 0.146706f, 0.158839f, 0.172086f, 0.187416f, 0.204930f, 0.223054f, 0.240129f, 0.255405f, 0.268314f, 0.277870f, 0.282894f, 0.282322f, 0.275749f, 0.263854f, 0.247296f, 0.225295f, 0.197079f, 0.164656f, 0.131544f, 0.098081f, 0.060564f, 0.016252f, -0.032884f, -0.082704f, -0.131427f, - -0.180130f, -0.229646f, -0.278328f, -0.323025f, -0.361917f, -0.395929f, -0.426764f, -0.453823f, -0.474235f, -0.486045f, -0.490258f, -0.489520f, -0.485692f, -0.478679f, -0.466693f, -0.447817f, -0.422153f, -0.392219f, -0.360719f, -0.328559f, -0.295468f, -0.261492f, -0.227219f, -0.193485f, -0.161356f, -0.131578f, -0.103829f, -0.077323f, -0.051994f, -0.028199f, -0.005636f, 0.016498f, 0.038710f, 0.061118f, 0.083300f, 0.103747f, 0.120694f, 0.134062f, 0.145495f, 0.156353f, 0.166955f, 0.177434f, 0.187498f, 0.195642f, 0.200481f, 0.202621f, 0.203729f, 0.204510f, 0.205051f, 0.205904f, 0.207126f, 0.207456f, 0.205955f, 0.203314f, 0.200582f, 0.198064f, 0.196146f, 0.195517f, 0.195977f, 0.196494f, 0.196550f, 0.196111f, 0.194868f, 0.192897f, 0.191150f, 0.190037f, 0.188817f, 0.187238f, 0.185888f, 0.184302f, 0.181068f, 0.176285f, 0.171411f, 0.166717f, 0.161536f, 0.156496f, 0.152668f, 0.149485f, 0.146174f, 0.143623f, 0.142412f, 0.141376f, 0.140226f, 0.140504f, 0.142241f, 0.143471f, 0.144125f, 0.145942f, 0.148225f, 0.148788f, 0.148461f, 0.149129f, 0.149237f, 0.147094f, 0.145098f, 0.144601f, - 0.142172f, 0.137100f, 0.134404f, 0.134101f, 0.129092f, 0.120268f, 0.117850f, 0.120259f, 0.112981f, 0.098190f, 0.097531f, 0.110374f, 0.103615f, 0.067766f, 0.046475f, 0.073314f, 0.111894f, 0.105684f, 0.062494f, 0.035374f, 0.034378f, 0.017735f, -0.027142f, -0.052915f, -0.024407f, 0.022722f, 0.028116f, -0.013868f, -0.055362f, -0.066124f, -0.069119f, -0.094576f, -0.122680f, -0.100213f, -0.014486f, 0.075343f, 0.099155f, 0.055635f, 0.009056f, 0.009599f, 0.040799f, 0.054429f, 0.037946f, 0.027022f, 0.053523f, 0.098025f, 0.105408f, 0.046190f} - }, - { - {0.027441f, 0.021679f, -0.082621f, -0.191948f, -0.202084f, -0.094108f, 0.096974f, 0.326618f, 0.521978f, 0.590057f, 0.497559f, 0.307017f, 0.099764f, -0.101988f, -0.307232f, -0.491820f, -0.609355f, -0.649595f, -0.646886f, -0.633907f, -0.612951f, -0.571444f, -0.505172f, -0.422223f, -0.334883f, -0.251121f, -0.170169f, -0.086087f, 0.003629f, 0.095234f, 0.184031f, 0.268139f, 0.346272f, 0.415753f, 0.474124f, 0.520403f, 0.554178f, 0.575097f, 0.583394f, 0.580090f, 0.567158f, 0.547787f, 0.525101f, 0.500036f, 0.471584f, 0.439385f, 0.404951f, 0.370416f, 0.337380f, 0.306853f, 0.278873f, 0.252040f, 0.224475f, 0.195404f, 0.165334f, 0.135006f, 0.104920f, 0.075648f, 0.047947f, 0.022412f, -0.000792f, -0.021853f, -0.040983f, -0.058167f, -0.073292f, -0.086448f, -0.097776f, -0.107101f, -0.114171f, -0.119257f, -0.122970f, -0.125515f, -0.126712f, -0.126774f, -0.126359f, -0.125690f, -0.124305f, -0.122054f, -0.119813f, -0.118756f, -0.119207f, -0.120613f, -0.122402f, -0.124386f, -0.126292f, -0.127367f, -0.126798f, -0.124468f, -0.121185f, -0.118139f, -0.116167f, -0.115553f, -0.116624f, -0.120458f, -0.128545f, -0.141294f, - -0.156980f, -0.172648f, -0.186184f, -0.197243f, -0.206090f, -0.211880f, -0.212427f, -0.205830f, -0.192230f, -0.173709f, -0.152371f, -0.128816f, -0.102692f, -0.074344f, -0.045427f, -0.018045f, 0.006404f, 0.027767f, 0.046885f, 0.064600f, 0.080777f, 0.094441f, 0.104938f, 0.112698f, 0.118996f, 0.125328f, 0.132751f, 0.141144f, 0.149168f, 0.155522f, 0.160126f, 0.163757f, 0.166992f, 0.170045f, 0.173074f, 0.175948f, 0.178087f, 0.179025f, 0.178790f, 0.177467f, 0.174929f, 0.171183f, 0.166401f, 0.160453f, 0.152932f, 0.143629f, 0.132548f, 0.119638f, 0.105028f, 0.089256f, 0.072911f, 0.056388f, 0.040116f, 0.024480f, 0.009419f, -0.005258f, -0.019264f, -0.032140f, -0.043833f, -0.054222f, -0.062625f, -0.068570f, -0.072428f, -0.074596f, -0.074922f, -0.073532f, -0.071151f, -0.068045f, -0.063754f, -0.058200f, -0.051948f, -0.045349f, -0.038611f, -0.032407f, -0.027221f, -0.022662f, -0.018431f, -0.014899f, -0.011798f, -0.007903f, -0.002918f, 0.002034f, 0.006392f, 0.010574f, 0.014257f, 0.016609f, 0.018102f, 0.019736f, 0.021213f, 0.022181f, 0.023713f, 0.026265f, 0.028470f, 0.029930f, 0.032014f, 0.034470f, - 0.035580f, 0.036329f, 0.038845f, 0.041238f, 0.041102f, 0.042047f, 0.047533f, 0.052212f, 0.051464f, 0.053228f, 0.064060f, 0.071678f, 0.064058f, 0.058056f, 0.078804f, 0.113563f, 0.120945f, 0.090397f, 0.057586f, 0.050567f, 0.053941f, 0.042361f, 0.020875f, 0.011317f, 0.018428f, 0.028794f, 0.030929f, 0.021922f, 0.003208f, -0.020240f, -0.044523f, -0.076714f, -0.128079f, -0.186110f, -0.204814f, -0.146629f, -0.038156f, 0.042081f, 0.052437f, 0.040839f, 0.071199f, 0.121547f, 0.126005f, 0.113437f, 0.196100f, 0.367783f, 0.422586f, 0.192647f}, - {0.027441f, 0.021679f, -0.082621f, -0.191948f, -0.202084f, -0.094108f, 0.096974f, 0.326618f, 0.521978f, 0.590057f, 0.497559f, 0.307017f, 0.099764f, -0.101988f, -0.307232f, -0.491820f, -0.609355f, -0.649595f, -0.646886f, -0.633907f, -0.612951f, -0.571444f, -0.505172f, -0.422223f, -0.334883f, -0.251121f, -0.170169f, -0.086087f, 0.003629f, 0.095234f, 0.184031f, 0.268139f, 0.346272f, 0.415753f, 0.474124f, 0.520403f, 0.554178f, 0.575097f, 0.583394f, 0.580090f, 0.567158f, 0.547787f, 0.525101f, 0.500036f, 0.471584f, 0.439385f, 0.404951f, 0.370416f, 0.337380f, 0.306853f, 0.278873f, 0.252040f, 0.224475f, 0.195404f, 0.165334f, 0.135006f, 0.104920f, 0.075648f, 0.047947f, 0.022412f, -0.000792f, -0.021853f, -0.040983f, -0.058167f, -0.073292f, -0.086448f, -0.097776f, -0.107101f, -0.114171f, -0.119257f, -0.122970f, -0.125515f, -0.126712f, -0.126774f, -0.126359f, -0.125690f, -0.124305f, -0.122054f, -0.119813f, -0.118756f, -0.119207f, -0.120613f, -0.122402f, -0.124386f, -0.126292f, -0.127367f, -0.126798f, -0.124468f, -0.121185f, -0.118139f, -0.116167f, -0.115553f, -0.116624f, -0.120458f, -0.128545f, -0.141294f, - -0.156980f, -0.172648f, -0.186184f, -0.197243f, -0.206090f, -0.211880f, -0.212427f, -0.205830f, -0.192230f, -0.173709f, -0.152371f, -0.128816f, -0.102692f, -0.074344f, -0.045427f, -0.018045f, 0.006404f, 0.027767f, 0.046885f, 0.064600f, 0.080777f, 0.094441f, 0.104938f, 0.112698f, 0.118996f, 0.125328f, 0.132751f, 0.141144f, 0.149168f, 0.155522f, 0.160126f, 0.163757f, 0.166992f, 0.170045f, 0.173074f, 0.175948f, 0.178087f, 0.179025f, 0.178790f, 0.177467f, 0.174929f, 0.171183f, 0.166401f, 0.160453f, 0.152932f, 0.143629f, 0.132548f, 0.119638f, 0.105028f, 0.089256f, 0.072911f, 0.056388f, 0.040116f, 0.024480f, 0.009419f, -0.005258f, -0.019264f, -0.032140f, -0.043833f, -0.054222f, -0.062625f, -0.068570f, -0.072428f, -0.074596f, -0.074922f, -0.073532f, -0.071151f, -0.068045f, -0.063754f, -0.058200f, -0.051948f, -0.045349f, -0.038611f, -0.032407f, -0.027221f, -0.022662f, -0.018431f, -0.014899f, -0.011798f, -0.007903f, -0.002918f, 0.002034f, 0.006392f, 0.010574f, 0.014257f, 0.016609f, 0.018102f, 0.019736f, 0.021213f, 0.022181f, 0.023713f, 0.026265f, 0.028470f, 0.029930f, 0.032014f, 0.034470f, - 0.035580f, 0.036329f, 0.038845f, 0.041238f, 0.041102f, 0.042047f, 0.047533f, 0.052212f, 0.051464f, 0.053228f, 0.064060f, 0.071678f, 0.064058f, 0.058056f, 0.078804f, 0.113563f, 0.120945f, 0.090397f, 0.057586f, 0.050567f, 0.053941f, 0.042361f, 0.020875f, 0.011317f, 0.018428f, 0.028794f, 0.030929f, 0.021922f, 0.003208f, -0.020240f, -0.044523f, -0.076714f, -0.128079f, -0.186110f, -0.204814f, -0.146629f, -0.038156f, 0.042081f, 0.052437f, 0.040839f, 0.071199f, 0.121547f, 0.126005f, 0.113437f, 0.196100f, 0.367783f, 0.422586f, 0.192647f} - } -}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 32000 */ const int16_t CRendBin_HOA2_HRIR_max_num_iterations_32kHz = 1; @@ -1082,131 +151,10 @@ const uint16_t CRendBin_HOA2_HRIR_num_iterations_32kHz[9][BINAURAL_CHANNELS]={{1 const uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz[9][BINAURAL_CHANNELS][1]={{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}}}; const uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_32kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[9]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz_fx[9]={0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_coeff_re_32kHz[9][BINAURAL_CHANNELS][160]={ - { - {0.897602f, 0.577826f, 0.108806f, -0.306523f, -0.566468f, -0.683867f, -0.708050f, -0.662267f, -0.546112f, -0.366162f, -0.147663f, 0.075830f, 0.274439f, 0.427135f, 0.523893f, 0.565927f, 0.561989f, 0.522411f, 0.455067f, 0.365320f, 0.258865f, 0.144039f, 0.030037f, -0.077847f, -0.179832f, -0.277247f, -0.367752f, -0.446478f, -0.510700f, -0.561304f, -0.600215f, -0.628591f, -0.647703f, -0.659706f, -0.666671f, -0.669681f, -0.669369f, -0.666740f, -0.662997f, -0.658812f, -0.654035f, -0.648036f, -0.640253f, -0.630498f, -0.618870f, -0.605516f, -0.590564f, -0.574163f, -0.556413f, -0.537291f, -0.516802f, -0.495178f, -0.472808f, -0.450009f, -0.427015f, -0.404157f, -0.381849f, -0.360307f, -0.339403f, -0.318926f, -0.298870f, -0.279294f, -0.260068f, -0.241018f, -0.222243f, -0.203976f, -0.186205f, -0.168754f, -0.151665f, -0.135094f, -0.118902f, -0.102773f, -0.086674f, -0.070750f, -0.054844f, -0.038640f, -0.022176f, -0.005693f, 0.010967f, 0.028233f, 0.046067f, 0.063897f, 0.081395f, 0.098808f, 0.116372f, 0.133779f, 0.150477f, 0.166354f, 0.181854f, 0.197372f, 0.212626f, 0.226853f, 0.239657f, 0.251401f, 0.262567f, 0.273031f, - 0.282281f, 0.290215f, 0.297417f, 0.304666f, 0.312357f, 0.320369f, 0.328416f, 0.336584f, 0.345432f, 0.355456f, 0.366574f, 0.378314f, 0.390352f, 0.402657f, 0.415266f, 0.428155f, 0.441199f, 0.454112f, 0.466543f, 0.478326f, 0.489500f, 0.500130f, 0.510290f, 0.520137f, 0.529784f, 0.539205f, 0.548418f, 0.557568f, 0.566687f, 0.575611f, 0.584243f, 0.592610f, 0.600634f, 0.608188f, 0.615368f, 0.622392f, 0.629357f, 0.636344f, 0.643544f, 0.651019f, 0.658638f, 0.666412f, 0.674501f, 0.682889f, 0.691585f, 0.700932f, 0.711138f, 0.721918f, 0.733181f, 0.745327f, 0.758323f, 0.771744f, 0.786076f, 0.802163f, 0.819709f, 0.839320f, 0.863573f, 0.887678f, 0.889456f, 0.843076f, 0.751715f, 0.655369f, 0.594023f, 0.571927f}, - {0.897602f, 0.577826f, 0.108806f, -0.306523f, -0.566468f, -0.683867f, -0.708050f, -0.662267f, -0.546112f, -0.366162f, -0.147663f, 0.075830f, 0.274439f, 0.427135f, 0.523893f, 0.565927f, 0.561989f, 0.522411f, 0.455067f, 0.365320f, 0.258865f, 0.144039f, 0.030037f, -0.077847f, -0.179832f, -0.277247f, -0.367752f, -0.446478f, -0.510700f, -0.561304f, -0.600215f, -0.628591f, -0.647703f, -0.659706f, -0.666671f, -0.669681f, -0.669369f, -0.666740f, -0.662997f, -0.658812f, -0.654035f, -0.648036f, -0.640253f, -0.630498f, -0.618870f, -0.605516f, -0.590564f, -0.574163f, -0.556413f, -0.537291f, -0.516802f, -0.495178f, -0.472808f, -0.450009f, -0.427015f, -0.404157f, -0.381849f, -0.360307f, -0.339403f, -0.318926f, -0.298870f, -0.279294f, -0.260068f, -0.241018f, -0.222243f, -0.203976f, -0.186205f, -0.168754f, -0.151665f, -0.135094f, -0.118902f, -0.102773f, -0.086674f, -0.070750f, -0.054844f, -0.038640f, -0.022176f, -0.005693f, 0.010967f, 0.028233f, 0.046067f, 0.063897f, 0.081395f, 0.098808f, 0.116372f, 0.133779f, 0.150477f, 0.166354f, 0.181854f, 0.197372f, 0.212626f, 0.226853f, 0.239657f, 0.251401f, 0.262567f, 0.273031f, - 0.282281f, 0.290215f, 0.297417f, 0.304666f, 0.312357f, 0.320369f, 0.328416f, 0.336584f, 0.345432f, 0.355456f, 0.366574f, 0.378314f, 0.390352f, 0.402657f, 0.415266f, 0.428155f, 0.441199f, 0.454112f, 0.466543f, 0.478326f, 0.489500f, 0.500130f, 0.510290f, 0.520137f, 0.529784f, 0.539205f, 0.548418f, 0.557568f, 0.566687f, 0.575611f, 0.584243f, 0.592610f, 0.600634f, 0.608188f, 0.615368f, 0.622392f, 0.629357f, 0.636344f, 0.643544f, 0.651019f, 0.658638f, 0.666412f, 0.674501f, 0.682889f, 0.691585f, 0.700932f, 0.711138f, 0.721918f, 0.733181f, 0.745327f, 0.758323f, 0.771744f, 0.786076f, 0.802163f, 0.819709f, 0.839320f, 0.863573f, 0.887678f, 0.889456f, 0.843076f, 0.751715f, 0.655369f, 0.594023f, 0.571927f} - }, - { - {0.025194f, 0.342112f, 0.675564f, 0.682494f, 0.258733f, -0.398681f, -0.973589f, -1.262576f, -1.256946f, -1.058731f, -0.764793f, -0.426634f, -0.073890f, 0.263727f, 0.559774f, 0.798438f, 0.971176f, 1.071852f, 1.099750f, 1.064803f, 0.985420f, 0.879037f, 0.754656f, 0.614706f, 0.462886f, 0.307828f, 0.158623f, 0.019325f, -0.110401f, -0.231143f, -0.342445f, -0.444256f, -0.537190f, -0.621517f, -0.697392f, -0.765776f, -0.828007f, -0.884703f, -0.935654f, -0.980323f, -1.017968f, -1.047912f, -1.070192f, -1.085582f, -1.094827f, -1.098295f, -1.096314f, -1.089341f, -1.077935f, -1.062999f, -1.045792f, -1.027186f, -1.007049f, -0.984675f, -0.959577f, -0.931701f, -0.901301f, -0.868883f, -0.835096f, -0.800590f, -0.766000f, -0.731849f, -0.698317f, -0.665445f, -0.633597f, -0.603249f, -0.574361f, -0.546664f, -0.520494f, -0.496496f, -0.474634f, -0.454436f, -0.436061f, -0.419958f, -0.405621f, -0.391915f, -0.378565f, -0.366066f, -0.354142f, -0.341591f, -0.327794f, -0.313265f, -0.298453f, -0.282899f, -0.265880f, -0.247319f, -0.227788f, -0.207881f, -0.187683f, -0.166750f, -0.144562f, -0.120841f, -0.095390f, -0.067900f, -0.038125f, -0.005978f, - 0.028618f, 0.065539f, 0.103963f, 0.142557f, 0.180312f, 0.216742f, 0.251282f, 0.283074f, 0.311414f, 0.335949f, 0.356498f, 0.373081f, 0.385974f, 0.395461f, 0.401900f, 0.406261f, 0.410013f, 0.414134f, 0.418648f, 0.423274f, 0.428046f, 0.433325f, 0.439768f, 0.448163f, 0.458716f, 0.470631f, 0.482794f, 0.494578f, 0.505783f, 0.516446f, 0.526959f, 0.537714f, 0.548520f, 0.558994f, 0.569308f, 0.579744f, 0.589954f, 0.599564f, 0.608906f, 0.618335f, 0.627675f, 0.637031f, 0.647025f, 0.657685f, 0.668438f, 0.679464f, 0.691511f, 0.704568f, 0.718501f, 0.734270f, 0.752608f, 0.772902f, 0.795176f, 0.820738f, 0.849727f, 0.882515f, 0.922967f, 0.969024f, 0.996502f, 0.969523f, 0.881689f, 0.774824f, 0.699914f, 0.669918f}, - {-0.025194f, -0.342112f, -0.675564f, -0.682494f, -0.258733f, 0.398681f, 0.973589f, 1.262576f, 1.256946f, 1.058731f, 0.764793f, 0.426634f, 0.073890f, -0.263727f, -0.559774f, -0.798438f, -0.971176f, -1.071852f, -1.099750f, -1.064803f, -0.985420f, -0.879037f, -0.754656f, -0.614706f, -0.462886f, -0.307828f, -0.158623f, -0.019325f, 0.110401f, 0.231143f, 0.342445f, 0.444256f, 0.537190f, 0.621517f, 0.697392f, 0.765776f, 0.828007f, 0.884703f, 0.935654f, 0.980323f, 1.017968f, 1.047912f, 1.070192f, 1.085582f, 1.094827f, 1.098295f, 1.096314f, 1.089341f, 1.077935f, 1.062999f, 1.045792f, 1.027186f, 1.007049f, 0.984675f, 0.959577f, 0.931701f, 0.901301f, 0.868883f, 0.835096f, 0.800590f, 0.766000f, 0.731849f, 0.698317f, 0.665445f, 0.633597f, 0.603249f, 0.574361f, 0.546664f, 0.520494f, 0.496496f, 0.474634f, 0.454436f, 0.436061f, 0.419958f, 0.405621f, 0.391915f, 0.378565f, 0.366066f, 0.354142f, 0.341591f, 0.327794f, 0.313265f, 0.298453f, 0.282899f, 0.265880f, 0.247319f, 0.227788f, 0.207881f, 0.187683f, 0.166750f, 0.144562f, 0.120841f, 0.095390f, 0.067900f, 0.038125f, 0.005978f, - -0.028618f, -0.065539f, -0.103963f, -0.142557f, -0.180312f, -0.216742f, -0.251282f, -0.283074f, -0.311414f, -0.335949f, -0.356498f, -0.373081f, -0.385974f, -0.395461f, -0.401900f, -0.406261f, -0.410013f, -0.414134f, -0.418648f, -0.423274f, -0.428046f, -0.433325f, -0.439768f, -0.448163f, -0.458716f, -0.470631f, -0.482794f, -0.494578f, -0.505783f, -0.516446f, -0.526959f, -0.537714f, -0.548520f, -0.558994f, -0.569308f, -0.579744f, -0.589954f, -0.599564f, -0.608906f, -0.618335f, -0.627675f, -0.637031f, -0.647025f, -0.657685f, -0.668438f, -0.679464f, -0.691511f, -0.704568f, -0.718501f, -0.734270f, -0.752608f, -0.772902f, -0.795176f, -0.820738f, -0.849727f, -0.882515f, -0.922967f, -0.969024f, -0.996502f, -0.969523f, -0.881689f, -0.774824f, -0.699914f, -0.669918f} - }, - { - {0.123783f, 0.079142f, -0.013604f, -0.105100f, -0.113185f, -0.024894f, 0.074468f, 0.098724f, 0.046327f, -0.027465f, -0.078213f, -0.088258f, -0.055710f, -0.000383f, 0.042236f, 0.057986f, 0.069486f, 0.099522f, 0.137420f, 0.156798f, 0.149156f, 0.123327f, 0.085399f, 0.036913f, -0.013895f, -0.054098f, -0.078834f, -0.094462f, -0.109491f, -0.126339f, -0.140883f, -0.147343f, -0.143570f, -0.132138f, -0.116877f, -0.100467f, -0.086153f, -0.078747f, -0.081336f, -0.092548f, -0.108797f, -0.127742f, -0.148326f, -0.169245f, -0.189131f, -0.207447f, -0.224308f, -0.239991f, -0.254774f, -0.268361f, -0.279300f, -0.285688f, -0.286493f, -0.281631f, -0.271021f, -0.254283f, -0.231338f, -0.202668f, -0.168822f, -0.129974f, -0.086151f, -0.037693f, 0.014755f, 0.070664f, 0.129601f, 0.190610f, 0.252066f, 0.312376f, 0.370362f, 0.424702f, 0.473595f, 0.515352f, 0.548741f, 0.572621f, 0.586173f, 0.589753f, 0.584497f, 0.570819f, 0.548637f, 0.519448f, 0.486508f, 0.451975f, 0.415486f, 0.376839f, 0.338596f, 0.304072f, 0.273539f, 0.244560f, 0.216101f, 0.190399f, 0.170141f, 0.155231f, 0.143391f, 0.133067f, 0.124640f, 0.119123f, - 0.116745f, 0.116888f, 0.118578f, 0.120715f, 0.122313f, 0.122982f, 0.123106f, 0.123239f, 0.123145f, 0.121392f, 0.116164f, 0.106765f, 0.094311f, 0.080694f, 0.066929f, 0.052762f, 0.037599f, 0.021374f, 0.004602f, -0.011834f, -0.026863f, -0.039513f, -0.049167f, -0.055515f, -0.058454f, -0.058150f, -0.054920f, -0.048913f, -0.040142f, -0.028937f, -0.016071f, -0.002374f, 0.011525f, 0.025132f, 0.038028f, 0.049816f, 0.059954f, 0.067900f, 0.073662f, 0.077971f, 0.081798f, 0.086018f, 0.091452f, 0.098460f, 0.106332f, 0.113772f, 0.120190f, 0.125901f, 0.131052f, 0.135199f, 0.138076f, 0.139868f, 0.140465f, 0.139339f, 0.136539f, 0.132830f, 0.127801f, 0.118282f, 0.100330f, 0.074236f, 0.047165f, 0.028710f, 0.022439f, 0.022954f}, - {0.123783f, 0.079142f, -0.013604f, -0.105100f, -0.113185f, -0.024894f, 0.074468f, 0.098724f, 0.046327f, -0.027465f, -0.078213f, -0.088258f, -0.055710f, -0.000383f, 0.042236f, 0.057986f, 0.069486f, 0.099522f, 0.137420f, 0.156798f, 0.149156f, 0.123327f, 0.085399f, 0.036913f, -0.013895f, -0.054098f, -0.078834f, -0.094462f, -0.109491f, -0.126339f, -0.140883f, -0.147343f, -0.143570f, -0.132138f, -0.116877f, -0.100467f, -0.086153f, -0.078747f, -0.081336f, -0.092548f, -0.108797f, -0.127742f, -0.148326f, -0.169245f, -0.189131f, -0.207447f, -0.224308f, -0.239991f, -0.254774f, -0.268361f, -0.279300f, -0.285688f, -0.286493f, -0.281631f, -0.271021f, -0.254283f, -0.231338f, -0.202668f, -0.168822f, -0.129974f, -0.086151f, -0.037693f, 0.014755f, 0.070664f, 0.129601f, 0.190610f, 0.252066f, 0.312376f, 0.370362f, 0.424702f, 0.473595f, 0.515352f, 0.548741f, 0.572621f, 0.586173f, 0.589753f, 0.584497f, 0.570819f, 0.548637f, 0.519448f, 0.486508f, 0.451975f, 0.415486f, 0.376839f, 0.338596f, 0.304072f, 0.273539f, 0.244560f, 0.216101f, 0.190399f, 0.170141f, 0.155231f, 0.143391f, 0.133067f, 0.124640f, 0.119123f, - 0.116745f, 0.116888f, 0.118578f, 0.120715f, 0.122313f, 0.122982f, 0.123106f, 0.123239f, 0.123145f, 0.121392f, 0.116164f, 0.106765f, 0.094311f, 0.080694f, 0.066929f, 0.052762f, 0.037599f, 0.021374f, 0.004602f, -0.011834f, -0.026863f, -0.039513f, -0.049167f, -0.055515f, -0.058454f, -0.058150f, -0.054920f, -0.048913f, -0.040142f, -0.028937f, -0.016071f, -0.002374f, 0.011525f, 0.025132f, 0.038028f, 0.049816f, 0.059954f, 0.067900f, 0.073662f, 0.077971f, 0.081798f, 0.086018f, 0.091452f, 0.098460f, 0.106332f, 0.113772f, 0.120190f, 0.125901f, 0.131052f, 0.135199f, 0.138076f, 0.139868f, 0.140465f, 0.139339f, 0.136539f, 0.132830f, 0.127801f, 0.118282f, 0.100330f, 0.074236f, 0.047165f, 0.028710f, 0.022439f, 0.022954f} - }, - { - {0.022041f, 0.041073f, 0.023192f, -0.049439f, -0.115087f, -0.109721f, -0.051812f, -0.018474f, -0.053835f, -0.129015f, -0.184936f, -0.189273f, -0.150509f, -0.096286f, -0.047125f, -0.003652f, 0.046865f, 0.111479f, 0.180387f, 0.235653f, 0.266376f, 0.271854f, 0.255690f, 0.223813f, 0.185119f, 0.146033f, 0.103929f, 0.051053f, -0.014916f, -0.088609f, -0.164699f, -0.242434f, -0.321099f, -0.395711f, -0.460083f, -0.511538f, -0.550187f, -0.575553f, -0.586525f, -0.583852f, -0.570627f, -0.550265f, -0.525062f, -0.496520f, -0.466042f, -0.434860f, -0.403494f, -0.371536f, -0.338271f, -0.303703f, -0.268969f, -0.235863f, -0.206239f, -0.181539f, -0.162004f, -0.146110f, -0.131475f, -0.116507f, -0.100761f, -0.084071f, -0.066392f, -0.048344f, -0.030824f, -0.014005f, 0.002442f, 0.018433f, 0.033863f, 0.049525f, 0.066361f, 0.084044f, 0.101603f, 0.119134f, 0.137365f, 0.155718f, 0.172448f, 0.186743f, 0.199023f, 0.208891f, 0.214543f, 0.214968f, 0.211256f, 0.204664f, 0.194649f, 0.180250f, 0.162586f, 0.144266f, 0.126558f, 0.108656f, 0.089774f, 0.070272f, 0.050282f, 0.028810f, 0.005195f, -0.019706f, -0.044775f, -0.070130f, - -0.096279f, -0.122442f, -0.146818f, -0.168301f, -0.187141f, -0.203936f, -0.218346f, -0.228848f, -0.233859f, -0.233385f, -0.229288f, -0.223466f, -0.215952f, -0.205276f, -0.190468f, -0.172326f, -0.153023f, -0.134730f, -0.118099f, -0.101742f, -0.083649f, -0.063397f, -0.042664f, -0.023688f, -0.007718f, 0.005386f, 0.016948f, 0.028798f, 0.041965f, 0.055994f, 0.069887f, 0.083350f, 0.096784f, 0.110737f, 0.125898f, 0.142980f, 0.162069f, 0.182529f, 0.203711f, 0.225239f, 0.246691f, 0.267725f, 0.288408f, 0.308817f, 0.328558f, 0.347128f, 0.364265f, 0.379624f, 0.392789f, 0.403810f, 0.413056f, 0.420712f, 0.427179f, 0.433354f, 0.439897f, 0.447590f, 0.458254f, 0.470968f, 0.475795f, 0.458226f, 0.416144f, 0.367510f, 0.333844f, 0.320329f}, - {0.022041f, 0.041073f, 0.023192f, -0.049439f, -0.115087f, -0.109721f, -0.051812f, -0.018474f, -0.053835f, -0.129015f, -0.184936f, -0.189273f, -0.150509f, -0.096286f, -0.047125f, -0.003652f, 0.046865f, 0.111479f, 0.180387f, 0.235653f, 0.266376f, 0.271854f, 0.255690f, 0.223813f, 0.185119f, 0.146033f, 0.103929f, 0.051053f, -0.014916f, -0.088609f, -0.164699f, -0.242434f, -0.321099f, -0.395711f, -0.460083f, -0.511538f, -0.550187f, -0.575553f, -0.586525f, -0.583852f, -0.570627f, -0.550265f, -0.525062f, -0.496520f, -0.466042f, -0.434860f, -0.403494f, -0.371536f, -0.338271f, -0.303703f, -0.268969f, -0.235863f, -0.206239f, -0.181539f, -0.162004f, -0.146110f, -0.131475f, -0.116507f, -0.100761f, -0.084071f, -0.066392f, -0.048344f, -0.030824f, -0.014005f, 0.002442f, 0.018433f, 0.033863f, 0.049525f, 0.066361f, 0.084044f, 0.101603f, 0.119134f, 0.137365f, 0.155718f, 0.172448f, 0.186743f, 0.199023f, 0.208891f, 0.214543f, 0.214968f, 0.211256f, 0.204664f, 0.194649f, 0.180250f, 0.162586f, 0.144266f, 0.126558f, 0.108656f, 0.089774f, 0.070272f, 0.050282f, 0.028810f, 0.005195f, -0.019706f, -0.044775f, -0.070130f, - -0.096279f, -0.122442f, -0.146818f, -0.168301f, -0.187141f, -0.203936f, -0.218346f, -0.228848f, -0.233859f, -0.233385f, -0.229288f, -0.223466f, -0.215952f, -0.205276f, -0.190468f, -0.172326f, -0.153023f, -0.134730f, -0.118099f, -0.101742f, -0.083649f, -0.063397f, -0.042664f, -0.023688f, -0.007718f, 0.005386f, 0.016948f, 0.028798f, 0.041965f, 0.055994f, 0.069887f, 0.083350f, 0.096784f, 0.110737f, 0.125898f, 0.142980f, 0.162069f, 0.182529f, 0.203711f, 0.225239f, 0.246691f, 0.267725f, 0.288408f, 0.308817f, 0.328558f, 0.347128f, 0.364265f, 0.379624f, 0.392789f, 0.403810f, 0.413056f, 0.420712f, 0.427179f, 0.433354f, 0.439897f, 0.447590f, 0.458254f, 0.470968f, 0.475795f, 0.458226f, 0.416144f, 0.367510f, 0.333844f, 0.320329f} - }, - { - {-0.005214f, -0.012035f, -0.009014f, 0.007877f, 0.019283f, 0.010352f, -0.005363f, -0.007510f, -0.007889f, -0.044647f, -0.130133f, -0.222011f, -0.261436f, -0.231829f, -0.165637f, -0.098922f, -0.037652f, 0.029690f, 0.105217f, 0.179277f, 0.244858f, 0.300922f, 0.344183f, 0.368195f, 0.371300f, 0.358203f, 0.332456f, 0.292925f, 0.238828f, 0.173336f, 0.100520f, 0.022498f, -0.058965f, -0.141179f, -0.221961f, -0.299269f, -0.368344f, -0.422261f, -0.457042f, -0.474532f, -0.479617f, -0.476556f, -0.468368f, -0.457295f, -0.444411f, -0.429759f, -0.413316f, -0.395072f, -0.374540f, -0.351376f, -0.326316f, -0.300687f, -0.275591f, -0.252211f, -0.231900f, -0.215002f, -0.200352f, -0.186616f, -0.173280f, -0.159962f, -0.145930f, -0.130822f, -0.114800f, -0.097728f, -0.079173f, -0.059239f, -0.038296f, -0.016038f, 0.008048f, 0.033506f, 0.059464f, 0.086049f, 0.113882f, 0.142353f, 0.169789f, 0.195294f, 0.218976f, 0.240131f, 0.256716f, 0.267460f, 0.273427f, 0.276291f, 0.275776f, 0.270341f, 0.260230f, 0.247866f, 0.234578f, 0.218792f, 0.198739f, 0.175404f, 0.151105f, 0.126417f, 0.100478f, 0.073625f, 0.047824f, 0.024650f, - 0.004240f, -0.013904f, -0.030088f, -0.044324f, -0.056473f, -0.066662f, -0.075552f, -0.083740f, -0.091164f, -0.097859f, -0.104823f, -0.112999f, -0.121758f, -0.129448f, -0.135168f, -0.139283f, -0.142788f, -0.146790f, -0.151766f, -0.156646f, -0.159449f, -0.159367f, -0.157478f, -0.155349f, -0.153958f, -0.153759f, -0.154479f, -0.154881f, -0.153809f, -0.151277f, -0.147765f, -0.143164f, -0.137159f, -0.129701f, -0.120395f, -0.108503f, -0.094137f, -0.078348f, -0.061862f, -0.044971f, -0.028452f, -0.013082f, 0.001363f, 0.015222f, 0.027814f, 0.038476f, 0.047586f, 0.055404f, 0.061486f, 0.066217f, 0.071000f, 0.076305f, 0.081762f, 0.088199f, 0.096942f, 0.108135f, 0.123108f, 0.145741f, 0.175423f, 0.200807f, 0.208485f, 0.197997f, 0.181833f, 0.171727f}, - {0.005214f, 0.012035f, 0.009014f, -0.007877f, -0.019283f, -0.010352f, 0.005363f, 0.007510f, 0.007889f, 0.044647f, 0.130133f, 0.222011f, 0.261436f, 0.231829f, 0.165637f, 0.098922f, 0.037652f, -0.029690f, -0.105217f, -0.179277f, -0.244858f, -0.300922f, -0.344183f, -0.368195f, -0.371300f, -0.358203f, -0.332456f, -0.292925f, -0.238828f, -0.173336f, -0.100520f, -0.022498f, 0.058965f, 0.141179f, 0.221961f, 0.299269f, 0.368344f, 0.422261f, 0.457042f, 0.474532f, 0.479617f, 0.476556f, 0.468368f, 0.457295f, 0.444411f, 0.429759f, 0.413316f, 0.395072f, 0.374540f, 0.351376f, 0.326316f, 0.300687f, 0.275591f, 0.252211f, 0.231900f, 0.215002f, 0.200352f, 0.186616f, 0.173280f, 0.159962f, 0.145930f, 0.130822f, 0.114800f, 0.097728f, 0.079173f, 0.059239f, 0.038296f, 0.016038f, -0.008048f, -0.033506f, -0.059464f, -0.086049f, -0.113882f, -0.142353f, -0.169789f, -0.195294f, -0.218976f, -0.240131f, -0.256716f, -0.267460f, -0.273427f, -0.276291f, -0.275776f, -0.270341f, -0.260230f, -0.247866f, -0.234578f, -0.218792f, -0.198739f, -0.175404f, -0.151105f, -0.126417f, -0.100478f, -0.073625f, -0.047824f, -0.024650f, - -0.004240f, 0.013904f, 0.030088f, 0.044324f, 0.056473f, 0.066662f, 0.075552f, 0.083740f, 0.091164f, 0.097859f, 0.104823f, 0.112999f, 0.121758f, 0.129448f, 0.135168f, 0.139283f, 0.142788f, 0.146790f, 0.151766f, 0.156646f, 0.159449f, 0.159367f, 0.157478f, 0.155349f, 0.153958f, 0.153759f, 0.154479f, 0.154881f, 0.153809f, 0.151277f, 0.147765f, 0.143164f, 0.137159f, 0.129701f, 0.120395f, 0.108503f, 0.094137f, 0.078348f, 0.061862f, 0.044971f, 0.028452f, 0.013082f, -0.001363f, -0.015222f, -0.027814f, -0.038476f, -0.047586f, -0.055404f, -0.061486f, -0.066217f, -0.071000f, -0.076305f, -0.081762f, -0.088199f, -0.096942f, -0.108135f, -0.123108f, -0.145741f, -0.175423f, -0.200807f, -0.208485f, -0.197997f, -0.181833f, -0.171727f} - }, - { - {0.008681f, -0.007006f, 0.004000f, 0.026347f, 0.002760f, -0.038331f, 0.006171f, 0.136506f, 0.198542f, 0.078413f, -0.135945f, -0.262918f, -0.236625f, -0.135691f, -0.048903f, 0.007812f, 0.055850f, 0.104669f, 0.150421f, 0.186943f, 0.205853f, 0.201553f, 0.178803f, 0.147187f, 0.112390f, 0.078987f, 0.053819f, 0.039640f, 0.032313f, 0.029119f, 0.032808f, 0.043807f, 0.055721f, 0.062616f, 0.065392f, 0.068013f, 0.071303f, 0.072155f, 0.066110f, 0.050305f, 0.025937f, -0.002323f, -0.030282f, -0.056406f, -0.080135f, -0.100964f, -0.120011f, -0.139825f, -0.161681f, -0.184845f, -0.208443f, -0.232018f, -0.254562f, -0.274818f, -0.291910f, -0.304396f, -0.309955f, -0.307333f, -0.297155f, -0.279908f, -0.255047f, -0.222884f, -0.185171f, -0.142916f, -0.095718f, -0.043976f, 0.010261f, 0.065148f, 0.119827f, 0.172971f, 0.222331f, 0.265979f, 0.302588f, 0.330642f, 0.348872f, 0.357338f, 0.356806f, 0.347327f, 0.328721f, 0.302266f, 0.270550f, 0.235332f, 0.196512f, 0.153780f, 0.108694f, 0.064148f, 0.021732f, -0.019338f, -0.060114f, -0.099823f, -0.136838f, -0.170677f, -0.201625f, -0.229144f, -0.252213f, -0.270647f, - -0.284574f, -0.293091f, -0.294909f, -0.290009f, -0.279511f, -0.264143f, -0.243706f, -0.217880f, -0.187362f, -0.154731f, -0.123924f, -0.097637f, -0.075158f, -0.053870f, -0.032820f, -0.013784f, 0.000845f, 0.010043f, 0.014447f, 0.015892f, 0.016428f, 0.016909f, 0.016785f, 0.015629f, 0.014101f, 0.013167f, 0.013445f, 0.015591f, 0.020168f, 0.026843f, 0.034697f, 0.043310f, 0.052551f, 0.061637f, 0.069506f, 0.075771f, 0.080384f, 0.082989f, 0.083492f, 0.082527f, 0.080660f, 0.077997f, 0.074980f, 0.072358f, 0.070026f, 0.067161f, 0.063681f, 0.060202f, 0.056641f, 0.052323f, 0.047305f, 0.042095f, 0.036453f, 0.029989f, 0.023331f, 0.017095f, 0.010304f, 0.001573f, -0.008448f, -0.017114f, -0.022058f, -0.022784f, -0.020762f, -0.018652f}, - {-0.008681f, 0.007006f, -0.004000f, -0.026347f, -0.002760f, 0.038331f, -0.006171f, -0.136506f, -0.198542f, -0.078413f, 0.135945f, 0.262918f, 0.236625f, 0.135691f, 0.048903f, -0.007812f, -0.055850f, -0.104669f, -0.150421f, -0.186943f, -0.205853f, -0.201553f, -0.178803f, -0.147187f, -0.112390f, -0.078987f, -0.053819f, -0.039640f, -0.032313f, -0.029119f, -0.032808f, -0.043807f, -0.055721f, -0.062616f, -0.065392f, -0.068013f, -0.071303f, -0.072155f, -0.066110f, -0.050305f, -0.025937f, 0.002323f, 0.030282f, 0.056406f, 0.080135f, 0.100964f, 0.120011f, 0.139825f, 0.161681f, 0.184845f, 0.208443f, 0.232018f, 0.254562f, 0.274818f, 0.291910f, 0.304396f, 0.309955f, 0.307333f, 0.297155f, 0.279908f, 0.255047f, 0.222884f, 0.185171f, 0.142916f, 0.095718f, 0.043976f, -0.010261f, -0.065148f, -0.119827f, -0.172971f, -0.222331f, -0.265979f, -0.302588f, -0.330642f, -0.348872f, -0.357338f, -0.356806f, -0.347327f, -0.328721f, -0.302266f, -0.270550f, -0.235332f, -0.196512f, -0.153780f, -0.108694f, -0.064148f, -0.021732f, 0.019338f, 0.060114f, 0.099823f, 0.136838f, 0.170677f, 0.201625f, 0.229144f, 0.252213f, 0.270647f, - 0.284574f, 0.293091f, 0.294909f, 0.290009f, 0.279511f, 0.264143f, 0.243706f, 0.217880f, 0.187362f, 0.154731f, 0.123924f, 0.097637f, 0.075158f, 0.053870f, 0.032820f, 0.013784f, -0.000845f, -0.010043f, -0.014447f, -0.015892f, -0.016428f, -0.016909f, -0.016785f, -0.015629f, -0.014101f, -0.013167f, -0.013445f, -0.015591f, -0.020168f, -0.026843f, -0.034697f, -0.043310f, -0.052551f, -0.061637f, -0.069506f, -0.075771f, -0.080384f, -0.082989f, -0.083492f, -0.082527f, -0.080660f, -0.077997f, -0.074980f, -0.072358f, -0.070026f, -0.067161f, -0.063681f, -0.060202f, -0.056641f, -0.052323f, -0.047305f, -0.042095f, -0.036453f, -0.029989f, -0.023331f, -0.017095f, -0.010304f, -0.001573f, 0.008448f, 0.017114f, 0.022058f, 0.022784f, 0.020762f, 0.018652f} - }, - { - {0.010401f, 0.011253f, -0.005738f, -0.037817f, -0.058181f, -0.060618f, -0.068188f, -0.079320f, -0.041748f, 0.085251f, 0.260974f, 0.390110f, 0.414471f, 0.352584f, 0.254882f, 0.151981f, 0.053337f, -0.032528f, -0.097690f, -0.144583f, -0.181281f, -0.210195f, -0.228688f, -0.236078f, -0.233043f, -0.217999f, -0.191257f, -0.161169f, -0.139941f, -0.132615f, -0.133470f, -0.133307f, -0.127486f, -0.116641f, -0.102612f, -0.085894f, -0.066281f, -0.044043f, -0.019652f, 0.006743f, 0.034431f, 0.061010f, 0.083425f, 0.100521f, 0.113804f, 0.125411f, 0.136119f, 0.145525f, 0.153189f, 0.158951f, 0.162658f, 0.164140f, 0.163216f, 0.159523f, 0.152636f, 0.142591f, 0.130108f, 0.116292f, 0.102235f, 0.088793f, 0.076467f, 0.065511f, 0.056223f, 0.049044f, 0.044299f, 0.042089f, 0.042633f, 0.046534f, 0.054462f, 0.066587f, 0.082521f, 0.101885f, 0.124801f, 0.151564f, 0.181885f, 0.214821f, 0.249618f, 0.286081f, 0.323727f, 0.361053f, 0.396309f, 0.428665f, 0.457905f, 0.483250f, 0.503314f, 0.517194f, 0.524894f, 0.526702f, 0.522777f, 0.513215f, 0.497742f, 0.475384f, 0.445311f, 0.408344f, 0.367083f, 0.324169f, - 0.280673f, 0.236428f, 0.191872f, 0.149429f, 0.112868f, 0.084975f, 0.065708f, 0.052790f, 0.044161f, 0.039640f, 0.040280f, 0.046572f, 0.057462f, 0.070737f, 0.084014f, 0.095537f, 0.104450f, 0.110574f, 0.114025f, 0.114888f, 0.112953f, 0.107615f, 0.098282f, 0.085047f, 0.068865f, 0.050993f, 0.032402f, 0.013636f, -0.005100f, -0.023831f, -0.042533f, -0.060949f, -0.078915f, -0.096773f, -0.115088f, -0.133965f, -0.152974f, -0.171700f, -0.190072f, -0.208255f, -0.226621f, -0.245729f, -0.265976f, -0.287239f, -0.308946f, -0.330305f, -0.350469f, -0.368845f, -0.385301f, -0.399717f, -0.411580f, -0.420680f, -0.427727f, -0.433416f, -0.437771f, -0.441680f, -0.446803f, -0.450047f, -0.439787f, -0.404903f, -0.350495f, -0.298509f, -0.267685f, -0.257452f}, - {0.010401f, 0.011253f, -0.005738f, -0.037817f, -0.058181f, -0.060618f, -0.068188f, -0.079320f, -0.041748f, 0.085251f, 0.260974f, 0.390110f, 0.414471f, 0.352584f, 0.254882f, 0.151981f, 0.053337f, -0.032528f, -0.097690f, -0.144583f, -0.181281f, -0.210195f, -0.228688f, -0.236078f, -0.233043f, -0.217999f, -0.191257f, -0.161169f, -0.139941f, -0.132615f, -0.133470f, -0.133307f, -0.127486f, -0.116641f, -0.102612f, -0.085894f, -0.066281f, -0.044043f, -0.019652f, 0.006743f, 0.034431f, 0.061010f, 0.083425f, 0.100521f, 0.113804f, 0.125411f, 0.136119f, 0.145525f, 0.153189f, 0.158951f, 0.162658f, 0.164140f, 0.163216f, 0.159523f, 0.152636f, 0.142591f, 0.130108f, 0.116292f, 0.102235f, 0.088793f, 0.076467f, 0.065511f, 0.056223f, 0.049044f, 0.044299f, 0.042089f, 0.042633f, 0.046534f, 0.054462f, 0.066587f, 0.082521f, 0.101885f, 0.124801f, 0.151564f, 0.181885f, 0.214821f, 0.249618f, 0.286081f, 0.323727f, 0.361053f, 0.396309f, 0.428665f, 0.457905f, 0.483250f, 0.503314f, 0.517194f, 0.524894f, 0.526702f, 0.522777f, 0.513215f, 0.497742f, 0.475384f, 0.445311f, 0.408344f, 0.367083f, 0.324169f, - 0.280673f, 0.236428f, 0.191872f, 0.149429f, 0.112868f, 0.084975f, 0.065708f, 0.052790f, 0.044161f, 0.039640f, 0.040280f, 0.046572f, 0.057462f, 0.070737f, 0.084014f, 0.095537f, 0.104450f, 0.110574f, 0.114025f, 0.114888f, 0.112953f, 0.107615f, 0.098282f, 0.085047f, 0.068865f, 0.050993f, 0.032402f, 0.013636f, -0.005100f, -0.023831f, -0.042533f, -0.060949f, -0.078915f, -0.096773f, -0.115088f, -0.133965f, -0.152974f, -0.171700f, -0.190072f, -0.208255f, -0.226621f, -0.245729f, -0.265976f, -0.287239f, -0.308946f, -0.330305f, -0.350469f, -0.368845f, -0.385301f, -0.399717f, -0.411580f, -0.420680f, -0.427727f, -0.433416f, -0.437771f, -0.441680f, -0.446803f, -0.450047f, -0.439787f, -0.404903f, -0.350495f, -0.298509f, -0.267685f, -0.257452f} - }, - { - {0.036665f, -0.035275f, -0.114586f, -0.118718f, -0.015407f, 0.134760f, 0.211391f, 0.139028f, -0.031067f, -0.164438f, -0.178059f, -0.109666f, -0.046695f, -0.024403f, -0.021231f, -0.019183f, -0.020786f, -0.019318f, 0.001305f, 0.033895f, 0.049781f, 0.039580f, 0.025871f, 0.029449f, 0.045676f, 0.061011f, 0.073286f, 0.086158f, 0.096886f, 0.098911f, 0.090055f, 0.073542f, 0.055125f, 0.040281f, 0.029997f, 0.019065f, 0.001405f, -0.023950f, -0.053831f, -0.084724f, -0.113197f, -0.135819f, -0.151486f, -0.161898f, -0.168472f, -0.171078f, -0.170195f, -0.167525f, -0.163981f, -0.159417f, -0.154294f, -0.149463f, -0.144644f, -0.139019f, -0.132677f, -0.125920f, -0.118076f, -0.108431f, -0.097501f, -0.086377f, -0.075686f, -0.065850f, -0.057526f, -0.051345f, -0.047649f, -0.046281f, -0.046306f, -0.046648f, -0.047277f, -0.048699f, -0.050162f, -0.049930f, -0.047471f, -0.043537f, -0.037855f, -0.028614f, -0.014546f, 0.004109f, 0.026848f, 0.053650f, 0.084403f, 0.118539f, 0.154999f, 0.192146f, 0.228589f, 0.264237f, 0.299074f, 0.331034f, 0.357520f, 0.379308f, 0.400066f, 0.421005f, 0.438529f, 0.448405f, 0.450190f, 0.446198f, - 0.437637f, 0.423191f, 0.400965f, 0.371104f, 0.336181f, 0.298645f, 0.258247f, 0.213115f, 0.163286f, 0.111757f, 0.061822f, 0.014570f, -0.030995f, -0.076478f, -0.122515f, -0.167505f, -0.208248f, -0.242655f, -0.271265f, -0.295587f, -0.316112f, -0.332553f, -0.344736f, -0.352592f, -0.356405f, -0.357380f, -0.356859f, -0.355036f, -0.351548f, -0.346820f, -0.341632f, -0.335951f, -0.329211f, -0.320835f, -0.309876f, -0.295618f, -0.279195f, -0.263025f, -0.248221f, -0.234100f, -0.220000f, -0.205518f, -0.189543f, -0.171498f, -0.152987f, -0.136079f, -0.120874f, -0.106575f, -0.093232f, -0.080535f, -0.067000f, -0.052177f, -0.037476f, -0.023661f, -0.010075f, 0.003625f, 0.018537f, 0.038226f, 0.063691f, 0.087121f, 0.097456f, 0.092996f, 0.082823f, 0.076118f}, - {0.036665f, -0.035275f, -0.114586f, -0.118718f, -0.015407f, 0.134760f, 0.211391f, 0.139028f, -0.031067f, -0.164438f, -0.178059f, -0.109666f, -0.046695f, -0.024403f, -0.021231f, -0.019183f, -0.020786f, -0.019318f, 0.001305f, 0.033895f, 0.049781f, 0.039580f, 0.025871f, 0.029449f, 0.045676f, 0.061011f, 0.073286f, 0.086158f, 0.096886f, 0.098911f, 0.090055f, 0.073542f, 0.055125f, 0.040281f, 0.029997f, 0.019065f, 0.001405f, -0.023950f, -0.053831f, -0.084724f, -0.113197f, -0.135819f, -0.151486f, -0.161898f, -0.168472f, -0.171078f, -0.170195f, -0.167525f, -0.163981f, -0.159417f, -0.154294f, -0.149463f, -0.144644f, -0.139019f, -0.132677f, -0.125920f, -0.118076f, -0.108431f, -0.097501f, -0.086377f, -0.075686f, -0.065850f, -0.057526f, -0.051345f, -0.047649f, -0.046281f, -0.046306f, -0.046648f, -0.047277f, -0.048699f, -0.050162f, -0.049930f, -0.047471f, -0.043537f, -0.037855f, -0.028614f, -0.014546f, 0.004109f, 0.026848f, 0.053650f, 0.084403f, 0.118539f, 0.154999f, 0.192146f, 0.228589f, 0.264237f, 0.299074f, 0.331034f, 0.357520f, 0.379308f, 0.400066f, 0.421005f, 0.438529f, 0.448405f, 0.450190f, 0.446198f, - 0.437637f, 0.423191f, 0.400965f, 0.371104f, 0.336181f, 0.298645f, 0.258247f, 0.213115f, 0.163286f, 0.111757f, 0.061822f, 0.014570f, -0.030995f, -0.076478f, -0.122515f, -0.167505f, -0.208248f, -0.242655f, -0.271265f, -0.295587f, -0.316112f, -0.332553f, -0.344736f, -0.352592f, -0.356405f, -0.357380f, -0.356859f, -0.355036f, -0.351548f, -0.346820f, -0.341632f, -0.335951f, -0.329211f, -0.320835f, -0.309876f, -0.295618f, -0.279195f, -0.263025f, -0.248221f, -0.234100f, -0.220000f, -0.205518f, -0.189543f, -0.171498f, -0.152987f, -0.136079f, -0.120874f, -0.106575f, -0.093232f, -0.080535f, -0.067000f, -0.052177f, -0.037476f, -0.023661f, -0.010075f, 0.003625f, 0.018537f, 0.038226f, 0.063691f, 0.087121f, 0.097456f, 0.092996f, 0.082823f, 0.076118f} - }, - { - {-0.008953f, 0.064232f, 0.094587f, 0.004517f, -0.161443f, -0.310666f, -0.382836f, -0.340098f, -0.159090f, 0.119965f, 0.388400f, 0.559679f, 0.635026f, 0.652824f, 0.614612f, 0.501215f, 0.332040f, 0.161390f, 0.022521f, -0.093546f, -0.206716f, -0.319236f, -0.419351f, -0.496904f, -0.550885f, -0.588411f, -0.617946f, -0.641341f, -0.653668f, -0.650802f, -0.633429f, -0.603472f, -0.561247f, -0.507426f, -0.444484f, -0.375202f, -0.301814f, -0.226782f, -0.152889f, -0.082752f, -0.018798f, 0.037516f, 0.087042f, 0.131996f, 0.173092f, 0.208904f, 0.238119f, 0.260931f, 0.278385f, 0.291978f, 0.303791f, 0.315427f, 0.326675f, 0.336106f, 0.342711f, 0.346235f, 0.346522f, 0.343445f, 0.337281f, 0.328630f, 0.318130f, 0.306322f, 0.293494f, 0.279679f, 0.265033f, 0.249931f, 0.234518f, 0.218749f, 0.203017f, 0.188064f, 0.174092f, 0.160740f, 0.148084f, 0.136713f, 0.126662f, 0.117293f, 0.108500f, 0.101106f, 0.095680f, 0.091654f, 0.087922f, 0.083778f, 0.079032f, 0.073611f, 0.067353f, 0.060218f, 0.052743f, 0.046136f, 0.041541f, 0.039159f, 0.038398f, 0.038857f, 0.040687f, 0.043768f, 0.046732f, 0.047020f, - 0.042169f, 0.031387f, 0.015858f, -0.002845f, -0.024544f, -0.050092f, -0.079230f, -0.109526f, -0.137786f, -0.162138f, -0.182539f, -0.199609f, -0.213243f, -0.222324f, -0.225756f, -0.223768f, -0.218019f, -0.210365f, -0.201676f, -0.191803f, -0.180339f, -0.167382f, -0.153889f, -0.141348f, -0.130799f, -0.122005f, -0.113636f, -0.104260f, -0.093244f, -0.081045f, -0.068752f, -0.057146f, -0.046134f, -0.035156f, -0.023843f, -0.012002f, 0.000616f, 0.014000f, 0.027669f, 0.041253f, 0.054871f, 0.068605f, 0.082172f, 0.095499f, 0.108853f, 0.122030f, 0.134208f, 0.144885f, 0.154018f, 0.161135f, 0.165524f, 0.167382f, 0.167449f, 0.165627f, 0.161493f, 0.155562f, 0.147668f, 0.134574f, 0.112712f, 0.084430f, 0.058667f, 0.043534f, 0.039424f, 0.040242f}, - {-0.008953f, 0.064232f, 0.094587f, 0.004517f, -0.161443f, -0.310666f, -0.382836f, -0.340098f, -0.159090f, 0.119965f, 0.388400f, 0.559679f, 0.635026f, 0.652824f, 0.614612f, 0.501215f, 0.332040f, 0.161390f, 0.022521f, -0.093546f, -0.206716f, -0.319236f, -0.419351f, -0.496904f, -0.550885f, -0.588411f, -0.617946f, -0.641341f, -0.653668f, -0.650802f, -0.633429f, -0.603472f, -0.561247f, -0.507426f, -0.444484f, -0.375202f, -0.301814f, -0.226782f, -0.152889f, -0.082752f, -0.018798f, 0.037516f, 0.087042f, 0.131996f, 0.173092f, 0.208904f, 0.238119f, 0.260931f, 0.278385f, 0.291978f, 0.303791f, 0.315427f, 0.326675f, 0.336106f, 0.342711f, 0.346235f, 0.346522f, 0.343445f, 0.337281f, 0.328630f, 0.318130f, 0.306322f, 0.293494f, 0.279679f, 0.265033f, 0.249931f, 0.234518f, 0.218749f, 0.203017f, 0.188064f, 0.174092f, 0.160740f, 0.148084f, 0.136713f, 0.126662f, 0.117293f, 0.108500f, 0.101106f, 0.095680f, 0.091654f, 0.087922f, 0.083778f, 0.079032f, 0.073611f, 0.067353f, 0.060218f, 0.052743f, 0.046136f, 0.041541f, 0.039159f, 0.038398f, 0.038857f, 0.040687f, 0.043768f, 0.046732f, 0.047020f, - 0.042169f, 0.031387f, 0.015858f, -0.002845f, -0.024544f, -0.050092f, -0.079230f, -0.109526f, -0.137786f, -0.162138f, -0.182539f, -0.199609f, -0.213243f, -0.222324f, -0.225756f, -0.223768f, -0.218019f, -0.210365f, -0.201676f, -0.191803f, -0.180339f, -0.167382f, -0.153889f, -0.141348f, -0.130799f, -0.122005f, -0.113636f, -0.104260f, -0.093244f, -0.081045f, -0.068752f, -0.057146f, -0.046134f, -0.035156f, -0.023843f, -0.012002f, 0.000616f, 0.014000f, 0.027669f, 0.041253f, 0.054871f, 0.068605f, 0.082172f, 0.095499f, 0.108853f, 0.122030f, 0.134208f, 0.144885f, 0.154018f, 0.161135f, 0.165524f, 0.167382f, 0.167449f, 0.165627f, 0.161493f, 0.155562f, 0.147668f, 0.134574f, 0.112712f, 0.084430f, 0.058667f, 0.043534f, 0.039424f, 0.040242f} - } -}; -const float CRendBin_HOA2_HRIR_coeff_im_32kHz[9][BINAURAL_CHANNELS][160]={ - { - {-0.279937f, -0.718806f, -0.879425f, -0.777443f, -0.538320f, -0.273976f, -0.025783f, 0.204435f, 0.407063f, 0.556330f, 0.629651f, 0.621025f, 0.539807f, 0.405020f, 0.240268f, 0.067825f, -0.096633f, -0.245120f, -0.374269f, -0.481330f, -0.562584f, -0.615551f, -0.642416f, -0.649519f, -0.642111f, -0.620732f, -0.584007f, -0.533693f, -0.475001f, -0.412795f, -0.349591f, -0.286993f, -0.226903f, -0.170652f, -0.118251f, -0.069223f, -0.023545f, 0.018667f, 0.057892f, 0.095208f, 0.131668f, 0.167761f, 0.203372f, 0.238124f, 0.271732f, 0.304055f, 0.334993f, 0.364479f, 0.392521f, 0.419068f, 0.443884f, 0.466673f, 0.487320f, 0.505877f, 0.522377f, 0.536834f, 0.549468f, 0.560746f, 0.571072f, 0.580544f, 0.589150f, 0.597030f, 0.604353f, 0.611043f, 0.616937f, 0.622138f, 0.626912f, 0.631307f, 0.635234f, 0.638853f, 0.642459f, 0.646040f, 0.649387f, 0.652562f, 0.655777f, 0.658908f, 0.661640f, 0.664015f, 0.666294f, 0.668275f, 0.669360f, 0.669333f, 0.668569f, 0.667339f, 0.665357f, 0.662247f, 0.658157f, 0.653645f, 0.649002f, 0.643858f, 0.637637f, 0.630346f, 0.622683f, 0.615246f, 0.607937f, 0.600397f, - 0.592808f, 0.585902f, 0.580266f, 0.575856f, 0.572174f, 0.568794f, 0.565750f, 0.563397f, 0.561829f, 0.560549f, 0.558858f, 0.556454f, 0.553437f, 0.549923f, 0.545870f, 0.541143f, 0.535568f, 0.529029f, 0.521642f, 0.513706f, 0.505466f, 0.497055f, 0.488604f, 0.480183f, 0.471722f, 0.463177f, 0.454619f, 0.446034f, 0.437240f, 0.428157f, 0.418884f, 0.409461f, 0.399865f, 0.390252f, 0.380863f, 0.371747f, 0.362849f, 0.354203f, 0.345760f, 0.337306f, 0.328769f, 0.320260f, 0.311738f, 0.303082f, 0.294401f, 0.285697f, 0.276522f, 0.266569f, 0.256016f, 0.244725f, 0.232076f, 0.218041f, 0.202877f, 0.185600f, 0.164906f, 0.140260f, 0.107084f, 0.053389f, -0.026623f, -0.111560f, -0.159294f, -0.146202f, -0.091208f, -0.029119f}, - {-0.279937f, -0.718806f, -0.879425f, -0.777443f, -0.538320f, -0.273976f, -0.025783f, 0.204435f, 0.407063f, 0.556330f, 0.629651f, 0.621025f, 0.539807f, 0.405020f, 0.240268f, 0.067825f, -0.096633f, -0.245120f, -0.374269f, -0.481330f, -0.562584f, -0.615551f, -0.642416f, -0.649519f, -0.642111f, -0.620732f, -0.584007f, -0.533693f, -0.475001f, -0.412795f, -0.349591f, -0.286993f, -0.226903f, -0.170652f, -0.118251f, -0.069223f, -0.023545f, 0.018667f, 0.057892f, 0.095208f, 0.131668f, 0.167761f, 0.203372f, 0.238124f, 0.271732f, 0.304055f, 0.334993f, 0.364479f, 0.392521f, 0.419068f, 0.443884f, 0.466673f, 0.487320f, 0.505877f, 0.522377f, 0.536834f, 0.549468f, 0.560746f, 0.571072f, 0.580544f, 0.589150f, 0.597030f, 0.604353f, 0.611043f, 0.616937f, 0.622138f, 0.626912f, 0.631307f, 0.635234f, 0.638853f, 0.642459f, 0.646040f, 0.649387f, 0.652562f, 0.655777f, 0.658908f, 0.661640f, 0.664015f, 0.666294f, 0.668275f, 0.669360f, 0.669333f, 0.668569f, 0.667339f, 0.665357f, 0.662247f, 0.658157f, 0.653645f, 0.649002f, 0.643858f, 0.637637f, 0.630346f, 0.622683f, 0.615246f, 0.607937f, 0.600397f, - 0.592808f, 0.585902f, 0.580266f, 0.575856f, 0.572174f, 0.568794f, 0.565750f, 0.563397f, 0.561829f, 0.560549f, 0.558858f, 0.556454f, 0.553437f, 0.549923f, 0.545870f, 0.541143f, 0.535568f, 0.529029f, 0.521642f, 0.513706f, 0.505466f, 0.497055f, 0.488604f, 0.480183f, 0.471722f, 0.463177f, 0.454619f, 0.446034f, 0.437240f, 0.428157f, 0.418884f, 0.409461f, 0.399865f, 0.390252f, 0.380863f, 0.371747f, 0.362849f, 0.354203f, 0.345760f, 0.337306f, 0.328769f, 0.320260f, 0.311738f, 0.303082f, 0.294401f, 0.285697f, 0.276522f, 0.266569f, 0.256016f, 0.244725f, 0.232076f, 0.218041f, 0.202877f, 0.185600f, 0.164906f, 0.140260f, 0.107084f, 0.053389f, -0.026623f, -0.111560f, -0.159294f, -0.146202f, -0.091208f, -0.029119f} - }, - { - {0.137655f, 0.231573f, -0.061569f, -0.615380f, -1.083201f, -1.179039f, -0.870305f, -0.339584f, 0.195943f, 0.617719f, 0.906453f, 1.076009f, 1.134598f, 1.089734f, 0.958490f, 0.762775f, 0.522469f, 0.257386f, -0.009275f, -0.255153f, -0.467276f, -0.644940f, -0.793225f, -0.914050f, -1.004432f, -1.062573f, -1.092628f, -1.102031f, -1.096136f, -1.077334f, -1.047589f, -1.009280f, -0.964133f, -0.913278f, -0.858195f, -0.800334f, -0.740087f, -0.677018f, -0.610805f, -0.541506f, -0.469560f, -0.396052f, -0.322485f, -0.249955f, -0.178885f, -0.109588f, -0.042559f, 0.021688f, 0.082623f, 0.139743f, 0.193113f, 0.243630f, 0.292304f, 0.339419f, 0.384570f, 0.427151f, 0.466585f, 0.502409f, 0.534395f, 0.562517f, 0.586922f, 0.607994f, 0.626173f, 0.641582f, 0.654228f, 0.664541f, 0.673117f, 0.679999f, 0.684972f, 0.688494f, 0.691429f, 0.694010f, 0.696123f, 0.698431f, 0.702002f, 0.706919f, 0.712502f, 0.718834f, 0.726783f, 0.736462f, 0.746890f, 0.757392f, 0.768323f, 0.780141f, 0.792495f, 0.804563f, 0.815877f, 0.826652f, 0.837457f, 0.848656f, 0.860155f, 0.871670f, 0.883000f, 0.893877f, 0.903812f, 0.912257f, - 0.918585f, 0.921831f, 0.920971f, 0.915668f, 0.906299f, 0.893208f, 0.876460f, 0.856357f, 0.833641f, 0.809154f, 0.783725f, 0.758238f, 0.733466f, 0.710044f, 0.688800f, 0.670590f, 0.655493f, 0.642657f, 0.631241f, 0.621055f, 0.612285f, 0.605091f, 0.599433f, 0.594697f, 0.589631f, 0.583188f, 0.575258f, 0.566315f, 0.556840f, 0.547295f, 0.537964f, 0.528587f, 0.518763f, 0.508660f, 0.498613f, 0.488388f, 0.477700f, 0.466959f, 0.456614f, 0.446483f, 0.436467f, 0.426959f, 0.417879f, 0.408578f, 0.399091f, 0.390055f, 0.381339f, 0.372396f, 0.363526f, 0.354887f, 0.345302f, 0.333890f, 0.320994f, 0.305859f, 0.286532f, 0.262266f, 0.228831f, 0.171282f, 0.076774f, -0.036269f, -0.117427f, -0.129893f, -0.087208f, -0.028616f}, - {-0.137655f, -0.231573f, 0.061569f, 0.615380f, 1.083201f, 1.179039f, 0.870305f, 0.339584f, -0.195943f, -0.617719f, -0.906453f, -1.076009f, -1.134598f, -1.089734f, -0.958490f, -0.762775f, -0.522469f, -0.257386f, 0.009275f, 0.255153f, 0.467276f, 0.644940f, 0.793225f, 0.914050f, 1.004432f, 1.062573f, 1.092628f, 1.102031f, 1.096136f, 1.077334f, 1.047589f, 1.009280f, 0.964133f, 0.913278f, 0.858195f, 0.800334f, 0.740087f, 0.677018f, 0.610805f, 0.541506f, 0.469560f, 0.396052f, 0.322485f, 0.249955f, 0.178885f, 0.109588f, 0.042559f, -0.021688f, -0.082623f, -0.139743f, -0.193113f, -0.243630f, -0.292304f, -0.339419f, -0.384570f, -0.427151f, -0.466585f, -0.502409f, -0.534395f, -0.562517f, -0.586922f, -0.607994f, -0.626173f, -0.641582f, -0.654228f, -0.664541f, -0.673117f, -0.679999f, -0.684972f, -0.688494f, -0.691429f, -0.694010f, -0.696123f, -0.698431f, -0.702002f, -0.706919f, -0.712502f, -0.718834f, -0.726783f, -0.736462f, -0.746890f, -0.757392f, -0.768323f, -0.780141f, -0.792495f, -0.804563f, -0.815877f, -0.826652f, -0.837457f, -0.848656f, -0.860155f, -0.871670f, -0.883000f, -0.893877f, -0.903812f, -0.912257f, - -0.918585f, -0.921831f, -0.920971f, -0.915668f, -0.906299f, -0.893208f, -0.876460f, -0.856357f, -0.833641f, -0.809154f, -0.783725f, -0.758238f, -0.733466f, -0.710044f, -0.688800f, -0.670590f, -0.655493f, -0.642657f, -0.631241f, -0.621055f, -0.612285f, -0.605091f, -0.599433f, -0.594697f, -0.589631f, -0.583188f, -0.575258f, -0.566315f, -0.556840f, -0.547295f, -0.537964f, -0.528587f, -0.518763f, -0.508660f, -0.498613f, -0.488388f, -0.477700f, -0.466959f, -0.456614f, -0.446483f, -0.436467f, -0.426959f, -0.417879f, -0.408578f, -0.399091f, -0.390055f, -0.381339f, -0.372396f, -0.363526f, -0.354887f, -0.345302f, -0.333890f, -0.320994f, -0.305859f, -0.286532f, -0.262266f, -0.228831f, -0.171282f, -0.076774f, 0.036269f, 0.117427f, 0.129893f, 0.087208f, 0.028616f} - }, - { - {-0.037524f, -0.106181f, -0.132266f, -0.073112f, 0.041237f, 0.111128f, 0.077796f, -0.013186f, -0.077825f, -0.080256f, -0.035434f, 0.029096f, 0.084053f, 0.103004f, 0.086859f, 0.066675f, 0.063076f, 0.059663f, 0.031095f, -0.020998f, -0.075878f, -0.121299f, -0.156113f, -0.176326f, -0.175820f, -0.157975f, -0.135214f, -0.116812f, -0.102238f, -0.085453f, -0.062353f, -0.034609f, -0.008002f, 0.012488f, 0.025194f, 0.029679f, 0.025216f, 0.013215f, -0.001254f, -0.012755f, -0.019093f, -0.020474f, -0.016980f, -0.008454f, 0.004498f, 0.020843f, 0.039938f, 0.061615f, 0.086231f, 0.114761f, 0.147970f, 0.185336f, 0.225373f, 0.266858f, 0.309124f, 0.351354f, 0.392341f, 0.431045f, 0.466945f, 0.499672f, 0.528530f, 0.552586f, 0.571112f, 0.583575f, 0.589158f, 0.586750f, 0.575666f, 0.555960f, 0.527818f, 0.491213f, 0.446493f, 0.394762f, 0.337410f, 0.276002f, 0.212771f, 0.150186f, 0.089707f, 0.032067f, -0.021005f, -0.066929f, -0.104805f, -0.136170f, -0.162127f, -0.181305f, -0.192276f, -0.196759f, -0.198297f, -0.198100f, -0.194244f, -0.185310f, -0.173099f, -0.160874f, -0.150052f, -0.139737f, -0.128898f, -0.117875f, - -0.107875f, -0.099948f, -0.094668f, -0.092141f, -0.091897f, -0.093057f, -0.095016f, -0.098057f, -0.103137f, -0.110818f, -0.120204f, -0.129091f, -0.135491f, -0.139004f, -0.140529f, -0.140823f, -0.139694f, -0.136376f, -0.130141f, -0.120557f, -0.107620f, -0.091821f, -0.073930f, -0.054741f, -0.035051f, -0.015600f, 0.003138f, 0.020870f, 0.037083f, 0.051025f, 0.062165f, 0.070424f, 0.075956f, 0.078959f, 0.079669f, 0.078304f, 0.075176f, 0.071037f, 0.067021f, 0.064014f, 0.062283f, 0.061670f, 0.061603f, 0.060906f, 0.058404f, 0.053985f, 0.048455f, 0.042281f, 0.035195f, 0.027085f, 0.018350f, 0.009174f, -0.000669f, -0.010994f, -0.021132f, -0.031283f, -0.043062f, -0.057197f, -0.070252f, -0.074970f, -0.065974f, -0.045809f, -0.023709f, -0.006772f}, - {-0.037524f, -0.106181f, -0.132266f, -0.073112f, 0.041237f, 0.111128f, 0.077796f, -0.013186f, -0.077825f, -0.080256f, -0.035434f, 0.029096f, 0.084053f, 0.103004f, 0.086859f, 0.066675f, 0.063076f, 0.059663f, 0.031095f, -0.020998f, -0.075878f, -0.121299f, -0.156113f, -0.176326f, -0.175820f, -0.157975f, -0.135214f, -0.116812f, -0.102238f, -0.085453f, -0.062353f, -0.034609f, -0.008002f, 0.012488f, 0.025194f, 0.029679f, 0.025216f, 0.013215f, -0.001254f, -0.012755f, -0.019093f, -0.020474f, -0.016980f, -0.008454f, 0.004498f, 0.020843f, 0.039938f, 0.061615f, 0.086231f, 0.114761f, 0.147970f, 0.185336f, 0.225373f, 0.266858f, 0.309124f, 0.351354f, 0.392341f, 0.431045f, 0.466945f, 0.499672f, 0.528530f, 0.552586f, 0.571112f, 0.583575f, 0.589158f, 0.586750f, 0.575666f, 0.555960f, 0.527818f, 0.491213f, 0.446493f, 0.394762f, 0.337410f, 0.276002f, 0.212771f, 0.150186f, 0.089707f, 0.032067f, -0.021005f, -0.066929f, -0.104805f, -0.136170f, -0.162127f, -0.181305f, -0.192276f, -0.196759f, -0.198297f, -0.198100f, -0.194244f, -0.185310f, -0.173099f, -0.160874f, -0.150052f, -0.139737f, -0.128898f, -0.117875f, - -0.107875f, -0.099948f, -0.094668f, -0.092141f, -0.091897f, -0.093057f, -0.095016f, -0.098057f, -0.103137f, -0.110818f, -0.120204f, -0.129091f, -0.135491f, -0.139004f, -0.140529f, -0.140823f, -0.139694f, -0.136376f, -0.130141f, -0.120557f, -0.107620f, -0.091821f, -0.073930f, -0.054741f, -0.035051f, -0.015600f, 0.003138f, 0.020870f, 0.037083f, 0.051025f, 0.062165f, 0.070424f, 0.075956f, 0.078959f, 0.079669f, 0.078304f, 0.075176f, 0.071037f, 0.067021f, 0.064014f, 0.062283f, 0.061670f, 0.061603f, 0.060906f, 0.058404f, 0.053985f, 0.048455f, 0.042281f, 0.035195f, 0.027085f, 0.018350f, 0.009174f, -0.000669f, -0.010994f, -0.021132f, -0.031283f, -0.043062f, -0.057197f, -0.070252f, -0.074970f, -0.065974f, -0.045809f, -0.023709f, -0.006772f} - }, - { - {-0.001333f, -0.030005f, -0.089178f, -0.116179f, -0.070558f, 0.001241f, 0.020913f, -0.026250f, -0.080759f, -0.081475f, -0.022314f, 0.058682f, 0.122300f, 0.154634f, 0.165876f, 0.172510f, 0.178315f, 0.170686f, 0.135671f, 0.073168f, -0.004954f, -0.086261f, -0.162235f, -0.226658f, -0.277864f, -0.321652f, -0.365340f, -0.408241f, -0.442359f, -0.462069f, -0.468153f, -0.461999f, -0.441233f, -0.403541f, -0.351250f, -0.289395f, -0.221463f, -0.149435f, -0.076464f, -0.006943f, 0.055954f, 0.111395f, 0.159755f, 0.201416f, 0.236781f, 0.266704f, 0.292410f, 0.314773f, 0.333620f, 0.347895f, 0.356616f, 0.359633f, 0.357762f, 0.352831f, 0.347475f, 0.343968f, 0.342881f, 0.343312f, 0.344262f, 0.345108f, 0.345073f, 0.343446f, 0.340377f, 0.336539f, 0.332107f, 0.326988f, 0.321660f, 0.316556f, 0.310916f, 0.303524f, 0.294315f, 0.283862f, 0.271573f, 0.256019f, 0.236997f, 0.215638f, 0.192339f, 0.166339f, 0.137841f, 0.108908f, 0.081311f, 0.054840f, 0.028956f, 0.004999f, -0.014887f, -0.030518f, -0.043751f, -0.055909f, -0.066672f, -0.075704f, -0.083627f, -0.090643f, -0.095550f, -0.097168f, -0.095719f, -0.091778f, - -0.084700f, -0.073230f, -0.057268f, -0.038056f, -0.016721f, 0.006768f, 0.033168f, 0.062626f, 0.093687f, 0.123868f, 0.151635f, 0.177592f, 0.203260f, 0.228881f, 0.252880f, 0.273234f, 0.289066f, 0.301335f, 0.312237f, 0.323412f, 0.334360f, 0.342975f, 0.347732f, 0.349006f, 0.348534f, 0.348309f, 0.349721f, 0.352813f, 0.356335f, 0.359060f, 0.360956f, 0.362759f, 0.364992f, 0.367821f, 0.371174f, 0.374427f, 0.376493f, 0.376627f, 0.374696f, 0.370693f, 0.364611f, 0.356723f, 0.347263f, 0.336013f, 0.322697f, 0.307449f, 0.290502f, 0.272009f, 0.252471f, 0.232612f, 0.212802f, 0.193266f, 0.174453f, 0.156397f, 0.138549f, 0.120439f, 0.099951f, 0.070805f, 0.027885f, -0.020982f, -0.054876f, -0.058831f, -0.039154f, -0.012828f}, - {-0.001333f, -0.030005f, -0.089178f, -0.116179f, -0.070558f, 0.001241f, 0.020913f, -0.026250f, -0.080759f, -0.081475f, -0.022314f, 0.058682f, 0.122300f, 0.154634f, 0.165876f, 0.172510f, 0.178315f, 0.170686f, 0.135671f, 0.073168f, -0.004954f, -0.086261f, -0.162235f, -0.226658f, -0.277864f, -0.321652f, -0.365340f, -0.408241f, -0.442359f, -0.462069f, -0.468153f, -0.461999f, -0.441233f, -0.403541f, -0.351250f, -0.289395f, -0.221463f, -0.149435f, -0.076464f, -0.006943f, 0.055954f, 0.111395f, 0.159755f, 0.201416f, 0.236781f, 0.266704f, 0.292410f, 0.314773f, 0.333620f, 0.347895f, 0.356616f, 0.359633f, 0.357762f, 0.352831f, 0.347475f, 0.343968f, 0.342881f, 0.343312f, 0.344262f, 0.345108f, 0.345073f, 0.343446f, 0.340377f, 0.336539f, 0.332107f, 0.326988f, 0.321660f, 0.316556f, 0.310916f, 0.303524f, 0.294315f, 0.283862f, 0.271573f, 0.256019f, 0.236997f, 0.215638f, 0.192339f, 0.166339f, 0.137841f, 0.108908f, 0.081311f, 0.054840f, 0.028956f, 0.004999f, -0.014887f, -0.030518f, -0.043751f, -0.055909f, -0.066672f, -0.075704f, -0.083627f, -0.090643f, -0.095550f, -0.097168f, -0.095719f, -0.091778f, - -0.084700f, -0.073230f, -0.057268f, -0.038056f, -0.016721f, 0.006768f, 0.033168f, 0.062626f, 0.093687f, 0.123868f, 0.151635f, 0.177592f, 0.203260f, 0.228881f, 0.252880f, 0.273234f, 0.289066f, 0.301335f, 0.312237f, 0.323412f, 0.334360f, 0.342975f, 0.347732f, 0.349006f, 0.348534f, 0.348309f, 0.349721f, 0.352813f, 0.356335f, 0.359060f, 0.360956f, 0.362759f, 0.364992f, 0.367821f, 0.371174f, 0.374427f, 0.376493f, 0.376627f, 0.374696f, 0.370693f, 0.364611f, 0.356723f, 0.347263f, 0.336013f, 0.322697f, 0.307449f, 0.290502f, 0.272009f, 0.252471f, 0.232612f, 0.212802f, 0.193266f, 0.174453f, 0.156397f, 0.138549f, 0.120439f, 0.099951f, 0.070805f, 0.027885f, -0.020982f, -0.054876f, -0.058831f, -0.039154f, -0.012828f} - }, - { - {-0.003949f, -0.004065f, 0.004529f, 0.003058f, -0.017910f, -0.041346f, -0.049210f, -0.053546f, -0.080846f, -0.125171f, -0.138752f, -0.082301f, 0.027313f, 0.134102f, 0.200608f, 0.233142f, 0.253660f, 0.266920f, 0.262970f, 0.237188f, 0.194063f, 0.136745f, 0.064986f, -0.017247f, -0.101044f, -0.180693f, -0.256442f, -0.328205f, -0.391843f, -0.443152f, -0.481210f, -0.506165f, -0.517126f, -0.513522f, -0.495538f, -0.462242f, -0.412470f, -0.349030f, -0.279619f, -0.212173f, -0.150791f, -0.096336f, -0.048496f, -0.006238f, 0.031944f, 0.067046f, 0.099419f, 0.129417f, 0.157110f, 0.181639f, 0.201899f, 0.217571f, 0.228864f, 0.236108f, 0.240440f, 0.243939f, 0.248173f, 0.253310f, 0.259111f, 0.265714f, 0.273010f, 0.280389f, 0.287541f, 0.294554f, 0.301097f, 0.306552f, 0.310894f, 0.314304f, 0.316123f, 0.315383f, 0.312099f, 0.306725f, 0.298589f, 0.286282f, 0.269490f, 0.249062f, 0.225223f, 0.197242f, 0.165404f, 0.131961f, 0.099076f, 0.066683f, 0.033703f, 0.000877f, -0.029410f, -0.056340f, -0.081745f, -0.106984f, -0.130473f, -0.149782f, -0.164778f, -0.176837f, -0.185968f, -0.190743f, -0.190692f, -0.187082f, - -0.181465f, -0.174611f, -0.166752f, -0.158044f, -0.148865f, -0.139889f, -0.131570f, -0.123691f, -0.116025f, -0.109038f, -0.102988f, -0.096774f, -0.088859f, -0.079067f, -0.068595f, -0.058652f, -0.049731f, -0.041459f, -0.032502f, -0.021490f, -0.008698f, 0.003957f, 0.014879f, 0.023943f, 0.031863f, 0.039641f, 0.048517f, 0.059156f, 0.070934f, 0.082892f, 0.094921f, 0.107290f, 0.119849f, 0.132466f, 0.145202f, 0.157413f, 0.167770f, 0.175597f, 0.181049f, 0.184050f, 0.184444f, 0.182904f, 0.180196f, 0.176079f, 0.170279f, 0.163603f, 0.156847f, 0.149956f, 0.143323f, 0.138140f, 0.134607f, 0.131865f, 0.130015f, 0.129755f, 0.130428f, 0.131261f, 0.132652f, 0.131757f, 0.119661f, 0.090367f, 0.051746f, 0.020184f, 0.004349f, 0.000237f}, - {0.003949f, 0.004065f, -0.004529f, -0.003058f, 0.017910f, 0.041346f, 0.049210f, 0.053546f, 0.080846f, 0.125171f, 0.138752f, 0.082301f, -0.027313f, -0.134102f, -0.200608f, -0.233142f, -0.253660f, -0.266920f, -0.262970f, -0.237188f, -0.194063f, -0.136745f, -0.064986f, 0.017247f, 0.101044f, 0.180693f, 0.256442f, 0.328205f, 0.391843f, 0.443152f, 0.481210f, 0.506165f, 0.517126f, 0.513522f, 0.495538f, 0.462242f, 0.412470f, 0.349030f, 0.279619f, 0.212173f, 0.150791f, 0.096336f, 0.048496f, 0.006238f, -0.031944f, -0.067046f, -0.099419f, -0.129417f, -0.157110f, -0.181639f, -0.201899f, -0.217571f, -0.228864f, -0.236108f, -0.240440f, -0.243939f, -0.248173f, -0.253310f, -0.259111f, -0.265714f, -0.273010f, -0.280389f, -0.287541f, -0.294554f, -0.301097f, -0.306552f, -0.310894f, -0.314304f, -0.316123f, -0.315383f, -0.312099f, -0.306725f, -0.298589f, -0.286282f, -0.269490f, -0.249062f, -0.225223f, -0.197242f, -0.165404f, -0.131961f, -0.099076f, -0.066683f, -0.033703f, -0.000877f, 0.029410f, 0.056340f, 0.081745f, 0.106984f, 0.130473f, 0.149782f, 0.164778f, 0.176837f, 0.185968f, 0.190743f, 0.190692f, 0.187082f, - 0.181465f, 0.174611f, 0.166752f, 0.158044f, 0.148865f, 0.139889f, 0.131570f, 0.123691f, 0.116025f, 0.109038f, 0.102988f, 0.096774f, 0.088859f, 0.079067f, 0.068595f, 0.058652f, 0.049731f, 0.041459f, 0.032502f, 0.021490f, 0.008698f, -0.003957f, -0.014879f, -0.023943f, -0.031863f, -0.039641f, -0.048517f, -0.059156f, -0.070934f, -0.082892f, -0.094921f, -0.107290f, -0.119849f, -0.132466f, -0.145202f, -0.157413f, -0.167770f, -0.175597f, -0.181049f, -0.184050f, -0.184444f, -0.182904f, -0.180196f, -0.176079f, -0.170279f, -0.163603f, -0.156847f, -0.149956f, -0.143323f, -0.138140f, -0.134607f, -0.131865f, -0.130015f, -0.129755f, -0.130428f, -0.131261f, -0.132652f, -0.131757f, -0.119661f, -0.090367f, -0.051746f, -0.020184f, -0.004349f, -0.000237f} - }, - { - {-0.006838f, -0.000073f, 0.019569f, 0.004812f, -0.021179f, 0.017001f, 0.095357f, 0.079254f, -0.080727f, -0.242975f, -0.239933f, -0.079038f, 0.094027f, 0.179068f, 0.192210f, 0.186347f, 0.179576f, 0.164512f, 0.135604f, 0.091894f, 0.036418f, -0.019928f, -0.065074f, -0.095268f, -0.111552f, -0.113737f, -0.104494f, -0.091666f, -0.080317f, -0.069042f, -0.057974f, -0.052882f, -0.057423f, -0.067725f, -0.078296f, -0.088767f, -0.102514f, -0.121895f, -0.145878f, -0.170008f, -0.188674f, -0.199029f, -0.202203f, -0.200419f, -0.195060f, -0.187856f, -0.180908f, -0.174383f, -0.166293f, -0.154984f, -0.140002f, -0.120815f, -0.096730f, -0.067714f, -0.033820f, 0.005223f, 0.048523f, 0.093540f, 0.138202f, 0.181886f, 0.223555f, 0.261046f, 0.293122f, 0.320062f, 0.341424f, 0.355281f, 0.360314f, 0.356691f, 0.344454f, 0.322937f, 0.292135f, 0.253115f, 0.207016f, 0.155091f, 0.099534f, 0.042831f, -0.013572f, -0.068750f, -0.120804f, -0.167303f, -0.207256f, -0.241508f, -0.270731f, -0.293815f, -0.309031f, -0.316475f, -0.318315f, -0.316263f, -0.309841f, -0.297894f, -0.280743f, -0.259596f, -0.234760f, -0.205963f, -0.173776f, -0.139211f, - -0.102436f, -0.063409f, -0.023388f, 0.015541f, 0.052145f, 0.086261f, 0.117562f, 0.144705f, 0.165452f, 0.177810f, 0.181963f, 0.180989f, 0.178411f, 0.174952f, 0.168699f, 0.158230f, 0.144450f, 0.129742f, 0.116497f, 0.106152f, 0.098556f, 0.092438f, 0.087095f, 0.083117f, 0.081219f, 0.081325f, 0.083051f, 0.085959f, 0.089030f, 0.090997f, 0.091374f, 0.090241f, 0.087241f, 0.081872f, 0.074446f, 0.065721f, 0.056063f, 0.045844f, 0.035939f, 0.026995f, 0.018956f, 0.011839f, 0.005924f, 0.000823f, -0.004378f, -0.009757f, -0.014627f, -0.018984f, -0.023457f, -0.027936f, -0.031769f, -0.035015f, -0.038036f, -0.040342f, -0.041399f, -0.041932f, -0.042717f, -0.042585f, -0.039224f, -0.031819f, -0.021956f, -0.012357f, -0.005285f, -0.001296f}, - {0.006838f, 0.000073f, -0.019569f, -0.004812f, 0.021179f, -0.017001f, -0.095357f, -0.079254f, 0.080727f, 0.242975f, 0.239933f, 0.079038f, -0.094027f, -0.179068f, -0.192210f, -0.186347f, -0.179576f, -0.164512f, -0.135604f, -0.091894f, -0.036418f, 0.019928f, 0.065074f, 0.095268f, 0.111552f, 0.113737f, 0.104494f, 0.091666f, 0.080317f, 0.069042f, 0.057974f, 0.052882f, 0.057423f, 0.067725f, 0.078296f, 0.088767f, 0.102514f, 0.121895f, 0.145878f, 0.170008f, 0.188674f, 0.199029f, 0.202203f, 0.200419f, 0.195060f, 0.187856f, 0.180908f, 0.174383f, 0.166293f, 0.154984f, 0.140002f, 0.120815f, 0.096730f, 0.067714f, 0.033820f, -0.005223f, -0.048523f, -0.093540f, -0.138202f, -0.181886f, -0.223555f, -0.261046f, -0.293122f, -0.320062f, -0.341424f, -0.355281f, -0.360314f, -0.356691f, -0.344454f, -0.322937f, -0.292135f, -0.253115f, -0.207016f, -0.155091f, -0.099534f, -0.042831f, 0.013572f, 0.068750f, 0.120804f, 0.167303f, 0.207256f, 0.241508f, 0.270731f, 0.293815f, 0.309031f, 0.316475f, 0.318315f, 0.316263f, 0.309841f, 0.297894f, 0.280743f, 0.259596f, 0.234760f, 0.205963f, 0.173776f, 0.139211f, - 0.102436f, 0.063409f, 0.023388f, -0.015541f, -0.052145f, -0.086261f, -0.117562f, -0.144705f, -0.165452f, -0.177810f, -0.181963f, -0.180989f, -0.178411f, -0.174952f, -0.168699f, -0.158230f, -0.144450f, -0.129742f, -0.116497f, -0.106152f, -0.098556f, -0.092438f, -0.087095f, -0.083117f, -0.081219f, -0.081325f, -0.083051f, -0.085959f, -0.089030f, -0.090997f, -0.091374f, -0.090241f, -0.087241f, -0.081872f, -0.074446f, -0.065721f, -0.056063f, -0.045844f, -0.035939f, -0.026995f, -0.018956f, -0.011839f, -0.005924f, -0.000823f, 0.004378f, 0.009757f, 0.014627f, 0.018984f, 0.023457f, 0.027936f, 0.031769f, 0.035015f, 0.038036f, 0.040342f, 0.041399f, 0.041932f, 0.042717f, 0.042585f, 0.039224f, 0.031819f, 0.021956f, 0.012357f, 0.005285f, 0.001296f} - }, - { - {-0.001268f, -0.011623f, -0.025773f, -0.019189f, 0.011057f, 0.041023f, 0.068146f, 0.125696f, 0.222407f, 0.296789f, 0.269284f, 0.131113f, -0.047610f, -0.192572f, -0.280508f, -0.323423f, -0.332386f, -0.312852f, -0.276029f, -0.234862f, -0.192992f, -0.147490f, -0.098453f, -0.049129f, -0.001158f, 0.043170f, 0.076863f, 0.093414f, 0.095853f, 0.095899f, 0.103483f, 0.119683f, 0.139635f, 0.159125f, 0.177059f, 0.193595f, 0.208271f, 0.220249f, 0.229045f, 0.234009f, 0.233700f, 0.227053f, 0.215289f, 0.201603f, 0.188525f, 0.176263f, 0.163748f, 0.150359f, 0.136192f, 0.121455f, 0.106303f, 0.090949f, 0.075597f, 0.060536f, 0.046491f, 0.034613f, 0.025962f, 0.021084f, 0.020003f, 0.022378f, 0.027742f, 0.035774f, 0.046332f, 0.059186f, 0.073920f, 0.090220f, 0.108028f, 0.127179f, 0.146973f, 0.166342f, 0.184471f, 0.201087f, 0.215996f, 0.228448f, 0.237272f, 0.241711f, 0.241663f, 0.236858f, 0.226335f, 0.209312f, 0.186169f, 0.157898f, 0.124884f, 0.087019f, 0.044857f, -0.000171f, -0.046674f, -0.093813f, -0.141018f, -0.187871f, -0.234164f, -0.279203f, -0.320929f, -0.356487f, -0.384099f, -0.404029f, - -0.417450f, -0.424542f, -0.423967f, -0.414337f, -0.396303f, -0.373146f, -0.348990f, -0.326237f, -0.304833f, -0.283944f, -0.263944f, -0.246725f, -0.234478f, -0.228461f, -0.228593f, -0.233819f, -0.242777f, -0.254337f, -0.267790f, -0.282812f, -0.299281f, -0.316843f, -0.334511f, -0.350840f, -0.364685f, -0.375697f, -0.384143f, -0.390499f, -0.395225f, -0.398596f, -0.400645f, -0.401464f, -0.401489f, -0.401163f, -0.400362f, -0.398530f, -0.395360f, -0.391048f, -0.385958f, -0.380382f, -0.374495f, -0.368144f, -0.360693f, -0.351302f, -0.339340f, -0.324513f, -0.306932f, -0.287105f, -0.265519f, -0.242294f, -0.217711f, -0.192689f, -0.167920f, -0.143119f, -0.118052f, -0.092771f, -0.064621f, -0.027534f, 0.019774f, 0.064488f, 0.085852f, 0.075236f, 0.045270f, 0.014113f}, - {-0.001268f, -0.011623f, -0.025773f, -0.019189f, 0.011057f, 0.041023f, 0.068146f, 0.125696f, 0.222407f, 0.296789f, 0.269284f, 0.131113f, -0.047610f, -0.192572f, -0.280508f, -0.323423f, -0.332386f, -0.312852f, -0.276029f, -0.234862f, -0.192992f, -0.147490f, -0.098453f, -0.049129f, -0.001158f, 0.043170f, 0.076863f, 0.093414f, 0.095853f, 0.095899f, 0.103483f, 0.119683f, 0.139635f, 0.159125f, 0.177059f, 0.193595f, 0.208271f, 0.220249f, 0.229045f, 0.234009f, 0.233700f, 0.227053f, 0.215289f, 0.201603f, 0.188525f, 0.176263f, 0.163748f, 0.150359f, 0.136192f, 0.121455f, 0.106303f, 0.090949f, 0.075597f, 0.060536f, 0.046491f, 0.034613f, 0.025962f, 0.021084f, 0.020003f, 0.022378f, 0.027742f, 0.035774f, 0.046332f, 0.059186f, 0.073920f, 0.090220f, 0.108028f, 0.127179f, 0.146973f, 0.166342f, 0.184471f, 0.201087f, 0.215996f, 0.228448f, 0.237272f, 0.241711f, 0.241663f, 0.236858f, 0.226335f, 0.209312f, 0.186169f, 0.157898f, 0.124884f, 0.087019f, 0.044857f, -0.000171f, -0.046674f, -0.093813f, -0.141018f, -0.187871f, -0.234164f, -0.279203f, -0.320929f, -0.356487f, -0.384099f, -0.404029f, - -0.417450f, -0.424542f, -0.423967f, -0.414337f, -0.396303f, -0.373146f, -0.348990f, -0.326237f, -0.304833f, -0.283944f, -0.263944f, -0.246725f, -0.234478f, -0.228461f, -0.228593f, -0.233819f, -0.242777f, -0.254337f, -0.267790f, -0.282812f, -0.299281f, -0.316843f, -0.334511f, -0.350840f, -0.364685f, -0.375697f, -0.384143f, -0.390499f, -0.395225f, -0.398596f, -0.400645f, -0.401464f, -0.401489f, -0.401163f, -0.400362f, -0.398530f, -0.395360f, -0.391048f, -0.385958f, -0.380382f, -0.374495f, -0.368144f, -0.360693f, -0.351302f, -0.339340f, -0.324513f, -0.306932f, -0.287105f, -0.265519f, -0.242294f, -0.217711f, -0.192689f, -0.167920f, -0.143119f, -0.118052f, -0.092771f, -0.064621f, -0.027534f, 0.019774f, 0.064488f, 0.085852f, 0.075236f, 0.045270f, 0.014113f} - }, - { - {-0.038110f, -0.075146f, -0.025161f, 0.086861f, 0.170835f, 0.137738f, -0.014451f, -0.178329f, -0.226409f, -0.135078f, -0.001014f, 0.071747f, 0.071029f, 0.049512f, 0.040096f, 0.037651f, 0.039313f, 0.052944f, 0.068671f, 0.062568f, 0.034549f, 0.012890f, 0.014819f, 0.026726f, 0.029476f, 0.021912f, 0.011228f, -0.002938f, -0.024811f, -0.052618f, -0.079613f, -0.100151f, -0.112340f, -0.118985f, -0.126456f, -0.138876f, -0.153643f, -0.164753f, -0.168424f, -0.163586f, -0.150319f, -0.130693f, -0.108614f, -0.086681f, -0.065059f, -0.044049f, -0.025062f, -0.008581f, 0.006237f, 0.019687f, 0.031442f, 0.042086f, 0.052645f, 0.063061f, 0.072813f, 0.082218f, 0.091601f, 0.100095f, 0.106517f, 0.110624f, 0.112708f, 0.112893f, 0.111393f, 0.108835f, 0.106157f, 0.104517f, 0.104794f, 0.106828f, 0.110032f, 0.114914f, 0.122673f, 0.133176f, 0.145069f, 0.158047f, 0.173137f, 0.190427f, 0.208289f, 0.225087f, 0.240122f, 0.252791f, 0.262062f, 0.266804f, 0.265987f, 0.259150f, 0.246951f, 0.230107f, 0.207850f, 0.179343f, 0.146598f, 0.113197f, 0.079461f, 0.041623f, -0.003026f, -0.052458f, -0.102576f, -0.151651f, - -0.200702f, -0.250524f, -0.299538f, -0.344617f, -0.383867f, -0.418204f, -0.449410f, -0.476879f, -0.497661f, -0.509826f, -0.514454f, -0.514151f, -0.510709f, -0.504091f, -0.492568f, -0.474151f, -0.448897f, -0.419410f, -0.388422f, -0.356746f, -0.324102f, -0.290635f, -0.256925f, -0.223703f, -0.192072f, -0.162880f, -0.135745f, -0.109787f, -0.085028f, -0.061904f, -0.040007f, -0.018473f, 0.003074f, 0.024714f, 0.046173f, 0.065944f, 0.082103f, 0.094598f, 0.105239f, 0.115311f, 0.124969f, 0.134460f, 0.143642f, 0.150842f, 0.154541f, 0.155566f, 0.155668f, 0.155273f, 0.154440f, 0.154045f, 0.154074f, 0.152898f, 0.149782f, 0.145794f, 0.141598f, 0.137270f, 0.133687f, 0.129549f, 0.118095f, 0.093347f, 0.059954f, 0.030500f, 0.012452f, 0.003233f}, - {-0.038110f, -0.075146f, -0.025161f, 0.086861f, 0.170835f, 0.137738f, -0.014451f, -0.178329f, -0.226409f, -0.135078f, -0.001014f, 0.071747f, 0.071029f, 0.049512f, 0.040096f, 0.037651f, 0.039313f, 0.052944f, 0.068671f, 0.062568f, 0.034549f, 0.012890f, 0.014819f, 0.026726f, 0.029476f, 0.021912f, 0.011228f, -0.002938f, -0.024811f, -0.052618f, -0.079613f, -0.100151f, -0.112340f, -0.118985f, -0.126456f, -0.138876f, -0.153643f, -0.164753f, -0.168424f, -0.163586f, -0.150319f, -0.130693f, -0.108614f, -0.086681f, -0.065059f, -0.044049f, -0.025062f, -0.008581f, 0.006237f, 0.019687f, 0.031442f, 0.042086f, 0.052645f, 0.063061f, 0.072813f, 0.082218f, 0.091601f, 0.100095f, 0.106517f, 0.110624f, 0.112708f, 0.112893f, 0.111393f, 0.108835f, 0.106157f, 0.104517f, 0.104794f, 0.106828f, 0.110032f, 0.114914f, 0.122673f, 0.133176f, 0.145069f, 0.158047f, 0.173137f, 0.190427f, 0.208289f, 0.225087f, 0.240122f, 0.252791f, 0.262062f, 0.266804f, 0.265987f, 0.259150f, 0.246951f, 0.230107f, 0.207850f, 0.179343f, 0.146598f, 0.113197f, 0.079461f, 0.041623f, -0.003026f, -0.052458f, -0.102576f, -0.151651f, - -0.200702f, -0.250524f, -0.299538f, -0.344617f, -0.383867f, -0.418204f, -0.449410f, -0.476879f, -0.497661f, -0.509826f, -0.514454f, -0.514151f, -0.510709f, -0.504091f, -0.492568f, -0.474151f, -0.448897f, -0.419410f, -0.388422f, -0.356746f, -0.324102f, -0.290635f, -0.256925f, -0.223703f, -0.192072f, -0.162880f, -0.135745f, -0.109787f, -0.085028f, -0.061904f, -0.040007f, -0.018473f, 0.003074f, 0.024714f, 0.046173f, 0.065944f, 0.082103f, 0.094598f, 0.105239f, 0.115311f, 0.124969f, 0.134460f, 0.143642f, 0.150842f, 0.154541f, 0.155566f, 0.155668f, 0.155273f, 0.154440f, 0.154045f, 0.154074f, 0.152898f, 0.149782f, 0.145794f, 0.141598f, 0.137270f, 0.133687f, 0.129549f, 0.118095f, 0.093347f, 0.059954f, 0.030500f, 0.012452f, 0.003233f} - }, - { - {0.027412f, 0.021630f, -0.082657f, -0.192018f, -0.202211f, -0.094239f, 0.096849f, 0.326445f, 0.521758f, 0.589844f, 0.497341f, 0.306742f, 0.099455f, -0.102283f, -0.307547f, -0.492196f, -0.609749f, -0.649976f, -0.647303f, -0.634380f, -0.613427f, -0.571915f, -0.505693f, -0.422791f, -0.335442f, -0.251686f, -0.170793f, -0.086744f, 0.002987f, 0.094569f, 0.183305f, 0.267395f, 0.345542f, 0.414985f, 0.473298f, 0.519576f, 0.553356f, 0.574222f, 0.582473f, 0.579178f, 0.566240f, 0.546806f, 0.524087f, 0.499039f, 0.470563f, 0.438298f, 0.403850f, 0.369330f, 0.336252f, 0.305665f, 0.277686f, 0.250860f, 0.223237f, 0.194118f, 0.164061f, 0.133725f, 0.103572f, 0.074268f, 0.046587f, 0.021025f, -0.002250f, -0.023323f, -0.042436f, -0.059666f, -0.074855f, -0.088006f, -0.099327f, -0.108715f, -0.115836f, -0.120903f, -0.124625f, -0.127245f, -0.128473f, -0.128509f, -0.128126f, -0.127534f, -0.126157f, -0.123884f, -0.121697f, -0.120709f, -0.121149f, -0.122545f, -0.124406f, -0.126443f, -0.128321f, -0.129408f, -0.128923f, -0.126622f, -0.123305f, -0.120296f, -0.118410f, -0.117799f, -0.118840f, -0.122736f, -0.130899f, -0.143626f, - -0.159298f, -0.175051f, -0.188642f, -0.199660f, -0.208519f, -0.214407f, -0.214978f, -0.208332f, -0.194776f, -0.176354f, -0.155006f, -0.131408f, -0.105361f, -0.077096f, -0.048137f, -0.020733f, 0.003611f, 0.024921f, 0.044105f, 0.061808f, 0.077866f, 0.091518f, 0.102092f, 0.109797f, 0.115978f, 0.122346f, 0.129837f, 0.138130f, 0.146061f, 0.152497f, 0.157139f, 0.160632f, 0.163819f, 0.166991f, 0.170004f, 0.172717f, 0.174872f, 0.175941f, 0.175619f, 0.174137f, 0.171689f, 0.168049f, 0.163091f, 0.157009f, 0.149642f, 0.140361f, 0.128990f, 0.115985f, 0.101537f, 0.085578f, 0.068755f, 0.052109f, 0.035768f, 0.019324f, 0.003160f, -0.012450f, -0.028834f, -0.046486f, -0.060943f, -0.064580f, -0.054322f, -0.035670f, -0.017673f, -0.004951f}, - {0.027412f, 0.021630f, -0.082657f, -0.192018f, -0.202211f, -0.094239f, 0.096849f, 0.326445f, 0.521758f, 0.589844f, 0.497341f, 0.306742f, 0.099455f, -0.102283f, -0.307547f, -0.492196f, -0.609749f, -0.649976f, -0.647303f, -0.634380f, -0.613427f, -0.571915f, -0.505693f, -0.422791f, -0.335442f, -0.251686f, -0.170793f, -0.086744f, 0.002987f, 0.094569f, 0.183305f, 0.267395f, 0.345542f, 0.414985f, 0.473298f, 0.519576f, 0.553356f, 0.574222f, 0.582473f, 0.579178f, 0.566240f, 0.546806f, 0.524087f, 0.499039f, 0.470563f, 0.438298f, 0.403850f, 0.369330f, 0.336252f, 0.305665f, 0.277686f, 0.250860f, 0.223237f, 0.194118f, 0.164061f, 0.133725f, 0.103572f, 0.074268f, 0.046587f, 0.021025f, -0.002250f, -0.023323f, -0.042436f, -0.059666f, -0.074855f, -0.088006f, -0.099327f, -0.108715f, -0.115836f, -0.120903f, -0.124625f, -0.127245f, -0.128473f, -0.128509f, -0.128126f, -0.127534f, -0.126157f, -0.123884f, -0.121697f, -0.120709f, -0.121149f, -0.122545f, -0.124406f, -0.126443f, -0.128321f, -0.129408f, -0.128923f, -0.126622f, -0.123305f, -0.120296f, -0.118410f, -0.117799f, -0.118840f, -0.122736f, -0.130899f, -0.143626f, - -0.159298f, -0.175051f, -0.188642f, -0.199660f, -0.208519f, -0.214407f, -0.214978f, -0.208332f, -0.194776f, -0.176354f, -0.155006f, -0.131408f, -0.105361f, -0.077096f, -0.048137f, -0.020733f, 0.003611f, 0.024921f, 0.044105f, 0.061808f, 0.077866f, 0.091518f, 0.102092f, 0.109797f, 0.115978f, 0.122346f, 0.129837f, 0.138130f, 0.146061f, 0.152497f, 0.157139f, 0.160632f, 0.163819f, 0.166991f, 0.170004f, 0.172717f, 0.174872f, 0.175941f, 0.175619f, 0.174137f, 0.171689f, 0.168049f, 0.163091f, 0.157009f, 0.149642f, 0.140361f, 0.128990f, 0.115985f, 0.101537f, 0.085578f, 0.068755f, 0.052109f, 0.035768f, 0.019324f, 0.003160f, -0.012450f, -0.028834f, -0.046486f, -0.060943f, -0.064580f, -0.054322f, -0.035670f, -0.017673f, -0.004951f} - } -}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 16000 */ const int16_t CRendBin_HOA2_HRIR_max_num_iterations_16kHz = 1; @@ -1214,104 +162,15 @@ const uint16_t CRendBin_HOA2_HRIR_num_iterations_16kHz[9][BINAURAL_CHANNELS]={{1 const uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz[9][BINAURAL_CHANNELS][1]={{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}}}; const uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_16kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[9]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz_fx[9]={0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA2_HRIR_coeff_re_16kHz[9][BINAURAL_CHANNELS][80]={ - { - { 0.854113f, 0.536451f, 0.067092f, -0.350133f, -0.609131f, -0.724504f, -0.749647f, -0.705240f, -0.587299f, -0.405686f, -0.188603f, 0.034290f, 0.235326f, 0.389114f, 0.484257f, 0.526650f, 0.525509f, 0.486339f, 0.417501f, 0.329156f, 0.225561f, 0.110464f, -0.004565f, -0.110029f, -0.209397f, -0.307633f, -0.398358f, -0.473786f, -0.535896f, -0.587622f, -0.625653f, -0.650087f, -0.667773f, -0.680841f, -0.685616f, -0.684346f, -0.683354f, -0.681293f, -0.673940f, -0.665480f, -0.660678f, -0.654254f, -0.641454f, -0.627762f, -0.616498f, -0.601208f, -0.579959f, -0.560224f, -0.542768f, -0.519685f, -0.491848f, -0.467631f, -0.444806f, -0.415518f, -0.384419f, -0.359637f, -0.335182f, -0.304116f, -0.274642f, -0.252517f, -0.227297f, -0.194558f, -0.166484f, -0.145123f, -0.116152f, -0.080136f, -0.053083f, -0.030604f, 0.005387f, 0.046361f, 0.073460f, 0.102702f, 0.155814f, 0.209408f, 0.244378f, 0.309617f, 0.442675f, 0.565949f, 0.579052f, 0.523768f}, - { 0.854113f, 0.536451f, 0.067092f, -0.350133f, -0.609131f, -0.724504f, -0.749647f, -0.705240f, -0.587299f, -0.405686f, -0.188603f, 0.034290f, 0.235326f, 0.389114f, 0.484257f, 0.526650f, 0.525509f, 0.486339f, 0.417501f, 0.329156f, 0.225561f, 0.110464f, -0.004565f, -0.110029f, -0.209397f, -0.307633f, -0.398358f, -0.473786f, -0.535896f, -0.587622f, -0.625653f, -0.650087f, -0.667773f, -0.680841f, -0.685616f, -0.684346f, -0.683354f, -0.681293f, -0.673940f, -0.665480f, -0.660678f, -0.654254f, -0.641454f, -0.627762f, -0.616498f, -0.601208f, -0.579959f, -0.560224f, -0.542768f, -0.519685f, -0.491848f, -0.467631f, -0.444806f, -0.415518f, -0.384419f, -0.359637f, -0.335182f, -0.304116f, -0.274642f, -0.252517f, -0.227297f, -0.194558f, -0.166484f, -0.145123f, -0.116152f, -0.080136f, -0.053083f, -0.030604f, 0.005387f, 0.046361f, 0.073460f, 0.102702f, 0.155814f, 0.209408f, 0.244378f, 0.309617f, 0.442675f, 0.565949f, 0.579052f, 0.523768f} - }, - { - { -0.012443f, 0.306951f, 0.640002f, 0.644701f, 0.222035f, -0.433014f, -1.009059f, -1.299682f, -1.291983f, -1.091837f, -0.799579f, -0.462162f, -0.106609f, 0.232265f, 0.526384f, 0.765415f, 0.941389f, 1.042514f, 1.068606f, 1.035233f, 0.959157f, 0.852416f, 0.726756f, 0.589559f, 0.440759f, 0.284682f, 0.135118f, -0.000404f, -0.127707f, -0.249843f, -0.360240f, -0.457524f, -0.548845f, -0.634531f, -0.707989f, -0.771448f, -0.832955f, -0.890467f, -0.937355f, -0.977102f, -1.014815f, -1.044459f, -1.061037f, -1.071895f, -1.081707f, -1.083157f, -1.073972f, -1.063175f, -1.052317f, -1.033040f, -1.007384f, -0.985836f, -0.965459f, -0.935829f, -0.901362f, -0.871368f, -0.838870f, -0.795666f, -0.751917f, -0.715707f, -0.675655f, -0.626445f, -0.582556f, -0.547393f, -0.504423f, -0.453551f, -0.413720f, -0.380963f, -0.333822f, -0.281188f, -0.246458f, -0.212864f, -0.152864f, -0.091358f, -0.055541f, 0.008028f, 0.159750f, 0.338247f, 0.427051f, 0.426619f}, - { 0.012443f, -0.306951f, -0.640002f, -0.644701f, -0.222035f, 0.433014f, 1.009059f, 1.299682f, 1.291983f, 1.091837f, 0.799579f, 0.462162f, 0.106609f, -0.232265f, -0.526384f, -0.765415f, -0.941389f, -1.042514f, -1.068606f, -1.035233f, -0.959157f, -0.852416f, -0.726756f, -0.589559f, -0.440759f, -0.284682f, -0.135118f, 0.000404f, 0.127707f, 0.249843f, 0.360240f, 0.457524f, 0.548845f, 0.634531f, 0.707989f, 0.771448f, 0.832955f, 0.890467f, 0.937355f, 0.977102f, 1.014815f, 1.044459f, 1.061037f, 1.071895f, 1.081707f, 1.083157f, 1.073972f, 1.063175f, 1.052317f, 1.033040f, 1.007384f, 0.985836f, 0.965459f, 0.935829f, 0.901362f, 0.871368f, 0.838870f, 0.795666f, 0.751917f, 0.715707f, 0.675655f, 0.626445f, 0.582556f, 0.547393f, 0.504423f, 0.453551f, 0.413720f, 0.380963f, 0.333822f, 0.281188f, 0.246458f, 0.212864f, 0.152864f, 0.091358f, 0.055541f, -0.008028f, -0.159750f, -0.338247f, -0.427051f, -0.426619f} - }, - { - { 0.106040f, 0.060914f, -0.031732f, -0.122748f, -0.131004f, -0.043133f, 0.056519f, 0.081183f, 0.028467f, -0.045616f, -0.095920f, -0.105685f, -0.073558f, -0.018343f, 0.024819f, 0.040683f, 0.051725f, 0.081855f, 0.120329f, 0.139638f, 0.131573f, 0.106054f, 0.068663f, 0.019936f, -0.031186f, -0.070885f, -0.095191f, -0.111198f, -0.126364f, -0.142556f, -0.156831f, -0.163750f, -0.159885f, -0.147705f, -0.132376f, -0.116427f, -0.101758f, -0.093589f, -0.096321f, -0.107910f, -0.123532f, -0.141780f, -0.162704f, -0.183821f, -0.202825f, -0.220588f, -0.237945f, -0.253555f, -0.267240f, -0.280492f, -0.292011f, -0.297968f, -0.297520f, -0.292601f, -0.282562f, -0.264953f, -0.240677f, -0.212280f, -0.178881f, -0.138637f, -0.093494f, -0.045703f, 0.006560f, 0.064510f, 0.124631f, 0.184450f, 0.246159f, 0.309391f, 0.368198f, 0.420383f, 0.470265f, 0.516543f, 0.549526f, 0.568203f, 0.584977f, 0.598750f, 0.576096f, 0.483726f, 0.343185f, 0.235289f}, - { 0.106040f, 0.060914f, -0.031732f, -0.122748f, -0.131004f, -0.043133f, 0.056519f, 0.081183f, 0.028467f, -0.045616f, -0.095920f, -0.105685f, -0.073558f, -0.018343f, 0.024819f, 0.040683f, 0.051725f, 0.081855f, 0.120329f, 0.139638f, 0.131573f, 0.106054f, 0.068663f, 0.019936f, -0.031186f, -0.070885f, -0.095191f, -0.111198f, -0.126364f, -0.142556f, -0.156831f, -0.163750f, -0.159885f, -0.147705f, -0.132376f, -0.116427f, -0.101758f, -0.093589f, -0.096321f, -0.107910f, -0.123532f, -0.141780f, -0.162704f, -0.183821f, -0.202825f, -0.220588f, -0.237945f, -0.253555f, -0.267240f, -0.280492f, -0.292011f, -0.297968f, -0.297520f, -0.292601f, -0.282562f, -0.264953f, -0.240677f, -0.212280f, -0.178881f, -0.138637f, -0.093494f, -0.045703f, 0.006560f, 0.064510f, 0.124631f, 0.184450f, 0.246159f, 0.309391f, 0.368198f, 0.420383f, 0.470265f, 0.516543f, 0.549526f, 0.568203f, 0.584977f, 0.598750f, 0.576096f, 0.483726f, 0.343185f, 0.235289f} - }, - { - { 0.025607f, 0.045038f, 0.027103f, -0.045868f, -0.111319f, -0.105551f, -0.047795f, -0.014679f, -0.049667f, -0.124496f, -0.180635f, -0.185029f, -0.145752f, -0.091265f, -0.042340f, 0.001278f, 0.052398f, 0.117166f, 0.185884f, 0.241515f, 0.272871f, 0.278398f, 0.262158f, 0.230861f, 0.192777f, 0.153660f, 0.111660f, 0.059556f, -0.005878f, -0.079629f, -0.155374f, -0.232190f, -0.310424f, -0.385049f, -0.448791f, -0.499238f, -0.537567f, -0.562808f, -0.572842f, -0.569135f, -0.555677f, -0.534949f, -0.508499f, -0.478959f, -0.448272f, -0.416372f, -0.383474f, -0.350600f, -0.317045f, -0.281295f, -0.244792f, -0.210869f, -0.180716f, -0.154266f, -0.132786f, -0.116138f, -0.100516f, -0.083127f, -0.065324f, -0.047830f, -0.028398f, -0.007151f, 0.012489f, 0.030425f, 0.049855f, 0.069959f, 0.087587f, 0.105253f, 0.127127f, 0.150063f, 0.170135f, 0.192124f, 0.219421f, 0.244672f, 0.266012f, 0.295860f, 0.330524f, 0.332753f, 0.281342f, 0.221813f}, - { 0.025607f, 0.045038f, 0.027103f, -0.045868f, -0.111319f, -0.105551f, -0.047795f, -0.014679f, -0.049667f, -0.124496f, -0.180635f, -0.185029f, -0.145752f, -0.091265f, -0.042340f, 0.001278f, 0.052398f, 0.117166f, 0.185884f, 0.241515f, 0.272871f, 0.278398f, 0.262158f, 0.230861f, 0.192777f, 0.153660f, 0.111660f, 0.059556f, -0.005878f, -0.079629f, -0.155374f, -0.232190f, -0.310424f, -0.385049f, -0.448791f, -0.499238f, -0.537567f, -0.562808f, -0.572842f, -0.569135f, -0.555677f, -0.534949f, -0.508499f, -0.478959f, -0.448272f, -0.416372f, -0.383474f, -0.350600f, -0.317045f, -0.281295f, -0.244792f, -0.210869f, -0.180716f, -0.154266f, -0.132786f, -0.116138f, -0.100516f, -0.083127f, -0.065324f, -0.047830f, -0.028398f, -0.007151f, 0.012489f, 0.030425f, 0.049855f, 0.069959f, 0.087587f, 0.105253f, 0.127127f, 0.150063f, 0.170135f, 0.192124f, 0.219421f, 0.244672f, 0.266012f, 0.295860f, 0.330524f, 0.332753f, 0.281342f, 0.221813f} - }, - { - { 0.000686f, -0.005679f, -0.002736f, 0.013737f, 0.025339f, 0.016835f, 0.000897f, -0.001565f, -0.001575f, -0.037994f, -0.123814f, -0.215847f, -0.254773f, -0.224963f, -0.159158f, -0.092400f, -0.030561f, 0.036822f, 0.111977f, 0.186298f, 0.252449f, 0.308392f, 0.351372f, 0.375856f, 0.379463f, 0.366110f, 0.340246f, 0.301367f, 0.247642f, 0.181811f, 0.109110f, 0.031862f, -0.049402f, -0.131957f, -0.212350f, -0.288831f, -0.357898f, -0.412063f, -0.446158f, -0.462855f, -0.468107f, -0.465087f, -0.455925f, -0.444179f, -0.431579f, -0.416646f, -0.398983f, -0.380257f, -0.360020f, -0.336141f, -0.309688f, -0.283814f, -0.258868f, -0.234234f, -0.212458f, -0.195547f, -0.180677f, -0.165064f, -0.150310f, -0.137125f, -0.122189f, -0.104504f, -0.087232f, -0.070209f, -0.049591f, -0.026301f, -0.004365f, 0.018481f, 0.046634f, 0.076352f, 0.103125f, 0.132539f, 0.168518f, 0.202438f, 0.232093f, 0.272054f, 0.318122f, 0.326574f, 0.271717f, 0.205315f}, - { -0.000686f, 0.005679f, 0.002736f, -0.013737f, -0.025339f, -0.016835f, -0.000897f, 0.001565f, 0.001575f, 0.037994f, 0.123814f, 0.215847f, 0.254773f, 0.224963f, 0.159158f, 0.092400f, 0.030561f, -0.036822f, -0.111977f, -0.186298f, -0.252449f, -0.308392f, -0.351372f, -0.375856f, -0.379463f, -0.366110f, -0.340246f, -0.301367f, -0.247642f, -0.181811f, -0.109110f, -0.031862f, 0.049402f, 0.131957f, 0.212350f, 0.288831f, 0.357898f, 0.412063f, 0.446158f, 0.462855f, 0.468107f, 0.465087f, 0.455925f, 0.444179f, 0.431579f, 0.416646f, 0.398983f, 0.380257f, 0.360020f, 0.336141f, 0.309688f, 0.283814f, 0.258868f, 0.234234f, 0.212458f, 0.195547f, 0.180677f, 0.165064f, 0.150310f, 0.137125f, 0.122189f, 0.104504f, 0.087232f, 0.070209f, 0.049591f, 0.026301f, 0.004365f, -0.018481f, -0.046634f, -0.076352f, -0.103125f, -0.132539f, -0.168518f, -0.202438f, -0.232093f, -0.272054f, -0.318122f, -0.326574f, -0.271717f, -0.205315f} - }, - { - { 0.007904f, -0.008429f, 0.002701f, 0.025666f, 0.001826f, -0.039845f, 0.005012f, 0.135846f, 0.197408f, 0.076852f, -0.136969f, -0.263642f, -0.237977f, -0.137254f, -0.049823f, 0.006941f, 0.054280f, 0.103144f, 0.149549f, 0.185848f, 0.204085f, 0.200088f, 0.177900f, 0.145801f, 0.110457f, 0.077582f, 0.052788f, 0.037914f, 0.030252f, 0.027742f, 0.031540f, 0.041709f, 0.053562f, 0.061202f, 0.063767f, 0.065527f, 0.069061f, 0.070600f, 0.064006f, 0.047422f, 0.023594f, -0.004162f, -0.032992f, -0.059696f, -0.082643f, -0.103277f, -0.123459f, -0.143553f, -0.164480f, -0.187877f, -0.212785f, -0.236261f, -0.257871f, -0.278890f, -0.297353f, -0.309320f, -0.314125f, -0.312895f, -0.304021f, -0.285839f, -0.260655f, -0.230623f, -0.194026f, -0.150485f, -0.103758f, -0.055096f, -0.001701f, 0.054669f, 0.107407f, 0.155932f, 0.204710f, 0.249689f, 0.280936f, 0.300421f, 0.318178f, 0.326332f, 0.297895f, 0.222216f, 0.128176f, 0.064416f}, - { -0.007904f, 0.008429f, -0.002701f, -0.025666f, -0.001826f, 0.039845f, -0.005012f, -0.135846f, -0.197408f, -0.076852f, 0.136969f, 0.263642f, 0.237977f, 0.137254f, 0.049823f, -0.006941f, -0.054280f, -0.103144f, -0.149549f, -0.185848f, -0.204085f, -0.200088f, -0.177900f, -0.145801f, -0.110457f, -0.077582f, -0.052788f, -0.037914f, -0.030252f, -0.027742f, -0.031540f, -0.041709f, -0.053562f, -0.061202f, -0.063767f, -0.065527f, -0.069061f, -0.070600f, -0.064006f, -0.047422f, -0.023594f, 0.004162f, 0.032992f, 0.059696f, 0.082643f, 0.103277f, 0.123459f, 0.143553f, 0.164480f, 0.187877f, 0.212785f, 0.236261f, 0.257871f, 0.278890f, 0.297353f, 0.309320f, 0.314125f, 0.312895f, 0.304021f, 0.285839f, 0.260655f, 0.230623f, 0.194026f, 0.150485f, 0.103758f, 0.055096f, 0.001701f, -0.054669f, -0.107407f, -0.155932f, -0.204710f, -0.249689f, -0.280936f, -0.300421f, -0.318178f, -0.326332f, -0.297895f, -0.222216f, -0.128176f, -0.064416f} - }, - { - { -0.012716f, -0.011283f, -0.028399f, -0.061054f, -0.081205f, -0.083144f, -0.091074f, -0.102690f, -0.064724f, 0.062608f, 0.237783f, 0.366599f, 0.391473f, 0.329692f, 0.231326f, 0.128318f, 0.030222f, -0.055798f, -0.121650f, -0.168422f, -0.204629f, -0.233962f, -0.253078f, -0.260136f, -0.256765f, -0.242370f, -0.216094f, -0.185514f, -0.164188f, -0.157679f, -0.158772f, -0.158039f, -0.152420f, -0.142465f, -0.128405f, -0.111148f, -0.092065f, -0.070678f, -0.045979f, -0.019198f, 0.007643f, 0.033532f, 0.056493f, 0.073700f, 0.085876f, 0.097069f, 0.108478f, 0.117609f, 0.124012f, 0.129735f, 0.134173f, 0.134912f, 0.132726f, 0.129439f, 0.123146f, 0.111851f, 0.098311f, 0.085383f, 0.071577f, 0.056410f, 0.043514f, 0.033919f, 0.024302f, 0.015077f, 0.010656f, 0.010232f, 0.009612f, 0.011570f, 0.021452f, 0.035720f, 0.049452f, 0.068352f, 0.096786f, 0.126020f, 0.154079f, 0.197033f, 0.251253f, 0.270031f, 0.223100f, 0.160302f}, - { -0.012716f, -0.011283f, -0.028399f, -0.061054f, -0.081205f, -0.083144f, -0.091074f, -0.102690f, -0.064724f, 0.062608f, 0.237783f, 0.366599f, 0.391473f, 0.329692f, 0.231326f, 0.128318f, 0.030222f, -0.055798f, -0.121650f, -0.168422f, -0.204629f, -0.233962f, -0.253078f, -0.260136f, -0.256765f, -0.242370f, -0.216094f, -0.185514f, -0.164188f, -0.157679f, -0.158772f, -0.158039f, -0.152420f, -0.142465f, -0.128405f, -0.111148f, -0.092065f, -0.070678f, -0.045979f, -0.019198f, 0.007643f, 0.033532f, 0.056493f, 0.073700f, 0.085876f, 0.097069f, 0.108478f, 0.117609f, 0.124012f, 0.129735f, 0.134173f, 0.134912f, 0.132726f, 0.129439f, 0.123146f, 0.111851f, 0.098311f, 0.085383f, 0.071577f, 0.056410f, 0.043514f, 0.033919f, 0.024302f, 0.015077f, 0.010656f, 0.010232f, 0.009612f, 0.011570f, 0.021452f, 0.035720f, 0.049452f, 0.068352f, 0.096786f, 0.126020f, 0.154079f, 0.197033f, 0.251253f, 0.270031f, 0.223100f, 0.160302f} - }, - { - { 0.035859f, -0.035357f, -0.114806f, -0.119629f, -0.016035f, 0.134784f, 0.211022f, 0.138101f, -0.031463f, -0.164348f, -0.178566f, -0.110510f, -0.046828f, -0.024291f, -0.021836f, -0.019841f, -0.020649f, -0.019218f, 0.000673f, 0.033520f, 0.050179f, 0.039650f, 0.025311f, 0.029447f, 0.046313f, 0.061065f, 0.072923f, 0.086604f, 0.097738f, 0.098999f, 0.090037f, 0.074499f, 0.056179f, 0.040502f, 0.030491f, 0.020585f, 0.002674f, -0.023442f, -0.052639f, -0.082588f, -0.111653f, -0.134805f, -0.149388f, -0.159077f, -0.166519f, -0.169259f, -0.166952f, -0.163907f, -0.161378f, -0.156387f, -0.149606f, -0.144842f, -0.140986f, -0.134223f, -0.126134f, -0.119925f, -0.112707f, -0.101068f, -0.088476f, -0.078329f, -0.067520f, -0.054684f, -0.044956f, -0.039968f, -0.034783f, -0.029180f, -0.028179f, -0.029379f, -0.025982f, -0.021388f, -0.022077f, -0.020755f, -0.008615f, 0.005112f, 0.013009f, 0.034539f, 0.085352f, 0.136291f, 0.147338f, 0.130821f}, - { 0.035859f, -0.035357f, -0.114806f, -0.119629f, -0.016035f, 0.134784f, 0.211022f, 0.138101f, -0.031463f, -0.164348f, -0.178566f, -0.110510f, -0.046828f, -0.024291f, -0.021836f, -0.019841f, -0.020649f, -0.019218f, 0.000673f, 0.033520f, 0.050179f, 0.039650f, 0.025311f, 0.029447f, 0.046313f, 0.061065f, 0.072923f, 0.086604f, 0.097738f, 0.098999f, 0.090037f, 0.074499f, 0.056179f, 0.040502f, 0.030491f, 0.020585f, 0.002674f, -0.023442f, -0.052639f, -0.082588f, -0.111653f, -0.134805f, -0.149388f, -0.159077f, -0.166519f, -0.169259f, -0.166952f, -0.163907f, -0.161378f, -0.156387f, -0.149606f, -0.144842f, -0.140986f, -0.134223f, -0.126134f, -0.119925f, -0.112707f, -0.101068f, -0.088476f, -0.078329f, -0.067520f, -0.054684f, -0.044956f, -0.039968f, -0.034783f, -0.029180f, -0.028179f, -0.029379f, -0.025982f, -0.021388f, -0.022077f, -0.020755f, -0.008615f, 0.005112f, 0.013009f, 0.034539f, 0.085352f, 0.136291f, 0.147338f, 0.130821f} - }, - { - { -0.000277f, 0.072507f, 0.102938f, 0.013249f, -0.152871f, -0.302455f, -0.374408f, -0.331367f, -0.150657f, 0.128128f, 0.396891f, 0.568348f, 0.643297f, 0.660957f, 0.623136f, 0.509757f, 0.340137f, 0.169505f, 0.031029f, -0.085194f, -0.198795f, -0.311141f, -0.410925f, -0.488800f, -0.543139f, -0.580355f, -0.609683f, -0.633539f, -0.646097f, -0.642831f, -0.625426f, -0.596020f, -0.553861f, -0.499612f, -0.436850f, -0.368148f, -0.294645f, -0.219235f, -0.145750f, -0.076151f, -0.011910f, 0.044644f, 0.093543f, 0.138070f, 0.179584f, 0.215412f, 0.243810f, 0.266366f, 0.284297f, 0.297593f, 0.308450f, 0.320041f, 0.331716f, 0.340456f, 0.346032f, 0.349732f, 0.350243f, 0.345998f, 0.338804f, 0.330510f, 0.319816f, 0.306267f, 0.292468f, 0.279073f, 0.263490f, 0.245910f, 0.229601f, 0.214043f, 0.196022f, 0.177471f, 0.162554f, 0.148486f, 0.130576f, 0.113131f, 0.101342f, 0.086559f, 0.056990f, 0.019982f, -0.005018f, -0.012955f}, - { -0.000277f, 0.072507f, 0.102938f, 0.013249f, -0.152871f, -0.302455f, -0.374408f, -0.331367f, -0.150657f, 0.128128f, 0.396891f, 0.568348f, 0.643297f, 0.660957f, 0.623136f, 0.509757f, 0.340137f, 0.169505f, 0.031029f, -0.085194f, -0.198795f, -0.311141f, -0.410925f, -0.488800f, -0.543139f, -0.580355f, -0.609683f, -0.633539f, -0.646097f, -0.642831f, -0.625426f, -0.596020f, -0.553861f, -0.499612f, -0.436850f, -0.368148f, -0.294645f, -0.219235f, -0.145750f, -0.076151f, -0.011910f, 0.044644f, 0.093543f, 0.138070f, 0.179584f, 0.215412f, 0.243810f, 0.266366f, 0.284297f, 0.297593f, 0.308450f, 0.320041f, 0.331716f, 0.340456f, 0.346032f, 0.349732f, 0.350243f, 0.345998f, 0.338804f, 0.330510f, 0.319816f, 0.306267f, 0.292468f, 0.279073f, 0.263490f, 0.245910f, 0.229601f, 0.214043f, 0.196022f, 0.177471f, 0.162554f, 0.148486f, 0.130576f, 0.113131f, 0.101342f, 0.086559f, 0.056990f, 0.019982f, -0.005018f, -0.012955f} - } -}; -const float CRendBin_HOA2_HRIR_coeff_im_16kHz[9][BINAURAL_CHANNELS][80]={ - { - { -0.279849f, -0.720835f, -0.885416f, -0.784738f, -0.545597f, -0.284166f, -0.039642f, 0.189992f, 0.392178f, 0.537862f, 0.608064f, 0.599378f, 0.517014f, 0.378190f, 0.211052f, 0.038799f, -0.127672f, -0.280366f, -0.411081f, -0.518033f, -0.602220f, -0.659249f, -0.686892f, -0.694308f, -0.690691f, -0.672923f, -0.636337f, -0.587078f, -0.532859f, -0.473554f, -0.410112f, -0.349570f, -0.294359f, -0.240124f, -0.187465f, -0.141656f, -0.100915f, -0.059776f, -0.020698f, 0.012198f, 0.044049f, 0.079925f, 0.114533f, 0.143760f, 0.173471f, 0.206190f, 0.234826f, 0.257923f, 0.283113f, 0.310262f, 0.331082f, 0.346996f, 0.366076f, 0.384865f, 0.395359f, 0.402963f, 0.415413f, 0.425799f, 0.427896f, 0.431174f, 0.440886f, 0.445771f, 0.442548f, 0.444490f, 0.452426f, 0.451179f, 0.443114f, 0.445296f, 0.451405f, 0.442876f, 0.431564f, 0.437517f, 0.441102f, 0.420868f, 0.408764f, 0.426165f, 0.404391f, 0.275313f, 0.105567f, 0.014714f}, - { -0.279849f, -0.720835f, -0.885416f, -0.784738f, -0.545597f, -0.284166f, -0.039642f, 0.189992f, 0.392178f, 0.537862f, 0.608064f, 0.599378f, 0.517014f, 0.378190f, 0.211052f, 0.038799f, -0.127672f, -0.280366f, -0.411081f, -0.518033f, -0.602220f, -0.659249f, -0.686892f, -0.694308f, -0.690691f, -0.672923f, -0.636337f, -0.587078f, -0.532859f, -0.473554f, -0.410112f, -0.349570f, -0.294359f, -0.240124f, -0.187465f, -0.141656f, -0.100915f, -0.059776f, -0.020698f, 0.012198f, 0.044049f, 0.079925f, 0.114533f, 0.143760f, 0.173471f, 0.206190f, 0.234826f, 0.257923f, 0.283113f, 0.310262f, 0.331082f, 0.346996f, 0.366076f, 0.384865f, 0.395359f, 0.402963f, 0.415413f, 0.425799f, 0.427896f, 0.431174f, 0.440886f, 0.445771f, 0.442548f, 0.444490f, 0.452426f, 0.451179f, 0.443114f, 0.445296f, 0.451405f, 0.442876f, 0.431564f, 0.437517f, 0.441102f, 0.420868f, 0.408764f, 0.426165f, 0.404391f, 0.275313f, 0.105567f, 0.014714f} - }, - { - { 0.137891f, 0.229594f, -0.067928f, -0.623005f, -1.090538f, -1.189519f, -0.884822f, -0.354524f, 0.180758f, 0.598608f, 0.883947f, 1.053700f, 1.111227f, 1.061907f, 0.928126f, 0.732907f, 0.490534f, 0.220795f, -0.047441f, -0.292902f, -0.508160f, -0.690313f, -0.839240f, -0.960125f, -1.054642f, -1.116743f, -1.146677f, -1.156988f, -1.156022f, -1.140346f, -1.110014f, -1.073762f, -1.034019f, -0.985244f, -0.929519f, -0.875052f, -0.820278f, -0.758166f, -0.691738f, -0.627222f, -0.560364f, -0.486773f, -0.413937f, -0.347468f, -0.280644f, -0.210486f, -0.145643f, -0.088457f, -0.030518f, 0.027797f, 0.077074f, 0.119974f, 0.167213f, 0.215231f, 0.254026f, 0.289039f, 0.328776f, 0.364400f, 0.387539f, 0.408919f, 0.435376f, 0.454122f, 0.460897f, 0.471406f, 0.487696f, 0.492222f, 0.486983f, 0.492364f, 0.502301f, 0.494577f, 0.481913f, 0.489869f, 0.498275f, 0.479752f, 0.470075f, 0.504969f, 0.517158f, 0.412306f, 0.223203f, 0.061484f}, - { -0.137891f, -0.229594f, 0.067928f, 0.623005f, 1.090538f, 1.189519f, 0.884822f, 0.354524f, -0.180758f, -0.598608f, -0.883947f, -1.053700f, -1.111227f, -1.061907f, -0.928126f, -0.732907f, -0.490534f, -0.220795f, 0.047441f, 0.292902f, 0.508160f, 0.690313f, 0.839240f, 0.960125f, 1.054642f, 1.116743f, 1.146677f, 1.156988f, 1.156022f, 1.140346f, 1.110014f, 1.073762f, 1.034019f, 0.985244f, 0.929519f, 0.875052f, 0.820278f, 0.758166f, 0.691738f, 0.627222f, 0.560364f, 0.486773f, 0.413937f, 0.347468f, 0.280644f, 0.210486f, 0.145643f, 0.088457f, 0.030518f, -0.027797f, -0.077074f, -0.119974f, -0.167213f, -0.215231f, -0.254026f, -0.289039f, -0.328776f, -0.364400f, -0.387539f, -0.408919f, -0.435376f, -0.454122f, -0.460897f, -0.471406f, -0.487696f, -0.492222f, -0.486983f, -0.492364f, -0.502301f, -0.494577f, -0.481913f, -0.489869f, -0.498275f, -0.479752f, -0.470075f, -0.504969f, -0.517158f, -0.412306f, -0.223203f, -0.061484f} - }, - { - { -0.037944f, -0.106904f, -0.132860f, -0.074197f, 0.039345f, 0.109112f, 0.075839f, -0.015806f, -0.081154f, -0.083561f, -0.038813f, 0.024921f, 0.079316f, 0.098387f, 0.081988f, 0.060932f, 0.056952f, 0.053685f, 0.024659f, -0.028315f, -0.083387f, -0.128710f, -0.164189f, -0.185222f, -0.184737f, -0.166916f, -0.145003f, -0.127294f, -0.112613f, -0.096040f, -0.073923f, -0.046696f, -0.019918f, 0.000121f, 0.011773f, 0.015947f, 0.011639f, -0.001080f, -0.016599f, -0.028201f, -0.034495f, -0.036865f, -0.034339f, -0.025728f, -0.012939f, 0.002163f, 0.020448f, 0.042341f, 0.066491f, 0.093562f, 0.126180f, 0.163808f, 0.202979f, 0.242843f, 0.284779f, 0.327198f, 0.366815f, 0.403787f, 0.439636f, 0.472316f, 0.499155f, 0.521398f, 0.540138f, 0.552065f, 0.554704f, 0.550353f, 0.539674f, 0.518421f, 0.485659f, 0.446647f, 0.402248f, 0.346247f, 0.279546f, 0.213387f, 0.148100f, 0.064032f, -0.046179f, -0.142400f, -0.158189f, -0.068950f}, - { -0.037944f, -0.106904f, -0.132860f, -0.074197f, 0.039345f, 0.109112f, 0.075839f, -0.015806f, -0.081154f, -0.083561f, -0.038813f, 0.024921f, 0.079316f, 0.098387f, 0.081988f, 0.060932f, 0.056952f, 0.053685f, 0.024659f, -0.028315f, -0.083387f, -0.128710f, -0.164189f, -0.185222f, -0.184737f, -0.166916f, -0.145003f, -0.127294f, -0.112613f, -0.096040f, -0.073923f, -0.046696f, -0.019918f, 0.000121f, 0.011773f, 0.015947f, 0.011639f, -0.001080f, -0.016599f, -0.028201f, -0.034495f, -0.036865f, -0.034339f, -0.025728f, -0.012939f, 0.002163f, 0.020448f, 0.042341f, 0.066491f, 0.093562f, 0.126180f, 0.163808f, 0.202979f, 0.242843f, 0.284779f, 0.327198f, 0.366815f, 0.403787f, 0.439636f, 0.472316f, 0.499155f, 0.521398f, 0.540138f, 0.552065f, 0.554704f, 0.550353f, 0.539674f, 0.518421f, 0.485659f, 0.446647f, 0.402248f, 0.346247f, 0.279546f, 0.213387f, 0.148100f, 0.064032f, -0.046179f, -0.142400f, -0.158189f, -0.068950f} - }, - { - { -0.001343f, -0.030465f, -0.090431f, -0.117729f, -0.072159f, -0.000959f, 0.017976f, -0.029349f, -0.083995f, -0.085435f, -0.026909f, 0.054025f, 0.117372f, 0.148897f, 0.159644f, 0.166262f, 0.171633f, 0.163163f, 0.127809f, 0.065274f, -0.013456f, -0.095573f, -0.171737f, -0.236275f, -0.288250f, -0.332759f, -0.376516f, -0.419675f, -0.454690f, -0.474981f, -0.481065f, -0.475362f, -0.455565f, -0.418282f, -0.365992f, -0.304811f, -0.237851f, -0.166048f, -0.093163f, -0.024547f, 0.037453f, 0.092832f, 0.140930f, 0.181479f, 0.216098f, 0.246070f, 0.271249f, 0.292345f, 0.310665f, 0.325008f, 0.332856f, 0.334536f, 0.332397f, 0.327422f, 0.320787f, 0.315984f, 0.314890f, 0.314985f, 0.314210f, 0.313937f, 0.314092f, 0.311588f, 0.306338f, 0.301707f, 0.297473f, 0.290554f, 0.282600f, 0.277168f, 0.271223f, 0.260355f, 0.248072f, 0.237680f, 0.222743f, 0.199693f, 0.176748f, 0.151965f, 0.102492f, 0.025265f, -0.032061f, -0.023375f}, - { -0.001343f, -0.030465f, -0.090431f, -0.117729f, -0.072159f, -0.000959f, 0.017976f, -0.029349f, -0.083995f, -0.085435f, -0.026909f, 0.054025f, 0.117372f, 0.148897f, 0.159644f, 0.166262f, 0.171633f, 0.163163f, 0.127809f, 0.065274f, -0.013456f, -0.095573f, -0.171737f, -0.236275f, -0.288250f, -0.332759f, -0.376516f, -0.419675f, -0.454690f, -0.474981f, -0.481065f, -0.475362f, -0.455565f, -0.418282f, -0.365992f, -0.304811f, -0.237851f, -0.166048f, -0.093163f, -0.024547f, 0.037453f, 0.092832f, 0.140930f, 0.181479f, 0.216098f, 0.246070f, 0.271249f, 0.292345f, 0.310665f, 0.325008f, 0.332856f, 0.334536f, 0.332397f, 0.327422f, 0.320787f, 0.315984f, 0.314890f, 0.314985f, 0.314210f, 0.313937f, 0.314092f, 0.311588f, 0.306338f, 0.301707f, 0.297473f, 0.290554f, 0.282600f, 0.277168f, 0.271223f, 0.260355f, 0.248072f, 0.237680f, 0.222743f, 0.199693f, 0.176748f, 0.151965f, 0.102492f, 0.025265f, -0.032061f, -0.023375f} - }, - { - { -0.003822f, -0.004182f, 0.003769f, 0.002231f, -0.018518f, -0.042371f, -0.050814f, -0.055060f, -0.082241f, -0.127129f, -0.141168f, -0.084513f, 0.025067f, 0.131195f, 0.197402f, 0.230196f, 0.250490f, 0.263052f, 0.258983f, 0.233443f, 0.189892f, 0.131909f, 0.060205f, -0.021879f, -0.106291f, -0.186505f, -0.262057f, -0.333838f, -0.398243f, -0.449958f, -0.487738f, -0.512937f, -0.524754f, -0.521358f, -0.503097f, -0.470311f, -0.421405f, -0.357963f, -0.288378f, -0.221718f, -0.161127f, -0.106483f, -0.058681f, -0.017466f, 0.020089f, 0.055500f, 0.087512f, 0.116263f, 0.143565f, 0.168412f, 0.187881f, 0.202191f, 0.213370f, 0.220775f, 0.223797f, 0.225934f, 0.230320f, 0.235230f, 0.239129f, 0.244505f, 0.252120f, 0.258553f, 0.263155f, 0.269212f, 0.275974f, 0.279247f, 0.280325f, 0.283134f, 0.284382f, 0.279208f, 0.271780f, 0.265915f, 0.254057f, 0.231999f, 0.209308f, 0.183649f, 0.128013f, 0.038161f, -0.030805f, -0.024799f}, - { 0.003822f, 0.004182f, -0.003769f, -0.002231f, 0.018518f, 0.042371f, 0.050814f, 0.055060f, 0.082241f, 0.127129f, 0.141168f, 0.084513f, -0.025067f, -0.131195f, -0.197402f, -0.230196f, -0.250490f, -0.263052f, -0.258983f, -0.233443f, -0.189892f, -0.131909f, -0.060205f, 0.021879f, 0.106291f, 0.186505f, 0.262057f, 0.333838f, 0.398243f, 0.449958f, 0.487738f, 0.512937f, 0.524754f, 0.521358f, 0.503097f, 0.470311f, 0.421405f, 0.357963f, 0.288378f, 0.221718f, 0.161127f, 0.106483f, 0.058681f, 0.017466f, -0.020089f, -0.055500f, -0.087512f, -0.116263f, -0.143565f, -0.168412f, -0.187881f, -0.202191f, -0.213370f, -0.220775f, -0.223797f, -0.225934f, -0.230320f, -0.235230f, -0.239129f, -0.244505f, -0.252120f, -0.258553f, -0.263155f, -0.269212f, -0.275974f, -0.279247f, -0.280325f, -0.283134f, -0.284382f, -0.279208f, -0.271780f, -0.265915f, -0.254057f, -0.231999f, -0.209308f, -0.183649f, -0.128013f, -0.038161f, 0.030805f, 0.024799f} - }, - { - { -0.007141f, -0.000269f, 0.020053f, 0.005151f, -0.021397f, 0.017134f, 0.096077f, 0.079602f, -0.080798f, -0.242492f, -0.239038f, -0.078682f, 0.094173f, 0.179901f, 0.193223f, 0.186734f, 0.180011f, 0.165677f, 0.136686f, 0.092362f, 0.037203f, -0.018468f, -0.063954f, -0.094649f, -0.110368f, -0.112031f, -0.103341f, -0.090810f, -0.078704f, -0.067141f, -0.056765f, -0.051692f, -0.055372f, -0.065676f, -0.076978f, -0.087145f, -0.100035f, -0.119731f, -0.144366f, -0.167862f, -0.185792f, -0.196760f, -0.200382f, -0.197667f, -0.191812f, -0.185459f, -0.178637f, -0.170957f, -0.162715f, -0.152400f, -0.137119f, -0.116662f, -0.092858f, -0.064845f, -0.030146f, 0.010135f, 0.052660f, 0.096829f, 0.142849f, 0.187559f, 0.227910f, 0.264896f, 0.298909f, 0.326420f, 0.345843f, 0.359746f, 0.367295f, 0.363369f, 0.348300f, 0.327585f, 0.299800f, 0.258398f, 0.207127f, 0.156648f, 0.103405f, 0.032624f, -0.049949f, -0.107648f, -0.105316f, -0.043186f}, - { 0.007141f, 0.000269f, -0.020053f, -0.005151f, 0.021397f, -0.017134f, -0.096077f, -0.079602f, 0.080798f, 0.242492f, 0.239038f, 0.078682f, -0.094173f, -0.179901f, -0.193223f, -0.186734f, -0.180011f, -0.165677f, -0.136686f, -0.092362f, -0.037203f, 0.018468f, 0.063954f, 0.094649f, 0.110368f, 0.112031f, 0.103341f, 0.090810f, 0.078704f, 0.067141f, 0.056765f, 0.051692f, 0.055372f, 0.065676f, 0.076978f, 0.087145f, 0.100035f, 0.119731f, 0.144366f, 0.167862f, 0.185792f, 0.196760f, 0.200382f, 0.197667f, 0.191812f, 0.185459f, 0.178637f, 0.170957f, 0.162715f, 0.152400f, 0.137119f, 0.116662f, 0.092858f, 0.064845f, 0.030146f, -0.010135f, -0.052660f, -0.096829f, -0.142849f, -0.187559f, -0.227910f, -0.264896f, -0.298909f, -0.326420f, -0.345843f, -0.359746f, -0.367295f, -0.363369f, -0.348300f, -0.327585f, -0.299800f, -0.258398f, -0.207127f, -0.156648f, -0.103405f, -0.032624f, 0.049949f, 0.107648f, 0.105316f, 0.043186f} - }, - { - { -0.001068f, -0.011669f, -0.026585f, -0.020015f, 0.010585f, 0.040078f, 0.066520f, 0.124261f, 0.221193f, 0.294911f, 0.266885f, 0.129051f, -0.049656f, -0.195409f, -0.283656f, -0.326169f, -0.335364f, -0.316666f, -0.279923f, -0.238383f, -0.197010f, -0.152299f, -0.103120f, -0.053556f, -0.006327f, 0.037345f, 0.071350f, 0.087916f, 0.089422f, 0.089013f, 0.097000f, 0.112917f, 0.131823f, 0.151104f, 0.169420f, 0.185327f, 0.198942f, 0.210964f, 0.219989f, 0.223967f, 0.222689f, 0.216294f, 0.204468f, 0.189464f, 0.175607f, 0.163713f, 0.150702f, 0.135728f, 0.121043f, 0.106637f, 0.090424f, 0.073312f, 0.057730f, 0.042745f, 0.026954f, 0.013259f, 0.004619f, -0.000739f, -0.004364f, -0.003750f, 0.001700f, 0.008264f, 0.015354f, 0.026579f, 0.041079f, 0.054236f, 0.067442f, 0.085032f, 0.103334f, 0.116515f, 0.128381f, 0.142875f, 0.152038f, 0.151164f, 0.149997f, 0.145519f, 0.107611f, 0.028941f, -0.034761f, -0.026006f}, - { -0.001068f, -0.011669f, -0.026585f, -0.020015f, 0.010585f, 0.040078f, 0.066520f, 0.124261f, 0.221193f, 0.294911f, 0.266885f, 0.129051f, -0.049656f, -0.195409f, -0.283656f, -0.326169f, -0.335364f, -0.316666f, -0.279923f, -0.238383f, -0.197010f, -0.152299f, -0.103120f, -0.053556f, -0.006327f, 0.037345f, 0.071350f, 0.087916f, 0.089422f, 0.089013f, 0.097000f, 0.112917f, 0.131823f, 0.151104f, 0.169420f, 0.185327f, 0.198942f, 0.210964f, 0.219989f, 0.223967f, 0.222689f, 0.216294f, 0.204468f, 0.189464f, 0.175607f, 0.163713f, 0.150702f, 0.135728f, 0.121043f, 0.106637f, 0.090424f, 0.073312f, 0.057730f, 0.042745f, 0.026954f, 0.013259f, 0.004619f, -0.000739f, -0.004364f, -0.003750f, 0.001700f, 0.008264f, 0.015354f, 0.026579f, 0.041079f, 0.054236f, 0.067442f, 0.085032f, 0.103334f, 0.116515f, 0.128381f, 0.142875f, 0.152038f, 0.151164f, 0.149997f, 0.145519f, 0.107611f, 0.028941f, -0.034761f, -0.026006f} - }, - { - { -0.037828f, -0.075096f, -0.025986f, 0.086083f, 0.170568f, 0.136964f, -0.015998f, -0.179579f, -0.227305f, -0.136711f, -0.003232f, 0.070010f, 0.069408f, 0.046996f, 0.037246f, 0.035376f, 0.036858f, 0.049531f, 0.065210f, 0.059663f, 0.031146f, 0.008574f, 0.010733f, 0.023060f, 0.025014f, 0.016687f, 0.006465f, -0.007530f, -0.030444f, -0.058769f, -0.085159f, -0.105870f, -0.119253f, -0.126108f, -0.132952f, -0.145953f, -0.161950f, -0.172937f, -0.176110f, -0.172287f, -0.160154f, -0.140096f, -0.117814f, -0.097309f, -0.076591f, -0.054926f, -0.036201f, -0.021493f, -0.007233f, 0.006947f, 0.017810f, 0.026450f, 0.036880f, 0.047880f, 0.055961f, 0.063286f, 0.072990f, 0.081618f, 0.085458f, 0.087597f, 0.090387f, 0.089833f, 0.084714f, 0.080517f, 0.078723f, 0.074845f, 0.070311f, 0.071284f, 0.075074f, 0.075104f, 0.076588f, 0.086990f, 0.097901f, 0.100583f, 0.107487f, 0.127031f, 0.132157f, 0.094602f, 0.037294f, 0.005325f}, - { -0.037828f, -0.075096f, -0.025986f, 0.086083f, 0.170568f, 0.136964f, -0.015998f, -0.179579f, -0.227305f, -0.136711f, -0.003232f, 0.070010f, 0.069408f, 0.046996f, 0.037246f, 0.035376f, 0.036858f, 0.049531f, 0.065210f, 0.059663f, 0.031146f, 0.008574f, 0.010733f, 0.023060f, 0.025014f, 0.016687f, 0.006465f, -0.007530f, -0.030444f, -0.058769f, -0.085159f, -0.105870f, -0.119253f, -0.126108f, -0.132952f, -0.145953f, -0.161950f, -0.172937f, -0.176110f, -0.172287f, -0.160154f, -0.140096f, -0.117814f, -0.097309f, -0.076591f, -0.054926f, -0.036201f, -0.021493f, -0.007233f, 0.006947f, 0.017810f, 0.026450f, 0.036880f, 0.047880f, 0.055961f, 0.063286f, 0.072990f, 0.081618f, 0.085458f, 0.087597f, 0.090387f, 0.089833f, 0.084714f, 0.080517f, 0.078723f, 0.074845f, 0.070311f, 0.071284f, 0.075074f, 0.075104f, 0.076588f, 0.086990f, 0.097901f, 0.100583f, 0.107487f, 0.127031f, 0.132157f, 0.094602f, 0.037294f, 0.005325f} - }, - { - { 0.027301f, 0.021738f, -0.081975f, -0.191273f, -0.201656f, -0.093313f, 0.098293f, 0.327814f, 0.523024f, 0.591610f, 0.499519f, 0.308744f, 0.101488f, -0.099663f, -0.304655f, -0.489528f, -0.606885f, -0.646492f, -0.643705f, -0.630992f, -0.609667f, -0.567561f, -0.501376f, -0.418604f, -0.330719f, -0.246456f, -0.165722f, -0.081663f, 0.008736f, 0.100691f, 0.189194f, 0.273485f, 0.352379f, 0.422027f, 0.480102f, 0.526801f, 0.561345f, 0.582237f, 0.590324f, 0.587683f, 0.575450f, 0.555880f, 0.533158f, 0.508979f, 0.481080f, 0.448562f, 0.414355f, 0.380878f, 0.348188f, 0.317304f, 0.289889f, 0.264214f, 0.236745f, 0.207390f, 0.178284f, 0.149119f, 0.118860f, 0.089518f, 0.063222f, 0.038738f, 0.015103f, -0.005639f, -0.022904f, -0.039298f, -0.055077f, -0.067305f, -0.076311f, -0.085345f, -0.093266f, -0.096501f, -0.097512f, -0.100870f, -0.103292f, -0.100064f, -0.097365f, -0.102461f, -0.105454f, -0.089136f, -0.054435f, -0.017187f}, - { 0.027301f, 0.021738f, -0.081975f, -0.191273f, -0.201656f, -0.093313f, 0.098293f, 0.327814f, 0.523024f, 0.591610f, 0.499519f, 0.308744f, 0.101488f, -0.099663f, -0.304655f, -0.489528f, -0.606885f, -0.646492f, -0.643705f, -0.630992f, -0.609667f, -0.567561f, -0.501376f, -0.418604f, -0.330719f, -0.246456f, -0.165722f, -0.081663f, 0.008736f, 0.100691f, 0.189194f, 0.273485f, 0.352379f, 0.422027f, 0.480102f, 0.526801f, 0.561345f, 0.582237f, 0.590324f, 0.587683f, 0.575450f, 0.555880f, 0.533158f, 0.508979f, 0.481080f, 0.448562f, 0.414355f, 0.380878f, 0.348188f, 0.317304f, 0.289889f, 0.264214f, 0.236745f, 0.207390f, 0.178284f, 0.149119f, 0.118860f, 0.089518f, 0.063222f, 0.038738f, 0.015103f, -0.005639f, -0.022904f, -0.039298f, -0.055077f, -0.067305f, -0.076311f, -0.085345f, -0.093266f, -0.096501f, -0.097512f, -0.100870f, -0.103292f, -0.100064f, -0.097365f, -0.102461f, -0.105454f, -0.089136f, -0.054435f, -0.017187f} - } -}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /********************** CRendBin_HOA3_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_latency_s = 0.000020834f; -#else const Word32 CRendBin_HOA3_HRIR_latency_s_fx = 44741;/*Q-31*/ -#endif /* Sample Rate = 48000 */ const int16_t CRendBin_HOA3_HRIR_max_num_iterations_48kHz = 1; @@ -1319,279 +178,10 @@ const uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[16][BINAURAL_CHANNELS]={{ const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNELS][1]={{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}},{{240},{240}}}; const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz_fx[16]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][240]={ - { - {0.975460f, 0.823508f, 0.578722f, 0.311394f, 0.071393f, -0.117298f, -0.265803f, -0.406443f, -0.536876f, -0.603591f, -0.568995f, -0.446021f, -0.232011f, 0.098533f, 0.446049f, 0.539124f, 0.219489f, -0.255318f, -0.399037f, -0.041354f, 0.472264f, 0.693368f, 0.533266f, 0.219305f, -0.059008f, -0.291241f, -0.505715f, -0.670083f, -0.755827f, -0.790827f, -0.808813f, -0.807132f, -0.777516f, -0.733727f, -0.690346f, -0.645074f, -0.594162f, -0.543258f, -0.496359f, -0.450603f, -0.404959f, -0.361817f, -0.320310f, -0.277796f, -0.235759f, -0.196817f, -0.159540f, -0.122007f, -0.085990f, -0.053099f, -0.021484f, 0.010278f, 0.040672f, 0.068775f, 0.095789f, 0.121856f, 0.145524f, 0.166807f, 0.187076f, 0.206251f, 0.223418f, 0.239269f, 0.254992f, 0.270072f, 0.283633f, 0.296367f, 0.309129f, 0.321380f, 0.332609f, 0.343518f, 0.354653f, 0.365577f, 0.376080f, 0.386687f, 0.397603f, 0.408487f, 0.419268f, 0.430118f, 0.440990f, 0.451887f, 0.462914f, 0.473622f, 0.483318f, 0.492236f, 0.501131f, 0.509707f, 0.516930f, 0.522835f, 0.528471f, 0.534052f, 0.538627f, 0.541575f, 0.543261f, 0.544286f, 0.544970f, 0.545324f, - 0.544992f, 0.543702f, 0.542083f, 0.541321f, 0.541767f, 0.542678f, 0.543474f, 0.544468f, 0.546285f, 0.549302f, 0.553570f, 0.558668f, 0.563836f, 0.568775f, 0.574014f, 0.580118f, 0.586957f, 0.594005f, 0.600840f, 0.607125f, 0.612700f, 0.617868f, 0.623088f, 0.628356f, 0.633282f, 0.637656f, 0.641523f, 0.644919f, 0.647931f, 0.650762f, 0.653419f, 0.655595f, 0.657072f, 0.657932f, 0.658320f, 0.658353f, 0.658263f, 0.658277f, 0.658369f, 0.658425f, 0.658492f, 0.658661f, 0.658936f, 0.659454f, 0.660549f, 0.662412f, 0.664935f, 0.667968f, 0.671455f, 0.675277f, 0.679269f, 0.683383f, 0.687622f, 0.691852f, 0.695884f, 0.699596f, 0.702892f, 0.705658f, 0.707869f, 0.709572f, 0.710785f, 0.711543f, 0.711953f, 0.712094f, 0.711995f, 0.711765f, 0.711575f, 0.711499f, 0.711595f, 0.712021f, 0.712800f, 0.713666f, 0.714410f, 0.715098f, 0.715743f, 0.716167f, 0.716376f, 0.716567f, 0.716703f, 0.716617f, 0.716501f, 0.716656f, 0.716977f, 0.717361f, 0.718171f, 0.719629f, 0.721375f, 0.723265f, 0.725713f, 0.728693f, 0.731584f, 0.734403f, 0.737690f, 0.741092f, 0.743862f, 0.746530f, - 0.749856f, 0.752896f, 0.754767f, 0.756924f, 0.760408f, 0.763073f, 0.763626f, 0.765163f, 0.769439f, 0.771950f, 0.769853f, 0.769580f, 0.776657f, 0.782626f, 0.774831f, 0.756861f, 0.745683f, 0.748813f, 0.757334f, 0.761317f, 0.758260f, 0.746087f, 0.724051f, 0.704063f, 0.704633f, 0.725907f, 0.744126f, 0.739878f, 0.720948f, 0.707668f, 0.705590f, 0.705432f, 0.704944f, 0.716791f, 0.751654f, 0.801379f, 0.844163f, 0.864649f, 0.865574f, 0.859719f, 0.854548f, 0.849005f, 0.842929f, 0.840816f, 0.842745f, 0.839787f, 0.826402f, 0.812303f}, - {0.975460f, 0.823508f, 0.578722f, 0.311394f, 0.071393f, -0.117298f, -0.265803f, -0.406443f, -0.536876f, -0.603591f, -0.568995f, -0.446021f, -0.232011f, 0.098533f, 0.446049f, 0.539124f, 0.219489f, -0.255318f, -0.399037f, -0.041354f, 0.472264f, 0.693368f, 0.533266f, 0.219305f, -0.059008f, -0.291241f, -0.505715f, -0.670083f, -0.755827f, -0.790827f, -0.808813f, -0.807132f, -0.777516f, -0.733727f, -0.690346f, -0.645074f, -0.594162f, -0.543258f, -0.496359f, -0.450603f, -0.404959f, -0.361817f, -0.320310f, -0.277796f, -0.235759f, -0.196817f, -0.159540f, -0.122007f, -0.085990f, -0.053099f, -0.021484f, 0.010278f, 0.040672f, 0.068775f, 0.095789f, 0.121856f, 0.145524f, 0.166807f, 0.187076f, 0.206251f, 0.223418f, 0.239269f, 0.254992f, 0.270072f, 0.283633f, 0.296367f, 0.309129f, 0.321380f, 0.332609f, 0.343518f, 0.354653f, 0.365577f, 0.376080f, 0.386687f, 0.397603f, 0.408487f, 0.419268f, 0.430118f, 0.440990f, 0.451887f, 0.462914f, 0.473622f, 0.483318f, 0.492236f, 0.501131f, 0.509707f, 0.516930f, 0.522835f, 0.528471f, 0.534052f, 0.538627f, 0.541575f, 0.543261f, 0.544286f, 0.544970f, 0.545324f, - 0.544992f, 0.543702f, 0.542083f, 0.541321f, 0.541767f, 0.542678f, 0.543474f, 0.544468f, 0.546285f, 0.549302f, 0.553570f, 0.558668f, 0.563836f, 0.568775f, 0.574014f, 0.580118f, 0.586957f, 0.594005f, 0.600840f, 0.607125f, 0.612700f, 0.617868f, 0.623088f, 0.628356f, 0.633282f, 0.637656f, 0.641523f, 0.644919f, 0.647931f, 0.650762f, 0.653419f, 0.655595f, 0.657072f, 0.657932f, 0.658320f, 0.658353f, 0.658263f, 0.658277f, 0.658369f, 0.658425f, 0.658492f, 0.658661f, 0.658936f, 0.659454f, 0.660549f, 0.662412f, 0.664935f, 0.667968f, 0.671455f, 0.675277f, 0.679269f, 0.683383f, 0.687622f, 0.691852f, 0.695884f, 0.699596f, 0.702892f, 0.705658f, 0.707869f, 0.709572f, 0.710785f, 0.711543f, 0.711953f, 0.712094f, 0.711995f, 0.711765f, 0.711575f, 0.711499f, 0.711595f, 0.712021f, 0.712800f, 0.713666f, 0.714410f, 0.715098f, 0.715743f, 0.716167f, 0.716376f, 0.716567f, 0.716703f, 0.716617f, 0.716501f, 0.716656f, 0.716977f, 0.717361f, 0.718171f, 0.719629f, 0.721375f, 0.723265f, 0.725713f, 0.728693f, 0.731584f, 0.734403f, 0.737690f, 0.741092f, 0.743862f, 0.746530f, - 0.749856f, 0.752896f, 0.754767f, 0.756924f, 0.760408f, 0.763073f, 0.763626f, 0.765163f, 0.769439f, 0.771950f, 0.769853f, 0.769580f, 0.776657f, 0.782626f, 0.774831f, 0.756861f, 0.745683f, 0.748813f, 0.757334f, 0.761317f, 0.758260f, 0.746087f, 0.724051f, 0.704063f, 0.704633f, 0.725907f, 0.744126f, 0.739878f, 0.720948f, 0.707668f, 0.705590f, 0.705432f, 0.704944f, 0.716791f, 0.751654f, 0.801379f, 0.844163f, 0.864649f, 0.865574f, 0.859719f, 0.854548f, 0.849005f, 0.842929f, 0.840816f, 0.842745f, 0.839787f, 0.826402f, 0.812303f} - }, - { - {0.073227f, 0.301823f, 0.659487f, 0.955673f, 1.013690f, 0.793634f, 0.374105f, -0.142456f, -0.636566f, -0.963913f, -1.063402f, -1.003613f, -0.793969f, -0.284345f, 0.500040f, 1.037338f, 0.731315f, -0.256929f, -0.976234f, -0.710231f, 0.228481f, 0.963086f, 1.064126f, 0.788617f, 0.498005f, 0.250379f, -0.019938f, -0.265502f, -0.411395f, -0.490847f, -0.571594f, -0.649046f, -0.690175f, -0.706288f, -0.723736f, -0.737713f, -0.735526f, -0.724667f, -0.712804f, -0.692713f, -0.661167f, -0.626102f, -0.589545f, -0.546090f, -0.498002f, -0.452447f, -0.407806f, -0.359001f, -0.309737f, -0.266056f, -0.225762f, -0.184774f, -0.145070f, -0.108495f, -0.071916f, -0.033988f, 0.002132f, 0.035682f, 0.069246f, 0.102139f, 0.131153f, 0.156988f, 0.182356f, 0.205965f, 0.225206f, 0.241562f, 0.257404f, 0.271324f, 0.281570f, 0.289838f, 0.297808f, 0.304325f, 0.308777f, 0.312991f, 0.318081f, 0.323338f, 0.328814f, 0.335493f, 0.343315f, 0.351924f, 0.361990f, 0.373445f, 0.384675f, 0.395327f, 0.406987f, 0.419758f, 0.431579f, 0.441848f, 0.452193f, 0.463217f, 0.473985f, 0.484732f, 0.496782f, 0.510255f, 0.524670f, 0.540714f, - 0.558946f, 0.578263f, 0.597653f, 0.617532f, 0.637778f, 0.656691f, 0.673126f, 0.687434f, 0.699645f, 0.708958f, 0.715168f, 0.718470f, 0.718323f, 0.714568f, 0.708854f, 0.703133f, 0.697784f, 0.692574f, 0.687835f, 0.683584f, 0.679336f, 0.675668f, 0.674108f, 0.674971f, 0.677066f, 0.679457f, 0.681721f, 0.683072f, 0.683153f, 0.682996f, 0.683558f, 0.684336f, 0.684660f, 0.684936f, 0.685504f, 0.685877f, 0.685935f, 0.686278f, 0.686908f, 0.687209f, 0.687279f, 0.687704f, 0.688320f, 0.688672f, 0.689087f, 0.689985f, 0.691034f, 0.692103f, 0.693870f, 0.696717f, 0.700287f, 0.704592f, 0.710078f, 0.716487f, 0.723147f, 0.730171f, 0.737961f, 0.746101f, 0.754088f, 0.762266f, 0.770876f, 0.779330f, 0.787325f, 0.795322f, 0.803321f, 0.810685f, 0.817438f, 0.824131f, 0.830559f, 0.836142f, 0.841071f, 0.845643f, 0.849388f, 0.852128f, 0.854615f, 0.857157f, 0.859203f, 0.860848f, 0.862840f, 0.864890f, 0.866029f, 0.866351f, 0.866455f, 0.866032f, 0.864930f, 0.864120f, 0.863977f, 0.863628f, 0.863131f, 0.863615f, 0.864728f, 0.865122f, 0.865257f, 0.866254f, 0.867273f, 0.867579f, - 0.868533f, 0.870222f, 0.870634f, 0.870784f, 0.873682f, 0.876733f, 0.875499f, 0.874870f, 0.881460f, 0.887147f, 0.882040f, 0.879821f, 0.897958f, 0.915002f, 0.891682f, 0.839628f, 0.817204f, 0.843673f, 0.874820f, 0.884019f, 0.901906f, 0.940936f, 0.947666f, 0.883159f, 0.797756f, 0.768151f, 0.798253f, 0.832623f, 0.835284f, 0.812421f, 0.787095f, 0.782104f, 0.791333f, 0.748682f, 0.584396f, 0.345257f, 0.192332f, 0.226244f, 0.368019f, 0.468300f, 0.484212f, 0.482396f, 0.505439f, 0.513973f, 0.457796f, 0.345461f, 0.230189f, 0.161014f}, - {-0.073227f, -0.301823f, -0.659487f, -0.955673f, -1.013690f, -0.793634f, -0.374105f, 0.142456f, 0.636566f, 0.963913f, 1.063402f, 1.003613f, 0.793969f, 0.284345f, -0.500040f, -1.037338f, -0.731315f, 0.256929f, 0.976234f, 0.710231f, -0.228481f, -0.963086f, -1.064126f, -0.788617f, -0.498005f, -0.250379f, 0.019938f, 0.265502f, 0.411395f, 0.490847f, 0.571594f, 0.649046f, 0.690175f, 0.706288f, 0.723736f, 0.737713f, 0.735526f, 0.724667f, 0.712804f, 0.692713f, 0.661167f, 0.626102f, 0.589545f, 0.546090f, 0.498002f, 0.452447f, 0.407806f, 0.359001f, 0.309737f, 0.266056f, 0.225762f, 0.184774f, 0.145070f, 0.108495f, 0.071916f, 0.033988f, -0.002132f, -0.035682f, -0.069246f, -0.102139f, -0.131153f, -0.156988f, -0.182356f, -0.205965f, -0.225206f, -0.241562f, -0.257404f, -0.271324f, -0.281570f, -0.289838f, -0.297808f, -0.304325f, -0.308777f, -0.312991f, -0.318081f, -0.323338f, -0.328814f, -0.335493f, -0.343315f, -0.351924f, -0.361990f, -0.373445f, -0.384675f, -0.395327f, -0.406987f, -0.419758f, -0.431579f, -0.441848f, -0.452193f, -0.463217f, -0.473985f, -0.484732f, -0.496782f, -0.510255f, -0.524670f, -0.540714f, - -0.558946f, -0.578263f, -0.597653f, -0.617532f, -0.637778f, -0.656691f, -0.673126f, -0.687434f, -0.699645f, -0.708958f, -0.715168f, -0.718470f, -0.718323f, -0.714568f, -0.708854f, -0.703133f, -0.697784f, -0.692574f, -0.687835f, -0.683584f, -0.679336f, -0.675668f, -0.674108f, -0.674971f, -0.677066f, -0.679457f, -0.681721f, -0.683072f, -0.683153f, -0.682996f, -0.683558f, -0.684336f, -0.684660f, -0.684936f, -0.685504f, -0.685877f, -0.685935f, -0.686278f, -0.686908f, -0.687209f, -0.687279f, -0.687704f, -0.688320f, -0.688672f, -0.689087f, -0.689985f, -0.691034f, -0.692103f, -0.693870f, -0.696717f, -0.700287f, -0.704592f, -0.710078f, -0.716487f, -0.723147f, -0.730171f, -0.737961f, -0.746101f, -0.754088f, -0.762266f, -0.770876f, -0.779330f, -0.787325f, -0.795322f, -0.803321f, -0.810685f, -0.817438f, -0.824131f, -0.830559f, -0.836142f, -0.841071f, -0.845643f, -0.849388f, -0.852128f, -0.854615f, -0.857157f, -0.859203f, -0.860848f, -0.862840f, -0.864890f, -0.866029f, -0.866351f, -0.866455f, -0.866032f, -0.864930f, -0.864120f, -0.863977f, -0.863628f, -0.863131f, -0.863615f, -0.864728f, -0.865122f, -0.865257f, -0.866254f, -0.867273f, -0.867579f, - -0.868533f, -0.870222f, -0.870634f, -0.870784f, -0.873682f, -0.876733f, -0.875499f, -0.874870f, -0.881460f, -0.887147f, -0.882040f, -0.879821f, -0.897958f, -0.915002f, -0.891682f, -0.839628f, -0.817204f, -0.843673f, -0.874820f, -0.884019f, -0.901906f, -0.940936f, -0.947666f, -0.883159f, -0.797756f, -0.768151f, -0.798253f, -0.832623f, -0.835284f, -0.812421f, -0.787095f, -0.782104f, -0.791333f, -0.748682f, -0.584396f, -0.345257f, -0.192332f, -0.226244f, -0.368019f, -0.468300f, -0.484212f, -0.482396f, -0.505439f, -0.513973f, -0.457796f, -0.345461f, -0.230189f, -0.161014f} - }, - { - {0.113201f, 0.111255f, 0.062496f, -0.036435f, -0.115479f, -0.108810f, -0.030648f, 0.049302f, 0.081380f, 0.064091f, 0.017171f, -0.040018f, -0.081158f, -0.072117f, -0.003900f, 0.074532f, 0.085464f, 0.008934f, -0.074247f, -0.059957f, 0.058118f, 0.176907f, 0.199559f, 0.129266f, 0.036145f, -0.031274f, -0.072728f, -0.101353f, -0.120897f, -0.133619f, -0.144152f, -0.151623f, -0.151014f, -0.142713f, -0.132576f, -0.124993f, -0.122480f, -0.128384f, -0.143590f, -0.163192f, -0.181024f, -0.195180f, -0.206462f, -0.214744f, -0.219693f, -0.222384f, -0.223825f, -0.223517f, -0.220501f, -0.214073f, -0.202961f, -0.185599f, -0.161639f, -0.131885f, -0.096760f, -0.056217f, -0.010994f, 0.037427f, 0.088132f, 0.140996f, 0.195587f, 0.250830f, 0.305827f, 0.360100f, 0.412716f, 0.461882f, 0.505735f, 0.543017f, 0.572658f, 0.593353f, 0.604059f, 0.604476f, 0.594671f, 0.574892f, 0.546245f, 0.510837f, 0.470526f, 0.426227f, 0.379201f, 0.332145f, 0.287708f, 0.246390f, 0.207286f, 0.170835f, 0.139340f, 0.114215f, 0.093949f, 0.075976f, 0.060036f, 0.048360f, 0.042554f, 0.041557f, 0.043175f, 0.046486f, 0.051934f, 0.059907f, - 0.070097f, 0.081683f, 0.093339f, 0.103485f, 0.111132f, 0.116280f, 0.119264f, 0.120059f, 0.118158f, 0.112647f, 0.102730f, 0.088852f, 0.072929f, 0.056776f, 0.040720f, 0.024308f, 0.007601f, -0.008889f, -0.024661f, -0.038942f, -0.050666f, -0.059218f, -0.064521f, -0.066366f, -0.064544f, -0.059537f, -0.052086f, -0.042363f, -0.030480f, -0.017295f, -0.003822f, 0.009499f, 0.022278f, 0.033878f, 0.044118f, 0.053185f, 0.060622f, 0.065726f, 0.068967f, 0.071661f, 0.074575f, 0.078214f, 0.083614f, 0.091159f, 0.099538f, 0.107386f, 0.114815f, 0.122154f, 0.128784f, 0.134356f, 0.139373f, 0.143742f, 0.146631f, 0.148142f, 0.149165f, 0.149684f, 0.149308f, 0.148792f, 0.148973f, 0.149269f, 0.149092f, 0.149111f, 0.149527f, 0.149268f, 0.148148f, 0.147256f, 0.146477f, 0.144536f, 0.141617f, 0.138828f, 0.135709f, 0.131550f, 0.127734f, 0.125499f, 0.123615f, 0.121214f, 0.119758f, 0.119680f, 0.119076f, 0.117474f, 0.116107f, 0.113750f, 0.107932f, 0.099801f, 0.091667f, 0.081824f, 0.068369f, 0.054219f, 0.041640f, 0.027646f, 0.011112f, -0.003667f, -0.015819f, -0.029675f, -0.044315f, -0.054790f, - -0.064326f, -0.078448f, -0.090599f, -0.094677f, -0.102373f, -0.121236f, -0.132668f, -0.126597f, -0.131229f, -0.161295f, -0.174763f, -0.147871f, -0.146506f, -0.225759f, -0.299779f, -0.239299f, -0.079199f, 0.013784f, -0.018892f, -0.072010f, -0.080447f, -0.112933f, -0.204539f, -0.250865f, -0.164556f, -0.022383f, 0.043514f, 0.019856f, -0.010446f, -0.004334f, 0.005958f, -0.023233f, -0.099252f, -0.180595f, -0.191231f, -0.093061f, 0.041294f, 0.085841f, 0.010948f, -0.083414f, -0.105347f, -0.076840f, -0.067493f, -0.084603f, -0.084004f, -0.051805f, -0.017571f, -0.002347f}, - {0.113201f, 0.111255f, 0.062496f, -0.036435f, -0.115479f, -0.108810f, -0.030648f, 0.049302f, 0.081380f, 0.064091f, 0.017171f, -0.040018f, -0.081158f, -0.072117f, -0.003900f, 0.074532f, 0.085464f, 0.008934f, -0.074247f, -0.059957f, 0.058118f, 0.176907f, 0.199559f, 0.129266f, 0.036145f, -0.031274f, -0.072728f, -0.101353f, -0.120897f, -0.133619f, -0.144152f, -0.151623f, -0.151014f, -0.142713f, -0.132576f, -0.124993f, -0.122480f, -0.128384f, -0.143590f, -0.163192f, -0.181024f, -0.195180f, -0.206462f, -0.214744f, -0.219693f, -0.222384f, -0.223825f, -0.223517f, -0.220501f, -0.214073f, -0.202961f, -0.185599f, -0.161639f, -0.131885f, -0.096760f, -0.056217f, -0.010994f, 0.037427f, 0.088132f, 0.140996f, 0.195587f, 0.250830f, 0.305827f, 0.360100f, 0.412716f, 0.461882f, 0.505735f, 0.543017f, 0.572658f, 0.593353f, 0.604059f, 0.604476f, 0.594671f, 0.574892f, 0.546245f, 0.510837f, 0.470526f, 0.426227f, 0.379201f, 0.332145f, 0.287708f, 0.246390f, 0.207286f, 0.170835f, 0.139340f, 0.114215f, 0.093949f, 0.075976f, 0.060036f, 0.048360f, 0.042554f, 0.041557f, 0.043175f, 0.046486f, 0.051934f, 0.059907f, - 0.070097f, 0.081683f, 0.093339f, 0.103485f, 0.111132f, 0.116280f, 0.119264f, 0.120059f, 0.118158f, 0.112647f, 0.102730f, 0.088852f, 0.072929f, 0.056776f, 0.040720f, 0.024308f, 0.007601f, -0.008889f, -0.024661f, -0.038942f, -0.050666f, -0.059218f, -0.064521f, -0.066366f, -0.064544f, -0.059537f, -0.052086f, -0.042363f, -0.030480f, -0.017295f, -0.003822f, 0.009499f, 0.022278f, 0.033878f, 0.044118f, 0.053185f, 0.060622f, 0.065726f, 0.068967f, 0.071661f, 0.074575f, 0.078214f, 0.083614f, 0.091159f, 0.099538f, 0.107386f, 0.114815f, 0.122154f, 0.128784f, 0.134356f, 0.139373f, 0.143742f, 0.146631f, 0.148142f, 0.149165f, 0.149684f, 0.149308f, 0.148792f, 0.148973f, 0.149269f, 0.149092f, 0.149111f, 0.149527f, 0.149268f, 0.148148f, 0.147256f, 0.146477f, 0.144536f, 0.141617f, 0.138828f, 0.135709f, 0.131550f, 0.127734f, 0.125499f, 0.123615f, 0.121214f, 0.119758f, 0.119680f, 0.119076f, 0.117474f, 0.116107f, 0.113750f, 0.107932f, 0.099801f, 0.091667f, 0.081824f, 0.068369f, 0.054219f, 0.041640f, 0.027646f, 0.011112f, -0.003667f, -0.015819f, -0.029675f, -0.044315f, -0.054790f, - -0.064326f, -0.078448f, -0.090599f, -0.094677f, -0.102373f, -0.121236f, -0.132668f, -0.126597f, -0.131229f, -0.161295f, -0.174763f, -0.147871f, -0.146506f, -0.225759f, -0.299779f, -0.239299f, -0.079199f, 0.013784f, -0.018892f, -0.072010f, -0.080447f, -0.112933f, -0.204539f, -0.250865f, -0.164556f, -0.022383f, 0.043514f, 0.019856f, -0.010446f, -0.004334f, 0.005958f, -0.023233f, -0.099252f, -0.180595f, -0.191231f, -0.093061f, 0.041294f, 0.085841f, 0.010948f, -0.083414f, -0.105347f, -0.076840f, -0.067493f, -0.084603f, -0.084004f, -0.051805f, -0.017571f, -0.002347f} - }, - { - {0.054055f, 0.080144f, 0.095193f, 0.063102f, -0.005644f, -0.052793f, -0.033146f, 0.026919f, 0.054914f, 0.016920f, -0.052950f, -0.110724f, -0.143661f, -0.134100f, -0.045681f, 0.095928f, 0.160690f, 0.047402f, -0.151768f, -0.216602f, -0.050846f, 0.209112f, 0.366520f, 0.368777f, 0.294144f, 0.206763f, 0.103814f, -0.023703f, -0.154443f, -0.267781f, -0.365935f, -0.454372f, -0.526514f, -0.574683f, -0.599022f, -0.601726f, -0.583803f, -0.549027f, -0.503573f, -0.451857f, -0.396930f, -0.342314f, -0.289887f, -0.238831f, -0.188998f, -0.142181f, -0.098840f, -0.057157f, -0.016442f, 0.021589f, 0.055280f, 0.083963f, 0.106624f, 0.122561f, 0.133456f, 0.142639f, 0.152376f, 0.163270f, 0.175500f, 0.188983f, 0.202812f, 0.215870f, 0.227814f, 0.238821f, 0.248889f, 0.258049f, 0.266875f, 0.276085f, 0.285672f, 0.294836f, 0.302892f, 0.309831f, 0.315582f, 0.319103f, 0.319043f, 0.315165f, 0.308042f, 0.297413f, 0.282312f, 0.263067f, 0.241504f, 0.218613f, 0.193711f, 0.166772f, 0.139868f, 0.115038f, 0.092093f, 0.069831f, 0.048202f, 0.027768f, 0.007904f, -0.012801f, -0.034642f, -0.056589f, -0.077960f, -0.099200f, - -0.120729f, -0.141741f, -0.160599f, -0.176129f, -0.188274f, -0.197469f, -0.203521f, -0.205315f, -0.201874f, -0.193589f, -0.181986f, -0.168217f, -0.152170f, -0.133210f, -0.111470f, -0.088281f, -0.065547f, -0.044626f, -0.025388f, -0.006381f, 0.013678f, 0.034496f, 0.054455f, 0.072021f, 0.086678f, 0.098972f, 0.110224f, 0.121865f, 0.134429f, 0.147294f, 0.159646f, 0.171334f, 0.182686f, 0.194160f, 0.206441f, 0.220224f, 0.235532f, 0.251719f, 0.268159f, 0.284460f, 0.300193f, 0.315099f, 0.329380f, 0.343193f, 0.356104f, 0.367475f, 0.376942f, 0.384199f, 0.388905f, 0.391168f, 0.391540f, 0.390411f, 0.388001f, 0.384777f, 0.381131f, 0.376983f, 0.372381f, 0.367930f, 0.364049f, 0.360653f, 0.358088f, 0.357239f, 0.358255f, 0.360393f, 0.363365f, 0.367396f, 0.371992f, 0.376223f, 0.380072f, 0.384061f, 0.388180f, 0.392520f, 0.397869f, 0.404370f, 0.411044f, 0.417566f, 0.424627f, 0.431988f, 0.438611f, 0.444798f, 0.451419f, 0.457489f, 0.461517f, 0.464027f, 0.465670f, 0.465002f, 0.461321f, 0.456568f, 0.451550f, 0.444528f, 0.435774f, 0.428002f, 0.420951f, 0.412298f, 0.403657f, 0.397481f, - 0.390665f, 0.381040f, 0.374155f, 0.371854f, 0.364940f, 0.351783f, 0.346842f, 0.351883f, 0.344736f, 0.322593f, 0.319327f, 0.340524f, 0.329255f, 0.258906f, 0.211144f, 0.273202f, 0.394219f, 0.448480f, 0.417577f, 0.391001f, 0.396218f, 0.365475f, 0.291216f, 0.274724f, 0.365856f, 0.472436f, 0.497448f, 0.469302f, 0.464924f, 0.487653f, 0.496252f, 0.484901f, 0.459066f, 0.391143f, 0.277817f, 0.195678f, 0.219900f, 0.314264f, 0.374360f, 0.364906f, 0.345945f, 0.365513f, 0.393896f, 0.386513f, 0.362639f, 0.381476f, 0.456585f, 0.528305f}, - {0.054055f, 0.080144f, 0.095193f, 0.063102f, -0.005644f, -0.052793f, -0.033146f, 0.026919f, 0.054914f, 0.016920f, -0.052950f, -0.110724f, -0.143661f, -0.134100f, -0.045681f, 0.095928f, 0.160690f, 0.047402f, -0.151768f, -0.216602f, -0.050846f, 0.209112f, 0.366520f, 0.368777f, 0.294144f, 0.206763f, 0.103814f, -0.023703f, -0.154443f, -0.267781f, -0.365935f, -0.454372f, -0.526514f, -0.574683f, -0.599022f, -0.601726f, -0.583803f, -0.549027f, -0.503573f, -0.451857f, -0.396930f, -0.342314f, -0.289887f, -0.238831f, -0.188998f, -0.142181f, -0.098840f, -0.057157f, -0.016442f, 0.021589f, 0.055280f, 0.083963f, 0.106624f, 0.122561f, 0.133456f, 0.142639f, 0.152376f, 0.163270f, 0.175500f, 0.188983f, 0.202812f, 0.215870f, 0.227814f, 0.238821f, 0.248889f, 0.258049f, 0.266875f, 0.276085f, 0.285672f, 0.294836f, 0.302892f, 0.309831f, 0.315582f, 0.319103f, 0.319043f, 0.315165f, 0.308042f, 0.297413f, 0.282312f, 0.263067f, 0.241504f, 0.218613f, 0.193711f, 0.166772f, 0.139868f, 0.115038f, 0.092093f, 0.069831f, 0.048202f, 0.027768f, 0.007904f, -0.012801f, -0.034642f, -0.056589f, -0.077960f, -0.099200f, - -0.120729f, -0.141741f, -0.160599f, -0.176129f, -0.188274f, -0.197469f, -0.203521f, -0.205315f, -0.201874f, -0.193589f, -0.181986f, -0.168217f, -0.152170f, -0.133210f, -0.111470f, -0.088281f, -0.065547f, -0.044626f, -0.025388f, -0.006381f, 0.013678f, 0.034496f, 0.054455f, 0.072021f, 0.086678f, 0.098972f, 0.110224f, 0.121865f, 0.134429f, 0.147294f, 0.159646f, 0.171334f, 0.182686f, 0.194160f, 0.206441f, 0.220224f, 0.235532f, 0.251719f, 0.268159f, 0.284460f, 0.300193f, 0.315099f, 0.329380f, 0.343193f, 0.356104f, 0.367475f, 0.376942f, 0.384199f, 0.388905f, 0.391168f, 0.391540f, 0.390411f, 0.388001f, 0.384777f, 0.381131f, 0.376983f, 0.372381f, 0.367930f, 0.364049f, 0.360653f, 0.358088f, 0.357239f, 0.358255f, 0.360393f, 0.363365f, 0.367396f, 0.371992f, 0.376223f, 0.380072f, 0.384061f, 0.388180f, 0.392520f, 0.397869f, 0.404370f, 0.411044f, 0.417566f, 0.424627f, 0.431988f, 0.438611f, 0.444798f, 0.451419f, 0.457489f, 0.461517f, 0.464027f, 0.465670f, 0.465002f, 0.461321f, 0.456568f, 0.451550f, 0.444528f, 0.435774f, 0.428002f, 0.420951f, 0.412298f, 0.403657f, 0.397481f, - 0.390665f, 0.381040f, 0.374155f, 0.371854f, 0.364940f, 0.351783f, 0.346842f, 0.351883f, 0.344736f, 0.322593f, 0.319327f, 0.340524f, 0.329255f, 0.258906f, 0.211144f, 0.273202f, 0.394219f, 0.448480f, 0.417577f, 0.391001f, 0.396218f, 0.365475f, 0.291216f, 0.274724f, 0.365856f, 0.472436f, 0.497448f, 0.469302f, 0.464924f, 0.487653f, 0.496252f, 0.484901f, 0.459066f, 0.391143f, 0.277817f, 0.195678f, 0.219900f, 0.314264f, 0.374360f, 0.364906f, 0.345945f, 0.365513f, 0.393896f, 0.386513f, 0.362639f, 0.381476f, 0.456585f, 0.528305f} - }, - { - {0.017978f, 0.007378f, 0.003418f, 0.018456f, 0.041119f, 0.049699f, 0.045284f, 0.053666f, 0.084664f, 0.105401f, 0.067063f, -0.046619f, -0.190974f, -0.265169f, -0.173793f, 0.058765f, 0.244978f, 0.189686f, -0.078447f, -0.301201f, -0.263931f, -0.016751f, 0.224527f, 0.329934f, 0.329708f, 0.288913f, 0.216901f, 0.107803f, -0.012593f, -0.114794f, -0.198221f, -0.272534f, -0.334167f, -0.377176f, -0.406071f, -0.424824f, -0.427385f, -0.407924f, -0.370647f, -0.324637f, -0.276593f, -0.230996f, -0.190824f, -0.155968f, -0.124589f, -0.095978f, -0.069693f, -0.043868f, -0.017228f, 0.008963f, 0.032944f, 0.054527f, 0.073798f, 0.090002f, 0.103058f, 0.114400f, 0.125425f, 0.136553f, 0.148113f, 0.160641f, 0.174135f, 0.188230f, 0.203013f, 0.218608f, 0.234347f, 0.249425f, 0.264041f, 0.278849f, 0.293615f, 0.307424f, 0.320009f, 0.331840f, 0.342789f, 0.351655f, 0.357399f, 0.360118f, 0.360077f, 0.356398f, 0.347903f, 0.335144f, 0.320169f, 0.303908f, 0.285237f, 0.263508f, 0.240490f, 0.218250f, 0.196115f, 0.171654f, 0.144348f, 0.116453f, 0.090117f, 0.065280f, 0.040995f, 0.017579f, -0.003437f, -0.020932f, - -0.035118f, -0.047019f, -0.057328f, -0.065776f, -0.071630f, -0.074772f, -0.075997f, -0.076290f, -0.076370f, -0.076995f, -0.078917f, -0.082069f, -0.085393f, -0.087934f, -0.089781f, -0.091750f, -0.094623f, -0.098708f, -0.103476f, -0.107500f, -0.109441f, -0.109318f, -0.108409f, -0.108026f, -0.108758f, -0.110515f, -0.112612f, -0.114027f, -0.114146f, -0.113106f, -0.111149f, -0.108063f, -0.103456f, -0.097000f, -0.088276f, -0.077056f, -0.063885f, -0.049838f, -0.035764f, -0.022273f, -0.010091f, 0.000305f, 0.008995f, 0.015941f, 0.020499f, 0.022137f, 0.021019f, 0.017496f, 0.011856f, 0.004888f, -0.002191f, -0.008658f, -0.014359f, -0.019010f, -0.022276f, -0.024240f, -0.024935f, -0.023872f, -0.020695f, -0.015538f, -0.008189f, 0.002002f, 0.014912f, 0.029556f, 0.045382f, 0.062300f, 0.079546f, 0.096100f, 0.111896f, 0.127148f, 0.141252f, 0.153795f, 0.165494f, 0.176815f, 0.187180f, 0.196581f, 0.206032f, 0.215728f, 0.224988f, 0.234090f, 0.243604f, 0.252464f, 0.259543f, 0.265839f, 0.272231f, 0.277374f, 0.280682f, 0.284095f, 0.288228f, 0.291051f, 0.292390f, 0.294354f, 0.296334f, 0.296199f, 0.295740f, 0.297143f, - 0.297187f, 0.294165f, 0.293865f, 0.297697f, 0.296410f, 0.289007f, 0.289718f, 0.298972f, 0.294490f, 0.274911f, 0.273741f, 0.293559f, 0.276485f, 0.199476f, 0.147802f, 0.208854f, 0.331440f, 0.389914f, 0.361504f, 0.329091f, 0.323542f, 0.290902f, 0.227246f, 0.217065f, 0.296479f, 0.385838f, 0.408311f, 0.387215f, 0.378506f, 0.385103f, 0.382955f, 0.362880f, 0.310127f, 0.213082f, 0.126049f, 0.145716f, 0.279676f, 0.409157f, 0.433671f, 0.389293f, 0.369545f, 0.390925f, 0.404683f, 0.394197f, 0.383439f, 0.373704f, 0.344838f, 0.310855f}, - {-0.017978f, -0.007378f, -0.003418f, -0.018456f, -0.041119f, -0.049699f, -0.045284f, -0.053666f, -0.084664f, -0.105401f, -0.067063f, 0.046619f, 0.190974f, 0.265169f, 0.173793f, -0.058765f, -0.244978f, -0.189686f, 0.078447f, 0.301201f, 0.263931f, 0.016751f, -0.224527f, -0.329934f, -0.329708f, -0.288913f, -0.216901f, -0.107803f, 0.012593f, 0.114794f, 0.198221f, 0.272534f, 0.334167f, 0.377176f, 0.406071f, 0.424824f, 0.427385f, 0.407924f, 0.370647f, 0.324637f, 0.276593f, 0.230996f, 0.190824f, 0.155968f, 0.124589f, 0.095978f, 0.069693f, 0.043868f, 0.017228f, -0.008963f, -0.032944f, -0.054527f, -0.073798f, -0.090002f, -0.103058f, -0.114400f, -0.125425f, -0.136553f, -0.148113f, -0.160641f, -0.174135f, -0.188230f, -0.203013f, -0.218608f, -0.234347f, -0.249425f, -0.264041f, -0.278849f, -0.293615f, -0.307424f, -0.320009f, -0.331840f, -0.342789f, -0.351655f, -0.357399f, -0.360118f, -0.360077f, -0.356398f, -0.347903f, -0.335144f, -0.320169f, -0.303908f, -0.285237f, -0.263508f, -0.240490f, -0.218250f, -0.196115f, -0.171654f, -0.144348f, -0.116453f, -0.090117f, -0.065280f, -0.040995f, -0.017579f, 0.003437f, 0.020932f, - 0.035118f, 0.047019f, 0.057328f, 0.065776f, 0.071630f, 0.074772f, 0.075997f, 0.076290f, 0.076370f, 0.076995f, 0.078917f, 0.082069f, 0.085393f, 0.087934f, 0.089781f, 0.091750f, 0.094623f, 0.098708f, 0.103476f, 0.107500f, 0.109441f, 0.109318f, 0.108409f, 0.108026f, 0.108758f, 0.110515f, 0.112612f, 0.114027f, 0.114146f, 0.113106f, 0.111149f, 0.108063f, 0.103456f, 0.097000f, 0.088276f, 0.077056f, 0.063885f, 0.049838f, 0.035764f, 0.022273f, 0.010091f, -0.000305f, -0.008995f, -0.015941f, -0.020499f, -0.022137f, -0.021019f, -0.017496f, -0.011856f, -0.004888f, 0.002191f, 0.008658f, 0.014359f, 0.019010f, 0.022276f, 0.024240f, 0.024935f, 0.023872f, 0.020695f, 0.015538f, 0.008189f, -0.002002f, -0.014912f, -0.029556f, -0.045382f, -0.062300f, -0.079546f, -0.096100f, -0.111896f, -0.127148f, -0.141252f, -0.153795f, -0.165494f, -0.176815f, -0.187180f, -0.196581f, -0.206032f, -0.215728f, -0.224988f, -0.234090f, -0.243604f, -0.252464f, -0.259543f, -0.265839f, -0.272231f, -0.277374f, -0.280682f, -0.284095f, -0.288228f, -0.291051f, -0.292390f, -0.294354f, -0.296334f, -0.296199f, -0.295740f, -0.297143f, - -0.297187f, -0.294165f, -0.293865f, -0.297697f, -0.296410f, -0.289007f, -0.289718f, -0.298972f, -0.294490f, -0.274911f, -0.273741f, -0.293559f, -0.276485f, -0.199476f, -0.147802f, -0.208854f, -0.331440f, -0.389914f, -0.361504f, -0.329091f, -0.323542f, -0.290902f, -0.227246f, -0.217065f, -0.296479f, -0.385838f, -0.408311f, -0.387215f, -0.378506f, -0.385103f, -0.382955f, -0.362880f, -0.310127f, -0.213082f, -0.126049f, -0.145716f, -0.279676f, -0.409157f, -0.433671f, -0.389293f, -0.369545f, -0.390925f, -0.404683f, -0.394197f, -0.383439f, -0.373704f, -0.344838f, -0.310855f} - }, - { - {0.027544f, -0.017341f, -0.023513f, 0.026515f, 0.039947f, -0.034516f, -0.096596f, -0.020772f, 0.151935f, 0.242778f, 0.149801f, -0.044033f, -0.181114f, -0.177468f, -0.055862f, 0.090745f, 0.145910f, 0.053909f, -0.102523f, -0.163455f, -0.067881f, 0.078061f, 0.138424f, 0.098143f, 0.036791f, 0.006996f, 0.000119f, 0.002369f, 0.021565f, 0.059784f, 0.101198f, 0.132385f, 0.151843f, 0.159909f, 0.156211f, 0.145023f, 0.130647f, 0.110287f, 0.079835f, 0.042474f, 0.005390f, -0.027255f, -0.053608f, -0.071675f, -0.081807f, -0.087931f, -0.093657f, -0.099808f, -0.106220f, -0.112687f, -0.117932f, -0.120493f, -0.120521f, -0.118539f, -0.113168f, -0.102044f, -0.084258f, -0.060368f, -0.030901f, 0.003748f, 0.042511f, 0.083811f, 0.126393f, 0.169523f, 0.212498f, 0.254135f, 0.292796f, 0.326898f, 0.355155f, 0.376131f, 0.388053f, 0.389497f, 0.379942f, 0.359534f, 0.328997f, 0.289934f, 0.244331f, 0.193634f, 0.139228f, 0.083598f, 0.029408f, -0.022692f, -0.073695f, -0.123339f, -0.169305f, -0.209948f, -0.246184f, -0.279689f, -0.310546f, -0.337815f, -0.361405f, -0.381914f, -0.399020f, -0.411385f, -0.418144f, -0.419390f, - -0.415008f, -0.404128f, -0.386279f, -0.362312f, -0.333530f, -0.300394f, -0.262664f, -0.220761f, -0.176830f, -0.134417f, -0.096541f, -0.063537f, -0.033190f, -0.003613f, 0.024357f, 0.048059f, 0.065620f, 0.077181f, 0.084404f, 0.089492f, 0.093981f, 0.097804f, 0.099996f, 0.100408f, 0.100059f, 0.100044f, 0.101037f, 0.103570f, 0.107641f, 0.112334f, 0.116752f, 0.120810f, 0.124401f, 0.126672f, 0.126908f, 0.125168f, 0.121503f, 0.115724f, 0.108269f, 0.100065f, 0.091446f, 0.082435f, 0.073719f, 0.065954f, 0.058708f, 0.051452f, 0.044644f, 0.038636f, 0.032761f, 0.026588f, 0.020600f, 0.014885f, 0.008899f, 0.002909f, -0.002242f, -0.006808f, -0.011545f, -0.016005f, -0.019451f, -0.022427f, -0.025359f, -0.027161f, -0.027123f, -0.026184f, -0.024787f, -0.022001f, -0.017911f, -0.013971f, -0.010312f, -0.005846f, -0.000945f, 0.003364f, 0.007981f, 0.014043f, 0.020341f, 0.025721f, 0.031421f, 0.038054f, 0.043780f, 0.047857f, 0.051586f, 0.054231f, 0.053369f, 0.049784f, 0.045976f, 0.040764f, 0.032016f, 0.022151f, 0.013836f, 0.004597f, -0.007321f, -0.018275f, -0.026778f, -0.036758f, -0.048211f, -0.056341f, - -0.062971f, -0.073642f, -0.083668f, -0.086428f, -0.090734f, -0.105031f, -0.114994f, -0.109424f, -0.110454f, -0.134392f, -0.148541f, -0.127696f, -0.121882f, -0.181720f, -0.241824f, -0.189799f, -0.046739f, 0.042939f, 0.016342f, -0.039119f, -0.052732f, -0.073996f, -0.147151f, -0.199696f, -0.145744f, -0.023298f, 0.056543f, 0.050437f, 0.006574f, -0.021832f, -0.037988f, -0.088616f, -0.203471f, -0.330990f, -0.353783f, -0.218264f, -0.032140f, 0.036633f, -0.044084f, -0.147160f, -0.163258f, -0.121115f, -0.105238f, -0.129326f, -0.144788f, -0.128572f, -0.103746f, -0.091528f}, - {-0.027544f, 0.017341f, 0.023513f, -0.026515f, -0.039947f, 0.034516f, 0.096596f, 0.020772f, -0.151935f, -0.242778f, -0.149801f, 0.044033f, 0.181114f, 0.177468f, 0.055862f, -0.090745f, -0.145910f, -0.053909f, 0.102523f, 0.163455f, 0.067881f, -0.078061f, -0.138424f, -0.098143f, -0.036791f, -0.006996f, -0.000119f, -0.002369f, -0.021565f, -0.059784f, -0.101198f, -0.132385f, -0.151843f, -0.159909f, -0.156211f, -0.145023f, -0.130647f, -0.110287f, -0.079835f, -0.042474f, -0.005390f, 0.027255f, 0.053608f, 0.071675f, 0.081807f, 0.087931f, 0.093657f, 0.099808f, 0.106220f, 0.112687f, 0.117932f, 0.120493f, 0.120521f, 0.118539f, 0.113168f, 0.102044f, 0.084258f, 0.060368f, 0.030901f, -0.003748f, -0.042511f, -0.083811f, -0.126393f, -0.169523f, -0.212498f, -0.254135f, -0.292796f, -0.326898f, -0.355155f, -0.376131f, -0.388053f, -0.389497f, -0.379942f, -0.359534f, -0.328997f, -0.289934f, -0.244331f, -0.193634f, -0.139228f, -0.083598f, -0.029408f, 0.022692f, 0.073695f, 0.123339f, 0.169305f, 0.209948f, 0.246184f, 0.279689f, 0.310546f, 0.337815f, 0.361405f, 0.381914f, 0.399020f, 0.411385f, 0.418144f, 0.419390f, - 0.415008f, 0.404128f, 0.386279f, 0.362312f, 0.333530f, 0.300394f, 0.262664f, 0.220761f, 0.176830f, 0.134417f, 0.096541f, 0.063537f, 0.033190f, 0.003613f, -0.024357f, -0.048059f, -0.065620f, -0.077181f, -0.084404f, -0.089492f, -0.093981f, -0.097804f, -0.099996f, -0.100408f, -0.100059f, -0.100044f, -0.101037f, -0.103570f, -0.107641f, -0.112334f, -0.116752f, -0.120810f, -0.124401f, -0.126672f, -0.126908f, -0.125168f, -0.121503f, -0.115724f, -0.108269f, -0.100065f, -0.091446f, -0.082435f, -0.073719f, -0.065954f, -0.058708f, -0.051452f, -0.044644f, -0.038636f, -0.032761f, -0.026588f, -0.020600f, -0.014885f, -0.008899f, -0.002909f, 0.002242f, 0.006808f, 0.011545f, 0.016005f, 0.019451f, 0.022427f, 0.025359f, 0.027161f, 0.027123f, 0.026184f, 0.024787f, 0.022001f, 0.017911f, 0.013971f, 0.010312f, 0.005846f, 0.000945f, -0.003364f, -0.007981f, -0.014043f, -0.020341f, -0.025721f, -0.031421f, -0.038054f, -0.043780f, -0.047857f, -0.051586f, -0.054231f, -0.053369f, -0.049784f, -0.045976f, -0.040764f, -0.032016f, -0.022151f, -0.013836f, -0.004597f, 0.007321f, 0.018275f, 0.026778f, 0.036758f, 0.048211f, 0.056341f, - 0.062971f, 0.073642f, 0.083668f, 0.086428f, 0.090734f, 0.105031f, 0.114994f, 0.109424f, 0.110454f, 0.134392f, 0.148541f, 0.127696f, 0.121882f, 0.181720f, 0.241824f, 0.189799f, 0.046739f, -0.042939f, -0.016342f, 0.039119f, 0.052732f, 0.073996f, 0.147151f, 0.199696f, 0.145744f, 0.023298f, -0.056543f, -0.050437f, -0.006574f, 0.021832f, 0.037988f, 0.088616f, 0.203471f, 0.330990f, 0.353783f, 0.218264f, 0.032140f, -0.036633f, 0.044084f, 0.147160f, 0.163258f, 0.121115f, 0.105238f, 0.129326f, 0.144788f, 0.128572f, 0.103746f, 0.091528f} - }, - { - {-0.011223f, 0.003687f, -0.000414f, -0.031357f, -0.057663f, -0.067766f, -0.096325f, -0.163726f, -0.224966f, -0.208955f, -0.081157f, 0.143478f, 0.387596f, 0.486520f, 0.284836f, -0.140976f, -0.441017f, -0.327075f, 0.074175f, 0.349898f, 0.280575f, 0.038443f, -0.108886f, -0.113839f, -0.086300f, -0.070325f, -0.024649f, 0.049306f, 0.092524f, 0.083781f, 0.061156f, 0.054148f, 0.055920f, 0.058263f, 0.066644f, 0.080523f, 0.090464f, 0.094364f, 0.097422f, 0.100540f, 0.101437f, 0.100572f, 0.097579f, 0.089393f, 0.076799f, 0.064921f, 0.054954f, 0.043366f, 0.029470f, 0.015923f, 0.002488f, -0.013502f, -0.031896f, -0.050733f, -0.070213f, -0.091008f, -0.111378f, -0.129544f, -0.145955f, -0.160863f, -0.172868f, -0.181246f, -0.186438f, -0.187665f, -0.183178f, -0.172712f, -0.156892f, -0.135107f, -0.106648f, -0.072711f, -0.034981f, 0.006334f, 0.051208f, 0.098168f, 0.145386f, 0.191890f, 0.236833f, 0.278964f, 0.317170f, 0.350442f, 0.377669f, 0.398477f, 0.413442f, 0.422594f, 0.424961f, 0.420296f, 0.409675f, 0.393798f, 0.372388f, 0.345493f, 0.313465f, 0.275611f, 0.231027f, 0.180958f, 0.128479f, 0.075813f, - 0.023515f, -0.027844f, -0.076427f, -0.119258f, -0.152932f, -0.175194f, -0.186637f, -0.189934f, -0.186882f, -0.177217f, -0.160537f, -0.138059f, -0.112219f, -0.085735f, -0.061204f, -0.040465f, -0.024039f, -0.011686f, -0.003299f, 0.001080f, 0.001404f, -0.002708f, -0.011712f, -0.025056f, -0.041001f, -0.057813f, -0.074544f, -0.090766f, -0.106414f, -0.121885f, -0.137514f, -0.153038f, -0.168182f, -0.183440f, -0.199575f, -0.216690f, -0.234361f, -0.252307f, -0.270421f, -0.288580f, -0.306905f, -0.325883f, -0.345856f, -0.366553f, -0.387191f, -0.406764f, -0.424298f, -0.439192f, -0.451304f, -0.460581f, -0.466844f, -0.470145f, -0.470993f, -0.469950f, -0.467318f, -0.463413f, -0.458793f, -0.453934f, -0.448965f, -0.443919f, -0.438978f, -0.434313f, -0.429938f, -0.425843f, -0.422067f, -0.418527f, -0.414975f, -0.411168f, -0.406936f, -0.402186f, -0.397105f, -0.392257f, -0.388096f, -0.384459f, -0.380881f, -0.377213f, -0.373462f, -0.369262f, -0.364132f, -0.358049f, -0.351167f, -0.343304f, -0.334329f, -0.324576f, -0.314218f, -0.302915f, -0.290682f, -0.278196f, -0.265680f, -0.252744f, -0.239783f, -0.227924f, -0.217230f, -0.206891f, -0.197140f, -0.188670f, - -0.180713f, -0.172459f, -0.165010f, -0.158739f, -0.151375f, -0.142611f, -0.136204f, -0.132665f, -0.126667f, -0.118002f, -0.114967f, -0.118021f, -0.114254f, -0.101693f, -0.101321f, -0.124560f, -0.148010f, -0.147590f, -0.137378f, -0.139760f, -0.138747f, -0.110154f, -0.081767f, -0.105233f, -0.171870f, -0.215991f, -0.207009f, -0.181245f, -0.174445f, -0.180343f, -0.186444f, -0.191819f, -0.178097f, -0.127153f, -0.082373f, -0.120177f, -0.235388f, -0.328199f, -0.337442f, -0.311065f, -0.306275f, -0.305983f, -0.290025f, -0.296380f, -0.327277f, -0.281376f, -0.097597f, 0.092327f}, - {-0.011223f, 0.003687f, -0.000414f, -0.031357f, -0.057663f, -0.067766f, -0.096325f, -0.163726f, -0.224966f, -0.208955f, -0.081157f, 0.143478f, 0.387596f, 0.486520f, 0.284836f, -0.140976f, -0.441017f, -0.327075f, 0.074175f, 0.349898f, 0.280575f, 0.038443f, -0.108886f, -0.113839f, -0.086300f, -0.070325f, -0.024649f, 0.049306f, 0.092524f, 0.083781f, 0.061156f, 0.054148f, 0.055920f, 0.058263f, 0.066644f, 0.080523f, 0.090464f, 0.094364f, 0.097422f, 0.100540f, 0.101437f, 0.100572f, 0.097579f, 0.089393f, 0.076799f, 0.064921f, 0.054954f, 0.043366f, 0.029470f, 0.015923f, 0.002488f, -0.013502f, -0.031896f, -0.050733f, -0.070213f, -0.091008f, -0.111378f, -0.129544f, -0.145955f, -0.160863f, -0.172868f, -0.181246f, -0.186438f, -0.187665f, -0.183178f, -0.172712f, -0.156892f, -0.135107f, -0.106648f, -0.072711f, -0.034981f, 0.006334f, 0.051208f, 0.098168f, 0.145386f, 0.191890f, 0.236833f, 0.278964f, 0.317170f, 0.350442f, 0.377669f, 0.398477f, 0.413442f, 0.422594f, 0.424961f, 0.420296f, 0.409675f, 0.393798f, 0.372388f, 0.345493f, 0.313465f, 0.275611f, 0.231027f, 0.180958f, 0.128479f, 0.075813f, - 0.023515f, -0.027844f, -0.076427f, -0.119258f, -0.152932f, -0.175194f, -0.186637f, -0.189934f, -0.186882f, -0.177217f, -0.160537f, -0.138059f, -0.112219f, -0.085735f, -0.061204f, -0.040465f, -0.024039f, -0.011686f, -0.003299f, 0.001080f, 0.001404f, -0.002708f, -0.011712f, -0.025056f, -0.041001f, -0.057813f, -0.074544f, -0.090766f, -0.106414f, -0.121885f, -0.137514f, -0.153038f, -0.168182f, -0.183440f, -0.199575f, -0.216690f, -0.234361f, -0.252307f, -0.270421f, -0.288580f, -0.306905f, -0.325883f, -0.345856f, -0.366553f, -0.387191f, -0.406764f, -0.424298f, -0.439192f, -0.451304f, -0.460581f, -0.466844f, -0.470145f, -0.470993f, -0.469950f, -0.467318f, -0.463413f, -0.458793f, -0.453934f, -0.448965f, -0.443919f, -0.438978f, -0.434313f, -0.429938f, -0.425843f, -0.422067f, -0.418527f, -0.414975f, -0.411168f, -0.406936f, -0.402186f, -0.397105f, -0.392257f, -0.388096f, -0.384459f, -0.380881f, -0.377213f, -0.373462f, -0.369262f, -0.364132f, -0.358049f, -0.351167f, -0.343304f, -0.334329f, -0.324576f, -0.314218f, -0.302915f, -0.290682f, -0.278196f, -0.265680f, -0.252744f, -0.239783f, -0.227924f, -0.217230f, -0.206891f, -0.197140f, -0.188670f, - -0.180713f, -0.172459f, -0.165010f, -0.158739f, -0.151375f, -0.142611f, -0.136204f, -0.132665f, -0.126667f, -0.118002f, -0.114967f, -0.118021f, -0.114254f, -0.101693f, -0.101321f, -0.124560f, -0.148010f, -0.147590f, -0.137378f, -0.139760f, -0.138747f, -0.110154f, -0.081767f, -0.105233f, -0.171870f, -0.215991f, -0.207009f, -0.181245f, -0.174445f, -0.180343f, -0.186444f, -0.191819f, -0.178097f, -0.127153f, -0.082373f, -0.120177f, -0.235388f, -0.328199f, -0.337442f, -0.311065f, -0.306275f, -0.305983f, -0.290025f, -0.296380f, -0.327277f, -0.281376f, -0.097597f, 0.092327f} - }, - { - {0.054589f, -0.001637f, -0.079543f, -0.135743f, -0.131804f, -0.043458f, 0.104068f, 0.217533f, 0.204070f, 0.074239f, -0.060507f, -0.108806f, -0.081689f, -0.039379f, -0.004993f, 0.029597f, 0.049473f, 0.026070f, -0.027204f, -0.057970f, -0.040922f, -0.005408f, 0.012701f, 0.016342f, 0.029669f, 0.058829f, 0.089715f, 0.111195f, 0.121951f, 0.120092f, 0.101652f, 0.069740f, 0.035273f, 0.006521f, -0.017134f, -0.040773f, -0.067733f, -0.098260f, -0.130202f, -0.159125f, -0.179923f, -0.190245f, -0.191892f, -0.188409f, -0.182228f, -0.174485f, -0.166098f, -0.157672f, -0.148951f, -0.139390f, -0.129028f, -0.118145f, -0.106568f, -0.094035f, -0.080835f, -0.067363f, -0.053428f, -0.038739f, -0.023875f, -0.010097f, 0.001710f, 0.011389f, 0.018876f, 0.023826f, 0.026232f, 0.027134f, 0.028095f, 0.029852f, 0.032050f, 0.034619f, 0.038653f, 0.045252f, 0.054228f, 0.064975f, 0.078084f, 0.094927f, 0.115972f, 0.140559f, 0.168055f, 0.198238f, 0.230625f, 0.264146f, 0.297428f, 0.329230f, 0.359002f, 0.386873f, 0.412350f, 0.433497f, 0.448864f, 0.459882f, 0.469349f, 0.477249f, 0.480035f, 0.474609f, 0.461344f, 0.442380f, - 0.418375f, 0.388058f, 0.350422f, 0.306536f, 0.259028f, 0.209804f, 0.158634f, 0.104592f, 0.048670f, -0.006109f, -0.057348f, -0.105165f, -0.151294f, -0.197048f, -0.242030f, -0.284064f, -0.320505f, -0.350300f, -0.374580f, -0.394966f, -0.411917f, -0.425031f, -0.434070f, -0.439211f, -0.441124f, -0.441102f, -0.440376f, -0.439189f, -0.437206f, -0.434556f, -0.431640f, -0.428284f, -0.423789f, -0.417348f, -0.408064f, -0.395487f, -0.380583f, -0.365150f, -0.349938f, -0.334311f, -0.317544f, -0.299138f, -0.278349f, -0.255141f, -0.231262f, -0.208784f, -0.188088f, -0.168556f, -0.150109f, -0.132628f, -0.115237f, -0.097788f, -0.081784f, -0.068578f, -0.057918f, -0.049072f, -0.041700f, -0.034982f, -0.027605f, -0.019168f, -0.010254f, -0.001254f, 0.007586f, 0.015692f, 0.023079f, 0.030753f, 0.039150f, 0.047677f, 0.056423f, 0.066196f, 0.076374f, 0.085165f, 0.092238f, 0.098541f, 0.103858f, 0.107357f, 0.109771f, 0.112187f, 0.113992f, 0.114589f, 0.115084f, 0.115986f, 0.116053f, 0.115391f, 0.116090f, 0.118375f, 0.120418f, 0.122613f, 0.127014f, 0.132736f, 0.137519f, 0.142486f, 0.149375f, 0.155994f, 0.160690f, 0.166504f, - 0.174416f, 0.179864f, 0.182512f, 0.188824f, 0.198165f, 0.201158f, 0.199276f, 0.205855f, 0.218574f, 0.217938f, 0.206203f, 0.213074f, 0.240900f, 0.244438f, 0.200317f, 0.158123f, 0.174531f, 0.227413f, 0.251412f, 0.237058f, 0.230785f, 0.244489f, 0.233509f, 0.178591f, 0.130638f, 0.141894f, 0.191497f, 0.216461f, 0.195657f, 0.165578f, 0.156193f, 0.145395f, 0.095257f, 0.017498f, -0.024939f, 0.010288f, 0.089729f, 0.139320f, 0.127786f, 0.093936f, 0.089116f, 0.114421f, 0.129992f, 0.115341f, 0.099739f, 0.126419f, 0.196125f, 0.257597f}, - {0.054589f, -0.001637f, -0.079543f, -0.135743f, -0.131804f, -0.043458f, 0.104068f, 0.217533f, 0.204070f, 0.074239f, -0.060507f, -0.108806f, -0.081689f, -0.039379f, -0.004993f, 0.029597f, 0.049473f, 0.026070f, -0.027204f, -0.057970f, -0.040922f, -0.005408f, 0.012701f, 0.016342f, 0.029669f, 0.058829f, 0.089715f, 0.111195f, 0.121951f, 0.120092f, 0.101652f, 0.069740f, 0.035273f, 0.006521f, -0.017134f, -0.040773f, -0.067733f, -0.098260f, -0.130202f, -0.159125f, -0.179923f, -0.190245f, -0.191892f, -0.188409f, -0.182228f, -0.174485f, -0.166098f, -0.157672f, -0.148951f, -0.139390f, -0.129028f, -0.118145f, -0.106568f, -0.094035f, -0.080835f, -0.067363f, -0.053428f, -0.038739f, -0.023875f, -0.010097f, 0.001710f, 0.011389f, 0.018876f, 0.023826f, 0.026232f, 0.027134f, 0.028095f, 0.029852f, 0.032050f, 0.034619f, 0.038653f, 0.045252f, 0.054228f, 0.064975f, 0.078084f, 0.094927f, 0.115972f, 0.140559f, 0.168055f, 0.198238f, 0.230625f, 0.264146f, 0.297428f, 0.329230f, 0.359002f, 0.386873f, 0.412350f, 0.433497f, 0.448864f, 0.459882f, 0.469349f, 0.477249f, 0.480035f, 0.474609f, 0.461344f, 0.442380f, - 0.418375f, 0.388058f, 0.350422f, 0.306536f, 0.259028f, 0.209804f, 0.158634f, 0.104592f, 0.048670f, -0.006109f, -0.057348f, -0.105165f, -0.151294f, -0.197048f, -0.242030f, -0.284064f, -0.320505f, -0.350300f, -0.374580f, -0.394966f, -0.411917f, -0.425031f, -0.434070f, -0.439211f, -0.441124f, -0.441102f, -0.440376f, -0.439189f, -0.437206f, -0.434556f, -0.431640f, -0.428284f, -0.423789f, -0.417348f, -0.408064f, -0.395487f, -0.380583f, -0.365150f, -0.349938f, -0.334311f, -0.317544f, -0.299138f, -0.278349f, -0.255141f, -0.231262f, -0.208784f, -0.188088f, -0.168556f, -0.150109f, -0.132628f, -0.115237f, -0.097788f, -0.081784f, -0.068578f, -0.057918f, -0.049072f, -0.041700f, -0.034982f, -0.027605f, -0.019168f, -0.010254f, -0.001254f, 0.007586f, 0.015692f, 0.023079f, 0.030753f, 0.039150f, 0.047677f, 0.056423f, 0.066196f, 0.076374f, 0.085165f, 0.092238f, 0.098541f, 0.103858f, 0.107357f, 0.109771f, 0.112187f, 0.113992f, 0.114589f, 0.115084f, 0.115986f, 0.116053f, 0.115391f, 0.116090f, 0.118375f, 0.120418f, 0.122613f, 0.127014f, 0.132736f, 0.137519f, 0.142486f, 0.149375f, 0.155994f, 0.160690f, 0.166504f, - 0.174416f, 0.179864f, 0.182512f, 0.188824f, 0.198165f, 0.201158f, 0.199276f, 0.205855f, 0.218574f, 0.217938f, 0.206203f, 0.213074f, 0.240900f, 0.244438f, 0.200317f, 0.158123f, 0.174531f, 0.227413f, 0.251412f, 0.237058f, 0.230785f, 0.244489f, 0.233509f, 0.178591f, 0.130638f, 0.141894f, 0.191497f, 0.216461f, 0.195657f, 0.165578f, 0.156193f, 0.145395f, 0.095257f, 0.017498f, -0.024939f, 0.010288f, 0.089729f, 0.139320f, 0.127786f, 0.093936f, 0.089116f, 0.114421f, 0.129992f, 0.115341f, 0.099739f, 0.126419f, 0.196125f, 0.257597f} - }, - { - {-0.026157f, 0.068639f, 0.138852f, 0.116633f, 0.040871f, -0.066112f, -0.241888f, -0.457026f, -0.568605f, -0.471298f, -0.196549f, 0.181955f, 0.589203f, 0.816657f, 0.568697f, -0.134981f, -0.747445f, -0.685246f, -0.015441f, 0.605050f, 0.693322f, 0.391281f, 0.106693f, -0.011722f, -0.080268f, -0.174474f, -0.247103f, -0.273141f, -0.292930f, -0.320883f, -0.325188f, -0.295283f, -0.254575f, -0.212925f, -0.160163f, -0.098014f, -0.039915f, 0.010923f, 0.057040f, 0.092984f, 0.114618f, 0.128942f, 0.142270f, 0.151647f, 0.154912f, 0.155718f, 0.154665f, 0.148180f, 0.137772f, 0.129391f, 0.124178f, 0.118997f, 0.113394f, 0.108290f, 0.101692f, 0.091970f, 0.080942f, 0.069580f, 0.055904f, 0.039705f, 0.023561f, 0.007840f, -0.009525f, -0.028172f, -0.045799f, -0.062600f, -0.080032f, -0.096800f, -0.110687f, -0.122210f, -0.132699f, -0.141465f, -0.147899f, -0.153417f, -0.159057f, -0.164064f, -0.168042f, -0.171581f, -0.174482f, -0.176315f, -0.178283f, -0.181779f, -0.186166f, -0.190389f, -0.194992f, -0.200352f, -0.204977f, -0.207427f, -0.207840f, -0.206456f, -0.202971f, -0.197962f, -0.192616f, -0.187178f, -0.182088f, -0.179900f, - -0.183369f, -0.192384f, -0.205113f, -0.221034f, -0.240727f, -0.263826f, -0.288814f, -0.313701f, -0.336107f, -0.354222f, -0.368133f, -0.378639f, -0.385041f, -0.385850f, -0.381086f, -0.372078f, -0.359829f, -0.345156f, -0.329222f, -0.312415f, -0.294047f, -0.274257f, -0.254754f, -0.236913f, -0.220646f, -0.205336f, -0.190177f, -0.173810f, -0.155586f, -0.136859f, -0.119423f, -0.103382f, -0.087912f, -0.072828f, -0.057948f, -0.042443f, -0.026135f, -0.010040f, 0.005293f, 0.020416f, 0.035572f, 0.050402f, 0.065217f, 0.080748f, 0.096694f, 0.112113f, 0.126763f, 0.140626f, 0.152945f, 0.163087f, 0.171376f, 0.178108f, 0.182919f, 0.185770f, 0.187134f, 0.186908f, 0.184596f, 0.180511f, 0.175333f, 0.168990f, 0.161399f, 0.153419f, 0.145682f, 0.137689f, 0.129219f, 0.121085f, 0.113576f, 0.105961f, 0.098227f, 0.091437f, 0.086015f, 0.081580f, 0.078300f, 0.076492f, 0.075448f, 0.074428f, 0.073773f, 0.073571f, 0.072898f, 0.071705f, 0.071330f, 0.072161f, 0.073161f, 0.074179f, 0.076012f, 0.078167f, 0.079475f, 0.080318f, 0.081495f, 0.082291f, 0.082316f, 0.082970f, 0.084730f, 0.086114f, 0.087018f, 0.088948f, - 0.091133f, 0.091673f, 0.092125f, 0.094480f, 0.095720f, 0.093481f, 0.092767f, 0.096810f, 0.098287f, 0.092965f, 0.091911f, 0.101679f, 0.104826f, 0.086445f, 0.069405f, 0.089245f, 0.138069f, 0.169948f, 0.164683f, 0.150204f, 0.153627f, 0.164399f, 0.160775f, 0.145233f, 0.135702f, 0.139942f, 0.153308f, 0.169163f, 0.181118f, 0.185093f, 0.185347f, 0.187089f, 0.176933f, 0.125522f, 0.026481f, -0.073387f, -0.108076f, -0.068160f, -0.019136f, -0.018020f, -0.035753f, -0.012095f, 0.030752f, 0.016593f, -0.024770f, 0.062804f, 0.338438f, 0.605650f}, - {-0.026157f, 0.068639f, 0.138852f, 0.116633f, 0.040871f, -0.066112f, -0.241888f, -0.457026f, -0.568605f, -0.471298f, -0.196549f, 0.181955f, 0.589203f, 0.816657f, 0.568697f, -0.134981f, -0.747445f, -0.685246f, -0.015441f, 0.605050f, 0.693322f, 0.391281f, 0.106693f, -0.011722f, -0.080268f, -0.174474f, -0.247103f, -0.273141f, -0.292930f, -0.320883f, -0.325188f, -0.295283f, -0.254575f, -0.212925f, -0.160163f, -0.098014f, -0.039915f, 0.010923f, 0.057040f, 0.092984f, 0.114618f, 0.128942f, 0.142270f, 0.151647f, 0.154912f, 0.155718f, 0.154665f, 0.148180f, 0.137772f, 0.129391f, 0.124178f, 0.118997f, 0.113394f, 0.108290f, 0.101692f, 0.091970f, 0.080942f, 0.069580f, 0.055904f, 0.039705f, 0.023561f, 0.007840f, -0.009525f, -0.028172f, -0.045799f, -0.062600f, -0.080032f, -0.096800f, -0.110687f, -0.122210f, -0.132699f, -0.141465f, -0.147899f, -0.153417f, -0.159057f, -0.164064f, -0.168042f, -0.171581f, -0.174482f, -0.176315f, -0.178283f, -0.181779f, -0.186166f, -0.190389f, -0.194992f, -0.200352f, -0.204977f, -0.207427f, -0.207840f, -0.206456f, -0.202971f, -0.197962f, -0.192616f, -0.187178f, -0.182088f, -0.179900f, - -0.183369f, -0.192384f, -0.205113f, -0.221034f, -0.240727f, -0.263826f, -0.288814f, -0.313701f, -0.336107f, -0.354222f, -0.368133f, -0.378639f, -0.385041f, -0.385850f, -0.381086f, -0.372078f, -0.359829f, -0.345156f, -0.329222f, -0.312415f, -0.294047f, -0.274257f, -0.254754f, -0.236913f, -0.220646f, -0.205336f, -0.190177f, -0.173810f, -0.155586f, -0.136859f, -0.119423f, -0.103382f, -0.087912f, -0.072828f, -0.057948f, -0.042443f, -0.026135f, -0.010040f, 0.005293f, 0.020416f, 0.035572f, 0.050402f, 0.065217f, 0.080748f, 0.096694f, 0.112113f, 0.126763f, 0.140626f, 0.152945f, 0.163087f, 0.171376f, 0.178108f, 0.182919f, 0.185770f, 0.187134f, 0.186908f, 0.184596f, 0.180511f, 0.175333f, 0.168990f, 0.161399f, 0.153419f, 0.145682f, 0.137689f, 0.129219f, 0.121085f, 0.113576f, 0.105961f, 0.098227f, 0.091437f, 0.086015f, 0.081580f, 0.078300f, 0.076492f, 0.075448f, 0.074428f, 0.073773f, 0.073571f, 0.072898f, 0.071705f, 0.071330f, 0.072161f, 0.073161f, 0.074179f, 0.076012f, 0.078167f, 0.079475f, 0.080318f, 0.081495f, 0.082291f, 0.082316f, 0.082970f, 0.084730f, 0.086114f, 0.087018f, 0.088948f, - 0.091133f, 0.091673f, 0.092125f, 0.094480f, 0.095720f, 0.093481f, 0.092767f, 0.096810f, 0.098287f, 0.092965f, 0.091911f, 0.101679f, 0.104826f, 0.086445f, 0.069405f, 0.089245f, 0.138069f, 0.169948f, 0.164683f, 0.150204f, 0.153627f, 0.164399f, 0.160775f, 0.145233f, 0.135702f, 0.139942f, 0.153308f, 0.169163f, 0.181118f, 0.185093f, 0.185347f, 0.187089f, 0.176933f, 0.125522f, 0.026481f, -0.073387f, -0.108076f, -0.068160f, -0.019136f, -0.018020f, -0.035753f, -0.012095f, 0.030752f, 0.016593f, -0.024770f, 0.062804f, 0.338438f, 0.605650f} - }, - { - {-0.007369f, -0.009113f, -0.001099f, 0.022658f, 0.070924f, 0.152318f, 0.232129f, 0.241139f, 0.159597f, 0.019376f, -0.191743f, -0.478726f, -0.641786f, -0.366448f, 0.302362f, 0.784726f, 0.561501f, -0.152339f, -0.632004f, -0.504209f, -0.082826f, 0.166508f, 0.170061f, 0.132434f, 0.150576f, 0.156677f, 0.112765f, 0.064809f, 0.038940f, 0.011560f, -0.026185f, -0.052670f, -0.058435f, -0.055297f, -0.050368f, -0.042168f, -0.033153f, -0.026070f, -0.017664f, -0.007165f, -0.000019f, 0.002560f, 0.006005f, 0.011682f, 0.014961f, 0.014711f, 0.014629f, 0.015662f, 0.015718f, 0.015511f, 0.017772f, 0.022545f, 0.028288f, 0.035048f, 0.042950f, 0.050476f, 0.056636f, 0.061995f, 0.066457f, 0.069051f, 0.070123f, 0.070862f, 0.071035f, 0.069703f, 0.067216f, 0.064295f, 0.060502f, 0.055392f, 0.049663f, 0.043845f, 0.037475f, 0.030360f, 0.022950f, 0.015014f, 0.005606f, -0.005567f, -0.018119f, -0.031952f, -0.046962f, -0.062497f, -0.078234f, -0.094671f, -0.111772f, -0.128161f, -0.142543f, -0.154931f, -0.165841f, -0.175123f, -0.182010f, -0.185649f, -0.185515f, -0.181851f, -0.175561f, -0.167354f, -0.157511f, -0.146709f, - -0.136223f, -0.126946f, -0.118986f, -0.112528f, -0.108273f, -0.106653f, -0.107197f, -0.108900f, -0.110998f, -0.113479f, -0.117023f, -0.122152f, -0.128391f, -0.134603f, -0.140110f, -0.145050f, -0.149794f, -0.154521f, -0.159112f, -0.163000f, -0.165438f, -0.166306f, -0.166315f, -0.166210f, -0.166147f, -0.165802f, -0.164520f, -0.161506f, -0.156473f, -0.149994f, -0.142735f, -0.134670f, -0.125420f, -0.114771f, -0.102543f, -0.088669f, -0.073713f, -0.058625f, -0.043867f, -0.029420f, -0.015423f, -0.002012f, 0.011080f, 0.023915f, 0.035810f, 0.046102f, 0.054869f, 0.062393f, 0.068774f, 0.074464f, 0.080241f, 0.086360f, 0.092594f, 0.098983f, 0.105615f, 0.112093f, 0.118168f, 0.124284f, 0.130714f, 0.137142f, 0.143655f, 0.150871f, 0.158659f, 0.166225f, 0.173522f, 0.180945f, 0.187978f, 0.193921f, 0.199247f, 0.204493f, 0.209025f, 0.212545f, 0.216101f, 0.220182f, 0.223965f, 0.227482f, 0.231885f, 0.237074f, 0.242015f, 0.247127f, 0.253052f, 0.258300f, 0.261689f, 0.264868f, 0.268891f, 0.271822f, 0.273082f, 0.275283f, 0.278781f, 0.280657f, 0.281124f, 0.283268f, 0.285951f, 0.286133f, 0.286398f, 0.289463f, - 0.290488f, 0.287311f, 0.288136f, 0.294374f, 0.292805f, 0.282671f, 0.284319f, 0.297926f, 0.292144f, 0.265659f, 0.265620f, 0.295582f, 0.275872f, 0.176874f, 0.118624f, 0.219351f, 0.399705f, 0.477971f, 0.424361f, 0.364658f, 0.350250f, 0.304253f, 0.215924f, 0.205638f, 0.330161f, 0.473519f, 0.512784f, 0.473603f, 0.445373f, 0.445924f, 0.442945f, 0.420484f, 0.362318f, 0.253795f, 0.151402f, 0.158962f, 0.280224f, 0.386924f, 0.389886f, 0.347680f, 0.344603f, 0.363776f, 0.360809f, 0.360105f, 0.372309f, 0.308063f, 0.110063f, -0.088473f}, - {0.007369f, 0.009113f, 0.001099f, -0.022658f, -0.070924f, -0.152318f, -0.232129f, -0.241139f, -0.159597f, -0.019376f, 0.191743f, 0.478726f, 0.641786f, 0.366448f, -0.302362f, -0.784726f, -0.561501f, 0.152339f, 0.632004f, 0.504209f, 0.082826f, -0.166508f, -0.170061f, -0.132434f, -0.150576f, -0.156677f, -0.112765f, -0.064809f, -0.038940f, -0.011560f, 0.026185f, 0.052670f, 0.058435f, 0.055297f, 0.050368f, 0.042168f, 0.033153f, 0.026070f, 0.017664f, 0.007165f, 0.000019f, -0.002560f, -0.006005f, -0.011682f, -0.014961f, -0.014711f, -0.014629f, -0.015662f, -0.015718f, -0.015511f, -0.017772f, -0.022545f, -0.028288f, -0.035048f, -0.042950f, -0.050476f, -0.056636f, -0.061995f, -0.066457f, -0.069051f, -0.070123f, -0.070862f, -0.071035f, -0.069703f, -0.067216f, -0.064295f, -0.060502f, -0.055392f, -0.049663f, -0.043845f, -0.037475f, -0.030360f, -0.022950f, -0.015014f, -0.005606f, 0.005567f, 0.018119f, 0.031952f, 0.046962f, 0.062497f, 0.078234f, 0.094671f, 0.111772f, 0.128161f, 0.142543f, 0.154931f, 0.165841f, 0.175123f, 0.182010f, 0.185649f, 0.185515f, 0.181851f, 0.175561f, 0.167354f, 0.157511f, 0.146709f, - 0.136223f, 0.126946f, 0.118986f, 0.112528f, 0.108273f, 0.106653f, 0.107197f, 0.108900f, 0.110998f, 0.113479f, 0.117023f, 0.122152f, 0.128391f, 0.134603f, 0.140110f, 0.145050f, 0.149794f, 0.154521f, 0.159112f, 0.163000f, 0.165438f, 0.166306f, 0.166315f, 0.166210f, 0.166147f, 0.165802f, 0.164520f, 0.161506f, 0.156473f, 0.149994f, 0.142735f, 0.134670f, 0.125420f, 0.114771f, 0.102543f, 0.088669f, 0.073713f, 0.058625f, 0.043867f, 0.029420f, 0.015423f, 0.002012f, -0.011080f, -0.023915f, -0.035810f, -0.046102f, -0.054869f, -0.062393f, -0.068774f, -0.074464f, -0.080241f, -0.086360f, -0.092594f, -0.098983f, -0.105615f, -0.112093f, -0.118168f, -0.124284f, -0.130714f, -0.137142f, -0.143655f, -0.150871f, -0.158659f, -0.166225f, -0.173522f, -0.180945f, -0.187978f, -0.193921f, -0.199247f, -0.204493f, -0.209025f, -0.212545f, -0.216101f, -0.220182f, -0.223965f, -0.227482f, -0.231885f, -0.237074f, -0.242015f, -0.247127f, -0.253052f, -0.258300f, -0.261689f, -0.264868f, -0.268891f, -0.271822f, -0.273082f, -0.275283f, -0.278781f, -0.280657f, -0.281124f, -0.283268f, -0.285951f, -0.286133f, -0.286398f, -0.289463f, - -0.290488f, -0.287311f, -0.288136f, -0.294374f, -0.292805f, -0.282671f, -0.284319f, -0.297926f, -0.292144f, -0.265659f, -0.265620f, -0.295582f, -0.275872f, -0.176874f, -0.118624f, -0.219351f, -0.399705f, -0.477971f, -0.424361f, -0.364658f, -0.350250f, -0.304253f, -0.215924f, -0.205638f, -0.330161f, -0.473519f, -0.512784f, -0.473603f, -0.445373f, -0.445924f, -0.442945f, -0.420484f, -0.362318f, -0.253795f, -0.151402f, -0.158962f, -0.280224f, -0.386924f, -0.389886f, -0.347680f, -0.344603f, -0.363776f, -0.360809f, -0.360105f, -0.372309f, -0.308063f, -0.110063f, 0.088473f} - }, - { - {-0.002688f, 0.005432f, 0.012718f, 0.008286f, -0.018981f, -0.066947f, -0.093651f, -0.039678f, 0.084418f, 0.167639f, 0.115873f, -0.019344f, -0.096903f, -0.063275f, 0.000491f, 0.014385f, -0.000484f, 0.009731f, 0.035483f, 0.032840f, 0.004036f, -0.010890f, -0.002359f, 0.000339f, -0.017379f, -0.034722f, -0.031174f, -0.012598f, 0.004762f, 0.015141f, 0.020393f, 0.020069f, 0.012230f, -0.002097f, -0.019459f, -0.036054f, -0.048695f, -0.056607f, -0.062102f, -0.067345f, -0.071275f, -0.071399f, -0.067330f, -0.060925f, -0.054215f, -0.048750f, -0.045891f, -0.046130f, -0.048390f, -0.050799f, -0.051951f, -0.051168f, -0.048155f, -0.042971f, -0.036130f, -0.028335f, -0.020063f, -0.011496f, -0.002777f, 0.005857f, 0.014252f, 0.022441f, 0.030314f, 0.037365f, 0.043111f, 0.047651f, 0.051375f, 0.054291f, 0.056203f, 0.057437f, 0.058706f, 0.060226f, 0.061657f, 0.063036f, 0.065132f, 0.068679f, 0.073849f, 0.080769f, 0.090037f, 0.102333f, 0.117751f, 0.135818f, 0.156080f, 0.178486f, 0.203206f, 0.230031f, 0.257901f, 0.285243f, 0.310971f, 0.334898f, 0.356785f, 0.375158f, 0.387601f, 0.392296f, 0.388904f, 0.377910f, - 0.359590f, 0.333993f, 0.301815f, 0.264974f, 0.226129f, 0.187410f, 0.149597f, 0.112764f, 0.077779f, 0.046673f, 0.021036f, 0.000235f, -0.018297f, -0.036907f, -0.055957f, -0.073988f, -0.089329f, -0.101608f, -0.111952f, -0.121846f, -0.131868f, -0.141542f, -0.150198f, -0.157697f, -0.164481f, -0.171286f, -0.178744f, -0.186942f, -0.195343f, -0.203302f, -0.210537f, -0.217024f, -0.222694f, -0.227441f, -0.231177f, -0.233784f, -0.235253f, -0.235915f, -0.236263f, -0.236534f, -0.236669f, -0.236547f, -0.236024f, -0.235038f, -0.233954f, -0.233475f, -0.233944f, -0.235111f, -0.236668f, -0.238427f, -0.239938f, -0.240742f, -0.241159f, -0.242072f, -0.243807f, -0.245955f, -0.248133f, -0.250080f, -0.251134f, -0.250524f, -0.248011f, -0.243591f, -0.237000f, -0.228096f, -0.217152f, -0.204269f, -0.189244f, -0.172334f, -0.154244f, -0.135283f, -0.115616f, -0.096165f, -0.077963f, -0.060968f, -0.044792f, -0.029876f, -0.016585f, -0.004235f, 0.007671f, 0.018639f, 0.028667f, 0.038632f, 0.048378f, 0.056858f, 0.064590f, 0.073057f, 0.081754f, 0.089292f, 0.096631f, 0.105231f, 0.113645f, 0.120294f, 0.126811f, 0.134121f, 0.139781f, 0.143768f, - 0.149981f, 0.157487f, 0.160603f, 0.162003f, 0.170584f, 0.181780f, 0.181900f, 0.177636f, 0.189907f, 0.209624f, 0.204280f, 0.186664f, 0.216719f, 0.295365f, 0.323582f, 0.234869f, 0.109824f, 0.071288f, 0.113232f, 0.138910f, 0.132778f, 0.165020f, 0.231457f, 0.229499f, 0.127086f, 0.030054f, 0.024335f, 0.057848f, 0.047811f, 0.011116f, 0.005056f, 0.015613f, 0.000201f, -0.011538f, 0.040879f, 0.133184f, 0.174164f, 0.133872f, 0.077041f, 0.063200f, 0.079294f, 0.086196f, 0.077456f, 0.068117f, 0.062643f, 0.057750f, 0.055152f, 0.055779f}, - {0.002688f, -0.005432f, -0.012718f, -0.008286f, 0.018981f, 0.066947f, 0.093651f, 0.039678f, -0.084418f, -0.167639f, -0.115873f, 0.019344f, 0.096903f, 0.063275f, -0.000491f, -0.014385f, 0.000484f, -0.009731f, -0.035483f, -0.032840f, -0.004036f, 0.010890f, 0.002359f, -0.000339f, 0.017379f, 0.034722f, 0.031174f, 0.012598f, -0.004762f, -0.015141f, -0.020393f, -0.020069f, -0.012230f, 0.002097f, 0.019459f, 0.036054f, 0.048695f, 0.056607f, 0.062102f, 0.067345f, 0.071275f, 0.071399f, 0.067330f, 0.060925f, 0.054215f, 0.048750f, 0.045891f, 0.046130f, 0.048390f, 0.050799f, 0.051951f, 0.051168f, 0.048155f, 0.042971f, 0.036130f, 0.028335f, 0.020063f, 0.011496f, 0.002777f, -0.005857f, -0.014252f, -0.022441f, -0.030314f, -0.037365f, -0.043111f, -0.047651f, -0.051375f, -0.054291f, -0.056203f, -0.057437f, -0.058706f, -0.060226f, -0.061657f, -0.063036f, -0.065132f, -0.068679f, -0.073849f, -0.080769f, -0.090037f, -0.102333f, -0.117751f, -0.135818f, -0.156080f, -0.178486f, -0.203206f, -0.230031f, -0.257901f, -0.285243f, -0.310971f, -0.334898f, -0.356785f, -0.375158f, -0.387601f, -0.392296f, -0.388904f, -0.377910f, - -0.359590f, -0.333993f, -0.301815f, -0.264974f, -0.226129f, -0.187410f, -0.149597f, -0.112764f, -0.077779f, -0.046673f, -0.021036f, -0.000235f, 0.018297f, 0.036907f, 0.055957f, 0.073988f, 0.089329f, 0.101608f, 0.111952f, 0.121846f, 0.131868f, 0.141542f, 0.150198f, 0.157697f, 0.164481f, 0.171286f, 0.178744f, 0.186942f, 0.195343f, 0.203302f, 0.210537f, 0.217024f, 0.222694f, 0.227441f, 0.231177f, 0.233784f, 0.235253f, 0.235915f, 0.236263f, 0.236534f, 0.236669f, 0.236547f, 0.236024f, 0.235038f, 0.233954f, 0.233475f, 0.233944f, 0.235111f, 0.236668f, 0.238427f, 0.239938f, 0.240742f, 0.241159f, 0.242072f, 0.243807f, 0.245955f, 0.248133f, 0.250080f, 0.251134f, 0.250524f, 0.248011f, 0.243591f, 0.237000f, 0.228096f, 0.217152f, 0.204269f, 0.189244f, 0.172334f, 0.154244f, 0.135283f, 0.115616f, 0.096165f, 0.077963f, 0.060968f, 0.044792f, 0.029876f, 0.016585f, 0.004235f, -0.007671f, -0.018639f, -0.028667f, -0.038632f, -0.048378f, -0.056858f, -0.064590f, -0.073057f, -0.081754f, -0.089292f, -0.096631f, -0.105231f, -0.113645f, -0.120294f, -0.126811f, -0.134121f, -0.139781f, -0.143768f, - -0.149981f, -0.157487f, -0.160603f, -0.162003f, -0.170584f, -0.181780f, -0.181900f, -0.177636f, -0.189907f, -0.209624f, -0.204280f, -0.186664f, -0.216719f, -0.295365f, -0.323582f, -0.234869f, -0.109824f, -0.071288f, -0.113232f, -0.138910f, -0.132778f, -0.165020f, -0.231457f, -0.229499f, -0.127086f, -0.030054f, -0.024335f, -0.057848f, -0.047811f, -0.011116f, -0.005056f, -0.015613f, -0.000201f, 0.011538f, -0.040879f, -0.133184f, -0.174164f, -0.133872f, -0.077041f, -0.063200f, -0.079294f, -0.086196f, -0.077456f, -0.068117f, -0.062643f, -0.057750f, -0.055152f, -0.055779f} - }, - { - {-0.031395f, -0.017549f, 0.012545f, 0.027085f, -0.001298f, -0.019483f, 0.059019f, 0.208286f, 0.263492f, 0.087514f, -0.255313f, -0.510902f, -0.435627f, -0.033493f, 0.386939f, 0.463824f, 0.150130f, -0.224282f, -0.317692f, -0.133994f, 0.063533f, 0.108717f, 0.062538f, 0.027810f, 0.001853f, -0.049162f, -0.095299f, -0.093148f, -0.061382f, -0.047017f, -0.057265f, -0.066961f, -0.063290f, -0.049263f, -0.023679f, 0.015474f, 0.059281f, 0.096124f, 0.123579f, 0.144087f, 0.157932f, 0.165971f, 0.171378f, 0.175091f, 0.175299f, 0.172128f, 0.167569f, 0.161483f, 0.152440f, 0.141016f, 0.128172f, 0.112226f, 0.090989f, 0.065073f, 0.036626f, 0.006936f, -0.022810f, -0.050769f, -0.076246f, -0.100391f, -0.124040f, -0.146496f, -0.166945f, -0.185227f, -0.200710f, -0.211804f, -0.216957f, -0.215246f, -0.206186f, -0.189818f, -0.166688f, -0.137158f, -0.101286f, -0.059912f, -0.015051f, 0.031417f, 0.078741f, 0.126363f, 0.172683f, 0.215583f, 0.253881f, 0.287628f, 0.317019f, 0.341528f, 0.360300f, 0.373071f, 0.380303f, 0.382359f, 0.378941f, 0.369492f, 0.353667f, 0.331025f, 0.300798f, 0.262671f, 0.217574f, 0.167114f, - 0.112510f, 0.054898f, -0.003462f, -0.059139f, -0.109030f, -0.151676f, -0.187106f, -0.215626f, -0.236627f, -0.248501f, -0.250097f, -0.242458f, -0.228671f, -0.211714f, -0.192851f, -0.172157f, -0.149779f, -0.126242f, -0.102213f, -0.078565f, -0.056361f, -0.036419f, -0.019092f, -0.004417f, 0.008006f, 0.019186f, 0.030126f, 0.040878f, 0.050508f, 0.057885f, 0.062245f, 0.063363f, 0.061684f, 0.058047f, 0.052884f, 0.045898f, 0.036639f, 0.025030f, 0.011292f, -0.004121f, -0.020506f, -0.037329f, -0.054568f, -0.072173f, -0.089494f, -0.105753f, -0.120651f, -0.134025f, -0.145470f, -0.154818f, -0.162347f, -0.168112f, -0.171794f, -0.173503f, -0.173945f, -0.173633f, -0.172788f, -0.171982f, -0.171913f, -0.172586f, -0.173607f, -0.174969f, -0.176759f, -0.178632f, -0.180379f, -0.182333f, -0.184562f, -0.186478f, -0.187751f, -0.188632f, -0.189123f, -0.188994f, -0.188640f, -0.188675f, -0.188837f, -0.188578f, -0.188189f, -0.188042f, -0.187510f, -0.185863f, -0.183172f, -0.179315f, -0.173560f, -0.165995f, -0.157668f, -0.148777f, -0.138701f, -0.127933f, -0.117657f, -0.107677f, -0.097244f, -0.087142f, -0.078362f, -0.070096f, -0.061614f, -0.054068f, - -0.047958f, -0.041708f, -0.035013f, -0.029793f, -0.025876f, -0.020687f, -0.014884f, -0.012039f, -0.011329f, -0.008255f, -0.004063f, -0.005183f, -0.011321f, -0.014544f, -0.013137f, -0.015356f, -0.025141f, -0.034687f, -0.036741f, -0.035196f, -0.036780f, -0.038630f, -0.031709f, -0.015609f, -0.004294f, -0.011898f, -0.032698f, -0.044235f, -0.036962f, -0.028397f, -0.032322f, -0.028167f, 0.009611f, 0.057777f, 0.058012f, -0.006611f, -0.081631f, -0.103618f, -0.068370f, -0.022195f, -0.005259f, -0.017573f, -0.028765f, -0.015361f, 0.003597f, -0.022097f, -0.107014f, -0.188977f}, - {0.031395f, 0.017549f, -0.012545f, -0.027085f, 0.001298f, 0.019483f, -0.059019f, -0.208286f, -0.263492f, -0.087514f, 0.255313f, 0.510902f, 0.435627f, 0.033493f, -0.386939f, -0.463824f, -0.150130f, 0.224282f, 0.317692f, 0.133994f, -0.063533f, -0.108717f, -0.062538f, -0.027810f, -0.001853f, 0.049162f, 0.095299f, 0.093148f, 0.061382f, 0.047017f, 0.057265f, 0.066961f, 0.063290f, 0.049263f, 0.023679f, -0.015474f, -0.059281f, -0.096124f, -0.123579f, -0.144087f, -0.157932f, -0.165971f, -0.171378f, -0.175091f, -0.175299f, -0.172128f, -0.167569f, -0.161483f, -0.152440f, -0.141016f, -0.128172f, -0.112226f, -0.090989f, -0.065073f, -0.036626f, -0.006936f, 0.022810f, 0.050769f, 0.076246f, 0.100391f, 0.124040f, 0.146496f, 0.166945f, 0.185227f, 0.200710f, 0.211804f, 0.216957f, 0.215246f, 0.206186f, 0.189818f, 0.166688f, 0.137158f, 0.101286f, 0.059912f, 0.015051f, -0.031417f, -0.078741f, -0.126363f, -0.172683f, -0.215583f, -0.253881f, -0.287628f, -0.317019f, -0.341528f, -0.360300f, -0.373071f, -0.380303f, -0.382359f, -0.378941f, -0.369492f, -0.353667f, -0.331025f, -0.300798f, -0.262671f, -0.217574f, -0.167114f, - -0.112510f, -0.054898f, 0.003462f, 0.059139f, 0.109030f, 0.151676f, 0.187106f, 0.215626f, 0.236627f, 0.248501f, 0.250097f, 0.242458f, 0.228671f, 0.211714f, 0.192851f, 0.172157f, 0.149779f, 0.126242f, 0.102213f, 0.078565f, 0.056361f, 0.036419f, 0.019092f, 0.004417f, -0.008006f, -0.019186f, -0.030126f, -0.040878f, -0.050508f, -0.057885f, -0.062245f, -0.063363f, -0.061684f, -0.058047f, -0.052884f, -0.045898f, -0.036639f, -0.025030f, -0.011292f, 0.004121f, 0.020506f, 0.037329f, 0.054568f, 0.072173f, 0.089494f, 0.105753f, 0.120651f, 0.134025f, 0.145470f, 0.154818f, 0.162347f, 0.168112f, 0.171794f, 0.173503f, 0.173945f, 0.173633f, 0.172788f, 0.171982f, 0.171913f, 0.172586f, 0.173607f, 0.174969f, 0.176759f, 0.178632f, 0.180379f, 0.182333f, 0.184562f, 0.186478f, 0.187751f, 0.188632f, 0.189123f, 0.188994f, 0.188640f, 0.188675f, 0.188837f, 0.188578f, 0.188189f, 0.188042f, 0.187510f, 0.185863f, 0.183172f, 0.179315f, 0.173560f, 0.165995f, 0.157668f, 0.148777f, 0.138701f, 0.127933f, 0.117657f, 0.107677f, 0.097244f, 0.087142f, 0.078362f, 0.070096f, 0.061614f, 0.054068f, - 0.047958f, 0.041708f, 0.035013f, 0.029793f, 0.025876f, 0.020687f, 0.014884f, 0.012039f, 0.011329f, 0.008255f, 0.004063f, 0.005183f, 0.011321f, 0.014544f, 0.013137f, 0.015356f, 0.025141f, 0.034687f, 0.036741f, 0.035196f, 0.036780f, 0.038630f, 0.031709f, 0.015609f, 0.004294f, 0.011898f, 0.032698f, 0.044235f, 0.036962f, 0.028397f, 0.032322f, 0.028167f, -0.009611f, -0.057777f, -0.058012f, 0.006611f, 0.081631f, 0.103618f, 0.068370f, 0.022195f, 0.005259f, 0.017573f, 0.028765f, 0.015361f, -0.003597f, 0.022097f, 0.107014f, 0.188977f} - }, - { - {-0.019502f, -0.024108f, -0.023741f, -0.009796f, 0.015547f, 0.040200f, 0.049418f, 0.030039f, -0.022935f, -0.089805f, -0.122188f, -0.081481f, 0.009195f, 0.073870f, 0.061521f, -0.001319f, -0.051768f, -0.064073f, -0.056806f, -0.044490f, -0.019688f, 0.017657f, 0.047591f, 0.057938f, 0.061200f, 0.071250f, 0.079820f, 0.068542f, 0.033537f, -0.011849f, -0.051126f, -0.073885f, -0.077564f, -0.068013f, -0.056218f, -0.049942f, -0.048764f, -0.047509f, -0.042223f, -0.032636f, -0.021389f, -0.011717f, -0.004812f, 0.000602f, 0.006040f, 0.011907f, 0.018434f, 0.026017f, 0.034094f, 0.041240f, 0.046701f, 0.050589f, 0.052772f, 0.052796f, 0.050455f, 0.045432f, 0.037083f, 0.025409f, 0.011341f, -0.004349f, -0.021366f, -0.039047f, -0.056623f, -0.074233f, -0.092292f, -0.110264f, -0.127486f, -0.144411f, -0.161405f, -0.177189f, -0.189933f, -0.198872f, -0.203514f, -0.202567f, -0.195078f, -0.181502f, -0.162623f, -0.138623f, -0.110014f, -0.078167f, -0.044145f, -0.008062f, 0.029925f, 0.068792f, 0.107070f, 0.143639f, 0.178228f, 0.211182f, 0.242095f, 0.268826f, 0.288929f, 0.301918f, 0.308848f, 0.309956f, 0.304163f, 0.290661f, - 0.269776f, 0.242758f, 0.211892f, 0.180019f, 0.148692f, 0.117379f, 0.085253f, 0.053049f, 0.022899f, -0.002684f, -0.021788f, -0.034534f, -0.043357f, -0.050497f, -0.055571f, -0.056701f, -0.053111f, -0.045412f, -0.034615f, -0.022156f, -0.009575f, 0.002997f, 0.016842f, 0.032605f, 0.049621f, 0.067258f, 0.085130f, 0.102158f, 0.117320f, 0.130988f, 0.143895f, 0.155582f, 0.165326f, 0.173298f, 0.179406f, 0.182544f, 0.182218f, 0.179194f, 0.173800f, 0.165487f, 0.154409f, 0.141300f, 0.125879f, 0.107494f, 0.086830f, 0.064946f, 0.041711f, 0.017064f, -0.007788f, -0.032117f, -0.056536f, -0.080769f, -0.103025f, -0.122613f, -0.140519f, -0.156975f, -0.171383f, -0.184548f, -0.197943f, -0.211256f, -0.223337f, -0.234237f, -0.243922f, -0.251152f, -0.255800f, -0.259609f, -0.263111f, -0.265127f, -0.266052f, -0.267563f, -0.268996f, -0.268445f, -0.266765f, -0.265908f, -0.265057f, -0.262930f, -0.261168f, -0.261121f, -0.261008f, -0.259822f, -0.259144f, -0.258514f, -0.255135f, -0.249662f, -0.245226f, -0.240818f, -0.233602f, -0.225815f, -0.220718f, -0.215649f, -0.207922f, -0.201220f, -0.197675f, -0.192842f, -0.185897f, -0.182258f, - -0.180668f, -0.174392f, -0.167600f, -0.168651f, -0.169029f, -0.157694f, -0.148968f, -0.158093f, -0.162902f, -0.141194f, -0.125772f, -0.150997f, -0.167269f, -0.107757f, -0.029434f, -0.064168f, -0.214163f, -0.327492f, -0.315349f, -0.260318f, -0.248751f, -0.230395f, -0.140550f, -0.051921f, -0.083798f, -0.221304f, -0.333518f, -0.342531f, -0.290265f, -0.249776f, -0.232606f, -0.189157f, -0.077884f, 0.062184f, 0.117635f, 0.018087f, -0.157652f, -0.249383f, -0.198595f, -0.105435f, -0.085189f, -0.130387f, -0.154588f, -0.124714f, -0.094023f, -0.119576f, -0.192526f, -0.253906f}, - {-0.019502f, -0.024108f, -0.023741f, -0.009796f, 0.015547f, 0.040200f, 0.049418f, 0.030039f, -0.022935f, -0.089805f, -0.122188f, -0.081481f, 0.009195f, 0.073870f, 0.061521f, -0.001319f, -0.051768f, -0.064073f, -0.056806f, -0.044490f, -0.019688f, 0.017657f, 0.047591f, 0.057938f, 0.061200f, 0.071250f, 0.079820f, 0.068542f, 0.033537f, -0.011849f, -0.051126f, -0.073885f, -0.077564f, -0.068013f, -0.056218f, -0.049942f, -0.048764f, -0.047509f, -0.042223f, -0.032636f, -0.021389f, -0.011717f, -0.004812f, 0.000602f, 0.006040f, 0.011907f, 0.018434f, 0.026017f, 0.034094f, 0.041240f, 0.046701f, 0.050589f, 0.052772f, 0.052796f, 0.050455f, 0.045432f, 0.037083f, 0.025409f, 0.011341f, -0.004349f, -0.021366f, -0.039047f, -0.056623f, -0.074233f, -0.092292f, -0.110264f, -0.127486f, -0.144411f, -0.161405f, -0.177189f, -0.189933f, -0.198872f, -0.203514f, -0.202567f, -0.195078f, -0.181502f, -0.162623f, -0.138623f, -0.110014f, -0.078167f, -0.044145f, -0.008062f, 0.029925f, 0.068792f, 0.107070f, 0.143639f, 0.178228f, 0.211182f, 0.242095f, 0.268826f, 0.288929f, 0.301918f, 0.308848f, 0.309956f, 0.304163f, 0.290661f, - 0.269776f, 0.242758f, 0.211892f, 0.180019f, 0.148692f, 0.117379f, 0.085253f, 0.053049f, 0.022899f, -0.002684f, -0.021788f, -0.034534f, -0.043357f, -0.050497f, -0.055571f, -0.056701f, -0.053111f, -0.045412f, -0.034615f, -0.022156f, -0.009575f, 0.002997f, 0.016842f, 0.032605f, 0.049621f, 0.067258f, 0.085130f, 0.102158f, 0.117320f, 0.130988f, 0.143895f, 0.155582f, 0.165326f, 0.173298f, 0.179406f, 0.182544f, 0.182218f, 0.179194f, 0.173800f, 0.165487f, 0.154409f, 0.141300f, 0.125879f, 0.107494f, 0.086830f, 0.064946f, 0.041711f, 0.017064f, -0.007788f, -0.032117f, -0.056536f, -0.080769f, -0.103025f, -0.122613f, -0.140519f, -0.156975f, -0.171383f, -0.184548f, -0.197943f, -0.211256f, -0.223337f, -0.234237f, -0.243922f, -0.251152f, -0.255800f, -0.259609f, -0.263111f, -0.265127f, -0.266052f, -0.267563f, -0.268996f, -0.268445f, -0.266765f, -0.265908f, -0.265057f, -0.262930f, -0.261168f, -0.261121f, -0.261008f, -0.259822f, -0.259144f, -0.258514f, -0.255135f, -0.249662f, -0.245226f, -0.240818f, -0.233602f, -0.225815f, -0.220718f, -0.215649f, -0.207922f, -0.201220f, -0.197675f, -0.192842f, -0.185897f, -0.182258f, - -0.180668f, -0.174392f, -0.167600f, -0.168651f, -0.169029f, -0.157694f, -0.148968f, -0.158093f, -0.162902f, -0.141194f, -0.125772f, -0.150997f, -0.167269f, -0.107757f, -0.029434f, -0.064168f, -0.214163f, -0.327492f, -0.315349f, -0.260318f, -0.248751f, -0.230395f, -0.140550f, -0.051921f, -0.083798f, -0.221304f, -0.333518f, -0.342531f, -0.290265f, -0.249776f, -0.232606f, -0.189157f, -0.077884f, 0.062184f, 0.117635f, 0.018087f, -0.157652f, -0.249383f, -0.198595f, -0.105435f, -0.085189f, -0.130387f, -0.154588f, -0.124714f, -0.094023f, -0.119576f, -0.192526f, -0.253906f} - }, - { - {-0.020459f, -0.024226f, -0.007319f, 0.032932f, 0.070261f, 0.086507f, 0.075862f, 0.020380f, -0.084294f, -0.176022f, -0.160990f, -0.027778f, 0.117310f, 0.158297f, 0.084734f, -0.019435f, -0.070381f, -0.045836f, 0.018199f, 0.061503f, 0.043846f, -0.020982f, -0.078254f, -0.087465f, -0.055763f, -0.014491f, 0.018486f, 0.043047f, 0.061052f, 0.072989f, 0.082705f, 0.092874f, 0.099131f, 0.096147f, 0.085745f, 0.073416f, 0.060647f, 0.045821f, 0.029788f, 0.016090f, 0.007003f, 0.002079f, -0.000428f, -0.002439f, -0.005629f, -0.011124f, -0.019711f, -0.031936f, -0.047212f, -0.063304f, -0.077628f, -0.088759f, -0.096303f, -0.100279f, -0.101461f, -0.101586f, -0.102290f, -0.104165f, -0.107222f, -0.111679f, -0.117799f, -0.125379f, -0.133735f, -0.141832f, -0.148297f, -0.151761f, -0.151415f, -0.147006f, -0.138423f, -0.125892f, -0.110520f, -0.093878f, -0.076767f, -0.059088f, -0.041213f, -0.024578f, -0.010198f, 0.002580f, 0.014740f, 0.025521f, 0.033050f, 0.036977f, 0.039052f, 0.040734f, 0.041611f, 0.041098f, 0.040698f, 0.043240f, 0.050015f, 0.059556f, 0.069410f, 0.078511f, 0.087586f, 0.097736f, 0.109169f, 0.121258f, - 0.133264f, 0.144615f, 0.154849f, 0.163981f, 0.173051f, 0.183709f, 0.196801f, 0.211503f, 0.226081f, 0.239369f, 0.251298f, 0.262094f, 0.271304f, 0.277782f, 0.280558f, 0.279527f, 0.275234f, 0.268056f, 0.257727f, 0.243568f, 0.225141f, 0.202779f, 0.177630f, 0.151117f, 0.124165f, 0.096863f, 0.068855f, 0.040060f, 0.011112f, -0.016739f, -0.042197f, -0.064683f, -0.084716f, -0.103488f, -0.121850f, -0.139509f, -0.155119f, -0.167247f, -0.175419f, -0.180319f, -0.183098f, -0.184680f, -0.185579f, -0.185807f, -0.184744f, -0.181522f, -0.175876f, -0.168297f, -0.159258f, -0.148806f, -0.137132f, -0.124962f, -0.113038f, -0.101619f, -0.090702f, -0.080308f, -0.070353f, -0.060612f, -0.050949f, -0.041416f, -0.032282f, -0.024135f, -0.017602f, -0.012726f, -0.009002f, -0.006124f, -0.004067f, -0.002466f, -0.000761f, 0.000957f, 0.002161f, 0.002971f, 0.004124f, 0.006037f, 0.008815f, 0.012852f, 0.018515f, 0.025647f, 0.034053f, 0.043642f, 0.053522f, 0.062187f, 0.069139f, 0.074948f, 0.079527f, 0.082208f, 0.083470f, 0.084404f, 0.084728f, 0.083626f, 0.081696f, 0.079585f, 0.076316f, 0.071580f, 0.067155f, 0.063445f, - 0.058415f, 0.052516f, 0.049067f, 0.047225f, 0.042514f, 0.036817f, 0.036645f, 0.038671f, 0.032655f, 0.022831f, 0.024748f, 0.033033f, 0.020825f, -0.012684f, -0.026595f, 0.002934f, 0.039449f, 0.037888f, 0.011764f, 0.003902f, 0.012957f, 0.004264f, -0.017371f, -0.007040f, 0.042603f, 0.080439f, 0.072238f, 0.048300f, 0.049597f, 0.067279f, 0.069762f, 0.058815f, 0.056785f, 0.054038f, 0.014698f, -0.061189f, -0.119777f, -0.117042f, -0.074421f, -0.044738f, -0.040786f, -0.033880f, -0.015908f, -0.014212f, -0.029787f, -0.010524f, 0.073048f, 0.159587f}, - {-0.020459f, -0.024226f, -0.007319f, 0.032932f, 0.070261f, 0.086507f, 0.075862f, 0.020380f, -0.084294f, -0.176022f, -0.160990f, -0.027778f, 0.117310f, 0.158297f, 0.084734f, -0.019435f, -0.070381f, -0.045836f, 0.018199f, 0.061503f, 0.043846f, -0.020982f, -0.078254f, -0.087465f, -0.055763f, -0.014491f, 0.018486f, 0.043047f, 0.061052f, 0.072989f, 0.082705f, 0.092874f, 0.099131f, 0.096147f, 0.085745f, 0.073416f, 0.060647f, 0.045821f, 0.029788f, 0.016090f, 0.007003f, 0.002079f, -0.000428f, -0.002439f, -0.005629f, -0.011124f, -0.019711f, -0.031936f, -0.047212f, -0.063304f, -0.077628f, -0.088759f, -0.096303f, -0.100279f, -0.101461f, -0.101586f, -0.102290f, -0.104165f, -0.107222f, -0.111679f, -0.117799f, -0.125379f, -0.133735f, -0.141832f, -0.148297f, -0.151761f, -0.151415f, -0.147006f, -0.138423f, -0.125892f, -0.110520f, -0.093878f, -0.076767f, -0.059088f, -0.041213f, -0.024578f, -0.010198f, 0.002580f, 0.014740f, 0.025521f, 0.033050f, 0.036977f, 0.039052f, 0.040734f, 0.041611f, 0.041098f, 0.040698f, 0.043240f, 0.050015f, 0.059556f, 0.069410f, 0.078511f, 0.087586f, 0.097736f, 0.109169f, 0.121258f, - 0.133264f, 0.144615f, 0.154849f, 0.163981f, 0.173051f, 0.183709f, 0.196801f, 0.211503f, 0.226081f, 0.239369f, 0.251298f, 0.262094f, 0.271304f, 0.277782f, 0.280558f, 0.279527f, 0.275234f, 0.268056f, 0.257727f, 0.243568f, 0.225141f, 0.202779f, 0.177630f, 0.151117f, 0.124165f, 0.096863f, 0.068855f, 0.040060f, 0.011112f, -0.016739f, -0.042197f, -0.064683f, -0.084716f, -0.103488f, -0.121850f, -0.139509f, -0.155119f, -0.167247f, -0.175419f, -0.180319f, -0.183098f, -0.184680f, -0.185579f, -0.185807f, -0.184744f, -0.181522f, -0.175876f, -0.168297f, -0.159258f, -0.148806f, -0.137132f, -0.124962f, -0.113038f, -0.101619f, -0.090702f, -0.080308f, -0.070353f, -0.060612f, -0.050949f, -0.041416f, -0.032282f, -0.024135f, -0.017602f, -0.012726f, -0.009002f, -0.006124f, -0.004067f, -0.002466f, -0.000761f, 0.000957f, 0.002161f, 0.002971f, 0.004124f, 0.006037f, 0.008815f, 0.012852f, 0.018515f, 0.025647f, 0.034053f, 0.043642f, 0.053522f, 0.062187f, 0.069139f, 0.074948f, 0.079527f, 0.082208f, 0.083470f, 0.084404f, 0.084728f, 0.083626f, 0.081696f, 0.079585f, 0.076316f, 0.071580f, 0.067155f, 0.063445f, - 0.058415f, 0.052516f, 0.049067f, 0.047225f, 0.042514f, 0.036817f, 0.036645f, 0.038671f, 0.032655f, 0.022831f, 0.024748f, 0.033033f, 0.020825f, -0.012684f, -0.026595f, 0.002934f, 0.039449f, 0.037888f, 0.011764f, 0.003902f, 0.012957f, 0.004264f, -0.017371f, -0.007040f, 0.042603f, 0.080439f, 0.072238f, 0.048300f, 0.049597f, 0.067279f, 0.069762f, 0.058815f, 0.056785f, 0.054038f, 0.014698f, -0.061189f, -0.119777f, -0.117042f, -0.074421f, -0.044738f, -0.040786f, -0.033880f, -0.015908f, -0.014212f, -0.029787f, -0.010524f, 0.073048f, 0.159587f} - }, - { - {0.019230f, 0.005435f, -0.001670f, -0.001294f, -0.010487f, -0.014461f, 0.030667f, 0.113202f, 0.129777f, 0.000014f, -0.192920f, -0.252233f, -0.092604f, 0.136952f, 0.210772f, 0.080821f, -0.088991f, -0.135389f, -0.068588f, -0.005284f, 0.003323f, 0.008914f, 0.058759f, 0.125754f, 0.159400f, 0.154680f, 0.140967f, 0.131350f, 0.112781f, 0.074083f, 0.020441f, -0.036433f, -0.087254f, -0.125241f, -0.147468f, -0.156986f, -0.158982f, -0.155710f, -0.147485f, -0.135704f, -0.122237f, -0.108291f, -0.095850f, -0.087923f, -0.085775f, -0.087690f, -0.091184f, -0.094666f, -0.096753f, -0.096083f, -0.092338f, -0.086137f, -0.077823f, -0.067513f, -0.056131f, -0.045302f, -0.036332f, -0.029950f, -0.026691f, -0.026859f, -0.030291f, -0.036478f, -0.044739f, -0.054291f, -0.064399f, -0.074432f, -0.083671f, -0.091357f, -0.096998f, -0.100237f, -0.100391f, -0.096616f, -0.088516f, -0.076165f, -0.059741f, -0.039630f, -0.016638f, 0.008301f, 0.034252f, 0.059947f, 0.084149f, 0.106719f, 0.128442f, 0.149556f, 0.169460f, 0.188009f, 0.205788f, 0.222968f, 0.239578f, 0.257255f, 0.278793f, 0.304945f, 0.333017f, 0.359631f, 0.383799f, 0.406350f, - 0.427076f, 0.443453f, 0.452044f, 0.450717f, 0.439522f, 0.419637f, 0.391822f, 0.356313f, 0.314014f, 0.266992f, 0.217371f, 0.166115f, 0.113115f, 0.058318f, 0.002811f, -0.051061f, -0.100914f, -0.145969f, -0.187244f, -0.225959f, -0.262069f, -0.294432f, -0.321896f, -0.344122f, -0.361927f, -0.376984f, -0.390730f, -0.403348f, -0.414010f, -0.421940f, -0.426962f, -0.429318f, -0.429290f, -0.426748f, -0.420950f, -0.411152f, -0.397449f, -0.380556f, -0.360910f, -0.338489f, -0.313239f, -0.285005f, -0.253467f, -0.218939f, -0.182850f, -0.146776f, -0.111419f, -0.076975f, -0.043728f, -0.011673f, 0.019551f, 0.049686f, 0.077567f, 0.102298f, 0.124067f, 0.143556f, 0.161395f, 0.178368f, 0.195283f, 0.212309f, 0.228806f, 0.243707f, 0.255881f, 0.264647f, 0.270268f, 0.273474f, 0.274516f, 0.273393f, 0.270618f, 0.266694f, 0.261220f, 0.253687f, 0.244636f, 0.234924f, 0.224646f, 0.213843f, 0.203253f, 0.193378f, 0.183911f, 0.174737f, 0.166068f, 0.157360f, 0.147829f, 0.137984f, 0.128785f, 0.119872f, 0.110662f, 0.102037f, 0.094727f, 0.087797f, 0.080834f, 0.075139f, 0.070900f, 0.066532f, 0.062189f, 0.059562f, - 0.057528f, 0.053708f, 0.049943f, 0.048889f, 0.046992f, 0.040524f, 0.035070f, 0.036201f, 0.036089f, 0.026789f, 0.019854f, 0.028515f, 0.036415f, 0.016301f, -0.020707f, -0.031384f, -0.002200f, 0.032420f, 0.043959f, 0.043313f, 0.045513f, 0.041021f, 0.025268f, 0.020977f, 0.042917f, 0.069031f, 0.074200f, 0.068229f, 0.074435f, 0.093211f, 0.111764f, 0.127851f, 0.138412f, 0.126789f, 0.090350f, 0.062570f, 0.076196f, 0.116262f, 0.139539f, 0.132391f, 0.119607f, 0.119984f, 0.124718f, 0.125718f, 0.138639f, 0.182077f, 0.246020f, 0.293881f}, - {0.019230f, 0.005435f, -0.001670f, -0.001294f, -0.010487f, -0.014461f, 0.030667f, 0.113202f, 0.129777f, 0.000014f, -0.192920f, -0.252233f, -0.092604f, 0.136952f, 0.210772f, 0.080821f, -0.088991f, -0.135389f, -0.068588f, -0.005284f, 0.003323f, 0.008914f, 0.058759f, 0.125754f, 0.159400f, 0.154680f, 0.140967f, 0.131350f, 0.112781f, 0.074083f, 0.020441f, -0.036433f, -0.087254f, -0.125241f, -0.147468f, -0.156986f, -0.158982f, -0.155710f, -0.147485f, -0.135704f, -0.122237f, -0.108291f, -0.095850f, -0.087923f, -0.085775f, -0.087690f, -0.091184f, -0.094666f, -0.096753f, -0.096083f, -0.092338f, -0.086137f, -0.077823f, -0.067513f, -0.056131f, -0.045302f, -0.036332f, -0.029950f, -0.026691f, -0.026859f, -0.030291f, -0.036478f, -0.044739f, -0.054291f, -0.064399f, -0.074432f, -0.083671f, -0.091357f, -0.096998f, -0.100237f, -0.100391f, -0.096616f, -0.088516f, -0.076165f, -0.059741f, -0.039630f, -0.016638f, 0.008301f, 0.034252f, 0.059947f, 0.084149f, 0.106719f, 0.128442f, 0.149556f, 0.169460f, 0.188009f, 0.205788f, 0.222968f, 0.239578f, 0.257255f, 0.278793f, 0.304945f, 0.333017f, 0.359631f, 0.383799f, 0.406350f, - 0.427076f, 0.443453f, 0.452044f, 0.450717f, 0.439522f, 0.419637f, 0.391822f, 0.356313f, 0.314014f, 0.266992f, 0.217371f, 0.166115f, 0.113115f, 0.058318f, 0.002811f, -0.051061f, -0.100914f, -0.145969f, -0.187244f, -0.225959f, -0.262069f, -0.294432f, -0.321896f, -0.344122f, -0.361927f, -0.376984f, -0.390730f, -0.403348f, -0.414010f, -0.421940f, -0.426962f, -0.429318f, -0.429290f, -0.426748f, -0.420950f, -0.411152f, -0.397449f, -0.380556f, -0.360910f, -0.338489f, -0.313239f, -0.285005f, -0.253467f, -0.218939f, -0.182850f, -0.146776f, -0.111419f, -0.076975f, -0.043728f, -0.011673f, 0.019551f, 0.049686f, 0.077567f, 0.102298f, 0.124067f, 0.143556f, 0.161395f, 0.178368f, 0.195283f, 0.212309f, 0.228806f, 0.243707f, 0.255881f, 0.264647f, 0.270268f, 0.273474f, 0.274516f, 0.273393f, 0.270618f, 0.266694f, 0.261220f, 0.253687f, 0.244636f, 0.234924f, 0.224646f, 0.213843f, 0.203253f, 0.193378f, 0.183911f, 0.174737f, 0.166068f, 0.157360f, 0.147829f, 0.137984f, 0.128785f, 0.119872f, 0.110662f, 0.102037f, 0.094727f, 0.087797f, 0.080834f, 0.075139f, 0.070900f, 0.066532f, 0.062189f, 0.059562f, - 0.057528f, 0.053708f, 0.049943f, 0.048889f, 0.046992f, 0.040524f, 0.035070f, 0.036201f, 0.036089f, 0.026789f, 0.019854f, 0.028515f, 0.036415f, 0.016301f, -0.020707f, -0.031384f, -0.002200f, 0.032420f, 0.043959f, 0.043313f, 0.045513f, 0.041021f, 0.025268f, 0.020977f, 0.042917f, 0.069031f, 0.074200f, 0.068229f, 0.074435f, 0.093211f, 0.111764f, 0.127851f, 0.138412f, 0.126789f, 0.090350f, 0.062570f, 0.076196f, 0.116262f, 0.139539f, 0.132391f, 0.119607f, 0.119984f, 0.124718f, 0.125718f, 0.138639f, 0.182077f, 0.246020f, 0.293881f} - }, - { - {-0.004423f, -0.003680f, -0.002575f, -0.001704f, -0.003298f, -0.009990f, -0.016789f, -0.009381f, 0.013931f, 0.019772f, -0.029696f, -0.105359f, -0.108022f, 0.013139f, 0.158404f, 0.164232f, 0.005487f, -0.155136f, -0.155733f, -0.019301f, 0.099136f, 0.104894f, 0.038243f, -0.019329f, -0.038505f, -0.031569f, -0.007440f, 0.030512f, 0.068864f, 0.092556f, 0.099631f, 0.096497f, 0.087824f, 0.077833f, 0.072061f, 0.071039f, 0.067981f, 0.056527f, 0.036499f, 0.011015f, -0.016897f, -0.043579f, -0.064988f, -0.079286f, -0.087153f, -0.089777f, -0.088480f, -0.085494f, -0.082997f, -0.081746f, -0.081767f, -0.083418f, -0.086783f, -0.090960f, -0.094751f, -0.097418f, -0.098548f, -0.098108f, -0.096834f, -0.095829f, -0.095756f, -0.096938f, -0.099845f, -0.104733f, -0.111080f, -0.118033f, -0.125180f, -0.132437f, -0.139508f, -0.145970f, -0.151644f, -0.156453f, -0.160072f, -0.162123f, -0.162733f, -0.162527f, -0.161866f, -0.160437f, -0.157991f, -0.155238f, -0.153188f, -0.151562f, -0.148788f, -0.143986f, -0.138030f, -0.131928f, -0.124917f, -0.115172f, -0.102129f, -0.087299f, -0.072817f, -0.059768f, -0.048018f, -0.037364f, -0.028595f, -0.023189f, - -0.021839f, -0.023601f, -0.026896f, -0.031210f, -0.037395f, -0.046314f, -0.057460f, -0.068846f, -0.078064f, -0.083668f, -0.085857f, -0.085916f, -0.084872f, -0.082672f, -0.078518f, -0.071816f, -0.062803f, -0.052472f, -0.041961f, -0.031940f, -0.022440f, -0.013098f, -0.003491f, 0.006606f, 0.017075f, 0.027610f, 0.038115f, 0.048801f, 0.059796f, 0.070835f, 0.081425f, 0.091108f, 0.099513f, 0.106449f, 0.112073f, 0.116786f, 0.120921f, 0.124710f, 0.128466f, 0.132563f, 0.137299f, 0.142939f, 0.149802f, 0.158143f, 0.168056f, 0.179520f, 0.192346f, 0.206065f, 0.220068f, 0.233786f, 0.246615f, 0.257930f, 0.267420f, 0.275131f, 0.280999f, 0.284712f, 0.286146f, 0.285449f, 0.282583f, 0.277328f, 0.269804f, 0.260438f, 0.249489f, 0.237152f, 0.223959f, 0.210474f, 0.196856f, 0.183212f, 0.169971f, 0.157536f, 0.146111f, 0.136111f, 0.127934f, 0.121231f, 0.115268f, 0.109883f, 0.105097f, 0.100223f, 0.094576f, 0.088506f, 0.082554f, 0.076446f, 0.069926f, 0.063313f, 0.056344f, 0.048087f, 0.038644f, 0.028934f, 0.018687f, 0.007186f, -0.004414f, -0.014506f, -0.023733f, -0.033085f, -0.041408f, -0.048241f, - -0.055610f, -0.063517f, -0.069118f, -0.073690f, -0.081987f, -0.091437f, -0.094480f, -0.095028f, -0.104280f, -0.115905f, -0.112025f, -0.101605f, -0.115283f, -0.144765f, -0.134628f, -0.067980f, -0.010744f, -0.020992f, -0.061710f, -0.068485f, -0.059208f, -0.090471f, -0.135033f, -0.106671f, -0.005182f, 0.066546f, 0.051133f, 0.009516f, 0.011923f, 0.041853f, 0.055633f, 0.061571f, 0.078429f, 0.074336f, 0.017492f, -0.049276f, -0.053327f, 0.006541f, 0.062892f, 0.074902f, 0.066734f, 0.070182f, 0.080188f, 0.084197f, 0.098518f, 0.148064f, 0.224120f, 0.282366f}, - {-0.004423f, -0.003680f, -0.002575f, -0.001704f, -0.003298f, -0.009990f, -0.016789f, -0.009381f, 0.013931f, 0.019772f, -0.029696f, -0.105359f, -0.108022f, 0.013139f, 0.158404f, 0.164232f, 0.005487f, -0.155136f, -0.155733f, -0.019301f, 0.099136f, 0.104894f, 0.038243f, -0.019329f, -0.038505f, -0.031569f, -0.007440f, 0.030512f, 0.068864f, 0.092556f, 0.099631f, 0.096497f, 0.087824f, 0.077833f, 0.072061f, 0.071039f, 0.067981f, 0.056527f, 0.036499f, 0.011015f, -0.016897f, -0.043579f, -0.064988f, -0.079286f, -0.087153f, -0.089777f, -0.088480f, -0.085494f, -0.082997f, -0.081746f, -0.081767f, -0.083418f, -0.086783f, -0.090960f, -0.094751f, -0.097418f, -0.098548f, -0.098108f, -0.096834f, -0.095829f, -0.095756f, -0.096938f, -0.099845f, -0.104733f, -0.111080f, -0.118033f, -0.125180f, -0.132437f, -0.139508f, -0.145970f, -0.151644f, -0.156453f, -0.160072f, -0.162123f, -0.162733f, -0.162527f, -0.161866f, -0.160437f, -0.157991f, -0.155238f, -0.153188f, -0.151562f, -0.148788f, -0.143986f, -0.138030f, -0.131928f, -0.124917f, -0.115172f, -0.102129f, -0.087299f, -0.072817f, -0.059768f, -0.048018f, -0.037364f, -0.028595f, -0.023189f, - -0.021839f, -0.023601f, -0.026896f, -0.031210f, -0.037395f, -0.046314f, -0.057460f, -0.068846f, -0.078064f, -0.083668f, -0.085857f, -0.085916f, -0.084872f, -0.082672f, -0.078518f, -0.071816f, -0.062803f, -0.052472f, -0.041961f, -0.031940f, -0.022440f, -0.013098f, -0.003491f, 0.006606f, 0.017075f, 0.027610f, 0.038115f, 0.048801f, 0.059796f, 0.070835f, 0.081425f, 0.091108f, 0.099513f, 0.106449f, 0.112073f, 0.116786f, 0.120921f, 0.124710f, 0.128466f, 0.132563f, 0.137299f, 0.142939f, 0.149802f, 0.158143f, 0.168056f, 0.179520f, 0.192346f, 0.206065f, 0.220068f, 0.233786f, 0.246615f, 0.257930f, 0.267420f, 0.275131f, 0.280999f, 0.284712f, 0.286146f, 0.285449f, 0.282583f, 0.277328f, 0.269804f, 0.260438f, 0.249489f, 0.237152f, 0.223959f, 0.210474f, 0.196856f, 0.183212f, 0.169971f, 0.157536f, 0.146111f, 0.136111f, 0.127934f, 0.121231f, 0.115268f, 0.109883f, 0.105097f, 0.100223f, 0.094576f, 0.088506f, 0.082554f, 0.076446f, 0.069926f, 0.063313f, 0.056344f, 0.048087f, 0.038644f, 0.028934f, 0.018687f, 0.007186f, -0.004414f, -0.014506f, -0.023733f, -0.033085f, -0.041408f, -0.048241f, - -0.055610f, -0.063517f, -0.069118f, -0.073690f, -0.081987f, -0.091437f, -0.094480f, -0.095028f, -0.104280f, -0.115905f, -0.112025f, -0.101605f, -0.115283f, -0.144765f, -0.134628f, -0.067980f, -0.010744f, -0.020992f, -0.061710f, -0.068485f, -0.059208f, -0.090471f, -0.135033f, -0.106671f, -0.005182f, 0.066546f, 0.051133f, 0.009516f, 0.011923f, 0.041853f, 0.055633f, 0.061571f, 0.078429f, 0.074336f, 0.017492f, -0.049276f, -0.053327f, 0.006541f, 0.062892f, 0.074902f, 0.066734f, 0.070182f, 0.080188f, 0.084197f, 0.098518f, 0.148064f, 0.224120f, 0.282366f} - } -}; -const float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][240]={ - { - {-0.176883f, -0.484101f, -0.681502f, -0.759839f, -0.743260f, -0.671712f, -0.583362f, -0.478304f, -0.318825f, -0.095272f, 0.143578f, 0.354065f, 0.522400f, 0.573653f, 0.367199f, -0.078420f, -0.434443f, -0.343870f, 0.124508f, 0.486226f, 0.372821f, -0.092766f, -0.525036f, -0.722391f, -0.754199f, -0.724386f, -0.637689f, -0.485195f, -0.312888f, -0.164002f, -0.032292f, 0.097628f, 0.214974f, 0.307441f, 0.382911f, 0.451049f, 0.508993f, 0.554173f, 0.591982f, 0.625936f, 0.654364f, 0.677958f, 0.699685f, 0.718618f, 0.732355f, 0.742627f, 0.751969f, 0.759034f, 0.762320f, 0.763889f, 0.765445f, 0.765427f, 0.762747f, 0.758848f, 0.754374f, 0.748173f, 0.740408f, 0.732723f, 0.725282f, 0.717124f, 0.708777f, 0.701375f, 0.694353f, 0.686709f, 0.679081f, 0.672366f, 0.665974f, 0.659245f, 0.652813f, 0.647208f, 0.641839f, 0.636297f, 0.631020f, 0.626150f, 0.621184f, 0.615916f, 0.610540f, 0.605002f, 0.599137f, 0.592942f, 0.586130f, 0.578295f, 0.569816f, 0.561467f, 0.553030f, 0.543661f, 0.533605f, 0.523989f, 0.514958f, 0.505546f, 0.495406f, 0.485340f, 0.476136f, 0.467922f, 0.460482f, 0.453537f, - 0.447032f, 0.441566f, 0.437916f, 0.435874f, 0.434316f, 0.432632f, 0.431274f, 0.430811f, 0.431194f, 0.431966f, 0.432511f, 0.432256f, 0.431201f, 0.430003f, 0.429097f, 0.428076f, 0.426269f, 0.423428f, 0.419640f, 0.415127f, 0.410339f, 0.405686f, 0.401048f, 0.395985f, 0.390391f, 0.384517f, 0.378555f, 0.372595f, 0.366765f, 0.361032f, 0.355147f, 0.349030f, 0.342953f, 0.337206f, 0.331908f, 0.327170f, 0.323068f, 0.319457f, 0.316138f, 0.313128f, 0.310528f, 0.308327f, 0.306547f, 0.305321f, 0.304600f, 0.304043f, 0.303340f, 0.302393f, 0.301119f, 0.299399f, 0.297227f, 0.294657f, 0.291623f, 0.288018f, 0.283862f, 0.279239f, 0.274219f, 0.268923f, 0.263528f, 0.258150f, 0.252868f, 0.247800f, 0.243031f, 0.238568f, 0.234457f, 0.230786f, 0.227529f, 0.224597f, 0.221967f, 0.219543f, 0.217037f, 0.214279f, 0.211416f, 0.208572f, 0.205658f, 0.202707f, 0.199947f, 0.197400f, 0.194917f, 0.192647f, 0.190846f, 0.189375f, 0.188016f, 0.186967f, 0.186341f, 0.185707f, 0.184804f, 0.183946f, 0.183129f, 0.181782f, 0.179880f, 0.177983f, 0.175907f, 0.173014f, 0.169749f, 0.166885f, - 0.163721f, 0.159457f, 0.155288f, 0.152176f, 0.148348f, 0.142651f, 0.137657f, 0.134832f, 0.130418f, 0.122200f, 0.115519f, 0.114151f, 0.110369f, 0.095566f, 0.077072f, 0.070974f, 0.079309f, 0.087709f, 0.085554f, 0.075310f, 0.062218f, 0.049806f, 0.047081f, 0.063318f, 0.089933f, 0.102721f, 0.090827f, 0.071653f, 0.068003f, 0.080960f, 0.096237f, 0.109049f, 0.128470f, 0.157990f, 0.183447f, 0.185496f, 0.159930f, 0.121484f, 0.088399f, 0.066734f, 0.051403f, 0.038568f, 0.029965f, 0.024659f, 0.015630f, 0.000683f, -0.009979f, -0.006119f}, - {-0.176883f, -0.484101f, -0.681502f, -0.759839f, -0.743260f, -0.671712f, -0.583362f, -0.478304f, -0.318825f, -0.095272f, 0.143578f, 0.354065f, 0.522400f, 0.573653f, 0.367199f, -0.078420f, -0.434443f, -0.343870f, 0.124508f, 0.486226f, 0.372821f, -0.092766f, -0.525036f, -0.722391f, -0.754199f, -0.724386f, -0.637689f, -0.485195f, -0.312888f, -0.164002f, -0.032292f, 0.097628f, 0.214974f, 0.307441f, 0.382911f, 0.451049f, 0.508993f, 0.554173f, 0.591982f, 0.625936f, 0.654364f, 0.677958f, 0.699685f, 0.718618f, 0.732355f, 0.742627f, 0.751969f, 0.759034f, 0.762320f, 0.763889f, 0.765445f, 0.765427f, 0.762747f, 0.758848f, 0.754374f, 0.748173f, 0.740408f, 0.732723f, 0.725282f, 0.717124f, 0.708777f, 0.701375f, 0.694353f, 0.686709f, 0.679081f, 0.672366f, 0.665974f, 0.659245f, 0.652813f, 0.647208f, 0.641839f, 0.636297f, 0.631020f, 0.626150f, 0.621184f, 0.615916f, 0.610540f, 0.605002f, 0.599137f, 0.592942f, 0.586130f, 0.578295f, 0.569816f, 0.561467f, 0.553030f, 0.543661f, 0.533605f, 0.523989f, 0.514958f, 0.505546f, 0.495406f, 0.485340f, 0.476136f, 0.467922f, 0.460482f, 0.453537f, - 0.447032f, 0.441566f, 0.437916f, 0.435874f, 0.434316f, 0.432632f, 0.431274f, 0.430811f, 0.431194f, 0.431966f, 0.432511f, 0.432256f, 0.431201f, 0.430003f, 0.429097f, 0.428076f, 0.426269f, 0.423428f, 0.419640f, 0.415127f, 0.410339f, 0.405686f, 0.401048f, 0.395985f, 0.390391f, 0.384517f, 0.378555f, 0.372595f, 0.366765f, 0.361032f, 0.355147f, 0.349030f, 0.342953f, 0.337206f, 0.331908f, 0.327170f, 0.323068f, 0.319457f, 0.316138f, 0.313128f, 0.310528f, 0.308327f, 0.306547f, 0.305321f, 0.304600f, 0.304043f, 0.303340f, 0.302393f, 0.301119f, 0.299399f, 0.297227f, 0.294657f, 0.291623f, 0.288018f, 0.283862f, 0.279239f, 0.274219f, 0.268923f, 0.263528f, 0.258150f, 0.252868f, 0.247800f, 0.243031f, 0.238568f, 0.234457f, 0.230786f, 0.227529f, 0.224597f, 0.221967f, 0.219543f, 0.217037f, 0.214279f, 0.211416f, 0.208572f, 0.205658f, 0.202707f, 0.199947f, 0.197400f, 0.194917f, 0.192647f, 0.190846f, 0.189375f, 0.188016f, 0.186967f, 0.186341f, 0.185707f, 0.184804f, 0.183946f, 0.183129f, 0.181782f, 0.179880f, 0.177983f, 0.175907f, 0.173014f, 0.169749f, 0.166885f, - 0.163721f, 0.159457f, 0.155288f, 0.152176f, 0.148348f, 0.142651f, 0.137657f, 0.134832f, 0.130418f, 0.122200f, 0.115519f, 0.114151f, 0.110369f, 0.095566f, 0.077072f, 0.070974f, 0.079309f, 0.087709f, 0.085554f, 0.075310f, 0.062218f, 0.049806f, 0.047081f, 0.063318f, 0.089933f, 0.102721f, 0.090827f, 0.071653f, 0.068003f, 0.080960f, 0.096237f, 0.109049f, 0.128470f, 0.157990f, 0.183447f, 0.185496f, 0.159930f, 0.121484f, 0.088399f, 0.066734f, 0.051403f, 0.038568f, 0.029965f, 0.024659f, 0.015630f, 0.000683f, -0.009979f, -0.006119f} - }, - { - {0.139811f, 0.337680f, 0.309928f, 0.007865f, -0.460052f, -0.904017f, -1.187273f, -1.245347f, -1.047341f, -0.642813f, -0.178251f, 0.255482f, 0.696327f, 1.065155f, 0.997728f, 0.263824f, -0.669296f, -0.911797f, -0.169209f, 0.827247f, 1.142336f, 0.643160f, -0.071883f, -0.512664f, -0.694340f, -0.796456f, -0.832000f, -0.752642f, -0.618206f, -0.514447f, -0.432971f, -0.329732f, -0.215270f, -0.120320f, -0.037944f, 0.050458f, 0.138590f, 0.216448f, 0.291141f, 0.367466f, 0.437249f, 0.497434f, 0.554267f, 0.607280f, 0.650114f, 0.684871f, 0.717859f, 0.746604f, 0.765897f, 0.779257f, 0.792413f, 0.803890f, 0.811171f, 0.817031f, 0.823086f, 0.826132f, 0.825083f, 0.822817f, 0.819425f, 0.812156f, 0.801947f, 0.792033f, 0.781683f, 0.768517f, 0.754237f, 0.741632f, 0.729521f, 0.716105f, 0.703200f, 0.692765f, 0.683590f, 0.674714f, 0.667761f, 0.663634f, 0.661007f, 0.659222f, 0.658950f, 0.659915f, 0.661194f, 0.662882f, 0.664859f, 0.665785f, 0.665416f, 0.665313f, 0.665679f, 0.664686f, 0.662061f, 0.659813f, 0.658729f, 0.657658f, 0.656469f, 0.656268f, 0.656891f, 0.657238f, 0.657303f, 0.657243f, - 0.655771f, 0.651744f, 0.645638f, 0.637693f, 0.626755f, 0.612363f, 0.595752f, 0.577822f, 0.558363f, 0.537653f, 0.516647f, 0.495719f, 0.475297f, 0.457049f, 0.442419f, 0.430883f, 0.421223f, 0.413188f, 0.406700f, 0.401222f, 0.396933f, 0.394659f, 0.393933f, 0.392945f, 0.390662f, 0.387246f, 0.382789f, 0.377529f, 0.372623f, 0.368899f, 0.365629f, 0.361963f, 0.358320f, 0.355195f, 0.352156f, 0.348998f, 0.346276f, 0.344053f, 0.341722f, 0.339344f, 0.337548f, 0.336220f, 0.334859f, 0.333734f, 0.333307f, 0.333272f, 0.333372f, 0.334113f, 0.335707f, 0.337542f, 0.339297f, 0.341219f, 0.343021f, 0.344012f, 0.344285f, 0.344318f, 0.343803f, 0.342252f, 0.340023f, 0.337478f, 0.334140f, 0.329736f, 0.324809f, 0.319534f, 0.313397f, 0.306449f, 0.299331f, 0.291965f, 0.283816f, 0.275134f, 0.266430f, 0.257468f, 0.248114f, 0.239081f, 0.230677f, 0.222271f, 0.213733f, 0.205671f, 0.197839f, 0.189344f, 0.180405f, 0.171906f, 0.163769f, 0.155721f, 0.148459f, 0.142253f, 0.136125f, 0.129829f, 0.124280f, 0.119189f, 0.113229f, 0.106765f, 0.101047f, 0.095433f, 0.088960f, 0.082699f, - 0.077090f, 0.070452f, 0.063164f, 0.057658f, 0.052165f, 0.042986f, 0.033716f, 0.029705f, 0.024528f, 0.010022f, -0.003487f, -0.003563f, -0.008281f, -0.044222f, -0.091161f, -0.097337f, -0.059345f, -0.032430f, -0.044938f, -0.063814f, -0.071121f, -0.106555f, -0.189396f, -0.259807f, -0.255503f, -0.202390f, -0.174583f, -0.199128f, -0.246722f, -0.285440f, -0.305850f, -0.323862f, -0.381849f, -0.499832f, -0.602701f, -0.562505f, -0.358033f, -0.132175f, -0.035515f, -0.063390f, -0.105690f, -0.109852f, -0.119592f, -0.173771f, -0.239521f, -0.254709f, -0.192460f, -0.071071f}, - {-0.139811f, -0.337680f, -0.309928f, -0.007865f, 0.460052f, 0.904017f, 1.187273f, 1.245347f, 1.047341f, 0.642813f, 0.178251f, -0.255482f, -0.696327f, -1.065155f, -0.997728f, -0.263824f, 0.669296f, 0.911797f, 0.169209f, -0.827247f, -1.142336f, -0.643160f, 0.071883f, 0.512664f, 0.694340f, 0.796456f, 0.832000f, 0.752642f, 0.618206f, 0.514447f, 0.432971f, 0.329732f, 0.215270f, 0.120320f, 0.037944f, -0.050458f, -0.138590f, -0.216448f, -0.291141f, -0.367466f, -0.437249f, -0.497434f, -0.554267f, -0.607280f, -0.650114f, -0.684871f, -0.717859f, -0.746604f, -0.765897f, -0.779257f, -0.792413f, -0.803890f, -0.811171f, -0.817031f, -0.823086f, -0.826132f, -0.825083f, -0.822817f, -0.819425f, -0.812156f, -0.801947f, -0.792033f, -0.781683f, -0.768517f, -0.754237f, -0.741632f, -0.729521f, -0.716105f, -0.703200f, -0.692765f, -0.683590f, -0.674714f, -0.667761f, -0.663634f, -0.661007f, -0.659222f, -0.658950f, -0.659915f, -0.661194f, -0.662882f, -0.664859f, -0.665785f, -0.665416f, -0.665313f, -0.665679f, -0.664686f, -0.662061f, -0.659813f, -0.658729f, -0.657658f, -0.656469f, -0.656268f, -0.656891f, -0.657238f, -0.657303f, -0.657243f, - -0.655771f, -0.651744f, -0.645638f, -0.637693f, -0.626755f, -0.612363f, -0.595752f, -0.577822f, -0.558363f, -0.537653f, -0.516647f, -0.495719f, -0.475297f, -0.457049f, -0.442419f, -0.430883f, -0.421223f, -0.413188f, -0.406700f, -0.401222f, -0.396933f, -0.394659f, -0.393933f, -0.392945f, -0.390662f, -0.387246f, -0.382789f, -0.377529f, -0.372623f, -0.368899f, -0.365629f, -0.361963f, -0.358320f, -0.355195f, -0.352156f, -0.348998f, -0.346276f, -0.344053f, -0.341722f, -0.339344f, -0.337548f, -0.336220f, -0.334859f, -0.333734f, -0.333307f, -0.333272f, -0.333372f, -0.334113f, -0.335707f, -0.337542f, -0.339297f, -0.341219f, -0.343021f, -0.344012f, -0.344285f, -0.344318f, -0.343803f, -0.342252f, -0.340023f, -0.337478f, -0.334140f, -0.329736f, -0.324809f, -0.319534f, -0.313397f, -0.306449f, -0.299331f, -0.291965f, -0.283816f, -0.275134f, -0.266430f, -0.257468f, -0.248114f, -0.239081f, -0.230677f, -0.222271f, -0.213733f, -0.205671f, -0.197839f, -0.189344f, -0.180405f, -0.171906f, -0.163769f, -0.155721f, -0.148459f, -0.142253f, -0.136125f, -0.129829f, -0.124280f, -0.119189f, -0.113229f, -0.106765f, -0.101047f, -0.095433f, -0.088960f, -0.082699f, - -0.077090f, -0.070452f, -0.063164f, -0.057658f, -0.052165f, -0.042986f, -0.033716f, -0.029705f, -0.024528f, -0.010022f, 0.003487f, 0.003563f, 0.008281f, 0.044222f, 0.091161f, 0.097337f, 0.059345f, 0.032430f, 0.044938f, 0.063814f, 0.071121f, 0.106555f, 0.189396f, 0.259807f, 0.255503f, 0.202390f, 0.174583f, 0.199128f, 0.246722f, 0.285440f, 0.305850f, 0.323862f, 0.381849f, 0.499832f, 0.602701f, 0.562505f, 0.358033f, 0.132175f, 0.035515f, 0.063390f, 0.105690f, 0.109852f, 0.119592f, 0.173771f, 0.239521f, 0.254709f, 0.192460f, 0.071071f} - }, - { - {-0.016781f, -0.068243f, -0.130746f, -0.141416f, -0.067559f, 0.038187f, 0.093997f, 0.073178f, 0.011465f, -0.045861f, -0.075899f, -0.068574f, -0.019327f, 0.052634f, 0.094768f, 0.060753f, -0.027027f, -0.077305f, -0.023530f, 0.088252f, 0.138743f, 0.067072f, -0.068421f, -0.168551f, -0.195815f, -0.179551f, -0.154143f, -0.128577f, -0.102726f, -0.079391f, -0.057784f, -0.033774f, -0.009097f, 0.009560f, 0.019329f, 0.021904f, 0.018986f, 0.013454f, 0.011658f, 0.018744f, 0.033844f, 0.053207f, 0.075186f, 0.099543f, 0.125114f, 0.150979f, 0.177911f, 0.206990f, 0.238370f, 0.272065f, 0.308056f, 0.345140f, 0.381215f, 0.414936f, 0.445808f, 0.472862f, 0.494658f, 0.510583f, 0.520909f, 0.525555f, 0.523765f, 0.515041f, 0.499435f, 0.476740f, 0.446232f, 0.407570f, 0.361399f, 0.308775f, 0.250601f, 0.188053f, 0.122990f, 0.057485f, -0.006595f, -0.067182f, -0.121979f, -0.169504f, -0.209530f, -0.241819f, -0.265268f, -0.279334f, -0.285567f, -0.286357f, -0.282397f, -0.272798f, -0.257898f, -0.240486f, -0.223313f, -0.206272f, -0.187317f, -0.165922f, -0.144335f, -0.125136f, -0.108811f, -0.094377f, -0.081395f, -0.070507f, - -0.062659f, -0.058663f, -0.058998f, -0.063313f, -0.070418f, -0.079177f, -0.089168f, -0.100422f, -0.112928f, -0.126214f, -0.138846f, -0.148727f, -0.154652f, -0.157196f, -0.157495f, -0.155734f, -0.151422f, -0.144279f, -0.134159f, -0.120888f, -0.104827f, -0.086912f, -0.067889f, -0.048281f, -0.029015f, -0.011094f, 0.005181f, 0.019751f, 0.031977f, 0.041217f, 0.047615f, 0.051560f, 0.053135f, 0.052694f, 0.050946f, 0.048096f, 0.044101f, 0.039876f, 0.036856f, 0.035478f, 0.035381f, 0.036484f, 0.038318f, 0.039253f, 0.038058f, 0.035282f, 0.031776f, 0.027264f, 0.021518f, 0.015211f, 0.008590f, 0.001128f, -0.006896f, -0.014429f, -0.021357f, -0.028208f, -0.034548f, -0.039784f, -0.044670f, -0.050039f, -0.055371f, -0.060341f, -0.065860f, -0.072126f, -0.078038f, -0.083530f, -0.089755f, -0.096500f, -0.102463f, -0.107840f, -0.113445f, -0.118322f, -0.121541f, -0.124548f, -0.128590f, -0.132518f, -0.135868f, -0.140523f, -0.147120f, -0.154177f, -0.162021f, -0.172330f, -0.183624f, -0.193140f, -0.201940f, -0.211830f, -0.220237f, -0.224852f, -0.228495f, -0.232832f, -0.234204f, -0.231610f, -0.229485f, -0.228034f, -0.222763f, -0.215763f, - -0.212373f, -0.207950f, -0.196785f, -0.187807f, -0.187735f, -0.181688f, -0.161030f, -0.148748f, -0.156874f, -0.151004f, -0.112810f, -0.094549f, -0.130495f, -0.140613f, -0.036068f, 0.110983f, 0.139885f, 0.034927f, -0.060252f, -0.070101f, -0.069384f, -0.102012f, -0.083008f, 0.039303f, 0.160141f, 0.158502f, 0.064730f, -0.005748f, -0.015098f, -0.015700f, -0.048894f, -0.098403f, -0.116107f, -0.060059f, 0.057678f, 0.146655f, 0.115290f, -0.010018f, -0.101454f, -0.085603f, -0.021018f, 0.005687f, -0.004967f, 0.000661f, 0.032397f, 0.052112f, 0.040359f, 0.013723f}, - {-0.016781f, -0.068243f, -0.130746f, -0.141416f, -0.067559f, 0.038187f, 0.093997f, 0.073178f, 0.011465f, -0.045861f, -0.075899f, -0.068574f, -0.019327f, 0.052634f, 0.094768f, 0.060753f, -0.027027f, -0.077305f, -0.023530f, 0.088252f, 0.138743f, 0.067072f, -0.068421f, -0.168551f, -0.195815f, -0.179551f, -0.154143f, -0.128577f, -0.102726f, -0.079391f, -0.057784f, -0.033774f, -0.009097f, 0.009560f, 0.019329f, 0.021904f, 0.018986f, 0.013454f, 0.011658f, 0.018744f, 0.033844f, 0.053207f, 0.075186f, 0.099543f, 0.125114f, 0.150979f, 0.177911f, 0.206990f, 0.238370f, 0.272065f, 0.308056f, 0.345140f, 0.381215f, 0.414936f, 0.445808f, 0.472862f, 0.494658f, 0.510583f, 0.520909f, 0.525555f, 0.523765f, 0.515041f, 0.499435f, 0.476740f, 0.446232f, 0.407570f, 0.361399f, 0.308775f, 0.250601f, 0.188053f, 0.122990f, 0.057485f, -0.006595f, -0.067182f, -0.121979f, -0.169504f, -0.209530f, -0.241819f, -0.265268f, -0.279334f, -0.285567f, -0.286357f, -0.282397f, -0.272798f, -0.257898f, -0.240486f, -0.223313f, -0.206272f, -0.187317f, -0.165922f, -0.144335f, -0.125136f, -0.108811f, -0.094377f, -0.081395f, -0.070507f, - -0.062659f, -0.058663f, -0.058998f, -0.063313f, -0.070418f, -0.079177f, -0.089168f, -0.100422f, -0.112928f, -0.126214f, -0.138846f, -0.148727f, -0.154652f, -0.157196f, -0.157495f, -0.155734f, -0.151422f, -0.144279f, -0.134159f, -0.120888f, -0.104827f, -0.086912f, -0.067889f, -0.048281f, -0.029015f, -0.011094f, 0.005181f, 0.019751f, 0.031977f, 0.041217f, 0.047615f, 0.051560f, 0.053135f, 0.052694f, 0.050946f, 0.048096f, 0.044101f, 0.039876f, 0.036856f, 0.035478f, 0.035381f, 0.036484f, 0.038318f, 0.039253f, 0.038058f, 0.035282f, 0.031776f, 0.027264f, 0.021518f, 0.015211f, 0.008590f, 0.001128f, -0.006896f, -0.014429f, -0.021357f, -0.028208f, -0.034548f, -0.039784f, -0.044670f, -0.050039f, -0.055371f, -0.060341f, -0.065860f, -0.072126f, -0.078038f, -0.083530f, -0.089755f, -0.096500f, -0.102463f, -0.107840f, -0.113445f, -0.118322f, -0.121541f, -0.124548f, -0.128590f, -0.132518f, -0.135868f, -0.140523f, -0.147120f, -0.154177f, -0.162021f, -0.172330f, -0.183624f, -0.193140f, -0.201940f, -0.211830f, -0.220237f, -0.224852f, -0.228495f, -0.232832f, -0.234204f, -0.231610f, -0.229485f, -0.228034f, -0.222763f, -0.215763f, - -0.212373f, -0.207950f, -0.196785f, -0.187807f, -0.187735f, -0.181688f, -0.161030f, -0.148748f, -0.156874f, -0.151004f, -0.112810f, -0.094549f, -0.130495f, -0.140613f, -0.036068f, 0.110983f, 0.139885f, 0.034927f, -0.060252f, -0.070101f, -0.069384f, -0.102012f, -0.083008f, 0.039303f, 0.160141f, 0.158502f, 0.064730f, -0.005748f, -0.015098f, -0.015700f, -0.048894f, -0.098403f, -0.116107f, -0.060059f, 0.057678f, 0.146655f, 0.115290f, -0.010018f, -0.101454f, -0.085603f, -0.021018f, 0.005687f, -0.004967f, 0.000661f, 0.032397f, 0.052112f, 0.040359f, 0.013723f} - }, - { - {0.006419f, -0.000380f, -0.044417f, -0.097071f, -0.106348f, -0.055854f, 0.004864f, 0.009382f, -0.047117f, -0.104090f, -0.111791f, -0.074420f, -0.009073f, 0.081673f, 0.159525f, 0.135409f, -0.015787f, -0.158879f, -0.117328f, 0.102390f, 0.292403f, 0.276855f, 0.089234f, -0.117191f, -0.257832f, -0.352481f, -0.428424f, -0.472227f, -0.470382f, -0.436585f, -0.386629f, -0.319685f, -0.232981f, -0.133703f, -0.030900f, 0.070632f, 0.166068f, 0.249726f, 0.319333f, 0.375582f, 0.418982f, 0.450841f, 0.474355f, 0.491560f, 0.502057f, 0.506326f, 0.506785f, 0.504408f, 0.497667f, 0.485632f, 0.469281f, 0.449749f, 0.428169f, 0.407143f, 0.389707f, 0.376669f, 0.366612f, 0.357997f, 0.349801f, 0.340868f, 0.330294f, 0.318219f, 0.305334f, 0.291955f, 0.278163f, 0.264312f, 0.250670f, 0.236749f, 0.221537f, 0.204458f, 0.185733f, 0.165583f, 0.143517f, 0.119055f, 0.092907f, 0.066472f, 0.040271f, 0.014131f, -0.011039f, -0.033282f, -0.051808f, -0.067531f, -0.080714f, -0.089863f, -0.094019f, -0.094607f, -0.093686f, -0.091642f, -0.087952f, -0.083101f, -0.078109f, -0.072686f, -0.065387f, -0.055476f, -0.043458f, -0.029662f, - -0.013257f, 0.006916f, 0.031000f, 0.057968f, 0.086658f, 0.116744f, 0.148568f, 0.181979f, 0.215566f, 0.247404f, 0.276573f, 0.303534f, 0.328908f, 0.352272f, 0.372331f, 0.388025f, 0.399465f, 0.408063f, 0.415676f, 0.423147f, 0.429593f, 0.433431f, 0.434049f, 0.432310f, 0.429814f, 0.428057f, 0.427836f, 0.428809f, 0.429787f, 0.429913f, 0.429361f, 0.428784f, 0.428608f, 0.429050f, 0.430098f, 0.431131f, 0.431113f, 0.429393f, 0.425893f, 0.420648f, 0.413761f, 0.405616f, 0.396473f, 0.386033f, 0.373928f, 0.360298f, 0.345527f, 0.329947f, 0.314161f, 0.299015f, 0.284997f, 0.272196f, 0.260812f, 0.251021f, 0.242599f, 0.235398f, 0.229778f, 0.225921f, 0.223433f, 0.222164f, 0.222404f, 0.223783f, 0.225163f, 0.226017f, 0.226580f, 0.226598f, 0.225440f, 0.223398f, 0.221323f, 0.219343f, 0.217296f, 0.215536f, 0.213959f, 0.211506f, 0.207783f, 0.203519f, 0.198702f, 0.192425f, 0.184911f, 0.177078f, 0.168256f, 0.157265f, 0.144949f, 0.132581f, 0.119457f, 0.105218f, 0.091890f, 0.080542f, 0.069569f, 0.058845f, 0.050696f, 0.044902f, 0.038873f, 0.033407f, 0.030820f, 0.028752f, - 0.024794f, 0.023084f, 0.025581f, 0.025045f, 0.019741f, 0.021233f, 0.031130f, 0.031471f, 0.020092f, 0.024258f, 0.047646f, 0.046851f, 0.010282f, 0.010120f, 0.099751f, 0.203325f, 0.205161f, 0.119406f, 0.059799f, 0.059279f, 0.047887f, 0.012235f, 0.034847f, 0.136400f, 0.209510f, 0.173631f, 0.089751f, 0.051420f, 0.052166f, 0.034003f, -0.009700f, -0.054980f, -0.105932f, -0.156941f, -0.150251f, -0.050937f, 0.072024f, 0.116139f, 0.076669f, 0.039024f, 0.051258f, 0.072987f, 0.059581f, 0.035660f, 0.051333f, 0.098827f, 0.112731f, 0.050734f}, - {0.006419f, -0.000380f, -0.044417f, -0.097071f, -0.106348f, -0.055854f, 0.004864f, 0.009382f, -0.047117f, -0.104090f, -0.111791f, -0.074420f, -0.009073f, 0.081673f, 0.159525f, 0.135409f, -0.015787f, -0.158879f, -0.117328f, 0.102390f, 0.292403f, 0.276855f, 0.089234f, -0.117191f, -0.257832f, -0.352481f, -0.428424f, -0.472227f, -0.470382f, -0.436585f, -0.386629f, -0.319685f, -0.232981f, -0.133703f, -0.030900f, 0.070632f, 0.166068f, 0.249726f, 0.319333f, 0.375582f, 0.418982f, 0.450841f, 0.474355f, 0.491560f, 0.502057f, 0.506326f, 0.506785f, 0.504408f, 0.497667f, 0.485632f, 0.469281f, 0.449749f, 0.428169f, 0.407143f, 0.389707f, 0.376669f, 0.366612f, 0.357997f, 0.349801f, 0.340868f, 0.330294f, 0.318219f, 0.305334f, 0.291955f, 0.278163f, 0.264312f, 0.250670f, 0.236749f, 0.221537f, 0.204458f, 0.185733f, 0.165583f, 0.143517f, 0.119055f, 0.092907f, 0.066472f, 0.040271f, 0.014131f, -0.011039f, -0.033282f, -0.051808f, -0.067531f, -0.080714f, -0.089863f, -0.094019f, -0.094607f, -0.093686f, -0.091642f, -0.087952f, -0.083101f, -0.078109f, -0.072686f, -0.065387f, -0.055476f, -0.043458f, -0.029662f, - -0.013257f, 0.006916f, 0.031000f, 0.057968f, 0.086658f, 0.116744f, 0.148568f, 0.181979f, 0.215566f, 0.247404f, 0.276573f, 0.303534f, 0.328908f, 0.352272f, 0.372331f, 0.388025f, 0.399465f, 0.408063f, 0.415676f, 0.423147f, 0.429593f, 0.433431f, 0.434049f, 0.432310f, 0.429814f, 0.428057f, 0.427836f, 0.428809f, 0.429787f, 0.429913f, 0.429361f, 0.428784f, 0.428608f, 0.429050f, 0.430098f, 0.431131f, 0.431113f, 0.429393f, 0.425893f, 0.420648f, 0.413761f, 0.405616f, 0.396473f, 0.386033f, 0.373928f, 0.360298f, 0.345527f, 0.329947f, 0.314161f, 0.299015f, 0.284997f, 0.272196f, 0.260812f, 0.251021f, 0.242599f, 0.235398f, 0.229778f, 0.225921f, 0.223433f, 0.222164f, 0.222404f, 0.223783f, 0.225163f, 0.226017f, 0.226580f, 0.226598f, 0.225440f, 0.223398f, 0.221323f, 0.219343f, 0.217296f, 0.215536f, 0.213959f, 0.211506f, 0.207783f, 0.203519f, 0.198702f, 0.192425f, 0.184911f, 0.177078f, 0.168256f, 0.157265f, 0.144949f, 0.132581f, 0.119457f, 0.105218f, 0.091890f, 0.080542f, 0.069569f, 0.058845f, 0.050696f, 0.044902f, 0.038873f, 0.033407f, 0.030820f, 0.028752f, - 0.024794f, 0.023084f, 0.025581f, 0.025045f, 0.019741f, 0.021233f, 0.031130f, 0.031471f, 0.020092f, 0.024258f, 0.047646f, 0.046851f, 0.010282f, 0.010120f, 0.099751f, 0.203325f, 0.205161f, 0.119406f, 0.059799f, 0.059279f, 0.047887f, 0.012235f, 0.034847f, 0.136400f, 0.209510f, 0.173631f, 0.089751f, 0.051420f, 0.052166f, 0.034003f, -0.009700f, -0.054980f, -0.105932f, -0.156941f, -0.150251f, -0.050937f, 0.072024f, 0.116139f, 0.076669f, 0.039024f, 0.051258f, 0.072987f, 0.059581f, 0.035660f, 0.051333f, 0.098827f, 0.112731f, 0.050734f} - }, - { - {-0.004145f, -0.003666f, 0.011472f, 0.025737f, 0.020888f, 0.002681f, -0.005708f, -0.001729f, -0.016346f, -0.075712f, -0.160203f, -0.207765f, -0.152869f, 0.017357f, 0.211441f, 0.262841f, 0.087261f, -0.176895f, -0.266228f, -0.075175f, 0.219293f, 0.361347f, 0.282230f, 0.104299f, -0.053635f, -0.176306f, -0.281631f, -0.353803f, -0.373719f, -0.355618f, -0.322626f, -0.277765f, -0.217383f, -0.148569f, -0.078599f, -0.004588f, 0.075448f, 0.153048f, 0.217527f, 0.265298f, 0.297854f, 0.317827f, 0.329255f, 0.336467f, 0.341363f, 0.344354f, 0.346614f, 0.348711f, 0.348971f, 0.345749f, 0.339625f, 0.331802f, 0.322488f, 0.312203f, 0.302613f, 0.294865f, 0.288630f, 0.283324f, 0.278784f, 0.274543f, 0.269837f, 0.264413f, 0.258247f, 0.250753f, 0.241341f, 0.230387f, 0.218578f, 0.205635f, 0.190698f, 0.173676f, 0.155193f, 0.135271f, 0.113074f, 0.088233f, 0.061586f, 0.034088f, 0.005671f, -0.023848f, -0.053155f, -0.080091f, -0.104054f, -0.126354f, -0.147577f, -0.166135f, -0.180635f, -0.192361f, -0.203590f, -0.214103f, -0.221263f, -0.223474f, -0.221824f, -0.217974f, -0.211925f, -0.202660f, -0.190084f, -0.175511f, - -0.160523f, -0.145801f, -0.131012f, -0.115698f, -0.100234f, -0.085751f, -0.073156f, -0.062624f, -0.054028f, -0.047150f, -0.041205f, -0.034932f, -0.027678f, -0.019998f, -0.012848f, -0.006575f, -0.000758f, 0.005551f, 0.013454f, 0.023353f, 0.034257f, 0.044468f, 0.053061f, 0.060377f, 0.067374f, 0.075053f, 0.084164f, 0.094773f, 0.106230f, 0.117963f, 0.129996f, 0.142510f, 0.155380f, 0.168334f, 0.180912f, 0.192154f, 0.200956f, 0.206850f, 0.209945f, 0.210369f, 0.208393f, 0.204697f, 0.199808f, 0.193700f, 0.186516f, 0.179137f, 0.172540f, 0.167322f, 0.164156f, 0.163805f, 0.166348f, 0.171193f, 0.177950f, 0.186502f, 0.196457f, 0.207441f, 0.219566f, 0.232839f, 0.246720f, 0.260848f, 0.275255f, 0.289353f, 0.301890f, 0.312265f, 0.320652f, 0.326802f, 0.330234f, 0.331393f, 0.331081f, 0.329265f, 0.325882f, 0.321843f, 0.317809f, 0.313301f, 0.308200f, 0.303376f, 0.298948f, 0.294010f, 0.288493f, 0.282922f, 0.276566f, 0.268585f, 0.260096f, 0.252244f, 0.244001f, 0.234745f, 0.226212f, 0.219060f, 0.211305f, 0.202525f, 0.194820f, 0.188050f, 0.180130f, 0.172258f, 0.166654f, 0.160911f, - 0.153056f, 0.147449f, 0.145612f, 0.140126f, 0.129723f, 0.125834f, 0.129084f, 0.121600f, 0.102649f, 0.099485f, 0.113861f, 0.102603f, 0.058029f, 0.054997f, 0.145041f, 0.249571f, 0.251898f, 0.163725f, 0.095922f, 0.086161f, 0.074951f, 0.048383f, 0.072896f, 0.160524f, 0.219423f, 0.186863f, 0.115135f, 0.076735f, 0.067205f, 0.048319f, 0.014202f, -0.026677f, -0.067100f, -0.065851f, 0.027911f, 0.176276f, 0.254369f, 0.199913f, 0.095255f, 0.049417f, 0.061851f, 0.063067f, 0.033342f, 0.006788f, -0.006173f, -0.024075f, -0.038289f, -0.020048f}, - {0.004145f, 0.003666f, -0.011472f, -0.025737f, -0.020888f, -0.002681f, 0.005708f, 0.001729f, 0.016346f, 0.075712f, 0.160203f, 0.207765f, 0.152869f, -0.017357f, -0.211441f, -0.262841f, -0.087261f, 0.176895f, 0.266228f, 0.075175f, -0.219293f, -0.361347f, -0.282230f, -0.104299f, 0.053635f, 0.176306f, 0.281631f, 0.353803f, 0.373719f, 0.355618f, 0.322626f, 0.277765f, 0.217383f, 0.148569f, 0.078599f, 0.004588f, -0.075448f, -0.153048f, -0.217527f, -0.265298f, -0.297854f, -0.317827f, -0.329255f, -0.336467f, -0.341363f, -0.344354f, -0.346614f, -0.348711f, -0.348971f, -0.345749f, -0.339625f, -0.331802f, -0.322488f, -0.312203f, -0.302613f, -0.294865f, -0.288630f, -0.283324f, -0.278784f, -0.274543f, -0.269837f, -0.264413f, -0.258247f, -0.250753f, -0.241341f, -0.230387f, -0.218578f, -0.205635f, -0.190698f, -0.173676f, -0.155193f, -0.135271f, -0.113074f, -0.088233f, -0.061586f, -0.034088f, -0.005671f, 0.023848f, 0.053155f, 0.080091f, 0.104054f, 0.126354f, 0.147577f, 0.166135f, 0.180635f, 0.192361f, 0.203590f, 0.214103f, 0.221263f, 0.223474f, 0.221824f, 0.217974f, 0.211925f, 0.202660f, 0.190084f, 0.175511f, - 0.160523f, 0.145801f, 0.131012f, 0.115698f, 0.100234f, 0.085751f, 0.073156f, 0.062624f, 0.054028f, 0.047150f, 0.041205f, 0.034932f, 0.027678f, 0.019998f, 0.012848f, 0.006575f, 0.000758f, -0.005551f, -0.013454f, -0.023353f, -0.034257f, -0.044468f, -0.053061f, -0.060377f, -0.067374f, -0.075053f, -0.084164f, -0.094773f, -0.106230f, -0.117963f, -0.129996f, -0.142510f, -0.155380f, -0.168334f, -0.180912f, -0.192154f, -0.200956f, -0.206850f, -0.209945f, -0.210369f, -0.208393f, -0.204697f, -0.199808f, -0.193700f, -0.186516f, -0.179137f, -0.172540f, -0.167322f, -0.164156f, -0.163805f, -0.166348f, -0.171193f, -0.177950f, -0.186502f, -0.196457f, -0.207441f, -0.219566f, -0.232839f, -0.246720f, -0.260848f, -0.275255f, -0.289353f, -0.301890f, -0.312265f, -0.320652f, -0.326802f, -0.330234f, -0.331393f, -0.331081f, -0.329265f, -0.325882f, -0.321843f, -0.317809f, -0.313301f, -0.308200f, -0.303376f, -0.298948f, -0.294010f, -0.288493f, -0.282922f, -0.276566f, -0.268585f, -0.260096f, -0.252244f, -0.244001f, -0.234745f, -0.226212f, -0.219060f, -0.211305f, -0.202525f, -0.194820f, -0.188050f, -0.180130f, -0.172258f, -0.166654f, -0.160911f, - -0.153056f, -0.147449f, -0.145612f, -0.140126f, -0.129723f, -0.125834f, -0.129084f, -0.121600f, -0.102649f, -0.099485f, -0.113861f, -0.102603f, -0.058029f, -0.054997f, -0.145041f, -0.249571f, -0.251898f, -0.163725f, -0.095922f, -0.086161f, -0.074951f, -0.048383f, -0.072896f, -0.160524f, -0.219423f, -0.186863f, -0.115135f, -0.076735f, -0.067205f, -0.048319f, -0.014202f, 0.026677f, 0.067100f, 0.065851f, -0.027911f, -0.176276f, -0.254369f, -0.199913f, -0.095255f, -0.049417f, -0.061851f, -0.063067f, -0.033342f, -0.006788f, 0.006173f, 0.024075f, 0.038289f, 0.020048f} - }, - { - {-0.021669f, -0.023685f, 0.023828f, 0.034018f, -0.023524f, -0.049286f, 0.040503f, 0.161875f, 0.150811f, -0.019734f, -0.197676f, -0.229030f, -0.106401f, 0.062770f, 0.162365f, 0.129952f, -0.007762f, -0.128175f, -0.106139f, 0.044971f, 0.173666f, 0.163889f, 0.058328f, -0.023611f, -0.033294f, -0.007600f, 0.017864f, 0.044155f, 0.072516f, 0.086941f, 0.077826f, 0.052501f, 0.019845f, -0.016546f, -0.051887f, -0.081943f, -0.109000f, -0.136036f, -0.158638f, -0.169848f, -0.168532f, -0.157762f, -0.140048f, -0.118475f, -0.097856f, -0.081023f, -0.066814f, -0.053083f, -0.038732f, -0.022657f, -0.003922f, 0.016835f, 0.038572f, 0.061908f, 0.087943f, 0.115804f, 0.143100f, 0.168000f, 0.189456f, 0.206191f, 0.216814f, 0.220647f, 0.217699f, 0.207967f, 0.191048f, 0.166404f, 0.133914f, 0.094053f, 0.047458f, -0.005253f, -0.062902f, -0.123378f, -0.184188f, -0.242930f, -0.297204f, -0.344947f, -0.385106f, -0.417196f, -0.440297f, -0.453766f, -0.458836f, -0.457795f, -0.451309f, -0.438205f, -0.418365f, -0.394081f, -0.367688f, -0.339298f, -0.307922f, -0.273643f, -0.237339f, -0.199024f, -0.157916f, -0.114031f, -0.068508f, -0.022295f, - 0.024378f, 0.070864f, 0.115420f, 0.156302f, 0.192913f, 0.225272f, 0.252645f, 0.273162f, 0.284913f, 0.287670f, 0.283774f, 0.276781f, 0.268540f, 0.257900f, 0.242812f, 0.223195f, 0.201277f, 0.179871f, 0.160911f, 0.144831f, 0.130605f, 0.116910f, 0.103678f, 0.091983f, 0.082527f, 0.075057f, 0.068993f, 0.063538f, 0.057488f, 0.050008f, 0.041284f, 0.031626f, 0.020682f, 0.008290f, -0.004841f, -0.017983f, -0.030869f, -0.042934f, -0.053314f, -0.061863f, -0.068957f, -0.074456f, -0.078162f, -0.080807f, -0.083164f, -0.084941f, -0.085810f, -0.086426f, -0.087233f, -0.087667f, -0.087431f, -0.086993f, -0.086222f, -0.084410f, -0.081830f, -0.079316f, -0.076543f, -0.072767f, -0.068486f, -0.064301f, -0.059443f, -0.053446f, -0.047480f, -0.042320f, -0.037216f, -0.032146f, -0.028420f, -0.026114f, -0.023941f, -0.021979f, -0.021258f, -0.021151f, -0.020625f, -0.020834f, -0.023040f, -0.026119f, -0.029262f, -0.034092f, -0.041349f, -0.049446f, -0.058245f, -0.069370f, -0.081739f, -0.092511f, -0.102306f, -0.113154f, -0.123020f, -0.129316f, -0.134387f, -0.140442f, -0.144425f, -0.144702f, -0.145130f, -0.146612f, -0.144890f, -0.140872f, - -0.139791f, -0.138608f, -0.131360f, -0.124680f, -0.126031f, -0.124079f, -0.109182f, -0.099237f, -0.107590f, -0.107222f, -0.078014f, -0.060004f, -0.087081f, -0.098386f, -0.015611f, 0.107616f, 0.131899f, 0.033279f, -0.065099f, -0.084123f, -0.081752f, -0.110294f, -0.109745f, -0.022550f, 0.083650f, 0.098982f, 0.017454f, -0.075044f, -0.120096f, -0.135564f, -0.165934f, -0.217688f, -0.234747f, -0.144650f, 0.038500f, 0.179477f, 0.153231f, 0.002298f, -0.107319f, -0.088405f, -0.015190f, 0.008703f, -0.016573f, -0.026527f, -0.001403f, 0.023135f, 0.022859f, 0.008202f}, - {0.021669f, 0.023685f, -0.023828f, -0.034018f, 0.023524f, 0.049286f, -0.040503f, -0.161875f, -0.150811f, 0.019734f, 0.197676f, 0.229030f, 0.106401f, -0.062770f, -0.162365f, -0.129952f, 0.007762f, 0.128175f, 0.106139f, -0.044971f, -0.173666f, -0.163889f, -0.058328f, 0.023611f, 0.033294f, 0.007600f, -0.017864f, -0.044155f, -0.072516f, -0.086941f, -0.077826f, -0.052501f, -0.019845f, 0.016546f, 0.051887f, 0.081943f, 0.109000f, 0.136036f, 0.158638f, 0.169848f, 0.168532f, 0.157762f, 0.140048f, 0.118475f, 0.097856f, 0.081023f, 0.066814f, 0.053083f, 0.038732f, 0.022657f, 0.003922f, -0.016835f, -0.038572f, -0.061908f, -0.087943f, -0.115804f, -0.143100f, -0.168000f, -0.189456f, -0.206191f, -0.216814f, -0.220647f, -0.217699f, -0.207967f, -0.191048f, -0.166404f, -0.133914f, -0.094053f, -0.047458f, 0.005253f, 0.062902f, 0.123378f, 0.184188f, 0.242930f, 0.297204f, 0.344947f, 0.385106f, 0.417196f, 0.440297f, 0.453766f, 0.458836f, 0.457795f, 0.451309f, 0.438205f, 0.418365f, 0.394081f, 0.367688f, 0.339298f, 0.307922f, 0.273643f, 0.237339f, 0.199024f, 0.157916f, 0.114031f, 0.068508f, 0.022295f, - -0.024378f, -0.070864f, -0.115420f, -0.156302f, -0.192913f, -0.225272f, -0.252645f, -0.273162f, -0.284913f, -0.287670f, -0.283774f, -0.276781f, -0.268540f, -0.257900f, -0.242812f, -0.223195f, -0.201277f, -0.179871f, -0.160911f, -0.144831f, -0.130605f, -0.116910f, -0.103678f, -0.091983f, -0.082527f, -0.075057f, -0.068993f, -0.063538f, -0.057488f, -0.050008f, -0.041284f, -0.031626f, -0.020682f, -0.008290f, 0.004841f, 0.017983f, 0.030869f, 0.042934f, 0.053314f, 0.061863f, 0.068957f, 0.074456f, 0.078162f, 0.080807f, 0.083164f, 0.084941f, 0.085810f, 0.086426f, 0.087233f, 0.087667f, 0.087431f, 0.086993f, 0.086222f, 0.084410f, 0.081830f, 0.079316f, 0.076543f, 0.072767f, 0.068486f, 0.064301f, 0.059443f, 0.053446f, 0.047480f, 0.042320f, 0.037216f, 0.032146f, 0.028420f, 0.026114f, 0.023941f, 0.021979f, 0.021258f, 0.021151f, 0.020625f, 0.020834f, 0.023040f, 0.026119f, 0.029262f, 0.034092f, 0.041349f, 0.049446f, 0.058245f, 0.069370f, 0.081739f, 0.092511f, 0.102306f, 0.113154f, 0.123020f, 0.129316f, 0.134387f, 0.140442f, 0.144425f, 0.144702f, 0.145130f, 0.146612f, 0.144890f, 0.140872f, - 0.139791f, 0.138608f, 0.131360f, 0.124680f, 0.126031f, 0.124079f, 0.109182f, 0.099237f, 0.107590f, 0.107222f, 0.078014f, 0.060004f, 0.087081f, 0.098386f, 0.015611f, -0.107616f, -0.131899f, -0.033279f, 0.065099f, 0.084123f, 0.081752f, 0.110294f, 0.109745f, 0.022550f, -0.083650f, -0.098982f, -0.017454f, 0.075044f, 0.120096f, 0.135564f, 0.165934f, 0.217688f, 0.234747f, 0.144650f, -0.038500f, -0.179477f, -0.153231f, -0.002298f, 0.107319f, 0.088405f, 0.015190f, -0.008703f, 0.016573f, 0.026527f, 0.001403f, -0.023135f, -0.022859f, -0.008202f} - }, - { - {0.003490f, -0.006226f, -0.035846f, -0.051515f, -0.041640f, -0.036076f, -0.045949f, -0.026763f, 0.066247f, 0.214586f, 0.349145f, 0.387379f, 0.248996f, -0.075217f, -0.411222f, -0.465190f, -0.135467f, 0.290951f, 0.408104f, 0.149776f, -0.165632f, -0.250425f, -0.140194f, -0.027408f, 0.020877f, 0.060945f, 0.105649f, 0.105114f, 0.053903f, 0.006713f, -0.005167f, -0.000920f, 0.000082f, 0.001162f, 0.003555f, -0.001284f, -0.014085f, -0.027073f, -0.038241f, -0.050923f, -0.065125f, -0.079722f, -0.096066f, -0.112906f, -0.125552f, -0.133576f, -0.141406f, -0.150172f, -0.156901f, -0.161372f, -0.166117f, -0.170690f, -0.172431f, -0.171130f, -0.167726f, -0.160965f, -0.149498f, -0.134444f, -0.116933f, -0.096204f, -0.071970f, -0.045391f, -0.016742f, 0.014649f, 0.047943f, 0.081229f, 0.113842f, 0.145533f, 0.174464f, 0.198570f, 0.217592f, 0.231713f, 0.239760f, 0.240421f, 0.233709f, 0.220058f, 0.199450f, 0.172046f, 0.138437f, 0.099252f, 0.055563f, 0.009024f, -0.039375f, -0.089650f, -0.141184f, -0.192202f, -0.241534f, -0.289259f, -0.335192f, -0.378497f, -0.418885f, -0.456107f, -0.488166f, -0.512093f, -0.526677f, -0.532781f, - -0.531064f, -0.520888f, -0.501308f, -0.472277f, -0.435515f, -0.394864f, -0.354737f, -0.317425f, -0.282773f, -0.250772f, -0.223195f, -0.202435f, -0.189950f, -0.186050f, -0.189968f, -0.199904f, -0.213864f, -0.230597f, -0.249442f, -0.269776f, -0.291088f, -0.312839f, -0.333762f, -0.352022f, -0.366526f, -0.377502f, -0.385752f, -0.392049f, -0.397160f, -0.401566f, -0.405131f, -0.407696f, -0.409744f, -0.411829f, -0.413700f, -0.414630f, -0.414284f, -0.412722f, -0.409992f, -0.406200f, -0.401590f, -0.396097f, -0.389065f, -0.379621f, -0.367177f, -0.351595f, -0.333246f, -0.312889f, -0.291241f, -0.268764f, -0.245990f, -0.223712f, -0.202570f, -0.182754f, -0.164339f, -0.147556f, -0.132499f, -0.118902f, -0.106443f, -0.095030f, -0.084602f, -0.074944f, -0.065829f, -0.057130f, -0.048678f, -0.040225f, -0.031636f, -0.022960f, -0.014347f, -0.006068f, 0.001494f, 0.008244f, 0.014668f, 0.021396f, 0.028573f, 0.036064f, 0.044011f, 0.052627f, 0.061660f, 0.070662f, 0.079560f, 0.088346f, 0.096620f, 0.104093f, 0.110970f, 0.117205f, 0.122169f, 0.125646f, 0.128091f, 0.129387f, 0.128805f, 0.126607f, 0.123922f, 0.120854f, 0.116797f, 0.112354f, - 0.108374f, 0.103999f, 0.098631f, 0.093863f, 0.089953f, 0.083871f, 0.075164f, 0.068279f, 0.063593f, 0.054484f, 0.040704f, 0.032538f, 0.030791f, 0.018823f, -0.008680f, -0.027757f, -0.019659f, -0.003550f, -0.004449f, -0.010080f, -0.000027f, 0.002567f, -0.038050f, -0.098261f, -0.113993f, -0.072907f, -0.029749f, -0.023328f, -0.035246f, -0.040054f, -0.038086f, -0.027498f, -0.004695f, -0.004589f, -0.071780f, -0.172134f, -0.206569f, -0.142510f, -0.058281f, -0.022574f, -0.010410f, 0.016164f, 0.034763f, 0.038405f, 0.092021f, 0.212278f, 0.267090f, 0.126265f}, - {0.003490f, -0.006226f, -0.035846f, -0.051515f, -0.041640f, -0.036076f, -0.045949f, -0.026763f, 0.066247f, 0.214586f, 0.349145f, 0.387379f, 0.248996f, -0.075217f, -0.411222f, -0.465190f, -0.135467f, 0.290951f, 0.408104f, 0.149776f, -0.165632f, -0.250425f, -0.140194f, -0.027408f, 0.020877f, 0.060945f, 0.105649f, 0.105114f, 0.053903f, 0.006713f, -0.005167f, -0.000920f, 0.000082f, 0.001162f, 0.003555f, -0.001284f, -0.014085f, -0.027073f, -0.038241f, -0.050923f, -0.065125f, -0.079722f, -0.096066f, -0.112906f, -0.125552f, -0.133576f, -0.141406f, -0.150172f, -0.156901f, -0.161372f, -0.166117f, -0.170690f, -0.172431f, -0.171130f, -0.167726f, -0.160965f, -0.149498f, -0.134444f, -0.116933f, -0.096204f, -0.071970f, -0.045391f, -0.016742f, 0.014649f, 0.047943f, 0.081229f, 0.113842f, 0.145533f, 0.174464f, 0.198570f, 0.217592f, 0.231713f, 0.239760f, 0.240421f, 0.233709f, 0.220058f, 0.199450f, 0.172046f, 0.138437f, 0.099252f, 0.055563f, 0.009024f, -0.039375f, -0.089650f, -0.141184f, -0.192202f, -0.241534f, -0.289259f, -0.335192f, -0.378497f, -0.418885f, -0.456107f, -0.488166f, -0.512093f, -0.526677f, -0.532781f, - -0.531064f, -0.520888f, -0.501308f, -0.472277f, -0.435515f, -0.394864f, -0.354737f, -0.317425f, -0.282773f, -0.250772f, -0.223195f, -0.202435f, -0.189950f, -0.186050f, -0.189968f, -0.199904f, -0.213864f, -0.230597f, -0.249442f, -0.269776f, -0.291088f, -0.312839f, -0.333762f, -0.352022f, -0.366526f, -0.377502f, -0.385752f, -0.392049f, -0.397160f, -0.401566f, -0.405131f, -0.407696f, -0.409744f, -0.411829f, -0.413700f, -0.414630f, -0.414284f, -0.412722f, -0.409992f, -0.406200f, -0.401590f, -0.396097f, -0.389065f, -0.379621f, -0.367177f, -0.351595f, -0.333246f, -0.312889f, -0.291241f, -0.268764f, -0.245990f, -0.223712f, -0.202570f, -0.182754f, -0.164339f, -0.147556f, -0.132499f, -0.118902f, -0.106443f, -0.095030f, -0.084602f, -0.074944f, -0.065829f, -0.057130f, -0.048678f, -0.040225f, -0.031636f, -0.022960f, -0.014347f, -0.006068f, 0.001494f, 0.008244f, 0.014668f, 0.021396f, 0.028573f, 0.036064f, 0.044011f, 0.052627f, 0.061660f, 0.070662f, 0.079560f, 0.088346f, 0.096620f, 0.104093f, 0.110970f, 0.117205f, 0.122169f, 0.125646f, 0.128091f, 0.129387f, 0.128805f, 0.126607f, 0.123922f, 0.120854f, 0.116797f, 0.112354f, - 0.108374f, 0.103999f, 0.098631f, 0.093863f, 0.089953f, 0.083871f, 0.075164f, 0.068279f, 0.063593f, 0.054484f, 0.040704f, 0.032538f, 0.030791f, 0.018823f, -0.008680f, -0.027757f, -0.019659f, -0.003550f, -0.004449f, -0.010080f, -0.000027f, 0.002567f, -0.038050f, -0.098261f, -0.113993f, -0.072907f, -0.029749f, -0.023328f, -0.035246f, -0.040054f, -0.038086f, -0.027498f, -0.004695f, -0.004589f, -0.071780f, -0.172134f, -0.206569f, -0.142510f, -0.058281f, -0.022574f, -0.010410f, 0.016164f, 0.034763f, 0.038405f, 0.092021f, 0.212278f, 0.267090f, 0.126265f} - }, - { - {-0.035472f, -0.081798f, -0.071269f, -0.002255f, 0.102860f, 0.192934f, 0.195307f, 0.077888f, -0.089815f, -0.183178f, -0.148660f, -0.050318f, 0.021927f, 0.047034f, 0.051279f, 0.039696f, 0.000788f, -0.043082f, -0.046115f, -0.002300f, 0.043120f, 0.054272f, 0.044462f, 0.043697f, 0.054210f, 0.056230f, 0.039591f, 0.010104f, -0.026057f, -0.066929f, -0.106323f, -0.133976f, -0.146070f, -0.148720f, -0.149808f, -0.151671f, -0.151914f, -0.146987f, -0.133736f, -0.110668f, -0.079889f, -0.046679f, -0.015936f, 0.010534f, 0.033170f, 0.052610f, 0.069360f, 0.084349f, 0.098446f, 0.111692f, 0.123760f, 0.134762f, 0.144930f, 0.153971f, 0.161484f, 0.167609f, 0.172556f, 0.175798f, 0.176488f, 0.174543f, 0.170771f, 0.166009f, 0.160711f, 0.155506f, 0.151631f, 0.150263f, 0.151447f, 0.154253f, 0.158209f, 0.163925f, 0.171822f, 0.181027f, 0.190414f, 0.200062f, 0.210583f, 0.221416f, 0.230907f, 0.237799f, 0.241620f, 0.241826f, 0.237494f, 0.227842f, 0.212650f, 0.192367f, 0.167818f, 0.139250f, 0.105981f, 0.068046f, 0.027691f, -0.012582f, -0.053404f, -0.097965f, -0.147589f, -0.199683f, -0.250713f, -0.299600f, - -0.347211f, -0.393568f, -0.436641f, -0.473794f, -0.504000f, -0.528334f, -0.547986f, -0.562129f, -0.568657f, -0.567015f, -0.559255f, -0.548048f, -0.534395f, -0.517300f, -0.494938f, -0.466303f, -0.432494f, -0.396273f, -0.359899f, -0.323754f, -0.287306f, -0.250581f, -0.214271f, -0.179261f, -0.146467f, -0.116331f, -0.088268f, -0.061282f, -0.035046f, -0.009658f, 0.015292f, 0.040570f, 0.066577f, 0.093272f, 0.120122f, 0.145742f, 0.168648f, 0.188835f, 0.207643f, 0.226003f, 0.243897f, 0.261131f, 0.277062f, 0.290013f, 0.298689f, 0.303838f, 0.307126f, 0.309188f, 0.310081f, 0.310329f, 0.309928f, 0.307653f, 0.302863f, 0.296760f, 0.290865f, 0.285707f, 0.281670f, 0.279350f, 0.278412f, 0.277635f, 0.276342f, 0.274531f, 0.272081f, 0.269199f, 0.266771f, 0.265042f, 0.263139f, 0.260717f, 0.258256f, 0.255195f, 0.250108f, 0.243164f, 0.235906f, 0.228645f, 0.220748f, 0.212913f, 0.206270f, 0.200266f, 0.194120f, 0.188745f, 0.184754f, 0.181033f, 0.177428f, 0.175609f, 0.175577f, 0.175232f, 0.174471f, 0.175053f, 0.176162f, 0.175457f, 0.173795f, 0.173114f, 0.171744f, 0.167956f, 0.164332f, 0.162227f, - 0.157916f, 0.150729f, 0.146110f, 0.143936f, 0.136426f, 0.124657f, 0.119818f, 0.119996f, 0.109141f, 0.089750f, 0.085717f, 0.095940f, 0.083230f, 0.037463f, 0.009372f, 0.039437f, 0.088203f, 0.089602f, 0.047152f, 0.017437f, 0.014054f, -0.004805f, -0.050861f, -0.073779f, -0.038800f, 0.013222f, 0.018847f, -0.024526f, -0.065147f, -0.073405f, -0.074806f, -0.099582f, -0.126782f, -0.104109f, -0.020258f, 0.067040f, 0.090571f, 0.049397f, 0.005260f, 0.006347f, 0.036806f, 0.050161f, 0.034434f, 0.024218f, 0.050191f, 0.093391f, 0.100755f, 0.044175f}, - {-0.035472f, -0.081798f, -0.071269f, -0.002255f, 0.102860f, 0.192934f, 0.195307f, 0.077888f, -0.089815f, -0.183178f, -0.148660f, -0.050318f, 0.021927f, 0.047034f, 0.051279f, 0.039696f, 0.000788f, -0.043082f, -0.046115f, -0.002300f, 0.043120f, 0.054272f, 0.044462f, 0.043697f, 0.054210f, 0.056230f, 0.039591f, 0.010104f, -0.026057f, -0.066929f, -0.106323f, -0.133976f, -0.146070f, -0.148720f, -0.149808f, -0.151671f, -0.151914f, -0.146987f, -0.133736f, -0.110668f, -0.079889f, -0.046679f, -0.015936f, 0.010534f, 0.033170f, 0.052610f, 0.069360f, 0.084349f, 0.098446f, 0.111692f, 0.123760f, 0.134762f, 0.144930f, 0.153971f, 0.161484f, 0.167609f, 0.172556f, 0.175798f, 0.176488f, 0.174543f, 0.170771f, 0.166009f, 0.160711f, 0.155506f, 0.151631f, 0.150263f, 0.151447f, 0.154253f, 0.158209f, 0.163925f, 0.171822f, 0.181027f, 0.190414f, 0.200062f, 0.210583f, 0.221416f, 0.230907f, 0.237799f, 0.241620f, 0.241826f, 0.237494f, 0.227842f, 0.212650f, 0.192367f, 0.167818f, 0.139250f, 0.105981f, 0.068046f, 0.027691f, -0.012582f, -0.053404f, -0.097965f, -0.147589f, -0.199683f, -0.250713f, -0.299600f, - -0.347211f, -0.393568f, -0.436641f, -0.473794f, -0.504000f, -0.528334f, -0.547986f, -0.562129f, -0.568657f, -0.567015f, -0.559255f, -0.548048f, -0.534395f, -0.517300f, -0.494938f, -0.466303f, -0.432494f, -0.396273f, -0.359899f, -0.323754f, -0.287306f, -0.250581f, -0.214271f, -0.179261f, -0.146467f, -0.116331f, -0.088268f, -0.061282f, -0.035046f, -0.009658f, 0.015292f, 0.040570f, 0.066577f, 0.093272f, 0.120122f, 0.145742f, 0.168648f, 0.188835f, 0.207643f, 0.226003f, 0.243897f, 0.261131f, 0.277062f, 0.290013f, 0.298689f, 0.303838f, 0.307126f, 0.309188f, 0.310081f, 0.310329f, 0.309928f, 0.307653f, 0.302863f, 0.296760f, 0.290865f, 0.285707f, 0.281670f, 0.279350f, 0.278412f, 0.277635f, 0.276342f, 0.274531f, 0.272081f, 0.269199f, 0.266771f, 0.265042f, 0.263139f, 0.260717f, 0.258256f, 0.255195f, 0.250108f, 0.243164f, 0.235906f, 0.228645f, 0.220748f, 0.212913f, 0.206270f, 0.200266f, 0.194120f, 0.188745f, 0.184754f, 0.181033f, 0.177428f, 0.175609f, 0.175577f, 0.175232f, 0.174471f, 0.175053f, 0.176162f, 0.175457f, 0.173795f, 0.173114f, 0.171744f, 0.167956f, 0.164332f, 0.162227f, - 0.157916f, 0.150729f, 0.146110f, 0.143936f, 0.136426f, 0.124657f, 0.119818f, 0.119996f, 0.109141f, 0.089750f, 0.085717f, 0.095940f, 0.083230f, 0.037463f, 0.009372f, 0.039437f, 0.088203f, 0.089602f, 0.047152f, 0.017437f, 0.014054f, -0.004805f, -0.050861f, -0.073779f, -0.038800f, 0.013222f, 0.018847f, -0.024526f, -0.065147f, -0.073405f, -0.074806f, -0.099582f, -0.126782f, -0.104109f, -0.020258f, 0.067040f, 0.090571f, 0.049397f, 0.005260f, 0.006347f, 0.036806f, 0.050161f, 0.034434f, 0.024218f, 0.050191f, 0.093391f, 0.100755f, 0.044175f} - }, - { - {0.042678f, 0.061622f, -0.028196f, -0.143885f, -0.224072f, -0.284508f, -0.302731f, -0.182658f, 0.099504f, 0.420275f, 0.638704f, 0.687316f, 0.489750f, -0.015410f, -0.622302f, -0.830198f, -0.349626f, 0.436547f, 0.802596f, 0.482187f, -0.101825f, -0.430320f, -0.436453f, -0.363990f, -0.342331f, -0.313261f, -0.238930f, -0.165973f, -0.115181f, -0.053004f, 0.030022f, 0.103505f, 0.154387f, 0.196765f, 0.232985f, 0.250719f, 0.249480f, 0.238127f, 0.217259f, 0.185995f, 0.153039f, 0.125445f, 0.099295f, 0.070881f, 0.043774f, 0.019636f, -0.004691f, -0.028215f, -0.045888f, -0.058070f, -0.069863f, -0.082739f, -0.095207f, -0.108273f, -0.123140f, -0.137644f, -0.150201f, -0.162441f, -0.174694f, -0.184462f, -0.191311f, -0.197478f, -0.202881f, -0.205254f, -0.204820f, -0.203437f, -0.200391f, -0.193986f, -0.185403f, -0.176781f, -0.167901f, -0.158151f, -0.148852f, -0.140977f, -0.133478f, -0.125631f, -0.118126f, -0.111133f, -0.104255f, -0.098270f, -0.094045f, -0.090471f, -0.086049f, -0.081094f, -0.076093f, -0.069893f, -0.061614f, -0.052313f, -0.043250f, -0.034722f, -0.027423f, -0.022573f, -0.020398f, -0.020777f, -0.024856f, -0.033392f, - -0.044257f, -0.054140f, -0.061819f, -0.067591f, -0.070708f, -0.069377f, -0.062218f, -0.048572f, -0.028734f, -0.004500f, 0.022107f, 0.050743f, 0.081816f, 0.114155f, 0.145494f, 0.174558f, 0.201036f, 0.224549f, 0.245211f, 0.263919f, 0.280758f, 0.294514f, 0.304706f, 0.312583f, 0.319626f, 0.326612f, 0.334080f, 0.341832f, 0.348235f, 0.351861f, 0.353358f, 0.354260f, 0.354991f, 0.355418f, 0.355888f, 0.356297f, 0.355581f, 0.353292f, 0.350219f, 0.346812f, 0.342664f, 0.337795f, 0.332648f, 0.326745f, 0.319058f, 0.309473f, 0.298401f, 0.285643f, 0.271046f, 0.255382f, 0.239371f, 0.222910f, 0.206045f, 0.189388f, 0.173090f, 0.156857f, 0.141104f, 0.126636f, 0.113452f, 0.101318f, 0.090789f, 0.082249f, 0.074992f, 0.068538f, 0.063491f, 0.060061f, 0.057439f, 0.055455f, 0.054981f, 0.056161f, 0.058110f, 0.060472f, 0.063342f, 0.066055f, 0.067915f, 0.069371f, 0.070847f, 0.071784f, 0.072212f, 0.073343f, 0.075403f, 0.077120f, 0.078098f, 0.079147f, 0.080031f, 0.079753f, 0.078802f, 0.078270f, 0.077725f, 0.076661f, 0.076178f, 0.076704f, 0.076726f, 0.075852f, 0.075519f, 0.075400f, - 0.073798f, 0.071864f, 0.071587f, 0.070807f, 0.067455f, 0.065540f, 0.067863f, 0.068385f, 0.063450f, 0.062038f, 0.069276f, 0.071356f, 0.058960f, 0.053379f, 0.078818f, 0.116438f, 0.121889f, 0.088110f, 0.054333f, 0.047493f, 0.050192f, 0.038198f, 0.017981f, 0.009829f, 0.016479f, 0.025304f, 0.026670f, 0.017667f, -0.001131f, -0.024314f, -0.047086f, -0.077035f, -0.126851f, -0.184821f, -0.205141f, -0.150219f, -0.045456f, 0.033147f, 0.045118f, 0.036078f, 0.066884f, 0.116177f, 0.121086f, 0.109949f, 0.190572f, 0.356239f, 0.408472f, 0.186052f}, - {0.042678f, 0.061622f, -0.028196f, -0.143885f, -0.224072f, -0.284508f, -0.302731f, -0.182658f, 0.099504f, 0.420275f, 0.638704f, 0.687316f, 0.489750f, -0.015410f, -0.622302f, -0.830198f, -0.349626f, 0.436547f, 0.802596f, 0.482187f, -0.101825f, -0.430320f, -0.436453f, -0.363990f, -0.342331f, -0.313261f, -0.238930f, -0.165973f, -0.115181f, -0.053004f, 0.030022f, 0.103505f, 0.154387f, 0.196765f, 0.232985f, 0.250719f, 0.249480f, 0.238127f, 0.217259f, 0.185995f, 0.153039f, 0.125445f, 0.099295f, 0.070881f, 0.043774f, 0.019636f, -0.004691f, -0.028215f, -0.045888f, -0.058070f, -0.069863f, -0.082739f, -0.095207f, -0.108273f, -0.123140f, -0.137644f, -0.150201f, -0.162441f, -0.174694f, -0.184462f, -0.191311f, -0.197478f, -0.202881f, -0.205254f, -0.204820f, -0.203437f, -0.200391f, -0.193986f, -0.185403f, -0.176781f, -0.167901f, -0.158151f, -0.148852f, -0.140977f, -0.133478f, -0.125631f, -0.118126f, -0.111133f, -0.104255f, -0.098270f, -0.094045f, -0.090471f, -0.086049f, -0.081094f, -0.076093f, -0.069893f, -0.061614f, -0.052313f, -0.043250f, -0.034722f, -0.027423f, -0.022573f, -0.020398f, -0.020777f, -0.024856f, -0.033392f, - -0.044257f, -0.054140f, -0.061819f, -0.067591f, -0.070708f, -0.069377f, -0.062218f, -0.048572f, -0.028734f, -0.004500f, 0.022107f, 0.050743f, 0.081816f, 0.114155f, 0.145494f, 0.174558f, 0.201036f, 0.224549f, 0.245211f, 0.263919f, 0.280758f, 0.294514f, 0.304706f, 0.312583f, 0.319626f, 0.326612f, 0.334080f, 0.341832f, 0.348235f, 0.351861f, 0.353358f, 0.354260f, 0.354991f, 0.355418f, 0.355888f, 0.356297f, 0.355581f, 0.353292f, 0.350219f, 0.346812f, 0.342664f, 0.337795f, 0.332648f, 0.326745f, 0.319058f, 0.309473f, 0.298401f, 0.285643f, 0.271046f, 0.255382f, 0.239371f, 0.222910f, 0.206045f, 0.189388f, 0.173090f, 0.156857f, 0.141104f, 0.126636f, 0.113452f, 0.101318f, 0.090789f, 0.082249f, 0.074992f, 0.068538f, 0.063491f, 0.060061f, 0.057439f, 0.055455f, 0.054981f, 0.056161f, 0.058110f, 0.060472f, 0.063342f, 0.066055f, 0.067915f, 0.069371f, 0.070847f, 0.071784f, 0.072212f, 0.073343f, 0.075403f, 0.077120f, 0.078098f, 0.079147f, 0.080031f, 0.079753f, 0.078802f, 0.078270f, 0.077725f, 0.076661f, 0.076178f, 0.076704f, 0.076726f, 0.075852f, 0.075519f, 0.075400f, - 0.073798f, 0.071864f, 0.071587f, 0.070807f, 0.067455f, 0.065540f, 0.067863f, 0.068385f, 0.063450f, 0.062038f, 0.069276f, 0.071356f, 0.058960f, 0.053379f, 0.078818f, 0.116438f, 0.121889f, 0.088110f, 0.054333f, 0.047493f, 0.050192f, 0.038198f, 0.017981f, 0.009829f, 0.016479f, 0.025304f, 0.026670f, 0.017667f, -0.001131f, -0.024314f, -0.047086f, -0.077035f, -0.126851f, -0.184821f, -0.205141f, -0.150219f, -0.045456f, 0.033147f, 0.045118f, 0.036078f, 0.066884f, 0.116177f, 0.121086f, 0.109949f, 0.190572f, 0.356239f, 0.408472f, 0.186052f} - }, - { - {0.005237f, 0.021703f, 0.045977f, 0.071806f, 0.092952f, 0.081260f, -0.003190f, -0.145310f, -0.275966f, -0.362527f, -0.395227f, -0.264156f, 0.150047f, 0.651732f, 0.736748f, 0.178493f, -0.546265f, -0.726461f, -0.253335f, 0.307326f, 0.460253f, 0.280757f, 0.110658f, 0.068622f, 0.044595f, -0.021458f, -0.074721f, -0.084225f, -0.083528f, -0.089857f, -0.082326f, -0.054179f, -0.024468f, -0.003872f, 0.012161f, 0.024961f, 0.032523f, 0.038120f, 0.043734f, 0.045226f, 0.042031f, 0.040072f, 0.040964f, 0.039871f, 0.035748f, 0.033014f, 0.032973f, 0.032945f, 0.032894f, 0.035106f, 0.038930f, 0.041809f, 0.043292f, 0.043813f, 0.042340f, 0.038269f, 0.032751f, 0.026426f, 0.018771f, 0.010266f, 0.002197f, -0.005598f, -0.014102f, -0.022944f, -0.031212f, -0.039210f, -0.047434f, -0.055236f, -0.062092f, -0.068591f, -0.075131f, -0.081310f, -0.087184f, -0.093424f, -0.099923f, -0.105783f, -0.110523f, -0.114008f, -0.115743f, -0.115455f, -0.113562f, -0.110039f, -0.103812f, -0.094238f, -0.082140f, -0.068646f, -0.053906f, -0.037508f, -0.019400f, -0.000138f, 0.019150f, 0.037116f, 0.052952f, 0.066525f, 0.077559f, 0.085419f, - 0.090024f, 0.092137f, 0.092407f, 0.090931f, 0.088051f, 0.084846f, 0.082459f, 0.081306f, 0.081002f, 0.080874f, 0.080752f, 0.081399f, 0.083837f, 0.088256f, 0.093970f, 0.100339f, 0.107259f, 0.114966f, 0.123841f, 0.134136f, 0.145461f, 0.156869f, 0.167780f, 0.178468f, 0.189584f, 0.201647f, 0.214894f, 0.228991f, 0.243006f, 0.256233f, 0.268833f, 0.281258f, 0.293527f, 0.305381f, 0.316502f, 0.326245f, 0.333893f, 0.339409f, 0.343323f, 0.345920f, 0.347256f, 0.347629f, 0.347192f, 0.345526f, 0.342384f, 0.338359f, 0.334213f, 0.330257f, 0.326814f, 0.324352f, 0.322779f, 0.321501f, 0.320285f, 0.319177f, 0.317892f, 0.316244f, 0.314676f, 0.313474f, 0.312258f, 0.310891f, 0.309761f, 0.308650f, 0.306736f, 0.303971f, 0.300919f, 0.297365f, 0.292823f, 0.287889f, 0.283309f, 0.278653f, 0.273613f, 0.269123f, 0.265633f, 0.262210f, 0.258582f, 0.255670f, 0.253312f, 0.250271f, 0.246652f, 0.243183f, 0.238876f, 0.232859f, 0.226812f, 0.222000f, 0.216739f, 0.210266f, 0.204891f, 0.201099f, 0.196094f, 0.189759f, 0.185117f, 0.181542f, 0.175943f, 0.170100f, 0.166931f, 0.162845f, - 0.155378f, 0.150889f, 0.151178f, 0.145769f, 0.133595f, 0.131101f, 0.138699f, 0.131114f, 0.107876f, 0.107399f, 0.131831f, 0.121095f, 0.065160f, 0.067368f, 0.195312f, 0.334380f, 0.321328f, 0.179544f, 0.074250f, 0.062451f, 0.055156f, 0.024988f, 0.064983f, 0.195879f, 0.284344f, 0.231376f, 0.110090f, 0.037519f, 0.019981f, -0.000182f, -0.041027f, -0.092433f, -0.145801f, -0.157474f, -0.070642f, 0.074676f, 0.146071f, 0.088851f, 0.000113f, -0.023302f, -0.011566f, -0.029134f, -0.060776f, -0.081612f, -0.140841f, -0.254957f, -0.296521f, -0.136956f}, - {-0.005237f, -0.021703f, -0.045977f, -0.071806f, -0.092952f, -0.081260f, 0.003190f, 0.145310f, 0.275966f, 0.362527f, 0.395227f, 0.264156f, -0.150047f, -0.651732f, -0.736748f, -0.178493f, 0.546265f, 0.726461f, 0.253335f, -0.307326f, -0.460253f, -0.280757f, -0.110658f, -0.068622f, -0.044595f, 0.021458f, 0.074721f, 0.084225f, 0.083528f, 0.089857f, 0.082326f, 0.054179f, 0.024468f, 0.003872f, -0.012161f, -0.024961f, -0.032523f, -0.038120f, -0.043734f, -0.045226f, -0.042031f, -0.040072f, -0.040964f, -0.039871f, -0.035748f, -0.033014f, -0.032973f, -0.032945f, -0.032894f, -0.035106f, -0.038930f, -0.041809f, -0.043292f, -0.043813f, -0.042340f, -0.038269f, -0.032751f, -0.026426f, -0.018771f, -0.010266f, -0.002197f, 0.005598f, 0.014102f, 0.022944f, 0.031212f, 0.039210f, 0.047434f, 0.055236f, 0.062092f, 0.068591f, 0.075131f, 0.081310f, 0.087184f, 0.093424f, 0.099923f, 0.105783f, 0.110523f, 0.114008f, 0.115743f, 0.115455f, 0.113562f, 0.110039f, 0.103812f, 0.094238f, 0.082140f, 0.068646f, 0.053906f, 0.037508f, 0.019400f, 0.000138f, -0.019150f, -0.037116f, -0.052952f, -0.066525f, -0.077559f, -0.085419f, - -0.090024f, -0.092137f, -0.092407f, -0.090931f, -0.088051f, -0.084846f, -0.082459f, -0.081306f, -0.081002f, -0.080874f, -0.080752f, -0.081399f, -0.083837f, -0.088256f, -0.093970f, -0.100339f, -0.107259f, -0.114966f, -0.123841f, -0.134136f, -0.145461f, -0.156869f, -0.167780f, -0.178468f, -0.189584f, -0.201647f, -0.214894f, -0.228991f, -0.243006f, -0.256233f, -0.268833f, -0.281258f, -0.293527f, -0.305381f, -0.316502f, -0.326245f, -0.333893f, -0.339409f, -0.343323f, -0.345920f, -0.347256f, -0.347629f, -0.347192f, -0.345526f, -0.342384f, -0.338359f, -0.334213f, -0.330257f, -0.326814f, -0.324352f, -0.322779f, -0.321501f, -0.320285f, -0.319177f, -0.317892f, -0.316244f, -0.314676f, -0.313474f, -0.312258f, -0.310891f, -0.309761f, -0.308650f, -0.306736f, -0.303971f, -0.300919f, -0.297365f, -0.292823f, -0.287889f, -0.283309f, -0.278653f, -0.273613f, -0.269123f, -0.265633f, -0.262210f, -0.258582f, -0.255670f, -0.253312f, -0.250271f, -0.246652f, -0.243183f, -0.238876f, -0.232859f, -0.226812f, -0.222000f, -0.216739f, -0.210266f, -0.204891f, -0.201099f, -0.196094f, -0.189759f, -0.185117f, -0.181542f, -0.175943f, -0.170100f, -0.166931f, -0.162845f, - -0.155378f, -0.150889f, -0.151178f, -0.145769f, -0.133595f, -0.131101f, -0.138699f, -0.131114f, -0.107876f, -0.107399f, -0.131831f, -0.121095f, -0.065160f, -0.067368f, -0.195312f, -0.334380f, -0.321328f, -0.179544f, -0.074250f, -0.062451f, -0.055156f, -0.024988f, -0.064983f, -0.195879f, -0.284344f, -0.231376f, -0.110090f, -0.037519f, -0.019981f, 0.000182f, 0.041027f, 0.092433f, 0.145801f, 0.157474f, 0.070642f, -0.074676f, -0.146071f, -0.088851f, -0.000113f, 0.023302f, 0.011566f, 0.029134f, 0.060776f, 0.081612f, 0.140841f, 0.254957f, 0.296521f, 0.136956f} - }, - { - {0.003290f, 0.004457f, -0.005528f, -0.024503f, -0.040658f, -0.025318f, 0.044206f, 0.129212f, 0.134877f, 0.022060f, -0.113425f, -0.138652f, -0.048257f, 0.038579f, 0.043176f, 0.010064f, 0.006812f, 0.021760f, 0.008859f, -0.024480f, -0.035157f, -0.018780f, -0.010069f, -0.021483f, -0.027992f, -0.012071f, 0.011813f, 0.022917f, 0.019094f, 0.008846f, -0.003933f, -0.019076f, -0.033862f, -0.044037f, -0.047229f, -0.043365f, -0.034518f, -0.024371f, -0.015194f, -0.005790f, 0.005807f, 0.018765f, 0.030239f, 0.038382f, 0.043045f, 0.044775f, 0.044750f, 0.045028f, 0.047510f, 0.052757f, 0.060176f, 0.068888f, 0.078026f, 0.086682f, 0.094135f, 0.100148f, 0.104865f, 0.108434f, 0.110857f, 0.112171f, 0.112552f, 0.112064f, 0.110518f, 0.107865f, 0.104605f, 0.101407f, 0.098467f, 0.095713f, 0.093491f, 0.092393f, 0.092459f, 0.093229f, 0.094672f, 0.097391f, 0.101744f, 0.107363f, 0.113784f, 0.120958f, 0.128800f, 0.136599f, 0.143271f, 0.148034f, 0.150614f, 0.150845f, 0.148141f, 0.141385f, 0.129494f, 0.112216f, 0.090156f, 0.063735f, 0.032399f, -0.004651f, -0.046969f, -0.092530f, -0.138942f, -0.184556f, - -0.228255f, -0.268567f, -0.303451f, -0.331114f, -0.351060f, -0.364229f, -0.371919f, -0.374505f, -0.371598f, -0.363669f, -0.353079f, -0.342887f, -0.334569f, -0.327154f, -0.318566f, -0.307656f, -0.295101f, -0.282663f, -0.271630f, -0.261889f, -0.252419f, -0.242495f, -0.232267f, -0.222371f, -0.213326f, -0.205197f, -0.197481f, -0.189342f, -0.180196f, -0.170060f, -0.159249f, -0.147949f, -0.136227f, -0.124196f, -0.111996f, -0.099831f, -0.088089f, -0.077140f, -0.066975f, -0.057295f, -0.047872f, -0.038650f, -0.029694f, -0.021309f, -0.013879f, -0.007297f, -0.000899f, 0.005873f, 0.013174f, 0.021158f, 0.029939f, 0.039052f, 0.047778f, 0.056179f, 0.065084f, 0.075097f, 0.086363f, 0.099143f, 0.113686f, 0.129646f, 0.146404f, 0.163684f, 0.181241f, 0.198487f, 0.214981f, 0.230647f, 0.245100f, 0.257590f, 0.267839f, 0.275939f, 0.281514f, 0.284182f, 0.284595f, 0.283723f, 0.281609f, 0.278146f, 0.274139f, 0.270221f, 0.265944f, 0.261144f, 0.256555f, 0.252147f, 0.247009f, 0.241520f, 0.236982f, 0.232888f, 0.227759f, 0.222258f, 0.217750f, 0.212978f, 0.206361f, 0.199432f, 0.193539f, 0.186770f, 0.178678f, 0.172413f, - 0.167586f, 0.159508f, 0.149897f, 0.145822f, 0.143645f, 0.132268f, 0.117259f, 0.115520f, 0.119222f, 0.102510f, 0.076298f, 0.083698f, 0.113656f, 0.084809f, -0.030790f, -0.132140f, -0.115897f, -0.025563f, 0.020739f, 0.007588f, 0.010784f, 0.033761f, -0.006155f, -0.114325f, -0.177032f, -0.130405f, -0.055807f, -0.044287f, -0.066534f, -0.052950f, -0.016133f, -0.003723f, 0.004837f, 0.055791f, 0.115431f, 0.104274f, 0.022364f, -0.044182f, -0.042903f, -0.010534f, 0.000271f, -0.011501f, -0.020234f, -0.019218f, -0.016156f, -0.012286f, -0.006242f, -0.001442f}, - {-0.003290f, -0.004457f, 0.005528f, 0.024503f, 0.040658f, 0.025318f, -0.044206f, -0.129212f, -0.134877f, -0.022060f, 0.113425f, 0.138652f, 0.048257f, -0.038579f, -0.043176f, -0.010064f, -0.006812f, -0.021760f, -0.008859f, 0.024480f, 0.035157f, 0.018780f, 0.010069f, 0.021483f, 0.027992f, 0.012071f, -0.011813f, -0.022917f, -0.019094f, -0.008846f, 0.003933f, 0.019076f, 0.033862f, 0.044037f, 0.047229f, 0.043365f, 0.034518f, 0.024371f, 0.015194f, 0.005790f, -0.005807f, -0.018765f, -0.030239f, -0.038382f, -0.043045f, -0.044775f, -0.044750f, -0.045028f, -0.047510f, -0.052757f, -0.060176f, -0.068888f, -0.078026f, -0.086682f, -0.094135f, -0.100148f, -0.104865f, -0.108434f, -0.110857f, -0.112171f, -0.112552f, -0.112064f, -0.110518f, -0.107865f, -0.104605f, -0.101407f, -0.098467f, -0.095713f, -0.093491f, -0.092393f, -0.092459f, -0.093229f, -0.094672f, -0.097391f, -0.101744f, -0.107363f, -0.113784f, -0.120958f, -0.128800f, -0.136599f, -0.143271f, -0.148034f, -0.150614f, -0.150845f, -0.148141f, -0.141385f, -0.129494f, -0.112216f, -0.090156f, -0.063735f, -0.032399f, 0.004651f, 0.046969f, 0.092530f, 0.138942f, 0.184556f, - 0.228255f, 0.268567f, 0.303451f, 0.331114f, 0.351060f, 0.364229f, 0.371919f, 0.374505f, 0.371598f, 0.363669f, 0.353079f, 0.342887f, 0.334569f, 0.327154f, 0.318566f, 0.307656f, 0.295101f, 0.282663f, 0.271630f, 0.261889f, 0.252419f, 0.242495f, 0.232267f, 0.222371f, 0.213326f, 0.205197f, 0.197481f, 0.189342f, 0.180196f, 0.170060f, 0.159249f, 0.147949f, 0.136227f, 0.124196f, 0.111996f, 0.099831f, 0.088089f, 0.077140f, 0.066975f, 0.057295f, 0.047872f, 0.038650f, 0.029694f, 0.021309f, 0.013879f, 0.007297f, 0.000899f, -0.005873f, -0.013174f, -0.021158f, -0.029939f, -0.039052f, -0.047778f, -0.056179f, -0.065084f, -0.075097f, -0.086363f, -0.099143f, -0.113686f, -0.129646f, -0.146404f, -0.163684f, -0.181241f, -0.198487f, -0.214981f, -0.230647f, -0.245100f, -0.257590f, -0.267839f, -0.275939f, -0.281514f, -0.284182f, -0.284595f, -0.283723f, -0.281609f, -0.278146f, -0.274139f, -0.270221f, -0.265944f, -0.261144f, -0.256555f, -0.252147f, -0.247009f, -0.241520f, -0.236982f, -0.232888f, -0.227759f, -0.222258f, -0.217750f, -0.212978f, -0.206361f, -0.199432f, -0.193539f, -0.186770f, -0.178678f, -0.172413f, - -0.167586f, -0.159508f, -0.149897f, -0.145822f, -0.143645f, -0.132268f, -0.117259f, -0.115520f, -0.119222f, -0.102510f, -0.076298f, -0.083698f, -0.113656f, -0.084809f, 0.030790f, 0.132140f, 0.115897f, 0.025563f, -0.020739f, -0.007588f, -0.010784f, -0.033761f, 0.006155f, 0.114325f, 0.177032f, 0.130405f, 0.055807f, 0.044287f, 0.066534f, 0.052950f, 0.016133f, 0.003723f, -0.004837f, -0.055791f, -0.115431f, -0.104274f, -0.022364f, 0.044182f, 0.042903f, 0.010534f, -0.000271f, 0.011501f, 0.020234f, 0.019218f, 0.016156f, 0.012286f, 0.006242f, 0.001442f} - }, - { - {0.011164f, 0.032836f, 0.036645f, 0.010266f, -0.002453f, 0.048984f, 0.112171f, 0.055369f, -0.161208f, -0.386598f, -0.393418f, -0.096523f, 0.327126f, 0.541470f, 0.342730f, -0.107176f, -0.401047f, -0.302387f, 0.016123f, 0.212089f, 0.167723f, 0.036742f, -0.030253f, -0.044201f, -0.062205f, -0.067661f, -0.027021f, 0.029533f, 0.052252f, 0.045066f, 0.045409f, 0.066031f, 0.094060f, 0.121955f, 0.148648f, 0.165808f, 0.164983f, 0.149562f, 0.128033f, 0.103839f, 0.078146f, 0.053697f, 0.031162f, 0.008320f, -0.015066f, -0.036973f, -0.057449f, -0.078140f, -0.098645f, -0.117711f, -0.136293f, -0.155534f, -0.173582f, -0.187426f, -0.195978f, -0.199282f, -0.197030f, -0.189763f, -0.179374f, -0.166925f, -0.151599f, -0.132527f, -0.109872f, -0.083662f, -0.053273f, -0.018574f, 0.019487f, 0.059494f, 0.099905f, 0.139081f, 0.175756f, 0.209103f, 0.237873f, 0.260210f, 0.274934f, 0.282259f, 0.282639f, 0.275632f, 0.260647f, 0.238307f, 0.210293f, 0.177967f, 0.141703f, 0.101603f, 0.058418f, 0.013424f, -0.032487f, -0.079182f, -0.126657f, -0.174435f, -0.221816f, -0.268160f, -0.312343f, -0.352314f, -0.385884f, -0.411766f, - -0.429215f, -0.436998f, -0.433649f, -0.418961f, -0.394679f, -0.363490f, -0.327514f, -0.287649f, -0.244197f, -0.198315f, -0.152926f, -0.111682f, -0.076694f, -0.047638f, -0.023186f, -0.002688f, 0.013718f, 0.025795f, 0.033396f, 0.036453f, 0.035301f, 0.030767f, 0.023826f, 0.015431f, 0.006538f, -0.002356f, -0.011778f, -0.022870f, -0.036327f, -0.051958f, -0.068973f, -0.086308f, -0.103002f, -0.118765f, -0.133990f, -0.148972f, -0.163394f, -0.176630f, -0.188097f, -0.197282f, -0.203969f, -0.208402f, -0.210775f, -0.210752f, -0.207996f, -0.202785f, -0.195626f, -0.186736f, -0.176426f, -0.165358f, -0.153969f, -0.142280f, -0.130641f, -0.119870f, -0.110421f, -0.102206f, -0.095291f, -0.089829f, -0.085360f, -0.081117f, -0.076882f, -0.072735f, -0.068397f, -0.063649f, -0.058777f, -0.053866f, -0.048414f, -0.042214f, -0.035732f, -0.029221f, -0.022534f, -0.015932f, -0.009843f, -0.003888f, 0.002599f, 0.009436f, 0.016248f, 0.023570f, 0.031998f, 0.041152f, 0.050592f, 0.060497f, 0.070490f, 0.079404f, 0.086950f, 0.093796f, 0.099686f, 0.103660f, 0.106051f, 0.107861f, 0.108670f, 0.107687f, 0.105806f, 0.104009f, 0.101428f, 0.097536f, - 0.093765f, 0.090589f, 0.086306f, 0.080851f, 0.076442f, 0.072650f, 0.066432f, 0.058555f, 0.053047f, 0.048898f, 0.040819f, 0.029903f, 0.023605f, 0.022728f, 0.019228f, 0.010531f, 0.005076f, 0.008678f, 0.015334f, 0.017655f, 0.018434f, 0.024584f, 0.033609f, 0.033286f, 0.017113f, -0.002988f, -0.006746f, 0.008393f, 0.021799f, 0.020507f, 0.021478f, 0.041101f, 0.054308f, 0.019430f, -0.054565f, -0.102615f, -0.079454f, -0.013054f, 0.033272f, 0.030133f, -0.000759f, -0.021432f, -0.017817f, -0.013999f, -0.044719f, -0.101574f, -0.121223f, -0.055701f}, - {-0.011164f, -0.032836f, -0.036645f, -0.010266f, 0.002453f, -0.048984f, -0.112171f, -0.055369f, 0.161208f, 0.386598f, 0.393418f, 0.096523f, -0.327126f, -0.541470f, -0.342730f, 0.107176f, 0.401047f, 0.302387f, -0.016123f, -0.212089f, -0.167723f, -0.036742f, 0.030253f, 0.044201f, 0.062205f, 0.067661f, 0.027021f, -0.029533f, -0.052252f, -0.045066f, -0.045409f, -0.066031f, -0.094060f, -0.121955f, -0.148648f, -0.165808f, -0.164983f, -0.149562f, -0.128033f, -0.103839f, -0.078146f, -0.053697f, -0.031162f, -0.008320f, 0.015066f, 0.036973f, 0.057449f, 0.078140f, 0.098645f, 0.117711f, 0.136293f, 0.155534f, 0.173582f, 0.187426f, 0.195978f, 0.199282f, 0.197030f, 0.189763f, 0.179374f, 0.166925f, 0.151599f, 0.132527f, 0.109872f, 0.083662f, 0.053273f, 0.018574f, -0.019487f, -0.059494f, -0.099905f, -0.139081f, -0.175756f, -0.209103f, -0.237873f, -0.260210f, -0.274934f, -0.282259f, -0.282639f, -0.275632f, -0.260647f, -0.238307f, -0.210293f, -0.177967f, -0.141703f, -0.101603f, -0.058418f, -0.013424f, 0.032487f, 0.079182f, 0.126657f, 0.174435f, 0.221816f, 0.268160f, 0.312343f, 0.352314f, 0.385884f, 0.411766f, - 0.429215f, 0.436998f, 0.433649f, 0.418961f, 0.394679f, 0.363490f, 0.327514f, 0.287649f, 0.244197f, 0.198315f, 0.152926f, 0.111682f, 0.076694f, 0.047638f, 0.023186f, 0.002688f, -0.013718f, -0.025795f, -0.033396f, -0.036453f, -0.035301f, -0.030767f, -0.023826f, -0.015431f, -0.006538f, 0.002356f, 0.011778f, 0.022870f, 0.036327f, 0.051958f, 0.068973f, 0.086308f, 0.103002f, 0.118765f, 0.133990f, 0.148972f, 0.163394f, 0.176630f, 0.188097f, 0.197282f, 0.203969f, 0.208402f, 0.210775f, 0.210752f, 0.207996f, 0.202785f, 0.195626f, 0.186736f, 0.176426f, 0.165358f, 0.153969f, 0.142280f, 0.130641f, 0.119870f, 0.110421f, 0.102206f, 0.095291f, 0.089829f, 0.085360f, 0.081117f, 0.076882f, 0.072735f, 0.068397f, 0.063649f, 0.058777f, 0.053866f, 0.048414f, 0.042214f, 0.035732f, 0.029221f, 0.022534f, 0.015932f, 0.009843f, 0.003888f, -0.002599f, -0.009436f, -0.016248f, -0.023570f, -0.031998f, -0.041152f, -0.050592f, -0.060497f, -0.070490f, -0.079404f, -0.086950f, -0.093796f, -0.099686f, -0.103660f, -0.106051f, -0.107861f, -0.108670f, -0.107687f, -0.105806f, -0.104009f, -0.101428f, -0.097536f, - -0.093765f, -0.090589f, -0.086306f, -0.080851f, -0.076442f, -0.072650f, -0.066432f, -0.058555f, -0.053047f, -0.048898f, -0.040819f, -0.029903f, -0.023605f, -0.022728f, -0.019228f, -0.010531f, -0.005076f, -0.008678f, -0.015334f, -0.017655f, -0.018434f, -0.024584f, -0.033609f, -0.033286f, -0.017113f, 0.002988f, 0.006746f, -0.008393f, -0.021799f, -0.020507f, -0.021478f, -0.041101f, -0.054308f, -0.019430f, 0.054565f, 0.102615f, 0.079454f, 0.013054f, -0.033272f, -0.030133f, 0.000759f, 0.021432f, 0.017817f, 0.013999f, 0.044719f, 0.101574f, 0.121223f, 0.055701f} - }, - { - {-0.000057f, 0.004618f, 0.017682f, 0.031128f, 0.031889f, 0.012604f, -0.024428f, -0.067381f, -0.092044f, -0.068699f, 0.006663f, 0.086585f, 0.103494f, 0.041969f, -0.038554f, -0.069591f, -0.044517f, -0.004822f, 0.023300f, 0.046137f, 0.066610f, 0.069547f, 0.049468f, 0.024226f, 0.008422f, -0.007184f, -0.037346f, -0.077238f, -0.107144f, -0.113458f, -0.096785f, -0.066490f, -0.035038f, -0.013153f, -0.003730f, -0.000878f, 0.003116f, 0.011034f, 0.020563f, 0.027847f, 0.030544f, 0.029277f, 0.026700f, 0.024711f, 0.023212f, 0.021560f, 0.019500f, 0.016290f, 0.010748f, 0.002681f, -0.007062f, -0.017978f, -0.030113f, -0.043238f, -0.056960f, -0.071085f, -0.084942f, -0.097195f, -0.106968f, -0.114229f, -0.118841f, -0.120501f, -0.119614f, -0.116789f, -0.111677f, -0.103680f, -0.093172f, -0.080489f, -0.064566f, -0.044178f, -0.019643f, 0.008060f, 0.038626f, 0.071500f, 0.104878f, 0.136913f, 0.166805f, 0.193866f, 0.216842f, 0.234966f, 0.248504f, 0.257609f, 0.261575f, 0.259590f, 0.251591f, 0.238272f, 0.220487f, 0.198276f, 0.170561f, 0.136698f, 0.098189f, 0.057682f, 0.016496f, -0.025495f, -0.067816f, -0.108621f, - -0.145658f, -0.176870f, -0.200772f, -0.217529f, -0.228950f, -0.236396f, -0.239262f, -0.236051f, -0.226084f, -0.210128f, -0.190544f, -0.170619f, -0.152249f, -0.134448f, -0.115361f, -0.095074f, -0.075354f, -0.057740f, -0.043170f, -0.032135f, -0.023928f, -0.016976f, -0.010829f, -0.006589f, -0.005154f, -0.006616f, -0.011291f, -0.019411f, -0.030043f, -0.042074f, -0.055747f, -0.071687f, -0.089493f, -0.108727f, -0.129821f, -0.152682f, -0.176004f, -0.198998f, -0.221985f, -0.244760f, -0.266417f, -0.286912f, -0.306659f, -0.324871f, -0.340388f, -0.353362f, -0.364168f, -0.372020f, -0.376464f, -0.378404f, -0.378114f, -0.374521f, -0.367666f, -0.359313f, -0.350349f, -0.340361f, -0.329902f, -0.320119f, -0.310406f, -0.299314f, -0.286923f, -0.273822f, -0.259542f, -0.244326f, -0.229980f, -0.217077f, -0.204279f, -0.191540f, -0.180261f, -0.169869f, -0.158554f, -0.147117f, -0.137572f, -0.129135f, -0.120174f, -0.111850f, -0.105358f, -0.098801f, -0.090788f, -0.082858f, -0.075269f, -0.065930f, -0.055595f, -0.047479f, -0.040967f, -0.033205f, -0.025890f, -0.022124f, -0.019442f, -0.014783f, -0.011252f, -0.011244f, -0.010626f, -0.007763f, -0.007496f, -0.009654f, - -0.008162f, -0.005566f, -0.009317f, -0.013253f, -0.007832f, -0.004274f, -0.015488f, -0.023533f, -0.010153f, -0.002382f, -0.027502f, -0.045274f, -0.009521f, 0.021910f, -0.048635f, -0.183515f, -0.228104f, -0.131244f, -0.015609f, 0.018983f, 0.026755f, 0.075115f, 0.100455f, 0.016691f, -0.118628f, -0.165113f, -0.084096f, 0.032836f, 0.098202f, 0.116964f, 0.144314f, 0.200805f, 0.235092f, 0.168366f, -0.003252f, -0.162099f, -0.176037f, -0.055350f, 0.054849f, 0.051827f, -0.015974f, -0.043441f, -0.012571f, 0.007826f, -0.027403f, -0.083452f, -0.095889f, -0.042074f}, - {-0.000057f, 0.004618f, 0.017682f, 0.031128f, 0.031889f, 0.012604f, -0.024428f, -0.067381f, -0.092044f, -0.068699f, 0.006663f, 0.086585f, 0.103494f, 0.041969f, -0.038554f, -0.069591f, -0.044517f, -0.004822f, 0.023300f, 0.046137f, 0.066610f, 0.069547f, 0.049468f, 0.024226f, 0.008422f, -0.007184f, -0.037346f, -0.077238f, -0.107144f, -0.113458f, -0.096785f, -0.066490f, -0.035038f, -0.013153f, -0.003730f, -0.000878f, 0.003116f, 0.011034f, 0.020563f, 0.027847f, 0.030544f, 0.029277f, 0.026700f, 0.024711f, 0.023212f, 0.021560f, 0.019500f, 0.016290f, 0.010748f, 0.002681f, -0.007062f, -0.017978f, -0.030113f, -0.043238f, -0.056960f, -0.071085f, -0.084942f, -0.097195f, -0.106968f, -0.114229f, -0.118841f, -0.120501f, -0.119614f, -0.116789f, -0.111677f, -0.103680f, -0.093172f, -0.080489f, -0.064566f, -0.044178f, -0.019643f, 0.008060f, 0.038626f, 0.071500f, 0.104878f, 0.136913f, 0.166805f, 0.193866f, 0.216842f, 0.234966f, 0.248504f, 0.257609f, 0.261575f, 0.259590f, 0.251591f, 0.238272f, 0.220487f, 0.198276f, 0.170561f, 0.136698f, 0.098189f, 0.057682f, 0.016496f, -0.025495f, -0.067816f, -0.108621f, - -0.145658f, -0.176870f, -0.200772f, -0.217529f, -0.228950f, -0.236396f, -0.239262f, -0.236051f, -0.226084f, -0.210128f, -0.190544f, -0.170619f, -0.152249f, -0.134448f, -0.115361f, -0.095074f, -0.075354f, -0.057740f, -0.043170f, -0.032135f, -0.023928f, -0.016976f, -0.010829f, -0.006589f, -0.005154f, -0.006616f, -0.011291f, -0.019411f, -0.030043f, -0.042074f, -0.055747f, -0.071687f, -0.089493f, -0.108727f, -0.129821f, -0.152682f, -0.176004f, -0.198998f, -0.221985f, -0.244760f, -0.266417f, -0.286912f, -0.306659f, -0.324871f, -0.340388f, -0.353362f, -0.364168f, -0.372020f, -0.376464f, -0.378404f, -0.378114f, -0.374521f, -0.367666f, -0.359313f, -0.350349f, -0.340361f, -0.329902f, -0.320119f, -0.310406f, -0.299314f, -0.286923f, -0.273822f, -0.259542f, -0.244326f, -0.229980f, -0.217077f, -0.204279f, -0.191540f, -0.180261f, -0.169869f, -0.158554f, -0.147117f, -0.137572f, -0.129135f, -0.120174f, -0.111850f, -0.105358f, -0.098801f, -0.090788f, -0.082858f, -0.075269f, -0.065930f, -0.055595f, -0.047479f, -0.040967f, -0.033205f, -0.025890f, -0.022124f, -0.019442f, -0.014783f, -0.011252f, -0.011244f, -0.010626f, -0.007763f, -0.007496f, -0.009654f, - -0.008162f, -0.005566f, -0.009317f, -0.013253f, -0.007832f, -0.004274f, -0.015488f, -0.023533f, -0.010153f, -0.002382f, -0.027502f, -0.045274f, -0.009521f, 0.021910f, -0.048635f, -0.183515f, -0.228104f, -0.131244f, -0.015609f, 0.018983f, 0.026755f, 0.075115f, 0.100455f, 0.016691f, -0.118628f, -0.165113f, -0.084096f, 0.032836f, 0.098202f, 0.116964f, 0.144314f, 0.200805f, 0.235092f, 0.168366f, -0.003252f, -0.162099f, -0.176037f, -0.055350f, 0.054849f, 0.051827f, -0.015974f, -0.043441f, -0.012571f, 0.007826f, -0.027403f, -0.083452f, -0.095889f, -0.042074f} - }, - { - {0.003286f, 0.020663f, 0.047015f, 0.053514f, 0.027668f, -0.018005f, -0.074845f, -0.129718f, -0.133764f, -0.040778f, 0.107952f, 0.192417f, 0.138911f, 0.002813f, -0.096900f, -0.097211f, -0.027296f, 0.041753f, 0.055973f, 0.009638f, -0.053234f, -0.074730f, -0.036276f, 0.028003f, 0.073968f, 0.088912f, 0.085590f, 0.075178f, 0.060843f, 0.045753f, 0.031933f, 0.015643f, -0.006543f, -0.030509f, -0.049634f, -0.063067f, -0.073747f, -0.081798f, -0.084797f, -0.082534f, -0.077869f, -0.073890f, -0.072300f, -0.073599f, -0.077378f, -0.082705f, -0.088483f, -0.093078f, -0.094258f, -0.090539f, -0.082362f, -0.071359f, -0.059106f, -0.047102f, -0.036931f, -0.029407f, -0.023973f, -0.019544f, -0.015494f, -0.011431f, -0.006598f, 0.000010f, 0.009248f, 0.021699f, 0.037488f, 0.055980f, 0.076003f, 0.096419f, 0.116146f, 0.133812f, 0.148176f, 0.159051f, 0.167129f, 0.172618f, 0.174876f, 0.173820f, 0.170796f, 0.167101f, 0.162315f, 0.155354f, 0.146888f, 0.139280f, 0.133952f, 0.130225f, 0.127363f, 0.126470f, 0.129155f, 0.134873f, 0.140780f, 0.144329f, 0.145336f, 0.145342f, 0.145533f, 0.145667f, 0.144745f, 0.142112f, - 0.137732f, 0.131877f, 0.125120f, 0.118473f, 0.112800f, 0.107738f, 0.101543f, 0.092388f, 0.079744f, 0.064329f, 0.046886f, 0.027329f, 0.005126f, -0.019726f, -0.046309f, -0.073397f, -0.100300f, -0.127038f, -0.153757f, -0.180066f, -0.204868f, -0.226760f, -0.244721f, -0.258627f, -0.269120f, -0.276888f, -0.282007f, -0.283898f, -0.281834f, -0.275598f, -0.265873f, -0.254057f, -0.241477f, -0.228516f, -0.214415f, -0.197989f, -0.178738f, -0.157442f, -0.135714f, -0.114934f, -0.095604f, -0.077515f, -0.060115f, -0.042690f, -0.024757f, -0.006617f, 0.010792f, 0.026792f, 0.041319f, 0.054297f, 0.065248f, 0.073855f, 0.080421f, 0.085476f, 0.089337f, 0.092227f, 0.094391f, 0.095900f, 0.096594f, 0.096231f, 0.094555f, 0.091499f, 0.087561f, 0.083596f, 0.080064f, 0.076942f, 0.074384f, 0.072705f, 0.071678f, 0.070768f, 0.070120f, 0.070423f, 0.071853f, 0.074033f, 0.076789f, 0.079999f, 0.083058f, 0.085305f, 0.086394f, 0.085686f, 0.082340f, 0.076614f, 0.069777f, 0.062351f, 0.054034f, 0.045374f, 0.037457f, 0.030035f, 0.022223f, 0.014513f, 0.007727f, 0.001194f, -0.005463f, -0.010784f, -0.014329f, -0.017958f, - -0.021688f, -0.022941f, -0.022426f, -0.024089f, -0.026735f, -0.025120f, -0.021928f, -0.025401f, -0.031768f, -0.028507f, -0.020527f, -0.027990f, -0.046743f, -0.042080f, -0.003396f, 0.027264f, 0.013170f, -0.020073f, -0.025760f, -0.008495f, -0.005552f, -0.014133f, 0.003435f, 0.044906f, 0.059066f, 0.024448f, -0.015911f, -0.021124f, -0.009130f, -0.017009f, -0.041372f, -0.056366f, -0.066541f, -0.097055f, -0.137463f, -0.138780f, -0.079675f, -0.003607f, 0.033428f, 0.030812f, 0.028961f, 0.041471f, 0.044399f, 0.035401f, 0.052169f, 0.103505f, 0.125865f, 0.058885f}, - {0.003286f, 0.020663f, 0.047015f, 0.053514f, 0.027668f, -0.018005f, -0.074845f, -0.129718f, -0.133764f, -0.040778f, 0.107952f, 0.192417f, 0.138911f, 0.002813f, -0.096900f, -0.097211f, -0.027296f, 0.041753f, 0.055973f, 0.009638f, -0.053234f, -0.074730f, -0.036276f, 0.028003f, 0.073968f, 0.088912f, 0.085590f, 0.075178f, 0.060843f, 0.045753f, 0.031933f, 0.015643f, -0.006543f, -0.030509f, -0.049634f, -0.063067f, -0.073747f, -0.081798f, -0.084797f, -0.082534f, -0.077869f, -0.073890f, -0.072300f, -0.073599f, -0.077378f, -0.082705f, -0.088483f, -0.093078f, -0.094258f, -0.090539f, -0.082362f, -0.071359f, -0.059106f, -0.047102f, -0.036931f, -0.029407f, -0.023973f, -0.019544f, -0.015494f, -0.011431f, -0.006598f, 0.000010f, 0.009248f, 0.021699f, 0.037488f, 0.055980f, 0.076003f, 0.096419f, 0.116146f, 0.133812f, 0.148176f, 0.159051f, 0.167129f, 0.172618f, 0.174876f, 0.173820f, 0.170796f, 0.167101f, 0.162315f, 0.155354f, 0.146888f, 0.139280f, 0.133952f, 0.130225f, 0.127363f, 0.126470f, 0.129155f, 0.134873f, 0.140780f, 0.144329f, 0.145336f, 0.145342f, 0.145533f, 0.145667f, 0.144745f, 0.142112f, - 0.137732f, 0.131877f, 0.125120f, 0.118473f, 0.112800f, 0.107738f, 0.101543f, 0.092388f, 0.079744f, 0.064329f, 0.046886f, 0.027329f, 0.005126f, -0.019726f, -0.046309f, -0.073397f, -0.100300f, -0.127038f, -0.153757f, -0.180066f, -0.204868f, -0.226760f, -0.244721f, -0.258627f, -0.269120f, -0.276888f, -0.282007f, -0.283898f, -0.281834f, -0.275598f, -0.265873f, -0.254057f, -0.241477f, -0.228516f, -0.214415f, -0.197989f, -0.178738f, -0.157442f, -0.135714f, -0.114934f, -0.095604f, -0.077515f, -0.060115f, -0.042690f, -0.024757f, -0.006617f, 0.010792f, 0.026792f, 0.041319f, 0.054297f, 0.065248f, 0.073855f, 0.080421f, 0.085476f, 0.089337f, 0.092227f, 0.094391f, 0.095900f, 0.096594f, 0.096231f, 0.094555f, 0.091499f, 0.087561f, 0.083596f, 0.080064f, 0.076942f, 0.074384f, 0.072705f, 0.071678f, 0.070768f, 0.070120f, 0.070423f, 0.071853f, 0.074033f, 0.076789f, 0.079999f, 0.083058f, 0.085305f, 0.086394f, 0.085686f, 0.082340f, 0.076614f, 0.069777f, 0.062351f, 0.054034f, 0.045374f, 0.037457f, 0.030035f, 0.022223f, 0.014513f, 0.007727f, 0.001194f, -0.005463f, -0.010784f, -0.014329f, -0.017958f, - -0.021688f, -0.022941f, -0.022426f, -0.024089f, -0.026735f, -0.025120f, -0.021928f, -0.025401f, -0.031768f, -0.028507f, -0.020527f, -0.027990f, -0.046743f, -0.042080f, -0.003396f, 0.027264f, 0.013170f, -0.020073f, -0.025760f, -0.008495f, -0.005552f, -0.014133f, 0.003435f, 0.044906f, 0.059066f, 0.024448f, -0.015911f, -0.021124f, -0.009130f, -0.017009f, -0.041372f, -0.056366f, -0.066541f, -0.097055f, -0.137463f, -0.138780f, -0.079675f, -0.003607f, 0.033428f, 0.030812f, 0.028961f, 0.041471f, 0.044399f, 0.035401f, 0.052169f, 0.103505f, 0.125865f, 0.058885f} - }, - { - {-0.008208f, -0.013688f, -0.006252f, -0.003509f, -0.000109f, 0.028292f, 0.061055f, 0.024138f, -0.104438f, -0.212259f, -0.151442f, 0.066373f, 0.240645f, 0.196077f, -0.011619f, -0.162771f, -0.129256f, 0.005131f, 0.087028f, 0.080806f, 0.064102f, 0.086674f, 0.110230f, 0.085283f, 0.023202f, -0.032808f, -0.069022f, -0.103127f, -0.145227f, -0.184194f, -0.205940f, -0.206303f, -0.187706f, -0.155585f, -0.118331f, -0.083351f, -0.052728f, -0.025564f, -0.002289f, 0.015831f, 0.028630f, 0.036097f, 0.037847f, 0.035268f, 0.032049f, 0.031340f, 0.033967f, 0.039715f, 0.048284f, 0.058597f, 0.068960f, 0.078321f, 0.086272f, 0.091981f, 0.094350f, 0.093104f, 0.088896f, 0.082572f, 0.074997f, 0.067252f, 0.060472f, 0.055558f, 0.053169f, 0.053701f, 0.057297f, 0.064029f, 0.073926f, 0.086744f, 0.102064f, 0.119670f, 0.139384f, 0.160516f, 0.181938f, 0.202628f, 0.221700f, 0.238171f, 0.251219f, 0.260419f, 0.265483f, 0.266392f, 0.264039f, 0.259842f, 0.254367f, 0.247216f, 0.238440f, 0.228874f, 0.218946f, 0.208612f, 0.198629f, 0.190002f, 0.181465f, 0.169225f, 0.150296f, 0.124983f, 0.095177f, 0.061211f, - 0.021451f, -0.025424f, -0.078440f, -0.134573f, -0.190595f, -0.244573f, -0.295574f, -0.342341f, -0.383017f, -0.416353f, -0.442566f, -0.462633f, -0.476956f, -0.484792f, -0.484883f, -0.476795f, -0.461886f, -0.442644f, -0.420810f, -0.396369f, -0.368491f, -0.337007f, -0.302883f, -0.267801f, -0.233394f, -0.200316f, -0.167839f, -0.134651f, -0.100107f, -0.064503f, -0.028445f, 0.007706f, 0.044017f, 0.080865f, 0.118334f, 0.155669f, 0.191736f, 0.225992f, 0.258520f, 0.289333f, 0.318229f, 0.344969f, 0.368855f, 0.388566f, 0.403168f, 0.412970f, 0.418830f, 0.421249f, 0.420617f, 0.417464f, 0.411799f, 0.403018f, 0.391082f, 0.377094f, 0.362346f, 0.347502f, 0.332870f, 0.318542f, 0.303993f, 0.288174f, 0.270212f, 0.249812f, 0.227373f, 0.204002f, 0.180881f, 0.158425f, 0.136570f, 0.115633f, 0.095977f, 0.077237f, 0.059024f, 0.041966f, 0.026915f, 0.013775f, 0.002182f, -0.007580f, -0.015397f, -0.021975f, -0.027835f, -0.032904f, -0.037503f, -0.042152f, -0.046265f, -0.048885f, -0.050394f, -0.051562f, -0.051807f, -0.050532f, -0.048722f, -0.047061f, -0.044541f, -0.040961f, -0.037883f, -0.035465f, -0.032172f, -0.028676f, - -0.027034f, -0.025811f, -0.022482f, -0.019608f, -0.020221f, -0.019720f, -0.013487f, -0.008119f, -0.010233f, -0.010395f, 0.001311f, 0.010757f, -0.000943f, -0.017589f, -0.002503f, 0.044026f, 0.079204f, 0.078273f, 0.062973f, 0.057328f, 0.054722f, 0.047981f, 0.053572f, 0.079412f, 0.100675f, 0.095962f, 0.081490f, 0.082712f, 0.095429f, 0.100415f, 0.094405f, 0.081773f, 0.057784f, 0.027126f, 0.018211f, 0.048214f, 0.088778f, 0.097349f, 0.072951f, 0.051550f, 0.052834f, 0.062422f, 0.067011f, 0.076631f, 0.100316f, 0.119769f, 0.103439f, 0.041360f}, - {-0.008208f, -0.013688f, -0.006252f, -0.003509f, -0.000109f, 0.028292f, 0.061055f, 0.024138f, -0.104438f, -0.212259f, -0.151442f, 0.066373f, 0.240645f, 0.196077f, -0.011619f, -0.162771f, -0.129256f, 0.005131f, 0.087028f, 0.080806f, 0.064102f, 0.086674f, 0.110230f, 0.085283f, 0.023202f, -0.032808f, -0.069022f, -0.103127f, -0.145227f, -0.184194f, -0.205940f, -0.206303f, -0.187706f, -0.155585f, -0.118331f, -0.083351f, -0.052728f, -0.025564f, -0.002289f, 0.015831f, 0.028630f, 0.036097f, 0.037847f, 0.035268f, 0.032049f, 0.031340f, 0.033967f, 0.039715f, 0.048284f, 0.058597f, 0.068960f, 0.078321f, 0.086272f, 0.091981f, 0.094350f, 0.093104f, 0.088896f, 0.082572f, 0.074997f, 0.067252f, 0.060472f, 0.055558f, 0.053169f, 0.053701f, 0.057297f, 0.064029f, 0.073926f, 0.086744f, 0.102064f, 0.119670f, 0.139384f, 0.160516f, 0.181938f, 0.202628f, 0.221700f, 0.238171f, 0.251219f, 0.260419f, 0.265483f, 0.266392f, 0.264039f, 0.259842f, 0.254367f, 0.247216f, 0.238440f, 0.228874f, 0.218946f, 0.208612f, 0.198629f, 0.190002f, 0.181465f, 0.169225f, 0.150296f, 0.124983f, 0.095177f, 0.061211f, - 0.021451f, -0.025424f, -0.078440f, -0.134573f, -0.190595f, -0.244573f, -0.295574f, -0.342341f, -0.383017f, -0.416353f, -0.442566f, -0.462633f, -0.476956f, -0.484792f, -0.484883f, -0.476795f, -0.461886f, -0.442644f, -0.420810f, -0.396369f, -0.368491f, -0.337007f, -0.302883f, -0.267801f, -0.233394f, -0.200316f, -0.167839f, -0.134651f, -0.100107f, -0.064503f, -0.028445f, 0.007706f, 0.044017f, 0.080865f, 0.118334f, 0.155669f, 0.191736f, 0.225992f, 0.258520f, 0.289333f, 0.318229f, 0.344969f, 0.368855f, 0.388566f, 0.403168f, 0.412970f, 0.418830f, 0.421249f, 0.420617f, 0.417464f, 0.411799f, 0.403018f, 0.391082f, 0.377094f, 0.362346f, 0.347502f, 0.332870f, 0.318542f, 0.303993f, 0.288174f, 0.270212f, 0.249812f, 0.227373f, 0.204002f, 0.180881f, 0.158425f, 0.136570f, 0.115633f, 0.095977f, 0.077237f, 0.059024f, 0.041966f, 0.026915f, 0.013775f, 0.002182f, -0.007580f, -0.015397f, -0.021975f, -0.027835f, -0.032904f, -0.037503f, -0.042152f, -0.046265f, -0.048885f, -0.050394f, -0.051562f, -0.051807f, -0.050532f, -0.048722f, -0.047061f, -0.044541f, -0.040961f, -0.037883f, -0.035465f, -0.032172f, -0.028676f, - -0.027034f, -0.025811f, -0.022482f, -0.019608f, -0.020221f, -0.019720f, -0.013487f, -0.008119f, -0.010233f, -0.010395f, 0.001311f, 0.010757f, -0.000943f, -0.017589f, -0.002503f, 0.044026f, 0.079204f, 0.078273f, 0.062973f, 0.057328f, 0.054722f, 0.047981f, 0.053572f, 0.079412f, 0.100675f, 0.095962f, 0.081490f, 0.082712f, 0.095429f, 0.100415f, 0.094405f, 0.081773f, 0.057784f, 0.027126f, 0.018211f, 0.048214f, 0.088778f, 0.097349f, 0.072951f, 0.051550f, 0.052834f, 0.062422f, 0.067011f, 0.076631f, 0.100316f, 0.119769f, 0.103439f, 0.041360f} - }, - { - {0.000219f, 0.000300f, -0.000470f, -0.002728f, -0.006703f, -0.008428f, -0.000706f, 0.012589f, 0.007717f, -0.030161f, -0.063150f, -0.022389f, 0.092419f, 0.167025f, 0.089527f, -0.089858f, -0.186663f, -0.096473f, 0.078276f, 0.157986f, 0.092888f, -0.015711f, -0.064513f, -0.046259f, -0.006048f, 0.029868f, 0.057048f, 0.067711f, 0.054805f, 0.025907f, -0.004867f, -0.030693f, -0.050327f, -0.062834f, -0.070993f, -0.082208f, -0.100409f, -0.121588f, -0.139387f, -0.150407f, -0.153184f, -0.147055f, -0.133768f, -0.117152f, -0.100383f, -0.085266f, -0.073367f, -0.065601f, -0.061218f, -0.058786f, -0.057561f, -0.056982f, -0.055899f, -0.053334f, -0.049279f, -0.044299f, -0.039109f, -0.034702f, -0.031969f, -0.031001f, -0.031321f, -0.032558f, -0.034285f, -0.035576f, -0.035504f, -0.033868f, -0.030920f, -0.026684f, -0.021019f, -0.014048f, -0.006042f, 0.002921f, 0.012786f, 0.023091f, 0.033121f, 0.042601f, 0.051888f, 0.061215f, 0.070060f, 0.077878f, 0.085314f, 0.093797f, 0.103649f, 0.113550f, 0.122419f, 0.130931f, 0.140271f, 0.149926f, 0.157672f, 0.161652f, 0.161819f, 0.159329f, 0.155027f, 0.148727f, 0.139965f, 0.129315f, - 0.118619f, 0.109608f, 0.102489f, 0.096346f, 0.090816f, 0.087026f, 0.086861f, 0.091494f, 0.100455f, 0.111859f, 0.123631f, 0.134788f, 0.145673f, 0.157015f, 0.168875f, 0.180410f, 0.190453f, 0.198281f, 0.203996f, 0.208295f, 0.211928f, 0.215320f, 0.218485f, 0.221142f, 0.222973f, 0.223938f, 0.224257f, 0.223992f, 0.222832f, 0.220406f, 0.216624f, 0.211660f, 0.205873f, 0.199818f, 0.194086f, 0.189011f, 0.184682f, 0.181185f, 0.178623f, 0.176955f, 0.176031f, 0.175702f, 0.175731f, 0.175711f, 0.175153f, 0.173544f, 0.170305f, 0.164929f, 0.157174f, 0.146976f, 0.134373f, 0.119682f, 0.103470f, 0.086119f, 0.067710f, 0.048467f, 0.028881f, 0.009271f, -0.010260f, -0.029330f, -0.047315f, -0.063863f, -0.078855f, -0.091983f, -0.102963f, -0.111948f, -0.119186f, -0.124595f, -0.128116f, -0.130005f, -0.130481f, -0.129750f, -0.128536f, -0.127737f, -0.127523f, -0.127680f, -0.128531f, -0.130397f, -0.132664f, -0.134604f, -0.136451f, -0.138583f, -0.140708f, -0.142803f, -0.145415f, -0.148218f, -0.150086f, -0.150982f, -0.151526f, -0.150868f, -0.147786f, -0.143240f, -0.138700f, -0.133465f, -0.126931f, -0.120761f, - -0.115292f, -0.108172f, -0.099972f, -0.094325f, -0.089251f, -0.078635f, -0.065607f, -0.059298f, -0.054658f, -0.037602f, -0.015717f, -0.011967f, -0.016342f, 0.013157f, 0.076563f, 0.108377f, 0.069685f, 0.015195f, 0.011815f, 0.037173f, 0.033724f, 0.024026f, 0.075469f, 0.166990f, 0.196872f, 0.134676f, 0.067436f, 0.066393f, 0.096537f, 0.098834f, 0.080944f, 0.071627f, 0.053354f, 0.007270f, -0.023186f, 0.015389f, 0.096957f, 0.143102f, 0.126994f, 0.094569f, 0.086781f, 0.093942f, 0.095842f, 0.101364f, 0.124293f, 0.145641f, 0.126044f, 0.050604f}, - {0.000219f, 0.000300f, -0.000470f, -0.002728f, -0.006703f, -0.008428f, -0.000706f, 0.012589f, 0.007717f, -0.030161f, -0.063150f, -0.022389f, 0.092419f, 0.167025f, 0.089527f, -0.089858f, -0.186663f, -0.096473f, 0.078276f, 0.157986f, 0.092888f, -0.015711f, -0.064513f, -0.046259f, -0.006048f, 0.029868f, 0.057048f, 0.067711f, 0.054805f, 0.025907f, -0.004867f, -0.030693f, -0.050327f, -0.062834f, -0.070993f, -0.082208f, -0.100409f, -0.121588f, -0.139387f, -0.150407f, -0.153184f, -0.147055f, -0.133768f, -0.117152f, -0.100383f, -0.085266f, -0.073367f, -0.065601f, -0.061218f, -0.058786f, -0.057561f, -0.056982f, -0.055899f, -0.053334f, -0.049279f, -0.044299f, -0.039109f, -0.034702f, -0.031969f, -0.031001f, -0.031321f, -0.032558f, -0.034285f, -0.035576f, -0.035504f, -0.033868f, -0.030920f, -0.026684f, -0.021019f, -0.014048f, -0.006042f, 0.002921f, 0.012786f, 0.023091f, 0.033121f, 0.042601f, 0.051888f, 0.061215f, 0.070060f, 0.077878f, 0.085314f, 0.093797f, 0.103649f, 0.113550f, 0.122419f, 0.130931f, 0.140271f, 0.149926f, 0.157672f, 0.161652f, 0.161819f, 0.159329f, 0.155027f, 0.148727f, 0.139965f, 0.129315f, - 0.118619f, 0.109608f, 0.102489f, 0.096346f, 0.090816f, 0.087026f, 0.086861f, 0.091494f, 0.100455f, 0.111859f, 0.123631f, 0.134788f, 0.145673f, 0.157015f, 0.168875f, 0.180410f, 0.190453f, 0.198281f, 0.203996f, 0.208295f, 0.211928f, 0.215320f, 0.218485f, 0.221142f, 0.222973f, 0.223938f, 0.224257f, 0.223992f, 0.222832f, 0.220406f, 0.216624f, 0.211660f, 0.205873f, 0.199818f, 0.194086f, 0.189011f, 0.184682f, 0.181185f, 0.178623f, 0.176955f, 0.176031f, 0.175702f, 0.175731f, 0.175711f, 0.175153f, 0.173544f, 0.170305f, 0.164929f, 0.157174f, 0.146976f, 0.134373f, 0.119682f, 0.103470f, 0.086119f, 0.067710f, 0.048467f, 0.028881f, 0.009271f, -0.010260f, -0.029330f, -0.047315f, -0.063863f, -0.078855f, -0.091983f, -0.102963f, -0.111948f, -0.119186f, -0.124595f, -0.128116f, -0.130005f, -0.130481f, -0.129750f, -0.128536f, -0.127737f, -0.127523f, -0.127680f, -0.128531f, -0.130397f, -0.132664f, -0.134604f, -0.136451f, -0.138583f, -0.140708f, -0.142803f, -0.145415f, -0.148218f, -0.150086f, -0.150982f, -0.151526f, -0.150868f, -0.147786f, -0.143240f, -0.138700f, -0.133465f, -0.126931f, -0.120761f, - -0.115292f, -0.108172f, -0.099972f, -0.094325f, -0.089251f, -0.078635f, -0.065607f, -0.059298f, -0.054658f, -0.037602f, -0.015717f, -0.011967f, -0.016342f, 0.013157f, 0.076563f, 0.108377f, 0.069685f, 0.015195f, 0.011815f, 0.037173f, 0.033724f, 0.024026f, 0.075469f, 0.166990f, 0.196872f, 0.134676f, 0.067436f, 0.066393f, 0.096537f, 0.098834f, 0.080944f, 0.071627f, 0.053354f, 0.007270f, -0.023186f, 0.015389f, 0.096957f, 0.143102f, 0.126994f, 0.094569f, 0.086781f, 0.093942f, 0.095842f, 0.101364f, 0.124293f, 0.145641f, 0.126044f, 0.050604f} - } -}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 32000 */ const int16_t CRendBin_HOA3_HRIR_max_num_iterations_32kHz = 1; @@ -1599,215 +189,10 @@ const uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[16][BINAURAL_CHANNELS]={{ const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS] = {0, 0}; const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][BINAURAL_CHANNELS][1]={{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}},{{160},{160}}}; const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz = 0; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#else const Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz_fx[16]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][BINAURAL_CHANNELS][160]={ - { - {0.931532f, 0.779586f, 0.534806f, 0.267486f, 0.027500f, -0.161171f, -0.309658f, -0.450275f, -0.580679f, -0.647362f, -0.612734f, -0.489723f, -0.275668f, 0.054919f, 0.402480f, 0.495609f, 0.176032f, -0.298719f, -0.442377f, -0.084625f, 0.429064f, 0.650237f, 0.490213f, 0.176336f, -0.101893f, -0.334041f, -0.548421f, -0.712689f, -0.798336f, -0.833235f, -0.851109f, -0.849315f, -0.819587f, -0.775679f, -0.732168f, -0.686769f, -0.635729f, -0.584686f, -0.537641f, -0.491741f, -0.445951f, -0.402650f, -0.360980f, -0.318308f, -0.276103f, -0.236981f, -0.199525f, -0.161814f, -0.125607f, -0.092516f, -0.060704f, -0.028744f, 0.001865f, 0.030189f, 0.057418f, 0.083709f, 0.107616f, 0.129141f, 0.149647f, 0.169072f, 0.186505f, 0.202619f, 0.218604f, 0.233964f, 0.247817f, 0.260837f, 0.273890f, 0.286455f, 0.298003f, 0.309223f, 0.320684f, 0.331955f, 0.342805f, 0.353754f, 0.365034f, 0.376301f, 0.387457f, 0.398686f, 0.409965f, 0.421281f, 0.432717f, 0.443847f, 0.453997f, 0.463372f, 0.472714f, 0.481764f, 0.489489f, 0.495891f, 0.502022f, 0.508134f, 0.513263f, 0.516755f, 0.518993f, 0.520614f, 0.521907f, 0.522857f, - 0.523146f, 0.522523f, 0.521573f, 0.521473f, 0.522622f, 0.524278f, 0.525810f, 0.527544f, 0.530160f, 0.534008f, 0.539089f, 0.545026f, 0.551103f, 0.556966f, 0.563115f, 0.570181f, 0.578053f, 0.586133f, 0.593998f, 0.601393f, 0.608145f, 0.614471f, 0.620875f, 0.627436f, 0.633702f, 0.639394f, 0.644645f, 0.649553f, 0.654100f, 0.658455f, 0.662756f, 0.666713f, 0.669967f, 0.672628f, 0.675002f, 0.677150f, 0.679153f, 0.681355f, 0.683893f, 0.686498f, 0.689096f, 0.692014f, 0.695373f, 0.699038f, 0.703324f, 0.708802f, 0.715349f, 0.722435f, 0.730226f, 0.739134f, 0.748704f, 0.758497f, 0.769323f, 0.781691f, 0.794631f, 0.808625f, 0.825667f, 0.839224f, 0.827293f, 0.769028f, 0.673613f, 0.581351f, 0.526749f, 0.508903f}, - {0.931532f, 0.779586f, 0.534806f, 0.267486f, 0.027500f, -0.161171f, -0.309658f, -0.450275f, -0.580679f, -0.647362f, -0.612734f, -0.489723f, -0.275668f, 0.054919f, 0.402480f, 0.495609f, 0.176032f, -0.298719f, -0.442377f, -0.084625f, 0.429064f, 0.650237f, 0.490213f, 0.176336f, -0.101893f, -0.334041f, -0.548421f, -0.712689f, -0.798336f, -0.833235f, -0.851109f, -0.849315f, -0.819587f, -0.775679f, -0.732168f, -0.686769f, -0.635729f, -0.584686f, -0.537641f, -0.491741f, -0.445951f, -0.402650f, -0.360980f, -0.318308f, -0.276103f, -0.236981f, -0.199525f, -0.161814f, -0.125607f, -0.092516f, -0.060704f, -0.028744f, 0.001865f, 0.030189f, 0.057418f, 0.083709f, 0.107616f, 0.129141f, 0.149647f, 0.169072f, 0.186505f, 0.202619f, 0.218604f, 0.233964f, 0.247817f, 0.260837f, 0.273890f, 0.286455f, 0.298003f, 0.309223f, 0.320684f, 0.331955f, 0.342805f, 0.353754f, 0.365034f, 0.376301f, 0.387457f, 0.398686f, 0.409965f, 0.421281f, 0.432717f, 0.443847f, 0.453997f, 0.463372f, 0.472714f, 0.481764f, 0.489489f, 0.495891f, 0.502022f, 0.508134f, 0.513263f, 0.516755f, 0.518993f, 0.520614f, 0.521907f, 0.522857f, - 0.523146f, 0.522523f, 0.521573f, 0.521473f, 0.522622f, 0.524278f, 0.525810f, 0.527544f, 0.530160f, 0.534008f, 0.539089f, 0.545026f, 0.551103f, 0.556966f, 0.563115f, 0.570181f, 0.578053f, 0.586133f, 0.593998f, 0.601393f, 0.608145f, 0.614471f, 0.620875f, 0.627436f, 0.633702f, 0.639394f, 0.644645f, 0.649553f, 0.654100f, 0.658455f, 0.662756f, 0.666713f, 0.669967f, 0.672628f, 0.675002f, 0.677150f, 0.679153f, 0.681355f, 0.683893f, 0.686498f, 0.689096f, 0.692014f, 0.695373f, 0.699038f, 0.703324f, 0.708802f, 0.715349f, 0.722435f, 0.730226f, 0.739134f, 0.748704f, 0.758497f, 0.769323f, 0.781691f, 0.794631f, 0.808625f, 0.825667f, 0.839224f, 0.827293f, 0.769028f, 0.673613f, 0.581351f, 0.526749f, 0.508903f} - }, - { - {0.025824f, 0.254482f, 0.612140f, 0.908281f, 0.966338f, 0.746349f, 0.326804f, -0.189774f, -0.683810f, -1.011094f, -1.110601f, -1.050792f, -0.841050f, -0.331373f, 0.453002f, 0.990359f, 0.684451f, -0.303752f, -1.023046f, -0.756945f, 0.181886f, 0.916524f, 1.017605f, 0.742230f, 0.451730f, 0.204139f, -0.066098f, -0.311503f, -0.457293f, -0.536699f, -0.617322f, -0.694602f, -0.735639f, -0.751680f, -0.768963f, -0.782765f, -0.780489f, -0.769523f, -0.757459f, -0.737198f, -0.705559f, -0.670342f, -0.633558f, -0.589942f, -0.541742f, -0.495987f, -0.451106f, -0.402147f, -0.352739f, -0.308813f, -0.268274f, -0.227132f, -0.187240f, -0.150381f, -0.113561f, -0.075466f, -0.039106f, -0.005245f, 0.028554f, 0.061642f, 0.090951f, 0.117114f, 0.142717f, 0.166563f, 0.186151f, 0.202842f, 0.218927f, 0.233139f, 0.243777f, 0.252381f, 0.260617f, 0.267492f, 0.272370f, 0.276920f, 0.282318f, 0.288000f, 0.293924f, 0.300949f, 0.309137f, 0.318235f, 0.328763f, 0.340586f, 0.352257f, 0.363455f, 0.375587f, 0.388768f, 0.401116f, 0.411976f, 0.422808f, 0.434307f, 0.445690f, 0.457064f, 0.469628f, 0.483664f, 0.498780f, 0.515481f, - 0.534276f, 0.554263f, 0.574434f, 0.595002f, 0.615889f, 0.635594f, 0.652882f, 0.667922f, 0.680882f, 0.691118f, 0.698246f, 0.702348f, 0.703094f, 0.700394f, 0.695668f, 0.690852f, 0.686570f, 0.682549f, 0.678880f, 0.675687f, 0.672709f, 0.670365f, 0.669993f, 0.672124f, 0.675718f, 0.679580f, 0.683205f, 0.686101f, 0.687934f, 0.689429f, 0.691608f, 0.694284f, 0.696649f, 0.698823f, 0.701383f, 0.704096f, 0.706544f, 0.709152f, 0.712317f, 0.715522f, 0.718443f, 0.721714f, 0.725654f, 0.729661f, 0.733628f, 0.738335f, 0.743905f, 0.749740f, 0.756281f, 0.764683f, 0.774778f, 0.785838f, 0.798756f, 0.814520f, 0.832066f, 0.851590f, 0.875921f, 0.899332f, 0.897448f, 0.844156f, 0.745650f, 0.645128f, 0.582813f, 0.561026f}, - {-0.025824f, -0.254482f, -0.612140f, -0.908281f, -0.966338f, -0.746349f, -0.326804f, 0.189774f, 0.683810f, 1.011094f, 1.110601f, 1.050792f, 0.841050f, 0.331373f, -0.453002f, -0.990359f, -0.684451f, 0.303752f, 1.023046f, 0.756945f, -0.181886f, -0.916524f, -1.017605f, -0.742230f, -0.451730f, -0.204139f, 0.066098f, 0.311503f, 0.457293f, 0.536699f, 0.617322f, 0.694602f, 0.735639f, 0.751680f, 0.768963f, 0.782765f, 0.780489f, 0.769523f, 0.757459f, 0.737198f, 0.705559f, 0.670342f, 0.633558f, 0.589942f, 0.541742f, 0.495987f, 0.451106f, 0.402147f, 0.352739f, 0.308813f, 0.268274f, 0.227132f, 0.187240f, 0.150381f, 0.113561f, 0.075466f, 0.039106f, 0.005245f, -0.028554f, -0.061642f, -0.090951f, -0.117114f, -0.142717f, -0.166563f, -0.186151f, -0.202842f, -0.218927f, -0.233139f, -0.243777f, -0.252381f, -0.260617f, -0.267492f, -0.272370f, -0.276920f, -0.282318f, -0.288000f, -0.293924f, -0.300949f, -0.309137f, -0.318235f, -0.328763f, -0.340586f, -0.352257f, -0.363455f, -0.375587f, -0.388768f, -0.401116f, -0.411976f, -0.422808f, -0.434307f, -0.445690f, -0.457064f, -0.469628f, -0.483664f, -0.498780f, -0.515481f, - -0.534276f, -0.554263f, -0.574434f, -0.595002f, -0.615889f, -0.635594f, -0.652882f, -0.667922f, -0.680882f, -0.691118f, -0.698246f, -0.702348f, -0.703094f, -0.700394f, -0.695668f, -0.690852f, -0.686570f, -0.682549f, -0.678880f, -0.675687f, -0.672709f, -0.670365f, -0.669993f, -0.672124f, -0.675718f, -0.679580f, -0.683205f, -0.686101f, -0.687934f, -0.689429f, -0.691608f, -0.694284f, -0.696649f, -0.698823f, -0.701383f, -0.704096f, -0.706544f, -0.709152f, -0.712317f, -0.715522f, -0.718443f, -0.721714f, -0.725654f, -0.729661f, -0.733628f, -0.738335f, -0.743905f, -0.749740f, -0.756281f, -0.764683f, -0.774778f, -0.785838f, -0.798756f, -0.814520f, -0.832066f, -0.851590f, -0.875921f, -0.899332f, -0.897448f, -0.844156f, -0.745650f, -0.645128f, -0.582813f, -0.561026f} - }, - { - {0.119957f, 0.117962f, 0.069212f, -0.029675f, -0.108741f, -0.102118f, -0.023931f, 0.056050f, 0.088085f, 0.070763f, 0.023879f, -0.033299f, -0.074494f, -0.065471f, 0.002786f, 0.081205f, 0.092077f, 0.015549f, -0.067599f, -0.053344f, 0.064674f, 0.183481f, 0.206152f, 0.135803f, 0.042639f, -0.024752f, -0.066208f, -0.094901f, -0.114472f, -0.127164f, -0.137723f, -0.145267f, -0.144666f, -0.136342f, -0.126255f, -0.118741f, -0.116220f, -0.122116f, -0.137393f, -0.157052f, -0.174865f, -0.189037f, -0.200404f, -0.208724f, -0.213653f, -0.216386f, -0.217918f, -0.217629f, -0.214601f, -0.208243f, -0.197216f, -0.179855f, -0.155904f, -0.126242f, -0.091188f, -0.050638f, -0.005448f, 0.042864f, 0.093516f, 0.146388f, 0.200914f, 0.256043f, 0.311008f, 0.365277f, 0.417798f, 0.466855f, 0.510693f, 0.547948f, 0.577466f, 0.598067f, 0.608767f, 0.609124f, 0.599179f, 0.579326f, 0.550670f, 0.515166f, 0.474707f, 0.430356f, 0.383305f, 0.336114f, 0.291535f, 0.250182f, 0.211022f, 0.174404f, 0.142783f, 0.117629f, 0.097265f, 0.079103f, 0.063058f, 0.051346f, 0.045393f, 0.044197f, 0.045733f, 0.048982f, 0.054235f, 0.062014f, - 0.072137f, 0.083617f, 0.095036f, 0.105002f, 0.112583f, 0.117569f, 0.120284f, 0.120922f, 0.118935f, 0.113194f, 0.102993f, 0.088978f, 0.072927f, 0.056475f, 0.040135f, 0.023595f, 0.006691f, -0.010161f, -0.026205f, -0.040628f, -0.052638f, -0.061602f, -0.067163f, -0.069194f, -0.067764f, -0.063204f, -0.056002f, -0.046549f, -0.035172f, -0.022453f, -0.009246f, 0.003678f, 0.015836f, 0.026957f, 0.036871f, 0.045370f, 0.052074f, 0.056677f, 0.059467f, 0.061374f, 0.063445f, 0.066522f, 0.071251f, 0.077736f, 0.085143f, 0.092280f, 0.098682f, 0.104606f, 0.110061f, 0.114592f, 0.117985f, 0.120397f, 0.121682f, 0.121377f, 0.119567f, 0.116933f, 0.113144f, 0.105492f, 0.090436f, 0.067892f, 0.043890f, 0.027049f, 0.020974f, 0.021165f}, - {0.119957f, 0.117962f, 0.069212f, -0.029675f, -0.108741f, -0.102118f, -0.023931f, 0.056050f, 0.088085f, 0.070763f, 0.023879f, -0.033299f, -0.074494f, -0.065471f, 0.002786f, 0.081205f, 0.092077f, 0.015549f, -0.067599f, -0.053344f, 0.064674f, 0.183481f, 0.206152f, 0.135803f, 0.042639f, -0.024752f, -0.066208f, -0.094901f, -0.114472f, -0.127164f, -0.137723f, -0.145267f, -0.144666f, -0.136342f, -0.126255f, -0.118741f, -0.116220f, -0.122116f, -0.137393f, -0.157052f, -0.174865f, -0.189037f, -0.200404f, -0.208724f, -0.213653f, -0.216386f, -0.217918f, -0.217629f, -0.214601f, -0.208243f, -0.197216f, -0.179855f, -0.155904f, -0.126242f, -0.091188f, -0.050638f, -0.005448f, 0.042864f, 0.093516f, 0.146388f, 0.200914f, 0.256043f, 0.311008f, 0.365277f, 0.417798f, 0.466855f, 0.510693f, 0.547948f, 0.577466f, 0.598067f, 0.608767f, 0.609124f, 0.599179f, 0.579326f, 0.550670f, 0.515166f, 0.474707f, 0.430356f, 0.383305f, 0.336114f, 0.291535f, 0.250182f, 0.211022f, 0.174404f, 0.142783f, 0.117629f, 0.097265f, 0.079103f, 0.063058f, 0.051346f, 0.045393f, 0.044197f, 0.045733f, 0.048982f, 0.054235f, 0.062014f, - 0.072137f, 0.083617f, 0.095036f, 0.105002f, 0.112583f, 0.117569f, 0.120284f, 0.120922f, 0.118935f, 0.113194f, 0.102993f, 0.088978f, 0.072927f, 0.056475f, 0.040135f, 0.023595f, 0.006691f, -0.010161f, -0.026205f, -0.040628f, -0.052638f, -0.061602f, -0.067163f, -0.069194f, -0.067764f, -0.063204f, -0.056002f, -0.046549f, -0.035172f, -0.022453f, -0.009246f, 0.003678f, 0.015836f, 0.026957f, 0.036871f, 0.045370f, 0.052074f, 0.056677f, 0.059467f, 0.061374f, 0.063445f, 0.066522f, 0.071251f, 0.077736f, 0.085143f, 0.092280f, 0.098682f, 0.104606f, 0.110061f, 0.114592f, 0.117985f, 0.120397f, 0.121682f, 0.121377f, 0.119567f, 0.116933f, 0.113144f, 0.105492f, 0.090436f, 0.067892f, 0.043890f, 0.027049f, 0.020974f, 0.021165f} - }, - { - {0.021954f, 0.048037f, 0.063092f, 0.031017f, -0.037723f, -0.084868f, -0.065201f, -0.005112f, 0.022895f, -0.015083f, -0.084921f, -0.142665f, -0.175582f, -0.165991f, -0.077530f, 0.064116f, 0.128907f, 0.015662f, -0.183455f, -0.248246f, -0.082450f, 0.177565f, 0.335035f, 0.337341f, 0.262762f, 0.175451f, 0.072571f, -0.054887f, -0.185560f, -0.298815f, -0.396893f, -0.485261f, -0.557320f, -0.605394f, -0.629649f, -0.632272f, -0.614250f, -0.579369f, -0.533822f, -0.482010f, -0.426968f, -0.372237f, -0.319708f, -0.268539f, -0.218575f, -0.171634f, -0.128178f, -0.086363f, -0.045502f, -0.007338f, 0.026484f, 0.055319f, 0.078139f, 0.094220f, 0.105266f, 0.114621f, 0.124529f, 0.135582f, 0.147984f, 0.161659f, 0.175672f, 0.188906f, 0.201046f, 0.212265f, 0.222531f, 0.231889f, 0.240937f, 0.250378f, 0.260180f, 0.269567f, 0.277872f, 0.285061f, 0.291048f, 0.294821f, 0.295039f, 0.291430f, 0.284567f, 0.274225f, 0.259431f, 0.240476f, 0.219205f, 0.196639f, 0.172071f, 0.145449f, 0.118875f, 0.094409f, 0.071829f, 0.049916f, 0.028662f, 0.008634f, -0.010832f, -0.031148f, -0.052563f, -0.074059f, -0.094995f, -0.115796f, - -0.136840f, -0.157354f, -0.175731f, -0.190760f, -0.202356f, -0.211001f, -0.216517f, -0.217735f, -0.213675f, -0.204779f, -0.192568f, -0.178136f, -0.161391f, -0.141749f, -0.119310f, -0.095356f, -0.071835f, -0.050142f, -0.030092f, -0.010201f, 0.010750f, 0.032456f, 0.053367f, 0.071957f, 0.087636f, 0.100966f, 0.113346f, 0.126179f, 0.139929f, 0.154026f, 0.167726f, 0.180816f, 0.193572f, 0.206537f, 0.220447f, 0.235905f, 0.252915f, 0.270947f, 0.289388f, 0.307739f, 0.325599f, 0.342846f, 0.359653f, 0.376064f, 0.391737f, 0.406191f, 0.418988f, 0.429712f, 0.438219f, 0.444820f, 0.449911f, 0.453835f, 0.457284f, 0.461020f, 0.465212f, 0.470429f, 0.478257f, 0.486742f, 0.485064f, 0.459936f, 0.412181f, 0.361516f, 0.328482f, 0.316016f}, - {0.021954f, 0.048037f, 0.063092f, 0.031017f, -0.037723f, -0.084868f, -0.065201f, -0.005112f, 0.022895f, -0.015083f, -0.084921f, -0.142665f, -0.175582f, -0.165991f, -0.077530f, 0.064116f, 0.128907f, 0.015662f, -0.183455f, -0.248246f, -0.082450f, 0.177565f, 0.335035f, 0.337341f, 0.262762f, 0.175451f, 0.072571f, -0.054887f, -0.185560f, -0.298815f, -0.396893f, -0.485261f, -0.557320f, -0.605394f, -0.629649f, -0.632272f, -0.614250f, -0.579369f, -0.533822f, -0.482010f, -0.426968f, -0.372237f, -0.319708f, -0.268539f, -0.218575f, -0.171634f, -0.128178f, -0.086363f, -0.045502f, -0.007338f, 0.026484f, 0.055319f, 0.078139f, 0.094220f, 0.105266f, 0.114621f, 0.124529f, 0.135582f, 0.147984f, 0.161659f, 0.175672f, 0.188906f, 0.201046f, 0.212265f, 0.222531f, 0.231889f, 0.240937f, 0.250378f, 0.260180f, 0.269567f, 0.277872f, 0.285061f, 0.291048f, 0.294821f, 0.295039f, 0.291430f, 0.284567f, 0.274225f, 0.259431f, 0.240476f, 0.219205f, 0.196639f, 0.172071f, 0.145449f, 0.118875f, 0.094409f, 0.071829f, 0.049916f, 0.028662f, 0.008634f, -0.010832f, -0.031148f, -0.052563f, -0.074059f, -0.094995f, -0.115796f, - -0.136840f, -0.157354f, -0.175731f, -0.190760f, -0.202356f, -0.211001f, -0.216517f, -0.217735f, -0.213675f, -0.204779f, -0.192568f, -0.178136f, -0.161391f, -0.141749f, -0.119310f, -0.095356f, -0.071835f, -0.050142f, -0.030092f, -0.010201f, 0.010750f, 0.032456f, 0.053367f, 0.071957f, 0.087636f, 0.100966f, 0.113346f, 0.126179f, 0.139929f, 0.154026f, 0.167726f, 0.180816f, 0.193572f, 0.206537f, 0.220447f, 0.235905f, 0.252915f, 0.270947f, 0.289388f, 0.307739f, 0.325599f, 0.342846f, 0.359653f, 0.376064f, 0.391737f, 0.406191f, 0.418988f, 0.429712f, 0.438219f, 0.444820f, 0.449911f, 0.453835f, 0.457284f, 0.461020f, 0.465212f, 0.470429f, 0.478257f, 0.486742f, 0.485064f, 0.459936f, 0.412181f, 0.361516f, 0.328482f, 0.316016f} - }, - { - {-0.007503f, -0.018071f, -0.022034f, -0.007019f, 0.015663f, 0.024279f, 0.019856f, 0.028228f, 0.059265f, 0.080034f, 0.041688f, -0.071985f, -0.216288f, -0.290455f, -0.199084f, 0.033503f, 0.219776f, 0.164507f, -0.103621f, -0.326326f, -0.288993f, -0.041795f, 0.199504f, 0.304980f, 0.304814f, 0.264038f, 0.192066f, 0.083050f, -0.037289f, -0.139466f, -0.222831f, -0.297054f, -0.358635f, -0.401608f, -0.430419f, -0.449077f, -0.451590f, -0.432074f, -0.394694f, -0.348591f, -0.300496f, -0.254823f, -0.214532f, -0.179585f, -0.148147f, -0.119436f, -0.093021f, -0.067108f, -0.040394f, -0.014078f, 0.010038f, 0.031708f, 0.051075f, 0.067427f, 0.080619f, 0.092054f, 0.103201f, 0.114496f, 0.126191f, 0.138824f, 0.152470f, 0.166746f, 0.181664f, 0.197385f, 0.213306f, 0.228573f, 0.243329f, 0.258289f, 0.273266f, 0.287270f, 0.300006f, 0.312023f, 0.323208f, 0.332273f, 0.338187f, 0.341130f, 0.341345f, 0.337872f, 0.329576f, 0.317081f, 0.302379f, 0.286336f, 0.267902f, 0.246477f, 0.223744f, 0.201743f, 0.179892f, 0.155773f, 0.128766f, 0.101142f, 0.075145f, 0.050682f, 0.026716f, 0.003617f, -0.017003f, -0.034092f, - -0.047931f, -0.059456f, -0.069308f, -0.077317f, -0.082784f, -0.085477f, -0.086182f, -0.086000f, -0.085634f, -0.085723f, -0.087061f, -0.089692f, -0.092489f, -0.094395f, -0.095590f, -0.096974f, -0.099214f, -0.102553f, -0.106591f, -0.109940f, -0.111114f, -0.110117f, -0.108385f, -0.107202f, -0.106996f, -0.107734f, -0.108885f, -0.109325f, -0.108294f, -0.106062f, -0.102988f, -0.098685f, -0.092663f, -0.084794f, -0.074707f, -0.061933f, -0.047004f, -0.031245f, -0.015438f, 0.000083f, 0.014483f, 0.027034f, 0.038033f, 0.047706f, 0.055152f, 0.059661f, 0.061803f, 0.062109f, 0.060454f, 0.057667f, 0.055600f, 0.054965f, 0.055463f, 0.057980f, 0.063846f, 0.072975f, 0.086512f, 0.108858f, 0.140638f, 0.171127f, 0.185558f, 0.180720f, 0.167370f, 0.157904f}, - {0.007503f, 0.018071f, 0.022034f, 0.007019f, -0.015663f, -0.024279f, -0.019856f, -0.028228f, -0.059265f, -0.080034f, -0.041688f, 0.071985f, 0.216288f, 0.290455f, 0.199084f, -0.033503f, -0.219776f, -0.164507f, 0.103621f, 0.326326f, 0.288993f, 0.041795f, -0.199504f, -0.304980f, -0.304814f, -0.264038f, -0.192066f, -0.083050f, 0.037289f, 0.139466f, 0.222831f, 0.297054f, 0.358635f, 0.401608f, 0.430419f, 0.449077f, 0.451590f, 0.432074f, 0.394694f, 0.348591f, 0.300496f, 0.254823f, 0.214532f, 0.179585f, 0.148147f, 0.119436f, 0.093021f, 0.067108f, 0.040394f, 0.014078f, -0.010038f, -0.031708f, -0.051075f, -0.067427f, -0.080619f, -0.092054f, -0.103201f, -0.114496f, -0.126191f, -0.138824f, -0.152470f, -0.166746f, -0.181664f, -0.197385f, -0.213306f, -0.228573f, -0.243329f, -0.258289f, -0.273266f, -0.287270f, -0.300006f, -0.312023f, -0.323208f, -0.332273f, -0.338187f, -0.341130f, -0.341345f, -0.337872f, -0.329576f, -0.317081f, -0.302379f, -0.286336f, -0.267902f, -0.246477f, -0.223744f, -0.201743f, -0.179892f, -0.155773f, -0.128766f, -0.101142f, -0.075145f, -0.050682f, -0.026716f, -0.003617f, 0.017003f, 0.034092f, - 0.047931f, 0.059456f, 0.069308f, 0.077317f, 0.082784f, 0.085477f, 0.086182f, 0.086000f, 0.085634f, 0.085723f, 0.087061f, 0.089692f, 0.092489f, 0.094395f, 0.095590f, 0.096974f, 0.099214f, 0.102553f, 0.106591f, 0.109940f, 0.111114f, 0.110117f, 0.108385f, 0.107202f, 0.106996f, 0.107734f, 0.108885f, 0.109325f, 0.108294f, 0.106062f, 0.102988f, 0.098685f, 0.092663f, 0.084794f, 0.074707f, 0.061933f, 0.047004f, 0.031245f, 0.015438f, -0.000083f, -0.014483f, -0.027034f, -0.038033f, -0.047706f, -0.055152f, -0.059661f, -0.061803f, -0.062109f, -0.060454f, -0.057667f, -0.055600f, -0.054965f, -0.055463f, -0.057980f, -0.063846f, -0.072975f, -0.086512f, -0.108858f, -0.140638f, -0.171127f, -0.185558f, -0.180720f, -0.167370f, -0.157904f} - }, - { - {0.033462f, -0.011452f, -0.017620f, 0.032435f, 0.045854f, -0.028637f, -0.090702f, -0.014859f, 0.157822f, 0.248642f, 0.155687f, -0.038140f, -0.175256f, -0.171621f, -0.049992f, 0.096608f, 0.151735f, 0.059734f, -0.096679f, -0.157632f, -0.062095f, 0.083857f, 0.144231f, 0.103916f, 0.042535f, 0.012755f, 0.005878f, 0.008085f, 0.027262f, 0.065497f, 0.106896f, 0.138036f, 0.157486f, 0.165566f, 0.161837f, 0.150604f, 0.136230f, 0.115874f, 0.085377f, 0.047978f, 0.010903f, -0.021750f, -0.048159f, -0.066253f, -0.076374f, -0.082524f, -0.088309f, -0.094475f, -0.100881f, -0.107392f, -0.112694f, -0.115260f, -0.115292f, -0.113369f, -0.108048f, -0.096922f, -0.079156f, -0.055336f, -0.025908f, 0.008746f, 0.047468f, 0.088692f, 0.131249f, 0.174377f, 0.217290f, 0.258854f, 0.297502f, 0.331588f, 0.359765f, 0.380676f, 0.392592f, 0.393999f, 0.384351f, 0.363891f, 0.333348f, 0.294223f, 0.248522f, 0.197787f, 0.143366f, 0.087648f, 0.033362f, -0.018763f, -0.069801f, -0.119555f, -0.165608f, -0.206270f, -0.242567f, -0.276200f, -0.307129f, -0.334420f, -0.358104f, -0.378747f, -0.395911f, -0.408313f, -0.415200f, -0.416578f, - -0.412241f, -0.401426f, -0.383736f, -0.359890f, -0.331149f, -0.298118f, -0.260569f, -0.218772f, -0.174893f, -0.132630f, -0.094946f, -0.062032f, -0.031764f, -0.002387f, 0.025391f, 0.049012f, 0.066448f, 0.077765f, 0.084806f, 0.089808f, 0.094109f, 0.097653f, 0.099678f, 0.099974f, 0.099364f, 0.099047f, 0.099882f, 0.102244f, 0.105972f, 0.110354f, 0.114607f, 0.118404f, 0.121573f, 0.123531f, 0.123564f, 0.121439f, 0.117280f, 0.111181f, 0.103433f, 0.094690f, 0.085509f, 0.076144f, 0.066975f, 0.058481f, 0.050601f, 0.042886f, 0.035360f, 0.028387f, 0.021756f, 0.014870f, 0.007725f, 0.000696f, -0.006360f, -0.013704f, -0.020901f, -0.027694f, -0.035063f, -0.043655f, -0.051368f, -0.054456f, -0.051542f, -0.045299f, -0.039709f, -0.036841f}, - {-0.033462f, 0.011452f, 0.017620f, -0.032435f, -0.045854f, 0.028637f, 0.090702f, 0.014859f, -0.157822f, -0.248642f, -0.155687f, 0.038140f, 0.175256f, 0.171621f, 0.049992f, -0.096608f, -0.151735f, -0.059734f, 0.096679f, 0.157632f, 0.062095f, -0.083857f, -0.144231f, -0.103916f, -0.042535f, -0.012755f, -0.005878f, -0.008085f, -0.027262f, -0.065497f, -0.106896f, -0.138036f, -0.157486f, -0.165566f, -0.161837f, -0.150604f, -0.136230f, -0.115874f, -0.085377f, -0.047978f, -0.010903f, 0.021750f, 0.048159f, 0.066253f, 0.076374f, 0.082524f, 0.088309f, 0.094475f, 0.100881f, 0.107392f, 0.112694f, 0.115260f, 0.115292f, 0.113369f, 0.108048f, 0.096922f, 0.079156f, 0.055336f, 0.025908f, -0.008746f, -0.047468f, -0.088692f, -0.131249f, -0.174377f, -0.217290f, -0.258854f, -0.297502f, -0.331588f, -0.359765f, -0.380676f, -0.392592f, -0.393999f, -0.384351f, -0.363891f, -0.333348f, -0.294223f, -0.248522f, -0.197787f, -0.143366f, -0.087648f, -0.033362f, 0.018763f, 0.069801f, 0.119555f, 0.165608f, 0.206270f, 0.242567f, 0.276200f, 0.307129f, 0.334420f, 0.358104f, 0.378747f, 0.395911f, 0.408313f, 0.415200f, 0.416578f, - 0.412241f, 0.401426f, 0.383736f, 0.359890f, 0.331149f, 0.298118f, 0.260569f, 0.218772f, 0.174893f, 0.132630f, 0.094946f, 0.062032f, 0.031764f, 0.002387f, -0.025391f, -0.049012f, -0.066448f, -0.077765f, -0.084806f, -0.089808f, -0.094109f, -0.097653f, -0.099678f, -0.099974f, -0.099364f, -0.099047f, -0.099882f, -0.102244f, -0.105972f, -0.110354f, -0.114607f, -0.118404f, -0.121573f, -0.123531f, -0.123564f, -0.121439f, -0.117280f, -0.111181f, -0.103433f, -0.094690f, -0.085509f, -0.076144f, -0.066975f, -0.058481f, -0.050601f, -0.042886f, -0.035360f, -0.028387f, -0.021756f, -0.014870f, -0.007725f, -0.000696f, 0.006360f, 0.013704f, 0.020901f, 0.027694f, 0.035063f, 0.043655f, 0.051368f, 0.054456f, 0.051542f, 0.045299f, 0.039709f, 0.036841f} - }, - { - {0.007632f, 0.022548f, 0.018442f, -0.012511f, -0.038820f, -0.048924f, -0.077495f, -0.144911f, -0.206158f, -0.190155f, -0.062376f, 0.162240f, 0.406347f, 0.505256f, 0.303545f, -0.122289f, -0.422346f, -0.308428f, 0.092789f, 0.368487f, 0.299142f, 0.056978f, -0.090390f, -0.095371f, -0.067860f, -0.051927f, -0.006294f, 0.067628f, 0.110810f, 0.102017f, 0.079345f, 0.072300f, 0.074025f, 0.076311f, 0.084642f, 0.098477f, 0.108362f, 0.112197f, 0.115201f, 0.118268f, 0.119098f, 0.118162f, 0.115112f, 0.106864f, 0.094193f, 0.082239f, 0.072210f, 0.060549f, 0.046565f, 0.032938f, 0.019433f, 0.003358f, -0.015133f, -0.034053f, -0.053613f, -0.074508f, -0.094983f, -0.113236f, -0.129739f, -0.144761f, -0.156877f, -0.165350f, -0.170649f, -0.172003f, -0.167632f, -0.157270f, -0.141575f, -0.119930f, -0.091592f, -0.057772f, -0.020186f, 0.020979f, 0.065725f, 0.112552f, 0.159607f, 0.205951f, 0.250757f, 0.292733f, 0.330757f, 0.363863f, 0.390939f, 0.411566f, 0.426332f, 0.435310f, 0.437507f, 0.432635f, 0.421800f, 0.405738f, 0.384132f, 0.357002f, 0.324746f, 0.286692f, 0.241881f, 0.191549f, 0.138830f, 0.085942f, - 0.033379f, -0.018269f, -0.067107f, -0.110190f, -0.144170f, -0.166746f, -0.178462f, -0.182052f, -0.179351f, -0.170023f, -0.153643f, -0.131509f, -0.106065f, -0.079941f, -0.055749f, -0.035417f, -0.019431f, -0.007467f, 0.000527f, 0.004427f, 0.004267f, -0.000272f, -0.009744f, -0.023644f, -0.040120f, -0.057414f, -0.074708f, -0.091572f, -0.107804f, -0.123837f, -0.140150f, -0.156409f, -0.172204f, -0.188141f, -0.205108f, -0.223061f, -0.241479f, -0.260269f, -0.279397f, -0.298518f, -0.317733f, -0.337794f, -0.359009f, -0.380830f, -0.402589f, -0.423591f, -0.442671f, -0.458932f, -0.472565f, -0.483822f, -0.492080f, -0.497195f, -0.500388f, -0.502373f, -0.502625f, -0.501972f, -0.501991f, -0.497827f, -0.475773f, -0.426176f, -0.359349f, -0.301285f, -0.269949f, -0.260941f}, - {0.007632f, 0.022548f, 0.018442f, -0.012511f, -0.038820f, -0.048924f, -0.077495f, -0.144911f, -0.206158f, -0.190155f, -0.062376f, 0.162240f, 0.406347f, 0.505256f, 0.303545f, -0.122289f, -0.422346f, -0.308428f, 0.092789f, 0.368487f, 0.299142f, 0.056978f, -0.090390f, -0.095371f, -0.067860f, -0.051927f, -0.006294f, 0.067628f, 0.110810f, 0.102017f, 0.079345f, 0.072300f, 0.074025f, 0.076311f, 0.084642f, 0.098477f, 0.108362f, 0.112197f, 0.115201f, 0.118268f, 0.119098f, 0.118162f, 0.115112f, 0.106864f, 0.094193f, 0.082239f, 0.072210f, 0.060549f, 0.046565f, 0.032938f, 0.019433f, 0.003358f, -0.015133f, -0.034053f, -0.053613f, -0.074508f, -0.094983f, -0.113236f, -0.129739f, -0.144761f, -0.156877f, -0.165350f, -0.170649f, -0.172003f, -0.167632f, -0.157270f, -0.141575f, -0.119930f, -0.091592f, -0.057772f, -0.020186f, 0.020979f, 0.065725f, 0.112552f, 0.159607f, 0.205951f, 0.250757f, 0.292733f, 0.330757f, 0.363863f, 0.390939f, 0.411566f, 0.426332f, 0.435310f, 0.437507f, 0.432635f, 0.421800f, 0.405738f, 0.384132f, 0.357002f, 0.324746f, 0.286692f, 0.241881f, 0.191549f, 0.138830f, 0.085942f, - 0.033379f, -0.018269f, -0.067107f, -0.110190f, -0.144170f, -0.166746f, -0.178462f, -0.182052f, -0.179351f, -0.170023f, -0.153643f, -0.131509f, -0.106065f, -0.079941f, -0.055749f, -0.035417f, -0.019431f, -0.007467f, 0.000527f, 0.004427f, 0.004267f, -0.000272f, -0.009744f, -0.023644f, -0.040120f, -0.057414f, -0.074708f, -0.091572f, -0.107804f, -0.123837f, -0.140150f, -0.156409f, -0.172204f, -0.188141f, -0.205108f, -0.223061f, -0.241479f, -0.260269f, -0.279397f, -0.298518f, -0.317733f, -0.337794f, -0.359009f, -0.380830f, -0.402589f, -0.423591f, -0.442671f, -0.458932f, -0.472565f, -0.483822f, -0.492080f, -0.497195f, -0.500388f, -0.502373f, -0.502625f, -0.501972f, -0.501991f, -0.497827f, -0.475773f, -0.426176f, -0.359349f, -0.301285f, -0.269949f, -0.260941f} - }, - { - {0.034883f, -0.021304f, -0.099217f, -0.155447f, -0.151489f, -0.063105f, 0.084405f, 0.197852f, 0.184427f, 0.054626f, -0.080140f, -0.128439f, -0.101272f, -0.058942f, -0.024576f, 0.010034f, 0.029966f, 0.006574f, -0.046713f, -0.077438f, -0.060336f, -0.024821f, -0.006710f, -0.003011f, 0.010365f, 0.039520f, 0.070428f, 0.091979f, 0.102773f, 0.100912f, 0.082516f, 0.050679f, 0.016240f, -0.012503f, -0.036094f, -0.059657f, -0.086598f, -0.117101f, -0.148959f, -0.177814f, -0.198595f, -0.208869f, -0.210421f, -0.206878f, -0.200675f, -0.192862f, -0.184372f, -0.175896f, -0.167141f, -0.157485f, -0.147021f, -0.136095f, -0.124463f, -0.111814f, -0.098518f, -0.085003f, -0.070987f, -0.056168f, -0.041216f, -0.027385f, -0.015470f, -0.005652f, 0.001916f, 0.006935f, 0.009478f, 0.010521f, 0.011559f, 0.013411f, 0.015772f, 0.018478f, 0.022594f, 0.029321f, 0.038477f, 0.049356f, 0.062563f, 0.079569f, 0.100807f, 0.125523f, 0.153141f, 0.183523f, 0.216110f, 0.249764f, 0.283204f, 0.315238f, 0.345212f, 0.373228f, 0.398907f, 0.420315f, 0.435885f, 0.447075f, 0.456792f, 0.464976f, 0.467972f, 0.462757f, 0.449794f, 0.431130f, - 0.407351f, 0.377300f, 0.340016f, 0.296447f, 0.249195f, 0.200303f, 0.149534f, 0.095828f, 0.040211f, -0.014159f, -0.064951f, -0.112404f, -0.158156f, -0.203415f, -0.247903f, -0.289526f, -0.325496f, -0.354702f, -0.378437f, -0.398339f, -0.414695f, -0.427120f, -0.435547f, -0.440095f, -0.441262f, -0.440437f, -0.439004f, -0.437067f, -0.434155f, -0.430566f, -0.426801f, -0.422476f, -0.416824f, -0.409269f, -0.398920f, -0.385068f, -0.368719f, -0.351923f, -0.335312f, -0.317982f, -0.299378f, -0.279225f, -0.256508f, -0.230974f, -0.204681f, -0.179810f, -0.156306f, -0.133463f, -0.111629f, -0.090540f, -0.068716f, -0.046148f, -0.024726f, -0.005073f, 0.013889f, 0.032797f, 0.053548f, 0.080840f, 0.114841f, 0.143935f, 0.153768f, 0.143890f, 0.127871f, 0.117999f}, - {0.034883f, -0.021304f, -0.099217f, -0.155447f, -0.151489f, -0.063105f, 0.084405f, 0.197852f, 0.184427f, 0.054626f, -0.080140f, -0.128439f, -0.101272f, -0.058942f, -0.024576f, 0.010034f, 0.029966f, 0.006574f, -0.046713f, -0.077438f, -0.060336f, -0.024821f, -0.006710f, -0.003011f, 0.010365f, 0.039520f, 0.070428f, 0.091979f, 0.102773f, 0.100912f, 0.082516f, 0.050679f, 0.016240f, -0.012503f, -0.036094f, -0.059657f, -0.086598f, -0.117101f, -0.148959f, -0.177814f, -0.198595f, -0.208869f, -0.210421f, -0.206878f, -0.200675f, -0.192862f, -0.184372f, -0.175896f, -0.167141f, -0.157485f, -0.147021f, -0.136095f, -0.124463f, -0.111814f, -0.098518f, -0.085003f, -0.070987f, -0.056168f, -0.041216f, -0.027385f, -0.015470f, -0.005652f, 0.001916f, 0.006935f, 0.009478f, 0.010521f, 0.011559f, 0.013411f, 0.015772f, 0.018478f, 0.022594f, 0.029321f, 0.038477f, 0.049356f, 0.062563f, 0.079569f, 0.100807f, 0.125523f, 0.153141f, 0.183523f, 0.216110f, 0.249764f, 0.283204f, 0.315238f, 0.345212f, 0.373228f, 0.398907f, 0.420315f, 0.435885f, 0.447075f, 0.456792f, 0.464976f, 0.467972f, 0.462757f, 0.449794f, 0.431130f, - 0.407351f, 0.377300f, 0.340016f, 0.296447f, 0.249195f, 0.200303f, 0.149534f, 0.095828f, 0.040211f, -0.014159f, -0.064951f, -0.112404f, -0.158156f, -0.203415f, -0.247903f, -0.289526f, -0.325496f, -0.354702f, -0.378437f, -0.398339f, -0.414695f, -0.427120f, -0.435547f, -0.440095f, -0.441262f, -0.440437f, -0.439004f, -0.437067f, -0.434155f, -0.430566f, -0.426801f, -0.422476f, -0.416824f, -0.409269f, -0.398920f, -0.385068f, -0.368719f, -0.351923f, -0.335312f, -0.317982f, -0.299378f, -0.279225f, -0.256508f, -0.230974f, -0.204681f, -0.179810f, -0.156306f, -0.133463f, -0.111629f, -0.090540f, -0.068716f, -0.046148f, -0.024726f, -0.005073f, 0.013889f, 0.032797f, 0.053548f, 0.080840f, 0.114841f, 0.143935f, 0.153768f, 0.143890f, 0.127871f, 0.117999f} - }, - { - {-0.042332f, 0.052414f, 0.122641f, 0.100474f, 0.024695f, -0.082326f, -0.258062f, -0.473154f, -0.584763f, -0.487474f, -0.212666f, 0.165870f, 0.573082f, 0.800546f, 0.552655f, -0.151008f, -0.763503f, -0.701266f, -0.031392f, 0.589097f, 0.677353f, 0.375374f, 0.090848f, -0.027580f, -0.096120f, -0.190245f, -0.262825f, -0.288880f, -0.308636f, -0.336497f, -0.340771f, -0.310877f, -0.270106f, -0.228364f, -0.175587f, -0.113432f, -0.055244f, -0.004323f, 0.041799f, 0.077774f, 0.099516f, 0.113909f, 0.127241f, 0.136680f, 0.140063f, 0.140919f, 0.139881f, 0.133490f, 0.123199f, 0.114854f, 0.109677f, 0.104617f, 0.099122f, 0.094046f, 0.087514f, 0.077934f, 0.066999f, 0.055668f, 0.042091f, 0.026045f, 0.009978f, -0.005697f, -0.022928f, -0.041423f, -0.058984f, -0.075713f, -0.092979f, -0.109604f, -0.123430f, -0.134844f, -0.145145f, -0.153781f, -0.160146f, -0.165514f, -0.170954f, -0.175845f, -0.179731f, -0.183079f, -0.185777f, -0.187503f, -0.189345f, -0.192612f, -0.196803f, -0.200916f, -0.205347f, -0.210450f, -0.214889f, -0.217212f, -0.217402f, -0.215743f, -0.212081f, -0.206912f, -0.201289f, -0.195569f, -0.190303f, -0.187905f, - -0.191048f, -0.199781f, -0.212320f, -0.227968f, -0.247295f, -0.270114f, -0.294879f, -0.319422f, -0.341430f, -0.359264f, -0.372895f, -0.382982f, -0.388966f, -0.389475f, -0.384356f, -0.374855f, -0.362171f, -0.347161f, -0.330773f, -0.313405f, -0.294581f, -0.274385f, -0.254316f, -0.235851f, -0.219093f, -0.203275f, -0.187422f, -0.170370f, -0.151593f, -0.132216f, -0.113950f, -0.097152f, -0.081024f, -0.065106f, -0.049246f, -0.032888f, -0.015757f, 0.001405f, 0.017892f, 0.034016f, 0.050243f, 0.066435f, 0.082630f, 0.099397f, 0.116782f, 0.133961f, 0.150320f, 0.165818f, 0.180145f, 0.192646f, 0.203207f, 0.212303f, 0.220145f, 0.226503f, 0.231386f, 0.235453f, 0.239190f, 0.240731f, 0.234694f, 0.216060f, 0.187439f, 0.159993f, 0.143657f, 0.138274f}, - {-0.042332f, 0.052414f, 0.122641f, 0.100474f, 0.024695f, -0.082326f, -0.258062f, -0.473154f, -0.584763f, -0.487474f, -0.212666f, 0.165870f, 0.573082f, 0.800546f, 0.552655f, -0.151008f, -0.763503f, -0.701266f, -0.031392f, 0.589097f, 0.677353f, 0.375374f, 0.090848f, -0.027580f, -0.096120f, -0.190245f, -0.262825f, -0.288880f, -0.308636f, -0.336497f, -0.340771f, -0.310877f, -0.270106f, -0.228364f, -0.175587f, -0.113432f, -0.055244f, -0.004323f, 0.041799f, 0.077774f, 0.099516f, 0.113909f, 0.127241f, 0.136680f, 0.140063f, 0.140919f, 0.139881f, 0.133490f, 0.123199f, 0.114854f, 0.109677f, 0.104617f, 0.099122f, 0.094046f, 0.087514f, 0.077934f, 0.066999f, 0.055668f, 0.042091f, 0.026045f, 0.009978f, -0.005697f, -0.022928f, -0.041423f, -0.058984f, -0.075713f, -0.092979f, -0.109604f, -0.123430f, -0.134844f, -0.145145f, -0.153781f, -0.160146f, -0.165514f, -0.170954f, -0.175845f, -0.179731f, -0.183079f, -0.185777f, -0.187503f, -0.189345f, -0.192612f, -0.196803f, -0.200916f, -0.205347f, -0.210450f, -0.214889f, -0.217212f, -0.217402f, -0.215743f, -0.212081f, -0.206912f, -0.201289f, -0.195569f, -0.190303f, -0.187905f, - -0.191048f, -0.199781f, -0.212320f, -0.227968f, -0.247295f, -0.270114f, -0.294879f, -0.319422f, -0.341430f, -0.359264f, -0.372895f, -0.382982f, -0.388966f, -0.389475f, -0.384356f, -0.374855f, -0.362171f, -0.347161f, -0.330773f, -0.313405f, -0.294581f, -0.274385f, -0.254316f, -0.235851f, -0.219093f, -0.203275f, -0.187422f, -0.170370f, -0.151593f, -0.132216f, -0.113950f, -0.097152f, -0.081024f, -0.065106f, -0.049246f, -0.032888f, -0.015757f, 0.001405f, 0.017892f, 0.034016f, 0.050243f, 0.066435f, 0.082630f, 0.099397f, 0.116782f, 0.133961f, 0.150320f, 0.165818f, 0.180145f, 0.192646f, 0.203207f, 0.212303f, 0.220145f, 0.226503f, 0.231386f, 0.235453f, 0.239190f, 0.240731f, 0.234694f, 0.216060f, 0.187439f, 0.159993f, 0.143657f, 0.138274f} - }, - { - {-0.038707f, -0.040443f, -0.032425f, -0.008667f, 0.039610f, 0.121021f, 0.200841f, 0.209863f, 0.128343f, -0.011854f, -0.222956f, -0.509917f, -0.672944f, -0.397576f, 0.271260f, 0.753657f, 0.530475f, -0.183327f, -0.662957f, -0.535116f, -0.113682f, 0.135696f, 0.139296f, 0.101726f, 0.119927f, 0.126081f, 0.082228f, 0.034341f, 0.008539f, -0.018778f, -0.056453f, -0.082857f, -0.088546f, -0.085336f, -0.080321f, -0.072030f, -0.062931f, -0.055762f, -0.047257f, -0.036657f, -0.029416f, -0.026737f, -0.023178f, -0.017390f, -0.014005f, -0.014139f, -0.014094f, -0.012938f, -0.012763f, -0.012836f, -0.010434f, -0.005527f, 0.000352f, 0.007263f, 0.015320f, 0.022993f, 0.029308f, 0.034837f, 0.039468f, 0.042226f, 0.043473f, 0.044401f, 0.044758f, 0.043609f, 0.041320f, 0.038608f, 0.035016f, 0.030111f, 0.024605f, 0.019016f, 0.012867f, 0.005983f, -0.001177f, -0.008863f, -0.018026f, -0.028938f, -0.041213f, -0.054772f, -0.069509f, -0.084750f, -0.100179f, -0.116316f, -0.133109f, -0.149167f, -0.163209f, -0.175265f, -0.185829f, -0.194738f, -0.201250f, -0.204518f, -0.203992f, -0.199910f, -0.193205f, -0.184582f, -0.174292f, -0.163022f, - -0.152075f, -0.142325f, -0.133856f, -0.126875f, -0.122103f, -0.119943f, -0.119907f, -0.121022f, -0.122534f, -0.124394f, -0.127276f, -0.131743f, -0.137311f, -0.142802f, -0.147553f, -0.151741f, -0.155707f, -0.159595f, -0.163318f, -0.166341f, -0.167867f, -0.167752f, -0.166759f, -0.165644f, -0.164497f, -0.162993f, -0.160544f, -0.156329f, -0.149991f, -0.142138f, -0.133494f, -0.123973f, -0.113132f, -0.100831f, -0.086925f, -0.071241f, -0.054316f, -0.037204f, -0.020348f, -0.003592f, 0.012893f, 0.028859f, 0.044680f, 0.060561f, 0.075703f, 0.089381f, 0.101902f, 0.113636f, 0.124499f, 0.135054f, 0.146443f, 0.158891f, 0.172084f, 0.186647f, 0.203232f, 0.221745f, 0.243776f, 0.271628f, 0.299956f, 0.313432f, 0.301412f, 0.272461f, 0.246103f, 0.233169f}, - {0.038707f, 0.040443f, 0.032425f, 0.008667f, -0.039610f, -0.121021f, -0.200841f, -0.209863f, -0.128343f, 0.011854f, 0.222956f, 0.509917f, 0.672944f, 0.397576f, -0.271260f, -0.753657f, -0.530475f, 0.183327f, 0.662957f, 0.535116f, 0.113682f, -0.135696f, -0.139296f, -0.101726f, -0.119927f, -0.126081f, -0.082228f, -0.034341f, -0.008539f, 0.018778f, 0.056453f, 0.082857f, 0.088546f, 0.085336f, 0.080321f, 0.072030f, 0.062931f, 0.055762f, 0.047257f, 0.036657f, 0.029416f, 0.026737f, 0.023178f, 0.017390f, 0.014005f, 0.014139f, 0.014094f, 0.012938f, 0.012763f, 0.012836f, 0.010434f, 0.005527f, -0.000352f, -0.007263f, -0.015320f, -0.022993f, -0.029308f, -0.034837f, -0.039468f, -0.042226f, -0.043473f, -0.044401f, -0.044758f, -0.043609f, -0.041320f, -0.038608f, -0.035016f, -0.030111f, -0.024605f, -0.019016f, -0.012867f, -0.005983f, 0.001177f, 0.008863f, 0.018026f, 0.028938f, 0.041213f, 0.054772f, 0.069509f, 0.084750f, 0.100179f, 0.116316f, 0.133109f, 0.149167f, 0.163209f, 0.175265f, 0.185829f, 0.194738f, 0.201250f, 0.204518f, 0.203992f, 0.199910f, 0.193205f, 0.184582f, 0.174292f, 0.163022f, - 0.152075f, 0.142325f, 0.133856f, 0.126875f, 0.122103f, 0.119943f, 0.119907f, 0.121022f, 0.122534f, 0.124394f, 0.127276f, 0.131743f, 0.137311f, 0.142802f, 0.147553f, 0.151741f, 0.155707f, 0.159595f, 0.163318f, 0.166341f, 0.167867f, 0.167752f, 0.166759f, 0.165644f, 0.164497f, 0.162993f, 0.160544f, 0.156329f, 0.149991f, 0.142138f, 0.133494f, 0.123973f, 0.113132f, 0.100831f, 0.086925f, 0.071241f, 0.054316f, 0.037204f, 0.020348f, 0.003592f, -0.012893f, -0.028859f, -0.044680f, -0.060561f, -0.075703f, -0.089381f, -0.101902f, -0.113636f, -0.124499f, -0.135054f, -0.146443f, -0.158891f, -0.172084f, -0.186647f, -0.203232f, -0.221745f, -0.243776f, -0.271628f, -0.299956f, -0.313432f, -0.301412f, -0.272461f, -0.246103f, -0.233169f} - }, - { - {-0.011441f, -0.003265f, 0.004011f, -0.000472f, -0.027714f, -0.075629f, -0.102363f, -0.048427f, 0.075716f, 0.158973f, 0.107163f, -0.028068f, -0.105566f, -0.071921f, -0.008203f, 0.005703f, -0.009101f, 0.001108f, 0.026819f, 0.024213f, -0.004533f, -0.019483f, -0.010977f, -0.008220f, -0.025895f, -0.043275f, -0.039729f, -0.021081f, -0.003698f, 0.006641f, 0.011920f, 0.011671f, 0.003832f, -0.010526f, -0.027836f, -0.044363f, -0.057022f, -0.064947f, -0.070367f, -0.075558f, -0.079517f, -0.079629f, -0.075472f, -0.069036f, -0.062356f, -0.056849f, -0.053900f, -0.054130f, -0.056410f, -0.058748f, -0.059818f, -0.059044f, -0.056030f, -0.050751f, -0.043844f, -0.036068f, -0.027766f, -0.019090f, -0.010327f, -0.001711f, 0.006749f, 0.015049f, 0.022944f, 0.029990f, 0.035833f, 0.040478f, 0.044205f, 0.047143f, 0.049179f, 0.050500f, 0.051764f, 0.053342f, 0.054913f, 0.056356f, 0.058453f, 0.062098f, 0.067413f, 0.074374f, 0.083664f, 0.096097f, 0.111651f, 0.129744f, 0.150062f, 0.172637f, 0.197477f, 0.224325f, 0.252295f, 0.279828f, 0.305655f, 0.329617f, 0.351655f, 0.370228f, 0.382750f, 0.387511f, 0.384321f, 0.373523f, - 0.355270f, 0.329788f, 0.297855f, 0.261198f, 0.222427f, 0.183885f, 0.146353f, 0.109686f, 0.074803f, 0.043946f, 0.018611f, -0.002035f, -0.020413f, -0.038698f, -0.057436f, -0.075307f, -0.090415f, -0.102296f, -0.112325f, -0.122030f, -0.131716f, -0.140923f, -0.149260f, -0.156505f, -0.162826f, -0.169104f, -0.176221f, -0.184054f, -0.191847f, -0.199220f, -0.206057f, -0.212014f, -0.216913f, -0.221002f, -0.224224f, -0.226071f, -0.226577f, -0.226473f, -0.226101f, -0.225292f, -0.224225f, -0.223145f, -0.221549f, -0.219033f, -0.216406f, -0.214610f, -0.213404f, -0.212354f, -0.211792f, -0.211513f, -0.210235f, -0.207593f, -0.204699f, -0.201857f, -0.198207f, -0.193847f, -0.188118f, -0.174986f, -0.146065f, -0.102134f, -0.057750f, -0.029670f, -0.021689f, -0.023453f}, - {0.011441f, 0.003265f, -0.004011f, 0.000472f, 0.027714f, 0.075629f, 0.102363f, 0.048427f, -0.075716f, -0.158973f, -0.107163f, 0.028068f, 0.105566f, 0.071921f, 0.008203f, -0.005703f, 0.009101f, -0.001108f, -0.026819f, -0.024213f, 0.004533f, 0.019483f, 0.010977f, 0.008220f, 0.025895f, 0.043275f, 0.039729f, 0.021081f, 0.003698f, -0.006641f, -0.011920f, -0.011671f, -0.003832f, 0.010526f, 0.027836f, 0.044363f, 0.057022f, 0.064947f, 0.070367f, 0.075558f, 0.079517f, 0.079629f, 0.075472f, 0.069036f, 0.062356f, 0.056849f, 0.053900f, 0.054130f, 0.056410f, 0.058748f, 0.059818f, 0.059044f, 0.056030f, 0.050751f, 0.043844f, 0.036068f, 0.027766f, 0.019090f, 0.010327f, 0.001711f, -0.006749f, -0.015049f, -0.022944f, -0.029990f, -0.035833f, -0.040478f, -0.044205f, -0.047143f, -0.049179f, -0.050500f, -0.051764f, -0.053342f, -0.054913f, -0.056356f, -0.058453f, -0.062098f, -0.067413f, -0.074374f, -0.083664f, -0.096097f, -0.111651f, -0.129744f, -0.150062f, -0.172637f, -0.197477f, -0.224325f, -0.252295f, -0.279828f, -0.305655f, -0.329617f, -0.351655f, -0.370228f, -0.382750f, -0.387511f, -0.384321f, -0.373523f, - -0.355270f, -0.329788f, -0.297855f, -0.261198f, -0.222427f, -0.183885f, -0.146353f, -0.109686f, -0.074803f, -0.043946f, -0.018611f, 0.002035f, 0.020413f, 0.038698f, 0.057436f, 0.075307f, 0.090415f, 0.102296f, 0.112325f, 0.122030f, 0.131716f, 0.140923f, 0.149260f, 0.156505f, 0.162826f, 0.169104f, 0.176221f, 0.184054f, 0.191847f, 0.199220f, 0.206057f, 0.212014f, 0.216913f, 0.221002f, 0.224224f, 0.226071f, 0.226577f, 0.226473f, 0.226101f, 0.225292f, 0.224225f, 0.223145f, 0.221549f, 0.219033f, 0.216406f, 0.214610f, 0.213404f, 0.212354f, 0.211792f, 0.211513f, 0.210235f, 0.207593f, 0.204699f, 0.201857f, 0.198207f, 0.193847f, 0.188118f, 0.174986f, 0.146065f, 0.102134f, 0.057750f, 0.029670f, 0.021689f, 0.023453f} - }, - { - {-0.022899f, -0.009050f, 0.021042f, 0.035577f, 0.007193f, -0.010991f, 0.067505f, 0.216765f, 0.271970f, 0.095990f, -0.246846f, -0.502443f, -0.427170f, -0.025043f, 0.395378f, 0.472255f, 0.158557f, -0.215865f, -0.309289f, -0.125601f, 0.071920f, 0.117090f, 0.070896f, 0.036158f, 0.010191f, -0.040842f, -0.086996f, -0.084856f, -0.053104f, -0.038760f, -0.049026f, -0.058734f, -0.055081f, -0.041078f, -0.015513f, 0.023625f, 0.067409f, 0.104226f, 0.131662f, 0.152151f, 0.165968f, 0.173980f, 0.179366f, 0.183056f, 0.183232f, 0.180032f, 0.175450f, 0.169336f, 0.160257f, 0.148803f, 0.135933f, 0.119953f, 0.098677f, 0.072731f, 0.044254f, 0.014523f, -0.015264f, -0.043256f, -0.068768f, -0.092960f, -0.116651f, -0.139142f, -0.159634f, -0.177968f, -0.193495f, -0.204628f, -0.209832f, -0.208176f, -0.199162f, -0.182839f, -0.159769f, -0.130297f, -0.094474f, -0.053153f, -0.008358f, 0.038048f, 0.085319f, 0.132878f, 0.179125f, 0.221960f, 0.260199f, 0.293872f, 0.323183f, 0.347625f, 0.366329f, 0.379015f, 0.386161f, 0.388145f, 0.384647f, 0.375101f, 0.359186f, 0.336465f, 0.306144f, 0.267908f, 0.222716f, 0.172166f, - 0.117452f, 0.059721f, 0.001259f, -0.054522f, -0.104542f, -0.147316f, -0.182857f, -0.211501f, -0.232650f, -0.244662f, -0.246382f, -0.238892f, -0.225272f, -0.208463f, -0.189745f, -0.169228f, -0.147036f, -0.123663f, -0.099806f, -0.076368f, -0.054370f, -0.034613f, -0.017496f, -0.003066f, 0.009127f, 0.020090f, 0.030773f, 0.041240f, 0.050609f, 0.057724f, 0.061768f, 0.062553f, 0.060572f, 0.056607f, 0.051053f, 0.043676f, 0.034051f, 0.022022f, 0.007797f, -0.008087f, -0.024935f, -0.042312f, -0.060172f, -0.078368f, -0.096310f, -0.113326f, -0.129046f, -0.143214f, -0.155555f, -0.166012f, -0.174718f, -0.181676f, -0.186839f, -0.190425f, -0.192896f, -0.195026f, -0.197709f, -0.199950f, -0.196779f, -0.182409f, -0.157947f, -0.133337f, -0.118252f, -0.113142f}, - {0.022899f, 0.009050f, -0.021042f, -0.035577f, -0.007193f, 0.010991f, -0.067505f, -0.216765f, -0.271970f, -0.095990f, 0.246846f, 0.502443f, 0.427170f, 0.025043f, -0.395378f, -0.472255f, -0.158557f, 0.215865f, 0.309289f, 0.125601f, -0.071920f, -0.117090f, -0.070896f, -0.036158f, -0.010191f, 0.040842f, 0.086996f, 0.084856f, 0.053104f, 0.038760f, 0.049026f, 0.058734f, 0.055081f, 0.041078f, 0.015513f, -0.023625f, -0.067409f, -0.104226f, -0.131662f, -0.152151f, -0.165968f, -0.173980f, -0.179366f, -0.183056f, -0.183232f, -0.180032f, -0.175450f, -0.169336f, -0.160257f, -0.148803f, -0.135933f, -0.119953f, -0.098677f, -0.072731f, -0.044254f, -0.014523f, 0.015264f, 0.043256f, 0.068768f, 0.092960f, 0.116651f, 0.139142f, 0.159634f, 0.177968f, 0.193495f, 0.204628f, 0.209832f, 0.208176f, 0.199162f, 0.182839f, 0.159769f, 0.130297f, 0.094474f, 0.053153f, 0.008358f, -0.038048f, -0.085319f, -0.132878f, -0.179125f, -0.221960f, -0.260199f, -0.293872f, -0.323183f, -0.347625f, -0.366329f, -0.379015f, -0.386161f, -0.388145f, -0.384647f, -0.375101f, -0.359186f, -0.336465f, -0.306144f, -0.267908f, -0.222716f, -0.172166f, - -0.117452f, -0.059721f, -0.001259f, 0.054522f, 0.104542f, 0.147316f, 0.182857f, 0.211501f, 0.232650f, 0.244662f, 0.246382f, 0.238892f, 0.225272f, 0.208463f, 0.189745f, 0.169228f, 0.147036f, 0.123663f, 0.099806f, 0.076368f, 0.054370f, 0.034613f, 0.017496f, 0.003066f, -0.009127f, -0.020090f, -0.030773f, -0.041240f, -0.050609f, -0.057724f, -0.061768f, -0.062553f, -0.060572f, -0.056607f, -0.051053f, -0.043676f, -0.034051f, -0.022022f, -0.007797f, 0.008087f, 0.024935f, 0.042312f, 0.060172f, 0.078368f, 0.096310f, 0.113326f, 0.129046f, 0.143214f, 0.155555f, 0.166012f, 0.174718f, 0.181676f, 0.186839f, 0.190425f, 0.192896f, 0.195026f, 0.197709f, 0.199950f, 0.196779f, 0.182409f, 0.157947f, 0.133337f, 0.118252f, 0.113142f} - }, - { - {0.003690f, -0.000917f, -0.000552f, 0.013387f, 0.038725f, 0.063371f, 0.072581f, 0.053190f, 0.000206f, -0.066676f, -0.099074f, -0.058384f, 0.032276f, 0.096933f, 0.084562f, 0.021700f, -0.028770f, -0.041099f, -0.033861f, -0.021573f, 0.003202f, 0.040516f, 0.070416f, 0.080729f, 0.083957f, 0.093969f, 0.102499f, 0.091181f, 0.056136f, 0.010704f, -0.028621f, -0.051424f, -0.055151f, -0.045654f, -0.033912f, -0.027688f, -0.026567f, -0.025373f, -0.020147f, -0.010619f, 0.000563f, 0.010165f, 0.017004f, 0.022350f, 0.027713f, 0.033503f, 0.039956f, 0.047461f, 0.055453f, 0.062514f, 0.067893f, 0.071692f, 0.073779f, 0.073710f, 0.071278f, 0.066153f, 0.057699f, 0.045923f, 0.031751f, 0.015946f, -0.001187f, -0.018979f, -0.036673f, -0.054412f, -0.072597f, -0.090693f, -0.108050f, -0.125117f, -0.142249f, -0.158172f, -0.171068f, -0.180164f, -0.184957f, -0.184167f, -0.176848f, -0.163444f, -0.144732f, -0.120910f, -0.092493f, -0.060834f, -0.026998f, 0.008883f, 0.046658f, 0.085319f, 0.123386f, 0.159725f, 0.194080f, 0.226805f, 0.257478f, 0.283950f, 0.303794f, 0.316528f, 0.323183f, 0.324000f, 0.317919f, 0.304128f, - 0.282929f, 0.255584f, 0.224397f, 0.192192f, 0.160506f, 0.128826f, 0.096337f, 0.063750f, 0.033188f, 0.007192f, -0.012327f, -0.025520f, -0.034813f, -0.042423f, -0.047979f, -0.049630f, -0.046581f, -0.039422f, -0.029192f, -0.017343f, -0.005387f, 0.006553f, 0.019724f, 0.034769f, 0.051053f, 0.067938f, 0.085001f, 0.101175f, 0.115466f, 0.128221f, 0.140146f, 0.150803f, 0.159486f, 0.166332f, 0.171227f, 0.173096f, 0.171443f, 0.166998f, 0.160073f, 0.150144f, 0.137357f, 0.122400f, 0.104972f, 0.084444f, 0.061488f, 0.037087f, 0.011069f, -0.016587f, -0.044718f, -0.072768f, -0.101412f, -0.130304f, -0.157895f, -0.183977f, -0.209630f, -0.235539f, -0.263242f, -0.293940f, -0.320304f, -0.325486f, -0.300786f, -0.260681f, -0.229360f, -0.216143f}, - {0.003690f, -0.000917f, -0.000552f, 0.013387f, 0.038725f, 0.063371f, 0.072581f, 0.053190f, 0.000206f, -0.066676f, -0.099074f, -0.058384f, 0.032276f, 0.096933f, 0.084562f, 0.021700f, -0.028770f, -0.041099f, -0.033861f, -0.021573f, 0.003202f, 0.040516f, 0.070416f, 0.080729f, 0.083957f, 0.093969f, 0.102499f, 0.091181f, 0.056136f, 0.010704f, -0.028621f, -0.051424f, -0.055151f, -0.045654f, -0.033912f, -0.027688f, -0.026567f, -0.025373f, -0.020147f, -0.010619f, 0.000563f, 0.010165f, 0.017004f, 0.022350f, 0.027713f, 0.033503f, 0.039956f, 0.047461f, 0.055453f, 0.062514f, 0.067893f, 0.071692f, 0.073779f, 0.073710f, 0.071278f, 0.066153f, 0.057699f, 0.045923f, 0.031751f, 0.015946f, -0.001187f, -0.018979f, -0.036673f, -0.054412f, -0.072597f, -0.090693f, -0.108050f, -0.125117f, -0.142249f, -0.158172f, -0.171068f, -0.180164f, -0.184957f, -0.184167f, -0.176848f, -0.163444f, -0.144732f, -0.120910f, -0.092493f, -0.060834f, -0.026998f, 0.008883f, 0.046658f, 0.085319f, 0.123386f, 0.159725f, 0.194080f, 0.226805f, 0.257478f, 0.283950f, 0.303794f, 0.316528f, 0.323183f, 0.324000f, 0.317919f, 0.304128f, - 0.282929f, 0.255584f, 0.224397f, 0.192192f, 0.160506f, 0.128826f, 0.096337f, 0.063750f, 0.033188f, 0.007192f, -0.012327f, -0.025520f, -0.034813f, -0.042423f, -0.047979f, -0.049630f, -0.046581f, -0.039422f, -0.029192f, -0.017343f, -0.005387f, 0.006553f, 0.019724f, 0.034769f, 0.051053f, 0.067938f, 0.085001f, 0.101175f, 0.115466f, 0.128221f, 0.140146f, 0.150803f, 0.159486f, 0.166332f, 0.171227f, 0.173096f, 0.171443f, 0.166998f, 0.160073f, 0.150144f, 0.137357f, 0.122400f, 0.104972f, 0.084444f, 0.061488f, 0.037087f, 0.011069f, -0.016587f, -0.044718f, -0.072768f, -0.101412f, -0.130304f, -0.157895f, -0.183977f, -0.209630f, -0.235539f, -0.263242f, -0.293940f, -0.320304f, -0.325486f, -0.300786f, -0.260681f, -0.229360f, -0.216143f} - }, - { - {-0.023394f, -0.027147f, -0.010242f, 0.029995f, 0.067330f, 0.083589f, 0.072936f, 0.017445f, -0.087218f, -0.178937f, -0.163916f, -0.030708f, 0.114394f, 0.155385f, 0.081810f, -0.022358f, -0.073288f, -0.048744f, 0.015279f, 0.058591f, 0.040948f, -0.023886f, -0.081166f, -0.090364f, -0.058651f, -0.017390f, 0.015585f, 0.040163f, 0.058174f, 0.070098f, 0.079819f, 0.090006f, 0.096263f, 0.093268f, 0.082877f, 0.070565f, 0.057790f, 0.042958f, 0.026941f, 0.013256f, 0.004160f, -0.000764f, -0.003251f, -0.005255f, -0.008455f, -0.013944f, -0.022509f, -0.034733f, -0.050017f, -0.066095f, -0.080399f, -0.091534f, -0.099083f, -0.103038f, -0.104204f, -0.104337f, -0.105038f, -0.106888f, -0.109935f, -0.114401f, -0.120510f, -0.128064f, -0.136416f, -0.144519f, -0.150965f, -0.154404f, -0.154060f, -0.149652f, -0.141043f, -0.128490f, -0.113124f, -0.096475f, -0.079332f, -0.061637f, -0.043769f, -0.027117f, -0.012702f, 0.000084f, 0.012241f, 0.023050f, 0.030612f, 0.034541f, 0.036620f, 0.038340f, 0.039247f, 0.038732f, 0.038347f, 0.040934f, 0.047732f, 0.057272f, 0.067154f, 0.076305f, 0.085395f, 0.095550f, 0.107026f, 0.119165f, - 0.131180f, 0.142546f, 0.152838f, 0.162016f, 0.171094f, 0.181783f, 0.194944f, 0.209687f, 0.224276f, 0.237616f, 0.249622f, 0.260452f, 0.269684f, 0.276238f, 0.279096f, 0.278096f, 0.273844f, 0.266767f, 0.256520f, 0.242394f, 0.224039f, 0.201801f, 0.176733f, 0.150267f, 0.123426f, 0.096270f, 0.068346f, 0.039626f, 0.010838f, -0.016846f, -0.042211f, -0.064572f, -0.084386f, -0.102969f, -0.121208f, -0.138666f, -0.153987f, -0.165894f, -0.173880f, -0.178463f, -0.180864f, -0.182167f, -0.182758f, -0.182496f, -0.180928f, -0.177304f, -0.171116f, -0.162770f, -0.153009f, -0.141866f, -0.129175f, -0.115724f, -0.102570f, -0.089658f, -0.076512f, -0.063365f, -0.049691f, -0.033149f, -0.013162f, 0.005394f, 0.015746f, 0.016554f, 0.012768f, 0.009775f}, - {-0.023394f, -0.027147f, -0.010242f, 0.029995f, 0.067330f, 0.083589f, 0.072936f, 0.017445f, -0.087218f, -0.178937f, -0.163916f, -0.030708f, 0.114394f, 0.155385f, 0.081810f, -0.022358f, -0.073288f, -0.048744f, 0.015279f, 0.058591f, 0.040948f, -0.023886f, -0.081166f, -0.090364f, -0.058651f, -0.017390f, 0.015585f, 0.040163f, 0.058174f, 0.070098f, 0.079819f, 0.090006f, 0.096263f, 0.093268f, 0.082877f, 0.070565f, 0.057790f, 0.042958f, 0.026941f, 0.013256f, 0.004160f, -0.000764f, -0.003251f, -0.005255f, -0.008455f, -0.013944f, -0.022509f, -0.034733f, -0.050017f, -0.066095f, -0.080399f, -0.091534f, -0.099083f, -0.103038f, -0.104204f, -0.104337f, -0.105038f, -0.106888f, -0.109935f, -0.114401f, -0.120510f, -0.128064f, -0.136416f, -0.144519f, -0.150965f, -0.154404f, -0.154060f, -0.149652f, -0.141043f, -0.128490f, -0.113124f, -0.096475f, -0.079332f, -0.061637f, -0.043769f, -0.027117f, -0.012702f, 0.000084f, 0.012241f, 0.023050f, 0.030612f, 0.034541f, 0.036620f, 0.038340f, 0.039247f, 0.038732f, 0.038347f, 0.040934f, 0.047732f, 0.057272f, 0.067154f, 0.076305f, 0.085395f, 0.095550f, 0.107026f, 0.119165f, - 0.131180f, 0.142546f, 0.152838f, 0.162016f, 0.171094f, 0.181783f, 0.194944f, 0.209687f, 0.224276f, 0.237616f, 0.249622f, 0.260452f, 0.269684f, 0.276238f, 0.279096f, 0.278096f, 0.273844f, 0.266767f, 0.256520f, 0.242394f, 0.224039f, 0.201801f, 0.176733f, 0.150267f, 0.123426f, 0.096270f, 0.068346f, 0.039626f, 0.010838f, -0.016846f, -0.042211f, -0.064572f, -0.084386f, -0.102969f, -0.121208f, -0.138666f, -0.153987f, -0.165894f, -0.173880f, -0.178463f, -0.180864f, -0.182167f, -0.182758f, -0.182496f, -0.180928f, -0.177304f, -0.171116f, -0.162770f, -0.153009f, -0.141866f, -0.129175f, -0.115724f, -0.102570f, -0.089658f, -0.076512f, -0.063365f, -0.049691f, -0.033149f, -0.013162f, 0.005394f, 0.015746f, 0.016554f, 0.012768f, 0.009775f} - }, - { - {0.002536f, -0.011235f, -0.018343f, -0.017987f, -0.027166f, -0.031117f, 0.014002f, 0.096526f, 0.113126f, -0.016617f, -0.209563f, -0.268875f, -0.109214f, 0.120357f, 0.194165f, 0.064228f, -0.105548f, -0.151938f, -0.085143f, -0.021811f, -0.013168f, -0.007575f, 0.042273f, 0.109306f, 0.142985f, 0.138265f, 0.124567f, 0.114998f, 0.096455f, 0.057758f, 0.004146f, -0.052677f, -0.103477f, -0.141457f, -0.163639f, -0.173107f, -0.175086f, -0.171796f, -0.163515f, -0.151686f, -0.138206f, -0.124227f, -0.111720f, -0.103751f, -0.101586f, -0.103453f, -0.106877f, -0.110322f, -0.112385f, -0.111649f, -0.107834f, -0.101601f, -0.093248f, -0.082860f, -0.071411f, -0.060549f, -0.051523f, -0.045052f, -0.041731f, -0.041860f, -0.045219f, -0.051310f, -0.059514f, -0.069016f, -0.079031f, -0.088966f, -0.098149f, -0.105768f, -0.111299f, -0.114442f, -0.114537f, -0.110675f, -0.102450f, -0.090007f, -0.073514f, -0.053290f, -0.030165f, -0.005135f, 0.020901f, 0.046733f, 0.071073f, 0.093736f, 0.115568f, 0.136842f, 0.156886f, 0.175538f, 0.193455f, 0.210815f, 0.227567f, 0.245363f, 0.267074f, 0.293421f, 0.321639f, 0.348399f, 0.372776f, 0.395534f, - 0.416417f, 0.432977f, 0.441812f, 0.440703f, 0.429686f, 0.410030f, 0.382492f, 0.347214f, 0.305126f, 0.258387f, 0.209075f, 0.158069f, 0.105330f, 0.050877f, -0.004290f, -0.057880f, -0.107405f, -0.152051f, -0.192952f, -0.231334f, -0.267030f, -0.298914f, -0.325959f, -0.347776f, -0.365058f, -0.379559f, -0.392822f, -0.404916f, -0.414926f, -0.422209f, -0.426647f, -0.428320f, -0.427480f, -0.424173f, -0.417634f, -0.406929f, -0.392213f, -0.374383f, -0.353748f, -0.330107f, -0.303575f, -0.274126f, -0.241197f, -0.204995f, -0.167220f, -0.129445f, -0.092017f, -0.055184f, -0.019543f, 0.015178f, 0.049744f, 0.083605f, 0.115480f, 0.145267f, 0.173490f, 0.200772f, 0.229618f, 0.261633f, 0.288462f, 0.292554f, 0.266148f, 0.224956f, 0.193266f, 0.179939f}, - {0.002536f, -0.011235f, -0.018343f, -0.017987f, -0.027166f, -0.031117f, 0.014002f, 0.096526f, 0.113126f, -0.016617f, -0.209563f, -0.268875f, -0.109214f, 0.120357f, 0.194165f, 0.064228f, -0.105548f, -0.151938f, -0.085143f, -0.021811f, -0.013168f, -0.007575f, 0.042273f, 0.109306f, 0.142985f, 0.138265f, 0.124567f, 0.114998f, 0.096455f, 0.057758f, 0.004146f, -0.052677f, -0.103477f, -0.141457f, -0.163639f, -0.173107f, -0.175086f, -0.171796f, -0.163515f, -0.151686f, -0.138206f, -0.124227f, -0.111720f, -0.103751f, -0.101586f, -0.103453f, -0.106877f, -0.110322f, -0.112385f, -0.111649f, -0.107834f, -0.101601f, -0.093248f, -0.082860f, -0.071411f, -0.060549f, -0.051523f, -0.045052f, -0.041731f, -0.041860f, -0.045219f, -0.051310f, -0.059514f, -0.069016f, -0.079031f, -0.088966f, -0.098149f, -0.105768f, -0.111299f, -0.114442f, -0.114537f, -0.110675f, -0.102450f, -0.090007f, -0.073514f, -0.053290f, -0.030165f, -0.005135f, 0.020901f, 0.046733f, 0.071073f, 0.093736f, 0.115568f, 0.136842f, 0.156886f, 0.175538f, 0.193455f, 0.210815f, 0.227567f, 0.245363f, 0.267074f, 0.293421f, 0.321639f, 0.348399f, 0.372776f, 0.395534f, - 0.416417f, 0.432977f, 0.441812f, 0.440703f, 0.429686f, 0.410030f, 0.382492f, 0.347214f, 0.305126f, 0.258387f, 0.209075f, 0.158069f, 0.105330f, 0.050877f, -0.004290f, -0.057880f, -0.107405f, -0.152051f, -0.192952f, -0.231334f, -0.267030f, -0.298914f, -0.325959f, -0.347776f, -0.365058f, -0.379559f, -0.392822f, -0.404916f, -0.414926f, -0.422209f, -0.426647f, -0.428320f, -0.427480f, -0.424173f, -0.417634f, -0.406929f, -0.392213f, -0.374383f, -0.353748f, -0.330107f, -0.303575f, -0.274126f, -0.241197f, -0.204995f, -0.167220f, -0.129445f, -0.092017f, -0.055184f, -0.019543f, 0.015178f, 0.049744f, 0.083605f, 0.115480f, 0.145267f, 0.173490f, 0.200772f, 0.229618f, 0.261633f, 0.288462f, 0.292554f, 0.266148f, 0.224956f, 0.193266f, 0.179939f} - }, - { - {-0.007328f, -0.006633f, -0.005516f, -0.004599f, -0.006212f, -0.012944f, -0.019712f, -0.012267f, 0.011010f, 0.016826f, -0.032596f, -0.108239f, -0.110945f, 0.010212f, 0.155530f, 0.161358f, 0.002569f, -0.158036f, -0.158582f, -0.022168f, 0.096234f, 0.102029f, 0.035418f, -0.022187f, -0.041382f, -0.034394f, -0.010242f, 0.027669f, 0.066023f, 0.089774f, 0.096851f, 0.093676f, 0.085029f, 0.075093f, 0.069304f, 0.068251f, 0.065239f, 0.053828f, 0.033768f, 0.008271f, -0.019582f, -0.046238f, -0.067687f, -0.081975f, -0.089777f, -0.092397f, -0.091138f, -0.088118f, -0.085559f, -0.084325f, -0.084372f, -0.085968f, -0.089285f, -0.093494f, -0.097292f, -0.099890f, -0.100991f, -0.100590f, -0.099298f, -0.098219f, -0.098141f, -0.099359f, -0.102222f, -0.107041f, -0.113405f, -0.120380f, -0.127461f, -0.134664f, -0.141768f, -0.148230f, -0.153822f, -0.158600f, -0.162259f, -0.164282f, -0.164806f, -0.164594f, -0.163969f, -0.162482f, -0.159958f, -0.157223f, -0.155192f, -0.153484f, -0.150650f, -0.145885f, -0.139922f, -0.133722f, -0.126676f, -0.116974f, -0.103893f, -0.088961f, -0.074475f, -0.061464f, -0.049642f, -0.038896f, -0.030151f, -0.024762f, - -0.023313f, -0.025007f, -0.028346f, -0.032647f, -0.038714f, -0.047598f, -0.058798f, -0.070133f, -0.079232f, -0.084838f, -0.087074f, -0.087043f, -0.085895f, -0.083734f, -0.079604f, -0.072780f, -0.063696f, -0.053433f, -0.042909f, -0.032749f, -0.023224f, -0.013965f, -0.004302f, 0.005932f, 0.016369f, 0.026824f, 0.037430f, 0.048223f, 0.059127f, 0.070106f, 0.080829f, 0.090562f, 0.098820f, 0.105730f, 0.111496f, 0.116170f, 0.120110f, 0.123911f, 0.127778f, 0.131714f, 0.136211f, 0.141890f, 0.148771f, 0.156783f, 0.166411f, 0.177897f, 0.190546f, 0.203691f, 0.217322f, 0.230936f, 0.243185f, 0.253500f, 0.262398f, 0.269552f, 0.273836f, 0.275598f, 0.275116f, 0.267347f, 0.243149f, 0.200413f, 0.151683f, 0.115625f, 0.100371f, 0.098325f}, - {-0.007328f, -0.006633f, -0.005516f, -0.004599f, -0.006212f, -0.012944f, -0.019712f, -0.012267f, 0.011010f, 0.016826f, -0.032596f, -0.108239f, -0.110945f, 0.010212f, 0.155530f, 0.161358f, 0.002569f, -0.158036f, -0.158582f, -0.022168f, 0.096234f, 0.102029f, 0.035418f, -0.022187f, -0.041382f, -0.034394f, -0.010242f, 0.027669f, 0.066023f, 0.089774f, 0.096851f, 0.093676f, 0.085029f, 0.075093f, 0.069304f, 0.068251f, 0.065239f, 0.053828f, 0.033768f, 0.008271f, -0.019582f, -0.046238f, -0.067687f, -0.081975f, -0.089777f, -0.092397f, -0.091138f, -0.088118f, -0.085559f, -0.084325f, -0.084372f, -0.085968f, -0.089285f, -0.093494f, -0.097292f, -0.099890f, -0.100991f, -0.100590f, -0.099298f, -0.098219f, -0.098141f, -0.099359f, -0.102222f, -0.107041f, -0.113405f, -0.120380f, -0.127461f, -0.134664f, -0.141768f, -0.148230f, -0.153822f, -0.158600f, -0.162259f, -0.164282f, -0.164806f, -0.164594f, -0.163969f, -0.162482f, -0.159958f, -0.157223f, -0.155192f, -0.153484f, -0.150650f, -0.145885f, -0.139922f, -0.133722f, -0.126676f, -0.116974f, -0.103893f, -0.088961f, -0.074475f, -0.061464f, -0.049642f, -0.038896f, -0.030151f, -0.024762f, - -0.023313f, -0.025007f, -0.028346f, -0.032647f, -0.038714f, -0.047598f, -0.058798f, -0.070133f, -0.079232f, -0.084838f, -0.087074f, -0.087043f, -0.085895f, -0.083734f, -0.079604f, -0.072780f, -0.063696f, -0.053433f, -0.042909f, -0.032749f, -0.023224f, -0.013965f, -0.004302f, 0.005932f, 0.016369f, 0.026824f, 0.037430f, 0.048223f, 0.059127f, 0.070106f, 0.080829f, 0.090562f, 0.098820f, 0.105730f, 0.111496f, 0.116170f, 0.120110f, 0.123911f, 0.127778f, 0.131714f, 0.136211f, 0.141890f, 0.148771f, 0.156783f, 0.166411f, 0.177897f, 0.190546f, 0.203691f, 0.217322f, 0.230936f, 0.243185f, 0.253500f, 0.262398f, 0.269552f, 0.273836f, 0.275598f, 0.275116f, 0.267347f, 0.243149f, 0.200413f, 0.151683f, 0.115625f, 0.100371f, 0.098325f} - } -}; -const float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][BINAURAL_CHANNELS][160]={ - { - {-0.177155f, -0.484920f, -0.682869f, -0.761752f, -0.745718f, -0.674718f, -0.586917f, -0.482404f, -0.323473f, -0.100471f, 0.137830f, 0.347770f, 0.515555f, 0.566254f, 0.359251f, -0.086918f, -0.443496f, -0.353479f, 0.114347f, 0.475511f, 0.361546f, -0.104600f, -0.537424f, -0.735340f, -0.767713f, -0.738461f, -0.652325f, -0.500399f, -0.328661f, -0.180340f, -0.049198f, 0.080145f, 0.196917f, 0.288813f, 0.363706f, 0.431260f, 0.488625f, 0.533226f, 0.570447f, 0.603809f, 0.631651f, 0.654656f, 0.675784f, 0.694117f, 0.707260f, 0.716931f, 0.725662f, 0.732120f, 0.734801f, 0.735754f, 0.736687f, 0.736053f, 0.732755f, 0.728224f, 0.723115f, 0.716287f, 0.707887f, 0.699554f, 0.691466f, 0.682668f, 0.673667f, 0.665599f, 0.657918f, 0.649616f, 0.641313f, 0.633915f, 0.626849f, 0.619441f, 0.612311f, 0.606005f, 0.599945f, 0.593699f, 0.587698f, 0.582110f, 0.576431f, 0.570429f, 0.564305f, 0.558028f, 0.551423f, 0.544461f, 0.536876f, 0.528280f, 0.519027f, 0.509876f, 0.500638f, 0.490479f, 0.479610f, 0.469155f, 0.459295f, 0.449057f, 0.438057f, 0.427113f, 0.417049f, 0.407963f, 0.399612f, 0.391749f, - 0.384343f, 0.377949f, 0.373333f, 0.370329f, 0.367819f, 0.365141f, 0.362755f, 0.361280f, 0.360647f, 0.360347f, 0.359797f, 0.358471f, 0.356317f, 0.353956f, 0.351882f, 0.349712f, 0.346702f, 0.342595f, 0.337552f, 0.331788f, 0.325668f, 0.319629f, 0.313630f, 0.307181f, 0.300093f, 0.292690f, 0.285228f, 0.277698f, 0.270172f, 0.262734f, 0.255155f, 0.247216f, 0.239186f, 0.231499f, 0.224227f, 0.217314f, 0.210913f, 0.205028f, 0.199309f, 0.193614f, 0.188221f, 0.183218f, 0.178349f, 0.173647f, 0.169348f, 0.165068f, 0.160062f, 0.154266f, 0.147958f, 0.140640f, 0.131659f, 0.121348f, 0.109799f, 0.095537f, 0.077450f, 0.055356f, 0.024498f, -0.025904f, -0.097692f, -0.166710f, -0.194224f, -0.163866f, -0.098435f, -0.031004f}, - {-0.177155f, -0.484920f, -0.682869f, -0.761752f, -0.745718f, -0.674718f, -0.586917f, -0.482404f, -0.323473f, -0.100471f, 0.137830f, 0.347770f, 0.515555f, 0.566254f, 0.359251f, -0.086918f, -0.443496f, -0.353479f, 0.114347f, 0.475511f, 0.361546f, -0.104600f, -0.537424f, -0.735340f, -0.767713f, -0.738461f, -0.652325f, -0.500399f, -0.328661f, -0.180340f, -0.049198f, 0.080145f, 0.196917f, 0.288813f, 0.363706f, 0.431260f, 0.488625f, 0.533226f, 0.570447f, 0.603809f, 0.631651f, 0.654656f, 0.675784f, 0.694117f, 0.707260f, 0.716931f, 0.725662f, 0.732120f, 0.734801f, 0.735754f, 0.736687f, 0.736053f, 0.732755f, 0.728224f, 0.723115f, 0.716287f, 0.707887f, 0.699554f, 0.691466f, 0.682668f, 0.673667f, 0.665599f, 0.657918f, 0.649616f, 0.641313f, 0.633915f, 0.626849f, 0.619441f, 0.612311f, 0.606005f, 0.599945f, 0.593699f, 0.587698f, 0.582110f, 0.576431f, 0.570429f, 0.564305f, 0.558028f, 0.551423f, 0.544461f, 0.536876f, 0.528280f, 0.519027f, 0.509876f, 0.500638f, 0.490479f, 0.479610f, 0.469155f, 0.459295f, 0.449057f, 0.438057f, 0.427113f, 0.417049f, 0.407963f, 0.399612f, 0.391749f, - 0.384343f, 0.377949f, 0.373333f, 0.370329f, 0.367819f, 0.365141f, 0.362755f, 0.361280f, 0.360647f, 0.360347f, 0.359797f, 0.358471f, 0.356317f, 0.353956f, 0.351882f, 0.349712f, 0.346702f, 0.342595f, 0.337552f, 0.331788f, 0.325668f, 0.319629f, 0.313630f, 0.307181f, 0.300093f, 0.292690f, 0.285228f, 0.277698f, 0.270172f, 0.262734f, 0.255155f, 0.247216f, 0.239186f, 0.231499f, 0.224227f, 0.217314f, 0.210913f, 0.205028f, 0.199309f, 0.193614f, 0.188221f, 0.183218f, 0.178349f, 0.173647f, 0.169348f, 0.165068f, 0.160062f, 0.154266f, 0.147958f, 0.140640f, 0.131659f, 0.121348f, 0.109799f, 0.095537f, 0.077450f, 0.055356f, 0.024498f, -0.025904f, -0.097692f, -0.166710f, -0.194224f, -0.163866f, -0.098435f, -0.031004f} - }, - { - {0.139549f, 0.336827f, 0.308435f, 0.005808f, -0.462640f, -0.907220f, -1.191107f, -1.249724f, -1.052267f, -0.648374f, -0.184425f, 0.248777f, 0.689047f, 1.057228f, 0.989213f, 0.254777f, -0.678946f, -0.922096f, -0.180074f, 0.815838f, 1.130295f, 0.630480f, -0.085113f, -0.526462f, -0.708792f, -0.811530f, -0.847619f, -0.768858f, -0.635090f, -0.531932f, -0.451007f, -0.348401f, -0.234607f, -0.140241f, -0.058435f, 0.029303f, 0.116774f, 0.194059f, 0.268152f, 0.343788f, 0.412925f, 0.472537f, 0.528731f, 0.581041f, 0.623246f, 0.657416f, 0.689726f, 0.717764f, 0.736441f, 0.749186f, 0.761628f, 0.772404f, 0.779073f, 0.784280f, 0.789592f, 0.791949f, 0.790280f, 0.787315f, 0.783161f, 0.775216f, 0.764362f, 0.753702f, 0.742584f, 0.728749f, 0.713786f, 0.700391f, 0.687515f, 0.673424f, 0.659785f, 0.648526f, 0.638593f, 0.629023f, 0.621278f, 0.616302f, 0.612923f, 0.610405f, 0.609282f, 0.609387f, 0.609910f, 0.610809f, 0.611881f, 0.611943f, 0.610799f, 0.609839f, 0.609254f, 0.607395f, 0.603956f, 0.600774f, 0.598705f, 0.596760f, 0.594697f, 0.593483f, 0.593097f, 0.592548f, 0.591657f, 0.590509f, - 0.588008f, 0.583041f, 0.575878f, 0.566779f, 0.554791f, 0.539385f, 0.521605f, 0.502464f, 0.481918f, 0.460090f, 0.437796f, 0.415604f, 0.394034f, 0.374531f, 0.358494f, 0.345637f, 0.334728f, 0.325270f, 0.317257f, 0.310383f, 0.304694f, 0.300804f, 0.298429f, 0.295932f, 0.292037f, 0.286783f, 0.280539f, 0.273591f, 0.266789f, 0.260976f, 0.255734f, 0.250105f, 0.244196f, 0.238683f, 0.233398f, 0.227855f, 0.222384f, 0.217379f, 0.212359f, 0.206958f, 0.201751f, 0.197057f, 0.192250f, 0.187098f, 0.182271f, 0.177860f, 0.173126f, 0.168131f, 0.163596f, 0.158984f, 0.153008f, 0.145729f, 0.137439f, 0.126380f, 0.110802f, 0.090574f, 0.060909f, 0.008923f, -0.070270f, -0.152060f, -0.192269f, -0.168828f, -0.103696f, -0.033024f}, - {-0.139549f, -0.336827f, -0.308435f, -0.005808f, 0.462640f, 0.907220f, 1.191107f, 1.249724f, 1.052267f, 0.648374f, 0.184425f, -0.248777f, -0.689047f, -1.057228f, -0.989213f, -0.254777f, 0.678946f, 0.922096f, 0.180074f, -0.815838f, -1.130295f, -0.630480f, 0.085113f, 0.526462f, 0.708792f, 0.811530f, 0.847619f, 0.768858f, 0.635090f, 0.531932f, 0.451007f, 0.348401f, 0.234607f, 0.140241f, 0.058435f, -0.029303f, -0.116774f, -0.194059f, -0.268152f, -0.343788f, -0.412925f, -0.472537f, -0.528731f, -0.581041f, -0.623246f, -0.657416f, -0.689726f, -0.717764f, -0.736441f, -0.749186f, -0.761628f, -0.772404f, -0.779073f, -0.784280f, -0.789592f, -0.791949f, -0.790280f, -0.787315f, -0.783161f, -0.775216f, -0.764362f, -0.753702f, -0.742584f, -0.728749f, -0.713786f, -0.700391f, -0.687515f, -0.673424f, -0.659785f, -0.648526f, -0.638593f, -0.629023f, -0.621278f, -0.616302f, -0.612923f, -0.610405f, -0.609282f, -0.609387f, -0.609910f, -0.610809f, -0.611881f, -0.611943f, -0.610799f, -0.609839f, -0.609254f, -0.607395f, -0.603956f, -0.600774f, -0.598705f, -0.596760f, -0.594697f, -0.593483f, -0.593097f, -0.592548f, -0.591657f, -0.590509f, - -0.588008f, -0.583041f, -0.575878f, -0.566779f, -0.554791f, -0.539385f, -0.521605f, -0.502464f, -0.481918f, -0.460090f, -0.437796f, -0.415604f, -0.394034f, -0.374531f, -0.358494f, -0.345637f, -0.334728f, -0.325270f, -0.317257f, -0.310383f, -0.304694f, -0.300804f, -0.298429f, -0.295932f, -0.292037f, -0.286783f, -0.280539f, -0.273591f, -0.266789f, -0.260976f, -0.255734f, -0.250105f, -0.244196f, -0.238683f, -0.233398f, -0.227855f, -0.222384f, -0.217379f, -0.212359f, -0.206958f, -0.201751f, -0.197057f, -0.192250f, -0.187098f, -0.182271f, -0.177860f, -0.173126f, -0.168131f, -0.163596f, -0.158984f, -0.153008f, -0.145729f, -0.137439f, -0.126380f, -0.110802f, -0.090574f, -0.060909f, -0.008923f, 0.070270f, 0.152060f, 0.192269f, 0.168828f, 0.103696f, 0.033024f} - }, - { - {-0.016760f, -0.068127f, -0.130493f, -0.141089f, -0.067185f, 0.038675f, 0.094614f, 0.073852f, 0.012198f, -0.044998f, -0.074922f, -0.067552f, -0.018229f, 0.053871f, 0.096099f, 0.062126f, -0.025556f, -0.075695f, -0.021847f, 0.089982f, 0.140592f, 0.069052f, -0.066385f, -0.166455f, -0.193584f, -0.177205f, -0.151753f, -0.126106f, -0.100111f, -0.076682f, -0.055033f, -0.030919f, -0.006099f, 0.012632f, 0.022449f, 0.025150f, 0.022366f, 0.016890f, 0.015159f, 0.022388f, 0.037604f, 0.057012f, 0.079078f, 0.103587f, 0.129254f, 0.155163f, 0.182207f, 0.211436f, 0.242891f, 0.276638f, 0.312764f, 0.349989f, 0.386121f, 0.419912f, 0.450938f, 0.478114f, 0.499957f, 0.515976f, 0.526465f, 0.531211f, 0.529467f, 0.520866f, 0.505422f, 0.482804f, 0.452352f, 0.413839f, 0.367819f, 0.315251f, 0.257155f, 0.194777f, 0.129844f, 0.064384f, 0.000411f, -0.059995f, -0.114688f, -0.162166f, -0.202053f, -0.234163f, -0.257536f, -0.271541f, -0.277603f, -0.278229f, -0.274214f, -0.264528f, -0.249435f, -0.231884f, -0.214667f, -0.197504f, -0.178344f, -0.156843f, -0.135208f, -0.115847f, -0.099323f, -0.084813f, -0.071766f, -0.060680f, - -0.052653f, -0.048607f, -0.048842f, -0.052934f, -0.059893f, -0.068614f, -0.078462f, -0.089482f, -0.101882f, -0.115125f, -0.127566f, -0.137225f, -0.143085f, -0.145562f, -0.145628f, -0.143674f, -0.139331f, -0.132079f, -0.121698f, -0.108283f, -0.092209f, -0.074130f, -0.054844f, -0.035153f, -0.015868f, 0.002272f, 0.018784f, 0.033372f, 0.045644f, 0.055147f, 0.061721f, 0.065625f, 0.067291f, 0.067129f, 0.065460f, 0.062524f, 0.058672f, 0.054690f, 0.051618f, 0.050121f, 0.050200f, 0.051436f, 0.053045f, 0.053826f, 0.052774f, 0.049901f, 0.045925f, 0.041164f, 0.035363f, 0.028499f, 0.020965f, 0.012908f, 0.004149f, -0.005086f, -0.014196f, -0.023368f, -0.034007f, -0.046830f, -0.059022f, -0.064250f, -0.057433f, -0.040349f, -0.021042f, -0.006032f}, - {-0.016760f, -0.068127f, -0.130493f, -0.141089f, -0.067185f, 0.038675f, 0.094614f, 0.073852f, 0.012198f, -0.044998f, -0.074922f, -0.067552f, -0.018229f, 0.053871f, 0.096099f, 0.062126f, -0.025556f, -0.075695f, -0.021847f, 0.089982f, 0.140592f, 0.069052f, -0.066385f, -0.166455f, -0.193584f, -0.177205f, -0.151753f, -0.126106f, -0.100111f, -0.076682f, -0.055033f, -0.030919f, -0.006099f, 0.012632f, 0.022449f, 0.025150f, 0.022366f, 0.016890f, 0.015159f, 0.022388f, 0.037604f, 0.057012f, 0.079078f, 0.103587f, 0.129254f, 0.155163f, 0.182207f, 0.211436f, 0.242891f, 0.276638f, 0.312764f, 0.349989f, 0.386121f, 0.419912f, 0.450938f, 0.478114f, 0.499957f, 0.515976f, 0.526465f, 0.531211f, 0.529467f, 0.520866f, 0.505422f, 0.482804f, 0.452352f, 0.413839f, 0.367819f, 0.315251f, 0.257155f, 0.194777f, 0.129844f, 0.064384f, 0.000411f, -0.059995f, -0.114688f, -0.162166f, -0.202053f, -0.234163f, -0.257536f, -0.271541f, -0.277603f, -0.278229f, -0.274214f, -0.264528f, -0.249435f, -0.231884f, -0.214667f, -0.197504f, -0.178344f, -0.156843f, -0.135208f, -0.115847f, -0.099323f, -0.084813f, -0.071766f, -0.060680f, - -0.052653f, -0.048607f, -0.048842f, -0.052934f, -0.059893f, -0.068614f, -0.078462f, -0.089482f, -0.101882f, -0.115125f, -0.127566f, -0.137225f, -0.143085f, -0.145562f, -0.145628f, -0.143674f, -0.139331f, -0.132079f, -0.121698f, -0.108283f, -0.092209f, -0.074130f, -0.054844f, -0.035153f, -0.015868f, 0.002272f, 0.018784f, 0.033372f, 0.045644f, 0.055147f, 0.061721f, 0.065625f, 0.067291f, 0.067129f, 0.065460f, 0.062524f, 0.058672f, 0.054690f, 0.051618f, 0.050121f, 0.050200f, 0.051436f, 0.053045f, 0.053826f, 0.052774f, 0.049901f, 0.045925f, 0.041164f, 0.035363f, 0.028499f, 0.020965f, 0.012908f, 0.004149f, -0.005086f, -0.014196f, -0.023368f, -0.034007f, -0.046830f, -0.059022f, -0.064250f, -0.057433f, -0.040349f, -0.021042f, -0.006032f} - }, - { - {0.006216f, -0.000979f, -0.045405f, -0.098459f, -0.108142f, -0.058042f, 0.002286f, 0.006399f, -0.050505f, -0.107869f, -0.115965f, -0.079002f, -0.014058f, 0.076297f, 0.153748f, 0.129221f, -0.022377f, -0.165863f, -0.124719f, 0.094586f, 0.284198f, 0.268252f, 0.080217f, -0.126623f, -0.267666f, -0.362720f, -0.439083f, -0.483302f, -0.481861f, -0.448478f, -0.398948f, -0.332421f, -0.246125f, -0.147271f, -0.044899f, 0.056214f, 0.151234f, 0.234458f, 0.303629f, 0.359457f, 0.402431f, 0.433847f, 0.456921f, 0.473698f, 0.483757f, 0.487573f, 0.487588f, 0.484776f, 0.477584f, 0.465086f, 0.448287f, 0.428309f, 0.406263f, 0.384767f, 0.366877f, 0.353378f, 0.342840f, 0.333747f, 0.325088f, 0.315678f, 0.304608f, 0.292048f, 0.278687f, 0.264811f, 0.250511f, 0.236166f, 0.222031f, 0.207593f, 0.191859f, 0.174275f, 0.155036f, 0.134348f, 0.111748f, 0.086766f, 0.060081f, 0.033085f, 0.006337f, -0.020341f, -0.046077f, -0.068901f, -0.087990f, -0.104276f, -0.118054f, -0.127804f, -0.132542f, -0.133724f, -0.133430f, -0.132008f, -0.128923f, -0.124704f, -0.120371f, -0.115592f, -0.108930f, -0.099692f, -0.088366f, -0.075241f, - -0.059512f, -0.040057f, -0.016699f, 0.009565f, 0.037530f, 0.066848f, 0.097910f, 0.130575f, 0.163378f, 0.194394f, 0.222759f, 0.248920f, 0.273442f, 0.295928f, 0.315131f, 0.329956f, 0.340466f, 0.348121f, 0.354815f, 0.361328f, 0.366754f, 0.369576f, 0.369190f, 0.366386f, 0.362766f, 0.359901f, 0.358565f, 0.358337f, 0.358068f, 0.356967f, 0.355150f, 0.353203f, 0.351625f, 0.350678f, 0.350257f, 0.349702f, 0.348075f, 0.344733f, 0.339480f, 0.332348f, 0.323551f, 0.313435f, 0.302117f, 0.289340f, 0.274852f, 0.258681f, 0.241042f, 0.222363f, 0.203342f, 0.184581f, 0.166338f, 0.148863f, 0.132320f, 0.116204f, 0.099819f, 0.082819f, 0.062865f, 0.033748f, -0.008051f, -0.052501f, -0.078525f, -0.073596f, -0.046585f, -0.015014f}, - {0.006216f, -0.000979f, -0.045405f, -0.098459f, -0.108142f, -0.058042f, 0.002286f, 0.006399f, -0.050505f, -0.107869f, -0.115965f, -0.079002f, -0.014058f, 0.076297f, 0.153748f, 0.129221f, -0.022377f, -0.165863f, -0.124719f, 0.094586f, 0.284198f, 0.268252f, 0.080217f, -0.126623f, -0.267666f, -0.362720f, -0.439083f, -0.483302f, -0.481861f, -0.448478f, -0.398948f, -0.332421f, -0.246125f, -0.147271f, -0.044899f, 0.056214f, 0.151234f, 0.234458f, 0.303629f, 0.359457f, 0.402431f, 0.433847f, 0.456921f, 0.473698f, 0.483757f, 0.487573f, 0.487588f, 0.484776f, 0.477584f, 0.465086f, 0.448287f, 0.428309f, 0.406263f, 0.384767f, 0.366877f, 0.353378f, 0.342840f, 0.333747f, 0.325088f, 0.315678f, 0.304608f, 0.292048f, 0.278687f, 0.264811f, 0.250511f, 0.236166f, 0.222031f, 0.207593f, 0.191859f, 0.174275f, 0.155036f, 0.134348f, 0.111748f, 0.086766f, 0.060081f, 0.033085f, 0.006337f, -0.020341f, -0.046077f, -0.068901f, -0.087990f, -0.104276f, -0.118054f, -0.127804f, -0.132542f, -0.133724f, -0.133430f, -0.132008f, -0.128923f, -0.124704f, -0.120371f, -0.115592f, -0.108930f, -0.099692f, -0.088366f, -0.075241f, - -0.059512f, -0.040057f, -0.016699f, 0.009565f, 0.037530f, 0.066848f, 0.097910f, 0.130575f, 0.163378f, 0.194394f, 0.222759f, 0.248920f, 0.273442f, 0.295928f, 0.315131f, 0.329956f, 0.340466f, 0.348121f, 0.354815f, 0.361328f, 0.366754f, 0.369576f, 0.369190f, 0.366386f, 0.362766f, 0.359901f, 0.358565f, 0.358337f, 0.358068f, 0.356967f, 0.355150f, 0.353203f, 0.351625f, 0.350678f, 0.350257f, 0.349702f, 0.348075f, 0.344733f, 0.339480f, 0.332348f, 0.323551f, 0.313435f, 0.302117f, 0.289340f, 0.274852f, 0.258681f, 0.241042f, 0.222363f, 0.203342f, 0.184581f, 0.166338f, 0.148863f, 0.132320f, 0.116204f, 0.099819f, 0.082819f, 0.062865f, 0.033748f, -0.008051f, -0.052501f, -0.078525f, -0.073596f, -0.046585f, -0.015014f} - }, - { - {-0.004287f, -0.004125f, 0.010669f, 0.024630f, 0.019494f, 0.000957f, -0.007771f, -0.004086f, -0.018999f, -0.078706f, -0.163526f, -0.211376f, -0.156788f, 0.013090f, 0.206855f, 0.257968f, 0.082065f, -0.182440f, -0.272081f, -0.081322f, 0.212807f, 0.354516f, 0.275100f, 0.096863f, -0.061422f, -0.184431f, -0.290052f, -0.362546f, -0.382821f, -0.365049f, -0.332356f, -0.287833f, -0.227815f, -0.159321f, -0.089659f, -0.016005f, 0.063671f, 0.140956f, 0.205111f, 0.252511f, 0.284711f, 0.304370f, 0.315455f, 0.322285f, 0.326832f, 0.329503f, 0.331399f, 0.333108f, 0.333026f, 0.329471f, 0.322961f, 0.314750f, 0.305096f, 0.294458f, 0.284464f, 0.276331f, 0.269753f, 0.264070f, 0.259113f, 0.254491f, 0.249431f, 0.243603f, 0.237011f, 0.229139f, 0.219355f, 0.207972f, 0.195732f, 0.182410f, 0.167075f, 0.149600f, 0.130686f, 0.110376f, 0.087751f, 0.062438f, 0.035361f, 0.007458f, -0.021421f, -0.051426f, -0.081166f, -0.108532f, -0.132991f, -0.155787f, -0.177450f, -0.196472f, -0.211501f, -0.223729f, -0.235413f, -0.246432f, -0.254147f, -0.256866f, -0.255699f, -0.252400f, -0.246930f, -0.238183f, -0.226128f, -0.212153f, - -0.197762f, -0.183576f, -0.169356f, -0.154687f, -0.139838f, -0.125919f, -0.113952f, -0.104109f, -0.096147f, -0.089874f, -0.084624f, -0.079081f, -0.072485f, -0.065470f, -0.059088f, -0.053584f, -0.048459f, -0.042892f, -0.035834f, -0.026742f, -0.016583f, -0.007210f, 0.000460f, 0.006925f, 0.013101f, 0.019829f, 0.027937f, 0.037640f, 0.048171f, 0.058820f, 0.069767f, 0.081298f, 0.093098f, 0.104818f, 0.116218f, 0.126365f, 0.133907f, 0.138397f, 0.140204f, 0.139366f, 0.135883f, 0.130589f, 0.124266f, 0.116642f, 0.107629f, 0.098425f, 0.090176f, 0.083055f, 0.077635f, 0.075176f, 0.075705f, 0.078026f, 0.081969f, 0.088024f, 0.095261f, 0.102733f, 0.111115f, 0.118029f, 0.114164f, 0.091680f, 0.056373f, 0.024417f, 0.006512f, 0.000770f}, - {0.004287f, 0.004125f, -0.010669f, -0.024630f, -0.019494f, -0.000957f, 0.007771f, 0.004086f, 0.018999f, 0.078706f, 0.163526f, 0.211376f, 0.156788f, -0.013090f, -0.206855f, -0.257968f, -0.082065f, 0.182440f, 0.272081f, 0.081322f, -0.212807f, -0.354516f, -0.275100f, -0.096863f, 0.061422f, 0.184431f, 0.290052f, 0.362546f, 0.382821f, 0.365049f, 0.332356f, 0.287833f, 0.227815f, 0.159321f, 0.089659f, 0.016005f, -0.063671f, -0.140956f, -0.205111f, -0.252511f, -0.284711f, -0.304370f, -0.315455f, -0.322285f, -0.326832f, -0.329503f, -0.331399f, -0.333108f, -0.333026f, -0.329471f, -0.322961f, -0.314750f, -0.305096f, -0.294458f, -0.284464f, -0.276331f, -0.269753f, -0.264070f, -0.259113f, -0.254491f, -0.249431f, -0.243603f, -0.237011f, -0.229139f, -0.219355f, -0.207972f, -0.195732f, -0.182410f, -0.167075f, -0.149600f, -0.130686f, -0.110376f, -0.087751f, -0.062438f, -0.035361f, -0.007458f, 0.021421f, 0.051426f, 0.081166f, 0.108532f, 0.132991f, 0.155787f, 0.177450f, 0.196472f, 0.211501f, 0.223729f, 0.235413f, 0.246432f, 0.254147f, 0.256866f, 0.255699f, 0.252400f, 0.246930f, 0.238183f, 0.226128f, 0.212153f, - 0.197762f, 0.183576f, 0.169356f, 0.154687f, 0.139838f, 0.125919f, 0.113952f, 0.104109f, 0.096147f, 0.089874f, 0.084624f, 0.079081f, 0.072485f, 0.065470f, 0.059088f, 0.053584f, 0.048459f, 0.042892f, 0.035834f, 0.026742f, 0.016583f, 0.007210f, -0.000460f, -0.006925f, -0.013101f, -0.019829f, -0.027937f, -0.037640f, -0.048171f, -0.058820f, -0.069767f, -0.081298f, -0.093098f, -0.104818f, -0.116218f, -0.126365f, -0.133907f, -0.138397f, -0.140204f, -0.139366f, -0.135883f, -0.130589f, -0.124266f, -0.116642f, -0.107629f, -0.098425f, -0.090176f, -0.083055f, -0.077635f, -0.075176f, -0.075705f, -0.078026f, -0.081969f, -0.088024f, -0.095261f, -0.102733f, -0.111115f, -0.118029f, -0.114164f, -0.091680f, -0.056373f, -0.024417f, -0.006512f, -0.000770f} - }, - { - {-0.021647f, -0.023586f, 0.024030f, 0.034286f, -0.023210f, -0.048883f, 0.041004f, 0.162430f, 0.151420f, -0.019026f, -0.196878f, -0.228185f, -0.105491f, 0.063785f, 0.163457f, 0.131089f, -0.006547f, -0.126856f, -0.104754f, 0.046404f, 0.175190f, 0.165514f, 0.060007f, -0.021876f, -0.031457f, -0.005672f, 0.019840f, 0.046199f, 0.074668f, 0.089172f, 0.080103f, 0.054860f, 0.022313f, -0.014010f, -0.049302f, -0.079262f, -0.106213f, -0.133194f, -0.155736f, -0.166838f, -0.165427f, -0.154608f, -0.136822f, -0.115133f, -0.094431f, -0.077550f, -0.063253f, -0.049405f, -0.034984f, -0.018856f, -0.000016f, 0.020853f, 0.042649f, 0.066048f, 0.092202f, 0.120165f, 0.147513f, 0.172493f, 0.194076f, 0.210899f, 0.221573f, 0.225505f, 0.222686f, 0.213027f, 0.196166f, 0.171640f, 0.139274f, 0.099475f, 0.052952f, 0.000374f, -0.057162f, -0.117584f, -0.178302f, -0.236900f, -0.291078f, -0.338764f, -0.378809f, -0.410753f, -0.433773f, -0.447178f, -0.452109f, -0.450928f, -0.444375f, -0.431188f, -0.411190f, -0.386779f, -0.360327f, -0.331827f, -0.300282f, -0.265894f, -0.229528f, -0.191072f, -0.149793f, -0.105819f, -0.060219f, -0.013836f, - 0.033000f, 0.079560f, 0.124221f, 0.165296f, 0.202053f, 0.234481f, 0.261993f, 0.282718f, 0.294593f, 0.297426f, 0.293710f, 0.286928f, 0.278788f, 0.268248f, 0.253380f, 0.233961f, 0.212129f, 0.190864f, 0.172155f, 0.156250f, 0.142108f, 0.128607f, 0.115645f, 0.104097f, 0.094743f, 0.087526f, 0.081734f, 0.076398f, 0.070494f, 0.063326f, 0.054855f, 0.045303f, 0.034575f, 0.022541f, 0.009630f, -0.003393f, -0.015973f, -0.027652f, -0.037849f, -0.046228f, -0.052913f, -0.058025f, -0.061573f, -0.063948f, -0.065787f, -0.067201f, -0.067897f, -0.068076f, -0.068265f, -0.068365f, -0.067848f, -0.066716f, -0.065221f, -0.063029f, -0.059813f, -0.056114f, -0.052102f, -0.046012f, -0.035782f, -0.022435f, -0.010202f, -0.002684f, 0.000040f, 0.000220f}, - {0.021647f, 0.023586f, -0.024030f, -0.034286f, 0.023210f, 0.048883f, -0.041004f, -0.162430f, -0.151420f, 0.019026f, 0.196878f, 0.228185f, 0.105491f, -0.063785f, -0.163457f, -0.131089f, 0.006547f, 0.126856f, 0.104754f, -0.046404f, -0.175190f, -0.165514f, -0.060007f, 0.021876f, 0.031457f, 0.005672f, -0.019840f, -0.046199f, -0.074668f, -0.089172f, -0.080103f, -0.054860f, -0.022313f, 0.014010f, 0.049302f, 0.079262f, 0.106213f, 0.133194f, 0.155736f, 0.166838f, 0.165427f, 0.154608f, 0.136822f, 0.115133f, 0.094431f, 0.077550f, 0.063253f, 0.049405f, 0.034984f, 0.018856f, 0.000016f, -0.020853f, -0.042649f, -0.066048f, -0.092202f, -0.120165f, -0.147513f, -0.172493f, -0.194076f, -0.210899f, -0.221573f, -0.225505f, -0.222686f, -0.213027f, -0.196166f, -0.171640f, -0.139274f, -0.099475f, -0.052952f, -0.000374f, 0.057162f, 0.117584f, 0.178302f, 0.236900f, 0.291078f, 0.338764f, 0.378809f, 0.410753f, 0.433773f, 0.447178f, 0.452109f, 0.450928f, 0.444375f, 0.431188f, 0.411190f, 0.386779f, 0.360327f, 0.331827f, 0.300282f, 0.265894f, 0.229528f, 0.191072f, 0.149793f, 0.105819f, 0.060219f, 0.013836f, - -0.033000f, -0.079560f, -0.124221f, -0.165296f, -0.202053f, -0.234481f, -0.261993f, -0.282718f, -0.294593f, -0.297426f, -0.293710f, -0.286928f, -0.278788f, -0.268248f, -0.253380f, -0.233961f, -0.212129f, -0.190864f, -0.172155f, -0.156250f, -0.142108f, -0.128607f, -0.115645f, -0.104097f, -0.094743f, -0.087526f, -0.081734f, -0.076398f, -0.070494f, -0.063326f, -0.054855f, -0.045303f, -0.034575f, -0.022541f, -0.009630f, 0.003393f, 0.015973f, 0.027652f, 0.037849f, 0.046228f, 0.052913f, 0.058025f, 0.061573f, 0.063948f, 0.065787f, 0.067201f, 0.067897f, 0.068076f, 0.068265f, 0.068365f, 0.067848f, 0.066716f, 0.065221f, 0.063029f, 0.059813f, 0.056114f, 0.052102f, 0.046012f, 0.035782f, 0.022435f, 0.010202f, 0.002684f, -0.000040f, -0.000220f} - }, - { - {0.003609f, -0.005875f, -0.035270f, -0.050705f, -0.040591f, -0.034798f, -0.044444f, -0.025022f, 0.068226f, 0.216792f, 0.351580f, 0.390054f, 0.251908f, -0.072078f, -0.407851f, -0.461577f, -0.131618f, 0.295028f, 0.412417f, 0.154332f, -0.160841f, -0.245404f, -0.134932f, -0.021902f, 0.026617f, 0.066919f, 0.111869f, 0.111579f, 0.060602f, 0.013650f, 0.002021f, 0.006513f, 0.007751f, 0.009075f, 0.011723f, 0.007129f, -0.005433f, -0.018170f, -0.029080f, -0.041517f, -0.055476f, -0.069814f, -0.085898f, -0.102492f, -0.114887f, -0.122644f, -0.130213f, -0.138731f, -0.145200f, -0.149398f, -0.153881f, -0.158200f, -0.159672f, -0.158092f, -0.154425f, -0.147404f, -0.135655f, -0.120319f, -0.102543f, -0.081543f, -0.057017f, -0.030152f, -0.001234f, 0.030441f, 0.064037f, 0.097610f, 0.130500f, 0.162490f, 0.191732f, 0.216128f, 0.235437f, 0.249873f, 0.258237f, 0.259193f, 0.252784f, 0.239464f, 0.219178f, 0.192076f, 0.158787f, 0.119949f, 0.076587f, 0.030361f, -0.017694f, -0.067610f, -0.118812f, -0.169500f, -0.218464f, -0.265819f, -0.311413f, -0.354364f, -0.394359f, -0.431201f, -0.462908f, -0.486452f, -0.500620f, -0.506335f, - -0.504246f, -0.493652f, -0.473634f, -0.444204f, -0.407040f, -0.365932f, -0.325349f, -0.287620f, -0.252527f, -0.220028f, -0.191976f, -0.170773f, -0.157796f, -0.153357f, -0.156778f, -0.166233f, -0.179639f, -0.195792f, -0.214111f, -0.233906f, -0.254592f, -0.275719f, -0.296074f, -0.313716f, -0.327512f, -0.337813f, -0.345431f, -0.351001f, -0.355309f, -0.358974f, -0.361805f, -0.363501f, -0.364630f, -0.365878f, -0.366858f, -0.366727f, -0.365312f, -0.362755f, -0.358891f, -0.353770f, -0.347869f, -0.341110f, -0.332548f, -0.321368f, -0.307255f, -0.289895f, -0.269324f, -0.246517f, -0.222440f, -0.197100f, -0.170673f, -0.144380f, -0.118840f, -0.093149f, -0.066936f, -0.040482f, -0.010543f, 0.029314f, 0.077898f, 0.118098f, 0.127883f, 0.102368f, 0.059162f, 0.018211f}, - {0.003609f, -0.005875f, -0.035270f, -0.050705f, -0.040591f, -0.034798f, -0.044444f, -0.025022f, 0.068226f, 0.216792f, 0.351580f, 0.390054f, 0.251908f, -0.072078f, -0.407851f, -0.461577f, -0.131618f, 0.295028f, 0.412417f, 0.154332f, -0.160841f, -0.245404f, -0.134932f, -0.021902f, 0.026617f, 0.066919f, 0.111869f, 0.111579f, 0.060602f, 0.013650f, 0.002021f, 0.006513f, 0.007751f, 0.009075f, 0.011723f, 0.007129f, -0.005433f, -0.018170f, -0.029080f, -0.041517f, -0.055476f, -0.069814f, -0.085898f, -0.102492f, -0.114887f, -0.122644f, -0.130213f, -0.138731f, -0.145200f, -0.149398f, -0.153881f, -0.158200f, -0.159672f, -0.158092f, -0.154425f, -0.147404f, -0.135655f, -0.120319f, -0.102543f, -0.081543f, -0.057017f, -0.030152f, -0.001234f, 0.030441f, 0.064037f, 0.097610f, 0.130500f, 0.162490f, 0.191732f, 0.216128f, 0.235437f, 0.249873f, 0.258237f, 0.259193f, 0.252784f, 0.239464f, 0.219178f, 0.192076f, 0.158787f, 0.119949f, 0.076587f, 0.030361f, -0.017694f, -0.067610f, -0.118812f, -0.169500f, -0.218464f, -0.265819f, -0.311413f, -0.354364f, -0.394359f, -0.431201f, -0.462908f, -0.486452f, -0.500620f, -0.506335f, - -0.504246f, -0.493652f, -0.473634f, -0.444204f, -0.407040f, -0.365932f, -0.325349f, -0.287620f, -0.252527f, -0.220028f, -0.191976f, -0.170773f, -0.157796f, -0.153357f, -0.156778f, -0.166233f, -0.179639f, -0.195792f, -0.214111f, -0.233906f, -0.254592f, -0.275719f, -0.296074f, -0.313716f, -0.327512f, -0.337813f, -0.345431f, -0.351001f, -0.355309f, -0.358974f, -0.361805f, -0.363501f, -0.364630f, -0.365878f, -0.366858f, -0.366727f, -0.365312f, -0.362755f, -0.358891f, -0.353770f, -0.347869f, -0.341110f, -0.332548f, -0.321368f, -0.307255f, -0.289895f, -0.269324f, -0.246517f, -0.222440f, -0.197100f, -0.170673f, -0.144380f, -0.118840f, -0.093149f, -0.066936f, -0.040482f, -0.010543f, 0.029314f, 0.077898f, 0.118098f, 0.127883f, 0.102368f, 0.059162f, 0.018211f} - }, - { - {-0.035571f, -0.082138f, -0.071881f, -0.003092f, 0.101819f, 0.191638f, 0.193745f, 0.076115f, -0.091802f, -0.185433f, -0.151170f, -0.053032f, 0.018984f, 0.043815f, 0.047820f, 0.036034f, -0.003122f, -0.047268f, -0.050528f, -0.006921f, 0.038234f, 0.049115f, 0.039088f, 0.038101f, 0.048336f, 0.050095f, 0.033245f, 0.003517f, -0.032931f, -0.074051f, -0.113659f, -0.141573f, -0.153955f, -0.156842f, -0.158152f, -0.160297f, -0.160824f, -0.156125f, -0.143114f, -0.120343f, -0.089839f, -0.056855f, -0.026374f, -0.000211f, 0.022161f, 0.041369f, 0.057834f, 0.072513f, 0.086354f, 0.099354f, 0.111114f, 0.121809f, 0.131727f, 0.140502f, 0.147687f, 0.153512f, 0.158207f, 0.161156f, 0.161507f, 0.159270f, 0.155236f, 0.150152f, 0.144509f, 0.139018f, 0.134862f, 0.133145f, 0.133984f, 0.136505f, 0.140154f, 0.145498f, 0.153052f, 0.161967f, 0.171013f, 0.180271f, 0.190456f, 0.200982f, 0.210096f, 0.216588f, 0.220074f, 0.219946f, 0.215202f, 0.205145f, 0.189615f, 0.168961f, 0.143969f, 0.114996f, 0.081374f, 0.043024f, 0.002201f, -0.038478f, -0.079680f, -0.124703f, -0.174812f, -0.227318f, -0.278767f, -0.328165f, - -0.376275f, -0.423057f, -0.466602f, -0.504310f, -0.535025f, -0.559812f, -0.579998f, -0.594737f, -0.601786f, -0.600642f, -0.593485f, -0.582907f, -0.569794f, -0.553260f, -0.531574f, -0.503599f, -0.470364f, -0.434785f, -0.399160f, -0.363704f, -0.327884f, -0.291902f, -0.256412f, -0.222128f, -0.190043f, -0.160765f, -0.133592f, -0.107383f, -0.081970f, -0.057569f, -0.033581f, -0.009158f, 0.015876f, 0.041442f, 0.067251f, 0.091897f, 0.113638f, 0.132541f, 0.150206f, 0.167416f, 0.183901f, 0.199680f, 0.214328f, 0.225868f, 0.232832f, 0.236330f, 0.238118f, 0.238385f, 0.237189f, 0.235549f, 0.233292f, 0.228644f, 0.221316f, 0.213017f, 0.204613f, 0.196295f, 0.189029f, 0.180265f, 0.160578f, 0.123113f, 0.075941f, 0.036564f, 0.013988f, 0.003474f}, - {-0.035571f, -0.082138f, -0.071881f, -0.003092f, 0.101819f, 0.191638f, 0.193745f, 0.076115f, -0.091802f, -0.185433f, -0.151170f, -0.053032f, 0.018984f, 0.043815f, 0.047820f, 0.036034f, -0.003122f, -0.047268f, -0.050528f, -0.006921f, 0.038234f, 0.049115f, 0.039088f, 0.038101f, 0.048336f, 0.050095f, 0.033245f, 0.003517f, -0.032931f, -0.074051f, -0.113659f, -0.141573f, -0.153955f, -0.156842f, -0.158152f, -0.160297f, -0.160824f, -0.156125f, -0.143114f, -0.120343f, -0.089839f, -0.056855f, -0.026374f, -0.000211f, 0.022161f, 0.041369f, 0.057834f, 0.072513f, 0.086354f, 0.099354f, 0.111114f, 0.121809f, 0.131727f, 0.140502f, 0.147687f, 0.153512f, 0.158207f, 0.161156f, 0.161507f, 0.159270f, 0.155236f, 0.150152f, 0.144509f, 0.139018f, 0.134862f, 0.133145f, 0.133984f, 0.136505f, 0.140154f, 0.145498f, 0.153052f, 0.161967f, 0.171013f, 0.180271f, 0.190456f, 0.200982f, 0.210096f, 0.216588f, 0.220074f, 0.219946f, 0.215202f, 0.205145f, 0.189615f, 0.168961f, 0.143969f, 0.114996f, 0.081374f, 0.043024f, 0.002201f, -0.038478f, -0.079680f, -0.124703f, -0.174812f, -0.227318f, -0.278767f, -0.328165f, - -0.376275f, -0.423057f, -0.466602f, -0.504310f, -0.535025f, -0.559812f, -0.579998f, -0.594737f, -0.601786f, -0.600642f, -0.593485f, -0.582907f, -0.569794f, -0.553260f, -0.531574f, -0.503599f, -0.470364f, -0.434785f, -0.399160f, -0.363704f, -0.327884f, -0.291902f, -0.256412f, -0.222128f, -0.190043f, -0.160765f, -0.133592f, -0.107383f, -0.081970f, -0.057569f, -0.033581f, -0.009158f, 0.015876f, 0.041442f, 0.067251f, 0.091897f, 0.113638f, 0.132541f, 0.150206f, 0.167416f, 0.183901f, 0.199680f, 0.214328f, 0.225868f, 0.232832f, 0.236330f, 0.238118f, 0.238385f, 0.237189f, 0.235549f, 0.233292f, 0.228644f, 0.221316f, 0.213017f, 0.204613f, 0.196295f, 0.189029f, 0.180265f, 0.160578f, 0.123113f, 0.075941f, 0.036564f, 0.013988f, 0.003474f} - }, - { - {0.042551f, 0.061299f, -0.028672f, -0.144580f, -0.225015f, -0.285627f, -0.304011f, -0.184177f, 0.097749f, 0.418361f, 0.636609f, 0.684969f, 0.487187f, -0.018125f, -0.625221f, -0.833372f, -0.352995f, 0.433022f, 0.798844f, 0.478184f, -0.106003f, -0.434667f, -0.441046f, -0.368821f, -0.347324f, -0.318444f, -0.244373f, -0.171635f, -0.121000f, -0.059037f, 0.023724f, 0.097010f, 0.147728f, 0.189866f, 0.225827f, 0.243381f, 0.241962f, 0.230347f, 0.209235f, 0.177802f, 0.144642f, 0.116772f, 0.090397f, 0.061815f, 0.034477f, 0.010059f, -0.014474f, -0.038175f, -0.056107f, -0.068563f, -0.080545f, -0.093619f, -0.106370f, -0.119695f, -0.134742f, -0.149473f, -0.162326f, -0.174807f, -0.187244f, -0.197268f, -0.204420f, -0.210807f, -0.216408f, -0.219069f, -0.218931f, -0.217754f, -0.214932f, -0.208841f, -0.200539f, -0.192118f, -0.183496f, -0.174075f, -0.165039f, -0.157372f, -0.150168f, -0.142655f, -0.135395f, -0.128631f, -0.122082f, -0.116426f, -0.112435f, -0.109121f, -0.105059f, -0.100419f, -0.095650f, -0.089752f, -0.081852f, -0.072848f, -0.064030f, -0.055849f, -0.048935f, -0.044367f, -0.042466f, -0.043236f, -0.047696f, -0.056506f, - -0.067688f, -0.077997f, -0.086044f, -0.092096f, -0.095584f, -0.094704f, -0.087898f, -0.074555f, -0.055146f, -0.031374f, -0.005109f, 0.023181f, 0.053769f, 0.085647f, 0.116644f, 0.145301f, 0.171246f, 0.194304f, 0.214606f, 0.232833f, 0.249102f, 0.262412f, 0.272200f, 0.279515f, 0.285963f, 0.292502f, 0.299498f, 0.306603f, 0.312397f, 0.315556f, 0.316484f, 0.316658f, 0.316768f, 0.316676f, 0.316453f, 0.316057f, 0.314697f, 0.311795f, 0.307878f, 0.303586f, 0.298738f, 0.293100f, 0.286921f, 0.280025f, 0.271517f, 0.260915f, 0.248546f, 0.234604f, 0.218918f, 0.201792f, 0.184003f, 0.165897f, 0.147257f, 0.128036f, 0.108579f, 0.088849f, 0.067408f, 0.041787f, 0.011933f, -0.015821f, -0.031241f, -0.029810f, -0.017985f, -0.005466f}, - {0.042551f, 0.061299f, -0.028672f, -0.144580f, -0.225015f, -0.285627f, -0.304011f, -0.184177f, 0.097749f, 0.418361f, 0.636609f, 0.684969f, 0.487187f, -0.018125f, -0.625221f, -0.833372f, -0.352995f, 0.433022f, 0.798844f, 0.478184f, -0.106003f, -0.434667f, -0.441046f, -0.368821f, -0.347324f, -0.318444f, -0.244373f, -0.171635f, -0.121000f, -0.059037f, 0.023724f, 0.097010f, 0.147728f, 0.189866f, 0.225827f, 0.243381f, 0.241962f, 0.230347f, 0.209235f, 0.177802f, 0.144642f, 0.116772f, 0.090397f, 0.061815f, 0.034477f, 0.010059f, -0.014474f, -0.038175f, -0.056107f, -0.068563f, -0.080545f, -0.093619f, -0.106370f, -0.119695f, -0.134742f, -0.149473f, -0.162326f, -0.174807f, -0.187244f, -0.197268f, -0.204420f, -0.210807f, -0.216408f, -0.219069f, -0.218931f, -0.217754f, -0.214932f, -0.208841f, -0.200539f, -0.192118f, -0.183496f, -0.174075f, -0.165039f, -0.157372f, -0.150168f, -0.142655f, -0.135395f, -0.128631f, -0.122082f, -0.116426f, -0.112435f, -0.109121f, -0.105059f, -0.100419f, -0.095650f, -0.089752f, -0.081852f, -0.072848f, -0.064030f, -0.055849f, -0.048935f, -0.044367f, -0.042466f, -0.043236f, -0.047696f, -0.056506f, - -0.067688f, -0.077997f, -0.086044f, -0.092096f, -0.095584f, -0.094704f, -0.087898f, -0.074555f, -0.055146f, -0.031374f, -0.005109f, 0.023181f, 0.053769f, 0.085647f, 0.116644f, 0.145301f, 0.171246f, 0.194304f, 0.214606f, 0.232833f, 0.249102f, 0.262412f, 0.272200f, 0.279515f, 0.285963f, 0.292502f, 0.299498f, 0.306603f, 0.312397f, 0.315556f, 0.316484f, 0.316658f, 0.316768f, 0.316676f, 0.316453f, 0.316057f, 0.314697f, 0.311795f, 0.307878f, 0.303586f, 0.298738f, 0.293100f, 0.286921f, 0.280025f, 0.271517f, 0.260915f, 0.248546f, 0.234604f, 0.218918f, 0.201792f, 0.184003f, 0.165897f, 0.147257f, 0.128036f, 0.108579f, 0.088849f, 0.067408f, 0.041787f, 0.011933f, -0.015821f, -0.031241f, -0.029810f, -0.017985f, -0.005466f} - }, - { - {0.005047f, 0.021126f, 0.045009f, 0.070453f, 0.091218f, 0.079137f, -0.005705f, -0.148208f, -0.279248f, -0.366201f, -0.399292f, -0.268604f, 0.145211f, 0.646500f, 0.731126f, 0.172486f, -0.552664f, -0.733258f, -0.260523f, 0.299749f, 0.452278f, 0.272382f, 0.101891f, 0.059461f, 0.035030f, -0.031425f, -0.085084f, -0.094988f, -0.094701f, -0.101435f, -0.094303f, -0.066565f, -0.037269f, -0.017081f, -0.001454f, 0.010929f, 0.018070f, 0.023255f, 0.028455f, 0.029520f, 0.025899f, 0.023522f, 0.023990f, 0.022461f, 0.017906f, 0.014746f, 0.014269f, 0.013796f, 0.013307f, 0.015082f, 0.018457f, 0.020882f, 0.021919f, 0.021991f, 0.020056f, 0.015522f, 0.009547f, 0.002759f, -0.005372f, -0.014351f, -0.022889f, -0.031164f, -0.040159f, -0.049486f, -0.058237f, -0.066734f, -0.075464f, -0.083764f, -0.091121f, -0.098138f, -0.105200f, -0.111892f, -0.118289f, -0.125068f, -0.132105f, -0.138497f, -0.143784f, -0.147831f, -0.150121f, -0.150387f, -0.149069f, -0.146131f, -0.140481f, -0.131487f, -0.119994f, -0.107110f, -0.092969f, -0.077185f, -0.059714f, -0.041087f, -0.022428f, -0.005113f, 0.010051f, 0.022960f, 0.033330f, 0.040497f, - 0.044394f, 0.045809f, 0.045372f, 0.043155f, 0.039528f, 0.035586f, 0.032440f, 0.030494f, 0.029398f, 0.028485f, 0.027544f, 0.027340f, 0.028936f, 0.032511f, 0.037335f, 0.042789f, 0.048810f, 0.055598f, 0.063500f, 0.072809f, 0.083162f, 0.093560f, 0.103403f, 0.113024f, 0.123077f, 0.134014f, 0.146084f, 0.159017f, 0.171851f, 0.183812f, 0.195106f, 0.206245f, 0.217176f, 0.227589f, 0.237250f, 0.245546f, 0.251644f, 0.255500f, 0.257760f, 0.258677f, 0.258173f, 0.256605f, 0.254245f, 0.250550f, 0.245153f, 0.238801f, 0.232311f, 0.225757f, 0.219429f, 0.214026f, 0.209321f, 0.204392f, 0.199161f, 0.193782f, 0.187372f, 0.179378f, 0.169453f, 0.152758f, 0.120530f, 0.072470f, 0.024676f, -0.003666f, -0.009454f, -0.003869f}, - {-0.005047f, -0.021126f, -0.045009f, -0.070453f, -0.091218f, -0.079137f, 0.005705f, 0.148208f, 0.279248f, 0.366201f, 0.399292f, 0.268604f, -0.145211f, -0.646500f, -0.731126f, -0.172486f, 0.552664f, 0.733258f, 0.260523f, -0.299749f, -0.452278f, -0.272382f, -0.101891f, -0.059461f, -0.035030f, 0.031425f, 0.085084f, 0.094988f, 0.094701f, 0.101435f, 0.094303f, 0.066565f, 0.037269f, 0.017081f, 0.001454f, -0.010929f, -0.018070f, -0.023255f, -0.028455f, -0.029520f, -0.025899f, -0.023522f, -0.023990f, -0.022461f, -0.017906f, -0.014746f, -0.014269f, -0.013796f, -0.013307f, -0.015082f, -0.018457f, -0.020882f, -0.021919f, -0.021991f, -0.020056f, -0.015522f, -0.009547f, -0.002759f, 0.005372f, 0.014351f, 0.022889f, 0.031164f, 0.040159f, 0.049486f, 0.058237f, 0.066734f, 0.075464f, 0.083764f, 0.091121f, 0.098138f, 0.105200f, 0.111892f, 0.118289f, 0.125068f, 0.132105f, 0.138497f, 0.143784f, 0.147831f, 0.150121f, 0.150387f, 0.149069f, 0.146131f, 0.140481f, 0.131487f, 0.119994f, 0.107110f, 0.092969f, 0.077185f, 0.059714f, 0.041087f, 0.022428f, 0.005113f, -0.010051f, -0.022960f, -0.033330f, -0.040497f, - -0.044394f, -0.045809f, -0.045372f, -0.043155f, -0.039528f, -0.035586f, -0.032440f, -0.030494f, -0.029398f, -0.028485f, -0.027544f, -0.027340f, -0.028936f, -0.032511f, -0.037335f, -0.042789f, -0.048810f, -0.055598f, -0.063500f, -0.072809f, -0.083162f, -0.093560f, -0.103403f, -0.113024f, -0.123077f, -0.134014f, -0.146084f, -0.159017f, -0.171851f, -0.183812f, -0.195106f, -0.206245f, -0.217176f, -0.227589f, -0.237250f, -0.245546f, -0.251644f, -0.255500f, -0.257760f, -0.258677f, -0.258173f, -0.256605f, -0.254245f, -0.250550f, -0.245153f, -0.238801f, -0.232311f, -0.225757f, -0.219429f, -0.214026f, -0.209321f, -0.204392f, -0.199161f, -0.193782f, -0.187372f, -0.179378f, -0.169453f, -0.152758f, -0.120530f, -0.072470f, -0.024676f, 0.003666f, 0.009454f, 0.003869f} - }, - { - {0.003264f, 0.004318f, -0.005829f, -0.024893f, -0.041105f, -0.025902f, 0.043471f, 0.128408f, 0.134001f, 0.021030f, -0.114589f, -0.139872f, -0.049571f, 0.037102f, 0.041588f, 0.008422f, 0.005052f, 0.019837f, 0.006847f, -0.026552f, -0.037371f, -0.021147f, -0.012506f, -0.023997f, -0.030666f, -0.014881f, 0.008946f, 0.019948f, 0.015955f, 0.005594f, -0.007241f, -0.022512f, -0.037468f, -0.047732f, -0.050991f, -0.047280f, -0.038592f, -0.028517f, -0.019426f, -0.010194f, 0.001263f, 0.014159f, 0.025520f, 0.033481f, 0.038027f, 0.039692f, 0.039526f, 0.039623f, 0.042009f, 0.047181f, 0.054431f, 0.062973f, 0.072033f, 0.080590f, 0.087853f, 0.093716f, 0.098363f, 0.101802f, 0.104025f, 0.105212f, 0.105518f, 0.104869f, 0.103123f, 0.100365f, 0.097014f, 0.093624f, 0.090496f, 0.087654f, 0.085314f, 0.084000f, 0.083899f, 0.084586f, 0.085875f, 0.088367f, 0.092576f, 0.098106f, 0.104335f, 0.111281f, 0.119002f, 0.126690f, 0.133135f, 0.137682f, 0.140158f, 0.140242f, 0.137283f, 0.130334f, 0.118340f, 0.100873f, 0.078543f, 0.051954f, 0.020504f, -0.016782f, -0.059370f, -0.105077f, -0.151633f, -0.197526f, - -0.241483f, -0.281925f, -0.316997f, -0.344975f, -0.365154f, -0.378455f, -0.386389f, -0.389309f, -0.386608f, -0.378830f, -0.368544f, -0.358689f, -0.350553f, -0.343331f, -0.335103f, -0.324515f, -0.312129f, -0.299944f, -0.289316f, -0.279871f, -0.270574f, -0.260978f, -0.251183f, -0.241549f, -0.232707f, -0.224985f, -0.217706f, -0.209798f, -0.200910f, -0.191257f, -0.180862f, -0.169770f, -0.158385f, -0.146895f, -0.135062f, -0.123099f, -0.111787f, -0.101401f, -0.091527f, -0.082057f, -0.073151f, -0.064454f, -0.055670f, -0.047503f, -0.040626f, -0.034415f, -0.027978f, -0.021363f, -0.014489f, -0.006443f, 0.002867f, 0.012203f, 0.021232f, 0.031102f, 0.042272f, 0.054913f, 0.071608f, 0.094348f, 0.116599f, 0.123809f, 0.106728f, 0.072105f, 0.036517f, 0.010336f}, - {-0.003264f, -0.004318f, 0.005829f, 0.024893f, 0.041105f, 0.025902f, -0.043471f, -0.128408f, -0.134001f, -0.021030f, 0.114589f, 0.139872f, 0.049571f, -0.037102f, -0.041588f, -0.008422f, -0.005052f, -0.019837f, -0.006847f, 0.026552f, 0.037371f, 0.021147f, 0.012506f, 0.023997f, 0.030666f, 0.014881f, -0.008946f, -0.019948f, -0.015955f, -0.005594f, 0.007241f, 0.022512f, 0.037468f, 0.047732f, 0.050991f, 0.047280f, 0.038592f, 0.028517f, 0.019426f, 0.010194f, -0.001263f, -0.014159f, -0.025520f, -0.033481f, -0.038027f, -0.039692f, -0.039526f, -0.039623f, -0.042009f, -0.047181f, -0.054431f, -0.062973f, -0.072033f, -0.080590f, -0.087853f, -0.093716f, -0.098363f, -0.101802f, -0.104025f, -0.105212f, -0.105518f, -0.104869f, -0.103123f, -0.100365f, -0.097014f, -0.093624f, -0.090496f, -0.087654f, -0.085314f, -0.084000f, -0.083899f, -0.084586f, -0.085875f, -0.088367f, -0.092576f, -0.098106f, -0.104335f, -0.111281f, -0.119002f, -0.126690f, -0.133135f, -0.137682f, -0.140158f, -0.140242f, -0.137283f, -0.130334f, -0.118340f, -0.100873f, -0.078543f, -0.051954f, -0.020504f, 0.016782f, 0.059370f, 0.105077f, 0.151633f, 0.197526f, - 0.241483f, 0.281925f, 0.316997f, 0.344975f, 0.365154f, 0.378455f, 0.386389f, 0.389309f, 0.386608f, 0.378830f, 0.368544f, 0.358689f, 0.350553f, 0.343331f, 0.335103f, 0.324515f, 0.312129f, 0.299944f, 0.289316f, 0.279871f, 0.270574f, 0.260978f, 0.251183f, 0.241549f, 0.232707f, 0.224985f, 0.217706f, 0.209798f, 0.200910f, 0.191257f, 0.180862f, 0.169770f, 0.158385f, 0.146895f, 0.135062f, 0.123099f, 0.111787f, 0.101401f, 0.091527f, 0.082057f, 0.073151f, 0.064454f, 0.055670f, 0.047503f, 0.040626f, 0.034415f, 0.027978f, 0.021363f, 0.014489f, 0.006443f, -0.002867f, -0.012203f, -0.021232f, -0.031102f, -0.042272f, -0.054913f, -0.071608f, -0.094348f, -0.116599f, -0.123809f, -0.106728f, -0.072105f, -0.036517f, -0.010336f} - }, - { - {0.011217f, 0.032990f, 0.036897f, 0.010621f, -0.001993f, 0.049544f, 0.112830f, 0.056133f, -0.160339f, -0.385630f, -0.392350f, -0.095349f, 0.328404f, 0.542847f, 0.344208f, -0.105590f, -0.399358f, -0.300598f, 0.018016f, 0.214090f, 0.169827f, 0.038946f, -0.027942f, -0.041781f, -0.059684f, -0.065038f, -0.024287f, 0.032375f, 0.055196f, 0.048115f, 0.048570f, 0.069300f, 0.097432f, 0.125436f, 0.152243f, 0.169511f, 0.168791f, 0.153482f, 0.132068f, 0.107982f, 0.082397f, 0.058065f, 0.035645f, 0.012912f, -0.010363f, -0.032150f, -0.052509f, -0.073090f, -0.093478f, -0.112421f, -0.130887f, -0.150015f, -0.167940f, -0.181658f, -0.190093f, -0.193280f, -0.190900f, -0.183505f, -0.172998f, -0.160425f, -0.144966f, -0.125766f, -0.102989f, -0.076649f, -0.046121f, -0.011292f, 0.026894f, 0.067039f, 0.107592f, 0.146900f, 0.183708f, 0.217201f, 0.246116f, 0.268588f, 0.283453f, 0.290932f, 0.291460f, 0.284592f, 0.269758f, 0.247580f, 0.219717f, 0.187538f, 0.151436f, 0.111504f, 0.068474f, 0.023637f, -0.022098f, -0.068620f, -0.115935f, -0.163543f, -0.210736f, -0.256901f, -0.300916f, -0.340700f, -0.374071f, -0.399767f, - -0.417035f, -0.424614f, -0.421054f, -0.406173f, -0.381691f, -0.350278f, -0.314081f, -0.274012f, -0.230338f, -0.184210f, -0.138589f, -0.097123f, -0.061885f, -0.032563f, -0.007863f, 0.012882f, 0.029569f, 0.041935f, 0.049803f, 0.053141f, 0.052307f, 0.048088f, 0.041442f, 0.033372f, 0.024841f, 0.016293f, 0.007207f, -0.003502f, -0.016548f, -0.031791f, -0.048410f, -0.065287f, -0.081508f, -0.096823f, -0.111564f, -0.125991f, -0.139856f, -0.152551f, -0.163405f, -0.171901f, -0.177907f, -0.181647f, -0.183211f, -0.182296f, -0.178654f, -0.172490f, -0.164191f, -0.154059f, -0.142478f, -0.129944f, -0.116760f, -0.103091f, -0.089272f, -0.075716f, -0.062663f, -0.050022f, -0.036539f, -0.019395f, 0.002713f, 0.024763f, 0.036870f, 0.033747f, 0.020633f, 0.006443f}, - {-0.011217f, -0.032990f, -0.036897f, -0.010621f, 0.001993f, -0.049544f, -0.112830f, -0.056133f, 0.160339f, 0.385630f, 0.392350f, 0.095349f, -0.328404f, -0.542847f, -0.344208f, 0.105590f, 0.399358f, 0.300598f, -0.018016f, -0.214090f, -0.169827f, -0.038946f, 0.027942f, 0.041781f, 0.059684f, 0.065038f, 0.024287f, -0.032375f, -0.055196f, -0.048115f, -0.048570f, -0.069300f, -0.097432f, -0.125436f, -0.152243f, -0.169511f, -0.168791f, -0.153482f, -0.132068f, -0.107982f, -0.082397f, -0.058065f, -0.035645f, -0.012912f, 0.010363f, 0.032150f, 0.052509f, 0.073090f, 0.093478f, 0.112421f, 0.130887f, 0.150015f, 0.167940f, 0.181658f, 0.190093f, 0.193280f, 0.190900f, 0.183505f, 0.172998f, 0.160425f, 0.144966f, 0.125766f, 0.102989f, 0.076649f, 0.046121f, 0.011292f, -0.026894f, -0.067039f, -0.107592f, -0.146900f, -0.183708f, -0.217201f, -0.246116f, -0.268588f, -0.283453f, -0.290932f, -0.291460f, -0.284592f, -0.269758f, -0.247580f, -0.219717f, -0.187538f, -0.151436f, -0.111504f, -0.068474f, -0.023637f, 0.022098f, 0.068620f, 0.115935f, 0.163543f, 0.210736f, 0.256901f, 0.300916f, 0.340700f, 0.374071f, 0.399767f, - 0.417035f, 0.424614f, 0.421054f, 0.406173f, 0.381691f, 0.350278f, 0.314081f, 0.274012f, 0.230338f, 0.184210f, 0.138589f, 0.097123f, 0.061885f, 0.032563f, 0.007863f, -0.012882f, -0.029569f, -0.041935f, -0.049803f, -0.053141f, -0.052307f, -0.048088f, -0.041442f, -0.033372f, -0.024841f, -0.016293f, -0.007207f, 0.003502f, 0.016548f, 0.031791f, 0.048410f, 0.065287f, 0.081508f, 0.096823f, 0.111564f, 0.125991f, 0.139856f, 0.152551f, 0.163405f, 0.171901f, 0.177907f, 0.181647f, 0.183211f, 0.182296f, 0.178654f, 0.172490f, 0.164191f, 0.154059f, 0.142478f, 0.129944f, 0.116760f, 0.103091f, 0.089272f, 0.075716f, 0.062663f, 0.050022f, 0.036539f, 0.019395f, -0.002713f, -0.024763f, -0.036870f, -0.033747f, -0.020633f, -0.006443f} - }, - { - {0.000083f, 0.005036f, 0.018377f, 0.032102f, 0.033143f, 0.014136f, -0.022619f, -0.065291f, -0.089673f, -0.066050f, 0.009591f, 0.089794f, 0.106985f, 0.045740f, -0.034502f, -0.065255f, -0.039897f, 0.000078f, 0.028484f, 0.051608f, 0.072366f, 0.075587f, 0.055795f, 0.030842f, 0.015327f, 0.000007f, -0.029864f, -0.069463f, -0.099077f, -0.105101f, -0.088131f, -0.057540f, -0.025793f, -0.003611f, 0.006114f, 0.009267f, 0.013559f, 0.021781f, 0.031617f, 0.039206f, 0.042208f, 0.041252f, 0.038988f, 0.037309f, 0.036122f, 0.034790f, 0.033050f, 0.030156f, 0.024935f, 0.017196f, 0.007780f, -0.002812f, -0.014616f, -0.027403f, -0.040792f, -0.054583f, -0.068097f, -0.080003f, -0.089434f, -0.096351f, -0.100606f, -0.101910f, -0.100671f, -0.097487f, -0.092005f, -0.083641f, -0.072770f, -0.059711f, -0.043405f, -0.022639f, 0.002276f, 0.030372f, 0.061335f, 0.094600f, 0.128377f, 0.160824f, 0.191129f, 0.218597f, 0.241992f, 0.260549f, 0.274515f, 0.284048f, 0.288459f, 0.286928f, 0.279376f, 0.266510f, 0.249197f, 0.227462f, 0.200216f, 0.166835f, 0.128828f, 0.088822f, 0.048134f, 0.006659f, -0.035128f, -0.075405f, - -0.111911f, -0.142566f, -0.165901f, -0.182096f, -0.192944f, -0.199789f, -0.202049f, -0.198236f, -0.187646f, -0.171039f, -0.150806f, -0.130229f, -0.111175f, -0.092669f, -0.072879f, -0.051877f, -0.031403f, -0.013020f, 0.002318f, 0.014147f, 0.023189f, 0.030986f, 0.037985f, 0.043116f, 0.045482f, 0.044959f, 0.041243f, 0.034134f, 0.024551f, 0.013580f, 0.001006f, -0.013772f, -0.030379f, -0.048389f, -0.068202f, -0.089706f, -0.111625f, -0.133172f, -0.154629f, -0.175780f, -0.195743f, -0.214472f, -0.232333f, -0.248520f, -0.261904f, -0.272627f, -0.280980f, -0.286143f, -0.287719f, -0.286566f, -0.282756f, -0.275181f, -0.263986f, -0.250601f, -0.235353f, -0.217748f, -0.196795f, -0.167237f, -0.121073f, -0.061155f, -0.008179f, 0.017190f, 0.016197f, 0.005515f}, - {0.000083f, 0.005036f, 0.018377f, 0.032102f, 0.033143f, 0.014136f, -0.022619f, -0.065291f, -0.089673f, -0.066050f, 0.009591f, 0.089794f, 0.106985f, 0.045740f, -0.034502f, -0.065255f, -0.039897f, 0.000078f, 0.028484f, 0.051608f, 0.072366f, 0.075587f, 0.055795f, 0.030842f, 0.015327f, 0.000007f, -0.029864f, -0.069463f, -0.099077f, -0.105101f, -0.088131f, -0.057540f, -0.025793f, -0.003611f, 0.006114f, 0.009267f, 0.013559f, 0.021781f, 0.031617f, 0.039206f, 0.042208f, 0.041252f, 0.038988f, 0.037309f, 0.036122f, 0.034790f, 0.033050f, 0.030156f, 0.024935f, 0.017196f, 0.007780f, -0.002812f, -0.014616f, -0.027403f, -0.040792f, -0.054583f, -0.068097f, -0.080003f, -0.089434f, -0.096351f, -0.100606f, -0.101910f, -0.100671f, -0.097487f, -0.092005f, -0.083641f, -0.072770f, -0.059711f, -0.043405f, -0.022639f, 0.002276f, 0.030372f, 0.061335f, 0.094600f, 0.128377f, 0.160824f, 0.191129f, 0.218597f, 0.241992f, 0.260549f, 0.274515f, 0.284048f, 0.288459f, 0.286928f, 0.279376f, 0.266510f, 0.249197f, 0.227462f, 0.200216f, 0.166835f, 0.128828f, 0.088822f, 0.048134f, 0.006659f, -0.035128f, -0.075405f, - -0.111911f, -0.142566f, -0.165901f, -0.182096f, -0.192944f, -0.199789f, -0.202049f, -0.198236f, -0.187646f, -0.171039f, -0.150806f, -0.130229f, -0.111175f, -0.092669f, -0.072879f, -0.051877f, -0.031403f, -0.013020f, 0.002318f, 0.014147f, 0.023189f, 0.030986f, 0.037985f, 0.043116f, 0.045482f, 0.044959f, 0.041243f, 0.034134f, 0.024551f, 0.013580f, 0.001006f, -0.013772f, -0.030379f, -0.048389f, -0.068202f, -0.089706f, -0.111625f, -0.133172f, -0.154629f, -0.175780f, -0.195743f, -0.214472f, -0.232333f, -0.248520f, -0.261904f, -0.272627f, -0.280980f, -0.286143f, -0.287719f, -0.286566f, -0.282756f, -0.275181f, -0.263986f, -0.250601f, -0.235353f, -0.217748f, -0.196795f, -0.167237f, -0.121073f, -0.061155f, -0.008179f, 0.017190f, 0.016197f, 0.005515f} - }, - { - {0.003277f, 0.020620f, 0.046924f, 0.053396f, 0.027529f, -0.018184f, -0.075068f, -0.129965f, -0.134034f, -0.041093f, 0.107597f, 0.192042f, 0.138507f, 0.002361f, -0.097386f, -0.097716f, -0.027837f, 0.041165f, 0.055356f, 0.009000f, -0.053914f, -0.075455f, -0.037025f, 0.027229f, 0.073147f, 0.088050f, 0.084707f, 0.074263f, 0.059879f, 0.044753f, 0.030913f, 0.014584f, -0.007652f, -0.031648f, -0.050796f, -0.064274f, -0.075002f, -0.083080f, -0.086106f, -0.083894f, -0.079273f, -0.075317f, -0.073762f, -0.075115f, -0.078933f, -0.084283f, -0.090103f, -0.094754f, -0.095967f, -0.092275f, -0.084148f, -0.073198f, -0.060975f, -0.049003f, -0.038889f, -0.031415f, -0.026007f, -0.021619f, -0.017630f, -0.013612f, -0.008806f, -0.002247f, 0.006927f, 0.019339f, 0.035096f, 0.053529f, 0.073490f, 0.093872f, 0.113559f, 0.131158f, 0.145463f, 0.156306f, 0.164334f, 0.169750f, 0.171955f, 0.170864f, 0.167779f, 0.164008f, 0.159174f, 0.152172f, 0.143633f, 0.135949f, 0.130577f, 0.126799f, 0.123854f, 0.122887f, 0.125529f, 0.131183f, 0.136998f, 0.140478f, 0.141438f, 0.141364f, 0.141457f, 0.141528f, 0.140550f, 0.137820f, - 0.133341f, 0.127425f, 0.120598f, 0.113838f, 0.108067f, 0.102944f, 0.096659f, 0.087377f, 0.074639f, 0.059155f, 0.041597f, 0.021904f, -0.000390f, -0.025326f, -0.052050f, -0.079280f, -0.106273f, -0.133120f, -0.160007f, -0.186459f, -0.211358f, -0.233392f, -0.251545f, -0.265595f, -0.276202f, -0.284154f, -0.289485f, -0.291522f, -0.289603f, -0.283599f, -0.274102f, -0.262440f, -0.250053f, -0.237377f, -0.223517f, -0.207267f, -0.188278f, -0.167320f, -0.145844f, -0.125284f, -0.106307f, -0.088608f, -0.071476f, -0.054349f, -0.036881f, -0.019173f, -0.002062f, 0.013514f, 0.027449f, 0.039974f, 0.050573f, 0.058579f, 0.064464f, 0.069138f, 0.072610f, 0.074870f, 0.076796f, 0.077682f, 0.073281f, 0.059949f, 0.040437f, 0.022196f, 0.009962f, 0.002764f}, - {0.003277f, 0.020620f, 0.046924f, 0.053396f, 0.027529f, -0.018184f, -0.075068f, -0.129965f, -0.134034f, -0.041093f, 0.107597f, 0.192042f, 0.138507f, 0.002361f, -0.097386f, -0.097716f, -0.027837f, 0.041165f, 0.055356f, 0.009000f, -0.053914f, -0.075455f, -0.037025f, 0.027229f, 0.073147f, 0.088050f, 0.084707f, 0.074263f, 0.059879f, 0.044753f, 0.030913f, 0.014584f, -0.007652f, -0.031648f, -0.050796f, -0.064274f, -0.075002f, -0.083080f, -0.086106f, -0.083894f, -0.079273f, -0.075317f, -0.073762f, -0.075115f, -0.078933f, -0.084283f, -0.090103f, -0.094754f, -0.095967f, -0.092275f, -0.084148f, -0.073198f, -0.060975f, -0.049003f, -0.038889f, -0.031415f, -0.026007f, -0.021619f, -0.017630f, -0.013612f, -0.008806f, -0.002247f, 0.006927f, 0.019339f, 0.035096f, 0.053529f, 0.073490f, 0.093872f, 0.113559f, 0.131158f, 0.145463f, 0.156306f, 0.164334f, 0.169750f, 0.171955f, 0.170864f, 0.167779f, 0.164008f, 0.159174f, 0.152172f, 0.143633f, 0.135949f, 0.130577f, 0.126799f, 0.123854f, 0.122887f, 0.125529f, 0.131183f, 0.136998f, 0.140478f, 0.141438f, 0.141364f, 0.141457f, 0.141528f, 0.140550f, 0.137820f, - 0.133341f, 0.127425f, 0.120598f, 0.113838f, 0.108067f, 0.102944f, 0.096659f, 0.087377f, 0.074639f, 0.059155f, 0.041597f, 0.021904f, -0.000390f, -0.025326f, -0.052050f, -0.079280f, -0.106273f, -0.133120f, -0.160007f, -0.186459f, -0.211358f, -0.233392f, -0.251545f, -0.265595f, -0.276202f, -0.284154f, -0.289485f, -0.291522f, -0.289603f, -0.283599f, -0.274102f, -0.262440f, -0.250053f, -0.237377f, -0.223517f, -0.207267f, -0.188278f, -0.167320f, -0.145844f, -0.125284f, -0.106307f, -0.088608f, -0.071476f, -0.054349f, -0.036881f, -0.019173f, -0.002062f, 0.013514f, 0.027449f, 0.039974f, 0.050573f, 0.058579f, 0.064464f, 0.069138f, 0.072610f, 0.074870f, 0.076796f, 0.077682f, 0.073281f, 0.059949f, 0.040437f, 0.022196f, 0.009962f, 0.002764f} - }, - { - {-0.008293f, -0.013970f, -0.006751f, -0.004194f, -0.000967f, 0.027228f, 0.059778f, 0.022682f, -0.106073f, -0.214108f, -0.153498f, 0.064143f, 0.238226f, 0.193438f, -0.014455f, -0.165780f, -0.132467f, 0.001700f, 0.083408f, 0.077007f, 0.060090f, 0.082445f, 0.105818f, 0.080684f, 0.018380f, -0.037842f, -0.074236f, -0.108541f, -0.150869f, -0.190041f, -0.211970f, -0.212547f, -0.194180f, -0.162258f, -0.125194f, -0.090440f, -0.060047f, -0.033077f, -0.010004f, 0.007878f, 0.020452f, 0.027724f, 0.029258f, 0.026432f, 0.022993f, 0.022085f, 0.024478f, 0.029976f, 0.038329f, 0.048433f, 0.058546f, 0.067656f, 0.075393f, 0.080877f, 0.082981f, 0.081487f, 0.077061f, 0.070494f, 0.062643f, 0.054653f, 0.047646f, 0.042468f, 0.039796f, 0.040085f, 0.043440f, 0.049885f, 0.059496f, 0.072069f, 0.087127f, 0.104428f, 0.123856f, 0.144734f, 0.165869f, 0.186238f, 0.205023f, 0.221226f, 0.233959f, 0.242827f, 0.247601f, 0.248219f, 0.245523f, 0.240985f, 0.235213f, 0.227742f, 0.218596f, 0.208683f, 0.198442f, 0.187753f, 0.177376f, 0.168395f, 0.159521f, 0.146885f, 0.127542f, 0.101864f, 0.071685f, 0.037282f, - -0.002911f, -0.050169f, -0.103604f, -0.160216f, -0.216687f, -0.271079f, -0.322554f, -0.369840f, -0.410986f, -0.444781f, -0.471531f, -0.492157f, -0.506979f, -0.515336f, -0.516033f, -0.508542f, -0.494176f, -0.475536f, -0.454382f, -0.430583f, -0.403314f, -0.372531f, -0.339168f, -0.304785f, -0.271079f, -0.238824f, -0.207195f, -0.174785f, -0.141074f, -0.106436f, -0.071329f, -0.036073f, -0.000775f, 0.034934f, 0.071321f, 0.107583f, 0.142393f, 0.175297f, 0.206552f, 0.236016f, 0.263322f, 0.288426f, 0.310739f, 0.328664f, 0.341198f, 0.348940f, 0.352697f, 0.352598f, 0.349143f, 0.343169f, 0.334326f, 0.321627f, 0.305401f, 0.286727f, 0.265938f, 0.243372f, 0.218307f, 0.184517f, 0.133522f, 0.069279f, 0.013554f, -0.013422f, -0.013865f, -0.004732f}, - {-0.008293f, -0.013970f, -0.006751f, -0.004194f, -0.000967f, 0.027228f, 0.059778f, 0.022682f, -0.106073f, -0.214108f, -0.153498f, 0.064143f, 0.238226f, 0.193438f, -0.014455f, -0.165780f, -0.132467f, 0.001700f, 0.083408f, 0.077007f, 0.060090f, 0.082445f, 0.105818f, 0.080684f, 0.018380f, -0.037842f, -0.074236f, -0.108541f, -0.150869f, -0.190041f, -0.211970f, -0.212547f, -0.194180f, -0.162258f, -0.125194f, -0.090440f, -0.060047f, -0.033077f, -0.010004f, 0.007878f, 0.020452f, 0.027724f, 0.029258f, 0.026432f, 0.022993f, 0.022085f, 0.024478f, 0.029976f, 0.038329f, 0.048433f, 0.058546f, 0.067656f, 0.075393f, 0.080877f, 0.082981f, 0.081487f, 0.077061f, 0.070494f, 0.062643f, 0.054653f, 0.047646f, 0.042468f, 0.039796f, 0.040085f, 0.043440f, 0.049885f, 0.059496f, 0.072069f, 0.087127f, 0.104428f, 0.123856f, 0.144734f, 0.165869f, 0.186238f, 0.205023f, 0.221226f, 0.233959f, 0.242827f, 0.247601f, 0.248219f, 0.245523f, 0.240985f, 0.235213f, 0.227742f, 0.218596f, 0.208683f, 0.198442f, 0.187753f, 0.177376f, 0.168395f, 0.159521f, 0.146885f, 0.127542f, 0.101864f, 0.071685f, 0.037282f, - -0.002911f, -0.050169f, -0.103604f, -0.160216f, -0.216687f, -0.271079f, -0.322554f, -0.369840f, -0.410986f, -0.444781f, -0.471531f, -0.492157f, -0.506979f, -0.515336f, -0.516033f, -0.508542f, -0.494176f, -0.475536f, -0.454382f, -0.430583f, -0.403314f, -0.372531f, -0.339168f, -0.304785f, -0.271079f, -0.238824f, -0.207195f, -0.174785f, -0.141074f, -0.106436f, -0.071329f, -0.036073f, -0.000775f, 0.034934f, 0.071321f, 0.107583f, 0.142393f, 0.175297f, 0.206552f, 0.236016f, 0.263322f, 0.288426f, 0.310739f, 0.328664f, 0.341198f, 0.348940f, 0.352697f, 0.352598f, 0.349143f, 0.343169f, 0.334326f, 0.321627f, 0.305401f, 0.286727f, 0.265938f, 0.243372f, 0.218307f, 0.184517f, 0.133522f, 0.069279f, 0.013554f, -0.013422f, -0.013865f, -0.004732f} - }, - { - {0.000177f, 0.000226f, -0.000534f, -0.002844f, -0.006900f, -0.008636f, -0.000913f, 0.012312f, 0.007372f, -0.030503f, -0.063506f, -0.022827f, 0.091931f, 0.166548f, 0.089015f, -0.090455f, -0.187289f, -0.097089f, 0.077605f, 0.157235f, 0.092127f, -0.016472f, -0.065347f, -0.047160f, -0.006944f, 0.028956f, 0.056051f, 0.066667f, 0.053772f, 0.024836f, -0.006025f, -0.031877f, -0.051501f, -0.064067f, -0.072308f, -0.083529f, -0.101732f, -0.122988f, -0.140854f, -0.151866f, -0.154661f, -0.148621f, -0.135381f, -0.118751f, -0.102023f, -0.086997f, -0.075122f, -0.067345f, -0.063027f, -0.060678f, -0.059457f, -0.058879f, -0.057880f, -0.055382f, -0.051316f, -0.046358f, -0.041263f, -0.036901f, -0.034150f, -0.033230f, -0.033646f, -0.034904f, -0.036618f, -0.037981f, -0.037996f, -0.036359f, -0.033414f, -0.029270f, -0.023673f, -0.016686f, -0.008707f, 0.000153f, 0.009974f, 0.020300f, 0.030277f, 0.039653f, 0.048922f, 0.058264f, 0.067028f, 0.074752f, 0.082196f, 0.090675f, 0.100423f, 0.110252f, 0.119144f, 0.127625f, 0.136849f, 0.146460f, 0.154233f, 0.158150f, 0.158200f, 0.155698f, 0.151413f, 0.145018f, 0.136153f, 0.125516f, - 0.114815f, 0.105682f, 0.098486f, 0.092374f, 0.086804f, 0.082876f, 0.082667f, 0.087334f, 0.096215f, 0.107481f, 0.119244f, 0.130421f, 0.141184f, 0.152404f, 0.164286f, 0.175808f, 0.185694f, 0.193429f, 0.199183f, 0.203422f, 0.206875f, 0.210212f, 0.213414f, 0.215952f, 0.217594f, 0.218544f, 0.218872f, 0.218422f, 0.217083f, 0.214671f, 0.210839f, 0.205624f, 0.199681f, 0.193644f, 0.187770f, 0.182378f, 0.177914f, 0.174397f, 0.171558f, 0.169503f, 0.168445f, 0.167984f, 0.167536f, 0.167028f, 0.166265f, 0.164275f, 0.160229f, 0.154156f, 0.145927f, 0.134776f, 0.120686f, 0.104691f, 0.087066f, 0.067093f, 0.045071f, 0.021659f, -0.005316f, -0.038739f, -0.073888f, -0.096316f, -0.093511f, -0.068230f, -0.036309f, -0.010540f}, - {0.000177f, 0.000226f, -0.000534f, -0.002844f, -0.006900f, -0.008636f, -0.000913f, 0.012312f, 0.007372f, -0.030503f, -0.063506f, -0.022827f, 0.091931f, 0.166548f, 0.089015f, -0.090455f, -0.187289f, -0.097089f, 0.077605f, 0.157235f, 0.092127f, -0.016472f, -0.065347f, -0.047160f, -0.006944f, 0.028956f, 0.056051f, 0.066667f, 0.053772f, 0.024836f, -0.006025f, -0.031877f, -0.051501f, -0.064067f, -0.072308f, -0.083529f, -0.101732f, -0.122988f, -0.140854f, -0.151866f, -0.154661f, -0.148621f, -0.135381f, -0.118751f, -0.102023f, -0.086997f, -0.075122f, -0.067345f, -0.063027f, -0.060678f, -0.059457f, -0.058879f, -0.057880f, -0.055382f, -0.051316f, -0.046358f, -0.041263f, -0.036901f, -0.034150f, -0.033230f, -0.033646f, -0.034904f, -0.036618f, -0.037981f, -0.037996f, -0.036359f, -0.033414f, -0.029270f, -0.023673f, -0.016686f, -0.008707f, 0.000153f, 0.009974f, 0.020300f, 0.030277f, 0.039653f, 0.048922f, 0.058264f, 0.067028f, 0.074752f, 0.082196f, 0.090675f, 0.100423f, 0.110252f, 0.119144f, 0.127625f, 0.136849f, 0.146460f, 0.154233f, 0.158150f, 0.158200f, 0.155698f, 0.151413f, 0.145018f, 0.136153f, 0.125516f, - 0.114815f, 0.105682f, 0.098486f, 0.092374f, 0.086804f, 0.082876f, 0.082667f, 0.087334f, 0.096215f, 0.107481f, 0.119244f, 0.130421f, 0.141184f, 0.152404f, 0.164286f, 0.175808f, 0.185694f, 0.193429f, 0.199183f, 0.203422f, 0.206875f, 0.210212f, 0.213414f, 0.215952f, 0.217594f, 0.218544f, 0.218872f, 0.218422f, 0.217083f, 0.214671f, 0.210839f, 0.205624f, 0.199681f, 0.193644f, 0.187770f, 0.182378f, 0.177914f, 0.174397f, 0.171558f, 0.169503f, 0.168445f, 0.167984f, 0.167536f, 0.167028f, 0.166265f, 0.164275f, 0.160229f, 0.154156f, 0.145927f, 0.134776f, 0.120686f, 0.104691f, 0.087066f, 0.067093f, 0.045071f, 0.021659f, -0.005316f, -0.038739f, -0.073888f, -0.096316f, -0.093511f, -0.068230f, -0.036309f, -0.010540f} - } -}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /* Sample Rate = 16000 */ const int16_t CRendBin_HOA3_HRIR_max_num_iterations_16kHz = 1; @@ -1816,158 +201,15 @@ const uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS const uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][BINAURAL_CHANNELS][1]={{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}},{{80},{80}}}; const uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz = 0; const float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16]={0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f}; -#ifdef IVAS_FLOAT_FIXED const Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz_fx[16]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -#endif const uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][BINAURAL_CHANNELS][80]={ - { - { 0.883857f, 0.733415f, 0.488407f, 0.219765f, -0.019522f, -0.206727f, -0.355857f, -0.497398f, -0.626479f, -0.691928f, -0.658239f, -0.535571f, -0.319712f, 0.011730f, 0.358242f, 0.451741f, 0.134258f, -0.340096f, -0.484683f, -0.125786f, 0.390069f, 0.611189f, 0.450608f, 0.138633f, -0.137573f, -0.370128f, -0.584446f, -0.746152f, -0.830104f, -0.865577f, -0.882556f, -0.877705f, -0.846732f, -0.803300f, -0.757904f, -0.709171f, -0.657369f, -0.606374f, -0.556373f, -0.507104f, -0.460955f, -0.416905f, -0.371212f, -0.325363f, -0.282989f, -0.241932f, -0.199475f, -0.158957f, -0.122405f, -0.085805f, -0.048176f, -0.013848f, 0.017815f, 0.051603f, 0.085261f, 0.113579f, 0.139998f, 0.169326f, 0.196673f, 0.218159f, 0.240616f, 0.267320f, 0.290455f, 0.308757f, 0.331756f, 0.358830f, 0.379533f, 0.397779f, 0.425526f, 0.455662f, 0.476389f, 0.501029f, 0.542486f, 0.581357f, 0.609875f, 0.668286f, 0.765750f, 0.813077f, 0.736556f, 0.621909f}, - { 0.883857f, 0.733415f, 0.488407f, 0.219765f, -0.019522f, -0.206727f, -0.355857f, -0.497398f, -0.626479f, -0.691928f, -0.658239f, -0.535571f, -0.319712f, 0.011730f, 0.358242f, 0.451741f, 0.134258f, -0.340096f, -0.484683f, -0.125786f, 0.390069f, 0.611189f, 0.450608f, 0.138633f, -0.137573f, -0.370128f, -0.584446f, -0.746152f, -0.830104f, -0.865577f, -0.882556f, -0.877705f, -0.846732f, -0.803300f, -0.757904f, -0.709171f, -0.657369f, -0.606374f, -0.556373f, -0.507104f, -0.460955f, -0.416905f, -0.371212f, -0.325363f, -0.282989f, -0.241932f, -0.199475f, -0.158957f, -0.122405f, -0.085805f, -0.048176f, -0.013848f, 0.017815f, 0.051603f, 0.085261f, 0.113579f, 0.139998f, 0.169326f, 0.196673f, 0.218159f, 0.240616f, 0.267320f, 0.290455f, 0.308757f, 0.331756f, 0.358830f, 0.379533f, 0.397779f, 0.425526f, 0.455662f, 0.476389f, 0.501029f, 0.542486f, 0.581357f, 0.609875f, 0.668286f, 0.765750f, 0.813077f, 0.736556f, 0.621909f} - }, - { - { -0.027320f, 0.203042f, 0.560441f, 0.855080f, 0.913923f, 0.695595f, 0.275320f, -0.242317f, -0.734864f, -1.060751f, -1.161327f, -1.101927f, -0.890150f, -0.379506f, 0.403667f, 0.941418f, 0.637872f, -0.349883f, -1.070253f, -0.802884f, 0.138395f, 0.872965f, 0.973380f, 0.700130f, 0.411920f, 0.163851f, -0.106361f, -0.348889f, -0.492759f, -0.572846f, -0.652509f, -0.726343f, -0.765973f, -0.782601f, -0.797805f, -0.807837f, -0.804710f, -0.793867f, -0.778506f, -0.754424f, -0.722406f, -0.686425f, -0.645124f, -0.597900f, -0.549560f, -0.501709f, -0.451184f, -0.399036f, -0.349319f, -0.301514f, -0.254382f, -0.210559f, -0.169586f, -0.126625f, -0.082489f, -0.042121f, -0.003063f, 0.039580f, 0.081194f, 0.116558f, 0.151377f, 0.189529f, 0.223338f, 0.250399f, 0.280134f, 0.312833f, 0.337748f, 0.358162f, 0.386893f, 0.417232f, 0.436207f, 0.457643f, 0.496886f, 0.534086f, 0.559077f, 0.615495f, 0.720955f, 0.788091f, 0.733920f, 0.633048f}, - { 0.027320f, -0.203042f, -0.560441f, -0.855080f, -0.913923f, -0.695595f, -0.275320f, 0.242317f, 0.734864f, 1.060751f, 1.161327f, 1.101927f, 0.890150f, 0.379506f, -0.403667f, -0.941418f, -0.637872f, 0.349883f, 1.070253f, 0.802884f, -0.138395f, -0.872965f, -0.973380f, -0.700130f, -0.411920f, -0.163851f, 0.106361f, 0.348889f, 0.492759f, 0.572846f, 0.652509f, 0.726343f, 0.765973f, 0.782601f, 0.797805f, 0.807837f, 0.804710f, 0.793867f, 0.778506f, 0.754424f, 0.722406f, 0.686425f, 0.645124f, 0.597900f, 0.549560f, 0.501709f, 0.451184f, 0.399036f, 0.349319f, 0.301514f, 0.254382f, 0.210559f, 0.169586f, 0.126625f, 0.082489f, 0.042121f, 0.003063f, -0.039580f, -0.081194f, -0.116558f, -0.151377f, -0.189529f, -0.223338f, -0.250399f, -0.280134f, -0.312833f, -0.337748f, -0.358162f, -0.386893f, -0.417232f, -0.436207f, -0.457643f, -0.496886f, -0.534086f, -0.559077f, -0.615495f, -0.720955f, -0.788091f, -0.733920f, -0.633048f} - }, - { - { 0.118436f, 0.115238f, 0.066724f, -0.031005f, -0.110536f, -0.104982f, -0.026119f, 0.054803f, 0.085973f, 0.067873f, 0.022013f, -0.034585f, -0.076928f, -0.068265f, 0.001219f, 0.079759f, 0.089362f, 0.012958f, -0.068933f, -0.055059f, 0.061752f, 0.181176f, 0.204944f, 0.133740f, 0.039616f, -0.026727f, -0.067425f, -0.097358f, -0.117479f, -0.128816f, -0.139106f, -0.148124f, -0.147540f, -0.137735f, -0.127967f, -0.121964f, -0.118868f, -0.123376f, -0.139592f, -0.160579f, -0.177238f, -0.190353f, -0.203239f, -0.212479f, -0.215771f, -0.218017f, -0.221530f, -0.221546f, -0.216582f, -0.210524f, -0.201753f, -0.183921f, -0.158000f, -0.129614f, -0.096841f, -0.054949f, -0.008121f, 0.037786f, 0.086428f, 0.141514f, 0.196865f, 0.248309f, 0.301857f, 0.359085f, 0.410915f, 0.454764f, 0.498103f, 0.538709f, 0.564751f, 0.577927f, 0.589323f, 0.592448f, 0.572721f, 0.540242f, 0.513516f, 0.474346f, 0.385659f, 0.255970f, 0.141241f, 0.082055f}, - { 0.118436f, 0.115238f, 0.066724f, -0.031005f, -0.110536f, -0.104982f, -0.026119f, 0.054803f, 0.085973f, 0.067873f, 0.022013f, -0.034585f, -0.076928f, -0.068265f, 0.001219f, 0.079759f, 0.089362f, 0.012958f, -0.068933f, -0.055059f, 0.061752f, 0.181176f, 0.204944f, 0.133740f, 0.039616f, -0.026727f, -0.067425f, -0.097358f, -0.117479f, -0.128816f, -0.139106f, -0.148124f, -0.147540f, -0.137735f, -0.127967f, -0.121964f, -0.118868f, -0.123376f, -0.139592f, -0.160579f, -0.177238f, -0.190353f, -0.203239f, -0.212479f, -0.215771f, -0.218017f, -0.221530f, -0.221546f, -0.216582f, -0.210524f, -0.201753f, -0.183921f, -0.158000f, -0.129614f, -0.096841f, -0.054949f, -0.008121f, 0.037786f, 0.086428f, 0.141514f, 0.196865f, 0.248309f, 0.301857f, 0.359085f, 0.410915f, 0.454764f, 0.498103f, 0.538709f, 0.564751f, 0.577927f, 0.589323f, 0.592448f, 0.572721f, 0.540242f, 0.513516f, 0.474346f, 0.385659f, 0.255970f, 0.141241f, 0.082055f} - }, - { - { 0.032265f, 0.058092f, 0.073219f, 0.041427f, -0.027377f, -0.074710f, -0.054839f, 0.005525f, 0.033420f, -0.004645f, -0.074163f, -0.131671f, -0.164722f, -0.155087f, -0.066220f, 0.075605f, 0.140276f, 0.027223f, -0.171436f, -0.236113f, -0.070379f, 0.189981f, 0.347922f, 0.350289f, 0.275749f, 0.188927f, 0.086500f, -0.040928f, -0.171421f, -0.284063f, -0.381731f, -0.470062f, -0.541769f, -0.589134f, -0.613034f, -0.615565f, -0.596996f, -0.561345f, -0.515497f, -0.463484f, -0.407689f, -0.352161f, -0.299365f, -0.247826f, -0.196903f, -0.149167f, -0.105444f, -0.063031f, -0.021015f, 0.017920f, 0.052064f, 0.081783f, 0.105940f, 0.122756f, 0.134246f, 0.144836f, 0.156248f, 0.167997f, 0.181050f, 0.196383f, 0.212049f, 0.225943f, 0.239050f, 0.252450f, 0.264499f, 0.274458f, 0.284930f, 0.297257f, 0.308914f, 0.318683f, 0.329107f, 0.340350f, 0.347916f, 0.350893f, 0.354868f, 0.358797f, 0.345304f, 0.296893f, 0.224114f, 0.168317f}, - { 0.032265f, 0.058092f, 0.073219f, 0.041427f, -0.027377f, -0.074710f, -0.054839f, 0.005525f, 0.033420f, -0.004645f, -0.074163f, -0.131671f, -0.164722f, -0.155087f, -0.066220f, 0.075605f, 0.140276f, 0.027223f, -0.171436f, -0.236113f, -0.070379f, 0.189981f, 0.347922f, 0.350289f, 0.275749f, 0.188927f, 0.086500f, -0.040928f, -0.171421f, -0.284063f, -0.381731f, -0.470062f, -0.541769f, -0.589134f, -0.613034f, -0.615565f, -0.596996f, -0.561345f, -0.515497f, -0.463484f, -0.407689f, -0.352161f, -0.299365f, -0.247826f, -0.196903f, -0.149167f, -0.105444f, -0.063031f, -0.021015f, 0.017920f, 0.052064f, 0.081783f, 0.105940f, 0.122756f, 0.134246f, 0.144836f, 0.156248f, 0.167997f, 0.181050f, 0.196383f, 0.212049f, 0.225943f, 0.239050f, 0.252450f, 0.264499f, 0.274458f, 0.284930f, 0.297257f, 0.308914f, 0.318683f, 0.329107f, 0.340350f, 0.347916f, 0.350893f, 0.354868f, 0.358797f, 0.345304f, 0.296893f, 0.224114f, 0.168317f} - }, - { - { 0.011552f, 0.000565f, -0.003312f, 0.012114f, 0.034643f, 0.042894f, 0.038718f, 0.047434f, 0.078185f, 0.098700f, 0.060730f, -0.052718f, -0.197397f, -0.271665f, -0.179838f, 0.052824f, 0.238687f, 0.183493f, -0.084160f, -0.306954f, -0.270000f, -0.022547f, 0.219181f, 0.324412f, 0.323963f, 0.283599f, 0.211949f, 0.102569f, -0.017904f, -0.119553f, -0.202749f, -0.277404f, -0.338929f, -0.381318f, -0.410145f, -0.429239f, -0.431485f, -0.411399f, -0.374227f, -0.328491f, -0.279921f, -0.233766f, -0.193863f, -0.159140f, -0.127047f, -0.098014f, -0.072129f, -0.046232f, -0.018734f, 0.007677f, 0.031175f, 0.053092f, 0.073299f, 0.089460f, 0.102015f, 0.113996f, 0.125945f, 0.136708f, 0.147823f, 0.161322f, 0.175607f, 0.188937f, 0.203404f, 0.220320f, 0.236539f, 0.250298f, 0.264790f, 0.281291f, 0.295883f, 0.307388f, 0.320088f, 0.334110f, 0.343177f, 0.346983f, 0.353477f, 0.359929f, 0.343271f, 0.284042f, 0.198067f, 0.133818f}, - { -0.011552f, -0.000565f, 0.003312f, -0.012114f, -0.034643f, -0.042894f, -0.038718f, -0.047434f, -0.078185f, -0.098700f, -0.060730f, 0.052718f, 0.197397f, 0.271665f, 0.179838f, -0.052824f, -0.238687f, -0.183493f, 0.084160f, 0.306954f, 0.270000f, 0.022547f, -0.219181f, -0.324412f, -0.323963f, -0.283599f, -0.211949f, -0.102569f, 0.017904f, 0.119553f, 0.202749f, 0.277404f, 0.338929f, 0.381318f, 0.410145f, 0.429239f, 0.431485f, 0.411399f, 0.374227f, 0.328491f, 0.279921f, 0.233766f, 0.193863f, 0.159140f, 0.127047f, 0.098014f, 0.072129f, 0.046232f, 0.018734f, -0.007677f, -0.031175f, -0.053092f, -0.073299f, -0.089460f, -0.102015f, -0.113996f, -0.125945f, -0.136708f, -0.147823f, -0.161322f, -0.175607f, -0.188937f, -0.203404f, -0.220320f, -0.236539f, -0.250298f, -0.264790f, -0.281291f, -0.295883f, -0.307388f, -0.320088f, -0.334110f, -0.343177f, -0.346983f, -0.353477f, -0.359929f, -0.343271f, -0.284042f, -0.198067f, -0.133818f} - }, - { - { 0.051162f, 0.004630f, -0.001227f, 0.050366f, 0.063139f, -0.012808f, -0.073989f, 0.003079f, 0.174556f, 0.264299f, 0.172675f, -0.020436f, -0.159153f, -0.156052f, -0.032841f, 0.113831f, 0.167176f, 0.075277f, -0.079544f, -0.141124f, -0.047299f, 0.099392f, 0.161108f, 0.119504f, 0.056727f, 0.028236f, 0.022203f, 0.022582f, 0.040897f, 0.080790f, 0.122332f, 0.151311f, 0.170587f, 0.180438f, 0.176020f, 0.162553f, 0.148761f, 0.129984f, 0.097918f, 0.058507f, 0.022731f, -0.008873f, -0.037674f, -0.057264f, -0.065527f, -0.071491f, -0.080334f, -0.087226f, -0.091495f, -0.098993f, -0.107772f, -0.110111f, -0.108138f, -0.108645f, -0.106898f, -0.094525f, -0.075444f, -0.055728f, -0.029601f, 0.007217f, 0.045808f, 0.081023f, 0.120922f, 0.166769f, 0.206984f, 0.240262f, 0.277196f, 0.313665f, 0.334528f, 0.343916f, 0.355052f, 0.356025f, 0.328945f, 0.289951f, 0.257626f, 0.201059f, 0.086037f, -0.044980f, -0.115572f, -0.123491f}, - { -0.051162f, -0.004630f, 0.001227f, -0.050366f, -0.063139f, 0.012808f, 0.073989f, -0.003079f, -0.174556f, -0.264299f, -0.172675f, 0.020436f, 0.159153f, 0.156052f, 0.032841f, -0.113831f, -0.167176f, -0.075277f, 0.079544f, 0.141124f, 0.047299f, -0.099392f, -0.161108f, -0.119504f, -0.056727f, -0.028236f, -0.022203f, -0.022582f, -0.040897f, -0.080790f, -0.122332f, -0.151311f, -0.170587f, -0.180438f, -0.176020f, -0.162553f, -0.148761f, -0.129984f, -0.097918f, -0.058507f, -0.022731f, 0.008873f, 0.037674f, 0.057264f, 0.065527f, 0.071491f, 0.080334f, 0.087226f, 0.091495f, 0.098993f, 0.107772f, 0.110111f, 0.108138f, 0.108645f, 0.106898f, 0.094525f, 0.075444f, 0.055728f, 0.029601f, -0.007217f, -0.045808f, -0.081023f, -0.120922f, -0.166769f, -0.206984f, -0.240262f, -0.277196f, -0.313665f, -0.334528f, -0.343916f, -0.355052f, -0.356025f, -0.328945f, -0.289951f, -0.257626f, -0.201059f, -0.086037f, 0.044980f, 0.115572f, 0.123491f} - }, - { - { -0.001314f, 0.013986f, 0.009786f, -0.021568f, -0.047753f, -0.057550f, -0.086395f, -0.154169f, -0.215190f, -0.199014f, -0.071655f, 0.152694f, 0.397084f, 0.495990f, 0.293761f, -0.132217f, -0.431993f, -0.318278f, 0.082383f, 0.358067f, 0.288935f, 0.046365f, -0.101534f, -0.106415f, -0.078828f, -0.063480f, -0.018297f, 0.055798f, 0.098862f, 0.089346f, 0.066346f, 0.059485f, 0.060855f, 0.062340f, 0.070487f, 0.084437f, 0.093707f, 0.096733f, 0.099690f, 0.102715f, 0.102674f, 0.100995f, 0.097996f, 0.089458f, 0.075691f, 0.063124f, 0.053174f, 0.040888f, 0.025646f, 0.011582f, -0.001922f, -0.019025f, -0.038853f, -0.058009f, -0.077789f, -0.100164f, -0.121936f, -0.140242f, -0.157366f, -0.174332f, -0.187554f, -0.195964f, -0.202516f, -0.206222f, -0.202547f, -0.192157f, -0.178650f, -0.159543f, -0.131095f, -0.097600f, -0.063527f, -0.024200f, 0.022505f, 0.067763f, 0.110169f, 0.162198f, 0.215318f, 0.224924f, 0.168949f, 0.102011f}, - { -0.001314f, 0.013986f, 0.009786f, -0.021568f, -0.047753f, -0.057550f, -0.086395f, -0.154169f, -0.215190f, -0.199014f, -0.071655f, 0.152694f, 0.397084f, 0.495990f, 0.293761f, -0.132217f, -0.431993f, -0.318278f, 0.082383f, 0.358067f, 0.288935f, 0.046365f, -0.101534f, -0.106415f, -0.078828f, -0.063480f, -0.018297f, 0.055798f, 0.098862f, 0.089346f, 0.066346f, 0.059485f, 0.060855f, 0.062340f, 0.070487f, 0.084437f, 0.093707f, 0.096733f, 0.099690f, 0.102715f, 0.102674f, 0.100995f, 0.097996f, 0.089458f, 0.075691f, 0.063124f, 0.053174f, 0.040888f, 0.025646f, 0.011582f, -0.001922f, -0.019025f, -0.038853f, -0.058009f, -0.077789f, -0.100164f, -0.121936f, -0.140242f, -0.157366f, -0.174332f, -0.187554f, -0.195964f, -0.202516f, -0.206222f, -0.202547f, -0.192157f, -0.178650f, -0.159543f, -0.131095f, -0.097600f, -0.063527f, -0.024200f, 0.022505f, 0.067763f, 0.110169f, 0.162198f, 0.215318f, 0.224924f, 0.168949f, 0.102011f} - }, - { - { 0.042103f, -0.013452f, -0.091487f, -0.148327f, -0.144124f, -0.055175f, 0.091983f, 0.204935f, 0.191965f, 0.062580f, -0.072721f, -0.121327f, -0.093551f, -0.051022f, -0.017300f, 0.017247f, 0.037857f, 0.014410f, -0.039540f, -0.070060f, -0.052305f, -0.017107f, 0.000424f, 0.004587f, 0.018491f, 0.047099f, 0.077608f, 0.099837f, 0.110945f, 0.108370f, 0.089842f, 0.058821f, 0.024413f, -0.005114f, -0.028508f, -0.051222f, -0.078453f, -0.109684f, -0.140991f, -0.169087f, -0.190473f, -0.201281f, -0.201941f, -0.197857f, -0.192519f, -0.184895f, -0.175234f, -0.166555f, -0.158810f, -0.148859f, -0.137050f, -0.126350f, -0.115695f, -0.102138f, -0.087471f, -0.074652f, -0.061324f, -0.044873f, -0.028707f, -0.015999f, -0.004116f, 0.008155f, 0.016586f, 0.020249f, 0.023972f, 0.028420f, 0.029801f, 0.030588f, 0.036368f, 0.043745f, 0.047696f, 0.055248f, 0.072784f, 0.090791f, 0.104872f, 0.134221f, 0.185880f, 0.221150f, 0.203371f, 0.163391f}, - { 0.042103f, -0.013452f, -0.091487f, -0.148327f, -0.144124f, -0.055175f, 0.091983f, 0.204935f, 0.191965f, 0.062580f, -0.072721f, -0.121327f, -0.093551f, -0.051022f, -0.017300f, 0.017247f, 0.037857f, 0.014410f, -0.039540f, -0.070060f, -0.052305f, -0.017107f, 0.000424f, 0.004587f, 0.018491f, 0.047099f, 0.077608f, 0.099837f, 0.110945f, 0.108370f, 0.089842f, 0.058821f, 0.024413f, -0.005114f, -0.028508f, -0.051222f, -0.078453f, -0.109684f, -0.140991f, -0.169087f, -0.190473f, -0.201281f, -0.201941f, -0.197857f, -0.192519f, -0.184895f, -0.175234f, -0.166555f, -0.158810f, -0.148859f, -0.137050f, -0.126350f, -0.115695f, -0.102138f, -0.087471f, -0.074652f, -0.061324f, -0.044873f, -0.028707f, -0.015999f, -0.004116f, 0.008155f, 0.016586f, 0.020249f, 0.023972f, 0.028420f, 0.029801f, 0.030588f, 0.036368f, 0.043745f, 0.047696f, 0.055248f, 0.072784f, 0.090791f, 0.104872f, 0.134221f, 0.185880f, 0.221150f, 0.203371f, 0.163391f} - }, - { - { -0.017545f, 0.076968f, 0.147238f, 0.125289f, 0.049414f, -0.057820f, -0.233434f, -0.448356f, -0.560146f, -0.463019f, -0.188026f, 0.190602f, 0.597571f, 0.824948f, 0.577274f, -0.126396f, -0.739164f, -0.676925f, -0.006837f, 0.613537f, 0.701525f, 0.399638f, 0.115282f, -0.003365f, -0.072131f, -0.166089f, -0.238583f, -0.264945f, -0.284852f, -0.312500f, -0.316805f, -0.287275f, -0.246557f, -0.204600f, -0.151995f, -0.090222f, -0.031983f, 0.019104f, 0.064902f, 0.100523f, 0.122410f, 0.136855f, 0.149719f, 0.158877f, 0.162462f, 0.163196f, 0.161570f, 0.155005f, 0.144910f, 0.136207f, 0.130365f, 0.125254f, 0.119853f, 0.114133f, 0.106910f, 0.097381f, 0.086310f, 0.074005f, 0.059767f, 0.043801f, 0.027185f, 0.010169f, -0.007656f, -0.026211f, -0.045001f, -0.063487f, -0.081298f, -0.098501f, -0.114708f, -0.128404f, -0.139398f, -0.150144f, -0.161200f, -0.169677f, -0.177286f, -0.191238f, -0.207043f, -0.202388f, -0.166936f, -0.129206f}, - { -0.017545f, 0.076968f, 0.147238f, 0.125289f, 0.049414f, -0.057820f, -0.233434f, -0.448356f, -0.560146f, -0.463019f, -0.188026f, 0.190602f, 0.597571f, 0.824948f, 0.577274f, -0.126396f, -0.739164f, -0.676925f, -0.006837f, 0.613537f, 0.701525f, 0.399638f, 0.115282f, -0.003365f, -0.072131f, -0.166089f, -0.238583f, -0.264945f, -0.284852f, -0.312500f, -0.316805f, -0.287275f, -0.246557f, -0.204600f, -0.151995f, -0.090222f, -0.031983f, 0.019104f, 0.064902f, 0.100523f, 0.122410f, 0.136855f, 0.149719f, 0.158877f, 0.162462f, 0.163196f, 0.161570f, 0.155005f, 0.144910f, 0.136207f, 0.130365f, 0.125254f, 0.119853f, 0.114133f, 0.106910f, 0.097381f, 0.086310f, 0.074005f, 0.059767f, 0.043801f, 0.027185f, 0.010169f, -0.007656f, -0.026211f, -0.045001f, -0.063487f, -0.081298f, -0.098501f, -0.114708f, -0.128404f, -0.139398f, -0.150144f, -0.161200f, -0.169677f, -0.177286f, -0.191238f, -0.207043f, -0.202388f, -0.166936f, -0.129206f} - }, - { - { -0.006941f, -0.009137f, -0.001025f, 0.023181f, 0.071280f, 0.152288f, 0.232381f, 0.241767f, 0.159918f, 0.019441f, -0.191250f, -0.477987f, -0.641445f, -0.366185f, 0.303140f, 0.785583f, 0.561935f, -0.151779f, -0.630912f, -0.503217f, -0.082209f, 0.167454f, 0.171480f, 0.133590f, 0.151479f, 0.158082f, 0.114516f, 0.066176f, 0.040238f, 0.013478f, -0.024102f, -0.051025f, -0.056634f, -0.052834f, -0.047949f, -0.040161f, -0.030751f, -0.023050f, -0.014898f, -0.004699f, 0.003065f, 0.006126f, 0.009138f, 0.014713f, 0.018779f, 0.018792f, 0.018156f, 0.019353f, 0.020281f, 0.020049f, 0.021722f, 0.026967f, 0.033551f, 0.039947f, 0.047332f, 0.055643f, 0.062465f, 0.067092f, 0.071222f, 0.074871f, 0.076231f, 0.075857f, 0.075991f, 0.075860f, 0.073017f, 0.068571f, 0.065118f, 0.061079f, 0.053861f, 0.045973f, 0.040311f, 0.033378f, 0.022033f, 0.010850f, 0.001847f, -0.014432f, -0.042350f, -0.064916f, -0.064261f, -0.051262f}, - { 0.006941f, 0.009137f, 0.001025f, -0.023181f, -0.071280f, -0.152288f, -0.232381f, -0.241767f, -0.159918f, -0.019441f, 0.191250f, 0.477987f, 0.641445f, 0.366185f, -0.303140f, -0.785583f, -0.561935f, 0.151779f, 0.630912f, 0.503217f, 0.082209f, -0.167454f, -0.171480f, -0.133590f, -0.151479f, -0.158082f, -0.114516f, -0.066176f, -0.040238f, -0.013478f, 0.024102f, 0.051025f, 0.056634f, 0.052834f, 0.047949f, 0.040161f, 0.030751f, 0.023050f, 0.014898f, 0.004699f, -0.003065f, -0.006126f, -0.009138f, -0.014713f, -0.018779f, -0.018792f, -0.018156f, -0.019353f, -0.020281f, -0.020049f, -0.021722f, -0.026967f, -0.033551f, -0.039947f, -0.047332f, -0.055643f, -0.062465f, -0.067092f, -0.071222f, -0.074871f, -0.076231f, -0.075857f, -0.075991f, -0.075860f, -0.073017f, -0.068571f, -0.065118f, -0.061079f, -0.053861f, -0.045973f, -0.040311f, -0.033378f, -0.022033f, -0.010850f, -0.001847f, 0.014432f, 0.042350f, 0.064916f, 0.064261f, 0.051262f} - }, - { - { -0.009108f, -0.000638f, 0.006579f, 0.001811f, -0.025320f, -0.072975f, -0.099878f, -0.046177f, 0.078173f, 0.161617f, 0.109552f, -0.025830f, -0.103052f, -0.069323f, -0.005915f, 0.007950f, -0.006548f, 0.003625f, 0.029014f, 0.026490f, -0.001964f, -0.017075f, -0.008856f, -0.005898f, -0.023342f, -0.040994f, -0.037654f, -0.018706f, -0.001195f, 0.008790f, 0.013986f, 0.014099f, 0.006255f, -0.008494f, -0.025735f, -0.041885f, -0.054703f, -0.062996f, -0.068182f, -0.073039f, -0.077308f, -0.077697f, -0.073146f, -0.066479f, -0.060233f, -0.054842f, -0.051364f, -0.051522f, -0.054305f, -0.056526f, -0.056981f, -0.056335f, -0.053803f, -0.048110f, -0.040567f, -0.033134f, -0.025166f, -0.015716f, -0.006373f, 0.001714f, 0.010176f, 0.019674f, 0.028014f, 0.034461f, 0.040938f, 0.047298f, 0.051293f, 0.053861f, 0.057721f, 0.061503f, 0.062963f, 0.065308f, 0.071389f, 0.076861f, 0.080196f, 0.090996f, 0.112659f, 0.126656f, 0.115757f, 0.095245f}, - { 0.009108f, 0.000638f, -0.006579f, -0.001811f, 0.025320f, 0.072975f, 0.099878f, 0.046177f, -0.078173f, -0.161617f, -0.109552f, 0.025830f, 0.103052f, 0.069323f, 0.005915f, -0.007950f, 0.006548f, -0.003625f, -0.029014f, -0.026490f, 0.001964f, 0.017075f, 0.008856f, 0.005898f, 0.023342f, 0.040994f, 0.037654f, 0.018706f, 0.001195f, -0.008790f, -0.013986f, -0.014099f, -0.006255f, 0.008494f, 0.025735f, 0.041885f, 0.054703f, 0.062996f, 0.068182f, 0.073039f, 0.077308f, 0.077697f, 0.073146f, 0.066479f, 0.060233f, 0.054842f, 0.051364f, 0.051522f, 0.054305f, 0.056526f, 0.056981f, 0.056335f, 0.053803f, 0.048110f, 0.040567f, 0.033134f, 0.025166f, 0.015716f, 0.006373f, -0.001714f, -0.010176f, -0.019674f, -0.028014f, -0.034461f, -0.040938f, -0.047298f, -0.051293f, -0.053861f, -0.057721f, -0.061503f, -0.062963f, -0.065308f, -0.071389f, -0.076861f, -0.080196f, -0.090996f, -0.112659f, -0.126656f, -0.115757f, -0.095245f} - }, - { - { -0.036299f, -0.021576f, 0.008339f, 0.022024f, -0.006026f, -0.023441f, 0.054545f, 0.203109f, 0.258935f, 0.083497f, -0.260111f, -0.516144f, -0.440053f, -0.037701f, 0.381792f, 0.458565f, 0.145761f, -0.228806f, -0.323180f, -0.139235f, 0.059116f, 0.103770f, 0.056741f, 0.022598f, -0.002741f, -0.054614f, -0.101353f, -0.098354f, -0.066298f, -0.053021f, -0.063515f, -0.072217f, -0.068674f, -0.055829f, -0.030066f, 0.010072f, 0.053291f, 0.089027f, 0.117100f, 0.138411f, 0.151225f, 0.158410f, 0.164831f, 0.168991f, 0.167807f, 0.164211f, 0.160954f, 0.154801f, 0.144154f, 0.132890f, 0.121469f, 0.104824f, 0.081993f, 0.056942f, 0.029818f, -0.001262f, -0.032295f, -0.058604f, -0.083127f, -0.109320f, -0.133549f, -0.153530f, -0.173701f, -0.194504f, -0.209278f, -0.217046f, -0.222920f, -0.223700f, -0.211596f, -0.190929f, -0.169788f, -0.141148f, -0.097122f, -0.049726f, -0.007241f, 0.050044f, 0.129214f, 0.183903f, 0.170356f, 0.125994f}, - { 0.036299f, 0.021576f, -0.008339f, -0.022024f, 0.006026f, 0.023441f, -0.054545f, -0.203109f, -0.258935f, -0.083497f, 0.260111f, 0.516144f, 0.440053f, 0.037701f, -0.381792f, -0.458565f, -0.145761f, 0.228806f, 0.323180f, 0.139235f, -0.059116f, -0.103770f, -0.056741f, -0.022598f, 0.002741f, 0.054614f, 0.101353f, 0.098354f, 0.066298f, 0.053021f, 0.063515f, 0.072217f, 0.068674f, 0.055829f, 0.030066f, -0.010072f, -0.053291f, -0.089027f, -0.117100f, -0.138411f, -0.151225f, -0.158410f, -0.164831f, -0.168991f, -0.167807f, -0.164211f, -0.160954f, -0.154801f, -0.144154f, -0.132890f, -0.121469f, -0.104824f, -0.081993f, -0.056942f, -0.029818f, 0.001262f, 0.032295f, 0.058604f, 0.083127f, 0.109320f, 0.133549f, 0.153530f, 0.173701f, 0.194504f, 0.209278f, 0.217046f, 0.222920f, 0.223700f, 0.211596f, 0.190929f, 0.169788f, 0.141148f, 0.097122f, 0.049726f, 0.007241f, -0.050044f, -0.129214f, -0.183903f, -0.170356f, -0.125994f} - }, - { - { -0.025047f, -0.028754f, -0.028569f, -0.015495f, 0.010196f, 0.035640f, 0.044337f, 0.024249f, -0.028081f, -0.094389f, -0.127559f, -0.087289f, 0.004235f, 0.069146f, 0.055857f, -0.007075f, -0.056597f, -0.069039f, -0.062730f, -0.050133f, -0.024468f, 0.012365f, 0.041470f, 0.052445f, 0.056366f, 0.065583f, 0.073587f, 0.063210f, 0.028539f, -0.017899f, -0.057371f, -0.079077f, -0.082830f, -0.074407f, -0.062370f, -0.055041f, -0.054380f, -0.054159f, -0.048181f, -0.037707f, -0.027394f, -0.018485f, -0.010478f, -0.004506f, -0.000331f, 0.005219f, 0.013155f, 0.020828f, 0.027469f, 0.034894f, 0.041923f, 0.045338f, 0.046128f, 0.047149f, 0.046350f, 0.040257f, 0.030844f, 0.020980f, 0.008220f, -0.009083f, -0.026461f, -0.041430f, -0.058137f, -0.077722f, -0.094897f, -0.109097f, -0.126050f, -0.144888f, -0.158763f, -0.169239f, -0.182316f, -0.191952f, -0.188522f, -0.178697f, -0.171250f, -0.150620f, -0.097096f, -0.027594f, 0.019215f, 0.033651f}, - { -0.025047f, -0.028754f, -0.028569f, -0.015495f, 0.010196f, 0.035640f, 0.044337f, 0.024249f, -0.028081f, -0.094389f, -0.127559f, -0.087289f, 0.004235f, 0.069146f, 0.055857f, -0.007075f, -0.056597f, -0.069039f, -0.062730f, -0.050133f, -0.024468f, 0.012365f, 0.041470f, 0.052445f, 0.056366f, 0.065583f, 0.073587f, 0.063210f, 0.028539f, -0.017899f, -0.057371f, -0.079077f, -0.082830f, -0.074407f, -0.062370f, -0.055041f, -0.054380f, -0.054159f, -0.048181f, -0.037707f, -0.027394f, -0.018485f, -0.010478f, -0.004506f, -0.000331f, 0.005219f, 0.013155f, 0.020828f, 0.027469f, 0.034894f, 0.041923f, 0.045338f, 0.046128f, 0.047149f, 0.046350f, 0.040257f, 0.030844f, 0.020980f, 0.008220f, -0.009083f, -0.026461f, -0.041430f, -0.058137f, -0.077722f, -0.094897f, -0.109097f, -0.126050f, -0.144888f, -0.158763f, -0.169239f, -0.182316f, -0.191952f, -0.188522f, -0.178697f, -0.171250f, -0.150620f, -0.097096f, -0.027594f, 0.019215f, 0.033651f} - }, - { - { -0.033005f, -0.036257f, -0.019445f, 0.020321f, 0.057860f, 0.074577f, 0.063661f, 0.007800f, -0.096480f, -0.187851f, -0.173226f, -0.040226f, 0.105389f, 0.146569f, 0.072525f, -0.031645f, -0.081998f, -0.057456f, 0.006102f, 0.049635f, 0.032558f, -0.032467f, -0.090130f, -0.098890f, -0.066699f, -0.025791f, 0.006963f, 0.032157f, 0.050494f, 0.061958f, 0.071686f, 0.082610f, 0.088992f, 0.085509f, 0.075402f, 0.063868f, 0.050996f, 0.035750f, 0.020313f, 0.007358f, -0.002044f, -0.007197f, -0.008819f, -0.010228f, -0.013890f, -0.019307f, -0.026762f, -0.038606f, -0.054410f, -0.070003f, -0.083022f, -0.094042f, -0.102024f, -0.104979f, -0.104775f, -0.105066f, -0.105910f, -0.106145f, -0.107843f, -0.112681f, -0.118356f, -0.123577f, -0.130694f, -0.139213f, -0.144218f, -0.144444f, -0.143029f, -0.138673f, -0.126828f, -0.109819f, -0.093429f, -0.075360f, -0.051148f, -0.026508f, -0.006566f, 0.019079f, 0.058133f, 0.091618f, 0.096195f, 0.083166f}, - { -0.033005f, -0.036257f, -0.019445f, 0.020321f, 0.057860f, 0.074577f, 0.063661f, 0.007800f, -0.096480f, -0.187851f, -0.173226f, -0.040226f, 0.105389f, 0.146569f, 0.072525f, -0.031645f, -0.081998f, -0.057456f, 0.006102f, 0.049635f, 0.032558f, -0.032467f, -0.090130f, -0.098890f, -0.066699f, -0.025791f, 0.006963f, 0.032157f, 0.050494f, 0.061958f, 0.071686f, 0.082610f, 0.088992f, 0.085509f, 0.075402f, 0.063868f, 0.050996f, 0.035750f, 0.020313f, 0.007358f, -0.002044f, -0.007197f, -0.008819f, -0.010228f, -0.013890f, -0.019307f, -0.026762f, -0.038606f, -0.054410f, -0.070003f, -0.083022f, -0.094042f, -0.102024f, -0.104979f, -0.104775f, -0.105066f, -0.105910f, -0.106145f, -0.107843f, -0.112681f, -0.118356f, -0.123577f, -0.130694f, -0.139213f, -0.144218f, -0.144444f, -0.143029f, -0.138673f, -0.126828f, -0.109819f, -0.093429f, -0.075360f, -0.051148f, -0.026508f, -0.006566f, 0.019079f, 0.058133f, 0.091618f, 0.096195f, 0.083166f} - }, - { - { 0.001244f, -0.011714f, -0.018975f, -0.019388f, -0.028242f, -0.031454f, 0.013230f, 0.095142f, 0.112352f, -0.016836f, -0.210437f, -0.270105f, -0.109627f, 0.120234f, 0.193261f, 0.063294f, -0.105565f, -0.151978f, -0.085969f, -0.022310f, -0.012774f, -0.007520f, 0.041667f, 0.109371f, 0.143796f, 0.138462f, 0.124355f, 0.115741f, 0.097689f, 0.058191f, 0.004528f, -0.051150f, -0.101799f, -0.140639f, -0.162437f, -0.170701f, -0.172906f, -0.170378f, -0.161243f, -0.148300f, -0.135406f, -0.121911f, -0.108101f, -0.099258f, -0.097962f, -0.099850f, -0.101590f, -0.104536f, -0.107601f, -0.106247f, -0.100485f, -0.094225f, -0.086781f, -0.074970f, -0.061475f, -0.051088f, -0.042559f, -0.033713f, -0.028432f, -0.029468f, -0.032466f, -0.035073f, -0.041591f, -0.052187f, -0.060305f, -0.065417f, -0.073316f, -0.081610f, -0.082466f, -0.078897f, -0.077999f, -0.072670f, -0.053724f, -0.030703f, -0.011855f, 0.021724f, 0.084005f, 0.142124f, 0.153989f, 0.135267f}, - { 0.001244f, -0.011714f, -0.018975f, -0.019388f, -0.028242f, -0.031454f, 0.013230f, 0.095142f, 0.112352f, -0.016836f, -0.210437f, -0.270105f, -0.109627f, 0.120234f, 0.193261f, 0.063294f, -0.105565f, -0.151978f, -0.085969f, -0.022310f, -0.012774f, -0.007520f, 0.041667f, 0.109371f, 0.143796f, 0.138462f, 0.124355f, 0.115741f, 0.097689f, 0.058191f, 0.004528f, -0.051150f, -0.101799f, -0.140639f, -0.162437f, -0.170701f, -0.172906f, -0.170378f, -0.161243f, -0.148300f, -0.135406f, -0.121911f, -0.108101f, -0.099258f, -0.097962f, -0.099850f, -0.101590f, -0.104536f, -0.107601f, -0.106247f, -0.100485f, -0.094225f, -0.086781f, -0.074970f, -0.061475f, -0.051088f, -0.042559f, -0.033713f, -0.028432f, -0.029468f, -0.032466f, -0.035073f, -0.041591f, -0.052187f, -0.060305f, -0.065417f, -0.073316f, -0.081610f, -0.082466f, -0.078897f, -0.077999f, -0.072670f, -0.053724f, -0.030703f, -0.011855f, 0.021724f, 0.084005f, 0.142124f, 0.153989f, 0.135267f} - }, - { - { -0.013036f, -0.012005f, -0.010946f, -0.010336f, -0.011806f, -0.018223f, -0.025154f, -0.017942f, 0.005606f, 0.011671f, -0.037994f, -0.113752f, -0.116094f, 0.005214f, 0.150250f, 0.156107f, -0.002268f, -0.162837f, -0.163654f, -0.027056f, 0.091762f, 0.097477f, 0.030660f, -0.026612f, -0.045438f, -0.038626f, -0.014564f, 0.023807f, 0.062441f, 0.085957f, 0.093102f, 0.090477f, 0.081990f, 0.071815f, 0.066281f, 0.065817f, 0.062838f, 0.051246f, 0.031641f, 0.006718f, -0.021218f, -0.047928f, -0.068727f, -0.082506f, -0.090476f, -0.092952f, -0.090869f, -0.087450f, -0.085084f, -0.083439f, -0.082526f, -0.083859f, -0.087311f, -0.090779f, -0.093524f, -0.095999f, -0.097064f, -0.095528f, -0.093135f, -0.092047f, -0.091608f, -0.091215f, -0.092962f, -0.097813f, -0.103266f, -0.108015f, -0.113964f, -0.121091f, -0.126325f, -0.129603f, -0.133962f, -0.138229f, -0.137962f, -0.134611f, -0.133515f, -0.130971f, -0.114570f, -0.080508f, -0.041940f, -0.017332f}, - { -0.013036f, -0.012005f, -0.010946f, -0.010336f, -0.011806f, -0.018223f, -0.025154f, -0.017942f, 0.005606f, 0.011671f, -0.037994f, -0.113752f, -0.116094f, 0.005214f, 0.150250f, 0.156107f, -0.002268f, -0.162837f, -0.163654f, -0.027056f, 0.091762f, 0.097477f, 0.030660f, -0.026612f, -0.045438f, -0.038626f, -0.014564f, 0.023807f, 0.062441f, 0.085957f, 0.093102f, 0.090477f, 0.081990f, 0.071815f, 0.066281f, 0.065817f, 0.062838f, 0.051246f, 0.031641f, 0.006718f, -0.021218f, -0.047928f, -0.068727f, -0.082506f, -0.090476f, -0.092952f, -0.090869f, -0.087450f, -0.085084f, -0.083439f, -0.082526f, -0.083859f, -0.087311f, -0.090779f, -0.093524f, -0.095999f, -0.097064f, -0.095528f, -0.093135f, -0.092047f, -0.091608f, -0.091215f, -0.092962f, -0.097813f, -0.103266f, -0.108015f, -0.113964f, -0.121091f, -0.126325f, -0.129603f, -0.133962f, -0.138229f, -0.137962f, -0.134611f, -0.133515f, -0.130971f, -0.114570f, -0.080508f, -0.041940f, -0.017332f} - } -}; -const float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][BINAURAL_CHANNELS][80]={ - { - { -0.177326f, -0.487059f, -0.688283f, -0.768556f, -0.752979f, -0.684514f, -0.599780f, -0.496150f, -0.338007f, -0.118021f, 0.117601f, 0.327026f, 0.493513f, 0.540869f, 0.331702f, -0.114816f, -0.473318f, -0.386772f, 0.079465f, 0.440207f, 0.323651f, -0.145870f, -0.579736f, -0.778395f, -0.813983f, -0.787794f, -0.702264f, -0.551636f, -0.383614f, -0.237862f, -0.107087f, 0.020217f, 0.132968f, 0.222907f, 0.297407f, 0.362059f, 0.415348f, 0.458635f, 0.495122f, 0.524689f, 0.548673f, 0.570929f, 0.590645f, 0.604357f, 0.614127f, 0.623417f, 0.629725f, 0.630908f, 0.630925f, 0.631539f, 0.628735f, 0.622443f, 0.617331f, 0.612036f, 0.601631f, 0.589119f, 0.579764f, 0.569621f, 0.554496f, 0.540418f, 0.531134f, 0.519368f, 0.502799f, 0.490106f, 0.481669f, 0.467444f, 0.449557f, 0.439167f, 0.430774f, 0.412237f, 0.393245f, 0.385818f, 0.373300f, 0.343565f, 0.321957f, 0.311994f, 0.249042f, 0.099998f, -0.035738f, -0.039462f}, - { -0.177326f, -0.487059f, -0.688283f, -0.768556f, -0.752979f, -0.684514f, -0.599780f, -0.496150f, -0.338007f, -0.118021f, 0.117601f, 0.327026f, 0.493513f, 0.540869f, 0.331702f, -0.114816f, -0.473318f, -0.386772f, 0.079465f, 0.440207f, 0.323651f, -0.145870f, -0.579736f, -0.778395f, -0.813983f, -0.787794f, -0.702264f, -0.551636f, -0.383614f, -0.237862f, -0.107087f, 0.020217f, 0.132968f, 0.222907f, 0.297407f, 0.362059f, 0.415348f, 0.458635f, 0.495122f, 0.524689f, 0.548673f, 0.570929f, 0.590645f, 0.604357f, 0.614127f, 0.623417f, 0.629725f, 0.630908f, 0.630925f, 0.631539f, 0.628735f, 0.622443f, 0.617331f, 0.612036f, 0.601631f, 0.589119f, 0.579764f, 0.569621f, 0.554496f, 0.540418f, 0.531134f, 0.519368f, 0.502799f, 0.490106f, 0.481669f, 0.467444f, 0.449557f, 0.439167f, 0.430774f, 0.412237f, 0.393245f, 0.385818f, 0.373300f, 0.343565f, 0.321957f, 0.311994f, 0.249042f, 0.099998f, -0.035738f, -0.039462f} - }, - { - { 0.139379f, 0.334475f, 0.302418f, -0.001740f, -0.470657f, -0.918060f, -1.205378f, -1.264950f, -1.068335f, -0.667808f, -0.206855f, 0.225808f, 0.664665f, 1.029106f, 0.958676f, 0.223895f, -0.711948f, -0.958987f, -0.218731f, 0.776762f, 1.088344f, 0.584741f, -0.131994f, -0.574116f, -0.760032f, -0.866210f, -0.902940f, -0.825573f, -0.695964f, -0.595691f, -0.515122f, -0.414746f, -0.305467f, -0.213289f, -0.131852f, -0.047320f, 0.035561f, 0.111395f, 0.184753f, 0.256163f, 0.320948f, 0.379770f, 0.434479f, 0.481617f, 0.520017f, 0.553844f, 0.583536f, 0.605648f, 0.621334f, 0.633823f, 0.642170f, 0.646572f, 0.651242f, 0.655765f, 0.655221f, 0.651172f, 0.648535f, 0.643768f, 0.631801f, 0.617925f, 0.606967f, 0.592474f, 0.571477f, 0.552782f, 0.538082f, 0.517509f, 0.492647f, 0.475480f, 0.461290f, 0.437183f, 0.413126f, 0.403158f, 0.390400f, 0.360546f, 0.340803f, 0.339290f, 0.288776f, 0.145051f, -0.000376f, -0.026236f}, - { -0.139379f, -0.334475f, -0.302418f, 0.001740f, 0.470657f, 0.918060f, 1.205378f, 1.264950f, 1.068335f, 0.667808f, 0.206855f, -0.225808f, -0.664665f, -1.029106f, -0.958676f, -0.223895f, 0.711948f, 0.958987f, 0.218731f, -0.776762f, -1.088344f, -0.584741f, 0.131994f, 0.574116f, 0.760032f, 0.866210f, 0.902940f, 0.825573f, 0.695964f, 0.595691f, 0.515122f, 0.414746f, 0.305467f, 0.213289f, 0.131852f, 0.047320f, -0.035561f, -0.111395f, -0.184753f, -0.256163f, -0.320948f, -0.379770f, -0.434479f, -0.481617f, -0.520017f, -0.553844f, -0.583536f, -0.605648f, -0.621334f, -0.633823f, -0.642170f, -0.646572f, -0.651242f, -0.655765f, -0.655221f, -0.651172f, -0.648535f, -0.643768f, -0.631801f, -0.617925f, -0.606967f, -0.592474f, -0.571477f, -0.552782f, -0.538082f, -0.517509f, -0.492647f, -0.475480f, -0.461290f, -0.437183f, -0.413126f, -0.403158f, -0.390400f, -0.360546f, -0.340803f, -0.339290f, -0.288776f, -0.145051f, 0.000376f, 0.026236f} - }, - { - { -0.017355f, -0.068585f, -0.129748f, -0.140677f, -0.067873f, 0.038579f, 0.095547f, 0.074031f, 0.011534f, -0.044693f, -0.073913f, -0.067610f, -0.018737f, 0.054581f, 0.097078f, 0.061877f, -0.025775f, -0.074615f, -0.020989f, 0.089634f, 0.140779f, 0.070434f, -0.065703f, -0.166766f, -0.192897f, -0.175608f, -0.151255f, -0.126215f, -0.098863f, -0.074963f, -0.054673f, -0.030640f, -0.004266f, 0.014389f, 0.022782f, 0.026012f, 0.024773f, 0.018634f, 0.015637f, 0.024021f, 0.040551f, 0.058741f, 0.079941f, 0.106170f, 0.132694f, 0.156946f, 0.183756f, 0.215131f, 0.246786f, 0.278634f, 0.315363f, 0.354946f, 0.390462f, 0.422391f, 0.455016f, 0.484479f, 0.504790f, 0.519338f, 0.532532f, 0.539137f, 0.534904f, 0.525663f, 0.514081f, 0.492430f, 0.458525f, 0.420763f, 0.379757f, 0.326532f, 0.263903f, 0.204445f, 0.145530f, 0.075927f, 0.005235f, -0.048914f, -0.098551f, -0.166600f, -0.231941f, -0.240292f, -0.172726f, -0.060996f}, - { -0.017355f, -0.068585f, -0.129748f, -0.140677f, -0.067873f, 0.038579f, 0.095547f, 0.074031f, 0.011534f, -0.044693f, -0.073913f, -0.067610f, -0.018737f, 0.054581f, 0.097078f, 0.061877f, -0.025775f, -0.074615f, -0.020989f, 0.089634f, 0.140779f, 0.070434f, -0.065703f, -0.166766f, -0.192897f, -0.175608f, -0.151255f, -0.126215f, -0.098863f, -0.074963f, -0.054673f, -0.030640f, -0.004266f, 0.014389f, 0.022782f, 0.026012f, 0.024773f, 0.018634f, 0.015637f, 0.024021f, 0.040551f, 0.058741f, 0.079941f, 0.106170f, 0.132694f, 0.156946f, 0.183756f, 0.215131f, 0.246786f, 0.278634f, 0.315363f, 0.354946f, 0.390462f, 0.422391f, 0.455016f, 0.484479f, 0.504790f, 0.519338f, 0.532532f, 0.539137f, 0.534904f, 0.525663f, 0.514081f, 0.492430f, 0.458525f, 0.420763f, 0.379757f, 0.326532f, 0.263903f, 0.204445f, 0.145530f, 0.075927f, 0.005235f, -0.048914f, -0.098551f, -0.166600f, -0.231941f, -0.240292f, -0.172726f, -0.060996f} - }, - { - { 0.005973f, -0.001416f, -0.045800f, -0.099150f, -0.109299f, -0.059292f, 0.001039f, 0.004764f, -0.052550f, -0.109926f, -0.118088f, -0.081582f, -0.016964f, 0.073434f, 0.150725f, 0.125706f, -0.026114f, -0.169539f, -0.128661f, 0.090155f, 0.279655f, 0.263749f, 0.075346f, -0.131939f, -0.272993f, -0.368065f, -0.444884f, -0.489466f, -0.487957f, -0.454682f, -0.405665f, -0.339390f, -0.252979f, -0.154344f, -0.052502f, 0.048489f, 0.143632f, 0.226516f, 0.295187f, 0.351028f, 0.394089f, 0.425052f, 0.447704f, 0.464623f, 0.474693f, 0.477963f, 0.477681f, 0.475121f, 0.467826f, 0.454724f, 0.437798f, 0.418152f, 0.395857f, 0.373745f, 0.355940f, 0.342815f, 0.331856f, 0.322189f, 0.313867f, 0.304823f, 0.293125f, 0.280092f, 0.267362f, 0.253770f, 0.238552f, 0.223882f, 0.210719f, 0.196308f, 0.179088f, 0.161285f, 0.143372f, 0.121745f, 0.095725f, 0.069936f, 0.044076f, 0.008055f, -0.042005f, -0.085674f, -0.088660f, -0.037890f}, - { 0.005973f, -0.001416f, -0.045800f, -0.099150f, -0.109299f, -0.059292f, 0.001039f, 0.004764f, -0.052550f, -0.109926f, -0.118088f, -0.081582f, -0.016964f, 0.073434f, 0.150725f, 0.125706f, -0.026114f, -0.169539f, -0.128661f, 0.090155f, 0.279655f, 0.263749f, 0.075346f, -0.131939f, -0.272993f, -0.368065f, -0.444884f, -0.489466f, -0.487957f, -0.454682f, -0.405665f, -0.339390f, -0.252979f, -0.154344f, -0.052502f, 0.048489f, 0.143632f, 0.226516f, 0.295187f, 0.351028f, 0.394089f, 0.425052f, 0.447704f, 0.464623f, 0.474693f, 0.477963f, 0.477681f, 0.475121f, 0.467826f, 0.454724f, 0.437798f, 0.418152f, 0.395857f, 0.373745f, 0.355940f, 0.342815f, 0.331856f, 0.322189f, 0.313867f, 0.304823f, 0.293125f, 0.280092f, 0.267362f, 0.253770f, 0.238552f, 0.223882f, 0.210719f, 0.196308f, 0.179088f, 0.161285f, 0.143372f, 0.121745f, 0.095725f, 0.069936f, 0.044076f, 0.008055f, -0.042005f, -0.085674f, -0.088660f, -0.037890f} - }, - { - { -0.004434f, -0.004101f, 0.011236f, 0.025203f, 0.019806f, 0.001597f, -0.006647f, -0.003102f, -0.018186f, -0.077431f, -0.161881f, -0.209978f, -0.155425f, 0.015003f, 0.208989f, 0.259800f, 0.084031f, -0.179896f, -0.269483f, -0.079015f, 0.215424f, 0.357678f, 0.278152f, 0.099699f, -0.058114f, -0.180673f, -0.286537f, -0.359113f, -0.378791f, -0.360714f, -0.328350f, -0.283730f, -0.223043f, -0.154424f, -0.085113f, -0.011153f, 0.069195f, 0.146411f, 0.210268f, 0.258185f, 0.290989f, 0.310397f, 0.321311f, 0.328850f, 0.333862f, 0.336132f, 0.338054f, 0.340622f, 0.340800f, 0.336748f, 0.330523f, 0.323257f, 0.313600f, 0.302440f, 0.293034f, 0.285845f, 0.278952f, 0.272797f, 0.268758f, 0.264967f, 0.259214f, 0.253039f, 0.247703f, 0.240380f, 0.229389f, 0.217820f, 0.207144f, 0.193744f, 0.176271f, 0.158660f, 0.141444f, 0.119286f, 0.091743f, 0.065323f, 0.038472f, -0.002614f, -0.061009f, -0.109488f, -0.108302f, -0.045399f}, - { 0.004434f, 0.004101f, -0.011236f, -0.025203f, -0.019806f, -0.001597f, 0.006647f, 0.003102f, 0.018186f, 0.077431f, 0.161881f, 0.209978f, 0.155425f, -0.015003f, -0.208989f, -0.259800f, -0.084031f, 0.179896f, 0.269483f, 0.079015f, -0.215424f, -0.357678f, -0.278152f, -0.099699f, 0.058114f, 0.180673f, 0.286537f, 0.359113f, 0.378791f, 0.360714f, 0.328350f, 0.283730f, 0.223043f, 0.154424f, 0.085113f, 0.011153f, -0.069195f, -0.146411f, -0.210268f, -0.258185f, -0.290989f, -0.310397f, -0.321311f, -0.328850f, -0.333862f, -0.336132f, -0.338054f, -0.340622f, -0.340800f, -0.336748f, -0.330523f, -0.323257f, -0.313600f, -0.302440f, -0.293034f, -0.285845f, -0.278952f, -0.272797f, -0.268758f, -0.264967f, -0.259214f, -0.253039f, -0.247703f, -0.240380f, -0.229389f, -0.217820f, -0.207144f, -0.193744f, -0.176271f, -0.158660f, -0.141444f, -0.119286f, -0.091743f, -0.065323f, -0.038472f, 0.002614f, 0.061009f, 0.109488f, 0.108302f, 0.045399f} - }, - { - { -0.022223f, -0.023532f, 0.026143f, 0.036395f, -0.022129f, -0.046557f, 0.045156f, 0.166015f, 0.154331f, -0.014356f, -0.190818f, -0.223106f, -0.100545f, 0.070829f, 0.171310f, 0.137761f, 0.000653f, -0.117443f, -0.095181f, 0.054848f, 0.184857f, 0.177260f, 0.071288f, -0.011410f, -0.019128f, 0.008364f, 0.032900f, 0.058999f, 0.089829f, 0.105464f, 0.095113f, 0.070357f, 0.040449f, 0.004549f, -0.032060f, -0.060672f, -0.084976f, -0.112282f, -0.135857f, -0.144728f, -0.140958f, -0.131144f, -0.113768f, -0.089047f, -0.066562f, -0.051180f, -0.036343f, -0.018844f, -0.003461f, 0.010980f, 0.031603f, 0.056462f, 0.078228f, 0.100182f, 0.129600f, 0.161531f, 0.187796f, 0.212133f, 0.238638f, 0.258971f, 0.267587f, 0.272407f, 0.276295f, 0.269169f, 0.249535f, 0.228442f, 0.204681f, 0.165734f, 0.116242f, 0.071322f, 0.024434f, -0.038282f, -0.101208f, -0.144017f, -0.186203f, -0.247657f, -0.284781f, -0.238696f, -0.131685f, -0.036438f}, - { 0.022223f, 0.023532f, -0.026143f, -0.036395f, 0.022129f, 0.046557f, -0.045156f, -0.166015f, -0.154331f, 0.014356f, 0.190818f, 0.223106f, 0.100545f, -0.070829f, -0.171310f, -0.137761f, -0.000653f, 0.117443f, 0.095181f, -0.054848f, -0.184857f, -0.177260f, -0.071288f, 0.011410f, 0.019128f, -0.008364f, -0.032900f, -0.058999f, -0.089829f, -0.105464f, -0.095113f, -0.070357f, -0.040449f, -0.004549f, 0.032060f, 0.060672f, 0.084976f, 0.112282f, 0.135857f, 0.144728f, 0.140958f, 0.131144f, 0.113768f, 0.089047f, 0.066562f, 0.051180f, 0.036343f, 0.018844f, 0.003461f, -0.010980f, -0.031603f, -0.056462f, -0.078228f, -0.100182f, -0.129600f, -0.161531f, -0.187796f, -0.212133f, -0.238638f, -0.258971f, -0.267587f, -0.272407f, -0.276295f, -0.269169f, -0.249535f, -0.228442f, -0.204681f, -0.165734f, -0.116242f, -0.071322f, -0.024434f, 0.038282f, 0.101208f, 0.144017f, 0.186203f, 0.247657f, 0.284781f, 0.238696f, 0.131685f, 0.036438f} - }, - { - { 0.003862f, -0.005550f, -0.035219f, -0.050424f, -0.039835f, -0.034124f, -0.043985f, -0.024194f, 0.069437f, 0.217796f, 0.352478f, 0.391419f, 0.253518f, -0.070759f, -0.406493f, -0.459708f, -0.129673f, 0.296657f, 0.414245f, 0.156646f, -0.158625f, -0.243467f, -0.132649f, -0.019223f, 0.029037f, 0.069156f, 0.114565f, 0.114517f, 0.063159f, 0.016167f, 0.005053f, 0.009585f, 0.010376f, 0.011826f, 0.014968f, 0.010184f, -0.002825f, -0.015268f, -0.025795f, -0.038657f, -0.052993f, -0.066906f, -0.082812f, -0.100047f, -0.112689f, -0.119957f, -0.127651f, -0.136984f, -0.143527f, -0.147285f, -0.152286f, -0.157533f, -0.158902f, -0.157091f, -0.154423f, -0.148374f, -0.136396f, -0.121265f, -0.105059f, -0.085015f, -0.060285f, -0.034399f, -0.007734f, 0.023017f, 0.056440f, 0.087696f, 0.117449f, 0.148415f, 0.176241f, 0.195804f, 0.210603f, 0.223157f, 0.225976f, 0.215951f, 0.201691f, 0.178640f, 0.121187f, 0.030102f, -0.036777f, -0.026855f}, - { 0.003862f, -0.005550f, -0.035219f, -0.050424f, -0.039835f, -0.034124f, -0.043985f, -0.024194f, 0.069437f, 0.217796f, 0.352478f, 0.391419f, 0.253518f, -0.070759f, -0.406493f, -0.459708f, -0.129673f, 0.296657f, 0.414245f, 0.156646f, -0.158625f, -0.243467f, -0.132649f, -0.019223f, 0.029037f, 0.069156f, 0.114565f, 0.114517f, 0.063159f, 0.016167f, 0.005053f, 0.009585f, 0.010376f, 0.011826f, 0.014968f, 0.010184f, -0.002825f, -0.015268f, -0.025795f, -0.038657f, -0.052993f, -0.066906f, -0.082812f, -0.100047f, -0.112689f, -0.119957f, -0.127651f, -0.136984f, -0.143527f, -0.147285f, -0.152286f, -0.157533f, -0.158902f, -0.157091f, -0.154423f, -0.148374f, -0.136396f, -0.121265f, -0.105059f, -0.085015f, -0.060285f, -0.034399f, -0.007734f, 0.023017f, 0.056440f, 0.087696f, 0.117449f, 0.148415f, 0.176241f, 0.195804f, 0.210603f, 0.223157f, 0.225976f, 0.215951f, 0.201691f, 0.178640f, 0.121187f, 0.030102f, -0.036777f, -0.026855f} - }, - { - { -0.035270f, -0.081929f, -0.072328f, -0.003387f, 0.102081f, 0.191567f, 0.193107f, 0.075847f, -0.091649f, -0.185816f, -0.151954f, -0.053283f, 0.018945f, 0.043102f, 0.046927f, 0.035757f, -0.003446f, -0.048321f, -0.051509f, -0.007303f, 0.037527f, 0.047720f, 0.038011f, 0.037503f, 0.047149f, 0.048355f, 0.032027f, 0.002560f, -0.034692f, -0.076149f, -0.115107f, -0.143065f, -0.156385f, -0.159333f, -0.159978f, -0.162529f, -0.164023f, -0.159091f, -0.145532f, -0.123554f, -0.093928f, -0.060439f, -0.029679f, -0.004678f, 0.017022f, 0.036928f, 0.053244f, 0.066453f, 0.079933f, 0.093680f, 0.104712f, 0.113731f, 0.123664f, 0.133021f, 0.138757f, 0.142838f, 0.147926f, 0.150992f, 0.149042f, 0.145156f, 0.141793f, 0.135931f, 0.127005f, 0.120124f, 0.116637f, 0.112583f, 0.108976f, 0.110492f, 0.114119f, 0.114315f, 0.115877f, 0.124115f, 0.130358f, 0.128184f, 0.129646f, 0.137654f, 0.122241f, 0.064040f, 0.002466f, -0.010057f}, - { -0.035270f, -0.081929f, -0.072328f, -0.003387f, 0.102081f, 0.191567f, 0.193107f, 0.075847f, -0.091649f, -0.185816f, -0.151954f, -0.053283f, 0.018945f, 0.043102f, 0.046927f, 0.035757f, -0.003446f, -0.048321f, -0.051509f, -0.007303f, 0.037527f, 0.047720f, 0.038011f, 0.037503f, 0.047149f, 0.048355f, 0.032027f, 0.002560f, -0.034692f, -0.076149f, -0.115107f, -0.143065f, -0.156385f, -0.159333f, -0.159978f, -0.162529f, -0.164023f, -0.159091f, -0.145532f, -0.123554f, -0.093928f, -0.060439f, -0.029679f, -0.004678f, 0.017022f, 0.036928f, 0.053244f, 0.066453f, 0.079933f, 0.093680f, 0.104712f, 0.113731f, 0.123664f, 0.133021f, 0.138757f, 0.142838f, 0.147926f, 0.150992f, 0.149042f, 0.145156f, 0.141793f, 0.135931f, 0.127005f, 0.120124f, 0.116637f, 0.112583f, 0.108976f, 0.110492f, 0.114119f, 0.114315f, 0.115877f, 0.124115f, 0.130358f, 0.128184f, 0.129646f, 0.137654f, 0.122241f, 0.064040f, 0.002466f, -0.010057f} - }, - { - { 0.042625f, 0.061776f, -0.027586f, -0.143182f, -0.223451f, -0.283569f, -0.301376f, -0.181308f, 0.100838f, 0.422023f, 0.640790f, 0.689329f, 0.491852f, -0.012830f, -0.619485f, -0.827479f, -0.346691f, 0.439982f, 0.806159f, 0.485676f, -0.097985f, -0.426002f, -0.432106f, -0.359643f, -0.337508f, -0.308023f, -0.233735f, -0.160655f, -0.109291f, -0.046792f, 0.036163f, 0.109928f, 0.161438f, 0.204028f, 0.240207f, 0.258404f, 0.257802f, 0.246553f, 0.225745f, 0.195126f, 0.162764f, 0.135196f, 0.109277f, 0.081673f, 0.055076f, 0.030942f, 0.007082f, -0.015502f, -0.032778f, -0.044893f, -0.055922f, -0.067781f, -0.079963f, -0.092783f, -0.106544f, -0.120012f, -0.132352f, -0.144019f, -0.154792f, -0.163557f, -0.170153f, -0.175219f, -0.178738f, -0.180172f, -0.179230f, -0.175923f, -0.170545f, -0.163212f, -0.153389f, -0.141450f, -0.129644f, -0.118625f, -0.105868f, -0.091562f, -0.079757f, -0.066681f, -0.038738f, 0.003573f, 0.031128f, 0.017989f}, - { 0.042625f, 0.061776f, -0.027586f, -0.143182f, -0.223451f, -0.283569f, -0.301376f, -0.181308f, 0.100838f, 0.422023f, 0.640790f, 0.689329f, 0.491852f, -0.012830f, -0.619485f, -0.827479f, -0.346691f, 0.439982f, 0.806159f, 0.485676f, -0.097985f, -0.426002f, -0.432106f, -0.359643f, -0.337508f, -0.308023f, -0.233735f, -0.160655f, -0.109291f, -0.046792f, 0.036163f, 0.109928f, 0.161438f, 0.204028f, 0.240207f, 0.258404f, 0.257802f, 0.246553f, 0.225745f, 0.195126f, 0.162764f, 0.135196f, 0.109277f, 0.081673f, 0.055076f, 0.030942f, 0.007082f, -0.015502f, -0.032778f, -0.044893f, -0.055922f, -0.067781f, -0.079963f, -0.092783f, -0.106544f, -0.120012f, -0.132352f, -0.144019f, -0.154792f, -0.163557f, -0.170153f, -0.175219f, -0.178738f, -0.180172f, -0.179230f, -0.175923f, -0.170545f, -0.163212f, -0.153389f, -0.141450f, -0.129644f, -0.118625f, -0.105868f, -0.091562f, -0.079757f, -0.066681f, -0.038738f, 0.003573f, 0.031128f, 0.017989f} - }, - { - { 0.004986f, 0.021455f, 0.046135f, 0.071785f, 0.092466f, 0.080954f, -0.003158f, -0.145617f, -0.276633f, -0.362866f, -0.395355f, -0.264738f, 0.149265f, 0.651373f, 0.736434f, 0.177675f, -0.547090f, -0.726833f, -0.253845f, 0.306337f, 0.459460f, 0.280374f, 0.109965f, 0.067554f, 0.043904f, -0.021849f, -0.075554f, -0.085260f, -0.084048f, -0.090241f, -0.083218f, -0.055049f, -0.024749f, -0.004212f, 0.011330f, 0.024407f, 0.032551f, 0.037896f, 0.043132f, 0.045153f, 0.042454f, 0.040083f, 0.040807f, 0.040467f, 0.036682f, 0.033444f, 0.033537f, 0.034430f, 0.034508f, 0.036228f, 0.040565f, 0.044452f, 0.045834f, 0.046017f, 0.045496f, 0.042430f, 0.036603f, 0.030268f, 0.024047f, 0.016450f, 0.007946f, 0.000698f, -0.005855f, -0.013972f, -0.022632f, -0.029204f, -0.034902f, -0.042227f, -0.049092f, -0.052708f, -0.056008f, -0.061987f, -0.066609f, -0.066985f, -0.069150f, -0.074874f, -0.070084f, -0.044292f, -0.013242f, -0.000130f}, - { -0.004986f, -0.021455f, -0.046135f, -0.071785f, -0.092466f, -0.080954f, 0.003158f, 0.145617f, 0.276633f, 0.362866f, 0.395355f, 0.264738f, -0.149265f, -0.651373f, -0.736434f, -0.177675f, 0.547090f, 0.726833f, 0.253845f, -0.306337f, -0.459460f, -0.280374f, -0.109965f, -0.067554f, -0.043904f, 0.021849f, 0.075554f, 0.085260f, 0.084048f, 0.090241f, 0.083218f, 0.055049f, 0.024749f, 0.004212f, -0.011330f, -0.024407f, -0.032551f, -0.037896f, -0.043132f, -0.045153f, -0.042454f, -0.040083f, -0.040807f, -0.040467f, -0.036682f, -0.033444f, -0.033537f, -0.034430f, -0.034508f, -0.036228f, -0.040565f, -0.044452f, -0.045834f, -0.046017f, -0.045496f, -0.042430f, -0.036603f, -0.030268f, -0.024047f, -0.016450f, -0.007946f, -0.000698f, 0.005855f, 0.013972f, 0.022632f, 0.029204f, 0.034902f, 0.042227f, 0.049092f, 0.052708f, 0.056008f, 0.061987f, 0.066609f, 0.066985f, 0.069150f, 0.074874f, 0.070084f, 0.044292f, 0.013242f, 0.000130f} - }, - { - { 0.003402f, 0.004407f, -0.006051f, -0.025050f, -0.041008f, -0.025966f, 0.043136f, 0.128240f, 0.134022f, 0.020795f, -0.115019f, -0.140061f, -0.049669f, 0.036681f, 0.041074f, 0.008186f, 0.004784f, 0.019218f, 0.006249f, -0.026881f, -0.037864f, -0.021977f, -0.013202f, -0.024484f, -0.031445f, -0.015937f, 0.008115f, 0.019221f, 0.014829f, 0.004287f, -0.008269f, -0.023585f, -0.039009f, -0.049334f, -0.052310f, -0.048822f, -0.040627f, -0.030481f, -0.021172f, -0.012355f, -0.001360f, 0.011724f, 0.023165f, 0.030522f, 0.034690f, 0.036621f, 0.036317f, 0.035645f, 0.037782f, 0.043224f, 0.050040f, 0.057691f, 0.066656f, 0.075380f, 0.081835f, 0.086743f, 0.091441f, 0.094789f, 0.095756f, 0.095987f, 0.096430f, 0.095207f, 0.091675f, 0.088019f, 0.084731f, 0.079935f, 0.074369f, 0.070712f, 0.067983f, 0.063773f, 0.060332f, 0.060178f, 0.059510f, 0.055794f, 0.055006f, 0.058300f, 0.051108f, 0.024257f, -0.003223f, -0.006390f}, - { -0.003402f, -0.004407f, 0.006051f, 0.025050f, 0.041008f, 0.025966f, -0.043136f, -0.128240f, -0.134022f, -0.020795f, 0.115019f, 0.140061f, 0.049669f, -0.036681f, -0.041074f, -0.008186f, -0.004784f, -0.019218f, -0.006249f, 0.026881f, 0.037864f, 0.021977f, 0.013202f, 0.024484f, 0.031445f, 0.015937f, -0.008115f, -0.019221f, -0.014829f, -0.004287f, 0.008269f, 0.023585f, 0.039009f, 0.049334f, 0.052310f, 0.048822f, 0.040627f, 0.030481f, 0.021172f, 0.012355f, 0.001360f, -0.011724f, -0.023165f, -0.030522f, -0.034690f, -0.036621f, -0.036317f, -0.035645f, -0.037782f, -0.043224f, -0.050040f, -0.057691f, -0.066656f, -0.075380f, -0.081835f, -0.086743f, -0.091441f, -0.094789f, -0.095756f, -0.095987f, -0.096430f, -0.095207f, -0.091675f, -0.088019f, -0.084731f, -0.079935f, -0.074369f, -0.070712f, -0.067983f, -0.063773f, -0.060332f, -0.060178f, -0.059510f, -0.055794f, -0.055006f, -0.058300f, -0.051108f, -0.024257f, 0.003223f, 0.006390f} - }, - { - { 0.011580f, 0.033110f, 0.035997f, 0.009825f, -0.002131f, 0.048826f, 0.111220f, 0.054933f, -0.161075f, -0.387225f, -0.394599f, -0.096964f, 0.326957f, 0.540354f, 0.341380f, -0.107676f, -0.401640f, -0.303987f, 0.014646f, 0.211430f, 0.166588f, 0.034676f, -0.031854f, -0.045160f, -0.063992f, -0.070171f, -0.028788f, 0.028095f, 0.049715f, 0.042124f, 0.043372f, 0.063906f, 0.090684f, 0.118564f, 0.146170f, 0.162760f, 0.160684f, 0.145656f, 0.124864f, 0.099606f, 0.072825f, 0.049131f, 0.026964f, 0.002608f, -0.021547f, -0.042454f, -0.063121f, -0.085674f, -0.106502f, -0.124513f, -0.144021f, -0.165318f, -0.183168f, -0.196174f, -0.206536f, -0.211896f, -0.208932f, -0.201414f, -0.193839f, -0.183228f, -0.166803f, -0.148575f, -0.129851f, -0.105037f, -0.073501f, -0.041507f, -0.008652f, 0.030592f, 0.071399f, 0.104577f, 0.134417f, 0.167669f, 0.193709f, 0.202800f, 0.208008f, 0.214079f, 0.187614f, 0.107244f, 0.021441f, -0.005911f}, - { -0.011580f, -0.033110f, -0.035997f, -0.009825f, 0.002131f, -0.048826f, -0.111220f, -0.054933f, 0.161075f, 0.387225f, 0.394599f, 0.096964f, -0.326957f, -0.540354f, -0.341380f, 0.107676f, 0.401640f, 0.303987f, -0.014646f, -0.211430f, -0.166588f, -0.034676f, 0.031854f, 0.045160f, 0.063992f, 0.070171f, 0.028788f, -0.028095f, -0.049715f, -0.042124f, -0.043372f, -0.063906f, -0.090684f, -0.118564f, -0.146170f, -0.162760f, -0.160684f, -0.145656f, -0.124864f, -0.099606f, -0.072825f, -0.049131f, -0.026964f, -0.002608f, 0.021547f, 0.042454f, 0.063121f, 0.085674f, 0.106502f, 0.124513f, 0.144021f, 0.165318f, 0.183168f, 0.196174f, 0.206536f, 0.211896f, 0.208932f, 0.201414f, 0.193839f, 0.183228f, 0.166803f, 0.148575f, 0.129851f, 0.105037f, 0.073501f, 0.041507f, 0.008652f, -0.030592f, -0.071399f, -0.104577f, -0.134417f, -0.167669f, -0.193709f, -0.202800f, -0.208008f, -0.214079f, -0.187614f, -0.107244f, -0.021441f, 0.005911f} - }, - { - { 0.000353f, 0.004850f, 0.016938f, 0.030564f, 0.032073f, 0.012264f, -0.025611f, -0.068068f, -0.092183f, -0.069650f, 0.005117f, 0.085764f, 0.102915f, 0.040391f, -0.040399f, -0.070602f, -0.045658f, -0.007020f, 0.021199f, 0.044834f, 0.064788f, 0.066750f, 0.047115f, 0.022488f, 0.005813f, -0.010554f, -0.039993f, -0.079586f, -0.110633f, -0.117382f, -0.099825f, -0.069651f, -0.039484f, -0.017639f, -0.007327f, -0.005072f, -0.002356f, 0.005931f, 0.016176f, 0.022381f, 0.023972f, 0.023436f, 0.021218f, 0.017720f, 0.015438f, 0.014768f, 0.012536f, 0.007496f, 0.001618f, -0.005392f, -0.015987f, -0.028902f, -0.040848f, -0.053077f, -0.068452f, -0.084551f, -0.097679f, -0.109499f, -0.121805f, -0.130797f, -0.134202f, -0.136272f, -0.138859f, -0.137270f, -0.130628f, -0.124399f, -0.118371f, -0.106102f, -0.088590f, -0.072164f, -0.053226f, -0.024390f, 0.007484f, 0.032334f, 0.059271f, 0.098873f, 0.130378f, 0.121254f, 0.074924f, 0.023150f}, - { 0.000353f, 0.004850f, 0.016938f, 0.030564f, 0.032073f, 0.012264f, -0.025611f, -0.068068f, -0.092183f, -0.069650f, 0.005117f, 0.085764f, 0.102915f, 0.040391f, -0.040399f, -0.070602f, -0.045658f, -0.007020f, 0.021199f, 0.044834f, 0.064788f, 0.066750f, 0.047115f, 0.022488f, 0.005813f, -0.010554f, -0.039993f, -0.079586f, -0.110633f, -0.117382f, -0.099825f, -0.069651f, -0.039484f, -0.017639f, -0.007327f, -0.005072f, -0.002356f, 0.005931f, 0.016176f, 0.022381f, 0.023972f, 0.023436f, 0.021218f, 0.017720f, 0.015438f, 0.014768f, 0.012536f, 0.007496f, 0.001618f, -0.005392f, -0.015987f, -0.028902f, -0.040848f, -0.053077f, -0.068452f, -0.084551f, -0.097679f, -0.109499f, -0.121805f, -0.130797f, -0.134202f, -0.136272f, -0.138859f, -0.137270f, -0.130628f, -0.124399f, -0.118371f, -0.106102f, -0.088590f, -0.072164f, -0.053226f, -0.024390f, 0.007484f, 0.032334f, 0.059271f, 0.098873f, 0.130378f, 0.121254f, 0.074924f, 0.023150f} - }, - { - { 0.003395f, 0.020426f, 0.045976f, 0.052329f, 0.026661f, -0.019555f, -0.077123f, -0.131965f, -0.135946f, -0.043667f, 0.104469f, 0.189095f, 0.135481f, -0.001437f, -0.101563f, -0.101652f, -0.032058f, 0.036129f, 0.050140f, 0.004006f, -0.059414f, -0.081736f, -0.043298f, 0.021078f, 0.066283f, 0.080513f, 0.077331f, 0.066832f, 0.051569f, 0.035939f, 0.022351f, 0.005726f, -0.017489f, -0.041778f, -0.060670f, -0.074727f, -0.086452f, -0.094598f, -0.097466f, -0.096127f, -0.092430f, -0.088340f, -0.086838f, -0.089337f, -0.093915f, -0.098990f, -0.105183f, -0.111202f, -0.112934f, -0.108926f, -0.101596f, -0.092150f, -0.080152f, -0.067970f, -0.059163f, -0.053214f, -0.047722f, -0.043425f, -0.041320f, -0.038708f, -0.033546f, -0.027639f, -0.020974f, -0.009681f, 0.006590f, 0.023443f, 0.040235f, 0.060007f, 0.080112f, 0.094580f, 0.105031f, 0.116178f, 0.123880f, 0.123088f, 0.120984f, 0.122633f, 0.112565f, 0.076090f, 0.030569f, 0.005103f}, - { 0.003395f, 0.020426f, 0.045976f, 0.052329f, 0.026661f, -0.019555f, -0.077123f, -0.131965f, -0.135946f, -0.043667f, 0.104469f, 0.189095f, 0.135481f, -0.001437f, -0.101563f, -0.101652f, -0.032058f, 0.036129f, 0.050140f, 0.004006f, -0.059414f, -0.081736f, -0.043298f, 0.021078f, 0.066283f, 0.080513f, 0.077331f, 0.066832f, 0.051569f, 0.035939f, 0.022351f, 0.005726f, -0.017489f, -0.041778f, -0.060670f, -0.074727f, -0.086452f, -0.094598f, -0.097466f, -0.096127f, -0.092430f, -0.088340f, -0.086838f, -0.089337f, -0.093915f, -0.098990f, -0.105183f, -0.111202f, -0.112934f, -0.108926f, -0.101596f, -0.092150f, -0.080152f, -0.067970f, -0.059163f, -0.053214f, -0.047722f, -0.043425f, -0.041320f, -0.038708f, -0.033546f, -0.027639f, -0.020974f, -0.009681f, 0.006590f, 0.023443f, 0.040235f, 0.060007f, 0.080112f, 0.094580f, 0.105031f, 0.116178f, 0.123880f, 0.123088f, 0.120984f, 0.122633f, 0.112565f, 0.076090f, 0.030569f, 0.005103f} - }, - { - { -0.008000f, -0.013983f, -0.007789f, -0.005223f, -0.001470f, 0.026111f, 0.057750f, 0.020944f, -0.107461f, -0.216369f, -0.156456f, 0.061682f, 0.235845f, 0.190009f, -0.018294f, -0.169020f, -0.135958f, -0.002906f, 0.078713f, 0.072889f, 0.055366f, 0.076663f, 0.100261f, 0.075548f, 0.012307f, -0.044797f, -0.080708f, -0.114873f, -0.158404f, -0.198177f, -0.219465f, -0.220285f, -0.203282f, -0.171611f, -0.133886f, -0.099826f, -0.070822f, -0.043728f, -0.020140f, -0.003424f, 0.007885f, 0.015626f, 0.017347f, 0.012913f, 0.008483f, 0.008293f, 0.010362f, 0.013895f, 0.021659f, 0.032566f, 0.041674f, 0.048599f, 0.056239f, 0.062372f, 0.062643f, 0.058926f, 0.054923f, 0.048525f, 0.037890f, 0.027863f, 0.021734f, 0.015808f, 0.009301f, 0.007997f, 0.012479f, 0.016621f, 0.021242f, 0.032989f, 0.048955f, 0.061284f, 0.074399f, 0.095752f, 0.116342f, 0.126272f, 0.137340f, 0.157260f, 0.157611f, 0.110681f, 0.043883f, 0.006629f}, - { -0.008000f, -0.013983f, -0.007789f, -0.005223f, -0.001470f, 0.026111f, 0.057750f, 0.020944f, -0.107461f, -0.216369f, -0.156456f, 0.061682f, 0.235845f, 0.190009f, -0.018294f, -0.169020f, -0.135958f, -0.002906f, 0.078713f, 0.072889f, 0.055366f, 0.076663f, 0.100261f, 0.075548f, 0.012307f, -0.044797f, -0.080708f, -0.114873f, -0.158404f, -0.198177f, -0.219465f, -0.220285f, -0.203282f, -0.171611f, -0.133886f, -0.099826f, -0.070822f, -0.043728f, -0.020140f, -0.003424f, 0.007885f, 0.015626f, 0.017347f, 0.012913f, 0.008483f, 0.008293f, 0.010362f, 0.013895f, 0.021659f, 0.032566f, 0.041674f, 0.048599f, 0.056239f, 0.062372f, 0.062643f, 0.058926f, 0.054923f, 0.048525f, 0.037890f, 0.027863f, 0.021734f, 0.015808f, 0.009301f, 0.007997f, 0.012479f, 0.016621f, 0.021242f, 0.032989f, 0.048955f, 0.061284f, 0.074399f, 0.095752f, 0.116342f, 0.126272f, 0.137340f, 0.157260f, 0.157611f, 0.110681f, 0.043883f, 0.006629f} - }, - { - { 0.000244f, 0.000061f, -0.001224f, -0.003636f, -0.007582f, -0.009677f, -0.002431f, 0.010807f, 0.005905f, -0.032432f, -0.065824f, -0.025045f, 0.089641f, 0.163727f, 0.085925f, -0.093404f, -0.190444f, -0.100797f, 0.073761f, 0.153524f, 0.088072f, -0.021053f, -0.069934f, -0.051675f, -0.011931f, 0.023520f, 0.050716f, 0.061297f, 0.047832f, 0.018566f, -0.012127f, -0.038159f, -0.058406f, -0.071156f, -0.079212f, -0.090778f, -0.109603f, -0.130885f, -0.148610f, -0.160134f, -0.163490f, -0.157326f, -0.144051f, -0.128082f, -0.111790f, -0.096521f, -0.084775f, -0.077767f, -0.073706f, -0.071042f, -0.070160f, -0.070401f, -0.069434f, -0.066612f, -0.063128f, -0.058957f, -0.053631f, -0.049011f, -0.047099f, -0.046826f, -0.046713f, -0.047859f, -0.050655f, -0.052377f, -0.051505f, -0.049975f, -0.048302f, -0.043964f, -0.036939f, -0.030309f, -0.023615f, -0.013271f, -0.000672f, 0.009320f, 0.019077f, 0.036301f, 0.058484f, 0.069611f, 0.056538f, 0.021593f}, - { 0.000244f, 0.000061f, -0.001224f, -0.003636f, -0.007582f, -0.009677f, -0.002431f, 0.010807f, 0.005905f, -0.032432f, -0.065824f, -0.025045f, 0.089641f, 0.163727f, 0.085925f, -0.093404f, -0.190444f, -0.100797f, 0.073761f, 0.153524f, 0.088072f, -0.021053f, -0.069934f, -0.051675f, -0.011931f, 0.023520f, 0.050716f, 0.061297f, 0.047832f, 0.018566f, -0.012127f, -0.038159f, -0.058406f, -0.071156f, -0.079212f, -0.090778f, -0.109603f, -0.130885f, -0.148610f, -0.160134f, -0.163490f, -0.157326f, -0.144051f, -0.128082f, -0.111790f, -0.096521f, -0.084775f, -0.077767f, -0.073706f, -0.071042f, -0.070160f, -0.070401f, -0.069434f, -0.066612f, -0.063128f, -0.058957f, -0.053631f, -0.049011f, -0.047099f, -0.046826f, -0.046713f, -0.047859f, -0.050655f, -0.052377f, -0.051505f, -0.049975f, -0.048302f, -0.043964f, -0.036939f, -0.030309f, -0.023615f, -0.013271f, -0.000672f, 0.009320f, 0.019077f, 0.036301f, 0.058484f, 0.069611f, 0.056538f, 0.021593f} - } -}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -const float *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]={NULL,NULL}; -#else const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; const Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]={NULL,NULL}; -#endif /********************** CRendBin_Combined_BRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_BRIR_latency_s = 0.000145834f; -#else const Word32 CRendBin_Combined_BRIR_latency_s_fx = 313176;/*Q-31*/ -#endif /* Sample Rate = 48000 */ const int16_t CRendBin_Combined_BRIR_max_num_iterations_48kHz = 22; @@ -1976,2038 +218,8 @@ const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHAN const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][22]={{{116, 118, 117, 121, 112, 119, 121, 131, 134, 131, 137, 127, 134, 135, 134, 135, 129, 139, 135, 130, 128, 240},{116, 118, 117, 121, 112, 119, 121, 131, 134, 131, 137, 127, 134, 135, 134, 135, 129, 139, 135, 130, 128, 240}},{{122, 106, 121, 114, 121, 123, 119, 126, 123, 126, 127, 130, 128, 136, 132, 131, 129, 141, 137, 131, 129, 240},{122, 106, 121, 114, 121, 123, 119, 126, 123, 126, 127, 130, 128, 136, 132, 131, 129, 141, 137, 131, 129, 240}},{{118, 104, 116, 104, 123, 123, 122, 125, 130, 128, 132, 135, 131, 132, 131, 132, 135, 137, 144, 129, 129, 240},{118, 104, 116, 104, 123, 123, 122, 125, 130, 128, 132, 135, 131, 132, 131, 132, 135, 137, 144, 129, 129, 240}},{{102, 117, 116, 121, 117, 114, 115, 125, 126, 124, 125, 142, 133, 124, 129, 132, 134, 137, 143, 125, 125, 240},{102, 117, 116, 121, 117, 114, 115, 125, 126, 124, 125, 142, 133, 124, 129, 132, 134, 137, 143, 125, 125, 240}},{{116, 115, 117, 120, 121, 119, 125, 129, 123, 129, 124, 127, 128, 143, 133, 131, 136, 141, 158, 127, 131, 240},{116, 115, 117, 120, 121, 119, 125, 129, 123, 129, 124, 127, 128, 143, 133, 131, 136, 141, 158, 127, 131, 240}},{{112, 106, 118, 123, 115, 120, 129, 123, 130, 127, 130, 130, 131, 131, 131, 135, 134, 153, 138, 132, 127, 240},{112, 106, 118, 123, 115, 120, 129, 123, 130, 127, 130, 130, 131, 131, 131, 135, 134, 153, 138, 132, 127, 240}},{{107, 112, 111, 120, 115, 125, 122, 123, 132, 123, 133, 138, 125, 134, 130, 131, 135, 137, 136, 127, 121, 240},{107, 112, 111, 120, 115, 125, 122, 123, 132, 123, 133, 138, 125, 134, 130, 131, 135, 137, 136, 127, 121, 240}},{{111, 113, 132, 115, 121, 123, 121, 127, 135, 128, 129, 128, 133, 130, 133, 138, 134, 137, 152, 138, 124, 240},{111, 113, 132, 115, 121, 123, 121, 127, 135, 128, 129, 128, 133, 130, 133, 138, 134, 137, 152, 138, 124, 240}},{{114, 104, 114, 117, 125, 127, 123, 129, 123, 127, 144, 131, 138, 132, 129, 129, 132, 134, 136, 127, 121, 240},{114, 104, 114, 117, 125, 127, 123, 129, 123, 127, 144, 131, 138, 132, 129, 129, 132, 134, 136, 127, 121, 240}},{{100, 102, 112, 118, 115, 116, 118, 116, 121, 124, 125, 121, 125, 130, 127, 132, 133, 134, 134, 129, 132, 240},{100, 102, 112, 118, 115, 116, 118, 116, 121, 124, 125, 121, 125, 130, 127, 132, 133, 134, 134, 129, 132, 240}},{{106, 93, 103, 108, 124, 111, 114, 115, 120, 121, 119, 123, 131, 130, 132, 132, 132, 131, 140, 129, 131, 240},{106, 93, 103, 108, 124, 111, 114, 115, 120, 121, 119, 123, 131, 130, 132, 132, 132, 131, 140, 129, 131, 240}},{{108, 101, 115, 115, 115, 110, 121, 124, 124, 120, 122, 129, 124, 128, 125, 132, 135, 133, 138, 160, 119, 240},{108, 101, 115, 115, 115, 110, 121, 124, 124, 120, 122, 129, 124, 128, 125, 132, 135, 133, 138, 160, 119, 240}},{{112, 106, 114, 110, 128, 117, 120, 126, 124, 128, 126, 132, 129, 127, 133, 134, 136, 133, 154, 197, 129, 240},{112, 106, 114, 110, 128, 117, 120, 126, 124, 128, 126, 132, 129, 127, 133, 134, 136, 133, 154, 197, 129, 240}},{{102, 107, 111, 116, 116, 120, 118, 115, 120, 119, 128, 131, 131, 130, 128, 126, 126, 132, 145, 136, 133, 240},{102, 107, 111, 116, 116, 120, 118, 115, 120, 119, 128, 131, 131, 130, 128, 126, 126, 132, 145, 136, 133, 240}},{{111, 117, 106, 120, 123, 121, 125, 125, 130, 125, 123, 123, 127, 131, 125, 131, 135, 134, 148, 134, 132, 240},{111, 117, 106, 120, 123, 121, 125, 125, 130, 125, 123, 123, 127, 131, 125, 131, 135, 134, 148, 134, 132, 240}}}; const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz = 98; const float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]={0.224183f, 0.227455f, 0.241830f, 0.207155f, 0.218087f, 0.222942f, 0.232158f, 0.248203f, 0.249262f, 0.261591f, 0.246276f, 0.279163f, 0.285701f, 0.262541f, 0.271844f}; -#ifdef IVAS_FLOAT_FIXED const Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz_fx[15]={7346, 7453, 7924, 6788, 7146, 7305, 7607, 8133, 8167, 8571, 8069, 9147, 9361, 8602, 8907,}; -#endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98},{47, 47, 47, 47, 47, 47, 51, 51, 58, 58, 58, 65, 65, 65, 65, 65, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 91, 91, 93, 93, 93, 98}}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]={ - { - {-0.009093f, 0.009357f, -0.003453f, 0.000012f, 0.008747f, -0.004985f, 0.003413f, -0.000634f, 0.001224f, -0.005937f, -0.012436f, -0.002558f, 0.004885f, -0.003188f, 0.002971f, 0.004317f, 0.003658f, -0.002726f, 0.002070f, -0.007687f, -0.001416f, 0.001935f, 0.003177f, -0.000251f, -0.000183f, 0.000966f, 0.001890f, -0.006432f, -0.005361f, 0.002269f, 0.004446f, -0.002213f, 0.004654f, 0.008920f, -0.011982f, 0.001718f, -0.005741f, -0.003864f, 0.002657f, -0.001469f, 0.007339f, -0.002261f, 0.006608f, 0.003502f, 0.001066f, -0.000452f, 0.003522f, 0.000236f, -0.000743f, -0.003707f, 0.010716f, -0.007427f, -0.002282f, 0.003802f, 0.004147f, -0.000158f, -0.003653f, 0.002094f, -0.004039f, 0.004196f, 0.000776f, 0.001549f, -0.000111f, -0.001391f, -0.001353f, 0.005598f, -0.014358f, 0.003399f, -0.001873f, -0.008279f, -0.001439f, 0.007045f, 0.003361f, 0.004391f, -0.006305f, 0.005087f, -0.002217f, 0.003215f, 0.001901f, 0.002512f, -0.002684f, 0.001092f, 0.003738f, -0.002456f, -0.005636f, 0.002331f, -0.005235f, 0.001052f, 0.003778f, 0.000046f, -0.001918f, -0.002121f, 0.000983f, 0.002093f, -0.000885f, 0.002506f, - 0.000072f, 0.001810f, 0.001468f, -0.000633f, -0.000400f, 0.000722f, -0.000855f, -0.000439f, -0.000674f, 0.000736f, -0.001170f, 0.000615f, -0.001693f, -0.000356f, -0.001593f, -0.000167f, -0.000536f, -0.001693f, -0.000430f, 0.000869f, -0.016548f, 0.013099f, -0.006110f, 0.003024f, 0.002545f, 0.000530f, -0.003448f, -0.000153f, -0.009247f, -0.011535f, 0.003315f, -0.002100f, 0.003770f, 0.003820f, 0.010643f, -0.008458f, 0.001381f, 0.007304f, 0.007055f, -0.006833f, -0.007323f, -0.003795f, -0.006343f, 0.000756f, -0.002040f, -0.004870f, -0.003752f, 0.000195f, -0.011680f, -0.011100f, -0.002255f, 0.002419f, -0.000896f, 0.001112f, -0.001224f, 0.002740f, -0.006075f, 0.007338f, -0.002398f, 0.004255f, -0.000762f, 0.003059f, -0.005530f, 0.002101f, 0.004053f, 0.004914f, 0.002178f, 0.001088f, 0.001822f, -0.001847f, -0.004563f, 0.009718f, 0.007337f, 0.003204f, -0.003443f, 0.012008f, 0.008134f, -0.003185f, 0.007655f, -0.000423f, -0.005762f, -0.001269f, -0.002000f, -0.005077f, 0.003548f, 0.004120f, 0.002022f, -0.003855f, 0.008485f, -0.005344f, 0.005024f, 0.007247f, -0.001229f, 0.000911f, -0.010281f, -0.004429f, - -0.011074f, 0.001827f, 0.005457f, -0.005184f, -0.001478f, 0.002281f, -0.004939f, -0.001227f, 0.002601f, -0.000101f, 0.001903f, -0.000963f, -0.002567f, -0.007177f, -0.003478f, -0.001127f, -0.001641f, -0.000406f, -0.000022f, 0.000663f, -0.000778f, -0.001037f, -0.002571f, -0.001026f, 0.000215f, 0.000803f, 0.000720f, -0.001278f, -0.000114f, 0.000175f, 0.000535f, -0.000117f, 0.000549f, 0.000069f, 0.000886f, 0.000094f, -0.001187f, -0.001996f, -0.002159f, 0.000001f, -0.001221f, -0.001584f, 0.000446f, 0.014016f, 0.006425f, -0.005359f, 0.002405f, 0.001850f, 0.022319f, -0.006555f, 0.006402f, 0.010902f, -0.002095f, 0.009925f, 0.004039f, 0.006766f, -0.008829f, -0.003238f, -0.010349f, -0.004751f, 0.006972f, -0.000161f, -0.004927f, 0.001222f, -0.007261f, -0.000524f, -0.004758f, 0.006675f, -0.002917f, -0.000866f, -0.002631f, 0.003572f, 0.001537f, 0.000128f, -0.000865f, 0.002945f, -0.010921f, -0.008350f, 0.003731f, 0.001053f, -0.001082f, -0.005474f, 0.012960f, 0.003783f, -0.001700f, 0.004347f, 0.005112f, 0.000067f, 0.002512f, 0.001279f, -0.006453f, 0.005877f, -0.007677f, -0.005716f, 0.006812f, -0.008090f, - 0.006993f, 0.003218f, -0.006206f, 0.010649f, 0.005668f, 0.004133f, -0.002939f, 0.009660f, 0.002181f, -0.001241f, -0.002847f, 0.002993f, 0.001057f, -0.001603f, -0.011385f, -0.001565f, -0.002282f, 0.003532f, -0.006724f, 0.009045f, -0.003204f, 0.007427f, -0.007772f, 0.000337f, -0.000894f, 0.009233f, -0.004361f, -0.002925f, 0.001575f, 0.003488f, -0.000206f, 0.001881f, -0.001494f, -0.008342f, -0.001040f, -0.000510f, -0.000534f, -0.001062f, -0.000260f, 0.000129f, -0.001250f, -0.001530f, -0.001832f, -0.001890f, 0.000054f, -0.000683f, -0.000057f, 0.001245f, -0.001510f, 0.000996f, 0.001024f, 0.002591f, -0.003097f, 0.002064f, 0.000803f, 0.001625f, -0.000282f, 0.002410f, 0.000776f, -0.001022f, -0.001925f, -0.000436f, -0.000968f, 0.023325f, -0.019306f, -0.016942f, -0.005439f, 0.017868f, -0.002462f, -0.009634f, 0.012241f, -0.008104f, 0.005797f, -0.000413f, -0.013267f, -0.009008f, 0.011237f, -0.007228f, 0.005580f, -0.007543f, 0.007434f, -0.003262f, -0.002029f, -0.000807f, -0.007304f, 0.003910f, 0.005393f, -0.007325f, 0.001832f, -0.003702f, 0.001545f, 0.003411f, -0.001050f, 0.004873f, 0.001485f, 0.003997f, - 0.006281f, -0.007979f, -0.005878f, 0.007304f, 0.000399f, 0.005685f, 0.005521f, -0.005039f, -0.007557f, -0.002961f, 0.001340f, 0.010043f, -0.010754f, 0.004517f, -0.012012f, -0.014604f, -0.003423f, -0.008320f, -0.001375f, -0.009869f, -0.018881f, -0.009944f, 0.008808f, 0.008277f, 0.005352f, -0.006220f, 0.018133f, -0.005491f, 0.003081f, -0.009929f, -0.009417f, 0.002570f, 0.000024f, -0.000836f, -0.011895f, -0.003811f, -0.000660f, -0.002326f, -0.002293f, -0.006335f, -0.005144f, 0.001409f, -0.001630f, -0.003435f, 0.000421f, -0.006134f, 0.001131f, 0.003632f, 0.006207f, 0.003542f, -0.005212f, 0.005585f, -0.003592f, -0.000254f, 0.006173f, 0.002704f, 0.000919f, -0.001927f, 0.003182f, 0.003724f, 0.002853f, 0.000722f, -0.001581f, 0.000634f, 0.004389f, 0.002350f, 0.002829f, 0.001301f, -0.001639f, 0.002440f, 0.000455f, -0.000174f, 0.000668f, -0.001151f, 0.000416f, 0.000739f, -0.001306f, 0.002502f, 0.003576f, 0.004317f, -0.000284f, -0.000226f, 0.000603f, -0.002627f, 0.003921f, -0.000167f, 0.002439f, -0.000508f, 0.029790f, -0.009842f, 0.013902f, -0.003772f, 0.018702f, -0.003686f, -0.002977f, 0.003132f, - 0.003710f, -0.003211f, -0.021663f, 0.002097f, -0.002175f, -0.005768f, -0.000428f, -0.001053f, 0.007575f, -0.002481f, 0.018260f, -0.002442f, 0.001965f, -0.001328f, 0.010280f, -0.002051f, 0.003472f, -0.008595f, -0.000446f, -0.005904f, -0.006278f, -0.001760f, -0.001909f, 0.000078f, 0.006534f, -0.011787f, -0.003635f, 0.004008f, -0.001515f, 0.008164f, 0.001712f, -0.002058f, -0.005580f, -0.005368f, -0.005921f, -0.010776f, 0.003886f, 0.004581f, 0.003849f, -0.018788f, -0.002952f, 0.013285f, 0.007260f, -0.002999f, -0.000788f, -0.005808f, -0.013110f, -0.013676f, 0.013454f, -0.004205f, -0.009379f, -0.005110f, 0.007211f, 0.005925f, 0.000467f, 0.006641f, 0.002531f, 0.006423f, -0.003376f, -0.013407f, -0.004790f, -0.006033f, -0.007063f, 0.009888f, 0.006315f, -0.001088f, 0.010780f, 0.016463f, -0.004137f, 0.006981f, -0.006579f, -0.000806f, -0.000109f, 0.007173f, -0.000773f, 0.001801f, 0.001419f, 0.002230f, 0.005473f, -0.005651f, 0.004245f, -0.002935f, 0.000241f, -0.003598f, 0.000405f, 0.001902f, 0.003837f, 0.002941f, -0.000289f, 0.001056f, 0.000049f, -0.000439f, 0.001885f, -0.005330f, -0.000951f, -0.004254f, - 0.000783f, -0.000763f, -0.000882f, -0.001862f, -0.001319f, -0.002219f, 0.002179f, 0.001122f, -0.044640f, 0.024578f, 0.008968f, -0.002035f, -0.001961f, 0.000146f, -0.006776f, -0.012418f, -0.002677f, 0.006108f, 0.018934f, 0.012733f, -0.017209f, -0.003263f, -0.010228f, 0.007041f, -0.000849f, -0.023249f, -0.006842f, 0.014321f, 0.008855f, 0.004920f, 0.012144f, 0.007375f, -0.001209f, -0.001495f, 0.003609f, -0.008824f, -0.005206f, 0.002081f, 0.010599f, -0.004410f, -0.008856f, -0.012822f, -0.006446f, 0.006469f, 0.020852f, 0.001493f, -0.003611f, 0.004461f, -0.004254f, -0.015388f, 0.001188f, -0.010848f, -0.008535f, -0.010120f, 0.006377f, -0.000572f, -0.014431f, 0.002752f, 0.005525f, 0.005708f, -0.015616f, -0.008641f, -0.005789f, -0.003843f, -0.001664f, -0.005745f, -0.002756f, -0.007440f, -0.015155f, -0.001734f, -0.012864f, -0.015458f, -0.009559f, -0.002702f, 0.002716f, -0.009187f, -0.013573f, 0.004052f, 0.010970f, -0.000537f, -0.001964f, -0.001263f, 0.007992f, -0.011854f, 0.008926f, 0.014062f, 0.013680f, 0.010778f, 0.018384f, 0.000263f, -0.007515f, 0.004972f, 0.000865f, -0.001910f, -0.001665f, 0.000051f, - -0.004143f, 0.006098f, 0.000355f, 0.000488f, -0.003686f, -0.000994f, 0.002039f, 0.002320f, -0.002129f, -0.001951f, 0.001203f, 0.006291f, -0.000773f, 0.002412f, 0.002154f, 0.005383f, -0.004299f, 0.000310f, -0.000049f, -0.004794f, 0.000773f, 0.000705f, 0.004133f, 0.000483f, 0.000886f, 0.003550f, 0.002265f, -0.005983f, 0.002297f, -0.002121f, 0.001952f, -0.018436f, 0.007010f, -0.009100f, -0.001536f, 0.002449f, 0.005495f, -0.000728f, 0.009596f, 0.000270f, -0.001880f, -0.025882f, 0.012058f, -0.004784f, -0.005461f, 0.009329f, -0.014975f, -0.020625f, 0.008476f, -0.007210f, -0.009636f, -0.003032f, 0.018696f, 0.011751f, -0.006774f, -0.004002f, 0.008726f, -0.002562f, -0.000880f, 0.002531f, 0.008519f, 0.015559f, 0.009946f, 0.012592f, -0.001877f, -0.000528f, 0.000359f, -0.008271f, 0.002170f, -0.003478f, 0.021215f, -0.016166f, -0.009319f, -0.008546f, -0.007956f, 0.005102f, 0.002926f, 0.007590f, -0.001203f, -0.010679f, -0.014253f, -0.004132f, -0.017758f, -0.024815f, -0.004920f, 0.000677f, 0.019342f, 0.003826f, -0.015229f, -0.003924f, 0.014516f, -0.006128f, 0.004904f, 0.004351f, 0.008175f, -0.011492f, - -0.017167f, -0.007626f, -0.008707f, 0.027802f, 0.003168f, -0.008923f, 0.006115f, 0.004632f, -0.001987f, 0.003496f, 0.006426f, -0.000781f, 0.012407f, -0.016352f, -0.014570f, 0.004738f, -0.006694f, 0.014812f, -0.006787f, -0.000395f, 0.008041f, -0.002460f, 0.007133f, -0.000444f, -0.000290f, -0.000504f, -0.002336f, -0.000275f, 0.006427f, 0.002344f, 0.006247f, 0.003451f, 0.003154f, 0.000202f, -0.002190f, -0.001028f, 0.002660f, -0.000830f, 0.000859f, -0.001285f, 0.004510f, -0.003695f, 0.002659f, -0.003314f, 0.004550f, -0.004294f, 0.000488f, -0.000437f, -0.000378f, 0.003158f, 0.004297f, -0.004494f, 0.003209f, 0.001692f, -0.001413f, 0.006530f, 0.015738f, 0.004848f, -0.001499f, 0.010820f, -0.002271f, -0.013880f, -0.002738f, -0.001394f, 0.013303f, -0.007799f, -0.002015f, -0.004304f, 0.001985f, -0.004358f, 0.000635f, 0.004235f, 0.006176f, 0.009030f, 0.005826f, 0.002742f, 0.023469f, 0.009163f, 0.007576f, -0.001182f, -0.018879f, 0.001056f, -0.015763f, 0.004578f, -0.010757f, 0.002411f, -0.000172f, 0.005842f, 0.028904f, 0.008101f, -0.004743f, 0.010302f, -0.008456f, 0.008753f, -0.005334f, 0.015015f, - -0.008521f, -0.000255f, -0.011645f, 0.006769f, 0.011330f, -0.013723f, 0.027150f, -0.006901f, 0.001789f, -0.004392f, -0.007578f, 0.002759f, -0.008429f, -0.023649f, 0.003772f, -0.006067f, -0.001500f, -0.014674f, 0.003248f, -0.005309f, -0.024350f, -0.011118f, -0.006936f, -0.021534f, 0.011936f, 0.030608f, 0.037116f, -0.035716f, -0.027328f, -0.015217f, 0.001328f, 0.008689f, -0.011150f, 0.004922f, -0.012629f, 0.003114f, 0.017041f, 0.026401f, -0.018473f, 0.029583f, 0.009362f, 0.003328f, 0.004910f, 0.005218f, -0.006758f, 0.010055f, 0.009244f, 0.011222f, 0.008578f, 0.003518f, 0.013087f, -0.000087f, 0.004000f, -0.000390f, -0.000189f, 0.007035f, -0.002272f, -0.008820f, -0.002503f, 0.005534f, 0.004248f, 0.001651f, -0.000220f, -0.000691f, -0.000895f, 0.005580f, 0.004420f, 0.001880f, -0.005254f, 0.001162f, 0.001288f, -0.000046f, 0.005955f, 0.002525f, 0.003644f, -0.000159f, 0.004421f, 0.002508f, 0.004472f, 0.006260f, 0.006518f, 0.000295f, 0.000107f, -0.003478f, 0.007204f, 0.006436f, -0.000909f, -0.002150f, 0.000595f, 0.004603f, -0.001873f, 0.013170f, -0.025585f, 0.036484f, 0.000490f, 0.021254f, - 0.007512f, -0.007821f, -0.008090f, 0.019678f, -0.012038f, 0.012336f, 0.015245f, -0.002264f, -0.011217f, 0.000363f, 0.015775f, 0.008799f, 0.007964f, 0.006925f, -0.001733f, 0.002337f, 0.005102f, 0.020129f, 0.014051f, -0.011134f, -0.009596f, -0.001906f, -0.005017f, -0.002503f, -0.011000f, -0.007377f, 0.009926f, 0.017728f, 0.004282f, 0.026867f, -0.007877f, 0.029403f, 0.001034f, 0.013719f, 0.032341f, 0.022888f, 0.007100f, 0.006436f, 0.014441f, -0.003464f, -0.013518f, -0.000319f, 0.013568f, -0.008247f, -0.015466f, 0.000325f, -0.002732f, 0.029612f, 0.023657f, -0.000539f, 0.033418f, -0.003241f, 0.017810f, 0.009343f, 0.014013f, -0.002117f, -0.011989f, 0.014908f, -0.003396f, 0.017482f, 0.011784f, 0.037214f, -0.021291f, -0.003837f, -0.042636f, 0.008759f, -0.021146f, -0.003060f, 0.019104f, -0.008208f, 0.007637f, -0.003704f, 0.022392f, -0.006213f, -0.016219f, -0.001415f, -0.005759f, 0.006597f, -0.001387f, 0.010818f, 0.012572f, 0.003220f, -0.003775f, 0.010049f, -0.002634f, 0.004236f, -0.000321f, -0.006995f, 0.004295f, 0.004583f, 0.008624f, 0.004492f, 0.009707f, 0.004332f, -0.000568f, 0.000212f, - -0.003502f, -0.000059f, 0.009503f, -0.003710f, -0.007839f, 0.004116f, -0.000922f, 0.001297f, 0.007706f, 0.001681f, 0.001593f, 0.003223f, 0.004989f, -0.001861f, -0.001383f, 0.003435f, 0.006163f, 0.010409f, 0.009295f, -0.000154f, 0.004195f, -0.000041f, -0.000856f, 0.004478f, 0.006414f, 0.005775f, -0.003665f, -0.000020f, -0.001469f, 0.007704f, 0.001097f, -0.001569f, 0.000934f, -0.024552f, -0.018036f, 0.008784f, -0.014588f, 0.008267f, -0.008828f, 0.002357f, 0.022468f, -0.003896f, -0.021338f, 0.005692f, -0.009009f, 0.021635f, -0.022804f, -0.015929f, 0.009165f, 0.010390f, 0.015753f, 0.000494f, -0.001668f, 0.010157f, -0.006324f, -0.015611f, 0.009548f, -0.006463f, -0.012510f, 0.003641f, 0.012027f, -0.008978f, 0.022708f, 0.009170f, -0.000957f, 0.002923f, 0.011049f, 0.004816f, -0.039128f, 0.015859f, -0.004142f, -0.004195f, -0.006882f, 0.020665f, -0.000037f, 0.022011f, 0.000756f, 0.001864f, 0.002260f, -0.005905f, -0.002550f, 0.010662f, -0.012671f, 0.002900f, 0.035255f, 0.003060f, 0.025872f, 0.001965f, -0.005497f, -0.002910f, -0.017751f, -0.036503f, -0.026753f, 0.012011f, 0.016527f, -0.007261f, - 0.027691f, 0.011887f, -0.020133f, -0.011641f, 0.025335f, 0.018124f, 0.016724f, 0.005166f, -0.008057f, 0.000204f, -0.001607f, -0.015725f, -0.005055f, -0.009202f, -0.043097f, -0.018465f, -0.001207f, 0.028785f, 0.006199f, -0.006678f, 0.002873f, 0.024716f, -0.006359f, 0.001247f, -0.000079f, 0.006261f, -0.008351f, -0.003894f, -0.006302f, -0.003485f, -0.002383f, 0.005950f, -0.000531f, -0.001057f, -0.000621f, 0.004668f, 0.003476f, 0.007279f, -0.005393f, -0.008021f, 0.002640f, -0.008485f, -0.004962f, 0.001100f, 0.002822f, 0.001023f, -0.001764f, 0.008932f, -0.004423f, -0.002607f, -0.010568f, 0.003960f, -0.009586f, 0.007395f, 0.002948f, 0.004931f, -0.008171f, 0.000768f, -0.001663f, 0.003905f, -0.004852f, 0.003065f, -0.004379f, 0.004979f, -0.009061f, 0.000398f, -0.010574f, 0.011377f, 0.010704f, 0.023178f, 0.008746f, 0.007682f, 0.026630f, 0.022243f, 0.018543f, 0.000602f, 0.006817f, 0.001308f, -0.004482f, -0.005361f, 0.004252f, -0.002273f, -0.016173f, 0.003364f, 0.015595f, -0.000333f, -0.004672f, 0.004715f, -0.039324f, 0.012890f, -0.015748f, 0.009572f, 0.013137f, 0.011826f, -0.014856f, 0.007778f, - -0.001657f, -0.000476f, 0.023062f, 0.016816f, 0.000088f, 0.008939f, 0.006587f, -0.003294f, -0.013393f, 0.003085f, 0.011185f, 0.000080f, 0.016388f, 0.004813f, 0.014811f, 0.029339f, 0.001398f, 0.011763f, 0.012481f, 0.015673f, -0.000806f, -0.010252f, 0.025327f, -0.009984f, 0.020421f, -0.024344f, -0.020055f, 0.027788f, -0.001540f, 0.009103f, 0.016319f, 0.024235f, 0.031365f, 0.013164f, 0.004202f, -0.015496f, 0.006801f, -0.003265f, -0.028293f, 0.023789f, 0.014762f, -0.023162f, -0.001490f, 0.001328f, -0.028995f, 0.009601f, 0.022840f, 0.013463f, -0.000311f, 0.008723f, 0.006167f, -0.013550f, 0.025011f, 0.002314f, -0.005038f, 0.012852f, 0.024739f, 0.009665f, -0.001109f, -0.008777f, -0.006920f, -0.003075f, 0.004142f, 0.006918f, 0.010163f, 0.003260f, 0.001673f, 0.003120f, 0.011895f, 0.010632f, 0.013236f, -0.000259f, -0.001512f, 0.005210f, 0.011320f, -0.000044f, 0.000962f, -0.002373f, 0.005178f, 0.000857f, -0.001413f, -0.004391f, 0.002629f, -0.008311f, -0.014783f, -0.000749f, 0.008154f, -0.000290f, 0.005738f, -0.007079f, 0.004385f, 0.000243f, 0.004993f, 0.000722f, -0.004063f, 0.003264f, - -0.002777f, -0.002240f, -0.001037f, -0.008956f, 0.006200f, -0.003339f, 0.002505f, 0.004866f, 0.000148f, -0.001335f, -0.004229f, -0.005820f, -0.001313f, -0.064905f, -0.040358f, 0.013209f, 0.013829f, 0.026697f, 0.044132f, -0.012127f, -0.006897f, -0.014033f, -0.013015f, -0.016558f, -0.017756f, 0.001466f, 0.007120f, 0.005609f, 0.027838f, 0.001241f, 0.027315f, -0.001354f, 0.009394f, 0.012673f, 0.009704f, 0.020363f, 0.014483f, 0.001059f, 0.017894f, -0.000192f, -0.002136f, -0.010280f, 0.012099f, -0.001593f, -0.026693f, -0.023027f, 0.014459f, -0.003300f, 0.031788f, 0.019039f, 0.020432f, 0.007617f, -0.040047f, 0.009694f, 0.025137f, -0.003810f, 0.007291f, -0.006080f, 0.004962f, 0.031664f, -0.001134f, 0.026548f, 0.044123f, 0.002541f, -0.016705f, -0.000413f, 0.000425f, -0.027658f, 0.037446f, 0.017924f, -0.005019f, -0.002075f, 0.027118f, 0.012866f, -0.032960f, -0.026741f, 0.010520f, -0.011601f, 0.015693f, 0.011422f, 0.004941f, -0.012970f, -0.023431f, -0.001066f, 0.005880f, 0.004457f, 0.025257f, -0.033926f, 0.004923f, -0.002270f, -0.028847f, -0.013684f, -0.029012f, 0.025343f, -0.008648f, 0.035018f, - -0.027547f, 0.002610f, -0.013282f, 0.019925f, 0.008599f, -0.008544f, -0.001710f, 0.018370f, 0.001098f, 0.005778f, -0.010652f, -0.005580f, -0.009017f, 0.016298f, 0.008014f, 0.000005f, 0.004269f, 0.004936f, -0.014927f, 0.001077f, -0.004241f, 0.005291f, 0.003055f, -0.003144f, -0.015255f, -0.005226f, -0.011283f, 0.013494f, -0.010036f, 0.002265f, -0.002739f, 0.013368f, -0.002866f, -0.002236f, -0.004785f, -0.008188f, -0.000549f, -0.005400f, 0.005226f, 0.014752f, 0.012713f, -0.000800f, -0.013439f, 0.017093f, 0.046032f, -0.054794f, -0.015331f, -0.026713f, -0.001126f, 0.008684f, 0.001450f, 0.036733f, -0.037912f, 0.017922f, -0.005176f, 0.007318f, -0.004590f, 0.020169f, -0.011123f, -0.018777f, -0.001568f, -0.005476f, 0.014262f, -0.001193f, 0.009644f, 0.021366f, -0.004444f, -0.016025f, -0.002139f, 0.024028f, -0.014136f, 0.005722f, 0.005413f, 0.000945f, -0.002176f, 0.023862f, -0.000895f, -0.006168f, -0.039862f, 0.012816f, -0.009857f, -0.025193f, -0.021900f, -0.005832f, -0.024277f, -0.014324f, -0.021080f, 0.009993f, -0.024879f, 0.024822f, -0.022833f, 0.015384f, -0.011792f, 0.030095f, -0.029155f, -0.016960f, - -0.004380f, 0.017430f, 0.007197f, 0.000132f, -0.011990f, -0.023916f, 0.002444f, 0.009324f, 0.034138f, 0.017874f, 0.007464f, -0.019534f, 0.011628f, -0.017331f, -0.019507f, 0.017018f, -0.018936f, 0.009012f, 0.022133f, 0.018430f, -0.004899f, -0.007071f, -0.015933f, 0.026588f, 0.002625f, 0.025445f, 0.041189f, -0.008079f, -0.021577f, -0.009671f, -0.007167f, -0.014855f, 0.006542f, -0.024641f, 0.010749f, 0.008005f, 0.007424f, 0.019442f, -0.013733f, 0.000696f, -0.002477f, 0.004910f, 0.017736f, 0.000490f, 0.013955f, -0.005078f, -0.000302f, 0.001722f, -0.007862f, -0.002851f, 0.008398f, 0.004393f, -0.011249f, -0.014766f, -0.006970f, 0.006476f, 0.005872f, -0.006503f, 0.021092f, 0.006139f, -0.015352f, 0.007728f, 0.011294f, 0.028037f, 0.022845f, 0.012760f, 0.004772f, 0.002682f, -0.011734f, -0.009255f, -0.000338f, -0.009375f, 0.001826f, -0.005447f, -0.017151f, 0.009472f, -0.005636f, -0.002419f, 0.002098f, 0.009343f, 0.000289f, -0.007943f, 0.029788f, 0.041520f, -0.045380f, 0.032131f, 0.022176f, 0.000420f, 0.015762f, 0.055412f, -0.016501f, -0.016850f, 0.004602f, 0.015825f, 0.022574f, 0.006991f, - -0.022626f, 0.024100f, -0.009835f, 0.048887f, -0.002033f, -0.008865f, 0.015312f, 0.012348f, 0.012166f, -0.001210f, 0.045807f, -0.039335f, 0.008707f, -0.001377f, 0.012050f, -0.016799f, -0.032908f, 0.015341f, 0.011901f, 0.012391f, -0.011990f, -0.009236f, 0.038173f, 0.013924f, 0.048158f, 0.003805f, -0.018806f, -0.002605f, 0.010141f, -0.004912f, 0.050020f, -0.007045f, 0.026906f, -0.005578f, 0.044807f, 0.015946f, 0.011561f, -0.011700f, -0.003280f, 0.024415f, -0.000249f, 0.026191f, 0.019542f, 0.023072f, -0.032212f, 0.004414f, 0.021787f, 0.026422f, 0.019491f, 0.014859f, 0.035705f, 0.044062f, -0.034808f, -0.004717f, 0.067220f, -0.016960f, -0.019111f, 0.043344f, 0.058567f, 0.000502f, -0.001305f, -0.032693f, -0.027105f, -0.002343f, 0.029061f, -0.004960f, -0.006319f, 0.000751f, -0.002984f, -0.008860f, -0.023556f, -0.008939f, -0.002432f, -0.014115f, 0.000228f, 0.013255f, -0.008422f, 0.017119f, -0.018588f, 0.015026f, -0.004319f, 0.013017f, -0.014099f, -0.000119f, 0.009390f, 0.005338f, 0.016548f, -0.003613f, -0.009750f, -0.004574f, 0.004469f, 0.015183f, 0.004009f, -0.006178f, 0.021093f, -0.007320f, - 0.010822f, 0.010956f, -0.002616f, -0.002968f, -0.005545f, 0.031203f, -0.012213f, 0.003547f, 0.007484f, 0.011278f, -0.006355f, -0.021104f, -0.012542f, -0.004104f, 0.023392f, 0.011105f, -0.002389f, 0.000925f, 0.007955f, -0.002048f, -0.000280f, 0.007984f, 0.003941f, 0.001668f, -0.000340f, 0.018615f, 0.041915f, -0.002587f, 0.013050f, -0.035855f, 0.034085f, -0.018185f, -0.011258f, -0.031389f, -0.020417f, 0.064293f, 0.000813f, -0.045302f, -0.020286f, -0.001367f, 0.000081f, -0.005996f, 0.049624f, 0.023208f, -0.004361f, -0.020786f, -0.002098f, 0.013060f, -0.006290f, 0.066225f, 0.013943f, 0.029109f, 0.009896f, -0.014938f, -0.037665f, 0.008805f, -0.000591f, 0.005862f, -0.029232f, -0.003093f, -0.019804f, 0.022325f, -0.000049f, 0.003652f, 0.022998f, -0.021006f, -0.015584f, 0.004566f, 0.000818f, 0.006879f, -0.032303f, -0.025228f, -0.055204f, -0.028777f, 0.002147f, -0.031415f, 0.003988f, -0.022797f, -0.013882f, 0.040829f, 0.012602f, -0.019866f, 0.011985f, 0.004628f, -0.000423f, 0.039282f, -0.006995f, 0.047589f, 0.017937f, -0.020485f, -0.058369f, 0.010128f, 0.008972f, 0.032174f, -0.017684f, -0.041731f, - -0.015177f, 0.012102f, 0.001764f, -0.009953f, -0.030360f, -0.009645f, -0.042773f, -0.048350f, 0.014768f, -0.002687f, 0.049196f, -0.015844f, -0.030552f, -0.026238f, -0.002791f, 0.035039f, -0.002271f, 0.012915f, 0.022088f, 0.017228f, -0.008090f, 0.011436f, 0.014959f, 0.005152f, 0.015331f, 0.015483f, -0.011373f, -0.001561f, 0.021624f, -0.004345f, 0.002634f, 0.021020f, -0.004437f, 0.012490f, -0.015960f, 0.006099f, 0.011589f, -0.007036f, 0.006724f, 0.006956f, -0.014971f, 0.019290f, -0.018670f, 0.009355f, 0.009149f, 0.015332f, -0.004306f, -0.010448f, 0.019988f, -0.002653f, 0.014632f, -0.021831f, -0.011204f, -0.016011f, -0.014106f, 0.002105f, -0.011728f, 0.008406f, 0.000562f, 0.003561f, -0.022526f, 0.002490f, -0.006828f, 0.030597f, -0.032992f, -0.001584f, 0.051234f, -0.010509f, 0.015475f, 0.005703f, 0.007173f, -0.047189f, 0.039991f, -0.003535f, -0.037651f, -0.021927f, 0.020452f, -0.005312f, 0.010474f, 0.000138f, -0.015327f, -0.011410f, 0.007340f, -0.011432f, -0.002267f, -0.000310f, -0.054748f, -0.014093f, -0.036546f, 0.008540f, 0.013657f, 0.000010f, -0.015811f, 0.006896f, -0.007305f, 0.022005f, - -0.048382f, 0.003613f, 0.009023f, 0.028304f, -0.020783f, 0.026392f, -0.020463f, 0.016913f, 0.004940f, 0.020605f, -0.031410f, 0.010099f, -0.015306f, -0.033604f, 0.022561f, -0.027132f, -0.054668f, 0.008430f, -0.004666f, 0.043828f, -0.020487f, 0.006411f, 0.020505f, 0.029188f, 0.033191f, 0.003845f, -0.010684f, -0.020249f, 0.001170f, 0.015894f, 0.022038f, -0.042670f, 0.048701f, -0.000044f, -0.032009f, -0.023989f, -0.042761f, 0.017958f, 0.011034f, 0.017567f, 0.008146f, 0.046240f, -0.015778f, 0.050227f, -0.026550f, 0.012020f, -0.010475f, -0.022842f, -0.068997f, 0.039581f, 0.008046f, -0.018095f, -0.046666f, -0.002400f, 0.009290f, -0.003696f, 0.017811f, -0.012383f, -0.014637f, -0.002106f, 0.007896f, -0.012902f, -0.012542f, -0.008018f, -0.001905f, 0.007666f, -0.003571f, -0.003855f, -0.018178f, 0.014249f, 0.000977f, -0.009888f, 0.009107f, -0.007075f, 0.014983f, -0.004110f, 0.007766f, 0.009944f, 0.018389f, -0.005793f, 0.016750f, 0.002170f, 0.001449f, -0.017128f, -0.013198f, 0.004653f, 0.007134f, 0.002796f, 0.001481f, -0.003017f, -0.010903f, -0.005979f, -0.004880f, -0.012123f, -0.005187f, 0.022236f, - -0.010375f, -0.012046f, 0.007364f, -0.026903f, 0.000463f, -0.006774f, -0.040861f, -0.000101f, 0.022625f, -0.008911f, -0.044268f, -0.006999f, -0.064720f, 0.031437f, -0.071535f, 0.042793f, -0.049447f, -0.043128f, 0.012348f, 0.037136f, 0.027728f, -0.024544f, 0.026013f, 0.046704f, 0.008320f, 0.007027f, 0.011002f, 0.004265f, -0.027463f, 0.033519f, -0.056135f, -0.034830f, 0.003173f, -0.003418f, -0.003588f, -0.007405f, -0.013979f, 0.007558f, 0.051693f, 0.013428f, 0.007193f, 0.004906f, -0.024311f, 0.030076f, -0.005423f, -0.051933f, -0.008006f, 0.001185f, 0.001117f, -0.035504f, -0.025137f, 0.027443f, -0.008925f, 0.047044f, 0.008706f, 0.000110f, -0.038233f, -0.020875f, 0.014078f, 0.006148f, -0.010434f, 0.040329f, -0.031866f, -0.019263f, -0.001406f, -0.002264f, 0.037964f, 0.003184f, 0.044412f, 0.000111f, -0.036330f, 0.009145f, -0.030978f, 0.023694f, -0.004370f, 0.032252f, 0.060776f, -0.093463f, 0.031853f, 0.013075f, 0.017109f, 0.035552f, 0.008754f, -0.042789f, -0.009992f, -0.003759f, -0.007798f, 0.022076f, -0.043991f, 0.004316f, -0.011550f, -0.006105f, -0.030327f, -0.016120f, -0.045861f, 0.005274f, - -0.002932f, 0.004895f, 0.012574f, -0.018416f, -0.003415f, 0.022446f, -0.013758f, 0.004563f, -0.007688f, -0.022380f, 0.010434f, 0.013854f, -0.015894f, -0.001452f, -0.025079f, -0.001247f, -0.036256f, 0.013235f, 0.008808f, -0.004280f, 0.003793f, -0.008892f, 0.001432f, 0.007606f, -0.005894f, -0.006503f, 0.020568f, 0.025520f, -0.005783f, 0.008643f, 0.003964f, 0.026199f, 0.011414f, -0.032365f, 0.004209f, 0.019017f, -0.010778f, 0.019219f, 0.005970f, 0.008417f, 0.076525f, 0.066123f, -0.018987f, -0.025646f, -0.001568f, -0.050395f, 0.029348f, -0.002924f, 0.011040f, 0.003868f, -0.025504f, 0.076345f, -0.032877f, -0.134797f, -0.019775f, 0.026845f, -0.090768f, -0.015592f, 0.028336f, -0.076890f, 0.010609f, 0.049985f, -0.035378f, 0.049866f, -0.047981f, 0.042836f, 0.053146f, -0.034027f, 0.014434f, -0.004948f, 0.001100f, -0.014442f, -0.021104f, -0.003927f, 0.032691f, -0.021152f, -0.035188f, -0.019237f, -0.028346f, -0.003041f, -0.022262f, -0.003675f, 0.011678f, -0.005330f, 0.031931f, -0.028269f, -0.034726f, 0.027586f, -0.036729f, -0.054458f, -0.069821f, -0.024353f, -0.001711f, 0.013527f, 0.038828f, -0.016282f, - 0.017377f, 0.018174f, -0.012848f, -0.006056f, 0.064015f, -0.042399f, -0.001683f, 0.043808f, 0.013549f, 0.034439f, -0.008663f, 0.012531f, 0.048598f, 0.024972f, -0.002688f, -0.005970f, -0.030026f, 0.012259f, 0.048888f, -0.045533f, 0.034570f, -0.045059f, 0.013104f, 0.063629f, 0.014641f, -0.035792f, 0.036167f, 0.005721f, -0.022880f, -0.017867f, 0.043776f, 0.014394f, 0.018868f, -0.002664f, 0.003291f, 0.011994f, 0.014347f, -0.001327f, -0.004409f, 0.018614f, 0.016236f, 0.003409f, -0.021667f, 0.023819f, 0.002933f, -0.008234f, 0.005850f, 0.008159f, -0.015776f, -0.004190f, 0.012150f, 0.002342f, 0.020246f, -0.025012f, 0.037615f, 0.029149f, -0.005183f, -0.023852f, -0.009692f, 0.025081f, 0.028674f, 0.046261f, -0.001430f, 0.008910f, 0.007570f, 0.025366f, -0.038591f, -0.020583f, 0.038716f, 0.024227f, 0.002625f, -0.006248f, 0.003327f, 0.010707f, -0.020200f, -0.015846f, -0.013588f, 0.002842f, 0.012347f, -0.006228f, -0.000051f, 0.020115f, -0.021484f, -0.015235f, 0.067707f, 0.046008f, -0.064473f, -0.012697f, 0.058355f, -0.017249f, -0.035470f, -0.024944f, -0.035591f, -0.020860f, 0.058915f, 0.036068f, - -0.004308f, 0.026942f, -0.005981f, 0.032756f, -0.019958f, -0.010937f, 0.065418f, -0.026686f, 0.012161f, -0.018446f, -0.006613f, -0.000376f, 0.018196f, 0.053252f, 0.020800f, -0.035489f, -0.010092f, -0.001296f, -0.005005f, 0.030126f, 0.004408f, 0.053613f, -0.015268f, 0.009555f, -0.005061f, 0.015898f, -0.044210f, 0.027181f, -0.040744f, 0.028237f, -0.001738f, 0.041281f, -0.010229f, 0.030699f, -0.013545f, 0.009904f, 0.017872f, -0.017326f, 0.018505f, 0.041668f, 0.052073f, -0.026996f, 0.053351f, 0.022572f, 0.063210f, -0.017680f, 0.012305f, -0.002012f, -0.007248f, -0.011703f, -0.003853f, -0.020453f, -0.102366f, -0.064438f, -0.019438f, -0.000991f, 0.015089f, 0.007552f, 0.024266f, 0.039038f, -0.056095f, -0.002893f, -0.022350f, 0.085959f, -0.005477f, -0.025809f, -0.006923f, -0.074914f, -0.062353f, 0.094967f, 0.039060f, 0.021427f, -0.014054f, 0.029919f, 0.003019f, -0.068600f, 0.014643f, 0.004901f, -0.025607f, -0.026640f, 0.004921f, 0.000601f, 0.007931f, -0.014201f, -0.006715f, -0.033527f, -0.027911f, 0.012281f, 0.015643f, 0.013242f, 0.010706f, -0.017366f, -0.025114f, -0.015545f, -0.032675f, 0.021251f, - 0.007874f, -0.059147f, -0.006330f, -0.017063f, -0.003393f, 0.029122f, -0.026590f, -0.038252f, -0.007706f, 0.024884f, 0.009130f, -0.026547f, 0.016649f, 0.034352f, -0.062980f, -0.017095f, 0.023516f, -0.001109f, -0.004029f, -0.012138f, -0.001735f, 0.011134f, 0.019928f, 0.004504f, -0.007963f, 0.050811f, -0.073927f, 0.069237f, -0.020439f, -0.020914f, 0.017699f, 0.032128f, -0.057924f, -0.011756f, 0.000846f, 0.011342f, 0.002944f, -0.001850f, 0.028809f, -0.017781f, 0.003557f, 0.015018f, 0.016706f, 0.023949f, 0.019838f, 0.006462f, -0.031849f, -0.006611f, 0.042954f, -0.042104f, -0.035958f, 0.044436f, 0.015104f, 0.031322f, 0.048688f, 0.075473f, -0.017319f, -0.048413f, 0.063914f, -0.026129f, -0.010956f, 0.066505f, 0.020841f, -0.024773f, -0.069806f, -0.046265f, -0.007131f, -0.026007f, 0.032644f, 0.065522f, 0.033598f, -0.022870f, 0.067467f, 0.022449f, -0.024608f, 0.018352f, 0.075312f, 0.021533f, 0.014506f, -0.016212f, -0.060535f, -0.081424f, -0.064582f, -0.004958f, 0.048790f, 0.014641f, 0.030796f, 0.115326f, 0.056896f, -0.069527f, -0.046705f, 0.030367f, -0.095896f, -0.044339f, 0.082554f, 0.029202f, - -0.106530f, -0.089167f, -0.041275f, -0.068348f, -0.063982f, -0.038587f, 0.057886f, -0.016832f, -0.012191f, 0.150840f, 0.025374f, -0.043864f, -0.012098f, -0.047372f, 0.080301f, -0.017300f, 0.017419f, 0.005182f, 0.001121f, -0.044380f, -0.017043f, -0.003842f, -0.022316f, 0.004903f, 0.017204f, 0.038931f, 0.005093f, -0.027155f, -0.001183f, -0.000560f, -0.017665f, 0.007701f, 0.011387f, 0.012887f, -0.034888f, 0.008507f, -0.032320f, 0.005162f, 0.016925f, -0.002370f, 0.025750f, -0.006726f, -0.001709f, 0.025600f, -0.005371f, 0.014089f, 0.028919f, -0.010343f, 0.008604f, 0.019461f, 0.021740f, 0.017356f, 0.003573f, 0.003940f, 0.015125f, -0.016530f, -0.006164f, 0.009856f, 0.028580f, -0.103351f, 0.071450f, 0.030622f, 0.023055f, 0.028664f, -0.011176f, 0.035193f, 0.028874f, 0.041274f, -0.007956f, 0.056636f, -0.035758f, 0.042940f, -0.015794f, -0.033051f, -0.010581f, -0.054157f, 0.005487f, -0.019946f, 0.018975f, -0.013814f, -0.021076f, 0.051769f, -0.059732f, 0.038350f, -0.002194f, -0.026057f, -0.010564f, 0.022882f, 0.025819f, 0.018672f, 0.048922f, 0.039478f, -0.028609f, -0.006033f, -0.025618f, 0.021963f, - -0.022731f, 0.017110f, 0.023460f, 0.010730f, 0.013075f, 0.008700f, -0.014199f, 0.054104f, -0.005288f, 0.016021f, 0.005195f, 0.024887f, 0.013631f, -0.064894f, 0.003970f, -0.038854f, 0.009651f, 0.028529f, -0.005548f, -0.027532f, -0.025406f, 0.060319f, -0.064083f, -0.051705f, 0.094521f, -0.040347f, 0.024321f, 0.009350f, 0.030175f, -0.014377f, 0.015659f, -0.066040f, 0.004241f, 0.064000f, -0.034596f, -0.025972f, 0.054946f, -0.003837f, -0.046090f, -0.033972f, 0.020068f, -0.018020f, -0.010946f, 0.034203f, -0.025555f, 0.008474f, 0.042380f, -0.048144f, 0.002860f, 0.028101f, -0.015915f, -0.009617f, -0.012874f, 0.017281f, 0.004471f, 0.006950f, -0.006633f, 0.009802f, 0.007084f, -0.009489f, 0.000412f, 0.001673f, 0.025144f, 0.012809f, -0.024204f, 0.029187f, 0.006981f, -0.014889f, 0.008199f, 0.008908f, -0.002976f, -0.008717f, 0.020608f, 0.000025f, 0.006726f, 0.002620f, 0.026745f, -0.012574f, -0.010529f, 0.016448f, -0.024659f, 0.030616f, -0.002641f, -0.017284f, -0.003194f, -0.001834f, 0.003337f, -0.000330f, -0.012113f, -0.001741f, 0.015603f, 0.032804f, -0.060728f, -0.247440f, -0.266964f, -0.009373f, - -0.152999f, 0.136082f, 0.491099f, 0.214250f, 0.296300f, 0.374162f, -0.140874f, -0.099518f, -0.039432f, -0.335401f, -0.234506f, -0.075788f, -0.367831f, -0.160096f, -0.032443f, -0.150136f, 0.036191f, 0.345953f, 0.314286f, 0.340132f, 0.440719f, 0.265742f, -0.023546f, 0.099373f, -0.098396f, -0.391457f, -0.212567f, -0.157138f, -0.325270f, -0.222848f, 0.012765f, -0.250289f, -0.082199f, 0.055725f, -0.250154f, -0.128048f, 0.187708f, 0.073094f, 0.203540f, 0.506634f, 0.411855f, 0.333199f, 0.599070f, 0.435013f, -0.007100f, 0.062911f, -0.111641f, -0.536124f, -0.512556f, -0.528650f, -0.823762f, -0.557788f, -0.344723f, -0.337332f, 0.004290f, 0.267937f, 0.301636f, 0.422757f, 0.639735f, 0.592167f, 0.499866f, 0.493642f, 0.282719f, 0.099655f, 0.015906f, -0.030029f, -0.223960f, -0.385477f, -0.473491f, -0.506858f, -0.684593f, -0.568956f, -0.438846f, -0.214529f, 0.229665f, 0.677771f, 0.631170f, 0.691713f, 0.485037f, 0.059447f, -0.065749f, -0.207268f, -0.285190f, -0.192637f, -0.094550f, -0.095223f, -0.042199f, -0.043528f, -0.069386f, 0.000769f, 0.010108f, 0.050653f, 0.157730f, 0.143380f, 0.105595f, 0.145263f, - -0.013673f, -0.093455f, -0.012573f, -0.109789f, -0.095175f, 0.059193f, 0.063877f, 0.014978f, 0.014640f, -0.167476f, -0.428838f, -0.405934f, -0.345853f, -0.260419f, 0.126834f, 0.391364f, 0.478427f, 0.604473f, 0.541737f, 0.334285f, 0.231952f, 0.082443f, -0.096313f, -0.201737f, -0.240818f, -0.312155f, -0.383224f, -0.432066f, -0.504758f, -0.448724f, -0.155351f, 0.110437f, 0.259758f, 0.336945f, 0.366055f, 0.274733f, 0.190447f, 0.095387f, -0.003870f, -0.011298f, 0.046171f, 0.073964f, 0.080819f, 0.087884f, 0.072513f, 0.005335f, -0.062352f, -0.133103f, -0.237092f, -0.228699f, -0.186267f, -0.155753f, -0.087364f, -0.013190f, 0.043910f, 0.062959f, 0.066431f, 0.041791f, 0.026004f, 0.037812f, 0.060081f, 0.084366f, 0.114700f, 0.136351f, 0.131398f, 0.095680f, 0.047714f, -0.010570f, -0.053639f, -0.070819f, -0.094044f, -0.117777f, -0.116368f, -0.090168f, -0.068798f, -0.049685f, -0.037634f, -0.022670f, 0.004563f, 0.040293f, 0.060239f, 0.055420f, 0.051638f, 0.044296f, 0.025907f, 0.021948f, 0.018517f, 0.007794f, 0.016103f, 0.032527f, 0.030579f, 0.027152f, 0.027979f, 0.006233f, -0.020024f, -0.037287f, - -0.062881f, -0.075621f, -0.063897f, -0.049148f, -0.035477f, -0.005117f, 0.014548f, 0.020899f, 0.027328f, 0.020490f, 0.008036f, 0.008750f, 0.019930f, 0.024352f, 0.037876f, 0.041461f, 0.035193f, 0.028640f, 0.011212f, -0.012704f, -0.033126f, -0.044366f, -0.047763f, -0.042241f, -0.028241f, -0.010037f, 0.006465f, 0.014136f, 0.015423f, 0.011579f, 0.008794f, 0.008063f, 0.008134f, 0.007167f, 0.005495f, 0.002511f, -0.000251f, -0.002134f, -0.003068f, -0.002913f, -0.002223f, -0.001145f, -0.000476f}, - {-0.014413f, 0.007078f, -0.016398f, 0.003284f, 0.001257f, 0.001089f, -0.011168f, -0.003924f, 0.003153f, -0.002406f, 0.003722f, 0.005905f, 0.003594f, -0.000097f, 0.004673f, -0.012640f, 0.000371f, -0.000441f, -0.000248f, 0.007028f, 0.010675f, -0.011076f, -0.002432f, -0.006699f, -0.002135f, 0.004012f, 0.007347f, 0.001229f, 0.001872f, -0.002693f, -0.003559f, -0.002905f, -0.002185f, -0.005019f, 0.002837f, -0.005060f, -0.003381f, 0.005857f, -0.004895f, 0.004216f, 0.000757f, -0.012519f, -0.004190f, -0.006880f, -0.001592f, 0.005380f, -0.003647f, -0.001057f, -0.003585f, -0.003737f, -0.002574f, 0.005259f, 0.008003f, 0.001503f, 0.004480f, 0.003545f, -0.004144f, -0.007950f, 0.004358f, 0.003570f, -0.001677f, -0.006837f, -0.005667f, 0.005216f, 0.001118f, 0.003910f, 0.001916f, -0.010533f, -0.003419f, -0.003898f, 0.005903f, 0.002395f, -0.010559f, 0.002832f, -0.005563f, -0.001710f, -0.000481f, -0.003820f, 0.003104f, -0.003483f, 0.000887f, 0.004089f, 0.004260f, 0.002605f, 0.002960f, 0.001920f, -0.000265f, 0.002048f, 0.002557f, 0.000267f, -0.001990f, 0.002869f, 0.000662f, 0.000054f, -0.000763f, -0.001877f, - 0.000990f, 0.001819f, 0.000399f, 0.001496f, -0.000490f, -0.000945f, 0.000054f, -0.001467f, 0.001645f, -0.000251f, 0.001931f, -0.000334f, 0.000437f, -0.000157f, 0.001801f, 0.000928f, -0.000012f, -0.000704f, 0.001170f, -0.000796f, -0.020558f, 0.013402f, -0.009891f, 0.001231f, -0.001427f, -0.003852f, 0.010238f, -0.009237f, -0.006185f, -0.000126f, 0.010828f, -0.004185f, -0.000753f, -0.001295f, 0.008936f, -0.005584f, -0.014643f, -0.003344f, -0.007590f, -0.010265f, 0.000258f, -0.000923f, 0.001558f, 0.005755f, 0.009547f, 0.005915f, 0.000814f, 0.014673f, 0.005636f, 0.000389f, 0.010424f, 0.010951f, -0.001011f, -0.006070f, 0.000298f, 0.004778f, 0.003783f, -0.000194f, -0.002258f, -0.008692f, -0.007696f, -0.003826f, 0.008334f, 0.003397f, 0.014445f, 0.008145f, -0.000782f, 0.004773f, 0.005806f, 0.001882f, -0.009193f, 0.009703f, -0.004025f, 0.005025f, -0.000526f, 0.003003f, -0.010937f, -0.001825f, -0.003572f, 0.003720f, -0.003436f, -0.004177f, 0.011133f, -0.000877f, -0.008604f, 0.003249f, -0.006582f, 0.005167f, -0.003775f, 0.008354f, 0.007141f, 0.008009f, 0.002586f, -0.007901f, 0.004152f, -0.001277f, - 0.004090f, -0.003471f, 0.001063f, 0.011009f, -0.004426f, 0.005301f, 0.007153f, -0.001185f, 0.000296f, -0.000421f, -0.001479f, -0.003038f, 0.001692f, -0.000261f, 0.002623f, -0.000145f, 0.002089f, 0.000059f, 0.000029f, 0.001518f, 0.002546f, 0.001046f, 0.002437f, 0.002810f, -0.000707f, -0.002189f, 0.003597f, 0.000334f, -0.000267f, 0.000216f, 0.002129f, -0.000691f, -0.002227f, 0.001020f, -0.000662f, 0.000523f, -0.000086f, 0.002185f, 0.000568f, 0.001157f, 0.000574f, -0.001960f, 0.004112f, 0.004616f, 0.000263f, -0.003950f, 0.004312f, 0.001697f, 0.001327f, 0.002052f, -0.016141f, 0.005263f, -0.010276f, 0.001731f, 0.003366f, 0.003529f, -0.004700f, 0.008605f, 0.001390f, -0.003164f, -0.001454f, 0.010038f, 0.007222f, -0.004351f, -0.005584f, -0.004594f, 0.003905f, 0.007122f, -0.004274f, -0.004692f, 0.001416f, -0.018324f, -0.000020f, -0.007817f, -0.003065f, -0.007777f, -0.010180f, -0.001251f, 0.009312f, 0.002562f, -0.008291f, -0.002206f, 0.007976f, 0.002407f, -0.005078f, 0.008998f, -0.003891f, -0.012549f, -0.003713f, 0.007045f, -0.003086f, 0.008335f, 0.015964f, 0.012886f, 0.001812f, -0.000182f, - 0.004534f, -0.001961f, -0.009375f, 0.000092f, 0.003576f, -0.006745f, 0.005711f, -0.013370f, -0.001966f, 0.000820f, -0.005639f, -0.004375f, 0.005855f, 0.011636f, -0.009091f, -0.009545f, 0.005961f, 0.005946f, 0.011006f, 0.003519f, -0.006365f, 0.008744f, 0.007602f, -0.002537f, 0.008473f, -0.009347f, 0.009490f, 0.002271f, 0.006448f, 0.001273f, -0.004975f, -0.002901f, -0.000864f, 0.002057f, 0.000246f, -0.004614f, 0.001630f, 0.000022f, -0.002634f, -0.002231f, 0.000673f, -0.000710f, 0.002114f, 0.000089f, 0.003491f, -0.002522f, -0.001761f, -0.000161f, 0.000500f, 0.002940f, -0.001448f, -0.003007f, 0.001414f, 0.000073f, -0.000562f, 0.001985f, -0.000392f, 0.001187f, -0.001272f, 0.001195f, 0.001874f, 0.000193f, 0.002995f, 0.027504f, -0.010731f, -0.004744f, -0.001797f, 0.019821f, -0.002009f, 0.014983f, -0.010951f, 0.013199f, -0.013129f, -0.011522f, 0.002729f, 0.006234f, -0.007765f, -0.001931f, 0.003916f, -0.001043f, 0.005117f, -0.008004f, 0.009169f, 0.003298f, -0.009901f, -0.000405f, 0.003928f, 0.003061f, 0.001732f, 0.018647f, 0.014854f, 0.011617f, -0.000033f, 0.007531f, 0.000677f, 0.002152f, - 0.005562f, -0.017264f, -0.002666f, 0.010476f, 0.006805f, 0.008126f, -0.000224f, -0.003082f, 0.003774f, -0.000706f, 0.021035f, -0.003216f, 0.003522f, 0.002089f, 0.001000f, -0.006257f, 0.012603f, -0.001461f, 0.013105f, -0.007261f, -0.007618f, 0.005419f, -0.005085f, -0.017557f, -0.008107f, 0.003508f, -0.001694f, -0.012564f, 0.003472f, 0.000015f, 0.016292f, 0.001409f, 0.001388f, -0.005009f, 0.005913f, 0.006006f, -0.001367f, -0.000971f, 0.014308f, 0.010519f, 0.010438f, -0.006930f, -0.009867f, -0.008606f, -0.016837f, 0.001383f, -0.011928f, -0.004034f, 0.000723f, -0.006502f, -0.007432f, -0.004140f, -0.000864f, -0.002540f, 0.003929f, 0.007366f, -0.001408f, -0.000866f, -0.003341f, 0.001699f, -0.002427f, -0.002781f, 0.001155f, 0.002013f, 0.000005f, 0.002597f, -0.001546f, 0.000086f, -0.001494f, -0.000994f, -0.000827f, 0.001512f, -0.000934f, -0.000915f, -0.000568f, -0.002393f, -0.002744f, 0.000164f, -0.000326f, -0.003288f, 0.002769f, 0.002800f, 0.003381f, -0.000064f, -0.002405f, -0.001390f, 0.002652f, 0.000710f, 0.020386f, -0.015901f, -0.000264f, -0.016639f, -0.010883f, -0.006398f, 0.014696f, 0.008677f, - -0.020129f, -0.027575f, -0.010525f, 0.009914f, 0.007097f, -0.004019f, 0.009637f, 0.000226f, -0.002217f, 0.001213f, -0.014426f, 0.004520f, -0.001774f, 0.001348f, 0.004751f, 0.001117f, 0.000095f, 0.006251f, 0.005521f, -0.009551f, -0.009504f, 0.011150f, -0.003341f, -0.005292f, 0.006901f, -0.018826f, 0.004671f, 0.004087f, -0.017313f, 0.006486f, 0.018234f, 0.011081f, 0.012566f, 0.002674f, 0.007006f, 0.017295f, 0.003383f, 0.003402f, -0.019528f, 0.010528f, 0.015007f, 0.012276f, 0.002499f, 0.012469f, -0.013864f, 0.013949f, -0.003979f, -0.013670f, -0.021100f, -0.000078f, -0.013359f, -0.010781f, -0.004508f, -0.012833f, -0.032157f, 0.001535f, 0.001860f, -0.000950f, 0.005210f, 0.016040f, 0.006162f, 0.006550f, 0.004424f, -0.011419f, 0.001874f, 0.005537f, 0.004821f, 0.004236f, 0.004889f, -0.011722f, -0.003330f, -0.014811f, -0.006554f, -0.000940f, 0.003681f, -0.005329f, 0.005505f, 0.001200f, 0.001138f, -0.003607f, -0.000399f, -0.001850f, 0.000240f, -0.002011f, 0.002214f, 0.000786f, 0.001731f, -0.000411f, -0.002513f, -0.002141f, -0.002026f, 0.002435f, 0.001702f, 0.000136f, -0.000824f, -0.001927f, - -0.002008f, -0.002040f, -0.006498f, 0.001156f, 0.001183f, -0.004964f, -0.002422f, -0.001712f, -0.043658f, 0.021565f, 0.002816f, -0.016936f, 0.004167f, -0.001825f, -0.004972f, -0.003424f, -0.009582f, 0.005208f, -0.004896f, 0.001057f, 0.006332f, 0.005850f, 0.018967f, -0.007612f, -0.018060f, 0.009886f, -0.022911f, -0.009850f, 0.003774f, 0.003198f, 0.002645f, 0.007473f, 0.009235f, 0.007973f, -0.000140f, 0.010539f, 0.000710f, -0.004129f, 0.013969f, 0.008681f, -0.004224f, 0.008335f, -0.014400f, 0.027293f, 0.001052f, 0.005112f, -0.002535f, -0.023355f, -0.004031f, -0.008666f, -0.008177f, 0.003674f, 0.019519f, 0.000595f, 0.000836f, -0.002471f, -0.005363f, -0.012583f, 0.004013f, -0.002038f, 0.006999f, -0.015867f, 0.005385f, 0.008525f, 0.003747f, -0.011741f, -0.004172f, 0.003157f, 0.001536f, 0.009603f, 0.001890f, 0.033185f, -0.009445f, -0.014068f, -0.016040f, -0.004800f, 0.000348f, 0.011887f, -0.015979f, -0.002014f, -0.006846f, 0.007369f, -0.023337f, -0.000952f, -0.006319f, -0.009709f, 0.002913f, -0.002768f, 0.006370f, -0.000759f, 0.011700f, 0.007481f, -0.000033f, 0.002564f, 0.000905f, 0.001555f, - 0.013564f, 0.001716f, 0.009698f, 0.003606f, -0.002455f, 0.000341f, 0.000344f, 0.002898f, -0.001790f, 0.001539f, -0.000527f, 0.004209f, 0.000752f, -0.002966f, -0.004472f, 0.003719f, -0.001729f, -0.005206f, -0.002355f, -0.002680f, -0.001248f, -0.001505f, -0.000114f, 0.006702f, 0.000097f, 0.001980f, 0.000778f, 0.002792f, -0.002620f, -0.001312f, -0.004816f, -0.005334f, 0.020007f, -0.006085f, -0.004445f, 0.004512f, 0.006090f, -0.015664f, -0.015805f, -0.014437f, -0.013552f, -0.022338f, 0.014503f, -0.012967f, 0.004256f, 0.005741f, 0.020795f, -0.003145f, -0.004624f, 0.016335f, 0.003984f, 0.003618f, -0.018631f, -0.012129f, 0.009541f, 0.004278f, 0.007638f, 0.011350f, -0.019642f, 0.000463f, 0.008747f, 0.019229f, 0.000057f, 0.002034f, -0.002610f, 0.000251f, -0.012732f, -0.002222f, -0.003788f, -0.023910f, -0.001691f, 0.007615f, -0.013611f, 0.006168f, -0.014829f, 0.000147f, -0.010185f, -0.001913f, -0.003010f, 0.001593f, 0.019716f, -0.005449f, 0.000501f, 0.010207f, -0.005339f, 0.006071f, -0.015920f, -0.028578f, -0.015409f, -0.008510f, -0.003842f, 0.003286f, 0.019450f, -0.008820f, 0.005387f, 0.004894f, - -0.013594f, 0.004885f, -0.010417f, -0.003535f, 0.007264f, 0.019705f, -0.002767f, -0.000839f, 0.006453f, -0.000237f, -0.018086f, -0.017130f, -0.007051f, 0.017502f, -0.001865f, -0.025745f, 0.002051f, -0.016848f, -0.007346f, -0.003343f, -0.001590f, 0.005957f, -0.006351f, -0.001793f, 0.006670f, -0.001634f, 0.007796f, 0.006757f, 0.004959f, -0.002888f, 0.007638f, -0.006433f, -0.004770f, -0.004503f, 0.001329f, -0.000583f, -0.001219f, -0.001381f, -0.001073f, -0.002108f, 0.001683f, -0.000419f, 0.004993f, -0.003131f, -0.001902f, 0.002194f, -0.002676f, -0.001518f, -0.007295f, -0.008892f, -0.000602f, 0.000895f, 0.004661f, 0.000776f, 0.002892f, 0.000387f, 0.019056f, 0.020014f, -0.006343f, 0.001715f, 0.020993f, -0.021684f, -0.019328f, 0.016040f, -0.004054f, 0.002061f, 0.014526f, -0.003055f, -0.004203f, 0.014541f, -0.027392f, 0.011447f, -0.001413f, 0.004463f, 0.013056f, 0.013518f, -0.015427f, 0.002749f, -0.021127f, 0.006303f, -0.006497f, -0.002376f, -0.014767f, -0.000879f, -0.021084f, 0.001892f, -0.018304f, 0.012547f, -0.006558f, 0.002272f, 0.022378f, 0.010353f, 0.009901f, -0.018155f, 0.003106f, 0.020824f, - -0.005172f, -0.029880f, 0.015754f, -0.003749f, 0.002691f, -0.005969f, -0.014027f, 0.019553f, 0.006841f, 0.015915f, 0.003773f, 0.002216f, -0.013451f, -0.017257f, 0.005945f, 0.007932f, 0.008370f, 0.011317f, 0.026100f, -0.000968f, -0.020671f, -0.013386f, 0.015609f, -0.002373f, -0.017810f, -0.004702f, -0.001337f, -0.004868f, -0.022479f, 0.000275f, 0.002773f, 0.005476f, -0.008320f, 0.012737f, -0.000929f, 0.001349f, 0.017941f, 0.009254f, 0.018687f, -0.018723f, -0.008093f, 0.003389f, -0.010551f, 0.008448f, 0.004922f, 0.005157f, -0.001086f, -0.002418f, -0.001876f, -0.000330f, -0.007669f, 0.009361f, -0.003766f, 0.005729f, -0.001851f, 0.006681f, -0.003014f, -0.003362f, 0.000075f, 0.003830f, -0.003660f, -0.000152f, -0.001178f, -0.003729f, -0.002224f, 0.001682f, -0.004441f, -0.001290f, -0.009024f, -0.006771f, 0.003281f, 0.005961f, 0.002726f, 0.002712f, -0.001292f, -0.000715f, -0.004445f, -0.000655f, 0.004055f, -0.005780f, -0.001231f, 0.002667f, -0.001582f, 0.004675f, 0.004107f, -0.003232f, -0.001740f, 0.004184f, 0.002458f, -0.002169f, -0.000145f, 0.015299f, -0.018647f, 0.021817f, -0.004925f, 0.023078f, - -0.018868f, 0.017081f, 0.001867f, -0.001813f, 0.028744f, -0.015030f, 0.001707f, -0.014588f, -0.004359f, 0.043824f, 0.021138f, 0.009302f, 0.006328f, 0.012462f, -0.007018f, -0.000061f, -0.037068f, 0.006881f, -0.001562f, -0.016025f, 0.017753f, 0.013329f, -0.000570f, 0.003165f, -0.021428f, 0.018870f, -0.010016f, 0.020041f, 0.013114f, 0.010702f, -0.015380f, -0.002700f, -0.012934f, 0.019245f, 0.004414f, -0.007003f, 0.034087f, 0.016307f, -0.003865f, 0.001796f, -0.028273f, 0.004803f, 0.001293f, 0.022449f, -0.010100f, -0.028731f, -0.004963f, -0.007945f, -0.005606f, -0.040609f, -0.020261f, -0.043253f, -0.022059f, -0.015452f, 0.005073f, -0.010867f, 0.020406f, 0.002559f, -0.023377f, 0.014106f, -0.015647f, 0.022104f, -0.019714f, -0.015955f, 0.011490f, 0.019693f, 0.019362f, 0.000082f, -0.018198f, -0.014487f, 0.008868f, -0.011877f, 0.000424f, -0.005987f, 0.007298f, -0.008143f, -0.012031f, 0.021196f, 0.009793f, 0.002921f, -0.003397f, 0.008009f, 0.004485f, 0.009852f, -0.000951f, 0.006684f, 0.002326f, 0.011063f, 0.000186f, -0.000481f, 0.000591f, -0.005394f, 0.000160f, 0.002860f, 0.001320f, 0.001252f, - 0.000260f, 0.008537f, 0.003858f, -0.006660f, 0.000707f, 0.003910f, -0.002157f, -0.002511f, -0.001660f, 0.000564f, 0.001583f, 0.004330f, -0.001112f, 0.002972f, 0.004927f, -0.000974f, -0.005082f, -0.000382f, -0.005537f, -0.002351f, -0.005117f, -0.003203f, 0.004359f, 0.000370f, -0.002882f, 0.002906f, 0.001564f, 0.006099f, -0.003597f, -0.001793f, -0.005477f, 0.002421f, 0.001193f, -0.026325f, -0.031353f, -0.020606f, -0.002520f, 0.000111f, -0.003616f, 0.008097f, 0.012050f, 0.008528f, 0.000514f, 0.004815f, -0.009597f, 0.007161f, -0.020015f, -0.028104f, 0.001418f, 0.022469f, 0.004362f, -0.007207f, 0.018080f, 0.010916f, 0.017517f, 0.029135f, 0.004234f, -0.008315f, -0.017716f, -0.014079f, 0.008880f, -0.016214f, -0.011087f, 0.004830f, -0.012727f, -0.028673f, -0.015487f, -0.001093f, -0.002870f, 0.007348f, -0.006047f, 0.016694f, 0.005217f, 0.006658f, 0.022902f, -0.003064f, 0.003176f, 0.005713f, -0.017343f, 0.021597f, 0.003991f, -0.018964f, -0.031365f, 0.008641f, 0.003389f, -0.022644f, 0.025048f, 0.016452f, -0.020957f, 0.007803f, 0.021140f, 0.012131f, 0.006052f, 0.017654f, -0.007309f, -0.006372f, - 0.001822f, -0.008947f, -0.014653f, 0.026517f, -0.022637f, -0.002044f, 0.010219f, 0.002765f, 0.040906f, -0.034510f, 0.011221f, -0.003937f, 0.000363f, 0.011836f, 0.000984f, 0.002966f, -0.008899f, 0.005893f, -0.020265f, -0.043543f, -0.001955f, 0.000016f, -0.022139f, -0.013857f, -0.002632f, 0.008892f, 0.007797f, 0.003666f, 0.002392f, -0.006786f, 0.000301f, -0.009728f, -0.004661f, -0.001433f, -0.005447f, -0.008711f, 0.003705f, -0.001198f, 0.002108f, -0.004181f, -0.002951f, 0.002761f, -0.007039f, -0.015513f, -0.005101f, 0.001659f, -0.003843f, -0.014935f, -0.008138f, 0.007011f, 0.004929f, 0.003631f, -0.002558f, -0.005378f, -0.006918f, -0.000794f, -0.003219f, -0.008218f, -0.006780f, -0.009791f, -0.004908f, -0.006412f, -0.006506f, 0.000388f, -0.001204f, 0.003412f, -0.002236f, 0.003328f, -0.001873f, 0.005791f, -0.007676f, -0.020695f, 0.018420f, -0.037499f, -0.026622f, 0.019926f, -0.000838f, -0.034138f, 0.017649f, -0.019925f, 0.038855f, 0.007874f, -0.050961f, -0.006375f, 0.004711f, -0.012772f, 0.003908f, 0.009018f, 0.018179f, 0.015635f, -0.029586f, -0.001172f, 0.002830f, -0.006019f, -0.027115f, -0.004069f, - -0.005588f, -0.009197f, -0.008240f, -0.000255f, 0.002055f, 0.023265f, 0.025375f, -0.007709f, 0.013682f, 0.011933f, 0.011553f, 0.025400f, 0.000350f, 0.006946f, -0.029058f, -0.009837f, 0.010273f, -0.005587f, 0.014063f, 0.034827f, 0.005124f, -0.030162f, -0.067591f, 0.000024f, -0.020831f, 0.019380f, -0.012770f, -0.006700f, -0.013278f, -0.036331f, 0.015900f, 0.049018f, 0.002862f, 0.012995f, -0.038300f, 0.008133f, -0.004345f, -0.017042f, 0.004394f, 0.018938f, 0.009732f, 0.015326f, -0.016499f, 0.024451f, 0.014202f, -0.028012f, -0.041955f, -0.002442f, -0.031907f, -0.029606f, -0.019032f, -0.021762f, 0.002856f, 0.039574f, 0.015091f, 0.001699f, -0.005270f, 0.025579f, -0.012907f, -0.018593f, -0.003035f, 0.004210f, -0.002981f, 0.004937f, 0.003911f, 0.000510f, 0.003958f, 0.009975f, 0.003547f, -0.000759f, 0.000706f, -0.003458f, -0.003746f, 0.010466f, -0.003094f, 0.010308f, 0.000227f, -0.005355f, 0.001212f, -0.002667f, -0.004242f, 0.012413f, -0.002935f, 0.006868f, -0.014879f, -0.001570f, 0.007209f, 0.000264f, 0.002940f, 0.012696f, -0.009301f, 0.011637f, -0.001159f, 0.001609f, 0.003441f, -0.003441f, - 0.008616f, 0.001619f, 0.000490f, 0.001889f, 0.000398f, 0.004317f, 0.011097f, -0.004264f, 0.003874f, 0.004755f, 0.004291f, 0.005311f, -0.001774f, -0.073766f, -0.046589f, 0.033403f, 0.026896f, 0.043767f, -0.000183f, 0.017224f, 0.004252f, 0.013792f, -0.000580f, 0.008882f, -0.019430f, -0.023303f, -0.014465f, -0.020867f, -0.013461f, -0.014879f, 0.017804f, 0.042065f, 0.009181f, -0.051418f, -0.012219f, 0.008963f, -0.013657f, 0.012509f, -0.029380f, -0.002421f, -0.001001f, 0.001664f, 0.014311f, 0.010810f, 0.002006f, -0.003584f, -0.006567f, 0.011911f, 0.023237f, -0.018677f, -0.028903f, 0.019176f, 0.009152f, 0.025167f, 0.011513f, 0.036609f, -0.025364f, -0.008957f, 0.023407f, 0.034901f, 0.030372f, 0.017924f, 0.008547f, -0.007556f, 0.002299f, -0.004465f, 0.000130f, 0.012053f, -0.045677f, 0.024489f, -0.003604f, 0.006588f, -0.003023f, 0.034617f, -0.010587f, -0.000584f, -0.007610f, 0.021925f, 0.018672f, -0.039039f, 0.027953f, -0.033221f, -0.001679f, -0.016885f, -0.016675f, 0.015060f, 0.002765f, -0.051750f, -0.004581f, -0.004156f, -0.009536f, -0.006097f, -0.001215f, -0.006679f, 0.026845f, 0.002557f, - 0.025680f, -0.008206f, 0.030366f, 0.014240f, -0.015682f, 0.006595f, -0.003916f, 0.001656f, 0.001975f, 0.002775f, 0.004099f, 0.001475f, -0.005881f, -0.009816f, 0.015111f, 0.006605f, 0.012405f, 0.003366f, -0.007367f, 0.014172f, 0.000567f, 0.000654f, 0.010767f, -0.030230f, -0.013959f, -0.013488f, 0.004246f, -0.000504f, -0.020457f, 0.000789f, 0.003454f, -0.001045f, -0.003829f, -0.000152f, 0.007054f, -0.007585f, -0.000282f, 0.008058f, 0.004088f, 0.009842f, -0.008664f, -0.004357f, 0.002500f, 0.010686f, 0.040873f, -0.045597f, -0.001105f, -0.025943f, -0.073072f, -0.008693f, -0.027005f, -0.057691f, 0.011461f, -0.000433f, -0.011256f, 0.003562f, 0.030917f, -0.002065f, -0.032793f, 0.011174f, 0.001268f, -0.010583f, -0.007930f, -0.005900f, 0.001602f, 0.035630f, -0.008064f, -0.001377f, 0.016154f, 0.011915f, -0.005191f, 0.017220f, 0.015765f, -0.007686f, -0.007548f, -0.014404f, 0.019811f, -0.004812f, -0.034250f, 0.005158f, -0.002315f, 0.011687f, 0.044767f, -0.029980f, -0.048033f, -0.030329f, -0.014062f, 0.006569f, 0.015962f, 0.008441f, 0.034068f, 0.016981f, -0.024087f, -0.013951f, -0.032838f, 0.028325f, - 0.017427f, 0.003090f, 0.005987f, -0.018885f, 0.001942f, -0.019978f, 0.034348f, 0.033672f, 0.002369f, -0.015793f, -0.008781f, 0.003259f, 0.031267f, 0.062406f, 0.038414f, -0.005988f, -0.013994f, 0.000789f, 0.019853f, 0.008560f, 0.018322f, 0.025240f, -0.025111f, -0.001245f, -0.048399f, -0.032674f, -0.031111f, -0.020900f, 0.012978f, 0.029618f, 0.020373f, 0.003154f, -0.005945f, -0.002860f, -0.026954f, -0.033930f, -0.008574f, -0.018064f, -0.016991f, 0.003809f, -0.003462f, -0.004407f, 0.000158f, 0.001008f, 0.007708f, -0.008703f, 0.017277f, -0.017665f, 0.007407f, -0.022463f, -0.007524f, -0.000126f, 0.004124f, -0.000757f, 0.003915f, 0.008482f, -0.006094f, 0.000916f, 0.020536f, 0.025005f, 0.030194f, 0.016489f, 0.018907f, 0.008470f, 0.003583f, 0.001312f, 0.000518f, 0.001041f, -0.005304f, -0.016422f, -0.016008f, -0.002759f, 0.012410f, -0.000120f, 0.001899f, -0.006787f, -0.004763f, 0.001804f, 0.015190f, 0.009476f, 0.018132f, 0.014574f, 0.012993f, 0.015663f, -0.035637f, -0.004174f, -0.018448f, 0.026852f, -0.029608f, 0.005760f, 0.002615f, 0.052502f, -0.032449f, -0.009494f, -0.033376f, -0.007204f, - -0.032968f, -0.027698f, -0.019992f, 0.010362f, -0.035465f, -0.025718f, -0.038567f, -0.009834f, -0.005799f, -0.011787f, -0.017428f, -0.042975f, 0.011241f, -0.030372f, 0.012284f, -0.031867f, 0.039299f, 0.006070f, 0.017613f, -0.007569f, -0.037074f, 0.019877f, 0.011496f, -0.012461f, 0.019846f, 0.027789f, -0.015017f, -0.039927f, -0.021398f, 0.053556f, -0.022884f, -0.001730f, 0.001373f, -0.009067f, 0.011762f, 0.034716f, 0.006149f, 0.014775f, -0.011184f, 0.024840f, 0.000338f, 0.019570f, 0.005949f, 0.006653f, -0.000618f, 0.002019f, 0.042439f, 0.012881f, 0.101620f, -0.062024f, 0.039590f, 0.055709f, -0.014733f, 0.001280f, 0.028710f, -0.020810f, -0.006121f, 0.046643f, 0.018452f, -0.007769f, 0.024727f, -0.010590f, -0.045188f, -0.033405f, 0.011306f, 0.001818f, -0.060371f, -0.016793f, -0.006204f, -0.031340f, 0.016066f, 0.009389f, -0.020413f, -0.016690f, -0.012347f, 0.001758f, 0.005506f, 0.012762f, -0.010642f, 0.001491f, 0.007403f, -0.003355f, -0.013472f, 0.003682f, 0.002752f, 0.004206f, 0.012481f, 0.002210f, -0.007714f, 0.000989f, 0.014461f, 0.012855f, 0.006186f, -0.014461f, -0.000401f, 0.026502f, - -0.007668f, -0.005649f, 0.014632f, -0.014471f, -0.025065f, -0.007174f, 0.001255f, -0.003312f, -0.012931f, -0.004012f, -0.000899f, -0.014213f, -0.003066f, 0.001424f, -0.004066f, -0.014764f, -0.024338f, 0.009088f, 0.025840f, 0.009294f, -0.000714f, 0.000814f, -0.005054f, -0.015526f, -0.012493f, 0.056435f, 0.063078f, 0.000804f, 0.045509f, 0.045327f, -0.002599f, 0.020369f, -0.045773f, -0.014227f, 0.040372f, 0.003790f, 0.039860f, 0.055829f, 0.045954f, -0.009307f, 0.029959f, -0.046876f, -0.073098f, -0.031299f, -0.027396f, 0.017549f, 0.000049f, 0.018780f, 0.020288f, 0.043960f, 0.033988f, 0.011836f, -0.034896f, -0.004272f, 0.034737f, 0.011170f, -0.017168f, 0.022369f, 0.047927f, -0.005438f, 0.016628f, -0.039207f, 0.018672f, -0.030959f, -0.008471f, -0.019669f, -0.040713f, 0.024875f, 0.002726f, 0.012112f, 0.048549f, -0.026346f, -0.029661f, 0.017511f, 0.050309f, -0.039651f, -0.026590f, 0.016334f, -0.012881f, 0.071137f, 0.052606f, -0.050147f, -0.019012f, -0.039657f, 0.002025f, 0.043373f, -0.020258f, -0.030232f, -0.013862f, 0.002597f, 0.010351f, -0.036179f, 0.008534f, 0.072494f, 0.005141f, -0.048600f, - -0.074209f, 0.059703f, -0.071591f, -0.060086f, -0.035226f, -0.030778f, -0.051839f, 0.013703f, 0.012985f, 0.083001f, 0.020632f, 0.036407f, -0.018526f, 0.039597f, -0.005032f, -0.017167f, 0.014831f, 0.001645f, -0.004018f, 0.040604f, 0.005006f, 0.020676f, 0.025771f, 0.013848f, 0.030935f, -0.009065f, 0.008214f, -0.006964f, -0.002730f, -0.006931f, -0.026399f, -0.019593f, -0.021836f, 0.024697f, 0.008673f, 0.021967f, 0.027267f, -0.006305f, 0.016254f, 0.035412f, 0.012621f, -0.011770f, 0.018174f, 0.021151f, 0.007134f, -0.005274f, -0.026084f, -0.023473f, 0.022903f, 0.009527f, 0.015166f, 0.030206f, 0.067419f, 0.028833f, 0.016851f, 0.012161f, 0.018932f, -0.010365f, -0.002460f, 0.033828f, -0.022129f, -0.027066f, -0.005459f, 0.012866f, -0.011797f, 0.012195f, 0.007243f, -0.065744f, -0.037990f, -0.049363f, 0.013398f, 0.027864f, 0.009946f, 0.042612f, 0.038220f, 0.053972f, 0.016874f, 0.058914f, 0.026369f, 0.038145f, -0.018402f, -0.006991f, -0.018499f, -0.044816f, -0.032242f, -0.069505f, -0.041285f, -0.013077f, -0.040562f, 0.009350f, -0.001427f, -0.000692f, 0.016846f, 0.014107f, 0.006494f, 0.034211f, - -0.008352f, -0.027638f, 0.040619f, 0.004151f, -0.053418f, -0.022674f, -0.005659f, -0.063925f, -0.048720f, -0.047034f, 0.004513f, 0.023407f, 0.006337f, -0.024243f, -0.003015f, 0.027387f, 0.016666f, 0.064553f, 0.012033f, -0.085642f, -0.028635f, -0.014378f, 0.013825f, 0.013983f, -0.009845f, -0.022308f, 0.031973f, -0.047160f, -0.008811f, -0.037688f, 0.029029f, -0.074605f, -0.046558f, -0.060720f, -0.049249f, 0.002970f, -0.027776f, -0.020823f, -0.049435f, 0.025514f, 0.088794f, -0.001636f, 0.057378f, -0.031181f, 0.014036f, -0.041480f, -0.000231f, 0.063962f, 0.015006f, -0.029187f, 0.003265f, 0.025082f, -0.042829f, -0.065432f, -0.035748f, 0.017683f, -0.051613f, 0.022894f, -0.000913f, -0.000640f, 0.032867f, 0.018053f, -0.009005f, 0.039161f, 0.037977f, 0.031484f, -0.010295f, -0.009692f, -0.006931f, 0.000416f, 0.026353f, 0.020021f, 0.013161f, 0.001590f, 0.027455f, 0.016314f, 0.003960f, 0.004596f, 0.020221f, -0.007595f, -0.007391f, 0.015304f, -0.021756f, 0.020331f, -0.018970f, -0.017241f, -0.022277f, 0.039341f, 0.023382f, 0.036668f, 0.012546f, 0.014526f, 0.002647f, 0.003636f, 0.016851f, -0.025530f, - -0.043546f, 0.004571f, 0.011414f, 0.011968f, 0.015752f, -0.002787f, -0.017288f, 0.049492f, 0.020382f, 0.049929f, -0.080855f, 0.035428f, 0.061142f, -0.005668f, 0.070384f, -0.036930f, -0.106848f, -0.055138f, -0.000547f, -0.010413f, 0.012010f, -0.038079f, 0.037187f, 0.052581f, -0.046914f, 0.041826f, -0.025625f, -0.031292f, -0.074585f, -0.030235f, -0.042795f, -0.028075f, -0.034202f, 0.034013f, 0.005184f, -0.066685f, -0.085621f, 0.065095f, 0.014802f, 0.023535f, -0.019916f, 0.005505f, -0.023078f, 0.000931f, 0.019838f, 0.030217f, 0.027226f, 0.072871f, 0.002453f, -0.051739f, 0.070492f, -0.007121f, -0.018165f, -0.032342f, 0.029814f, -0.057554f, -0.038768f, 0.033189f, -0.030001f, -0.044747f, -0.056486f, -0.049235f, -0.010490f, 0.006981f, 0.005462f, -0.014953f, 0.061117f, 0.052304f, -0.004917f, -0.029248f, -0.050931f, -0.058194f, 0.014545f, 0.012727f, -0.011434f, -0.005340f, 0.083847f, 0.006035f, -0.024354f, 0.036578f, 0.017467f, -0.054809f, 0.044007f, 0.080113f, -0.087323f, 0.141609f, 0.037807f, 0.041177f, 0.015556f, 0.041471f, -0.011135f, -0.086766f, 0.059794f, 0.005508f, -0.010759f, 0.062476f, - -0.073544f, 0.013320f, 0.013011f, 0.000016f, -0.007046f, 0.003534f, -0.005680f, -0.019909f, 0.010929f, 0.022216f, -0.018070f, -0.001880f, -0.026762f, -0.030314f, 0.039960f, -0.008385f, -0.019532f, 0.009609f, -0.010632f, -0.024020f, -0.044338f, -0.009740f, -0.015049f, 0.039311f, -0.037202f, -0.003296f, 0.045778f, -0.009219f, 0.036585f, -0.012587f, -0.031949f, 0.017111f, -0.006427f, -0.014711f, 0.018946f, 0.004964f, 0.050407f, -0.006243f, -0.000771f, 0.032864f, 0.100920f, 0.044152f, 0.002064f, -0.034200f, 0.048062f, -0.001118f, 0.003213f, -0.023532f, 0.043845f, -0.051513f, 0.037100f, 0.035593f, 0.037585f, 0.017984f, -0.014121f, 0.049844f, 0.062683f, -0.013168f, 0.025764f, -0.039344f, 0.063082f, 0.026684f, 0.020976f, -0.040708f, -0.088450f, 0.017249f, -0.027231f, -0.020500f, -0.035984f, -0.045465f, 0.027106f, 0.011900f, -0.022080f, 0.004709f, 0.001986f, -0.024184f, -0.107995f, -0.007072f, -0.023024f, -0.011408f, -0.001771f, 0.075676f, 0.051798f, -0.025698f, 0.019493f, -0.050438f, 0.005500f, 0.037131f, -0.057322f, -0.053456f, -0.043736f, 0.068455f, -0.049547f, 0.013950f, 0.055173f, -0.074859f, - -0.069286f, 0.063366f, 0.050616f, 0.053130f, 0.071396f, 0.026058f, -0.091548f, 0.020248f, 0.026959f, -0.008473f, 0.149277f, -0.015839f, -0.022826f, -0.067897f, -0.058433f, 0.029710f, -0.053862f, 0.034661f, 0.012140f, 0.039254f, 0.081751f, -0.052905f, -0.035874f, 0.099214f, -0.060747f, -0.067424f, 0.043731f, -0.086723f, 0.062712f, -0.066047f, 0.014904f, 0.022141f, -0.047568f, 0.019282f, -0.055210f, 0.037962f, 0.070344f, -0.003318f, 0.012184f, 0.014015f, 0.002589f, -0.021955f, -0.020292f, -0.005064f, 0.020391f, -0.009543f, 0.013761f, -0.014747f, -0.043642f, 0.018245f, 0.003871f, 0.029208f, 0.014729f, 0.025442f, -0.008808f, -0.009124f, -0.043241f, 0.029898f, -0.005794f, -0.040003f, 0.009301f, 0.080877f, 0.022584f, -0.021279f, 0.024018f, 0.043319f, -0.021605f, 0.004286f, 0.033728f, -0.017384f, 0.033648f, 0.010866f, -0.010345f, -0.052866f, 0.009074f, -0.020539f, -0.001061f, 0.064716f, -0.029595f, 0.002900f, 0.012835f, 0.008947f, -0.018428f, 0.021552f, 0.074087f, 0.005396f, -0.064771f, 0.090390f, 0.021328f, -0.006959f, 0.064226f, 0.031363f, 0.051809f, 0.018779f, -0.079047f, -0.018103f, - -0.030048f, 0.035926f, 0.090387f, -0.058695f, 0.013961f, -0.028649f, 0.039846f, 0.045741f, -0.062259f, 0.050430f, -0.050142f, -0.045375f, 0.021894f, 0.041341f, 0.001096f, 0.013105f, 0.032230f, -0.050734f, 0.043289f, 0.002528f, 0.052991f, -0.010444f, -0.014835f, 0.016574f, 0.078808f, -0.036600f, 0.063553f, -0.031994f, 0.012304f, 0.015863f, 0.063523f, -0.004699f, -0.004794f, 0.021148f, 0.096080f, 0.005443f, -0.076202f, -0.007073f, -0.091610f, 0.053721f, -0.000401f, 0.148256f, 0.031350f, -0.044555f, -0.013824f, 0.032043f, -0.033594f, 0.051455f, 0.096784f, 0.065717f, 0.000891f, 0.027381f, 0.041607f, -0.005755f, -0.045875f, -0.007185f, -0.010867f, -0.156708f, 0.096545f, 0.071484f, 0.066279f, 0.015162f, -0.068020f, -0.021176f, 0.050311f, 0.025361f, 0.043749f, 0.022880f, -0.149703f, -0.054333f, 0.091037f, 0.024161f, 0.029018f, 0.077843f, -0.056431f, -0.002875f, -0.008421f, 0.043618f, 0.010731f, -0.005496f, -0.012739f, 0.034130f, -0.009813f, -0.041805f, 0.019607f, -0.020751f, -0.023910f, 0.019994f, 0.030403f, -0.024038f, -0.007752f, -0.001982f, 0.023867f, -0.032463f, 0.024825f, -0.028823f, - 0.012467f, -0.048984f, -0.049495f, 0.047336f, 0.005732f, 0.003093f, -0.006184f, -0.036522f, -0.011439f, 0.031288f, 0.002931f, 0.009830f, 0.053537f, -0.009595f, -0.041624f, -0.005180f, -0.023891f, 0.017228f, 0.019704f, -0.020791f, -0.017130f, 0.020096f, 0.044271f, 0.055425f, -0.002300f, 0.058733f, -0.036234f, 0.059773f, -0.054603f, 0.009285f, 0.028586f, -0.027995f, 0.004016f, 0.011320f, -0.014948f, -0.029215f, -0.055278f, 0.084289f, -0.018900f, -0.016459f, -0.028128f, -0.004581f, -0.011652f, 0.027505f, -0.056674f, -0.016172f, -0.035503f, 0.012322f, -0.035701f, 0.034359f, -0.000334f, 0.017802f, -0.039382f, -0.071355f, 0.003256f, -0.052092f, -0.054773f, 0.024973f, -0.042059f, -0.035236f, 0.068997f, -0.025345f, -0.040606f, 0.005441f, -0.041760f, 0.019785f, 0.025921f, -0.007323f, -0.034167f, -0.009610f, 0.019577f, 0.017739f, -0.015675f, -0.001134f, 0.060732f, -0.010525f, -0.037895f, -0.047446f, -0.007151f, -0.020586f, -0.072249f, 0.067904f, 0.023048f, -0.082232f, 0.050563f, -0.003266f, -0.034977f, 0.159333f, 0.089148f, 0.073608f, 0.038479f, 0.022784f, -0.038098f, 0.006348f, 0.017091f, 0.019209f, - 0.006710f, 0.070077f, 0.015170f, -0.020131f, -0.034708f, -0.140047f, 0.028229f, 0.019014f, -0.001164f, -0.026878f, -0.053442f, -0.009894f, -0.034618f, -0.029954f, -0.002723f, 0.044992f, -0.030970f, 0.077409f, 0.010704f, -0.014686f, -0.005952f, -0.005886f, 0.005526f, 0.032974f, -0.013146f, 0.008782f, 0.022054f, 0.008520f, 0.003724f, 0.018385f, -0.029303f, 0.014663f, 0.004491f, 0.045673f, -0.016303f, -0.010461f, -0.013070f, -0.010570f, -0.036392f, -0.018634f, 0.012272f, -0.038142f, 0.028291f, -0.007059f, -0.019368f, 0.027598f, 0.016218f, 0.023361f, -0.009212f, -0.002665f, 0.002162f, 0.005175f, -0.025464f, 0.013819f, 0.000903f, -0.000244f, -0.003095f, 0.017002f, 0.008048f, -0.073295f, 0.122376f, 0.015164f, 0.039776f, 0.021460f, -0.030962f, 0.022353f, 0.034118f, 0.008132f, -0.004012f, -0.030192f, -0.005691f, 0.007890f, -0.014368f, -0.011038f, 0.004674f, 0.013306f, 0.035271f, -0.025248f, 0.014563f, 0.000967f, 0.028060f, -0.010564f, 0.005185f, 0.008913f, -0.033238f, 0.026163f, 0.003854f, 0.006113f, 0.009108f, 0.009361f, -0.021225f, 0.021658f, -0.018356f, 0.004051f, 0.020757f, -0.012035f, - 0.020345f, -0.009465f, 0.025763f, 0.019842f, 0.011382f, -0.032988f, 0.023868f, 0.017971f, 0.014359f, 0.040013f, -0.039369f, -0.003900f, -0.000777f, -0.008777f, 0.011498f, -0.020618f, -0.032679f, 0.021639f, 0.024622f, 0.012057f, -0.003493f, 0.004820f, -0.003873f, 0.012524f, -0.011717f, 0.004788f, -0.024358f, 0.021316f, -0.037596f, 0.034626f, 0.019206f, -0.012295f, -0.000910f, 0.014083f, 0.000654f, 0.012571f, -0.000119f, 0.000979f, -0.001628f, -0.013125f, 0.017654f, 0.023931f, -0.021926f, -0.005461f, 0.004144f, 0.013051f, -0.010155f, -0.010783f, 0.002493f, 0.003951f, -0.002805f, 0.001937f, -0.008273f, 0.002479f, 0.009716f, -0.008350f, 0.001808f, 0.005402f, -0.008451f, 0.006432f, 0.008486f, -0.001331f, -0.003160f, -0.004723f, 0.001401f, 0.017725f, -0.007181f, 0.001832f, -0.017248f, 0.000474f, 0.018515f, -0.013855f, 0.013715f, -0.007018f, 0.000787f, 0.030591f, -0.005730f, 0.000059f, -0.000917f, -0.010172f, 0.015878f, 0.006036f, 0.006687f, 0.006034f, -0.005324f, 0.003586f, 0.017447f, -0.005733f, 0.011821f, -0.008430f, -0.001531f, 0.023549f, -0.098236f, -0.228574f, -0.036704f, 0.133555f, - 0.121180f, 0.298747f, 0.155881f, -0.080540f, -0.024915f, -0.165594f, -0.281142f, -0.019486f, -0.127889f, -0.017873f, 0.204472f, 0.087337f, 0.157916f, 0.242707f, -0.028484f, -0.035630f, -0.123564f, -0.209759f, -0.166980f, -0.010799f, -0.062907f, -0.023783f, 0.173953f, 0.055209f, 0.113054f, 0.205911f, 0.033463f, -0.000867f, 0.021037f, -0.125286f, -0.189952f, 0.032571f, -0.196283f, -0.128226f, 0.043199f, -0.019715f, 0.031552f, 0.252241f, 0.028628f, 0.096703f, 0.205640f, -0.041025f, 0.006064f, 0.045940f, -0.198894f, -0.165567f, -0.059021f, -0.225959f, -0.087874f, 0.028826f, 0.041451f, 0.155680f, 0.218869f, 0.156312f, 0.109940f, 0.096150f, -0.036891f, -0.132327f, -0.109086f, -0.163606f, -0.172336f, -0.073648f, -0.043962f, 0.001215f, 0.143915f, 0.172230f, 0.053500f, 0.134606f, 0.038836f, -0.042509f, 0.027901f, -0.093675f, -0.130764f, -0.025413f, -0.060971f, -0.040418f, 0.073057f, -0.002616f, 0.050814f, 0.091514f, -0.025516f, -0.001888f, -0.000440f, -0.046135f, -0.014695f, -0.003049f, -0.035146f, 0.038862f, 0.013574f, -0.008857f, 0.062781f, 0.020341f, -0.009534f, 0.060956f, -0.021828f, -0.064945f, - 0.000806f, -0.099302f, -0.070133f, 0.021712f, -0.066704f, 0.014377f, 0.076208f, 0.056608f, 0.104054f, 0.114276f, 0.041012f, 0.040572f, -0.005316f, -0.093760f, -0.131948f, -0.134947f, -0.141785f, -0.089476f, -0.007318f, 0.045621f, 0.096986f, 0.169722f, 0.181201f, 0.151249f, 0.117545f, -0.006725f, -0.111652f, -0.158876f, -0.204182f, -0.207300f, -0.111363f, -0.033024f, 0.086301f, 0.184252f, 0.165885f, 0.100802f, 0.073714f, 0.022102f, -0.016128f, -0.024435f, -0.073975f, -0.084277f, -0.064334f, -0.052776f, -0.038828f, -0.007289f, 0.007141f, 0.031155f, 0.044969f, 0.047224f, 0.044306f, 0.041279f, 0.019895f, 0.001500f, -0.016027f, -0.023973f, -0.035554f, -0.034327f, -0.026423f, -0.013966f, -0.006020f, 0.006553f, 0.011273f, 0.016281f, 0.012833f, 0.011110f, 0.008848f, 0.008733f, 0.002494f, 0.002317f, 0.001898f, 0.000788f, -0.004221f, -0.001229f, -0.006334f, -0.012221f, -0.013283f, -0.012597f, -0.011935f, -0.000495f, 0.001885f, 0.006730f, 0.014221f, 0.017456f, 0.016270f, 0.014737f, 0.004964f, -0.001634f, -0.010073f, -0.015324f, -0.017356f, -0.013108f, -0.009409f, -0.003419f, 0.002670f, 0.007956f, - 0.008734f, 0.010012f, 0.007830f, 0.005363f, 0.002708f, -0.000058f, -0.003891f, -0.002906f, -0.004157f, -0.003304f, -0.002606f, -0.002612f, -0.001274f, 0.000560f, -0.002128f, -0.001271f, -0.000276f, 0.001100f, 0.002595f, 0.002581f, 0.002739f, 0.004468f, 0.002880f, 0.001534f, -0.000136f, -0.002095f, -0.003504f, -0.003484f, -0.003938f, -0.002791f, -0.001602f, -0.000358f, 0.000830f, 0.001864f, 0.001881f, 0.001989f, 0.001631f, 0.001113f, 0.000282f, -0.000081f, -0.000545f, -0.000782f, -0.000868f} - }, - { - {-0.008179f, 0.008688f, 0.002212f, -0.004646f, -0.002042f, -0.010413f, -0.002752f, 0.008817f, -0.004587f, -0.003324f, 0.002749f, -0.001310f, -0.000282f, 0.000613f, -0.002748f, -0.002187f, 0.010671f, 0.005229f, -0.001246f, 0.000583f, -0.001533f, -0.003108f, 0.001510f, 0.003862f, 0.005892f, -0.001427f, 0.002282f, 0.002766f, -0.009359f, -0.002816f, 0.000026f, -0.001798f, 0.005812f, 0.000595f, -0.001936f, 0.005263f, -0.003916f, 0.001826f, 0.008100f, -0.004397f, 0.000553f, 0.001152f, 0.006158f, -0.002284f, 0.008478f, -0.011891f, -0.004328f, 0.005280f, -0.002335f, -0.010066f, 0.000762f, 0.002112f, 0.003410f, 0.003545f, -0.001064f, -0.004293f, 0.000407f, -0.003889f, -0.002665f, 0.001257f, 0.005050f, 0.004698f, -0.006731f, 0.006024f, -0.007369f, 0.006682f, 0.000404f, 0.005869f, -0.002231f, -0.004724f, -0.002101f, 0.003971f, -0.000729f, -0.000911f, -0.001150f, 0.005471f, -0.005795f, 0.003066f, 0.001441f, 0.001526f, 0.001864f, 0.004392f, 0.001397f, -0.002706f, -0.003125f, -0.001663f, 0.002365f, -0.000437f, -0.002292f, 0.000516f, -0.002770f, -0.000542f, -0.000184f, -0.002768f, -0.001127f, -0.001526f, - 0.000383f, 0.001608f, -0.001911f, -0.001302f, 0.000801f, -0.000314f, -0.002737f, 0.000052f, 0.001501f, -0.000987f, -0.000134f, 0.000643f, -0.000251f, 0.001159f, 0.000785f, 0.000165f, -0.002070f, -0.000607f, 0.000078f, -0.000852f, 0.000057f, -0.000140f, -0.001452f, 0.000906f, -0.002461f, -0.000395f, -0.028491f, 0.009336f, -0.010365f, -0.004138f, -0.008489f, -0.008715f, 0.004933f, -0.002916f, -0.007363f, -0.003961f, 0.009981f, 0.014843f, -0.008139f, -0.003037f, -0.000736f, -0.010712f, -0.010069f, 0.000741f, -0.001031f, 0.006524f, 0.002188f, 0.004856f, -0.004304f, -0.002697f, -0.005572f, 0.001553f, 0.009573f, 0.004151f, 0.001848f, -0.006194f, 0.004672f, 0.001405f, 0.002853f, -0.004048f, 0.000340f, 0.001405f, 0.002137f, -0.005495f, -0.004028f, 0.001489f, -0.007587f, -0.007750f, 0.003302f, 0.005858f, -0.006617f, -0.003332f, -0.002563f, 0.000463f, 0.005833f, 0.004706f, 0.002022f, 0.000877f, 0.015114f, 0.005931f, -0.004800f, 0.005880f, 0.004177f, -0.004217f, 0.007129f, -0.002677f, -0.001815f, -0.000052f, -0.003139f, 0.006341f, -0.003600f, 0.001656f, 0.003807f, 0.003056f, -0.005679f, 0.002214f, - 0.001032f, 0.001131f, -0.002002f, -0.002818f, -0.001202f, 0.008862f, 0.000566f, -0.002645f, -0.001929f, 0.002080f, -0.008013f, 0.001532f, 0.004729f, -0.000324f, 0.003052f, -0.001774f, -0.002906f, 0.001915f, 0.001730f, -0.000760f, 0.002964f, 0.001526f, -0.000884f, 0.002108f, 0.002194f, 0.003702f, 0.000453f, -0.000004f, -0.000295f, -0.001137f, -0.001614f, -0.000178f, -0.000317f, -0.001008f, 0.001061f, -0.000372f, 0.003648f, 0.021610f, 0.008577f, -0.001572f, 0.000919f, 0.004904f, 0.002533f, -0.001528f, -0.009429f, 0.000241f, 0.008246f, -0.008587f, -0.001017f, -0.016061f, 0.004135f, 0.006453f, 0.000370f, -0.003873f, 0.011631f, 0.008160f, -0.007601f, 0.003580f, 0.000378f, -0.006672f, 0.010372f, 0.005691f, -0.000745f, 0.004152f, 0.009879f, -0.003147f, -0.002120f, 0.000601f, -0.000006f, 0.000174f, 0.002323f, 0.012148f, 0.002394f, 0.001758f, -0.019810f, -0.001109f, 0.000833f, 0.002294f, -0.009001f, 0.002003f, -0.007274f, -0.005598f, -0.007690f, -0.005047f, -0.000022f, 0.002227f, -0.004726f, 0.004590f, -0.011412f, -0.006583f, -0.000761f, -0.000218f, 0.003570f, -0.004614f, -0.001128f, -0.004185f, - 0.002395f, 0.006074f, -0.003785f, 0.000591f, -0.003287f, -0.000655f, 0.009454f, 0.007390f, -0.003079f, 0.006921f, -0.003421f, -0.006033f, -0.007519f, -0.000632f, -0.000764f, -0.005096f, 0.004466f, -0.000872f, 0.001222f, -0.000631f, -0.001728f, 0.000266f, -0.001144f, -0.004148f, -0.000332f, -0.006565f, 0.000659f, -0.003273f, -0.002162f, -0.005529f, 0.006249f, -0.002018f, 0.002081f, 0.004241f, 0.001636f, -0.002280f, -0.000587f, -0.002552f, -0.000257f, 0.001007f, -0.002509f, 0.002428f, -0.000283f, 0.000191f, 0.000283f, -0.000978f, 0.001396f, 0.000771f, 0.000385f, 0.000100f, 0.003495f, 0.001630f, -0.001234f, -0.002525f, -0.002303f, 0.002070f, 0.002825f, -0.000102f, 0.000658f, 0.002722f, 0.000360f, 0.034068f, -0.015020f, 0.002677f, -0.001386f, -0.006447f, 0.005299f, 0.009453f, -0.006362f, 0.010173f, -0.000703f, 0.010860f, 0.002913f, 0.003746f, -0.004875f, 0.006097f, 0.002274f, 0.006246f, -0.013594f, 0.007074f, -0.008094f, 0.002355f, -0.006819f, 0.008308f, -0.002441f, 0.008370f, -0.005135f, 0.002996f, -0.003413f, -0.000874f, -0.000512f, -0.000994f, 0.003208f, 0.017541f, 0.000646f, 0.005054f, - -0.005029f, -0.008329f, 0.000210f, 0.000023f, 0.000211f, 0.002555f, -0.005814f, 0.011459f, -0.000872f, 0.009585f, 0.000542f, -0.004339f, -0.005452f, -0.014717f, 0.007029f, 0.004615f, -0.006953f, 0.000625f, 0.005709f, 0.002970f, -0.017119f, 0.010008f, -0.000707f, 0.007075f, -0.010336f, -0.011120f, -0.005466f, -0.010835f, -0.002098f, 0.012230f, 0.002439f, -0.004875f, 0.000605f, 0.006858f, -0.002486f, -0.005752f, -0.003050f, -0.006434f, 0.004375f, -0.009684f, -0.001814f, -0.007463f, -0.002931f, -0.000172f, 0.008081f, 0.003723f, 0.000770f, 0.002426f, 0.010179f, 0.005280f, 0.001133f, 0.003632f, -0.003042f, -0.001287f, 0.000563f, 0.000051f, 0.001521f, 0.000723f, -0.001903f, 0.000870f, 0.003512f, -0.000393f, 0.000660f, 0.001217f, -0.001882f, -0.002520f, 0.002158f, -0.002989f, 0.003260f, 0.001860f, 0.003011f, -0.000067f, -0.001324f, 0.001785f, 0.002980f, 0.000670f, -0.001414f, 0.000873f, -0.000214f, 0.008858f, -0.021062f, 0.004192f, -0.006700f, -0.019248f, -0.014861f, 0.007772f, 0.008669f, 0.011447f, -0.005796f, -0.003045f, 0.007845f, 0.003714f, 0.011767f, 0.003785f, -0.001417f, 0.001138f, - 0.007475f, 0.014675f, -0.003873f, 0.004225f, -0.000278f, 0.011878f, 0.002651f, -0.000802f, -0.002497f, -0.009190f, -0.013968f, 0.000081f, -0.002096f, 0.004100f, -0.000889f, 0.003198f, 0.002325f, 0.000780f, 0.000784f, 0.002696f, -0.004842f, 0.000467f, 0.006487f, 0.010253f, -0.005158f, 0.001164f, -0.004559f, -0.005988f, 0.008411f, -0.006601f, -0.016402f, -0.006464f, -0.004287f, 0.007770f, 0.000537f, 0.008579f, 0.007778f, -0.004240f, 0.000230f, -0.006814f, -0.001061f, -0.002955f, 0.009991f, -0.012790f, -0.000493f, 0.004241f, -0.013615f, -0.015233f, 0.000107f, 0.004642f, 0.009486f, -0.006752f, -0.016191f, 0.008337f, -0.014951f, 0.017282f, 0.009659f, 0.002807f, 0.007253f, -0.000219f, -0.007272f, 0.021984f, -0.002143f, 0.010619f, -0.000547f, 0.015366f, 0.010452f, 0.005593f, -0.001713f, -0.003043f, -0.005314f, -0.001943f, 0.002183f, 0.000521f, 0.004110f, -0.004393f, 0.002503f, -0.002350f, -0.001730f, -0.001671f, -0.001935f, 0.002057f, -0.001264f, -0.000071f, -0.003422f, -0.000182f, 0.001856f, 0.003685f, -0.003895f, -0.004597f, 0.000481f, 0.001992f, -0.000195f, 0.002401f, -0.001531f, 0.000258f, - -0.001958f, -0.000604f, 0.001088f, 0.002270f, 0.002643f, 0.001661f, -0.002396f, -0.003356f, -0.046246f, 0.009721f, 0.002508f, -0.023148f, -0.029252f, -0.004572f, -0.022547f, 0.018619f, 0.005449f, -0.013533f, 0.001018f, -0.006215f, 0.002216f, -0.009191f, 0.001360f, -0.000379f, 0.000272f, 0.013169f, -0.004488f, -0.002881f, -0.005264f, -0.004635f, -0.012110f, -0.008076f, 0.012480f, -0.004932f, 0.007953f, -0.006705f, 0.003536f, 0.000360f, 0.007203f, -0.007009f, 0.005496f, -0.007042f, 0.003305f, -0.002601f, -0.004323f, 0.004607f, -0.011307f, 0.004562f, -0.005674f, -0.001948f, -0.008172f, 0.020309f, 0.009765f, 0.017826f, -0.007364f, 0.007606f, 0.006171f, -0.003356f, 0.003319f, -0.008217f, 0.009055f, 0.019532f, 0.015497f, -0.010519f, -0.002682f, 0.004693f, -0.007548f, -0.005037f, -0.013349f, -0.025162f, -0.008407f, 0.013136f, 0.004851f, -0.006094f, 0.002752f, 0.001485f, -0.006714f, -0.011872f, -0.011953f, 0.008784f, 0.001193f, -0.018455f, 0.002169f, 0.001950f, -0.000720f, -0.001238f, 0.006367f, 0.013647f, -0.001180f, 0.000138f, 0.002085f, 0.000140f, -0.003350f, -0.012151f, 0.004273f, 0.004300f, - 0.002733f, 0.005901f, 0.003684f, -0.005113f, 0.001561f, -0.003163f, 0.000892f, -0.002652f, -0.000925f, -0.002951f, 0.000287f, 0.000848f, -0.000165f, -0.002095f, -0.001973f, -0.000510f, 0.001168f, 0.000076f, 0.004734f, 0.001766f, 0.004433f, 0.004718f, 0.005160f, -0.005780f, -0.005806f, -0.002109f, 0.004758f, -0.001397f, 0.001883f, -0.001626f, 0.002726f, 0.002778f, 0.001917f, -0.002743f, -0.001413f, -0.018292f, -0.007686f, -0.004837f, 0.013626f, -0.003741f, 0.003158f, -0.014280f, -0.014884f, 0.000626f, 0.004191f, -0.008763f, -0.005052f, -0.008230f, 0.016734f, 0.003605f, -0.005726f, -0.012382f, -0.012197f, -0.011950f, -0.003376f, 0.005588f, 0.016818f, 0.005379f, 0.009473f, -0.007688f, 0.017920f, 0.010174f, 0.003244f, 0.000101f, 0.018437f, -0.010913f, 0.001701f, 0.005760f, 0.012467f, -0.020365f, -0.010366f, 0.008742f, 0.003515f, -0.002897f, 0.021081f, -0.009332f, 0.005940f, 0.012644f, 0.003930f, 0.002046f, 0.009281f, 0.003688f, 0.004609f, 0.004647f, 0.002002f, 0.005370f, -0.000326f, 0.007956f, -0.001878f, 0.019645f, -0.014360f, 0.016150f, 0.012905f, -0.011340f, 0.012783f, 0.002269f, - 0.010867f, 0.010901f, -0.024130f, -0.000732f, -0.000962f, -0.007361f, 0.003868f, -0.006650f, 0.006700f, -0.002836f, 0.015400f, -0.001772f, 0.002432f, 0.006215f, 0.004340f, 0.006012f, -0.009797f, -0.003388f, -0.010010f, -0.009386f, -0.005309f, 0.014846f, 0.002255f, -0.004851f, 0.004439f, 0.004027f, 0.001930f, -0.002610f, 0.001587f, -0.001873f, 0.005921f, 0.002144f, 0.001904f, -0.002937f, 0.001852f, -0.005696f, -0.000478f, 0.006437f, 0.003441f, -0.001144f, 0.002214f, 0.002226f, -0.001777f, 0.002666f, 0.001902f, 0.006243f, 0.003540f, -0.003605f, -0.001340f, -0.002173f, 0.001993f, -0.005709f, 0.001708f, 0.003013f, 0.001956f, -0.000917f, -0.000217f, -0.000583f, 0.024119f, -0.006457f, -0.003811f, -0.005996f, 0.017163f, 0.008973f, 0.001783f, 0.006499f, -0.011704f, 0.025681f, 0.008478f, -0.002109f, 0.009670f, 0.012362f, -0.021078f, -0.001491f, 0.004929f, 0.002377f, -0.000075f, 0.017710f, -0.008601f, -0.010892f, 0.024445f, 0.003613f, -0.001780f, -0.002526f, 0.012757f, 0.000888f, -0.001897f, -0.002497f, -0.005982f, 0.006285f, -0.003721f, 0.008413f, 0.005956f, -0.015530f, -0.014652f, 0.001730f, - 0.028878f, -0.000448f, 0.005873f, -0.017939f, 0.008778f, 0.011763f, -0.007403f, 0.008691f, 0.010900f, -0.018194f, -0.011059f, -0.002387f, -0.023181f, -0.012411f, -0.013842f, 0.003945f, -0.004755f, -0.005261f, -0.002558f, 0.016163f, -0.022347f, 0.009739f, 0.004843f, -0.007377f, 0.013627f, -0.008863f, 0.001303f, -0.018897f, -0.000399f, 0.011203f, 0.010188f, 0.021209f, -0.025236f, -0.006418f, -0.028015f, -0.006163f, -0.000571f, -0.006820f, 0.003140f, -0.001528f, 0.025485f, 0.019625f, 0.011200f, -0.012850f, 0.000651f, 0.004719f, 0.012423f, 0.015119f, -0.000349f, -0.000109f, -0.002175f, 0.000145f, 0.008696f, -0.000606f, -0.000749f, -0.000538f, 0.000160f, 0.000247f, 0.001062f, 0.003336f, -0.003583f, -0.001327f, 0.003644f, 0.000406f, 0.003369f, -0.000323f, 0.000384f, -0.003139f, 0.004625f, 0.002633f, 0.000074f, 0.004119f, -0.002182f, -0.000498f, 0.004067f, 0.000861f, -0.000672f, -0.005250f, -0.000314f, 0.000899f, 0.000758f, -0.002028f, 0.005218f, 0.008456f, -0.001553f, -0.000487f, -0.003882f, 0.002626f, 0.016334f, -0.018678f, 0.000448f, -0.011511f, 0.031537f, -0.013564f, -0.007854f, 0.027310f, - 0.020559f, 0.003673f, -0.038475f, -0.009510f, 0.017477f, 0.001263f, -0.001992f, -0.005623f, -0.003169f, -0.003155f, 0.002529f, 0.005768f, 0.005266f, 0.004982f, 0.033806f, -0.007253f, -0.005073f, -0.000140f, 0.004288f, -0.010289f, 0.005823f, 0.003437f, -0.001412f, -0.011308f, -0.007146f, 0.012095f, 0.012987f, 0.024690f, 0.006212f, -0.010399f, 0.006139f, -0.000488f, 0.006225f, 0.000295f, 0.013652f, -0.011661f, -0.017286f, -0.017840f, 0.011431f, -0.005208f, 0.002279f, 0.004433f, -0.006456f, -0.001343f, 0.029366f, 0.009904f, -0.025027f, 0.017530f, 0.005519f, 0.029702f, -0.015673f, -0.014821f, 0.008510f, 0.015907f, 0.010980f, 0.006017f, -0.002880f, 0.000759f, 0.007558f, -0.009916f, -0.002923f, 0.000137f, 0.012560f, -0.009381f, 0.025361f, -0.001107f, -0.000473f, -0.013365f, -0.014978f, 0.028952f, 0.008543f, -0.024107f, -0.005716f, 0.019896f, 0.013814f, 0.002584f, 0.004929f, -0.012370f, 0.003697f, 0.003048f, 0.003805f, 0.002031f, 0.004238f, -0.005794f, -0.006915f, 0.000715f, -0.000317f, -0.005806f, -0.001970f, 0.005027f, 0.005020f, -0.007699f, 0.001881f, -0.000195f, 0.003172f, 0.004310f, - -0.001352f, -0.001502f, -0.001948f, 0.002850f, 0.008866f, -0.006670f, 0.004843f, -0.000601f, 0.000125f, -0.003984f, -0.000980f, -0.003011f, -0.002007f, 0.004115f, -0.001575f, -0.002676f, -0.005909f, -0.000379f, -0.003383f, -0.022633f, -0.019190f, -0.007409f, 0.007143f, 0.007330f, 0.035175f, 0.034149f, -0.003867f, 0.002841f, 0.001604f, 0.000348f, -0.000290f, -0.006953f, -0.022764f, -0.017446f, -0.008961f, 0.008181f, -0.006281f, -0.019801f, -0.005541f, 0.003865f, -0.001383f, -0.030403f, -0.008871f, 0.006836f, -0.003028f, 0.002972f, 0.002195f, 0.009248f, 0.013512f, 0.002257f, -0.009640f, 0.009981f, 0.010400f, 0.007334f, -0.000317f, 0.013444f, -0.026650f, 0.009044f, -0.023603f, 0.029611f, -0.020866f, 0.008152f, -0.022145f, -0.003603f, -0.024752f, -0.013044f, -0.015394f, -0.016667f, 0.011573f, -0.014646f, -0.002760f, 0.005268f, -0.000103f, -0.007767f, -0.005573f, -0.002491f, -0.024212f, 0.000885f, 0.001672f, 0.012140f, -0.037845f, 0.000984f, -0.000905f, 0.017781f, 0.021346f, -0.014351f, -0.008792f, 0.000895f, 0.016416f, -0.031270f, 0.020171f, -0.014011f, -0.009254f, 0.001624f, -0.030445f, -0.001488f, - -0.002400f, -0.004686f, -0.005390f, -0.003725f, 0.030667f, 0.012569f, 0.006351f, -0.007243f, -0.006815f, -0.007583f, 0.001017f, 0.007596f, -0.012201f, -0.000251f, -0.002079f, -0.003216f, 0.001690f, 0.009125f, -0.003318f, -0.005714f, 0.005773f, 0.003593f, -0.000073f, 0.006434f, 0.003484f, 0.005405f, -0.003191f, -0.004033f, 0.007746f, -0.005481f, 0.002028f, -0.007211f, -0.001350f, 0.000410f, -0.001437f, -0.002684f, -0.006398f, -0.007005f, -0.007473f, 0.001903f, -0.000366f, -0.001556f, -0.005376f, -0.005043f, -0.002051f, -0.002620f, 0.001738f, 0.007735f, -0.001994f, 0.005941f, -0.017754f, -0.046699f, -0.018493f, -0.008681f, 0.008446f, 0.012937f, -0.015143f, -0.005581f, -0.019115f, -0.016853f, 0.009281f, -0.014780f, 0.015741f, 0.006541f, 0.011381f, -0.001623f, -0.014982f, 0.026860f, 0.010841f, 0.015136f, -0.018788f, 0.008288f, 0.003731f, -0.027546f, 0.017409f, 0.010474f, 0.001269f, -0.018702f, -0.007025f, 0.009500f, 0.010135f, -0.000282f, 0.003657f, 0.013621f, -0.012937f, -0.009586f, 0.016098f, -0.031456f, -0.030929f, -0.040820f, -0.008962f, 0.013295f, -0.035723f, -0.029884f, -0.017974f, 0.000711f, - 0.013165f, 0.004230f, 0.003876f, 0.000720f, -0.010176f, -0.014254f, -0.033724f, 0.018005f, 0.005284f, 0.041235f, -0.009617f, 0.001156f, -0.025255f, -0.030403f, 0.004098f, 0.019745f, 0.001582f, -0.019169f, 0.012916f, 0.005195f, 0.028286f, 0.002801f, 0.003758f, -0.013541f, -0.002350f, 0.011931f, -0.027296f, -0.051392f, -0.014106f, -0.012818f, 0.003006f, 0.013537f, -0.024393f, -0.012451f, 0.008271f, -0.008592f, -0.001759f, 0.008053f, -0.004520f, -0.004127f, 0.010828f, 0.002613f, -0.000709f, 0.005220f, 0.008469f, 0.009182f, 0.002002f, -0.006160f, -0.016103f, -0.001500f, -0.009728f, 0.002702f, 0.002062f, 0.002085f, 0.007031f, -0.005867f, 0.006415f, 0.008418f, 0.005894f, 0.004759f, 0.004984f, -0.012131f, -0.010840f, -0.004217f, -0.009300f, 0.001051f, 0.002991f, 0.003199f, 0.011625f, -0.002687f, 0.007488f, 0.004417f, -0.004511f, -0.002497f, -0.006688f, -0.009424f, -0.002286f, -0.012414f, -0.003752f, -0.002819f, -0.043962f, -0.033782f, -0.015550f, 0.023214f, -0.002036f, 0.039749f, 0.007837f, -0.003426f, -0.022324f, 0.007957f, 0.040921f, -0.042840f, -0.038614f, -0.012727f, -0.006446f, -0.026856f, - 0.025433f, 0.007485f, 0.013761f, 0.016511f, -0.026967f, -0.003180f, 0.010760f, -0.016939f, 0.031715f, 0.000491f, 0.007094f, -0.009222f, 0.007787f, -0.020966f, -0.012031f, -0.007191f, 0.011886f, 0.005696f, 0.019248f, -0.031627f, 0.002770f, -0.000221f, -0.023652f, 0.025772f, -0.015465f, -0.037635f, 0.007370f, 0.013591f, 0.002664f, -0.011227f, -0.002814f, -0.015663f, 0.002507f, 0.012851f, 0.005372f, -0.025720f, 0.009996f, -0.005847f, -0.028682f, -0.016880f, -0.035221f, 0.000801f, -0.005567f, -0.000916f, 0.004458f, 0.021569f, 0.026682f, 0.022299f, -0.011503f, -0.019417f, 0.006318f, -0.004930f, -0.003384f, -0.015007f, 0.027758f, 0.023046f, -0.005062f, 0.042815f, -0.027419f, 0.014284f, 0.026873f, 0.029071f, 0.000664f, 0.018486f, -0.012082f, -0.004706f, -0.024085f, -0.010129f, 0.014202f, -0.004867f, -0.018793f, 0.011652f, -0.010826f, 0.012243f, -0.005594f, -0.012726f, 0.006517f, -0.002511f, -0.007428f, -0.005538f, 0.004744f, -0.006180f, 0.004119f, 0.008648f, -0.009210f, 0.011724f, -0.001579f, -0.006338f, 0.004216f, 0.001436f, 0.000609f, -0.005260f, 0.006691f, -0.010367f, 0.003403f, 0.003952f, - 0.000290f, -0.006906f, -0.000877f, -0.004081f, 0.005142f, 0.009723f, 0.020818f, 0.010682f, 0.016598f, -0.000797f, -0.000304f, 0.008668f, -0.010839f, 0.002941f, -0.014657f, -0.005827f, 0.003040f, -0.000145f, 0.016073f, -0.038074f, 0.004843f, 0.000463f, -0.024067f, 0.003526f, -0.053561f, -0.046323f, -0.011076f, -0.000390f, 0.002015f, -0.001150f, -0.019032f, -0.000650f, -0.005431f, 0.017155f, 0.003360f, -0.001062f, 0.003233f, -0.040459f, 0.014010f, 0.007572f, 0.022483f, 0.009344f, 0.009747f, 0.026415f, 0.013161f, 0.003843f, 0.066049f, 0.014149f, 0.025420f, 0.035064f, 0.001651f, 0.024737f, 0.006205f, -0.013699f, 0.016058f, 0.001162f, 0.007737f, -0.013416f, 0.001014f, -0.008695f, 0.005612f, -0.008667f, 0.018586f, 0.002265f, -0.011547f, -0.014416f, 0.001999f, -0.039156f, 0.022787f, 0.015396f, -0.001987f, -0.003520f, 0.008962f, -0.010387f, -0.008633f, -0.012826f, -0.015510f, 0.012984f, -0.012371f, 0.021436f, 0.024919f, 0.024442f, 0.025974f, -0.005994f, -0.039335f, 0.000662f, 0.016618f, 0.039717f, -0.009196f, -0.001426f, 0.018810f, 0.027751f, 0.040844f, -0.005257f, 0.018000f, -0.012046f, - -0.006993f, -0.032769f, -0.025576f, -0.011143f, -0.011601f, -0.009330f, 0.006862f, 0.001465f, -0.014059f, 0.015981f, 0.010069f, 0.012569f, 0.022469f, 0.009033f, 0.008431f, -0.002631f, 0.000042f, -0.003274f, -0.006412f, 0.000241f, 0.004068f, 0.000071f, 0.011867f, 0.009522f, 0.005811f, -0.000623f, -0.009700f, 0.000619f, -0.006960f, -0.007678f, 0.004966f, 0.006066f, 0.001824f, -0.012053f, -0.002705f, -0.017554f, -0.004266f, 0.005808f, 0.008746f, -0.005584f, 0.007276f, -0.010008f, -0.011684f, -0.005864f, -0.007035f, 0.006574f, 0.003412f, -0.010241f, -0.007057f, 0.008074f, 0.031643f, 0.041274f, -0.031886f, -0.033337f, -0.043821f, 0.038254f, -0.004713f, -0.016321f, 0.012890f, 0.012458f, 0.035788f, 0.029736f, 0.001407f, 0.032664f, 0.046672f, 0.012900f, -0.024582f, 0.022110f, -0.022787f, -0.012965f, -0.005121f, -0.016066f, -0.019204f, 0.009218f, -0.009934f, -0.009755f, -0.023060f, 0.050912f, 0.005949f, -0.027807f, -0.000477f, -0.004159f, 0.022547f, 0.023883f, 0.009140f, -0.016449f, 0.024086f, -0.007098f, 0.014697f, -0.047430f, 0.002020f, 0.019112f, -0.020608f, 0.006333f, -0.022355f, -0.018287f, - 0.048089f, 0.019739f, 0.014202f, -0.003806f, -0.043427f, -0.010861f, 0.012013f, 0.008851f, 0.006526f, -0.010608f, 0.033779f, -0.024463f, 0.018579f, -0.011715f, 0.012145f, 0.013442f, 0.026674f, 0.036208f, -0.042965f, -0.001530f, 0.021439f, 0.010205f, 0.030308f, 0.029381f, -0.042847f, -0.000306f, -0.012172f, -0.022409f, -0.001814f, -0.023418f, 0.009024f, 0.017177f, -0.009009f, 0.031467f, -0.007623f, -0.019501f, -0.023582f, 0.019418f, 0.022352f, 0.022244f, -0.006691f, 0.003502f, -0.001774f, -0.033386f, -0.032327f, -0.030351f, 0.018040f, 0.008842f, 0.005436f, 0.014400f, -0.001474f, -0.008805f, 0.021999f, 0.002604f, -0.000643f, 0.013282f, 0.021287f, 0.012689f, 0.001137f, 0.001883f, -0.006973f, 0.012732f, 0.006081f, 0.027355f, -0.003155f, 0.002848f, 0.019050f, 0.015357f, 0.004911f, -0.003316f, 0.011970f, -0.000948f, -0.003165f, 0.021464f, -0.018222f, 0.000382f, 0.013009f, 0.000511f, -0.004675f, -0.007208f, -0.003972f, -0.000625f, 0.014070f, 0.002180f, 0.000435f, 0.015586f, 0.011167f, -0.011028f, 0.016780f, -0.001383f, 0.032549f, 0.064858f, 0.002771f, -0.031026f, 0.008760f, -0.020763f, - 0.013429f, -0.018055f, -0.019410f, 0.058862f, -0.044694f, 0.073911f, 0.045326f, -0.010952f, 0.014950f, 0.035697f, 0.005235f, -0.055788f, 0.021962f, -0.045186f, 0.010823f, 0.003995f, -0.022224f, 0.000929f, -0.002953f, 0.032230f, -0.016045f, -0.001644f, -0.001144f, -0.009843f, 0.068255f, -0.003942f, -0.010134f, 0.008756f, 0.023066f, -0.023254f, -0.048926f, 0.038675f, -0.006072f, -0.002987f, 0.044243f, -0.025973f, -0.007049f, -0.030919f, 0.008396f, -0.021618f, 0.025055f, 0.022951f, 0.047094f, -0.013489f, 0.013271f, 0.031338f, -0.044363f, 0.005427f, -0.028209f, -0.044829f, -0.057102f, -0.030157f, -0.061751f, -0.069667f, -0.009576f, 0.004474f, -0.032600f, -0.035298f, 0.022014f, -0.002509f, -0.019603f, -0.038054f, 0.027611f, -0.020348f, 0.007325f, 0.034447f, -0.064820f, -0.018804f, -0.011756f, 0.028811f, 0.077943f, -0.036836f, 0.002460f, -0.023401f, -0.034301f, 0.016683f, -0.041085f, 0.033216f, 0.058157f, -0.016581f, -0.026863f, -0.028752f, -0.007031f, -0.006918f, 0.000773f, 0.018748f, 0.014048f, -0.015323f, 0.015572f, -0.001984f, 0.012300f, 0.000635f, -0.013834f, -0.004069f, 0.017212f, -0.028243f, - 0.013468f, -0.014833f, 0.004120f, -0.012092f, -0.004387f, -0.017037f, 0.004102f, -0.016380f, -0.025101f, -0.012270f, 0.006239f, -0.018889f, 0.000201f, 0.005597f, 0.028035f, -0.016137f, -0.009131f, 0.009054f, 0.011699f, -0.020152f, -0.012269f, 0.005625f, -0.005201f, -0.010785f, 0.019650f, 0.003317f, -0.014913f, 0.013465f, 0.004098f, -0.023523f, 0.004108f, -0.018883f, 0.020963f, -0.009331f, -0.030075f, -0.044512f, -0.033763f, 0.037531f, -0.030571f, 0.015214f, 0.035713f, 0.015324f, 0.022958f, -0.042428f, 0.061214f, 0.038562f, 0.033414f, -0.024503f, 0.043886f, -0.004708f, 0.029042f, 0.019144f, 0.006503f, 0.015903f, 0.021332f, 0.013062f, -0.007090f, -0.010797f, -0.009703f, 0.004524f, -0.029404f, -0.034632f, 0.019601f, 0.008745f, 0.011399f, -0.028462f, 0.007839f, 0.008817f, 0.021452f, 0.032020f, 0.048037f, -0.026986f, 0.007310f, 0.068395f, 0.014771f, 0.007449f, 0.006645f, -0.013944f, 0.005055f, 0.068113f, 0.019765f, 0.044168f, 0.012593f, -0.046981f, -0.019588f, -0.034173f, 0.098747f, 0.040248f, -0.038119f, -0.023754f, -0.033997f, 0.005901f, -0.022300f, -0.053486f, 0.012345f, -0.040467f, - 0.060468f, -0.004086f, -0.050015f, 0.066034f, 0.053427f, 0.007790f, -0.014504f, 0.009184f, -0.030439f, 0.040752f, 0.072508f, -0.019212f, 0.034394f, 0.081253f, -0.012751f, -0.012995f, -0.009225f, 0.049557f, -0.003579f, -0.027037f, -0.025580f, -0.025805f, -0.000432f, -0.002987f, -0.022669f, 0.002034f, -0.009503f, 0.025108f, 0.006206f, -0.023679f, -0.015065f, -0.026998f, -0.002951f, 0.003963f, -0.004424f, -0.018828f, -0.021263f, -0.014873f, 0.013346f, 0.022704f, 0.003522f, -0.023108f, -0.003386f, 0.029996f, 0.000246f, 0.027520f, 0.014338f, -0.014983f, -0.001350f, -0.023407f, 0.023298f, 0.010712f, -0.030520f, -0.057180f, 0.005306f, -0.003395f, -0.017404f, 0.019221f, -0.000122f, -0.009693f, -0.008158f, 0.006245f, 0.001595f, -0.001917f, 0.016979f, -0.046512f, 0.018833f, -0.006143f, 0.046648f, -0.096758f, -0.066318f, 0.038670f, 0.018621f, 0.014175f, 0.032846f, -0.032823f, -0.042915f, -0.023476f, -0.035307f, 0.020378f, -0.037904f, 0.011420f, 0.025556f, 0.041899f, 0.001608f, 0.035166f, 0.020528f, 0.006036f, -0.010904f, -0.036165f, -0.025524f, 0.021564f, -0.044395f, 0.023017f, 0.005451f, 0.038308f, - 0.029187f, -0.013894f, -0.055320f, -0.035774f, -0.003166f, -0.002453f, -0.014496f, 0.038324f, -0.066929f, -0.004877f, 0.002519f, -0.069949f, -0.001189f, -0.008326f, -0.005444f, 0.007854f, 0.041307f, -0.039760f, -0.110311f, 0.041572f, 0.045166f, 0.027172f, 0.086308f, -0.070597f, -0.008968f, 0.048208f, 0.036752f, -0.044181f, -0.020561f, -0.011940f, 0.067992f, 0.013703f, 0.064899f, -0.093375f, 0.013783f, -0.111454f, -0.066856f, -0.064467f, 0.076945f, 0.024695f, -0.049480f, 0.045462f, 0.005359f, -0.043138f, 0.044307f, -0.064703f, -0.068206f, 0.010552f, -0.070846f, 0.021389f, -0.121072f, 0.018843f, 0.038277f, -0.051251f, 0.056777f, -0.025382f, -0.013641f, 0.038281f, -0.013063f, -0.010082f, -0.027002f, -0.001635f, 0.008948f, 0.021265f, -0.002488f, 0.019785f, 0.038206f, -0.028417f, -0.003152f, -0.022529f, 0.013587f, -0.014605f, -0.003992f, 0.008660f, 0.004673f, 0.005440f, -0.005073f, 0.039675f, -0.013102f, 0.003497f, 0.016789f, -0.034432f, -0.030628f, -0.033428f, -0.015781f, -0.056511f, -0.026168f, -0.020476f, 0.048856f, 0.009984f, 0.043463f, 0.019052f, 0.008694f, 0.020083f, 0.013686f, 0.002062f, - 0.016363f, 0.003785f, 0.033993f, 0.083726f, 0.030940f, -0.030055f, -0.019657f, 0.011519f, -0.021348f, -0.025003f, -0.003043f, 0.038948f, -0.006845f, 0.007255f, -0.041524f, -0.008598f, 0.057165f, -0.041797f, 0.031582f, 0.074748f, 0.037297f, -0.003189f, -0.014361f, -0.024594f, -0.047909f, -0.035164f, 0.041101f, -0.023474f, 0.038558f, 0.027868f, 0.013163f, 0.001832f, 0.014985f, -0.011911f, -0.060920f, -0.021079f, 0.043394f, 0.034499f, 0.036046f, -0.038449f, 0.066278f, -0.017066f, 0.025700f, -0.049047f, 0.044834f, 0.077403f, -0.015687f, -0.027522f, -0.002975f, 0.002877f, -0.017324f, 0.016947f, 0.033717f, -0.063437f, 0.041546f, 0.040466f, -0.010022f, 0.046906f, 0.024714f, 0.020270f, -0.029850f, 0.006189f, 0.041791f, -0.088469f, -0.078967f, -0.032786f, 0.020756f, -0.040696f, -0.119963f, 0.050272f, 0.032747f, -0.015486f, -0.020471f, 0.000972f, -0.007171f, -0.040985f, -0.110214f, -0.006596f, 0.078022f, 0.019040f, -0.014050f, -0.009283f, 0.016739f, 0.064082f, 0.050837f, -0.075072f, -0.031152f, 0.050207f, -0.010766f, -0.020080f, -0.086057f, -0.004941f, 0.046976f, 0.015729f, -0.013383f, 0.029126f, - -0.010958f, 0.003146f, -0.032517f, -0.005237f, 0.019530f, 0.029635f, -0.016954f, -0.006001f, 0.005924f, 0.017175f, -0.010744f, 0.010607f, 0.001247f, -0.020912f, 0.012460f, 0.036032f, 0.006029f, 0.010823f, 0.006564f, 0.016322f, -0.017078f, -0.029593f, 0.002744f, 0.032209f, -0.026452f, 0.011634f, -0.009031f, 0.002986f, -0.025656f, -0.049047f, -0.026874f, 0.018425f, 0.059705f, -0.005993f, 0.028142f, -0.039500f, -0.017527f, -0.026664f, 0.016460f, 0.011762f, 0.018789f, -0.013384f, -0.020579f, -0.001314f, 0.004238f, 0.004737f, -0.009296f, -0.002038f, 0.040748f, 0.054012f, 0.001203f, -0.060901f, 0.080646f, -0.022658f, -0.056303f, 0.050448f, -0.008104f, -0.030632f, 0.038989f, 0.010435f, -0.008164f, 0.032890f, -0.045099f, 0.042770f, -0.015286f, 0.001436f, -0.013116f, -0.011204f, -0.062872f, 0.024894f, -0.024002f, 0.009903f, -0.025207f, -0.002080f, -0.018793f, 0.018002f, -0.011011f, 0.067945f, 0.012004f, 0.044450f, -0.017298f, 0.011115f, 0.028096f, -0.011933f, 0.019417f, -0.003852f, 0.033936f, -0.001706f, -0.011410f, 0.053657f, -0.047950f, 0.026751f, 0.036666f, -0.021525f, 0.041500f, -0.025410f, - -0.001041f, 0.021353f, -0.016247f, 0.048788f, 0.043680f, 0.009083f, 0.072694f, -0.044806f, -0.102662f, -0.017279f, -0.063480f, -0.041997f, 0.149912f, -0.003820f, 0.045988f, -0.006999f, -0.063280f, -0.001630f, 0.062978f, 0.089197f, 0.054225f, 0.089851f, -0.048343f, -0.014460f, -0.021667f, -0.051302f, 0.034011f, -0.014405f, -0.031674f, -0.003308f, -0.062271f, -0.113803f, 0.028638f, 0.040064f, -0.033690f, 0.022682f, -0.007094f, -0.033950f, 0.036230f, 0.026688f, -0.013272f, 0.037332f, -0.013726f, -0.033333f, 0.017118f, -0.016552f, 0.044263f, 0.004164f, 0.003304f, 0.025008f, 0.008338f, -0.028204f, -0.011832f, 0.014515f, -0.009292f, 0.027556f, -0.038441f, 0.024803f, -0.040304f, -0.010268f, 0.010048f, -0.028608f, 0.018256f, 0.001148f, -0.042937f, -0.006960f, 0.002770f, -0.011534f, -0.000106f, -0.008029f, -0.031501f, 0.012894f, 0.009451f, -0.005021f, 0.031635f, 0.048484f, -0.026427f, -0.037831f, -0.002415f, -0.018051f, 0.052468f, 0.053864f, -0.031746f, -0.020130f, -0.006607f, -0.026716f, 0.000565f, 0.009459f, 0.045293f, -0.048590f, 0.057422f, -0.035329f, 0.007552f, -0.000534f, 0.005593f, -0.044867f, - -0.007281f, -0.040624f, -0.033664f, -0.000307f, -0.013513f, -0.030755f, -0.012498f, 0.021812f, -0.026293f, 0.020066f, -0.012629f, 0.061752f, -0.029192f, 0.018142f, 0.003385f, -0.015894f, -0.050314f, -0.018752f, 0.037654f, 0.006434f, -0.012824f, 0.049419f, -0.037266f, -0.037688f, -0.005453f, 0.047166f, -0.043674f, -0.006504f, 0.008124f, 0.012469f, -0.048594f, 0.014061f, 0.016381f, -0.017699f, -0.050795f, 0.000446f, -0.039525f, 0.016129f, 0.008541f, 0.014556f, -0.077443f, -0.033416f, 0.043601f, 0.118113f, -0.054051f, -0.007890f, 0.009193f, -0.020493f, -0.033846f, -0.001138f, 0.098708f, 0.022350f, -0.010453f, -0.009187f, -0.026541f, -0.006568f, -0.020406f, 0.037944f, 0.001666f, -0.025018f, -0.026694f, 0.000893f, 0.017425f, -0.039991f, 0.030504f, 0.008653f, 0.033288f, 0.000853f, 0.042433f, 0.017481f, -0.030141f, 0.039669f, 0.038003f, 0.094360f, 0.029880f, 0.006870f, 0.009475f, -0.035131f, 0.011286f, 0.030538f, 0.031784f, 0.010589f, -0.002510f, 0.000744f, -0.004127f, 0.011481f, 0.013099f, -0.003623f, 0.017004f, -0.004927f, -0.002017f, 0.032287f, 0.013681f, 0.005157f, -0.010039f, 0.009228f, - 0.024575f, 0.025633f, 0.029772f, 0.010417f, 0.010793f, -0.017285f, -0.000341f, -0.001448f, 0.005285f, 0.016487f, -0.000903f, -0.013901f, 0.015193f, -0.014545f, 0.012612f, -0.001086f, 0.014923f, 0.001802f, -0.012597f, -0.003906f, 0.000832f, 0.003004f, 0.007344f, -0.002258f, 0.005215f, 0.003624f, -0.000366f, -0.075507f, 0.099918f, 0.013667f, 0.022624f, 0.023863f, -0.023275f, -0.026794f, 0.000794f, -0.010416f, 0.014065f, 0.032819f, -0.046469f, 0.015181f, -0.009938f, 0.011894f, 0.011090f, 0.007701f, 0.026206f, 0.020510f, -0.019925f, 0.018428f, 0.015951f, -0.016151f, -0.027837f, 0.008320f, -0.010005f, -0.023060f, 0.013538f, 0.011152f, -0.002141f, -0.015116f, 0.000220f, -0.011051f, -0.005520f, 0.000940f, 0.005750f, 0.010416f, -0.020893f, -0.003189f, 0.016341f, -0.007506f, 0.014640f, 0.002732f, 0.010498f, 0.021628f, 0.006202f, -0.022308f, 0.002092f, 0.020636f, -0.012011f, -0.001193f, 0.009814f, -0.035395f, -0.002387f, -0.008831f, -0.033142f, 0.045390f, -0.011822f, -0.002002f, 0.026746f, 0.004531f, -0.020560f, 0.007915f, -0.019666f, -0.004013f, 0.014755f, -0.018283f, -0.006846f, 0.033543f, - -0.035992f, 0.003729f, 0.002936f, 0.012138f, -0.016154f, 0.010737f, -0.005733f, 0.010004f, -0.013906f, 0.000556f, -0.003585f, 0.033807f, -0.015759f, -0.001601f, 0.008536f, -0.017191f, -0.001953f, 0.023388f, -0.005261f, 0.015055f, -0.010636f, -0.009784f, 0.001434f, 0.009029f, -0.009259f, 0.017244f, -0.000445f, -0.003849f, -0.004093f, -0.005524f, -0.005779f, 0.014707f, -0.012913f, 0.014398f, 0.007566f, -0.019052f, 0.004230f, -0.001976f, -0.001968f, 0.011151f, -0.016175f, -0.006402f, 0.001959f, -0.010587f, 0.010618f, -0.010886f, -0.001957f, 0.017864f, 0.002850f, -0.003385f, 0.007782f, -0.009024f, -0.007535f, -0.004393f, 0.008313f, 0.014903f, -0.004998f, -0.004325f, 0.001235f, -0.012890f, 0.023407f, -0.099192f, -0.201738f, -0.026057f, 0.126480f, 0.097224f, 0.279321f, 0.134339f, -0.065228f, -0.057007f, -0.132565f, -0.232114f, -0.029420f, -0.090047f, -0.028001f, 0.163723f, 0.104348f, 0.111381f, 0.213140f, -0.007567f, -0.047278f, -0.080522f, -0.210946f, -0.116495f, -0.037526f, -0.039278f, 0.005795f, 0.095897f, 0.074273f, 0.078819f, 0.148753f, 0.086984f, -0.054783f, 0.079243f, -0.083425f, -0.194590f, - 0.024825f, -0.130630f, -0.181672f, 0.070738f, -0.015654f, -0.033750f, 0.223255f, 0.073057f, 0.059309f, 0.192379f, -0.020714f, -0.037961f, 0.058533f, -0.129091f, -0.160325f, -0.043208f, -0.137288f, -0.122756f, 0.025949f, 0.026485f, 0.055407f, 0.167830f, 0.148686f, 0.089996f, 0.106634f, 0.020532f, -0.084180f, -0.090712f, -0.112195f, -0.154250f, -0.072021f, -0.039230f, -0.052422f, 0.046484f, 0.148497f, 0.096867f, 0.095739f, 0.078634f, -0.055554f, -0.000712f, 0.015632f, -0.127326f, -0.052485f, -0.031994f, -0.037284f, 0.058242f, 0.029820f, -0.007426f, 0.047671f, -0.011182f, -0.009967f, 0.008047f, -0.034359f, -0.025994f, 0.016908f, -0.021377f, 0.034544f, 0.043378f, -0.016247f, 0.023471f, 0.044292f, -0.025959f, 0.029003f, 0.014413f, -0.086625f, 0.015218f, -0.028142f, -0.094132f, 0.001426f, -0.053804f, -0.048080f, 0.068282f, 0.073998f, 0.071370f, 0.132439f, 0.042129f, 0.042140f, 0.044825f, -0.057982f, -0.115758f, -0.129160f, -0.165421f, -0.123189f, -0.037237f, 0.021551f, 0.100178f, 0.166144f, 0.184020f, 0.143771f, 0.104710f, 0.020689f, -0.097559f, -0.146832f, -0.179351f, -0.166598f, -0.086420f, - -0.005499f, 0.046962f, 0.119345f, 0.110106f, 0.060161f, 0.060414f, 0.023516f, -0.001699f, -0.000347f, -0.018642f, -0.036494f, -0.030270f, -0.037845f, -0.045867f, -0.033640f, -0.024959f, -0.006438f, 0.012844f, 0.031098f, 0.037445f, 0.040544f, 0.035028f, 0.024657f, 0.012553f, -0.000066f, -0.020320f, -0.033856f, -0.031004f, -0.021706f, -0.015118f, -0.011828f, -0.003166f, 0.004313f, 0.014832f, 0.017327f, 0.011533f, 0.010932f, 0.009496f, 0.003914f, 0.005426f, 0.004862f, -0.005781f, -0.007533f, -0.003689f, -0.007172f, -0.006488f, -0.009633f, -0.013004f, -0.006275f, 0.000556f, 0.001292f, 0.006738f, 0.010489f, 0.010657f, 0.012987f, 0.009702f, 0.003548f, -0.001337f, -0.006569f, -0.009259f, -0.009139f, -0.008370f, -0.007669f, -0.003814f, 0.001566f, 0.004153f, 0.003927f, 0.003760f, 0.003350f, 0.003325f, 0.003011f, 0.001067f, 0.000237f, 0.000815f, 0.000590f, 0.000306f, -0.000314f, -0.001851f, -0.002497f, -0.004072f, -0.005493f, -0.004383f, -0.002301f, 0.000386f, 0.002765f, 0.004003f, 0.005075f, 0.005279f, 0.003527f, 0.002153f, 0.001084f, -0.002080f, -0.003428f, -0.003195f, -0.003263f, -0.002818f, - -0.001793f, -0.001461f, -0.000116f, 0.000923f, 0.001244f, 0.001607f, 0.001700f, 0.001091f, 0.000561f, 0.000080f, -0.000439f, -0.000702f}, - {-0.001955f, 0.005019f, 0.008681f, -0.006470f, -0.005597f, -0.008659f, 0.007860f, 0.003921f, 0.000693f, 0.011622f, -0.001153f, -0.000137f, -0.003544f, -0.002866f, 0.002529f, -0.003098f, -0.006044f, 0.003414f, 0.000991f, 0.009708f, 0.013264f, -0.003443f, -0.007791f, -0.009600f, -0.000597f, -0.005486f, -0.005287f, -0.003625f, -0.000730f, -0.007646f, 0.007379f, -0.002733f, -0.002884f, -0.005055f, -0.003725f, 0.001421f, 0.008290f, -0.000855f, -0.002382f, 0.002510f, -0.008128f, 0.006112f, -0.005067f, -0.018238f, 0.009058f, 0.006022f, 0.010061f, 0.010435f, 0.001994f, 0.005499f, -0.005436f, 0.001555f, 0.007911f, 0.000624f, -0.000086f, -0.001895f, -0.001040f, 0.004248f, -0.003844f, -0.002773f, 0.000208f, 0.004039f, -0.003336f, -0.004158f, -0.006092f, 0.007818f, 0.003111f, 0.000972f, -0.001892f, -0.007806f, -0.000260f, 0.005849f, 0.003638f, -0.001105f, -0.001469f, 0.005859f, -0.000700f, -0.000420f, -0.002538f, -0.002400f, -0.003561f, -0.004220f, 0.000275f, 0.000901f, 0.002021f, -0.004343f, -0.001712f, 0.002429f, -0.003003f, 0.002621f, 0.000718f, 0.001180f, -0.001115f, -0.000062f, 0.000580f, 0.001283f, - 0.000333f, -0.000497f, 0.000812f, -0.000545f, -0.001474f, -0.000474f, -0.002449f, 0.001644f, 0.000854f, -0.000694f, 0.000048f, -0.001104f, 0.001482f, 0.001522f, 0.000502f, 0.000160f, 0.000584f, 0.000546f, -0.001517f, 0.000065f, -0.000285f, -0.000364f, -0.000585f, -0.000198f, 0.000874f, 0.000266f, -0.027330f, 0.014303f, -0.001318f, 0.000436f, 0.004993f, 0.007024f, -0.010165f, -0.001266f, -0.001803f, 0.005847f, 0.002240f, -0.006208f, 0.019486f, -0.002056f, -0.001180f, 0.008688f, 0.007134f, 0.002354f, 0.004958f, 0.015914f, -0.007837f, 0.000530f, -0.003983f, 0.001622f, -0.004865f, 0.000429f, 0.000521f, 0.001819f, -0.008794f, 0.000792f, -0.002093f, -0.003283f, -0.000354f, 0.005578f, -0.003031f, 0.005189f, 0.007527f, -0.012908f, 0.001769f, -0.005226f, -0.001407f, -0.007933f, 0.004000f, -0.004693f, -0.000788f, -0.002634f, -0.008074f, 0.003132f, -0.005410f, 0.003731f, 0.002054f, -0.003968f, -0.005872f, 0.000227f, 0.005497f, 0.004158f, 0.009971f, 0.004638f, -0.004279f, -0.012177f, -0.000799f, 0.002195f, 0.015428f, -0.004737f, -0.002319f, -0.000129f, -0.002983f, -0.007989f, -0.003811f, -0.007435f, - -0.000988f, 0.006245f, -0.001384f, 0.007427f, 0.004776f, 0.003859f, 0.005381f, 0.001010f, -0.009618f, -0.002209f, -0.006183f, -0.003899f, -0.010683f, -0.000319f, -0.003032f, 0.001487f, 0.002920f, 0.001312f, -0.001576f, -0.002135f, 0.000384f, 0.002872f, -0.002396f, -0.000619f, 0.000084f, -0.000827f, -0.000208f, -0.000943f, 0.001152f, -0.003635f, -0.001247f, -0.000824f, 0.000126f, -0.000313f, -0.000667f, 0.000056f, -0.005404f, 0.019789f, 0.010229f, -0.003421f, -0.008236f, 0.011246f, -0.013543f, -0.002416f, 0.007232f, -0.005703f, -0.004170f, -0.005940f, 0.012998f, -0.004842f, 0.003880f, 0.000911f, 0.003830f, 0.017825f, -0.018303f, 0.005191f, 0.008870f, -0.006234f, -0.016956f, -0.008939f, -0.001346f, 0.000848f, -0.002578f, -0.003233f, 0.006821f, 0.010007f, -0.001043f, -0.007440f, 0.000345f, -0.009373f, 0.002531f, -0.005962f, 0.003037f, 0.010702f, 0.003797f, -0.011162f, -0.000490f, 0.000467f, 0.016129f, 0.002852f, 0.007974f, -0.002551f, 0.003427f, 0.002661f, -0.019937f, 0.000120f, 0.009158f, 0.004136f, 0.010265f, -0.009458f, -0.005885f, -0.009417f, 0.002311f, 0.005725f, -0.002078f, 0.001825f, - 0.000320f, -0.004818f, 0.001567f, -0.003665f, 0.002953f, 0.002785f, -0.000868f, 0.004650f, 0.000804f, -0.000899f, 0.001945f, 0.011561f, 0.001968f, 0.005950f, 0.007456f, 0.004049f, -0.000007f, -0.000358f, -0.011205f, -0.000198f, 0.011546f, 0.003973f, 0.005015f, -0.000397f, -0.001003f, 0.007208f, -0.005706f, 0.000441f, -0.000697f, 0.003582f, 0.001803f, -0.000132f, -0.004979f, 0.000628f, -0.002612f, -0.000873f, 0.000621f, -0.001699f, -0.001323f, 0.001001f, -0.000334f, 0.003643f, 0.001403f, 0.003318f, 0.001477f, 0.000908f, 0.001691f, -0.001556f, -0.002086f, 0.000074f, 0.000026f, 0.004191f, 0.002468f, 0.000495f, 0.001310f, 0.003979f, -0.000888f, 0.000270f, 0.001090f, 0.001672f, -0.000044f, 0.041102f, -0.010752f, -0.003957f, -0.006364f, 0.008324f, 0.005514f, 0.013918f, 0.005452f, -0.002175f, 0.006605f, -0.000403f, 0.007400f, 0.002804f, 0.010330f, 0.000114f, 0.008649f, 0.011304f, -0.012777f, 0.002164f, 0.003149f, 0.002006f, 0.001870f, 0.002723f, -0.007650f, -0.000123f, -0.008791f, -0.001356f, -0.000441f, -0.014784f, -0.010105f, 0.003574f, -0.000193f, -0.000617f, 0.005714f, 0.005630f, - -0.003119f, -0.012756f, 0.003663f, 0.011312f, 0.007381f, 0.010545f, -0.003002f, 0.005656f, 0.010425f, -0.017685f, 0.005443f, 0.007641f, -0.008830f, 0.010789f, -0.007717f, -0.001686f, 0.000936f, 0.002053f, -0.005996f, 0.005057f, -0.001686f, -0.002073f, -0.006235f, -0.005063f, 0.005954f, 0.006041f, 0.002617f, 0.005947f, 0.009235f, 0.005060f, 0.012895f, -0.002826f, -0.014832f, 0.014130f, 0.002170f, 0.006897f, 0.002801f, -0.002496f, 0.003557f, 0.002637f, 0.000465f, 0.009681f, -0.003137f, 0.009553f, -0.013961f, -0.003240f, 0.001632f, 0.004219f, 0.000781f, -0.007609f, -0.003642f, 0.001196f, 0.000273f, -0.000856f, 0.000303f, 0.002862f, -0.003867f, -0.002166f, -0.002254f, -0.002746f, 0.001414f, -0.000865f, -0.001189f, -0.002244f, -0.001764f, 0.004144f, -0.001170f, -0.001429f, -0.000225f, -0.001516f, -0.001386f, 0.002088f, -0.001015f, 0.002235f, -0.000654f, 0.000148f, 0.001598f, -0.000542f, 0.000039f, 0.018482f, -0.020742f, 0.014159f, 0.003162f, 0.014495f, 0.003523f, -0.007819f, 0.002854f, 0.011222f, -0.012925f, -0.002555f, 0.001718f, -0.014588f, -0.002718f, -0.011158f, -0.006759f, -0.008066f, - -0.008891f, 0.004096f, -0.013942f, -0.008555f, -0.011067f, -0.002642f, 0.011096f, 0.004162f, -0.013358f, -0.005048f, -0.013982f, -0.003272f, 0.003299f, 0.020605f, -0.016202f, 0.006964f, -0.003974f, -0.005776f, -0.012026f, 0.000809f, 0.002285f, 0.013296f, 0.007062f, 0.001882f, -0.010889f, -0.019009f, -0.000087f, 0.005881f, 0.015313f, 0.005510f, 0.005044f, -0.010940f, 0.004270f, 0.009714f, 0.000926f, 0.001714f, -0.005789f, -0.005691f, -0.001809f, 0.005755f, 0.001180f, -0.003600f, 0.000308f, -0.012049f, -0.001567f, -0.010115f, 0.006722f, -0.001930f, 0.006720f, -0.009903f, -0.008402f, -0.013726f, -0.001430f, -0.008739f, -0.003679f, 0.003827f, -0.013374f, -0.005604f, 0.001754f, 0.007726f, -0.016105f, 0.009761f, -0.007481f, -0.007973f, -0.008473f, -0.006978f, 0.005082f, -0.004604f, 0.002454f, 0.003073f, -0.004139f, 0.000883f, 0.003574f, 0.002897f, 0.000357f, -0.003603f, -0.000398f, -0.001593f, -0.004193f, -0.000502f, 0.003413f, 0.002190f, -0.001986f, 0.003233f, -0.002358f, -0.001652f, -0.000305f, 0.001286f, -0.003083f, 0.000506f, -0.000224f, 0.002493f, 0.001909f, 0.003932f, -0.002768f, 0.001152f, - -0.000495f, -0.000964f, 0.001306f, -0.003095f, -0.001021f, 0.002017f, 0.001092f, -0.001290f, -0.050901f, 0.008238f, 0.005839f, -0.014671f, -0.003249f, -0.000030f, 0.000532f, -0.002782f, -0.004866f, -0.003729f, -0.015117f, 0.011687f, -0.007315f, 0.001646f, -0.012592f, -0.004443f, 0.018250f, 0.016566f, -0.010471f, -0.006286f, 0.000536f, -0.000251f, -0.008596f, -0.009991f, -0.007109f, 0.001236f, 0.000784f, 0.000348f, -0.001035f, 0.004298f, -0.012429f, 0.003927f, 0.000422f, -0.021878f, -0.002640f, -0.006513f, 0.010016f, 0.014694f, 0.002278f, -0.002530f, 0.000688f, -0.012799f, -0.016107f, 0.008679f, 0.015903f, 0.017779f, -0.004801f, 0.003286f, 0.010321f, 0.010726f, -0.005551f, 0.009900f, 0.016016f, -0.000616f, 0.013477f, 0.011505f, -0.013486f, 0.004466f, 0.000748f, 0.014535f, -0.008907f, -0.009396f, 0.008306f, 0.011035f, -0.003412f, 0.001046f, -0.015897f, 0.011229f, -0.008912f, 0.011851f, -0.019764f, 0.002211f, 0.004645f, 0.009483f, 0.000598f, -0.008184f, -0.016873f, -0.010244f, 0.014100f, -0.013904f, -0.000710f, 0.001662f, 0.007580f, -0.004150f, -0.003044f, 0.006037f, -0.011305f, -0.009713f, - 0.003957f, 0.002764f, -0.000882f, 0.008131f, -0.003795f, 0.001998f, 0.002010f, 0.002243f, 0.002976f, 0.000748f, -0.003206f, 0.002047f, 0.004078f, -0.001629f, 0.000503f, -0.000746f, -0.002168f, 0.001789f, -0.005284f, -0.000639f, -0.005694f, -0.000976f, -0.001143f, -0.001734f, -0.002966f, 0.001266f, -0.001753f, 0.000025f, -0.004454f, 0.001849f, -0.000884f, 0.001623f, 0.001681f, 0.000772f, 0.000638f, -0.019625f, 0.007107f, -0.017330f, 0.022182f, 0.021335f, 0.000764f, -0.028643f, 0.012020f, 0.001740f, -0.005248f, 0.019950f, 0.000201f, -0.017025f, -0.001706f, 0.021678f, -0.026940f, 0.000963f, -0.006652f, -0.021248f, -0.005821f, 0.000495f, -0.004085f, -0.010831f, 0.006417f, -0.008954f, 0.007487f, -0.007612f, -0.014347f, 0.007818f, -0.000960f, 0.011187f, -0.021421f, 0.008896f, 0.017076f, -0.006713f, 0.001517f, 0.017147f, 0.025047f, -0.006526f, -0.004965f, -0.020901f, 0.001354f, -0.017226f, -0.001288f, -0.011961f, 0.000726f, 0.001790f, 0.010197f, 0.004926f, 0.009331f, -0.006542f, 0.001822f, 0.005802f, -0.000962f, 0.023101f, -0.015138f, -0.007444f, 0.030396f, 0.030495f, -0.005867f, -0.001822f, - -0.018943f, -0.009656f, 0.001105f, -0.005198f, -0.012491f, 0.018455f, 0.005796f, -0.004689f, 0.027079f, 0.005316f, -0.012789f, -0.000264f, -0.024601f, -0.012317f, -0.013886f, -0.011930f, -0.003146f, -0.019225f, -0.013800f, 0.008050f, 0.007502f, -0.001330f, 0.004486f, -0.005643f, 0.006614f, -0.004217f, -0.006176f, 0.001181f, -0.008954f, -0.004071f, 0.011835f, 0.001022f, 0.005973f, -0.003038f, 0.001346f, 0.000981f, 0.002894f, 0.002619f, -0.000359f, -0.000149f, -0.005632f, 0.000017f, 0.001389f, 0.001018f, -0.001475f, -0.001558f, 0.004063f, 0.001245f, -0.000678f, 0.000220f, -0.000837f, 0.000212f, 0.002326f, 0.001443f, -0.000622f, -0.002106f, 0.000761f, -0.001371f, 0.024368f, -0.006577f, -0.000352f, 0.016764f, -0.004100f, 0.009885f, -0.005535f, -0.021424f, -0.001462f, -0.000033f, -0.004469f, -0.012713f, -0.014204f, 0.007303f, -0.011270f, 0.019727f, -0.006163f, -0.014395f, 0.012153f, 0.024777f, -0.006256f, 0.006915f, -0.006764f, 0.014301f, 0.000225f, -0.030208f, 0.010651f, 0.016721f, 0.001577f, -0.005059f, -0.017641f, 0.014678f, 0.009747f, 0.009442f, 0.001830f, 0.005942f, 0.019589f, -0.013928f, - 0.002356f, 0.003826f, -0.011060f, -0.021236f, 0.020099f, 0.011214f, 0.037495f, -0.001941f, 0.016480f, -0.005551f, -0.011925f, 0.001984f, -0.001960f, -0.000557f, -0.003477f, -0.012274f, 0.026887f, 0.000604f, 0.001993f, 0.003802f, -0.003884f, 0.022196f, 0.002704f, 0.018581f, 0.007647f, 0.003110f, 0.019766f, -0.009402f, -0.022415f, -0.004423f, 0.003997f, 0.002862f, -0.009345f, 0.010874f, -0.006727f, -0.031217f, 0.002697f, 0.006178f, -0.017361f, 0.008010f, -0.001918f, 0.003346f, -0.000088f, -0.007104f, -0.007963f, -0.000055f, 0.002821f, 0.009499f, -0.000994f, 0.002649f, -0.003811f, -0.002750f, 0.004167f, 0.002803f, -0.000679f, 0.002890f, -0.003315f, -0.000383f, 0.000078f, -0.004297f, -0.006302f, 0.003821f, -0.007001f, -0.001796f, -0.003136f, -0.006016f, -0.001812f, -0.000820f, -0.002373f, 0.002592f, -0.001172f, -0.002544f, -0.000897f, 0.011449f, 0.004347f, 0.004357f, -0.002469f, 0.001621f, -0.003744f, -0.004682f, -0.001687f, -0.001627f, 0.001837f, -0.003104f, 0.005392f, -0.007211f, -0.002427f, 0.001525f, 0.019647f, -0.032985f, 0.005238f, 0.014548f, 0.021738f, -0.023151f, -0.003462f, 0.015428f, - 0.010716f, 0.013141f, 0.002203f, 0.027916f, 0.005061f, 0.011478f, -0.003634f, 0.001495f, 0.011444f, 0.006186f, 0.013234f, 0.000891f, -0.018708f, -0.027265f, 0.014231f, 0.006782f, -0.005295f, 0.003012f, 0.007946f, -0.025526f, 0.000103f, -0.016175f, 0.007352f, -0.001051f, 0.016484f, -0.005508f, 0.007292f, -0.004022f, 0.004174f, 0.002088f, -0.000834f, 0.009169f, 0.012361f, 0.004286f, 0.007106f, -0.020051f, 0.008094f, -0.003692f, -0.034760f, -0.023204f, 0.005774f, -0.025487f, -0.001866f, 0.020707f, -0.015376f, 0.041327f, 0.014889f, -0.008564f, 0.022414f, 0.000853f, -0.007502f, -0.016965f, -0.016722f, -0.023266f, -0.003706f, 0.013270f, -0.016618f, -0.002262f, 0.014844f, 0.006618f, 0.008332f, 0.030212f, 0.003639f, 0.019675f, 0.000035f, 0.003684f, -0.032778f, 0.008823f, 0.002344f, -0.029956f, -0.028259f, 0.016011f, -0.010849f, 0.001658f, 0.008436f, -0.005084f, -0.007766f, 0.001480f, -0.001813f, -0.002277f, 0.001607f, -0.005562f, 0.004675f, -0.004071f, 0.000959f, -0.009636f, 0.004993f, 0.001324f, 0.001969f, -0.000764f, 0.011482f, -0.009646f, 0.000708f, -0.002892f, -0.002438f, 0.002076f, - 0.002271f, 0.002969f, 0.005477f, 0.009034f, 0.005654f, -0.006259f, 0.001356f, -0.001034f, 0.008382f, -0.003075f, 0.005376f, -0.008969f, -0.006691f, -0.005295f, -0.004301f, -0.000871f, -0.000563f, 0.004012f, 0.004951f, -0.017171f, -0.000556f, 0.010723f, -0.000190f, 0.007513f, -0.017589f, 0.013597f, -0.001116f, 0.003926f, 0.012668f, -0.023728f, -0.016324f, 0.004258f, -0.000360f, 0.012953f, 0.026771f, -0.002533f, 0.006647f, 0.028751f, -0.010734f, -0.019559f, -0.001160f, 0.021053f, -0.004610f, -0.024339f, 0.001911f, 0.008932f, -0.004815f, -0.007642f, -0.001827f, 0.031188f, -0.005987f, 0.026842f, 0.020265f, 0.024488f, 0.001311f, 0.001969f, 0.014286f, 0.004777f, -0.005016f, 0.005023f, -0.019458f, 0.014609f, 0.024520f, 0.015387f, 0.002067f, 0.013680f, -0.010817f, 0.010500f, -0.010525f, 0.015369f, -0.013925f, 0.000241f, -0.001151f, -0.001107f, 0.043646f, -0.006563f, -0.002487f, -0.003830f, 0.006027f, 0.012023f, 0.022960f, 0.026242f, -0.014399f, 0.006271f, 0.026100f, -0.014684f, -0.018249f, 0.010929f, -0.007971f, 0.011269f, 0.049864f, -0.023604f, 0.003334f, 0.004647f, -0.013040f, 0.005605f, - 0.016250f, 0.011400f, 0.001312f, -0.010246f, -0.024626f, 0.011627f, -0.010764f, 0.013455f, -0.009281f, 0.001874f, -0.012213f, -0.002692f, -0.020400f, 0.001719f, -0.006505f, -0.007220f, -0.002575f, 0.002450f, 0.005101f, 0.010078f, 0.004232f, -0.005810f, -0.001490f, 0.010275f, -0.006117f, -0.005354f, 0.000686f, 0.000710f, -0.009311f, -0.000140f, -0.004718f, -0.002319f, -0.001789f, -0.001682f, 0.003518f, 0.002210f, 0.007252f, -0.004682f, -0.004720f, 0.000545f, -0.005645f, 0.002611f, 0.011415f, -0.005748f, -0.006159f, -0.011409f, 0.005794f, -0.002893f, -0.007796f, -0.002802f, -0.016831f, -0.026578f, -0.020449f, -0.027658f, -0.010612f, 0.003214f, 0.022295f, 0.016561f, 0.006035f, 0.023504f, 0.007105f, 0.014401f, 0.013223f, -0.006236f, 0.020357f, 0.022110f, 0.015594f, -0.029574f, -0.016584f, -0.017076f, 0.006530f, -0.011735f, 0.000875f, 0.008583f, -0.008582f, -0.020821f, 0.013599f, -0.009799f, 0.004853f, 0.004647f, 0.021415f, -0.022146f, 0.034695f, -0.034086f, 0.035439f, 0.000074f, 0.017793f, -0.017024f, 0.006277f, -0.038108f, -0.021289f, -0.018456f, 0.016889f, 0.007938f, 0.024475f, -0.002261f, - -0.000075f, -0.012239f, -0.030669f, 0.020211f, -0.016746f, -0.008524f, 0.014600f, 0.034987f, 0.033674f, 0.015985f, -0.002245f, -0.022588f, 0.013402f, -0.034789f, -0.002727f, -0.019663f, 0.011269f, 0.037969f, -0.036247f, 0.013432f, 0.016813f, -0.022313f, -0.002245f, -0.003622f, 0.012624f, -0.014711f, -0.021532f, 0.004516f, -0.008723f, -0.031368f, 0.016023f, -0.002883f, -0.029713f, 0.022293f, 0.029132f, -0.009366f, 0.000952f, 0.004375f, -0.012585f, 0.019201f, 0.008744f, -0.005096f, -0.004749f, -0.012161f, -0.007139f, 0.015468f, 0.008662f, 0.008950f, -0.000703f, -0.013411f, -0.004171f, -0.004359f, -0.015262f, -0.002945f, 0.004524f, -0.000614f, -0.004508f, -0.001076f, -0.010901f, 0.001735f, -0.003745f, 0.007704f, 0.004050f, 0.001867f, -0.012631f, 0.010712f, 0.000904f, -0.005095f, -0.003240f, -0.001720f, -0.000693f, 0.006511f, -0.004702f, -0.001571f, 0.004650f, 0.013132f, 0.006345f, 0.004147f, -0.007795f, 0.010568f, -0.025133f, -0.029404f, -0.008057f, 0.019524f, -0.022436f, 0.015414f, -0.030950f, -0.005241f, -0.011691f, -0.010678f, -0.024467f, -0.001865f, -0.008915f, -0.014559f, 0.012284f, -0.016261f, - 0.018233f, 0.004133f, 0.014317f, -0.021598f, -0.040718f, -0.003056f, 0.008817f, -0.016838f, -0.012245f, 0.007075f, 0.005703f, -0.019753f, -0.009200f, 0.028972f, 0.014237f, -0.003409f, 0.015998f, 0.041452f, 0.001806f, 0.005574f, 0.004555f, -0.002756f, -0.000331f, 0.006422f, 0.005847f, -0.031211f, -0.011140f, -0.038218f, -0.011856f, -0.035617f, -0.016625f, 0.002327f, 0.042382f, 0.019992f, -0.020472f, -0.024068f, 0.016010f, 0.033574f, 0.021326f, -0.014488f, 0.025783f, -0.009322f, -0.001592f, -0.044209f, -0.012934f, -0.005375f, -0.005180f, -0.030120f, -0.048538f, 0.016033f, 0.000199f, -0.035372f, 0.009416f, 0.056292f, 0.007599f, 0.006703f, -0.035020f, -0.002807f, -0.000213f, 0.008198f, -0.039366f, 0.036998f, 0.006079f, 0.010493f, 0.020540f, 0.008199f, 0.022254f, -0.001306f, 0.010596f, -0.008246f, -0.016897f, -0.013926f, 0.007828f, -0.011148f, -0.003382f, -0.015021f, 0.005429f, 0.012952f, 0.000495f, 0.010969f, 0.001440f, -0.003883f, 0.000059f, -0.008477f, 0.006389f, 0.006719f, 0.001370f, 0.001532f, -0.005798f, -0.002092f, 0.003591f, 0.009580f, 0.006909f, -0.007733f, -0.002667f, -0.002974f, - -0.018337f, -0.025353f, -0.018733f, -0.005838f, -0.002186f, 0.003355f, -0.004238f, -0.006922f, -0.007713f, 0.000352f, -0.005119f, -0.006494f, -0.011360f, -0.005897f, 0.018727f, -0.011136f, -0.009919f, -0.002557f, 0.022898f, -0.033934f, -0.006735f, 0.008409f, -0.016214f, 0.039630f, -0.032271f, -0.033197f, -0.026987f, 0.038343f, 0.017226f, -0.021810f, -0.019696f, -0.013011f, -0.003954f, -0.011696f, -0.012120f, 0.002145f, 0.014403f, 0.037901f, -0.003990f, 0.016308f, 0.014132f, 0.013845f, -0.024959f, -0.031078f, -0.022374f, 0.026590f, -0.004408f, 0.032250f, 0.010762f, -0.003253f, -0.043576f, -0.035360f, -0.003549f, 0.003190f, -0.025221f, -0.015572f, -0.011780f, -0.011878f, -0.057220f, -0.012169f, -0.013881f, -0.020372f, -0.009999f, -0.013219f, -0.026200f, 0.018809f, 0.035904f, 0.020200f, 0.001108f, 0.021445f, 0.026990f, -0.009260f, 0.008635f, 0.007159f, 0.002774f, -0.000789f, -0.006728f, 0.019183f, 0.007710f, 0.031950f, -0.007237f, 0.003465f, 0.011384f, 0.062602f, -0.000626f, 0.033446f, 0.041973f, -0.003293f, -0.036395f, 0.003509f, 0.036465f, 0.005712f, -0.030984f, -0.027483f, -0.035534f, 0.023625f, - -0.029012f, -0.007511f, 0.041794f, -0.017543f, -0.027845f, 0.009026f, -0.007565f, 0.001211f, 0.011480f, -0.017100f, -0.007772f, 0.003886f, -0.005148f, -0.007525f, -0.001500f, 0.003619f, 0.020908f, -0.001528f, -0.010744f, -0.008881f, -0.000024f, -0.007578f, -0.006515f, -0.005402f, -0.010445f, -0.004533f, 0.004003f, -0.004556f, -0.000961f, -0.013818f, 0.003704f, -0.000894f, 0.002908f, 0.014745f, 0.008948f, -0.007942f, 0.003902f, 0.003589f, -0.012593f, -0.018695f, 0.007158f, 0.008172f, 0.001073f, -0.019104f, -0.021233f, -0.002835f, -0.014857f, -0.004308f, -0.002235f, -0.018843f, 0.034811f, 0.025273f, -0.059301f, 0.018379f, 0.023183f, -0.010657f, 0.016741f, 0.055714f, 0.004261f, 0.012160f, -0.019923f, 0.012679f, -0.021039f, -0.013521f, -0.011379f, 0.003816f, 0.014056f, 0.019863f, -0.003256f, 0.008019f, -0.006467f, -0.003719f, -0.011189f, 0.014553f, 0.052512f, -0.017552f, -0.017431f, 0.018690f, 0.012991f, 0.001642f, -0.038851f, 0.024668f, -0.031055f, 0.017333f, 0.021681f, 0.002196f, 0.005213f, -0.006605f, 0.035987f, 0.027289f, -0.000077f, 0.018279f, -0.014961f, 0.023117f, 0.003509f, 0.026141f, - 0.038126f, -0.001093f, 0.009366f, -0.005260f, -0.014614f, -0.001211f, 0.016382f, 0.018713f, -0.037225f, -0.022585f, 0.008210f, 0.039770f, -0.019799f, 0.026329f, 0.017354f, 0.004950f, -0.043317f, 0.005007f, 0.006248f, -0.051353f, 0.029718f, -0.028826f, -0.034483f, -0.064937f, 0.015324f, 0.039105f, -0.018236f, -0.036307f, 0.007046f, 0.043370f, 0.027325f, 0.004685f, -0.006133f, 0.000455f, 0.014902f, -0.013471f, 0.020033f, 0.033298f, 0.031404f, -0.002494f, 0.013037f, 0.032955f, -0.005687f, -0.000566f, -0.004147f, 0.028371f, -0.004695f, 0.006896f, -0.013831f, 0.007140f, -0.008711f, 0.001010f, -0.000119f, -0.002319f, -0.006978f, 0.006164f, 0.016253f, 0.005592f, 0.004235f, -0.015218f, 0.003317f, -0.015700f, 0.004206f, 0.024615f, -0.009530f, 0.000353f, 0.002693f, -0.011717f, -0.015812f, -0.017560f, -0.004554f, 0.011140f, -0.005732f, 0.003003f, -0.011199f, -0.001056f, -0.000178f, -0.032451f, -0.008928f, -0.001325f, 0.006243f, 0.008358f, -0.007347f, 0.011613f, 0.005503f, 0.006258f, -0.010244f, -0.009322f, -0.006457f, 0.003022f, 0.014971f, 0.041173f, 0.030002f, -0.009644f, -0.078848f, 0.009861f, - 0.040283f, 0.019494f, 0.009186f, -0.034299f, 0.000341f, -0.023522f, 0.006145f, -0.001804f, 0.007139f, 0.012466f, 0.017204f, 0.007611f, -0.042601f, 0.025504f, -0.005445f, 0.008072f, 0.033345f, 0.013122f, 0.006697f, -0.011244f, 0.041231f, -0.000950f, 0.040987f, -0.048618f, -0.013866f, 0.016141f, -0.028042f, -0.024252f, 0.002308f, -0.005993f, -0.021820f, 0.003085f, 0.036295f, -0.000734f, 0.002953f, -0.018321f, -0.038456f, -0.024442f, -0.010569f, 0.016616f, -0.003712f, 0.004198f, -0.018612f, -0.020456f, -0.009652f, 0.031477f, -0.020770f, 0.018303f, 0.012616f, 0.010480f, 0.004058f, -0.031722f, -0.045215f, -0.003324f, 0.031262f, -0.037657f, 0.018987f, -0.032370f, 0.021129f, -0.034076f, -0.001133f, -0.033593f, 0.048809f, -0.043597f, -0.025660f, 0.011761f, 0.008537f, 0.022471f, 0.019005f, -0.011013f, -0.005446f, -0.011085f, 0.006618f, -0.000094f, 0.029367f, -0.035299f, -0.013493f, -0.045468f, 0.024347f, -0.015915f, 0.002440f, -0.001537f, 0.013165f, -0.009770f, 0.005344f, -0.018382f, -0.027879f, 0.018722f, -0.014090f, 0.000849f, 0.005375f, 0.024746f, 0.010394f, -0.017109f, 0.004408f, -0.005533f, - -0.021859f, -0.003773f, 0.005954f, 0.007502f, -0.019693f, -0.009539f, 0.023158f, -0.001880f, -0.018255f, -0.007891f, 0.027066f, -0.030547f, -0.009830f, 0.006756f, -0.006513f, 0.011477f, -0.001635f, -0.013167f, -0.017644f, -0.005414f, -0.007521f, -0.005232f, -0.005330f, 0.005505f, -0.000728f, 0.011990f, -0.011431f, 0.006885f, 0.002925f, -0.004987f, 0.012256f, -0.067783f, -0.009660f, 0.020216f, 0.004895f, -0.016194f, -0.024242f, 0.002182f, -0.023052f, -0.002195f, -0.035562f, 0.033174f, -0.013366f, 0.020748f, -0.046227f, -0.026225f, -0.001048f, 0.056502f, -0.046385f, -0.004068f, -0.036335f, -0.028873f, -0.008921f, 0.035385f, -0.008360f, 0.015679f, 0.016452f, -0.018860f, -0.040318f, 0.056570f, 0.024505f, -0.032444f, 0.006128f, 0.004115f, 0.015464f, -0.031567f, 0.028103f, -0.002548f, -0.059376f, 0.006216f, 0.011677f, 0.015228f, -0.049237f, -0.011788f, 0.006000f, 0.043177f, 0.008033f, 0.024043f, -0.063484f, -0.038507f, 0.019213f, -0.000030f, 0.041097f, -0.011096f, -0.007186f, 0.003139f, 0.020778f, 0.019212f, 0.007119f, -0.080488f, 0.022443f, -0.009385f, 0.018182f, 0.042878f, -0.013808f, -0.003824f, - -0.049261f, 0.015900f, 0.021913f, -0.025779f, -0.015566f, 0.044386f, 0.069821f, 0.018336f, 0.011152f, -0.019843f, -0.008505f, -0.038274f, 0.002637f, 0.000481f, -0.047557f, 0.017247f, -0.001723f, -0.013823f, -0.003913f, 0.022259f, -0.018418f, -0.012181f, -0.002433f, -0.005040f, -0.002034f, 0.019666f, -0.008813f, 0.000423f, 0.010964f, 0.004537f, 0.015206f, 0.013141f, 0.009604f, 0.007067f, 0.018255f, 0.021846f, -0.029556f, 0.009323f, -0.018601f, 0.014485f, 0.001766f, -0.018416f, -0.012932f, -0.007132f, -0.006534f, -0.012055f, 0.010780f, -0.006113f, -0.012410f, 0.020140f, -0.003618f, -0.006295f, 0.010989f, 0.020749f, -0.000535f, -0.007351f, 0.005234f, 0.019373f, 0.020470f, 0.013271f, -0.007352f, 0.003612f, 0.003388f, 0.017454f, 0.010143f, -0.057210f, -0.037111f, -0.012194f, 0.000294f, -0.032203f, 0.027179f, -0.067771f, 0.004237f, -0.041259f, 0.022769f, -0.014734f, -0.045960f, -0.003251f, -0.011731f, -0.015614f, -0.052476f, -0.038057f, 0.012039f, 0.042968f, -0.027365f, 0.052831f, -0.043381f, -0.028222f, 0.010370f, -0.003450f, 0.024460f, -0.013845f, -0.014570f, -0.020612f, -0.005138f, -0.072058f, - -0.020127f, 0.002969f, -0.002314f, -0.011301f, -0.027854f, 0.023750f, -0.024554f, 0.039795f, -0.011226f, -0.004010f, -0.026777f, -0.024587f, -0.047468f, -0.020185f, 0.018673f, 0.008193f, -0.002079f, 0.004024f, -0.016536f, -0.012267f, -0.021562f, -0.017945f, 0.010674f, 0.015189f, 0.007563f, -0.041115f, 0.048807f, 0.007332f, -0.020034f, 0.039231f, 0.028244f, 0.046594f, -0.007933f, 0.027521f, -0.061974f, -0.033112f, -0.058523f, 0.061101f, -0.018737f, -0.041278f, -0.039765f, -0.085122f, -0.035243f, 0.060237f, -0.003224f, -0.029374f, 0.022421f, -0.057851f, -0.038542f, 0.015488f, -0.002802f, -0.048156f, -0.047145f, 0.000186f, -0.026835f, 0.008096f, 0.010836f, -0.035635f, 0.036073f, -0.020913f, -0.031202f, 0.003506f, -0.018267f, 0.051409f, -0.018952f, 0.023503f, 0.004202f, 0.031532f, -0.015122f, -0.008289f, 0.003521f, -0.013330f, 0.000029f, -0.028833f, -0.021830f, -0.004999f, 0.012842f, 0.001286f, 0.021006f, 0.008952f, 0.015712f, -0.012587f, 0.000424f, -0.025035f, -0.005808f, -0.008609f, 0.008177f, 0.025195f, 0.011803f, 0.010497f, 0.012168f, 0.010797f, 0.003181f, -0.032869f, -0.009491f, -0.022509f, - -0.005313f, 0.004483f, 0.015933f, 0.075588f, 0.096592f, -0.008538f, -0.042142f, -0.009556f, -0.015618f, -0.042502f, 0.019063f, 0.001827f, -0.030756f, 0.092445f, 0.032324f, -0.021092f, -0.063195f, -0.005033f, 0.015795f, 0.017434f, 0.019079f, 0.044614f, -0.012218f, -0.020999f, 0.021032f, -0.078936f, -0.052844f, -0.020069f, -0.005340f, 0.009301f, -0.042177f, -0.038091f, 0.041322f, 0.033366f, -0.024723f, -0.047424f, 0.030922f, 0.001707f, 0.054290f, -0.043124f, -0.009799f, -0.014154f, -0.002456f, -0.033893f, -0.051492f, 0.044340f, -0.031843f, -0.019406f, -0.039315f, -0.007967f, 0.026358f, 0.025446f, -0.015732f, 0.004364f, 0.004804f, 0.033731f, 0.050437f, 0.037934f, -0.064201f, -0.029990f, -0.038026f, -0.008599f, 0.022129f, 0.009011f, -0.043867f, -0.062291f, 0.053786f, 0.004403f, -0.052452f, -0.086249f, 0.044121f, -0.010338f, 0.023781f, 0.022916f, 0.023244f, 0.004133f, 0.017170f, -0.033239f, -0.012927f, 0.024614f, 0.004349f, -0.014975f, 0.009792f, -0.002995f, -0.046226f, 0.024444f, -0.058711f, -0.002723f, -0.002845f, -0.009102f, -0.021078f, -0.007066f, 0.025857f, -0.000614f, -0.005899f, 0.014421f, - -0.018992f, 0.058397f, -0.004521f, 0.006307f, -0.004259f, 0.001758f, 0.014248f, 0.000316f, 0.013718f, -0.027984f, 0.006288f, -0.004122f, -0.020427f, 0.003334f, 0.009689f, 0.020322f, -0.009687f, 0.006602f, -0.048830f, -0.014658f, -0.002771f, -0.024229f, 0.021615f, -0.001606f, -0.006004f, -0.012396f, -0.020213f, -0.028276f, -0.041710f, 0.013952f, -0.004321f, 0.031834f, 0.035976f, 0.024407f, -0.024790f, -0.032819f, -0.043610f, -0.014858f, 0.039684f, 0.034001f, 0.005373f, 0.016678f, -0.014178f, -0.023566f, -0.019309f, 0.001517f, 0.005519f, -0.018174f, 0.008595f, 0.033732f, 0.041789f, -0.051754f, -0.043391f, 0.123456f, -0.009899f, -0.012067f, -0.018467f, -0.038961f, -0.004189f, 0.044539f, 0.071628f, -0.032962f, -0.019846f, -0.007268f, -0.032497f, -0.008115f, -0.018291f, 0.028435f, -0.029356f, 0.032547f, 0.015600f, -0.011197f, -0.040968f, -0.003032f, -0.016829f, 0.061583f, -0.033767f, -0.000856f, 0.000185f, -0.006172f, 0.027955f, -0.017786f, -0.002241f, 0.012775f, -0.008347f, -0.060203f, 0.030781f, -0.027494f, -0.031690f, -0.007366f, -0.033803f, -0.019746f, -0.061492f, 0.058878f, 0.002818f, -0.039327f, - -0.072064f, 0.041955f, -0.042457f, -0.041650f, 0.000687f, -0.032464f, 0.014738f, 0.026565f, 0.082230f, -0.023442f, 0.032286f, -0.007020f, -0.039552f, -0.033846f, -0.009703f, 0.123386f, -0.108784f, -0.008101f, 0.113582f, -0.103917f, -0.039207f, 0.058310f, -0.008458f, -0.047049f, 0.109863f, -0.054459f, -0.022380f, 0.050188f, 0.012675f, 0.021313f, -0.032322f, 0.036178f, 0.051349f, 0.023776f, -0.012878f, -0.003570f, 0.051869f, -0.007741f, 0.029770f, -0.000923f, 0.020848f, -0.029809f, -0.003630f, 0.013388f, 0.008542f, 0.005457f, 0.001606f, 0.001853f, 0.021735f, -0.010130f, 0.005797f, 0.007703f, 0.007523f, -0.046697f, -0.018858f, 0.014593f, -0.039061f, 0.011550f, 0.022713f, -0.016917f, -0.017256f, -0.013838f, 0.009686f, -0.019344f, 0.022792f, 0.018765f, -0.002193f, 0.010731f, -0.013681f, -0.028314f, -0.026958f, 0.053881f, 0.010092f, 0.033474f, 0.007288f, 0.006326f, 0.021787f, -0.018858f, -0.004019f, 0.034014f, -0.020082f, -0.047300f, 0.035544f, -0.005122f, 0.020947f, -0.005821f, -0.013502f, -0.013741f, 0.057643f, -0.074989f, 0.066083f, -0.012042f, -0.042120f, 0.035235f, 0.011950f, -0.007308f, - 0.006867f, 0.004233f, -0.008678f, 0.012443f, -0.015015f, -0.019239f, -0.009129f, -0.026405f, -0.022133f, -0.049029f, -0.019194f, 0.040994f, 0.038577f, -0.060802f, 0.019454f, 0.031306f, 0.026083f, -0.010977f, -0.060088f, -0.006009f, -0.030091f, -0.070190f, 0.043187f, 0.110775f, -0.064636f, -0.007563f, 0.078475f, -0.023119f, -0.028926f, 0.063659f, 0.047043f, 0.022920f, -0.026638f, -0.052443f, 0.016585f, -0.021743f, -0.033446f, 0.115881f, 0.085042f, -0.070930f, -0.052466f, 0.062294f, -0.115486f, -0.041023f, -0.033218f, -0.020443f, 0.079533f, 0.052718f, 0.034378f, 0.037897f, -0.135571f, -0.047695f, 0.127782f, 0.073813f, 0.014514f, -0.034937f, 0.043548f, -0.045891f, -0.092354f, -0.061722f, 0.043965f, -0.034071f, -0.007924f, 0.051250f, 0.095370f, -0.012222f, -0.054879f, 0.006306f, 0.037257f, -0.066172f, -0.025017f, 0.067603f, 0.060656f, 0.060878f, 0.041977f, -0.012915f, -0.039743f, -0.020004f, 0.051430f, 0.014426f, 0.021202f, -0.010688f, 0.005125f, 0.023106f, 0.001350f, -0.010123f, -0.011856f, -0.015576f, 0.010867f, 0.007750f, 0.049282f, 0.013368f, -0.010648f, -0.020609f, 0.004184f, 0.001831f, - -0.008110f, -0.018182f, 0.004209f, 0.038042f, -0.041905f, -0.013000f, 0.036450f, -0.009185f, -0.001736f, 0.024040f, -0.010234f, 0.017606f, 0.006955f, 0.020795f, -0.042380f, -0.006659f, 0.007965f, 0.046691f, 0.010677f, 0.022031f, 0.018994f, 0.010241f, -0.009898f, 0.014942f, 0.021627f, -0.026016f, 0.011690f, -0.114552f, 0.049030f, 0.000197f, -0.012086f, 0.058148f, -0.010344f, -0.044518f, 0.021811f, 0.019904f, 0.056802f, 0.032082f, -0.031352f, 0.001335f, 0.008426f, 0.038875f, 0.008663f, -0.045433f, -0.002170f, -0.002890f, 0.008764f, -0.042272f, -0.046218f, 0.066033f, -0.024355f, -0.069650f, 0.035222f, 0.061286f, -0.035106f, -0.012063f, 0.003570f, 0.041937f, -0.050843f, -0.066405f, 0.017664f, 0.055597f, -0.012605f, -0.024068f, -0.014313f, -0.013864f, 0.023789f, 0.010113f, 0.013998f, 0.140555f, 0.007248f, -0.018223f, 0.001381f, 0.004199f, 0.075493f, 0.002189f, -0.027587f, 0.016922f, -0.060011f, -0.035116f, 0.014839f, 0.000105f, 0.064766f, 0.051693f, -0.034175f, -0.010013f, -0.032351f, 0.001334f, 0.022818f, 0.005780f, 0.006647f, 0.023283f, -0.017468f, -0.069367f, 0.016976f, 0.046578f, - -0.022744f, 0.041097f, -0.064755f, 0.030046f, 0.018647f, -0.056293f, 0.008925f, 0.001007f, -0.025208f, 0.002473f, -0.011199f, 0.027845f, 0.026523f, -0.047150f, -0.029772f, 0.062740f, -0.048699f, 0.023041f, -0.005263f, -0.018472f, 0.012995f, -0.001908f, -0.029011f, 0.016037f, 0.008919f, 0.011484f, -0.001716f, -0.004795f, 0.002275f, 0.008713f, -0.011615f, -0.010182f, 0.007658f, 0.006156f, -0.006843f, -0.000470f, 0.012981f, 0.023443f, -0.014778f, -0.009385f, 0.002039f, -0.004100f, 0.007222f, -0.005699f, -0.004128f, 0.005528f, -0.001285f, 0.014176f, -0.005469f, 0.007075f, -0.019243f, 0.011214f, -0.013766f, 0.011860f, 0.019468f, -0.001641f, -0.000733f, 0.003062f, -0.024804f, 0.019466f, 0.039302f, -0.073742f, -0.242543f, -0.287021f, -0.025813f, -0.199068f, 0.078198f, 0.485279f, 0.261055f, 0.394142f, 0.415395f, -0.045177f, -0.119719f, 0.035481f, -0.302566f, -0.369870f, -0.114275f, -0.407163f, -0.326848f, 0.082859f, -0.235113f, -0.064100f, 0.468651f, 0.169634f, 0.331332f, 0.572377f, 0.340683f, 0.152341f, 0.115971f, 0.040531f, -0.254998f, -0.317498f, -0.104756f, -0.433629f, -0.433884f, 0.057130f, - -0.324475f, -0.266350f, 0.160073f, -0.273095f, -0.280757f, 0.211875f, 0.086105f, -0.038818f, 0.500318f, 0.468430f, 0.299161f, 0.635101f, 0.598584f, 0.204407f, 0.238254f, 0.185600f, -0.301393f, -0.302228f, -0.382071f, -0.756605f, -0.892977f, -0.642365f, -0.639396f, -0.471757f, 0.016163f, 0.043461f, 0.311409f, 0.538353f, 0.663702f, 0.604598f, 0.701783f, 0.601156f, 0.354636f, 0.238298f, 0.079407f, -0.118694f, -0.266361f, -0.379122f, -0.325612f, -0.472333f, -0.528834f, -0.438760f, -0.512748f, -0.384927f, 0.060994f, 0.123170f, 0.298767f, 0.599055f, 0.477186f, 0.367561f, 0.277988f, 0.109289f, -0.090821f, -0.074366f, -0.150196f, -0.188203f, -0.143533f, -0.163540f, -0.157760f, -0.067510f, -0.063844f, 0.003331f, 0.097503f, 0.069097f, 0.136880f, 0.164148f, 0.028701f, 0.119000f, 0.114612f, -0.032054f, 0.038132f, 0.026520f, -0.087121f, 0.003486f, 0.028263f, -0.101148f, -0.110114f, -0.154096f, -0.316325f, -0.354034f, -0.275142f, -0.263315f, -0.086157f, 0.128809f, 0.232825f, 0.378380f, 0.571416f, 0.616519f, 0.572107f, 0.400467f, 0.122356f, -0.129657f, -0.276495f, -0.413281f, -0.509580f, -0.501681f, - -0.391499f, -0.269366f, -0.127788f, -0.039782f, 0.016131f, 0.045868f, 0.116435f, 0.191442f, 0.197952f, 0.183226f, 0.188654f, 0.133623f, 0.120819f, 0.103966f, 0.042284f, 0.008921f, 0.026081f, 0.022028f, 0.013842f, 0.008328f, -0.024186f, -0.065027f, -0.098640f, -0.142233f, -0.180395f, -0.180843f, -0.145537f, -0.111815f, -0.058720f, 0.009760f, 0.061085f, 0.089162f, 0.103775f, 0.091302f, 0.080947f, 0.088441f, 0.085691f, 0.068540f, 0.058678f, 0.048447f, 0.033314f, 0.017205f, 0.000952f, -0.032790f, -0.060462f, -0.066895f, -0.062758f, -0.057149f, -0.053309f, -0.049425f, -0.036711f, -0.013331f, 0.001364f, -0.004970f, -0.016263f, -0.009157f, 0.001259f, 0.007314f, 0.014391f, 0.016688f, 0.022852f, 0.036347f, 0.049537f, 0.048620f, 0.050086f, 0.044194f, 0.028590f, 0.017274f, 0.010009f, -0.003909f, -0.016409f, -0.025412f, -0.045445f, -0.063015f, -0.069153f, -0.071937f, -0.062177f, -0.039726f, -0.010530f, 0.022189f, 0.051452f, 0.065260f, 0.063719f, 0.049769f, 0.032942f, 0.016221f, 0.000861f, -0.008160f, -0.012887f, -0.013630f, -0.011919f, -0.011509f, -0.011268f, -0.010205f, -0.007969f, -0.006186f, - -0.003704f, -0.001284f, 0.000374f, 0.001833f, 0.002580f, 0.002457f, 0.001876f, 0.000938f, 0.000259f, -0.000066f, -0.000117f, -0.000096f} - }, - { - {-0.016487f, -0.019659f, 0.010316f, 0.000747f, 0.015493f, 0.005699f, 0.006919f, 0.004487f, 0.006376f, -0.000046f, -0.000062f, -0.003328f, -0.009927f, -0.005682f, 0.002816f, -0.000374f, -0.001719f, -0.001069f, 0.005492f, 0.004292f, 0.000197f, 0.004954f, -0.004377f, -0.011324f, 0.003784f, -0.002541f, 0.001419f, -0.005716f, 0.004717f, -0.004658f, -0.002257f, -0.001770f, 0.008342f, -0.001817f, 0.000040f, -0.003309f, -0.000812f, -0.009151f, 0.003253f, -0.001453f, 0.005135f, -0.004292f, 0.000719f, -0.001968f, -0.007315f, 0.002474f, -0.000616f, -0.001899f, 0.003435f, 0.006230f, -0.001146f, -0.003639f, -0.010760f, 0.001103f, -0.006349f, 0.003115f, 0.000227f, -0.004081f, -0.000051f, -0.001688f, -0.001403f, -0.007738f, 0.005195f, -0.006849f, 0.003962f, -0.002627f, -0.004532f, -0.003844f, -0.008247f, 0.004721f, 0.000541f, 0.002409f, 0.005143f, -0.005249f, -0.008463f, 0.005610f, -0.008107f, 0.000383f, -0.005367f, 0.001866f, -0.004130f, 0.003849f, -0.002036f, 0.002090f, -0.003551f, 0.000782f, -0.001592f, 0.002318f, -0.001649f, -0.001808f, -0.001765f, -0.001646f, -0.003179f, 0.000598f, 0.000908f, -0.000449f, - -0.002485f, 0.001913f, -0.001854f, 0.000398f, -0.001208f, -0.002112f, -0.000730f, -0.000675f, -0.000266f, -0.000367f, -0.000235f, -0.001720f, -0.000907f, 0.000409f, -0.001016f, -0.000462f, -0.000504f, -0.001174f, -0.000308f, -0.000843f, -0.001121f, -0.000942f, -0.029345f, -0.000378f, -0.003951f, 0.007643f, 0.000081f, 0.002907f, -0.002487f, 0.003776f, 0.000680f, 0.003299f, -0.003455f, 0.018853f, -0.004179f, -0.002708f, -0.008185f, 0.002673f, -0.009869f, -0.003190f, 0.000664f, -0.004806f, -0.000136f, 0.006896f, 0.003902f, 0.002598f, 0.004601f, 0.006701f, -0.008275f, -0.003166f, -0.000233f, 0.004250f, -0.007814f, 0.007516f, -0.006552f, -0.003296f, 0.005968f, -0.001173f, 0.001320f, -0.004833f, 0.005506f, 0.005820f, 0.006191f, -0.009650f, -0.003018f, 0.010387f, -0.000218f, -0.001586f, -0.002413f, 0.011329f, 0.007317f, 0.008762f, 0.000077f, -0.002066f, -0.002706f, -0.000635f, -0.000319f, 0.001279f, 0.003311f, -0.010975f, -0.001075f, -0.005115f, -0.006567f, -0.000855f, 0.001782f, -0.005695f, 0.001433f, -0.004353f, -0.001682f, -0.001761f, -0.000223f, 0.003796f, 0.003425f, -0.001987f, -0.001391f, -0.002486f, - -0.008992f, -0.002107f, -0.005611f, 0.000148f, -0.007373f, 0.001975f, 0.000024f, 0.007358f, -0.002634f, 0.001012f, -0.006473f, 0.000557f, 0.000801f, -0.002973f, -0.003155f, 0.003126f, 0.000007f, 0.000833f, -0.000393f, 0.002195f, -0.000671f, 0.000913f, -0.000467f, -0.000504f, 0.002564f, 0.001223f, 0.001016f, 0.000413f, -0.000391f, 0.001585f, 0.009854f, 0.011688f, -0.008301f, 0.000956f, -0.007095f, 0.010701f, 0.001881f, -0.004566f, -0.006434f, -0.005702f, -0.001277f, 0.001268f, 0.002759f, 0.014270f, -0.008654f, -0.001462f, -0.003502f, 0.005529f, -0.016159f, -0.001983f, 0.010126f, -0.000387f, 0.008491f, 0.003699f, 0.006788f, 0.007074f, 0.003011f, -0.001509f, -0.007648f, 0.002381f, -0.002221f, 0.000851f, 0.011857f, 0.002911f, 0.010157f, -0.005504f, -0.002922f, 0.000677f, -0.013932f, 0.001511f, 0.010209f, -0.003142f, 0.000847f, -0.008744f, 0.006406f, -0.000252f, 0.002780f, -0.010329f, 0.005898f, -0.006973f, -0.003948f, -0.007279f, -0.008545f, 0.004749f, 0.001529f, -0.002838f, -0.004434f, -0.004187f, -0.003122f, -0.002147f, 0.004649f, -0.004834f, -0.008682f, -0.013293f, 0.012079f, 0.009258f, - 0.000383f, -0.013298f, 0.003885f, -0.006432f, 0.005073f, -0.004379f, 0.000821f, -0.008188f, -0.005216f, -0.010634f, -0.004887f, -0.001574f, 0.010158f, 0.006027f, -0.011603f, 0.004878f, 0.000130f, -0.001097f, 0.004895f, -0.000779f, 0.003860f, 0.008071f, 0.000301f, 0.001626f, 0.005289f, 0.001024f, 0.000955f, 0.005260f, -0.001070f, -0.000236f, 0.000282f, 0.000604f, 0.001009f, 0.001238f, -0.001324f, 0.001461f, -0.001250f, 0.000303f, 0.000135f, 0.001283f, 0.000185f, 0.003299f, 0.002828f, 0.000123f, -0.000298f, 0.003235f, 0.001562f, -0.002586f, 0.000339f, 0.001111f, 0.049764f, -0.018523f, 0.022277f, -0.017755f, 0.001489f, 0.005264f, 0.005203f, -0.014663f, -0.005002f, -0.004946f, -0.024532f, -0.000166f, 0.001262f, -0.008861f, -0.001463f, -0.000139f, 0.017482f, 0.003205f, -0.012253f, 0.008889f, 0.009705f, 0.002141f, 0.017723f, -0.013238f, -0.004867f, -0.007091f, 0.003715f, 0.014191f, -0.001067f, 0.000863f, 0.005257f, -0.002578f, 0.006322f, 0.002837f, 0.016218f, -0.002487f, 0.006336f, -0.010681f, 0.009680f, -0.007490f, 0.010812f, -0.000229f, -0.011376f, -0.001738f, 0.016351f, -0.000759f, - 0.011052f, 0.006620f, 0.010628f, 0.000915f, -0.008472f, -0.006899f, 0.000143f, -0.005137f, 0.008720f, 0.005770f, -0.008696f, 0.001162f, -0.006801f, 0.011522f, -0.003175f, 0.009237f, 0.011037f, 0.001906f, 0.011379f, -0.000558f, -0.005563f, -0.001913f, -0.007080f, 0.000292f, 0.014964f, -0.009432f, -0.009655f, -0.003670f, 0.004228f, -0.006618f, -0.004109f, 0.002876f, 0.007176f, -0.003019f, 0.002620f, -0.014567f, 0.003554f, 0.000918f, -0.001065f, 0.005067f, 0.000299f, 0.001346f, 0.003436f, -0.000467f, -0.001905f, 0.001543f, -0.003372f, 0.001028f, -0.001418f, 0.000399f, 0.000613f, -0.000539f, -0.001188f, -0.002929f, -0.000251f, -0.002336f, -0.001465f, -0.000998f, -0.004862f, -0.041355f, 0.004661f, -0.012096f, -0.008612f, -0.013279f, -0.016113f, 0.006517f, 0.014642f, -0.002078f, 0.005770f, 0.002409f, 0.007581f, 0.001799f, 0.000673f, 0.004606f, -0.008760f, 0.020710f, -0.000943f, -0.011893f, 0.013653f, -0.004034f, 0.005871f, -0.013423f, -0.008283f, -0.009484f, 0.004281f, 0.002613f, 0.010715f, 0.000414f, -0.006441f, 0.001197f, -0.005736f, -0.006366f, -0.007025f, -0.002402f, -0.009832f, -0.004968f, - 0.009426f, -0.008565f, -0.000475f, -0.006685f, -0.010441f, -0.004636f, 0.001463f, 0.003466f, 0.006853f, -0.005253f, -0.004746f, 0.006709f, 0.001298f, 0.002568f, 0.001901f, 0.004177f, 0.006367f, -0.010060f, -0.003252f, -0.000966f, -0.014055f, 0.003822f, -0.000862f, 0.008369f, -0.008184f, -0.006301f, -0.007641f, 0.001393f, 0.008940f, 0.006863f, 0.015666f, 0.010469f, -0.009463f, 0.003944f, -0.004215f, 0.007391f, 0.004735f, -0.010339f, 0.007616f, 0.002051f, -0.011383f, 0.001520f, -0.001965f, 0.001021f, -0.002028f, -0.007837f, 0.001574f, -0.005617f, -0.005803f, 0.002202f, -0.003133f, 0.001389f, 0.004355f, -0.002810f, -0.003642f, -0.003906f, -0.005735f, -0.001078f, 0.004655f, -0.001188f, 0.004837f, 0.000048f, 0.003310f, 0.002167f, 0.001785f, -0.002098f, -0.000695f, 0.000807f, -0.001916f, -0.002288f, 0.000668f, -0.002213f, -0.000721f, 0.000592f, -0.003994f, 0.002304f, -0.001982f, -0.000732f, 0.000605f, -0.000164f, 0.000459f, 0.001312f, -0.001708f, 0.001160f, 0.002898f, -0.052614f, 0.014691f, -0.015559f, -0.012927f, -0.009250f, 0.001976f, -0.002560f, 0.031303f, 0.003250f, 0.007642f, -0.003282f, - 0.000320f, -0.012594f, 0.012892f, 0.003889f, -0.001646f, 0.002731f, 0.016772f, -0.008118f, -0.002662f, 0.004004f, 0.001353f, 0.008496f, -0.007035f, -0.003079f, 0.009347f, 0.003533f, 0.008627f, 0.001182f, -0.008731f, -0.005680f, 0.005246f, -0.000699f, -0.002829f, -0.005411f, -0.003016f, -0.000199f, 0.015910f, 0.004133f, -0.002634f, 0.000496f, 0.001368f, -0.004600f, 0.011521f, 0.008824f, -0.002489f, -0.011723f, 0.003183f, -0.006132f, 0.010973f, 0.008522f, -0.008182f, 0.003433f, -0.010655f, -0.009524f, -0.008307f, -0.010528f, -0.003488f, 0.002512f, -0.006222f, 0.000684f, -0.006893f, -0.005862f, 0.012601f, 0.008036f, -0.010304f, -0.014037f, 0.001795f, 0.012231f, -0.009126f, -0.006773f, 0.010410f, 0.008179f, 0.011846f, -0.007366f, -0.000130f, 0.003434f, 0.005002f, 0.013228f, 0.003736f, -0.001573f, -0.000305f, -0.009398f, -0.001235f, -0.000035f, -0.007986f, 0.000735f, -0.002212f, -0.003600f, 0.000360f, -0.000971f, 0.004237f, -0.000835f, -0.001374f, 0.002050f, -0.001025f, -0.003278f, -0.002041f, 0.000847f, 0.003463f, -0.001431f, -0.001017f, 0.000228f, -0.000604f, 0.006260f, 0.001310f, 0.008078f, - -0.005421f, 0.001563f, 0.000615f, -0.003190f, 0.000125f, -0.000151f, -0.004054f, 0.001203f, -0.000610f, -0.004591f, -0.004170f, -0.002167f, -0.003977f, -0.003078f, 0.001314f, -0.001969f, -0.027811f, -0.002758f, 0.004680f, 0.013523f, -0.002638f, -0.007088f, 0.003167f, 0.019873f, -0.025033f, 0.005802f, -0.005084f, -0.004648f, -0.011272f, 0.006771f, -0.020063f, -0.013058f, 0.006891f, -0.010488f, 0.006338f, 0.028576f, -0.005063f, 0.011550f, -0.013445f, 0.013800f, -0.003593f, 0.004116f, -0.012061f, 0.005628f, 0.003415f, -0.006460f, 0.002833f, -0.001303f, -0.006209f, -0.000413f, 0.007840f, 0.012303f, -0.009643f, -0.015364f, -0.012185f, -0.011278f, 0.001451f, 0.009023f, 0.023887f, -0.000272f, 0.016082f, 0.016811f, -0.015650f, 0.012027f, -0.023013f, -0.008407f, 0.001443f, -0.010228f, -0.009549f, 0.006383f, -0.022289f, -0.004398f, 0.015482f, -0.006682f, -0.005845f, 0.002051f, -0.006823f, 0.006340f, -0.006771f, 0.010874f, 0.014020f, -0.003885f, 0.004342f, 0.000589f, -0.014242f, 0.001229f, -0.009227f, -0.006338f, -0.011260f, 0.006396f, 0.004860f, -0.010784f, 0.000845f, 0.008048f, 0.007443f, 0.009533f, - 0.009785f, -0.001494f, -0.009372f, 0.007747f, 0.004012f, 0.004644f, 0.002489f, 0.005606f, -0.000677f, -0.000173f, 0.000776f, 0.002313f, 0.002666f, -0.003812f, -0.001225f, -0.003073f, -0.002102f, 0.004505f, 0.003805f, 0.004349f, -0.007929f, 0.001624f, -0.001043f, -0.003232f, -0.003866f, 0.004076f, -0.002574f, -0.004288f, 0.001024f, 0.001034f, -0.001488f, 0.009594f, 0.003106f, -0.001865f, -0.002196f, -0.004435f, -0.001311f, 0.003931f, 0.005881f, 0.001514f, -0.000072f, 0.006018f, 0.065835f, -0.003256f, -0.026135f, -0.003335f, -0.001214f, 0.002429f, 0.008233f, 0.003320f, -0.003090f, -0.002772f, -0.013195f, -0.006282f, 0.007289f, 0.016040f, -0.013264f, -0.008363f, 0.010684f, 0.000814f, -0.003936f, 0.004249f, -0.001117f, -0.015333f, -0.015621f, 0.021117f, -0.002037f, -0.001400f, -0.003600f, 0.010824f, -0.000905f, 0.001099f, 0.006862f, -0.011645f, 0.012245f, 0.005074f, 0.001947f, 0.004656f, 0.012241f, -0.029620f, -0.013298f, -0.007235f, 0.027202f, 0.003481f, 0.001986f, -0.008431f, -0.009303f, 0.008124f, -0.001282f, 0.009426f, -0.003420f, -0.018937f, 0.001976f, 0.002279f, -0.002914f, 0.009156f, - 0.004075f, 0.002438f, 0.015062f, 0.036806f, -0.002964f, -0.003141f, 0.013980f, 0.004236f, -0.004399f, 0.009611f, 0.028617f, -0.003244f, 0.005439f, 0.010354f, 0.008297f, 0.007433f, 0.007573f, 0.008494f, 0.006521f, -0.007601f, 0.011394f, 0.020422f, -0.004771f, 0.007816f, 0.000069f, -0.002599f, -0.014192f, 0.008800f, 0.003298f, -0.001176f, 0.004243f, 0.004883f, 0.001129f, 0.000545f, -0.004810f, -0.005508f, -0.002202f, -0.010949f, -0.004896f, -0.007427f, 0.009455f, 0.004631f, 0.003570f, -0.001562f, -0.001469f, 0.000538f, -0.006321f, -0.000007f, 0.002271f, -0.008698f, 0.007571f, -0.003802f, 0.001316f, -0.002674f, 0.000378f, 0.002863f, 0.003423f, -0.006781f, -0.006727f, -0.005591f, 0.000718f, -0.001172f, -0.001892f, -0.000533f, 0.004656f, -0.001257f, 0.000455f, -0.002796f, -0.005983f, -0.003260f, -0.000197f, 0.013293f, 0.014802f, -0.018878f, -0.005489f, -0.016025f, 0.015847f, 0.029711f, -0.014249f, -0.003345f, -0.016347f, -0.007101f, -0.019778f, 0.014083f, -0.012084f, -0.004906f, -0.001304f, 0.000141f, -0.007891f, -0.009677f, 0.017710f, -0.016096f, -0.005980f, 0.001847f, 0.012072f, 0.012933f, - -0.018593f, -0.005446f, 0.007101f, -0.015951f, 0.009031f, -0.012650f, -0.005198f, 0.004681f, 0.000334f, -0.006912f, -0.001968f, 0.003834f, 0.020694f, 0.002584f, 0.004640f, 0.000027f, -0.017774f, 0.019395f, -0.009549f, -0.014502f, 0.011578f, -0.010329f, -0.011765f, 0.015298f, -0.006957f, 0.001985f, -0.003429f, 0.002084f, 0.020016f, -0.003400f, 0.004444f, -0.017513f, -0.001435f, 0.020467f, 0.004511f, 0.020280f, 0.017269f, -0.005664f, -0.004498f, -0.023502f, 0.003553f, -0.003914f, 0.015545f, 0.019173f, -0.011063f, 0.004811f, -0.034656f, -0.009411f, 0.011389f, -0.011901f, 0.017852f, 0.001256f, 0.003798f, -0.006295f, -0.001417f, -0.008242f, 0.001390f, -0.005663f, 0.012576f, 0.012504f, -0.000648f, 0.004299f, -0.000276f, 0.007095f, 0.002951f, 0.005158f, 0.010607f, -0.003157f, -0.012123f, 0.005589f, 0.002647f, 0.007693f, -0.002081f, 0.008159f, -0.001750f, -0.002741f, 0.001941f, -0.004797f, -0.003335f, 0.000900f, -0.008561f, 0.002437f, -0.003048f, 0.007575f, 0.003135f, -0.000475f, -0.001704f, -0.004868f, -0.007611f, -0.000520f, 0.000905f, 0.003128f, -0.002869f, 0.001763f, -0.007172f, -0.000010f, - 0.000305f, -0.003639f, 0.004611f, 0.000566f, -0.000012f, 0.002103f, -0.002434f, 0.000462f, -0.000083f, 0.011855f, -0.015229f, 0.005124f, -0.014245f, -0.001613f, -0.019218f, 0.031395f, -0.009328f, 0.002075f, -0.010000f, -0.028762f, 0.016478f, 0.005730f, -0.021482f, 0.013196f, -0.009713f, -0.007167f, 0.007427f, 0.029716f, -0.014928f, 0.028705f, -0.000630f, -0.020282f, 0.000787f, 0.006660f, -0.017853f, 0.019578f, -0.010364f, 0.014481f, 0.031550f, 0.003032f, -0.014826f, -0.004192f, -0.001743f, 0.007188f, -0.012617f, -0.006917f, -0.001752f, 0.015523f, -0.005618f, -0.006315f, -0.020748f, -0.000759f, -0.024519f, -0.004566f, 0.027671f, -0.006275f, 0.015736f, 0.001445f, 0.004162f, -0.036386f, 0.000452f, -0.023300f, 0.018684f, 0.032509f, 0.010002f, 0.008134f, 0.001981f, 0.004834f, -0.019028f, 0.006649f, 0.010108f, -0.008501f, -0.002403f, -0.007539f, -0.004810f, 0.014637f, 0.000303f, 0.017763f, 0.054517f, 0.019889f, 0.005417f, -0.018768f, -0.017439f, -0.011318f, 0.010695f, -0.018582f, -0.001635f, -0.001720f, 0.003775f, 0.010468f, -0.010198f, -0.001946f, 0.010123f, 0.011112f, 0.002275f, 0.001876f, - 0.007557f, 0.009568f, 0.007991f, -0.000112f, -0.001791f, -0.001820f, 0.000831f, -0.003981f, -0.004960f, 0.004328f, -0.002514f, 0.006739f, -0.008279f, -0.002631f, 0.005706f, 0.004847f, -0.000502f, 0.004380f, -0.004266f, 0.001993f, 0.003000f, 0.004069f, -0.004681f, -0.004602f, 0.006464f, 0.004620f, 0.003626f, -0.001674f, -0.003266f, 0.001568f, -0.009214f, -0.002417f, 0.001472f, -0.004904f, 0.002237f, -0.003401f, -0.002399f, 0.001050f, 0.000744f, -0.000768f, -0.001829f, -0.006107f, 0.057718f, -0.030134f, -0.000119f, -0.014606f, -0.028201f, -0.037873f, 0.011411f, -0.011652f, 0.012039f, -0.035809f, 0.007877f, 0.013742f, 0.012422f, -0.014630f, -0.032832f, -0.025696f, -0.021479f, 0.000983f, -0.012212f, -0.023774f, -0.016164f, -0.007872f, -0.019311f, -0.013255f, 0.003980f, 0.025918f, -0.000038f, 0.004269f, -0.000292f, -0.021547f, 0.014273f, -0.001362f, 0.004599f, -0.004302f, -0.014113f, 0.013156f, -0.017749f, -0.024969f, 0.023506f, -0.024344f, 0.005487f, 0.000413f, -0.034484f, -0.020283f, 0.014220f, 0.000009f, 0.017361f, -0.010556f, -0.036677f, 0.000482f, 0.001795f, 0.014509f, 0.015320f, 0.035385f, - -0.019651f, -0.070972f, -0.024562f, -0.023793f, 0.016501f, -0.046022f, -0.015313f, -0.007152f, -0.042296f, -0.013623f, -0.000275f, -0.007513f, -0.007573f, 0.009966f, -0.011087f, -0.000385f, -0.010376f, 0.010684f, -0.024704f, 0.009702f, 0.020645f, -0.024817f, -0.012363f, 0.013176f, 0.010292f, 0.009101f, -0.025628f, 0.006836f, 0.000744f, -0.003040f, 0.014258f, -0.002835f, 0.011801f, 0.010692f, -0.001823f, 0.003772f, 0.002622f, -0.002496f, -0.008244f, 0.014889f, -0.004240f, -0.009363f, 0.000742f, 0.000255f, 0.008053f, 0.003357f, 0.000456f, 0.003032f, -0.007083f, -0.007024f, 0.001296f, 0.003353f, 0.005001f, 0.008820f, -0.000519f, 0.004393f, -0.000374f, 0.003963f, -0.008315f, -0.003134f, -0.005633f, -0.004917f, -0.000480f, -0.000521f, 0.003662f, -0.009252f, -0.004060f, -0.006751f, -0.004820f, -0.009717f, -0.012320f, -0.010672f, -0.000763f, -0.000340f, 0.001849f, -0.006290f, -0.008499f, -0.033016f, 0.013078f, 0.016328f, -0.005426f, -0.006363f, -0.016435f, -0.018173f, 0.042006f, 0.015281f, -0.039129f, 0.013547f, -0.021291f, -0.002050f, -0.019332f, -0.040263f, 0.011888f, -0.020997f, -0.008702f, 0.001637f, - 0.001263f, -0.010279f, -0.033949f, -0.021145f, 0.016802f, -0.020914f, -0.000467f, -0.018511f, -0.028213f, -0.011084f, 0.031584f, 0.004985f, 0.005736f, -0.027493f, -0.009054f, -0.005686f, -0.003424f, 0.011075f, 0.013950f, 0.017696f, 0.022171f, -0.010825f, 0.012578f, 0.004248f, -0.012523f, 0.007710f, -0.021163f, -0.018706f, -0.015882f, 0.006834f, -0.018370f, 0.000788f, -0.027721f, -0.024620f, -0.012397f, 0.028852f, 0.022867f, 0.021891f, 0.024536f, -0.022483f, 0.030690f, 0.000884f, 0.014287f, 0.041708f, -0.008323f, -0.007836f, 0.007100f, -0.020281f, 0.008601f, -0.009602f, -0.025714f, 0.003255f, 0.021568f, -0.025278f, -0.017603f, -0.003223f, 0.023168f, -0.019250f, 0.002511f, 0.006891f, 0.014071f, 0.003292f, -0.005348f, -0.013185f, 0.003840f, 0.009575f, -0.005006f, 0.001077f, -0.006387f, 0.001991f, -0.006050f, 0.002393f, 0.000772f, 0.003424f, -0.002074f, 0.002308f, 0.004982f, 0.011617f, -0.001148f, -0.000447f, 0.001323f, 0.005302f, -0.008405f, -0.003849f, -0.009287f, -0.002907f, -0.001805f, -0.011265f, 0.002447f, 0.009801f, -0.000540f, -0.013390f, -0.001876f, -0.001427f, -0.011086f, -0.013127f, - -0.018454f, -0.008047f, 0.007577f, 0.000923f, 0.005470f, -0.003109f, -0.003011f, -0.007027f, -0.000613f, -0.016818f, -0.002634f, 0.009632f, 0.016143f, -0.001097f, 0.005126f, -0.009685f, 0.001586f, -0.005893f, 0.008465f, 0.003246f, -0.015815f, -0.036873f, 0.042165f, -0.032952f, 0.043663f, 0.024439f, 0.016624f, 0.009346f, 0.017149f, 0.018636f, 0.017220f, 0.046934f, -0.016445f, 0.003308f, -0.003152f, -0.008101f, -0.001442f, 0.005818f, -0.004378f, 0.009029f, -0.003064f, 0.014680f, 0.012296f, -0.002644f, -0.008151f, -0.046783f, -0.016689f, -0.033934f, -0.001590f, 0.017891f, 0.018025f, 0.005742f, 0.009171f, 0.013489f, 0.011119f, 0.013075f, 0.033480f, 0.049977f, 0.033501f, 0.006764f, -0.006386f, -0.009653f, -0.014379f, 0.017488f, 0.017777f, 0.019971f, -0.014884f, -0.011701f, -0.018454f, -0.003041f, 0.024319f, 0.000239f, 0.029148f, -0.017693f, 0.015596f, 0.009421f, 0.026154f, -0.054743f, -0.039245f, -0.016052f, -0.022043f, -0.022504f, 0.006718f, -0.009183f, 0.034421f, 0.010235f, -0.038458f, -0.003161f, 0.062131f, -0.020952f, 0.019350f, -0.009387f, 0.025511f, -0.011894f, -0.007812f, 0.000926f, - -0.010597f, -0.013861f, -0.001039f, 0.010462f, 0.015340f, 0.010736f, -0.004080f, 0.012107f, -0.003261f, 0.005610f, -0.015883f, -0.010765f, 0.010106f, 0.006472f, -0.015971f, -0.006922f, -0.006807f, -0.002115f, 0.003912f, -0.004170f, -0.007857f, 0.003621f, 0.000658f, 0.002634f, -0.001305f, -0.004475f, 0.007018f, 0.002337f, -0.004064f, 0.009388f, -0.001366f, 0.002784f, -0.001803f, 0.011070f, -0.009438f, 0.009864f, 0.004254f, -0.009202f, 0.006043f, 0.000365f, 0.001568f, -0.009593f, -0.028180f, 0.010578f, 0.000176f, 0.002075f, -0.003292f, 0.010755f, -0.002670f, -0.004974f, 0.003357f, 0.008413f, 0.006872f, -0.004109f, 0.008537f, -0.026818f, -0.013343f, 0.022539f, 0.009937f, 0.016671f, 0.043205f, 0.003850f, 0.028921f, 0.042216f, 0.029357f, -0.018860f, -0.042613f, -0.001271f, -0.019485f, 0.046287f, 0.013421f, 0.036201f, -0.005009f, -0.019141f, -0.006982f, -0.020901f, 0.008448f, -0.016042f, 0.002082f, -0.017887f, 0.009523f, -0.013021f, -0.005437f, -0.028828f, -0.028632f, -0.002674f, -0.041070f, 0.022729f, 0.015640f, -0.012142f, 0.021185f, -0.009856f, 0.008294f, 0.023655f, -0.025946f, -0.033941f, - 0.006151f, -0.007271f, 0.057367f, 0.024526f, -0.062802f, -0.016788f, -0.017783f, -0.032249f, -0.034279f, -0.070040f, 0.012432f, -0.024975f, -0.006545f, 0.010260f, 0.002593f, 0.014653f, -0.002755f, -0.008116f, -0.053203f, 0.006528f, -0.024179f, 0.006740f, 0.031227f, 0.006773f, 0.020940f, -0.031509f, -0.042093f, 0.008717f, 0.026103f, 0.017784f, 0.009802f, 0.016910f, 0.027130f, 0.034163f, 0.034901f, -0.030814f, -0.018693f, -0.022134f, -0.016005f, -0.025873f, 0.036808f, 0.021816f, 0.020742f, 0.005914f, 0.015854f, 0.013839f, -0.001325f, 0.019490f, -0.029702f, -0.010193f, -0.003578f, 0.002688f, -0.006462f, -0.020783f, 0.001157f, -0.003996f, 0.002690f, 0.007101f, 0.021460f, 0.001470f, 0.010009f, 0.010370f, 0.001551f, 0.010998f, 0.000289f, -0.006192f, 0.001243f, -0.015839f, -0.006636f, 0.008931f, 0.012326f, 0.004136f, 0.002185f, -0.019414f, -0.002007f, 0.001033f, -0.009595f, -0.006233f, 0.002823f, 0.006688f, -0.018241f, -0.019693f, -0.009267f, 0.007178f, 0.005696f, 0.010626f, 0.002317f, -0.006001f, 0.004355f, -0.020346f, -0.018618f, 0.076054f, 0.050246f, 0.069783f, 0.004561f, -0.013791f, - -0.047348f, -0.013943f, 0.007964f, 0.011032f, -0.011260f, -0.036586f, -0.013200f, 0.060294f, 0.024954f, -0.008303f, 0.018493f, -0.001329f, -0.022104f, -0.006437f, -0.014411f, 0.041117f, -0.003121f, 0.002440f, 0.017771f, 0.001194f, 0.020162f, -0.000182f, 0.028525f, -0.026187f, 0.032862f, 0.006673f, -0.015248f, -0.009224f, -0.016894f, 0.029658f, -0.041020f, -0.044315f, 0.028081f, 0.046395f, 0.002216f, 0.032033f, 0.044064f, -0.049549f, 0.016540f, 0.010150f, -0.002681f, -0.000432f, 0.007402f, -0.018588f, 0.034607f, -0.020959f, -0.016631f, 0.013981f, 0.001803f, -0.003732f, -0.007997f, -0.010319f, 0.005029f, -0.032728f, -0.009763f, 0.026383f, -0.032257f, -0.007429f, -0.021774f, 0.000830f, 0.065410f, -0.020524f, 0.004247f, 0.017500f, 0.000368f, -0.015041f, -0.040785f, 0.039902f, 0.018657f, -0.082230f, 0.020426f, 0.020705f, 0.015350f, -0.018434f, -0.008543f, 0.042016f, 0.001933f, 0.003102f, 0.010819f, -0.029214f, 0.001166f, 0.018599f, -0.007548f, 0.010750f, -0.002289f, -0.009492f, -0.024314f, 0.003718f, -0.003156f, 0.022585f, -0.002057f, -0.000957f, -0.016177f, 0.017893f, -0.005973f, -0.006216f, - -0.025664f, -0.012922f, 0.009086f, -0.016552f, 0.001416f, -0.008158f, 0.010332f, -0.009692f, -0.020636f, 0.010449f, -0.022233f, -0.006110f, -0.010079f, 0.001040f, 0.001405f, -0.008367f, 0.022257f, -0.002751f, 0.029995f, 0.018264f, -0.002962f, 0.003141f, 0.019211f, -0.013289f, 0.003484f, 0.002271f, 0.018442f, -0.016656f, -0.009817f, 0.000846f, -0.033964f, -0.081399f, 0.072416f, 0.043166f, 0.022960f, 0.016146f, 0.035775f, -0.082143f, 0.033728f, 0.037932f, 0.016247f, -0.052587f, 0.029263f, 0.053161f, 0.024643f, 0.058619f, 0.021386f, 0.001002f, -0.002323f, -0.001839f, -0.009981f, 0.024838f, 0.041653f, 0.039667f, 0.013871f, -0.012190f, -0.020685f, 0.004945f, -0.018832f, -0.022055f, 0.023205f, 0.015952f, 0.004422f, -0.022104f, -0.021501f, -0.004728f, -0.018692f, 0.009534f, 0.047872f, -0.008514f, -0.015473f, 0.016153f, 0.008679f, 0.014179f, 0.016721f, -0.003666f, -0.009657f, 0.038456f, 0.025450f, 0.012570f, 0.016976f, -0.003104f, -0.038217f, 0.008862f, 0.025449f, 0.003294f, -0.028444f, 0.038062f, 0.009930f, 0.052947f, 0.001969f, 0.047597f, 0.005093f, -0.015606f, -0.005065f, 0.011414f, - 0.067765f, -0.008564f, 0.024360f, 0.016695f, 0.032020f, 0.016770f, 0.000151f, -0.002060f, 0.020891f, 0.096412f, 0.004514f, 0.038679f, -0.032684f, -0.024415f, 0.012252f, 0.015158f, 0.018797f, 0.007727f, 0.003089f, -0.047387f, -0.018741f, -0.049688f, 0.002716f, -0.008536f, -0.016407f, -0.013897f, -0.005519f, -0.020965f, 0.002639f, -0.002178f, -0.022035f, 0.015757f, -0.025664f, -0.012473f, -0.023171f, -0.015851f, -0.001518f, 0.002547f, -0.018533f, -0.021519f, 0.005181f, 0.013673f, 0.015980f, -0.003255f, -0.006107f, -0.027684f, -0.036178f, 0.003614f, 0.004436f, -0.016498f, 0.032941f, 0.031865f, 0.047168f, 0.016538f, -0.010365f, 0.006441f, 0.014580f, 0.017848f, 0.021442f, 0.003160f, -0.022333f, 0.005635f, 0.028665f, 0.014672f, 0.001496f, 0.011463f, -0.053035f, 0.058165f, -0.000864f, 0.051481f, 0.001295f, 0.003504f, -0.046703f, -0.014357f, -0.020995f, 0.035714f, 0.009120f, 0.015833f, 0.009477f, -0.035880f, 0.003596f, 0.002882f, -0.031466f, -0.045109f, -0.046045f, 0.015615f, -0.017083f, 0.041992f, 0.002473f, -0.013323f, -0.010840f, 0.009053f, -0.016195f, 0.002704f, 0.012378f, -0.017677f, - 0.009994f, 0.014142f, 0.004900f, 0.004029f, 0.031840f, 0.053382f, -0.010380f, -0.000452f, 0.026917f, 0.021937f, 0.032227f, -0.023883f, -0.009254f, 0.009637f, -0.031859f, 0.003065f, 0.002880f, -0.042499f, 0.054813f, -0.002752f, 0.027724f, 0.023756f, 0.016839f, -0.032371f, 0.003188f, 0.027496f, -0.022312f, 0.049002f, 0.013633f, -0.018065f, 0.040759f, 0.030495f, 0.021521f, -0.068494f, -0.013759f, 0.013470f, -0.023168f, 0.003527f, -0.037944f, -0.009709f, -0.057592f, -0.016707f, -0.008636f, -0.016145f, -0.063828f, -0.006625f, -0.017268f, 0.096024f, -0.013631f, 0.019382f, -0.009652f, 0.015171f, -0.007836f, -0.015943f, 0.010652f, -0.013416f, -0.001771f, -0.007339f, 0.026124f, 0.009025f, 0.011648f, -0.041830f, -0.036881f, -0.028050f, -0.011261f, 0.007072f, -0.051940f, -0.008707f, -0.003885f, 0.003612f, 0.019459f, 0.014169f, -0.001222f, 0.019955f, -0.017939f, 0.000091f, 0.001466f, -0.030427f, -0.041183f, 0.007856f, -0.011770f, -0.038912f, -0.010176f, -0.018525f, 0.003043f, -0.041601f, -0.004279f, -0.018386f, 0.024776f, 0.000005f, -0.017146f, -0.006823f, 0.008046f, 0.009204f, -0.003466f, 0.018172f, - -0.018333f, -0.012145f, 0.024614f, 0.022533f, 0.040811f, -0.013944f, -0.002999f, -0.005787f, 0.010933f, 0.029041f, 0.025400f, 0.018685f, -0.015139f, 0.011337f, 0.031944f, 0.030790f, 0.013064f, -0.039193f, -0.045299f, 0.018833f, -0.006978f, 0.013371f, -0.009034f, 0.036802f, -0.028982f, -0.006714f, -0.010550f, 0.031981f, -0.025550f, 0.056744f, 0.070033f, 0.071378f, 0.003624f, -0.014309f, 0.010913f, -0.010297f, 0.016868f, -0.003990f, -0.001214f, -0.022091f, -0.058824f, -0.020239f, -0.056366f, 0.030935f, 0.029181f, -0.035162f, -0.026424f, -0.035252f, -0.016835f, -0.005889f, 0.074967f, -0.000046f, -0.039429f, -0.042464f, -0.003283f, 0.052024f, 0.024539f, -0.107126f, -0.022431f, -0.019727f, 0.013203f, 0.038949f, -0.046871f, -0.015570f, -0.028215f, 0.011095f, -0.063675f, 0.030326f, -0.011242f, -0.002396f, 0.016722f, 0.001618f, -0.031555f, 0.061134f, -0.006958f, 0.028572f, 0.065771f, 0.135328f, 0.081024f, -0.002979f, 0.045205f, 0.068530f, 0.088695f, 0.095919f, 0.027020f, 0.058369f, 0.016279f, -0.000230f, 0.035747f, -0.029680f, 0.059099f, 0.024629f, -0.026681f, -0.090152f, -0.065538f, 0.007449f, - -0.026025f, -0.019298f, -0.017119f, -0.010898f, -0.011601f, -0.037743f, -0.024682f, 0.000343f, -0.006313f, -0.003041f, -0.012182f, -0.004286f, -0.019748f, 0.022728f, -0.040237f, -0.017255f, 0.010893f, 0.006264f, 0.002993f, -0.011277f, -0.012968f, -0.008047f, 0.007429f, -0.007368f, 0.019881f, -0.025058f, -0.030669f, -0.031236f, -0.019144f, 0.021924f, 0.025246f, -0.010723f, -0.005016f, 0.008321f, -0.005437f, 0.041682f, 0.008768f, 0.002687f, 0.033754f, 0.020387f, 0.019106f, 0.047460f, 0.031434f, 0.035432f, 0.010924f, 0.016502f, 0.039622f, 0.014360f, 0.030672f, -0.029720f, 0.016102f, -0.014001f, -0.030893f, 0.034621f, -0.044637f, 0.073519f, -0.009169f, -0.014074f, 0.000944f, 0.058430f, -0.039778f, -0.007468f, -0.002124f, 0.000272f, 0.020989f, -0.015791f, 0.030454f, 0.010162f, -0.006183f, 0.006605f, 0.003169f, 0.023663f, -0.074523f, -0.023964f, -0.002625f, 0.007259f, -0.007684f, -0.054645f, 0.044010f, -0.003073f, 0.005731f, 0.015434f, -0.035589f, -0.016714f, -0.082138f, 0.021021f, -0.019488f, 0.015010f, 0.059431f, -0.017077f, 0.012222f, -0.008402f, 0.028186f, -0.049572f, -0.065657f, 0.056529f, - -0.005669f, 0.004180f, 0.009413f, 0.056839f, 0.041692f, 0.049219f, -0.001138f, -0.067693f, 0.039433f, 0.017850f, -0.016075f, -0.024478f, 0.037697f, -0.007765f, 0.047740f, 0.078556f, 0.061473f, 0.009669f, 0.005149f, 0.057710f, -0.011780f, 0.017119f, 0.047976f, -0.033696f, 0.055516f, 0.033215f, 0.019672f, -0.040297f, -0.019644f, -0.053482f, -0.001703f, 0.017106f, 0.078093f, 0.032020f, -0.072807f, -0.007666f, 0.046863f, -0.007866f, 0.022760f, 0.030496f, -0.051636f, -0.013746f, 0.025078f, 0.005045f, 0.013995f, -0.023547f, 0.016666f, 0.027308f, 0.003644f, -0.000660f, 0.041493f, 0.006833f, -0.008965f, -0.011889f, 0.013783f, -0.004793f, 0.022326f, 0.002374f, 0.016916f, 0.018038f, -0.002869f, -0.021099f, 0.040934f, -0.007078f, -0.012469f, -0.003859f, -0.027665f, -0.029155f, -0.018224f, -0.020597f, 0.013405f, 0.022918f, -0.024190f, -0.022151f, 0.005005f, 0.035039f, -0.052338f, -0.014093f, 0.020472f, -0.007605f, 0.000343f, -0.008550f, -0.005444f, -0.039164f, -0.000273f, -0.011502f, 0.010736f, 0.001446f, 0.006586f, -0.001052f, 0.003603f, -0.009411f, 0.016384f, 0.007721f, -0.004323f, -0.009224f, - 0.006949f, 0.000812f, -0.002926f, -0.102741f, 0.023543f, -0.017005f, -0.004027f, 0.080231f, 0.034495f, -0.025157f, -0.019473f, -0.000305f, -0.051889f, -0.063582f, 0.005387f, 0.000550f, -0.035764f, 0.037960f, 0.004615f, -0.036702f, 0.023208f, 0.069006f, -0.009231f, -0.039771f, 0.024988f, -0.023426f, -0.025502f, 0.012868f, 0.056072f, -0.018264f, 0.008229f, 0.015354f, -0.017266f, -0.041748f, -0.027358f, 0.055331f, 0.019499f, -0.054595f, 0.046707f, 0.018285f, -0.037374f, -0.019576f, 0.076903f, -0.025036f, -0.058974f, -0.030349f, 0.102207f, -0.100910f, -0.046729f, 0.059820f, -0.027065f, -0.032480f, -0.096098f, 0.074945f, -0.061523f, 0.021992f, 0.003222f, -0.011591f, -0.108523f, -0.032135f, 0.092936f, 0.058535f, -0.073412f, -0.020166f, -0.031776f, -0.015105f, 0.015086f, 0.020120f, 0.024218f, -0.128300f, 0.070175f, 0.053719f, 0.056477f, 0.000810f, 0.029581f, -0.062818f, -0.055751f, 0.109683f, 0.045069f, 0.012085f, 0.044232f, -0.059155f, 0.011932f, -0.026219f, 0.028275f, -0.016039f, 0.077056f, -0.031484f, -0.026730f, 0.010594f, 0.009344f, -0.029227f, 0.017589f, 0.008371f, 0.006609f, -0.005594f, - 0.003955f, 0.006094f, 0.006325f, -0.007323f, -0.004112f, 0.016019f, 0.000986f, -0.008672f, 0.033759f, 0.009811f, -0.029901f, 0.003174f, 0.028968f, 0.007405f, -0.028437f, 0.038092f, 0.068705f, -0.033887f, -0.039294f, -0.010827f, -0.008814f, 0.023132f, 0.050354f, 0.015072f, -0.046480f, -0.015677f, -0.006707f, 0.006754f, 0.014218f, -0.008022f, 0.020637f, -0.015057f, -0.001716f, 0.011827f, -0.019864f, -0.084890f, 0.014546f, 0.105676f, 0.032932f, 0.011211f, 0.002749f, 0.007800f, 0.045235f, 0.061977f, -0.014360f, 0.011451f, 0.015920f, -0.010857f, 0.037327f, -0.019921f, -0.005457f, -0.015118f, 0.028642f, 0.021213f, -0.011913f, 0.019488f, -0.028381f, -0.023178f, 0.028601f, -0.018662f, 0.031445f, -0.021243f, -0.009507f, -0.000799f, 0.017120f, -0.001264f, 0.012700f, 0.005019f, 0.032029f, -0.023214f, -0.004758f, 0.000376f, -0.012957f, 0.030882f, 0.026804f, -0.022464f, -0.008056f, -0.013881f, 0.006992f, -0.028927f, 0.015350f, 0.008667f, 0.014079f, -0.011679f, -0.008863f, 0.035175f, -0.042657f, -0.007553f, 0.017789f, -0.011735f, -0.007878f, 0.018302f, -0.052388f, 0.012410f, -0.019055f, 0.002921f, - -0.018661f, 0.044973f, -0.014851f, -0.019718f, 0.018407f, -0.010465f, -0.029755f, 0.057252f, -0.001729f, 0.005683f, -0.012981f, -0.022329f, -0.026214f, 0.028786f, -0.032702f, -0.015901f, 0.033003f, -0.045432f, -0.019839f, 0.005639f, -0.004377f, 0.005358f, -0.000844f, 0.006263f, 0.020012f, -0.007430f, 0.007766f, -0.009413f, 0.021010f, 0.011396f, -0.001024f, 0.001610f, 0.012754f, -0.011493f, 0.009238f, 0.001348f, 0.010175f, -0.004829f, 0.015883f, -0.008327f, 0.004189f, -0.014095f, -0.012133f, -0.019190f, 0.003440f, 0.000953f, 0.006259f, -0.009482f, 0.021176f, -0.007184f, -0.003759f, 0.018098f, 0.015996f, 0.008477f, -0.007580f, -0.012397f, 0.010892f, 0.014415f, 0.009036f, 0.006150f, -0.000283f, 0.013025f, 0.014187f, 0.006181f, 0.012041f, 0.001471f, -0.009484f, -0.000560f, 0.027806f, -0.078766f, -0.222881f, -0.183096f, 0.097003f, 0.027909f, 0.221817f, 0.396187f, 0.058970f, 0.124989f, 0.045574f, -0.315787f, -0.099749f, -0.214194f, -0.258827f, 0.007385f, 0.041511f, -0.107928f, 0.156700f, 0.204987f, 0.115160f, 0.326866f, 0.188615f, -0.041956f, -0.077401f, -0.151555f, -0.294972f, -0.232998f, - -0.068531f, -0.207767f, -0.028793f, 0.179395f, 0.030120f, 0.041805f, 0.271284f, 0.138361f, 0.085733f, 0.282713f, 0.043734f, -0.077985f, 0.110693f, -0.147995f, -0.293031f, -0.122669f, -0.247196f, -0.309583f, -0.004330f, -0.064631f, -0.081297f, 0.206225f, 0.227448f, 0.144625f, 0.343071f, 0.276658f, 0.130714f, 0.118034f, 0.068547f, -0.229108f, -0.210548f, -0.266904f, -0.352188f, -0.282568f, -0.119014f, -0.081923f, 0.007449f, 0.202574f, 0.246576f, 0.257858f, 0.247433f, 0.229054f, 0.049088f, 0.004218f, -0.038686f, -0.174673f, -0.191117f, -0.110626f, -0.200408f, -0.084475f, 0.017728f, -0.043834f, 0.100905f, 0.181115f, 0.055623f, 0.076477f, 0.034271f, -0.049534f, -0.030634f, -0.075793f, -0.098298f, -0.011922f, 0.027937f, 0.000685f, 0.081492f, 0.074912f, 0.008745f, 0.072103f, 0.000250f, -0.091495f, 0.080882f, 0.024171f, -0.081046f, 0.057000f, -0.059974f, -0.122271f, 0.056013f, -0.087067f, -0.215049f, 0.003226f, -0.094546f, -0.062868f, 0.213583f, 0.096355f, 0.101666f, 0.305073f, 0.202613f, 0.112099f, 0.133470f, -0.033472f, -0.192769f, -0.245569f, -0.332876f, -0.368773f, -0.233630f, -0.149725f, - -0.025589f, 0.139843f, 0.312398f, 0.344267f, 0.319715f, 0.332304f, 0.178061f, 0.007648f, -0.084785f, -0.219722f, -0.280258f, -0.182138f, -0.202495f, -0.162070f, -0.032505f, 0.005109f, 0.021393f, 0.078365f, 0.067351f, 0.057841f, 0.104741f, 0.103386f, 0.088057f, 0.102795f, 0.071908f, 0.022892f, -0.008239f, -0.046474f, -0.102257f, -0.113680f, -0.095060f, -0.101783f, -0.074604f, -0.040918f, -0.005836f, 0.030108f, 0.076044f, 0.082254f, 0.076179f, 0.069149f, 0.048776f, 0.017886f, 0.001523f, -0.006888f, -0.029151f, -0.030213f, -0.018243f, -0.022897f, -0.026586f, -0.018826f, -0.029239f, -0.026496f, 0.000461f, 0.002563f, 0.000206f, 0.009942f, 0.004742f, 0.005512f, 0.022852f, 0.023169f, 0.025318f, 0.029101f, 0.015654f, 0.004398f, 0.000986f, -0.008758f, -0.018285f, -0.023681f, -0.026647f, -0.027485f, -0.019415f, -0.008994f, -0.000583f, 0.007448f, 0.015774f, 0.016516f, 0.017612f, 0.017277f, 0.009381f, 0.000331f, -0.001767f, -0.007226f, -0.008463f, -0.006208f, -0.001942f, 0.001610f, 0.004828f, 0.005114f, 0.003933f, 0.000857f, -0.004074f, -0.007610f, -0.008363f, -0.009062f, -0.008766f, -0.006687f, - -0.002614f, 0.003339f, 0.007396f, 0.008558f, 0.010246f, 0.010955f, 0.008545f, 0.005875f, 0.002737f, -0.001285f, -0.003912f, -0.005533f, -0.006673f, -0.006140f, -0.004502f, -0.003017f, -0.001164f, 0.000721f, 0.001849f, 0.002426f}, - {-0.019615f, -0.023891f, 0.012167f, -0.004311f, 0.010651f, -0.005174f, -0.005291f, -0.010646f, 0.002607f, 0.002350f, -0.000400f, 0.000250f, -0.001122f, -0.008126f, -0.000873f, -0.004615f, -0.005314f, -0.005037f, -0.000116f, 0.000691f, -0.000329f, -0.000849f, 0.004148f, -0.001056f, -0.012328f, 0.007794f, 0.003918f, -0.004155f, 0.001320f, -0.000048f, 0.000213f, 0.001815f, 0.008058f, -0.004374f, 0.000552f, -0.013992f, 0.007089f, 0.001454f, 0.003245f, 0.004931f, 0.007978f, -0.004347f, -0.003278f, -0.001529f, -0.006992f, 0.000635f, -0.000984f, 0.006180f, -0.003207f, -0.000352f, -0.003342f, -0.003855f, 0.007525f, -0.005545f, -0.002632f, 0.000764f, -0.005011f, 0.004317f, -0.000108f, -0.002328f, 0.004686f, 0.008509f, 0.000612f, -0.000265f, -0.001103f, 0.007282f, -0.007093f, 0.000125f, -0.001038f, 0.003839f, -0.001683f, -0.003228f, 0.007938f, -0.000080f, 0.001742f, -0.002123f, 0.001715f, 0.004281f, -0.003300f, -0.004678f, 0.000326f, 0.004181f, 0.007012f, -0.003063f, -0.002026f, 0.001760f, 0.000462f, 0.001113f, -0.003090f, -0.000971f, 0.001983f, -0.000375f, 0.001420f, -0.002460f, -0.000693f, -0.001499f, - -0.002078f, -0.001519f, -0.001368f, 0.001151f, 0.000285f, -0.001050f, 0.001196f, 0.000808f, -0.000903f, -0.000262f, -0.000154f, -0.001316f, -0.002355f, -0.000643f, 0.000093f, 0.000549f, 0.001419f, -0.000140f, 0.000951f, 0.000539f, -0.001060f, 0.001017f, -0.028553f, 0.004886f, 0.003403f, 0.010046f, -0.003902f, 0.003065f, 0.011671f, -0.004481f, 0.003207f, -0.007036f, -0.010348f, 0.003826f, -0.007038f, -0.008025f, -0.008064f, 0.002467f, 0.003103f, -0.013758f, 0.008126f, 0.005409f, -0.002329f, -0.005015f, 0.003243f, -0.001219f, -0.003125f, 0.001035f, 0.004587f, 0.003419f, 0.007316f, 0.001448f, -0.002210f, 0.007556f, -0.003769f, 0.016436f, 0.003704f, 0.010143f, 0.003905f, 0.008905f, 0.003957f, 0.006152f, 0.003316f, 0.000775f, 0.000349f, 0.012453f, 0.002113f, -0.001944f, 0.000829f, 0.006600f, 0.004859f, 0.000763f, -0.000549f, -0.002500f, 0.001388f, 0.015188f, 0.004346f, 0.007049f, -0.007310f, -0.003710f, -0.007710f, -0.004822f, -0.007485f, 0.005680f, 0.003554f, -0.004728f, -0.003407f, 0.003429f, -0.003567f, 0.003821f, -0.001679f, -0.001075f, -0.005179f, -0.008672f, 0.003759f, -0.014122f, - -0.002005f, -0.002967f, -0.003591f, 0.000833f, -0.003313f, 0.000728f, 0.005340f, 0.002651f, -0.003642f, 0.000726f, -0.002890f, -0.006111f, -0.001004f, 0.003030f, -0.000308f, -0.004701f, 0.001730f, 0.000944f, 0.001806f, 0.003337f, 0.000122f, 0.000530f, -0.002250f, -0.001286f, -0.000337f, 0.000036f, 0.001169f, -0.002506f, -0.002214f, 0.000241f, 0.015928f, 0.022006f, -0.006950f, 0.005801f, -0.011170f, -0.000742f, 0.000499f, 0.028162f, -0.003055f, -0.007639f, -0.012364f, 0.000130f, 0.007968f, 0.012871f, -0.003095f, -0.017249f, -0.005076f, -0.006672f, -0.004827f, 0.005657f, -0.001412f, 0.010724f, 0.001055f, -0.006305f, -0.013985f, 0.003996f, -0.001454f, 0.003061f, -0.001826f, 0.001410f, 0.006618f, 0.002334f, -0.017555f, 0.001943f, 0.011034f, 0.005354f, 0.001218f, 0.002528f, -0.002954f, 0.007604f, -0.010445f, -0.001155f, 0.008327f, -0.006005f, -0.000158f, 0.013635f, -0.006528f, -0.000803f, -0.004832f, 0.008330f, -0.009080f, -0.006772f, 0.003968f, -0.009403f, -0.004721f, 0.011885f, 0.006917f, -0.010910f, -0.004128f, -0.001769f, -0.002831f, -0.005057f, 0.003704f, -0.004363f, 0.004272f, -0.000286f, - 0.000499f, 0.001787f, 0.008925f, -0.001188f, 0.012365f, 0.006320f, -0.009780f, -0.004587f, -0.004856f, 0.007369f, 0.002081f, -0.000662f, -0.004026f, 0.009920f, 0.003720f, -0.000343f, -0.000379f, -0.002674f, -0.002474f, 0.002835f, 0.000999f, 0.003161f, 0.007699f, 0.002700f, -0.000586f, 0.000359f, 0.000473f, 0.002394f, -0.000684f, 0.000815f, 0.003596f, 0.000661f, 0.004489f, -0.000001f, 0.001485f, 0.002224f, 0.002689f, 0.000867f, 0.001644f, 0.001912f, 0.001541f, 0.002517f, -0.000980f, 0.000667f, 0.001671f, 0.002580f, -0.000397f, -0.002239f, -0.002612f, 0.000446f, 0.052911f, -0.019509f, 0.010762f, -0.014894f, -0.001516f, 0.000553f, -0.001050f, -0.007885f, 0.004370f, 0.006109f, 0.001520f, -0.005731f, -0.012209f, -0.000438f, 0.007529f, 0.005338f, -0.005342f, -0.009206f, -0.000697f, 0.008276f, 0.015132f, -0.008124f, -0.001046f, -0.006131f, -0.013154f, 0.001489f, -0.006592f, 0.004018f, -0.004866f, 0.010280f, -0.017977f, 0.012181f, -0.000746f, -0.010728f, 0.002669f, 0.004524f, -0.001216f, -0.005681f, 0.000408f, 0.014105f, -0.000475f, 0.002323f, -0.001936f, 0.005398f, 0.002547f, -0.003332f, - -0.005237f, -0.011598f, 0.007579f, -0.002432f, -0.003351f, 0.004453f, 0.000141f, -0.019497f, 0.015040f, -0.020986f, -0.012043f, -0.014867f, 0.003267f, -0.001754f, 0.008971f, -0.004879f, 0.004803f, -0.008959f, 0.004369f, -0.002356f, -0.003590f, -0.009885f, 0.006112f, 0.006928f, 0.011946f, -0.002908f, -0.001067f, 0.003198f, -0.003539f, -0.002154f, 0.002358f, 0.006843f, -0.009016f, 0.004469f, 0.006601f, 0.007229f, -0.011442f, -0.009439f, 0.004021f, -0.005913f, 0.003079f, -0.000130f, -0.000614f, 0.000980f, 0.001526f, -0.000524f, 0.002797f, -0.003390f, 0.001711f, -0.001079f, 0.006814f, 0.000362f, 0.001731f, 0.001476f, 0.000513f, -0.002694f, -0.000147f, 0.000616f, -0.000727f, -0.041714f, 0.004256f, 0.000444f, -0.003540f, -0.006432f, 0.007302f, -0.005656f, 0.004860f, -0.001495f, -0.000069f, 0.006748f, 0.008784f, -0.005396f, 0.006471f, -0.001881f, -0.003562f, -0.011697f, -0.000569f, -0.015806f, -0.011604f, 0.013925f, 0.004972f, -0.005382f, -0.001964f, -0.001624f, 0.009666f, 0.005107f, -0.004961f, 0.008817f, 0.005867f, 0.003465f, 0.003055f, 0.003761f, 0.006716f, 0.005787f, 0.005707f, 0.015576f, - 0.014014f, 0.006066f, 0.001562f, -0.009654f, 0.010778f, -0.014351f, 0.002852f, -0.003983f, 0.011675f, -0.008770f, -0.011425f, 0.019682f, -0.004566f, -0.010508f, -0.009380f, 0.014657f, 0.008997f, 0.000565f, 0.007537f, 0.010649f, 0.004887f, 0.017205f, -0.001010f, -0.002681f, 0.009761f, 0.005990f, 0.000587f, 0.000418f, -0.008922f, 0.005392f, 0.005588f, 0.013899f, 0.005658f, 0.008668f, -0.005314f, -0.007090f, -0.015122f, -0.003443f, -0.008173f, -0.006475f, -0.006880f, 0.007683f, -0.000257f, 0.000626f, -0.004419f, -0.005091f, -0.001410f, -0.004474f, 0.001414f, -0.003002f, -0.005003f, 0.002096f, -0.000479f, 0.000226f, -0.004681f, -0.000646f, 0.000210f, -0.005874f, -0.000795f, -0.001369f, 0.000411f, -0.002617f, -0.003055f, -0.001864f, -0.001122f, 0.000147f, -0.000969f, 0.000978f, -0.001365f, 0.001695f, 0.000417f, 0.001504f, 0.003265f, -0.000702f, 0.003448f, 0.000747f, 0.002273f, -0.001526f, 0.000724f, -0.002916f, -0.001079f, -0.000452f, -0.003543f, -0.001056f, -0.001728f, -0.055382f, 0.015137f, -0.011652f, -0.017333f, -0.017136f, 0.010985f, -0.012663f, 0.009729f, -0.015963f, 0.009127f, 0.007827f, - 0.004895f, -0.016816f, 0.011885f, 0.000010f, 0.007280f, -0.013895f, 0.008076f, 0.016912f, 0.012977f, 0.000679f, -0.005765f, 0.002565f, -0.003392f, -0.017782f, -0.003432f, -0.008433f, 0.004333f, -0.011104f, 0.009937f, 0.009753f, -0.003554f, -0.000202f, 0.013592f, -0.002717f, 0.009290f, -0.007087f, -0.011449f, 0.006294f, 0.000010f, 0.006505f, 0.016670f, 0.010233f, -0.000402f, -0.028477f, -0.013545f, -0.003768f, 0.004195f, -0.004198f, 0.016015f, -0.024712f, 0.008103f, 0.003600f, -0.000040f, 0.008032f, -0.003018f, 0.012324f, -0.025922f, -0.011982f, 0.010337f, -0.026049f, -0.004658f, 0.012473f, 0.004601f, -0.005587f, -0.017308f, 0.006721f, 0.011516f, 0.008511f, -0.002918f, -0.018166f, -0.001375f, 0.000354f, -0.001876f, -0.000767f, -0.008791f, 0.004294f, -0.014189f, 0.009069f, 0.001455f, -0.008328f, 0.001898f, -0.010061f, 0.000989f, -0.012076f, -0.003233f, 0.004523f, 0.004739f, 0.000615f, -0.000976f, -0.004022f, -0.002989f, 0.001073f, -0.007017f, 0.006030f, 0.000652f, -0.003281f, 0.000228f, -0.006021f, -0.004713f, 0.001604f, -0.002361f, 0.003594f, -0.003080f, -0.001619f, -0.001949f, -0.002151f, - -0.004016f, -0.000499f, -0.002152f, -0.000724f, 0.001381f, -0.000771f, -0.001701f, 0.001763f, -0.000566f, -0.001416f, -0.001467f, -0.003526f, -0.002422f, 0.000711f, 0.002175f, -0.000355f, -0.026151f, 0.002817f, 0.004350f, 0.020478f, -0.019354f, 0.022363f, 0.006328f, -0.001804f, -0.005268f, -0.002411f, 0.002059f, -0.016351f, -0.003149f, 0.005244f, -0.005392f, -0.009594f, -0.002614f, 0.015474f, -0.016002f, -0.003471f, 0.015985f, 0.000079f, -0.006372f, 0.005654f, -0.007813f, 0.011790f, 0.005151f, -0.000141f, 0.005863f, -0.006828f, -0.010796f, -0.000759f, 0.000791f, 0.008826f, -0.018911f, -0.010168f, -0.008366f, -0.005820f, -0.005629f, -0.005709f, 0.002796f, 0.000939f, 0.001533f, -0.014074f, -0.014506f, -0.011473f, 0.000379f, -0.018083f, -0.010036f, 0.010853f, -0.007371f, 0.002409f, 0.001113f, -0.000327f, 0.004481f, 0.006444f, 0.006082f, 0.007293f, 0.010634f, -0.001874f, 0.011507f, -0.000726f, 0.005796f, -0.000952f, -0.007465f, -0.000426f, -0.012012f, 0.007407f, -0.014052f, 0.013088f, -0.015676f, -0.000225f, -0.016169f, 0.001543f, -0.016248f, -0.015563f, 0.007318f, 0.021462f, 0.006418f, -0.013818f, - 0.009810f, 0.000014f, -0.006172f, -0.003636f, -0.006466f, 0.008546f, 0.007292f, 0.010507f, 0.001828f, 0.008196f, -0.006973f, -0.000727f, 0.007952f, 0.000960f, 0.002411f, 0.001598f, -0.003965f, 0.004822f, -0.000503f, 0.001807f, 0.007036f, 0.002101f, -0.001840f, -0.004228f, -0.002024f, 0.002949f, 0.002829f, 0.002335f, 0.000748f, -0.003291f, 0.000181f, -0.000687f, -0.007520f, 0.007247f, 0.000758f, 0.002661f, 0.000261f, -0.001752f, -0.003604f, 0.002560f, -0.003674f, -0.001704f, 0.072327f, 0.000499f, -0.021341f, 0.002933f, -0.011761f, 0.028616f, -0.005126f, 0.007789f, 0.001737f, 0.001039f, -0.025858f, -0.013419f, 0.013738f, 0.012052f, -0.020461f, -0.003887f, -0.001002f, 0.017504f, 0.008390f, 0.006440f, 0.017119f, 0.002399f, 0.000751f, 0.014849f, -0.005717f, -0.023509f, 0.003023f, 0.017353f, 0.010078f, -0.007057f, -0.000053f, 0.011996f, 0.007121f, 0.003026f, -0.001070f, -0.013341f, 0.005910f, -0.014479f, 0.000992f, -0.026951f, 0.006559f, 0.007847f, -0.002572f, -0.012588f, 0.016470f, 0.008538f, -0.003923f, 0.012793f, 0.005633f, -0.011417f, 0.019852f, 0.001846f, -0.007617f, 0.004369f, - 0.020363f, 0.002900f, -0.000968f, -0.017685f, -0.010553f, 0.002098f, 0.006614f, 0.023365f, -0.008251f, -0.009725f, 0.001616f, 0.012605f, -0.008798f, -0.010604f, -0.001368f, 0.016897f, 0.011887f, -0.004620f, -0.013671f, -0.001018f, 0.014596f, -0.006312f, 0.030795f, 0.006487f, 0.004217f, -0.016314f, 0.013120f, 0.000503f, -0.003912f, -0.008444f, 0.000342f, -0.004855f, 0.000376f, 0.019012f, 0.008349f, 0.006730f, 0.003226f, 0.001929f, -0.000146f, -0.001560f, 0.001321f, 0.003586f, 0.006501f, 0.000779f, 0.000782f, 0.002266f, -0.005769f, -0.000181f, 0.001815f, -0.001486f, 0.005587f, -0.004595f, -0.000607f, -0.002399f, 0.001900f, 0.009975f, 0.003020f, -0.003495f, -0.001260f, 0.002160f, 0.000374f, 0.003143f, -0.001164f, -0.004709f, 0.003590f, 0.003389f, -0.003974f, -0.001218f, 0.008542f, 0.002816f, 0.004139f, 0.016500f, 0.008810f, -0.025746f, -0.002590f, -0.012969f, 0.026060f, -0.009648f, 0.012186f, 0.002419f, 0.016341f, 0.006521f, 0.002481f, -0.001230f, 0.006674f, -0.007320f, -0.010974f, -0.030461f, -0.022566f, 0.007593f, 0.020185f, 0.027133f, -0.009891f, -0.013079f, -0.011565f, 0.006150f, - -0.006321f, -0.001254f, -0.001052f, 0.003766f, 0.004152f, 0.018169f, -0.009576f, 0.001828f, 0.004476f, 0.008947f, -0.008695f, -0.006337f, -0.014370f, -0.009614f, -0.010015f, -0.016991f, -0.043469f, -0.000357f, -0.005811f, -0.018537f, 0.004207f, -0.001953f, -0.023578f, 0.008083f, -0.019996f, 0.005293f, -0.002428f, -0.001472f, 0.010146f, 0.013317f, -0.000383f, -0.019330f, 0.005735f, -0.012064f, -0.013523f, 0.018962f, 0.016944f, 0.019103f, -0.006190f, 0.003258f, 0.002489f, -0.009453f, 0.001472f, -0.004435f, 0.029595f, -0.004687f, -0.003083f, -0.002725f, -0.000249f, -0.017872f, -0.022436f, 0.005545f, -0.001681f, -0.001441f, 0.005013f, 0.032462f, -0.004033f, -0.014871f, -0.006426f, 0.017158f, -0.002525f, -0.005250f, -0.004932f, -0.000101f, -0.013796f, 0.003571f, -0.002707f, 0.002821f, -0.007009f, 0.000563f, -0.008802f, -0.000477f, -0.000635f, 0.003797f, -0.003746f, -0.001525f, -0.005421f, 0.007479f, 0.000366f, -0.005013f, 0.001083f, 0.002665f, -0.005758f, 0.001729f, 0.002128f, 0.009098f, -0.001939f, 0.002326f, 0.006130f, 0.004146f, -0.003339f, 0.004031f, -0.006824f, -0.010653f, 0.001211f, 0.001342f, - -0.004265f, -0.009904f, -0.002222f, -0.002215f, 0.008911f, 0.003657f, 0.005931f, -0.000737f, 0.007432f, 0.008454f, -0.028427f, 0.010528f, 0.003493f, 0.030065f, -0.020196f, -0.011434f, -0.006692f, 0.016061f, -0.015292f, -0.014700f, 0.013317f, 0.008964f, -0.015467f, -0.015610f, -0.015273f, -0.034221f, 0.022503f, 0.021116f, 0.022405f, -0.009620f, 0.007106f, 0.022220f, -0.032148f, 0.000060f, 0.021158f, 0.019601f, 0.008922f, -0.000035f, -0.010266f, 0.002168f, -0.004924f, -0.027827f, 0.003570f, 0.007643f, 0.004129f, 0.018480f, -0.016233f, 0.001767f, -0.030375f, -0.003848f, 0.006058f, -0.016701f, 0.006510f, 0.005145f, 0.013655f, 0.016643f, 0.023189f, -0.004724f, -0.009035f, -0.027925f, -0.019887f, 0.008625f, 0.041091f, -0.012728f, -0.001654f, -0.018910f, -0.009968f, -0.015003f, 0.008896f, 0.009095f, -0.003101f, 0.001347f, -0.029979f, -0.003960f, 0.020384f, -0.016227f, -0.014010f, 0.012061f, -0.005364f, 0.017646f, 0.004422f, -0.012967f, 0.002148f, -0.019591f, -0.005588f, -0.005176f, 0.037846f, -0.003786f, -0.011009f, 0.008272f, 0.007770f, -0.003326f, -0.006373f, -0.001938f, -0.005112f, -0.007034f, - -0.006487f, -0.005015f, 0.002710f, 0.002925f, 0.006148f, -0.001586f, -0.000040f, -0.003658f, 0.003747f, 0.000940f, -0.009643f, 0.002577f, -0.000033f, -0.001071f, 0.003560f, -0.000239f, -0.005242f, -0.005263f, -0.012478f, 0.004153f, -0.003891f, 0.003673f, 0.004839f, -0.005922f, 0.002745f, 0.001679f, -0.001204f, 0.004722f, 0.000071f, 0.013549f, 0.001957f, -0.002499f, 0.000375f, -0.003984f, -0.000660f, 0.002328f, 0.000435f, -0.001223f, 0.001155f, -0.005349f, 0.004297f, -0.017469f, 0.041130f, -0.019949f, -0.010163f, -0.000603f, -0.001134f, -0.028828f, 0.002090f, -0.021171f, 0.015680f, -0.039980f, -0.005635f, -0.012632f, 0.013948f, -0.013607f, -0.013685f, -0.033790f, 0.023149f, -0.013760f, 0.009651f, -0.010716f, 0.007089f, 0.018338f, -0.012919f, -0.022074f, -0.007254f, 0.015494f, 0.031912f, 0.010410f, 0.013505f, 0.001802f, -0.031647f, -0.016846f, -0.016943f, -0.008608f, 0.005831f, 0.029151f, 0.012719f, 0.017076f, 0.016052f, -0.004188f, -0.006475f, -0.009493f, -0.026398f, 0.001682f, -0.018340f, 0.029099f, -0.012931f, 0.020114f, 0.004532f, -0.010173f, 0.006942f, -0.006696f, -0.008761f, -0.015493f, - 0.023999f, 0.006441f, 0.040354f, 0.009001f, -0.042834f, -0.010527f, 0.014121f, 0.011445f, 0.006607f, -0.002214f, 0.004127f, 0.045352f, 0.022878f, -0.007409f, 0.005166f, -0.011933f, 0.033018f, -0.001035f, -0.000968f, 0.012947f, -0.028491f, -0.012220f, -0.009476f, -0.030602f, -0.036180f, 0.007456f, 0.013351f, -0.003202f, -0.017662f, -0.004497f, -0.005399f, -0.013918f, 0.000549f, -0.002676f, -0.010854f, 0.011330f, 0.017399f, -0.003543f, -0.002182f, -0.002374f, -0.006370f, 0.005096f, 0.001480f, -0.001746f, -0.003113f, -0.002774f, -0.001681f, 0.005820f, -0.002955f, -0.007845f, -0.001624f, -0.000199f, 0.002917f, 0.001793f, -0.004568f, 0.012248f, -0.003615f, 0.007512f, -0.001077f, 0.006302f, 0.003579f, -0.001769f, -0.007850f, -0.007698f, 0.003069f, -0.001966f, -0.012036f, -0.004383f, -0.002678f, 0.004735f, 0.001533f, -0.000756f, 0.003854f, 0.005860f, 0.002320f, -0.003227f, -0.004705f, -0.024941f, 0.014911f, 0.033325f, -0.003281f, -0.001458f, -0.000773f, 0.030968f, 0.009597f, 0.007408f, 0.005294f, 0.003640f, 0.005271f, -0.012234f, 0.002274f, -0.038419f, 0.005509f, -0.018532f, 0.016037f, 0.039228f, - -0.005104f, 0.002823f, -0.030980f, 0.041351f, 0.020073f, 0.017544f, -0.005157f, -0.022804f, 0.002738f, -0.007812f, 0.021001f, 0.015015f, -0.018818f, 0.000954f, 0.011081f, 0.007780f, -0.014565f, -0.012988f, 0.060642f, -0.014122f, -0.010570f, 0.012723f, -0.015438f, -0.011322f, 0.019286f, 0.018825f, 0.000750f, 0.007201f, 0.006871f, -0.023542f, -0.011672f, -0.001075f, 0.008002f, 0.020473f, 0.005085f, 0.004774f, -0.026506f, -0.002586f, 0.007830f, -0.036271f, 0.007942f, -0.010153f, -0.003646f, -0.006764f, 0.010653f, -0.010857f, -0.019634f, -0.021096f, -0.033226f, 0.004103f, -0.013459f, -0.006593f, 0.021302f, -0.007320f, 0.006922f, -0.037603f, -0.000055f, 0.034427f, 0.008094f, -0.017553f, -0.010360f, 0.020863f, 0.010774f, -0.023127f, 0.012934f, -0.016785f, -0.012820f, -0.005613f, -0.003198f, 0.007702f, -0.002201f, 0.001217f, -0.003532f, -0.004731f, 0.002810f, 0.004033f, -0.005820f, 0.004826f, 0.015284f, 0.002205f, -0.002047f, 0.006362f, 0.009676f, -0.004273f, 0.006599f, -0.004474f, -0.005877f, 0.001478f, 0.004407f, 0.012475f, 0.003392f, -0.001440f, 0.004663f, -0.002139f, 0.006594f, -0.003910f, - 0.006068f, -0.004803f, 0.002057f, 0.005059f, 0.001602f, -0.009005f, -0.004929f, 0.015833f, -0.006752f, -0.013121f, 0.006411f, 0.003096f, 0.004799f, -0.003667f, 0.020669f, 0.005722f, -0.004708f, -0.002686f, 0.005227f, -0.002322f, -0.019136f, -0.019215f, 0.045801f, -0.027359f, 0.007179f, -0.017478f, 0.053991f, 0.011495f, 0.010015f, -0.017219f, -0.020369f, 0.001994f, 0.015454f, -0.016516f, -0.026336f, -0.015652f, -0.038314f, -0.014922f, -0.022478f, -0.000018f, -0.051507f, 0.003632f, 0.027969f, 0.017215f, 0.022868f, -0.015913f, 0.005997f, 0.024799f, -0.002827f, 0.017986f, 0.006728f, 0.028020f, -0.014004f, 0.023370f, 0.018621f, 0.013293f, 0.030398f, -0.016986f, 0.018127f, -0.009278f, -0.010745f, -0.007155f, 0.006758f, -0.058844f, -0.018772f, -0.036575f, 0.042392f, -0.026681f, -0.030076f, -0.006444f, 0.023942f, 0.000668f, -0.010720f, 0.033304f, -0.011858f, -0.010564f, -0.024127f, -0.059531f, 0.002935f, 0.005525f, 0.024855f, -0.024970f, 0.000119f, -0.015231f, -0.020034f, 0.031819f, -0.006384f, 0.015929f, -0.034576f, -0.033726f, -0.020981f, 0.026511f, -0.002694f, -0.016840f, -0.017801f, -0.000746f, - -0.029325f, -0.020087f, 0.002889f, -0.012359f, -0.021866f, 0.032248f, -0.044296f, -0.042293f, 0.011075f, 0.000121f, 0.018686f, 0.002079f, -0.002015f, -0.013694f, -0.012012f, 0.001908f, -0.020942f, -0.008526f, 0.017872f, 0.002289f, 0.003072f, -0.010452f, 0.010581f, 0.003828f, -0.011444f, 0.005260f, -0.008486f, -0.001849f, -0.008706f, 0.007454f, -0.011587f, -0.003032f, 0.007876f, 0.015225f, 0.001702f, 0.000485f, -0.016746f, -0.005217f, -0.001171f, 0.002266f, -0.002501f, 0.014059f, -0.000633f, -0.005638f, 0.009063f, -0.010812f, -0.009794f, 0.005785f, 0.012951f, -0.003889f, -0.009291f, -0.012781f, 0.009942f, 0.007796f, 0.016050f, -0.021998f, -0.000018f, 0.029800f, 0.004034f, -0.008849f, 0.015450f, -0.023986f, 0.048133f, 0.030242f, -0.000144f, -0.021836f, -0.024680f, 0.010466f, -0.006107f, -0.002141f, -0.001162f, 0.043879f, -0.021342f, 0.000909f, -0.014799f, 0.016208f, -0.027042f, -0.024845f, -0.048915f, 0.011464f, -0.019781f, -0.027506f, -0.003199f, -0.046586f, -0.022756f, 0.013254f, 0.010126f, -0.006326f, 0.024478f, 0.002341f, 0.029636f, -0.012932f, -0.040399f, -0.006100f, -0.029543f, -0.005605f, - -0.008735f, -0.038858f, 0.005292f, 0.031769f, -0.089077f, 0.011367f, 0.000433f, 0.022201f, -0.004216f, -0.027737f, -0.052761f, 0.021174f, -0.006278f, 0.019790f, 0.012052f, -0.006408f, 0.031156f, -0.038414f, 0.054162f, -0.013481f, 0.030327f, 0.062959f, 0.025428f, 0.044808f, 0.017859f, 0.011787f, -0.005848f, 0.023418f, -0.008429f, -0.024434f, -0.032705f, -0.021259f, -0.000832f, 0.018592f, -0.002757f, -0.014372f, -0.020181f, -0.018288f, 0.025207f, -0.011073f, -0.008682f, 0.022364f, 0.004373f, 0.016848f, -0.001428f, -0.002417f, -0.006471f, 0.003979f, 0.008781f, -0.011405f, -0.001523f, -0.027935f, -0.019855f, 0.013759f, -0.006467f, -0.000690f, -0.003725f, -0.000513f, -0.010312f, -0.016717f, 0.012496f, -0.010057f, 0.016134f, -0.016082f, -0.007027f, -0.001775f, -0.010900f, -0.005664f, 0.008330f, 0.003307f, 0.019509f, -0.004793f, -0.011001f, 0.007223f, -0.022406f, 0.000389f, 0.003202f, -0.003538f, 0.001911f, -0.002533f, 0.011664f, 0.016192f, 0.003193f, -0.000569f, -0.007372f, -0.013527f, -0.006111f, 0.000789f, 0.026956f, 0.013289f, -0.012909f, 0.075165f, 0.061233f, 0.055161f, -0.012695f, 0.000027f, - -0.047030f, 0.034957f, 0.043410f, 0.014681f, 0.041933f, 0.016658f, 0.014195f, 0.014627f, -0.007515f, 0.005684f, 0.011542f, -0.010850f, -0.045299f, -0.027588f, -0.001755f, -0.030179f, -0.035090f, -0.082364f, 0.017988f, 0.014062f, 0.021358f, -0.015895f, -0.005696f, -0.011095f, 0.000509f, -0.025873f, -0.000806f, -0.019755f, 0.022696f, 0.018781f, -0.011809f, -0.016112f, -0.043421f, 0.072854f, -0.022867f, 0.014243f, -0.000091f, 0.004523f, 0.011597f, -0.030372f, 0.036359f, -0.018554f, 0.012393f, 0.007972f, -0.027267f, -0.028239f, -0.005245f, -0.002652f, 0.016868f, 0.076877f, -0.006487f, 0.011258f, 0.002512f, 0.023039f, 0.016505f, 0.017107f, -0.013656f, -0.004278f, 0.006631f, -0.037472f, 0.007541f, -0.032103f, -0.050939f, 0.017512f, 0.001590f, 0.003804f, -0.037296f, -0.089818f, 0.038718f, 0.040222f, 0.027865f, -0.051050f, 0.048353f, 0.051151f, 0.019001f, 0.014660f, 0.000443f, -0.015063f, -0.033846f, 0.025068f, -0.023850f, 0.001279f, 0.000414f, -0.013699f, 0.010217f, -0.024574f, -0.002542f, -0.005028f, 0.012024f, -0.007019f, -0.011193f, -0.015386f, 0.023146f, -0.012981f, -0.005515f, 0.005742f, - -0.020800f, 0.011269f, 0.009468f, -0.007502f, -0.007279f, 0.001715f, -0.019318f, 0.017563f, -0.006479f, -0.005145f, -0.001611f, 0.001194f, 0.013183f, -0.010708f, -0.024422f, 0.006941f, -0.013610f, -0.004561f, -0.013948f, -0.012719f, 0.001920f, -0.010360f, -0.004574f, -0.009684f, 0.031388f, -0.014281f, -0.025484f, 0.003642f, -0.009139f, -0.001012f, -0.043991f, -0.087954f, 0.073270f, 0.011913f, 0.013131f, -0.029195f, -0.020980f, -0.093581f, 0.026066f, 0.067196f, 0.020707f, -0.059208f, -0.029553f, 0.009805f, -0.022961f, -0.014507f, 0.027624f, -0.030742f, 0.017411f, 0.015567f, 0.012889f, -0.034241f, 0.012440f, 0.010817f, -0.016002f, -0.032034f, -0.018498f, -0.012229f, -0.008192f, -0.030550f, -0.026354f, -0.014405f, -0.031536f, 0.025147f, -0.011689f, -0.040711f, -0.013984f, 0.025247f, -0.005055f, -0.028179f, -0.015475f, -0.014299f, 0.000028f, -0.022302f, -0.013428f, -0.037066f, -0.035255f, 0.015234f, -0.012466f, 0.046621f, 0.030650f, 0.003154f, 0.027839f, -0.040444f, 0.026372f, -0.038383f, 0.032507f, -0.005387f, 0.016679f, -0.017030f, 0.057669f, -0.014192f, 0.032339f, -0.008088f, 0.047448f, 0.019229f, - 0.011616f, -0.048712f, 0.053101f, 0.042591f, 0.018565f, 0.019874f, -0.038037f, -0.007121f, 0.015681f, 0.026202f, -0.006682f, 0.006442f, -0.042037f, 0.027170f, 0.046252f, -0.000865f, -0.033008f, -0.001779f, -0.021812f, -0.018576f, 0.009096f, 0.000039f, -0.009089f, 0.010819f, -0.024096f, -0.005534f, 0.000963f, 0.007012f, -0.016614f, -0.022708f, 0.008813f, -0.010994f, -0.021551f, -0.038557f, -0.002833f, 0.012138f, -0.003220f, -0.019357f, -0.023494f, -0.007091f, 0.014942f, -0.016039f, 0.006188f, 0.008776f, 0.002421f, 0.006479f, -0.002020f, -0.010287f, -0.008808f, -0.002813f, 0.010756f, 0.003723f, -0.004235f, -0.014424f, 0.019841f, -0.012765f, -0.011305f, -0.009298f, 0.003927f, 0.023225f, -0.015731f, 0.022867f, 0.019145f, -0.007595f, 0.006913f, 0.012204f, -0.062660f, 0.050735f, -0.007528f, 0.023600f, -0.035176f, -0.012335f, -0.009781f, -0.009228f, -0.009249f, 0.029075f, -0.000462f, -0.026693f, 0.019050f, 0.002156f, 0.013379f, 0.024445f, 0.024695f, 0.000018f, -0.023812f, 0.090916f, -0.026624f, 0.069611f, -0.000747f, 0.002914f, -0.041456f, -0.018898f, 0.005406f, 0.033034f, 0.015743f, -0.012477f, - 0.026897f, 0.004444f, -0.040046f, 0.005208f, 0.004480f, 0.038684f, -0.002666f, 0.022655f, -0.030639f, -0.001246f, 0.025867f, 0.012203f, 0.021461f, 0.058773f, 0.046923f, -0.008733f, 0.023790f, -0.004981f, 0.046070f, -0.039088f, 0.030418f, 0.011601f, -0.002800f, 0.027112f, -0.016000f, 0.072310f, -0.013755f, 0.034325f, -0.027789f, -0.024962f, 0.000166f, 0.077127f, 0.024459f, -0.073853f, 0.063404f, -0.002451f, 0.021555f, -0.055939f, 0.017598f, 0.005192f, -0.110789f, 0.044959f, 0.082816f, 0.031107f, -0.036091f, -0.023168f, 0.015954f, 0.081698f, 0.046004f, 0.062033f, -0.023969f, -0.031653f, -0.028990f, 0.012273f, 0.016118f, -0.003810f, -0.032601f, -0.014998f, 0.038153f, 0.006089f, 0.007901f, -0.014408f, 0.016981f, -0.005487f, 0.007158f, -0.009282f, -0.011648f, -0.013452f, 0.022628f, 0.038914f, 0.037420f, 0.007900f, 0.019385f, 0.035721f, 0.023119f, 0.024962f, 0.033946f, 0.019108f, 0.032369f, 0.024755f, 0.008140f, -0.051395f, -0.010977f, -0.024374f, 0.013106f, 0.028908f, -0.034921f, -0.012672f, 0.038769f, 0.021264f, 0.003430f, -0.009889f, 0.032640f, -0.027007f, 0.004994f, 0.034372f, - 0.026291f, 0.014775f, 0.017271f, 0.020807f, 0.011209f, 0.003969f, -0.003427f, 0.004921f, 0.001798f, 0.017800f, 0.021088f, 0.013685f, -0.017350f, -0.008767f, -0.030346f, 0.037255f, 0.005210f, 0.024687f, -0.020828f, 0.049936f, -0.018216f, 0.023096f, 0.007205f, 0.010132f, 0.006766f, 0.004100f, -0.053267f, -0.030779f, -0.000312f, 0.004494f, 0.035325f, 0.029459f, -0.043617f, 0.004141f, -0.024350f, -0.021717f, 0.009883f, 0.002430f, -0.015441f, 0.017559f, 0.068745f, -0.046253f, -0.004432f, 0.106257f, -0.065558f, 0.007454f, 0.037208f, -0.019659f, -0.016479f, 0.021909f, 0.034279f, -0.038377f, 0.018011f, -0.069494f, -0.008319f, 0.103389f, 0.003684f, 0.029233f, -0.011808f, 0.056489f, 0.055982f, -0.015760f, -0.001854f, -0.026901f, 0.005676f, -0.019887f, -0.051361f, -0.032470f, -0.061122f, -0.044451f, 0.066092f, 0.026943f, 0.018897f, 0.089143f, -0.064119f, -0.037378f, 0.010426f, 0.033424f, -0.025772f, 0.016281f, -0.027551f, 0.049400f, 0.028659f, 0.017138f, 0.035313f, 0.129355f, -0.031558f, -0.010048f, -0.037046f, -0.041549f, -0.003588f, 0.054456f, -0.043513f, -0.005426f, 0.037817f, 0.041669f, - 0.048307f, 0.028832f, -0.034171f, 0.008692f, -0.019310f, -0.003795f, 0.027774f, 0.009484f, -0.003363f, 0.021697f, -0.040083f, 0.002864f, -0.000207f, 0.010879f, -0.009705f, -0.009787f, 0.022928f, -0.008486f, -0.006822f, 0.026693f, 0.032927f, 0.027413f, 0.010962f, 0.011872f, 0.021384f, 0.007078f, 0.000760f, 0.015934f, 0.000573f, -0.008354f, 0.005794f, 0.000308f, -0.003388f, -0.043521f, 0.009657f, 0.029017f, 0.045379f, -0.010197f, -0.014239f, -0.014668f, 0.022538f, 0.027374f, -0.060953f, 0.007847f, -0.027790f, -0.003098f, 0.002166f, 0.004620f, 0.016310f, 0.012960f, 0.010595f, -0.014834f, -0.031250f, 0.025569f, -0.007537f, 0.058384f, -0.053023f, 0.013405f, -0.003811f, -0.017008f, -0.015413f, -0.007663f, 0.017924f, 0.011021f, 0.012194f, -0.002811f, 0.032698f, 0.005719f, -0.042669f, -0.033647f, -0.004583f, -0.019774f, -0.024508f, 0.005600f, 0.027073f, -0.003800f, -0.006059f, -0.039167f, 0.019370f, -0.006288f, 0.040164f, -0.013640f, -0.076990f, 0.009427f, -0.022756f, -0.011625f, 0.000221f, -0.062532f, -0.032780f, -0.053719f, 0.001081f, -0.003919f, -0.014957f, -0.071120f, -0.028804f, -0.006230f, - 0.037298f, 0.041085f, 0.003425f, 0.003124f, 0.020148f, 0.004533f, -0.048735f, 0.042823f, 0.058463f, -0.025341f, 0.008953f, -0.025395f, 0.010669f, -0.000231f, 0.044580f, -0.049922f, -0.036066f, -0.114150f, -0.040344f, 0.028730f, 0.046129f, 0.032678f, 0.029833f, -0.028159f, -0.009189f, 0.022722f, 0.021993f, 0.049479f, 0.023630f, 0.021107f, 0.038270f, 0.009581f, -0.041854f, -0.045045f, -0.060868f, 0.025416f, -0.038853f, 0.003354f, -0.034051f, -0.052782f, -0.079723f, 0.011250f, -0.022992f, -0.025064f, 0.007261f, 0.007447f, -0.002890f, -0.011607f, 0.001800f, 0.026215f, 0.018409f, 0.006635f, -0.010033f, 0.018917f, 0.043086f, -0.009604f, -0.023334f, -0.019386f, 0.021209f, -0.011338f, -0.009506f, -0.038466f, -0.036928f, -0.028669f, -0.063208f, -0.003664f, 0.000318f, -0.025530f, 0.011373f, 0.016953f, 0.012639f, 0.031391f, 0.008874f, 0.037075f, 0.002588f, 0.010067f, 0.041224f, -0.020217f, -0.000977f, 0.005929f, -0.000191f, -0.028741f, -0.000906f, -0.005735f, 0.049651f, -0.003416f, -0.020399f, 0.015247f, 0.006325f, 0.014219f, 0.031866f, -0.005742f, -0.000346f, 0.017935f, 0.008308f, 0.000773f, - -0.002232f, -0.009970f, 0.010678f, -0.091511f, 0.038234f, -0.027427f, 0.003283f, 0.064828f, 0.054236f, -0.021687f, -0.009253f, 0.033317f, -0.020993f, -0.022095f, -0.018424f, 0.004347f, -0.006440f, -0.002606f, 0.007606f, -0.007314f, 0.031856f, 0.076163f, -0.032399f, -0.059968f, 0.059538f, -0.046501f, -0.012692f, 0.000255f, 0.074335f, 0.005569f, -0.022747f, 0.021735f, 0.020573f, -0.078180f, -0.023132f, 0.012648f, -0.003247f, -0.037252f, -0.003017f, 0.014420f, -0.114763f, -0.053232f, 0.056489f, -0.056744f, -0.063147f, -0.039087f, 0.046077f, -0.060417f, -0.094455f, 0.094590f, -0.028196f, -0.059600f, -0.003738f, 0.036792f, -0.036609f, -0.063956f, -0.001888f, 0.028752f, -0.003602f, -0.082202f, 0.018962f, -0.001445f, -0.037021f, 0.085933f, 0.080847f, -0.006390f, -0.033360f, -0.064181f, 0.098624f, 0.013550f, 0.017167f, 0.033954f, -0.024649f, -0.096198f, 0.042921f, 0.073174f, 0.058409f, -0.036554f, 0.020876f, 0.079857f, 0.046169f, -0.055568f, -0.012545f, -0.043625f, 0.019199f, 0.011838f, 0.050051f, 0.049571f, -0.060137f, -0.002225f, -0.006594f, 0.008824f, -0.023585f, 0.023871f, -0.015569f, 0.013773f, - 0.012231f, 0.010047f, -0.017192f, 0.012977f, -0.025530f, 0.041546f, -0.021455f, -0.010742f, 0.026175f, 0.023020f, -0.024372f, 0.003752f, -0.011541f, -0.028137f, -0.015304f, 0.011211f, 0.021841f, 0.013471f, -0.022986f, 0.012692f, -0.014874f, -0.034960f, 0.001458f, 0.006208f, -0.005854f, -0.002893f, 0.023518f, 0.001482f, 0.002383f, 0.011171f, -0.003459f, 0.006010f, -0.037680f, 0.028112f, 0.010060f, -0.095256f, 0.009690f, 0.088451f, 0.047825f, 0.011779f, -0.001872f, -0.016826f, 0.022434f, -0.032123f, 0.073298f, -0.006338f, 0.018989f, 0.026666f, -0.026236f, 0.000312f, -0.003976f, -0.028893f, -0.000875f, 0.010026f, 0.040772f, -0.000822f, -0.026547f, 0.012142f, 0.032653f, -0.006201f, 0.052203f, -0.041813f, 0.007819f, 0.011277f, 0.013046f, 0.045270f, -0.025942f, 0.003389f, -0.002521f, -0.060591f, 0.007722f, -0.020251f, -0.033544f, 0.013360f, -0.013263f, 0.046454f, 0.033134f, -0.025356f, -0.054559f, 0.024889f, 0.004384f, 0.010122f, 0.029206f, 0.064736f, -0.011975f, 0.012908f, -0.027385f, 0.036884f, 0.026016f, 0.027416f, -0.032006f, 0.042343f, -0.015599f, -0.019393f, -0.038451f, -0.003994f, - -0.015701f, 0.055023f, -0.042317f, 0.002384f, 0.012928f, -0.013302f, -0.026151f, 0.077087f, -0.004221f, 0.017839f, -0.007953f, 0.008768f, -0.007276f, 0.021194f, -0.003523f, -0.010054f, -0.007059f, -0.008916f, 0.025175f, 0.017480f, 0.023656f, 0.013037f, 0.007054f, -0.017313f, 0.017302f, 0.000871f, 0.009292f, 0.008048f, 0.021220f, -0.003637f, 0.000106f, 0.002993f, 0.006349f, 0.006715f, 0.015656f, -0.014031f, 0.009640f, 0.008452f, 0.007384f, 0.006218f, 0.004928f, 0.015448f, 0.005545f, -0.021460f, 0.012088f, 0.014034f, 0.014607f, 0.006126f, 0.015744f, 0.004009f, -0.001613f, 0.008764f, 0.004741f, 0.011284f, -0.001526f, -0.010912f, 0.002022f, 0.015825f, -0.008816f, 0.006309f, 0.000311f, 0.017284f, 0.015432f, 0.005730f, 0.010701f, 0.016057f, 0.007218f, 0.012961f, 0.031087f, -0.082695f, -0.232030f, -0.220640f, 0.095871f, 0.009357f, 0.212097f, 0.449256f, 0.098392f, 0.181029f, 0.096615f, -0.333341f, -0.149148f, -0.224214f, -0.329144f, -0.022140f, 0.038939f, -0.155588f, 0.138249f, 0.235021f, 0.144015f, 0.404792f, 0.248549f, 0.002185f, -0.037401f, -0.143370f, -0.357559f, -0.289815f, - -0.124772f, -0.274540f, -0.080907f, 0.156780f, 0.046708f, 0.039592f, 0.370947f, 0.142954f, 0.090416f, 0.343124f, 0.016334f, -0.017490f, 0.158333f, -0.078955f, -0.282910f, -0.137167f, -0.282695f, -0.413228f, -0.045664f, -0.187813f, -0.153088f, 0.132061f, 0.256530f, 0.118451f, 0.453226f, 0.360823f, 0.209461f, 0.273977f, 0.093034f, -0.134598f, -0.206975f, -0.276303f, -0.442070f, -0.354739f, -0.237738f, -0.202889f, -0.062913f, 0.153777f, 0.234084f, 0.260496f, 0.350639f, 0.294851f, 0.138458f, 0.050062f, 0.076166f, -0.118621f, -0.181250f, -0.129116f, -0.270886f, -0.204272f, -0.034924f, -0.122081f, 0.048535f, 0.198146f, 0.071120f, 0.100940f, 0.144370f, 0.014994f, 0.008854f, -0.035498f, -0.135583f, -0.071504f, 0.001376f, -0.054618f, 0.042169f, 0.057135f, -0.023120f, 0.072545f, 0.062961f, -0.098763f, 0.075457f, 0.087312f, -0.061628f, 0.142572f, 0.022074f, -0.141200f, 0.098737f, -0.077672f, -0.274756f, -0.045941f, -0.166881f, -0.203450f, 0.125576f, 0.015367f, 0.032157f, 0.264148f, 0.168471f, 0.186712f, 0.301159f, 0.220816f, 0.073625f, 0.031118f, -0.209293f, -0.381608f, -0.378839f, -0.380747f, - -0.359242f, -0.219944f, 0.011548f, 0.206084f, 0.303757f, 0.415214f, 0.386475f, 0.364231f, 0.287825f, 0.048169f, -0.131971f, -0.145671f, -0.305095f, -0.378605f, -0.227073f, -0.204458f, -0.113248f, 0.020250f, 0.054952f, 0.065048f, 0.130243f, 0.113237f, 0.107356f, 0.150626f, 0.125301f, 0.078332f, 0.069206f, 0.014352f, -0.043603f, -0.078146f, -0.094470f, -0.128222f, -0.107662f, -0.085684f, -0.066661f, -0.021990f, 0.022493f, 0.038735f, 0.055992f, 0.065360f, 0.063329f, 0.048301f, 0.038980f, 0.016986f, -0.001333f, -0.008517f, -0.008879f, -0.017315f, -0.013423f, -0.008928f, -0.010153f, -0.010016f, -0.002573f, -0.013925f, -0.016034f, -0.015779f, -0.024451f, -0.027399f, -0.016100f, -0.013751f, 0.007691f, 0.033190f, 0.044303f, 0.045071f, 0.042654f, 0.027796f, 0.020283f, 0.007478f, -0.012682f, -0.033416f, -0.039858f, -0.043462f, -0.038998f, -0.029076f, -0.013268f, 0.001813f, 0.018754f, 0.029477f, 0.030982f, 0.025919f, 0.019412f, 0.007199f, -0.002088f, -0.009524f, -0.013893f, -0.015213f, -0.009683f, -0.005101f, 0.001758f, 0.006569f, 0.010371f, 0.009973f, 0.006672f, -0.001165f, -0.006585f, -0.011091f, - -0.012325f, -0.011015f, -0.007172f, -0.003485f, 0.002128f, 0.005744f, 0.008102f, 0.009010f, 0.008620f, 0.006185f, 0.004208f, 0.002009f, 0.000038f, -0.001753f, -0.002551f, -0.003144f, -0.002776f, -0.002032f, -0.001253f, -0.000919f} - }, - { - {-0.009393f, -0.003611f, 0.002191f, -0.001743f, -0.005411f, -0.000392f, 0.012535f, -0.006434f, 0.001463f, -0.002713f, -0.000141f, -0.004793f, 0.009021f, -0.004679f, -0.004987f, -0.005633f, 0.010749f, -0.006390f, -0.001673f, -0.003019f, 0.003023f, 0.004964f, 0.006290f, -0.008873f, -0.000022f, 0.008498f, 0.003758f, 0.001457f, -0.000470f, -0.001059f, 0.003836f, 0.008665f, 0.002089f, -0.011120f, -0.005737f, -0.005981f, 0.009709f, -0.000990f, 0.007407f, -0.004653f, 0.003431f, 0.009722f, -0.004739f, -0.007313f, 0.002597f, -0.002732f, -0.000495f, -0.006542f, -0.002649f, -0.004887f, 0.001856f, -0.008872f, -0.002935f, -0.002264f, -0.000290f, 0.012027f, -0.003928f, -0.001797f, -0.000434f, -0.003139f, -0.001251f, -0.001123f, 0.007269f, 0.003777f, 0.004455f, -0.006237f, 0.004580f, 0.004832f, -0.004265f, 0.002008f, 0.002850f, -0.003202f, -0.004375f, 0.005127f, -0.007667f, 0.005429f, 0.003264f, 0.001451f, -0.007106f, -0.002441f, 0.002641f, -0.000607f, -0.001481f, -0.001894f, -0.000173f, -0.003786f, -0.004430f, -0.000657f, -0.000735f, 0.000556f, -0.001671f, 0.000063f, 0.002614f, -0.000073f, 0.000969f, 0.000402f, - 0.000510f, 0.000057f, -0.000523f, -0.001887f, -0.001165f, 0.001343f, -0.000609f, 0.000107f, -0.000190f, -0.005832f, 0.006313f, 0.000801f, -0.002624f, -0.003958f, -0.001031f, -0.001979f, 0.000076f, -0.004921f, -0.003764f, 0.002892f, -0.000721f, -0.001851f, -0.008648f, -0.001239f, 0.008173f, -0.005402f, -0.001300f, 0.006168f, -0.003456f, -0.006478f, -0.004924f, 0.004226f, 0.000101f, -0.000578f, -0.001193f, -0.006210f, 0.002175f, -0.002733f, -0.001409f, 0.007148f, -0.003837f, -0.009550f, -0.002801f, 0.000590f, 0.002940f, 0.002581f, 0.000886f, -0.007242f, -0.001624f, -0.008835f, -0.008019f, -0.002122f, 0.008524f, -0.001411f, -0.016672f, -0.000699f, 0.005694f, 0.004947f, -0.003396f, 0.003345f, 0.003656f, 0.000389f, 0.005033f, -0.008961f, -0.006324f, -0.000796f, 0.002672f, 0.000464f, 0.001919f, -0.000920f, 0.002412f, 0.002190f, 0.003535f, -0.000475f, 0.002199f, 0.002092f, -0.001631f, 0.003506f, -0.000806f, -0.008741f, -0.007152f, -0.004619f, -0.003666f, -0.003900f, 0.001249f, -0.001955f, 0.006857f, 0.005676f, -0.000996f, -0.002671f, -0.002323f, -0.001215f, 0.002089f, 0.003261f, 0.000447f, -0.001834f, - 0.000385f, 0.000496f, -0.001823f, 0.002465f, 0.000052f, -0.000512f, -0.000895f, -0.000158f, -0.001350f, 0.001015f, -0.000241f, 0.000230f, -0.001571f, 0.001003f, -0.000980f, 0.000057f, 0.000039f, 0.000709f, -0.000241f, -0.000717f, -0.000285f, -0.001461f, -0.000565f, 0.000200f, -0.000722f, 0.000175f, -0.000468f, -0.001327f, 0.007578f, 0.004198f, 0.011392f, 0.000677f, -0.002342f, -0.001504f, 0.008036f, -0.002305f, 0.004273f, -0.007529f, -0.000874f, -0.000294f, 0.004181f, 0.002870f, 0.007202f, 0.005029f, -0.003829f, -0.007438f, -0.006077f, 0.003995f, -0.002639f, 0.005494f, 0.003437f, 0.000642f, -0.000447f, 0.004548f, 0.003194f, -0.003494f, 0.003752f, -0.008008f, -0.001183f, -0.007433f, -0.006354f, -0.008923f, 0.002486f, 0.004910f, -0.001018f, 0.006874f, -0.005518f, 0.006358f, -0.013197f, 0.004925f, 0.002151f, 0.009581f, 0.002760f, 0.003365f, 0.005151f, -0.000355f, -0.003426f, 0.003502f, 0.008385f, 0.002757f, 0.004022f, -0.001491f, -0.000227f, -0.012130f, -0.000875f, 0.001785f, 0.002236f, -0.001888f, 0.006330f, 0.011905f, -0.004098f, -0.008788f, 0.005695f, 0.001147f, -0.006206f, -0.000230f, - -0.002914f, -0.006311f, 0.000691f, 0.008524f, 0.002099f, 0.003015f, 0.001393f, -0.001060f, 0.003226f, 0.001897f, -0.000235f, 0.002711f, 0.000116f, -0.000925f, -0.000702f, -0.001774f, 0.001617f, -0.002542f, -0.000359f, 0.003879f, -0.000932f, -0.000236f, 0.001480f, -0.001092f, 0.002686f, -0.003977f, -0.001779f, -0.000086f, -0.001584f, -0.001819f, 0.000355f, -0.001087f, 0.001266f, 0.002796f, -0.001158f, 0.001513f, 0.000398f, 0.000023f, -0.000005f, 0.000258f, -0.003352f, -0.001007f, -0.000791f, 0.000495f, 0.002684f, 0.001452f, 0.004234f, 0.006219f, 0.005978f, -0.005968f, 0.009171f, -0.003386f, -0.006251f, -0.009188f, 0.002015f, -0.012122f, -0.000850f, 0.001163f, 0.003230f, -0.007762f, 0.004860f, -0.000210f, 0.001004f, 0.003128f, 0.001873f, 0.002635f, -0.010461f, -0.000779f, -0.002448f, -0.006841f, 0.003846f, 0.001907f, 0.001447f, 0.005717f, 0.020300f, -0.001585f, 0.000941f, 0.002829f, 0.004934f, 0.001918f, -0.016860f, 0.003401f, -0.002894f, -0.002001f, 0.009063f, 0.000193f, 0.004453f, 0.006542f, -0.008377f, -0.004688f, -0.002499f, -0.008094f, -0.017308f, 0.000737f, -0.006598f, -0.001111f, - -0.001617f, -0.000428f, -0.004106f, -0.008487f, 0.002268f, -0.008124f, -0.002679f, 0.001742f, -0.009099f, 0.009220f, 0.003082f, 0.002571f, -0.003898f, -0.000759f, -0.001597f, 0.001778f, -0.003023f, 0.004701f, -0.007493f, 0.002377f, 0.011063f, 0.009205f, -0.003375f, 0.004648f, -0.004544f, 0.001932f, -0.008485f, -0.000343f, 0.005057f, 0.005927f, 0.005223f, -0.000991f, 0.009844f, 0.000846f, 0.004848f, 0.004391f, -0.000319f, 0.002011f, 0.000942f, 0.000308f, -0.001835f, 0.000938f, 0.001407f, -0.000667f, 0.000026f, -0.001191f, -0.002896f, -0.000493f, 0.001722f, -0.001533f, 0.003871f, -0.001179f, -0.002249f, -0.001848f, 0.001254f, -0.001071f, 0.001601f, -0.000402f, -0.001857f, 0.000945f, -0.000635f, 0.002015f, 0.001099f, 0.001157f, 0.000666f, -0.003672f, -0.001023f, 0.000426f, 0.001372f, -0.000009f, 0.000124f, -0.001031f, 0.013690f, -0.017265f, 0.000777f, -0.010616f, 0.005497f, 0.007910f, 0.009637f, -0.001448f, -0.009070f, 0.000272f, 0.009495f, 0.002055f, 0.001852f, -0.007068f, -0.000908f, -0.012406f, 0.016585f, -0.000840f, -0.012690f, 0.013827f, 0.003499f, 0.004125f, -0.000853f, -0.004937f, - -0.001580f, -0.006532f, -0.006434f, 0.005133f, 0.007278f, -0.001437f, 0.006870f, -0.005587f, -0.003466f, 0.000037f, 0.009571f, 0.009052f, -0.002481f, -0.005045f, 0.007463f, 0.004768f, 0.000745f, 0.006314f, 0.001545f, -0.007339f, 0.007812f, 0.004880f, -0.000531f, -0.002526f, 0.002195f, -0.007914f, 0.021235f, -0.001060f, -0.000704f, 0.015821f, -0.001381f, -0.009619f, -0.005184f, -0.001103f, 0.003902f, -0.009998f, 0.006924f, 0.002112f, 0.000295f, -0.009074f, -0.007621f, -0.016066f, -0.001364f, 0.007552f, 0.003798f, 0.009150f, -0.004990f, -0.003536f, 0.019140f, -0.005259f, 0.003252f, -0.002610f, -0.007843f, 0.000651f, 0.003555f, -0.008210f, -0.014568f, 0.000653f, -0.008958f, -0.009062f, -0.004384f, 0.004795f, 0.000493f, -0.001332f, -0.005527f, -0.001873f, 0.000712f, -0.002049f, -0.001486f, 0.001542f, 0.005285f, 0.000779f, 0.001386f, -0.003644f, -0.001808f, -0.000338f, 0.000041f, -0.005160f, -0.003737f, -0.003259f, -0.000117f, 0.001305f, 0.000590f, -0.001650f, 0.000209f, -0.000287f, -0.000443f, -0.002685f, -0.000917f, -0.000349f, -0.000957f, -0.001384f, -0.001807f, -0.018305f, -0.000300f, -0.007757f, - -0.008759f, 0.002523f, -0.010501f, 0.000189f, 0.007017f, 0.003771f, 0.014809f, -0.024973f, 0.015868f, -0.002756f, 0.006883f, -0.004874f, -0.003662f, -0.013179f, 0.011539f, 0.010155f, 0.002482f, -0.011729f, -0.000740f, -0.006834f, -0.000902f, 0.011979f, 0.008322f, 0.001737f, 0.011427f, -0.000283f, 0.000494f, 0.001011f, -0.000500f, -0.008187f, 0.017134f, -0.001850f, 0.000064f, 0.019899f, -0.013016f, 0.004665f, -0.006259f, -0.001426f, 0.006232f, -0.002859f, -0.010287f, 0.019148f, 0.014929f, -0.000667f, 0.004784f, 0.007953f, 0.020724f, -0.002822f, -0.003846f, -0.011422f, 0.001887f, 0.003830f, -0.012046f, -0.012874f, -0.011306f, 0.013324f, 0.000219f, -0.005640f, 0.009151f, 0.006450f, 0.000035f, -0.003314f, 0.002924f, -0.007378f, -0.001936f, -0.008018f, -0.001856f, 0.007358f, -0.014680f, 0.003353f, -0.003141f, -0.010218f, 0.006128f, 0.009638f, 0.004092f, 0.010041f, 0.008728f, -0.007537f, -0.011967f, -0.006035f, 0.005192f, -0.004782f, -0.009208f, 0.005860f, 0.009963f, -0.007349f, 0.001204f, 0.002063f, 0.001084f, -0.006869f, 0.003931f, -0.003097f, -0.002428f, -0.004432f, -0.002310f, -0.003485f, - -0.000363f, -0.000448f, 0.001298f, 0.002038f, -0.001742f, -0.001558f, -0.000682f, -0.002781f, -0.001596f, -0.000798f, -0.001093f, 0.002088f, 0.002693f, 0.000629f, 0.003969f, -0.003618f, 0.002743f, -0.003132f, -0.001389f, 0.002809f, 0.013757f, 0.014593f, 0.002474f, -0.012453f, -0.001655f, -0.011824f, 0.005026f, 0.031348f, 0.007789f, 0.021743f, 0.008033f, 0.000344f, -0.020150f, -0.004897f, 0.003400f, 0.019647f, -0.008588f, -0.004240f, -0.007469f, 0.001951f, 0.015808f, -0.011445f, 0.007777f, 0.013693f, 0.003100f, 0.005087f, -0.008838f, 0.016904f, -0.003532f, 0.021994f, -0.000133f, -0.006625f, -0.020493f, 0.002598f, 0.000151f, 0.024610f, -0.007327f, -0.001920f, 0.015634f, 0.000195f, 0.002138f, -0.004976f, -0.016006f, 0.001806f, 0.009342f, -0.011468f, -0.009027f, 0.002489f, -0.019208f, 0.010670f, 0.010790f, -0.003169f, -0.001172f, 0.005527f, 0.011004f, -0.000839f, -0.006636f, -0.000168f, 0.016123f, -0.001960f, -0.002379f, -0.005976f, 0.020851f, 0.021113f, 0.001513f, -0.003723f, 0.003368f, -0.000807f, 0.005574f, 0.009809f, -0.000708f, 0.014128f, -0.005371f, -0.007703f, -0.011263f, 0.003935f, - -0.000833f, -0.017186f, -0.012365f, -0.007079f, 0.013691f, -0.003880f, -0.006259f, -0.001657f, 0.000110f, -0.005764f, -0.008745f, -0.003011f, -0.002486f, -0.005185f, 0.000977f, -0.003214f, -0.002797f, 0.002890f, -0.005509f, -0.005696f, 0.001943f, 0.004755f, -0.002682f, -0.003629f, -0.002703f, -0.004763f, -0.002210f, 0.001626f, -0.001554f, 0.000946f, 0.002700f, -0.000744f, -0.001307f, -0.004181f, 0.002566f, 0.000292f, -0.013875f, 0.013904f, 0.010561f, 0.000743f, -0.009231f, -0.010359f, -0.004552f, -0.020500f, 0.023635f, 0.017755f, -0.003901f, 0.006528f, 0.002063f, -0.003980f, 0.017904f, -0.001526f, -0.008438f, 0.026531f, -0.028916f, 0.007364f, 0.012349f, -0.000185f, -0.011870f, 0.012599f, 0.001885f, 0.018256f, -0.007172f, -0.002059f, 0.004815f, 0.007241f, 0.001164f, -0.002595f, 0.026611f, 0.011424f, -0.012275f, -0.018514f, 0.012743f, -0.018521f, -0.005425f, -0.021311f, -0.002826f, 0.031681f, 0.012923f, 0.015269f, 0.000036f, -0.016947f, -0.002881f, -0.008328f, -0.003737f, 0.023670f, -0.003777f, -0.026279f, -0.002188f, 0.005047f, -0.016734f, -0.002858f, 0.010671f, 0.008361f, -0.011271f, -0.005945f, - 0.011404f, 0.015093f, -0.004485f, 0.015727f, 0.000212f, 0.003883f, 0.005852f, 0.001246f, 0.006147f, 0.009395f, 0.009117f, 0.008842f, -0.004771f, -0.019096f, -0.021056f, 0.005137f, -0.004284f, 0.014911f, -0.002753f, 0.017713f, 0.005962f, 0.008188f, -0.009552f, -0.008565f, 0.006285f, -0.000429f, 0.001237f, 0.001563f, 0.000728f, -0.008617f, -0.003964f, -0.001419f, -0.007136f, -0.000310f, -0.006138f, 0.000993f, -0.003492f, 0.002522f, -0.000915f, 0.004444f, -0.000058f, 0.002386f, 0.000746f, -0.002390f, -0.002047f, -0.002843f, 0.005578f, 0.000543f, -0.001717f, 0.001685f, 0.002862f, 0.002330f, 0.000501f, -0.004271f, -0.011693f, -0.006707f, 0.000002f, -0.005741f, -0.000181f, -0.001040f, -0.001164f, 0.006900f, -0.001183f, 0.011381f, -0.001783f, 0.010597f, -0.022091f, 0.007511f, 0.005891f, 0.002901f, -0.014572f, -0.012237f, -0.015503f, 0.011549f, 0.005861f, -0.011162f, -0.011146f, 0.014597f, 0.004539f, -0.001495f, -0.009431f, -0.015378f, -0.006460f, 0.005826f, -0.009962f, 0.000845f, -0.018411f, -0.005375f, 0.001801f, 0.005890f, 0.011509f, -0.002221f, 0.007227f, 0.009991f, -0.010834f, -0.025471f, - 0.016985f, 0.000477f, -0.004333f, 0.016163f, -0.002890f, 0.000336f, -0.011457f, 0.014165f, -0.009610f, -0.012084f, -0.004953f, 0.011555f, 0.017666f, 0.014820f, 0.004345f, 0.002728f, -0.032183f, 0.014135f, -0.002304f, 0.005757f, -0.011368f, -0.002404f, -0.012680f, -0.004599f, -0.003399f, -0.016672f, -0.008619f, -0.007025f, -0.009337f, 0.016617f, -0.005842f, 0.021710f, -0.003024f, -0.001566f, 0.013433f, 0.015443f, 0.026181f, 0.017898f, -0.000763f, -0.008943f, -0.001407f, -0.000286f, -0.013146f, 0.002894f, -0.008631f, -0.014308f, 0.026762f, -0.017577f, -0.018729f, -0.002981f, 0.009805f, 0.001179f, 0.002870f, 0.001036f, 0.011089f, -0.000470f, 0.002833f, 0.003772f, -0.004723f, 0.000388f, 0.006708f, -0.004181f, 0.002591f, 0.004778f, 0.003822f, 0.008510f, 0.001670f, -0.000113f, 0.004526f, 0.000613f, -0.001923f, 0.003008f, 0.004694f, 0.001735f, -0.000287f, 0.001297f, 0.000524f, 0.009910f, 0.000546f, 0.008024f, 0.005218f, 0.001017f, 0.008389f, 0.009285f, 0.000685f, -0.000487f, 0.001017f, 0.001103f, 0.000892f, -0.001031f, -0.001400f, 0.002193f, 0.000274f, -0.005603f, -0.008175f, -0.033492f, - 0.007835f, -0.022940f, -0.013594f, 0.022377f, 0.017478f, -0.038288f, -0.035081f, 0.001544f, 0.015461f, -0.008639f, 0.009671f, -0.012406f, -0.001093f, -0.022082f, -0.005523f, -0.019901f, -0.001116f, -0.005197f, 0.000982f, 0.008125f, 0.006708f, 0.012951f, -0.001235f, -0.010406f, 0.009671f, -0.012476f, -0.004813f, 0.004460f, 0.001136f, 0.006881f, 0.013701f, -0.001816f, 0.002008f, 0.003424f, -0.005112f, -0.001073f, -0.019283f, -0.022867f, -0.022160f, 0.000370f, -0.022297f, 0.007923f, 0.003282f, -0.008586f, -0.010212f, -0.004176f, -0.003463f, -0.001596f, -0.013162f, -0.020912f, -0.000914f, 0.034096f, 0.018887f, -0.004415f, -0.019881f, -0.020481f, 0.023573f, -0.021528f, -0.006942f, -0.003551f, -0.014329f, -0.010736f, -0.014613f, -0.017075f, -0.023965f, -0.032439f, -0.004453f, -0.004947f, -0.004409f, 0.011318f, 0.010645f, 0.003056f, 0.009356f, -0.007108f, -0.008858f, 0.030638f, 0.013067f, -0.007760f, -0.022112f, 0.007257f, -0.012995f, -0.015366f, 0.000164f, 0.025743f, -0.004839f, 0.000099f, 0.017698f, -0.001662f, -0.011454f, 0.000802f, 0.004367f, -0.000056f, -0.004578f, -0.004302f, 0.000061f, 0.004597f, - 0.002284f, 0.003168f, 0.001947f, 0.008988f, -0.002373f, 0.004968f, -0.012373f, 0.006096f, 0.003214f, -0.001964f, 0.002835f, -0.002348f, 0.004786f, -0.001984f, -0.003489f, -0.001819f, 0.004358f, 0.003913f, 0.000641f, 0.005141f, -0.006963f, 0.007418f, -0.003395f, -0.004020f, 0.000736f, 0.001898f, -0.028107f, 0.002841f, 0.013680f, 0.014871f, 0.013787f, 0.005609f, 0.027509f, -0.011349f, -0.020581f, -0.005668f, 0.003252f, -0.004478f, 0.008541f, 0.018142f, 0.037084f, 0.023134f, 0.013405f, 0.017028f, -0.014741f, -0.028009f, -0.009781f, -0.021088f, 0.023150f, 0.004898f, -0.005262f, -0.017196f, 0.026319f, 0.022443f, -0.008783f, -0.002137f, -0.000423f, -0.014250f, -0.011818f, -0.021216f, 0.005862f, 0.006689f, 0.011517f, -0.020096f, 0.001497f, 0.005118f, -0.009226f, -0.019552f, 0.000273f, 0.010593f, 0.014362f, 0.001978f, -0.037602f, -0.013842f, -0.018694f, 0.007130f, 0.021971f, -0.000535f, -0.021215f, 0.004463f, -0.020484f, 0.010669f, -0.005177f, 0.001254f, -0.014601f, 0.029558f, 0.023511f, -0.008004f, -0.007220f, -0.017931f, -0.001424f, 0.023501f, 0.005289f, 0.029005f, 0.028278f, 0.023192f, - 0.013746f, 0.004295f, -0.019256f, -0.011196f, -0.025543f, 0.028653f, 0.029188f, -0.002940f, -0.022573f, 0.013822f, 0.033954f, -0.001008f, 0.004190f, -0.008830f, -0.000933f, -0.022987f, 0.003444f, -0.018257f, 0.012010f, 0.003669f, 0.016948f, 0.016378f, 0.009127f, 0.000818f, 0.001438f, 0.009896f, 0.003779f, -0.003054f, -0.006959f, -0.002865f, -0.010581f, 0.001234f, 0.008147f, -0.007548f, -0.003935f, -0.008555f, 0.005760f, -0.002408f, 0.012327f, -0.012326f, 0.003160f, -0.001025f, 0.011757f, -0.006312f, 0.003918f, 0.006490f, 0.001338f, -0.001020f, 0.000487f, 0.001442f, -0.005326f, -0.002810f, 0.007103f, 0.008051f, -0.019282f, -0.005472f, 0.012667f, 0.022691f, -0.025521f, -0.030825f, -0.026737f, 0.027631f, -0.012667f, 0.018184f, -0.001142f, -0.000552f, 0.044991f, -0.006393f, 0.002518f, -0.021159f, -0.032490f, 0.007036f, -0.005573f, 0.007672f, 0.004712f, -0.003398f, -0.018949f, 0.004262f, 0.005916f, 0.002313f, -0.017934f, 0.010454f, 0.007393f, 0.032579f, -0.016263f, 0.001423f, 0.017443f, 0.017826f, -0.000107f, 0.018006f, -0.005597f, -0.000123f, 0.016042f, 0.013371f, 0.002996f, -0.008252f, - -0.027738f, -0.021307f, 0.014976f, -0.001342f, -0.006977f, -0.006254f, 0.003194f, 0.035240f, -0.003040f, -0.013549f, 0.017603f, -0.009804f, 0.016597f, 0.003250f, 0.051355f, -0.011187f, -0.002480f, -0.001105f, 0.006955f, 0.016825f, -0.004274f, -0.007071f, 0.010807f, -0.025482f, 0.019173f, 0.035692f, 0.010085f, -0.008722f, 0.019698f, -0.008838f, -0.001870f, 0.040486f, -0.024771f, 0.008148f, 0.015529f, -0.008024f, 0.033805f, 0.007227f, 0.006646f, -0.014351f, -0.020696f, 0.002468f, 0.008272f, -0.022458f, 0.020967f, -0.001117f, 0.004724f, -0.000983f, 0.005567f, 0.018945f, -0.005333f, 0.019116f, 0.008830f, 0.005540f, 0.010511f, 0.008921f, -0.006658f, 0.011612f, 0.011110f, -0.011576f, 0.003164f, 0.007614f, 0.015429f, 0.002653f, 0.003897f, 0.006893f, 0.008714f, 0.013194f, 0.000699f, -0.000732f, -0.001636f, 0.008627f, 0.007589f, -0.010325f, -0.000918f, 0.005260f, 0.008441f, 0.005957f, -0.006186f, 0.012433f, -0.001155f, 0.003451f, 0.000912f, 0.010011f, 0.005005f, 0.003947f, 0.004657f, 0.006487f, 0.004800f, -0.002493f, -0.001567f, 0.001538f, 0.010277f, 0.002009f, 0.001059f, -0.001544f, - 0.001402f, 0.003253f, 0.004098f, 0.000763f, 0.004818f, 0.005633f, 0.009477f, -0.025653f, -0.007013f, 0.018289f, -0.008189f, -0.013194f, -0.011669f, -0.012052f, 0.002739f, 0.018370f, -0.001775f, -0.039461f, 0.000548f, -0.029892f, 0.012317f, 0.013432f, 0.000793f, 0.006557f, -0.012776f, -0.001314f, 0.016668f, -0.037808f, 0.010287f, -0.007952f, 0.021899f, 0.015148f, 0.010177f, 0.002054f, -0.014632f, -0.034108f, -0.001229f, -0.029768f, 0.019252f, 0.000629f, -0.008482f, 0.032122f, 0.017101f, -0.012292f, -0.009407f, -0.006242f, -0.004192f, -0.008505f, -0.016443f, 0.003449f, 0.005574f, 0.046271f, -0.000873f, -0.032475f, 0.000662f, 0.022780f, 0.002344f, -0.016556f, 0.011367f, -0.025159f, 0.017740f, -0.010438f, 0.012001f, -0.014518f, 0.007585f, -0.025758f, 0.069405f, 0.002916f, 0.048185f, -0.004281f, -0.012265f, 0.012625f, -0.014559f, -0.014742f, 0.027200f, 0.026009f, -0.021764f, -0.059472f, 0.057660f, -0.019682f, -0.014816f, -0.007206f, -0.007199f, 0.007791f, -0.004438f, 0.004656f, 0.025316f, 0.006111f, -0.019020f, -0.015806f, -0.011198f, 0.007540f, -0.011731f, -0.001624f, 0.012239f, -0.030827f, - -0.001827f, 0.002131f, -0.004008f, -0.008958f, 0.004344f, -0.006320f, 0.017777f, -0.006589f, 0.008405f, -0.007472f, -0.004612f, 0.000482f, -0.006960f, 0.004616f, 0.004930f, -0.003207f, 0.005179f, -0.007196f, 0.004471f, -0.001893f, 0.000396f, -0.003242f, 0.001056f, -0.012964f, -0.008514f, -0.001860f, -0.004297f, -0.010638f, -0.013056f, -0.007949f, -0.002412f, -0.005675f, -0.000159f, -0.009482f, 0.001043f, -0.008443f, -0.001342f, -0.010988f, 0.006936f, -0.006165f, -0.003613f, -0.003194f, -0.029172f, -0.010259f, -0.008761f, -0.025067f, -0.044249f, -0.010812f, 0.000866f, -0.023442f, 0.011702f, -0.009949f, 0.019912f, -0.016879f, -0.006952f, -0.024113f, 0.057971f, 0.049030f, -0.010804f, 0.011037f, 0.033756f, -0.035187f, 0.035982f, -0.014771f, -0.014752f, 0.013030f, 0.004903f, 0.006240f, -0.005091f, -0.007669f, 0.001188f, 0.011706f, 0.010197f, -0.015592f, 0.018175f, -0.016813f, -0.027965f, 0.020531f, 0.018169f, -0.023346f, -0.028935f, -0.033577f, -0.004739f, -0.005486f, 0.009622f, -0.021901f, -0.027354f, -0.013987f, 0.046319f, 0.016224f, 0.015895f, -0.019674f, 0.017996f, 0.024349f, -0.018735f, 0.045384f, - 0.008621f, -0.016139f, -0.021036f, 0.012198f, -0.017633f, -0.038679f, 0.009649f, -0.000377f, 0.001083f, 0.021242f, 0.019939f, -0.016970f, 0.003452f, -0.049603f, -0.005953f, -0.019533f, 0.041315f, 0.002501f, 0.006015f, -0.023908f, 0.019661f, -0.042145f, -0.004907f, 0.016541f, 0.004981f, -0.004553f, -0.004590f, 0.005143f, -0.001722f, 0.004784f, -0.006082f, 0.001208f, 0.003731f, 0.010055f, 0.002725f, 0.003214f, -0.002058f, 0.005969f, -0.005952f, 0.001923f, 0.018967f, -0.003679f, 0.001086f, -0.005994f, 0.008590f, 0.003880f, -0.000751f, 0.009797f, -0.010068f, -0.009810f, 0.010897f, -0.008955f, -0.003062f, -0.008210f, 0.004768f, -0.012001f, -0.005144f, -0.003931f, 0.009881f, 0.009613f, -0.015136f, 0.002390f, 0.008148f, -0.005336f, -0.017097f, -0.008433f, 0.013141f, -0.003993f, -0.001909f, -0.008369f, -0.021449f, 0.027250f, 0.028721f, 0.025984f, 0.017549f, -0.000198f, 0.023816f, 0.021581f, 0.003650f, -0.004063f, 0.009628f, 0.000081f, -0.024190f, -0.002870f, 0.009256f, -0.018939f, 0.027125f, -0.028213f, 0.022660f, 0.024622f, -0.007020f, -0.005547f, 0.010499f, 0.032848f, 0.024673f, -0.029682f, - -0.006410f, -0.007945f, -0.002295f, 0.007417f, -0.013771f, -0.014504f, 0.032301f, 0.000802f, 0.046355f, -0.030227f, -0.028575f, 0.023286f, -0.015346f, 0.008391f, -0.018069f, 0.015540f, 0.017846f, 0.011702f, -0.007153f, -0.026567f, 0.002731f, 0.008818f, -0.021979f, -0.040583f, -0.001292f, 0.003685f, -0.023834f, 0.043817f, -0.004885f, -0.012438f, 0.058353f, 0.054834f, 0.005602f, -0.007636f, -0.001917f, -0.011719f, 0.013336f, -0.028776f, 0.027095f, 0.003551f, -0.015503f, 0.032555f, 0.005371f, 0.006587f, -0.009143f, -0.017703f, -0.043582f, 0.009583f, -0.014739f, -0.007230f, 0.020336f, 0.008158f, -0.009433f, -0.028606f, -0.007733f, -0.032573f, 0.014085f, 0.029257f, -0.003955f, -0.022142f, -0.015278f, -0.022083f, 0.000440f, 0.011858f, 0.014433f, -0.003041f, -0.015416f, -0.008167f, -0.008313f, 0.002020f, -0.004518f, -0.007531f, 0.006507f, -0.001222f, -0.004387f, 0.007660f, -0.017423f, 0.004997f, 0.004804f, 0.027240f, 0.002722f, -0.006111f, -0.013716f, 0.011976f, -0.014333f, -0.001975f, 0.010484f, -0.019460f, 0.018353f, 0.003794f, -0.000491f, 0.003629f, 0.012518f, -0.006244f, -0.018855f, 0.000373f, - -0.005381f, -0.002505f, 0.018740f, 0.017465f, -0.001915f, 0.005362f, -0.048007f, -0.111261f, 0.037363f, 0.035404f, -0.012394f, 0.007944f, -0.026749f, 0.048084f, 0.030773f, -0.027182f, 0.007814f, 0.006585f, 0.000745f, -0.012205f, -0.008779f, -0.057358f, 0.024338f, 0.028393f, -0.006494f, 0.000033f, -0.003163f, 0.019124f, -0.014339f, 0.036450f, 0.010844f, -0.043216f, -0.024463f, 0.054995f, 0.036127f, -0.035757f, -0.008368f, -0.012678f, -0.021872f, 0.003476f, -0.008702f, 0.007888f, 0.071437f, 0.019512f, 0.074846f, 0.042779f, 0.048256f, 0.043983f, 0.086200f, -0.005595f, -0.007939f, 0.020664f, -0.006029f, -0.072201f, 0.058640f, -0.025323f, 0.033653f, -0.047706f, -0.037926f, -0.071282f, 0.014227f, -0.006510f, -0.023893f, 0.017467f, -0.033476f, 0.000188f, -0.047848f, -0.047787f, 0.013482f, 0.028008f, -0.038821f, -0.010252f, -0.026898f, -0.037371f, -0.041974f, -0.030137f, 0.023050f, -0.018179f, -0.052421f, 0.075436f, 0.047294f, 0.076057f, -0.009863f, -0.016303f, -0.015070f, -0.026763f, -0.043048f, -0.002702f, -0.009416f, -0.032564f, -0.010831f, 0.009654f, -0.023050f, -0.020786f, 0.002466f, -0.003363f, - -0.010241f, -0.008401f, 0.018811f, 0.020032f, 0.000688f, 0.005094f, 0.014268f, 0.017859f, 0.003681f, -0.001443f, -0.002685f, 0.008426f, -0.003511f, 0.002145f, -0.003226f, -0.012483f, -0.000284f, 0.011877f, -0.012259f, 0.016206f, 0.020467f, 0.008670f, 0.000716f, 0.003379f, 0.002205f, -0.013572f, 0.001170f, 0.007794f, -0.006958f, 0.000142f, -0.003156f, 0.002267f, -0.004813f, 0.001848f, 0.007637f, -0.010398f, -0.008838f, 0.016459f, 0.006742f, -0.002052f, 0.002544f, -0.009109f, -0.040522f, -0.106264f, 0.046029f, 0.054984f, -0.024880f, -0.010832f, -0.002751f, 0.062264f, 0.002018f, 0.013324f, 0.013147f, -0.014628f, 0.012386f, 0.029013f, -0.005800f, -0.027877f, 0.006966f, 0.052963f, -0.028048f, -0.017542f, 0.011615f, -0.007377f, 0.039651f, -0.009908f, 0.017881f, -0.020412f, -0.024525f, -0.024488f, 0.025994f, -0.007806f, 0.023076f, 0.026911f, -0.006937f, 0.003563f, 0.000174f, -0.021948f, 0.007292f, -0.019906f, 0.023536f, 0.057648f, 0.094656f, -0.001156f, -0.002694f, -0.040057f, 0.021662f, 0.030995f, -0.000927f, 0.034807f, 0.049749f, 0.020941f, 0.028290f, -0.043619f, -0.026200f, 0.036274f, - 0.094574f, -0.017306f, -0.055512f, 0.014165f, -0.018452f, -0.000985f, 0.025642f, 0.000498f, -0.025320f, -0.012094f, -0.013068f, -0.064306f, -0.026884f, 0.000436f, 0.010672f, 0.022448f, -0.003694f, -0.024720f, -0.014247f, 0.006082f, -0.010028f, -0.024826f, 0.025596f, 0.061894f, 0.026772f, 0.033346f, 0.003413f, -0.008436f, -0.050331f, -0.011118f, 0.014294f, 0.011145f, -0.011274f, 0.028563f, -0.008077f, 0.015989f, -0.035232f, 0.002053f, -0.012153f, -0.010130f, 0.000333f, 0.009790f, 0.009580f, -0.009930f, -0.019172f, 0.018558f, -0.007275f, 0.015249f, 0.001362f, -0.003841f, 0.001250f, 0.003278f, 0.014096f, 0.000474f, -0.002246f, -0.007290f, -0.008085f, 0.012147f, 0.004017f, 0.011195f, -0.023980f, 0.016690f, 0.009638f, 0.004543f, -0.008697f, -0.003176f, 0.017403f, -0.002096f, 0.000677f, -0.013419f, 0.001245f, -0.020589f, -0.004362f, 0.005958f, 0.017439f, 0.008659f, 0.015403f, 0.003547f, -0.002628f, -0.015069f, 0.033965f, 0.011424f, 0.017906f, 0.007133f, 0.051094f, -0.015844f, -0.006169f, -0.019802f, 0.012018f, -0.012229f, 0.011405f, 0.057920f, 0.011618f, -0.060987f, -0.014715f, -0.017666f, - -0.052119f, 0.033430f, 0.015914f, -0.005888f, 0.007603f, 0.003430f, -0.023291f, -0.000050f, -0.001464f, -0.023170f, -0.006797f, 0.050549f, 0.074271f, 0.035102f, -0.025631f, -0.040684f, 0.019463f, 0.033997f, 0.003970f, 0.027224f, -0.018667f, -0.012918f, 0.028001f, 0.008929f, 0.000573f, -0.062031f, -0.080874f, -0.002488f, -0.047223f, -0.027391f, 0.017132f, 0.067949f, 0.014879f, 0.003495f, -0.019479f, -0.023339f, -0.033814f, -0.029772f, 0.005742f, 0.020574f, -0.007082f, -0.033572f, -0.054068f, 0.021667f, 0.001597f, -0.030091f, -0.050389f, -0.034133f, -0.055483f, -0.100330f, -0.060442f, -0.008961f, -0.011858f, 0.120838f, -0.014599f, -0.004452f, 0.069731f, 0.008231f, 0.004085f, 0.041915f, -0.024810f, -0.061001f, -0.070820f, -0.010962f, -0.033831f, -0.037583f, -0.039849f, -0.043736f, 0.008732f, 0.039601f, 0.062995f, 0.037379f, 0.007886f, 0.004124f, -0.015975f, 0.032463f, 0.006864f, -0.009805f, -0.040334f, 0.008385f, 0.029668f, -0.001403f, 0.000069f, -0.014520f, 0.008325f, 0.016384f, 0.027153f, 0.007629f, 0.011659f, 0.010364f, 0.013688f, 0.016758f, 0.017660f, -0.004895f, 0.013493f, 0.002731f, - -0.009077f, -0.021188f, -0.025075f, 0.002581f, 0.006306f, -0.025246f, -0.012098f, -0.024284f, 0.008233f, 0.012523f, 0.019606f, 0.028315f, 0.048104f, 0.035563f, 0.036773f, 0.021685f, 0.014571f, -0.008718f, 0.004229f, 0.000190f, -0.021894f, -0.034285f, -0.025374f, -0.033190f, -0.020705f, -0.028843f, 0.038163f, -0.054153f, 0.013678f, 0.008595f, -0.023579f, -0.075945f, 0.051670f, 0.015329f, -0.004878f, -0.076901f, 0.020468f, 0.011921f, -0.040595f, 0.006776f, 0.035625f, 0.021874f, 0.010380f, -0.034825f, -0.007087f, -0.013010f, 0.006144f, -0.013125f, 0.003232f, -0.026984f, -0.038775f, 0.042518f, -0.029370f, 0.064623f, -0.039873f, -0.036149f, -0.024459f, -0.045438f, 0.004006f, -0.000907f, 0.067923f, -0.050356f, -0.053055f, 0.027323f, 0.017499f, -0.043975f, -0.058415f, -0.006526f, -0.032911f, 0.037816f, 0.008075f, -0.048424f, 0.031413f, -0.008316f, -0.074353f, 0.048769f, -0.033159f, 0.031809f, -0.055319f, -0.013607f, -0.001531f, -0.023336f, -0.009530f, 0.006301f, 0.069849f, -0.018928f, -0.006529f, -0.020157f, 0.019954f, -0.033142f, 0.025865f, 0.054492f, -0.003349f, 0.054789f, 0.043106f, -0.006646f, - 0.087968f, -0.005248f, 0.010175f, -0.002683f, 0.024837f, 0.088578f, -0.007286f, -0.024626f, -0.094788f, 0.073329f, 0.026200f, 0.062591f, 0.021345f, -0.049345f, 0.021931f, 0.013982f, 0.009043f, -0.043822f, 0.024997f, 0.005028f, 0.007223f, -0.023601f, -0.006847f, 0.029852f, 0.025654f, 0.001045f, -0.003077f, -0.003147f, -0.003430f, 0.007243f, 0.018806f, -0.038506f, -0.011330f, -0.005409f, 0.006149f, -0.007944f, 0.008550f, 0.008195f, 0.012133f, -0.009059f, -0.020403f, 0.031632f, 0.049670f, 0.017304f, -0.025453f, -0.021955f, -0.009395f, -0.007536f, 0.013464f, 0.006683f, -0.004947f, -0.031432f, -0.022442f, -0.025476f, -0.002466f, 0.024293f, 0.010726f, 0.020478f, 0.007870f, -0.034249f, -0.006110f, 0.014917f, 0.033286f, 0.020784f, -0.013949f, -0.010495f, -0.007996f, 0.004775f, 0.005807f, -0.000725f, -0.001989f, -0.006540f, 0.052331f, -0.100001f, 0.004133f, -0.112581f, -0.037533f, -0.018877f, 0.034646f, 0.104533f, 0.088883f, 0.032931f, 0.052595f, -0.033690f, -0.028351f, 0.005343f, -0.007403f, 0.024428f, 0.007931f, -0.023268f, 0.035251f, 0.051790f, 0.043072f, 0.032285f, 0.027321f, -0.000586f, - 0.005099f, -0.017228f, 0.049006f, 0.023040f, -0.009059f, -0.029761f, 0.010321f, 0.020285f, -0.005050f, 0.064063f, 0.066881f, -0.038247f, -0.028230f, 0.001702f, 0.052014f, 0.032544f, 0.008553f, 0.006621f, -0.012108f, -0.023063f, 0.013147f, 0.079840f, -0.031973f, -0.039120f, -0.042616f, 0.041842f, 0.017234f, -0.023595f, -0.036828f, -0.059163f, -0.070118f, 0.007976f, 0.015666f, 0.012952f, -0.015277f, -0.004955f, -0.019118f, 0.014134f, -0.055884f, -0.091970f, -0.041331f, -0.006186f, -0.015446f, -0.035774f, 0.046379f, 0.077347f, -0.017117f, 0.040015f, 0.085370f, 0.055774f, 0.019955f, -0.058493f, 0.009718f, 0.010790f, -0.051731f, -0.028500f, -0.008082f, -0.041138f, 0.045371f, 0.064564f, -0.003672f, -0.014626f, -0.007765f, -0.018552f, -0.010286f, -0.026065f, -0.025590f, -0.009264f, -0.012625f, 0.009470f, -0.005602f, -0.006921f, 0.012834f, -0.038833f, -0.004578f, 0.003414f, 0.039799f, -0.040378f, -0.006459f, -0.009044f, 0.007667f, -0.025637f, -0.008940f, 0.008094f, -0.014007f, -0.023683f, -0.003795f, -0.001626f, -0.023292f, 0.027776f, -0.037661f, -0.004053f, -0.013823f, 0.008596f, -0.003897f, -0.010915f, - -0.021957f, 0.000930f, 0.011182f, -0.007657f, 0.005267f, -0.063779f, 0.051430f, -0.006535f, 0.044187f, 0.026803f, 0.001018f, 0.029303f, -0.012858f, -0.003294f, 0.025234f, 0.030929f, 0.004765f, 0.000156f, -0.001017f, -0.028163f, -0.018296f, 0.007526f, -0.039256f, 0.001054f, -0.014760f, 0.000950f, -0.033285f, 0.005669f, 0.001853f, -0.030288f, 0.025284f, 0.010748f, 0.017112f, -0.038038f, -0.010270f, 0.007163f, -0.001997f, 0.002745f, 0.021812f, 0.004819f, 0.006106f, -0.004376f, -0.008436f, -0.005966f, -0.003127f, 0.014072f, -0.006378f, -0.024293f, 0.019664f, -0.033402f, -0.010492f, -0.011467f, 0.003999f, -0.016357f, -0.019375f, 0.025414f, -0.003247f, -0.025516f, 0.015583f, -0.035581f, 0.028490f, 0.008852f, 0.001338f, 0.029335f, 0.032659f, 0.004523f, 0.009304f, -0.024539f, 0.031680f, -0.015520f, -0.021680f, -0.001886f, 0.004683f, 0.059881f, -0.026921f, -0.044251f, 0.037895f, -0.014438f, 0.037865f, -0.006430f, 0.002483f, -0.016577f, 0.022933f, -0.038460f, -0.031891f, -0.012645f, 0.015064f, 0.008979f, -0.002330f, 0.018403f, -0.022864f, -0.023156f, -0.015367f, 0.005449f, 0.006691f, 0.001348f, - -0.000994f, -0.007020f, 0.003969f, -0.031943f, 0.006466f, 0.006488f, -0.007697f, -0.002980f, 0.009628f, -0.005146f, -0.013641f, 0.016482f, -0.008240f, 0.002013f, -0.000700f, -0.004212f, 0.011146f, 0.004790f, -0.011573f, -0.001359f, -0.002749f, -0.010388f, -0.002228f, -0.003872f, -0.021254f, 0.006448f, 0.012989f, 0.010337f, -0.009647f, 0.009646f, -0.015506f, -0.004890f, 0.000390f, -0.010093f, 0.031719f, -0.013324f, -0.165749f, -0.316541f, -0.112348f, -0.247743f, -0.282386f, 0.069776f, -0.009076f, 0.095418f, 0.367178f, 0.398052f, 0.281204f, 0.400884f, 0.329564f, 0.109705f, 0.115716f, 0.085733f, -0.220535f, -0.227111f, -0.126154f, -0.220447f, -0.238340f, -0.079546f, -0.069957f, -0.200833f, -0.151217f, -0.024182f, -0.089426f, -0.109461f, -0.026897f, -0.083679f, -0.148353f, -0.084302f, 0.028107f, -0.059274f, -0.073171f, 0.087816f, -0.014479f, -0.082335f, 0.075753f, 0.139987f, -0.031941f, 0.035286f, 0.216692f, 0.030191f, -0.069024f, 0.143946f, 0.125765f, -0.123990f, 0.071567f, 0.158598f, -0.049009f, 0.017661f, 0.274500f, 0.209541f, 0.105717f, 0.385436f, 0.429057f, 0.219574f, 0.395169f, 0.510208f, - 0.320332f, 0.302275f, 0.419512f, 0.269859f, 0.171763f, 0.190193f, 0.099098f, -0.114944f, -0.222735f, -0.302167f, -0.516029f, -0.627920f, -0.711975f, -0.805134f, -0.793935f, -0.860520f, -0.768777f, -0.570581f, -0.570605f, -0.449749f, -0.040175f, -0.023079f, 0.011780f, 0.322858f, 0.255042f, 0.085092f, 0.169290f, 0.251902f, 0.093331f, 0.112500f, 0.255737f, 0.186280f, 0.038064f, 0.153537f, 0.216513f, 0.093181f, 0.116693f, 0.266328f, 0.099806f, -0.042059f, 0.122823f, 0.086002f, -0.058888f, 0.116013f, 0.257226f, 0.121192f, 0.189640f, 0.410488f, 0.341370f, 0.323507f, 0.482073f, 0.445259f, 0.306887f, 0.266898f, 0.239240f, 0.089639f, -0.003540f, 0.012859f, -0.050384f, -0.160259f, -0.159609f, -0.183231f, -0.313753f, -0.350936f, -0.336497f, -0.377425f, -0.452919f, -0.396673f, -0.383529f, -0.409111f, -0.316843f, -0.214172f, -0.167653f, -0.105619f, 0.003808f, 0.042392f, 0.035478f, 0.058890f, 0.064649f, 0.033182f, 0.030276f, 0.059382f, 0.051335f, 0.034940f, 0.042030f, 0.049155f, 0.037211f, 0.048372f, 0.074016f, 0.081475f, 0.078305f, 0.091354f, 0.096935f, 0.080220f, 0.091982f, 0.084629f, - 0.052786f, 0.027218f, 0.011784f, -0.000740f, -0.010546f, -0.007754f, -0.007884f, -0.015521f, -0.016698f, -0.006231f, 0.007547f, 0.026962f, 0.038547f, 0.046521f, 0.048299f, 0.043324f, 0.043302f, 0.053653f, 0.051998f, 0.050318f, 0.058087f, 0.055003f, 0.040897f, 0.042497f, 0.040543f, 0.024668f, 0.020157f, 0.024769f, 0.011501f, -0.001319f, -0.004005f, -0.017909f, -0.037855f, -0.040677f, -0.046097f, -0.064018f, -0.071136f, -0.066714f, -0.076121f, -0.081518f, -0.072414f, -0.071566f, -0.074669f, -0.065624f, -0.052803f, -0.050114f, -0.042927f, -0.030458f, -0.030326f, -0.029478f, -0.022296f, -0.014951f, -0.011272f, -0.001026f, 0.008164f, 0.011320f, 0.015603f, 0.025839f, 0.035257f, 0.040661f, 0.047946f, 0.048425f, 0.043437f, 0.037703f, 0.034087f, 0.030710f, 0.026461f, 0.021767f, 0.017134f, 0.013122f, 0.009867f, 0.009183f, 0.008321f, 0.006305f, 0.005285f, 0.004357f, 0.002371f, 0.001046f, 0.000191f, -0.000671f, -0.001368f, -0.001619f}, - {-0.008214f, 0.006698f, 0.007177f, -0.003505f, 0.007203f, -0.004454f, -0.001025f, 0.009607f, -0.004027f, 0.004534f, 0.002744f, -0.010794f, -0.004901f, 0.007987f, -0.003199f, -0.001604f, 0.005007f, 0.003288f, 0.003551f, 0.000901f, 0.012342f, 0.002051f, -0.003245f, 0.002713f, -0.004343f, 0.007616f, -0.002268f, -0.004293f, -0.001891f, -0.010110f, -0.003455f, -0.007466f, 0.002374f, -0.000196f, 0.002665f, -0.003034f, 0.004160f, 0.001919f, -0.000511f, 0.001218f, 0.000627f, 0.000901f, 0.001310f, -0.005382f, 0.013214f, 0.001885f, -0.004880f, 0.009753f, -0.002410f, -0.008553f, -0.009345f, 0.008997f, -0.001852f, -0.000798f, 0.005955f, 0.000602f, -0.001608f, 0.004620f, -0.000550f, 0.002646f, 0.000738f, 0.003382f, -0.001846f, 0.003689f, -0.001741f, 0.004397f, 0.006449f, 0.003459f, -0.003884f, -0.004017f, -0.001983f, 0.001674f, -0.004146f, 0.002821f, -0.002057f, 0.003520f, 0.004638f, -0.005880f, -0.003319f, 0.004993f, 0.001467f, -0.001674f, 0.007772f, 0.004455f, 0.003690f, -0.000462f, 0.002021f, -0.000230f, 0.001006f, -0.000976f, 0.001153f, 0.000389f, 0.000530f, -0.001848f, 0.002861f, 0.000876f, - 0.000174f, -0.000575f, 0.001144f, 0.001818f, -0.001024f, 0.001963f, -0.000146f, 0.008419f, 0.001589f, 0.001850f, 0.007055f, 0.000002f, 0.005071f, 0.002364f, -0.000661f, 0.000460f, -0.005651f, 0.002518f, 0.000373f, 0.008654f, 0.003022f, 0.002779f, 0.000321f, 0.002496f, 0.009522f, -0.009143f, 0.005056f, 0.001265f, -0.006044f, -0.002766f, -0.003770f, -0.001301f, -0.003501f, 0.002339f, 0.011013f, 0.006881f, 0.008211f, 0.006481f, 0.011231f, 0.008135f, -0.010300f, -0.018672f, -0.002408f, 0.000781f, -0.004585f, 0.009702f, -0.000467f, 0.014576f, -0.006898f, -0.006960f, 0.006274f, 0.000256f, 0.000478f, 0.005716f, -0.010759f, 0.002661f, -0.007716f, 0.010061f, 0.005937f, -0.000127f, 0.015378f, 0.000597f, -0.001516f, -0.002000f, -0.002748f, -0.003915f, 0.007263f, 0.003812f, -0.003793f, -0.001320f, -0.010772f, -0.004810f, -0.001453f, 0.011166f, 0.007651f, 0.001289f, 0.005633f, 0.000124f, 0.006002f, -0.000077f, 0.002466f, -0.006533f, -0.004189f, 0.001483f, 0.000813f, -0.000423f, -0.003292f, 0.002940f, 0.003532f, -0.000989f, -0.003379f, -0.000696f, 0.003563f, -0.000648f, 0.001889f, -0.001799f, - -0.001014f, -0.001436f, 0.001126f, -0.001268f, 0.000190f, -0.000167f, 0.001799f, -0.001587f, 0.001738f, 0.002630f, -0.001294f, 0.000559f, 0.000213f, -0.000141f, 0.003254f, -0.001133f, 0.000822f, -0.001304f, 0.001292f, 0.000871f, 0.000553f, -0.000468f, 0.002863f, -0.000228f, 0.000143f, 0.001131f, 0.003223f, 0.006842f, 0.015447f, 0.004595f, 0.000761f, 0.000568f, 0.004413f, 0.004129f, 0.001001f, 0.002519f, 0.003562f, -0.000143f, -0.000242f, 0.004488f, 0.017464f, 0.005911f, 0.013643f, -0.007589f, -0.006191f, -0.002447f, -0.008066f, -0.009438f, -0.003729f, 0.007158f, -0.011685f, -0.001543f, -0.001304f, -0.018402f, 0.003803f, -0.018590f, -0.006133f, -0.002383f, 0.004525f, 0.000170f, 0.003983f, -0.003539f, -0.000101f, -0.012505f, 0.004724f, -0.004069f, -0.006964f, 0.001448f, 0.003634f, -0.000469f, 0.001012f, 0.005520f, 0.009656f, -0.015990f, 0.004494f, 0.001219f, -0.004677f, -0.005006f, -0.000957f, 0.002355f, -0.002073f, -0.009563f, -0.002200f, 0.002772f, 0.005135f, -0.000530f, 0.012109f, 0.001201f, 0.000614f, 0.005059f, -0.007628f, 0.011535f, 0.003708f, 0.006915f, 0.003094f, 0.005812f, - -0.001118f, -0.000933f, 0.003437f, 0.002130f, -0.001523f, -0.003287f, -0.002727f, -0.005531f, -0.000097f, -0.007474f, 0.000570f, 0.004606f, -0.000339f, -0.003089f, -0.005925f, 0.005476f, -0.003130f, 0.002320f, 0.000862f, -0.000776f, -0.005639f, 0.000644f, -0.000492f, 0.001569f, -0.001699f, -0.001477f, 0.000524f, -0.001660f, -0.003088f, -0.001504f, -0.001272f, -0.000129f, -0.002025f, -0.000171f, -0.001140f, 0.002862f, -0.000470f, -0.001260f, -0.000459f, 0.001617f, -0.000550f, -0.002229f, -0.002568f, 0.002962f, 0.000067f, 0.000442f, -0.001619f, 0.009095f, 0.009946f, -0.000390f, 0.010981f, 0.000624f, -0.001505f, 0.001286f, 0.000861f, -0.002117f, -0.000168f, -0.007780f, -0.004459f, 0.006816f, 0.008043f, -0.009551f, -0.002317f, 0.003873f, -0.006375f, -0.018211f, 0.004464f, 0.006642f, 0.007837f, -0.004236f, -0.004858f, -0.006537f, 0.009849f, 0.011215f, 0.001889f, 0.004385f, -0.008905f, -0.007242f, 0.008340f, 0.003102f, -0.006684f, 0.011580f, -0.011718f, 0.001873f, 0.001076f, 0.010854f, 0.003976f, -0.002486f, 0.001745f, -0.003855f, 0.005959f, -0.014318f, -0.004257f, -0.020598f, -0.008995f, 0.010324f, - -0.000901f, 0.015869f, -0.002204f, -0.013378f, 0.008396f, 0.001784f, -0.005470f, -0.000702f, 0.000619f, -0.005458f, 0.003509f, 0.009477f, 0.010729f, 0.000226f, 0.005115f, -0.000563f, 0.012213f, -0.006300f, 0.005268f, -0.001219f, -0.000238f, 0.000330f, 0.004213f, -0.001321f, 0.015290f, 0.001471f, 0.001366f, -0.002432f, 0.009001f, 0.003026f, -0.003063f, -0.006505f, 0.000121f, 0.006108f, 0.002115f, 0.001753f, -0.004016f, -0.000263f, 0.001223f, -0.000669f, -0.001078f, -0.001153f, -0.002150f, 0.001617f, 0.000129f, 0.000680f, 0.001293f, 0.003184f, -0.001277f, -0.003392f, 0.003680f, -0.001038f, 0.000361f, 0.000026f, -0.000443f, -0.000479f, 0.001459f, 0.001295f, 0.001783f, -0.000688f, 0.001664f, -0.000086f, 0.000963f, 0.001615f, -0.000383f, 0.000168f, 0.001414f, 0.002104f, 0.001173f, 0.001313f, 0.000432f, 0.000127f, 0.011045f, -0.015381f, -0.002261f, -0.010477f, -0.010870f, 0.003678f, 0.001923f, 0.022002f, 0.001003f, 0.007998f, -0.018649f, -0.004583f, 0.003937f, -0.009769f, 0.006205f, 0.001695f, 0.001422f, 0.005249f, 0.006114f, 0.014382f, 0.006333f, -0.002457f, 0.004461f, -0.007402f, - 0.001975f, 0.005711f, -0.000539f, 0.001062f, 0.006312f, 0.008181f, 0.019979f, 0.003781f, -0.003127f, -0.013917f, -0.000714f, 0.010299f, -0.016424f, 0.001652f, -0.001329f, 0.004972f, -0.008297f, -0.009773f, 0.017291f, -0.011278f, 0.003467f, -0.000846f, -0.011036f, 0.025030f, 0.006376f, 0.013057f, 0.006991f, 0.014292f, -0.002771f, -0.005571f, 0.009085f, -0.008619f, 0.006959f, -0.006896f, 0.003737f, 0.009813f, 0.005386f, -0.004596f, -0.000867f, 0.004949f, -0.008909f, -0.006650f, 0.000409f, -0.001175f, 0.014794f, -0.008320f, -0.014042f, -0.002218f, 0.007636f, 0.012420f, -0.007884f, -0.013315f, -0.003002f, 0.018212f, 0.002320f, -0.000144f, -0.006657f, 0.000768f, -0.000486f, 0.005536f, 0.005720f, -0.000498f, 0.002684f, 0.002992f, -0.009043f, -0.002188f, 0.002982f, -0.000565f, 0.005126f, 0.001956f, 0.000428f, -0.003915f, -0.000494f, -0.000643f, 0.001910f, -0.000733f, 0.005357f, -0.001186f, -0.000659f, -0.002832f, 0.000510f, -0.003547f, 0.000063f, -0.000503f, 0.001269f, 0.003051f, 0.000019f, 0.002534f, -0.000261f, -0.003336f, -0.000730f, 0.000184f, 0.001745f, -0.005772f, 0.006783f, -0.023996f, - 0.013755f, 0.004116f, -0.005294f, 0.007432f, -0.019599f, -0.016331f, 0.002227f, -0.008009f, 0.018735f, 0.016667f, 0.017696f, -0.011642f, 0.006935f, 0.000371f, 0.017638f, 0.001353f, 0.012495f, 0.005082f, -0.005163f, -0.015682f, -0.014234f, 0.004684f, -0.018997f, -0.000171f, -0.004425f, -0.009155f, -0.012664f, -0.007370f, 0.000191f, 0.015470f, 0.000134f, 0.006105f, -0.021753f, -0.012073f, -0.002247f, -0.013565f, 0.001025f, 0.013821f, -0.014749f, 0.006243f, -0.000114f, -0.004943f, -0.001312f, -0.003053f, 0.015148f, 0.008221f, 0.007580f, -0.003495f, -0.004534f, 0.020899f, -0.006225f, -0.005541f, -0.017072f, 0.012633f, -0.024262f, 0.003454f, -0.007945f, 0.003923f, 0.008688f, -0.005732f, -0.012929f, -0.007899f, 0.000931f, 0.017752f, -0.008816f, -0.001825f, -0.011400f, -0.009091f, 0.005742f, 0.006248f, 0.013966f, -0.016150f, -0.000097f, -0.008496f, -0.005651f, 0.003538f, -0.006401f, -0.012660f, -0.007270f, -0.001008f, 0.011734f, 0.012044f, 0.004152f, 0.000759f, 0.001761f, 0.005559f, 0.000484f, 0.000962f, 0.002490f, -0.003258f, 0.000363f, 0.005053f, -0.001461f, 0.000698f, 0.006039f, -0.001368f, - -0.000216f, 0.001081f, 0.004396f, 0.000086f, 0.000691f, 0.001712f, 0.000753f, 0.003799f, -0.004345f, -0.004700f, -0.000321f, -0.001642f, 0.000050f, 0.002799f, -0.001175f, 0.005073f, 0.003303f, -0.022331f, 0.006164f, 0.002211f, 0.003906f, -0.030800f, 0.027795f, 0.000706f, -0.000464f, -0.000409f, -0.009900f, 0.003387f, 0.000502f, 0.010037f, -0.008522f, 0.011237f, 0.003317f, -0.006781f, -0.011764f, -0.014764f, 0.007623f, 0.001457f, -0.001141f, 0.001157f, -0.008446f, 0.009415f, 0.007080f, 0.017260f, 0.010327f, 0.006905f, 0.009597f, -0.002102f, -0.009309f, -0.006952f, 0.000712f, -0.004848f, 0.007551f, -0.008232f, -0.012513f, -0.013747f, 0.000953f, -0.018854f, 0.008805f, 0.010060f, -0.011212f, 0.011704f, -0.013570f, 0.007009f, -0.020085f, 0.002848f, -0.003584f, 0.001602f, -0.005246f, -0.000182f, -0.018677f, -0.003029f, -0.006346f, -0.011813f, -0.003074f, -0.009203f, 0.003091f, -0.008283f, -0.004715f, -0.011943f, 0.005455f, -0.011416f, -0.000723f, 0.018604f, -0.003027f, 0.000666f, 0.006127f, -0.003998f, -0.018654f, -0.021310f, -0.003449f, -0.014867f, 0.000864f, -0.003976f, 0.014093f, 0.001128f, - 0.005380f, -0.014004f, 0.001370f, -0.003077f, -0.002443f, 0.010305f, 0.002651f, -0.001112f, -0.005433f, 0.002875f, 0.004083f, 0.001535f, 0.005502f, -0.000127f, 0.003126f, -0.001515f, -0.000432f, 0.000892f, 0.001064f, 0.002012f, -0.000391f, 0.006018f, -0.001559f, -0.004970f, 0.002204f, 0.000017f, 0.001654f, 0.002042f, 0.001390f, -0.000654f, -0.002473f, 0.001587f, -0.004441f, 0.001846f, 0.009127f, 0.006329f, -0.019005f, -0.000412f, 0.003617f, -0.017678f, -0.020153f, 0.011329f, -0.019781f, 0.004081f, 0.013517f, -0.009481f, -0.022765f, -0.009629f, 0.000743f, 0.015367f, -0.005951f, 0.026947f, -0.001641f, -0.001889f, -0.015230f, -0.010743f, -0.001623f, 0.005621f, 0.001704f, -0.005296f, -0.004441f, -0.001027f, -0.005562f, -0.011232f, 0.009626f, -0.009269f, -0.005627f, 0.010252f, 0.003159f, -0.015944f, -0.017016f, -0.015604f, 0.013867f, -0.014498f, -0.015710f, 0.026151f, -0.016099f, 0.011661f, -0.002094f, 0.007213f, -0.023221f, 0.010915f, 0.001516f, -0.003600f, -0.000980f, -0.004367f, 0.007730f, 0.005740f, 0.022210f, -0.005364f, -0.004024f, 0.010654f, 0.021465f, 0.006049f, 0.004451f, -0.009901f, - -0.006510f, -0.017377f, -0.003582f, -0.000261f, -0.000040f, 0.012913f, -0.003864f, 0.006991f, 0.022451f, -0.003248f, -0.000681f, -0.002419f, -0.000304f, -0.022500f, -0.025792f, 0.001504f, 0.017239f, 0.000396f, -0.034285f, 0.009180f, -0.011922f, 0.005966f, -0.021367f, -0.013193f, -0.003234f, 0.000806f, -0.007760f, 0.003644f, 0.008053f, -0.000788f, -0.000960f, -0.000575f, -0.003580f, 0.003721f, -0.004099f, 0.003704f, 0.000617f, 0.001326f, -0.003571f, -0.002339f, -0.005025f, 0.002558f, 0.000450f, -0.001422f, -0.004824f, -0.000924f, -0.001401f, -0.002984f, -0.003557f, 0.002373f, -0.004056f, -0.001427f, 0.003573f, 0.001210f, -0.001941f, -0.000151f, 0.000153f, -0.005101f, 0.000601f, -0.003180f, -0.004182f, -0.000303f, -0.001074f, 0.009495f, -0.001609f, 0.011248f, -0.001733f, -0.004783f, -0.006905f, 0.009541f, 0.005886f, -0.005338f, 0.004329f, 0.009709f, -0.005112f, -0.033098f, -0.014406f, -0.006509f, -0.003695f, 0.014757f, -0.025949f, -0.019054f, 0.015902f, 0.009857f, 0.040040f, 0.011277f, 0.009220f, 0.010999f, 0.005065f, -0.007193f, 0.000787f, -0.007576f, 0.012746f, 0.000557f, 0.012867f, 0.000375f, - -0.000382f, -0.017598f, 0.009103f, -0.011944f, 0.009245f, -0.001849f, 0.009697f, 0.003831f, 0.013022f, -0.020362f, 0.002364f, -0.014131f, 0.016958f, 0.001020f, -0.017052f, 0.022498f, 0.016634f, 0.010678f, -0.010222f, -0.034306f, 0.009859f, -0.003739f, -0.004268f, 0.016788f, -0.001636f, 0.007763f, 0.016230f, -0.003601f, -0.020609f, -0.000183f, 0.009231f, 0.006000f, -0.005539f, -0.002304f, -0.015106f, 0.005603f, 0.002061f, 0.003185f, -0.002271f, 0.002130f, 0.012992f, -0.008104f, 0.005928f, -0.002147f, -0.000495f, 0.023400f, -0.006291f, 0.010743f, 0.007722f, -0.007393f, -0.008233f, 0.002906f, 0.001766f, -0.003955f, 0.001973f, -0.004118f, 0.003773f, -0.003681f, 0.008914f, 0.000792f, 0.008523f, 0.001617f, -0.000216f, 0.010708f, 0.003809f, -0.003200f, 0.003016f, -0.002538f, -0.003343f, 0.001532f, 0.004274f, -0.004083f, 0.002727f, -0.002121f, -0.004164f, -0.000217f, 0.004265f, -0.001990f, -0.004636f, 0.001399f, -0.002166f, -0.007212f, 0.003112f, -0.000011f, -0.003666f, -0.002199f, -0.001203f, -0.004100f, -0.000335f, 0.005283f, 0.007638f, -0.007252f, 0.000989f, 0.008455f, -0.009527f, -0.037429f, - 0.007543f, 0.009007f, 0.037767f, -0.008016f, -0.006162f, 0.017833f, 0.023438f, -0.038414f, -0.021948f, 0.020876f, -0.010958f, 0.000632f, 0.008517f, -0.024491f, -0.053571f, -0.021071f, 0.030335f, 0.024112f, 0.020387f, -0.006279f, 0.011399f, -0.006307f, 0.010492f, -0.011209f, 0.003649f, -0.027050f, 0.006544f, -0.009583f, 0.013767f, 0.013395f, 0.000402f, -0.012796f, 0.012529f, 0.007890f, 0.021683f, -0.002301f, -0.013571f, -0.006771f, -0.034339f, -0.017568f, 0.008335f, -0.002339f, -0.023025f, 0.015538f, 0.021289f, -0.030313f, 0.029203f, -0.002837f, -0.003292f, 0.018367f, 0.003715f, 0.017365f, -0.002361f, 0.006185f, -0.006698f, -0.003577f, 0.008736f, 0.034936f, -0.012726f, 0.022230f, -0.001950f, 0.002045f, 0.008299f, 0.019354f, -0.018007f, 0.002046f, 0.028334f, 0.008440f, -0.013111f, 0.007536f, 0.011138f, 0.002585f, 0.022246f, 0.016100f, 0.027986f, -0.002578f, 0.007962f, -0.000294f, 0.000886f, -0.015651f, -0.010933f, -0.012451f, -0.006112f, -0.000063f, -0.002707f, -0.005060f, -0.004546f, 0.008350f, 0.012042f, 0.005531f, -0.006358f, 0.009741f, -0.002951f, -0.001596f, -0.005968f, -0.004739f, - 0.006061f, 0.002018f, -0.002345f, 0.000368f, -0.006614f, -0.005542f, -0.006511f, 0.000126f, -0.003688f, 0.005681f, 0.003385f, -0.002428f, 0.002407f, 0.006659f, -0.004195f, 0.003061f, 0.003774f, -0.003563f, -0.003340f, -0.003791f, -0.000744f, -0.001083f, 0.004019f, -0.001401f, 0.000567f, -0.001740f, -0.024348f, -0.006209f, 0.025112f, 0.015955f, 0.018930f, -0.012289f, -0.006207f, -0.001974f, -0.002660f, 0.026909f, 0.003465f, -0.027680f, -0.012354f, -0.008462f, 0.017743f, 0.003470f, 0.003806f, 0.015087f, 0.033003f, -0.048808f, 0.032353f, -0.006426f, -0.005798f, -0.012614f, 0.009609f, 0.009964f, 0.019001f, 0.002964f, 0.018106f, -0.001875f, -0.004870f, 0.005632f, -0.003063f, 0.009270f, 0.016642f, 0.001980f, -0.001289f, 0.021931f, -0.016339f, -0.003026f, 0.005316f, -0.001906f, 0.019291f, -0.022812f, 0.002042f, -0.019520f, 0.003136f, -0.020695f, -0.002964f, 0.000643f, 0.011309f, 0.028039f, -0.016400f, -0.009008f, -0.017002f, -0.000984f, -0.024831f, -0.016101f, -0.016345f, 0.011004f, 0.020196f, 0.000262f, 0.040062f, -0.025431f, 0.035793f, -0.025269f, -0.005969f, 0.011069f, 0.008093f, 0.035543f, - 0.020421f, -0.026607f, 0.013843f, -0.011153f, -0.036859f, -0.000920f, -0.023393f, 0.029403f, 0.044594f, 0.028428f, -0.005621f, -0.015818f, -0.005905f, 0.024994f, -0.003795f, 0.013030f, 0.001434f, 0.005779f, 0.008745f, 0.002801f, 0.003432f, 0.002955f, -0.010986f, 0.007579f, 0.000047f, 0.003202f, -0.004296f, -0.003588f, -0.010437f, -0.005786f, -0.003655f, 0.006365f, -0.003263f, 0.004269f, 0.005285f, -0.002032f, -0.001418f, 0.000149f, 0.006030f, 0.003896f, 0.002174f, 0.011429f, -0.000271f, 0.011941f, -0.010713f, -0.004679f, 0.007579f, 0.007406f, -0.004545f, 0.002538f, -0.003831f, -0.007748f, 0.000812f, -0.002747f, -0.025451f, -0.016354f, -0.000642f, 0.030624f, -0.006098f, 0.013457f, 0.028429f, -0.024351f, 0.010256f, -0.038846f, 0.023179f, -0.023911f, -0.011810f, 0.037261f, 0.012494f, 0.040184f, -0.017483f, 0.000072f, -0.018521f, 0.011475f, 0.051565f, 0.013103f, 0.017320f, -0.026377f, -0.005265f, 0.001086f, 0.019689f, 0.017406f, 0.032906f, -0.027175f, -0.009627f, -0.029555f, -0.025153f, 0.001642f, 0.001776f, 0.017172f, -0.017252f, 0.011961f, -0.040107f, 0.024777f, 0.018706f, 0.008793f, - -0.007022f, -0.004932f, 0.002321f, 0.011639f, 0.003651f, 0.003122f, -0.000476f, 0.026882f, 0.022949f, 0.009817f, 0.001807f, -0.020738f, -0.020480f, 0.055709f, 0.001797f, 0.006760f, 0.030902f, 0.013578f, -0.009102f, -0.006810f, 0.019559f, 0.040050f, -0.029461f, -0.012383f, -0.033165f, -0.030794f, 0.039129f, 0.017403f, 0.000137f, -0.007966f, 0.012795f, 0.029735f, 0.018859f, 0.030687f, 0.008373f, -0.014035f, 0.022142f, -0.016238f, -0.041252f, 0.011895f, 0.001209f, 0.000460f, -0.000159f, 0.016943f, 0.029414f, -0.006281f, 0.015450f, 0.017235f, 0.015634f, 0.001644f, 0.003273f, 0.015074f, -0.000057f, -0.004984f, -0.003603f, -0.006674f, 0.014705f, -0.008943f, -0.002742f, 0.003505f, 0.008191f, 0.000962f, -0.001639f, 0.015709f, 0.003089f, -0.003658f, 0.011779f, 0.015010f, 0.006789f, -0.006652f, -0.000313f, -0.003139f, 0.004454f, -0.000137f, -0.000195f, -0.000708f, -0.003771f, 0.005036f, 0.001806f, 0.001060f, 0.004943f, 0.006519f, -0.001447f, -0.007703f, -0.003111f, -0.001246f, 0.008775f, 0.002877f, -0.006551f, 0.001953f, 0.003395f, 0.009361f, 0.004059f, -0.000814f, 0.008760f, 0.000142f, - 0.004517f, -0.003669f, -0.000121f, -0.000345f, 0.001515f, -0.001276f, 0.012138f, -0.026092f, -0.019467f, -0.007639f, -0.024251f, 0.027332f, -0.003055f, -0.006974f, -0.023084f, -0.003854f, -0.021487f, -0.053304f, 0.009290f, -0.006577f, -0.016779f, 0.012033f, -0.028229f, -0.001734f, -0.015409f, -0.042748f, -0.009748f, -0.018562f, -0.020199f, 0.034116f, -0.009097f, -0.012363f, -0.006167f, -0.000827f, -0.008621f, -0.012107f, -0.001893f, 0.008960f, 0.028942f, 0.021724f, -0.000783f, -0.001740f, -0.048451f, 0.002901f, 0.006666f, 0.019814f, -0.011154f, -0.010149f, 0.073616f, -0.012717f, -0.035927f, -0.035033f, 0.030558f, -0.020525f, 0.008853f, -0.041517f, 0.010355f, -0.011721f, -0.022116f, -0.019270f, -0.047064f, 0.007457f, 0.013584f, 0.033386f, 0.009916f, -0.018270f, 0.026465f, 0.002992f, 0.024901f, 0.027470f, 0.079609f, 0.021190f, 0.005593f, -0.031085f, -0.034591f, -0.009479f, 0.003772f, -0.004590f, -0.031296f, 0.013918f, 0.036471f, 0.008228f, 0.025967f, 0.039914f, 0.036021f, -0.015452f, -0.028681f, -0.019869f, 0.002624f, 0.006162f, -0.003433f, -0.030753f, 0.005983f, -0.025060f, 0.007690f, -0.011261f, - 0.001720f, -0.013959f, 0.009102f, -0.002535f, 0.005827f, 0.000476f, -0.005749f, -0.014286f, -0.003115f, -0.000634f, 0.008308f, 0.011074f, 0.009085f, 0.012800f, 0.000864f, 0.010898f, 0.019705f, 0.000139f, 0.003827f, 0.010684f, 0.003921f, -0.010279f, -0.005557f, -0.017271f, -0.004884f, 0.009781f, 0.005858f, 0.000862f, -0.002120f, 0.006034f, 0.003729f, -0.003992f, -0.007786f, -0.015206f, 0.002055f, 0.001880f, -0.001990f, -0.005301f, -0.001001f, -0.005700f, 0.002973f, -0.010731f, -0.032188f, -0.013961f, -0.005036f, 0.009848f, -0.011805f, 0.019045f, -0.009982f, -0.013212f, 0.037043f, 0.019234f, 0.042134f, 0.000483f, -0.012315f, -0.016707f, 0.044677f, -0.038477f, -0.014393f, 0.052153f, -0.031555f, 0.010385f, 0.010813f, 0.013495f, 0.003015f, 0.029287f, -0.009206f, 0.026353f, -0.010068f, 0.005726f, 0.006257f, -0.013629f, 0.019562f, -0.029770f, -0.020747f, -0.019336f, -0.008921f, -0.026468f, -0.048748f, -0.008916f, -0.014637f, 0.007696f, -0.012605f, -0.064754f, 0.017931f, 0.040595f, -0.002404f, -0.008698f, 0.063557f, -0.078856f, -0.017111f, 0.043908f, -0.010831f, 0.034063f, -0.025115f, -0.015602f, - 0.011784f, -0.075260f, 0.024275f, -0.025661f, 0.037557f, 0.027587f, -0.040042f, 0.078883f, 0.011596f, 0.004139f, -0.004097f, 0.031055f, -0.057160f, 0.023333f, -0.002736f, -0.009114f, 0.015257f, -0.036960f, 0.052203f, 0.047383f, -0.087702f, 0.012549f, -0.017494f, -0.082323f, -0.014212f, -0.036780f, 0.020205f, 0.005144f, 0.014219f, -0.033268f, 0.051593f, -0.005106f, -0.013902f, 0.023803f, -0.001031f, 0.016894f, -0.003649f, 0.026701f, 0.000607f, 0.013285f, 0.004117f, -0.001231f, -0.002882f, 0.014901f, -0.010860f, -0.012212f, 0.000235f, -0.014337f, 0.021351f, -0.004731f, -0.011118f, 0.001088f, 0.009808f, 0.004663f, 0.010117f, 0.003871f, 0.024780f, 0.005810f, -0.013522f, 0.025657f, -0.013985f, 0.014565f, 0.022121f, -0.006255f, 0.004951f, 0.015467f, -0.010731f, 0.000811f, -0.013987f, 0.015121f, 0.002170f, 0.048046f, -0.021901f, -0.062580f, -0.062786f, 0.004691f, 0.007494f, -0.027753f, 0.016062f, -0.035048f, 0.010909f, -0.016032f, 0.031916f, 0.040953f, 0.001091f, 0.039614f, 0.036023f, -0.020425f, -0.000762f, -0.026055f, -0.006726f, -0.006315f, 0.013757f, -0.002790f, -0.004228f, -0.004581f, - -0.042023f, -0.063430f, -0.025646f, 0.032717f, 0.025246f, -0.027360f, -0.031431f, 0.017959f, 0.018207f, -0.041339f, 0.020485f, -0.027587f, -0.005336f, 0.031545f, 0.043904f, 0.000070f, -0.026401f, 0.016659f, 0.003132f, 0.027273f, 0.004537f, 0.022720f, 0.023468f, -0.006926f, -0.090756f, 0.010028f, 0.002149f, 0.036402f, -0.013561f, 0.037130f, 0.036805f, -0.024994f, -0.122894f, -0.016674f, 0.004805f, -0.014959f, 0.073564f, 0.077190f, 0.053784f, 0.076700f, -0.020114f, 0.035952f, -0.030561f, 0.051193f, 0.035820f, -0.060796f, 0.076333f, -0.079356f, -0.067620f, -0.063754f, 0.019991f, 0.047594f, 0.039595f, 0.013143f, -0.049844f, 0.045617f, 0.006179f, -0.016663f, -0.021461f, 0.002498f, 0.043060f, -0.033683f, -0.013600f, 0.065890f, 0.012016f, 0.030018f, 0.005594f, 0.003002f, 0.016081f, -0.025186f, 0.013253f, -0.010422f, 0.000306f, 0.006555f, -0.006581f, -0.013164f, -0.008734f, -0.011554f, -0.025308f, 0.005399f, 0.023078f, -0.004871f, 0.023600f, 0.018202f, -0.015453f, -0.012309f, -0.011514f, 0.014470f, 0.009019f, -0.030876f, -0.017966f, 0.001339f, 0.001280f, -0.004830f, 0.003844f, 0.019813f, - -0.000717f, 0.015691f, 0.001427f, -0.012117f, 0.007610f, 0.026276f, -0.048731f, -0.091932f, 0.019162f, 0.033696f, -0.005080f, 0.046373f, 0.017676f, -0.058049f, -0.014750f, 0.012163f, 0.014107f, 0.015789f, -0.011844f, 0.026687f, 0.002144f, -0.017428f, -0.008066f, 0.009405f, 0.038039f, 0.049668f, 0.037511f, 0.059595f, -0.057600f, -0.016106f, -0.015056f, -0.058930f, -0.014243f, 0.009953f, 0.002843f, 0.006381f, -0.023576f, -0.026664f, 0.029727f, 0.066987f, -0.031942f, 0.034499f, -0.022847f, 0.008850f, -0.021086f, -0.003753f, -0.052514f, -0.019232f, -0.003165f, -0.072686f, -0.042580f, -0.071142f, -0.060101f, 0.039536f, 0.093394f, 0.074496f, 0.001999f, -0.004880f, 0.000055f, -0.017014f, -0.032382f, -0.113664f, -0.038134f, -0.016470f, 0.009054f, 0.004662f, -0.040251f, -0.028182f, 0.014505f, 0.049738f, 0.029574f, 0.015894f, 0.032438f, 0.055803f, 0.021710f, -0.056273f, 0.042671f, -0.033420f, -0.017622f, 0.033008f, 0.074547f, 0.015874f, 0.095644f, -0.023095f, -0.099923f, -0.011768f, -0.032419f, -0.061366f, 0.091939f, 0.025904f, 0.029742f, -0.000445f, -0.008458f, 0.026404f, 0.021759f, 0.001003f, - -0.003996f, -0.016282f, -0.003494f, -0.005040f, 0.024921f, 0.030129f, 0.036072f, -0.004433f, -0.001624f, -0.001774f, -0.001608f, 0.023509f, -0.010520f, -0.008309f, -0.014296f, -0.011309f, 0.013230f, -0.003113f, -0.000748f, 0.003688f, 0.008312f, 0.013656f, 0.016999f, -0.002778f, -0.010633f, -0.018377f, 0.008661f, 0.003005f, 0.008138f, 0.022119f, 0.019362f, -0.010383f, 0.004603f, 0.009744f, -0.017877f, -0.005777f, -0.004418f, -0.017222f, -0.008151f, -0.001155f, 0.014817f, -0.024764f, -0.038813f, -0.063759f, 0.039940f, -0.005925f, -0.038390f, 0.018964f, 0.042336f, 0.036694f, -0.074540f, -0.064361f, 0.016429f, -0.029753f, 0.007944f, 0.036872f, -0.019617f, -0.014399f, 0.060773f, 0.016691f, -0.008151f, -0.018974f, -0.016898f, 0.022973f, -0.013339f, -0.002404f, -0.001514f, -0.024363f, -0.009252f, -0.040719f, -0.054292f, 0.019739f, 0.030044f, -0.034202f, 0.025445f, 0.017479f, -0.011647f, -0.023655f, 0.003936f, 0.043371f, 0.025084f, 0.008013f, -0.042904f, -0.048027f, -0.023271f, 0.013287f, 0.054293f, -0.040261f, -0.021197f, -0.018174f, 0.032521f, 0.087313f, 0.023293f, -0.084917f, -0.018679f, -0.009781f, - 0.043977f, 0.001225f, 0.022895f, -0.010885f, -0.019958f, -0.018630f, -0.047980f, 0.045177f, 0.047855f, 0.019421f, 0.050581f, -0.015531f, 0.032797f, -0.014856f, -0.036098f, -0.039989f, -0.042759f, 0.007828f, -0.080264f, 0.084638f, -0.003736f, -0.031830f, -0.046309f, -0.037863f, -0.002344f, -0.024716f, -0.007306f, -0.044084f, -0.027134f, -0.078506f, -0.021678f, -0.051649f, 0.019352f, -0.018200f, 0.015556f, 0.017872f, 0.019147f, -0.012792f, 0.043736f, -0.009662f, 0.031744f, 0.001386f, 0.007811f, -0.002240f, 0.013935f, -0.006509f, -0.017217f, 0.003795f, 0.005225f, 0.016420f, -0.025818f, -0.008885f, 0.006949f, -0.025468f, 0.000299f, 0.009630f, -0.031871f, -0.013840f, 0.007877f, -0.004248f, -0.024374f, -0.037788f, -0.022624f, 0.014086f, -0.007032f, 0.017649f, 0.004395f, 0.000884f, 0.025965f, 0.001997f, 0.022354f, 0.008794f, 0.013994f, 0.051932f, 0.031162f, -0.014338f, 0.008047f, -0.017872f, 0.000877f, -0.008373f, 0.065366f, 0.049078f, 0.018798f, 0.009746f, 0.030789f, 0.027908f, -0.044279f, -0.063834f, 0.021788f, 0.049968f, 0.071450f, 0.000455f, -0.015945f, -0.044545f, -0.026179f, 0.030055f, - -0.000833f, -0.038019f, -0.076754f, -0.076706f, 0.016197f, -0.023027f, 0.043072f, -0.088382f, -0.029200f, 0.017251f, 0.012742f, 0.016888f, -0.027981f, 0.012900f, -0.002370f, -0.016554f, -0.003292f, -0.041441f, 0.038292f, 0.047299f, 0.035107f, -0.055811f, -0.029871f, -0.001264f, 0.018949f, 0.028182f, 0.030084f, 0.024213f, -0.006324f, -0.003888f, -0.007577f, 0.040079f, 0.110902f, 0.070158f, -0.057761f, -0.056684f, -0.036129f, -0.073049f, 0.086194f, 0.046122f, -0.026733f, -0.075769f, -0.072756f, 0.082876f, 0.050865f, 0.011246f, 0.063628f, -0.065945f, -0.007340f, 0.004283f, -0.017064f, 0.006641f, -0.024670f, -0.066692f, 0.016578f, -0.050921f, 0.068332f, 0.064871f, -0.024731f, -0.011263f, 0.000691f, 0.007654f, 0.072713f, 0.074710f, -0.118127f, -0.065593f, -0.038007f, 0.015159f, 0.033100f, 0.032388f, -0.045819f, -0.048755f, -0.058033f, -0.006858f, 0.060013f, 0.001666f, 0.011876f, -0.013376f, -0.064192f, 0.015121f, -0.026971f, -0.033190f, 0.014555f, 0.112648f, 0.037867f, -0.020643f, -0.028863f, -0.026517f, -0.022308f, 0.029879f, 0.034961f, 0.040950f, -0.007395f, 0.026576f, -0.039832f, 0.010027f, - 0.014383f, 0.018524f, -0.014410f, 0.008169f, 0.033090f, -0.008169f, -0.009519f, -0.005107f, 0.032656f, 0.021752f, 0.050904f, 0.013317f, -0.018271f, -0.013243f, 0.018777f, 0.063554f, 0.051232f, 0.011193f, -0.037959f, -0.046047f, -0.015116f, -0.010694f, 0.010889f, 0.004998f, -0.018827f, -0.023132f, 0.043477f, -0.070976f, 0.061940f, 0.091320f, 0.099098f, -0.111641f, 0.020553f, -0.003468f, -0.009561f, 0.047314f, -0.020141f, -0.033150f, 0.032761f, 0.016699f, 0.067915f, -0.006918f, -0.053742f, 0.001627f, -0.024518f, 0.040118f, -0.061757f, -0.021872f, -0.029020f, -0.041155f, 0.056401f, -0.041246f, -0.005858f, 0.038841f, 0.022551f, -0.013691f, -0.021575f, -0.057803f, 0.007472f, 0.076148f, 0.046375f, -0.003272f, 0.022644f, -0.017175f, 0.062195f, -0.041922f, 0.028727f, -0.023138f, 0.038632f, 0.064211f, -0.014273f, -0.041704f, 0.020583f, -0.056875f, 0.094196f, 0.011051f, -0.050007f, -0.017116f, -0.078016f, 0.009951f, 0.111712f, -0.020343f, -0.065756f, -0.045914f, 0.068479f, 0.020462f, -0.035987f, -0.001823f, 0.017630f, 0.038442f, 0.094115f, -0.076796f, 0.034186f, 0.077181f, -0.011726f, -0.091195f, - -0.088357f, -0.051699f, 0.154651f, -0.113197f, 0.038310f, -0.119219f, -0.057367f, 0.249089f, 0.023892f, -0.108574f, -0.104412f, -0.120256f, 0.151658f, 0.019580f, -0.028765f, -0.120493f, -0.029030f, 0.037710f, 0.122705f, -0.043972f, 0.013275f, -0.053055f, 0.018159f, 0.074628f, 0.045387f, -0.066666f, 0.031392f, 0.012300f, 0.028800f, 0.025732f, -0.067866f, 0.002384f, -0.016198f, -0.025568f, 0.013309f, -0.024788f, -0.050073f, 0.019242f, -0.014863f, 0.065061f, 0.009530f, -0.059687f, -0.068412f, -0.021640f, 0.001744f, 0.052494f, 0.039247f, 0.009328f, -0.032024f, 0.013611f, -0.001489f, -0.025221f, 0.001642f, 0.033492f, 0.029143f, 0.007403f, -0.050508f, 0.012736f, 0.019429f, 0.032087f, 0.028121f, 0.020731f, -0.009996f, -0.032464f, -0.012538f, -0.007551f, -0.010350f, 0.015763f, -0.026718f, -0.007204f, -0.009649f, -0.012479f, 0.040620f, -0.104876f, 0.018449f, -0.094223f, 0.041685f, 0.044637f, 0.088100f, 0.039022f, 0.020245f, 0.023087f, -0.027388f, -0.067259f, -0.046772f, -0.044152f, 0.018928f, 0.011019f, -0.011422f, 0.040302f, 0.062144f, -0.027739f, -0.038961f, 0.043171f, 0.007712f, -0.057401f, - -0.013172f, 0.026061f, -0.047350f, -0.008332f, 0.010510f, 0.024167f, 0.012899f, 0.034162f, 0.058536f, 0.010368f, -0.037266f, -0.004274f, 0.011307f, -0.029596f, -0.013210f, 0.027383f, -0.020742f, -0.037484f, 0.052216f, -0.012559f, -0.012892f, -0.020736f, -0.020476f, 0.033855f, 0.008652f, 0.007760f, 0.045068f, -0.021496f, -0.034758f, -0.001991f, 0.003384f, -0.014728f, 0.011550f, -0.002423f, -0.012358f, -0.002214f, -0.043841f, 0.009812f, 0.008625f, -0.007437f, 0.023674f, 0.015991f, 0.008296f, 0.010598f, -0.045282f, 0.053681f, -0.020062f, -0.019388f, 0.016470f, -0.049047f, 0.016009f, -0.036725f, 0.004310f, -0.029049f, 0.009477f, 0.012846f, 0.019898f, 0.001799f, 0.017653f, 0.026605f, -0.010230f, -0.005975f, 0.014774f, -0.000877f, -0.009319f, 0.008124f, 0.001909f, -0.006102f, -0.009377f, -0.008521f, -0.005619f, 0.019213f, -0.018317f, 0.018637f, 0.001310f, 0.005068f, 0.009343f, 0.005567f, 0.013594f, -0.000734f, -0.000339f, -0.008271f, -0.001800f, -0.011408f, 0.023102f, 0.001713f, -0.010317f, -0.016860f, -0.005488f, 0.008960f, -0.016468f, 0.021892f, -0.010594f, -0.027769f, 0.001610f, 0.011798f, - -0.001581f, -0.000801f, 0.002882f, -0.013127f, -0.007925f, -0.048981f, 0.078628f, -0.004286f, 0.044421f, -0.040706f, 0.004808f, -0.007539f, 0.013888f, 0.012536f, 0.023710f, -0.012421f, 0.017392f, -0.011151f, 0.009487f, -0.001967f, 0.007460f, 0.018807f, -0.002571f, 0.029281f, -0.012067f, 0.022072f, 0.000951f, -0.001154f, -0.008559f, 0.014058f, -0.011584f, 0.012679f, -0.007811f, 0.000692f, -0.006518f, 0.006847f, -0.005363f, 0.016562f, -0.005458f, -0.011962f, 0.026662f, -0.018805f, 0.013834f, 0.011107f, 0.003913f, 0.012822f, -0.016704f, -0.011652f, 0.012117f, 0.011333f, -0.007476f, -0.001755f, 0.012936f, -0.001387f, -0.018565f, 0.007864f, -0.009544f, 0.009229f, 0.012554f, 0.005815f, 0.004152f, 0.003932f, -0.019966f, 0.009443f, 0.005339f, -0.006170f, 0.007001f, -0.009505f, 0.004282f, -0.004836f, -0.001123f, -0.002700f, 0.006667f, 0.013077f, -0.018640f, 0.016224f, -0.003476f, -0.006702f, 0.009225f, -0.013031f, 0.005853f, 0.008819f, -0.002453f, -0.004865f, 0.006084f, -0.002731f, 0.003481f, -0.001944f, -0.006782f, -0.001232f, 0.006822f, -0.002090f, 0.002498f, -0.001673f, -0.005036f, 0.002891f, - 0.002618f, 0.004745f, -0.007201f, 0.005373f, -0.000709f, -0.003110f, 0.006380f, -0.007613f, 0.011313f, 0.005647f, -0.004557f, 0.011547f, -0.001136f, -0.004882f, 0.000236f, -0.004878f, 0.006808f, -0.007939f, 0.007843f, 0.003032f, 0.004114f, 0.001805f, -0.004877f, 0.003670f, 0.001586f, 0.000690f, 0.000504f, 0.000096f, -0.002121f, 0.001892f, -0.005088f, 0.005679f, 0.002135f, -0.005784f, 0.019568f, -0.066506f, -0.207193f, -0.030512f, 0.100569f, 0.051980f, 0.244495f, 0.045411f, 0.052551f, 0.033019f, -0.065897f, -0.092855f, -0.066122f, -0.119017f, -0.102235f, -0.058069f, -0.023797f, 0.067980f, 0.185695f, 0.147200f, 0.126859f, 0.072014f, -0.057159f, -0.093103f, -0.068433f, -0.128275f, -0.121397f, -0.037350f, -0.017040f, -0.028465f, 0.047065f, 0.073461f, 0.048688f, 0.089613f, 0.069372f, 0.021074f, 0.063812f, 0.012846f, -0.009484f, 0.005715f, -0.038463f, -0.101380f, -0.086031f, -0.073290f, -0.102589f, -0.043154f, 0.029977f, 0.020413f, 0.065706f, 0.074189f, 0.065026f, 0.066529f, 0.068158f, 0.042985f, 0.042243f, 0.004416f, -0.037847f, -0.070942f, -0.048271f, -0.066799f, -0.087993f, -0.043569f, - -0.040356f, -0.033104f, 0.012485f, 0.033163f, 0.031980f, 0.061994f, 0.077798f, 0.037394f, 0.054857f, 0.046566f, -0.012953f, 0.005198f, 0.021084f, -0.026065f, -0.023346f, -0.041678f, -0.074449f, -0.075031f, -0.059336f, -0.061743f, -0.012015f, 0.025649f, 0.017341f, 0.048768f, 0.073563f, 0.057713f, 0.053598f, 0.054776f, 0.036794f, 0.011867f, 0.003559f, -0.017261f, -0.031933f, -0.034663f, -0.051187f, -0.065126f, -0.068944f, -0.059687f, -0.053265f, -0.030725f, 0.007004f, 0.033484f, 0.077224f, 0.101741f, 0.089629f, 0.073953f, 0.063093f, 0.036177f, 0.007752f, -0.031686f, -0.064642f, -0.088631f, -0.092447f, -0.102369f, -0.075146f, -0.031669f, -0.007792f, 0.021155f, 0.060964f, 0.078228f, 0.084859f, 0.086950f, 0.073096f, 0.030664f, -0.002060f, -0.022776f, -0.049376f, -0.064751f, -0.060363f, -0.054082f, -0.038583f, -0.016164f, 0.002173f, 0.021164f, 0.028002f, 0.021071f, 0.023656f, 0.018333f, 0.012928f, 0.009613f, 0.010454f, 0.003037f, 0.003591f, -0.001313f, -0.005058f, -0.006736f, -0.005455f, -0.008649f, -0.009603f, -0.010971f, -0.009258f, -0.009177f, -0.007149f, -0.005247f, 0.000776f, 0.003325f, - 0.006263f, 0.008615f, 0.011742f, 0.010932f, 0.010220f, 0.007746f, 0.006361f, 0.003092f, -0.000415f, -0.004211f, -0.005981f, -0.008723f, -0.010005f, -0.010274f, -0.008481f, -0.008491f, -0.005082f, -0.001777f, 0.001992f, 0.004698f, 0.007817f, 0.007767f, 0.008667f, 0.008481f, 0.008822f, 0.007830f, 0.004259f, -0.001577f, -0.004413f, -0.007544f, -0.008861f, -0.008220f, -0.006475f, -0.006436f, -0.004328f, -0.003244f, -0.000860f, 0.001439f, 0.004124f, 0.005925f, 0.007967f, 0.007781f, 0.006881f, 0.004685f, 0.002195f, -0.000391f, -0.001788f, -0.003967f, -0.005449f, -0.006504f, -0.006288f, -0.005392f, -0.002930f, -0.000960f, 0.001419f, 0.003040f, 0.003989f, 0.004085f, 0.003471f, 0.002029f, 0.001687f, 0.000893f, 0.000351f, -0.000496f, -0.000973f, -0.001431f, -0.001460f, -0.001512f, -0.001200f, -0.000940f, -0.000515f, -0.000295f, -0.000029f, 0.000044f, 0.000248f, 0.000258f, 0.000300f, 0.000187f, 0.000174f, 0.000142f, 0.000133f, 0.000138f} - }, - { - {-0.006635f, 0.004994f, 0.003140f, -0.006549f, -0.001159f, 0.008330f, 0.002469f, 0.002044f, 0.004597f, -0.001107f, 0.001255f, -0.002190f, -0.008730f, -0.003452f, -0.000434f, -0.001948f, 0.002509f, -0.002726f, -0.000845f, -0.007419f, -0.000007f, 0.001247f, -0.005216f, -0.001165f, -0.006585f, -0.002375f, -0.002094f, -0.008009f, -0.003657f, 0.002505f, 0.003483f, 0.008904f, 0.005300f, 0.011383f, -0.001233f, -0.001902f, 0.001680f, -0.003982f, 0.009937f, 0.000542f, 0.004699f, 0.007828f, 0.001389f, -0.003236f, 0.003230f, -0.004257f, -0.005586f, -0.001459f, -0.002411f, -0.003153f, -0.010325f, -0.003402f, 0.000057f, 0.001552f, 0.003091f, 0.000799f, 0.005262f, -0.005930f, 0.004644f, -0.000108f, 0.001163f, 0.003207f, -0.004070f, -0.009209f, -0.003927f, 0.003814f, 0.005721f, 0.004253f, 0.000377f, 0.004335f, 0.003361f, 0.005923f, 0.003031f, 0.002509f, -0.003951f, 0.000225f, -0.000627f, -0.000884f, -0.003360f, -0.004263f, -0.001786f, -0.001056f, -0.000361f, -0.003311f, 0.000048f, 0.000367f, 0.001279f, 0.000204f, 0.002337f, -0.001348f, 0.001077f, -0.002114f, -0.003020f, 0.001408f, -0.000419f, -0.000178f, - 0.002142f, 0.001376f, 0.001881f, 0.000026f, 0.000205f, -0.001871f, 0.001076f, 0.000217f, 0.000651f, -0.000373f, 0.002898f, -0.000731f, 0.000185f, -0.001352f, -0.000973f, -0.001508f, 0.001250f, -0.001062f, -0.002589f, -0.001660f, -0.004699f, 0.004645f, -0.007275f, -0.004436f, 0.011954f, -0.001831f, 0.010579f, -0.005274f, 0.001112f, 0.005278f, 0.002401f, 0.000437f, -0.006948f, -0.009896f, -0.010326f, 0.001213f, 0.000361f, -0.002859f, 0.001508f, -0.009132f, 0.018463f, 0.002167f, -0.010123f, 0.002809f, -0.005258f, -0.005739f, 0.005574f, 0.007878f, -0.000021f, 0.001842f, 0.003815f, -0.000475f, 0.000135f, 0.006204f, -0.003258f, -0.001406f, 0.000461f, 0.011224f, -0.000126f, -0.001215f, -0.004113f, -0.006492f, 0.003526f, -0.001536f, -0.006659f, -0.002964f, -0.008036f, 0.001178f, -0.007280f, 0.000253f, -0.005490f, -0.001759f, -0.004817f, -0.010137f, -0.004096f, -0.000557f, 0.009745f, 0.001505f, -0.002698f, 0.005346f, 0.008931f, 0.001418f, -0.011941f, 0.005627f, 0.000062f, 0.002333f, 0.004048f, -0.002716f, 0.007723f, -0.003723f, -0.006718f, -0.007019f, -0.012484f, 0.001258f, -0.004201f, -0.004383f, - -0.005575f, -0.005856f, -0.000252f, -0.006396f, 0.002143f, -0.000933f, -0.003588f, -0.001285f, -0.004065f, 0.000166f, -0.000093f, -0.004685f, -0.001891f, 0.002008f, -0.000605f, 0.000384f, 0.001158f, 0.000522f, 0.000904f, 0.000679f, -0.001207f, -0.004192f, -0.000682f, -0.001528f, 0.001287f, -0.000474f, 0.000589f, -0.000746f, 0.000120f, 0.000004f, -0.000841f, -0.002609f, -0.002117f, -0.000296f, -0.000888f, -0.000966f, -0.000781f, -0.001942f, -0.000661f, -0.009052f, 0.015615f, -0.003697f, -0.013828f, 0.001254f, 0.004979f, 0.000625f, 0.004606f, 0.003782f, -0.010902f, 0.004146f, -0.002384f, -0.000269f, 0.000657f, -0.001849f, 0.008683f, -0.002438f, -0.005294f, -0.000303f, 0.006986f, 0.004442f, 0.002730f, 0.004160f, 0.016637f, 0.004510f, -0.005415f, 0.007591f, -0.006656f, 0.002451f, -0.005326f, 0.015609f, 0.002632f, -0.004856f, -0.002800f, -0.004870f, -0.001519f, 0.010408f, -0.007947f, -0.006729f, -0.001870f, 0.008645f, 0.005095f, -0.007688f, 0.002451f, 0.001926f, -0.004360f, 0.000381f, -0.016579f, 0.005747f, -0.003638f, -0.003062f, -0.010424f, 0.016306f, 0.001140f, -0.008284f, -0.006387f, -0.008129f, - 0.000870f, -0.001648f, 0.001138f, 0.000084f, -0.009460f, 0.012929f, -0.006994f, -0.006501f, 0.005303f, 0.001496f, 0.005271f, -0.003467f, -0.000515f, -0.007753f, 0.000956f, 0.001842f, -0.009763f, -0.007348f, 0.000978f, -0.006853f, 0.002764f, -0.006119f, -0.001516f, -0.001644f, 0.004703f, -0.007940f, -0.008118f, -0.001600f, -0.001076f, -0.001888f, -0.000285f, -0.003500f, -0.000658f, -0.002520f, -0.001907f, -0.001598f, -0.002348f, -0.003053f, -0.000021f, -0.004136f, 0.001392f, -0.002713f, 0.000259f, 0.000368f, -0.000747f, -0.001500f, 0.000056f, -0.001029f, 0.002466f, -0.000240f, -0.001566f, -0.000018f, -0.002981f, -0.000551f, -0.001714f, 0.000249f, 0.000731f, -0.002155f, -0.002518f, -0.000628f, 0.013471f, 0.000487f, 0.002967f, -0.011011f, 0.003476f, 0.006445f, 0.004714f, -0.000388f, -0.005496f, 0.014490f, 0.002567f, -0.002790f, 0.006973f, 0.005730f, -0.006678f, 0.008915f, -0.005880f, 0.014649f, 0.002120f, 0.013085f, -0.001365f, 0.002383f, -0.005045f, -0.014625f, 0.001643f, 0.000395f, 0.000554f, -0.002449f, 0.003076f, 0.007867f, -0.001905f, -0.007460f, -0.004960f, -0.010650f, -0.002931f, -0.005192f, - -0.005645f, 0.001093f, 0.003743f, 0.005944f, -0.006875f, 0.004931f, -0.004591f, -0.005640f, -0.000743f, 0.005046f, 0.000958f, 0.001337f, -0.010718f, -0.010255f, -0.001937f, -0.002959f, -0.007832f, 0.017248f, 0.007976f, -0.000962f, 0.003326f, 0.007007f, -0.017257f, -0.008617f, 0.011611f, -0.006333f, 0.010891f, 0.002597f, -0.002246f, -0.011464f, -0.008542f, 0.013924f, 0.007321f, 0.013175f, -0.013682f, -0.000811f, -0.009487f, -0.000617f, 0.003387f, -0.004920f, 0.001620f, 0.001160f, -0.008520f, 0.007808f, 0.000862f, 0.001310f, -0.001388f, -0.015033f, 0.001650f, -0.003501f, -0.004780f, -0.004596f, -0.000922f, 0.002801f, -0.002451f, 0.001340f, -0.005349f, -0.000966f, -0.002456f, 0.003582f, -0.000668f, -0.000241f, -0.001746f, 0.000296f, -0.001826f, 0.001343f, -0.003032f, -0.001266f, 0.000979f, -0.000677f, -0.000208f, -0.000005f, -0.000045f, 0.001592f, 0.000852f, -0.000060f, -0.002141f, -0.002005f, -0.002322f, 0.002177f, 0.000873f, 0.003087f, 0.001484f, -0.001071f, 0.001255f, -0.022600f, 0.001169f, -0.002931f, 0.006078f, -0.013689f, 0.004334f, -0.004639f, 0.022778f, -0.006085f, -0.011857f, -0.004360f, - -0.009952f, 0.003058f, 0.008432f, -0.002735f, 0.015909f, 0.001600f, -0.004744f, 0.003810f, 0.001906f, 0.004120f, -0.005690f, -0.001029f, 0.005896f, 0.009327f, 0.003666f, -0.001902f, 0.004453f, -0.008393f, -0.002648f, 0.011738f, 0.008376f, 0.013789f, 0.009768f, -0.000266f, -0.007075f, -0.014777f, 0.010134f, -0.001646f, -0.010795f, 0.005548f, -0.002884f, -0.016547f, 0.000388f, -0.013800f, -0.001137f, 0.012414f, -0.002158f, -0.009291f, -0.004309f, 0.011855f, -0.010349f, -0.016893f, 0.017070f, -0.003256f, -0.004207f, 0.003982f, 0.002126f, 0.001999f, 0.004069f, 0.004097f, 0.002230f, -0.012454f, -0.004769f, 0.009575f, -0.001345f, -0.003711f, 0.002856f, 0.016457f, -0.008406f, -0.009172f, -0.004225f, 0.006727f, 0.003381f, -0.014877f, -0.006652f, -0.005130f, -0.006528f, 0.004864f, -0.000929f, -0.001141f, -0.005571f, -0.004393f, -0.011803f, -0.006780f, 0.002787f, 0.000376f, 0.001821f, -0.000486f, 0.006916f, 0.007198f, 0.001213f, 0.002624f, -0.003669f, 0.000822f, 0.000298f, 0.002940f, -0.004508f, -0.002045f, 0.000507f, 0.000103f, 0.002034f, -0.000087f, -0.002582f, 0.002592f, 0.000915f, -0.004944f, - -0.001016f, 0.001437f, 0.000839f, 0.000851f, -0.001290f, 0.000666f, -0.002459f, -0.002366f, -0.002107f, 0.001267f, -0.001109f, -0.001201f, -0.000412f, -0.019921f, -0.000553f, 0.005160f, 0.018921f, 0.019555f, -0.006475f, 0.009670f, -0.012796f, 0.004031f, 0.008243f, 0.012512f, -0.003817f, 0.018833f, -0.003699f, 0.015953f, -0.008925f, 0.013343f, -0.006907f, -0.022562f, -0.005223f, 0.005459f, -0.007870f, 0.008516f, -0.004986f, -0.005529f, 0.002295f, -0.024721f, -0.008078f, -0.000653f, -0.004405f, -0.001625f, -0.012011f, -0.004252f, -0.004371f, 0.003759f, 0.024923f, 0.014291f, -0.014703f, 0.007815f, 0.019905f, 0.004816f, -0.007161f, 0.004840f, -0.005419f, -0.006122f, 0.014294f, 0.009881f, -0.010161f, -0.001506f, 0.010155f, 0.021336f, -0.007045f, 0.011534f, 0.031783f, 0.013572f, -0.014830f, 0.005784f, 0.003586f, -0.017937f, 0.002542f, -0.014851f, 0.006445f, -0.016170f, -0.003891f, 0.000505f, 0.007456f, -0.010609f, -0.003005f, -0.005340f, -0.009611f, 0.012118f, 0.010437f, -0.000737f, -0.007072f, 0.001742f, 0.001768f, 0.001579f, 0.002860f, 0.008961f, 0.001692f, -0.012289f, -0.000307f, 0.014579f, - 0.000378f, 0.003151f, 0.002889f, 0.004309f, -0.004675f, -0.002302f, -0.007463f, -0.003302f, -0.006871f, -0.000724f, 0.003984f, -0.001045f, -0.003914f, 0.002000f, -0.000838f, 0.000690f, -0.002142f, -0.001602f, 0.002694f, -0.000369f, 0.006518f, 0.001443f, -0.001439f, 0.003300f, -0.000116f, -0.001711f, -0.002506f, -0.003512f, 0.001435f, -0.001940f, -0.000921f, 0.001543f, -0.000186f, 0.002899f, 0.000168f, -0.004197f, 0.008671f, -0.004334f, -0.020043f, 0.004601f, -0.016104f, 0.002577f, -0.005347f, 0.020780f, -0.010577f, 0.002913f, 0.005456f, 0.002040f, 0.007535f, -0.003081f, 0.022753f, 0.001761f, -0.014781f, -0.002772f, -0.010903f, -0.001771f, -0.003558f, -0.010220f, -0.012814f, -0.003313f, -0.008258f, -0.003923f, 0.014553f, 0.005388f, -0.012330f, 0.004776f, -0.014723f, -0.002818f, 0.010686f, -0.020106f, -0.017737f, 0.010053f, 0.009458f, 0.004877f, -0.000621f, -0.012227f, 0.004812f, -0.006049f, -0.011536f, -0.005360f, 0.000601f, 0.003606f, 0.019041f, -0.007558f, -0.002182f, 0.000967f, 0.008864f, 0.004639f, -0.006632f, -0.008568f, -0.015315f, -0.004711f, -0.003417f, -0.008456f, -0.009836f, 0.006201f, - 0.012707f, -0.000111f, -0.008174f, 0.014055f, 0.002680f, -0.007013f, 0.001701f, -0.002116f, -0.001865f, -0.004912f, -0.002783f, 0.009103f, -0.007316f, -0.010973f, -0.006329f, 0.005658f, -0.008479f, 0.014851f, 0.006642f, -0.002523f, -0.006156f, -0.006998f, 0.004201f, 0.009201f, 0.018939f, -0.005546f, 0.009674f, 0.000261f, -0.000073f, 0.000976f, 0.003009f, -0.003560f, 0.000049f, 0.002280f, 0.003955f, -0.002571f, 0.002756f, -0.002219f, 0.009158f, 0.003444f, 0.006876f, 0.000014f, 0.004660f, -0.000320f, 0.004131f, -0.000899f, -0.000421f, 0.004792f, 0.001800f, 0.000518f, 0.002536f, 0.000498f, 0.004765f, -0.003641f, 0.001083f, 0.003209f, 0.004375f, 0.003732f, -0.001515f, -0.004967f, -0.000125f, 0.002990f, 0.000620f, 0.000475f, 0.003921f, 0.010331f, 0.019738f, -0.014773f, -0.000546f, 0.013432f, -0.006472f, -0.009692f, 0.012349f, -0.019561f, -0.001224f, 0.003581f, -0.002571f, -0.007316f, -0.008628f, -0.004165f, 0.003351f, -0.001078f, 0.009322f, 0.004681f, -0.003157f, -0.007471f, -0.005462f, 0.015362f, 0.000573f, -0.018845f, 0.008744f, -0.011932f, -0.011696f, 0.007122f, 0.013524f, 0.013788f, - 0.010458f, -0.000362f, 0.007058f, 0.004794f, 0.006662f, -0.006196f, -0.000341f, -0.005589f, -0.013576f, 0.005669f, -0.003526f, -0.000769f, -0.003017f, 0.001292f, -0.002268f, 0.014939f, 0.027813f, 0.004561f, -0.004857f, -0.000107f, -0.019917f, 0.019277f, -0.013590f, -0.008824f, -0.013079f, -0.016012f, 0.027035f, 0.001458f, -0.015072f, -0.005470f, 0.018646f, 0.009609f, -0.014184f, -0.010599f, 0.021377f, 0.001711f, 0.002182f, 0.027660f, -0.013249f, 0.007587f, -0.009958f, -0.027484f, 0.012880f, 0.013211f, 0.002181f, -0.015872f, -0.002254f, -0.003457f, 0.003255f, -0.006895f, 0.010030f, 0.006182f, -0.021748f, 0.009212f, 0.010382f, 0.013257f, 0.002270f, -0.011624f, 0.019400f, 0.003286f, -0.001747f, -0.001501f, -0.006534f, -0.006859f, -0.002481f, 0.001221f, 0.005844f, -0.000022f, 0.000459f, -0.000632f, -0.005241f, 0.002191f, 0.002335f, 0.001031f, -0.002414f, -0.001445f, 0.003907f, 0.001399f, 0.004453f, -0.002923f, 0.001037f, -0.006811f, 0.000756f, 0.006424f, -0.008629f, 0.001193f, -0.006764f, 0.007856f, -0.003288f, -0.000182f, -0.005270f, -0.000032f, 0.004532f, -0.000542f, 0.006186f, 0.000021f, - -0.001775f, 0.004487f, 0.009478f, 0.012081f, 0.022300f, 0.020432f, -0.000699f, 0.017438f, 0.007898f, 0.017780f, 0.017182f, -0.028263f, 0.010392f, -0.009067f, -0.012163f, -0.008840f, -0.002569f, -0.017980f, -0.003680f, 0.004543f, -0.015360f, -0.031643f, 0.007376f, -0.002116f, -0.028500f, -0.020882f, -0.018631f, -0.010352f, 0.001134f, -0.005254f, 0.006910f, -0.003656f, 0.011490f, 0.022311f, -0.012589f, 0.007670f, -0.004879f, -0.010043f, -0.007282f, 0.001477f, -0.002060f, -0.000795f, 0.016649f, -0.000560f, 0.016782f, 0.021717f, 0.006571f, 0.009420f, 0.014415f, -0.001749f, 0.003016f, -0.021198f, 0.020055f, -0.017266f, -0.005996f, -0.005418f, 0.001891f, -0.004685f, -0.016467f, -0.014500f, -0.031931f, 0.029169f, -0.032620f, -0.031622f, 0.005496f, 0.030584f, 0.010938f, -0.003815f, -0.007532f, 0.014132f, -0.015244f, 0.017646f, -0.004986f, 0.002351f, 0.001938f, -0.011509f, 0.012342f, -0.013619f, -0.011093f, -0.001198f, 0.004532f, -0.013005f, -0.001938f, 0.007167f, -0.000925f, -0.003483f, 0.009518f, -0.006100f, -0.011668f, -0.002605f, 0.006067f, -0.007706f, -0.004451f, -0.005243f, -0.001078f, 0.003658f, - -0.002417f, 0.001170f, -0.001844f, -0.004183f, 0.001334f, -0.002655f, 0.002842f, -0.002781f, 0.004065f, -0.001096f, 0.007490f, -0.000965f, 0.002964f, 0.004118f, -0.002451f, -0.004901f, -0.000418f, -0.001135f, -0.000186f, -0.001455f, 0.003537f, 0.000263f, 0.004542f, -0.003889f, 0.001671f, -0.008440f, 0.000484f, 0.000450f, -0.003027f, 0.002428f, 0.013195f, 0.017217f, 0.017215f, 0.018742f, 0.044324f, 0.019852f, 0.025296f, -0.012644f, 0.041025f, -0.023574f, 0.001045f, 0.008965f, -0.000270f, -0.015564f, 0.005053f, -0.004374f, -0.035127f, 0.013181f, -0.008905f, 0.003662f, -0.003359f, -0.011715f, -0.000051f, 0.010320f, -0.014225f, -0.007452f, -0.002276f, 0.008137f, -0.021447f, 0.013440f, 0.005048f, -0.019705f, -0.001595f, 0.007882f, -0.017818f, 0.006543f, -0.021355f, 0.009718f, -0.001884f, -0.007003f, -0.000883f, -0.014027f, 0.017837f, 0.021027f, -0.020209f, -0.011637f, 0.009094f, -0.007299f, 0.005578f, 0.004981f, 0.001309f, 0.000557f, 0.024352f, -0.006277f, -0.016350f, 0.014983f, -0.000663f, -0.012964f, -0.010822f, -0.020399f, 0.003871f, 0.005399f, 0.010099f, 0.009601f, -0.009403f, -0.015883f, - 0.008780f, 0.004270f, 0.030462f, 0.003076f, -0.003811f, 0.000630f, 0.002009f, -0.009142f, -0.004054f, -0.011426f, 0.012465f, 0.007073f, 0.008110f, -0.002541f, -0.019517f, -0.017922f, -0.005847f, -0.001734f, -0.007023f, -0.012472f, 0.003447f, -0.005552f, 0.008029f, 0.001255f, -0.001321f, 0.004841f, 0.005173f, 0.008095f, 0.007727f, 0.006069f, -0.000063f, -0.002032f, 0.002192f, 0.005378f, 0.004280f, -0.002657f, -0.002356f, -0.001745f, 0.001409f, -0.000201f, -0.001541f, -0.000090f, -0.009602f, 0.000989f, 0.006262f, 0.004613f, -0.007480f, -0.005574f, 0.010715f, 0.005541f, 0.010627f, 0.004001f, -0.007770f, 0.007180f, -0.001899f, -0.006080f, 0.001145f, -0.008592f, -0.004606f, -0.002347f, 0.003214f, -0.001896f, -0.023970f, -0.026941f, 0.044997f, 0.031380f, 0.040228f, 0.002582f, -0.025791f, 0.009108f, 0.021003f, 0.014954f, -0.006567f, -0.016316f, -0.004788f, -0.005991f, -0.007906f, -0.014047f, -0.005622f, -0.011797f, 0.030006f, 0.004804f, 0.004971f, 0.000237f, 0.001767f, 0.003194f, -0.011067f, 0.019857f, 0.011227f, -0.001176f, 0.007238f, -0.002820f, 0.020451f, 0.003773f, -0.001788f, -0.033418f, - -0.002452f, 0.002107f, 0.003207f, -0.006254f, 0.004204f, -0.015827f, 0.027156f, 0.021984f, 0.021236f, 0.018520f, -0.014533f, -0.020151f, 0.015493f, 0.004773f, 0.007589f, -0.001320f, -0.023439f, -0.016967f, 0.001384f, -0.013226f, 0.000185f, -0.011107f, -0.004806f, 0.014085f, 0.004511f, -0.010042f, 0.003629f, -0.025935f, 0.000827f, -0.043975f, -0.022318f, -0.041547f, 0.035917f, 0.032350f, 0.034555f, 0.041845f, 0.020296f, -0.006912f, -0.018520f, -0.005619f, -0.000990f, 0.006018f, 0.033181f, -0.010934f, -0.025142f, 0.019222f, -0.015986f, 0.008380f, -0.003629f, -0.003610f, 0.007815f, -0.007451f, -0.013577f, -0.003839f, -0.016726f, -0.003543f, -0.015035f, -0.003451f, 0.002159f, -0.001315f, -0.001772f, -0.004080f, -0.005215f, -0.010397f, -0.000110f, 0.005484f, 0.000902f, -0.005226f, 0.001883f, 0.009119f, -0.001177f, 0.006105f, 0.003386f, 0.003623f, 0.002607f, -0.012016f, 0.010595f, -0.004630f, -0.003770f, 0.007103f, 0.002493f, 0.007851f, 0.000853f, -0.009991f, -0.001808f, 0.000251f, 0.001800f, -0.006099f, 0.000344f, -0.000398f, -0.015954f, -0.021468f, 0.018934f, 0.024567f, -0.012064f, 0.022809f, - 0.003219f, -0.009684f, 0.009174f, -0.033057f, -0.010255f, 0.009326f, -0.010531f, -0.020272f, -0.038208f, 0.018774f, -0.016418f, 0.004421f, 0.024753f, 0.005942f, 0.028863f, 0.022080f, 0.012553f, 0.004740f, -0.017042f, -0.005000f, -0.008921f, 0.001563f, 0.016074f, 0.008380f, 0.003320f, 0.013724f, 0.039240f, -0.002048f, -0.033372f, -0.014653f, 0.005394f, 0.008014f, -0.001910f, 0.000829f, 0.003161f, -0.014235f, 0.000878f, -0.031411f, 0.007066f, -0.032860f, -0.011982f, -0.025446f, 0.012529f, -0.012694f, -0.020879f, 0.031862f, 0.008936f, 0.002598f, -0.014340f, -0.019114f, 0.004773f, 0.007576f, 0.002807f, 0.010382f, -0.016292f, 0.035820f, -0.043494f, 0.011314f, -0.018130f, -0.026400f, -0.014793f, 0.022797f, 0.006868f, -0.024749f, 0.017482f, -0.019709f, 0.048307f, -0.004504f, -0.005306f, -0.023501f, 0.002809f, -0.031351f, -0.016823f, 0.041823f, -0.016842f, -0.018995f, -0.012409f, 0.012505f, 0.001565f, 0.017727f, 0.008830f, 0.009267f, 0.012914f, 0.007022f, -0.001194f, 0.001333f, 0.006155f, 0.002639f, -0.003426f, 0.010382f, -0.003271f, -0.003620f, -0.007837f, -0.007030f, -0.003169f, 0.003831f, - -0.006174f, 0.000453f, 0.003000f, -0.002544f, 0.002614f, 0.000485f, 0.010232f, 0.005369f, -0.000029f, -0.002092f, 0.000001f, -0.000747f, 0.006106f, -0.005446f, 0.005536f, -0.001538f, 0.002439f, 0.008585f, -0.002740f, 0.000450f, -0.001208f, -0.004320f, 0.010491f, -0.001479f, 0.008178f, 0.045589f, 0.046908f, 0.044251f, 0.009560f, -0.011681f, -0.007228f, -0.028269f, 0.023222f, 0.000824f, 0.013688f, -0.008358f, 0.004502f, -0.010246f, -0.007843f, -0.016287f, 0.009028f, -0.016965f, 0.028245f, -0.073182f, -0.021198f, 0.000667f, -0.022034f, 0.015900f, -0.022653f, 0.004831f, -0.008660f, 0.023200f, 0.004257f, 0.022337f, 0.001763f, -0.005103f, -0.000203f, 0.008262f, -0.025535f, -0.018321f, -0.019828f, -0.002695f, 0.025157f, -0.049187f, 0.017267f, 0.043022f, 0.005427f, -0.031426f, -0.001089f, -0.026449f, -0.025325f, 0.017771f, -0.003185f, -0.021587f, 0.012223f, 0.001929f, -0.007943f, -0.012146f, 0.007171f, 0.017952f, 0.010983f, -0.025101f, -0.018263f, 0.014543f, 0.021893f, -0.017640f, -0.023316f, 0.011679f, 0.024509f, -0.029515f, -0.000879f, -0.026340f, -0.036158f, 0.043292f, -0.007045f, 0.006777f, - -0.007960f, 0.026870f, -0.006172f, 0.006655f, -0.014247f, 0.023382f, 0.013054f, 0.021518f, 0.024899f, -0.024582f, -0.027107f, -0.011005f, -0.005087f, -0.016265f, -0.040857f, 0.004608f, 0.002362f, 0.000066f, -0.002890f, -0.006568f, -0.005387f, 0.011860f, -0.000909f, -0.005001f, 0.010999f, -0.011913f, -0.006258f, 0.004530f, 0.021475f, -0.006409f, -0.006476f, 0.001117f, -0.002584f, 0.007447f, -0.002472f, -0.001125f, -0.003651f, -0.005941f, -0.014893f, -0.021467f, 0.003912f, -0.001470f, -0.016299f, -0.008151f, 0.004412f, -0.005669f, -0.018486f, -0.010301f, -0.001160f, -0.003198f, 0.001567f, 0.005312f, 0.002297f, -0.000014f, 0.015305f, 0.005281f, 0.024043f, -0.007683f, 0.000043f, -0.034336f, -0.015586f, -0.007315f, -0.028988f, -0.041992f, -0.007209f, -0.013535f, 0.041050f, 0.012844f, 0.060661f, 0.011561f, -0.016412f, 0.008652f, 0.012154f, -0.048201f, 0.003600f, 0.043705f, 0.028095f, -0.027777f, 0.004718f, 0.022215f, -0.038500f, -0.005567f, -0.018862f, 0.017446f, -0.014579f, 0.011752f, 0.003496f, -0.007022f, 0.002966f, 0.000650f, -0.011806f, 0.014147f, -0.025871f, -0.009683f, -0.010628f, -0.032785f, - -0.006198f, -0.003669f, 0.001380f, 0.003162f, -0.008295f, -0.009814f, 0.062014f, 0.019150f, -0.022904f, -0.042543f, -0.014845f, 0.005141f, 0.045066f, -0.009970f, -0.004899f, -0.023969f, -0.005735f, -0.016647f, 0.037109f, -0.028737f, 0.033200f, 0.041734f, -0.040577f, 0.028095f, 0.011195f, -0.016857f, -0.014801f, 0.010759f, 0.020043f, -0.089693f, -0.011130f, 0.000552f, -0.011574f, 0.024536f, -0.011394f, -0.066869f, -0.025472f, -0.018993f, -0.029723f, -0.029076f, 0.006060f, 0.006520f, -0.016502f, -0.014678f, -0.027358f, 0.003591f, -0.009651f, 0.003091f, -0.011446f, -0.013607f, -0.015411f, 0.004420f, -0.002501f, 0.010524f, -0.013236f, 0.007528f, -0.000953f, -0.013651f, -0.029107f, -0.006807f, -0.000986f, 0.010347f, -0.003441f, -0.039070f, 0.008913f, 0.019946f, 0.008475f, -0.000210f, -0.013168f, 0.014836f, -0.001216f, -0.003892f, -0.023238f, -0.003406f, -0.007512f, 0.020583f, -0.002256f, 0.003901f, 0.000900f, 0.004996f, 0.013411f, -0.008485f, 0.001546f, 0.001386f, -0.003599f, 0.001805f, 0.006240f, -0.027716f, -0.023634f, -0.008590f, -0.018950f, -0.013059f, -0.004663f, -0.011795f, -0.014943f, -0.014455f, - -0.003522f, -0.003502f, -0.005954f, -0.010448f, -0.004007f, -0.007186f, -0.001262f, -0.003467f, -0.012777f, 0.010302f, 0.060142f, -0.001741f, -0.070021f, -0.039139f, -0.043319f, -0.008059f, -0.023944f, -0.000940f, -0.035541f, 0.058431f, 0.034733f, -0.006172f, 0.045940f, 0.001437f, 0.049528f, 0.011955f, -0.028527f, -0.038855f, -0.024513f, -0.031330f, -0.014007f, 0.007773f, 0.021378f, -0.006867f, 0.007018f, -0.025862f, 0.004466f, -0.037351f, -0.003363f, -0.002051f, 0.012883f, -0.013972f, 0.060009f, 0.007839f, -0.001552f, 0.039902f, -0.015453f, -0.028140f, -0.016562f, 0.024495f, -0.001868f, -0.015937f, 0.006679f, -0.000127f, 0.051029f, 0.012694f, 0.000140f, -0.019712f, -0.030828f, -0.077731f, 0.005019f, -0.061733f, 0.031297f, 0.106152f, -0.075823f, -0.016121f, 0.017149f, -0.012968f, -0.013383f, -0.021148f, 0.017705f, -0.021711f, -0.073360f, -0.019397f, -0.073154f, -0.015204f, -0.002191f, -0.045742f, -0.006547f, -0.065867f, 0.028559f, -0.006518f, -0.041894f, 0.102918f, 0.007912f, 0.042035f, 0.035076f, 0.056839f, -0.034920f, -0.002214f, -0.021096f, -0.007471f, -0.014314f, 0.027074f, 0.017007f, 0.024342f, - -0.050086f, -0.009914f, -0.027311f, -0.034991f, -0.029559f, -0.017902f, -0.004084f, 0.019697f, 0.016014f, 0.011360f, 0.014120f, -0.003817f, 0.004441f, 0.028138f, -0.005362f, 0.027850f, 0.007957f, -0.023825f, -0.006793f, 0.008791f, -0.010620f, -0.003875f, 0.032294f, 0.000741f, -0.010131f, 0.036663f, -0.017127f, -0.002311f, -0.030255f, -0.007057f, -0.021206f, 0.016005f, -0.016293f, -0.006869f, -0.006396f, 0.006299f, -0.007429f, 0.014505f, 0.000006f, 0.014997f, 0.003753f, -0.005219f, -0.010522f, -0.013804f, -0.010859f, -0.021091f, -0.122602f, -0.012117f, -0.030775f, -0.033768f, 0.045690f, 0.036386f, -0.042473f, -0.033431f, 0.085483f, -0.008859f, 0.028251f, 0.005110f, -0.003662f, -0.009033f, -0.008444f, -0.026778f, 0.000464f, 0.010518f, 0.015943f, 0.010977f, 0.031059f, -0.023064f, 0.000194f, -0.022460f, -0.013044f, 0.010116f, 0.043747f, 0.028351f, 0.038720f, 0.034765f, -0.006868f, 0.013041f, 0.021194f, 0.000772f, -0.034061f, -0.005622f, 0.049027f, -0.007918f, -0.068159f, -0.029655f, 0.008324f, -0.057699f, -0.024502f, -0.059149f, -0.040378f, -0.036702f, 0.056067f, 0.038538f, -0.011274f, 0.038570f, - 0.015304f, 0.054117f, 0.036625f, 0.017877f, -0.093258f, -0.020290f, 0.004949f, -0.081913f, -0.059707f, -0.022520f, -0.015356f, -0.096065f, 0.021560f, 0.054179f, 0.072433f, 0.086615f, -0.028211f, -0.055348f, 0.000079f, -0.055850f, -0.041342f, -0.077820f, -0.086582f, -0.060990f, -0.051258f, 0.058467f, 0.003199f, 0.012254f, -0.052153f, -0.054750f, -0.048996f, -0.004351f, 0.076460f, 0.096802f, 0.003179f, -0.034725f, -0.026534f, -0.038236f, -0.100432f, -0.044584f, -0.044433f, -0.011903f, -0.003343f, -0.022409f, 0.026943f, 0.000369f, -0.007417f, -0.035541f, -0.046505f, -0.024117f, -0.026057f, -0.041031f, -0.008819f, -0.010169f, -0.003697f, -0.010764f, -0.018639f, 0.025431f, 0.015801f, -0.002287f, -0.022558f, 0.016863f, 0.027665f, 0.002369f, -0.023165f, -0.012029f, 0.019444f, 0.005510f, -0.004941f, -0.022229f, 0.019421f, -0.004283f, -0.007074f, 0.002464f, 0.015137f, 0.004070f, -0.004023f, 0.002564f, 0.011808f, 0.002167f, -0.039126f, -0.093276f, 0.035109f, 0.003584f, -0.063734f, 0.057834f, 0.028258f, 0.017246f, -0.014594f, -0.057005f, -0.014994f, 0.000868f, 0.053878f, 0.071959f, 0.003435f, 0.018899f, - 0.003894f, 0.001517f, -0.004237f, 0.009089f, -0.031247f, 0.101676f, 0.023797f, -0.034172f, -0.034254f, -0.015617f, 0.003720f, 0.049335f, -0.025027f, -0.008317f, -0.000781f, 0.024619f, -0.025113f, 0.012636f, 0.000926f, -0.006362f, -0.085363f, -0.027209f, 0.026353f, 0.043134f, 0.014805f, -0.010137f, -0.025161f, -0.056538f, -0.006856f, 0.008437f, -0.014027f, 0.000285f, -0.015321f, -0.036682f, 0.035516f, -0.009048f, 0.012230f, -0.039168f, -0.008806f, 0.097799f, 0.006670f, -0.011590f, 0.010775f, 0.012190f, 0.008560f, 0.048929f, -0.018902f, -0.023080f, 0.036260f, -0.004835f, 0.021209f, 0.013056f, 0.031508f, -0.013081f, -0.037328f, 0.017903f, -0.017618f, 0.002305f, 0.138446f, 0.133395f, 0.059485f, -0.012524f, -0.007594f, 0.016377f, 0.062351f, 0.028603f, -0.019481f, -0.002639f, -0.009039f, -0.036112f, -0.038526f, 0.020214f, 0.009688f, 0.004866f, 0.030779f, -0.004701f, -0.018318f, 0.018239f, 0.007186f, 0.027164f, -0.040935f, -0.033209f, -0.041584f, 0.005630f, -0.019099f, 0.001859f, -0.008941f, 0.014355f, 0.015735f, 0.033878f, 0.019129f, -0.036790f, -0.027604f, 0.012692f, -0.023162f, -0.013141f, - 0.002019f, 0.011486f, -0.015845f, -0.036173f, -0.004801f, 0.000900f, -0.003899f, 0.015565f, 0.003427f, -0.029241f, 0.008106f, 0.046451f, 0.052942f, 0.039756f, 0.045061f, 0.032537f, 0.040558f, -0.011461f, -0.003373f, 0.015731f, -0.005335f, 0.015495f, 0.013733f, 0.020924f, 0.038530f, 0.068995f, 0.009966f, -0.071298f, -0.018142f, 0.016682f, 0.011561f, -0.016582f, 0.055219f, 0.027705f, 0.022012f, -0.017341f, 0.064499f, -0.003191f, 0.002470f, -0.016493f, 0.034843f, 0.023087f, -0.047786f, -0.070551f, -0.018944f, 0.012508f, 0.005095f, -0.013043f, -0.064375f, -0.005986f, 0.024369f, 0.005830f, -0.020966f, -0.008516f, -0.018605f, -0.024605f, 0.016441f, 0.019146f, -0.040848f, -0.046455f, -0.015236f, -0.057759f, 0.016936f, 0.051646f, -0.043726f, 0.049666f, -0.021988f, -0.026592f, -0.049197f, -0.069557f, -0.077770f, -0.074087f, -0.037301f, 0.000488f, 0.029424f, 0.013590f, 0.029313f, -0.038845f, -0.086823f, -0.034160f, -0.083395f, -0.147701f, -0.055326f, 0.119949f, 0.205716f, 0.120431f, -0.048982f, -0.039770f, -0.180609f, -0.162705f, 0.114742f, 0.020383f, 0.150364f, 0.155067f, 0.161865f, 0.054671f, - -0.062805f, -0.078930f, -0.087477f, -0.100893f, -0.013455f, 0.101793f, 0.172407f, 0.055389f, 0.019134f, -0.007112f, -0.083927f, -0.124343f, -0.082950f, 0.017067f, 0.119533f, 0.055919f, 0.077938f, 0.063054f, 0.024291f, -0.044035f, -0.048320f, 0.002977f, -0.026108f, 0.010463f, 0.059309f, 0.062220f, 0.046695f, 0.009898f, 0.024545f, 0.001876f, -0.037385f, 0.009239f, 0.017504f, -0.005166f, 0.008315f, -0.010130f, 0.085443f, 0.049674f, 0.054802f, 0.033138f, -0.027249f, -0.072693f, -0.102809f, 0.016874f, 0.038178f, 0.071726f, 0.072836f, 0.092588f, 0.046295f, -0.066423f, -0.082568f, -0.101473f, -0.016248f, 0.001148f, 0.057593f, 0.033371f, 0.019485f, 0.031440f, -0.049310f, -0.150294f, -0.099561f, -0.092080f, -0.019321f, 0.013517f, 0.037131f, -0.007841f, -0.018294f, -0.033339f, -0.039362f, -0.006618f, 0.014239f, -0.046543f, 0.065155f, 0.031277f, 0.057868f, -0.127223f, 0.028854f, 0.017144f, -0.039087f, 0.028451f, -0.029225f, -0.014515f, -0.008689f, -0.018268f, 0.054830f, 0.100840f, -0.029263f, 0.020179f, -0.013992f, 0.024065f, 0.051404f, -0.015833f, -0.009283f, -0.028089f, 0.014840f, -0.017886f, - -0.055583f, 0.040487f, 0.068751f, -0.009212f, -0.035842f, -0.033120f, -0.072211f, -0.020099f, 0.054935f, 0.037051f, 0.019215f, -0.079838f, -0.046111f, -0.034928f, 0.070588f, 0.060965f, 0.053753f, -0.155701f, -0.103374f, -0.012797f, 0.077006f, 0.163960f, 0.000789f, -0.197646f, -0.072380f, 0.006376f, 0.066729f, -0.005663f, 0.036702f, 0.027399f, -0.086070f, -0.038002f, -0.023684f, -0.051955f, 0.003759f, -0.097346f, 0.015374f, 0.038208f, -0.117178f, -0.075376f, -0.036415f, -0.015269f, 0.130078f, -0.001019f, -0.199188f, 0.018915f, 0.028288f, 0.030196f, 0.078741f, 0.036388f, -0.084982f, 0.004042f, -0.003074f, 0.170340f, 0.120545f, -0.100270f, 0.091367f, -0.053569f, 0.036478f, 0.093958f, 0.034086f, -0.051943f, 0.047539f, -0.020924f, 0.012371f, 0.032424f, -0.003272f, -0.035249f, 0.064749f, -0.041736f, 0.047521f, -0.022391f, 0.025678f, -0.007995f, 0.052155f, -0.018405f, 0.041039f, -0.071343f, -0.012038f, -0.001056f, -0.009104f, 0.022657f, 0.044465f, -0.045426f, 0.091421f, -0.035905f, -0.031151f, -0.062389f, 0.045767f, 0.095655f, 0.019178f, -0.126501f, 0.010445f, -0.028615f, 0.061636f, 0.029998f, - 0.027923f, -0.050973f, -0.003261f, -0.032528f, 0.030825f, -0.013377f, -0.020033f, -0.007639f, 0.041717f, -0.010211f, -0.025299f, -0.031475f, 0.023766f, 0.003442f, 0.022660f, -0.014189f, 0.000818f, -0.024280f, -0.001541f, -0.005311f, 0.011643f, 0.003333f, 0.025656f, -0.005588f, -0.007465f, -0.026902f, 0.018298f, 0.006266f, 0.016293f, -0.000091f, -0.015327f, -0.020046f, 0.006036f, 0.004636f, 0.013884f, 0.044069f, -0.105119f, 0.014973f, -0.077171f, 0.014116f, 0.065609f, 0.058008f, 0.019033f, -0.037536f, 0.007577f, -0.022288f, -0.005475f, -0.027667f, -0.020423f, 0.014274f, 0.003886f, -0.040296f, -0.004592f, 0.021024f, -0.004429f, 0.002406f, 0.007655f, -0.025693f, -0.025431f, -0.000631f, 0.016918f, 0.002275f, -0.040961f, 0.003456f, 0.021091f, 0.006641f, 0.004945f, 0.042942f, -0.004673f, -0.011408f, 0.015438f, 0.016461f, -0.028966f, -0.032151f, 0.023920f, 0.004649f, -0.024655f, 0.016624f, 0.007244f, 0.008069f, -0.017231f, 0.006994f, 0.019507f, 0.002375f, -0.024270f, 0.033032f, -0.003950f, -0.036974f, 0.001176f, 0.028980f, 0.009088f, -0.024189f, 0.022094f, 0.007327f, -0.033697f, 0.013906f, - 0.001800f, 0.034493f, -0.031177f, 0.002838f, 0.023812f, -0.054678f, 0.001812f, 0.023643f, -0.000843f, 0.016394f, -0.009029f, -0.034996f, 0.004717f, -0.037033f, 0.034853f, 0.017984f, 0.009876f, -0.013747f, -0.014451f, 0.028760f, -0.024697f, 0.025666f, 0.028239f, -0.040259f, -0.013002f, 0.001747f, 0.031263f, 0.000511f, -0.018006f, 0.011574f, -0.021823f, -0.001292f, 0.003249f, 0.018436f, 0.001338f, 0.003049f, -0.011237f, 0.019186f, -0.006335f, -0.022347f, 0.020423f, -0.009015f, 0.008856f, -0.005051f, 0.014752f, 0.018542f, -0.021190f, 0.003737f, -0.011442f, 0.005027f, -0.011627f, 0.041211f, -0.011555f, -0.023102f, 0.018680f, -0.010401f, -0.003405f, -0.011751f, 0.012249f, 0.011225f, -0.016564f, 0.009330f, 0.016327f, -0.008394f, 0.001186f, -0.022994f, -0.052385f, 0.084997f, 0.011721f, 0.038266f, -0.033526f, 0.014430f, -0.007510f, 0.010008f, 0.009015f, -0.014542f, 0.005426f, 0.015345f, -0.009299f, 0.033738f, 0.001238f, 0.000843f, 0.011279f, 0.010863f, -0.001552f, -0.008922f, 0.014239f, -0.002501f, -0.010310f, -0.002303f, 0.014312f, -0.015987f, 0.003097f, 0.006895f, -0.020308f, 0.024816f, - -0.005243f, -0.012285f, 0.038191f, -0.016045f, -0.022890f, 0.017451f, 0.009525f, -0.010824f, 0.016440f, 0.013141f, -0.004864f, -0.005613f, -0.003213f, 0.004813f, 0.009375f, 0.005419f, -0.000271f, -0.006833f, 0.019598f, -0.021282f, 0.018786f, 0.002778f, -0.002507f, 0.005110f, 0.005828f, 0.005974f, 0.000676f, -0.018959f, 0.005091f, 0.015998f, -0.011692f, -0.000238f, -0.000158f, 0.012144f, -0.001409f, -0.004971f, 0.018456f, -0.009642f, 0.009838f, -0.019473f, -0.007298f, 0.018512f, -0.017935f, 0.017792f, -0.004813f, 0.011655f, 0.014291f, -0.016565f, -0.005713f, 0.020105f, -0.017081f, -0.001070f, 0.001987f, 0.005957f, 0.001375f, -0.002489f, 0.000613f, 0.001335f, 0.009229f, -0.008173f, 0.001930f, 0.005787f, -0.000732f, -0.004317f, 0.000911f, 0.003323f, -0.000939f, 0.001023f, -0.003665f, 0.004036f, 0.005710f, -0.010391f, -0.001753f, 0.017478f, -0.008679f, 0.004859f, -0.001429f, 0.009882f, 0.002727f, -0.005753f, 0.001005f, -0.001285f, -0.006005f, -0.004269f, 0.020706f, -0.003732f, -0.004904f, 0.002796f, 0.002198f, -0.001811f, 0.004303f, 0.008395f, 0.000149f, 0.002044f, 0.000673f, -0.002019f, - 0.001162f, 0.002331f, -0.004093f, 0.002577f, -0.000381f, 0.019954f, -0.070373f, -0.225064f, -0.011432f, 0.121352f, 0.054469f, 0.258473f, 0.022063f, 0.054625f, 0.002292f, -0.075306f, -0.094912f, -0.064242f, -0.115671f, -0.080878f, -0.050892f, 0.001904f, 0.088338f, 0.174069f, 0.128060f, 0.111519f, 0.036302f, -0.060503f, -0.088972f, -0.079914f, -0.094283f, -0.104481f, -0.042387f, -0.019970f, -0.009145f, 0.051105f, 0.067711f, 0.051156f, 0.094663f, 0.061218f, 0.022663f, 0.063615f, 0.001468f, -0.027513f, -0.018270f, -0.056942f, -0.116974f, -0.071002f, -0.068491f, -0.069720f, 0.003628f, 0.032621f, 0.022456f, 0.086051f, 0.070459f, 0.048681f, 0.069299f, 0.073824f, 0.020864f, 0.022208f, -0.007881f, -0.063384f, -0.088276f, -0.067327f, -0.088480f, -0.062788f, -0.021998f, -0.015452f, 0.005420f, 0.048275f, 0.037667f, 0.034143f, 0.067967f, 0.056329f, 0.041286f, 0.070350f, 0.019210f, -0.014291f, -0.002948f, -0.028063f, -0.061070f, -0.035365f, -0.077249f, -0.097455f, -0.057571f, -0.048438f, -0.021149f, 0.056775f, 0.076404f, 0.071429f, 0.082199f, 0.067816f, 0.038425f, 0.037228f, 0.017929f, -0.007827f, - -0.020979f, -0.039119f, -0.058074f, -0.057943f, -0.065720f, -0.068796f, -0.059024f, -0.019960f, -0.007039f, 0.023333f, 0.059195f, 0.066128f, 0.065209f, 0.076425f, 0.060595f, 0.045583f, 0.037708f, 0.012548f, -0.029570f, -0.052383f, -0.085656f, -0.109115f, -0.102402f, -0.080945f, -0.040908f, 0.010492f, 0.054739f, 0.075431f, 0.086543f, 0.090466f, 0.077824f, 0.055237f, 0.027995f, -0.017806f, -0.044430f, -0.058453f, -0.068110f, -0.059359f, -0.044917f, -0.030761f, -0.012914f, 0.014449f, 0.018809f, 0.025950f, 0.029540f, 0.026545f, 0.020874f, 0.016927f, 0.011163f, 0.010075f, 0.004267f, -0.003214f, -0.005838f, -0.005665f, -0.009316f, -0.009925f, -0.013213f, -0.015159f, -0.017098f, -0.013455f, -0.010576f, -0.005470f, -0.000607f, 0.008694f, 0.014142f, 0.016874f, 0.016602f, 0.018668f, 0.016393f, 0.012069f, 0.005088f, -0.002405f, -0.010129f, -0.012578f, -0.014859f, -0.014723f, -0.016372f, -0.014375f, -0.010401f, -0.002729f, 0.002113f, 0.006229f, 0.009658f, 0.012162f, 0.011731f, 0.012770f, 0.011793f, 0.009942f, 0.005895f, 0.001816f, -0.004814f, -0.009107f, -0.012698f, -0.012655f, -0.012119f, -0.009931f, - -0.007027f, -0.001748f, 0.001115f, 0.003704f, 0.006062f, 0.008423f, 0.009276f, 0.009239f, 0.007089f, 0.005394f, 0.002595f, 0.000304f, -0.002385f, -0.004254f, -0.006780f, -0.007349f, -0.007774f, -0.006604f, -0.005133f, -0.002077f, 0.000411f, 0.003399f, 0.005040f, 0.005509f, 0.004606f, 0.004260f, 0.003551f, 0.003122f, 0.001708f, 0.000352f, -0.001368f, -0.002520f, -0.003857f, -0.004211f, -0.004138f, -0.003008f, -0.001787f, -0.000332f, 0.000377f, 0.001244f, 0.001570f, 0.001887f, 0.001717f, 0.001462f, 0.001009f, 0.000753f, 0.000293f, 0.000017f, -0.000263f, -0.000346f, -0.000407f, -0.000421f, -0.000399f}, - {-0.005259f, 0.001130f, 0.005927f, -0.000636f, 0.000436f, -0.009048f, -0.004603f, 0.001217f, 0.011753f, -0.007751f, 0.002373f, -0.012419f, 0.012537f, 0.000730f, 0.004530f, -0.001556f, 0.001901f, -0.002476f, -0.004441f, -0.010809f, 0.004432f, -0.010836f, -0.005117f, -0.006157f, 0.005995f, 0.004745f, 0.002236f, 0.004950f, 0.009427f, 0.000526f, -0.008741f, 0.005591f, 0.000833f, -0.000501f, 0.004566f, -0.001812f, -0.003229f, -0.012732f, 0.001959f, -0.003713f, 0.002674f, 0.005218f, -0.006949f, -0.002821f, 0.006154f, 0.001872f, 0.000652f, -0.006525f, 0.016142f, 0.009695f, 0.001502f, 0.007767f, 0.006368f, 0.006178f, -0.014921f, 0.000843f, -0.001526f, -0.004010f, 0.003554f, 0.002381f, -0.002464f, -0.002850f, -0.000880f, -0.004518f, 0.004296f, -0.001753f, 0.008552f, -0.000395f, -0.002287f, -0.004173f, -0.007635f, -0.001456f, 0.005736f, -0.000326f, 0.001251f, 0.006772f, 0.001790f, 0.007845f, -0.000237f, 0.001128f, -0.000896f, 0.008440f, 0.007478f, 0.007563f, 0.001583f, -0.000080f, 0.003317f, -0.000241f, 0.000971f, 0.000091f, 0.000307f, -0.000706f, -0.002442f, -0.002075f, -0.000516f, -0.002367f, - 0.001012f, 0.001092f, -0.001057f, 0.002426f, -0.001062f, -0.000796f, -0.000590f, 0.000954f, 0.000209f, 0.002161f, 0.000116f, -0.000039f, 0.000103f, 0.002824f, 0.001347f, -0.000291f, -0.000855f, 0.000063f, -0.000484f, 0.001559f, 0.000736f, 0.003012f, 0.000678f, 0.003836f, 0.013427f, -0.006546f, 0.004471f, -0.003737f, -0.005848f, -0.002419f, -0.004054f, 0.007317f, -0.006084f, -0.011288f, -0.002893f, 0.002935f, -0.009400f, -0.005702f, 0.010583f, 0.018279f, -0.003101f, 0.006967f, -0.006293f, -0.006644f, -0.000306f, 0.001897f, -0.000818f, -0.000223f, 0.006785f, -0.011645f, 0.003778f, -0.000892f, -0.002442f, -0.009824f, 0.000844f, 0.000192f, 0.005508f, 0.001613f, -0.007665f, 0.010063f, -0.008046f, 0.009387f, -0.001064f, 0.001670f, 0.003829f, -0.001149f, -0.004720f, 0.007329f, 0.001809f, 0.009806f, 0.001497f, -0.008727f, 0.015746f, 0.012476f, -0.004366f, -0.001329f, -0.003034f, -0.010990f, -0.005919f, -0.001848f, -0.001884f, 0.004374f, -0.006024f, 0.000439f, 0.004318f, -0.000027f, -0.000164f, -0.000745f, -0.001033f, -0.006023f, 0.009524f, 0.000261f, -0.000204f, -0.003048f, -0.001059f, -0.008782f, - -0.007766f, 0.002526f, 0.006359f, -0.000845f, -0.001645f, -0.000051f, -0.000062f, -0.004520f, 0.008537f, 0.001124f, 0.002828f, -0.002262f, 0.002333f, 0.001420f, -0.000349f, -0.000196f, -0.000369f, 0.000076f, 0.002028f, -0.001163f, 0.001287f, 0.001329f, -0.000258f, -0.000385f, 0.001066f, 0.002242f, 0.002045f, -0.001498f, 0.000573f, 0.000663f, -0.001119f, -0.000675f, 0.003212f, -0.000490f, -0.000149f, -0.002553f, -0.002301f, -0.003900f, -0.001421f, -0.013960f, 0.017321f, -0.003705f, -0.001969f, 0.012391f, -0.004762f, 0.006417f, 0.027469f, -0.003233f, 0.000877f, -0.010431f, -0.008409f, -0.013009f, 0.007632f, -0.005342f, 0.003759f, 0.007251f, -0.008167f, -0.006975f, -0.005093f, 0.000641f, 0.002761f, -0.010106f, -0.003921f, 0.004489f, 0.003868f, -0.003978f, -0.001593f, 0.006255f, -0.006345f, 0.001049f, -0.003122f, -0.001108f, -0.004398f, 0.003854f, -0.004030f, 0.001739f, 0.003701f, -0.001628f, 0.011585f, 0.000536f, -0.001501f, -0.008468f, 0.001079f, 0.012371f, 0.001765f, 0.004210f, -0.011213f, -0.016049f, -0.005787f, -0.013800f, -0.012170f, -0.000271f, -0.005216f, -0.000430f, -0.014776f, 0.012745f, - -0.013675f, 0.002071f, 0.009481f, -0.008452f, -0.014291f, -0.010160f, -0.002949f, 0.009587f, 0.008528f, 0.012813f, -0.007444f, -0.006541f, -0.005215f, -0.004471f, 0.009300f, 0.002432f, -0.003748f, -0.001988f, 0.004464f, 0.005058f, 0.001591f, 0.002364f, 0.003275f, -0.000635f, -0.005236f, -0.000802f, -0.003440f, 0.001393f, 0.000536f, 0.001231f, 0.001136f, 0.000346f, 0.002310f, 0.000366f, 0.002682f, 0.000328f, -0.001875f, 0.002725f, -0.002986f, -0.001927f, 0.000707f, -0.000732f, 0.002749f, -0.001540f, -0.001126f, -0.000453f, 0.000445f, -0.000965f, -0.001750f, 0.001784f, -0.000486f, 0.001338f, -0.001461f, -0.001410f, -0.001746f, -0.002050f, -0.001243f, -0.001857f, 0.002891f, -0.002395f, 0.014933f, 0.001545f, -0.006017f, 0.000841f, -0.004983f, -0.001113f, 0.010445f, 0.017534f, -0.006009f, -0.006141f, -0.015928f, 0.002011f, 0.003981f, 0.009052f, -0.006018f, 0.009762f, 0.001529f, 0.015035f, -0.012084f, 0.001932f, -0.022804f, -0.002511f, 0.002702f, -0.005570f, -0.005147f, -0.002014f, 0.008374f, -0.006879f, -0.012002f, 0.003397f, -0.017599f, -0.003833f, -0.008468f, 0.003875f, -0.001898f, 0.005944f, - 0.000754f, -0.013399f, -0.014500f, 0.000396f, 0.007678f, 0.014326f, -0.002876f, -0.005831f, 0.011968f, -0.013234f, -0.007230f, 0.006386f, 0.005672f, 0.009482f, -0.009084f, 0.000337f, 0.003633f, -0.005710f, -0.001958f, 0.005600f, -0.008250f, 0.010702f, -0.004691f, -0.001991f, -0.011456f, -0.009493f, 0.004551f, -0.000024f, 0.000180f, -0.001615f, -0.007046f, 0.006628f, -0.004443f, 0.008243f, -0.000180f, -0.010906f, -0.011480f, 0.004185f, -0.005793f, 0.002043f, -0.016327f, -0.015555f, -0.002522f, 0.014639f, 0.000063f, -0.003020f, 0.000688f, 0.002109f, 0.001522f, -0.000673f, 0.002295f, -0.007635f, 0.001382f, 0.001286f, 0.002272f, 0.002937f, 0.003219f, 0.001717f, -0.004325f, 0.000309f, 0.003729f, 0.001738f, 0.000971f, -0.002137f, -0.002662f, 0.000602f, -0.000055f, -0.000883f, 0.003495f, -0.000077f, -0.000298f, -0.002467f, 0.004372f, 0.003640f, -0.000270f, 0.000311f, -0.002232f, 0.001265f, 0.001325f, 0.000604f, 0.000143f, 0.001445f, -0.002026f, -0.001053f, 0.008842f, -0.024451f, 0.005539f, -0.010683f, 0.008839f, 0.010118f, -0.011618f, -0.021450f, 0.002890f, -0.002959f, 0.013412f, -0.008232f, - 0.019472f, -0.008356f, 0.012846f, -0.016136f, -0.006052f, 0.006587f, 0.009522f, 0.002591f, -0.000182f, -0.009940f, -0.001406f, -0.007844f, -0.009786f, 0.005255f, -0.008369f, 0.003122f, 0.001779f, 0.003872f, -0.004809f, 0.009006f, -0.001828f, 0.007737f, -0.001888f, -0.015123f, -0.002624f, -0.004910f, 0.001399f, 0.014889f, 0.000826f, -0.001396f, -0.000900f, -0.006183f, 0.005069f, -0.005835f, 0.007798f, 0.008463f, 0.002992f, 0.003192f, 0.014988f, -0.003844f, -0.002850f, -0.012190f, 0.008488f, 0.007492f, 0.001478f, 0.001855f, 0.001470f, 0.000533f, 0.004302f, 0.009106f, 0.006031f, 0.003412f, 0.003234f, -0.002442f, 0.011885f, 0.003999f, -0.002595f, -0.009321f, 0.004566f, -0.002835f, 0.017409f, 0.009857f, 0.002095f, -0.008175f, -0.003136f, 0.013266f, -0.005308f, 0.001662f, 0.007625f, -0.004395f, -0.005498f, -0.010692f, 0.001227f, 0.003794f, -0.000959f, 0.005019f, -0.004272f, -0.001638f, -0.003357f, 0.003662f, -0.000444f, -0.001257f, -0.005210f, 0.001146f, 0.001181f, 0.002981f, 0.003479f, -0.001290f, 0.000471f, 0.003909f, -0.000433f, 0.003969f, -0.000410f, 0.001155f, 0.005813f, 0.001167f, - 0.005977f, -0.000525f, -0.001467f, -0.000443f, -0.000667f, 0.000147f, 0.000298f, -0.004665f, 0.001573f, 0.003635f, 0.000248f, 0.001434f, -0.001250f, -0.031380f, -0.017055f, 0.006284f, -0.006146f, 0.012599f, 0.012564f, 0.018980f, 0.007836f, 0.007670f, 0.004661f, -0.022872f, -0.005143f, -0.003176f, 0.002021f, -0.002304f, 0.007082f, 0.005039f, -0.008819f, -0.007031f, 0.005837f, 0.011116f, 0.014005f, 0.012092f, 0.015912f, -0.008755f, -0.008764f, -0.011606f, 0.012258f, -0.007126f, 0.010120f, -0.002586f, -0.000572f, -0.010869f, -0.006549f, -0.006223f, 0.009185f, 0.011364f, 0.001961f, 0.011361f, 0.016231f, -0.006481f, 0.004067f, 0.019093f, -0.009659f, 0.006190f, 0.006428f, 0.000705f, 0.014312f, 0.018399f, 0.013944f, 0.031919f, 0.005876f, -0.004543f, -0.005969f, -0.005483f, -0.000405f, 0.005611f, 0.009622f, -0.001775f, -0.003189f, -0.003386f, -0.008619f, 0.003586f, 0.004561f, 0.008268f, -0.019997f, -0.002742f, 0.004975f, 0.013218f, 0.009154f, -0.017030f, -0.012682f, 0.003213f, 0.003115f, 0.013794f, -0.012221f, 0.000764f, -0.001300f, 0.001459f, -0.017361f, -0.004680f, -0.006029f, -0.004198f, - -0.007180f, -0.002986f, 0.000469f, 0.006638f, -0.000090f, 0.000375f, 0.002511f, 0.003177f, -0.006682f, -0.001041f, 0.000415f, 0.000031f, 0.002280f, -0.002274f, -0.004396f, -0.002922f, -0.003376f, 0.004706f, -0.004600f, -0.002170f, -0.005283f, 0.001313f, -0.001197f, 0.003351f, -0.004844f, 0.002009f, -0.001696f, 0.001975f, 0.001699f, 0.000349f, 0.004043f, -0.003906f, 0.001950f, 0.002283f, 0.000604f, 0.004823f, 0.007554f, 0.015136f, -0.001974f, 0.003081f, 0.012941f, 0.019002f, 0.010698f, -0.021003f, 0.000059f, -0.022345f, -0.015846f, -0.009607f, -0.001864f, -0.013680f, 0.016305f, 0.006018f, 0.009649f, -0.027795f, -0.001999f, 0.018153f, 0.009236f, -0.008169f, -0.011683f, -0.007150f, 0.007081f, -0.021270f, -0.001243f, -0.013676f, 0.020910f, -0.002774f, -0.006117f, 0.002210f, -0.000749f, -0.003605f, 0.003690f, -0.005546f, 0.009710f, 0.006887f, 0.013958f, -0.001055f, 0.000712f, 0.021525f, -0.006818f, 0.014401f, -0.002343f, -0.002556f, 0.037954f, 0.004500f, -0.004070f, -0.008593f, -0.029360f, 0.003073f, -0.030091f, -0.005087f, 0.031683f, -0.008964f, -0.006160f, -0.022041f, -0.006458f, 0.000760f, - -0.011837f, 0.006341f, -0.001152f, -0.016161f, 0.017144f, 0.006111f, 0.005581f, 0.004694f, -0.011942f, 0.013073f, -0.020467f, 0.005894f, 0.007858f, 0.000838f, -0.002713f, -0.008309f, -0.006511f, -0.008463f, -0.002710f, 0.006771f, 0.008743f, -0.002233f, -0.007159f, -0.004263f, 0.009746f, 0.003975f, 0.018659f, -0.000354f, 0.001404f, 0.007571f, -0.000779f, -0.003465f, -0.002589f, -0.002386f, -0.002064f, -0.003106f, 0.002188f, -0.003543f, -0.000140f, 0.003777f, 0.001392f, 0.003851f, 0.003741f, 0.002980f, 0.000330f, 0.005603f, 0.004067f, 0.002400f, 0.001722f, 0.001676f, -0.005895f, -0.005028f, 0.004262f, 0.000578f, -0.003641f, 0.000615f, -0.004140f, 0.001163f, 0.004703f, 0.001689f, -0.000810f, 0.001701f, 0.004029f, 0.000874f, -0.003295f, 0.001592f, 0.012259f, -0.025044f, 0.010640f, -0.008908f, -0.012719f, -0.012129f, 0.009363f, 0.011997f, 0.006947f, 0.020884f, 0.015377f, 0.003022f, 0.006208f, -0.016567f, 0.003227f, 0.007301f, 0.016171f, 0.003042f, -0.007922f, 0.005840f, 0.007496f, -0.014860f, 0.002044f, -0.015239f, 0.011698f, 0.010654f, 0.013743f, -0.013573f, 0.008121f, 0.014729f, - -0.006815f, 0.003721f, 0.019584f, -0.000713f, -0.012296f, -0.009812f, 0.004285f, -0.003366f, -0.012494f, -0.005204f, 0.000131f, 0.002783f, 0.006627f, -0.008646f, 0.013641f, 0.008248f, -0.003242f, 0.016481f, -0.002146f, 0.006185f, 0.021643f, -0.023211f, 0.042546f, -0.019731f, 0.005766f, 0.012755f, -0.004546f, -0.002481f, 0.005304f, 0.028781f, -0.001669f, -0.004100f, -0.000955f, -0.006959f, 0.013941f, 0.015643f, -0.005132f, 0.006636f, 0.005505f, 0.005035f, 0.009547f, 0.012300f, 0.000933f, 0.013310f, 0.002802f, -0.011610f, -0.017811f, 0.004142f, 0.001659f, 0.008036f, 0.003384f, 0.026643f, -0.002783f, 0.014842f, 0.011958f, -0.008375f, -0.015317f, -0.001874f, 0.001646f, 0.003866f, -0.004217f, 0.006794f, 0.003158f, -0.006648f, -0.001876f, -0.006349f, -0.002384f, 0.003823f, -0.002091f, 0.005683f, -0.001535f, 0.001989f, 0.001403f, -0.002754f, 0.002980f, 0.003422f, -0.005392f, 0.003498f, 0.002306f, 0.001044f, 0.001190f, -0.000254f, 0.000961f, 0.006331f, 0.001924f, -0.002332f, 0.001090f, 0.001698f, 0.003101f, 0.003881f, -0.001274f, -0.004481f, -0.001342f, -0.003920f, -0.002962f, 0.004680f, - 0.004289f, 0.005517f, 0.014153f, 0.018640f, 0.011456f, -0.019845f, 0.037986f, -0.011974f, 0.007190f, -0.027905f, 0.011068f, -0.024682f, 0.019085f, 0.001955f, -0.005319f, -0.013978f, 0.018043f, 0.002391f, 0.011507f, 0.011872f, 0.006090f, -0.020798f, 0.010607f, -0.012601f, -0.002317f, 0.009342f, 0.010181f, 0.002342f, -0.003873f, -0.020843f, 0.002892f, 0.019139f, 0.002135f, 0.012378f, 0.013874f, -0.021766f, 0.011966f, -0.011085f, -0.010914f, 0.016001f, 0.017762f, 0.009193f, 0.009995f, 0.002732f, 0.009582f, -0.022438f, -0.009993f, -0.007194f, 0.000645f, 0.023804f, 0.011448f, 0.009404f, -0.001760f, 0.010437f, -0.000531f, 0.026218f, 0.009700f, 0.009912f, 0.004022f, -0.001520f, -0.038854f, 0.014354f, 0.009195f, -0.003653f, -0.002745f, -0.029077f, 0.000276f, -0.011152f, 0.006944f, 0.025213f, -0.004237f, -0.014526f, 0.029478f, -0.001383f, 0.016651f, -0.009886f, 0.000108f, -0.018450f, -0.001696f, 0.000290f, -0.031842f, -0.009537f, -0.005489f, -0.014388f, -0.006639f, -0.002883f, 0.002012f, 0.015891f, 0.001184f, -0.000445f, -0.003078f, -0.008294f, -0.001320f, 0.001412f, -0.003023f, 0.001072f, - 0.000396f, 0.004213f, -0.007467f, -0.003003f, -0.000996f, -0.006940f, 0.000378f, -0.004520f, -0.002810f, -0.002310f, -0.005556f, -0.002918f, 0.006521f, -0.002235f, 0.001165f, -0.001836f, 0.007069f, -0.000372f, 0.003205f, -0.004642f, -0.010337f, -0.003190f, -0.000448f, 0.004418f, 0.001868f, 0.006315f, -0.000422f, -0.002067f, 0.005411f, -0.006645f, 0.007895f, -0.000215f, 0.024871f, -0.021450f, 0.003112f, 0.009039f, 0.011244f, -0.037220f, 0.024682f, 0.006890f, -0.026467f, -0.016928f, 0.014421f, 0.033144f, -0.011690f, -0.006036f, -0.022917f, 0.047457f, 0.018424f, 0.002945f, 0.007893f, -0.024935f, -0.016154f, -0.001057f, 0.002057f, 0.024613f, 0.005327f, 0.018973f, 0.021326f, -0.000939f, 0.001311f, 0.014856f, -0.003930f, -0.015861f, -0.015173f, -0.003864f, 0.021114f, -0.011420f, 0.026714f, -0.012403f, 0.039235f, 0.017449f, 0.031643f, -0.008578f, 0.005110f, 0.025399f, -0.019786f, 0.011838f, 0.011454f, 0.010772f, -0.011335f, 0.013525f, 0.003266f, 0.004312f, 0.011540f, 0.024155f, 0.020304f, -0.020613f, -0.004829f, 0.010613f, -0.020112f, -0.012774f, -0.005316f, -0.041147f, 0.011006f, -0.020340f, - -0.012758f, 0.003968f, -0.005105f, 0.014085f, 0.026223f, 0.016811f, 0.010601f, -0.014163f, -0.003350f, -0.000860f, -0.027841f, 0.005090f, 0.002364f, 0.034416f, 0.007406f, 0.007744f, -0.007458f, 0.026592f, -0.000238f, -0.000758f, 0.000082f, -0.008646f, -0.003953f, 0.001121f, -0.001584f, -0.009368f, 0.000870f, -0.002404f, 0.001701f, -0.011172f, -0.012123f, -0.003972f, 0.009679f, -0.001592f, 0.003776f, 0.003680f, 0.003000f, -0.000776f, -0.002552f, -0.003326f, -0.006706f, -0.011192f, 0.003873f, 0.000617f, -0.002723f, -0.013222f, 0.009794f, 0.006693f, 0.003810f, -0.001055f, 0.000862f, -0.004469f, 0.003367f, -0.002333f, -0.004319f, 0.001611f, 0.005706f, 0.003487f, -0.003447f, -0.000786f, -0.001361f, 0.004246f, -0.029639f, -0.043744f, 0.023676f, -0.017809f, 0.019414f, 0.006353f, 0.009402f, 0.011497f, -0.029384f, -0.053466f, 0.004743f, 0.007739f, 0.030138f, -0.029703f, -0.032564f, 0.028114f, -0.011220f, 0.012790f, -0.006136f, 0.006697f, 0.004465f, 0.007415f, -0.014828f, 0.007168f, -0.002132f, -0.004644f, 0.018581f, 0.006938f, -0.002665f, -0.024122f, -0.003287f, -0.000690f, -0.004438f, -0.001151f, - -0.013049f, -0.031997f, -0.014216f, 0.023488f, -0.009999f, 0.011582f, -0.018134f, 0.013439f, 0.006930f, -0.000241f, -0.009129f, -0.039688f, 0.021945f, 0.021297f, 0.027388f, -0.019151f, -0.008112f, 0.037219f, 0.032901f, 0.015199f, 0.007078f, 0.021035f, 0.007745f, 0.018901f, -0.010139f, 0.016418f, -0.031374f, -0.001994f, 0.008763f, -0.008170f, 0.037353f, 0.001456f, 0.020429f, -0.012177f, -0.020064f, 0.043163f, -0.000719f, 0.017134f, -0.005703f, 0.000611f, -0.050757f, -0.004273f, 0.010808f, -0.019590f, 0.023926f, 0.018139f, 0.004478f, -0.010387f, -0.038661f, -0.000825f, -0.007854f, 0.009638f, 0.011760f, 0.001963f, -0.004698f, 0.009098f, 0.000415f, 0.004470f, -0.002445f, -0.011696f, -0.004266f, -0.010680f, 0.018722f, 0.005742f, -0.000369f, -0.000389f, 0.002353f, 0.017285f, -0.002978f, -0.004141f, 0.002681f, -0.001356f, 0.000230f, 0.007754f, 0.004242f, 0.006970f, -0.004980f, -0.000653f, -0.007984f, 0.001555f, 0.000141f, 0.007299f, 0.007309f, -0.008089f, 0.013062f, 0.013266f, -0.010344f, 0.000808f, 0.001716f, -0.001501f, -0.021933f, -0.028734f, -0.008343f, -0.006731f, -0.049204f, -0.046156f, - -0.012093f, 0.000224f, 0.034741f, 0.028260f, 0.027969f, -0.010817f, -0.004497f, -0.007002f, 0.029864f, 0.012832f, -0.012531f, -0.002217f, -0.009977f, 0.021599f, 0.016764f, -0.012469f, -0.017461f, -0.016026f, -0.032733f, 0.013670f, 0.000912f, 0.000927f, 0.007144f, -0.004896f, 0.012412f, 0.046031f, -0.026204f, 0.013878f, 0.002746f, -0.017744f, -0.010162f, -0.021067f, 0.007986f, -0.009364f, -0.010586f, 0.023834f, 0.002926f, -0.007952f, 0.024065f, -0.003275f, -0.010628f, 0.008374f, 0.017557f, -0.009668f, 0.018868f, 0.033893f, 0.032688f, -0.022347f, -0.000314f, 0.008165f, 0.018419f, -0.028300f, -0.005900f, -0.007817f, 0.035256f, 0.015024f, -0.003806f, -0.021448f, -0.023804f, -0.021162f, 0.031839f, 0.026368f, -0.050454f, -0.042094f, -0.031927f, -0.022486f, 0.007606f, -0.020281f, 0.012307f, 0.003358f, 0.004999f, -0.040589f, -0.013017f, 0.036687f, 0.028293f, -0.012298f, -0.026053f, 0.025342f, 0.013274f, -0.003056f, 0.000412f, -0.003240f, -0.006185f, 0.014400f, -0.012933f, 0.003147f, 0.002203f, -0.000545f, -0.009350f, -0.017051f, 0.003280f, 0.013842f, -0.001372f, 0.001514f, -0.005969f, 0.013145f, - 0.014383f, 0.001406f, -0.001925f, 0.004843f, -0.000533f, 0.005809f, 0.006259f, 0.009054f, -0.012192f, -0.001186f, 0.004438f, -0.000015f, -0.007576f, 0.002012f, 0.015241f, 0.014189f, -0.005437f, 0.010869f, -0.016693f, 0.004159f, -0.005405f, -0.004644f, -0.006704f, -0.010434f, 0.003876f, 0.040742f, 0.032126f, 0.019962f, 0.003159f, -0.026509f, -0.013736f, -0.004043f, 0.011001f, 0.016951f, -0.023446f, 0.006179f, 0.001534f, -0.020029f, -0.009433f, 0.016245f, -0.011869f, 0.012922f, 0.005610f, 0.015186f, -0.018686f, -0.000026f, -0.041815f, 0.006326f, -0.052908f, 0.021842f, 0.021612f, -0.020536f, 0.024393f, 0.029043f, 0.000923f, 0.008296f, -0.034089f, 0.020184f, 0.002080f, -0.014145f, 0.018586f, -0.004340f, 0.000334f, -0.000301f, 0.002337f, 0.035723f, -0.003964f, -0.000032f, 0.043864f, -0.000419f, -0.020163f, -0.057840f, -0.047518f, 0.052899f, 0.032989f, 0.013048f, 0.013368f, -0.022107f, -0.044532f, -0.021888f, 0.007117f, -0.017109f, 0.034922f, -0.001852f, 0.004688f, 0.037635f, -0.007668f, -0.011670f, -0.008405f, -0.023681f, -0.040195f, -0.031943f, 0.091025f, -0.044166f, -0.019952f, 0.026117f, - -0.046021f, -0.033166f, 0.033052f, 0.046292f, 0.015297f, -0.008403f, 0.054504f, 0.026320f, -0.043750f, -0.015179f, -0.024408f, -0.023842f, 0.049560f, 0.003601f, -0.032921f, -0.022766f, -0.025610f, 0.007245f, -0.005236f, 0.015116f, -0.000309f, -0.007593f, -0.011978f, 0.001133f, 0.013766f, -0.007354f, 0.006397f, -0.007163f, 0.006891f, 0.006233f, 0.019149f, -0.007411f, -0.002715f, 0.016397f, 0.001373f, 0.008393f, 0.008597f, 0.011711f, 0.002263f, -0.006808f, -0.003768f, -0.001725f, -0.002669f, 0.007193f, -0.002148f, -0.007627f, 0.015458f, 0.015933f, -0.008698f, 0.004091f, -0.009913f, 0.003655f, 0.003812f, 0.009850f, -0.002412f, -0.000933f, -0.004856f, 0.004716f, 0.011073f, -0.037375f, -0.027590f, -0.019260f, -0.034205f, -0.003102f, 0.032366f, -0.002369f, 0.006641f, 0.015920f, 0.010562f, -0.027539f, -0.013341f, -0.022763f, -0.012195f, 0.029144f, -0.008929f, -0.003203f, -0.004018f, 0.017663f, 0.017618f, 0.052615f, 0.008368f, 0.038725f, -0.002282f, 0.013054f, -0.021123f, -0.015916f, 0.013868f, -0.026878f, -0.029875f, 0.000957f, 0.009391f, -0.015346f, 0.012243f, -0.017963f, 0.005459f, -0.047229f, - 0.026337f, 0.014725f, 0.021539f, 0.002664f, -0.019210f, -0.039575f, -0.014122f, -0.003549f, 0.032594f, -0.024861f, -0.014717f, 0.009087f, 0.074560f, -0.020635f, 0.075797f, -0.046530f, 0.018351f, -0.017171f, 0.033254f, -0.013217f, 0.057506f, -0.054124f, 0.082362f, -0.007814f, 0.016928f, 0.035630f, -0.061104f, 0.054445f, -0.065265f, 0.044016f, -0.106338f, 0.057618f, -0.054672f, 0.048411f, -0.071321f, 0.062664f, 0.002096f, 0.040611f, 0.017573f, -0.033273f, 0.028905f, -0.023832f, 0.072029f, -0.032840f, 0.011844f, -0.043011f, 0.011624f, -0.002903f, 0.007879f, -0.015398f, 0.019980f, -0.019767f, 0.014148f, -0.007019f, 0.004546f, 0.006041f, 0.006345f, 0.008322f, -0.004925f, -0.011382f, -0.009240f, -0.010907f, -0.025024f, 0.014420f, 0.003678f, -0.017206f, -0.008018f, -0.005217f, 0.011107f, -0.019150f, 0.018162f, -0.014674f, 0.003599f, -0.007879f, 0.008819f, 0.002931f, -0.000201f, 0.027595f, -0.024501f, 0.014922f, -0.023674f, 0.035596f, -0.006808f, 0.034776f, -0.013742f, 0.010846f, 0.015694f, 0.005242f, 0.005391f, -0.000053f, 0.016632f, -0.024889f, 0.027231f, -0.018984f, 0.017910f, -0.004050f, - 0.000107f, -0.007211f, 0.000251f, 0.001473f, -0.007056f, 0.003307f, 0.006509f, 0.003191f, -0.032772f, -0.029697f, 0.034486f, 0.059506f, -0.049361f, 0.075444f, -0.004411f, -0.000052f, -0.002928f, 0.013065f, -0.022487f, -0.016547f, -0.033675f, -0.007569f, 0.001056f, 0.000031f, -0.000199f, 0.029627f, 0.005058f, 0.032485f, 0.031821f, -0.020299f, 0.011697f, 0.067801f, 0.022147f, 0.014486f, 0.010158f, -0.058896f, 0.002980f, -0.009586f, -0.007394f, -0.054019f, -0.011434f, 0.030971f, 0.008745f, 0.010267f, 0.015583f, 0.039251f, 0.010237f, -0.012173f, -0.004043f, -0.003435f, 0.014725f, -0.026794f, -0.016473f, 0.040529f, 0.025169f, 0.018846f, 0.031353f, 0.023120f, -0.013666f, -0.006899f, -0.046804f, -0.020609f, 0.019028f, 0.014964f, 0.035328f, -0.025520f, -0.012689f, -0.008988f, 0.025971f, 0.015148f, 0.023316f, 0.009571f, -0.018464f, -0.017195f, 0.058426f, -0.017927f, -0.056767f, 0.013068f, 0.041073f, 0.028087f, -0.000741f, -0.004969f, 0.005080f, 0.009350f, 0.005816f, 0.052128f, -0.062843f, -0.053733f, 0.006254f, 0.021139f, -0.027038f, -0.014020f, 0.004591f, -0.021350f, 0.010104f, -0.010464f, - -0.002663f, 0.005553f, -0.004060f, -0.014363f, 0.000553f, 0.011831f, -0.007626f, 0.000067f, -0.020785f, -0.003691f, -0.018284f, 0.013413f, -0.005797f, 0.012298f, -0.007431f, 0.007668f, 0.003233f, 0.010373f, 0.016321f, -0.016570f, -0.007388f, -0.004979f, 0.012875f, -0.008061f, -0.014906f, -0.027414f, -0.000068f, -0.010981f, -0.004060f, 0.004116f, 0.002766f, 0.000735f, 0.005402f, 0.008921f, -0.001733f, 0.027566f, 0.003441f, -0.002255f, -0.021336f, 0.003658f, -0.003901f, -0.001246f, 0.005254f, -0.022434f, -0.011394f, -0.023171f, -0.119457f, 0.032969f, -0.014586f, -0.007616f, 0.029261f, -0.020277f, 0.031401f, -0.004266f, -0.051789f, -0.009471f, 0.004994f, 0.018136f, 0.023075f, 0.005346f, -0.036714f, 0.036266f, -0.014278f, -0.003334f, -0.022578f, -0.010168f, 0.019424f, -0.003922f, 0.017323f, 0.029238f, -0.006816f, -0.037827f, 0.008346f, 0.041450f, -0.038661f, 0.014180f, 0.032160f, -0.005885f, -0.025586f, -0.047693f, -0.032202f, 0.033599f, 0.086137f, -0.026561f, -0.034417f, 0.097070f, -0.006384f, -0.014004f, 0.069841f, 0.040664f, 0.034684f, 0.028037f, 0.011478f, -0.020565f, 0.035464f, 0.033047f, - 0.022747f, 0.010531f, -0.064289f, 0.040116f, 0.035487f, -0.067852f, -0.039264f, -0.024389f, -0.019031f, -0.018703f, 0.073996f, 0.036947f, -0.042355f, 0.039555f, -0.015697f, -0.039589f, 0.017210f, 0.020127f, -0.017514f, -0.016783f, -0.062120f, 0.006976f, 0.010582f, 0.045413f, 0.021735f, 0.005618f, 0.037954f, -0.030181f, 0.078539f, -0.083514f, -0.097439f, 0.068774f, -0.042064f, -0.002608f, 0.048222f, -0.030397f, -0.020938f, -0.006014f, -0.005759f, 0.006001f, 0.029582f, 0.014535f, -0.024248f, -0.001483f, 0.011514f, -0.002894f, 0.016434f, -0.000647f, 0.009083f, 0.001782f, -0.012871f, 0.006910f, 0.026258f, 0.018095f, -0.001151f, 0.003524f, 0.017560f, -0.002816f, -0.002091f, 0.004464f, 0.040676f, 0.020887f, -0.006530f, 0.008905f, -0.036066f, -0.001566f, 0.009528f, -0.016598f, -0.022354f, 0.021117f, -0.009656f, -0.000607f, 0.021712f, -0.018814f, 0.008366f, -0.003197f, -0.005368f, 0.026947f, -0.015198f, -0.003612f, -0.031593f, -0.129774f, 0.040139f, 0.073469f, -0.045267f, -0.009300f, -0.035163f, 0.075581f, 0.050892f, 0.032000f, -0.005842f, -0.026225f, 0.005593f, 0.030549f, 0.014330f, -0.012976f, - -0.002709f, 0.041731f, -0.002559f, -0.015183f, -0.055548f, -0.026285f, 0.047190f, 0.027463f, -0.029473f, 0.023884f, -0.021291f, -0.006679f, 0.014285f, 0.013358f, -0.012753f, 0.008668f, -0.048669f, 0.014106f, 0.066228f, -0.008276f, -0.012685f, -0.064790f, -0.038826f, 0.031595f, -0.051009f, -0.027706f, 0.011899f, 0.013127f, -0.015647f, 0.042640f, 0.040334f, -0.041240f, 0.015624f, 0.023144f, 0.066741f, 0.061067f, -0.009451f, 0.020045f, -0.001436f, 0.069802f, 0.030486f, 0.028367f, 0.066239f, -0.029393f, -0.042958f, -0.022006f, -0.055045f, 0.046682f, 0.022169f, 0.022856f, 0.012294f, 0.079149f, -0.052142f, -0.012124f, 0.033960f, -0.018572f, 0.037667f, -0.001715f, 0.004588f, 0.017533f, -0.045498f, -0.069207f, 0.008939f, 0.013444f, 0.076436f, 0.058099f, 0.001612f, -0.056138f, -0.008679f, -0.061324f, -0.000142f, -0.001840f, -0.017036f, -0.015634f, 0.008556f, -0.005203f, -0.004406f, -0.015471f, -0.009909f, -0.013728f, -0.008031f, 0.002238f, -0.016230f, -0.014911f, -0.002277f, 0.015450f, 0.008058f, -0.019852f, 0.018381f, -0.009998f, 0.033920f, -0.010423f, -0.029717f, -0.010858f, 0.015152f, -0.009163f, - -0.022481f, 0.026096f, -0.005347f, -0.023550f, -0.036421f, 0.005814f, -0.005647f, 0.004466f, 0.008356f, -0.013931f, -0.011793f, -0.031934f, -0.006871f, -0.008309f, 0.002517f, 0.006124f, 0.012086f, 0.010446f, -0.024188f, 0.000290f, -0.030663f, -0.011128f, 0.003361f, 0.003486f, 0.030125f, 0.051249f, 0.044726f, 0.046081f, 0.059337f, -0.034281f, 0.046719f, -0.091535f, -0.040045f, 0.034530f, 0.008140f, 0.066707f, 0.030410f, 0.056874f, -0.024872f, 0.007451f, -0.049534f, 0.033470f, 0.055317f, 0.050304f, 0.004992f, 0.035625f, -0.087919f, -0.057291f, 0.054432f, 0.015782f, -0.054834f, -0.028380f, 0.006605f, 0.080455f, 0.024783f, -0.032885f, -0.041464f, 0.008098f, -0.012173f, 0.049442f, 0.053395f, -0.005395f, -0.008799f, 0.010515f, -0.015285f, 0.063973f, 0.018307f, -0.015315f, 0.012795f, -0.030618f, -0.018223f, -0.143712f, -0.048938f, 0.025478f, -0.022595f, -0.021612f, -0.000840f, -0.026027f, -0.026082f, 0.065693f, 0.043892f, -0.033271f, 0.059870f, 0.124292f, 0.025424f, 0.088497f, 0.012089f, 0.017889f, 0.064844f, 0.042824f, -0.035190f, -0.039838f, -0.070083f, -0.043574f, -0.004777f, -0.069086f, - 0.025375f, -0.008424f, -0.066968f, -0.048011f, -0.047977f, -0.060159f, -0.036640f, -0.024250f, -0.032139f, 0.009324f, 0.056763f, 0.069442f, 0.036461f, -0.007359f, -0.050951f, -0.006596f, 0.001769f, 0.004197f, -0.024932f, -0.004548f, -0.016910f, 0.013463f, 0.019377f, 0.002042f, 0.014129f, -0.000591f, -0.010083f, 0.016499f, -0.018182f, 0.002134f, 0.015587f, 0.033937f, 0.004449f, -0.000455f, 0.022742f, 0.009588f, 0.061394f, -0.015589f, -0.050405f, -0.002731f, 0.033595f, 0.005890f, -0.013912f, -0.015436f, -0.041048f, -0.038715f, -0.022124f, -0.015503f, -0.007386f, -0.023305f, -0.033738f, -0.035723f, -0.019798f, -0.003030f, 0.004591f, 0.046958f, 0.033770f, -0.012797f, 0.054493f, 0.097313f, 0.067095f, 0.047309f, 0.029295f, 0.018475f, -0.024350f, -0.015692f, -0.024313f, -0.021847f, -0.006087f, -0.001753f, 0.056217f, -0.006760f, 0.047669f, -0.031770f, 0.012290f, -0.107535f, 0.029573f, -0.016809f, 0.054426f, -0.014233f, -0.064547f, 0.063782f, -0.024738f, 0.009299f, 0.036061f, 0.026838f, 0.058341f, -0.009535f, 0.008419f, -0.011752f, 0.066594f, -0.014808f, 0.012206f, 0.046218f, -0.054422f, 0.045568f, - -0.014017f, 0.027670f, 0.044198f, -0.012571f, 0.009528f, 0.006957f, 0.004115f, -0.014949f, 0.019432f, 0.018815f, -0.008359f, -0.026797f, -0.005318f, -0.031149f, -0.010488f, -0.006338f, 0.024612f, -0.013372f, -0.049218f, -0.032597f, 0.050905f, 0.051462f, -0.049551f, -0.041586f, 0.061049f, 0.071874f, -0.028418f, -0.007618f, 0.051644f, 0.001666f, 0.026344f, 0.037490f, -0.088031f, -0.026320f, -0.006411f, 0.084423f, 0.007320f, -0.006455f, -0.083910f, 0.016149f, 0.032317f, 0.021072f, 0.002503f, 0.022045f, 0.008165f, 0.011180f, 0.105921f, -0.003673f, 0.005112f, 0.062238f, -0.038004f, 0.041221f, 0.007309f, 0.031009f, 0.020002f, -0.048663f, -0.016404f, 0.057018f, 0.037527f, 0.021605f, -0.014106f, 0.019683f, 0.009536f, -0.000404f, 0.007141f, 0.014243f, -0.007469f, 0.024646f, -0.016951f, -0.004796f, 0.025341f, 0.014896f, 0.004749f, -0.054516f, 0.004382f, 0.026383f, -0.020818f, 0.009167f, -0.048572f, -0.030849f, 0.033295f, 0.016058f, 0.027295f, 0.023869f, -0.019631f, -0.053032f, -0.015154f, 0.017708f, 0.045430f, 0.027558f, -0.007281f, -0.010460f, -0.016558f, 0.037433f, -0.001151f, -0.007909f, - -0.015847f, 0.019691f, 0.008009f, -0.008547f, -0.038717f, -0.024553f, 0.023837f, 0.023865f, 0.016848f, -0.026687f, -0.037371f, 0.018218f, 0.048443f, 0.022407f, 0.002977f, -0.024840f, -0.006251f, 0.011007f, -0.000929f, 0.000532f, 0.002438f, -0.006451f, -0.011575f, 0.003653f, 0.012376f, 0.003478f, 0.001841f, 0.005732f, 0.001521f, 0.001330f, 0.002253f, 0.006039f, 0.000675f, -0.000534f, 0.004651f, 0.061629f, -0.104142f, -0.007097f, -0.088108f, -0.081625f, 0.020605f, 0.017350f, 0.015026f, 0.002176f, 0.077805f, 0.044440f, 0.100151f, 0.109698f, -0.012015f, -0.053737f, 0.011478f, -0.014481f, -0.009984f, 0.023896f, 0.010632f, -0.008622f, -0.050417f, -0.054992f, 0.059787f, 0.027794f, -0.006790f, 0.009334f, 0.009726f, 0.005669f, 0.011012f, -0.005468f, -0.014314f, -0.081363f, 0.001782f, 0.046979f, -0.013734f, -0.062675f, -0.020635f, 0.051774f, -0.095757f, -0.032757f, 0.060516f, 0.036806f, 0.072271f, -0.001924f, 0.005251f, -0.066499f, -0.067337f, -0.084633f, 0.071374f, 0.101270f, -0.133184f, -0.066190f, -0.006994f, 0.067792f, -0.052854f, -0.008443f, 0.122087f, 0.049842f, 0.030948f, 0.080999f, - 0.059028f, 0.088905f, -0.032082f, 0.088399f, -0.013475f, -0.069029f, -0.101816f, -0.023687f, 0.038943f, -0.080448f, -0.015834f, 0.017537f, -0.017067f, -0.028209f, 0.017149f, 0.015756f, -0.055508f, 0.041513f, 0.020162f, 0.060243f, -0.014514f, -0.058646f, 0.073316f, 0.015030f, -0.066953f, 0.000573f, -0.015626f, 0.028081f, -0.029680f, -0.030182f, -0.015661f, -0.002902f, -0.001038f, -0.022825f, -0.027970f, 0.021887f, -0.029181f, -0.000020f, -0.028842f, 0.016052f, 0.027259f, 0.004548f, 0.040789f, 0.028300f, -0.041237f, -0.015075f, -0.000060f, -0.036772f, 0.006124f, -0.005999f, 0.014637f, -0.009483f, 0.012895f, 0.036059f, 0.000026f, 0.007201f, -0.025163f, 0.038780f, 0.024409f, -0.026911f, -0.008065f, 0.027762f, 0.025737f, -0.003481f, -0.039652f, -0.004807f, -0.077039f, 0.059743f, -0.004824f, 0.018422f, 0.023260f, 0.022529f, 0.000953f, -0.025820f, 0.042436f, 0.010805f, 0.040968f, -0.008548f, -0.086217f, -0.007632f, 0.025176f, -0.028201f, -0.031425f, -0.019155f, -0.028950f, 0.035433f, -0.008831f, -0.030506f, -0.001529f, 0.032980f, -0.043815f, 0.031066f, -0.015061f, 0.016637f, -0.043159f, -0.010580f, - 0.017798f, -0.003490f, -0.003781f, 0.005592f, 0.024567f, -0.004073f, -0.003719f, -0.030070f, 0.015333f, -0.008076f, 0.005104f, 0.009627f, 0.003420f, 0.022723f, -0.032660f, -0.024872f, 0.034689f, 0.029966f, -0.041069f, 0.019958f, -0.033144f, 0.038765f, -0.032015f, 0.014786f, 0.010182f, -0.027048f, 0.060763f, 0.006148f, -0.067097f, 0.031303f, 0.008394f, -0.051813f, 0.029465f, -0.018851f, 0.031366f, -0.044882f, 0.023417f, -0.047557f, 0.022203f, 0.034312f, -0.030566f, 0.017953f, -0.032493f, 0.001427f, 0.001358f, 0.003415f, -0.021265f, 0.000709f, 0.016644f, -0.000625f, -0.029306f, 0.022601f, -0.018266f, -0.039491f, 0.017400f, -0.017366f, 0.008925f, 0.018831f, -0.013820f, -0.008204f, 0.003592f, -0.002305f, 0.012289f, -0.006002f, -0.004131f, 0.011045f, 0.013906f, 0.004900f, -0.013460f, -0.007875f, 0.013439f, 0.008208f, -0.030791f, 0.028673f, -0.003807f, -0.010284f, 0.004216f, -0.001896f, 0.006966f, 0.015536f, -0.003494f, 0.029134f, -0.008241f, -0.012192f, -0.013777f, -0.005299f, 0.003033f, -0.013279f, 0.003892f, -0.004282f, -0.005287f, 0.003824f, 0.004920f, -0.005312f, 0.000131f, -0.001244f, - -0.005761f, 0.006252f, 0.004221f, -0.006288f, 0.018271f, 0.037254f, -0.018987f, -0.208069f, -0.375351f, -0.124866f, -0.290934f, -0.287832f, 0.154824f, 0.032072f, 0.215376f, 0.486779f, 0.438626f, 0.359595f, 0.439263f, 0.268738f, 0.059980f, 0.084416f, -0.062618f, -0.326346f, -0.322506f, -0.241415f, -0.313367f, -0.214957f, -0.044578f, -0.145142f, -0.200130f, -0.086984f, -0.025095f, -0.104131f, -0.049552f, -0.002201f, -0.052072f, -0.092704f, 0.019376f, 0.079762f, -0.027152f, 0.110756f, 0.165610f, 0.003898f, 0.031917f, 0.223886f, 0.110985f, 0.001185f, 0.209898f, 0.171514f, -0.040335f, 0.081127f, 0.195973f, -0.003918f, 0.015978f, 0.276492f, 0.148553f, 0.061616f, 0.334494f, 0.368487f, 0.181235f, 0.349327f, 0.434586f, 0.113804f, 0.058290f, 0.176829f, -0.070841f, -0.210514f, -0.122800f, -0.273866f, -0.485533f, -0.484625f, -0.550011f, -0.732593f, -0.737774f, -0.708088f, -0.724375f, -0.648288f, -0.555758f, -0.445343f, -0.291859f, -0.148722f, 0.071358f, 0.319638f, 0.421728f, 0.514534f, 0.697112f, 0.612889f, 0.547912f, 0.611954f, 0.451737f, 0.210618f, 0.247761f, 0.279865f, 0.103175f, 0.134692f, - 0.280421f, 0.137298f, 0.025453f, 0.119881f, 0.107960f, -0.062617f, -0.000800f, 0.074640f, -0.112292f, -0.143249f, 0.031500f, -0.029387f, -0.047300f, 0.155767f, 0.133752f, 0.012915f, 0.121515f, 0.176477f, 0.030325f, -0.014498f, 0.009072f, -0.183017f, -0.330024f, -0.344864f, -0.439622f, -0.553237f, -0.524176f, -0.469175f, -0.427392f, -0.381368f, -0.280130f, -0.265922f, -0.290288f, -0.194747f, -0.064058f, 0.016634f, 0.070921f, 0.189049f, 0.226895f, 0.256630f, 0.460748f, 0.536986f, 0.496419f, 0.457752f, 0.364811f, 0.230637f, 0.197717f, 0.168021f, 0.102990f, 0.073302f, 0.067900f, 0.026853f, -0.006088f, -0.009228f, -0.019282f, -0.040472f, -0.049963f, -0.041191f, -0.056468f, -0.077643f, -0.074078f, -0.071966f, -0.081459f, -0.082517f, -0.070093f, -0.073771f, -0.068933f, -0.052965f, -0.051126f, -0.054110f, -0.044933f, -0.037111f, -0.035877f, -0.025313f, -0.013576f, -0.009643f, -0.009392f, -0.012899f, -0.013360f, -0.014404f, -0.014888f, -0.012094f, -0.010812f, -0.020667f, -0.032106f, -0.041018f, -0.047219f, -0.050682f, -0.041895f, -0.033450f, -0.032674f, -0.027008f, -0.016057f, -0.012021f, 0.001971f, 0.022736f, - 0.033679f, 0.037027f, 0.048534f, 0.054749f, 0.052446f, 0.058851f, 0.067198f, 0.061452f, 0.061824f, 0.069568f, 0.067815f, 0.064862f, 0.066520f, 0.056487f, 0.040233f, 0.029421f, 0.019618f, 0.005329f, -0.006525f, -0.014046f, -0.024639f, -0.035032f, -0.037513f, -0.038343f, -0.040702f, -0.037578f, -0.036277f, -0.039767f, -0.038639f, -0.036482f, -0.034055f, -0.030026f, -0.025974f, -0.021330f, -0.016894f, -0.013094f, -0.007651f, -0.003968f, -0.001825f, 0.000549f, 0.002646f, 0.003161f, 0.004014f, 0.004906f, 0.005357f, 0.005426f, 0.005701f, 0.005725f, 0.005435f, 0.005114f, 0.005026f, 0.004931f, 0.004839f} - }, - { - {-0.015802f, 0.001738f, 0.010386f, 0.003546f, 0.006765f, -0.009889f, -0.005424f, 0.000440f, -0.001760f, 0.002642f, 0.008223f, -0.019803f, -0.000149f, 0.006503f, 0.003898f, 0.005993f, -0.005743f, -0.008006f, 0.008641f, -0.000150f, 0.002400f, 0.005390f, 0.007147f, 0.002637f, 0.001481f, 0.006437f, -0.000965f, -0.002065f, -0.005579f, 0.002995f, -0.001581f, -0.000908f, -0.002905f, 0.003700f, 0.009403f, 0.000038f, -0.001973f, 0.004432f, -0.006042f, -0.009015f, -0.005000f, -0.001827f, -0.005865f, 0.000527f, -0.001370f, 0.003787f, -0.003667f, 0.001053f, -0.007335f, -0.000702f, -0.006036f, -0.000285f, -0.002775f, -0.002373f, 0.003043f, -0.003468f, -0.000374f, 0.004956f, -0.002625f, 0.005910f, 0.007135f, 0.000525f, 0.009651f, -0.004942f, -0.000353f, 0.004632f, -0.001697f, 0.003128f, 0.004373f, 0.002383f, -0.005113f, 0.002012f, 0.002304f, 0.001646f, 0.000285f, -0.004245f, 0.005619f, -0.001513f, 0.002671f, -0.000918f, -0.001197f, 0.000367f, -0.005903f, -0.000473f, -0.004593f, -0.002116f, -0.000230f, -0.000783f, -0.000186f, -0.000441f, -0.002484f, 0.002935f, 0.000310f, 0.000833f, 0.000173f, 0.001646f, - -0.001028f, 0.002077f, -0.000185f, 0.000895f, -0.000371f, -0.000879f, 0.001127f, 0.000132f, -0.000380f, -0.000006f, 0.001604f, 0.000372f, -0.000323f, 0.001033f, 0.000493f, -0.000189f, 0.026367f, -0.007320f, 0.002632f, -0.005630f, -0.000368f, -0.002296f, 0.003126f, 0.002136f, 0.009107f, 0.002863f, 0.001676f, 0.003582f, -0.002079f, -0.018059f, -0.017273f, -0.005336f, 0.002422f, 0.005410f, -0.004308f, 0.001082f, -0.005548f, -0.001924f, 0.000384f, 0.003168f, -0.007607f, -0.008302f, -0.002382f, -0.000447f, 0.004625f, 0.001577f, -0.001787f, -0.005969f, 0.001167f, -0.003249f, 0.000268f, 0.004328f, -0.006048f, 0.003039f, 0.005557f, -0.004178f, -0.011184f, -0.002858f, 0.004197f, -0.000585f, 0.003426f, -0.000465f, 0.002979f, -0.000438f, 0.003264f, 0.000703f, -0.010432f, 0.002159f, 0.004403f, -0.001577f, 0.003015f, 0.000581f, -0.000514f, -0.001999f, 0.000202f, -0.006115f, -0.000457f, -0.001615f, -0.007734f, -0.001233f, -0.000150f, 0.007042f, -0.006783f, 0.011527f, 0.013402f, 0.010559f, -0.004442f, -0.002037f, -0.002320f, 0.005164f, -0.001830f, -0.002784f, 0.003272f, -0.007447f, -0.006752f, 0.000926f, - 0.006174f, -0.000101f, -0.002977f, -0.006650f, -0.003878f, -0.005049f, -0.002608f, -0.004652f, 0.001874f, -0.002750f, -0.000656f, -0.002890f, -0.001460f, 0.000255f, 0.001687f, 0.000225f, 0.001733f, -0.001005f, 0.000229f, 0.001381f, 0.000784f, 0.001109f, 0.001140f, 0.000697f, -0.001139f, 0.001385f, -0.024788f, -0.000160f, -0.003823f, 0.001713f, -0.000858f, -0.012831f, -0.002458f, -0.002706f, 0.004007f, 0.006241f, -0.008597f, 0.006867f, -0.002194f, 0.004733f, 0.004741f, -0.002578f, 0.010312f, 0.000633f, 0.000448f, -0.001788f, 0.001782f, -0.002558f, 0.001893f, -0.002874f, 0.000372f, -0.006737f, 0.000711f, 0.007441f, -0.000015f, 0.003139f, 0.007814f, -0.007691f, -0.008131f, 0.003396f, -0.003704f, 0.006274f, -0.006356f, -0.001903f, -0.013269f, -0.010204f, -0.008876f, 0.003876f, 0.001118f, 0.004722f, -0.004838f, -0.003415f, -0.001027f, 0.008327f, -0.009226f, 0.003812f, 0.001576f, 0.000698f, 0.004634f, -0.003196f, -0.004246f, -0.005521f, 0.003349f, 0.001815f, -0.008172f, -0.008953f, -0.010466f, -0.000287f, -0.002278f, 0.003416f, -0.000513f, -0.001952f, 0.000937f, 0.001422f, 0.004625f, -0.012447f, - 0.001500f, 0.007119f, 0.010489f, 0.010837f, 0.008893f, -0.001554f, -0.006638f, 0.009717f, 0.002913f, 0.001904f, -0.004890f, 0.002824f, 0.001952f, 0.000320f, -0.001252f, -0.002843f, -0.000477f, 0.003341f, -0.002617f, -0.004213f, -0.001789f, -0.001798f, 0.000657f, -0.000328f, -0.001091f, 0.002918f, 0.000170f, 0.003719f, -0.000405f, 0.001091f, 0.002407f, 0.002349f, 0.001744f, 0.001341f, -0.001538f, -0.001601f, -0.000597f, 0.001494f, -0.000354f, 0.001460f, -0.001075f, 0.002532f, 0.002025f, -0.002144f, 0.000057f, 0.000206f, -0.003632f, 0.002722f, -0.014674f, 0.008792f, -0.007870f, 0.010515f, 0.013750f, 0.008500f, -0.000348f, 0.003945f, 0.000755f, 0.011228f, -0.006425f, -0.006449f, 0.003080f, -0.001931f, 0.004485f, 0.008598f, -0.012754f, 0.003804f, 0.011082f, 0.005128f, -0.001011f, -0.000283f, 0.001171f, -0.005432f, -0.000279f, -0.005142f, -0.007105f, -0.001993f, 0.010487f, -0.004199f, 0.004766f, -0.003893f, -0.006726f, 0.012607f, -0.011355f, 0.008402f, 0.009195f, 0.001671f, 0.005755f, -0.008452f, -0.002464f, -0.003461f, -0.002813f, 0.005778f, 0.001599f, -0.009075f, 0.001242f, -0.001048f, - 0.001479f, -0.002106f, 0.002994f, 0.002885f, 0.010451f, -0.011341f, 0.005162f, 0.004053f, -0.001336f, 0.004025f, 0.000965f, 0.006371f, 0.005924f, 0.003702f, -0.003819f, 0.005038f, 0.009012f, -0.000421f, 0.005191f, -0.004095f, 0.010723f, 0.011104f, 0.012176f, -0.003753f, -0.008902f, 0.002613f, -0.001432f, 0.004233f, 0.002969f, -0.000237f, -0.000881f, -0.012608f, -0.003474f, -0.003070f, -0.001209f, -0.002736f, -0.003954f, 0.004076f, 0.001407f, 0.001158f, 0.004771f, -0.000486f, 0.004826f, 0.003004f, 0.001405f, -0.000897f, 0.000638f, -0.001296f, -0.002355f, 0.001308f, 0.000143f, 0.002262f, -0.000975f, 0.000401f, -0.000402f, -0.001841f, 0.002515f, -0.000294f, -0.002607f, 0.000776f, 0.001989f, 0.000071f, -0.003323f, 0.000577f, -0.001669f, 0.004043f, 0.002854f, 0.002896f, -0.000595f, 0.000763f, 0.002167f, 0.000057f, 0.000993f, 0.001979f, 0.000990f, 0.020285f, -0.001885f, -0.006361f, 0.019292f, -0.007647f, 0.008654f, -0.004659f, -0.018475f, 0.003279f, -0.005329f, 0.000573f, 0.022103f, -0.008576f, -0.010493f, 0.000842f, 0.011611f, -0.018717f, -0.006962f, 0.014034f, -0.004952f, 0.004533f, - 0.006621f, -0.005010f, 0.006024f, -0.003916f, -0.006498f, 0.001305f, -0.001842f, -0.002273f, -0.002415f, 0.007827f, -0.006286f, 0.015240f, 0.003783f, 0.000334f, -0.008753f, -0.002585f, 0.009300f, -0.010682f, 0.002260f, 0.003713f, -0.001684f, -0.014896f, 0.010182f, 0.002724f, 0.002493f, 0.001336f, -0.002070f, 0.007709f, -0.004583f, 0.010536f, 0.005973f, -0.004072f, -0.018184f, 0.008103f, 0.004859f, -0.000431f, -0.005161f, 0.004410f, 0.011714f, 0.011935f, -0.001320f, 0.007071f, -0.010726f, 0.007810f, -0.001911f, -0.003670f, 0.004621f, 0.009243f, -0.006486f, 0.009151f, 0.001620f, -0.003826f, -0.003236f, 0.007473f, -0.006245f, 0.017703f, -0.009108f, 0.007349f, -0.006125f, 0.001624f, -0.005475f, 0.007107f, -0.006356f, 0.000354f, 0.004012f, -0.001185f, 0.000755f, -0.005418f, -0.001879f, -0.000708f, 0.000012f, 0.001535f, -0.002392f, 0.003114f, -0.000324f, -0.002091f, 0.003106f, -0.006217f, -0.006341f, -0.003560f, 0.000089f, -0.000568f, -0.001283f, 0.000234f, -0.004330f, 0.005334f, 0.000324f, -0.000292f, 0.003684f, -0.002979f, -0.000630f, 0.004229f, 0.001777f, 0.001523f, 0.006542f, 0.005844f, - 0.018883f, 0.002334f, -0.004992f, -0.024558f, 0.007358f, 0.013647f, 0.008098f, 0.005225f, -0.002232f, 0.006854f, 0.026351f, -0.003408f, 0.012086f, 0.001016f, 0.006687f, 0.002429f, 0.000318f, 0.005134f, -0.002386f, -0.011518f, -0.003333f, -0.008611f, -0.002356f, -0.012070f, 0.004124f, 0.000162f, 0.013755f, 0.002541f, -0.006635f, 0.004413f, -0.002134f, -0.003590f, 0.008760f, 0.003015f, 0.006508f, 0.003706f, -0.004010f, -0.015714f, 0.000804f, 0.008844f, -0.000772f, -0.003164f, 0.003898f, -0.008390f, -0.003643f, -0.014651f, -0.018071f, 0.009102f, 0.010186f, 0.007892f, -0.002684f, -0.003124f, -0.000014f, -0.000483f, 0.005140f, -0.001093f, 0.005644f, 0.005011f, -0.000318f, 0.005171f, -0.005122f, 0.001264f, -0.002770f, 0.002997f, 0.003751f, 0.016657f, -0.000093f, 0.013599f, -0.005311f, -0.014341f, -0.001421f, -0.002087f, -0.005520f, 0.011119f, -0.001034f, 0.004499f, 0.000922f, -0.008226f, -0.009814f, -0.003584f, -0.002172f, 0.000923f, 0.009842f, 0.003116f, 0.000948f, 0.004059f, 0.006565f, -0.002974f, 0.004926f, -0.000746f, 0.004179f, 0.002542f, 0.000981f, 0.005798f, -0.000739f, 0.003326f, - 0.001894f, 0.001646f, -0.001177f, -0.001723f, -0.003561f, -0.001728f, 0.003408f, 0.005229f, -0.001415f, 0.000316f, -0.003109f, -0.000591f, 0.000134f, -0.003160f, 0.002069f, -0.005811f, 0.000148f, -0.000438f, -0.000085f, 0.003469f, 0.003725f, -0.000575f, 0.008774f, -0.021633f, -0.000713f, 0.022017f, 0.030281f, -0.012595f, 0.003401f, 0.004793f, -0.010520f, -0.006156f, 0.001192f, -0.008796f, -0.009143f, 0.021175f, 0.002968f, -0.014088f, -0.002237f, -0.009207f, -0.005223f, 0.013756f, -0.004328f, -0.006149f, 0.012522f, 0.007692f, 0.012653f, -0.005413f, 0.002614f, 0.012295f, 0.000557f, -0.007457f, 0.003394f, -0.001123f, 0.001555f, -0.015679f, -0.010636f, 0.004616f, -0.001095f, 0.003663f, -0.014372f, 0.006696f, 0.005280f, 0.003303f, -0.025346f, -0.014915f, -0.006411f, -0.003237f, 0.003624f, -0.011160f, -0.007401f, 0.002415f, 0.019459f, 0.012737f, 0.006905f, -0.003519f, -0.002114f, -0.007428f, 0.005635f, -0.002209f, -0.014363f, -0.011069f, -0.001310f, -0.000302f, 0.020388f, 0.011203f, -0.010068f, -0.011352f, 0.014103f, 0.002734f, -0.008472f, 0.000004f, 0.012659f, 0.004712f, 0.000397f, -0.016532f, - 0.018139f, -0.006459f, 0.012101f, 0.015759f, 0.016694f, 0.001394f, -0.006131f, -0.005086f, 0.008589f, 0.009734f, -0.008563f, 0.006819f, 0.009334f, 0.006494f, -0.002818f, -0.002293f, 0.001343f, 0.005569f, 0.004656f, -0.005004f, -0.007595f, -0.007259f, 0.003568f, -0.003531f, -0.002238f, -0.005069f, -0.000967f, -0.003661f, 0.001865f, -0.003039f, 0.002220f, 0.001642f, -0.000555f, -0.000092f, 0.004109f, -0.003078f, -0.006047f, -0.001198f, 0.005608f, -0.003467f, -0.002982f, -0.003288f, -0.002247f, -0.000506f, -0.000095f, -0.003867f, -0.000085f, -0.002847f, -0.001303f, 0.000922f, 0.003761f, -0.002571f, -0.000081f, -0.000916f, -0.001631f, 0.003339f, 0.004070f, -0.005957f, 0.008885f, -0.011556f, 0.013007f, -0.001291f, -0.003630f, 0.006874f, -0.013307f, 0.004423f, 0.007116f, 0.001356f, 0.004947f, 0.006147f, -0.003660f, 0.014500f, -0.006950f, -0.024994f, -0.014898f, -0.003368f, 0.000895f, -0.005368f, -0.010720f, -0.011729f, -0.007977f, 0.024368f, -0.006868f, -0.002023f, 0.003453f, -0.005177f, 0.002843f, 0.019974f, -0.009732f, 0.009432f, -0.006335f, -0.012994f, 0.011483f, 0.008255f, 0.005258f, 0.017891f, - 0.000331f, 0.008377f, -0.000858f, 0.002054f, -0.000775f, -0.006001f, 0.003893f, -0.001462f, 0.012958f, 0.002511f, -0.009045f, -0.002402f, -0.002658f, -0.000708f, -0.014699f, 0.005789f, -0.014492f, 0.003415f, 0.019343f, -0.012749f, -0.024330f, 0.005541f, 0.003299f, 0.011037f, -0.004983f, -0.000316f, 0.011292f, -0.007095f, 0.005503f, 0.008283f, 0.002288f, -0.005180f, 0.011150f, 0.002330f, 0.014337f, 0.002969f, -0.008999f, -0.008559f, 0.009297f, 0.015646f, 0.005476f, -0.000233f, -0.012997f, -0.002702f, -0.004217f, 0.009248f, 0.002310f, -0.017765f, 0.002732f, 0.004609f, 0.001248f, 0.001709f, 0.006825f, -0.003189f, 0.002854f, -0.004905f, 0.002982f, 0.002685f, 0.002176f, 0.003544f, 0.001541f, 0.002319f, 0.002153f, -0.004163f, 0.001296f, -0.001320f, -0.000679f, 0.003935f, 0.001648f, 0.002162f, 0.004485f, -0.001442f, -0.014219f, 0.001311f, -0.000978f, 0.000987f, -0.001314f, -0.000927f, 0.003937f, 0.002552f, -0.002307f, -0.002736f, -0.019322f, 0.044613f, -0.010411f, 0.020045f, 0.001892f, 0.008369f, 0.006060f, -0.000116f, -0.024994f, 0.021276f, -0.031161f, 0.010085f, 0.007485f, 0.028091f, - -0.013162f, 0.012655f, -0.019822f, 0.012944f, -0.006408f, -0.021363f, -0.010226f, 0.005019f, 0.005477f, 0.007791f, 0.003977f, 0.011208f, 0.007355f, 0.016995f, -0.005267f, -0.013944f, -0.012547f, 0.004875f, -0.000146f, -0.006898f, 0.011388f, 0.004951f, -0.002330f, 0.006769f, 0.014096f, -0.001319f, 0.003651f, -0.002127f, 0.006972f, 0.004078f, -0.018037f, -0.007871f, -0.023634f, -0.005467f, -0.004010f, -0.000573f, 0.011352f, 0.010073f, 0.001508f, -0.006556f, -0.000125f, -0.003585f, -0.005609f, 0.003126f, 0.033264f, 0.002960f, -0.000723f, 0.010539f, -0.000791f, 0.012080f, -0.005194f, 0.000119f, -0.007891f, 0.033328f, 0.007875f, -0.013758f, -0.015689f, -0.010532f, 0.001316f, -0.000747f, -0.021329f, 0.001157f, 0.004411f, 0.001429f, 0.023295f, -0.006075f, 0.003435f, -0.014469f, -0.004723f, -0.039262f, -0.006775f, 0.002009f, 0.001509f, -0.015101f, 0.003954f, -0.007276f, 0.004932f, 0.002258f, -0.007122f, -0.000903f, 0.005169f, 0.007943f, 0.014827f, 0.003879f, -0.005378f, -0.005094f, -0.011905f, -0.004654f, 0.001134f, 0.001968f, -0.006839f, -0.002643f, 0.006478f, 0.002273f, -0.001762f, -0.001665f, - -0.005060f, -0.004766f, -0.002281f, 0.001339f, -0.009902f, -0.007041f, 0.001883f, 0.003953f, 0.000068f, -0.002578f, 0.002491f, 0.008119f, 0.001393f, 0.000636f, -0.000653f, -0.003582f, 0.000281f, -0.011633f, 0.004948f, 0.002690f, 0.023343f, 0.002026f, 0.019434f, 0.011799f, 0.019058f, 0.006396f, -0.019269f, 0.018916f, -0.012328f, 0.032720f, -0.021132f, -0.006244f, -0.029233f, -0.006165f, -0.003094f, 0.013013f, -0.013594f, 0.019090f, 0.015395f, -0.009256f, 0.001092f, 0.021826f, 0.030716f, -0.009776f, 0.000782f, -0.004005f, 0.009632f, 0.000150f, -0.003586f, 0.004457f, 0.008422f, -0.014634f, 0.011042f, 0.002101f, 0.012659f, 0.004832f, 0.001936f, -0.024994f, -0.004035f, 0.029004f, -0.003468f, 0.009707f, 0.022237f, 0.006417f, -0.001725f, -0.007761f, -0.010240f, -0.006134f, 0.001020f, -0.009534f, -0.005718f, 0.016812f, 0.015546f, 0.004878f, 0.025816f, 0.017150f, -0.005403f, -0.002575f, 0.003538f, 0.005983f, -0.007886f, -0.020577f, 0.026847f, 0.011818f, -0.005505f, 0.024566f, 0.025693f, 0.028628f, 0.012421f, 0.004318f, -0.010377f, 0.000723f, -0.014523f, -0.011654f, -0.007412f, -0.028717f, - 0.011537f, -0.003641f, 0.024497f, -0.005811f, -0.019242f, -0.003625f, 0.001849f, -0.002856f, -0.025668f, 0.004105f, 0.006851f, 0.011690f, 0.012377f, -0.008672f, 0.003984f, -0.005919f, -0.016692f, 0.003287f, 0.006466f, -0.001277f, -0.004935f, -0.012592f, 0.013214f, 0.007471f, -0.011777f, -0.013359f, -0.007486f, 0.007682f, -0.001360f, -0.003787f, 0.003575f, -0.005929f, 0.003707f, -0.001512f, 0.002287f, 0.005795f, -0.008517f, -0.003954f, 0.003822f, -0.001795f, 0.000159f, 0.017140f, 0.005612f, 0.001167f, -0.001154f, 0.004093f, -0.005685f, -0.003208f, -0.000544f, 0.005633f, -0.003537f, 0.025648f, 0.001586f, 0.004754f, -0.003764f, 0.002197f, -0.003206f, -0.038655f, 0.004563f, -0.000287f, -0.006893f, -0.002800f, -0.018971f, 0.021938f, 0.022476f, 0.025145f, -0.040587f, 0.013220f, 0.008474f, 0.001115f, 0.040162f, 0.016560f, -0.019881f, -0.002225f, 0.039650f, 0.004777f, 0.007126f, 0.008185f, -0.011570f, 0.006720f, 0.008222f, 0.024693f, 0.012537f, -0.018684f, -0.030862f, 0.011815f, 0.007390f, -0.015466f, -0.002873f, 0.001627f, -0.018954f, 0.002291f, 0.023265f, 0.010012f, 0.013065f, 0.018982f, - 0.030590f, 0.003019f, 0.026949f, 0.005448f, -0.010625f, -0.001419f, -0.015864f, -0.008194f, 0.006715f, 0.009247f, 0.007021f, 0.013662f, -0.019088f, -0.008506f, 0.034327f, -0.002390f, -0.007319f, -0.019007f, 0.016303f, 0.014880f, 0.005147f, 0.006308f, -0.000223f, 0.009606f, -0.014863f, 0.024636f, -0.012294f, -0.014449f, -0.011864f, -0.008021f, 0.033227f, 0.009108f, 0.006950f, -0.035954f, -0.019821f, -0.029528f, 0.002196f, -0.003019f, -0.002908f, -0.028003f, -0.039093f, -0.000972f, 0.017605f, -0.009508f, 0.005034f, -0.002421f, -0.002658f, 0.009972f, -0.013605f, -0.005685f, -0.006194f, 0.012014f, 0.001987f, -0.008574f, -0.000123f, -0.001258f, -0.000207f, -0.003990f, -0.008191f, 0.002192f, 0.013094f, -0.006219f, -0.004288f, -0.008235f, -0.003808f, -0.005721f, -0.002875f, 0.005885f, -0.001923f, 0.009215f, -0.002982f, -0.001797f, -0.005186f, -0.003679f, 0.013762f, -0.001250f, -0.000922f, -0.006336f, -0.001042f, 0.008308f, 0.002229f, -0.009825f, 0.002263f, 0.000952f, 0.002909f, 0.036219f, 0.042601f, -0.010864f, 0.011992f, -0.003068f, -0.012415f, 0.002502f, -0.028485f, -0.017576f, -0.001225f, -0.005698f, - 0.057120f, -0.025646f, 0.007339f, -0.036229f, -0.005299f, 0.022188f, -0.009275f, -0.020143f, -0.021155f, -0.007698f, 0.008764f, 0.011332f, -0.001390f, -0.001763f, -0.023783f, 0.005671f, 0.016697f, 0.008474f, 0.010248f, 0.003107f, 0.003756f, -0.013842f, -0.004523f, 0.009382f, 0.003449f, 0.000038f, 0.001082f, -0.016708f, 0.007501f, -0.017586f, -0.002832f, -0.000404f, 0.005163f, -0.019534f, -0.001989f, 0.009666f, 0.014092f, -0.022267f, -0.011682f, 0.039705f, -0.015205f, -0.031196f, 0.026295f, -0.025371f, -0.007989f, -0.011194f, -0.004539f, -0.019466f, -0.013515f, -0.004046f, -0.019641f, -0.028019f, 0.045294f, 0.025031f, 0.020201f, 0.013859f, -0.017559f, -0.006820f, -0.011836f, 0.012774f, -0.021282f, 0.015151f, -0.011346f, 0.006546f, 0.015193f, 0.009945f, 0.003101f, -0.028858f, 0.028358f, -0.034485f, -0.009038f, -0.033431f, -0.013571f, 0.022098f, -0.001259f, 0.012560f, 0.025361f, 0.008108f, -0.002551f, 0.004987f, -0.008829f, 0.000542f, -0.002677f, -0.009533f, 0.011468f, -0.003934f, -0.005278f, 0.013135f, 0.006963f, -0.003429f, 0.000919f, 0.000645f, 0.002108f, -0.005859f, 0.005728f, 0.001835f, - 0.003100f, -0.007021f, 0.004847f, -0.003241f, 0.012439f, -0.005522f, 0.008800f, -0.002622f, -0.004305f, 0.013187f, -0.008773f, -0.003797f, -0.007846f, 0.005332f, 0.013041f, 0.006029f, -0.003685f, 0.006179f, -0.005222f, 0.006311f, 0.009086f, -0.009804f, -0.023649f, -0.001513f, 0.060113f, -0.026521f, 0.026301f, -0.053191f, 0.015002f, -0.033713f, -0.006076f, 0.019232f, -0.001394f, 0.012423f, 0.020156f, 0.016111f, -0.023023f, 0.017657f, 0.003893f, 0.013117f, -0.004707f, 0.018097f, 0.016852f, -0.003398f, 0.003785f, 0.010972f, 0.012417f, -0.016935f, -0.005576f, -0.024810f, -0.002777f, 0.022307f, 0.000920f, -0.010268f, 0.002605f, 0.008387f, 0.001877f, -0.008897f, -0.017520f, 0.004756f, -0.011737f, 0.011757f, -0.011068f, 0.042765f, -0.003654f, -0.022939f, -0.025775f, 0.006091f, -0.013998f, 0.013600f, -0.028945f, -0.022723f, -0.029410f, 0.007046f, -0.024785f, -0.005794f, -0.035718f, 0.025975f, 0.005630f, 0.017541f, 0.011040f, -0.038702f, 0.003324f, -0.003282f, -0.014230f, -0.021544f, -0.005609f, -0.018318f, -0.023012f, -0.012689f, 0.011162f, 0.015580f, 0.022729f, -0.012719f, 0.003471f, 0.009890f, - -0.032338f, 0.015191f, -0.022047f, -0.001851f, 0.018779f, 0.008033f, 0.007794f, 0.003613f, 0.038217f, -0.021511f, -0.007622f, -0.008072f, 0.010282f, -0.032129f, 0.002912f, -0.002441f, 0.000030f, 0.021160f, 0.012531f, 0.010557f, 0.004100f, -0.007694f, 0.001628f, -0.003726f, 0.015606f, -0.005706f, -0.001620f, -0.008419f, 0.017652f, 0.007114f, -0.005722f, 0.004928f, -0.014976f, 0.010730f, 0.005731f, 0.008480f, 0.001692f, -0.002884f, 0.010061f, 0.017815f, 0.006363f, -0.008391f, -0.011346f, -0.004602f, 0.004831f, -0.011749f, -0.002357f, -0.017961f, -0.012864f, -0.006960f, 0.000362f, -0.009794f, 0.007667f, -0.007677f, 0.018181f, -0.013842f, 0.000093f, 0.000113f, -0.049970f, -0.014517f, 0.055882f, 0.049444f, 0.027737f, -0.024049f, 0.024437f, 0.036967f, -0.024615f, 0.032651f, -0.026489f, 0.030145f, 0.007024f, -0.002091f, 0.009855f, -0.000713f, 0.015797f, -0.023932f, -0.006892f, -0.010829f, 0.012004f, -0.022690f, -0.020445f, 0.031772f, -0.003180f, -0.006689f, 0.002893f, -0.030813f, -0.000800f, 0.049431f, 0.026866f, 0.005578f, -0.000589f, 0.010496f, 0.046696f, 0.019935f, 0.000593f, 0.007846f, - -0.013079f, -0.005604f, -0.011277f, 0.020073f, -0.010555f, 0.013395f, 0.002407f, 0.023987f, -0.028598f, -0.000635f, -0.001844f, 0.000698f, -0.008159f, 0.013374f, 0.021444f, -0.005119f, -0.006275f, 0.021745f, 0.002362f, 0.002669f, 0.049209f, 0.007732f, 0.000533f, -0.022641f, 0.009844f, -0.016848f, 0.022712f, -0.026456f, -0.023556f, 0.003559f, -0.023208f, -0.024686f, -0.037797f, 0.010062f, -0.012712f, 0.019403f, -0.006528f, 0.010938f, -0.055143f, 0.011183f, -0.018749f, -0.033385f, 0.017231f, 0.023009f, 0.011914f, 0.007105f, 0.004036f, 0.009640f, 0.014558f, -0.007140f, -0.008664f, -0.010147f, -0.000799f, -0.011126f, 0.006804f, 0.001439f, -0.016034f, -0.010999f, 0.008969f, 0.005408f, 0.000578f, 0.016234f, -0.005825f, -0.001715f, -0.013083f, -0.002758f, -0.000052f, 0.006721f, 0.004124f, -0.010889f, -0.006792f, -0.003020f, -0.013252f, -0.002489f, -0.012454f, 0.004946f, 0.003203f, 0.014622f, 0.009841f, -0.001043f, -0.006058f, -0.000012f, -0.000039f, -0.004180f, -0.001042f, -0.015291f, -0.002859f, 0.006258f, 0.006650f, 0.001934f, -0.002718f, 0.014729f, 0.002314f, 0.041847f, -0.063742f, 0.027114f, - 0.028246f, -0.045234f, -0.004389f, -0.038720f, -0.012615f, -0.034732f, -0.015582f, 0.040301f, -0.013462f, -0.002663f, -0.027911f, -0.005193f, 0.006704f, -0.041459f, -0.001391f, 0.026929f, -0.051294f, 0.002164f, -0.034952f, -0.018721f, 0.000934f, 0.004068f, -0.023075f, -0.018442f, -0.019301f, -0.005353f, -0.016565f, -0.000804f, 0.009160f, -0.004788f, 0.013287f, -0.024857f, -0.015814f, 0.033860f, -0.015500f, 0.018467f, -0.019774f, 0.019203f, 0.017521f, 0.003240f, 0.004825f, 0.017909f, 0.001038f, 0.025401f, 0.031983f, -0.005703f, 0.004906f, 0.047510f, 0.003003f, 0.024557f, -0.001509f, -0.018500f, -0.037035f, 0.006549f, 0.026049f, -0.040782f, 0.000733f, -0.023857f, -0.012501f, -0.052968f, 0.023208f, 0.035451f, -0.009001f, 0.017239f, -0.008442f, 0.038530f, 0.042490f, -0.003095f, -0.041712f, -0.040399f, 0.058236f, -0.044909f, 0.017115f, 0.007013f, 0.006208f, 0.043748f, -0.018322f, 0.071080f, -0.001009f, -0.015735f, -0.018273f, -0.012451f, 0.011487f, -0.004120f, -0.005232f, -0.000112f, 0.018445f, -0.004220f, -0.011330f, 0.015644f, -0.005359f, 0.008053f, -0.013910f, -0.008162f, 0.013542f, 0.001363f, - 0.020156f, -0.006266f, 0.008670f, -0.014379f, -0.004048f, -0.019799f, 0.004322f, 0.008547f, 0.010144f, 0.002282f, 0.010415f, 0.001325f, -0.002993f, 0.011260f, -0.016909f, 0.011639f, -0.014321f, -0.004811f, 0.008928f, -0.017421f, -0.004347f, -0.009845f, -0.029689f, -0.007636f, 0.002098f, 0.011138f, -0.014434f, -0.007233f, -0.012681f, -0.003814f, 0.003257f, 0.022765f, 0.011749f, 0.069519f, 0.078340f, -0.004609f, -0.059067f, 0.058369f, -0.064580f, 0.009124f, 0.027392f, 0.006812f, -0.006913f, -0.029773f, 0.033554f, -0.014994f, -0.012029f, -0.030315f, -0.017658f, -0.009429f, -0.037889f, -0.020807f, -0.016943f, -0.009437f, -0.006239f, 0.026345f, -0.000402f, 0.022780f, 0.000150f, -0.009784f, -0.033202f, -0.036303f, -0.009205f, -0.001278f, -0.000515f, -0.005468f, -0.013619f, -0.015651f, 0.017361f, 0.041924f, -0.022783f, 0.014479f, -0.014241f, -0.014579f, 0.016594f, -0.016155f, -0.026314f, 0.058844f, -0.006536f, 0.005473f, 0.002838f, -0.032771f, -0.007272f, -0.006816f, 0.016598f, -0.042351f, -0.018845f, 0.044959f, 0.007159f, -0.019000f, 0.024331f, 0.045697f, -0.026009f, -0.032040f, 0.016625f, -0.027145f, - 0.000373f, -0.050879f, 0.016385f, 0.043433f, -0.004508f, 0.022700f, 0.013124f, 0.007678f, 0.049640f, 0.015704f, -0.000301f, 0.028769f, -0.004244f, -0.003872f, 0.017461f, 0.018907f, -0.072190f, 0.006699f, -0.031447f, 0.025608f, -0.001268f, 0.001092f, 0.017841f, -0.005312f, -0.006983f, -0.009368f, 0.009562f, 0.003802f, -0.007152f, 0.009754f, -0.010419f, 0.001173f, -0.005580f, -0.013787f, 0.006295f, -0.006836f, 0.015478f, 0.008707f, -0.000360f, 0.000211f, 0.004175f, -0.003993f, 0.009119f, 0.004670f, 0.002779f, 0.003918f, -0.002720f, 0.003567f, -0.006343f, -0.011931f, -0.006745f, -0.002980f, 0.001551f, -0.015561f, 0.012681f, 0.008762f, 0.000520f, 0.004840f, -0.010680f, 0.014907f, 0.001675f, -0.008583f, 0.005228f, 0.006535f, -0.018968f, -0.003723f, 0.001760f, -0.001335f, 0.000136f, 0.003617f, -0.003216f, 0.002950f, -0.094753f, -0.066198f, 0.028426f, -0.027721f, -0.026090f, -0.080516f, -0.022829f, 0.017869f, 0.007276f, -0.015396f, -0.044517f, -0.000003f, 0.023441f, -0.001094f, 0.003688f, 0.024264f, 0.042644f, -0.035903f, 0.096339f, -0.024066f, -0.031210f, -0.009099f, -0.004795f, 0.001014f, - -0.037311f, 0.001446f, -0.006084f, 0.020808f, -0.012211f, 0.029210f, -0.011266f, -0.023784f, 0.010578f, 0.012383f, -0.021171f, 0.024329f, -0.072350f, 0.001159f, -0.005250f, 0.029689f, 0.035783f, -0.024920f, 0.033408f, -0.012024f, 0.009973f, -0.015118f, -0.004677f, -0.009077f, 0.026848f, -0.002943f, 0.035163f, 0.054590f, -0.046432f, -0.012575f, 0.025937f, -0.031110f, 0.019755f, -0.035420f, -0.019280f, -0.017350f, -0.020504f, -0.036172f, -0.018268f, 0.017679f, 0.014549f, 0.028735f, 0.037130f, 0.027122f, -0.043735f, 0.006090f, 0.008757f, 0.011093f, 0.009508f, 0.028862f, -0.013305f, -0.029408f, 0.017701f, -0.007255f, -0.022861f, 0.005107f, -0.039561f, -0.016065f, -0.034392f, 0.003727f, 0.021142f, -0.012202f, 0.020340f, 0.011147f, -0.000649f, -0.007069f, -0.000045f, -0.030622f, -0.011145f, 0.010828f, 0.005724f, 0.007309f, 0.002690f, 0.004000f, 0.003316f, 0.010178f, 0.003155f, -0.020413f, -0.002405f, 0.003640f, -0.001589f, 0.005891f, -0.009066f, -0.008278f, -0.019929f, 0.005733f, 0.018590f, -0.020058f, -0.013935f, 0.011019f, -0.004704f, -0.020484f, 0.014291f, -0.009749f, -0.007906f, 0.012975f, - -0.000467f, -0.003481f, -0.005938f, -0.008868f, -0.011951f, -0.012711f, -0.002945f, -0.010761f, -0.006235f, -0.005347f, 0.009443f, -0.000221f, 0.000098f, 0.014259f, -0.018865f, -0.063980f, 0.049956f, -0.082171f, 0.059370f, -0.007451f, -0.036202f, -0.030800f, -0.034428f, -0.023066f, -0.017684f, 0.002686f, 0.043807f, -0.002576f, -0.034904f, 0.039019f, 0.055040f, -0.082059f, -0.021146f, 0.006654f, -0.005855f, -0.012077f, -0.003141f, -0.010653f, -0.013723f, -0.023263f, 0.031793f, -0.009952f, -0.021998f, -0.038632f, -0.038191f, 0.039469f, 0.011102f, -0.006259f, -0.003233f, 0.000842f, -0.007606f, -0.009725f, 0.009568f, -0.033925f, 0.019971f, 0.040290f, 0.030556f, 0.019172f, 0.038790f, 0.044659f, -0.024165f, 0.010110f, -0.035249f, 0.040019f, -0.021402f, -0.005725f, 0.000852f, -0.056560f, 0.019669f, 0.047884f, 0.009109f, -0.018683f, -0.014683f, 0.062363f, -0.023748f, -0.025942f, 0.018389f, -0.062224f, -0.006265f, -0.030534f, 0.002442f, -0.060847f, 0.026801f, 0.011337f, 0.026294f, -0.099157f, -0.084483f, 0.014619f, -0.028799f, -0.019447f, -0.011280f, -0.066228f, 0.023244f, -0.038916f, -0.041976f, 0.033102f, - -0.027877f, -0.016546f, 0.015005f, -0.006436f, -0.011914f, -0.001850f, -0.002475f, 0.014540f, -0.031808f, -0.015018f, -0.030644f, 0.000601f, -0.012812f, 0.006911f, -0.003391f, -0.024624f, -0.009137f, 0.009361f, -0.000460f, 0.002309f, 0.007897f, -0.027047f, 0.004698f, -0.034411f, 0.017258f, 0.005751f, -0.024126f, 0.008512f, -0.028917f, -0.006057f, -0.009823f, 0.002687f, 0.017168f, -0.011475f, 0.017728f, -0.008412f, 0.029337f, -0.012481f, 0.018892f, -0.009488f, -0.001900f, -0.000543f, -0.002191f, 0.006058f, -0.001673f, 0.000320f, -0.001067f, -0.006071f, 0.001299f, 0.010396f, -0.001577f, -0.004066f, -0.002267f, 0.003494f, -0.002324f, -0.003549f, -0.001439f, -0.001576f, 0.002128f, -0.001591f, 0.000036f, -0.001422f, -0.002178f, -0.001338f, 0.003197f, 0.000068f, -0.003407f, -0.000011f, 0.001033f, -0.004548f, 0.004061f, 0.071937f, -0.103917f, 0.102506f, 0.028966f, -0.005097f, 0.006972f, -0.076733f, 0.013902f, 0.033740f, -0.014845f, 0.087115f, -0.026897f, 0.036806f, -0.032852f, 0.096143f, -0.005143f, -0.014698f, -0.038980f, -0.015200f, 0.012635f, -0.011375f, 0.037990f, 0.029239f, -0.012021f, 0.001128f, - -0.040063f, 0.013148f, 0.037589f, 0.038233f, -0.044945f, 0.016624f, -0.010232f, 0.040940f, -0.013184f, 0.026099f, -0.027323f, -0.021593f, -0.059438f, 0.002403f, -0.038297f, -0.055544f, 0.074986f, -0.035524f, -0.008504f, -0.016127f, -0.020156f, 0.008872f, 0.004598f, 0.025617f, -0.014580f, 0.040165f, 0.002145f, 0.074121f, 0.027268f, 0.082211f, 0.069355f, -0.008605f, 0.045771f, 0.034832f, -0.014334f, 0.041249f, 0.056320f, -0.026473f, -0.059878f, 0.031551f, 0.019597f, 0.046018f, 0.022553f, -0.006186f, -0.002436f, -0.063588f, -0.007756f, -0.019804f, -0.024409f, 0.081066f, -0.011344f, -0.002433f, 0.100676f, 0.067075f, 0.035045f, 0.044311f, 0.021676f, 0.001427f, 0.009827f, 0.058009f, -0.001178f, -0.017102f, 0.015746f, 0.048519f, 0.021613f, 0.027024f, 0.012179f, 0.033130f, -0.003772f, 0.008494f, 0.010970f, 0.022775f, 0.006343f, 0.004702f, 0.002402f, 0.001305f, 0.017665f, 0.028026f, 0.010580f, 0.037512f, 0.000867f, 0.022621f, 0.021890f, 0.042497f, -0.002630f, 0.028664f, 0.024707f, 0.004329f, 0.020529f, -0.000103f, 0.003040f, -0.008771f, 0.007325f, 0.010882f, 0.004085f, 0.005013f, - -0.000359f, -0.006541f, -0.000703f, 0.009000f, -0.007392f, 0.004323f, 0.018005f, -0.005641f, 0.035140f, 0.002781f, 0.007851f, -0.003814f, -0.016729f, 0.009028f, -0.006617f, 0.010377f, 0.031562f, -0.071732f, 0.137032f, -0.018891f, -0.015457f, -0.009048f, 0.099683f, -0.061631f, 0.049938f, -0.067469f, 0.063486f, 0.012519f, -0.012509f, 0.001251f, 0.037175f, -0.016405f, 0.034675f, -0.016558f, -0.000352f, 0.069704f, 0.021487f, -0.018418f, -0.000281f, 0.017034f, 0.013766f, -0.068531f, 0.018161f, -0.025296f, -0.006159f, -0.036386f, 0.034700f, 0.032414f, 0.005172f, 0.015063f, 0.058605f, -0.020012f, -0.093161f, 0.021695f, 0.061103f, -0.024269f, -0.061224f, 0.015661f, 0.043788f, 0.014159f, 0.000107f, -0.074068f, -0.035147f, -0.044135f, 0.040879f, 0.015882f, 0.042117f, -0.089077f, 0.005737f, -0.016995f, -0.097598f, -0.026019f, 0.014455f, 0.043538f, 0.061614f, -0.033454f, 0.115012f, 0.021649f, 0.002091f, -0.024425f, -0.046281f, -0.032826f, 0.021770f, -0.054005f, 0.108456f, -0.035445f, 0.004569f, 0.063341f, -0.042107f, 0.038345f, -0.041118f, -0.024414f, 0.090025f, -0.046317f, 0.059084f, 0.053531f, - 0.019894f, 0.023932f, -0.077715f, -0.010161f, -0.003936f, -0.028089f, 0.036822f, 0.032217f, 0.013589f, 0.009204f, 0.035861f, -0.009377f, 0.014112f, -0.005195f, 0.010857f, -0.016252f, 0.012861f, -0.003572f, 0.010906f, 0.007351f, 0.002585f, -0.027501f, -0.004316f, 0.002677f, -0.009298f, -0.004122f, 0.019175f, 0.009505f, 0.031469f, -0.015187f, 0.006828f, -0.052151f, -0.042699f, -0.007249f, -0.002350f, 0.029395f, 0.023179f, -0.015587f, -0.010399f, -0.041886f, 0.000199f, 0.012955f, -0.006236f, -0.001190f, 0.010126f, -0.014000f, 0.009570f, -0.031257f, 0.002131f, -0.011298f, -0.011324f, 0.018622f, -0.080556f, 0.046167f, 0.029591f, 0.046174f, -0.018257f, -0.012978f, 0.018784f, 0.000236f, 0.005443f, 0.001822f, 0.009242f, 0.002271f, -0.012553f, 0.059680f, -0.013767f, -0.040998f, 0.017515f, -0.000996f, -0.036036f, 0.012678f, 0.008505f, 0.024671f, -0.016547f, -0.027300f, 0.029580f, -0.023596f, -0.003089f, -0.006982f, 0.024307f, -0.041607f, 0.014370f, -0.025790f, 0.021267f, -0.036650f, 0.013194f, -0.012252f, 0.006465f, 0.080525f, -0.055197f, 0.010543f, 0.017851f, -0.049829f, 0.018242f, 0.023040f, - -0.036819f, -0.007655f, -0.014014f, 0.066971f, 0.005779f, -0.077367f, 0.046489f, -0.062534f, 0.011523f, 0.032433f, -0.029891f, 0.037091f, -0.044695f, -0.036937f, 0.051038f, -0.008622f, 0.021775f, -0.076237f, 0.014431f, 0.016518f, -0.003904f, -0.011736f, -0.000490f, 0.030981f, 0.001314f, -0.101402f, 0.061592f, -0.006364f, 0.023747f, -0.026621f, -0.030864f, 0.096745f, -0.002427f, -0.061843f, 0.005509f, 0.031255f, 0.007289f, -0.094032f, 0.003498f, 0.087256f, -0.015819f, -0.040342f, 0.009709f, 0.042216f, -0.005482f, 0.000156f, -0.007274f, -0.004351f, 0.006192f, -0.015255f, -0.008766f, 0.028667f, -0.012288f, -0.000773f, -0.016704f, 0.016819f, 0.025729f, -0.004577f, -0.003685f, 0.027091f, 0.009028f, -0.018598f, -0.004270f, 0.011681f, 0.007973f, -0.015796f, 0.008639f, 0.018646f, -0.015382f, 0.004017f, 0.004835f, 0.012024f, -0.028775f, 0.001860f, 0.018323f, 0.006871f, -0.019995f, 0.001161f, 0.014454f, 0.002383f, -0.014790f, -0.010070f, 0.016202f, 0.039205f, -0.012203f, -0.198398f, -0.423307f, -0.168271f, -0.318447f, -0.388075f, 0.138854f, -0.000553f, 0.142394f, 0.538658f, 0.470555f, 0.268128f, - 0.515540f, 0.287902f, 0.033416f, 0.178789f, 0.110398f, -0.193643f, -0.136570f, -0.039551f, -0.214746f, -0.259921f, -0.085872f, -0.131157f, -0.205542f, -0.050971f, -0.008443f, -0.262005f, -0.180229f, -0.026558f, -0.158883f, -0.205990f, -0.059396f, -0.100656f, -0.224008f, -0.042321f, 0.023775f, -0.125269f, -0.095298f, 0.095947f, -0.033350f, -0.134414f, 0.029253f, 0.090373f, -0.065872f, 0.055724f, 0.197802f, -0.028115f, -0.051695f, 0.195725f, 0.104895f, -0.047881f, 0.324555f, 0.440811f, 0.274714f, 0.464765f, 0.694879f, 0.534678f, 0.508895f, 0.743240f, 0.644465f, 0.474518f, 0.582054f, 0.529168f, 0.336954f, 0.298123f, 0.160860f, -0.054461f, -0.231062f, -0.414142f, -0.588667f, -0.700718f, -0.878768f, -0.938995f, -0.990182f, -1.121921f, -1.121094f, -0.847153f, -0.866839f, -0.789403f, -0.355041f, -0.274584f, -0.267005f, 0.119558f, 0.227515f, 0.005674f, 0.237084f, 0.328666f, 0.113066f, 0.157067f, 0.308308f, 0.230596f, 0.134632f, 0.217821f, 0.269543f, 0.114987f, 0.168108f, 0.334262f, 0.199134f, 0.131334f, 0.308125f, 0.231228f, 0.093851f, 0.200477f, 0.228965f, 0.030042f, 0.118605f, 0.275397f, - 0.158232f, 0.189650f, 0.387962f, 0.364968f, 0.384597f, 0.497744f, 0.501260f, 0.402188f, 0.380469f, 0.324789f, 0.198584f, 0.143325f, 0.076552f, -0.011330f, -0.077597f, -0.211394f, -0.288994f, -0.390849f, -0.520948f, -0.580180f, -0.655585f, -0.763252f, -0.726835f, -0.652822f, -0.576501f, -0.421463f, -0.276197f, -0.146358f, -0.053780f, 0.023031f, 0.048535f, 0.059312f, 0.076451f, 0.081013f, 0.068576f, 0.073246f, 0.080931f, 0.078565f, 0.088071f, 0.113809f, 0.127776f, 0.136701f, 0.152342f, 0.157104f, 0.159309f, 0.167451f, 0.154887f, 0.133191f, 0.099813f, 0.062287f, 0.039627f, 0.011153f, -0.007331f, -0.012760f, -0.019022f, -0.027166f, -0.026654f, -0.022870f, -0.012641f, 0.001513f, 0.016367f, 0.033221f, 0.039017f, 0.042384f, 0.049451f, 0.052960f, 0.052641f, 0.055243f, 0.061005f, 0.058159f, 0.052577f, 0.058617f, 0.052196f, 0.038486f, 0.047405f, 0.048927f, 0.033212f, 0.033507f, 0.029055f, 0.007902f, 0.002252f, -0.000392f, -0.022378f, -0.037020f, -0.042496f, -0.053921f, -0.065511f, -0.068008f, -0.072703f, -0.083698f, -0.085527f, -0.084631f, -0.090764f, -0.095345f, -0.091080f, -0.089181f, - -0.090831f, -0.081983f, -0.070125f, -0.063483f, -0.052002f, -0.032453f, -0.018297f, -0.006254f, 0.011146f, 0.026582f, 0.034293f, 0.041721f, 0.051656f, 0.054324f, 0.052843f, 0.054245f, 0.052521f, 0.047022f, 0.043334f, 0.039931f, 0.034641f, 0.029526f, 0.025677f, 0.020871f, 0.016023f, 0.012755f, 0.010332f, 0.007537f, 0.005696f, 0.003946f, 0.002247f, 0.001195f, 0.000566f, 0.000019f, -0.000229f}, - {-0.013293f, 0.000433f, 0.010653f, 0.007331f, 0.007378f, 0.004654f, 0.002960f, -0.004136f, 0.000209f, -0.004715f, 0.011396f, 0.006986f, 0.002775f, 0.001683f, 0.001689f, -0.000101f, -0.003538f, 0.005611f, 0.007858f, 0.007541f, 0.004649f, -0.005678f, -0.008189f, -0.008988f, -0.008512f, -0.000868f, 0.004527f, -0.008788f, 0.007414f, -0.001745f, 0.012920f, -0.002116f, 0.008229f, 0.000135f, -0.010614f, 0.003079f, -0.001316f, 0.008656f, 0.000654f, -0.000985f, -0.004296f, -0.007284f, 0.000717f, 0.004149f, -0.009310f, -0.012788f, 0.009007f, -0.007399f, -0.006779f, -0.006434f, 0.005103f, -0.005072f, 0.002206f, -0.002257f, -0.000571f, -0.007526f, -0.002217f, -0.005115f, -0.007440f, 0.002489f, 0.005884f, -0.002145f, -0.008190f, -0.001594f, -0.001621f, -0.004125f, -0.007071f, -0.000534f, -0.005740f, -0.006818f, -0.001173f, 0.000488f, 0.001672f, -0.002301f, 0.001068f, -0.001251f, -0.009581f, -0.002114f, 0.001253f, -0.002651f, -0.002411f, -0.003013f, 0.003151f, -0.003683f, 0.003242f, -0.000252f, 0.000615f, 0.001231f, -0.002294f, 0.002330f, 0.000087f, -0.001281f, 0.000641f, -0.000625f, -0.001938f, 0.000334f, - 0.001569f, -0.001026f, -0.000809f, -0.000089f, 0.002494f, 0.001101f, 0.000409f, 0.000378f, 0.001377f, 0.000888f, 0.001588f, 0.000432f, 0.002025f, -0.001632f, -0.000651f, -0.000739f, 0.025061f, -0.008840f, -0.005811f, -0.007887f, -0.005441f, 0.000527f, -0.016876f, 0.002780f, -0.008406f, -0.016516f, -0.003583f, 0.014051f, -0.010212f, 0.002696f, -0.001266f, 0.004679f, 0.007058f, 0.007571f, 0.012253f, -0.002692f, -0.007132f, 0.003091f, 0.002904f, -0.005712f, -0.000891f, -0.003875f, -0.002563f, 0.001466f, -0.006543f, -0.004093f, -0.001016f, -0.008192f, -0.009636f, 0.004837f, 0.007312f, -0.004429f, -0.011064f, -0.001972f, -0.002656f, 0.001510f, 0.008794f, 0.000543f, -0.003759f, -0.000634f, 0.011799f, 0.001439f, -0.007355f, -0.007052f, 0.002991f, 0.002209f, 0.009397f, 0.005345f, -0.000710f, -0.009094f, 0.000418f, -0.000572f, 0.007694f, -0.008372f, -0.002890f, 0.004542f, 0.008954f, -0.002587f, 0.000710f, -0.006888f, -0.003943f, 0.004165f, 0.000165f, 0.000852f, 0.002359f, -0.002698f, 0.003195f, 0.000944f, 0.003930f, 0.002448f, 0.001457f, 0.015698f, 0.004715f, -0.000674f, -0.002225f, -0.004665f, - 0.006639f, 0.004157f, 0.007183f, 0.005166f, 0.001721f, 0.001908f, -0.001633f, 0.001419f, -0.003057f, -0.003170f, -0.002528f, 0.000803f, -0.001229f, -0.000793f, -0.000593f, 0.002516f, 0.000302f, 0.003296f, 0.000193f, -0.001071f, -0.000537f, -0.000337f, -0.000583f, 0.001063f, 0.000653f, 0.001324f, -0.018416f, -0.004308f, -0.008677f, 0.008469f, 0.002165f, 0.000231f, 0.006034f, -0.003537f, -0.014227f, -0.007489f, 0.009505f, -0.000489f, 0.009792f, -0.000696f, -0.005490f, 0.010847f, 0.004099f, 0.023742f, -0.004427f, 0.010325f, 0.001540f, -0.011142f, 0.002852f, -0.009460f, 0.006184f, 0.002206f, 0.002457f, -0.010111f, 0.005115f, -0.001738f, -0.003542f, 0.004191f, 0.016185f, 0.006031f, -0.000049f, -0.012925f, 0.011278f, -0.002339f, 0.000095f, 0.007976f, -0.011739f, -0.002176f, 0.008174f, -0.004793f, -0.004158f, -0.013274f, -0.014479f, -0.001079f, 0.008846f, 0.005206f, -0.005779f, -0.000136f, 0.005781f, 0.007205f, 0.002909f, -0.001451f, -0.002749f, -0.012722f, 0.006045f, 0.015879f, 0.007262f, -0.004552f, -0.002186f, 0.005039f, 0.007617f, -0.000576f, -0.002311f, 0.001906f, -0.010438f, -0.001927f, - -0.007299f, -0.003419f, -0.000628f, -0.004500f, 0.012137f, 0.010549f, -0.003094f, 0.005300f, 0.003965f, -0.002005f, -0.007086f, 0.001692f, -0.005473f, -0.002084f, 0.001686f, -0.007118f, -0.001467f, 0.000718f, -0.002015f, 0.002031f, 0.003104f, -0.004555f, -0.001580f, -0.000301f, 0.000363f, -0.003576f, 0.000999f, -0.001656f, 0.002748f, -0.003173f, 0.003031f, -0.002173f, 0.000772f, 0.000482f, -0.001492f, 0.001193f, 0.000587f, -0.001163f, 0.001100f, 0.001159f, 0.001262f, -0.002363f, -0.001049f, 0.000037f, -0.003277f, 0.000424f, 0.002031f, -0.000676f, -0.013759f, 0.015593f, -0.013242f, 0.014249f, -0.000027f, -0.011171f, -0.026493f, -0.010367f, -0.007529f, 0.004094f, 0.014049f, 0.011024f, -0.003252f, -0.002026f, -0.003135f, -0.007517f, -0.002091f, -0.008461f, 0.003048f, 0.003271f, 0.005392f, 0.008885f, 0.005307f, 0.016891f, 0.000162f, 0.003507f, -0.005799f, -0.001262f, -0.003891f, 0.006285f, 0.001976f, -0.007680f, -0.011174f, 0.000589f, -0.007990f, 0.001142f, 0.007784f, -0.012644f, 0.009115f, -0.021359f, -0.005796f, -0.015810f, 0.002850f, -0.000850f, 0.000397f, -0.006114f, -0.008296f, 0.003115f, - 0.007749f, 0.005596f, 0.002148f, -0.012671f, 0.004045f, -0.008707f, -0.003231f, -0.002398f, -0.017318f, -0.006670f, 0.005372f, 0.006901f, -0.000455f, -0.011874f, 0.002218f, 0.004720f, -0.002177f, -0.002234f, 0.001594f, 0.010631f, 0.003913f, -0.002187f, -0.003206f, 0.002011f, -0.024730f, 0.001959f, 0.006465f, 0.006093f, 0.017692f, 0.002600f, -0.009676f, 0.011190f, -0.003699f, 0.001832f, 0.004032f, 0.003825f, -0.002380f, -0.008021f, 0.000620f, 0.004991f, 0.004755f, 0.007630f, -0.002181f, -0.002268f, 0.001459f, -0.001247f, -0.000787f, 0.001361f, -0.001969f, 0.000875f, 0.001863f, -0.000851f, -0.003853f, -0.002899f, -0.000005f, 0.000644f, 0.001202f, -0.001747f, 0.003942f, -0.001807f, -0.000948f, 0.002619f, 0.003002f, -0.000662f, -0.004289f, -0.002162f, 0.001912f, -0.002082f, -0.001067f, -0.001198f, 0.001095f, 0.003626f, -0.000502f, 0.000879f, 0.003743f, 0.017786f, -0.004510f, 0.000257f, 0.011738f, -0.006050f, -0.005645f, 0.017543f, -0.013354f, -0.031621f, -0.020742f, -0.012227f, 0.019012f, 0.008084f, 0.002646f, -0.018319f, 0.019402f, -0.008366f, 0.005452f, -0.005024f, 0.007633f, 0.009325f, - -0.000749f, 0.000231f, -0.000152f, -0.003161f, -0.010002f, -0.008096f, -0.002440f, 0.001042f, 0.008825f, 0.004975f, 0.013774f, 0.006551f, -0.005974f, -0.003218f, 0.012265f, -0.008829f, 0.015045f, -0.012031f, 0.003260f, 0.006574f, 0.004289f, -0.009763f, 0.013269f, -0.001314f, 0.014256f, 0.018720f, 0.002909f, -0.007515f, -0.007224f, 0.007897f, -0.008976f, -0.019076f, -0.004870f, 0.003969f, -0.012181f, 0.006943f, 0.005704f, -0.004093f, -0.007554f, -0.003280f, -0.002858f, 0.003628f, -0.001417f, -0.010764f, -0.004029f, 0.018479f, 0.014947f, 0.007972f, -0.022005f, -0.021718f, -0.011779f, 0.020749f, 0.010608f, -0.001682f, 0.002970f, -0.010310f, 0.013216f, -0.000644f, -0.010144f, -0.003607f, 0.001441f, -0.001066f, -0.005042f, -0.000806f, -0.003974f, -0.002208f, 0.003978f, 0.005676f, -0.003270f, -0.000120f, 0.000605f, 0.000903f, 0.000919f, -0.005761f, 0.006649f, -0.000518f, -0.006411f, -0.003915f, -0.000802f, -0.002090f, 0.000217f, -0.000540f, -0.000708f, -0.000746f, 0.001664f, 0.000259f, -0.002891f, -0.000261f, 0.001269f, -0.000798f, -0.004548f, -0.003238f, -0.004233f, -0.001590f, 0.003274f, 0.009116f, - 0.013329f, -0.000535f, 0.005258f, -0.020469f, -0.006782f, 0.003577f, 0.007263f, -0.025432f, -0.002646f, 0.011228f, -0.007530f, -0.016478f, 0.010579f, -0.019198f, -0.014040f, -0.007494f, 0.001884f, -0.006847f, -0.004601f, -0.000436f, 0.014599f, -0.012052f, 0.003382f, -0.003690f, -0.004909f, -0.010115f, -0.002666f, -0.014855f, -0.004304f, -0.000254f, 0.003051f, -0.010330f, -0.002044f, -0.006447f, 0.001132f, -0.003196f, -0.004494f, 0.002954f, 0.012033f, 0.003205f, -0.006009f, 0.006086f, -0.008886f, -0.002060f, 0.003641f, -0.003257f, 0.006078f, -0.001739f, -0.000500f, -0.041553f, 0.002937f, -0.014278f, 0.007230f, 0.006230f, 0.009385f, -0.022784f, -0.023278f, 0.003356f, 0.000979f, 0.005668f, 0.000312f, 0.012686f, -0.004909f, 0.006985f, 0.008565f, -0.003813f, 0.019767f, -0.005941f, -0.012621f, -0.002526f, -0.010423f, -0.000170f, -0.020770f, 0.000507f, 0.010493f, 0.005047f, 0.015756f, -0.004128f, -0.004132f, 0.007095f, -0.008118f, 0.002156f, 0.005218f, 0.010281f, -0.005266f, 0.005985f, -0.008063f, 0.001826f, 0.000453f, 0.001289f, -0.003913f, -0.001719f, -0.002888f, 0.003422f, -0.003626f, -0.005750f, - -0.000005f, -0.002605f, -0.003608f, -0.001130f, -0.002805f, -0.001065f, -0.001726f, 0.001913f, -0.002813f, 0.001900f, -0.005789f, -0.000419f, -0.003427f, -0.001286f, 0.000568f, 0.000607f, -0.000743f, -0.002605f, 0.000348f, -0.001867f, 0.000970f, 0.000317f, 0.016155f, -0.032607f, 0.008716f, 0.001386f, 0.009033f, 0.013121f, 0.002359f, -0.012645f, -0.027793f, 0.001982f, -0.011253f, 0.021098f, -0.008617f, 0.004361f, 0.001502f, 0.004518f, 0.015879f, -0.007014f, -0.000524f, -0.007366f, -0.004199f, 0.004177f, -0.004056f, 0.014954f, 0.011078f, 0.003216f, -0.003214f, 0.000235f, 0.009947f, -0.000997f, 0.004775f, -0.000195f, -0.008293f, 0.007322f, -0.002174f, -0.006130f, 0.008770f, 0.014998f, -0.000019f, 0.005894f, 0.000985f, -0.009873f, -0.006253f, 0.018211f, -0.008839f, 0.008742f, 0.013157f, -0.017489f, 0.012445f, 0.006757f, 0.006280f, -0.007725f, 0.012760f, 0.003766f, -0.002300f, 0.016491f, 0.000524f, -0.000128f, -0.007781f, -0.004307f, -0.000096f, -0.007107f, -0.017654f, -0.004543f, 0.017846f, 0.013611f, 0.014663f, -0.001564f, -0.015664f, 0.006546f, 0.018718f, -0.003424f, -0.013431f, -0.000589f, - -0.009523f, -0.002321f, -0.001673f, 0.014755f, -0.001516f, 0.007627f, -0.002042f, 0.000788f, -0.010448f, 0.002841f, -0.001898f, 0.004166f, 0.003891f, -0.006999f, 0.004707f, -0.011141f, 0.000981f, 0.004181f, 0.000165f, -0.002777f, -0.000327f, 0.002368f, -0.007941f, -0.001303f, -0.007484f, 0.002429f, -0.004786f, -0.002776f, -0.004645f, -0.007383f, -0.005118f, -0.001774f, 0.000940f, -0.002146f, -0.000337f, 0.002553f, 0.000642f, -0.001799f, -0.001558f, -0.002081f, 0.004160f, 0.000329f, 0.001397f, 0.002991f, 0.001574f, 0.002166f, -0.001179f, 0.003891f, -0.000731f, 0.000296f, 0.001362f, -0.001231f, -0.002206f, 0.001190f, 0.003712f, -0.015506f, -0.004594f, -0.024982f, -0.007326f, -0.014503f, -0.017098f, -0.016212f, -0.005763f, 0.021744f, 0.023661f, 0.032614f, 0.007268f, -0.012484f, -0.007696f, 0.026990f, -0.000134f, -0.006331f, 0.020667f, -0.002199f, 0.000869f, -0.032374f, 0.014592f, 0.008104f, -0.021617f, 0.029874f, -0.004202f, 0.013403f, -0.003667f, 0.006992f, 0.013258f, -0.000004f, 0.023466f, 0.008979f, 0.006632f, -0.002755f, -0.008372f, 0.002222f, 0.014201f, -0.003853f, 0.004191f, 0.006637f, - 0.018820f, -0.000915f, -0.005747f, 0.012125f, -0.014321f, -0.009005f, 0.006419f, 0.020784f, -0.009268f, -0.011188f, -0.003562f, 0.017124f, 0.000116f, 0.002397f, -0.006449f, -0.002959f, 0.006114f, 0.009020f, 0.000761f, -0.007428f, -0.023765f, 0.002788f, 0.006950f, 0.022561f, 0.006524f, -0.001847f, 0.017308f, 0.030976f, -0.006424f, 0.010837f, 0.007277f, 0.012821f, -0.002539f, -0.010923f, 0.006350f, -0.025723f, -0.007027f, -0.003918f, -0.008376f, -0.005217f, 0.013345f, 0.004600f, -0.016676f, -0.009838f, 0.000438f, -0.005452f, -0.000631f, -0.012750f, -0.000423f, -0.004379f, -0.003244f, -0.001767f, 0.001244f, -0.003563f, -0.000920f, -0.001744f, 0.002694f, -0.001013f, 0.002469f, -0.003493f, -0.000136f, 0.000527f, 0.001128f, 0.005156f, 0.000126f, -0.001991f, 0.004794f, 0.007040f, -0.000592f, -0.004332f, -0.002758f, -0.006099f, -0.005353f, 0.007313f, -0.001268f, 0.001970f, 0.002659f, 0.002588f, 0.002401f, -0.005615f, 0.002722f, -0.002041f, -0.028519f, 0.039304f, -0.020211f, 0.008719f, -0.001727f, -0.013912f, 0.029899f, 0.006836f, 0.003482f, -0.032145f, 0.008014f, -0.012982f, -0.014770f, 0.003274f, - -0.014422f, 0.015860f, 0.009502f, -0.002981f, 0.002975f, -0.008081f, -0.003785f, -0.011857f, -0.007706f, -0.014187f, -0.021743f, -0.005567f, -0.015291f, -0.004310f, 0.007923f, -0.006351f, -0.008349f, 0.016738f, 0.010436f, 0.016800f, -0.014257f, -0.001858f, -0.003069f, -0.015661f, -0.000104f, -0.008459f, -0.038546f, 0.003071f, 0.000436f, -0.006204f, 0.013030f, -0.001672f, 0.014402f, 0.012132f, 0.004327f, 0.022751f, 0.020241f, -0.020528f, -0.005804f, -0.000120f, -0.001004f, 0.006914f, 0.002500f, 0.019295f, -0.004440f, 0.030991f, -0.000299f, -0.018745f, -0.015230f, 0.002098f, 0.005389f, 0.006101f, 0.022482f, 0.005674f, 0.005434f, 0.021075f, 0.028207f, 0.000862f, -0.017724f, -0.016846f, -0.001826f, -0.005857f, -0.004296f, 0.036468f, 0.002375f, -0.017016f, 0.011686f, -0.014939f, 0.013718f, 0.001993f, -0.003167f, -0.004691f, -0.011501f, 0.002808f, 0.003452f, -0.001987f, 0.003020f, 0.005880f, 0.003184f, 0.003901f, -0.001923f, -0.001892f, 0.000134f, -0.002387f, -0.002007f, 0.003835f, 0.001371f, 0.002621f, 0.003441f, 0.006253f, 0.000094f, -0.003438f, 0.005855f, 0.003146f, 0.000901f, 0.001056f, - -0.001558f, 0.000581f, -0.000522f, 0.006213f, 0.009956f, -0.005889f, 0.004595f, -0.001572f, 0.003964f, 0.000192f, 0.000607f, 0.008376f, -0.000760f, 0.000478f, 0.000442f, 0.006809f, 0.004455f, 0.004879f, 0.003148f, 0.000509f, 0.023531f, 0.001612f, 0.015794f, -0.017720f, 0.007629f, 0.001189f, -0.001501f, 0.010350f, 0.024902f, -0.007144f, -0.002478f, 0.022889f, -0.030761f, -0.017261f, -0.013543f, -0.035240f, 0.006685f, -0.011336f, -0.005126f, 0.003969f, -0.024087f, 0.025945f, 0.019557f, 0.027572f, 0.012289f, -0.017560f, 0.001447f, 0.000863f, 0.020621f, -0.004099f, -0.000861f, -0.001064f, -0.013112f, 0.000781f, -0.007789f, 0.011375f, -0.013898f, -0.005449f, -0.004813f, -0.006193f, -0.016244f, 0.007285f, -0.023735f, -0.003866f, -0.001847f, 0.014519f, 0.008570f, 0.001694f, 0.000068f, -0.004405f, 0.001538f, -0.000057f, 0.012095f, 0.002558f, 0.003378f, -0.002251f, -0.037045f, -0.017433f, 0.004096f, 0.014986f, 0.018142f, -0.029179f, 0.019151f, 0.005435f, -0.011547f, 0.002476f, 0.006082f, -0.007152f, 0.027810f, -0.000050f, 0.005199f, -0.006913f, -0.039145f, -0.013689f, -0.017914f, -0.004945f, - 0.000559f, -0.011143f, 0.005455f, 0.007971f, -0.008157f, -0.002007f, 0.024920f, 0.000368f, 0.012627f, -0.015718f, 0.001800f, -0.000600f, 0.014287f, 0.012390f, 0.009046f, -0.003831f, 0.002847f, 0.010100f, 0.006226f, -0.000832f, 0.010904f, 0.010333f, 0.011588f, 0.001140f, 0.004345f, 0.003629f, 0.001787f, -0.001912f, -0.001615f, 0.009719f, 0.001795f, -0.005745f, 0.000796f, -0.001190f, 0.005466f, -0.004304f, 0.001668f, 0.004851f, -0.004211f, 0.007771f, 0.002745f, -0.001565f, 0.000592f, -0.007536f, 0.005125f, 0.004802f, -0.000933f, -0.002039f, -0.004425f, -0.006344f, 0.001618f, 0.036389f, 0.006005f, 0.014858f, -0.021523f, -0.019458f, 0.011578f, 0.019010f, 0.002438f, -0.006384f, 0.034924f, 0.011167f, 0.000373f, -0.009352f, 0.007783f, -0.002433f, -0.003608f, -0.001035f, -0.005737f, 0.001877f, -0.011316f, -0.027252f, 0.009289f, 0.003089f, 0.008610f, 0.002994f, 0.015512f, 0.004920f, -0.016240f, -0.033228f, 0.001092f, 0.002772f, -0.002474f, -0.029043f, -0.014087f, -0.004142f, 0.008426f, -0.006131f, 0.003498f, -0.025367f, 0.001463f, -0.005457f, 0.000378f, 0.002842f, 0.007329f, -0.002493f, - -0.023913f, -0.021916f, -0.013617f, 0.009594f, 0.007098f, -0.005639f, -0.004801f, -0.038405f, -0.021682f, -0.000506f, -0.037516f, 0.034996f, -0.035411f, -0.009507f, -0.022859f, 0.037515f, 0.012140f, -0.025956f, 0.013390f, -0.002767f, 0.014274f, -0.022072f, -0.007208f, 0.001254f, 0.015340f, -0.020938f, -0.008294f, -0.006932f, -0.021386f, 0.001815f, 0.014519f, -0.002419f, -0.003777f, 0.026099f, -0.040722f, 0.032498f, -0.005162f, 0.007092f, -0.018268f, 0.013237f, -0.001895f, 0.010606f, -0.009186f, 0.000818f, 0.008352f, 0.009187f, -0.002390f, -0.004186f, 0.000217f, 0.001209f, 0.001239f, -0.002712f, 0.010246f, 0.010884f, 0.007632f, 0.002248f, 0.007732f, -0.000419f, 0.009467f, -0.003131f, 0.001866f, -0.000101f, -0.003352f, -0.003284f, 0.000795f, -0.007378f, -0.009148f, -0.002392f, -0.000430f, 0.009726f, -0.000423f, -0.001230f, -0.002433f, -0.006182f, 0.004715f, -0.001771f, -0.003257f, -0.002017f, 0.004991f, -0.000707f, -0.010410f, -0.001090f, 0.003877f, 0.001215f, -0.000878f, 0.032126f, 0.069926f, -0.009071f, -0.021415f, -0.020060f, -0.017659f, -0.025488f, 0.004562f, -0.043594f, -0.000081f, -0.033644f, - -0.015374f, 0.010720f, 0.021595f, 0.012472f, -0.014956f, -0.001837f, 0.020562f, -0.001134f, 0.023686f, -0.013677f, -0.013750f, -0.012159f, 0.011340f, -0.007930f, -0.010352f, 0.003990f, -0.012472f, -0.012791f, 0.016169f, 0.037658f, 0.014443f, 0.016241f, 0.007411f, -0.021801f, -0.004900f, -0.017649f, -0.016577f, -0.002456f, -0.002737f, -0.013824f, -0.022173f, -0.044970f, -0.003898f, -0.016185f, 0.006182f, -0.008127f, 0.017261f, 0.015921f, 0.009242f, 0.016652f, 0.011894f, -0.001520f, 0.031987f, 0.045380f, 0.011135f, -0.052671f, 0.011106f, -0.009261f, -0.030630f, 0.004529f, 0.015481f, 0.007733f, 0.001692f, 0.014745f, -0.000525f, -0.024987f, 0.001887f, 0.012159f, -0.024907f, -0.013054f, -0.023313f, -0.043656f, 0.034879f, 0.004988f, -0.002205f, 0.024316f, 0.019176f, 0.001559f, 0.001758f, 0.024034f, -0.032010f, -0.013874f, 0.004010f, 0.017788f, 0.015213f, 0.022805f, 0.016656f, -0.013123f, -0.007350f, -0.002726f, -0.004742f, -0.001697f, -0.002835f, -0.006247f, -0.008081f, -0.012929f, -0.012856f, -0.009252f, -0.004654f, -0.001176f, 0.006963f, -0.003333f, -0.002263f, -0.014842f, -0.009891f, 0.001817f, - 0.008363f, 0.005715f, 0.003710f, 0.003446f, 0.002712f, -0.001863f, -0.007257f, -0.003487f, -0.004352f, -0.004018f, 0.001962f, -0.008042f, 0.002193f, -0.005656f, 0.006781f, -0.000439f, -0.001694f, -0.005401f, 0.005703f, -0.004943f, -0.001160f, 0.010760f, -0.003821f, -0.000045f, 0.051666f, -0.037686f, 0.044709f, -0.003397f, -0.004987f, -0.022270f, -0.008001f, -0.022125f, -0.018721f, 0.024017f, -0.020731f, 0.012565f, 0.053571f, 0.020095f, -0.007521f, -0.023709f, -0.019792f, 0.024043f, -0.019031f, -0.032538f, -0.013150f, 0.003671f, 0.003521f, -0.037196f, 0.003050f, -0.011078f, 0.019953f, -0.011550f, -0.000149f, 0.004641f, 0.056355f, -0.013238f, -0.017461f, 0.027432f, -0.021188f, 0.032893f, -0.018644f, 0.024161f, 0.004430f, -0.016962f, -0.015350f, 0.030589f, -0.038708f, 0.030097f, -0.016434f, 0.003334f, -0.008930f, 0.016565f, -0.013093f, -0.006641f, -0.000085f, -0.011789f, 0.057516f, -0.016142f, 0.039395f, 0.015371f, 0.018315f, -0.000016f, 0.015195f, 0.025240f, 0.028455f, -0.007432f, -0.026690f, 0.000394f, 0.023583f, 0.009557f, -0.003657f, -0.033912f, 0.046132f, -0.009323f, -0.029745f, -0.008142f, - -0.018059f, 0.014517f, 0.020190f, 0.001028f, 0.033533f, -0.008711f, 0.017434f, -0.037345f, -0.006157f, -0.039866f, -0.011997f, -0.014451f, -0.000421f, 0.002438f, -0.007235f, 0.014520f, 0.005198f, -0.010613f, -0.017947f, -0.013491f, -0.003462f, -0.001514f, -0.008736f, -0.001794f, -0.002757f, 0.011514f, -0.002831f, 0.000671f, -0.003765f, -0.017171f, -0.004714f, -0.006795f, 0.002671f, -0.002713f, -0.009201f, -0.014987f, 0.006561f, -0.010080f, 0.005294f, 0.006896f, -0.010043f, -0.025825f, -0.005636f, -0.003918f, -0.006353f, -0.009124f, 0.001647f, -0.004192f, 0.003389f, 0.003187f, -0.011206f, -0.001398f, -0.011277f, 0.011152f, 0.007382f, -0.006114f, 0.003604f, -0.010285f, -0.058291f, -0.024929f, 0.035636f, -0.007130f, -0.014704f, 0.041445f, 0.003901f, -0.021624f, 0.015668f, 0.022542f, 0.019089f, 0.002946f, -0.035895f, -0.014839f, 0.005395f, 0.005253f, 0.018646f, 0.012358f, 0.021042f, -0.018324f, -0.014525f, 0.007070f, -0.005046f, 0.017295f, -0.033756f, -0.005713f, -0.036508f, -0.011787f, 0.006518f, -0.005026f, -0.004653f, 0.038975f, 0.008042f, -0.028885f, -0.004460f, 0.002323f, -0.029594f, -0.003996f, - 0.001370f, 0.017748f, 0.044740f, -0.015897f, 0.014904f, -0.025005f, 0.003688f, -0.014707f, -0.019029f, 0.018280f, 0.039113f, -0.031053f, 0.002917f, 0.034932f, -0.015858f, -0.003210f, -0.013198f, 0.022872f, 0.005421f, -0.028373f, -0.000445f, -0.009902f, -0.009314f, -0.002806f, -0.014051f, 0.021175f, -0.050304f, 0.010656f, 0.004099f, -0.021087f, 0.028012f, 0.043152f, 0.030334f, 0.082179f, 0.024800f, -0.021038f, -0.029295f, -0.024086f, -0.013292f, 0.030195f, -0.011003f, 0.041919f, 0.003716f, 0.051039f, -0.060741f, -0.038827f, 0.018123f, -0.009909f, -0.006411f, 0.024514f, -0.016653f, -0.001825f, 0.025870f, 0.011655f, 0.019149f, 0.028564f, 0.022110f, -0.004758f, 0.008933f, -0.017358f, 0.000463f, -0.000597f, -0.012403f, -0.013307f, 0.008749f, -0.018362f, -0.001750f, 0.027985f, 0.002364f, -0.016562f, -0.021938f, 0.004144f, -0.027521f, -0.009959f, 0.029219f, 0.015394f, -0.005009f, -0.006620f, 0.005462f, -0.005330f, -0.009487f, 0.002109f, -0.006987f, -0.010319f, -0.002013f, -0.014214f, 0.009937f, 0.008976f, 0.009502f, -0.005178f, -0.004063f, 0.006397f, 0.014802f, 0.040494f, -0.096082f, -0.004158f, - 0.054229f, -0.073075f, -0.003664f, 0.013962f, -0.075483f, 0.033294f, 0.008811f, 0.059869f, -0.006367f, 0.020937f, 0.017404f, -0.066448f, -0.055093f, -0.021654f, -0.005656f, -0.033427f, -0.041044f, -0.021862f, 0.037247f, 0.026030f, 0.022427f, 0.002096f, 0.003883f, 0.011548f, 0.001976f, -0.048328f, -0.018325f, -0.061945f, -0.020044f, 0.034124f, 0.009893f, 0.022949f, 0.077129f, 0.019829f, 0.028924f, -0.001543f, 0.015147f, 0.067927f, 0.050961f, 0.013994f, 0.033312f, 0.030596f, 0.067732f, 0.055633f, -0.074558f, 0.046157f, -0.004509f, 0.044162f, 0.044903f, 0.018554f, 0.081390f, 0.071923f, -0.040150f, 0.035448f, -0.000856f, 0.033772f, -0.060066f, 0.005537f, 0.006122f, 0.001953f, -0.013846f, 0.037578f, 0.040658f, -0.039975f, -0.013762f, -0.023589f, 0.014088f, -0.033178f, -0.041187f, 0.038157f, 0.065210f, 0.023787f, 0.067878f, -0.019908f, 0.092349f, 0.090482f, 0.025055f, 0.047335f, -0.014198f, -0.024068f, 0.021024f, 0.020804f, 0.009876f, 0.006971f, 0.005249f, 0.011995f, -0.013238f, -0.023638f, -0.017080f, -0.044188f, -0.046412f, -0.018828f, 0.021166f, -0.000807f, 0.018626f, 0.003119f, - 0.011219f, 0.027784f, 0.034015f, -0.011330f, 0.015429f, -0.001865f, -0.014520f, -0.011980f, -0.010417f, -0.029154f, -0.013646f, 0.000266f, -0.025363f, -0.009068f, -0.022863f, -0.012658f, 0.004547f, 0.031307f, -0.015179f, 0.011150f, 0.008566f, -0.005509f, 0.017068f, 0.009978f, 0.012951f, 0.000198f, 0.022770f, 0.014653f, 0.009735f, -0.009413f, -0.014330f, -0.006170f, -0.030909f, 0.044090f, 0.079629f, -0.011257f, -0.109566f, -0.035225f, 0.010791f, -0.008865f, -0.018459f, -0.024308f, 0.000034f, -0.062810f, -0.037793f, -0.052208f, -0.008694f, -0.015487f, 0.016989f, -0.037362f, -0.010949f, 0.009661f, 0.017060f, -0.000754f, 0.019019f, 0.037427f, 0.007522f, 0.054141f, -0.035359f, 0.012805f, 0.001921f, 0.051635f, 0.013365f, -0.010507f, -0.052595f, 0.034463f, -0.009265f, 0.047076f, -0.040050f, -0.031926f, -0.030391f, -0.016396f, -0.048458f, -0.006956f, -0.008561f, -0.045721f, 0.024802f, 0.051375f, -0.025203f, 0.007346f, -0.067308f, 0.064218f, -0.020528f, -0.035458f, 0.029313f, 0.025460f, -0.038527f, 0.003037f, -0.024050f, 0.008136f, -0.017633f, 0.080470f, -0.003067f, -0.007241f, -0.019979f, 0.142286f, - 0.003600f, -0.019670f, 0.061071f, 0.048729f, -0.051833f, 0.040134f, -0.063489f, -0.035608f, -0.066334f, 0.050369f, -0.045635f, 0.024140f, 0.034882f, 0.027423f, -0.058772f, 0.073908f, -0.013340f, -0.097570f, -0.110827f, -0.044040f, -0.013571f, -0.032561f, 0.025940f, 0.025110f, 0.043975f, 0.006829f, 0.003945f, -0.033344f, 0.033275f, 0.051620f, 0.076392f, 0.019692f, -0.021698f, 0.007018f, 0.065051f, 0.010395f, -0.035637f, -0.009284f, 0.069434f, 0.015448f, -0.040749f, -0.011062f, 0.034391f, 0.019299f, 0.031348f, 0.020485f, 0.044089f, -0.000109f, 0.024338f, 0.008078f, 0.031295f, 0.014199f, 0.049617f, 0.015895f, 0.031459f, -0.006628f, 0.010075f, 0.001796f, -0.003373f, 0.012611f, -0.004067f, 0.016514f, 0.031091f, 0.004099f, 0.018209f, 0.001693f, 0.023583f, -0.053116f, -0.011827f, 0.039939f, 0.003653f, -0.030775f, -0.146883f, 0.010485f, 0.094376f, -0.057040f, -0.038053f, 0.075796f, -0.055171f, -0.003584f, -0.015686f, 0.072753f, -0.124969f, 0.069849f, 0.041434f, -0.035258f, 0.013021f, 0.068243f, 0.048705f, -0.023890f, 0.027861f, 0.012526f, -0.019060f, 0.032101f, -0.000715f, 0.019468f, - 0.029511f, -0.012586f, 0.007111f, -0.003173f, 0.014062f, -0.018065f, -0.014584f, -0.001139f, 0.025322f, -0.074071f, -0.036705f, 0.036874f, -0.008351f, -0.049100f, -0.058052f, 0.010076f, 0.072165f, -0.031290f, -0.046154f, 0.035534f, 0.053821f, -0.011742f, 0.013509f, -0.009476f, 0.050128f, -0.027197f, 0.075178f, -0.010124f, 0.000107f, 0.041266f, 0.000837f, 0.009545f, -0.053462f, 0.084017f, -0.043441f, -0.052514f, 0.039826f, -0.055607f, -0.018448f, 0.009481f, 0.027717f, 0.077646f, -0.027576f, 0.048448f, -0.009909f, 0.025407f, -0.131438f, -0.100398f, -0.018519f, -0.039075f, 0.019998f, 0.018258f, 0.049813f, -0.007765f, -0.010528f, 0.059612f, -0.065230f, -0.001322f, 0.041597f, 0.041287f, -0.015239f, 0.045993f, 0.005699f, -0.009629f, -0.000316f, -0.010031f, 0.043834f, -0.024248f, -0.002587f, 0.042972f, 0.009745f, -0.009539f, 0.016784f, -0.021085f, 0.005388f, -0.001436f, 0.000636f, 0.017493f, 0.007996f, -0.024124f, -0.005670f, 0.007741f, -0.019032f, -0.027558f, -0.000490f, 0.020538f, 0.035605f, -0.029928f, 0.034783f, 0.012182f, -0.035013f, 0.029176f, 0.032986f, -0.016428f, -0.039652f, 0.036600f, - -0.018194f, 0.006975f, 0.019860f, -0.019627f, -0.052483f, 0.017404f, 0.013910f, -0.028658f, -0.027545f, 0.002348f, 0.019605f, -0.022651f, 0.008318f, -0.009783f, -0.048148f, -0.022148f, 0.036772f, -0.060257f, 0.060671f, -0.051183f, -0.064419f, 0.037749f, -0.030723f, -0.020490f, 0.038541f, -0.027505f, 0.032321f, -0.021453f, 0.015458f, 0.074335f, -0.064992f, -0.003954f, -0.009264f, 0.062740f, 0.009146f, 0.006628f, -0.058109f, -0.054494f, -0.018883f, -0.015373f, -0.007835f, -0.017052f, 0.011685f, 0.003996f, -0.005275f, 0.009938f, 0.014029f, 0.007135f, 0.011056f, -0.010604f, 0.029700f, -0.018033f, 0.028450f, -0.051605f, 0.002597f, -0.041659f, -0.054266f, -0.031671f, 0.073875f, -0.030758f, -0.031440f, -0.023151f, 0.017545f, -0.013811f, 0.033285f, 0.048187f, -0.049020f, 0.045317f, 0.008707f, -0.068004f, -0.033720f, 0.142942f, 0.074468f, -0.106986f, -0.019565f, 0.069239f, -0.033996f, -0.038556f, 0.028279f, -0.033216f, -0.073750f, 0.054254f, 0.025109f, -0.100488f, 0.042418f, 0.052105f, -0.058831f, -0.038525f, 0.061178f, -0.014008f, -0.044765f, 0.011179f, 0.030717f, -0.072601f, 0.014614f, 0.013755f, - 0.021819f, -0.055234f, -0.015975f, -0.004094f, -0.017265f, -0.003094f, 0.004328f, 0.006992f, -0.033603f, 0.006159f, 0.051288f, 0.018288f, 0.003862f, 0.017424f, -0.000216f, -0.007657f, -0.027148f, -0.007891f, -0.014393f, -0.019706f, -0.046971f, 0.013430f, -0.026522f, -0.006833f, 0.059139f, -0.051002f, -0.033132f, 0.043802f, -0.030480f, -0.010612f, -0.012809f, 0.020122f, -0.033071f, -0.011561f, 0.054588f, 0.029247f, -0.025632f, 0.030999f, 0.017685f, -0.021755f, -0.013544f, 0.074065f, -0.057895f, -0.044857f, 0.078802f, 0.000270f, -0.061590f, 0.009249f, 0.039165f, -0.036200f, -0.077073f, 0.052632f, 0.007159f, -0.085587f, 0.015591f, 0.024780f, -0.062265f, -0.000656f, 0.043083f, -0.011090f, -0.027263f, 0.022972f, 0.018483f, -0.042687f, -0.003626f, 0.032733f, -0.023917f, -0.030574f, 0.021985f, 0.001985f, 0.088777f, 0.125972f, -0.051134f, 0.141095f, -0.011734f, -0.039268f, -0.030556f, -0.048441f, -0.004623f, 0.023303f, 0.082931f, 0.002403f, 0.025111f, -0.021675f, -0.072683f, 0.000910f, 0.001996f, 0.047047f, 0.008364f, -0.054896f, 0.100595f, -0.043683f, 0.018233f, 0.045088f, -0.051163f, -0.041386f, - -0.072728f, -0.031959f, 0.043773f, 0.055041f, 0.067765f, -0.026263f, -0.168352f, 0.036764f, 0.086757f, 0.111794f, 0.095664f, -0.001889f, -0.048766f, -0.059856f, 0.019482f, 0.056821f, -0.037309f, -0.019709f, -0.149313f, -0.091382f, 0.078988f, 0.133902f, 0.026710f, -0.004093f, -0.033454f, -0.059166f, -0.014635f, 0.036855f, -0.052877f, 0.019976f, -0.008276f, 0.084511f, -0.004532f, 0.032722f, -0.166969f, -0.021494f, 0.001123f, 0.101609f, 0.078118f, -0.002530f, -0.050683f, -0.014108f, 0.120400f, 0.054463f, -0.143383f, -0.176825f, -0.069879f, 0.035086f, 0.272962f, 0.029233f, -0.048578f, 0.037361f, -0.074339f, 0.194263f, 0.058399f, -0.155316f, -0.097959f, -0.019664f, 0.136401f, 0.020305f, -0.058278f, -0.053374f, -0.050109f, 0.038822f, 0.072933f, 0.036796f, -0.080790f, -0.006914f, -0.028496f, 0.065515f, -0.008236f, 0.039527f, -0.015099f, -0.017021f, -0.054000f, 0.020364f, -0.017339f, -0.005864f, 0.039966f, -0.064819f, 0.036604f, -0.009960f, -0.011037f, 0.000095f, 0.028641f, 0.063903f, 0.031180f, 0.004184f, -0.013879f, 0.013414f, -0.001797f, 0.025869f, 0.007306f, 0.028572f, 0.005866f, 0.007137f, - -0.033771f, 0.014975f, 0.015822f, 0.011581f, -0.001090f, 0.009524f, 0.004703f, 0.028354f, 0.032953f, 0.026455f, 0.002418f, -0.018701f, -0.028744f, 0.008104f, 0.012743f, -0.016575f, 0.013974f, -0.023037f, 0.058415f, -0.067342f, 0.002098f, -0.027114f, 0.015567f, -0.041726f, 0.039150f, 0.010778f, -0.022178f, -0.042099f, -0.020626f, -0.008035f, 0.012285f, -0.057448f, 0.013288f, -0.028176f, -0.010883f, -0.045010f, -0.021096f, 0.036344f, -0.038255f, -0.013638f, -0.005189f, 0.017713f, 0.012136f, -0.015028f, 0.020730f, -0.032993f, -0.002509f, 0.000296f, 0.017774f, -0.021658f, 0.031375f, 0.023216f, -0.023642f, -0.027642f, -0.010381f, 0.044323f, -0.031856f, 0.013909f, 0.033178f, 0.007232f, -0.032024f, -0.012463f, 0.014027f, -0.020347f, 0.015182f, 0.001320f, 0.007448f, -0.029878f, 0.006448f, -0.024330f, -0.000842f, 0.022318f, 0.028600f, 0.021932f, -0.016193f, 0.020914f, 0.002904f, -0.026601f, -0.003678f, -0.000240f, 0.031830f, -0.008845f, 0.006919f, 0.027274f, -0.005652f, -0.035936f, 0.050226f, -0.020475f, 0.029831f, 0.021490f, 0.005382f, 0.006804f, -0.020810f, -0.026078f, 0.034713f, 0.005133f, - 0.030582f, 0.009021f, 0.016806f, 0.008283f, -0.000644f, -0.001706f, -0.026153f, 0.002880f, 0.007395f, 0.009224f, 0.010779f, -0.003383f, 0.012506f, 0.001981f, -0.001274f, 0.003234f, 0.001869f, 0.012479f, -0.003130f, 0.009702f, -0.011840f, -0.003229f, 0.000310f, 0.000836f, -0.006519f, -0.004021f, 0.023702f, 0.014588f, -0.003653f, -0.016888f, -0.018608f, -0.007183f, -0.007312f, 0.021223f, 0.002484f, -0.006632f, -0.013794f, -0.007463f, 0.002348f, -0.011943f, 0.025005f, 0.002074f, -0.009656f, 0.003983f, -0.000105f, -0.004708f, 0.007331f, -0.007473f, 0.021782f, -0.020397f, 0.015084f, -0.019867f, -0.054606f, 0.101291f, 0.008928f, 0.005261f, -0.041333f, 0.023275f, -0.003754f, 0.026373f, 0.020024f, 0.030915f, 0.003148f, 0.007663f, -0.017851f, 0.004770f, 0.028302f, -0.003091f, 0.015354f, -0.002774f, 0.004689f, 0.006041f, 0.011308f, -0.012405f, 0.021356f, -0.015029f, 0.001702f, -0.002662f, 0.007056f, -0.002220f, 0.004069f, 0.016175f, 0.017775f, -0.009010f, 0.007687f, 0.003235f, -0.004320f, -0.008044f, 0.023770f, -0.007680f, 0.004812f, -0.007128f, 0.012301f, -0.000363f, -0.011797f, 0.023886f, - -0.015299f, -0.005487f, 0.006139f, -0.011657f, -0.007151f, -0.003817f, 0.000737f, -0.004638f, 0.000148f, -0.002603f, -0.006507f, 0.007932f, -0.015816f, 0.009531f, 0.006403f, -0.005605f, 0.010068f, -0.008117f, 0.011974f, -0.006571f, 0.002110f, 0.002119f, -0.007587f, 0.011765f, -0.000215f, 0.001409f, -0.004025f, 0.015939f, -0.019461f, 0.020250f, -0.014749f, 0.002203f, 0.003321f, -0.000826f, 0.003588f, -0.003526f, 0.011668f, -0.011404f, 0.000595f, 0.009957f, -0.012493f, 0.007472f, 0.006771f, -0.002056f, 0.001331f, 0.006720f, 0.003125f, -0.003473f, 0.004456f, 0.001021f, -0.001758f, 0.000717f, 0.003893f, 0.000240f, -0.005350f, 0.001169f, 0.001948f, -0.002891f, 0.005786f, -0.001549f, 0.004726f, -0.003391f, 0.000640f, 0.003623f, -0.002687f, 0.000388f, 0.002496f, -0.004077f, 0.006368f, -0.000866f, 0.003069f, -0.001081f, 0.006715f, -0.002676f, 0.000666f, 0.006201f, -0.005805f, 0.007211f, -0.004455f, 0.002993f, -0.004575f, 0.007073f, -0.001255f, 0.019449f, -0.092700f, -0.230811f, 0.035894f, 0.175833f, 0.163356f, 0.283393f, -0.072311f, -0.075823f, -0.192923f, -0.263388f, -0.054305f, 0.095298f, - 0.101945f, 0.192024f, 0.104295f, 0.008271f, -0.049856f, -0.133994f, -0.095290f, -0.016413f, -0.014922f, 0.047806f, 0.044297f, 0.025659f, 0.016338f, 0.012925f, -0.007082f, -0.032886f, -0.002572f, 0.038098f, 0.000271f, 0.008059f, -0.002202f, -0.028476f, -0.021869f, -0.048467f, -0.047567f, 0.021615f, 0.019864f, 0.044155f, 0.067027f, 0.050305f, 0.024513f, 0.008942f, -0.072428f, -0.051138f, -0.039653f, -0.039626f, -0.044314f, 0.009311f, 0.028188f, 0.049154f, 0.062658f, 0.051947f, 0.011258f, -0.006056f, -0.041643f, -0.042386f, -0.025287f, -0.012217f, 0.004020f, 0.007078f, 0.014005f, 0.001324f, -0.013643f, 0.004696f, -0.021743f, 0.011406f, 0.018365f, 0.002209f, 0.036826f, 0.044699f, 0.013729f, -0.008374f, -0.049135f, -0.064523f, -0.026096f, -0.011818f, -0.007615f, 0.032986f, 0.025397f, -0.006591f, 0.028811f, 0.031477f, 0.017466f, 0.021786f, -0.012084f, -0.023174f, -0.018820f, -0.026678f, -0.021367f, -0.003827f, -0.020519f, -0.007948f, 0.001013f, 0.016514f, 0.023038f, 0.033507f, 0.028708f, 0.026695f, 0.020981f, -0.010822f, -0.025131f, -0.041843f, -0.051872f, -0.029969f, -0.022585f, 0.003066f, - 0.024554f, 0.036528f, 0.042037f, 0.033495f, 0.030572f, 0.019958f, -0.026277f, -0.046472f, -0.042249f, -0.020427f, -0.006173f, -0.001730f, 0.003006f, 0.018006f, 0.015541f, 0.007701f, 0.003414f, 0.014780f, 0.008110f, 0.012891f, 0.003372f, -0.019324f, -0.021625f, -0.013895f, -0.005864f, 0.006953f, 0.004580f, -0.006837f, -0.004183f, 0.006940f, 0.003304f, 0.003158f, 0.008746f, 0.014615f, 0.006349f, 0.000643f, -0.007362f, -0.007932f, -0.007131f, -0.008100f, -0.011198f, -0.007933f, -0.000840f, 0.006616f, 0.008465f, 0.011794f, 0.012030f, 0.007163f, -0.000620f, -0.005099f, -0.007062f, -0.005913f, -0.006158f, -0.004034f, -0.003257f, -0.000538f, 0.002771f, 0.004977f, 0.003519f, 0.002611f, 0.001592f, 0.002657f, 0.001215f, -0.000728f, -0.004679f, -0.003913f, -0.001699f, 0.001768f, 0.001984f, 0.000962f, -0.002012f, -0.001206f, -0.000540f, 0.000267f, 0.000000f, 0.001409f, 0.001784f, 0.001194f, -0.000917f, -0.000374f, 0.000156f, 0.001117f, 0.000420f, -0.000294f, -0.001483f, -0.001484f, -0.001668f, -0.000346f, 0.000428f, 0.000642f, -0.000055f, 0.000736f, 0.001315f, 0.002168f, 0.001130f, 0.000007f, - -0.001454f, -0.001607f, -0.001675f, -0.000721f, -0.000382f, 0.000006f, 0.000221f, 0.001077f, 0.000745f, 0.000498f, -0.000116f, -0.000016f, -0.000201f, -0.000059f, -0.000154f, 0.000205f, 0.000009f, -0.000194f, -0.000556f, -0.000217f, -0.000075f, 0.000191f, 0.000010f, 0.000074f, -0.000038f, 0.000064f, 0.000024f, 0.000152f, 0.000066f, 0.000093f, 0.000018f, 0.000018f, -0.000053f, -0.000073f, -0.000088f} - }, - { - {-0.010865f, -0.000140f, 0.002388f, 0.001813f, 0.007766f, 0.001027f, -0.000944f, -0.004995f, 0.011409f, 0.007051f, 0.000378f, -0.001398f, 0.011333f, 0.003853f, -0.003612f, -0.009926f, 0.006346f, -0.002854f, 0.004929f, -0.009447f, 0.000616f, -0.002254f, -0.007018f, -0.001898f, -0.003529f, -0.001302f, 0.000544f, 0.000052f, -0.005116f, -0.003139f, -0.000809f, -0.000981f, -0.003180f, 0.003416f, -0.000323f, -0.003403f, 0.006079f, -0.010099f, -0.004788f, 0.004829f, -0.006063f, 0.000841f, -0.003762f, -0.005542f, 0.003776f, 0.003429f, -0.002973f, 0.003798f, 0.007314f, 0.004120f, -0.003789f, -0.004433f, 0.000801f, 0.001441f, -0.004468f, 0.004847f, 0.008065f, -0.006873f, -0.002196f, 0.003972f, 0.002971f, -0.001635f, -0.002103f, -0.003355f, 0.004445f, 0.001356f, -0.005324f, 0.006060f, 0.002950f, -0.004971f, -0.003730f, 0.006372f, -0.004805f, -0.006137f, -0.011571f, -0.010057f, 0.005476f, 0.006338f, 0.000507f, 0.002784f, -0.001100f, 0.002280f, -0.004287f, 0.006501f, -0.000543f, 0.003010f, -0.002982f, 0.001680f, -0.002717f, -0.002117f, 0.000098f, 0.004166f, -0.000924f, -0.001059f, -0.001870f, 0.000622f, - -0.001414f, 0.000289f, 0.000482f, -0.000859f, -0.001019f, 0.000134f, -0.000063f, -0.000337f, -0.001118f, 0.000564f, -0.000418f, 0.014501f, -0.001406f, -0.002944f, -0.005953f, 0.009277f, -0.004956f, -0.000542f, -0.007559f, -0.008068f, -0.010140f, -0.004780f, 0.007933f, -0.008236f, -0.003084f, -0.002908f, 0.002744f, -0.002063f, -0.011294f, 0.005865f, 0.002818f, 0.021922f, -0.002249f, 0.010247f, -0.002056f, -0.000560f, -0.001002f, 0.001116f, -0.004634f, 0.008478f, -0.002239f, -0.001731f, -0.005135f, -0.000959f, -0.001841f, 0.013146f, 0.002438f, -0.001353f, -0.012346f, -0.001283f, -0.002380f, 0.003702f, -0.007848f, -0.002193f, 0.002117f, 0.001747f, -0.002175f, -0.001347f, -0.004878f, -0.001858f, -0.005862f, -0.002661f, 0.011364f, -0.003371f, 0.003595f, 0.006321f, -0.001540f, -0.006205f, -0.008112f, 0.002079f, 0.001900f, 0.002422f, 0.005037f, 0.005946f, 0.004917f, 0.002816f, -0.002255f, -0.002214f, -0.002609f, -0.011445f, -0.002732f, -0.001191f, 0.005528f, 0.004684f, -0.002822f, -0.000308f, 0.006072f, -0.006365f, 0.002496f, 0.000149f, -0.001582f, -0.003697f, -0.005582f, -0.000102f, 0.003323f, 0.003325f, - 0.003540f, -0.001514f, 0.001456f, -0.001358f, 0.000298f, 0.004941f, 0.002020f, 0.000349f, 0.000046f, -0.000797f, -0.000116f, 0.000280f, 0.000994f, -0.000671f, -0.000692f, 0.002120f, 0.001110f, 0.002159f, 0.002259f, 0.000422f, 0.001258f, -0.000365f, 0.000368f, 0.000121f, -0.001004f, -0.002599f, -0.000459f, -0.019172f, -0.004633f, -0.000324f, -0.004052f, -0.002794f, 0.006792f, -0.013453f, -0.011265f, -0.006576f, -0.004364f, 0.001975f, 0.015238f, -0.003246f, 0.000021f, 0.001876f, -0.010832f, -0.002800f, -0.009038f, -0.001360f, 0.016135f, -0.001196f, -0.007772f, -0.005043f, 0.000254f, 0.003326f, 0.003274f, -0.004468f, -0.020320f, -0.009708f, -0.002675f, -0.007821f, 0.000775f, 0.000412f, 0.008301f, -0.005283f, 0.007379f, 0.001831f, -0.003721f, -0.010870f, -0.009088f, 0.012675f, -0.010391f, 0.006982f, 0.002081f, -0.006654f, -0.002459f, -0.005938f, -0.004241f, 0.005990f, -0.011165f, 0.005841f, 0.002022f, -0.000138f, 0.001931f, 0.000828f, -0.001067f, 0.000292f, -0.005632f, -0.007753f, 0.000611f, -0.002334f, -0.005704f, -0.002285f, -0.008848f, 0.010388f, 0.007137f, 0.001830f, 0.008523f, 0.001046f, - -0.003550f, 0.010554f, -0.005497f, -0.003440f, -0.003520f, 0.008042f, -0.007761f, 0.003516f, 0.005678f, 0.000356f, 0.003538f, 0.008754f, 0.003247f, -0.000223f, 0.000608f, 0.001897f, 0.001505f, -0.001677f, -0.000988f, 0.000150f, -0.000392f, 0.002838f, 0.001416f, 0.002998f, 0.002256f, 0.000884f, -0.002613f, -0.003092f, 0.001947f, -0.000072f, -0.000123f, 0.002900f, -0.001940f, -0.001554f, 0.000009f, 0.000724f, 0.000996f, -0.000247f, -0.003161f, 0.002712f, 0.000774f, -0.002361f, -0.013081f, 0.015700f, 0.017832f, 0.004781f, 0.004688f, -0.005291f, 0.008239f, 0.004061f, -0.010657f, 0.003150f, 0.006623f, -0.012700f, -0.011111f, 0.010892f, -0.009753f, -0.001530f, -0.006337f, 0.010981f, 0.002286f, -0.001404f, -0.004231f, -0.000213f, -0.007345f, 0.006563f, -0.003737f, 0.003925f, -0.001875f, -0.000183f, 0.007091f, 0.002720f, 0.000877f, -0.002922f, 0.006944f, 0.004381f, 0.001968f, -0.000727f, 0.007187f, -0.000688f, 0.001197f, -0.004739f, 0.008790f, 0.001895f, 0.003418f, 0.006428f, -0.018092f, -0.005939f, -0.003686f, -0.006533f, -0.006396f, 0.001716f, 0.009863f, -0.004426f, -0.002823f, -0.005585f, - -0.002606f, 0.002064f, 0.004252f, -0.012449f, -0.000897f, 0.004220f, 0.000348f, -0.001073f, 0.005212f, 0.003404f, -0.011735f, -0.003331f, -0.002677f, 0.007076f, -0.007775f, 0.010034f, 0.010791f, 0.005646f, 0.002099f, -0.005193f, -0.000432f, 0.000789f, 0.007158f, -0.002050f, 0.000716f, 0.000795f, 0.000942f, 0.010736f, 0.001015f, 0.011447f, 0.004088f, 0.000082f, -0.005696f, -0.003244f, 0.004552f, -0.001054f, -0.000182f, 0.000375f, 0.000106f, 0.000969f, 0.004632f, 0.001290f, 0.001698f, 0.000102f, 0.001631f, -0.003926f, -0.000513f, 0.001133f, 0.001342f, -0.001067f, -0.000810f, -0.000057f, 0.001334f, -0.001226f, -0.001044f, 0.001526f, 0.001346f, 0.002830f, 0.001146f, 0.002613f, -0.001807f, 0.000133f, 0.000108f, -0.001143f, 0.002334f, 0.003592f, 0.019992f, -0.003616f, -0.000200f, 0.007350f, 0.004793f, 0.003602f, 0.006802f, 0.017759f, -0.004845f, -0.001547f, -0.016948f, 0.000412f, -0.014549f, -0.018499f, 0.000755f, 0.007986f, -0.023893f, 0.008214f, 0.007943f, 0.004372f, -0.007187f, -0.005689f, -0.007845f, -0.002946f, 0.000562f, 0.000573f, 0.007730f, 0.010143f, -0.001277f, -0.009854f, - -0.005914f, 0.007523f, -0.010553f, -0.005242f, -0.008901f, 0.002006f, -0.014451f, 0.007317f, 0.001264f, -0.000926f, 0.002456f, -0.000411f, -0.003216f, 0.000070f, 0.009493f, -0.010765f, 0.013226f, -0.009898f, -0.001039f, 0.002470f, -0.006479f, -0.005343f, 0.005254f, 0.002577f, -0.001963f, -0.005011f, 0.009909f, 0.004129f, -0.006688f, -0.013612f, 0.001716f, 0.003207f, 0.008127f, -0.000287f, -0.003400f, 0.000733f, 0.004371f, -0.003211f, 0.019136f, -0.006318f, -0.002948f, -0.013513f, -0.008838f, 0.021471f, 0.008845f, -0.004726f, -0.001082f, -0.007419f, -0.008197f, -0.000634f, 0.003130f, 0.000601f, -0.003900f, 0.004657f, 0.002699f, 0.006442f, -0.000526f, -0.004614f, 0.002026f, 0.000215f, -0.001962f, 0.001899f, 0.001967f, -0.000466f, 0.000995f, 0.002555f, 0.000999f, -0.000584f, -0.001762f, 0.001078f, 0.000831f, -0.001779f, 0.003692f, 0.002985f, 0.001135f, -0.001741f, -0.004342f, 0.000333f, -0.000179f, -0.000167f, 0.002175f, -0.002227f, 0.001637f, 0.002375f, 0.000753f, -0.001357f, 0.005584f, 0.012920f, -0.017020f, -0.010015f, 0.012078f, -0.008873f, -0.009452f, -0.010392f, -0.012437f, 0.009112f, - -0.003066f, -0.000276f, -0.002782f, 0.000568f, -0.013849f, -0.002690f, 0.006488f, 0.007075f, 0.001690f, -0.007274f, -0.010605f, -0.008794f, -0.011196f, 0.002383f, 0.013582f, 0.001906f, 0.004464f, 0.004710f, 0.004599f, -0.007834f, 0.008409f, 0.005256f, -0.005831f, -0.004687f, -0.018192f, 0.002901f, 0.004185f, -0.014283f, -0.001040f, 0.004504f, -0.002598f, 0.001860f, -0.001198f, -0.015333f, 0.013209f, -0.014279f, 0.011391f, 0.000690f, 0.005788f, -0.016084f, -0.008947f, -0.014395f, -0.011317f, 0.002187f, -0.003975f, -0.005065f, -0.006339f, 0.000031f, 0.007296f, -0.013317f, -0.000137f, 0.003962f, -0.004234f, -0.014859f, -0.009260f, -0.003054f, 0.002904f, 0.007317f, 0.003238f, -0.012229f, 0.013215f, -0.004163f, -0.002779f, 0.013113f, -0.017027f, -0.005568f, -0.003325f, -0.002997f, 0.020573f, -0.007411f, -0.000263f, -0.007694f, -0.006340f, 0.003778f, 0.002907f, -0.000416f, 0.002279f, -0.001587f, -0.002804f, 0.003874f, 0.000138f, 0.001609f, 0.001723f, 0.004994f, -0.001855f, 0.001484f, 0.001185f, 0.000382f, 0.001383f, -0.005595f, 0.007423f, 0.006700f, -0.002189f, -0.001114f, 0.001129f, -0.000931f, - 0.001343f, 0.000246f, -0.000431f, -0.002677f, 0.001746f, -0.001370f, 0.000728f, 0.006514f, 0.004223f, 0.003511f, -0.002588f, 0.004652f, 0.001928f, -0.001848f, 0.002187f, 0.000727f, 0.001639f, 0.000550f, 0.026277f, -0.023674f, -0.012541f, -0.015814f, 0.011197f, 0.004137f, -0.008142f, 0.005191f, -0.000259f, 0.015582f, 0.000854f, 0.000028f, -0.015294f, 0.010572f, 0.017215f, 0.018069f, 0.014998f, -0.008570f, -0.001430f, 0.002206f, -0.009814f, -0.006752f, 0.002404f, 0.000968f, -0.014081f, -0.006964f, -0.006014f, 0.006684f, -0.001192f, -0.010664f, -0.004983f, 0.003334f, 0.008242f, 0.000907f, -0.003057f, 0.000006f, -0.007540f, -0.000335f, -0.000596f, 0.001015f, -0.016084f, 0.009189f, 0.010844f, 0.002142f, 0.005526f, 0.006419f, -0.013046f, 0.018362f, 0.016513f, 0.002968f, -0.011628f, 0.006499f, -0.004198f, -0.017175f, -0.004470f, -0.005482f, -0.000385f, 0.000961f, -0.000444f, -0.010406f, -0.009335f, -0.021305f, -0.017809f, 0.000173f, 0.010610f, -0.009795f, 0.004406f, 0.001318f, -0.006678f, -0.017363f, -0.001826f, 0.010050f, -0.006819f, 0.009015f, 0.017747f, 0.005370f, -0.007479f, 0.010247f, - -0.000141f, -0.001132f, 0.004781f, 0.007969f, -0.000799f, -0.001439f, 0.002125f, 0.005132f, -0.002955f, -0.011671f, 0.000578f, -0.000366f, 0.001141f, 0.001407f, 0.003805f, 0.008478f, -0.003143f, -0.001532f, 0.006342f, 0.005808f, 0.001166f, 0.000814f, -0.004228f, 0.008173f, 0.000837f, -0.000586f, 0.004832f, 0.001507f, 0.001707f, 0.000800f, 0.004350f, 0.003915f, 0.004327f, 0.007218f, 0.000492f, 0.004294f, 0.000530f, 0.004785f, 0.002210f, 0.002700f, 0.001794f, 0.004528f, 0.003945f, 0.003242f, -0.025246f, 0.002584f, -0.009475f, -0.033791f, -0.026012f, 0.006407f, 0.000164f, -0.005892f, 0.005933f, 0.016137f, -0.002653f, 0.009638f, 0.008537f, 0.004925f, -0.002657f, -0.008856f, 0.007096f, -0.007555f, 0.000835f, -0.006500f, 0.010069f, 0.018462f, -0.016745f, -0.004887f, 0.000971f, 0.006657f, 0.001738f, -0.005279f, -0.003093f, -0.006299f, -0.000541f, -0.007777f, 0.009745f, 0.002070f, -0.011785f, 0.012963f, -0.013138f, -0.004274f, 0.015965f, 0.014028f, 0.011856f, -0.013695f, -0.008982f, -0.012281f, 0.014075f, 0.019052f, -0.000336f, -0.004069f, 0.015142f, -0.022480f, 0.002704f, 0.005891f, - -0.002209f, -0.018911f, 0.016871f, 0.005817f, 0.008553f, 0.015766f, 0.000801f, -0.022802f, 0.005914f, 0.009195f, -0.005849f, -0.001811f, 0.015598f, -0.016334f, -0.015253f, -0.013257f, 0.001551f, 0.020026f, 0.010861f, -0.003043f, 0.023042f, -0.030840f, -0.011362f, 0.000224f, 0.014738f, 0.006738f, -0.004472f, -0.024547f, -0.003842f, -0.009937f, 0.002686f, 0.009131f, 0.023748f, 0.003901f, -0.006745f, 0.002959f, -0.004078f, -0.001741f, -0.007893f, -0.000125f, -0.006508f, 0.002058f, 0.006460f, 0.003512f, 0.005945f, 0.006575f, 0.002117f, 0.001276f, 0.000029f, 0.001024f, -0.003283f, -0.003586f, 0.000285f, 0.006934f, 0.002668f, -0.001053f, 0.001244f, 0.002678f, 0.005699f, 0.000575f, -0.001926f, 0.000784f, -0.001880f, 0.004399f, -0.008515f, -0.005353f, -0.003771f, 0.005127f, 0.004598f, -0.007650f, 0.001654f, -0.027200f, 0.027307f, 0.011044f, -0.000761f, -0.002877f, 0.002212f, 0.004615f, 0.014752f, -0.002908f, 0.001548f, -0.004840f, -0.003519f, 0.008283f, 0.004226f, 0.009632f, 0.004189f, 0.005524f, -0.018607f, -0.007765f, 0.030980f, 0.003057f, 0.009145f, 0.012965f, 0.004812f, -0.010620f, - -0.019623f, 0.005993f, -0.008239f, 0.000645f, 0.006782f, -0.009813f, -0.011524f, 0.013842f, 0.016263f, -0.008609f, -0.006142f, 0.012576f, -0.015653f, 0.006726f, -0.012068f, 0.005302f, -0.011682f, 0.016737f, 0.002256f, -0.002321f, 0.005832f, 0.028821f, 0.007887f, 0.011108f, -0.003354f, 0.001377f, 0.004839f, 0.021258f, -0.001941f, 0.030508f, 0.000820f, 0.014444f, -0.000619f, 0.027529f, 0.009689f, 0.020519f, 0.015556f, -0.003577f, -0.009335f, -0.002595f, -0.010651f, -0.011756f, 0.016106f, -0.003377f, -0.006421f, 0.002406f, 0.000145f, -0.008393f, -0.004127f, 0.002413f, 0.007159f, 0.001895f, -0.013949f, -0.013845f, -0.007225f, -0.014134f, -0.000458f, -0.000412f, -0.004210f, 0.003767f, -0.000366f, 0.005582f, -0.000924f, -0.005835f, 0.001094f, -0.002533f, -0.010648f, -0.006781f, 0.001427f, 0.014010f, -0.006038f, 0.005112f, -0.001677f, -0.000273f, 0.006472f, -0.005035f, 0.002149f, 0.003088f, -0.003665f, -0.002571f, -0.001839f, -0.004167f, 0.001920f, -0.005180f, -0.006666f, -0.002639f, -0.007215f, 0.008836f, -0.002583f, 0.000421f, -0.000834f, -0.000659f, 0.000887f, -0.003095f, 0.001265f, 0.002140f, - 0.001109f, 0.003524f, 0.004796f, 0.000729f, 0.003564f, -0.002832f, -0.007779f, 0.001410f, -0.002185f, 0.003107f, -0.003203f, 0.031936f, -0.008191f, -0.000123f, -0.039017f, -0.001237f, 0.021080f, -0.010803f, 0.018334f, -0.024757f, 0.003760f, 0.002660f, -0.000582f, -0.032880f, -0.001353f, -0.054891f, 0.002731f, -0.005913f, -0.022925f, -0.003863f, 0.003218f, -0.011922f, 0.002221f, 0.014075f, 0.002263f, -0.012443f, 0.002462f, -0.003743f, 0.012326f, -0.013390f, 0.000904f, 0.017813f, 0.004091f, 0.001623f, -0.002523f, 0.013690f, -0.008601f, 0.001581f, 0.000052f, 0.010546f, 0.002113f, -0.018416f, -0.009793f, -0.012941f, 0.015462f, -0.034635f, 0.016943f, 0.014016f, 0.011995f, 0.006811f, 0.002690f, -0.015066f, 0.010949f, -0.022391f, -0.005250f, -0.004573f, -0.004588f, -0.000828f, 0.001519f, 0.007416f, -0.017262f, -0.006643f, 0.029357f, 0.012439f, -0.010586f, -0.012233f, 0.003270f, -0.004979f, 0.009007f, -0.005774f, -0.001722f, -0.009295f, 0.026622f, 0.013699f, -0.009028f, 0.001843f, -0.013437f, 0.003318f, -0.010126f, -0.003343f, 0.010615f, 0.010018f, -0.002992f, 0.019556f, -0.007536f, 0.009798f, - -0.012619f, 0.013714f, 0.002045f, -0.007677f, -0.010619f, -0.015712f, 0.004098f, -0.001556f, 0.007311f, -0.001843f, -0.004641f, 0.003114f, 0.003030f, 0.005009f, 0.003937f, 0.009076f, -0.000286f, 0.003054f, -0.006806f, 0.005740f, -0.004874f, -0.002276f, -0.003647f, -0.000529f, -0.008685f, -0.001300f, 0.003453f, 0.008088f, -0.007463f, -0.003420f, -0.005385f, 0.005615f, 0.004201f, -0.003262f, -0.000650f, -0.005626f, 0.004517f, 0.000745f, 0.020072f, 0.020284f, 0.011734f, 0.010472f, -0.010005f, 0.011661f, 0.019490f, -0.014641f, -0.000621f, -0.037855f, 0.021537f, 0.014680f, -0.005484f, 0.008664f, -0.002535f, 0.002936f, 0.013367f, -0.008539f, 0.020968f, -0.019084f, 0.001726f, 0.023653f, 0.010285f, 0.001384f, 0.018207f, -0.006554f, 0.008304f, 0.004756f, 0.009703f, 0.016144f, -0.009693f, -0.002011f, 0.029794f, 0.014885f, -0.000768f, 0.004063f, -0.020377f, 0.027459f, -0.023288f, -0.001522f, 0.023984f, 0.007421f, 0.025830f, -0.016343f, 0.004043f, -0.001110f, -0.006469f, 0.003426f, -0.025185f, -0.017636f, 0.023504f, -0.011819f, -0.005183f, -0.008040f, -0.026778f, 0.018882f, -0.006408f, -0.004461f, - -0.011935f, 0.011601f, 0.026958f, -0.021395f, -0.004474f, 0.018222f, -0.020186f, -0.008789f, 0.016188f, 0.022729f, -0.037761f, -0.010072f, -0.003359f, 0.016026f, -0.000701f, 0.018723f, -0.004688f, -0.013769f, 0.000780f, 0.009956f, 0.024166f, 0.012231f, -0.016467f, -0.000873f, 0.011821f, -0.024245f, -0.014967f, -0.004657f, -0.012543f, -0.012631f, -0.001620f, 0.011482f, -0.011009f, 0.002679f, 0.011845f, 0.003320f, 0.002012f, 0.008371f, -0.002208f, 0.005389f, 0.005073f, 0.005103f, 0.002801f, -0.000957f, -0.007430f, -0.002486f, -0.002164f, -0.006646f, -0.003138f, 0.001036f, 0.000725f, -0.000991f, 0.000910f, 0.007341f, -0.006177f, -0.001950f, -0.004620f, 0.003526f, 0.003317f, -0.001428f, -0.005136f, -0.011072f, 0.005465f, 0.004237f, 0.007084f, 0.001986f, 0.001639f, -0.000769f, -0.007006f, 0.002794f, -0.002885f, -0.003136f, -0.002119f, 0.001923f, -0.001355f, 0.019681f, 0.041719f, 0.008057f, -0.024685f, -0.008801f, 0.008177f, -0.054747f, 0.001709f, 0.000329f, -0.008591f, -0.002690f, 0.025265f, -0.041315f, 0.009063f, 0.019313f, -0.015219f, 0.017118f, 0.031903f, 0.007920f, -0.029534f, 0.007993f, - -0.007460f, -0.000529f, -0.028954f, -0.008728f, 0.026349f, -0.002954f, 0.024155f, -0.006356f, -0.008516f, 0.003971f, -0.020510f, -0.011496f, -0.014777f, -0.010914f, -0.008096f, 0.019757f, -0.021854f, 0.003564f, 0.038056f, 0.025744f, 0.008544f, -0.038713f, 0.006388f, 0.025437f, 0.010583f, 0.001536f, -0.013870f, -0.016794f, -0.041409f, -0.028541f, 0.005848f, -0.014109f, -0.014198f, -0.000785f, 0.017604f, 0.012544f, -0.012499f, 0.000575f, 0.025070f, -0.009645f, -0.004325f, 0.001177f, 0.032976f, 0.001293f, -0.001737f, 0.016845f, 0.005187f, -0.037574f, 0.010471f, 0.010934f, -0.000265f, -0.031108f, 0.013063f, 0.018287f, -0.013777f, -0.009724f, -0.025630f, 0.006844f, -0.009466f, 0.009714f, 0.004768f, -0.005972f, -0.010919f, 0.007096f, 0.003142f, 0.010934f, -0.005511f, 0.017028f, 0.005911f, -0.011605f, 0.001306f, -0.000557f, -0.016097f, 0.000348f, 0.001199f, -0.000007f, -0.000426f, -0.008386f, -0.007399f, -0.003349f, -0.000305f, 0.010696f, 0.003429f, 0.005616f, 0.008516f, -0.003890f, -0.005223f, 0.004141f, -0.008441f, -0.007417f, -0.000425f, -0.000367f, 0.002484f, -0.002421f, 0.001769f, 0.005287f, - 0.005460f, 0.000742f, -0.003429f, -0.000750f, -0.000562f, -0.000894f, -0.000066f, -0.001341f, 0.000533f, -0.000145f, 0.007115f, -0.004125f, -0.005350f, 0.013257f, 0.009315f, -0.001236f, 0.003520f, -0.005941f, 0.002535f, 0.000186f, -0.002506f, -0.012602f, 0.042830f, 0.002079f, -0.008985f, -0.000882f, 0.018773f, -0.009476f, 0.004971f, -0.004923f, 0.004221f, 0.016060f, -0.030077f, 0.031195f, 0.035374f, 0.009754f, 0.014815f, -0.012359f, 0.019946f, 0.046668f, 0.001260f, -0.005651f, -0.008908f, 0.019712f, -0.007338f, -0.011629f, -0.004214f, 0.006819f, -0.023629f, 0.010138f, -0.020840f, 0.023295f, 0.005115f, 0.023461f, -0.015125f, 0.021362f, 0.006206f, 0.028043f, 0.004459f, 0.005701f, -0.010358f, 0.017369f, 0.004192f, -0.005846f, 0.025204f, -0.010161f, -0.018336f, 0.035716f, 0.028471f, 0.010351f, 0.026901f, 0.039106f, 0.047480f, -0.015080f, -0.015165f, -0.017076f, 0.005755f, -0.022149f, 0.025636f, -0.003439f, -0.002566f, -0.036913f, 0.008317f, 0.041376f, 0.042181f, -0.001875f, -0.005752f, -0.029321f, 0.000261f, 0.027392f, -0.014300f, -0.017463f, 0.015435f, 0.002227f, -0.015256f, 0.005123f, - -0.002635f, -0.009423f, -0.002264f, -0.008112f, -0.000502f, 0.015808f, 0.011739f, -0.003480f, 0.002688f, -0.004090f, -0.016187f, -0.021080f, -0.004064f, 0.010187f, 0.004039f, 0.014507f, -0.003134f, -0.014076f, -0.003961f, 0.015054f, -0.007336f, 0.008480f, 0.013892f, -0.014342f, -0.003923f, -0.001577f, 0.003438f, -0.000963f, 0.009229f, 0.006678f, 0.003241f, -0.014288f, 0.003422f, 0.007523f, 0.002197f, 0.002980f, 0.004950f, -0.012695f, -0.005984f, -0.000179f, -0.000782f, -0.006822f, -0.016373f, -0.005449f, 0.001297f, 0.008231f, 0.001722f, -0.006836f, -0.007883f, 0.002918f, -0.056092f, -0.039087f, 0.021112f, 0.008410f, -0.029225f, 0.003409f, 0.013460f, -0.026638f, -0.016602f, -0.011295f, 0.032553f, 0.014759f, 0.010669f, -0.009897f, -0.007473f, -0.007802f, -0.019651f, -0.026410f, -0.046697f, 0.024856f, 0.021410f, -0.009668f, 0.053583f, 0.025872f, 0.051470f, 0.035364f, 0.003686f, -0.016031f, 0.013957f, 0.006594f, 0.023654f, 0.026999f, 0.029920f, -0.003921f, -0.004742f, 0.012882f, -0.012880f, -0.002773f, -0.011295f, -0.021736f, -0.035780f, -0.010255f, 0.037364f, -0.008837f, -0.014268f, -0.020585f, - 0.015153f, 0.022645f, 0.015348f, 0.001767f, 0.022228f, 0.042688f, -0.024801f, -0.011243f, -0.018974f, -0.013832f, -0.040352f, -0.009704f, 0.010829f, -0.018304f, -0.014038f, -0.046761f, -0.066480f, 0.007622f, -0.043624f, -0.069182f, -0.049738f, -0.020871f, 0.045486f, 0.015812f, 0.027968f, 0.020839f, -0.045768f, -0.019289f, 0.004540f, 0.023471f, -0.022462f, -0.027032f, -0.025825f, -0.007964f, 0.014329f, -0.015445f, -0.057149f, -0.036088f, -0.007745f, -0.011465f, -0.003591f, -0.008338f, 0.033154f, 0.029962f, 0.031398f, 0.031654f, 0.011039f, -0.000054f, 0.012402f, 0.003506f, -0.000397f, 0.009496f, -0.025403f, -0.009849f, 0.011896f, 0.015420f, -0.000089f, -0.008280f, -0.008782f, 0.004008f, -0.013532f, -0.020402f, 0.019549f, -0.015161f, -0.007132f, 0.001873f, -0.017255f, -0.016724f, -0.029887f, -0.011764f, -0.006515f, 0.002326f, 0.026180f, -0.006413f, -0.003106f, -0.007948f, 0.013696f, -0.006732f, 0.001397f, 0.012555f, 0.001709f, -0.008658f, 0.006425f, 0.012509f, -0.006889f, -0.001757f, 0.000338f, -0.004219f, 0.007648f, -0.106329f, -0.015787f, 0.035607f, -0.035498f, 0.016099f, -0.013186f, -0.057178f, - -0.017099f, 0.063493f, 0.079633f, -0.040624f, 0.002503f, -0.013272f, -0.063080f, -0.049957f, -0.047222f, -0.050388f, -0.026510f, -0.032519f, -0.001762f, 0.012115f, -0.007958f, 0.014244f, 0.013104f, -0.019966f, -0.004783f, -0.027812f, 0.013126f, -0.044427f, -0.040061f, 0.010959f, 0.008036f, -0.011295f, -0.014094f, 0.036842f, -0.009585f, 0.050730f, 0.011896f, 0.047108f, -0.030217f, 0.021148f, 0.013903f, 0.056829f, 0.030663f, 0.020655f, 0.006206f, 0.009557f, -0.005733f, 0.017495f, 0.023806f, -0.016890f, -0.024294f, 0.040121f, -0.004560f, -0.047802f, -0.093060f, -0.111791f, -0.080606f, 0.014623f, 0.000657f, -0.104026f, 0.034942f, 0.019006f, 0.027094f, -0.034752f, 0.005309f, 0.013469f, 0.005430f, 0.055040f, 0.055708f, 0.110967f, 0.037223f, -0.057495f, -0.074517f, -0.045143f, -0.040861f, -0.047000f, -0.042109f, -0.000406f, 0.024110f, 0.032624f, -0.019651f, 0.042606f, -0.034970f, -0.048621f, -0.038042f, -0.024609f, -0.018718f, -0.037760f, 0.024939f, -0.001621f, 0.023870f, 0.018947f, 0.003262f, 0.041864f, -0.020847f, -0.008278f, -0.040068f, 0.014729f, 0.022151f, -0.002341f, -0.003169f, 0.013329f, - -0.038492f, 0.002478f, -0.013424f, 0.008490f, -0.018346f, -0.025717f, 0.016626f, 0.000261f, -0.010733f, -0.003212f, 0.019453f, -0.013973f, 0.010232f, -0.012937f, 0.011591f, 0.010785f, -0.005165f, -0.012838f, 0.009072f, 0.010584f, -0.028392f, 0.012972f, -0.007015f, -0.007455f, -0.008540f, 0.007170f, -0.019135f, -0.008759f, 0.060236f, -0.016116f, -0.113824f, -0.032520f, 0.093697f, -0.012961f, 0.020889f, 0.013381f, 0.017482f, 0.032855f, 0.026854f, 0.009422f, -0.018594f, -0.006845f, 0.004625f, -0.020202f, -0.004751f, 0.034490f, -0.030854f, -0.018272f, -0.030936f, -0.007316f, 0.005265f, 0.004056f, 0.008127f, 0.016202f, -0.023556f, 0.021057f, 0.051240f, -0.000797f, -0.030018f, 0.002877f, -0.019672f, -0.006601f, 0.030348f, -0.031938f, 0.003541f, 0.010328f, 0.037117f, 0.054096f, -0.034384f, -0.019353f, 0.020767f, 0.003100f, 0.005772f, 0.006492f, -0.022867f, -0.057831f, -0.010519f, -0.026771f, 0.052698f, -0.100076f, -0.066141f, -0.026872f, -0.011109f, 0.029299f, 0.005891f, -0.035110f, -0.006166f, -0.040487f, -0.044295f, -0.015442f, -0.032099f, 0.006169f, 0.025930f, 0.121015f, 0.022110f, -0.017556f, - -0.077889f, -0.063430f, 0.018652f, -0.001559f, -0.073158f, 0.039742f, 0.038814f, -0.073700f, -0.001712f, 0.019710f, 0.021067f, 0.080367f, 0.034756f, 0.017147f, -0.079361f, -0.040275f, -0.054889f, 0.050080f, -0.005394f, -0.015783f, -0.009237f, 0.015967f, 0.051907f, 0.044917f, -0.023837f, -0.046369f, -0.068946f, 0.017130f, 0.040053f, -0.013775f, -0.007500f, 0.036216f, 0.019907f, 0.031642f, 0.007366f, 0.011628f, -0.026906f, -0.007332f, -0.013011f, 0.014009f, 0.013484f, -0.003140f, -0.006685f, -0.003372f, 0.018341f, 0.021819f, -0.031669f, 0.018585f, 0.013035f, 0.026267f, -0.017096f, -0.010842f, 0.015466f, 0.006300f, -0.023117f, -0.001736f, 0.025689f, 0.005617f, -0.020212f, -0.006627f, 0.002671f, -0.038723f, -0.133883f, 0.020337f, 0.022029f, -0.003406f, -0.001092f, -0.009337f, -0.037767f, 0.016305f, -0.007476f, 0.069893f, -0.069966f, -0.013458f, 0.073606f, -0.002310f, -0.047973f, -0.005002f, 0.043860f, 0.053071f, 0.033025f, -0.008335f, 0.038300f, -0.027155f, 0.026210f, -0.010435f, -0.008606f, -0.023368f, 0.041852f, 0.028772f, -0.025625f, -0.011278f, -0.002877f, 0.042390f, -0.002901f, 0.005374f, - -0.025593f, 0.028875f, 0.019119f, -0.029710f, 0.056636f, 0.003445f, -0.049052f, 0.045151f, -0.053376f, -0.027734f, 0.050493f, -0.104717f, -0.066357f, 0.058388f, -0.035508f, 0.043527f, -0.066004f, 0.015874f, 0.025559f, -0.035897f, 0.002394f, -0.001971f, -0.068152f, -0.015115f, 0.072389f, 0.076295f, -0.084755f, -0.027536f, 0.027163f, -0.067820f, 0.089765f, 0.089831f, 0.013732f, -0.126317f, -0.065791f, 0.136247f, -0.070478f, -0.013327f, 0.110761f, -0.063459f, -0.130367f, -0.028542f, 0.119687f, -0.024598f, -0.085592f, -0.020334f, -0.157095f, -0.006260f, 0.129144f, -0.045719f, -0.126774f, -0.012020f, -0.034843f, -0.016246f, 0.039116f, -0.003566f, -0.000429f, -0.045591f, -0.029396f, -0.013849f, 0.052309f, -0.064023f, 0.004293f, 0.011454f, -0.019270f, 0.003317f, 0.062067f, -0.037978f, -0.047912f, -0.005451f, 0.018291f, 0.039295f, -0.014097f, 0.020305f, 0.030272f, 0.004409f, -0.043135f, -0.022541f, 0.002135f, -0.034196f, -0.016010f, 0.068594f, -0.024336f, -0.064762f, -0.016518f, 0.039522f, 0.017036f, -0.003865f, 0.009686f, -0.058431f, -0.033196f, 0.046506f, 0.068356f, 0.009315f, -0.048686f, -0.023161f, - 0.003296f, 0.018981f, 0.034837f, 0.004674f, -0.019098f, -0.074060f, -0.069886f, -0.001558f, -0.088229f, -0.025833f, -0.037505f, -0.035145f, -0.026656f, 0.057729f, -0.006278f, -0.018034f, -0.024219f, 0.011587f, -0.030996f, -0.073268f, 0.057051f, 0.018354f, 0.049280f, 0.015854f, 0.050961f, -0.019845f, -0.031494f, 0.011743f, -0.053302f, 0.041858f, -0.048280f, -0.009750f, 0.031809f, -0.036158f, -0.007741f, -0.021763f, -0.058461f, 0.009301f, -0.044146f, -0.031348f, -0.038524f, -0.028026f, -0.017620f, -0.038675f, 0.006900f, 0.043986f, -0.029414f, -0.009931f, 0.005353f, 0.040595f, -0.018262f, 0.014744f, -0.041081f, 0.067261f, 0.020848f, 0.029175f, 0.018254f, 0.064552f, -0.003776f, -0.074588f, 0.016566f, 0.027903f, -0.020917f, 0.000365f, 0.039554f, -0.051679f, -0.051891f, -0.060067f, 0.052384f, 0.016167f, -0.074688f, 0.029732f, -0.049310f, -0.008980f, -0.069708f, 0.031487f, 0.049448f, 0.010909f, -0.077224f, 0.044006f, 0.035762f, -0.009180f, -0.067892f, 0.018987f, -0.040989f, -0.013336f, -0.003008f, -0.020033f, 0.033545f, -0.029641f, -0.055095f, 0.028017f, -0.012360f, 0.023809f, -0.000389f, -0.001359f, - -0.000453f, -0.014239f, -0.017237f, 0.012337f, 0.049013f, -0.005272f, -0.069511f, -0.018484f, 0.028748f, -0.033576f, -0.014760f, 0.034038f, -0.012712f, -0.004054f, -0.027916f, 0.055162f, 0.031791f, -0.015304f, 0.024284f, -0.003599f, 0.010797f, 0.044914f, -0.008218f, -0.037902f, 0.015938f, 0.025985f, -0.020188f, 0.032608f, -0.005393f, 0.020433f, 0.002012f, -0.013578f, 0.026297f, 0.039482f, -0.022416f, -0.039874f, 0.015654f, 0.025883f, -0.020372f, -0.003199f, 0.022932f, 0.008925f, -0.015958f, -0.015972f, 0.020309f, 0.065400f, 0.123130f, -0.030003f, 0.060919f, 0.011605f, -0.029440f, -0.055476f, -0.032428f, 0.071473f, -0.023797f, 0.013011f, 0.027600f, -0.007582f, 0.065921f, -0.010070f, 0.051685f, 0.053941f, -0.066866f, 0.033992f, -0.017681f, 0.001270f, 0.024211f, 0.019925f, -0.002490f, 0.010468f, 0.019570f, 0.066089f, 0.068127f, 0.052351f, -0.038782f, -0.013531f, -0.091018f, -0.003112f, 0.021274f, 0.040620f, 0.009285f, -0.075531f, 0.032761f, -0.045491f, 0.058154f, -0.053049f, -0.036981f, 0.003416f, -0.044213f, -0.007952f, -0.025578f, 0.089364f, -0.049180f, -0.024415f, -0.094189f, -0.031004f, - -0.049496f, 0.132427f, 0.080655f, -0.028400f, -0.089578f, -0.096358f, -0.057102f, 0.065666f, 0.086152f, 0.043304f, 0.012650f, -0.115551f, -0.053517f, 0.037423f, 0.032266f, 0.004587f, 0.041611f, -0.024313f, -0.075825f, 0.035449f, -0.128607f, 0.139430f, -0.013093f, -0.090836f, 0.210366f, 0.029744f, 0.073213f, 0.125655f, -0.208829f, -0.150900f, 0.041707f, -0.012837f, 0.031964f, 0.045299f, -0.130516f, -0.010107f, 0.026409f, 0.002187f, 0.109442f, 0.007322f, -0.057198f, -0.006423f, 0.058878f, -0.034564f, 0.025783f, 0.029773f, 0.001308f, -0.024363f, 0.028873f, -0.076461f, 0.058155f, -0.015277f, -0.024073f, 0.032310f, 0.008872f, 0.001890f, 0.034534f, -0.008563f, 0.020759f, -0.004652f, 0.013394f, -0.010364f, -0.039742f, 0.023798f, 0.017080f, 0.022484f, -0.000023f, 0.000251f, 0.015924f, 0.008312f, 0.006326f, 0.046064f, 0.051876f, 0.002553f, 0.034089f, -0.032224f, 0.005069f, -0.021293f, 0.039405f, 0.035316f, 0.005808f, -0.010698f, -0.023206f, -0.055517f, -0.024010f, 0.004386f, -0.054830f, 0.036883f, -0.077410f, 0.047707f, -0.031948f, 0.078371f, -0.035554f, -0.003752f, 0.044548f, 0.007855f, - 0.003757f, -0.020321f, -0.017687f, 0.001960f, -0.030231f, 0.033040f, -0.004038f, 0.035097f, -0.027755f, -0.027246f, 0.009066f, 0.001333f, -0.028148f, 0.017573f, -0.003721f, 0.015338f, -0.008784f, -0.007589f, 0.014489f, -0.014049f, -0.001352f, 0.010940f, -0.005914f, -0.006703f, 0.055466f, -0.003828f, -0.018872f, -0.009968f, 0.026213f, -0.002402f, -0.030567f, 0.016124f, 0.032346f, 0.006616f, 0.000535f, -0.019249f, 0.006598f, -0.015575f, 0.014683f, 0.039647f, -0.014318f, 0.018166f, -0.015195f, -0.004380f, -0.016625f, -0.007656f, 0.010164f, 0.012892f, -0.023424f, 0.014039f, 0.003847f, -0.002839f, -0.023434f, 0.004081f, 0.008105f, -0.017027f, 0.024551f, 0.020987f, -0.042116f, 0.010814f, -0.038691f, -0.043460f, 0.029653f, -0.015370f, 0.035878f, 0.019893f, 0.000747f, 0.018732f, -0.006149f, -0.022311f, -0.005747f, 0.001547f, 0.024863f, -0.011175f, 0.007346f, 0.010619f, -0.014904f, -0.002409f, 0.008358f, -0.004139f, -0.003220f, 0.014864f, -0.000598f, 0.005870f, -0.012481f, 0.005309f, -0.001690f, -0.012122f, 0.023049f, 0.002377f, 0.018717f, -0.009057f, 0.015273f, -0.007558f, 0.000604f, -0.012025f, - 0.010021f, -0.005644f, 0.022751f, -0.006870f, 0.021471f, -0.022239f, 0.004451f, 0.001908f, -0.005337f, 0.001221f, 0.002171f, 0.017969f, -0.001386f, -0.020119f, 0.012986f, -0.011112f, 0.001545f, 0.013006f, -0.013432f, 0.022371f, -0.045642f, 0.095849f, 0.017940f, 0.023413f, -0.012393f, 0.008604f, -0.002979f, 0.018015f, 0.005553f, 0.040749f, 0.002629f, -0.022382f, 0.013292f, -0.014666f, 0.006125f, 0.008206f, -0.018968f, 0.000820f, 0.004351f, -0.020478f, 0.018331f, 0.004576f, -0.008513f, 0.024721f, -0.009078f, 0.009664f, -0.007792f, 0.004462f, 0.004573f, 0.002100f, -0.003303f, -0.007538f, -0.003570f, 0.003309f, 0.000447f, -0.004326f, -0.012277f, 0.008863f, -0.008298f, 0.004334f, 0.007788f, -0.008461f, 0.001598f, -0.007915f, 0.002060f, -0.012452f, -0.020058f, 0.020373f, -0.011194f, -0.005503f, 0.008566f, 0.003833f, -0.003662f, 0.002158f, 0.017516f, -0.019657f, 0.008281f, -0.007522f, 0.015158f, -0.016552f, 0.009171f, 0.004405f, -0.003028f, 0.003397f, 0.000248f, 0.000035f, 0.007353f, -0.010540f, 0.005697f, 0.004942f, -0.002939f, -0.001205f, 0.013244f, -0.002251f, 0.004428f, -0.015715f, - 0.020808f, -0.016429f, -0.000373f, 0.010276f, -0.009571f, 0.006951f, 0.002218f, 0.002326f, -0.009999f, 0.007775f, 0.008179f, -0.005414f, 0.003168f, 0.003918f, -0.007155f, 0.002271f, 0.003349f, -0.001733f, 0.007173f, 0.000113f, -0.000274f, -0.000996f, 0.006430f, 0.004827f, -0.004257f, 0.005467f, -0.003030f, 0.002328f, 0.002774f, -0.000935f, 0.008030f, -0.003890f, -0.000040f, 0.004963f, -0.006526f, 0.000285f, -0.000749f, -0.004779f, 0.000549f, 0.004411f, -0.001468f, -0.004059f, 0.008007f, -0.005416f, 0.001132f, 0.018165f, -0.085325f, -0.211813f, 0.045752f, 0.176142f, 0.119061f, 0.248441f, -0.081261f, -0.069451f, -0.142942f, -0.228432f, -0.022590f, 0.071215f, 0.093846f, 0.122512f, 0.061743f, 0.006791f, -0.020044f, -0.052945f, -0.075560f, -0.011424f, -0.020200f, 0.007462f, 0.017317f, -0.000873f, 0.004332f, 0.009162f, 0.004025f, 0.029946f, 0.035494f, 0.022109f, -0.004104f, 0.004139f, -0.026320f, -0.055122f, -0.058814f, -0.028786f, -0.038589f, 0.031791f, 0.058486f, 0.062155f, 0.068155f, 0.037417f, -0.011070f, -0.026886f, -0.050164f, -0.052905f, -0.036837f, -0.020656f, -0.002426f, 0.013419f, - 0.025667f, 0.027654f, 0.023173f, 0.020058f, -0.003483f, 0.005430f, -0.005967f, 0.002707f, -0.004498f, -0.002681f, -0.001643f, -0.018717f, -0.019729f, -0.014194f, -0.029711f, 0.000101f, -0.005639f, 0.003800f, 0.050395f, 0.066527f, 0.022383f, 0.022591f, -0.018284f, -0.036457f, -0.025304f, -0.043912f, -0.035380f, 0.012526f, -0.003088f, -0.021246f, 0.016337f, 0.017637f, 0.020884f, 0.049827f, 0.020648f, 0.021906f, 0.005378f, -0.026699f, -0.026451f, -0.021521f, -0.023634f, -0.029768f, -0.025546f, -0.015096f, 0.004649f, 0.033318f, 0.050024f, 0.046986f, 0.018964f, 0.009573f, -0.012258f, -0.022599f, -0.020461f, -0.022394f, -0.026029f, -0.011777f, -0.010862f, -0.000779f, 0.008726f, 0.006848f, 0.020157f, 0.026923f, 0.019351f, 0.013339f, 0.004618f, -0.001572f, -0.012735f, -0.013008f, -0.020513f, -0.022919f, -0.018148f, -0.016031f, -0.004116f, 0.017345f, 0.025706f, 0.027855f, 0.024611f, 0.010175f, 0.004547f, -0.012228f, -0.019634f, -0.010323f, -0.014508f, -0.019578f, -0.014920f, 0.002872f, 0.013423f, 0.012751f, 0.007099f, 0.008180f, 0.007266f, 0.005720f, 0.001691f, -0.001207f, -0.002027f, -0.005043f, - -0.006661f, -0.006024f, -0.007180f, -0.008322f, -0.004492f, 0.003975f, 0.006968f, 0.009008f, 0.007508f, 0.005505f, 0.001877f, 0.000251f, -0.002197f, -0.003133f, -0.004060f, -0.004411f, -0.005010f, -0.002847f, -0.001115f, 0.001794f, 0.002917f, 0.002928f, 0.002497f, 0.002274f, 0.000469f, 0.000075f, -0.000544f, 0.000361f, 0.000342f, 0.001172f, -0.001653f, -0.002936f, -0.002564f, -0.001400f, -0.001317f, 0.000626f, 0.001798f, 0.002369f, 0.001399f, -0.000753f, -0.001000f, 0.001380f, 0.002198f, 0.001888f, -0.000591f, -0.002317f, -0.002728f, -0.000981f, -0.000071f, 0.000510f, -0.000317f, -0.000506f, -0.000662f, 0.000171f, 0.000655f, 0.001602f, 0.001247f, 0.001221f, 0.000850f, 0.000241f, -0.000803f, -0.001177f, -0.001590f, -0.001340f, -0.001388f, -0.000811f, 0.000289f, 0.001465f, 0.001407f, 0.001348f, 0.000809f, 0.000564f, 0.000339f, -0.000205f, -0.001098f, -0.001007f, -0.000821f, -0.000444f, -0.000162f, 0.000229f, 0.000008f, 0.000038f, 0.000144f, 0.000389f, 0.000446f, 0.000376f, 0.000074f, -0.000104f, -0.000205f, -0.000158f, -0.000098f, -0.000042f, -0.000048f}, - {-0.012004f, 0.001487f, 0.003775f, 0.003656f, 0.018818f, 0.005091f, 0.003952f, -0.005613f, 0.000693f, -0.009588f, 0.002214f, 0.008749f, -0.004481f, 0.000389f, -0.001882f, -0.004734f, -0.007604f, 0.005819f, -0.012700f, -0.006426f, -0.006388f, 0.006841f, 0.007500f, 0.003936f, 0.001773f, 0.005421f, 0.004473f, 0.008974f, -0.003157f, 0.003122f, 0.005573f, 0.001158f, 0.001817f, -0.006598f, -0.002858f, -0.002777f, -0.002500f, 0.006057f, -0.011683f, 0.001919f, -0.004066f, 0.012184f, 0.000264f, -0.002230f, -0.003092f, -0.005066f, -0.001705f, -0.005286f, -0.015400f, -0.004896f, -0.003038f, -0.002514f, -0.003476f, 0.001559f, -0.002909f, -0.000755f, -0.001018f, 0.005352f, 0.002380f, -0.000727f, 0.003411f, -0.003043f, 0.006572f, -0.004356f, -0.007184f, 0.006882f, 0.007220f, -0.003164f, -0.006901f, 0.000628f, 0.003737f, 0.002810f, 0.003244f, -0.003287f, 0.000012f, 0.002625f, 0.003557f, 0.001533f, -0.001014f, 0.000406f, 0.004427f, 0.008553f, 0.004129f, -0.001095f, -0.000133f, -0.002070f, -0.002182f, 0.001759f, -0.002864f, 0.001708f, 0.002090f, -0.000868f, -0.000310f, 0.000901f, 0.000794f, -0.000901f, - 0.000685f, 0.000453f, -0.003974f, 0.000587f, 0.000277f, 0.001185f, 0.000671f, -0.001548f, 0.001395f, 0.001087f, -0.000133f, 0.017010f, -0.003232f, -0.001674f, 0.001789f, 0.004664f, -0.012607f, 0.007784f, -0.014957f, -0.000714f, -0.007262f, -0.001103f, -0.004814f, -0.001167f, -0.001204f, 0.007455f, -0.006361f, 0.008078f, -0.008507f, -0.009287f, 0.003877f, 0.012369f, -0.014671f, -0.004103f, -0.007118f, 0.000063f, -0.003723f, 0.003915f, 0.005205f, 0.002614f, 0.005303f, -0.008540f, 0.000268f, 0.011893f, 0.004645f, 0.001481f, -0.008704f, -0.012412f, -0.007489f, 0.001860f, -0.006373f, -0.003612f, 0.002375f, 0.007998f, -0.007285f, -0.007172f, 0.002849f, -0.005254f, 0.009185f, 0.003054f, -0.000993f, 0.006470f, 0.006136f, -0.000045f, 0.010328f, 0.005094f, 0.003204f, 0.002711f, 0.006755f, 0.010669f, -0.007095f, 0.002010f, 0.002897f, -0.007565f, 0.000624f, 0.006078f, -0.002425f, 0.015425f, -0.004821f, -0.004140f, -0.003266f, 0.005664f, 0.007821f, -0.010065f, -0.004132f, 0.002693f, -0.001868f, 0.002425f, 0.000921f, -0.004432f, 0.001912f, 0.000901f, -0.003287f, -0.005353f, 0.002140f, 0.001452f, - 0.004825f, 0.000372f, 0.001453f, 0.002200f, -0.000270f, -0.001634f, 0.003521f, 0.000175f, -0.000068f, 0.003041f, -0.001725f, 0.001453f, 0.004053f, -0.000385f, -0.000944f, 0.000739f, -0.000670f, 0.001230f, -0.002574f, -0.000828f, -0.001230f, 0.000127f, -0.000441f, 0.001569f, 0.000111f, -0.001614f, 0.000010f, -0.021880f, -0.003523f, -0.004859f, -0.003880f, -0.001937f, -0.002657f, 0.011676f, 0.013953f, -0.003158f, 0.011389f, 0.004360f, -0.006261f, 0.002986f, -0.009500f, 0.001703f, 0.002037f, -0.012778f, -0.001873f, 0.002012f, 0.002259f, 0.008877f, -0.001683f, 0.007714f, -0.005133f, -0.009797f, -0.010347f, -0.002944f, -0.005225f, -0.007842f, 0.008161f, -0.003169f, -0.001554f, -0.001403f, 0.001720f, 0.004454f, -0.012540f, 0.000071f, 0.001772f, -0.005931f, 0.014987f, 0.001194f, -0.003673f, -0.003222f, 0.016001f, -0.001120f, 0.002049f, 0.009476f, 0.000299f, 0.005801f, 0.002268f, 0.000558f, 0.008838f, -0.000027f, -0.006153f, 0.007941f, 0.004265f, 0.005110f, 0.007194f, 0.002397f, -0.005809f, 0.004174f, 0.005906f, 0.005743f, 0.008852f, 0.000079f, -0.008164f, -0.006515f, 0.010378f, 0.014445f, - -0.013143f, 0.002670f, -0.003466f, -0.002293f, 0.003038f, 0.005533f, 0.005302f, -0.004182f, -0.001676f, -0.004040f, -0.006771f, -0.005907f, -0.002163f, -0.003745f, -0.005818f, 0.001358f, -0.001576f, 0.002243f, 0.001900f, -0.001784f, 0.001063f, 0.000386f, -0.004725f, 0.001629f, -0.003190f, -0.005728f, 0.000400f, -0.001669f, -0.002406f, -0.002557f, -0.000722f, 0.001071f, -0.000863f, 0.001689f, -0.001094f, -0.001914f, -0.002658f, -0.002437f, -0.001049f, 0.000472f, 0.001915f, -0.003706f, -0.016129f, 0.017185f, 0.015920f, 0.012002f, -0.008377f, 0.009382f, 0.016941f, -0.004264f, 0.013238f, 0.004982f, 0.001986f, -0.002064f, 0.014597f, 0.006900f, -0.003421f, -0.010472f, 0.006070f, -0.004340f, -0.005602f, 0.005914f, 0.006983f, 0.003064f, -0.010398f, 0.001687f, 0.009332f, -0.004554f, 0.003163f, -0.020448f, 0.002944f, -0.001645f, 0.009850f, 0.002410f, -0.004244f, -0.006165f, 0.012607f, -0.010853f, 0.000878f, -0.008765f, 0.001024f, -0.002684f, 0.007042f, -0.001467f, -0.002297f, -0.010740f, -0.002578f, -0.001893f, 0.013338f, 0.000667f, -0.012202f, -0.000449f, -0.000674f, 0.004174f, 0.006378f, -0.005426f, - 0.000024f, -0.006924f, 0.007394f, -0.001618f, 0.008937f, -0.004818f, 0.013305f, 0.006613f, -0.014684f, 0.015565f, -0.002243f, -0.010745f, 0.001831f, 0.014225f, 0.002889f, 0.002195f, -0.011500f, -0.000744f, -0.004455f, -0.006208f, -0.006024f, 0.000555f, 0.005423f, 0.007010f, 0.003806f, 0.003836f, -0.004488f, 0.003388f, -0.003890f, -0.000432f, -0.000208f, -0.001785f, -0.000747f, 0.004060f, -0.006393f, 0.001756f, -0.000624f, 0.000577f, 0.002149f, 0.001765f, -0.000172f, 0.002799f, 0.000305f, -0.004190f, -0.004557f, 0.002700f, 0.001234f, -0.000160f, -0.003009f, -0.000571f, 0.000727f, -0.000381f, -0.001315f, -0.002906f, 0.001851f, -0.000021f, -0.001828f, 0.002066f, -0.001217f, -0.000771f, -0.002343f, -0.001406f, -0.000884f, -0.002930f, 0.002085f, 0.001699f, 0.018711f, -0.006245f, -0.013294f, -0.000556f, -0.020011f, 0.000120f, -0.017174f, -0.005880f, 0.012055f, -0.012215f, -0.013488f, 0.004225f, 0.001280f, 0.001363f, -0.003047f, -0.004328f, -0.009721f, 0.006820f, -0.019164f, -0.005801f, 0.002109f, 0.012113f, 0.000856f, 0.012287f, 0.004471f, 0.026830f, 0.010377f, -0.000141f, 0.001328f, 0.012852f, - -0.002883f, -0.003665f, -0.002234f, 0.002248f, -0.008258f, -0.004039f, -0.014028f, -0.000851f, -0.006360f, -0.003765f, 0.017629f, 0.000426f, 0.011089f, -0.004237f, 0.004616f, -0.000960f, 0.006681f, -0.002039f, 0.006231f, -0.005859f, -0.007273f, -0.001053f, 0.002263f, -0.007359f, -0.007341f, 0.000807f, 0.004023f, 0.008265f, -0.001006f, -0.003651f, -0.001489f, 0.007850f, 0.013300f, 0.000869f, -0.008779f, -0.012651f, 0.000352f, 0.003661f, 0.001510f, 0.017611f, -0.010777f, -0.000448f, 0.007991f, -0.002744f, -0.008998f, 0.012456f, 0.005811f, 0.002333f, -0.005919f, -0.006427f, -0.010765f, -0.004139f, -0.000996f, -0.005526f, -0.002664f, -0.004766f, 0.001115f, 0.001421f, 0.002917f, 0.000501f, 0.000993f, -0.005951f, -0.002975f, -0.006390f, -0.002089f, -0.001737f, -0.004799f, -0.003015f, 0.001904f, -0.000426f, -0.001918f, -0.000411f, 0.001813f, -0.003940f, 0.002246f, -0.002797f, -0.000143f, -0.001073f, -0.002042f, -0.000627f, 0.000144f, 0.002008f, -0.002688f, -0.004131f, 0.003632f, 0.002219f, 0.001183f, 0.016624f, -0.012710f, -0.002567f, 0.001089f, -0.000965f, -0.000441f, -0.010464f, -0.008042f, -0.001110f, - 0.006995f, 0.002553f, 0.002830f, 0.002952f, 0.007351f, -0.001482f, 0.006727f, 0.005443f, -0.017223f, -0.006612f, -0.020219f, 0.005273f, -0.007097f, 0.010211f, -0.006526f, -0.008929f, -0.006521f, 0.005313f, -0.013461f, -0.011211f, 0.015728f, -0.008556f, 0.017050f, -0.004012f, 0.005158f, -0.005982f, -0.011416f, 0.012630f, -0.009676f, -0.010905f, -0.001052f, -0.005930f, -0.012778f, -0.009869f, -0.016123f, 0.000670f, 0.010433f, 0.005983f, -0.006240f, 0.017955f, 0.006626f, -0.006601f, -0.008300f, -0.012995f, 0.000610f, -0.004874f, -0.009045f, -0.004590f, -0.003811f, -0.006410f, 0.003465f, 0.014355f, -0.000824f, 0.000931f, -0.009685f, 0.004557f, 0.004911f, -0.008482f, -0.006674f, 0.003417f, 0.017512f, 0.006939f, -0.004285f, -0.002336f, -0.003621f, -0.018009f, -0.014108f, -0.011967f, 0.012547f, 0.013251f, -0.001879f, -0.006241f, 0.005861f, -0.003998f, 0.005153f, -0.002687f, 0.002470f, 0.000370f, 0.000319f, -0.005878f, 0.003963f, -0.003461f, -0.002391f, -0.000971f, 0.003555f, 0.002564f, -0.000285f, -0.004929f, 0.003157f, -0.000773f, 0.002337f, -0.001717f, -0.001016f, -0.004369f, -0.001809f, -0.000235f, - -0.000457f, 0.000752f, 0.000906f, -0.000633f, 0.000808f, -0.003654f, 0.001681f, 0.000259f, 0.000597f, -0.001386f, 0.004510f, 0.002717f, -0.000105f, -0.001854f, 0.000521f, -0.002823f, 0.005095f, 0.001041f, 0.023646f, -0.004697f, -0.000231f, -0.004096f, 0.015325f, 0.014525f, 0.004891f, -0.024696f, -0.004265f, -0.029954f, 0.017441f, 0.007270f, 0.000307f, 0.030574f, 0.014360f, -0.002873f, -0.013963f, 0.012506f, -0.006080f, 0.002980f, 0.004120f, 0.001836f, 0.009892f, -0.009115f, 0.017042f, 0.006396f, 0.001494f, -0.005373f, -0.008946f, 0.011528f, 0.009666f, -0.002050f, 0.006222f, -0.014815f, 0.002568f, -0.019730f, 0.007803f, 0.000957f, 0.009807f, -0.016225f, 0.003154f, -0.005395f, 0.003371f, 0.018153f, 0.015318f, 0.000592f, 0.004301f, -0.011508f, 0.014760f, 0.000288f, 0.031619f, 0.033485f, -0.004648f, -0.009101f, -0.009345f, -0.007409f, -0.019679f, -0.005580f, -0.025643f, 0.001415f, -0.002316f, -0.001541f, -0.005379f, 0.008820f, 0.014861f, 0.023462f, 0.021731f, 0.016764f, -0.027949f, -0.019918f, -0.001058f, 0.001279f, 0.028932f, -0.020620f, 0.015457f, -0.001204f, -0.006072f, -0.003113f, - -0.000904f, -0.005874f, -0.016321f, -0.010654f, -0.003230f, 0.004618f, 0.001323f, -0.000505f, -0.004591f, 0.002447f, -0.005910f, -0.000649f, -0.003232f, 0.006087f, 0.006702f, -0.001756f, -0.001505f, 0.006342f, 0.004709f, 0.000741f, -0.001149f, 0.002276f, 0.000217f, 0.000887f, -0.001455f, 0.002700f, -0.000416f, -0.001697f, -0.002795f, 0.000741f, 0.002557f, 0.004049f, 0.008686f, 0.006851f, -0.003573f, 0.000769f, -0.006524f, -0.001256f, 0.002619f, -0.000578f, -0.001460f, 0.000114f, 0.001081f, 0.001383f, -0.008773f, 0.016957f, 0.003526f, -0.012792f, -0.007132f, 0.031975f, 0.031454f, 0.035255f, -0.003619f, -0.001652f, -0.006168f, 0.005800f, 0.017189f, 0.019775f, 0.005655f, -0.008722f, -0.017178f, -0.034834f, 0.010156f, -0.020674f, -0.004624f, -0.002252f, -0.004561f, 0.002182f, -0.001154f, -0.006522f, -0.000881f, -0.020259f, -0.008078f, 0.001051f, -0.003831f, -0.022622f, -0.009585f, 0.001768f, 0.016218f, -0.004769f, 0.000367f, -0.018042f, -0.006136f, 0.000062f, 0.011746f, -0.007412f, 0.007185f, -0.020147f, -0.005663f, 0.004497f, 0.007492f, -0.005633f, 0.026756f, -0.005672f, -0.003494f, -0.014136f, - -0.004700f, 0.010655f, 0.003593f, -0.001383f, 0.013921f, 0.019243f, 0.022547f, -0.004146f, -0.011412f, -0.013004f, 0.000101f, 0.002522f, 0.005229f, -0.009277f, 0.007222f, 0.009475f, 0.008031f, 0.007748f, 0.022557f, 0.015109f, 0.010038f, -0.001379f, 0.005019f, -0.022699f, -0.004295f, 0.002207f, 0.011467f, 0.018081f, -0.003529f, -0.010473f, 0.003148f, 0.006112f, -0.005337f, 0.009180f, 0.007442f, 0.009937f, 0.001506f, 0.004246f, -0.000544f, -0.000980f, -0.007377f, 0.005545f, -0.002345f, 0.003580f, 0.003287f, 0.000880f, 0.005307f, 0.000290f, 0.008578f, 0.005911f, 0.003854f, 0.002250f, 0.002380f, -0.000167f, -0.001162f, 0.000510f, -0.003648f, -0.000448f, -0.004548f, -0.007443f, -0.002928f, 0.001305f, 0.001227f, 0.002954f, -0.001524f, 0.001874f, -0.003020f, 0.001160f, 0.003792f, -0.000365f, 0.000653f, -0.032862f, 0.040851f, -0.001168f, 0.005988f, 0.022335f, 0.000377f, -0.007856f, 0.001153f, -0.039889f, -0.024284f, -0.011418f, 0.006353f, -0.007869f, 0.004537f, -0.018660f, 0.012891f, -0.006527f, -0.000192f, 0.024591f, -0.024010f, -0.015973f, 0.023002f, -0.007228f, -0.033754f, 0.002381f, - -0.020821f, 0.004288f, -0.001751f, 0.012626f, 0.005418f, 0.006361f, 0.002546f, -0.004082f, 0.014969f, -0.001679f, 0.019239f, 0.011770f, -0.006878f, -0.011565f, -0.010866f, 0.005240f, -0.005356f, 0.005274f, 0.003697f, 0.011339f, 0.003279f, -0.021292f, 0.001225f, 0.007235f, -0.007393f, 0.000906f, -0.014718f, -0.003259f, 0.001260f, 0.000963f, 0.033677f, -0.005884f, 0.023918f, 0.028675f, -0.007926f, 0.015355f, -0.004761f, -0.000834f, -0.015992f, 0.010141f, 0.024341f, 0.017056f, 0.003743f, 0.006713f, 0.015068f, -0.000971f, 0.012479f, -0.005080f, -0.007048f, -0.012148f, 0.006586f, 0.031178f, 0.006917f, -0.004005f, 0.002419f, -0.021882f, -0.007466f, 0.000551f, 0.020566f, 0.015080f, 0.006443f, 0.013396f, -0.003896f, 0.013161f, -0.000204f, 0.008296f, 0.000974f, -0.000596f, -0.001649f, 0.009195f, -0.001047f, -0.005717f, -0.003621f, -0.002241f, -0.001474f, -0.002270f, -0.004681f, 0.006663f, -0.004356f, -0.005661f, -0.001736f, -0.007451f, -0.005244f, -0.006349f, -0.003758f, -0.004412f, -0.005829f, 0.002018f, 0.001265f, 0.002525f, 0.001970f, -0.003330f, -0.001853f, -0.005840f, -0.007809f, -0.000622f, - -0.004382f, 0.002602f, -0.002143f, 0.000742f, 0.003695f, 0.004046f, 0.002650f, 0.006891f, -0.001907f, -0.000512f, 0.005094f, 0.039224f, 0.005738f, 0.009809f, -0.009232f, -0.004659f, 0.026649f, -0.017528f, -0.004024f, -0.034532f, 0.032421f, 0.016961f, 0.002366f, -0.011702f, -0.032601f, 0.003348f, -0.008651f, 0.004045f, -0.036561f, 0.013101f, 0.019359f, -0.021214f, -0.005056f, 0.003234f, 0.002282f, 0.007131f, 0.021008f, 0.025871f, 0.000113f, 0.000003f, 0.004868f, 0.001046f, -0.015618f, -0.017835f, -0.011828f, -0.023522f, -0.011574f, 0.020164f, 0.009388f, -0.007448f, -0.009927f, -0.006518f, -0.041424f, 0.009080f, 0.009987f, -0.019332f, 0.031793f, 0.001216f, 0.023721f, -0.008454f, 0.015397f, -0.004992f, -0.020473f, 0.001933f, 0.018902f, -0.010325f, 0.010390f, 0.012205f, 0.033766f, 0.009434f, 0.010630f, 0.032433f, 0.018487f, 0.012342f, -0.044715f, 0.009360f, 0.006877f, 0.008779f, 0.000941f, -0.018157f, 0.032460f, -0.023989f, 0.018527f, 0.019492f, -0.029159f, -0.006272f, 0.039964f, -0.035466f, 0.006063f, -0.008226f, -0.003825f, -0.012702f, 0.015573f, -0.006549f, -0.013256f, -0.011222f, - 0.006975f, 0.015236f, -0.014087f, 0.017677f, -0.014540f, -0.006240f, 0.019982f, 0.007489f, -0.001633f, -0.008646f, -0.009333f, -0.000110f, -0.003697f, -0.015044f, -0.001737f, -0.003083f, -0.004247f, -0.001225f, 0.012004f, -0.000856f, -0.011058f, 0.001194f, 0.004689f, 0.011624f, 0.007169f, 0.009278f, -0.003651f, 0.004989f, -0.006601f, 0.000518f, -0.002244f, 0.004988f, 0.009530f, -0.006838f, 0.004384f, 0.004720f, -0.000513f, -0.005879f, 0.003271f, 0.002791f, -0.020452f, -0.030900f, -0.013571f, -0.012834f, -0.041514f, 0.028446f, 0.004542f, 0.030360f, 0.001834f, 0.004481f, -0.014297f, -0.007356f, 0.014842f, -0.000966f, 0.015344f, -0.014970f, -0.004715f, 0.002884f, -0.006728f, -0.012220f, 0.018278f, -0.018340f, 0.021753f, -0.007395f, 0.007160f, -0.004489f, -0.014568f, -0.013018f, 0.006437f, -0.004596f, -0.000040f, 0.011338f, 0.043426f, 0.003301f, -0.005416f, -0.014417f, 0.006353f, 0.035153f, -0.006299f, -0.005507f, -0.020215f, -0.006819f, 0.003063f, -0.019037f, -0.006892f, -0.027248f, 0.017820f, -0.033403f, -0.060656f, -0.006137f, 0.002109f, 0.029242f, -0.029855f, 0.028090f, 0.018308f, -0.014007f, - -0.028171f, -0.004274f, 0.004841f, 0.008554f, 0.001210f, 0.017873f, -0.011574f, -0.004128f, -0.059826f, -0.007746f, 0.062173f, 0.006346f, -0.010212f, -0.007946f, -0.031922f, 0.024459f, -0.010111f, -0.008838f, -0.007709f, -0.004330f, -0.013684f, -0.020388f, 0.006443f, 0.012244f, -0.000370f, 0.009420f, -0.017213f, -0.031625f, -0.000890f, -0.016501f, -0.004560f, 0.000935f, -0.016389f, 0.004231f, -0.011870f, -0.021074f, -0.015570f, -0.007356f, 0.007216f, 0.010187f, -0.001559f, -0.024987f, -0.006032f, 0.001987f, -0.012175f, -0.005179f, -0.000739f, -0.011237f, -0.006494f, 0.003502f, -0.000177f, -0.008746f, -0.003302f, 0.004591f, 0.001900f, -0.011749f, -0.004472f, 0.000670f, 0.011560f, 0.012824f, 0.003706f, -0.003347f, -0.004150f, -0.001056f, 0.008735f, -0.001389f, -0.000424f, 0.001078f, 0.003554f, -0.009766f, 0.009899f, -0.001659f, 0.006820f, 0.001127f, -0.006776f, 0.028725f, 0.025658f, -0.008323f, -0.010613f, -0.002644f, -0.041404f, 0.027140f, -0.026206f, -0.021646f, -0.016782f, 0.010141f, 0.004097f, 0.025143f, 0.003003f, -0.013937f, -0.016258f, -0.016861f, 0.012935f, -0.006574f, -0.009059f, 0.022950f, - 0.025706f, 0.008626f, -0.017436f, 0.021128f, 0.034230f, -0.013270f, -0.007582f, 0.029533f, 0.007568f, 0.005766f, -0.019430f, -0.000220f, 0.028171f, -0.041848f, 0.028620f, -0.006441f, 0.003829f, 0.016991f, 0.020696f, -0.000385f, 0.010314f, -0.019839f, -0.016073f, 0.010561f, 0.039415f, 0.010348f, 0.009581f, 0.014709f, -0.019957f, 0.003944f, 0.017478f, 0.009889f, -0.003320f, 0.013849f, 0.008732f, -0.023929f, 0.019197f, -0.023335f, 0.005159f, 0.016594f, -0.018359f, 0.013673f, -0.022395f, -0.009198f, 0.004072f, 0.000518f, 0.014275f, -0.009468f, 0.012243f, -0.009682f, 0.001707f, 0.004255f, -0.004189f, -0.009509f, -0.018104f, 0.048005f, 0.005147f, 0.014147f, -0.021090f, -0.049685f, 0.034794f, -0.033906f, -0.014563f, -0.000585f, -0.007768f, -0.005439f, -0.002941f, -0.014278f, 0.008621f, 0.006539f, 0.003713f, -0.013247f, 0.015823f, 0.011723f, -0.005313f, -0.005905f, 0.004661f, -0.004948f, 0.004391f, -0.004998f, 0.016800f, 0.005665f, 0.001571f, 0.011384f, 0.012578f, -0.007836f, 0.000080f, 0.005464f, 0.008750f, 0.003003f, 0.004197f, -0.008494f, -0.010345f, 0.007754f, 0.010865f, 0.015076f, - -0.002141f, -0.014888f, -0.001989f, 0.000734f, 0.007089f, -0.022601f, 0.008331f, -0.007954f, -0.003176f, 0.004488f, 0.005200f, -0.006070f, 0.007687f, -0.000011f, 0.006123f, -0.004179f, 0.014549f, 0.004332f, 0.006080f, -0.002716f, 0.008291f, -0.027357f, 0.028617f, -0.010759f, -0.028638f, -0.037071f, -0.010500f, -0.003910f, 0.021509f, -0.032646f, -0.005409f, -0.003969f, 0.016902f, 0.032132f, 0.026559f, 0.016499f, 0.002361f, -0.008419f, -0.005171f, -0.003461f, 0.022531f, 0.018522f, -0.004582f, 0.002816f, -0.005139f, 0.014485f, -0.035490f, 0.020928f, 0.011418f, 0.016355f, 0.005407f, 0.003670f, 0.030233f, -0.012122f, -0.026090f, 0.000015f, -0.008719f, 0.001647f, -0.036117f, -0.020008f, -0.002309f, 0.029903f, -0.020487f, -0.006534f, 0.004741f, -0.001333f, 0.000673f, 0.029391f, 0.011683f, -0.004697f, 0.002402f, 0.014321f, 0.009334f, 0.034265f, -0.010315f, 0.015589f, 0.017291f, 0.009237f, -0.005775f, 0.005512f, -0.037631f, 0.015885f, -0.007205f, 0.001586f, -0.008797f, -0.020712f, -0.027897f, 0.005518f, -0.013417f, -0.037717f, 0.008815f, -0.032064f, -0.023727f, -0.005641f, -0.048396f, -0.029305f, - 0.006990f, 0.020437f, -0.024286f, 0.005077f, 0.001689f, 0.055230f, 0.052269f, 0.049427f, -0.001738f, 0.002666f, -0.026303f, -0.015838f, 0.020432f, -0.011301f, -0.007587f, 0.003299f, -0.006888f, 0.011498f, -0.014516f, -0.007213f, -0.000793f, 0.004290f, -0.008839f, 0.010532f, 0.010428f, 0.000360f, -0.004863f, 0.002826f, 0.010175f, -0.008614f, -0.011505f, -0.002990f, 0.009114f, -0.012880f, 0.021275f, 0.012286f, -0.001310f, 0.009668f, -0.003771f, -0.009080f, -0.014556f, -0.007847f, -0.012952f, -0.006962f, 0.007049f, 0.001174f, 0.021440f, -0.005201f, -0.007311f, -0.003436f, -0.049101f, -0.054294f, 0.031894f, 0.028630f, 0.009438f, 0.031043f, 0.052168f, 0.014653f, -0.020243f, 0.016661f, -0.008215f, -0.015054f, 0.023719f, 0.001467f, -0.021721f, 0.012918f, 0.017003f, 0.003724f, 0.005819f, 0.001054f, 0.002412f, 0.047740f, -0.001285f, 0.010014f, 0.004224f, 0.029524f, 0.001506f, 0.047352f, -0.000473f, -0.021224f, 0.037841f, 0.007520f, -0.017090f, -0.006218f, 0.019922f, -0.004448f, -0.000598f, 0.015515f, -0.029200f, 0.028627f, -0.006347f, -0.042595f, -0.012093f, 0.003882f, -0.042550f, -0.005017f, - -0.004656f, 0.018333f, 0.017751f, 0.031556f, -0.022556f, 0.004585f, 0.004835f, 0.006349f, 0.013376f, -0.020543f, -0.023071f, 0.011707f, -0.000786f, 0.024059f, 0.019565f, 0.005843f, 0.050609f, -0.008746f, -0.008024f, -0.035014f, 0.051650f, 0.008896f, 0.035780f, 0.021764f, -0.058069f, 0.008031f, 0.005070f, 0.035207f, -0.019006f, 0.014856f, 0.000141f, -0.015662f, -0.002094f, -0.012709f, 0.028407f, -0.055027f, -0.006827f, -0.004197f, 0.000053f, 0.002210f, 0.008637f, 0.013134f, -0.000352f, 0.025013f, -0.001141f, -0.003889f, -0.008263f, -0.005523f, 0.001494f, -0.009063f, 0.002844f, -0.002671f, 0.007503f, 0.005081f, -0.002729f, 0.001841f, -0.003078f, -0.015547f, -0.000938f, 0.000490f, 0.003770f, -0.015874f, 0.008256f, -0.003485f, 0.008684f, 0.006655f, 0.012316f, -0.012913f, 0.014414f, -0.008147f, 0.004617f, 0.010179f, 0.009396f, -0.003518f, 0.000296f, -0.005975f, 0.008153f, -0.000762f, 0.003973f, -0.000468f, -0.001694f, 0.020808f, 0.011833f, 0.000025f, 0.009806f, 0.002655f, 0.010205f, 0.001976f, 0.032021f, -0.067412f, 0.040142f, 0.040830f, -0.017321f, 0.009751f, 0.005747f, 0.011089f, - 0.000363f, 0.032510f, -0.023581f, -0.005059f, -0.025301f, -0.000163f, -0.014262f, 0.002333f, 0.006908f, -0.036974f, 0.016740f, 0.040262f, -0.027589f, -0.026480f, -0.026989f, 0.053588f, -0.023308f, -0.013109f, 0.005072f, -0.018314f, -0.055401f, 0.009789f, 0.040379f, -0.055284f, -0.024968f, 0.019141f, 0.029775f, 0.008081f, -0.008313f, 0.012832f, -0.019525f, -0.009177f, -0.000923f, 0.027410f, -0.037535f, -0.029917f, 0.021353f, 0.034417f, 0.013656f, -0.042978f, -0.013806f, 0.001076f, -0.001882f, -0.007466f, 0.022560f, -0.006665f, 0.033997f, -0.027575f, -0.005897f, -0.000047f, -0.031452f, 0.020013f, -0.036631f, -0.025279f, 0.011855f, -0.016440f, 0.035859f, 0.051667f, 0.030622f, -0.034186f, 0.018243f, -0.010062f, -0.010105f, -0.024137f, -0.007368f, -0.039332f, 0.030211f, 0.022117f, 0.010847f, 0.001167f, -0.018446f, -0.010457f, 0.012311f, -0.041065f, 0.033289f, -0.007852f, -0.005480f, 0.017313f, 0.003258f, 0.015763f, -0.004300f, -0.002507f, -0.013840f, -0.004080f, 0.001522f, 0.002770f, -0.010808f, -0.003898f, -0.005047f, -0.003995f, 0.018818f, 0.001938f, -0.000094f, -0.008952f, 0.007779f, 0.007362f, - -0.006389f, 0.004045f, 0.008754f, 0.001852f, 0.014589f, -0.005199f, -0.009871f, 0.002010f, -0.016239f, 0.008444f, 0.006389f, 0.002050f, -0.000262f, 0.006479f, -0.001146f, 0.010631f, 0.003697f, 0.007539f, -0.012776f, -0.004035f, 0.012423f, 0.000568f, 0.005222f, 0.006108f, -0.011884f, 0.001649f, 0.012528f, 0.039293f, 0.065426f, -0.000361f, -0.049342f, 0.010585f, -0.058897f, 0.010216f, 0.026903f, 0.012707f, 0.003663f, 0.035585f, 0.026336f, -0.001475f, -0.005305f, -0.048666f, -0.026186f, 0.000837f, -0.022728f, 0.066190f, -0.011952f, -0.014866f, -0.028426f, 0.003674f, 0.024954f, 0.017507f, -0.000802f, 0.012894f, 0.019462f, -0.029189f, 0.010134f, 0.056815f, 0.020179f, -0.038786f, -0.027327f, 0.018535f, -0.019137f, -0.002503f, 0.013916f, -0.008496f, -0.032007f, -0.007540f, 0.004004f, 0.054151f, -0.011585f, 0.012134f, -0.014265f, -0.043514f, 0.007749f, 0.054939f, -0.014628f, -0.032714f, 0.009690f, -0.019978f, 0.013534f, -0.011353f, -0.013252f, 0.037809f, -0.009508f, -0.004147f, 0.018554f, -0.032304f, 0.011851f, 0.040012f, -0.016353f, 0.003586f, -0.023216f, 0.070244f, -0.012598f, 0.008521f, - 0.022905f, -0.016112f, -0.003734f, -0.018544f, 0.010000f, -0.020975f, -0.017665f, -0.016508f, 0.027031f, -0.036260f, 0.005541f, -0.005216f, -0.010669f, 0.028505f, 0.000844f, -0.009490f, -0.011814f, 0.001667f, 0.010855f, 0.008458f, -0.015995f, -0.002762f, 0.000968f, -0.004335f, -0.019834f, -0.011880f, -0.003401f, 0.004980f, 0.001877f, 0.001818f, 0.003081f, 0.016557f, -0.016233f, 0.017399f, 0.003683f, 0.005174f, 0.001452f, 0.013843f, -0.007424f, 0.022600f, -0.004608f, -0.000133f, 0.017487f, 0.022710f, -0.011435f, 0.014925f, -0.007005f, 0.005153f, -0.012688f, 0.011597f, 0.009927f, -0.019176f, -0.000584f, -0.007532f, -0.002258f, -0.009467f, 0.007437f, -0.011701f, 0.011185f, -0.002125f, -0.003843f, -0.019434f, -0.108522f, -0.038283f, -0.002365f, 0.034152f, -0.018538f, -0.054511f, -0.020795f, -0.008323f, 0.026097f, 0.006506f, -0.007637f, -0.027154f, 0.027851f, 0.049796f, -0.023198f, 0.037551f, 0.009102f, -0.072233f, 0.026385f, 0.033339f, -0.012254f, -0.029598f, -0.005895f, 0.043896f, 0.046833f, -0.004294f, -0.036253f, 0.002125f, -0.004514f, -0.005011f, -0.030286f, 0.007008f, 0.013200f, -0.047751f, - 0.032278f, 0.027428f, -0.033841f, 0.005826f, -0.037916f, 0.012913f, 0.091195f, -0.082225f, 0.084281f, 0.037965f, 0.003400f, 0.051454f, 0.025323f, -0.053346f, 0.031431f, -0.040197f, -0.009364f, 0.043195f, 0.001614f, 0.012135f, -0.022682f, -0.039147f, 0.117625f, -0.028071f, 0.001283f, 0.046182f, -0.022893f, 0.008750f, 0.003130f, 0.028413f, 0.066077f, 0.062870f, 0.059387f, 0.003411f, -0.001594f, -0.009935f, 0.002611f, -0.016473f, 0.004063f, 0.050443f, -0.013872f, -0.017912f, 0.004644f, 0.006719f, 0.029033f, 0.034024f, 0.009354f, 0.009329f, 0.023954f, 0.010069f, -0.019061f, 0.005788f, -0.010045f, -0.027861f, -0.012821f, 0.014209f, -0.021220f, -0.030214f, -0.023172f, -0.001323f, 0.002300f, -0.017435f, 0.008364f, 0.019148f, 0.002575f, -0.006550f, -0.001605f, -0.022137f, 0.025473f, -0.004071f, -0.006101f, 0.017695f, -0.015291f, 0.011954f, -0.011562f, -0.009135f, 0.030053f, -0.000348f, -0.023106f, 0.028684f, -0.018218f, 0.017206f, 0.007707f, -0.011568f, 0.008247f, -0.004204f, 0.020597f, -0.009862f, 0.006883f, 0.000835f, 0.001290f, -0.002434f, 0.021944f, -0.011707f, -0.003108f, -0.001808f, - 0.003508f, -0.003435f, 0.009291f, 0.017017f, 0.027637f, -0.007359f, -0.079804f, 0.036189f, -0.057985f, 0.081446f, 0.009587f, -0.070921f, 0.015956f, 0.000574f, 0.033249f, 0.015639f, -0.017181f, 0.060240f, 0.014697f, 0.002997f, 0.040248f, -0.032264f, -0.044787f, 0.001389f, 0.023426f, 0.081192f, -0.011445f, 0.000128f, -0.008520f, 0.058486f, 0.006375f, -0.046613f, -0.027499f, 0.008714f, -0.005148f, 0.025833f, -0.045204f, 0.021618f, 0.007387f, 0.013285f, -0.004030f, -0.017777f, 0.010304f, 0.018058f, 0.000202f, 0.054299f, -0.087725f, 0.007548f, -0.030927f, -0.019362f, -0.011299f, -0.064290f, -0.093206f, -0.096641f, -0.070130f, 0.007305f, 0.000383f, -0.056121f, -0.000425f, -0.010350f, 0.006066f, -0.034891f, -0.089790f, 0.088355f, -0.001553f, -0.013238f, 0.018069f, -0.087982f, -0.005996f, -0.022040f, 0.016520f, 0.025610f, 0.120617f, 0.089675f, -0.010035f, -0.001301f, -0.002801f, 0.023482f, 0.036502f, 0.021913f, 0.016679f, -0.003593f, -0.014515f, -0.085652f, 0.016185f, -0.001992f, -0.033269f, -0.015177f, 0.055859f, -0.008090f, -0.010130f, 0.026387f, -0.002206f, 0.028963f, -0.011316f, 0.014410f, - -0.001580f, -0.006380f, 0.020694f, 0.024936f, -0.011455f, 0.003256f, 0.011229f, -0.005012f, 0.005323f, 0.001001f, -0.000256f, 0.016910f, -0.007256f, -0.009074f, 0.014308f, -0.016975f, 0.022118f, -0.000451f, 0.011991f, 0.018045f, -0.009171f, 0.004217f, 0.016067f, -0.004192f, -0.010465f, -0.004246f, 0.001859f, -0.003271f, 0.004442f, -0.022081f, -0.001318f, -0.017573f, 0.018160f, 0.002313f, 0.012249f, 0.008248f, -0.002528f, 0.000144f, -0.001123f, 0.007860f, 0.011338f, 0.008836f, -0.001358f, -0.010966f, -0.001559f, -0.022988f, 0.109432f, -0.104860f, 0.017721f, -0.020362f, 0.003849f, 0.044079f, -0.032520f, 0.010868f, 0.001470f, -0.113433f, 0.002594f, -0.012902f, 0.005283f, 0.012893f, -0.050806f, -0.019058f, -0.083967f, -0.021782f, -0.004311f, 0.004384f, -0.031927f, -0.024024f, -0.036710f, -0.015404f, 0.035960f, 0.007692f, 0.072865f, 0.017702f, -0.024964f, -0.026134f, 0.044675f, -0.050169f, 0.085742f, -0.067394f, 0.019316f, -0.054414f, 0.000861f, 0.051524f, -0.094234f, 0.088323f, 0.015372f, 0.010022f, -0.064799f, -0.013116f, -0.012511f, -0.000213f, 0.030696f, 0.030690f, 0.038705f, -0.074730f, - -0.002161f, -0.029524f, -0.025668f, -0.028913f, -0.040453f, -0.028018f, 0.001116f, 0.042438f, -0.045871f, 0.012032f, -0.084214f, -0.028327f, 0.020922f, 0.024739f, 0.004234f, -0.095729f, -0.051972f, -0.034282f, -0.048952f, -0.040551f, 0.003068f, -0.032010f, 0.050481f, 0.014972f, 0.025133f, -0.017903f, -0.026656f, 0.084856f, -0.028885f, 0.022594f, -0.017450f, 0.006330f, 0.063615f, 0.008262f, 0.011207f, -0.036125f, 0.035995f, 0.020795f, -0.015376f, 0.033429f, -0.025691f, 0.008983f, -0.009763f, 0.022516f, 0.004211f, -0.007966f, 0.012024f, 0.028753f, -0.010330f, 0.008960f, 0.009965f, 0.008352f, -0.003847f, 0.007469f, -0.004557f, 0.019591f, -0.007027f, 0.002936f, 0.018480f, -0.004320f, -0.007788f, 0.005415f, 0.007744f, -0.013435f, -0.003325f, -0.036579f, 0.022200f, 0.015008f, -0.000330f, -0.020515f, -0.008682f, 0.001311f, 0.007075f, 0.027070f, -0.005025f, -0.008061f, 0.009083f, 0.006547f, -0.004686f, 0.027328f, 0.004717f, -0.034588f, 0.008303f, 0.033017f, -0.004396f, 0.047069f, -0.088952f, 0.135338f, -0.102066f, -0.010861f, -0.061624f, 0.012002f, 0.001223f, -0.037319f, -0.052723f, 0.061424f, - 0.041263f, 0.019196f, -0.026961f, 0.027019f, 0.008332f, 0.057978f, -0.046097f, -0.030551f, 0.036028f, 0.060270f, -0.077195f, 0.030964f, -0.002869f, 0.036467f, -0.027905f, 0.010525f, -0.034284f, 0.006822f, -0.064131f, 0.020781f, 0.068539f, -0.002524f, -0.005389f, 0.085075f, 0.014748f, -0.039587f, -0.083450f, 0.071020f, -0.037782f, 0.031887f, -0.030701f, 0.084939f, 0.037485f, -0.009641f, 0.008653f, -0.049595f, 0.006483f, 0.020931f, -0.023926f, 0.023514f, -0.103209f, 0.040168f, 0.093419f, 0.072828f, -0.040570f, -0.042295f, -0.042303f, 0.047030f, 0.003738f, -0.015303f, 0.003744f, 0.120472f, -0.059009f, -0.027812f, 0.046690f, -0.040531f, -0.109120f, 0.046017f, 0.024314f, -0.078240f, 0.043666f, 0.075177f, 0.066537f, -0.020659f, -0.029837f, -0.053470f, 0.028451f, -0.033120f, -0.021063f, 0.048117f, 0.032922f, 0.014662f, 0.042449f, 0.023669f, -0.016500f, -0.015636f, -0.054898f, 0.012491f, -0.023092f, 0.018693f, -0.020377f, 0.038812f, 0.026972f, 0.005661f, -0.007395f, 0.036883f, -0.020389f, -0.003204f, 0.004755f, 0.013960f, 0.008575f, 0.016861f, 0.015723f, 0.000958f, -0.009031f, -0.005673f, - 0.013193f, 0.006652f, 0.005275f, 0.001488f, 0.020798f, 0.067054f, -0.002085f, -0.005667f, 0.010023f, -0.023763f, 0.008252f, 0.023910f, -0.034788f, 0.014933f, 0.017913f, -0.013658f, -0.009794f, 0.015481f, 0.008860f, -0.020414f, -0.087355f, 0.046698f, -0.005087f, 0.012198f, -0.031996f, 0.027989f, 0.000620f, 0.015360f, 0.004683f, 0.005103f, -0.018176f, 0.013937f, 0.047328f, -0.060360f, 0.051931f, -0.008851f, -0.031846f, 0.010683f, -0.021653f, 0.014060f, -0.022184f, -0.018250f, 0.015384f, -0.048149f, -0.004916f, 0.064147f, -0.092587f, 0.026129f, 0.004441f, -0.015495f, -0.028443f, -0.033672f, -0.021876f, 0.067303f, -0.055402f, -0.007939f, 0.021778f, -0.056313f, 0.014314f, 0.030909f, 0.020698f, 0.010584f, 0.009766f, -0.031768f, 0.025038f, -0.082843f, 0.001188f, 0.072529f, -0.030301f, -0.008151f, -0.016246f, -0.020462f, -0.000550f, -0.058638f, 0.031109f, 0.023564f, -0.048453f, 0.045490f, 0.012704f, -0.055272f, 0.022770f, -0.010734f, 0.040129f, 0.034947f, -0.051370f, 0.017953f, 0.057147f, -0.053793f, 0.030144f, -0.038307f, 0.030210f, 0.034931f, -0.054571f, 0.030758f, -0.003893f, -0.028952f, - 0.041728f, 0.002188f, -0.065638f, 0.020185f, 0.029287f, 0.008815f, -0.018204f, 0.003177f, 0.049876f, -0.023041f, -0.046487f, 0.049550f, -0.002008f, 0.003745f, -0.002061f, -0.006265f, 0.030596f, -0.022776f, -0.010795f, 0.021550f, 0.008383f, -0.005340f, -0.022187f, 0.032872f, -0.012366f, -0.021608f, 0.001939f, 0.017272f, -0.010176f, -0.008040f, -0.004985f, 0.025657f, -0.019890f, -0.010440f, 0.002032f, 0.013898f, -0.012179f, 0.009946f, -0.000288f, 0.025424f, -0.015931f, 0.003966f, 0.002356f, 0.002431f, 0.022584f, 0.042331f, -0.018146f, -0.200754f, -0.439449f, -0.174350f, -0.292154f, -0.397812f, 0.150044f, 0.053210f, 0.129529f, 0.591163f, 0.492418f, 0.324493f, 0.507599f, 0.344816f, 0.040809f, 0.085462f, 0.061784f, -0.271376f, -0.175212f, -0.120858f, -0.310388f, -0.316814f, -0.088063f, -0.088990f, -0.197105f, -0.059206f, -0.042892f, -0.237326f, -0.204135f, -0.066779f, -0.112591f, -0.224195f, -0.055195f, -0.038203f, -0.175765f, -0.020993f, 0.121196f, -0.053571f, -0.043352f, 0.179185f, 0.109703f, -0.074134f, 0.158707f, 0.262176f, 0.028673f, 0.147165f, 0.321962f, 0.157086f, 0.080856f, 0.347345f, - 0.253800f, 0.188584f, 0.421923f, 0.571023f, 0.451561f, 0.524531f, 0.679936f, 0.443795f, 0.290278f, 0.380919f, 0.245207f, -0.069125f, -0.017477f, -0.169917f, -0.420215f, -0.593843f, -0.638789f, -0.854841f, -0.972349f, -1.032287f, -0.998641f, -0.959743f, -0.954220f, -0.797126f, -0.610280f, -0.572733f, -0.374029f, 0.029195f, 0.157704f, 0.204749f, 0.621712f, 0.610123f, 0.420615f, 0.619913f, 0.568121f, 0.307968f, 0.299266f, 0.395139f, 0.238773f, 0.112048f, 0.276193f, 0.281807f, 0.126256f, 0.227581f, 0.343869f, 0.227805f, 0.135343f, 0.292481f, 0.242140f, 0.048157f, 0.148094f, 0.214930f, 0.023466f, 0.040260f, 0.235332f, 0.143718f, 0.077084f, 0.249581f, 0.247388f, 0.089970f, 0.197006f, 0.170045f, -0.045004f, -0.124127f, -0.128665f, -0.295443f, -0.399886f, -0.394816f, -0.455679f, -0.502212f, -0.520811f, -0.509820f, -0.523007f, -0.581491f, -0.601585f, -0.575513f, -0.641987f, -0.549727f, -0.374703f, -0.286653f, -0.098090f, 0.165130f, 0.346344f, 0.507586f, 0.655448f, 0.666595f, 0.570826f, 0.518631f, 0.426143f, 0.322839f, 0.260449f, 0.219412f, 0.177545f, 0.139301f, 0.126527f, 0.117637f, - 0.087651f, 0.074576f, 0.066816f, 0.036630f, 0.001759f, -0.018027f, -0.049105f, -0.082996f, -0.104521f, -0.109999f, -0.120887f, -0.116783f, -0.095938f, -0.072418f, -0.053507f, -0.029930f, -0.015011f, -0.003327f, 0.010826f, 0.020482f, 0.020041f, 0.021091f, 0.013651f, 0.001534f, -0.004894f, -0.010768f, -0.022531f, -0.027531f, -0.030317f, -0.038503f, -0.039836f, -0.035311f, -0.042144f, -0.046870f, -0.041780f, -0.045381f, -0.052037f, -0.048520f, -0.057960f, -0.069327f, -0.065817f, -0.066081f, -0.070087f, -0.061295f, -0.052855f, -0.046691f, -0.033070f, -0.015934f, -0.006258f, 0.004827f, 0.020511f, 0.033794f, 0.045581f, 0.058572f, 0.068961f, 0.073316f, 0.078386f, 0.084033f, 0.086441f, 0.088297f, 0.090468f, 0.087365f, 0.080754f, 0.071791f, 0.060073f, 0.046473f, 0.029254f, 0.012017f, -0.004083f, -0.020560f, -0.031439f, -0.036136f, -0.037839f, -0.037081f, -0.032674f, -0.029042f, -0.027257f, -0.024233f, -0.021536f, -0.020404f, -0.018828f, -0.016763f, -0.015244f, -0.014030f, -0.012304f, -0.010521f, -0.009087f, -0.007645f, -0.006164f, -0.004997f, -0.004249f, -0.003704f, -0.003293f} - }, - { - {-0.007426f, 0.004516f, 0.007236f, -0.002557f, 0.006430f, -0.001050f, 0.006787f, 0.003412f, -0.001497f, -0.002664f, 0.006875f, 0.000577f, 0.001368f, -0.007824f, -0.001257f, -0.000567f, -0.000353f, 0.010687f, 0.005220f, -0.000394f, -0.008025f, -0.005837f, -0.003454f, 0.000975f, -0.000187f, 0.002312f, 0.004912f, 0.001493f, 0.001810f, -0.008099f, -0.001249f, -0.007883f, 0.000314f, -0.004361f, 0.005157f, 0.005148f, -0.002057f, -0.004255f, 0.005392f, 0.001152f, -0.002026f, -0.007288f, -0.000991f, -0.004675f, 0.001306f, 0.004452f, -0.007392f, -0.003610f, -0.001237f, -0.002894f, 0.018863f, 0.004492f, 0.010889f, 0.000791f, 0.003572f, -0.000084f, -0.005452f, -0.005059f, -0.006436f, 0.003039f, -0.005310f, 0.003818f, 0.000119f, 0.004662f, 0.004770f, 0.011582f, 0.003495f, -0.000962f, -0.000587f, -0.006881f, 0.011219f, 0.010321f, 0.001806f, 0.003182f, 0.002924f, 0.003194f, -0.000653f, -0.005760f, 0.001716f, 0.003331f, -0.002163f, 0.000964f, -0.001772f, -0.005263f, 0.002506f, -0.004390f, -0.002981f, -0.001367f, 0.000351f, -0.001964f, -0.002131f, -0.002501f, -0.000054f, -0.000137f, -0.000393f, 0.000507f, - -0.000878f, 0.001677f, -0.000932f, -0.001563f, -0.000151f, 0.002104f, 0.000792f, -0.000859f, -0.002823f, -0.000830f, 0.002615f, 0.000179f, 0.001181f, 0.001038f, 0.000735f, 0.026110f, -0.006126f, -0.005412f, -0.002076f, -0.005121f, 0.001237f, -0.012352f, 0.001007f, 0.002510f, 0.000670f, 0.008465f, 0.001004f, -0.001697f, -0.007403f, 0.004809f, -0.010452f, -0.009002f, 0.003305f, -0.004367f, -0.002071f, -0.001520f, 0.001788f, 0.007116f, 0.009716f, 0.000773f, -0.001463f, 0.011549f, 0.004186f, -0.000623f, 0.000457f, -0.004656f, 0.000183f, 0.012674f, 0.000043f, -0.005822f, -0.004709f, -0.001316f, 0.004322f, -0.005796f, -0.007166f, -0.007309f, -0.005983f, 0.005812f, -0.005626f, 0.002205f, -0.006844f, 0.002472f, 0.008368f, 0.000595f, 0.005957f, -0.002466f, -0.004661f, -0.002273f, 0.004144f, -0.000198f, 0.006393f, 0.009349f, 0.001399f, -0.002760f, -0.004773f, -0.000188f, -0.000675f, 0.000480f, 0.000332f, -0.008142f, -0.000830f, -0.003776f, -0.004134f, 0.004028f, 0.000878f, 0.002605f, 0.003054f, -0.009696f, -0.005401f, 0.004100f, -0.001789f, 0.007266f, 0.001346f, 0.006131f, -0.001205f, -0.001489f, - -0.001641f, -0.003472f, -0.000791f, -0.003829f, -0.001527f, 0.000173f, 0.005722f, -0.001309f, -0.000090f, -0.000921f, 0.001839f, 0.000014f, 0.002230f, 0.000503f, -0.000441f, -0.001368f, 0.001804f, -0.002724f, 0.000052f, 0.000214f, -0.001547f, 0.001378f, 0.001712f, -0.002287f, 0.000830f, -0.001092f, 0.001056f, 0.001059f, 0.000034f, 0.001749f, 0.000221f, -0.000795f, -0.018343f, -0.008927f, -0.003765f, -0.012463f, -0.004168f, -0.011954f, 0.003820f, -0.000839f, -0.007360f, -0.008523f, -0.001073f, -0.006921f, 0.000056f, 0.006176f, -0.000219f, -0.010649f, -0.003811f, 0.000391f, -0.004029f, -0.003296f, 0.003375f, 0.010482f, 0.013365f, -0.001887f, -0.003283f, 0.007611f, 0.008617f, -0.002385f, -0.001721f, -0.001441f, -0.005701f, 0.002036f, 0.002961f, -0.005109f, -0.003775f, -0.001012f, 0.005293f, 0.011448f, 0.000959f, -0.003548f, 0.000231f, -0.005425f, -0.001860f, -0.008761f, -0.004007f, -0.003759f, -0.013997f, -0.001281f, -0.006231f, -0.004250f, -0.015389f, 0.009924f, -0.006573f, -0.005796f, 0.003001f, -0.000740f, -0.000901f, 0.002277f, -0.012749f, -0.003138f, -0.004426f, -0.000795f, -0.007267f, -0.000790f, - -0.003305f, 0.003673f, 0.004728f, -0.003989f, -0.002031f, -0.005966f, 0.002422f, -0.000691f, -0.001044f, 0.000256f, -0.009382f, 0.000011f, -0.008458f, 0.001572f, -0.000365f, -0.002495f, 0.002786f, 0.010796f, 0.005255f, -0.002241f, 0.000798f, -0.001603f, -0.003880f, 0.000651f, 0.001860f, -0.001819f, -0.000070f, -0.002311f, 0.000295f, -0.000807f, -0.002955f, 0.001528f, 0.001454f, -0.003105f, -0.001342f, 0.001160f, -0.001181f, 0.000707f, -0.001960f, -0.001456f, -0.001550f, -0.002883f, -0.003166f, -0.000011f, 0.001093f, -0.001481f, -0.001821f, 0.000249f, -0.000740f, -0.000180f, -0.000878f, 0.000230f, -0.000399f, -0.000891f, -0.002573f, 0.001755f, -0.000759f, -0.001096f, -0.001132f, -0.002123f, -0.000144f, 0.000502f, -0.001737f, 0.000330f, 0.000360f, 0.000342f, -0.001370f, 0.000641f, -0.034542f, -0.002821f, -0.017081f, 0.015146f, -0.008947f, 0.027345f, -0.017668f, 0.017206f, -0.015674f, -0.001024f, -0.000344f, -0.012079f, 0.009216f, 0.000260f, -0.004585f, 0.002731f, -0.004030f, -0.001648f, -0.011803f, -0.000182f, -0.008937f, 0.006913f, 0.002318f, 0.008481f, -0.005138f, 0.012688f, 0.011350f, -0.011202f, - 0.003007f, -0.009531f, 0.009953f, 0.000039f, -0.007179f, 0.000539f, -0.001127f, -0.000413f, 0.007263f, 0.001040f, -0.011137f, 0.004496f, 0.007775f, -0.000563f, 0.009204f, -0.004384f, 0.007476f, -0.011438f, -0.005951f, 0.007450f, -0.006710f, 0.001865f, 0.009911f, -0.009185f, 0.014715f, 0.005860f, -0.014847f, 0.003552f, -0.014312f, 0.005074f, 0.007724f, 0.005320f, 0.007428f, 0.010917f, 0.003516f, -0.001351f, -0.001056f, 0.000720f, 0.003283f, 0.007853f, -0.002894f, 0.014842f, 0.002695f, 0.010174f, 0.005336f, 0.002963f, 0.000540f, 0.010215f, 0.001649f, 0.002548f, -0.006041f, -0.007942f, 0.003865f, 0.005528f, 0.000402f, 0.008798f, -0.001239f, -0.000041f, -0.001825f, 0.010448f, 0.002944f, -0.003687f, 0.002155f, 0.001817f, 0.001291f, 0.003593f, 0.000332f, 0.006529f, -0.001232f, 0.002283f, 0.001007f, 0.002533f, -0.001863f, 0.001294f, 0.000387f, 0.000207f, 0.000347f, -0.002144f, -0.002223f, 0.000890f, -0.002686f, -0.001017f, -0.002896f, 0.001772f, -0.000283f, -0.000791f, -0.001107f, 0.022863f, 0.000240f, -0.006077f, -0.001965f, -0.008368f, -0.010021f, 0.016730f, -0.003116f, -0.002300f, - 0.015354f, -0.001061f, -0.002838f, 0.006864f, 0.011970f, 0.003508f, 0.005998f, -0.000180f, -0.012844f, -0.003307f, 0.009837f, -0.014634f, -0.014514f, -0.005355f, 0.003306f, -0.010281f, -0.006152f, 0.000334f, -0.001357f, 0.010353f, -0.003842f, -0.002115f, 0.010883f, 0.015127f, -0.012898f, 0.003527f, -0.003000f, 0.005602f, 0.001594f, -0.005638f, -0.001159f, 0.006369f, 0.009661f, -0.002437f, -0.013403f, -0.002906f, -0.001096f, -0.003430f, -0.006643f, 0.001113f, -0.000765f, 0.002594f, -0.001769f, 0.002012f, 0.012704f, -0.009193f, 0.001296f, -0.006969f, -0.005673f, -0.009629f, -0.002860f, -0.005505f, -0.013417f, -0.000345f, 0.001007f, -0.005116f, -0.000956f, -0.005423f, 0.005287f, 0.006702f, -0.000956f, 0.002095f, -0.004788f, -0.001207f, 0.016374f, -0.002014f, -0.006690f, -0.021989f, -0.010011f, -0.000148f, -0.007498f, 0.005252f, -0.002084f, 0.002049f, 0.000034f, -0.004304f, -0.000783f, 0.006591f, -0.005391f, 0.001412f, -0.001484f, 0.000773f, 0.000062f, -0.004488f, -0.003386f, -0.001804f, -0.003534f, -0.000567f, -0.005624f, -0.001032f, -0.003175f, 0.000777f, -0.002207f, -0.000582f, -0.003023f, -0.003138f, - -0.003208f, -0.000678f, -0.000322f, 0.001314f, 0.000853f, -0.000289f, 0.000939f, 0.000909f, -0.000163f, 0.003320f, 0.002752f, 0.000116f, 0.001631f, -0.001146f, -0.001718f, 0.000551f, 0.029234f, 0.032885f, 0.006051f, -0.012306f, 0.007293f, 0.012817f, 0.012849f, 0.007149f, 0.009642f, 0.004189f, 0.015950f, -0.001884f, -0.002242f, -0.006848f, 0.009915f, -0.006200f, -0.014526f, -0.019895f, 0.002007f, -0.009661f, -0.008372f, 0.006726f, -0.002323f, -0.005457f, 0.016296f, -0.001412f, 0.020307f, -0.000004f, -0.008379f, -0.005777f, 0.006963f, 0.004574f, -0.004302f, -0.016494f, 0.023228f, 0.013362f, -0.000114f, 0.012518f, 0.007352f, 0.008069f, -0.007948f, 0.009139f, 0.004521f, 0.001677f, -0.003084f, -0.004391f, -0.010601f, -0.014806f, 0.003886f, 0.006879f, -0.011628f, 0.004380f, 0.009592f, 0.014481f, 0.003643f, 0.013066f, 0.005913f, 0.011107f, -0.016829f, 0.004752f, 0.001293f, 0.003158f, 0.000185f, -0.001307f, 0.006814f, 0.006234f, 0.005993f, 0.008883f, -0.003220f, 0.004232f, 0.002370f, 0.012856f, 0.015715f, -0.008221f, -0.009675f, 0.001274f, -0.004081f, -0.008626f, 0.003325f, 0.008678f, - -0.005681f, 0.003594f, -0.016177f, -0.011857f, 0.002472f, -0.008225f, -0.004034f, -0.002751f, -0.007477f, -0.000108f, -0.000328f, 0.000790f, -0.000404f, 0.003041f, 0.003526f, -0.000375f, 0.001668f, 0.000533f, 0.002612f, 0.002904f, -0.000191f, 0.000112f, -0.000424f, 0.003191f, 0.001440f, 0.001717f, 0.003849f, -0.000810f, -0.002315f, 0.002975f, -0.001117f, -0.000107f, 0.004452f, 0.002798f, 0.004201f, 0.005980f, 0.000711f, 0.002637f, 0.001399f, 0.003938f, 0.000833f, 0.001623f, 0.001967f, 0.027011f, 0.008492f, 0.011895f, -0.009976f, 0.003867f, -0.024585f, 0.001265f, -0.017782f, 0.013365f, 0.008955f, -0.007511f, 0.011221f, 0.006373f, -0.012068f, -0.003020f, 0.017270f, -0.000607f, 0.011868f, -0.003309f, 0.002326f, 0.013798f, -0.017279f, -0.001359f, 0.002742f, 0.005026f, 0.001075f, 0.005535f, 0.000648f, 0.016751f, -0.007855f, -0.004846f, -0.005148f, 0.012664f, 0.001532f, -0.005979f, 0.007622f, 0.021375f, -0.015020f, 0.002628f, 0.002796f, -0.001313f, 0.008551f, -0.004338f, 0.016257f, 0.005484f, 0.004050f, -0.013409f, -0.001416f, -0.003560f, 0.007490f, 0.005693f, 0.008096f, -0.009209f, - -0.006099f, 0.007783f, -0.016141f, -0.008992f, 0.003552f, 0.017261f, 0.010373f, 0.015266f, -0.016739f, -0.005271f, -0.017011f, -0.004382f, 0.005039f, -0.001442f, -0.016058f, 0.002097f, -0.009878f, -0.000137f, -0.017566f, -0.021168f, -0.008743f, -0.015278f, 0.000778f, 0.005408f, 0.002945f, -0.006531f, 0.008347f, 0.013577f, 0.003708f, 0.004013f, 0.007705f, -0.002446f, -0.013115f, -0.000785f, -0.009055f, 0.004693f, 0.001386f, -0.000868f, 0.002320f, 0.001226f, -0.009640f, -0.004864f, -0.002818f, 0.004794f, 0.000584f, -0.003333f, -0.001254f, -0.000279f, -0.001503f, 0.000802f, -0.002051f, -0.000873f, 0.000561f, 0.004370f, 0.000995f, 0.001429f, 0.000874f, -0.000834f, 0.001174f, 0.002926f, 0.001389f, 0.003803f, 0.001019f, 0.001978f, 0.000111f, 0.003017f, -0.004784f, 0.002983f, -0.031629f, -0.028495f, -0.020421f, 0.006583f, 0.006664f, 0.024158f, -0.010289f, 0.022956f, -0.009005f, -0.037175f, -0.003072f, -0.003222f, -0.014225f, -0.023963f, -0.008587f, -0.000274f, -0.014675f, 0.000126f, -0.022717f, 0.001933f, -0.023963f, 0.014120f, -0.005844f, 0.010354f, -0.004500f, -0.000182f, -0.007278f, -0.008495f, - 0.015205f, 0.003178f, -0.004111f, 0.017209f, 0.002144f, 0.002972f, 0.006069f, 0.015854f, 0.013956f, 0.010696f, 0.000503f, -0.018246f, -0.001692f, 0.009115f, 0.002928f, 0.011563f, -0.005199f, 0.005281f, -0.026909f, 0.008812f, 0.016597f, -0.020326f, 0.012325f, 0.004457f, 0.019588f, 0.015037f, 0.000175f, -0.004893f, -0.000271f, 0.013363f, 0.006683f, -0.017106f, -0.013896f, -0.023739f, -0.011403f, -0.015868f, -0.003457f, -0.019685f, -0.004053f, -0.006470f, 0.020452f, -0.009259f, 0.010198f, -0.005059f, -0.002785f, -0.006413f, -0.013837f, -0.007301f, -0.004328f, -0.004477f, 0.012938f, -0.038163f, -0.008002f, 0.018123f, 0.000993f, 0.003626f, 0.009770f, 0.018348f, -0.011233f, 0.002351f, 0.004989f, -0.000667f, -0.000011f, -0.002484f, 0.005134f, 0.007691f, -0.003125f, 0.000786f, -0.000575f, 0.008571f, -0.002956f, -0.000079f, 0.008614f, 0.001901f, 0.003135f, 0.004084f, 0.004128f, -0.001222f, 0.000867f, -0.002094f, -0.003129f, -0.001694f, -0.005666f, 0.001853f, 0.003975f, 0.002808f, 0.001688f, -0.007406f, 0.000188f, -0.000835f, -0.000197f, -0.003379f, 0.002265f, 0.003566f, -0.001672f, -0.000193f, - 0.004174f, 0.004440f, -0.004469f, -0.042560f, 0.031860f, -0.009558f, 0.018654f, 0.010654f, -0.001225f, -0.028316f, 0.021497f, 0.002518f, -0.002377f, 0.013386f, 0.009382f, -0.011983f, -0.000644f, 0.023151f, 0.007394f, -0.011168f, 0.016326f, -0.009680f, -0.007833f, -0.005569f, 0.004935f, -0.000395f, -0.003512f, 0.001763f, 0.006747f, 0.005915f, 0.006169f, -0.017927f, 0.010309f, -0.014987f, 0.019230f, -0.012771f, 0.019138f, 0.005764f, 0.001423f, -0.019753f, -0.019967f, -0.007021f, -0.006950f, 0.022234f, 0.005998f, 0.017667f, 0.007200f, -0.016847f, 0.000178f, -0.004277f, 0.007372f, -0.000130f, 0.006439f, -0.002617f, -0.011399f, -0.007002f, 0.011125f, 0.028286f, 0.020381f, 0.001740f, 0.006714f, -0.002704f, -0.004491f, 0.014201f, 0.011989f, -0.005934f, 0.017851f, 0.025177f, 0.035635f, 0.000137f, -0.021118f, -0.025553f, 0.008252f, 0.003876f, -0.001478f, 0.005620f, -0.000305f, -0.008633f, -0.001357f, 0.021145f, -0.004396f, -0.010181f, 0.038398f, 0.009148f, -0.006988f, 0.010758f, -0.000150f, -0.001065f, -0.001637f, -0.006816f, -0.001282f, 0.011146f, 0.005453f, -0.004451f, -0.006086f, 0.007617f, - 0.006307f, -0.001208f, 0.015371f, 0.003900f, 0.002583f, 0.001056f, 0.006691f, 0.002069f, 0.006247f, 0.003921f, 0.001941f, 0.000675f, 0.007975f, 0.003987f, 0.004081f, 0.000591f, 0.007918f, -0.001696f, 0.002885f, 0.004307f, 0.003078f, -0.001281f, 0.008895f, 0.009974f, 0.002927f, -0.002307f, 0.010710f, 0.000280f, -0.005412f, -0.001450f, 0.007751f, -0.000120f, -0.000955f, -0.002246f, -0.001728f, -0.000127f, 0.001838f, 0.004694f, 0.007187f, 0.002079f, 0.007603f, -0.002285f, 0.019542f, -0.028581f, 0.024062f, 0.009891f, -0.019502f, 0.045695f, 0.006894f, -0.023334f, 0.005437f, 0.012723f, 0.001256f, 0.009188f, 0.032838f, -0.031372f, 0.020522f, -0.012691f, 0.018214f, -0.006927f, 0.003939f, -0.029063f, 0.005008f, -0.003161f, 0.011754f, -0.011146f, 0.001705f, 0.002223f, 0.000389f, -0.017067f, 0.016459f, 0.001715f, -0.001680f, 0.007705f, -0.003169f, 0.007590f, -0.003959f, 0.023066f, 0.018316f, 0.022831f, 0.022836f, -0.003687f, 0.008055f, 0.009836f, 0.001127f, -0.011951f, 0.016195f, -0.019068f, 0.006012f, 0.018887f, -0.011108f, 0.010002f, -0.020980f, 0.006736f, -0.001703f, -0.005035f, - -0.001683f, 0.001609f, 0.006670f, 0.006272f, 0.022392f, -0.014601f, -0.000559f, 0.014713f, 0.031849f, -0.028106f, 0.007360f, -0.006914f, 0.009796f, -0.005178f, 0.046453f, -0.028504f, 0.010336f, -0.015890f, -0.008634f, 0.004124f, 0.005019f, 0.002551f, -0.040300f, -0.021351f, 0.033629f, 0.018322f, -0.003492f, -0.018095f, -0.020744f, -0.008304f, 0.007667f, -0.022520f, -0.012095f, 0.011079f, 0.006400f, -0.000461f, -0.000442f, -0.015761f, 0.003150f, -0.004586f, -0.005734f, 0.007214f, -0.003666f, -0.004861f, -0.001644f, -0.013788f, 0.004890f, -0.003571f, -0.004470f, -0.005014f, 0.006488f, -0.006650f, 0.007861f, -0.001196f, -0.001756f, 0.002624f, 0.002915f, 0.009902f, -0.009994f, -0.002170f, -0.007557f, -0.001652f, 0.005151f, 0.003759f, 0.013187f, -0.004251f, 0.007360f, 0.001613f, -0.004568f, -0.003111f, -0.001105f, 0.004916f, -0.000593f, 0.002521f, 0.021446f, -0.028081f, -0.005914f, 0.039846f, -0.011889f, -0.000742f, 0.021376f, 0.005060f, 0.013214f, -0.029643f, 0.028550f, 0.001908f, 0.002188f, -0.007487f, -0.017806f, -0.002409f, -0.002705f, -0.019085f, -0.011486f, 0.021269f, -0.006685f, 0.004124f, - -0.010356f, -0.046608f, 0.015859f, 0.002169f, -0.014350f, 0.008958f, 0.018135f, -0.001647f, 0.002061f, -0.003604f, 0.004609f, 0.012293f, 0.003963f, 0.019724f, 0.013542f, 0.003124f, 0.017270f, -0.013820f, -0.013589f, -0.019402f, 0.007410f, 0.011279f, 0.003334f, -0.030802f, 0.008810f, -0.026314f, 0.038246f, -0.009016f, 0.013634f, 0.032612f, -0.012776f, 0.020734f, 0.005230f, 0.022570f, 0.009138f, -0.010840f, -0.033377f, -0.023969f, -0.018646f, -0.002544f, -0.019576f, -0.003889f, -0.017106f, -0.011112f, 0.033694f, 0.007323f, -0.014281f, -0.012699f, 0.006844f, 0.012526f, -0.002865f, 0.004911f, -0.061098f, 0.024648f, 0.004223f, -0.019588f, -0.024058f, -0.006260f, -0.040336f, 0.004391f, 0.020131f, 0.002249f, -0.017303f, 0.010753f, 0.009090f, -0.014234f, 0.007191f, 0.004275f, -0.003509f, 0.000503f, -0.009086f, 0.002431f, 0.003222f, 0.002393f, -0.011858f, -0.006491f, 0.004938f, -0.007434f, 0.001765f, -0.004481f, -0.002834f, 0.002893f, 0.010078f, -0.012702f, 0.004478f, 0.009913f, -0.011807f, -0.011140f, 0.001513f, -0.010224f, 0.002397f, -0.006785f, 0.007107f, 0.003840f, -0.011831f, 0.006666f, - -0.007760f, -0.005040f, 0.008225f, 0.001907f, 0.018465f, 0.005715f, 0.000000f, -0.001151f, 0.001472f, -0.004829f, 0.002070f, 0.013675f, -0.037469f, -0.046020f, 0.028291f, -0.022451f, -0.026167f, -0.007271f, 0.017880f, 0.036470f, -0.023494f, 0.002225f, 0.017545f, -0.004901f, -0.007180f, 0.009590f, 0.006379f, 0.027476f, 0.009430f, -0.025891f, -0.000665f, -0.013004f, -0.000570f, -0.015282f, -0.020160f, 0.003416f, 0.020841f, -0.001246f, 0.009484f, -0.016752f, 0.005328f, 0.020532f, 0.016057f, 0.002632f, 0.001943f, 0.012922f, 0.012366f, 0.007911f, 0.018894f, -0.023228f, 0.026072f, 0.018755f, 0.006676f, -0.019162f, 0.001768f, 0.015192f, -0.015000f, 0.017609f, -0.011840f, 0.019912f, -0.004908f, 0.025924f, -0.040039f, 0.043092f, 0.010388f, 0.040648f, 0.002945f, -0.008334f, -0.002488f, 0.014820f, 0.001294f, -0.033534f, 0.001655f, -0.002182f, -0.034686f, 0.011276f, 0.025213f, -0.033023f, 0.028019f, -0.029049f, 0.009443f, 0.011491f, 0.006396f, -0.036407f, -0.017347f, -0.017776f, 0.003850f, 0.002916f, -0.021064f, -0.031157f, 0.006442f, -0.027383f, 0.019121f, -0.013126f, -0.006914f, 0.009661f, - -0.016896f, -0.013087f, -0.017344f, -0.007081f, -0.009537f, 0.000729f, -0.013813f, -0.010340f, -0.012578f, -0.018865f, -0.008986f, -0.003800f, -0.004021f, -0.004638f, -0.005275f, -0.003518f, -0.008796f, -0.009754f, 0.006862f, -0.011711f, -0.006198f, -0.002869f, 0.009468f, -0.004302f, 0.000574f, -0.015010f, -0.010683f, -0.004775f, -0.000012f, -0.003272f, -0.012711f, -0.001617f, -0.000841f, 0.010735f, 0.007067f, -0.008365f, -0.007747f, 0.001911f, -0.004010f, 0.007971f, -0.004085f, 0.004361f, -0.007758f, -0.021850f, 0.032094f, 0.006151f, 0.020989f, 0.020315f, 0.005428f, -0.016416f, 0.003142f, 0.054426f, -0.038106f, 0.008653f, -0.007018f, -0.021026f, 0.000846f, 0.006934f, 0.008476f, -0.000697f, -0.000237f, -0.011246f, -0.016210f, -0.025102f, -0.012827f, 0.018182f, -0.015985f, -0.025226f, 0.013893f, -0.009333f, 0.005115f, -0.003736f, 0.010726f, -0.011009f, 0.022995f, -0.008883f, 0.002190f, -0.000997f, 0.002136f, 0.021032f, 0.006990f, -0.010458f, 0.011144f, -0.009614f, 0.017303f, -0.011080f, 0.006915f, -0.025702f, -0.018739f, -0.013997f, 0.004103f, -0.013093f, -0.022295f, 0.008767f, 0.016013f, 0.004284f, - -0.011988f, 0.007031f, 0.011235f, 0.012586f, 0.034975f, 0.048140f, 0.065827f, -0.007205f, 0.010271f, 0.015498f, 0.009083f, 0.008466f, 0.010369f, -0.013963f, 0.025978f, -0.004136f, 0.033997f, 0.041826f, 0.030760f, 0.012152f, 0.017216f, 0.005432f, 0.058880f, 0.016605f, -0.011046f, -0.009756f, -0.008621f, -0.003766f, -0.004017f, 0.002777f, -0.004926f, -0.011398f, 0.009685f, -0.017837f, 0.005006f, -0.004286f, 0.005299f, -0.009017f, -0.007138f, -0.005756f, 0.013226f, -0.013340f, -0.012726f, -0.001211f, 0.005361f, -0.006853f, -0.016277f, -0.005631f, 0.000776f, -0.007930f, 0.008460f, 0.016074f, -0.009447f, -0.001292f, 0.003340f, -0.001861f, 0.005367f, 0.009261f, -0.004532f, -0.011464f, -0.001960f, 0.005286f, -0.005581f, 0.014611f, 0.017546f, 0.010605f, -0.005104f, -0.012064f, -0.001602f, 0.017109f, 0.001950f, -0.000603f, 0.007698f, 0.002310f, -0.000154f, -0.003000f, 0.004318f, 0.004285f, -0.011651f, -0.008625f, -0.000449f, 0.066041f, 0.052878f, -0.023009f, -0.010566f, -0.027455f, 0.015865f, 0.007737f, 0.032359f, -0.005677f, -0.013978f, -0.006324f, -0.020926f, 0.004731f, 0.000832f, 0.030500f, - -0.011390f, 0.011372f, -0.041017f, 0.022615f, -0.003186f, 0.015914f, -0.000164f, 0.014418f, 0.002500f, -0.023373f, -0.012017f, -0.020055f, -0.015176f, 0.016870f, 0.040748f, 0.017714f, -0.004789f, -0.012639f, -0.000497f, -0.003443f, 0.010209f, 0.013729f, -0.025966f, -0.000541f, -0.009010f, -0.008738f, -0.028195f, -0.021857f, -0.045731f, 0.000809f, -0.002227f, 0.016471f, -0.013653f, 0.029321f, -0.022224f, -0.009862f, 0.058853f, 0.058156f, -0.040161f, 0.008945f, 0.033843f, -0.019635f, -0.009253f, 0.017310f, -0.006389f, -0.024654f, 0.065469f, -0.016329f, -0.099197f, 0.032984f, -0.001167f, -0.051251f, 0.039281f, 0.041751f, -0.014713f, 0.029211f, 0.037333f, -0.017653f, 0.001435f, 0.023533f, -0.025445f, 0.010638f, 0.020645f, -0.036684f, -0.004903f, -0.012146f, 0.002133f, -0.013474f, 0.000347f, 0.005060f, -0.015334f, 0.012406f, -0.017799f, -0.008341f, 0.008894f, 0.017619f, -0.010046f, 0.000936f, 0.003716f, -0.002737f, 0.006183f, -0.013004f, 0.019194f, -0.009745f, 0.020266f, 0.019387f, -0.000291f, 0.000932f, 0.013387f, -0.009736f, 0.003050f, -0.000593f, 0.016735f, -0.012462f, 0.010226f, 0.002984f, - -0.038541f, 0.007422f, -0.004625f, -0.007351f, 0.002314f, -0.001160f, 0.004368f, -0.021940f, 0.003215f, -0.005763f, -0.019080f, 0.003250f, 0.033385f, -0.031230f, 0.010502f, 0.018130f, -0.026356f, -0.000178f, 0.014991f, -0.023973f, -0.011532f, 0.005336f, 0.012281f, 0.022639f, 0.011354f, -0.017068f, -0.002626f, 0.016923f, -0.017993f, 0.019354f, -0.008650f, -0.023211f, 0.022120f, 0.011752f, 0.011320f, -0.005325f, -0.005403f, -0.007811f, -0.000574f, 0.018718f, -0.036771f, 0.019207f, -0.000204f, 0.031803f, -0.019094f, 0.000699f, -0.023883f, 0.011282f, -0.039231f, 0.005031f, 0.002342f, -0.015201f, -0.011429f, 0.007014f, -0.026233f, -0.045672f, 0.028619f, -0.001974f, 0.009000f, -0.026762f, 0.017353f, -0.003815f, 0.018605f, 0.019952f, 0.010160f, -0.018697f, 0.016531f, -0.008649f, -0.003671f, -0.035171f, 0.005716f, -0.024857f, -0.027372f, -0.040153f, -0.016173f, 0.007139f, 0.011863f, -0.041467f, -0.020240f, 0.002878f, -0.014512f, -0.055898f, -0.044261f, -0.045460f, -0.009003f, -0.026935f, 0.024953f, 0.034984f, 0.009969f, -0.033454f, -0.038961f, -0.045458f, -0.003776f, -0.002810f, 0.025661f, -0.021635f, - -0.037880f, -0.018283f, -0.025058f, 0.009296f, 0.000987f, 0.009686f, 0.005095f, -0.012090f, 0.003232f, 0.009956f, -0.009436f, -0.003621f, -0.007922f, -0.004735f, -0.005594f, -0.011735f, -0.000090f, 0.015759f, 0.000997f, 0.004987f, 0.004915f, -0.002101f, 0.011902f, -0.006893f, 0.018141f, 0.016387f, -0.005795f, -0.013706f, -0.000246f, -0.004937f, -0.007500f, -0.008426f, -0.007493f, 0.013277f, 0.001012f, 0.012537f, -0.012076f, -0.013064f, -0.002044f, 0.007149f, -0.021329f, 0.004274f, 0.002616f, -0.015405f, 0.003913f, -0.012586f, -0.028020f, 0.018064f, -0.006379f, 0.002714f, -0.004318f, 0.003520f, -0.014148f, -0.003253f, -0.001048f, -0.029713f, 0.049285f, 0.054843f, -0.014040f, 0.036739f, -0.011297f, -0.015384f, -0.015219f, 0.035738f, -0.032407f, -0.008004f, -0.015734f, 0.057092f, 0.001608f, 0.020432f, 0.007038f, -0.006125f, 0.028297f, 0.015436f, 0.023084f, 0.006736f, -0.004178f, -0.010825f, 0.022093f, -0.004474f, -0.022624f, 0.026931f, -0.001214f, 0.023490f, -0.027513f, 0.018150f, 0.006270f, -0.028262f, -0.021672f, 0.049517f, 0.032218f, -0.003825f, 0.017617f, 0.014313f, -0.032343f, -0.021703f, - 0.010190f, 0.007290f, 0.021972f, 0.002031f, 0.004544f, 0.007966f, 0.026916f, 0.010462f, 0.006658f, -0.027945f, 0.074823f, 0.049680f, 0.005478f, -0.034593f, 0.016507f, -0.012172f, 0.009065f, -0.008543f, 0.015815f, -0.011878f, 0.002267f, 0.040646f, -0.028992f, -0.014695f, -0.038866f, 0.009948f, -0.010753f, -0.007633f, 0.035069f, 0.010256f, 0.004254f, 0.002175f, -0.014785f, -0.029681f, 0.020619f, -0.000933f, 0.000200f, 0.021477f, 0.022007f, -0.002696f, -0.016548f, -0.019896f, 0.036318f, -0.004757f, -0.002336f, -0.008067f, 0.027267f, -0.003190f, -0.019392f, 0.011596f, 0.010013f, 0.016203f, 0.007648f, 0.005064f, 0.025207f, -0.006214f, -0.009455f, 0.007824f, -0.000814f, -0.000013f, 0.002057f, 0.010603f, -0.006727f, -0.001128f, -0.008524f, 0.001674f, 0.012057f, -0.006775f, 0.002741f, 0.014219f, -0.005562f, 0.002162f, 0.010997f, -0.000364f, -0.003165f, -0.024806f, 0.015242f, -0.014406f, 0.009954f, -0.016993f, -0.003579f, 0.005179f, -0.010080f, -0.005183f, 0.022423f, 0.015138f, 0.001840f, -0.004752f, 0.020970f, 0.002916f, 0.009982f, 0.008042f, 0.004672f, -0.005103f, 0.009007f, 0.003457f, - 0.008919f, -0.018425f, -0.039551f, 0.101616f, -0.114687f, -0.013517f, -0.060517f, 0.073628f, 0.019595f, 0.012768f, -0.029058f, 0.006661f, -0.023776f, 0.065953f, -0.011996f, -0.004495f, 0.006488f, -0.003519f, -0.026193f, 0.009669f, 0.014745f, 0.019803f, -0.044999f, -0.023680f, -0.023326f, 0.008966f, -0.013843f, -0.012232f, -0.001750f, -0.000607f, 0.029012f, -0.015318f, 0.001134f, 0.021981f, -0.003085f, -0.029654f, 0.003382f, 0.023157f, -0.003123f, -0.046633f, 0.034403f, 0.004025f, 0.000298f, -0.000216f, -0.019962f, 0.015189f, -0.086352f, -0.060177f, -0.008734f, -0.021627f, 0.003550f, 0.006462f, -0.040640f, 0.063219f, -0.025450f, 0.087138f, -0.012682f, -0.030644f, 0.029509f, 0.004905f, 0.026295f, 0.040315f, 0.012440f, -0.041576f, -0.011877f, 0.046572f, 0.107885f, 0.003534f, -0.028059f, 0.045066f, 0.003529f, 0.053168f, 0.008234f, 0.072000f, -0.018972f, -0.002924f, -0.002322f, 0.016796f, 0.002107f, 0.027656f, 0.050250f, 0.002984f, -0.011091f, -0.009049f, 0.015744f, -0.013759f, -0.006298f, 0.033041f, 0.023765f, 0.003627f, -0.006566f, -0.012467f, -0.014391f, -0.008564f, -0.011781f, 0.023830f, - -0.015142f, -0.010262f, 0.011397f, 0.004251f, -0.004935f, 0.010679f, 0.011735f, -0.006745f, 0.010005f, 0.016937f, -0.009175f, 0.001127f, -0.024401f, 0.030304f, -0.000568f, 0.024375f, 0.001196f, -0.025396f, -0.000266f, 0.002646f, 0.006246f, 0.002730f, -0.000443f, -0.021816f, -0.020663f, -0.001209f, -0.012211f, 0.016117f, 0.005448f, -0.007447f, -0.001202f, 0.012685f, 0.002135f, -0.007305f, 0.000257f, 0.009199f, -0.000365f, -0.004412f, -0.001399f, 0.004995f, 0.149667f, 0.046811f, 0.017024f, -0.004173f, -0.015495f, -0.020895f, 0.049215f, 0.045171f, -0.050932f, 0.031050f, 0.023700f, 0.005769f, -0.015015f, -0.026851f, -0.069653f, -0.025847f, 0.022965f, 0.007751f, -0.022048f, 0.042825f, -0.013243f, 0.017599f, 0.017490f, -0.009802f, -0.009405f, 0.044670f, 0.001682f, -0.016401f, 0.028138f, -0.023659f, 0.054797f, -0.026179f, -0.015652f, -0.002529f, 0.021680f, 0.011662f, 0.055411f, -0.016466f, -0.032337f, -0.011254f, 0.015017f, 0.004190f, 0.029917f, 0.008496f, 0.003078f, -0.011546f, 0.024200f, 0.103486f, 0.044304f, -0.037892f, 0.033555f, -0.019680f, -0.030810f, 0.025841f, -0.000662f, 0.007827f, - -0.001609f, 0.018731f, -0.026855f, -0.041130f, -0.109667f, -0.028579f, 0.039724f, -0.014146f, -0.037370f, 0.016926f, -0.008390f, 0.016860f, -0.043699f, -0.038256f, -0.017818f, 0.016994f, 0.017948f, 0.052939f, 0.009635f, -0.003301f, -0.040738f, -0.057795f, -0.006863f, -0.025768f, 0.005447f, 0.021381f, -0.027370f, -0.028118f, -0.005771f, -0.035079f, -0.058853f, -0.019293f, -0.015370f, -0.031260f, -0.007019f, 0.017991f, -0.016161f, -0.008317f, -0.018635f, -0.004022f, -0.041824f, -0.026470f, -0.026503f, 0.001176f, 0.004279f, 0.015673f, -0.023230f, 0.013700f, -0.031456f, 0.001751f, -0.018369f, -0.002008f, 0.010233f, -0.009407f, 0.015337f, -0.041417f, -0.007930f, 0.014680f, 0.006337f, 0.013531f, -0.004945f, -0.010995f, 0.020870f, -0.003635f, -0.003891f, 0.014737f, -0.020541f, -0.016186f, -0.002706f, 0.004372f, -0.027370f, -0.012771f, -0.014735f, -0.008025f, -0.001972f, 0.000065f, 0.002758f, -0.012096f, 0.001660f, -0.003428f, -0.024085f, 0.032339f, -0.027229f, 0.090330f, 0.075689f, 0.035103f, -0.021617f, -0.032721f, 0.053886f, 0.046150f, -0.062106f, -0.013097f, -0.038339f, 0.052113f, -0.009668f, -0.075462f, - -0.033339f, 0.026070f, 0.046086f, -0.087123f, 0.034009f, -0.060490f, 0.021480f, -0.035943f, -0.009871f, 0.041090f, -0.014744f, 0.005799f, 0.025889f, 0.054956f, -0.037033f, -0.061457f, 0.012930f, -0.005318f, 0.005919f, 0.056370f, 0.013615f, 0.041945f, -0.054512f, -0.010433f, 0.016540f, -0.048492f, 0.077707f, -0.009642f, 0.046273f, -0.007044f, -0.011746f, 0.038078f, 0.037813f, -0.022634f, 0.085649f, -0.020688f, -0.038327f, 0.041229f, 0.073485f, 0.003774f, 0.012711f, 0.003171f, 0.031998f, -0.035339f, 0.025521f, 0.112243f, 0.051080f, -0.003922f, 0.048467f, 0.060237f, -0.045653f, -0.138202f, 0.009702f, 0.082746f, 0.093208f, 0.025345f, -0.009792f, -0.040959f, 0.048040f, 0.103434f, 0.047715f, 0.024977f, -0.102402f, 0.018876f, -0.058318f, -0.036183f, -0.090364f, 0.075912f, 0.015883f, -0.026557f, -0.036366f, 0.026527f, -0.026471f, 0.014256f, 0.009545f, 0.013279f, -0.033901f, -0.007303f, -0.004794f, 0.017528f, -0.012103f, 0.014799f, 0.012458f, -0.015333f, -0.010429f, 0.020661f, 0.000281f, 0.022205f, -0.010129f, 0.008159f, -0.015282f, 0.007799f, 0.041626f, 0.007832f, 0.007334f, -0.005479f, - -0.045971f, -0.023080f, -0.028592f, 0.014902f, 0.075967f, 0.072037f, 0.064667f, -0.005169f, -0.047962f, -0.044957f, -0.021887f, 0.030244f, 0.033317f, -0.002553f, -0.016258f, -0.024309f, -0.035831f, 0.009324f, 0.019301f, 0.016453f, 0.015006f, 0.012110f, -0.000171f, 0.001234f, -0.006839f, 0.007028f, -0.009898f, 0.006784f, -0.002623f, -0.001455f, -0.000356f, 0.008819f, 0.002077f, 0.003799f, 0.000581f, 0.004180f, -0.007511f, 0.000820f, -0.003524f, -0.001132f, 0.063614f, -0.124830f, 0.095929f, 0.020196f, -0.057020f, 0.001150f, 0.053818f, -0.035229f, 0.001889f, 0.029994f, -0.036891f, 0.003513f, -0.033113f, -0.020930f, 0.035767f, -0.030058f, -0.016902f, -0.063500f, 0.028011f, 0.062342f, 0.017815f, -0.027588f, -0.046984f, -0.007267f, 0.035947f, 0.019546f, -0.040081f, -0.000786f, 0.049088f, -0.006167f, 0.003678f, -0.016344f, -0.011572f, 0.114759f, -0.054602f, -0.013762f, -0.012425f, 0.019494f, 0.053516f, -0.056285f, -0.031405f, 0.075570f, -0.008584f, -0.004606f, -0.089850f, -0.074313f, 0.031491f, 0.050875f, 0.027972f, -0.092122f, 0.063567f, -0.001500f, -0.013867f, 0.013413f, -0.065764f, -0.018120f, - -0.008321f, -0.032553f, 0.059622f, -0.046210f, -0.025531f, -0.049707f, -0.028585f, -0.065598f, 0.020041f, -0.102653f, -0.028618f, 0.012171f, -0.050981f, 0.012755f, 0.028656f, 0.012602f, -0.000559f, -0.018334f, -0.036794f, 0.054484f, -0.011645f, -0.005174f, -0.019408f, 0.033006f, 0.066132f, 0.009967f, -0.089008f, 0.007919f, -0.039574f, 0.005990f, 0.008385f, -0.016237f, 0.006349f, -0.026677f, -0.008899f, -0.002248f, -0.020115f, 0.000381f, -0.005686f, 0.015664f, 0.014068f, -0.004902f, 0.007134f, 0.029148f, -0.013084f, -0.010523f, 0.029919f, -0.021719f, 0.019889f, -0.010575f, -0.009976f, 0.002133f, -0.012611f, -0.006213f, 0.018236f, -0.035487f, 0.010737f, 0.008231f, 0.013197f, 0.025237f, -0.017771f, 0.002923f, 0.019006f, 0.006772f, -0.006403f, -0.016854f, -0.003267f, -0.004184f, 0.000496f, -0.017300f, 0.005195f, -0.003161f, -0.006959f, 0.004064f, 0.002306f, -0.008114f, 0.018222f, -0.007916f, -0.005522f, 0.000289f, 0.004817f, -0.000827f, -0.072158f, 0.043534f, -0.001489f, 0.056399f, -0.011813f, 0.058351f, 0.007154f, -0.007581f, 0.025966f, 0.067742f, 0.032302f, 0.017297f, 0.013357f, 0.008585f, - 0.026478f, -0.034224f, -0.002992f, -0.025677f, -0.027127f, 0.041667f, 0.025726f, 0.015916f, -0.012256f, -0.010534f, -0.005204f, 0.043603f, 0.006417f, -0.019352f, -0.031831f, -0.001465f, -0.007748f, 0.032804f, 0.004700f, 0.027438f, 0.051260f, -0.014377f, -0.130925f, 0.008576f, 0.105837f, 0.011076f, -0.078191f, -0.010082f, 0.029661f, 0.023556f, 0.041364f, 0.037920f, -0.003445f, -0.024630f, -0.025607f, 0.033197f, -0.020546f, 0.003719f, 0.011248f, -0.135630f, -0.023893f, -0.026076f, 0.021153f, 0.106609f, -0.002345f, 0.008569f, -0.025143f, 0.007253f, 0.021574f, 0.044732f, 0.022940f, -0.026423f, -0.014331f, -0.065842f, -0.004428f, 0.045286f, -0.020419f, -0.009387f, 0.016221f, 0.046010f, 0.036816f, -0.009899f, -0.047277f, 0.000310f, 0.016614f, 0.005244f, -0.031586f, 0.003880f, 0.003285f, -0.002315f, -0.027351f, -0.034767f, 0.029729f, 0.024883f, -0.001769f, -0.005385f, -0.026784f, 0.020902f, 0.008092f, 0.004826f, 0.007569f, 0.006731f, 0.011534f, 0.000879f, -0.029645f, 0.016385f, 0.000259f, -0.001701f, 0.001119f, 0.007874f, 0.003136f, -0.003804f, -0.000611f, 0.001283f, -0.010118f, -0.005484f, - -0.040829f, 0.006499f, 0.027870f, -0.019820f, 0.009576f, -0.032405f, 0.017781f, 0.008692f, -0.005431f, -0.008814f, -0.003874f, -0.002993f, 0.003265f, -0.006944f, 0.036741f, -0.004257f, -0.214156f, -0.402827f, -0.161882f, -0.272646f, -0.313345f, 0.194859f, 0.068127f, 0.179035f, 0.538384f, 0.352388f, 0.284362f, 0.426149f, 0.212754f, 0.013740f, 0.168554f, 0.041965f, -0.170537f, -0.119844f, -0.135900f, -0.312287f, -0.253663f, -0.109629f, -0.227143f, -0.250339f, -0.103490f, -0.154091f, -0.258458f, -0.133611f, 0.020000f, -0.162577f, -0.148758f, 0.032787f, -0.032221f, -0.148263f, 0.166110f, 0.108395f, -0.124507f, 0.123184f, 0.186948f, 0.028284f, 0.106885f, 0.375582f, 0.178387f, 0.112558f, 0.441859f, 0.309564f, 0.179259f, 0.435521f, 0.583930f, 0.361452f, 0.523618f, 0.678156f, 0.484649f, 0.321342f, 0.423645f, 0.222930f, -0.215796f, -0.142208f, -0.285043f, -0.664176f, -0.665913f, -0.674587f, -1.018160f, -1.005461f, -1.010098f, -1.052381f, -0.993443f, -0.966495f, -0.760751f, -0.609067f, -0.460508f, -0.189890f, 0.055865f, 0.147591f, 0.375974f, 0.653035f, 0.553406f, 0.741734f, 1.054866f, 0.886555f, - 0.828103f, 1.008114f, 0.746946f, 0.383038f, 0.415220f, 0.389454f, 0.146237f, 0.103970f, 0.209133f, 0.077221f, -0.018260f, 0.069894f, 0.024973f, -0.145449f, -0.129841f, -0.078441f, -0.259877f, -0.298737f, -0.130258f, -0.227317f, -0.312722f, -0.129378f, -0.083017f, -0.170659f, -0.002384f, 0.054884f, -0.056258f, -0.008643f, -0.041490f, -0.238885f, -0.343840f, -0.385701f, -0.481432f, -0.567123f, -0.508762f, -0.465376f, -0.433067f, -0.325365f, -0.206941f, -0.147657f, -0.026661f, 0.114648f, 0.178700f, 0.258603f, 0.426338f, 0.517826f, 0.604353f, 0.647246f, 0.613623f, 0.546554f, 0.418498f, 0.285765f, 0.159905f, 0.022140f, -0.026779f, -0.046326f, -0.074896f, -0.084970f, -0.086127f, -0.100419f, -0.106070f, -0.096441f, -0.086389f, -0.096665f, -0.103215f, -0.099209f, -0.103718f, -0.114163f, -0.109789f, -0.105546f, -0.083311f, -0.056224f, -0.044627f, -0.028670f, 0.001584f, 0.012625f, 0.026688f, 0.056312f, 0.074129f, 0.076971f, 0.075731f, 0.059527f, 0.039774f, 0.023354f, -0.000754f, -0.022135f, -0.033457f, -0.054036f, -0.069369f, -0.075058f, -0.088108f, -0.092490f, -0.084404f, -0.079318f, -0.074181f, -0.062027f, - -0.054229f, -0.043394f, -0.031618f, -0.023236f, -0.011390f, -0.001080f, 0.012101f, 0.020233f, 0.028637f, 0.037675f, 0.047257f, 0.053323f, 0.063115f, 0.073659f, 0.081293f, 0.085400f, 0.088470f, 0.090378f, 0.089132f, 0.086749f, 0.086000f, 0.078153f, 0.068147f, 0.055339f, 0.040841f, 0.026235f, 0.011060f, -0.005600f, -0.019500f, -0.034242f, -0.046454f, -0.058826f, -0.069790f, -0.080921f, -0.085320f, -0.088236f, -0.087486f, -0.080721f, -0.073414f, -0.064516f, -0.050470f, -0.036774f, -0.023837f, -0.008621f, 0.004514f, 0.013188f, 0.020987f, 0.026573f, 0.027162f, 0.025468f, 0.024166f, 0.020895f, 0.016501f, 0.013421f, 0.011578f, 0.009249f, 0.007454f, 0.006435f, 0.005667f, 0.004713f, 0.004350f, 0.004393f}, - {-0.012880f, -0.001138f, 0.012170f, -0.010762f, 0.004232f, -0.018169f, 0.000238f, -0.006540f, 0.007376f, -0.006101f, 0.001715f, -0.004119f, -0.007578f, -0.001903f, -0.000683f, 0.005590f, 0.006971f, -0.006515f, -0.011415f, 0.006062f, 0.002090f, 0.004256f, 0.002571f, 0.004804f, -0.006599f, -0.004925f, 0.001228f, -0.001206f, 0.006012f, 0.004364f, -0.005040f, -0.001033f, 0.004589f, 0.008507f, 0.005234f, 0.000126f, -0.006596f, 0.003625f, -0.001106f, -0.003468f, 0.004692f, 0.002079f, -0.006059f, -0.005032f, -0.004105f, 0.003466f, -0.005937f, -0.003144f, 0.005036f, 0.001996f, -0.000158f, -0.006178f, 0.002319f, -0.005303f, -0.013820f, 0.001432f, -0.004693f, -0.008865f, 0.004120f, -0.002476f, -0.002535f, -0.002997f, 0.000208f, 0.006872f, 0.004116f, 0.002361f, 0.003118f, 0.005205f, -0.010412f, 0.005498f, -0.004135f, -0.003935f, -0.002294f, 0.003529f, 0.000674f, 0.007385f, 0.010656f, 0.004227f, 0.000832f, 0.001279f, -0.000152f, 0.006879f, -0.002871f, -0.000176f, 0.003334f, 0.000311f, -0.002815f, -0.002815f, 0.000971f, -0.000004f, -0.003180f, -0.001522f, 0.001001f, -0.000089f, -0.000421f, -0.001191f, - -0.001575f, 0.001137f, 0.000682f, 0.001226f, -0.000470f, 0.000481f, -0.000327f, -0.002870f, -0.001142f, 0.001428f, 0.002356f, -0.001245f, -0.001569f, 0.000619f, 0.001491f, 0.027652f, -0.002342f, 0.005062f, 0.006081f, -0.002842f, 0.002862f, 0.011009f, -0.008599f, -0.001531f, 0.003145f, -0.004285f, -0.000847f, 0.008083f, -0.002620f, -0.001837f, -0.000566f, 0.003125f, -0.001551f, 0.003885f, -0.002739f, -0.002703f, -0.001242f, -0.006294f, -0.010727f, -0.002035f, -0.003443f, -0.001453f, 0.006314f, -0.011375f, 0.013963f, 0.000069f, 0.000242f, 0.000464f, 0.002636f, -0.000353f, -0.005368f, 0.000828f, 0.004304f, 0.010521f, 0.000526f, -0.000094f, -0.001605f, -0.003571f, 0.007007f, 0.003309f, -0.002558f, 0.003847f, -0.006977f, 0.001172f, 0.002229f, -0.005300f, -0.018141f, -0.005699f, -0.000452f, -0.001087f, -0.000862f, -0.001617f, -0.002309f, -0.001336f, -0.003447f, 0.004425f, 0.013371f, 0.007555f, 0.000588f, -0.000045f, -0.000355f, 0.004652f, -0.002731f, -0.012212f, -0.000419f, -0.006371f, 0.003999f, -0.007226f, 0.004078f, -0.017615f, -0.000106f, -0.002528f, 0.005979f, 0.009565f, -0.001465f, -0.002306f, - 0.001444f, -0.000064f, 0.005159f, 0.001868f, 0.000867f, 0.006956f, -0.005140f, -0.000703f, 0.000891f, 0.002473f, 0.000016f, 0.002522f, 0.000146f, 0.001606f, 0.000749f, -0.000362f, 0.000526f, -0.000652f, -0.000070f, 0.001442f, 0.002224f, 0.000241f, -0.000603f, -0.000891f, 0.000298f, -0.000409f, 0.001263f, 0.000875f, 0.000619f, -0.000439f, 0.000239f, 0.000821f, -0.024368f, -0.023497f, -0.008849f, -0.003489f, -0.003361f, 0.000010f, 0.005932f, 0.001407f, 0.004817f, -0.011040f, 0.005447f, 0.006862f, 0.006634f, 0.007777f, -0.006033f, 0.001663f, 0.018321f, -0.011348f, -0.000407f, -0.008088f, -0.011718f, -0.001414f, -0.000838f, 0.010142f, -0.004931f, 0.001055f, -0.008754f, 0.005595f, 0.003498f, 0.004389f, -0.019616f, 0.003010f, -0.003591f, -0.006893f, -0.001856f, -0.000111f, -0.014554f, -0.009437f, -0.008129f, -0.000670f, 0.012153f, 0.004201f, 0.004023f, 0.005825f, -0.005442f, 0.003422f, -0.004883f, 0.010377f, 0.015989f, -0.001515f, -0.001473f, 0.004530f, 0.001117f, 0.004118f, 0.008984f, -0.004234f, 0.009295f, -0.001473f, -0.000288f, 0.005483f, 0.007528f, -0.002869f, -0.010880f, -0.010027f, - 0.003864f, -0.001387f, -0.001870f, -0.004430f, 0.004937f, -0.008353f, 0.003096f, 0.006227f, 0.010553f, -0.006157f, 0.010119f, 0.006588f, 0.003290f, 0.005036f, 0.001221f, -0.001735f, -0.006817f, 0.004828f, -0.003208f, -0.006388f, -0.008042f, 0.003313f, -0.002651f, 0.004826f, 0.000852f, -0.003121f, -0.003753f, -0.001939f, 0.001600f, -0.002009f, -0.000707f, -0.002576f, -0.001127f, -0.000179f, 0.002474f, 0.001274f, -0.000079f, 0.001410f, 0.004876f, -0.000497f, 0.000015f, 0.002821f, -0.001538f, 0.000774f, -0.001072f, -0.000862f, 0.001404f, 0.002021f, 0.002065f, 0.001291f, -0.000028f, -0.000670f, 0.001524f, 0.000694f, 0.003340f, 0.003967f, -0.003181f, -0.000361f, 0.001758f, 0.000518f, -0.001811f, 0.000572f, 0.002286f, 0.001956f, -0.001037f, 0.000242f, 0.001287f, -0.001164f, -0.026577f, 0.011592f, -0.011862f, 0.021469f, -0.019867f, 0.015723f, 0.008048f, -0.008216f, -0.010285f, -0.005699f, 0.004149f, 0.003744f, -0.005523f, 0.012687f, -0.004474f, -0.012001f, -0.002393f, 0.013119f, 0.009019f, -0.013144f, 0.002183f, -0.001592f, -0.013762f, -0.005668f, -0.008826f, -0.002018f, -0.010518f, -0.002754f, - -0.004344f, -0.014531f, -0.005128f, 0.007471f, 0.010708f, -0.001990f, -0.012429f, -0.002468f, 0.008945f, -0.002663f, 0.000390f, 0.000666f, 0.000282f, -0.012375f, -0.000286f, -0.001427f, -0.003071f, -0.000522f, 0.002281f, -0.008845f, 0.005173f, -0.009474f, -0.000123f, -0.000003f, 0.000284f, 0.007138f, 0.000233f, -0.003227f, 0.002971f, 0.004968f, 0.011781f, 0.005402f, 0.002745f, -0.003325f, -0.007167f, -0.006773f, -0.002759f, -0.007403f, -0.005277f, 0.004463f, 0.007741f, -0.005571f, -0.009349f, -0.006390f, 0.003078f, 0.001714f, -0.008764f, -0.002971f, 0.001188f, -0.007370f, -0.003335f, 0.001095f, 0.002364f, 0.003087f, -0.003350f, -0.004044f, -0.005565f, 0.000280f, -0.000608f, -0.002100f, 0.001829f, -0.001793f, -0.000558f, -0.004238f, -0.000882f, -0.001379f, 0.003862f, 0.001934f, -0.001462f, 0.001924f, -0.000151f, 0.000656f, -0.001768f, 0.000285f, -0.001020f, -0.000021f, -0.001460f, -0.002799f, 0.002138f, -0.000129f, -0.002666f, -0.001644f, -0.000194f, -0.002434f, -0.002841f, 0.002753f, -0.001641f, 0.032546f, 0.012931f, -0.002210f, 0.007356f, -0.005263f, 0.018233f, 0.007692f, 0.032864f, 0.000596f, - -0.031846f, 0.008135f, 0.019278f, -0.011501f, 0.003361f, 0.013263f, -0.010234f, 0.009346f, -0.008300f, -0.001821f, -0.010229f, -0.009749f, -0.003096f, 0.002680f, -0.001075f, 0.004385f, -0.004394f, 0.014082f, -0.008450f, 0.003965f, 0.002586f, 0.009155f, -0.016833f, -0.008788f, -0.006646f, -0.002009f, -0.005969f, 0.001566f, 0.010250f, 0.007307f, 0.016288f, -0.002406f, -0.001224f, -0.009309f, -0.003067f, 0.010269f, -0.010053f, 0.008478f, -0.009405f, -0.003968f, 0.014952f, 0.021589f, 0.015477f, 0.002699f, -0.011411f, 0.007977f, 0.005932f, -0.006090f, 0.012572f, -0.008321f, 0.002474f, 0.001967f, -0.022992f, -0.000222f, -0.021795f, -0.008792f, 0.003468f, -0.005787f, -0.010406f, -0.008905f, 0.001812f, 0.014945f, 0.003729f, -0.006139f, -0.007605f, -0.006712f, 0.001502f, 0.002404f, 0.007156f, -0.011362f, -0.010215f, 0.000674f, -0.001973f, 0.000655f, -0.002938f, -0.001710f, -0.001826f, -0.001006f, 0.003394f, 0.000852f, 0.001558f, -0.001503f, -0.002360f, -0.002331f, 0.000670f, 0.005943f, 0.001992f, 0.004311f, 0.001383f, -0.006875f, 0.005163f, 0.002292f, 0.000944f, 0.000977f, 0.002987f, -0.000713f, - 0.002576f, 0.000476f, -0.000059f, -0.002165f, -0.001571f, -0.002981f, 0.000876f, 0.002816f, -0.000544f, -0.001434f, -0.001599f, -0.009747f, -0.001086f, -0.001223f, 0.000337f, -0.001563f, 0.020098f, 0.040819f, -0.017938f, -0.013363f, -0.003701f, -0.004931f, 0.014156f, -0.013751f, -0.024941f, -0.008734f, 0.001625f, -0.006211f, 0.007019f, 0.003240f, 0.012262f, 0.005053f, -0.005066f, 0.017665f, 0.016575f, -0.007828f, 0.001102f, -0.011622f, -0.002061f, 0.000491f, -0.007181f, -0.001515f, 0.012344f, 0.017725f, 0.000608f, 0.002795f, 0.007243f, 0.004555f, 0.002767f, 0.001074f, -0.006870f, -0.012988f, 0.001373f, -0.018618f, 0.000561f, 0.004090f, -0.005990f, 0.007100f, -0.004783f, -0.010365f, -0.000901f, 0.009783f, 0.004295f, -0.004613f, 0.030059f, -0.000248f, 0.009628f, -0.018116f, -0.004104f, 0.012156f, -0.005873f, -0.013458f, 0.007721f, -0.015744f, -0.014071f, 0.003016f, 0.017011f, -0.014170f, -0.007974f, -0.004306f, 0.000611f, -0.006511f, -0.006416f, 0.022914f, 0.013403f, -0.002263f, 0.001188f, -0.011040f, -0.007883f, -0.004594f, 0.006843f, 0.008952f, 0.000703f, 0.007141f, 0.004635f, -0.001661f, - 0.006700f, -0.006425f, 0.022955f, 0.012881f, 0.002447f, 0.000557f, 0.002033f, -0.004079f, -0.001581f, -0.004062f, -0.004183f, -0.000309f, -0.000239f, -0.003920f, 0.001902f, -0.005821f, -0.001784f, 0.004202f, -0.001663f, 0.004310f, 0.002484f, 0.004066f, 0.000096f, 0.002746f, 0.003276f, 0.002851f, 0.000497f, 0.004858f, 0.001583f, 0.000508f, -0.003736f, 0.000171f, -0.001433f, -0.000250f, 0.000174f, 0.001621f, -0.000321f, 0.001458f, -0.003561f, -0.000349f, 0.001378f, 0.001735f, 0.002647f, 0.016316f, -0.028958f, -0.003804f, -0.021725f, -0.012323f, -0.019672f, -0.004924f, -0.002937f, -0.002860f, -0.007503f, 0.008951f, -0.027765f, 0.014445f, -0.009406f, 0.008641f, 0.003821f, 0.011750f, 0.000748f, 0.004949f, -0.011138f, -0.004637f, 0.005298f, -0.011057f, -0.008027f, 0.013828f, 0.003870f, 0.006338f, 0.005594f, -0.001263f, 0.003775f, 0.020525f, -0.007217f, 0.002106f, -0.009100f, 0.016538f, -0.009810f, -0.036267f, 0.011365f, 0.005882f, 0.015417f, 0.008440f, 0.021212f, -0.014110f, -0.005566f, 0.012910f, -0.005211f, -0.012038f, -0.005676f, 0.006798f, -0.017609f, 0.017654f, -0.000526f, 0.011825f, - -0.014854f, -0.006388f, -0.005337f, -0.016026f, -0.003209f, -0.012704f, -0.005781f, 0.001547f, 0.018742f, 0.015198f, -0.001606f, -0.022694f, -0.012951f, -0.004029f, 0.018205f, 0.015170f, 0.011003f, 0.010283f, -0.006333f, -0.026291f, -0.006687f, -0.000587f, 0.006288f, -0.008173f, -0.002518f, 0.013738f, -0.002504f, 0.016205f, 0.000287f, 0.011287f, 0.004330f, 0.000728f, -0.004005f, -0.000230f, 0.006120f, 0.001809f, -0.002729f, 0.000750f, -0.007235f, -0.001055f, -0.000342f, -0.009586f, -0.005784f, -0.006053f, -0.002976f, 0.002138f, -0.003860f, 0.001792f, -0.005202f, -0.000478f, -0.001471f, -0.002652f, 0.004360f, 0.002287f, -0.000834f, -0.006448f, -0.002514f, 0.002876f, 0.004437f, 0.000294f, -0.006413f, -0.003212f, 0.001537f, 0.003565f, 0.000989f, 0.001841f, 0.000558f, -0.003199f, -0.038034f, -0.045963f, -0.025935f, 0.018984f, 0.001610f, -0.008502f, -0.009670f, -0.014619f, -0.001470f, 0.005086f, -0.025603f, -0.002358f, 0.016316f, -0.009816f, -0.006966f, 0.018231f, 0.004858f, -0.011845f, 0.004658f, -0.011457f, 0.026980f, -0.008573f, -0.006308f, 0.008816f, -0.013901f, -0.008650f, -0.008118f, 0.004673f, - -0.009628f, -0.003513f, 0.004588f, 0.003376f, -0.031494f, 0.014251f, 0.013844f, -0.008963f, 0.024535f, 0.009535f, 0.002417f, 0.023590f, 0.013470f, 0.004331f, 0.003370f, 0.025499f, -0.002442f, -0.004174f, -0.001624f, 0.015732f, 0.008801f, -0.022818f, 0.008990f, 0.007359f, -0.000086f, -0.012073f, -0.036992f, 0.016529f, -0.002358f, -0.008958f, -0.023170f, -0.012945f, 0.014365f, -0.002849f, -0.006693f, -0.015296f, -0.030076f, 0.003246f, -0.004097f, -0.015806f, -0.006661f, -0.028305f, -0.004479f, -0.006201f, -0.005314f, -0.001009f, 0.010304f, 0.022107f, 0.009463f, -0.007105f, -0.015579f, 0.006295f, 0.001174f, 0.009357f, 0.005823f, -0.003306f, 0.006750f, 0.002665f, -0.000647f, -0.008254f, 0.000855f, -0.013579f, -0.000753f, -0.002801f, 0.002367f, -0.005100f, 0.006598f, 0.004090f, -0.001454f, -0.000892f, -0.001247f, 0.001186f, -0.003064f, -0.000557f, 0.003822f, -0.001236f, -0.001308f, 0.007392f, -0.002747f, -0.001576f, 0.005796f, -0.004153f, 0.003525f, -0.011301f, -0.007456f, -0.003989f, -0.006087f, -0.000359f, -0.006050f, -0.007872f, -0.006018f, -0.001454f, -0.001211f, 0.003016f, -0.000245f, -0.004704f, - 0.002927f, 0.001353f, -0.002610f, -0.039542f, 0.031626f, 0.001673f, 0.016119f, -0.003006f, -0.001413f, 0.002873f, 0.017428f, 0.001622f, -0.002263f, -0.023938f, 0.008401f, -0.002730f, -0.018483f, 0.004696f, -0.012099f, -0.009366f, 0.034099f, 0.009593f, 0.010457f, -0.007495f, 0.012178f, 0.014649f, 0.014225f, -0.008413f, 0.012417f, 0.006344f, -0.014430f, 0.009243f, -0.014031f, -0.004963f, 0.008899f, 0.004103f, -0.001481f, -0.007897f, -0.007324f, 0.022586f, -0.006636f, -0.010116f, -0.006409f, 0.004503f, 0.004921f, -0.010998f, -0.018342f, -0.001478f, -0.019676f, -0.002466f, -0.017738f, -0.006838f, -0.004214f, 0.003341f, -0.009038f, -0.015499f, 0.019393f, -0.008164f, -0.021353f, 0.013511f, 0.022800f, -0.011183f, -0.007294f, 0.011389f, 0.008388f, 0.022449f, 0.014631f, 0.002142f, -0.000198f, -0.023374f, 0.005634f, 0.022114f, 0.017931f, -0.015959f, 0.017100f, 0.018331f, -0.012327f, -0.034647f, -0.011091f, -0.031050f, 0.005236f, 0.017576f, 0.008984f, 0.001992f, -0.009230f, -0.012655f, -0.001344f, 0.001475f, 0.005418f, -0.002979f, 0.010165f, -0.004690f, -0.003504f, 0.003807f, 0.010766f, -0.015916f, - -0.002033f, -0.002155f, -0.004741f, -0.000047f, 0.004373f, -0.001043f, -0.000427f, -0.002647f, -0.000240f, -0.002674f, 0.000954f, -0.000363f, -0.000264f, 0.001341f, 0.005672f, -0.005015f, -0.002709f, 0.003038f, 0.003680f, 0.011608f, -0.001058f, 0.004759f, 0.004738f, -0.005228f, 0.004296f, 0.001730f, -0.004321f, 0.000991f, 0.001841f, 0.001225f, 0.004889f, 0.010107f, 0.002303f, -0.003612f, 0.006994f, -0.002309f, -0.003720f, 0.000422f, -0.006542f, -0.002995f, -0.000348f, 0.000199f, 0.007435f, -0.063019f, 0.029978f, 0.008385f, -0.003104f, 0.042261f, -0.002651f, 0.021321f, -0.019101f, -0.004583f, 0.003201f, 0.000127f, 0.024098f, 0.015275f, -0.033064f, 0.020416f, 0.001408f, 0.012203f, -0.029796f, -0.001299f, 0.016992f, -0.029249f, 0.036278f, 0.009727f, -0.000534f, -0.013153f, 0.002033f, 0.015634f, -0.026259f, 0.002267f, 0.006527f, 0.004477f, -0.016247f, -0.006106f, 0.015092f, 0.008479f, -0.001783f, 0.002124f, -0.010736f, -0.018259f, 0.007350f, -0.030770f, -0.001415f, 0.043731f, 0.042688f, -0.013857f, 0.005164f, -0.002032f, 0.012115f, 0.030677f, 0.002449f, 0.014592f, 0.004750f, -0.016353f, - -0.001365f, -0.003254f, -0.046675f, -0.021179f, 0.028650f, 0.001160f, 0.008731f, -0.011410f, -0.003004f, 0.010067f, 0.013794f, -0.001446f, 0.035693f, 0.000338f, 0.027808f, 0.003301f, 0.005746f, 0.003469f, -0.018450f, -0.023176f, 0.028164f, 0.006373f, -0.014918f, 0.020360f, -0.016985f, 0.001336f, 0.017237f, 0.002627f, -0.004603f, 0.007904f, -0.007620f, -0.007367f, 0.008554f, 0.011738f, 0.000701f, -0.016212f, -0.007857f, -0.017452f, -0.006313f, 0.004061f, 0.005405f, 0.002576f, -0.006826f, -0.003342f, -0.012561f, 0.008748f, -0.000298f, -0.005229f, -0.002420f, 0.003551f, 0.001939f, 0.010894f, 0.009808f, 0.006223f, 0.006328f, 0.001969f, 0.007764f, -0.005533f, 0.003499f, 0.004011f, 0.003911f, -0.004867f, 0.007849f, 0.003973f, -0.001321f, -0.001685f, -0.002209f, -0.002224f, -0.003774f, -0.008980f, -0.002659f, -0.000381f, -0.003637f, -0.006644f, 0.021061f, -0.045817f, 0.018415f, 0.028863f, -0.003987f, 0.008579f, 0.013001f, -0.007017f, -0.004423f, 0.017802f, -0.006694f, 0.027017f, -0.025712f, 0.014044f, 0.033442f, -0.035836f, 0.001475f, -0.017058f, 0.021138f, 0.008882f, 0.017539f, -0.018153f, - -0.014123f, -0.000241f, 0.045201f, 0.000485f, 0.022890f, -0.010175f, 0.001426f, -0.003150f, -0.003968f, -0.020092f, -0.000727f, -0.005672f, 0.009251f, -0.009001f, -0.012952f, -0.010976f, -0.000773f, -0.003861f, 0.020463f, 0.003453f, -0.011221f, -0.010291f, -0.010323f, -0.003863f, -0.004882f, 0.033244f, 0.001520f, 0.016663f, 0.001217f, -0.008069f, -0.007215f, 0.027631f, 0.020745f, -0.008049f, -0.026018f, 0.014664f, 0.010222f, -0.057610f, 0.003428f, 0.032383f, 0.031749f, 0.007302f, 0.025268f, -0.034795f, 0.056972f, 0.004905f, 0.010984f, 0.011165f, 0.027234f, -0.002218f, -0.024218f, -0.007486f, -0.028629f, 0.032610f, -0.014347f, -0.009787f, 0.028653f, -0.000953f, -0.011108f, -0.008786f, -0.021342f, 0.020235f, -0.034908f, -0.005247f, 0.003502f, -0.000963f, 0.005120f, -0.007375f, -0.014902f, -0.009684f, 0.004815f, 0.003743f, -0.006964f, 0.001712f, -0.006632f, -0.007428f, -0.005246f, 0.006323f, 0.003522f, -0.008421f, 0.007895f, 0.001452f, -0.009942f, 0.004461f, -0.001684f, -0.003675f, -0.007540f, -0.008873f, 0.001833f, 0.004132f, 0.018312f, -0.008072f, 0.010921f, 0.001193f, -0.003437f, -0.001430f, - -0.001955f, -0.004909f, 0.002961f, -0.000643f, -0.005213f, -0.001940f, -0.003549f, 0.001326f, 0.003877f, 0.002833f, -0.007457f, 0.017622f, -0.033920f, -0.027107f, 0.024352f, 0.020505f, 0.049982f, -0.017551f, -0.013146f, -0.008826f, 0.009469f, -0.021122f, -0.002497f, 0.008357f, -0.001435f, 0.026897f, 0.017338f, -0.021423f, 0.001995f, 0.006349f, 0.015555f, -0.024408f, 0.025748f, -0.000373f, 0.011433f, -0.004281f, -0.011680f, -0.025608f, 0.009106f, -0.004391f, -0.010787f, 0.005219f, -0.015714f, -0.015262f, -0.003401f, 0.008103f, 0.031176f, -0.046306f, -0.028016f, -0.024954f, -0.028062f, -0.007920f, 0.032323f, -0.019052f, -0.000859f, 0.031839f, -0.004645f, -0.014297f, -0.027546f, -0.007401f, -0.011859f, -0.056975f, -0.044237f, -0.012453f, 0.010012f, -0.005412f, 0.009981f, -0.012632f, -0.009118f, 0.027108f, 0.016359f, -0.028479f, -0.014718f, -0.031879f, -0.012680f, 0.002643f, 0.012771f, -0.005692f, 0.003420f, -0.027201f, -0.021783f, -0.019861f, -0.000560f, 0.004669f, 0.001716f, -0.025746f, 0.000841f, 0.034674f, 0.014952f, 0.039578f, -0.031166f, 0.048366f, 0.004278f, -0.030048f, -0.005002f, 0.001398f, - 0.008482f, -0.005036f, 0.013163f, -0.018375f, 0.008723f, -0.016276f, 0.007678f, 0.011131f, -0.003513f, 0.024762f, -0.002075f, 0.005845f, -0.006683f, -0.008944f, -0.005051f, 0.000717f, 0.005592f, -0.009466f, -0.001690f, 0.003178f, -0.002111f, 0.009513f, -0.002853f, -0.004763f, -0.015993f, 0.007068f, 0.001022f, 0.008367f, 0.003557f, -0.005366f, -0.015048f, 0.004849f, -0.019236f, 0.004879f, -0.004999f, -0.000802f, 0.002053f, -0.004144f, 0.001524f, 0.003021f, 0.013371f, 0.005221f, -0.005773f, -0.024395f, 0.004710f, -0.002650f, 0.056310f, 0.006169f, 0.027140f, -0.023441f, -0.015904f, -0.005745f, -0.026462f, -0.016811f, -0.025555f, -0.011889f, -0.016542f, 0.030551f, 0.007726f, 0.007721f, 0.031524f, -0.000825f, -0.001736f, 0.014228f, 0.028380f, 0.044280f, 0.032440f, -0.006641f, -0.011941f, -0.050971f, 0.014131f, 0.015987f, 0.006307f, -0.031785f, 0.036845f, 0.014663f, 0.021690f, -0.006025f, 0.002144f, 0.020889f, 0.046015f, 0.044711f, 0.025891f, 0.005410f, 0.047848f, 0.001238f, -0.014132f, 0.015496f, 0.029069f, 0.023517f, 0.043062f, 0.022684f, 0.001091f, 0.005168f, -0.025776f, 0.011234f, - -0.064619f, -0.011105f, -0.006363f, 0.014356f, 0.051050f, 0.028637f, 0.007658f, 0.036980f, -0.026706f, -0.024360f, 0.005393f, -0.062864f, -0.014860f, 0.002587f, 0.012224f, 0.014554f, 0.016795f, -0.003787f, 0.027764f, 0.003445f, 0.014446f, 0.050935f, -0.031187f, -0.016319f, -0.008485f, 0.009699f, -0.005789f, -0.048095f, -0.008896f, 0.032776f, -0.002190f, 0.041571f, -0.022126f, 0.001128f, 0.017407f, -0.004047f, 0.005032f, -0.017378f, -0.008294f, -0.013499f, -0.008777f, -0.014977f, -0.012056f, 0.003222f, 0.002785f, -0.030029f, -0.013718f, -0.016937f, -0.004293f, 0.005485f, 0.009290f, -0.013423f, -0.000329f, 0.003960f, -0.020874f, 0.003085f, -0.008257f, -0.013888f, -0.007010f, 0.001011f, 0.005398f, -0.009555f, -0.002157f, -0.014584f, -0.000904f, -0.003973f, -0.004472f, -0.010669f, -0.015292f, 0.003838f, 0.005405f, -0.008571f, -0.005650f, -0.006325f, -0.004464f, 0.002707f, 0.010526f, 0.002780f, 0.003518f, -0.003387f, -0.043401f, -0.013694f, 0.007865f, 0.032775f, 0.060233f, -0.024248f, 0.001044f, 0.009931f, -0.011067f, 0.055815f, 0.009885f, -0.027542f, 0.048916f, -0.010123f, -0.016433f, 0.034990f, - -0.031795f, -0.018622f, 0.002126f, 0.003033f, 0.004351f, 0.022903f, 0.012262f, 0.018579f, -0.005708f, 0.009836f, 0.028044f, 0.001671f, 0.019119f, 0.003467f, 0.000729f, 0.030952f, -0.040490f, -0.014760f, -0.013736f, 0.026931f, -0.020644f, -0.005417f, -0.012165f, 0.026667f, -0.011346f, 0.059390f, 0.043469f, -0.040564f, 0.019841f, -0.048731f, 0.006982f, 0.017518f, 0.009469f, 0.010451f, -0.062028f, -0.012108f, -0.059822f, 0.007860f, 0.004935f, 0.007217f, -0.009448f, -0.010925f, 0.028614f, -0.051746f, 0.017768f, -0.022456f, -0.097314f, -0.036528f, -0.031850f, 0.015925f, -0.014175f, 0.014713f, 0.048709f, 0.051832f, 0.029417f, 0.027224f, 0.025362f, 0.007277f, -0.038695f, 0.040529f, 0.000070f, -0.045051f, -0.035766f, -0.056594f, -0.074824f, -0.038699f, -0.007575f, 0.059737f, 0.021574f, 0.003531f, 0.022928f, -0.018398f, -0.000430f, 0.011395f, 0.009563f, -0.004939f, 0.008767f, 0.002711f, 0.006079f, 0.002383f, -0.018509f, 0.014800f, 0.009904f, 0.007202f, 0.002961f, -0.009803f, 0.005239f, -0.014513f, -0.005149f, -0.022473f, 0.018585f, 0.013907f, -0.003092f, 0.001887f, 0.014861f, 0.023492f, - -0.010660f, -0.023209f, -0.007023f, 0.018629f, -0.004201f, -0.013920f, 0.020031f, -0.001892f, -0.011697f, 0.013689f, 0.005512f, 0.000745f, -0.003496f, -0.000677f, -0.009954f, 0.006600f, -0.006377f, -0.003013f, 0.015403f, -0.076942f, -0.035626f, -0.026571f, 0.014492f, -0.058642f, 0.021325f, -0.034967f, 0.050341f, -0.058317f, -0.074003f, -0.015858f, -0.010454f, 0.058448f, 0.028686f, 0.026155f, -0.014691f, 0.007006f, -0.035737f, -0.028716f, 0.006990f, 0.012429f, -0.046132f, -0.042936f, -0.029994f, -0.003636f, 0.023667f, 0.017064f, -0.032305f, -0.040882f, -0.023555f, -0.024048f, -0.055441f, -0.031958f, 0.024951f, -0.015298f, -0.000066f, -0.007451f, 0.018396f, 0.028967f, -0.007261f, -0.083248f, 0.035538f, 0.070053f, 0.026350f, -0.001293f, -0.083448f, -0.019741f, 0.036868f, -0.010174f, 0.093949f, -0.009739f, -0.075150f, 0.012723f, -0.012394f, 0.006522f, 0.002409f, -0.014821f, 0.020598f, 0.025375f, -0.079296f, -0.020976f, 0.004707f, 0.028503f, -0.014462f, -0.040268f, 0.036481f, 0.003931f, -0.026669f, -0.079045f, -0.091706f, -0.047064f, -0.005541f, 0.007123f, 0.074078f, 0.104491f, 0.054013f, 0.041211f, - 0.018203f, -0.060039f, 0.022416f, 0.000113f, -0.031214f, -0.008676f, -0.099146f, -0.020535f, -0.000268f, 0.001202f, 0.003905f, 0.043872f, 0.016696f, 0.013416f, -0.017462f, -0.005247f, 0.038125f, -0.025226f, -0.000015f, -0.001082f, 0.007724f, -0.018585f, -0.030978f, -0.034622f, 0.016012f, -0.015876f, -0.005290f, 0.021087f, 0.001191f, 0.003862f, -0.026330f, 0.009608f, 0.009125f, 0.005197f, -0.021575f, -0.010606f, -0.014041f, -0.022598f, 0.003612f, -0.012871f, 0.025449f, 0.010359f, -0.016507f, 0.003834f, -0.005776f, 0.017820f, -0.022878f, -0.002481f, -0.000469f, 0.012854f, 0.011590f, 0.006275f, 0.013902f, 0.000434f, 0.007894f, 0.006485f, 0.140147f, 0.128707f, -0.054188f, 0.066789f, 0.059232f, -0.016582f, -0.009896f, -0.030676f, -0.016492f, -0.036073f, -0.025247f, 0.106748f, -0.005670f, 0.062192f, 0.000897f, 0.003038f, 0.000977f, -0.042116f, 0.010203f, 0.008724f, -0.092410f, 0.013783f, 0.022591f, -0.048723f, -0.010004f, -0.015036f, -0.006457f, 0.013678f, -0.002570f, 0.002796f, 0.040975f, 0.016502f, -0.019637f, 0.012532f, 0.065215f, 0.001035f, 0.030178f, -0.001649f, 0.024677f, -0.035888f, - -0.043031f, -0.024283f, -0.079196f, 0.021194f, 0.009167f, -0.035385f, -0.096265f, -0.063150f, -0.089967f, 0.065670f, -0.046559f, 0.010173f, 0.016605f, 0.014844f, 0.012879f, 0.070067f, -0.067159f, 0.000290f, -0.037474f, 0.074164f, -0.166238f, 0.034073f, 0.013274f, 0.053179f, 0.048918f, 0.000123f, -0.014945f, -0.025628f, -0.006920f, -0.048552f, 0.036015f, 0.098008f, -0.006989f, 0.020115f, 0.062465f, -0.043415f, 0.025137f, 0.030045f, -0.053963f, -0.037958f, -0.100511f, 0.083556f, -0.015675f, -0.073923f, 0.050096f, -0.012578f, 0.032961f, -0.002454f, 0.028678f, 0.004563f, -0.020983f, 0.034460f, 0.033941f, 0.005167f, 0.019776f, 0.031308f, 0.019524f, -0.021453f, -0.008311f, -0.020964f, -0.008333f, 0.026332f, 0.051743f, -0.002503f, -0.008530f, -0.002372f, 0.033583f, -0.051829f, 0.030487f, -0.014286f, 0.069824f, 0.013334f, -0.039994f, -0.008654f, 0.031591f, -0.016327f, -0.020446f, -0.016404f, -0.011323f, -0.016132f, 0.017910f, 0.011598f, 0.045209f, -0.037126f, 0.003512f, -0.004538f, 0.025351f, 0.001285f, -0.001779f, 0.014034f, 0.018771f, 0.013149f, 0.030086f, 0.003353f, 0.034527f, 0.018610f, - -0.000465f, -0.048559f, -0.046046f, 0.056963f, -0.115981f, 0.079999f, -0.047833f, -0.033407f, -0.021031f, 0.007313f, -0.033591f, -0.026116f, 0.036358f, -0.011134f, -0.079348f, 0.027404f, -0.004883f, 0.014076f, -0.017891f, 0.070566f, -0.057579f, 0.002487f, 0.029240f, -0.019941f, 0.022135f, -0.046923f, 0.003823f, -0.040369f, -0.020517f, 0.043989f, 0.005591f, 0.017653f, -0.025023f, 0.042526f, -0.012292f, -0.019783f, 0.016235f, -0.025973f, -0.021719f, -0.013859f, -0.014381f, -0.043822f, -0.058820f, -0.016310f, 0.032541f, 0.000559f, -0.018470f, -0.058620f, 0.002182f, -0.046325f, -0.003173f, 0.018715f, -0.045968f, -0.011254f, 0.033678f, 0.034327f, 0.024792f, -0.056905f, -0.027072f, 0.039284f, 0.012652f, -0.001066f, 0.031664f, -0.186855f, -0.043388f, -0.020813f, -0.085065f, 0.008380f, 0.023152f, -0.004964f, 0.015478f, 0.040084f, -0.023305f, -0.039716f, 0.009906f, -0.036062f, -0.011162f, 0.038900f, 0.061447f, -0.023409f, -0.074761f, -0.044962f, 0.004534f, -0.039762f, 0.005902f, -0.030858f, -0.029447f, 0.007732f, -0.060036f, 0.000674f, -0.037624f, -0.011487f, -0.020813f, 0.008309f, 0.014660f, -0.005980f, - -0.037420f, 0.008114f, -0.002927f, -0.023407f, 0.028417f, -0.001301f, -0.027765f, -0.009474f, -0.007694f, -0.010384f, -0.019465f, 0.010128f, -0.017858f, 0.014012f, 0.018932f, -0.007833f, 0.001583f, -0.011620f, -0.026523f, -0.036649f, 0.005794f, 0.004713f, 0.016162f, -0.042423f, 0.008081f, -0.000330f, -0.028119f, 0.020859f, -0.012161f, 0.014878f, 0.033463f, -0.076936f, 0.014563f, 0.010615f, 0.021267f, -0.012945f, -0.008847f, 0.025149f, -0.002685f, 0.001862f, 0.125758f, -0.015673f, -0.034483f, 0.004988f, -0.013710f, 0.062388f, 0.011981f, -0.005078f, 0.059334f, 0.060088f, 0.019963f, 0.023348f, 0.033150f, -0.073689f, -0.040548f, 0.061401f, -0.008080f, -0.060485f, -0.030386f, -0.027389f, 0.042073f, 0.022493f, -0.021948f, -0.087442f, 0.027528f, 0.013824f, 0.011927f, 0.014450f, -0.010246f, 0.008951f, -0.065341f, 0.058768f, 0.041090f, 0.021703f, -0.032572f, -0.027902f, 0.000203f, 0.029422f, -0.006097f, 0.030586f, 0.013657f, -0.069236f, -0.030466f, 0.010949f, -0.069373f, 0.004132f, 0.013668f, -0.061341f, -0.086067f, -0.012116f, 0.026432f, -0.050255f, -0.104571f, -0.045983f, -0.027109f, 0.068080f, - -0.041006f, 0.076824f, -0.015463f, 0.003574f, 0.033239f, 0.004455f, -0.117179f, -0.007886f, 0.005326f, 0.054873f, -0.104224f, -0.144696f, 0.010918f, -0.009508f, -0.091731f, 0.051947f, 0.024975f, -0.003551f, 0.000180f, 0.085009f, -0.121320f, 0.099862f, 0.021652f, 0.013256f, 0.041073f, -0.043990f, -0.039185f, -0.007757f, 0.019466f, -0.025101f, -0.001242f, 0.051166f, -0.042896f, -0.035046f, 0.046025f, -0.025867f, -0.012148f, 0.018844f, 0.013178f, -0.051100f, 0.026613f, -0.017257f, -0.003923f, 0.017790f, 0.018413f, -0.054453f, -0.008073f, -0.042403f, 0.024368f, 0.032587f, 0.002969f, -0.070028f, 0.050229f, -0.012358f, -0.000274f, 0.029579f, -0.006643f, -0.025724f, -0.003706f, 0.039147f, -0.058578f, 0.040304f, 0.003154f, -0.004860f, 0.015902f, 0.007461f, -0.036228f, 0.016760f, 0.000846f, 0.001271f, -0.047462f, 0.032874f, -0.030684f, 0.036309f, 0.006617f, -0.044965f, 0.004806f, 0.004998f, -0.011558f, 0.020493f, 0.004933f, 0.057323f, 0.021493f, 0.137062f, -0.059580f, -0.062048f, -0.026636f, -0.003759f, 0.130057f, -0.019560f, 0.107450f, -0.077668f, -0.031481f, 0.044796f, -0.084596f, -0.028677f, - -0.079697f, 0.011673f, 0.077981f, -0.110516f, -0.041572f, -0.010552f, 0.031622f, -0.002070f, 0.010621f, 0.029151f, -0.009267f, -0.070434f, -0.065572f, 0.002116f, 0.043646f, 0.120400f, -0.028559f, 0.031871f, -0.036547f, 0.058908f, 0.000432f, 0.005961f, -0.018416f, -0.072756f, 0.000750f, 0.065094f, -0.012993f, -0.004898f, -0.026317f, -0.063573f, 0.080746f, 0.030362f, 0.053317f, 0.072620f, -0.005279f, 0.003339f, 0.044045f, -0.118589f, 0.038975f, -0.060348f, 0.137545f, -0.014098f, 0.012021f, 0.019958f, -0.042309f, -0.041943f, 0.012295f, -0.060141f, 0.086637f, -0.052572f, -0.066812f, -0.066776f, 0.090652f, 0.030421f, 0.051795f, -0.012804f, 0.051732f, 0.053330f, -0.057083f, -0.016866f, -0.053081f, -0.027956f, 0.094494f, 0.067289f, 0.007251f, 0.017785f, -0.147502f, 0.099019f, 0.129396f, 0.014196f, -0.012335f, -0.025801f, -0.079994f, 0.112362f, -0.008360f, 0.006775f, -0.024053f, 0.002399f, -0.051180f, 0.105124f, -0.027097f, 0.050791f, 0.006458f, -0.019271f, -0.007972f, 0.101240f, -0.058235f, 0.049452f, 0.014972f, -0.044196f, 0.004185f, -0.014788f, 0.026340f, 0.007269f, 0.039524f, -0.018067f, - 0.002501f, 0.006960f, -0.002316f, 0.040142f, 0.068319f, -0.022459f, -0.005429f, 0.007204f, 0.036681f, 0.010209f, -0.055824f, -0.037004f, 0.074072f, 0.013997f, 0.035356f, -0.075323f, -0.091443f, 0.081913f, 0.053003f, 0.025018f, -0.008283f, -0.070160f, -0.003427f, 0.062270f, 0.018299f, 0.002719f, -0.006810f, -0.012353f, 0.010708f, 0.008379f, 0.013019f, -0.010341f, 0.006826f, 0.013364f, 0.008729f, -0.005787f, 0.001912f, 0.002554f, 0.012907f, 0.032804f, 0.012263f, -0.103432f, 0.070724f, -0.073582f, 0.008932f, -0.033945f, 0.027313f, -0.002929f, 0.038926f, -0.006346f, -0.033611f, 0.057859f, -0.020302f, -0.008220f, 0.008979f, -0.024454f, -0.021068f, 0.066776f, -0.015701f, -0.009338f, -0.007735f, -0.003596f, 0.030814f, -0.023582f, 0.007357f, -0.017314f, 0.015464f, -0.015152f, -0.011251f, -0.036099f, 0.052654f, -0.032641f, 0.017581f, 0.008191f, 0.036553f, -0.041101f, 0.009339f, -0.016962f, 0.041463f, 0.005154f, 0.003498f, 0.032371f, 0.009956f, -0.054395f, -0.007762f, -0.009574f, 0.015284f, 0.023383f, 0.020066f, -0.049512f, 0.021337f, -0.037493f, 0.026563f, -0.021528f, 0.005880f, -0.012512f, - 0.026250f, -0.010522f, 0.007833f, -0.055411f, 0.013331f, 0.026342f, -0.024886f, 0.024615f, 0.003765f, 0.008788f, 0.015947f, -0.022611f, 0.038405f, 0.014581f, -0.001759f, -0.012415f, 0.018875f, -0.012046f, 0.034909f, -0.029357f, -0.008204f, -0.027976f, 0.036158f, -0.035850f, 0.032896f, -0.029980f, 0.039922f, -0.034089f, 0.021165f, -0.033628f, 0.029514f, -0.002809f, 0.003513f, -0.010127f, 0.002079f, -0.006324f, -0.004578f, -0.010750f, 0.017796f, 0.006181f, -0.001817f, 0.005070f, -0.004688f, -0.009910f, 0.017915f, 0.002053f, 0.007183f, -0.011829f, 0.001321f, 0.016670f, -0.019318f, -0.005524f, 0.012260f, -0.000409f, -0.005285f, -0.013540f, 0.032073f, -0.010630f, -0.015115f, 0.007453f, 0.003551f, -0.005717f, 0.004087f, -0.002557f, 0.003814f, -0.006116f, 0.005278f, -0.010043f, 0.016187f, -0.013567f, 0.018563f, 0.006934f, -0.012484f, 0.003864f, -0.001870f, 0.001126f, -0.000759f, 0.007607f, 0.000866f, -0.006074f, 0.005342f, -0.006560f, -0.042902f, 0.087155f, 0.007417f, 0.011096f, -0.034640f, -0.025477f, -0.055092f, 0.037190f, -0.015352f, -0.011132f, -0.023863f, -0.000798f, -0.021261f, -0.002522f, - -0.002688f, 0.009851f, 0.010996f, -0.001566f, -0.002435f, -0.015570f, 0.014772f, 0.013817f, -0.012894f, 0.006272f, -0.029442f, 0.011916f, 0.005876f, -0.005050f, -0.004468f, -0.009743f, 0.009541f, 0.002200f, -0.020935f, -0.005533f, -0.006055f, -0.017353f, 0.028788f, 0.003131f, -0.018194f, 0.002925f, -0.007060f, 0.025102f, -0.008549f, -0.011558f, 0.004961f, -0.014781f, 0.029272f, 0.000963f, -0.016005f, 0.004739f, -0.006455f, 0.014382f, -0.018273f, -0.003525f, 0.006181f, -0.006561f, 0.012925f, -0.007172f, 0.003825f, 0.005933f, -0.016472f, 0.002444f, 0.016601f, -0.025079f, -0.001540f, 0.007769f, -0.023275f, 0.042735f, -0.038870f, 0.019582f, 0.007166f, -0.022148f, 0.044173f, -0.029854f, 0.007189f, 0.005745f, -0.018517f, 0.014646f, -0.007497f, -0.014255f, 0.014170f, -0.017007f, 0.011259f, -0.007749f, -0.005688f, 0.012784f, -0.010419f, 0.004193f, -0.004155f, -0.000006f, 0.002589f, -0.005640f, 0.002825f, -0.000197f, -0.005503f, 0.012092f, -0.010071f, 0.009042f, 0.000453f, -0.008256f, 0.008312f, -0.014657f, -0.001303f, 0.004010f, -0.002310f, -0.001922f, 0.002209f, -0.007567f, 0.009537f, -0.004661f, - -0.003223f, 0.001113f, 0.001103f, -0.005882f, -0.000781f, -0.003354f, 0.003381f, 0.004833f, -0.006633f, 0.006007f, -0.006326f, -0.001150f, 0.006369f, -0.004561f, 0.020326f, -0.093165f, -0.215099f, 0.056463f, 0.199122f, 0.168365f, 0.225899f, -0.111336f, -0.144306f, -0.216992f, -0.221810f, 0.015291f, 0.165377f, 0.182626f, 0.200018f, 0.066563f, -0.043527f, -0.158641f, -0.262725f, -0.143886f, 0.066830f, 0.103600f, 0.175215f, 0.132881f, 0.036282f, -0.023475f, -0.055354f, -0.131533f, -0.085281f, -0.081068f, -0.014885f, 0.069426f, 0.106296f, 0.056047f, 0.070957f, 0.035989f, -0.040003f, -0.006143f, -0.085528f, -0.118932f, -0.020388f, -0.027658f, 0.020971f, 0.112410f, 0.064688f, 0.055859f, 0.016442f, -0.041947f, -0.043342f, -0.037202f, -0.061676f, -0.016025f, 0.002699f, 0.026570f, 0.032218f, 0.053844f, 0.015276f, -0.001757f, -0.027160f, -0.049874f, -0.004321f, 0.018143f, 0.018436f, 0.031639f, -0.008081f, -0.024970f, -0.012103f, -0.025000f, -0.019783f, 0.005506f, 0.014115f, 0.040498f, 0.034158f, 0.032841f, 0.001837f, -0.017394f, -0.065618f, -0.060797f, -0.024901f, 0.004063f, 0.050587f, 0.054486f, - 0.022349f, 0.023198f, -0.002645f, -0.043652f, -0.026887f, -0.002998f, -0.010343f, 0.002521f, 0.004538f, 0.010706f, 0.008724f, -0.005493f, -0.014384f, 0.008634f, 0.013123f, 0.011008f, 0.011176f, -0.000849f, -0.008327f, -0.004951f, -0.022334f, -0.008977f, -0.012370f, -0.020741f, 0.012283f, 0.030570f, 0.035347f, 0.011927f, 0.012681f, -0.006716f, -0.008400f, -0.031570f, -0.047290f, -0.018007f, 0.005284f, 0.014934f, 0.018210f, 0.038882f, 0.035859f, 0.017635f, -0.014392f, -0.030089f, -0.034277f, -0.031785f, -0.023774f, -0.001415f, 0.028561f, 0.044605f, 0.035083f, 0.010406f, -0.016889f, -0.019931f, -0.020225f, -0.011450f, -0.007812f, -0.008550f, 0.008559f, 0.020526f, 0.014841f, 0.003427f, -0.002790f, -0.001390f, -0.005385f, -0.005769f, -0.008586f, -0.003532f, 0.004727f, 0.004256f, 0.002339f, 0.002940f, 0.002247f, 0.002110f, -0.004439f, -0.005427f, -0.001756f, 0.002491f, 0.001829f, 0.000758f, 0.000756f, 0.000907f, -0.001770f, -0.001317f, -0.000732f, 0.000439f, 0.000475f, 0.001337f, 0.001139f, 0.000854f, -0.000422f, -0.001517f, -0.002711f, -0.000236f, 0.000459f, 0.000239f, 0.000700f, 0.001878f, - 0.000570f, 0.000583f, 0.001526f, 0.000201f, -0.004208f, -0.003277f, -0.001071f, 0.000912f, 0.001799f, 0.002770f, 0.000916f, 0.000322f, -0.000187f, -0.000070f, -0.001111f, -0.000935f, -0.000574f, -0.000282f, -0.000920f, -0.000136f, 0.000082f, 0.000868f, 0.001243f, 0.001462f, 0.000720f, 0.000634f, -0.000499f, -0.001233f, -0.002141f, -0.001412f, -0.000781f, 0.000413f, 0.001553f, 0.002372f, 0.001548f, 0.000318f, -0.000811f, -0.001022f, -0.001568f, -0.001160f, -0.000120f, 0.000657f, 0.000612f, 0.000582f, 0.000172f, 0.000106f, -0.000084f, 0.000004f, -0.000126f, -0.000104f, -0.000146f, 0.000013f, -0.000038f, -0.000061f, -0.000141f, 0.000009f, 0.000076f, 0.000085f, 0.000045f, 0.000069f, -0.000012f, -0.000032f} - }, - { - {-0.010247f, -0.009027f, 0.011393f, -0.002243f, 0.009110f, 0.002711f, 0.013514f, -0.003060f, -0.006886f, -0.004717f, 0.008282f, 0.000304f, -0.002923f, -0.000721f, 0.009355f, -0.002397f, 0.001752f, 0.003336f, -0.006177f, -0.004673f, -0.001971f, 0.001791f, -0.006415f, 0.001725f, 0.001376f, -0.007426f, -0.002382f, -0.004412f, 0.000690f, -0.003202f, 0.001255f, 0.012318f, 0.006328f, -0.003501f, 0.000633f, -0.005734f, 0.004510f, -0.001485f, 0.007281f, -0.014931f, -0.001602f, 0.002400f, -0.005298f, 0.001040f, 0.007318f, 0.005632f, -0.006716f, -0.004918f, -0.005392f, -0.000930f, -0.004267f, -0.002106f, -0.006558f, 0.002597f, -0.000551f, -0.007547f, -0.003922f, -0.002999f, -0.000359f, 0.001653f, -0.001642f, -0.000711f, 0.003302f, 0.001379f, -0.003580f, 0.001968f, 0.008143f, -0.004089f, -0.001061f, -0.008654f, -0.003316f, -0.000598f, 0.003629f, -0.003612f, 0.001063f, 0.001555f, 0.001224f, 0.002901f, -0.006740f, -0.000145f, -0.003797f, 0.003282f, -0.002429f, -0.006428f, -0.001846f, -0.000123f, -0.000108f, -0.002794f, -0.003024f, 0.003250f, -0.001427f, -0.000503f, 0.001175f, 0.001933f, 0.000089f, -0.000345f, - 0.000360f, 0.001183f, 0.000072f, -0.000640f, 0.001444f, 0.000343f, -0.001264f, -0.001072f, 0.001347f, -0.000397f, 0.000485f, -0.000781f, 0.001214f, -0.001042f, -0.000737f, -0.000102f, -0.000253f, 0.000515f, 0.013969f, -0.005309f, 0.004503f, 0.011671f, -0.009580f, -0.010794f, -0.001640f, -0.002741f, -0.000191f, 0.005916f, 0.003268f, -0.014982f, 0.002271f, -0.008621f, -0.011840f, -0.000819f, 0.004259f, 0.004613f, -0.003904f, -0.000558f, -0.001321f, 0.006353f, -0.001391f, 0.005215f, -0.002527f, 0.000556f, 0.001094f, 0.001548f, -0.007523f, 0.003082f, 0.005706f, -0.002761f, 0.007290f, -0.004128f, -0.000866f, -0.009244f, 0.006468f, 0.001595f, -0.002493f, -0.007179f, -0.007128f, -0.003258f, -0.002479f, 0.003518f, -0.000846f, 0.003031f, 0.002980f, -0.006370f, 0.003871f, -0.008540f, 0.002970f, 0.004900f, 0.009306f, 0.008984f, -0.007852f, 0.003814f, -0.000570f, -0.002100f, 0.005416f, -0.004230f, -0.005073f, -0.003802f, 0.004401f, 0.002191f, 0.005758f, -0.005839f, 0.008708f, -0.002886f, -0.000522f, 0.002611f, 0.001378f, 0.005119f, -0.003980f, 0.007309f, 0.009190f, 0.016187f, 0.007450f, 0.005128f, - -0.009662f, -0.001782f, -0.006335f, -0.004552f, 0.005810f, -0.000801f, 0.007197f, 0.002950f, -0.000665f, -0.001481f, -0.001351f, 0.004181f, -0.003274f, 0.003330f, 0.003879f, -0.003153f, 0.001809f, 0.001431f, 0.000331f, 0.002379f, -0.001575f, -0.000460f, -0.003233f, -0.000186f, 0.000175f, 0.001622f, -0.017281f, -0.018590f, 0.002013f, -0.001615f, 0.004303f, 0.004007f, 0.012120f, 0.005427f, 0.005741f, 0.002858f, -0.006066f, 0.002206f, 0.015340f, -0.010408f, -0.001245f, 0.000380f, 0.012299f, 0.007354f, 0.001641f, 0.005397f, -0.001064f, 0.004147f, 0.005626f, 0.012597f, 0.006953f, 0.007032f, 0.003751f, 0.002960f, 0.006109f, 0.002148f, -0.008924f, 0.005338f, 0.007233f, -0.002694f, 0.005240f, 0.006920f, -0.002518f, 0.002115f, 0.008691f, 0.003146f, -0.002179f, 0.003057f, 0.008874f, -0.000548f, -0.000162f, -0.001852f, 0.002391f, 0.008287f, -0.002536f, -0.004813f, 0.002362f, -0.002991f, 0.004370f, 0.005169f, -0.006292f, 0.001251f, -0.004083f, 0.000235f, 0.002501f, 0.006960f, 0.005750f, -0.014921f, -0.000081f, 0.007174f, -0.003824f, -0.006272f, 0.000787f, 0.001046f, 0.007260f, -0.000701f, - -0.015867f, -0.007009f, 0.005084f, -0.004491f, 0.007416f, -0.002164f, 0.000003f, 0.001801f, 0.009314f, 0.005772f, 0.003931f, -0.004905f, 0.007647f, -0.001013f, 0.004673f, 0.002218f, 0.000901f, 0.001515f, 0.001574f, -0.000214f, -0.001254f, 0.000934f, -0.000688f, -0.003933f, -0.001650f, -0.001674f, -0.000508f, -0.000981f, -0.000033f, -0.001256f, -0.002793f, 0.001283f, 0.000570f, -0.001509f, 0.000301f, 0.002514f, 0.001898f, 0.000805f, -0.000381f, -0.000539f, -0.000286f, -0.000240f, 0.002466f, -0.000031f, -0.031155f, 0.004520f, 0.003368f, 0.014727f, -0.000426f, 0.011527f, 0.005989f, 0.003032f, -0.018194f, 0.000152f, -0.000136f, -0.014102f, 0.002425f, 0.010759f, 0.002170f, -0.000084f, -0.001193f, -0.005556f, -0.006357f, 0.003022f, 0.004350f, -0.000387f, 0.002955f, 0.003385f, 0.012935f, 0.001578f, 0.005817f, 0.006078f, -0.006545f, 0.001559f, -0.001421f, -0.001740f, -0.000696f, 0.004815f, -0.000567f, -0.003097f, -0.004960f, -0.002962f, 0.001804f, -0.008995f, -0.006300f, 0.003936f, -0.007073f, 0.002467f, -0.011723f, -0.014139f, -0.003465f, 0.017706f, -0.004487f, -0.000944f, 0.010563f, 0.003577f, - 0.000938f, 0.011210f, -0.001403f, 0.001333f, -0.001237f, 0.003349f, 0.007320f, -0.002709f, -0.010941f, 0.007189f, -0.006304f, -0.012254f, -0.004738f, -0.003369f, 0.000166f, 0.004618f, 0.013542f, 0.000170f, 0.000049f, -0.005151f, -0.000311f, 0.007960f, -0.003542f, -0.004002f, 0.009718f, -0.007978f, -0.000428f, 0.004432f, -0.009553f, -0.001840f, -0.003184f, -0.003229f, 0.001285f, -0.005155f, -0.007153f, 0.000516f, 0.004764f, -0.002059f, -0.002970f, -0.004107f, -0.004004f, -0.000531f, 0.003249f, 0.001425f, -0.000203f, -0.001180f, -0.003063f, 0.000206f, -0.000880f, -0.003953f, -0.005665f, -0.004976f, 0.000154f, -0.000601f, 0.002604f, -0.003866f, 0.000041f, -0.000531f, 0.002125f, -0.000270f, 0.001048f, -0.001138f, 0.000238f, 0.000640f, -0.001761f, 0.027692f, 0.000740f, -0.001867f, -0.010742f, -0.006258f, 0.014535f, -0.006132f, 0.011311f, 0.009700f, -0.011386f, -0.002009f, 0.008443f, -0.006463f, -0.003196f, -0.003119f, -0.004231f, 0.001663f, 0.002929f, 0.000343f, 0.005218f, -0.002633f, 0.000687f, 0.001841f, -0.002409f, -0.005463f, -0.005653f, -0.006404f, 0.000344f, 0.007063f, 0.003010f, -0.006327f, - 0.000427f, 0.002671f, 0.013697f, -0.004291f, 0.012249f, -0.011473f, 0.004970f, 0.008742f, -0.006031f, -0.003789f, -0.011644f, 0.005242f, -0.000246f, -0.008272f, 0.007877f, -0.010211f, 0.011107f, -0.000809f, 0.015775f, 0.003460f, 0.001612f, 0.003649f, 0.006501f, 0.003334f, -0.005256f, 0.007644f, -0.001575f, -0.008574f, -0.013213f, -0.003770f, 0.005447f, -0.006771f, -0.004369f, 0.004906f, -0.007434f, 0.014160f, -0.013927f, -0.000278f, 0.009139f, -0.008105f, -0.003235f, -0.014714f, -0.001185f, -0.005898f, -0.003278f, -0.004573f, 0.012448f, 0.004712f, 0.001183f, 0.000291f, 0.010729f, 0.000843f, -0.001022f, 0.008443f, 0.007047f, 0.006271f, 0.013354f, -0.003104f, 0.001223f, -0.004025f, 0.003711f, 0.004192f, 0.000817f, 0.001055f, -0.002356f, -0.000336f, -0.003299f, -0.001851f, 0.000228f, 0.000967f, 0.002054f, -0.001312f, -0.000552f, 0.004062f, 0.001926f, -0.001875f, 0.008252f, -0.000719f, -0.002155f, -0.003689f, -0.002322f, 0.002783f, -0.002944f, 0.000011f, -0.000429f, -0.003204f, 0.001208f, 0.000608f, -0.000876f, 0.001823f, 0.002118f, -0.002513f, 0.002201f, 0.003678f, 0.013379f, 0.023736f, - -0.007025f, -0.010434f, 0.002664f, -0.004301f, 0.006503f, 0.021600f, 0.000074f, -0.005058f, 0.006819f, 0.003659f, 0.006360f, 0.003821f, -0.011849f, 0.000371f, -0.010579f, 0.005798f, 0.005040f, 0.003031f, 0.019764f, -0.001018f, 0.014724f, -0.000459f, -0.000409f, 0.004425f, -0.000167f, 0.015475f, 0.002015f, 0.009717f, -0.003656f, 0.013188f, -0.006017f, 0.006998f, 0.026235f, -0.004371f, -0.006667f, 0.018446f, 0.003865f, 0.011990f, -0.000326f, -0.011594f, 0.003561f, -0.006722f, 0.007912f, -0.013955f, -0.001881f, -0.007292f, 0.007804f, -0.001258f, 0.001593f, 0.014228f, -0.006974f, -0.014469f, 0.004013f, -0.001325f, -0.000693f, 0.011553f, 0.002238f, 0.001572f, -0.005259f, -0.009550f, -0.010039f, -0.003442f, -0.008288f, -0.006346f, 0.008573f, -0.004408f, -0.000818f, -0.003226f, 0.001010f, -0.000047f, 0.007660f, 0.004698f, -0.008763f, -0.012750f, -0.002952f, 0.000312f, 0.003500f, -0.003545f, -0.003093f, 0.010307f, 0.005949f, 0.005029f, 0.001531f, -0.008569f, -0.003893f, 0.004488f, 0.000225f, -0.002895f, 0.003735f, -0.001266f, 0.002292f, -0.002853f, 0.000258f, -0.001678f, -0.004770f, -0.005805f, - -0.001472f, -0.005148f, 0.001382f, -0.000850f, 0.000546f, 0.003359f, -0.000868f, -0.002808f, 0.004310f, 0.000816f, 0.002773f, 0.001489f, 0.000331f, -0.001684f, 0.002169f, -0.000630f, -0.000414f, -0.000260f, -0.000390f, 0.000081f, -0.000797f, 0.001082f, 0.002779f, -0.003408f, 0.000982f, -0.004000f, 0.000692f, -0.001991f, 0.004980f, 0.032495f, -0.017324f, 0.011291f, 0.000271f, 0.005479f, -0.008069f, -0.006353f, -0.003774f, 0.006935f, 0.008968f, 0.001776f, -0.005197f, -0.009665f, 0.004782f, 0.008867f, -0.001952f, 0.002671f, -0.005020f, 0.009683f, 0.003461f, -0.018667f, -0.006268f, 0.005795f, -0.001271f, -0.008027f, -0.000564f, 0.008259f, -0.006373f, 0.002698f, -0.012227f, 0.006863f, 0.015021f, -0.006458f, 0.015899f, 0.000389f, -0.003132f, 0.010566f, -0.000665f, 0.000671f, 0.009495f, -0.021102f, 0.002940f, 0.006195f, 0.008704f, 0.005869f, 0.006752f, -0.009553f, -0.007500f, -0.000481f, 0.003126f, -0.010332f, 0.003148f, 0.009744f, 0.008664f, 0.003141f, 0.026902f, -0.008693f, -0.003625f, -0.012427f, -0.005489f, -0.008197f, -0.011519f, 0.013831f, 0.005600f, 0.013506f, -0.002368f, -0.021989f, - 0.012482f, -0.007855f, 0.006751f, 0.006122f, 0.002810f, 0.003627f, -0.017497f, 0.020304f, 0.004217f, -0.009616f, -0.016804f, -0.010514f, -0.010624f, 0.001312f, 0.008200f, -0.007846f, 0.000387f, 0.005062f, 0.004180f, -0.000128f, -0.003857f, 0.000714f, -0.000629f, 0.003093f, 0.003170f, 0.003563f, 0.002302f, 0.002311f, 0.000998f, -0.006151f, -0.005680f, 0.000131f, -0.002268f, 0.001839f, 0.002170f, -0.002928f, 0.003631f, -0.001080f, 0.001138f, 0.003113f, 0.001103f, 0.002388f, 0.000448f, -0.006530f, -0.000748f, -0.000212f, 0.001951f, 0.001537f, 0.000465f, -0.001574f, -0.002041f, 0.003338f, -0.001333f, 0.008309f, 0.001131f, 0.003523f, -0.038766f, -0.032573f, -0.029999f, 0.007169f, 0.006636f, 0.002932f, 0.001759f, -0.001784f, -0.001970f, 0.001198f, -0.004787f, -0.010645f, -0.007267f, -0.018923f, -0.008128f, -0.008990f, 0.011939f, -0.014459f, -0.006166f, -0.008022f, 0.002895f, 0.000545f, -0.003444f, 0.004703f, -0.000881f, -0.015032f, 0.000096f, 0.014509f, 0.002237f, -0.013371f, -0.011736f, 0.005680f, -0.004499f, 0.012234f, 0.008758f, -0.012616f, 0.013235f, 0.020601f, -0.016545f, -0.017008f, - -0.008872f, 0.006748f, 0.016506f, -0.011095f, -0.011426f, 0.006450f, -0.006417f, 0.001615f, -0.001097f, -0.001114f, -0.018024f, 0.003886f, 0.011603f, -0.005376f, 0.006829f, -0.008817f, -0.010477f, -0.010474f, -0.004925f, -0.018303f, 0.032397f, -0.006420f, -0.001716f, 0.005937f, 0.003920f, 0.007163f, 0.004798f, 0.010325f, 0.005000f, 0.009010f, 0.020230f, -0.025178f, 0.018316f, -0.005739f, -0.004400f, -0.000526f, -0.028038f, -0.000954f, 0.009178f, 0.001140f, 0.001584f, 0.008310f, 0.003377f, -0.000358f, 0.005203f, -0.009286f, 0.011622f, -0.003686f, -0.006022f, 0.006400f, -0.003476f, -0.003218f, 0.001618f, 0.005287f, -0.003334f, -0.005704f, 0.002540f, 0.005140f, 0.000674f, -0.001712f, -0.004784f, -0.002556f, 0.001219f, -0.007113f, -0.004486f, -0.002260f, 0.004054f, -0.001346f, 0.000769f, 0.004271f, 0.000572f, -0.007086f, -0.001183f, -0.005984f, -0.005113f, -0.004965f, -0.002760f, -0.005521f, 0.005483f, -0.001413f, 0.000850f, 0.010986f, -0.001596f, -0.002907f, -0.002349f, 0.006098f, 0.001980f, -0.001642f, -0.001588f, -0.038496f, 0.029529f, 0.007827f, 0.006452f, -0.007126f, 0.028910f, -0.004548f, - 0.013636f, -0.000045f, 0.012274f, -0.017202f, 0.006837f, 0.006734f, 0.002666f, -0.008474f, 0.025754f, -0.006990f, 0.007880f, 0.005895f, 0.026734f, -0.018034f, -0.001123f, 0.007396f, -0.004589f, -0.013246f, 0.008030f, -0.012465f, 0.003274f, 0.003364f, -0.014533f, 0.005607f, 0.001262f, 0.000687f, 0.029425f, 0.018304f, -0.002385f, -0.012066f, -0.009311f, 0.006494f, -0.001482f, -0.017665f, 0.005080f, -0.001613f, 0.005273f, 0.013188f, 0.019617f, -0.013481f, 0.013373f, 0.006572f, -0.008704f, 0.006266f, 0.005210f, -0.013952f, -0.007398f, -0.008782f, 0.014088f, -0.015205f, -0.012725f, -0.034735f, -0.025267f, 0.006936f, -0.004649f, -0.005087f, -0.013221f, -0.026985f, 0.010436f, 0.001958f, -0.000664f, 0.013050f, 0.011347f, 0.015715f, 0.009540f, 0.003707f, -0.000312f, 0.002405f, 0.018044f, -0.013354f, 0.024660f, -0.009148f, -0.006791f, -0.022529f, 0.003733f, -0.004256f, -0.011246f, -0.002171f, 0.002900f, -0.005785f, 0.006701f, -0.002864f, 0.000468f, -0.002916f, -0.000701f, -0.002532f, -0.000347f, 0.003875f, 0.006620f, 0.000340f, 0.005506f, -0.006152f, -0.004034f, -0.003212f, 0.002426f, 0.004419f, - -0.005864f, -0.002485f, -0.002609f, 0.000694f, -0.003162f, 0.002538f, -0.000373f, 0.002177f, 0.004299f, -0.000150f, -0.006236f, 0.008960f, 0.009079f, 0.003449f, 0.000327f, -0.004195f, 0.000024f, -0.002302f, -0.000678f, -0.000515f, 0.010036f, -0.046895f, 0.042711f, 0.030582f, -0.012967f, -0.011003f, 0.011278f, -0.000247f, 0.000709f, 0.020199f, 0.014196f, 0.000246f, -0.003375f, 0.007924f, -0.005125f, -0.003326f, 0.005453f, -0.009564f, 0.011223f, 0.007578f, -0.009961f, 0.012121f, -0.001685f, 0.003012f, -0.001250f, -0.020865f, -0.001485f, 0.014581f, 0.015137f, 0.005723f, 0.006291f, 0.007948f, -0.009895f, -0.012440f, 0.004883f, 0.008950f, -0.000725f, -0.005018f, -0.010876f, 0.004030f, -0.003427f, 0.012836f, 0.015190f, -0.002084f, 0.017563f, -0.009660f, 0.019611f, 0.010458f, 0.023706f, 0.001387f, 0.003179f, -0.007269f, -0.010153f, -0.002210f, 0.018119f, 0.029780f, 0.001497f, 0.022616f, -0.010229f, -0.022376f, 0.002621f, 0.007972f, -0.019584f, 0.019726f, -0.006961f, 0.006750f, -0.042749f, -0.018592f, -0.000596f, -0.010539f, 0.007896f, 0.013687f, 0.029150f, 0.005798f, -0.000095f, -0.014775f, - -0.025922f, 0.006269f, 0.000791f, -0.021831f, 0.008500f, 0.004313f, -0.015821f, -0.004746f, 0.003401f, 0.016646f, 0.000080f, 0.004796f, 0.004895f, 0.008514f, 0.006966f, -0.014713f, 0.004818f, -0.000594f, -0.003158f, -0.000024f, -0.001007f, -0.002645f, 0.005817f, 0.005445f, -0.006289f, -0.002808f, -0.000379f, 0.003791f, -0.002590f, 0.005552f, 0.000587f, 0.003952f, 0.003538f, -0.005022f, 0.003240f, 0.003963f, 0.010795f, 0.000669f, 0.006045f, 0.006597f, 0.001427f, 0.007803f, 0.002672f, 0.003860f, 0.001590f, 0.000687f, 0.002669f, 0.009225f, -0.004368f, -0.009158f, 0.001874f, 0.010701f, -0.018852f, 0.030304f, -0.014095f, 0.002982f, 0.022445f, 0.023280f, -0.002551f, -0.014550f, -0.008185f, -0.008062f, 0.000997f, -0.018583f, -0.014947f, 0.014217f, 0.002964f, 0.008882f, 0.010916f, 0.013119f, -0.006992f, 0.008260f, -0.004200f, 0.010036f, 0.043984f, 0.009837f, -0.022408f, 0.020262f, 0.023265f, 0.000343f, -0.004797f, 0.000571f, -0.012743f, -0.017122f, -0.009429f, 0.023865f, 0.015657f, 0.012909f, 0.020046f, 0.003546f, -0.004447f, -0.010288f, -0.027385f, 0.011615f, 0.013136f, 0.007092f, - -0.005069f, -0.003959f, -0.010022f, 0.003020f, 0.020724f, 0.014217f, -0.025630f, 0.015685f, -0.021752f, 0.021339f, 0.003803f, 0.007579f, 0.008937f, -0.004335f, -0.012699f, -0.004239f, 0.007946f, 0.037415f, -0.006977f, 0.018369f, -0.009378f, -0.017853f, 0.019281f, 0.017556f, 0.003681f, 0.003528f, 0.017385f, 0.005780f, 0.000130f, -0.002717f, -0.012609f, -0.004218f, -0.018059f, 0.004870f, -0.014243f, -0.007262f, 0.025997f, -0.002042f, -0.000253f, -0.000076f, 0.011449f, -0.004674f, 0.002711f, 0.007630f, 0.011521f, 0.012944f, 0.010278f, 0.003827f, 0.004909f, 0.005598f, 0.010316f, -0.002349f, -0.010107f, 0.012240f, 0.004044f, 0.006488f, 0.006729f, -0.000254f, -0.001978f, 0.000223f, -0.006741f, 0.002948f, 0.011074f, 0.000794f, 0.000457f, -0.003131f, -0.005636f, 0.009597f, 0.009806f, 0.001559f, 0.018241f, -0.002966f, 0.007212f, 0.014277f, -0.000216f, 0.003566f, -0.003325f, -0.006229f, 0.000337f, 0.002677f, 0.004165f, 0.010141f, 0.003439f, 0.007465f, 0.001738f, 0.001384f, 0.009871f, -0.002325f, 0.000875f, 0.007944f, 0.001320f, 0.002074f, 0.000427f, 0.003411f, 0.000011f, 0.004863f, - -0.001109f, 0.003494f, 0.000432f, 0.015716f, -0.008128f, 0.015983f, 0.020428f, -0.023700f, 0.015739f, 0.009092f, -0.005859f, 0.001377f, 0.010767f, -0.009958f, -0.021011f, 0.031226f, 0.006587f, 0.005924f, 0.005663f, 0.018519f, 0.005220f, -0.018755f, 0.019775f, -0.026864f, -0.031540f, 0.002746f, 0.003550f, -0.017331f, -0.005898f, -0.051263f, -0.036516f, -0.027337f, -0.009475f, -0.028116f, -0.014093f, 0.010663f, -0.025529f, 0.017743f, 0.016044f, -0.020565f, 0.026300f, 0.014204f, -0.005483f, -0.002640f, -0.014045f, 0.000639f, -0.024859f, 0.053946f, 0.015451f, 0.008458f, -0.027217f, 0.006620f, -0.008631f, 0.035816f, -0.007523f, -0.000847f, -0.032961f, 0.032014f, 0.001784f, 0.012604f, 0.010000f, 0.018728f, 0.010183f, -0.007108f, 0.010295f, -0.015767f, 0.015748f, -0.005696f, 0.009114f, -0.025298f, 0.057226f, 0.008949f, -0.027133f, 0.014668f, 0.016409f, 0.013332f, 0.019182f, 0.016925f, -0.026392f, 0.020889f, -0.000965f, 0.016893f, -0.013591f, 0.005176f, -0.033864f, 0.014274f, 0.014077f, 0.004463f, -0.008504f, -0.025011f, -0.002134f, 0.017550f, -0.022929f, -0.002791f, -0.003166f, 0.000174f, - 0.006331f, 0.005497f, -0.005590f, 0.010022f, -0.001113f, -0.004446f, 0.007122f, 0.006236f, -0.007587f, -0.005319f, -0.015228f, -0.000563f, -0.014219f, 0.008553f, 0.001682f, 0.001750f, 0.010102f, 0.016921f, 0.009849f, 0.008186f, 0.004613f, -0.005453f, -0.002952f, 0.000611f, -0.011304f, -0.008333f, -0.003121f, -0.003087f, 0.005062f, 0.013910f, 0.003532f, 0.008997f, -0.002649f, 0.000361f, 0.003519f, 0.000134f, 0.002871f, 0.010729f, -0.041771f, 0.011577f, -0.005815f, -0.004165f, 0.024627f, -0.004661f, -0.004321f, 0.002288f, 0.022040f, -0.005880f, 0.012813f, -0.010928f, -0.012848f, -0.016409f, -0.020756f, 0.035768f, 0.018613f, 0.012903f, -0.011367f, -0.032982f, -0.040422f, 0.019299f, 0.013287f, -0.014429f, 0.009521f, -0.009844f, 0.000873f, 0.035592f, 0.015513f, -0.010241f, 0.019178f, -0.006620f, 0.009913f, -0.012014f, 0.012007f, -0.026491f, -0.038846f, -0.015182f, -0.017371f, -0.003058f, 0.045290f, -0.037048f, 0.021280f, 0.012153f, 0.009199f, -0.008279f, 0.017786f, 0.007856f, -0.035527f, -0.045219f, -0.016119f, -0.020688f, 0.051003f, 0.036904f, -0.012434f, -0.022893f, -0.001961f, -0.023490f, - -0.004999f, 0.037057f, 0.034370f, 0.019415f, -0.030428f, 0.006443f, -0.023780f, 0.037152f, 0.017645f, -0.004057f, 0.000076f, 0.012431f, -0.022069f, 0.004834f, 0.032830f, 0.017745f, -0.029793f, 0.032200f, -0.016540f, 0.019197f, 0.051262f, 0.019473f, -0.012124f, -0.015308f, 0.043869f, 0.004729f, -0.002714f, -0.020060f, 0.007701f, -0.009516f, 0.002792f, -0.005984f, -0.001066f, -0.001414f, -0.021898f, 0.002648f, -0.002748f, -0.006347f, 0.009596f, -0.001809f, -0.007756f, 0.001283f, -0.004615f, 0.001105f, -0.005721f, -0.008631f, 0.007571f, -0.009556f, -0.006047f, 0.004363f, 0.011416f, -0.000681f, 0.008066f, 0.006538f, -0.001512f, -0.000146f, -0.010985f, 0.001397f, 0.003740f, -0.009426f, 0.012514f, 0.006055f, -0.007594f, -0.005224f, -0.005288f, -0.002480f, -0.012239f, 0.007155f, 0.011689f, 0.000428f, -0.009088f, -0.005415f, 0.006111f, -0.002757f, 0.005887f, 0.008107f, 0.000679f, 0.002927f, 0.000115f, -0.000029f, -0.033663f, -0.013525f, 0.054882f, 0.025110f, 0.031391f, 0.007238f, -0.046617f, 0.013678f, -0.037926f, 0.024022f, 0.068735f, 0.024078f, 0.042920f, -0.020128f, 0.012001f, 0.019640f, - -0.002637f, 0.004656f, -0.018327f, 0.003976f, 0.026696f, 0.000885f, -0.007815f, -0.025154f, 0.012993f, 0.009609f, -0.025616f, 0.012525f, -0.010069f, 0.018632f, 0.026839f, 0.028566f, 0.034532f, 0.002974f, -0.027755f, 0.006813f, 0.016027f, -0.000853f, 0.047215f, 0.003658f, -0.055451f, -0.034995f, 0.015073f, -0.014515f, -0.065344f, 0.001807f, 0.027069f, 0.009649f, 0.002347f, -0.006440f, 0.033580f, -0.027361f, -0.033800f, -0.006967f, -0.012457f, -0.032910f, -0.002350f, 0.001823f, -0.019406f, -0.028413f, -0.017624f, 0.000828f, 0.003477f, -0.040802f, 0.011463f, -0.017330f, 0.009228f, 0.045927f, -0.006909f, -0.016701f, 0.031821f, -0.006177f, 0.026398f, -0.026082f, 0.016845f, 0.000596f, -0.030125f, -0.033545f, 0.058990f, 0.005254f, 0.007472f, 0.002280f, -0.000513f, 0.059173f, 0.048215f, 0.014878f, -0.005072f, 0.022873f, -0.012053f, 0.007450f, 0.013375f, -0.003123f, 0.017760f, 0.007349f, 0.004757f, -0.027746f, 0.015598f, 0.008147f, -0.002121f, 0.001933f, -0.009808f, 0.007297f, 0.020474f, -0.004026f, -0.007445f, -0.012234f, -0.013371f, 0.012139f, 0.014343f, 0.000274f, -0.000548f, -0.012061f, - -0.012989f, 0.001677f, -0.018389f, 0.001991f, -0.006536f, 0.018095f, 0.006009f, 0.000271f, -0.012378f, -0.021081f, -0.005312f, -0.010504f, -0.014480f, 0.007452f, 0.007637f, 0.015444f, 0.005668f, 0.001823f, 0.017557f, -0.002688f, 0.047166f, 0.006370f, -0.063920f, -0.028771f, 0.040135f, -0.057159f, 0.032935f, -0.054084f, 0.004723f, -0.008421f, -0.078294f, -0.010104f, 0.035697f, 0.072593f, 0.023362f, -0.010267f, 0.017888f, -0.027510f, -0.008975f, -0.062879f, -0.003178f, -0.042639f, -0.005836f, -0.009165f, -0.029284f, -0.031220f, -0.010094f, 0.018277f, -0.028122f, 0.019826f, 0.036487f, -0.037039f, 0.013862f, 0.012218f, 0.006759f, -0.039443f, -0.005682f, -0.000230f, -0.041140f, 0.011000f, 0.053256f, -0.003847f, -0.076385f, 0.027351f, -0.045981f, -0.118215f, 0.033774f, -0.048805f, -0.060480f, 0.003386f, -0.027476f, 0.008587f, 0.021332f, -0.011535f, 0.031581f, -0.025931f, 0.027642f, -0.021382f, -0.052557f, 0.000420f, 0.038329f, 0.036444f, -0.068410f, 0.010223f, -0.007801f, -0.051157f, -0.013270f, -0.012617f, 0.089612f, 0.044592f, 0.052754f, 0.023897f, 0.023200f, 0.055242f, 0.079732f, -0.018049f, - -0.037101f, -0.040946f, 0.007660f, -0.050890f, -0.015200f, 0.026386f, 0.043299f, 0.006033f, 0.004367f, 0.037191f, -0.008127f, -0.021106f, -0.028219f, 0.022391f, 0.025904f, 0.024942f, 0.006326f, 0.028606f, 0.012379f, -0.017609f, -0.003396f, -0.017068f, 0.026632f, 0.004154f, -0.002540f, -0.029374f, 0.009408f, 0.023390f, 0.003102f, 0.000344f, 0.023470f, -0.018423f, -0.011714f, 0.012573f, 0.001834f, -0.009377f, -0.017092f, -0.005782f, 0.027545f, -0.001468f, -0.059214f, -0.005728f, -0.000918f, -0.013884f, -0.011088f, -0.015992f, -0.009105f, 0.012809f, 0.012234f, 0.006703f, 0.004721f, -0.010074f, -0.001170f, -0.012379f, 0.103806f, 0.112206f, -0.065831f, -0.026084f, 0.050126f, -0.022722f, 0.020246f, -0.031260f, 0.009395f, -0.032124f, -0.060101f, 0.081942f, 0.012005f, 0.025715f, 0.021138f, 0.007645f, 0.010830f, 0.002426f, 0.016677f, 0.020321f, -0.058132f, -0.048037f, -0.041963f, -0.039749f, -0.029653f, -0.018805f, -0.015448f, -0.031280f, -0.017592f, -0.026529f, 0.030165f, 0.022776f, 0.011658f, -0.014673f, 0.006208f, -0.061693f, -0.030843f, 0.016636f, -0.055866f, -0.005300f, 0.027349f, 0.048184f, - 0.007191f, 0.009219f, -0.020561f, -0.036298f, -0.042517f, 0.034082f, -0.004519f, 0.033730f, -0.119410f, 0.007280f, -0.013778f, 0.013564f, 0.073207f, 0.008768f, 0.012321f, 0.008026f, -0.021284f, -0.024851f, 0.000797f, -0.005104f, -0.066979f, 0.014143f, -0.024485f, 0.059926f, 0.004143f, -0.066232f, -0.089645f, -0.056077f, -0.011206f, -0.063356f, -0.061609f, -0.038632f, 0.043669f, -0.011621f, -0.042391f, -0.057689f, 0.048037f, -0.006538f, 0.028475f, -0.032647f, 0.017519f, 0.046829f, -0.031251f, -0.045917f, -0.018989f, -0.023935f, 0.049521f, 0.009947f, -0.021554f, 0.018982f, 0.014603f, 0.042488f, 0.026788f, 0.011988f, -0.038081f, -0.038606f, -0.008272f, 0.003889f, -0.009902f, 0.006289f, 0.026566f, -0.006411f, -0.002146f, -0.019971f, -0.014088f, -0.011212f, -0.020039f, -0.004490f, 0.008318f, 0.011427f, 0.062491f, 0.003418f, -0.015613f, -0.005748f, 0.008388f, 0.018705f, -0.001108f, 0.030056f, 0.012969f, 0.070468f, 0.011052f, -0.001465f, 0.002591f, 0.012088f, 0.003501f, -0.003358f, -0.020419f, -0.031353f, 0.116230f, -0.068400f, 0.043722f, 0.082198f, -0.040356f, 0.011166f, 0.065527f, -0.084293f, - 0.002728f, 0.008875f, 0.040142f, -0.094453f, 0.004608f, 0.005838f, 0.030275f, -0.041484f, -0.000101f, 0.016357f, -0.055887f, 0.007757f, -0.004829f, -0.010790f, 0.029791f, -0.009597f, -0.008980f, 0.012409f, -0.007891f, -0.009847f, 0.029194f, -0.028328f, 0.007573f, -0.011927f, 0.006965f, -0.018298f, -0.010568f, -0.022217f, -0.000358f, 0.003820f, 0.057726f, 0.019002f, 0.027702f, -0.006316f, -0.000019f, 0.042880f, -0.002518f, -0.016777f, 0.023585f, 0.017495f, -0.020206f, -0.057059f, 0.051231f, -0.056866f, 0.008538f, 0.026732f, 0.034894f, -0.055960f, 0.058665f, 0.095060f, -0.052895f, -0.097354f, 0.129086f, 0.045529f, -0.064843f, 0.029298f, -0.062456f, -0.076969f, -0.038952f, -0.014348f, -0.080802f, 0.064473f, -0.112350f, 0.033190f, 0.052494f, -0.044617f, -0.149957f, 0.140792f, -0.025329f, -0.036690f, 0.093240f, -0.094037f, 0.047636f, 0.079955f, -0.024878f, -0.022314f, 0.024100f, 0.027274f, -0.015895f, 0.009651f, 0.007388f, 0.025158f, -0.013408f, -0.009534f, 0.027611f, -0.000347f, 0.005504f, -0.003293f, 0.004458f, 0.022505f, 0.015949f, -0.003363f, -0.021254f, 0.033114f, 0.035172f, -0.007097f, - -0.031979f, -0.003558f, 0.014345f, 0.003053f, 0.021272f, -0.000148f, 0.018477f, 0.007997f, 0.027544f, 0.020857f, 0.022964f, -0.035864f, 0.008127f, -0.000935f, 0.000403f, -0.000105f, -0.022801f, -0.038712f, 0.055223f, -0.009328f, -0.053162f, 0.018693f, 0.011508f, 0.005211f, -0.009722f, -0.036190f, -0.028081f, 0.065155f, -0.042608f, -0.034034f, -0.068144f, -0.031270f, 0.040858f, 0.031738f, -0.018014f, -0.022551f, 0.021871f, 0.054067f, -0.022921f, 0.040833f, 0.048892f, -0.034345f, -0.004728f, 0.029909f, -0.007466f, -0.000001f, -0.009596f, 0.002739f, -0.049474f, 0.013756f, -0.010789f, 0.001811f, 0.012213f, -0.009876f, 0.010497f, -0.020510f, -0.041393f, -0.019588f, -0.072249f, 0.009181f, 0.000090f, -0.010708f, 0.013698f, 0.007014f, -0.004472f, -0.016422f, 0.029398f, 0.046146f, -0.048131f, 0.070849f, -0.007716f, 0.009540f, 0.010518f, 0.062633f, 0.028968f, 0.045853f, -0.057161f, -0.014157f, -0.010499f, 0.081610f, -0.075805f, -0.025912f, 0.037473f, -0.002665f, -0.087575f, 0.006026f, -0.017840f, -0.014954f, 0.040399f, 0.044030f, 0.003378f, -0.032929f, 0.071285f, -0.029845f, 0.118686f, 0.001624f, - -0.054631f, -0.000017f, -0.009237f, -0.062100f, 0.119248f, 0.023955f, -0.017434f, -0.140765f, -0.070060f, 0.039718f, -0.051522f, -0.046611f, 0.055457f, -0.206372f, 0.005522f, 0.040716f, 0.030185f, -0.016661f, 0.058372f, -0.035485f, -0.004284f, 0.000305f, 0.030561f, -0.008559f, 0.006505f, 0.041166f, -0.002543f, -0.010347f, -0.012690f, -0.014775f, -0.000323f, 0.004636f, -0.002410f, -0.006209f, 0.026912f, -0.037203f, -0.008017f, 0.004442f, 0.006543f, -0.022285f, -0.037383f, -0.009589f, -0.011245f, -0.005392f, -0.002810f, 0.007306f, -0.041508f, 0.003216f, 0.032068f, -0.019775f, 0.024598f, 0.018598f, -0.017906f, 0.001130f, -0.013022f, 0.005273f, 0.009252f, -0.019519f, 0.055140f, -0.026632f, -0.024237f, -0.031753f, -0.028803f, -0.014385f, 0.025889f, 0.035353f, 0.021324f, 0.088799f, -0.017828f, 0.019662f, -0.009178f, -0.046719f, 0.022494f, -0.029984f, -0.017199f, 0.017859f, 0.039461f, -0.042863f, 0.045559f, 0.004743f, -0.002978f, 0.093640f, -0.019787f, -0.011025f, 0.069949f, -0.045698f, 0.061711f, 0.026369f, -0.015454f, 0.024334f, 0.025600f, 0.057657f, 0.059827f, 0.017045f, -0.049815f, 0.102282f, - -0.103836f, 0.002949f, 0.093158f, -0.051043f, 0.020082f, -0.011660f, -0.012873f, -0.109250f, 0.073123f, 0.019023f, 0.032057f, 0.034126f, -0.023319f, -0.054627f, -0.041435f, -0.033479f, 0.004409f, 0.102830f, -0.000050f, 0.080555f, -0.027717f, -0.062850f, 0.002666f, 0.022831f, -0.052000f, 0.082693f, 0.033048f, 0.040404f, 0.081342f, 0.052726f, -0.088671f, 0.033073f, -0.126850f, -0.156159f, 0.002449f, 0.130692f, 0.081411f, 0.010180f, -0.093595f, -0.331777f, -0.061764f, 0.102047f, 0.116234f, 0.165526f, -0.009290f, -0.210834f, -0.119566f, -0.110016f, 0.167369f, 0.128215f, -0.024104f, -0.084469f, -0.050098f, -0.102632f, -0.013957f, 0.131384f, -0.013698f, 0.030465f, 0.021079f, -0.021950f, -0.048660f, 0.071466f, -0.030081f, 0.039731f, 0.028415f, -0.003042f, -0.067644f, 0.091129f, -0.037033f, -0.017563f, 0.025489f, 0.023438f, -0.050488f, 0.000549f, -0.016520f, -0.018937f, 0.005284f, -0.002032f, 0.035582f, -0.065633f, 0.033610f, -0.078929f, -0.013497f, -0.013335f, 0.092501f, 0.002589f, 0.024309f, -0.057292f, 0.028764f, -0.021638f, 0.040241f, 0.049317f, -0.025049f, -0.056934f, 0.019328f, 0.014607f, - 0.046725f, 0.039417f, -0.010629f, -0.015546f, -0.008046f, 0.032408f, 0.005087f, 0.032660f, 0.013574f, -0.081110f, 0.068363f, -0.050960f, -0.008691f, -0.032964f, 0.031863f, -0.037050f, -0.001421f, -0.003812f, -0.009912f, 0.007711f, 0.035111f, -0.036824f, 0.016420f, 0.002969f, -0.008356f, 0.000580f, 0.024833f, -0.031138f, -0.008331f, -0.004522f, 0.051380f, -0.051775f, 0.013960f, -0.022675f, 0.034132f, -0.037804f, -0.010530f, 0.012992f, -0.007088f, 0.007194f, -0.024228f, -0.004324f, 0.022385f, -0.006725f, 0.008810f, 0.007012f, 0.004898f, 0.027669f, -0.025374f, 0.017348f, 0.020246f, 0.024686f, -0.003183f, -0.057374f, 0.007640f, 0.006778f, 0.023656f, 0.021292f, -0.003871f, 0.005674f, -0.009351f, -0.026123f, -0.004124f, 0.011895f, -0.004594f, 0.034766f, -0.028029f, -0.009456f, -0.056247f, 0.016820f, 0.006454f, -0.009007f, 0.012987f, 0.010950f, -0.000465f, -0.029322f, 0.009464f, 0.028450f, -0.005198f, -0.004276f, 0.011592f, -0.011644f, 0.021700f, -0.013283f, 0.004002f, -0.026966f, 0.013084f, 0.004930f, -0.003873f, -0.007494f, 0.015939f, -0.007594f, -0.010863f, -0.016347f, 0.017319f, -0.000856f, - -0.008067f, -0.003800f, 0.017253f, -0.006843f, 0.007872f, -0.009521f, -0.005180f, -0.001080f, 0.001052f, -0.000385f, -0.008801f, 0.000796f, 0.000751f, -0.008023f, 0.008441f, -0.007634f, 0.022470f, 0.003247f, 0.003438f, -0.030700f, 0.009097f, -0.000873f, -0.011635f, 0.013522f, 0.026331f, -0.018989f, -0.003675f, -0.001006f, -0.012909f, 0.020152f, -0.002838f, 0.002607f, -0.012914f, 0.006730f, -0.002294f, 0.002173f, -0.008010f, 0.007850f, -0.007987f, -0.046315f, 0.112296f, 0.030612f, 0.027750f, -0.014850f, -0.035945f, -0.034586f, 0.009824f, 0.021803f, 0.003446f, -0.001281f, -0.000114f, -0.016405f, -0.002978f, 0.007885f, -0.004341f, 0.003395f, -0.001748f, -0.016435f, -0.000847f, 0.008139f, 0.012836f, -0.011440f, 0.003160f, 0.008216f, -0.016368f, 0.026879f, -0.016310f, -0.014244f, -0.014136f, 0.003671f, 0.007874f, 0.012469f, -0.013598f, 0.017397f, -0.025056f, 0.016609f, 0.014833f, -0.011045f, -0.001123f, -0.000805f, -0.002864f, 0.012942f, -0.013924f, 0.004058f, -0.004437f, -0.018048f, 0.025582f, -0.014291f, -0.000461f, -0.010591f, -0.003285f, 0.017808f, -0.023237f, 0.009457f, 0.006475f, -0.010174f, - 0.008573f, -0.019861f, 0.005786f, 0.008242f, -0.014716f, 0.000339f, 0.007951f, -0.013654f, 0.013722f, -0.018843f, 0.005256f, 0.019274f, -0.028207f, 0.008107f, -0.010758f, 0.001929f, 0.011126f, -0.008453f, -0.004287f, 0.001975f, 0.002451f, -0.001709f, 0.007964f, -0.006053f, -0.005169f, 0.003848f, -0.004618f, 0.002515f, -0.001758f, 0.003313f, 0.003164f, -0.004583f, 0.002320f, -0.000888f, 0.004137f, -0.003787f, -0.001026f, 0.002744f, 0.000122f, -0.002200f, -0.006532f, 0.004132f, 0.004385f, -0.001006f, -0.004507f, 0.004305f, -0.000193f, -0.002063f, 0.004488f, -0.009374f, -0.001871f, 0.005262f, -0.006714f, 0.009781f, -0.005985f, 0.000434f, 0.016299f, -0.004759f, 0.011749f, -0.006691f, -0.000624f, 0.012912f, -0.009044f, -0.003445f, 0.016848f, -0.086763f, -0.203585f, 0.057642f, 0.199321f, 0.137083f, 0.216741f, -0.120648f, -0.128423f, -0.175122f, -0.202719f, 0.004368f, 0.156435f, 0.161620f, 0.168737f, 0.033138f, -0.055740f, -0.110621f, -0.158778f, -0.134574f, 0.010499f, 0.104567f, 0.124031f, 0.111601f, 0.026714f, -0.030820f, -0.019244f, -0.087116f, -0.097442f, -0.041099f, -0.002642f, 0.037502f, - 0.082192f, 0.040157f, 0.029821f, 0.041176f, -0.020542f, -0.048864f, -0.007992f, -0.078129f, -0.036647f, 0.000874f, 0.012414f, 0.059569f, 0.069356f, 0.006167f, -0.010498f, -0.006502f, -0.051166f, -0.013853f, -0.000710f, -0.010636f, 0.017723f, 0.034278f, -0.007301f, -0.002707f, -0.013444f, -0.021386f, 0.004394f, 0.002124f, -0.002331f, 0.038675f, 0.026180f, 0.009680f, -0.000981f, -0.036456f, -0.052718f, -0.041685f, 0.003014f, 0.039246f, 0.033690f, 0.044215f, 0.006017f, 0.001156f, 0.010058f, -0.054861f, -0.031226f, -0.025795f, -0.004688f, 0.042105f, 0.009524f, 0.014129f, 0.039280f, -0.022664f, -0.032974f, -0.007673f, -0.005627f, 0.012180f, 0.014163f, 0.004432f, 0.007909f, 0.003465f, -0.020240f, -0.020974f, -0.005112f, -0.000004f, 0.015089f, 0.021832f, 0.007168f, -0.003082f, -0.004735f, -0.006210f, 0.005475f, -0.006124f, -0.025737f, -0.004039f, 0.006076f, 0.011932f, 0.025640f, 0.006245f, -0.005308f, -0.012316f, -0.021070f, -0.004609f, 0.002133f, 0.006873f, 0.012066f, 0.015065f, 0.011874f, -0.006080f, -0.018255f, -0.019249f, -0.016790f, -0.001924f, 0.008370f, 0.009260f, 0.024772f, 0.025426f, - 0.012403f, -0.005488f, -0.031250f, -0.033061f, -0.015317f, -0.011587f, 0.011690f, 0.030864f, 0.022879f, 0.009890f, 0.000135f, -0.002457f, -0.004019f, -0.009442f, -0.015520f, -0.014931f, -0.006369f, 0.002190f, 0.006470f, 0.010351f, 0.015042f, 0.014342f, 0.005500f, -0.005569f, -0.012064f, -0.013063f, -0.009696f, -0.003674f, 0.001990f, 0.004618f, 0.004563f, 0.005541f, 0.006380f, 0.004904f, 0.000138f, -0.003747f, -0.006477f, -0.005286f, -0.001929f, 0.001114f, 0.002570f, 0.000444f, -0.000286f, 0.000454f, 0.000666f, 0.001907f, 0.002026f, -0.000068f, -0.002136f, -0.000890f, 0.001664f, 0.000426f, -0.001911f, -0.001569f, -0.000259f, -0.001295f, -0.002131f, -0.000341f, 0.003857f, 0.005222f, 0.001622f, -0.001284f, -0.001952f, -0.001390f, -0.000883f, -0.001504f, -0.002097f, -0.000826f, 0.001474f, 0.002369f, 0.001335f, 0.001086f, 0.001304f, 0.000246f, -0.000836f, -0.001765f, -0.001801f, -0.001266f, -0.000422f, 0.000868f, 0.001458f, 0.001067f, 0.000868f, 0.000435f, -0.000235f, -0.000882f, -0.001221f, -0.000930f, 0.000030f, 0.000634f, 0.000707f, 0.000523f, 0.000157f, -0.000332f, -0.000734f, -0.000520f, - 0.000079f, 0.000364f, 0.000390f, 0.000377f, 0.000165f, -0.000192f, -0.000340f, -0.000213f, -0.000100f, -0.000026f, 0.000056f, 0.000077f, 0.000054f, 0.000025f, -0.000010f, -0.000039f}, - {-0.008210f, -0.005458f, 0.002284f, -0.002113f, -0.002598f, -0.004007f, 0.000965f, 0.007921f, -0.002555f, 0.000017f, 0.000804f, 0.013573f, -0.000274f, 0.002586f, -0.005594f, -0.003900f, -0.001393f, -0.003675f, -0.003934f, -0.003707f, -0.002510f, -0.003524f, -0.004632f, 0.003875f, 0.006456f, -0.003568f, 0.000982f, 0.000243f, -0.007330f, 0.000187f, -0.000163f, -0.005223f, 0.009814f, -0.005037f, 0.005581f, 0.002105f, -0.001504f, -0.005655f, -0.005201f, 0.005024f, -0.002624f, -0.001927f, -0.007750f, -0.002002f, -0.000716f, -0.003685f, 0.010354f, -0.002289f, -0.000646f, 0.004297f, -0.000750f, -0.008655f, -0.004426f, -0.007635f, -0.005101f, 0.011768f, -0.003309f, 0.013090f, -0.000047f, -0.000578f, -0.002372f, 0.001493f, 0.000560f, -0.007840f, -0.008309f, 0.006020f, 0.000700f, 0.004080f, -0.000547f, 0.004757f, 0.002955f, -0.007603f, -0.000038f, 0.002476f, 0.004091f, -0.000055f, 0.003456f, 0.006225f, -0.008343f, 0.002160f, 0.002164f, -0.004230f, 0.000015f, 0.001853f, 0.006015f, 0.003901f, -0.004163f, -0.001316f, -0.000209f, 0.001352f, 0.001927f, 0.001398f, 0.001590f, -0.001154f, 0.000838f, -0.002332f, - -0.001435f, -0.000093f, 0.003078f, 0.001283f, -0.000066f, -0.000282f, -0.002045f, 0.001151f, -0.000132f, -0.000774f, -0.000149f, 0.001015f, 0.000487f, 0.000708f, 0.001999f, -0.000727f, 0.000897f, 0.002294f, 0.017836f, -0.001499f, -0.002267f, -0.004694f, -0.009907f, -0.012198f, -0.011170f, 0.001135f, 0.009765f, 0.003355f, 0.013070f, 0.004428f, -0.006079f, 0.001494f, -0.015780f, -0.013378f, 0.006068f, -0.004764f, 0.008590f, -0.000913f, -0.007070f, -0.003570f, 0.017159f, 0.003755f, 0.007195f, -0.000432f, 0.005485f, -0.002675f, -0.002225f, 0.003318f, -0.002483f, -0.007640f, -0.000660f, 0.002660f, -0.000983f, -0.000553f, 0.010876f, 0.006693f, -0.011909f, 0.000170f, -0.007593f, 0.012340f, 0.007251f, 0.000420f, -0.004524f, -0.004644f, 0.005620f, 0.003093f, 0.009178f, -0.008721f, 0.014631f, 0.017980f, -0.005086f, 0.017515f, -0.000130f, 0.009132f, 0.005633f, -0.003358f, 0.002948f, 0.014019f, -0.001757f, -0.009629f, 0.008054f, 0.002533f, -0.000211f, -0.001196f, -0.001783f, 0.000504f, 0.008134f, -0.005395f, 0.002887f, 0.002109f, 0.004256f, -0.006932f, 0.007661f, 0.001698f, -0.000793f, 0.002356f, - 0.001023f, 0.000653f, -0.000438f, 0.001654f, 0.004457f, -0.003323f, 0.001732f, 0.001109f, 0.001811f, -0.003043f, 0.000098f, -0.004821f, 0.000709f, 0.002112f, -0.002839f, -0.001848f, 0.000514f, 0.001197f, 0.001421f, 0.000321f, 0.001284f, -0.000110f, -0.000091f, 0.002765f, -0.000388f, 0.000613f, -0.015497f, -0.012108f, 0.003863f, -0.006837f, 0.004952f, -0.008555f, -0.012169f, -0.011246f, 0.001618f, -0.008390f, 0.007764f, 0.005701f, -0.010791f, -0.002188f, 0.004458f, 0.001078f, 0.005473f, -0.003152f, 0.005662f, 0.006958f, -0.009570f, 0.003121f, 0.003218f, -0.007684f, 0.004593f, 0.000837f, -0.009062f, 0.006809f, 0.006581f, -0.003200f, 0.007187f, 0.001065f, 0.005877f, 0.005311f, 0.002260f, -0.003388f, -0.000794f, -0.010890f, -0.003236f, -0.005394f, 0.005815f, 0.006099f, 0.002452f, -0.017473f, 0.003407f, 0.007416f, -0.003895f, 0.012349f, -0.010003f, -0.013320f, 0.001083f, -0.003928f, 0.004338f, -0.009502f, 0.017457f, -0.000882f, -0.005751f, 0.001735f, 0.000286f, 0.009932f, -0.000495f, -0.005747f, -0.000314f, -0.003894f, -0.005273f, -0.006740f, 0.003254f, -0.012206f, 0.001328f, 0.000471f, - 0.003665f, 0.008195f, 0.002763f, 0.005837f, 0.009083f, -0.006142f, -0.001013f, 0.002031f, -0.007633f, 0.005283f, -0.002552f, 0.004504f, 0.003656f, -0.002375f, -0.001746f, 0.006619f, -0.002067f, -0.006014f, 0.000931f, -0.000632f, -0.000148f, -0.003245f, 0.004889f, -0.003707f, 0.001908f, 0.001804f, 0.002532f, -0.000958f, -0.000922f, 0.000291f, -0.001769f, 0.000720f, -0.001186f, 0.000111f, -0.000705f, -0.001823f, 0.002439f, -0.000934f, 0.000599f, -0.000336f, 0.000232f, 0.000019f, 0.000509f, -0.003111f, -0.037147f, -0.000533f, -0.004469f, 0.026302f, 0.000649f, 0.001660f, 0.005668f, -0.003580f, 0.013282f, 0.003335f, -0.014055f, -0.007521f, -0.016503f, 0.003018f, -0.001096f, -0.005615f, -0.004732f, -0.005997f, -0.003808f, 0.020480f, -0.009328f, -0.004563f, -0.005258f, -0.015475f, -0.000608f, -0.003745f, 0.005363f, 0.007790f, -0.002472f, -0.000031f, 0.004596f, -0.004694f, -0.001250f, -0.001956f, -0.005582f, 0.006308f, 0.012621f, -0.001433f, -0.002033f, 0.010013f, -0.013107f, 0.008616f, -0.010456f, -0.021111f, -0.013380f, -0.021025f, -0.003167f, -0.011956f, -0.008036f, 0.002297f, 0.008467f, 0.004349f, - 0.006066f, -0.003034f, 0.007348f, -0.008884f, -0.001972f, 0.007731f, 0.000022f, 0.010705f, -0.004379f, 0.003360f, -0.007391f, -0.005537f, 0.005578f, -0.012804f, 0.003514f, 0.009777f, -0.012510f, 0.001411f, -0.003269f, -0.005717f, -0.008185f, -0.007315f, -0.002405f, -0.003142f, 0.002053f, 0.009168f, -0.004300f, 0.002976f, -0.007501f, -0.007944f, -0.006284f, 0.003235f, 0.004381f, 0.001304f, -0.001923f, -0.002190f, -0.003322f, 0.002047f, -0.002806f, -0.002366f, -0.001091f, -0.002181f, -0.000226f, 0.000636f, -0.004032f, -0.000770f, -0.000418f, -0.002921f, -0.000733f, -0.001197f, 0.000088f, -0.000335f, -0.005537f, 0.000894f, 0.002435f, -0.000857f, -0.002136f, -0.000016f, 0.003555f, 0.002015f, -0.001289f, -0.003732f, 0.002212f, -0.000269f, -0.001225f, 0.023859f, 0.000177f, -0.013286f, -0.012763f, -0.004369f, -0.009302f, -0.003583f, -0.006988f, 0.001833f, 0.001179f, -0.010510f, -0.006162f, -0.011546f, 0.021929f, 0.009294f, 0.002051f, -0.001237f, 0.011908f, -0.017722f, -0.000246f, -0.000374f, -0.011166f, -0.014915f, 0.013387f, 0.000270f, 0.009563f, -0.014964f, -0.006507f, -0.005216f, 0.005239f, -0.000537f, - 0.006433f, -0.010326f, 0.003161f, 0.004220f, -0.011128f, -0.010754f, -0.009677f, 0.002319f, -0.003158f, -0.003015f, 0.009483f, -0.002774f, 0.001091f, 0.000166f, -0.001817f, -0.010676f, -0.006456f, -0.001236f, -0.015982f, -0.010483f, -0.008396f, 0.004454f, 0.003120f, 0.006401f, -0.001532f, 0.002796f, -0.000128f, -0.001649f, 0.007513f, -0.005800f, 0.013049f, 0.001814f, 0.003989f, -0.001722f, -0.004236f, 0.005162f, 0.004076f, 0.010254f, -0.003042f, 0.001596f, 0.006325f, -0.003716f, 0.000185f, -0.013572f, 0.006447f, -0.010452f, 0.006674f, -0.007730f, -0.007446f, -0.014637f, -0.002791f, 0.003691f, 0.001666f, -0.002481f, 0.003472f, 0.001462f, 0.006748f, 0.001073f, -0.001964f, 0.005833f, 0.003265f, -0.005227f, 0.001344f, -0.004255f, 0.004668f, -0.001880f, 0.000849f, -0.001184f, -0.000458f, -0.003760f, -0.000066f, 0.000184f, 0.000780f, -0.002219f, 0.001820f, -0.003169f, 0.001311f, -0.000605f, -0.001491f, -0.002817f, 0.000800f, -0.001906f, 0.004020f, 0.001072f, -0.000974f, -0.001774f, -0.001515f, 0.003019f, 0.002124f, 0.002882f, 0.000376f, 0.000273f, 0.001606f, -0.003353f, 0.028271f, 0.026769f, - 0.020010f, -0.006614f, 0.007403f, 0.010184f, 0.006023f, 0.005798f, -0.009781f, -0.008522f, -0.012839f, 0.011643f, -0.012041f, -0.001384f, -0.008732f, 0.015410f, -0.016869f, -0.012564f, -0.006222f, -0.002633f, -0.009247f, -0.013947f, 0.004107f, 0.000842f, 0.000918f, -0.016934f, -0.009295f, 0.004551f, 0.003662f, 0.004937f, -0.004530f, -0.006670f, 0.000624f, 0.005222f, 0.006632f, -0.004699f, 0.006310f, -0.008948f, -0.002319f, -0.022043f, 0.008195f, 0.002759f, -0.003735f, -0.004104f, -0.016252f, -0.007370f, 0.002129f, -0.003871f, -0.022859f, 0.012462f, 0.005174f, 0.000058f, -0.006128f, -0.004730f, -0.009640f, 0.003046f, -0.003385f, 0.006686f, -0.001388f, -0.003219f, -0.012987f, -0.002449f, -0.001259f, -0.007114f, 0.014366f, -0.010317f, 0.000237f, 0.008569f, -0.003532f, -0.011165f, -0.006277f, 0.009725f, 0.014033f, 0.006983f, -0.001038f, -0.000354f, 0.007437f, -0.015034f, 0.006177f, -0.001540f, -0.000709f, 0.000758f, 0.003276f, -0.000812f, -0.000608f, 0.000812f, -0.002934f, -0.009060f, -0.002445f, -0.002734f, 0.002793f, 0.001995f, 0.001067f, -0.003480f, -0.001843f, -0.004028f, -0.005016f, -0.001204f, - -0.000184f, 0.006064f, 0.000576f, 0.000867f, 0.000748f, -0.002051f, -0.001217f, 0.002815f, -0.003160f, -0.000447f, 0.001084f, 0.001778f, -0.003777f, 0.000091f, -0.000339f, 0.002264f, -0.002718f, -0.000604f, -0.001606f, -0.002592f, -0.005809f, -0.002623f, -0.000292f, -0.002483f, -0.000007f, 0.000340f, -0.000294f, -0.003163f, -0.001282f, 0.034059f, 0.011418f, -0.004992f, -0.003983f, 0.011949f, -0.023027f, -0.004349f, 0.018635f, 0.009331f, -0.013000f, -0.000305f, -0.008822f, 0.003583f, 0.014333f, 0.035194f, 0.011621f, 0.027407f, -0.009719f, -0.002057f, -0.026687f, 0.009038f, -0.007786f, 0.007493f, -0.011688f, -0.000635f, 0.001129f, -0.004181f, 0.009582f, -0.004313f, 0.004578f, 0.011770f, -0.009030f, 0.005299f, 0.015064f, -0.004127f, 0.005043f, -0.000005f, 0.006060f, 0.008225f, 0.008484f, -0.045297f, 0.016563f, -0.005257f, -0.021193f, -0.003730f, 0.012957f, 0.003936f, -0.016368f, 0.008811f, 0.012922f, -0.026690f, 0.002154f, -0.007554f, 0.015702f, 0.003555f, 0.012975f, -0.003196f, -0.009314f, -0.018754f, 0.001166f, -0.011356f, 0.035368f, 0.006501f, -0.005787f, 0.011750f, 0.001507f, 0.011368f, - -0.027790f, -0.003696f, 0.004319f, 0.008586f, 0.002075f, -0.013048f, -0.002022f, 0.004718f, 0.012408f, 0.010408f, -0.008600f, 0.000194f, 0.012212f, -0.000570f, 0.005771f, -0.004286f, -0.002056f, 0.008497f, 0.000872f, -0.000710f, -0.001122f, 0.000384f, 0.004233f, -0.004079f, -0.001736f, -0.000563f, 0.003306f, 0.003105f, -0.000359f, -0.001176f, 0.008479f, -0.002735f, -0.001382f, -0.004497f, 0.000652f, 0.002227f, -0.002142f, 0.000096f, 0.002664f, 0.003376f, -0.002927f, -0.001434f, -0.004908f, 0.000306f, 0.004031f, -0.001959f, 0.000823f, 0.001755f, 0.002140f, 0.006717f, 0.000969f, 0.003252f, -0.000105f, -0.003023f, 0.004539f, 0.001010f, -0.040435f, -0.044348f, -0.015184f, -0.003462f, 0.000815f, 0.009421f, -0.018938f, 0.005974f, 0.022330f, -0.012813f, 0.011888f, 0.015455f, -0.010767f, 0.000329f, -0.005242f, 0.018901f, 0.026375f, -0.012637f, -0.014881f, 0.013256f, 0.001283f, -0.012666f, 0.006004f, 0.000206f, 0.003316f, 0.003765f, -0.006758f, -0.004938f, -0.028166f, -0.001456f, -0.008045f, -0.000656f, -0.000819f, 0.019150f, 0.005705f, -0.034399f, 0.000596f, 0.016574f, -0.018788f, 0.004943f, - 0.020252f, -0.004461f, 0.007145f, 0.000398f, -0.005281f, -0.013082f, 0.026034f, 0.021872f, -0.016614f, 0.008700f, -0.006159f, -0.000879f, 0.008127f, -0.005792f, 0.006824f, -0.010316f, -0.001137f, 0.021952f, -0.006203f, 0.004629f, 0.010417f, -0.007524f, -0.018016f, -0.000795f, 0.006246f, 0.003186f, -0.008632f, 0.001123f, 0.004916f, 0.007789f, 0.016117f, 0.009917f, 0.017732f, 0.009317f, 0.003472f, 0.008194f, -0.002846f, 0.015916f, -0.000463f, -0.012631f, -0.016903f, 0.002051f, 0.005571f, -0.003005f, 0.012749f, -0.006592f, -0.006783f, 0.005003f, -0.001529f, 0.001318f, 0.000716f, -0.007887f, -0.001023f, -0.004771f, 0.005843f, 0.002540f, 0.004715f, 0.009003f, 0.001209f, -0.003257f, -0.013049f, -0.001065f, 0.003132f, -0.003412f, -0.001270f, 0.001267f, -0.002834f, 0.002744f, 0.003010f, 0.000310f, -0.003002f, -0.002271f, 0.006524f, -0.000976f, 0.003116f, 0.001528f, 0.002182f, -0.004678f, -0.004778f, -0.002953f, 0.001227f, 0.002139f, 0.003957f, 0.002779f, 0.001996f, 0.001717f, 0.004951f, -0.001346f, -0.004643f, -0.043958f, 0.048180f, -0.003225f, 0.030854f, 0.001982f, -0.018539f, -0.005836f, - -0.010905f, -0.013132f, -0.002058f, 0.000469f, 0.022211f, -0.003976f, 0.015139f, -0.016025f, -0.001219f, 0.003466f, 0.003197f, 0.001390f, 0.019258f, 0.019205f, 0.006779f, 0.002742f, -0.002855f, -0.004193f, -0.001501f, -0.003635f, -0.033101f, -0.011525f, 0.014710f, 0.009381f, -0.004018f, 0.001305f, -0.015859f, 0.007487f, -0.019362f, 0.003805f, 0.029816f, 0.002935f, 0.006189f, -0.025444f, 0.013044f, 0.011356f, 0.002862f, -0.017179f, -0.007727f, -0.008186f, 0.001022f, -0.015451f, 0.015095f, 0.018549f, 0.011041f, -0.001996f, 0.027940f, 0.009713f, 0.041058f, 0.015868f, -0.011424f, 0.034188f, 0.000433f, -0.012889f, 0.024631f, -0.004372f, 0.007903f, 0.015441f, -0.011706f, -0.010026f, 0.022761f, 0.024540f, 0.014332f, -0.020438f, 0.007316f, -0.000484f, -0.009645f, -0.016835f, 0.011943f, 0.021693f, 0.012948f, 0.031629f, 0.004069f, -0.007313f, -0.007443f, -0.019944f, -0.007785f, 0.011911f, 0.001577f, -0.003876f, 0.000460f, -0.012540f, -0.008912f, 0.001451f, 0.002829f, -0.000678f, 0.012890f, 0.010168f, 0.004320f, 0.000161f, 0.003559f, 0.006000f, 0.002921f, -0.006377f, -0.002781f, 0.001540f, - -0.001708f, -0.002359f, 0.005260f, 0.000249f, -0.001867f, 0.004222f, 0.001411f, 0.001183f, 0.001461f, -0.004290f, 0.000736f, 0.011307f, -0.005526f, 0.007039f, 0.003107f, 0.000062f, -0.005488f, -0.006020f, -0.003243f, 0.002208f, 0.010726f, -0.023375f, 0.031113f, -0.008975f, -0.020417f, 0.006846f, 0.013542f, -0.013555f, -0.006854f, -0.028632f, 0.012013f, -0.010500f, -0.003434f, -0.026251f, -0.011516f, -0.008908f, -0.004467f, -0.011844f, 0.006219f, -0.005323f, -0.006440f, 0.006162f, 0.008703f, 0.015270f, 0.015012f, -0.006500f, -0.005383f, -0.021176f, 0.008371f, 0.000379f, 0.013962f, 0.003794f, 0.003770f, -0.004829f, 0.005613f, -0.013262f, -0.011159f, 0.006181f, 0.003216f, 0.006272f, -0.025760f, 0.008586f, 0.016924f, -0.000112f, -0.022681f, -0.023790f, -0.018448f, -0.054785f, 0.007782f, -0.006372f, 0.026532f, -0.013036f, 0.022052f, 0.006987f, 0.001546f, 0.028292f, 0.004369f, -0.003360f, 0.020437f, 0.007463f, -0.027759f, -0.013912f, 0.003370f, -0.008963f, -0.015736f, -0.009697f, 0.035894f, 0.016387f, -0.016825f, -0.002156f, -0.009429f, -0.004745f, 0.005290f, 0.025202f, 0.000511f, -0.006916f, - 0.033546f, -0.012128f, -0.030375f, -0.029160f, -0.034381f, -0.006251f, 0.002690f, -0.001040f, -0.006003f, -0.004357f, -0.014667f, -0.003045f, 0.004368f, -0.004723f, -0.004299f, 0.002748f, 0.002880f, -0.021818f, -0.008839f, -0.017128f, 0.000874f, -0.005924f, -0.005428f, -0.009261f, -0.002774f, 0.002238f, 0.013218f, -0.000060f, 0.016196f, 0.007733f, 0.011916f, 0.001048f, 0.005652f, -0.005747f, 0.010875f, -0.000291f, -0.007693f, -0.011833f, 0.006765f, 0.000820f, 0.003782f, -0.003283f, 0.002210f, -0.003913f, 0.003821f, -0.001582f, 0.004514f, -0.001205f, -0.001809f, 0.002572f, -0.000516f, 0.013551f, -0.022514f, -0.005683f, -0.006052f, -0.002979f, -0.001589f, 0.059709f, 0.009759f, 0.021808f, -0.010622f, 0.019040f, 0.038475f, -0.033032f, 0.049991f, 0.029610f, -0.013400f, 0.000410f, 0.003013f, -0.018023f, -0.030183f, 0.002035f, -0.017508f, -0.026956f, -0.012084f, 0.002349f, 0.000025f, -0.003352f, -0.012118f, -0.002069f, -0.011799f, -0.000867f, -0.013637f, -0.001041f, 0.009315f, -0.021200f, 0.011604f, 0.017763f, -0.013883f, -0.012940f, 0.009179f, 0.006896f, -0.001222f, 0.053590f, 0.004720f, 0.035705f, - -0.025720f, -0.002550f, -0.031182f, -0.022941f, 0.005502f, -0.023011f, -0.031520f, -0.021074f, -0.023942f, -0.005284f, -0.006381f, -0.026645f, -0.028892f, 0.037628f, 0.005914f, 0.002301f, -0.005113f, 0.019456f, 0.010838f, 0.023481f, -0.002338f, 0.022188f, -0.012450f, 0.004995f, -0.041655f, 0.033952f, 0.016456f, 0.002591f, -0.022876f, -0.001811f, 0.010333f, 0.002080f, 0.003984f, 0.016721f, 0.023455f, -0.018260f, -0.023348f, -0.015470f, -0.003650f, -0.000490f, 0.002561f, -0.013823f, 0.001572f, 0.003823f, 0.009670f, 0.012451f, -0.001582f, -0.007879f, 0.013099f, 0.006348f, -0.009765f, -0.000796f, 0.004738f, -0.005968f, -0.010319f, 0.001735f, -0.003495f, -0.003538f, -0.000307f, -0.004669f, 0.012011f, -0.012807f, 0.006975f, -0.000510f, 0.013285f, -0.014020f, -0.003357f, 0.002172f, -0.003511f, -0.005448f, -0.002221f, -0.011162f, -0.012077f, -0.002461f, 0.001276f, 0.003387f, 0.004392f, -0.008389f, 0.008325f, 0.006099f, -0.004939f, 0.007237f, -0.001459f, 0.004068f, 0.000370f, 0.004019f, -0.003355f, -0.002845f, 0.001144f, 0.001989f, 0.004878f, -0.000825f, 0.006692f, -0.003297f, -0.002312f, 0.000001f, - -0.002424f, 0.004223f, 0.004296f, 0.029205f, -0.011777f, -0.009585f, 0.032594f, -0.027251f, -0.020754f, -0.005013f, -0.016487f, -0.002554f, -0.032463f, 0.007399f, -0.019949f, 0.015482f, 0.002272f, 0.005340f, 0.018719f, 0.005443f, 0.013242f, 0.018144f, 0.017241f, 0.014243f, 0.024118f, 0.002940f, 0.016428f, 0.014721f, -0.017420f, 0.030411f, 0.007532f, 0.014104f, -0.016255f, 0.023750f, 0.010773f, 0.016702f, 0.004315f, 0.006011f, -0.002965f, -0.021748f, 0.005663f, 0.012424f, 0.014662f, 0.015978f, 0.003527f, -0.026466f, -0.016678f, 0.019174f, 0.010499f, 0.004423f, -0.009980f, 0.013297f, -0.009541f, -0.026527f, 0.039176f, 0.023934f, 0.017554f, -0.014955f, -0.007284f, -0.019741f, -0.061648f, -0.001791f, -0.008506f, 0.008054f, -0.014310f, -0.015428f, -0.027118f, 0.004897f, 0.008857f, 0.034649f, -0.027139f, 0.011141f, 0.000634f, 0.016000f, -0.023875f, -0.029374f, -0.017813f, 0.019124f, 0.005943f, 0.006048f, 0.010258f, -0.007991f, 0.003519f, 0.022408f, 0.008087f, 0.011400f, 0.014395f, -0.005583f, -0.005029f, -0.009245f, 0.000395f, 0.009861f, 0.012252f, 0.000567f, 0.005183f, 0.002557f, - 0.002140f, 0.009284f, -0.005482f, -0.004744f, -0.007803f, -0.004365f, -0.008077f, -0.000123f, -0.012365f, -0.004934f, -0.013077f, -0.000603f, -0.007778f, -0.002152f, -0.001603f, -0.004458f, 0.004058f, -0.003168f, -0.016828f, -0.002397f, 0.007088f, 0.007629f, 0.014331f, -0.001936f, -0.008091f, 0.004162f, -0.003019f, -0.012260f, 0.011753f, 0.009873f, 0.009619f, 0.021928f, 0.014559f, -0.001013f, 0.001087f, -0.004687f, 0.006095f, 0.001953f, -0.050462f, 0.028102f, 0.029947f, -0.015728f, 0.025458f, 0.008390f, -0.042639f, -0.007998f, 0.054766f, -0.008427f, -0.037339f, -0.006309f, -0.004078f, -0.032527f, 0.021847f, 0.004095f, -0.016658f, 0.023571f, 0.015477f, 0.056490f, 0.032906f, 0.000335f, 0.003672f, 0.053263f, -0.014325f, 0.013070f, -0.022505f, -0.032192f, -0.009953f, -0.022046f, 0.004330f, -0.002118f, 0.010336f, -0.002192f, -0.004368f, -0.009651f, 0.041914f, 0.001511f, -0.033930f, -0.027066f, -0.006540f, -0.007423f, -0.001692f, 0.013308f, 0.038219f, 0.024203f, 0.007688f, -0.024035f, 0.029624f, 0.054498f, -0.012129f, 0.024463f, 0.022910f, 0.065781f, 0.012132f, 0.012113f, 0.019576f, 0.027735f, - 0.015197f, -0.023294f, -0.022364f, 0.014735f, -0.041132f, -0.025016f, -0.029609f, 0.027112f, 0.023716f, 0.016374f, -0.007069f, 0.019851f, 0.042098f, -0.024796f, 0.033443f, 0.033236f, -0.004993f, 0.032663f, -0.031644f, -0.014288f, -0.011326f, 0.069000f, -0.034378f, 0.033653f, 0.020933f, 0.012078f, 0.009284f, -0.031275f, -0.003475f, -0.024701f, 0.025559f, 0.024186f, -0.000808f, 0.001329f, -0.012832f, 0.017961f, -0.007636f, 0.001359f, 0.006552f, 0.007081f, -0.000454f, 0.010777f, -0.008161f, -0.004657f, -0.003484f, -0.008209f, 0.003126f, 0.006319f, -0.006118f, 0.002633f, 0.007620f, 0.013624f, 0.001794f, -0.013462f, 0.005143f, -0.014553f, 0.002163f, 0.012232f, 0.007929f, 0.012966f, -0.002676f, 0.021195f, -0.008926f, 0.015524f, -0.004531f, -0.005661f, -0.003180f, 0.000425f, 0.017147f, -0.013178f, 0.008071f, -0.000853f, 0.008188f, -0.010824f, 0.002416f, 0.003727f, -0.005024f, 0.022475f, -0.012879f, 0.009725f, 0.010618f, 0.037657f, 0.067523f, 0.006850f, -0.007442f, 0.006749f, -0.004047f, -0.011637f, 0.001630f, 0.006642f, -0.016971f, -0.022567f, 0.007134f, -0.011943f, -0.006625f, 0.016844f, - -0.001214f, 0.033536f, -0.018237f, 0.032865f, 0.016049f, 0.002804f, -0.019679f, 0.005817f, 0.032939f, 0.009146f, -0.017198f, 0.006089f, -0.004315f, 0.000452f, 0.019245f, -0.027549f, -0.014591f, 0.029707f, 0.000373f, -0.007957f, 0.025964f, -0.001795f, 0.009030f, 0.005458f, -0.025340f, -0.046257f, -0.009920f, 0.015362f, 0.029101f, 0.005828f, -0.022716f, 0.028768f, -0.009798f, 0.058886f, -0.030273f, 0.039450f, -0.023542f, 0.013779f, 0.034111f, -0.051188f, -0.052524f, -0.000886f, -0.014975f, 0.012996f, 0.016552f, 0.001871f, -0.007845f, -0.031515f, 0.020755f, -0.005030f, 0.037055f, 0.016258f, 0.034504f, 0.008898f, 0.020046f, -0.008996f, 0.026482f, 0.009047f, -0.015991f, 0.002675f, -0.000538f, -0.077150f, -0.002345f, 0.012911f, 0.018460f, 0.031820f, 0.027403f, -0.009527f, 0.002254f, -0.006274f, 0.005087f, -0.000610f, -0.008560f, -0.020902f, 0.008786f, -0.012453f, 0.026533f, 0.002520f, 0.005163f, 0.012433f, 0.007715f, -0.008980f, 0.007662f, 0.018620f, 0.016885f, -0.006385f, -0.003042f, 0.002119f, -0.004056f, -0.003434f, -0.011972f, -0.002835f, -0.025115f, -0.004171f, 0.008692f, -0.021672f, - 0.014636f, -0.016534f, -0.012778f, 0.003069f, -0.012986f, 0.012609f, 0.005274f, -0.005725f, 0.008808f, -0.001736f, -0.001311f, 0.004839f, 0.018621f, -0.013599f, 0.003031f, 0.002005f, 0.008328f, 0.005176f, 0.003902f, -0.007696f, 0.044506f, 0.057512f, -0.012356f, -0.002066f, 0.020396f, 0.076022f, 0.002293f, -0.044734f, -0.017787f, 0.009271f, 0.008807f, -0.014050f, 0.014682f, -0.010112f, 0.023693f, -0.037928f, 0.002185f, 0.023840f, -0.015706f, -0.017042f, 0.003501f, -0.037498f, -0.011400f, -0.012134f, -0.059703f, -0.050461f, -0.029110f, 0.022195f, 0.026187f, -0.004443f, -0.042421f, 0.004910f, 0.001725f, -0.001400f, 0.008759f, -0.021300f, 0.051395f, -0.014508f, 0.006742f, 0.056799f, -0.049407f, 0.024027f, 0.008625f, -0.017223f, 0.020858f, -0.013325f, -0.040004f, 0.000918f, 0.035064f, -0.015500f, -0.025033f, 0.014578f, 0.004951f, 0.033269f, 0.000515f, -0.051103f, 0.004365f, -0.030189f, 0.050691f, -0.018230f, 0.007904f, 0.012451f, 0.006333f, -0.007191f, -0.032437f, 0.013713f, 0.034631f, 0.010016f, 0.035727f, -0.051845f, -0.028251f, -0.008518f, -0.000148f, 0.005616f, -0.039716f, 0.035880f, - -0.004598f, -0.038144f, -0.012397f, 0.024155f, 0.022805f, -0.021123f, -0.029000f, 0.028996f, -0.023007f, -0.014633f, -0.000174f, -0.003589f, -0.002820f, -0.001895f, -0.008161f, -0.001624f, 0.014940f, -0.003311f, 0.013769f, -0.015327f, 0.011035f, 0.013952f, -0.003331f, 0.007529f, 0.002707f, -0.002843f, 0.000628f, 0.001887f, 0.025355f, 0.001294f, -0.004296f, 0.002114f, 0.006016f, -0.012445f, 0.004953f, -0.015913f, -0.000756f, 0.018390f, -0.006086f, -0.014499f, -0.004820f, 0.008239f, 0.000828f, 0.000596f, 0.011432f, 0.000855f, -0.013932f, -0.007560f, 0.027045f, 0.019302f, -0.005754f, -0.001147f, -0.000272f, -0.039359f, 0.057856f, 0.001649f, -0.099097f, 0.039695f, -0.013622f, 0.007723f, 0.010110f, 0.013305f, 0.024325f, 0.008868f, -0.017943f, -0.004334f, 0.024497f, 0.016564f, -0.019678f, -0.001053f, -0.015613f, -0.008095f, -0.048676f, -0.006212f, 0.023425f, 0.029092f, 0.006538f, -0.011547f, 0.032226f, -0.033199f, 0.036719f, -0.021158f, -0.011887f, 0.004376f, -0.011397f, 0.009790f, -0.029297f, -0.039550f, -0.044263f, -0.014168f, 0.022917f, -0.008852f, 0.000221f, 0.026955f, 0.007483f, 0.004710f, - -0.000849f, 0.000915f, -0.009325f, 0.000362f, 0.029048f, 0.017884f, 0.030655f, 0.026003f, 0.030753f, 0.020930f, -0.018291f, -0.011663f, 0.007552f, -0.001960f, -0.035348f, 0.023766f, -0.006401f, -0.033393f, 0.041914f, -0.000474f, 0.006809f, -0.001167f, -0.015252f, -0.005033f, 0.017599f, 0.025501f, 0.021207f, 0.000650f, 0.012987f, -0.042772f, -0.006081f, -0.015243f, 0.023269f, 0.008035f, -0.011928f, -0.013606f, 0.053855f, -0.016420f, -0.018459f, -0.005836f, 0.008679f, -0.013336f, -0.035501f, -0.002003f, -0.006089f, -0.019179f, 0.033256f, 0.006788f, 0.012513f, -0.010223f, -0.001791f, 0.007748f, 0.001988f, 0.009785f, 0.010541f, -0.003456f, 0.006459f, -0.006404f, 0.007321f, 0.002795f, -0.005896f, -0.004453f, 0.005417f, 0.007657f, 0.002066f, -0.006760f, -0.005628f, -0.006076f, -0.004506f, 0.000165f, 0.003787f, -0.005501f, -0.006694f, 0.001599f, -0.000548f, -0.001183f, 0.005755f, -0.002687f, 0.009128f, 0.002798f, 0.026777f, -0.002242f, -0.003387f, -0.005880f, 0.003261f, 0.000167f, -0.011287f, -0.014831f, 0.134985f, -0.132377f, -0.006541f, -0.143935f, -0.022194f, -0.054687f, -0.006570f, 0.035229f, - -0.017758f, -0.039792f, 0.062938f, -0.016936f, -0.010850f, 0.002141f, 0.019467f, -0.002189f, 0.052326f, 0.034632f, 0.020822f, -0.030782f, 0.002152f, -0.020987f, -0.021305f, -0.014262f, 0.000873f, -0.006541f, -0.005680f, -0.017374f, -0.003788f, 0.028907f, 0.003643f, 0.019141f, 0.019163f, -0.001505f, 0.025551f, 0.037136f, 0.002073f, -0.007581f, -0.019287f, -0.023115f, 0.009326f, 0.010152f, -0.019118f, 0.031466f, -0.041490f, -0.042034f, 0.004704f, -0.014705f, 0.022553f, -0.038974f, 0.016702f, -0.074957f, -0.039893f, -0.060008f, -0.005152f, -0.029619f, -0.002637f, -0.018080f, -0.022502f, -0.019615f, -0.001752f, 0.005082f, -0.058595f, 0.006683f, -0.012805f, 0.006727f, 0.000301f, -0.027108f, -0.047667f, 0.032982f, -0.028674f, -0.005125f, 0.029540f, -0.002992f, -0.009229f, 0.019525f, 0.024488f, -0.005048f, 0.024393f, 0.015958f, 0.029471f, 0.016244f, 0.029821f, 0.014115f, -0.017643f, -0.004917f, -0.015540f, 0.000711f, -0.012865f, 0.002756f, 0.010816f, 0.015266f, 0.016741f, -0.007422f, 0.007790f, 0.005581f, 0.010985f, -0.002602f, -0.004167f, 0.005729f, 0.013163f, 0.001733f, 0.003076f, 0.014498f, - 0.007455f, 0.014924f, -0.002112f, 0.000689f, -0.001525f, 0.007280f, 0.010348f, -0.001879f, -0.017160f, 0.009417f, -0.002852f, 0.003658f, -0.005377f, 0.002387f, -0.004867f, -0.002541f, 0.000916f, -0.014314f, 0.000248f, 0.019600f, -0.012239f, -0.012927f, 0.001704f, 0.006690f, 0.006842f, 0.002313f, -0.013545f, 0.109210f, 0.054813f, 0.026489f, -0.026514f, -0.013739f, -0.057128f, 0.012522f, 0.045664f, -0.008978f, -0.010972f, 0.074891f, -0.013526f, -0.016702f, 0.036989f, 0.054821f, 0.009382f, 0.055915f, -0.014115f, 0.008114f, 0.032920f, 0.037278f, 0.058788f, 0.047603f, -0.002646f, -0.021298f, 0.017572f, 0.021426f, 0.020149f, 0.025196f, 0.043922f, 0.021512f, 0.055894f, -0.021789f, -0.001643f, 0.016330f, 0.015053f, 0.047399f, 0.027429f, 0.050804f, -0.036835f, -0.011597f, 0.020132f, -0.039575f, 0.031747f, 0.032355f, 0.030878f, 0.013167f, -0.040005f, -0.014610f, 0.075362f, 0.019389f, 0.050748f, 0.042192f, 0.046145f, -0.009569f, 0.061219f, 0.096081f, 0.032923f, 0.008418f, 0.067256f, 0.046533f, -0.026159f, -0.016055f, -0.032849f, -0.026183f, 0.028191f, 0.032927f, 0.002662f, -0.027872f, - 0.000369f, -0.024928f, -0.001370f, -0.011173f, 0.016054f, -0.058541f, -0.006896f, 0.005843f, -0.029849f, 0.022286f, 0.003725f, -0.018332f, 0.015399f, -0.036866f, -0.024167f, -0.040836f, -0.013867f, -0.019727f, 0.014190f, 0.004437f, -0.019196f, 0.004249f, 0.026418f, 0.007820f, -0.008958f, -0.016231f, -0.025401f, -0.009765f, 0.008115f, -0.035667f, -0.016848f, -0.003075f, 0.028405f, 0.009579f, -0.012401f, 0.005968f, -0.019442f, -0.005282f, -0.006139f, -0.015928f, -0.010504f, 0.026764f, -0.006416f, -0.001895f, -0.006770f, 0.006323f, 0.016879f, 0.012181f, 0.014429f, 0.036934f, -0.000192f, 0.029780f, 0.001152f, 0.003074f, 0.018415f, 0.015997f, -0.024757f, -0.014178f, -0.002162f, 0.005777f, 0.002364f, 0.000258f, -0.002705f, 0.011695f, -0.034366f, 0.017373f, -0.041464f, 0.073195f, 0.103861f, 0.060537f, -0.026366f, -0.056755f, -0.020749f, 0.051442f, -0.014951f, -0.042270f, 0.077492f, -0.053372f, 0.046380f, 0.026208f, -0.060437f, -0.024994f, -0.006121f, -0.100011f, 0.004239f, 0.011663f, -0.048043f, 0.098834f, -0.033635f, 0.091800f, -0.068388f, 0.010332f, 0.004691f, 0.067154f, 0.098998f, -0.007986f, - 0.033821f, 0.046751f, -0.054268f, 0.036769f, -0.073559f, -0.020230f, 0.140692f, -0.007763f, -0.038398f, -0.007444f, -0.078223f, 0.003538f, -0.024392f, 0.087973f, 0.033750f, 0.041029f, -0.013107f, -0.023066f, -0.043362f, -0.040313f, 0.010560f, 0.005747f, 0.000607f, 0.058621f, -0.013810f, 0.011299f, -0.060282f, -0.031320f, 0.040952f, -0.090255f, -0.035210f, -0.027052f, -0.030467f, 0.084541f, 0.006592f, 0.091329f, 0.065843f, 0.029208f, 0.035447f, -0.020317f, -0.047718f, 0.040971f, -0.065111f, -0.039957f, 0.081434f, 0.024708f, -0.048242f, -0.080284f, -0.048141f, -0.057103f, 0.046481f, -0.049281f, 0.026155f, -0.035564f, -0.002569f, -0.030531f, 0.033165f, 0.019126f, 0.003411f, -0.026479f, -0.004372f, -0.018258f, 0.005953f, -0.036048f, -0.024496f, -0.013529f, 0.008520f, 0.020258f, -0.000161f, -0.014649f, -0.020018f, -0.033504f, -0.023455f, 0.021397f, 0.029734f, -0.009117f, 0.020696f, 0.040936f, 0.020126f, -0.037906f, -0.010584f, -0.013904f, 0.024585f, -0.023118f, -0.014656f, -0.005419f, 0.009443f, -0.030406f, -0.040524f, -0.029211f, -0.009160f, 0.016922f, 0.000064f, 0.003839f, -0.005198f, 0.023158f, - 0.007866f, -0.001418f, -0.020721f, -0.007047f, -0.012599f, 0.016292f, -0.003998f, 0.003908f, 0.065455f, -0.109470f, 0.115782f, -0.003239f, 0.008605f, -0.037530f, 0.093424f, 0.021684f, 0.060041f, 0.022489f, -0.039924f, 0.013167f, 0.033192f, -0.057721f, 0.039803f, 0.000379f, 0.026290f, -0.076939f, -0.006330f, 0.018448f, 0.070172f, -0.029756f, -0.058538f, -0.002889f, 0.069784f, 0.036682f, -0.027163f, -0.060811f, -0.003348f, 0.050314f, 0.006262f, 0.003197f, 0.013674f, 0.036493f, 0.092602f, -0.131384f, -0.021984f, 0.012343f, 0.072529f, 0.016001f, -0.040080f, -0.010152f, 0.027406f, 0.066407f, -0.007102f, 0.002940f, -0.126057f, 0.036091f, 0.019285f, 0.033992f, -0.091562f, 0.080367f, 0.069092f, 0.025865f, -0.041619f, -0.004473f, -0.046012f, 0.033854f, 0.059120f, 0.024693f, 0.027475f, -0.005448f, 0.044727f, -0.065964f, 0.061934f, -0.018690f, -0.022585f, 0.072992f, 0.059983f, 0.003669f, -0.023172f, -0.060427f, 0.043729f, 0.048045f, -0.129310f, -0.010429f, 0.073794f, 0.018274f, -0.001176f, -0.046312f, -0.020205f, 0.125864f, -0.010012f, -0.043294f, -0.005814f, -0.023422f, -0.028403f, 0.041751f, - -0.035794f, 0.012631f, 0.018784f, 0.025427f, -0.018054f, 0.002363f, -0.018325f, -0.021724f, -0.014735f, 0.019182f, 0.019009f, -0.019883f, -0.004287f, 0.009540f, -0.016025f, 0.038026f, -0.036958f, 0.009442f, -0.006922f, -0.011962f, 0.013225f, 0.063078f, 0.003821f, 0.000045f, -0.010462f, -0.022299f, -0.000217f, 0.034335f, 0.007881f, -0.001636f, -0.006977f, -0.016215f, 0.028972f, -0.007571f, -0.002013f, -0.017188f, 0.016495f, -0.002695f, -0.008047f, -0.097945f, 0.047007f, 0.008633f, 0.029729f, 0.035991f, 0.052552f, 0.018328f, 0.016526f, -0.025815f, 0.026830f, 0.004557f, 0.062459f, -0.007724f, -0.019354f, 0.049049f, 0.037465f, -0.008783f, 0.002739f, -0.021619f, 0.000116f, 0.015246f, -0.005426f, -0.013079f, 0.027700f, -0.022920f, 0.002366f, 0.037825f, -0.008804f, 0.021663f, -0.039526f, -0.008349f, 0.004661f, -0.016448f, -0.006762f, 0.004074f, 0.027324f, -0.007477f, -0.047170f, 0.001454f, 0.092412f, 0.018896f, -0.050918f, 0.014692f, -0.051904f, -0.035528f, -0.027054f, -0.007549f, 0.058801f, -0.006792f, -0.047782f, 0.095596f, -0.104304f, 0.017298f, 0.105455f, 0.010891f, 0.073987f, -0.057228f, - -0.106703f, 0.033979f, 0.003145f, 0.084348f, 0.003985f, -0.048007f, 0.038808f, -0.010964f, -0.009289f, -0.020564f, -0.003879f, -0.029957f, 0.014346f, 0.003886f, 0.022138f, -0.036508f, -0.031685f, -0.012638f, 0.037048f, 0.048050f, -0.016601f, 0.025486f, -0.004374f, 0.040206f, 0.028105f, -0.051009f, 0.040101f, -0.010584f, 0.005519f, -0.008771f, -0.016294f, -0.000309f, -0.000738f, 0.005386f, -0.004398f, 0.004165f, 0.003125f, 0.002791f, 0.005309f, -0.016846f, 0.000320f, 0.009270f, -0.014560f, -0.001881f, 0.008386f, -0.009024f, 0.011163f, 0.012908f, -0.019718f, 0.023061f, 0.008821f, 0.023896f, -0.005913f, 0.011073f, 0.018670f, -0.036479f, -0.001060f, 0.011157f, 0.020659f, -0.013038f, -0.010311f, -0.012535f, -0.009718f, 0.021238f, 0.042029f, -0.018127f, -0.197592f, -0.454028f, -0.179930f, -0.273278f, -0.400114f, 0.215099f, 0.059490f, 0.123770f, 0.569888f, 0.439263f, 0.256274f, 0.469121f, 0.350061f, 0.059818f, 0.115743f, 0.096285f, -0.222278f, -0.190236f, -0.093165f, -0.340005f, -0.325099f, -0.124510f, -0.167023f, -0.235870f, -0.098585f, -0.084724f, -0.240039f, -0.200375f, -0.016612f, -0.114145f, - -0.194613f, -0.066854f, 0.062117f, -0.141380f, 0.042609f, 0.210442f, -0.015991f, -0.030161f, 0.285844f, 0.228248f, -0.009940f, 0.333917f, 0.386977f, 0.157147f, 0.363586f, 0.510106f, 0.304393f, 0.264399f, 0.612211f, 0.488561f, 0.367376f, 0.435462f, 0.577603f, 0.206511f, 0.081999f, 0.241823f, -0.190641f, -0.547251f, -0.396655f, -0.605251f, -0.980070f, -0.877896f, -0.931663f, -1.083533f, -1.104271f, -0.952234f, -0.829141f, -0.831585f, -0.584560f, -0.258952f, -0.175309f, -0.026563f, 0.283748f, 0.521356f, 0.526374f, 0.653389f, 0.940078f, 0.821705f, 0.751214f, 1.038009f, 0.825067f, 0.466318f, 0.680576f, 0.476537f, 0.185083f, 0.167441f, 0.219931f, 0.022672f, -0.069305f, 0.042708f, 0.006371f, -0.154101f, -0.082037f, 0.013735f, -0.122638f, -0.227397f, -0.109088f, -0.156015f, -0.331123f, -0.208801f, -0.080569f, -0.247568f, -0.166312f, 0.033369f, -0.078556f, -0.115619f, 0.056838f, -0.068398f, -0.272655f, -0.209014f, -0.334706f, -0.566032f, -0.532922f, -0.511181f, -0.530908f, -0.466726f, -0.313499f, -0.245024f, -0.147382f, -0.028614f, 0.124819f, 0.221263f, 0.339596f, 0.428321f, 0.532075f, 0.553545f, - 0.587136f, 0.654107f, 0.620514f, 0.568948f, 0.538260f, 0.356562f, 0.125661f, 0.011914f, -0.053330f, -0.152348f, -0.179600f, -0.156789f, -0.177026f, -0.198825f, -0.175148f, -0.176912f, -0.173356f, -0.146394f, -0.142845f, -0.149888f, -0.144645f, -0.126657f, -0.105013f, -0.089748f, -0.058716f, -0.036427f, -0.007399f, 0.004176f, 0.026671f, 0.040534f, 0.050952f, 0.052874f, 0.055947f, 0.055462f, 0.043629f, 0.025511f, 0.019707f, 0.009943f, -0.002789f, -0.013343f, -0.016992f, -0.037551f, -0.049034f, -0.060562f, -0.080714f, -0.095071f, -0.089087f, -0.085797f, -0.076557f, -0.057424f, -0.040697f, -0.029892f, -0.007506f, 0.015903f, 0.031160f, 0.047355f, 0.073656f, 0.079669f, 0.078998f, 0.085470f, 0.093920f, 0.086919f, 0.090352f, 0.094864f, 0.089928f, 0.086496f, 0.086885f, 0.076861f, 0.066185f, 0.058372f, 0.044862f, 0.025477f, 0.011555f, -0.004888f, -0.026703f, -0.048744f, -0.064824f, -0.084072f, -0.095647f, -0.100697f, -0.099296f, -0.098160f, -0.089942f, -0.077835f, -0.065610f, -0.053128f, -0.037096f, -0.026195f, -0.014104f, -0.003967f, 0.005659f, 0.013649f, 0.020207f, 0.025718f, 0.029687f, 0.029093f, - 0.028530f, 0.025918f, 0.022534f, 0.019172f, 0.016886f, 0.013929f, 0.011336f, 0.008978f, 0.007552f, 0.005980f, 0.005189f, 0.004564f, 0.004154f, 0.003671f, 0.003361f, 0.003232f} - }, - { - {-0.015902f, 0.009482f, -0.012087f, 0.001522f, -0.005098f, -0.001557f, 0.004761f, -0.007472f, -0.013627f, -0.003444f, 0.001194f, -0.007785f, -0.004481f, 0.006680f, -0.003897f, 0.003120f, -0.017078f, -0.001416f, 0.011610f, 0.006221f, -0.019113f, -0.006539f, -0.004993f, -0.005031f, 0.006495f, -0.002738f, -0.009945f, -0.006208f, -0.007103f, -0.007200f, 0.012641f, 0.004002f, 0.008149f, -0.005207f, 0.010695f, 0.009762f, 0.006935f, -0.003779f, -0.009039f, -0.007054f, 0.000771f, 0.001870f, 0.014537f, 0.005212f, 0.002779f, -0.006775f, 0.001593f, 0.000694f, 0.001675f, 0.005823f, 0.003421f, -0.009790f, -0.008372f, -0.004262f, 0.005315f, 0.001307f, -0.001851f, -0.010468f, -0.003216f, 0.004208f, 0.004778f, -0.004179f, -0.001605f, 0.000311f, 0.005056f, -0.001015f, -0.005578f, 0.000083f, 0.000803f, -0.007114f, 0.015309f, 0.001041f, -0.010395f, 0.000063f, -0.001606f, 0.009909f, 0.000784f, 0.006733f, 0.009178f, 0.003525f, -0.000635f, 0.000524f, -0.003347f, -0.002095f, -0.002230f, 0.005916f, -0.001894f, -0.000675f, -0.002648f, 0.002093f, 0.000690f, -0.001051f, -0.000257f, -0.001445f, 0.000290f, -0.000142f, - 0.001166f, 0.001268f, 0.001931f, 0.002478f, -0.010566f, -0.009566f, 0.010754f, 0.009861f, -0.008056f, 0.005922f, 0.000553f, 0.003033f, -0.026355f, 0.010137f, -0.003957f, -0.018004f, -0.023474f, 0.000596f, 0.016891f, 0.000990f, 0.010935f, 0.000377f, -0.021237f, -0.007344f, 0.002394f, 0.007381f, -0.003780f, -0.001842f, -0.008970f, 0.001154f, -0.001669f, 0.014949f, 0.007563f, 0.003157f, 0.002638f, 0.004044f, 0.005151f, 0.013630f, 0.008226f, -0.012087f, -0.001074f, 0.002782f, 0.002869f, -0.014370f, 0.004618f, -0.004288f, -0.009126f, -0.002590f, -0.000435f, 0.009795f, 0.002473f, -0.005506f, 0.009890f, 0.015475f, -0.003334f, -0.005898f, 0.003696f, -0.001129f, 0.008420f, 0.008619f, 0.006711f, -0.010379f, -0.007939f, 0.007413f, -0.003189f, -0.002619f, -0.007999f, 0.000844f, -0.011855f, 0.007012f, 0.006280f, 0.008302f, 0.002085f, 0.009651f, -0.010514f, -0.006588f, 0.013528f, 0.000696f, 0.004984f, 0.016021f, 0.006145f, 0.001564f, -0.006511f, 0.009393f, 0.001079f, -0.004786f, 0.002638f, -0.011352f, 0.000271f, -0.001208f, 0.001638f, 0.003032f, -0.001345f, -0.005066f, -0.002821f, -0.000835f, - 0.002419f, 0.002303f, 0.000731f, -0.001408f, 0.001333f, 0.003191f, 0.000514f, -0.001071f, -0.001035f, 0.000014f, 0.013390f, 0.001185f, 0.005185f, -0.011272f, -0.009573f, 0.005481f, -0.002653f, -0.004123f, -0.005235f, -0.004899f, 0.004070f, -0.013045f, -0.007475f, -0.016110f, -0.019349f, -0.003584f, 0.016113f, 0.010384f, -0.006502f, -0.001816f, -0.002233f, -0.003754f, -0.013933f, 0.010036f, -0.003493f, -0.003585f, 0.000887f, 0.006558f, -0.003134f, 0.000577f, -0.000475f, 0.009499f, -0.008779f, 0.009528f, 0.005212f, 0.011424f, -0.003891f, 0.008837f, 0.003940f, -0.005477f, 0.007981f, -0.005416f, 0.004599f, 0.008466f, -0.006385f, 0.008891f, -0.005304f, -0.004299f, -0.001335f, -0.002644f, 0.004492f, -0.002603f, -0.006758f, 0.002709f, -0.005865f, 0.001277f, 0.000811f, 0.000903f, 0.013432f, 0.002595f, -0.003074f, 0.000062f, -0.005491f, -0.007693f, 0.003981f, -0.001865f, 0.012824f, 0.013048f, 0.005311f, -0.003643f, -0.002004f, -0.000111f, -0.005135f, -0.005976f, 0.006604f, 0.010336f, 0.000348f, -0.001146f, 0.006384f, 0.006852f, -0.000882f, 0.002407f, 0.002223f, -0.005015f, 0.004753f, -0.000929f, - 0.006816f, -0.003394f, -0.001286f, -0.000281f, -0.002814f, -0.000334f, 0.004970f, -0.001109f, 0.001517f, 0.001427f, -0.003486f, 0.001071f, -0.000627f, -0.000734f, 0.001432f, 0.001269f, -0.002225f, 0.002527f, -0.000849f, -0.001128f, 0.000204f, -0.000318f, -0.000404f, -0.002076f, -0.001500f, 0.000659f, 0.025549f, -0.010806f, 0.010476f, -0.013022f, -0.010951f, 0.000055f, -0.003037f, -0.002769f, 0.003563f, -0.005478f, 0.011051f, 0.010781f, 0.009238f, -0.002770f, -0.001201f, -0.004809f, -0.011788f, 0.001845f, -0.007080f, -0.001308f, 0.001297f, -0.003947f, 0.006722f, 0.002544f, -0.000803f, -0.019461f, -0.008121f, -0.012264f, 0.000464f, -0.008023f, -0.012334f, -0.005405f, -0.006814f, -0.007539f, 0.012285f, -0.009812f, 0.008661f, 0.000754f, -0.003481f, 0.004852f, 0.004170f, -0.008795f, -0.002407f, 0.000185f, 0.009488f, -0.000900f, -0.012965f, -0.016450f, -0.017124f, 0.004459f, -0.006254f, 0.000379f, -0.001355f, 0.002480f, 0.005792f, 0.009522f, -0.006574f, -0.003481f, 0.003136f, 0.003276f, 0.001222f, 0.011940f, -0.006678f, 0.007384f, -0.013713f, 0.026882f, 0.003307f, -0.002861f, 0.005228f, 0.002574f, - 0.005141f, -0.007473f, -0.001316f, 0.002041f, -0.000828f, -0.001609f, -0.013565f, -0.004511f, -0.009219f, -0.002745f, -0.001078f, -0.006649f, -0.006498f, 0.004828f, 0.005641f, 0.001718f, 0.001110f, -0.000622f, 0.004766f, 0.002800f, 0.005472f, -0.002742f, 0.000483f, 0.000167f, 0.005028f, -0.002019f, -0.000295f, -0.000309f, 0.000561f, -0.003983f, 0.000980f, -0.002884f, 0.001454f, 0.002004f, -0.000953f, -0.003355f, 0.000670f, 0.001028f, -0.001034f, -0.001159f, -0.003603f, 0.000945f, -0.000422f, -0.001846f, 0.002275f, 0.002610f, -0.000334f, -0.000771f, -0.012581f, 0.001734f, 0.002233f, 0.000748f, -0.002060f, -0.007562f, 0.004365f, 0.003484f, -0.011377f, 0.013181f, -0.016624f, 0.020322f, -0.002092f, 0.006733f, 0.002915f, -0.000492f, -0.002291f, 0.004123f, 0.019024f, 0.021373f, -0.004208f, 0.003790f, -0.002684f, -0.003115f, 0.002742f, 0.004485f, 0.014603f, -0.001933f, 0.004353f, -0.007508f, 0.007958f, 0.001726f, 0.011490f, 0.005554f, 0.010755f, -0.015719f, 0.006497f, 0.005650f, -0.005037f, -0.000219f, 0.011683f, -0.000003f, 0.000816f, 0.003535f, 0.007065f, -0.002484f, -0.001129f, 0.022694f, - 0.010714f, 0.001968f, 0.001961f, -0.004799f, 0.010216f, -0.013788f, -0.020252f, -0.024425f, -0.001613f, 0.012778f, -0.000508f, 0.006351f, 0.017219f, 0.006811f, -0.003185f, -0.006135f, 0.009125f, -0.001831f, 0.022171f, 0.009982f, 0.003187f, 0.003081f, -0.012285f, 0.002553f, 0.009064f, -0.004708f, -0.013819f, 0.002376f, 0.004805f, -0.000625f, -0.004882f, -0.001775f, 0.002206f, -0.004476f, 0.002451f, 0.002513f, 0.002201f, -0.000907f, 0.002559f, -0.004388f, -0.004197f, -0.001361f, -0.002712f, 0.001379f, -0.004214f, 0.002345f, 0.003877f, 0.002619f, 0.002892f, 0.003014f, 0.000822f, 0.001930f, -0.005765f, -0.004766f, -0.001907f, -0.002506f, -0.003077f, -0.000619f, 0.001752f, 0.001038f, -0.000340f, 0.003524f, 0.001778f, -0.000274f, 0.004313f, 0.002764f, -0.000150f, -0.029823f, 0.003066f, -0.002358f, 0.020259f, -0.015365f, 0.008823f, -0.031563f, 0.012259f, -0.003073f, -0.016158f, -0.017716f, -0.012450f, 0.009295f, 0.007210f, 0.023782f, 0.003039f, 0.007861f, 0.022724f, -0.004062f, -0.016761f, 0.002410f, -0.012948f, 0.003049f, 0.018499f, 0.003385f, -0.005362f, -0.002297f, -0.003705f, 0.005404f, - 0.007077f, -0.001609f, 0.004683f, 0.009531f, -0.006137f, 0.002973f, -0.011414f, -0.000940f, -0.014250f, -0.002275f, 0.001776f, -0.006750f, 0.010257f, 0.007048f, 0.008717f, 0.017624f, 0.000977f, 0.021342f, 0.016227f, 0.007869f, -0.011286f, 0.024488f, 0.010401f, 0.004261f, 0.021346f, -0.002408f, 0.000317f, 0.001745f, 0.006971f, -0.004531f, -0.006451f, -0.014782f, -0.014435f, -0.011682f, -0.000046f, -0.009226f, 0.018694f, -0.011417f, 0.007628f, 0.011740f, -0.006797f, 0.000565f, -0.005593f, -0.003204f, -0.018726f, -0.021260f, 0.009518f, -0.003738f, -0.007310f, -0.006331f, 0.001622f, 0.002447f, 0.001242f, 0.004120f, -0.007612f, 0.017321f, 0.001024f, 0.005186f, -0.003758f, 0.000933f, 0.004966f, -0.008492f, 0.002649f, 0.000295f, 0.002719f, 0.003905f, -0.000231f, 0.003045f, 0.005719f, -0.000014f, 0.001496f, 0.004246f, 0.004499f, 0.006117f, -0.000477f, 0.001030f, -0.003365f, -0.000897f, 0.000091f, -0.001488f, -0.004674f, 0.000299f, -0.001511f, -0.001939f, 0.000257f, -0.001812f, -0.002595f, 0.024827f, 0.000906f, 0.000261f, -0.002342f, -0.004900f, 0.004425f, 0.000995f, -0.012732f, -0.016300f, - -0.022082f, -0.011588f, -0.023103f, -0.014701f, -0.007900f, -0.017102f, -0.010837f, -0.007503f, -0.008916f, -0.023106f, 0.015774f, 0.009870f, 0.000537f, 0.008297f, 0.003781f, -0.006450f, 0.028588f, 0.001716f, -0.009947f, -0.005244f, -0.019464f, -0.008398f, 0.021275f, 0.000988f, -0.017947f, -0.017939f, 0.002555f, -0.018158f, 0.005751f, 0.006298f, -0.014158f, 0.000505f, 0.004355f, 0.000947f, 0.020937f, 0.006233f, -0.009639f, 0.002065f, -0.011546f, 0.010540f, 0.001454f, 0.004636f, -0.025722f, 0.017645f, -0.008876f, 0.007318f, 0.000540f, 0.003375f, 0.004159f, 0.000603f, -0.007531f, -0.000650f, -0.010079f, -0.000039f, -0.020293f, -0.000173f, -0.021888f, 0.028720f, -0.004952f, 0.018249f, -0.013524f, -0.006360f, -0.002951f, -0.013960f, -0.007820f, 0.011180f, -0.000464f, -0.000496f, 0.008274f, 0.010743f, 0.001671f, 0.017585f, 0.015217f, 0.021161f, 0.011243f, 0.004444f, 0.002527f, 0.009570f, 0.005084f, 0.003138f, 0.003857f, 0.002113f, 0.004667f, -0.001405f, 0.007665f, 0.001280f, -0.000563f, -0.001697f, 0.005955f, 0.002377f, 0.004219f, 0.002077f, -0.002897f, 0.001983f, 0.002309f, 0.001920f, - -0.004732f, 0.008816f, 0.004724f, -0.000942f, -0.006863f, -0.000824f, -0.001095f, -0.004965f, 0.001705f, 0.000802f, 0.004986f, -0.004249f, -0.009455f, -0.012665f, 0.000039f, 0.009478f, -0.024410f, 0.000085f, -0.010500f, -0.008386f, 0.017443f, -0.028168f, -0.026603f, 0.007052f, 0.035687f, 0.001007f, 0.003477f, 0.002832f, -0.005333f, 0.019587f, 0.019018f, 0.011029f, 0.005462f, -0.005037f, -0.028842f, 0.017247f, 0.000239f, -0.023086f, -0.007387f, 0.005471f, -0.001079f, 0.000289f, 0.002462f, -0.005487f, -0.022734f, -0.001191f, 0.001026f, -0.004078f, -0.009445f, 0.006945f, 0.019891f, -0.025449f, 0.015984f, -0.009482f, -0.004718f, 0.001612f, 0.012702f, 0.041600f, -0.026750f, -0.006671f, 0.002727f, -0.002568f, -0.004821f, 0.001466f, -0.010199f, 0.003675f, -0.009202f, 0.028630f, 0.009905f, 0.005440f, 0.007967f, -0.005937f, -0.001555f, 0.015199f, -0.002281f, 0.006659f, -0.012467f, 0.022001f, 0.001067f, -0.015413f, 0.030731f, -0.019429f, 0.014200f, 0.004115f, 0.007051f, 0.022377f, -0.008788f, 0.009583f, -0.000991f, 0.000139f, 0.002780f, -0.001396f, -0.014947f, -0.007872f, -0.000873f, -0.006552f, - -0.002266f, -0.003527f, -0.009131f, -0.009331f, -0.006986f, 0.004494f, -0.007984f, 0.004754f, -0.002064f, -0.000231f, -0.006993f, -0.004749f, -0.005134f, 0.004271f, -0.009691f, 0.001086f, 0.001045f, 0.006046f, 0.009397f, -0.003542f, -0.001671f, -0.008266f, -0.007051f, 0.000608f, -0.006192f, 0.001878f, -0.001067f, -0.005460f, 0.000205f, -0.001578f, 0.002634f, 0.003460f, -0.002236f, 0.030311f, 0.002326f, 0.007869f, 0.008961f, -0.005129f, -0.017522f, -0.013752f, 0.002055f, 0.030321f, 0.017171f, 0.003691f, -0.027200f, 0.003866f, -0.014979f, 0.000042f, 0.030343f, 0.029174f, 0.014720f, 0.019705f, -0.017862f, -0.036957f, -0.019366f, -0.026650f, 0.014710f, -0.000313f, -0.004536f, -0.000152f, -0.020170f, -0.006027f, 0.006189f, -0.003834f, -0.007688f, -0.007493f, 0.021491f, -0.001443f, 0.005820f, -0.006172f, 0.014078f, 0.002940f, -0.008182f, -0.017174f, -0.013190f, 0.038921f, -0.001715f, -0.008865f, 0.012416f, -0.022324f, 0.006948f, -0.012800f, -0.038949f, -0.008784f, -0.005099f, 0.011723f, 0.004476f, 0.010292f, 0.003250f, 0.015343f, 0.000541f, 0.001014f, 0.008489f, -0.038088f, -0.006044f, -0.010273f, - -0.002752f, 0.003636f, 0.021804f, 0.024071f, 0.008661f, -0.006372f, -0.016672f, -0.021914f, -0.007373f, -0.012918f, 0.002720f, -0.006456f, -0.006849f, -0.015113f, 0.022486f, 0.016170f, 0.006563f, 0.020649f, -0.004966f, 0.008209f, 0.012668f, -0.008152f, 0.007532f, -0.005275f, 0.001622f, 0.007490f, -0.002333f, -0.005074f, -0.002116f, -0.002832f, -0.002001f, -0.000242f, 0.000477f, 0.007417f, 0.000268f, 0.000824f, 0.002267f, -0.004229f, -0.011545f, 0.000393f, -0.002717f, -0.001567f, -0.002116f, -0.006848f, -0.000801f, 0.002183f, 0.010207f, 0.008339f, -0.004782f, 0.001105f, 0.006706f, -0.001505f, 0.001520f, -0.002502f, 0.001515f, 0.006382f, 0.000783f, 0.007009f, -0.043964f, -0.028743f, -0.006650f, -0.010463f, 0.022471f, 0.015438f, -0.003677f, 0.038692f, -0.039090f, -0.009109f, -0.014748f, 0.041327f, 0.019832f, -0.013571f, 0.015242f, 0.005804f, -0.016073f, 0.028545f, -0.031463f, 0.015591f, -0.014484f, 0.002471f, 0.003442f, -0.010495f, 0.027566f, -0.019356f, 0.016932f, -0.008055f, -0.040531f, -0.006715f, 0.028332f, -0.017135f, -0.027669f, 0.000390f, -0.003440f, -0.041407f, -0.007733f, 0.016631f, - 0.007060f, 0.022101f, 0.016256f, -0.004668f, 0.039852f, -0.009523f, -0.012257f, -0.019583f, -0.018233f, -0.017636f, 0.010947f, 0.014888f, -0.012815f, -0.014457f, 0.004783f, -0.012539f, 0.016715f, -0.004592f, 0.009077f, -0.006776f, -0.010349f, -0.007944f, -0.000220f, -0.023438f, 0.006357f, 0.016913f, -0.003946f, 0.007318f, 0.010167f, 0.012010f, 0.021650f, -0.015486f, 0.006968f, 0.016881f, -0.002170f, -0.035949f, -0.038265f, 0.004216f, -0.003634f, 0.002845f, -0.014003f, -0.005817f, 0.002824f, -0.013862f, -0.025147f, -0.007685f, 0.018982f, 0.015398f, -0.007564f, -0.003068f, 0.005842f, 0.005203f, -0.002995f, -0.006114f, 0.000455f, -0.000811f, -0.009889f, -0.003670f, 0.010508f, -0.003029f, 0.008442f, 0.001518f, -0.002630f, -0.005182f, 0.006780f, 0.006680f, 0.007847f, 0.000933f, -0.004411f, 0.004549f, -0.011784f, -0.007077f, 0.005803f, 0.002702f, 0.004978f, 0.009163f, -0.004692f, 0.001890f, 0.003595f, 0.004461f, 0.000851f, -0.005393f, -0.007739f, 0.003444f, -0.004218f, -0.002593f, 0.031254f, -0.020165f, -0.050416f, -0.000046f, 0.035501f, 0.045386f, 0.008278f, -0.017096f, -0.012882f, 0.004428f, - -0.008400f, -0.007475f, 0.019812f, 0.020087f, -0.010222f, 0.019373f, -0.025139f, -0.003308f, 0.017717f, -0.009026f, 0.021506f, 0.009976f, -0.003260f, -0.030183f, 0.011206f, -0.007263f, -0.007353f, 0.001275f, -0.002475f, -0.003448f, 0.040815f, -0.020445f, 0.020716f, 0.034921f, 0.024164f, 0.012580f, 0.000220f, -0.023516f, 0.023025f, -0.013284f, 0.021927f, -0.012768f, 0.004885f, -0.024711f, -0.004943f, -0.023371f, -0.015408f, 0.003228f, -0.021737f, -0.006227f, -0.007728f, -0.001164f, 0.018916f, -0.022838f, -0.019634f, -0.007363f, -0.011374f, -0.004861f, -0.019465f, -0.025136f, -0.031334f, 0.002854f, 0.023896f, -0.001961f, -0.015559f, 0.002295f, 0.004915f, 0.018883f, -0.021323f, -0.012363f, -0.006962f, -0.000825f, 0.014151f, -0.000032f, 0.003803f, -0.014833f, -0.006289f, 0.007308f, 0.028912f, 0.012782f, 0.019916f, 0.023134f, 0.030216f, 0.011581f, -0.004312f, -0.010951f, 0.007235f, 0.009149f, 0.013254f, 0.005566f, 0.001131f, -0.000139f, 0.018292f, 0.006460f, -0.006981f, 0.001331f, 0.010201f, 0.004047f, 0.002368f, -0.006900f, -0.006760f, -0.004847f, -0.009349f, 0.000506f, 0.008579f, 0.008254f, - 0.001713f, -0.005072f, 0.012024f, 0.006915f, 0.015267f, 0.007941f, 0.000333f, 0.010215f, 0.000008f, -0.008102f, 0.011682f, -0.000186f, -0.001724f, -0.004595f, 0.002216f, -0.002918f, -0.000358f, 0.010238f, 0.005946f, -0.084131f, -0.039994f, 0.028073f, -0.068702f, -0.047617f, -0.003074f, -0.028022f, -0.019224f, 0.020975f, 0.023971f, 0.007358f, -0.004413f, 0.008698f, 0.068602f, -0.008394f, 0.010969f, 0.026431f, 0.030094f, -0.031269f, -0.016245f, -0.014796f, 0.025324f, 0.027676f, 0.013884f, 0.005117f, 0.025888f, -0.007581f, -0.012985f, 0.018218f, 0.035039f, 0.002530f, 0.011318f, 0.035683f, 0.026289f, 0.021481f, -0.016007f, 0.006795f, 0.010793f, -0.000024f, -0.000593f, 0.022927f, -0.007507f, -0.000312f, -0.002320f, 0.015332f, 0.000568f, -0.024973f, -0.016754f, 0.005074f, -0.033985f, 0.025802f, -0.007552f, 0.056940f, 0.002264f, 0.031258f, 0.006185f, -0.001300f, -0.018345f, -0.000818f, 0.007290f, -0.023990f, -0.012384f, -0.028034f, -0.003553f, 0.014443f, 0.019581f, -0.008474f, -0.045731f, 0.016635f, -0.007269f, 0.015671f, -0.016399f, -0.019519f, 0.014356f, -0.029552f, -0.022669f, 0.044216f, - 0.000661f, 0.020401f, -0.004160f, -0.019045f, 0.005309f, 0.026072f, 0.006336f, 0.020750f, -0.033499f, -0.001592f, -0.002268f, -0.005480f, -0.028798f, 0.028194f, -0.016766f, 0.002136f, -0.003279f, 0.003468f, -0.010675f, -0.000972f, 0.005916f, 0.008694f, -0.007121f, 0.018500f, -0.004532f, -0.005811f, -0.010781f, -0.009130f, -0.009301f, 0.008938f, -0.003570f, -0.006428f, -0.002718f, 0.002429f, -0.007071f, 0.012969f, -0.003835f, 0.014669f, -0.009118f, 0.006283f, 0.002276f, 0.005920f, 0.009466f, 0.002020f, 0.033962f, -0.015711f, -0.039628f, 0.016776f, -0.020771f, 0.008480f, -0.000680f, -0.019805f, 0.036168f, -0.048732f, -0.002160f, -0.058795f, 0.001277f, 0.047238f, 0.066148f, 0.031216f, -0.011540f, 0.030502f, -0.002480f, -0.004401f, 0.003144f, -0.005346f, 0.016152f, -0.002163f, -0.031182f, 0.001672f, -0.043274f, 0.015039f, -0.013497f, -0.009761f, 0.028768f, -0.000731f, -0.033310f, -0.037215f, 0.008445f, 0.004977f, -0.018624f, -0.015534f, 0.027615f, -0.040331f, -0.000367f, -0.008252f, 0.014033f, -0.010930f, -0.008868f, -0.032293f, -0.013817f, -0.014337f, -0.006151f, 0.023032f, -0.027643f, 0.009751f, - -0.003503f, -0.004912f, 0.003458f, 0.009846f, -0.046689f, -0.005097f, 0.006160f, -0.004256f, 0.017069f, -0.014808f, -0.020716f, -0.009526f, -0.052226f, -0.023120f, -0.022854f, 0.000940f, 0.022082f, 0.033327f, -0.015988f, 0.025181f, -0.043574f, 0.069451f, 0.004624f, -0.012656f, 0.036264f, -0.043345f, 0.036398f, 0.016176f, -0.009925f, 0.000597f, 0.012045f, 0.000804f, 0.005689f, 0.033124f, -0.014388f, 0.014037f, -0.007861f, 0.010108f, 0.016452f, 0.016178f, 0.019831f, -0.007062f, 0.016697f, 0.003796f, 0.002376f, -0.002978f, -0.022577f, 0.000669f, -0.016065f, 0.007147f, 0.010175f, -0.003637f, -0.002646f, 0.002804f, 0.002116f, 0.011025f, 0.005026f, -0.008320f, 0.012015f, -0.000348f, 0.001280f, 0.014839f, 0.010125f, 0.005821f, 0.027141f, -0.022623f, 0.000015f, 0.009790f, -0.000123f, -0.017816f, 0.004125f, -0.011400f, -0.010726f, 0.042748f, 0.002474f, -0.030433f, -0.000629f, -0.004558f, 0.019856f, 0.013112f, -0.018548f, 0.021543f, 0.000446f, -0.047925f, -0.052203f, -0.004937f, -0.015688f, 0.013109f, -0.002192f, -0.018382f, -0.047048f, -0.041013f, 0.022462f, -0.034883f, -0.007794f, 0.002293f, - 0.011116f, 0.002698f, 0.033633f, 0.002902f, -0.016929f, 0.022590f, -0.002941f, 0.003383f, 0.020825f, -0.027281f, -0.001748f, 0.006033f, -0.027889f, 0.017041f, 0.023260f, 0.010222f, 0.020703f, 0.010892f, 0.032038f, 0.008838f, 0.023337f, -0.032616f, -0.010170f, -0.005113f, -0.043877f, -0.000126f, -0.004703f, 0.018498f, -0.002894f, 0.021189f, -0.003466f, -0.025382f, -0.017311f, -0.001202f, -0.040580f, 0.017928f, 0.001169f, -0.007778f, 0.023803f, 0.015166f, 0.019781f, 0.020596f, 0.006314f, -0.002341f, 0.017279f, -0.054968f, 0.016755f, 0.007055f, 0.024710f, -0.009621f, -0.038846f, 0.024611f, -0.005831f, 0.042212f, -0.062042f, -0.021985f, -0.043436f, 0.029872f, -0.012636f, -0.039845f, -0.044509f, -0.029229f, -0.013141f, 0.014319f, 0.011220f, -0.012106f, -0.012622f, -0.006532f, -0.000763f, -0.013382f, -0.005079f, 0.022846f, 0.003566f, -0.002056f, 0.006714f, 0.005088f, 0.004207f, 0.012457f, -0.009531f, -0.012560f, -0.000285f, -0.021907f, 0.000032f, -0.007617f, -0.003110f, -0.014102f, -0.003803f, -0.019287f, -0.017339f, 0.022100f, -0.012260f, -0.000682f, 0.007424f, 0.010701f, -0.001838f, 0.018562f, - -0.015330f, -0.004856f, 0.007656f, -0.017986f, -0.004937f, 0.021278f, 0.007628f, 0.004846f, -0.007225f, -0.010838f, 0.008200f, 0.029075f, 0.026952f, 0.098831f, 0.074660f, 0.010030f, 0.021588f, 0.006180f, 0.057347f, 0.001482f, 0.027874f, -0.026186f, 0.067940f, -0.027044f, 0.061608f, -0.002876f, 0.039329f, -0.004690f, 0.027736f, -0.027763f, 0.006594f, 0.013787f, -0.015231f, -0.005064f, -0.008214f, -0.006490f, 0.018334f, 0.000336f, -0.015943f, -0.021975f, -0.033075f, -0.042085f, -0.020250f, -0.007173f, 0.000194f, 0.013109f, -0.035429f, 0.014891f, -0.019523f, -0.030130f, -0.006301f, -0.022042f, 0.009969f, -0.005449f, -0.046075f, -0.011051f, -0.023450f, -0.027836f, -0.029170f, 0.026351f, 0.035295f, -0.074005f, 0.016725f, 0.006469f, 0.020720f, 0.007227f, -0.009354f, 0.044616f, 0.025123f, 0.023301f, -0.061879f, -0.027776f, -0.000838f, 0.015155f, 0.051187f, 0.001824f, -0.006944f, 0.002386f, 0.043365f, 0.038876f, -0.036943f, 0.041609f, 0.003081f, 0.009270f, -0.007065f, 0.024377f, -0.052641f, -0.018536f, 0.054247f, -0.008426f, -0.003528f, -0.020994f, 0.036176f, 0.023540f, -0.018702f, -0.031756f, - -0.005454f, -0.001461f, 0.003221f, 0.000372f, -0.006762f, -0.029612f, -0.010084f, 0.022909f, 0.030182f, 0.018603f, -0.016645f, -0.004508f, -0.004857f, -0.014376f, 0.004656f, 0.004670f, 0.013972f, -0.003169f, -0.009824f, 0.008624f, 0.003407f, 0.005158f, 0.027345f, 0.003607f, -0.007563f, -0.010484f, 0.004738f, 0.009702f, 0.021311f, 0.004171f, -0.020635f, -0.011156f, -0.015481f, 0.006062f, 0.007977f, -0.017209f, -0.036383f, 0.011685f, -0.002926f, -0.006230f, -0.012678f, -0.022544f, 0.027235f, -0.010672f, 0.023743f, 0.036882f, -0.041508f, 0.012988f, -0.023680f, 0.069425f, -0.040984f, 0.039253f, 0.036202f, -0.013683f, -0.064710f, -0.037649f, -0.004189f, -0.017182f, -0.001842f, -0.029651f, -0.047114f, -0.062747f, -0.035905f, -0.041765f, 0.018138f, -0.035716f, 0.014987f, 0.004300f, -0.004019f, -0.003655f, -0.029358f, -0.009063f, -0.030162f, 0.008923f, 0.027132f, 0.035452f, 0.000740f, -0.009904f, -0.030962f, -0.007365f, 0.003190f, -0.018430f, 0.005372f, -0.025437f, -0.016507f, -0.003608f, -0.025197f, 0.020057f, -0.022242f, -0.065922f, 0.002549f, -0.002002f, -0.021685f, 0.028153f, 0.022124f, 0.032074f, - 0.012392f, 0.025246f, 0.051096f, 0.008619f, -0.050633f, -0.011538f, 0.023972f, -0.011117f, -0.042071f, 0.023608f, 0.033528f, 0.011308f, -0.000135f, -0.056997f, 0.051061f, -0.002387f, 0.041695f, -0.034473f, 0.042223f, 0.103263f, -0.009033f, -0.002912f, -0.050314f, 0.027203f, -0.040909f, 0.034658f, 0.017688f, -0.022521f, -0.004945f, -0.055684f, 0.012950f, -0.030339f, 0.000586f, 0.021513f, 0.021601f, -0.000700f, -0.014300f, -0.012379f, 0.015435f, 0.037794f, -0.018205f, -0.002870f, 0.005912f, -0.016366f, -0.004675f, -0.005110f, 0.008034f, -0.001740f, 0.015963f, -0.007161f, -0.017979f, -0.009957f, 0.005603f, 0.014370f, -0.017794f, -0.005480f, -0.000152f, 0.002569f, 0.013448f, 0.002988f, -0.004376f, 0.004865f, -0.030279f, -0.017306f, -0.001705f, -0.002669f, 0.006492f, 0.001933f, 0.002651f, -0.000422f, -0.005065f, 0.015684f, -0.000633f, 0.011739f, -0.000545f, -0.003177f, -0.011019f, -0.007534f, -0.081289f, 0.027438f, -0.106585f, 0.070183f, 0.025047f, -0.018312f, 0.074797f, -0.007319f, -0.038295f, 0.066343f, -0.025723f, -0.003733f, 0.013919f, 0.023135f, 0.061302f, 0.002395f, -0.005131f, 0.043269f, - 0.018282f, 0.036322f, 0.044461f, 0.032975f, 0.002929f, 0.023022f, 0.003531f, -0.002417f, -0.024539f, 0.015538f, 0.023276f, 0.005569f, -0.001523f, -0.026441f, 0.012537f, -0.024773f, 0.029609f, 0.029256f, 0.004991f, 0.034583f, -0.021452f, 0.022812f, 0.035833f, 0.022863f, -0.048596f, -0.052183f, 0.061154f, -0.005991f, 0.038217f, 0.059431f, 0.001317f, 0.000016f, -0.006283f, 0.011659f, 0.034278f, 0.032616f, 0.003324f, 0.027094f, -0.000067f, -0.030967f, -0.038707f, -0.057233f, 0.000927f, -0.023247f, 0.000742f, 0.032421f, 0.030291f, -0.053528f, 0.004516f, 0.020761f, -0.047024f, 0.007799f, 0.065235f, -0.028320f, -0.032660f, 0.035066f, -0.037757f, 0.008691f, -0.010667f, 0.068511f, -0.019991f, 0.042328f, -0.021068f, 0.035581f, -0.003418f, 0.013239f, 0.028341f, -0.044720f, -0.013706f, 0.017076f, -0.029718f, 0.021765f, -0.026681f, -0.007330f, -0.015102f, -0.013655f, 0.001841f, -0.007313f, -0.012276f, 0.007219f, 0.020284f, -0.010197f, 0.005486f, 0.007495f, -0.017749f, 0.003192f, 0.002335f, -0.004471f, -0.012575f, -0.005076f, -0.009731f, -0.028659f, -0.011495f, 0.006264f, -0.037830f, 0.013771f, - -0.019427f, 0.014681f, -0.008870f, -0.003538f, -0.026554f, -0.013709f, 0.000243f, 0.007452f, -0.011770f, -0.025678f, 0.004224f, 0.001909f, 0.013780f, 0.006110f, -0.000046f, 0.016958f, 0.013395f, 0.001599f, 0.011496f, 0.007974f, -0.036967f, 0.008506f, -0.042863f, 0.088755f, 0.021932f, -0.047068f, 0.018201f, -0.010765f, -0.041887f, -0.049385f, -0.050132f, 0.015117f, -0.002272f, 0.044632f, 0.066079f, 0.031873f, 0.016165f, -0.007767f, 0.022079f, 0.002303f, -0.082698f, 0.036569f, 0.086306f, -0.056168f, -0.059057f, -0.050978f, -0.072232f, 0.052584f, -0.071126f, 0.032299f, 0.000635f, -0.008723f, -0.000298f, -0.022968f, -0.027421f, 0.035582f, -0.073195f, 0.075601f, 0.043421f, 0.010201f, -0.048116f, -0.036281f, -0.031825f, 0.006946f, 0.012729f, -0.031037f, -0.004198f, -0.022869f, 0.052045f, 0.023723f, -0.009265f, -0.001387f, 0.021459f, 0.004981f, 0.024474f, -0.042279f, -0.016724f, -0.003886f, -0.007436f, -0.039316f, -0.027715f, 0.023646f, -0.075044f, -0.044140f, 0.005789f, 0.088004f, 0.042443f, -0.026584f, -0.001737f, -0.066591f, 0.032541f, 0.102047f, 0.003653f, -0.021737f, -0.015267f, -0.047946f, - 0.062793f, -0.020013f, -0.024204f, -0.001949f, 0.037233f, 0.023526f, -0.032226f, -0.028930f, -0.010362f, 0.032928f, -0.008710f, 0.009755f, -0.002528f, -0.025858f, -0.008409f, 0.041675f, 0.023799f, 0.003555f, -0.019245f, -0.002924f, -0.002902f, 0.032530f, 0.026387f, 0.013343f, 0.011929f, -0.038253f, 0.014706f, 0.013977f, -0.005733f, 0.008863f, -0.005994f, -0.005343f, -0.033615f, -0.003425f, -0.001711f, -0.004615f, -0.010721f, 0.009164f, 0.012342f, 0.006621f, -0.039543f, -0.033888f, -0.016764f, 0.000030f, 0.002413f, -0.039755f, 0.014234f, 0.050295f, 0.010112f, -0.013770f, 0.000944f, 0.007918f, 0.000159f, -0.021616f, -0.016582f, -0.005542f, 0.006802f, 0.000358f, -0.040953f, -0.028140f, -0.082122f, 0.018253f, -0.060436f, -0.090512f, 0.021593f, 0.050427f, 0.012622f, 0.013715f, -0.038143f, -0.047813f, -0.012212f, -0.070957f, -0.034712f, 0.018826f, -0.059305f, 0.094087f, 0.018553f, -0.022840f, 0.020462f, -0.044763f, -0.088624f, -0.029608f, -0.067715f, 0.011002f, 0.020150f, -0.024741f, -0.048078f, -0.024330f, -0.029552f, 0.026276f, -0.035192f, -0.012761f, -0.004317f, 0.040348f, -0.028764f, -0.005135f, - -0.013298f, 0.010433f, 0.017077f, 0.003221f, -0.011721f, 0.041600f, 0.054485f, 0.034809f, -0.027457f, -0.022590f, -0.079417f, -0.044218f, -0.017929f, 0.021250f, 0.134219f, -0.022752f, 0.001869f, 0.059752f, -0.005119f, 0.025516f, -0.030170f, -0.031597f, -0.025350f, 0.028401f, -0.075316f, 0.000675f, -0.009732f, -0.000867f, 0.065721f, -0.028678f, 0.099338f, 0.008853f, 0.075351f, -0.095583f, -0.028400f, 0.027755f, -0.001607f, -0.041438f, -0.034680f, 0.077710f, -0.079742f, -0.065966f, 0.095559f, 0.016844f, 0.083008f, -0.032801f, -0.005211f, -0.005696f, 0.026915f, 0.011431f, -0.007291f, 0.028209f, 0.028511f, -0.001485f, 0.013567f, 0.008928f, 0.003279f, -0.009757f, -0.017520f, -0.004030f, -0.011492f, -0.015764f, 0.015004f, 0.008568f, -0.013074f, 0.009608f, -0.028913f, -0.002865f, 0.020945f, 0.036057f, -0.002584f, -0.022709f, -0.001413f, -0.025855f, 0.015103f, 0.024770f, -0.016965f, -0.014215f, 0.014229f, 0.016511f, -0.036609f, 0.013200f, 0.001949f, 0.024072f, -0.015383f, -0.016214f, 0.000143f, 0.007610f, 0.011547f, -0.041590f, 0.007078f, -0.017648f, 0.033290f, -0.011542f, -0.007413f, -0.004818f, - -0.082079f, 0.039210f, 0.060392f, -0.043662f, -0.035850f, -0.012225f, -0.039383f, -0.047513f, 0.012813f, 0.014125f, 0.037076f, 0.001676f, 0.032416f, 0.057514f, 0.060092f, 0.039835f, 0.013899f, -0.043939f, 0.004453f, 0.022894f, 0.030468f, 0.046649f, 0.000631f, -0.024114f, -0.034966f, -0.013248f, 0.047430f, -0.019391f, 0.018747f, 0.041087f, 0.004198f, 0.080724f, 0.009460f, -0.051525f, 0.044686f, 0.043969f, 0.012845f, 0.018953f, 0.040969f, 0.006509f, 0.003627f, -0.047303f, 0.102324f, -0.108914f, -0.079879f, -0.092914f, -0.030576f, 0.019195f, -0.054425f, 0.028022f, 0.061108f, -0.018101f, 0.006154f, 0.053688f, 0.017352f, -0.058250f, -0.020018f, -0.045094f, -0.006268f, 0.003309f, 0.003159f, 0.051895f, 0.051268f, -0.011793f, -0.012695f, 0.032574f, 0.078844f, 0.013589f, 0.064905f, -0.054627f, 0.057719f, -0.025297f, 0.019274f, -0.011574f, -0.036480f, -0.025609f, -0.005601f, 0.025955f, 0.016166f, 0.064087f, -0.082822f, 0.042174f, -0.032642f, -0.020609f, -0.015965f, 0.030654f, -0.014415f, -0.002998f, 0.006910f, -0.033419f, 0.021081f, -0.016422f, -0.000907f, -0.025412f, 0.008036f, -0.005258f, - 0.001334f, -0.028614f, 0.004447f, -0.002768f, 0.005909f, -0.002948f, -0.030807f, 0.012224f, -0.017450f, -0.016270f, -0.007096f, 0.022949f, 0.027019f, 0.029411f, -0.025168f, 0.050693f, -0.038123f, -0.011777f, 0.003138f, -0.004365f, -0.028113f, -0.015459f, -0.001408f, -0.021484f, 0.006308f, -0.001989f, -0.000689f, -0.002773f, -0.020771f, 0.002457f, -0.003269f, -0.001214f, -0.046523f, -0.093573f, -0.094181f, -0.068173f, 0.013957f, 0.174883f, 0.044180f, -0.024158f, -0.052912f, -0.126427f, -0.177815f, 0.040106f, 0.073607f, 0.088360f, -0.018628f, 0.007626f, -0.052160f, -0.090733f, 0.026123f, 0.016430f, 0.029484f, 0.004226f, -0.076090f, -0.023280f, 0.018555f, -0.015334f, -0.003031f, -0.014433f, 0.099076f, 0.086983f, 0.058652f, -0.005417f, -0.042571f, -0.072296f, -0.047857f, -0.043283f, 0.067665f, -0.011269f, 0.049504f, 0.022351f, 0.023165f, -0.030509f, -0.164711f, -0.113434f, 0.055951f, -0.089271f, -0.030483f, 0.189937f, 0.130601f, 0.098102f, -0.074448f, 0.053705f, -0.051577f, 0.003708f, 0.003733f, 0.027511f, 0.080551f, 0.141969f, -0.054423f, -0.005132f, -0.093698f, -0.075737f, -0.123990f, 0.013382f, - -0.005163f, -0.133528f, -0.032017f, 0.085889f, 0.032078f, 0.059924f, 0.081279f, 0.146472f, -0.106808f, -0.064156f, 0.008423f, -0.087225f, -0.011285f, 0.048642f, 0.114100f, 0.057949f, 0.017767f, -0.069752f, -0.066851f, 0.044996f, -0.019081f, 0.067184f, 0.059085f, -0.016066f, 0.027032f, 0.010788f, -0.011452f, -0.022485f, -0.013106f, -0.008547f, 0.020015f, 0.005722f, -0.000595f, 0.006887f, -0.002172f, 0.009600f, 0.000176f, 0.042461f, 0.034912f, 0.055380f, 0.009901f, -0.030617f, -0.064314f, -0.052581f, 0.021239f, 0.049741f, 0.057015f, -0.007291f, -0.036629f, -0.147824f, -0.076030f, -0.070051f, 0.001541f, 0.007349f, 0.014949f, -0.000663f, 0.010848f, -0.016866f, -0.000240f, -0.024896f, -0.022303f, 0.031087f, 0.027377f, 0.015869f, 0.015985f, 0.007977f, 0.003476f, 0.006941f, 0.043263f, -0.070326f, -0.232775f, -0.216605f, -0.124357f, -0.135223f, -0.033755f, 0.224153f, 0.113859f, 0.230622f, 0.204630f, 0.320801f, 0.229080f, 0.197076f, 0.031754f, -0.085573f, -0.193478f, -0.309970f, -0.263274f, -0.265109f, -0.138604f, -0.066519f, -0.015671f, 0.002210f, 0.007570f, 0.054730f, 0.073093f, 0.184475f, - 0.111978f, 0.217703f, 0.141762f, 0.186619f, 0.067462f, 0.180324f, 0.062588f, 0.044125f, 0.042619f, -0.010712f, -0.050677f, -0.122047f, -0.140917f, -0.261477f, -0.179194f, -0.331342f, -0.262232f, -0.402151f, -0.238502f, -0.189175f, -0.045717f, 0.110550f, 0.058717f, 0.009963f, 0.110265f, 0.235860f, 0.314960f, 0.413071f, 0.492264f, 0.421318f, 0.307681f, 0.383828f, 0.316586f, 0.177560f, 0.079760f, -0.019632f, -0.132108f, -0.305422f, -0.362895f, -0.485822f, -0.627396f, -0.725912f, -0.655206f, -0.577330f, -0.411012f, -0.280497f, 0.085879f, 0.270683f, 0.329740f, 0.507984f, 0.423993f, 0.529774f, 0.556596f, 0.546180f, 0.629450f, 0.413361f, 0.107273f, -0.103930f, -0.201838f, -0.249607f, -0.161776f, -0.233753f, -0.200589f, -0.233934f, -0.316835f, -0.320257f, -0.373074f, -0.220726f, -0.172028f, -0.146453f, -0.082011f, -0.004835f, 0.021925f, 0.090738f, 0.245843f, 0.259295f, 0.367850f, 0.320443f, 0.420717f, 0.309611f, 0.206696f, 0.213542f, 0.081268f, -0.055772f, -0.091419f, -0.405660f, -0.523332f, -0.487013f, -0.430024f, -0.251515f, -0.197641f, -0.107798f, 0.009407f, 0.109975f, 0.167166f, 0.227612f, - 0.271340f, 0.323039f, 0.306404f, 0.290052f, 0.255051f, 0.142948f, -0.000559f, -0.071733f, -0.168226f, -0.175549f, -0.150706f, -0.122519f, -0.128137f, -0.129166f, -0.101815f, -0.072423f, -0.043044f, -0.017112f, -0.016076f, -0.010582f, 0.004417f, -0.010970f, -0.013788f, 0.019870f, 0.043324f, 0.049371f, 0.032707f, 0.025410f, 0.038991f, 0.049881f, 0.039200f, 0.047594f, 0.062561f, 0.076384f, 0.064983f, 0.015749f, -0.007693f, -0.002733f, -0.003259f, -0.021075f, -0.018254f, -0.012758f, -0.029404f, -0.048270f, -0.060796f, -0.057696f, -0.050808f, -0.040841f, -0.033893f, -0.019498f, -0.007762f, -0.004352f, -0.001928f, 0.009301f, 0.018777f, 0.024918f, 0.026997f, 0.028817f, 0.023413f, 0.019272f, 0.018756f, 0.012283f, 0.002715f, 0.006088f, 0.007461f, 0.002736f, -0.002870f, -0.004533f, -0.000223f, 0.008961f, 0.012463f, 0.010831f, 0.009391f, 0.013947f, 0.011015f, 0.003236f, -0.003758f, -0.008027f, -0.011503f, -0.014432f, -0.023969f, -0.029054f, -0.027532f, -0.029036f, -0.034503f, -0.026789f, -0.010231f, 0.001124f, 0.003669f, 0.010035f, 0.018584f, 0.023472f, 0.021017f, 0.021034f, 0.023303f, 0.021449f, - 0.015819f, 0.011317f, 0.006422f, 0.003140f, -0.000660f, -0.003507f, -0.003934f, -0.003546f, -0.004361f, -0.005804f, -0.006205f, -0.005352f, -0.004724f, -0.004307f, -0.003646f, -0.002701f, -0.002041f, -0.001528f, -0.001261f, -0.000970f}, - {-0.022232f, 0.008364f, -0.012631f, 0.006954f, -0.007097f, -0.014627f, -0.025330f, 0.004552f, 0.000825f, 0.006468f, 0.005692f, -0.001694f, -0.001796f, 0.001997f, 0.015427f, -0.010826f, -0.019390f, 0.006528f, -0.007982f, -0.012961f, 0.000298f, -0.001868f, 0.008123f, 0.002951f, 0.005813f, -0.005782f, -0.001390f, -0.003765f, 0.013147f, -0.003491f, -0.005226f, -0.004582f, -0.002245f, -0.003085f, -0.005192f, -0.004565f, -0.003160f, 0.002665f, 0.001168f, 0.001786f, 0.000504f, 0.003480f, 0.005610f, 0.002893f, -0.004889f, -0.014699f, -0.000093f, -0.010199f, 0.001546f, -0.000626f, -0.004628f, 0.006681f, 0.000500f, 0.000118f, -0.014670f, -0.005942f, 0.002019f, -0.001083f, 0.005189f, 0.000447f, 0.004621f, -0.004202f, 0.001942f, -0.001782f, 0.009124f, -0.003148f, 0.004824f, -0.008054f, -0.008049f, -0.010157f, 0.000547f, -0.002356f, -0.002945f, 0.000139f, -0.003537f, 0.000008f, -0.004133f, 0.000957f, 0.000219f, -0.001684f, -0.006409f, 0.000716f, 0.000701f, 0.003779f, 0.003293f, 0.000105f, 0.003505f, -0.000294f, -0.002670f, -0.000815f, -0.001249f, 0.001431f, -0.000003f, 0.000266f, 0.001983f, 0.001500f, - -0.000228f, 0.001863f, -0.001175f, 0.000443f, -0.015948f, -0.003276f, -0.002075f, -0.004504f, -0.002023f, -0.005432f, 0.005312f, -0.002134f, -0.001839f, -0.000430f, 0.000137f, -0.000297f, -0.003826f, 0.014181f, 0.009127f, 0.014821f, -0.006905f, 0.014753f, -0.008702f, -0.006094f, 0.005748f, 0.016335f, -0.000339f, -0.009862f, -0.014578f, -0.010462f, -0.002000f, 0.011653f, 0.004586f, 0.003961f, 0.005176f, -0.005085f, 0.007929f, 0.001033f, 0.005928f, -0.002861f, -0.013288f, 0.003645f, -0.009191f, -0.006280f, -0.006446f, -0.001512f, -0.016877f, -0.000758f, 0.000807f, -0.007033f, 0.015786f, -0.002969f, -0.005092f, -0.006318f, -0.000151f, 0.001763f, -0.006754f, 0.000255f, -0.008286f, -0.003096f, 0.000233f, -0.003394f, 0.011347f, 0.000376f, -0.003053f, 0.006381f, 0.004078f, 0.010534f, 0.004225f, 0.012659f, 0.003113f, 0.010356f, -0.011781f, 0.003087f, 0.009418f, -0.003194f, -0.008417f, -0.011559f, -0.000228f, -0.000879f, -0.002318f, 0.002880f, 0.003407f, -0.002430f, 0.009027f, -0.007738f, 0.002996f, 0.003184f, -0.005790f, 0.004257f, 0.000947f, -0.004201f, 0.002264f, -0.001035f, 0.000890f, -0.003934f, - 0.001229f, 0.000531f, 0.000734f, -0.000409f, -0.000283f, 0.002000f, 0.000505f, 0.003670f, -0.000742f, 0.000360f, 0.018019f, -0.008278f, -0.006385f, 0.001746f, -0.004095f, -0.003064f, 0.009007f, -0.007123f, 0.008671f, 0.003942f, 0.000131f, 0.004394f, -0.005913f, -0.005640f, -0.010325f, -0.011124f, 0.014510f, 0.006824f, 0.005067f, 0.007728f, -0.005155f, -0.003466f, -0.003807f, 0.018337f, -0.007175f, 0.020077f, -0.000732f, -0.005191f, -0.004902f, -0.010731f, -0.011523f, -0.013984f, -0.000909f, -0.003571f, 0.002471f, 0.013386f, -0.001193f, -0.006369f, -0.018803f, 0.000589f, 0.014858f, 0.021810f, -0.010309f, 0.005582f, 0.003988f, -0.005632f, -0.004991f, 0.005640f, 0.020687f, -0.005013f, 0.003225f, -0.001846f, -0.003062f, -0.002011f, 0.009907f, 0.014280f, -0.010900f, -0.005966f, 0.004418f, 0.018744f, 0.003109f, 0.013256f, -0.010918f, -0.010167f, -0.000583f, -0.001740f, 0.003785f, 0.002787f, -0.000271f, 0.001110f, 0.001925f, -0.004972f, 0.002260f, 0.006019f, 0.004651f, -0.003755f, 0.012001f, -0.003137f, 0.007534f, -0.004020f, -0.004170f, 0.004447f, 0.003777f, 0.004013f, 0.000895f, 0.004188f, - 0.000793f, -0.006322f, -0.004269f, 0.001147f, -0.000324f, 0.002235f, -0.001198f, 0.003374f, -0.000175f, 0.001853f, -0.001887f, -0.000416f, -0.000188f, -0.000987f, -0.002192f, -0.000267f, -0.001345f, -0.000402f, -0.001613f, -0.001431f, 0.003378f, -0.000118f, -0.001656f, 0.003621f, 0.000051f, -0.001956f, 0.029775f, -0.020383f, -0.004463f, -0.008441f, 0.002377f, 0.007965f, 0.014330f, -0.014222f, 0.009840f, -0.003680f, -0.015047f, -0.024379f, -0.004951f, -0.010329f, 0.001790f, -0.002283f, -0.010274f, -0.005227f, 0.005753f, 0.006082f, 0.019155f, 0.010650f, 0.009776f, 0.001056f, 0.003086f, -0.009842f, -0.006637f, 0.015403f, 0.011815f, 0.008035f, 0.003764f, 0.007421f, 0.001644f, 0.000126f, -0.012746f, -0.018069f, 0.012204f, -0.004773f, -0.012130f, -0.005756f, -0.007596f, 0.006551f, -0.006679f, 0.015475f, 0.003637f, -0.008815f, -0.004247f, -0.006736f, -0.005813f, 0.007594f, 0.011405f, -0.000905f, 0.007717f, -0.005529f, -0.006154f, 0.000111f, 0.001621f, -0.005898f, -0.002227f, 0.008965f, 0.000202f, -0.003606f, -0.004279f, 0.004915f, 0.005504f, -0.000619f, 0.006633f, 0.000975f, -0.004520f, 0.015440f, - -0.002083f, 0.001761f, 0.000850f, -0.018451f, 0.007339f, 0.005876f, 0.009726f, 0.006330f, -0.006664f, -0.001484f, -0.016587f, -0.007615f, -0.015210f, -0.005562f, -0.006751f, 0.000123f, 0.001585f, -0.010044f, 0.000567f, -0.002381f, 0.000157f, 0.004367f, -0.001402f, -0.001806f, -0.000206f, -0.002740f, 0.000632f, -0.001370f, 0.001291f, -0.001665f, -0.003632f, -0.001846f, -0.000817f, -0.006268f, -0.000435f, -0.000241f, 0.001452f, -0.000343f, 0.000922f, -0.000297f, 0.000300f, -0.003332f, -0.004224f, 0.000485f, -0.000485f, -0.001908f, 0.000975f, -0.004869f, -0.020368f, 0.005136f, 0.000118f, -0.006098f, -0.011200f, 0.004552f, -0.010709f, -0.002037f, 0.018246f, 0.027705f, 0.013585f, 0.015190f, -0.001245f, -0.007804f, 0.011383f, 0.010195f, 0.004236f, 0.005404f, 0.013591f, -0.002107f, 0.009853f, 0.009577f, 0.014103f, 0.013539f, -0.011271f, 0.009047f, -0.000834f, 0.003118f, -0.010512f, 0.003080f, -0.001511f, 0.009225f, -0.003728f, -0.002726f, -0.007464f, 0.006688f, -0.011506f, -0.009339f, 0.000792f, 0.009694f, 0.005215f, -0.005989f, -0.003191f, -0.001909f, -0.004036f, 0.005820f, -0.013829f, 0.012506f, - -0.000200f, 0.015580f, -0.022390f, 0.001478f, -0.020182f, -0.006418f, -0.006533f, 0.005374f, -0.002245f, -0.004658f, 0.004248f, 0.001565f, 0.005248f, 0.008564f, 0.014052f, -0.001854f, -0.011572f, 0.002363f, 0.018985f, 0.003818f, -0.005706f, -0.001492f, 0.011641f, -0.006317f, 0.007018f, -0.006105f, -0.020626f, 0.011738f, 0.012368f, 0.011544f, -0.010283f, -0.015258f, -0.011117f, 0.012779f, -0.001556f, -0.002048f, 0.008925f, 0.003286f, 0.002067f, 0.001489f, -0.000824f, 0.003465f, 0.004561f, -0.001657f, -0.002777f, 0.002602f, 0.000094f, -0.000969f, 0.001420f, -0.002636f, 0.000550f, 0.004064f, -0.001908f, 0.004274f, -0.002022f, -0.003286f, 0.001328f, -0.000160f, -0.000183f, 0.002135f, 0.001476f, 0.002170f, 0.001540f, 0.001543f, -0.000336f, 0.002095f, -0.001561f, -0.030485f, 0.000541f, -0.006739f, 0.002830f, -0.017061f, 0.002107f, 0.002849f, 0.022674f, -0.018098f, 0.000249f, -0.024287f, 0.005560f, -0.014664f, -0.003563f, 0.000924f, -0.007945f, 0.007061f, 0.003130f, -0.012700f, 0.000253f, -0.000162f, 0.011789f, -0.007663f, 0.018980f, -0.000198f, -0.016422f, -0.008357f, 0.020196f, -0.001908f, - 0.008094f, 0.005406f, -0.003318f, 0.012103f, -0.013343f, -0.012603f, -0.009821f, 0.001418f, -0.012780f, 0.013635f, -0.007480f, 0.008762f, -0.012376f, -0.000104f, -0.015040f, 0.009929f, 0.001332f, 0.011886f, 0.010589f, -0.009981f, 0.019903f, 0.017014f, 0.016026f, 0.003217f, 0.016826f, 0.013873f, -0.014270f, 0.012304f, 0.005856f, 0.001182f, -0.013249f, 0.006162f, -0.011276f, 0.011238f, -0.004848f, -0.008840f, -0.001083f, 0.016742f, 0.005937f, -0.019149f, 0.018311f, -0.001451f, -0.006481f, -0.010916f, 0.018649f, 0.016199f, -0.013911f, 0.013826f, -0.001003f, -0.016512f, 0.000197f, -0.009356f, -0.005179f, 0.009182f, -0.007998f, 0.006576f, -0.000678f, 0.002950f, -0.003838f, 0.005027f, -0.000696f, -0.000442f, -0.001119f, -0.001767f, 0.001747f, 0.001033f, -0.004652f, 0.001726f, 0.002298f, 0.000067f, 0.001709f, 0.002098f, -0.004370f, 0.001013f, -0.000538f, 0.000165f, -0.003689f, 0.001380f, -0.001522f, -0.002146f, -0.004905f, 0.005703f, 0.001157f, -0.002585f, -0.000775f, 0.001576f, -0.000597f, 0.043542f, 0.007397f, -0.001742f, -0.015019f, -0.028214f, 0.007199f, -0.004160f, -0.041410f, 0.036322f, - -0.017603f, -0.026282f, 0.005550f, -0.001682f, 0.004892f, -0.001701f, 0.007039f, 0.010472f, 0.000137f, -0.000672f, -0.021163f, -0.001762f, -0.002010f, 0.024948f, -0.004560f, 0.000645f, 0.009182f, -0.004382f, -0.003074f, -0.010157f, 0.021305f, -0.015990f, 0.015394f, -0.003803f, -0.012768f, 0.002386f, -0.014274f, -0.007260f, -0.023182f, 0.004079f, 0.010641f, -0.006272f, -0.011567f, -0.009158f, 0.014010f, -0.021733f, -0.005140f, -0.010720f, -0.000305f, -0.003120f, 0.002827f, -0.018856f, 0.018362f, -0.025742f, -0.017601f, 0.006975f, 0.003106f, -0.000983f, 0.006872f, -0.013356f, -0.019210f, 0.002374f, -0.005226f, -0.000888f, 0.009427f, -0.011491f, 0.008546f, 0.005942f, 0.021186f, -0.005880f, 0.003037f, -0.001643f, 0.000303f, 0.029369f, 0.002459f, 0.029078f, -0.007027f, -0.010936f, 0.003312f, -0.014974f, -0.001338f, 0.014854f, 0.001192f, -0.017421f, -0.015242f, 0.004260f, -0.001624f, 0.000053f, 0.014927f, 0.001148f, -0.002814f, 0.006188f, -0.000858f, -0.000618f, -0.006983f, 0.002568f, 0.003259f, -0.003523f, -0.000104f, -0.001741f, 0.005758f, -0.002626f, -0.001176f, 0.002943f, 0.000758f, 0.001780f, - -0.000557f, 0.003283f, -0.001096f, -0.000003f, 0.001751f, -0.003675f, 0.004529f, -0.002900f, 0.001670f, 0.003794f, 0.002066f, 0.003582f, 0.000978f, -0.031881f, -0.004116f, -0.006429f, -0.025848f, -0.044558f, 0.013834f, 0.023247f, -0.016283f, -0.007794f, 0.013183f, -0.004741f, 0.027879f, -0.003023f, -0.014779f, -0.008777f, -0.041517f, 0.014139f, 0.004775f, -0.003712f, -0.029138f, 0.006988f, -0.016169f, -0.004201f, -0.014183f, -0.007220f, 0.020850f, -0.019844f, 0.008679f, -0.029423f, 0.018981f, 0.003850f, 0.000464f, -0.008427f, 0.002320f, -0.003768f, -0.016405f, -0.030983f, 0.006123f, 0.000142f, 0.006747f, 0.013116f, -0.007455f, -0.002400f, -0.019891f, -0.010189f, -0.005257f, 0.008556f, 0.005821f, 0.014826f, 0.023625f, 0.018491f, 0.009563f, 0.014131f, 0.004366f, 0.014725f, 0.013264f, -0.012734f, 0.015180f, 0.017132f, -0.003402f, 0.022913f, -0.002278f, 0.026867f, -0.011744f, -0.028668f, -0.004599f, 0.018447f, 0.020297f, 0.023305f, -0.004377f, -0.040037f, -0.003929f, -0.002033f, 0.001626f, -0.001255f, -0.009765f, 0.005861f, -0.029180f, 0.022905f, 0.014488f, 0.013931f, -0.015227f, -0.014381f, - -0.003088f, 0.008586f, -0.000928f, -0.016099f, 0.000253f, -0.007810f, -0.013066f, -0.005187f, -0.002070f, -0.006201f, 0.000703f, -0.005225f, 0.002781f, -0.003220f, -0.001709f, 0.004336f, 0.000910f, 0.002035f, -0.001987f, -0.005685f, -0.006308f, 0.004595f, -0.005007f, -0.000075f, -0.001755f, 0.002867f, -0.001973f, -0.001206f, -0.001951f, 0.006843f, 0.003688f, 0.002166f, -0.001976f, 0.042729f, -0.009407f, -0.010270f, 0.014248f, 0.023000f, -0.001655f, 0.010698f, 0.026644f, 0.019238f, -0.043751f, -0.040213f, 0.000328f, -0.003880f, 0.005897f, -0.017985f, -0.031915f, 0.007560f, 0.025590f, 0.016884f, -0.018524f, 0.030079f, 0.024326f, 0.022807f, -0.038339f, 0.010835f, 0.020118f, 0.001008f, 0.003069f, 0.017094f, 0.039516f, -0.007663f, -0.018046f, 0.011956f, 0.008969f, -0.005411f, 0.021369f, 0.031849f, 0.005971f, 0.032995f, 0.014456f, -0.024823f, 0.002815f, 0.027354f, -0.002935f, -0.011282f, 0.014211f, 0.002254f, 0.005422f, 0.028708f, 0.018486f, 0.009741f, 0.003440f, -0.033415f, -0.033968f, -0.002884f, 0.005422f, 0.008839f, -0.010456f, -0.001523f, -0.008752f, 0.002941f, 0.004282f, -0.012780f, - 0.004866f, -0.007864f, -0.001939f, -0.010868f, 0.001268f, 0.021195f, -0.012514f, -0.030737f, -0.004743f, -0.026151f, 0.005803f, -0.009364f, -0.000625f, -0.003551f, 0.012382f, -0.004659f, 0.008983f, -0.000162f, 0.007715f, 0.003571f, -0.003491f, -0.004209f, -0.005258f, -0.015187f, 0.005576f, 0.001929f, 0.003859f, 0.000463f, -0.011644f, 0.005844f, -0.009093f, -0.007746f, -0.002601f, -0.009934f, -0.002016f, -0.003274f, -0.003622f, -0.003150f, 0.006503f, -0.002878f, 0.004362f, -0.000434f, 0.003526f, 0.000580f, 0.008383f, -0.003613f, 0.002328f, -0.006726f, -0.001619f, -0.005771f, -0.005167f, -0.001115f, -0.003786f, 0.012744f, 0.005470f, 0.000465f, -0.001690f, -0.001811f, -0.071072f, -0.044222f, -0.013184f, 0.013266f, -0.004085f, -0.017523f, 0.003480f, -0.017073f, 0.050255f, -0.019955f, 0.032341f, 0.049591f, 0.027017f, 0.024567f, -0.019018f, 0.017737f, -0.009303f, -0.022616f, 0.020183f, 0.023508f, 0.015676f, 0.033470f, 0.000456f, -0.001493f, -0.014431f, -0.014805f, -0.012609f, -0.020477f, -0.019931f, -0.013619f, 0.007976f, 0.003000f, 0.000052f, -0.012813f, -0.006866f, -0.019873f, 0.008600f, -0.017144f, - -0.015529f, -0.006861f, 0.008640f, 0.000074f, -0.010404f, -0.029031f, 0.003734f, -0.008480f, 0.010815f, -0.034278f, -0.026433f, 0.030353f, -0.004383f, -0.005696f, -0.013745f, -0.008430f, 0.022868f, 0.007472f, -0.004462f, 0.012541f, -0.003163f, 0.013042f, 0.010479f, 0.014862f, -0.010344f, -0.017260f, -0.043566f, 0.003161f, -0.042246f, -0.002772f, -0.035727f, -0.005079f, 0.034222f, -0.004187f, 0.006246f, -0.024151f, -0.010283f, -0.012416f, 0.002938f, -0.015479f, -0.008842f, 0.015410f, 0.019237f, -0.001882f, -0.001722f, 0.002252f, -0.008472f, 0.003312f, -0.000776f, -0.008438f, -0.003283f, -0.007212f, -0.002662f, -0.004068f, -0.019497f, 0.003513f, -0.003098f, -0.002486f, 0.001424f, -0.005319f, -0.006177f, -0.013489f, -0.002968f, -0.007776f, -0.009161f, -0.001685f, -0.011591f, -0.005426f, 0.002161f, -0.007335f, -0.008392f, 0.001139f, -0.006982f, 0.002468f, 0.003014f, 0.008555f, -0.004919f, 0.006001f, 0.003032f, -0.007675f, -0.002705f, -0.001794f, -0.003368f, 0.001618f, -0.001493f, -0.002181f, 0.049151f, 0.000969f, -0.035587f, -0.030174f, 0.030834f, 0.024182f, -0.022782f, -0.022002f, 0.041339f, 0.026279f, - 0.001516f, -0.024525f, 0.002961f, -0.010306f, 0.019601f, -0.015213f, 0.002325f, -0.006436f, -0.004521f, 0.042760f, -0.006054f, -0.011621f, 0.007917f, 0.007295f, 0.012767f, 0.013228f, 0.001437f, -0.016844f, 0.012753f, 0.006490f, 0.014614f, 0.033092f, 0.015114f, -0.047569f, -0.013652f, -0.007726f, -0.036471f, 0.014147f, -0.006362f, 0.000785f, -0.020350f, 0.017210f, -0.007936f, 0.003328f, -0.026459f, 0.017962f, -0.021566f, 0.001818f, 0.021151f, -0.003352f, 0.022312f, -0.017412f, 0.027838f, -0.035710f, 0.017801f, 0.000464f, -0.012957f, 0.046852f, 0.012405f, -0.009666f, -0.027982f, 0.012208f, -0.005819f, 0.003921f, -0.004330f, 0.017193f, 0.025436f, 0.034477f, -0.021869f, 0.015545f, -0.008735f, 0.030853f, 0.011169f, 0.004488f, -0.002949f, 0.018540f, 0.003170f, -0.012127f, 0.014857f, -0.010548f, -0.018141f, -0.007700f, -0.024629f, 0.000426f, -0.027581f, -0.002220f, -0.018641f, 0.021264f, -0.006864f, 0.013715f, -0.014967f, 0.000679f, -0.008458f, 0.012958f, -0.004249f, -0.001101f, -0.008391f, 0.004467f, -0.006346f, -0.009788f, -0.005909f, 0.004431f, -0.009773f, 0.005956f, -0.007792f, 0.003713f, - -0.005126f, -0.004618f, -0.005129f, -0.010415f, -0.006382f, 0.000418f, -0.007945f, -0.006848f, 0.009514f, 0.008627f, 0.004350f, -0.004738f, -0.012671f, -0.001150f, 0.005135f, -0.000275f, -0.009904f, -0.005566f, -0.000971f, -0.071438f, -0.046238f, 0.038564f, -0.028175f, -0.026435f, 0.014888f, 0.033771f, -0.055460f, -0.009147f, 0.013311f, 0.003660f, -0.028916f, -0.043376f, 0.081687f, -0.035102f, 0.011168f, -0.039921f, 0.022134f, -0.013852f, 0.038242f, 0.033988f, 0.003513f, 0.006095f, -0.045238f, 0.000026f, 0.021522f, -0.018281f, -0.026935f, 0.021571f, 0.006175f, 0.023252f, 0.018506f, -0.003758f, 0.007826f, -0.005010f, -0.002789f, 0.034250f, -0.028941f, -0.016976f, 0.027502f, -0.001025f, -0.021821f, 0.029102f, -0.000773f, -0.006276f, -0.019491f, -0.008552f, 0.010815f, -0.015207f, -0.001635f, 0.010315f, -0.019335f, -0.019824f, -0.012852f, 0.014814f, -0.042098f, 0.020279f, -0.001813f, 0.040269f, -0.037610f, 0.012673f, -0.028573f, 0.010720f, -0.017104f, -0.021848f, 0.036337f, -0.019883f, -0.008689f, -0.019352f, 0.015783f, -0.022154f, 0.013310f, -0.007450f, 0.026614f, 0.027287f, -0.003275f, -0.042208f, - 0.017052f, 0.017746f, -0.001893f, -0.001219f, -0.024033f, -0.016584f, -0.003874f, -0.020706f, -0.016610f, -0.005770f, -0.000355f, -0.010241f, -0.013627f, 0.015881f, 0.005430f, -0.009706f, -0.008079f, -0.009921f, -0.010479f, 0.011585f, 0.004382f, 0.002890f, -0.015823f, -0.005975f, 0.013898f, -0.007864f, -0.009648f, 0.006572f, -0.006861f, 0.000178f, 0.005169f, 0.008137f, -0.003108f, -0.013094f, 0.002812f, 0.008017f, -0.017491f, 0.000537f, 0.004758f, 0.000550f, -0.009131f, -0.005187f, 0.000638f, -0.004070f, 0.036081f, 0.017602f, -0.040357f, 0.013937f, 0.043672f, -0.003703f, 0.000215f, 0.020239f, -0.012915f, 0.030681f, 0.027743f, -0.036390f, -0.022302f, -0.006587f, 0.019397f, 0.035027f, 0.006290f, 0.018687f, 0.039454f, 0.029619f, -0.041314f, -0.004286f, 0.065871f, 0.016409f, -0.004299f, -0.007601f, -0.012299f, -0.019153f, 0.005879f, 0.016297f, 0.018040f, 0.016900f, -0.011692f, -0.027908f, 0.007625f, -0.014419f, 0.015498f, 0.045606f, -0.012006f, -0.045398f, 0.054644f, -0.016249f, -0.030007f, 0.044422f, -0.007913f, -0.012971f, -0.047271f, -0.008303f, 0.019622f, 0.009554f, -0.010230f, -0.019756f, - 0.018336f, 0.002174f, -0.021879f, 0.019032f, -0.004352f, 0.043384f, -0.031710f, 0.004744f, -0.006161f, 0.049681f, 0.016886f, -0.069975f, 0.022056f, -0.029090f, -0.012285f, -0.024843f, 0.030414f, 0.100791f, 0.036754f, 0.006113f, 0.023290f, 0.029544f, -0.037044f, -0.015440f, -0.010406f, -0.020873f, -0.012781f, -0.023127f, 0.022147f, -0.051317f, -0.013664f, 0.004977f, 0.006194f, -0.016603f, 0.003234f, 0.009427f, -0.005034f, -0.006224f, 0.017583f, 0.003565f, 0.011745f, 0.010092f, -0.010569f, 0.003349f, 0.008702f, 0.003673f, 0.007281f, -0.004932f, 0.004476f, -0.009653f, 0.001359f, -0.002654f, -0.009578f, -0.004668f, -0.002156f, 0.016141f, 0.000895f, 0.004499f, 0.000667f, -0.002847f, -0.003209f, 0.001759f, -0.001382f, -0.014141f, -0.001741f, 0.002823f, -0.003441f, -0.010773f, -0.026205f, -0.009041f, -0.007927f, 0.015948f, -0.002655f, 0.002916f, -0.015378f, -0.053257f, -0.022692f, 0.003593f, -0.021657f, -0.067019f, 0.058021f, -0.011206f, 0.026120f, 0.004893f, -0.030764f, -0.052887f, -0.050970f, 0.057044f, 0.034712f, 0.013049f, -0.020196f, -0.038245f, -0.028676f, -0.045405f, -0.011720f, 0.016858f, - -0.007123f, 0.003650f, 0.007169f, -0.007500f, -0.023565f, -0.022647f, -0.038624f, -0.013891f, -0.007479f, 0.018900f, 0.013159f, 0.020784f, -0.010411f, -0.017317f, -0.007306f, 0.027183f, 0.003803f, 0.024060f, -0.080680f, -0.019051f, -0.000182f, 0.017628f, -0.025792f, -0.001194f, -0.029843f, 0.023263f, 0.020461f, 0.003862f, 0.099493f, 0.001512f, 0.031040f, 0.040903f, 0.001701f, 0.013163f, 0.000545f, -0.007240f, -0.012054f, 0.020575f, 0.030233f, 0.039568f, -0.000970f, -0.007565f, 0.002643f, 0.025967f, 0.023587f, 0.000763f, 0.019105f, 0.016491f, 0.012830f, -0.005390f, 0.038885f, -0.011331f, 0.049922f, -0.049526f, -0.024812f, -0.060895f, -0.019037f, 0.010780f, 0.001362f, -0.015855f, 0.003145f, -0.000310f, 0.027112f, -0.005626f, 0.032502f, -0.015036f, -0.012244f, -0.016512f, 0.008292f, 0.018225f, -0.003124f, -0.009019f, -0.010049f, 0.011208f, 0.000005f, 0.037931f, -0.006200f, -0.002721f, 0.006647f, 0.010571f, 0.015496f, -0.013261f, -0.001365f, 0.004992f, 0.007541f, -0.018264f, 0.006108f, 0.006821f, 0.023112f, -0.023189f, 0.012903f, 0.008699f, -0.010066f, 0.019696f, -0.011407f, -0.013668f, - -0.000165f, -0.004702f, 0.009891f, 0.004982f, -0.008407f, -0.000341f, 0.008065f, 0.001843f, 0.020043f, -0.001046f, 0.013002f, 0.037248f, -0.007512f, 0.001124f, 0.009407f, -0.052259f, 0.001622f, 0.006883f, 0.032008f, 0.049126f, -0.042815f, 0.008827f, -0.027196f, 0.034866f, 0.031543f, 0.003532f, 0.061063f, 0.018691f, 0.023986f, -0.022986f, -0.004164f, -0.039853f, 0.061006f, -0.036299f, 0.009066f, 0.037146f, -0.009518f, -0.024742f, 0.018468f, -0.006054f, 0.009068f, 0.039924f, 0.000492f, -0.013330f, -0.004282f, 0.007076f, -0.001835f, -0.024494f, 0.017211f, -0.002795f, -0.007367f, 0.068537f, -0.053613f, 0.049451f, 0.031686f, 0.061837f, 0.024835f, -0.044557f, 0.033544f, 0.000203f, 0.031130f, 0.081595f, -0.059767f, -0.025014f, -0.008181f, 0.001115f, 0.055244f, -0.033585f, 0.002342f, -0.036029f, 0.002229f, 0.062449f, -0.007652f, 0.064827f, 0.017843f, 0.010700f, 0.029125f, -0.040354f, -0.007164f, 0.028248f, 0.040075f, -0.066487f, -0.002920f, -0.057030f, 0.024778f, -0.029874f, -0.001542f, 0.012932f, 0.017860f, 0.000953f, -0.020695f, -0.016480f, -0.062428f, -0.007482f, -0.044518f, 0.035200f, - 0.002512f, -0.003222f, 0.027179f, 0.001117f, -0.000719f, 0.026224f, 0.019323f, 0.012973f, -0.000252f, -0.009417f, 0.011995f, -0.021321f, -0.002145f, -0.014758f, 0.013746f, 0.014495f, -0.013214f, -0.002847f, -0.027432f, 0.011491f, -0.002259f, -0.000436f, -0.001328f, -0.026462f, -0.032003f, -0.010795f, 0.009560f, 0.023421f, 0.011511f, 0.010355f, -0.004400f, 0.019563f, 0.013271f, -0.001263f, -0.010770f, 0.016980f, -0.025348f, -0.007327f, 0.004534f, 0.027618f, 0.022514f, 0.004649f, -0.010998f, -0.039728f, 0.011501f, -0.069719f, -0.061394f, 0.001138f, 0.001112f, -0.038927f, 0.032050f, 0.009420f, -0.010421f, -0.036118f, 0.049686f, -0.011315f, 0.073830f, -0.010549f, 0.016084f, 0.026740f, -0.035591f, -0.011778f, 0.011442f, -0.042521f, -0.023823f, -0.037171f, 0.032279f, -0.029753f, -0.007926f, -0.009673f, 0.027971f, -0.025073f, -0.042398f, -0.059275f, -0.001560f, 0.049534f, 0.003127f, -0.027119f, -0.011439f, -0.034374f, -0.011401f, 0.000398f, 0.020754f, -0.038740f, -0.004200f, -0.008372f, -0.027551f, -0.038085f, 0.001964f, 0.006461f, 0.024825f, 0.008537f, 0.042559f, 0.011835f, 0.053670f, -0.022269f, - 0.044339f, -0.011212f, -0.034366f, -0.008952f, 0.072024f, -0.030998f, 0.032904f, -0.022716f, 0.052888f, -0.027861f, 0.017947f, 0.033499f, -0.001845f, -0.013774f, 0.006541f, -0.019061f, 0.048119f, -0.043935f, -0.016408f, 0.047894f, -0.005734f, -0.039930f, 0.002051f, 0.036609f, 0.020510f, 0.036607f, -0.036783f, -0.031402f, -0.019783f, -0.004043f, 0.036262f, 0.043640f, -0.077064f, 0.004091f, 0.022545f, -0.042392f, 0.007186f, 0.026774f, 0.021036f, 0.019639f, 0.019379f, 0.012819f, -0.005712f, 0.001405f, 0.014906f, 0.016431f, 0.013610f, 0.032987f, -0.009803f, 0.017332f, 0.007556f, 0.035703f, 0.021495f, -0.027607f, -0.034638f, 0.011073f, 0.037770f, -0.010721f, -0.010154f, -0.023951f, -0.040509f, 0.004654f, -0.034530f, -0.010974f, 0.008218f, -0.023202f, 0.021861f, 0.006133f, -0.006968f, -0.019176f, -0.003409f, -0.019880f, -0.001340f, 0.010947f, 0.005486f, 0.003051f, -0.003177f, -0.004925f, -0.067295f, 0.072224f, -0.025133f, 0.061379f, -0.013797f, 0.049148f, 0.003387f, -0.016429f, -0.034965f, -0.024950f, -0.005320f, -0.000044f, 0.035898f, -0.014767f, -0.003627f, 0.009742f, -0.034200f, 0.053155f, - 0.019356f, 0.001235f, -0.045186f, 0.029684f, 0.015249f, -0.036187f, 0.033867f, 0.002261f, -0.006215f, 0.007983f, -0.001837f, 0.044772f, -0.011186f, -0.057986f, 0.061092f, -0.032646f, -0.005779f, 0.045230f, -0.021053f, -0.010802f, -0.028237f, 0.071828f, -0.033284f, -0.009721f, -0.046157f, -0.009572f, 0.004779f, 0.064131f, -0.031149f, 0.011459f, 0.019901f, 0.037828f, -0.010913f, -0.041908f, 0.044080f, 0.026463f, 0.035640f, -0.018520f, -0.009494f, 0.003849f, 0.039566f, -0.023116f, -0.048089f, -0.053546f, 0.027345f, -0.037724f, 0.008689f, 0.038722f, 0.035851f, -0.026536f, -0.009615f, 0.052379f, -0.085492f, -0.002751f, 0.010912f, 0.028557f, -0.004708f, -0.031663f, -0.006958f, 0.047709f, -0.010199f, 0.098746f, 0.038137f, -0.029192f, -0.004637f, 0.002200f, -0.012783f, -0.036756f, -0.044938f, -0.033042f, 0.026864f, -0.021649f, -0.009383f, -0.001566f, 0.042577f, 0.018087f, -0.015850f, 0.018436f, 0.013186f, -0.001307f, 0.005563f, 0.007348f, -0.001354f, 0.005316f, 0.043604f, 0.035898f, 0.034532f, 0.023405f, 0.002561f, -0.022569f, 0.010962f, -0.017783f, 0.020459f, -0.026976f, 0.027728f, 0.041063f, - 0.013029f, 0.052201f, 0.056163f, 0.022470f, -0.001394f, 0.029271f, 0.009435f, -0.006114f, -0.019027f, 0.030466f, -0.008974f, -0.025531f, -0.001209f, 0.014444f, -0.007999f, 0.012499f, 0.023584f, 0.008676f, -0.031661f, 0.024712f, -0.014836f, -0.016810f, -0.094396f, 0.031260f, 0.017542f, 0.082923f, 0.072519f, -0.011465f, -0.027750f, -0.086732f, 0.001809f, 0.028223f, -0.037593f, 0.027563f, 0.049693f, 0.048476f, -0.023474f, 0.058485f, 0.052042f, 0.001986f, -0.032610f, -0.034660f, 0.053140f, 0.045590f, -0.066267f, -0.089799f, 0.117940f, 0.005702f, -0.009182f, 0.015148f, 0.008013f, 0.043624f, 0.042993f, -0.018007f, -0.015778f, 0.061471f, 0.028616f, -0.011434f, -0.041930f, 0.024597f, 0.004140f, 0.003012f, 0.021219f, 0.002788f, -0.002754f, -0.024973f, 0.013031f, -0.007658f, -0.031084f, 0.055302f, -0.089251f, 0.061434f, 0.050318f, -0.083941f, -0.006680f, 0.042496f, 0.009916f, 0.048527f, -0.012283f, 0.006684f, 0.043739f, -0.006030f, 0.021899f, -0.041425f, -0.066293f, 0.183997f, -0.076213f, -0.106004f, -0.024067f, 0.204955f, 0.087619f, -0.087487f, -0.020708f, 0.036142f, 0.024111f, -0.001927f, - -0.053729f, 0.077051f, 0.042193f, 0.032310f, 0.006659f, -0.104103f, -0.018049f, 0.016932f, 0.030022f, -0.042745f, -0.071692f, 0.006257f, 0.021377f, 0.009805f, -0.034367f, -0.035293f, 0.016006f, 0.009560f, 0.024629f, -0.004688f, -0.009608f, -0.002495f, 0.026368f, 0.034895f, 0.023018f, -0.052300f, -0.021291f, 0.037091f, 0.026230f, -0.026274f, -0.000927f, 0.030293f, 0.052518f, 0.021079f, -0.029299f, -0.038080f, -0.051055f, 0.023782f, -0.017066f, 0.022146f, -0.043337f, 0.023966f, 0.011231f, 0.026991f, -0.020442f, -0.009971f, -0.035025f, -0.014162f, 0.032392f, 0.006415f, -0.028923f, 0.015675f, 0.049493f, 0.003417f, -0.004373f, 0.015342f, -0.008004f, 0.013667f, -0.036395f, -0.022872f, 0.046327f, 0.080106f, 0.005784f, 0.132883f, -0.058609f, -0.022347f, 0.077151f, 0.004077f, -0.004154f, -0.039292f, -0.078836f, 0.065976f, -0.040979f, -0.044540f, 0.034303f, -0.049467f, 0.024920f, -0.046881f, -0.052067f, -0.008491f, 0.011670f, 0.007738f, -0.012095f, 0.063173f, 0.015969f, 0.038661f, 0.018619f, 0.001424f, 0.001193f, -0.028028f, -0.060127f, 0.019666f, 0.060378f, -0.048775f, 0.042223f, -0.049720f, - -0.005024f, -0.002365f, -0.077313f, 0.055559f, -0.026683f, 0.021882f, 0.001689f, -0.022403f, 0.001485f, -0.055640f, 0.057729f, -0.040165f, 0.019387f, -0.064830f, -0.039517f, -0.085163f, 0.032470f, -0.039582f, -0.044881f, -0.035944f, -0.018593f, 0.000487f, 0.091202f, 0.033028f, 0.045145f, -0.012020f, -0.042513f, -0.053460f, 0.014326f, 0.003755f, -0.092783f, -0.042771f, -0.163222f, -0.076407f, -0.063099f, -0.009028f, -0.075207f, -0.061512f, -0.013620f, 0.060214f, 0.068128f, -0.054964f, -0.070087f, -0.080119f, 0.040560f, 0.096841f, 0.004889f, 0.077981f, 0.001944f, 0.047292f, 0.018739f, 0.006154f, 0.022514f, 0.008805f, -0.001934f, -0.027472f, 0.039937f, 0.033583f, 0.017689f, -0.032908f, -0.013355f, -0.003949f, 0.017018f, 0.018540f, -0.006783f, 0.020086f, -0.008784f, -0.021933f, -0.039367f, 0.005408f, 0.054344f, 0.020177f, -0.006669f, 0.015917f, -0.017825f, 0.029769f, -0.010947f, 0.038752f, 0.036749f, 0.004918f, -0.040136f, 0.007170f, 0.008574f, 0.043874f, 0.010221f, 0.049797f, -0.033319f, -0.019714f, 0.045028f, 0.047671f, 0.012166f, -0.011702f, -0.009036f, -0.045986f, 0.033515f, -0.021365f, - -0.092832f, 0.022535f, 0.033528f, -0.080315f, 0.045379f, 0.009473f, -0.022902f, 0.005376f, -0.022303f, -0.001726f, 0.017968f, 0.024138f, 0.041948f, -0.048176f, 0.005312f, 0.056688f, -0.005669f, -0.026250f, 0.051084f, -0.021678f, 0.004116f, -0.029392f, -0.011559f, -0.059208f, 0.016152f, 0.001952f, 0.034327f, -0.023060f, 0.003091f, 0.042461f, -0.019269f, 0.001176f, 0.043884f, -0.084483f, 0.006124f, -0.096788f, -0.030353f, -0.064683f, 0.052635f, 0.018890f, -0.003215f, 0.022318f, -0.018487f, 0.024301f, 0.066738f, 0.018270f, 0.103284f, -0.056736f, -0.065030f, 0.060961f, 0.017081f, -0.043917f, -0.041055f, -0.016547f, 0.038533f, -0.035978f, -0.000785f, -0.031057f, -0.040074f, 0.024339f, 0.030508f, -0.060226f, -0.034653f, 0.052603f, -0.000297f, 0.018852f, -0.010677f, 0.029019f, 0.013319f, 0.053084f, -0.030040f, -0.022340f, 0.013984f, 0.012559f, -0.014595f, -0.054620f, -0.039611f, -0.043133f, 0.058892f, -0.026678f, -0.044465f, 0.013473f, -0.011168f, -0.014468f, -0.029097f, 0.011600f, 0.013965f, -0.004566f, -0.008212f, -0.015800f, -0.026765f, -0.004427f, -0.005582f, -0.019618f, 0.001364f, -0.009428f, - -0.018168f, 0.011757f, -0.010464f, 0.010842f, -0.010317f, -0.008954f, 0.028141f, -0.010573f, 0.013632f, 0.009964f, -0.025578f, 0.012023f, 0.004095f, -0.010273f, -0.031155f, 0.043531f, 0.029019f, -0.011939f, 0.007322f, -0.020941f, -0.015542f, 0.013477f, 0.000232f, -0.026995f, 0.010161f, -0.010638f, 0.025387f, -0.006348f, -0.004010f, 0.005055f, 0.012144f, 0.015611f, -0.063196f, -0.127734f, -0.063876f, -0.024356f, 0.055791f, 0.072759f, -0.139437f, 0.024012f, -0.055411f, -0.075588f, -0.015559f, 0.087251f, 0.055741f, 0.047567f, -0.030127f, -0.033648f, -0.040262f, 0.044005f, 0.030997f, 0.067913f, 0.008802f, -0.088258f, -0.034634f, 0.066323f, -0.010259f, 0.019451f, 0.059339f, -0.028412f, -0.041216f, -0.064551f, -0.064722f, 0.000402f, 0.042042f, 0.090953f, 0.067262f, 0.044655f, 0.018192f, -0.093045f, -0.099229f, 0.034669f, -0.068496f, 0.016164f, 0.087244f, 0.034757f, 0.005817f, -0.044059f, -0.079178f, -0.013530f, -0.034189f, 0.026561f, 0.020537f, 0.014855f, 0.054630f, -0.008510f, -0.010724f, 0.014421f, 0.039607f, 0.064462f, 0.066617f, 0.022665f, 0.059306f, 0.020019f, 0.021211f, -0.013053f, - -0.066721f, -0.026115f, -0.029025f, -0.054567f, 0.040953f, 0.038444f, 0.028411f, 0.028451f, -0.012839f, -0.065511f, 0.010696f, 0.019612f, -0.001198f, 0.043659f, 0.027899f, 0.022905f, -0.005360f, 0.003038f, 0.006247f, 0.044966f, 0.045074f, 0.034411f, 0.009791f, -0.008241f, -0.033399f, -0.006099f, 0.019178f, 0.005696f, -0.010017f, -0.000115f, -0.026587f, -0.012223f, -0.015472f, -0.017283f, 0.013477f, 0.049141f, 0.023898f, -0.008911f, -0.005167f, -0.036617f, -0.004011f, 0.012935f, 0.024546f, 0.027605f, -0.008917f, -0.011650f, -0.057395f, -0.032924f, -0.008527f, 0.000507f, 0.022708f, 0.019225f, -0.011527f, -0.013653f, 0.008986f, 0.003768f, 0.005639f, 0.014208f, -0.016244f, -0.005554f, -0.003492f, 0.009505f, 0.014920f, 0.001628f, -0.005646f, -0.004095f, -0.024229f, -0.010851f, 0.039574f, -0.112315f, -0.226045f, -0.116676f, 0.021934f, 0.088304f, 0.215189f, 0.210528f, 0.087731f, 0.089593f, 0.064340f, 0.003517f, -0.107128f, -0.181559f, -0.273584f, -0.081651f, -0.114431f, -0.019903f, 0.111702f, 0.199063f, 0.167387f, 0.147813f, 0.081494f, -0.001795f, -0.052069f, -0.069873f, -0.014907f, -0.121031f, - -0.096094f, -0.091306f, -0.059803f, -0.049099f, -0.022743f, -0.004261f, 0.041745f, 0.098180f, 0.101125f, 0.099375f, 0.072793f, 0.094674f, 0.050264f, 0.054168f, -0.017636f, -0.003913f, -0.044589f, -0.117223f, -0.169789f, -0.205188f, -0.099347f, -0.039974f, 0.032022f, -0.005241f, 0.021768f, 0.047775f, 0.062492f, 0.133194f, 0.153607f, 0.203510f, 0.129872f, 0.013156f, 0.059403f, -0.030689f, -0.112273f, -0.098250f, -0.195559f, -0.228218f, -0.170542f, -0.105446f, -0.045256f, -0.035714f, 0.082251f, 0.092830f, 0.257537f, 0.210848f, 0.154356f, 0.151054f, 0.072451f, -0.009190f, -0.102146f, -0.147831f, -0.107831f, -0.129439f, -0.177672f, -0.084420f, 0.005035f, -0.017356f, 0.005178f, 0.077764f, 0.108463f, 0.080091f, 0.041896f, 0.040492f, 0.069165f, 0.029492f, -0.004993f, -0.008255f, -0.033718f, -0.005686f, -0.030069f, -0.079647f, -0.041980f, -0.059394f, -0.096355f, -0.016977f, -0.016605f, 0.077146f, 0.070429f, 0.042324f, 0.075763f, 0.130902f, 0.093818f, -0.022979f, -0.015655f, -0.063127f, -0.056047f, -0.131782f, -0.136533f, -0.066117f, -0.027757f, 0.011352f, 0.046515f, 0.054901f, 0.081971f, 0.093228f, - 0.090267f, 0.094647f, 0.024293f, -0.009670f, -0.050240f, -0.061571f, -0.081135f, -0.090007f, -0.090170f, -0.038964f, 0.020382f, 0.027000f, 0.039333f, 0.040916f, 0.028578f, 0.030268f, 0.031881f, 0.010083f, 0.007523f, -0.010793f, -0.011182f, 0.019023f, -0.012841f, -0.031477f, 0.001790f, 0.006690f, -0.004056f, -0.009891f, -0.013513f, 0.000021f, -0.003911f, -0.022168f, -0.009938f, 0.006332f, 0.001402f, 0.001290f, 0.012843f, 0.016148f, 0.011982f, 0.010969f, 0.010113f, 0.003758f, -0.001603f, -0.001211f, -0.002143f, -0.006841f, -0.007435f, -0.007978f, -0.007422f, -0.005624f, -0.002722f, -0.003568f, -0.001342f, 0.001046f, 0.003144f, 0.006635f, 0.005147f, 0.000954f, 0.001232f, 0.002581f, -0.000431f, -0.005240f, -0.005741f, -0.003249f, 0.000496f, 0.002847f, 0.005469f, 0.008339f, 0.007943f, 0.006614f, 0.005138f, 0.001063f, -0.003331f, -0.007082f, -0.010072f, -0.011806f, -0.013057f, -0.012763f, -0.008222f, -0.001890f, 0.004105f, 0.009788f, 0.013870f, 0.015268f, 0.015619f, 0.012663f, 0.006475f, 0.000282f, -0.005914f, -0.010053f, -0.012527f, -0.013020f, -0.009706f, -0.005866f, -0.002434f, 0.001609f, - 0.004063f, 0.004754f, 0.004296f, 0.003624f, 0.002853f, 0.002090f, 0.001490f, 0.000548f, 0.000174f, 0.000171f, 0.000060f, -0.000361f, -0.000503f, -0.000567f, -0.000498f, -0.000509f, -0.000398f, -0.000355f, -0.000373f, -0.000357f} - }, - { - {-0.008454f, -0.013189f, -0.009585f, 0.003750f, -0.001437f, -0.022591f, -0.012818f, -0.000970f, 0.003257f, -0.006942f, 0.002406f, -0.008381f, 0.001666f, -0.006056f, 0.015891f, -0.012918f, -0.005647f, -0.005677f, 0.010138f, 0.006988f, 0.016182f, 0.004268f, 0.003388f, -0.007383f, 0.007653f, 0.000974f, 0.002098f, -0.000900f, 0.006149f, 0.008385f, 0.000659f, 0.008356f, 0.007968f, -0.003862f, 0.004472f, -0.004722f, -0.005222f, 0.000585f, -0.004261f, 0.002683f, -0.006704f, -0.012217f, 0.003332f, 0.004351f, -0.002992f, 0.003388f, -0.005791f, 0.005487f, 0.007529f, -0.012909f, 0.002559f, -0.000726f, 0.004894f, 0.004132f, 0.000720f, -0.012745f, -0.003774f, -0.005612f, 0.004266f, -0.000170f, 0.001325f, -0.004107f, 0.002404f, -0.006552f, 0.000361f, 0.007060f, 0.004570f, 0.000454f, -0.003573f, 0.002317f, -0.010362f, -0.005875f, -0.007598f, 0.001355f, 0.001368f, -0.000683f, 0.011056f, 0.000019f, 0.009645f, 0.000103f, 0.001074f, 0.000858f, 0.000026f, -0.005235f, 0.003958f, -0.000356f, 0.001992f, -0.001156f, 0.001308f, 0.001775f, -0.000639f, -0.001860f, -0.000638f, -0.000595f, -0.000480f, -0.000353f, - -0.002716f, 0.000428f, 0.002959f, 0.001609f, 0.000111f, 0.000267f, -0.000704f, -0.001324f, 0.001302f, -0.000865f, -0.026135f, -0.000868f, 0.001337f, 0.000332f, 0.004243f, -0.009252f, 0.006720f, 0.003757f, -0.004879f, -0.015593f, 0.010183f, 0.010449f, -0.002517f, 0.008687f, 0.006255f, -0.008663f, 0.017081f, 0.003525f, -0.007802f, 0.009163f, 0.000613f, 0.008559f, 0.001214f, -0.014965f, 0.005620f, -0.002874f, -0.005574f, -0.005839f, -0.004582f, 0.009724f, 0.007521f, 0.000568f, 0.007871f, 0.002823f, -0.007542f, -0.009317f, -0.000899f, -0.002212f, 0.003936f, 0.002667f, -0.007346f, 0.001697f, 0.003743f, 0.003544f, -0.006466f, -0.005420f, -0.008551f, -0.003025f, -0.002175f, 0.001662f, -0.002137f, 0.011362f, 0.004825f, -0.001808f, -0.005836f, 0.002097f, 0.004689f, 0.002419f, 0.012220f, -0.002087f, 0.006126f, -0.000769f, -0.004097f, -0.007499f, 0.005200f, -0.001729f, -0.003520f, 0.007162f, -0.002284f, 0.002359f, -0.001671f, -0.001530f, -0.008350f, 0.001781f, -0.002413f, 0.009705f, 0.011994f, -0.007295f, -0.007445f, -0.005223f, 0.001964f, -0.004691f, -0.002443f, -0.003040f, -0.003067f, -0.003279f, - 0.001861f, 0.004458f, -0.000362f, 0.001126f, 0.001269f, -0.000507f, 0.000071f, -0.002163f, -0.004879f, -0.007681f, -0.017713f, -0.010569f, -0.003830f, 0.012773f, 0.001663f, 0.002410f, 0.007822f, 0.002137f, 0.003379f, -0.018558f, -0.017052f, -0.010845f, -0.002843f, -0.000036f, 0.007880f, -0.005548f, 0.006167f, -0.003157f, -0.011467f, 0.003615f, -0.001677f, -0.007825f, -0.000124f, 0.011047f, 0.016020f, 0.007295f, -0.007334f, 0.004333f, 0.000513f, 0.011580f, -0.000052f, -0.009157f, -0.000314f, -0.005330f, 0.011355f, 0.005002f, 0.005326f, 0.011529f, -0.001986f, 0.000879f, 0.015426f, 0.013519f, -0.000505f, -0.000023f, 0.001062f, -0.000813f, 0.004107f, 0.001171f, -0.011235f, -0.014881f, -0.005261f, -0.001853f, 0.000054f, -0.004904f, -0.016622f, -0.001726f, 0.004615f, -0.009017f, -0.004411f, -0.005859f, -0.005032f, 0.001804f, 0.002140f, 0.005528f, -0.011583f, -0.009234f, 0.008947f, -0.003741f, -0.002017f, 0.001886f, -0.000683f, 0.005870f, -0.011155f, 0.004465f, 0.004146f, -0.004393f, -0.004247f, 0.004499f, -0.004870f, 0.007148f, -0.002785f, 0.000109f, 0.000006f, -0.002758f, 0.001416f, 0.005295f, - 0.002928f, 0.000637f, 0.003199f, 0.000946f, -0.001448f, -0.002823f, -0.001566f, -0.001610f, 0.000659f, 0.000846f, -0.000473f, -0.000378f, 0.000791f, -0.000215f, 0.023885f, -0.008962f, -0.007071f, -0.001007f, 0.000551f, -0.008728f, 0.000224f, -0.006061f, 0.011561f, -0.002643f, -0.013978f, -0.019514f, -0.004909f, -0.012875f, 0.018293f, 0.001628f, 0.013021f, 0.011007f, -0.017074f, -0.000813f, 0.007363f, 0.005382f, 0.009288f, 0.001860f, -0.000971f, -0.001404f, 0.004428f, -0.005546f, 0.006708f, 0.003791f, -0.006006f, 0.003960f, 0.000413f, 0.004598f, 0.010003f, -0.005167f, 0.004053f, -0.000466f, 0.005771f, 0.005019f, -0.001890f, 0.006856f, -0.001766f, 0.005987f, -0.004318f, 0.005475f, -0.013815f, -0.005757f, -0.004965f, 0.004093f, 0.012184f, -0.008684f, -0.005728f, -0.003095f, 0.000859f, -0.003873f, -0.005219f, -0.002654f, 0.005005f, 0.004134f, 0.007096f, -0.002135f, 0.004095f, -0.003927f, -0.004209f, -0.000224f, -0.002482f, 0.005009f, 0.000054f, -0.007100f, 0.004215f, -0.004067f, -0.007053f, -0.002476f, -0.004344f, 0.003342f, -0.005117f, -0.014010f, -0.001898f, -0.005947f, -0.005937f, 0.003273f, - -0.003805f, -0.008353f, -0.001628f, 0.002004f, -0.000502f, 0.000713f, 0.000026f, -0.005169f, 0.000281f, 0.003035f, -0.001921f, -0.002041f, 0.000678f, 0.000096f, 0.001132f, 0.001117f, 0.002892f, 0.001018f, -0.002313f, 0.001816f, -0.000325f, -0.000646f, -0.000832f, -0.002189f, -0.002151f, -0.002236f, 0.004245f, 0.006443f, -0.002197f, 0.009659f, -0.014543f, 0.006847f, -0.008599f, -0.009506f, 0.014523f, 0.005561f, -0.016627f, 0.002002f, 0.000340f, 0.005332f, -0.011901f, -0.007516f, -0.000827f, -0.009578f, -0.017691f, -0.017100f, -0.011220f, -0.017064f, 0.007674f, -0.001548f, 0.002861f, 0.009642f, -0.014979f, 0.010286f, -0.004068f, 0.004956f, 0.003322f, -0.001282f, 0.001801f, -0.001932f, -0.001960f, -0.009646f, -0.005713f, 0.013225f, -0.004552f, -0.010503f, -0.009689f, -0.000692f, -0.004229f, 0.004311f, -0.009254f, -0.014399f, 0.002468f, 0.013915f, -0.001855f, 0.008544f, -0.004500f, 0.004784f, -0.007111f, 0.005838f, 0.002493f, -0.009752f, 0.014960f, 0.002904f, -0.002891f, 0.003721f, 0.013770f, 0.012786f, 0.006786f, -0.001064f, -0.014919f, -0.002278f, -0.012403f, 0.003906f, -0.002567f, 0.002378f, - 0.002382f, 0.003792f, -0.011262f, 0.000182f, -0.000660f, 0.005811f, 0.011897f, -0.014376f, 0.002136f, -0.004013f, -0.013542f, -0.001272f, 0.004185f, -0.001121f, -0.000158f, -0.001035f, 0.004687f, 0.001171f, -0.003816f, -0.002445f, -0.002718f, -0.001467f, -0.004581f, 0.000454f, -0.000239f, 0.002949f, -0.005560f, -0.003719f, -0.000288f, -0.000468f, -0.000564f, 0.000561f, -0.000296f, 0.001218f, -0.001933f, -0.001841f, -0.000415f, -0.000057f, -0.001373f, -0.000077f, -0.000273f, 0.002852f, 0.002498f, 0.000269f, 0.000188f, -0.002329f, -0.004163f, -0.001210f, 0.000339f, -0.003583f, -0.002184f, -0.001527f, -0.001278f, -0.001290f, -0.016509f, -0.015803f, -0.010168f, -0.017432f, -0.020721f, -0.019729f, 0.008771f, 0.009569f, -0.012600f, -0.003110f, -0.011382f, -0.018733f, 0.010470f, -0.004691f, -0.016234f, 0.005973f, -0.000850f, 0.001140f, 0.001950f, 0.005907f, 0.002110f, -0.000297f, 0.004522f, 0.006012f, -0.009228f, -0.008827f, -0.002193f, -0.010829f, -0.000526f, -0.011561f, -0.020262f, -0.001334f, 0.012686f, -0.014565f, -0.011134f, 0.008347f, -0.007585f, 0.001223f, 0.003414f, -0.007366f, -0.005923f, -0.006202f, - -0.021863f, -0.009297f, 0.004998f, -0.006043f, -0.007084f, -0.013659f, 0.006466f, 0.012719f, -0.004260f, 0.019463f, -0.010386f, -0.004732f, 0.000145f, -0.004355f, -0.015987f, -0.000869f, 0.003940f, -0.000262f, -0.003192f, -0.013883f, -0.002115f, 0.014211f, 0.007242f, 0.004386f, 0.007441f, 0.005444f, -0.003460f, 0.026930f, -0.008172f, -0.010072f, -0.009654f, -0.011544f, 0.004902f, 0.015425f, 0.010537f, 0.001443f, -0.002268f, -0.007364f, -0.002547f, 0.000056f, -0.003401f, 0.000931f, -0.004629f, 0.002146f, 0.011284f, 0.007472f, -0.005279f, -0.000870f, -0.001803f, 0.004299f, -0.002132f, 0.004655f, -0.004449f, -0.002036f, 0.000856f, 0.001180f, -0.000988f, 0.001781f, -0.002510f, 0.003178f, 0.000266f, 0.002568f, 0.002018f, 0.001653f, -0.001154f, -0.001835f, -0.000412f, -0.001855f, -0.002368f, 0.029624f, 0.020085f, -0.001156f, 0.018326f, -0.001793f, 0.002498f, 0.003314f, -0.010356f, 0.016675f, -0.000029f, 0.014681f, 0.014093f, -0.011811f, 0.018370f, 0.000036f, -0.014371f, -0.023623f, 0.021136f, 0.010086f, 0.020999f, -0.018030f, 0.011979f, 0.006338f, -0.019766f, -0.019598f, -0.011642f, -0.005762f, - 0.020237f, -0.019733f, 0.017038f, -0.001951f, -0.002126f, 0.012130f, 0.011512f, 0.015665f, 0.005672f, -0.009017f, 0.007598f, 0.014701f, -0.009288f, 0.014694f, 0.022605f, 0.009392f, 0.013641f, 0.005440f, 0.003713f, 0.003575f, 0.000391f, -0.012733f, 0.004395f, 0.000943f, 0.000720f, 0.010143f, -0.007583f, 0.005921f, 0.006802f, -0.003355f, 0.019720f, -0.012001f, -0.007274f, -0.004825f, 0.017014f, -0.003458f, 0.014024f, 0.006848f, 0.009426f, 0.008281f, 0.001499f, -0.024631f, -0.003934f, -0.019814f, -0.010738f, 0.024967f, 0.013046f, -0.011634f, -0.000834f, -0.014264f, -0.012615f, -0.006841f, 0.020900f, 0.001538f, 0.007104f, 0.003770f, -0.003431f, 0.003981f, 0.007406f, 0.012855f, -0.003864f, 0.007380f, 0.005433f, 0.004442f, -0.004656f, -0.003221f, 0.001976f, -0.002681f, -0.000217f, 0.003266f, 0.004767f, 0.001695f, 0.002008f, 0.005537f, 0.005647f, 0.001814f, 0.000083f, 0.002489f, -0.001314f, 0.004648f, 0.007522f, 0.003284f, 0.000142f, 0.008013f, 0.000875f, -0.003989f, 0.003429f, -0.026244f, 0.016529f, 0.015875f, 0.047010f, 0.001829f, 0.004034f, -0.002376f, -0.006498f, -0.003087f, - 0.015864f, 0.014489f, 0.012582f, 0.018279f, 0.007359f, 0.028874f, 0.008388f, -0.011451f, 0.002691f, 0.025169f, 0.009865f, 0.002552f, 0.003829f, -0.012947f, -0.018713f, 0.011940f, -0.009347f, -0.018239f, -0.038738f, -0.000609f, 0.015260f, -0.001173f, 0.008948f, -0.013370f, -0.007206f, -0.004988f, 0.002757f, -0.004223f, -0.011719f, -0.005637f, -0.031255f, -0.008103f, -0.026557f, 0.002251f, -0.014076f, 0.010636f, -0.015315f, 0.005795f, -0.014735f, -0.005029f, -0.001097f, 0.000472f, 0.002063f, 0.002987f, -0.019480f, 0.009365f, -0.003107f, 0.004318f, -0.010286f, 0.000314f, 0.015186f, 0.006248f, 0.021063f, 0.011971f, -0.006722f, -0.001207f, -0.004619f, -0.002118f, -0.005231f, -0.006716f, -0.000575f, 0.008800f, 0.005410f, 0.006562f, 0.003925f, -0.030372f, 0.019844f, 0.019802f, -0.007642f, 0.011378f, 0.008578f, -0.016007f, 0.007497f, 0.004915f, 0.000765f, -0.003324f, 0.002550f, 0.010497f, -0.009404f, 0.006165f, -0.002839f, 0.000636f, -0.000971f, 0.002406f, 0.005301f, -0.004532f, -0.002346f, 0.007843f, -0.005733f, 0.000516f, -0.000018f, 0.003063f, -0.003839f, -0.006326f, 0.003691f, 0.000396f, - -0.002288f, -0.001785f, 0.000714f, -0.000079f, 0.003418f, 0.004433f, 0.004519f, 0.000230f, -0.005391f, 0.001159f, 0.050563f, 0.018135f, -0.008613f, 0.024900f, -0.016593f, 0.017322f, 0.011477f, -0.024012f, 0.004950f, -0.030170f, 0.000473f, -0.010347f, -0.021281f, 0.011168f, 0.000245f, 0.008515f, 0.012261f, 0.015238f, 0.024549f, 0.010165f, -0.001890f, -0.006514f, -0.016944f, -0.030413f, 0.010610f, 0.011726f, 0.003158f, -0.010703f, 0.016231f, 0.002003f, 0.017157f, 0.010151f, -0.031709f, -0.012119f, 0.004125f, -0.023368f, 0.001070f, -0.001796f, -0.004541f, 0.006713f, 0.005006f, -0.005604f, 0.023159f, -0.013580f, 0.000798f, 0.012929f, -0.011601f, 0.008841f, -0.005134f, -0.014246f, 0.009346f, -0.000238f, -0.001947f, 0.013291f, 0.008757f, 0.000378f, -0.007084f, 0.027646f, 0.001123f, 0.015501f, 0.001456f, -0.008764f, -0.009742f, -0.023388f, -0.009107f, 0.009609f, -0.000729f, 0.008185f, -0.002746f, -0.018245f, 0.007137f, 0.005887f, -0.026696f, 0.007630f, 0.013610f, -0.007199f, 0.014525f, 0.003348f, -0.015194f, -0.015460f, 0.017340f, -0.000444f, -0.035015f, 0.004285f, 0.003669f, 0.001404f, - -0.003642f, 0.001992f, -0.004887f, 0.000811f, 0.010340f, -0.003259f, 0.001585f, 0.002565f, 0.002995f, -0.008856f, 0.002573f, -0.003204f, 0.002344f, 0.006434f, 0.006790f, 0.004894f, 0.002308f, -0.005832f, 0.002547f, -0.000563f, -0.000598f, 0.002276f, -0.006512f, -0.000136f, 0.004341f, 0.005992f, -0.004091f, -0.002504f, -0.007611f, 0.001282f, 0.007849f, -0.007837f, 0.003108f, 0.002733f, -0.052803f, -0.017610f, 0.054942f, 0.015167f, 0.008675f, -0.008408f, -0.001597f, -0.008585f, 0.011115f, -0.017924f, 0.023957f, 0.013649f, 0.011173f, 0.011474f, -0.008638f, -0.000959f, -0.001103f, 0.007617f, 0.016092f, -0.024505f, -0.014579f, -0.007915f, 0.018418f, 0.006563f, 0.010227f, 0.010993f, -0.002649f, -0.017608f, 0.005625f, 0.001237f, 0.033530f, 0.026340f, 0.006855f, 0.019972f, 0.000995f, -0.009822f, 0.004065f, -0.002912f, -0.004717f, 0.012825f, 0.015829f, 0.012981f, 0.032445f, 0.015589f, 0.012669f, 0.014163f, -0.014858f, -0.024314f, -0.011437f, 0.010890f, -0.020714f, -0.010335f, 0.019949f, 0.021237f, 0.011630f, -0.009802f, 0.018820f, -0.007583f, 0.001973f, 0.004391f, 0.010774f, -0.005699f, - -0.011884f, 0.006623f, -0.010724f, -0.033491f, 0.001367f, 0.010646f, -0.018263f, 0.002235f, -0.003358f, -0.004855f, -0.003407f, -0.010936f, 0.027060f, -0.002977f, 0.015437f, -0.039051f, -0.037080f, -0.031489f, -0.014366f, 0.003044f, 0.003738f, -0.001170f, 0.002076f, -0.000812f, -0.008332f, 0.003906f, -0.009152f, -0.002832f, -0.004046f, 0.009333f, 0.001446f, 0.003276f, -0.007358f, -0.001508f, -0.006555f, -0.002519f, 0.005103f, 0.008034f, 0.008750f, 0.008291f, -0.000170f, -0.005830f, 0.004551f, 0.007280f, 0.004563f, 0.007245f, 0.002547f, -0.000884f, 0.003088f, 0.000886f, 0.001488f, -0.002413f, -0.005129f, 0.005805f, 0.006649f, -0.002397f, -0.001958f, -0.001675f, -0.001156f, 0.027386f, 0.042908f, -0.062571f, -0.008650f, 0.004000f, -0.000239f, -0.007277f, -0.015429f, 0.017459f, -0.019875f, -0.031706f, -0.003019f, 0.031466f, -0.004239f, -0.017991f, 0.006024f, -0.025271f, -0.013639f, 0.001272f, 0.016614f, -0.026499f, 0.003198f, 0.029460f, 0.030186f, 0.001039f, 0.010834f, 0.026435f, -0.014746f, -0.023121f, -0.032466f, 0.003432f, -0.032363f, -0.006697f, 0.013937f, 0.013166f, -0.028615f, -0.026940f, - -0.016323f, 0.011983f, -0.007447f, -0.004815f, -0.007359f, 0.026262f, -0.038409f, -0.011027f, 0.006219f, -0.020555f, -0.006976f, 0.000343f, -0.024160f, 0.001404f, 0.010226f, -0.001053f, 0.032145f, -0.001888f, -0.012737f, 0.002987f, -0.001418f, -0.010214f, 0.006326f, 0.015998f, -0.014350f, 0.022697f, -0.010881f, -0.041455f, 0.002152f, -0.016008f, -0.008749f, -0.000878f, -0.004278f, -0.054776f, -0.009058f, 0.025524f, 0.021981f, 0.015532f, 0.033049f, 0.033766f, -0.045122f, -0.004802f, 0.003102f, 0.009705f, -0.012985f, -0.022274f, -0.000244f, 0.010518f, 0.012254f, 0.010611f, 0.008224f, 0.004126f, 0.006667f, -0.011813f, 0.000243f, 0.007515f, -0.003637f, -0.002521f, 0.001520f, 0.002628f, 0.006697f, -0.006943f, 0.001501f, -0.002649f, 0.003227f, 0.004520f, -0.009503f, 0.001661f, -0.000824f, -0.006380f, 0.002997f, -0.001265f, 0.001436f, 0.000560f, -0.000000f, -0.008139f, 0.004451f, 0.000841f, 0.002399f, -0.005342f, -0.004035f, -0.003460f, -0.003548f, -0.060108f, 0.016755f, -0.011197f, 0.020458f, -0.019246f, -0.000234f, 0.031417f, -0.010548f, 0.044645f, 0.010232f, 0.008598f, -0.019240f, 0.008444f, - 0.022094f, -0.013640f, -0.002818f, 0.028883f, 0.018564f, 0.021745f, 0.003024f, -0.033378f, 0.021180f, -0.021543f, -0.002069f, -0.012977f, 0.003250f, -0.016571f, 0.009599f, -0.004299f, 0.009351f, 0.008995f, 0.015911f, 0.016237f, 0.017911f, -0.021269f, 0.005026f, 0.034084f, 0.007201f, -0.006060f, -0.006893f, -0.017037f, -0.013852f, -0.000012f, 0.001190f, 0.006191f, 0.028569f, 0.002539f, 0.015729f, 0.015387f, -0.001149f, -0.007220f, -0.007039f, 0.026073f, -0.030427f, -0.006517f, -0.026937f, -0.022040f, -0.006295f, 0.000281f, -0.045149f, 0.011816f, -0.014250f, 0.027707f, -0.005801f, 0.001312f, 0.019070f, 0.004031f, 0.046191f, 0.038342f, 0.055035f, 0.020970f, 0.002250f, -0.006280f, -0.005684f, -0.009168f, -0.002800f, -0.010924f, -0.030445f, 0.020698f, 0.025064f, 0.012135f, -0.004206f, 0.002955f, -0.021474f, -0.028931f, 0.013411f, 0.003746f, 0.003923f, -0.009221f, -0.004107f, -0.010014f, -0.005599f, 0.009081f, 0.002862f, 0.011857f, -0.000863f, 0.002744f, -0.006800f, 0.008315f, -0.024186f, -0.006224f, -0.000943f, -0.000832f, -0.004627f, 0.004368f, 0.001006f, 0.001687f, -0.001761f, -0.005739f, - -0.001276f, -0.002313f, -0.001708f, 0.007644f, 0.000797f, 0.001068f, -0.005047f, 0.001749f, 0.001112f, -0.000245f, -0.010841f, -0.007676f, -0.008448f, -0.017810f, 0.023537f, -0.007136f, -0.005378f, 0.055180f, -0.011616f, -0.012362f, 0.061369f, -0.001060f, 0.034835f, 0.025668f, 0.001861f, 0.014324f, -0.008472f, 0.011195f, 0.010481f, 0.006604f, 0.008465f, 0.028274f, -0.019827f, 0.034110f, -0.019097f, -0.000757f, 0.006810f, -0.004807f, -0.025083f, -0.022383f, -0.000882f, -0.036227f, -0.011745f, -0.039558f, -0.002944f, -0.023568f, -0.017736f, -0.012981f, -0.011482f, 0.005709f, -0.031913f, 0.036606f, 0.005538f, -0.024047f, -0.018067f, -0.001298f, -0.004860f, -0.006012f, 0.009276f, 0.004889f, 0.035920f, 0.003990f, -0.000650f, -0.018633f, 0.002806f, 0.007333f, -0.001597f, -0.019864f, -0.008780f, 0.022534f, 0.024500f, -0.001623f, -0.021263f, 0.008442f, -0.004384f, 0.032119f, 0.035699f, -0.014192f, -0.009547f, -0.006794f, 0.003835f, -0.013959f, 0.014284f, -0.044888f, -0.004447f, 0.052726f, -0.047958f, -0.023666f, -0.011305f, 0.003277f, 0.003975f, 0.006160f, -0.004567f, 0.014009f, -0.008707f, -0.002534f, - 0.025496f, -0.004206f, 0.018409f, -0.012780f, 0.018546f, -0.016606f, 0.012624f, 0.010342f, 0.025303f, -0.000684f, -0.004574f, 0.010638f, 0.016569f, 0.001342f, -0.004280f, -0.002799f, 0.001459f, -0.009293f, -0.003039f, 0.008455f, 0.011100f, 0.003419f, -0.003934f, 0.010871f, -0.008867f, 0.008905f, 0.007315f, 0.008113f, 0.004300f, 0.000147f, -0.013682f, 0.013350f, 0.007729f, 0.006098f, 0.002714f, 0.006218f, 0.011563f, 0.002567f, -0.009520f, 0.004474f, -0.007803f, -0.005971f, 0.009531f, -0.002529f, 0.008220f, 0.009027f, -0.003825f, -0.006738f, -0.006723f, 0.003724f, -0.032269f, -0.017711f, -0.005086f, 0.024880f, 0.030012f, 0.020543f, -0.019169f, -0.049146f, 0.084942f, 0.021318f, -0.053370f, -0.053571f, -0.008053f, 0.012893f, 0.036161f, -0.046619f, -0.008249f, 0.008626f, -0.000702f, -0.006764f, 0.048673f, 0.010379f, -0.028615f, 0.015194f, 0.001988f, -0.001440f, 0.025620f, -0.004753f, 0.013995f, -0.031817f, -0.010769f, 0.055699f, 0.020591f, 0.043906f, 0.013869f, 0.039687f, 0.006944f, -0.014686f, 0.027954f, 0.025401f, 0.039937f, 0.019587f, -0.045110f, -0.017188f, 0.009757f, 0.023231f, - -0.018117f, 0.006792f, -0.017454f, -0.029254f, 0.002956f, -0.003459f, -0.017442f, 0.013481f, 0.018912f, 0.016319f, 0.012002f, 0.011159f, -0.008583f, 0.030098f, -0.000219f, -0.030084f, -0.021755f, 0.027059f, 0.014746f, -0.047197f, 0.020515f, 0.008271f, 0.015178f, -0.041253f, -0.028099f, 0.026374f, 0.040926f, 0.023021f, -0.009147f, -0.044109f, 0.010007f, -0.002040f, 0.037586f, -0.012625f, -0.050412f, 0.021060f, 0.029498f, -0.011251f, 0.030702f, 0.025125f, 0.010463f, -0.020249f, 0.002714f, -0.000357f, 0.005967f, 0.002119f, -0.001289f, -0.010815f, -0.004424f, -0.013550f, -0.001308f, -0.002749f, 0.007127f, -0.008310f, -0.004836f, -0.002849f, -0.006059f, -0.003845f, -0.003168f, -0.003841f, 0.015754f, 0.004622f, 0.000305f, 0.015138f, -0.003657f, -0.014433f, -0.009512f, -0.007769f, -0.006071f, 0.000589f, -0.010327f, 0.004328f, 0.006515f, 0.005314f, 0.004162f, -0.013850f, -0.005197f, 0.011514f, 0.009715f, -0.001479f, 0.007513f, -0.001647f, 0.019826f, 0.039172f, 0.014813f, 0.041379f, 0.006548f, 0.018726f, 0.013837f, 0.069240f, 0.094392f, 0.006941f, 0.018522f, -0.060847f, -0.019643f, 0.036036f, - -0.031222f, 0.071327f, -0.014747f, 0.010836f, 0.018887f, 0.041570f, 0.022871f, -0.010506f, -0.030923f, -0.036201f, -0.012238f, -0.006366f, -0.045235f, -0.021719f, -0.018271f, 0.028238f, -0.017115f, 0.008059f, -0.029170f, 0.003325f, -0.011742f, -0.042408f, 0.043103f, 0.029702f, 0.034613f, 0.014936f, -0.021830f, -0.021215f, -0.049222f, 0.000389f, -0.044411f, -0.013870f, -0.004196f, 0.005281f, 0.022048f, 0.017225f, -0.014728f, -0.010644f, 0.018185f, 0.040664f, 0.010603f, 0.015223f, 0.029600f, -0.038831f, 0.026680f, -0.022286f, -0.020575f, -0.039205f, -0.017412f, 0.017155f, 0.014488f, 0.001932f, 0.044751f, -0.010436f, -0.017241f, 0.006389f, 0.011361f, 0.061577f, -0.020906f, 0.024359f, 0.024061f, -0.060256f, -0.000405f, 0.006915f, -0.013632f, -0.009348f, 0.020171f, -0.012400f, 0.001284f, 0.024750f, 0.012604f, -0.037303f, -0.044580f, -0.043151f, -0.020411f, -0.016413f, 0.035050f, 0.030403f, -0.008962f, -0.014101f, 0.001347f, 0.003367f, 0.022963f, -0.003211f, -0.007799f, 0.013962f, -0.003139f, -0.002996f, -0.006608f, 0.009952f, 0.013972f, -0.008229f, 0.013355f, 0.012432f, 0.012904f, 0.001771f, - -0.006081f, 0.011189f, -0.008573f, 0.006468f, 0.014583f, 0.000519f, 0.008528f, 0.011416f, -0.020808f, -0.001481f, 0.009509f, 0.010505f, 0.014532f, 0.001164f, 0.012965f, 0.000108f, 0.000444f, -0.005198f, 0.007264f, 0.010653f, -0.039772f, 0.010790f, 0.060093f, -0.013432f, 0.009359f, -0.025916f, -0.006935f, -0.034772f, 0.028831f, -0.050318f, 0.003030f, -0.040397f, 0.008815f, 0.018212f, 0.007076f, -0.023931f, 0.084891f, -0.005286f, -0.010615f, 0.008270f, -0.047198f, 0.003371f, -0.031655f, 0.001729f, 0.009825f, -0.009094f, -0.000370f, 0.020435f, -0.016854f, 0.001360f, 0.026224f, 0.002681f, 0.007197f, -0.040634f, 0.006007f, -0.002896f, -0.001807f, -0.009858f, -0.050378f, -0.027886f, 0.013417f, 0.004759f, 0.023494f, -0.058696f, 0.007253f, -0.054593f, 0.028768f, -0.037057f, -0.059375f, 0.031035f, 0.056300f, 0.010122f, 0.028112f, -0.041010f, 0.041985f, -0.009657f, 0.006980f, -0.024948f, 0.035124f, 0.014350f, 0.036448f, 0.011714f, 0.044050f, -0.038594f, 0.008342f, 0.002689f, -0.005831f, -0.030498f, -0.024415f, -0.028639f, 0.033992f, -0.008300f, 0.045885f, -0.027439f, -0.020541f, 0.005545f, - 0.006915f, -0.024497f, 0.013919f, -0.014207f, -0.057644f, 0.026246f, 0.039768f, 0.064943f, 0.023503f, 0.046204f, -0.025444f, 0.000566f, -0.028799f, 0.049456f, 0.017509f, -0.008913f, -0.018509f, 0.023723f, -0.015725f, -0.004249f, 0.003515f, -0.014317f, -0.023898f, -0.016168f, -0.010767f, -0.009460f, -0.032146f, -0.014008f, -0.026603f, 0.021783f, -0.004186f, 0.013118f, 0.025977f, 0.006992f, -0.017712f, -0.001392f, -0.017710f, -0.007682f, -0.027014f, -0.015159f, -0.028644f, -0.004818f, 0.050037f, 0.010362f, -0.002533f, 0.011363f, 0.015873f, -0.027860f, -0.011746f, -0.001254f, -0.002523f, -0.011331f, 0.013692f, -0.005176f, -0.041909f, -0.003330f, -0.008604f, -0.031129f, -0.098159f, 0.012281f, -0.031228f, 0.091229f, -0.016943f, -0.045750f, 0.018458f, -0.002419f, -0.045619f, -0.007619f, 0.007794f, -0.027351f, 0.068883f, 0.009983f, 0.006753f, 0.031413f, -0.038490f, -0.059248f, -0.036512f, 0.084101f, -0.006550f, -0.017603f, 0.055559f, 0.031489f, -0.026303f, -0.026051f, -0.014682f, 0.066729f, 0.009444f, -0.016001f, -0.025893f, -0.012333f, -0.051836f, 0.035273f, -0.005947f, 0.014434f, 0.033518f, -0.011585f, - -0.053703f, -0.006354f, 0.069472f, -0.002739f, -0.017220f, 0.033680f, -0.015114f, 0.041742f, 0.027316f, -0.003269f, -0.051197f, -0.025863f, -0.006965f, -0.047187f, -0.027785f, -0.027060f, 0.003775f, -0.006222f, 0.040113f, -0.027567f, -0.009619f, 0.000153f, 0.103041f, 0.036145f, -0.017695f, 0.021204f, 0.012178f, -0.005689f, 0.052336f, 0.025816f, -0.019774f, 0.008596f, 0.042309f, 0.048192f, -0.029149f, -0.020388f, -0.069938f, -0.055726f, 0.031972f, -0.020528f, 0.034510f, -0.000477f, -0.041130f, 0.010542f, -0.003266f, 0.013549f, -0.027378f, -0.020370f, 0.038704f, 0.010317f, 0.005111f, -0.003304f, -0.004555f, 0.026270f, -0.012377f, 0.013815f, -0.006622f, 0.016629f, 0.032488f, 0.009250f, -0.023568f, 0.004494f, -0.009095f, 0.018362f, 0.014575f, 0.005504f, 0.021111f, 0.033604f, -0.013011f, 0.027255f, -0.002654f, -0.034556f, -0.009206f, 0.001854f, -0.019810f, 0.008687f, 0.025591f, 0.000284f, -0.013102f, 0.002382f, -0.004910f, 0.034313f, 0.028613f, 0.003766f, 0.013483f, 0.018126f, 0.008906f, 0.023270f, -0.028826f, -0.020444f, 0.010154f, 0.006726f, -0.006225f, -0.001563f, -0.004700f, -0.010713f, - -0.010564f, -0.111136f, 0.038171f, -0.023782f, 0.059157f, 0.060152f, -0.034852f, 0.028408f, -0.059520f, -0.089369f, 0.002187f, -0.062851f, 0.008267f, -0.007862f, 0.048632f, -0.036102f, 0.034697f, 0.029779f, 0.048773f, -0.074258f, 0.008097f, -0.045447f, -0.041662f, 0.004511f, -0.053783f, -0.034682f, 0.048796f, -0.014245f, 0.018519f, 0.056997f, -0.011322f, 0.018770f, -0.046982f, 0.005405f, -0.051802f, 0.048007f, -0.042948f, -0.028501f, -0.031712f, 0.053547f, 0.042886f, -0.030738f, 0.058650f, 0.038861f, -0.012448f, 0.058233f, -0.003283f, -0.061617f, -0.017068f, -0.007266f, -0.048057f, 0.010811f, -0.101632f, 0.010188f, -0.025898f, -0.048764f, -0.039432f, 0.045400f, -0.027186f, 0.094136f, 0.069895f, -0.105271f, -0.000030f, -0.002767f, 0.004972f, 0.048639f, -0.082721f, -0.057656f, 0.056754f, -0.047398f, -0.059290f, -0.068197f, 0.004510f, 0.139970f, 0.069488f, -0.065192f, -0.041122f, 0.005635f, 0.050852f, 0.019439f, -0.068238f, 0.010080f, -0.045630f, -0.026800f, -0.002537f, -0.008264f, 0.002502f, 0.044873f, 0.010494f, 0.026576f, 0.017531f, -0.052486f, 0.013935f, 0.023444f, -0.007562f, -0.018976f, - 0.002604f, -0.044818f, 0.039636f, 0.014354f, 0.010697f, -0.059424f, 0.009700f, 0.030482f, 0.008421f, -0.014135f, -0.011321f, 0.026174f, -0.043518f, -0.002925f, -0.032530f, -0.017992f, 0.042131f, -0.044968f, -0.002124f, 0.026558f, -0.022797f, 0.020782f, 0.025117f, 0.006455f, 0.003466f, 0.018502f, 0.005736f, -0.024030f, 0.034434f, -0.027059f, -0.021460f, -0.012387f, -0.037215f, -0.011773f, -0.033478f, -0.032067f, 0.012920f, 0.052501f, -0.058160f, 0.029285f, -0.097729f, -0.014645f, -0.038007f, -0.033122f, 0.051801f, -0.066761f, -0.104173f, 0.060937f, 0.091738f, 0.022282f, -0.017727f, -0.083220f, 0.005693f, 0.032670f, 0.032640f, -0.013898f, -0.033356f, 0.004244f, -0.008214f, -0.010839f, 0.010638f, -0.012210f, -0.027939f, -0.054481f, 0.006935f, -0.032758f, 0.008152f, -0.029360f, -0.062188f, 0.038715f, 0.028456f, 0.047588f, 0.001684f, 0.051462f, 0.028809f, 0.007804f, -0.016659f, -0.026197f, -0.042817f, -0.030480f, -0.017214f, 0.012239f, 0.029552f, -0.019721f, -0.009646f, -0.070803f, 0.066567f, 0.078937f, 0.043901f, -0.040082f, 0.042128f, -0.054769f, -0.000822f, 0.012757f, -0.119962f, 0.009947f, - 0.012001f, 0.056877f, -0.071544f, 0.092608f, 0.036414f, -0.066060f, -0.037413f, 0.028037f, -0.011417f, -0.048347f, -0.059354f, -0.063916f, -0.087262f, 0.064546f, -0.027347f, 0.010333f, -0.133496f, -0.052989f, 0.008455f, 0.001671f, 0.030910f, -0.021096f, 0.005674f, 0.023028f, 0.024249f, -0.063664f, -0.014393f, 0.010595f, 0.035683f, 0.025903f, -0.005229f, -0.024333f, -0.010189f, -0.005111f, 0.033348f, 0.005830f, -0.020395f, -0.002266f, -0.015779f, -0.006025f, 0.030877f, 0.014219f, -0.014816f, 0.032837f, -0.032192f, -0.018845f, -0.023934f, 0.031748f, -0.012218f, 0.004000f, -0.014176f, 0.014003f, -0.044886f, 0.006930f, 0.019284f, 0.007373f, -0.007549f, -0.019543f, -0.016611f, -0.022908f, 0.023333f, 0.005151f, -0.007231f, -0.026270f, 0.027827f, 0.001727f, 0.002434f, 0.004077f, -0.045658f, -0.022467f, -0.029720f, 0.004062f, -0.014802f, 0.000346f, -0.000569f, -0.010565f, -0.025515f, -0.009247f, -0.091211f, -0.012036f, 0.033461f, -0.042760f, -0.039800f, 0.037887f, 0.038440f, 0.007924f, -0.035927f, -0.123531f, -0.017994f, 0.024330f, 0.014940f, 0.053767f, -0.000979f, 0.031305f, -0.007866f, -0.000667f, - -0.015363f, 0.002422f, 0.032956f, 0.003881f, 0.001556f, 0.031901f, -0.008271f, -0.007595f, -0.041588f, -0.003787f, -0.006497f, -0.004622f, 0.007425f, 0.025429f, 0.034908f, -0.006767f, 0.000250f, 0.027236f, -0.005912f, -0.052391f, -0.003353f, -0.046518f, 0.007031f, 0.006341f, -0.060747f, 0.044232f, -0.083793f, 0.018800f, 0.023405f, -0.036898f, -0.002319f, 0.108959f, -0.030579f, 0.036740f, -0.022728f, 0.019406f, -0.081353f, 0.008720f, 0.048087f, -0.001377f, 0.041540f, -0.009709f, 0.004605f, -0.002782f, 0.053020f, -0.034048f, -0.040417f, 0.046618f, -0.042875f, -0.053507f, -0.000355f, -0.085375f, 0.057186f, 0.047071f, -0.016721f, 0.018040f, 0.008213f, -0.000731f, -0.072206f, -0.012186f, -0.005187f, 0.031720f, 0.012366f, -0.030873f, 0.029187f, -0.002369f, -0.036578f, -0.025377f, -0.022592f, 0.004586f, 0.005418f, -0.005388f, -0.000423f, 0.022820f, -0.022479f, -0.006973f, 0.016408f, -0.024830f, -0.012746f, 0.018379f, -0.024601f, 0.001206f, 0.022696f, 0.000931f, -0.005734f, 0.009168f, -0.000338f, 0.001696f, 0.019928f, -0.007608f, -0.005329f, -0.015372f, 0.007060f, -0.009936f, -0.008321f, 0.007891f, - 0.011278f, -0.021484f, 0.004059f, -0.020132f, 0.019555f, -0.022859f, 0.013107f, -0.000888f, -0.003183f, 0.001451f, -0.004035f, -0.003386f, -0.000037f, 0.014486f, -0.044681f, -0.136119f, -0.063728f, -0.020872f, 0.045133f, 0.101180f, -0.091710f, 0.020684f, -0.026193f, -0.092451f, -0.012520f, 0.084100f, 0.022984f, 0.069382f, -0.057603f, 0.017836f, -0.019617f, 0.004629f, 0.041129f, 0.007446f, 0.022578f, -0.012575f, -0.118002f, 0.035723f, 0.006327f, -0.049712f, 0.052155f, 0.040028f, -0.035309f, 0.037054f, 0.004888f, -0.037980f, 0.012344f, -0.023228f, 0.074634f, 0.009724f, 0.030534f, 0.002069f, -0.075528f, -0.060264f, -0.020006f, -0.044485f, 0.050008f, 0.071754f, 0.073618f, 0.059494f, -0.019842f, 0.008874f, -0.059243f, -0.008345f, -0.005496f, -0.024482f, -0.030978f, 0.005759f, 0.006289f, -0.081457f, -0.023543f, -0.031432f, -0.001746f, 0.037471f, -0.039908f, -0.008644f, 0.014714f, 0.000772f, 0.042786f, -0.046161f, -0.001409f, -0.052381f, -0.027398f, -0.038541f, 0.022107f, 0.014808f, 0.042727f, -0.005019f, -0.003912f, -0.049323f, -0.014525f, -0.023057f, -0.005827f, 0.021819f, 0.029396f, 0.060137f, - -0.037679f, 0.011518f, -0.032591f, 0.012559f, 0.022723f, 0.006904f, -0.017742f, -0.006752f, -0.005950f, -0.006751f, -0.002261f, 0.016380f, 0.016941f, -0.004011f, -0.001518f, -0.007265f, -0.011286f, 0.008318f, 0.016851f, 0.006255f, 0.002244f, 0.005134f, -0.013450f, -0.015462f, -0.014697f, 0.025652f, -0.000305f, 0.017960f, 0.014653f, -0.001695f, -0.019058f, -0.020180f, 0.003503f, 0.006532f, -0.015752f, -0.004471f, -0.013662f, 0.011089f, -0.009795f, 0.004250f, 0.003339f, 0.011570f, -0.005110f, -0.005689f, 0.003043f, 0.004652f, -0.007942f, 0.013244f, -0.004056f, 0.035587f, -0.057426f, -0.226690f, -0.119516f, 0.024536f, 0.095404f, 0.213444f, 0.163113f, 0.091875f, 0.030977f, 0.047922f, -0.015153f, -0.089760f, -0.173551f, -0.230955f, -0.058370f, -0.066945f, 0.003535f, 0.112476f, 0.160520f, 0.107573f, 0.143834f, 0.033074f, 0.030548f, -0.016842f, -0.072649f, -0.082406f, -0.066523f, -0.070822f, -0.087428f, -0.070225f, -0.029904f, -0.004558f, -0.000972f, 0.056046f, 0.072905f, 0.139123f, 0.065883f, 0.021590f, 0.057267f, 0.088756f, 0.028443f, 0.016874f, -0.071541f, -0.098188f, -0.160206f, -0.074192f, - -0.083957f, -0.060960f, -0.036083f, -0.028544f, 0.012023f, 0.019644f, 0.067572f, 0.137929f, 0.111215f, 0.121072f, 0.089896f, 0.109825f, 0.081984f, -0.066277f, -0.060469f, -0.152945f, -0.118180f, -0.086765f, -0.194436f, -0.150683f, -0.091912f, 0.007144f, 0.118154f, 0.112263f, 0.133045f, 0.165943f, 0.142243f, 0.076325f, 0.092396f, 0.003472f, -0.035895f, -0.097651f, -0.141324f, -0.142332f, -0.117086f, -0.070693f, -0.014999f, 0.020038f, 0.034505f, 0.039203f, 0.065910f, 0.047250f, 0.077063f, 0.048410f, 0.019442f, 0.012329f, -0.002732f, -0.007789f, -0.001617f, -0.053397f, -0.036910f, -0.007749f, -0.024495f, -0.063749f, -0.017614f, -0.023048f, -0.023403f, -0.004657f, 0.047693f, 0.089473f, 0.074649f, 0.007570f, 0.073380f, 0.051268f, -0.009356f, -0.060504f, -0.095106f, -0.088943f, -0.039913f, -0.044206f, -0.027223f, -0.015555f, 0.025523f, 0.055280f, 0.077359f, 0.087318f, 0.063381f, 0.024345f, 0.027272f, -0.017162f, -0.047665f, -0.081133f, -0.072102f, -0.032432f, -0.002990f, -0.024070f, -0.007479f, 0.022795f, 0.029763f, 0.030020f, 0.029235f, 0.006981f, 0.012309f, 0.018068f, -0.003003f, -0.017382f, - 0.000735f, 0.005411f, -0.012188f, -0.014522f, -0.001818f, 0.004731f, 0.004088f, -0.009548f, -0.004515f, 0.003111f, 0.001533f, -0.008372f, -0.013227f, -0.010679f, 0.003989f, 0.000684f, -0.000608f, 0.007889f, 0.014833f, 0.010978f, 0.011308f, 0.007692f, 0.006184f, -0.000838f, -0.004084f, -0.007052f, -0.009628f, -0.008407f, -0.002862f, -0.006794f, -0.005802f, -0.005031f, 0.005369f, 0.006165f, -0.001815f, -0.002941f, 0.005822f, 0.003303f, -0.000615f, -0.000958f, -0.001445f, -0.004147f, 0.003267f, 0.004447f, 0.002301f, 0.003963f, 0.007776f, 0.007876f, 0.007037f, 0.000537f, -0.002281f, -0.004565f, -0.006886f, -0.013173f, -0.015566f, -0.013244f, -0.008824f, -0.007032f, -0.000320f, 0.006997f, 0.013006f, 0.016085f, 0.018387f, 0.015913f, 0.011718f, 0.005079f, -0.000369f, -0.006990f, -0.012010f, -0.014682f, -0.013413f, -0.013831f, -0.009364f, -0.004441f, -0.000720f, 0.003387f, 0.008708f, 0.009241f, 0.008702f, 0.007740f, 0.006493f, 0.003040f, 0.000120f, -0.002020f, -0.002140f, -0.002632f, -0.002713f, -0.002799f, -0.002014f, -0.001508f, -0.000791f, -0.000423f, -0.000123f, -0.000022f, 0.000262f, 0.000363f, - 0.000454f}, - {-0.002889f, -0.004115f, -0.007908f, 0.004621f, 0.007394f, 0.013114f, 0.003542f, -0.009213f, -0.016381f, 0.003552f, -0.007652f, 0.000647f, 0.005145f, 0.001996f, 0.013258f, -0.010969f, -0.002698f, -0.001498f, -0.000866f, -0.009418f, 0.005802f, 0.002449f, 0.001214f, 0.000246f, -0.004592f, -0.003544f, -0.003324f, -0.001083f, 0.000466f, 0.002208f, -0.003461f, 0.005040f, 0.011875f, -0.000389f, 0.005280f, -0.008426f, -0.004878f, -0.010083f, -0.004852f, 0.010686f, 0.000520f, -0.002195f, 0.001911f, 0.011336f, 0.001233f, 0.005695f, -0.001423f, -0.005339f, -0.001659f, 0.006465f, -0.005556f, 0.010153f, 0.006273f, 0.011449f, 0.005672f, 0.000714f, -0.003496f, -0.007616f, -0.004200f, -0.006623f, -0.001006f, -0.004838f, 0.001921f, 0.000408f, -0.002583f, 0.001664f, -0.002217f, 0.004085f, -0.001011f, -0.001147f, 0.005808f, -0.000593f, -0.000400f, 0.000757f, -0.005594f, 0.002538f, -0.004091f, -0.006634f, -0.003797f, -0.002927f, 0.002894f, -0.000563f, -0.000445f, -0.007524f, -0.001233f, 0.001940f, 0.001493f, -0.003000f, 0.000298f, -0.002966f, 0.001338f, 0.002090f, 0.001589f, 0.000575f, -0.000502f, -0.001219f, - 0.000366f, -0.002340f, -0.001236f, 0.000492f, 0.000366f, 0.001011f, 0.001024f, 0.000909f, 0.000227f, 0.002134f, -0.022852f, -0.005171f, 0.009384f, 0.001650f, 0.012790f, 0.006825f, -0.010515f, 0.002781f, -0.000221f, 0.004193f, -0.003761f, -0.017547f, 0.010140f, 0.006213f, 0.011618f, 0.014516f, 0.012502f, 0.004384f, 0.000176f, -0.017879f, -0.001838f, 0.008215f, -0.008148f, -0.007072f, -0.018668f, -0.001251f, -0.003119f, -0.002158f, -0.004748f, 0.002215f, -0.011142f, 0.005087f, -0.001950f, 0.004720f, 0.001393f, -0.007492f, 0.005788f, 0.004829f, 0.012956f, -0.001506f, -0.010371f, -0.005357f, 0.005618f, 0.002260f, -0.002593f, 0.000540f, 0.004137f, 0.000540f, -0.007578f, -0.000069f, 0.001600f, -0.000805f, 0.000483f, -0.004783f, -0.002096f, -0.006370f, -0.001310f, 0.007847f, 0.002806f, -0.002679f, 0.003353f, -0.001018f, -0.000403f, 0.001192f, -0.009102f, -0.000836f, -0.000451f, 0.005093f, 0.009857f, -0.002914f, -0.000994f, -0.006358f, -0.004924f, 0.002518f, 0.011216f, -0.009925f, -0.001554f, 0.002549f, -0.000539f, -0.002695f, -0.000173f, -0.002628f, 0.003652f, 0.003834f, 0.002026f, 0.006233f, - -0.002964f, -0.001917f, -0.000639f, 0.001466f, -0.001426f, 0.000259f, 0.001009f, 0.000843f, -0.000753f, -0.002667f, 0.001939f, -0.002657f, 0.012626f, 0.004727f, 0.004256f, -0.004258f, 0.000317f, 0.001171f, 0.001195f, -0.021728f, -0.011756f, -0.001003f, -0.005416f, -0.006738f, -0.000349f, -0.005676f, -0.022107f, 0.013148f, 0.003015f, 0.005941f, -0.002338f, 0.004515f, -0.005853f, 0.000259f, 0.000782f, 0.011362f, -0.004060f, -0.002419f, -0.001915f, -0.001946f, -0.001832f, -0.000827f, 0.012324f, -0.002410f, -0.000196f, -0.007048f, -0.000406f, -0.003414f, 0.003997f, 0.002007f, -0.011964f, 0.009246f, -0.012110f, -0.000254f, 0.010596f, -0.001543f, 0.000383f, 0.000785f, -0.000259f, -0.007437f, -0.005283f, 0.012157f, 0.007029f, -0.015120f, -0.008082f, 0.002363f, -0.008879f, -0.006457f, 0.006446f, -0.010890f, 0.002096f, 0.002605f, 0.006197f, 0.012947f, 0.009930f, 0.006057f, 0.004633f, -0.008868f, -0.009232f, -0.007920f, 0.002549f, 0.011261f, 0.004348f, -0.001965f, -0.005058f, 0.003672f, -0.004279f, -0.001889f, 0.002613f, -0.004216f, -0.006360f, -0.000885f, 0.005069f, -0.000954f, -0.004347f, 0.000544f, - 0.000025f, 0.004922f, 0.002047f, 0.004545f, 0.001025f, -0.002132f, -0.002170f, -0.001756f, -0.000917f, -0.000611f, 0.001453f, 0.002843f, 0.003403f, 0.003563f, 0.016602f, -0.004055f, -0.004233f, -0.004966f, 0.004688f, -0.005557f, 0.008122f, -0.015732f, -0.002009f, 0.011684f, 0.006120f, -0.011830f, 0.008766f, 0.014386f, 0.013577f, 0.008661f, 0.001667f, -0.000532f, -0.008868f, -0.011437f, 0.004861f, -0.001093f, 0.011477f, -0.000893f, 0.006866f, -0.007142f, -0.004751f, -0.003829f, 0.001142f, 0.003662f, -0.000645f, -0.013969f, 0.002953f, 0.004848f, 0.003521f, 0.006032f, 0.003702f, -0.007578f, -0.018671f, -0.006007f, 0.002739f, 0.003608f, 0.000883f, -0.000795f, 0.003547f, -0.007656f, -0.000122f, -0.013909f, 0.006506f, -0.014351f, -0.003783f, -0.006082f, -0.009445f, 0.006899f, 0.003050f, 0.002928f, -0.008247f, -0.004007f, -0.002426f, -0.008269f, 0.000784f, -0.000698f, 0.004423f, -0.003542f, -0.006965f, -0.005313f, -0.016525f, 0.005254f, 0.001916f, 0.007103f, 0.010469f, 0.013373f, 0.005219f, -0.005264f, -0.007873f, -0.003713f, 0.007265f, 0.007250f, -0.008205f, 0.008953f, 0.000381f, -0.005817f, - 0.012905f, -0.002500f, 0.002911f, 0.002192f, 0.003786f, -0.000228f, -0.002883f, 0.000839f, 0.004011f, 0.001442f, -0.000634f, 0.004346f, -0.002275f, -0.001780f, -0.003152f, 0.001491f, 0.000392f, -0.001611f, 0.002375f, -0.002303f, -0.004153f, -0.001742f, 0.003148f, -0.000758f, -0.000724f, 0.001134f, 0.008163f, 0.007532f, -0.001461f, 0.005292f, -0.016177f, 0.001763f, -0.007798f, 0.000718f, 0.002251f, -0.010207f, 0.003542f, 0.029391f, 0.003087f, -0.002728f, -0.016754f, 0.023638f, -0.000193f, 0.009860f, 0.001041f, -0.000613f, -0.013053f, 0.012424f, 0.003078f, -0.007046f, 0.001498f, 0.000835f, -0.005297f, 0.004957f, 0.013074f, -0.003959f, 0.013911f, -0.004273f, 0.005868f, -0.000335f, 0.009123f, 0.008124f, 0.009084f, -0.000009f, -0.005176f, 0.007121f, -0.005447f, 0.006260f, -0.001970f, 0.006312f, 0.006096f, 0.005874f, -0.000927f, -0.001949f, 0.002249f, -0.005303f, -0.007660f, -0.019303f, 0.012393f, -0.012519f, 0.008528f, 0.001001f, 0.003503f, -0.002346f, -0.023046f, -0.005065f, -0.006334f, -0.011260f, 0.001363f, 0.006833f, -0.014860f, -0.004759f, 0.006483f, 0.001119f, 0.010248f, 0.018053f, - -0.000651f, -0.005021f, -0.004498f, -0.018981f, 0.005635f, 0.003547f, -0.004375f, 0.000887f, 0.007340f, 0.007585f, 0.002071f, 0.001858f, 0.005270f, 0.000523f, -0.000989f, 0.007995f, 0.004614f, -0.004552f, 0.008128f, 0.005957f, 0.007976f, 0.002399f, -0.001542f, 0.000487f, -0.000687f, -0.000644f, -0.003162f, 0.000968f, -0.001982f, 0.001792f, -0.002464f, 0.003699f, 0.001206f, 0.000273f, 0.002986f, 0.000188f, -0.001110f, 0.000797f, -0.000835f, -0.000361f, -0.001236f, 0.003688f, 0.002157f, 0.000688f, 0.002538f, -0.000936f, 0.004132f, 0.000479f, 0.001219f, -0.000514f, 0.001024f, -0.000702f, -0.002624f, 0.001008f, -0.008325f, -0.010068f, -0.000931f, 0.005493f, -0.003188f, -0.004836f, -0.007320f, 0.002199f, 0.013464f, 0.006060f, 0.002165f, -0.030443f, -0.013939f, -0.004205f, 0.006293f, -0.003596f, 0.010371f, 0.034838f, 0.010880f, -0.012734f, 0.002045f, -0.015074f, -0.004839f, 0.010635f, -0.011975f, -0.003016f, 0.015584f, 0.003786f, -0.003822f, 0.002246f, 0.008844f, -0.005242f, 0.004324f, 0.004651f, 0.004627f, -0.008600f, 0.004018f, -0.004009f, -0.004863f, -0.012726f, -0.004893f, -0.007428f, - -0.014136f, 0.006245f, 0.000569f, -0.000941f, 0.014429f, 0.010503f, 0.003761f, 0.011543f, 0.000154f, -0.014574f, 0.012375f, -0.001375f, -0.009908f, -0.007868f, -0.014424f, 0.000673f, 0.017569f, 0.001205f, -0.007603f, 0.007437f, -0.012922f, -0.008142f, 0.006834f, -0.010528f, -0.013920f, -0.007360f, -0.004318f, 0.007903f, -0.012284f, -0.003828f, -0.005661f, 0.015922f, 0.002404f, -0.005533f, 0.007923f, -0.004792f, -0.005697f, 0.000889f, 0.012728f, -0.002388f, 0.000953f, 0.006963f, 0.004116f, -0.016126f, -0.000493f, 0.009798f, 0.004795f, 0.005696f, -0.001186f, -0.003158f, 0.007352f, -0.004345f, 0.001376f, -0.003572f, 0.002192f, 0.002671f, 0.003869f, -0.008209f, 0.000185f, 0.000798f, 0.002194f, 0.000443f, 0.000229f, 0.003760f, -0.000573f, -0.000792f, -0.003456f, 0.002740f, 0.003937f, 0.010674f, 0.007730f, -0.019709f, 0.018835f, -0.007002f, 0.001801f, -0.008579f, 0.016142f, -0.002214f, -0.010757f, -0.035249f, -0.004640f, 0.018392f, 0.004611f, -0.027468f, 0.012624f, 0.000044f, -0.005565f, -0.008767f, -0.007081f, -0.002658f, -0.016302f, -0.002702f, 0.013314f, 0.017299f, 0.020590f, 0.012514f, - 0.018783f, -0.006070f, 0.014812f, 0.007160f, -0.029005f, -0.000628f, 0.007647f, 0.010386f, 0.005116f, -0.009971f, 0.000650f, -0.002038f, 0.010343f, -0.017378f, -0.006189f, 0.013013f, -0.004199f, 0.007340f, 0.003906f, -0.011560f, -0.012818f, -0.006609f, -0.019247f, -0.005451f, -0.005856f, 0.007986f, 0.002959f, -0.011132f, -0.002489f, -0.023829f, -0.005939f, 0.009797f, -0.006899f, -0.023548f, -0.000274f, 0.013447f, -0.028548f, 0.008348f, 0.004842f, 0.009143f, -0.013496f, -0.006268f, -0.012823f, 0.001041f, -0.003798f, -0.014576f, -0.003770f, -0.002418f, 0.008867f, 0.004999f, 0.021481f, 0.001397f, 0.000301f, 0.003450f, -0.001550f, -0.010812f, 0.013605f, 0.004752f, -0.005500f, 0.011891f, 0.002221f, -0.005862f, 0.002024f, -0.000340f, 0.007280f, 0.001683f, 0.001483f, 0.004520f, -0.003778f, 0.000190f, -0.004063f, 0.000016f, -0.003225f, 0.003323f, -0.001282f, 0.001452f, 0.004106f, 0.000597f, -0.002509f, 0.003779f, 0.000996f, 0.004019f, 0.001134f, -0.001140f, 0.001514f, 0.000391f, 0.005422f, -0.022029f, 0.004793f, 0.017469f, 0.022541f, 0.016772f, 0.017137f, 0.006556f, -0.012045f, 0.011968f, - 0.020827f, -0.031066f, 0.015439f, 0.015425f, -0.033262f, -0.008807f, 0.008062f, 0.035668f, -0.002878f, -0.002382f, -0.008611f, -0.010131f, 0.044173f, 0.021836f, 0.006070f, 0.005426f, 0.022871f, -0.000530f, -0.003578f, -0.008694f, 0.003347f, -0.020021f, -0.018057f, -0.004218f, 0.005481f, 0.013204f, 0.005961f, 0.002907f, -0.006866f, 0.001171f, -0.014699f, 0.005964f, -0.021745f, 0.021105f, -0.002458f, -0.010694f, -0.012536f, -0.014332f, -0.021936f, 0.003657f, -0.021236f, -0.007236f, 0.014439f, -0.003496f, -0.007327f, -0.007088f, -0.003467f, -0.018218f, -0.012652f, -0.008281f, -0.007791f, -0.004259f, 0.006573f, 0.003584f, 0.001023f, 0.000835f, -0.016066f, 0.027393f, 0.015743f, 0.000251f, -0.002102f, 0.036068f, -0.004441f, -0.006392f, -0.008962f, -0.018486f, -0.005100f, 0.011963f, 0.011567f, -0.001933f, 0.014092f, -0.028302f, 0.008257f, -0.010887f, 0.002628f, 0.010688f, -0.003844f, -0.000402f, 0.001696f, 0.000768f, 0.003411f, -0.004586f, 0.005181f, 0.006586f, -0.006403f, 0.002451f, 0.003489f, 0.004235f, 0.011445f, -0.008822f, -0.000853f, 0.001048f, -0.000277f, 0.002520f, 0.001216f, 0.002636f, - 0.003566f, -0.003324f, 0.002271f, -0.001165f, 0.000220f, -0.006355f, -0.001392f, -0.001643f, 0.005190f, -0.005403f, 0.040959f, 0.014105f, 0.008806f, 0.019970f, -0.022162f, -0.013269f, 0.012958f, 0.013767f, 0.030451f, 0.004553f, 0.008624f, -0.020208f, -0.000983f, 0.010229f, -0.026533f, -0.008450f, 0.010927f, -0.008765f, 0.000554f, 0.007478f, 0.019988f, -0.006549f, 0.007945f, 0.004202f, 0.004568f, 0.017032f, 0.014922f, 0.018140f, -0.013948f, -0.009331f, 0.019711f, -0.024592f, -0.007999f, -0.008066f, -0.001444f, -0.006565f, -0.015593f, 0.015510f, -0.000339f, -0.016934f, 0.001019f, -0.006603f, -0.017562f, -0.022027f, -0.012107f, -0.013162f, 0.026378f, -0.008226f, -0.006451f, -0.015398f, -0.001078f, -0.007787f, 0.004256f, 0.030966f, -0.005576f, -0.009991f, 0.005460f, -0.001728f, 0.018010f, -0.020561f, 0.035176f, 0.007113f, -0.033445f, -0.024362f, 0.009078f, -0.022550f, 0.000575f, -0.024152f, 0.000316f, 0.005285f, -0.002899f, 0.026296f, 0.033040f, -0.015516f, 0.004186f, -0.006342f, -0.024093f, -0.008980f, -0.013029f, -0.015758f, -0.003443f, 0.012028f, -0.008043f, -0.018590f, 0.012575f, 0.000903f, - -0.009917f, -0.008461f, 0.004284f, 0.007024f, -0.002807f, -0.001870f, -0.009324f, 0.000604f, -0.008593f, -0.001681f, -0.004197f, 0.006224f, 0.007144f, 0.001744f, -0.008528f, 0.001014f, 0.000777f, 0.005725f, 0.000089f, -0.002086f, 0.000687f, -0.010894f, -0.000991f, -0.006111f, -0.004177f, 0.000928f, 0.002691f, -0.005692f, 0.004699f, -0.003283f, -0.002923f, 0.007524f, -0.002757f, -0.007197f, -0.036101f, 0.013145f, 0.073537f, -0.013149f, -0.001215f, -0.032714f, -0.013978f, 0.021593f, -0.003563f, 0.042031f, 0.025090f, 0.023173f, -0.000209f, 0.017804f, -0.035062f, 0.031216f, 0.015983f, 0.001153f, 0.003750f, -0.020452f, 0.008362f, -0.000638f, 0.031795f, 0.017611f, 0.021058f, -0.008135f, 0.001707f, 0.005260f, -0.021998f, -0.017774f, -0.008330f, 0.009539f, 0.037141f, -0.010740f, -0.013060f, -0.013112f, -0.007542f, 0.004546f, -0.024258f, -0.007261f, -0.001974f, -0.013104f, -0.025659f, -0.005669f, -0.032445f, -0.011982f, 0.018458f, -0.022613f, -0.010138f, -0.004719f, 0.001396f, -0.036439f, -0.022174f, -0.005035f, -0.004173f, -0.007218f, 0.022379f, 0.009695f, 0.001117f, 0.013420f, 0.023063f, -0.014759f, - -0.006377f, -0.020012f, 0.008574f, -0.015805f, 0.012804f, 0.014842f, 0.017817f, 0.032788f, 0.008993f, -0.025224f, -0.004446f, 0.055163f, 0.017682f, 0.030882f, 0.014651f, 0.009169f, -0.002534f, 0.003491f, -0.013519f, -0.017078f, 0.007180f, 0.005233f, -0.017056f, 0.004137f, 0.011250f, 0.010235f, -0.016397f, 0.012231f, 0.003872f, 0.008733f, 0.010080f, -0.000369f, 0.004661f, 0.008434f, 0.003193f, 0.009953f, -0.001435f, 0.001921f, -0.003632f, -0.007219f, 0.001087f, 0.008653f, 0.000925f, -0.004190f, 0.014014f, 0.008916f, 0.007440f, 0.000029f, -0.002160f, -0.002659f, -0.000795f, 0.000203f, -0.002772f, 0.004777f, 0.003528f, 0.003701f, 0.003957f, 0.001932f, -0.008120f, 0.038059f, 0.041713f, -0.042235f, 0.010267f, 0.030888f, 0.018620f, -0.011814f, -0.022518f, -0.019461f, 0.043462f, 0.003528f, 0.016300f, 0.022799f, -0.013092f, 0.006410f, 0.009470f, -0.026680f, -0.028414f, 0.022992f, 0.007729f, -0.041256f, -0.009618f, 0.053580f, 0.025596f, -0.000122f, -0.030686f, 0.010020f, 0.007929f, 0.032586f, 0.010657f, -0.015897f, 0.021212f, 0.003775f, -0.009103f, -0.003095f, -0.006580f, -0.025420f, - -0.012153f, 0.003907f, 0.004253f, -0.030337f, -0.032900f, -0.019371f, -0.009543f, -0.036022f, 0.021278f, -0.002226f, -0.025750f, 0.004914f, 0.000460f, -0.011071f, -0.003253f, 0.007779f, -0.000360f, 0.008192f, 0.009297f, 0.014575f, -0.014412f, -0.016857f, 0.022184f, 0.045371f, 0.020350f, 0.012440f, 0.032881f, -0.006131f, 0.017838f, 0.044116f, 0.026756f, 0.004229f, 0.004740f, -0.013685f, -0.027138f, 0.026293f, -0.025863f, 0.011635f, -0.010474f, 0.008116f, -0.033807f, 0.016232f, -0.000636f, -0.010876f, -0.006542f, 0.019229f, -0.018330f, -0.008993f, -0.004906f, 0.003043f, -0.000659f, 0.005798f, -0.007413f, -0.000758f, -0.013170f, -0.003122f, -0.000993f, 0.002546f, -0.004120f, 0.004654f, -0.005100f, 0.004067f, -0.004597f, 0.014847f, 0.004327f, -0.003566f, -0.007073f, 0.005759f, 0.000348f, 0.005309f, 0.004333f, -0.003269f, 0.003871f, 0.005640f, -0.003895f, 0.001672f, 0.006378f, -0.001747f, 0.002069f, 0.007612f, 0.007416f, 0.013691f, -0.008540f, -0.039496f, 0.011167f, -0.019013f, -0.008729f, -0.014686f, -0.002418f, 0.033914f, 0.033607f, -0.067800f, 0.021063f, 0.021581f, -0.021007f, -0.034474f, - -0.044933f, 0.007981f, -0.013150f, 0.008371f, -0.015635f, -0.012321f, -0.007233f, 0.042033f, 0.010712f, -0.003626f, -0.000647f, -0.006662f, -0.012477f, 0.010649f, 0.007065f, -0.000174f, 0.016928f, 0.003683f, -0.003474f, 0.006020f, 0.015375f, 0.043361f, 0.004443f, 0.005349f, -0.021334f, -0.009160f, -0.010054f, -0.010778f, -0.001225f, -0.003607f, 0.014447f, 0.020737f, 0.001074f, 0.023953f, -0.005474f, -0.004057f, -0.004817f, -0.002679f, -0.041922f, 0.047374f, 0.001318f, 0.003342f, -0.003389f, -0.012337f, 0.012677f, -0.003270f, 0.019340f, 0.001066f, -0.018293f, 0.004953f, 0.020503f, -0.014539f, 0.019052f, 0.004574f, -0.028864f, -0.004984f, -0.006083f, -0.052743f, -0.017879f, 0.013434f, 0.013737f, -0.021581f, -0.012258f, 0.012533f, 0.001880f, 0.035175f, -0.027934f, 0.012731f, 0.015863f, -0.002337f, 0.013894f, 0.012712f, 0.015733f, 0.005939f, 0.007087f, 0.006236f, 0.005318f, -0.002417f, -0.002720f, -0.009173f, 0.003786f, 0.013085f, 0.002505f, -0.009742f, -0.003594f, -0.005544f, 0.003288f, -0.004323f, -0.003410f, -0.006529f, 0.008699f, 0.004735f, 0.005991f, 0.000518f, -0.015158f, 0.006017f, - -0.015405f, 0.001081f, 0.002680f, 0.005381f, -0.007204f, -0.003693f, -0.002117f, 0.004918f, 0.009534f, 0.004086f, 0.004138f, 0.001170f, 0.004336f, -0.010604f, 0.034905f, 0.010301f, 0.010998f, -0.024978f, 0.019230f, -0.009795f, 0.018340f, -0.013804f, 0.023551f, -0.020797f, -0.016888f, 0.032228f, 0.004315f, 0.008483f, -0.018663f, -0.042185f, -0.003735f, 0.012743f, 0.003635f, 0.018559f, -0.014853f, 0.002677f, 0.000119f, -0.031421f, -0.022554f, 0.010825f, -0.035524f, -0.023171f, 0.011756f, 0.000469f, -0.037160f, -0.005043f, -0.018356f, 0.024207f, 0.014650f, 0.004628f, -0.008421f, -0.023163f, -0.049579f, 0.017914f, -0.022035f, 0.027627f, -0.007925f, -0.008813f, -0.004308f, -0.012927f, 0.007912f, 0.007464f, -0.039568f, -0.017294f, 0.039582f, 0.034648f, -0.035146f, 0.046389f, 0.002703f, 0.034239f, -0.007811f, -0.007840f, -0.003956f, -0.013090f, 0.017958f, -0.012897f, -0.036883f, -0.019463f, 0.044543f, -0.009606f, -0.008559f, -0.002179f, 0.014031f, 0.009064f, 0.022674f, -0.050510f, 0.015331f, 0.034871f, 0.027600f, -0.010852f, -0.002501f, -0.010680f, -0.022647f, 0.002866f, 0.021465f, 0.033037f, - -0.019770f, -0.020127f, -0.022717f, -0.002092f, -0.003405f, 0.002399f, -0.010703f, 0.005981f, 0.006143f, -0.003665f, -0.001244f, -0.004711f, -0.009701f, 0.010070f, 0.000598f, 0.001722f, -0.014917f, -0.012664f, -0.003039f, -0.016492f, -0.006107f, -0.008164f, 0.002274f, -0.005720f, 0.000432f, 0.013086f, -0.004802f, 0.005578f, 0.000240f, -0.011806f, 0.002776f, -0.005856f, -0.001137f, 0.005371f, 0.011723f, 0.001795f, 0.005171f, 0.010747f, 0.010930f, 0.014107f, -0.003970f, -0.003594f, -0.002076f, 0.014456f, -0.001754f, -0.022868f, -0.000840f, -0.017562f, 0.023866f, 0.018529f, -0.017990f, -0.030653f, -0.025724f, -0.015090f, -0.029816f, -0.001631f, 0.014118f, 0.032769f, -0.005667f, -0.001529f, -0.054800f, 0.032858f, 0.040867f, -0.006443f, -0.022233f, -0.022542f, -0.014006f, 0.061564f, -0.037482f, -0.000089f, -0.004442f, 0.016651f, -0.002780f, 0.070922f, 0.001702f, -0.038526f, -0.010184f, -0.036609f, 0.047815f, 0.041655f, -0.033613f, 0.039189f, 0.009767f, 0.031559f, 0.011745f, -0.059112f, 0.018516f, 0.031711f, -0.041027f, -0.011316f, -0.046549f, -0.023183f, 0.001562f, -0.042783f, -0.036605f, -0.000987f, - -0.029670f, -0.000359f, 0.010357f, -0.010545f, -0.029435f, 0.024179f, 0.021806f, -0.048307f, -0.037033f, 0.020280f, 0.008464f, 0.013058f, 0.024454f, 0.032102f, -0.011860f, -0.017327f, -0.001069f, -0.011208f, -0.000688f, -0.003529f, -0.016305f, 0.006508f, -0.067227f, 0.022947f, 0.032577f, -0.034567f, -0.028625f, 0.021728f, -0.021942f, -0.019736f, -0.009536f, 0.012192f, 0.001619f, 0.041744f, 0.000229f, 0.024422f, -0.002487f, -0.016895f, 0.008946f, 0.012650f, 0.012944f, -0.010870f, 0.000184f, 0.001434f, -0.001634f, -0.006945f, -0.016731f, 0.011069f, 0.017397f, -0.008872f, -0.029373f, 0.007553f, 0.002403f, 0.031112f, -0.003096f, -0.012020f, 0.009457f, 0.003561f, 0.015374f, 0.000095f, -0.009592f, 0.000344f, 0.012508f, 0.009542f, 0.003012f, -0.003215f, 0.002244f, -0.005650f, -0.005005f, -0.014442f, 0.007146f, 0.007092f, -0.010120f, 0.004937f, 0.004229f, 0.002795f, -0.001857f, -0.004777f, 0.001096f, -0.013841f, -0.010473f, 0.000296f, 0.014852f, 0.037125f, 0.069964f, 0.110555f, 0.003080f, -0.045025f, -0.057913f, -0.013776f, 0.002026f, -0.014013f, 0.053541f, 0.040089f, 0.027643f, 0.046505f, - 0.033767f, 0.027252f, 0.001584f, 0.021906f, -0.029077f, 0.040247f, 0.046580f, 0.002914f, 0.048472f, -0.020339f, 0.003730f, 0.011041f, -0.045739f, -0.030834f, -0.011048f, -0.027309f, -0.032138f, -0.004984f, 0.049830f, -0.000937f, -0.009926f, 0.005985f, 0.010449f, -0.007044f, -0.068175f, -0.009559f, 0.017515f, -0.010274f, -0.021060f, 0.008133f, 0.026023f, 0.046387f, 0.011261f, 0.023528f, 0.032767f, 0.040417f, -0.056390f, -0.039187f, 0.021854f, -0.016561f, 0.071210f, -0.007649f, 0.061199f, -0.049761f, 0.029081f, 0.049849f, 0.001682f, 0.007935f, 0.029823f, -0.054365f, -0.025382f, 0.001225f, 0.030729f, 0.000693f, 0.035405f, 0.014269f, 0.013189f, 0.036120f, 0.012909f, -0.004975f, -0.015475f, -0.043038f, -0.010111f, 0.002340f, 0.011198f, 0.000719f, 0.000765f, 0.000819f, -0.023553f, 0.012032f, 0.007996f, 0.020133f, -0.007141f, 0.015118f, 0.024755f, 0.014688f, 0.006147f, -0.000194f, -0.003135f, 0.005149f, -0.008777f, 0.005002f, -0.008394f, 0.000155f, 0.004981f, 0.004986f, -0.007438f, 0.011105f, 0.010698f, 0.013537f, 0.001381f, 0.001008f, 0.005555f, -0.004954f, 0.009143f, -0.006990f, - 0.009238f, 0.021455f, -0.002751f, -0.004183f, 0.001515f, 0.018660f, -0.011638f, 0.004364f, -0.002368f, -0.002813f, -0.003682f, 0.002538f, 0.005034f, 0.008396f, 0.006274f, 0.006406f, 0.017217f, -0.012223f, 0.020455f, -0.010035f, -0.023773f, 0.006914f, 0.079396f, 0.026411f, 0.027888f, 0.057865f, -0.004240f, 0.012233f, 0.025227f, 0.037146f, -0.041345f, -0.033249f, -0.014065f, -0.036474f, -0.006329f, -0.048990f, 0.025217f, 0.038959f, 0.028599f, 0.038681f, -0.026042f, -0.014613f, 0.030067f, 0.023165f, -0.016269f, 0.039204f, 0.023755f, -0.009178f, -0.047981f, 0.026593f, 0.029403f, -0.024614f, -0.003515f, 0.013885f, 0.007067f, -0.038957f, 0.044845f, 0.011779f, 0.048137f, 0.026023f, 0.018958f, -0.026253f, 0.022547f, -0.014034f, 0.073312f, -0.057818f, 0.006483f, 0.021894f, -0.010771f, -0.037401f, 0.023932f, 0.023105f, -0.004387f, 0.022725f, -0.022113f, 0.059448f, -0.027450f, 0.015517f, 0.013175f, -0.038086f, -0.016225f, -0.052514f, 0.022451f, 0.015090f, -0.038688f, 0.036089f, 0.031284f, -0.027157f, 0.022504f, -0.003141f, 0.060749f, 0.019528f, -0.030041f, -0.022447f, -0.021435f, 0.018801f, - -0.012386f, 0.015985f, -0.007491f, 0.003310f, 0.020510f, 0.012531f, 0.010358f, -0.020201f, 0.052276f, 0.005481f, -0.019938f, -0.029874f, 0.025384f, 0.012216f, 0.023976f, -0.013863f, 0.007193f, 0.018536f, 0.039506f, 0.009674f, -0.006233f, 0.032373f, -0.008592f, -0.009804f, -0.004398f, 0.002869f, 0.009060f, -0.019883f, -0.016908f, 0.007084f, -0.014584f, -0.009392f, 0.002086f, -0.007492f, -0.001829f, -0.002905f, -0.014304f, 0.009749f, 0.006066f, -0.028524f, 0.006987f, -0.021434f, -0.012867f, -0.007115f, 0.010538f, 0.005076f, 0.019581f, 0.008038f, -0.000366f, 0.005040f, 0.007336f, 0.007797f, 0.000963f, 0.001851f, 0.004667f, 0.015987f, -0.005148f, -0.002901f, -0.071218f, 0.030553f, -0.060858f, 0.061315f, 0.073871f, -0.004833f, 0.012287f, -0.061577f, -0.001308f, -0.014436f, 0.005460f, 0.034401f, 0.035409f, -0.011598f, 0.018029f, 0.028438f, 0.003961f, 0.011411f, 0.007791f, 0.011248f, -0.008349f, 0.041860f, -0.006626f, 0.008802f, -0.024502f, 0.047219f, 0.009801f, -0.005427f, -0.002194f, 0.042408f, 0.015999f, 0.019546f, 0.047313f, -0.011575f, -0.030155f, 0.057906f, -0.063040f, -0.027881f, - -0.011366f, 0.012978f, 0.040863f, 0.008752f, -0.017494f, -0.018340f, -0.030662f, -0.001483f, -0.005968f, 0.011173f, 0.065887f, 0.063630f, 0.040539f, 0.057332f, -0.005706f, 0.086749f, -0.029644f, 0.023620f, -0.021141f, 0.001293f, 0.027228f, -0.014260f, 0.002949f, -0.027054f, -0.034178f, -0.000180f, -0.021552f, 0.017149f, -0.029173f, 0.042501f, -0.032721f, -0.053151f, -0.021847f, -0.014207f, -0.004887f, 0.062290f, -0.038201f, -0.009549f, -0.005492f, -0.040358f, -0.010084f, 0.022271f, 0.049495f, -0.005159f, -0.002211f, 0.001120f, -0.016290f, -0.034826f, 0.001364f, -0.002298f, -0.005182f, -0.004360f, 0.000023f, -0.020490f, 0.015862f, -0.017673f, 0.019605f, -0.008618f, -0.014922f, -0.017320f, 0.004140f, 0.014673f, -0.010843f, -0.014984f, -0.004849f, 0.011991f, 0.014427f, -0.011239f, 0.006875f, 0.007676f, 0.005281f, 0.007637f, -0.007957f, -0.008329f, 0.004229f, -0.000121f, 0.009247f, -0.012072f, 0.008181f, 0.013303f, -0.000329f, -0.005719f, -0.007045f, 0.011489f, -0.025092f, -0.013071f, 0.025520f, -0.016297f, -0.001367f, -0.005119f, 0.005304f, -0.016764f, 0.011792f, -0.006146f, 0.023040f, 0.019973f, - 0.000312f, -0.024867f, 0.109051f, 0.151403f, 0.046425f, 0.118020f, -0.025851f, -0.082113f, -0.057536f, -0.040239f, 0.019914f, 0.021686f, -0.027369f, -0.044115f, 0.038211f, 0.051364f, 0.030027f, 0.051245f, 0.039549f, 0.009741f, 0.015740f, 0.007723f, -0.002559f, -0.033755f, 0.014898f, -0.039996f, 0.028184f, 0.000233f, -0.037396f, 0.043347f, 0.026254f, 0.020722f, 0.074935f, 0.046015f, -0.021456f, -0.014491f, -0.026939f, -0.031993f, -0.039111f, -0.015477f, 0.001580f, -0.030991f, -0.009572f, 0.064685f, 0.098207f, 0.072284f, 0.009946f, 0.049324f, 0.052697f, 0.080454f, 0.036917f, -0.042683f, -0.069965f, -0.043706f, -0.044615f, 0.026416f, 0.022290f, -0.095763f, -0.065576f, -0.016930f, 0.040458f, 0.087099f, -0.065149f, -0.002601f, -0.056525f, -0.007373f, 0.071332f, -0.039213f, 0.026959f, -0.056875f, -0.009144f, -0.017000f, 0.048167f, -0.053306f, -0.030229f, 0.000865f, 0.021363f, -0.043271f, 0.099535f, -0.023400f, -0.001384f, 0.056508f, -0.024645f, 0.042487f, -0.013357f, -0.035079f, -0.027077f, 0.016518f, 0.001832f, 0.014089f, 0.009026f, -0.031307f, 0.001085f, -0.013207f, 0.038291f, 0.022299f, - 0.006958f, 0.020818f, 0.023964f, 0.001344f, -0.000046f, -0.007508f, -0.023468f, 0.048552f, -0.014732f, 0.010208f, 0.000675f, -0.028080f, 0.001427f, 0.003125f, -0.008575f, -0.018436f, -0.003704f, -0.010798f, 0.003009f, 0.007283f, -0.007906f, 0.001712f, 0.033426f, 0.023681f, -0.003894f, -0.005234f, 0.031717f, -0.013032f, -0.003576f, -0.026368f, -0.037716f, -0.014193f, -0.009655f, -0.004012f, -0.010232f, -0.042752f, -0.083129f, 0.010325f, 0.046536f, -0.038410f, 0.072014f, -0.028513f, 0.028733f, -0.009426f, -0.082852f, -0.042379f, -0.003855f, -0.048704f, -0.111906f, -0.031298f, 0.040608f, 0.062321f, -0.030181f, -0.047851f, -0.099841f, -0.029600f, 0.029692f, -0.019753f, -0.028816f, -0.049565f, 0.011968f, -0.011094f, -0.008255f, -0.009201f, 0.020378f, 0.040309f, -0.031090f, 0.031194f, 0.026646f, -0.031449f, -0.091110f, 0.007606f, 0.007564f, 0.023714f, 0.011185f, 0.059875f, 0.006207f, -0.090587f, 0.000778f, -0.099774f, -0.000282f, 0.034854f, 0.042019f, -0.007587f, 0.005723f, 0.046605f, -0.024110f, -0.017530f, -0.031120f, 0.030229f, 0.022056f, -0.014223f, 0.036015f, -0.011008f, 0.015265f, 0.016857f, - 0.058832f, 0.007994f, -0.020657f, -0.062623f, -0.021470f, 0.032761f, 0.028443f, 0.050042f, 0.072811f, 0.125942f, 0.062759f, 0.030435f, -0.032615f, -0.126100f, -0.034482f, -0.018050f, 0.096689f, -0.016044f, 0.006133f, -0.000234f, -0.030355f, 0.004327f, 0.028421f, 0.013697f, -0.000568f, 0.001563f, 0.000619f, 0.000354f, 0.046919f, -0.016729f, -0.013863f, -0.015360f, 0.032567f, 0.012618f, 0.016514f, -0.012596f, -0.039858f, 0.013349f, 0.016963f, -0.017999f, -0.002616f, 0.010350f, -0.002233f, 0.003291f, -0.007032f, -0.057237f, -0.018781f, -0.004412f, 0.026402f, 0.041522f, 0.004963f, -0.034155f, -0.033481f, 0.015554f, 0.005619f, -0.002934f, -0.005645f, 0.002127f, -0.003524f, -0.001453f, 0.030724f, -0.033497f, 0.004323f, -0.028741f, 0.030728f, -0.016593f, 0.000689f, -0.041473f, -0.006521f, 0.028458f, -0.008754f, 0.015507f, -0.023983f, 0.012153f, -0.012604f, 0.019717f, -0.019253f, 0.006747f, -0.081387f, -0.024776f, 0.056611f, -0.027876f, -0.023379f, -0.006029f, -0.018256f, -0.065255f, -0.072546f, -0.106141f, -0.033499f, 0.000203f, -0.008205f, 0.069473f, 0.019130f, 0.090740f, 0.056003f, 0.028093f, - -0.012658f, -0.033546f, -0.006232f, 0.127245f, 0.007925f, 0.036660f, 0.020700f, -0.016002f, 0.063436f, -0.026486f, 0.051212f, -0.055924f, -0.005522f, -0.040316f, 0.048204f, -0.067904f, -0.014254f, 0.020688f, 0.021413f, 0.021725f, -0.059260f, 0.042144f, -0.067830f, 0.013725f, -0.033202f, -0.022847f, 0.067612f, 0.003919f, 0.004504f, 0.023171f, -0.025574f, -0.001597f, 0.017727f, -0.082476f, 0.002299f, 0.018903f, -0.011906f, 0.052967f, -0.023667f, -0.010493f, 0.089360f, -0.033936f, -0.074190f, 0.000067f, -0.027963f, 0.005880f, -0.005529f, -0.004047f, -0.059521f, 0.031727f, -0.009608f, -0.081472f, 0.049052f, -0.100876f, 0.019664f, -0.023259f, -0.039770f, -0.063844f, -0.008097f, 0.017038f, 0.029401f, 0.002403f, 0.023832f, 0.029165f, -0.034641f, 0.061141f, -0.014075f, 0.016171f, -0.000695f, 0.029044f, -0.001209f, -0.003566f, -0.009845f, 0.017050f, -0.036537f, -0.005017f, 0.012134f, 0.007637f, -0.014119f, -0.000548f, -0.015818f, -0.021563f, 0.011074f, 0.008351f, 0.016290f, 0.009984f, -0.004487f, 0.012092f, 0.036637f, -0.018446f, -0.018834f, 0.005952f, -0.001627f, 0.006712f, 0.027220f, -0.004322f, - 0.014909f, 0.013315f, 0.014146f, -0.018870f, -0.021866f, -0.005966f, -0.001605f, -0.023627f, -0.001147f, -0.005136f, 0.009941f, -0.025807f, 0.007734f, -0.011765f, -0.033922f, -0.122971f, -0.126416f, -0.107713f, -0.053666f, 0.226721f, 0.071885f, -0.026850f, -0.028123f, -0.110244f, -0.234945f, -0.025344f, 0.064680f, 0.080470f, 0.035229f, -0.035089f, -0.026024f, -0.068371f, -0.075507f, 0.058888f, -0.054089f, 0.143373f, 0.107693f, -0.164573f, 0.054711f, 0.022979f, -0.033675f, 0.014078f, 0.120082f, 0.018226f, 0.083153f, 0.164121f, -0.034465f, -0.132622f, 0.007272f, -0.021647f, -0.123715f, -0.032840f, 0.061216f, -0.004325f, 0.075119f, 0.120959f, 0.011653f, -0.102692f, -0.202390f, -0.173419f, -0.155125f, -0.015240f, 0.152141f, 0.044271f, 0.041265f, 0.023904f, -0.040204f, -0.202643f, -0.126625f, -0.064115f, -0.023966f, 0.013682f, 0.046942f, 0.045931f, 0.058356f, 0.060104f, 0.074105f, -0.086614f, -0.030762f, -0.070699f, -0.005257f, -0.077433f, 0.049767f, 0.050102f, 0.101030f, 0.112511f, 0.053987f, 0.002953f, -0.028834f, -0.019261f, -0.136326f, -0.107877f, 0.096692f, 0.151294f, 0.102968f, 0.121174f, - -0.028021f, -0.052180f, -0.107729f, -0.060416f, 0.032853f, 0.001647f, 0.008206f, 0.035112f, 0.012095f, 0.009939f, -0.025532f, -0.033450f, -0.016501f, -0.024899f, 0.001735f, 0.027918f, 0.008264f, 0.011743f, -0.005280f, 0.016935f, -0.027945f, 0.020754f, -0.007819f, -0.025133f, -0.025413f, -0.006363f, -0.042766f, -0.011833f, -0.025852f, 0.029177f, 0.031910f, 0.016671f, 0.012815f, -0.026746f, -0.057412f, -0.055949f, 0.016071f, -0.003758f, 0.026935f, 0.024702f, 0.013038f, -0.040265f, -0.020587f, -0.038236f, -0.060838f, 0.020234f, 0.037852f, 0.016410f, 0.002020f, 0.043282f, -0.015953f, -0.226272f, -0.253338f, -0.172226f, -0.177085f, -0.047160f, 0.199096f, 0.134088f, 0.214802f, 0.239056f, 0.363184f, 0.241141f, 0.249744f, 0.161058f, -0.012007f, -0.179234f, -0.309745f, -0.366178f, -0.317590f, -0.250717f, -0.181103f, -0.043845f, -0.008887f, -0.026194f, 0.009561f, 0.078866f, 0.130220f, 0.180168f, 0.157015f, 0.213519f, 0.206648f, 0.266538f, 0.244212f, 0.068460f, 0.164058f, -0.035569f, 0.045171f, 0.032922f, 0.009673f, -0.022727f, -0.237210f, -0.285364f, -0.364265f, -0.427915f, -0.388508f, -0.216316f, - -0.191682f, -0.158205f, -0.197535f, -0.229288f, -0.048630f, 0.055885f, 0.144339f, 0.210617f, 0.305640f, 0.364365f, 0.468528f, 0.617404f, 0.600249f, 0.455262f, 0.370071f, 0.307307f, 0.163201f, 0.258017f, -0.104212f, -0.210914f, -0.503543f, -0.577529f, -0.717081f, -0.689746f, -0.629999f, -0.597864f, -0.576640f, -0.355770f, -0.219647f, -0.120208f, 0.322898f, 0.327980f, 0.502551f, 0.644363f, 0.559603f, 0.504564f, 0.511411f, 0.400901f, 0.306630f, 0.167672f, 0.022766f, -0.002981f, -0.094018f, -0.115631f, -0.166362f, -0.216905f, -0.296596f, -0.321847f, -0.291915f, -0.337761f, -0.260017f, -0.239879f, -0.225282f, -0.199014f, -0.101733f, -0.020890f, 0.106217f, 0.216929f, 0.204809f, 0.317414f, 0.352161f, 0.386919f, 0.458178f, 0.369414f, 0.216759f, 0.107129f, -0.064936f, -0.169268f, -0.167931f, -0.326806f, -0.301355f, -0.414399f, -0.328659f, -0.343660f, -0.219496f, -0.231133f, -0.133951f, -0.018171f, 0.116997f, 0.173763f, 0.308727f, 0.357508f, 0.348603f, 0.336943f, 0.329981f, 0.251981f, 0.090996f, -0.059153f, -0.082719f, -0.110156f, -0.119640f, -0.137934f, -0.160925f, -0.151667f, -0.110330f, -0.122100f, - -0.108305f, -0.096284f, -0.067164f, -0.032002f, -0.019775f, -0.016853f, 0.005609f, 0.018822f, 0.014540f, 0.017178f, 0.049108f, 0.060765f, 0.065960f, 0.059358f, 0.046411f, 0.047234f, 0.073841f, 0.051288f, 0.042982f, 0.040507f, 0.038337f, 0.015062f, -0.002238f, -0.020718f, -0.014503f, -0.020342f, -0.024579f, -0.036510f, -0.028102f, -0.025590f, -0.029419f, -0.040146f, -0.029542f, -0.027540f, -0.031123f, -0.033503f, -0.017677f, -0.013882f, -0.006764f, -0.005388f, 0.002096f, 0.013887f, 0.025895f, 0.021373f, 0.020217f, 0.019982f, 0.024719f, 0.019707f, 0.013936f, 0.007556f, 0.011534f, 0.007879f, 0.006334f, 0.003464f, 0.002038f, -0.004902f, -0.001705f, 0.004758f, 0.007409f, 0.002290f, 0.001473f, -0.000845f, 0.002183f, -0.001719f, -0.009224f, -0.014043f, -0.011794f, -0.013649f, -0.013490f, -0.013652f, -0.010682f, -0.010970f, -0.008353f, -0.004519f, 0.000102f, 0.000400f, 0.002361f, 0.001218f, 0.002939f, 0.003516f, 0.005495f, 0.006157f, 0.008012f, 0.007605f, 0.008158f, 0.006444f, 0.005668f, 0.003647f, 0.002697f, 0.001132f, 0.000465f, -0.000508f, -0.000665f, -0.001159f, -0.001228f, -0.001318f, - -0.001204f} - }, - { - {0.024821f, 0.002780f, -0.011035f, 0.003700f, -0.007001f, 0.001760f, -0.004582f, -0.002911f, -0.006105f, 0.004225f, 0.007328f, 0.002087f, 0.002239f, -0.013634f, 0.002605f, 0.000186f, 0.004164f, 0.005132f, 0.002782f, 0.007752f, -0.001709f, -0.004412f, 0.000761f, 0.009277f, -0.000004f, -0.007188f, -0.000781f, 0.007893f, 0.004251f, 0.000813f, 0.000015f, 0.002193f, -0.000264f, 0.000567f, 0.001475f, -0.000290f, -0.002896f, -0.000372f, 0.000009f, 0.003082f, -0.004709f, -0.010967f, 0.008009f, 0.008026f, 0.006984f, 0.006566f, -0.000400f, 0.003569f, 0.006242f, -0.006661f, -0.001551f, -0.000203f, -0.008880f, 0.001965f, 0.000591f, 0.007959f, 0.000773f, 0.004451f, 0.000081f, 0.010017f, 0.005046f, -0.001495f, 0.007003f, 0.004244f, -0.002342f, -0.008225f, 0.002001f, 0.002118f, -0.002218f, 0.000593f, -0.004710f, -0.001240f, 0.004145f, 0.002904f, 0.003436f, 0.008263f, -0.001424f, -0.002629f, 0.001082f, 0.004908f, 0.011321f, -0.006702f, 0.002984f, 0.003058f, 0.003266f, -0.000358f, -0.000811f, 0.003498f, -0.002007f, 0.000081f, 0.001620f, -0.002155f, -0.000416f, 0.000309f, 0.000550f, -0.001410f, - -0.002155f, 0.001316f, -0.000561f, 0.000250f, -0.000817f, 0.002068f, -0.000308f, 0.002463f, -0.000635f, 0.002191f, -0.000097f, 0.002072f, 0.021072f, -0.014121f, 0.004736f, 0.011851f, 0.002757f, 0.008345f, 0.010117f, -0.009235f, 0.001917f, -0.000866f, 0.003927f, -0.011704f, -0.009287f, -0.001755f, 0.009066f, 0.012281f, -0.004733f, -0.004104f, 0.005887f, -0.010023f, -0.013379f, -0.002498f, -0.015731f, 0.005351f, 0.005203f, 0.001391f, -0.009778f, -0.009970f, 0.003521f, -0.005819f, 0.001332f, -0.000331f, 0.010347f, 0.010896f, 0.009865f, -0.001646f, 0.006911f, -0.010862f, 0.004700f, -0.006424f, -0.000595f, 0.000528f, 0.008445f, -0.009172f, -0.008112f, 0.000012f, 0.011112f, 0.004532f, 0.004338f, -0.006787f, 0.003762f, 0.002701f, -0.003282f, -0.013952f, -0.002257f, -0.004772f, -0.006109f, -0.005558f, 0.006370f, -0.005910f, -0.001892f, 0.001384f, 0.003956f, 0.009913f, -0.003825f, -0.000303f, -0.007528f, -0.003716f, 0.001561f, -0.010499f, -0.000645f, 0.002777f, 0.007137f, -0.002338f, -0.005405f, -0.002806f, -0.010856f, 0.005067f, 0.003190f, 0.000555f, -0.000880f, -0.009462f, 0.003870f, 0.000700f, - -0.003338f, 0.003335f, -0.001328f, 0.000752f, 0.003121f, 0.000227f, 0.000655f, 0.003539f, 0.001626f, 0.000664f, 0.000108f, 0.002818f, 0.001084f, -0.000634f, 0.001213f, 0.001614f, 0.003360f, -0.007216f, -0.013264f, -0.003134f, 0.002554f, -0.003932f, -0.006600f, -0.003556f, -0.013222f, -0.007346f, 0.014450f, -0.000342f, -0.006074f, 0.007768f, -0.011162f, -0.002381f, -0.013979f, -0.002726f, -0.010968f, -0.005627f, 0.013381f, 0.000918f, -0.002451f, -0.014614f, -0.009031f, -0.003121f, -0.006134f, 0.002739f, -0.007676f, 0.001002f, 0.005142f, 0.015963f, 0.007945f, 0.006130f, 0.007040f, 0.012966f, -0.010475f, 0.000104f, -0.002979f, -0.008021f, 0.003634f, -0.001457f, -0.002984f, -0.008406f, 0.004734f, 0.009311f, 0.001183f, -0.006363f, -0.003994f, 0.023473f, 0.000331f, -0.006445f, -0.009069f, -0.013702f, -0.018337f, -0.002083f, -0.009395f, 0.002466f, -0.001651f, 0.005425f, 0.001201f, 0.002746f, -0.008297f, 0.001513f, 0.001632f, 0.011483f, 0.004038f, -0.008173f, 0.000710f, -0.002378f, -0.002261f, -0.001766f, 0.004258f, 0.006270f, 0.006144f, -0.005268f, -0.005127f, 0.003626f, 0.001846f, 0.002456f, - 0.002672f, -0.001900f, -0.007998f, -0.009429f, -0.000904f, 0.001991f, -0.002068f, 0.001253f, 0.000308f, -0.001067f, -0.001798f, -0.002785f, -0.000936f, -0.000335f, -0.001580f, -0.003121f, 0.000528f, 0.001347f, -0.001581f, 0.000890f, -0.001361f, 0.000569f, -0.001765f, -0.000755f, 0.000639f, 0.000780f, -0.002176f, 0.000612f, -0.000677f, -0.004095f, 0.000696f, -0.001275f, 0.002687f, -0.001640f, -0.001065f, -0.000413f, -0.032586f, 0.012746f, -0.005922f, 0.005328f, -0.013555f, -0.005514f, -0.010640f, -0.009723f, 0.000534f, -0.003127f, -0.006717f, 0.016450f, 0.004163f, -0.001625f, -0.010163f, -0.003262f, 0.004523f, -0.011579f, -0.006219f, -0.011029f, -0.006228f, 0.015731f, 0.001403f, 0.010465f, -0.001149f, -0.000183f, -0.002799f, 0.002914f, 0.002777f, -0.008462f, -0.000043f, 0.002442f, 0.004580f, 0.017091f, -0.009123f, -0.010467f, -0.002212f, 0.018915f, 0.005816f, 0.020137f, 0.001628f, 0.001798f, -0.003732f, 0.009918f, -0.001897f, 0.014653f, -0.001662f, -0.001770f, -0.002813f, -0.006177f, 0.006083f, 0.001845f, -0.005422f, 0.004226f, 0.005367f, 0.010166f, -0.006081f, -0.000564f, -0.002011f, 0.009053f, - -0.003898f, -0.001577f, -0.003608f, -0.002369f, 0.002005f, -0.003018f, 0.000870f, 0.001501f, -0.002412f, 0.002218f, -0.015262f, 0.001413f, 0.009599f, 0.003407f, 0.012921f, 0.001039f, 0.001194f, 0.003135f, 0.008157f, 0.013362f, -0.009057f, 0.001265f, -0.000902f, 0.003144f, -0.000627f, -0.000348f, 0.003801f, 0.008666f, 0.003126f, 0.004249f, 0.000253f, -0.001514f, -0.002478f, 0.001173f, 0.004180f, -0.001542f, 0.001778f, 0.002012f, 0.001858f, -0.000078f, 0.000675f, 0.003698f, -0.000874f, 0.000982f, -0.000371f, 0.004272f, 0.002249f, -0.001364f, -0.000485f, 0.004600f, 0.002108f, -0.001352f, 0.003127f, 0.001898f, -0.004318f, -0.006753f, -0.003234f, 0.000050f, -0.015859f, -0.002483f, 0.000345f, -0.007790f, -0.028220f, -0.006688f, -0.005936f, -0.012179f, -0.002226f, -0.002980f, 0.017982f, -0.005968f, 0.013644f, 0.006509f, 0.009893f, -0.018063f, -0.008023f, -0.018253f, -0.016968f, 0.000194f, 0.003411f, 0.010951f, -0.004998f, -0.007860f, -0.004782f, -0.012274f, 0.002851f, 0.005894f, 0.006714f, 0.004238f, -0.003608f, 0.004866f, -0.008155f, 0.001112f, -0.014853f, 0.005641f, -0.003703f, 0.002272f, - 0.003483f, 0.005830f, 0.006161f, -0.005526f, 0.000395f, 0.014771f, -0.007634f, 0.007272f, 0.007569f, -0.000266f, 0.004598f, 0.007378f, -0.002793f, 0.003038f, 0.007216f, 0.000605f, 0.012600f, -0.006297f, -0.008455f, -0.003949f, 0.004223f, 0.000184f, -0.016385f, -0.008172f, -0.018172f, -0.019726f, -0.003249f, 0.005617f, -0.016108f, 0.007469f, -0.002495f, -0.000066f, -0.005423f, 0.005668f, -0.009531f, -0.001325f, -0.003241f, -0.013426f, -0.011897f, -0.003763f, 0.007280f, 0.000455f, 0.006259f, -0.002354f, 0.004096f, 0.003399f, -0.007427f, 0.000268f, -0.001373f, 0.004499f, -0.004971f, -0.008294f, -0.002667f, 0.001389f, 0.000109f, -0.003052f, 0.001563f, -0.001806f, -0.000664f, 0.001589f, -0.000347f, 0.000327f, -0.000072f, -0.001704f, -0.000322f, -0.001646f, -0.001161f, -0.000981f, 0.000051f, 0.001113f, 0.000195f, 0.002659f, 0.001020f, -0.000936f, 0.009341f, -0.026275f, -0.001110f, 0.008390f, 0.005348f, -0.013860f, -0.001550f, -0.008753f, 0.002454f, 0.002864f, 0.002073f, -0.015146f, -0.020372f, -0.013802f, 0.002551f, -0.010993f, 0.012386f, 0.004068f, -0.019618f, 0.014475f, 0.012661f, 0.010105f, - 0.009012f, -0.009618f, 0.016231f, 0.004455f, 0.000014f, -0.006056f, 0.005571f, 0.009855f, -0.008708f, -0.012765f, 0.004931f, -0.004679f, -0.015958f, -0.001928f, -0.015398f, -0.005435f, 0.028234f, -0.007273f, -0.012514f, -0.015438f, 0.000994f, 0.002795f, 0.011302f, 0.004692f, -0.010179f, 0.009606f, -0.001084f, -0.007845f, -0.010594f, -0.011123f, 0.017427f, 0.008000f, 0.011020f, -0.007999f, -0.011193f, 0.005356f, 0.002901f, -0.011367f, -0.000493f, -0.006867f, 0.011290f, -0.001894f, 0.001087f, -0.013470f, 0.008859f, 0.007617f, -0.007734f, -0.004755f, -0.004772f, 0.015832f, 0.000262f, 0.002566f, -0.004421f, 0.010943f, -0.010818f, -0.018222f, -0.008197f, 0.001898f, -0.003486f, 0.010382f, -0.002017f, -0.000867f, -0.010739f, -0.005399f, 0.004722f, 0.000918f, -0.007636f, -0.004714f, 0.006596f, 0.003842f, -0.002048f, 0.000594f, 0.000129f, 0.000310f, -0.002087f, 0.003159f, 0.001286f, 0.004740f, 0.000722f, 0.001088f, 0.000171f, 0.002238f, -0.000895f, 0.003093f, -0.003625f, 0.004121f, -0.000416f, -0.002051f, -0.014597f, -0.001021f, 0.003097f, -0.003961f, -0.011754f, -0.017238f, -0.013901f, 0.013183f, - 0.001167f, 0.016252f, 0.019464f, 0.018906f, 0.002509f, 0.026101f, 0.005942f, -0.003336f, 0.011836f, 0.008964f, 0.024067f, 0.003142f, 0.013659f, -0.019710f, 0.031387f, 0.023017f, 0.010891f, -0.010037f, -0.008078f, 0.011112f, 0.002232f, 0.007866f, -0.005151f, 0.013341f, -0.004519f, -0.003934f, 0.011916f, 0.009652f, -0.012985f, 0.008090f, -0.003784f, 0.012992f, 0.014090f, -0.028833f, -0.005673f, 0.017191f, 0.004870f, 0.009200f, 0.007102f, 0.017023f, -0.008819f, 0.006620f, -0.000098f, -0.014979f, -0.007558f, -0.000748f, 0.002628f, -0.021827f, -0.002242f, 0.013248f, -0.011157f, 0.022472f, 0.016675f, -0.007225f, -0.000621f, 0.004043f, 0.008137f, 0.012989f, -0.005577f, -0.004628f, 0.021161f, -0.005423f, -0.000863f, 0.009073f, 0.000024f, 0.012308f, 0.009634f, 0.003839f, 0.006529f, 0.006966f, 0.006520f, 0.002905f, 0.002530f, -0.003313f, -0.005460f, -0.002422f, -0.005012f, -0.000845f, -0.003629f, 0.002091f, 0.001735f, -0.004873f, -0.004040f, -0.000841f, 0.003057f, 0.006764f, 0.005468f, 0.003051f, 0.000245f, 0.003219f, -0.006502f, -0.003030f, -0.003690f, 0.001064f, -0.002794f, 0.002865f, - -0.007493f, 0.000491f, -0.000553f, 0.005819f, 0.002007f, 0.000028f, 0.000626f, 0.006046f, 0.001506f, -0.005721f, 0.001375f, -0.000770f, 0.001044f, 0.005065f, -0.000585f, 0.001406f, -0.000513f, 0.055093f, -0.029153f, 0.003817f, 0.022581f, -0.002404f, 0.000593f, 0.029983f, 0.032862f, 0.003729f, -0.002757f, 0.006768f, -0.001827f, 0.007289f, 0.009270f, -0.012283f, -0.003949f, 0.019359f, 0.017012f, -0.008241f, -0.015976f, -0.016997f, -0.017704f, -0.009599f, 0.014261f, -0.011340f, 0.006111f, 0.000612f, -0.020659f, -0.001539f, -0.013820f, -0.001793f, 0.005587f, 0.008792f, -0.026727f, -0.012593f, -0.021338f, -0.006700f, 0.031650f, 0.004447f, -0.003154f, 0.002685f, -0.003174f, 0.001428f, 0.009146f, 0.005387f, 0.015653f, -0.000997f, 0.011621f, 0.006956f, -0.011405f, 0.006915f, -0.017208f, 0.000348f, -0.017287f, -0.017839f, 0.006392f, -0.019611f, 0.007891f, -0.000346f, 0.009615f, 0.007782f, 0.006843f, -0.010516f, 0.011808f, -0.017781f, -0.000694f, -0.008246f, -0.003085f, 0.022090f, 0.000459f, 0.011012f, 0.010665f, -0.002348f, -0.004560f, 0.008495f, -0.018693f, 0.007266f, 0.017104f, -0.026079f, - -0.019465f, -0.005378f, 0.012839f, -0.001290f, -0.016347f, 0.005971f, -0.002702f, 0.006796f, -0.006261f, 0.002051f, -0.003725f, 0.011424f, -0.002526f, 0.010506f, 0.005446f, 0.009814f, 0.003019f, 0.002699f, -0.005581f, 0.006643f, 0.002568f, -0.000251f, 0.003512f, 0.003361f, -0.002329f, 0.004964f, 0.003490f, -0.002432f, -0.003034f, -0.008505f, -0.002198f, -0.004853f, -0.000602f, -0.000205f, -0.003316f, 0.004387f, -0.001941f, 0.002584f, 0.000483f, 0.008901f, -0.007472f, 0.003340f, 0.001046f, 0.000403f, -0.001120f, -0.032634f, 0.006535f, 0.008367f, -0.021919f, 0.010468f, 0.000238f, 0.023774f, -0.005784f, -0.011502f, 0.010284f, -0.028513f, -0.009555f, 0.024767f, 0.011082f, -0.014451f, -0.035310f, 0.016279f, -0.004580f, 0.009113f, -0.022389f, -0.029803f, -0.020098f, 0.026500f, 0.002528f, 0.014789f, -0.002122f, -0.013452f, -0.020137f, 0.010061f, -0.005086f, -0.017484f, -0.020497f, 0.001891f, -0.018255f, -0.013958f, -0.007436f, -0.003310f, -0.019811f, 0.011695f, 0.013892f, 0.018644f, -0.008351f, 0.016615f, -0.012691f, 0.026074f, -0.004394f, -0.000993f, 0.019964f, 0.010454f, -0.004464f, -0.012783f, - -0.006211f, 0.019285f, 0.004755f, -0.013665f, 0.007097f, 0.020464f, 0.019367f, 0.008547f, -0.022822f, -0.025237f, -0.001912f, 0.005368f, 0.001974f, -0.018056f, 0.005909f, 0.020751f, 0.006275f, -0.008285f, -0.032438f, 0.009167f, -0.013899f, -0.031615f, 0.001378f, 0.002108f, -0.017712f, 0.026418f, -0.001505f, -0.010301f, -0.035107f, 0.000184f, -0.010068f, -0.001243f, 0.013695f, -0.007538f, -0.013196f, -0.000502f, 0.003427f, 0.003626f, -0.010386f, -0.010494f, -0.010459f, 0.004414f, -0.008979f, 0.001007f, -0.001319f, 0.001948f, -0.002232f, 0.003044f, 0.005135f, 0.004664f, 0.005817f, 0.003126f, 0.010165f, 0.012890f, 0.001068f, 0.004097f, 0.002652f, -0.004425f, -0.000991f, -0.003525f, 0.001890f, 0.001802f, 0.001098f, -0.011666f, 0.001795f, -0.000589f, -0.004050f, -0.000137f, -0.003604f, 0.004092f, -0.004486f, -0.004646f, -0.003411f, -0.040533f, 0.025988f, 0.020116f, 0.022126f, 0.003434f, 0.023369f, 0.002680f, -0.014376f, -0.016720f, 0.002963f, 0.018797f, -0.012344f, 0.004638f, -0.027156f, 0.019247f, 0.020458f, -0.009749f, -0.005271f, 0.004983f, 0.022376f, 0.016363f, -0.010905f, -0.009784f, - 0.015452f, -0.017661f, 0.006689f, -0.024276f, 0.000437f, -0.006903f, -0.032543f, -0.033700f, 0.007105f, 0.020044f, 0.009619f, -0.028716f, -0.015183f, 0.022640f, -0.024145f, -0.009842f, 0.020295f, -0.004934f, 0.025247f, -0.008293f, -0.016715f, 0.006900f, -0.024547f, 0.029298f, -0.002514f, 0.005519f, -0.012967f, -0.006473f, -0.000603f, -0.026719f, -0.015981f, 0.002570f, -0.003816f, 0.003094f, -0.008184f, -0.028392f, 0.006024f, -0.023444f, 0.011256f, -0.005628f, 0.017832f, -0.028343f, 0.013565f, 0.005283f, -0.007527f, 0.021769f, -0.002047f, -0.014352f, -0.027556f, -0.003449f, 0.006874f, -0.022419f, 0.017498f, -0.015041f, 0.011596f, -0.029640f, -0.029973f, 0.014911f, 0.012310f, -0.011935f, -0.008965f, 0.010056f, 0.007330f, -0.006210f, -0.004775f, -0.007955f, -0.009949f, -0.000684f, -0.016409f, -0.001527f, -0.001791f, 0.001559f, 0.005419f, -0.002897f, 0.005477f, -0.003033f, -0.000380f, -0.008986f, -0.003900f, -0.002262f, -0.000515f, 0.013887f, -0.003362f, -0.001678f, 0.008572f, -0.008296f, 0.006596f, 0.003627f, -0.002615f, -0.001851f, -0.007886f, -0.007730f, 0.000343f, -0.004440f, 0.001910f, 0.000739f, - -0.003125f, -0.005456f, 0.013341f, -0.012983f, 0.004436f, 0.015877f, 0.023444f, -0.006196f, 0.002601f, -0.008322f, -0.031306f, -0.006687f, -0.006701f, 0.013602f, -0.027498f, -0.000081f, -0.015864f, 0.017066f, -0.019236f, -0.026232f, 0.017449f, 0.008011f, 0.011352f, 0.036128f, -0.005955f, -0.010361f, 0.010197f, -0.023142f, -0.026988f, 0.002223f, 0.034579f, 0.010516f, 0.019416f, -0.013796f, -0.016967f, -0.027492f, 0.005501f, 0.035104f, -0.015726f, 0.018348f, 0.004225f, 0.027295f, -0.041754f, -0.013279f, -0.000692f, 0.004904f, 0.023795f, 0.011472f, -0.031818f, -0.008623f, -0.014762f, -0.001266f, -0.036636f, -0.005766f, -0.013181f, 0.002528f, -0.019276f, -0.001286f, 0.004488f, -0.053504f, 0.006143f, -0.016780f, 0.003297f, -0.021182f, -0.001141f, 0.013151f, 0.006735f, -0.007209f, -0.006766f, -0.028221f, 0.028378f, 0.027245f, 0.009003f, 0.006787f, -0.024463f, 0.037363f, 0.013033f, 0.019256f, -0.007340f, -0.058842f, 0.022951f, -0.002027f, 0.044158f, 0.041449f, 0.013101f, -0.005338f, 0.018290f, 0.000955f, 0.016022f, 0.000849f, 0.001859f, -0.010424f, 0.005008f, -0.009524f, -0.005054f, -0.002666f, - 0.019272f, -0.000289f, 0.001192f, 0.004928f, -0.001190f, -0.010405f, -0.005313f, 0.001756f, 0.007836f, -0.003691f, 0.003919f, -0.006116f, 0.008155f, -0.006399f, -0.009777f, -0.005011f, -0.001383f, 0.004567f, 0.001812f, -0.002125f, -0.001672f, -0.002174f, 0.012734f, -0.002794f, 0.000767f, 0.002081f, 0.006369f, 0.050659f, 0.017862f, 0.034670f, -0.033646f, 0.007819f, 0.035352f, -0.010625f, -0.012741f, 0.004997f, -0.021862f, 0.016693f, 0.004230f, -0.025532f, -0.033432f, -0.002512f, 0.028356f, -0.000734f, -0.002285f, 0.018553f, -0.027703f, -0.007058f, -0.022805f, 0.012809f, -0.038863f, 0.000641f, -0.008309f, 0.014134f, -0.040590f, -0.028043f, -0.017737f, 0.011896f, 0.013062f, 0.009041f, -0.013168f, 0.009863f, -0.009797f, 0.012033f, -0.008037f, -0.003556f, -0.002796f, -0.011399f, 0.007721f, 0.017962f, 0.010693f, 0.018083f, -0.001491f, -0.017543f, 0.002498f, -0.017468f, 0.046531f, -0.011762f, -0.045776f, -0.014262f, 0.012509f, 0.039757f, -0.039797f, -0.016409f, -0.002596f, 0.025564f, 0.001634f, -0.056318f, -0.006918f, 0.025989f, 0.053673f, 0.001987f, 0.037365f, 0.053837f, -0.004010f, 0.017330f, - 0.025434f, -0.007042f, 0.045877f, -0.006167f, 0.055402f, 0.008823f, -0.015228f, -0.048052f, -0.030105f, 0.000357f, 0.014447f, 0.006903f, -0.007320f, -0.009339f, -0.014937f, -0.020381f, -0.018118f, 0.022040f, 0.006440f, -0.000269f, -0.031601f, -0.003570f, 0.001155f, -0.005768f, -0.017976f, 0.004689f, 0.009503f, -0.002722f, -0.009321f, -0.006795f, -0.017613f, -0.010631f, -0.005187f, 0.011089f, -0.002185f, -0.009585f, 0.009594f, -0.013770f, 0.009888f, 0.009994f, -0.008640f, -0.016689f, 0.015239f, 0.022658f, 0.003457f, 0.000695f, 0.001366f, 0.013203f, -0.003951f, -0.015783f, 0.001849f, 0.015304f, 0.012665f, -0.015670f, -0.013318f, 0.002445f, 0.002501f, 0.000228f, 0.004521f, -0.002447f, 0.021233f, 0.025718f, -0.044317f, -0.043115f, 0.011340f, -0.010113f, 0.001301f, -0.017201f, 0.040116f, -0.018114f, -0.011597f, 0.013893f, 0.010006f, 0.000319f, -0.018426f, -0.013514f, -0.022410f, 0.008942f, -0.001350f, -0.010878f, -0.001839f, 0.026647f, 0.040062f, -0.043453f, -0.002826f, -0.042390f, -0.004565f, -0.011006f, 0.041899f, -0.017782f, -0.016989f, -0.008217f, 0.025477f, 0.008415f, 0.006988f, 0.010642f, - 0.010159f, -0.007643f, 0.000444f, -0.005556f, 0.006759f, -0.005071f, 0.039217f, -0.010292f, 0.010366f, 0.027597f, -0.014463f, -0.031799f, 0.007003f, 0.010760f, -0.011226f, -0.012229f, -0.002714f, 0.006473f, 0.019863f, -0.027243f, 0.036380f, 0.053538f, 0.035944f, -0.015095f, -0.021746f, -0.049673f, -0.064094f, -0.023611f, -0.000306f, -0.011637f, -0.003308f, -0.007344f, 0.015247f, -0.001381f, -0.024796f, 0.012935f, -0.011017f, -0.002410f, 0.023434f, 0.039141f, -0.009662f, 0.010961f, -0.006962f, 0.002093f, 0.035619f, 0.017972f, 0.030453f, 0.031014f, -0.024896f, -0.007694f, -0.005756f, 0.000827f, -0.000637f, 0.011003f, 0.000695f, 0.006724f, 0.031225f, 0.001248f, 0.014553f, -0.006688f, -0.006937f, -0.012874f, -0.004003f, 0.001767f, 0.014186f, -0.004013f, -0.011930f, -0.005635f, 0.006795f, -0.004983f, -0.002726f, -0.003731f, 0.004268f, 0.001074f, -0.004670f, -0.002541f, 0.003135f, 0.001529f, 0.001573f, 0.017993f, -0.007454f, 0.000391f, 0.002279f, 0.000205f, -0.010021f, 0.004498f, 0.005559f, 0.011468f, -0.022999f, 0.042919f, 0.019206f, 0.024339f, 0.036630f, 0.056689f, -0.022029f, 0.029246f, - -0.058733f, -0.007392f, -0.026443f, -0.057725f, 0.023117f, 0.013445f, 0.017353f, 0.007512f, 0.022640f, 0.006777f, -0.041584f, 0.034690f, 0.061443f, -0.009406f, -0.010081f, 0.014901f, 0.005953f, -0.013059f, -0.055097f, 0.004311f, 0.000026f, -0.005186f, 0.000574f, 0.018496f, -0.039436f, 0.008308f, 0.010986f, -0.008272f, -0.022817f, -0.011239f, -0.025410f, 0.025511f, -0.056552f, -0.008375f, -0.036432f, 0.019943f, 0.007989f, 0.020226f, -0.007340f, 0.005360f, -0.014580f, 0.034306f, 0.010230f, 0.028125f, -0.025933f, 0.027641f, -0.000789f, -0.027472f, 0.056162f, -0.009543f, 0.006742f, 0.037826f, -0.036702f, 0.042423f, 0.025328f, -0.033628f, 0.013949f, -0.012988f, 0.018588f, -0.046507f, 0.033692f, 0.004583f, 0.011746f, -0.004560f, 0.010816f, -0.037811f, 0.023797f, 0.042475f, -0.084957f, 0.008451f, 0.081674f, -0.053061f, -0.017097f, 0.005558f, 0.039746f, 0.028062f, 0.009707f, 0.024490f, -0.011282f, 0.014679f, -0.006330f, -0.018319f, 0.008832f, -0.004272f, -0.003161f, 0.015160f, 0.022207f, -0.002141f, -0.008791f, -0.007674f, 0.006498f, 0.014010f, -0.018997f, -0.007311f, -0.013029f, -0.008276f, - -0.016990f, 0.016664f, 0.022226f, -0.004942f, 0.010188f, -0.006587f, 0.004092f, 0.013969f, 0.015959f, -0.018704f, 0.001502f, 0.006599f, -0.009757f, 0.014441f, 0.000701f, -0.000535f, 0.013251f, 0.006556f, -0.016032f, -0.013624f, 0.004515f, 0.001887f, -0.004853f, 0.002477f, 0.034359f, -0.020783f, -0.025022f, -0.000790f, -0.023954f, -0.010893f, -0.063311f, -0.054052f, -0.007455f, -0.031011f, -0.037212f, -0.026852f, 0.016533f, -0.009565f, -0.018838f, -0.030266f, 0.027953f, 0.001871f, -0.045708f, -0.007218f, -0.000256f, -0.021765f, -0.006841f, 0.018545f, 0.013342f, -0.003227f, 0.000174f, 0.000855f, -0.011467f, 0.009739f, 0.021351f, -0.008019f, -0.005084f, 0.032750f, -0.061549f, -0.010049f, 0.017339f, 0.065620f, -0.027168f, -0.017054f, -0.024475f, -0.033338f, 0.014545f, 0.069628f, 0.012954f, 0.043117f, 0.008929f, -0.007120f, -0.003621f, -0.005192f, -0.033590f, 0.007328f, 0.007629f, -0.027405f, 0.006088f, 0.054362f, -0.008800f, -0.016828f, 0.009152f, -0.019587f, -0.004453f, 0.047941f, 0.070984f, 0.019094f, 0.042628f, 0.049175f, -0.017438f, -0.020621f, 0.005646f, -0.016330f, 0.002836f, -0.048766f, - -0.000397f, -0.038019f, 0.011580f, 0.007847f, 0.023163f, -0.039584f, -0.014724f, -0.013558f, -0.015438f, -0.012457f, -0.013811f, 0.021914f, 0.004786f, 0.028267f, -0.007157f, 0.010715f, 0.028399f, -0.005309f, 0.001051f, -0.004218f, -0.011209f, -0.009163f, -0.001492f, -0.006955f, -0.010297f, -0.000297f, 0.004346f, -0.005480f, 0.001967f, 0.013115f, -0.013225f, -0.012222f, 0.000972f, 0.009791f, 0.005216f, -0.006526f, -0.019617f, -0.019297f, -0.002279f, 0.004341f, -0.011606f, -0.006667f, 0.004204f, -0.004129f, 0.002143f, 0.001232f, 0.013544f, 0.004348f, 0.003509f, -0.014927f, 0.016419f, -0.007051f, -0.015836f, 0.049802f, 0.056337f, -0.023428f, 0.128203f, -0.018291f, 0.002371f, -0.024424f, 0.014588f, -0.010677f, 0.014392f, 0.032476f, 0.008802f, -0.031450f, -0.017324f, -0.032836f, -0.001103f, -0.022490f, -0.040495f, 0.004752f, 0.025345f, -0.004987f, 0.006978f, 0.011690f, 0.014634f, -0.000842f, -0.012077f, -0.015659f, 0.007094f, -0.000708f, -0.020460f, 0.007204f, 0.054811f, 0.038519f, 0.021695f, -0.047563f, 0.033166f, 0.025744f, -0.012928f, -0.014941f, -0.014911f, -0.019396f, -0.008629f, 0.014603f, - -0.034535f, 0.002636f, 0.003693f, 0.019784f, 0.052238f, 0.009578f, 0.010400f, 0.002256f, -0.006856f, -0.011297f, 0.022352f, -0.014495f, 0.052762f, 0.016529f, -0.005689f, 0.022728f, 0.003903f, -0.036541f, -0.026374f, 0.029682f, 0.034404f, 0.012365f, -0.009269f, 0.022614f, 0.024464f, 0.034988f, 0.069052f, 0.006853f, -0.020527f, -0.036385f, -0.024419f, 0.017467f, 0.003412f, 0.005247f, -0.003828f, 0.023867f, 0.002083f, -0.003579f, -0.032988f, -0.016606f, 0.033311f, 0.037337f, -0.014029f, -0.026374f, -0.031289f, -0.009516f, 0.016017f, 0.009806f, 0.002543f, -0.011006f, 0.002183f, -0.000596f, -0.014123f, -0.000454f, -0.030594f, -0.008407f, -0.001634f, 0.021033f, -0.004372f, -0.007111f, -0.000314f, 0.016956f, -0.010967f, 0.011994f, -0.006992f, -0.014699f, 0.011780f, 0.016757f, 0.010691f, 0.011693f, -0.002026f, 0.012561f, 0.024422f, 0.010303f, 0.010180f, 0.006579f, -0.009615f, -0.004697f, 0.000258f, -0.002758f, 0.007048f, -0.007547f, 0.011783f, 0.015219f, 0.008901f, 0.000620f, -0.012385f, 0.004191f, 0.003955f, 0.012252f, 0.020061f, -0.020820f, 0.091258f, -0.014501f, 0.003067f, 0.009410f, - -0.007801f, -0.002071f, 0.022241f, -0.017907f, -0.021110f, -0.011401f, 0.028938f, 0.025853f, -0.072042f, 0.012979f, 0.011331f, 0.028379f, -0.019055f, -0.028827f, -0.027608f, 0.019643f, 0.017585f, -0.029422f, -0.016525f, -0.012493f, 0.047079f, 0.023410f, 0.012639f, -0.009979f, -0.050449f, 0.013384f, 0.011675f, 0.024916f, -0.006965f, 0.012937f, -0.014582f, 0.004185f, -0.043929f, 0.017260f, 0.016823f, -0.000005f, -0.011501f, -0.027672f, -0.054433f, 0.034152f, -0.023397f, 0.017265f, 0.017539f, 0.030115f, 0.003482f, -0.033276f, 0.053582f, 0.010060f, -0.053964f, -0.025249f, 0.031019f, 0.006991f, 0.040856f, 0.017046f, 0.006078f, -0.038457f, -0.019516f, 0.020594f, -0.066696f, 0.070422f, -0.051478f, 0.002325f, 0.041801f, -0.011986f, 0.083643f, 0.012123f, 0.014524f, -0.031111f, 0.097569f, 0.009738f, 0.063206f, -0.043953f, -0.020220f, -0.014173f, 0.024196f, -0.003143f, -0.010740f, 0.044142f, -0.037638f, 0.042566f, -0.051844f, 0.010561f, 0.004476f, 0.008894f, -0.010615f, 0.037500f, -0.005271f, 0.018922f, 0.016329f, 0.024789f, 0.013609f, 0.007013f, 0.016925f, 0.019295f, -0.000015f, 0.006878f, - 0.001475f, -0.013621f, 0.016144f, 0.000199f, 0.010875f, 0.023477f, 0.011211f, 0.001229f, -0.001931f, 0.017926f, 0.018849f, 0.009526f, -0.011891f, 0.039590f, -0.002556f, -0.008230f, -0.008534f, 0.025335f, -0.020208f, 0.008648f, -0.005087f, 0.013520f, 0.000055f, 0.005482f, 0.006729f, -0.005679f, -0.005207f, 0.003686f, 0.006786f, 0.006404f, 0.007125f, 0.010066f, -0.010618f, 0.033099f, 0.076739f, 0.025994f, 0.048500f, 0.061553f, -0.001781f, 0.070464f, -0.052876f, -0.018482f, -0.019383f, -0.017013f, 0.008301f, 0.012124f, -0.003757f, -0.022991f, -0.045342f, 0.045047f, 0.042685f, 0.018470f, 0.038640f, -0.061199f, -0.052754f, 0.018787f, 0.026461f, -0.027918f, -0.039339f, 0.026387f, -0.011823f, -0.057017f, -0.020361f, -0.010305f, 0.029404f, -0.052379f, 0.030223f, 0.020615f, 0.024128f, -0.024152f, -0.000623f, -0.023888f, -0.009918f, -0.070021f, -0.016356f, 0.034913f, -0.111135f, -0.034850f, -0.003413f, -0.001874f, 0.004762f, -0.066758f, -0.015877f, -0.100865f, -0.007560f, 0.020667f, -0.027993f, -0.031150f, -0.012225f, 0.031126f, -0.009397f, -0.036004f, -0.040803f, -0.105310f, -0.036827f, 0.050135f, - -0.045928f, -0.070708f, 0.060618f, -0.018186f, -0.079177f, 0.024780f, 0.073335f, -0.038166f, -0.016584f, 0.009285f, -0.051575f, 0.065717f, 0.029913f, 0.042245f, -0.020859f, -0.004128f, 0.022433f, 0.062586f, 0.029929f, 0.010269f, -0.018890f, -0.003869f, 0.071473f, 0.007316f, 0.011991f, -0.004730f, -0.040523f, -0.018008f, 0.034115f, -0.000303f, 0.003110f, -0.006312f, -0.036071f, -0.002405f, 0.017088f, -0.022612f, 0.028352f, -0.035098f, -0.021725f, 0.007691f, -0.011403f, 0.018820f, 0.008543f, -0.031932f, 0.014340f, 0.016586f, 0.009812f, 0.006517f, -0.012020f, 0.008080f, 0.000779f, -0.007555f, -0.021800f, 0.011727f, 0.010433f, -0.002346f, 0.018415f, -0.025104f, 0.003999f, -0.024033f, 0.001801f, 0.006744f, -0.007462f, -0.003935f, -0.000062f, 0.009881f, 0.002571f, -0.007010f, 0.001564f, 0.087237f, 0.120792f, -0.019454f, -0.004233f, -0.047999f, -0.048262f, -0.082886f, 0.034472f, -0.014502f, 0.120678f, -0.026096f, -0.052869f, -0.073478f, 0.003757f, 0.022153f, -0.027439f, 0.022319f, 0.078747f, -0.031965f, -0.014597f, -0.055908f, -0.025650f, 0.052995f, 0.061322f, -0.062855f, -0.018122f, 0.031246f, - -0.013925f, 0.013455f, -0.019073f, 0.077153f, 0.061896f, 0.131975f, 0.042754f, 0.057988f, -0.026580f, 0.041383f, 0.089221f, 0.028410f, -0.006185f, 0.020216f, -0.003478f, 0.057754f, 0.030136f, 0.084542f, 0.023589f, -0.086721f, 0.029783f, 0.032485f, 0.070428f, -0.040377f, -0.034154f, 0.040323f, 0.044114f, -0.021933f, 0.070830f, -0.025634f, 0.028827f, -0.078993f, 0.049180f, -0.019063f, 0.026817f, 0.027174f, 0.062100f, 0.053413f, -0.043368f, -0.045611f, -0.014765f, 0.064786f, 0.065887f, -0.025633f, -0.037032f, -0.071186f, -0.008305f, 0.049006f, 0.056054f, 0.036858f, -0.016722f, -0.047310f, -0.044379f, -0.008195f, 0.030431f, -0.031096f, 0.042534f, 0.010028f, 0.029645f, 0.004794f, -0.015454f, 0.033396f, 0.021200f, -0.005572f, -0.014609f, 0.010166f, 0.028608f, -0.042162f, 0.016625f, 0.020459f, 0.027899f, 0.014973f, 0.039528f, -0.013500f, 0.013838f, -0.018981f, -0.027375f, 0.015380f, 0.033293f, 0.029040f, 0.044756f, -0.000782f, -0.000720f, 0.013167f, 0.011806f, 0.079813f, 0.015245f, -0.003682f, -0.035144f, -0.000086f, 0.051114f, 0.025789f, 0.039468f, 0.022816f, -0.001245f, 0.000486f, - -0.008994f, -0.000542f, 0.049191f, 0.040716f, 0.004174f, 0.015121f, -0.005101f, -0.008272f, 0.001690f, 0.020674f, 0.015685f, 0.013697f, -0.010760f, -0.010520f, 0.011843f, -0.030758f, -0.099449f, 0.005885f, 0.149768f, 0.089098f, -0.022122f, -0.222025f, -0.032705f, -0.023425f, 0.016175f, -0.026122f, 0.003054f, 0.022100f, -0.009597f, 0.009014f, -0.049261f, 0.029789f, 0.035765f, 0.067410f, -0.050604f, -0.063301f, 0.063345f, 0.101388f, 0.024535f, -0.046310f, -0.061810f, -0.013852f, 0.013929f, 0.004903f, 0.014861f, -0.000418f, 0.021176f, 0.008283f, 0.065408f, -0.022089f, -0.093076f, -0.040479f, 0.028083f, 0.010072f, -0.033142f, -0.040834f, 0.003885f, 0.042568f, 0.075322f, 0.069819f, -0.003015f, 0.000546f, 0.027380f, -0.027862f, -0.080688f, 0.023456f, -0.050942f, 0.094450f, 0.102619f, -0.002665f, 0.027816f, 0.014372f, 0.019148f, -0.046591f, -0.008289f, 0.098591f, -0.039007f, 0.000443f, -0.136320f, -0.018338f, 0.013515f, 0.030714f, 0.027578f, 0.027467f, -0.035087f, -0.021341f, 0.059168f, 0.088862f, -0.017551f, -0.004198f, 0.006841f, 0.035607f, 0.041696f, -0.020538f, 0.012777f, -0.048836f, - -0.059236f, 0.005625f, 0.013804f, 0.021010f, -0.008958f, -0.009174f, -0.012847f, -0.012516f, 0.037153f, -0.000382f, -0.009395f, -0.020742f, -0.003725f, 0.024102f, 0.019824f, -0.011821f, 0.027856f, 0.006823f, 0.043472f, 0.003740f, 0.005838f, 0.001507f, -0.018333f, -0.013669f, -0.010362f, -0.010598f, -0.005487f, -0.013698f, -0.012037f, 0.003594f, 0.035504f, 0.043102f, 0.010235f, 0.022476f, 0.005818f, 0.007982f, 0.034489f, -0.026609f, 0.025486f, 0.010385f, 0.043468f, -0.012151f, 0.009232f, 0.008793f, -0.021708f, 0.014967f, -0.011932f, 0.015303f, -0.008305f, 0.025912f, -0.012157f, -0.015523f, 0.009434f, 0.005990f, 0.002867f, 0.010539f, 0.002960f, 0.018624f, -0.000018f, 0.007294f, -0.000323f, 0.006918f, 0.002585f, 0.006022f, 0.007964f, 0.009150f, -0.002685f, 0.002191f, -0.001499f, 0.012046f, 0.004209f, 0.009142f, -0.001968f, 0.002512f, 0.001539f, 0.006830f, 0.000283f, 0.007660f, -0.003000f, 0.010431f, -0.011490f, -0.099299f, -0.041082f, 0.079501f, 0.087600f, 0.083215f, 0.112794f, 0.019432f, -0.048523f, -0.148736f, -0.112934f, -0.021216f, 0.031547f, 0.094365f, 0.102613f, 0.048581f, - 0.002307f, -0.049888f, -0.043218f, -0.019127f, 0.032053f, 0.088095f, 0.050028f, -0.011541f, 0.003225f, -0.007112f, -0.048322f, -0.066081f, -0.054126f, 0.010224f, 0.081079f, 0.060962f, 0.121912f, 0.079348f, 0.078512f, 0.110531f, -0.032166f, -0.076249f, -0.086822f, -0.115240f, -0.142000f, -0.053531f, -0.016749f, 0.042248f, 0.078190f, 0.112985f, 0.105522f, 0.085814f, 0.054252f, 0.108542f, -0.021225f, -0.068518f, -0.003228f, -0.017406f, 0.028694f, 0.032887f, 0.129486f, 0.113142f, -0.042068f, 0.020348f, -0.029472f, -0.086524f, -0.025571f, 0.023058f, -0.052148f, 0.080552f, -0.032257f, 0.026824f, 0.006828f, -0.009112f, 0.069604f, 0.096820f, 0.077117f, 0.054362f, -0.040240f, -0.097765f, -0.111397f, 0.031872f, -0.046999f, 0.008663f, -0.005420f, 0.062949f, 0.009757f, 0.035675f, -0.030112f, -0.068458f, -0.063708f, -0.099773f, -0.086943f, 0.037025f, 0.020679f, 0.050454f, 0.075629f, 0.059088f, 0.002152f, -0.044445f, -0.072031f, -0.097378f, -0.053503f, -0.024740f, -0.036044f, 0.016292f, -0.013199f, -0.011123f, -0.011726f, -0.029413f, 0.000099f, -0.012933f, -0.019873f, -0.023284f, -0.015174f, -0.002900f, - 0.015371f, -0.028186f, -0.018035f, 0.005809f, 0.017099f, -0.007213f, 0.041456f, 0.004061f, -0.222613f, -0.234304f, -0.243701f, -0.249801f, -0.330039f, -0.035912f, -0.093419f, -0.022685f, 0.030745f, 0.150215f, 0.170754f, 0.176532f, 0.247170f, 0.341686f, 0.327426f, 0.321755f, 0.258530f, 0.186682f, 0.135671f, 0.040712f, -0.156013f, -0.074929f, -0.092197f, -0.057152f, -0.187351f, -0.031171f, -0.077574f, -0.085486f, -0.155032f, -0.119204f, -0.121215f, -0.109871f, -0.114706f, -0.201611f, -0.178477f, -0.105397f, -0.095237f, -0.119703f, -0.165725f, -0.025282f, -0.145121f, -0.275125f, -0.235672f, -0.207001f, -0.109083f, -0.140662f, -0.025121f, -0.284771f, -0.126067f, -0.126198f, -0.058281f, -0.042599f, -0.146595f, 0.006391f, -0.146872f, -0.017844f, 0.022872f, 0.068715f, 0.006157f, 0.070623f, 0.105597f, 0.165928f, 0.176989f, 0.243385f, 0.159101f, 0.381991f, 0.241454f, 0.444647f, 0.302377f, 0.442967f, 0.513946f, 0.610155f, 0.501284f, 0.504558f, 0.568799f, 0.510247f, 0.518330f, 0.504330f, 0.437396f, 0.252938f, 0.202226f, 0.142568f, 0.104067f, 0.121669f, 0.181762f, 0.100055f, -0.036919f, -0.063416f, - -0.073012f, -0.125556f, -0.162742f, -0.198571f, -0.182736f, -0.300457f, -0.290912f, -0.299795f, -0.362962f, -0.319806f, -0.403180f, -0.357178f, -0.418913f, -0.430402f, -0.405307f, -0.447397f, -0.404437f, -0.451776f, -0.358474f, -0.351419f, -0.291140f, -0.310909f, -0.320294f, -0.225381f, -0.201668f, -0.154310f, -0.078552f, 0.026113f, 0.085682f, 0.074928f, 0.095917f, 0.085681f, 0.096952f, 0.111262f, 0.159220f, 0.191218f, 0.172971f, 0.155463f, 0.190260f, 0.176921f, 0.218860f, 0.199134f, 0.145616f, 0.132449f, 0.115260f, 0.101440f, 0.063899f, 0.048413f, 0.045145f, 0.028290f, 0.031174f, 0.012261f, 0.020231f, 0.017640f, 0.012149f, 0.017714f, 0.012940f, 0.007630f, 0.002774f, -0.007087f, -0.001097f, -0.000277f, -0.019011f, -0.030373f, -0.017434f, -0.015340f, -0.020018f, -0.019668f, -0.012248f, -0.014637f, -0.020973f, -0.028083f, -0.021578f, -0.014168f, -0.011636f, -0.007535f, -0.009120f, -0.006905f, -0.001211f, 0.005776f, 0.010108f, 0.009258f, 0.005049f, 0.004274f, 0.010613f, 0.015988f, 0.011357f, 0.011055f, 0.005321f, 0.002460f, 0.006780f, 0.005695f, 0.005799f, 0.004498f, 0.004669f, 0.001869f, - -0.003478f, 0.004846f, 0.011937f, 0.011529f, 0.013867f, 0.014980f, 0.021724f, 0.025490f, 0.025862f, 0.027655f, 0.029314f, 0.031971f, 0.034663f, 0.034782f, 0.032600f, 0.031398f, 0.034564f, 0.028039f, 0.024297f, 0.021475f, 0.018463f, 0.012404f, 0.009994f, 0.004077f, 0.002847f, -0.000548f, -0.006503f, -0.012283f, -0.017819f, -0.019363f, -0.024522f, -0.025304f, -0.024752f, -0.024908f, -0.027598f, -0.029076f, -0.026939f, -0.026210f, -0.023851f, -0.021937f, -0.020191f, -0.017986f, -0.013968f, -0.010167f, -0.007678f, -0.006133f, -0.004333f, -0.003317f, -0.002417f, -0.002098f, -0.001614f, -0.001513f, -0.001384f, -0.001258f}, - {0.031697f, 0.004158f, -0.010457f, 0.004906f, 0.005569f, 0.001907f, -0.013233f, 0.005995f, 0.009326f, -0.010115f, -0.003060f, -0.012386f, -0.002754f, -0.005279f, -0.004567f, -0.001808f, 0.000645f, -0.000457f, 0.001217f, 0.004416f, -0.005545f, 0.002435f, -0.012699f, 0.004331f, 0.007739f, 0.001629f, -0.003370f, -0.010289f, 0.006666f, -0.004535f, 0.010808f, 0.009231f, -0.000442f, -0.004333f, 0.008802f, 0.010288f, 0.008251f, 0.008363f, 0.002040f, -0.006458f, 0.001971f, 0.007910f, -0.003376f, -0.006746f, 0.005991f, 0.009542f, -0.004250f, 0.004971f, -0.010937f, -0.000924f, -0.009600f, 0.006492f, -0.012763f, -0.003460f, -0.002421f, 0.004327f, 0.006285f, 0.004465f, -0.000417f, -0.006765f, 0.000770f, -0.009349f, -0.006210f, 0.001681f, -0.001211f, -0.005647f, 0.003015f, 0.003133f, 0.000745f, 0.005859f, -0.005297f, 0.002508f, -0.007135f, -0.002833f, -0.003070f, 0.003874f, -0.003729f, -0.007515f, -0.003418f, -0.002816f, 0.010245f, 0.008836f, 0.002187f, -0.004729f, 0.000550f, -0.000573f, 0.001739f, 0.003534f, 0.000592f, 0.000176f, 0.000564f, -0.000170f, 0.000087f, -0.001349f, 0.000965f, -0.003970f, - 0.000121f, -0.000325f, 0.001560f, 0.000827f, -0.001284f, -0.001750f, 0.000292f, 0.000689f, 0.000684f, -0.000335f, 0.000036f, -0.000798f, 0.018146f, -0.018196f, 0.000738f, 0.000368f, -0.004572f, -0.005430f, -0.005784f, 0.001934f, -0.010233f, -0.010097f, 0.001482f, 0.004971f, -0.000328f, 0.005882f, 0.004599f, -0.005532f, 0.002348f, -0.019965f, -0.004845f, -0.004428f, -0.004605f, -0.006264f, -0.006905f, -0.017591f, -0.013648f, 0.001925f, 0.004182f, -0.000903f, 0.009602f, 0.007680f, 0.003268f, -0.003353f, -0.001847f, 0.008989f, -0.003397f, 0.001154f, -0.001245f, -0.009349f, 0.003203f, -0.003099f, -0.006340f, -0.002428f, 0.007743f, 0.018605f, -0.007015f, 0.002119f, 0.004581f, -0.003386f, 0.005907f, 0.002659f, -0.006421f, 0.003828f, -0.015272f, -0.007054f, 0.000239f, 0.006320f, 0.009810f, -0.005925f, -0.002703f, -0.000621f, -0.022160f, 0.003844f, 0.011562f, 0.000666f, 0.001739f, 0.006334f, -0.003546f, 0.009861f, 0.013307f, -0.001630f, 0.003833f, 0.008000f, 0.007625f, 0.001546f, 0.000486f, -0.003647f, -0.005237f, -0.003274f, 0.002418f, -0.005011f, 0.011128f, 0.007471f, -0.000173f, -0.005360f, - -0.002693f, 0.006410f, 0.007563f, -0.003707f, 0.005886f, -0.003498f, 0.001656f, -0.003567f, -0.002110f, -0.002433f, 0.000774f, 0.000207f, 0.000506f, 0.000535f, -0.000336f, -0.001162f, -0.000862f, -0.004776f, -0.015610f, 0.003633f, 0.000586f, -0.015100f, 0.002329f, 0.008482f, 0.012480f, 0.003214f, -0.008950f, 0.021137f, -0.002819f, -0.004150f, 0.009948f, -0.006127f, -0.005960f, 0.001028f, -0.007696f, 0.009426f, 0.009431f, -0.003798f, -0.014193f, -0.007014f, 0.007093f, -0.009142f, 0.020118f, 0.017352f, -0.013842f, -0.016955f, 0.000630f, 0.003181f, -0.016120f, -0.001049f, 0.006694f, 0.004534f, -0.007879f, -0.004591f, 0.018553f, -0.001961f, 0.012779f, -0.001260f, -0.004116f, -0.004303f, -0.009515f, 0.001666f, -0.001328f, 0.010001f, -0.008504f, 0.002317f, -0.002207f, 0.001861f, -0.004995f, -0.000657f, 0.008466f, 0.006705f, -0.010529f, 0.016456f, 0.001393f, -0.000074f, -0.000227f, -0.001506f, 0.004500f, -0.002268f, -0.014693f, -0.002091f, -0.007740f, 0.012831f, 0.005415f, 0.000334f, 0.015802f, -0.008721f, 0.010585f, 0.010367f, 0.000996f, -0.007672f, -0.001524f, -0.001635f, -0.000122f, -0.002185f, - -0.003133f, 0.004356f, 0.004667f, -0.006969f, 0.003390f, -0.000415f, 0.004938f, 0.004313f, -0.001375f, 0.000671f, -0.002108f, -0.003278f, 0.002389f, -0.003018f, -0.002487f, 0.001286f, 0.003362f, -0.003048f, -0.002210f, -0.003965f, -0.001640f, 0.002374f, -0.001450f, -0.000584f, 0.000110f, 0.001201f, -0.002130f, -0.001255f, 0.003115f, 0.001005f, -0.000582f, -0.000969f, -0.003365f, -0.000146f, 0.001798f, 0.001030f, -0.037529f, 0.008769f, 0.002143f, 0.026956f, -0.001327f, 0.010907f, -0.014309f, 0.003232f, -0.010692f, -0.002464f, -0.005177f, -0.001580f, 0.005052f, -0.002776f, 0.004726f, 0.009170f, 0.007030f, 0.025600f, 0.017704f, -0.011438f, 0.005964f, -0.000493f, 0.004825f, 0.003133f, -0.003128f, -0.025182f, 0.006533f, -0.001165f, -0.000123f, 0.009735f, -0.001384f, -0.006932f, -0.004786f, -0.001067f, -0.007737f, -0.004096f, -0.020102f, -0.004616f, 0.000657f, -0.007015f, -0.001145f, 0.008513f, 0.012123f, -0.003751f, 0.014951f, -0.010962f, 0.002565f, 0.005195f, 0.002067f, -0.003311f, -0.007680f, 0.005651f, -0.001837f, 0.003531f, -0.005674f, -0.008122f, 0.001665f, 0.004935f, -0.008205f, 0.008077f, - -0.005566f, 0.019054f, 0.020205f, -0.005973f, 0.007458f, 0.007841f, -0.000913f, -0.002473f, -0.002566f, -0.024396f, 0.010381f, 0.010100f, 0.000433f, -0.003996f, -0.010114f, 0.001209f, -0.002876f, -0.012366f, -0.027866f, 0.001971f, -0.006808f, 0.007316f, 0.000132f, 0.000020f, -0.004543f, -0.003032f, -0.005136f, -0.000390f, 0.003007f, -0.003520f, 0.004402f, -0.004365f, -0.002469f, -0.001765f, -0.000980f, 0.002424f, 0.002043f, -0.001382f, 0.001021f, 0.000765f, 0.001679f, 0.002633f, 0.002075f, -0.001176f, -0.002824f, 0.002242f, -0.001107f, -0.002081f, 0.000963f, 0.000859f, -0.001159f, 0.001696f, 0.002686f, 0.001002f, -0.000193f, -0.008127f, -0.012371f, 0.012216f, 0.006935f, -0.001138f, 0.014135f, -0.007682f, 0.012675f, -0.014414f, -0.013832f, 0.006636f, -0.022036f, -0.007855f, 0.005485f, 0.013309f, 0.017429f, -0.003124f, 0.012996f, -0.000527f, 0.012376f, 0.004522f, 0.001966f, -0.002120f, 0.000627f, 0.012329f, -0.005966f, -0.001382f, 0.002206f, 0.000999f, -0.012274f, -0.001600f, -0.006681f, 0.025195f, -0.012130f, -0.012325f, -0.003021f, 0.011832f, 0.011942f, 0.010212f, 0.013727f, -0.002467f, - 0.002486f, -0.003139f, -0.006878f, 0.005129f, -0.000658f, -0.001388f, -0.007858f, 0.019738f, 0.012185f, -0.006213f, 0.003739f, 0.005772f, -0.010493f, 0.002133f, 0.007669f, -0.002039f, 0.014835f, -0.006094f, -0.001963f, -0.016254f, -0.006130f, -0.013834f, 0.000584f, 0.018866f, -0.007490f, 0.005261f, 0.003220f, 0.000562f, -0.005200f, -0.001850f, 0.000144f, -0.004729f, 0.009079f, -0.009450f, -0.004434f, -0.000928f, 0.019967f, 0.003069f, -0.000139f, 0.006215f, -0.005461f, -0.015096f, 0.003702f, 0.001411f, -0.002404f, 0.000987f, 0.003670f, -0.001093f, 0.000745f, 0.007188f, 0.001369f, -0.000689f, 0.001724f, 0.000003f, -0.000985f, -0.001846f, 0.006761f, -0.000437f, 0.000563f, -0.006295f, 0.003751f, 0.000850f, 0.003736f, -0.001025f, -0.002545f, -0.000871f, 0.001900f, 0.002954f, 0.001987f, -0.005154f, 0.000253f, 0.003461f, -0.001100f, -0.006474f, -0.004282f, -0.035659f, 0.025592f, 0.002553f, -0.013216f, -0.031514f, -0.003277f, 0.000636f, -0.018704f, -0.001836f, 0.008486f, 0.007199f, 0.000527f, -0.005527f, 0.006688f, 0.022246f, 0.022584f, -0.009907f, -0.010838f, -0.024822f, 0.004778f, -0.004613f, - 0.023801f, -0.009930f, -0.000679f, -0.005791f, 0.008867f, -0.002859f, -0.024698f, 0.007890f, -0.001299f, -0.014724f, -0.000132f, 0.002123f, -0.002139f, -0.002655f, -0.010236f, -0.014227f, 0.008397f, 0.001936f, 0.011027f, -0.009888f, 0.018658f, 0.008744f, -0.004026f, -0.016838f, -0.003449f, 0.005840f, 0.018246f, 0.005521f, -0.010540f, -0.004925f, 0.008404f, 0.005333f, -0.005481f, -0.002792f, 0.008868f, 0.007191f, 0.009369f, 0.018033f, 0.020197f, 0.009750f, 0.010689f, 0.012313f, -0.007460f, 0.001625f, -0.013598f, 0.013271f, 0.001985f, 0.006611f, -0.009753f, -0.015144f, 0.003281f, -0.019308f, -0.007025f, -0.008531f, 0.013897f, 0.014513f, 0.015262f, 0.003849f, -0.004500f, -0.005078f, 0.014249f, 0.002725f, -0.002147f, 0.003420f, -0.004666f, 0.008983f, 0.000343f, -0.000344f, 0.002886f, 0.003564f, -0.001563f, 0.007320f, -0.000137f, 0.001062f, -0.003747f, -0.002390f, 0.001943f, 0.005660f, -0.000492f, 0.001911f, 0.003271f, 0.001738f, 0.001003f, -0.001996f, 0.002681f, -0.002579f, -0.003739f, 0.002961f, -0.012742f, -0.000732f, 0.023917f, 0.014713f, 0.020226f, 0.003868f, -0.022069f, -0.007262f, - 0.023488f, -0.006744f, -0.014830f, -0.015462f, -0.015214f, -0.016109f, 0.008903f, 0.009032f, 0.005820f, 0.005318f, 0.005508f, 0.022587f, -0.002754f, 0.009812f, -0.019348f, -0.021797f, 0.014645f, -0.000763f, -0.011866f, 0.000866f, -0.030346f, -0.009911f, -0.010197f, 0.003742f, -0.001028f, -0.002796f, -0.021336f, -0.013986f, 0.002414f, 0.014769f, 0.024032f, -0.009510f, -0.009369f, 0.012787f, -0.016430f, -0.001179f, -0.000797f, 0.005516f, 0.010542f, 0.008564f, 0.016675f, -0.008927f, 0.024155f, 0.011371f, -0.026003f, 0.013014f, -0.014431f, -0.017283f, -0.014324f, -0.020907f, 0.018970f, 0.004440f, -0.022228f, 0.002541f, 0.004754f, 0.002058f, 0.003583f, -0.004095f, 0.015745f, -0.009115f, 0.012118f, -0.019397f, 0.014759f, -0.009850f, -0.008902f, 0.001901f, 0.006585f, -0.000772f, 0.010684f, 0.030415f, -0.002492f, -0.016340f, 0.009707f, 0.019924f, 0.001659f, -0.002189f, -0.015744f, -0.006922f, 0.014760f, -0.002521f, -0.000918f, 0.000475f, 0.003041f, -0.004147f, -0.002288f, -0.000393f, 0.004414f, -0.002541f, -0.000440f, -0.002917f, 0.008369f, -0.006106f, 0.001365f, -0.005742f, -0.007045f, 0.001842f, - 0.002390f, -0.002269f, 0.001206f, -0.002111f, -0.001468f, -0.000494f, -0.000707f, -0.000219f, -0.002920f, -0.001830f, 0.008606f, -0.000488f, 0.000168f, -0.000866f, 0.003283f, 0.001804f, 0.002955f, 0.049148f, -0.045022f, 0.020271f, 0.021169f, -0.020445f, -0.003998f, 0.029250f, 0.010366f, 0.018439f, 0.005251f, -0.006898f, 0.044197f, -0.002169f, -0.008715f, -0.000427f, -0.000224f, 0.021015f, 0.033154f, 0.012314f, -0.000605f, 0.000293f, 0.004660f, 0.011139f, -0.000534f, 0.005731f, -0.023808f, 0.010713f, 0.017894f, -0.004214f, 0.007079f, -0.000381f, 0.003021f, -0.015490f, -0.012160f, 0.000467f, -0.000890f, 0.020305f, 0.009849f, 0.008173f, -0.009085f, -0.011101f, -0.011076f, 0.011523f, 0.016938f, -0.000241f, -0.005937f, 0.033420f, 0.017141f, 0.022204f, -0.012547f, -0.025613f, -0.005173f, -0.026804f, -0.017750f, -0.008349f, -0.011385f, -0.001908f, 0.019404f, -0.006648f, 0.000393f, -0.016567f, -0.017641f, 0.019310f, -0.001365f, 0.008798f, 0.009468f, -0.010671f, 0.018559f, 0.004535f, 0.001326f, -0.006972f, -0.013047f, 0.014463f, -0.004924f, -0.026706f, 0.014837f, 0.012456f, 0.015532f, 0.006776f, - -0.018909f, -0.004285f, 0.001353f, -0.019750f, 0.010684f, 0.010699f, -0.002187f, 0.007980f, 0.006630f, 0.007090f, -0.002194f, 0.011438f, 0.001382f, -0.000871f, -0.006385f, 0.002536f, -0.000502f, 0.009026f, 0.001650f, -0.000671f, 0.001544f, -0.000500f, 0.006552f, -0.003363f, -0.001245f, -0.005009f, 0.001967f, -0.001638f, -0.003994f, 0.000370f, 0.000577f, -0.001784f, 0.000679f, 0.007225f, 0.005373f, -0.003722f, -0.002553f, -0.005349f, 0.000883f, -0.001482f, -0.001063f, 0.000424f, 0.000534f, 0.002166f, -0.003710f, -0.034352f, 0.004513f, 0.011694f, -0.016747f, 0.014450f, -0.029126f, 0.006984f, 0.009208f, -0.003589f, -0.011389f, -0.014648f, -0.017167f, -0.029189f, 0.004002f, 0.033810f, -0.010792f, 0.016461f, 0.009221f, 0.025226f, 0.013473f, -0.009119f, -0.021177f, 0.011335f, -0.005178f, -0.007301f, -0.021960f, -0.003002f, -0.002758f, -0.008533f, -0.009281f, -0.004780f, -0.015372f, -0.020154f, 0.024104f, -0.002017f, -0.013650f, 0.019079f, 0.006829f, -0.016015f, 0.002672f, -0.000860f, 0.010876f, -0.021383f, 0.006334f, 0.007818f, -0.031880f, 0.011073f, 0.010689f, -0.016166f, 0.004960f, 0.001613f, - -0.004984f, 0.012224f, 0.001306f, -0.001867f, 0.001626f, 0.008407f, 0.021855f, 0.017609f, 0.022296f, 0.015642f, 0.008075f, -0.005332f, 0.033083f, -0.007968f, -0.016651f, 0.036870f, 0.002620f, 0.022445f, 0.004926f, -0.006663f, -0.033677f, -0.030883f, -0.007602f, 0.002396f, -0.012198f, -0.005571f, -0.009545f, 0.021945f, -0.018682f, -0.005058f, -0.003043f, 0.005690f, -0.018239f, 0.013718f, -0.001309f, 0.004645f, -0.001438f, -0.006683f, -0.011828f, -0.007573f, -0.009290f, -0.007172f, -0.002139f, 0.001688f, -0.005669f, -0.003640f, -0.003111f, 0.008350f, -0.009034f, -0.007568f, -0.006468f, -0.007264f, -0.000217f, 0.006813f, -0.002694f, -0.002589f, 0.004618f, 0.001619f, -0.002194f, 0.003605f, -0.005635f, -0.005766f, 0.004908f, -0.006805f, -0.011736f, 0.004693f, 0.010668f, -0.005085f, 0.001220f, 0.007662f, -0.002361f, -0.005292f, -0.005908f, -0.057485f, 0.028340f, 0.049798f, 0.003602f, -0.028036f, 0.012997f, -0.005066f, -0.001816f, 0.008277f, 0.004957f, 0.012916f, -0.014876f, 0.001868f, 0.044651f, 0.034316f, 0.030056f, -0.032508f, -0.001226f, 0.008144f, 0.017236f, -0.015536f, -0.017377f, -0.004349f, - 0.005796f, 0.015584f, 0.007855f, -0.041854f, -0.047464f, 0.014935f, -0.001400f, 0.026957f, 0.027695f, -0.017645f, 0.022956f, 0.018440f, 0.024512f, -0.001552f, -0.014308f, -0.014989f, 0.011822f, -0.015881f, -0.005928f, 0.000092f, -0.000481f, 0.014649f, 0.031135f, 0.017486f, -0.008250f, -0.007205f, -0.015092f, -0.003813f, 0.001589f, 0.008458f, -0.003067f, -0.005362f, 0.015437f, 0.009658f, -0.023115f, -0.000230f, 0.001214f, 0.028156f, -0.013878f, -0.016039f, -0.030360f, -0.010314f, 0.005505f, 0.002127f, 0.016081f, -0.003336f, 0.004229f, -0.013621f, -0.020068f, -0.018380f, -0.018360f, -0.010656f, 0.009184f, -0.038350f, 0.004881f, -0.005317f, -0.005732f, -0.008061f, 0.007902f, 0.021104f, 0.015637f, 0.002495f, -0.003131f, -0.019458f, -0.005907f, -0.001744f, -0.003644f, 0.012947f, 0.006912f, 0.003988f, 0.003176f, 0.006753f, 0.008167f, -0.002941f, -0.002921f, 0.000245f, -0.003186f, 0.000728f, 0.001227f, 0.002619f, 0.004671f, -0.012439f, 0.002306f, -0.001573f, 0.009857f, 0.002611f, -0.012162f, -0.000663f, -0.007548f, -0.006055f, -0.002724f, -0.002769f, -0.002916f, -0.001552f, -0.001193f, 0.003333f, - -0.000249f, 0.006857f, 0.006261f, 0.005241f, 0.009151f, 0.028803f, 0.002131f, 0.024963f, -0.003692f, 0.032474f, 0.016077f, 0.025269f, 0.015437f, 0.007192f, -0.012877f, -0.001517f, -0.008151f, 0.017245f, 0.004906f, 0.015116f, -0.014906f, -0.002802f, 0.026883f, -0.033677f, -0.018937f, 0.025828f, -0.044355f, -0.019684f, 0.003043f, -0.008656f, -0.022086f, 0.044187f, -0.008186f, 0.030450f, 0.012064f, -0.026969f, -0.004338f, -0.010290f, -0.032571f, -0.042221f, 0.033287f, -0.000540f, -0.012467f, 0.008061f, 0.000361f, -0.005808f, 0.011963f, 0.004560f, -0.004580f, -0.015679f, 0.002714f, 0.031449f, 0.026609f, -0.022389f, 0.008539f, 0.001508f, 0.024807f, -0.011640f, 0.016731f, -0.036254f, -0.008974f, 0.024365f, 0.008008f, -0.008476f, 0.029096f, -0.009567f, 0.020322f, -0.040221f, -0.046370f, -0.016854f, 0.000645f, -0.032897f, 0.035043f, 0.024685f, 0.035602f, -0.016669f, -0.012364f, -0.012662f, 0.001604f, -0.018413f, -0.000451f, -0.028023f, -0.025497f, 0.000931f, 0.006850f, 0.025532f, 0.011913f, -0.002935f, -0.009760f, 0.007884f, 0.014606f, 0.009528f, 0.005681f, -0.009376f, 0.010485f, 0.009386f, - 0.011849f, 0.008759f, 0.006293f, 0.009499f, -0.013610f, 0.011032f, -0.008343f, -0.004306f, 0.017355f, 0.015376f, 0.010203f, -0.002065f, 0.000348f, -0.004916f, 0.008759f, 0.002630f, -0.003996f, 0.004706f, 0.008885f, 0.001184f, 0.006839f, 0.006733f, -0.009481f, 0.002853f, -0.007242f, -0.002226f, 0.001875f, 0.040309f, 0.029012f, 0.045413f, -0.040153f, -0.030149f, -0.068853f, 0.029807f, -0.007590f, -0.058808f, -0.011342f, 0.005696f, 0.008759f, -0.021904f, 0.024062f, 0.020373f, 0.002353f, -0.000153f, 0.003820f, -0.009645f, -0.020440f, 0.004641f, -0.011595f, -0.019076f, -0.000182f, 0.044787f, 0.001454f, -0.006652f, -0.035650f, 0.015196f, 0.028267f, -0.014460f, -0.043032f, -0.007683f, 0.014585f, 0.005290f, -0.009089f, 0.009531f, 0.003126f, 0.015645f, -0.004303f, 0.025713f, 0.039125f, 0.014931f, -0.025929f, 0.029599f, 0.013308f, -0.033121f, -0.035363f, 0.038651f, 0.018663f, -0.014828f, -0.017235f, -0.000689f, -0.031344f, 0.023145f, 0.030311f, -0.000549f, 0.001747f, 0.007798f, -0.003837f, 0.033306f, 0.011176f, 0.008795f, -0.013701f, 0.005540f, 0.011221f, 0.041099f, -0.009787f, 0.015869f, - -0.031662f, -0.035905f, 0.032224f, -0.004655f, -0.002981f, 0.003532f, 0.030714f, 0.000882f, -0.001417f, 0.019578f, -0.009242f, 0.004078f, 0.017796f, 0.021912f, -0.010351f, -0.013288f, -0.029092f, -0.014135f, 0.009532f, -0.012632f, 0.010155f, -0.000087f, 0.010774f, -0.005584f, 0.007950f, 0.001890f, -0.004467f, 0.003746f, 0.016297f, 0.004267f, 0.016222f, 0.005146f, -0.010242f, 0.000921f, 0.006776f, 0.005875f, -0.010052f, -0.008955f, -0.009792f, -0.003933f, -0.007691f, -0.007258f, -0.011963f, -0.004872f, 0.006680f, 0.004527f, -0.001210f, -0.001656f, 0.003656f, -0.007657f, -0.000185f, 0.010546f, -0.002878f, -0.001354f, -0.004922f, -0.003844f, -0.002143f, -0.014863f, -0.002125f, -0.005567f, -0.006053f, -0.009036f, -0.013067f, -0.046187f, -0.003376f, -0.030058f, -0.061460f, -0.063355f, -0.027120f, -0.048262f, -0.021627f, -0.007402f, 0.009222f, 0.027725f, 0.030875f, 0.003584f, -0.015984f, 0.033221f, -0.016183f, 0.016612f, -0.060676f, -0.005545f, -0.041478f, -0.027682f, 0.028878f, 0.020417f, 0.019874f, 0.006924f, 0.041379f, -0.003667f, -0.002095f, -0.029000f, -0.009751f, -0.005466f, -0.019593f, -0.019789f, - -0.049780f, -0.019290f, -0.005084f, -0.007634f, -0.030623f, 0.027958f, 0.011410f, 0.016871f, -0.013224f, -0.004802f, -0.075786f, -0.021510f, -0.020556f, 0.018124f, 0.039538f, -0.023609f, -0.003233f, -0.043956f, -0.002749f, 0.023329f, -0.006823f, -0.014537f, 0.010451f, 0.033256f, 0.056409f, 0.012227f, 0.002230f, -0.002628f, -0.014557f, -0.021932f, 0.015415f, -0.014293f, 0.051206f, 0.010447f, 0.022303f, 0.103970f, -0.020149f, -0.017151f, -0.025700f, -0.035814f, -0.004475f, 0.035825f, 0.016363f, 0.005522f, 0.012211f, -0.014488f, -0.011151f, -0.031112f, -0.007120f, 0.018221f, -0.002460f, -0.006516f, -0.002527f, -0.006896f, 0.004158f, -0.000698f, 0.007319f, 0.007443f, 0.007549f, 0.009807f, 0.010657f, 0.026832f, 0.016524f, -0.009304f, 0.015772f, 0.000059f, 0.001403f, 0.011497f, -0.012335f, 0.000709f, -0.014298f, -0.008433f, -0.019728f, -0.014494f, -0.020598f, -0.016969f, -0.011274f, 0.023507f, -0.013933f, -0.007623f, -0.016511f, 0.001527f, 0.005421f, -0.003188f, 0.007335f, 0.003266f, -0.000041f, -0.013818f, -0.051698f, 0.029491f, 0.048537f, -0.028569f, 0.001532f, 0.010971f, -0.016689f, -0.003931f, - -0.036171f, -0.000644f, -0.020278f, 0.052728f, 0.000015f, -0.009815f, 0.042259f, -0.010619f, 0.012288f, -0.048350f, 0.025142f, 0.007619f, 0.032753f, -0.015168f, 0.024380f, 0.043197f, 0.046248f, 0.026104f, 0.041682f, 0.021512f, -0.006679f, 0.040688f, -0.019673f, -0.026542f, -0.008609f, 0.016435f, 0.027428f, -0.065821f, -0.004576f, -0.042488f, 0.033772f, 0.015505f, -0.000924f, 0.011835f, 0.047314f, 0.002225f, 0.042212f, 0.018272f, 0.063969f, 0.005975f, -0.007402f, 0.028280f, 0.009165f, -0.032440f, 0.006911f, -0.003574f, -0.043942f, 0.030998f, -0.026554f, -0.042521f, -0.087599f, 0.007055f, -0.010913f, 0.051722f, -0.028789f, 0.069133f, 0.022590f, -0.000862f, -0.010667f, 0.027155f, 0.028180f, -0.050056f, -0.021655f, -0.036900f, 0.012831f, -0.016465f, 0.037674f, 0.012376f, 0.012573f, 0.018635f, -0.008856f, 0.003612f, -0.013389f, -0.004222f, 0.000917f, -0.004593f, -0.039061f, 0.015777f, -0.000216f, 0.011948f, 0.000233f, -0.011029f, 0.001104f, 0.016355f, -0.026040f, 0.022784f, -0.009635f, 0.000408f, 0.002392f, -0.021251f, -0.002002f, 0.013650f, 0.006507f, -0.015095f, -0.006601f, -0.003235f, - -0.018465f, 0.006714f, -0.005362f, 0.027278f, -0.021550f, 0.010111f, 0.018475f, 0.007292f, -0.008031f, -0.005219f, 0.008921f, 0.005100f, 0.005491f, -0.004052f, 0.009259f, -0.027854f, 0.007527f, 0.007584f, 0.012161f, -0.007913f, -0.013460f, 0.001800f, 0.011910f, 0.002478f, 0.032660f, -0.022847f, -0.025491f, -0.025091f, 0.031386f, 0.015990f, 0.041053f, 0.010956f, 0.128269f, -0.038882f, 0.000093f, 0.000361f, 0.059388f, 0.024230f, 0.027177f, -0.039961f, 0.016684f, -0.016126f, 0.000517f, -0.018813f, 0.003409f, 0.042745f, -0.012004f, 0.013140f, 0.083184f, 0.025688f, -0.038540f, -0.045043f, 0.004575f, 0.054025f, 0.027902f, 0.009770f, -0.021733f, 0.045899f, 0.007306f, -0.007515f, -0.051703f, 0.015012f, -0.008711f, 0.021413f, -0.046988f, -0.028936f, 0.001831f, -0.012419f, 0.005519f, -0.043883f, -0.002079f, -0.027008f, 0.011674f, 0.037746f, 0.030080f, 0.009420f, -0.059951f, -0.000116f, 0.005285f, -0.054114f, -0.048364f, -0.032282f, -0.026706f, -0.026698f, 0.041761f, 0.009056f, -0.001794f, 0.026992f, 0.043447f, 0.011131f, 0.037550f, 0.000416f, 0.024664f, 0.167747f, -0.038997f, 0.027126f, - 0.018747f, -0.030200f, 0.005687f, -0.112801f, 0.001680f, 0.055093f, 0.014003f, -0.031479f, 0.042313f, 0.009725f, 0.015739f, -0.028605f, -0.006933f, -0.024526f, 0.007826f, 0.001474f, 0.001554f, 0.008999f, -0.035339f, 0.012263f, -0.019646f, -0.014476f, -0.048172f, 0.011212f, 0.010358f, 0.008888f, 0.011683f, 0.058976f, 0.008423f, 0.005779f, 0.006267f, 0.004069f, 0.035036f, 0.003594f, 0.014464f, 0.011869f, 0.026592f, 0.010337f, -0.002206f, -0.006600f, -0.005517f, 0.003931f, 0.016652f, 0.019994f, 0.005508f, -0.031844f, -0.014946f, -0.007497f, -0.007512f, -0.010900f, -0.033245f, -0.008497f, 0.010954f, 0.024504f, 0.067584f, -0.032265f, -0.002209f, -0.046297f, -0.033813f, 0.010273f, 0.029273f, -0.038386f, 0.044572f, 0.018406f, -0.059905f, 0.035947f, -0.024625f, -0.029894f, -0.003076f, -0.036036f, 0.007730f, -0.016410f, 0.045207f, -0.026914f, -0.002730f, 0.024744f, -0.089151f, 0.012194f, 0.026816f, -0.027186f, 0.021135f, -0.053949f, 0.052791f, 0.005381f, 0.008533f, -0.101654f, 0.090653f, 0.038717f, 0.029303f, 0.001566f, -0.058405f, 0.052461f, -0.004087f, -0.026646f, 0.092686f, -0.019029f, - -0.041742f, -0.022031f, 0.010546f, 0.026613f, 0.024848f, 0.006403f, -0.016501f, -0.110384f, -0.013186f, 0.027110f, 0.000832f, 0.039983f, -0.058511f, 0.059190f, 0.005258f, 0.019759f, -0.059481f, -0.017343f, 0.008632f, 0.075565f, -0.032410f, 0.017373f, -0.055200f, 0.047716f, 0.026104f, 0.045013f, -0.018359f, 0.019747f, 0.006972f, -0.059776f, -0.057629f, 0.030854f, 0.024608f, 0.048056f, 0.009466f, 0.061776f, -0.094533f, -0.122836f, 0.018630f, -0.026188f, 0.068272f, -0.045497f, -0.010738f, 0.007642f, -0.053131f, 0.002246f, -0.032124f, 0.026795f, 0.037472f, 0.003515f, 0.030201f, 0.034020f, 0.009176f, -0.031350f, -0.016710f, 0.054934f, 0.027700f, 0.006851f, 0.008593f, -0.016893f, 0.000237f, 0.033326f, 0.017759f, -0.027554f, -0.016515f, 0.030989f, -0.005563f, 0.019192f, 0.018459f, -0.012354f, -0.017156f, -0.016468f, -0.001047f, 0.016393f, 0.006365f, 0.021058f, 0.029423f, 0.002205f, -0.002204f, 0.024687f, 0.000295f, 0.004715f, 0.006635f, -0.010771f, 0.007270f, -0.018603f, 0.009099f, 0.003435f, -0.000914f, 0.007758f, -0.009041f, -0.085544f, 0.078036f, -0.016828f, -0.018841f, -0.030436f, - -0.008894f, -0.067450f, -0.125964f, 0.043518f, 0.036168f, -0.005533f, -0.025972f, -0.051299f, -0.008481f, -0.015898f, -0.027295f, 0.049656f, -0.112659f, -0.048120f, -0.059481f, -0.017717f, -0.085785f, -0.007888f, -0.012935f, -0.003059f, -0.014384f, -0.017380f, 0.013803f, -0.000836f, -0.037983f, -0.011879f, -0.000882f, -0.051943f, -0.027778f, -0.015321f, 0.003764f, 0.039996f, -0.020551f, 0.080160f, -0.041913f, -0.006007f, 0.033674f, -0.035758f, 0.021701f, 0.004548f, -0.054988f, -0.082220f, -0.020197f, 0.020973f, 0.074923f, 0.032491f, -0.057486f, -0.024332f, -0.164939f, -0.055220f, -0.011961f, 0.034640f, 0.089462f, -0.004804f, -0.095994f, 0.005265f, 0.052004f, -0.019244f, -0.004634f, 0.055146f, 0.058020f, 0.133267f, -0.147480f, -0.028683f, 0.020759f, 0.037170f, -0.046653f, -0.055361f, -0.078950f, -0.078386f, -0.043930f, -0.036541f, -0.010423f, -0.005783f, -0.091229f, -0.037933f, -0.033570f, 0.033484f, -0.017402f, -0.009211f, 0.081767f, 0.061849f, 0.004735f, -0.011991f, -0.004024f, -0.050953f, -0.002535f, 0.017721f, -0.036895f, -0.019954f, 0.006620f, 0.022764f, -0.015849f, -0.018336f, -0.012491f, 0.025391f, - -0.017464f, 0.026598f, 0.001537f, 0.027453f, 0.019436f, 0.019618f, -0.015837f, 0.009637f, -0.038829f, 0.019202f, -0.005539f, 0.011039f, -0.034437f, -0.026939f, -0.004351f, 0.008049f, -0.019672f, -0.000261f, -0.043596f, -0.008346f, -0.005795f, 0.017548f, 0.022100f, -0.028278f, 0.055432f, 0.000198f, 0.020094f, 0.011460f, 0.039895f, 0.039671f, -0.002792f, 0.024764f, -0.047534f, 0.012515f, -0.018738f, -0.116031f, 0.027283f, -0.019118f, 0.035374f, -0.031434f, -0.032455f, 0.003362f, -0.048102f, 0.009218f, -0.048517f, -0.000108f, -0.007808f, -0.018441f, 0.024500f, -0.035911f, -0.047230f, -0.042928f, -0.055606f, -0.008535f, -0.005413f, 0.063384f, 0.014567f, -0.044689f, -0.067041f, 0.009806f, -0.000710f, 0.017047f, -0.012488f, 0.038782f, -0.043862f, -0.016793f, -0.061894f, -0.039140f, -0.017311f, 0.003001f, -0.025750f, 0.066136f, -0.022125f, -0.054800f, 0.017968f, 0.068622f, 0.049759f, 0.021001f, -0.047229f, -0.030219f, -0.004258f, 0.062418f, 0.118286f, -0.000102f, 0.023765f, -0.021584f, -0.114545f, -0.024300f, 0.011053f, 0.044433f, 0.098841f, -0.053406f, -0.066069f, 0.040123f, 0.019113f, -0.022102f, - 0.003660f, -0.035570f, 0.023159f, -0.096278f, -0.010675f, 0.006645f, 0.024160f, -0.057609f, 0.068212f, -0.094108f, -0.107842f, -0.098928f, 0.050992f, -0.019418f, 0.095830f, -0.131805f, -0.057441f, 0.011810f, 0.136192f, -0.009749f, -0.023708f, -0.073509f, -0.026896f, -0.007544f, 0.065895f, -0.004356f, 0.000140f, 0.005121f, 0.011792f, 0.002520f, -0.000563f, -0.027032f, -0.023685f, 0.032477f, 0.014176f, 0.005046f, -0.070703f, 0.019089f, -0.017913f, -0.007129f, -0.036441f, 0.002948f, -0.002955f, -0.005427f, -0.083312f, 0.009043f, -0.018186f, -0.008264f, -0.006936f, 0.015504f, 0.000014f, 0.006503f, -0.000287f, 0.001834f, -0.000001f, 0.001721f, -0.030259f, -0.004571f, -0.019397f, -0.015506f, 0.014782f, 0.016504f, -0.024272f, 0.002276f, -0.017250f, 0.024121f, -0.008258f, -0.037472f, 0.006001f, 0.068459f, 0.020256f, -0.125032f, -0.022964f, -0.086602f, 0.037246f, 0.006087f, -0.171463f, 0.010548f, -0.053379f, -0.111583f, -0.086849f, -0.127202f, 0.077165f, -0.039611f, -0.100098f, -0.045775f, 0.031412f, -0.060342f, -0.051884f, -0.041047f, -0.024465f, -0.045152f, -0.044422f, -0.081783f, -0.059046f, -0.111756f, - -0.063088f, -0.057494f, -0.019299f, -0.053346f, -0.011379f, -0.025665f, -0.002178f, 0.002903f, 0.014049f, 0.029645f, -0.031136f, 0.024411f, 0.002502f, 0.055377f, 0.024105f, 0.034053f, 0.035166f, -0.105039f, -0.027845f, 0.081797f, -0.014873f, -0.052997f, -0.058710f, -0.044526f, 0.032747f, 0.132795f, -0.009495f, -0.003544f, -0.090671f, -0.093474f, -0.019987f, 0.017380f, 0.079701f, -0.007151f, 0.072588f, 0.025439f, -0.089104f, 0.158045f, 0.002450f, 0.122566f, -0.000307f, -0.033520f, 0.066122f, -0.091322f, -0.116256f, -0.075971f, -0.256751f, -0.157322f, -0.051631f, 0.115370f, 0.071302f, -0.104777f, -0.068311f, -0.159105f, 0.077135f, 0.101762f, -0.080992f, -0.082457f, 0.017656f, 0.066398f, 0.096929f, 0.025083f, 0.055205f, -0.054507f, -0.029583f, -0.041729f, -0.060654f, -0.026950f, -0.006411f, 0.003236f, 0.001385f, -0.035182f, 0.003989f, 0.019609f, 0.006115f, -0.007844f, -0.024878f, -0.018773f, -0.028240f, -0.012878f, -0.041185f, -0.011458f, 0.023118f, -0.041754f, -0.064448f, -0.012331f, -0.042885f, -0.031356f, -0.006524f, -0.056494f, -0.042818f, -0.014143f, 0.023602f, 0.022839f, 0.027417f, -0.004251f, - -0.024750f, -0.007550f, 0.007340f, -0.017449f, 0.037156f, -0.002104f, 0.026647f, -0.002410f, -0.002675f, 0.024782f, 0.019807f, 0.028181f, 0.067836f, 0.039959f, 0.049667f, -0.043520f, -0.105683f, 0.122925f, 0.117579f, -0.074349f, -0.096408f, -0.000475f, 0.105528f, -0.011471f, -0.006058f, -0.032909f, 0.092308f, -0.010284f, -0.024529f, -0.002315f, 0.025571f, 0.047274f, 0.001379f, -0.035648f, -0.040350f, 0.056809f, 0.004358f, -0.024569f, -0.060722f, 0.034486f, 0.019249f, -0.007052f, -0.047809f, 0.014943f, 0.020816f, 0.016981f, -0.030158f, -0.018373f, 0.005555f, 0.046779f, -0.013606f, 0.016680f, -0.068859f, -0.019418f, 0.000336f, 0.045284f, -0.095917f, -0.017396f, 0.009601f, 0.068982f, -0.033009f, 0.010493f, -0.048865f, 0.006447f, 0.020617f, -0.034057f, -0.025477f, -0.004280f, 0.011539f, 0.020822f, -0.021612f, 0.001187f, -0.085380f, 0.046068f, -0.014004f, 0.079961f, -0.049447f, 0.035485f, -0.033539f, 0.036896f, 0.007310f, 0.024620f, 0.021531f, -0.062735f, 0.070907f, 0.013566f, 0.041072f, -0.069226f, 0.019516f, -0.017912f, 0.011335f, -0.020037f, 0.003133f, -0.005193f, 0.009794f, 0.022947f, - -0.003257f, -0.027967f, -0.015943f, 0.006573f, -0.003279f, 0.001256f, -0.010281f, -0.027291f, 0.009430f, 0.006627f, -0.007868f, -0.008097f, -0.000046f, -0.008925f, 0.001721f, -0.015113f, -0.000000f, -0.007666f, 0.012518f, 0.006480f, -0.004520f, -0.011388f, 0.004229f, -0.000279f, -0.009029f, 0.006370f, -0.028921f, -0.000862f, -0.002956f, 0.012496f, 0.000001f, 0.033277f, -0.021996f, -0.023490f, -0.007292f, 0.017266f, -0.023859f, 0.035723f, -0.030055f, 0.014789f, -0.014490f, 0.032506f, -0.029177f, 0.035829f, -0.020248f, 0.027877f, -0.025298f, 0.043689f, -0.041271f, 0.031476f, -0.009178f, 0.023550f, -0.022061f, 0.023153f, -0.025061f, 0.026221f, -0.025247f, 0.020963f, -0.016791f, 0.023270f, -0.018093f, 0.019400f, -0.018024f, 0.005460f, -0.005849f, 0.011756f, -0.008931f, 0.009660f, -0.007901f, 0.007869f, -0.005653f, 0.010852f, -0.006640f, 0.004223f, -0.005197f, 0.005775f, -0.004518f, 0.002077f, 0.000910f, -0.035839f, -0.079907f, -0.106316f, 0.077847f, 0.051707f, -0.060555f, -0.086368f, -0.042233f, 0.040255f, 0.021197f, 0.053489f, 0.057563f, 0.011425f, -0.028760f, -0.008254f, 0.020253f, -0.019554f, - -0.001439f, 0.012053f, 0.003432f, 0.032306f, 0.022635f, 0.009921f, -0.028736f, -0.000890f, -0.017728f, 0.018822f, -0.030115f, -0.026063f, 0.022175f, -0.006811f, -0.012154f, -0.011930f, -0.020882f, -0.028691f, 0.002387f, 0.023764f, 0.021698f, 0.018222f, -0.006675f, -0.023628f, -0.020500f, -0.014284f, 0.025899f, 0.035157f, -0.016120f, -0.024272f, -0.010392f, 0.029202f, 0.015179f, 0.039007f, -0.027262f, -0.010267f, 0.015531f, -0.007147f, 0.001471f, -0.003990f, 0.013977f, 0.008435f, 0.011329f, 0.002506f, -0.026071f, 0.011041f, 0.005087f, -0.000807f, 0.020549f, -0.010405f, -0.004992f, 0.003675f, -0.003541f, 0.002769f, -0.007395f, 0.034629f, 0.008883f, -0.002631f, 0.033063f, 0.033054f, -0.033212f, -0.050469f, -0.018325f, -0.034520f, 0.001270f, 0.023085f, 0.006790f, -0.020589f, -0.024779f, -0.006525f, -0.004585f, 0.020077f, 0.009760f, 0.012568f, 0.018919f, 0.011540f, -0.010164f, 0.011682f, 0.008439f, -0.024227f, -0.032400f, 0.009921f, -0.008351f, 0.016387f, 0.012193f, -0.017775f, -0.004521f, -0.005949f, -0.006294f, -0.020679f, -0.011145f, -0.001162f, 0.006856f, 0.010071f, 0.027963f, -0.013653f, - -0.010027f, 0.007221f, -0.006140f, -0.008023f, 0.016473f, 0.000686f, 0.036514f, -0.088727f, -0.233583f, -0.085871f, 0.041884f, 0.121506f, 0.256623f, 0.171732f, 0.044187f, 0.065085f, -0.034311f, -0.104462f, -0.173497f, -0.150943f, -0.120021f, -0.034608f, 0.004600f, 0.083492f, 0.092028f, 0.195946f, 0.095107f, 0.062726f, -0.004941f, -0.041766f, -0.094336f, -0.048972f, -0.076288f, -0.087946f, -0.054177f, -0.045331f, -0.003408f, 0.024508f, 0.073283f, 0.045325f, 0.052594f, 0.047840f, 0.048320f, 0.072729f, 0.006247f, 0.050396f, -0.009376f, -0.022611f, -0.061402f, -0.036555f, -0.091557f, -0.134710f, -0.117753f, 0.001404f, -0.020058f, 0.036963f, 0.063256f, 0.034727f, 0.097595f, 0.085274f, 0.123358f, 0.070265f, 0.083647f, 0.004167f, 0.004074f, -0.065963f, -0.107858f, -0.125966f, -0.151297f, -0.099390f, -0.123656f, -0.010368f, -0.000538f, 0.059532f, 0.062365f, 0.149444f, 0.117322f, 0.166932f, 0.067692f, 0.078063f, 0.032491f, -0.000667f, -0.099642f, -0.162415f, -0.108836f, -0.129744f, -0.080911f, -0.087840f, -0.008268f, 0.013633f, 0.051808f, 0.068087f, 0.092138f, 0.094153f, 0.090434f, 0.059300f, - 0.064741f, 0.016920f, -0.011804f, -0.022214f, -0.073035f, -0.066487f, -0.087431f, -0.061691f, -0.087400f, -0.066499f, -0.007011f, 0.015654f, 0.045978f, 0.069566f, 0.061937f, 0.063961f, 0.105211f, 0.038185f, 0.064212f, 0.049413f, -0.066453f, -0.120088f, -0.052170f, -0.105877f, -0.066877f, -0.036279f, -0.007651f, 0.009520f, 0.033666f, 0.061224f, 0.042475f, 0.065861f, 0.041666f, 0.035900f, 0.014360f, -0.003940f, -0.038298f, -0.012459f, -0.018008f, -0.066940f, -0.062731f, -0.017163f, -0.007162f, 0.003678f, 0.021960f, 0.025895f, 0.032615f, 0.026248f, 0.025777f, 0.009847f, 0.008662f, -0.000207f, -0.014717f, -0.007111f, -0.005400f, -0.014739f, -0.023911f, -0.007915f, -0.011970f, -0.013723f, -0.001635f, 0.006664f, 0.007264f, 0.011181f, 0.013235f, 0.016564f, 0.010600f, 0.007869f, 0.002444f, -0.001305f, -0.004153f, -0.006533f, -0.008959f, -0.009510f, -0.006919f, -0.005116f, -0.003851f, -0.003395f, 0.000078f, 0.001817f, 0.002069f, 0.003050f, 0.003240f, 0.004899f, 0.007282f, 0.007326f, 0.002105f, 0.001454f, 0.001965f, -0.000946f, -0.003804f, -0.005002f, -0.006915f, -0.005937f, -0.004167f, -0.001224f, - -0.001654f, -0.000068f, 0.002868f, 0.003091f, 0.002934f, 0.004226f, 0.003384f, 0.001973f, 0.000138f, 0.000119f, 0.000218f, -0.000480f, -0.001872f, -0.001608f, -0.001903f, -0.001861f, -0.001907f, -0.001212f, -0.000729f, 0.000214f, 0.000822f, 0.001568f, 0.001737f, 0.001367f, -0.000057f, 0.000659f, 0.000953f, 0.000639f, -0.000247f, -0.001115f, -0.001479f, -0.001223f, -0.000761f, -0.000113f, 0.000414f, 0.000989f, 0.000689f, 0.000264f, 0.000307f, 0.000424f, -0.000309f, -0.000611f, -0.000516f, -0.000493f, -0.000389f, 0.000023f, -0.000021f, 0.000049f, 0.000188f, 0.000195f, 0.000090f, 0.000036f, 0.000019f, -0.000018f} - }, - { - {0.014236f, 0.001503f, -0.003867f, -0.004046f, 0.002468f, -0.006900f, -0.000116f, -0.013430f, 0.009612f, 0.012191f, 0.008515f, 0.011998f, -0.014421f, 0.001154f, 0.003287f, -0.005151f, -0.003966f, -0.003526f, -0.016888f, -0.002852f, 0.010026f, -0.017292f, -0.014051f, 0.008161f, 0.007399f, -0.011115f, -0.003882f, 0.007338f, 0.000934f, 0.008923f, 0.003821f, 0.009295f, -0.005853f, 0.001768f, 0.001283f, -0.002486f, 0.004327f, 0.003394f, 0.006311f, 0.002639f, -0.002797f, 0.000593f, 0.007052f, -0.001922f, -0.003217f, -0.001209f, -0.008543f, -0.018855f, 0.011196f, 0.005423f, -0.005901f, 0.008251f, -0.003316f, 0.000900f, -0.000295f, 0.003825f, -0.004978f, -0.001308f, 0.011127f, -0.010500f, -0.004209f, 0.003625f, 0.001812f, -0.001639f, -0.000522f, 0.004863f, 0.000553f, 0.004303f, -0.007478f, 0.007586f, 0.003907f, -0.009759f, 0.007755f, 0.000670f, 0.002806f, -0.001182f, -0.002901f, -0.011389f, -0.003523f, -0.000871f, 0.005839f, -0.001521f, 0.004774f, -0.002878f, 0.000563f, 0.001404f, 0.000567f, 0.003370f, -0.000610f, 0.000213f, -0.000419f, -0.002325f, -0.001055f, 0.000431f, -0.001241f, 0.000140f, - -0.000062f, -0.000547f, 0.003104f, 0.003104f, 0.001623f, 0.001281f, 0.001129f, 0.000380f, 0.000007f, 0.000394f, 0.000166f, -0.000498f, -0.001392f, -0.001586f, -0.000357f, -0.000165f, 0.022330f, -0.012739f, 0.003975f, -0.014087f, 0.001769f, 0.003376f, -0.014202f, -0.017977f, 0.004573f, -0.019510f, 0.004380f, -0.005040f, -0.001285f, -0.011941f, -0.001674f, -0.013417f, -0.006864f, 0.000119f, -0.014198f, 0.015223f, 0.005404f, -0.023593f, 0.002314f, -0.001239f, -0.004218f, -0.010064f, 0.005155f, 0.012337f, 0.000311f, -0.000842f, 0.011588f, -0.006707f, 0.000213f, -0.004248f, 0.007701f, -0.008883f, 0.002689f, 0.010830f, -0.009309f, 0.009478f, 0.003377f, 0.010246f, -0.000810f, 0.002369f, -0.001478f, -0.004245f, 0.013410f, -0.016510f, 0.003885f, -0.007278f, -0.003122f, -0.002108f, -0.005969f, -0.004408f, -0.013143f, -0.008249f, -0.002002f, 0.008648f, -0.000672f, 0.003277f, 0.012093f, -0.000235f, -0.010374f, -0.001297f, 0.000437f, 0.003309f, -0.005035f, 0.000058f, -0.010204f, 0.000258f, -0.004121f, 0.003432f, 0.005391f, 0.007886f, 0.002853f, -0.004392f, -0.005709f, 0.007739f, -0.002523f, -0.003492f, - 0.001493f, 0.004319f, 0.008928f, 0.001115f, 0.002600f, -0.000546f, 0.005256f, -0.000979f, -0.004069f, -0.002077f, -0.001988f, -0.000156f, 0.003580f, 0.000719f, -0.000182f, -0.001846f, 0.003470f, 0.000020f, -0.001230f, -0.000929f, -0.000825f, -0.000969f, 0.001675f, -0.000658f, -0.000121f, -0.001950f, -0.005281f, -0.018355f, -0.000142f, -0.011030f, -0.003431f, -0.001730f, -0.012883f, -0.001694f, -0.002946f, 0.006511f, 0.015180f, 0.015280f, 0.001876f, -0.006412f, 0.006144f, -0.014636f, -0.002039f, -0.005548f, 0.005197f, -0.021851f, 0.007809f, 0.003803f, -0.000739f, -0.006224f, -0.009396f, -0.004234f, -0.007742f, -0.006621f, 0.004162f, -0.001377f, -0.008353f, -0.002360f, 0.001758f, 0.014417f, -0.000500f, -0.014377f, 0.001185f, 0.006327f, -0.000130f, -0.004458f, 0.001250f, 0.005548f, -0.015678f, -0.001124f, -0.006792f, 0.011149f, 0.006772f, 0.001976f, -0.014495f, 0.001748f, 0.005641f, 0.009020f, 0.008381f, -0.009449f, -0.004455f, 0.000542f, -0.002950f, -0.002886f, 0.007806f, -0.004710f, 0.004790f, 0.001417f, -0.006078f, -0.001264f, -0.008364f, 0.010228f, 0.003826f, -0.009873f, -0.006864f, 0.001807f, - 0.005326f, -0.007805f, -0.009974f, -0.001579f, 0.000518f, -0.006524f, 0.001450f, -0.002603f, 0.003391f, -0.006209f, 0.009438f, 0.005177f, 0.007117f, 0.002162f, 0.000949f, 0.006524f, 0.008656f, 0.001144f, 0.002465f, -0.000689f, 0.001236f, 0.000286f, -0.000356f, 0.001106f, 0.000730f, 0.001145f, -0.001366f, 0.000194f, 0.000662f, -0.000337f, 0.000148f, 0.003029f, -0.001683f, 0.000807f, -0.002017f, -0.001458f, -0.001358f, 0.000450f, 0.001078f, 0.000891f, 0.000083f, -0.001711f, -0.001257f, 0.003115f, -0.031285f, 0.010217f, 0.009145f, 0.015265f, -0.003867f, 0.009615f, -0.026977f, -0.007320f, 0.008546f, 0.001081f, -0.013311f, -0.003410f, -0.004386f, -0.023618f, -0.009538f, 0.002479f, -0.001024f, -0.016817f, 0.010615f, 0.015073f, -0.015339f, 0.011766f, -0.020108f, -0.006784f, -0.001751f, 0.007019f, -0.000052f, -0.008102f, 0.005589f, 0.002835f, -0.001293f, 0.009088f, -0.004309f, -0.005730f, -0.001761f, -0.003238f, -0.005918f, 0.008942f, -0.006763f, 0.002588f, 0.006686f, -0.001274f, -0.005229f, -0.009827f, -0.001158f, -0.006989f, -0.002115f, -0.008144f, -0.002183f, 0.018370f, 0.000414f, 0.011201f, - -0.010170f, 0.009412f, -0.002880f, -0.014866f, -0.008782f, 0.008356f, -0.005399f, -0.007520f, 0.005491f, -0.008856f, 0.007474f, 0.002084f, -0.002719f, 0.009814f, 0.008816f, 0.003961f, -0.009625f, -0.010844f, -0.000729f, 0.014634f, 0.002919f, 0.002292f, -0.008223f, 0.002236f, 0.005252f, -0.011012f, -0.004039f, 0.003697f, 0.007773f, 0.003934f, 0.006583f, -0.000281f, 0.000084f, 0.002507f, 0.000330f, -0.001157f, 0.000416f, -0.000857f, -0.001383f, -0.004818f, -0.003908f, 0.001289f, -0.002345f, -0.001313f, 0.001671f, 0.000840f, 0.001227f, -0.000213f, 0.002026f, -0.001206f, 0.000113f, -0.001632f, 0.000034f, -0.002000f, 0.001064f, 0.000458f, 0.001452f, -0.002637f, -0.016471f, -0.015640f, -0.010235f, 0.002290f, -0.002384f, 0.006847f, -0.005476f, 0.000324f, 0.001461f, -0.004447f, -0.001505f, 0.004336f, -0.004418f, 0.018981f, -0.011944f, 0.008960f, -0.002915f, -0.000961f, -0.008395f, -0.002074f, -0.000909f, 0.013927f, -0.009005f, 0.001536f, 0.002926f, -0.013032f, -0.007876f, -0.008801f, -0.007467f, -0.015157f, -0.005050f, 0.005886f, 0.010776f, 0.006970f, -0.012077f, -0.017108f, -0.003551f, 0.000856f, - -0.008599f, 0.001950f, -0.005755f, -0.008769f, -0.021302f, -0.010521f, -0.014851f, 0.009040f, -0.003642f, 0.007408f, -0.008418f, -0.020708f, -0.010887f, 0.001369f, -0.004019f, -0.006573f, -0.002875f, -0.007953f, 0.011499f, 0.001339f, 0.006804f, 0.009085f, 0.002478f, -0.000029f, -0.007035f, 0.000658f, 0.009770f, -0.001307f, -0.006785f, -0.009426f, 0.015912f, -0.012687f, -0.017930f, -0.012506f, -0.007143f, -0.009762f, 0.011641f, 0.018515f, -0.014233f, -0.009649f, 0.002484f, 0.009161f, 0.013799f, 0.011062f, 0.008615f, 0.008600f, -0.002675f, -0.003258f, -0.003875f, -0.003919f, 0.003601f, -0.002264f, 0.001158f, -0.002838f, -0.004895f, -0.001739f, -0.003457f, 0.003075f, -0.002068f, -0.004221f, -0.002432f, -0.002284f, -0.004361f, -0.004726f, -0.002943f, -0.000919f, 0.001261f, 0.001287f, 0.002638f, 0.000678f, -0.007666f, 0.001313f, -0.000976f, -0.002804f, 0.001171f, -0.001004f, -0.002149f, -0.004803f, -0.004033f, 0.000528f, 0.000253f, -0.001357f, -0.001762f, 0.000390f, -0.002188f, 0.001742f, -0.001876f, -0.000876f, -0.000698f, -0.003295f, 0.004321f, -0.034400f, 0.010631f, -0.002419f, 0.006097f, 0.018895f, - 0.007411f, -0.004648f, 0.006386f, -0.014177f, 0.008777f, 0.010335f, -0.018759f, -0.003973f, -0.009508f, 0.010612f, 0.009183f, 0.014391f, 0.016624f, -0.021584f, -0.011168f, 0.003614f, 0.018551f, -0.006998f, 0.008605f, -0.020622f, -0.006285f, -0.007192f, -0.004429f, -0.012455f, 0.003057f, -0.020404f, 0.014137f, -0.003947f, -0.003686f, 0.010443f, -0.000675f, 0.002449f, 0.010956f, 0.000386f, 0.008954f, 0.006132f, -0.002619f, -0.003458f, -0.001288f, -0.014275f, -0.010612f, -0.013030f, -0.000907f, 0.027419f, 0.006262f, 0.005396f, -0.000726f, -0.003696f, -0.000317f, 0.016443f, -0.003583f, 0.005235f, -0.031585f, 0.029108f, -0.007122f, -0.005038f, 0.001560f, 0.017888f, 0.006350f, -0.002824f, -0.010911f, 0.031198f, -0.006104f, -0.000222f, 0.009825f, -0.007705f, -0.000176f, 0.004617f, -0.007125f, 0.006303f, 0.005954f, 0.025816f, -0.012900f, -0.015880f, -0.003096f, 0.007860f, -0.009798f, 0.002342f, 0.006478f, 0.002317f, -0.005796f, 0.002742f, 0.006637f, -0.004082f, 0.000443f, -0.007124f, -0.002475f, -0.001939f, -0.006166f, 0.008095f, -0.005878f, -0.004603f, 0.003412f, 0.000009f, -0.006946f, -0.000368f, - 0.001441f, 0.003155f, 0.000135f, 0.003675f, -0.002652f, -0.001832f, -0.002203f, 0.002566f, -0.002710f, 0.004359f, 0.000231f, -0.001442f, 0.001649f, 0.004552f, -0.007773f, -0.000305f, -0.002166f, 0.014688f, 0.008148f, 0.016369f, -0.006838f, -0.004149f, 0.009346f, -0.015497f, 0.013561f, 0.015504f, -0.008075f, -0.001528f, -0.024889f, 0.000967f, 0.008296f, 0.006673f, -0.005429f, -0.017000f, -0.034275f, 0.000345f, -0.005992f, -0.016376f, 0.003573f, 0.010668f, -0.014994f, -0.006509f, -0.016335f, 0.007960f, 0.000728f, -0.002607f, -0.005563f, -0.007201f, 0.017199f, 0.020095f, 0.007697f, 0.009468f, -0.004720f, -0.010397f, 0.028109f, 0.006835f, -0.005024f, -0.016829f, 0.012056f, 0.000306f, 0.016081f, -0.001641f, 0.019918f, 0.009859f, 0.013880f, 0.011703f, 0.005873f, 0.015457f, 0.019348f, -0.000764f, 0.003418f, -0.006445f, -0.000397f, 0.010463f, 0.004270f, 0.005597f, -0.017477f, -0.006549f, -0.003839f, -0.015253f, -0.014583f, -0.009683f, 0.007870f, 0.016410f, 0.021529f, 0.028218f, 0.006138f, 0.002283f, 0.022712f, -0.009330f, -0.017448f, -0.006214f, -0.008926f, 0.014621f, 0.011930f, 0.004441f, - -0.016531f, -0.004655f, 0.002739f, 0.002173f, -0.003357f, -0.007736f, 0.002134f, 0.001724f, 0.009287f, -0.002468f, -0.005400f, 0.000897f, 0.001672f, 0.002120f, 0.000014f, -0.000061f, 0.001716f, 0.004137f, -0.003221f, -0.003179f, 0.000130f, -0.000569f, -0.004453f, -0.001182f, -0.005636f, 0.005800f, 0.001779f, -0.004316f, -0.000323f, 0.003872f, -0.002277f, -0.000554f, -0.003405f, 0.001608f, 0.001995f, -0.001630f, 0.005052f, 0.003757f, -0.000717f, 0.026125f, -0.025111f, -0.011897f, -0.003527f, 0.009906f, -0.023508f, 0.014584f, -0.023165f, 0.011146f, -0.000254f, 0.011839f, 0.018818f, -0.007940f, 0.017169f, 0.018824f, 0.017857f, -0.010618f, 0.015032f, -0.016546f, -0.013264f, -0.002183f, -0.010297f, -0.000310f, -0.008884f, 0.014767f, -0.011240f, 0.003136f, -0.011101f, -0.019280f, -0.009123f, -0.004172f, 0.022923f, -0.019532f, 0.018011f, 0.007882f, -0.027069f, 0.030674f, 0.007381f, 0.003304f, 0.021428f, 0.003712f, 0.000762f, -0.012384f, -0.000274f, -0.006970f, 0.024458f, 0.010296f, 0.017078f, -0.006858f, -0.004298f, 0.011788f, 0.020331f, -0.021598f, 0.021075f, 0.003777f, -0.003683f, -0.004116f, - -0.020459f, 0.009647f, -0.009775f, 0.004015f, 0.000673f, -0.018446f, 0.005967f, 0.015433f, -0.014339f, 0.009756f, 0.006221f, 0.021647f, 0.002078f, -0.001559f, 0.012960f, 0.018925f, 0.001309f, -0.010994f, 0.012527f, -0.014803f, -0.007910f, 0.003846f, -0.006205f, 0.003897f, -0.005025f, 0.001817f, 0.007972f, 0.005936f, -0.006258f, 0.005181f, -0.003345f, 0.004167f, -0.004473f, 0.013178f, 0.001078f, 0.012583f, -0.001777f, 0.003113f, -0.002933f, -0.001148f, -0.004299f, 0.007964f, 0.003100f, -0.006648f, 0.006637f, 0.007988f, -0.001159f, -0.001142f, 0.004630f, -0.000383f, -0.000690f, 0.006655f, -0.000481f, 0.001615f, 0.004038f, 0.002801f, -0.001318f, 0.005087f, -0.004507f, -0.000792f, 0.000701f, 0.001372f, 0.000851f, -0.000294f, -0.000891f, -0.005086f, 0.002129f, 0.007567f, 0.001872f, -0.021276f, -0.015233f, 0.023088f, -0.029642f, 0.007441f, -0.015796f, 0.017577f, -0.018848f, 0.028727f, 0.009929f, 0.002769f, -0.024977f, 0.012701f, 0.021075f, 0.005572f, -0.012861f, -0.008341f, -0.007381f, 0.019598f, 0.010619f, -0.027357f, 0.003826f, -0.019352f, -0.001113f, 0.002219f, -0.016588f, 0.021692f, - 0.021718f, -0.009874f, 0.004722f, 0.014778f, -0.018086f, -0.002731f, -0.005607f, -0.014918f, 0.031701f, -0.011525f, -0.007162f, -0.015974f, -0.026775f, -0.004216f, 0.000432f, -0.009206f, 0.003905f, -0.022082f, 0.001883f, 0.001592f, -0.004500f, 0.017510f, -0.003713f, -0.013559f, 0.007006f, 0.000028f, -0.010249f, 0.008770f, 0.037573f, -0.007487f, 0.008886f, 0.002101f, -0.025651f, -0.004107f, 0.022737f, 0.010342f, 0.022570f, -0.002262f, 0.013013f, -0.017982f, 0.008016f, 0.008043f, 0.002581f, -0.015267f, 0.014095f, 0.005089f, -0.039880f, 0.003183f, -0.007278f, 0.026697f, -0.010309f, 0.020753f, 0.019046f, 0.015478f, -0.002000f, 0.006001f, 0.000808f, 0.001652f, -0.002690f, -0.004279f, 0.010298f, 0.004307f, -0.000242f, -0.006783f, -0.009742f, -0.002126f, 0.004028f, 0.006877f, 0.004734f, 0.008793f, 0.000199f, -0.002210f, -0.003682f, -0.002652f, 0.003026f, 0.005326f, -0.000587f, 0.004238f, 0.002571f, 0.000911f, 0.003638f, -0.000559f, 0.003807f, -0.006337f, -0.008161f, -0.010420f, -0.000618f, 0.004998f, 0.002073f, -0.004791f, -0.001925f, -0.003294f, -0.003974f, 0.006671f, 0.001858f, 0.003087f, - 0.002612f, -0.046761f, 0.052299f, 0.005930f, 0.020480f, -0.038409f, 0.020553f, 0.026832f, -0.031503f, 0.011634f, 0.015193f, 0.011699f, -0.020453f, 0.002384f, 0.003290f, -0.007076f, 0.011511f, 0.024010f, -0.019760f, -0.016478f, -0.006205f, 0.020315f, 0.017522f, 0.024904f, -0.001488f, 0.010369f, -0.019027f, -0.005172f, -0.005147f, 0.003856f, 0.011554f, 0.031908f, 0.018877f, 0.011437f, 0.005840f, -0.001324f, 0.015089f, -0.005944f, -0.027880f, -0.005615f, 0.007837f, 0.008562f, -0.016433f, -0.012487f, -0.020285f, 0.003612f, -0.001869f, 0.006774f, -0.013396f, 0.023235f, 0.022678f, -0.020129f, 0.046990f, 0.001921f, -0.004626f, -0.000515f, -0.010124f, -0.002372f, -0.003310f, -0.019358f, 0.000034f, -0.000183f, 0.012265f, -0.040019f, 0.009461f, -0.014338f, 0.028611f, 0.034660f, 0.014820f, 0.014264f, 0.006234f, 0.002096f, 0.031218f, -0.006141f, -0.023584f, 0.019707f, -0.010780f, 0.005117f, 0.015276f, 0.028158f, 0.003701f, 0.002575f, -0.023012f, -0.001212f, 0.006359f, 0.017796f, -0.008119f, 0.009568f, 0.004430f, -0.007114f, 0.018008f, 0.002873f, 0.007913f, -0.005544f, -0.001978f, -0.005494f, - 0.000603f, 0.001897f, -0.003080f, -0.000365f, 0.005221f, -0.003247f, 0.005295f, 0.003561f, -0.004188f, -0.000613f, 0.002305f, -0.001844f, 0.000155f, -0.003942f, -0.012632f, -0.003737f, -0.002168f, 0.012717f, 0.015684f, 0.001385f, 0.002063f, -0.004769f, -0.005630f, 0.001169f, 0.001457f, -0.006852f, -0.005472f, -0.003640f, -0.003308f, 0.004125f, -0.007680f, -0.000518f, -0.005718f, 0.019407f, 0.003945f, -0.013022f, 0.012678f, 0.018901f, 0.016438f, 0.010498f, 0.019553f, -0.023158f, -0.014698f, 0.002910f, -0.020958f, -0.004994f, -0.003360f, 0.004972f, -0.005256f, -0.013472f, -0.017072f, -0.010107f, 0.008697f, 0.014836f, -0.025324f, 0.005669f, -0.002504f, -0.000413f, -0.030558f, -0.027326f, -0.004652f, -0.021133f, 0.010256f, -0.024135f, 0.001720f, 0.013335f, 0.018930f, -0.016367f, 0.022463f, 0.005974f, -0.002070f, -0.004644f, 0.033238f, -0.008944f, -0.001510f, -0.026315f, -0.014819f, 0.021969f, -0.001519f, 0.008497f, -0.025468f, -0.027736f, -0.007536f, -0.015523f, -0.002632f, 0.001519f, -0.010220f, -0.012960f, 0.008005f, -0.012007f, 0.001201f, -0.017834f, -0.009690f, -0.000159f, -0.029777f, 0.003059f, - 0.019786f, 0.004060f, 0.010445f, 0.021737f, 0.036830f, -0.035119f, 0.006566f, -0.021547f, -0.021152f, -0.011569f, -0.016050f, -0.010054f, -0.009432f, 0.036259f, 0.019873f, 0.020221f, 0.004231f, 0.006178f, -0.025881f, 0.001609f, -0.009054f, 0.004500f, -0.011187f, 0.016249f, 0.021084f, 0.002405f, -0.009417f, -0.006100f, -0.017839f, 0.001987f, 0.011109f, 0.006468f, -0.004255f, 0.011737f, 0.005563f, 0.012407f, -0.002507f, -0.001837f, 0.002051f, 0.008208f, -0.004922f, 0.003723f, -0.007277f, -0.009826f, 0.007448f, 0.003043f, 0.001586f, 0.002033f, -0.013849f, -0.007882f, -0.000012f, 0.011090f, -0.008950f, 0.005753f, -0.012016f, -0.003634f, -0.001880f, 0.004682f, 0.002947f, -0.003186f, -0.002902f, -0.015631f, 0.006862f, 0.037581f, 0.039810f, 0.043672f, -0.031483f, 0.002905f, 0.023821f, 0.018863f, -0.018151f, -0.035271f, -0.003596f, -0.004787f, -0.027602f, -0.015744f, 0.054064f, 0.004758f, 0.004239f, 0.020562f, -0.001731f, 0.009103f, -0.006784f, -0.020674f, 0.014570f, 0.012226f, -0.028124f, -0.040283f, -0.031032f, -0.024603f, -0.023340f, 0.002835f, 0.007572f, 0.012677f, -0.015313f, 0.016133f, - 0.004356f, -0.007288f, -0.016235f, -0.000043f, 0.001562f, -0.025496f, -0.019742f, 0.003505f, -0.004071f, 0.004066f, -0.015131f, 0.013256f, 0.004605f, -0.014335f, -0.031195f, -0.012083f, -0.010102f, -0.041843f, -0.012699f, 0.004452f, 0.021580f, -0.001539f, 0.025438f, -0.003893f, -0.001425f, -0.035602f, -0.007005f, 0.014656f, 0.007436f, -0.059903f, 0.017980f, 0.005698f, -0.016154f, -0.009775f, -0.016875f, -0.019361f, -0.000102f, 0.001370f, -0.018454f, -0.005720f, 0.012924f, 0.018055f, 0.028436f, -0.020755f, 0.001728f, 0.016093f, 0.000015f, -0.045731f, -0.036076f, 0.000008f, -0.009007f, 0.011990f, 0.000400f, -0.010931f, -0.015784f, 0.008051f, -0.004007f, 0.007349f, 0.019635f, -0.000097f, -0.008564f, -0.015319f, -0.028080f, -0.009441f, 0.002547f, -0.004375f, -0.004072f, 0.002292f, 0.002695f, 0.013226f, -0.005763f, 0.001735f, 0.005646f, 0.002933f, -0.009596f, 0.001589f, -0.001806f, -0.024730f, 0.003419f, -0.008915f, -0.010473f, 0.004449f, 0.003965f, -0.007239f, -0.001501f, 0.009412f, 0.003534f, 0.002766f, -0.008364f, -0.010160f, -0.002769f, -0.000442f, 0.001493f, 0.006787f, -0.011015f, -0.000969f, - -0.006904f, -0.004308f, -0.009080f, 0.015366f, -0.011980f, 0.042575f, -0.035378f, -0.021586f, -0.006723f, -0.067444f, -0.034920f, 0.000351f, -0.042739f, 0.034183f, -0.014635f, -0.013524f, 0.004466f, 0.077578f, 0.037810f, 0.002890f, 0.016450f, -0.003084f, -0.020051f, -0.001568f, -0.031362f, -0.022677f, 0.011662f, 0.011660f, 0.014479f, -0.021772f, 0.029150f, 0.017897f, 0.032900f, -0.032304f, 0.005937f, 0.048214f, 0.005145f, 0.002395f, 0.010113f, -0.045381f, 0.012386f, -0.011157f, 0.008234f, -0.018033f, -0.042544f, -0.002245f, 0.018191f, 0.021698f, 0.006235f, -0.006369f, 0.003867f, -0.001604f, 0.015065f, -0.032292f, -0.046792f, 0.008864f, -0.016603f, 0.028726f, -0.010601f, -0.011470f, 0.037824f, 0.008677f, 0.016708f, 0.003285f, -0.030557f, -0.012535f, -0.002964f, 0.017219f, 0.049680f, 0.037925f, -0.010428f, -0.042928f, -0.000086f, -0.004691f, 0.016822f, -0.026374f, -0.032567f, -0.018697f, 0.016644f, -0.033584f, -0.004445f, -0.028147f, 0.001026f, 0.023116f, 0.000158f, -0.042327f, -0.008492f, 0.005866f, 0.012072f, 0.005517f, -0.025645f, -0.017683f, -0.027498f, 0.004597f, -0.005052f, -0.012152f, - -0.008559f, -0.012153f, 0.003334f, -0.004973f, -0.010845f, -0.003180f, 0.009272f, 0.000109f, 0.000579f, -0.014293f, 0.000628f, -0.001218f, -0.008207f, 0.000889f, 0.018745f, 0.006053f, 0.004238f, -0.018168f, 0.008125f, -0.001923f, -0.001077f, 0.002950f, 0.000610f, -0.000289f, -0.002701f, -0.010817f, -0.011059f, -0.009908f, 0.013399f, 0.010788f, -0.003902f, -0.027112f, -0.008939f, -0.010060f, -0.001098f, -0.014438f, -0.077745f, 0.029473f, 0.024102f, -0.011736f, -0.051531f, -0.011656f, -0.020109f, -0.021096f, 0.022130f, 0.027500f, -0.003277f, 0.007264f, -0.058518f, 0.020118f, -0.073139f, -0.018733f, -0.006746f, 0.014156f, 0.036149f, 0.057784f, 0.023676f, -0.033948f, 0.007376f, 0.040289f, 0.004953f, 0.012050f, 0.021574f, -0.034483f, -0.013653f, -0.005685f, 0.009908f, -0.024370f, -0.013426f, -0.007582f, -0.018569f, -0.014075f, 0.024199f, 0.023955f, 0.005734f, 0.001754f, 0.041287f, -0.008117f, 0.019013f, -0.047489f, 0.030821f, 0.008715f, -0.043339f, 0.004137f, 0.013208f, -0.040494f, -0.005719f, -0.039604f, 0.012644f, 0.016364f, 0.017154f, -0.026728f, -0.002819f, 0.026257f, -0.022608f, 0.000105f, - -0.004112f, 0.043489f, -0.026429f, 0.031993f, 0.015738f, -0.040895f, 0.035162f, -0.030156f, 0.022413f, 0.030129f, -0.031209f, 0.017101f, -0.026725f, -0.032662f, -0.049597f, -0.041026f, -0.045417f, -0.010854f, 0.007355f, -0.013636f, 0.038520f, 0.040527f, -0.017855f, 0.035704f, -0.006167f, -0.007693f, 0.044908f, -0.010275f, -0.031240f, 0.021130f, -0.005288f, -0.023981f, -0.019072f, 0.017906f, 0.002475f, 0.009231f, 0.013530f, 0.002418f, 0.010988f, 0.018031f, -0.005603f, 0.020235f, 0.013206f, 0.010051f, 0.010772f, 0.001614f, 0.006300f, 0.017198f, 0.013107f, 0.017442f, 0.001797f, 0.014476f, -0.003552f, 0.000948f, 0.011836f, -0.006340f, -0.023660f, 0.010741f, 0.002765f, -0.000018f, -0.000418f, 0.010265f, -0.021092f, 0.010331f, 0.013280f, 0.011505f, -0.014322f, 0.011779f, -0.062026f, -0.029738f, -0.030923f, 0.052788f, 0.000827f, 0.019244f, -0.009512f, 0.075190f, 0.011193f, -0.051519f, 0.002913f, 0.055044f, -0.021482f, 0.011663f, -0.010029f, 0.004071f, -0.033438f, -0.044780f, 0.069009f, 0.048931f, -0.019942f, 0.037381f, 0.014171f, 0.048858f, 0.055592f, -0.017251f, -0.014151f, 0.049409f, - 0.035943f, 0.003320f, -0.016702f, -0.025693f, -0.027008f, 0.022470f, 0.043396f, 0.020042f, -0.008929f, 0.028983f, -0.016504f, 0.027471f, -0.013493f, 0.040405f, 0.072047f, 0.054766f, -0.060259f, 0.026380f, -0.011001f, -0.024953f, -0.001672f, 0.019927f, 0.019099f, 0.132422f, -0.014346f, -0.002161f, -0.022582f, -0.024412f, 0.025040f, 0.047347f, -0.012692f, 0.035807f, 0.030326f, -0.004965f, 0.000198f, -0.026698f, 0.025493f, 0.021419f, 0.069941f, 0.071284f, 0.086592f, 0.035578f, -0.023272f, -0.018893f, -0.041152f, 0.038487f, -0.060426f, 0.042253f, -0.056780f, 0.032037f, -0.020641f, -0.034375f, 0.023335f, -0.091207f, -0.072478f, 0.012240f, 0.013092f, -0.026669f, -0.026052f, 0.041378f, 0.020054f, -0.039589f, 0.004794f, -0.009634f, -0.022218f, 0.006155f, 0.009893f, 0.002520f, 0.010034f, 0.012155f, 0.021791f, -0.011347f, 0.003448f, -0.013554f, -0.023606f, -0.014607f, 0.004411f, 0.001172f, 0.030236f, 0.005878f, -0.008571f, -0.026111f, 0.003000f, -0.010829f, -0.009168f, -0.012052f, 0.007713f, 0.018054f, 0.005642f, 0.015567f, 0.012668f, 0.020837f, -0.010139f, 0.015691f, 0.001128f, 0.004023f, - -0.002541f, 0.000636f, -0.013777f, 0.014417f, 0.035188f, 0.018691f, -0.004916f, -0.004809f, 0.030130f, 0.025445f, -0.021007f, 0.008368f, 0.015817f, -0.009952f, 0.043060f, 0.010637f, -0.096664f, 0.023650f, 0.014128f, -0.071690f, 0.005598f, -0.011338f, 0.004337f, 0.027839f, -0.002212f, -0.066207f, -0.010628f, -0.020345f, -0.002433f, 0.048787f, 0.058586f, -0.031482f, -0.006851f, -0.026262f, 0.015463f, -0.050526f, -0.098700f, -0.034804f, -0.028838f, 0.006295f, 0.003038f, 0.046537f, -0.067011f, 0.033613f, -0.014500f, -0.006565f, 0.029520f, 0.014185f, 0.049009f, 0.011818f, 0.019753f, 0.051862f, -0.056727f, 0.073528f, 0.059078f, 0.030979f, 0.055509f, -0.020078f, 0.021988f, -0.049733f, -0.008610f, -0.024599f, 0.046260f, -0.038817f, 0.011063f, -0.084371f, -0.104206f, 0.071413f, -0.001771f, 0.046365f, -0.030601f, 0.030962f, -0.019465f, 0.007349f, -0.010518f, -0.068455f, -0.020380f, -0.045512f, -0.020461f, 0.025841f, 0.104194f, 0.037407f, -0.089069f, -0.019763f, 0.025511f, -0.020270f, -0.012045f, -0.059146f, -0.029434f, 0.046940f, -0.015790f, 0.011883f, 0.010627f, -0.036633f, 0.025141f, -0.004787f, - 0.003362f, -0.075923f, -0.020755f, -0.000994f, -0.033448f, -0.019231f, 0.004456f, -0.051213f, 0.006962f, 0.012192f, -0.040372f, -0.032414f, -0.057637f, -0.043585f, -0.002546f, -0.023905f, -0.010152f, 0.002012f, -0.015389f, -0.016215f, -0.005382f, -0.025651f, -0.010966f, 0.003839f, 0.019368f, -0.022601f, -0.006667f, -0.039044f, 0.015537f, 0.010124f, 0.024818f, -0.015947f, 0.025750f, -0.050705f, -0.001433f, 0.000353f, -0.001995f, 0.008142f, -0.006708f, 0.005724f, -0.022110f, -0.024588f, 0.001804f, 0.010217f, 0.000911f, -0.019341f, 0.006980f, 0.005985f, -0.060255f, 0.031748f, 0.031653f, 0.056337f, -0.027565f, 0.020671f, -0.031686f, -0.036671f, 0.016264f, 0.074854f, 0.121075f, -0.007481f, -0.008168f, 0.002636f, -0.002837f, -0.053904f, 0.084642f, 0.040852f, 0.044934f, 0.034906f, -0.024747f, 0.029593f, -0.048009f, -0.068651f, -0.012108f, 0.051714f, 0.033274f, -0.024426f, -0.016153f, -0.003203f, 0.041420f, 0.001991f, 0.030103f, 0.030018f, 0.049064f, 0.016720f, -0.031387f, -0.029220f, 0.027889f, -0.032912f, -0.025121f, 0.014932f, 0.053856f, 0.050324f, -0.057518f, -0.043847f, 0.029059f, 0.035514f, - 0.106184f, -0.024368f, -0.058491f, -0.059768f, 0.050559f, -0.038088f, 0.047659f, 0.054858f, 0.109206f, 0.233242f, -0.052561f, -0.029201f, -0.087762f, -0.138391f, -0.044833f, -0.069430f, 0.007455f, 0.097087f, -0.014771f, 0.051687f, 0.072341f, 0.048376f, -0.027573f, -0.085428f, -0.141501f, 0.079250f, -0.006189f, 0.090080f, -0.046636f, -0.121495f, 0.041946f, -0.071712f, -0.097126f, -0.048789f, -0.031417f, 0.031450f, 0.029522f, 0.055696f, -0.004859f, -0.025949f, -0.005043f, -0.001434f, -0.050702f, -0.047504f, 0.023770f, -0.016252f, 0.048434f, 0.045803f, -0.022351f, 0.045637f, -0.036140f, 0.001930f, 0.043148f, 0.005715f, -0.069585f, 0.019318f, -0.035548f, -0.004976f, -0.012128f, -0.008130f, -0.051636f, -0.040310f, 0.006983f, 0.061172f, 0.063238f, -0.059064f, -0.008258f, 0.074521f, 0.069011f, 0.001369f, 0.013611f, -0.065037f, -0.036454f, 0.011208f, 0.037520f, -0.055944f, 0.013375f, 0.046174f, 0.021114f, 0.018448f, 0.003699f, 0.029786f, 0.042434f, 0.022633f, -0.006452f, 0.007840f, -0.046107f, 0.009632f, -0.041944f, -0.117272f, 0.030653f, -0.048494f, 0.049951f, 0.008077f, 0.028300f, 0.024859f, - -0.107160f, -0.075723f, -0.036996f, -0.022968f, -0.024185f, -0.043335f, -0.012794f, -0.072556f, -0.045792f, 0.036130f, -0.046827f, 0.091778f, -0.066705f, 0.007778f, 0.019722f, -0.006385f, 0.008984f, -0.003100f, 0.022725f, -0.020297f, -0.021737f, -0.003145f, 0.017292f, -0.002080f, 0.040024f, -0.036041f, 0.009329f, 0.057772f, 0.019294f, 0.009313f, 0.030061f, 0.004357f, -0.022173f, -0.014039f, 0.047308f, 0.011120f, -0.072046f, -0.031676f, -0.058249f, -0.026273f, 0.079697f, 0.074035f, -0.074637f, -0.007657f, -0.085002f, -0.020038f, -0.006049f, 0.020567f, 0.044292f, -0.069833f, 0.048185f, -0.059353f, -0.009018f, -0.039993f, 0.091672f, -0.017617f, 0.065009f, 0.060391f, 0.134073f, -0.060552f, 0.055996f, 0.009585f, 0.053274f, 0.018841f, 0.040939f, -0.065948f, -0.059951f, 0.089426f, 0.005565f, -0.002711f, -0.061626f, 0.072311f, -0.023007f, 0.037397f, -0.064902f, 0.139710f, -0.073242f, 0.077987f, -0.092015f, 0.037467f, -0.069021f, 0.039448f, -0.063472f, 0.048629f, -0.039701f, 0.028798f, -0.021555f, 0.016111f, -0.033549f, -0.021035f, -0.015152f, -0.003806f, 0.013751f, 0.002696f, 0.011376f, 0.001347f, - 0.011221f, -0.004753f, -0.016381f, -0.027733f, 0.014276f, 0.014550f, 0.005549f, 0.013361f, -0.009058f, 0.005502f, -0.006848f, 0.005750f, 0.049363f, -0.011606f, -0.032773f, 0.005286f, -0.017880f, -0.036212f, 0.013223f, -0.019603f, 0.016223f, -0.016387f, 0.013775f, -0.031624f, 0.014630f, -0.041009f, 0.027562f, 0.060085f, 0.011075f, -0.104404f, -0.044763f, -0.063905f, 0.005771f, -0.013363f, -0.141671f, -0.063237f, -0.035574f, -0.074552f, -0.045579f, -0.142841f, -0.120172f, -0.020296f, 0.054185f, -0.077795f, -0.045569f, -0.009758f, -0.065850f, -0.013739f, -0.003454f, -0.063797f, -0.015523f, 0.015250f, 0.005233f, -0.085270f, -0.047553f, -0.047866f, -0.025599f, -0.029033f, -0.006886f, -0.058652f, 0.052420f, 0.034652f, 0.073978f, 0.106433f, 0.093046f, 0.025041f, 0.098273f, 0.040363f, 0.019216f, -0.040963f, 0.035780f, 0.036846f, 0.029813f, -0.009354f, -0.030856f, -0.013473f, 0.026217f, 0.044610f, 0.222135f, 0.031656f, 0.047484f, 0.034170f, 0.092144f, 0.036668f, 0.081219f, 0.145698f, -0.067188f, -0.139003f, 0.019769f, 0.091881f, 0.163045f, 0.073155f, -0.136582f, 0.020679f, -0.032326f, 0.204764f, - 0.151614f, 0.183416f, 0.168811f, -0.142653f, -0.092990f, 0.120593f, 0.144889f, -0.039575f, -0.080355f, -0.097983f, 0.227151f, 0.151635f, -0.007161f, -0.191311f, 0.048859f, -0.005338f, -0.040452f, 0.055371f, 0.016922f, -0.014768f, -0.038895f, 0.001376f, 0.033086f, 0.085665f, 0.061993f, -0.047557f, -0.017379f, -0.011093f, -0.007980f, 0.049452f, 0.037010f, 0.038924f, 0.003275f, 0.022014f, 0.079745f, 0.054569f, 0.013657f, 0.033221f, -0.018193f, 0.040880f, 0.052660f, 0.067769f, 0.086245f, 0.067547f, 0.052914f, 0.003311f, -0.008110f, -0.014102f, -0.002409f, -0.034029f, -0.017023f, -0.014614f, -0.042404f, -0.056379f, -0.064117f, -0.113544f, -0.062538f, -0.039883f, -0.066437f, -0.126429f, -0.086369f, -0.072783f, -0.084966f, -0.102360f, -0.107713f, -0.034187f, -0.038308f, -0.057064f, -0.029434f, -0.033501f, -0.020039f, -0.030810f, -0.029168f, -0.029120f, -0.020561f, -0.027779f, -0.016399f, -0.022176f, -0.015284f, -0.017647f, -0.009113f, -0.020093f, -0.001233f, -0.019845f, -0.026832f, -0.035479f, -0.104280f, 0.166800f, 0.134683f, -0.116888f, 0.025938f, -0.002881f, 0.018643f, -0.004737f, -0.011669f, 0.042788f, - -0.043318f, 0.041777f, -0.017224f, -0.000071f, 0.016504f, 0.013301f, 0.014894f, -0.000371f, -0.024570f, -0.015914f, 0.026779f, -0.022346f, -0.002906f, 0.025622f, -0.014210f, -0.015064f, -0.020644f, -0.037966f, -0.037906f, 0.027386f, -0.013868f, 0.010013f, -0.023859f, 0.004458f, -0.050540f, -0.009422f, 0.013772f, 0.032185f, -0.020712f, 0.006775f, 0.022221f, 0.035264f, -0.008584f, 0.029133f, -0.023983f, 0.093535f, -0.034917f, 0.032027f, 0.004269f, 0.017983f, -0.017638f, 0.024532f, -0.010027f, 0.066525f, -0.010966f, 0.020345f, -0.046752f, 0.060990f, -0.032314f, -0.002893f, -0.009106f, 0.008533f, -0.018340f, 0.036446f, -0.042537f, 0.034212f, -0.038981f, 0.050163f, -0.052919f, 0.063716f, -0.042646f, -0.023495f, -0.026728f, -0.013938f, 0.002579f, -0.042728f, 0.027539f, -0.025558f, 0.024168f, 0.001391f, 0.033400f, 0.011977f, 0.023124f, 0.040007f, 0.017607f, -0.014731f, 0.011031f, 0.009273f, -0.005677f, 0.006614f, -0.012581f, 0.013970f, -0.006994f, -0.000667f, -0.012276f, 0.027823f, -0.028067f, 0.001869f, -0.002357f, 0.022370f, -0.004186f, 0.003939f, -0.005157f, 0.008458f, -0.013104f, 0.009413f, - -0.011143f, -0.006922f, 0.022186f, 0.018770f, -0.005599f, -0.020781f, 0.013169f, 0.016431f, 0.019154f, -0.018200f, 0.015029f, -0.012950f, 0.011433f, 0.001538f, 0.004722f, -0.019590f, 0.020260f, -0.008490f, -0.022543f, 0.017979f, 0.018919f, -0.016829f, -0.002463f, -0.004694f, 0.005778f, -0.016469f, 0.021913f, -0.021025f, 0.008175f, -0.022921f, 0.020191f, -0.017056f, 0.017506f, -0.014104f, 0.021348f, -0.024063f, 0.025571f, -0.023814f, 0.013043f, -0.020188f, 0.019958f, -0.022879f, 0.018409f, -0.015172f, 0.022780f, -0.025337f, 0.025401f, -0.022470f, 0.021280f, -0.017037f, 0.019747f, -0.018370f, 0.016860f, -0.014758f, 0.013711f, -0.015086f, 0.013219f, -0.014002f, 0.014877f, -0.015346f, 0.014650f, -0.012814f, 0.012972f, -0.013237f, 0.012441f, -0.012039f, 0.013933f, -0.011887f, 0.013591f, -0.009951f, 0.011791f, -0.009714f, 0.009920f, -0.010212f, 0.012152f, -0.008994f, 0.009306f, -0.007310f, 0.010527f, -0.007825f, 0.007667f, -0.006966f, 0.005184f, -0.005325f, 0.006645f, -0.004526f, 0.007103f, -0.005455f, 0.007237f, -0.005486f, -0.040811f, -0.084480f, -0.092958f, 0.079274f, 0.020137f, -0.024379f, - -0.126018f, -0.050595f, 0.070425f, 0.014444f, 0.050904f, 0.056727f, -0.020301f, -0.035472f, 0.001817f, 0.013521f, 0.010548f, 0.009487f, -0.022182f, -0.016303f, -0.012262f, 0.000154f, 0.034262f, 0.018533f, -0.001529f, 0.007761f, -0.009714f, -0.016427f, -0.010423f, -0.008566f, 0.000732f, 0.010156f, -0.007648f, 0.013081f, 0.013775f, -0.046265f, -0.020476f, -0.020438f, 0.024845f, 0.017274f, -0.001455f, -0.021510f, -0.029065f, 0.025463f, 0.005708f, 0.017090f, 0.023804f, -0.042918f, -0.028506f, 0.007885f, 0.034700f, 0.017515f, -0.048800f, -0.030094f, -0.039630f, -0.018916f, 0.010315f, 0.009001f, -0.016273f, 0.017994f, -0.007299f, -0.017123f, 0.007745f, 0.016392f, -0.012158f, 0.003905f, -0.000406f, -0.015312f, -0.001334f, -0.005414f, -0.034644f, -0.035057f, -0.002098f, -0.037402f, -0.027982f, 0.001165f, 0.011396f, -0.008174f, 0.041304f, 0.030437f, 0.017405f, 0.001273f, -0.003903f, -0.018391f, 0.022900f, 0.011159f, 0.013380f, 0.012839f, -0.011509f, -0.004905f, -0.000827f, 0.006512f, -0.021572f, -0.026363f, -0.003582f, 0.011533f, 0.001756f, 0.014605f, 0.010263f, -0.013783f, 0.004560f, 0.008004f, - 0.005728f, -0.004482f, 0.014705f, -0.018337f, -0.010851f, 0.033545f, 0.019357f, -0.020768f, -0.015505f, -0.010615f, -0.018415f, 0.020326f, -0.000652f, 0.002836f, 0.009408f, 0.005971f, -0.000184f, -0.000880f, -0.013721f, 0.008659f, 0.005277f, 0.011930f, -0.006755f, -0.002118f, 0.007854f, -0.000870f, -0.009062f, 0.032789f, -0.081751f, -0.222768f, -0.084670f, 0.050717f, 0.107298f, 0.252996f, 0.148722f, 0.040433f, 0.052980f, -0.043855f, -0.081866f, -0.179221f, -0.120802f, -0.092665f, -0.030284f, 0.036714f, 0.098664f, 0.076623f, 0.095787f, 0.092477f, 0.062758f, -0.021179f, -0.072966f, -0.063257f, -0.064908f, -0.052257f, -0.075247f, 0.023089f, -0.047550f, 0.003457f, 0.035074f, 0.064672f, 0.036591f, 0.060531f, 0.079959f, 0.001452f, 0.023896f, 0.001724f, -0.001173f, -0.044699f, -0.005850f, -0.039782f, -0.077486f, -0.122484f, -0.068120f, -0.037408f, 0.009947f, 0.009258f, 0.072865f, 0.100967f, 0.097226f, 0.115557f, 0.016918f, 0.075812f, 0.030165f, -0.006912f, -0.071050f, -0.069785f, -0.094522f, -0.124301f, -0.084591f, -0.096341f, -0.060849f, 0.000280f, 0.029949f, 0.069081f, 0.111856f, 0.164492f, - 0.132002f, 0.119388f, 0.064826f, -0.024756f, -0.024240f, -0.064714f, -0.137317f, -0.105708f, -0.173554f, -0.114318f, -0.050456f, -0.038629f, 0.054426f, 0.104149f, 0.143039f, 0.100734f, 0.077383f, 0.046827f, 0.053689f, 0.046921f, -0.007361f, -0.054238f, -0.051443f, -0.081536f, -0.089923f, -0.071835f, -0.048881f, -0.045745f, -0.043178f, 0.019726f, 0.042418f, 0.074604f, 0.088891f, 0.072620f, 0.064132f, 0.036343f, 0.001471f, 0.001700f, 0.008460f, -0.054055f, -0.091234f, -0.037622f, -0.079649f, -0.090689f, -0.002842f, 0.022465f, 0.050673f, 0.052013f, 0.033579f, 0.054978f, 0.032281f, 0.043945f, -0.009075f, -0.001120f, -0.038472f, -0.023479f, -0.020320f, -0.025814f, -0.029082f, -0.023869f, 0.004169f, -0.010068f, 0.000325f, 0.026652f, 0.037563f, 0.023258f, 0.020735f, -0.005405f, -0.006240f, -0.000582f, -0.000256f, -0.011617f, -0.013133f, -0.002482f, -0.007638f, -0.008383f, -0.004536f, -0.000086f, -0.007981f, -0.003017f, 0.016801f, 0.005588f, 0.007925f, 0.010559f, 0.009041f, 0.003242f, 0.003092f, -0.002002f, -0.007113f, -0.010405f, -0.007478f, -0.012192f, -0.010005f, -0.002718f, 0.001906f, 0.004212f, - 0.008297f, 0.006581f, 0.006082f, 0.007901f, 0.005493f, -0.003401f, 0.001453f, 0.003179f, -0.002350f, -0.006498f, -0.006831f, -0.005556f, -0.000433f, -0.002484f, -0.003969f, -0.002462f, 0.002267f, -0.000263f, 0.002320f, 0.005971f, 0.005886f, 0.004900f, 0.002730f, 0.000436f, 0.000091f, -0.001849f, -0.001761f, -0.002943f, -0.002718f, -0.002109f, -0.001807f, -0.002960f, -0.001565f, -0.001533f, -0.001125f, 0.000863f, 0.003585f, 0.002029f, 0.003018f, 0.003437f, 0.002857f, 0.001727f, 0.000442f, -0.001098f, -0.001903f, -0.003016f, -0.002232f, -0.002526f, -0.002318f, -0.000826f, -0.000054f, -0.000940f, 0.000464f, 0.002131f, 0.002598f, 0.001692f, 0.001057f, 0.001152f, 0.001287f, -0.000295f, -0.001117f, -0.001242f, -0.001051f, -0.000964f, -0.000477f, -0.000384f, -0.000051f, 0.000083f, 0.000203f, 0.000063f, 0.000115f, 0.000097f, 0.000105f, 0.000030f, 0.000040f}, - {0.015075f, 0.009664f, 0.000295f, 0.000542f, 0.011877f, 0.002989f, -0.005872f, 0.004068f, 0.007910f, -0.003953f, -0.006517f, -0.023463f, 0.001275f, -0.007861f, 0.015716f, -0.007741f, 0.007889f, 0.006393f, -0.000801f, 0.005179f, 0.008701f, 0.002424f, 0.002045f, -0.004230f, -0.005149f, -0.003944f, -0.006493f, 0.005727f, 0.003392f, -0.003012f, 0.005120f, -0.003473f, -0.005191f, -0.006148f, -0.002989f, -0.004843f, 0.000426f, 0.000143f, -0.000907f, 0.010820f, -0.006215f, 0.008864f, -0.003173f, -0.002169f, 0.005910f, -0.003589f, 0.001850f, -0.003588f, 0.006478f, -0.001840f, -0.018369f, 0.005535f, 0.000646f, 0.002327f, 0.009244f, 0.004849f, 0.000669f, -0.002023f, -0.006074f, 0.015803f, -0.008317f, 0.006192f, 0.003203f, -0.006431f, 0.006623f, 0.003024f, -0.007687f, 0.006173f, -0.007929f, 0.000531f, -0.000820f, 0.007015f, 0.001142f, 0.007330f, -0.002796f, -0.016152f, -0.003473f, -0.003838f, -0.007712f, -0.006829f, -0.006844f, 0.005683f, 0.002467f, 0.002044f, 0.003403f, 0.003480f, 0.000677f, 0.001694f, -0.001902f, 0.001220f, -0.001404f, -0.000560f, -0.003963f, 0.000032f, -0.001317f, 0.003088f, - -0.000294f, -0.000864f, -0.000607f, 0.000406f, -0.002055f, 0.000793f, -0.000893f, 0.001202f, -0.000657f, 0.000297f, -0.002369f, -0.000202f, -0.002960f, -0.001726f, -0.001690f, 0.002500f, 0.028482f, -0.014248f, 0.001457f, -0.000985f, -0.000964f, 0.006378f, -0.005276f, -0.020674f, -0.019063f, 0.008779f, -0.006120f, -0.001889f, 0.004704f, 0.000914f, 0.004641f, 0.005190f, -0.009152f, 0.004733f, 0.003228f, -0.006530f, 0.007344f, 0.011126f, -0.007494f, -0.002563f, 0.000420f, -0.012306f, -0.005639f, 0.001076f, 0.014385f, -0.002495f, -0.000964f, -0.012263f, 0.007017f, -0.000149f, -0.011011f, -0.004799f, 0.003625f, -0.001807f, 0.001957f, -0.009554f, -0.000381f, 0.000479f, -0.003985f, 0.009874f, 0.002383f, 0.002089f, 0.009536f, -0.001174f, 0.012431f, -0.004398f, -0.016166f, 0.006299f, 0.006104f, -0.005803f, -0.002619f, -0.002132f, 0.001825f, 0.000546f, 0.004299f, -0.003838f, 0.002790f, -0.008902f, -0.000554f, 0.005565f, -0.008513f, -0.001152f, 0.004751f, 0.001390f, -0.004529f, 0.002704f, -0.003469f, 0.000735f, 0.008034f, 0.002780f, -0.011425f, 0.013517f, 0.004977f, 0.004874f, -0.001327f, 0.007714f, - 0.008589f, -0.003953f, -0.000697f, 0.001784f, 0.002095f, 0.002594f, 0.003538f, -0.000521f, 0.000153f, 0.002607f, -0.000544f, 0.000254f, 0.001575f, 0.004125f, -0.000833f, 0.004204f, -0.000312f, 0.000910f, 0.002075f, 0.000446f, -0.001406f, -0.000492f, 0.001373f, 0.001342f, -0.000400f, -0.002073f, -0.006908f, -0.016686f, -0.001991f, 0.001798f, 0.018424f, -0.007017f, 0.015791f, 0.003960f, -0.000535f, 0.000980f, 0.014128f, -0.003283f, -0.003861f, -0.004087f, 0.009959f, 0.020222f, 0.005300f, -0.013942f, -0.018917f, -0.026917f, 0.003532f, -0.007031f, -0.011313f, -0.006211f, -0.017543f, -0.000083f, -0.008139f, 0.001324f, 0.008431f, 0.008876f, -0.010000f, -0.008960f, -0.006359f, 0.001126f, -0.014883f, -0.001624f, 0.004636f, -0.006742f, -0.002448f, 0.001565f, 0.006011f, -0.008365f, 0.002192f, 0.019681f, -0.000807f, -0.000955f, -0.007245f, 0.008197f, -0.003642f, 0.000725f, 0.006265f, 0.008151f, 0.012117f, -0.001933f, 0.001797f, -0.003647f, -0.000153f, -0.002069f, 0.001612f, 0.018909f, -0.020998f, 0.000470f, 0.004095f, 0.011173f, -0.004636f, -0.005560f, -0.001224f, -0.005249f, 0.015119f, -0.008323f, - -0.019792f, -0.001371f, -0.005898f, -0.008291f, 0.004928f, -0.019602f, 0.007255f, -0.002097f, -0.005432f, 0.000396f, 0.013855f, -0.004102f, -0.005196f, -0.005340f, 0.006647f, -0.006224f, -0.001679f, 0.001169f, -0.000558f, 0.002389f, 0.000230f, 0.000934f, 0.004119f, 0.000335f, 0.001084f, -0.001027f, 0.003313f, 0.000728f, -0.000649f, -0.003726f, -0.001994f, -0.000280f, -0.001949f, 0.003832f, 0.002342f, -0.002184f, 0.002867f, 0.000290f, 0.000431f, -0.002030f, 0.001074f, -0.000891f, 0.000097f, 0.000990f, -0.030754f, 0.011484f, -0.009623f, 0.012889f, -0.011590f, -0.001050f, 0.008916f, -0.017784f, -0.003063f, 0.005425f, -0.004851f, 0.025917f, -0.010884f, -0.003280f, -0.010384f, -0.008669f, 0.013302f, 0.014812f, 0.005718f, -0.017439f, -0.021069f, 0.019476f, 0.003251f, -0.019727f, 0.007356f, 0.000731f, 0.009321f, -0.005847f, 0.008892f, -0.011801f, 0.005738f, 0.019065f, 0.007857f, 0.008170f, 0.004309f, 0.000340f, -0.004872f, 0.003988f, 0.001467f, -0.012999f, 0.000198f, -0.004118f, -0.009575f, -0.009529f, -0.003642f, 0.007538f, -0.013734f, 0.001878f, -0.009942f, -0.001012f, -0.001538f, 0.004532f, - 0.008112f, 0.017227f, 0.006059f, -0.000094f, 0.007379f, -0.009199f, -0.013567f, -0.000236f, 0.003133f, 0.001414f, 0.016342f, -0.003717f, -0.002023f, -0.005226f, -0.002337f, 0.002334f, 0.007925f, -0.002149f, 0.003300f, -0.008111f, 0.013220f, -0.003467f, -0.004650f, -0.003048f, 0.004268f, -0.007179f, 0.000202f, 0.008200f, -0.000607f, -0.002340f, 0.001187f, 0.006518f, 0.005102f, -0.001002f, 0.004108f, -0.003508f, 0.002591f, -0.002116f, 0.000992f, 0.004673f, -0.001668f, 0.002007f, 0.001956f, -0.003162f, 0.003164f, 0.001973f, 0.000684f, -0.001345f, -0.002919f, -0.000672f, 0.003541f, 0.002396f, -0.001276f, 0.001458f, -0.000724f, 0.005879f, -0.000562f, -0.001609f, -0.015372f, -0.003587f, -0.009978f, -0.001019f, 0.020415f, 0.013049f, 0.009117f, -0.001552f, -0.017969f, 0.002507f, -0.011824f, -0.019046f, -0.006323f, 0.013707f, -0.010758f, -0.016888f, 0.004411f, 0.001449f, -0.008414f, 0.001804f, 0.009610f, 0.002647f, -0.022511f, -0.006380f, 0.014145f, 0.016663f, 0.008309f, -0.018656f, -0.006769f, 0.008501f, -0.003180f, -0.004017f, 0.001209f, 0.006245f, 0.001004f, 0.002308f, 0.019143f, 0.000036f, - 0.011579f, 0.008975f, -0.000148f, -0.008621f, -0.000212f, -0.005087f, 0.011413f, -0.006528f, -0.010890f, 0.000025f, 0.017908f, 0.001004f, 0.017790f, 0.009588f, 0.001725f, 0.011494f, -0.001939f, 0.024699f, 0.001993f, 0.012219f, 0.013921f, 0.001288f, -0.011511f, -0.001767f, -0.013772f, 0.007029f, -0.009869f, -0.005536f, -0.009100f, -0.006002f, -0.004367f, 0.004520f, 0.001529f, 0.006805f, -0.000282f, -0.007869f, -0.006849f, 0.002558f, 0.012724f, -0.003771f, 0.003148f, -0.013657f, 0.004328f, 0.011799f, 0.018118f, -0.006242f, -0.001348f, 0.002999f, -0.006229f, -0.000473f, 0.005982f, -0.001834f, 0.010989f, 0.000723f, 0.002502f, 0.000274f, 0.000524f, 0.004052f, -0.002676f, -0.001741f, -0.001426f, -0.000827f, 0.001112f, 0.001360f, -0.002067f, 0.001797f, -0.000628f, -0.002193f, -0.002668f, 0.000905f, -0.002532f, -0.001670f, -0.003176f, 0.001548f, 0.002205f, -0.000460f, 0.006200f, -0.004018f, 0.001096f, -0.000437f, -0.003509f, 0.005899f, -0.001698f, -0.000836f, -0.003080f, 0.003349f, 0.002209f, -0.000539f, 0.000899f, 0.002955f, 0.018641f, -0.027836f, -0.005123f, 0.023328f, -0.011570f, 0.004271f, - -0.017990f, 0.007934f, 0.032815f, -0.004432f, 0.001740f, -0.001382f, -0.023174f, 0.001877f, -0.001471f, 0.034819f, -0.010981f, -0.001699f, 0.015224f, -0.009591f, 0.021583f, -0.014545f, -0.002168f, -0.021993f, 0.024875f, 0.000345f, -0.009781f, 0.000318f, 0.009117f, -0.011562f, 0.017296f, -0.001838f, 0.015330f, -0.000109f, 0.008034f, -0.024041f, -0.015466f, -0.011217f, -0.003597f, 0.014493f, -0.021780f, 0.011647f, 0.009007f, 0.003039f, -0.009013f, -0.013138f, 0.029966f, 0.005951f, -0.003389f, 0.011621f, -0.010577f, 0.006299f, -0.014084f, -0.013842f, -0.005760f, -0.009295f, 0.032363f, 0.009661f, -0.006420f, -0.009618f, -0.012334f, 0.010169f, 0.008411f, 0.003057f, -0.011375f, -0.001394f, -0.004603f, 0.013821f, 0.001259f, 0.011179f, -0.026117f, 0.014207f, -0.002281f, 0.000698f, -0.002897f, 0.004592f, -0.011522f, -0.005367f, -0.018108f, -0.005936f, 0.006603f, 0.011050f, 0.011697f, 0.004317f, 0.004271f, 0.002724f, -0.006471f, 0.003860f, 0.002674f, -0.000487f, -0.004334f, -0.007241f, 0.003880f, 0.003604f, -0.005512f, 0.002845f, 0.000411f, -0.004572f, 0.003016f, 0.000822f, -0.001930f, -0.001092f, - 0.000314f, 0.000875f, -0.003335f, 0.002324f, 0.001322f, -0.005268f, -0.001195f, -0.002713f, 0.000465f, 0.003684f, 0.002579f, -0.000575f, 0.000199f, -0.002460f, 0.005912f, 0.000481f, -0.002016f, 0.011983f, 0.005997f, 0.009910f, 0.003065f, 0.000300f, -0.003511f, -0.014730f, -0.004456f, -0.009437f, 0.006051f, -0.000380f, 0.022603f, -0.018668f, -0.024100f, -0.005970f, 0.007722f, -0.007413f, -0.005716f, 0.019242f, 0.003983f, -0.010396f, -0.012004f, -0.012452f, 0.021018f, -0.010382f, 0.014251f, -0.006670f, 0.015577f, -0.015268f, 0.003527f, 0.023830f, 0.008248f, -0.032168f, 0.007567f, 0.000848f, -0.004008f, -0.002757f, 0.003442f, -0.003742f, 0.003261f, -0.005156f, 0.002710f, -0.001199f, -0.014311f, 0.014568f, 0.014950f, -0.004310f, 0.016547f, -0.013905f, -0.002310f, -0.003927f, -0.006557f, 0.018193f, -0.012897f, -0.022952f, -0.012808f, 0.004449f, -0.018693f, -0.017414f, -0.008645f, -0.005807f, -0.011932f, -0.000893f, 0.015546f, 0.016365f, 0.002605f, 0.017634f, 0.005596f, 0.002465f, 0.013397f, -0.014092f, -0.002379f, 0.000119f, -0.011554f, -0.000001f, -0.011189f, 0.013797f, -0.003813f, -0.002382f, - 0.011498f, -0.001971f, -0.003462f, -0.002237f, 0.013705f, -0.001545f, 0.004864f, -0.013109f, -0.004569f, 0.007514f, -0.008458f, 0.000747f, 0.000362f, 0.001587f, -0.006416f, -0.004401f, -0.003318f, 0.000333f, -0.003459f, -0.004143f, 0.001488f, -0.000532f, -0.003711f, -0.001562f, 0.000626f, -0.000286f, -0.001069f, -0.001181f, -0.002082f, 0.000825f, -0.006976f, -0.004821f, -0.004657f, -0.004615f, 0.000188f, -0.000145f, -0.001558f, 0.001852f, -0.003514f, 0.035885f, -0.017893f, -0.017231f, 0.011480f, 0.029140f, 0.005578f, 0.026231f, 0.014931f, 0.023810f, 0.010496f, -0.004600f, -0.010973f, 0.008446f, -0.017993f, -0.013735f, 0.019870f, 0.016577f, 0.041635f, -0.001206f, 0.005709f, -0.015591f, 0.016024f, 0.007170f, -0.018696f, -0.004545f, 0.023545f, -0.000213f, -0.026133f, -0.010657f, -0.014786f, -0.005127f, 0.014441f, 0.013204f, -0.009961f, -0.004930f, 0.018039f, -0.017699f, 0.007985f, 0.015127f, 0.018171f, -0.009882f, 0.015633f, -0.006778f, -0.023793f, 0.008239f, 0.021706f, -0.005963f, 0.006221f, 0.005181f, -0.007445f, 0.002525f, 0.006464f, -0.006904f, 0.002371f, 0.017500f, -0.010439f, -0.005621f, - 0.016222f, -0.003626f, -0.003339f, -0.027122f, -0.009600f, -0.016429f, -0.026827f, -0.018169f, 0.013402f, -0.008910f, -0.011489f, 0.023074f, 0.023165f, -0.005987f, 0.024920f, 0.009880f, 0.016363f, -0.004727f, -0.012933f, 0.010666f, -0.013409f, -0.026853f, -0.016127f, -0.006990f, 0.013169f, 0.005968f, 0.022092f, 0.003791f, -0.004783f, -0.003695f, -0.000024f, 0.003726f, -0.006886f, 0.000335f, -0.004003f, -0.000688f, 0.003876f, -0.000779f, 0.000620f, 0.007048f, -0.002598f, -0.001400f, 0.007113f, -0.005331f, -0.002671f, -0.003565f, 0.002110f, -0.003963f, 0.002605f, 0.001492f, 0.001123f, 0.003647f, 0.004799f, 0.002080f, 0.008651f, 0.000966f, 0.005922f, 0.001922f, 0.004459f, 0.005011f, -0.004447f, 0.003974f, 0.004385f, -0.003222f, -0.000943f, -0.000522f, -0.006218f, 0.001734f, -0.003211f, -0.018189f, -0.019459f, 0.026324f, -0.004405f, 0.060154f, -0.024797f, -0.011660f, -0.001402f, 0.014674f, -0.008410f, -0.008200f, -0.024808f, -0.028682f, 0.012931f, 0.002489f, 0.039569f, 0.012828f, -0.004065f, -0.004517f, 0.026276f, 0.026853f, -0.022209f, 0.016121f, -0.021217f, 0.005580f, -0.009153f, -0.010916f, - -0.006531f, 0.004520f, -0.003475f, 0.013957f, 0.006962f, 0.015617f, -0.001973f, -0.007434f, -0.014681f, -0.002823f, 0.017026f, 0.001543f, -0.022690f, -0.002834f, 0.005484f, -0.009659f, 0.017921f, 0.015188f, 0.003125f, 0.005300f, -0.049513f, -0.018930f, 0.017262f, -0.001132f, 0.027743f, 0.007781f, 0.031275f, -0.003486f, -0.016967f, 0.016750f, -0.009501f, 0.011438f, 0.002003f, 0.045646f, 0.037689f, 0.004491f, 0.010646f, -0.006176f, 0.014973f, 0.015953f, 0.017178f, 0.018642f, 0.030224f, -0.000509f, 0.005407f, -0.011549f, -0.010127f, 0.009525f, -0.014168f, -0.035031f, -0.026037f, -0.000557f, 0.021771f, -0.010944f, -0.019862f, -0.011343f, -0.010720f, -0.001131f, -0.023709f, -0.000894f, 0.004382f, -0.000100f, -0.003209f, -0.002269f, 0.002441f, 0.005180f, -0.000661f, 0.003922f, -0.017708f, -0.010784f, -0.005665f, -0.012478f, 0.001096f, -0.004463f, -0.007324f, -0.004847f, -0.002995f, 0.007235f, 0.002915f, -0.006650f, 0.002187f, 0.015920f, 0.008142f, -0.003273f, -0.005662f, -0.007139f, -0.004210f, -0.005738f, -0.012405f, 0.004633f, -0.004793f, -0.000915f, 0.008987f, 0.003026f, -0.001792f, 0.001819f, - 0.003446f, -0.052182f, 0.041260f, -0.001138f, 0.004734f, -0.014421f, 0.023152f, -0.049541f, -0.031742f, -0.009976f, -0.012690f, -0.001155f, -0.044416f, 0.008749f, 0.000956f, -0.001149f, -0.020261f, -0.020619f, 0.008452f, 0.028378f, 0.004432f, -0.037766f, -0.008153f, -0.030915f, 0.024500f, 0.015831f, 0.001271f, -0.013663f, -0.006443f, -0.006953f, 0.020196f, -0.002828f, -0.000367f, -0.004319f, -0.027354f, 0.014283f, 0.019244f, -0.011438f, -0.006094f, 0.014985f, -0.029780f, -0.021684f, -0.032860f, -0.011101f, 0.008313f, -0.020937f, -0.009985f, -0.000846f, -0.034033f, 0.010459f, 0.021051f, 0.037251f, 0.005390f, -0.003647f, 0.002317f, -0.024422f, -0.019159f, 0.028529f, -0.002003f, -0.010783f, -0.006703f, -0.043562f, -0.023373f, 0.008579f, -0.009190f, -0.005042f, -0.003379f, 0.028576f, -0.004929f, -0.027073f, 0.002193f, 0.021169f, -0.000529f, -0.013260f, -0.000249f, 0.001499f, -0.011194f, -0.018977f, 0.014949f, -0.034925f, -0.017297f, -0.000225f, 0.016905f, -0.021336f, 0.013520f, 0.008987f, 0.012317f, 0.013152f, -0.013426f, -0.003366f, 0.016098f, 0.003107f, -0.009849f, 0.009262f, 0.013318f, -0.012436f, - 0.004620f, 0.011971f, 0.011275f, 0.017749f, 0.001180f, -0.005407f, -0.003049f, 0.002919f, 0.000220f, 0.007803f, 0.006545f, 0.000607f, -0.001641f, -0.005663f, -0.001958f, 0.003900f, 0.007885f, -0.013115f, 0.001660f, -0.002500f, 0.005394f, 0.012635f, 0.000591f, 0.008842f, -0.004764f, 0.005864f, 0.007197f, 0.010641f, 0.008271f, 0.010379f, -0.000817f, 0.005944f, -0.001967f, 0.004524f, 0.027104f, 0.024839f, 0.008674f, 0.042469f, -0.019771f, -0.009527f, 0.006441f, -0.011823f, -0.003846f, 0.013494f, 0.045569f, -0.007995f, 0.008845f, -0.000848f, -0.003349f, -0.001324f, 0.050321f, -0.025196f, 0.025872f, -0.000838f, -0.033834f, 0.010480f, -0.033563f, -0.020778f, 0.018617f, -0.017992f, 0.013034f, 0.000155f, 0.001350f, 0.022203f, 0.017772f, -0.027965f, -0.031515f, -0.023908f, -0.008283f, 0.008298f, 0.008504f, 0.002767f, 0.005692f, -0.037886f, 0.005262f, -0.020615f, -0.047429f, 0.031405f, -0.009694f, 0.029494f, 0.031715f, 0.001263f, 0.011574f, -0.017770f, -0.021358f, -0.037599f, 0.008062f, 0.033314f, 0.005548f, -0.015496f, 0.001572f, -0.008104f, 0.004765f, -0.020538f, -0.016739f, -0.020511f, - 0.003005f, -0.003028f, -0.006926f, 0.021240f, 0.019226f, 0.011216f, 0.031407f, 0.002967f, -0.033913f, 0.042655f, -0.032033f, -0.010351f, -0.008349f, -0.008985f, 0.035839f, -0.006416f, -0.052349f, 0.043555f, -0.017674f, -0.011194f, 0.011693f, 0.010584f, 0.033631f, 0.021115f, 0.013840f, 0.016012f, 0.014635f, 0.010748f, 0.000243f, 0.013665f, 0.016787f, 0.003933f, -0.000175f, 0.017785f, -0.003678f, 0.001503f, -0.017332f, -0.004707f, -0.005799f, -0.009439f, 0.001007f, -0.002011f, 0.010700f, 0.007439f, 0.002895f, -0.002032f, 0.004943f, 0.001656f, 0.003491f, 0.006841f, -0.002726f, -0.003527f, 0.001157f, -0.003487f, 0.005163f, 0.001946f, 0.002187f, 0.003765f, 0.002130f, 0.016344f, 0.012010f, 0.002881f, 0.003027f, 0.039015f, 0.044144f, 0.010001f, -0.084200f, 0.002629f, 0.023282f, -0.028050f, 0.016455f, 0.033148f, 0.001257f, 0.008740f, 0.020775f, 0.015913f, 0.005927f, 0.029771f, 0.006452f, -0.004525f, 0.056215f, 0.020721f, 0.007028f, 0.024135f, -0.019069f, 0.029688f, -0.021393f, -0.002154f, -0.002731f, -0.007252f, -0.031390f, 0.010095f, -0.022310f, 0.040018f, -0.003940f, -0.008231f, - 0.058928f, 0.007618f, 0.008328f, 0.019429f, 0.001898f, 0.011077f, -0.013634f, -0.026122f, -0.003274f, 0.017147f, -0.030924f, 0.035218f, 0.031715f, 0.023373f, 0.005868f, 0.013807f, -0.021473f, -0.022236f, -0.035172f, -0.015661f, -0.019134f, -0.018182f, 0.007956f, -0.003646f, -0.034453f, -0.015393f, 0.029672f, -0.000767f, -0.028484f, 0.015707f, -0.001898f, -0.019421f, -0.046042f, 0.002944f, -0.069608f, 0.040030f, -0.023927f, 0.036393f, 0.001427f, 0.009988f, 0.000847f, -0.013833f, 0.018071f, 0.061720f, 0.005330f, 0.017441f, -0.011193f, -0.048485f, 0.003915f, -0.005415f, 0.034958f, 0.020361f, -0.008685f, -0.001901f, -0.007686f, -0.004006f, 0.011636f, -0.014001f, 0.010899f, -0.001806f, -0.012524f, -0.012404f, 0.012660f, -0.015148f, -0.015137f, -0.020929f, -0.004585f, -0.015089f, 0.004302f, 0.012910f, 0.000494f, -0.003926f, -0.010082f, 0.018932f, -0.018288f, 0.004569f, 0.001922f, 0.001478f, -0.010900f, 0.007470f, 0.018374f, -0.000948f, -0.009729f, -0.002392f, 0.016728f, 0.017672f, -0.014644f, 0.016921f, -0.001628f, -0.004540f, 0.002318f, -0.001182f, 0.018453f, 0.004809f, -0.010437f, -0.008889f, - -0.000491f, 0.002024f, 0.010654f, 0.023522f, 0.017603f, 0.046079f, -0.062378f, 0.025173f, -0.036371f, 0.031757f, -0.015213f, -0.025967f, -0.007179f, -0.029968f, -0.012394f, -0.006378f, 0.011346f, 0.014392f, -0.008495f, 0.044278f, -0.001701f, -0.007157f, -0.005534f, -0.039347f, -0.004049f, 0.000564f, -0.033100f, 0.011126f, -0.028183f, -0.035554f, -0.011307f, 0.022052f, -0.059220f, -0.040018f, -0.026701f, 0.003467f, -0.041441f, -0.035055f, -0.028427f, -0.014028f, -0.011361f, -0.005078f, -0.027933f, 0.030562f, 0.005440f, -0.002534f, -0.020793f, -0.021250f, 0.041037f, -0.035084f, -0.024026f, 0.011119f, 0.011108f, 0.015060f, -0.020386f, -0.028266f, -0.011887f, -0.004918f, 0.013564f, -0.020185f, -0.008058f, -0.008021f, -0.024389f, -0.041520f, -0.052803f, 0.050551f, -0.054728f, -0.002643f, 0.004082f, -0.009173f, -0.009970f, -0.048698f, 0.019201f, -0.011365f, -0.051340f, -0.000765f, -0.011143f, 0.048901f, 0.012172f, 0.034922f, 0.032996f, -0.009367f, 0.013012f, -0.004982f, -0.009224f, 0.024694f, -0.005990f, 0.014369f, -0.018471f, 0.001873f, -0.018611f, 0.016421f, 0.012637f, 0.002706f, 0.011570f, -0.004471f, - -0.001669f, 0.012565f, 0.005909f, -0.011437f, 0.008880f, 0.020222f, -0.002963f, 0.004999f, -0.010689f, -0.024907f, -0.002594f, -0.001796f, -0.000783f, -0.017157f, -0.003765f, 0.003250f, -0.002501f, -0.008942f, 0.012051f, -0.001767f, -0.006757f, -0.020071f, -0.020730f, 0.000743f, 0.011408f, 0.007152f, 0.004413f, -0.000951f, 0.014946f, 0.017407f, -0.007624f, 0.004101f, 0.004095f, -0.000687f, 0.005036f, 0.012771f, -0.055667f, 0.064851f, 0.010432f, 0.006740f, -0.011019f, 0.033048f, 0.000585f, 0.054275f, -0.014563f, 0.037314f, 0.020150f, -0.053050f, 0.023261f, 0.008994f, 0.025455f, -0.004102f, -0.014052f, -0.020967f, -0.007677f, 0.026296f, 0.057418f, 0.006330f, -0.008249f, -0.035971f, 0.013801f, -0.038922f, -0.006092f, 0.039854f, -0.035643f, 0.000352f, 0.002612f, -0.005870f, -0.013401f, -0.014898f, 0.063578f, -0.013400f, -0.015516f, -0.007374f, 0.014473f, 0.021629f, 0.008049f, 0.001391f, -0.012880f, 0.000159f, 0.009555f, 0.038929f, -0.008811f, 0.055549f, 0.032295f, 0.016816f, -0.013237f, 0.048484f, 0.054690f, -0.004110f, -0.014463f, -0.002463f, -0.017757f, 0.005853f, -0.017589f, 0.027997f, - 0.009401f, 0.040160f, 0.030699f, -0.048209f, -0.054820f, 0.066198f, 0.048848f, 0.008223f, -0.009310f, -0.025606f, -0.036121f, -0.013633f, 0.037004f, -0.034343f, -0.037713f, -0.004804f, -0.010192f, -0.059782f, -0.013452f, 0.013918f, -0.023380f, 0.003773f, -0.000171f, 0.003751f, 0.004885f, 0.010595f, -0.017797f, -0.010380f, -0.018292f, -0.006027f, -0.000097f, 0.003309f, -0.009990f, -0.004130f, -0.001780f, -0.029131f, -0.009924f, -0.013533f, -0.006569f, -0.000144f, 0.002617f, 0.001895f, 0.004969f, -0.001243f, 0.001088f, -0.014974f, 0.008996f, -0.012784f, -0.015583f, 0.011794f, 0.004748f, -0.027186f, -0.003044f, -0.007995f, 0.013767f, 0.027353f, 0.000567f, -0.021914f, 0.018198f, -0.004397f, 0.004755f, 0.007168f, -0.007369f, -0.004498f, 0.001661f, -0.011294f, -0.015995f, 0.029106f, -0.022956f, -0.007106f, -0.004442f, 0.006147f, 0.001395f, -0.034751f, -0.101622f, 0.051660f, -0.048608f, 0.020511f, 0.073376f, 0.011627f, -0.030035f, 0.021531f, 0.025906f, -0.010104f, -0.022594f, -0.004298f, -0.049796f, 0.017111f, -0.051774f, -0.031255f, 0.021508f, 0.002667f, 0.009569f, -0.046746f, -0.009101f, -0.033604f, - -0.028440f, -0.041581f, -0.014169f, 0.014917f, -0.024543f, -0.024938f, 0.025249f, 0.003919f, -0.001552f, 0.008366f, -0.047882f, -0.002478f, -0.037121f, 0.032736f, 0.009419f, -0.091642f, 0.023736f, 0.049882f, -0.010024f, 0.029958f, 0.025321f, 0.017230f, 0.013947f, 0.047661f, 0.037510f, 0.001859f, -0.033216f, -0.006642f, 0.037910f, 0.024748f, -0.030744f, 0.002746f, -0.036001f, -0.011283f, 0.003008f, 0.027000f, 0.036035f, -0.064685f, -0.050996f, -0.028358f, 0.006035f, -0.018886f, -0.006617f, 0.061127f, 0.010528f, 0.014846f, 0.047779f, -0.018677f, 0.010302f, -0.011561f, 0.048881f, -0.024112f, 0.002539f, 0.005305f, 0.036364f, -0.009486f, -0.003229f, 0.013589f, 0.015267f, -0.001379f, 0.007752f, 0.023867f, 0.001516f, -0.000248f, -0.000371f, 0.023252f, -0.010946f, -0.006889f, 0.006072f, 0.010336f, 0.007285f, 0.003487f, 0.011337f, -0.004510f, 0.000648f, -0.009940f, 0.000312f, -0.007274f, -0.000541f, -0.010198f, 0.018071f, -0.012692f, -0.018735f, 0.018733f, 0.012602f, 0.013044f, -0.013034f, -0.017103f, 0.000619f, -0.031052f, -0.008013f, -0.015781f, -0.015878f, 0.006873f, 0.000457f, -0.016361f, - 0.006297f, 0.007301f, -0.001213f, -0.009501f, -0.008957f, 0.007765f, 0.005210f, 0.015468f, 0.033833f, 0.032702f, -0.057029f, 0.011932f, -0.012287f, -0.014998f, -0.013257f, 0.038259f, 0.020314f, -0.027902f, -0.015928f, 0.029199f, -0.052461f, 0.002983f, 0.019077f, 0.029257f, -0.006238f, 0.006484f, -0.061224f, -0.000218f, -0.027129f, 0.020490f, 0.007515f, 0.033991f, -0.053850f, -0.027140f, -0.007847f, 0.006662f, -0.004651f, 0.010538f, 0.003832f, 0.029392f, 0.055329f, -0.035016f, -0.045292f, 0.011957f, -0.047200f, -0.013877f, 0.019731f, -0.034260f, -0.033344f, 0.002818f, 0.020499f, 0.028850f, 0.020415f, -0.012832f, -0.002928f, -0.060025f, -0.040533f, 0.053373f, -0.037045f, 0.072032f, -0.030560f, 0.014703f, 0.010505f, -0.000519f, -0.052943f, 0.066334f, -0.030911f, -0.006232f, -0.011958f, 0.025930f, 0.049886f, -0.050452f, -0.028760f, 0.059327f, -0.043914f, -0.000044f, -0.016602f, 0.012154f, 0.068571f, 0.000426f, -0.005089f, -0.042415f, 0.052442f, -0.017065f, 0.013607f, 0.017393f, -0.033234f, -0.039987f, 0.003873f, 0.023127f, -0.012024f, 0.011873f, -0.095007f, -0.044250f, -0.013637f, -0.048388f, - -0.023919f, 0.008133f, 0.031428f, -0.006590f, -0.008686f, -0.024720f, 0.000610f, -0.002320f, -0.018145f, -0.006202f, 0.011067f, 0.000972f, 0.014846f, 0.007028f, 0.014067f, -0.018630f, -0.002708f, -0.003874f, 0.019586f, 0.015581f, -0.011823f, 0.036066f, 0.013237f, -0.014470f, 0.021801f, 0.006026f, -0.002208f, -0.011378f, 0.008221f, -0.008223f, -0.007796f, 0.016134f, 0.001321f, -0.007054f, -0.006392f, 0.013527f, -0.003794f, 0.012232f, -0.002833f, 0.022226f, 0.004568f, 0.003256f, -0.009009f, -0.006552f, -0.008061f, -0.002936f, 0.002671f, 0.032508f, -0.037632f, 0.010162f, 0.030706f, 0.030354f, 0.069207f, -0.044424f, 0.063552f, -0.011508f, -0.042056f, -0.041164f, 0.010244f, 0.026394f, -0.018742f, -0.008797f, -0.029033f, -0.012105f, 0.053807f, -0.038411f, -0.003802f, 0.043212f, -0.014313f, 0.025687f, -0.017616f, -0.008539f, 0.045841f, -0.001889f, 0.002093f, 0.044224f, 0.030573f, 0.010631f, -0.005738f, 0.037310f, 0.051023f, -0.052523f, 0.047935f, -0.046427f, 0.024165f, -0.033590f, 0.006709f, 0.039467f, 0.013329f, -0.090504f, 0.039799f, 0.025348f, -0.000557f, 0.045474f, -0.071889f, -0.014110f, - 0.048454f, 0.041186f, 0.006677f, 0.064883f, -0.034919f, 0.000479f, -0.008589f, -0.010348f, 0.027696f, 0.011271f, 0.048568f, 0.040402f, -0.030768f, 0.026710f, -0.056903f, -0.017837f, 0.004279f, -0.003173f, -0.004652f, -0.009503f, -0.088918f, -0.049220f, -0.068734f, -0.046793f, 0.050668f, -0.031967f, -0.007930f, 0.005517f, 0.083119f, -0.020250f, -0.029620f, 0.066618f, 0.040727f, -0.002260f, 0.053923f, 0.007904f, 0.010009f, -0.025652f, -0.000149f, -0.021512f, -0.022643f, -0.011864f, 0.017315f, -0.021746f, -0.011448f, 0.010040f, 0.003745f, 0.016437f, -0.006965f, -0.003164f, 0.021412f, 0.012267f, 0.001049f, -0.017495f, -0.014084f, -0.002480f, -0.005568f, 0.012547f, 0.021365f, -0.001958f, 0.003609f, 0.004650f, -0.008985f, 0.053471f, 0.016402f, 0.003475f, 0.001940f, -0.017951f, 0.014092f, -0.031804f, -0.002555f, 0.026749f, -0.002110f, -0.007526f, 0.019437f, 0.010898f, 0.005809f, -0.000828f, -0.017755f, 0.011317f, 0.012523f, 0.003855f, 0.006758f, 0.009018f, -0.006326f, 0.006892f, -0.021479f, 0.022201f, 0.055812f, -0.029652f, 0.022010f, 0.027910f, -0.038906f, 0.005816f, -0.048019f, 0.019279f, - -0.004434f, -0.025295f, 0.039438f, 0.001842f, 0.061085f, -0.002999f, -0.044331f, 0.077011f, -0.012915f, 0.008304f, 0.011345f, -0.070946f, 0.022383f, 0.062333f, 0.022814f, -0.026134f, -0.046068f, 0.005550f, 0.012282f, 0.053389f, 0.034857f, -0.016531f, -0.009396f, -0.040425f, 0.001264f, 0.060310f, -0.080207f, 0.025259f, 0.057581f, -0.050357f, 0.019619f, 0.005939f, 0.020566f, 0.060315f, 0.020852f, 0.023668f, -0.010118f, -0.057967f, 0.061619f, -0.010636f, -0.030062f, 0.127849f, 0.063568f, 0.033081f, 0.006551f, 0.003506f, -0.058875f, -0.048475f, -0.021259f, 0.038016f, -0.000248f, -0.034125f, -0.023489f, 0.047789f, -0.027771f, 0.033104f, 0.019501f, -0.022695f, 0.035790f, 0.016502f, -0.049311f, -0.024573f, -0.028465f, 0.008899f, 0.032663f, -0.062445f, 0.021859f, -0.064000f, -0.080472f, -0.050731f, 0.079445f, -0.026476f, 0.017361f, -0.017717f, -0.025996f, -0.003321f, -0.031199f, -0.021867f, -0.016031f, 0.004578f, -0.029823f, 0.004240f, 0.019457f, 0.000557f, -0.026071f, -0.019729f, 0.010855f, 0.003674f, 0.036076f, 0.005245f, -0.038685f, -0.014965f, -0.021588f, 0.033439f, -0.005323f, -0.012708f, - -0.030284f, 0.000178f, 0.020413f, 0.009262f, 0.023086f, -0.010389f, -0.002117f, 0.006998f, 0.023533f, 0.014653f, 0.000879f, -0.011921f, 0.017950f, -0.014727f, -0.000053f, 0.009517f, -0.012702f, 0.000228f, 0.026287f, -0.000187f, 0.006223f, -0.026522f, -0.017420f, -0.020028f, 0.013999f, -0.021342f, -0.005058f, 0.077239f, 0.129248f, -0.022384f, -0.005053f, -0.107284f, -0.036485f, -0.079068f, -0.052956f, 0.071923f, 0.004435f, 0.019040f, -0.061041f, 0.018868f, -0.053681f, -0.119924f, 0.016682f, 0.056610f, -0.005423f, 0.006741f, 0.060985f, -0.082423f, 0.092644f, 0.045859f, 0.028457f, -0.046907f, 0.062079f, 0.120342f, -0.024716f, 0.036761f, 0.091230f, 0.076952f, 0.136265f, 0.029127f, 0.048520f, 0.036641f, 0.032713f, 0.116992f, -0.031202f, -0.014556f, 0.042751f, 0.025178f, -0.013353f, 0.064115f, 0.003337f, 0.013083f, -0.038918f, -0.105541f, 0.003548f, 0.069571f, 0.010157f, 0.041965f, -0.076296f, 0.004258f, -0.101271f, -0.000241f, -0.108783f, 0.007048f, 0.075536f, -0.010025f, -0.032720f, -0.103656f, 0.134875f, 0.024237f, 0.008691f, 0.139782f, -0.002050f, -0.032330f, -0.023993f, 0.006951f, - 0.027708f, -0.008004f, 0.000201f, -0.011357f, -0.074361f, 0.043691f, 0.016806f, -0.046639f, -0.028692f, 0.036498f, -0.044964f, -0.077641f, -0.037988f, 0.016698f, 0.073923f, -0.077692f, 0.061544f, -0.003211f, 0.032798f, -0.013715f, 0.026777f, -0.018748f, -0.002778f, 0.006557f, 0.007516f, 0.024712f, 0.022540f, 0.004529f, 0.047383f, -0.002592f, 0.019513f, 0.024831f, 0.014639f, 0.010819f, 0.011431f, 0.040821f, 0.030617f, 0.014659f, -0.015786f, -0.006760f, 0.035760f, -0.047300f, 0.018538f, -0.028221f, 0.007150f, -0.010500f, 0.032469f, 0.037004f, 0.075564f, 0.042047f, 0.071387f, 0.040722f, 0.015530f, 0.074587f, 0.077928f, 0.073718f, 0.042923f, -0.012337f, 0.044987f, 0.049163f, 0.031151f, 0.059188f, 0.045497f, 0.000538f, 0.014766f, 0.010660f, 0.011206f, 0.017978f, 0.014223f, -0.014182f, -0.013219f, 0.001749f, 0.014516f, -0.002430f, 0.000135f, -0.003260f, -0.006538f, -0.014026f, -0.012263f, -0.004811f, -0.002862f, -0.004866f, 0.000478f, -0.007738f, -0.003388f, -0.042852f, -0.137743f, 0.004821f, 0.181967f, 0.025005f, -0.039239f, -0.037214f, -0.085460f, -0.056402f, 0.000740f, 0.113038f, - 0.018451f, -0.078287f, -0.007271f, 0.029600f, 0.005773f, 0.000655f, -0.009307f, 0.018328f, -0.056503f, -0.022153f, 0.026228f, 0.061966f, 0.062374f, -0.062105f, -0.025002f, 0.003048f, 0.006820f, 0.014597f, -0.071333f, 0.005172f, 0.009630f, -0.019859f, 0.048335f, -0.002039f, 0.056040f, 0.085482f, 0.039907f, 0.016539f, 0.036154f, -0.050825f, 0.043137f, -0.041310f, 0.065382f, 0.117150f, 0.037306f, -0.065441f, -0.056990f, 0.052376f, 0.017885f, 0.099724f, 0.074241f, 0.021912f, -0.020684f, -0.023942f, 0.001391f, 0.004015f, -0.036888f, 0.038071f, 0.032684f, 0.005351f, 0.089599f, 0.061351f, -0.010104f, 0.043433f, 0.047964f, 0.022056f, 0.047967f, 0.001026f, -0.088535f, -0.011829f, -0.022622f, -0.021141f, 0.097060f, 0.044462f, 0.014323f, 0.077540f, 0.044808f, 0.049080f, 0.059758f, 0.020269f, -0.064476f, -0.032100f, -0.003219f, -0.002051f, -0.023888f, -0.019321f, -0.039821f, 0.022793f, 0.013527f, 0.036042f, -0.019084f, 0.040343f, 0.009784f, 0.041831f, 0.026753f, -0.010217f, -0.023569f, 0.005656f, 0.009696f, -0.000304f, 0.003067f, 0.030550f, 0.001184f, 0.048211f, 0.063567f, 0.018144f, - -0.007387f, 0.004237f, 0.045117f, 0.010302f, -0.016822f, -0.012985f, 0.035208f, -0.002392f, -0.013537f, -0.007630f, 0.010257f, 0.025992f, 0.050552f, -0.028033f, 0.002163f, -0.018245f, 0.002243f, 0.001869f, 0.040792f, -0.023206f, 0.019030f, 0.025882f, 0.013307f, -0.019588f, 0.003779f, 0.030257f, 0.001549f, 0.000938f, 0.026954f, 0.004119f, 0.015292f, 0.011250f, 0.000527f, -0.005399f, 0.002829f, -0.003760f, 0.004179f, 0.002534f, 0.004562f, 0.002239f, 0.011642f, 0.004631f, 0.003108f, 0.003751f, 0.007617f, 0.003514f, 0.008339f, 0.003386f, 0.004076f, 0.004436f, 0.003501f, 0.004667f, 0.002322f, 0.004324f, 0.005933f, 0.006742f, 0.006500f, 0.007320f, 0.005819f, 0.007738f, 0.005736f, 0.006307f, 0.002664f, 0.006422f, 0.002672f, 0.005917f, 0.001976f, 0.005966f, 0.004050f, 0.005469f, 0.001310f, 0.005465f, 0.003515f, 0.005815f, 0.003801f, 0.006550f, 0.002022f, 0.007005f, 0.002114f, 0.006263f, 0.003481f, 0.006210f, 0.002428f, 0.006986f, 0.002305f, 0.005688f, 0.003242f, 0.006110f, 0.002999f, 0.007211f, -0.000072f, -0.026229f, -0.128411f, -0.027162f, 0.073011f, 0.039754f, - 0.158734f, 0.009354f, -0.022003f, -0.070048f, -0.137642f, -0.151496f, -0.024418f, 0.066265f, 0.074670f, 0.047899f, -0.075912f, -0.100944f, 0.000253f, -0.011838f, 0.041527f, 0.106551f, 0.054949f, -0.009380f, -0.062526f, -0.085655f, -0.053157f, 0.004068f, -0.052040f, 0.021204f, -0.043370f, -0.021434f, 0.071689f, 0.058921f, 0.053044f, 0.020797f, -0.071526f, -0.019775f, -0.068366f, -0.052950f, -0.026856f, 0.041426f, -0.006655f, 0.043956f, 0.108231f, 0.112207f, -0.045560f, 0.013274f, -0.081457f, -0.056037f, -0.038337f, -0.006776f, 0.016474f, 0.065200f, 0.070227f, 0.095708f, 0.068855f, 0.024688f, -0.046135f, -0.043163f, -0.009346f, 0.030970f, -0.076788f, 0.005981f, 0.092133f, 0.072901f, -0.017939f, 0.098679f, 0.088930f, 0.049831f, 0.092897f, -0.173704f, 0.042468f, -0.049209f, -0.052541f, 0.030087f, -0.027675f, -0.002279f, 0.176571f, 0.148671f, 0.053742f, -0.045656f, -0.002964f, -0.069599f, -0.012601f, -0.093668f, -0.032204f, -0.015609f, 0.037337f, 0.115102f, 0.061352f, 0.024251f, 0.021620f, -0.018380f, -0.056540f, -0.074145f, 0.001360f, -0.048914f, 0.040432f, -0.004161f, 0.000891f, 0.044195f, - 0.037224f, 0.013705f, 0.038519f, 0.013293f, 0.059521f, -0.040605f, 0.000388f, -0.044785f, 0.019880f, -0.038948f, -0.034547f, 0.006335f, -0.009559f, 0.031094f, 0.056388f, 0.003448f, -0.049819f, -0.085969f, -0.024634f, -0.049807f, 0.007035f, 0.022433f, 0.042085f, -0.033200f, -0.010461f, 0.001559f, -0.000565f, 0.043643f, 0.003510f, -0.223742f, -0.253650f, -0.272722f, -0.275538f, -0.373533f, -0.022383f, -0.133956f, -0.043441f, 0.049267f, 0.124524f, 0.174795f, 0.180318f, 0.368694f, 0.395369f, 0.321822f, 0.239355f, 0.253546f, 0.241776f, 0.093061f, -0.036196f, -0.166499f, -0.166790f, -0.255873f, -0.083266f, -0.138749f, -0.103478f, -0.009850f, -0.217202f, -0.062597f, -0.194018f, -0.052926f, -0.222907f, -0.210165f, -0.097112f, -0.173540f, -0.017859f, -0.087727f, -0.081079f, -0.129808f, -0.085960f, -0.195924f, -0.138525f, -0.073688f, -0.067535f, -0.103716f, -0.063578f, -0.007768f, -0.083929f, 0.028073f, 0.125128f, -0.097714f, 0.148051f, 0.088663f, 0.197665f, 0.198510f, 0.173357f, 0.213753f, 0.180621f, 0.298213f, 0.296289f, 0.236204f, 0.316161f, 0.271023f, 0.414102f, 0.407706f, 0.480568f, 0.373925f, - 0.402597f, 0.438635f, 0.396309f, 0.473780f, 0.351142f, 0.513048f, 0.410115f, 0.156174f, 0.200518f, 0.052710f, 0.079409f, -0.277810f, -0.233060f, -0.260302f, -0.276910f, -0.292092f, -0.377200f, -0.355294f, -0.390370f, -0.428780f, -0.503898f, -0.421317f, -0.385639f, -0.428820f, -0.467483f, -0.557530f, -0.447083f, -0.495214f, -0.498287f, -0.378243f, -0.426213f, -0.246089f, -0.305222f, -0.209075f, -0.193935f, -0.102873f, -0.075056f, -0.106507f, -0.018268f, 0.050038f, 0.242161f, 0.229264f, 0.166648f, 0.188188f, 0.202694f, 0.274524f, 0.281446f, 0.304139f, 0.321027f, 0.275875f, 0.280574f, 0.205947f, 0.291942f, 0.298272f, 0.227483f, 0.159787f, 0.123659f, 0.179173f, 0.177572f, 0.137964f, 0.082973f, 0.045703f, 0.069948f, -0.018279f, 0.009720f, -0.032787f, -0.025698f, -0.132537f, -0.121000f, -0.088472f, -0.060899f, -0.080722f, -0.061506f, -0.029614f, -0.024027f, -0.032078f, -0.059325f, -0.054932f, -0.026913f, -0.035384f, -0.023017f, -0.019787f, 0.004278f, 0.009250f, 0.002038f, -0.009436f, -0.002146f, 0.004780f, -0.002912f, -0.003020f, 0.003564f, 0.006461f, 0.013072f, 0.003552f, -0.003315f, -0.000618f, - 0.004457f, 0.003725f, -0.002958f, -0.001273f, 0.007081f, 0.004459f, 0.003749f, 0.004131f, 0.007547f, 0.006224f, 0.001730f, -0.000594f, 0.005333f, 0.005085f, 0.005611f, -0.001245f, -0.005906f, -0.003001f, 0.002105f, 0.007279f, 0.008683f, 0.004805f, 0.001802f, -0.004438f, -0.007026f, -0.005232f, -0.005174f, -0.010264f, -0.016768f, -0.021177f, -0.021696f, -0.022457f, -0.024540f, -0.026876f, -0.031217f, -0.034854f, -0.037673f, -0.037322f, -0.033849f, -0.031160f, -0.031244f, -0.030277f, -0.028528f, -0.018498f, -0.012673f, -0.009236f, -0.001988f, 0.004932f, 0.010546f, 0.016213f, 0.022183f, 0.025512f, 0.029653f, 0.029484f, 0.028466f, 0.028315f, 0.025408f, 0.021061f, 0.016310f, 0.013052f, 0.010586f, 0.007808f, 0.005354f, 0.003235f, 0.001934f, 0.000905f, 0.000685f, 0.000426f, 0.000309f, 0.000205f, 0.000113f, 0.000106f, 0.000195f, 0.000328f, 0.000398f} - }, - { - {-0.005191f, 0.009873f, -0.000298f, 0.004109f, 0.001650f, -0.008456f, -0.006335f, 0.002327f, -0.005698f, -0.008503f, 0.005001f, -0.000923f, 0.001377f, -0.004840f, 0.003723f, 0.000446f, -0.007521f, -0.000251f, 0.008889f, 0.007239f, -0.005373f, -0.009544f, -0.008687f, 0.001387f, -0.001928f, -0.001628f, -0.007379f, 0.008228f, -0.002067f, 0.002386f, -0.003313f, -0.001976f, -0.000650f, 0.003178f, -0.002116f, -0.004189f, -0.016311f, 0.005673f, -0.001150f, 0.005395f, 0.003243f, 0.002321f, -0.000330f, 0.011031f, 0.002150f, 0.002278f, 0.001621f, -0.005505f, -0.003485f, -0.000428f, 0.000898f, -0.005512f, -0.001232f, 0.002272f, -0.000676f, -0.005204f, -0.002693f, 0.000285f, 0.005272f, -0.008017f, -0.010900f, -0.013537f, 0.004919f, 0.007896f, 0.000885f, 0.006546f, 0.004832f, 0.000996f, -0.012396f, -0.000237f, -0.003174f, -0.004295f, 0.000312f, 0.000785f, 0.005271f, -0.001028f, 0.007461f, 0.005302f, -0.002235f, -0.007394f, -0.003544f, -0.001250f, 0.002006f, 0.000658f, 0.002510f, 0.002888f, 0.005239f, -0.000024f, -0.000397f, -0.002337f, -0.002003f, -0.001921f, -0.000798f, -0.004090f, -0.001876f, -0.002277f, - 0.001394f, -0.000193f, -0.000430f, -0.001200f, 0.002052f, -0.002856f, 0.005936f, 0.007753f, -0.001756f, -0.000075f, -0.011028f, 0.009886f, -0.012636f, 0.004920f, 0.021336f, -0.004537f, -0.007919f, 0.001241f, 0.011137f, 0.001214f, -0.003152f, -0.001509f, -0.003177f, -0.001983f, -0.010009f, -0.003867f, 0.004946f, -0.007919f, -0.004543f, 0.000489f, -0.000437f, 0.008831f, -0.005365f, 0.001683f, -0.002076f, 0.001964f, -0.001117f, -0.005091f, 0.009735f, 0.016603f, 0.004193f, -0.000896f, -0.003106f, 0.017968f, 0.000832f, -0.007444f, 0.000498f, -0.013312f, 0.000045f, 0.007028f, -0.010262f, -0.001248f, 0.002195f, -0.008135f, -0.002471f, 0.009496f, 0.001337f, -0.000953f, 0.009100f, -0.005996f, -0.009585f, 0.005485f, 0.003587f, -0.006622f, -0.003324f, -0.007093f, -0.008402f, -0.008960f, -0.005005f, -0.005092f, 0.007310f, 0.005279f, 0.001423f, -0.000132f, -0.005091f, 0.004784f, -0.001113f, -0.003388f, 0.006189f, 0.006934f, -0.004905f, -0.000895f, -0.002328f, -0.003036f, 0.000946f, 0.007938f, -0.003982f, 0.001847f, 0.007467f, 0.005040f, -0.001736f, 0.001991f, -0.001329f, -0.000112f, 0.003152f, -0.000354f, - 0.000028f, 0.003330f, -0.003479f, 0.001502f, 0.000687f, -0.001004f, -0.003210f, 0.002543f, 0.000253f, -0.001316f, 0.000722f, 0.000459f, -0.001171f, 0.000475f, -0.000616f, -0.000947f, -0.001894f, 0.010940f, -0.015828f, -0.010434f, -0.003731f, -0.002262f, 0.000586f, 0.002089f, -0.015090f, 0.010560f, -0.004732f, 0.003482f, 0.002217f, 0.003545f, 0.006663f, -0.000002f, -0.002141f, -0.004993f, 0.010949f, -0.000817f, 0.007135f, 0.013503f, -0.002870f, 0.011487f, 0.009813f, -0.008420f, 0.005708f, 0.005766f, 0.006192f, -0.014891f, -0.001433f, 0.000934f, -0.004642f, -0.009351f, 0.000198f, 0.010999f, -0.002521f, -0.004654f, -0.003634f, 0.003391f, 0.010214f, 0.005057f, -0.005138f, -0.000049f, -0.004228f, 0.000469f, -0.001309f, -0.005028f, 0.009544f, -0.012229f, -0.010079f, -0.009274f, 0.002933f, -0.001274f, -0.000279f, -0.011409f, -0.012027f, 0.002977f, -0.000199f, 0.000717f, -0.001136f, -0.000610f, -0.008963f, -0.005307f, -0.009805f, 0.001964f, 0.008509f, -0.002604f, 0.007557f, 0.001434f, 0.006726f, -0.014374f, 0.000120f, 0.002109f, -0.004746f, -0.002146f, 0.001983f, -0.005105f, -0.000572f, 0.003799f, - 0.004136f, -0.003170f, -0.009574f, 0.008506f, 0.001391f, 0.000232f, -0.002067f, -0.001208f, -0.007652f, 0.000363f, 0.000595f, -0.001336f, 0.001456f, 0.000270f, -0.002658f, 0.001183f, 0.001314f, -0.000759f, -0.001044f, -0.000366f, -0.000394f, -0.000504f, 0.000492f, 0.004077f, 0.000135f, -0.001204f, 0.003429f, 0.001514f, -0.000196f, -0.001107f, -0.000264f, -0.000552f, -0.005588f, 0.001195f, -0.001240f, 0.009202f, 0.014720f, 0.000798f, -0.005804f, -0.012789f, 0.005635f, 0.003612f, 0.003358f, 0.015608f, -0.010449f, 0.000222f, 0.001766f, -0.002996f, -0.005304f, 0.002190f, 0.000840f, 0.009356f, 0.020795f, -0.001982f, 0.003472f, 0.008622f, -0.003953f, 0.007678f, 0.013461f, -0.009636f, -0.000509f, -0.003674f, -0.000352f, 0.005942f, -0.010761f, 0.011328f, 0.002400f, 0.000004f, 0.005885f, -0.001122f, 0.008209f, -0.004661f, -0.002083f, -0.002480f, 0.012984f, 0.006001f, 0.008212f, -0.001709f, 0.006739f, -0.012875f, 0.014586f, -0.005827f, 0.005641f, -0.013544f, 0.005261f, 0.009630f, 0.017811f, 0.006482f, 0.003199f, -0.011937f, -0.004685f, 0.003154f, -0.009107f, -0.010757f, -0.002682f, 0.021121f, - 0.024428f, 0.004609f, 0.005627f, -0.007119f, -0.003273f, 0.013645f, 0.002524f, 0.005919f, -0.000990f, 0.004086f, 0.003527f, -0.001914f, 0.002986f, -0.002106f, 0.002212f, 0.001564f, 0.008527f, 0.006976f, -0.011063f, 0.009629f, -0.003348f, 0.004910f, -0.003593f, 0.003589f, -0.003057f, -0.004136f, -0.000235f, -0.006552f, 0.000858f, 0.004660f, 0.000920f, 0.002368f, -0.002457f, -0.002933f, -0.001632f, 0.001115f, 0.000045f, 0.001014f, -0.000576f, 0.000686f, -0.001986f, 0.000621f, 0.000541f, 0.003391f, 0.000048f, 0.002294f, -0.001262f, 0.002052f, -0.002583f, 0.000240f, 0.000245f, 0.002445f, 0.010195f, 0.000113f, 0.001122f, 0.014369f, -0.012420f, -0.014604f, 0.022317f, -0.006005f, -0.003761f, 0.014517f, 0.008640f, 0.000902f, -0.025948f, 0.027678f, -0.005256f, -0.003709f, -0.003076f, -0.001708f, 0.000961f, 0.001531f, 0.008569f, 0.012805f, 0.008423f, -0.002060f, 0.014446f, 0.009056f, 0.004551f, 0.003727f, -0.005498f, 0.006459f, -0.010613f, 0.008172f, -0.001726f, 0.003303f, -0.008999f, -0.013102f, 0.001536f, -0.001837f, 0.004615f, 0.007574f, -0.003946f, -0.012555f, -0.007315f, 0.002830f, - -0.014924f, 0.009369f, 0.002874f, -0.023840f, 0.010577f, 0.001420f, 0.006010f, 0.001317f, 0.003582f, 0.003796f, -0.001053f, -0.006881f, -0.005871f, -0.016345f, -0.011930f, -0.006802f, -0.008313f, -0.002037f, 0.000888f, -0.012027f, -0.016776f, -0.002714f, 0.010799f, 0.018498f, -0.001017f, -0.012691f, 0.002012f, -0.019830f, 0.001290f, -0.001566f, -0.007763f, 0.016310f, 0.015502f, 0.005004f, -0.000648f, -0.004231f, -0.001223f, -0.008924f, 0.004044f, 0.015620f, 0.008441f, 0.012865f, 0.002609f, -0.006224f, 0.006061f, 0.002923f, -0.000475f, 0.001005f, 0.000683f, 0.000133f, 0.002803f, 0.002663f, 0.002782f, -0.001147f, 0.004907f, 0.001071f, 0.009717f, 0.003536f, 0.002587f, 0.000187f, 0.000815f, 0.002295f, -0.000722f, 0.004290f, 0.001664f, 0.001485f, -0.002623f, 0.005394f, 0.001404f, -0.002321f, -0.000865f, 0.004155f, -0.025330f, 0.013070f, -0.004844f, -0.009021f, -0.007153f, -0.008632f, -0.012045f, 0.023186f, -0.029556f, 0.006954f, 0.007134f, 0.009652f, 0.014434f, 0.002355f, 0.004008f, 0.005419f, 0.003909f, 0.002989f, 0.004890f, 0.012687f, 0.002293f, -0.007017f, -0.000014f, -0.001251f, - -0.009097f, -0.008254f, 0.004213f, 0.008488f, 0.009164f, 0.001215f, 0.006535f, -0.015423f, -0.001786f, -0.000249f, -0.000844f, -0.014619f, -0.008734f, -0.005285f, 0.009541f, 0.008523f, -0.000145f, -0.016002f, 0.000094f, -0.008685f, -0.006184f, -0.003178f, -0.004290f, 0.009988f, 0.013652f, 0.004101f, 0.014203f, -0.022758f, -0.015861f, 0.007511f, 0.004647f, 0.000725f, 0.003014f, 0.001437f, -0.007354f, -0.014338f, -0.009861f, 0.007522f, -0.006385f, 0.011528f, 0.011418f, -0.004212f, 0.010821f, -0.017252f, -0.008487f, -0.004897f, -0.005785f, 0.001196f, 0.031332f, -0.004565f, 0.008875f, -0.005062f, -0.004514f, -0.003257f, 0.006666f, 0.007056f, -0.000809f, 0.005681f, 0.003953f, -0.009841f, 0.002716f, 0.000674f, 0.004217f, 0.000835f, 0.000539f, -0.005003f, 0.003182f, -0.000285f, 0.003225f, 0.000941f, 0.001684f, -0.000996f, -0.001840f, 0.000848f, -0.002823f, -0.004200f, 0.001428f, -0.002343f, -0.003502f, -0.001139f, 0.001091f, 0.001300f, 0.001431f, 0.001435f, -0.000171f, 0.001000f, 0.002253f, 0.001746f, 0.000659f, 0.000434f, -0.000696f, -0.001296f, 0.002107f, 0.001050f, -0.000166f, 0.001438f, - 0.025884f, -0.004995f, 0.000694f, 0.010892f, -0.024668f, 0.016932f, 0.008580f, -0.013910f, 0.015411f, 0.017243f, 0.005779f, -0.026632f, 0.016442f, 0.000701f, -0.002525f, 0.013461f, 0.014543f, -0.000841f, -0.004313f, 0.000411f, -0.010345f, 0.009653f, -0.005663f, -0.009858f, -0.020722f, 0.004822f, -0.022522f, 0.006029f, -0.005531f, -0.002532f, 0.006476f, -0.018354f, -0.007550f, 0.015234f, -0.001346f, -0.007133f, 0.009317f, 0.000605f, -0.008019f, 0.006892f, 0.002489f, 0.000664f, -0.003447f, 0.005253f, -0.011180f, -0.001185f, -0.016320f, 0.015413f, 0.015408f, -0.019216f, 0.012817f, -0.013713f, -0.005187f, 0.013244f, 0.018525f, -0.001360f, -0.009252f, 0.005591f, -0.001181f, 0.002659f, -0.022679f, -0.017933f, 0.003562f, 0.003201f, -0.004917f, -0.004673f, 0.005862f, -0.000714f, -0.008049f, 0.009565f, -0.009276f, 0.003230f, 0.006916f, -0.001604f, 0.010856f, -0.010913f, 0.010977f, -0.000093f, 0.017476f, -0.006018f, 0.005293f, 0.009857f, 0.001101f, -0.006290f, -0.001803f, -0.000669f, 0.005113f, -0.001733f, -0.008250f, 0.006919f, 0.001489f, -0.003472f, 0.003048f, -0.002343f, -0.000122f, -0.003261f, - -0.000947f, 0.002349f, -0.002776f, 0.001754f, 0.004777f, -0.002510f, 0.001148f, 0.000309f, -0.001609f, 0.003010f, 0.000793f, 0.002558f, -0.003885f, 0.001545f, -0.003977f, -0.004553f, 0.001665f, -0.000749f, 0.001820f, 0.001880f, 0.000551f, 0.005520f, 0.007208f, 0.003163f, -0.009391f, 0.018222f, -0.006186f, 0.008886f, -0.018322f, -0.001263f, -0.004808f, -0.016630f, 0.000619f, 0.011812f, 0.020965f, 0.027417f, -0.015556f, -0.000399f, -0.019399f, -0.001416f, -0.012341f, 0.011090f, -0.011552f, -0.022884f, 0.001522f, -0.014654f, -0.001338f, 0.019043f, -0.011230f, -0.011206f, 0.020435f, 0.000667f, 0.003543f, -0.002097f, -0.011957f, 0.005130f, 0.004389f, 0.024616f, -0.016923f, 0.012091f, -0.014347f, 0.003622f, 0.004809f, -0.014159f, -0.008702f, 0.023638f, 0.006492f, -0.017522f, -0.004497f, -0.006390f, -0.014060f, -0.000560f, 0.023174f, 0.012428f, 0.016137f, 0.003714f, 0.006474f, -0.021083f, -0.003019f, 0.026888f, 0.002163f, -0.016657f, 0.008966f, 0.008912f, -0.012213f, -0.010634f, -0.005869f, -0.027556f, -0.004220f, 0.008225f, 0.013666f, 0.024255f, -0.006037f, -0.013220f, -0.003799f, -0.008217f, - 0.019701f, -0.007285f, -0.017135f, -0.011669f, -0.005038f, -0.002313f, -0.005286f, -0.009894f, 0.021444f, -0.012241f, -0.001457f, 0.002007f, 0.001058f, 0.007021f, 0.004392f, -0.006277f, -0.008436f, 0.006393f, 0.007673f, 0.008110f, -0.001817f, 0.003685f, -0.002207f, -0.001305f, 0.003644f, -0.000764f, -0.003725f, 0.003837f, 0.001815f, -0.000080f, -0.002429f, -0.000793f, -0.006228f, 0.000615f, -0.001523f, -0.005350f, -0.002718f, 0.002479f, 0.002160f, 0.000132f, 0.002531f, 0.011870f, -0.040805f, -0.028100f, -0.017977f, 0.002245f, -0.034173f, 0.005209f, 0.025564f, 0.008515f, 0.026320f, -0.013987f, -0.006396f, -0.002763f, -0.013536f, -0.005017f, -0.020367f, 0.036456f, 0.020863f, 0.014584f, -0.030631f, -0.005857f, -0.009792f, -0.019911f, 0.007014f, -0.002022f, 0.006585f, -0.024752f, -0.001607f, -0.002144f, -0.017733f, 0.010455f, 0.003056f, 0.018305f, 0.007435f, -0.015162f, 0.024117f, -0.011275f, 0.009851f, 0.005136f, -0.000096f, 0.019080f, 0.017768f, 0.004533f, -0.022805f, 0.028029f, -0.014040f, 0.020119f, 0.009248f, -0.010295f, -0.011423f, 0.022550f, 0.003412f, -0.002543f, 0.005965f, -0.018909f, - -0.006689f, 0.011023f, -0.001472f, 0.019949f, -0.011372f, -0.017894f, 0.007485f, 0.005159f, 0.000731f, 0.019839f, 0.008640f, 0.004093f, -0.012487f, 0.014458f, 0.005766f, -0.010951f, -0.001391f, -0.001109f, -0.006211f, -0.004537f, -0.005216f, 0.008725f, 0.021840f, 0.036657f, 0.017135f, -0.006098f, 0.001991f, -0.008325f, 0.008554f, 0.011330f, -0.000040f, -0.009274f, -0.005357f, -0.012128f, 0.007668f, -0.006593f, 0.001932f, -0.005691f, -0.001433f, 0.008192f, -0.000816f, 0.000954f, -0.007276f, 0.008013f, -0.004038f, -0.003488f, 0.004515f, -0.007227f, 0.008158f, -0.005520f, 0.004443f, -0.003880f, -0.000584f, 0.001867f, -0.005284f, -0.003801f, -0.002222f, -0.008807f, -0.008750f, -0.003841f, -0.000295f, -0.003072f, 0.007241f, 0.006596f, 0.003991f, -0.026332f, 0.034202f, 0.013884f, 0.039184f, -0.018304f, -0.021825f, 0.037318f, 0.000774f, -0.004405f, 0.007787f, 0.002403f, 0.021637f, 0.029004f, 0.003346f, -0.027896f, -0.044388f, 0.005670f, -0.012615f, 0.002193f, 0.000742f, -0.019481f, -0.001715f, 0.023424f, 0.019049f, 0.014891f, 0.030283f, -0.007432f, 0.025583f, -0.018800f, 0.022599f, 0.007126f, - 0.017398f, -0.012472f, 0.031029f, 0.017679f, 0.022523f, -0.037011f, -0.000675f, 0.032774f, 0.018428f, 0.005571f, -0.008385f, 0.049540f, 0.020609f, -0.020067f, -0.012584f, 0.011736f, -0.019573f, -0.002312f, -0.009655f, 0.002126f, 0.041491f, 0.043527f, 0.031441f, 0.011281f, -0.000129f, 0.016109f, -0.015093f, -0.004132f, 0.017522f, -0.019111f, 0.043966f, 0.027281f, 0.021327f, 0.008164f, -0.002206f, -0.021431f, 0.025904f, 0.000526f, 0.022534f, -0.010719f, 0.008455f, -0.015244f, -0.008986f, -0.000805f, 0.011123f, -0.017851f, 0.040902f, 0.017421f, -0.005041f, -0.020699f, -0.039494f, 0.018783f, 0.002932f, -0.013094f, -0.001679f, 0.004430f, -0.009598f, 0.005269f, 0.014575f, -0.003002f, -0.005660f, 0.000080f, -0.003670f, -0.004271f, 0.002925f, -0.005096f, -0.003930f, -0.006836f, 0.006272f, 0.003471f, -0.010275f, 0.005136f, 0.005811f, 0.005725f, -0.000680f, -0.003267f, -0.001582f, -0.000439f, 0.002778f, -0.001197f, 0.001929f, -0.006158f, 0.009077f, -0.012349f, -0.000280f, 0.003790f, 0.010236f, 0.001041f, 0.043427f, -0.001970f, -0.020650f, -0.009030f, -0.016067f, -0.000117f, -0.026104f, 0.007428f, - -0.022412f, 0.013511f, 0.003520f, -0.005700f, -0.017510f, -0.021102f, -0.032173f, -0.033470f, -0.009506f, 0.029939f, -0.001623f, -0.018742f, 0.008516f, -0.017857f, 0.014650f, -0.015196f, 0.028190f, -0.027899f, 0.007229f, -0.019666f, -0.019977f, -0.003347f, 0.004114f, -0.005581f, 0.013645f, -0.040382f, 0.017053f, 0.004337f, -0.009203f, -0.002427f, -0.002075f, -0.019803f, -0.031736f, -0.034319f, 0.025610f, 0.012714f, -0.012920f, 0.021971f, 0.001345f, -0.008663f, -0.024874f, -0.053311f, -0.043517f, 0.025359f, -0.007056f, 0.000890f, -0.004639f, -0.002208f, -0.001886f, -0.036035f, 0.014496f, -0.042634f, -0.022219f, 0.002256f, -0.000663f, -0.008905f, -0.005082f, -0.005455f, 0.044976f, -0.013448f, -0.013741f, -0.011771f, 0.047035f, -0.008127f, -0.017903f, 0.029579f, -0.022328f, -0.014447f, -0.018271f, -0.015803f, -0.059035f, 0.012152f, 0.010291f, -0.019856f, -0.002183f, 0.014122f, -0.007071f, -0.005236f, -0.010410f, -0.010085f, -0.000712f, -0.005228f, -0.004559f, 0.020959f, -0.000986f, -0.002152f, 0.014690f, 0.016670f, -0.007458f, -0.005948f, -0.000613f, -0.002874f, 0.004986f, -0.010083f, 0.001904f, 0.001206f, - 0.002650f, -0.006000f, -0.006666f, -0.003040f, 0.007570f, -0.002772f, -0.004750f, -0.000773f, 0.005087f, -0.013085f, -0.001282f, 0.007366f, 0.001271f, -0.005252f, 0.007810f, -0.004602f, 0.007019f, -0.000095f, 0.006753f, 0.006252f, 0.007300f, -0.011517f, -0.000340f, 0.000066f, -0.062966f, -0.047453f, -0.027012f, 0.055643f, -0.002488f, -0.008841f, -0.006435f, -0.003978f, -0.017907f, 0.019954f, 0.015425f, 0.049874f, -0.045365f, -0.008493f, 0.014345f, -0.032982f, -0.013092f, -0.011390f, 0.057254f, -0.000400f, 0.013394f, 0.029453f, 0.002872f, 0.028373f, -0.029908f, -0.037430f, -0.025129f, -0.006503f, -0.006226f, 0.005004f, 0.018019f, -0.000386f, -0.031717f, -0.021525f, -0.001442f, -0.016532f, -0.035626f, 0.032478f, -0.005170f, -0.017335f, -0.000063f, 0.010798f, 0.010307f, 0.006516f, -0.016037f, 0.003815f, -0.033163f, -0.014014f, -0.049256f, 0.023779f, 0.015035f, -0.005258f, -0.015399f, 0.018845f, -0.024509f, -0.005685f, 0.053360f, -0.004998f, 0.045225f, 0.020818f, 0.012172f, -0.011192f, -0.056649f, -0.022943f, -0.010862f, -0.029878f, -0.022792f, -0.013892f, 0.025407f, -0.010933f, 0.000594f, -0.022107f, - 0.048356f, -0.016599f, 0.019938f, 0.014231f, -0.033008f, -0.012564f, 0.007247f, 0.031294f, 0.055778f, 0.047170f, 0.020069f, -0.002426f, 0.019102f, 0.000896f, 0.001592f, -0.010182f, 0.005554f, -0.010540f, -0.007967f, 0.000579f, 0.003176f, -0.006033f, -0.009191f, -0.015539f, -0.013159f, 0.007769f, 0.005218f, 0.006497f, -0.006185f, -0.001685f, -0.032660f, 0.000222f, -0.015169f, -0.006189f, 0.005683f, 0.005368f, 0.001663f, 0.014300f, 0.000103f, -0.001015f, 0.001094f, -0.004525f, -0.023830f, -0.001328f, -0.013672f, 0.007630f, -0.012179f, -0.012015f, 0.001207f, 0.015979f, 0.006535f, -0.003330f, -0.009142f, -0.007182f, -0.004225f, 0.009066f, 0.001750f, -0.002638f, -0.006222f, 0.031765f, -0.002625f, -0.019728f, 0.019208f, 0.010549f, 0.067584f, 0.001327f, -0.000234f, 0.023148f, -0.031922f, -0.022384f, -0.007111f, 0.004605f, 0.010148f, -0.009354f, 0.028080f, -0.018857f, 0.003112f, 0.026248f, 0.011375f, 0.009072f, 0.009216f, -0.021202f, 0.002927f, -0.001654f, -0.010733f, 0.003132f, -0.015489f, -0.027066f, -0.014437f, 0.001006f, -0.026461f, 0.032078f, -0.003244f, 0.002265f, -0.005362f, 0.021747f, - 0.024912f, -0.005909f, -0.019777f, -0.002794f, -0.006840f, 0.029286f, 0.038161f, -0.028732f, -0.019783f, -0.015047f, 0.008991f, 0.027871f, -0.026601f, 0.007595f, -0.001861f, 0.005022f, -0.014168f, -0.019060f, 0.004941f, 0.018022f, 0.002851f, -0.024620f, 0.020656f, 0.061631f, -0.020968f, 0.010624f, -0.005396f, 0.003804f, 0.023535f, 0.005803f, 0.027871f, 0.022811f, -0.006935f, 0.035515f, 0.065814f, 0.001648f, -0.025223f, 0.064032f, -0.001949f, 0.061176f, -0.022180f, -0.031506f, 0.028055f, 0.010016f, 0.042805f, -0.008112f, 0.060549f, 0.018271f, 0.013548f, -0.019374f, 0.028346f, 0.002322f, 0.002270f, 0.005752f, 0.023040f, 0.003922f, 0.026407f, 0.002232f, 0.006090f, -0.000132f, 0.003451f, 0.003267f, 0.008027f, -0.003809f, 0.009078f, 0.021685f, 0.008938f, 0.009342f, 0.002642f, 0.005030f, -0.013239f, 0.010041f, 0.003721f, 0.004005f, 0.007624f, 0.003249f, -0.001348f, -0.001256f, 0.005847f, -0.007484f, 0.001687f, -0.000803f, 0.005166f, 0.015126f, 0.005342f, -0.001651f, -0.008709f, 0.007433f, 0.001007f, 0.000930f, -0.001995f, 0.007212f, 0.004432f, -0.013699f, 0.012057f, -0.043822f, - -0.014625f, 0.066454f, 0.010528f, -0.031826f, 0.008553f, -0.024311f, 0.008023f, 0.012090f, -0.006131f, -0.036370f, -0.014034f, -0.053982f, 0.021419f, 0.017403f, -0.021067f, 0.018936f, 0.030259f, 0.005491f, -0.008892f, -0.031922f, 0.006496f, 0.048793f, -0.024340f, 0.028917f, 0.027914f, 0.003590f, 0.020874f, 0.018932f, 0.000398f, 0.023827f, 0.016001f, -0.048261f, -0.007204f, -0.020028f, 0.047864f, 0.031097f, -0.034200f, 0.019767f, -0.004340f, 0.024528f, 0.080178f, -0.008629f, -0.014072f, 0.007043f, 0.072141f, 0.028767f, -0.004873f, 0.008241f, 0.012749f, 0.040836f, 0.036583f, -0.026353f, 0.044007f, 0.019280f, 0.040779f, -0.030226f, 0.004072f, 0.007152f, 0.008420f, 0.024320f, 0.037430f, -0.025702f, -0.019845f, 0.028762f, 0.014646f, -0.011323f, -0.010979f, -0.001073f, 0.045043f, -0.086655f, 0.019854f, -0.031592f, -0.022695f, 0.002901f, -0.029533f, -0.028441f, -0.004154f, -0.047984f, 0.033511f, -0.011200f, 0.035433f, -0.002565f, 0.030982f, -0.021882f, 0.012357f, -0.000554f, 0.010147f, -0.002287f, -0.012183f, 0.008105f, 0.006507f, 0.006188f, 0.015084f, -0.008801f, 0.007583f, 0.009105f, - -0.008848f, -0.000592f, 0.014452f, 0.003975f, -0.007905f, 0.014787f, -0.010740f, 0.000726f, 0.008411f, -0.011901f, -0.007899f, 0.001824f, 0.003224f, 0.016585f, 0.014976f, 0.009209f, 0.005454f, -0.003270f, 0.011713f, 0.001072f, 0.005192f, 0.003582f, 0.009759f, 0.010205f, -0.009713f, -0.009803f, -0.015739f, 0.010832f, 0.005042f, -0.000649f, 0.004065f, -0.001449f, -0.016943f, -0.016258f, 0.010895f, 0.014239f, 0.015084f, -0.019211f, -0.022839f, -0.058760f, 0.002526f, -0.032913f, 0.053123f, 0.006228f, -0.013941f, -0.008192f, 0.031852f, 0.008919f, 0.051801f, 0.020651f, -0.013553f, 0.001857f, 0.010890f, 0.023321f, 0.038978f, -0.043985f, -0.037855f, -0.008253f, 0.065614f, -0.020552f, 0.008353f, 0.018395f, 0.028750f, 0.034555f, 0.049894f, 0.042759f, 0.003796f, -0.010627f, 0.046617f, 0.003266f, -0.029672f, 0.015438f, -0.027517f, 0.019537f, 0.005008f, -0.024929f, 0.022522f, 0.087270f, 0.048889f, -0.031340f, -0.023368f, -0.003579f, -0.024235f, -0.024495f, -0.020741f, 0.014651f, -0.011767f, -0.020914f, 0.004672f, 0.023704f, 0.014534f, 0.007577f, 0.034570f, 0.008813f, -0.008200f, 0.035942f, - 0.030785f, -0.026726f, 0.018007f, -0.030120f, -0.023020f, -0.026764f, 0.000109f, -0.064014f, -0.018627f, 0.043762f, 0.032841f, -0.015603f, 0.022129f, -0.005821f, 0.001796f, -0.039552f, 0.009016f, 0.022940f, 0.037468f, 0.020421f, 0.024911f, 0.013001f, 0.012070f, -0.017195f, -0.014411f, -0.018263f, 0.010239f, -0.004383f, 0.001693f, 0.006977f, 0.008098f, -0.001386f, 0.019570f, -0.006645f, -0.008165f, -0.009794f, 0.013842f, -0.018292f, -0.006842f, -0.022430f, -0.000842f, 0.003656f, -0.009075f, 0.000204f, -0.004860f, 0.012953f, -0.002256f, -0.029420f, 0.000809f, -0.002655f, 0.008956f, 0.010558f, 0.004043f, 0.012082f, -0.000397f, 0.020075f, 0.004679f, -0.002366f, -0.000115f, 0.001539f, 0.001337f, 0.000319f, 0.008481f, -0.005433f, -0.024324f, 0.019267f, 0.015472f, -0.030779f, -0.013406f, -0.066380f, -0.005692f, 0.054489f, 0.000247f, -0.040754f, 0.006084f, 0.001404f, -0.027460f, 0.036150f, 0.020788f, -0.015219f, 0.010041f, 0.016107f, 0.022237f, 0.012069f, 0.003540f, -0.016777f, 0.008492f, 0.012525f, 0.034648f, 0.051818f, -0.014743f, -0.035759f, -0.018923f, 0.009453f, 0.010531f, 0.042536f, - -0.016832f, -0.034283f, -0.026645f, -0.027545f, 0.051760f, 0.094971f, 0.034341f, 0.004230f, 0.104442f, 0.005733f, 0.043099f, 0.024217f, -0.009166f, -0.022554f, 0.018284f, -0.030336f, -0.020172f, 0.020648f, 0.001091f, -0.063741f, -0.065736f, -0.016966f, 0.026986f, -0.034731f, -0.043129f, -0.024181f, -0.032014f, -0.026709f, 0.021775f, -0.018797f, -0.048849f, 0.021181f, 0.001599f, -0.014795f, 0.011039f, -0.011590f, 0.024158f, 0.097663f, -0.060541f, 0.048899f, -0.068789f, -0.039509f, -0.023006f, -0.016182f, 0.037773f, 0.014691f, 0.017961f, -0.008100f, 0.020860f, 0.043416f, 0.010746f, 0.000314f, 0.000285f, -0.013530f, 0.005783f, 0.011362f, 0.035072f, -0.002871f, -0.017800f, -0.003370f, 0.026731f, 0.016598f, -0.007908f, 0.009472f, 0.011987f, -0.010532f, -0.000606f, -0.004962f, 0.033628f, 0.011479f, 0.015808f, 0.011117f, 0.009439f, -0.014779f, -0.010149f, -0.003029f, 0.008447f, -0.017923f, 0.002262f, -0.017699f, -0.011867f, 0.001878f, 0.001561f, -0.020238f, 0.018754f, 0.025060f, -0.002778f, -0.004211f, 0.015554f, -0.000688f, -0.007010f, 0.022042f, -0.009652f, 0.014997f, 0.001227f, 0.052960f, - 0.033973f, 0.030597f, 0.045075f, -0.053167f, 0.020093f, -0.055677f, -0.002470f, 0.072137f, 0.064155f, 0.027175f, 0.000758f, 0.012249f, 0.007943f, -0.021051f, 0.016547f, 0.020563f, -0.091477f, 0.005304f, 0.013184f, 0.027454f, -0.033663f, -0.051672f, 0.037463f, 0.017531f, 0.009369f, -0.022262f, 0.044482f, -0.006586f, 0.034534f, 0.028566f, -0.003655f, 0.004098f, -0.010304f, 0.034876f, -0.021085f, 0.010427f, 0.020972f, -0.002164f, 0.044772f, 0.025717f, -0.002712f, 0.022748f, 0.026026f, -0.001680f, -0.020487f, -0.068774f, -0.012806f, 0.006979f, -0.040713f, 0.003586f, 0.032166f, -0.062536f, -0.027771f, 0.009204f, -0.026908f, -0.004671f, 0.032662f, 0.001561f, -0.023384f, -0.030652f, 0.013337f, 0.012805f, -0.063038f, -0.021320f, -0.005372f, -0.000093f, 0.039351f, 0.018995f, 0.004274f, 0.068644f, -0.008835f, -0.002601f, 0.002588f, -0.039728f, 0.037150f, -0.000053f, 0.061054f, -0.024092f, -0.010358f, 0.018031f, 0.009120f, -0.052533f, 0.001579f, -0.007584f, -0.020982f, -0.017242f, 0.006408f, 0.001774f, -0.014831f, -0.001699f, -0.009253f, -0.006843f, 0.001793f, -0.022709f, 0.006334f, 0.002665f, - -0.003220f, 0.008135f, 0.002249f, -0.015136f, 0.002909f, 0.003807f, 0.003823f, -0.014664f, 0.020729f, 0.003676f, 0.027000f, -0.020398f, 0.002438f, -0.017258f, -0.006026f, -0.003525f, -0.030074f, 0.005947f, 0.002703f, -0.001691f, -0.004142f, -0.005858f, 0.011028f, -0.013959f, -0.010514f, 0.012610f, 0.017374f, -0.013655f, -0.017572f, -0.064822f, -0.056522f, 0.010072f, -0.029201f, -0.009312f, -0.043601f, -0.054279f, -0.057075f, -0.037608f, 0.040339f, 0.055117f, 0.001272f, -0.045827f, 0.003409f, 0.001885f, 0.000414f, 0.020800f, 0.035136f, 0.035084f, 0.000690f, -0.023149f, -0.056923f, -0.032782f, -0.049848f, -0.010910f, 0.000037f, 0.003939f, 0.004953f, 0.006734f, 0.013511f, 0.017481f, 0.033259f, -0.052740f, 0.022870f, 0.008912f, 0.011420f, 0.027890f, 0.049624f, 0.055634f, -0.032365f, 0.024641f, -0.044673f, -0.014179f, -0.040549f, -0.004217f, -0.015903f, 0.092655f, 0.032814f, 0.066666f, 0.002660f, -0.036205f, -0.015591f, 0.042584f, 0.046250f, -0.027569f, 0.085577f, -0.036217f, 0.005190f, 0.003466f, 0.014734f, 0.031185f, 0.095223f, -0.006987f, 0.023202f, 0.052795f, 0.011977f, -0.042404f, - 0.026593f, 0.097268f, -0.017962f, -0.023944f, -0.057707f, -0.005128f, 0.035858f, 0.021887f, 0.002878f, -0.055599f, -0.042005f, 0.006689f, -0.043824f, 0.012810f, 0.001798f, -0.055364f, -0.006370f, 0.005310f, -0.008782f, 0.039375f, 0.037188f, 0.000466f, -0.011024f, -0.024066f, 0.025708f, -0.011328f, 0.044774f, -0.010611f, 0.000462f, 0.030379f, 0.030751f, 0.043549f, 0.033817f, -0.025180f, -0.009836f, 0.005529f, -0.008321f, 0.002609f, -0.019015f, -0.018566f, -0.018519f, 0.009224f, -0.022653f, -0.026661f, 0.015473f, 0.019952f, 0.001733f, -0.022966f, 0.014257f, 0.007601f, -0.005660f, -0.006148f, -0.015454f, -0.000709f, 0.008670f, -0.004285f, -0.013824f, -0.018281f, -0.003500f, -0.012150f, 0.014591f, 0.007834f, 0.001241f, -0.016748f, -0.007273f, -0.009509f, 0.019131f, 0.087013f, -0.004198f, -0.000199f, 0.037090f, 0.007428f, -0.119370f, -0.037330f, 0.085276f, 0.028553f, -0.024644f, -0.047394f, -0.006400f, -0.031221f, 0.044117f, 0.023035f, 0.008525f, -0.024990f, -0.056348f, 0.012416f, -0.097274f, -0.011663f, 0.048014f, 0.065386f, -0.007222f, -0.055052f, -0.037371f, -0.113943f, 0.033822f, -0.019582f, - 0.045025f, 0.034045f, -0.032151f, -0.023381f, -0.101029f, -0.075878f, 0.039933f, 0.108214f, 0.043424f, 0.051518f, -0.035661f, -0.063961f, -0.061288f, -0.025602f, 0.092085f, 0.123847f, 0.064786f, -0.143475f, -0.052370f, -0.109898f, -0.058570f, 0.136722f, 0.033590f, 0.030482f, -0.017815f, -0.131255f, -0.107331f, -0.107813f, -0.019770f, 0.010675f, 0.068396f, -0.025078f, 0.052107f, -0.104060f, 0.065135f, 0.026125f, 0.008224f, 0.131267f, 0.008741f, -0.011928f, -0.005947f, -0.177654f, -0.054010f, -0.011906f, 0.056339f, 0.029382f, 0.025934f, 0.078654f, -0.083578f, 0.005572f, -0.055194f, 0.060710f, 0.044067f, 0.004349f, 0.012424f, 0.013047f, -0.009576f, 0.036157f, 0.019636f, 0.009712f, 0.030998f, -0.020773f, -0.038747f, 0.009634f, 0.028385f, 0.042720f, 0.035441f, 0.023287f, -0.029007f, -0.047456f, -0.066329f, -0.005849f, 0.005108f, 0.054050f, 0.067190f, -0.009966f, -0.050571f, -0.087414f, -0.041675f, 0.006324f, 0.067218f, 0.107443f, 0.028308f, -0.104964f, -0.107479f, -0.109982f, -0.000883f, 0.089811f, 0.079351f, 0.083428f, -0.027693f, -0.040590f, -0.077961f, -0.078990f, 0.029268f, 0.053413f, - 0.069939f, 0.035347f, -0.054903f, -0.052177f, -0.029208f, -0.008281f, 0.064912f, 0.034220f, 0.010961f, -0.002985f, -0.039357f, -0.028657f, -0.005645f, -0.007787f, 0.017157f, 0.021355f, 0.009759f, 0.008597f, -0.050738f, 0.099262f, 0.042986f, 0.045836f, -0.121506f, 0.025123f, -0.169516f, -0.037006f, 0.000168f, 0.024636f, 0.010431f, -0.108484f, 0.059718f, -0.029704f, -0.018999f, -0.020010f, -0.022558f, -0.026231f, -0.033084f, 0.071892f, -0.019784f, -0.060885f, 0.020237f, -0.016910f, 0.008163f, 0.034889f, -0.068631f, -0.024357f, -0.003610f, 0.029494f, 0.003650f, 0.078991f, -0.006006f, -0.044529f, 0.104398f, -0.087365f, 0.051984f, -0.080998f, -0.026236f, 0.040116f, -0.065431f, 0.005231f, 0.048641f, -0.024630f, -0.005000f, -0.004542f, 0.062444f, 0.094564f, 0.055212f, -0.031319f, -0.012322f, -0.014357f, 0.006703f, 0.030616f, -0.011748f, -0.018382f, 0.019061f, 0.010055f, -0.170016f, -0.006536f, -0.005568f, 0.025190f, 0.021978f, 0.001441f, 0.001036f, 0.048899f, -0.052987f, -0.013503f, -0.004471f, 0.037325f, -0.136318f, -0.018926f, 0.124672f, -0.031468f, -0.049201f, -0.000174f, 0.094544f, -0.016992f, - -0.021660f, 0.025802f, -0.036131f, -0.038389f, 0.058708f, 0.089942f, -0.031709f, -0.045344f, 0.016245f, 0.027128f, -0.013434f, -0.047832f, -0.000237f, 0.007191f, -0.008994f, -0.006786f, -0.014250f, -0.020724f, 0.010621f, 0.000877f, -0.018444f, -0.003281f, 0.000045f, -0.000523f, -0.016929f, 0.010379f, -0.022929f, -0.024984f, -0.013929f, -0.015214f, 0.024081f, -0.003247f, -0.004114f, -0.000409f, -0.012479f, 0.019361f, -0.024367f, 0.007376f, 0.001525f, 0.001912f, 0.018270f, -0.000736f, -0.029421f, 0.003545f, -0.007166f, 0.005738f, 0.004964f, -0.027174f, 0.043702f, -0.011262f, -0.003214f, -0.004107f, 0.004788f, 0.010860f, -0.000137f, -0.010044f, -0.004687f, -0.021555f, -0.040341f, -0.123822f, -0.101486f, 0.090954f, 0.077741f, 0.008194f, 0.082977f, -0.088427f, -0.004204f, -0.171598f, -0.060300f, -0.029653f, 0.084541f, 0.076969f, 0.047614f, -0.068568f, -0.022904f, -0.002181f, -0.032123f, 0.017245f, 0.031223f, 0.040104f, 0.053415f, -0.039123f, 0.030387f, -0.073803f, -0.046213f, -0.010986f, -0.014854f, 0.002811f, 0.050435f, -0.058112f, 0.051930f, -0.021959f, -0.031700f, -0.012218f, 0.005846f, -0.073186f, - -0.000568f, -0.066191f, -0.023934f, -0.025230f, -0.062588f, 0.088326f, 0.041294f, 0.020658f, 0.022502f, -0.016168f, -0.088185f, -0.131553f, -0.076221f, -0.077061f, 0.053934f, 0.013380f, 0.058051f, 0.080146f, 0.066558f, -0.020684f, 0.016835f, -0.044961f, -0.033967f, -0.041017f, 0.033898f, -0.043524f, -0.000964f, -0.041514f, -0.042528f, -0.026763f, 0.052706f, -0.040804f, -0.010530f, 0.004881f, -0.004754f, -0.059180f, -0.063275f, -0.038395f, -0.021925f, -0.086171f, -0.050502f, 0.013799f, 0.053476f, 0.055240f, 0.070800f, -0.003907f, -0.055558f, -0.072883f, -0.055354f, 0.029451f, 0.010432f, -0.008516f, 0.035083f, 0.086384f, 0.023990f, 0.023464f, -0.020495f, -0.015722f, -0.027030f, -0.016691f, -0.007887f, -0.026801f, -0.005105f, 0.033065f, -0.005775f, -0.013905f, -0.025225f, -0.028896f, -0.031886f, -0.009400f, 0.017386f, -0.008448f, 0.008168f, 0.004409f, -0.058417f, 0.006841f, -0.027189f, 0.025341f, 0.049238f, -0.023823f, 0.034409f, -0.003900f, 0.009359f, 0.001416f, -0.045936f, -0.007245f, -0.014102f, -0.012024f, 0.007974f, -0.000688f, -0.003965f, -0.009921f, -0.020183f, -0.027813f, 0.042273f, -0.028218f, - -0.187015f, -0.253146f, -0.239310f, -0.227573f, -0.272785f, -0.046196f, -0.076033f, 0.047586f, 0.076103f, 0.242885f, 0.155596f, 0.205833f, 0.283671f, 0.312246f, 0.212703f, 0.271205f, 0.153807f, 0.071526f, -0.011798f, -0.051618f, -0.070292f, -0.115326f, -0.113611f, -0.156205f, -0.066798f, -0.057791f, -0.147445f, -0.109860f, -0.105724f, -0.119577f, -0.194794f, -0.132450f, -0.102643f, -0.082047f, -0.150181f, -0.021219f, -0.045736f, -0.062416f, -0.145494f, -0.133769f, -0.111063f, -0.094387f, -0.069386f, -0.028117f, -0.092935f, 0.026246f, 0.046504f, -0.072175f, 0.079434f, 0.111667f, 0.106386f, 0.194957f, 0.157450f, 0.121970f, 0.133290f, 0.135112f, 0.133066f, 0.205100f, 0.229766f, 0.226851f, 0.154111f, 0.244705f, 0.240506f, 0.251776f, 0.254861f, 0.290766f, 0.256888f, 0.272570f, 0.360458f, 0.184517f, 0.185045f, 0.188886f, 0.174688f, -0.008289f, 0.079087f, 0.101231f, -0.059296f, -0.031169f, -0.101244f, -0.183118f, -0.167202f, -0.174984f, -0.316849f, -0.231406f, -0.142231f, -0.246532f, -0.262550f, -0.215403f, -0.231114f, -0.227239f, -0.274540f, -0.250088f, -0.254167f, -0.236302f, -0.222186f, -0.201027f, - -0.187816f, -0.186292f, -0.156519f, -0.130305f, -0.208167f, -0.031123f, -0.094404f, -0.106329f, -0.025544f, -0.012703f, -0.106093f, -0.012669f, -0.041882f, -0.014366f, 0.037081f, 0.046991f, 0.119951f, 0.072848f, 0.100043f, 0.113465f, 0.121069f, 0.112156f, 0.153805f, 0.152498f, 0.159823f, 0.151592f, 0.179139f, 0.186620f, 0.180636f, 0.148480f, 0.188972f, 0.201368f, 0.153850f, 0.106077f, 0.099985f, 0.062970f, 0.051903f, 0.016155f, -0.007736f, -0.004245f, -0.034175f, -0.027731f, -0.023780f, -0.011008f, -0.030327f, -0.029224f, -0.030186f, -0.011138f, -0.030041f, -0.034601f, -0.022386f, -0.004347f, -0.025947f, -0.031706f, -0.028054f, -0.019646f, -0.039022f, -0.044231f, -0.046952f, -0.029867f, -0.028428f, -0.032507f, -0.029726f, -0.003004f, -0.007689f, -0.017746f, -0.012273f, 0.001337f, -0.006065f, -0.010560f, -0.010266f, 0.001583f, -0.006436f, -0.011659f, -0.013764f, -0.005439f, -0.008583f, -0.002775f, -0.005258f, -0.006961f, -0.011002f, 0.001979f, 0.005593f, 0.004462f, -0.001088f, 0.003215f, 0.001288f, 0.005132f, 0.002958f, 0.007608f, 0.006671f, 0.008079f, -0.002742f, -0.002499f, -0.004097f, -0.001921f, - -0.009932f, -0.010104f, -0.010686f, -0.010928f, -0.017534f, -0.012837f, -0.012586f, -0.008783f, -0.015198f, -0.014622f, -0.014858f, -0.009158f, -0.011390f, -0.012909f, -0.009353f, -0.001163f, -0.001988f, -0.003185f, 0.001346f, 0.007897f, 0.005835f, 0.005788f, 0.005684f, 0.009736f, 0.010895f, 0.011272f, 0.009293f, 0.011811f, 0.012279f, 0.011303f, 0.010902f, 0.011428f, 0.010811f, 0.009050f, 0.006884f, 0.006749f, 0.005292f, 0.004182f, 0.002212f, 0.001881f, 0.001094f, 0.000807f, 0.000156f, 0.000102f, -0.000032f, -0.000148f}, - {-0.011664f, 0.014943f, -0.001061f, 0.006070f, 0.003095f, 0.007134f, -0.012526f, -0.006724f, 0.008174f, 0.004000f, 0.000165f, -0.006926f, 0.001513f, -0.019477f, -0.012518f, -0.000597f, -0.007432f, -0.008408f, 0.003561f, 0.015371f, 0.002639f, 0.011725f, -0.002623f, 0.011589f, -0.006797f, -0.006047f, -0.000694f, -0.010299f, 0.002133f, 0.005247f, -0.003683f, -0.000167f, 0.002766f, 0.000574f, 0.004755f, -0.000472f, -0.011045f, 0.004061f, -0.006821f, -0.005109f, 0.003186f, -0.006761f, -0.010304f, 0.010402f, -0.010816f, 0.009903f, 0.009231f, 0.006120f, -0.000434f, -0.012684f, -0.007372f, 0.001518f, -0.002356f, 0.016510f, -0.010006f, 0.004077f, -0.001248f, 0.002252f, -0.012386f, -0.020684f, -0.003617f, -0.006155f, -0.006884f, -0.001557f, 0.008817f, -0.001827f, -0.009320f, 0.008290f, 0.003530f, -0.004087f, 0.006900f, -0.001264f, 0.002096f, -0.009481f, -0.000751f, -0.002311f, -0.000121f, 0.003735f, -0.004344f, 0.003040f, -0.008712f, 0.005976f, -0.001343f, 0.000700f, -0.003170f, -0.002819f, 0.000055f, 0.003658f, 0.001329f, -0.000052f, 0.001393f, 0.000008f, -0.005251f, 0.001594f, 0.000437f, 0.003382f, - -0.000526f, 0.000187f, -0.000009f, 0.000150f, -0.000332f, -0.001814f, 0.008062f, 0.008043f, 0.001213f, 0.014434f, -0.000078f, 0.006285f, 0.007792f, -0.000002f, -0.006919f, 0.000825f, -0.009866f, -0.012647f, -0.004756f, -0.014424f, -0.014906f, -0.004786f, 0.009928f, -0.003426f, -0.003337f, -0.007707f, -0.001900f, -0.013547f, 0.006742f, -0.003725f, 0.003441f, 0.008288f, 0.002849f, -0.002774f, 0.005700f, 0.005440f, -0.006591f, 0.004728f, 0.000682f, 0.001339f, 0.005058f, -0.011798f, -0.005071f, 0.008536f, -0.005341f, -0.000288f, -0.003375f, 0.009464f, -0.011929f, -0.000889f, -0.009983f, 0.006621f, -0.000538f, -0.000627f, 0.009131f, -0.003810f, -0.004303f, -0.003023f, -0.008425f, 0.000721f, -0.003787f, -0.000558f, 0.000614f, 0.005888f, 0.005916f, 0.002093f, -0.002555f, -0.009891f, -0.016327f, -0.004957f, -0.001091f, -0.003925f, 0.008847f, -0.003428f, -0.005004f, 0.007151f, -0.004483f, -0.006899f, 0.015583f, -0.003251f, -0.008653f, -0.000653f, 0.001465f, -0.002476f, 0.007702f, -0.000863f, -0.006817f, 0.000233f, 0.000335f, -0.001344f, -0.002032f, 0.006232f, 0.001407f, 0.000997f, -0.003608f, 0.000897f, - -0.001081f, 0.000553f, 0.002403f, -0.000392f, 0.001372f, 0.002972f, 0.000379f, -0.000429f, -0.000589f, 0.001345f, -0.003437f, -0.001144f, -0.000675f, -0.001445f, 0.001452f, 0.001342f, -0.000554f, 0.016551f, -0.010683f, -0.005090f, -0.007755f, 0.006085f, 0.001104f, -0.000843f, 0.011917f, 0.002790f, 0.003430f, -0.017504f, 0.003123f, -0.008215f, -0.009532f, -0.012372f, -0.000285f, 0.000349f, 0.014494f, -0.012007f, 0.005433f, -0.005091f, 0.017944f, -0.006595f, -0.006051f, 0.012729f, -0.004982f, 0.004330f, 0.001859f, -0.000948f, 0.002044f, -0.008697f, 0.001324f, 0.000307f, 0.003564f, 0.016842f, 0.005833f, 0.001482f, -0.007305f, 0.005827f, -0.013235f, -0.003755f, -0.002589f, 0.007108f, 0.006097f, 0.010132f, 0.006648f, -0.007779f, -0.011353f, -0.005031f, 0.008562f, -0.001165f, 0.004416f, -0.001922f, -0.001306f, 0.017114f, 0.004004f, -0.001416f, -0.020615f, -0.009280f, 0.000479f, 0.007040f, 0.010946f, 0.015366f, 0.008617f, -0.003851f, 0.002724f, -0.003907f, -0.005309f, 0.010990f, -0.007046f, 0.011317f, 0.000475f, -0.010442f, 0.003677f, -0.005440f, 0.008881f, -0.007783f, -0.000919f, 0.007636f, - 0.008863f, -0.009052f, -0.003464f, -0.001807f, -0.003696f, 0.005237f, -0.001237f, -0.003946f, 0.002438f, 0.001164f, 0.001327f, 0.001374f, 0.002125f, 0.001036f, 0.001259f, 0.000439f, -0.000672f, -0.000914f, -0.003333f, 0.005004f, -0.000225f, 0.000169f, 0.000565f, -0.000063f, 0.000796f, 0.002602f, 0.002650f, -0.000268f, -0.000720f, 0.003275f, 0.002590f, -0.000356f, 0.002163f, 0.008807f, -0.002012f, -0.001387f, -0.003142f, -0.010143f, 0.000478f, 0.007413f, 0.007393f, 0.013750f, 0.006352f, -0.017888f, -0.014918f, -0.012948f, 0.000624f, -0.002136f, 0.001039f, -0.007023f, -0.004320f, -0.001036f, 0.005540f, -0.000007f, -0.011418f, 0.012499f, -0.001687f, -0.011488f, 0.002456f, 0.002792f, -0.000145f, -0.001047f, 0.005091f, 0.006645f, -0.004027f, 0.010123f, 0.000594f, 0.005954f, -0.013628f, 0.009821f, 0.003569f, 0.005686f, -0.009348f, -0.000982f, 0.007004f, 0.005964f, 0.015087f, -0.000507f, -0.020597f, -0.005609f, -0.009813f, 0.004901f, 0.003455f, -0.000808f, -0.005423f, 0.001629f, -0.008384f, -0.002961f, -0.015351f, -0.009052f, -0.000415f, 0.008651f, 0.009712f, -0.006892f, -0.005829f, -0.006036f, - 0.009981f, -0.003331f, -0.001106f, -0.014805f, 0.009056f, -0.014613f, -0.004976f, -0.000602f, -0.002985f, -0.003947f, 0.015698f, -0.001296f, -0.003508f, -0.004142f, 0.003208f, -0.009366f, 0.001199f, -0.016264f, -0.012976f, 0.004797f, -0.004451f, -0.002410f, 0.005942f, -0.002928f, 0.007889f, 0.001551f, 0.003691f, 0.005488f, -0.001337f, 0.002659f, 0.001910f, 0.001025f, -0.001021f, 0.002013f, 0.000936f, 0.000505f, -0.001082f, -0.001272f, 0.000450f, -0.004764f, 0.000043f, 0.003002f, 0.000851f, -0.000180f, 0.000703f, -0.002926f, -0.000811f, 0.001790f, 0.001109f, 0.004797f, 0.001400f, -0.000598f, -0.000618f, 0.004417f, -0.005142f, 0.007910f, -0.005892f, 0.000270f, 0.010813f, 0.019484f, 0.013552f, 0.003120f, -0.014795f, -0.011025f, 0.004292f, -0.002316f, -0.009399f, -0.002899f, -0.012181f, -0.005076f, 0.025230f, 0.003159f, -0.002412f, -0.004380f, 0.000263f, -0.005539f, -0.003773f, 0.017165f, -0.017281f, -0.001791f, 0.001976f, -0.003471f, 0.004643f, 0.010495f, -0.004452f, -0.005490f, 0.002826f, -0.006896f, -0.006763f, -0.016013f, -0.005796f, 0.004675f, -0.014350f, -0.002159f, 0.007478f, 0.011279f, - 0.004148f, -0.022595f, -0.006669f, 0.004890f, 0.011771f, -0.008686f, 0.020142f, -0.002026f, -0.009870f, -0.005341f, -0.004077f, -0.007569f, 0.011053f, -0.007795f, -0.001928f, -0.010387f, -0.008156f, -0.003621f, -0.008298f, 0.011747f, -0.003984f, -0.022636f, 0.008990f, 0.015701f, 0.000432f, 0.005872f, -0.027656f, 0.022070f, 0.000619f, -0.017969f, 0.002069f, -0.012034f, -0.002397f, 0.002248f, -0.013046f, -0.015249f, 0.010561f, 0.005154f, -0.013260f, -0.000603f, 0.000555f, -0.008022f, -0.000836f, -0.002762f, 0.002292f, -0.007080f, -0.003606f, -0.001142f, -0.003473f, -0.001551f, -0.005232f, 0.002112f, -0.000153f, 0.003126f, -0.005709f, 0.001721f, 0.003546f, 0.000248f, -0.003159f, 0.002499f, -0.003061f, 0.003440f, 0.002732f, -0.002168f, 0.002669f, -0.000124f, -0.001529f, -0.000466f, 0.001059f, 0.001535f, 0.000912f, 0.000880f, -0.020353f, 0.004938f, -0.014911f, 0.016526f, 0.004420f, -0.005884f, -0.011984f, -0.021193f, -0.009059f, -0.015259f, 0.005657f, 0.030365f, 0.005414f, -0.007489f, -0.000170f, -0.003795f, -0.004341f, -0.013212f, -0.008620f, -0.013610f, 0.004065f, -0.000713f, 0.003349f, -0.004541f, - 0.002601f, -0.014393f, -0.000725f, 0.003716f, -0.009735f, -0.003345f, 0.001548f, -0.005115f, 0.001728f, -0.004678f, 0.022475f, -0.026770f, -0.004553f, 0.002556f, 0.007573f, -0.002442f, -0.010869f, -0.016276f, -0.011529f, 0.009286f, -0.002105f, 0.010264f, -0.008178f, 0.026082f, 0.003637f, -0.004619f, 0.000013f, -0.014906f, -0.019269f, -0.009493f, 0.007670f, -0.016299f, -0.000749f, 0.019960f, -0.000286f, -0.008896f, -0.018331f, -0.031049f, 0.001562f, 0.016506f, -0.004210f, 0.018887f, -0.001422f, -0.005415f, -0.011359f, -0.009883f, 0.002051f, 0.007737f, -0.005680f, 0.027228f, 0.008353f, -0.008229f, 0.004373f, -0.010637f, 0.004294f, 0.005470f, -0.003454f, 0.006215f, 0.011111f, 0.005024f, 0.000733f, -0.006803f, -0.019501f, 0.001733f, -0.004260f, -0.001580f, -0.002793f, 0.001831f, 0.000638f, 0.000158f, -0.008511f, 0.001795f, -0.004797f, 0.002060f, -0.004727f, -0.001212f, -0.001090f, -0.000024f, -0.000255f, -0.000521f, -0.003353f, -0.002734f, -0.003695f, -0.005262f, -0.005890f, -0.002095f, 0.000481f, 0.002045f, -0.003018f, 0.000356f, 0.000345f, 0.001047f, -0.002267f, 0.002618f, -0.004097f, -0.000167f, - 0.017480f, -0.007908f, -0.020574f, -0.005738f, -0.015412f, -0.008086f, -0.006796f, 0.021466f, -0.005611f, -0.007383f, -0.009307f, 0.013754f, 0.012298f, 0.010894f, 0.030298f, 0.031813f, 0.014595f, 0.019730f, -0.007680f, -0.009312f, 0.013004f, 0.019473f, -0.008717f, 0.008499f, 0.005836f, -0.017125f, -0.016326f, 0.009406f, -0.002583f, -0.000311f, -0.016299f, -0.020515f, -0.005089f, -0.016644f, 0.018501f, 0.034928f, 0.006996f, 0.013734f, 0.003788f, -0.004201f, 0.012270f, -0.023998f, -0.006638f, 0.004901f, 0.013083f, -0.007948f, -0.019569f, 0.028142f, -0.000308f, -0.008728f, -0.007150f, 0.011515f, -0.003718f, 0.010262f, -0.007316f, 0.016142f, -0.001621f, -0.000474f, 0.019741f, 0.006172f, 0.008961f, 0.003551f, -0.003321f, 0.014903f, -0.023037f, -0.009168f, 0.008240f, 0.025719f, -0.015947f, -0.001857f, -0.003478f, -0.003661f, -0.011022f, -0.002395f, -0.005859f, -0.007410f, -0.001346f, 0.001709f, 0.006984f, -0.003047f, 0.020378f, 0.007518f, -0.012170f, -0.002877f, 0.001242f, 0.007884f, 0.002488f, -0.003595f, -0.007472f, -0.001567f, 0.004255f, -0.004608f, -0.004352f, -0.003523f, 0.003918f, 0.002649f, - 0.003861f, 0.002194f, -0.004138f, -0.001496f, -0.000210f, -0.003826f, -0.001002f, 0.003027f, 0.001521f, -0.000452f, -0.004617f, 0.005674f, -0.001122f, 0.003545f, -0.002736f, 0.001759f, -0.005322f, -0.000443f, -0.001091f, 0.000281f, -0.003676f, -0.001053f, 0.012619f, -0.012653f, -0.004987f, 0.011376f, -0.009100f, 0.004843f, 0.008549f, -0.017221f, -0.018349f, 0.005062f, 0.013857f, -0.004893f, 0.012641f, -0.009421f, -0.004208f, 0.024150f, -0.027651f, 0.016459f, -0.007945f, 0.000047f, 0.000644f, 0.029849f, -0.006767f, 0.005773f, 0.009446f, 0.016374f, 0.009578f, 0.014323f, -0.002497f, -0.002487f, 0.004641f, 0.002169f, 0.002324f, -0.014646f, 0.022426f, -0.030187f, -0.006693f, -0.008070f, 0.016690f, -0.003549f, 0.020359f, -0.001110f, 0.001850f, -0.035896f, -0.009879f, 0.021606f, 0.036952f, -0.000513f, -0.018449f, -0.015657f, 0.015138f, 0.012054f, 0.009131f, 0.008548f, -0.015819f, -0.007391f, -0.009183f, 0.004629f, 0.000610f, -0.009863f, 0.005644f, 0.004790f, -0.004574f, -0.005143f, -0.021612f, -0.005872f, -0.007961f, 0.030626f, 0.002775f, 0.005619f, 0.011637f, 0.000735f, -0.024169f, 0.001011f, - -0.014566f, 0.011853f, 0.028735f, -0.015450f, 0.008862f, -0.004586f, -0.014967f, 0.007024f, -0.012549f, -0.002365f, 0.005197f, 0.003670f, 0.006563f, 0.002578f, -0.001064f, -0.005677f, 0.006214f, 0.013283f, 0.002252f, 0.006476f, 0.011083f, 0.004730f, 0.012536f, -0.004002f, 0.011860f, 0.000381f, 0.000276f, 0.002370f, 0.001327f, 0.003192f, -0.000360f, -0.006053f, -0.003239f, 0.000029f, 0.003188f, 0.003121f, -0.002267f, 0.005525f, 0.005467f, -0.004817f, 0.007727f, 0.013254f, -0.022143f, -0.008372f, -0.008182f, 0.004504f, -0.001053f, 0.033549f, -0.003950f, 0.001408f, 0.021374f, -0.018608f, -0.013464f, -0.017429f, -0.018281f, -0.004244f, -0.000454f, 0.008564f, 0.035848f, -0.003016f, -0.020283f, 0.037137f, 0.000827f, 0.010567f, 0.025433f, 0.017635f, 0.023749f, -0.005911f, 0.018805f, -0.011759f, 0.024848f, 0.021786f, -0.005629f, 0.011471f, -0.009706f, -0.008959f, 0.009513f, 0.028442f, 0.012903f, 0.011394f, 0.004197f, -0.008750f, -0.015377f, -0.015610f, 0.002774f, 0.019634f, -0.011084f, -0.013334f, -0.016486f, -0.006089f, -0.032874f, -0.007512f, 0.006535f, -0.024056f, 0.011944f, 0.001973f, - -0.010895f, -0.028298f, -0.018892f, 0.000276f, -0.037671f, 0.012112f, 0.008569f, -0.000599f, 0.010736f, 0.007099f, -0.003509f, -0.019485f, -0.011765f, -0.001986f, -0.012315f, 0.011895f, -0.012915f, 0.031590f, -0.020931f, 0.001352f, 0.013947f, 0.001449f, -0.009262f, -0.035946f, 0.006482f, 0.017969f, 0.004470f, 0.001272f, 0.019800f, 0.011062f, -0.011074f, 0.000248f, -0.001135f, 0.001704f, -0.000628f, -0.006020f, -0.012574f, -0.003572f, -0.013600f, 0.001008f, 0.003616f, 0.001920f, -0.003396f, -0.006881f, -0.003129f, -0.004514f, 0.006152f, 0.002044f, 0.007996f, 0.005819f, 0.004665f, 0.001967f, -0.000478f, -0.002471f, -0.002254f, -0.005996f, 0.003042f, 0.000650f, 0.003030f, -0.002772f, -0.000249f, -0.004977f, 0.000499f, -0.003839f, 0.001779f, -0.046287f, 0.016180f, 0.021055f, 0.037086f, -0.000165f, -0.027641f, 0.007730f, 0.013238f, -0.028619f, -0.029755f, -0.018620f, -0.000785f, 0.015804f, -0.000870f, -0.011690f, -0.000657f, -0.010236f, -0.006901f, -0.018470f, 0.030703f, 0.023963f, 0.008998f, -0.037762f, -0.011342f, 0.006011f, -0.002188f, -0.008450f, 0.047693f, 0.017437f, 0.014961f, 0.013998f, - 0.022620f, 0.016949f, 0.004106f, 0.017748f, -0.001247f, -0.029683f, 0.016005f, -0.030533f, 0.009285f, -0.030229f, 0.025464f, -0.008030f, 0.030755f, -0.016847f, 0.007456f, -0.013636f, 0.011073f, 0.017956f, 0.046962f, 0.009883f, -0.059763f, -0.003214f, -0.008332f, 0.012780f, 0.026090f, -0.005334f, -0.011618f, 0.019137f, -0.003404f, -0.009469f, 0.025704f, 0.001582f, -0.001151f, 0.001257f, 0.011005f, 0.020523f, 0.016283f, -0.017727f, -0.013149f, -0.011201f, -0.017940f, 0.004158f, -0.001663f, 0.020290f, 0.014615f, -0.027488f, -0.006620f, -0.015570f, 0.013316f, -0.007604f, -0.007330f, 0.004759f, 0.000895f, -0.010617f, 0.009072f, 0.002169f, 0.001512f, -0.001604f, 0.005163f, 0.005299f, 0.000858f, -0.015576f, 0.004346f, 0.002673f, -0.001988f, -0.002780f, -0.005156f, 0.000160f, -0.006900f, 0.003167f, 0.007807f, -0.002409f, -0.002304f, 0.007613f, 0.001208f, -0.007168f, -0.005455f, -0.001321f, 0.003740f, -0.003143f, -0.000728f, -0.004422f, 0.001193f, -0.002968f, 0.000054f, 0.007318f, -0.004906f, 0.001156f, 0.050440f, -0.018983f, -0.033452f, -0.010587f, 0.013206f, -0.008204f, 0.024294f, 0.035096f, - -0.013978f, 0.032194f, 0.020763f, 0.016227f, -0.005200f, -0.003783f, -0.006364f, 0.031228f, 0.005802f, 0.003837f, -0.018021f, 0.007977f, -0.009364f, -0.000711f, -0.029831f, 0.020375f, -0.027363f, 0.000208f, -0.019266f, 0.032567f, -0.016485f, 0.000807f, 0.032216f, 0.024480f, 0.016616f, -0.001883f, -0.012617f, 0.014999f, -0.000342f, -0.002805f, -0.040860f, -0.012094f, -0.024627f, -0.020036f, -0.015568f, -0.007324f, 0.021447f, 0.013471f, 0.012565f, 0.000130f, 0.031505f, -0.016536f, 0.033332f, 0.029260f, 0.031451f, 0.054847f, -0.021030f, -0.016446f, 0.024226f, 0.004612f, -0.021104f, 0.033125f, -0.010724f, -0.015878f, 0.010873f, -0.004010f, -0.011310f, -0.009383f, 0.014345f, -0.019090f, 0.008844f, -0.011799f, 0.030505f, -0.012837f, 0.000628f, 0.008935f, 0.022286f, 0.030157f, 0.002563f, -0.026198f, -0.028391f, 0.009404f, -0.018864f, -0.061181f, -0.032089f, 0.009847f, -0.000539f, 0.017789f, 0.002417f, -0.009972f, -0.001011f, -0.005760f, 0.002755f, -0.010555f, -0.004523f, -0.007223f, -0.002916f, 0.000908f, -0.001169f, -0.019062f, -0.004873f, -0.012460f, -0.011104f, -0.008769f, 0.004043f, -0.000816f, - 0.000931f, -0.013859f, -0.009560f, -0.000452f, -0.000381f, 0.002790f, 0.007334f, 0.005973f, 0.004534f, -0.009950f, 0.000639f, 0.002361f, -0.012813f, 0.004642f, 0.000915f, 0.005716f, 0.002715f, 0.007272f, 0.004206f, -0.002862f, 0.006237f, -0.004572f, -0.003316f, -0.001353f, -0.046193f, -0.038929f, -0.001157f, 0.009099f, -0.026340f, 0.001963f, 0.003158f, 0.044409f, -0.027711f, -0.031814f, 0.011317f, -0.012969f, 0.000707f, -0.023043f, 0.023433f, -0.023424f, -0.031638f, -0.018845f, 0.038202f, -0.024785f, -0.020107f, -0.004054f, 0.015962f, -0.010444f, -0.026097f, 0.009085f, -0.010117f, 0.000910f, 0.012982f, -0.034674f, -0.001910f, 0.020372f, 0.032291f, -0.004040f, 0.048957f, 0.021882f, -0.004732f, 0.002893f, 0.022680f, -0.008276f, -0.018836f, 0.004469f, 0.026871f, 0.003660f, 0.013297f, 0.001337f, -0.020616f, 0.008141f, -0.046171f, 0.005023f, 0.003315f, -0.005228f, -0.026880f, -0.024345f, 0.003813f, -0.010696f, -0.018215f, -0.011962f, -0.014514f, 0.018718f, -0.030146f, -0.016892f, -0.008146f, 0.014205f, -0.017420f, 0.038661f, -0.004938f, -0.031105f, -0.001991f, -0.018212f, -0.049773f, -0.014362f, - 0.004115f, -0.000782f, -0.032065f, -0.016776f, -0.006725f, 0.008242f, -0.018743f, -0.008928f, 0.033168f, -0.010766f, -0.043442f, -0.014796f, 0.006497f, 0.004147f, 0.015305f, 0.013055f, 0.009944f, -0.009508f, -0.012071f, -0.002295f, -0.008199f, 0.007222f, 0.002722f, -0.004900f, 0.010242f, 0.004716f, 0.006343f, -0.003049f, 0.005339f, 0.004192f, 0.000755f, -0.001107f, -0.002491f, -0.003327f, 0.000865f, 0.003345f, -0.014932f, 0.004151f, -0.008257f, 0.010887f, 0.004529f, -0.010841f, -0.009506f, -0.000111f, -0.007358f, -0.000404f, 0.004112f, -0.002156f, -0.004707f, -0.007831f, -0.005758f, 0.005341f, 0.002482f, -0.008970f, 0.004450f, 0.001816f, -0.005696f, -0.004730f, -0.010370f, 0.035342f, 0.031543f, 0.009090f, 0.065104f, -0.012711f, -0.023396f, -0.021064f, -0.010090f, -0.035879f, 0.047278f, -0.029151f, -0.010897f, -0.023725f, -0.012401f, -0.011457f, 0.005195f, -0.034183f, 0.000095f, -0.000196f, -0.005056f, 0.008961f, -0.035939f, -0.009624f, 0.023967f, -0.024799f, 0.000935f, -0.031921f, 0.029664f, -0.000440f, -0.053758f, -0.028325f, -0.010035f, -0.001779f, 0.014485f, -0.033062f, -0.018530f, 0.021614f, - -0.004149f, 0.014721f, 0.013813f, 0.013297f, -0.019779f, 0.001501f, 0.023298f, 0.008053f, -0.044373f, 0.027727f, 0.020217f, -0.024507f, 0.067393f, -0.001893f, -0.048856f, 0.012777f, 0.015080f, -0.001752f, 0.035861f, -0.011749f, -0.060599f, 0.016342f, 0.008414f, 0.017402f, 0.021190f, -0.028273f, 0.043444f, 0.015747f, 0.013368f, -0.011072f, 0.065924f, -0.005770f, 0.000948f, 0.044427f, -0.007893f, 0.019879f, 0.035549f, 0.011532f, 0.005166f, -0.009295f, 0.017016f, 0.000015f, 0.030060f, -0.014002f, 0.029267f, 0.026232f, 0.001522f, 0.025939f, 0.015863f, 0.020508f, -0.010937f, -0.000824f, 0.024309f, 0.016825f, 0.013027f, 0.007084f, 0.008280f, -0.016894f, -0.001948f, -0.000007f, -0.007571f, 0.000218f, -0.002768f, -0.007709f, 0.014114f, -0.015338f, -0.002768f, -0.015074f, 0.012321f, -0.006901f, 0.014779f, -0.013429f, 0.002079f, -0.009622f, -0.012400f, 0.007779f, -0.004697f, -0.001192f, -0.012075f, -0.018911f, -0.013300f, 0.013045f, 0.001425f, -0.006655f, 0.001576f, 0.016430f, 0.012715f, -0.006193f, 0.006245f, -0.000720f, -0.004719f, 0.016976f, 0.000809f, 0.010770f, 0.013185f, -0.046839f, - -0.045962f, 0.094169f, 0.030364f, -0.058906f, -0.029621f, -0.027055f, -0.053916f, -0.004071f, -0.028462f, 0.039173f, -0.022202f, 0.000117f, 0.048936f, 0.000971f, 0.008123f, -0.036134f, 0.045126f, 0.033544f, -0.000591f, -0.010984f, -0.003520f, -0.028126f, 0.002132f, 0.003454f, 0.005732f, -0.038622f, -0.005596f, -0.002345f, -0.011577f, -0.008697f, -0.026527f, 0.025024f, 0.049846f, 0.059718f, -0.004846f, -0.024379f, -0.010081f, -0.012538f, -0.008350f, -0.036878f, 0.012540f, 0.014204f, 0.013223f, -0.038434f, -0.051044f, 0.055072f, 0.020916f, 0.030769f, 0.040181f, 0.037453f, -0.016242f, -0.025894f, 0.036375f, -0.037121f, 0.018820f, -0.027832f, -0.021131f, -0.012521f, 0.043282f, -0.014512f, 0.008870f, 0.014654f, -0.007778f, -0.035133f, 0.072331f, -0.043876f, 0.004591f, 0.052115f, -0.047252f, -0.021641f, 0.005687f, 0.018929f, 0.053912f, 0.009428f, -0.031071f, 0.000680f, 0.006690f, -0.007524f, -0.012962f, 0.007527f, -0.021706f, 0.016526f, -0.017938f, -0.025621f, 0.013857f, 0.007479f, 0.019523f, 0.008487f, -0.000540f, -0.009042f, 0.002360f, 0.005190f, 0.006155f, 0.020478f, -0.001008f, 0.002631f, - 0.013062f, -0.030898f, 0.004612f, -0.014057f, 0.003577f, 0.003173f, -0.004735f, -0.011857f, -0.014158f, -0.003772f, -0.014201f, 0.005404f, 0.008081f, 0.017451f, -0.001310f, -0.012127f, 0.011558f, 0.013455f, 0.008625f, 0.008114f, -0.021783f, 0.000487f, 0.005854f, -0.005762f, 0.019288f, -0.007419f, 0.001744f, 0.001719f, 0.017860f, -0.008673f, 0.005588f, 0.024426f, 0.024537f, -0.015650f, 0.015403f, 0.062816f, 0.037873f, -0.005636f, -0.040171f, 0.004244f, 0.064417f, 0.051296f, 0.010835f, -0.050927f, -0.019590f, -0.043963f, -0.003243f, 0.034468f, 0.042576f, -0.003086f, 0.016210f, 0.050591f, 0.053847f, 0.083523f, 0.084085f, -0.041928f, 0.018332f, -0.045278f, -0.008150f, -0.036698f, -0.013151f, 0.029002f, -0.006436f, 0.012719f, 0.011437f, -0.026064f, -0.019070f, 0.021355f, 0.023818f, 0.030875f, 0.021971f, -0.001000f, 0.022651f, 0.034077f, -0.017960f, 0.017281f, 0.020133f, 0.006024f, 0.019665f, 0.065163f, -0.048872f, -0.042081f, -0.009421f, 0.040286f, 0.038623f, -0.022856f, -0.000224f, 0.061867f, 0.050064f, -0.034972f, -0.023289f, 0.021300f, -0.042703f, 0.011959f, -0.020508f, -0.038743f, - 0.012620f, -0.045530f, 0.047451f, 0.017468f, 0.052556f, -0.021968f, -0.030605f, -0.059207f, -0.012743f, 0.019438f, -0.051852f, -0.044361f, -0.024240f, 0.023289f, 0.013837f, 0.011003f, -0.022784f, 0.010013f, -0.016277f, 0.006387f, 0.048354f, -0.020450f, 0.005766f, -0.027280f, 0.020823f, -0.011192f, -0.022884f, 0.016324f, 0.022632f, -0.012433f, -0.006370f, -0.007320f, 0.016289f, 0.036094f, -0.011414f, -0.024089f, 0.000644f, -0.000334f, -0.008844f, -0.003733f, -0.033420f, 0.004764f, -0.017698f, -0.007871f, 0.012279f, -0.010831f, -0.005836f, -0.000871f, -0.009165f, 0.014909f, -0.014598f, -0.023117f, -0.020921f, -0.017622f, 0.019015f, 0.010067f, -0.004169f, 0.008488f, 0.005777f, -0.014915f, -0.016277f, 0.006269f, -0.017360f, -0.001856f, -0.030175f, 0.023950f, 0.062296f, -0.004878f, -0.020339f, 0.039710f, 0.007527f, -0.003137f, -0.060882f, 0.051969f, -0.026851f, -0.057887f, -0.020196f, 0.003064f, 0.065004f, 0.005505f, 0.046357f, 0.018320f, -0.056644f, -0.012941f, -0.050273f, 0.007144f, -0.050112f, -0.036261f, -0.021969f, 0.001683f, 0.009575f, -0.039023f, 0.036719f, -0.012906f, 0.022003f, 0.023706f, - 0.023463f, 0.044709f, 0.082225f, 0.047913f, -0.016633f, -0.041639f, -0.002218f, 0.086610f, 0.053669f, -0.030567f, 0.042729f, -0.017570f, 0.052369f, -0.027211f, 0.004375f, -0.020573f, -0.010595f, -0.003781f, -0.015722f, 0.130571f, -0.025776f, -0.037066f, -0.042701f, -0.059753f, -0.023463f, -0.046238f, -0.002808f, 0.049967f, -0.021003f, 0.014191f, -0.017686f, -0.026716f, 0.045407f, -0.013654f, 0.077030f, 0.013611f, 0.061461f, -0.076835f, 0.030541f, 0.132754f, 0.047830f, -0.075298f, 0.043579f, 0.039809f, 0.001681f, 0.007816f, -0.023597f, 0.024643f, 0.116483f, 0.061551f, 0.025552f, 0.034764f, -0.037435f, 0.067065f, -0.007857f, 0.009638f, 0.010012f, 0.015964f, 0.007116f, 0.043848f, -0.037632f, -0.009991f, 0.002462f, 0.056122f, -0.010353f, 0.013177f, 0.065161f, -0.005962f, -0.037421f, -0.009251f, 0.023491f, 0.003232f, -0.016255f, -0.037941f, 0.020884f, 0.014749f, -0.026341f, -0.015797f, 0.016999f, -0.032207f, -0.026906f, 0.007754f, 0.012348f, -0.000856f, 0.008351f, 0.005438f, 0.009888f, -0.012266f, 0.010374f, -0.007755f, -0.010137f, 0.009531f, 0.003650f, 0.013473f, 0.002366f, 0.091431f, - 0.042763f, 0.010271f, -0.002735f, -0.099633f, 0.046589f, 0.062696f, -0.045015f, -0.032778f, 0.077486f, 0.050511f, -0.061838f, -0.065726f, 0.002413f, -0.038405f, 0.016829f, 0.006404f, 0.016072f, -0.061789f, 0.016262f, -0.011991f, -0.030687f, 0.054957f, -0.003714f, -0.009127f, 0.018582f, 0.046080f, 0.041511f, 0.028334f, -0.052784f, 0.001163f, -0.025693f, -0.056385f, 0.020673f, 0.015965f, 0.034864f, -0.011916f, -0.026169f, 0.072154f, -0.051675f, 0.022868f, 0.025197f, 0.020380f, 0.015626f, -0.008976f, 0.042784f, -0.039568f, -0.068181f, -0.011491f, -0.078117f, 0.068676f, 0.042351f, 0.067387f, -0.005308f, 0.013243f, -0.054284f, 0.056581f, 0.071530f, 0.025578f, -0.030215f, -0.080044f, -0.018260f, -0.105590f, 0.001698f, -0.019706f, -0.071444f, -0.060796f, 0.027951f, 0.004383f, 0.044184f, -0.034130f, 0.050631f, 0.042407f, -0.059746f, 0.012615f, -0.035628f, -0.010205f, -0.053956f, 0.006794f, 0.157700f, 0.039209f, 0.046385f, 0.057622f, 0.025917f, -0.044820f, -0.005975f, -0.000750f, 0.037556f, -0.008702f, 0.038592f, -0.017534f, -0.023494f, 0.000798f, -0.002489f, -0.044313f, 0.038178f, -0.007175f, - -0.010630f, -0.013862f, -0.030739f, 0.004279f, -0.014395f, -0.019941f, -0.028536f, -0.022820f, 0.014269f, -0.016542f, 0.013989f, 0.015469f, -0.010767f, -0.018628f, -0.024569f, 0.011157f, -0.004200f, 0.010365f, 0.038307f, 0.023450f, -0.000111f, -0.003394f, 0.012513f, 0.023505f, -0.023137f, 0.020693f, -0.023316f, -0.018026f, -0.012110f, -0.064241f, 0.026313f, 0.019768f, -0.030948f, 0.009125f, -0.016602f, -0.095954f, -0.026402f, 0.022210f, -0.012371f, 0.009238f, -0.054104f, 0.067662f, -0.091986f, 0.005979f, -0.067753f, 0.044960f, 0.049486f, 0.015452f, 0.041184f, 0.003585f, -0.045153f, 0.073548f, -0.036252f, 0.006754f, -0.000245f, -0.044066f, 0.069453f, 0.003833f, 0.016977f, 0.014441f, 0.020714f, 0.010720f, 0.051690f, 0.061524f, 0.019738f, 0.072069f, -0.064914f, -0.005923f, -0.001340f, 0.092449f, -0.019236f, 0.073508f, 0.040259f, 0.101400f, 0.018807f, -0.024242f, -0.033999f, 0.039692f, -0.077911f, 0.071269f, -0.044926f, -0.026773f, -0.013442f, 0.013583f, 0.053464f, -0.013816f, -0.100603f, -0.028591f, 0.159557f, 0.010925f, -0.102572f, 0.024035f, -0.068361f, 0.018950f, 0.157195f, -0.044590f, - -0.044660f, 0.109013f, -0.119963f, 0.058963f, 0.025970f, 0.034874f, 0.101947f, 0.064276f, -0.093007f, 0.111963f, 0.073186f, 0.002432f, 0.119233f, -0.050477f, -0.017680f, 0.086226f, 0.056392f, 0.009470f, 0.022354f, -0.001058f, -0.002217f, 0.009595f, 0.028917f, -0.027984f, 0.030631f, 0.031532f, -0.028002f, 0.013146f, 0.021060f, -0.039646f, -0.004515f, 0.013561f, -0.004528f, 0.006446f, 0.048250f, -0.000101f, 0.031867f, -0.018193f, -0.000391f, 0.022854f, -0.015712f, -0.013281f, -0.033061f, 0.004643f, 0.028670f, 0.018789f, 0.026974f, -0.052739f, 0.028282f, 0.033016f, 0.014687f, 0.005068f, 0.013378f, -0.003245f, 0.030220f, 0.054245f, 0.012908f, 0.025732f, 0.024646f, -0.013588f, -0.014983f, 0.025387f, -0.033225f, 0.012169f, 0.039174f, 0.053569f, 0.103057f, 0.050781f, -0.050761f, 0.065478f, 0.019051f, 0.058952f, -0.018138f, -0.112112f, 0.112076f, 0.096962f, 0.059439f, 0.184000f, -0.018051f, -0.156433f, -0.081061f, -0.074440f, 0.163435f, 0.119521f, 0.028464f, -0.011617f, -0.030698f, -0.109787f, -0.052250f, -0.036399f, -0.063047f, 0.165840f, 0.134928f, 0.187185f, 0.002902f, -0.216829f, - -0.336277f, -0.164995f, 0.186496f, 0.251114f, 0.257229f, 0.102599f, -0.214152f, -0.393858f, -0.241182f, -0.122809f, 0.180661f, 0.306592f, 0.174464f, 0.093763f, 0.025054f, -0.140248f, -0.187021f, -0.141045f, -0.010869f, 0.106920f, 0.219235f, 0.261073f, 0.046391f, 0.049951f, -0.208552f, -0.346649f, -0.184314f, 0.170673f, 0.288653f, 0.272402f, 0.170824f, -0.101852f, -0.335967f, -0.218886f, -0.281724f, -0.000366f, 0.191078f, 0.205166f, 0.103507f, -0.083423f, -0.176849f, -0.158175f, -0.123906f, 0.035273f, 0.117776f, 0.081390f, 0.238283f, 0.084672f, -0.053248f, -0.142222f, -0.052205f, 0.157404f, 0.232048f, 0.076953f, -0.008946f, -0.143259f, -0.028708f, -0.033224f, 0.091717f, 0.033421f, -0.023227f, -0.099345f, -0.029292f, 0.004249f, -0.015632f, -0.030641f, -0.006270f, 0.022065f, 0.049781f, 0.082719f, 0.040615f, -0.083676f, -0.073370f, -0.070006f, 0.016724f, 0.087196f, 0.098328f, 0.044373f, 0.010699f, -0.063769f, -0.026842f, -0.123923f, -0.108476f, -0.010398f, 0.032516f, 0.134168f, 0.203513f, 0.076314f, -0.070498f, -0.168396f, -0.208460f, -0.088459f, 0.164234f, 0.269745f, 0.186117f, 0.055701f, - -0.135395f, -0.222132f, -0.108023f, -0.001308f, 0.040816f, 0.039305f, 0.094788f, 0.047385f, 0.021453f, -0.056945f, -0.118908f, -0.090750f, 0.013207f, 0.059781f, 0.119345f, 0.055561f, 0.020595f, -0.022633f, -0.059490f, 0.070512f, 0.010855f, -0.100010f, 0.013833f, -0.025362f, -0.039634f, 0.031267f, -0.030156f, -0.011419f, -0.053094f, 0.004076f, -0.019708f, -0.039356f, 0.017101f, -0.003574f, 0.014489f, 0.007536f, 0.034514f, -0.031891f, -0.010079f, 0.011182f, 0.004689f, 0.016627f, -0.012999f, 0.034855f, -0.022769f, 0.024371f, 0.012103f, -0.009785f, -0.023964f, -0.009619f, -0.045815f, 0.052226f, -0.003529f, 0.002952f, -0.007772f, -0.010922f, 0.003927f, -0.000215f, 0.002446f, 0.021008f, 0.012898f, 0.000719f, 0.029761f, -0.023428f, 0.009976f, -0.022173f, 0.026871f, 0.017045f, -0.018295f, 0.014997f, -0.022585f, -0.025384f, -0.020500f, -0.039867f, -0.003359f, 0.032343f, -0.027150f, -0.054703f, -0.037340f, 0.004700f, 0.035234f, 0.002046f, 0.026520f, -0.051981f, -0.013019f, -0.004860f, -0.003889f, -0.050793f, -0.012136f, 0.003076f, 0.008509f, -0.017347f, 0.055205f, 0.023205f, -0.016775f, 0.051414f, - -0.004212f, -0.088291f, -0.003018f, -0.011726f, -0.007370f, 0.018598f, 0.012022f, 0.025137f, -0.027374f, 0.039837f, -0.065264f, 0.020336f, 0.012237f, -0.001456f, 0.000562f, -0.002965f, -0.003985f, 0.023407f, -0.003611f, 0.005230f, -0.009402f, 0.000350f, -0.018824f, 0.006266f, 0.000609f, 0.039802f, 0.000123f, 0.018391f, -0.017307f, 0.003507f, -0.008503f, -0.021352f, 0.007430f, 0.000807f, -0.010891f, 0.028825f, -0.004862f, -0.005717f, -0.010780f, 0.021540f, -0.007328f, -0.036664f, 0.008128f, -0.006107f, 0.012070f, -0.014784f, 0.001983f, -0.003260f, -0.023028f, 0.022930f, -0.020367f, 0.016260f, -0.019469f, 0.011910f, -0.001619f, -0.005868f, -0.011267f, -0.053700f, -0.088578f, -0.139600f, 0.005914f, 0.116588f, -0.043513f, -0.070350f, -0.075195f, -0.071066f, 0.015813f, 0.015631f, 0.134328f, -0.018590f, -0.018333f, -0.058679f, 0.007497f, 0.018785f, 0.042888f, -0.043944f, 0.023475f, -0.031774f, 0.053142f, 0.017366f, 0.017990f, 0.006984f, -0.031659f, -0.017014f, -0.020322f, -0.006325f, 0.019814f, -0.018944f, -0.016391f, 0.037539f, -0.032777f, -0.020352f, 0.031375f, -0.028361f, -0.009759f, -0.024260f, - -0.039727f, 0.014999f, 0.027578f, 0.005529f, 0.026043f, -0.037597f, -0.008811f, -0.000519f, 0.023088f, 0.028052f, 0.034938f, 0.002978f, -0.002630f, -0.056881f, -0.058125f, -0.021262f, -0.018213f, -0.012349f, 0.028062f, 0.037721f, 0.053408f, 0.006350f, -0.022997f, 0.053146f, -0.036622f, -0.016253f, 0.024365f, -0.015928f, 0.070024f, 0.004051f, -0.010540f, 0.012229f, -0.024261f, 0.020553f, 0.048819f, 0.039722f, -0.013180f, 0.015345f, -0.045504f, -0.029846f, -0.016265f, -0.010983f, 0.035468f, -0.003979f, 0.034657f, 0.009432f, -0.010109f, 0.004523f, 0.007020f, -0.039830f, 0.024963f, -0.029366f, 0.019529f, -0.013234f, -0.007427f, -0.001647f, 0.022969f, -0.020492f, 0.003593f, 0.004136f, 0.020186f, 0.034119f, -0.016169f, -0.004599f, -0.025815f, -0.010346f, 0.010222f, -0.010121f, 0.008323f, -0.007827f, -0.010009f, -0.018202f, -0.028286f, -0.015708f, 0.027615f, -0.010073f, 0.014081f, -0.018783f, -0.003506f, -0.001146f, -0.005139f, -0.016810f, -0.006806f, 0.002319f, -0.001069f, 0.000609f, 0.000963f, -0.025642f, -0.003339f, -0.005529f, -0.004474f, -0.000034f, -0.000618f, -0.000854f, 0.036651f, -0.090338f, - -0.211301f, -0.161442f, -0.018583f, 0.070019f, 0.182415f, 0.154051f, 0.147051f, 0.150207f, 0.099118f, 0.041821f, -0.054064f, -0.095887f, -0.183152f, -0.134896f, -0.132605f, -0.132155f, -0.082226f, 0.079890f, 0.107573f, 0.158134f, 0.121367f, 0.101749f, 0.033569f, 0.067906f, -0.015233f, -0.017463f, -0.021281f, -0.036997f, -0.069363f, -0.056739f, -0.116840f, -0.042463f, -0.092794f, -0.044116f, -0.021942f, 0.030495f, 0.006084f, 0.043591f, 0.010063f, 0.061010f, 0.044779f, 0.073783f, 0.097932f, 0.121772f, 0.077810f, 0.052394f, 0.086446f, 0.006795f, -0.029433f, -0.106671f, -0.125249f, -0.172153f, -0.153585f, -0.143450f, -0.055034f, -0.094107f, -0.049344f, 0.005910f, 0.025953f, 0.060958f, 0.116004f, 0.123809f, 0.138182f, 0.208939f, 0.117504f, 0.160112f, 0.110880f, 0.025432f, -0.017033f, -0.065410f, -0.167138f, -0.182574f, -0.174041f, -0.192870f, -0.141811f, -0.098711f, -0.079428f, -0.021554f, 0.040561f, 0.068296f, 0.086458f, 0.128941f, 0.136638f, 0.144193f, 0.135940f, 0.085007f, 0.059104f, 0.028347f, 0.002968f, -0.000157f, -0.041194f, -0.066949f, -0.097179f, -0.115194f, -0.122652f, -0.115701f, - -0.081611f, -0.036358f, -0.032980f, -0.012164f, 0.021573f, 0.058001f, 0.071777f, 0.136523f, 0.095891f, 0.076145f, 0.075634f, 0.027655f, -0.003369f, -0.019359f, -0.024401f, -0.025345f, -0.066338f, -0.059025f, -0.043170f, -0.044625f, -0.033161f, 0.004717f, 0.009966f, 0.013443f, -0.008312f, 0.022073f, 0.000262f, 0.026057f, 0.026099f, 0.009086f, -0.009565f, -0.000666f, 0.005252f, 0.004109f, 0.003645f, 0.012606f, 0.002155f, -0.005635f, -0.019762f, -0.003917f, 0.003695f, 0.000015f, 0.011181f, 0.009813f, -0.002745f, -0.001224f, -0.008950f, -0.005942f, -0.005260f, -0.002349f, -0.004557f, 0.003288f, -0.003248f, -0.001150f, -0.001771f, -0.003901f, -0.008110f, 0.000055f, -0.000865f, 0.005173f, 0.010098f, 0.008054f, 0.004739f, 0.007046f, 0.000345f, 0.000708f, 0.000617f, 0.001891f, -0.002106f, -0.001430f, -0.002733f, 0.000680f, -0.001073f, -0.003825f, -0.004646f, 0.000431f, 0.000304f, -0.000446f, -0.004153f, -0.004293f, -0.004500f, -0.004068f, -0.002445f, 0.002328f, 0.001982f, 0.003942f, 0.003922f, 0.003872f, 0.000242f, 0.002164f, 0.001531f, 0.002514f, 0.002054f, 0.004472f, 0.003396f, 0.003522f, - 0.000101f, -0.002501f, -0.004124f, -0.003256f, -0.004768f, -0.004085f, -0.004380f, -0.003502f, -0.004556f, -0.002864f, -0.001678f, 0.000023f, 0.000788f, 0.002323f, 0.003091f, 0.005097f, 0.005235f, 0.006333f, 0.004334f, 0.003177f, 0.001486f, 0.001011f, -0.001659f, -0.002961f, -0.004164f, -0.004426f, -0.004392f, -0.002630f, -0.002159f, -0.001154f, -0.000604f, 0.000310f, 0.000340f, 0.001083f, 0.001049f, 0.001233f, 0.001025f, 0.000998f, 0.000525f, 0.000464f, 0.000189f, 0.000169f, -0.000017f, -0.000070f, -0.000157f, -0.000163f} - }, - { - {-0.017344f, 0.013427f, 0.000658f, 0.006167f, 0.006116f, 0.017381f, 0.008171f, -0.006421f, -0.008115f, -0.011310f, 0.008097f, -0.009894f, -0.007204f, 0.001619f, 0.002482f, 0.001075f, 0.010188f, -0.003327f, 0.009521f, -0.002436f, 0.008545f, -0.008096f, 0.003740f, -0.003573f, -0.008671f, -0.000603f, -0.016529f, 0.002486f, 0.004037f, 0.007394f, -0.006048f, -0.000088f, 0.006426f, -0.004732f, 0.007220f, 0.006826f, -0.004111f, 0.004906f, -0.005503f, -0.002539f, -0.004076f, -0.005910f, -0.007548f, 0.006753f, 0.009932f, -0.007435f, 0.004394f, 0.008020f, 0.006453f, 0.009816f, 0.001206f, -0.001455f, 0.005680f, 0.004349f, -0.010387f, -0.000377f, 0.001171f, 0.000679f, 0.003261f, 0.006736f, 0.001477f, 0.002456f, -0.003626f, -0.002255f, 0.004722f, 0.006695f, 0.003689f, -0.003513f, -0.006221f, 0.006904f, -0.005620f, -0.001791f, 0.003817f, -0.001136f, -0.000287f, 0.002958f, 0.000658f, 0.000213f, 0.006200f, -0.006078f, 0.004608f, 0.002557f, 0.003008f, 0.005789f, -0.002359f, -0.000639f, -0.001989f, -0.000778f, 0.000195f, 0.002851f, -0.002283f, -0.000377f, -0.001592f, -0.000860f, 0.000049f, -0.000187f, - -0.000948f, -0.000605f, 0.000587f, 0.000870f, -0.000066f, -0.000330f, -0.000674f, 0.000128f, -0.000250f, 0.000135f, -0.000947f, -0.000162f, 0.000844f, -0.001949f, -0.000966f, 0.006887f, -0.003617f, 0.005053f, 0.000503f, -0.000402f, -0.013960f, 0.002269f, 0.011930f, -0.007286f, 0.004940f, -0.014821f, -0.015003f, -0.004924f, -0.012197f, -0.010635f, -0.001588f, 0.002231f, 0.008410f, 0.001365f, -0.004027f, 0.001930f, 0.005728f, -0.007354f, 0.010248f, -0.006902f, -0.007483f, 0.008701f, -0.004300f, 0.010020f, 0.012707f, 0.001792f, -0.009143f, 0.006441f, 0.004200f, 0.002603f, -0.004647f, -0.003342f, 0.005343f, 0.004488f, 0.000917f, -0.010312f, -0.002976f, -0.009522f, 0.008645f, -0.008590f, -0.005618f, 0.006396f, 0.000310f, 0.005557f, 0.001588f, 0.002158f, 0.009405f, 0.001631f, 0.010547f, -0.013546f, -0.006969f, -0.003099f, 0.006741f, 0.009565f, 0.010889f, 0.014852f, 0.001614f, -0.004175f, -0.001411f, -0.001943f, -0.000448f, -0.009580f, -0.004210f, -0.004142f, -0.001168f, 0.001532f, -0.007804f, -0.004576f, -0.001760f, -0.003277f, -0.006102f, 0.007382f, -0.007336f, -0.002454f, 0.004886f, -0.012522f, - 0.003800f, 0.006903f, 0.007602f, 0.004051f, 0.002203f, 0.004607f, -0.002234f, -0.004825f, -0.001232f, 0.001365f, -0.000527f, 0.001366f, 0.000237f, -0.001303f, 0.000093f, -0.001901f, -0.002302f, 0.002853f, 0.001255f, -0.000205f, -0.000026f, 0.000033f, 0.002119f, 0.001043f, -0.000836f, -0.000813f, -0.000874f, 0.000215f, 0.001563f, -0.001808f, -0.000323f, -0.000047f, -0.000355f, 0.001095f, -0.000061f, -0.000697f, 0.015884f, -0.011803f, -0.004439f, -0.002338f, 0.009760f, 0.008811f, -0.008924f, -0.000824f, -0.016552f, -0.003623f, 0.020031f, 0.007543f, -0.008083f, 0.014385f, 0.004679f, 0.005528f, 0.001451f, -0.004835f, -0.015799f, 0.002113f, -0.007126f, -0.004504f, -0.002903f, -0.009623f, -0.003423f, -0.007450f, 0.005176f, -0.003375f, -0.004376f, 0.009000f, -0.017004f, 0.015623f, -0.005528f, 0.002218f, -0.005339f, 0.004874f, -0.000654f, -0.001565f, -0.000441f, 0.006648f, 0.000308f, 0.004202f, -0.006092f, 0.011703f, -0.009126f, 0.013628f, 0.002881f, -0.001353f, -0.007655f, -0.008958f, 0.018506f, 0.003191f, -0.017393f, 0.017760f, 0.016719f, -0.009096f, -0.003356f, 0.005254f, -0.006881f, -0.001282f, - -0.004250f, 0.004200f, 0.010655f, -0.006501f, 0.002417f, -0.004870f, -0.004473f, 0.001746f, 0.014351f, -0.013188f, 0.007973f, -0.013593f, -0.010475f, -0.009819f, -0.001759f, 0.000263f, -0.000035f, 0.008217f, 0.012700f, 0.003315f, 0.003060f, 0.006209f, 0.005012f, 0.002777f, 0.003131f, 0.003719f, -0.001409f, 0.004005f, -0.001866f, -0.003952f, 0.006744f, -0.000351f, 0.000902f, -0.001241f, -0.002043f, -0.001190f, 0.000013f, 0.002853f, -0.000757f, 0.000631f, 0.000255f, -0.002561f, -0.000009f, 0.001399f, 0.001770f, -0.000220f, 0.001234f, 0.004173f, -0.006460f, 0.000368f, -0.012404f, 0.011230f, -0.017286f, 0.000351f, 0.017424f, -0.032505f, 0.022127f, 0.008662f, -0.008854f, 0.006760f, -0.000944f, 0.019243f, -0.002330f, -0.016461f, -0.011578f, 0.006276f, 0.007293f, 0.001886f, 0.000257f, 0.008015f, 0.002211f, 0.001080f, 0.010994f, 0.004329f, 0.002954f, 0.007839f, 0.005576f, 0.027566f, -0.007915f, 0.007134f, -0.000657f, -0.004847f, 0.006973f, 0.004216f, 0.002577f, 0.003261f, -0.004812f, -0.007983f, 0.000263f, -0.000285f, 0.000152f, 0.003757f, 0.008253f, -0.008942f, -0.009450f, 0.003703f, - -0.002448f, -0.003797f, -0.005754f, 0.011057f, -0.008373f, 0.016102f, 0.007457f, 0.000448f, 0.003607f, 0.001107f, 0.004241f, 0.020532f, 0.017246f, 0.001053f, 0.000754f, 0.003722f, -0.004418f, 0.007511f, -0.001947f, 0.006746f, 0.001934f, 0.000180f, -0.000218f, -0.009154f, 0.008273f, 0.006225f, -0.002124f, -0.005380f, 0.000483f, 0.007903f, 0.000581f, -0.002575f, 0.000249f, -0.006473f, 0.004269f, 0.001414f, 0.005501f, -0.001793f, 0.001482f, 0.002123f, 0.002175f, 0.001732f, 0.003222f, 0.001356f, 0.001322f, -0.007830f, -0.000644f, 0.002669f, 0.004036f, -0.002865f, 0.002550f, 0.002256f, 0.002062f, 0.002267f, 0.000889f, 0.001691f, 0.002274f, 0.002485f, 0.000245f, 0.000780f, 0.000606f, 0.000983f, 0.000211f, 0.000425f, 0.001534f, 0.000380f, -0.000518f, -0.001963f, 0.000860f, 0.002256f, -0.002098f, 0.004076f, -0.001933f, 0.008989f, 0.000181f, 0.010380f, -0.004013f, 0.009200f, -0.007013f, 0.019283f, -0.014801f, -0.005559f, -0.007074f, 0.019880f, 0.011259f, 0.007278f, 0.012632f, -0.011481f, -0.002327f, 0.018335f, 0.010421f, 0.008575f, 0.008916f, 0.004708f, 0.006124f, -0.002165f, - 0.017627f, -0.001894f, -0.008124f, -0.006099f, 0.006180f, -0.006718f, 0.004041f, -0.016746f, 0.006180f, -0.003269f, 0.000333f, -0.017993f, 0.007735f, -0.003922f, 0.016833f, -0.002825f, 0.005339f, 0.004532f, -0.007072f, -0.001848f, 0.007684f, 0.000966f, 0.005278f, -0.003885f, 0.009355f, 0.013132f, 0.001702f, -0.009326f, 0.003574f, 0.009200f, 0.006685f, 0.001128f, -0.006286f, -0.013111f, 0.010939f, -0.014589f, -0.006084f, 0.008008f, -0.019157f, -0.004512f, 0.011958f, -0.008988f, 0.002556f, 0.000046f, -0.001026f, -0.002690f, 0.004902f, -0.009700f, 0.000592f, -0.016116f, -0.008213f, -0.021983f, 0.001720f, -0.006264f, 0.000553f, -0.004370f, -0.000604f, -0.005697f, 0.005087f, 0.004646f, 0.002017f, -0.003599f, 0.004710f, -0.000672f, 0.001896f, -0.006450f, 0.001701f, 0.001136f, 0.002118f, 0.001223f, 0.004429f, -0.000718f, 0.004988f, -0.002304f, -0.000215f, 0.003223f, 0.004696f, 0.000543f, 0.002654f, -0.003122f, -0.000993f, -0.001012f, -0.001018f, -0.002300f, 0.001555f, 0.003387f, 0.001109f, 0.003580f, -0.003439f, -0.002342f, -0.001863f, -0.005163f, 0.000666f, -0.000929f, 0.002489f, -0.000890f, - -0.000831f, -0.005409f, 0.005515f, -0.035031f, 0.006451f, -0.010853f, -0.006205f, 0.008370f, 0.006396f, 0.004587f, 0.001797f, -0.025661f, -0.002500f, 0.008358f, -0.013706f, -0.003372f, -0.018838f, -0.009426f, 0.004470f, -0.001987f, -0.017337f, 0.018558f, 0.011237f, -0.005311f, 0.002171f, 0.014661f, -0.009103f, 0.004145f, -0.006176f, -0.009752f, -0.006669f, -0.017865f, -0.006606f, 0.013967f, 0.006610f, 0.017769f, -0.008700f, -0.028337f, -0.012224f, 0.007272f, -0.009047f, -0.018377f, -0.003025f, -0.003238f, 0.017149f, 0.008949f, -0.019740f, 0.013521f, -0.013945f, -0.000607f, -0.010049f, -0.009538f, -0.009201f, -0.021732f, -0.012912f, 0.001837f, 0.014217f, 0.021532f, 0.013745f, 0.004187f, 0.008576f, -0.009528f, -0.016225f, -0.009871f, 0.010404f, -0.004798f, 0.011213f, -0.003173f, -0.010290f, -0.000326f, 0.001027f, -0.004817f, -0.011608f, 0.000912f, 0.008868f, -0.028380f, -0.018809f, 0.026848f, -0.008587f, 0.000725f, -0.014633f, 0.007224f, 0.004019f, -0.001547f, -0.001080f, 0.009938f, 0.007273f, 0.002377f, -0.002992f, -0.003457f, -0.000608f, -0.003883f, 0.002347f, 0.003049f, -0.005586f, -0.002664f, - 0.002140f, 0.000815f, 0.000053f, 0.001851f, 0.005592f, -0.005743f, -0.002681f, -0.010650f, -0.004368f, -0.001456f, -0.001989f, 0.000714f, 0.001572f, 0.003243f, 0.000250f, 0.004111f, -0.004656f, -0.003195f, 0.000857f, 0.001120f, 0.001599f, -0.003778f, -0.002159f, -0.005272f, -0.000232f, 0.001963f, 0.013160f, -0.000709f, 0.006492f, -0.009582f, 0.006447f, -0.012971f, -0.001235f, 0.021646f, -0.010697f, 0.020434f, 0.020694f, 0.025626f, 0.006140f, 0.010072f, 0.022020f, 0.017209f, 0.012537f, -0.017645f, 0.001903f, 0.005189f, 0.014644f, -0.003245f, -0.013229f, 0.016371f, 0.016527f, -0.005074f, 0.010888f, -0.005885f, -0.006254f, 0.010319f, 0.008776f, -0.001553f, 0.010480f, 0.000692f, -0.018125f, -0.014448f, 0.014967f, 0.022010f, -0.002134f, -0.007963f, 0.004318f, 0.000438f, -0.011003f, -0.020145f, 0.009998f, -0.019058f, -0.009558f, 0.014156f, 0.002648f, 0.012501f, 0.000140f, 0.020159f, 0.002424f, 0.022164f, -0.026450f, 0.023405f, -0.005003f, -0.001104f, 0.006697f, 0.012282f, -0.010439f, -0.021748f, -0.006543f, 0.019570f, -0.004278f, -0.023249f, -0.014062f, -0.014310f, 0.003383f, 0.008176f, - -0.020530f, 0.009993f, 0.011176f, 0.020709f, 0.005974f, 0.006421f, -0.000381f, 0.005727f, 0.000623f, 0.004454f, 0.002699f, -0.015351f, -0.002155f, 0.007121f, 0.004621f, 0.012194f, -0.008546f, -0.002602f, -0.000610f, 0.000886f, 0.005399f, 0.000648f, 0.004372f, 0.001866f, -0.002845f, -0.001147f, 0.004136f, 0.004154f, 0.001142f, 0.004542f, 0.000795f, 0.001951f, 0.005606f, -0.000023f, -0.003793f, -0.001798f, 0.000828f, 0.002890f, -0.000933f, -0.001508f, 0.004416f, 0.002461f, 0.000571f, -0.005140f, -0.002162f, -0.002971f, -0.003062f, -0.000310f, 0.004731f, 0.000225f, 0.004469f, 0.003547f, 0.002811f, -0.000421f, 0.000215f, 0.006947f, 0.022385f, 0.002831f, 0.009315f, 0.026634f, 0.028692f, 0.008532f, 0.007173f, -0.021287f, -0.010789f, 0.023451f, -0.017497f, 0.023971f, 0.006718f, -0.000126f, -0.004840f, -0.008419f, -0.013930f, 0.002521f, 0.010577f, -0.025840f, -0.011752f, -0.010999f, 0.005671f, 0.005174f, 0.005600f, 0.000788f, 0.004327f, -0.000950f, 0.007723f, 0.006322f, -0.006912f, -0.012111f, -0.022390f, 0.003938f, -0.012128f, 0.020162f, 0.000742f, -0.011182f, -0.014115f, -0.004283f, - 0.009292f, -0.017516f, 0.010902f, -0.005847f, 0.003547f, -0.000181f, -0.012559f, 0.012425f, 0.015623f, -0.010735f, 0.013133f, 0.003801f, -0.001090f, 0.037682f, -0.009545f, -0.024383f, 0.004553f, 0.009223f, -0.006182f, 0.002081f, -0.010704f, 0.025609f, 0.014792f, -0.002489f, -0.005545f, 0.018206f, 0.017269f, -0.003577f, -0.014869f, -0.010686f, 0.035483f, -0.003214f, -0.004976f, -0.014276f, -0.009388f, -0.002795f, 0.003380f, -0.003649f, -0.009544f, 0.015395f, -0.004933f, 0.018259f, 0.005190f, -0.005648f, -0.002091f, 0.003341f, -0.000187f, -0.003022f, -0.003262f, 0.006501f, -0.008175f, -0.001885f, -0.002259f, 0.010611f, 0.000872f, -0.002179f, -0.000359f, -0.005241f, -0.005094f, -0.000545f, 0.000964f, 0.011141f, -0.002689f, 0.006661f, 0.002399f, -0.003447f, 0.002158f, 0.000592f, -0.005443f, 0.004261f, -0.002765f, 0.005834f, -0.000664f, -0.005651f, -0.004385f, -0.003152f, -0.004413f, 0.000104f, -0.001475f, -0.001657f, 0.001859f, 0.002212f, 0.002964f, 0.001335f, 0.009504f, -0.019378f, -0.005308f, -0.005935f, 0.001879f, 0.008593f, 0.019590f, 0.017145f, -0.026769f, 0.000860f, 0.003426f, -0.002496f, - -0.007814f, -0.018372f, -0.001655f, 0.006517f, 0.011312f, 0.009233f, -0.016837f, -0.002742f, -0.021410f, 0.020536f, 0.001142f, -0.001781f, 0.010010f, -0.009418f, -0.001515f, -0.022841f, 0.004123f, -0.013545f, 0.009760f, -0.001576f, -0.003616f, -0.007577f, -0.015068f, -0.014669f, -0.001521f, -0.018148f, -0.029704f, -0.005349f, -0.013407f, -0.028567f, -0.002101f, -0.002261f, -0.015515f, 0.010528f, 0.016045f, -0.001755f, 0.007769f, -0.001787f, -0.002272f, 0.004493f, 0.004899f, -0.023108f, -0.006645f, 0.012987f, -0.011006f, 0.028084f, 0.005264f, 0.007638f, -0.017768f, 0.000023f, -0.007900f, -0.018166f, -0.001733f, 0.026078f, 0.012229f, 0.019860f, 0.011148f, -0.008380f, -0.020647f, -0.032431f, 0.022123f, 0.022635f, -0.002451f, 0.011788f, -0.025211f, 0.012366f, 0.010643f, 0.018463f, 0.002980f, -0.021585f, -0.002574f, -0.020109f, -0.006813f, 0.001871f, -0.006361f, 0.004487f, -0.004288f, -0.006553f, -0.001523f, 0.002144f, -0.000782f, -0.002023f, 0.006208f, -0.001685f, 0.002547f, -0.014556f, 0.000494f, -0.001036f, -0.002105f, -0.006510f, -0.002614f, 0.004595f, -0.005980f, -0.007052f, -0.002372f, -0.002432f, - -0.002752f, 0.000130f, -0.001536f, -0.007829f, -0.006217f, -0.003828f, 0.002484f, 0.002824f, 0.004909f, 0.002376f, 0.004525f, 0.001618f, -0.005546f, 0.001311f, -0.000722f, -0.003415f, 0.002371f, -0.006564f, 0.003079f, -0.003499f, -0.000381f, 0.004651f, -0.050284f, -0.012420f, 0.040359f, 0.013637f, 0.016583f, -0.010243f, 0.016744f, 0.028217f, 0.002260f, -0.004492f, -0.046436f, -0.010657f, -0.001994f, 0.026963f, 0.007719f, 0.010948f, -0.034747f, -0.009177f, -0.012803f, -0.008086f, 0.021908f, -0.012024f, -0.004069f, 0.004006f, 0.006402f, -0.010793f, -0.004644f, 0.005855f, -0.009585f, 0.021603f, -0.023766f, 0.002845f, 0.015950f, -0.020265f, 0.017009f, 0.028883f, 0.033503f, 0.016266f, 0.016480f, 0.022142f, -0.014840f, -0.027253f, 0.011145f, 0.012227f, 0.018356f, 0.014744f, -0.030942f, -0.008578f, 0.016499f, 0.009718f, 0.006098f, 0.019796f, 0.004536f, 0.023015f, -0.008308f, -0.004618f, 0.013156f, 0.012311f, 0.003772f, -0.019741f, -0.010565f, -0.021225f, -0.024500f, -0.001139f, -0.026811f, 0.001728f, -0.015555f, 0.001421f, -0.014138f, -0.008124f, -0.034486f, 0.024190f, 0.006425f, -0.004840f, - -0.006085f, -0.003585f, 0.004749f, -0.012493f, -0.001681f, -0.029804f, -0.016395f, 0.010801f, 0.013739f, 0.005931f, 0.004681f, 0.001497f, -0.015695f, 0.007554f, 0.007315f, 0.005935f, -0.014997f, 0.003777f, 0.000680f, -0.011687f, -0.003966f, 0.002423f, 0.001980f, -0.005857f, -0.008940f, 0.003310f, -0.004354f, -0.005190f, -0.001292f, 0.001647f, -0.001049f, -0.000337f, 0.003134f, -0.002461f, 0.004332f, -0.000379f, 0.006148f, -0.002339f, 0.005499f, 0.008873f, -0.005980f, 0.005107f, 0.000478f, 0.003668f, -0.003665f, 0.000006f, 0.004975f, 0.004327f, -0.007385f, 0.004338f, 0.003962f, 0.031787f, -0.015315f, -0.013090f, -0.011586f, 0.021920f, 0.027800f, -0.017271f, 0.044543f, 0.009435f, -0.018882f, 0.022845f, 0.006594f, -0.018411f, -0.021644f, -0.017463f, -0.001313f, -0.009336f, -0.006360f, -0.028894f, 0.011727f, 0.012161f, 0.040180f, 0.005513f, -0.006739f, -0.018007f, -0.018851f, 0.004878f, -0.002145f, -0.025274f, 0.004591f, -0.009328f, 0.001313f, 0.019646f, -0.015049f, 0.025957f, -0.022630f, -0.019033f, -0.001195f, -0.029669f, -0.035476f, 0.005833f, -0.003981f, -0.040996f, 0.002937f, 0.000527f, - -0.019441f, 0.010309f, -0.009395f, 0.005232f, -0.027649f, -0.045253f, 0.029840f, -0.027673f, 0.046176f, 0.025196f, -0.032837f, -0.004184f, -0.033275f, -0.008965f, -0.004135f, 0.013882f, -0.011926f, 0.021168f, 0.026749f, 0.025333f, -0.018173f, -0.014865f, 0.002462f, -0.022380f, -0.001997f, -0.007285f, -0.029471f, 0.017692f, 0.013185f, -0.015731f, 0.023362f, -0.034559f, -0.003230f, 0.002088f, -0.008965f, -0.005816f, 0.030126f, 0.022200f, 0.014859f, -0.001803f, -0.015595f, -0.012698f, -0.011736f, 0.005206f, 0.004926f, -0.000954f, 0.003485f, -0.000914f, -0.001306f, 0.000634f, -0.001180f, 0.001207f, 0.006072f, -0.007145f, 0.002927f, -0.000517f, 0.006674f, -0.003859f, -0.000610f, 0.003797f, 0.008890f, 0.003479f, 0.007189f, -0.008498f, -0.009178f, 0.004375f, -0.006088f, 0.001461f, 0.000036f, -0.009913f, -0.005441f, -0.005933f, 0.000178f, 0.003197f, 0.003005f, 0.001939f, 0.002389f, -0.001425f, -0.027495f, -0.021047f, 0.012843f, 0.015690f, 0.017396f, 0.029827f, -0.011787f, 0.055362f, -0.002306f, -0.029505f, 0.012074f, 0.027015f, 0.006992f, 0.013940f, -0.012815f, -0.031553f, 0.046080f, 0.025358f, - 0.018558f, 0.008522f, -0.016700f, 0.014491f, 0.038286f, -0.014803f, 0.007780f, -0.000910f, 0.007628f, 0.006172f, 0.027122f, -0.008484f, 0.008862f, -0.010279f, 0.007868f, -0.003141f, -0.002034f, 0.016680f, 0.003106f, -0.034805f, -0.023566f, -0.032644f, -0.022578f, -0.017543f, -0.009028f, -0.025099f, -0.014485f, -0.012569f, -0.021901f, -0.015308f, 0.008863f, -0.022754f, -0.008244f, -0.017767f, 0.040811f, 0.020580f, 0.035456f, -0.033089f, -0.003628f, -0.030270f, -0.006866f, 0.032956f, 0.017814f, 0.038911f, 0.018203f, 0.023914f, -0.026449f, 0.011248f, 0.010911f, 0.036009f, 0.036437f, 0.010647f, 0.032912f, -0.029275f, -0.014357f, 0.021046f, -0.076250f, 0.000931f, 0.011855f, 0.001152f, 0.018202f, 0.011705f, 0.042083f, -0.003727f, -0.006490f, 0.045807f, 0.013375f, -0.004523f, -0.021298f, -0.000835f, -0.000240f, 0.037471f, 0.004431f, 0.000612f, 0.002460f, 0.007253f, 0.011209f, -0.002519f, -0.002759f, 0.011824f, 0.005265f, 0.003579f, 0.005849f, 0.008480f, 0.006249f, -0.000848f, 0.000888f, 0.000821f, 0.012030f, -0.002626f, 0.006055f, 0.011825f, 0.008383f, 0.013240f, -0.006580f, -0.004900f, - 0.002613f, 0.004041f, -0.005217f, 0.000017f, 0.007227f, 0.012279f, -0.001405f, 0.003413f, 0.001300f, 0.032611f, 0.021203f, -0.021318f, 0.041674f, 0.024751f, -0.002093f, -0.010372f, -0.005227f, 0.025043f, 0.061540f, 0.032906f, 0.008850f, 0.002600f, 0.020216f, -0.004909f, 0.049669f, 0.028115f, 0.031019f, 0.001299f, -0.015826f, 0.010565f, 0.003724f, -0.026378f, -0.006532f, -0.001628f, -0.006268f, -0.007488f, 0.010054f, 0.005541f, -0.021707f, -0.010341f, -0.038335f, -0.003876f, -0.011952f, -0.049215f, -0.022181f, 0.001560f, 0.018381f, -0.025290f, 0.031647f, -0.008710f, -0.007646f, -0.004241f, -0.007821f, 0.023150f, -0.015608f, 0.016211f, -0.050610f, 0.015727f, 0.021943f, 0.017101f, 0.033561f, -0.033142f, 0.028719f, -0.029735f, -0.022403f, 0.025057f, -0.014737f, -0.004320f, 0.020810f, -0.033720f, 0.029880f, 0.048240f, -0.001120f, -0.006858f, 0.061237f, -0.013080f, 0.011667f, 0.034749f, -0.073939f, -0.037622f, 0.002344f, 0.002401f, 0.009841f, 0.017908f, 0.035718f, 0.021751f, -0.028397f, -0.022438f, -0.006883f, -0.007890f, -0.038307f, -0.003542f, -0.007795f, 0.009586f, -0.040030f, 0.000642f, - -0.012211f, 0.016389f, -0.006229f, 0.020821f, 0.005315f, 0.000383f, -0.012025f, -0.008453f, -0.011326f, -0.011534f, -0.009243f, 0.008338f, -0.024459f, 0.017583f, -0.003141f, 0.009898f, 0.000331f, -0.001307f, -0.016794f, 0.009324f, -0.012011f, 0.003256f, -0.012751f, -0.006542f, -0.000370f, -0.005247f, -0.014603f, 0.001338f, -0.004784f, 0.001868f, -0.010048f, -0.010452f, -0.011768f, 0.002373f, 0.002139f, 0.014819f, 0.015168f, 0.000198f, 0.000020f, -0.018553f, -0.011058f, -0.058436f, -0.035120f, 0.043159f, 0.042912f, 0.004681f, -0.010061f, 0.036405f, -0.058619f, -0.031432f, -0.063433f, 0.027855f, 0.007780f, 0.002899f, 0.012385f, -0.028816f, 0.014705f, 0.020179f, 0.026425f, 0.044737f, 0.045969f, 0.038635f, -0.001485f, 0.008799f, 0.000576f, -0.016700f, -0.003397f, -0.013931f, -0.007165f, 0.053300f, -0.012358f, -0.048851f, -0.012297f, -0.009986f, 0.004446f, 0.076760f, -0.027654f, -0.027407f, 0.026017f, -0.041444f, 0.014426f, -0.045996f, 0.060261f, 0.017092f, -0.001623f, 0.015525f, -0.023166f, -0.029310f, 0.041303f, -0.050077f, -0.040015f, -0.035963f, 0.010049f, 0.015153f, 0.018820f, -0.033359f, - 0.034362f, -0.010514f, 0.002634f, 0.052951f, -0.003564f, -0.008903f, 0.015611f, 0.042752f, -0.027573f, 0.070844f, 0.002671f, -0.081446f, -0.009875f, -0.003047f, -0.027182f, -0.007764f, 0.000028f, -0.007538f, -0.022194f, -0.018615f, 0.040157f, 0.026976f, -0.009836f, 0.026108f, -0.046793f, 0.013240f, 0.021031f, 0.013158f, 0.001557f, 0.025152f, -0.004089f, -0.001010f, 0.009421f, 0.024595f, -0.010103f, -0.010580f, -0.008313f, 0.001234f, 0.009298f, -0.004609f, -0.019278f, -0.020656f, 0.001061f, -0.009634f, 0.007249f, -0.000132f, 0.005128f, 0.011147f, -0.013472f, -0.008805f, 0.023394f, -0.005264f, 0.004265f, -0.001664f, 0.000659f, -0.007832f, -0.008841f, -0.004352f, -0.002940f, -0.012261f, 0.006043f, 0.011506f, 0.006397f, -0.000056f, 0.001098f, 0.005288f, -0.009489f, 0.002359f, 0.010909f, -0.000910f, 0.009364f, -0.005097f, -0.016901f, -0.022749f, 0.000585f, 0.009830f, -0.016845f, -0.007846f, 0.077508f, 0.045806f, -0.063030f, -0.050993f, 0.062331f, 0.059395f, 0.037063f, 0.042599f, -0.074984f, -0.016700f, -0.020881f, 0.019399f, 0.006963f, -0.030460f, -0.055458f, -0.083873f, 0.024159f, 0.021745f, - 0.006195f, 0.022674f, -0.011699f, -0.004507f, -0.020116f, 0.016280f, 0.028643f, 0.025649f, 0.006504f, 0.034180f, 0.010786f, -0.004224f, -0.014342f, -0.051114f, -0.003009f, -0.021691f, -0.017989f, 0.017348f, -0.054771f, 0.004561f, 0.001925f, -0.025752f, 0.021985f, 0.020076f, 0.009813f, -0.036997f, -0.034384f, -0.090223f, -0.023149f, 0.000308f, -0.029066f, 0.004743f, 0.018725f, 0.018580f, 0.050006f, 0.024332f, -0.022472f, -0.015910f, -0.033664f, 0.041939f, -0.018034f, 0.072839f, 0.060898f, 0.016603f, -0.039331f, 0.080449f, 0.036923f, -0.033086f, 0.004764f, 0.040241f, 0.093756f, -0.039204f, -0.072099f, -0.037433f, 0.000744f, -0.026280f, 0.011103f, 0.025558f, 0.021409f, -0.019231f, -0.029620f, -0.016613f, -0.024689f, -0.027235f, 0.007228f, 0.028832f, 0.023110f, 0.012747f, 0.011405f, 0.003875f, 0.019409f, 0.002281f, 0.002941f, 0.028168f, 0.022177f, -0.001697f, -0.009588f, 0.006063f, -0.015083f, 0.015492f, -0.005869f, 0.015864f, -0.008531f, 0.006110f, 0.004054f, 0.010346f, 0.013654f, 0.007753f, 0.006253f, -0.013886f, -0.026739f, 0.002740f, -0.013662f, -0.007241f, 0.007833f, 0.001987f, - -0.004100f, -0.005569f, 0.019019f, 0.005905f, 0.025796f, -0.008745f, 0.013734f, -0.013445f, 0.013326f, -0.018380f, 0.017725f, 0.000240f, -0.015467f, 0.030477f, 0.010516f, -0.011450f, -0.030731f, 0.024674f, -0.051677f, -0.047859f, -0.017581f, 0.036062f, -0.021567f, -0.027460f, -0.000811f, 0.041638f, 0.003921f, 0.043046f, -0.015128f, 0.052084f, 0.005553f, 0.027643f, -0.018977f, -0.012909f, 0.016151f, -0.054871f, -0.015642f, 0.019932f, -0.010165f, -0.007852f, -0.044182f, -0.041826f, 0.018713f, -0.025720f, -0.018532f, 0.033337f, 0.045998f, -0.007350f, 0.030111f, -0.055446f, 0.002934f, -0.015425f, 0.070927f, -0.029925f, 0.023355f, 0.043223f, 0.041228f, 0.011694f, -0.029406f, 0.018037f, 0.012922f, 0.012194f, 0.022687f, -0.070712f, 0.129362f, 0.041040f, -0.011710f, 0.006419f, 0.014243f, 0.035620f, -0.010299f, 0.027335f, 0.075340f, -0.004691f, -0.093780f, 0.038712f, 0.032277f, -0.033575f, 0.043679f, -0.010037f, -0.019839f, -0.050489f, 0.096658f, -0.050252f, 0.107651f, -0.071398f, 0.026456f, -0.001711f, 0.116983f, 0.051663f, -0.050301f, 0.047734f, 0.001894f, -0.031459f, 0.023354f, 0.003330f, - 0.010406f, 0.025908f, 0.010970f, -0.030436f, -0.008019f, 0.035440f, 0.009404f, 0.019930f, -0.016631f, 0.022062f, -0.037983f, 0.013765f, -0.002299f, -0.012499f, 0.023356f, -0.013344f, -0.007516f, 0.016656f, -0.003041f, 0.002260f, -0.003140f, 0.028196f, -0.018790f, 0.027512f, -0.016552f, 0.025435f, 0.035793f, 0.013103f, 0.009600f, 0.019627f, -0.005317f, -0.014382f, -0.013901f, 0.016909f, 0.005809f, -0.003082f, -0.000376f, -0.004700f, -0.025952f, -0.020070f, -0.004135f, 0.000596f, -0.006008f, -0.015302f, 0.089151f, 0.010816f, 0.048472f, 0.024831f, -0.048803f, 0.003248f, 0.029191f, -0.008546f, -0.042494f, -0.007966f, -0.092847f, -0.025825f, -0.034512f, -0.019844f, 0.020418f, -0.002511f, 0.033395f, -0.016100f, 0.003715f, 0.032636f, -0.028789f, 0.003344f, 0.018586f, -0.001601f, -0.031608f, 0.000170f, -0.021689f, 0.064381f, -0.011164f, 0.037410f, 0.006103f, -0.000397f, 0.065861f, 0.047620f, -0.028892f, -0.033770f, 0.016749f, 0.030012f, 0.036171f, 0.044074f, -0.000751f, 0.015702f, 0.041632f, -0.002023f, -0.016679f, 0.013257f, 0.001499f, -0.036613f, -0.000801f, 0.024522f, -0.036228f, -0.048611f, - -0.004592f, -0.002713f, -0.005211f, -0.016151f, -0.017624f, -0.057960f, -0.000008f, 0.057396f, 0.017628f, 0.032042f, 0.018810f, -0.007420f, -0.075200f, -0.054919f, 0.014855f, 0.048941f, 0.015923f, 0.024863f, 0.098850f, 0.102882f, 0.086855f, -0.006637f, 0.043181f, -0.027261f, -0.072880f, -0.121281f, 0.021163f, 0.015252f, -0.005392f, 0.017152f, -0.038415f, 0.008518f, -0.009336f, 0.044831f, -0.003318f, 0.036058f, -0.044006f, 0.021974f, -0.054048f, -0.010201f, 0.022867f, 0.004170f, -0.027504f, 0.006753f, -0.022649f, -0.024249f, -0.010439f, 0.006802f, 0.020694f, 0.027002f, 0.035118f, -0.008138f, -0.001871f, 0.009399f, -0.009596f, 0.011621f, -0.036341f, -0.030679f, -0.021557f, -0.028677f, -0.027982f, -0.029282f, 0.019307f, 0.014418f, -0.004920f, -0.019056f, -0.029632f, 0.018450f, 0.000342f, 0.028923f, -0.006938f, 0.025702f, 0.018642f, 0.001621f, 0.008054f, 0.030760f, -0.036168f, -0.033490f, 0.020879f, -0.002515f, -0.007165f, -0.015791f, -0.027965f, -0.058384f, 0.016133f, -0.035174f, 0.016641f, -0.015505f, -0.041303f, -0.013061f, -0.000591f, 0.019922f, -0.017633f, 0.009956f, -0.060452f, 0.055902f, - -0.126349f, -0.012973f, -0.031797f, -0.026183f, 0.016600f, 0.071787f, 0.011310f, 0.025827f, -0.062358f, 0.013570f, 0.022620f, 0.049241f, -0.026063f, -0.040475f, -0.028118f, -0.013951f, -0.002148f, -0.001403f, 0.029743f, 0.021501f, -0.017924f, -0.091368f, -0.043470f, -0.074359f, 0.008367f, 0.130251f, -0.092593f, -0.036903f, -0.014417f, 0.075150f, -0.025444f, 0.031600f, -0.024321f, 0.036069f, -0.014599f, -0.022330f, -0.047067f, 0.023892f, -0.054514f, 0.049984f, 0.090583f, 0.011388f, -0.016921f, -0.017247f, 0.075105f, 0.019705f, -0.000855f, 0.039531f, 0.012889f, 0.014123f, -0.014665f, 0.086777f, -0.136999f, 0.098806f, -0.083541f, 0.039310f, 0.097656f, -0.078761f, 0.158459f, 0.107822f, -0.040834f, -0.013843f, 0.108928f, 0.039563f, -0.010520f, 0.071577f, 0.064227f, -0.084037f, 0.112392f, -0.068369f, 0.019865f, 0.021293f, -0.030339f, 0.021437f, 0.036620f, -0.023024f, -0.041357f, 0.013097f, -0.022364f, 0.009271f, 0.009285f, -0.011600f, -0.032460f, 0.012594f, 0.011370f, -0.013493f, 0.013416f, 0.010654f, -0.026158f, 0.063477f, 0.006759f, 0.001049f, 0.001166f, -0.013193f, 0.009562f, 0.008314f, - 0.003180f, -0.021050f, 0.010601f, 0.002650f, -0.009287f, -0.018493f, 0.039154f, -0.015179f, 0.031802f, 0.036268f, -0.003931f, -0.013815f, 0.009421f, 0.008713f, 0.013941f, 0.043771f, 0.037658f, -0.034298f, 0.015561f, -0.014098f, -0.002273f, 0.050037f, -0.010010f, 0.013776f, 0.019477f, -0.003394f, 0.092343f, 0.088002f, -0.075213f, 0.073270f, 0.067433f, -0.063484f, -0.095784f, -0.141543f, 0.032899f, 0.212302f, 0.087198f, 0.000280f, 0.043775f, -0.203165f, -0.083929f, -0.007316f, 0.030890f, 0.152641f, 0.149414f, 0.025672f, -0.057680f, -0.112641f, -0.066008f, 0.007485f, 0.048215f, 0.072891f, 0.117484f, 0.070811f, -0.094765f, -0.224018f, -0.182506f, -0.018089f, 0.203011f, 0.220740f, 0.139527f, 0.042475f, -0.046951f, -0.090349f, -0.136326f, -0.077887f, -0.082938f, 0.162331f, 0.135182f, 0.085250f, 0.075601f, -0.115138f, -0.161091f, -0.187088f, -0.167405f, 0.064276f, 0.226657f, 0.278927f, 0.094334f, -0.084774f, -0.198755f, -0.238568f, -0.064886f, 0.038155f, 0.024601f, 0.148936f, 0.058488f, -0.056567f, -0.033434f, -0.115034f, -0.025092f, -0.131488f, 0.056804f, 0.155356f, 0.291023f, -0.017930f, - -0.155643f, -0.338318f, -0.013246f, -0.114568f, -0.012172f, 0.161774f, 0.032081f, -0.015152f, -0.072322f, -0.152574f, -0.099843f, 0.072844f, 0.118057f, 0.038550f, -0.020647f, -0.052188f, -0.062138f, 0.060214f, 0.069558f, 0.042661f, 0.037244f, 0.016321f, 0.034729f, -0.003701f, 0.003291f, -0.034164f, -0.015660f, 0.003492f, 0.087790f, 0.076407f, -0.003969f, -0.033303f, -0.008537f, -0.078765f, -0.052639f, -0.002393f, 0.029939f, 0.080634f, 0.062471f, 0.043896f, 0.004059f, -0.109615f, -0.098339f, -0.067008f, 0.025803f, 0.104895f, 0.204184f, 0.124574f, -0.094137f, -0.169982f, -0.149721f, -0.060794f, 0.004276f, 0.139355f, 0.175977f, 0.130804f, 0.023118f, -0.104954f, -0.237265f, -0.150006f, 0.048321f, 0.146749f, 0.168234f, 0.048629f, -0.024635f, -0.065876f, -0.077335f, -0.044839f, -0.014256f, 0.015973f, 0.036992f, 0.046249f, 0.037051f, 0.008486f, -0.003238f, -0.032557f, 0.001624f, -0.019180f, 0.095941f, 0.056210f, -0.008221f, 0.020571f, 0.010583f, -0.067958f, -0.006902f, -0.005326f, 0.007657f, 0.002343f, 0.005676f, -0.024715f, -0.009751f, -0.008982f, -0.006056f, -0.011126f, 0.041024f, -0.014443f, - 0.017752f, -0.030497f, -0.002871f, 0.012896f, -0.001230f, -0.009116f, 0.070694f, 0.009970f, -0.039672f, -0.046146f, 0.009974f, 0.009963f, -0.027021f, 0.007776f, 0.035624f, 0.018601f, 0.033544f, -0.033884f, 0.010550f, -0.000991f, 0.008234f, -0.023788f, 0.004796f, 0.026848f, 0.037940f, 0.009762f, -0.009590f, 0.011272f, 0.004493f, -0.008570f, 0.025942f, -0.037772f, 0.008807f, -0.061659f, -0.019145f, 0.025765f, -0.020771f, -0.024659f, 0.033869f, -0.021252f, -0.057526f, -0.044502f, 0.039825f, -0.004740f, -0.007624f, 0.009301f, 0.020290f, 0.050371f, -0.032486f, -0.042416f, 0.002040f, -0.005657f, 0.034201f, 0.000443f, 0.020092f, 0.009280f, -0.003133f, 0.052308f, -0.067664f, -0.009765f, -0.009357f, -0.039694f, 0.010444f, 0.022499f, 0.001222f, -0.023577f, 0.010780f, -0.005189f, 0.007018f, -0.020368f, 0.015324f, -0.000902f, 0.002707f, -0.001662f, -0.004776f, 0.026590f, -0.026312f, 0.002215f, -0.004277f, -0.009411f, -0.008229f, 0.003229f, -0.011229f, 0.012262f, 0.015842f, -0.016052f, -0.003818f, -0.006065f, 0.014550f, 0.015917f, -0.007662f, 0.019587f, 0.002217f, -0.002692f, -0.012811f, 0.014147f, - 0.005176f, -0.005461f, -0.021372f, 0.010340f, -0.019352f, 0.012772f, -0.010293f, -0.009469f, 0.018333f, 0.018010f, -0.024135f, 0.003000f, -0.005363f, -0.023962f, 0.008166f, -0.013995f, 0.016137f, -0.013802f, -0.055783f, -0.061544f, -0.146763f, 0.042758f, 0.042290f, -0.002739f, -0.123689f, -0.079865f, -0.011546f, -0.020076f, 0.083053f, 0.056119f, 0.027106f, -0.054610f, -0.022413f, -0.014286f, 0.052088f, 0.005950f, -0.014548f, -0.031947f, 0.021492f, 0.009699f, 0.026023f, -0.001160f, -0.010316f, -0.012925f, -0.029446f, -0.014558f, -0.017735f, 0.049794f, 0.026695f, 0.006089f, 0.007640f, -0.032366f, -0.001539f, 0.004222f, 0.045433f, -0.003012f, 0.021284f, -0.016551f, -0.011512f, 0.009474f, -0.018443f, 0.012577f, 0.005607f, 0.013509f, 0.044310f, -0.003602f, 0.038905f, -0.000251f, 0.025049f, -0.018971f, 0.001817f, -0.028019f, -0.036433f, -0.038257f, -0.032794f, 0.011127f, 0.005893f, 0.003103f, -0.048385f, 0.024259f, -0.042094f, -0.004502f, 0.002364f, -0.026204f, -0.028512f, -0.014871f, 0.000681f, -0.050201f, -0.033996f, 0.031633f, -0.015089f, 0.029471f, 0.004790f, -0.007821f, -0.027149f, -0.031235f, - -0.001907f, 0.044994f, 0.055552f, -0.013528f, -0.005544f, -0.020565f, -0.027648f, -0.018895f, 0.017792f, 0.009670f, 0.006918f, 0.017618f, -0.003313f, -0.011208f, 0.012123f, 0.006902f, 0.010104f, 0.015450f, -0.008401f, 0.005395f, -0.001585f, 0.000633f, -0.011465f, 0.020323f, 0.006438f, 0.004853f, -0.005930f, 0.003185f, -0.000352f, 0.031524f, 0.004059f, 0.009653f, -0.017454f, 0.001464f, -0.011282f, 0.020730f, 0.001472f, 0.000601f, -0.007145f, 0.005035f, -0.002306f, 0.000549f, 0.009828f, 0.001219f, 0.012862f, -0.008434f, 0.004193f, 0.001641f, -0.016424f, -0.000601f, 0.009414f, 0.003902f, -0.003381f, 0.005677f, 0.033013f, -0.071104f, -0.176276f, -0.168954f, -0.025675f, 0.051071f, 0.169932f, 0.146869f, 0.138430f, 0.148726f, 0.082763f, 0.020023f, -0.075140f, -0.075457f, -0.156851f, -0.121773f, -0.106809f, -0.067724f, -0.085239f, 0.117321f, 0.096464f, 0.127050f, 0.073215f, 0.103847f, -0.003821f, 0.027361f, -0.016740f, -0.040496f, -0.023230f, -0.048418f, -0.056404f, -0.056106f, -0.055429f, -0.065519f, -0.048049f, -0.038944f, -0.004488f, 0.010354f, 0.092039f, 0.077338f, 0.040671f, 0.043816f, - 0.060689f, 0.056435f, 0.027087f, 0.131168f, 0.016981f, 0.001763f, 0.024526f, -0.048930f, -0.150520f, -0.042988f, -0.120676f, -0.129285f, -0.136735f, -0.096609f, -0.086174f, 0.004364f, 0.071303f, 0.072895f, 0.088869f, 0.161890f, 0.116379f, 0.142081f, 0.139476f, 0.089122f, 0.095658f, 0.032774f, -0.033789f, -0.109245f, -0.143539f, -0.163810f, -0.106718f, -0.147006f, -0.123709f, -0.141144f, -0.082519f, -0.009748f, 0.038587f, 0.114387f, 0.108955f, 0.110829f, 0.184275f, 0.128574f, 0.152304f, 0.095047f, 0.015673f, -0.017794f, -0.046298f, -0.076216f, -0.085602f, -0.090460f, -0.088381f, -0.101631f, -0.087331f, -0.063691f, -0.039334f, -0.020188f, -0.015494f, 0.044278f, 0.041801f, 0.059238f, 0.095383f, 0.107766f, 0.068116f, 0.082366f, 0.050562f, -0.003003f, -0.022527f, -0.049517f, -0.062242f, -0.053106f, -0.046143f, -0.055514f, -0.020527f, -0.013655f, 0.001050f, 0.015837f, 0.017265f, 0.004521f, 0.002177f, 0.015518f, -0.002461f, -0.013295f, 0.012107f, 0.007410f, 0.008568f, 0.013739f, 0.003820f, 0.003748f, 0.008061f, 0.019062f, 0.016012f, 0.007553f, 0.001353f, -0.004064f, -0.016401f, -0.012176f, - -0.014936f, -0.012699f, -0.005335f, -0.009786f, -0.008848f, -0.004697f, -0.004005f, -0.005190f, -0.001640f, 0.006238f, 0.005881f, 0.007624f, 0.011822f, 0.008173f, 0.005626f, 0.007854f, 0.002790f, 0.003425f, 0.003245f, 0.002292f, 0.001911f, 0.000874f, -0.002219f, -0.004722f, -0.009053f, -0.006881f, -0.007439f, -0.005859f, -0.003148f, -0.001203f, -0.002884f, -0.001693f, -0.002395f, 0.000447f, 0.002057f, 0.003579f, 0.006761f, 0.006745f, 0.002601f, 0.002794f, 0.001207f, -0.000945f, 0.001675f, 0.001342f, 0.000367f, 0.002292f, 0.000647f, -0.000850f, -0.002018f, -0.001665f, -0.002035f, -0.001616f, -0.001791f, -0.000569f, -0.001094f, -0.001255f, -0.004088f, -0.004616f, -0.004603f, -0.003250f, -0.000785f, 0.001408f, 0.003817f, 0.004941f, 0.005087f, 0.005465f, 0.004326f, 0.004776f, 0.003250f, 0.001572f, 0.000259f, -0.000642f, -0.002475f, -0.003773f, -0.004566f, -0.004081f, -0.004307f, -0.003501f, -0.003414f, -0.002858f, -0.001358f, 0.000252f, 0.000999f, 0.002304f, 0.003349f, 0.003881f, 0.003731f, 0.003248f, 0.002197f, 0.001320f, 0.000231f, -0.000161f, -0.000828f, -0.000992f, -0.001096f, -0.000977f, - -0.000923f, -0.000700f, -0.000530f, -0.000290f, -0.000175f, -0.000086f}, - {-0.008170f, 0.013879f, 0.004877f, -0.002460f, 0.003560f, 0.004501f, 0.008344f, 0.013902f, -0.006594f, 0.004658f, -0.005611f, -0.004342f, 0.002830f, 0.000093f, 0.001204f, -0.009712f, -0.004702f, 0.003509f, 0.006940f, -0.000856f, 0.005854f, -0.010415f, -0.009254f, 0.005919f, 0.003786f, 0.001676f, 0.004301f, -0.003511f, 0.007550f, 0.008474f, 0.008199f, 0.011773f, -0.006453f, -0.005293f, 0.000456f, 0.001559f, -0.011185f, -0.000636f, -0.000938f, 0.003157f, 0.001139f, -0.006945f, -0.001696f, 0.009635f, -0.005074f, 0.001952f, -0.005826f, 0.002887f, 0.002983f, 0.001993f, -0.008696f, 0.007125f, 0.000672f, 0.001671f, -0.001175f, -0.002785f, -0.003593f, -0.005867f, 0.012685f, -0.002145f, -0.002310f, -0.002751f, 0.005646f, 0.001401f, -0.011950f, 0.003133f, -0.005447f, -0.008123f, 0.004869f, -0.004986f, -0.012942f, 0.005266f, 0.001921f, 0.000664f, -0.011926f, -0.014386f, -0.005900f, -0.007039f, 0.006731f, -0.001846f, -0.000004f, -0.003173f, -0.003904f, -0.003155f, 0.000111f, 0.006039f, 0.001090f, -0.002539f, -0.000206f, -0.002657f, -0.001220f, 0.002743f, 0.000808f, -0.002393f, -0.003385f, -0.001059f, - -0.001385f, 0.001421f, -0.000846f, 0.000610f, 0.000483f, 0.001542f, 0.000373f, 0.002160f, -0.000849f, 0.000605f, -0.000466f, 0.001562f, -0.000084f, 0.001446f, 0.001673f, 0.007999f, 0.000866f, 0.000599f, 0.007106f, -0.010850f, 0.001705f, -0.009071f, -0.011452f, 0.003177f, 0.010560f, -0.006687f, 0.004965f, -0.005058f, -0.002487f, 0.002047f, 0.000444f, -0.005374f, -0.015752f, -0.015654f, 0.000190f, -0.004039f, -0.000230f, 0.008034f, 0.001216f, 0.009859f, 0.013372f, -0.007197f, 0.011537f, 0.001349f, 0.011712f, 0.000643f, 0.013915f, 0.001679f, -0.007918f, -0.002259f, 0.000705f, 0.006272f, -0.001808f, -0.002210f, 0.001308f, 0.004734f, -0.005900f, -0.000460f, -0.001876f, 0.004174f, 0.005137f, 0.000179f, -0.005380f, -0.000485f, -0.001038f, 0.002953f, 0.005402f, 0.009705f, -0.003501f, 0.006258f, -0.002946f, -0.008654f, -0.007700f, -0.005270f, 0.004760f, 0.005131f, -0.002957f, 0.008377f, 0.000209f, 0.002969f, 0.000373f, 0.010209f, 0.006778f, 0.007492f, 0.003024f, 0.004364f, 0.002700f, 0.004041f, 0.008371f, -0.001908f, -0.000500f, 0.011798f, 0.002329f, 0.000225f, 0.002417f, -0.004551f, - 0.000602f, 0.003395f, -0.000328f, -0.011258f, 0.003432f, 0.001061f, -0.001845f, -0.003989f, 0.002517f, 0.000636f, 0.006009f, -0.002365f, -0.001159f, -0.002449f, -0.001941f, 0.001405f, 0.000387f, 0.002302f, 0.001097f, 0.000431f, -0.002243f, -0.001871f, -0.001075f, -0.001212f, 0.000906f, -0.003030f, 0.002503f, -0.001177f, 0.000707f, -0.000840f, -0.001079f, -0.001748f, 0.000939f, -0.001438f, -0.001021f, -0.003295f, 0.012137f, -0.012217f, -0.008204f, -0.006724f, -0.009874f, 0.003239f, 0.004386f, -0.007927f, 0.001950f, 0.016546f, -0.011898f, 0.008432f, 0.014287f, 0.014122f, -0.008565f, -0.002285f, 0.007051f, 0.001420f, 0.002253f, -0.006215f, 0.003553f, -0.021274f, 0.016870f, 0.026365f, 0.004752f, 0.008939f, -0.004171f, -0.000269f, 0.014057f, -0.007247f, -0.016753f, -0.002715f, 0.000356f, 0.000040f, -0.013512f, 0.001100f, 0.003495f, -0.016094f, -0.007497f, 0.007602f, 0.002658f, -0.005666f, -0.001388f, 0.005701f, -0.007781f, 0.016851f, 0.005343f, 0.000868f, -0.010642f, -0.000969f, 0.005898f, -0.003559f, 0.000474f, -0.003748f, -0.000098f, -0.001509f, -0.008499f, 0.000632f, -0.008214f, 0.012671f, - -0.012029f, -0.007995f, -0.002600f, -0.014458f, 0.009878f, -0.007736f, -0.020129f, -0.003632f, -0.008609f, 0.002566f, 0.009440f, -0.009373f, 0.001307f, -0.006336f, 0.006744f, 0.001004f, -0.006559f, 0.005831f, -0.007117f, -0.009500f, 0.010816f, -0.006811f, 0.003188f, 0.000346f, 0.001112f, 0.003817f, -0.001965f, -0.003176f, -0.003497f, -0.005756f, 0.002105f, -0.008170f, 0.000620f, -0.001589f, 0.002746f, -0.002374f, -0.000050f, 0.000092f, 0.000377f, -0.004302f, 0.004082f, 0.000268f, 0.000899f, -0.002283f, -0.001498f, -0.001694f, -0.000252f, 0.002556f, -0.009499f, 0.005986f, -0.000327f, -0.001895f, 0.007105f, -0.006819f, -0.023865f, -0.004690f, -0.001521f, 0.010368f, 0.014680f, 0.013021f, 0.006221f, -0.005160f, -0.001666f, -0.014715f, -0.012509f, 0.004268f, 0.016682f, -0.004822f, 0.017090f, 0.010887f, -0.010651f, 0.005666f, -0.001696f, 0.005928f, -0.011900f, -0.008002f, 0.001881f, 0.008526f, -0.001153f, 0.005077f, 0.007045f, -0.013393f, -0.002759f, -0.006186f, -0.018293f, 0.011317f, 0.001729f, 0.004104f, 0.007820f, 0.014439f, 0.004960f, 0.000673f, 0.011254f, -0.002652f, -0.005877f, 0.011653f, - -0.006219f, 0.019697f, 0.008996f, 0.007835f, 0.000329f, -0.005662f, -0.006974f, 0.009662f, 0.013038f, -0.009745f, 0.002287f, 0.012539f, -0.002311f, 0.004085f, 0.027595f, -0.008359f, -0.003422f, 0.005395f, -0.013966f, -0.000545f, 0.002394f, -0.006170f, 0.006651f, -0.004462f, 0.004065f, 0.013763f, 0.000388f, -0.003140f, -0.009450f, -0.000743f, -0.011715f, 0.004943f, -0.004410f, -0.005680f, -0.002481f, 0.002240f, -0.003444f, -0.003314f, -0.002920f, 0.000670f, 0.004176f, 0.003209f, 0.000766f, -0.000947f, -0.001404f, -0.000939f, -0.000753f, -0.001880f, -0.003532f, -0.000612f, -0.001173f, 0.001862f, -0.000105f, 0.000966f, -0.003576f, 0.001526f, 0.001709f, -0.001232f, -0.003151f, -0.001061f, -0.003300f, -0.001611f, -0.001539f, 0.002421f, 0.000132f, -0.000427f, -0.000368f, 0.000630f, 0.000252f, 0.001318f, -0.004994f, -0.001192f, 0.001467f, -0.006198f, -0.034216f, -0.002892f, -0.000846f, -0.006947f, -0.010699f, -0.003590f, 0.018168f, -0.013093f, -0.019525f, 0.007160f, -0.008006f, 0.002649f, 0.003328f, 0.012150f, -0.008502f, -0.002651f, 0.002289f, 0.011288f, -0.005468f, -0.007619f, -0.002371f, -0.006572f, - 0.008285f, 0.015284f, 0.007628f, 0.000014f, -0.001400f, -0.008953f, -0.000655f, 0.024116f, 0.004141f, -0.003136f, 0.027886f, -0.001801f, 0.020708f, -0.006419f, 0.000043f, 0.014014f, 0.004169f, 0.003392f, 0.004923f, 0.002356f, 0.007656f, 0.004407f, -0.013425f, 0.024608f, 0.014909f, 0.020185f, 0.013497f, 0.008843f, -0.013656f, 0.005862f, 0.006772f, 0.000920f, -0.008419f, 0.022838f, 0.013781f, 0.020621f, 0.003577f, -0.004257f, -0.005229f, 0.015154f, -0.007563f, -0.015893f, 0.018440f, 0.005686f, -0.010307f, -0.006031f, 0.000809f, -0.004889f, 0.001705f, -0.002279f, 0.002510f, -0.006560f, -0.001873f, -0.015048f, 0.005623f, -0.001960f, -0.000493f, 0.005366f, -0.001941f, -0.002915f, 0.008678f, -0.000702f, 0.006721f, 0.009020f, 0.007394f, 0.004707f, 0.004702f, 0.001809f, 0.002709f, -0.000076f, -0.001992f, -0.001863f, 0.003916f, -0.001248f, -0.002549f, -0.002680f, 0.001816f, -0.003008f, -0.000837f, -0.000692f, 0.004911f, 0.001966f, 0.003497f, -0.003474f, 0.000980f, -0.002810f, -0.001025f, 0.003334f, -0.000544f, -0.001524f, -0.001184f, -0.001027f, -0.002056f, -0.001460f, 0.001387f, -0.000207f, - -0.000946f, -0.008802f, -0.001396f, -0.022501f, -0.008982f, -0.025144f, -0.017283f, 0.001694f, -0.016392f, -0.012917f, 0.001352f, -0.002991f, 0.016576f, -0.011273f, 0.018386f, 0.022622f, 0.002179f, -0.019475f, -0.013751f, 0.020310f, -0.010538f, -0.005725f, 0.011306f, -0.015100f, -0.026745f, 0.010526f, 0.022776f, -0.011927f, 0.005695f, -0.000550f, 0.009838f, -0.027849f, 0.005360f, -0.011258f, 0.006531f, 0.000445f, -0.011805f, 0.019223f, 0.008664f, 0.008057f, 0.025571f, 0.011896f, 0.005143f, 0.014486f, 0.002742f, 0.004624f, 0.007168f, 0.002358f, 0.000988f, 0.003888f, 0.003328f, 0.029231f, 0.016297f, -0.000157f, 0.024406f, 0.015323f, 0.017962f, 0.028311f, -0.014719f, -0.012207f, 0.024667f, -0.008754f, -0.001168f, -0.014852f, -0.006466f, 0.008769f, 0.012980f, -0.011331f, -0.001547f, 0.003674f, -0.003409f, 0.006780f, -0.012142f, -0.002310f, -0.014012f, 0.026710f, -0.008891f, 0.014555f, -0.004396f, -0.007224f, 0.019453f, 0.003385f, -0.006013f, 0.006338f, -0.002683f, 0.000496f, -0.005823f, 0.007387f, -0.001656f, 0.002621f, 0.007722f, 0.004516f, 0.002126f, 0.004439f, 0.000089f, -0.000772f, - 0.002937f, 0.000759f, -0.005723f, 0.001123f, -0.001413f, -0.002599f, 0.004670f, -0.000053f, 0.002141f, 0.001977f, -0.001389f, 0.000899f, -0.003485f, 0.000624f, -0.003211f, 0.000207f, -0.001483f, 0.003536f, 0.000663f, 0.003035f, 0.000536f, 0.003683f, 0.000713f, 0.001671f, 0.001927f, 0.000338f, 0.008401f, -0.009133f, 0.002845f, 0.001228f, 0.002822f, -0.013088f, 0.016845f, 0.009736f, 0.022914f, 0.004368f, -0.003173f, -0.026019f, -0.013922f, -0.009807f, 0.006567f, -0.013560f, -0.022508f, -0.006343f, 0.005706f, 0.002410f, -0.025123f, 0.020263f, 0.001523f, -0.001617f, -0.021401f, -0.012382f, 0.005001f, 0.002538f, -0.023767f, -0.007477f, 0.008642f, 0.000863f, 0.002366f, 0.012065f, 0.014186f, 0.008202f, -0.003696f, 0.007062f, 0.002197f, -0.008617f, -0.017581f, 0.030161f, -0.007611f, -0.014846f, 0.000279f, 0.007402f, 0.009775f, 0.022521f, 0.003717f, -0.000520f, -0.008506f, -0.000364f, 0.012552f, -0.001698f, 0.015686f, 0.029937f, 0.002534f, -0.006631f, 0.000923f, 0.025755f, 0.032373f, -0.016244f, 0.004535f, 0.004399f, 0.017517f, 0.009126f, 0.003111f, 0.005259f, -0.012854f, 0.007905f, - 0.008377f, 0.008207f, -0.005532f, 0.000349f, 0.006394f, 0.009507f, -0.001315f, 0.003179f, 0.002275f, -0.011077f, 0.005331f, 0.000383f, -0.009813f, -0.007309f, 0.010526f, -0.004838f, 0.007305f, -0.010642f, -0.007955f, -0.003724f, 0.002456f, -0.000307f, 0.009520f, 0.004168f, 0.001773f, 0.000315f, 0.004807f, 0.004209f, 0.001460f, -0.008125f, 0.000442f, -0.003504f, 0.001375f, -0.002679f, -0.001842f, -0.000257f, -0.000695f, -0.001296f, -0.002603f, -0.007978f, -0.002055f, 0.000684f, -0.005145f, -0.003524f, -0.003211f, -0.000030f, -0.003210f, -0.005683f, -0.001151f, 0.002437f, 0.004395f, -0.001638f, 0.001372f, -0.002263f, 0.001635f, -0.008568f, 0.011769f, -0.010755f, -0.019405f, 0.013212f, -0.001705f, -0.004821f, 0.004935f, 0.011231f, -0.032466f, 0.001863f, 0.024639f, -0.003001f, 0.044437f, 0.021183f, -0.013753f, -0.010112f, -0.004320f, -0.012996f, -0.005862f, 0.019785f, -0.007800f, -0.006643f, 0.019802f, 0.016075f, 0.005202f, 0.009170f, 0.018498f, 0.012225f, 0.013806f, -0.010335f, -0.007136f, 0.017589f, -0.003622f, 0.015913f, -0.000041f, -0.019245f, -0.012447f, 0.005072f, 0.014980f, -0.020920f, - 0.001155f, -0.011219f, 0.005684f, -0.012805f, 0.017543f, 0.017536f, -0.017367f, -0.001936f, 0.004887f, -0.000660f, -0.023434f, -0.010542f, 0.003850f, 0.015344f, 0.025268f, 0.008542f, -0.018972f, -0.004251f, -0.004726f, -0.002305f, 0.015839f, 0.002446f, 0.012663f, -0.019350f, 0.008500f, 0.001222f, -0.015415f, 0.017993f, 0.007539f, -0.002533f, -0.004200f, 0.003034f, -0.000828f, -0.015664f, 0.011586f, -0.003692f, 0.006848f, -0.012191f, -0.021553f, -0.011955f, 0.004914f, 0.009466f, 0.000080f, 0.005191f, 0.019064f, 0.000115f, -0.005064f, 0.012001f, -0.003893f, 0.011293f, 0.000519f, 0.003614f, -0.009914f, 0.000920f, 0.000105f, 0.005141f, 0.005585f, 0.007985f, 0.004969f, -0.002059f, -0.002513f, -0.003823f, 0.009404f, -0.004547f, 0.004824f, 0.000972f, 0.002848f, 0.003852f, 0.005197f, 0.002293f, -0.001992f, 0.004756f, 0.001738f, 0.001552f, -0.002011f, 0.006425f, 0.002911f, 0.001301f, -0.006604f, 0.002288f, -0.002698f, -0.000123f, 0.004253f, 0.001243f, 0.020475f, -0.025579f, -0.004193f, -0.008277f, 0.025927f, -0.011805f, 0.021339f, -0.006860f, 0.019914f, 0.027033f, -0.012194f, 0.008418f, - -0.007055f, 0.015329f, -0.006022f, 0.012735f, 0.010575f, 0.009927f, -0.002441f, 0.010448f, -0.005484f, -0.013657f, -0.006606f, 0.014895f, -0.017747f, 0.002618f, -0.000183f, 0.013247f, 0.027053f, -0.025037f, 0.000760f, 0.024177f, -0.000708f, 0.022087f, 0.002930f, 0.009605f, -0.003181f, -0.002069f, 0.005903f, -0.034528f, 0.003279f, -0.001008f, -0.013767f, 0.008902f, 0.005524f, 0.024739f, 0.012304f, -0.002666f, 0.047241f, 0.011604f, -0.025046f, 0.006406f, 0.002298f, 0.016337f, -0.010847f, 0.002976f, 0.013873f, 0.000901f, 0.008414f, -0.002690f, -0.027342f, -0.028114f, -0.000038f, -0.009643f, 0.022330f, -0.038139f, 0.048673f, -0.000501f, 0.027058f, 0.030838f, 0.007376f, -0.008446f, -0.006295f, -0.014809f, -0.019417f, -0.001879f, 0.006143f, -0.005129f, 0.009672f, -0.006755f, -0.015650f, -0.010062f, -0.007955f, 0.002566f, -0.002523f, 0.001477f, 0.010352f, 0.005010f, 0.004862f, 0.003583f, -0.004451f, -0.005610f, 0.000219f, -0.001386f, 0.002903f, 0.000462f, 0.001119f, 0.003036f, 0.005973f, 0.003359f, -0.012171f, 0.001946f, -0.002370f, 0.008534f, 0.008784f, 0.004868f, -0.000903f, -0.002841f, - 0.003398f, 0.002503f, -0.004354f, -0.004778f, -0.001195f, -0.003356f, 0.000772f, -0.003569f, -0.005925f, 0.002053f, 0.009703f, -0.002802f, 0.003873f, -0.007780f, 0.000909f, 0.004032f, 0.004426f, -0.000511f, 0.002825f, 0.006007f, -0.004685f, 0.002038f, -0.045051f, -0.003138f, 0.015411f, 0.002580f, -0.016883f, -0.041842f, 0.000042f, 0.004830f, -0.007285f, -0.001711f, -0.012272f, 0.006532f, -0.010204f, 0.021612f, 0.007682f, -0.012824f, -0.016006f, -0.027506f, 0.020691f, -0.008756f, 0.001486f, 0.026867f, 0.036992f, 0.022528f, -0.003346f, 0.001955f, -0.025228f, -0.010804f, -0.010091f, 0.006819f, -0.035823f, 0.009404f, 0.009908f, 0.002073f, -0.018366f, 0.017746f, 0.027680f, -0.004431f, -0.000376f, 0.003229f, -0.015894f, -0.016909f, 0.009851f, 0.006676f, 0.020975f, -0.022925f, 0.025008f, -0.013102f, 0.013841f, -0.021227f, -0.016635f, -0.008394f, -0.000417f, -0.002514f, 0.009216f, -0.004580f, -0.036988f, -0.027842f, -0.007700f, 0.000984f, -0.037082f, 0.000513f, 0.018551f, -0.009859f, -0.004158f, 0.005632f, 0.015801f, -0.032761f, 0.016884f, -0.005774f, -0.004776f, -0.000176f, 0.013533f, 0.016697f, - -0.019520f, -0.010063f, -0.013073f, -0.006446f, -0.004622f, 0.009695f, 0.003384f, -0.011897f, -0.005168f, -0.009132f, 0.006477f, 0.021738f, 0.014509f, -0.000150f, -0.000467f, -0.012193f, 0.000626f, -0.007467f, 0.010413f, -0.001905f, 0.018041f, 0.005922f, 0.006406f, -0.006467f, 0.000546f, 0.000159f, -0.014124f, 0.015207f, 0.001316f, -0.002753f, 0.008133f, -0.002882f, -0.002239f, -0.000792f, 0.001352f, -0.012469f, 0.005634f, 0.007478f, 0.008188f, -0.001371f, -0.002747f, 0.002634f, 0.004713f, -0.004527f, -0.002445f, 0.004303f, -0.009243f, 0.000941f, -0.000042f, 0.008752f, -0.000486f, 0.040466f, 0.000947f, -0.008260f, 0.031469f, -0.006926f, -0.012844f, -0.003433f, -0.002926f, 0.039026f, 0.044657f, -0.005862f, 0.009485f, 0.011342f, -0.005725f, -0.021263f, 0.010430f, 0.041499f, 0.031677f, 0.027050f, -0.009848f, 0.011696f, 0.022303f, -0.029006f, -0.021571f, 0.025244f, -0.012909f, -0.014221f, -0.000973f, 0.031571f, -0.004757f, 0.029058f, 0.001920f, 0.026070f, -0.015628f, 0.035840f, 0.010933f, -0.011184f, -0.018293f, 0.006504f, -0.025883f, 0.003062f, -0.030714f, -0.010534f, -0.010999f, 0.017548f, - -0.017569f, 0.028943f, -0.035458f, -0.061454f, 0.038408f, 0.017125f, -0.007505f, 0.000275f, 0.042368f, 0.019826f, 0.003410f, -0.011157f, 0.009195f, -0.004976f, 0.000563f, -0.027552f, -0.027844f, 0.016375f, -0.009305f, 0.009027f, 0.052614f, -0.013795f, 0.011374f, -0.034354f, 0.040678f, -0.013637f, -0.018059f, -0.008736f, -0.005593f, 0.016911f, -0.034326f, 0.028729f, -0.033639f, 0.024281f, -0.017271f, -0.023563f, 0.023570f, -0.001059f, 0.007795f, -0.009577f, 0.013991f, -0.007659f, -0.010502f, -0.004788f, -0.015973f, 0.011043f, -0.000404f, -0.010518f, -0.004327f, 0.003874f, 0.017296f, 0.003214f, 0.002586f, 0.004545f, -0.000291f, -0.002965f, 0.008860f, -0.004937f, 0.004090f, 0.003603f, -0.004303f, -0.001293f, -0.000836f, 0.012295f, 0.010940f, -0.003994f, -0.005792f, -0.012919f, -0.000066f, -0.002658f, -0.001672f, -0.002126f, 0.000571f, 0.011794f, 0.003744f, -0.001444f, 0.015113f, 0.007265f, -0.046018f, -0.034201f, -0.033155f, 0.046362f, 0.001590f, 0.019911f, 0.011889f, -0.040800f, -0.035649f, 0.024013f, -0.063634f, 0.018620f, 0.018957f, -0.004082f, -0.025290f, -0.023296f, 0.039721f, -0.021332f, - -0.002752f, -0.006672f, -0.020510f, 0.030170f, 0.009664f, 0.027293f, 0.015934f, 0.018824f, -0.005913f, 0.030638f, -0.002761f, -0.020065f, -0.023544f, -0.005456f, 0.013367f, -0.017921f, 0.023869f, 0.015253f, -0.017875f, -0.064502f, -0.005345f, -0.005335f, -0.001524f, 0.046801f, 0.001136f, -0.036740f, -0.021695f, -0.022489f, 0.019314f, -0.014199f, -0.030477f, -0.034163f, -0.021135f, -0.016647f, -0.075934f, 0.001753f, 0.009567f, 0.024900f, -0.039623f, 0.012922f, -0.032723f, -0.026927f, -0.009102f, 0.031691f, 0.008218f, 0.029403f, 0.055793f, 0.016664f, 0.012875f, 0.036224f, -0.028228f, -0.003725f, -0.013358f, -0.015653f, 0.029200f, 0.026797f, 0.042852f, 0.020888f, -0.039057f, -0.026213f, 0.030845f, -0.046391f, -0.050855f, -0.016166f, 0.037223f, 0.005736f, -0.008980f, 0.025159f, 0.020757f, -0.000382f, 0.005993f, 0.021294f, -0.013951f, 0.012518f, -0.010256f, -0.002170f, -0.010691f, -0.002206f, 0.002929f, 0.014830f, -0.009447f, -0.012293f, 0.000070f, 0.008259f, 0.002815f, 0.007479f, -0.001103f, -0.012319f, -0.002789f, -0.008256f, 0.000728f, -0.006952f, -0.001214f, -0.001228f, -0.013484f, 0.010722f, - 0.001784f, 0.010906f, 0.014196f, 0.019162f, -0.007215f, -0.010703f, -0.000726f, 0.001531f, 0.001121f, 0.021341f, -0.020787f, -0.042842f, 0.011059f, -0.001172f, -0.001377f, 0.000987f, 0.005334f, 0.008397f, 0.017984f, 0.005450f, 0.015048f, 0.008012f, 0.017934f, 0.047339f, 0.001014f, -0.063077f, -0.023471f, 0.015212f, 0.000025f, -0.013620f, -0.040745f, -0.027082f, 0.007856f, 0.031906f, 0.012016f, -0.031771f, 0.016051f, 0.012544f, -0.035794f, -0.007319f, -0.044124f, 0.033481f, -0.018744f, -0.023395f, 0.030935f, -0.031264f, 0.007920f, 0.065038f, -0.008339f, 0.009980f, 0.018782f, -0.000854f, 0.008948f, -0.039286f, 0.008743f, 0.006051f, 0.005603f, 0.085627f, 0.057855f, -0.007223f, -0.030778f, -0.020728f, 0.026505f, 0.030707f, -0.035272f, -0.020101f, -0.047117f, 0.072930f, 0.019675f, 0.007720f, -0.012537f, -0.008872f, -0.017110f, -0.009947f, 0.052366f, -0.015040f, 0.013675f, 0.052112f, 0.008219f, -0.015812f, -0.040009f, 0.000139f, 0.015031f, -0.079937f, 0.016488f, 0.007754f, 0.053338f, 0.036023f, 0.028091f, 0.047348f, 0.026551f, -0.010479f, 0.004015f, 0.015905f, -0.006212f, 0.001426f, - -0.004185f, 0.006726f, 0.003483f, 0.044141f, -0.002090f, 0.017566f, -0.008744f, 0.016928f, -0.002310f, 0.022912f, 0.004245f, 0.005686f, 0.020916f, -0.002750f, 0.008183f, 0.013669f, -0.000465f, 0.010855f, 0.015871f, 0.006367f, 0.012472f, 0.018467f, 0.010321f, -0.008293f, -0.002294f, 0.003270f, 0.003892f, -0.000865f, -0.008709f, 0.002831f, 0.004200f, 0.001252f, 0.009449f, -0.002518f, 0.015333f, 0.007741f, -0.007578f, 0.015809f, -0.003238f, 0.001352f, -0.011084f, -0.050616f, -0.007306f, 0.034744f, 0.019476f, -0.056712f, -0.074686f, 0.008489f, 0.050629f, 0.020385f, 0.030936f, -0.017712f, 0.023896f, 0.003891f, 0.000629f, -0.027218f, -0.009692f, -0.042323f, 0.062673f, 0.020862f, -0.050854f, -0.035052f, 0.022805f, 0.002266f, 0.012593f, -0.015387f, 0.031307f, 0.018095f, 0.021576f, 0.040846f, 0.036401f, 0.007311f, 0.035600f, -0.018879f, 0.020479f, -0.000285f, 0.024883f, 0.011197f, -0.005852f, -0.015138f, 0.017221f, -0.022390f, 0.058578f, -0.015910f, -0.010928f, 0.011783f, 0.029034f, 0.028366f, -0.019214f, 0.050143f, 0.050053f, 0.028807f, 0.012231f, 0.003968f, -0.015891f, -0.038146f, - -0.064719f, -0.010766f, 0.023252f, -0.001623f, 0.028423f, 0.030554f, 0.033186f, 0.011266f, 0.018581f, 0.107526f, -0.052783f, -0.023374f, 0.010878f, 0.020588f, -0.002523f, -0.084361f, 0.019948f, -0.013317f, 0.012821f, 0.014684f, 0.037496f, 0.007244f, 0.000851f, -0.034056f, 0.035308f, -0.012794f, 0.005288f, 0.030505f, 0.014191f, -0.033020f, -0.006858f, -0.018654f, -0.006052f, -0.014374f, 0.002546f, 0.001074f, 0.013458f, -0.003383f, 0.016370f, 0.015607f, 0.021166f, -0.000425f, 0.000070f, -0.012923f, -0.005464f, -0.017227f, -0.011224f, -0.005287f, 0.022510f, 0.006908f, -0.003246f, 0.001292f, -0.008459f, 0.003003f, 0.019796f, 0.021704f, -0.004097f, -0.020449f, -0.000098f, 0.001025f, 0.009751f, -0.005799f, 0.006836f, -0.009820f, 0.015135f, -0.028528f, 0.003169f, -0.008897f, -0.009698f, -0.000205f, 0.005926f, -0.018454f, 0.009132f, -0.003668f, 0.009052f, -0.009541f, -0.016712f, 0.006269f, 0.028133f, 0.027705f, -0.015390f, -0.020885f, 0.006112f, -0.020068f, -0.064201f, 0.066237f, -0.019428f, 0.018591f, 0.006056f, 0.055557f, 0.044241f, 0.027825f, -0.026606f, -0.004416f, 0.037938f, 0.020151f, - 0.044667f, 0.119275f, -0.007481f, -0.047049f, -0.012355f, 0.035646f, -0.005425f, -0.055561f, 0.084765f, 0.043962f, -0.030028f, -0.046515f, -0.005842f, 0.010418f, -0.014889f, 0.033702f, 0.028530f, 0.033072f, 0.063241f, 0.010608f, 0.017780f, 0.011328f, -0.024664f, -0.058972f, 0.034549f, -0.040124f, -0.030276f, 0.046563f, 0.024270f, 0.026273f, 0.013646f, 0.009609f, -0.002804f, -0.058215f, -0.051837f, 0.000990f, 0.030779f, -0.038472f, 0.036327f, -0.017047f, -0.043331f, 0.013656f, 0.037742f, -0.006964f, 0.007142f, 0.037675f, 0.036931f, 0.038549f, 0.002680f, -0.023448f, 0.021786f, 0.091540f, 0.010869f, 0.037262f, 0.052097f, 0.002616f, -0.016741f, -0.045912f, -0.018766f, -0.072389f, -0.025025f, -0.018064f, -0.009121f, 0.016546f, 0.002631f, -0.003214f, -0.021015f, -0.013638f, -0.012289f, 0.017987f, -0.018831f, -0.003634f, -0.016641f, 0.005450f, -0.010647f, -0.017755f, 0.000500f, -0.025594f, -0.009273f, 0.000544f, -0.023428f, -0.004282f, -0.020445f, -0.011568f, 0.002005f, -0.036992f, -0.003828f, 0.001857f, -0.000657f, 0.017650f, -0.023867f, -0.007660f, 0.025070f, 0.000616f, -0.010239f, -0.000975f, - -0.008793f, 0.005001f, -0.011159f, -0.008106f, 0.012322f, -0.000746f, 0.000563f, -0.019879f, 0.033033f, 0.027086f, 0.000183f, -0.022645f, -0.033177f, -0.058236f, 0.009793f, 0.034922f, 0.047985f, -0.041768f, -0.044471f, 0.053388f, 0.023716f, -0.002663f, -0.005971f, -0.022917f, 0.009770f, -0.010980f, -0.023853f, 0.024172f, 0.029647f, 0.020301f, 0.001505f, -0.004960f, -0.017369f, 0.003053f, 0.012164f, 0.007088f, -0.019555f, -0.067914f, 0.014523f, -0.015901f, -0.020708f, 0.003151f, -0.009208f, 0.005048f, -0.067601f, 0.030683f, 0.024030f, -0.048920f, 0.033317f, 0.044292f, 0.037078f, -0.010694f, 0.005807f, -0.006623f, 0.024009f, -0.006158f, -0.000628f, 0.119328f, -0.036509f, 0.009350f, -0.032646f, -0.019296f, 0.067254f, 0.024154f, 0.022651f, 0.042700f, -0.055643f, -0.046303f, 0.067631f, -0.043757f, 0.034285f, 0.042361f, 0.003635f, 0.010828f, 0.015889f, 0.076616f, -0.026738f, -0.030164f, -0.071386f, -0.015848f, -0.031015f, 0.023359f, -0.044851f, 0.074432f, 0.040391f, 0.045205f, 0.022118f, 0.039424f, 0.020552f, 0.071012f, 0.017168f, 0.033819f, 0.025854f, -0.035906f, -0.017346f, -0.014304f, - 0.005787f, 0.003405f, 0.034638f, 0.014634f, -0.000507f, -0.002331f, 0.007534f, 0.002585f, -0.014137f, -0.027541f, -0.014814f, -0.020854f, 0.024877f, -0.009624f, -0.014941f, 0.007485f, -0.006087f, 0.030598f, 0.013980f, -0.006277f, 0.017083f, -0.020856f, 0.009184f, 0.015043f, -0.006186f, 0.029593f, 0.030470f, 0.019967f, -0.015014f, 0.024866f, 0.014233f, -0.025982f, -0.005353f, 0.001881f, -0.015764f, 0.000968f, 0.021617f, -0.026159f, -0.029853f, 0.012181f, 0.005324f, -0.003594f, 0.027767f, -0.019832f, 0.049093f, -0.029243f, 0.025704f, 0.083828f, 0.041337f, 0.031429f, -0.047669f, 0.012823f, 0.046413f, -0.040566f, 0.065928f, 0.023401f, 0.035008f, 0.031421f, -0.021018f, 0.032577f, 0.027832f, 0.011570f, 0.065324f, 0.049579f, -0.004382f, -0.113138f, -0.013823f, 0.052048f, 0.049945f, 0.051624f, 0.011843f, 0.028685f, 0.001948f, 0.014301f, -0.004360f, -0.035210f, 0.071594f, -0.002152f, 0.068180f, 0.030744f, 0.049022f, -0.069701f, 0.046491f, 0.023268f, 0.020569f, -0.018414f, 0.015731f, -0.013131f, 0.014982f, 0.068983f, 0.026930f, 0.090077f, 0.003820f, 0.019815f, 0.052090f, -0.010774f, - 0.082241f, 0.040741f, 0.006628f, -0.054982f, -0.034951f, 0.030146f, 0.002845f, -0.009216f, 0.001189f, -0.009417f, 0.005884f, -0.040030f, 0.026115f, -0.042608f, -0.064043f, -0.023747f, -0.004170f, -0.021183f, -0.016967f, 0.053757f, -0.007039f, 0.048977f, -0.047226f, 0.053831f, 0.006595f, -0.059462f, 0.058307f, 0.049300f, -0.019071f, -0.008214f, 0.013438f, 0.025966f, 0.015965f, -0.002356f, -0.027666f, 0.017193f, -0.012311f, -0.001555f, 0.033355f, -0.006760f, -0.006228f, -0.027288f, -0.007999f, 0.007846f, 0.004668f, -0.001582f, 0.024911f, 0.022937f, -0.018528f, 0.006448f, -0.001081f, 0.001301f, 0.022855f, 0.007575f, -0.026290f, 0.017676f, -0.022586f, 0.011572f, -0.018399f, -0.006627f, -0.006292f, -0.003497f, 0.002335f, 0.005481f, 0.002454f, 0.001939f, -0.005762f, 0.004933f, -0.013000f, 0.009187f, 0.009099f, -0.001395f, -0.010787f, 0.008249f, -0.002977f, 0.013521f, -0.007852f, -0.005288f, -0.018454f, 0.000092f, -0.018258f, 0.005096f, -0.015227f, -0.049985f, -0.047747f, -0.019048f, -0.020475f, 0.039228f, -0.062599f, -0.078180f, -0.084927f, -0.102768f, 0.046426f, 0.050796f, -0.002539f, -0.008069f, - 0.000096f, -0.024301f, 0.006399f, 0.012996f, -0.021282f, 0.070317f, 0.066523f, 0.043335f, 0.047729f, -0.043375f, 0.029401f, 0.002517f, 0.034934f, -0.013460f, -0.017240f, -0.064242f, 0.058082f, -0.058056f, -0.069897f, -0.018437f, -0.014251f, 0.075634f, -0.040975f, 0.010199f, -0.038634f, -0.010940f, 0.073453f, 0.013527f, 0.023651f, 0.036077f, 0.067533f, 0.004102f, -0.006872f, -0.081790f, -0.014454f, -0.006599f, -0.001674f, 0.044739f, 0.024746f, 0.152182f, 0.008302f, -0.004791f, -0.049808f, -0.004158f, 0.061231f, 0.055408f, -0.004283f, -0.026885f, -0.074491f, 0.018658f, 0.048370f, -0.024543f, -0.054098f, -0.023404f, 0.047711f, -0.014504f, 0.035243f, -0.109177f, -0.060189f, -0.087323f, -0.022764f, 0.034798f, 0.019413f, -0.038167f, -0.035394f, -0.042877f, 0.017979f, 0.089567f, 0.028054f, -0.000632f, -0.030971f, -0.002840f, -0.023915f, -0.007056f, 0.011539f, 0.010326f, -0.027643f, -0.013219f, -0.001611f, 0.019164f, -0.047607f, -0.033381f, -0.010371f, 0.023527f, -0.002335f, 0.031049f, 0.011056f, 0.003331f, -0.009956f, -0.005814f, -0.020830f, -0.005040f, -0.031897f, -0.007756f, 0.037255f, 0.012565f, - 0.017559f, -0.025719f, -0.044464f, 0.022092f, 0.022510f, -0.013687f, 0.001108f, -0.019299f, -0.002366f, 0.005179f, -0.001311f, 0.016521f, 0.011766f, 0.010604f, 0.022864f, 0.011455f, 0.018325f, 0.017893f, -0.002457f, 0.014230f, 0.009203f, 0.013767f, 0.001915f, 0.001816f, -0.013957f, -0.031940f, -0.017293f, 0.072571f, 0.000936f, -0.001051f, 0.129599f, 0.011499f, -0.098581f, -0.076029f, 0.090428f, 0.080127f, 0.003692f, -0.066138f, -0.081822f, -0.047536f, 0.014548f, 0.077914f, 0.069281f, 0.045954f, -0.030304f, 0.007931f, -0.030433f, 0.024524f, 0.058773f, 0.091457f, 0.100010f, -0.014052f, -0.055485f, -0.086935f, -0.129256f, -0.002672f, 0.066950f, 0.275839f, -0.037456f, -0.016127f, -0.135186f, -0.056745f, 0.010077f, 0.030668f, 0.163753f, 0.117708f, 0.072335f, -0.085147f, -0.048675f, -0.083221f, -0.006138f, 0.136872f, 0.126503f, 0.154443f, -0.044262f, -0.154664f, -0.112918f, -0.156150f, 0.037473f, 0.140774f, 0.123600f, 0.229029f, -0.111314f, -0.135128f, -0.118633f, -0.020879f, 0.100543f, 0.134478f, 0.188508f, 0.084634f, -0.041249f, -0.075206f, 0.016137f, -0.006980f, 0.052662f, 0.150583f, - -0.034779f, 0.093071f, -0.035072f, -0.088760f, -0.000094f, 0.012299f, 0.080904f, 0.002555f, -0.009023f, 0.006478f, -0.022915f, -0.076956f, 0.030172f, -0.011785f, 0.024400f, -0.022750f, -0.063598f, -0.016457f, -0.016055f, 0.005642f, 0.039953f, 0.004388f, -0.013322f, 0.014504f, -0.016485f, -0.020773f, -0.005024f, 0.058849f, 0.013916f, 0.053924f, -0.005423f, 0.004916f, -0.017205f, 0.005803f, 0.004985f, 0.009770f, 0.041343f, 0.072508f, -0.003565f, -0.021374f, -0.069078f, -0.090786f, 0.002156f, 0.003978f, 0.106804f, 0.068346f, 0.010353f, -0.038876f, -0.153795f, -0.087203f, -0.014497f, 0.067606f, 0.133542f, 0.068635f, -0.042187f, -0.051728f, -0.159376f, -0.060099f, 0.073991f, 0.137434f, 0.110732f, 0.005884f, -0.072871f, -0.082338f, -0.009386f, -0.004303f, 0.064212f, 0.038190f, 0.034589f, 0.000865f, -0.033741f, -0.019809f, -0.001616f, -0.015547f, 0.019642f, 0.020923f, -0.011543f, -0.067433f, 0.089051f, -0.020330f, 0.105108f, -0.096273f, 0.001436f, -0.041953f, -0.099905f, 0.073526f, -0.052302f, 0.068064f, -0.053481f, -0.020596f, -0.004500f, 0.035101f, 0.008136f, -0.038285f, -0.020157f, -0.001545f, - 0.054652f, -0.050369f, 0.062652f, 0.044779f, -0.033585f, 0.007876f, -0.042252f, -0.042830f, 0.072936f, -0.071515f, -0.035672f, 0.048205f, 0.111230f, -0.000774f, 0.015420f, -0.010158f, -0.048093f, -0.013578f, 0.045671f, -0.015699f, -0.072765f, 0.010324f, -0.015555f, -0.012442f, 0.022549f, -0.066812f, 0.034100f, -0.000277f, 0.023522f, 0.051366f, -0.115874f, -0.086233f, -0.028056f, -0.002725f, 0.120310f, -0.063682f, 0.043935f, 0.094036f, -0.051169f, -0.030737f, -0.002716f, 0.050906f, 0.075007f, -0.040897f, 0.022104f, -0.015200f, 0.030076f, 0.115715f, -0.042434f, -0.130932f, 0.028441f, 0.059592f, 0.016221f, -0.070122f, 0.044250f, 0.017997f, 0.044438f, -0.013990f, -0.001260f, -0.049116f, -0.038028f, 0.028382f, 0.008046f, -0.052362f, 0.016040f, 0.035555f, -0.016644f, -0.000656f, -0.056887f, 0.008049f, -0.013522f, -0.063853f, -0.001351f, 0.027930f, 0.025487f, 0.009771f, -0.000816f, 0.015236f, -0.042439f, -0.011205f, 0.016273f, -0.021535f, 0.034229f, -0.020813f, -0.007527f, -0.019729f, 0.001020f, -0.021003f, 0.032845f, 0.005217f, -0.024190f, -0.022194f, -0.000013f, -0.001531f, 0.053601f, -0.018992f, - 0.019683f, -0.010196f, 0.000055f, 0.010796f, -0.021636f, -0.020800f, 0.004558f, -0.045196f, -0.011231f, 0.012306f, -0.036736f, 0.001035f, -0.005893f, -0.013876f, 0.009302f, 0.023961f, 0.001158f, 0.002828f, -0.013734f, -0.008844f, -0.134727f, -0.042619f, 0.058086f, 0.079490f, 0.066005f, -0.067084f, 0.021615f, -0.187640f, -0.122002f, -0.103589f, -0.016387f, 0.088123f, 0.056713f, -0.003775f, -0.041170f, -0.050811f, 0.025014f, -0.031019f, -0.003074f, 0.067420f, 0.018428f, 0.003331f, -0.066482f, -0.031874f, -0.006682f, -0.031334f, 0.020441f, -0.005371f, 0.036189f, -0.009272f, -0.000280f, -0.011631f, -0.002068f, -0.008400f, -0.037940f, -0.028571f, -0.063735f, -0.044841f, 0.032656f, 0.062669f, 0.068107f, 0.038088f, 0.059360f, -0.008782f, 0.050516f, -0.011537f, -0.023026f, -0.079411f, -0.002993f, -0.043742f, 0.034186f, 0.013329f, 0.100845f, -0.081079f, 0.028976f, 0.056782f, -0.031054f, -0.042943f, -0.024995f, -0.019858f, -0.020597f, 0.007616f, 0.071639f, 0.046311f, -0.019011f, -0.002359f, 0.051436f, -0.059131f, -0.065641f, 0.027470f, -0.076202f, -0.058378f, -0.051135f, 0.006735f, 0.024823f, 0.029964f, - 0.088562f, 0.060498f, -0.009530f, 0.045133f, -0.025701f, 0.002179f, 0.011123f, 0.033558f, 0.053766f, 0.058419f, 0.040907f, 0.034288f, 0.027318f, 0.002747f, -0.074314f, -0.020620f, -0.038360f, -0.009179f, 0.043454f, -0.001433f, 0.006610f, -0.015740f, -0.033086f, 0.004154f, -0.016344f, -0.013041f, -0.036048f, 0.016406f, 0.027068f, -0.011538f, 0.010434f, 0.024482f, 0.013190f, 0.016155f, 0.002727f, 0.015924f, -0.010675f, 0.011133f, -0.005058f, -0.018392f, 0.014427f, 0.018732f, -0.014971f, -0.021218f, 0.001843f, -0.014131f, -0.025518f, 0.020252f, 0.021026f, 0.008886f, 0.027106f, -0.001800f, -0.025251f, -0.030414f, 0.043137f, -0.017221f, -0.160760f, -0.237649f, -0.291763f, -0.230514f, -0.343938f, -0.060754f, -0.125564f, 0.038154f, 0.072312f, 0.249100f, 0.145523f, 0.258044f, 0.262387f, 0.359191f, 0.262204f, 0.266552f, 0.196360f, 0.008517f, -0.056793f, -0.103875f, -0.063852f, -0.214410f, -0.146506f, -0.116669f, -0.119236f, -0.117982f, -0.117755f, -0.114290f, -0.123336f, -0.135356f, -0.100878f, -0.157397f, -0.128694f, -0.112145f, -0.050306f, -0.132246f, -0.040794f, 0.048773f, -0.098227f, -0.047408f, - 0.026553f, 0.021683f, -0.083141f, 0.069482f, 0.089267f, 0.113013f, 0.153266f, 0.155784f, -0.012108f, 0.092670f, 0.150662f, 0.213777f, 0.168516f, 0.336681f, 0.316215f, 0.279303f, 0.226346f, 0.286551f, 0.142324f, 0.228163f, 0.277715f, 0.213905f, 0.136835f, 0.231983f, 0.075348f, 0.077999f, 0.142561f, 0.143016f, 0.101593f, 0.029527f, 0.083066f, -0.027521f, 0.005051f, 0.072716f, -0.082584f, -0.207720f, -0.310474f, -0.122641f, -0.425109f, -0.371851f, -0.327023f, -0.378197f, -0.420767f, -0.352684f, -0.305258f, -0.294490f, -0.202940f, -0.266913f, -0.136979f, -0.169443f, -0.180101f, -0.273200f, -0.220732f, -0.159178f, -0.130328f, -0.110344f, -0.103397f, -0.064794f, 0.025904f, -0.000191f, -0.006124f, 0.077067f, 0.160897f, 0.134179f, 0.135929f, 0.216618f, 0.185262f, 0.192474f, 0.244397f, 0.230445f, 0.196135f, 0.186522f, 0.223773f, 0.190508f, 0.184758f, 0.196009f, 0.203427f, 0.172984f, 0.151317f, 0.139180f, 0.130153f, 0.170027f, 0.133428f, 0.100048f, 0.104664f, 0.078221f, 0.045719f, -0.027103f, -0.056282f, -0.073824f, -0.132196f, -0.113229f, -0.117172f, -0.139618f, -0.147521f, -0.135906f, - -0.088580f, -0.099546f, -0.090016f, -0.091745f, -0.047402f, -0.052772f, -0.063251f, -0.043752f, -0.014511f, -0.016629f, -0.030335f, -0.020082f, 0.000342f, -0.012678f, -0.017124f, -0.015905f, -0.006051f, -0.009492f, -0.013757f, -0.010869f, 0.006723f, 0.010269f, 0.002877f, -0.006467f, 0.000278f, 0.008326f, 0.001994f, -0.007444f, -0.001368f, 0.003282f, 0.001768f, -0.002016f, 0.003158f, 0.002817f, 0.004637f, 0.004010f, 0.000220f, 0.000138f, 0.003834f, 0.004097f, 0.008887f, 0.005518f, -0.001816f, -0.005785f, 0.002256f, 0.004490f, -0.002354f, -0.004541f, -0.002634f, -0.006219f, -0.004688f, -0.005178f, -0.007801f, -0.006668f, -0.006616f, -0.008184f, -0.005178f, 0.000343f, 0.004532f, 0.003025f, 0.007042f, 0.010577f, 0.010361f, 0.008282f, 0.011758f, 0.016522f, 0.015454f, 0.014644f, 0.017240f, 0.016979f, 0.020239f, 0.018041f, 0.016583f, 0.019501f, 0.019521f, 0.014599f, 0.008181f, 0.008348f, 0.006168f, 0.000233f, -0.002012f, -0.004008f, -0.005949f, -0.008641f, -0.009770f, -0.009927f, -0.009434f, -0.009682f, -0.008954f, -0.008162f, -0.007567f, -0.006400f, -0.005698f, -0.004368f, -0.003209f, -0.002596f, - -0.002179f, -0.001650f, -0.001141f, -0.001019f, -0.000831f, -0.000715f} - } -}; -const float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955]={ - { - {0.009861f, 0.004728f, -0.006472f, 0.009783f, -0.005693f, -0.002101f, 0.000249f, -0.003498f, -0.003708f, -0.007780f, 0.001935f, 0.011525f, 0.001291f, 0.001975f, 0.005042f, 0.001088f, -0.004030f, -0.001395f, -0.002356f, -0.002587f, 0.007152f, 0.001824f, 0.001025f, -0.002517f, 0.001401f, -0.000405f, -0.002581f, -0.004504f, 0.006935f, 0.005146f, 0.001075f, -0.001569f, 0.008027f, -0.011147f, -0.004012f, 0.004585f, -0.004473f, 0.009384f, 0.001070f, 0.006590f, 0.000961f, 0.000661f, 0.004438f, -0.003918f, -0.001487f, -0.000245f, -0.000009f, -0.003084f, -0.002277f, 0.004076f, -0.000112f, -0.010291f, 0.009644f, -0.001457f, 0.001722f, -0.008711f, 0.004182f, -0.003921f, 0.003481f, 0.000144f, -0.000199f, -0.003345f, -0.000235f, -0.005087f, 0.005228f, -0.009781f, -0.000996f, 0.006953f, -0.005506f, 0.002520f, 0.010642f, 0.003095f, 0.001154f, -0.005364f, 0.000652f, 0.002699f, -0.001895f, 0.003411f, -0.002124f, -0.001642f, -0.002881f, 0.003075f, -0.003376f, -0.005655f, 0.001854f, 0.000815f, -0.001299f, 0.006680f, -0.001633f, -0.001580f, -0.001568f, 0.002145f, 0.002563f, -0.000287f, 0.000361f, 0.001118f, - -0.001271f, 0.001106f, -0.002534f, -0.001192f, -0.000346f, -0.000659f, -0.001329f, -0.000160f, 0.000002f, -0.000403f, -0.000748f, -0.000175f, -0.001335f, 0.000639f, -0.000633f, 0.001523f, -0.000991f, 0.001105f, 0.001742f, 0.001035f, 0.020367f, 0.003758f, -0.002844f, 0.006221f, -0.003070f, -0.002548f, -0.003252f, -0.001326f, -0.007636f, 0.010824f, 0.006263f, 0.004674f, 0.005042f, 0.004788f, -0.005005f, -0.006756f, 0.009124f, -0.001953f, -0.007055f, -0.013453f, 0.002218f, -0.003978f, 0.004240f, 0.000092f, -0.001126f, -0.003004f, 0.004253f, -0.004977f, -0.002501f, 0.006662f, 0.012656f, 0.003303f, 0.005770f, 0.001108f, 0.006376f, -0.001304f, 0.006784f, 0.004280f, 0.000787f, 0.003797f, 0.000360f, 0.001127f, 0.000374f, 0.009253f, 0.001983f, 0.002448f, -0.002059f, 0.001387f, -0.000626f, -0.001272f, 0.007524f, 0.008600f, -0.003054f, -0.003136f, 0.001761f, 0.007918f, -0.012818f, -0.000650f, -0.003457f, -0.009487f, -0.003836f, 0.001349f, -0.004020f, 0.004255f, 0.003463f, 0.000311f, -0.005762f, 0.002728f, -0.001197f, -0.005518f, 0.007157f, -0.009792f, -0.004603f, -0.010445f, -0.005144f, -0.001455f, - 0.001602f, 0.010603f, -0.004525f, -0.002720f, 0.003313f, -0.001633f, -0.002468f, 0.005042f, -0.000782f, -0.000170f, -0.002238f, -0.003506f, -0.004346f, -0.001134f, 0.003785f, 0.001527f, 0.001867f, 0.001773f, 0.001378f, 0.000175f, -0.000571f, -0.000229f, 0.000354f, 0.002680f, 0.001340f, 0.001433f, -0.000845f, 0.000263f, 0.000965f, 0.000795f, 0.000061f, 0.000218f, 0.000070f, -0.000152f, -0.000300f, -0.001793f, -0.001352f, -0.000906f, 0.001085f, 0.000907f, -0.000346f, 0.001719f, 0.006282f, 0.002583f, -0.012275f, -0.001293f, 0.001964f, 0.008697f, -0.002534f, -0.015507f, 0.012519f, -0.014660f, 0.000895f, -0.006468f, -0.004915f, -0.015539f, -0.010127f, -0.006131f, -0.003768f, 0.006234f, 0.002271f, -0.010270f, 0.001558f, -0.005545f, 0.000198f, -0.000471f, 0.004302f, 0.000742f, -0.004316f, 0.000612f, 0.001202f, 0.002381f, -0.003019f, -0.002281f, -0.000825f, -0.005139f, -0.007517f, 0.010219f, 0.004905f, 0.001287f, -0.001313f, 0.008688f, 0.007721f, -0.008799f, 0.002540f, 0.000714f, -0.001550f, -0.005177f, 0.001252f, -0.009089f, 0.002120f, -0.001825f, -0.007228f, 0.008933f, 0.000253f, -0.000823f, - 0.011428f, -0.009965f, 0.009009f, 0.003170f, -0.001230f, -0.007418f, 0.002213f, -0.001179f, -0.007618f, -0.006551f, 0.000148f, -0.002941f, -0.003374f, -0.010784f, 0.000580f, 0.002144f, 0.005079f, -0.003226f, 0.004729f, 0.001279f, -0.001804f, -0.001622f, -0.006217f, 0.005304f, 0.001192f, 0.000658f, -0.010385f, 0.005346f, -0.000844f, 0.000602f, -0.005333f, 0.000024f, -0.009538f, 0.001022f, 0.002123f, 0.001148f, -0.000767f, 0.000797f, -0.000128f, -0.000078f, -0.001615f, 0.000375f, -0.000444f, 0.001963f, 0.001263f, 0.000726f, 0.002005f, -0.000123f, 0.000717f, 0.001808f, 0.001227f, -0.001514f, -0.000506f, 0.002958f, -0.001057f, 0.000459f, -0.001028f, 0.001004f, -0.003533f, -0.001052f, -0.001053f, 0.001303f, -0.000607f, -0.022894f, -0.021626f, 0.008366f, 0.014360f, 0.008652f, -0.019476f, 0.013867f, -0.004689f, -0.001799f, 0.001259f, -0.009057f, -0.006828f, 0.016368f, -0.000197f, -0.000047f, 0.001278f, -0.000408f, 0.005384f, -0.008169f, 0.004985f, -0.004334f, 0.004473f, 0.007487f, -0.004936f, -0.001363f, 0.004384f, -0.001264f, 0.007861f, -0.002450f, 0.003439f, 0.000667f, -0.000756f, 0.000644f, - -0.006626f, -0.009283f, 0.008798f, 0.001134f, -0.001643f, 0.000066f, -0.008648f, -0.010829f, -0.000256f, 0.000199f, 0.005681f, -0.010066f, -0.008527f, -0.001837f, -0.017824f, 0.006932f, -0.001360f, 0.003640f, -0.001324f, -0.004308f, 0.002784f, 0.022894f, 0.012761f, 0.006643f, -0.006811f, 0.009022f, -0.000051f, -0.011761f, 0.000087f, -0.012274f, 0.010485f, 0.001439f, 0.001287f, -0.006991f, 0.000121f, 0.007141f, 0.002669f, 0.001432f, 0.000950f, 0.000804f, 0.007723f, 0.005353f, 0.001041f, 0.005217f, 0.003153f, 0.004169f, 0.011280f, 0.004670f, 0.005579f, -0.005191f, 0.004275f, 0.003158f, -0.001286f, 0.008861f, 0.002742f, -0.000009f, -0.000738f, 0.002659f, 0.004762f, 0.000595f, -0.000001f, -0.001726f, 0.001189f, 0.003905f, 0.002201f, -0.000861f, 0.000440f, -0.003164f, 0.000973f, 0.000830f, -0.001365f, 0.000339f, -0.000140f, -0.000031f, 0.002231f, -0.000388f, 0.002327f, 0.003151f, 0.001183f, -0.001795f, -0.003463f, 0.000617f, -0.002161f, 0.001738f, 0.001592f, -0.002194f, 0.000978f, -0.005115f, -0.032826f, -0.002518f, -0.007883f, -0.001168f, -0.005472f, -0.018651f, -0.000777f, -0.005031f, - -0.007665f, -0.017487f, -0.002139f, 0.012381f, -0.008652f, 0.008137f, -0.001431f, 0.011480f, -0.003884f, 0.009323f, -0.003067f, -0.009276f, -0.002471f, 0.000972f, -0.004048f, -0.008343f, -0.006675f, -0.008202f, 0.000275f, -0.007487f, 0.002730f, 0.000858f, 0.000755f, 0.003507f, -0.005606f, -0.007543f, 0.010856f, -0.001014f, 0.003224f, 0.000088f, -0.008512f, -0.005428f, -0.006008f, 0.000267f, -0.004313f, 0.007539f, 0.007692f, 0.001244f, -0.010431f, -0.003445f, 0.019194f, 0.004750f, -0.008118f, -0.006484f, -0.004111f, -0.007141f, -0.003761f, 0.014969f, 0.009123f, -0.010912f, 0.006658f, 0.008819f, 0.013054f, -0.003395f, 0.005303f, -0.000828f, 0.000110f, -0.005312f, -0.010879f, -0.001993f, 0.008014f, 0.000800f, 0.015528f, 0.010999f, 0.000728f, 0.003583f, 0.013093f, -0.010461f, -0.004794f, -0.003103f, -0.006441f, 0.004596f, 0.002018f, 0.002096f, -0.005649f, 0.003805f, -0.004109f, 0.004220f, -0.008028f, -0.000396f, -0.000757f, -0.003165f, -0.000213f, -0.000708f, 0.003917f, 0.001057f, 0.000863f, -0.003454f, -0.002345f, -0.001126f, -0.003259f, -0.000155f, -0.004692f, -0.002734f, 0.000164f, -0.000379f, - 0.002882f, -0.002000f, 0.000767f, -0.000975f, 0.001552f, 0.001131f, 0.003992f, -0.003339f, 0.042048f, 0.028307f, -0.008748f, -0.001534f, 0.000063f, -0.001093f, -0.004855f, 0.005934f, 0.014372f, 0.012222f, 0.006280f, -0.022027f, -0.009851f, 0.002898f, 0.001248f, 0.009444f, -0.016658f, 0.003421f, 0.022508f, 0.015233f, -0.002619f, 0.005469f, -0.002010f, -0.007546f, -0.010421f, 0.000646f, -0.008882f, -0.005100f, 0.002567f, 0.007067f, -0.006516f, -0.012018f, -0.005769f, 0.002149f, 0.011078f, 0.015573f, -0.002973f, -0.016320f, -0.003490f, -0.005788f, -0.016469f, -0.000916f, -0.000516f, -0.007819f, 0.002703f, 0.004508f, 0.009597f, -0.013719f, 0.005621f, 0.007194f, 0.001537f, -0.013263f, -0.009926f, 0.004626f, 0.000571f, 0.003545f, -0.001467f, -0.001223f, -0.000474f, -0.007312f, 0.003635f, 0.003947f, -0.005175f, 0.009347f, 0.010946f, 0.015067f, 0.003588f, 0.001210f, 0.014105f, 0.023096f, 0.003668f, 0.003239f, 0.003916f, 0.013621f, 0.001528f, 0.008099f, 0.022710f, 0.006835f, 0.004181f, 0.000724f, -0.004294f, -0.019316f, 0.002594f, -0.000422f, -0.003156f, -0.003618f, 0.002386f, -0.002595f, - 0.004797f, 0.002233f, -0.002570f, -0.001315f, -0.000658f, 0.004017f, 0.002492f, -0.000980f, -0.000756f, 0.002768f, 0.005771f, 0.000147f, -0.001446f, 0.002121f, 0.000222f, -0.002590f, -0.005366f, 0.004003f, -0.005052f, 0.003191f, 0.002138f, 0.003859f, -0.000250f, -0.000515f, 0.000081f, 0.001335f, -0.007047f, 0.000315f, 0.001031f, -0.000556f, 0.000819f, 0.022267f, 0.000377f, 0.004731f, 0.005276f, 0.010799f, -0.004277f, 0.006919f, -0.005868f, -0.003557f, -0.018361f, 0.007400f, 0.012363f, -0.011176f, 0.009358f, -0.004556f, -0.016099f, 0.016775f, 0.009785f, -0.002849f, 0.009896f, 0.019626f, 0.013581f, -0.009944f, -0.005703f, 0.009953f, 0.003029f, -0.002102f, 0.007494f, 0.007069f, 0.010056f, 0.000762f, -0.004513f, -0.008578f, -0.015524f, -0.000386f, -0.012898f, 0.001700f, -0.004250f, 0.007286f, -0.010270f, -0.023333f, 0.005089f, -0.005696f, 0.010757f, 0.002852f, 0.000782f, -0.006369f, -0.013885f, -0.011471f, -0.001160f, -0.001063f, -0.010485f, 0.014798f, 0.018923f, 0.019834f, 0.007907f, -0.013989f, -0.001302f, 0.018800f, 0.001739f, -0.003095f, 0.008638f, -0.002318f, -0.004763f, -0.017602f, - 0.009711f, 0.005263f, 0.025639f, 0.012003f, -0.017511f, 0.005988f, 0.006508f, -0.001722f, -0.000375f, 0.006364f, -0.004301f, 0.001557f, -0.007534f, -0.018258f, 0.016566f, 0.003168f, 0.009855f, 0.004928f, -0.008716f, 0.014196f, -0.003171f, 0.003482f, 0.000713f, -0.002982f, 0.000492f, 0.000560f, 0.001075f, 0.007490f, 0.002395f, 0.001535f, 0.000593f, -0.002385f, -0.003000f, -0.003715f, -0.002312f, 0.002668f, -0.001256f, -0.000062f, -0.001504f, 0.002456f, -0.002189f, -0.000995f, 0.000190f, -0.000151f, 0.000957f, -0.003924f, 0.004683f, -0.001853f, 0.004119f, 0.001500f, -0.002194f, -0.002545f, 0.005828f, -0.005219f, 0.004676f, -0.001168f, -0.006779f, -0.011431f, -0.003029f, -0.002958f, -0.019611f, 0.000931f, 0.002449f, 0.009781f, -0.003682f, -0.008525f, 0.003558f, 0.001014f, 0.004679f, 0.000093f, 0.010702f, 0.004224f, 0.007397f, 0.001193f, -0.000804f, 0.006278f, 0.003730f, -0.019419f, -0.005966f, -0.027733f, 0.001264f, -0.005231f, 0.003204f, 0.004828f, 0.000375f, 0.013144f, 0.003367f, 0.018797f, 0.002319f, -0.022523f, 0.000454f, -0.009114f, -0.003720f, -0.001152f, -0.003377f, -0.001242f, - -0.017805f, 0.003782f, -0.008582f, 0.021341f, -0.022269f, 0.012252f, -0.004857f, -0.019106f, -0.003581f, -0.013467f, -0.002905f, -0.004174f, -0.020254f, 0.005698f, 0.006161f, -0.003814f, -0.003384f, -0.001403f, 0.007117f, -0.016180f, 0.000366f, 0.014946f, 0.002738f, 0.020836f, 0.034174f, 0.014016f, -0.031047f, -0.041493f, 0.020010f, 0.008858f, 0.030836f, -0.006534f, 0.014764f, 0.003032f, 0.014659f, 0.020478f, 0.026482f, -0.014258f, 0.007586f, 0.019611f, -0.016253f, 0.002862f, -0.002158f, -0.002186f, 0.001404f, 0.013951f, -0.002237f, 0.004660f, -0.009229f, 0.003144f, -0.007141f, -0.007602f, -0.003381f, -0.006382f, 0.000921f, -0.003837f, -0.010543f, -0.000567f, 0.006813f, 0.004124f, -0.002057f, -0.002122f, -0.001672f, -0.000042f, 0.003098f, 0.003189f, -0.002826f, -0.004273f, -0.001936f, 0.005792f, -0.001607f, 0.005600f, 0.000777f, 0.000638f, -0.001625f, 0.001187f, 0.001567f, 0.000264f, 0.001448f, 0.000051f, -0.005103f, -0.005046f, -0.003296f, 0.001300f, 0.004809f, -0.007275f, -0.004857f, -0.002472f, 0.002724f, -0.003565f, -0.002850f, -0.038137f, 0.028544f, 0.004936f, -0.004746f, -0.000824f, - -0.016904f, -0.014331f, 0.014995f, -0.004247f, -0.004588f, 0.015021f, -0.011169f, -0.012546f, 0.000888f, 0.014924f, 0.006678f, -0.005212f, 0.000643f, -0.009016f, -0.000991f, 0.000891f, 0.008337f, 0.000048f, -0.019187f, -0.019559f, 0.004486f, -0.002902f, 0.004788f, -0.002256f, 0.007875f, 0.014615f, 0.028015f, -0.000782f, 0.017419f, -0.004608f, 0.004997f, 0.011567f, -0.011501f, 0.022402f, -0.003182f, -0.014520f, -0.019910f, -0.004198f, -0.016515f, -0.021300f, -0.005731f, 0.009248f, -0.006419f, -0.016646f, 0.008152f, 0.011176f, 0.018127f, 0.022969f, -0.019053f, 0.006851f, -0.005307f, -0.017965f, 0.006578f, -0.020038f, -0.003615f, -0.032453f, 0.012773f, -0.009997f, 0.004722f, -0.006218f, 0.005021f, -0.034881f, -0.034348f, -0.021292f, -0.008096f, 0.018572f, -0.018510f, 0.035671f, -0.012801f, 0.003115f, -0.003422f, 0.006254f, -0.003361f, -0.026068f, 0.003637f, 0.002489f, 0.006908f, 0.005435f, 0.002917f, 0.009399f, -0.005775f, -0.009294f, -0.000064f, -0.000123f, -0.008651f, 0.003351f, -0.011112f, 0.005686f, 0.003563f, 0.004500f, -0.001754f, -0.000536f, -0.003507f, -0.009054f, -0.006334f, -0.004054f, - -0.004004f, 0.005073f, -0.003985f, -0.010852f, 0.003363f, 0.003798f, -0.002092f, 0.006364f, -0.000797f, -0.002665f, -0.000263f, 0.001028f, -0.003226f, -0.003554f, 0.003459f, 0.004416f, 0.003525f, 0.001065f, -0.007742f, -0.005996f, -0.001900f, -0.006590f, 0.001907f, -0.000113f, -0.000376f, -0.009266f, -0.004653f, -0.001864f, 0.001918f, -0.000081f, -0.007203f, -0.001500f, -0.000180f, -0.005679f, 0.032473f, 0.001362f, 0.012570f, 0.007919f, 0.003870f, 0.018134f, 0.003072f, -0.026596f, 0.013072f, 0.003242f, 0.012503f, -0.001688f, -0.018826f, 0.027146f, 0.015446f, 0.010853f, -0.002124f, -0.008891f, 0.004048f, -0.002522f, -0.014842f, 0.009424f, 0.007414f, -0.009033f, 0.011592f, 0.017089f, 0.000944f, 0.006119f, 0.017988f, -0.019575f, 0.005044f, -0.006930f, 0.008324f, -0.036375f, 0.011416f, 0.016756f, -0.005570f, 0.004090f, 0.017751f, 0.008743f, 0.000725f, 0.005210f, -0.017514f, 0.004117f, -0.010130f, 0.000300f, 0.005640f, 0.002339f, -0.007768f, 0.033855f, -0.005755f, -0.007019f, -0.007617f, -0.030480f, -0.011763f, -0.018871f, -0.020890f, -0.004603f, 0.029929f, 0.031918f, -0.002813f, 0.009513f, - 0.013345f, -0.027586f, -0.008393f, 0.021505f, 0.018531f, -0.011259f, -0.007247f, -0.027176f, -0.008331f, -0.010593f, -0.012526f, -0.015547f, 0.004341f, -0.027714f, 0.004806f, 0.025052f, 0.036024f, 0.010494f, -0.010189f, -0.001230f, 0.019252f, -0.007122f, -0.012575f, 0.000759f, -0.001346f, -0.006159f, -0.008345f, 0.000785f, -0.000588f, 0.003740f, 0.005954f, 0.002793f, -0.002787f, 0.001162f, 0.003311f, 0.001872f, -0.000212f, -0.005702f, -0.011130f, 0.002772f, -0.000424f, -0.005145f, 0.008943f, 0.002232f, 0.005138f, -0.005339f, 0.007634f, -0.005685f, -0.003716f, -0.006338f, 0.006105f, 0.000684f, 0.004577f, 0.008119f, -0.000477f, -0.004906f, -0.002124f, 0.003838f, 0.002196f, -0.000846f, 0.000487f, 0.000720f, 0.001494f, -0.000966f, -0.001478f, 0.003909f, 0.006121f, 0.015138f, 0.007368f, -0.002852f, -0.010152f, 0.006355f, 0.001606f, -0.013347f, -0.019928f, -0.021305f, -0.008600f, -0.020835f, -0.008754f, -0.008433f, 0.000257f, -0.019831f, 0.004367f, 0.008385f, 0.000846f, -0.022652f, 0.006971f, -0.028111f, 0.008610f, 0.015715f, 0.000363f, 0.024414f, 0.000654f, -0.007255f, -0.004544f, 0.016463f, - -0.006013f, 0.022654f, 0.007973f, -0.007841f, -0.007857f, 0.003985f, -0.011644f, -0.006246f, 0.000761f, 0.021413f, -0.000811f, 0.011310f, 0.006348f, 0.001927f, 0.014940f, -0.006761f, -0.013878f, 0.006088f, -0.009969f, -0.004607f, -0.027028f, 0.015137f, -0.009566f, -0.007994f, -0.005567f, -0.029724f, 0.035399f, 0.009169f, -0.004350f, 0.015420f, 0.004938f, 0.007479f, -0.015850f, -0.023692f, -0.027026f, -0.013043f, 0.001266f, -0.027235f, 0.009996f, 0.019628f, -0.030625f, -0.011199f, 0.011029f, -0.014107f, 0.007202f, 0.033790f, 0.000921f, -0.005573f, -0.009173f, 0.007557f, -0.018592f, 0.011950f, 0.006323f, -0.016725f, 0.005263f, 0.011698f, -0.006903f, -0.019797f, -0.017028f, -0.008932f, -0.000836f, 0.005256f, 0.004381f, 0.003546f, -0.003647f, -0.005068f, -0.002672f, 0.004193f, 0.000001f, -0.002942f, -0.011366f, -0.013430f, -0.003878f, 0.000736f, -0.009734f, -0.011546f, -0.008117f, -0.004968f, -0.004613f, -0.010167f, -0.008878f, -0.004836f, -0.006490f, -0.012940f, 0.001914f, 0.011718f, -0.001518f, -0.001357f, -0.005110f, -0.003859f, 0.003651f, -0.004739f, 0.000571f, -0.010292f, 0.000023f, -0.003181f, - -0.005749f, -0.000302f, -0.005424f, 0.002837f, 0.004302f, -0.004516f, 0.006687f, -0.005253f, -0.002329f, -0.005429f, -0.000794f, 0.000477f, 0.009634f, 0.021138f, 0.054241f, 0.056079f, 0.017555f, 0.034644f, -0.023564f, -0.024682f, -0.005191f, -0.003990f, 0.002502f, 0.007564f, 0.018494f, 0.032044f, 0.011099f, 0.029632f, 0.003780f, 0.008703f, 0.004923f, -0.008671f, 0.014151f, -0.000728f, 0.005907f, 0.001957f, -0.014854f, -0.002258f, -0.007770f, -0.016931f, -0.009896f, -0.000091f, 0.002079f, -0.022332f, -0.008634f, 0.027347f, 0.020373f, 0.014051f, 0.023869f, -0.014878f, 0.000566f, -0.040605f, 0.002281f, 0.034228f, -0.006342f, -0.007217f, 0.004556f, -0.004041f, 0.027453f, -0.002477f, -0.004117f, 0.020534f, -0.024497f, -0.040653f, -0.015868f, 0.003287f, -0.021302f, 0.015723f, 0.022829f, -0.032074f, -0.011648f, -0.000041f, -0.000216f, -0.045885f, -0.028655f, 0.014313f, 0.006675f, -0.003703f, 0.015042f, -0.020182f, -0.011841f, -0.028435f, 0.007058f, 0.008768f, 0.002698f, 0.001680f, -0.018347f, -0.031307f, 0.026032f, -0.042470f, 0.012683f, -0.015721f, 0.040652f, 0.003946f, 0.017149f, -0.011732f, - -0.015577f, 0.011467f, 0.005784f, 0.017846f, -0.016867f, -0.003325f, 0.012581f, -0.001018f, -0.009199f, -0.009095f, -0.009039f, 0.000702f, 0.009742f, 0.010170f, -0.011272f, -0.005014f, -0.001566f, -0.015613f, -0.005166f, 0.002638f, -0.001375f, 0.001188f, -0.007771f, -0.013711f, -0.001613f, 0.000196f, 0.010933f, 0.003147f, -0.006260f, 0.008063f, 0.001715f, 0.004041f, -0.014630f, 0.002929f, -0.008613f, 0.006967f, 0.001628f, 0.007388f, 0.012319f, 0.003604f, -0.008120f, -0.016933f, 0.005584f, 0.005547f, -0.052391f, -0.037847f, 0.026246f, -0.005544f, 0.047643f, -0.011684f, 0.039241f, -0.031584f, 0.001046f, 0.013979f, -0.003021f, 0.001603f, 0.004695f, -0.002540f, -0.023535f, 0.008204f, 0.008990f, 0.010256f, 0.011876f, -0.007359f, 0.019524f, -0.017743f, -0.012936f, -0.010183f, 0.027423f, -0.015176f, -0.004984f, 0.002355f, -0.000471f, -0.014283f, 0.012285f, -0.015927f, -0.018742f, -0.035619f, 0.003342f, 0.006410f, -0.024021f, -0.011358f, 0.011723f, -0.004987f, 0.006313f, 0.001823f, 0.028156f, 0.001845f, 0.021218f, 0.009307f, 0.001015f, 0.016808f, 0.003951f, 0.005748f, -0.031710f, 0.032655f, - 0.011716f, 0.025559f, -0.015493f, 0.006699f, -0.016966f, 0.026516f, 0.020322f, 0.032374f, 0.005296f, -0.008634f, -0.023505f, -0.001594f, 0.004282f, -0.020232f, 0.028679f, 0.004478f, 0.004562f, 0.030625f, 0.007004f, -0.009348f, -0.012157f, -0.001134f, 0.018408f, 0.021933f, -0.007049f, 0.027384f, -0.032800f, -0.034638f, -0.014967f, 0.007881f, -0.010385f, 0.014904f, -0.003616f, 0.007934f, 0.026502f, -0.001320f, 0.013226f, -0.011126f, -0.009895f, 0.011377f, -0.000870f, 0.018337f, -0.005567f, -0.000276f, -0.005527f, -0.011581f, 0.002468f, -0.006884f, -0.002517f, 0.007452f, 0.002749f, -0.010552f, -0.009353f, 0.005379f, 0.014162f, 0.014348f, -0.001302f, 0.011717f, 0.013084f, -0.018295f, 0.008621f, 0.016934f, 0.013643f, 0.007401f, -0.013345f, -0.016586f, -0.016905f, -0.017429f, -0.016911f, 0.001220f, -0.005776f, -0.002616f, 0.002133f, -0.012822f, 0.009145f, 0.007876f, -0.006274f, 0.009407f, 0.003644f, 0.004311f, -0.011766f, 0.009784f, 0.024189f, -0.057059f, -0.002607f, 0.029708f, -0.019013f, -0.006368f, 0.021882f, -0.023788f, -0.048278f, 0.009555f, 0.008163f, 0.007432f, -0.006336f, -0.028589f, - 0.007155f, 0.008051f, 0.002098f, 0.015779f, -0.051196f, 0.023394f, -0.011947f, 0.012134f, -0.029214f, 0.023623f, -0.036954f, -0.023641f, 0.014226f, -0.009760f, -0.004388f, -0.028137f, 0.021921f, 0.028876f, -0.000187f, 0.003112f, -0.013453f, 0.043357f, 0.010663f, 0.011725f, -0.008025f, -0.037763f, -0.008222f, 0.020639f, -0.003922f, 0.030953f, 0.000121f, -0.011427f, 0.007360f, -0.002334f, 0.019357f, -0.037393f, -0.004653f, -0.028723f, 0.030716f, -0.011675f, 0.010186f, -0.001047f, -0.001272f, -0.033929f, -0.012026f, 0.029448f, 0.009289f, 0.002453f, -0.009117f, 0.000671f, 0.003596f, -0.043454f, -0.044970f, 0.047460f, -0.021364f, -0.051998f, 0.020865f, 0.024238f, -0.041892f, -0.054772f, -0.038273f, -0.036795f, 0.006275f, 0.014250f, -0.004789f, -0.035393f, -0.001369f, -0.019078f, -0.009086f, -0.025751f, -0.001663f, 0.002269f, 0.002315f, -0.005385f, 0.023863f, -0.013405f, 0.009227f, -0.011436f, -0.000814f, 0.006284f, -0.006410f, -0.001277f, -0.014535f, 0.018490f, -0.004677f, 0.006258f, -0.010740f, -0.015606f, -0.003450f, 0.007014f, 0.008163f, 0.002274f, -0.015152f, 0.008417f, -0.002431f, -0.012331f, - 0.011358f, -0.018472f, -0.003912f, -0.011591f, 0.017811f, -0.008395f, -0.020421f, 0.008320f, -0.008292f, -0.009110f, -0.027037f, -0.001857f, 0.005649f, 0.021934f, 0.008818f, -0.013691f, -0.007127f, 0.001734f, -0.003946f, -0.007535f, 0.003762f, -0.001537f, -0.005487f, -0.005540f, -0.002137f, 0.021949f, -0.030893f, -0.017846f, -0.032319f, -0.003427f, 0.007077f, -0.044332f, 0.007400f, -0.021886f, 0.061455f, 0.002813f, -0.054622f, -0.013038f, 0.027001f, 0.015901f, 0.013340f, 0.027296f, 0.028169f, -0.040070f, -0.009797f, -0.015742f, 0.037525f, -0.013469f, 0.043755f, -0.000445f, -0.024780f, -0.020370f, -0.038527f, -0.044904f, 0.002939f, 0.004806f, -0.006995f, -0.023316f, -0.009494f, 0.002633f, 0.007326f, 0.014923f, -0.021517f, 0.010707f, -0.025355f, -0.030468f, 0.006132f, -0.006769f, -0.007781f, -0.031749f, -0.029555f, -0.014670f, -0.008969f, 0.042350f, 0.004174f, 0.014024f, 0.024200f, -0.001045f, 0.053871f, 0.021446f, -0.017672f, 0.002477f, 0.027829f, -0.011080f, 0.035175f, -0.009473f, 0.004578f, 0.002148f, -0.047296f, -0.048857f, 0.007357f, 0.033714f, 0.000896f, -0.010845f, -0.052945f, 0.003169f, - 0.018305f, 0.011158f, -0.018071f, -0.015080f, -0.010410f, 0.006256f, -0.022794f, 0.056174f, 0.031957f, 0.034360f, 0.007009f, -0.040047f, 0.014624f, 0.017947f, 0.056308f, 0.012735f, 0.005877f, 0.022343f, 0.009769f, -0.009377f, 0.000645f, 0.017077f, -0.001474f, 0.002150f, 0.005721f, -0.014457f, -0.009871f, 0.016612f, 0.000601f, -0.013770f, 0.017811f, -0.011159f, -0.003948f, -0.008590f, -0.008039f, 0.015546f, -0.010037f, -0.004724f, 0.008449f, -0.017118f, 0.007237f, -0.001714f, -0.009574f, 0.020567f, -0.007370f, -0.000162f, -0.026347f, 0.016000f, -0.007976f, -0.007049f, -0.016955f, -0.024379f, 0.003937f, -0.009917f, 0.017153f, -0.000696f, 0.010217f, 0.006380f, 0.000480f, -0.010225f, 0.000373f, 0.015287f, -0.000078f, -0.026541f, -0.023940f, 0.050721f, -0.015626f, -0.018955f, -0.002552f, -0.014133f, -0.034495f, 0.000631f, 0.024091f, -0.059527f, -0.000888f, 0.015318f, 0.019099f, -0.020360f, 0.013601f, -0.034114f, 0.002747f, -0.008869f, 0.010775f, -0.030556f, 0.019099f, -0.051966f, 0.008635f, 0.001348f, 0.029524f, 0.027576f, 0.013892f, -0.019449f, 0.021734f, -0.006386f, 0.024264f, -0.026336f, - 0.004288f, 0.030707f, 0.024523f, -0.014500f, 0.005150f, 0.000722f, -0.006680f, 0.014877f, -0.005663f, -0.017957f, -0.019822f, 0.014191f, -0.035922f, 0.023787f, 0.005709f, -0.038709f, 0.036583f, 0.034848f, 0.032963f, 0.011814f, -0.016909f, 0.042189f, 0.005219f, 0.018117f, -0.025777f, -0.022514f, -0.024703f, 0.007699f, 0.009778f, 0.015114f, -0.034710f, 0.003374f, 0.025781f, -0.066924f, 0.002653f, -0.021981f, 0.042082f, 0.027046f, 0.021202f, -0.005922f, 0.027942f, -0.026241f, -0.001244f, -0.018269f, -0.040106f, -0.001683f, -0.036922f, -0.030993f, 0.018278f, 0.049458f, -0.046341f, -0.011014f, -0.008361f, 0.049656f, -0.012143f, 0.021732f, -0.014103f, -0.008691f, -0.001774f, 0.017584f, -0.010253f, -0.004306f, 0.001561f, 0.011992f, 0.008940f, 0.006321f, -0.006488f, 0.001847f, 0.005311f, 0.024622f, -0.019330f, 0.020554f, -0.004338f, 0.015048f, 0.000157f, 0.004028f, 0.005358f, 0.009490f, -0.012743f, -0.002874f, -0.002366f, -0.015953f, -0.014168f, -0.014149f, 0.009976f, 0.007962f, -0.002788f, -0.006325f, -0.008112f, -0.011145f, -0.006807f, 0.000983f, -0.004848f, -0.000068f, 0.014940f, -0.000295f, - -0.026970f, 0.012777f, -0.015727f, -0.002360f, 0.011559f, -0.004421f, 0.044845f, 0.008974f, 0.023018f, -0.064336f, 0.030163f, -0.036234f, 0.048868f, -0.005365f, 0.019388f, 0.036037f, -0.038890f, 0.069877f, 0.051090f, 0.037577f, -0.016729f, 0.009781f, 0.048835f, -0.012584f, -0.014961f, -0.011723f, -0.001995f, -0.036923f, 0.010200f, -0.019853f, -0.043698f, 0.042391f, 0.014704f, 0.011338f, 0.005896f, 0.009501f, 0.017109f, 0.044655f, 0.009995f, -0.028530f, -0.001884f, -0.029587f, 0.006290f, 0.003809f, -0.050791f, -0.002586f, 0.028448f, 0.001637f, -0.003160f, -0.016055f, 0.055049f, 0.010847f, 0.023738f, 0.011620f, -0.028934f, -0.021425f, -0.015581f, 0.033506f, 0.020520f, -0.007171f, 0.021078f, -0.003407f, -0.036634f, 0.035661f, 0.004899f, 0.040935f, 0.005084f, 0.003874f, 0.001334f, -0.055213f, 0.007991f, 0.001081f, 0.006586f, 0.033722f, -0.012964f, 0.053284f, -0.081023f, -0.014855f, 0.061333f, -0.025001f, 0.020639f, -0.028138f, -0.042885f, -0.035338f, 0.025712f, -0.024272f, 0.024010f, -0.037940f, -0.007517f, 0.005956f, -0.008725f, -0.015140f, -0.004225f, -0.004791f, 0.016920f, 0.037407f, - 0.004521f, 0.022049f, -0.006797f, -0.004134f, 0.028086f, -0.004375f, -0.007334f, 0.007262f, -0.013239f, 0.011886f, 0.024531f, -0.016394f, -0.001915f, -0.006612f, 0.004936f, 0.004144f, 0.011931f, 0.042307f, -0.007201f, 0.014671f, 0.001320f, 0.009895f, 0.016062f, 0.007426f, 0.002955f, 0.023393f, 0.026246f, -0.007528f, -0.003048f, 0.010255f, 0.006140f, 0.008828f, -0.032484f, -0.003096f, 0.031968f, -0.007392f, 0.007095f, 0.011964f, -0.001175f, 0.032552f, 0.011271f, -0.065878f, -0.079152f, -0.006838f, -0.037186f, 0.005151f, 0.022328f, -0.031481f, 0.009062f, -0.048159f, 0.020839f, -0.026472f, -0.132197f, -0.008381f, 0.080371f, -0.034604f, -0.015104f, 0.081042f, -0.019169f, 0.004471f, 0.096781f, -0.023099f, 0.021260f, 0.009166f, -0.014343f, 0.078176f, -0.063057f, -0.008028f, -0.001903f, -0.010977f, -0.012841f, -0.012791f, -0.001752f, 0.025507f, -0.014502f, -0.042534f, 0.000292f, 0.000918f, 0.012400f, 0.015595f, 0.002628f, 0.035121f, -0.001534f, 0.016187f, -0.009764f, -0.042227f, 0.029274f, -0.005150f, -0.043716f, 0.001705f, 0.024910f, 0.076940f, 0.038712f, 0.064680f, 0.001165f, 0.015939f, - 0.030667f, 0.007306f, -0.003970f, 0.060449f, -0.003384f, -0.023546f, 0.070558f, 0.012360f, 0.012305f, 0.000502f, -0.010185f, 0.040414f, -0.000218f, -0.023533f, -0.026752f, -0.005520f, -0.005463f, 0.061181f, -0.041733f, 0.005326f, 0.007667f, -0.010926f, 0.071669f, 0.000552f, -0.046203f, 0.007664f, 0.023270f, -0.033841f, -0.001842f, 0.034350f, 0.028179f, -0.017447f, 0.002506f, -0.019716f, 0.016360f, -0.005382f, 0.002050f, -0.019421f, 0.017741f, 0.000126f, -0.002193f, -0.028198f, 0.011397f, 0.009475f, -0.018536f, 0.001314f, 0.006421f, -0.009598f, -0.006470f, 0.021557f, 0.003162f, 0.011951f, -0.008201f, 0.006207f, 0.037368f, -0.034297f, -0.015791f, -0.011368f, 0.040422f, 0.014975f, 0.021289f, -0.024747f, -0.022673f, -0.009321f, -0.002933f, -0.029995f, -0.033691f, 0.039917f, 0.015982f, -0.023755f, -0.022174f, -0.013639f, -0.000467f, -0.023581f, -0.020705f, 0.000088f, 0.005970f, 0.015000f, -0.004159f, -0.007693f, 0.012219f, -0.003205f, 0.003833f, 0.044996f, 0.036115f, -0.073924f, -0.036282f, 0.056983f, -0.010561f, -0.055379f, -0.000595f, 0.001235f, 0.020008f, 0.060257f, 0.053430f, -0.032869f, - 0.009825f, -0.007398f, 0.000395f, -0.000481f, -0.034728f, 0.052280f, -0.015574f, -0.034153f, 0.012109f, -0.024498f, 0.029592f, 0.002667f, 0.042114f, -0.012929f, -0.040081f, -0.036100f, 0.031898f, -0.015317f, 0.041549f, -0.011105f, 0.026896f, -0.027297f, -0.021326f, -0.012947f, 0.002930f, -0.034278f, 0.008375f, 0.001885f, 0.000519f, 0.033642f, -0.000430f, 0.011287f, -0.023362f, 0.016715f, -0.036843f, 0.039478f, -0.035441f, 0.023498f, 0.011878f, 0.033202f, -0.055444f, 0.001973f, 0.004647f, -0.016669f, -0.040059f, -0.067753f, -0.011363f, -0.057800f, -0.022267f, -0.046236f, -0.021583f, -0.084571f, -0.026309f, 0.038509f, 0.048657f, 0.026579f, 0.028337f, -0.004476f, 0.030791f, -0.060217f, -0.013763f, 0.009466f, 0.038998f, 0.010859f, -0.082922f, -0.003161f, -0.036422f, -0.024165f, 0.097063f, 0.065318f, -0.045927f, -0.018596f, -0.032222f, 0.010941f, -0.085419f, 0.005387f, 0.017936f, -0.024304f, -0.025267f, 0.015695f, 0.005108f, 0.000973f, -0.016295f, -0.014260f, -0.013927f, -0.014094f, 0.026833f, 0.024652f, -0.001591f, -0.006688f, -0.026149f, -0.030028f, -0.006236f, -0.007382f, 0.010367f, 0.026294f, - -0.050760f, -0.003667f, 0.025725f, 0.000098f, 0.032872f, -0.011182f, -0.031010f, 0.017103f, 0.035545f, 0.018056f, -0.020912f, 0.002829f, 0.032950f, -0.041332f, -0.029296f, 0.055380f, 0.003368f, -0.001638f, -0.005254f, 0.009004f, 0.013083f, 0.017023f, -0.006538f, -0.013142f, -0.015429f, -0.097175f, 0.028109f, 0.015653f, -0.051737f, 0.020593f, 0.018685f, -0.036940f, -0.029015f, 0.044153f, 0.005045f, 0.023663f, -0.012189f, 0.029283f, -0.009630f, -0.004273f, 0.022408f, 0.011337f, 0.007068f, 0.000929f, -0.015836f, -0.026196f, -0.016569f, 0.041731f, -0.015042f, -0.035664f, 0.060670f, 0.038032f, 0.004399f, 0.028152f, 0.007836f, -0.031305f, -0.093761f, 0.038477f, -0.003559f, -0.050180f, 0.041892f, -0.004236f, -0.068472f, -0.056980f, -0.030192f, 0.044886f, 0.017473f, 0.046511f, 0.057875f, 0.017648f, -0.047594f, 0.015137f, 0.016499f, -0.059816f, -0.010149f, 0.034043f, -0.019200f, -0.065205f, -0.050087f, -0.079535f, -0.051302f, -0.011323f, 0.049930f, 0.073158f, 0.034690f, -0.004625f, 0.049773f, -0.012339f, -0.123635f, -0.097467f, 0.020987f, -0.049007f, -0.058846f, 0.083886f, 0.010599f, -0.112368f, - -0.087473f, 0.029932f, 0.004749f, 0.019482f, 0.041412f, 0.101038f, 0.057375f, -0.008242f, 0.111813f, 0.036040f, -0.118225f, 0.001305f, -0.025554f, 0.061152f, 0.017842f, -0.038394f, 0.018479f, -0.028752f, -0.017676f, -0.024975f, 0.037847f, -0.006804f, 0.027553f, 0.023774f, 0.029875f, -0.006496f, -0.030856f, -0.009580f, 0.020485f, -0.012813f, 0.017153f, 0.011636f, 0.012239f, -0.026106f, 0.002732f, 0.010973f, 0.000110f, 0.047751f, -0.002046f, 0.021376f, 0.004237f, -0.007568f, 0.024941f, 0.006406f, -0.004204f, 0.028496f, -0.013911f, -0.004020f, 0.016844f, 0.007375f, -0.003103f, -0.011163f, -0.016421f, 0.002094f, -0.018799f, -0.013377f, 0.009428f, 0.013848f, -0.014521f, 0.092016f, 0.089768f, -0.028367f, 0.031422f, -0.036904f, 0.022680f, 0.001051f, 0.013228f, -0.043945f, 0.003736f, -0.037564f, -0.033110f, 0.000186f, -0.076831f, 0.001773f, -0.032555f, 0.008465f, 0.022915f, -0.000717f, 0.026504f, -0.038004f, 0.057674f, -0.028504f, -0.000794f, 0.039616f, -0.037184f, 0.014514f, 0.028887f, 0.035140f, 0.005286f, 0.012632f, 0.008928f, -0.055457f, -0.030623f, -0.009016f, 0.008358f, 0.008487f, - -0.008060f, 0.036656f, -0.011674f, -0.000559f, -0.006845f, -0.015948f, 0.013143f, 0.007262f, -0.043639f, 0.012846f, -0.035045f, 0.009594f, -0.084407f, -0.004143f, -0.001971f, -0.000236f, 0.034664f, -0.013983f, -0.030694f, -0.013830f, 0.031850f, -0.000163f, -0.081591f, 0.114277f, -0.009871f, -0.021935f, 0.025041f, -0.005061f, -0.016705f, -0.021509f, -0.022649f, -0.024589f, 0.078545f, -0.030411f, -0.045314f, 0.038784f, 0.003914f, -0.061987f, -0.014489f, 0.025775f, 0.020700f, -0.020508f, 0.042415f, -0.007565f, -0.011489f, 0.039016f, -0.028695f, -0.026581f, 0.049596f, -0.022022f, -0.007708f, -0.002823f, 0.021085f, 0.010004f, -0.000395f, -0.003614f, 0.001349f, 0.009221f, -0.010044f, -0.000920f, 0.009817f, 0.010130f, 0.012422f, -0.030524f, 0.007961f, 0.015149f, -0.029398f, 0.002320f, 0.006318f, -0.005428f, -0.011816f, 0.011735f, 0.003527f, -0.010867f, 0.001854f, -0.001211f, -0.004832f, -0.037411f, 0.021289f, -0.022228f, 0.006824f, 0.006083f, -0.033507f, -0.002100f, 0.001808f, -0.000433f, -0.000311f, -0.011608f, -0.001490f, 0.009300f, -0.001194f, -0.072794f, -0.107332f, -0.103293f, 0.228698f, 0.189721f, - 0.216137f, 0.488177f, 0.127881f, -0.122279f, 0.038773f, -0.391487f, -0.414923f, -0.102676f, -0.260663f, -0.201646f, 0.123701f, -0.064035f, 0.026031f, 0.311196f, 0.154727f, 0.230736f, 0.443201f, 0.295355f, 0.077561f, 0.064424f, -0.130096f, -0.402913f, -0.307605f, -0.235507f, -0.475845f, -0.192439f, 0.011942f, -0.083989f, -0.037398f, 0.241323f, 0.064472f, 0.032753f, 0.299051f, 0.037391f, 0.072009f, 0.424437f, 0.312366f, 0.197838f, 0.401536f, 0.200178f, -0.069643f, -0.005533f, -0.126131f, -0.623888f, -0.544145f, -0.439718f, -0.683479f, -0.520775f, -0.183909f, -0.246369f, 0.056557f, 0.475847f, 0.425255f, 0.588063f, 0.742482f, 0.552493f, 0.431295f, 0.419351f, 0.232534f, -0.077657f, -0.148306f, -0.339775f, -0.485230f, -0.476781f, -0.412816f, -0.473266f, -0.484095f, -0.389246f, -0.217127f, -0.157332f, 0.059939f, 0.372606f, 0.537073f, 0.766016f, 0.861689f, 0.514632f, 0.125797f, -0.072764f, -0.517464f, -0.492612f, -0.374916f, -0.291373f, -0.107666f, 0.055667f, 0.041671f, 0.053647f, 0.067175f, 0.031719f, 0.078919f, 0.110224f, 0.082237f, 0.132941f, 0.076132f, -0.032975f, -0.040205f, -0.115901f, - -0.212314f, -0.057755f, -0.065800f, -0.076240f, 0.067833f, 0.058143f, -0.071552f, -0.092667f, -0.172741f, -0.282883f, -0.118219f, 0.162518f, 0.276399f, 0.535163f, 0.645724f, 0.439170f, 0.273013f, 0.073629f, -0.240922f, -0.353040f, -0.399407f, -0.467304f, -0.438970f, -0.336790f, -0.272645f, -0.225616f, -0.136415f, -0.033819f, 0.118717f, 0.408996f, 0.570724f, 0.506647f, 0.364616f, 0.225404f, 0.049972f, -0.086908f, -0.133028f, -0.168969f, -0.120026f, -0.031353f, -0.004510f, -0.033823f, -0.056802f, -0.092139f, -0.148173f, -0.192950f, -0.186230f, -0.186952f, -0.108876f, 0.019306f, 0.070861f, 0.128866f, 0.169308f, 0.171242f, 0.133607f, 0.091204f, 0.052386f, 0.029479f, 0.042638f, 0.057988f, 0.059306f, 0.052454f, 0.031576f, -0.011994f, -0.069441f, -0.115822f, -0.141930f, -0.144999f, -0.116518f, -0.092066f, -0.074477f, -0.038431f, 0.010585f, 0.041442f, 0.053753f, 0.061745f, 0.065944f, 0.078480f, 0.086317f, 0.077374f, 0.044463f, 0.019444f, 0.005761f, -0.011367f, -0.016411f, -0.010064f, -0.015757f, -0.009020f, 0.003079f, -0.004980f, -0.022198f, -0.027010f, -0.044240f, -0.062779f, -0.059964f, -0.053628f, - -0.040944f, -0.006147f, 0.022612f, 0.037032f, 0.052589f, 0.060140f, 0.043320f, 0.033274f, 0.018603f, 0.005209f, 0.004834f, 0.017076f, 0.015908f, 0.014278f, 0.008056f, -0.011115f, -0.024635f, -0.038002f, -0.051613f, -0.052053f, -0.040976f, -0.022309f, -0.003272f, 0.017070f, 0.030412f, 0.036239f, 0.029766f, 0.019500f, 0.008779f, 0.003104f, 0.001243f, 0.000941f, -0.001242f, -0.003061f, -0.005562f, -0.006313f, -0.006105f, -0.004252f, -0.002774f, -0.000625f, 0.000069f, 0.000953f, 0.000055f}, - {0.016638f, -0.002184f, 0.001321f, 0.013096f, -0.001693f, -0.000605f, -0.003820f, 0.014286f, 0.000830f, 0.006948f, 0.004214f, 0.004207f, -0.005900f, 0.002966f, -0.009134f, -0.000990f, 0.007070f, 0.001438f, 0.004137f, 0.006667f, -0.011278f, -0.007869f, 0.002675f, -0.000558f, 0.008357f, 0.005095f, -0.000442f, -0.004641f, -0.002928f, -0.005742f, -0.000922f, -0.000765f, -0.000869f, 0.001592f, 0.002180f, -0.004997f, 0.008377f, -0.001925f, -0.001315f, 0.002866f, -0.010693f, -0.002465f, 0.004619f, 0.001636f, 0.010540f, -0.000040f, -0.000777f, 0.002060f, 0.000714f, 0.004391f, 0.007297f, 0.009285f, -0.000541f, -0.000958f, 0.000163f, -0.005341f, -0.006783f, 0.003743f, 0.006051f, -0.004250f, -0.004080f, -0.002755f, 0.007719f, 0.004548f, -0.001066f, 0.001204f, -0.009108f, -0.002623f, 0.004731f, 0.003925f, 0.006731f, -0.009789f, 0.002221f, 0.003703f, -0.002042f, 0.006905f, -0.000446f, 0.006019f, 0.002863f, 0.001936f, 0.007634f, 0.003790f, 0.001926f, 0.000062f, 0.000900f, -0.001821f, 0.000641f, 0.001061f, -0.000602f, -0.002713f, 0.001341f, 0.001320f, -0.002008f, -0.000281f, -0.001355f, 0.001418f, - 0.002196f, 0.000089f, -0.000280f, -0.000124f, -0.002036f, 0.000999f, -0.000719f, 0.001691f, 0.000799f, 0.000520f, 0.000363f, -0.000910f, 0.000552f, 0.000250f, 0.000869f, -0.001618f, -0.000770f, -0.000358f, 0.000222f, -0.002204f, 0.021696f, 0.005972f, -0.004969f, 0.011058f, -0.005376f, 0.011509f, -0.003828f, -0.005251f, 0.005855f, 0.010761f, -0.000331f, -0.005326f, 0.002874f, 0.002257f, -0.000442f, -0.015329f, 0.003591f, 0.004486f, 0.001230f, 0.009569f, 0.012887f, 0.006913f, 0.012690f, 0.008624f, 0.007732f, -0.002067f, 0.008587f, 0.004133f, -0.006511f, 0.002435f, 0.003967f, -0.008389f, -0.010648f, -0.001640f, 0.004197f, 0.000163f, -0.003843f, -0.005154f, -0.005015f, -0.002492f, 0.005745f, 0.011511f, 0.009754f, 0.003679f, 0.007492f, -0.012096f, 0.000763f, -0.003089f, 0.000118f, -0.013883f, 0.005147f, -0.001338f, -0.003273f, -0.000544f, -0.003768f, -0.006865f, -0.004822f, 0.004864f, 0.001165f, 0.003730f, -0.005060f, 0.009465f, 0.002434f, -0.010969f, 0.004530f, 0.001388f, 0.003048f, 0.006004f, 0.001823f, 0.011022f, -0.003517f, 0.001205f, -0.012876f, 0.002445f, 0.001241f, 0.000365f, - 0.000305f, -0.002428f, 0.009159f, -0.002805f, -0.004258f, 0.006945f, -0.007199f, -0.003517f, -0.002974f, -0.001343f, -0.003358f, 0.002318f, 0.000613f, 0.001208f, -0.000095f, -0.000322f, 0.000118f, -0.001319f, 0.000788f, 0.001201f, -0.000467f, -0.000568f, -0.000064f, -0.002387f, -0.003889f, 0.001428f, 0.000473f, -0.003073f, -0.000410f, -0.000345f, -0.000672f, -0.003722f, 0.000949f, -0.000024f, -0.000123f, 0.000248f, 0.000644f, 0.000396f, -0.001413f, -0.000061f, -0.002566f, -0.000299f, 0.001066f, -0.004381f, -0.004431f, -0.001420f, 0.004015f, -0.007418f, 0.002152f, -0.014661f, 0.002733f, 0.002782f, -0.001729f, 0.010496f, 0.000644f, -0.001155f, 0.000921f, 0.005565f, -0.009017f, 0.001297f, 0.002732f, 0.005757f, -0.012819f, -0.006468f, -0.004852f, 0.004706f, 0.001895f, -0.004003f, -0.012955f, 0.003149f, -0.012887f, -0.000774f, 0.005080f, -0.002368f, 0.003863f, -0.002208f, 0.008641f, 0.012867f, 0.006765f, -0.006637f, 0.001221f, 0.009755f, 0.005990f, -0.006008f, 0.005032f, 0.001523f, -0.010052f, 0.003540f, 0.013752f, 0.006477f, 0.004593f, 0.015384f, 0.001351f, -0.005817f, -0.011789f, -0.000498f, - -0.006630f, -0.007903f, -0.003780f, 0.008466f, -0.008051f, 0.002815f, -0.004817f, -0.004464f, 0.009820f, -0.001275f, 0.001604f, 0.007867f, 0.010669f, -0.004735f, -0.009851f, 0.012513f, 0.009561f, 0.006136f, 0.000552f, -0.007496f, 0.001170f, 0.009891f, -0.010045f, 0.003066f, -0.006556f, -0.000202f, 0.006084f, -0.005722f, -0.000352f, -0.011026f, -0.002943f, -0.000956f, 0.001647f, -0.000573f, -0.004208f, -0.000484f, 0.002081f, -0.003246f, -0.000875f, 0.001527f, 0.001233f, 0.000961f, 0.000879f, -0.000156f, -0.000837f, -0.004342f, 0.002310f, -0.000226f, 0.002381f, -0.001674f, -0.002900f, 0.001028f, 0.002256f, -0.001491f, 0.001989f, -0.000334f, -0.000166f, -0.000171f, -0.000484f, 0.002433f, -0.001445f, 0.000951f, -0.001459f, -0.029060f, -0.010640f, -0.004474f, 0.015899f, -0.006034f, -0.002393f, -0.009394f, -0.007953f, -0.001357f, -0.020964f, 0.011749f, 0.003878f, -0.000595f, -0.007748f, 0.011567f, -0.003261f, 0.005875f, -0.004690f, 0.003711f, 0.007370f, -0.009215f, 0.000968f, 0.010170f, 0.005743f, 0.004096f, 0.010871f, 0.009729f, -0.006110f, -0.007784f, -0.009717f, -0.000161f, -0.012773f, 0.003048f, - -0.016870f, -0.003228f, 0.012414f, 0.006532f, -0.004284f, -0.001313f, -0.012694f, 0.005763f, -0.005432f, 0.011184f, -0.006450f, -0.011479f, -0.002366f, -0.004731f, -0.009440f, 0.003654f, -0.002170f, -0.006004f, -0.006127f, -0.020334f, 0.002770f, -0.006099f, -0.015078f, -0.004010f, 0.009283f, 0.004766f, -0.007804f, 0.006438f, 0.008269f, 0.007996f, 0.002960f, -0.010396f, -0.001744f, -0.002309f, 0.007190f, -0.007307f, -0.002820f, 0.003792f, 0.003841f, -0.011379f, -0.013566f, -0.024339f, -0.004177f, -0.014136f, 0.004640f, -0.000547f, -0.003390f, 0.007157f, -0.001526f, -0.003258f, 0.003107f, 0.004881f, 0.004675f, 0.003648f, 0.008457f, -0.003617f, -0.002997f, -0.002289f, 0.001229f, 0.000426f, -0.001943f, 0.002335f, 0.003346f, -0.000748f, 0.000773f, -0.001485f, -0.001943f, -0.000360f, -0.001269f, 0.000350f, 0.000720f, 0.000099f, -0.002154f, 0.000330f, -0.001459f, -0.000553f, 0.001196f, 0.002730f, -0.001234f, 0.003270f, 0.003966f, 0.000627f, -0.001175f, -0.003463f, -0.000720f, 0.002328f, 0.001529f, -0.001507f, -0.025293f, -0.010116f, -0.004532f, -0.007489f, 0.008606f, 0.011254f, 0.010607f, -0.021114f, - -0.015768f, 0.006079f, 0.025731f, 0.015218f, -0.000010f, 0.003669f, 0.007332f, -0.009241f, 0.006106f, -0.008566f, 0.006194f, 0.009149f, 0.001414f, 0.007343f, 0.002292f, -0.000504f, 0.003810f, 0.002268f, -0.006894f, -0.008725f, 0.012076f, 0.004906f, -0.008810f, 0.008657f, -0.004803f, -0.000879f, 0.020758f, -0.009892f, 0.011755f, 0.023216f, 0.009475f, -0.001309f, 0.000901f, -0.008352f, 0.010856f, -0.011064f, -0.006051f, -0.018608f, 0.003518f, 0.014383f, -0.000352f, -0.013166f, -0.004690f, -0.018673f, -0.009483f, -0.003450f, -0.026578f, -0.014447f, -0.002618f, 0.002840f, -0.011631f, 0.005921f, -0.003074f, -0.009167f, 0.009964f, 0.029415f, 0.002745f, 0.015007f, 0.010176f, 0.008835f, -0.009292f, 0.003939f, -0.015841f, 0.001720f, 0.004572f, 0.003582f, -0.006145f, 0.000172f, -0.016083f, -0.005578f, -0.005634f, -0.001114f, 0.007838f, 0.008416f, -0.000361f, 0.003297f, 0.004576f, -0.002270f, -0.001743f, -0.001448f, 0.001523f, 0.000223f, 0.001144f, 0.000917f, 0.002589f, -0.001325f, -0.000069f, -0.003822f, -0.000458f, -0.000560f, 0.002778f, 0.001619f, -0.001675f, -0.002290f, -0.002229f, -0.002147f, - -0.000716f, -0.002646f, 0.000987f, 0.005003f, -0.003900f, -0.000463f, 0.001721f, 0.002867f, 0.039506f, 0.024965f, -0.013583f, 0.005068f, 0.012717f, -0.005248f, 0.007281f, -0.002472f, 0.011864f, 0.005942f, 0.003800f, 0.010759f, 0.006089f, 0.005323f, -0.003351f, -0.026436f, 0.012661f, -0.004503f, -0.006012f, 0.020681f, 0.012806f, 0.007146f, 0.009544f, 0.007082f, 0.005268f, -0.004047f, 0.003070f, 0.000840f, -0.006761f, 0.005467f, 0.008953f, -0.014913f, 0.002863f, -0.009652f, 0.007142f, 0.008255f, -0.023304f, -0.000384f, -0.027734f, 0.000476f, 0.003475f, 0.002353f, 0.007582f, 0.018925f, -0.002305f, -0.009811f, -0.004798f, -0.005268f, -0.007285f, 0.005446f, 0.005878f, 0.001830f, -0.003068f, -0.003405f, 0.018405f, -0.006105f, -0.003669f, -0.010045f, 0.016350f, -0.002485f, 0.013742f, -0.006467f, 0.014686f, -0.014137f, -0.029705f, -0.008838f, 0.001872f, 0.006010f, 0.010056f, -0.010010f, -0.007443f, 0.004068f, 0.002692f, -0.004643f, -0.007740f, 0.018572f, -0.007260f, 0.017667f, 0.004681f, 0.012482f, 0.004929f, 0.009092f, 0.007681f, -0.003204f, -0.001192f, 0.003567f, -0.000516f, 0.009632f, - 0.000258f, -0.003203f, 0.000889f, -0.010816f, -0.002133f, -0.002512f, 0.000759f, -0.003624f, -0.001376f, -0.001229f, -0.000249f, -0.001259f, -0.005660f, -0.004613f, 0.001386f, 0.000378f, -0.006355f, -0.000398f, 0.000946f, 0.000921f, 0.002604f, 0.001087f, 0.006267f, 0.000262f, -0.002105f, -0.000272f, -0.000843f, -0.002920f, -0.003415f, -0.001374f, 0.000948f, 0.018499f, -0.007073f, -0.012273f, -0.000575f, 0.001966f, -0.017569f, -0.013717f, -0.004386f, 0.004792f, -0.002628f, 0.022816f, 0.013672f, 0.000619f, 0.021760f, 0.007868f, 0.006361f, -0.018643f, 0.017496f, -0.003259f, -0.004404f, -0.015721f, -0.007120f, 0.013988f, 0.013787f, -0.003917f, 0.009141f, -0.018909f, -0.002670f, 0.012729f, 0.009564f, -0.007059f, -0.013446f, -0.007531f, -0.008312f, -0.010352f, -0.008635f, 0.002086f, -0.014131f, -0.001348f, 0.019518f, -0.009384f, 0.002252f, -0.000723f, -0.004495f, 0.007628f, -0.003114f, 0.012773f, 0.000016f, 0.018009f, -0.004619f, -0.011321f, 0.006510f, -0.008941f, -0.008874f, -0.008941f, -0.025542f, 0.002983f, 0.010580f, 0.015229f, 0.010970f, 0.020008f, -0.002044f, -0.007668f, 0.011560f, -0.014184f, - 0.003311f, 0.002216f, -0.002125f, 0.012974f, 0.012095f, -0.003090f, -0.015420f, 0.003108f, -0.007959f, -0.014672f, -0.013605f, 0.007533f, 0.013209f, 0.008295f, -0.028527f, 0.006462f, 0.003058f, -0.001392f, 0.013484f, 0.007300f, 0.011039f, 0.004201f, -0.001048f, 0.014492f, 0.001967f, 0.006605f, 0.005278f, 0.001180f, -0.006465f, 0.001098f, -0.003592f, -0.007910f, 0.001544f, 0.002458f, 0.003806f, -0.000907f, 0.001060f, 0.000938f, 0.000737f, 0.002879f, 0.001880f, 0.002004f, -0.000262f, -0.004969f, 0.003593f, -0.001976f, -0.002214f, -0.001833f, -0.003532f, 0.006614f, 0.007457f, 0.006353f, 0.002585f, 0.000757f, 0.001128f, -0.001445f, 0.005114f, -0.022804f, -0.012844f, 0.002054f, -0.012525f, -0.033601f, 0.025539f, -0.000874f, -0.001337f, 0.002873f, 0.002313f, -0.022334f, 0.015715f, -0.023271f, 0.002367f, 0.010177f, -0.002698f, 0.003505f, 0.004024f, -0.025013f, -0.007992f, -0.011320f, -0.001963f, 0.004752f, -0.007792f, -0.005464f, -0.000679f, -0.001764f, 0.002587f, 0.010023f, 0.005858f, 0.021912f, -0.007740f, 0.030193f, -0.001812f, 0.000523f, -0.019620f, -0.003264f, 0.015148f, -0.003247f, - -0.030352f, 0.012085f, 0.014585f, -0.009429f, 0.007869f, -0.011760f, 0.021581f, 0.011464f, -0.000282f, -0.001550f, -0.013322f, -0.009001f, -0.014609f, 0.013687f, 0.014119f, 0.005773f, 0.001894f, 0.006005f, -0.011717f, -0.031949f, -0.011257f, 0.010808f, 0.005182f, -0.023767f, 0.000913f, 0.002494f, 0.003534f, -0.011542f, 0.008396f, 0.016406f, 0.008931f, 0.000076f, 0.007071f, 0.011209f, -0.006163f, 0.016824f, 0.000583f, -0.000712f, -0.016620f, -0.021881f, 0.014207f, -0.006844f, 0.007201f, 0.006778f, -0.000873f, -0.004879f, -0.004438f, -0.003859f, 0.002501f, -0.005560f, 0.007306f, 0.001392f, -0.001660f, 0.001559f, -0.002216f, 0.000059f, -0.008565f, 0.001998f, 0.000959f, -0.001753f, -0.004660f, 0.001445f, -0.004097f, -0.000444f, 0.001658f, -0.001102f, -0.002604f, -0.000249f, -0.002616f, 0.010495f, 0.008369f, 0.002849f, -0.001013f, -0.001098f, -0.002861f, -0.000117f, -0.000996f, 0.006654f, -0.002080f, -0.001085f, 0.006732f, 0.001360f, 0.002933f, 0.004609f, -0.003142f, -0.001969f, 0.005076f, 0.002780f, -0.001173f, -0.000916f, 0.007179f, -0.035172f, 0.018960f, -0.004886f, 0.007037f, -0.010483f, - -0.005584f, 0.014652f, -0.016982f, 0.016489f, -0.010238f, -0.020005f, 0.009099f, -0.010829f, 0.042510f, 0.006196f, -0.014756f, -0.020726f, -0.003628f, -0.025679f, -0.011678f, -0.027650f, -0.001553f, 0.018295f, -0.012989f, 0.011241f, 0.018647f, -0.017344f, 0.000119f, -0.020225f, 0.011337f, 0.003846f, -0.000684f, 0.011725f, -0.012485f, -0.018156f, -0.015179f, 0.000917f, 0.003448f, 0.015017f, -0.021765f, 0.015397f, 0.003086f, -0.032346f, -0.017680f, -0.026135f, -0.010637f, 0.009744f, -0.008726f, -0.008814f, -0.049451f, -0.001171f, -0.010831f, -0.004673f, -0.031710f, -0.011194f, -0.004166f, 0.002316f, 0.025917f, 0.023448f, 0.019993f, 0.011340f, 0.024982f, -0.027010f, 0.020965f, 0.002761f, 0.009792f, 0.006888f, -0.019159f, 0.029690f, 0.018529f, 0.011616f, -0.013087f, -0.017770f, -0.012650f, 0.017167f, 0.002023f, -0.000082f, 0.009413f, 0.004369f, 0.009896f, -0.008851f, 0.026252f, 0.013613f, -0.002782f, -0.004445f, 0.005913f, 0.005126f, 0.003232f, -0.001739f, -0.001569f, 0.002266f, -0.000382f, -0.000634f, -0.010835f, 0.000466f, -0.006247f, 0.000217f, 0.003490f, 0.001025f, -0.000625f, -0.000126f, - 0.002187f, 0.001712f, -0.010305f, -0.002926f, 0.003696f, -0.003182f, -0.004005f, -0.000436f, 0.001423f, 0.001513f, 0.002042f, -0.001696f, -0.002107f, 0.001600f, -0.004476f, -0.007867f, -0.001904f, -0.002101f, -0.002470f, 0.001221f, -0.000563f, 0.006647f, 0.003246f, -0.002958f, 0.003052f, 0.002063f, 0.001772f, -0.003053f, -0.005347f, -0.000307f, 0.000856f, 0.005642f, -0.001975f, -0.001539f, 0.013285f, 0.024624f, 0.026700f, 0.010916f, 0.018688f, 0.015126f, 0.009055f, -0.004878f, 0.002025f, -0.007275f, 0.000652f, -0.002501f, -0.016094f, 0.020554f, 0.032617f, 0.013006f, -0.008873f, 0.014628f, 0.013927f, -0.000542f, 0.008671f, -0.015340f, -0.029574f, -0.019680f, -0.013430f, 0.008607f, -0.003528f, -0.015444f, 0.011636f, -0.005282f, -0.013783f, -0.000132f, 0.024077f, 0.012143f, 0.017862f, 0.006277f, 0.013174f, 0.014595f, -0.003245f, 0.013374f, -0.005090f, -0.015172f, 0.006522f, -0.017576f, 0.006683f, 0.007082f, -0.025834f, -0.016786f, 0.010746f, 0.026947f, -0.013818f, 0.018804f, 0.026261f, -0.021535f, 0.001017f, 0.023918f, 0.002706f, -0.008629f, -0.001875f, -0.012142f, -0.021233f, 0.000347f, - -0.006346f, -0.011122f, 0.014829f, 0.000829f, -0.024313f, 0.031441f, -0.012806f, 0.025521f, -0.029929f, -0.020467f, 0.014845f, -0.018394f, 0.010370f, -0.012334f, -0.008923f, -0.017266f, -0.010488f, -0.014034f, -0.035345f, 0.005963f, 0.021839f, -0.009900f, -0.001464f, 0.015157f, 0.016191f, 0.011510f, -0.002099f, -0.001185f, -0.009062f, -0.002769f, -0.003905f, -0.004699f, 0.003950f, -0.000860f, -0.003244f, 0.005318f, 0.004832f, -0.002109f, -0.000344f, -0.006248f, 0.002906f, -0.005482f, -0.010059f, -0.000605f, 0.009623f, 0.000190f, -0.005203f, -0.001304f, 0.015820f, 0.007970f, 0.000662f, -0.004600f, -0.005573f, -0.004049f, 0.001081f, 0.001198f, -0.004655f, -0.001671f, 0.000312f, 0.001977f, 0.006386f, 0.001625f, 0.010004f, 0.006060f, 0.007206f, 0.002834f, 0.003304f, 0.003956f, -0.001196f, 0.000265f, -0.021908f, 0.013967f, -0.009236f, -0.024351f, 0.034979f, 0.017553f, -0.023968f, 0.017057f, 0.016034f, 0.004354f, 0.029552f, -0.059975f, 0.004717f, 0.024404f, 0.008850f, 0.002050f, 0.026497f, 0.000869f, 0.014692f, -0.034734f, -0.004258f, 0.009277f, 0.000848f, -0.017451f, 0.007161f, 0.013785f, - 0.007144f, 0.006463f, 0.018848f, 0.015212f, 0.024914f, 0.019133f, -0.007144f, -0.007994f, 0.019376f, -0.011779f, 0.013717f, -0.021585f, -0.011248f, -0.027580f, -0.012098f, 0.015047f, 0.005713f, -0.006443f, 0.023010f, -0.026897f, -0.035772f, -0.058702f, 0.018617f, 0.020146f, 0.016289f, 0.012297f, -0.013401f, 0.009225f, -0.007599f, 0.022044f, 0.059549f, -0.009303f, -0.012046f, -0.025819f, -0.007743f, 0.022050f, -0.014670f, 0.012597f, 0.022225f, 0.003466f, -0.000064f, -0.017270f, -0.004550f, 0.008050f, -0.040546f, -0.037937f, 0.004225f, 0.005027f, -0.014120f, 0.020678f, 0.016292f, 0.029806f, 0.048832f, 0.019189f, -0.010831f, -0.005993f, 0.010634f, -0.000366f, -0.026292f, 0.012598f, 0.011619f, 0.009441f, 0.003576f, 0.012344f, -0.000102f, 0.006792f, 0.006136f, 0.003745f, -0.005676f, 0.000403f, -0.000233f, -0.000932f, 0.010294f, 0.002843f, 0.000224f, 0.005080f, -0.010234f, 0.002941f, 0.002273f, -0.001432f, 0.010817f, 0.001982f, -0.002695f, -0.001866f, -0.006104f, 0.018460f, 0.001590f, 0.003098f, 0.008139f, -0.002817f, -0.002419f, 0.010361f, -0.010969f, 0.010306f, -0.007930f, 0.008531f, - -0.000237f, -0.000808f, -0.001658f, 0.003434f, -0.001393f, 0.008824f, -0.006971f, -0.003076f, 0.003071f, -0.001700f, -0.002173f, -0.005654f, -0.008282f, 0.006196f, 0.088629f, 0.050151f, 0.031929f, -0.008159f, -0.009051f, -0.001079f, -0.007570f, -0.009097f, -0.013768f, -0.016545f, -0.028460f, 0.001283f, -0.002026f, 0.006973f, 0.012389f, 0.023657f, 0.035731f, -0.004751f, -0.046518f, -0.018154f, 0.039899f, -0.006195f, 0.014944f, -0.005143f, -0.000685f, 0.026617f, 0.009195f, 0.020218f, 0.011865f, -0.000807f, -0.001213f, -0.000349f, 0.013413f, 0.017179f, -0.006670f, -0.026170f, 0.034291f, 0.024608f, 0.017453f, 0.006452f, 0.008886f, -0.013904f, -0.025971f, 0.035783f, 0.019945f, 0.009229f, -0.016602f, -0.018435f, -0.025912f, -0.015929f, -0.004615f, -0.016182f, 0.008968f, -0.033115f, 0.004576f, 0.024472f, -0.015915f, 0.008643f, 0.001474f, 0.003600f, -0.037827f, 0.013417f, -0.016246f, 0.027607f, -0.060746f, 0.010436f, -0.015879f, -0.020501f, 0.005026f, -0.012367f, 0.012492f, 0.011853f, -0.039575f, 0.000438f, 0.027665f, 0.004145f, 0.008113f, 0.017409f, 0.007103f, 0.028870f, 0.011777f, 0.006111f, - 0.001936f, -0.004182f, 0.018594f, -0.036725f, -0.000696f, -0.002142f, -0.003368f, 0.001448f, -0.001052f, -0.000279f, -0.003192f, -0.005404f, -0.007059f, 0.011429f, 0.009575f, -0.005025f, -0.000814f, -0.017589f, 0.001733f, -0.001100f, -0.017352f, -0.000083f, -0.025740f, -0.019567f, 0.008685f, 0.003275f, 0.013563f, -0.015303f, 0.006588f, 0.013324f, 0.002954f, -0.000577f, 0.003471f, 0.007141f, 0.000618f, -0.003841f, 0.014131f, 0.000098f, 0.004610f, -0.008290f, -0.006202f, 0.005868f, 0.008483f, 0.001493f, -0.054479f, -0.027979f, 0.004020f, -0.047864f, 0.010973f, 0.034754f, -0.016729f, 0.042246f, 0.049541f, 0.006313f, 0.024748f, 0.030568f, 0.013697f, -0.029310f, 0.019126f, 0.023328f, -0.001154f, 0.005904f, 0.016445f, 0.014558f, 0.034963f, 0.005977f, -0.013486f, 0.022337f, 0.008000f, -0.003462f, 0.000503f, 0.014978f, -0.020445f, -0.009234f, -0.008655f, 0.012498f, 0.006470f, -0.028819f, 0.008509f, 0.024092f, 0.000638f, 0.029034f, -0.027458f, -0.051850f, 0.004140f, 0.023279f, 0.035180f, 0.032646f, 0.016840f, 0.015496f, 0.012402f, -0.035229f, -0.010318f, -0.001467f, 0.026434f, 0.041808f, - -0.014452f, 0.009011f, -0.015389f, 0.009894f, 0.006644f, 0.025453f, 0.039402f, -0.015185f, -0.017273f, -0.003426f, 0.021587f, 0.027740f, 0.038834f, 0.000961f, -0.041980f, -0.039584f, -0.006467f, 0.005129f, 0.000121f, -0.018144f, 0.000406f, -0.047729f, -0.030816f, -0.028202f, -0.032115f, 0.013694f, 0.004923f, 0.038467f, 0.030731f, 0.011597f, -0.018393f, -0.018348f, -0.017098f, -0.015515f, -0.026680f, 0.012592f, 0.008351f, 0.004945f, 0.017933f, 0.019955f, 0.000108f, 0.017026f, 0.003491f, 0.018181f, -0.006328f, 0.015081f, -0.004824f, -0.001358f, 0.004469f, -0.005532f, 0.025208f, 0.011366f, 0.014964f, 0.006777f, 0.017947f, 0.004028f, 0.008602f, 0.025759f, 0.022322f, 0.011967f, -0.001445f, -0.009868f, -0.008475f, -0.018208f, -0.010238f, -0.011950f, -0.007148f, -0.011020f, -0.013378f, -0.007724f, 0.007774f, 0.017171f, 0.004754f, -0.004015f, 0.000620f, -0.002534f, 0.010713f, 0.012687f, 0.010511f, -0.001108f, 0.004724f, -0.019399f, 0.023020f, -0.050923f, 0.004587f, -0.010172f, 0.027890f, -0.014945f, -0.002346f, 0.008641f, 0.021123f, -0.028424f, -0.047879f, -0.008307f, -0.018774f, 0.001349f, - -0.021617f, 0.012726f, 0.012539f, 0.001263f, -0.025839f, 0.016132f, 0.001596f, 0.043146f, -0.006907f, 0.023634f, -0.019952f, 0.044562f, 0.012831f, 0.027815f, 0.018658f, 0.030346f, 0.044594f, -0.010861f, 0.017298f, -0.031197f, 0.032901f, 0.032007f, -0.000749f, 0.010413f, 0.032221f, -0.020613f, -0.019933f, -0.003271f, 0.064877f, 0.010569f, -0.018146f, 0.032240f, 0.004214f, 0.024733f, 0.035523f, 0.010384f, -0.002405f, 0.003372f, 0.005543f, 0.023471f, -0.008203f, 0.025170f, -0.017354f, 0.024573f, -0.013584f, 0.055421f, -0.008048f, 0.047664f, -0.043199f, -0.047403f, 0.066017f, -0.055234f, -0.029579f, 0.002265f, -0.017803f, -0.034271f, 0.030162f, -0.003986f, -0.042533f, -0.020089f, -0.021846f, -0.062529f, -0.023205f, 0.007759f, 0.014063f, -0.048232f, -0.012330f, 0.029331f, -0.005850f, 0.016867f, 0.028894f, -0.020597f, -0.004711f, 0.004754f, 0.018864f, 0.013592f, 0.014234f, -0.004631f, -0.002725f, 0.011725f, -0.001013f, -0.007717f, 0.006418f, 0.013516f, 0.002560f, 0.009413f, -0.000272f, -0.008622f, -0.000018f, 0.012476f, 0.004695f, -0.006269f, -0.015612f, -0.009374f, 0.018317f, -0.008345f, - -0.024600f, 0.005933f, -0.014114f, -0.026718f, 0.000031f, 0.010176f, 0.000961f, -0.006854f, -0.001971f, 0.007461f, -0.005599f, 0.000460f, 0.009654f, -0.000416f, -0.004464f, -0.005649f, 0.017390f, 0.033463f, 0.001843f, -0.011605f, -0.009717f, -0.005288f, -0.015711f, -0.003225f, -0.006570f, 0.006587f, -0.042738f, -0.028511f, 0.008316f, -0.055884f, -0.032601f, -0.038832f, -0.039511f, 0.048153f, -0.001189f, 0.001660f, 0.014340f, -0.014039f, -0.061446f, -0.045966f, -0.045023f, -0.091806f, 0.006633f, 0.010425f, 0.039671f, 0.023189f, 0.013747f, 0.019797f, 0.013730f, 0.004294f, -0.028979f, -0.042580f, -0.024526f, 0.033094f, -0.004188f, -0.024907f, -0.010058f, 0.032416f, -0.039204f, -0.025297f, -0.040270f, -0.020021f, -0.003444f, -0.038631f, 0.014368f, -0.032079f, 0.034705f, 0.024342f, -0.005393f, 0.024013f, -0.023621f, -0.048555f, 0.021210f, 0.028317f, -0.025069f, -0.055719f, 0.041972f, -0.003623f, 0.030398f, 0.025533f, -0.079699f, -0.056622f, 0.000529f, -0.012931f, 0.051881f, -0.029767f, -0.034414f, -0.009247f, 0.019130f, 0.002923f, -0.004808f, -0.018081f, 0.068889f, -0.033814f, -0.056125f, -0.075886f, - 0.054396f, -0.013010f, -0.062493f, 0.029097f, 0.029620f, 0.017561f, 0.062783f, 0.067174f, 0.068967f, 0.029508f, -0.015680f, -0.006357f, -0.010725f, 0.022887f, -0.044185f, 0.028367f, 0.005389f, 0.005528f, 0.021499f, 0.020796f, -0.018257f, 0.026638f, -0.020961f, 0.008875f, -0.029751f, -0.016971f, -0.011584f, -0.015442f, -0.006182f, -0.016633f, -0.004175f, 0.011364f, 0.031128f, 0.036225f, 0.001462f, 0.028405f, -0.017080f, 0.004068f, 0.016757f, 0.002198f, -0.031640f, 0.003806f, 0.007674f, -0.008825f, -0.023526f, -0.015102f, -0.014500f, 0.037554f, 0.023375f, 0.012091f, 0.017664f, 0.031661f, -0.005076f, -0.037953f, -0.023847f, -0.021872f, -0.027240f, -0.035286f, 0.006130f, -0.029622f, -0.051674f, -0.001116f, -0.009177f, -0.012285f, -0.009830f, 0.007811f, -0.050388f, -0.020071f, 0.023485f, 0.038207f, 0.077805f, 0.012756f, 0.040700f, 0.019725f, 0.019651f, -0.017749f, -0.005687f, -0.015132f, -0.042678f, -0.050146f, -0.070405f, -0.025630f, -0.063426f, -0.024936f, -0.033201f, -0.012402f, 0.034088f, 0.008380f, 0.023199f, 0.040087f, 0.000063f, 0.027083f, 0.007885f, 0.001382f, -0.000913f, -0.005291f, - -0.053503f, 0.019482f, -0.006671f, -0.060463f, -0.037426f, 0.017664f, -0.038787f, -0.014886f, 0.014141f, 0.043898f, 0.053279f, 0.018535f, -0.011057f, 0.007336f, 0.035675f, 0.019087f, 0.007538f, -0.001049f, -0.105449f, -0.021267f, 0.023357f, 0.026776f, 0.010706f, -0.004029f, -0.035539f, 0.024670f, -0.031701f, -0.023907f, -0.006219f, 0.006484f, -0.017617f, -0.056324f, 0.030137f, -0.007205f, 0.070107f, 0.026664f, 0.023975f, 0.026942f, 0.051545f, 0.115574f, 0.001793f, 0.001981f, -0.004828f, -0.034406f, 0.020564f, -0.023868f, 0.084060f, -0.007468f, -0.030119f, -0.027109f, 0.035540f, -0.045575f, -0.030758f, -0.005991f, 0.071907f, 0.002417f, 0.034322f, 0.053116f, 0.010751f, 0.043004f, 0.032618f, -0.005930f, 0.029910f, 0.032413f, 0.001102f, -0.022122f, -0.023831f, 0.006694f, 0.008232f, 0.027198f, 0.017482f, -0.001150f, -0.004046f, 0.004848f, 0.011080f, -0.020139f, -0.004190f, -0.004923f, -0.002627f, -0.031597f, 0.019944f, -0.022925f, 0.008051f, -0.004628f, -0.013702f, 0.003852f, 0.038536f, 0.033711f, 0.000094f, -0.002235f, -0.024476f, -0.009980f, -0.024327f, -0.003601f, -0.028315f, -0.040371f, - 0.011883f, 0.028042f, 0.001958f, 0.001638f, -0.013931f, -0.021142f, 0.059025f, -0.008000f, 0.010723f, -0.064594f, -0.021852f, 0.075650f, -0.050415f, -0.013783f, -0.043655f, -0.129011f, -0.018307f, 0.039531f, 0.032671f, 0.006227f, 0.009407f, -0.007016f, 0.072310f, -0.077937f, -0.000040f, -0.022472f, -0.052041f, -0.044143f, -0.006531f, 0.014745f, 0.013013f, 0.017379f, 0.046702f, 0.030227f, -0.033012f, -0.033669f, 0.092862f, 0.075793f, -0.006064f, 0.008832f, -0.010148f, 0.024675f, -0.000331f, 0.054084f, 0.019743f, 0.028730f, 0.008138f, 0.004148f, -0.095947f, 0.039748f, -0.004092f, -0.055337f, -0.028116f, 0.005438f, -0.014860f, -0.055071f, 0.053025f, -0.009391f, -0.039135f, -0.008235f, 0.005830f, 0.046920f, 0.052642f, 0.039952f, 0.015488f, 0.046796f, 0.050101f, -0.037623f, -0.041020f, -0.026302f, -0.006648f, 0.048494f, 0.064957f, 0.011094f, 0.023466f, 0.062186f, 0.037462f, -0.058354f, 0.043196f, 0.015666f, -0.012753f, 0.002287f, 0.119764f, -0.079248f, 0.061084f, 0.069824f, -0.070194f, -0.004123f, -0.045587f, -0.014750f, -0.100880f, 0.029054f, 0.044771f, -0.060808f, 0.036796f, -0.052615f, - -0.037904f, 0.046007f, -0.028548f, -0.004243f, -0.017123f, 0.002235f, -0.025176f, 0.007789f, 0.011763f, -0.019158f, -0.026983f, -0.002120f, -0.029316f, 0.038550f, 0.007028f, -0.036198f, 0.008018f, -0.006080f, -0.019570f, -0.019001f, 0.012548f, 0.024582f, 0.030942f, 0.012654f, -0.027655f, 0.071006f, -0.013033f, 0.007077f, -0.004503f, -0.037572f, 0.014453f, 0.020507f, -0.018962f, 0.030296f, 0.007833f, 0.022637f, -0.005177f, -0.036340f, 0.012375f, 0.054772f, -0.035407f, -0.050764f, -0.082944f, 0.016605f, -0.016121f, -0.026129f, -0.033730f, 0.018518f, -0.020594f, -0.009379f, 0.054061f, -0.016816f, -0.003365f, -0.042508f, 0.003165f, 0.027348f, -0.060070f, -0.037605f, -0.036073f, -0.017483f, 0.021404f, -0.080479f, -0.045155f, -0.116197f, 0.019892f, -0.001101f, -0.029882f, -0.012893f, -0.017519f, 0.024912f, 0.036987f, -0.041250f, 0.001199f, -0.014373f, -0.014344f, -0.072605f, 0.015616f, 0.055799f, 0.014382f, 0.042214f, 0.052588f, 0.047468f, -0.064073f, -0.019471f, -0.019619f, -0.029825f, 0.053203f, -0.054768f, -0.031967f, 0.001915f, 0.077424f, 0.017571f, -0.027719f, 0.078398f, -0.044495f, -0.041438f, - 0.093129f, 0.089551f, 0.008231f, 0.022794f, -0.025874f, -0.084895f, -0.026531f, 0.085471f, -0.041862f, 0.077461f, -0.028373f, -0.122012f, -0.032581f, -0.057075f, 0.064633f, 0.000565f, 0.014163f, 0.058275f, -0.009723f, 0.048043f, -0.063151f, -0.073971f, 0.056470f, -0.014855f, -0.125013f, 0.076933f, -0.040084f, 0.020975f, 0.024849f, -0.043602f, 0.082258f, -0.056471f, 0.029579f, -0.000888f, 0.021607f, 0.083710f, -0.021676f, -0.026476f, 0.002867f, -0.017455f, -0.023115f, -0.018942f, 0.009168f, 0.018805f, 0.004316f, -0.012033f, 0.010270f, -0.039903f, 0.035640f, 0.025112f, 0.019955f, 0.007963f, -0.000004f, -0.018680f, -0.020521f, -0.019434f, 0.016689f, 0.032674f, -0.032258f, 0.028330f, 0.065868f, 0.022157f, -0.056803f, 0.005446f, 0.020463f, -0.021057f, -0.037592f, 0.035151f, -0.031877f, -0.000751f, -0.003002f, -0.033860f, -0.043793f, -0.000479f, 0.024562f, -0.014480f, 0.056638f, -0.019104f, -0.037849f, 0.026258f, -0.016927f, 0.001938f, 0.021969f, 0.043360f, 0.002880f, -0.077258f, 0.045401f, 0.053006f, -0.064431f, 0.035293f, -0.000714f, -0.022952f, -0.027788f, -0.092230f, -0.041164f, 0.032684f, - 0.005466f, 0.085025f, -0.068521f, -0.038355f, 0.015554f, -0.009212f, 0.053998f, -0.075458f, -0.000315f, 0.007900f, -0.064300f, 0.064029f, 0.034629f, 0.019622f, -0.030377f, 0.043870f, -0.052211f, 0.028731f, 0.021841f, 0.013559f, -0.004106f, -0.028848f, 0.011576f, 0.058193f, -0.030996f, -0.011064f, 0.010930f, -0.045455f, 0.045981f, 0.001867f, 0.011715f, -0.062321f, 0.033186f, 0.008294f, 0.010969f, -0.146318f, 0.019600f, -0.041573f, 0.067918f, 0.056669f, 0.059627f, 0.030758f, -0.119534f, -0.020871f, 0.025002f, 0.002564f, 0.007385f, 0.083854f, -0.013028f, -0.050460f, -0.061076f, 0.002453f, -0.067879f, -0.059089f, -0.052897f, 0.025201f, -0.098789f, 0.069800f, 0.132978f, -0.035034f, -0.016587f, -0.104266f, -0.023302f, 0.039918f, 0.024076f, -0.034700f, -0.007696f, -0.126162f, -0.044879f, 0.126618f, 0.053362f, -0.039337f, 0.036504f, -0.071584f, -0.053418f, 0.013926f, 0.002274f, 0.008519f, -0.049022f, -0.016872f, -0.010696f, -0.000093f, -0.070823f, 0.015078f, -0.009549f, -0.022096f, 0.008840f, 0.028984f, -0.038904f, -0.019295f, -0.006528f, 0.013769f, -0.030004f, -0.007957f, -0.005583f, -0.027970f, - -0.000086f, -0.051731f, 0.066952f, 0.021671f, -0.018172f, -0.006925f, -0.020327f, -0.002905f, 0.042795f, 0.012839f, -0.008478f, 0.022491f, -0.014519f, -0.064413f, 0.002482f, 0.002803f, 0.013098f, 0.028367f, -0.017311f, -0.012259f, 0.027559f, 0.033694f, 0.013990f, -0.031151f, -0.069226f, -0.096551f, 0.027009f, -0.042929f, -0.027438f, 0.027959f, -0.022331f, -0.034630f, 0.027642f, -0.045200f, -0.001651f, -0.051374f, 0.073750f, 0.000240f, -0.052077f, -0.016725f, 0.002280f, -0.006373f, 0.017961f, -0.036523f, -0.023536f, 0.006948f, 0.015694f, 0.007512f, 0.008172f, 0.026572f, -0.030927f, -0.013280f, -0.072488f, 0.026283f, 0.007894f, -0.023455f, 0.054111f, 0.028057f, -0.020790f, 0.080311f, 0.018983f, -0.052075f, 0.039524f, 0.005706f, 0.026036f, 0.052717f, -0.004097f, -0.014099f, 0.009266f, 0.043302f, 0.025851f, 0.000079f, -0.003678f, 0.046406f, -0.003382f, -0.055846f, -0.008706f, 0.009267f, 0.044194f, -0.020110f, 0.075507f, 0.081705f, -0.051662f, 0.042269f, 0.093542f, -0.025876f, 0.141641f, 0.078740f, -0.034567f, -0.032869f, -0.052390f, -0.060861f, -0.033271f, 0.018016f, -0.009826f, -0.011427f, - -0.001182f, -0.009891f, -0.097808f, -0.038883f, -0.096563f, 0.022058f, 0.087824f, -0.033323f, -0.004626f, -0.048112f, 0.024268f, 0.005207f, 0.017451f, 0.023646f, 0.073786f, -0.004279f, 0.033879f, 0.033330f, -0.054277f, 0.001695f, 0.000530f, 0.011350f, 0.024685f, -0.003747f, -0.012349f, 0.022218f, -0.002731f, -0.013258f, 0.003539f, -0.023357f, -0.004823f, 0.016160f, 0.003783f, -0.010353f, -0.051931f, 0.002129f, -0.023594f, -0.002537f, -0.019789f, 0.043408f, -0.014129f, 0.020906f, 0.027070f, -0.021472f, 0.032535f, 0.019964f, 0.000927f, -0.011833f, -0.019489f, 0.004480f, -0.001696f, -0.011959f, -0.001447f, 0.021405f, -0.016300f, 0.009064f, -0.005537f, 0.015335f, -0.040968f, 0.124385f, 0.032842f, -0.044538f, 0.004966f, -0.058491f, -0.007677f, 0.020514f, -0.024300f, -0.031088f, -0.034674f, -0.013141f, 0.013319f, -0.007657f, -0.011155f, 0.015798f, 0.009095f, 0.021414f, -0.022132f, -0.013889f, 0.015920f, -0.005742f, 0.002821f, -0.032335f, 0.021903f, -0.037853f, 0.018133f, 0.012481f, -0.008187f, -0.001712f, 0.001353f, -0.021985f, 0.003650f, 0.004455f, -0.017550f, 0.031617f, -0.017064f, 0.007630f, - 0.000132f, 0.001067f, 0.015950f, -0.015649f, -0.024320f, -0.007333f, 0.036519f, -0.027179f, 0.017861f, -0.049803f, -0.029649f, 0.009395f, -0.010820f, -0.000842f, -0.003351f, -0.030009f, 0.031710f, 0.025325f, 0.002246f, -0.021991f, -0.001157f, -0.013399f, 0.006466f, -0.016708f, -0.000605f, -0.016042f, 0.011891f, -0.004480f, 0.003038f, 0.040182f, -0.034138f, -0.002978f, 0.005957f, 0.002390f, -0.007479f, 0.000889f, -0.016250f, 0.000854f, -0.013639f, 0.008215f, 0.015786f, -0.024456f, -0.020354f, 0.011606f, 0.001405f, -0.005854f, -0.019409f, 0.008256f, 0.002461f, -0.000898f, -0.004515f, 0.000097f, -0.004564f, 0.013364f, -0.009088f, -0.002567f, 0.006110f, -0.004593f, -0.000875f, 0.010687f, -0.007364f, -0.004824f, -0.002927f, 0.002205f, 0.010961f, -0.003885f, -0.012694f, 0.000663f, -0.008240f, 0.028878f, -0.011882f, 0.003466f, 0.006436f, -0.007461f, 0.022923f, -0.003422f, -0.020236f, 0.007083f, -0.011648f, 0.014146f, 0.006804f, -0.003287f, -0.001435f, -0.005436f, -0.005680f, 0.013962f, -0.009537f, -0.004372f, -0.001748f, -0.012430f, 0.015594f, -0.060172f, -0.087621f, 0.060893f, 0.282840f, 0.123132f, - 0.129914f, -0.001381f, -0.260790f, -0.189684f, -0.097875f, -0.206488f, 0.100491f, 0.122316f, 0.064375f, 0.265779f, 0.120253f, -0.012105f, 0.088811f, -0.172879f, -0.219255f, -0.125968f, -0.153463f, -0.033727f, 0.119487f, 0.121346f, 0.051513f, 0.204225f, 0.102088f, -0.014777f, 0.098943f, -0.091172f, -0.155088f, -0.089720f, -0.116571f, -0.184151f, 0.068046f, -0.002098f, -0.065514f, 0.197255f, 0.119478f, 0.066537f, 0.202834f, 0.048483f, -0.102443f, 0.099254f, -0.146235f, -0.167590f, -0.033860f, -0.176242f, -0.178039f, 0.070129f, -0.029181f, 0.042729f, 0.225228f, 0.153678f, 0.160674f, 0.150919f, 0.018661f, -0.085183f, -0.097734f, -0.164462f, -0.215033f, -0.113286f, -0.061089f, -0.044908f, 0.082482f, 0.127861f, 0.120654f, 0.170152f, 0.154236f, -0.024092f, -0.026995f, -0.028018f, -0.157912f, -0.047747f, -0.077678f, -0.117823f, 0.026467f, 0.047874f, 0.007972f, 0.109204f, 0.049030f, 0.000697f, 0.068730f, -0.053072f, -0.057988f, 0.001310f, -0.037653f, -0.012188f, 0.028743f, -0.006191f, 0.031888f, 0.042183f, -0.023290f, 0.033125f, 0.013692f, -0.051603f, 0.004951f, -0.024753f, -0.097395f, -0.001654f, - -0.024709f, -0.041850f, 0.094136f, 0.027931f, 0.035382f, 0.123296f, 0.049026f, 0.036011f, 0.027223f, -0.061517f, -0.089613f, -0.083305f, -0.139510f, -0.114307f, -0.050823f, 0.004563f, 0.062713f, 0.143266f, 0.151895f, 0.139317f, 0.123557f, 0.076145f, -0.030526f, -0.087747f, -0.174701f, -0.221408f, -0.170898f, -0.102706f, -0.036302f, 0.092897f, 0.172227f, 0.197958f, 0.202933f, 0.097725f, -0.024475f, -0.067145f, -0.082511f, -0.106414f, -0.076913f, -0.079025f, -0.063943f, -0.009501f, 0.019135f, 0.031273f, 0.053686f, 0.057702f, 0.052809f, 0.048153f, 0.026121f, 0.006821f, -0.008222f, -0.027396f, -0.042600f, -0.042138f, -0.036142f, -0.025954f, -0.014910f, 0.005063f, 0.016574f, 0.022947f, 0.023818f, 0.022916f, 0.014758f, 0.008920f, -0.000088f, -0.000836f, -0.004109f, -0.005964f, -0.008774f, -0.004591f, -0.007030f, -0.007801f, -0.007523f, -0.004964f, -0.010693f, -0.004424f, 0.000123f, 0.005479f, 0.012290f, 0.016898f, 0.011297f, 0.015242f, 0.009338f, 0.002906f, -0.005278f, -0.011823f, -0.018743f, -0.016311f, -0.016325f, -0.007578f, -0.000957f, 0.008011f, 0.009614f, 0.014415f, 0.011902f, 0.009805f, - 0.003545f, 0.001671f, -0.004605f, -0.004449f, -0.007353f, -0.006265f, -0.005689f, -0.001432f, -0.002771f, 0.001502f, -0.000441f, 0.002331f, 0.001719f, 0.001714f, -0.000629f, 0.003726f, 0.001747f, 0.004256f, 0.001166f, 0.001794f, 0.000062f, 0.000223f, -0.004193f, -0.002672f, -0.005281f, -0.002857f, -0.003155f, 0.000163f, -0.000369f, 0.003314f, 0.001792f, 0.004026f, 0.001783f, 0.002802f, -0.000164f, 0.001123f, -0.001660f, -0.000201f, -0.002298f, -0.000082f, -0.001947f, 0.000496f, -0.001194f} - }, - { - {0.009029f, 0.005082f, -0.008051f, -0.001926f, -0.002933f, -0.000331f, 0.012234f, 0.000627f, -0.005135f, 0.006341f, 0.001376f, 0.000585f, 0.002209f, 0.001277f, 0.000178f, 0.009081f, 0.005228f, -0.006263f, -0.002318f, -0.000781f, -0.002107f, 0.002497f, 0.003975f, 0.002555f, -0.002584f, -0.004025f, 0.001590f, -0.008039f, -0.003555f, 0.005916f, 0.000595f, 0.004750f, 0.002535f, -0.003957f, 0.003015f, -0.000017f, -0.003363f, 0.008335f, -0.005554f, -0.002713f, 0.001142f, 0.002822f, -0.003776f, -0.001080f, -0.005452f, -0.010999f, 0.010294f, -0.002120f, -0.005631f, 0.000533f, 0.009469f, -0.000060f, 0.003706f, -0.004742f, -0.002663f, -0.001997f, 0.002959f, -0.003765f, 0.007587f, 0.001118f, 0.006853f, -0.009917f, 0.004236f, -0.002629f, 0.001717f, 0.004113f, -0.001628f, -0.001167f, -0.007206f, -0.000019f, 0.004004f, 0.000823f, -0.001957f, -0.000413f, 0.003572f, -0.001923f, -0.001868f, 0.005448f, -0.002447f, 0.001682f, -0.000979f, -0.000401f, -0.006722f, -0.002862f, -0.001782f, 0.002408f, -0.000438f, -0.003099f, -0.000452f, -0.000688f, -0.001840f, 0.001736f, -0.002215f, 0.000079f, 0.000581f, 0.001090f, - 0.001912f, -0.000879f, -0.001577f, 0.001657f, 0.000416f, -0.001318f, 0.000294f, 0.002874f, -0.000330f, -0.000358f, 0.001246f, 0.000029f, 0.000461f, 0.000405f, -0.000836f, -0.001670f, -0.000850f, 0.001187f, -0.000235f, 0.000068f, 0.000683f, -0.000930f, 0.000884f, -0.000056f, -0.000459f, 0.003153f, 0.025708f, 0.008768f, -0.001999f, 0.006918f, 0.000389f, 0.012634f, 0.007994f, -0.001811f, 0.006546f, 0.011341f, 0.014912f, -0.008816f, -0.008561f, 0.003622f, -0.003434f, -0.002908f, 0.010673f, 0.008564f, 0.008224f, 0.005813f, 0.001135f, -0.000370f, -0.003681f, 0.004026f, 0.002869f, 0.013520f, 0.001405f, -0.000328f, -0.005961f, 0.002788f, 0.004003f, -0.000806f, -0.001814f, -0.002154f, 0.003709f, -0.000572f, -0.002151f, -0.004998f, 0.005298f, -0.001801f, -0.001748f, 0.007450f, 0.010653f, -0.002773f, -0.001268f, 0.006105f, 0.005528f, 0.009694f, 0.006061f, 0.002639f, 0.001035f, 0.008248f, 0.004721f, -0.011456f, 0.000046f, 0.003469f, -0.006547f, 0.000135f, 0.001110f, -0.008183f, 0.004182f, -0.003992f, 0.006142f, -0.001354f, -0.001021f, 0.003250f, 0.001091f, -0.005658f, -0.000468f, 0.003083f, - -0.001070f, -0.001429f, -0.001597f, 0.000568f, 0.006535f, 0.001109f, -0.006513f, -0.001596f, 0.001573f, -0.001993f, -0.000799f, 0.009577f, -0.001914f, 0.001128f, -0.001094f, -0.002501f, 0.002209f, 0.003536f, -0.000894f, 0.001584f, 0.001786f, -0.001825f, 0.000884f, 0.001558f, 0.000409f, -0.001229f, -0.003343f, -0.001095f, -0.001998f, -0.000991f, -0.000211f, 0.001027f, -0.000592f, 0.001244f, 0.000742f, -0.000340f, 0.008869f, -0.000679f, -0.016783f, -0.007792f, -0.003267f, -0.003616f, -0.009142f, -0.008371f, -0.005278f, 0.009101f, -0.010000f, -0.004650f, -0.004757f, 0.001841f, 0.015147f, -0.002264f, -0.001217f, 0.003720f, 0.008663f, -0.013256f, -0.002178f, 0.002720f, -0.005871f, 0.004697f, 0.007404f, -0.008169f, -0.000519f, 0.001067f, -0.004771f, -0.012030f, 0.002082f, -0.005059f, 0.001619f, -0.004657f, 0.006879f, -0.008302f, -0.007775f, -0.019100f, -0.005165f, 0.006585f, -0.001080f, -0.007321f, -0.003627f, -0.000911f, -0.007701f, 0.000400f, -0.001309f, 0.005294f, 0.004163f, -0.001967f, 0.000226f, -0.001944f, -0.008129f, 0.009923f, 0.001713f, 0.006711f, -0.002473f, 0.000036f, 0.001729f, 0.002911f, - 0.007663f, -0.002448f, -0.001868f, 0.002282f, -0.000230f, 0.008393f, 0.004465f, -0.007233f, -0.002890f, -0.001795f, -0.011486f, -0.001276f, -0.001098f, 0.006837f, -0.004411f, 0.006232f, 0.001054f, -0.000205f, -0.000653f, -0.001082f, -0.001253f, 0.001340f, -0.004645f, 0.002164f, -0.002685f, 0.002351f, 0.001978f, 0.000914f, 0.000557f, 0.006695f, 0.004886f, -0.001213f, 0.006065f, -0.000812f, -0.002066f, -0.001917f, 0.001173f, -0.000420f, 0.004145f, -0.001061f, 0.002581f, 0.002127f, -0.000389f, 0.001786f, -0.000021f, 0.001870f, 0.001814f, 0.000554f, 0.000610f, 0.002024f, 0.001318f, -0.002727f, -0.001532f, -0.000271f, 0.003359f, 0.003784f, -0.000011f, -0.000380f, 0.002021f, 0.000037f, -0.001279f, -0.036950f, -0.011498f, -0.003317f, -0.002928f, -0.003142f, 0.014293f, -0.013199f, 0.006373f, -0.003125f, 0.002940f, -0.003813f, -0.003007f, -0.010639f, 0.001777f, -0.003916f, 0.000839f, -0.015418f, 0.000345f, -0.001628f, -0.002717f, -0.000306f, 0.002919f, 0.002272f, -0.001425f, -0.001108f, -0.006131f, 0.001846f, -0.004919f, 0.003197f, 0.000018f, 0.002722f, 0.009616f, -0.002567f, -0.010972f, -0.004757f, - -0.012853f, 0.001727f, 0.002338f, -0.001222f, 0.002246f, -0.004552f, 0.004328f, 0.002162f, -0.005688f, 0.000437f, -0.015461f, -0.003354f, -0.010338f, 0.005609f, 0.010243f, -0.009070f, -0.000697f, 0.002880f, 0.001578f, -0.014816f, 0.002470f, 0.007534f, -0.007081f, -0.003429f, -0.016840f, 0.005663f, -0.002432f, 0.006909f, 0.012481f, 0.007060f, -0.010028f, 0.002073f, 0.002373f, 0.000499f, -0.011152f, 0.002829f, -0.004755f, 0.007375f, -0.003003f, -0.000410f, 0.003484f, 0.002979f, 0.008775f, 0.009936f, 0.006827f, -0.000554f, 0.002523f, 0.005901f, 0.003005f, -0.005930f, -0.001215f, -0.003970f, -0.003948f, 0.001753f, -0.000173f, 0.000919f, 0.000094f, -0.001212f, -0.000333f, 0.003553f, -0.001185f, -0.001220f, 0.000101f, -0.001059f, -0.002646f, 0.003220f, 0.000124f, 0.001506f, 0.003949f, -0.000529f, 0.000438f, -0.003146f, 0.002003f, 0.001344f, 0.000318f, -0.003162f, 0.001032f, 0.000009f, 0.002090f, -0.022900f, 0.002586f, 0.004018f, -0.008112f, -0.001081f, 0.022396f, 0.017274f, 0.009485f, -0.002563f, -0.003979f, 0.011040f, 0.007041f, 0.003489f, 0.004282f, -0.009029f, 0.003141f, 0.000796f, - 0.010573f, -0.010091f, -0.004505f, -0.001985f, 0.001397f, -0.002124f, -0.011486f, -0.007914f, -0.008061f, -0.009692f, 0.005402f, 0.006373f, 0.004224f, 0.002784f, 0.000287f, 0.002717f, -0.001375f, -0.001328f, 0.000812f, -0.003578f, -0.000921f, 0.004984f, 0.004031f, -0.007942f, -0.008686f, -0.000903f, -0.008712f, 0.005177f, -0.002588f, -0.014955f, 0.001879f, 0.007469f, 0.010796f, 0.007320f, 0.000502f, 0.006910f, -0.010522f, -0.003505f, -0.004651f, -0.000841f, 0.000836f, 0.004658f, -0.003566f, -0.009819f, 0.011922f, -0.010842f, -0.005053f, 0.007210f, 0.017198f, 0.003934f, 0.003476f, -0.016815f, 0.018162f, 0.002046f, 0.012687f, 0.019277f, -0.004186f, 0.001950f, 0.002357f, -0.008061f, 0.016161f, 0.003637f, -0.005170f, 0.004307f, -0.002150f, 0.007799f, -0.013116f, -0.007174f, -0.013404f, -0.002755f, -0.005891f, 0.005278f, -0.003327f, 0.002166f, -0.006232f, -0.001761f, -0.001138f, -0.004206f, -0.000177f, -0.001673f, 0.001757f, -0.000442f, -0.001670f, -0.001086f, -0.000702f, 0.003043f, 0.000960f, -0.002587f, -0.005399f, 0.002919f, 0.003148f, 0.000401f, 0.000093f, -0.000252f, -0.002183f, 0.000808f, - -0.001429f, 0.003168f, 0.000722f, 0.001709f, -0.001816f, -0.002383f, -0.004266f, 0.002360f, 0.034444f, 0.024410f, -0.008754f, -0.012585f, 0.019093f, 0.012592f, 0.020103f, 0.029731f, -0.015009f, 0.010379f, 0.004896f, 0.008717f, 0.003820f, 0.005287f, 0.012218f, 0.003172f, 0.012480f, 0.000538f, -0.008029f, 0.003489f, -0.002610f, 0.004350f, -0.001514f, 0.023124f, 0.003860f, 0.005199f, 0.003094f, 0.001042f, 0.008026f, 0.003553f, 0.000452f, -0.001344f, 0.005742f, -0.004312f, 0.010985f, -0.008442f, 0.013231f, -0.006122f, 0.007998f, 0.004330f, 0.004885f, 0.004025f, 0.019437f, 0.015006f, 0.000925f, -0.004046f, -0.010551f, 0.011665f, -0.012858f, 0.003370f, -0.005625f, 0.005815f, 0.012171f, 0.001612f, -0.020382f, -0.016392f, 0.001708f, -0.010141f, -0.011160f, -0.006286f, -0.012867f, 0.004742f, 0.022306f, 0.011347f, -0.008214f, 0.000672f, 0.002575f, -0.005688f, -0.006573f, -0.000929f, 0.010956f, 0.012342f, -0.012923f, 0.006287f, 0.014301f, 0.003010f, 0.004707f, 0.007067f, 0.011145f, -0.001754f, -0.007606f, 0.003130f, -0.003274f, -0.000481f, -0.007297f, 0.006918f, 0.010538f, 0.001784f, - 0.001890f, 0.001631f, -0.007385f, -0.000897f, -0.000122f, -0.000647f, 0.000751f, -0.000986f, 0.001219f, 0.001085f, 0.003615f, 0.000560f, -0.000059f, 0.000517f, 0.002326f, 0.004167f, 0.002084f, 0.004404f, 0.002312f, 0.000961f, 0.001248f, -0.000711f, -0.006872f, -0.006946f, 0.001459f, 0.005441f, 0.001356f, -0.001375f, 0.001291f, -0.000728f, 0.003328f, -0.002453f, -0.002428f, -0.004272f, 0.001962f, 0.015294f, 0.002806f, 0.022099f, -0.002031f, -0.000178f, -0.007401f, -0.005814f, 0.007291f, 0.016740f, -0.004954f, 0.004498f, 0.001099f, 0.018127f, 0.007374f, -0.008323f, -0.007853f, 0.001261f, 0.003693f, 0.016477f, 0.015987f, 0.024556f, 0.004359f, 0.006889f, -0.004385f, 0.010056f, 0.011259f, -0.004330f, -0.005706f, 0.008870f, -0.006836f, -0.009303f, 0.008726f, 0.002731f, -0.010941f, -0.013243f, 0.020165f, 0.010224f, -0.000760f, 0.012987f, 0.002448f, -0.008999f, 0.019150f, -0.004437f, 0.000515f, -0.000400f, 0.004920f, -0.006936f, 0.004920f, -0.006948f, 0.004788f, -0.006450f, 0.005821f, -0.005264f, 0.007945f, -0.006655f, -0.006890f, 0.017967f, -0.022484f, 0.001323f, 0.002599f, -0.007640f, - 0.001439f, -0.025134f, -0.012444f, 0.012103f, -0.010107f, 0.007459f, -0.002739f, 0.005052f, 0.002132f, 0.004339f, 0.002595f, -0.011366f, 0.006088f, -0.006583f, -0.000820f, -0.014457f, -0.007922f, -0.003577f, -0.003526f, 0.004191f, 0.013624f, 0.007973f, -0.011077f, 0.004308f, 0.002100f, 0.000150f, -0.005352f, 0.000804f, -0.001057f, 0.002737f, 0.001224f, -0.002750f, -0.003783f, -0.001414f, -0.001081f, -0.002078f, 0.007871f, 0.001513f, -0.003069f, -0.001658f, 0.001857f, -0.003205f, 0.000306f, 0.001634f, 0.000074f, 0.000476f, -0.008387f, -0.003344f, -0.002112f, 0.001304f, -0.002352f, -0.000296f, 0.005265f, -0.000424f, -0.001429f, -0.001512f, 0.000541f, 0.001674f, -0.017952f, -0.015335f, -0.000127f, 0.006755f, 0.012466f, -0.014520f, 0.004136f, -0.013041f, 0.010770f, 0.008373f, -0.018089f, -0.003663f, 0.001875f, -0.021064f, -0.012085f, 0.012943f, -0.001728f, -0.000843f, 0.002986f, -0.001260f, -0.022193f, 0.020309f, 0.001244f, -0.014264f, -0.007037f, 0.002763f, -0.001915f, -0.013709f, -0.004187f, -0.007850f, 0.002232f, -0.000622f, -0.004448f, 0.004486f, -0.019245f, -0.008462f, 0.004904f, 0.025160f, - -0.004250f, -0.014681f, -0.010483f, -0.008147f, 0.017028f, -0.018132f, -0.003691f, -0.001200f, -0.019497f, -0.024169f, 0.005911f, -0.016734f, -0.002721f, 0.002572f, 0.012726f, 0.007207f, 0.000998f, 0.002832f, 0.015206f, -0.006526f, -0.004811f, 0.022677f, -0.015153f, 0.011842f, -0.005230f, -0.005589f, -0.002347f, -0.002668f, 0.024092f, 0.000624f, 0.009342f, -0.024779f, -0.018068f, 0.000666f, -0.003643f, 0.027822f, 0.000857f, 0.018990f, 0.007932f, 0.023732f, 0.014322f, -0.003526f, -0.016515f, -0.006134f, 0.011038f, 0.004888f, 0.007442f, -0.009086f, -0.010346f, -0.002797f, -0.003509f, 0.004959f, -0.002583f, -0.006609f, -0.001246f, -0.001571f, -0.000105f, -0.000771f, 0.000854f, -0.002673f, -0.003725f, 0.004563f, -0.000372f, 0.000329f, -0.001311f, -0.001965f, -0.001616f, 0.001268f, 0.003802f, -0.004006f, 0.000863f, -0.002446f, -0.003724f, 0.002635f, -0.001145f, -0.003394f, -0.004056f, -0.000752f, 0.003708f, 0.000417f, 0.000428f, 0.001445f, 0.006737f, -0.005724f, -0.004835f, -0.002907f, 0.000493f, 0.002759f, -0.029856f, 0.002962f, -0.003066f, 0.020433f, 0.002209f, -0.021466f, 0.025574f, 0.008371f, - -0.015261f, -0.033035f, -0.013958f, 0.032801f, 0.001463f, -0.004078f, -0.005643f, 0.003444f, 0.000911f, 0.010162f, 0.005173f, 0.010880f, -0.002522f, 0.019376f, -0.010149f, -0.022697f, 0.000784f, 0.001118f, -0.005603f, -0.000767f, 0.008343f, -0.005786f, -0.003671f, -0.001925f, 0.018008f, 0.014187f, 0.007120f, -0.001287f, -0.024983f, -0.000422f, -0.001495f, -0.000979f, -0.004323f, -0.000347f, -0.011052f, -0.020162f, -0.003376f, 0.013957f, 0.013316f, -0.005040f, 0.014321f, -0.004641f, 0.006063f, 0.016022f, 0.015063f, -0.033695f, 0.011353f, 0.012218f, 0.004828f, -0.008183f, -0.029813f, 0.017991f, 0.010372f, 0.005777f, -0.010782f, -0.005864f, -0.012182f, 0.006667f, -0.013492f, -0.002428f, 0.000005f, 0.012109f, -0.007727f, 0.006180f, 0.003107f, -0.021609f, -0.003217f, -0.014437f, 0.023474f, 0.011023f, -0.028098f, -0.005887f, 0.021838f, 0.011022f, -0.011715f, -0.005713f, -0.012917f, -0.004267f, 0.006355f, -0.003859f, -0.001769f, -0.004830f, -0.006330f, -0.010590f, 0.001813f, 0.000838f, -0.003645f, -0.001080f, 0.005189f, 0.003658f, -0.006933f, -0.002378f, 0.004672f, -0.001312f, 0.003515f, -0.004424f, - -0.003311f, -0.000878f, 0.000745f, 0.005662f, -0.006285f, -0.004312f, 0.002795f, -0.006879f, -0.000791f, -0.004864f, 0.002678f, -0.003872f, 0.006319f, -0.002360f, -0.001434f, -0.003425f, 0.003931f, 0.002782f, 0.007228f, 0.002112f, 0.018601f, 0.022604f, 0.023271f, 0.017725f, 0.022821f, -0.028667f, -0.018665f, -0.009917f, -0.009233f, -0.013745f, -0.010446f, -0.023009f, -0.007732f, 0.001513f, 0.013759f, -0.000046f, -0.013086f, -0.000647f, 0.013753f, 0.000639f, -0.011281f, -0.005352f, 0.031204f, 0.002997f, 0.011776f, 0.003566f, 0.012940f, 0.002599f, 0.004250f, -0.019175f, 0.010758f, 0.000695f, 0.004498f, -0.020095f, 0.007020f, -0.030851f, 0.000060f, -0.009772f, 0.007717f, -0.002842f, -0.022450f, -0.000564f, -0.022344f, 0.004091f, -0.018553f, 0.016993f, -0.009576f, 0.026725f, 0.000913f, -0.000508f, 0.013555f, 0.002883f, -0.004156f, -0.003946f, 0.005537f, -0.009150f, 0.006400f, 0.016492f, 0.008529f, -0.012282f, -0.006335f, 0.035359f, 0.002802f, 0.028205f, -0.026052f, -0.005499f, -0.002670f, 0.020522f, -0.022714f, 0.003228f, 0.011040f, -0.022691f, 0.015965f, -0.014248f, 0.004267f, 0.022073f, - 0.002503f, 0.012440f, 0.006005f, 0.028844f, 0.012608f, -0.011948f, -0.009290f, -0.011509f, 0.001874f, 0.001116f, 0.012260f, -0.007195f, -0.001236f, 0.007932f, 0.000697f, 0.006123f, 0.008449f, 0.001174f, -0.006539f, 0.008005f, 0.006269f, -0.000755f, 0.002632f, 0.002704f, -0.002794f, -0.002369f, -0.009312f, 0.006351f, -0.004378f, -0.004220f, -0.001699f, -0.004895f, 0.004799f, -0.003325f, -0.000976f, -0.005244f, -0.001131f, -0.001162f, 0.006833f, 0.004787f, -0.000053f, -0.001042f, -0.000227f, 0.003813f, 0.004741f, 0.004045f, 0.008736f, -0.000953f, -0.003171f, -0.008401f, -0.028852f, 0.004576f, 0.027637f, 0.021126f, 0.022545f, -0.007300f, -0.006086f, 0.005980f, -0.004178f, 0.028482f, 0.009223f, 0.013721f, 0.023553f, -0.001429f, 0.008693f, -0.015844f, 0.023468f, 0.012127f, -0.006147f, -0.014213f, -0.013685f, 0.016186f, -0.027645f, 0.011036f, 0.015639f, -0.011169f, -0.015502f, -0.008448f, 0.014585f, 0.005825f, -0.005725f, -0.009756f, 0.000048f, -0.016625f, -0.025599f, 0.004937f, -0.024572f, -0.036112f, -0.004714f, 0.001707f, 0.036766f, -0.015620f, -0.012704f, 0.016725f, 0.027063f, 0.027504f, - 0.014377f, -0.001364f, 0.006199f, -0.011444f, 0.001994f, -0.012009f, 0.030289f, 0.027099f, 0.017286f, -0.000953f, -0.031167f, 0.000088f, -0.026629f, 0.029558f, 0.022665f, 0.014407f, -0.022111f, 0.018448f, 0.010275f, 0.012852f, -0.004190f, -0.018414f, -0.013644f, -0.014681f, 0.005013f, -0.020743f, -0.038506f, 0.007793f, 0.026024f, 0.014029f, 0.025554f, -0.007574f, -0.007094f, 0.026087f, 0.008580f, 0.003710f, 0.017159f, 0.005902f, 0.000470f, 0.015022f, 0.009294f, -0.001167f, 0.006745f, 0.006631f, 0.003878f, -0.004701f, -0.008501f, -0.011020f, 0.003000f, 0.007437f, 0.004204f, 0.015142f, 0.000391f, 0.010848f, -0.003351f, 0.004565f, 0.008450f, 0.001357f, -0.003846f, -0.002111f, -0.012378f, -0.010452f, 0.003775f, 0.002896f, 0.004984f, 0.013172f, 0.001965f, 0.010062f, -0.003677f, -0.001964f, 0.001764f, -0.009310f, -0.007420f, -0.002559f, -0.007960f, 0.004015f, -0.002583f, 0.003293f, 0.007326f, 0.010377f, 0.014670f, 0.023179f, 0.050125f, 0.022155f, 0.017538f, 0.016197f, -0.030928f, -0.004959f, -0.011275f, 0.039508f, -0.040181f, -0.038259f, 0.010994f, 0.025753f, -0.000674f, 0.031516f, - 0.028727f, -0.001471f, 0.011084f, -0.019072f, -0.013642f, 0.029953f, -0.011809f, 0.020548f, 0.007349f, -0.013478f, -0.006947f, -0.006035f, -0.006589f, -0.014058f, 0.011710f, 0.012362f, 0.010460f, 0.000865f, -0.015576f, -0.020180f, 0.026013f, -0.025668f, 0.020150f, 0.001743f, -0.031467f, 0.015761f, 0.030057f, -0.000726f, -0.008122f, -0.003926f, 0.002472f, 0.001611f, 0.020517f, -0.001197f, -0.015366f, -0.006543f, 0.017462f, -0.031882f, 0.007700f, -0.005447f, 0.025857f, 0.027124f, 0.018223f, 0.021204f, 0.028109f, 0.020054f, 0.007370f, -0.018376f, -0.020542f, 0.009819f, 0.013729f, -0.001114f, 0.011897f, 0.016058f, 0.042825f, -0.024277f, 0.027110f, -0.016179f, -0.010227f, 0.029316f, 0.004520f, -0.017710f, -0.015293f, -0.016350f, -0.026366f, -0.009142f, -0.012871f, 0.021005f, 0.000554f, -0.017015f, 0.009291f, 0.005745f, -0.003567f, 0.009794f, -0.020095f, 0.013032f, 0.000900f, -0.002003f, -0.002123f, 0.011058f, 0.001973f, 0.002826f, 0.011707f, -0.004967f, 0.001950f, 0.008407f, -0.012848f, 0.008977f, 0.000568f, 0.003274f, -0.005719f, 0.007136f, -0.002530f, 0.000740f, 0.009997f, -0.000074f, - -0.002355f, 0.002428f, 0.006758f, 0.008355f, 0.014178f, 0.011408f, 0.004248f, -0.006654f, -0.005396f, -0.020209f, 0.004489f, -0.016849f, -0.004911f, -0.007399f, -0.006848f, 0.007823f, 0.003062f, -0.008102f, -0.033312f, -0.005956f, 0.019397f, -0.023933f, 0.000767f, -0.015061f, -0.026315f, 0.038276f, 0.032735f, 0.027356f, 0.012978f, 0.007124f, 0.010775f, 0.028098f, 0.015531f, 0.028806f, -0.010667f, 0.024126f, -0.018181f, 0.029221f, 0.039263f, 0.024608f, 0.019627f, 0.009984f, 0.020272f, 0.020412f, -0.006068f, 0.040627f, 0.009757f, -0.024520f, 0.011626f, -0.024825f, -0.017068f, -0.005097f, -0.038596f, 0.000651f, -0.008232f, -0.010477f, -0.018767f, -0.009770f, -0.005395f, -0.001217f, -0.003812f, 0.001663f, 0.001608f, -0.022165f, -0.014637f, 0.004578f, -0.011706f, 0.009188f, 0.038000f, -0.019175f, -0.001557f, -0.003624f, 0.001394f, -0.018181f, 0.009780f, -0.008740f, 0.029410f, 0.006251f, 0.017561f, 0.027504f, 0.004683f, -0.001838f, -0.018163f, -0.040412f, 0.005318f, 0.030064f, 0.021813f, -0.005700f, -0.026943f, 0.022678f, 0.002371f, 0.013658f, -0.034491f, -0.024756f, -0.022720f, -0.034192f, - -0.021187f, -0.025017f, 0.011627f, 0.003692f, 0.008727f, 0.011405f, 0.015758f, -0.007724f, 0.016039f, 0.018262f, 0.000551f, 0.009817f, -0.005889f, -0.012132f, -0.012513f, -0.013134f, -0.005283f, -0.009576f, -0.000611f, 0.002886f, -0.001292f, 0.000866f, 0.002408f, -0.011111f, -0.010301f, -0.017591f, -0.006055f, -0.004080f, -0.009813f, 0.003869f, 0.001433f, -0.005196f, -0.015938f, -0.007319f, -0.005899f, -0.004103f, 0.013250f, 0.004061f, -0.005823f, -0.007335f, -0.002700f, -0.019090f, 0.005187f, -0.003884f, 0.009844f, 0.001136f, -0.006035f, -0.011250f, 0.011727f, -0.007711f, 0.016782f, -0.057186f, -0.036610f, -0.017420f, 0.040849f, 0.029745f, -0.022152f, 0.025484f, 0.023000f, 0.019609f, 0.019202f, -0.019203f, 0.001934f, 0.011061f, -0.019101f, -0.057645f, -0.010547f, -0.016022f, -0.035355f, 0.003155f, -0.012087f, -0.009083f, 0.010763f, 0.006379f, -0.007902f, 0.001645f, 0.026958f, 0.028826f, -0.053159f, 0.012568f, 0.002652f, 0.024506f, 0.008310f, 0.001271f, -0.033135f, 0.010023f, -0.008544f, -0.009268f, -0.022813f, -0.017005f, 0.042484f, -0.019411f, -0.000838f, 0.004971f, -0.011325f, 0.046958f, - 0.022269f, -0.021068f, -0.012757f, -0.036950f, -0.005399f, 0.035075f, 0.010247f, 0.010516f, -0.011648f, 0.021366f, -0.005158f, -0.009426f, 0.019708f, -0.011878f, 0.032735f, -0.007870f, 0.024362f, -0.050013f, -0.016983f, 0.028396f, 0.006923f, -0.004759f, 0.007934f, -0.055335f, -0.026184f, 0.008198f, -0.022113f, 0.008236f, 0.002138f, 0.005928f, 0.033728f, -0.012867f, 0.013548f, -0.002892f, -0.027597f, -0.004998f, 0.020712f, 0.029909f, -0.001072f, -0.012871f, -0.023415f, 0.000395f, -0.032649f, -0.010847f, 0.002708f, 0.038020f, 0.034052f, 0.004392f, 0.014241f, 0.004016f, -0.005837f, 0.018683f, 0.014214f, -0.007822f, 0.015611f, 0.011581f, 0.006182f, -0.013494f, -0.001047f, -0.007153f, 0.011353f, 0.007697f, 0.010083f, -0.001182f, -0.015738f, 0.014358f, 0.000533f, -0.007615f, -0.015334f, -0.001086f, -0.001372f, -0.014708f, 0.009914f, -0.010799f, -0.016725f, 0.018341f, -0.007638f, -0.006722f, -0.008530f, 0.003783f, 0.002514f, 0.014605f, 0.003147f, -0.002965f, 0.006065f, 0.008873f, -0.016951f, 0.004208f, 0.004610f, -0.006894f, 0.010372f, -0.024905f, -0.071594f, -0.006067f, -0.008645f, -0.007752f, - 0.010950f, -0.028563f, 0.056091f, -0.010243f, 0.002460f, 0.061894f, -0.072886f, -0.007577f, -0.014299f, -0.006945f, -0.083481f, 0.004655f, -0.012975f, -0.016130f, 0.028224f, -0.028646f, 0.004320f, 0.005471f, 0.013411f, -0.002623f, -0.030490f, 0.020805f, -0.020059f, 0.043363f, -0.007560f, -0.049152f, -0.003725f, -0.001652f, -0.024914f, -0.049520f, 0.022134f, 0.025226f, -0.041583f, 0.033874f, -0.037621f, -0.029157f, -0.018069f, 0.003285f, 0.002887f, 0.005600f, 0.023816f, -0.004528f, -0.022970f, -0.053986f, 0.010872f, -0.072985f, -0.038946f, -0.025079f, -0.058662f, -0.034628f, -0.017025f, -0.003565f, -0.027629f, 0.041851f, 0.042861f, 0.009595f, -0.013136f, 0.047548f, 0.021255f, -0.005382f, -0.010890f, 0.034253f, 0.025051f, -0.011623f, 0.045063f, -0.037923f, -0.019650f, 0.049531f, 0.023089f, 0.069456f, -0.038075f, -0.042577f, 0.010864f, -0.032356f, 0.034761f, 0.003842f, 0.011989f, 0.066046f, -0.036521f, -0.038866f, -0.014507f, 0.013814f, 0.014898f, 0.016727f, 0.016739f, 0.019231f, -0.020435f, 0.008168f, 0.002984f, -0.001303f, -0.002466f, -0.013457f, -0.010956f, 0.019396f, -0.020928f, -0.000887f, - 0.004116f, -0.009899f, 0.002508f, -0.010151f, -0.000834f, -0.000936f, 0.004244f, -0.016489f, 0.008430f, 0.021013f, 0.006084f, 0.005214f, 0.022926f, 0.017112f, -0.001686f, -0.021980f, 0.020267f, 0.005374f, -0.007757f, -0.016326f, 0.021043f, 0.003376f, 0.000591f, 0.013076f, 0.016297f, -0.020844f, 0.010872f, 0.007083f, -0.015159f, -0.006024f, -0.023521f, 0.015025f, -0.002862f, -0.026550f, -0.013260f, 0.006571f, 0.055724f, 0.031553f, -0.005148f, 0.075201f, -0.008678f, 0.030782f, -0.035576f, 0.043819f, 0.041455f, -0.003946f, -0.033277f, 0.003335f, 0.012022f, -0.018768f, 0.019661f, -0.027307f, -0.000452f, -0.008529f, -0.008915f, -0.031014f, -0.022554f, -0.014224f, -0.001902f, -0.010187f, -0.024230f, 0.035749f, 0.024655f, 0.006459f, -0.010072f, 0.005914f, 0.034600f, 0.016083f, 0.025421f, 0.015788f, -0.018960f, -0.029534f, 0.059175f, -0.007983f, -0.032375f, -0.013724f, -0.013916f, -0.007973f, 0.042822f, 0.001603f, -0.033035f, -0.012854f, -0.082096f, -0.020458f, -0.009637f, 0.050325f, 0.034907f, -0.100008f, -0.042983f, -0.024520f, -0.000521f, 0.004755f, -0.039841f, 0.029070f, 0.015669f, 0.025264f, - 0.050020f, -0.065702f, 0.064013f, 0.045714f, -0.020819f, -0.044215f, 0.002785f, -0.011232f, 0.017031f, 0.058019f, -0.030215f, -0.034072f, 0.047518f, -0.056263f, -0.062673f, -0.025522f, 0.006402f, -0.018243f, -0.068680f, -0.028071f, -0.022214f, 0.000747f, 0.003754f, -0.019972f, -0.001395f, 0.002635f, 0.000817f, 0.005518f, -0.043418f, -0.015592f, -0.014390f, 0.002447f, 0.012121f, -0.003576f, -0.013891f, -0.008442f, 0.004605f, 0.021785f, 0.023663f, -0.003669f, -0.020572f, -0.005729f, 0.030108f, 0.001402f, -0.007855f, 0.005888f, -0.040887f, -0.012434f, -0.019298f, 0.002296f, 0.007049f, -0.040057f, -0.040421f, 0.009656f, 0.035125f, -0.015520f, 0.022982f, 0.006670f, -0.011341f, -0.003735f, 0.009317f, 0.006617f, -0.003343f, 0.006568f, -0.001179f, 0.052281f, 0.007032f, 0.019668f, -0.040801f, -0.064409f, 0.093104f, 0.046653f, 0.004237f, 0.006143f, -0.020935f, -0.054775f, 0.019247f, -0.004220f, 0.047023f, 0.010564f, 0.017467f, 0.051595f, 0.028528f, -0.000520f, -0.005470f, 0.008779f, -0.031391f, -0.025770f, -0.033376f, -0.018568f, 0.030963f, -0.008386f, 0.001991f, 0.038767f, -0.006608f, 0.017063f, - -0.053686f, -0.048168f, -0.032710f, 0.028014f, 0.011396f, -0.001674f, 0.012826f, -0.016965f, -0.048266f, 0.061119f, -0.057893f, 0.026830f, 0.027593f, 0.021829f, 0.009730f, 0.037074f, -0.023777f, -0.059118f, 0.043863f, 0.124391f, -0.021856f, 0.060258f, -0.072249f, -0.038844f, 0.044733f, 0.026326f, -0.067075f, -0.018740f, -0.005622f, 0.058452f, -0.014453f, -0.006135f, -0.091222f, -0.058474f, -0.020929f, -0.066829f, 0.056067f, 0.059910f, 0.094269f, -0.083256f, 0.035909f, 0.010658f, -0.046378f, -0.002461f, -0.002175f, -0.096195f, 0.068787f, -0.028409f, 0.032488f, -0.009666f, 0.005371f, 0.130725f, -0.035231f, 0.045513f, 0.029929f, -0.031361f, 0.056887f, 0.000172f, -0.010941f, 0.003730f, 0.014688f, 0.037011f, 0.022507f, 0.014888f, -0.001281f, 0.035060f, -0.032603f, -0.015790f, 0.002757f, 0.008985f, 0.016157f, -0.008650f, 0.028107f, 0.004075f, 0.012491f, -0.005183f, 0.021295f, -0.001496f, -0.031204f, 0.018241f, -0.038334f, -0.022337f, -0.008917f, 0.016741f, -0.004101f, 0.019931f, 0.044824f, 0.069579f, 0.049963f, 0.014089f, 0.032133f, -0.018228f, 0.016332f, -0.000834f, -0.001432f, -0.002599f, - 0.006672f, -0.013997f, 0.019630f, -0.018684f, -0.082849f, -0.047408f, -0.001443f, -0.012867f, -0.027586f, 0.009822f, 0.027075f, 0.002502f, -0.029173f, -0.001757f, -0.027955f, 0.076171f, -0.023213f, 0.001480f, 0.058218f, -0.003528f, -0.059184f, -0.041631f, -0.040371f, -0.018271f, -0.021373f, 0.063417f, 0.006862f, 0.010237f, 0.032004f, -0.017721f, -0.017516f, -0.010966f, -0.017863f, -0.039104f, -0.008871f, 0.072738f, 0.023812f, 0.017091f, -0.048262f, 0.017640f, 0.004053f, -0.034813f, -0.003784f, -0.017571f, 0.079463f, -0.062907f, -0.053840f, -0.019312f, 0.010125f, -0.018915f, 0.002657f, 0.021141f, -0.040999f, -0.011321f, 0.067342f, -0.054314f, 0.009734f, -0.013788f, -0.032639f, -0.057588f, -0.043594f, 0.001895f, -0.079635f, -0.096801f, 0.023147f, 0.019557f, 0.015729f, -0.086518f, 0.066858f, 0.080734f, -0.027273f, -0.023662f, 0.005261f, -0.003588f, -0.018043f, -0.045049f, 0.032687f, 0.121951f, 0.031913f, -0.030393f, 0.000788f, 0.019192f, 0.040946f, 0.010835f, -0.072108f, -0.064672f, 0.070029f, -0.013571f, -0.028407f, -0.042310f, 0.014673f, 0.079657f, 0.024619f, -0.025432f, 0.014880f, -0.003281f, - -0.014065f, -0.007161f, -0.004124f, 0.035160f, 0.019676f, -0.012177f, -0.019408f, 0.015832f, 0.009406f, -0.003123f, -0.007964f, 0.012782f, -0.018784f, 0.011603f, 0.030729f, -0.002949f, -0.016835f, -0.005214f, -0.010809f, -0.018648f, -0.034196f, 0.004896f, 0.026249f, -0.017601f, -0.021551f, 0.010598f, -0.026924f, 0.000087f, -0.043848f, 0.021020f, 0.027424f, 0.069907f, -0.022226f, -0.009564f, -0.028929f, -0.029736f, 0.008425f, 0.015407f, 0.029127f, -0.003497f, -0.006278f, -0.029312f, 0.011812f, 0.007260f, 0.008814f, -0.008655f, -0.001830f, 0.018442f, 0.021344f, -0.026490f, -0.069712f, 0.019260f, 0.027306f, -0.103355f, 0.056631f, 0.002404f, -0.029404f, 0.009876f, 0.037738f, -0.053429f, 0.033013f, -0.049615f, 0.013421f, -0.002902f, -0.024964f, -0.013913f, -0.006740f, -0.036536f, 0.026182f, 0.022867f, -0.001041f, 0.012601f, 0.001612f, 0.020225f, 0.026434f, 0.025527f, 0.037902f, 0.032530f, -0.020126f, 0.005049f, -0.041324f, 0.043803f, -0.033879f, 0.010710f, -0.006523f, 0.008914f, 0.002154f, -0.031330f, 0.028480f, -0.015892f, -0.030258f, 0.063458f, -0.050793f, 0.015233f, -0.014646f, -0.025267f, - 0.025621f, -0.006634f, 0.007603f, 0.039531f, -0.047816f, 0.001912f, -0.058588f, -0.115452f, -0.002946f, 0.036755f, -0.013866f, 0.148340f, 0.030204f, -0.058009f, 0.016297f, -0.080921f, 0.028087f, 0.057837f, 0.068354f, -0.023540f, -0.013493f, -0.089964f, -0.103090f, -0.008713f, -0.064274f, 0.015184f, -0.004067f, -0.056138f, -0.013146f, -0.027822f, -0.061414f, 0.050262f, 0.098964f, -0.027828f, 0.006970f, 0.021302f, -0.026270f, 0.030571f, 0.039007f, -0.027167f, 0.004516f, 0.000039f, -0.049301f, 0.024555f, 0.004137f, 0.014902f, 0.018009f, -0.034885f, 0.013609f, -0.018540f, -0.027969f, -0.031717f, 0.026884f, -0.019709f, 0.011038f, -0.030665f, -0.011066f, -0.002156f, -0.037348f, 0.036483f, -0.023686f, 0.007241f, 0.011128f, -0.034848f, -0.005697f, 0.026738f, -0.003203f, 0.003748f, 0.005939f, -0.010231f, 0.016442f, 0.034537f, -0.004173f, 0.020032f, 0.023663f, -0.029643f, -0.056167f, 0.018922f, 0.007823f, 0.032351f, 0.038804f, -0.050811f, -0.049876f, 0.008668f, -0.014660f, 0.008832f, 0.016906f, 0.009208f, -0.073661f, 0.015198f, -0.005380f, -0.042906f, 0.019294f, -0.027855f, -0.018848f, -0.034631f, - 0.017641f, -0.037716f, 0.048288f, -0.005127f, 0.017860f, -0.011132f, 0.064868f, -0.017630f, 0.035610f, -0.000581f, 0.042460f, -0.011861f, -0.021495f, 0.013875f, -0.024323f, -0.025666f, 0.003450f, 0.048348f, 0.031055f, -0.032925f, 0.035123f, -0.024699f, -0.037852f, 0.010653f, 0.051675f, -0.019907f, -0.021120f, 0.027649f, 0.012369f, -0.025781f, 0.002842f, 0.035172f, -0.014717f, -0.033877f, 0.018400f, 0.014088f, 0.021579f, 0.039601f, 0.008264f, -0.023945f, -0.007914f, 0.087021f, 0.091400f, -0.025314f, -0.075787f, 0.058045f, -0.025376f, 0.016345f, 0.008186f, 0.097986f, 0.013425f, -0.050925f, -0.018645f, -0.012377f, 0.002710f, 0.015124f, 0.023613f, 0.031811f, -0.037896f, 0.012110f, 0.008562f, 0.056783f, -0.014223f, 0.039991f, 0.043038f, 0.023798f, 0.020504f, 0.012364f, 0.034265f, -0.032939f, 0.036876f, 0.046921f, 0.033852f, 0.005676f, -0.066600f, -0.009998f, -0.042965f, 0.001942f, 0.028792f, 0.009637f, -0.014706f, -0.023440f, -0.013723f, -0.003786f, -0.001727f, 0.012147f, -0.013822f, 0.003684f, -0.001466f, -0.010504f, 0.020246f, 0.007836f, -0.018206f, -0.008648f, -0.004697f, 0.024695f, - -0.000041f, 0.005001f, -0.023873f, -0.017145f, -0.031660f, -0.014970f, -0.001959f, -0.003092f, 0.000402f, -0.005606f, -0.028378f, 0.007218f, -0.009714f, -0.004741f, 0.004186f, -0.008012f, -0.000424f, -0.024669f, -0.005874f, 0.000933f, 0.000363f, 0.000424f, -0.006289f, -0.006295f, -0.002172f, -0.009843f, -0.013845f, 0.103264f, 0.043534f, -0.046759f, 0.011345f, -0.048846f, -0.026383f, -0.003433f, 0.017716f, -0.007875f, 0.037938f, -0.045182f, -0.001333f, 0.017701f, -0.001449f, 0.018412f, -0.002623f, 0.006403f, 0.004394f, -0.032404f, -0.010085f, 0.008406f, -0.030092f, -0.030459f, 0.002618f, 0.007732f, -0.021383f, 0.015268f, 0.014890f, -0.009123f, -0.015098f, -0.002503f, 0.003347f, -0.005389f, 0.012801f, 0.003194f, 0.010095f, -0.013392f, -0.005588f, 0.023561f, 0.000075f, 0.001143f, 0.011476f, -0.007706f, 0.012691f, -0.012135f, -0.022339f, -0.014616f, 0.023180f, -0.018448f, -0.013455f, 0.001367f, -0.018163f, -0.019742f, 0.028188f, -0.028059f, 0.044527f, 0.009694f, -0.019665f, 0.019420f, 0.003143f, -0.033020f, 0.002934f, -0.005954f, -0.005729f, 0.015603f, -0.000455f, -0.019395f, 0.037885f, -0.022744f, - -0.008760f, 0.019544f, 0.006345f, -0.008289f, 0.001022f, 0.006018f, -0.000581f, -0.001633f, -0.003865f, 0.008663f, 0.015767f, -0.000644f, -0.026177f, 0.018737f, -0.013479f, -0.002065f, 0.022484f, -0.001517f, -0.006822f, -0.000956f, -0.019346f, 0.009344f, 0.006755f, -0.002196f, 0.000472f, 0.007874f, -0.018838f, 0.001338f, -0.006428f, 0.001865f, 0.007852f, 0.001965f, -0.007985f, 0.018473f, -0.028109f, 0.003646f, 0.003367f, -0.002044f, 0.003525f, -0.004188f, -0.015855f, 0.017484f, -0.008098f, 0.012476f, 0.000248f, -0.002096f, 0.016556f, 0.006120f, -0.013789f, 0.005171f, -0.006934f, -0.006072f, 0.003209f, 0.010406f, 0.010683f, -0.004229f, -0.013613f, 0.006931f, -0.007731f, 0.009417f, -0.062757f, -0.074991f, 0.063208f, 0.257101f, 0.100290f, 0.118063f, 0.001386f, -0.240312f, -0.177345f, -0.092389f, -0.141370f, 0.063526f, 0.121329f, 0.050321f, 0.214655f, 0.121787f, -0.008308f, 0.050698f, -0.108865f, -0.218980f, -0.087692f, -0.152043f, -0.024564f, 0.105652f, 0.088618f, 0.080615f, 0.133699f, 0.082819f, 0.022487f, 0.036975f, -0.010215f, -0.155778f, -0.069164f, -0.055995f, -0.215727f, 0.040138f, - 0.028001f, -0.095522f, 0.154961f, 0.153767f, -0.005496f, 0.194506f, 0.095301f, -0.090115f, 0.060043f, -0.089592f, -0.187066f, -0.014666f, -0.113107f, -0.163316f, 0.028614f, 0.017635f, -0.010040f, 0.152561f, 0.146691f, 0.087919f, 0.130547f, 0.079652f, -0.051171f, -0.057210f, -0.102259f, -0.174613f, -0.129241f, -0.061403f, -0.057969f, 0.031465f, 0.098369f, 0.067563f, 0.108101f, 0.163828f, 0.063381f, -0.021427f, -0.020806f, -0.113155f, -0.091781f, 0.008481f, -0.105310f, -0.047576f, 0.056619f, 0.014124f, 0.070956f, 0.057428f, -0.029580f, 0.019193f, -0.006250f, -0.039040f, 0.008294f, -0.017398f, -0.018045f, 0.036263f, 0.012190f, 0.015384f, 0.047821f, -0.027643f, -0.011132f, 0.026229f, -0.036324f, -0.029450f, 0.013262f, -0.086011f, -0.014720f, 0.029562f, -0.069767f, 0.033996f, 0.042912f, 0.004655f, 0.108390f, 0.103538f, 0.023371f, 0.042045f, -0.030670f, -0.092479f, -0.046851f, -0.123093f, -0.140217f, -0.079268f, -0.034203f, 0.026490f, 0.132766f, 0.154366f, 0.161233f, 0.143613f, 0.081513f, -0.017916f, -0.090879f, -0.143040f, -0.200048f, -0.170747f, -0.094504f, -0.024415f, 0.079867f, 0.144275f, - 0.143461f, 0.128703f, 0.083125f, -0.015824f, -0.026528f, -0.041469f, -0.063077f, -0.044585f, -0.039792f, -0.046466f, -0.025716f, -0.013197f, -0.011886f, 0.009058f, 0.026246f, 0.035633f, 0.046051f, 0.042901f, 0.032981f, 0.014644f, 0.001170f, -0.017460f, -0.026079f, -0.034016f, -0.036274f, -0.035980f, -0.015318f, 0.001145f, 0.012410f, 0.012302f, 0.018599f, 0.019964f, 0.021207f, 0.015344f, 0.004335f, -0.002068f, -0.001308f, -0.007677f, -0.006494f, -0.005956f, -0.011444f, -0.013330f, -0.002966f, -0.004652f, -0.003280f, -0.002119f, -0.001571f, 0.004915f, 0.013253f, 0.010012f, 0.010329f, 0.010074f, 0.005654f, 0.001631f, -0.002091f, -0.010275f, -0.011303f, -0.012345f, -0.009166f, -0.005483f, -0.000353f, 0.001354f, 0.005741f, 0.008289f, 0.008725f, 0.004334f, 0.002833f, 0.000713f, 0.000586f, -0.000919f, -0.001603f, -0.003133f, -0.001072f, -0.001793f, -0.001490f, -0.002574f, -0.002488f, -0.003214f, -0.001768f, -0.002323f, 0.001159f, 0.003146f, 0.005595f, 0.005257f, 0.004999f, 0.002613f, 0.001792f, -0.001704f, -0.002871f, -0.003979f, -0.004411f, -0.005222f, -0.001939f, -0.001433f, 0.000402f, 0.000877f, - 0.002187f, 0.001764f, 0.003181f, 0.001526f, 0.001830f, 0.000367f, 0.000361f, -0.001218f, -0.000415f, -0.001402f, -0.000251f, -0.000709f}, - {0.001020f, 0.006386f, -0.008690f, -0.007109f, -0.001197f, 0.006848f, 0.010141f, -0.004785f, 0.005930f, -0.003292f, -0.008407f, -0.002330f, -0.004691f, 0.002751f, -0.001140f, -0.004092f, 0.003755f, 0.005649f, 0.001291f, 0.006833f, -0.012535f, -0.013586f, -0.008696f, 0.001244f, -0.000013f, -0.002338f, 0.000676f, 0.004123f, -0.001336f, 0.005574f, 0.004641f, -0.005946f, 0.002277f, -0.000462f, 0.007264f, 0.006661f, 0.002541f, -0.007116f, 0.004674f, -0.004246f, 0.002387f, 0.004638f, -0.011318f, 0.012372f, 0.018218f, 0.002364f, 0.008267f, -0.006719f, -0.001333f, -0.006308f, -0.003248f, 0.005619f, -0.001863f, -0.006523f, -0.001704f, -0.004114f, 0.003157f, -0.004012f, -0.003610f, 0.000347f, 0.003348f, -0.003330f, -0.003718f, -0.001639f, 0.006487f, 0.005804f, -0.004898f, -0.001828f, -0.005792f, 0.001320f, 0.007702f, 0.002117f, -0.002791f, -0.003688f, 0.002911f, -0.001050f, -0.005211f, -0.001929f, -0.003511f, -0.000527f, -0.001872f, 0.003018f, 0.002866f, 0.001509f, -0.001659f, -0.002339f, 0.005201f, -0.000721f, 0.001433f, 0.002667f, -0.000748f, -0.000092f, -0.001049f, 0.001560f, 0.000234f, 0.000377f, - -0.001490f, 0.000194f, -0.000455f, -0.001526f, 0.000100f, -0.000254f, 0.001144f, 0.002705f, -0.001489f, 0.000613f, -0.000267f, 0.001305f, 0.001653f, -0.000417f, -0.000642f, -0.000365f, -0.000055f, -0.001479f, -0.000582f, 0.000628f, -0.000528f, 0.000251f, -0.000002f, 0.001188f, 0.000294f, 0.000135f, 0.028005f, 0.012872f, -0.000959f, 0.005849f, 0.005334f, -0.006726f, -0.003280f, 0.007752f, 0.003543f, 0.008438f, -0.006130f, 0.012275f, 0.004628f, -0.012138f, 0.009636f, 0.000500f, -0.000206f, -0.006413f, 0.007054f, -0.013122f, -0.011236f, -0.002424f, -0.003987f, -0.002192f, -0.004005f, 0.001503f, -0.002426f, -0.005466f, -0.003927f, 0.004544f, -0.004964f, 0.003168f, 0.002026f, 0.001259f, -0.005481f, 0.007693f, -0.016125f, -0.002859f, -0.000075f, -0.002850f, -0.002015f, 0.001368f, 0.003026f, -0.005201f, 0.004130f, -0.006297f, 0.006016f, 0.001875f, 0.001326f, 0.006165f, -0.004356f, -0.001079f, 0.002521f, 0.009660f, 0.002410f, 0.004036f, -0.002222f, -0.008437f, -0.011732f, 0.002130f, 0.006386f, 0.008293f, -0.003402f, -0.013161f, 0.001963f, -0.005400f, -0.003653f, -0.003070f, 0.003650f, 0.000353f, - 0.012848f, -0.000414f, 0.004331f, 0.002486f, -0.001935f, -0.003375f, -0.003572f, -0.013446f, -0.003932f, -0.002226f, -0.001816f, -0.002600f, 0.002504f, 0.006688f, 0.001885f, 0.006343f, -0.000063f, -0.000635f, -0.002030f, 0.001721f, 0.002332f, -0.000673f, -0.002591f, 0.002229f, -0.001330f, 0.000858f, -0.001127f, 0.001144f, -0.001918f, -0.001221f, 0.001829f, 0.000560f, 0.001036f, -0.000727f, 0.000641f, -0.001261f, 0.015132f, 0.003457f, -0.012685f, -0.014497f, 0.004007f, -0.004450f, -0.011921f, 0.013540f, -0.006626f, -0.002266f, -0.001811f, 0.010608f, 0.002285f, -0.006218f, 0.007517f, -0.005839f, 0.011339f, -0.015661f, -0.010265f, 0.012394f, -0.012941f, -0.013150f, -0.005224f, 0.010585f, 0.004694f, 0.005042f, -0.001215f, 0.009478f, 0.005801f, -0.001042f, -0.012552f, 0.003348f, -0.003471f, 0.004471f, 0.004018f, 0.003370f, 0.010944f, 0.002868f, -0.010738f, 0.000929f, 0.007510f, 0.010940f, 0.003727f, -0.006088f, -0.001408f, -0.008951f, 0.003815f, -0.015829f, -0.000602f, 0.016961f, 0.000926f, 0.001760f, -0.008721f, -0.010877f, 0.001670f, 0.002293f, 0.012533f, -0.002794f, 0.001087f, 0.001250f, - -0.001844f, 0.001218f, 0.004170f, 0.000676f, 0.008816f, -0.002460f, 0.005857f, 0.000797f, 0.001586f, 0.000989f, 0.010339f, 0.000361f, -0.001438f, 0.001839f, -0.002202f, -0.007061f, -0.003720f, -0.007278f, -0.000164f, 0.012939f, 0.002731f, -0.004333f, -0.001461f, -0.007502f, 0.004225f, -0.005891f, -0.004084f, 0.001337f, 0.000217f, 0.000360f, -0.003354f, -0.004824f, -0.000982f, 0.001098f, -0.001597f, 0.002645f, -0.000305f, -0.000085f, 0.002664f, 0.001587f, 0.002683f, 0.002138f, -0.000032f, 0.000800f, -0.002182f, 0.000039f, -0.001937f, -0.002161f, 0.001455f, 0.001661f, 0.003075f, 0.002150f, -0.001497f, -0.000469f, 0.001624f, -0.001284f, -0.002359f, 0.001243f, 0.000331f, 0.000018f, 0.000300f, -0.034789f, -0.022554f, -0.005098f, 0.003869f, 0.005474f, 0.000681f, -0.000155f, -0.013150f, -0.000928f, -0.002794f, -0.002326f, 0.000380f, -0.003481f, -0.001439f, -0.009906f, 0.005169f, -0.020721f, -0.007451f, 0.001737f, -0.004056f, -0.006411f, -0.003528f, -0.011839f, -0.005868f, -0.004985f, -0.005489f, 0.002482f, -0.009004f, -0.005107f, 0.011326f, 0.007221f, 0.000836f, 0.005290f, 0.004045f, -0.003799f, - -0.007465f, 0.004360f, 0.016872f, 0.001791f, 0.002180f, -0.006737f, -0.005846f, 0.004824f, -0.014314f, -0.007773f, 0.016019f, -0.014695f, 0.004478f, -0.003593f, -0.007278f, 0.003252f, 0.001148f, -0.004174f, 0.001019f, 0.002328f, -0.004973f, -0.000073f, -0.000925f, 0.009716f, 0.008801f, 0.001167f, 0.002426f, 0.004143f, -0.000214f, -0.002043f, -0.003320f, -0.020363f, 0.009875f, 0.005985f, -0.005437f, -0.000349f, -0.008395f, -0.002435f, 0.001280f, -0.006325f, 0.002886f, -0.007647f, -0.004105f, -0.008882f, -0.012901f, 0.008401f, -0.002393f, 0.000247f, -0.010892f, -0.002876f, 0.001495f, 0.001681f, -0.002814f, -0.000645f, -0.000528f, -0.003167f, -0.005600f, 0.000766f, -0.002838f, 0.002302f, -0.000375f, -0.001575f, -0.001092f, -0.000739f, 0.002853f, 0.000337f, -0.004129f, 0.000650f, -0.001191f, -0.000497f, 0.001425f, 0.000481f, -0.001022f, 0.000843f, -0.003228f, 0.001620f, -0.002929f, -0.001086f, -0.003828f, -0.030070f, 0.004721f, 0.006928f, -0.001784f, -0.002726f, -0.016486f, -0.006886f, 0.004657f, -0.014910f, -0.014091f, 0.002809f, -0.013398f, -0.007044f, -0.000236f, -0.008242f, 0.004712f, -0.006513f, - 0.010244f, -0.005431f, -0.003400f, 0.003118f, 0.007199f, 0.013031f, 0.008307f, -0.014688f, -0.000680f, -0.001159f, 0.007318f, 0.010731f, 0.018471f, -0.008229f, -0.007101f, 0.009446f, -0.009913f, 0.002262f, 0.002995f, 0.015447f, 0.005802f, 0.008596f, -0.011425f, -0.005161f, -0.015641f, 0.012412f, 0.013173f, 0.014953f, -0.000119f, -0.003278f, -0.009937f, -0.002157f, 0.010208f, -0.004725f, -0.006358f, -0.006011f, -0.007775f, 0.001666f, 0.001977f, 0.002331f, -0.010683f, -0.000179f, -0.010464f, -0.000604f, -0.001463f, 0.004284f, 0.003849f, -0.003275f, -0.004682f, -0.013439f, -0.000663f, -0.001096f, 0.008389f, -0.005200f, 0.013861f, -0.007848f, 0.001835f, 0.006357f, 0.012606f, -0.009665f, 0.003012f, 0.006536f, -0.011095f, 0.005616f, 0.000124f, 0.013815f, 0.004734f, 0.003095f, 0.008620f, -0.000856f, 0.002453f, 0.006540f, 0.002770f, 0.000081f, -0.002287f, 0.000121f, 0.002883f, -0.000876f, 0.003628f, 0.005370f, 0.004509f, -0.002004f, 0.002560f, 0.000365f, -0.001321f, 0.002169f, 0.002950f, 0.000029f, 0.001423f, 0.003459f, 0.002651f, 0.002799f, 0.001458f, -0.001306f, -0.002094f, 0.002683f, - -0.002257f, 0.002675f, -0.001246f, 0.000243f, 0.003435f, 0.002564f, -0.000650f, 0.001898f, 0.037316f, 0.031561f, -0.000910f, 0.000714f, 0.016774f, 0.002025f, 0.008334f, -0.005191f, 0.009313f, -0.007226f, 0.016932f, 0.005486f, 0.000260f, 0.003179f, 0.001400f, 0.020908f, 0.014508f, -0.014087f, -0.011306f, 0.004265f, 0.002469f, -0.004670f, -0.002775f, 0.002452f, 0.010370f, 0.007298f, 0.004861f, 0.000859f, 0.005585f, -0.003757f, -0.000045f, 0.011419f, -0.012561f, 0.004910f, 0.015786f, 0.011440f, 0.021377f, -0.002307f, -0.002983f, -0.002069f, 0.001567f, -0.006975f, 0.023211f, 0.020838f, 0.015283f, -0.007230f, -0.001864f, 0.008733f, 0.007530f, -0.006654f, 0.001667f, 0.011832f, -0.004275f, -0.005867f, 0.007901f, -0.022560f, -0.002366f, 0.001013f, 0.003516f, -0.007783f, -0.014374f, 0.005741f, 0.010218f, -0.012101f, -0.004195f, -0.013140f, 0.005043f, 0.000687f, -0.002491f, -0.002998f, -0.011044f, 0.018663f, -0.004746f, 0.002320f, -0.018983f, -0.004780f, -0.008949f, 0.022236f, -0.003743f, -0.003303f, 0.010220f, 0.004405f, 0.000155f, -0.007385f, 0.006863f, -0.004933f, -0.006478f, 0.010194f, - 0.009911f, -0.000363f, 0.006269f, 0.000003f, -0.002554f, 0.005308f, -0.000651f, 0.001940f, -0.001584f, -0.002654f, -0.000413f, 0.004083f, -0.002986f, -0.002650f, 0.000060f, -0.003473f, 0.001363f, -0.003152f, -0.001500f, 0.000066f, -0.000340f, 0.004058f, 0.000327f, 0.001041f, 0.002917f, 0.002528f, 0.000914f, 0.001206f, 0.002441f, 0.005481f, 0.001267f, 0.005155f, 0.001091f, 0.002448f, 0.004087f, 0.024443f, -0.000965f, 0.015457f, 0.021072f, -0.011114f, -0.025984f, 0.001117f, 0.019740f, -0.015261f, 0.013858f, -0.004098f, -0.018806f, -0.008644f, 0.018918f, -0.018460f, -0.016335f, 0.011925f, -0.018887f, 0.006325f, 0.008994f, 0.007442f, -0.005365f, 0.011472f, 0.003214f, 0.002188f, 0.007347f, -0.012017f, 0.016425f, 0.008131f, 0.007128f, -0.003349f, -0.001841f, 0.030677f, -0.010733f, 0.001948f, 0.007966f, 0.015462f, -0.020956f, -0.017198f, -0.016071f, 0.000669f, 0.001182f, -0.001025f, 0.009744f, 0.003085f, 0.017398f, 0.007056f, 0.010195f, -0.001586f, 0.001362f, -0.008548f, 0.015551f, -0.006987f, 0.015341f, -0.008311f, -0.013231f, 0.022880f, 0.018539f, -0.026187f, -0.023162f, -0.015169f, - -0.011906f, 0.008324f, 0.001313f, -0.005254f, 0.012082f, 0.013381f, -0.015978f, 0.009474f, -0.001287f, -0.031933f, -0.010564f, -0.016069f, -0.014628f, 0.005609f, -0.004973f, 0.010578f, -0.002410f, 0.001649f, 0.019153f, 0.019567f, -0.001797f, 0.005200f, -0.001684f, 0.003107f, 0.002771f, -0.006521f, 0.005505f, 0.001677f, -0.000233f, 0.016527f, 0.004963f, -0.000041f, 0.000512f, -0.002860f, 0.004882f, -0.000459f, 0.003223f, -0.003480f, -0.000171f, -0.003674f, 0.001028f, 0.004364f, 0.001379f, 0.000070f, -0.000484f, 0.003829f, 0.002445f, -0.002283f, 0.000359f, -0.000019f, 0.000601f, 0.001988f, 0.000877f, -0.001480f, -0.001795f, 0.000615f, 0.001113f, -0.000134f, -0.013802f, -0.019509f, 0.011736f, -0.011243f, -0.008143f, -0.007006f, -0.022538f, -0.002434f, 0.010157f, -0.006172f, -0.001298f, -0.008313f, 0.018697f, 0.002824f, 0.011934f, 0.009008f, -0.014944f, 0.015369f, 0.023155f, -0.007124f, -0.009363f, 0.002436f, -0.003942f, 0.009923f, -0.028484f, 0.010894f, 0.024798f, -0.003331f, -0.008025f, -0.007091f, 0.010824f, 0.022109f, -0.005186f, 0.005553f, -0.009814f, 0.015135f, -0.018217f, -0.007046f, - 0.003626f, -0.002897f, -0.014120f, 0.026090f, 0.018491f, 0.013763f, -0.005748f, -0.019720f, -0.002354f, -0.027999f, 0.004901f, -0.002067f, -0.000824f, -0.000616f, -0.004148f, 0.015126f, 0.012905f, -0.019460f, 0.010931f, -0.011664f, 0.016140f, -0.001505f, -0.003190f, -0.001364f, -0.016954f, -0.003281f, -0.015462f, -0.034410f, -0.001495f, 0.003996f, 0.002781f, -0.013227f, -0.000382f, -0.003803f, -0.025617f, 0.000495f, 0.022369f, -0.014119f, 0.005904f, 0.007255f, -0.002764f, 0.001559f, -0.006537f, -0.003930f, 0.005301f, 0.006325f, 0.007059f, -0.001800f, -0.004416f, -0.001733f, -0.004751f, 0.003914f, 0.001994f, -0.004078f, -0.001111f, -0.003752f, -0.004001f, -0.000562f, -0.003591f, -0.005566f, 0.003471f, -0.001178f, -0.004190f, 0.003342f, -0.002918f, 0.002752f, 0.004297f, 0.001767f, 0.004131f, 0.002862f, 0.000008f, 0.002704f, 0.009260f, 0.004415f, -0.004526f, -0.003169f, -0.005205f, -0.000004f, -0.006751f, 0.003576f, -0.000348f, 0.005241f, -0.001347f, 0.004081f, -0.000655f, -0.002917f, 0.008741f, 0.004165f, -0.036115f, 0.002539f, 0.021051f, 0.011499f, -0.016461f, -0.013378f, 0.026390f, 0.006101f, - 0.005925f, -0.005202f, 0.006822f, -0.000270f, -0.017664f, -0.004603f, -0.018552f, 0.008770f, -0.011057f, -0.001689f, -0.018078f, -0.020000f, -0.026897f, 0.016820f, 0.011343f, -0.008628f, -0.009599f, 0.007551f, -0.024703f, -0.002258f, 0.001846f, 0.005959f, 0.010837f, 0.005294f, 0.000679f, -0.008550f, 0.003577f, -0.007852f, 0.006499f, -0.007533f, 0.004287f, 0.002278f, -0.007838f, -0.010166f, -0.019367f, -0.012775f, 0.004876f, -0.033030f, -0.009022f, 0.018107f, 0.009620f, -0.003994f, 0.043086f, -0.006253f, 0.019947f, 0.019741f, -0.031444f, 0.002036f, -0.004200f, -0.026550f, -0.013909f, -0.014618f, 0.000435f, 0.003095f, 0.029762f, -0.004807f, 0.002834f, 0.020180f, 0.014947f, -0.003536f, 0.020079f, -0.009550f, -0.007415f, -0.013452f, -0.017859f, -0.025969f, -0.009896f, 0.014796f, -0.028303f, -0.014432f, 0.021812f, 0.015917f, -0.009560f, 0.019958f, -0.008927f, -0.001391f, -0.000924f, 0.009597f, -0.006283f, 0.009564f, -0.006020f, 0.008181f, -0.002403f, 0.003376f, -0.003879f, 0.006619f, 0.006323f, 0.002748f, -0.001151f, 0.007472f, -0.004866f, -0.005487f, 0.005813f, -0.001642f, 0.006347f, 0.004643f, - 0.003136f, 0.004295f, 0.002594f, 0.001218f, -0.010924f, -0.002020f, -0.000127f, 0.003037f, -0.002923f, -0.004610f, -0.003868f, -0.010437f, 0.003938f, -0.000218f, 0.006567f, 0.003715f, 0.006392f, 0.004877f, 0.001347f, 0.001970f, 0.024929f, -0.004422f, 0.008109f, -0.012229f, 0.007258f, 0.010309f, -0.006251f, 0.008802f, -0.013646f, -0.015203f, 0.023132f, 0.012455f, 0.014977f, 0.018269f, 0.000028f, -0.015209f, 0.019992f, -0.017507f, -0.023279f, 0.000239f, 0.022055f, -0.003248f, -0.018897f, 0.002503f, 0.025934f, -0.003819f, 0.007200f, 0.002404f, 0.036334f, 0.002193f, 0.007859f, 0.017778f, -0.002170f, -0.009349f, -0.017253f, 0.002356f, -0.002308f, -0.016776f, 0.000641f, -0.009924f, 0.006748f, 0.024464f, 0.000339f, -0.014910f, -0.004301f, -0.013833f, -0.007221f, -0.002236f, -0.005710f, 0.003227f, -0.018229f, 0.019569f, -0.010305f, 0.033126f, -0.008296f, -0.024237f, 0.001463f, 0.001075f, 0.011869f, 0.004935f, 0.006458f, -0.024860f, -0.019996f, 0.014407f, -0.020828f, -0.029211f, 0.008429f, 0.005681f, -0.006543f, 0.031372f, -0.025539f, -0.035593f, 0.013350f, -0.024337f, 0.002397f, 0.003245f, - 0.000762f, -0.023409f, -0.014121f, -0.030416f, 0.010460f, -0.003153f, -0.001607f, -0.004784f, -0.013434f, -0.006175f, -0.010177f, -0.005163f, -0.003913f, 0.011467f, -0.008792f, 0.008782f, 0.003296f, 0.009070f, 0.001595f, 0.001083f, -0.012315f, -0.004618f, 0.003414f, -0.004087f, -0.013449f, 0.002558f, -0.002139f, -0.005374f, -0.004704f, 0.004193f, -0.005379f, 0.005697f, -0.003064f, 0.006939f, -0.001313f, 0.003482f, -0.007005f, -0.007023f, -0.000192f, 0.000413f, -0.002476f, 0.010528f, -0.009271f, -0.008972f, -0.005803f, 0.005045f, 0.005625f, -0.007296f, 0.005441f, 0.001505f, -0.019291f, 0.010700f, 0.001109f, 0.026351f, 0.027674f, 0.039907f, 0.018248f, 0.008481f, 0.005575f, 0.013173f, -0.013521f, 0.015229f, -0.024001f, 0.011735f, -0.002313f, -0.002009f, -0.046044f, -0.017802f, -0.007519f, 0.015727f, -0.001922f, 0.003841f, 0.005046f, 0.004215f, -0.023505f, 0.024408f, -0.000869f, 0.009958f, 0.000865f, 0.022785f, -0.024387f, 0.017028f, -0.011959f, -0.000546f, 0.018489f, -0.020889f, -0.009293f, -0.022766f, -0.009017f, -0.025355f, 0.023192f, 0.017042f, 0.031136f, -0.001485f, 0.007415f, -0.028263f, - 0.006509f, -0.029301f, 0.028577f, 0.008110f, -0.004571f, 0.027049f, 0.027620f, 0.014128f, -0.016357f, -0.024470f, -0.035245f, -0.001521f, -0.012437f, -0.017751f, 0.019227f, -0.005228f, 0.044682f, -0.033006f, -0.011988f, 0.025556f, -0.026543f, -0.010532f, 0.006198f, 0.000516f, -0.003815f, -0.025495f, 0.011728f, 0.004392f, -0.013831f, 0.012692f, 0.026960f, -0.023065f, 0.026025f, 0.032375f, -0.009613f, -0.017064f, 0.013381f, -0.013083f, 0.012369f, 0.007923f, -0.013465f, -0.010480f, -0.002617f, -0.004152f, 0.019025f, 0.006455f, -0.003149f, -0.009142f, -0.014980f, -0.008449f, 0.004836f, -0.009564f, 0.004683f, 0.009196f, 0.005930f, -0.006408f, 0.005030f, -0.005231f, 0.007310f, 0.004773f, 0.008148f, 0.004960f, 0.000457f, -0.008423f, 0.005644f, 0.008552f, -0.008484f, 0.000424f, 0.003050f, 0.003235f, 0.007409f, 0.000747f, -0.000854f, 0.008149f, 0.010004f, 0.002021f, -0.004426f, -0.007650f, -0.000091f, 0.006955f, 0.008452f, 0.005785f, 0.041565f, -0.009516f, 0.005900f, -0.002249f, -0.013641f, 0.018600f, -0.006774f, 0.006879f, 0.002281f, 0.026661f, -0.008348f, 0.031096f, 0.000572f, 0.015477f, - 0.013806f, -0.002461f, -0.010029f, -0.030303f, 0.014446f, 0.031542f, 0.001718f, -0.000210f, 0.021954f, 0.018575f, -0.001279f, 0.003438f, 0.037617f, 0.023537f, -0.006733f, 0.008193f, 0.024760f, -0.006205f, -0.027271f, 0.000674f, -0.019780f, -0.003107f, -0.012510f, 0.001186f, -0.037743f, -0.011267f, -0.013701f, 0.000670f, 0.007997f, 0.007995f, 0.036874f, 0.040691f, 0.021530f, -0.028094f, -0.016504f, 0.022889f, 0.032155f, 0.006820f, -0.029187f, -0.004772f, -0.006839f, -0.030496f, -0.019185f, -0.023078f, 0.028366f, -0.010516f, 0.003982f, -0.028696f, 0.041933f, 0.030920f, -0.003358f, 0.012818f, 0.069538f, -0.003452f, -0.014114f, -0.026626f, -0.001497f, 0.018515f, 0.014732f, -0.010675f, 0.021053f, 0.041612f, -0.017673f, 0.026570f, -0.011943f, 0.008751f, -0.016548f, -0.008975f, -0.014258f, -0.018769f, -0.009558f, 0.012425f, 0.000087f, -0.004059f, 0.003147f, 0.005209f, 0.022547f, -0.002397f, 0.002374f, -0.000176f, -0.010216f, -0.001033f, -0.003561f, 0.002167f, 0.009209f, -0.005779f, -0.002638f, -0.007181f, -0.003307f, 0.002642f, 0.002906f, -0.002534f, -0.014652f, -0.013719f, -0.004589f, -0.016916f, - -0.014716f, -0.002602f, 0.013347f, 0.011785f, 0.010238f, 0.002371f, -0.002179f, 0.000711f, 0.005778f, 0.004813f, -0.001673f, 0.003352f, 0.002481f, 0.021384f, 0.002188f, -0.012845f, 0.012706f, 0.004915f, -0.017776f, -0.030095f, 0.039070f, -0.024542f, 0.029490f, -0.021572f, -0.032066f, 0.001469f, 0.040473f, 0.025883f, -0.029775f, -0.020060f, 0.006985f, 0.005854f, 0.013748f, -0.002455f, 0.027022f, 0.014253f, 0.035581f, -0.013041f, -0.005858f, -0.001353f, -0.006786f, -0.034299f, -0.025126f, -0.007996f, 0.035777f, 0.007330f, 0.002892f, 0.001109f, -0.033168f, -0.037964f, -0.029179f, 0.015025f, 0.017372f, -0.013047f, -0.008453f, 0.003212f, 0.004198f, -0.020289f, 0.005913f, 0.037544f, 0.006697f, 0.023484f, 0.023273f, 0.016564f, 0.040496f, 0.057901f, 0.019143f, 0.000916f, 0.008448f, 0.022811f, -0.012007f, -0.006529f, 0.015504f, -0.005312f, 0.008338f, -0.005444f, 0.025144f, 0.008799f, 0.017839f, -0.005007f, -0.006567f, 0.012649f, 0.033565f, -0.002510f, -0.027339f, 0.017492f, -0.042840f, -0.049875f, -0.016958f, 0.025702f, -0.016539f, -0.049318f, -0.030021f, -0.012591f, 0.018080f, 0.012228f, - -0.026545f, 0.047752f, -0.015274f, -0.033561f, 0.008842f, 0.013037f, -0.010932f, 0.016571f, -0.017203f, -0.006844f, 0.006282f, 0.004457f, -0.009006f, 0.008416f, 0.001669f, 0.015056f, -0.008280f, -0.018062f, -0.010436f, 0.002991f, -0.003931f, -0.003665f, -0.001382f, 0.000116f, -0.001406f, 0.012231f, -0.002061f, 0.002028f, -0.004921f, 0.005643f, 0.010146f, 0.001977f, 0.009726f, 0.003021f, -0.015042f, -0.006648f, 0.000086f, -0.013008f, -0.015369f, 0.007433f, 0.010838f, -0.008413f, -0.016401f, -0.018017f, 0.007396f, 0.003049f, -0.000784f, 0.011703f, -0.006752f, 0.004289f, 0.016003f, -0.069788f, 0.004032f, 0.034910f, -0.006224f, -0.008569f, 0.043019f, -0.023237f, -0.023426f, -0.030504f, -0.009765f, -0.010522f, -0.019880f, 0.005639f, 0.010029f, 0.016149f, 0.011867f, -0.009990f, -0.007402f, -0.003744f, -0.008327f, 0.002523f, 0.008258f, 0.034462f, -0.014722f, -0.045440f, 0.024300f, -0.000164f, -0.001146f, -0.037861f, 0.016897f, 0.006918f, -0.003714f, 0.042353f, -0.012067f, 0.004275f, -0.003802f, 0.018465f, 0.022877f, -0.025375f, -0.002315f, -0.014407f, -0.001492f, 0.012392f, -0.009323f, 0.019178f, - -0.030387f, -0.025872f, -0.015995f, -0.027619f, -0.004615f, 0.002072f, 0.004336f, -0.038477f, -0.024913f, 0.017712f, 0.030813f, -0.014995f, -0.017071f, 0.015725f, -0.034741f, -0.032006f, -0.030477f, 0.033169f, -0.056613f, 0.017979f, -0.002982f, -0.033892f, -0.010604f, 0.027793f, 0.072144f, -0.010114f, -0.019853f, 0.023299f, 0.055322f, 0.019391f, -0.012433f, -0.013878f, -0.002501f, 0.014656f, -0.001012f, 0.006577f, 0.032930f, 0.001671f, -0.012290f, -0.023744f, 0.019294f, -0.027928f, -0.018702f, -0.014167f, 0.009695f, -0.011830f, -0.019871f, -0.013105f, -0.012094f, -0.000707f, -0.014665f, 0.004490f, -0.011370f, -0.001566f, -0.003734f, 0.013398f, -0.010570f, -0.008862f, -0.021650f, -0.007026f, -0.003866f, -0.007874f, 0.020528f, -0.015748f, -0.019471f, -0.001846f, -0.017093f, -0.016215f, -0.007165f, 0.001699f, 0.015374f, -0.002639f, -0.006620f, -0.003597f, -0.010232f, 0.006569f, -0.020612f, -0.002415f, 0.021240f, 0.009480f, 0.013887f, -0.006017f, 0.005247f, 0.006170f, -0.005147f, -0.008736f, -0.011646f, 0.003481f, 0.005473f, 0.008674f, 0.009647f, -0.004069f, -0.039169f, -0.062263f, -0.003723f, 0.071581f, - -0.011546f, -0.005031f, -0.047366f, -0.003481f, -0.003262f, 0.005012f, 0.015532f, 0.002244f, 0.012896f, 0.001027f, -0.000882f, -0.033580f, 0.004690f, 0.030744f, -0.020800f, 0.038109f, -0.016128f, -0.002247f, -0.033804f, 0.021695f, -0.016895f, -0.010794f, -0.038991f, -0.052594f, 0.026817f, -0.025609f, -0.025441f, 0.009374f, 0.005300f, -0.011221f, 0.002481f, 0.029985f, -0.008967f, -0.028342f, -0.017801f, -0.036327f, -0.004583f, 0.010583f, 0.025138f, 0.005339f, -0.007550f, -0.006085f, -0.015224f, 0.008925f, 0.026119f, 0.004523f, -0.016534f, 0.030028f, -0.028694f, 0.003258f, -0.049364f, -0.014306f, -0.009764f, 0.060916f, -0.038487f, 0.012618f, -0.012578f, 0.008196f, -0.007183f, -0.006553f, 0.001065f, 0.024924f, 0.007380f, -0.044562f, 0.049156f, 0.015297f, 0.017491f, 0.006616f, -0.019731f, -0.014747f, -0.005718f, 0.006487f, -0.001182f, 0.010103f, -0.026724f, -0.027486f, -0.004608f, 0.013794f, 0.029861f, -0.018270f, 0.025322f, -0.005974f, 0.009834f, -0.019790f, 0.011380f, -0.032426f, 0.036540f, 0.001879f, 0.004031f, 0.012288f, 0.016463f, 0.001881f, -0.022872f, -0.010743f, 0.006126f, -0.021385f, - 0.005851f, 0.010461f, 0.009130f, -0.012604f, -0.008022f, 0.022211f, 0.003993f, -0.021982f, -0.003224f, 0.019302f, -0.007177f, -0.027105f, 0.031008f, -0.008144f, 0.011983f, -0.004951f, -0.008906f, -0.014311f, 0.009537f, 0.002923f, 0.009926f, 0.001792f, 0.016666f, 0.002269f, 0.011990f, -0.005519f, 0.000830f, 0.007797f, -0.004222f, -0.006292f, -0.030474f, -0.018478f, 0.066662f, -0.008461f, 0.006028f, -0.034653f, 0.031390f, -0.018043f, 0.023253f, -0.018204f, 0.040484f, 0.003826f, 0.004607f, -0.019578f, -0.015358f, 0.023146f, 0.052319f, -0.021690f, -0.031013f, 0.014766f, -0.011877f, 0.034046f, 0.043697f, 0.021189f, -0.005923f, 0.026616f, -0.017170f, -0.016559f, 0.036808f, 0.049844f, -0.055273f, 0.004538f, 0.008905f, 0.009427f, -0.018322f, -0.001340f, 0.023128f, -0.056463f, 0.017545f, 0.032971f, 0.012998f, -0.025122f, -0.006357f, 0.040495f, 0.033766f, 0.011027f, -0.018475f, -0.024900f, -0.048257f, 0.069694f, 0.013216f, 0.035839f, -0.004613f, -0.014829f, 0.008409f, 0.020871f, 0.001263f, -0.001107f, -0.056168f, 0.008815f, 0.054166f, -0.009546f, 0.051933f, -0.030765f, -0.013214f, -0.021442f, - 0.012586f, 0.048310f, -0.014591f, -0.001361f, 0.044291f, 0.053368f, -0.016775f, -0.038930f, -0.034142f, -0.030263f, -0.013488f, -0.012753f, 0.031311f, -0.037511f, 0.021095f, 0.023195f, -0.007904f, 0.002719f, 0.024681f, -0.004586f, -0.013220f, 0.014538f, 0.010859f, 0.007790f, 0.022749f, 0.004944f, -0.003334f, 0.020120f, 0.007770f, 0.008562f, 0.010771f, -0.003356f, 0.001811f, -0.004471f, 0.009277f, -0.036738f, -0.009643f, 0.001655f, -0.006602f, 0.014455f, -0.027087f, -0.003027f, 0.000903f, 0.009923f, -0.000105f, 0.015710f, 0.011415f, -0.007335f, 0.022674f, 0.011400f, -0.007146f, 0.016085f, 0.017845f, 0.000290f, -0.010624f, 0.008546f, 0.017386f, 0.010349f, -0.001962f, -0.016114f, -0.007349f, 0.004385f, 0.003114f, 0.002743f, -0.015054f, 0.026346f, 0.019434f, 0.046527f, -0.014026f, 0.033708f, -0.017774f, -0.007097f, 0.031403f, -0.001025f, 0.042790f, -0.051493f, 0.032394f, 0.005944f, 0.014458f, -0.020662f, 0.015760f, 0.038529f, 0.074907f, -0.017119f, 0.019140f, -0.000946f, -0.049457f, 0.045600f, 0.004771f, 0.017904f, -0.008894f, -0.023095f, -0.008449f, -0.001764f, -0.019062f, -0.011957f, - 0.063681f, 0.004593f, 0.024620f, -0.018007f, 0.045212f, 0.000417f, 0.022052f, 0.009399f, -0.026093f, -0.005432f, -0.015999f, 0.000674f, 0.008379f, 0.053395f, 0.027329f, 0.002447f, 0.006573f, -0.001678f, -0.004153f, 0.008935f, 0.005579f, 0.033539f, 0.027404f, 0.013882f, -0.015569f, 0.023367f, 0.048943f, -0.045724f, 0.042938f, 0.007077f, 0.013118f, -0.045942f, -0.021635f, -0.057784f, -0.046524f, -0.009007f, 0.031526f, 0.026285f, -0.080132f, -0.000357f, -0.035974f, 0.019294f, 0.080601f, 0.040533f, -0.051341f, 0.028468f, -0.020939f, -0.026412f, 0.044555f, 0.022585f, -0.022429f, -0.012446f, 0.039254f, 0.032116f, 0.017754f, 0.049767f, -0.013038f, 0.030617f, 0.027070f, -0.031357f, 0.044556f, 0.012373f, 0.051666f, 0.015876f, -0.004437f, 0.030466f, -0.002812f, 0.008120f, -0.035736f, 0.027375f, -0.017253f, 0.014369f, -0.012745f, 0.006484f, 0.017068f, 0.041148f, 0.011058f, 0.025114f, 0.006625f, 0.008199f, -0.013097f, -0.002775f, -0.004466f, 0.003607f, 0.020862f, 0.017801f, 0.031200f, 0.011683f, -0.003379f, 0.005210f, -0.006900f, -0.003786f, -0.030668f, -0.004929f, 0.008056f, 0.010102f, - 0.026960f, 0.024040f, 0.021851f, 0.025206f, -0.066612f, -0.104618f, -0.026252f, -0.012582f, -0.024801f, 0.004865f, 0.035813f, -0.037451f, 0.053611f, 0.018432f, -0.075284f, -0.059269f, -0.010898f, 0.040754f, 0.002308f, 0.002627f, -0.007156f, -0.024971f, -0.072849f, 0.002189f, -0.061075f, -0.052103f, 0.025945f, 0.019127f, 0.018998f, -0.009483f, -0.023193f, 0.055006f, 0.034267f, -0.024488f, -0.047458f, 0.036062f, 0.019438f, 0.007900f, -0.021898f, -0.057292f, 0.022302f, -0.027296f, 0.009291f, -0.048896f, 0.059333f, 0.000715f, -0.022635f, 0.004984f, 0.015536f, 0.047555f, 0.030981f, -0.013070f, -0.001613f, 0.016211f, 0.017526f, 0.017918f, -0.010191f, -0.076175f, -0.058582f, 0.011351f, -0.007377f, 0.043547f, -0.007682f, -0.019598f, -0.052480f, 0.061262f, 0.024540f, -0.043735f, -0.043706f, 0.062883f, 0.060294f, -0.001210f, 0.044443f, -0.006405f, 0.002294f, -0.018602f, -0.010177f, -0.034647f, 0.042865f, -0.008315f, -0.008759f, -0.018745f, 0.018142f, -0.054163f, 0.026108f, -0.016204f, -0.009301f, 0.037635f, -0.000045f, 0.005562f, 0.010363f, 0.034537f, 0.018681f, -0.014710f, 0.026761f, -0.008167f, - 0.032147f, 0.011982f, -0.034420f, 0.008358f, -0.017086f, 0.016337f, -0.013709f, 0.000001f, -0.022585f, -0.012368f, 0.013677f, -0.023493f, 0.010677f, 0.007609f, 0.010953f, -0.021003f, -0.013969f, -0.026925f, -0.022485f, 0.030799f, -0.010343f, 0.019805f, 0.013498f, -0.019275f, -0.001802f, -0.016868f, 0.001572f, -0.010763f, 0.040205f, 0.032950f, 0.023370f, 0.030788f, -0.006671f, -0.034515f, -0.038412f, -0.005761f, 0.012871f, 0.057170f, 0.035957f, -0.013293f, -0.009712f, -0.015476f, -0.027522f, -0.001779f, 0.013973f, 0.019865f, 0.013591f, 0.006366f, 0.035799f, 0.004147f, -0.026216f, -0.065289f, 0.103293f, 0.003204f, -0.080917f, -0.005493f, -0.030481f, 0.014177f, 0.039293f, 0.036801f, -0.045267f, -0.071135f, 0.011686f, -0.033735f, 0.010376f, -0.006397f, 0.031063f, -0.009783f, 0.003963f, 0.019391f, -0.029863f, -0.035329f, 0.003239f, 0.010038f, 0.030757f, -0.000110f, -0.050654f, 0.033564f, -0.028496f, 0.026511f, -0.024838f, -0.015919f, -0.003285f, -0.007334f, -0.054410f, 0.010738f, 0.014501f, -0.051454f, 0.021482f, -0.019843f, 0.009888f, -0.016751f, 0.049770f, 0.039804f, -0.051273f, -0.026297f, - 0.034111f, 0.044052f, -0.052451f, 0.069170f, 0.003910f, 0.055822f, 0.039560f, 0.065761f, -0.020677f, -0.026994f, 0.014091f, -0.053390f, 0.007723f, 0.007478f, 0.094354f, -0.028766f, -0.089718f, 0.151224f, -0.071667f, -0.054067f, 0.086285f, 0.039871f, -0.051173f, 0.085014f, 0.008866f, -0.068039f, 0.084924f, 0.010984f, 0.007131f, -0.014264f, 0.012035f, 0.057371f, -0.014388f, -0.019098f, -0.030036f, 0.042892f, -0.015896f, -0.010152f, -0.006453f, -0.016374f, -0.018724f, -0.025811f, 0.024823f, -0.003125f, -0.002892f, -0.008941f, -0.007057f, 0.003849f, -0.011960f, -0.019241f, 0.002003f, -0.015452f, -0.030357f, -0.030402f, 0.038038f, -0.016142f, 0.003052f, 0.036224f, -0.017669f, -0.015713f, 0.001974f, 0.018267f, 0.007065f, 0.008120f, 0.033712f, -0.020555f, 0.004417f, -0.015000f, -0.010265f, -0.006283f, 0.056110f, 0.028692f, -0.009744f, 0.008627f, -0.030560f, 0.010189f, -0.028013f, -0.016503f, 0.012752f, -0.006717f, -0.057246f, 0.035512f, 0.013757f, -0.009991f, -0.000720f, -0.028586f, -0.004431f, 0.000957f, -0.093476f, 0.012913f, 0.028043f, -0.070188f, 0.032124f, 0.018527f, -0.024583f, -0.007046f, - -0.001219f, -0.017241f, -0.005634f, -0.010125f, -0.031268f, 0.000824f, -0.015596f, -0.003501f, -0.007679f, 0.015173f, 0.055868f, 0.046704f, -0.043111f, -0.004833f, 0.058785f, -0.010376f, -0.011045f, -0.060218f, 0.006944f, 0.019656f, -0.009845f, 0.051154f, 0.122842f, -0.041426f, -0.051790f, 0.087363f, -0.005858f, -0.047273f, 0.054559f, 0.035818f, -0.028338f, -0.042489f, -0.052394f, 0.015840f, 0.028058f, -0.023460f, 0.082380f, 0.053634f, -0.102841f, -0.098793f, 0.057467f, -0.046581f, -0.060181f, 0.077841f, 0.012497f, 0.104249f, 0.050051f, -0.012835f, -0.014114f, -0.075516f, -0.058826f, 0.171314f, 0.047268f, -0.036986f, -0.083082f, 0.002114f, -0.033913f, -0.074328f, -0.011660f, 0.086622f, 0.036822f, 0.000886f, 0.071355f, 0.062259f, -0.019938f, -0.079814f, 0.012200f, 0.047471f, -0.019907f, -0.018857f, 0.099454f, 0.057022f, 0.009733f, -0.010724f, -0.051396f, -0.050478f, -0.013149f, 0.047157f, 0.018925f, -0.019546f, -0.009338f, -0.022585f, 0.018443f, -0.014631f, -0.019420f, -0.012679f, -0.002614f, 0.013944f, 0.018925f, 0.016703f, 0.006866f, -0.045888f, -0.016199f, -0.009248f, 0.016906f, -0.018044f, - 0.002849f, -0.005044f, 0.041592f, -0.027373f, -0.019125f, 0.042936f, 0.011754f, -0.022238f, 0.033760f, -0.012240f, 0.009615f, 0.002345f, 0.007407f, -0.026482f, -0.007434f, 0.035243f, 0.034501f, 0.014119f, -0.014231f, 0.008954f, -0.016293f, -0.013173f, -0.010192f, 0.018299f, -0.029657f, -0.006548f, 0.022756f, 0.092068f, 0.078359f, -0.021631f, 0.055955f, 0.004768f, -0.041786f, 0.026446f, 0.047927f, 0.014793f, 0.021252f, -0.062465f, -0.011608f, 0.006304f, 0.013376f, -0.009974f, -0.052609f, -0.020194f, 0.020217f, -0.013949f, -0.004779f, -0.046204f, 0.070427f, 0.007790f, -0.056467f, 0.031578f, 0.082518f, -0.043042f, -0.023666f, 0.011027f, 0.027799f, -0.027247f, -0.050536f, 0.043172f, 0.075104f, -0.006870f, -0.028344f, 0.008721f, 0.021866f, 0.032897f, 0.048406f, 0.002205f, 0.087421f, -0.002867f, -0.095605f, -0.000180f, -0.010036f, 0.030519f, -0.009276f, -0.079680f, -0.001364f, -0.034953f, -0.032401f, 0.046318f, 0.025661f, 0.026006f, 0.034763f, -0.071529f, -0.036104f, -0.013357f, -0.000138f, 0.027527f, 0.001801f, -0.015401f, 0.002791f, -0.025141f, -0.047294f, 0.003679f, 0.075610f, -0.039451f, - 0.007931f, -0.030885f, -0.020592f, 0.050153f, -0.062119f, -0.001714f, 0.028452f, -0.023276f, 0.011128f, 0.006822f, 0.016462f, 0.017100f, -0.032436f, -0.040858f, 0.067772f, -0.014978f, -0.020933f, 0.033440f, -0.033584f, 0.020464f, 0.005098f, -0.015214f, 0.011337f, 0.027894f, -0.004725f, 0.002812f, -0.013505f, 0.005856f, 0.002589f, -0.003053f, -0.011978f, 0.014698f, 0.008699f, -0.002745f, -0.000584f, 0.012119f, 0.011812f, -0.013546f, -0.021514f, 0.010990f, -0.000584f, 0.004994f, 0.002052f, -0.007005f, 0.012246f, -0.000921f, 0.010288f, -0.004951f, -0.001057f, -0.007753f, 0.002561f, 0.009467f, -0.001660f, 0.025523f, -0.010151f, -0.009477f, 0.001973f, -0.013047f, 0.008202f, 0.016654f, -0.080944f, -0.115064f, -0.102572f, 0.205862f, 0.195664f, 0.196132f, 0.552096f, 0.196716f, -0.023213f, 0.036763f, -0.382523f, -0.464992f, -0.156824f, -0.260753f, -0.362363f, 0.046913f, -0.020562f, -0.060191f, 0.398069f, 0.243632f, 0.101134f, 0.622745f, 0.293352f, 0.054676f, 0.283287f, -0.066966f, -0.339116f, -0.323954f, -0.309444f, -0.427825f, -0.419695f, -0.098129f, -0.151817f, -0.246514f, 0.287721f, 0.133032f, - -0.104301f, 0.416528f, 0.133944f, -0.048594f, 0.470115f, 0.429063f, 0.098263f, 0.445240f, 0.450979f, -0.017055f, 0.111597f, 0.051367f, -0.435066f, -0.504189f, -0.376211f, -0.709897f, -0.673064f, -0.403676f, -0.539981f, -0.405564f, 0.045437f, 0.333834f, 0.378018f, 0.813728f, 0.739090f, 0.652436f, 0.702156f, 0.518534f, 0.262595f, 0.080561f, -0.057601f, -0.395771f, -0.477979f, -0.510843f, -0.576535f, -0.546255f, -0.466408f, -0.300845f, -0.219311f, -0.213687f, 0.040207f, 0.129775f, 0.253937f, 0.605567f, 0.628087f, 0.430040f, 0.536680f, 0.227312f, -0.074873f, -0.177831f, -0.276314f, -0.377662f, -0.274295f, -0.182885f, -0.182830f, -0.062724f, -0.017867f, 0.001564f, 0.096162f, 0.123147f, 0.116542f, 0.179722f, 0.112372f, 0.073199f, 0.089846f, -0.053619f, -0.050405f, 0.015222f, -0.146564f, -0.103186f, -0.038854f, -0.140850f, -0.087843f, -0.009880f, -0.142627f, -0.149792f, -0.100345f, -0.147017f, -0.097409f, 0.110381f, 0.205637f, 0.328545f, 0.483885f, 0.452357f, 0.386246f, 0.363853f, 0.195762f, -0.060541f, -0.304240f, -0.536754f, -0.638208f, -0.574856f, -0.466431f, -0.351625f, -0.166212f, 0.051992f, - 0.206652f, 0.291473f, 0.313665f, 0.277567f, 0.246647f, 0.230173f, 0.231002f, 0.161003f, 0.074588f, 0.034070f, -0.022681f, -0.067989f, -0.062822f, -0.109956f, -0.119442f, -0.084848f, -0.065752f, -0.085113f, -0.083658f, -0.105773f, -0.122246f, -0.120958f, -0.105661f, -0.086342f, -0.029097f, 0.042867f, 0.098428f, 0.132050f, 0.169328f, 0.167420f, 0.139304f, 0.099769f, 0.060177f, 0.022582f, 0.017334f, 0.002145f, -0.022542f, -0.041013f, -0.046359f, -0.060688f, -0.068430f, -0.075706f, -0.082217f, -0.086282f, -0.059279f, -0.033349f, -0.010640f, -0.000256f, 0.012583f, 0.023326f, 0.041188f, 0.042213f, 0.029437f, 0.013334f, 0.021995f, 0.032618f, 0.034213f, 0.031990f, 0.030640f, 0.026780f, 0.030701f, 0.027645f, 0.014467f, -0.003080f, -0.012952f, -0.033620f, -0.041303f, -0.044392f, -0.046445f, -0.052529f, -0.046441f, -0.048376f, -0.043988f, -0.026937f, -0.003737f, 0.018547f, 0.048618f, 0.067841f, 0.080046f, 0.076010f, 0.058682f, 0.027101f, -0.000405f, -0.023818f, -0.032431f, -0.038471f, -0.033053f, -0.027039f, -0.017392f, -0.011599f, -0.005677f, -0.005047f, -0.000456f, 0.000877f, 0.004695f, 0.004194f, - 0.007037f, 0.004897f, 0.005897f, 0.003023f, 0.003121f, -0.000088f, 0.000571f, -0.001652f, 0.000218f, -0.001244f, 0.000740f, -0.000904f} - }, - { - {-0.006754f, 0.025660f, 0.013711f, 0.011272f, 0.006412f, -0.002808f, -0.000721f, -0.002716f, -0.005269f, -0.007511f, -0.005169f, -0.007672f, -0.003118f, 0.007158f, 0.002561f, -0.000450f, 0.000089f, 0.004670f, 0.002305f, -0.003069f, -0.003128f, -0.002499f, -0.013319f, 0.005497f, 0.001511f, 0.000066f, -0.002663f, 0.001680f, 0.000345f, -0.003771f, 0.002046f, 0.004853f, 0.000092f, -0.006186f, -0.001447f, -0.002705f, -0.002737f, 0.000701f, 0.006022f, -0.001582f, 0.001514f, -0.007068f, 0.004625f, -0.008718f, 0.005647f, 0.001176f, 0.000451f, 0.000021f, 0.005621f, -0.006700f, -0.004814f, -0.009113f, 0.002535f, 0.001589f, 0.000576f, 0.005137f, -0.005464f, 0.001170f, -0.000634f, 0.000112f, -0.003947f, 0.003558f, 0.001775f, -0.003041f, 0.005726f, -0.008950f, 0.004222f, -0.004898f, 0.009224f, 0.004109f, 0.001737f, 0.000621f, -0.001678f, -0.011153f, 0.008614f, -0.002696f, -0.000138f, 0.001430f, 0.002507f, 0.001998f, 0.002382f, 0.002659f, -0.000668f, 0.000759f, -0.001097f, 0.002598f, -0.000051f, 0.001471f, -0.003232f, 0.001131f, -0.000386f, 0.000718f, 0.001493f, 0.003608f, -0.000061f, -0.000634f, - 0.001371f, 0.001420f, -0.001322f, 0.001861f, -0.002069f, 0.001819f, 0.000538f, 0.001619f, 0.000274f, 0.001044f, -0.000428f, 0.000408f, 0.001573f, 0.000698f, -0.000087f, 0.001078f, -0.000085f, 0.000723f, 0.000783f, -0.000094f, 0.001022f, -0.000290f, 0.024748f, 0.011575f, 0.016208f, 0.004255f, 0.005610f, -0.001078f, 0.006433f, 0.000516f, 0.005734f, -0.004262f, 0.011040f, -0.002907f, -0.012298f, -0.003555f, 0.000403f, 0.000542f, -0.003805f, 0.009403f, 0.000675f, 0.003588f, 0.009370f, 0.004374f, 0.000253f, -0.000152f, 0.002345f, -0.008553f, -0.005419f, 0.003206f, 0.004161f, -0.003200f, 0.001025f, 0.003977f, -0.008199f, 0.011633f, -0.001061f, 0.001598f, -0.001721f, 0.004235f, 0.006218f, 0.000169f, -0.006235f, -0.006646f, 0.012915f, 0.000150f, -0.003586f, -0.000676f, 0.007501f, 0.005302f, -0.003654f, -0.005261f, -0.011117f, -0.003633f, -0.004474f, 0.000333f, -0.004027f, 0.000870f, -0.010797f, -0.004608f, 0.001415f, -0.004596f, 0.002553f, 0.004278f, -0.002073f, -0.000430f, 0.002218f, -0.002916f, 0.004455f, -0.000452f, 0.005567f, -0.000068f, -0.001719f, -0.006430f, 0.000859f, -0.007944f, - 0.002603f, 0.000009f, 0.004569f, -0.000053f, 0.004688f, 0.005718f, 0.005133f, 0.000058f, -0.003090f, -0.000379f, -0.001036f, 0.006327f, -0.001593f, 0.000697f, 0.004279f, 0.004190f, -0.000152f, 0.002306f, 0.001022f, 0.002096f, -0.000761f, 0.002566f, -0.000870f, 0.003845f, 0.001061f, 0.000632f, -0.000176f, 0.000228f, 0.000556f, 0.001870f, 0.005177f, -0.016582f, -0.005379f, -0.003773f, 0.002869f, 0.003279f, -0.011366f, -0.005085f, -0.002268f, 0.002724f, 0.006014f, 0.001899f, 0.008252f, -0.006827f, -0.009887f, 0.002858f, 0.000316f, -0.001773f, -0.006779f, 0.021925f, -0.001162f, 0.005832f, 0.001291f, 0.000682f, -0.000512f, -0.003380f, -0.008355f, -0.006546f, -0.002068f, 0.005601f, -0.004676f, 0.011479f, -0.003907f, -0.001073f, -0.009429f, -0.011201f, -0.000985f, -0.007145f, -0.003992f, 0.015269f, -0.008368f, -0.002316f, -0.008125f, 0.002968f, 0.000366f, -0.002942f, -0.008537f, -0.001625f, 0.000050f, -0.009669f, 0.001119f, -0.005206f, 0.007713f, 0.005083f, -0.004473f, -0.002372f, -0.002482f, 0.002368f, -0.000443f, 0.006141f, -0.003198f, -0.004038f, -0.004166f, 0.013924f, 0.012556f, -0.004318f, - -0.012134f, 0.001641f, 0.003727f, -0.000390f, 0.003540f, -0.005033f, 0.000970f, -0.005837f, 0.004145f, 0.000317f, 0.013353f, 0.008245f, 0.012694f, -0.011578f, 0.004993f, 0.007747f, 0.000278f, 0.005879f, 0.004216f, 0.000875f, 0.008727f, -0.001610f, -0.000949f, 0.002239f, 0.001196f, -0.003594f, 0.003470f, -0.002754f, -0.002377f, -0.000249f, 0.000871f, -0.000394f, 0.001307f, -0.002058f, 0.001006f, -0.000264f, 0.000254f, 0.001132f, 0.001591f, 0.000767f, 0.001847f, 0.001748f, -0.001352f, -0.001763f, 0.001368f, 0.000511f, -0.003164f, -0.001286f, 0.002512f, -0.001543f, -0.054653f, -0.008753f, -0.015811f, -0.017757f, 0.004712f, -0.005957f, -0.015600f, -0.012778f, 0.002067f, -0.012589f, 0.001713f, 0.018966f, -0.004781f, 0.008184f, 0.006059f, 0.016003f, 0.004054f, -0.011019f, 0.002459f, 0.017385f, -0.008166f, 0.008691f, -0.012858f, -0.011569f, 0.003734f, 0.005038f, 0.013522f, 0.000870f, -0.008428f, 0.007970f, -0.005681f, 0.006132f, -0.000784f, 0.008655f, -0.007360f, -0.004654f, -0.008200f, 0.000173f, 0.001398f, -0.003115f, 0.006161f, -0.014265f, 0.001768f, 0.014518f, 0.003055f, -0.004035f, - 0.005491f, -0.007327f, -0.003822f, -0.018032f, -0.005436f, -0.000540f, 0.002757f, 0.000367f, 0.009647f, -0.014468f, 0.001337f, -0.001936f, 0.007244f, 0.003971f, -0.002884f, 0.010408f, -0.009153f, -0.001166f, -0.007360f, -0.013905f, -0.005955f, -0.003158f, -0.004021f, 0.010552f, -0.009475f, -0.015030f, 0.000521f, 0.004993f, -0.001585f, -0.004300f, 0.005114f, 0.005817f, -0.004293f, -0.003353f, -0.005937f, -0.002371f, 0.012067f, -0.005589f, 0.006621f, -0.001957f, -0.000284f, -0.001070f, -0.000480f, -0.006244f, 0.001469f, -0.003720f, -0.000253f, -0.000400f, -0.000979f, 0.000194f, -0.001521f, -0.001926f, -0.002005f, -0.000487f, 0.000542f, -0.001173f, 0.001944f, 0.000939f, -0.027188f, 0.015531f, 0.017415f, -0.000902f, 0.009761f, 0.004502f, 0.020583f, 0.027450f, 0.003494f, 0.003639f, 0.007839f, 0.003460f, 0.004535f, -0.003838f, 0.005404f, -0.004458f, 0.007184f, 0.008445f, -0.023488f, 0.012228f, -0.002589f, -0.004287f, -0.007276f, -0.009441f, 0.003824f, 0.006738f, 0.010675f, 0.002155f, 0.001807f, -0.013638f, 0.000588f, -0.003930f, -0.004590f, -0.001958f, 0.001822f, 0.000865f, -0.001060f, 0.013550f, - -0.000712f, -0.004396f, 0.004442f, -0.005160f, 0.006897f, 0.009183f, 0.010176f, 0.005371f, 0.001109f, -0.005590f, 0.011369f, 0.003694f, 0.001525f, 0.001272f, 0.001492f, 0.000903f, -0.006587f, -0.009190f, 0.008415f, -0.008560f, 0.008062f, 0.007445f, 0.005404f, -0.001111f, -0.006109f, 0.005594f, 0.007165f, 0.015978f, 0.007338f, 0.006082f, 0.003725f, -0.015467f, -0.004782f, 0.001992f, -0.002540f, 0.006773f, -0.013467f, 0.000758f, 0.004452f, -0.012521f, -0.001184f, 0.004308f, -0.003052f, 0.001696f, -0.007384f, 0.002868f, 0.000951f, -0.003072f, 0.005813f, 0.003499f, 0.000234f, 0.006453f, -0.002884f, -0.002728f, -0.000638f, 0.001406f, 0.002608f, 0.009743f, 0.001581f, 0.003382f, 0.002282f, -0.000002f, 0.002114f, -0.001506f, -0.001830f, -0.002509f, 0.001708f, -0.001339f, -0.001232f, 0.001177f, 0.001031f, -0.001093f, 0.003282f, -0.001828f, 0.002297f, 0.002201f, -0.000957f, 0.003265f, 0.000920f, 0.001444f, 0.001590f, 0.000305f, 0.000347f, 0.003781f, -0.000260f, 0.050460f, 0.015073f, 0.003836f, 0.009740f, 0.025284f, 0.010036f, 0.030465f, 0.007328f, -0.006579f, -0.002283f, -0.002429f, - -0.003002f, 0.008353f, 0.012905f, -0.005927f, 0.002692f, 0.009187f, -0.003472f, -0.012495f, 0.009924f, -0.001067f, 0.004667f, -0.004176f, -0.006428f, 0.010436f, 0.002310f, -0.000825f, -0.003029f, -0.011369f, -0.005776f, 0.006348f, 0.001471f, -0.003829f, -0.002105f, 0.001867f, 0.004240f, 0.011688f, 0.003569f, -0.010529f, -0.002529f, 0.000817f, -0.003429f, 0.003962f, 0.005403f, -0.010609f, -0.013042f, -0.000623f, 0.003176f, -0.001245f, 0.009946f, -0.018351f, -0.003994f, -0.008252f, -0.010469f, -0.001010f, -0.000870f, 0.002863f, 0.009836f, 0.000035f, 0.001429f, 0.003332f, -0.001659f, 0.013334f, 0.008367f, -0.010703f, -0.009562f, 0.007370f, 0.015938f, -0.001249f, -0.007534f, 0.015907f, 0.008290f, 0.003790f, -0.006984f, -0.007389f, 0.007749f, 0.000537f, 0.005852f, -0.003437f, -0.011498f, -0.006181f, -0.007838f, -0.004808f, 0.004485f, -0.006256f, 0.000842f, 0.002864f, -0.002334f, 0.002782f, 0.001891f, 0.002389f, 0.001295f, -0.004000f, 0.002264f, -0.001174f, -0.002206f, -0.000873f, 0.003057f, 0.002545f, 0.000385f, -0.003419f, 0.003134f, -0.001275f, 0.005431f, -0.000727f, 0.000732f, -0.005070f, - -0.006701f, 0.002352f, -0.006307f, -0.001098f, -0.000984f, -0.003434f, -0.001720f, 0.000889f, -0.005656f, -0.002235f, -0.000582f, 0.000746f, -0.001185f, 0.004096f, 0.000559f, -0.001389f, 0.024896f, 0.011811f, 0.022437f, -0.007695f, 0.000370f, -0.005848f, 0.022604f, -0.023249f, -0.003086f, 0.005717f, -0.004229f, -0.004755f, 0.007694f, -0.002780f, -0.006919f, 0.019478f, 0.011305f, 0.002077f, 0.033419f, -0.009268f, -0.002021f, -0.007222f, 0.000444f, 0.005300f, -0.008386f, -0.001291f, -0.004260f, 0.012494f, -0.010530f, 0.002667f, 0.000939f, -0.003557f, 0.001351f, 0.007267f, 0.005277f, -0.010276f, -0.017402f, 0.000228f, 0.003818f, 0.014384f, 0.017296f, 0.016834f, 0.001750f, -0.010000f, 0.012445f, -0.029891f, -0.004688f, -0.011854f, -0.017088f, 0.011908f, -0.003775f, -0.005786f, 0.009633f, -0.003610f, -0.004860f, 0.025735f, 0.000515f, -0.007836f, 0.009235f, 0.000509f, 0.007079f, 0.004875f, 0.003591f, 0.015518f, -0.009205f, -0.005964f, 0.001135f, -0.013670f, 0.000106f, 0.002364f, -0.003206f, 0.004438f, 0.007980f, 0.016325f, -0.006012f, 0.005320f, 0.014482f, 0.008474f, 0.004448f, 0.002506f, - -0.004691f, -0.010613f, 0.005559f, 0.007768f, -0.001510f, 0.000610f, -0.001423f, -0.001519f, -0.005709f, 0.000977f, -0.001590f, 0.000832f, -0.005314f, -0.002981f, 0.000251f, -0.001160f, 0.005371f, 0.002047f, 0.000257f, -0.007330f, -0.003001f, 0.003357f, -0.003929f, -0.000265f, 0.002992f, 0.002611f, -0.004581f, 0.004296f, 0.003744f, 0.000960f, 0.004870f, 0.003974f, -0.008023f, -0.001668f, -0.002935f, 0.002051f, 0.004727f, 0.005263f, -0.000890f, -0.003240f, 0.000964f, -0.001852f, -0.038540f, -0.057887f, -0.009779f, 0.002874f, -0.001025f, 0.001604f, -0.002733f, -0.011610f, -0.006568f, -0.009257f, -0.002519f, 0.009409f, 0.011200f, -0.010201f, -0.015070f, 0.012852f, 0.002629f, -0.008265f, 0.000634f, -0.001381f, -0.009210f, -0.007703f, 0.021314f, 0.010858f, -0.011528f, 0.005822f, 0.002369f, 0.009123f, -0.011190f, 0.012385f, -0.012443f, 0.008505f, 0.005515f, -0.002642f, -0.005838f, 0.005484f, -0.023162f, -0.011489f, 0.014089f, 0.022767f, 0.012584f, -0.015979f, 0.000306f, -0.011340f, 0.015084f, 0.003104f, 0.003857f, 0.001045f, -0.012567f, 0.006031f, 0.018463f, 0.002059f, 0.013936f, 0.009889f, - 0.006336f, 0.010684f, 0.022658f, -0.006352f, -0.022990f, 0.011061f, -0.000028f, -0.005467f, 0.001071f, 0.019640f, -0.008141f, -0.013729f, 0.006610f, -0.003672f, -0.002435f, -0.005230f, -0.003183f, -0.006210f, -0.010815f, -0.005436f, 0.013087f, -0.018047f, -0.011403f, -0.006694f, -0.013039f, -0.012632f, -0.000870f, 0.007748f, -0.011971f, -0.000278f, -0.004506f, -0.005069f, -0.010802f, -0.006817f, -0.012388f, -0.000724f, -0.009555f, -0.000800f, -0.000359f, 0.008551f, 0.006007f, -0.004444f, -0.004800f, -0.006340f, -0.002019f, -0.004508f, -0.004359f, 0.005151f, -0.008479f, 0.003082f, 0.000606f, -0.005397f, 0.000463f, -0.003560f, 0.001902f, -0.001881f, -0.006953f, -0.008446f, -0.000191f, 0.002117f, 0.003358f, -0.001669f, 0.001359f, 0.002561f, -0.000115f, -0.004453f, -0.000708f, -0.005681f, 0.000469f, 0.002512f, 0.001919f, 0.002383f, -0.022093f, -0.014690f, 0.003942f, 0.003389f, 0.029876f, -0.026138f, -0.017582f, -0.010204f, -0.004728f, -0.003397f, 0.009785f, 0.009103f, -0.013565f, 0.013948f, -0.003093f, 0.006228f, -0.009719f, 0.020880f, -0.003914f, -0.008110f, 0.013792f, 0.009641f, 0.008099f, -0.014497f, - -0.013293f, 0.017648f, -0.009155f, 0.005085f, 0.004536f, -0.006632f, 0.015328f, 0.004438f, 0.000162f, 0.003197f, 0.011298f, 0.014104f, 0.004575f, -0.012858f, 0.003129f, -0.018277f, 0.010982f, 0.004558f, -0.020102f, 0.014214f, 0.003519f, -0.010706f, 0.018744f, 0.005747f, -0.004859f, 0.010674f, -0.001511f, 0.020353f, -0.004519f, -0.005290f, -0.004178f, -0.002839f, 0.026851f, 0.005484f, 0.000625f, 0.007112f, -0.022257f, -0.014154f, -0.015073f, 0.001525f, 0.014361f, 0.001747f, 0.017771f, -0.022902f, -0.009200f, -0.014583f, -0.013227f, 0.033072f, -0.003223f, 0.011731f, 0.008670f, -0.007257f, -0.001512f, -0.004755f, 0.002668f, 0.001623f, 0.009218f, 0.005404f, 0.018310f, -0.009916f, 0.001656f, -0.003228f, 0.004093f, -0.000249f, -0.000212f, -0.000177f, -0.003730f, -0.017267f, 0.006524f, 0.003881f, 0.002680f, -0.004675f, -0.001479f, -0.002322f, -0.009436f, -0.000730f, -0.003296f, -0.006340f, 0.003611f, -0.005368f, 0.002364f, 0.002945f, 0.002531f, 0.003813f, -0.006539f, -0.003742f, -0.004395f, -0.004216f, 0.002506f, 0.004647f, 0.002907f, -0.001689f, -0.000794f, -0.001298f, -0.001969f, 0.006807f, - -0.002279f, 0.004813f, 0.003178f, -0.001992f, 0.002176f, -0.001479f, 0.000093f, 0.001617f, 0.001941f, -0.030088f, 0.009404f, -0.012933f, 0.007333f, -0.009053f, 0.024305f, 0.004076f, -0.017015f, 0.002659f, -0.017347f, 0.014061f, 0.026861f, -0.022920f, 0.015131f, 0.005579f, -0.000668f, 0.011052f, 0.028629f, -0.010968f, -0.000027f, 0.008733f, -0.031254f, 0.001811f, 0.014220f, -0.008711f, 0.010192f, 0.011076f, -0.005702f, 0.028027f, -0.013981f, -0.025395f, -0.010914f, 0.003034f, 0.000678f, -0.005215f, -0.010941f, 0.007625f, 0.007082f, -0.000011f, -0.017866f, -0.004216f, -0.004527f, 0.011915f, -0.007825f, 0.047016f, -0.005916f, 0.006711f, -0.002164f, -0.002023f, -0.022824f, 0.002319f, 0.016928f, 0.013671f, 0.045878f, -0.004958f, -0.004441f, -0.009527f, -0.001810f, -0.012942f, -0.000979f, 0.018371f, -0.009796f, -0.001930f, 0.003331f, 0.004312f, 0.018086f, 0.014688f, 0.004161f, 0.035485f, -0.006720f, -0.032926f, -0.032933f, -0.023257f, -0.004786f, 0.010357f, -0.003252f, -0.008680f, 0.015664f, -0.000989f, 0.013908f, -0.008612f, -0.001636f, 0.011262f, 0.009581f, -0.003523f, -0.003371f, 0.001114f, - 0.002929f, -0.003695f, -0.007698f, -0.011095f, -0.003737f, -0.004740f, -0.001404f, -0.007925f, 0.005881f, -0.002415f, 0.001759f, -0.004037f, -0.005680f, 0.007546f, 0.003391f, -0.003928f, -0.001064f, -0.003230f, -0.003397f, 0.003261f, -0.002122f, -0.003813f, -0.007499f, 0.005857f, 0.002326f, -0.003270f, -0.005685f, -0.007592f, -0.001429f, -0.005240f, -0.005254f, 0.006302f, -0.003784f, 0.001205f, 0.000241f, -0.002804f, 0.002716f, 0.001181f, -0.001050f, -0.001468f, -0.001686f, 0.053432f, -0.038478f, -0.029321f, -0.009265f, -0.018542f, -0.021035f, 0.025908f, 0.010645f, 0.005167f, -0.008033f, -0.005205f, 0.031628f, -0.009157f, -0.013090f, -0.037673f, -0.005281f, -0.000907f, 0.017956f, 0.006597f, -0.007472f, 0.002367f, 0.015785f, 0.007106f, 0.009956f, 0.024185f, 0.030496f, 0.008471f, -0.011055f, 0.007881f, -0.017950f, 0.012557f, 0.010458f, -0.006408f, 0.000867f, -0.013984f, 0.005952f, 0.000492f, -0.027045f, 0.026740f, -0.002117f, -0.012263f, 0.016719f, -0.025136f, -0.005550f, 0.027947f, 0.016162f, -0.000202f, 0.001352f, -0.034846f, 0.012608f, 0.019728f, 0.011488f, 0.006678f, -0.001578f, -0.025649f, - -0.075577f, -0.005860f, 0.015836f, 0.021545f, -0.001581f, -0.022051f, 0.037888f, -0.017146f, 0.017509f, 0.028639f, 0.023800f, 0.004603f, 0.028718f, 0.003483f, 0.010511f, 0.006264f, 0.017610f, 0.003663f, 0.005894f, 0.036352f, -0.011640f, -0.007569f, 0.030949f, 0.016213f, 0.008739f, -0.012267f, 0.003543f, 0.025140f, -0.002204f, 0.020224f, 0.005065f, 0.004690f, 0.013021f, -0.006362f, -0.000095f, 0.001709f, -0.000782f, -0.005221f, 0.010289f, 0.004929f, -0.013022f, 0.007861f, 0.005622f, 0.007596f, 0.004103f, -0.003470f, 0.000559f, -0.003887f, -0.004389f, 0.006453f, 0.008228f, 0.003637f, 0.005227f, -0.003578f, -0.003336f, -0.002213f, -0.004233f, -0.005894f, -0.008934f, 0.001896f, -0.005499f, 0.005067f, -0.001610f, 0.003170f, -0.008177f, -0.005290f, -0.001204f, -0.002358f, -0.001952f, -0.003485f, 0.001815f, 0.009045f, 0.009548f, 0.003890f, 0.001399f, -0.004388f, 0.007712f, 0.027462f, 0.024701f, -0.005995f, -0.013757f, -0.001800f, -0.008412f, 0.029988f, 0.018296f, -0.050345f, -0.006319f, 0.004834f, -0.024674f, 0.010173f, -0.035661f, 0.027216f, 0.005715f, -0.003459f, 0.013798f, 0.007863f, - -0.008058f, -0.011092f, -0.009275f, 0.038154f, 0.000804f, 0.000346f, 0.007598f, -0.004444f, 0.014335f, 0.044832f, 0.017318f, -0.005829f, -0.008495f, -0.005871f, 0.024921f, 0.009721f, 0.025245f, 0.018551f, 0.012261f, 0.008082f, -0.011959f, -0.011812f, 0.010897f, -0.025638f, 0.003824f, -0.013338f, -0.012315f, 0.001490f, 0.017470f, 0.003138f, 0.000809f, 0.007090f, -0.006348f, 0.030912f, 0.038687f, 0.045593f, -0.000851f, 0.021128f, -0.027350f, 0.010903f, 0.014850f, -0.011669f, 0.022274f, -0.017743f, -0.037214f, 0.005439f, -0.019793f, -0.002293f, 0.001115f, -0.018869f, 0.004287f, 0.027171f, -0.016754f, -0.015193f, 0.012805f, 0.025213f, -0.001683f, -0.008492f, 0.022079f, 0.002588f, 0.004504f, -0.014993f, -0.003780f, -0.000497f, 0.018142f, -0.008914f, 0.000974f, -0.003823f, 0.003561f, 0.000207f, 0.003096f, 0.005308f, 0.002806f, 0.000592f, 0.001333f, 0.004637f, 0.004758f, -0.003708f, -0.008972f, -0.000975f, -0.001755f, -0.007322f, -0.010081f, -0.000195f, -0.004888f, 0.007407f, -0.006957f, 0.005752f, 0.008622f, -0.000117f, -0.015445f, -0.001108f, 0.002518f, -0.004848f, -0.007495f, 0.001445f, - 0.003768f, 0.023780f, 0.007410f, 0.007594f, -0.001094f, 0.000923f, -0.002380f, 0.007199f, -0.002020f, 0.007638f, 0.019257f, 0.018218f, -0.002635f, -0.000693f, -0.003672f, 0.001237f, 0.005743f, 0.007289f, 0.010098f, 0.002261f, -0.031790f, 0.057906f, 0.003690f, 0.015024f, 0.044327f, -0.016419f, 0.004548f, -0.008502f, 0.011698f, -0.012828f, 0.012798f, -0.031238f, -0.036966f, -0.001191f, -0.021893f, -0.001739f, -0.002041f, -0.002550f, -0.006249f, 0.002295f, -0.010256f, 0.009166f, -0.029401f, -0.011827f, -0.039666f, -0.002086f, 0.009086f, 0.018937f, 0.042815f, 0.023662f, 0.007389f, 0.005381f, 0.012281f, 0.009404f, 0.007206f, 0.017206f, 0.018107f, -0.005850f, -0.036261f, -0.036018f, -0.024667f, -0.014819f, 0.003562f, 0.012012f, -0.013314f, -0.021158f, -0.036804f, 0.000961f, -0.014093f, 0.033445f, -0.015017f, 0.008327f, -0.025569f, -0.012413f, -0.004537f, -0.010595f, -0.049362f, -0.051463f, 0.014009f, 0.005144f, 0.001253f, 0.026219f, 0.014943f, 0.021023f, 0.016947f, -0.032110f, -0.007056f, 0.059897f, -0.011216f, -0.022826f, 0.008718f, -0.013331f, 0.006023f, -0.037169f, 0.014895f, -0.017120f, - 0.002412f, -0.002564f, 0.024229f, 0.001315f, 0.009638f, -0.021206f, 0.003864f, -0.012016f, -0.005492f, -0.014591f, -0.011088f, 0.007425f, 0.008325f, -0.019404f, -0.006623f, 0.001262f, 0.003484f, 0.004659f, 0.002384f, -0.007608f, 0.008263f, 0.003341f, 0.002726f, -0.001140f, -0.000713f, 0.002513f, 0.008358f, -0.009306f, 0.008440f, -0.002432f, -0.000481f, -0.003405f, 0.005288f, -0.005534f, -0.003345f, 0.007441f, -0.014487f, -0.000435f, 0.002585f, -0.008849f, -0.003205f, -0.020181f, 0.014193f, 0.016857f, -0.001380f, 0.003864f, 0.004296f, 0.005648f, -0.009170f, 0.009326f, 0.005811f, 0.007247f, -0.006764f, 0.003889f, 0.005441f, 0.008594f, 0.034582f, 0.026027f, 0.003601f, 0.027666f, -0.005027f, -0.011497f, 0.015425f, -0.021358f, -0.041302f, -0.062131f, 0.005385f, 0.001206f, 0.024165f, 0.017416f, -0.022924f, -0.011932f, -0.060389f, -0.004169f, -0.028022f, 0.006486f, -0.014005f, -0.006875f, -0.011462f, -0.004588f, -0.004525f, -0.021139f, -0.009269f, -0.024619f, 0.019764f, -0.005020f, 0.016944f, 0.043309f, -0.022722f, 0.012394f, -0.003358f, -0.010872f, 0.011388f, -0.023318f, -0.039289f, 0.018864f, - 0.009486f, 0.018763f, 0.012006f, -0.082827f, -0.037346f, 0.010929f, -0.027328f, -0.002433f, -0.023317f, 0.034526f, 0.041917f, -0.002143f, 0.046313f, 0.006405f, 0.021156f, -0.006186f, -0.001311f, -0.025883f, 0.016548f, 0.033231f, 0.007439f, 0.055399f, 0.001529f, 0.007545f, -0.016077f, -0.024487f, 0.033066f, 0.051989f, 0.018398f, 0.010025f, 0.005352f, 0.019610f, 0.001921f, 0.003681f, -0.048520f, -0.035831f, -0.003482f, 0.002521f, 0.006681f, 0.036573f, 0.039635f, -0.007332f, 0.002810f, -0.013600f, 0.008428f, -0.025311f, 0.000866f, -0.026779f, -0.022413f, 0.011626f, -0.000440f, 0.002886f, -0.014808f, 0.009595f, 0.012018f, 0.007889f, 0.012167f, 0.014067f, 0.001441f, -0.008048f, 0.006408f, -0.010976f, -0.002455f, -0.006782f, -0.015823f, -0.004631f, -0.008657f, -0.007161f, 0.013521f, 0.007336f, -0.004532f, -0.010555f, -0.015674f, -0.010406f, 0.010924f, -0.010554f, -0.000839f, 0.000856f, 0.007538f, -0.014975f, -0.011770f, 0.005328f, 0.018808f, 0.011886f, 0.004983f, 0.000002f, -0.011004f, -0.001332f, -0.006620f, -0.012935f, 0.022348f, -0.032254f, -0.016180f, -0.060429f, -0.075732f, -0.055824f, - -0.025769f, 0.017316f, -0.000683f, -0.013101f, -0.027792f, 0.000243f, 0.049660f, 0.024596f, -0.043798f, -0.006994f, -0.009207f, -0.030634f, -0.005689f, 0.002458f, 0.020793f, 0.015638f, -0.032727f, 0.023559f, -0.018574f, 0.010104f, -0.017317f, 0.005364f, -0.025120f, -0.009139f, 0.012152f, -0.044857f, -0.008802f, -0.016804f, 0.014597f, -0.011035f, -0.041803f, 0.049124f, 0.047013f, 0.000812f, -0.019263f, 0.026836f, -0.063957f, -0.019810f, 0.018806f, -0.021292f, -0.013737f, -0.001482f, -0.020798f, 0.004249f, -0.005494f, -0.042587f, 0.018161f, -0.005289f, -0.013325f, -0.014467f, -0.011476f, -0.002519f, -0.011890f, -0.017971f, 0.035288f, -0.016735f, -0.016950f, 0.017024f, -0.000633f, 0.058358f, -0.011830f, -0.035936f, 0.020454f, -0.018697f, -0.016191f, -0.028007f, 0.019344f, 0.036045f, -0.070224f, 0.005640f, 0.058948f, -0.009478f, -0.003843f, -0.023253f, 0.040130f, -0.002713f, -0.022089f, -0.002780f, -0.020749f, -0.016380f, 0.029023f, -0.017408f, -0.001653f, -0.009605f, -0.012385f, -0.020367f, 0.008490f, 0.006981f, 0.010503f, -0.002318f, -0.016703f, -0.011212f, 0.000420f, 0.003022f, -0.025346f, -0.007092f, - -0.016371f, 0.025160f, -0.008554f, 0.001907f, 0.003379f, 0.003216f, 0.002473f, -0.020244f, 0.013555f, 0.000802f, -0.007964f, 0.018380f, 0.002640f, 0.024014f, -0.004424f, 0.027728f, 0.006215f, 0.011258f, 0.013335f, -0.017767f, -0.011980f, 0.008841f, -0.014897f, -0.011370f, 0.004177f, 0.000174f, -0.010528f, -0.024058f, 0.011620f, -0.003361f, -0.047757f, 0.095441f, 0.068151f, -0.001360f, -0.018180f, 0.015086f, -0.057233f, 0.000878f, 0.071280f, -0.012642f, -0.024761f, 0.001082f, 0.080772f, -0.011655f, 0.017734f, -0.017275f, -0.036528f, -0.029642f, -0.007478f, -0.013606f, 0.014873f, 0.020535f, 0.001108f, -0.030515f, -0.042574f, -0.039277f, -0.006343f, -0.008738f, -0.021138f, 0.019641f, 0.015980f, -0.017256f, -0.020910f, -0.022934f, 0.012791f, 0.004315f, 0.015726f, 0.040218f, -0.000275f, -0.034609f, 0.023375f, 0.009082f, 0.007868f, 0.002307f, -0.000686f, -0.016766f, 0.029832f, 0.015145f, -0.012007f, -0.014425f, -0.009516f, -0.039323f, 0.010754f, 0.028541f, 0.008663f, -0.027592f, 0.032042f, 0.023363f, 0.013222f, 0.003406f, -0.016918f, 0.008654f, -0.055898f, 0.008551f, -0.003539f, 0.049630f, - -0.017966f, -0.024849f, 0.010499f, -0.013061f, -0.001121f, -0.036194f, -0.006604f, -0.009856f, 0.048287f, -0.031657f, -0.058744f, -0.038457f, -0.076313f, 0.014732f, -0.015612f, -0.005290f, -0.040786f, -0.026207f, -0.067472f, -0.030093f, -0.023670f, -0.003744f, 0.016404f, -0.022021f, -0.003926f, -0.004393f, -0.003553f, -0.006285f, 0.014317f, -0.025571f, 0.010847f, -0.010240f, -0.019799f, 0.002731f, -0.005810f, 0.017776f, 0.009222f, 0.000039f, -0.010009f, 0.023028f, 0.021667f, 0.012820f, -0.008596f, -0.012011f, -0.011704f, -0.011026f, 0.024362f, 0.039714f, 0.004544f, 0.036453f, 0.040343f, 0.013106f, 0.000555f, -0.036626f, -0.004046f, 0.006339f, 0.005138f, -0.003833f, -0.010121f, -0.031110f, -0.000867f, 0.020137f, 0.003137f, -0.023496f, -0.006019f, -0.017799f, 0.090638f, 0.003669f, 0.014965f, -0.015069f, -0.029860f, -0.039959f, -0.013336f, 0.011396f, 0.026484f, 0.022088f, -0.019321f, -0.000028f, -0.040138f, -0.014556f, 0.014259f, -0.033649f, -0.018184f, -0.012699f, 0.048874f, 0.025647f, 0.026863f, 0.025561f, -0.028470f, 0.005313f, 0.010211f, 0.011666f, -0.002824f, 0.033138f, -0.007361f, 0.014648f, - 0.025544f, 0.009924f, 0.007037f, 0.021762f, 0.029662f, -0.017424f, -0.035048f, 0.023478f, -0.003876f, 0.000209f, -0.037036f, -0.034299f, 0.007830f, -0.017110f, -0.013468f, 0.030316f, -0.031218f, 0.040062f, 0.025719f, -0.017644f, 0.020964f, -0.023327f, -0.023690f, -0.028491f, 0.041200f, -0.028839f, 0.012929f, 0.012701f, -0.047382f, 0.004586f, 0.005396f, -0.037241f, -0.064434f, -0.057436f, 0.041824f, -0.043148f, -0.000888f, -0.038788f, -0.009079f, -0.027708f, -0.002443f, 0.018081f, 0.010898f, -0.028201f, 0.029218f, 0.034157f, 0.071077f, 0.018740f, -0.048007f, 0.016997f, -0.029599f, 0.016073f, -0.042244f, 0.022721f, -0.018170f, 0.003297f, -0.008786f, 0.017372f, -0.005350f, -0.016984f, -0.040556f, -0.040147f, 0.004339f, 0.004032f, 0.025366f, -0.018034f, -0.001877f, 0.039955f, 0.011139f, 0.027745f, 0.008241f, -0.007061f, -0.003168f, -0.009313f, -0.026767f, 0.009711f, -0.032263f, -0.018832f, 0.006795f, 0.026793f, -0.035202f, 0.019708f, 0.003558f, 0.025344f, -0.008646f, 0.014258f, 0.025337f, 0.028149f, 0.028070f, -0.012666f, 0.013653f, 0.022102f, 0.023614f, 0.004790f, 0.014069f, 0.007549f, - -0.010882f, 0.043823f, 0.020169f, 0.022174f, -0.018867f, -0.020858f, 0.005449f, 0.007379f, 0.008425f, -0.018172f, 0.001498f, -0.039797f, -0.000786f, 0.006819f, 0.007640f, -0.035103f, -0.036798f, -0.057890f, 0.040105f, 0.004201f, 0.013688f, -0.009480f, 0.021176f, -0.015831f, -0.015780f, 0.012022f, 0.030487f, 0.007208f, 0.019988f, 0.062436f, -0.009206f, -0.037684f, -0.080238f, -0.011413f, -0.031115f, -0.015245f, -0.019250f, -0.037225f, -0.026382f, -0.055600f, -0.006642f, -0.000914f, 0.019259f, 0.057550f, -0.048155f, -0.018539f, -0.008090f, 0.018793f, 0.020203f, 0.056992f, 0.007559f, -0.065281f, -0.015180f, 0.013276f, 0.050779f, 0.013278f, -0.079175f, -0.031773f, 0.071250f, 0.006388f, 0.071072f, -0.042074f, 0.002086f, 0.005447f, 0.042930f, -0.004157f, 0.039042f, 0.059018f, 0.008146f, 0.050042f, 0.034980f, 0.008355f, 0.069284f, 0.059235f, 0.019036f, 0.092458f, 0.070911f, 0.044440f, -0.075296f, -0.005053f, 0.029164f, 0.016896f, -0.001124f, -0.054600f, -0.065301f, -0.033846f, -0.093366f, -0.014908f, -0.069501f, -0.026613f, -0.018067f, -0.099894f, -0.094850f, -0.066021f, 0.032248f, 0.000808f, - -0.022129f, -0.001388f, -0.007452f, -0.002230f, -0.018677f, -0.009974f, 0.022916f, 0.009024f, 0.003741f, -0.003366f, 0.003407f, -0.004756f, 0.014085f, -0.002639f, -0.025175f, 0.043048f, 0.006704f, 0.010198f, -0.013145f, 0.001878f, -0.001815f, 0.022454f, -0.001470f, 0.012999f, -0.008103f, -0.023896f, 0.009186f, 0.018096f, 0.047577f, 0.042320f, 0.002518f, -0.000653f, 0.030261f, 0.014988f, 0.035396f, 0.029451f, -0.009784f, 0.033998f, 0.018854f, 0.006690f, 0.021203f, 0.013700f, -0.012505f, -0.005758f, -0.027683f, 0.016545f, -0.024744f, -0.011088f, -0.043249f, -0.026272f, 0.012675f, -0.050696f, 0.054165f, -0.022985f, 0.035157f, 0.018474f, -0.047100f, 0.007611f, 0.027883f, -0.017442f, -0.049168f, 0.032716f, -0.013947f, 0.028078f, -0.017068f, 0.007682f, 0.010318f, -0.029070f, -0.004372f, -0.012439f, -0.001488f, -0.048017f, -0.039129f, 0.048014f, 0.001319f, 0.019807f, -0.038221f, 0.039366f, 0.033745f, -0.025404f, 0.021190f, -0.037173f, -0.008977f, -0.020553f, 0.026598f, 0.067949f, -0.002030f, 0.082308f, -0.021513f, -0.003312f, 0.003081f, 0.008941f, -0.006401f, -0.045518f, 0.079364f, 0.052834f, - -0.007043f, 0.044459f, 0.033565f, 0.046122f, -0.018072f, -0.000524f, -0.082210f, 0.037340f, 0.037606f, -0.010096f, -0.014668f, 0.051471f, 0.026206f, 0.027364f, 0.062709f, 0.011080f, -0.033312f, -0.038839f, 0.011187f, -0.011891f, -0.047562f, 0.039213f, -0.054983f, 0.002745f, 0.011341f, -0.038178f, -0.060998f, -0.040606f, -0.016063f, 0.004689f, 0.047970f, 0.033011f, 0.014836f, -0.092073f, -0.026686f, 0.056048f, -0.005121f, -0.019775f, 0.015744f, -0.049750f, -0.031938f, 0.042478f, -0.000909f, 0.000937f, -0.018515f, 0.000595f, 0.024924f, -0.007632f, -0.019613f, 0.014873f, -0.007254f, -0.035328f, -0.020092f, 0.003811f, -0.003398f, -0.001883f, -0.000164f, -0.015339f, -0.000709f, -0.024182f, -0.033660f, 0.004728f, -0.003811f, -0.053854f, -0.006850f, -0.032506f, -0.019701f, -0.005733f, 0.007413f, 0.010168f, 0.028906f, -0.027105f, -0.019441f, 0.006274f, 0.028127f, -0.030035f, -0.033258f, 0.045927f, -0.007955f, -0.002297f, -0.009564f, -0.000017f, -0.019993f, 0.008412f, 0.020522f, 0.012029f, 0.017739f, 0.001603f, 0.006098f, 0.000744f, 0.001765f, 0.007097f, 0.014637f, -0.011688f, -0.003809f, 0.006399f, - 0.010378f, 0.006008f, -0.069127f, 0.039513f, 0.060201f, -0.000716f, 0.069450f, 0.021598f, -0.061190f, -0.036958f, -0.005249f, -0.020687f, -0.037399f, 0.039501f, 0.045231f, -0.003965f, 0.031344f, 0.043280f, -0.034283f, 0.030657f, 0.050911f, -0.002684f, -0.069805f, 0.027683f, -0.002413f, -0.013322f, 0.018703f, 0.052820f, -0.017161f, -0.025943f, 0.012425f, -0.022525f, -0.030500f, -0.001660f, 0.045615f, 0.039743f, -0.065788f, 0.021230f, 0.027581f, -0.043462f, -0.028448f, 0.053438f, -0.014809f, -0.076624f, -0.010214f, 0.065256f, -0.021506f, -0.110905f, 0.116447f, -0.032772f, -0.013806f, -0.057119f, 0.075136f, 0.025051f, -0.026310f, 0.055367f, -0.032578f, -0.023656f, -0.014374f, 0.140981f, 0.046630f, -0.058344f, -0.052307f, 0.054375f, -0.012734f, 0.078936f, 0.001212f, 0.059369f, -0.081283f, 0.065257f, 0.111435f, 0.011038f, -0.012222f, -0.019180f, -0.019689f, -0.044067f, 0.105147f, 0.071309f, -0.063209f, 0.018184f, -0.066424f, -0.010848f, 0.006976f, 0.014304f, 0.009145f, 0.020043f, 0.001690f, -0.072115f, 0.033830f, 0.004924f, -0.007674f, -0.001076f, 0.033257f, -0.013987f, 0.007275f, -0.010114f, - 0.017197f, -0.006389f, 0.004363f, -0.011118f, 0.021701f, 0.001361f, -0.004482f, 0.012896f, 0.017425f, -0.039265f, 0.004724f, 0.025524f, 0.009456f, -0.028163f, 0.015229f, 0.045505f, -0.044176f, -0.068013f, 0.013398f, 0.008985f, 0.026763f, 0.026767f, -0.003661f, -0.061393f, -0.020978f, 0.017402f, 0.008523f, 0.017886f, -0.009368f, 0.003070f, -0.002518f, -0.020180f, 0.018000f, -0.015689f, -0.007529f, 0.050430f, 0.115138f, 0.022325f, -0.044614f, -0.010566f, -0.010997f, 0.020247f, 0.017261f, -0.035934f, -0.051372f, 0.013717f, -0.043490f, 0.008661f, -0.027108f, -0.031055f, -0.006848f, 0.005280f, 0.014629f, -0.034625f, -0.014092f, -0.013727f, -0.043213f, 0.036158f, -0.013669f, 0.002328f, -0.006509f, -0.028765f, 0.011293f, 0.008081f, 0.000881f, -0.006228f, 0.000197f, -0.001073f, -0.017131f, -0.036611f, 0.015515f, -0.018191f, 0.015735f, 0.011125f, -0.036710f, -0.029644f, -0.003507f, -0.004296f, -0.004315f, -0.007904f, 0.029661f, -0.020676f, 0.002897f, -0.038894f, 0.033005f, -0.038112f, -0.020303f, 0.018861f, 0.000371f, -0.030564f, 0.024082f, -0.041077f, 0.002956f, 0.012276f, -0.001255f, 0.004412f, - 0.019481f, 0.009250f, -0.042432f, 0.021305f, 0.002826f, -0.025584f, 0.036072f, 0.014191f, -0.040285f, -0.004482f, -0.032159f, -0.004308f, 0.012844f, 0.010620f, -0.041018f, 0.051911f, -0.027683f, -0.015216f, 0.028771f, 0.019107f, 0.004562f, 0.019224f, -0.001786f, 0.026942f, -0.012216f, 0.005426f, -0.003526f, 0.012977f, 0.010056f, -0.007887f, -0.009559f, 0.010288f, -0.013156f, 0.001257f, 0.002083f, 0.001597f, -0.007797f, 0.001156f, -0.007285f, -0.011866f, -0.006533f, -0.012903f, -0.000829f, 0.009445f, 0.016556f, 0.006071f, 0.001835f, 0.008693f, 0.010793f, -0.015363f, 0.023292f, 0.005993f, -0.000879f, -0.015596f, -0.008911f, 0.007176f, 0.018401f, -0.003786f, -0.000512f, -0.009293f, 0.002922f, 0.002472f, -0.007768f, -0.010579f, -0.009339f, -0.024353f, -0.008933f, -0.009634f, -0.069422f, -0.086048f, -0.031922f, 0.261108f, 0.208490f, 0.138742f, 0.252190f, -0.099931f, -0.239073f, -0.076237f, -0.386241f, -0.150078f, 0.010696f, -0.090116f, 0.176827f, 0.242231f, 0.039357f, 0.154138f, 0.263880f, 0.006166f, 0.072601f, -0.016764f, -0.310562f, -0.256345f, -0.194207f, -0.192290f, -0.095142f, 0.147722f, - 0.078980f, 0.114433f, 0.324016f, 0.137986f, 0.019982f, 0.194611f, 0.090096f, -0.110650f, 0.037741f, -0.092724f, -0.314674f, -0.075158f, -0.164465f, -0.323506f, -0.053973f, 0.008053f, -0.079287f, 0.219801f, 0.252957f, 0.100380f, 0.297474f, 0.301706f, 0.056124f, 0.116667f, 0.052162f, -0.189777f, -0.213482f, -0.199152f, -0.359376f, -0.316913f, -0.121057f, -0.146854f, 0.031051f, 0.193093f, 0.263505f, 0.218402f, 0.336613f, 0.250375f, 0.134017f, 0.019178f, -0.042016f, -0.193532f, -0.236496f, -0.173999f, -0.207795f, -0.172666f, -0.007561f, -0.009151f, 0.039460f, 0.187655f, 0.090194f, 0.114894f, 0.179226f, -0.003091f, -0.055751f, -0.028955f, -0.112257f, -0.063573f, -0.037574f, -0.040787f, 0.046113f, 0.095403f, 0.036851f, 0.053122f, 0.059812f, -0.042834f, -0.015374f, -0.017835f, -0.114415f, 0.016500f, 0.048042f, -0.123463f, -0.001313f, -0.010789f, -0.125081f, 0.047281f, 0.021395f, -0.141195f, 0.089888f, 0.134257f, 0.031693f, 0.269763f, 0.167676f, -0.002669f, 0.143526f, 0.026504f, -0.181545f, -0.150376f, -0.236497f, -0.335375f, -0.251939f, -0.163514f, -0.087875f, 0.115463f, 0.249206f, 0.292313f, - 0.363475f, 0.356505f, 0.252363f, 0.056496f, -0.026076f, -0.179814f, -0.329034f, -0.319660f, -0.284193f, -0.238311f, -0.050800f, 0.026820f, 0.042548f, 0.165922f, 0.176078f, 0.122842f, 0.126289f, 0.098630f, 0.043542f, 0.061105f, 0.044656f, -0.008814f, -0.020218f, -0.050077f, -0.102652f, -0.111265f, -0.110431f, -0.111877f, -0.084772f, -0.018405f, 0.005004f, 0.036265f, 0.076061f, 0.092313f, 0.098346f, 0.098003f, 0.071334f, 0.023607f, 0.000161f, -0.027598f, -0.049683f, -0.057211f, -0.044508f, -0.046438f, -0.036136f, -0.012357f, -0.007627f, -0.011430f, 0.000949f, 0.002352f, 0.003685f, 0.028053f, 0.029979f, 0.014194f, 0.018869f, 0.015417f, 0.008957f, 0.019836f, 0.016612f, 0.003239f, 0.001135f, -0.013998f, -0.025986f, -0.023701f, -0.023849f, -0.025885f, -0.019815f, -0.012034f, -0.003215f, 0.008154f, 0.019642f, 0.022610f, 0.022771f, 0.021077f, 0.014790f, 0.006147f, 0.001859f, -0.007331f, -0.014200f, -0.012658f, -0.009764f, -0.008447f, -0.001064f, 0.002548f, 0.005477f, 0.003988f, 0.002422f, -0.002429f, -0.004513f, -0.008255f, -0.007483f, -0.005158f, -0.001031f, 0.000820f, 0.005478f, 0.008304f, - 0.012163f, 0.011422f, 0.008711f, 0.004822f, 0.003122f, -0.002260f, -0.005367f, -0.008037f, -0.008924f, -0.009377f, -0.006630f, -0.005363f, -0.001965f, 0.000267f, 0.002709f, 0.002906f, 0.004184f, 0.002896f, 0.002438f, 0.000373f}, - {-0.009464f, 0.029348f, 0.011209f, 0.007157f, 0.002289f, -0.006182f, 0.000055f, 0.005655f, 0.010556f, 0.000178f, 0.001005f, 0.000652f, -0.003894f, 0.001065f, 0.003571f, -0.000689f, 0.003489f, 0.005445f, 0.007193f, 0.003064f, 0.002944f, 0.003834f, 0.003356f, -0.006592f, 0.006708f, 0.012659f, -0.005998f, 0.003622f, 0.001972f, 0.003558f, 0.000642f, 0.007509f, -0.004877f, -0.001703f, -0.004389f, 0.004347f, 0.012512f, -0.002077f, 0.006070f, -0.000137f, -0.002833f, -0.010286f, 0.003858f, -0.005315f, 0.004754f, 0.002441f, 0.005312f, -0.000562f, -0.003195f, 0.001709f, -0.002200f, 0.007200f, 0.000928f, -0.005650f, 0.007280f, -0.001564f, 0.005684f, 0.004410f, -0.000224f, 0.004235f, 0.008209f, -0.002281f, -0.002867f, -0.002301f, 0.004091f, -0.003328f, -0.004414f, 0.005132f, 0.000071f, 0.003453f, -0.005452f, 0.008097f, 0.000491f, -0.002248f, -0.000932f, -0.000868f, 0.003229f, -0.002997f, -0.004826f, 0.002888f, 0.004351f, 0.004129f, -0.003822f, -0.005710f, 0.002327f, -0.000176f, -0.000665f, -0.002185f, -0.002076f, 0.002898f, -0.000728f, -0.000397f, -0.001756f, -0.002084f, 0.000442f, -0.001492f, - 0.000680f, 0.000468f, 0.002154f, 0.001503f, -0.000605f, 0.000789f, 0.001240f, -0.001258f, -0.000503f, 0.000106f, -0.000553f, -0.000958f, 0.000773f, 0.002085f, 0.001214f, 0.001564f, 0.000066f, -0.000121f, 0.000569f, -0.001285f, 0.000031f, 0.000497f, 0.022851f, 0.017792f, 0.009036f, 0.001238f, -0.003306f, 0.010284f, -0.005995f, -0.006572f, -0.001435f, -0.011432f, 0.006927f, 0.000396f, -0.004656f, 0.002627f, 0.006659f, 0.011279f, -0.005206f, 0.006480f, 0.014791f, -0.004267f, 0.000155f, 0.003316f, 0.007711f, -0.001989f, 0.008396f, 0.005850f, 0.008493f, 0.001888f, 0.006496f, -0.006619f, 0.011303f, -0.001399f, 0.010907f, 0.005333f, -0.001153f, 0.001299f, -0.001756f, -0.000301f, -0.003885f, -0.001904f, -0.004810f, -0.003624f, 0.003825f, -0.001066f, -0.010482f, -0.002409f, 0.001150f, -0.000341f, -0.005835f, -0.006110f, -0.003045f, -0.002669f, 0.008259f, -0.003340f, -0.009006f, -0.012115f, -0.013259f, -0.004630f, -0.005825f, -0.000524f, 0.002074f, 0.006371f, -0.008666f, -0.003994f, 0.001040f, -0.000927f, -0.003872f, 0.000920f, -0.009125f, -0.000911f, -0.010759f, 0.005712f, -0.005850f, -0.002908f, - 0.007493f, -0.001136f, 0.005148f, 0.001432f, 0.001885f, 0.005740f, 0.001458f, -0.004709f, -0.002122f, 0.000413f, -0.004533f, 0.002369f, 0.004639f, 0.002197f, -0.003551f, 0.002624f, 0.003880f, 0.000705f, 0.002107f, -0.001189f, -0.002084f, -0.001515f, -0.002084f, 0.001437f, -0.000209f, 0.001314f, -0.001741f, -0.001351f, 0.001492f, 0.002097f, 0.012095f, -0.026192f, -0.007011f, -0.013280f, -0.002450f, -0.000029f, 0.014424f, -0.007031f, -0.023451f, -0.008287f, -0.000590f, 0.008911f, 0.002793f, -0.008727f, -0.020362f, -0.005265f, 0.005588f, -0.002308f, 0.011477f, 0.000426f, 0.005030f, -0.001161f, -0.009038f, -0.009863f, 0.005930f, 0.007207f, 0.000849f, 0.002321f, -0.000359f, 0.004395f, 0.001027f, -0.012129f, 0.000644f, 0.017015f, 0.002293f, -0.004262f, -0.001574f, -0.004555f, 0.001043f, -0.003934f, -0.007407f, 0.011381f, -0.003550f, -0.004780f, 0.010354f, -0.005447f, -0.009197f, 0.000391f, 0.000058f, 0.000269f, -0.013265f, 0.010750f, -0.004114f, -0.000288f, 0.009941f, 0.009013f, -0.014224f, -0.003639f, 0.002747f, 0.003419f, -0.001264f, 0.007754f, 0.002140f, 0.003833f, 0.005392f, 0.000771f, - 0.004307f, 0.006488f, 0.001414f, 0.000001f, 0.006079f, -0.016258f, -0.003601f, 0.000369f, 0.008256f, 0.004544f, -0.002007f, -0.001683f, 0.006001f, 0.005555f, -0.006479f, -0.000969f, -0.002316f, 0.000152f, 0.003544f, 0.004482f, 0.000891f, 0.005549f, -0.000580f, -0.004064f, -0.001912f, 0.000398f, 0.000401f, 0.000478f, -0.001525f, 0.003843f, -0.000818f, 0.001344f, -0.000612f, -0.001835f, 0.001131f, -0.000116f, -0.000794f, -0.001519f, 0.000303f, -0.001435f, -0.000246f, -0.002525f, -0.001917f, 0.000435f, -0.000395f, -0.001995f, -0.003809f, -0.001464f, 0.000806f, 0.003124f, -0.052146f, -0.020489f, -0.010552f, -0.014711f, 0.004612f, -0.005039f, -0.005023f, -0.000544f, 0.006545f, -0.005893f, -0.007153f, -0.010270f, 0.002044f, 0.009373f, 0.002041f, -0.007015f, -0.008844f, 0.002711f, 0.007723f, 0.007259f, -0.010048f, -0.014679f, 0.001085f, -0.013717f, 0.007328f, -0.000009f, 0.005106f, -0.000305f, 0.004926f, -0.005347f, -0.002308f, 0.014519f, -0.017491f, 0.008121f, 0.004050f, 0.002040f, -0.006219f, 0.003947f, 0.008579f, 0.002381f, -0.010664f, 0.002235f, -0.006773f, 0.005293f, -0.014547f, -0.000462f, - -0.013179f, 0.010220f, -0.001095f, -0.002519f, -0.003755f, 0.005669f, -0.022102f, 0.010278f, -0.006387f, -0.013275f, 0.005328f, 0.010853f, 0.012148f, 0.007267f, 0.002582f, -0.000765f, 0.001432f, -0.001004f, 0.007837f, -0.004378f, 0.002212f, 0.006279f, 0.015194f, 0.002531f, 0.000292f, -0.010813f, 0.006955f, -0.005320f, 0.001237f, 0.000417f, 0.008088f, -0.007067f, 0.000419f, 0.007549f, -0.000665f, -0.008704f, -0.012150f, 0.010159f, 0.000842f, 0.002002f, 0.005063f, -0.000923f, 0.002463f, 0.002288f, -0.000074f, 0.001938f, -0.000847f, 0.000429f, 0.002699f, 0.002627f, 0.002661f, -0.004279f, 0.001738f, -0.003180f, -0.001432f, -0.002658f, 0.002614f, -0.003032f, -0.029613f, 0.014494f, 0.023130f, 0.004487f, 0.001831f, 0.012847f, 0.004344f, 0.003925f, 0.007033f, 0.000959f, 0.007359f, 0.007389f, -0.005966f, -0.001103f, 0.001005f, -0.007275f, -0.004503f, -0.000102f, 0.003576f, -0.004295f, 0.024050f, 0.012768f, -0.003508f, 0.001711f, 0.007637f, 0.009607f, 0.010977f, -0.004604f, 0.007730f, 0.008993f, 0.000507f, 0.002617f, 0.002595f, 0.005117f, 0.003715f, 0.002252f, 0.005082f, 0.004844f, - -0.010406f, -0.008053f, -0.016020f, 0.001723f, -0.005676f, -0.008019f, 0.008240f, -0.002354f, 0.005187f, -0.019859f, 0.021855f, -0.001598f, -0.010395f, -0.001941f, 0.017324f, 0.012527f, -0.002764f, 0.000437f, 0.008388f, -0.004002f, 0.003606f, -0.006401f, -0.013642f, 0.001594f, 0.001274f, -0.010975f, -0.004339f, -0.010818f, 0.001928f, 0.003981f, 0.002442f, -0.005267f, -0.009551f, -0.014567f, -0.017342f, -0.012483f, -0.004860f, 0.000984f, -0.004219f, 0.001675f, 0.005759f, 0.005098f, -0.007209f, -0.000788f, -0.007862f, 0.002855f, -0.002741f, 0.002243f, -0.000105f, -0.003226f, 0.002297f, 0.002611f, -0.002315f, -0.001107f, -0.003013f, 0.004049f, -0.004819f, 0.001035f, 0.001544f, 0.001415f, -0.000488f, -0.001135f, 0.001030f, 0.002147f, 0.002159f, 0.001755f, 0.001357f, 0.001808f, 0.000599f, 0.003453f, -0.000797f, 0.003827f, -0.002394f, 0.001203f, -0.000711f, -0.000996f, -0.002756f, -0.002142f, -0.001833f, -0.002506f, 0.000987f, -0.002013f, -0.000267f, 0.001822f, 0.000612f, 0.054644f, 0.014442f, 0.004093f, -0.002059f, 0.032958f, 0.003831f, 0.015686f, 0.003199f, 0.010452f, 0.017117f, 0.006103f, - -0.009538f, 0.010172f, 0.011763f, 0.001918f, -0.000878f, 0.002575f, 0.021556f, 0.001557f, -0.007385f, -0.013052f, -0.003862f, -0.000332f, -0.014991f, 0.002581f, 0.004442f, 0.008668f, 0.003662f, 0.006141f, 0.016521f, -0.005086f, -0.002625f, 0.010226f, -0.001584f, -0.004400f, -0.000851f, -0.014697f, 0.009564f, 0.006340f, 0.000348f, 0.009591f, -0.004742f, -0.012855f, -0.027960f, -0.010155f, 0.010345f, 0.011511f, 0.000375f, 0.008109f, -0.007886f, -0.008485f, 0.022778f, -0.013073f, 0.010333f, -0.011497f, 0.002443f, -0.016805f, -0.017732f, 0.019375f, -0.007339f, -0.006819f, 0.026605f, 0.002114f, -0.002964f, -0.012374f, 0.009769f, 0.015472f, 0.000774f, -0.008155f, -0.015633f, -0.002336f, 0.011407f, -0.003519f, 0.003884f, -0.006792f, 0.005631f, -0.002504f, 0.001841f, 0.012259f, -0.013058f, 0.004226f, -0.003677f, 0.000947f, 0.001534f, -0.001369f, 0.014041f, 0.004526f, 0.002089f, -0.004024f, 0.000170f, -0.003157f, 0.005932f, -0.002717f, 0.004710f, 0.004842f, -0.004896f, 0.000173f, -0.000762f, -0.003048f, 0.006687f, 0.001268f, 0.003142f, 0.000397f, -0.002325f, 0.001498f, 0.000055f, 0.000272f, - 0.001932f, 0.003104f, 0.001125f, 0.004026f, 0.001244f, -0.000143f, 0.002200f, 0.001632f, -0.001484f, 0.000627f, -0.000628f, 0.001006f, 0.003479f, 0.003998f, 0.000643f, -0.000191f, 0.027991f, 0.009068f, 0.023233f, -0.014292f, 0.004834f, 0.012721f, -0.017337f, -0.006160f, -0.006635f, 0.001676f, -0.008647f, -0.005560f, 0.013869f, -0.004295f, -0.002338f, -0.001109f, 0.017301f, -0.006375f, -0.007679f, 0.018092f, 0.003186f, -0.013026f, 0.005672f, -0.002960f, 0.003153f, 0.006760f, -0.010219f, -0.002542f, -0.007620f, -0.014225f, 0.001951f, 0.000231f, 0.002915f, -0.013996f, -0.014214f, 0.005471f, -0.001019f, 0.005322f, -0.000351f, 0.007798f, 0.002561f, -0.000480f, -0.008997f, -0.009054f, 0.002706f, 0.008791f, 0.004556f, -0.002717f, 0.026390f, 0.006100f, 0.004702f, 0.011781f, 0.004627f, 0.008734f, 0.009227f, 0.005782f, 0.003840f, 0.004408f, -0.003578f, -0.002172f, 0.002211f, -0.011209f, 0.003158f, -0.018000f, 0.005108f, -0.011950f, 0.009494f, -0.006766f, 0.005314f, -0.002417f, -0.008457f, 0.002817f, -0.002073f, 0.009237f, -0.007914f, 0.024883f, 0.021278f, 0.009617f, -0.017782f, 0.005559f, - 0.008226f, -0.007785f, 0.003549f, 0.002131f, 0.012476f, 0.011549f, 0.005108f, -0.000358f, -0.001449f, -0.002598f, -0.006897f, 0.010761f, -0.000601f, -0.001402f, 0.000251f, -0.003210f, 0.001402f, 0.003533f, -0.002766f, 0.005567f, -0.001934f, -0.004741f, -0.004653f, -0.000257f, 0.003546f, 0.003147f, -0.000676f, -0.001246f, -0.003627f, -0.001740f, 0.002249f, -0.004696f, 0.005369f, 0.005250f, -0.003167f, 0.000882f, -0.004067f, -0.001485f, 0.000944f, 0.001667f, -0.003047f, 0.005579f, -0.034470f, -0.066315f, -0.002838f, -0.013292f, 0.011491f, -0.003424f, -0.018377f, -0.001789f, -0.014888f, -0.016411f, -0.014080f, 0.021673f, 0.011235f, -0.014505f, -0.008357f, 0.016484f, 0.009527f, 0.014706f, -0.010170f, 0.009499f, -0.009028f, -0.009113f, -0.002840f, -0.004003f, -0.028092f, 0.007625f, 0.015975f, 0.006857f, -0.016722f, -0.003877f, 0.002909f, 0.004226f, -0.014928f, -0.003365f, -0.021406f, 0.004660f, -0.010179f, -0.001001f, -0.007498f, 0.004029f, 0.022788f, -0.002522f, -0.004308f, 0.011387f, 0.016638f, -0.010167f, 0.004489f, 0.006247f, -0.014156f, 0.007477f, 0.006960f, -0.016614f, 0.002528f, 0.010633f, - -0.002605f, -0.017496f, -0.011056f, -0.011314f, 0.015740f, 0.006054f, 0.015410f, -0.009247f, -0.017989f, 0.004165f, 0.008844f, -0.003890f, -0.012906f, 0.008434f, 0.012432f, 0.011786f, -0.014790f, -0.007726f, -0.003148f, 0.023656f, -0.005143f, 0.014084f, 0.004070f, -0.016802f, -0.013715f, -0.002694f, 0.009217f, -0.015930f, -0.001042f, -0.003043f, 0.008603f, -0.002003f, 0.019526f, 0.002362f, -0.004607f, -0.005966f, -0.005089f, -0.005760f, -0.003784f, -0.002022f, 0.001687f, -0.000153f, -0.002427f, -0.007304f, -0.000819f, -0.007106f, -0.003188f, 0.002768f, -0.002576f, 0.001031f, -0.002164f, -0.005404f, 0.003062f, -0.000969f, 0.008273f, -0.001754f, -0.006968f, -0.004921f, 0.002543f, -0.001403f, 0.000160f, -0.002028f, -0.004537f, 0.001373f, 0.004567f, -0.004314f, -0.001470f, 0.006298f, 0.002824f, -0.004092f, 0.000192f, 0.004945f, -0.033546f, -0.000410f, 0.001322f, 0.019189f, 0.005123f, -0.008177f, 0.011957f, -0.005934f, 0.005449f, -0.018748f, -0.005023f, -0.012011f, -0.006076f, -0.023604f, -0.008436f, -0.014239f, 0.032438f, 0.018063f, 0.019922f, -0.023155f, -0.019134f, -0.009693f, 0.011312f, -0.001393f, - 0.000130f, 0.000320f, 0.006948f, -0.001897f, 0.009700f, -0.013608f, -0.011010f, -0.000552f, -0.002852f, -0.016706f, -0.016094f, -0.013505f, -0.009167f, -0.007433f, -0.006179f, -0.021070f, 0.009904f, 0.025115f, -0.005133f, 0.011609f, 0.016731f, -0.012283f, 0.014532f, 0.008656f, 0.003750f, 0.022918f, -0.000725f, 0.019148f, 0.007603f, 0.002221f, -0.017872f, 0.007038f, 0.009404f, -0.005075f, 0.027135f, 0.021068f, 0.004542f, -0.008200f, -0.012949f, 0.007484f, -0.012722f, 0.005073f, 0.000124f, 0.015593f, 0.000346f, -0.023793f, 0.002083f, -0.009504f, -0.003370f, -0.017875f, 0.021030f, 0.010506f, 0.007868f, 0.004711f, 0.023429f, -0.006830f, -0.023764f, -0.003976f, 0.015568f, 0.000230f, -0.012055f, -0.003387f, 0.002111f, -0.005559f, 0.003328f, 0.007125f, 0.000311f, 0.000055f, -0.001171f, 0.002199f, -0.000019f, 0.008625f, 0.003067f, 0.002452f, -0.001692f, 0.003236f, 0.005027f, 0.007819f, -0.006325f, 0.004255f, 0.005001f, -0.000223f, 0.001834f, 0.007879f, 0.004833f, 0.001919f, -0.004503f, 0.006672f, -0.001626f, -0.004129f, -0.004234f, -0.000467f, -0.011614f, 0.007423f, 0.004245f, 0.001214f, - -0.005292f, 0.006526f, 0.007093f, 0.011726f, 0.007822f, 0.001861f, 0.002460f, 0.000447f, 0.010266f, -0.030604f, 0.013734f, 0.010262f, 0.013025f, -0.014238f, -0.025575f, 0.007477f, 0.007534f, 0.001376f, -0.021582f, 0.020628f, 0.005777f, -0.010859f, -0.019019f, 0.008630f, -0.008475f, 0.032968f, 0.038168f, 0.005749f, -0.006237f, -0.014189f, 0.021628f, -0.024642f, -0.008963f, 0.030624f, 0.007484f, -0.005843f, -0.016617f, -0.015121f, -0.008708f, 0.000633f, -0.020296f, 0.004644f, 0.021411f, -0.002646f, 0.007981f, -0.015677f, -0.014502f, -0.004791f, -0.012006f, 0.031356f, -0.011573f, 0.014133f, 0.011453f, 0.012780f, 0.003254f, 0.006326f, -0.021774f, -0.021651f, -0.020938f, -0.004557f, 0.015556f, 0.036140f, -0.014613f, -0.025951f, -0.006105f, -0.011909f, 0.006587f, 0.005685f, 0.019990f, -0.012171f, -0.000337f, -0.016157f, -0.003173f, 0.028964f, -0.003766f, -0.015630f, 0.020585f, 0.006864f, 0.003270f, 0.010942f, -0.023235f, 0.003633f, -0.007911f, 0.002336f, 0.010541f, 0.025479f, 0.007040f, -0.029403f, 0.010726f, 0.002678f, -0.004629f, -0.012199f, 0.000526f, -0.003048f, -0.001658f, -0.000698f, - 0.004122f, 0.006895f, 0.008135f, 0.002805f, 0.000522f, -0.004666f, 0.001512f, -0.001381f, 0.005841f, -0.009917f, 0.003724f, 0.003993f, -0.000235f, 0.000978f, 0.001665f, -0.007483f, -0.000215f, -0.004934f, 0.008250f, 0.007763f, 0.001904f, 0.009303f, -0.003594f, 0.001368f, 0.007033f, -0.001388f, 0.005580f, 0.001462f, 0.005171f, 0.001828f, -0.011628f, -0.000620f, -0.004138f, -0.000569f, 0.001615f, 0.000779f, -0.004069f, 0.000485f, -0.004794f, 0.000094f, -0.002303f, 0.049919f, -0.021697f, -0.017000f, -0.005198f, 0.010522f, -0.029196f, 0.011693f, -0.007879f, 0.014747f, -0.013102f, -0.005971f, 0.018116f, 0.013433f, 0.005121f, -0.009112f, -0.003298f, 0.024796f, 0.024395f, -0.005063f, 0.021303f, -0.006178f, 0.031320f, -0.014636f, -0.007687f, 0.005625f, 0.032813f, 0.023966f, 0.007938f, -0.017579f, -0.001225f, -0.036433f, -0.005499f, 0.005700f, 0.016769f, 0.019537f, 0.034585f, 0.009067f, -0.000623f, -0.001666f, -0.013263f, -0.022720f, -0.001622f, -0.019705f, 0.014265f, 0.004477f, 0.022054f, 0.012275f, -0.007518f, 0.021857f, -0.026002f, 0.011769f, -0.005788f, 0.001892f, -0.004510f, 0.027822f, - 0.016314f, 0.007973f, 0.004976f, -0.050471f, -0.008015f, 0.029954f, 0.015136f, 0.001873f, -0.000918f, 0.001536f, 0.024166f, 0.010263f, -0.038155f, -0.012432f, -0.014706f, 0.003598f, 0.000847f, -0.037908f, 0.001511f, -0.035431f, -0.023483f, -0.003048f, -0.015208f, -0.016483f, 0.022200f, 0.028023f, -0.002971f, -0.013561f, -0.001452f, 0.008640f, -0.003384f, 0.007381f, 0.011513f, -0.000874f, 0.012788f, 0.018701f, -0.005896f, -0.010326f, 0.001799f, -0.004366f, 0.005724f, 0.003742f, -0.002854f, -0.002533f, 0.000338f, 0.000355f, 0.005368f, -0.000489f, -0.006310f, 0.001393f, 0.006462f, 0.002451f, 0.005761f, -0.004810f, 0.008682f, 0.000098f, -0.003014f, 0.002209f, -0.005268f, 0.002281f, -0.010696f, -0.006834f, -0.008329f, 0.004503f, 0.000583f, -0.007937f, -0.001433f, 0.007036f, 0.004725f, 0.006129f, -0.003778f, 0.003443f, 0.000265f, -0.001190f, -0.010163f, -0.005173f, -0.010778f, 0.018443f, 0.034873f, -0.008564f, -0.014688f, 0.002325f, 0.013272f, 0.008113f, -0.021901f, -0.001057f, -0.017812f, -0.000676f, -0.024118f, -0.002343f, -0.020781f, 0.001212f, 0.020794f, 0.001912f, 0.046338f, -0.019357f, - -0.009732f, -0.016425f, 0.018712f, 0.031337f, -0.025236f, -0.008109f, -0.038954f, 0.007487f, -0.000645f, 0.010777f, 0.009202f, -0.021416f, -0.013146f, 0.017111f, -0.006645f, -0.004570f, -0.021330f, 0.042589f, -0.005961f, -0.045155f, 0.012461f, -0.011749f, -0.013768f, 0.016524f, 0.012427f, -0.012909f, -0.014729f, -0.004187f, -0.026490f, -0.015556f, 0.008475f, 0.006061f, 0.008856f, -0.007801f, -0.019208f, -0.021801f, -0.022300f, 0.018396f, -0.032632f, 0.000699f, 0.007593f, -0.009813f, 0.000640f, -0.000028f, -0.004599f, -0.025538f, -0.004959f, -0.010276f, 0.016171f, 0.021113f, -0.004078f, 0.032723f, -0.002048f, -0.000161f, -0.010171f, -0.001908f, 0.046614f, 0.004706f, -0.021331f, -0.008275f, 0.018006f, 0.013725f, -0.026186f, 0.000693f, 0.003501f, -0.017457f, 0.014480f, 0.003613f, 0.016228f, 0.002705f, 0.002281f, 0.002686f, 0.001058f, 0.007334f, 0.009668f, 0.001038f, 0.004723f, 0.016081f, 0.000995f, -0.005531f, 0.002524f, 0.007797f, -0.006308f, -0.001584f, 0.000645f, -0.007334f, 0.006647f, 0.006529f, 0.007717f, 0.001714f, -0.008964f, 0.002135f, -0.003267f, 0.001567f, -0.002126f, -0.001480f, - 0.000453f, -0.004749f, 0.006599f, -0.003461f, -0.005113f, -0.005687f, 0.013647f, 0.000254f, -0.015521f, 0.011197f, 0.008316f, 0.003864f, -0.001375f, 0.008588f, 0.006015f, -0.016774f, -0.004165f, 0.000956f, 0.000366f, -0.005067f, -0.022730f, 0.057401f, -0.014761f, -0.005035f, 0.005105f, 0.024476f, 0.017590f, -0.037266f, -0.015198f, -0.035402f, 0.007778f, 0.002043f, -0.010946f, -0.038964f, 0.001629f, -0.018184f, 0.008110f, 0.008596f, 0.019693f, 0.001012f, 0.014341f, 0.067455f, 0.014679f, 0.016849f, -0.010569f, -0.003731f, 0.029472f, -0.002554f, 0.002341f, 0.007828f, 0.001951f, -0.004304f, -0.015365f, 0.027194f, -0.028805f, 0.012031f, -0.042834f, -0.013021f, -0.020025f, -0.026433f, -0.022706f, -0.000014f, -0.046798f, -0.015908f, 0.006465f, 0.026851f, 0.015464f, -0.045975f, 0.026137f, 0.017403f, 0.019060f, -0.029176f, 0.021523f, -0.013661f, -0.033458f, -0.011350f, -0.033287f, 0.016342f, 0.039899f, 0.010142f, -0.003773f, -0.025942f, 0.021124f, -0.027629f, 0.041672f, -0.007608f, -0.004436f, -0.024950f, -0.027357f, 0.004204f, 0.032560f, 0.010890f, -0.022317f, -0.008877f, 0.005502f, -0.004413f, - -0.008898f, 0.021536f, 0.011055f, -0.009687f, 0.027583f, -0.001981f, -0.039001f, 0.049242f, 0.026136f, 0.020449f, 0.009318f, -0.006313f, -0.002335f, -0.003789f, 0.014710f, 0.003627f, 0.002234f, 0.032538f, 0.012672f, 0.000895f, 0.001633f, 0.004905f, 0.016925f, -0.013156f, 0.009589f, 0.001267f, 0.003276f, 0.003432f, 0.010947f, 0.005656f, 0.000785f, 0.018520f, 0.014009f, 0.001581f, -0.006230f, -0.006077f, -0.002260f, 0.015247f, 0.007564f, 0.008734f, 0.008146f, 0.010285f, -0.012162f, 0.012700f, -0.003131f, -0.002868f, 0.011528f, 0.018282f, -0.002461f, -0.004542f, 0.000023f, 0.017437f, 0.019721f, 0.007942f, 0.012204f, 0.009345f, 0.031392f, 0.005975f, -0.020217f, 0.009222f, -0.005896f, 0.009503f, 0.034452f, -0.048477f, -0.022066f, -0.038954f, 0.022165f, -0.007758f, 0.003818f, -0.012777f, 0.028129f, -0.027578f, -0.027939f, -0.012595f, -0.006511f, -0.019822f, -0.034568f, -0.016560f, 0.006495f, 0.022835f, -0.031800f, 0.021118f, -0.011954f, 0.002652f, 0.041251f, 0.031695f, -0.000493f, 0.016774f, 0.008012f, -0.006415f, -0.004938f, -0.055819f, 0.007812f, -0.005528f, 0.005570f, 0.011056f, - -0.004339f, 0.001682f, 0.056614f, -0.050608f, 0.004846f, 0.061415f, 0.008064f, 0.017079f, -0.023947f, -0.006397f, 0.032103f, 0.056397f, 0.002931f, 0.050035f, -0.019358f, 0.045281f, -0.015763f, 0.033561f, 0.033962f, -0.008214f, 0.066101f, -0.010816f, -0.002692f, -0.019433f, -0.029722f, -0.031437f, -0.014392f, -0.018802f, -0.045808f, -0.021265f, -0.009625f, 0.017157f, 0.016926f, 0.002326f, -0.023457f, -0.003768f, -0.006525f, 0.029710f, 0.009307f, -0.015229f, 0.025453f, 0.005868f, -0.002977f, -0.003399f, -0.018261f, -0.002664f, -0.007158f, 0.007878f, -0.018474f, -0.008747f, -0.012823f, -0.012773f, 0.023731f, 0.009255f, -0.007612f, 0.007272f, -0.005802f, 0.004660f, -0.013945f, 0.021254f, 0.001229f, 0.006073f, -0.000311f, -0.014072f, 0.013279f, -0.001582f, 0.005048f, 0.015131f, 0.010666f, 0.006526f, 0.001461f, -0.021996f, 0.010872f, -0.008357f, -0.000710f, 0.019162f, -0.000094f, 0.007170f, 0.004896f, 0.009203f, 0.013149f, -0.004518f, -0.009964f, -0.006750f, -0.007892f, 0.004052f, 0.011890f, 0.019676f, 0.011744f, -0.022834f, -0.002471f, -0.024806f, -0.021503f, -0.072471f, -0.051725f, -0.036313f, - -0.003737f, 0.049504f, -0.032470f, -0.003912f, -0.025010f, -0.035796f, -0.029892f, -0.036573f, -0.038439f, -0.014971f, -0.045348f, -0.049055f, -0.042931f, 0.012332f, -0.029679f, -0.015247f, -0.036969f, 0.035343f, 0.057418f, 0.005205f, -0.006762f, -0.020062f, 0.004590f, -0.003369f, -0.001647f, -0.004401f, 0.017999f, 0.004044f, 0.039116f, -0.033990f, 0.002866f, -0.028880f, 0.059523f, 0.014866f, -0.035123f, 0.027725f, -0.025209f, 0.022570f, -0.033802f, 0.019980f, 0.002757f, -0.019905f, 0.017955f, -0.031630f, -0.010780f, 0.010369f, 0.032476f, 0.014514f, 0.057745f, -0.012715f, -0.037456f, 0.003779f, -0.010784f, 0.004685f, -0.024864f, -0.021144f, -0.039963f, 0.005329f, -0.042477f, -0.008217f, -0.006755f, -0.036827f, 0.024673f, 0.031714f, -0.018408f, -0.001692f, -0.054730f, 0.063077f, 0.076008f, 0.012506f, -0.030166f, 0.010709f, 0.066876f, -0.031129f, -0.014397f, -0.035546f, -0.021013f, -0.039047f, 0.016052f, -0.001566f, -0.022322f, 0.017515f, -0.022357f, 0.009586f, -0.013954f, -0.006029f, 0.008997f, 0.005117f, -0.000279f, -0.014412f, -0.003048f, 0.013273f, 0.007436f, -0.024251f, 0.019331f, -0.016789f, - 0.008859f, 0.011594f, -0.007839f, -0.014117f, 0.007688f, -0.011348f, 0.009496f, 0.007271f, -0.015377f, 0.005963f, -0.002155f, 0.006267f, -0.009191f, -0.024432f, 0.006689f, 0.004708f, -0.010260f, 0.006796f, -0.009196f, 0.018040f, -0.000339f, 0.007601f, 0.001973f, 0.023342f, 0.002991f, -0.030400f, 0.017300f, 0.011829f, 0.005200f, 0.019681f, -0.058762f, 0.107446f, 0.040492f, -0.008675f, -0.032456f, -0.008888f, -0.034459f, 0.037075f, 0.093008f, 0.002169f, -0.061870f, -0.028123f, 0.033497f, 0.012648f, -0.012384f, 0.044536f, -0.008668f, 0.005738f, 0.025364f, -0.002506f, -0.025693f, -0.008171f, 0.020885f, -0.026662f, -0.024475f, -0.009724f, 0.008654f, 0.001521f, -0.004714f, -0.011074f, 0.019692f, 0.002258f, 0.029178f, 0.023294f, -0.030177f, 0.015020f, 0.035885f, 0.020327f, -0.027885f, 0.010986f, 0.005931f, 0.024470f, 0.000583f, 0.008688f, 0.006502f, 0.010240f, 0.050632f, 0.048200f, 0.029689f, 0.065245f, -0.032041f, 0.033763f, -0.038594f, 0.024892f, -0.000445f, 0.022777f, 0.028207f, 0.009379f, 0.007330f, 0.034552f, 0.015922f, -0.008831f, 0.021749f, 0.000430f, 0.029177f, -0.030634f, - -0.017687f, 0.003011f, 0.070342f, -0.048200f, 0.004706f, -0.060686f, -0.007234f, 0.007425f, 0.024059f, -0.029339f, -0.005846f, -0.030240f, 0.007946f, 0.038101f, -0.023111f, -0.054187f, -0.011598f, -0.004982f, -0.014785f, 0.013642f, 0.009527f, -0.015040f, 0.005493f, -0.012800f, -0.012875f, 0.012658f, -0.001920f, -0.006936f, -0.024608f, 0.013820f, -0.001009f, -0.015165f, -0.012461f, 0.012110f, 0.033255f, 0.003691f, -0.009479f, -0.003939f, 0.012148f, 0.030300f, 0.006005f, 0.003085f, 0.024905f, -0.000220f, 0.006823f, -0.001800f, -0.004826f, -0.000616f, 0.009077f, 0.014654f, 0.008551f, -0.003446f, -0.005202f, 0.013140f, 0.009040f, -0.018134f, 0.017857f, 0.005398f, 0.034624f, -0.007997f, 0.008859f, 0.021412f, -0.014169f, -0.008115f, 0.011810f, -0.018980f, 0.090006f, 0.007182f, 0.006660f, -0.019979f, -0.012466f, 0.014638f, 0.013837f, 0.007957f, 0.034760f, 0.014192f, -0.014537f, 0.018037f, 0.037047f, -0.001836f, 0.040592f, -0.004319f, 0.019718f, -0.041681f, 0.074813f, -0.011563f, -0.008777f, 0.012097f, -0.056650f, -0.015038f, -0.027307f, 0.039413f, 0.021857f, 0.022082f, -0.026536f, 0.009104f, - 0.009444f, -0.035764f, 0.009645f, 0.029575f, 0.025490f, 0.008233f, -0.008880f, 0.003007f, -0.017143f, 0.056236f, 0.008398f, 0.025056f, 0.020733f, 0.030015f, -0.050857f, -0.004729f, -0.015511f, 0.008733f, -0.019067f, -0.022917f, 0.041625f, -0.040723f, 0.030406f, -0.026141f, 0.032003f, -0.008087f, -0.034249f, -0.004042f, -0.051304f, 0.030688f, 0.028804f, 0.034505f, -0.105740f, 0.029485f, 0.018562f, -0.033284f, -0.022155f, -0.031029f, 0.053753f, -0.078518f, 0.046047f, 0.108110f, 0.001537f, -0.053069f, -0.021442f, 0.030641f, 0.063439f, 0.016658f, -0.022470f, -0.047978f, -0.079508f, -0.007417f, -0.001105f, 0.030259f, -0.024284f, -0.011734f, -0.018792f, 0.052971f, 0.002754f, -0.002682f, -0.016236f, 0.010133f, 0.002343f, -0.001185f, 0.001348f, -0.001736f, 0.009335f, 0.033311f, 0.041285f, 0.021053f, -0.007142f, -0.004588f, 0.015866f, 0.003039f, -0.011301f, 0.003770f, -0.017662f, -0.011334f, -0.021344f, -0.030905f, -0.063329f, -0.025912f, 0.008589f, 0.001781f, 0.034043f, -0.026237f, -0.018811f, 0.043664f, 0.015614f, -0.012989f, -0.019664f, 0.013296f, -0.005687f, -0.018516f, 0.043301f, 0.003841f, - -0.003320f, -0.015349f, 0.000060f, -0.019140f, -0.015484f, -0.023605f, -0.006932f, -0.010306f, -0.008404f, -0.025065f, 0.016309f, -0.052214f, 0.008538f, -0.031774f, 0.047258f, 0.002647f, 0.013545f, -0.026984f, 0.021437f, -0.008023f, -0.017800f, 0.008074f, -0.018349f, -0.011989f, -0.015442f, -0.041943f, -0.022973f, 0.029614f, 0.025975f, 0.018693f, 0.022235f, -0.050612f, -0.013679f, 0.009103f, -0.013950f, 0.028511f, 0.021421f, 0.001003f, 0.018400f, 0.048884f, -0.014164f, -0.051791f, 0.097706f, -0.043228f, -0.053526f, 0.059179f, -0.028368f, -0.018019f, 0.014110f, 0.029911f, -0.035429f, -0.012274f, 0.004397f, -0.024690f, 0.126969f, -0.002046f, -0.019944f, -0.008929f, 0.001830f, 0.030472f, -0.061143f, -0.047992f, -0.025698f, -0.025706f, -0.001445f, -0.054246f, 0.000590f, -0.005680f, 0.020276f, 0.079019f, 0.081418f, -0.032217f, 0.063082f, -0.062161f, -0.053889f, 0.032072f, 0.051178f, -0.018197f, 0.014640f, 0.005560f, 0.035275f, 0.042051f, 0.000716f, 0.001971f, 0.057091f, -0.051298f, -0.099498f, -0.011991f, -0.039269f, 0.021437f, 0.047799f, -0.005498f, -0.031014f, 0.063425f, 0.019683f, 0.012114f, - -0.016746f, -0.053586f, -0.028982f, 0.004878f, -0.022262f, 0.029471f, -0.002139f, -0.019780f, -0.002143f, -0.022274f, -0.021488f, 0.029261f, -0.009114f, 0.011339f, -0.021519f, 0.031213f, -0.002250f, -0.002710f, 0.021062f, 0.029897f, -0.002862f, -0.007181f, -0.020530f, 0.001936f, -0.017596f, -0.017250f, -0.012265f, -0.006107f, -0.031093f, -0.000770f, -0.013912f, -0.006132f, -0.031216f, 0.008446f, 0.036921f, 0.013154f, -0.021923f, -0.046965f, -0.003060f, -0.004861f, 0.025253f, -0.063013f, -0.012455f, 0.013941f, -0.012400f, 0.028340f, -0.000180f, 0.016954f, -0.000838f, -0.005523f, 0.004015f, -0.035824f, 0.038783f, 0.001064f, 0.023512f, -0.024259f, -0.038590f, 0.035925f, -0.038202f, 0.012233f, -0.009173f, 0.033805f, -0.000301f, 0.007861f, -0.020501f, 0.006907f, -0.014608f, -0.048612f, -0.039203f, 0.016994f, -0.003428f, -0.000806f, 0.007676f, 0.037076f, -0.016759f, -0.010738f, -0.031091f, 0.013707f, 0.010983f, -0.003365f, -0.006349f, -0.081967f, 0.003519f, 0.023567f, -0.029697f, 0.020899f, -0.045870f, -0.008207f, 0.002820f, 0.028918f, 0.035922f, 0.004710f, -0.017394f, 0.011804f, 0.064874f, 0.057068f, - 0.056300f, -0.002263f, -0.005306f, 0.012339f, 0.006656f, -0.025672f, 0.016681f, 0.071621f, -0.050979f, -0.016330f, -0.014838f, 0.000361f, 0.002621f, 0.009462f, -0.037913f, -0.057506f, -0.021747f, -0.003280f, 0.116152f, 0.059228f, 0.039404f, -0.005301f, -0.010222f, -0.029489f, 0.050499f, 0.007459f, 0.032314f, -0.011838f, -0.015719f, -0.023346f, -0.020774f, -0.085796f, -0.038082f, -0.045230f, 0.035615f, -0.003246f, -0.016773f, -0.002620f, -0.035276f, -0.016411f, 0.037337f, 0.056284f, -0.008783f, 0.049642f, 0.026696f, 0.020856f, 0.002999f, 0.023578f, 0.029666f, 0.025066f, -0.006321f, -0.001473f, 0.000370f, 0.033882f, -0.026771f, -0.034379f, -0.016698f, 0.018632f, -0.003230f, -0.024152f, -0.015800f, -0.024191f, 0.014331f, -0.005393f, 0.030742f, 0.061411f, 0.011506f, 0.037917f, 0.049142f, 0.024054f, 0.030492f, 0.015481f, 0.009688f, 0.013701f, -0.022484f, 0.032498f, -0.026651f, -0.017761f, 0.007152f, 0.002895f, -0.019000f, 0.009916f, 0.017555f, 0.032632f, 0.013316f, -0.037120f, 0.020537f, 0.015844f, 0.004079f, 0.017452f, -0.010004f, -0.019500f, 0.010883f, -0.000833f, -0.014307f, -0.008141f, - -0.013365f, 0.005278f, -0.079240f, 0.044408f, 0.039178f, -0.002348f, 0.064284f, 0.028614f, -0.043585f, -0.043343f, 0.018878f, -0.017927f, -0.038876f, 0.002318f, 0.003988f, 0.017267f, -0.009598f, 0.022598f, -0.005560f, 0.021387f, 0.027670f, -0.025653f, -0.102755f, 0.055038f, -0.015435f, -0.032424f, 0.023530f, 0.036294f, 0.001389f, -0.069284f, -0.008953f, -0.002984f, -0.070994f, -0.044564f, 0.037557f, -0.011004f, -0.028784f, -0.024621f, 0.016194f, -0.069378f, -0.049004f, 0.093325f, -0.007853f, -0.054403f, 0.021367f, 0.050640f, 0.021894f, -0.076987f, 0.109971f, 0.044288f, -0.067604f, 0.037511f, 0.049780f, 0.007807f, -0.045749f, 0.047495f, 0.053303f, 0.032227f, -0.042156f, 0.039833f, 0.074617f, 0.003908f, 0.075377f, 0.092997f, -0.049708f, -0.029809f, -0.034578f, 0.087871f, 0.056152f, -0.038306f, 0.021587f, -0.023199f, -0.055852f, 0.048090f, 0.109821f, 0.015743f, -0.032851f, -0.027647f, 0.066033f, -0.006252f, -0.073636f, -0.052898f, 0.013560f, -0.002824f, 0.061238f, -0.010978f, 0.047340f, -0.091774f, -0.013907f, 0.003594f, 0.015904f, -0.019160f, 0.019625f, -0.000931f, 0.002050f, 0.010455f, - 0.002775f, -0.024020f, 0.007449f, -0.011459f, 0.014973f, 0.005752f, -0.033200f, 0.029147f, 0.009704f, -0.027851f, -0.019662f, 0.005256f, -0.023912f, 0.004686f, 0.022242f, 0.024210f, 0.003643f, -0.022815f, -0.007207f, 0.007463f, -0.031035f, 0.018213f, 0.023321f, 0.007497f, 0.002122f, 0.023097f, 0.008658f, -0.010401f, 0.011468f, -0.008380f, 0.002124f, -0.015959f, 0.010261f, 0.037016f, -0.026084f, 0.064524f, 0.103873f, 0.041738f, -0.042966f, -0.015975f, -0.036036f, 0.021973f, -0.017501f, 0.028343f, 0.018858f, -0.047806f, 0.024301f, -0.048720f, -0.016306f, 0.000223f, -0.017824f, 0.002560f, 0.025381f, 0.019649f, 0.001432f, -0.038903f, 0.008759f, 0.030913f, -0.011753f, 0.004429f, -0.014002f, -0.045493f, 0.045845f, -0.027569f, 0.031747f, -0.046860f, -0.027489f, -0.006808f, -0.038296f, -0.011625f, 0.038922f, -0.038208f, 0.051309f, 0.003067f, 0.041838f, 0.016241f, -0.020849f, -0.056402f, 0.046021f, 0.028256f, 0.019151f, 0.011513f, 0.047434f, -0.035477f, -0.017908f, -0.020673f, 0.014797f, 0.017480f, -0.004697f, -0.044653f, -0.002058f, -0.006477f, -0.044806f, -0.018111f, 0.007013f, 0.011742f, - 0.035249f, -0.004589f, -0.031512f, 0.041537f, -0.008155f, -0.007672f, 0.050353f, 0.023587f, -0.041457f, 0.013001f, -0.025444f, 0.015643f, -0.013385f, 0.019316f, -0.035833f, 0.019563f, -0.012491f, 0.039130f, 0.006688f, 0.014745f, -0.013536f, -0.000553f, -0.029121f, 0.011150f, 0.001761f, 0.000826f, -0.000887f, 0.007824f, -0.011827f, -0.011361f, -0.001551f, 0.004195f, -0.003405f, 0.007096f, -0.014917f, -0.003366f, 0.011153f, -0.003279f, -0.000715f, -0.002935f, 0.000112f, 0.000121f, -0.023475f, 0.003838f, 0.018477f, -0.000208f, -0.002928f, -0.005618f, -0.002503f, -0.017906f, 0.001024f, -0.004947f, -0.002379f, -0.009625f, -0.014516f, -0.003862f, 0.013761f, -0.008758f, -0.004542f, 0.005871f, 0.002712f, 0.010013f, -0.010931f, -0.004827f, -0.001881f, -0.009223f, -0.012736f, -0.014609f, -0.077561f, -0.089813f, -0.049193f, 0.269280f, 0.235387f, 0.143594f, 0.312575f, -0.066057f, -0.236058f, -0.082044f, -0.444427f, -0.231895f, -0.005301f, -0.114135f, 0.157986f, 0.291566f, 0.040121f, 0.171614f, 0.332539f, 0.056632f, 0.115588f, 0.011823f, -0.342955f, -0.285223f, -0.253152f, -0.277408f, -0.169247f, 0.138757f, - 0.057825f, 0.138930f, 0.359475f, 0.217730f, 0.055576f, 0.267904f, 0.121365f, -0.163036f, 0.088316f, -0.118802f, -0.314064f, -0.037991f, -0.194403f, -0.355576f, -0.161358f, -0.036311f, -0.187414f, 0.209071f, 0.223639f, 0.106830f, 0.356538f, 0.404175f, 0.152520f, 0.200187f, 0.187671f, -0.209276f, -0.137376f, -0.267815f, -0.420017f, -0.385108f, -0.247909f, -0.247693f, -0.071865f, 0.161893f, 0.208150f, 0.279597f, 0.392556f, 0.353738f, 0.205850f, 0.151300f, 0.026589f, -0.163041f, -0.238458f, -0.173755f, -0.227065f, -0.279171f, -0.095244f, -0.105042f, -0.051861f, 0.175119f, 0.120417f, 0.129545f, 0.271020f, 0.069874f, -0.012447f, 0.045380f, -0.075507f, -0.116818f, -0.065772f, -0.118060f, -0.036038f, 0.076629f, 0.028551f, 0.042469f, 0.095809f, -0.022057f, 0.019728f, 0.053004f, -0.088938f, -0.008332f, 0.111037f, -0.104861f, 0.008853f, 0.018210f, -0.210405f, -0.010164f, -0.004312f, -0.250491f, 0.019826f, 0.088901f, -0.032409f, 0.259064f, 0.234766f, 0.043541f, 0.251247f, 0.124521f, -0.011064f, 0.042243f, -0.067868f, -0.270645f, -0.282642f, -0.349085f, -0.397896f, -0.200048f, -0.032521f, 0.080944f, - 0.249636f, 0.415555f, 0.476014f, 0.379326f, 0.280333f, 0.128648f, -0.052395f, -0.157743f, -0.347763f, -0.435048f, -0.320608f, -0.256838f, -0.244831f, 0.015990f, 0.120207f, 0.147595f, 0.241255f, 0.215685f, 0.141901f, 0.139904f, 0.100552f, 0.032282f, 0.040102f, -0.000428f, -0.076327f, -0.087285f, -0.110726f, -0.141760f, -0.126796f, -0.091604f, -0.068641f, -0.025550f, 0.033977f, 0.051307f, 0.083412f, 0.101820f, 0.087631f, 0.064151f, 0.049119f, 0.021784f, -0.003966f, -0.022446f, -0.032960f, -0.044642f, -0.035458f, -0.025930f, -0.020752f, -0.016495f, -0.004012f, -0.005929f, -0.005011f, -0.000966f, -0.004453f, -0.010996f, -0.000122f, -0.002722f, 0.002237f, 0.017210f, 0.027456f, 0.034127f, 0.049481f, 0.036968f, 0.018545f, -0.000537f, -0.017257f, -0.031148f, -0.033578f, -0.045486f, -0.045524f, -0.035714f, -0.015757f, -0.002693f, 0.017236f, 0.028237f, 0.038430f, 0.036963f, 0.034305f, 0.017619f, 0.004349f, -0.009356f, -0.016253f, -0.023073f, -0.018343f, -0.016213f, -0.007180f, -0.000451f, 0.008348f, 0.008575f, 0.011670f, 0.006134f, 0.003557f, -0.005438f, -0.008964f, -0.013629f, -0.008603f, -0.007133f, - 0.001351f, 0.004260f, 0.010349f, 0.009949f, 0.012704f, 0.007402f, 0.006977f, 0.000865f, -0.000292f, -0.005365f, -0.003778f, -0.006930f, -0.004135f, -0.005709f, -0.001844f, -0.003070f, 0.000925f, -0.000953f, 0.001737f, -0.001149f} - }, - { - {-0.000963f, 0.012014f, -0.001235f, 0.003646f, -0.002195f, 0.016039f, -0.006300f, -0.001560f, -0.000568f, 0.001983f, -0.002834f, 0.007344f, -0.001270f, -0.004960f, -0.000879f, 0.010044f, 0.000746f, -0.005090f, 0.004712f, 0.003468f, 0.006617f, 0.002705f, -0.005038f, -0.003336f, 0.011231f, 0.001559f, -0.002875f, -0.002225f, -0.002289f, 0.002204f, 0.002391f, -0.001452f, -0.014299f, -0.003584f, 0.000690f, 0.009868f, 0.003529f, -0.001228f, -0.000041f, -0.005699f, 0.007861f, -0.008033f, -0.010679f, 0.001380f, 0.000103f, -0.003621f, -0.002460f, -0.002987f, 0.001528f, 0.000970f, 0.000942f, -0.003742f, 0.009324f, 0.000282f, 0.012497f, -0.002016f, -0.005954f, 0.002737f, -0.000664f, 0.001783f, 0.002901f, 0.006312f, 0.004296f, -0.001618f, -0.003432f, -0.002927f, 0.008108f, -0.008258f, 0.000322f, 0.000230f, -0.001450f, -0.007083f, 0.006245f, -0.003573f, 0.000825f, 0.005420f, -0.003819f, -0.005120f, -0.004257f, 0.005496f, -0.000507f, -0.001715f, -0.001528f, 0.000179f, -0.001031f, -0.002234f, 0.002730f, 0.002795f, 0.002042f, 0.001272f, 0.000699f, 0.003821f, 0.000617f, -0.000082f, 0.000804f, -0.000377f, - 0.000136f, -0.000886f, -0.000475f, -0.000460f, 0.002582f, 0.000621f, -0.001739f, 0.002169f, -0.004740f, 0.004145f, 0.002500f, -0.005585f, -0.003065f, -0.000430f, 0.000529f, -0.000285f, -0.000815f, -0.002821f, 0.005072f, 0.000987f, -0.002167f, -0.002948f, -0.000136f, 0.010484f, -0.001449f, -0.004900f, 0.006721f, -0.002588f, -0.006293f, -0.000616f, 0.005383f, 0.004034f, -0.003436f, 0.000976f, -0.004299f, 0.002549f, 0.002482f, -0.002030f, 0.005381f, -0.001426f, -0.009647f, 0.001837f, 0.005038f, 0.004722f, 0.000684f, -0.000671f, -0.006985f, -0.002317f, -0.000896f, -0.003023f, 0.006358f, 0.008942f, 0.004169f, -0.012073f, 0.004134f, 0.014329f, 0.005936f, -0.000639f, -0.000063f, 0.006634f, -0.003218f, 0.002214f, -0.005985f, -0.005380f, 0.005560f, 0.006310f, 0.003048f, 0.001740f, 0.001141f, 0.001325f, 0.002988f, 0.000633f, -0.000527f, -0.002079f, 0.001538f, -0.004166f, -0.000758f, -0.001752f, -0.008618f, -0.004252f, 0.001857f, 0.003299f, 0.002702f, 0.005941f, 0.004667f, 0.004949f, 0.007054f, -0.004387f, -0.002773f, -0.001213f, 0.002275f, 0.002651f, 0.004185f, -0.000803f, -0.001336f, -0.000698f, - 0.002577f, -0.001751f, 0.002339f, 0.000657f, -0.000899f, -0.000683f, 0.000811f, -0.000336f, 0.001449f, 0.000661f, 0.000281f, -0.000488f, 0.000830f, 0.000788f, -0.000245f, 0.001215f, 0.000344f, 0.000374f, -0.000854f, 0.000294f, -0.000194f, 0.000121f, 0.001536f, 0.000265f, 0.000692f, 0.000641f, 0.000275f, 0.008366f, -0.000654f, 0.003490f, -0.005416f, -0.007913f, -0.005056f, 0.004399f, -0.003698f, -0.003643f, -0.004006f, -0.005207f, 0.005000f, 0.000772f, 0.003648f, -0.001589f, 0.001020f, -0.010773f, -0.007035f, -0.004892f, 0.006865f, 0.001373f, 0.001467f, 0.003842f, -0.003913f, -0.001905f, -0.000945f, 0.001296f, -0.008287f, -0.001544f, -0.005618f, -0.005995f, 0.000264f, -0.005286f, 0.003493f, 0.003406f, 0.014221f, -0.003525f, 0.007189f, -0.004809f, 0.002919f, -0.003291f, 0.000660f, 0.012543f, 0.001917f, 0.005450f, -0.006018f, 0.003841f, -0.005424f, -0.002507f, -0.000919f, 0.007974f, -0.004018f, -0.002020f, -0.007168f, -0.003736f, -0.008448f, -0.001101f, 0.007796f, 0.001907f, 0.000489f, 0.001387f, 0.007138f, -0.007118f, -0.012616f, 0.002916f, 0.003839f, -0.008156f, -0.000703f, 0.001111f, - -0.002129f, 0.003311f, 0.009681f, 0.002058f, -0.002591f, 0.000236f, -0.003591f, 0.000659f, 0.000488f, -0.002785f, -0.000948f, -0.000881f, -0.004065f, -0.000923f, -0.002368f, 0.000846f, -0.000968f, -0.001551f, 0.003128f, -0.000608f, -0.003299f, 0.001371f, -0.002383f, 0.000105f, -0.002569f, -0.003574f, 0.001971f, -0.000645f, -0.000370f, 0.001141f, 0.001411f, 0.000464f, 0.003204f, -0.001576f, -0.000390f, 0.000556f, -0.001307f, -0.000511f, -0.000489f, -0.001654f, -0.000980f, 0.002726f, 0.000799f, 0.003884f, 0.000363f, 0.001739f, -0.001658f, 0.004528f, -0.012706f, 0.002058f, -0.004400f, -0.009476f, -0.006734f, 0.003759f, -0.001813f, -0.000498f, 0.009399f, 0.003037f, -0.001232f, 0.000754f, 0.008004f, -0.003795f, 0.005928f, -0.002719f, 0.001821f, -0.008455f, -0.001411f, 0.005630f, -0.001844f, 0.007009f, 0.007998f, 0.002551f, 0.005066f, 0.010325f, -0.002359f, -0.014684f, 0.003396f, -0.006567f, 0.000526f, -0.017971f, 0.000559f, 0.005691f, -0.003522f, 0.006628f, 0.001018f, -0.006520f, 0.002392f, -0.013529f, -0.008550f, -0.003343f, -0.003242f, -0.011237f, 0.005735f, 0.006141f, 0.000433f, 0.005711f, - 0.000511f, 0.001509f, -0.003558f, 0.005173f, 0.004051f, -0.002147f, 0.012403f, -0.002377f, 0.010257f, 0.008675f, -0.000439f, -0.001475f, 0.000088f, 0.002742f, 0.004226f, 0.001274f, 0.004722f, 0.001498f, 0.001644f, 0.013598f, 0.005271f, -0.006017f, -0.002682f, -0.000137f, -0.003231f, 0.001971f, -0.002322f, 0.013716f, 0.002357f, 0.006415f, -0.004890f, 0.005535f, -0.000006f, -0.002769f, 0.001238f, -0.004512f, -0.002849f, -0.000820f, -0.003147f, -0.002024f, -0.001886f, 0.001634f, -0.002951f, -0.000757f, -0.002064f, -0.001146f, -0.000980f, 0.003729f, -0.001564f, 0.001918f, -0.000495f, -0.003275f, -0.000489f, 0.001937f, 0.000847f, 0.000298f, 0.001285f, -0.002001f, 0.001711f, 0.001039f, 0.001020f, 0.001813f, -0.001030f, 0.000390f, -0.003108f, -0.000278f, 0.002457f, 0.002115f, 0.000564f, 0.000355f, 0.000341f, 0.001719f, -0.024468f, 0.000171f, -0.000149f, 0.006348f, 0.010628f, 0.003851f, -0.005469f, -0.008818f, -0.001499f, 0.011686f, -0.002275f, -0.002115f, -0.008664f, -0.000105f, -0.003648f, 0.008679f, 0.010131f, -0.017419f, 0.011357f, 0.007397f, -0.006712f, -0.001324f, -0.009256f, 0.000155f, - -0.002842f, 0.000316f, 0.005949f, 0.011748f, -0.004443f, 0.002793f, -0.003119f, -0.003885f, 0.004254f, 0.008139f, 0.005350f, -0.004949f, -0.008361f, 0.005882f, 0.003941f, -0.002882f, -0.001578f, 0.001117f, -0.010756f, 0.003990f, 0.003164f, -0.004172f, -0.007214f, 0.002869f, -0.005498f, 0.009612f, 0.004114f, -0.016582f, 0.007551f, -0.007039f, -0.018450f, -0.005220f, -0.001442f, 0.003799f, -0.007606f, -0.000238f, 0.003989f, -0.008006f, -0.008064f, -0.008241f, -0.002622f, 0.002207f, 0.017381f, 0.002859f, 0.003253f, -0.003639f, -0.009183f, 0.012004f, -0.003670f, -0.013839f, 0.000626f, -0.013967f, 0.001001f, -0.001245f, -0.005197f, -0.015309f, 0.004643f, 0.000332f, -0.003454f, 0.003896f, 0.009300f, 0.004420f, -0.001838f, -0.001473f, -0.000106f, 0.005233f, 0.000766f, 0.001377f, 0.002813f, 0.005101f, -0.000491f, -0.002204f, -0.003038f, -0.002954f, 0.001135f, -0.000113f, -0.002487f, -0.002348f, 0.002201f, 0.002309f, 0.004290f, 0.001045f, -0.000159f, -0.000118f, 0.001569f, -0.000633f, -0.000133f, -0.000563f, 0.002691f, -0.000184f, 0.001410f, -0.000273f, 0.003696f, 0.015257f, 0.003986f, 0.003368f, - 0.006553f, 0.009629f, -0.002207f, 0.023418f, -0.003493f, 0.016775f, -0.019800f, 0.006853f, 0.011416f, -0.004104f, 0.001507f, -0.005484f, -0.000628f, 0.009063f, 0.016322f, -0.004588f, -0.008256f, -0.002343f, 0.007553f, 0.001686f, 0.016598f, 0.007953f, -0.001901f, 0.002455f, -0.000221f, -0.007754f, 0.001455f, -0.001689f, -0.002518f, 0.007350f, 0.009489f, -0.015077f, 0.017375f, -0.013250f, -0.007334f, 0.003023f, -0.005486f, 0.008853f, 0.000129f, -0.005004f, 0.012245f, 0.017354f, -0.012988f, -0.002274f, -0.001358f, 0.005411f, -0.012303f, -0.020052f, -0.009478f, -0.006095f, 0.005816f, -0.013890f, -0.008151f, -0.001571f, 0.014343f, 0.009137f, -0.010169f, 0.007250f, 0.003722f, -0.005429f, -0.008377f, -0.001257f, -0.005195f, -0.005849f, 0.000496f, -0.003873f, 0.010696f, -0.008119f, -0.001810f, 0.009203f, -0.007360f, 0.009943f, 0.011711f, 0.001668f, -0.001331f, 0.001098f, -0.014711f, -0.012903f, -0.003348f, 0.008198f, 0.000241f, -0.005619f, 0.005269f, 0.012058f, -0.008109f, -0.003662f, 0.003155f, -0.001018f, -0.005796f, 0.000035f, 0.001425f, -0.005444f, 0.000184f, -0.001451f, 0.002357f, 0.000799f, - 0.004225f, 0.000672f, 0.003292f, -0.002098f, -0.001017f, 0.000231f, 0.000279f, -0.000154f, 0.002934f, 0.001380f, 0.003442f, 0.003472f, 0.000218f, 0.001090f, -0.000633f, 0.002271f, 0.003511f, -0.001786f, 0.008919f, 0.007214f, 0.009741f, -0.009414f, -0.012407f, -0.006740f, 0.008459f, 0.000358f, 0.034967f, -0.002695f, -0.000851f, -0.008479f, -0.015793f, -0.023258f, -0.005123f, 0.007605f, 0.012294f, -0.007731f, -0.014866f, 0.001860f, 0.000133f, 0.014831f, -0.004988f, -0.006182f, 0.018398f, -0.010103f, 0.001197f, -0.014268f, 0.009089f, -0.002928f, 0.000070f, -0.003239f, -0.021612f, -0.013646f, 0.001146f, 0.011903f, 0.008015f, 0.000886f, -0.022395f, 0.014779f, -0.009053f, -0.009329f, -0.009666f, -0.012898f, -0.002010f, 0.012078f, -0.009930f, -0.011026f, 0.007508f, -0.003670f, 0.004309f, 0.022311f, -0.009791f, 0.000385f, 0.001106f, 0.009416f, -0.006642f, -0.006176f, -0.003105f, 0.014139f, -0.003220f, -0.007617f, -0.001334f, 0.011000f, 0.014418f, -0.014423f, -0.016294f, -0.005645f, -0.002422f, -0.005561f, 0.003452f, -0.011542f, -0.004052f, -0.010901f, -0.021527f, -0.008612f, -0.004983f, 0.002750f, - -0.019799f, -0.005601f, 0.000297f, 0.013886f, 0.000410f, -0.012294f, -0.000240f, -0.000630f, -0.003736f, -0.006859f, 0.000298f, 0.002761f, -0.001296f, 0.002012f, 0.001963f, -0.002814f, 0.004021f, -0.001792f, -0.004021f, 0.004241f, 0.005349f, -0.002450f, -0.005139f, -0.000291f, -0.001013f, 0.000767f, 0.004282f, 0.001468f, 0.000074f, 0.002887f, -0.001636f, -0.002718f, -0.002071f, -0.002970f, 0.004250f, -0.011473f, 0.009732f, 0.011745f, -0.008623f, -0.010584f, -0.008831f, 0.004751f, -0.000837f, 0.017050f, 0.029873f, -0.016800f, 0.001162f, -0.000759f, -0.002024f, 0.002715f, 0.008681f, -0.024547f, 0.022042f, -0.017317f, -0.008486f, 0.022069f, -0.005071f, -0.010646f, 0.007384f, 0.008115f, 0.000544f, -0.001301f, -0.017033f, 0.010599f, -0.002389f, 0.003639f, -0.011259f, 0.014030f, -0.001247f, -0.023628f, -0.025111f, 0.008342f, -0.004571f, -0.013061f, 0.006423f, -0.001147f, 0.039015f, 0.006469f, -0.007084f, -0.011674f, -0.022936f, -0.008222f, 0.004506f, -0.005666f, 0.017990f, -0.003873f, -0.026721f, -0.002666f, 0.018447f, -0.008116f, 0.002456f, 0.015826f, 0.010784f, -0.009101f, -0.001642f, 0.012799f, - 0.017248f, -0.007926f, 0.003407f, 0.002377f, -0.008253f, 0.003648f, -0.003778f, -0.001233f, 0.002609f, -0.004085f, -0.004801f, -0.016665f, -0.018092f, -0.015414f, 0.015337f, 0.008457f, 0.010007f, 0.004128f, 0.000162f, 0.006016f, -0.013188f, -0.007401f, -0.018475f, 0.009108f, -0.002295f, -0.002646f, -0.003722f, -0.002850f, -0.009402f, -0.005699f, 0.001982f, -0.003932f, 0.000615f, 0.000621f, 0.000711f, 0.003542f, 0.000519f, 0.004268f, -0.000430f, 0.003121f, -0.004255f, 0.002370f, -0.006405f, 0.000446f, -0.003015f, 0.005281f, 0.000313f, -0.003512f, -0.000955f, 0.001596f, -0.002722f, -0.003242f, -0.007488f, -0.007687f, -0.004138f, 0.007598f, 0.000575f, 0.002609f, 0.004910f, 0.001430f, 0.005949f, 0.002190f, -0.004802f, -0.020052f, 0.007655f, -0.021642f, 0.000913f, 0.007767f, -0.003410f, -0.016218f, -0.007517f, -0.003374f, 0.014523f, 0.011394f, -0.008531f, -0.008991f, 0.015480f, 0.006343f, -0.008854f, -0.009716f, -0.007443f, -0.001107f, 0.014967f, -0.002617f, 0.001420f, -0.000920f, -0.000116f, 0.019049f, 0.009552f, 0.012738f, -0.000834f, -0.001012f, 0.006667f, -0.009972f, -0.016598f, 0.013539f, - 0.021970f, -0.014889f, 0.018895f, -0.005593f, -0.001848f, -0.008511f, 0.009765f, 0.000532f, -0.010487f, 0.006360f, 0.017868f, 0.013874f, 0.006493f, -0.013436f, -0.005429f, -0.027140f, 0.004555f, 0.014051f, -0.008650f, -0.002230f, -0.010668f, 0.002752f, -0.006330f, 0.010459f, -0.006635f, 0.003455f, 0.012598f, 0.007105f, 0.023688f, 0.012317f, 0.008044f, 0.015072f, -0.012636f, 0.022647f, 0.007073f, 0.013753f, -0.004487f, -0.015683f, -0.024077f, -0.004624f, -0.004001f, -0.006336f, -0.005617f, 0.008947f, -0.016540f, 0.025048f, -0.004258f, -0.020321f, 0.011603f, 0.018716f, 0.007825f, 0.002387f, 0.003961f, 0.007008f, 0.002427f, -0.004184f, 0.004861f, -0.003834f, -0.000020f, 0.007851f, 0.000015f, -0.000318f, 0.008658f, 0.001215f, 0.004764f, -0.000736f, -0.004005f, 0.001299f, 0.000886f, -0.003454f, 0.002727f, 0.003520f, 0.000974f, -0.002461f, 0.002112f, 0.000715f, 0.006707f, 0.001473f, -0.001184f, 0.004226f, -0.005690f, 0.001680f, 0.001335f, -0.006228f, -0.009082f, -0.002537f, -0.003537f, -0.002328f, -0.004489f, -0.003169f, -0.001874f, -0.000760f, -0.007813f, 0.011043f, -0.023660f, 0.017373f, - 0.006219f, -0.003736f, 0.026009f, 0.019871f, -0.032661f, -0.022107f, 0.020881f, 0.035431f, -0.003109f, 0.005135f, -0.002846f, -0.004593f, -0.003368f, -0.001575f, 0.009188f, 0.005257f, 0.021682f, 0.005200f, 0.020761f, 0.005722f, 0.009154f, -0.002874f, -0.011409f, 0.004911f, 0.001827f, -0.009555f, 0.015961f, 0.001553f, 0.006540f, 0.003615f, -0.003022f, -0.014656f, 0.002141f, -0.016614f, -0.005344f, -0.019215f, -0.012571f, -0.007796f, 0.016362f, 0.002261f, 0.008197f, 0.019682f, -0.008261f, -0.001680f, 0.002590f, 0.007055f, 0.002414f, 0.000460f, -0.005253f, 0.014578f, 0.032459f, 0.015462f, -0.025315f, -0.018269f, -0.018654f, 0.022211f, -0.003067f, -0.020585f, 0.012328f, -0.011537f, -0.000945f, -0.003365f, -0.001112f, -0.001579f, 0.001029f, 0.019492f, 0.032537f, 0.012193f, 0.028075f, 0.017807f, 0.009339f, 0.003634f, 0.007338f, -0.008903f, 0.029879f, 0.009586f, -0.015127f, -0.020706f, 0.009529f, 0.006861f, -0.005307f, 0.014836f, 0.028301f, 0.006488f, -0.010392f, 0.017446f, -0.001235f, -0.012738f, 0.003057f, 0.009814f, 0.001995f, -0.001630f, 0.001524f, 0.005425f, 0.009837f, 0.004251f, - 0.004601f, 0.001147f, 0.006580f, -0.002522f, -0.000764f, -0.003538f, -0.000590f, 0.012969f, -0.006383f, 0.004861f, -0.001556f, 0.003171f, 0.000785f, -0.003330f, 0.002399f, 0.004674f, 0.006094f, -0.002550f, 0.002792f, -0.005082f, 0.000359f, 0.002709f, -0.008799f, 0.004081f, -0.002612f, -0.012985f, 0.003379f, 0.032356f, 0.005780f, 0.011573f, -0.010618f, 0.008530f, -0.016124f, -0.027589f, 0.000297f, 0.015161f, 0.004104f, 0.012221f, 0.016465f, 0.018756f, 0.000743f, -0.019953f, -0.017521f, -0.026516f, -0.041799f, -0.000483f, -0.005358f, 0.018556f, 0.013250f, -0.015325f, -0.009041f, 0.010972f, 0.021300f, -0.026903f, -0.017881f, -0.004997f, -0.015242f, -0.009911f, -0.005939f, 0.008604f, 0.016443f, 0.000964f, -0.010617f, -0.012359f, 0.016614f, -0.013388f, -0.006120f, -0.000213f, 0.023540f, -0.001493f, 0.001558f, -0.037399f, -0.003247f, 0.009356f, 0.018899f, 0.025272f, 0.004992f, -0.024039f, 0.011006f, 0.000649f, 0.010949f, 0.015961f, 0.002234f, 0.008095f, 0.017727f, 0.031872f, -0.021529f, -0.008195f, -0.002294f, 0.009853f, 0.033316f, 0.014342f, 0.010833f, 0.019057f, -0.006945f, -0.011036f, - -0.020716f, -0.025416f, -0.015605f, -0.000882f, 0.015925f, 0.037686f, -0.023902f, -0.017131f, -0.002871f, 0.036946f, -0.021102f, -0.011895f, -0.018902f, -0.003309f, -0.016994f, 0.005362f, 0.002674f, 0.008844f, 0.019094f, 0.003681f, 0.012054f, -0.008076f, -0.008561f, -0.010376f, 0.000350f, -0.005215f, -0.012711f, -0.010910f, -0.005849f, -0.002846f, -0.003043f, 0.012476f, -0.009833f, -0.002792f, -0.004025f, 0.008918f, 0.001722f, 0.006498f, -0.004727f, -0.004245f, 0.008375f, 0.002959f, 0.001821f, -0.007446f, 0.010934f, -0.005807f, -0.000851f, -0.004066f, 0.003099f, -0.004225f, 0.000639f, 0.007517f, 0.008559f, 0.001463f, 0.016411f, 0.009676f, 0.023219f, -0.027535f, -0.020106f, -0.002854f, 0.040483f, 0.016716f, 0.000742f, 0.022283f, -0.014031f, 0.033317f, -0.008075f, -0.028847f, -0.005943f, -0.028672f, 0.023161f, 0.014225f, 0.008890f, 0.009331f, 0.000216f, -0.009081f, 0.011032f, 0.017092f, 0.008181f, -0.005731f, 0.014811f, 0.020422f, 0.017796f, -0.002111f, -0.016110f, 0.027601f, 0.006100f, -0.001545f, -0.004978f, 0.003429f, -0.018293f, 0.017938f, -0.003756f, -0.004828f, -0.023227f, -0.012324f, - -0.014495f, 0.032129f, 0.011017f, 0.000433f, 0.003817f, 0.016640f, 0.023368f, 0.012213f, -0.031177f, 0.028064f, -0.003730f, 0.016256f, 0.006468f, 0.024653f, -0.006083f, -0.032149f, 0.009653f, -0.001430f, 0.012872f, -0.005684f, -0.013626f, 0.012005f, -0.005598f, 0.008148f, 0.040071f, -0.004911f, -0.019140f, 0.000105f, 0.004852f, -0.019674f, 0.032184f, -0.014537f, -0.020197f, 0.028818f, -0.017279f, 0.014686f, 0.001448f, -0.020911f, -0.015353f, -0.020923f, 0.006080f, 0.017474f, -0.010941f, 0.010107f, 0.018886f, -0.010822f, 0.013169f, -0.004506f, 0.022432f, -0.008198f, 0.006326f, 0.007430f, -0.006834f, 0.000027f, 0.000367f, -0.010478f, -0.001878f, 0.009435f, -0.015141f, -0.002895f, 0.010201f, 0.005421f, -0.000206f, -0.009020f, 0.003926f, -0.002492f, 0.003076f, -0.009445f, -0.009609f, -0.005175f, 0.001378f, 0.002214f, -0.011468f, -0.006926f, 0.009650f, 0.001231f, 0.003898f, -0.011213f, 0.004515f, 0.000860f, -0.005601f, 0.002091f, 0.000996f, 0.003478f, -0.006494f, 0.000313f, -0.003473f, -0.000751f, -0.009333f, -0.003759f, -0.001327f, 0.005833f, -0.002137f, -0.006068f, -0.003736f, -0.001330f, - 0.001284f, 0.001020f, -0.002276f, -0.000077f, -0.012505f, 0.009581f, -0.027705f, -0.004933f, 0.013584f, 0.003779f, -0.027109f, 0.007365f, -0.010064f, 0.019757f, 0.003826f, 0.010341f, -0.044691f, 0.013852f, -0.000027f, 0.017466f, 0.027428f, 0.001944f, -0.004415f, 0.002805f, -0.015100f, 0.029141f, -0.028115f, 0.009329f, 0.016416f, 0.012245f, 0.015052f, -0.006804f, -0.013984f, -0.014811f, -0.029062f, 0.011639f, 0.003460f, 0.016893f, 0.029131f, -0.010859f, 0.024861f, 0.014450f, -0.025631f, -0.013658f, -0.001224f, 0.003159f, 0.000482f, 0.000229f, 0.011877f, 0.022519f, 0.019578f, 0.009087f, -0.052634f, 0.013267f, 0.014546f, 0.015787f, -0.034974f, 0.021109f, -0.018367f, 0.018378f, 0.001294f, 0.009925f, -0.005494f, 0.013900f, -0.004994f, 0.044490f, 0.020290f, -0.019250f, 0.001609f, -0.054907f, 0.008437f, -0.015873f, -0.017624f, 0.015994f, 0.010314f, -0.027373f, -0.055956f, 0.035284f, 0.020604f, -0.051285f, 0.019390f, -0.011256f, 0.018975f, -0.003896f, 0.003942f, 0.008543f, -0.000257f, -0.034405f, -0.013818f, -0.004607f, 0.010263f, 0.000114f, -0.009599f, 0.015100f, -0.019417f, -0.006903f, - 0.018585f, -0.001230f, -0.002458f, 0.007184f, 0.003266f, 0.008058f, 0.002708f, -0.009931f, 0.003544f, -0.015077f, 0.008897f, -0.006340f, 0.004765f, 0.004586f, -0.004872f, -0.001898f, -0.003537f, -0.005053f, 0.002116f, -0.008446f, -0.002154f, -0.007078f, -0.006321f, -0.011984f, 0.005686f, -0.003232f, -0.004027f, -0.006681f, 0.002595f, 0.006712f, 0.003413f, 0.003870f, 0.000520f, 0.002344f, 0.004018f, 0.000201f, 0.004421f, 0.004799f, 0.011227f, -0.005847f, 0.016810f, -0.006043f, -0.011586f, 0.020724f, -0.015910f, 0.000559f, 0.002648f, 0.052606f, -0.007470f, 0.038105f, 0.008918f, 0.028798f, 0.001438f, 0.008526f, 0.008858f, 0.050749f, 0.050075f, -0.025633f, -0.024164f, 0.029231f, -0.036892f, 0.000454f, 0.009529f, -0.035998f, 0.020393f, 0.003366f, -0.003257f, -0.006182f, -0.011449f, 0.004839f, 0.003585f, 0.007281f, -0.022724f, 0.000639f, -0.005801f, -0.028974f, 0.014683f, 0.020966f, -0.033219f, -0.024016f, -0.012356f, 0.018204f, 0.016893f, 0.016962f, -0.002103f, -0.006191f, 0.015139f, 0.052880f, 0.027922f, -0.009830f, -0.007149f, -0.006652f, 0.035053f, -0.027795f, 0.012750f, 0.007995f, - -0.044436f, -0.017785f, -0.002300f, 0.006510f, -0.037707f, 0.026263f, 0.016463f, 0.008017f, 0.006811f, 0.018377f, -0.035719f, -0.003774f, -0.029678f, 0.001825f, 0.017933f, 0.031196f, 0.018586f, -0.018881f, -0.010615f, -0.001014f, 0.000735f, -0.021764f, 0.049577f, -0.003430f, 0.006350f, -0.011224f, 0.016821f, -0.003259f, 0.009723f, -0.003977f, 0.005940f, 0.005236f, 0.010575f, -0.000722f, -0.000088f, -0.003518f, 0.002305f, -0.000219f, -0.003073f, 0.015265f, -0.004652f, -0.010293f, -0.000886f, -0.000653f, 0.007268f, -0.010493f, 0.002271f, -0.008601f, -0.014642f, 0.009458f, -0.002917f, -0.009255f, 0.000559f, 0.000389f, 0.001471f, -0.008070f, 0.011264f, 0.003572f, 0.013889f, -0.016857f, -0.001431f, 0.008782f, -0.004620f, -0.013568f, -0.000474f, 0.015875f, 0.006687f, -0.009215f, 0.009433f, -0.004544f, 0.023895f, 0.037458f, -0.002758f, 0.002585f, -0.023263f, 0.002099f, -0.001179f, -0.016357f, -0.027748f, -0.005140f, -0.012936f, -0.020517f, -0.015275f, 0.023532f, -0.019979f, 0.017108f, -0.006137f, -0.004578f, 0.032576f, -0.022514f, -0.012811f, 0.005154f, 0.013043f, 0.002073f, -0.043481f, -0.026476f, - 0.004790f, -0.006838f, 0.006862f, -0.005923f, -0.013762f, 0.027750f, 0.005749f, -0.002251f, -0.011508f, -0.062164f, 0.037243f, -0.011144f, -0.000846f, -0.005180f, 0.002215f, 0.017979f, -0.010542f, -0.016878f, -0.029242f, -0.002625f, 0.012670f, -0.017834f, -0.023205f, 0.009612f, 0.036411f, -0.006098f, 0.033851f, 0.025158f, -0.025069f, 0.045908f, 0.030108f, -0.030095f, -0.046832f, -0.013315f, -0.020505f, 0.002606f, -0.014954f, -0.003522f, 0.022185f, -0.038917f, 0.018947f, -0.006240f, -0.022093f, -0.024386f, -0.024625f, -0.029539f, 0.006009f, 0.017890f, -0.016090f, 0.025521f, -0.003474f, -0.014740f, -0.030735f, 0.000596f, -0.003593f, 0.011916f, 0.036316f, -0.013096f, -0.027808f, -0.009553f, 0.000640f, 0.009475f, 0.024803f, 0.006660f, -0.003257f, -0.020369f, -0.000318f, 0.000856f, 0.009125f, 0.003954f, -0.000112f, 0.006989f, 0.010067f, -0.007579f, 0.012609f, -0.007274f, 0.005688f, 0.014911f, 0.013206f, 0.000898f, -0.021059f, -0.008506f, 0.003027f, 0.005237f, -0.014687f, 0.023668f, -0.014455f, 0.010860f, 0.012600f, -0.009605f, 0.001120f, 0.002666f, -0.005676f, -0.019926f, 0.004104f, 0.009050f, - 0.001445f, 0.016871f, 0.011577f, -0.011361f, -0.011039f, -0.002909f, -0.039510f, 0.071924f, 0.101300f, -0.009801f, 0.012373f, 0.006472f, 0.024563f, 0.049076f, -0.046835f, 0.000537f, 0.008158f, 0.000905f, -0.016866f, 0.002510f, -0.020845f, 0.024627f, 0.060365f, -0.012756f, 0.001337f, 0.003424f, 0.018316f, 0.001659f, 0.007126f, 0.023185f, -0.046437f, -0.003478f, 0.045649f, 0.046844f, -0.054719f, -0.011633f, 0.007924f, 0.007701f, 0.016347f, 0.041232f, 0.011650f, 0.083180f, 0.013895f, 0.025666f, 0.012304f, -0.013074f, -0.017211f, -0.000999f, -0.058327f, -0.083980f, -0.028382f, -0.027256f, -0.087438f, 0.013695f, -0.002031f, -0.048865f, -0.023794f, -0.081858f, -0.008902f, -0.011270f, 0.055845f, -0.054669f, 0.034157f, -0.037356f, -0.002991f, -0.024567f, -0.019335f, 0.021949f, 0.050196f, -0.038640f, -0.014442f, -0.003504f, -0.011379f, -0.004100f, 0.021211f, 0.040203f, 0.042986f, -0.030631f, 0.086400f, 0.057912f, 0.007612f, -0.032744f, -0.070970f, -0.016118f, -0.026371f, -0.019393f, 0.004762f, 0.022813f, -0.014833f, 0.008508f, 0.026882f, 0.004348f, -0.008424f, 0.027231f, 0.018219f, 0.009337f, - 0.012036f, 0.028588f, 0.028929f, 0.000223f, 0.002452f, 0.011562f, 0.010907f, -0.004710f, -0.008493f, -0.004941f, 0.005378f, -0.000712f, -0.003528f, 0.001801f, -0.005629f, 0.003983f, 0.018919f, -0.000813f, 0.006754f, 0.022955f, -0.005881f, -0.008233f, -0.008660f, -0.000979f, -0.012618f, -0.002571f, 0.011022f, -0.005974f, -0.003344f, 0.002196f, 0.000222f, 0.001954f, -0.001660f, 0.009028f, -0.005962f, -0.006334f, 0.015031f, 0.010514f, -0.011431f, -0.000609f, -0.006034f, -0.002494f, -0.036106f, 0.066186f, 0.110326f, -0.025969f, -0.005573f, 0.019572f, 0.049422f, 0.016610f, -0.028605f, 0.017949f, -0.024426f, 0.006352f, 0.015676f, -0.005916f, -0.032973f, 0.009944f, 0.035221f, -0.008763f, -0.050248f, 0.039381f, -0.011480f, 0.032145f, -0.011823f, -0.007946f, -0.012339f, -0.020353f, -0.000741f, 0.035700f, 0.020020f, 0.005905f, 0.028946f, -0.013718f, -0.011372f, 0.010999f, -0.015351f, 0.019978f, 0.011724f, 0.030563f, 0.052454f, 0.045896f, -0.032989f, -0.061561f, -0.022412f, -0.003882f, 0.048227f, -0.018460f, 0.008626f, 0.019404f, -0.019041f, -0.028389f, -0.045326f, -0.046631f, 0.036769f, 0.039127f, - -0.031224f, -0.112214f, 0.009324f, -0.007933f, -0.015332f, 0.008676f, -0.011142f, -0.045048f, -0.020971f, -0.010601f, -0.031235f, -0.013431f, 0.047786f, 0.018034f, 0.027558f, -0.010846f, -0.015589f, -0.010195f, 0.026574f, 0.004402f, 0.005000f, 0.022764f, 0.066251f, -0.005845f, -0.009711f, -0.033519f, -0.031623f, -0.046264f, -0.004961f, 0.026059f, 0.017843f, -0.018937f, 0.013823f, -0.008798f, -0.010976f, -0.019361f, -0.017538f, 0.015855f, -0.013584f, 0.015460f, 0.007299f, 0.008680f, -0.009899f, -0.014524f, 0.016214f, 0.009934f, -0.004099f, 0.012143f, -0.017008f, 0.006999f, -0.002345f, 0.009965f, -0.005654f, -0.009854f, -0.005533f, -0.004975f, 0.011367f, 0.005488f, -0.000586f, -0.012105f, -0.002880f, 0.023684f, -0.017170f, -0.000637f, -0.016684f, 0.020276f, -0.011120f, -0.004819f, -0.015430f, 0.001971f, -0.006663f, 0.001959f, 0.017250f, 0.017231f, 0.003506f, 0.000012f, -0.006787f, -0.013207f, -0.014520f, -0.001841f, -0.023780f, -0.003159f, -0.019661f, 0.010603f, -0.027818f, -0.045393f, -0.009967f, -0.007496f, 0.008430f, -0.015417f, 0.035059f, -0.020741f, -0.071384f, -0.038582f, 0.024746f, -0.033530f, - 0.039714f, 0.035555f, -0.015619f, -0.005264f, 0.005194f, -0.021644f, 0.000168f, 0.011741f, -0.003041f, 0.006454f, 0.050310f, 0.042013f, -0.011090f, -0.066414f, -0.050398f, 0.003902f, 0.035349f, -0.026605f, -0.011406f, -0.031287f, -0.040187f, 0.003859f, -0.011273f, -0.047064f, -0.051326f, -0.075278f, 0.030432f, 0.010551f, 0.001758f, 0.043660f, 0.058468f, -0.002140f, -0.043533f, -0.032971f, -0.035194f, -0.019792f, -0.012404f, 0.013435f, 0.022691f, -0.020008f, -0.032037f, -0.039042f, 0.020868f, 0.018449f, -0.038448f, -0.036548f, -0.014676f, -0.006239f, -0.022422f, 0.014075f, 0.094686f, 0.056985f, 0.110569f, 0.037121f, -0.058718f, 0.069023f, -0.003000f, -0.035084f, 0.003414f, -0.033020f, -0.072503f, -0.029819f, 0.016603f, 0.034748f, -0.008203f, 0.032026f, 0.018347f, 0.070549f, 0.076728f, 0.063358f, 0.020892f, -0.017575f, -0.011210f, -0.010243f, 0.013293f, 0.018032f, -0.026787f, -0.009702f, 0.004295f, 0.057565f, -0.008123f, 0.005129f, -0.006386f, 0.020932f, 0.020746f, 0.024707f, -0.001402f, 0.000651f, 0.000241f, 0.005503f, -0.002423f, 0.003638f, -0.021102f, -0.006533f, -0.007353f, -0.019439f, - -0.020456f, -0.009203f, 0.007154f, 0.024433f, -0.015898f, 0.003825f, 0.008305f, 0.027740f, 0.037125f, 0.025722f, 0.023650f, 0.026744f, 0.005647f, -0.009828f, -0.020775f, -0.029458f, -0.037078f, -0.028875f, -0.017386f, -0.034831f, -0.035802f, -0.013631f, -0.006539f, 0.003430f, 0.015565f, 0.066110f, -0.037633f, 0.004514f, 0.019167f, -0.008096f, -0.049051f, 0.049619f, 0.046988f, -0.026936f, -0.037548f, 0.005322f, 0.065146f, -0.034054f, 0.018440f, 0.042080f, 0.012637f, -0.015550f, -0.031391f, -0.020306f, 0.014330f, -0.004762f, 0.010887f, -0.018098f, 0.012042f, -0.040338f, 0.059174f, -0.005534f, 0.013182f, -0.002599f, -0.074911f, 0.023502f, -0.020832f, 0.038760f, 0.023096f, 0.041400f, -0.016213f, -0.071904f, 0.051657f, 0.023512f, -0.024633f, -0.044688f, 0.037005f, 0.020094f, 0.039362f, 0.040057f, -0.034876f, 0.016199f, 0.041551f, -0.060874f, 0.055862f, 0.027751f, -0.001883f, 0.018006f, -0.031779f, 0.070313f, -0.008009f, 0.046344f, 0.020611f, 0.081613f, -0.005813f, -0.014069f, 0.011362f, 0.033324f, 0.021882f, 0.023258f, 0.082135f, 0.005036f, 0.020002f, 0.048268f, -0.031877f, 0.033189f, - 0.003805f, -0.054484f, 0.020266f, -0.018223f, 0.061762f, -0.045352f, -0.054846f, -0.056770f, 0.048577f, 0.080116f, -0.025601f, 0.020551f, -0.094315f, 0.009195f, 0.004450f, -0.003388f, -0.044216f, 0.007589f, 0.018587f, -0.014359f, -0.012217f, -0.011635f, 0.029766f, 0.014206f, -0.018910f, -0.020099f, -0.011801f, -0.004584f, -0.005977f, 0.008775f, -0.032559f, -0.019263f, 0.017194f, 0.007341f, 0.006077f, 0.001256f, 0.014810f, -0.002324f, -0.001782f, -0.018870f, 0.025536f, 0.032135f, -0.013699f, -0.049462f, -0.033615f, -0.000147f, 0.000017f, 0.009746f, 0.002479f, -0.015446f, -0.024451f, -0.013188f, 0.009185f, 0.014573f, 0.039795f, 0.013693f, 0.002068f, 0.000896f, -0.029694f, -0.005860f, 0.030843f, 0.018469f, 0.006997f, -0.032140f, -0.019672f, -0.003431f, 0.004464f, 0.005853f, -0.005322f, -0.005903f, -0.005675f, -0.001895f, -0.120862f, 0.006594f, -0.014791f, 0.003736f, 0.093604f, 0.077019f, 0.110845f, 0.058509f, -0.029462f, -0.022599f, -0.045906f, -0.061236f, 0.021562f, 0.005350f, 0.016089f, 0.019444f, -0.017819f, 0.027846f, 0.047275f, 0.008670f, -0.012638f, -0.016031f, -0.033456f, -0.022276f, - -0.020213f, 0.009221f, 0.015073f, -0.048090f, -0.028416f, -0.006649f, 0.032273f, -0.014577f, 0.020795f, 0.025789f, -0.068282f, -0.067318f, 0.012792f, 0.019492f, 0.015013f, -0.050817f, -0.023332f, -0.045643f, -0.022061f, -0.020904f, 0.044032f, -0.057847f, -0.080500f, -0.030284f, 0.016001f, 0.013685f, -0.062084f, -0.049885f, -0.039171f, -0.029699f, 0.033591f, 0.047305f, 0.002161f, -0.016075f, -0.019630f, -0.010975f, -0.010455f, -0.021380f, -0.068916f, 0.022679f, 0.051822f, 0.047071f, 0.014678f, 0.064294f, 0.086973f, -0.007575f, -0.011161f, 0.066578f, -0.016102f, -0.040518f, -0.091560f, -0.031193f, 0.012497f, -0.050256f, -0.033628f, 0.023548f, -0.008212f, 0.032651f, 0.057133f, -0.034764f, -0.053936f, -0.017860f, -0.023134f, -0.013390f, -0.014626f, -0.014517f, 0.006094f, 0.008292f, 0.006694f, 0.011631f, -0.019365f, 0.016925f, -0.026756f, -0.003202f, 0.016666f, 0.022325f, -0.023906f, -0.033364f, 0.019133f, -0.007591f, 0.001253f, -0.023282f, 0.027559f, -0.016114f, -0.005785f, -0.006403f, 0.025510f, -0.021559f, 0.027674f, -0.012257f, -0.012890f, 0.018317f, 0.004844f, 0.014595f, -0.011524f, 0.001314f, - 0.005441f, 0.029836f, -0.003471f, 0.007104f, 0.004561f, 0.079665f, 0.027593f, 0.006699f, 0.028713f, -0.032635f, 0.001878f, -0.016540f, -0.024852f, 0.014952f, 0.005536f, -0.020266f, -0.034385f, -0.019358f, -0.031934f, -0.025512f, 0.010144f, -0.019626f, -0.009934f, 0.015159f, -0.010071f, 0.003633f, -0.011178f, 0.039731f, -0.031091f, 0.032619f, 0.011538f, 0.003904f, -0.030075f, -0.012613f, 0.023624f, 0.009914f, -0.000745f, 0.019293f, -0.003578f, -0.007647f, -0.012428f, -0.010068f, -0.008392f, 0.003814f, -0.000349f, 0.004245f, -0.035185f, 0.018634f, -0.014823f, -0.013480f, 0.012017f, 0.008608f, 0.004392f, -0.006375f, 0.024375f, 0.021363f, -0.030812f, 0.027640f, -0.004018f, 0.018820f, 0.036802f, -0.007546f, 0.019837f, 0.019281f, -0.018572f, -0.012894f, -0.024693f, 0.002405f, 0.004040f, -0.039096f, 0.016045f, 0.006173f, 0.030427f, -0.011847f, -0.069898f, 0.043921f, 0.002473f, 0.001474f, 0.000722f, -0.030572f, -0.009903f, -0.007904f, -0.010587f, -0.044653f, 0.025372f, 0.013056f, 0.027377f, -0.019784f, 0.011948f, -0.022217f, -0.020643f, 0.001145f, 0.017309f, 0.014329f, 0.000274f, -0.002370f, - -0.006482f, 0.001758f, -0.010480f, -0.001914f, 0.029539f, -0.011877f, 0.005716f, 0.003433f, 0.008250f, -0.018040f, 0.019595f, -0.000527f, -0.003966f, 0.004845f, -0.002170f, 0.004738f, 0.006428f, -0.016390f, -0.002492f, 0.000496f, -0.003324f, -0.002840f, 0.008859f, -0.010400f, 0.013022f, 0.019437f, 0.007037f, -0.011795f, -0.000826f, -0.002305f, -0.011415f, 0.014231f, -0.004127f, 0.007868f, -0.040828f, -0.115988f, -0.172447f, 0.036220f, 0.135615f, 0.005649f, 0.371129f, 0.342082f, 0.235087f, 0.404198f, 0.311039f, 0.042358f, 0.006836f, -0.041855f, -0.296170f, -0.302170f, -0.229612f, -0.395805f, -0.368984f, -0.105432f, -0.122943f, -0.124408f, 0.029877f, 0.075103f, -0.061512f, -0.020432f, 0.119056f, 0.075831f, -0.003736f, 0.088510f, 0.061593f, 0.004843f, 0.074310f, 0.175277f, 0.115551f, 0.040395f, 0.179784f, 0.133026f, 0.010844f, 0.154418f, 0.209406f, 0.050484f, 0.023147f, 0.213459f, 0.058928f, -0.082616f, 0.107883f, 0.164547f, -0.083290f, 0.038757f, 0.230070f, 0.022230f, 0.038566f, 0.277449f, 0.218361f, 0.018870f, 0.173424f, 0.229597f, -0.078819f, -0.046600f, 0.065942f, -0.186852f, - -0.312339f, -0.210737f, -0.344486f, -0.512305f, -0.470286f, -0.526306f, -0.670302f, -0.707501f, -0.625583f, -0.661333f, -0.622620f, -0.467428f, -0.372981f, -0.194003f, -0.047585f, 0.110915f, 0.385084f, 0.447826f, 0.486330f, 0.753865f, 0.737255f, 0.495165f, 0.637497f, 0.498235f, 0.198944f, 0.219604f, 0.310351f, 0.152225f, 0.099748f, 0.232064f, 0.166025f, 0.000065f, 0.080224f, 0.180659f, 0.046047f, 0.013615f, 0.135175f, 0.032066f, -0.138082f, 0.046279f, 0.111051f, -0.030849f, 0.099641f, 0.262824f, 0.105030f, 0.060082f, 0.231756f, 0.126998f, -0.043754f, 0.028291f, -0.058023f, -0.274646f, -0.336525f, -0.334491f, -0.422006f, -0.477077f, -0.394185f, -0.379004f, -0.432197f, -0.389980f, -0.321971f, -0.371247f, -0.339505f, -0.228218f, -0.181078f, -0.173359f, -0.070056f, 0.043409f, 0.051583f, 0.157972f, 0.265712f, 0.279276f, 0.276311f, 0.311838f, 0.288432f, 0.206857f, 0.175875f, 0.156911f, 0.109088f, 0.089525f, 0.109819f, 0.097875f, 0.067044f, 0.069779f, 0.076308f, 0.064924f, 0.063617f, 0.081259f, 0.072097f, 0.051717f, 0.042079f, 0.038055f, 0.007774f, -0.000912f, -0.008447f, -0.044055f, - -0.059026f, -0.055322f, -0.046117f, -0.038582f, -0.023489f, -0.011418f, -0.009050f, -0.001928f, 0.015640f, 0.029270f, 0.038354f, 0.037994f, 0.028837f, 0.019493f, 0.007197f, 0.000940f, 0.003902f, -0.001205f, -0.013564f, -0.014275f, -0.021844f, -0.039608f, -0.043868f, -0.042338f, -0.056740f, -0.061569f, -0.054872f, -0.062339f, -0.074965f, -0.071007f, -0.073147f, -0.081094f, -0.073479f, -0.061438f, -0.064392f, -0.058010f, -0.039149f, -0.031023f, -0.027964f, -0.007986f, 0.003399f, 0.006643f, 0.018801f, 0.034671f, 0.037351f, 0.039096f, 0.047694f, 0.046346f, 0.042189f, 0.048363f, 0.053029f, 0.053609f, 0.055421f, 0.059294f, 0.053976f, 0.051122f, 0.051615f, 0.052096f, 0.044135f, 0.037892f, 0.027707f, 0.014335f, 0.004179f, -0.000649f, -0.004193f, -0.007647f, -0.011086f, -0.012754f, -0.013588f, -0.012771f, -0.011211f, -0.009052f, -0.009727f, -0.008942f, -0.008338f, -0.007979f, -0.007906f, -0.006086f, -0.005334f, -0.003692f, -0.002608f, -0.000554f}, - {0.006979f, 0.009659f, -0.005684f, 0.000399f, 0.000302f, -0.006916f, 0.009235f, -0.003690f, -0.003628f, 0.002643f, -0.009556f, -0.004280f, 0.010211f, 0.002320f, -0.004186f, 0.007265f, 0.002233f, 0.001551f, -0.001517f, 0.003539f, -0.000081f, -0.012242f, -0.000605f, -0.004548f, -0.000572f, -0.000276f, -0.011737f, 0.000172f, -0.007555f, 0.000399f, 0.001157f, 0.005218f, 0.006227f, 0.002051f, 0.001525f, 0.001135f, 0.005374f, -0.002973f, 0.001817f, 0.000330f, 0.000817f, 0.001113f, -0.001655f, 0.004812f, 0.007188f, -0.013889f, 0.006411f, -0.003646f, -0.008379f, -0.005355f, 0.010608f, 0.005318f, -0.003633f, 0.006025f, 0.001721f, -0.003836f, 0.003711f, 0.000060f, -0.000045f, 0.000536f, 0.000686f, -0.001468f, 0.000039f, 0.000764f, -0.000657f, 0.004551f, -0.002889f, -0.006433f, -0.006254f, -0.000064f, 0.002042f, -0.000420f, 0.000250f, 0.003472f, -0.001427f, 0.006114f, -0.006540f, -0.001966f, 0.004946f, 0.005364f, -0.003761f, 0.006049f, 0.002086f, -0.001607f, -0.004157f, -0.001936f, -0.001807f, -0.001669f, -0.001681f, -0.000845f, -0.000290f, -0.000930f, -0.001771f, 0.000484f, 0.001168f, -0.002481f, - -0.000701f, -0.000826f, 0.001205f, -0.002166f, -0.000549f, 0.000260f, 0.005082f, 0.000441f, -0.004183f, 0.002638f, -0.002288f, -0.003227f, 0.000734f, -0.006866f, -0.000906f, -0.005133f, 0.001740f, 0.003293f, 0.003035f, 0.002528f, -0.005488f, -0.000334f, -0.004564f, 0.004841f, -0.009327f, -0.005200f, 0.004575f, -0.010087f, -0.001235f, -0.000630f, 0.002491f, 0.002259f, 0.004883f, 0.010545f, 0.004752f, -0.001279f, -0.000134f, -0.003732f, -0.003033f, -0.018537f, -0.017196f, -0.001120f, 0.012544f, -0.003120f, 0.009996f, 0.000905f, 0.002779f, -0.003125f, -0.014482f, 0.007447f, 0.002160f, -0.004310f, 0.003424f, -0.007606f, -0.001669f, 0.004325f, 0.001782f, 0.013483f, -0.009367f, 0.008182f, -0.004362f, -0.010609f, -0.005055f, -0.002891f, -0.003043f, 0.003760f, 0.003042f, -0.008557f, -0.003948f, -0.004875f, -0.001952f, 0.008259f, 0.008685f, 0.009481f, -0.007088f, 0.001182f, -0.004498f, -0.000578f, -0.003807f, -0.004685f, -0.005823f, -0.006385f, 0.003380f, 0.000997f, -0.001126f, -0.002325f, 0.000698f, 0.003583f, -0.003802f, -0.003220f, -0.001787f, 0.004102f, -0.001576f, -0.000794f, -0.001945f, -0.002093f, - -0.000670f, 0.000887f, -0.000206f, -0.000361f, 0.000531f, 0.000886f, -0.000423f, -0.000415f, 0.002474f, -0.002097f, -0.001473f, 0.000988f, -0.001436f, 0.002008f, -0.001441f, -0.001438f, -0.000448f, -0.000287f, 0.001108f, -0.000700f, -0.000812f, 0.000728f, -0.000005f, -0.002106f, 0.000497f, 0.000444f, -0.001738f, 0.006820f, -0.006457f, -0.008534f, -0.007248f, 0.000132f, -0.002817f, -0.002421f, -0.005718f, 0.001177f, -0.006397f, -0.000548f, -0.002586f, 0.009857f, -0.006314f, -0.007085f, -0.015556f, -0.020370f, -0.004832f, -0.009122f, -0.008242f, -0.002061f, 0.004281f, -0.005226f, -0.012099f, 0.007480f, -0.017583f, 0.005237f, -0.002888f, -0.003243f, 0.011500f, 0.007987f, 0.004304f, 0.001515f, -0.001889f, -0.001882f, -0.004216f, 0.001787f, 0.007830f, -0.006297f, 0.007429f, 0.006734f, 0.002053f, 0.000953f, 0.003139f, 0.005150f, -0.011406f, -0.005029f, 0.011030f, -0.008535f, 0.000796f, -0.000213f, 0.006779f, -0.000878f, -0.002470f, 0.001232f, 0.011443f, 0.006259f, 0.004036f, 0.003636f, 0.006414f, -0.010059f, 0.007833f, -0.008213f, 0.007259f, 0.004706f, -0.002044f, -0.001457f, -0.003330f, -0.004511f, - -0.007220f, -0.000385f, -0.002195f, -0.005834f, -0.006360f, -0.003638f, -0.003664f, -0.000661f, -0.000348f, -0.001775f, 0.008714f, -0.003568f, -0.001528f, -0.005867f, 0.006068f, 0.000031f, -0.001234f, 0.001272f, -0.002424f, -0.004224f, 0.000183f, 0.002389f, -0.000194f, -0.000405f, -0.002653f, 0.000799f, -0.000816f, -0.002460f, 0.000252f, 0.000562f, 0.001451f, -0.000298f, 0.000984f, 0.000768f, 0.002117f, 0.000720f, -0.002119f, 0.000115f, 0.001235f, -0.000299f, -0.001847f, -0.001190f, 0.002934f, 0.001498f, -0.001442f, -0.000642f, -0.000517f, 0.004155f, -0.010838f, -0.000174f, -0.005131f, -0.009795f, -0.004680f, -0.001757f, -0.006974f, -0.002247f, -0.006442f, -0.002401f, 0.004913f, 0.006808f, -0.011249f, -0.006272f, 0.003562f, -0.002148f, -0.012285f, 0.008182f, 0.014426f, 0.003116f, -0.003518f, -0.006717f, 0.001509f, 0.007084f, 0.013037f, -0.006610f, -0.002883f, -0.008353f, -0.006854f, 0.007328f, 0.007185f, -0.010155f, 0.005900f, -0.003202f, -0.006626f, 0.010392f, -0.000134f, 0.005696f, -0.014257f, 0.001035f, -0.009182f, 0.002113f, -0.011383f, -0.007019f, -0.001954f, -0.002574f, 0.023396f, 0.007519f, - 0.005981f, 0.004644f, -0.017621f, 0.009843f, 0.006692f, -0.003813f, -0.000559f, 0.007684f, -0.001205f, 0.008115f, 0.009212f, 0.009334f, -0.005510f, 0.000730f, -0.003132f, 0.004990f, -0.004540f, -0.004621f, 0.002945f, -0.004339f, 0.001942f, 0.002951f, 0.000028f, 0.005512f, 0.002034f, -0.010338f, -0.001391f, -0.001283f, 0.003125f, -0.011726f, -0.003922f, -0.002948f, 0.008155f, -0.002490f, -0.001522f, -0.006324f, -0.001827f, 0.000449f, -0.000745f, -0.002929f, -0.000063f, -0.001892f, 0.001994f, 0.000790f, -0.000135f, 0.000374f, 0.000636f, -0.001494f, -0.004535f, 0.002347f, 0.000819f, -0.002493f, 0.001053f, -0.001353f, 0.000359f, 0.000564f, 0.001403f, -0.000330f, -0.000695f, -0.001078f, 0.000833f, -0.001791f, 0.001536f, -0.002043f, -0.000283f, -0.000152f, 0.001185f, -0.001352f, -0.000712f, -0.001973f, -0.001333f, -0.001821f, -0.014629f, -0.008040f, 0.005874f, -0.006297f, 0.016989f, 0.007581f, 0.016629f, -0.000186f, -0.008253f, -0.008639f, -0.011814f, 0.017908f, -0.004458f, 0.008215f, 0.009024f, 0.001947f, 0.006326f, 0.005882f, 0.005583f, 0.002317f, -0.011876f, -0.000618f, -0.004648f, -0.001712f, - 0.007983f, -0.000682f, -0.000821f, 0.005679f, 0.003456f, 0.005878f, -0.005223f, -0.018540f, -0.011191f, -0.006999f, 0.013580f, -0.012326f, -0.003849f, 0.008419f, -0.001053f, 0.001594f, -0.010483f, 0.018027f, 0.000870f, -0.006979f, 0.014097f, -0.008702f, 0.021899f, 0.011402f, -0.005085f, 0.002573f, -0.006390f, -0.004265f, -0.020399f, 0.007209f, -0.009359f, -0.001416f, -0.000915f, -0.004422f, 0.008568f, -0.003375f, -0.008978f, -0.008615f, 0.001884f, -0.007871f, -0.008811f, 0.004972f, 0.000641f, 0.006270f, -0.003520f, -0.018504f, 0.006266f, 0.008054f, 0.010219f, -0.009955f, -0.011341f, 0.001465f, 0.018220f, 0.002958f, -0.009619f, -0.004345f, -0.001740f, 0.005033f, 0.000785f, 0.005358f, -0.005533f, -0.002050f, -0.001195f, -0.006643f, -0.005571f, 0.008152f, -0.001494f, 0.003193f, -0.000844f, -0.002332f, -0.005327f, -0.000510f, 0.000070f, 0.002016f, -0.001104f, 0.001872f, -0.001480f, -0.004240f, -0.001829f, -0.000602f, -0.000231f, -0.000784f, 0.003044f, 0.000157f, 0.003306f, -0.001185f, -0.000379f, -0.000561f, -0.003878f, -0.000040f, 0.001808f, 0.001908f, 0.001170f, 0.014516f, -0.013342f, 0.006579f, - 0.017412f, -0.012598f, 0.003586f, -0.007151f, -0.013378f, 0.019893f, 0.007671f, 0.018478f, 0.017344f, 0.002370f, -0.013522f, -0.008533f, 0.007286f, -0.001034f, 0.003143f, -0.014959f, 0.001729f, -0.026469f, -0.010886f, -0.020675f, 0.012845f, -0.011803f, -0.000241f, 0.003650f, -0.003215f, -0.005447f, 0.006414f, 0.006123f, 0.018394f, -0.002661f, -0.003857f, -0.014067f, -0.011727f, 0.011514f, 0.002689f, 0.003895f, 0.021969f, -0.006704f, 0.000341f, 0.011482f, -0.005013f, 0.005251f, 0.004186f, 0.011494f, 0.010633f, -0.007335f, -0.000938f, -0.014890f, 0.015580f, -0.010200f, -0.013148f, -0.012935f, 0.008325f, -0.004858f, -0.006833f, 0.015050f, -0.004515f, 0.015606f, -0.009458f, -0.007441f, -0.001802f, 0.010193f, 0.013543f, -0.001097f, -0.014191f, 0.005120f, -0.008994f, 0.018665f, 0.004099f, 0.010933f, -0.014868f, -0.006738f, 0.004257f, -0.003944f, 0.009306f, 0.001269f, -0.004915f, 0.005367f, 0.012268f, 0.016922f, 0.013334f, 0.000131f, -0.002849f, -0.000270f, 0.003062f, 0.000201f, -0.002716f, 0.001934f, -0.002249f, -0.000475f, 0.005081f, 0.000198f, -0.002147f, 0.005132f, -0.001423f, -0.002820f, - 0.001598f, 0.001762f, 0.000149f, -0.003317f, 0.001447f, -0.002300f, 0.000717f, -0.004491f, -0.005225f, 0.001317f, 0.002326f, -0.000211f, 0.004512f, -0.001590f, 0.002188f, 0.008788f, -0.023096f, 0.008103f, 0.006773f, 0.004664f, -0.017475f, 0.013366f, 0.021853f, -0.021301f, 0.008083f, -0.013068f, 0.008558f, 0.001240f, 0.007685f, -0.006259f, -0.000536f, 0.005131f, -0.014608f, -0.007137f, -0.006326f, 0.011603f, 0.012051f, -0.003888f, 0.005635f, -0.002873f, 0.008895f, 0.011503f, 0.004403f, 0.003539f, -0.011619f, -0.004252f, -0.014498f, -0.015917f, -0.011242f, 0.001171f, -0.005404f, -0.000652f, -0.006735f, -0.015845f, -0.005445f, 0.003346f, 0.001405f, -0.000870f, 0.024090f, -0.019432f, 0.007163f, -0.009627f, -0.002854f, -0.005961f, -0.006186f, 0.010359f, -0.006157f, 0.000888f, -0.007449f, -0.004843f, -0.009041f, 0.012417f, -0.011355f, 0.010207f, -0.002663f, 0.010198f, -0.000948f, 0.001637f, -0.001076f, 0.009863f, 0.005608f, -0.000171f, 0.020906f, 0.000945f, -0.010514f, 0.005628f, -0.009459f, -0.011471f, -0.013987f, 0.013697f, 0.004782f, 0.012216f, 0.012315f, 0.014581f, 0.008482f, -0.001621f, - -0.002610f, -0.002491f, 0.013898f, -0.001922f, 0.015587f, 0.003451f, -0.000681f, -0.002257f, 0.005340f, 0.008072f, 0.002067f, 0.003393f, 0.001086f, -0.000929f, 0.001546f, -0.002492f, 0.004189f, 0.000321f, 0.003593f, -0.000937f, 0.003411f, -0.000235f, -0.005453f, 0.002835f, 0.003751f, 0.000129f, 0.003053f, -0.000828f, 0.000175f, -0.003019f, 0.002640f, -0.000619f, 0.001295f, 0.005922f, 0.005947f, -0.024359f, -0.001750f, 0.002968f, -0.005427f, -0.019216f, 0.021966f, -0.001577f, 0.000976f, 0.018354f, -0.005007f, -0.019224f, 0.006898f, 0.012332f, 0.023823f, -0.001676f, 0.010171f, 0.001892f, -0.020634f, -0.006266f, -0.010640f, 0.010451f, 0.006223f, 0.005393f, -0.007604f, -0.001564f, -0.000690f, 0.001768f, -0.006848f, 0.009737f, 0.002932f, -0.008508f, 0.012411f, 0.001595f, -0.013472f, -0.011606f, 0.003396f, 0.014660f, 0.013472f, -0.018644f, 0.036450f, -0.001913f, 0.000894f, 0.009859f, -0.001227f, -0.004867f, -0.000107f, 0.023191f, -0.011437f, 0.011421f, -0.002585f, 0.016029f, 0.005090f, 0.014361f, -0.005260f, -0.011456f, 0.008261f, 0.012274f, -0.005889f, -0.013900f, -0.014777f, -0.013310f, - -0.005736f, -0.002743f, 0.014038f, 0.000275f, 0.012240f, -0.001500f, -0.003684f, 0.011829f, -0.010100f, -0.020097f, -0.005052f, -0.012846f, -0.011766f, -0.022332f, 0.016918f, 0.014467f, 0.006258f, -0.034601f, 0.008428f, 0.007253f, -0.002281f, -0.001038f, -0.011747f, 0.016498f, 0.008775f, 0.006526f, 0.004362f, 0.015158f, -0.000992f, -0.001092f, 0.001453f, -0.000157f, 0.003862f, 0.001724f, 0.000411f, 0.004658f, -0.002454f, -0.000615f, -0.003226f, 0.001056f, 0.001560f, 0.005145f, -0.003222f, -0.000535f, -0.001042f, 0.003979f, -0.001457f, 0.001505f, 0.002713f, 0.003202f, -0.002358f, 0.007627f, 0.000368f, -0.000180f, -0.002398f, 0.003018f, -0.004350f, 0.001738f, 0.000600f, -0.001159f, 0.002068f, 0.003761f, -0.000315f, -0.006673f, -0.001898f, -0.000886f, -0.014054f, -0.000667f, 0.000801f, 0.010302f, -0.014780f, 0.000997f, -0.002500f, -0.005796f, -0.030409f, -0.003394f, 0.013974f, 0.011256f, 0.014325f, 0.001942f, -0.016464f, 0.043060f, 0.017749f, 0.029363f, 0.002783f, -0.012500f, -0.005345f, -0.003890f, -0.018426f, -0.000901f, -0.007386f, 0.009366f, -0.000204f, 0.001184f, -0.006076f, -0.007532f, - -0.015621f, 0.005416f, 0.001263f, 0.000992f, 0.007678f, -0.000421f, 0.003116f, -0.001300f, -0.013606f, -0.010137f, 0.007828f, 0.000278f, 0.019197f, -0.024351f, 0.019423f, 0.012295f, -0.008927f, -0.017547f, -0.028008f, 0.006095f, 0.021661f, -0.010991f, 0.020959f, -0.001443f, -0.001195f, 0.005094f, -0.006475f, -0.024421f, 0.002709f, 0.011866f, 0.004947f, -0.010487f, -0.003050f, -0.006500f, 0.005202f, 0.012162f, -0.000874f, 0.003262f, -0.001870f, 0.011714f, -0.005401f, -0.003721f, 0.007601f, -0.006602f, 0.017856f, -0.004634f, -0.009422f, 0.006934f, -0.016644f, -0.008163f, -0.000112f, 0.006685f, -0.007356f, 0.003244f, -0.002837f, 0.003805f, -0.000130f, 0.004482f, 0.003473f, -0.001275f, 0.001974f, -0.007586f, 0.003960f, -0.000881f, -0.010746f, -0.003473f, -0.003227f, -0.006147f, -0.000255f, 0.001997f, -0.005162f, -0.003351f, -0.000485f, -0.006495f, 0.000224f, 0.001856f, -0.001705f, -0.006891f, 0.000372f, 0.000039f, -0.005577f, 0.002332f, 0.003679f, -0.004192f, -0.000536f, 0.001397f, 0.000168f, 0.002179f, 0.005961f, 0.005295f, -0.005589f, -0.004162f, 0.006931f, 0.004673f, -0.033038f, 0.023607f, - 0.021468f, 0.025141f, -0.008069f, -0.022614f, 0.007940f, 0.008946f, -0.033628f, -0.030715f, 0.029689f, 0.003135f, -0.014474f, 0.011117f, -0.021013f, -0.024024f, 0.003418f, 0.062172f, 0.028929f, 0.011445f, -0.016921f, 0.000161f, -0.006037f, 0.000370f, -0.007108f, -0.003586f, -0.007897f, 0.002118f, 0.017722f, 0.003390f, 0.021850f, -0.008790f, -0.007261f, 0.003872f, 0.015260f, -0.003054f, -0.002224f, -0.032705f, -0.001408f, -0.018481f, -0.001004f, 0.025114f, 0.017990f, -0.006819f, 0.017581f, 0.034900f, -0.016718f, 0.009976f, 0.028998f, -0.021468f, 0.030649f, -0.002708f, 0.012588f, -0.007428f, 0.001260f, -0.004302f, 0.004225f, 0.006955f, 0.030396f, -0.011823f, -0.003878f, 0.007753f, -0.014222f, 0.008785f, 0.004661f, -0.008330f, -0.013862f, 0.029811f, -0.002029f, -0.016632f, -0.005488f, 0.018419f, -0.007865f, 0.012446f, -0.000129f, 0.000732f, -0.019823f, -0.021709f, -0.010405f, -0.018545f, -0.016649f, -0.018175f, -0.001144f, -0.004472f, 0.008709f, -0.001316f, 0.001536f, -0.001829f, 0.010969f, 0.006823f, 0.000744f, -0.013833f, 0.000458f, -0.002748f, -0.010195f, -0.003096f, -0.005274f, 0.005133f, - 0.001982f, -0.007136f, -0.002373f, -0.005521f, -0.004225f, -0.000696f, 0.003753f, 0.003512f, 0.003837f, 0.006466f, -0.004164f, 0.000635f, 0.004128f, -0.003119f, -0.004064f, 0.004687f, -0.006975f, -0.002938f, -0.002195f, 0.002871f, 0.001246f, 0.004743f, 0.000785f, 0.000282f, 0.004005f, -0.002093f, -0.004851f, 0.040271f, 0.007376f, 0.005580f, -0.020899f, -0.012316f, 0.001180f, 0.004524f, 0.008297f, 0.009243f, -0.039966f, 0.001677f, 0.002642f, 0.028816f, 0.004741f, 0.007230f, -0.002646f, 0.026200f, -0.042936f, 0.001185f, 0.022148f, -0.025778f, 0.006513f, 0.004886f, 0.020858f, 0.003940f, 0.002306f, -0.007192f, 0.000761f, -0.022158f, 0.007548f, -0.005644f, 0.003989f, 0.005840f, -0.003684f, -0.016847f, 0.006196f, -0.013331f, -0.022852f, 0.012796f, -0.012889f, 0.008364f, -0.021486f, -0.013749f, -0.002209f, -0.006844f, 0.005218f, -0.009321f, 0.023702f, -0.000433f, 0.022601f, -0.023953f, -0.020051f, -0.006615f, 0.000389f, -0.000560f, -0.006939f, 0.020118f, 0.016616f, 0.042138f, -0.006742f, 0.026892f, -0.015808f, -0.002885f, 0.008201f, -0.032281f, 0.036687f, -0.001154f, 0.022855f, -0.001075f, - -0.031958f, -0.019462f, 0.013502f, -0.042999f, 0.022328f, 0.005975f, 0.032576f, 0.040843f, 0.005363f, -0.030599f, -0.022985f, -0.009672f, 0.023388f, -0.003045f, -0.005642f, 0.001096f, -0.008552f, 0.001043f, -0.006259f, -0.009422f, -0.003179f, -0.015037f, -0.000724f, 0.000453f, -0.006879f, -0.006406f, -0.008399f, -0.006210f, -0.002887f, 0.003496f, 0.007125f, 0.002417f, -0.001199f, 0.006277f, -0.004491f, -0.002736f, 0.001497f, 0.003198f, 0.004138f, -0.004421f, 0.005239f, -0.005687f, -0.002584f, -0.008187f, -0.013886f, 0.008297f, 0.001437f, -0.008143f, -0.007979f, -0.001801f, -0.011047f, 0.001214f, 0.000051f, -0.003947f, 0.008051f, 0.020652f, 0.031635f, 0.011003f, -0.013227f, 0.030098f, -0.032367f, -0.003399f, -0.010023f, 0.003947f, 0.025650f, -0.023362f, 0.057948f, 0.007638f, 0.014252f, -0.017180f, -0.023568f, 0.008021f, 0.000048f, 0.049247f, -0.007235f, -0.017183f, -0.028365f, -0.019111f, 0.013577f, 0.008713f, 0.007863f, -0.003675f, -0.027944f, -0.042930f, 0.003019f, -0.025935f, 0.034137f, 0.004345f, 0.027680f, -0.017370f, 0.011451f, -0.011291f, 0.014235f, 0.040114f, -0.006906f, -0.004421f, - -0.006308f, 0.010349f, 0.013158f, 0.006716f, 0.002714f, 0.003982f, 0.017235f, 0.015535f, -0.009304f, -0.014010f, -0.012693f, -0.014037f, 0.045781f, 0.017982f, -0.027278f, 0.020616f, -0.006420f, -0.022310f, -0.016142f, 0.007913f, 0.016565f, -0.031725f, -0.041403f, 0.004357f, -0.018660f, 0.053754f, 0.027743f, -0.009521f, -0.006455f, 0.011182f, 0.024030f, 0.005969f, -0.004460f, -0.007451f, -0.037608f, -0.002029f, -0.009468f, -0.040757f, 0.014981f, 0.025186f, -0.004490f, 0.012458f, 0.006705f, 0.025677f, -0.014650f, -0.004164f, 0.008964f, -0.004390f, -0.012111f, -0.013596f, -0.000742f, -0.008356f, -0.020136f, -0.004433f, -0.009498f, 0.008223f, -0.004240f, -0.011287f, 0.007147f, 0.002626f, 0.000669f, -0.007160f, 0.007113f, 0.001662f, -0.012832f, 0.003887f, 0.004483f, -0.006221f, -0.017665f, -0.008922f, -0.003612f, -0.002315f, -0.000684f, -0.006960f, -0.001340f, -0.005296f, 0.001899f, 0.001551f, -0.003876f, 0.000288f, -0.000766f, -0.005660f, -0.011181f, -0.001931f, 0.001761f, 0.005666f, 0.002604f, -0.008600f, -0.000217f, 0.005715f, 0.002311f, 0.002188f, -0.008918f, 0.002598f, -0.003756f, -0.004320f, - -0.004750f, -0.005326f, 0.000468f, -0.000104f, -0.005762f, 0.002579f, -0.015789f, -0.025030f, 0.014183f, -0.007970f, 0.021761f, 0.010638f, -0.024514f, -0.009645f, -0.012622f, 0.005683f, -0.032862f, 0.022461f, 0.030247f, -0.011990f, 0.018706f, -0.004148f, -0.008876f, 0.015440f, -0.023143f, 0.014646f, 0.024497f, 0.007390f, 0.042562f, 0.021410f, -0.018424f, 0.018913f, 0.007388f, 0.016687f, 0.000336f, 0.023667f, 0.019694f, 0.031524f, 0.011268f, -0.011601f, -0.014937f, -0.018661f, -0.002231f, 0.048611f, 0.000627f, 0.020867f, -0.030667f, 0.063342f, -0.019031f, -0.048705f, -0.023670f, 0.040187f, 0.002746f, -0.005000f, -0.005828f, -0.002384f, 0.029164f, -0.021185f, 0.016728f, -0.003890f, 0.036827f, 0.057367f, 0.028878f, 0.027930f, -0.020587f, 0.032849f, 0.019161f, 0.019724f, 0.021602f, 0.032849f, -0.007104f, -0.055923f, -0.036585f, -0.040485f, 0.010270f, 0.015132f, 0.011339f, -0.008993f, 0.018728f, 0.050365f, 0.003132f, 0.004396f, 0.011789f, -0.002268f, -0.044082f, -0.046504f, -0.016446f, 0.009875f, 0.004661f, -0.001473f, -0.027245f, 0.007375f, 0.000984f, 0.002753f, 0.013778f, -0.002580f, - 0.008637f, 0.003614f, 0.017092f, -0.003849f, 0.011304f, -0.008676f, 0.001754f, 0.002370f, 0.019896f, 0.009831f, 0.019862f, 0.002820f, 0.009958f, -0.003069f, 0.001951f, 0.009200f, -0.005911f, -0.012596f, 0.002714f, -0.007288f, -0.015121f, -0.011129f, -0.003540f, -0.002657f, 0.019384f, 0.004670f, -0.000356f, -0.005437f, 0.002777f, 0.000655f, -0.007401f, -0.007505f, -0.006193f, 0.005012f, 0.012289f, -0.001041f, 0.000874f, 0.002141f, 0.005360f, 0.004527f, 0.013120f, -0.012945f, 0.008235f, 0.020752f, 0.024374f, 0.008807f, 0.011449f, 0.018977f, -0.014955f, 0.044136f, 0.017416f, 0.008527f, -0.012593f, -0.033867f, -0.013656f, 0.018464f, -0.001836f, -0.047994f, 0.064622f, -0.022701f, -0.012658f, 0.019902f, 0.000983f, -0.006460f, 0.004688f, -0.012557f, -0.015165f, -0.003325f, -0.035153f, 0.008680f, -0.037776f, 0.001028f, -0.029946f, -0.033745f, -0.006759f, -0.007197f, -0.007391f, -0.024695f, 0.010832f, 0.026386f, 0.007090f, 0.020196f, -0.035058f, 0.034548f, 0.063015f, 0.006490f, -0.025292f, 0.039329f, -0.032277f, -0.051188f, 0.085172f, -0.008775f, 0.006057f, -0.005970f, -0.038069f, 0.029336f, - -0.034509f, 0.014897f, 0.052050f, -0.001090f, 0.071485f, -0.055826f, 0.053857f, 0.015636f, -0.035347f, -0.018591f, 0.006769f, -0.034046f, -0.016915f, 0.037799f, -0.037106f, 0.024590f, -0.024943f, 0.013613f, 0.039583f, -0.086915f, -0.038244f, 0.039918f, -0.074500f, 0.026263f, 0.023148f, 0.042554f, 0.037741f, 0.016890f, -0.002989f, 0.024937f, 0.037442f, -0.040700f, 0.040626f, -0.000852f, 0.014092f, -0.002239f, 0.012788f, 0.003187f, -0.007658f, 0.002693f, -0.011720f, -0.003979f, 0.003114f, -0.002217f, -0.020358f, 0.012744f, -0.003527f, 0.016632f, 0.010117f, -0.014600f, 0.011516f, 0.013847f, 0.010258f, 0.004065f, 0.007376f, 0.004237f, 0.009378f, -0.028534f, 0.016035f, -0.003878f, -0.007612f, 0.019990f, -0.016051f, -0.013343f, 0.006934f, -0.016949f, -0.013500f, -0.005511f, -0.012271f, -0.016622f, 0.009248f, -0.025141f, -0.074580f, -0.019554f, 0.024581f, 0.057547f, -0.018262f, 0.028999f, 0.000900f, 0.013636f, 0.029968f, 0.019225f, 0.051827f, -0.013493f, 0.002285f, 0.014099f, -0.045746f, -0.029588f, -0.013584f, -0.014937f, 0.010619f, 0.000669f, 0.003957f, -0.023999f, -0.003882f, -0.031736f, - -0.025645f, 0.012254f, 0.063969f, 0.036652f, -0.016733f, -0.020567f, 0.030522f, 0.036376f, -0.021668f, 0.009518f, 0.028143f, -0.011235f, 0.061185f, 0.020685f, 0.009042f, -0.047267f, 0.029156f, 0.005866f, 0.022987f, -0.004954f, 0.005979f, -0.007897f, -0.010100f, -0.074467f, 0.019770f, 0.051305f, 0.025463f, 0.006766f, -0.001382f, 0.025815f, -0.041765f, -0.077359f, 0.005803f, 0.102296f, 0.024702f, 0.081129f, 0.077088f, 0.000908f, 0.006779f, -0.049109f, -0.043827f, -0.004800f, -0.037590f, 0.051175f, -0.111740f, 0.021007f, -0.041830f, -0.089401f, 0.019890f, 0.041678f, 0.089316f, 0.007891f, 0.004513f, -0.057000f, 0.018634f, 0.026760f, -0.039717f, -0.003828f, 0.002864f, 0.041598f, -0.011134f, -0.026725f, 0.063194f, 0.013256f, -0.022521f, -0.000920f, -0.036504f, 0.004717f, -0.034549f, -0.007087f, -0.001143f, -0.017011f, 0.005309f, -0.013760f, -0.014456f, -0.008028f, -0.000106f, -0.007000f, 0.011741f, 0.032637f, -0.001801f, 0.000294f, 0.012251f, -0.029709f, -0.017855f, -0.003644f, 0.009021f, 0.009292f, -0.025745f, -0.014674f, 0.020549f, 0.012011f, 0.007196f, 0.004876f, 0.021705f, -0.000881f, - 0.000442f, 0.002172f, -0.014539f, 0.002597f, 0.020765f, -0.010614f, -0.019716f, 0.054789f, 0.095230f, 0.002665f, 0.025907f, 0.017384f, -0.050285f, -0.014029f, 0.049854f, 0.015950f, 0.021896f, -0.012356f, 0.014383f, 0.008714f, -0.017882f, 0.000981f, 0.025796f, 0.027699f, 0.033380f, -0.014625f, -0.004283f, -0.073912f, -0.069683f, 0.009783f, -0.043146f, 0.001682f, 0.037125f, 0.009220f, 0.004274f, -0.012680f, -0.008474f, 0.024116f, 0.058191f, -0.042197f, -0.024510f, -0.005343f, -0.041378f, -0.002813f, -0.039888f, -0.012157f, -0.042337f, 0.037443f, -0.051268f, -0.003971f, 0.009023f, 0.024943f, 0.089164f, 0.119328f, 0.030675f, -0.031137f, -0.063739f, -0.005421f, -0.043657f, -0.016877f, -0.067784f, 0.010305f, 0.065002f, 0.048278f, 0.038936f, 0.004897f, 0.009296f, 0.066984f, 0.064683f, 0.047858f, -0.004086f, 0.030280f, 0.010927f, 0.015062f, -0.077085f, 0.023390f, 0.008326f, -0.017539f, 0.046182f, 0.063158f, -0.008941f, -0.000869f, -0.031111f, -0.131181f, -0.002736f, 0.039059f, -0.019283f, 0.091149f, 0.064408f, -0.029827f, 0.005813f, -0.033275f, 0.022420f, 0.006487f, -0.012395f, -0.019826f, - -0.009357f, -0.001648f, 0.013916f, 0.017797f, 0.026690f, 0.000978f, -0.016422f, -0.034808f, 0.001815f, -0.016295f, 0.013149f, -0.015360f, -0.021592f, -0.005082f, -0.005775f, 0.016107f, 0.006410f, -0.005762f, 0.008110f, 0.004853f, 0.006385f, 0.001824f, -0.012387f, -0.019084f, -0.010049f, 0.007584f, 0.015968f, -0.001121f, 0.012973f, 0.000129f, -0.019652f, -0.019878f, 0.005364f, -0.024385f, -0.014168f, 0.000377f, -0.011120f, -0.002689f, 0.006682f, 0.010471f, -0.009486f, -0.016318f, -0.023567f, 0.059823f, 0.042078f, -0.027988f, 0.028395f, 0.044539f, 0.004665f, -0.054984f, -0.066385f, 0.062087f, 0.020703f, 0.014656f, 0.048289f, 0.001464f, -0.021452f, 0.052542f, 0.013458f, -0.039171f, -0.020357f, -0.013944f, 0.017331f, 0.001504f, -0.023959f, 0.009571f, -0.026471f, -0.002219f, -0.012078f, -0.012333f, 0.035285f, 0.066656f, -0.022786f, 0.014171f, 0.030982f, -0.015077f, -0.013550f, 0.013246f, 0.037493f, 0.012516f, -0.029159f, -0.036187f, -0.044306f, 0.024132f, 0.024663f, 0.060592f, -0.028671f, -0.026516f, 0.020931f, 0.036306f, 0.055869f, -0.001098f, -0.103980f, -0.021723f, 0.033313f, 0.033893f, - 0.014872f, -0.019762f, -0.000924f, -0.040995f, 0.006096f, -0.017415f, 0.043017f, 0.062395f, -0.018839f, 0.001906f, -0.036365f, -0.038701f, -0.015287f, -0.078938f, -0.016129f, -0.039846f, 0.035126f, -0.031766f, 0.036447f, 0.045961f, -0.092129f, -0.007074f, -0.039049f, 0.040033f, -0.016333f, 0.014529f, -0.028733f, 0.005313f, -0.024491f, 0.027803f, 0.030127f, 0.052873f, 0.050289f, 0.025647f, 0.048383f, 0.023195f, 0.002777f, 0.026353f, 0.016391f, -0.006522f, 0.021483f, -0.023253f, 0.011458f, -0.011522f, 0.009907f, -0.029473f, 0.017816f, 0.000921f, 0.014089f, -0.021476f, -0.012760f, 0.015247f, -0.005925f, -0.006649f, 0.025919f, -0.019667f, -0.004821f, 0.021924f, 0.010304f, -0.013303f, -0.004588f, 0.009468f, 0.047930f, 0.026696f, 0.020832f, 0.029226f, 0.001809f, 0.031713f, 0.010260f, 0.010363f, 0.015983f, 0.000976f, 0.025720f, 0.008142f, -0.044564f, -0.019766f, -0.011994f, -0.014298f, 0.005540f, -0.008691f, -0.021447f, -0.030580f, -0.049516f, -0.011720f, -0.027378f, -0.051037f, -0.076109f, 0.036998f, 0.039983f, 0.022933f, -0.050740f, -0.069989f, -0.053050f, -0.030720f, 0.012898f, -0.002711f, - -0.067397f, -0.040872f, -0.046080f, 0.065348f, 0.020823f, 0.028240f, -0.020347f, -0.037831f, 0.083702f, 0.020214f, 0.026340f, -0.016352f, 0.005272f, 0.024241f, -0.016720f, 0.019187f, -0.005816f, 0.039370f, 0.056492f, 0.002092f, -0.045013f, -0.036763f, 0.044807f, 0.030123f, 0.039285f, 0.010905f, 0.010081f, -0.020443f, -0.008509f, 0.006102f, 0.027530f, 0.058503f, -0.000206f, -0.110095f, -0.101460f, 0.001154f, -0.024580f, 0.065562f, 0.067290f, -0.074851f, -0.050092f, -0.031639f, 0.093066f, 0.082388f, -0.044521f, 0.012937f, -0.058391f, -0.056790f, 0.034712f, -0.026259f, 0.000625f, -0.008923f, -0.040445f, 0.028844f, 0.030126f, 0.023530f, 0.094235f, -0.069098f, -0.018269f, -0.006595f, 0.024351f, 0.007442f, 0.038918f, -0.137722f, -0.079680f, 0.028593f, 0.043404f, 0.042436f, 0.012342f, -0.045569f, -0.046174f, 0.000657f, 0.027675f, 0.079352f, 0.019553f, -0.026587f, 0.008365f, -0.051592f, 0.032143f, 0.027689f, 0.001813f, 0.044405f, 0.095607f, 0.022799f, -0.069864f, -0.036834f, -0.004809f, 0.007948f, 0.046225f, 0.039959f, 0.019115f, -0.021193f, -0.008483f, -0.014628f, -0.016451f, 0.041410f, - -0.004802f, 0.003723f, -0.016460f, 0.040153f, -0.018607f, -0.007842f, -0.001002f, 0.034832f, 0.015346f, 0.012331f, -0.007370f, -0.044030f, -0.015718f, 0.014176f, 0.035047f, 0.005946f, -0.048776f, -0.067747f, -0.056414f, -0.001467f, 0.008158f, 0.010315f, 0.006744f, -0.018579f, -0.014048f, 0.092221f, -0.061276f, 0.057599f, 0.057154f, 0.036743f, -0.133520f, -0.053431f, 0.044645f, -0.036126f, 0.025811f, -0.009381f, -0.055484f, 0.035650f, 0.010638f, 0.010735f, -0.024548f, -0.088198f, -0.008418f, -0.002535f, 0.000296f, -0.012451f, -0.064413f, 0.048288f, -0.039818f, 0.082355f, -0.008714f, -0.007019f, 0.040000f, 0.029979f, -0.039333f, -0.003475f, -0.029783f, 0.044088f, 0.069140f, 0.052826f, -0.058384f, 0.013258f, -0.039082f, 0.035383f, -0.033951f, -0.013745f, 0.005738f, -0.002790f, 0.037564f, -0.034356f, -0.081052f, 0.021024f, -0.029012f, 0.030444f, 0.031563f, -0.102344f, -0.017433f, -0.019364f, 0.003711f, 0.113736f, -0.030646f, -0.082434f, -0.021989f, 0.072366f, 0.034616f, -0.044547f, -0.014719f, 0.044972f, -0.000221f, 0.055477f, -0.083166f, -0.043698f, 0.049991f, -0.051971f, -0.126784f, -0.037175f, - -0.017315f, 0.144862f, -0.039501f, -0.074505f, 0.039721f, -0.085982f, 0.227393f, 0.021768f, -0.211347f, -0.056027f, -0.037358f, 0.150227f, 0.081151f, -0.094048f, -0.049818f, -0.000978f, 0.110800f, 0.088646f, -0.013835f, -0.069247f, 0.027187f, -0.023253f, 0.099918f, -0.009414f, -0.050271f, -0.041307f, 0.065432f, -0.052139f, 0.033875f, -0.100087f, -0.000519f, -0.003560f, -0.005916f, -0.005603f, 0.021026f, -0.055269f, 0.053734f, 0.004766f, 0.039390f, 0.001901f, -0.063465f, -0.048378f, 0.036024f, 0.043038f, 0.067029f, 0.025375f, -0.006930f, -0.043487f, 0.005755f, 0.011238f, -0.011659f, 0.003213f, 0.043898f, 0.007194f, -0.002179f, -0.049772f, 0.009547f, 0.035961f, 0.013057f, 0.001828f, -0.014760f, -0.035685f, -0.039613f, -0.018379f, 0.012095f, -0.011693f, 0.017510f, -0.016509f, -0.010076f, 0.006794f, 0.001318f, 0.000530f, -0.122044f, 0.034196f, -0.001911f, 0.041683f, 0.100987f, 0.032328f, 0.013938f, -0.056929f, -0.023572f, -0.056893f, -0.068070f, -0.022835f, 0.013426f, 0.038907f, 0.051550f, -0.005795f, 0.029998f, 0.036274f, -0.031573f, -0.064107f, 0.033988f, 0.012178f, -0.052046f, -0.017724f, - 0.049514f, -0.016859f, -0.005504f, 0.045254f, 0.025414f, 0.020105f, 0.006339f, 0.025717f, -0.024602f, -0.059552f, -0.025854f, 0.016941f, -0.024358f, -0.014092f, 0.021842f, 0.001440f, -0.041897f, 0.043688f, 0.009475f, -0.038858f, 0.005016f, -0.009396f, 0.037657f, 0.020918f, -0.015140f, 0.017647f, -0.023145f, -0.052209f, 0.007038f, 0.012679f, -0.004697f, 0.000101f, 0.011090f, -0.022821f, 0.007259f, -0.019544f, 0.011772f, 0.037211f, -0.003894f, 0.016252f, 0.017275f, -0.014421f, 0.000991f, -0.035558f, 0.012223f, 0.020937f, -0.064507f, 0.037465f, -0.040206f, 0.012677f, 0.001941f, -0.000211f, 0.017867f, 0.007182f, 0.042223f, 0.007667f, 0.011995f, -0.006116f, 0.021643f, -0.022686f, -0.014838f, 0.005196f, 0.003695f, -0.019855f, 0.007227f, -0.001797f, -0.005682f, -0.011480f, 0.004177f, -0.002286f, 0.022900f, -0.005873f, 0.002812f, 0.016307f, -0.011375f, 0.011322f, -0.006972f, 0.003955f, -0.011379f, -0.010034f, -0.011363f, -0.003040f, -0.005058f, 0.008599f, 0.006253f, -0.026766f, -0.007214f, -0.007841f, 0.018717f, -0.011063f, 0.007063f, 0.003169f, -0.029682f, 0.009881f, 0.019438f, 0.001240f, - -0.007152f, 0.003194f, -0.008647f, -0.004443f, 0.006522f, 0.098913f, -0.003678f, -0.003216f, -0.027527f, -0.026925f, 0.020260f, -0.001134f, 0.017524f, 0.000365f, -0.009752f, -0.013011f, 0.006602f, -0.018237f, 0.018442f, -0.017177f, 0.026913f, -0.021822f, 0.015636f, -0.018471f, -0.004231f, -0.002963f, -0.017335f, -0.013153f, 0.003777f, -0.007766f, -0.005559f, -0.000128f, -0.013073f, 0.001714f, -0.002700f, 0.004125f, -0.003177f, 0.007546f, -0.026096f, 0.023637f, -0.009027f, -0.007764f, 0.017781f, -0.014403f, 0.000814f, -0.017987f, -0.015887f, 0.011432f, 0.009939f, -0.012651f, -0.008318f, 0.005060f, -0.000978f, -0.022006f, 0.005459f, 0.003833f, -0.000189f, 0.014397f, -0.005530f, -0.006238f, -0.006107f, -0.015047f, -0.004268f, 0.015703f, -0.016937f, 0.004270f, -0.008314f, -0.002107f, 0.000874f, -0.005141f, 0.003489f, 0.000042f, 0.010798f, -0.016053f, -0.001595f, 0.010274f, -0.020874f, 0.011976f, -0.009526f, 0.000076f, 0.009214f, -0.004645f, -0.009643f, 0.004191f, -0.001903f, -0.002773f, -0.000936f, -0.006799f, -0.000411f, 0.006899f, -0.000705f, -0.003364f, 0.000968f, -0.005913f, 0.003771f, 0.002851f, - 0.001455f, -0.004800f, -0.001677f, 0.005949f, -0.008003f, 0.007612f, -0.003813f, 0.003250f, 0.008297f, -0.010440f, 0.002178f, 0.000581f, -0.013324f, 0.002251f, -0.004452f, 0.005244f, -0.002154f, 0.000265f, 0.007584f, -0.005339f, 0.001199f, -0.008525f, 0.001118f, 0.001068f, -0.002423f, -0.002171f, -0.001343f, -0.003175f, 0.000250f, -0.001685f, -0.000006f, 0.005651f, -0.008852f, 0.003552f, -0.046718f, -0.078058f, 0.028755f, 0.251287f, 0.062478f, 0.138695f, -0.005774f, -0.134514f, -0.044121f, -0.132365f, -0.113689f, -0.039788f, -0.027669f, -0.008984f, 0.074822f, 0.101237f, 0.133113f, 0.168867f, 0.072416f, -0.042909f, -0.078456f, -0.165310f, -0.157762f, -0.063920f, -0.052964f, -0.034817f, 0.067632f, 0.092969f, 0.055048f, 0.086213f, 0.102722f, 0.035129f, 0.027896f, 0.019513f, -0.053806f, -0.024343f, -0.038639f, -0.083126f, -0.046396f, -0.061701f, -0.092179f, -0.049721f, 0.011001f, 0.010071f, 0.050907f, 0.124646f, 0.084728f, 0.071069f, 0.068636f, 0.021481f, 0.004732f, -0.006832f, -0.036180f, -0.050854f, -0.065036f, -0.092206f, -0.082099f, -0.045457f, -0.014699f, -0.030981f, 0.025431f, 0.048172f, - 0.040369f, 0.070515f, 0.077974f, 0.050542f, 0.045206f, 0.044781f, -0.007285f, -0.021589f, -0.011318f, -0.063511f, -0.053160f, -0.013260f, -0.052618f, -0.055682f, -0.035753f, -0.050059f, -0.024775f, 0.014630f, 0.031844f, 0.058439f, 0.092939f, 0.058092f, 0.053291f, 0.059572f, 0.021635f, -0.006800f, -0.011123f, -0.031595f, -0.052994f, -0.054455f, -0.052461f, -0.056956f, -0.040081f, -0.036349f, -0.030707f, -0.012281f, 0.014016f, 0.035627f, 0.054508f, 0.082948f, 0.086779f, 0.085135f, 0.071844f, 0.023098f, -0.019057f, -0.038374f, -0.062485f, -0.082100f, -0.093307f, -0.092630f, -0.073822f, -0.041205f, -0.010149f, 0.025811f, 0.076111f, 0.085197f, 0.084826f, 0.089374f, 0.073439f, 0.039003f, 0.012099f, -0.020602f, -0.059629f, -0.082858f, -0.073582f, -0.068357f, -0.054282f, -0.024880f, 0.002107f, 0.020619f, 0.040883f, 0.046778f, 0.045625f, 0.036722f, 0.016384f, 0.007980f, 0.002913f, -0.006332f, -0.007831f, -0.007419f, -0.010400f, -0.012437f, -0.009999f, -0.013731f, -0.009563f, -0.007421f, -0.005408f, -0.006306f, -0.002197f, -0.000322f, 0.003895f, 0.004775f, 0.008732f, 0.010604f, 0.012854f, 0.009509f, - 0.009774f, 0.006668f, 0.004226f, -0.001498f, -0.003267f, -0.007084f, -0.007613f, -0.010960f, -0.010185f, -0.010065f, -0.007179f, -0.006394f, -0.001993f, 0.000697f, 0.004086f, 0.005616f, 0.009966f, 0.009592f, 0.010472f, 0.008158f, 0.006601f, 0.002497f, 0.001888f, -0.001791f, -0.002930f, -0.007874f, -0.010436f, -0.011516f, -0.008284f, -0.007299f, -0.002287f, 0.000072f, 0.002587f, 0.003098f, 0.005986f, 0.005604f, 0.007960f, 0.006718f, 0.007071f, 0.004303f, 0.002941f, -0.001629f, -0.003050f, -0.006411f, -0.006187f, -0.007034f, -0.005322f, -0.005806f, -0.002861f, -0.001784f, 0.001871f, 0.003162f, 0.005841f, 0.004967f, 0.005887f, 0.003301f, 0.002803f, -0.000114f, -0.000650f, -0.002305f, -0.001220f, -0.002748f, -0.001584f, -0.002690f, -0.001058f, -0.001733f, 0.000030f, -0.000653f, 0.000992f, 0.000069f, 0.001362f, 0.000145f, 0.001240f, -0.000027f, 0.001049f, -0.000304f, 0.000746f, -0.000540f, 0.000651f, -0.000572f, 0.000618f, -0.000583f} - }, - { - {0.005683f, 0.005921f, -0.005343f, -0.000801f, 0.008186f, 0.002853f, -0.004421f, 0.001019f, -0.004871f, -0.004106f, -0.003522f, -0.007326f, -0.002709f, 0.004664f, -0.000488f, 0.002638f, -0.001378f, -0.001990f, -0.002186f, -0.000782f, 0.006139f, -0.003833f, 0.000269f, -0.000160f, 0.000153f, 0.005091f, -0.000285f, 0.003541f, 0.010773f, 0.008618f, 0.008422f, 0.004550f, 0.001819f, -0.001257f, -0.010192f, 0.004257f, -0.003879f, 0.006582f, 0.002172f, -0.003297f, 0.002921f, -0.004375f, -0.008850f, -0.002569f, -0.003494f, -0.008146f, 0.000233f, -0.000894f, -0.001301f, -0.003752f, 0.000407f, 0.008751f, 0.003707f, 0.005986f, -0.000210f, 0.003728f, -0.003492f, -0.000122f, 0.004394f, -0.003607f, 0.002904f, -0.004501f, -0.005038f, 0.000622f, 0.010040f, 0.006814f, 0.003781f, -0.001856f, 0.001579f, 0.001211f, 0.000469f, -0.001712f, -0.004020f, -0.005844f, -0.004445f, 0.000256f, -0.003823f, -0.001731f, -0.004107f, 0.001442f, 0.000489f, 0.002184f, -0.001296f, 0.001818f, 0.002280f, 0.002094f, 0.000138f, 0.001359f, -0.001037f, -0.000874f, -0.000152f, -0.002363f, 0.002497f, 0.002269f, -0.000372f, 0.002834f, - 0.000679f, 0.000665f, -0.001347f, -0.000654f, -0.001688f, 0.000640f, 0.000756f, 0.000090f, -0.000617f, 0.001056f, -0.000724f, -0.002186f, -0.000775f, -0.001424f, -0.000217f, 0.000570f, 0.000445f, -0.002296f, 0.000307f, 0.001653f, 0.003715f, 0.001927f, -0.006444f, 0.015210f, -0.000337f, 0.000931f, -0.001618f, -0.008013f, 0.005925f, -0.004173f, -0.004018f, -0.009338f, -0.007214f, -0.003016f, 0.005801f, 0.008366f, -0.001695f, 0.004956f, -0.001926f, 0.009077f, 0.009397f, -0.018749f, 0.003434f, 0.000108f, -0.001841f, 0.006370f, 0.009987f, -0.003061f, -0.001457f, 0.000224f, -0.000614f, -0.004746f, 0.003928f, -0.004784f, -0.003797f, -0.000364f, 0.005008f, -0.002805f, -0.010553f, -0.004665f, -0.007172f, 0.000869f, 0.000643f, -0.009341f, -0.001108f, -0.004059f, 0.001950f, -0.000247f, -0.001409f, 0.002337f, -0.003117f, 0.003214f, -0.005016f, 0.004964f, 0.007221f, 0.011115f, 0.004609f, -0.004801f, 0.003979f, 0.004689f, -0.001731f, -0.012498f, 0.000829f, 0.006574f, -0.005027f, 0.003812f, -0.007259f, -0.000035f, -0.004627f, -0.012691f, -0.003868f, -0.006612f, 0.003243f, 0.004788f, -0.004284f, 0.002084f, - -0.002005f, 0.006069f, 0.000488f, 0.003580f, 0.005055f, -0.002088f, 0.002097f, 0.001083f, 0.002145f, 0.004401f, -0.000998f, 0.001533f, 0.005440f, 0.003150f, 0.000748f, 0.003307f, 0.000597f, 0.001472f, -0.000210f, 0.000001f, -0.002929f, 0.001647f, 0.001878f, 0.002538f, 0.001696f, 0.000634f, 0.000808f, 0.000162f, 0.000952f, -0.000302f, -0.000809f, -0.000143f, 0.002012f, 0.001770f, 0.000533f, 0.001597f, 0.000373f, 0.001836f, 0.001512f, 0.012514f, 0.003333f, -0.016832f, 0.005932f, 0.008750f, 0.003097f, -0.001391f, 0.004338f, -0.010546f, 0.001429f, 0.004787f, -0.002451f, 0.004633f, -0.000795f, 0.005629f, 0.001269f, -0.007090f, 0.004436f, 0.006636f, 0.006407f, -0.001801f, 0.003026f, 0.003625f, 0.002390f, -0.019055f, 0.002621f, -0.008060f, -0.002477f, -0.002621f, 0.004406f, 0.002160f, -0.015684f, -0.005536f, -0.003563f, -0.002875f, 0.006291f, -0.005725f, -0.010991f, 0.002790f, 0.005009f, 0.003252f, -0.010933f, -0.005019f, 0.003430f, -0.010169f, -0.000883f, -0.011246f, 0.001614f, 0.005663f, -0.005865f, -0.001668f, 0.006443f, 0.008369f, -0.019329f, -0.001323f, -0.005401f, 0.005945f, - 0.002349f, 0.001067f, 0.001627f, -0.005322f, 0.004872f, 0.004356f, -0.015012f, 0.011613f, -0.001578f, 0.002942f, -0.007674f, -0.003084f, -0.006494f, -0.000693f, 0.001654f, -0.005882f, -0.008350f, 0.007502f, -0.002708f, 0.003160f, -0.000436f, -0.001388f, 0.002121f, 0.002626f, -0.003055f, -0.007580f, 0.004271f, 0.004005f, 0.000976f, 0.001924f, -0.000253f, 0.000703f, 0.001276f, 0.000062f, 0.001274f, 0.001018f, -0.000177f, 0.003085f, 0.000421f, 0.002394f, 0.002699f, 0.000280f, 0.003806f, 0.000024f, 0.000751f, 0.001153f, 0.001714f, 0.001498f, 0.001905f, -0.002714f, 0.001307f, -0.001160f, 0.000593f, 0.001395f, 0.000945f, 0.002371f, -0.000745f, -0.000539f, 0.001703f, 0.003200f, -0.007953f, -0.007795f, -0.006168f, -0.004188f, 0.012803f, -0.004581f, 0.001890f, -0.010431f, 0.011053f, 0.000563f, -0.007209f, -0.002107f, 0.006475f, -0.013307f, 0.004631f, -0.004042f, 0.003133f, 0.001960f, -0.005846f, -0.004432f, -0.015462f, -0.004369f, -0.017434f, 0.002121f, 0.004143f, -0.002048f, -0.002220f, -0.001767f, 0.002835f, -0.007049f, -0.012374f, -0.005990f, -0.004440f, -0.002094f, 0.004787f, -0.003047f, - 0.007653f, 0.003164f, 0.005908f, -0.007933f, -0.000258f, -0.000540f, -0.006324f, 0.001653f, 0.005310f, -0.000661f, -0.003061f, -0.007778f, -0.006869f, 0.004599f, 0.007290f, -0.000381f, 0.014255f, 0.011007f, -0.009889f, -0.002715f, 0.000215f, -0.010783f, -0.011977f, 0.018240f, -0.000109f, 0.000357f, 0.005959f, -0.011833f, -0.003651f, -0.007717f, 0.018353f, 0.004761f, 0.001139f, -0.014605f, -0.011285f, 0.001399f, -0.004534f, 0.009240f, -0.004616f, -0.000247f, 0.002774f, -0.005818f, 0.002262f, 0.005522f, -0.008303f, -0.000047f, -0.013361f, 0.001341f, 0.005315f, -0.004059f, 0.002192f, 0.001492f, 0.006864f, -0.001092f, 0.001283f, -0.001451f, -0.000041f, 0.002744f, 0.003177f, 0.002630f, -0.001829f, 0.000749f, 0.000089f, 0.001108f, 0.000317f, 0.001084f, -0.001754f, 0.004151f, 0.000268f, 0.001097f, 0.000881f, 0.001223f, 0.001241f, 0.001109f, -0.000904f, -0.001237f, -0.000726f, 0.000818f, 0.003117f, 0.003261f, 0.000848f, 0.001412f, -0.002542f, -0.001137f, -0.021142f, 0.010551f, 0.006091f, 0.010761f, -0.005733f, 0.005871f, 0.006285f, 0.011063f, 0.002718f, -0.021238f, 0.005375f, 0.000856f, - 0.008505f, 0.015317f, 0.000896f, 0.006622f, 0.005938f, -0.012737f, 0.004546f, 0.001123f, 0.001848f, -0.003498f, -0.001670f, 0.007822f, 0.005310f, 0.000272f, -0.007664f, -0.000141f, -0.003606f, -0.004063f, 0.012787f, 0.005818f, -0.000432f, -0.001743f, -0.015232f, -0.013196f, -0.014960f, 0.003966f, 0.004176f, -0.015654f, 0.001214f, 0.001018f, -0.015365f, 0.000935f, 0.002498f, -0.002106f, 0.017894f, -0.002229f, -0.008629f, -0.002235f, 0.010326f, -0.000880f, -0.015728f, 0.017182f, 0.009035f, -0.010986f, 0.008496f, 0.001637f, 0.001729f, -0.000315f, 0.001086f, -0.004283f, -0.007834f, -0.007557f, 0.013885f, -0.000941f, -0.003894f, -0.000665f, 0.010024f, -0.009193f, -0.016066f, 0.000558f, 0.003819f, 0.003016f, -0.014024f, -0.007352f, 0.005585f, -0.001292f, 0.008050f, 0.002999f, -0.002376f, -0.002382f, -0.002023f, -0.001139f, 0.000418f, 0.012566f, 0.007474f, 0.004537f, 0.004171f, 0.004852f, 0.007472f, -0.003507f, -0.001019f, -0.003973f, -0.001056f, 0.001390f, 0.000517f, -0.002198f, -0.003385f, 0.003697f, 0.000724f, 0.001668f, 0.000102f, -0.002258f, 0.000974f, 0.001958f, -0.004307f, -0.000753f, - 0.003752f, 0.000783f, 0.000385f, -0.001633f, -0.000317f, -0.001056f, -0.001763f, 0.000495f, 0.001999f, 0.001467f, -0.001124f, 0.001498f, 0.000317f, 0.006438f, 0.024440f, 0.007339f, 0.019590f, -0.021561f, 0.000775f, -0.010624f, 0.000289f, 0.007215f, 0.008214f, -0.011061f, 0.004792f, -0.006391f, -0.005751f, -0.007678f, -0.012609f, -0.001804f, -0.029620f, -0.000245f, 0.009698f, -0.001267f, -0.002076f, 0.003286f, -0.015573f, 0.005494f, -0.014855f, -0.004634f, 0.015164f, 0.003120f, 0.005189f, 0.000395f, 0.004414f, 0.013022f, 0.011682f, 0.022664f, 0.011685f, -0.017083f, -0.001499f, 0.019097f, -0.002743f, -0.013922f, -0.002196f, 0.001799f, -0.006451f, 0.012804f, 0.009392f, -0.010946f, -0.003283f, 0.012280f, 0.012963f, -0.004615f, -0.008366f, 0.020699f, -0.008597f, -0.027837f, -0.018909f, 0.006169f, -0.028109f, -0.000531f, -0.008471f, 0.000165f, -0.002682f, -0.007808f, 0.010419f, 0.003029f, -0.002824f, -0.009136f, 0.007935f, -0.005463f, 0.014780f, 0.010181f, -0.004145f, -0.009829f, 0.002032f, 0.003912f, 0.001299f, 0.000582f, 0.003429f, -0.002028f, -0.011013f, -0.003142f, 0.015128f, -0.001738f, - -0.006275f, -0.001622f, -0.003284f, -0.007841f, -0.007727f, -0.004214f, -0.003759f, 0.000925f, -0.000160f, 0.007644f, -0.000755f, -0.002727f, 0.000979f, 0.002747f, -0.001922f, 0.001612f, -0.002714f, 0.005202f, -0.000259f, 0.003202f, 0.000382f, -0.004965f, -0.000600f, -0.000522f, -0.005332f, -0.001394f, -0.003283f, 0.002403f, 0.000059f, -0.000789f, 0.001701f, 0.000826f, -0.000623f, 0.000952f, -0.005956f, 0.001290f, 0.001625f, -0.023812f, 0.011261f, -0.002024f, 0.005995f, 0.008003f, 0.012877f, 0.002983f, -0.011391f, 0.015515f, -0.005778f, 0.006952f, -0.006933f, 0.005806f, -0.001077f, -0.027988f, -0.005843f, -0.004720f, -0.003331f, 0.002005f, -0.006769f, -0.004553f, 0.003726f, 0.006243f, 0.002099f, 0.015246f, 0.006971f, -0.014577f, -0.001105f, 0.000114f, -0.008280f, 0.017528f, -0.010457f, -0.010004f, 0.018345f, 0.019428f, -0.002427f, -0.000145f, -0.012064f, 0.004424f, 0.002598f, -0.006201f, 0.003192f, 0.012062f, 0.007381f, 0.014489f, -0.003605f, -0.011237f, 0.007019f, 0.001761f, 0.003441f, -0.013410f, -0.007009f, -0.007848f, 0.003158f, 0.007796f, 0.002805f, 0.002142f, 0.013824f, 0.016670f, - 0.002455f, -0.007813f, 0.009423f, 0.007811f, -0.011722f, 0.001706f, 0.002005f, -0.001266f, 0.001341f, -0.000196f, 0.009882f, -0.001013f, -0.007766f, 0.004016f, 0.013034f, 0.005875f, 0.007640f, 0.016253f, -0.011066f, 0.002039f, -0.003787f, 0.015425f, 0.008765f, 0.016515f, -0.007953f, -0.002040f, 0.002701f, -0.005783f, 0.000820f, 0.001682f, -0.001904f, 0.000077f, 0.003774f, 0.004463f, -0.001691f, 0.002466f, 0.001668f, 0.005769f, 0.004993f, -0.000617f, -0.000469f, -0.002508f, 0.000685f, -0.002528f, 0.001317f, -0.004496f, 0.004465f, -0.000019f, -0.001797f, -0.000013f, -0.000432f, 0.000236f, -0.001657f, -0.003492f, 0.004967f, -0.000575f, 0.000778f, -0.005557f, -0.004658f, -0.001188f, 0.004765f, -0.000462f, -0.000574f, 0.000520f, -0.000618f, 0.009950f, -0.020707f, -0.012427f, 0.008268f, -0.004872f, -0.019341f, 0.009831f, -0.010110f, -0.008866f, 0.012514f, -0.003808f, -0.004114f, -0.003118f, 0.003244f, 0.009233f, 0.004825f, 0.004959f, 0.005140f, -0.007724f, -0.004586f, -0.001625f, 0.011276f, 0.005778f, -0.019767f, 0.006283f, 0.006192f, -0.008317f, 0.018638f, 0.017062f, 0.009213f, 0.000643f, - -0.006740f, -0.004400f, 0.001023f, -0.005824f, -0.006938f, -0.011482f, 0.001689f, -0.013108f, 0.009525f, 0.003634f, 0.000140f, 0.002054f, 0.005038f, 0.004321f, 0.010195f, 0.015855f, -0.005992f, -0.025163f, -0.004360f, -0.017142f, 0.005926f, 0.002356f, -0.022743f, 0.008246f, -0.009534f, 0.028576f, 0.009513f, -0.018022f, -0.000594f, 0.018177f, 0.009507f, -0.014924f, -0.008858f, 0.019017f, 0.010951f, -0.013225f, 0.016278f, -0.013573f, -0.017863f, 0.002757f, -0.027058f, 0.016334f, 0.017606f, -0.004044f, -0.016278f, -0.002934f, 0.006431f, 0.003305f, 0.002755f, 0.001633f, 0.012626f, -0.017717f, 0.005725f, 0.019715f, 0.000356f, 0.000673f, -0.017350f, 0.008639f, 0.004880f, -0.016050f, -0.003977f, -0.008107f, -0.003811f, 0.000625f, 0.005045f, 0.004009f, 0.000596f, -0.004837f, 0.000519f, -0.005183f, 0.002172f, 0.003072f, -0.000631f, -0.002513f, -0.001699f, 0.003151f, 0.001033f, -0.001025f, -0.002677f, -0.005177f, -0.000558f, -0.005055f, 0.010097f, -0.009447f, 0.000006f, -0.001013f, 0.003893f, 0.002590f, -0.005401f, 0.001643f, -0.001649f, 0.008546f, -0.001040f, 0.002405f, 0.000291f, -0.004938f, - 0.002050f, 0.001022f, -0.000582f, 0.005523f, -0.000087f, -0.016212f, -0.012025f, 0.000418f, -0.019531f, 0.000093f, -0.045886f, -0.014399f, -0.005294f, -0.025023f, -0.008797f, -0.005209f, -0.011008f, -0.008454f, 0.005965f, -0.012038f, -0.022951f, 0.006151f, 0.014380f, -0.023382f, -0.006489f, 0.007267f, 0.011750f, 0.020257f, 0.012893f, 0.011953f, 0.013052f, 0.004772f, 0.023140f, -0.013721f, -0.005898f, 0.004953f, -0.011455f, 0.004412f, 0.006560f, 0.012172f, 0.001595f, 0.019869f, 0.004166f, 0.004942f, 0.013685f, -0.005986f, -0.011723f, 0.000270f, -0.017975f, -0.011439f, -0.020747f, -0.000807f, -0.000943f, -0.027226f, 0.009854f, -0.012300f, 0.005600f, -0.025710f, 0.003102f, -0.019441f, 0.029124f, 0.001529f, -0.025923f, 0.031199f, 0.038156f, 0.010775f, -0.012759f, -0.009404f, 0.009921f, -0.003254f, -0.001233f, 0.011335f, -0.018184f, 0.011934f, -0.018779f, 0.010028f, -0.007469f, -0.010529f, 0.004515f, 0.010073f, -0.005405f, -0.000510f, 0.011773f, 0.003146f, -0.005763f, 0.006676f, -0.002870f, -0.010695f, 0.001447f, 0.010123f, -0.001899f, -0.003905f, 0.004030f, 0.002993f, 0.008227f, 0.001709f, - 0.000317f, 0.003600f, -0.002710f, 0.005782f, 0.001483f, 0.004802f, 0.001677f, 0.003830f, 0.003081f, 0.003138f, 0.002510f, -0.003433f, 0.003990f, -0.004643f, -0.004330f, 0.000501f, 0.002637f, 0.000923f, 0.001347f, 0.002908f, 0.001925f, 0.000294f, -0.001475f, -0.003472f, 0.000098f, -0.003654f, 0.010009f, -0.004867f, 0.009028f, 0.013631f, 0.001841f, 0.012591f, -0.007184f, 0.019599f, -0.015275f, -0.013948f, -0.037221f, -0.008099f, -0.019373f, -0.045092f, 0.011198f, -0.025946f, -0.015991f, -0.020895f, 0.005621f, -0.040612f, 0.010745f, 0.003446f, -0.007979f, -0.000791f, -0.011873f, -0.004027f, 0.009612f, -0.013773f, -0.010055f, 0.000643f, 0.007289f, -0.012038f, -0.001101f, 0.014032f, -0.022515f, -0.005074f, 0.012886f, -0.012314f, -0.000919f, 0.000211f, -0.003697f, 0.018989f, -0.016685f, 0.011314f, -0.007679f, 0.015461f, 0.016054f, -0.016410f, -0.022197f, 0.020710f, -0.002389f, 0.004582f, 0.005230f, 0.001943f, -0.004891f, 0.011701f, -0.006454f, -0.025398f, 0.006490f, 0.005279f, -0.022240f, -0.002380f, -0.008063f, 0.013358f, 0.015996f, 0.008085f, 0.002565f, -0.006270f, -0.015846f, 0.016139f, - 0.009768f, 0.014444f, -0.001145f, -0.022526f, -0.005445f, -0.003325f, -0.010027f, -0.005489f, -0.002792f, 0.006618f, 0.009920f, -0.008649f, -0.007576f, -0.022382f, -0.010818f, 0.004423f, 0.009121f, 0.002592f, -0.002052f, 0.010379f, 0.009556f, 0.005893f, 0.011768f, -0.003572f, 0.009200f, 0.004325f, 0.006251f, 0.001167f, -0.000054f, -0.006106f, -0.004863f, -0.001047f, 0.002882f, -0.001384f, -0.005394f, -0.006516f, -0.000334f, -0.000998f, 0.001277f, -0.004402f, 0.000955f, -0.005267f, 0.001581f, 0.009053f, 0.001933f, -0.005042f, -0.005365f, 0.011498f, 0.006409f, -0.001316f, -0.000768f, -0.014331f, -0.001707f, -0.000072f, -0.012285f, 0.000411f, -0.005020f, -0.003687f, 0.002845f, 0.003903f, 0.000863f, -0.001299f, -0.011248f, 0.055163f, 0.031694f, 0.002220f, -0.017580f, -0.041593f, -0.005185f, 0.019488f, -0.009232f, -0.016744f, -0.031363f, -0.001726f, -0.006849f, 0.001111f, -0.010827f, 0.010127f, -0.000278f, 0.027318f, 0.010688f, -0.011369f, -0.000913f, -0.004848f, 0.001959f, -0.005606f, 0.005533f, 0.016944f, -0.019928f, 0.003863f, -0.012052f, 0.007905f, -0.008617f, -0.014422f, -0.028350f, -0.002254f, - 0.016054f, 0.005447f, -0.003640f, 0.005992f, -0.002205f, 0.015447f, 0.024279f, -0.008482f, -0.005670f, -0.028227f, -0.030745f, 0.008498f, 0.004434f, -0.012928f, -0.011314f, -0.025416f, -0.017600f, 0.010108f, -0.003411f, 0.000074f, 0.001185f, -0.001943f, 0.011517f, 0.006679f, -0.021056f, 0.000904f, -0.019199f, -0.001634f, -0.010408f, -0.005901f, 0.020164f, 0.041821f, 0.068739f, 0.002622f, 0.022039f, -0.020746f, -0.026567f, -0.037151f, -0.002066f, -0.000099f, 0.007432f, 0.007908f, -0.005191f, -0.046969f, 0.019405f, -0.007960f, -0.006593f, 0.002987f, -0.012428f, 0.001449f, -0.006805f, -0.019116f, 0.000138f, -0.007632f, 0.000078f, 0.001944f, 0.000631f, 0.013630f, 0.001872f, 0.001585f, -0.000833f, 0.000599f, -0.000671f, 0.005876f, 0.012717f, 0.003830f, -0.000555f, 0.002781f, 0.011522f, 0.000359f, 0.000047f, 0.004417f, -0.003948f, 0.001488f, -0.010723f, 0.003681f, 0.005465f, -0.009939f, 0.010120f, 0.000666f, 0.000794f, -0.002906f, -0.011207f, -0.003527f, 0.004888f, 0.000108f, -0.001218f, -0.002715f, 0.006724f, -0.001857f, 0.000425f, 0.020132f, 0.033572f, -0.016605f, 0.000068f, 0.006449f, - -0.027372f, 0.000252f, -0.017670f, -0.017131f, 0.025796f, -0.007592f, -0.006469f, -0.013863f, 0.029625f, 0.026027f, -0.000002f, 0.042762f, 0.004817f, 0.013354f, 0.009417f, -0.011924f, -0.013961f, -0.022261f, -0.011718f, 0.005212f, 0.000212f, 0.019162f, 0.001496f, -0.002093f, -0.003487f, 0.013540f, -0.019570f, -0.047834f, -0.016767f, 0.014105f, 0.004426f, -0.003933f, -0.014249f, 0.000847f, -0.023011f, -0.003461f, -0.020964f, -0.001453f, -0.002624f, -0.014777f, 0.014162f, 0.007030f, 0.026899f, -0.022221f, 0.041668f, 0.011182f, -0.008105f, -0.014751f, -0.007571f, 0.006560f, 0.024038f, -0.007402f, 0.013754f, -0.021243f, 0.017165f, -0.019292f, -0.021703f, 0.021398f, -0.031041f, 0.020341f, 0.017097f, 0.033017f, -0.033621f, 0.025547f, -0.003187f, 0.022775f, 0.008900f, -0.035345f, -0.006180f, -0.008312f, 0.009857f, -0.018760f, 0.055636f, -0.002749f, -0.019637f, 0.007879f, 0.025715f, 0.017452f, 0.012047f, 0.013264f, -0.001752f, 0.006312f, -0.002272f, -0.007388f, -0.004689f, 0.001946f, -0.000243f, -0.007331f, 0.002104f, -0.002165f, -0.011281f, -0.002362f, -0.004306f, 0.004729f, 0.005955f, 0.003223f, - -0.001554f, 0.010965f, -0.001780f, 0.006060f, 0.002436f, 0.007752f, 0.002926f, -0.003947f, -0.004885f, 0.001311f, -0.000580f, 0.005336f, -0.002168f, 0.000491f, 0.004553f, -0.002778f, 0.007796f, -0.003708f, -0.004296f, 0.002150f, -0.003220f, 0.008110f, 0.002951f, -0.002413f, 0.004898f, 0.002401f, -0.023262f, -0.031192f, -0.063899f, -0.019615f, -0.037520f, 0.010461f, -0.001708f, -0.012780f, -0.018580f, -0.017686f, -0.015985f, -0.017322f, -0.016969f, 0.001784f, -0.013833f, -0.002489f, -0.030073f, -0.046147f, 0.056546f, -0.017616f, 0.030643f, -0.005853f, 0.007916f, 0.009766f, 0.016522f, 0.010898f, -0.002879f, -0.000923f, -0.024407f, -0.005517f, -0.005803f, -0.016412f, -0.025595f, 0.010005f, -0.002883f, 0.036197f, -0.025053f, 0.000671f, 0.050072f, -0.012061f, -0.041593f, -0.013413f, 0.001658f, -0.018848f, 0.029302f, 0.013471f, -0.016080f, 0.011893f, 0.015747f, -0.009692f, -0.000313f, 0.007921f, 0.019595f, -0.000720f, -0.019282f, -0.018979f, 0.023452f, 0.016772f, -0.012307f, -0.026705f, 0.017062f, 0.019743f, -0.017598f, -0.024027f, 0.016862f, -0.030473f, 0.058355f, 0.012564f, -0.004752f, 0.002393f, - 0.014286f, 0.003235f, -0.010256f, 0.000961f, 0.004210f, 0.020968f, -0.013729f, 0.004212f, -0.041437f, -0.037322f, -0.004155f, 0.002248f, -0.004054f, -0.018104f, 0.013216f, 0.030856f, -0.000838f, 0.007925f, -0.002871f, 0.006613f, 0.009351f, 0.011149f, -0.011892f, 0.013401f, -0.006149f, -0.003529f, 0.008895f, 0.016495f, -0.004826f, -0.016497f, 0.004750f, -0.001494f, 0.002799f, -0.001472f, -0.008820f, -0.002429f, -0.009115f, -0.005642f, -0.011259f, 0.011680f, 0.011970f, -0.007108f, 0.000039f, 0.014368f, 0.004602f, -0.006022f, 0.003061f, 0.017995f, 0.011866f, 0.012994f, 0.013110f, 0.011581f, 0.004354f, 0.016510f, 0.008758f, 0.006919f, 0.006188f, 0.015545f, -0.024191f, 0.000216f, 0.008767f, 0.007016f, -0.015877f, 0.038169f, 0.026678f, 0.054871f, 0.030104f, 0.020572f, 0.007834f, -0.047590f, -0.004012f, 0.006759f, -0.028247f, -0.007250f, 0.054018f, 0.004421f, -0.031412f, -0.030644f, 0.027968f, -0.042319f, -0.011102f, 0.002181f, 0.011376f, 0.005217f, -0.008159f, 0.014170f, -0.019266f, 0.000312f, -0.003910f, -0.011767f, -0.002680f, -0.008070f, -0.027830f, 0.015043f, -0.024113f, 0.014536f, - 0.012620f, 0.016869f, 0.003004f, 0.011328f, -0.010059f, 0.045416f, 0.006065f, -0.047341f, -0.041976f, 0.004306f, 0.018893f, 0.037033f, -0.012015f, -0.028225f, -0.012670f, -0.003313f, 0.004182f, 0.021978f, 0.004735f, -0.016427f, 0.049552f, -0.060136f, -0.010024f, 0.012027f, -0.042120f, -0.021306f, -0.011013f, 0.006805f, -0.068281f, -0.031803f, 0.049081f, -0.017971f, 0.014419f, -0.015314f, -0.055086f, -0.020284f, 0.026728f, -0.007530f, 0.010509f, 0.017552f, 0.035081f, -0.015998f, 0.004020f, -0.009784f, 0.022049f, 0.010574f, 0.009610f, 0.002062f, -0.000663f, 0.001246f, 0.019268f, 0.010454f, 0.011501f, -0.002267f, -0.000183f, 0.007747f, -0.012513f, -0.010998f, 0.005362f, 0.022766f, 0.010639f, 0.009291f, -0.021228f, 0.013408f, 0.040623f, 0.000541f, -0.000105f, -0.014722f, 0.011268f, 0.002553f, -0.009015f, -0.011792f, 0.002071f, 0.012719f, 0.014394f, 0.010910f, -0.012064f, 0.009182f, -0.007940f, 0.010327f, -0.015628f, -0.008042f, -0.002787f, -0.007646f, -0.009981f, -0.002358f, -0.025673f, -0.024016f, 0.004599f, -0.000936f, -0.003578f, 0.009724f, 0.000246f, -0.001530f, 0.000807f, 0.010545f, - 0.009289f, 0.003740f, 0.000141f, 0.005194f, 0.005944f, 0.004553f, 0.007133f, -0.001814f, 0.009709f, 0.027133f, -0.011271f, -0.088868f, -0.022226f, 0.004291f, 0.025207f, 0.023457f, 0.022429f, 0.021385f, 0.040251f, 0.070785f, -0.040362f, 0.029261f, -0.009801f, -0.001971f, -0.009945f, -0.059359f, -0.043279f, -0.009032f, -0.002065f, 0.011907f, 0.023602f, 0.029411f, -0.008866f, -0.001696f, -0.014887f, -0.000572f, -0.002154f, -0.001001f, 0.031682f, 0.015910f, 0.011000f, 0.023174f, 0.028921f, -0.050291f, 0.025241f, -0.029523f, -0.035907f, -0.011526f, 0.024286f, 0.006084f, -0.024020f, 0.007446f, 0.003687f, 0.016958f, -0.000986f, -0.048899f, -0.033814f, -0.040676f, -0.039060f, 0.004485f, 0.033667f, -0.006902f, 0.120090f, -0.078780f, -0.058079f, 0.035193f, -0.009761f, -0.024700f, -0.007301f, -0.007302f, 0.002084f, -0.073872f, 0.008499f, -0.006159f, 0.010844f, 0.055081f, -0.003098f, 0.018726f, 0.022420f, 0.025824f, 0.092674f, -0.034946f, 0.116976f, 0.031454f, -0.002300f, 0.014430f, 0.007534f, -0.048570f, -0.041406f, -0.001629f, -0.009484f, 0.005097f, 0.018845f, 0.013404f, -0.007360f, -0.041775f, - -0.032808f, 0.012631f, -0.021829f, 0.013948f, 0.017109f, 0.035376f, 0.036098f, 0.031387f, 0.007204f, 0.010402f, 0.000454f, -0.002422f, 0.024710f, -0.004755f, -0.001134f, 0.006787f, -0.033429f, -0.009000f, 0.015496f, -0.000832f, -0.002493f, 0.021114f, 0.009296f, -0.032831f, 0.023103f, -0.018713f, -0.023971f, -0.014748f, -0.006703f, 0.005415f, 0.011464f, 0.010106f, -0.012271f, 0.014962f, 0.007732f, 0.009348f, 0.005539f, 0.012561f, -0.004382f, 0.007290f, -0.019580f, -0.005102f, -0.010208f, 0.003668f, 0.008407f, -0.052155f, 0.018812f, 0.084141f, 0.002163f, 0.087807f, 0.045986f, -0.005085f, -0.034047f, 0.099020f, 0.014625f, -0.016415f, 0.012590f, -0.022287f, -0.006809f, -0.003168f, -0.006237f, 0.012689f, 0.027422f, 0.019424f, 0.003500f, 0.012896f, -0.019966f, -0.018966f, 0.005879f, -0.005633f, 0.032380f, 0.035447f, 0.022333f, -0.008833f, 0.002148f, -0.042602f, -0.026939f, -0.007728f, -0.029444f, -0.046093f, -0.027622f, 0.022299f, -0.026929f, -0.081465f, -0.037791f, 0.025191f, -0.033004f, -0.023057f, 0.001191f, -0.005770f, 0.038476f, 0.056760f, 0.074326f, -0.039092f, 0.021189f, -0.000315f, - 0.002529f, -0.015731f, -0.049018f, -0.097772f, -0.064421f, 0.034289f, -0.065263f, -0.034031f, 0.018004f, 0.033512f, -0.024048f, 0.037767f, 0.107688f, 0.022932f, 0.021045f, -0.080940f, -0.108721f, -0.023273f, -0.033667f, -0.057799f, -0.016328f, -0.048219f, 0.034963f, 0.020102f, 0.097750f, 0.040554f, -0.010959f, -0.019313f, -0.033503f, 0.023454f, 0.044645f, 0.088700f, 0.062128f, -0.042049f, -0.088787f, -0.043105f, -0.028035f, -0.052316f, -0.009410f, 0.045465f, 0.022024f, 0.056134f, 0.002859f, 0.040064f, 0.016249f, -0.012357f, -0.016158f, -0.018590f, 0.011276f, 0.024716f, 0.006557f, 0.032003f, 0.039788f, 0.024276f, 0.028547f, 0.013453f, 0.042967f, 0.037829f, 0.002144f, -0.000200f, 0.019207f, 0.042650f, -0.003489f, -0.010648f, -0.005647f, 0.036492f, 0.011702f, 0.002336f, -0.009970f, 0.023072f, 0.017941f, -0.004859f, 0.015037f, 0.018421f, 0.009573f, -0.003220f, 0.004704f, 0.013396f, 0.002393f, -0.000698f, -0.020263f, 0.043797f, 0.090123f, -0.048646f, 0.068479f, 0.052982f, -0.008066f, -0.015232f, -0.029669f, 0.007852f, 0.061097f, 0.043405f, 0.071523f, -0.032305f, -0.013424f, -0.015965f, - -0.003843f, -0.020594f, 0.019078f, -0.024960f, 0.052560f, 0.020542f, -0.085079f, -0.038536f, 0.001168f, 0.011227f, 0.037350f, -0.019295f, -0.031956f, 0.007942f, 0.010479f, -0.015431f, -0.015605f, 0.007911f, -0.023955f, -0.038982f, -0.016559f, 0.078880f, 0.033726f, 0.011907f, -0.040575f, -0.014986f, -0.034393f, 0.018514f, 0.039404f, 0.011374f, 0.002888f, 0.021301f, -0.013424f, 0.049636f, 0.029485f, 0.001240f, 0.017349f, -0.003713f, 0.102188f, 0.019227f, -0.043160f, 0.014746f, 0.017855f, 0.008304f, 0.023305f, -0.000514f, -0.041216f, 0.047257f, 0.011032f, 0.006551f, 0.019467f, 0.007062f, 0.000116f, -0.032347f, 0.035306f, 0.038117f, 0.020871f, 0.112954f, 0.081832f, -0.046010f, -0.088522f, -0.063996f, -0.005963f, 0.005785f, -0.008938f, -0.077347f, -0.037289f, -0.028694f, -0.030932f, -0.032882f, 0.028128f, 0.020003f, -0.007834f, 0.002723f, -0.006679f, -0.044215f, 0.012259f, -0.009753f, -0.002253f, -0.045279f, -0.041602f, -0.009467f, 0.017724f, 0.018708f, 0.002597f, 0.020066f, 0.009466f, 0.025822f, 0.004048f, 0.003562f, -0.047257f, -0.030090f, 0.020114f, 0.003480f, -0.013113f, 0.022769f, - 0.010480f, 0.002398f, -0.022793f, 0.019972f, 0.030149f, 0.019225f, 0.021849f, 0.025669f, -0.006219f, 0.028650f, 0.061385f, 0.046441f, 0.010821f, 0.004658f, -0.008021f, -0.012805f, -0.031789f, -0.042066f, 0.010285f, -0.015734f, -0.001002f, 0.002107f, -0.003304f, -0.011360f, -0.005601f, -0.015427f, -0.105254f, -0.012423f, 0.024636f, 0.030354f, -0.025137f, 0.037653f, 0.009929f, -0.013758f, -0.040346f, 0.009654f, -0.010964f, -0.056902f, -0.020012f, -0.019565f, 0.002669f, -0.078729f, -0.064001f, -0.009658f, 0.037543f, -0.004290f, -0.013754f, -0.047238f, -0.000730f, 0.042285f, 0.000258f, -0.027664f, -0.018239f, -0.005184f, -0.017925f, 0.011252f, 0.011995f, -0.039831f, -0.047252f, 0.008105f, -0.003292f, 0.010817f, 0.073397f, -0.044922f, -0.006479f, -0.001881f, -0.074913f, -0.021054f, -0.055264f, -0.007379f, -0.006190f, 0.052847f, 0.056722f, 0.072520f, 0.018828f, 0.013140f, -0.028787f, -0.061549f, 0.000897f, 0.026462f, -0.023330f, 0.088856f, 0.203717f, 0.198248f, 0.027198f, -0.125160f, -0.117447f, -0.044398f, -0.074427f, 0.242965f, 0.148105f, 0.095061f, 0.120675f, -0.000905f, -0.066317f, -0.171295f, - -0.111961f, -0.041712f, -0.010725f, 0.070534f, 0.139007f, 0.126212f, -0.016333f, -0.102321f, -0.064099f, -0.092550f, -0.075080f, 0.014189f, 0.100323f, 0.149476f, 0.056093f, -0.006926f, 0.006920f, -0.055787f, -0.068697f, -0.065816f, 0.022063f, 0.011602f, 0.016171f, 0.060747f, 0.030552f, -0.004888f, -0.039444f, -0.031927f, -0.023057f, -0.051136f, -0.011620f, 0.024325f, -0.020649f, 0.002584f, -0.008292f, 0.037550f, 0.026244f, -0.047373f, -0.031320f, -0.096993f, -0.080111f, -0.068955f, 0.043966f, 0.080875f, 0.029292f, 0.021970f, -0.029807f, -0.049534f, -0.155076f, -0.112574f, -0.069354f, 0.014717f, 0.041920f, 0.028978f, 0.005525f, -0.055060f, -0.048158f, -0.088028f, -0.149559f, -0.056809f, 0.016535f, 0.045318f, 0.075420f, 0.037137f, -0.000749f, -0.039932f, -0.016111f, -0.025751f, 0.001081f, 0.056496f, -0.055323f, 0.063370f, 0.009662f, 0.008849f, -0.099232f, -0.029355f, 0.083387f, -0.055066f, 0.021618f, 0.002206f, -0.021231f, 0.028470f, 0.007889f, 0.047698f, 0.070091f, -0.040051f, -0.058337f, 0.016978f, -0.036256f, 0.047318f, -0.060868f, -0.028802f, -0.039180f, 0.006601f, -0.011974f, -0.031958f, - 0.013616f, 0.070885f, -0.055727f, -0.057299f, -0.045918f, -0.011516f, -0.014821f, 0.094425f, 0.003679f, -0.000377f, -0.092607f, -0.020981f, 0.006519f, 0.079750f, 0.031582f, -0.011279f, -0.132676f, -0.091038f, 0.086587f, 0.099188f, 0.091378f, -0.040252f, -0.220024f, -0.040243f, 0.095518f, 0.084359f, 0.010049f, -0.022388f, 0.011378f, -0.085079f, -0.054934f, 0.032671f, -0.028454f, 0.029880f, -0.018721f, 0.006658f, 0.089578f, -0.065471f, -0.038772f, 0.079603f, 0.057486f, 0.118546f, 0.046163f, -0.150850f, 0.045415f, 0.169633f, 0.032945f, 0.087524f, 0.018375f, -0.043424f, -0.004275f, 0.109219f, 0.069875f, 0.143995f, -0.187731f, 0.028691f, -0.004190f, -0.017489f, 0.070247f, 0.004418f, -0.099077f, 0.011672f, -0.007255f, -0.016570f, 0.011099f, 0.002761f, -0.061886f, 0.054609f, -0.027424f, 0.001770f, -0.000561f, -0.010716f, -0.000638f, 0.010971f, -0.019561f, -0.018095f, -0.035324f, -0.043721f, 0.042906f, 0.001002f, 0.013652f, 0.042715f, -0.048327f, 0.024767f, -0.005119f, -0.078287f, -0.003153f, 0.028767f, 0.084578f, -0.019894f, -0.126003f, -0.011080f, 0.054844f, 0.019058f, 0.048019f, -0.037056f, - -0.037786f, -0.041107f, 0.016869f, -0.004382f, 0.027818f, -0.043546f, 0.019696f, 0.015532f, 0.010373f, -0.048684f, 0.001568f, 0.014891f, 0.033158f, -0.010969f, 0.003935f, -0.027924f, 0.007786f, -0.014965f, 0.027692f, -0.001611f, 0.021277f, -0.003739f, 0.006313f, -0.031230f, 0.000971f, 0.000151f, 0.033409f, -0.016662f, 0.010746f, -0.033755f, 0.001822f, -0.000838f, 0.027570f, -0.006003f, 0.011046f, -0.108562f, 0.012273f, 0.019410f, 0.010354f, 0.107027f, 0.018035f, -0.008038f, -0.068326f, -0.011686f, -0.006718f, -0.016014f, -0.000677f, -0.012936f, 0.027389f, 0.012778f, -0.020140f, -0.003454f, 0.042506f, 0.000131f, -0.002388f, 0.004515f, -0.010637f, -0.018243f, 0.023854f, 0.021088f, 0.016010f, -0.026573f, 0.013974f, 0.039764f, 0.015598f, -0.002282f, 0.025653f, -0.004667f, -0.030430f, 0.008051f, 0.007719f, -0.024512f, -0.026640f, 0.026547f, 0.025853f, -0.025513f, 0.016359f, 0.015793f, -0.000218f, -0.009291f, 0.000198f, 0.020185f, -0.001107f, -0.022536f, 0.011740f, 0.013754f, -0.041857f, 0.010711f, 0.030970f, 0.010132f, -0.027209f, 0.004245f, 0.019228f, -0.035262f, 0.009595f, 0.016531f, - 0.006993f, -0.009169f, -0.033609f, 0.039585f, -0.042827f, -0.003780f, 0.041249f, 0.000674f, -0.007091f, 0.000913f, -0.038729f, 0.017155f, -0.000550f, 0.022138f, 0.041024f, -0.018551f, -0.002928f, -0.023695f, 0.031383f, -0.006568f, -0.003480f, 0.032154f, -0.041959f, -0.018460f, 0.023337f, 0.019023f, 0.008374f, -0.034136f, 0.011831f, -0.007501f, -0.002115f, 0.016373f, 0.012476f, 0.002346f, -0.008660f, -0.004370f, 0.001618f, 0.009265f, -0.029768f, 0.021715f, 0.004466f, -0.004141f, 0.008450f, -0.003906f, 0.018892f, -0.028034f, -0.005041f, 0.000580f, 0.001691f, 0.002799f, 0.013018f, 0.008592f, -0.047570f, 0.025181f, -0.005041f, -0.005534f, -0.001935f, 0.009691f, 0.013069f, -0.011797f, -0.004713f, 0.022156f, -0.018901f, -0.002430f, -0.014445f, 0.010537f, 0.100361f, 0.008741f, -0.012192f, -0.033606f, -0.022249f, 0.011687f, -0.014908f, 0.012868f, -0.019915f, -0.001661f, 0.015929f, -0.009068f, 0.007503f, 0.007240f, -0.027781f, 0.007595f, -0.009085f, -0.006145f, -0.022899f, 0.006373f, -0.006477f, -0.014552f, -0.006730f, 0.010972f, -0.009998f, -0.010012f, 0.014142f, -0.015819f, 0.007949f, 0.013332f, - -0.027867f, 0.027345f, -0.006964f, -0.032899f, 0.017378f, 0.017173f, -0.015303f, 0.005182f, 0.009896f, -0.013982f, -0.012427f, -0.000057f, 0.001820f, 0.008784f, -0.004540f, -0.001836f, -0.013825f, 0.012494f, -0.010842f, -0.003652f, 0.015828f, -0.019337f, 0.005483f, -0.003651f, 0.000001f, -0.009205f, -0.012422f, -0.005223f, 0.021519f, -0.014944f, -0.005682f, 0.003293f, 0.004520f, 0.000422f, -0.013146f, 0.009753f, -0.005934f, -0.011496f, -0.000399f, -0.020906f, 0.030173f, -0.013582f, 0.006046f, 0.006459f, -0.006312f, 0.010268f, -0.018088f, -0.014906f, 0.018324f, -0.009281f, -0.012583f, 0.012104f, -0.000927f, 0.003203f, -0.008428f, 0.001953f, -0.001951f, 0.005396f, -0.006752f, -0.005445f, 0.006867f, -0.004309f, -0.004959f, -0.001560f, 0.004285f, -0.003133f, -0.000531f, -0.002597f, 0.001044f, 0.003930f, -0.006032f, -0.006216f, 0.017192f, -0.005379f, -0.006342f, 0.005148f, -0.002131f, 0.004763f, -0.014050f, 0.000650f, -0.002462f, -0.000715f, -0.003837f, 0.015960f, 0.000060f, -0.014590f, 0.004528f, 0.001285f, -0.000775f, -0.000177f, 0.006161f, -0.004384f, -0.004277f, -0.002121f, -0.003876f, -0.002172f, - 0.001624f, -0.004788f, -0.000278f, 0.001026f, -0.000794f, -0.050151f, -0.081087f, 0.036896f, 0.281194f, 0.042748f, 0.140623f, -0.033238f, -0.142472f, -0.052164f, -0.138840f, -0.091887f, -0.028810f, -0.015585f, 0.006885f, 0.082357f, 0.099606f, 0.137648f, 0.137239f, 0.043244f, -0.053885f, -0.087924f, -0.160540f, -0.123466f, -0.064535f, -0.025520f, -0.016173f, 0.049370f, 0.083604f, 0.064112f, 0.088075f, 0.084811f, 0.031639f, 0.027302f, 0.010688f, -0.062555f, -0.022854f, -0.053824f, -0.092398f, -0.056305f, -0.053860f, -0.080621f, -0.016821f, 0.037272f, 0.028824f, 0.081684f, 0.107701f, 0.055644f, 0.071838f, 0.053574f, -0.007275f, -0.002613f, -0.004752f, -0.058042f, -0.070870f, -0.063723f, -0.095291f, -0.081682f, -0.028498f, -0.005044f, 0.011850f, 0.066060f, 0.061335f, 0.058578f, 0.074406f, 0.055085f, 0.019317f, 0.034720f, 0.019474f, -0.021823f, -0.009985f, -0.040127f, -0.083616f, -0.050714f, -0.047315f, -0.066334f, -0.031545f, -0.021423f, -0.036857f, 0.031179f, 0.059733f, 0.068386f, 0.109769f, 0.102908f, 0.043844f, 0.025375f, -0.001131f, -0.037617f, -0.044070f, -0.046001f, -0.066341f, -0.061260f, - -0.055739f, -0.051606f, -0.031798f, -0.012973f, 0.000214f, 0.024809f, 0.058980f, 0.072908f, 0.068320f, 0.081844f, 0.057146f, 0.027345f, 0.011955f, -0.009722f, -0.041777f, -0.047743f, -0.065973f, -0.086689f, -0.086880f, -0.069472f, -0.057552f, -0.008989f, 0.034942f, 0.077247f, 0.104107f, 0.112153f, 0.087089f, 0.056360f, 0.025384f, -0.006919f, -0.043144f, -0.063857f, -0.085764f, -0.085611f, -0.060845f, -0.040283f, -0.011883f, 0.015387f, 0.031202f, 0.040782f, 0.051505f, 0.044039f, 0.027917f, 0.023229f, 0.008651f, -0.000623f, -0.007794f, -0.010616f, -0.013369f, -0.013457f, -0.018976f, -0.015799f, -0.012009f, -0.010274f, -0.009892f, -0.006704f, -0.006150f, -0.001282f, 0.003663f, 0.010681f, 0.013053f, 0.017292f, 0.018607f, 0.019345f, 0.012277f, 0.007376f, 0.001587f, -0.002187f, -0.010846f, -0.014943f, -0.019704f, -0.019087f, -0.016318f, -0.009805f, -0.006535f, -0.001216f, 0.001943f, 0.009581f, 0.013512f, 0.016951f, 0.013712f, 0.013395f, 0.009261f, 0.006125f, 0.001351f, -0.000444f, -0.006022f, -0.008695f, -0.012895f, -0.013712f, -0.014719f, -0.010152f, -0.006896f, -0.000337f, 0.002276f, 0.007417f, - 0.009333f, 0.011705f, 0.008897f, 0.009468f, 0.006602f, 0.005455f, 0.000919f, -0.001375f, -0.005363f, -0.005774f, -0.008269f, -0.007167f, -0.007951f, -0.005727f, -0.005085f, -0.001029f, 0.000244f, 0.004261f, 0.005145f, 0.007837f, 0.006468f, 0.006925f, 0.003218f, 0.002095f, -0.000906f, -0.000508f, -0.002811f, -0.002474f, -0.004799f, -0.003771f, -0.004898f, -0.002841f, -0.003031f, 0.000012f, 0.000335f, 0.003082f, 0.002391f, 0.003705f, 0.001942f, 0.002865f, 0.000772f, 0.001490f, -0.000634f, 0.000260f, -0.001401f, -0.000172f, -0.001646f, -0.000136f, -0.001373f, 0.000248f, -0.001004f, 0.000547f, -0.000734f}, - {-0.002129f, 0.011495f, -0.006462f, 0.001925f, -0.009605f, 0.002687f, 0.001075f, 0.014648f, -0.008780f, 0.000026f, -0.004623f, 0.007338f, 0.007488f, -0.004787f, -0.000920f, -0.004116f, -0.002368f, -0.004812f, -0.005993f, 0.004405f, 0.001431f, -0.003922f, 0.008164f, 0.007435f, 0.012712f, -0.000388f, 0.004805f, 0.002518f, -0.000229f, -0.011512f, 0.002974f, 0.004774f, -0.004557f, 0.002861f, -0.003365f, -0.003915f, -0.006330f, 0.003260f, 0.008103f, 0.000823f, 0.009457f, -0.003886f, -0.000829f, 0.009541f, 0.004979f, 0.000755f, -0.000141f, 0.009060f, 0.013614f, -0.010159f, 0.002248f, -0.003521f, -0.001597f, -0.015805f, -0.005629f, 0.006362f, -0.004930f, 0.004402f, 0.002016f, -0.002339f, -0.003858f, 0.002214f, -0.001340f, 0.004902f, 0.002641f, 0.002272f, 0.002491f, -0.008219f, 0.000280f, -0.003964f, 0.005011f, 0.008337f, 0.005833f, -0.001216f, 0.009026f, 0.000034f, 0.003810f, -0.001227f, -0.002046f, 0.000457f, 0.004509f, 0.005208f, -0.001746f, -0.003602f, -0.007413f, -0.000982f, -0.003291f, -0.003522f, -0.002005f, -0.003002f, -0.002164f, -0.003531f, -0.001874f, -0.000119f, -0.000088f, 0.000048f, - 0.002868f, -0.002048f, 0.001479f, -0.000762f, -0.001460f, 0.000044f, 0.001287f, 0.000452f, 0.001015f, -0.000037f, -0.001025f, -0.000020f, 0.001312f, 0.000412f, -0.002056f, -0.001597f, -0.000130f, -0.000022f, 0.000759f, 0.000735f, 0.000056f, 0.001630f, -0.002072f, 0.006954f, -0.008499f, -0.008661f, 0.000220f, -0.011704f, 0.002057f, -0.003608f, 0.005630f, -0.003054f, -0.009484f, 0.001178f, 0.009077f, -0.001293f, 0.000205f, 0.012904f, 0.015968f, -0.006827f, -0.007490f, -0.001985f, -0.012065f, 0.005219f, 0.000980f, 0.003092f, -0.004315f, 0.006494f, -0.008441f, -0.001405f, 0.005592f, -0.004575f, -0.001821f, 0.000987f, 0.010249f, 0.000779f, 0.007385f, -0.009768f, 0.009596f, -0.000946f, 0.001292f, 0.006398f, -0.005535f, 0.005357f, -0.002574f, -0.002396f, 0.004405f, 0.006073f, -0.001122f, 0.003522f, -0.013218f, 0.008039f, 0.007580f, -0.013778f, -0.012341f, -0.003340f, -0.010254f, -0.002728f, 0.003755f, 0.002638f, 0.003581f, 0.000328f, -0.003493f, 0.008664f, -0.002976f, 0.000429f, -0.003530f, 0.002130f, -0.005289f, 0.007390f, 0.001671f, -0.005481f, -0.003242f, -0.002100f, -0.003357f, -0.002754f, - 0.007254f, 0.009769f, -0.000572f, -0.001850f, 0.000263f, 0.003209f, -0.002120f, 0.006862f, 0.003717f, -0.002637f, -0.000630f, -0.001602f, 0.002818f, -0.002706f, -0.000192f, -0.000625f, 0.000334f, 0.001190f, -0.000279f, -0.000708f, 0.001717f, -0.001293f, -0.000583f, 0.000503f, 0.001108f, 0.000220f, -0.002560f, -0.001565f, 0.000360f, -0.001488f, -0.001464f, 0.001744f, -0.000970f, -0.002866f, -0.002039f, -0.002280f, -0.000752f, 0.000510f, 0.002766f, 0.020638f, 0.003978f, -0.007669f, 0.009613f, 0.001194f, -0.006472f, 0.018853f, -0.012633f, -0.018168f, -0.010599f, -0.011023f, -0.003667f, 0.005349f, 0.006660f, -0.006290f, 0.009570f, -0.011974f, -0.006479f, -0.001462f, 0.004006f, 0.002969f, -0.003599f, -0.004712f, 0.010707f, 0.002042f, -0.000680f, -0.005988f, 0.008008f, -0.005830f, -0.001297f, -0.000020f, -0.000623f, -0.000842f, 0.003152f, 0.001651f, -0.001588f, 0.006642f, -0.003078f, 0.004050f, -0.000228f, -0.010842f, -0.004195f, -0.004330f, 0.011590f, -0.006389f, -0.007710f, -0.014075f, -0.016388f, -0.003002f, 0.000903f, -0.006563f, 0.012552f, 0.001694f, 0.006774f, -0.005034f, 0.010877f, 0.004620f, - -0.006194f, 0.017437f, -0.007822f, -0.008424f, 0.001424f, 0.010937f, 0.016089f, 0.011355f, 0.003833f, -0.005560f, -0.012521f, 0.005039f, -0.000072f, 0.012440f, 0.005078f, -0.003527f, -0.000344f, 0.006357f, 0.005175f, 0.000118f, -0.001097f, 0.000548f, -0.002389f, -0.005203f, -0.000402f, 0.001676f, 0.001392f, 0.004553f, -0.000063f, 0.002774f, -0.000860f, 0.002198f, -0.000450f, 0.000448f, -0.000363f, -0.003024f, 0.000393f, -0.000520f, -0.003818f, 0.003193f, -0.000615f, 0.001973f, -0.000955f, -0.002067f, 0.000406f, 0.000420f, -0.000037f, -0.001334f, 0.001573f, 0.000632f, -0.000916f, -0.000268f, -0.002898f, 0.000443f, -0.001579f, 0.001576f, -0.000440f, 0.003321f, -0.000056f, -0.001625f, -0.001325f, -0.019668f, 0.003185f, -0.007218f, 0.004665f, 0.001199f, 0.014183f, -0.018196f, -0.010196f, -0.013380f, 0.007245f, 0.005813f, 0.008671f, -0.009570f, 0.003395f, -0.002904f, 0.001341f, -0.014852f, -0.012457f, -0.009326f, -0.009016f, 0.014831f, -0.005870f, -0.001873f, -0.000131f, 0.005004f, -0.002236f, -0.015769f, 0.006757f, -0.006317f, -0.001909f, 0.007189f, 0.005598f, 0.008264f, 0.000682f, 0.004388f, - -0.010851f, -0.004614f, 0.010007f, 0.016312f, 0.009757f, -0.000776f, -0.012360f, 0.008856f, -0.003882f, -0.010865f, 0.015076f, 0.004373f, 0.005287f, -0.009241f, -0.005200f, 0.005067f, -0.003221f, -0.005168f, 0.008032f, -0.006258f, 0.002899f, 0.000343f, -0.010242f, -0.002255f, -0.006722f, 0.010882f, 0.005729f, -0.001561f, 0.002030f, -0.005069f, 0.006640f, 0.001043f, -0.000018f, 0.001882f, -0.012282f, -0.006527f, 0.007199f, 0.003353f, -0.001859f, -0.001643f, -0.008680f, 0.014483f, 0.018146f, 0.009890f, -0.008062f, 0.007335f, 0.001449f, 0.006256f, -0.002560f, 0.005138f, -0.003769f, 0.003315f, 0.006749f, 0.003508f, 0.003334f, 0.002354f, 0.000314f, -0.002242f, -0.000551f, 0.006407f, 0.000525f, 0.000397f, -0.002228f, -0.000492f, 0.001542f, 0.003842f, -0.000290f, 0.004520f, 0.000942f, 0.000088f, 0.000028f, 0.003664f, 0.004738f, -0.002012f, -0.000668f, -0.000539f, 0.000909f, 0.003217f, 0.000018f, 0.000848f, 0.000450f, 0.000750f, -0.001421f, 0.005421f, -0.029524f, 0.009853f, 0.001490f, 0.007346f, 0.007941f, -0.005761f, -0.020886f, 0.016089f, 0.006822f, 0.015830f, -0.002925f, 0.008391f, - -0.000180f, -0.005700f, -0.000408f, -0.014760f, 0.018036f, 0.004117f, 0.001691f, -0.009300f, -0.005360f, -0.006302f, 0.005371f, -0.008297f, 0.013803f, 0.000597f, 0.004734f, 0.007693f, 0.004230f, -0.000900f, 0.004436f, 0.004252f, -0.003262f, 0.003576f, -0.015407f, 0.003982f, 0.006975f, 0.007156f, 0.013771f, 0.004777f, -0.009258f, 0.004603f, -0.004686f, 0.009370f, 0.001780f, 0.006811f, 0.010469f, 0.001700f, -0.002344f, 0.008214f, -0.005713f, -0.008976f, -0.003355f, 0.005720f, 0.014518f, -0.003481f, 0.000869f, 0.000232f, 0.001692f, 0.002831f, 0.006051f, 0.002043f, -0.003884f, -0.000718f, -0.005222f, 0.003720f, 0.001153f, -0.009265f, -0.008185f, 0.003209f, 0.005066f, 0.005105f, 0.009089f, -0.014133f, -0.007649f, -0.010313f, 0.012025f, -0.005370f, -0.007571f, 0.003880f, -0.006986f, -0.010087f, -0.003702f, 0.000241f, 0.010686f, -0.003844f, 0.003405f, -0.004325f, -0.002589f, -0.000668f, 0.003200f, 0.001381f, -0.002028f, -0.001677f, 0.001983f, 0.005299f, 0.001728f, 0.003036f, -0.001568f, -0.001061f, 0.003539f, -0.000190f, 0.000160f, 0.001315f, -0.002618f, 0.004726f, -0.001584f, -0.000380f, - -0.002330f, -0.006136f, -0.001044f, -0.001390f, -0.000553f, -0.000117f, -0.002394f, 0.000191f, 0.005347f, -0.001411f, -0.000637f, -0.001090f, -0.002132f, 0.007126f, 0.030134f, 0.015748f, 0.014399f, 0.020608f, 0.005807f, 0.003634f, -0.012546f, -0.000576f, -0.023598f, -0.004440f, 0.009204f, 0.006407f, 0.004376f, 0.005333f, 0.006693f, -0.005291f, -0.003320f, 0.013454f, 0.012434f, 0.010370f, -0.000644f, 0.001312f, -0.016811f, -0.014862f, -0.005410f, 0.010571f, 0.003629f, -0.002398f, 0.005987f, -0.010053f, 0.001089f, -0.005270f, 0.011967f, 0.009107f, 0.020901f, -0.002232f, 0.007980f, 0.006348f, -0.003186f, -0.011056f, 0.019672f, -0.011526f, -0.002424f, 0.008662f, 0.000575f, 0.004847f, 0.014223f, -0.004674f, 0.005399f, -0.013789f, -0.028940f, -0.016316f, -0.009503f, -0.004089f, 0.001498f, -0.001345f, -0.007352f, -0.015821f, -0.003110f, -0.011413f, 0.003597f, -0.000446f, 0.001534f, -0.017821f, -0.007880f, 0.011243f, 0.004096f, -0.000877f, -0.019401f, -0.017880f, 0.010675f, 0.001701f, 0.006556f, -0.013154f, -0.010197f, 0.000502f, -0.005132f, -0.011252f, -0.007715f, 0.006016f, -0.002254f, 0.002665f, - 0.000963f, 0.007570f, 0.005836f, 0.002468f, -0.003807f, 0.001902f, -0.000563f, -0.004908f, -0.004505f, 0.004269f, -0.001770f, 0.001122f, -0.002863f, -0.004747f, -0.000652f, -0.000566f, 0.004178f, -0.000651f, -0.003792f, 0.000862f, 0.001652f, 0.004262f, 0.001015f, 0.000874f, -0.001751f, 0.005385f, -0.001984f, 0.006158f, -0.003369f, 0.004515f, -0.004034f, 0.000526f, 0.002611f, 0.000016f, -0.000166f, 0.000819f, -0.000994f, -0.001612f, -0.015207f, 0.011516f, -0.006785f, -0.000522f, -0.039515f, -0.009285f, -0.014633f, -0.009616f, 0.001566f, 0.013068f, -0.002634f, 0.017267f, 0.009088f, -0.000986f, -0.017015f, -0.006998f, 0.025226f, 0.004256f, -0.015160f, -0.011023f, -0.005031f, 0.011874f, -0.009272f, 0.000170f, 0.008110f, 0.012914f, 0.014505f, -0.015918f, 0.010692f, 0.001478f, 0.002998f, 0.004579f, 0.005855f, 0.005151f, 0.014542f, 0.000424f, 0.004387f, -0.012756f, 0.017831f, -0.008959f, -0.004249f, 0.003022f, -0.014876f, 0.018369f, -0.002947f, -0.035854f, -0.011901f, -0.028786f, 0.001719f, -0.000407f, -0.008745f, 0.039068f, -0.006874f, -0.019329f, -0.006603f, -0.004748f, 0.017906f, -0.002453f, - 0.008520f, 0.010529f, -0.007370f, 0.013407f, 0.018456f, -0.009397f, 0.007001f, -0.016442f, 0.007978f, -0.005896f, -0.004689f, 0.018993f, -0.006995f, -0.001818f, -0.008486f, 0.000503f, 0.000282f, 0.007244f, 0.010684f, 0.011364f, -0.003071f, -0.003226f, 0.000408f, 0.014718f, 0.006942f, 0.007650f, 0.000255f, -0.012024f, 0.004790f, -0.005841f, -0.006579f, -0.003597f, -0.000158f, -0.000340f, 0.000745f, 0.002669f, 0.002771f, -0.000710f, 0.007964f, 0.001292f, 0.003463f, 0.001388f, 0.001550f, -0.002242f, 0.002089f, 0.000805f, -0.002395f, -0.003508f, -0.002303f, -0.006030f, -0.004738f, 0.004144f, 0.003319f, -0.005107f, 0.001369f, -0.000285f, 0.001415f, 0.005752f, 0.001208f, -0.002262f, 0.000614f, 0.001847f, 0.000118f, -0.004669f, 0.002056f, 0.017879f, -0.024995f, 0.004936f, 0.005183f, -0.008008f, 0.003421f, 0.018807f, 0.020294f, 0.007427f, 0.007289f, 0.009569f, -0.015615f, -0.002814f, -0.016679f, -0.000445f, 0.010723f, 0.006665f, -0.003484f, -0.013331f, -0.004252f, 0.008834f, -0.017305f, 0.000480f, -0.001210f, 0.007886f, 0.016535f, 0.001445f, -0.008877f, -0.006903f, 0.017685f, -0.011480f, - -0.005465f, 0.010038f, -0.006313f, -0.021018f, -0.007555f, 0.004615f, 0.003543f, -0.008492f, 0.001962f, 0.010734f, 0.007513f, 0.010344f, -0.001230f, 0.007759f, 0.015015f, -0.006775f, 0.007479f, 0.006297f, -0.010272f, 0.022114f, -0.021418f, 0.012601f, 0.005613f, -0.029931f, 0.028476f, -0.018603f, 0.004036f, -0.003467f, 0.022718f, -0.009829f, -0.016130f, -0.003613f, 0.000125f, 0.003936f, 0.017443f, -0.015034f, -0.000751f, 0.000866f, 0.000998f, -0.002869f, 0.005144f, -0.012274f, -0.001800f, -0.008815f, -0.016104f, -0.018018f, 0.009564f, 0.007564f, 0.007387f, -0.000043f, 0.011236f, -0.005418f, -0.013071f, 0.003167f, -0.023119f, -0.019469f, -0.003669f, 0.005411f, -0.000249f, -0.003794f, -0.003035f, 0.002530f, -0.012690f, -0.004452f, -0.002722f, -0.002292f, 0.005800f, -0.000849f, 0.000900f, 0.000239f, -0.004222f, 0.001837f, -0.004740f, 0.000109f, 0.002141f, -0.005301f, -0.001163f, 0.004036f, -0.003427f, -0.000224f, -0.002435f, -0.000445f, 0.001486f, -0.000101f, -0.007033f, -0.001348f, -0.000201f, -0.000602f, -0.001309f, -0.004499f, -0.007251f, -0.001975f, -0.000569f, -0.001254f, 0.005660f, 0.004025f, - 0.000656f, -0.001596f, -0.020251f, 0.016113f, -0.046036f, 0.025330f, -0.018499f, -0.012232f, -0.022657f, 0.002737f, -0.002980f, 0.004152f, 0.015672f, -0.013206f, -0.005459f, 0.012934f, 0.011327f, -0.003631f, 0.004223f, -0.005981f, -0.021259f, -0.001841f, 0.004976f, -0.010596f, 0.016608f, 0.002983f, -0.002274f, -0.009924f, -0.010188f, 0.002410f, 0.025754f, 0.001184f, -0.003961f, 0.007216f, -0.022822f, -0.003821f, 0.007930f, -0.015200f, 0.021593f, 0.013962f, -0.001083f, -0.006655f, -0.007632f, -0.008395f, -0.015270f, -0.018464f, 0.015263f, 0.001191f, 0.027344f, 0.002545f, -0.001726f, -0.012389f, 0.002008f, -0.004837f, 0.005918f, -0.000356f, -0.017704f, -0.013593f, -0.018034f, -0.029872f, -0.004449f, 0.026385f, -0.025489f, -0.001525f, -0.026676f, 0.004240f, 0.007155f, 0.006163f, 0.018559f, -0.002047f, -0.027412f, 0.019500f, -0.002161f, -0.013110f, -0.011224f, -0.023428f, -0.008303f, -0.017809f, 0.009506f, -0.027360f, -0.004835f, 0.010788f, -0.000478f, 0.002109f, 0.012831f, 0.006696f, 0.015465f, 0.000088f, -0.008776f, -0.003338f, -0.006096f, -0.000267f, 0.005546f, -0.001581f, 0.000758f, 0.000821f, - 0.000372f, -0.004548f, -0.006923f, 0.004227f, -0.004924f, 0.002058f, 0.000592f, -0.000933f, 0.001838f, 0.000719f, 0.000631f, 0.009469f, 0.001469f, -0.000542f, 0.001563f, 0.003003f, 0.001861f, -0.004747f, -0.000949f, -0.010006f, 0.003536f, 0.005190f, 0.007623f, 0.002824f, 0.002485f, -0.000156f, -0.005283f, 0.003046f, -0.000433f, 0.019658f, -0.007197f, 0.017478f, -0.017060f, -0.009043f, 0.011945f, 0.003832f, -0.023026f, 0.001492f, 0.029936f, -0.034493f, 0.002027f, 0.016114f, 0.038758f, -0.016576f, -0.009873f, -0.004249f, 0.030007f, 0.029472f, -0.031171f, -0.001467f, -0.023952f, -0.011465f, 0.015572f, 0.015675f, 0.020513f, 0.011653f, -0.004097f, 0.014428f, -0.017878f, -0.009636f, -0.001818f, -0.002755f, -0.025871f, 0.002278f, -0.000623f, 0.034175f, -0.005321f, 0.016837f, 0.004030f, 0.009976f, 0.022850f, -0.013869f, -0.006223f, -0.033779f, 0.023212f, -0.029773f, -0.005343f, 0.006821f, -0.004082f, -0.017204f, -0.004380f, 0.004866f, -0.012294f, 0.003333f, -0.002069f, -0.002623f, -0.038025f, -0.026901f, 0.001799f, -0.019511f, -0.026730f, 0.004893f, -0.024723f, 0.007823f, 0.015940f, -0.014491f, - 0.027439f, 0.005757f, 0.017571f, 0.018935f, 0.004761f, -0.014091f, -0.016788f, -0.020779f, 0.010551f, -0.021561f, 0.012835f, 0.015542f, 0.021349f, 0.003767f, -0.015426f, -0.009853f, 0.000292f, 0.002052f, -0.028637f, -0.000729f, -0.018600f, -0.003168f, -0.005373f, 0.001121f, -0.013668f, 0.001744f, -0.003255f, -0.000229f, -0.008943f, -0.006434f, 0.001928f, 0.014183f, 0.001325f, -0.001399f, 0.001749f, -0.002067f, -0.005456f, -0.005224f, -0.005894f, -0.002550f, -0.006965f, 0.007291f, 0.005160f, -0.000555f, -0.005812f, 0.008667f, 0.012842f, -0.002959f, -0.002493f, -0.003146f, -0.001567f, -0.000500f, 0.002976f, -0.005023f, 0.004945f, 0.004753f, 0.003052f, -0.004789f, -0.000975f, 0.002648f, 0.003533f, 0.008923f, -0.018356f, 0.047377f, 0.019754f, 0.008230f, 0.024365f, -0.009295f, 0.005128f, -0.025133f, -0.032396f, 0.020447f, 0.041654f, 0.012432f, -0.000193f, -0.041126f, 0.049677f, 0.007218f, 0.006119f, 0.007164f, 0.001844f, 0.009019f, 0.002838f, -0.007079f, -0.000304f, 0.012583f, -0.007699f, 0.015802f, 0.003030f, -0.012373f, -0.017218f, -0.004663f, 0.015734f, -0.004271f, 0.005137f, -0.007076f, - -0.006312f, 0.000305f, 0.044573f, 0.007251f, 0.006449f, 0.006061f, 0.003763f, 0.026754f, -0.009953f, 0.007727f, -0.017261f, 0.031867f, 0.044337f, 0.011597f, -0.002554f, -0.015741f, 0.046328f, 0.021814f, 0.000682f, -0.017887f, 0.006775f, -0.010715f, -0.001663f, -0.020528f, -0.007729f, -0.013686f, -0.018863f, 0.030531f, -0.009150f, 0.022510f, 0.004713f, -0.017486f, -0.000261f, -0.037464f, 0.035647f, -0.002548f, -0.017055f, -0.013285f, -0.021735f, -0.026751f, -0.014650f, 0.041515f, -0.012930f, 0.014974f, 0.018846f, -0.016736f, -0.015950f, -0.029904f, 0.004515f, 0.020203f, 0.006932f, 0.019316f, -0.004444f, -0.003792f, 0.000874f, 0.005503f, -0.008224f, 0.002323f, -0.014896f, 0.004858f, -0.000682f, 0.016935f, 0.011951f, -0.009144f, 0.000936f, -0.000496f, 0.010086f, -0.003420f, -0.013391f, 0.002973f, -0.000397f, -0.001095f, 0.005008f, 0.000914f, -0.002075f, -0.006737f, -0.007491f, -0.001467f, -0.001760f, 0.007940f, -0.000263f, 0.007959f, -0.010916f, 0.002615f, 0.008323f, -0.015593f, -0.011274f, 0.004047f, -0.008351f, -0.002235f, -0.004918f, 0.011648f, 0.014054f, -0.010471f, -0.011069f, 0.044070f, - 0.043263f, 0.053377f, 0.032168f, 0.010578f, -0.013553f, -0.014127f, 0.008019f, 0.015488f, 0.019010f, -0.028405f, -0.000811f, -0.003405f, 0.014266f, 0.011220f, -0.019666f, -0.024309f, -0.000065f, -0.009224f, 0.023183f, 0.027224f, 0.000020f, 0.014422f, 0.004787f, 0.005753f, 0.031496f, -0.019236f, -0.025437f, 0.020067f, -0.033321f, 0.002863f, -0.010246f, 0.018391f, 0.009430f, 0.000320f, 0.021568f, 0.019748f, -0.017935f, 0.022377f, -0.000012f, -0.009602f, 0.005337f, 0.024311f, -0.009367f, 0.010389f, 0.018080f, 0.008145f, -0.038839f, -0.022500f, 0.003871f, 0.002035f, -0.026392f, -0.018082f, 0.008823f, 0.012558f, 0.010734f, -0.036036f, -0.025113f, -0.025085f, -0.001944f, 0.015591f, 0.022812f, -0.057235f, -0.042003f, 0.006976f, 0.008839f, 0.033025f, 0.011701f, 0.012097f, 0.024111f, -0.002614f, -0.006125f, -0.008759f, 0.059124f, 0.020397f, -0.009269f, -0.030938f, 0.028295f, 0.018424f, -0.009183f, -0.008425f, 0.004414f, -0.008536f, 0.015141f, -0.005479f, -0.003175f, 0.008851f, -0.002143f, -0.003576f, -0.004599f, 0.009294f, 0.024275f, 0.000134f, 0.001783f, 0.000810f, 0.010592f, 0.013485f, - -0.003386f, -0.008554f, 0.003720f, -0.000838f, 0.002786f, 0.001540f, 0.002137f, -0.011533f, -0.006206f, 0.008089f, 0.000889f, -0.004726f, 0.004036f, 0.011272f, 0.008883f, -0.015253f, -0.003348f, -0.010163f, -0.009663f, 0.007148f, -0.011549f, 0.004488f, -0.006197f, 0.011214f, 0.008817f, -0.013467f, -0.018758f, -0.036321f, -0.035343f, -0.029059f, 0.011217f, -0.003747f, 0.016403f, -0.032039f, -0.005277f, 0.001492f, -0.012357f, -0.014995f, 0.026047f, -0.009981f, 0.005277f, -0.000400f, 0.001816f, -0.026124f, -0.009607f, -0.022340f, 0.002976f, 0.002944f, 0.005809f, 0.061745f, -0.024049f, 0.017050f, 0.026001f, -0.013198f, -0.012443f, -0.018688f, -0.003769f, 0.028840f, -0.029424f, 0.020147f, -0.001922f, -0.004910f, 0.002714f, 0.002952f, 0.015823f, 0.001772f, -0.031214f, 0.023878f, -0.019440f, -0.044816f, -0.036262f, -0.018177f, 0.060670f, 0.051465f, -0.027966f, -0.008057f, -0.038396f, -0.032058f, -0.012645f, 0.037470f, 0.000988f, 0.025843f, 0.013525f, -0.017632f, 0.019718f, -0.013425f, -0.039961f, -0.003392f, -0.024224f, -0.004947f, -0.012973f, 0.078907f, 0.000739f, -0.065328f, 0.051304f, -0.020703f, - -0.014544f, 0.051809f, 0.052684f, 0.000167f, -0.023040f, 0.010266f, 0.012902f, -0.070943f, -0.030496f, 0.001873f, -0.010405f, 0.037128f, 0.015747f, -0.053823f, -0.008026f, -0.004331f, 0.024423f, 0.015508f, 0.010650f, 0.009633f, -0.011175f, 0.001904f, 0.004312f, 0.022500f, -0.002754f, 0.003079f, 0.004458f, 0.003827f, 0.013277f, 0.006254f, 0.000344f, -0.015402f, 0.019509f, -0.001789f, -0.000043f, 0.000876f, 0.000076f, -0.008341f, -0.012907f, -0.008917f, 0.001820f, -0.003244f, 0.005723f, -0.000924f, -0.005682f, 0.006143f, 0.014423f, -0.019155f, -0.006146f, -0.005883f, -0.002671f, 0.005388f, -0.000299f, -0.005524f, -0.010696f, -0.004106f, -0.002705f, 0.009898f, -0.031579f, -0.019363f, 0.009375f, 0.007618f, 0.016911f, 0.053931f, 0.009100f, -0.001205f, 0.012409f, 0.002979f, -0.022530f, -0.013566f, 0.011871f, 0.002935f, 0.043721f, 0.010534f, -0.002913f, 0.016047f, 0.023388f, 0.024053f, 0.025532f, 0.001553f, -0.018222f, -0.004844f, -0.041390f, -0.005439f, -0.046712f, 0.026109f, -0.028504f, -0.010804f, -0.000056f, 0.037826f, -0.022034f, 0.021116f, -0.015536f, 0.012855f, -0.019436f, 0.024194f, - 0.036132f, 0.002625f, -0.007889f, -0.019406f, -0.028401f, 0.015921f, 0.017859f, 0.046222f, -0.006459f, 0.002453f, 0.020087f, 0.073943f, -0.017445f, 0.011201f, -0.012171f, -0.040971f, 0.028634f, -0.005753f, 0.020292f, -0.002419f, 0.004854f, -0.024637f, 0.068091f, -0.102355f, 0.075198f, -0.117462f, 0.050449f, -0.060537f, 0.018602f, -0.047445f, 0.016878f, 0.031647f, -0.007791f, 0.023541f, -0.012313f, 0.085876f, -0.052288f, 0.057052f, -0.088516f, 0.044624f, -0.034884f, 0.042933f, -0.029067f, -0.031064f, -0.015540f, -0.007801f, 0.021329f, -0.005845f, -0.004126f, 0.002238f, 0.001005f, -0.010941f, 0.015062f, -0.016547f, 0.015930f, -0.011941f, 0.004636f, -0.019046f, -0.011057f, -0.014057f, 0.002165f, -0.012923f, 0.015693f, 0.017201f, -0.016633f, -0.000207f, 0.006103f, 0.015785f, -0.002785f, 0.005689f, 0.012474f, -0.012041f, 0.020889f, -0.005892f, 0.027756f, -0.016772f, 0.033324f, -0.024064f, 0.008222f, -0.001953f, 0.018359f, 0.015661f, -0.003491f, 0.009175f, -0.026544f, 0.029691f, -0.020917f, 0.007221f, -0.021261f, 0.015005f, -0.028196f, 0.009494f, -0.002905f, -0.010139f, 0.009854f, -0.019928f, - 0.003018f, -0.009789f, 0.009713f, -0.009686f, 0.005565f, 0.003505f, 0.002608f, -0.007461f, 0.026041f, 0.020996f, 0.082700f, -0.057480f, 0.024053f, 0.015231f, -0.049682f, -0.001288f, -0.009779f, -0.014025f, -0.025536f, -0.001279f, 0.002917f, 0.033018f, 0.012264f, 0.017322f, 0.024733f, 0.020123f, 0.000737f, 0.027543f, -0.031672f, -0.004474f, 0.038141f, 0.004337f, -0.052365f, -0.011951f, -0.068521f, -0.012724f, 0.011942f, -0.012614f, -0.015979f, -0.002901f, 0.061235f, 0.015562f, 0.004685f, 0.007560f, 0.015325f, -0.004541f, -0.035137f, -0.010680f, -0.003905f, 0.006602f, -0.008106f, -0.016336f, 0.044342f, 0.023950f, -0.009174f, -0.002035f, -0.009536f, -0.040028f, -0.032924f, -0.023977f, -0.019995f, 0.044830f, 0.010777f, 0.016591f, -0.026979f, -0.026126f, 0.008422f, 0.018288f, 0.016800f, -0.007513f, -0.005307f, -0.030351f, -0.020102f, 0.026625f, 0.001198f, -0.073564f, 0.025897f, 0.040232f, 0.012854f, -0.032027f, -0.019740f, -0.015929f, 0.005275f, -0.023046f, 0.011406f, -0.054139f, -0.072439f, 0.030033f, 0.026127f, -0.014429f, -0.026635f, 0.020371f, -0.011928f, 0.005309f, 0.006289f, -0.010627f, - 0.011590f, -0.006568f, -0.006818f, -0.003884f, 0.017409f, -0.012351f, -0.003664f, -0.013517f, -0.000198f, 0.001174f, 0.011638f, 0.012096f, -0.001363f, 0.007141f, -0.008567f, 0.014126f, -0.009828f, 0.011543f, -0.026656f, -0.012103f, -0.003683f, 0.007725f, -0.008720f, -0.017358f, -0.013342f, 0.006377f, 0.013724f, -0.000492f, 0.017735f, 0.005007f, 0.007011f, 0.001111f, 0.011547f, -0.006518f, 0.011037f, -0.002648f, -0.021956f, -0.016874f, -0.006471f, 0.010010f, -0.012343f, 0.007275f, -0.018421f, -0.008103f, 0.008425f, -0.068333f, 0.059817f, 0.072689f, -0.006801f, 0.052832f, 0.002161f, 0.008022f, 0.023045f, -0.046784f, 0.016995f, 0.034513f, 0.034120f, 0.014247f, 0.010568f, -0.033852f, 0.024712f, 0.014466f, -0.020500f, 0.010836f, -0.004080f, 0.040216f, 0.011102f, 0.010225f, 0.023805f, -0.009639f, -0.027453f, 0.007844f, 0.051319f, -0.018480f, -0.010004f, 0.046270f, -0.017052f, -0.020839f, -0.016910f, 0.015870f, 0.059613f, 0.082835f, -0.005181f, -0.053900f, 0.081329f, 0.027915f, -0.053602f, 0.060571f, 0.023211f, -0.015150f, -0.015585f, -0.022857f, -0.037780f, -0.002249f, 0.019806f, -0.032493f, - -0.021231f, -0.068523f, -0.009316f, 0.039727f, -0.082909f, -0.044999f, 0.013068f, 0.013262f, 0.016331f, 0.050183f, 0.044477f, -0.073766f, 0.000585f, 0.002722f, -0.052158f, 0.014457f, 0.024785f, -0.026851f, -0.019118f, -0.022688f, 0.015083f, 0.057791f, 0.018090f, 0.030006f, -0.039616f, 0.020072f, -0.044856f, 0.003819f, -0.030179f, -0.122572f, 0.093631f, 0.023969f, -0.034223f, 0.063299f, -0.021917f, -0.028996f, 0.017011f, 0.012851f, 0.016266f, 0.024685f, 0.009977f, -0.025015f, -0.007962f, 0.024213f, -0.000855f, 0.009248f, 0.003864f, -0.004105f, 0.005911f, -0.011037f, 0.008027f, 0.022611f, 0.008138f, -0.013525f, -0.009989f, 0.006822f, -0.006157f, -0.012285f, 0.004563f, 0.014058f, 0.008163f, -0.042479f, -0.012890f, -0.031317f, -0.016267f, 0.018059f, -0.013992f, -0.017561f, 0.016511f, 0.010597f, -0.018372f, 0.023098f, -0.017243f, -0.007637f, 0.008253f, -0.013597f, 0.015179f, -0.006926f, -0.025220f, 0.020747f, -0.038909f, 0.044829f, 0.148412f, -0.047345f, 0.001263f, 0.011464f, 0.066988f, 0.059486f, -0.019492f, -0.025743f, -0.037478f, 0.001656f, 0.028356f, -0.000882f, -0.019175f, -0.019621f, - 0.026762f, -0.014553f, -0.036044f, -0.032127f, -0.006531f, 0.054625f, 0.038240f, -0.043311f, 0.002893f, 0.000865f, -0.018935f, 0.021583f, 0.007941f, -0.015403f, -0.005125f, -0.012097f, -0.005829f, 0.069722f, -0.025941f, -0.046167f, -0.032379f, -0.026202f, 0.061585f, 0.001791f, -0.014281f, 0.056801f, 0.038987f, 0.015586f, 0.028866f, 0.055858f, -0.033909f, 0.008691f, 0.054269f, 0.031818f, 0.041464f, -0.046993f, -0.013259f, -0.001664f, 0.019874f, 0.018803f, -0.044550f, 0.004351f, -0.058534f, -0.087975f, -0.004617f, -0.023201f, 0.040929f, 0.045584f, -0.011897f, -0.003510f, 0.009271f, -0.031921f, -0.085271f, 0.057519f, -0.041299f, 0.008982f, -0.015874f, -0.028743f, -0.016691f, -0.033347f, -0.067575f, 0.040046f, 0.035597f, 0.043234f, 0.008381f, -0.053636f, -0.094358f, -0.027927f, -0.026060f, -0.011442f, 0.029911f, -0.019206f, -0.004657f, 0.005811f, 0.004076f, -0.014910f, -0.006797f, -0.011955f, 0.001537f, -0.005264f, 0.010061f, -0.005812f, -0.007247f, 0.011067f, 0.014333f, 0.011401f, -0.022758f, 0.007597f, 0.001391f, -0.001948f, 0.000369f, -0.050076f, 0.002531f, 0.007061f, 0.007489f, -0.032953f, - 0.021637f, -0.004624f, -0.027427f, -0.022410f, 0.013492f, 0.017830f, -0.003192f, 0.010640f, -0.016858f, -0.011820f, -0.011448f, 0.001472f, 0.020646f, 0.005325f, 0.019729f, -0.000353f, 0.009218f, -0.029039f, -0.004390f, -0.006865f, -0.005358f, 0.022906f, 0.010992f, -0.000683f, 0.007376f, 0.003536f, -0.022873f, -0.007371f, -0.072570f, -0.042131f, -0.033658f, -0.086169f, 0.099433f, -0.002613f, 0.052526f, -0.012254f, 0.002924f, -0.060165f, -0.032390f, -0.031211f, 0.007234f, 0.046527f, -0.001830f, -0.049153f, -0.036183f, -0.070117f, -0.077352f, 0.066263f, 0.024892f, -0.060810f, -0.018452f, 0.029475f, 0.055787f, 0.007415f, -0.068533f, -0.042218f, 0.013881f, 0.018900f, 0.017402f, 0.039829f, -0.042495f, -0.040985f, -0.005930f, -0.014782f, 0.005979f, 0.011603f, -0.082420f, -0.015617f, -0.057394f, -0.037326f, -0.076649f, -0.029546f, 0.105726f, 0.017804f, 0.003639f, 0.025482f, 0.026446f, 0.007880f, 0.078648f, 0.061641f, -0.020196f, 0.020689f, 0.106160f, -0.028114f, -0.024417f, -0.025668f, -0.078546f, -0.003429f, -0.042865f, -0.098342f, -0.102419f, -0.054251f, -0.052720f, 0.023604f, -0.039403f, 0.003077f, - 0.021152f, -0.070198f, -0.025261f, 0.000040f, 0.000021f, 0.017614f, 0.045967f, 0.029944f, 0.055366f, 0.074130f, 0.054408f, -0.007071f, -0.039029f, -0.057515f, -0.004516f, 0.023218f, 0.007312f, -0.008451f, -0.000354f, 0.015772f, 0.013443f, 0.034689f, -0.003579f, 0.005177f, 0.001004f, -0.012122f, 0.011867f, 0.001392f, -0.005258f, 0.029579f, 0.013384f, 0.006387f, -0.027707f, 0.018500f, -0.009670f, 0.013849f, -0.026252f, -0.074474f, -0.003028f, 0.028820f, -0.005072f, -0.039725f, -0.024761f, -0.029183f, -0.021213f, 0.008970f, 0.013413f, 0.014278f, 0.004525f, -0.003032f, 0.011557f, 0.028587f, 0.048934f, 0.045309f, 0.057398f, 0.048270f, -0.004052f, 0.032348f, 0.074729f, 0.004915f, -0.031871f, -0.046744f, -0.046046f, -0.063933f, -0.050938f, -0.025014f, -0.026966f, -0.004124f, -0.007732f, 0.065287f, -0.042580f, 0.012632f, -0.049375f, -0.017180f, -0.053883f, 0.006610f, 0.065994f, -0.001869f, 0.040886f, -0.081609f, 0.071681f, 0.023558f, -0.014383f, 0.056224f, 0.008180f, 0.025358f, -0.022408f, -0.027130f, -0.000285f, 0.016929f, 0.013508f, -0.057154f, 0.052285f, -0.063300f, 0.007898f, 0.017150f, - -0.021155f, 0.036601f, -0.038898f, -0.022662f, -0.004146f, -0.014418f, -0.019622f, -0.004851f, 0.008534f, -0.029525f, -0.034076f, -0.011592f, -0.005857f, -0.008917f, 0.020912f, 0.010772f, 0.008584f, -0.042045f, 0.011149f, 0.049953f, 0.067038f, -0.049943f, -0.024798f, 0.056354f, 0.077922f, -0.047779f, -0.029127f, 0.032239f, 0.013835f, -0.038087f, 0.031168f, -0.088665f, -0.017305f, 0.035260f, 0.070417f, 0.008527f, -0.043649f, -0.040130f, 0.010691f, 0.083708f, 0.007352f, 0.011981f, 0.002520f, 0.027319f, -0.005426f, 0.062010f, -0.000718f, -0.070065f, 0.043736f, -0.045970f, -0.013928f, 0.018476f, -0.026545f, 0.005602f, -0.056537f, -0.021786f, 0.052283f, 0.023364f, -0.023547f, -0.034303f, -0.018446f, 0.003609f, -0.027330f, -0.009000f, -0.006118f, -0.017479f, -0.010354f, -0.008859f, -0.035478f, 0.021574f, -0.013353f, -0.016510f, -0.051348f, -0.013746f, 0.037501f, -0.026902f, -0.014551f, -0.014437f, -0.029415f, 0.055442f, 0.022932f, 0.001297f, -0.002042f, -0.032155f, -0.047066f, 0.002121f, 0.041715f, 0.033522f, 0.011332f, -0.036144f, -0.020817f, -0.016649f, 0.020227f, 0.002830f, -0.031577f, -0.008686f, - 0.001803f, 0.011432f, -0.028118f, -0.019704f, -0.016685f, 0.042766f, 0.022183f, 0.001870f, -0.027319f, -0.024442f, 0.024282f, 0.051578f, -0.000754f, -0.023613f, -0.032562f, -0.011982f, 0.014420f, 0.000127f, -0.007632f, 0.000834f, -0.006600f, -0.006023f, 0.004876f, 0.015607f, 0.000233f, -0.003463f, 0.000091f, -0.000143f, -0.004056f, 0.000967f, 0.000140f, 0.000357f, -0.005647f, 0.003617f, 0.000782f, -0.106770f, -0.028714f, 0.017177f, -0.035098f, 0.103987f, 0.077324f, 0.049545f, 0.027353f, 0.069911f, 0.050539f, 0.015869f, 0.034618f, -0.083869f, -0.111066f, -0.016279f, 0.001667f, -0.029493f, 0.015536f, -0.006087f, -0.028576f, -0.037376f, -0.029277f, 0.057123f, 0.050957f, -0.041071f, -0.004591f, -0.006368f, -0.009539f, -0.015082f, -0.020427f, -0.031267f, -0.042152f, -0.008905f, 0.076076f, -0.024877f, -0.041336f, -0.020760f, 0.071444f, -0.033822f, -0.031961f, 0.108917f, 0.039616f, 0.017740f, -0.026060f, -0.060945f, -0.041446f, -0.062838f, 0.017422f, 0.050574f, 0.139092f, -0.122358f, -0.050973f, 0.070700f, 0.099485f, 0.016569f, -0.005172f, 0.126229f, 0.061499f, -0.040719f, 0.041142f, -0.015287f, - 0.001206f, -0.088558f, -0.043594f, -0.031382f, -0.143333f, -0.061775f, -0.022465f, 0.076917f, -0.041171f, -0.024940f, 0.058661f, -0.004511f, -0.006875f, 0.013192f, 0.041536f, -0.040021f, 0.029612f, 0.043410f, 0.001864f, -0.009041f, -0.080504f, 0.036886f, 0.030034f, -0.094690f, -0.005918f, 0.009533f, 0.007000f, -0.008650f, -0.040839f, 0.010473f, 0.008014f, 0.011097f, -0.005678f, -0.012713f, 0.031010f, 0.005777f, -0.005336f, 0.020095f, 0.009542f, 0.054630f, -0.006618f, 0.017491f, 0.004447f, -0.044531f, -0.037287f, 0.026213f, -0.020330f, 0.015688f, 0.021605f, 0.012174f, 0.013712f, -0.000264f, 0.037498f, -0.012287f, -0.008176f, -0.015039f, 0.011458f, 0.027836f, -0.041876f, -0.016565f, 0.021561f, 0.008946f, -0.023297f, -0.044327f, -0.010190f, 0.011393f, 0.091959f, 0.033571f, -0.007520f, 0.023692f, -0.004510f, -0.008616f, -0.033689f, 0.016123f, 0.014172f, -0.026807f, -0.012845f, -0.097249f, -0.003790f, 0.039893f, -0.009217f, -0.040614f, 0.017901f, -0.009205f, 0.043877f, 0.008631f, -0.020993f, -0.000439f, 0.046967f, -0.026733f, 0.007712f, 0.016804f, -0.014048f, -0.000508f, -0.025120f, 0.051569f, - -0.002909f, 0.007598f, 0.001025f, 0.024879f, -0.011105f, -0.009810f, -0.015945f, 0.010243f, 0.019625f, -0.008592f, 0.023279f, -0.010067f, 0.014429f, -0.024313f, -0.018872f, 0.029348f, 0.037958f, -0.048824f, 0.002506f, -0.000003f, 0.004801f, 0.015300f, -0.030438f, 0.046992f, -0.041909f, 0.037812f, 0.005545f, -0.065858f, -0.003341f, 0.051302f, -0.066724f, 0.031907f, 0.000548f, 0.008608f, -0.015820f, -0.010077f, 0.013800f, -0.019472f, 0.068861f, -0.050784f, 0.007860f, -0.013655f, -0.005877f, 0.016882f, 0.001243f, -0.008360f, -0.001288f, 0.020711f, -0.000355f, -0.023833f, 0.007005f, 0.012055f, -0.039547f, 0.030976f, 0.014302f, 0.001437f, 0.028894f, -0.010484f, -0.008525f, 0.013438f, 0.006568f, 0.008519f, 0.005187f, -0.007902f, 0.016470f, 0.006933f, 0.001535f, -0.017447f, -0.002534f, 0.008505f, 0.015818f, -0.026470f, 0.014203f, 0.016476f, -0.023022f, 0.011087f, 0.003801f, 0.003976f, 0.012718f, -0.006963f, 0.003140f, -0.004366f, -0.033530f, -0.000515f, -0.007805f, 0.014815f, -0.009150f, 0.005655f, 0.004135f, -0.001401f, 0.004946f, 0.008585f, -0.005191f, 0.000009f, 0.001967f, -0.000243f, - 0.002902f, 0.010309f, -0.010057f, 0.009658f, -0.007211f, -0.048662f, -0.138491f, -0.197119f, 0.066040f, 0.175756f, 0.038398f, 0.486715f, 0.400309f, 0.270905f, 0.457758f, 0.238808f, -0.016720f, -0.057049f, -0.181369f, -0.417628f, -0.345445f, -0.335427f, -0.467054f, -0.344881f, -0.101842f, -0.074695f, -0.012793f, 0.162320f, 0.074976f, -0.020221f, 0.102342f, 0.170245f, 0.082743f, 0.079699f, 0.154319f, 0.092215f, 0.070502f, 0.140286f, 0.219792f, 0.091629f, 0.128685f, 0.206792f, 0.034716f, 0.013795f, 0.182079f, 0.107883f, -0.071010f, 0.087890f, 0.112760f, -0.118966f, -0.036333f, 0.130709f, -0.027387f, -0.078890f, 0.168326f, 0.089314f, -0.106101f, 0.090404f, 0.119475f, -0.161294f, -0.151619f, -0.064840f, -0.389423f, -0.515806f, -0.324330f, -0.456106f, -0.608368f, -0.423738f, -0.434222f, -0.560489f, -0.443978f, -0.307701f, -0.334169f, -0.199705f, 0.017611f, 0.123433f, 0.268679f, 0.441093f, 0.549430f, 0.677483f, 0.752218f, 0.822478f, 0.871573f, 0.783055f, 0.614924f, 0.568506f, 0.363410f, 0.109266f, 0.084969f, -0.059519f, -0.282115f, -0.221394f, -0.095280f, -0.209849f, -0.216339f, -0.046607f, - -0.153027f, -0.290934f, -0.176888f, -0.128263f, -0.261089f, -0.222035f, -0.080093f, -0.197564f, -0.235052f, -0.020245f, -0.013963f, -0.106635f, 0.039238f, 0.022452f, -0.171305f, -0.127061f, -0.075226f, -0.242347f, -0.333816f, -0.272891f, -0.372635f, -0.460982f, -0.343240f, -0.275672f, -0.262293f, -0.115960f, 0.049993f, 0.135377f, 0.201406f, 0.279929f, 0.315543f, 0.283225f, 0.369429f, 0.475201f, 0.491971f, 0.459757f, 0.467538f, 0.451348f, 0.365031f, 0.413256f, 0.371976f, 0.157889f, 0.016527f, -0.096639f, -0.208690f, -0.219812f, -0.182897f, -0.214572f, -0.210776f, -0.182796f, -0.181363f, -0.192518f, -0.160191f, -0.143456f, -0.138372f, -0.130832f, -0.103784f, -0.098683f, -0.103513f, -0.084337f, -0.060950f, -0.057591f, -0.047088f, -0.026566f, -0.016530f, -0.014126f, 0.005912f, 0.007798f, 0.004794f, 0.011065f, 0.021918f, 0.019143f, 0.024134f, 0.028874f, 0.024883f, 0.016074f, 0.010412f, 0.006425f, 0.007353f, 0.004932f, 0.006680f, 0.005033f, -0.001833f, -0.009732f, -0.006318f, -0.000293f, 0.010329f, 0.024285f, 0.039459f, 0.040835f, 0.046299f, 0.055967f, 0.060658f, 0.064281f, 0.075792f, 0.071950f, - 0.061180f, 0.055112f, 0.052236f, 0.037219f, 0.031918f, 0.029533f, 0.017437f, 0.004718f, 0.005956f, -0.004581f, -0.017439f, -0.025774f, -0.037400f, -0.056264f, -0.061761f, -0.064479f, -0.067295f, -0.069993f, -0.063868f, -0.061394f, -0.057203f, -0.048540f, -0.036028f, -0.030887f, -0.021823f, -0.015390f, -0.013210f, -0.009405f, -0.000765f, 0.003093f, 0.009595f, 0.012877f, 0.017108f, 0.018581f, 0.020498f, 0.020688f, 0.021726f, 0.018301f, 0.017753f, 0.015354f, 0.014098f, 0.010985f, 0.010959f, 0.008312f, 0.007809f, 0.005436f, 0.005448f, 0.003051f, 0.003119f, 0.001340f, 0.001896f, 0.000183f, 0.000786f} - }, - { - {0.007617f, 0.018013f, 0.000370f, 0.000677f, -0.008576f, -0.006981f, 0.005276f, 0.003120f, 0.000531f, 0.007308f, -0.011080f, -0.003857f, 0.018108f, 0.001154f, 0.003571f, -0.004826f, -0.006042f, 0.008410f, 0.007152f, -0.003055f, 0.007039f, 0.000217f, 0.001190f, -0.006966f, 0.002529f, -0.006351f, -0.004844f, -0.006239f, 0.002144f, 0.000167f, -0.001958f, -0.000775f, 0.002157f, 0.005287f, -0.002519f, -0.009896f, 0.000216f, -0.007079f, -0.008897f, -0.002429f, 0.004079f, -0.001459f, 0.003645f, 0.002203f, 0.003345f, -0.001493f, -0.001213f, -0.001766f, -0.001402f, 0.002938f, -0.000059f, 0.006128f, -0.000790f, 0.007608f, 0.001325f, 0.001657f, 0.007364f, 0.002525f, 0.001920f, 0.009384f, -0.003804f, 0.003047f, -0.003245f, -0.006779f, 0.006191f, -0.002304f, 0.000063f, 0.002185f, -0.001078f, -0.005644f, -0.001669f, 0.003917f, -0.002547f, -0.000226f, -0.005353f, 0.002522f, 0.000405f, -0.003688f, 0.000480f, -0.005833f, 0.000908f, -0.005599f, -0.000452f, -0.000162f, -0.000697f, 0.003102f, 0.001581f, 0.000751f, 0.001797f, -0.000688f, 0.003262f, 0.002250f, -0.000223f, 0.000631f, 0.000759f, -0.000204f, - 0.000157f, 0.000982f, -0.001310f, 0.000653f, -0.001685f, 0.001388f, 0.000199f, -0.000359f, -0.000035f, 0.001132f, 0.000354f, -0.001216f, 0.000430f, -0.000149f, -0.000612f, -0.001793f, -0.023732f, -0.012311f, -0.005550f, -0.005140f, -0.000030f, 0.000070f, 0.001757f, 0.000346f, -0.001337f, -0.009709f, -0.004414f, -0.009949f, -0.015604f, -0.013020f, 0.007353f, 0.009086f, 0.009176f, -0.003602f, -0.001089f, -0.001019f, -0.002051f, 0.003395f, 0.001413f, -0.003302f, -0.007069f, 0.005111f, 0.004350f, 0.006382f, 0.001668f, -0.002121f, -0.003867f, 0.001827f, 0.003044f, -0.000702f, 0.006470f, -0.003121f, -0.000174f, 0.006307f, -0.004799f, -0.007604f, 0.000617f, 0.010581f, 0.002435f, 0.002364f, 0.001488f, 0.000122f, 0.001364f, -0.001601f, 0.001890f, -0.008305f, 0.001373f, 0.008687f, -0.001967f, 0.000163f, 0.000874f, -0.002917f, -0.001636f, -0.001162f, -0.001390f, -0.002276f, 0.005313f, -0.004928f, 0.005215f, 0.004467f, 0.009739f, -0.000632f, 0.005485f, 0.012450f, -0.002265f, -0.009954f, -0.011183f, -0.000493f, -0.001439f, 0.000652f, -0.009485f, 0.002808f, -0.006650f, -0.004919f, 0.002316f, 0.006994f, - -0.002826f, -0.005246f, -0.006309f, -0.001185f, -0.000662f, 0.001803f, 0.000597f, 0.004046f, 0.002398f, -0.000164f, 0.002053f, 0.000639f, 0.003978f, 0.003038f, 0.001915f, 0.000917f, 0.000903f, -0.000628f, 0.002680f, 0.000190f, 0.000837f, -0.000258f, 0.000104f, -0.001921f, 0.000049f, -0.000316f, 0.016601f, 0.012889f, 0.005646f, 0.006553f, -0.004187f, 0.002905f, 0.011516f, 0.005488f, 0.012394f, -0.004879f, 0.005067f, 0.006942f, -0.000236f, 0.008928f, -0.004550f, 0.005548f, 0.001147f, -0.005859f, -0.001347f, -0.001178f, -0.000241f, -0.001725f, 0.000794f, -0.002983f, 0.001027f, -0.002206f, 0.011350f, -0.002670f, -0.000498f, -0.000116f, -0.004945f, -0.014364f, 0.008246f, -0.003474f, 0.003260f, -0.005757f, -0.005242f, -0.006152f, -0.003898f, 0.003625f, 0.010897f, 0.008412f, 0.003703f, -0.000699f, -0.002189f, 0.003332f, 0.007869f, -0.001806f, -0.002416f, 0.009503f, -0.004122f, 0.004505f, -0.004652f, -0.003836f, -0.002163f, 0.003482f, 0.003928f, -0.006827f, -0.004508f, 0.000096f, 0.007338f, 0.009247f, 0.005198f, 0.007188f, -0.000870f, 0.006727f, 0.002813f, 0.007070f, -0.003897f, 0.002781f, - 0.016513f, 0.007542f, 0.007087f, -0.001773f, -0.004469f, -0.011261f, 0.006621f, 0.002700f, -0.004471f, -0.004721f, -0.001380f, 0.003315f, -0.003253f, -0.001660f, -0.002913f, 0.000009f, 0.002485f, -0.001090f, -0.004456f, 0.001236f, 0.001730f, 0.002545f, 0.002869f, 0.000277f, 0.004004f, 0.001805f, 0.001751f, 0.001097f, -0.001117f, 0.002626f, 0.000401f, -0.000106f, -0.001174f, -0.002112f, -0.002059f, 0.000441f, 0.001737f, 0.000558f, 0.000254f, 0.000392f, 0.000020f, 0.002348f, -0.003190f, -0.000894f, 0.001167f, -0.001434f, 0.001493f, 0.005024f, 0.018937f, 0.002697f, 0.006870f, 0.013714f, 0.000257f, -0.007845f, -0.003368f, -0.002359f, 0.000534f, -0.004947f, -0.013470f, 0.005395f, 0.000443f, 0.000282f, 0.005615f, -0.008941f, -0.004140f, 0.014049f, -0.003462f, -0.005325f, -0.008348f, 0.000270f, -0.007892f, -0.001332f, -0.002648f, -0.002387f, 0.000986f, 0.011340f, -0.000392f, -0.003587f, 0.003305f, -0.009056f, 0.012088f, -0.001571f, -0.002756f, 0.015122f, -0.008762f, 0.000692f, -0.010349f, -0.004746f, 0.000841f, 0.000450f, 0.003925f, 0.004749f, -0.009245f, 0.002707f, 0.003813f, 0.003103f, - 0.000838f, 0.004308f, 0.003107f, 0.006306f, -0.005876f, -0.003152f, 0.011903f, -0.005015f, 0.004515f, 0.001097f, 0.003379f, 0.003044f, -0.001076f, -0.004097f, -0.000688f, 0.008398f, -0.005090f, -0.000607f, -0.002737f, 0.001907f, 0.007471f, -0.004287f, -0.009475f, -0.018218f, 0.001062f, -0.000803f, -0.001639f, 0.000017f, -0.007063f, -0.004951f, -0.010212f, -0.004049f, 0.004961f, -0.000229f, 0.003054f, -0.001266f, 0.006225f, 0.004311f, -0.000148f, 0.003214f, -0.000346f, -0.000456f, 0.002096f, -0.004007f, -0.002202f, -0.003266f, -0.000121f, -0.003888f, 0.002177f, -0.000208f, 0.000982f, -0.001489f, -0.001333f, -0.000232f, -0.001483f, 0.000807f, 0.001329f, -0.003612f, 0.001577f, 0.001359f, 0.000719f, -0.003449f, 0.001673f, 0.001121f, 0.003071f, 0.003285f, -0.000426f, -0.001241f, -0.001886f, 0.001599f, -0.001015f, -0.000702f, 0.000501f, -0.000551f, -0.002236f, -0.008266f, -0.020224f, 0.010189f, -0.006607f, -0.011634f, 0.000588f, -0.021786f, 0.004748f, 0.006568f, -0.002334f, 0.015789f, -0.006014f, -0.019176f, 0.004638f, 0.007174f, -0.006595f, -0.013590f, 0.023145f, -0.001529f, -0.001330f, 0.005789f, - -0.005058f, -0.003038f, 0.002406f, -0.011387f, 0.006674f, -0.001283f, 0.003310f, -0.002452f, 0.010845f, -0.002818f, 0.006099f, 0.005234f, -0.010626f, -0.005322f, -0.005971f, 0.011002f, -0.005480f, -0.003406f, 0.008469f, -0.003034f, -0.006230f, 0.004793f, 0.015499f, -0.007950f, 0.007574f, -0.008212f, 0.010204f, -0.005708f, 0.005397f, 0.000924f, -0.005426f, -0.015929f, 0.008891f, 0.011290f, -0.001024f, -0.003747f, 0.006595f, 0.007878f, 0.007800f, -0.011004f, -0.001198f, -0.009723f, -0.000839f, 0.003262f, -0.006661f, 0.002460f, 0.007585f, -0.008147f, -0.000124f, 0.001415f, -0.007626f, -0.005730f, 0.007242f, -0.005275f, 0.005737f, -0.003483f, -0.009808f, 0.001864f, -0.009507f, 0.002336f, -0.003561f, 0.003194f, -0.010475f, 0.009560f, -0.007879f, 0.000836f, -0.007320f, -0.000415f, -0.000390f, 0.001823f, -0.000712f, -0.000225f, -0.002240f, 0.002381f, -0.007067f, 0.002319f, -0.005775f, -0.004894f, 0.000210f, 0.004106f, 0.002118f, 0.000601f, 0.001418f, 0.000077f, 0.002642f, 0.005270f, -0.004514f, 0.004345f, -0.002886f, -0.000825f, 0.002983f, 0.002096f, -0.003176f, -0.000247f, -0.008216f, 0.010372f, - -0.011428f, -0.011331f, -0.019438f, 0.008179f, 0.020516f, 0.003120f, -0.003701f, -0.001782f, -0.003476f, 0.017870f, -0.010745f, -0.009782f, -0.002332f, -0.010785f, -0.003335f, -0.011718f, -0.005080f, -0.008231f, -0.016286f, -0.004581f, -0.003613f, -0.000589f, -0.001815f, 0.004200f, 0.009670f, 0.003444f, 0.004773f, -0.014960f, 0.001820f, -0.000266f, -0.004711f, 0.005159f, 0.002731f, -0.004383f, -0.001959f, -0.010662f, -0.011827f, -0.001751f, 0.013041f, -0.003862f, -0.006759f, -0.001471f, -0.004397f, -0.009217f, 0.000120f, -0.009625f, 0.019583f, 0.016514f, 0.004245f, -0.005091f, -0.004631f, 0.001695f, 0.002916f, 0.003351f, 0.003194f, -0.001234f, 0.007264f, -0.006968f, 0.003191f, -0.006137f, 0.000148f, -0.000115f, 0.004059f, 0.002822f, 0.009166f, -0.004036f, -0.005698f, -0.005208f, -0.021351f, 0.000614f, 0.004396f, -0.002206f, 0.007681f, 0.003286f, -0.006456f, 0.001797f, -0.011230f, -0.004217f, 0.000882f, 0.008505f, 0.003604f, 0.011658f, 0.002308f, -0.001472f, 0.000020f, 0.004275f, -0.004903f, -0.000687f, 0.001070f, -0.002088f, 0.002948f, -0.004282f, 0.002157f, -0.003283f, -0.002670f, -0.000606f, - -0.003644f, -0.003605f, -0.004448f, -0.002403f, -0.001337f, 0.003205f, 0.002688f, -0.003351f, -0.004709f, -0.001512f, -0.003615f, 0.002371f, -0.004027f, 0.001850f, -0.002366f, -0.000758f, 0.003906f, 0.000171f, 0.003258f, 0.002152f, -0.002132f, -0.002076f, -0.020251f, 0.003440f, 0.020258f, 0.019466f, -0.020908f, -0.018715f, 0.004693f, -0.014854f, -0.008184f, 0.002345f, -0.001250f, -0.005966f, 0.015325f, 0.007050f, -0.022075f, -0.001607f, 0.001105f, -0.000039f, 0.013781f, 0.005360f, -0.010363f, 0.014879f, 0.005288f, 0.002093f, -0.008088f, -0.008248f, 0.006099f, -0.005239f, -0.015017f, -0.002553f, -0.002130f, -0.006476f, -0.009042f, -0.011810f, 0.012530f, 0.001039f, 0.001687f, -0.008138f, 0.000012f, 0.009169f, -0.007310f, -0.014898f, -0.015438f, 0.016141f, 0.003403f, 0.015245f, -0.002598f, 0.004468f, 0.010933f, 0.022781f, 0.007117f, -0.002705f, -0.011749f, -0.004827f, -0.005953f, 0.003576f, 0.001034f, -0.008880f, -0.003853f, 0.013301f, 0.009108f, 0.018023f, 0.008183f, -0.012238f, -0.012029f, 0.014934f, 0.007680f, -0.007649f, -0.000102f, 0.015378f, 0.001000f, -0.000726f, -0.012034f, 0.013215f, - 0.009614f, -0.002201f, 0.018023f, -0.002599f, -0.005441f, -0.018912f, -0.002705f, 0.001075f, 0.009947f, -0.013016f, -0.001003f, 0.005984f, -0.003400f, -0.009332f, -0.009061f, -0.001077f, -0.001074f, -0.001611f, -0.011279f, -0.009687f, -0.006004f, 0.003659f, -0.000398f, -0.004394f, -0.001703f, -0.000493f, 0.000792f, 0.001040f, 0.001463f, -0.000825f, 0.003552f, -0.002957f, -0.000962f, 0.000209f, -0.002391f, -0.007216f, 0.000306f, 0.004378f, -0.001513f, -0.006357f, 0.000374f, -0.001440f, 0.002127f, 0.000501f, -0.000999f, -0.000456f, 0.001950f, -0.000873f, 0.003761f, 0.002164f, -0.000304f, -0.003456f, 0.002485f, -0.002697f, 0.002512f, 0.003337f, -0.008211f, 0.003246f, -0.003072f, -0.001662f, 0.010047f, -0.016748f, 0.010064f, -0.010985f, 0.001977f, 0.008767f, -0.000119f, -0.004473f, 0.003276f, -0.011506f, 0.000451f, -0.008967f, -0.025991f, -0.007968f, 0.010980f, 0.007090f, 0.003989f, -0.006345f, 0.005284f, 0.002347f, 0.027718f, 0.004733f, -0.009421f, 0.010285f, 0.002001f, 0.002159f, 0.018412f, -0.005360f, -0.005232f, 0.006367f, -0.013050f, 0.015591f, 0.014399f, -0.000401f, 0.008124f, -0.003105f, - -0.008013f, -0.001108f, -0.010059f, 0.000766f, -0.009852f, 0.003751f, -0.000195f, 0.002752f, 0.001073f, -0.016889f, -0.003520f, -0.002249f, 0.000874f, -0.008554f, 0.003607f, 0.003646f, -0.003292f, 0.022087f, -0.009748f, -0.019797f, 0.011700f, 0.019301f, 0.004336f, 0.004922f, -0.008629f, 0.016546f, -0.005745f, 0.002706f, 0.007405f, 0.002090f, -0.007612f, 0.007844f, 0.003365f, 0.000859f, -0.000124f, -0.015293f, -0.005442f, 0.007364f, 0.013425f, -0.005328f, -0.010062f, -0.013926f, -0.004584f, 0.004558f, 0.002475f, 0.006820f, -0.017136f, 0.003116f, 0.011412f, 0.001417f, -0.000739f, 0.004306f, -0.003636f, -0.002035f, -0.000552f, -0.001023f, 0.005950f, -0.001793f, 0.001840f, -0.001892f, -0.001326f, -0.001415f, -0.004440f, -0.002556f, 0.001991f, -0.003159f, 0.004070f, -0.000760f, -0.000827f, -0.002109f, -0.002533f, -0.013054f, 0.001139f, 0.006822f, -0.000430f, 0.002311f, -0.001329f, 0.004187f, 0.001362f, -0.002643f, -0.003073f, 0.002295f, 0.056513f, -0.015419f, 0.000251f, -0.005619f, -0.003710f, -0.012520f, -0.000374f, -0.033075f, 0.017137f, -0.011830f, -0.000929f, 0.019284f, 0.009390f, -0.012648f, - -0.013760f, -0.005029f, -0.011780f, 0.010642f, -0.027525f, 0.005153f, 0.011271f, 0.015785f, 0.002994f, 0.004766f, 0.000539f, 0.002644f, -0.003722f, -0.008538f, -0.025168f, -0.003620f, 0.003080f, 0.011617f, -0.009133f, 0.011205f, 0.004236f, -0.004482f, -0.001715f, 0.008696f, -0.009186f, -0.008505f, -0.005050f, -0.006481f, -0.001086f, -0.022116f, -0.010495f, -0.005219f, -0.000734f, 0.017663f, 0.003820f, 0.016855f, 0.005663f, -0.000691f, -0.010654f, 0.001362f, 0.000928f, 0.002634f, 0.005690f, 0.023597f, 0.002633f, -0.021941f, 0.005568f, -0.008557f, -0.000732f, -0.008228f, -0.009414f, -0.004279f, 0.008891f, 0.005909f, -0.039116f, -0.014558f, -0.011721f, 0.007466f, -0.001797f, -0.008296f, -0.005492f, 0.022092f, -0.009161f, 0.016993f, -0.016056f, -0.011903f, -0.017376f, -0.009335f, -0.018463f, -0.002793f, 0.024387f, 0.005811f, -0.003076f, 0.003006f, 0.010298f, -0.000136f, 0.012722f, -0.007156f, 0.004830f, 0.007256f, 0.008593f, 0.003516f, -0.001658f, -0.016924f, -0.006425f, -0.008657f, 0.000005f, 0.005582f, 0.004636f, -0.003365f, -0.001345f, 0.007245f, 0.002862f, -0.005535f, -0.002473f, -0.003859f, - -0.001855f, 0.000388f, 0.003581f, -0.002905f, -0.003035f, 0.009202f, 0.007584f, 0.002510f, -0.001194f, 0.003385f, 0.006188f, 0.000549f, -0.005697f, -0.000466f, -0.005809f, 0.001547f, -0.005225f, 0.003114f, 0.009364f, -0.002945f, -0.008668f, -0.009573f, 0.007161f, -0.017733f, 0.001103f, -0.041355f, 0.010062f, -0.013560f, 0.004042f, -0.014095f, -0.030487f, -0.004725f, -0.007094f, 0.021613f, 0.009177f, 0.007764f, -0.000730f, 0.028692f, -0.021587f, 0.005244f, 0.008156f, 0.022160f, -0.025570f, -0.014618f, -0.005070f, 0.002081f, -0.001721f, -0.007290f, -0.002385f, 0.007635f, -0.013778f, 0.002782f, 0.008130f, -0.001609f, 0.001096f, -0.011144f, -0.012741f, -0.007912f, 0.034325f, 0.000278f, -0.008368f, 0.013324f, -0.008268f, -0.017315f, -0.014176f, -0.009402f, -0.002503f, 0.006054f, 0.001250f, 0.001149f, 0.019047f, 0.017392f, -0.003170f, 0.006171f, 0.004182f, -0.022072f, -0.015147f, -0.001001f, -0.001789f, -0.005814f, -0.015055f, 0.018414f, 0.022269f, -0.018331f, 0.012010f, 0.011254f, -0.003606f, -0.017526f, -0.028239f, -0.027397f, -0.021122f, -0.012479f, -0.024378f, 0.002158f, -0.019966f, 0.011886f, - 0.010713f, 0.001712f, 0.000196f, -0.034080f, 0.002180f, 0.000564f, 0.002459f, -0.017506f, 0.005807f, 0.019254f, 0.002550f, 0.004827f, -0.015459f, -0.009627f, -0.001946f, -0.016319f, 0.003724f, 0.010018f, -0.004853f, -0.006119f, -0.007521f, 0.006217f, 0.010230f, -0.018120f, -0.009933f, -0.000991f, 0.011956f, 0.004352f, -0.005315f, 0.004113f, -0.000705f, -0.000307f, 0.005334f, -0.003582f, 0.006893f, -0.008117f, -0.002898f, 0.005714f, 0.005001f, -0.002116f, 0.013421f, 0.000733f, -0.008555f, -0.007331f, -0.001302f, -0.006066f, -0.005450f, 0.000579f, 0.003715f, -0.002667f, -0.002856f, -0.016910f, -0.014216f, -0.009839f, -0.011129f, -0.003511f, -0.025256f, 0.001098f, 0.027531f, -0.009738f, 0.014484f, -0.005833f, 0.027445f, 0.023248f, 0.009569f, -0.028600f, -0.007394f, 0.038116f, -0.009937f, 0.028244f, 0.004350f, -0.027167f, -0.013833f, 0.031915f, 0.000597f, -0.021548f, 0.000410f, -0.018381f, -0.002618f, 0.006431f, 0.002527f, -0.003725f, -0.031966f, -0.028366f, 0.007716f, 0.020423f, -0.018303f, -0.001665f, 0.007886f, -0.001429f, 0.003030f, 0.033964f, 0.006166f, 0.004895f, 0.002848f, 0.011187f, - -0.015163f, -0.010736f, -0.007830f, -0.035923f, -0.012267f, -0.013520f, -0.009381f, 0.009404f, 0.006232f, -0.002330f, -0.003663f, -0.014248f, -0.021587f, 0.028000f, -0.006135f, -0.024717f, -0.011640f, 0.004955f, 0.018710f, -0.014956f, -0.004751f, -0.015869f, -0.003055f, -0.018949f, -0.003723f, -0.004081f, -0.038051f, 0.003429f, -0.012872f, 0.026248f, -0.006859f, -0.021426f, -0.040355f, -0.026606f, -0.005103f, 0.003295f, 0.014066f, -0.010464f, -0.009602f, -0.021987f, 0.020024f, 0.033911f, 0.003531f, -0.004063f, 0.011497f, -0.008905f, 0.012721f, -0.009609f, -0.004683f, 0.004342f, 0.009717f, 0.007021f, -0.011913f, 0.000390f, 0.002425f, -0.000176f, -0.000896f, -0.002996f, 0.003162f, 0.012043f, -0.005100f, -0.010606f, -0.000508f, -0.002381f, 0.005478f, -0.000086f, 0.011676f, 0.000819f, 0.004242f, 0.000425f, -0.007231f, 0.001899f, -0.002924f, 0.012604f, 0.000684f, -0.007995f, -0.001569f, -0.001918f, 0.008368f, 0.000869f, -0.009275f, -0.001378f, 0.006432f, -0.002956f, 0.001522f, 0.013241f, -0.046533f, -0.023611f, -0.016075f, -0.025293f, -0.013692f, -0.010291f, -0.026434f, 0.027783f, -0.008117f, 0.041884f, - -0.021193f, -0.031421f, -0.006241f, -0.021059f, 0.035851f, -0.012268f, -0.019068f, -0.008672f, 0.009536f, 0.018393f, 0.015594f, -0.003684f, -0.004326f, -0.008128f, 0.003859f, 0.029758f, -0.000894f, 0.002945f, -0.009649f, -0.003625f, -0.015628f, -0.004954f, 0.006782f, 0.005227f, -0.012937f, 0.000740f, -0.019094f, 0.003936f, -0.005776f, -0.005556f, 0.007657f, 0.003742f, -0.008944f, -0.003414f, 0.016133f, 0.006233f, -0.013541f, -0.017556f, 0.029431f, -0.001272f, -0.047116f, 0.024596f, -0.005311f, -0.019842f, 0.009379f, -0.002767f, 0.002064f, -0.004448f, 0.016263f, 0.006456f, 0.001584f, 0.045301f, 0.044500f, -0.015607f, 0.004779f, -0.033391f, -0.007213f, -0.006315f, 0.014150f, -0.005003f, 0.002226f, 0.013896f, -0.010230f, 0.025929f, -0.010992f, 0.002967f, -0.035031f, 0.014645f, -0.009182f, -0.024326f, 0.012198f, -0.005525f, 0.049115f, 0.011851f, 0.009294f, 0.018339f, 0.001951f, -0.017038f, -0.001454f, -0.006944f, -0.004309f, 0.005073f, -0.006177f, 0.010167f, 0.006062f, -0.007373f, 0.012455f, 0.007256f, -0.008310f, -0.002007f, 0.000668f, 0.001422f, -0.003458f, 0.002836f, 0.004316f, -0.001023f, - -0.003769f, 0.001021f, 0.003829f, 0.002482f, 0.002880f, -0.007741f, 0.007951f, -0.015669f, 0.013997f, -0.009134f, -0.005527f, -0.000893f, 0.007260f, 0.010672f, 0.002727f, -0.011842f, 0.000037f, -0.004664f, -0.002969f, 0.003085f, -0.011647f, -0.020804f, 0.006101f, 0.055965f, -0.041977f, -0.013235f, -0.026583f, -0.017444f, 0.021096f, -0.023911f, 0.051181f, -0.005825f, 0.015622f, 0.003034f, 0.012423f, -0.031648f, 0.005824f, 0.008560f, -0.002365f, -0.004587f, -0.002805f, 0.009618f, -0.019570f, -0.011655f, -0.002778f, -0.005326f, -0.024184f, -0.021263f, -0.005763f, -0.009714f, 0.029212f, -0.007387f, -0.013848f, -0.009781f, 0.010045f, -0.014776f, -0.006350f, -0.025739f, 0.012165f, -0.009689f, 0.010722f, -0.008957f, 0.013634f, -0.006718f, -0.044790f, -0.022581f, 0.006621f, -0.003253f, -0.002735f, -0.013730f, -0.026671f, -0.001289f, 0.011760f, 0.008150f, -0.006059f, 0.009045f, 0.013731f, 0.042730f, -0.018214f, 0.020379f, -0.047799f, 0.003270f, 0.007028f, -0.005421f, -0.013726f, 0.009958f, 0.001804f, 0.002480f, 0.010744f, 0.034035f, 0.022921f, 0.017574f, -0.009045f, -0.010625f, 0.016721f, -0.020079f, - 0.005020f, 0.017364f, -0.012094f, 0.042525f, -0.000638f, 0.013395f, -0.011512f, 0.024651f, -0.023175f, -0.022554f, 0.000761f, 0.008841f, -0.010460f, -0.002267f, 0.026406f, 0.000536f, 0.024045f, 0.009077f, -0.003694f, -0.003502f, -0.013688f, -0.000806f, -0.000703f, 0.007081f, -0.000866f, -0.010715f, 0.001940f, 0.005263f, 0.013650f, -0.019576f, 0.003461f, -0.009780f, 0.004232f, 0.011675f, -0.003856f, 0.000011f, -0.010349f, 0.003747f, 0.003912f, -0.006398f, -0.023909f, -0.014660f, -0.009424f, 0.004987f, -0.012611f, -0.006845f, -0.008441f, -0.007256f, 0.004867f, 0.009607f, -0.000210f, 0.008036f, 0.003006f, 0.004455f, 0.001464f, -0.016944f, 0.014754f, -0.012404f, 0.022793f, 0.065704f, 0.047176f, -0.012949f, -0.028937f, -0.020233f, 0.040483f, -0.048061f, 0.002915f, -0.012470f, -0.011335f, 0.019113f, -0.034595f, 0.004273f, -0.017525f, -0.000832f, -0.023967f, -0.019155f, 0.003186f, 0.000878f, 0.001327f, -0.023884f, 0.037786f, 0.007186f, -0.016406f, 0.006387f, -0.004605f, 0.002885f, 0.056162f, 0.017230f, -0.015245f, -0.014123f, 0.003047f, 0.016908f, 0.005008f, -0.042151f, -0.009942f, -0.029269f, - -0.009304f, -0.013925f, 0.014430f, -0.008202f, -0.003636f, -0.000698f, -0.001110f, -0.020888f, -0.023437f, 0.015053f, -0.008677f, 0.003762f, -0.000792f, 0.020348f, -0.016553f, -0.012501f, 0.005609f, 0.008245f, -0.022021f, 0.024497f, -0.015309f, -0.036824f, -0.033604f, -0.012573f, -0.009421f, -0.015161f, -0.007287f, -0.052174f, 0.018573f, -0.025000f, -0.007474f, -0.020950f, 0.028986f, 0.008847f, 0.014031f, -0.000481f, -0.004091f, -0.025488f, -0.007255f, 0.033289f, -0.027498f, 0.040437f, 0.031551f, 0.010499f, -0.007063f, 0.000933f, -0.005472f, 0.005397f, -0.017777f, -0.015028f, -0.008718f, 0.002005f, -0.002170f, 0.002105f, 0.007945f, -0.013630f, -0.002962f, 0.012725f, 0.014086f, -0.005922f, 0.008871f, -0.007827f, -0.011504f, -0.005720f, -0.003411f, 0.008244f, 0.002641f, 0.002783f, -0.011377f, -0.008163f, 0.004310f, -0.004841f, 0.004027f, 0.004345f, 0.008569f, 0.015867f, 0.006799f, 0.008678f, -0.010752f, -0.006862f, -0.003512f, 0.004309f, -0.005098f, 0.001697f, -0.004700f, 0.001795f, 0.016902f, 0.007334f, 0.004774f, -0.003712f, 0.010728f, 0.002797f, -0.004101f, -0.065405f, -0.007850f, 0.043225f, - -0.053039f, -0.021393f, -0.001063f, -0.016484f, 0.019542f, -0.011245f, 0.060444f, -0.006202f, -0.012854f, -0.010108f, -0.002422f, 0.017511f, -0.011724f, -0.011736f, 0.049376f, -0.036104f, -0.004133f, 0.011347f, -0.007711f, 0.030661f, 0.017586f, -0.002215f, -0.003607f, 0.012985f, 0.017719f, 0.018955f, 0.015840f, 0.032468f, 0.010619f, 0.013948f, 0.008720f, -0.010590f, 0.054676f, 0.006821f, 0.010418f, 0.013731f, 0.008358f, 0.039267f, -0.002551f, 0.009681f, 0.013799f, 0.011346f, 0.006676f, 0.025911f, -0.015088f, -0.012384f, 0.026060f, -0.004748f, -0.025791f, -0.006694f, -0.045285f, -0.015493f, -0.008484f, 0.043115f, -0.040551f, -0.005279f, 0.002036f, -0.001401f, -0.002083f, 0.025427f, 0.069918f, -0.012156f, 0.009006f, 0.007966f, 0.010836f, 0.033231f, -0.035737f, -0.036973f, -0.033329f, 0.059315f, 0.004672f, -0.022308f, 0.054745f, -0.020765f, 0.047768f, -0.025558f, 0.018509f, 0.002015f, -0.062848f, -0.009171f, -0.015489f, 0.018097f, -0.001006f, -0.005432f, 0.000713f, 0.011381f, -0.001385f, -0.019139f, 0.010633f, 0.000296f, -0.008620f, -0.000164f, -0.016486f, 0.022613f, -0.002109f, 0.008130f, - -0.010401f, -0.009671f, -0.009259f, -0.012812f, -0.000874f, 0.000386f, 0.021898f, -0.000955f, 0.002733f, -0.008611f, 0.002757f, -0.020418f, 0.006865f, -0.019678f, -0.003286f, -0.004239f, -0.017228f, 0.009346f, -0.013559f, -0.013987f, 0.003461f, -0.019517f, 0.006391f, 0.015640f, 0.014973f, -0.007336f, -0.006481f, 0.003784f, 0.006317f, 0.013602f, 0.017734f, 0.001016f, 0.038882f, 0.003258f, -0.038662f, -0.114718f, 0.023194f, -0.027749f, -0.043984f, 0.049328f, -0.029437f, -0.015541f, -0.043310f, 0.011060f, -0.008357f, -0.042828f, -0.013518f, -0.025531f, 0.012214f, -0.023662f, 0.001464f, 0.008883f, 0.019473f, 0.009508f, 0.032760f, 0.004876f, 0.000095f, -0.003600f, -0.026976f, -0.021195f, -0.019112f, 0.015501f, 0.024577f, 0.011047f, 0.008953f, -0.000926f, 0.009700f, 0.018786f, 0.044661f, -0.021216f, -0.011336f, 0.007548f, -0.019800f, 0.021104f, 0.004976f, -0.019626f, 0.045451f, 0.016245f, -0.037628f, 0.014777f, -0.036183f, 0.004101f, 0.007323f, 0.019009f, -0.010036f, -0.012563f, 0.057699f, 0.022061f, -0.024316f, 0.014753f, 0.030688f, -0.023751f, -0.049659f, 0.027555f, -0.003670f, -0.000784f, - 0.004460f, 0.011968f, 0.077958f, -0.007425f, 0.010062f, 0.014666f, 0.000110f, 0.017638f, 0.010784f, -0.041375f, 0.009101f, -0.022103f, -0.018789f, -0.011724f, 0.009750f, -0.066695f, -0.007732f, 0.020575f, 0.003655f, 0.032877f, -0.023935f, 0.023237f, -0.015509f, -0.007136f, -0.008573f, 0.010310f, 0.004968f, -0.008318f, 0.000428f, -0.000186f, -0.011421f, 0.009235f, -0.014513f, 0.015479f, 0.002459f, 0.010732f, 0.009644f, -0.006890f, -0.005167f, 0.002577f, -0.003782f, 0.002110f, 0.003993f, -0.006696f, -0.002000f, -0.007671f, -0.004906f, -0.005092f, -0.012976f, 0.000083f, 0.002214f, 0.007591f, -0.003944f, 0.007305f, 0.018453f, -0.009657f, 0.003312f, -0.009690f, 0.005130f, 0.005575f, -0.014901f, -0.000013f, 0.005237f, -0.014582f, -0.006825f, 0.012358f, 0.000455f, 0.002315f, 0.003108f, 0.000295f, 0.000342f, -0.035391f, -0.040758f, 0.087421f, 0.018691f, -0.005618f, -0.010518f, 0.019748f, 0.078996f, 0.036273f, 0.009476f, -0.002239f, 0.026511f, 0.066011f, 0.016453f, 0.022801f, 0.020617f, 0.047093f, -0.030260f, 0.030532f, 0.013604f, -0.090211f, 0.026819f, -0.012683f, 0.026850f, -0.028024f, - 0.021323f, 0.014199f, 0.028143f, -0.000117f, 0.012000f, 0.004509f, -0.025514f, 0.012894f, 0.025522f, -0.021191f, 0.012893f, -0.020566f, -0.012318f, 0.064872f, 0.006755f, 0.057461f, -0.040640f, 0.018001f, -0.001935f, -0.008046f, -0.001123f, -0.004817f, 0.009074f, 0.021180f, 0.014748f, -0.001418f, 0.032931f, -0.052020f, -0.049022f, 0.035891f, -0.027814f, -0.007019f, -0.006356f, -0.033555f, 0.017225f, -0.008687f, 0.009819f, 0.005454f, 0.055698f, 0.027169f, 0.029462f, 0.011213f, 0.008078f, -0.050219f, -0.011380f, 0.025069f, -0.000233f, 0.000887f, 0.000199f, -0.015928f, -0.043645f, 0.008671f, 0.004314f, -0.032585f, 0.004907f, -0.015506f, -0.012719f, 0.014087f, 0.009562f, 0.050094f, -0.006858f, 0.012969f, 0.012183f, -0.009274f, -0.012574f, -0.001079f, -0.011932f, -0.004388f, 0.029638f, 0.012592f, 0.005616f, 0.001807f, -0.000231f, 0.001049f, -0.000054f, -0.001393f, -0.019591f, -0.005726f, 0.012499f, -0.003113f, 0.001566f, -0.007010f, -0.009711f, -0.003721f, 0.003589f, 0.024198f, -0.015502f, -0.014941f, 0.014379f, 0.007273f, -0.017441f, 0.012992f, 0.007978f, -0.012218f, 0.016308f, 0.001748f, - -0.009124f, -0.004004f, -0.006188f, -0.002548f, -0.002628f, 0.008357f, 0.004423f, 0.004415f, 0.009505f, 0.013636f, 0.010237f, -0.002073f, 0.007427f, 0.023246f, -0.079767f, 0.068154f, -0.029021f, 0.013933f, 0.043209f, -0.062740f, -0.002166f, -0.004488f, 0.014935f, 0.024742f, 0.027034f, 0.048433f, 0.007539f, -0.029482f, 0.016369f, 0.051543f, -0.072172f, -0.041119f, 0.047724f, 0.003568f, -0.000804f, 0.003386f, 0.003703f, -0.000175f, -0.001650f, 0.025758f, 0.014703f, -0.033297f, 0.001799f, -0.008530f, 0.059526f, 0.037403f, -0.012616f, 0.004809f, 0.006844f, 0.008651f, -0.000744f, 0.022983f, 0.001846f, 0.017950f, 0.060817f, 0.009676f, 0.006124f, -0.008000f, 0.015394f, -0.056893f, -0.025479f, -0.023176f, -0.002889f, 0.007430f, -0.051589f, 0.021426f, -0.045809f, 0.016606f, 0.046955f, -0.009150f, -0.042755f, -0.021635f, 0.017348f, -0.007176f, -0.087048f, 0.024864f, -0.060812f, -0.012109f, -0.007737f, 0.003083f, -0.024485f, 0.007241f, 0.030419f, -0.024065f, -0.057748f, -0.085479f, 0.067484f, 0.021627f, -0.010728f, 0.020351f, -0.020575f, 0.021689f, 0.037408f, -0.037920f, 0.067140f, 0.010320f, - -0.007215f, 0.032289f, 0.017679f, -0.009756f, 0.017328f, 0.002359f, 0.018722f, -0.017126f, -0.009705f, 0.006175f, 0.013554f, 0.024453f, 0.006967f, 0.022169f, -0.013870f, 0.013093f, 0.021909f, 0.020560f, -0.003170f, 0.018837f, -0.018871f, 0.008717f, 0.001903f, 0.009341f, 0.036549f, -0.023099f, 0.014621f, 0.003234f, -0.001225f, 0.029693f, 0.007941f, 0.038343f, -0.004690f, 0.019606f, 0.005058f, 0.015758f, 0.004362f, -0.006289f, 0.011338f, -0.017802f, 0.016794f, -0.005730f, 0.013970f, -0.001899f, 0.003972f, -0.000152f, 0.003075f, 0.001143f, 0.014670f, -0.001839f, -0.003206f, -0.000494f, 0.006488f, 0.000756f, -0.001198f, 0.002157f, 0.003409f, 0.003556f, 0.002921f, -0.000276f, 0.002939f, -0.000573f, 0.002820f, 0.003191f, 0.003113f, -0.003402f, 0.001295f, 0.002165f, -0.001615f, -0.001410f, 0.097523f, -0.104893f, 0.042939f, 0.051850f, -0.064211f, -0.021102f, -0.034175f, -0.020348f, 0.096745f, -0.044228f, 0.068884f, -0.033026f, -0.008351f, -0.018407f, 0.023095f, 0.007193f, -0.082151f, -0.017008f, -0.021202f, 0.034374f, 0.002589f, 0.013569f, 0.029569f, -0.041991f, -0.006794f, -0.027410f, - 0.015237f, 0.032205f, 0.021728f, -0.053942f, -0.008399f, 0.008767f, 0.007722f, -0.005021f, -0.023928f, -0.011964f, -0.046487f, -0.010452f, -0.005866f, 0.041615f, -0.037855f, 0.093016f, 0.021572f, -0.029604f, 0.042523f, -0.000406f, 0.055012f, 0.027767f, 0.052224f, 0.010738f, 0.047746f, 0.036505f, 0.046706f, 0.046674f, 0.007973f, 0.045080f, -0.059701f, -0.012409f, 0.013203f, -0.041747f, -0.006364f, 0.022949f, -0.046252f, -0.070538f, 0.028008f, 0.042381f, 0.001884f, 0.008174f, -0.047486f, -0.014989f, -0.039673f, -0.003661f, 0.046204f, 0.001686f, 0.085958f, 0.036692f, -0.021267f, 0.088191f, 0.048129f, -0.028761f, -0.010020f, -0.021179f, -0.028401f, -0.020381f, 0.022400f, -0.015053f, -0.044194f, 0.005100f, 0.031348f, -0.001045f, -0.014392f, -0.013903f, -0.009098f, -0.017185f, -0.026793f, 0.002466f, -0.006121f, -0.005841f, -0.020696f, -0.004220f, -0.007256f, 0.006802f, 0.014874f, -0.006866f, 0.002979f, -0.008357f, -0.016235f, 0.008137f, -0.004370f, -0.015005f, -0.030741f, 0.011780f, -0.042372f, -0.008412f, -0.029424f, -0.020415f, -0.023978f, -0.008743f, -0.003911f, -0.011271f, -0.016880f, -0.010870f, - -0.019264f, -0.006218f, -0.002450f, -0.004163f, -0.013064f, 0.016660f, -0.015747f, 0.006398f, -0.003473f, -0.028750f, -0.008054f, -0.029308f, 0.003794f, -0.002898f, -0.003114f, 0.002630f, -0.136986f, 0.125083f, -0.029962f, -0.038744f, -0.038011f, 0.087328f, -0.066771f, -0.008222f, -0.020644f, 0.001469f, 0.043583f, -0.048652f, -0.006735f, 0.022421f, -0.017430f, -0.004493f, -0.000911f, -0.026542f, 0.038732f, 0.004707f, -0.068880f, -0.014444f, -0.018336f, 0.006519f, -0.075296f, 0.001777f, 0.006516f, -0.012118f, -0.001574f, 0.022382f, 0.042916f, -0.016280f, -0.013611f, 0.012046f, -0.032431f, -0.091685f, 0.005924f, 0.077100f, -0.040333f, -0.055508f, 0.001752f, 0.062667f, -0.030360f, -0.015577f, -0.080282f, -0.010272f, -0.000649f, 0.058040f, 0.023569f, 0.009475f, -0.061104f, -0.031296f, 0.044080f, -0.053218f, 0.017380f, 0.094280f, 0.049766f, 0.073633f, -0.036643f, 0.043890f, 0.024243f, -0.077586f, -0.031591f, -0.040619f, -0.012756f, 0.049297f, -0.004418f, 0.053122f, 0.039104f, -0.077095f, 0.086257f, -0.051589f, -0.002422f, 0.006755f, -0.042832f, 0.089584f, -0.008111f, -0.018098f, 0.067961f, -0.054873f, - -0.012068f, -0.079230f, -0.029977f, 0.039371f, -0.013822f, 0.035823f, 0.033926f, -0.006263f, -0.016508f, 0.008314f, -0.022208f, -0.020927f, -0.008737f, -0.014847f, -0.012482f, -0.011627f, 0.003566f, -0.014980f, 0.001092f, -0.019457f, -0.023553f, -0.016773f, 0.013565f, -0.009033f, -0.004180f, 0.013125f, 0.000391f, -0.001787f, -0.025526f, -0.034158f, -0.025679f, -0.045174f, 0.032460f, 0.016504f, 0.027786f, 0.012905f, -0.027966f, -0.024051f, -0.015969f, -0.001588f, 0.035888f, -0.005914f, -0.002520f, 0.007158f, -0.008419f, -0.004212f, -0.005559f, -0.012297f, 0.024297f, -0.014713f, 0.031816f, 0.001782f, 0.080183f, 0.057307f, 0.008178f, -0.015152f, -0.042011f, 0.024710f, -0.003514f, -0.003490f, -0.002886f, -0.001135f, -0.000054f, -0.015726f, 0.020019f, -0.000146f, -0.071994f, 0.018277f, 0.006203f, -0.024553f, 0.000720f, 0.031278f, -0.010683f, 0.002352f, -0.052121f, 0.038065f, -0.018692f, -0.005318f, -0.005458f, 0.021791f, -0.028348f, -0.000759f, 0.006173f, 0.001137f, 0.005720f, -0.013057f, 0.038212f, -0.019857f, 0.067529f, -0.041400f, -0.044668f, 0.042180f, -0.047185f, 0.002765f, 0.034796f, -0.032128f, - -0.014692f, 0.018969f, 0.021584f, 0.029178f, -0.103566f, 0.033223f, -0.001197f, -0.023327f, 0.065323f, -0.032571f, 0.003809f, 0.000658f, -0.055864f, 0.071651f, -0.003613f, -0.002787f, -0.037707f, -0.006438f, 0.058623f, -0.013390f, -0.002422f, 0.002670f, 0.016756f, 0.010113f, -0.072858f, 0.036158f, 0.064536f, -0.033675f, 0.025738f, -0.050339f, 0.084673f, 0.004155f, -0.079412f, 0.001406f, 0.043990f, -0.004128f, -0.049406f, -0.010741f, 0.115442f, -0.017675f, -0.047824f, 0.008342f, 0.050822f, -0.012864f, -0.016134f, -0.005675f, -0.002451f, 0.003324f, 0.002116f, -0.012636f, 0.033491f, -0.005134f, -0.008095f, 0.002210f, 0.011321f, 0.028538f, -0.008604f, -0.013464f, 0.015368f, 0.003823f, -0.026274f, -0.009222f, 0.013833f, 0.003518f, -0.011075f, -0.005554f, 0.022327f, -0.020149f, -0.004285f, 0.003808f, 0.003071f, -0.019016f, -0.007966f, 0.025299f, -0.001517f, -0.017697f, -0.007778f, 0.018413f, -0.005486f, -0.013222f, -0.011626f, 0.016119f, 0.000583f, -0.044959f, -0.149600f, -0.226452f, 0.015194f, 0.196179f, 0.003012f, 0.512961f, 0.464728f, 0.278480f, 0.536536f, 0.352302f, -0.058146f, 0.020637f, - -0.068797f, -0.422086f, -0.239795f, -0.185547f, -0.412474f, -0.338932f, -0.099977f, -0.198804f, -0.228599f, -0.018255f, 0.013773f, -0.096343f, 0.021396f, 0.087962f, -0.111579f, -0.094558f, 0.150036f, 0.031129f, -0.036049f, 0.105061f, 0.140590f, 0.000346f, 0.144226f, 0.244201f, 0.087647f, 0.067405f, 0.248762f, 0.168512f, 0.020675f, 0.183004f, 0.269499f, 0.118870f, 0.138029f, 0.307343f, 0.116918f, 0.042554f, 0.293385f, 0.289016f, 0.089615f, 0.347982f, 0.494325f, 0.184852f, 0.203275f, 0.345131f, 0.105637f, -0.110641f, 0.020372f, -0.113642f, -0.414254f, -0.394851f, -0.421972f, -0.678054f, -0.733200f, -0.783874f, -0.927453f, -0.970019f, -0.947665f, -0.922067f, -0.811870f, -0.728270f, -0.595522f, -0.392938f, -0.280374f, -0.096003f, 0.268930f, 0.435916f, 0.430377f, 0.796444f, 0.849004f, 0.661300f, 0.805363f, 0.843872f, 0.453393f, 0.473232f, 0.579777f, 0.282278f, 0.228342f, 0.376951f, 0.273687f, 0.129427f, 0.178592f, 0.238924f, 0.102279f, 0.083938f, 0.239876f, 0.127629f, -0.020290f, 0.132288f, 0.103494f, -0.072837f, 0.011844f, 0.095777f, -0.060507f, -0.025326f, 0.177986f, 0.071563f, - 0.008330f, 0.171589f, 0.113250f, -0.014681f, 0.010997f, -0.072257f, -0.247877f, -0.337762f, -0.373859f, -0.490706f, -0.525285f, -0.524521f, -0.568481f, -0.573590f, -0.600926f, -0.602506f, -0.550703f, -0.546706f, -0.458615f, -0.353386f, -0.279447f, -0.115169f, 0.105379f, 0.223464f, 0.370715f, 0.463337f, 0.490423f, 0.467964f, 0.427092f, 0.363543f, 0.295662f, 0.258201f, 0.226164f, 0.186286f, 0.168092f, 0.163678f, 0.149386f, 0.140652f, 0.146681f, 0.137540f, 0.115977f, 0.100567f, 0.080962f, 0.051794f, 0.032909f, 0.000801f, -0.037357f, -0.066448f, -0.090095f, -0.091411f, -0.087081f, -0.081592f, -0.060033f, -0.044998f, -0.034096f, -0.019971f, -0.001204f, 0.012714f, 0.028647f, 0.034875f, 0.040057f, 0.033724f, 0.024415f, 0.020159f, 0.015852f, 0.006161f, 0.001035f, -0.002758f, -0.010227f, -0.023624f, -0.024572f, -0.030872f, -0.046427f, -0.044317f, -0.040183f, -0.060037f, -0.065235f, -0.065162f, -0.080915f, -0.085904f, -0.077601f, -0.088557f, -0.093246f, -0.082758f, -0.076997f, -0.074923f, -0.063557f, -0.053297f, -0.049676f, -0.040581f, -0.025200f, -0.019194f, -0.011631f, 0.002802f, 0.017468f, 0.024267f, - 0.039291f, 0.055903f, 0.064838f, 0.072293f, 0.086124f, 0.091435f, 0.090272f, 0.091392f, 0.090962f, 0.080997f, 0.071078f, 0.064170f, 0.054002f, 0.038820f, 0.030369f, 0.021587f, 0.011194f, 0.003415f, -0.000421f, -0.006272f, -0.010097f, -0.012581f, -0.013759f, -0.015945f, -0.015005f, -0.014227f, -0.012924f, -0.012437f, -0.010297f, -0.009773f, -0.007500f, -0.006233f, -0.003938f, -0.002912f, -0.000538f}, - {0.005407f, 0.017842f, 0.003918f, 0.002646f, -0.004099f, -0.001403f, -0.008838f, -0.000308f, -0.002303f, 0.006651f, 0.005777f, -0.005815f, -0.004293f, -0.003485f, -0.003429f, -0.004120f, 0.000402f, 0.005311f, -0.004220f, -0.004401f, -0.014710f, -0.010715f, -0.007983f, -0.000296f, 0.000734f, 0.010822f, -0.005976f, 0.005404f, 0.003242f, 0.002816f, 0.000594f, -0.007948f, 0.002006f, -0.017033f, 0.002037f, 0.000611f, 0.000758f, -0.001092f, -0.010603f, -0.004728f, -0.009146f, 0.000644f, 0.000539f, -0.005417f, -0.014174f, 0.009799f, -0.000728f, -0.008181f, -0.000084f, 0.005601f, 0.001156f, -0.002762f, 0.001965f, -0.004618f, -0.002072f, -0.004352f, 0.003381f, -0.004637f, 0.006621f, 0.005481f, -0.001108f, -0.009318f, 0.000454f, 0.001396f, -0.000875f, -0.003352f, 0.002347f, 0.001773f, -0.002183f, 0.005187f, 0.005507f, 0.003925f, 0.000333f, 0.000127f, 0.001740f, -0.005009f, 0.000678f, 0.007975f, 0.000890f, 0.001611f, 0.001428f, 0.005923f, 0.002207f, 0.001937f, 0.005192f, -0.001178f, 0.004083f, -0.001494f, 0.002658f, 0.001997f, -0.000740f, 0.001229f, 0.001492f, -0.000347f, 0.001896f, 0.003056f, - 0.000681f, 0.000183f, 0.002063f, 0.002890f, 0.002194f, -0.000210f, 0.000824f, 0.001032f, 0.001066f, 0.000444f, 0.000161f, -0.000087f, -0.000704f, -0.002058f, 0.001414f, 0.000291f, -0.018849f, -0.021257f, -0.001459f, -0.008431f, 0.006524f, -0.010439f, 0.002657f, 0.004762f, -0.007041f, 0.005750f, 0.021269f, 0.001148f, -0.001908f, 0.011590f, 0.001621f, 0.011638f, 0.000224f, 0.005289f, -0.008310f, -0.011113f, -0.000556f, 0.004160f, -0.007657f, -0.002519f, -0.000740f, -0.002213f, 0.002149f, -0.002304f, -0.004026f, 0.003806f, -0.001877f, -0.001654f, 0.008377f, 0.011851f, -0.003670f, -0.006432f, 0.002405f, 0.009478f, 0.003649f, 0.012159f, 0.000547f, -0.001752f, -0.000278f, 0.010846f, 0.000734f, -0.007822f, -0.004242f, 0.008509f, 0.006231f, 0.006612f, 0.001841f, -0.004275f, -0.008763f, 0.001706f, 0.004170f, 0.005105f, -0.001865f, -0.004638f, 0.009536f, 0.006357f, -0.001550f, -0.005348f, 0.000346f, -0.003730f, 0.009936f, 0.003015f, 0.001843f, 0.003144f, 0.001132f, 0.002037f, 0.006112f, 0.001060f, 0.006139f, -0.001200f, 0.009771f, 0.001182f, -0.009627f, -0.003826f, -0.003342f, 0.004785f, - 0.005977f, -0.000964f, 0.001609f, -0.006754f, -0.002439f, -0.006290f, -0.001896f, -0.004101f, -0.003480f, -0.001480f, 0.002060f, 0.000091f, 0.000068f, 0.000267f, 0.002709f, 0.000431f, 0.000624f, -0.000334f, -0.002887f, -0.000817f, 0.000159f, -0.000281f, 0.001176f, 0.000448f, 0.000505f, -0.001097f, 0.011075f, 0.007872f, 0.011665f, 0.012270f, -0.002988f, 0.006181f, -0.002677f, -0.006851f, -0.000706f, 0.018147f, 0.007855f, 0.004105f, 0.006373f, -0.007468f, 0.012829f, 0.005599f, 0.008576f, -0.002475f, -0.014369f, 0.006089f, -0.022386f, 0.004606f, -0.005762f, 0.004565f, 0.003459f, -0.000342f, -0.007745f, 0.001933f, 0.004955f, -0.002908f, 0.004643f, 0.011400f, -0.000871f, -0.009303f, -0.012851f, 0.002080f, 0.005658f, -0.011691f, 0.006489f, -0.010982f, -0.007279f, 0.008119f, -0.004728f, -0.009269f, -0.004619f, -0.006514f, 0.010276f, 0.014277f, 0.007978f, -0.005018f, 0.000003f, 0.007666f, 0.004469f, -0.000556f, -0.005859f, -0.002668f, -0.005149f, 0.005490f, 0.017492f, -0.000053f, -0.009577f, -0.007429f, 0.004013f, 0.001516f, -0.003625f, -0.010304f, -0.000250f, -0.008814f, -0.003554f, 0.001489f, - -0.001584f, 0.007152f, 0.001262f, 0.008958f, 0.010265f, -0.008967f, -0.003391f, 0.000595f, -0.007125f, -0.008394f, -0.001414f, 0.000130f, -0.005249f, 0.005065f, -0.004775f, -0.000498f, 0.003871f, 0.000881f, 0.000225f, 0.003973f, -0.004829f, -0.001558f, 0.001073f, 0.001887f, -0.002217f, 0.001641f, 0.000790f, 0.001842f, -0.000322f, 0.000056f, 0.001733f, -0.002343f, 0.003064f, -0.002347f, 0.001472f, 0.000573f, -0.000749f, -0.000097f, 0.001333f, -0.000907f, -0.001681f, -0.002659f, 0.001669f, -0.001926f, 0.000703f, 0.002729f, -0.000417f, -0.001581f, 0.024929f, -0.006707f, 0.002445f, 0.003545f, -0.016417f, -0.014014f, 0.000383f, 0.016274f, 0.012443f, 0.019675f, 0.006513f, -0.005564f, -0.008448f, 0.001445f, -0.004839f, 0.003875f, 0.001905f, 0.006646f, 0.012253f, 0.003892f, 0.009042f, -0.000256f, 0.005373f, -0.005426f, -0.011361f, -0.005970f, -0.008688f, 0.000120f, -0.002403f, 0.002660f, -0.013844f, -0.006924f, -0.001824f, 0.005139f, -0.006825f, 0.014384f, -0.016166f, 0.003483f, -0.010166f, -0.008268f, 0.004749f, 0.004138f, 0.013911f, -0.001530f, 0.003546f, -0.003949f, 0.009757f, 0.010281f, - 0.002898f, -0.002200f, -0.010396f, -0.001434f, 0.003648f, -0.007988f, 0.008069f, -0.008794f, 0.003827f, 0.014586f, 0.012257f, 0.000200f, -0.004655f, 0.002302f, 0.014614f, -0.001798f, 0.003633f, 0.002287f, 0.011953f, 0.000143f, -0.003123f, -0.007366f, 0.005246f, -0.011111f, 0.004111f, 0.023194f, 0.005753f, 0.010937f, 0.001140f, -0.015297f, 0.005601f, 0.002878f, -0.005987f, 0.006286f, -0.001880f, -0.001635f, -0.007581f, 0.003230f, 0.007586f, 0.003395f, 0.001513f, -0.003456f, -0.007457f, 0.001778f, -0.001430f, -0.001133f, 0.000555f, -0.000340f, -0.001352f, 0.002467f, -0.002493f, -0.002290f, -0.002137f, 0.003457f, 0.001440f, 0.002732f, -0.001438f, 0.002525f, 0.000216f, -0.002393f, 0.002699f, 0.001481f, -0.002088f, -0.004091f, -0.001431f, 0.003463f, 0.000296f, -0.000842f, 0.001797f, 0.001606f, 0.003790f, -0.000116f, -0.001366f, 0.002429f, -0.001814f, -0.008980f, -0.015640f, 0.007942f, -0.011180f, -0.011317f, 0.002254f, -0.005430f, -0.036652f, 0.003649f, 0.005550f, 0.033566f, 0.010744f, 0.002586f, -0.015285f, 0.014052f, 0.005952f, -0.005963f, 0.007218f, -0.001160f, 0.012072f, -0.007231f, - -0.003852f, -0.002362f, -0.003314f, -0.004930f, -0.002267f, 0.008749f, 0.007477f, 0.013182f, 0.004595f, 0.006524f, -0.000207f, -0.008397f, -0.009275f, 0.012494f, -0.006852f, 0.002864f, -0.001185f, -0.008631f, 0.012494f, -0.001985f, -0.005508f, 0.002302f, 0.009080f, -0.005970f, 0.013822f, -0.017483f, -0.014622f, -0.017732f, 0.004263f, -0.009939f, -0.015334f, -0.003402f, 0.014220f, -0.005938f, 0.004227f, 0.008585f, -0.006198f, -0.007943f, 0.000594f, 0.001430f, 0.004721f, 0.000987f, -0.004510f, -0.000400f, 0.018346f, 0.007919f, -0.007556f, -0.023046f, -0.018557f, 0.006881f, 0.021838f, 0.018522f, -0.014412f, 0.000482f, -0.009421f, 0.004262f, 0.003584f, -0.015580f, -0.001302f, 0.003226f, 0.001780f, -0.004144f, 0.000884f, 0.001056f, 0.000424f, 0.005439f, 0.004818f, -0.003019f, -0.003878f, 0.002727f, -0.001911f, 0.001339f, -0.005525f, 0.002365f, 0.001588f, -0.008621f, -0.002015f, 0.001996f, 0.001280f, 0.000839f, 0.001672f, -0.000420f, 0.000593f, 0.000766f, 0.000827f, -0.003071f, -0.000488f, 0.001243f, -0.001057f, -0.003755f, -0.001979f, 0.000644f, 0.000568f, 0.004341f, -0.006457f, 0.010759f, - -0.018130f, -0.003098f, -0.022484f, -0.006603f, 0.003427f, 0.007890f, -0.020483f, -0.005099f, 0.014175f, -0.001673f, -0.020495f, 0.010698f, -0.006497f, -0.011742f, 0.006545f, 0.010837f, 0.002542f, 0.002301f, 0.003824f, 0.014154f, -0.006595f, -0.005819f, 0.003796f, -0.006950f, -0.003457f, 0.000235f, -0.000682f, 0.000520f, 0.011428f, 0.005855f, -0.001197f, -0.000937f, 0.006732f, 0.002829f, 0.008244f, -0.000650f, 0.009294f, 0.009762f, 0.003998f, -0.010535f, 0.001663f, -0.001425f, -0.007400f, 0.010261f, -0.005644f, 0.004336f, -0.006859f, -0.002508f, -0.025065f, 0.002373f, 0.020613f, 0.001876f, 0.021907f, -0.003946f, -0.004736f, -0.022332f, 0.026446f, 0.012458f, 0.015139f, 0.002526f, 0.012442f, -0.000064f, 0.000071f, 0.010322f, -0.005819f, 0.003786f, 0.000132f, -0.025038f, 0.005940f, -0.005811f, 0.006818f, -0.003700f, 0.006174f, 0.023402f, 0.007219f, 0.006233f, -0.000092f, -0.014069f, 0.010821f, -0.005656f, 0.002330f, 0.005427f, 0.007209f, -0.007701f, -0.001855f, -0.003130f, -0.004012f, 0.004652f, -0.002442f, -0.001933f, -0.003099f, 0.000642f, 0.001072f, 0.000451f, -0.006298f, 0.002719f, - 0.001360f, -0.001358f, 0.002114f, 0.001018f, 0.001878f, 0.001470f, 0.003340f, 0.000140f, 0.000906f, -0.000283f, -0.001249f, 0.004023f, -0.000481f, 0.005625f, 0.001114f, 0.002415f, -0.001433f, 0.003155f, 0.001284f, 0.002592f, 0.002708f, 0.002281f, -0.028750f, -0.001153f, 0.021959f, -0.004969f, 0.013077f, -0.014089f, -0.009386f, -0.025207f, 0.014472f, 0.007211f, 0.016771f, 0.007549f, -0.007988f, 0.013775f, -0.003350f, 0.013172f, -0.008623f, -0.008346f, 0.001195f, -0.003191f, 0.011763f, 0.002228f, 0.009947f, 0.010721f, -0.006369f, -0.005784f, -0.003690f, 0.006992f, -0.001310f, -0.004844f, 0.001653f, -0.010038f, 0.005250f, 0.003282f, -0.005011f, 0.007077f, 0.012949f, -0.005317f, -0.005640f, -0.001743f, -0.009498f, -0.004892f, 0.014855f, 0.001798f, -0.008944f, 0.017666f, -0.019488f, 0.002912f, 0.010678f, -0.004697f, -0.006313f, -0.001643f, 0.008543f, -0.015185f, 0.007662f, -0.006280f, -0.012723f, -0.009840f, -0.007631f, 0.000093f, -0.003530f, -0.008392f, 0.003684f, 0.021993f, 0.012382f, -0.003194f, -0.007483f, -0.021628f, 0.002407f, 0.011752f, -0.006861f, -0.023881f, 0.000765f, -0.003883f, - 0.001318f, 0.002834f, 0.011005f, -0.000790f, -0.005411f, -0.002255f, -0.008539f, -0.005259f, -0.003977f, 0.006387f, -0.005260f, 0.005919f, -0.012526f, 0.000929f, -0.005691f, -0.003995f, 0.007803f, -0.003794f, -0.003522f, -0.004544f, 0.001680f, -0.008199f, -0.003122f, -0.001976f, -0.000212f, 0.001614f, -0.005631f, 0.001510f, -0.004448f, 0.002402f, 0.003105f, 0.006533f, 0.001345f, 0.002295f, 0.003595f, 0.002573f, -0.001808f, 0.000977f, 0.000512f, 0.004843f, 0.002956f, -0.000601f, 0.003057f, -0.000339f, 0.000355f, -0.002120f, 0.000400f, -0.000071f, -0.003406f, 0.000953f, -0.002324f, -0.001935f, 0.000342f, 0.002544f, -0.000646f, 0.009622f, -0.004234f, 0.002441f, 0.014243f, 0.000915f, 0.016685f, 0.018068f, 0.040349f, 0.027500f, 0.016877f, -0.004300f, -0.021367f, -0.007468f, 0.019582f, 0.008451f, -0.020640f, 0.015386f, -0.003601f, -0.010261f, -0.012632f, 0.001865f, 0.034879f, -0.023663f, 0.025222f, 0.009821f, -0.005439f, 0.008260f, -0.006824f, 0.018026f, -0.006937f, 0.009508f, 0.001891f, -0.012555f, -0.008784f, -0.012234f, 0.000458f, 0.010295f, -0.002994f, -0.006912f, 0.006640f, 0.000828f, - -0.002098f, -0.023628f, 0.007127f, -0.013252f, -0.010019f, 0.006476f, 0.015537f, -0.011521f, -0.016561f, 0.000553f, 0.014023f, 0.001123f, -0.009451f, -0.003552f, -0.005635f, 0.006366f, 0.004647f, -0.005464f, -0.008937f, -0.013431f, 0.008262f, 0.021450f, 0.013142f, 0.006751f, -0.012492f, 0.006428f, 0.013576f, -0.015301f, -0.019958f, 0.003452f, -0.016485f, -0.007908f, -0.032293f, 0.000383f, -0.022186f, -0.011577f, 0.005931f, -0.002817f, -0.002161f, 0.009777f, 0.001639f, -0.018112f, -0.012573f, 0.008120f, -0.002536f, 0.000955f, -0.005661f, 0.000502f, 0.005244f, -0.000818f, 0.003463f, 0.003492f, 0.000687f, 0.000303f, 0.002558f, 0.003009f, 0.001977f, 0.000210f, 0.000584f, -0.001851f, 0.004733f, 0.000099f, 0.004351f, -0.000811f, -0.002971f, 0.001399f, 0.004044f, -0.005156f, -0.007591f, -0.003870f, -0.001142f, -0.002384f, 0.008525f, 0.003208f, -0.002752f, 0.003793f, -0.002228f, 0.000557f, -0.006969f, -0.000637f, 0.000443f, -0.003180f, 0.044118f, 0.001011f, -0.017307f, 0.019478f, -0.021314f, 0.024650f, 0.001966f, -0.014989f, -0.025730f, -0.006215f, 0.012573f, -0.020421f, 0.018095f, -0.002888f, - 0.011650f, 0.013927f, -0.011992f, -0.004972f, -0.007236f, -0.009523f, -0.003747f, -0.008900f, 0.001437f, -0.010879f, 0.011263f, 0.007134f, 0.009445f, 0.019248f, 0.009863f, -0.002887f, 0.022920f, 0.011692f, 0.004190f, -0.012351f, -0.013503f, 0.006868f, -0.010352f, 0.002341f, 0.007200f, -0.015371f, 0.013072f, 0.034968f, 0.002604f, 0.024858f, 0.011718f, 0.012006f, 0.017704f, 0.000995f, 0.009350f, 0.009904f, -0.022728f, -0.015413f, 0.015558f, 0.000996f, 0.014678f, 0.002575f, 0.015411f, -0.002558f, 0.005492f, 0.003796f, -0.032538f, -0.002199f, 0.008258f, 0.021653f, 0.004766f, 0.018980f, 0.001852f, -0.004561f, 0.006162f, 0.008473f, -0.018308f, -0.030885f, -0.016350f, 0.004158f, 0.007494f, 0.000948f, 0.022523f, 0.007887f, -0.035538f, 0.008933f, -0.005237f, 0.000096f, 0.010103f, -0.014322f, -0.000582f, -0.007765f, 0.006427f, 0.009062f, 0.000458f, 0.001872f, 0.006531f, 0.000159f, -0.000162f, -0.003187f, -0.003501f, 0.001086f, 0.000567f, 0.000103f, 0.005432f, 0.003890f, 0.001289f, 0.003202f, 0.002044f, 0.000020f, -0.005539f, 0.004204f, 0.003446f, -0.002276f, -0.000585f, -0.000894f, - 0.000157f, 0.003027f, 0.002525f, 0.008253f, -0.007166f, -0.002157f, 0.003042f, -0.001879f, 0.004299f, -0.003662f, 0.007260f, -0.001911f, -0.002358f, 0.000883f, 0.004109f, 0.002834f, -0.001148f, -0.000645f, -0.003026f, -0.000710f, -0.021557f, -0.001683f, -0.019212f, -0.008793f, 0.007873f, -0.009472f, 0.004139f, 0.006676f, -0.011572f, -0.028226f, 0.008975f, -0.027963f, -0.032485f, 0.007192f, -0.016036f, 0.014446f, 0.020239f, -0.005047f, 0.023638f, -0.005590f, 0.023352f, 0.032157f, -0.000072f, 0.002049f, -0.032427f, -0.005950f, 0.003400f, 0.005689f, -0.003879f, -0.021132f, 0.001384f, -0.017872f, 0.002198f, -0.004706f, 0.004810f, -0.006769f, -0.012045f, 0.002866f, -0.002231f, -0.006429f, 0.007477f, 0.000910f, -0.005034f, 0.023268f, 0.008477f, 0.017507f, -0.011075f, 0.003353f, -0.009357f, 0.006765f, -0.002179f, 0.009246f, -0.003165f, -0.006703f, -0.008984f, -0.020299f, -0.012189f, 0.033146f, 0.013235f, 0.022035f, -0.025449f, 0.005485f, 0.018597f, -0.015802f, 0.000014f, 0.012387f, -0.006763f, 0.012429f, 0.001617f, -0.021962f, -0.005887f, -0.033889f, -0.004353f, 0.013882f, 0.006952f, 0.023002f, - 0.002439f, 0.015330f, 0.016039f, 0.005773f, -0.001169f, 0.029756f, 0.002351f, 0.000919f, -0.005236f, -0.002780f, 0.015519f, 0.009329f, 0.014835f, -0.001641f, -0.003249f, -0.003700f, 0.010790f, 0.002364f, -0.002447f, 0.003094f, 0.007351f, -0.001669f, -0.004587f, -0.008588f, 0.000145f, -0.006832f, -0.003245f, -0.005815f, 0.004831f, -0.000608f, -0.010343f, -0.001797f, 0.000598f, 0.000828f, -0.000657f, -0.004742f, 0.006771f, -0.005550f, 0.001610f, 0.002677f, -0.007848f, -0.001379f, -0.005300f, 0.001091f, 0.005985f, -0.005435f, -0.004633f, -0.003371f, -0.003519f, 0.003470f, 0.001791f, -0.020970f, -0.018702f, -0.019861f, -0.028945f, 0.019743f, 0.012796f, 0.001755f, -0.019478f, 0.017597f, -0.000161f, -0.024598f, -0.020109f, -0.007035f, -0.005011f, -0.015758f, -0.006204f, -0.009353f, -0.007915f, -0.005842f, -0.022738f, 0.011362f, 0.013321f, -0.001205f, -0.002115f, -0.004173f, -0.008400f, -0.027032f, -0.029459f, 0.000879f, 0.012791f, -0.007803f, -0.018142f, -0.010216f, 0.013820f, 0.010138f, 0.000676f, -0.005699f, -0.007792f, -0.007919f, 0.017478f, -0.008916f, 0.012288f, -0.008436f, 0.000369f, -0.029392f, - -0.006393f, -0.002333f, 0.022183f, 0.006078f, -0.005184f, -0.016534f, -0.011475f, -0.023134f, 0.037321f, -0.017175f, 0.035445f, 0.004499f, -0.015259f, 0.023359f, 0.023031f, 0.039761f, -0.038998f, 0.016134f, 0.006504f, 0.005242f, -0.007732f, -0.011230f, 0.017261f, 0.008909f, -0.002954f, -0.018327f, 0.020363f, -0.010709f, 0.021891f, 0.018045f, 0.017132f, -0.015520f, 0.033803f, -0.024970f, 0.013908f, 0.021762f, -0.012533f, 0.002704f, 0.000637f, 0.018906f, -0.005021f, 0.008392f, -0.009862f, 0.020205f, -0.000632f, 0.003531f, -0.011600f, 0.009216f, -0.000631f, 0.009508f, -0.002755f, 0.012822f, 0.006288f, 0.004035f, -0.007573f, 0.002413f, -0.006340f, 0.000354f, -0.005397f, -0.007304f, -0.001458f, -0.006452f, -0.004286f, -0.000700f, -0.003265f, -0.006428f, 0.004410f, 0.005332f, 0.007871f, 0.001821f, -0.007341f, 0.000684f, -0.004954f, 0.004966f, 0.002089f, -0.003617f, 0.000978f, 0.003470f, 0.002098f, -0.008278f, 0.001630f, 0.008294f, 0.003267f, -0.001312f, 0.002398f, 0.031786f, -0.053070f, -0.056826f, -0.035827f, -0.005879f, -0.024998f, 0.015406f, -0.020571f, 0.002222f, 0.010144f, -0.001412f, - 0.037408f, 0.027134f, 0.009500f, -0.010865f, -0.008418f, 0.026362f, -0.004449f, 0.004195f, -0.010801f, -0.023283f, 0.000017f, 0.009618f, 0.006232f, -0.012733f, 0.011304f, 0.001766f, -0.001567f, 0.022374f, 0.030569f, 0.002347f, -0.019603f, -0.008275f, -0.037570f, -0.014392f, -0.009735f, -0.011113f, 0.001664f, 0.006729f, -0.013674f, -0.005296f, -0.019113f, 0.020736f, 0.024659f, 0.020740f, 0.023026f, 0.018290f, 0.030141f, 0.003870f, 0.010335f, 0.007335f, -0.005489f, 0.011802f, 0.017965f, -0.017859f, -0.062352f, -0.014335f, 0.020704f, -0.032122f, 0.016463f, 0.020551f, 0.007362f, -0.009643f, 0.001562f, -0.007578f, -0.025034f, -0.006631f, 0.016298f, -0.019839f, -0.016940f, 0.006204f, -0.013751f, 0.040777f, 0.041291f, -0.015100f, 0.026593f, 0.007211f, -0.003894f, -0.017883f, 0.012722f, -0.024189f, -0.020148f, 0.022374f, 0.016772f, 0.011941f, -0.001552f, -0.001942f, -0.029695f, -0.021163f, -0.003903f, -0.006557f, -0.005522f, -0.004241f, -0.008774f, -0.007073f, -0.008178f, -0.003893f, 0.001093f, 0.007228f, 0.005557f, 0.009513f, -0.000772f, -0.004205f, -0.004440f, -0.002809f, 0.013419f, 0.012681f, - 0.006453f, -0.000921f, -0.000840f, -0.002627f, -0.005001f, -0.007557f, -0.003429f, 0.001658f, -0.002293f, 0.005671f, -0.002860f, 0.002294f, 0.002600f, 0.002557f, 0.005138f, -0.005702f, -0.000094f, 0.001480f, 0.004358f, -0.006915f, 0.012382f, -0.004842f, -0.003114f, 0.051209f, -0.043149f, -0.000487f, 0.006948f, -0.040686f, -0.012408f, -0.017002f, 0.005871f, -0.012213f, 0.035276f, 0.004873f, -0.000739f, 0.044701f, -0.002809f, -0.039092f, -0.031859f, -0.019053f, 0.014922f, -0.002037f, -0.038453f, 0.010028f, 0.010340f, 0.020298f, -0.022990f, 0.011764f, 0.019027f, 0.017032f, 0.013220f, -0.004434f, 0.022798f, 0.025147f, 0.008153f, -0.055354f, 0.040347f, -0.019722f, 0.015385f, -0.003851f, -0.006027f, 0.010840f, -0.024872f, -0.013879f, 0.025868f, -0.011761f, -0.003654f, 0.023800f, -0.026669f, 0.023933f, -0.009424f, 0.022233f, -0.029348f, 0.039016f, -0.017509f, 0.060267f, -0.008099f, 0.003937f, 0.015237f, -0.013146f, -0.010092f, -0.007160f, 0.004683f, -0.002940f, -0.030462f, -0.037870f, -0.010702f, 0.022195f, -0.011585f, -0.013681f, -0.038912f, 0.017962f, 0.003814f, -0.052802f, -0.000937f, 0.000817f, - 0.007654f, 0.027329f, -0.018642f, 0.008609f, -0.023896f, -0.020678f, -0.031643f, -0.031324f, -0.005720f, -0.018288f, 0.022600f, -0.003701f, 0.022075f, -0.010747f, 0.012520f, -0.001705f, -0.014348f, -0.019704f, -0.002401f, 0.002429f, 0.009545f, -0.004639f, 0.004135f, 0.002010f, 0.007793f, -0.000727f, -0.010621f, -0.001463f, -0.016007f, -0.000677f, 0.002464f, 0.003579f, 0.000787f, -0.005968f, -0.007817f, 0.008799f, 0.003942f, -0.002573f, 0.009837f, -0.012447f, -0.016756f, -0.000254f, 0.014697f, 0.000395f, 0.004193f, 0.005902f, 0.010028f, 0.000652f, 0.011235f, -0.009175f, 0.003556f, 0.002309f, 0.009126f, 0.015648f, -0.009782f, 0.002563f, -0.002356f, 0.002600f, 0.019644f, 0.059043f, 0.029522f, -0.018037f, 0.040768f, 0.013365f, -0.025948f, 0.009980f, 0.026368f, -0.004106f, -0.008897f, -0.036323f, -0.009774f, 0.022352f, 0.014694f, 0.010619f, 0.006657f, -0.006577f, -0.014492f, -0.034289f, 0.018308f, -0.011711f, 0.009161f, -0.026336f, -0.014162f, -0.000689f, -0.003973f, 0.033652f, 0.010234f, 0.005336f, 0.025875f, 0.012349f, -0.038938f, -0.004597f, 0.014357f, -0.007351f, 0.000898f, 0.033247f, - 0.011042f, 0.038604f, -0.022407f, -0.014227f, -0.006252f, -0.014458f, 0.015253f, -0.015070f, 0.029196f, 0.028933f, -0.012652f, -0.028355f, 0.047515f, -0.024448f, -0.009761f, -0.005731f, 0.014219f, 0.007179f, -0.026357f, -0.007940f, 0.017024f, -0.012628f, 0.021568f, -0.010208f, 0.030519f, -0.015856f, 0.006965f, 0.046467f, -0.000841f, 0.032720f, 0.056846f, 0.007127f, 0.027962f, -0.014451f, -0.068172f, -0.046316f, -0.008769f, -0.002971f, 0.038885f, -0.001316f, 0.013065f, 0.003245f, -0.009559f, -0.031681f, -0.070362f, 0.053261f, 0.003772f, 0.001522f, 0.017526f, 0.008254f, -0.017096f, 0.039351f, 0.002060f, 0.008260f, -0.000405f, 0.002590f, -0.034663f, -0.012974f, -0.022824f, -0.013894f, -0.001040f, -0.012989f, -0.012856f, 0.007995f, -0.002734f, -0.008970f, 0.025502f, -0.004818f, -0.025781f, -0.018568f, 0.006570f, 0.001189f, -0.007426f, 0.039279f, 0.011958f, -0.013259f, -0.015149f, 0.003997f, -0.003470f, -0.008255f, 0.001353f, 0.003524f, -0.008799f, 0.009241f, -0.000238f, 0.013387f, 0.017572f, 0.003319f, -0.001592f, -0.005400f, 0.011796f, 0.011259f, 0.010308f, -0.077112f, -0.018462f, 0.080535f, - -0.030915f, -0.034533f, 0.071109f, -0.045627f, 0.040071f, 0.053552f, 0.021164f, 0.007359f, -0.040674f, 0.015565f, -0.071349f, -0.035153f, 0.015612f, 0.037091f, 0.004195f, 0.008554f, 0.027040f, 0.072167f, 0.048785f, 0.015245f, 0.002692f, -0.000086f, 0.008029f, 0.005958f, -0.028008f, 0.000593f, 0.017859f, 0.022574f, 0.096313f, 0.054283f, 0.037114f, 0.069543f, 0.028417f, -0.009969f, 0.020894f, -0.001323f, 0.066633f, 0.024107f, -0.005446f, -0.011125f, 0.027840f, -0.004304f, 0.031967f, -0.099369f, 0.004285f, 0.034189f, -0.002060f, 0.041383f, -0.015496f, 0.010916f, 0.022051f, -0.092530f, -0.035758f, -0.007283f, -0.029635f, -0.038357f, -0.045181f, 0.042232f, -0.027647f, 0.008389f, -0.008474f, 0.042374f, -0.069521f, -0.019133f, -0.009820f, 0.021758f, -0.000351f, -0.006467f, 0.051213f, 0.089291f, -0.000479f, 0.027721f, -0.016966f, 0.007432f, 0.062473f, -0.066601f, -0.039575f, -0.055769f, -0.070297f, -0.006270f, -0.002887f, -0.027818f, -0.029877f, -0.028328f, -0.026886f, -0.034679f, -0.050215f, -0.022040f, -0.032626f, -0.020086f, 0.008583f, 0.043830f, 0.013911f, 0.006439f, 0.006435f, -0.004622f, - 0.009609f, 0.004008f, -0.031528f, -0.028480f, -0.008364f, -0.040027f, -0.016058f, -0.017849f, -0.013945f, -0.016011f, 0.017849f, -0.014847f, 0.000782f, 0.002280f, 0.007480f, 0.021421f, 0.032973f, -0.000862f, -0.008832f, 0.023717f, -0.012744f, 0.014901f, 0.005443f, 0.002800f, -0.007026f, 0.003807f, 0.002530f, -0.014886f, -0.019416f, -0.021052f, -0.003438f, 0.006554f, 0.041829f, 0.036846f, -0.034694f, -0.122751f, -0.022247f, 0.050339f, 0.011364f, -0.013677f, -0.009958f, 0.003834f, -0.017233f, -0.022506f, 0.026799f, 0.020216f, 0.055548f, 0.020335f, 0.033280f, -0.012570f, 0.073999f, 0.013447f, 0.046807f, -0.006600f, 0.068235f, -0.025980f, 0.044353f, -0.043446f, 0.000096f, 0.004853f, 0.031603f, -0.012518f, -0.024083f, -0.057484f, 0.031753f, 0.004262f, 0.006283f, -0.027773f, -0.051885f, -0.003127f, 0.005710f, -0.006323f, 0.015538f, 0.033264f, 0.004745f, 0.023793f, 0.084603f, -0.035691f, 0.008235f, -0.027936f, 0.043561f, 0.038067f, -0.042862f, 0.040245f, 0.045623f, -0.032769f, 0.011378f, 0.010836f, 0.031526f, 0.015745f, 0.064345f, 0.020394f, -0.023212f, 0.003909f, 0.083240f, 0.026501f, - -0.095796f, 0.028213f, 0.016808f, -0.082167f, -0.023147f, -0.026300f, -0.058365f, 0.004219f, 0.035541f, 0.039320f, -0.023620f, 0.070688f, -0.018498f, -0.030660f, -0.016132f, 0.037390f, -0.139018f, -0.016912f, 0.001691f, 0.111895f, 0.014495f, 0.094877f, 0.045231f, 0.066593f, -0.002215f, 0.022866f, -0.013104f, 0.056430f, 0.056876f, 0.051376f, -0.012791f, -0.034208f, -0.014357f, 0.056369f, -0.006999f, -0.036816f, -0.016377f, 0.066778f, 0.008935f, -0.041539f, -0.014590f, 0.060239f, 0.016837f, 0.025085f, -0.001206f, 0.022755f, -0.017615f, -0.001192f, -0.001710f, 0.009854f, -0.002022f, 0.010651f, -0.008794f, -0.019558f, -0.023573f, -0.028304f, -0.004170f, -0.020668f, -0.000458f, -0.003699f, -0.008523f, 0.019972f, -0.023233f, -0.009330f, -0.023051f, -0.008381f, -0.041914f, -0.030888f, 0.041349f, 0.000731f, -0.048321f, -0.076593f, 0.062201f, 0.132556f, 0.009382f, -0.074304f, 0.115140f, -0.026215f, -0.001196f, 0.015987f, 0.065511f, -0.037766f, 0.003266f, 0.129844f, -0.064077f, 0.030647f, 0.044354f, 0.041735f, -0.057257f, -0.006180f, 0.010832f, -0.028650f, 0.005421f, 0.013221f, -0.022986f, 0.022763f, - -0.039315f, -0.011639f, -0.015447f, -0.003360f, -0.023406f, -0.021266f, -0.007225f, 0.012194f, -0.042918f, -0.040925f, 0.061507f, 0.010731f, -0.037718f, -0.010359f, 0.036789f, 0.087741f, -0.007178f, -0.043292f, 0.046461f, 0.067212f, -0.019123f, -0.005359f, 0.002263f, 0.024117f, 0.000694f, -0.000276f, 0.031228f, -0.074958f, 0.051705f, -0.043389f, 0.001063f, -0.061361f, 0.034762f, -0.005119f, -0.090630f, 0.044643f, -0.005991f, -0.035616f, 0.062025f, 0.006882f, 0.061337f, -0.051793f, -0.019183f, -0.021135f, -0.047066f, -0.074194f, -0.097160f, 0.082549f, 0.034415f, 0.060673f, 0.056803f, 0.034467f, 0.014112f, -0.035489f, 0.053819f, -0.026853f, -0.021900f, 0.071777f, 0.024624f, -0.013951f, -0.005940f, 0.021622f, -0.050607f, 0.012807f, -0.019674f, 0.033490f, -0.012471f, -0.022237f, 0.032852f, 0.005119f, -0.037472f, 0.002696f, -0.017469f, -0.010959f, 0.008591f, -0.008666f, 0.007506f, -0.002447f, -0.026831f, -0.014211f, 0.012400f, -0.009480f, -0.016712f, 0.016750f, 0.027503f, 0.026097f, -0.020714f, -0.009078f, 0.031539f, -0.052907f, 0.016332f, 0.018886f, -0.021948f, -0.052577f, 0.026836f, 0.002917f, - -0.022978f, 0.015968f, -0.024634f, -0.041008f, 0.011266f, 0.036109f, -0.029604f, -0.013386f, 0.013491f, 0.031473f, -0.008146f, -0.004323f, 0.028324f, 0.001633f, -0.021739f, 0.072073f, -0.029290f, 0.021298f, 0.016767f, -0.074919f, 0.067385f, 0.023471f, -0.019152f, 0.057731f, 0.004921f, 0.003810f, 0.028343f, -0.025143f, 0.073835f, -0.059233f, -0.031588f, 0.027462f, 0.025499f, 0.012526f, -0.054941f, -0.033536f, -0.061229f, 0.033889f, 0.008264f, 0.030960f, 0.000168f, 0.033257f, 0.013542f, 0.011135f, 0.001459f, 0.028361f, -0.012666f, 0.015619f, -0.027915f, 0.021039f, -0.025791f, -0.000216f, -0.034087f, -0.024305f, 0.001566f, -0.030428f, 0.014393f, 0.072589f, 0.017481f, -0.054375f, 0.028513f, 0.021858f, 0.038621f, 0.001113f, 0.064134f, -0.054970f, 0.008548f, 0.025569f, -0.052934f, -0.012345f, 0.107220f, 0.060326f, -0.141593f, -0.060135f, 0.075521f, -0.020543f, -0.067116f, 0.026562f, -0.006759f, -0.051840f, 0.038182f, 0.064502f, -0.087252f, 0.017327f, 0.077721f, -0.052535f, -0.047069f, 0.063497f, 0.008628f, -0.052174f, 0.009398f, 0.041293f, -0.045527f, -0.006303f, 0.050153f, -0.007314f, - -0.022193f, -0.035805f, 0.045891f, -0.012065f, 0.025635f, 0.005974f, 0.026036f, -0.017746f, 0.016887f, 0.046232f, 0.018331f, -0.034011f, 0.002876f, -0.024326f, -0.016403f, -0.034263f, -0.003021f, -0.009121f, -0.002352f, -0.023020f, 0.023643f, 0.020327f, -0.007972f, 0.052842f, -0.013297f, -0.056110f, 0.067651f, -0.007987f, -0.012785f, 0.012490f, 0.023734f, 0.003204f, -0.006212f, 0.057072f, 0.031414f, -0.040042f, 0.003450f, 0.016257f, -0.029028f, -0.024002f, 0.041312f, -0.021232f, -0.078196f, 0.075426f, 0.009668f, -0.076237f, -0.002191f, 0.040199f, -0.028611f, -0.064107f, 0.037053f, 0.049432f, -0.079036f, 0.011667f, 0.059602f, -0.034883f, -0.006064f, 0.065217f, -0.004779f, -0.026606f, 0.015333f, 0.027564f, -0.035677f, -0.009749f, 0.038274f, -0.008713f, -0.033341f, 0.028088f, 0.016780f, -0.019432f, 0.062990f, -0.135594f, -0.009255f, -0.024327f, -0.149947f, -0.027321f, -0.046009f, 0.014316f, 0.026196f, 0.044040f, -0.019498f, -0.059089f, -0.021823f, -0.085079f, 0.011666f, 0.029820f, 0.017848f, 0.012962f, -0.067741f, 0.041279f, 0.006946f, -0.082292f, 0.060065f, -0.088463f, -0.035668f, -0.033504f, - 0.024187f, 0.063139f, 0.074128f, -0.006573f, -0.016316f, -0.142878f, 0.061432f, 0.143607f, 0.052841f, 0.002771f, -0.078901f, -0.116594f, -0.047380f, -0.010359f, 0.060895f, -0.073250f, -0.043149f, -0.075244f, -0.023522f, 0.134055f, 0.145443f, -0.025902f, -0.066679f, -0.058292f, -0.030467f, -0.015963f, 0.073373f, -0.035401f, 0.022123f, 0.014591f, 0.048882f, -0.014040f, -0.032554f, -0.085470f, -0.036560f, 0.128482f, 0.055543f, 0.085267f, -0.078632f, -0.044434f, -0.036307f, 0.087125f, 0.002009f, -0.143648f, -0.137650f, 0.076460f, 0.133132f, 0.222192f, 0.039212f, -0.190106f, 0.031898f, -0.050780f, 0.064606f, 0.061309f, -0.231808f, -0.074756f, 0.045526f, 0.121494f, 0.029928f, -0.118855f, -0.026266f, -0.012575f, 0.068833f, 0.057835f, 0.015839f, -0.095361f, -0.014633f, 0.020006f, 0.042334f, 0.020246f, -0.024513f, 0.003315f, -0.052198f, -0.007366f, -0.000756f, 0.049879f, -0.034528f, 0.066768f, -0.042967f, 0.018541f, 0.039277f, -0.016874f, 0.032589f, 0.028049f, 0.053067f, 0.002025f, -0.025643f, -0.031233f, 0.004844f, 0.001894f, 0.009014f, 0.004856f, -0.001727f, -0.004244f, -0.019158f, -0.020913f, - -0.004019f, 0.032800f, -0.008616f, 0.000252f, -0.007004f, 0.010520f, 0.002501f, 0.017992f, -0.017023f, -0.022778f, -0.043842f, -0.022399f, -0.002609f, 0.023931f, -0.023464f, -0.002163f, -0.068645f, 0.058635f, -0.061272f, -0.012947f, 0.001903f, 0.015727f, -0.011861f, 0.014134f, 0.023317f, -0.038996f, -0.034114f, -0.000473f, 0.008535f, 0.025485f, -0.028805f, 0.004275f, 0.021328f, -0.016593f, 0.013151f, -0.008492f, 0.066071f, -0.000692f, -0.010451f, 0.038464f, 0.020506f, 0.034207f, -0.017602f, 0.021931f, -0.007333f, -0.000667f, 0.027569f, 0.020156f, 0.004226f, 0.008602f, 0.037325f, -0.034982f, -0.011076f, 0.004015f, 0.050510f, -0.000575f, -0.011914f, 0.047626f, -0.012486f, -0.020357f, -0.020944f, 0.039500f, -0.009751f, 0.017385f, 0.010068f, 0.006211f, -0.014220f, 0.007287f, 0.014879f, 0.005639f, 0.043918f, 0.022238f, 0.012186f, -0.018980f, -0.003293f, 0.017137f, -0.032031f, 0.011624f, 0.011661f, 0.032892f, 0.000073f, -0.003664f, 0.018119f, 0.004294f, -0.037107f, 0.041564f, 0.012281f, -0.009445f, 0.033987f, -0.023110f, -0.003241f, -0.017199f, -0.015573f, 0.033999f, 0.024390f, -0.002151f, - 0.012039f, -0.020007f, 0.004372f, -0.027042f, -0.002923f, -0.024755f, 0.005237f, 0.016263f, 0.005537f, 0.003161f, -0.005726f, -0.003297f, 0.004441f, -0.014752f, 0.004019f, -0.006322f, 0.006750f, -0.009689f, -0.003773f, -0.008964f, -0.011895f, 0.005717f, -0.002325f, -0.000674f, -0.004585f, 0.016108f, 0.005884f, -0.020212f, -0.021498f, -0.014384f, 0.004159f, 0.006704f, 0.015168f, 0.009246f, -0.019830f, -0.002832f, -0.007653f, 0.017996f, -0.004789f, 0.019400f, 0.007726f, -0.015787f, -0.000177f, 0.008641f, -0.009327f, 0.012397f, -0.007550f, 0.014006f, -0.010105f, -0.003099f, 0.004227f, -0.007836f, 0.107021f, 0.008627f, -0.039566f, -0.032748f, 0.005287f, 0.024202f, -0.001513f, 0.022090f, -0.008448f, -0.005926f, -0.029729f, -0.006539f, -0.020837f, 0.033030f, -0.020727f, -0.001701f, -0.013111f, -0.006177f, -0.007721f, 0.003599f, -0.022031f, 0.003349f, -0.009537f, -0.015499f, 0.004469f, -0.002488f, 0.001165f, -0.004214f, 0.007655f, 0.003706f, -0.018455f, -0.011828f, -0.000100f, -0.012484f, -0.010929f, 0.009084f, -0.003070f, -0.018805f, 0.001150f, -0.010472f, 0.007904f, -0.027767f, 0.013757f, -0.012088f, - -0.021159f, 0.006366f, -0.009762f, -0.010948f, 0.002730f, -0.000217f, 0.001186f, -0.004652f, 0.004529f, -0.008522f, 0.009251f, -0.005862f, 0.000858f, 0.015424f, -0.011306f, 0.005148f, -0.003086f, -0.001683f, 0.004070f, -0.012832f, 0.011481f, -0.013490f, 0.011459f, -0.002858f, -0.000721f, -0.008658f, 0.010817f, -0.012968f, 0.000687f, 0.004506f, -0.017142f, 0.016875f, -0.010507f, 0.007126f, -0.008001f, 0.006803f, -0.006208f, -0.007566f, 0.012410f, -0.007968f, -0.001737f, 0.012304f, -0.008173f, -0.000190f, 0.000844f, 0.001881f, -0.009024f, 0.000624f, -0.000977f, -0.003944f, -0.002667f, 0.002038f, -0.002965f, -0.004851f, -0.002556f, 0.005303f, -0.005125f, 0.003949f, -0.001593f, -0.000662f, -0.001781f, -0.003757f, 0.003243f, -0.002573f, -0.003082f, 0.003602f, -0.004083f, 0.002825f, 0.001154f, -0.002445f, 0.000365f, -0.000715f, 0.000809f, -0.007586f, 0.006945f, -0.007802f, 0.001105f, -0.001252f, -0.004255f, 0.000911f, -0.002452f, 0.005116f, -0.013127f, -0.051841f, -0.082856f, 0.087852f, 0.306656f, 0.058453f, 0.092240f, -0.188979f, -0.262127f, -0.109891f, -0.137148f, 0.105813f, 0.246242f, 0.141155f, - 0.095199f, 0.009233f, -0.135347f, -0.120292f, -0.119799f, -0.049360f, 0.068308f, 0.057811f, 0.062272f, 0.055506f, -0.001652f, -0.009300f, -0.014028f, -0.019609f, -0.028253f, -0.004114f, 0.037820f, -0.003609f, -0.021663f, -0.008835f, -0.031386f, -0.018025f, -0.005310f, -0.008118f, 0.060558f, 0.055871f, 0.033383f, 0.035376f, 0.002003f, -0.043864f, -0.044288f, -0.081823f, -0.054167f, 0.007233f, 0.006821f, 0.016405f, 0.048295f, 0.068312f, 0.041306f, 0.034289f, -0.001424f, -0.039059f, -0.053872f, -0.046870f, -0.038982f, 0.005372f, 0.014095f, 0.024886f, 0.017491f, 0.011311f, 0.002639f, -0.014364f, 0.005677f, 0.001150f, 0.006039f, 0.033857f, -0.003070f, 0.014878f, 0.015615f, -0.025551f, -0.047807f, -0.049543f, -0.044380f, 0.011617f, 0.036583f, 0.026247f, 0.040016f, 0.034994f, -0.011711f, 0.008652f, 0.021854f, -0.014222f, -0.013065f, -0.030869f, -0.039461f, -0.015552f, -0.009267f, -0.004298f, 0.016813f, 0.007637f, 0.009107f, 0.026472f, 0.025411f, 0.026057f, 0.015033f, 0.006515f, -0.013089f, -0.016465f, -0.040579f, -0.044735f, -0.031542f, -0.023344f, 0.010095f, 0.028925f, 0.036661f, 0.048961f, - 0.035146f, 0.022249f, 0.000366f, -0.015404f, -0.024000f, -0.050948f, -0.053823f, -0.019165f, 0.009650f, 0.025617f, 0.020586f, 0.017789f, 0.020603f, 0.014734f, -0.000984f, -0.003960f, 0.002189f, 0.000434f, -0.008929f, -0.008136f, -0.027207f, -0.017983f, -0.000754f, 0.009741f, 0.013409f, 0.010520f, -0.004058f, -0.000558f, 0.009882f, 0.007696f, 0.000586f, 0.005329f, 0.004766f, -0.003237f, -0.012827f, -0.011605f, -0.011109f, -0.002620f, -0.002941f, -0.000257f, 0.002349f, 0.011339f, 0.012618f, 0.011340f, 0.005407f, 0.003630f, -0.005378f, -0.009833f, -0.012078f, -0.007130f, -0.004259f, -0.000037f, 0.000630f, 0.004169f, 0.003634f, 0.006786f, 0.004601f, 0.002772f, -0.001166f, -0.000525f, -0.001641f, -0.001041f, -0.004163f, -0.003793f, -0.003245f, 0.002246f, 0.002634f, 0.003261f, -0.000789f, -0.001189f, -0.001918f, 0.001745f, 0.000377f, 0.001718f, 0.000341f, 0.001969f, -0.000881f, -0.000846f, -0.001877f, 0.001023f, -0.000347f, 0.000538f, -0.001989f, -0.000732f, -0.001691f, 0.000663f, 0.000174f, 0.002390f, 0.000425f, 0.001090f, -0.000165f, 0.001708f, -0.000024f, 0.000242f, -0.002578f, -0.001451f, - -0.002303f, 0.000230f, -0.000289f, 0.001737f, 0.000163f, 0.001579f, 0.000272f, 0.001253f, -0.000966f, 0.000208f, -0.001180f, 0.000521f, -0.000884f, 0.000674f, -0.000671f, 0.000734f, -0.001012f, 0.000391f, -0.000731f, 0.001045f, -0.000414f, 0.000893f, -0.000706f, 0.000778f, -0.000691f, 0.000812f, -0.000660f, 0.000772f, -0.000779f, 0.000684f, -0.000826f, 0.000652f, -0.000831f, 0.000689f, -0.000756f} - }, - { - {0.004110f, 0.011707f, 0.001045f, 0.007816f, -0.001759f, -0.001209f, -0.004200f, 0.008338f, 0.005351f, -0.004995f, -0.006466f, 0.004170f, -0.001616f, -0.010067f, -0.011549f, 0.002689f, 0.000619f, -0.003974f, -0.003911f, -0.007864f, 0.005024f, -0.009240f, 0.002389f, -0.000966f, 0.002120f, 0.000694f, 0.002007f, -0.004186f, -0.000561f, 0.001567f, 0.002678f, -0.001004f, 0.003269f, 0.002294f, -0.004033f, 0.003008f, -0.002425f, -0.007888f, 0.011153f, -0.002197f, 0.000546f, 0.002585f, -0.001354f, 0.006067f, 0.007876f, -0.001744f, 0.002981f, 0.005827f, 0.000535f, -0.006316f, -0.004746f, 0.001505f, 0.003767f, -0.001961f, 0.002078f, 0.007165f, -0.006324f, -0.005800f, 0.006048f, 0.001080f, -0.002342f, -0.003941f, -0.000128f, 0.001307f, 0.004599f, -0.007360f, 0.003628f, 0.001792f, -0.005650f, -0.006221f, 0.005294f, -0.003415f, -0.007500f, -0.003288f, -0.000668f, 0.011321f, 0.013191f, -0.001200f, 0.002223f, -0.001702f, 0.002062f, -0.002233f, 0.003534f, 0.002060f, -0.002130f, -0.000793f, -0.002264f, 0.001062f, -0.003032f, 0.002836f, 0.002627f, 0.000526f, -0.003557f, 0.000366f, -0.000129f, 0.001507f, - -0.000889f, 0.002373f, -0.001221f, 0.000373f, 0.000199f, 0.001450f, -0.000294f, 0.000464f, 0.000485f, 0.001500f, -0.000032f, -0.014460f, -0.006252f, -0.009976f, 0.006536f, -0.004839f, -0.006779f, -0.004590f, -0.006079f, -0.001208f, 0.002238f, 0.010939f, 0.001885f, -0.005846f, 0.009230f, 0.000359f, 0.009515f, -0.009150f, 0.014738f, 0.006840f, 0.015988f, -0.002872f, -0.005450f, -0.001102f, -0.008807f, -0.000751f, -0.000634f, -0.003191f, 0.002984f, 0.000293f, -0.006995f, -0.001698f, -0.000032f, 0.002161f, 0.006932f, 0.001598f, -0.010456f, -0.008707f, -0.003309f, 0.005866f, 0.000383f, 0.000284f, -0.005304f, 0.008696f, -0.000245f, 0.000632f, -0.003760f, 0.001104f, -0.002275f, 0.004561f, -0.001488f, 0.014499f, 0.000115f, -0.001916f, 0.005489f, -0.003671f, -0.006535f, -0.002709f, 0.004906f, 0.008746f, 0.001444f, 0.005353f, 0.001311f, 0.000896f, -0.004616f, -0.004510f, -0.007389f, -0.000340f, -0.007660f, 0.001890f, 0.006223f, 0.006640f, 0.004666f, -0.002381f, -0.003400f, 0.005959f, -0.004248f, -0.001783f, 0.003721f, -0.003424f, -0.000608f, -0.001788f, 0.003852f, 0.006853f, 0.003536f, 0.001999f, - -0.001745f, -0.000787f, 0.001232f, -0.000701f, 0.004593f, 0.000765f, -0.002251f, -0.001347f, -0.001036f, -0.000327f, 0.000640f, 0.000555f, 0.000070f, -0.000731f, 0.002129f, 0.001337f, 0.000102f, 0.000808f, -0.001665f, -0.001077f, -0.001329f, -0.001569f, -0.000552f, -0.001757f, -0.001706f, -0.000389f, 0.002186f, 0.010098f, 0.010953f, 0.005763f, 0.000034f, 0.008908f, -0.004790f, -0.007599f, 0.007425f, 0.007677f, 0.009787f, 0.014349f, 0.001420f, -0.009154f, 0.005379f, -0.008729f, -0.000505f, 0.002914f, 0.002181f, 0.015987f, 0.001359f, -0.012877f, -0.000492f, 0.002297f, 0.005518f, -0.000930f, -0.004259f, -0.014174f, -0.002667f, 0.012032f, 0.004282f, 0.007915f, 0.009393f, 0.007706f, 0.002276f, -0.001336f, 0.008366f, -0.010523f, -0.000190f, -0.007152f, 0.019345f, -0.001033f, 0.000672f, 0.008561f, -0.006990f, -0.001110f, 0.003140f, -0.001066f, 0.011595f, -0.001757f, 0.003598f, 0.010979f, -0.001996f, 0.003453f, 0.001048f, -0.000516f, 0.000029f, -0.001426f, -0.003032f, 0.004757f, 0.006502f, -0.001522f, 0.006473f, 0.002329f, 0.012674f, 0.014347f, -0.000625f, 0.003852f, 0.002508f, -0.007213f, - 0.007239f, -0.001748f, -0.005895f, 0.002551f, 0.007133f, 0.002002f, -0.001687f, 0.012723f, -0.001666f, 0.003476f, 0.003949f, 0.001910f, -0.006309f, -0.000343f, -0.001177f, 0.001056f, -0.003265f, -0.000670f, 0.000525f, 0.001383f, 0.001500f, 0.002372f, -0.000683f, 0.001179f, -0.003023f, -0.002110f, -0.003782f, 0.003026f, 0.001130f, -0.000544f, 0.001330f, -0.000499f, -0.003078f, 0.002067f, 0.000452f, 0.001510f, -0.000843f, -0.001082f, 0.000707f, 0.003820f, -0.003773f, 0.002192f, 0.016052f, 0.015554f, -0.006072f, -0.009046f, -0.007742f, -0.005466f, 0.004107f, -0.017196f, -0.001571f, 0.002273f, -0.008089f, -0.015247f, 0.014807f, -0.003280f, -0.003599f, 0.002252f, 0.006884f, 0.005934f, -0.007398f, -0.003092f, -0.000194f, -0.000927f, 0.003650f, 0.005068f, -0.002735f, 0.006258f, -0.004652f, 0.009653f, -0.001048f, 0.000285f, -0.004874f, 0.005046f, 0.002029f, -0.001599f, -0.004854f, 0.002253f, -0.002701f, -0.004473f, -0.003532f, 0.000760f, 0.003347f, -0.009347f, 0.000925f, -0.017539f, -0.009943f, 0.006158f, -0.002492f, 0.001972f, 0.004026f, 0.011365f, -0.003562f, -0.005891f, -0.000268f, 0.000255f, - 0.004962f, 0.004535f, -0.005239f, -0.002471f, 0.012809f, 0.000376f, 0.002068f, 0.000971f, 0.005774f, -0.010679f, 0.000491f, 0.005247f, 0.009983f, 0.001957f, 0.004366f, 0.014869f, -0.003554f, -0.001522f, -0.007979f, -0.000005f, 0.002595f, 0.005132f, 0.000113f, -0.003344f, 0.004703f, -0.000508f, 0.008442f, -0.000034f, -0.000211f, 0.000907f, -0.010406f, -0.005539f, -0.006114f, 0.005749f, -0.000913f, -0.001811f, -0.000008f, 0.000659f, -0.000331f, 0.002964f, -0.000891f, -0.001868f, -0.002233f, -0.001254f, -0.003198f, -0.002240f, 0.002515f, 0.000035f, -0.000839f, -0.001773f, 0.000812f, 0.000530f, 0.000259f, -0.001574f, 0.002751f, 0.001043f, 0.001742f, -0.000520f, -0.000141f, -0.002016f, -0.002055f, 0.001255f, -0.000980f, 0.001738f, 0.002449f, -0.000095f, -0.010275f, -0.015693f, 0.006649f, -0.005020f, 0.000173f, -0.008003f, 0.006204f, -0.018136f, -0.015142f, -0.017093f, -0.005932f, -0.003495f, -0.012164f, 0.006315f, 0.016374f, -0.011974f, 0.002430f, 0.019535f, -0.004596f, -0.005111f, -0.009024f, 0.001748f, -0.000165f, 0.008757f, 0.002693f, 0.006346f, 0.004212f, -0.006124f, -0.012416f, -0.005676f, - 0.007236f, -0.003991f, -0.007637f, 0.002083f, 0.002997f, 0.002603f, 0.001451f, 0.017040f, -0.008069f, 0.009362f, -0.004503f, 0.004793f, -0.005018f, 0.014211f, -0.010551f, 0.005912f, -0.000971f, -0.008147f, 0.007657f, -0.002905f, -0.002870f, 0.008552f, 0.004338f, -0.000530f, -0.003805f, 0.007792f, 0.003636f, -0.007630f, -0.009483f, 0.006607f, 0.010253f, 0.006027f, 0.000125f, -0.004321f, 0.000411f, 0.006804f, -0.002967f, 0.008184f, -0.001998f, -0.016081f, 0.000395f, -0.006954f, 0.023054f, 0.008285f, -0.013307f, -0.007234f, -0.002723f, -0.005777f, 0.005856f, 0.005990f, 0.004271f, -0.002646f, 0.004959f, 0.004287f, 0.001315f, -0.000779f, -0.006932f, 0.001544f, 0.002217f, -0.001748f, 0.001442f, 0.002568f, -0.001037f, -0.000089f, 0.001371f, -0.000233f, -0.002150f, -0.001490f, 0.000034f, 0.001981f, -0.001974f, 0.001887f, 0.001855f, -0.002346f, -0.003385f, -0.003897f, 0.000001f, 0.002646f, -0.001248f, 0.002375f, -0.001896f, 0.000042f, 0.001513f, -0.000954f, -0.003807f, 0.000797f, 0.005983f, -0.013389f, -0.016537f, 0.014267f, -0.003044f, -0.013319f, 0.001125f, -0.003352f, 0.013766f, 0.006952f, - -0.003487f, 0.002670f, -0.000664f, -0.001940f, -0.002429f, 0.016105f, 0.003166f, 0.000981f, -0.010875f, -0.004864f, -0.002511f, 0.005732f, 0.007070f, 0.021650f, 0.000588f, 0.000841f, -0.000609f, 0.001600f, -0.009410f, 0.000564f, 0.003964f, -0.011627f, -0.008254f, -0.007480f, -0.000910f, 0.015870f, -0.012739f, 0.002322f, 0.007238f, 0.003256f, -0.005926f, 0.006694f, -0.015912f, 0.013203f, -0.002769f, 0.000147f, 0.007148f, -0.007930f, -0.009406f, -0.014526f, 0.003168f, -0.004654f, 0.013957f, 0.004979f, 0.000400f, 0.002797f, 0.004286f, 0.011053f, -0.004765f, -0.002251f, 0.011444f, -0.002191f, -0.006440f, -0.000089f, 0.011452f, 0.011700f, 0.010588f, 0.005854f, -0.006961f, 0.006916f, 0.009583f, -0.011104f, 0.014460f, -0.008655f, -0.008185f, 0.013215f, 0.001419f, 0.019000f, -0.000197f, -0.010423f, 0.004695f, -0.004557f, 0.012527f, 0.006115f, 0.003479f, 0.001000f, 0.004319f, -0.002045f, 0.007886f, 0.002893f, 0.003154f, 0.002529f, 0.004631f, -0.000208f, -0.000357f, 0.003755f, -0.000107f, 0.002802f, -0.001383f, 0.004515f, 0.008923f, -0.005016f, -0.002354f, 0.001732f, 0.001138f, 0.000736f, - 0.002285f, -0.000283f, 0.000735f, 0.001996f, 0.004382f, 0.000486f, 0.008214f, 0.002121f, 0.000972f, -0.003513f, 0.000947f, 0.002881f, -0.003669f, 0.000974f, 0.001622f, -0.000049f, 0.001061f, -0.000074f, -0.029420f, -0.019553f, 0.005330f, 0.009379f, 0.020284f, -0.012409f, 0.010929f, 0.001911f, 0.011503f, -0.000691f, -0.005233f, -0.007045f, 0.007135f, 0.020802f, 0.001855f, -0.001945f, -0.019868f, -0.016805f, 0.000189f, -0.012384f, -0.007139f, 0.000599f, 0.002592f, -0.012692f, -0.003689f, 0.002936f, 0.007458f, 0.003824f, -0.008065f, -0.000141f, 0.009455f, 0.007528f, 0.001654f, -0.007831f, 0.001490f, -0.004837f, 0.002336f, 0.002516f, 0.004365f, -0.006059f, 0.007512f, 0.018097f, -0.001797f, -0.001476f, 0.003588f, -0.010273f, 0.004845f, 0.014550f, -0.014410f, -0.017174f, -0.008776f, 0.001293f, -0.022039f, 0.000431f, 0.000675f, 0.002965f, 0.000256f, -0.000441f, -0.010446f, -0.005768f, -0.006773f, -0.001046f, 0.015060f, 0.022065f, 0.000662f, 0.001344f, 0.010854f, -0.004652f, -0.001826f, 0.004905f, 0.024984f, 0.003037f, 0.008996f, 0.017408f, 0.003225f, -0.011492f, 0.004739f, 0.005120f, - -0.005233f, 0.005272f, 0.004524f, -0.001291f, -0.005417f, 0.002438f, 0.001605f, -0.001298f, -0.009270f, 0.003969f, 0.008516f, 0.003064f, 0.006204f, 0.003341f, 0.007484f, -0.001742f, -0.002815f, 0.006769f, 0.005717f, -0.001899f, -0.000393f, -0.002184f, 0.004916f, 0.005223f, -0.004329f, 0.005186f, 0.001411f, 0.000530f, 0.001314f, 0.002757f, 0.003964f, 0.000391f, 0.003458f, -0.002490f, -0.001292f, -0.000149f, -0.000659f, 0.001293f, -0.002361f, 0.000218f, -0.000740f, 0.000887f, -0.003176f, -0.002895f, 0.015067f, 0.009654f, -0.014149f, -0.000483f, 0.030012f, 0.026748f, 0.005525f, 0.016185f, 0.019764f, 0.005145f, -0.000380f, 0.013174f, -0.005988f, 0.000281f, -0.011924f, 0.009813f, -0.000900f, 0.000619f, 0.004269f, 0.005290f, 0.016294f, -0.013677f, -0.012699f, 0.012666f, 0.002468f, 0.005859f, -0.009935f, 0.001913f, -0.003541f, 0.006582f, -0.000007f, 0.009183f, 0.008785f, -0.008913f, 0.007423f, 0.006420f, -0.010512f, 0.026839f, 0.004564f, 0.005329f, -0.020826f, -0.006520f, -0.001773f, 0.017439f, 0.016030f, -0.001523f, -0.017893f, 0.011736f, -0.015573f, -0.004688f, 0.013438f, -0.000279f, - -0.011077f, 0.013342f, 0.016518f, -0.004122f, 0.005496f, -0.006579f, -0.023420f, 0.000248f, 0.014835f, -0.006761f, -0.008085f, 0.009944f, -0.011293f, -0.016869f, 0.004108f, 0.011625f, 0.020868f, 0.011111f, -0.015834f, 0.006696f, -0.018582f, -0.021655f, 0.019973f, 0.009559f, 0.007236f, -0.013412f, -0.014716f, -0.002080f, 0.015026f, 0.005167f, 0.021516f, 0.009714f, 0.005342f, -0.022872f, 0.003597f, -0.006284f, 0.000754f, -0.005245f, 0.004663f, 0.001570f, 0.005669f, 0.009840f, 0.004946f, 0.000994f, 0.004158f, -0.003696f, -0.002022f, -0.003767f, -0.000188f, -0.003516f, -0.001223f, 0.001578f, 0.007112f, 0.001409f, -0.003162f, -0.001154f, 0.002175f, 0.000471f, -0.000793f, -0.007245f, 0.000258f, -0.003629f, 0.001252f, -0.005103f, -0.005945f, 0.004015f, 0.004412f, 0.007395f, -0.007264f, 0.000260f, 0.003586f, 0.031153f, 0.020158f, -0.013659f, -0.003609f, -0.000626f, 0.005567f, 0.004296f, -0.001881f, -0.012336f, 0.003052f, -0.008496f, 0.013092f, 0.000286f, 0.005097f, -0.004375f, -0.001852f, -0.012879f, -0.006709f, 0.026745f, 0.008961f, -0.016516f, 0.007831f, -0.016140f, -0.011235f, -0.025174f, - 0.010956f, 0.000281f, 0.000455f, 0.005792f, -0.000632f, -0.011497f, 0.018938f, 0.010655f, -0.004112f, -0.019173f, 0.019101f, -0.013212f, 0.005076f, -0.000646f, 0.006287f, 0.003605f, 0.012150f, 0.013805f, -0.003219f, 0.007571f, 0.022166f, 0.002676f, -0.006907f, -0.006499f, -0.003883f, 0.003269f, 0.014804f, -0.004231f, 0.006035f, 0.000989f, -0.013504f, 0.000342f, -0.003304f, 0.006422f, -0.020328f, -0.000524f, -0.033907f, -0.020756f, -0.018909f, -0.004979f, -0.018687f, 0.012389f, -0.004656f, -0.015678f, -0.004147f, -0.001936f, -0.012525f, -0.005647f, -0.000429f, 0.001057f, -0.007509f, -0.016476f, -0.016283f, 0.000669f, -0.003527f, 0.003768f, 0.009150f, -0.001673f, 0.004582f, 0.002058f, -0.000065f, -0.000492f, -0.008868f, -0.000608f, -0.000175f, -0.007358f, -0.000579f, 0.006482f, 0.012919f, -0.002472f, -0.006169f, 0.004596f, -0.007989f, 0.006516f, -0.006669f, -0.002740f, 0.001293f, -0.005114f, -0.005993f, -0.000297f, -0.003740f, 0.000671f, -0.001392f, -0.006302f, 0.002976f, -0.000516f, 0.007537f, 0.004798f, -0.005309f, 0.004269f, -0.002964f, 0.003946f, -0.002432f, 0.002586f, 0.002654f, 0.001761f, - 0.000160f, 0.002719f, -0.003509f, -0.002188f, -0.003900f, -0.008185f, 0.001049f, 0.002548f, -0.000813f, 0.001396f, -0.006174f, -0.021410f, -0.026649f, -0.012638f, -0.017698f, 0.046023f, -0.022218f, 0.010447f, -0.020974f, -0.006028f, 0.002341f, -0.003388f, -0.031310f, -0.000632f, -0.014814f, 0.001144f, 0.037137f, -0.011815f, 0.015655f, 0.020404f, 0.007487f, 0.008316f, 0.022387f, 0.006660f, -0.008540f, 0.006364f, 0.008857f, 0.009432f, 0.004117f, -0.004589f, 0.026039f, 0.001028f, -0.001952f, -0.004301f, 0.007157f, -0.002172f, -0.008886f, 0.008810f, -0.003205f, 0.006332f, -0.024963f, 0.001091f, -0.004716f, 0.022752f, -0.008825f, 0.007372f, 0.034182f, -0.002920f, 0.000851f, -0.008264f, -0.013933f, -0.000761f, -0.002169f, -0.014351f, 0.018227f, -0.003849f, 0.013264f, 0.001441f, 0.012536f, -0.007145f, -0.001194f, 0.027262f, 0.013460f, -0.021090f, -0.010919f, 0.005807f, 0.006690f, 0.003282f, 0.005949f, -0.006131f, 0.007850f, 0.010025f, 0.022757f, -0.028997f, 0.001897f, -0.012379f, 0.006072f, -0.000492f, 0.003474f, 0.010723f, 0.015684f, -0.010339f, 0.011127f, -0.007478f, -0.004942f, -0.004165f, - -0.003715f, 0.008780f, -0.019600f, -0.003859f, -0.008961f, 0.011355f, 0.009325f, 0.003930f, 0.004883f, -0.006602f, 0.007735f, 0.003490f, 0.005616f, -0.000759f, 0.004490f, -0.005856f, -0.003126f, -0.007348f, -0.000448f, -0.001193f, -0.006438f, -0.000106f, -0.000509f, -0.001774f, 0.000088f, 0.007827f, 0.004986f, -0.004329f, -0.006895f, 0.003681f, 0.002863f, 0.008978f, -0.006754f, 0.000533f, -0.002319f, 0.004025f, 0.004767f, -0.002364f, -0.003613f, -0.007296f, -0.015117f, -0.013694f, -0.014622f, 0.015849f, -0.030758f, -0.009156f, -0.019243f, 0.009548f, 0.032044f, -0.017466f, 0.001019f, 0.000847f, -0.006184f, 0.012266f, -0.010213f, 0.004894f, -0.003117f, -0.013225f, 0.028593f, 0.001359f, -0.009222f, 0.000346f, -0.004093f, -0.012682f, 0.010031f, -0.009733f, 0.009421f, -0.018123f, -0.008312f, 0.012106f, 0.009023f, -0.030237f, -0.005334f, -0.025761f, 0.007740f, -0.004381f, -0.024620f, 0.030037f, -0.008338f, -0.000674f, -0.022770f, -0.025153f, 0.001547f, -0.022689f, -0.002863f, -0.019617f, -0.016579f, 0.019625f, 0.002271f, -0.025493f, 0.008428f, -0.022830f, 0.020357f, 0.007222f, -0.009729f, 0.000671f, - 0.006609f, 0.021181f, -0.016377f, -0.023414f, 0.023672f, -0.016578f, -0.009297f, 0.012243f, 0.017892f, -0.033143f, -0.016156f, 0.018660f, 0.014052f, 0.007161f, -0.001644f, 0.002200f, -0.023639f, 0.008021f, 0.007994f, 0.012957f, -0.004097f, -0.025236f, -0.018121f, 0.008747f, -0.021581f, -0.019104f, 0.008066f, -0.001398f, 0.000369f, 0.007763f, 0.018362f, -0.000123f, -0.000701f, 0.016884f, 0.001648f, -0.002929f, 0.002981f, -0.002482f, -0.003406f, 0.003509f, -0.004423f, -0.003327f, -0.008545f, -0.008399f, -0.005819f, 0.001342f, -0.004837f, -0.000102f, 0.003527f, 0.002597f, -0.000435f, -0.000283f, 0.003766f, -0.004495f, -0.006785f, 0.001869f, -0.000191f, 0.006333f, -0.006255f, -0.001985f, -0.007098f, 0.008080f, 0.008756f, 0.001690f, -0.000417f, -0.005589f, -0.002173f, -0.007782f, 0.000660f, 0.001023f, -0.004245f, 0.001116f, 0.001726f, 0.001648f, -0.001885f, 0.015612f, -0.024148f, -0.039623f, -0.031829f, 0.014288f, -0.038073f, -0.001942f, 0.028992f, -0.002656f, 0.002151f, 0.020655f, -0.013701f, -0.011831f, 0.046032f, -0.018296f, 0.010824f, 0.017395f, -0.003176f, -0.041758f, -0.003398f, 0.004302f, - -0.010409f, -0.005867f, -0.009630f, 0.038784f, 0.000438f, 0.000349f, -0.001850f, -0.028095f, 0.005189f, -0.016215f, -0.008041f, 0.001653f, 0.004744f, 0.008209f, 0.022635f, 0.004925f, -0.005761f, 0.044331f, 0.004732f, -0.011074f, -0.040564f, -0.006016f, 0.029850f, -0.006554f, -0.018587f, -0.025084f, -0.021967f, -0.018888f, -0.011781f, 0.031511f, 0.012334f, 0.001732f, 0.017608f, 0.026314f, 0.014767f, -0.005834f, -0.004587f, 0.027203f, -0.005344f, -0.008450f, 0.007968f, 0.020784f, 0.003013f, -0.021523f, 0.004969f, -0.002244f, -0.032014f, -0.002501f, 0.025541f, -0.012711f, -0.014702f, -0.003665f, 0.034323f, -0.027369f, -0.005441f, -0.015305f, 0.015693f, 0.009013f, 0.007286f, 0.010892f, -0.004469f, -0.005956f, 0.011638f, 0.009195f, 0.006437f, -0.001946f, 0.001456f, 0.007222f, -0.020126f, -0.003796f, 0.002661f, -0.010503f, 0.000288f, 0.010946f, -0.001097f, 0.001964f, -0.004315f, -0.001325f, 0.006053f, 0.007712f, 0.011694f, 0.006492f, -0.001944f, 0.004085f, -0.006667f, -0.008584f, 0.002451f, -0.001736f, -0.006917f, 0.007640f, 0.004108f, 0.005763f, 0.001246f, 0.002757f, 0.005998f, 0.003250f, - -0.001728f, -0.004353f, -0.001126f, 0.002362f, 0.000013f, 0.002395f, 0.000501f, 0.002986f, 0.001848f, 0.005156f, 0.000660f, -0.005090f, 0.011082f, 0.009009f, -0.008557f, -0.002963f, -0.004113f, -0.002929f, 0.004247f, -0.005202f, 0.003055f, 0.032331f, 0.003253f, -0.028892f, -0.001072f, 0.008650f, -0.001052f, -0.013185f, 0.012523f, -0.009764f, 0.025696f, -0.019809f, 0.017649f, 0.038595f, -0.010477f, -0.010324f, -0.009134f, -0.008075f, 0.034449f, -0.025599f, -0.028126f, -0.021478f, 0.007781f, -0.011232f, -0.018128f, -0.008374f, 0.012337f, -0.017392f, 0.009533f, 0.002209f, 0.013470f, 0.020020f, 0.002408f, -0.002639f, -0.003925f, 0.019723f, -0.005175f, 0.006915f, -0.024347f, -0.000303f, -0.008725f, 0.019214f, -0.025878f, 0.021083f, -0.009001f, -0.013395f, 0.021230f, 0.036842f, -0.020868f, 0.010403f, -0.004690f, 0.007377f, -0.055585f, -0.044111f, -0.026796f, 0.003718f, -0.017045f, 0.007176f, 0.001690f, -0.020752f, -0.016403f, 0.001644f, 0.044095f, 0.010273f, -0.027689f, -0.041360f, -0.021875f, -0.015376f, 0.026962f, -0.018956f, -0.026981f, 0.006251f, 0.005746f, -0.025002f, -0.001709f, -0.000592f, - -0.012464f, -0.003015f, -0.000808f, -0.001226f, 0.011991f, 0.002800f, -0.014430f, -0.012862f, -0.007123f, -0.018460f, -0.010107f, 0.002830f, 0.020392f, 0.003251f, 0.003685f, -0.006161f, -0.017043f, -0.002822f, 0.013647f, -0.000870f, -0.008024f, 0.012489f, -0.019419f, -0.009678f, 0.002716f, 0.002825f, -0.000498f, 0.001906f, 0.001175f, -0.006740f, -0.013659f, -0.005089f, 0.010096f, -0.006229f, -0.004985f, -0.005645f, -0.012218f, -0.013572f, 0.004788f, -0.005051f, -0.003104f, -0.012817f, 0.002902f, 0.007946f, 0.009757f, -0.000719f, -0.006186f, -0.007291f, 0.006972f, 0.002182f, 0.006285f, 0.055877f, 0.036124f, -0.009273f, 0.003438f, 0.036255f, -0.014421f, 0.001513f, 0.015238f, 0.039229f, 0.022640f, -0.006506f, -0.008880f, -0.013185f, 0.003312f, -0.007136f, 0.000420f, 0.001267f, 0.040839f, 0.068127f, -0.004145f, 0.047083f, 0.029396f, 0.006335f, 0.007182f, -0.033080f, -0.033244f, -0.003484f, 0.008621f, -0.002106f, 0.007976f, -0.012171f, -0.024914f, -0.041525f, -0.003728f, -0.026618f, -0.022881f, -0.014787f, -0.023676f, -0.016636f, -0.001044f, 0.039109f, -0.001346f, -0.029182f, -0.002587f, 0.008674f, - 0.028720f, -0.008762f, -0.007412f, -0.017308f, 0.012989f, -0.052553f, -0.047569f, -0.022558f, -0.023768f, -0.025095f, -0.015478f, 0.017137f, -0.021431f, -0.029319f, -0.024971f, -0.043996f, 0.022653f, 0.012452f, -0.039416f, 0.020479f, 0.039721f, 0.078254f, 0.042967f, -0.000197f, 0.014200f, -0.044573f, -0.018385f, 0.024446f, 0.020390f, -0.011203f, -0.030371f, 0.004243f, 0.006358f, 0.027888f, -0.003516f, -0.028040f, -0.004955f, 0.045478f, 0.028868f, 0.033010f, 0.026032f, 0.045873f, 0.042934f, 0.013177f, 0.011695f, -0.009738f, -0.017996f, -0.004722f, -0.001529f, -0.015123f, -0.000003f, -0.017524f, -0.013239f, 0.021000f, 0.009257f, -0.005320f, -0.017897f, -0.006540f, -0.002071f, 0.000028f, -0.019918f, 0.020260f, 0.000348f, -0.016416f, 0.010121f, -0.009996f, -0.008561f, -0.002238f, 0.006355f, 0.027840f, 0.013587f, 0.033248f, 0.000269f, -0.006157f, 0.003893f, 0.012895f, 0.008516f, -0.003900f, 0.017519f, 0.001180f, -0.005456f, 0.002918f, 0.014538f, -0.006736f, -0.005914f, 0.005708f, -0.001049f, 0.005149f, -0.057249f, -0.005695f, 0.092648f, -0.006987f, 0.003573f, 0.022860f, -0.033524f, 0.018725f, - 0.065764f, 0.060296f, -0.060883f, -0.058766f, 0.000201f, -0.063731f, -0.023839f, -0.000289f, 0.007554f, 0.022987f, 0.035114f, 0.030602f, 0.054644f, 0.012673f, 0.021656f, 0.021506f, -0.008975f, -0.004054f, 0.006154f, 0.007017f, 0.016305f, -0.029350f, 0.065647f, 0.027912f, 0.030776f, -0.005843f, 0.066670f, 0.008100f, 0.040287f, 0.016461f, 0.012775f, -0.015774f, -0.009909f, 0.033751f, 0.013277f, 0.015631f, -0.035449f, -0.019208f, -0.029556f, -0.017511f, -0.021425f, -0.000202f, -0.042957f, -0.047039f, -0.002479f, -0.018170f, -0.088287f, -0.065997f, -0.059414f, 0.016949f, 0.064825f, 0.083527f, -0.045899f, 0.057573f, 0.089903f, 0.015240f, 0.007857f, -0.005753f, 0.061964f, 0.004670f, 0.056091f, 0.023971f, 0.026426f, -0.037210f, -0.122760f, -0.097475f, -0.021705f, -0.003325f, 0.002922f, 0.004326f, 0.045800f, 0.043000f, 0.037748f, -0.023311f, 0.003312f, -0.012165f, -0.063134f, 0.006421f, 0.005365f, 0.031909f, 0.005257f, 0.046925f, 0.042703f, 0.010519f, 0.037189f, -0.015590f, 0.025289f, -0.022136f, -0.024611f, -0.009182f, 0.010219f, 0.040790f, -0.008859f, -0.011466f, 0.006330f, -0.020157f, - -0.009560f, 0.020659f, -0.005549f, 0.014282f, -0.025376f, 0.035011f, 0.010914f, 0.000373f, -0.002097f, 0.026933f, -0.006306f, 0.001895f, 0.004708f, -0.000526f, 0.018608f, -0.013211f, -0.006443f, -0.000179f, 0.017898f, -0.026180f, 0.003808f, 0.009345f, -0.012469f, 0.001962f, 0.005082f, 0.003254f, -0.005916f, 0.044088f, -0.009059f, -0.081851f, -0.006308f, 0.128275f, 0.024421f, -0.024887f, 0.034107f, -0.011383f, 0.022489f, -0.011040f, -0.013169f, -0.043198f, -0.015163f, -0.005325f, -0.006291f, -0.021041f, 0.031340f, -0.028262f, -0.028806f, -0.002718f, 0.005553f, 0.026357f, 0.012975f, 0.006766f, 0.012354f, -0.011698f, 0.001061f, 0.039701f, -0.019796f, -0.048757f, -0.008808f, 0.003572f, -0.015421f, 0.032944f, -0.016738f, -0.011960f, 0.029130f, 0.007319f, 0.022200f, -0.050339f, -0.055152f, 0.017992f, -0.009975f, -0.019660f, -0.023146f, -0.030187f, -0.060812f, -0.000434f, -0.004574f, 0.019985f, -0.038636f, -0.082899f, 0.062490f, 0.016386f, 0.058790f, 0.005880f, -0.017863f, -0.018015f, 0.015925f, -0.031556f, 0.048892f, 0.009003f, 0.058516f, 0.039695f, 0.086476f, -0.009024f, -0.081406f, -0.064489f, - -0.035519f, 0.046763f, 0.048385f, -0.036705f, 0.038591f, 0.074335f, -0.043307f, -0.007366f, 0.081346f, 0.011958f, 0.062673f, -0.009754f, -0.030802f, -0.084347f, -0.031767f, 0.008874f, 0.054260f, 0.046039f, -0.026738f, 0.022829f, 0.022807f, 0.043625f, 0.016040f, -0.044688f, -0.051377f, -0.021180f, 0.036830f, 0.075941f, -0.001162f, -0.007549f, 0.040608f, 0.020347f, 0.004392f, -0.007281f, -0.016004f, -0.021389f, -0.015946f, 0.012365f, 0.008769f, 0.023550f, -0.009416f, -0.003540f, 0.003062f, 0.013940f, 0.019662f, -0.024998f, 0.001173f, 0.026687f, -0.002373f, -0.008765f, -0.029705f, 0.021327f, 0.000684f, -0.013879f, -0.008621f, 0.029816f, -0.000722f, -0.020453f, -0.009800f, 0.015763f, 0.001199f, -0.068055f, 0.070570f, 0.095722f, 0.016705f, 0.004356f, 0.021306f, -0.014591f, 0.041817f, 0.023392f, 0.043709f, -0.008810f, -0.046033f, 0.102470f, 0.000665f, -0.038446f, 0.004822f, 0.069323f, 0.031807f, 0.013655f, -0.043780f, 0.004840f, -0.023382f, -0.017067f, 0.006990f, -0.032548f, 0.002890f, 0.008891f, 0.039509f, -0.055785f, -0.009366f, -0.006580f, 0.033408f, -0.012516f, -0.020484f, -0.019516f, - -0.000090f, 0.021343f, -0.043289f, 0.003323f, 0.011644f, -0.088773f, 0.012457f, -0.023938f, -0.062479f, 0.041386f, -0.046117f, -0.081083f, 0.107521f, -0.000657f, 0.006440f, -0.008283f, -0.029611f, 0.064937f, -0.045567f, -0.004116f, 0.009889f, -0.029367f, -0.002166f, 0.082028f, 0.042570f, -0.071980f, -0.077839f, 0.077248f, -0.036499f, 0.045098f, 0.074237f, -0.066163f, -0.113956f, -0.078871f, 0.132190f, -0.007617f, -0.103135f, 0.094777f, -0.068663f, -0.130968f, -0.001779f, 0.113346f, -0.004597f, -0.135917f, -0.001650f, -0.045603f, 0.001548f, 0.168078f, -0.025309f, -0.123364f, 0.018251f, 0.066001f, 0.001720f, 0.077150f, 0.004809f, 0.001756f, -0.024000f, 0.003365f, 0.017945f, 0.062338f, -0.012627f, -0.016513f, 0.061847f, -0.007977f, 0.015039f, 0.043317f, -0.006992f, -0.062455f, 0.041317f, 0.029922f, 0.048335f, -0.014609f, -0.000703f, 0.017308f, -0.013375f, -0.045889f, -0.019905f, 0.019320f, 0.001895f, -0.008807f, 0.061290f, -0.001544f, -0.067194f, 0.016098f, 0.055792f, 0.032357f, -0.023041f, 0.003336f, -0.026465f, -0.014739f, 0.067611f, 0.056571f, -0.014104f, -0.064177f, -0.020099f, 0.026792f, - 0.022162f, 0.017890f, -0.011564f, -0.043026f, -0.001613f, -0.046326f, 0.070578f, -0.014615f, 0.021646f, 0.044321f, 0.032448f, 0.033462f, 0.082978f, 0.035225f, -0.019954f, 0.012537f, 0.020697f, 0.026445f, -0.029611f, 0.078967f, 0.075437f, 0.009929f, 0.026333f, -0.018892f, 0.000281f, -0.081662f, 0.037627f, -0.043355f, 0.029252f, -0.003809f, -0.029481f, 0.043489f, -0.017152f, -0.033310f, 0.017972f, -0.046833f, 0.031141f, 0.000849f, -0.008440f, 0.012347f, 0.019608f, 0.028330f, 0.029861f, 0.027602f, 0.084550f, -0.008697f, 0.009574f, 0.026181f, 0.057109f, -0.005985f, 0.015491f, -0.000186f, 0.044771f, 0.052244f, -0.016719f, 0.012296f, -0.001899f, -0.008944f, -0.095710f, 0.007359f, 0.041454f, -0.023321f, -0.023060f, 0.020990f, -0.039589f, -0.059926f, 0.005807f, 0.033545f, 0.071541f, -0.091542f, 0.035438f, -0.004939f, -0.002039f, 0.000156f, 0.036218f, 0.076256f, 0.001897f, -0.056055f, 0.019062f, 0.061853f, -0.033075f, -0.049325f, 0.005318f, 0.027024f, -0.025748f, 0.048959f, -0.008981f, 0.037592f, 0.003885f, -0.037871f, 0.046958f, 0.037090f, 0.006951f, 0.029229f, -0.015953f, 0.018196f, - -0.008381f, 0.009552f, 0.015808f, 0.044637f, -0.008857f, -0.054443f, -0.006333f, 0.062766f, 0.005538f, -0.008132f, 0.056588f, 0.011550f, 0.000434f, 0.013332f, 0.039499f, 0.057568f, -0.036306f, 0.014116f, 0.008630f, -0.002848f, 0.029084f, -0.008341f, -0.041241f, 0.013722f, 0.040833f, -0.017219f, 0.011252f, 0.013564f, -0.012203f, 0.015527f, -0.025895f, 0.018976f, 0.017949f, -0.023339f, -0.049456f, 0.021424f, 0.029481f, -0.013307f, -0.017469f, 0.026677f, -0.001138f, -0.016271f, -0.017941f, 0.018972f, 0.011083f, 0.043813f, -0.082728f, -0.064414f, -0.001194f, -0.099408f, -0.034189f, -0.036792f, 0.076497f, -0.002235f, -0.028407f, 0.035206f, -0.018150f, 0.019498f, 0.004904f, -0.037984f, 0.045214f, -0.102503f, -0.009849f, 0.006179f, -0.025756f, 0.018843f, 0.004429f, -0.020049f, -0.003803f, 0.002953f, 0.025651f, 0.001489f, -0.030216f, -0.099493f, -0.072693f, -0.055315f, -0.027664f, 0.061556f, -0.012687f, 0.002240f, -0.099767f, 0.007377f, -0.007153f, -0.013572f, 0.002915f, -0.096349f, 0.051314f, -0.046826f, 0.023476f, -0.019226f, 0.065304f, -0.035894f, -0.063744f, -0.030642f, -0.000813f, 0.047437f, - 0.086413f, 0.090956f, -0.112668f, -0.083291f, -0.057667f, 0.038621f, 0.092045f, 0.111620f, -0.019790f, -0.028193f, -0.098682f, -0.036629f, 0.087256f, 0.053362f, -0.001376f, -0.000125f, -0.002418f, -0.083275f, 0.055277f, -0.016854f, 0.053334f, 0.129804f, -0.145552f, 0.175820f, 0.049368f, -0.095498f, 0.026308f, -0.191295f, -0.187127f, 0.137675f, 0.058450f, 0.013412f, 0.040743f, -0.070921f, -0.034358f, 0.128278f, -0.005277f, 0.086203f, -0.008872f, -0.069661f, -0.023060f, 0.076117f, -0.025796f, -0.001890f, 0.024363f, -0.006346f, -0.044906f, 0.024571f, -0.036543f, 0.016484f, 0.048240f, -0.050832f, 0.047501f, 0.015869f, -0.006863f, 0.017915f, -0.003378f, -0.011619f, 0.007527f, -0.017794f, 0.008571f, -0.036181f, 0.031427f, 0.033017f, 0.006320f, 0.000884f, -0.011543f, 0.016810f, 0.005751f, 0.006577f, 0.015998f, 0.031729f, -0.040152f, -0.013654f, -0.037317f, -0.028348f, 0.002387f, 0.001177f, 0.031087f, -0.041323f, -0.032006f, -0.039836f, -0.025564f, -0.010887f, 0.058285f, -0.083345f, 0.068961f, -0.041497f, 0.042449f, 0.022039f, 0.026832f, 0.015375f, -0.052960f, 0.057757f, -0.008517f, -0.021003f, - -0.018940f, -0.023269f, 0.017876f, -0.012354f, 0.025386f, 0.014766f, -0.003229f, -0.006354f, -0.044337f, 0.025531f, 0.010598f, -0.011690f, 0.009963f, 0.023148f, -0.006610f, 0.013015f, -0.022511f, 0.026383f, -0.009880f, 0.003142f, 0.010892f, 0.011060f, -0.011826f, 0.040824f, -0.001563f, -0.038905f, -0.002529f, 0.017547f, 0.008821f, -0.029826f, 0.014394f, 0.034139f, -0.006448f, -0.016988f, -0.016304f, -0.002534f, 0.009491f, -0.004444f, 0.040430f, -0.027461f, -0.010397f, -0.009932f, -0.020295f, -0.001996f, -0.006187f, 0.014540f, 0.010727f, -0.016983f, -0.002509f, 0.015264f, -0.016329f, -0.008678f, -0.004869f, 0.024716f, -0.015443f, 0.010444f, 0.016804f, -0.039002f, -0.015587f, 0.012133f, -0.040380f, 0.061001f, 0.016402f, 0.019228f, 0.028295f, -0.018202f, -0.000450f, -0.005574f, -0.027801f, 0.005321f, 0.009219f, 0.022104f, -0.004402f, -0.009681f, 0.013678f, -0.014408f, -0.005778f, 0.013149f, 0.000189f, -0.003562f, 0.011375f, 0.003196f, -0.007203f, -0.000591f, -0.007958f, 0.017621f, -0.016880f, 0.026876f, 0.001247f, 0.005718f, -0.011278f, -0.001272f, -0.004079f, -0.008739f, -0.004425f, 0.006208f, - 0.003309f, 0.007566f, -0.000121f, -0.006634f, -0.004249f, -0.021253f, 0.021265f, -0.017108f, 0.009651f, -0.004234f, 0.012431f, -0.007158f, -0.019580f, 0.001097f, 0.010216f, -0.016287f, 0.024173f, -0.019365f, 0.010594f, -0.007505f, 0.095805f, 0.012624f, -0.032639f, -0.025132f, -0.019055f, -0.001725f, -0.003221f, 0.002205f, -0.002750f, -0.003613f, -0.054388f, 0.001272f, -0.010943f, -0.012440f, 0.006743f, -0.021220f, -0.009811f, 0.009958f, -0.014999f, 0.004304f, 0.016688f, -0.022686f, 0.014196f, -0.008354f, -0.012227f, -0.001862f, -0.012230f, 0.005713f, -0.011363f, -0.005913f, -0.013363f, -0.002517f, -0.000347f, -0.000248f, -0.008087f, -0.008187f, 0.002348f, 0.004383f, -0.009641f, 0.012897f, -0.015963f, -0.001349f, -0.006459f, -0.001963f, -0.003120f, -0.012499f, 0.017051f, 0.010603f, -0.017403f, 0.021040f, -0.002282f, 0.004526f, -0.009631f, 0.020188f, -0.020275f, 0.001560f, 0.001583f, 0.005370f, -0.003472f, -0.005167f, 0.014886f, -0.009926f, 0.002091f, 0.000843f, -0.003204f, 0.004852f, -0.006685f, -0.000864f, 0.008252f, -0.004178f, -0.003978f, 0.009557f, -0.003850f, -0.004111f, -0.008979f, 0.004636f, - 0.004185f, -0.019548f, 0.023310f, -0.013199f, 0.005162f, 0.001652f, 0.000177f, -0.007554f, 0.003097f, 0.009682f, -0.007303f, -0.003596f, 0.005021f, -0.007181f, -0.000611f, 0.005938f, -0.002585f, 0.002381f, 0.001135f, -0.005320f, 0.000776f, 0.000715f, 0.004647f, -0.008659f, 0.000554f, -0.000960f, -0.003586f, 0.003645f, -0.004437f, 0.002104f, -0.002937f, -0.007582f, 0.004079f, -0.006573f, -0.003964f, 0.002451f, -0.004304f, 0.001532f, 0.003642f, 0.000428f, -0.005933f, 0.006105f, -0.001362f, -0.003760f, 0.004870f, -0.047147f, -0.076011f, 0.084914f, 0.286737f, 0.028891f, 0.066069f, -0.156113f, -0.238060f, -0.060151f, -0.124212f, 0.096743f, 0.199990f, 0.104986f, 0.066857f, -0.015186f, -0.077182f, -0.076446f, -0.057029f, -0.053474f, 0.019314f, 0.033810f, 0.020001f, 0.036411f, 0.005160f, 0.002676f, 0.014786f, 0.003898f, 0.016745f, 0.012845f, -0.009463f, -0.036745f, -0.026682f, -0.032416f, -0.043113f, -0.023189f, 0.024791f, 0.031343f, 0.058982f, 0.082618f, 0.030347f, 0.011744f, -0.027215f, -0.065940f, -0.063259f, -0.044644f, -0.030499f, 0.006069f, 0.024789f, 0.034923f, 0.037837f, 0.031386f, - 0.021652f, 0.002237f, -0.002177f, -0.021121f, -0.014108f, -0.009457f, -0.010126f, -0.004313f, -0.011486f, -0.003639f, -0.013679f, -0.013914f, 0.005380f, -0.001341f, 0.018465f, 0.029588f, 0.018046f, 0.044125f, 0.039839f, -0.019251f, -0.038645f, -0.039277f, -0.057797f, -0.016601f, -0.013667f, -0.003365f, 0.036091f, 0.031653f, -0.005305f, 0.027495f, 0.034912f, 0.011500f, 0.024491f, -0.002405f, -0.027587f, -0.020465f, -0.047590f, -0.030404f, -0.011040f, -0.003210f, -0.003229f, 0.008418f, 0.022935f, 0.035633f, 0.045557f, 0.038057f, 0.013092f, -0.021116f, -0.033908f, -0.032971f, -0.036219f, -0.016615f, -0.008984f, -0.003996f, 0.008382f, 0.017804f, 0.014612f, 0.024993f, 0.014070f, 0.016347f, 0.015344f, -0.000076f, -0.012169f, -0.016487f, -0.020092f, -0.020242f, -0.017560f, -0.009675f, -0.009554f, 0.005505f, 0.010571f, 0.020517f, 0.030340f, 0.028813f, 0.011324f, 0.001850f, -0.016265f, -0.020307f, -0.023425f, -0.023958f, -0.006693f, -0.001244f, -0.004308f, 0.005504f, 0.018727f, 0.023897f, 0.012157f, 0.002491f, -0.001047f, 0.000198f, -0.004610f, -0.005597f, -0.008860f, -0.005740f, -0.006686f, -0.005027f, - -0.002780f, 0.000013f, 0.000281f, 0.005304f, 0.010694f, 0.011007f, 0.005746f, 0.002558f, -0.002790f, -0.004407f, -0.006357f, -0.004823f, -0.005369f, -0.002674f, -0.002496f, -0.000097f, 0.001249f, 0.004418f, 0.004036f, 0.004827f, 0.001628f, 0.001135f, -0.000734f, -0.001048f, -0.002345f, -0.000833f, -0.001100f, 0.000174f, -0.001000f, -0.001305f, -0.003491f, -0.000175f, 0.000405f, 0.002046f, 0.001578f, 0.003362f, 0.001025f, 0.000779f, -0.002077f, -0.000796f, 0.000527f, 0.001880f, -0.000772f, -0.001726f, -0.003613f, -0.001266f, -0.000088f, 0.002059f, 0.000622f, 0.000854f, -0.000660f, 0.000815f, 0.000337f, 0.001797f, 0.000669f, 0.001133f, -0.000859f, -0.000057f, -0.001768f, -0.001111f, -0.002019f, -0.000387f, -0.000814f, 0.000893f, 0.000319f, 0.002219f, 0.001477f, 0.001766f, -0.000262f, 0.000235f, -0.001289f, -0.000238f, -0.001543f, -0.000783f, -0.001354f, 0.000496f, -0.000208f, 0.001086f, 0.000085f, 0.000911f, -0.000398f, 0.000836f, -0.000217f, 0.000787f, -0.000559f, 0.000261f, -0.000936f, 0.000254f, -0.000687f, 0.000531f, -0.000512f, 0.000561f, -0.000546f}, - {0.007432f, 0.012090f, 0.003178f, 0.010675f, 0.000187f, -0.011011f, -0.007590f, -0.008020f, -0.001245f, -0.005507f, 0.012914f, -0.009655f, -0.002451f, -0.004384f, -0.001541f, -0.007744f, 0.007449f, -0.004566f, -0.003573f, 0.006264f, 0.010390f, 0.011754f, 0.001814f, -0.000841f, 0.002449f, 0.000625f, 0.001663f, -0.005317f, -0.005721f, 0.002802f, -0.005187f, -0.005197f, -0.006962f, -0.007323f, 0.002239f, -0.004849f, 0.006487f, -0.008083f, -0.001095f, 0.003571f, 0.003399f, 0.002995f, -0.012535f, -0.002248f, -0.006950f, -0.001206f, -0.002913f, -0.007645f, -0.000150f, 0.009136f, 0.002787f, 0.004441f, 0.004208f, 0.004942f, 0.000638f, 0.006199f, 0.003905f, 0.006919f, -0.003902f, 0.004621f, -0.002260f, 0.003195f, 0.000377f, -0.006372f, 0.007473f, 0.008447f, -0.004511f, -0.005655f, 0.002503f, 0.007764f, 0.001863f, 0.002081f, -0.002584f, -0.000500f, 0.004219f, 0.002638f, 0.000691f, -0.001526f, 0.000527f, 0.003561f, 0.004336f, -0.000514f, -0.006734f, -0.004119f, -0.002262f, -0.002863f, 0.001577f, -0.000635f, -0.000604f, 0.003215f, -0.002353f, -0.000782f, -0.000004f, 0.000574f, -0.001592f, -0.000450f, - 0.000248f, -0.002548f, -0.000285f, 0.003150f, -0.000457f, 0.001670f, -0.002266f, 0.001322f, 0.000676f, -0.000147f, -0.001487f, -0.018928f, -0.004928f, -0.008558f, 0.006287f, -0.017748f, 0.003915f, -0.007845f, -0.004091f, 0.002472f, 0.000382f, 0.001939f, 0.002678f, 0.001955f, 0.007714f, -0.003460f, 0.000832f, -0.000820f, -0.009324f, 0.006849f, 0.011543f, -0.009417f, -0.008773f, 0.006641f, 0.001745f, 0.008208f, 0.002641f, 0.011042f, -0.001515f, 0.003689f, -0.005847f, -0.001836f, 0.011330f, 0.000855f, -0.007352f, -0.009148f, -0.009806f, 0.000366f, 0.008163f, 0.004082f, -0.000031f, 0.009213f, 0.007406f, 0.000239f, -0.007552f, 0.011795f, 0.003047f, 0.009084f, 0.009310f, -0.001678f, 0.005940f, 0.006940f, -0.000826f, 0.004079f, 0.004814f, -0.004662f, 0.000973f, -0.001483f, 0.004576f, -0.010464f, -0.006643f, 0.003305f, -0.006423f, -0.002540f, 0.008947f, -0.003669f, 0.004925f, -0.002149f, -0.013989f, 0.002307f, -0.000047f, 0.007306f, -0.011518f, -0.006263f, 0.005237f, 0.001262f, -0.001088f, 0.002919f, -0.005418f, 0.001523f, 0.001408f, -0.001724f, -0.003408f, 0.004660f, 0.004311f, 0.002909f, - 0.000559f, -0.001836f, 0.001161f, -0.001376f, -0.002057f, 0.001493f, 0.001356f, -0.002876f, 0.002051f, -0.001636f, -0.001175f, 0.002470f, -0.001801f, -0.003810f, -0.000036f, -0.001462f, -0.000438f, -0.001840f, -0.001930f, 0.000718f, -0.000126f, 0.001073f, 0.000010f, 0.001052f, -0.002741f, 0.000733f, -0.000785f, 0.011838f, 0.012589f, 0.005475f, 0.009323f, 0.007204f, 0.012609f, 0.014277f, -0.005282f, -0.001580f, 0.004865f, -0.014349f, -0.000434f, -0.004758f, -0.002684f, 0.006509f, -0.008283f, -0.001015f, 0.010632f, 0.001916f, 0.006832f, -0.003397f, -0.002406f, -0.003605f, -0.013406f, -0.002244f, 0.000963f, 0.007076f, -0.002115f, 0.012207f, 0.004874f, -0.002153f, 0.004945f, 0.002501f, 0.006343f, -0.004587f, -0.000899f, 0.014261f, -0.001862f, 0.013472f, 0.006391f, -0.005964f, 0.001470f, 0.011860f, 0.006246f, -0.007882f, 0.010897f, -0.003011f, 0.000786f, 0.000528f, -0.002136f, 0.002046f, 0.001258f, -0.009841f, 0.006309f, 0.004538f, -0.000793f, 0.000321f, -0.002135f, -0.008892f, 0.000063f, 0.004946f, -0.000961f, -0.001078f, -0.005912f, -0.013059f, -0.004424f, 0.004816f, 0.010987f, -0.016641f, - -0.008804f, 0.003075f, -0.007197f, 0.004225f, -0.000284f, -0.000107f, -0.009944f, -0.007615f, -0.004390f, -0.006520f, -0.003153f, 0.000340f, 0.001175f, -0.002355f, 0.003818f, 0.002971f, 0.000666f, 0.002737f, -0.002987f, -0.001150f, 0.000127f, -0.004500f, -0.000929f, 0.000420f, -0.005629f, 0.002361f, 0.001422f, -0.001111f, 0.000216f, 0.001164f, 0.002779f, 0.000286f, 0.000434f, 0.000027f, -0.002716f, -0.000370f, -0.000789f, 0.002008f, 0.001452f, 0.002755f, -0.001919f, -0.000451f, 0.017550f, 0.018660f, -0.003731f, -0.007814f, -0.008544f, 0.017892f, -0.015523f, 0.000429f, -0.002535f, -0.007232f, -0.009829f, 0.003499f, -0.002703f, -0.013381f, -0.016289f, 0.000623f, -0.001227f, -0.008505f, 0.003079f, 0.004519f, -0.005990f, -0.009019f, -0.008420f, 0.011899f, -0.012842f, -0.001549f, -0.015007f, 0.000178f, 0.008354f, 0.002850f, 0.001430f, -0.008414f, -0.008095f, 0.007367f, -0.005686f, -0.008600f, 0.001069f, -0.003129f, 0.005266f, 0.000107f, 0.002129f, -0.008577f, -0.003169f, -0.002419f, 0.008238f, 0.005646f, 0.005730f, -0.016984f, 0.002690f, 0.004733f, 0.003883f, 0.004786f, -0.004839f, -0.003095f, - 0.000614f, 0.003440f, 0.006724f, -0.001167f, 0.004445f, -0.004918f, 0.013120f, -0.023793f, 0.008365f, 0.000674f, -0.012651f, -0.000548f, 0.014000f, -0.004239f, -0.006554f, -0.012761f, -0.004296f, 0.000987f, -0.003535f, -0.000021f, 0.005747f, 0.007296f, 0.006110f, -0.001816f, -0.000999f, -0.007513f, -0.001521f, -0.001933f, -0.003768f, 0.001027f, -0.001524f, -0.001500f, 0.003061f, -0.003809f, -0.001744f, 0.003647f, -0.001816f, 0.002349f, -0.000547f, -0.001530f, -0.001306f, -0.001030f, -0.005480f, -0.003454f, 0.002405f, 0.002673f, -0.002594f, -0.002131f, -0.001761f, 0.001999f, -0.001283f, -0.000813f, -0.002143f, 0.001383f, 0.001514f, -0.002599f, 0.001043f, -0.000396f, -0.002326f, -0.000590f, -0.001311f, 0.001473f, -0.000764f, 0.002209f, 0.003191f, -0.001504f, -0.008330f, -0.026326f, 0.004799f, -0.012000f, 0.002628f, 0.002208f, -0.001526f, 0.018693f, 0.001033f, -0.011946f, 0.015963f, 0.007702f, 0.005483f, -0.002390f, 0.003311f, -0.004851f, 0.012519f, -0.002067f, 0.001430f, 0.018863f, 0.018407f, 0.007887f, 0.008434f, 0.008119f, 0.009168f, 0.006130f, -0.018177f, -0.005666f, -0.000245f, -0.004767f, - -0.015469f, -0.001691f, -0.003661f, -0.004074f, -0.008305f, -0.000145f, -0.002431f, 0.013332f, -0.004263f, 0.023364f, -0.000130f, 0.001986f, -0.004316f, -0.003363f, 0.000189f, -0.000654f, -0.001858f, -0.004064f, -0.002725f, -0.011422f, 0.002798f, 0.001894f, -0.001353f, -0.005895f, 0.008004f, 0.005939f, 0.006940f, -0.002408f, -0.004997f, 0.000160f, 0.006051f, 0.006561f, -0.005244f, -0.014919f, -0.007617f, 0.001642f, 0.012478f, -0.001693f, 0.010205f, -0.008062f, -0.011733f, 0.008808f, -0.004091f, -0.009620f, 0.005629f, 0.005885f, -0.010799f, -0.008524f, -0.011884f, -0.003924f, -0.004079f, 0.006872f, -0.003701f, 0.002117f, -0.000741f, 0.004595f, 0.002846f, 0.002562f, -0.002223f, -0.001235f, -0.006171f, -0.003076f, -0.001628f, -0.000036f, 0.002777f, -0.000490f, 0.000217f, 0.005191f, 0.002041f, -0.000211f, 0.000082f, 0.003352f, -0.002147f, 0.000938f, 0.000985f, -0.001704f, 0.002028f, -0.001505f, 0.001347f, 0.001073f, 0.001503f, -0.000891f, -0.003818f, 0.003790f, 0.000518f, -0.006386f, 0.009486f, -0.011268f, -0.012726f, 0.006230f, -0.003780f, -0.000851f, -0.006769f, -0.003562f, 0.006240f, 0.009336f, - 0.004576f, -0.001851f, 0.001214f, -0.000825f, -0.002266f, -0.008402f, 0.002755f, -0.023090f, -0.006940f, -0.007166f, 0.006295f, 0.008296f, 0.000520f, 0.004264f, -0.014696f, 0.004261f, 0.002098f, 0.004246f, -0.013261f, 0.025070f, -0.001257f, 0.004902f, 0.003114f, -0.011411f, 0.001713f, -0.016490f, 0.010653f, -0.003275f, -0.014187f, 0.003142f, 0.000947f, -0.006742f, 0.000639f, 0.001849f, 0.010978f, 0.020296f, 0.008528f, -0.003731f, 0.006350f, 0.008524f, -0.018719f, -0.006519f, -0.008641f, 0.005494f, 0.004137f, -0.002772f, 0.002828f, 0.006797f, 0.004008f, 0.008665f, 0.015472f, 0.000687f, -0.005919f, -0.001275f, -0.000782f, 0.012571f, -0.008923f, 0.000375f, 0.005533f, 0.016842f, -0.000056f, -0.010655f, -0.010838f, -0.000619f, -0.013285f, -0.001456f, 0.004869f, 0.020560f, 0.017296f, -0.001695f, -0.009370f, 0.007789f, 0.000430f, 0.002511f, 0.001760f, -0.000364f, 0.002427f, -0.000373f, -0.002684f, 0.002541f, 0.002776f, -0.002524f, 0.003940f, 0.004106f, 0.003543f, -0.000729f, -0.003120f, 0.002685f, 0.003138f, -0.000204f, 0.000834f, -0.002200f, 0.000260f, -0.000224f, 0.004614f, 0.002056f, - 0.002826f, 0.002611f, 0.000597f, 0.001856f, -0.000167f, 0.002183f, 0.004109f, 0.001211f, 0.001601f, 0.003359f, 0.003992f, -0.001661f, -0.001188f, 0.001316f, 0.001082f, 0.003449f, 0.004712f, -0.002115f, -0.024209f, -0.006664f, -0.008963f, 0.010318f, 0.000353f, -0.005046f, -0.031130f, -0.004168f, -0.004184f, 0.012836f, 0.030796f, -0.008939f, 0.020678f, 0.003494f, -0.018251f, -0.018685f, 0.003206f, 0.004661f, -0.010625f, 0.011598f, -0.008408f, 0.009330f, -0.011631f, 0.005534f, 0.003961f, -0.011100f, -0.009315f, -0.007159f, 0.003622f, 0.011974f, -0.015763f, 0.000500f, -0.016574f, -0.001011f, -0.006333f, 0.003940f, 0.012019f, 0.001177f, -0.005272f, -0.004714f, 0.013009f, -0.000136f, 0.019856f, 0.006017f, -0.007562f, -0.007324f, -0.005823f, 0.002748f, 0.012434f, -0.000363f, 0.020647f, -0.036981f, -0.027258f, -0.022114f, -0.005158f, -0.018880f, 0.001150f, -0.007177f, 0.006606f, 0.016634f, 0.002934f, 0.006816f, 0.010665f, 0.017611f, 0.009037f, 0.002593f, -0.012309f, -0.030645f, -0.032251f, 0.017140f, 0.001081f, 0.021790f, -0.015700f, -0.011363f, 0.009511f, -0.022722f, 0.000354f, -0.008200f, - -0.000949f, -0.014703f, 0.000475f, 0.004728f, 0.013063f, 0.002244f, 0.002026f, -0.004338f, 0.004639f, -0.001101f, 0.001460f, 0.003537f, 0.005849f, 0.007533f, -0.002197f, -0.003367f, 0.005471f, 0.002685f, -0.002248f, -0.004194f, 0.000728f, -0.000824f, -0.000615f, -0.001865f, 0.000737f, -0.000093f, -0.002327f, -0.000901f, 0.002162f, 0.003995f, 0.003195f, 0.002694f, 0.001351f, -0.009518f, -0.005291f, -0.003740f, -0.003471f, 0.004865f, -0.000926f, -0.001715f, -0.000107f, 0.001267f, 0.000218f, -0.000331f, 0.014418f, 0.006586f, -0.011848f, -0.000121f, 0.027632f, 0.023795f, -0.002388f, -0.020205f, -0.034627f, -0.003735f, -0.012294f, 0.012501f, -0.010527f, -0.009966f, -0.039191f, -0.016538f, -0.035127f, 0.013069f, -0.001360f, -0.008326f, 0.009083f, -0.001043f, -0.000009f, 0.002707f, -0.011429f, 0.001167f, -0.013097f, -0.002111f, 0.007596f, 0.005994f, -0.013358f, 0.004903f, 0.013177f, 0.021989f, -0.003530f, -0.002883f, -0.007488f, 0.001409f, 0.011097f, 0.016250f, -0.002541f, 0.002543f, -0.003701f, -0.002623f, 0.018927f, 0.014107f, 0.000326f, 0.014545f, 0.003929f, -0.017467f, 0.003090f, -0.001615f, - 0.022565f, 0.009072f, 0.002632f, 0.011163f, 0.014554f, 0.004230f, -0.013261f, -0.022139f, -0.005392f, 0.004804f, 0.011713f, 0.006261f, 0.000498f, 0.004821f, 0.017435f, 0.004046f, 0.005500f, 0.008294f, 0.004504f, -0.011221f, -0.013106f, -0.011021f, -0.012952f, -0.011478f, 0.019401f, 0.002910f, 0.014921f, -0.013211f, -0.012048f, -0.002130f, 0.012423f, -0.007810f, 0.006490f, 0.004016f, 0.001749f, -0.006618f, -0.004564f, -0.006107f, -0.004547f, -0.006981f, 0.002548f, 0.002415f, -0.002229f, 0.004788f, -0.003369f, 0.002316f, -0.001536f, 0.000626f, 0.001836f, -0.006178f, -0.004207f, -0.006202f, -0.004389f, -0.007582f, -0.002516f, -0.006272f, -0.003362f, -0.003595f, -0.005165f, -0.000221f, 0.005257f, 0.001914f, 0.002005f, -0.001907f, -0.000866f, -0.000610f, -0.001654f, 0.004428f, -0.002385f, -0.001094f, -0.001670f, 0.048651f, 0.010870f, -0.015223f, 0.008893f, -0.008933f, -0.028773f, -0.006020f, -0.028223f, -0.015717f, 0.014866f, 0.019437f, 0.007742f, 0.003901f, 0.001830f, 0.003503f, 0.018749f, -0.013297f, 0.026455f, -0.017087f, -0.017123f, 0.020899f, 0.009492f, -0.033920f, 0.014984f, 0.008594f, - 0.010910f, 0.022280f, 0.011182f, 0.016573f, -0.000955f, 0.008988f, -0.005131f, 0.014162f, 0.003892f, 0.003043f, 0.009626f, -0.019064f, -0.010144f, -0.005828f, 0.012397f, 0.005352f, 0.004556f, 0.009764f, 0.003001f, 0.003498f, -0.017078f, 0.000228f, 0.018839f, -0.003292f, 0.002476f, 0.002423f, 0.002585f, 0.022398f, 0.008783f, 0.030111f, 0.007116f, -0.004203f, 0.028740f, -0.024489f, -0.003008f, -0.003803f, -0.009617f, -0.002155f, 0.006175f, 0.028395f, 0.002910f, -0.005914f, -0.010805f, 0.005949f, -0.011372f, -0.004847f, -0.007250f, -0.015395f, -0.002293f, 0.004252f, 0.024408f, -0.001905f, -0.023198f, -0.006368f, -0.013850f, -0.006934f, 0.017101f, 0.013753f, 0.016030f, -0.012496f, 0.002806f, -0.013916f, -0.001930f, -0.004645f, -0.008268f, -0.004620f, -0.011409f, -0.006641f, -0.001987f, -0.004843f, -0.015036f, -0.005904f, -0.004181f, -0.002985f, -0.003259f, -0.005229f, 0.000862f, -0.002457f, -0.011796f, -0.000508f, -0.005582f, -0.003350f, -0.000818f, -0.000040f, 0.002305f, -0.000294f, 0.005569f, 0.005372f, 0.001103f, 0.001035f, -0.003659f, -0.003278f, -0.000714f, -0.003979f, 0.005689f, 0.003355f, - 0.005351f, 0.004971f, 0.002282f, 0.006932f, 0.004723f, 0.001792f, 0.003364f, -0.000872f, -0.002643f, 0.004917f, 0.007113f, -0.017574f, -0.027090f, -0.009782f, -0.026673f, 0.019154f, -0.022758f, -0.016750f, -0.013403f, 0.012107f, 0.030517f, -0.030965f, -0.010993f, -0.034898f, 0.009995f, 0.004870f, 0.003272f, -0.010026f, 0.002722f, 0.039288f, -0.020563f, -0.003452f, 0.014873f, 0.010161f, 0.007777f, 0.013820f, 0.009198f, -0.012926f, -0.021847f, -0.004082f, -0.012105f, -0.016485f, -0.020172f, 0.000321f, -0.004716f, 0.004963f, 0.025951f, 0.016437f, -0.014597f, -0.007881f, -0.001647f, -0.007535f, 0.006340f, 0.049375f, -0.016779f, 0.034442f, 0.010770f, 0.005787f, -0.002279f, -0.005586f, 0.005803f, -0.018916f, 0.009027f, 0.026807f, 0.001109f, 0.004280f, 0.021429f, 0.013922f, 0.008275f, -0.018095f, 0.015102f, -0.010792f, -0.016150f, -0.043613f, -0.013757f, 0.028330f, -0.016143f, 0.007341f, -0.030728f, 0.021962f, -0.011591f, -0.012098f, 0.019156f, -0.030605f, -0.022659f, 0.034666f, -0.024742f, -0.023271f, 0.013878f, -0.015965f, 0.003197f, 0.000053f, 0.009897f, -0.025103f, 0.007872f, 0.000656f, - 0.025011f, -0.018635f, 0.006196f, -0.002647f, -0.014181f, 0.018557f, 0.003744f, -0.015448f, -0.011216f, -0.010644f, 0.001621f, -0.000041f, -0.007789f, 0.000208f, 0.009674f, -0.000812f, 0.006854f, 0.007720f, 0.006119f, -0.013909f, 0.007725f, 0.007086f, 0.011161f, -0.000282f, 0.000820f, -0.010114f, -0.004044f, -0.004977f, -0.005248f, 0.002339f, -0.001170f, 0.006474f, -0.009203f, -0.005801f, 0.003467f, -0.008899f, -0.007508f, -0.009480f, 0.003260f, -0.019745f, -0.014656f, -0.002022f, 0.022463f, -0.010638f, 0.039454f, 0.036689f, 0.007252f, 0.011746f, -0.021274f, 0.002635f, -0.017216f, 0.027550f, -0.005474f, 0.008119f, -0.013116f, -0.008512f, 0.004736f, 0.003722f, -0.012587f, 0.021124f, -0.005921f, 0.004488f, 0.007933f, -0.013824f, 0.005295f, -0.017640f, 0.000138f, 0.010055f, 0.012094f, 0.000297f, 0.015971f, 0.020084f, -0.001431f, -0.037571f, -0.006252f, -0.011104f, 0.026988f, -0.022690f, -0.028133f, -0.020105f, -0.013383f, 0.003943f, -0.015896f, -0.012530f, -0.007949f, -0.002281f, 0.005057f, -0.055066f, 0.034904f, 0.027164f, 0.039783f, -0.012568f, 0.006490f, 0.026628f, -0.025285f, -0.023496f, - 0.004793f, 0.017421f, 0.011550f, -0.002934f, 0.005499f, -0.013861f, -0.016440f, -0.021114f, -0.006070f, 0.073357f, 0.006049f, -0.040546f, -0.007108f, -0.022178f, 0.014143f, 0.011037f, -0.025015f, 0.005483f, -0.007558f, 0.002172f, -0.012251f, 0.015776f, 0.016165f, -0.002281f, -0.007928f, -0.009510f, -0.031725f, 0.009731f, 0.005343f, -0.001168f, 0.013384f, -0.006246f, 0.002314f, 0.005246f, -0.014930f, 0.005937f, 0.009264f, 0.021054f, 0.011340f, 0.001452f, -0.017767f, 0.000283f, 0.016642f, 0.001120f, 0.000228f, 0.012445f, 0.000489f, 0.004365f, 0.012343f, 0.010434f, -0.001632f, 0.005797f, 0.010493f, 0.009655f, -0.004270f, 0.004336f, 0.012558f, 0.015283f, 0.011404f, -0.000133f, -0.007659f, -0.001604f, 0.000618f, 0.009656f, 0.000247f, -0.002498f, 0.000915f, 0.003683f, -0.005639f, 0.003708f, 0.006155f, -0.005543f, 0.004047f, -0.013837f, -0.001459f, -0.009883f, -0.021686f, -0.039775f, 0.002555f, -0.033114f, 0.015209f, 0.006154f, -0.027942f, 0.016051f, 0.016939f, 0.025320f, 0.006393f, 0.010424f, -0.028981f, 0.000113f, -0.006369f, 0.026987f, 0.011504f, 0.001833f, 0.023858f, 0.028081f, - -0.004047f, -0.012465f, 0.002383f, 0.034465f, -0.022765f, -0.016783f, 0.016662f, 0.010166f, -0.023152f, -0.004327f, -0.021484f, 0.039308f, -0.033771f, 0.009794f, 0.019790f, -0.011824f, 0.018122f, 0.007423f, -0.010217f, -0.009422f, -0.010942f, -0.015149f, 0.020848f, 0.029759f, 0.005018f, -0.021793f, 0.001512f, -0.024137f, -0.010235f, 0.016644f, -0.003882f, -0.011722f, -0.009848f, 0.004666f, -0.033709f, 0.001520f, -0.004293f, -0.018438f, 0.024819f, -0.024774f, -0.002564f, -0.005334f, -0.019568f, 0.020300f, -0.002439f, 0.011938f, -0.010388f, -0.001493f, -0.002005f, -0.011532f, 0.008340f, -0.010597f, -0.002941f, -0.010432f, 0.028789f, 0.013185f, -0.036158f, -0.007327f, -0.059001f, 0.033936f, -0.001009f, -0.025795f, 0.022561f, 0.002919f, 0.002556f, 0.008963f, -0.000510f, 0.013826f, 0.015521f, 0.004068f, -0.005206f, 0.009411f, 0.016749f, -0.009773f, -0.007184f, 0.007511f, 0.001607f, 0.004682f, 0.004252f, 0.009291f, 0.011090f, -0.007560f, 0.005324f, 0.004117f, -0.010501f, -0.008418f, 0.006674f, 0.001891f, -0.001971f, -0.006081f, -0.006776f, -0.010117f, 0.009307f, 0.010919f, 0.000788f, -0.006670f, - -0.022929f, 0.000751f, 0.000956f, 0.007416f, -0.015109f, 0.001827f, 0.010092f, -0.005824f, 0.011829f, 0.006097f, -0.001913f, 0.003852f, 0.005930f, 0.000891f, 0.001459f, 0.004163f, 0.007508f, -0.007294f, -0.001564f, -0.004139f, 0.002026f, 0.035062f, 0.001702f, -0.027346f, -0.011232f, 0.015561f, 0.026170f, 0.027285f, 0.001356f, -0.006884f, 0.039247f, 0.016538f, 0.043580f, 0.004870f, 0.004021f, -0.021223f, -0.008218f, -0.012753f, 0.011883f, 0.005843f, 0.023727f, -0.027209f, 0.002160f, -0.016369f, 0.014686f, -0.023649f, 0.009167f, 0.025287f, -0.003531f, -0.001217f, -0.013102f, 0.003200f, -0.013191f, -0.046633f, 0.006675f, -0.007555f, 0.003541f, -0.021090f, -0.004208f, 0.017569f, 0.035195f, -0.004086f, -0.012343f, 0.019826f, 0.009861f, 0.004477f, 0.024323f, 0.007887f, -0.012503f, -0.006603f, 0.015812f, -0.002608f, 0.014458f, -0.017359f, -0.014740f, 0.004748f, -0.013834f, -0.027563f, -0.012214f, -0.031328f, -0.006583f, 0.009929f, -0.023937f, -0.003949f, -0.027540f, -0.012646f, 0.000104f, 0.010487f, -0.032881f, 0.014051f, 0.002766f, -0.020210f, 0.025030f, -0.009283f, 0.006851f, 0.043360f, - 0.049926f, 0.002719f, 0.017751f, 0.035818f, 0.043701f, 0.042600f, -0.003948f, -0.029198f, -0.043727f, -0.016485f, -0.028891f, 0.027079f, -0.005641f, -0.013490f, 0.007348f, -0.001203f, 0.003301f, -0.001016f, -0.012758f, 0.013505f, 0.004244f, 0.004750f, 0.001303f, 0.018427f, -0.010309f, -0.000708f, -0.005534f, 0.012624f, -0.011910f, -0.005701f, -0.001016f, 0.018177f, -0.004597f, 0.010774f, 0.015692f, -0.014670f, -0.002759f, -0.006500f, -0.015752f, -0.006999f, -0.003407f, 0.006391f, 0.000817f, 0.021355f, 0.006202f, 0.014278f, -0.001148f, -0.014633f, 0.004196f, 0.003381f, 0.000147f, 0.059584f, 0.068301f, 0.003588f, 0.021854f, 0.020951f, -0.002924f, -0.049166f, -0.001352f, -0.001984f, -0.018702f, 0.013850f, 0.012795f, -0.026779f, 0.014510f, 0.018711f, 0.003019f, -0.007151f, 0.010095f, -0.006864f, 0.034710f, -0.006009f, -0.016396f, 0.000188f, 0.007791f, -0.003319f, -0.002423f, -0.000669f, -0.055621f, 0.015973f, -0.001411f, -0.038377f, -0.016052f, 0.006581f, -0.003770f, -0.026173f, 0.008900f, -0.030882f, -0.002970f, 0.002975f, -0.049669f, -0.008909f, 0.021036f, -0.015941f, 0.002102f, 0.031151f, - 0.018918f, 0.023814f, 0.007215f, -0.013509f, -0.023335f, 0.023697f, -0.012498f, 0.013246f, -0.022196f, -0.011535f, 0.015525f, 0.026617f, 0.003661f, 0.031896f, -0.021684f, 0.027584f, -0.023666f, -0.028255f, -0.020401f, 0.027489f, 0.028575f, -0.026723f, 0.013516f, -0.073666f, -0.007009f, 0.021558f, 0.006551f, -0.011624f, -0.029628f, 0.013431f, -0.041759f, 0.006612f, -0.021684f, 0.019579f, -0.032332f, -0.020507f, 0.031783f, 0.000645f, 0.015812f, 0.003570f, 0.013735f, -0.007303f, 0.005475f, -0.003718f, -0.024336f, -0.004423f, -0.011539f, 0.007387f, -0.008091f, 0.004183f, 0.000597f, 0.003910f, 0.001563f, -0.005368f, -0.007665f, 0.000934f, -0.015569f, 0.005337f, 0.003928f, 0.008641f, -0.010126f, 0.008582f, 0.007661f, 0.005235f, 0.006525f, 0.005026f, -0.010873f, 0.001028f, 0.004650f, -0.007796f, 0.013528f, -0.001336f, -0.005863f, -0.008061f, -0.000535f, 0.001175f, 0.006175f, -0.005154f, 0.005820f, -0.004979f, 0.014189f, 0.006393f, -0.012896f, -0.003283f, -0.003610f, -0.005892f, -0.005762f, -0.012997f, -0.054303f, 0.004293f, 0.066522f, -0.044869f, -0.004548f, -0.003604f, 0.003251f, -0.017563f, - 0.008234f, -0.028191f, -0.029487f, -0.009318f, -0.008272f, 0.007368f, -0.007643f, 0.015517f, -0.022179f, 0.001033f, 0.042685f, -0.034921f, -0.031390f, -0.007233f, 0.037316f, 0.005561f, -0.047397f, 0.020355f, -0.017774f, -0.019845f, 0.004383f, 0.065039f, -0.036719f, -0.020008f, 0.045790f, 0.034431f, 0.002673f, -0.018768f, 0.000969f, -0.006798f, -0.014933f, 0.013477f, 0.011743f, -0.007561f, -0.037642f, 0.048129f, 0.022177f, 0.009337f, -0.051137f, -0.007504f, 0.015503f, 0.017871f, -0.006617f, 0.027013f, -0.004608f, 0.009368f, -0.011950f, -0.030352f, 0.019666f, -0.021581f, 0.012818f, 0.007069f, -0.027130f, 0.050960f, 0.007506f, 0.036773f, 0.036311f, 0.006797f, -0.055356f, -0.010298f, 0.000232f, -0.021603f, -0.011384f, 0.002351f, -0.002048f, 0.024185f, 0.044666f, -0.012725f, -0.004689f, -0.019573f, -0.009153f, 0.018945f, -0.012900f, 0.011119f, 0.033137f, -0.028964f, 0.032936f, -0.006268f, 0.009696f, -0.012377f, -0.007065f, -0.010353f, 0.001147f, 0.006456f, 0.007045f, -0.005312f, -0.000107f, 0.007827f, 0.004032f, 0.017804f, 0.007956f, -0.008633f, 0.000467f, 0.001829f, 0.015739f, -0.008659f, - 0.004379f, 0.007616f, 0.002217f, -0.000419f, 0.000284f, -0.020699f, 0.009990f, -0.007502f, 0.009777f, 0.013294f, 0.001485f, -0.001946f, 0.006395f, -0.000524f, 0.004833f, 0.001888f, -0.002447f, -0.007578f, -0.008119f, 0.015709f, 0.002400f, -0.003532f, 0.004112f, -0.009600f, -0.002084f, 0.015969f, 0.020920f, 0.002801f, -0.019111f, -0.096106f, 0.006381f, -0.025105f, 0.003383f, 0.048059f, 0.004665f, -0.009314f, 0.008832f, 0.001823f, -0.032558f, -0.035242f, -0.031654f, -0.030478f, 0.039686f, -0.007966f, 0.047354f, 0.004170f, -0.044618f, -0.001598f, 0.004987f, 0.038249f, 0.007595f, -0.006213f, -0.007553f, 0.010907f, -0.024005f, -0.009244f, 0.042385f, -0.008657f, -0.054924f, -0.042017f, 0.025143f, -0.005484f, -0.011379f, 0.012612f, -0.003898f, -0.028346f, 0.008584f, 0.016612f, 0.038160f, -0.007703f, -0.031601f, 0.000411f, -0.039869f, 0.015334f, 0.045217f, -0.007253f, -0.055414f, 0.017437f, -0.000601f, 0.003100f, 0.013399f, -0.017485f, 0.034157f, 0.002543f, -0.022994f, 0.017885f, -0.012438f, -0.007723f, 0.048789f, -0.024998f, -0.008364f, -0.008218f, 0.030746f, 0.012329f, -0.053919f, 0.027347f, - -0.043448f, -0.010391f, -0.023436f, 0.005586f, -0.014288f, -0.013201f, -0.004475f, 0.024752f, -0.008039f, -0.015287f, 0.029327f, -0.017115f, 0.030104f, -0.000180f, -0.015891f, -0.009590f, 0.007494f, 0.008263f, 0.005971f, -0.018110f, -0.005981f, 0.004426f, -0.001009f, -0.011854f, 0.000268f, 0.011145f, 0.017183f, 0.007141f, 0.008840f, 0.001385f, 0.016889f, -0.009579f, 0.005485f, 0.013339f, -0.005075f, 0.001660f, 0.005444f, -0.003355f, 0.002662f, 0.005275f, -0.016553f, 0.013965f, 0.005952f, -0.016664f, -0.013655f, 0.000954f, -0.019594f, 0.001693f, -0.014443f, 0.018680f, -0.033807f, -0.000084f, -0.007162f, 0.003550f, -0.008807f, 0.010540f, -0.005643f, 0.004907f, 0.003774f, -0.006969f, 0.001521f, -0.046782f, 0.009465f, 0.077578f, 0.050308f, 0.023197f, -0.038584f, 0.028911f, 0.036258f, 0.053986f, 0.025861f, 0.006469f, 0.001745f, 0.033851f, 0.058094f, -0.013059f, -0.007278f, 0.033083f, -0.065419f, 0.023821f, 0.058013f, -0.011993f, -0.020354f, 0.015179f, 0.044992f, 0.036463f, -0.024537f, -0.041627f, -0.002658f, 0.021028f, -0.007276f, 0.005105f, 0.000456f, 0.048943f, -0.028140f, 0.031368f, - 0.047077f, -0.018891f, -0.005947f, 0.033427f, -0.005235f, 0.117120f, -0.049336f, 0.021110f, 0.079906f, -0.046128f, 0.014885f, 0.005384f, -0.065219f, -0.002000f, 0.011884f, -0.028642f, 0.063305f, 0.004817f, -0.008981f, 0.004949f, -0.026690f, 0.087139f, 0.023777f, -0.069845f, 0.067134f, -0.028175f, 0.002239f, 0.020670f, 0.024767f, 0.044711f, 0.021541f, -0.012100f, -0.043930f, -0.058753f, -0.022323f, -0.023568f, -0.004314f, -0.018052f, 0.036643f, -0.022490f, -0.039221f, 0.004325f, 0.010463f, 0.007895f, 0.013881f, -0.022074f, -0.021783f, -0.013075f, -0.014518f, -0.046341f, -0.019886f, -0.015806f, -0.032308f, -0.015417f, 0.011115f, -0.013647f, -0.030331f, -0.001483f, 0.011311f, 0.020095f, -0.005102f, 0.009427f, 0.021572f, -0.001313f, -0.015268f, -0.000977f, -0.009417f, 0.012157f, 0.017104f, -0.024594f, 0.021186f, -0.012772f, -0.000141f, 0.003182f, -0.011808f, 0.022619f, 0.008325f, -0.031921f, 0.019175f, 0.002913f, -0.011770f, 0.023467f, -0.027234f, 0.010678f, -0.005480f, 0.011438f, -0.006867f, -0.007510f, 0.003977f, -0.004443f, -0.003219f, 0.008219f, -0.005357f, -0.018319f, 0.007950f, -0.001757f, - 0.005034f, -0.000857f, 0.014735f, -0.008417f, 0.018770f, -0.089720f, 0.052093f, 0.002762f, 0.031334f, 0.052668f, -0.086802f, 0.020129f, 0.044080f, 0.010447f, 0.032792f, -0.032907f, 0.036139f, 0.011023f, -0.034265f, 0.000870f, -0.021739f, -0.062908f, 0.034339f, 0.020076f, 0.057471f, -0.031646f, -0.042772f, -0.014461f, 0.013188f, -0.008458f, -0.072123f, -0.035056f, 0.021673f, -0.005009f, 0.010354f, -0.029941f, -0.009765f, 0.024205f, -0.020602f, -0.009765f, -0.031003f, -0.006843f, 0.010784f, -0.033611f, 0.003208f, -0.073798f, -0.061360f, 0.019169f, -0.063811f, 0.005835f, -0.066741f, -0.046224f, -0.032383f, 0.031530f, 0.061607f, 0.076580f, -0.018407f, 0.034192f, 0.041010f, 0.020311f, 0.017589f, -0.029324f, 0.084591f, 0.086858f, -0.059173f, 0.059284f, -0.046622f, 0.029963f, 0.060610f, 0.058142f, 0.070286f, 0.084470f, 0.059417f, -0.066753f, -0.047875f, -0.000240f, 0.001393f, 0.025599f, -0.016232f, -0.012625f, -0.040420f, -0.022001f, -0.059828f, 0.013344f, 0.049765f, -0.019948f, 0.012014f, 0.052471f, 0.024368f, -0.035509f, 0.039889f, -0.002218f, 0.013960f, -0.003673f, -0.007308f, 0.011834f, - -0.012838f, 0.018011f, 0.014790f, -0.013070f, -0.016315f, 0.015576f, -0.011178f, 0.000788f, 0.000293f, -0.001017f, 0.004196f, 0.001761f, -0.021647f, 0.020231f, -0.009284f, 0.009797f, 0.011319f, -0.007735f, 0.012208f, -0.015099f, -0.011399f, 0.010396f, -0.012458f, -0.015606f, -0.007148f, 0.006523f, -0.006351f, 0.004139f, -0.014465f, 0.000719f, 0.005134f, 0.013394f, 0.019625f, -0.004486f, 0.011003f, -0.012879f, -0.000115f, -0.002235f, 0.005867f, 0.004747f, -0.001298f, -0.009933f, -0.014258f, -0.003202f, 0.002949f, 0.111490f, -0.081596f, -0.041557f, 0.044010f, -0.026195f, 0.042048f, -0.032764f, -0.036484f, 0.012321f, -0.086280f, -0.003916f, 0.058095f, -0.014018f, 0.029888f, -0.049518f, -0.012112f, -0.019550f, 0.002031f, 0.061923f, 0.018793f, 0.013770f, -0.010978f, 0.034000f, 0.011012f, 0.084614f, 0.020893f, 0.049411f, 0.003603f, -0.038595f, -0.036431f, 0.049256f, -0.023843f, 0.022797f, -0.000377f, -0.063495f, 0.045910f, -0.056565f, 0.110040f, -0.081906f, 0.050138f, 0.044832f, -0.046933f, -0.039498f, -0.029090f, 0.040651f, -0.002975f, 0.042543f, -0.000405f, 0.005601f, -0.075036f, -0.040335f, - 0.017630f, -0.036885f, 0.012377f, -0.022465f, 0.022228f, 0.012610f, 0.057885f, -0.034237f, -0.011662f, -0.014557f, -0.028142f, 0.078355f, 0.014654f, 0.007451f, -0.072736f, -0.023529f, 0.039385f, 0.023233f, 0.025153f, 0.067895f, 0.043577f, 0.060053f, 0.069385f, -0.001920f, 0.030838f, -0.028678f, 0.092240f, 0.007034f, -0.014990f, 0.033651f, -0.007654f, 0.070748f, 0.001497f, -0.014106f, -0.014369f, 0.008584f, 0.049893f, -0.037547f, 0.025892f, -0.011862f, -0.003842f, 0.014871f, 0.010118f, 0.019470f, -0.011897f, 0.012727f, 0.023437f, -0.005946f, -0.008570f, 0.015848f, -0.002304f, -0.002312f, -0.001512f, 0.004374f, 0.002827f, 0.007712f, -0.016595f, 0.022253f, -0.012756f, -0.007051f, -0.003300f, 0.013674f, -0.018805f, 0.002093f, -0.013376f, 0.018642f, 0.033743f, -0.011029f, -0.008974f, -0.004277f, 0.023268f, 0.011477f, 0.024296f, -0.001751f, -0.013655f, 0.011161f, 0.011830f, -0.003249f, 0.011726f, 0.009112f, -0.032298f, 0.005258f, 0.037630f, -0.004786f, -0.017475f, -0.168673f, 0.117358f, -0.072873f, -0.050393f, 0.000942f, 0.024374f, 0.029908f, 0.005806f, -0.027250f, 0.091430f, 0.045894f, - 0.013079f, -0.045877f, 0.030231f, -0.001839f, 0.034317f, -0.043825f, -0.029734f, 0.023006f, 0.068435f, -0.078370f, 0.003543f, 0.025006f, 0.008647f, -0.019516f, -0.011203f, -0.010140f, 0.003478f, -0.004277f, 0.017971f, 0.085521f, 0.005870f, -0.039115f, 0.058064f, -0.013806f, -0.055471f, -0.072335f, 0.068901f, 0.022083f, -0.009198f, 0.025190f, 0.016177f, 0.056693f, -0.077104f, -0.008570f, -0.039061f, -0.011562f, 0.044573f, -0.033014f, 0.017558f, -0.038018f, 0.018466f, 0.117922f, 0.009255f, -0.068138f, -0.075726f, -0.005117f, 0.036497f, 0.035104f, -0.030193f, 0.006915f, 0.057857f, -0.024634f, -0.111212f, 0.063092f, -0.038180f, -0.063890f, 0.028085f, 0.105219f, -0.072802f, 0.052757f, 0.073947f, 0.024888f, -0.063614f, -0.053828f, -0.032592f, 0.026035f, 0.023271f, -0.022614f, 0.066375f, 0.031732f, -0.003940f, -0.002465f, 0.004183f, -0.055810f, -0.020890f, -0.039677f, 0.020328f, 0.017258f, 0.013334f, 0.017432f, 0.013743f, 0.040109f, -0.020176f, -0.010542f, 0.007979f, -0.000453f, -0.031267f, 0.026537f, -0.001037f, 0.016404f, -0.007708f, 0.012203f, -0.020096f, -0.006823f, -0.012070f, 0.018516f, - 0.003762f, 0.003316f, 0.000662f, 0.010897f, 0.029986f, -0.012443f, -0.056922f, 0.004049f, -0.028062f, -0.006132f, 0.017123f, -0.024768f, -0.015619f, 0.031762f, -0.030247f, -0.007396f, 0.000298f, 0.014903f, -0.032404f, 0.001652f, 0.096636f, 0.031811f, 0.006405f, -0.007079f, 0.015316f, 0.027199f, -0.008668f, 0.012693f, -0.014642f, -0.000130f, -0.011574f, 0.045396f, -0.050943f, -0.005713f, 0.030439f, -0.070737f, 0.022884f, -0.017254f, 0.005318f, -0.008271f, -0.019818f, 0.012661f, -0.005488f, -0.028799f, 0.077497f, -0.059145f, -0.016669f, 0.055055f, -0.035303f, -0.005377f, -0.011155f, 0.012132f, 0.054421f, 0.004262f, -0.053154f, 0.072841f, -0.039375f, 0.025975f, 0.045337f, 0.020248f, -0.016989f, 0.004054f, -0.040046f, 0.009814f, -0.024274f, -0.019017f, 0.097471f, -0.022623f, -0.038931f, 0.012746f, -0.018213f, 0.023202f, -0.015215f, 0.025473f, 0.062693f, -0.034464f, 0.020713f, 0.047983f, -0.056419f, 0.025863f, 0.030604f, 0.014075f, 0.038320f, -0.043705f, -0.011594f, 0.067090f, -0.046338f, -0.010156f, 0.019078f, -0.018720f, 0.063898f, -0.063503f, 0.010735f, 0.022947f, -0.029429f, 0.022321f, - 0.024381f, -0.060477f, 0.021473f, 0.051614f, -0.000627f, -0.015485f, -0.002504f, 0.033209f, -0.006926f, -0.056794f, 0.046124f, 0.021927f, -0.025035f, 0.009485f, -0.013827f, 0.020506f, -0.008061f, -0.025417f, 0.029873f, 0.001677f, -0.006581f, -0.022100f, 0.020739f, 0.003958f, -0.029528f, 0.010538f, 0.019684f, -0.004077f, -0.009706f, 0.004316f, 0.018192f, -0.002701f, -0.019021f, 0.019383f, 0.012625f, 0.002366f, -0.001022f, 0.016204f, 0.003059f, 0.005682f, -0.022599f, 0.028635f, -0.015836f, 0.030538f, -0.020172f, -0.054524f, -0.147181f, -0.231294f, 0.020945f, 0.221508f, 0.018094f, 0.501468f, 0.517584f, 0.257690f, 0.541846f, 0.361411f, -0.075113f, -0.007846f, -0.119368f, -0.435145f, -0.382049f, -0.236164f, -0.444638f, -0.347993f, -0.101312f, -0.218121f, -0.182698f, 0.064543f, 0.109132f, -0.053060f, 0.028390f, 0.097470f, -0.075438f, -0.044198f, 0.137321f, 0.121981f, 0.013769f, 0.136344f, 0.232754f, 0.077629f, 0.168272f, 0.318567f, 0.152791f, 0.080549f, 0.285316f, 0.238472f, 0.031470f, 0.171148f, 0.334363f, 0.065901f, 0.078398f, 0.270002f, 0.116056f, -0.029712f, 0.190685f, 0.179972f, - -0.017407f, 0.158795f, 0.205105f, -0.004030f, -0.151337f, -0.070891f, -0.354687f, -0.585406f, -0.520799f, -0.555260f, -0.847686f, -0.761529f, -0.712754f, -0.866665f, -0.842146f, -0.691112f, -0.623364f, -0.560944f, -0.325398f, -0.125972f, 0.108129f, 0.231861f, 0.445199f, 0.664580f, 0.725576f, 0.808445f, 1.055279f, 1.041443f, 0.818958f, 0.896082f, 0.791960f, 0.326676f, 0.356052f, 0.302264f, -0.014925f, -0.051910f, 0.085980f, -0.014508f, -0.138666f, 0.015322f, 0.089299f, -0.090931f, -0.037644f, 0.078497f, -0.045513f, -0.175918f, -0.059985f, -0.049696f, -0.253620f, -0.180658f, -0.050950f, -0.199779f, -0.225922f, -0.018709f, -0.082370f, -0.228703f, -0.111820f, -0.105584f, -0.320417f, -0.304100f, -0.276040f, -0.494536f, -0.534400f, -0.446440f, -0.475987f, -0.513380f, -0.369195f, -0.315711f, -0.274720f, -0.200429f, -0.110368f, -0.052702f, -0.018241f, 0.035477f, 0.168505f, 0.231976f, 0.360890f, 0.592151f, 0.670360f, 0.742139f, 0.867896f, 0.847782f, 0.745922f, 0.634404f, 0.443064f, 0.187333f, 0.042649f, -0.051795f, -0.149608f, -0.174977f, -0.172084f, -0.174410f, -0.178294f, -0.167344f, -0.152175f, -0.163871f, - -0.167602f, -0.159579f, -0.170680f, -0.186716f, -0.178502f, -0.172124f, -0.167763f, -0.147889f, -0.113005f, -0.085041f, -0.056165f, -0.017091f, 0.012072f, 0.025351f, 0.034693f, 0.036761f, 0.030277f, 0.026742f, 0.020038f, 0.004657f, -0.008119f, -0.019614f, -0.033713f, -0.038042f, -0.037754f, -0.041682f, -0.040862f, -0.034252f, -0.033299f, -0.029760f, -0.019591f, -0.019444f, -0.021303f, -0.012252f, -0.008425f, -0.012469f, -0.005068f, -0.002648f, -0.005738f, 0.007912f, 0.021724f, 0.026241f, 0.040905f, 0.056444f, 0.063633f, 0.073921f, 0.085406f, 0.087361f, 0.086370f, 0.090139f, 0.089726f, 0.084724f, 0.079591f, 0.072134f, 0.059702f, 0.047827f, 0.039147f, 0.027467f, 0.015083f, 0.003656f, -0.010385f, -0.027003f, -0.040921f, -0.054383f, -0.065144f, -0.074689f, -0.080398f, -0.080705f, -0.077920f, -0.070407f, -0.056879f, -0.044273f, -0.032880f, -0.022626f, -0.014521f, -0.011379f, -0.007523f, -0.004478f, -0.002896f, -0.001880f, 0.000469f, 0.001393f, 0.002397f, 0.003059f, 0.004354f, 0.004319f, 0.004711f, 0.004393f, 0.004343f, 0.003223f, 0.002655f, 0.001463f, 0.000762f} - }, - { - {0.003003f, 0.012045f, -0.006014f, 0.003344f, -0.001272f, 0.000710f, 0.000534f, -0.004838f, -0.005545f, 0.003623f, -0.001039f, -0.004410f, -0.005686f, -0.003469f, 0.004950f, -0.000507f, 0.006654f, 0.001417f, -0.008517f, -0.008752f, -0.006255f, 0.002568f, 0.002133f, 0.004553f, -0.000712f, 0.005209f, -0.004009f, -0.000726f, -0.009210f, -0.001402f, -0.001746f, 0.001903f, 0.003417f, 0.003472f, 0.006742f, -0.003367f, -0.004573f, 0.003674f, 0.002034f, -0.004418f, -0.004549f, 0.000217f, 0.003117f, 0.001516f, 0.007489f, -0.002859f, -0.002422f, 0.008533f, 0.002570f, 0.015993f, 0.006759f, -0.004487f, -0.000192f, -0.009843f, 0.000146f, -0.011220f, -0.000779f, -0.004198f, 0.007713f, 0.000817f, 0.004122f, 0.005676f, 0.003033f, 0.005442f, 0.003581f, 0.000770f, -0.009454f, -0.001050f, -0.004759f, 0.006486f, 0.009431f, -0.006649f, -0.004772f, -0.002862f, -0.003878f, -0.005019f, -0.008113f, -0.001837f, 0.002376f, -0.004762f, -0.003977f, -0.001681f, -0.006679f, 0.000765f, -0.001380f, -0.004484f, 0.001385f, 0.000234f, -0.000073f, -0.002211f, 0.000348f, 0.000412f, 0.002419f, -0.000691f, 0.001544f, -0.000824f, - 0.001103f, -0.000326f, -0.001540f, 0.000402f, 0.001888f, 0.000322f, -0.001789f, -0.001794f, -0.000235f, 0.003298f, 0.000714f, -0.000645f, 0.000480f, -0.000977f, -0.001119f, -0.018876f, -0.020171f, -0.001607f, -0.005782f, 0.000772f, -0.004373f, -0.001193f, 0.011231f, -0.002011f, 0.006040f, -0.002778f, -0.005392f, -0.007462f, 0.001374f, -0.001546f, -0.008903f, 0.010265f, 0.003089f, 0.000702f, 0.005478f, 0.005219f, 0.008471f, 0.005961f, -0.000558f, -0.006304f, 0.005886f, 0.001367f, -0.008490f, -0.003756f, -0.003827f, -0.002548f, 0.007596f, -0.002604f, -0.012948f, -0.004390f, -0.001478f, 0.002702f, -0.004023f, -0.008430f, 0.000278f, -0.000825f, 0.009793f, 0.001448f, -0.000076f, 0.003574f, -0.000222f, 0.013208f, -0.002277f, 0.001214f, -0.002918f, -0.005243f, 0.000007f, 0.005672f, 0.002566f, 0.001547f, 0.005362f, -0.004920f, -0.008195f, -0.005864f, -0.001180f, 0.001078f, -0.001913f, 0.000234f, -0.006152f, -0.001362f, 0.003223f, -0.001963f, 0.006416f, 0.003349f, -0.000364f, 0.001191f, -0.006019f, -0.005124f, 0.009955f, 0.002263f, 0.004239f, 0.002890f, -0.001774f, -0.000584f, -0.007568f, 0.000535f, - -0.004326f, 0.001859f, -0.001479f, 0.001928f, 0.002047f, 0.005858f, -0.000615f, -0.002044f, 0.000339f, 0.001257f, 0.000777f, 0.000214f, 0.000199f, -0.001761f, -0.001398f, 0.000715f, -0.000648f, -0.001516f, 0.002369f, -0.001199f, 0.001210f, 0.001816f, -0.001727f, -0.000505f, 0.001356f, -0.000512f, 0.002440f, -0.001471f, 0.001203f, -0.001170f, -0.000873f, -0.003062f, 0.002868f, 0.013007f, -0.000676f, 0.006658f, 0.003980f, 0.008894f, 0.010991f, -0.002518f, 0.000945f, 0.006720f, 0.006707f, 0.004437f, 0.012577f, 0.002528f, -0.004046f, 0.000536f, 0.011015f, 0.003853f, 0.005230f, 0.009503f, 0.012838f, 0.008435f, -0.002846f, -0.008758f, 0.006221f, 0.004207f, -0.005010f, -0.008454f, 0.000515f, -0.004932f, 0.002310f, 0.003251f, -0.003032f, -0.004209f, 0.004310f, 0.003377f, 0.007608f, -0.005034f, -0.010237f, -0.005145f, -0.004399f, -0.006842f, -0.002325f, -0.007817f, 0.004753f, -0.010707f, 0.004667f, 0.000943f, 0.002537f, -0.004741f, 0.010306f, 0.007851f, -0.007191f, 0.009042f, 0.003443f, -0.001294f, 0.003024f, -0.006486f, -0.002028f, 0.006203f, 0.002249f, 0.002628f, 0.001674f, 0.007405f, - 0.003043f, 0.009146f, -0.004401f, -0.000493f, -0.000525f, 0.003589f, 0.005334f, -0.002037f, 0.003573f, -0.004709f, 0.002486f, 0.003262f, 0.002947f, 0.010049f, 0.000447f, 0.007519f, 0.008424f, 0.004761f, -0.007518f, -0.001380f, -0.001099f, -0.001905f, 0.000767f, 0.004314f, -0.001662f, 0.000222f, -0.000220f, 0.000577f, 0.001634f, -0.001144f, 0.001907f, 0.003014f, -0.001933f, -0.000986f, 0.002882f, 0.000203f, 0.000141f, -0.000031f, -0.001461f, 0.000806f, -0.000645f, 0.000344f, 0.002273f, 0.003628f, 0.000284f, -0.000353f, 0.001907f, 0.001484f, 0.000698f, 0.000944f, 0.000823f, 0.000994f, 0.000019f, -0.000349f, 0.001715f, 0.002044f, -0.001601f, 0.001146f, -0.000469f, 0.001662f, 0.002041f, 0.000302f, 0.000511f, 0.002152f, 0.000123f, 0.000043f, -0.000273f, 0.001016f, 0.036348f, 0.000031f, 0.032214f, 0.002302f, 0.020499f, -0.004614f, -0.003221f, 0.005272f, -0.014842f, 0.016244f, -0.009128f, 0.010810f, 0.008427f, -0.006309f, 0.005079f, -0.000708f, 0.000868f, -0.003056f, 0.004847f, 0.006262f, 0.008343f, 0.013076f, 0.003502f, 0.003995f, -0.000274f, 0.015425f, -0.017773f, 0.000178f, - -0.001138f, 0.004064f, 0.007884f, -0.009737f, 0.003862f, 0.004020f, 0.002433f, 0.006016f, 0.003624f, -0.007574f, 0.003710f, 0.013779f, -0.002410f, 0.004037f, -0.002152f, -0.002443f, -0.000458f, -0.010340f, 0.015753f, -0.000501f, 0.001717f, 0.011365f, -0.001434f, 0.000638f, 0.014615f, -0.021415f, 0.005996f, -0.000656f, 0.006514f, 0.016862f, 0.005289f, 0.003880f, 0.006109f, -0.002115f, -0.004617f, -0.003499f, 0.004350f, 0.001305f, 0.009353f, -0.003584f, 0.007712f, 0.003267f, -0.002428f, 0.001295f, -0.005900f, -0.004178f, 0.000941f, -0.002028f, -0.008206f, -0.005558f, -0.008402f, 0.004796f, 0.007661f, -0.002286f, 0.002442f, -0.002024f, -0.005556f, -0.000492f, 0.003231f, 0.002892f, -0.010066f, -0.000671f, 0.001048f, -0.001812f, 0.000671f, -0.002342f, 0.000300f, -0.002499f, -0.004807f, -0.000342f, -0.003154f, -0.002857f, -0.003963f, -0.000069f, -0.003876f, -0.001473f, -0.003760f, -0.003168f, -0.000045f, -0.001634f, -0.001968f, -0.000464f, 0.000591f, 0.001616f, -0.001986f, -0.000210f, 0.000718f, -0.014518f, -0.017626f, -0.007126f, -0.002564f, -0.006729f, 0.014283f, 0.005970f, -0.011224f, 0.012533f, - -0.001669f, -0.009295f, 0.002849f, 0.005410f, -0.005026f, -0.008500f, -0.007478f, -0.016082f, -0.007974f, 0.006824f, -0.010039f, -0.016327f, 0.004683f, 0.006492f, 0.001410f, -0.006057f, 0.012277f, 0.001426f, 0.011359f, -0.000783f, -0.002488f, 0.006354f, 0.010768f, -0.015241f, -0.007123f, 0.004061f, -0.003299f, 0.003646f, -0.009818f, -0.000792f, 0.002776f, 0.003526f, -0.008365f, -0.015471f, -0.004238f, 0.004431f, -0.002508f, -0.002005f, 0.001035f, 0.004920f, -0.001425f, 0.002706f, -0.005092f, 0.008878f, -0.011629f, -0.008825f, -0.002968f, -0.008645f, -0.002477f, -0.002374f, 0.003523f, -0.006353f, 0.004862f, 0.009654f, -0.000741f, 0.002233f, 0.002715f, 0.004611f, 0.009575f, -0.003644f, -0.001719f, -0.001836f, -0.003831f, 0.009826f, -0.003911f, -0.017212f, -0.010868f, -0.007290f, 0.016604f, 0.000257f, 0.009569f, 0.004317f, 0.001535f, 0.002533f, -0.001041f, -0.000391f, 0.008047f, -0.002660f, -0.001709f, 0.002557f, -0.001290f, 0.001265f, -0.003457f, -0.002170f, 0.001923f, -0.000490f, 0.002106f, -0.000520f, 0.001286f, 0.002976f, 0.002242f, 0.002784f, 0.000122f, 0.001940f, -0.000326f, 0.002857f, - 0.003238f, 0.005095f, 0.003292f, 0.004047f, 0.001065f, 0.002706f, 0.002426f, 0.001684f, 0.002521f, 0.003362f, -0.001406f, 0.000277f, -0.000544f, -0.001408f, 0.001497f, 0.001999f, -0.004006f, -0.015705f, -0.036136f, -0.003492f, 0.002617f, 0.000275f, -0.011647f, -0.005318f, -0.013235f, -0.003554f, -0.015632f, -0.018136f, -0.013985f, -0.003385f, -0.009235f, -0.020427f, -0.012617f, 0.004082f, 0.006370f, -0.005735f, 0.012301f, 0.006634f, -0.004439f, 0.014938f, 0.003305f, 0.001115f, 0.002498f, -0.020754f, -0.000686f, 0.003300f, 0.007835f, -0.006619f, -0.005676f, 0.012148f, 0.023970f, -0.018027f, 0.006496f, -0.005406f, -0.000866f, -0.015909f, -0.001334f, -0.000328f, -0.007988f, -0.010350f, -0.007359f, -0.008830f, -0.004574f, 0.005003f, 0.017596f, -0.008359f, 0.006623f, 0.011699f, 0.010774f, -0.003790f, 0.001250f, -0.004011f, -0.003377f, -0.016353f, -0.007982f, 0.008998f, -0.005810f, 0.001815f, -0.005548f, 0.004445f, 0.002475f, -0.001967f, -0.000595f, -0.007735f, -0.006213f, 0.001232f, -0.002237f, 0.003134f, -0.019140f, -0.020449f, -0.002174f, -0.003157f, -0.008699f, -0.000244f, 0.006426f, -0.010158f, - -0.007667f, -0.008694f, -0.014744f, 0.010218f, -0.001077f, -0.002415f, 0.003991f, -0.000785f, 0.003577f, 0.006665f, 0.002370f, 0.003608f, 0.002166f, 0.004836f, -0.001534f, 0.000690f, 0.000794f, 0.000934f, 0.001645f, -0.001538f, -0.001284f, 0.000060f, 0.001527f, 0.001730f, -0.001281f, 0.001376f, -0.001851f, -0.003694f, 0.001845f, 0.001134f, -0.001413f, 0.004293f, 0.002006f, 0.000067f, 0.001700f, -0.002982f, -0.003016f, -0.001019f, -0.001626f, -0.001480f, -0.004022f, -0.000836f, -0.003184f, -0.022764f, -0.004178f, -0.027359f, -0.005824f, -0.019456f, -0.002040f, 0.003368f, 0.005141f, 0.020596f, -0.012755f, 0.004413f, 0.005879f, -0.011559f, -0.004855f, 0.016523f, 0.002030f, -0.005147f, 0.002357f, -0.014060f, 0.012783f, -0.017946f, -0.005597f, 0.007645f, 0.005160f, -0.002089f, 0.003271f, -0.003743f, 0.006045f, -0.007800f, -0.013047f, 0.000660f, 0.006679f, 0.005018f, -0.010386f, 0.002702f, 0.012196f, -0.012535f, -0.015330f, 0.012169f, -0.010377f, 0.007859f, -0.007401f, 0.004276f, -0.000071f, -0.011300f, -0.014141f, -0.009105f, 0.004161f, -0.000822f, 0.005615f, -0.007761f, -0.007088f, -0.018609f, - 0.009813f, -0.013409f, -0.005777f, 0.006901f, 0.016534f, -0.002362f, -0.003143f, -0.024283f, -0.018699f, -0.006560f, -0.006513f, 0.008790f, -0.002324f, -0.014330f, -0.002021f, 0.000494f, -0.007597f, -0.002175f, -0.016585f, 0.010958f, 0.004590f, 0.013884f, 0.017494f, 0.008848f, 0.000939f, 0.007269f, 0.015629f, -0.001531f, -0.003320f, -0.001303f, -0.004480f, -0.015556f, 0.001081f, 0.000882f, 0.003525f, 0.007952f, -0.003108f, 0.001564f, 0.000218f, -0.006270f, -0.003035f, 0.005350f, 0.005610f, 0.004847f, -0.003699f, 0.001288f, 0.002344f, 0.001696f, 0.002107f, 0.001994f, 0.000960f, 0.004013f, 0.004454f, 0.002634f, -0.000639f, 0.001718f, -0.000505f, 0.001440f, 0.003274f, 0.000840f, 0.001450f, -0.000170f, -0.000837f, -0.001199f, 0.000156f, -0.002901f, -0.001017f, 0.002738f, 0.013298f, 0.007081f, 0.038756f, 0.018860f, 0.025087f, -0.007704f, -0.001021f, -0.000339f, -0.038354f, 0.002092f, 0.016490f, -0.007505f, -0.003008f, 0.001401f, 0.024117f, -0.004005f, 0.013961f, -0.002777f, 0.013372f, 0.007452f, 0.016523f, 0.023354f, 0.002970f, 0.015626f, -0.004830f, 0.013539f, -0.001839f, 0.024994f, - 0.013230f, -0.000317f, 0.014151f, 0.011541f, -0.004206f, 0.011025f, 0.006561f, 0.009536f, -0.007462f, -0.005868f, -0.020129f, -0.001120f, 0.014259f, 0.002859f, 0.001811f, -0.004567f, -0.007529f, -0.005890f, -0.006637f, 0.035155f, -0.022533f, 0.009055f, 0.010646f, 0.006160f, 0.003032f, -0.013324f, -0.017882f, -0.004449f, -0.002659f, -0.000702f, -0.030985f, -0.015244f, -0.015923f, 0.000892f, -0.000722f, 0.009347f, -0.001006f, 0.008320f, 0.010998f, 0.019984f, 0.003659f, -0.004976f, 0.006692f, -0.012358f, 0.003433f, -0.009027f, 0.003356f, 0.007820f, 0.004360f, 0.012786f, -0.008523f, -0.009564f, 0.045499f, 0.006372f, 0.008271f, 0.005899f, 0.015454f, -0.010782f, -0.005634f, 0.009863f, -0.001112f, -0.000121f, 0.001805f, 0.003344f, 0.008932f, -0.004280f, -0.000664f, 0.001829f, 0.005149f, 0.001319f, -0.004687f, 0.008783f, 0.000336f, -0.001892f, 0.000213f, -0.000852f, -0.004609f, -0.004183f, -0.002014f, -0.004668f, 0.000002f, -0.001739f, 0.002115f, 0.006338f, -0.000560f, -0.000457f, -0.006799f, -0.001284f, 0.003379f, -0.000602f, 0.000419f, 0.000779f, 0.005374f, -0.002628f, -0.000794f, 0.001880f, - 0.002032f, -0.005789f, -0.005011f, 0.059780f, 0.006110f, 0.009142f, 0.006425f, -0.003447f, -0.024402f, 0.016541f, 0.016911f, -0.009383f, 0.007248f, 0.007983f, -0.014744f, -0.001785f, 0.013883f, 0.008371f, -0.025759f, 0.006713f, -0.007175f, -0.012825f, -0.000497f, 0.007705f, 0.001836f, -0.000029f, -0.000663f, 0.011220f, -0.003623f, 0.006415f, -0.020090f, 0.008186f, -0.002221f, 0.008037f, 0.004329f, -0.003431f, 0.014016f, -0.019159f, -0.008507f, -0.018923f, 0.016464f, 0.008062f, 0.026966f, 0.013603f, -0.000253f, 0.006008f, -0.022173f, -0.000017f, 0.006259f, 0.007183f, 0.006533f, 0.001628f, 0.003710f, -0.005671f, 0.006102f, 0.019642f, 0.026079f, 0.011503f, -0.012119f, -0.006450f, -0.002869f, -0.005056f, 0.009603f, 0.013393f, -0.009370f, 0.007969f, 0.014499f, 0.004616f, -0.020398f, -0.039836f, -0.019885f, 0.008118f, 0.017320f, -0.007436f, 0.005089f, -0.001425f, -0.003826f, -0.000060f, 0.018085f, 0.003419f, -0.015196f, 0.024750f, 0.011028f, -0.028554f, 0.001193f, -0.003386f, -0.009337f, -0.003159f, -0.004476f, 0.000024f, 0.009798f, 0.004211f, -0.007837f, -0.004067f, 0.005754f, 0.010695f, - -0.004860f, 0.008139f, 0.001987f, -0.006631f, -0.001827f, 0.001079f, 0.000162f, -0.001233f, 0.000473f, -0.003291f, -0.002509f, 0.002375f, 0.000574f, -0.002930f, -0.003250f, 0.000191f, -0.002123f, -0.004874f, 0.002941f, -0.001704f, -0.002633f, 0.001376f, 0.004996f, -0.005468f, -0.008716f, -0.000077f, -0.001339f, -0.012681f, -0.002265f, 0.003141f, -0.000079f, -0.007668f, -0.000981f, -0.002848f, 0.002385f, 0.001778f, 0.003929f, 0.003125f, -0.001264f, -0.001394f, -0.002431f, -0.006262f, -0.037016f, 0.011479f, 0.016814f, -0.019017f, 0.012123f, 0.021830f, -0.052463f, 0.011736f, 0.001727f, 0.011916f, -0.019875f, 0.029866f, -0.041496f, 0.000147f, -0.003423f, -0.002852f, -0.004690f, -0.011434f, -0.015985f, -0.002041f, 0.014216f, 0.002007f, -0.000071f, -0.007325f, 0.009867f, -0.001119f, -0.005539f, 0.008297f, 0.017664f, -0.011532f, 0.012611f, -0.001885f, 0.007475f, 0.004475f, 0.011821f, 0.019334f, -0.004814f, 0.005451f, -0.024858f, -0.011730f, -0.005491f, -0.008749f, -0.022677f, 0.002885f, -0.008539f, -0.013968f, 0.020905f, -0.019513f, -0.007106f, -0.008942f, -0.011249f, 0.015077f, -0.016988f, 0.009767f, - -0.006214f, 0.015479f, -0.008324f, 0.016904f, -0.022078f, -0.005665f, 0.002395f, 0.020368f, -0.035390f, -0.012706f, 0.000918f, 0.000475f, -0.006597f, 0.014413f, -0.018523f, -0.035123f, 0.007366f, -0.030787f, 0.015494f, -0.010716f, -0.000245f, -0.032212f, -0.013120f, 0.035638f, 0.019576f, -0.026071f, -0.022495f, -0.018350f, 0.000768f, 0.011082f, -0.004951f, -0.011459f, 0.022567f, 0.008568f, -0.004356f, -0.004608f, -0.008928f, -0.001418f, 0.008656f, -0.008037f, 0.009331f, -0.000784f, -0.007012f, 0.001567f, -0.005436f, 0.003876f, 0.007834f, -0.004531f, 0.003294f, 0.006300f, 0.003915f, -0.000402f, 0.009159f, -0.008703f, 0.008630f, -0.002228f, 0.007554f, -0.010177f, -0.005748f, 0.001852f, 0.000378f, 0.011143f, 0.003347f, 0.006809f, -0.003976f, -0.005948f, 0.003286f, -0.011712f, -0.001473f, -0.002251f, 0.004701f, -0.002225f, -0.002715f, -0.003645f, -0.026982f, -0.011554f, 0.033950f, 0.001451f, -0.028027f, 0.026389f, -0.012357f, 0.001771f, -0.029222f, 0.004509f, 0.011573f, -0.025754f, -0.006301f, -0.023014f, -0.000168f, 0.001482f, -0.007767f, -0.006380f, 0.022482f, 0.003474f, -0.015233f, 0.003835f, - -0.032634f, 0.019628f, 0.031097f, -0.010041f, 0.012988f, 0.022075f, -0.001644f, -0.004489f, 0.002719f, 0.002697f, 0.012929f, 0.002224f, 0.002995f, 0.006803f, -0.018234f, -0.001294f, -0.020961f, -0.021409f, -0.008779f, 0.009029f, 0.012739f, -0.000649f, -0.025216f, 0.004996f, 0.006633f, 0.012440f, 0.026995f, -0.027634f, 0.040504f, -0.033545f, 0.001502f, -0.006736f, -0.005796f, -0.016206f, -0.031129f, -0.042000f, -0.016277f, -0.004782f, 0.010732f, -0.003158f, 0.001771f, 0.006217f, -0.000279f, 0.029634f, 0.014033f, -0.030336f, -0.004709f, -0.000586f, 0.019412f, -0.020955f, 0.001434f, -0.042268f, 0.007960f, 0.033085f, -0.029507f, -0.011564f, 0.004222f, -0.000287f, 0.008306f, 0.046349f, 0.000734f, -0.006075f, 0.002453f, 0.023615f, -0.015967f, 0.006350f, 0.008666f, -0.003465f, -0.001666f, -0.000277f, -0.000574f, 0.010530f, -0.003384f, -0.002377f, -0.009036f, 0.015318f, -0.003260f, 0.004532f, 0.001592f, 0.002723f, 0.003873f, 0.011145f, -0.007681f, -0.001959f, 0.011838f, -0.008520f, -0.011988f, 0.009966f, 0.000543f, 0.004877f, 0.006764f, 0.003801f, 0.012249f, -0.009455f, 0.005737f, 0.006755f, - -0.004152f, 0.017256f, 0.005985f, 0.010561f, 0.003935f, -0.010372f, -0.003722f, -0.001752f, -0.001736f, -0.001835f, 0.005074f, -0.017237f, -0.035278f, 0.042157f, 0.017868f, -0.020494f, 0.027207f, 0.027431f, 0.038710f, -0.014191f, -0.013478f, 0.028441f, -0.004243f, -0.005478f, 0.009799f, 0.012721f, 0.004960f, 0.006156f, -0.038656f, -0.003962f, 0.000061f, 0.000464f, 0.002082f, -0.004219f, 0.016323f, 0.031889f, 0.003176f, 0.002321f, -0.000574f, 0.001673f, 0.029209f, 0.007925f, -0.002083f, -0.006224f, 0.007468f, 0.006632f, -0.004600f, 0.003523f, -0.016693f, -0.003313f, 0.025420f, -0.025058f, -0.012264f, -0.021584f, 0.028412f, -0.025854f, 0.013057f, -0.010478f, 0.008370f, -0.005474f, 0.006756f, -0.020729f, 0.004810f, 0.031763f, -0.020756f, 0.001844f, -0.055085f, -0.002256f, -0.019443f, 0.001689f, -0.051405f, -0.002076f, -0.002499f, -0.015665f, -0.011015f, 0.042193f, -0.045025f, 0.007724f, -0.012141f, -0.016606f, 0.012167f, -0.015039f, -0.035154f, -0.024480f, 0.003467f, 0.002072f, 0.007321f, -0.017226f, -0.023645f, 0.013716f, 0.001199f, 0.002858f, 0.015850f, -0.026061f, 0.019763f, -0.018895f, - -0.008907f, -0.007994f, 0.004753f, 0.000908f, 0.005695f, -0.003169f, -0.006634f, 0.001870f, -0.003739f, 0.005767f, 0.012343f, 0.007377f, 0.004594f, 0.003699f, 0.003402f, 0.003483f, -0.001239f, 0.013572f, 0.002609f, -0.002328f, 0.010037f, 0.010456f, 0.003909f, -0.005450f, -0.000487f, -0.008054f, 0.013381f, 0.004947f, 0.010780f, -0.005007f, 0.011064f, 0.010008f, 0.014458f, 0.007289f, -0.003967f, -0.007279f, 0.012173f, 0.002678f, 0.010546f, 0.002595f, 0.002917f, 0.002973f, 0.003217f, 0.035719f, 0.011960f, -0.004213f, 0.007174f, -0.017228f, -0.019070f, -0.014830f, 0.033902f, -0.030275f, -0.038627f, 0.018718f, -0.035974f, 0.013608f, 0.000929f, 0.010112f, -0.016332f, -0.003410f, -0.019785f, -0.007785f, -0.015379f, 0.007605f, 0.017210f, 0.012596f, -0.029153f, 0.033764f, 0.003585f, 0.012054f, 0.002582f, 0.016457f, -0.003923f, 0.015819f, 0.003314f, -0.006510f, 0.009374f, 0.003965f, 0.012574f, 0.009354f, -0.022268f, 0.009108f, -0.006879f, 0.006498f, -0.004937f, -0.007769f, -0.007243f, -0.014943f, 0.013736f, 0.015590f, 0.015432f, -0.002654f, 0.028656f, 0.035189f, 0.013421f, 0.004882f, - 0.015289f, 0.036449f, 0.017296f, 0.039727f, 0.024778f, 0.029685f, -0.032146f, -0.031512f, 0.005902f, -0.006176f, -0.009135f, 0.002751f, -0.016499f, 0.013486f, 0.009299f, 0.006473f, 0.029425f, -0.006805f, -0.020033f, -0.016036f, -0.014981f, 0.003730f, -0.007477f, -0.064247f, -0.028685f, -0.024874f, -0.009765f, -0.012819f, -0.007426f, -0.009575f, -0.018968f, 0.000870f, -0.011675f, -0.010350f, 0.003597f, -0.010392f, -0.004009f, -0.016081f, 0.000266f, 0.001013f, -0.003266f, -0.023005f, 0.008860f, 0.000082f, 0.000404f, -0.017283f, 0.004561f, 0.006320f, 0.006012f, 0.002023f, 0.019514f, -0.012962f, -0.005699f, 0.004230f, 0.001501f, -0.001385f, 0.007617f, -0.009175f, -0.008580f, -0.001617f, 0.013617f, -0.001414f, 0.009704f, 0.011933f, -0.003287f, -0.014907f, -0.014126f, -0.001596f, 0.014214f, 0.001166f, -0.011466f, 0.001515f, -0.003118f, -0.007299f, -0.006213f, -0.002341f, 0.000075f, -0.011203f, -0.010270f, 0.009694f, 0.028281f, 0.019880f, -0.063207f, -0.045987f, -0.014843f, -0.000204f, 0.020304f, -0.008233f, -0.001870f, -0.049605f, 0.006686f, -0.025802f, 0.018311f, -0.003262f, 0.024389f, -0.020876f, - -0.005675f, -0.024846f, 0.003992f, 0.020906f, -0.010219f, 0.006338f, -0.014808f, 0.001410f, -0.034135f, -0.009046f, -0.002001f, 0.002733f, 0.024663f, 0.032871f, 0.000765f, -0.029623f, -0.021410f, -0.009388f, 0.002708f, -0.007634f, 0.009161f, -0.034108f, -0.011027f, -0.004461f, -0.009278f, -0.019065f, -0.004880f, -0.008665f, 0.023057f, 0.034193f, 0.022572f, 0.008594f, 0.013660f, 0.014449f, -0.016710f, 0.056948f, 0.034078f, -0.044550f, -0.039027f, 0.041875f, -0.033101f, -0.018745f, 0.006115f, 0.004781f, -0.032134f, 0.030995f, 0.001705f, -0.095944f, 0.025425f, 0.060446f, -0.042037f, 0.041684f, 0.055321f, -0.018415f, -0.006052f, 0.029808f, -0.035012f, -0.022914f, 0.011306f, -0.018835f, -0.022000f, 0.025275f, -0.042411f, -0.012755f, 0.005136f, 0.001020f, 0.002118f, -0.004020f, 0.015165f, -0.010998f, 0.006326f, 0.002299f, -0.011468f, 0.022322f, 0.011117f, -0.000715f, -0.014500f, 0.017218f, -0.011081f, 0.013287f, -0.011777f, 0.016160f, 0.001400f, 0.003350f, 0.016090f, -0.012685f, -0.014518f, 0.004294f, -0.013415f, -0.008094f, -0.000901f, 0.001401f, -0.009025f, -0.015762f, 0.007190f, -0.037000f, - -0.000303f, 0.017030f, -0.013945f, 0.010026f, -0.004473f, 0.005031f, -0.015783f, 0.000361f, 0.008205f, -0.007267f, 0.005279f, 0.033203f, -0.015066f, -0.013929f, 0.032401f, -0.023635f, -0.004232f, 0.027462f, -0.019530f, -0.012452f, 0.020676f, 0.012675f, 0.013597f, -0.003368f, -0.020124f, -0.016169f, 0.019124f, -0.015198f, -0.001324f, 0.005663f, -0.028466f, 0.018596f, 0.015271f, -0.011544f, -0.009255f, -0.022266f, 0.000703f, -0.013756f, 0.019381f, -0.031258f, 0.002502f, 0.012057f, -0.001540f, -0.014827f, -0.032314f, -0.007227f, -0.013975f, -0.003073f, -0.024959f, 0.034337f, -0.033283f, 0.005958f, -0.011993f, 0.008723f, -0.047185f, 0.048937f, 0.009466f, 0.005011f, -0.019340f, 0.011269f, 0.008155f, 0.002284f, 0.004651f, -0.008560f, -0.037152f, -0.006311f, -0.015950f, -0.023792f, -0.031871f, -0.011406f, -0.007849f, -0.031706f, -0.011956f, -0.001294f, 0.022311f, 0.010365f, -0.028607f, -0.025030f, 0.015838f, -0.006411f, -0.036369f, -0.015594f, 0.009314f, 0.030408f, 0.030307f, 0.030727f, 0.048999f, -0.009116f, -0.032671f, -0.031296f, -0.001657f, 0.021636f, 0.038267f, 0.017305f, 0.008514f, -0.038393f, - 0.022144f, 0.008382f, 0.037367f, 0.025971f, 0.017154f, 0.012960f, 0.000415f, 0.003580f, 0.022184f, -0.004868f, 0.001949f, 0.004163f, 0.006724f, 0.007798f, 0.007445f, 0.010839f, 0.026584f, 0.008549f, 0.002356f, 0.009327f, -0.000182f, 0.008729f, 0.002870f, 0.001892f, 0.016695f, -0.019356f, -0.013551f, -0.004855f, 0.007804f, -0.009612f, 0.006945f, -0.003984f, 0.020919f, 0.001145f, 0.003889f, -0.010287f, -0.012786f, 0.001554f, 0.012407f, -0.010842f, -0.000772f, 0.014232f, -0.010892f, -0.000239f, 0.006999f, -0.019351f, 0.024671f, 0.013421f, -0.003777f, 0.006244f, -0.000373f, 0.000211f, -0.005261f, 0.014159f, -0.003681f, 0.023473f, 0.060368f, -0.053163f, -0.002429f, -0.020717f, -0.029444f, -0.016326f, 0.027134f, -0.014563f, -0.017524f, 0.015105f, 0.035181f, 0.023447f, -0.027984f, 0.018224f, -0.029327f, 0.021612f, 0.000255f, -0.002499f, -0.014668f, -0.020507f, -0.018010f, 0.004273f, 0.002970f, -0.032856f, 0.020348f, 0.004170f, -0.003955f, -0.012082f, -0.015159f, 0.024444f, -0.033476f, -0.000915f, 0.034469f, 0.042248f, -0.038265f, -0.001898f, -0.008363f, -0.023588f, -0.032214f, 0.034778f, - 0.006834f, 0.022307f, -0.007661f, 0.003210f, -0.003914f, 0.022189f, -0.009395f, 0.001700f, -0.027777f, 0.038969f, 0.031097f, -0.046374f, -0.058277f, -0.011654f, -0.000285f, -0.018382f, 0.000950f, -0.013550f, 0.003413f, -0.028631f, 0.029860f, -0.036952f, -0.033733f, -0.011786f, 0.004433f, 0.026231f, -0.014458f, 0.037808f, 0.002974f, -0.012962f, -0.013755f, -0.009432f, -0.024513f, 0.023161f, 0.016052f, -0.005833f, 0.013425f, 0.011652f, -0.019401f, -0.018084f, -0.016590f, 0.029313f, 0.006699f, -0.020435f, 0.001791f, 0.008475f, 0.008921f, -0.030652f, 0.015094f, 0.012635f, 0.005150f, -0.000061f, -0.009359f, 0.004373f, -0.010172f, -0.027290f, 0.005078f, -0.003438f, -0.005622f, -0.003012f, 0.002098f, -0.008147f, -0.011129f, -0.000388f, -0.004425f, 0.013926f, -0.007942f, -0.003663f, 0.007346f, -0.003535f, -0.013567f, 0.010994f, -0.013526f, -0.004099f, -0.023116f, 0.012150f, 0.001821f, -0.003116f, 0.003422f, -0.010017f, 0.019469f, -0.001200f, 0.002852f, 0.022689f, 0.015666f, -0.006221f, -0.007922f, 0.010931f, 0.005558f, -0.007731f, 0.003825f, -0.007103f, -0.007104f, -0.001365f, 0.004552f, -0.004212f, - -0.001555f, -0.083741f, 0.123641f, -0.085228f, -0.020705f, 0.021331f, 0.067147f, 0.052994f, -0.019072f, -0.022465f, 0.004326f, 0.002186f, 0.035003f, 0.011715f, -0.044470f, 0.012687f, -0.009013f, -0.016798f, 0.005202f, 0.017618f, 0.000493f, -0.034826f, -0.029174f, 0.014930f, 0.013663f, 0.020063f, -0.010754f, 0.025049f, 0.006765f, 0.029534f, -0.002455f, -0.011297f, 0.023230f, -0.003639f, -0.023392f, 0.003284f, 0.028668f, -0.002116f, -0.031254f, 0.014938f, 0.037871f, -0.035196f, 0.014202f, -0.037741f, 0.015241f, -0.047449f, -0.029730f, 0.050309f, 0.048434f, 0.021522f, 0.062870f, -0.012874f, 0.074923f, 0.026684f, 0.029289f, 0.038966f, -0.066614f, 0.055796f, 0.020017f, 0.022022f, 0.026824f, 0.005343f, -0.032201f, 0.004435f, 0.063303f, 0.070465f, -0.000227f, -0.081727f, 0.040337f, 0.001280f, 0.017510f, -0.003705f, 0.002519f, -0.018511f, -0.060321f, 0.011398f, -0.009536f, 0.012825f, -0.010772f, 0.029272f, -0.033670f, -0.037617f, -0.025270f, 0.004445f, -0.010581f, -0.017409f, 0.020206f, 0.006868f, -0.025755f, -0.028713f, -0.021479f, -0.017253f, -0.002424f, -0.005212f, 0.015032f, -0.001228f, - -0.022036f, 0.017003f, 0.004005f, -0.006359f, 0.001453f, 0.007997f, -0.010779f, -0.006300f, 0.011626f, -0.020509f, -0.007965f, -0.014241f, 0.012009f, 0.013831f, -0.016168f, 0.004308f, -0.044076f, 0.000309f, 0.002598f, 0.001902f, -0.008286f, -0.008852f, -0.019676f, -0.015562f, 0.010588f, 0.006126f, 0.010167f, 0.015169f, -0.014430f, 0.000864f, 0.006418f, 0.003652f, -0.014138f, -0.000200f, 0.004020f, -0.000769f, -0.011540f, -0.001955f, -0.002716f, 0.080985f, -0.002772f, -0.096768f, -0.048584f, -0.057039f, -0.021476f, 0.000328f, 0.032110f, -0.082484f, -0.018185f, 0.012797f, -0.038115f, -0.044334f, -0.039978f, -0.044251f, -0.006843f, 0.048567f, 0.025278f, -0.019426f, 0.023671f, 0.009479f, -0.022036f, 0.025019f, -0.027902f, -0.006341f, 0.012028f, 0.016534f, -0.055688f, 0.028032f, -0.027255f, 0.015948f, -0.010733f, -0.045031f, 0.012763f, 0.013898f, 0.007223f, 0.007326f, -0.018400f, -0.063873f, 0.002856f, 0.013120f, 0.014167f, 0.000585f, 0.008225f, -0.026543f, -0.000052f, -0.002311f, 0.058209f, -0.008969f, -0.095032f, -0.043107f, -0.010089f, -0.079219f, 0.018291f, -0.024240f, -0.019941f, -0.038210f, - -0.016820f, -0.057044f, -0.055598f, -0.068587f, -0.006557f, 0.072091f, 0.010175f, -0.045706f, 0.021291f, 0.000585f, -0.004801f, -0.025728f, -0.035830f, 0.015107f, 0.029969f, 0.022576f, 0.012549f, -0.013715f, -0.058184f, -0.041733f, -0.058577f, 0.008617f, 0.006686f, -0.002091f, 0.021160f, -0.031023f, -0.037249f, -0.005314f, -0.013695f, -0.038319f, 0.008522f, 0.022031f, 0.003199f, 0.008056f, 0.036958f, -0.006640f, -0.007521f, -0.006303f, 0.002521f, -0.013210f, -0.007240f, 0.016455f, 0.025244f, 0.027513f, 0.018603f, -0.007600f, 0.001305f, 0.004312f, -0.011431f, 0.025493f, -0.010382f, 0.037197f, -0.013026f, 0.017483f, -0.017693f, -0.004905f, 0.037779f, 0.012560f, 0.005209f, -0.000131f, -0.014744f, 0.014924f, 0.003267f, -0.018307f, 0.008345f, -0.015646f, -0.020183f, 0.005929f, 0.006075f, -0.012393f, -0.012115f, 0.012977f, 0.000720f, 0.018211f, 0.003934f, 0.012453f, -0.006687f, 0.005574f, 0.005139f, 0.001960f, 0.053915f, -0.006694f, 0.043270f, 0.055001f, -0.046492f, -0.059055f, -0.061468f, 0.015868f, 0.021937f, -0.085066f, -0.048660f, 0.001329f, 0.002689f, 0.025142f, -0.098278f, 0.010156f, - 0.023014f, 0.067944f, -0.078701f, 0.008953f, 0.013158f, -0.010240f, 0.043731f, -0.025472f, 0.076471f, -0.004616f, 0.006905f, 0.022574f, 0.029799f, -0.029271f, -0.061449f, 0.035452f, 0.043652f, 0.009573f, 0.055181f, 0.010213f, -0.006865f, -0.021062f, -0.046437f, 0.071579f, -0.032129f, 0.067805f, 0.027087f, -0.005553f, 0.020312f, -0.029389f, 0.037025f, 0.035995f, -0.025393f, 0.026631f, 0.013952f, -0.072133f, 0.052276f, 0.052583f, -0.006618f, -0.037054f, 0.007003f, -0.002310f, 0.002412f, -0.013436f, 0.098681f, -0.002388f, -0.057144f, -0.032617f, 0.011263f, -0.083144f, -0.108097f, 0.014246f, 0.135392f, 0.029343f, -0.009488f, -0.086999f, -0.021868f, -0.014931f, 0.092282f, -0.063663f, -0.040356f, -0.152511f, -0.021950f, -0.028399f, -0.035744f, -0.029085f, 0.055870f, 0.059010f, -0.059348f, -0.023658f, 0.019627f, 0.007665f, -0.010830f, 0.023885f, -0.010421f, -0.019350f, -0.018663f, 0.020498f, 0.008437f, 0.006257f, -0.007552f, 0.020081f, -0.021343f, -0.007844f, 0.018232f, 0.007827f, -0.001216f, -0.001416f, -0.015940f, 0.007133f, -0.010586f, 0.038801f, -0.010800f, -0.021996f, -0.017585f, -0.034278f, - -0.011470f, 0.025412f, 0.029323f, 0.079529f, 0.030444f, -0.009672f, -0.061147f, -0.085069f, -0.039616f, 0.000691f, 0.034508f, 0.027393f, -0.022604f, -0.034222f, -0.017156f, -0.014366f, 0.020878f, 0.035773f, 0.007959f, 0.001466f, -0.004651f, -0.013565f, -0.011076f, -0.010412f, -0.001966f, -0.004859f, -0.005191f, 0.004276f, -0.009234f, 0.003084f, 0.001222f, 0.002248f, -0.007034f, -0.001465f, -0.005276f, -0.004833f, -0.006879f, 0.004034f, -0.004390f, 0.007406f, -0.135689f, 0.039986f, 0.064458f, -0.086019f, -0.008234f, 0.049532f, -0.021371f, -0.038230f, 0.034520f, -0.036851f, -0.021004f, 0.003728f, -0.028716f, 0.046663f, -0.015782f, -0.020048f, -0.008322f, 0.025075f, 0.082541f, -0.012024f, -0.038471f, -0.041732f, 0.015067f, 0.040501f, 0.023400f, -0.036770f, -0.006208f, 0.045983f, 0.000952f, -0.033234f, 0.011060f, -0.029561f, 0.076367f, -0.033744f, -0.083268f, 0.029573f, -0.014209f, 0.040528f, -0.055852f, -0.053804f, 0.054703f, -0.003515f, -0.071409f, -0.036932f, -0.068233f, 0.088987f, 0.042264f, 0.024666f, -0.092983f, 0.017408f, 0.038116f, -0.064154f, 0.003663f, -0.045829f, -0.035599f, 0.037257f, - -0.031663f, 0.042620f, -0.026173f, -0.055614f, -0.012889f, -0.013090f, -0.008482f, 0.020351f, 0.006673f, -0.034403f, 0.109659f, -0.012614f, 0.048616f, 0.050779f, 0.030345f, -0.014076f, 0.011530f, -0.024047f, 0.061697f, 0.016063f, -0.015574f, 0.008228f, 0.026225f, 0.043673f, -0.010636f, -0.092305f, -0.006299f, 0.029860f, -0.009230f, 0.050005f, -0.020797f, 0.017782f, -0.007436f, 0.002083f, 0.020321f, 0.005704f, 0.012401f, 0.025888f, 0.014945f, 0.029926f, -0.006922f, 0.010249f, 0.015492f, 0.002800f, -0.029848f, 0.036641f, -0.014805f, 0.000986f, 0.005637f, -0.017164f, 0.009323f, 0.002613f, -0.004678f, 0.025712f, -0.011171f, 0.002598f, 0.036143f, 0.000383f, 0.020178f, -0.016865f, -0.011264f, 0.020213f, -0.004473f, -0.012653f, -0.018772f, 0.001736f, 0.002661f, 0.005265f, -0.006215f, 0.005369f, 0.011330f, -0.003320f, 0.007765f, 0.010222f, -0.004976f, 0.012305f, 0.002272f, -0.012102f, 0.008255f, 0.005063f, 0.002523f, -0.000654f, 0.098185f, 0.019737f, 0.042717f, -0.003951f, 0.010565f, 0.015144f, -0.035267f, 0.015314f, 0.034469f, -0.000029f, -0.040636f, -0.022267f, -0.030072f, -0.012812f, - -0.040735f, -0.039983f, 0.005245f, -0.031947f, 0.046625f, 0.014636f, -0.010521f, -0.033929f, -0.015825f, -0.011413f, 0.025233f, -0.008080f, -0.038534f, -0.032408f, 0.008373f, 0.007959f, 0.022491f, 0.008064f, -0.008319f, 0.009954f, -0.033589f, -0.103390f, 0.004534f, 0.124614f, -0.003445f, -0.091246f, -0.014554f, 0.059113f, 0.016777f, 0.009333f, -0.001478f, -0.039849f, -0.048989f, -0.029794f, 0.011391f, -0.003397f, -0.045309f, 0.016429f, -0.091320f, -0.016743f, 0.084921f, 0.024575f, 0.109185f, -0.014703f, -0.042856f, -0.013350f, -0.009442f, 0.028833f, 0.006501f, -0.001173f, -0.059312f, -0.030267f, -0.028295f, -0.004368f, 0.069145f, -0.009632f, -0.016746f, 0.022354f, 0.028078f, 0.004125f, -0.036609f, -0.057675f, -0.004033f, 0.022882f, -0.002444f, -0.028801f, -0.007189f, 0.015680f, -0.011970f, -0.011050f, -0.018683f, 0.034273f, 0.036619f, -0.018705f, -0.009553f, -0.017214f, 0.014927f, 0.021220f, -0.009935f, 0.002783f, -0.003778f, -0.003338f, -0.006783f, -0.027744f, 0.003057f, 0.015321f, -0.016586f, 0.003770f, -0.003973f, 0.000905f, -0.014859f, -0.005342f, -0.006248f, -0.010091f, -0.011282f, -0.011930f, - -0.003291f, 0.048622f, -0.024303f, -0.000043f, -0.009577f, 0.002358f, 0.027075f, -0.018625f, -0.002582f, -0.005572f, 0.008522f, -0.001602f, 0.007747f, -0.014386f, -0.043466f, -0.144075f, -0.222648f, 0.052580f, 0.199197f, 0.062936f, 0.487335f, 0.459138f, 0.204158f, 0.473425f, 0.199916f, -0.085743f, -0.001450f, -0.142278f, -0.389460f, -0.212535f, -0.203938f, -0.399048f, -0.290606f, -0.166801f, -0.251419f, -0.168959f, 0.036795f, -0.014571f, -0.080439f, 0.095412f, 0.089104f, -0.000280f, 0.095529f, 0.259364f, 0.108873f, 0.048941f, 0.248211f, 0.222169f, 0.074642f, 0.264646f, 0.323713f, -0.000399f, 0.191796f, 0.326423f, 0.123645f, 0.130573f, 0.332714f, 0.198857f, -0.026258f, 0.259746f, 0.182302f, -0.070655f, 0.102000f, 0.206641f, -0.092377f, -0.163751f, -0.036931f, -0.346229f, -0.581378f, -0.562785f, -0.625825f, -1.001163f, -0.866604f, -0.714855f, -0.926501f, -0.794308f, -0.510422f, -0.605018f, -0.462403f, -0.127851f, -0.041219f, 0.196039f, 0.364707f, 0.601206f, 0.805361f, 0.878531f, 1.024649f, 1.112921f, 1.039607f, 0.984758f, 1.044658f, 0.794838f, 0.630201f, 0.747654f, 0.407831f, 0.065353f, - 0.094300f, -0.150782f, -0.552081f, -0.463481f, -0.342922f, -0.494923f, -0.506161f, -0.315674f, -0.359377f, -0.453194f, -0.332161f, -0.302009f, -0.426365f, -0.382485f, -0.249414f, -0.317267f, -0.340820f, -0.111408f, -0.107194f, -0.201058f, -0.021011f, 0.076828f, -0.057459f, 0.011075f, 0.076245f, -0.108396f, -0.140318f, -0.133158f, -0.292070f, -0.322523f, -0.225787f, -0.169575f, -0.123568f, 0.042176f, 0.198250f, 0.269430f, 0.381636f, 0.489014f, 0.510608f, 0.541669f, 0.598986f, 0.568174f, 0.516499f, 0.537995f, 0.487169f, 0.362370f, 0.248538f, 0.065614f, -0.095832f, -0.246344f, -0.358785f, -0.402001f, -0.423595f, -0.377925f, -0.289551f, -0.253578f, -0.213733f, -0.174733f, -0.150843f, -0.132798f, -0.099567f, -0.077106f, -0.071037f, -0.069266f, -0.048308f, -0.036448f, -0.029099f, -0.010019f, 0.015241f, 0.037403f, 0.065362f, 0.067921f, 0.069838f, 0.080882f, 0.079856f, 0.065493f, 0.070450f, 0.058627f, 0.031073f, 0.002370f, -0.023895f, -0.051841f, -0.062418f, -0.074529f, -0.080097f, -0.074598f, -0.069211f, -0.067162f, -0.048053f, -0.037551f, -0.022755f, 0.000812f, 0.020000f, 0.029430f, 0.045250f, 0.054669f, - 0.061796f, 0.069901f, 0.072993f, 0.076221f, 0.079440f, 0.079974f, 0.079197f, 0.073877f, 0.072800f, 0.068840f, 0.064361f, 0.058132f, 0.055480f, 0.045431f, 0.034523f, 0.021070f, 0.010253f, -0.003795f, -0.016563f, -0.028435f, -0.041747f, -0.058530f, -0.069741f, -0.081732f, -0.088030f, -0.093575f, -0.095887f, -0.095957f, -0.091834f, -0.087888f, -0.079556f, -0.072243f, -0.060771f, -0.047624f, -0.029301f, -0.015284f, 0.004387f, 0.018734f, 0.032146f, 0.043768f, 0.054802f, 0.057732f, 0.062129f, 0.060813f, 0.056049f, 0.047775f, 0.041640f, 0.030406f, 0.021410f, 0.013442f, 0.008705f, 0.002013f, 0.000364f, -0.001457f, -0.001192f, -0.003004f, -0.001533f, -0.002295f, -0.001046f, -0.001842f, 0.000052f, -0.000701f}, - {-0.000954f, 0.020699f, -0.010223f, 0.000745f, -0.006068f, -0.000547f, 0.008860f, 0.004093f, 0.005588f, -0.004879f, 0.006904f, -0.007128f, 0.007742f, 0.003759f, 0.009315f, 0.003829f, -0.001676f, -0.010497f, 0.011294f, 0.007663f, 0.002924f, 0.001252f, 0.001122f, -0.004498f, -0.004994f, 0.005733f, 0.003634f, 0.003724f, 0.005648f, -0.005723f, -0.000355f, 0.005162f, 0.006268f, -0.000870f, -0.004540f, -0.008841f, 0.000110f, 0.001579f, -0.005230f, 0.001926f, 0.001490f, -0.007973f, -0.004203f, -0.000661f, 0.004097f, 0.000032f, -0.003781f, 0.007332f, 0.001453f, -0.002555f, -0.005396f, -0.001272f, 0.000722f, -0.010387f, 0.004843f, 0.006423f, -0.003522f, 0.008241f, 0.006861f, -0.001126f, 0.005687f, 0.003272f, 0.011049f, 0.003412f, 0.002123f, -0.001752f, 0.004203f, -0.008876f, 0.001204f, 0.004195f, -0.004311f, 0.004810f, 0.005913f, 0.006386f, 0.004072f, 0.008406f, -0.001749f, -0.005162f, -0.002599f, -0.002203f, 0.001182f, -0.001986f, -0.006497f, 0.003079f, -0.003033f, -0.003483f, -0.003918f, 0.001487f, 0.000057f, -0.002045f, -0.001529f, 0.002589f, 0.000256f, -0.000325f, -0.000642f, -0.000281f, - 0.001293f, 0.001734f, -0.000223f, -0.000122f, -0.001427f, 0.000400f, -0.002616f, 0.000241f, 0.001853f, 0.002359f, -0.001630f, -0.001809f, 0.000474f, 0.001536f, -0.001507f, -0.019649f, -0.013848f, -0.001901f, -0.008939f, -0.007535f, 0.003676f, -0.011165f, -0.010886f, 0.003175f, -0.004966f, -0.004340f, 0.004442f, -0.003485f, -0.007731f, -0.000779f, -0.000643f, -0.002111f, -0.003571f, -0.002016f, -0.008858f, -0.000494f, -0.006406f, -0.004535f, -0.000305f, 0.007916f, -0.001811f, 0.011415f, -0.005971f, 0.006879f, 0.007779f, -0.008757f, 0.003007f, -0.002182f, 0.001643f, -0.006187f, 0.003026f, 0.004080f, 0.005986f, -0.003062f, -0.007457f, -0.002529f, -0.004118f, 0.002410f, 0.002807f, -0.008923f, -0.001191f, -0.006115f, -0.005010f, 0.001724f, -0.007407f, -0.011723f, -0.002265f, 0.011587f, 0.002495f, 0.004079f, 0.000571f, 0.002691f, 0.001522f, 0.004286f, 0.004509f, 0.012988f, 0.000915f, -0.005724f, -0.007489f, -0.001566f, -0.003595f, -0.000927f, -0.015088f, 0.003146f, -0.001122f, 0.004828f, -0.002062f, 0.001361f, -0.003639f, -0.001735f, 0.014665f, 0.002977f, 0.013443f, -0.004556f, -0.002510f, 0.001054f, - 0.003789f, 0.001331f, 0.004527f, -0.004468f, 0.004920f, -0.005213f, -0.003292f, 0.002701f, 0.001893f, -0.000179f, 0.000190f, 0.000126f, -0.001179f, 0.000384f, -0.002042f, -0.000171f, -0.000731f, -0.000315f, 0.000831f, 0.001033f, -0.001149f, -0.001895f, -0.001225f, 0.000134f, 0.000033f, 0.000332f, 0.000591f, -0.000785f, -0.000911f, -0.000801f, 0.000166f, -0.000305f, 0.001059f, 0.016032f, 0.018470f, 0.014223f, 0.010549f, 0.014951f, 0.006057f, 0.006500f, -0.001368f, 0.004250f, 0.015725f, 0.001683f, 0.004793f, -0.005842f, -0.003903f, 0.012059f, -0.008094f, -0.014745f, 0.004457f, -0.012319f, 0.010629f, 0.002511f, 0.012755f, -0.004061f, -0.000809f, -0.003144f, 0.004186f, 0.005113f, -0.000188f, -0.012551f, -0.002598f, 0.010758f, -0.007168f, 0.004852f, 0.002836f, -0.002422f, -0.003104f, 0.011954f, 0.009001f, 0.020851f, 0.008333f, 0.001734f, 0.004981f, -0.001760f, 0.001254f, 0.006569f, 0.003902f, 0.017772f, -0.007624f, -0.005069f, 0.001223f, 0.004578f, -0.002813f, 0.008238f, -0.007731f, 0.001602f, -0.000524f, -0.005923f, 0.001825f, 0.001785f, -0.008047f, -0.010863f, -0.006742f, 0.008603f, - 0.004149f, 0.000037f, -0.000719f, 0.006493f, 0.000470f, 0.002153f, 0.011238f, 0.005556f, -0.002707f, -0.001793f, 0.009987f, -0.008681f, 0.001126f, -0.007826f, -0.003546f, -0.010115f, 0.002731f, -0.002106f, -0.006022f, -0.003929f, 0.005842f, 0.003618f, 0.001023f, 0.003447f, -0.005644f, -0.000944f, -0.000507f, 0.004351f, 0.000099f, 0.000310f, 0.000777f, 0.001299f, 0.003173f, 0.003591f, 0.002805f, 0.000219f, 0.001486f, 0.003250f, 0.000155f, -0.002956f, 0.002707f, -0.001500f, -0.000613f, 0.000665f, -0.000527f, 0.002388f, 0.002143f, 0.001088f, -0.000034f, -0.000830f, -0.000890f, 0.001026f, 0.001338f, 0.000499f, 0.002057f, -0.004222f, -0.002729f, 0.002115f, -0.000180f, -0.001664f, -0.000235f, 0.002257f, 0.000177f, -0.001557f, -0.001992f, 0.001330f, -0.001966f, 0.000168f, 0.034804f, -0.000607f, 0.017049f, -0.003081f, -0.002672f, 0.018306f, -0.017910f, -0.006188f, -0.001397f, 0.009052f, 0.006278f, -0.003818f, 0.003488f, 0.001710f, -0.016217f, 0.004122f, 0.008682f, 0.007727f, -0.018174f, -0.006372f, 0.002057f, -0.013015f, -0.003579f, 0.001020f, 0.000595f, 0.001797f, -0.001997f, 0.008329f, - -0.005865f, 0.006629f, 0.013639f, 0.013642f, -0.003948f, -0.007785f, -0.001387f, 0.015366f, -0.000869f, -0.000799f, 0.000124f, 0.001535f, -0.007959f, 0.001389f, 0.006466f, 0.000994f, 0.001543f, 0.006206f, -0.004082f, 0.004187f, 0.002429f, -0.001661f, 0.010799f, 0.001087f, 0.008589f, 0.001721f, -0.002860f, 0.003770f, 0.005747f, 0.004972f, -0.000235f, -0.008407f, -0.007663f, -0.010129f, -0.004509f, -0.000331f, 0.000026f, -0.001161f, 0.007571f, 0.006522f, -0.004896f, -0.009933f, 0.000337f, 0.005199f, 0.006240f, -0.006066f, -0.001117f, 0.005911f, -0.000509f, -0.000787f, 0.007840f, 0.003690f, 0.003726f, -0.002889f, -0.002496f, -0.000439f, 0.003392f, 0.005053f, 0.000134f, 0.003832f, 0.001390f, 0.000342f, 0.000755f, 0.001292f, 0.004698f, 0.003539f, 0.005286f, -0.002644f, 0.002504f, 0.000381f, 0.000685f, -0.000742f, 0.000570f, 0.000805f, 0.000254f, 0.000707f, -0.000841f, 0.002539f, 0.002490f, -0.002271f, 0.000629f, 0.001426f, 0.001573f, -0.000732f, 0.004894f, 0.001907f, -0.000706f, -0.009224f, -0.026090f, -0.006675f, -0.008922f, 0.001763f, 0.004195f, -0.004347f, -0.005335f, -0.048915f, - 0.000844f, 0.015791f, -0.011573f, -0.018286f, 0.013580f, -0.020706f, -0.003288f, -0.009251f, -0.011060f, -0.006756f, -0.007005f, 0.000752f, 0.008168f, -0.001517f, 0.004483f, -0.005298f, 0.006118f, -0.004815f, -0.007585f, 0.003259f, -0.002945f, -0.011728f, -0.015124f, 0.007132f, 0.000549f, 0.007038f, 0.001998f, 0.015772f, 0.002067f, 0.005451f, -0.007757f, -0.013184f, -0.003983f, -0.006564f, 0.012970f, -0.006171f, 0.000173f, 0.003373f, -0.006694f, 0.018332f, 0.012003f, 0.000217f, -0.014809f, -0.018619f, -0.006475f, 0.006131f, -0.016927f, -0.000472f, -0.008323f, -0.016001f, 0.001309f, -0.025026f, -0.005696f, -0.002716f, -0.009460f, 0.016729f, -0.001210f, -0.002707f, -0.000447f, 0.010453f, 0.013248f, 0.003968f, -0.013609f, -0.004414f, -0.003574f, 0.007168f, 0.003218f, 0.004084f, -0.007721f, -0.009697f, 0.007377f, 0.005069f, 0.001726f, 0.002463f, -0.000643f, 0.004235f, 0.001029f, 0.006419f, 0.001675f, 0.001435f, -0.000719f, -0.000272f, 0.000868f, 0.004107f, 0.005802f, 0.003583f, -0.001629f, 0.002297f, -0.007635f, 0.003776f, 0.004277f, -0.001336f, -0.000793f, 0.001285f, -0.001853f, -0.000556f, - -0.000581f, -0.002386f, -0.002582f, -0.001406f, -0.000879f, 0.001316f, 0.002798f, -0.000554f, -0.003611f, -0.000113f, -0.005031f, 0.001566f, 0.006506f, 0.002772f, 0.003774f, 0.002697f, 0.010251f, -0.027892f, -0.041458f, 0.005152f, -0.009610f, 0.009289f, -0.011744f, -0.020432f, 0.000321f, 0.018941f, 0.003663f, 0.011652f, 0.009047f, 0.007240f, 0.004393f, -0.006532f, 0.004856f, 0.012614f, -0.019829f, -0.009110f, -0.006729f, -0.004317f, 0.006996f, -0.001532f, 0.002277f, 0.013089f, 0.011129f, -0.004512f, -0.011273f, 0.002693f, -0.006401f, -0.004631f, -0.010934f, -0.007357f, -0.016547f, 0.004039f, -0.006310f, -0.000024f, 0.014322f, -0.002791f, 0.002586f, 0.003953f, -0.010611f, 0.008869f, 0.008456f, 0.012220f, -0.010811f, 0.019229f, -0.003305f, -0.013867f, -0.012003f, -0.015180f, 0.014062f, -0.005270f, -0.016437f, 0.005050f, -0.002689f, -0.011340f, 0.012009f, 0.016493f, -0.005841f, -0.013570f, 0.009970f, 0.003330f, 0.007777f, -0.001080f, 0.021854f, 0.013060f, -0.013040f, -0.006274f, -0.006249f, -0.004907f, 0.007178f, 0.010190f, 0.012898f, 0.000080f, 0.001554f, 0.005121f, -0.005368f, 0.004876f, - -0.001605f, 0.008550f, 0.011832f, -0.016190f, -0.007447f, -0.008115f, -0.005292f, -0.008294f, -0.000819f, -0.005853f, 0.002578f, -0.000272f, -0.000690f, -0.000644f, 0.002019f, -0.003959f, 0.010028f, -0.001226f, 0.004185f, 0.001581f, 0.001962f, -0.001948f, 0.000246f, 0.000316f, 0.000455f, -0.003403f, 0.000577f, -0.002204f, -0.003711f, -0.005343f, -0.001725f, -0.000295f, -0.001025f, 0.000225f, 0.000509f, -0.001070f, -0.000851f, -0.002001f, -0.001996f, 0.003215f, -0.000122f, 0.001088f, -0.002344f, -0.038719f, 0.000113f, -0.007143f, 0.002699f, -0.000203f, 0.014702f, 0.010547f, 0.015225f, -0.002574f, 0.020717f, -0.009686f, 0.014138f, 0.016999f, 0.003310f, 0.016945f, 0.003843f, 0.004318f, -0.004626f, -0.001860f, -0.007013f, 0.013416f, -0.000671f, -0.001651f, 0.019226f, 0.011404f, 0.000351f, 0.005029f, -0.001447f, -0.000744f, 0.012571f, -0.007188f, -0.012080f, -0.000112f, -0.001518f, 0.006196f, -0.034486f, 0.020755f, 0.022679f, 0.008784f, 0.004566f, 0.000504f, -0.010832f, -0.023212f, 0.015469f, -0.009406f, -0.010319f, -0.007127f, 0.013909f, -0.009739f, 0.008659f, 0.008505f, -0.008012f, -0.005519f, - -0.019766f, 0.009117f, -0.012785f, 0.007633f, 0.001494f, 0.006830f, 0.012347f, 0.019308f, 0.008524f, -0.009011f, -0.021107f, -0.003827f, 0.013259f, 0.021292f, 0.016249f, -0.003302f, -0.004021f, -0.013794f, -0.022610f, -0.002479f, 0.016014f, 0.006988f, 0.005204f, -0.005124f, 0.021185f, -0.000770f, 0.007275f, 0.001976f, -0.003835f, 0.001931f, -0.010478f, -0.005261f, -0.005189f, 0.003517f, -0.002465f, -0.007691f, -0.004286f, -0.005326f, -0.005487f, 0.002246f, -0.007902f, -0.003425f, 0.001797f, 0.001365f, 0.006522f, 0.000298f, 0.001127f, 0.001046f, -0.001470f, 0.005102f, -0.001380f, 0.005809f, 0.002351f, -0.001702f, -0.004243f, -0.000260f, 0.005878f, 0.003983f, -0.000463f, -0.005511f, -0.001199f, 0.004833f, 0.004601f, 0.000601f, -0.000740f, -0.000679f, -0.003071f, -0.002486f, 0.003870f, 0.014613f, 0.050579f, 0.027413f, -0.002267f, 0.004758f, 0.004669f, 0.011092f, 0.020126f, -0.002795f, 0.004125f, 0.033728f, 0.003662f, -0.001468f, 0.020568f, 0.014206f, -0.013815f, 0.008393f, 0.002274f, 0.013595f, 0.009581f, -0.023402f, 0.018076f, -0.010817f, -0.001296f, 0.002042f, 0.014212f, 0.002539f, - 0.004040f, 0.010658f, 0.012442f, -0.011575f, 0.012777f, 0.037312f, -0.006304f, 0.017012f, 0.017676f, -0.009217f, 0.013926f, 0.003666f, -0.008685f, -0.009650f, 0.006905f, -0.008618f, -0.022890f, -0.002940f, -0.000798f, 0.002444f, -0.029375f, -0.007182f, 0.009409f, -0.018704f, -0.012346f, -0.030846f, 0.010513f, 0.014288f, -0.020846f, -0.007474f, -0.009904f, 0.022442f, 0.000833f, -0.012735f, -0.008671f, -0.014189f, 0.007456f, 0.018794f, -0.013015f, 0.007286f, -0.005364f, 0.009098f, 0.021468f, 0.008963f, 0.016977f, 0.017026f, 0.021442f, 0.003305f, -0.011556f, -0.011763f, 0.008778f, 0.013468f, 0.002238f, 0.009072f, -0.009177f, 0.003861f, -0.000857f, -0.002874f, -0.009646f, 0.001437f, -0.004109f, 0.000642f, 0.008405f, 0.003499f, 0.003725f, 0.002811f, 0.009254f, -0.005476f, 0.000637f, -0.001425f, 0.002978f, -0.000977f, 0.000626f, 0.003895f, 0.001332f, -0.003076f, 0.005112f, -0.000972f, -0.006549f, 0.004355f, -0.004583f, -0.003856f, -0.004762f, -0.010238f, 0.005909f, -0.002284f, 0.005052f, -0.000463f, -0.000642f, 0.001468f, 0.008011f, 0.005257f, 0.007186f, 0.003280f, 0.000246f, 0.002901f, - 0.008236f, -0.003117f, 0.007466f, 0.052106f, 0.013675f, 0.002373f, -0.003177f, -0.007248f, 0.000139f, 0.009963f, -0.006476f, -0.011727f, -0.017925f, 0.001592f, 0.012491f, -0.015532f, 0.007587f, 0.010634f, -0.004626f, 0.035247f, 0.012198f, -0.008462f, -0.006150f, -0.002384f, 0.012397f, -0.004936f, -0.011844f, -0.012603f, 0.007875f, -0.027799f, 0.000821f, -0.007678f, -0.010411f, 0.009199f, 0.001819f, -0.010055f, -0.006511f, -0.009657f, 0.013827f, -0.004401f, -0.022363f, -0.002486f, 0.000351f, 0.001862f, -0.013036f, -0.017913f, 0.001555f, -0.003190f, -0.002615f, 0.006346f, -0.003994f, 0.017156f, 0.003352f, 0.010307f, -0.010985f, 0.024884f, 0.007025f, -0.012162f, 0.016204f, 0.031427f, -0.009116f, -0.007521f, 0.015867f, 0.014942f, 0.006017f, 0.009153f, -0.019425f, -0.004988f, -0.020989f, 0.006285f, 0.019424f, 0.008996f, -0.024580f, -0.004829f, 0.007620f, -0.024021f, -0.038018f, -0.003149f, 0.001126f, 0.010896f, 0.034297f, 0.002876f, -0.004034f, -0.010625f, -0.008258f, 0.005512f, 0.008613f, 0.007442f, -0.000641f, 0.003992f, 0.000226f, -0.007492f, 0.004606f, 0.006043f, -0.009794f, -0.009162f, - 0.010342f, -0.003403f, 0.006038f, 0.004754f, 0.002995f, -0.002545f, 0.002146f, -0.000180f, 0.003519f, 0.000956f, 0.005400f, 0.000217f, 0.004762f, 0.003461f, 0.000999f, -0.004416f, 0.010020f, 0.003270f, 0.009143f, -0.001894f, -0.003167f, 0.003408f, -0.006262f, -0.001018f, 0.004315f, -0.005785f, 0.001425f, 0.003378f, 0.001984f, 0.002213f, 0.004875f, -0.001935f, -0.009065f, -0.000116f, -0.001005f, -0.009551f, 0.001348f, -0.004016f, -0.001187f, 0.003815f, 0.003085f, 0.003458f, -0.040340f, 0.019022f, 0.053358f, -0.021890f, 0.037411f, -0.008388f, -0.008208f, -0.011659f, -0.019511f, 0.014465f, 0.000423f, 0.009897f, 0.009587f, -0.035050f, 0.000332f, 0.016400f, -0.014376f, -0.007478f, -0.022260f, 0.039192f, -0.024558f, 0.019358f, 0.018080f, -0.023262f, -0.009748f, -0.008096f, 0.016273f, -0.018608f, -0.007758f, 0.019007f, -0.003462f, -0.005051f, -0.009401f, 0.023170f, 0.003919f, -0.003720f, -0.009680f, 0.000635f, -0.017776f, 0.019100f, -0.002434f, 0.008796f, 0.047406f, 0.031953f, -0.027573f, -0.019365f, 0.007294f, -0.002455f, 0.019721f, -0.010927f, -0.016252f, -0.005695f, -0.030053f, -0.011512f, - -0.003742f, -0.022918f, -0.013307f, 0.050875f, 0.011930f, 0.000191f, -0.002707f, -0.000553f, 0.014758f, 0.017927f, -0.003996f, 0.017706f, 0.001202f, -0.009717f, 0.001693f, -0.027133f, -0.002270f, -0.025144f, -0.013809f, 0.015155f, 0.021968f, -0.033345f, 0.013294f, -0.008548f, -0.010826f, 0.016151f, -0.002612f, -0.015355f, -0.001124f, -0.006024f, -0.012278f, 0.006157f, 0.004208f, -0.008403f, -0.020952f, -0.009983f, -0.002330f, -0.001650f, 0.016103f, 0.004839f, 0.003836f, -0.008926f, -0.000102f, -0.003690f, 0.008518f, 0.009788f, -0.005495f, 0.004167f, 0.007151f, 0.008043f, 0.006091f, 0.009147f, -0.003885f, 0.000608f, -0.006561f, 0.000468f, -0.007602f, -0.003952f, 0.002560f, -0.002076f, -0.006184f, -0.001450f, 0.002900f, -0.009862f, -0.005080f, -0.005376f, -0.003194f, -0.003805f, -0.004708f, -0.000622f, 0.005282f, 0.000353f, -0.000689f, 0.006283f, -0.042888f, 0.007515f, 0.039322f, -0.010200f, -0.010332f, 0.008744f, -0.012519f, -0.009826f, 0.010924f, -0.001304f, -0.002465f, -0.000304f, -0.027087f, 0.045735f, -0.048674f, -0.004494f, -0.001352f, 0.016760f, 0.009742f, 0.000757f, -0.018630f, -0.013059f, - 0.005551f, 0.035740f, -0.003137f, -0.015534f, -0.010972f, -0.025101f, -0.001966f, -0.014683f, -0.012047f, -0.005054f, 0.007673f, -0.000698f, 0.000939f, -0.016959f, 0.003193f, 0.004995f, 0.010688f, 0.009236f, 0.010763f, -0.023073f, -0.000140f, -0.004602f, 0.015010f, 0.003998f, 0.030707f, 0.006823f, -0.007411f, 0.002867f, -0.017079f, 0.000003f, 0.013275f, 0.017575f, -0.026811f, -0.020480f, -0.002173f, 0.027851f, -0.043610f, 0.011520f, 0.049837f, 0.027661f, -0.013620f, 0.004760f, -0.027140f, 0.011484f, 0.024512f, -0.042208f, 0.009250f, -0.020497f, -0.006044f, -0.057269f, 0.000083f, -0.024050f, 0.022170f, 0.001679f, -0.026879f, 0.017871f, -0.001909f, -0.034267f, -0.004791f, -0.021618f, 0.013997f, -0.011981f, -0.018168f, 0.024613f, -0.004921f, 0.004484f, -0.008344f, -0.010462f, -0.003090f, 0.010607f, 0.007632f, -0.005725f, -0.001670f, 0.000597f, -0.006243f, 0.003960f, 0.005760f, 0.008811f, -0.008930f, 0.003613f, 0.004457f, -0.010221f, 0.000474f, 0.004735f, -0.007625f, 0.000888f, -0.004998f, 0.011667f, 0.005983f, 0.014163f, -0.006801f, -0.005047f, 0.004512f, -0.013147f, -0.001588f, -0.003645f, - -0.002262f, -0.000511f, 0.002663f, -0.007291f, 0.000317f, -0.000808f, 0.002454f, 0.002764f, 0.000312f, -0.007350f, -0.004486f, -0.011604f, -0.032339f, 0.051173f, 0.015053f, 0.026774f, -0.030132f, -0.033997f, -0.006023f, 0.008970f, -0.009196f, -0.004577f, 0.017456f, 0.004689f, 0.005625f, 0.015157f, -0.037387f, -0.004147f, 0.000804f, 0.009560f, -0.025901f, 0.003429f, 0.004774f, -0.018248f, -0.009748f, -0.025130f, -0.018563f, -0.000141f, 0.008395f, -0.020333f, 0.001850f, -0.009216f, -0.017743f, 0.007024f, 0.000285f, 0.014436f, -0.039611f, -0.041701f, 0.008977f, -0.003578f, 0.015978f, 0.034983f, 0.004202f, -0.022003f, 0.031554f, -0.015579f, -0.029104f, -0.022627f, -0.009401f, 0.002516f, -0.030925f, -0.012044f, 0.030911f, 0.041628f, 0.017797f, 0.011669f, 0.008911f, -0.004792f, 0.026739f, 0.015008f, -0.030742f, -0.016868f, 0.000378f, 0.003115f, 0.029245f, 0.018690f, 0.004856f, -0.004440f, -0.003397f, -0.014223f, 0.019479f, 0.015160f, 0.033725f, 0.007701f, 0.009962f, 0.004114f, 0.060406f, 0.006868f, 0.023518f, -0.024879f, 0.002336f, 0.022936f, -0.054381f, 0.004520f, 0.007404f, 0.015421f, - -0.005474f, 0.008225f, -0.006945f, -0.001798f, 0.009550f, -0.004477f, 0.029111f, -0.011559f, 0.017097f, -0.004411f, -0.010078f, -0.005447f, -0.010915f, 0.000372f, 0.004718f, 0.005734f, -0.002120f, -0.005532f, 0.012250f, -0.003560f, 0.008262f, -0.004238f, -0.004429f, -0.008745f, 0.009252f, 0.009950f, 0.002296f, 0.001002f, -0.007214f, -0.012723f, 0.006141f, -0.001061f, 0.000578f, 0.015240f, -0.004113f, 0.013358f, -0.001893f, 0.007828f, 0.005430f, 0.010300f, 0.002470f, -0.009431f, -0.001645f, 0.034806f, 0.001997f, 0.043176f, -0.001846f, -0.019648f, -0.022012f, -0.040296f, 0.006993f, -0.016967f, -0.001554f, 0.003511f, 0.014084f, 0.021207f, 0.035309f, 0.037093f, -0.006177f, 0.033022f, -0.002902f, -0.002836f, 0.012024f, 0.027827f, 0.011649f, 0.007805f, -0.044695f, -0.022691f, -0.036431f, 0.018253f, 0.035586f, 0.007019f, -0.016023f, 0.025182f, 0.035696f, -0.004875f, 0.005159f, -0.008448f, 0.029939f, 0.025700f, 0.021346f, -0.012890f, -0.023379f, -0.003637f, -0.006404f, -0.051012f, 0.008448f, 0.006989f, 0.004094f, -0.012966f, -0.007226f, -0.056893f, -0.020590f, -0.051639f, -0.009494f, -0.038672f, - -0.020500f, 0.037307f, 0.009446f, 0.039303f, 0.002162f, -0.032173f, -0.016101f, -0.033479f, -0.064411f, 0.009036f, -0.039972f, -0.011530f, 0.037295f, 0.015749f, 0.014415f, 0.003116f, -0.007591f, -0.002756f, 0.007012f, -0.027537f, 0.021690f, -0.046981f, -0.048829f, -0.002685f, -0.004510f, -0.006048f, -0.035958f, -0.008089f, 0.046718f, -0.002567f, 0.002603f, -0.012548f, -0.041022f, 0.020706f, -0.027673f, -0.010763f, -0.027545f, -0.016873f, -0.013011f, -0.008708f, -0.010084f, -0.006069f, 0.000403f, 0.004835f, -0.025769f, -0.011003f, 0.004709f, 0.004573f, 0.014076f, 0.006683f, -0.008697f, -0.010767f, 0.009135f, -0.017266f, -0.002802f, 0.005342f, -0.013406f, 0.004192f, 0.003850f, 0.009618f, -0.009205f, -0.003148f, -0.004984f, -0.000702f, 0.006239f, -0.003783f, -0.000716f, -0.005076f, 0.010021f, 0.014046f, -0.004769f, -0.002265f, 0.003661f, 0.004717f, 0.008702f, 0.012447f, 0.002167f, -0.002119f, -0.003114f, -0.002954f, 0.020217f, 0.040583f, 0.035414f, 0.038053f, -0.021914f, -0.038278f, 0.029445f, -0.017427f, 0.030431f, 0.009079f, -0.048766f, 0.012256f, 0.009137f, -0.055009f, 0.029592f, -0.025078f, - -0.025542f, 0.014981f, 0.016767f, 0.002614f, 0.019895f, 0.001491f, 0.001033f, -0.012905f, -0.007404f, 0.012062f, -0.007594f, -0.018861f, 0.001307f, -0.035433f, 0.012845f, -0.045041f, -0.027337f, 0.001673f, 0.017914f, -0.006149f, -0.018578f, 0.006985f, 0.014140f, 0.010488f, 0.000873f, 0.036273f, -0.083329f, -0.018934f, -0.022787f, -0.027695f, 0.036221f, -0.029167f, -0.003939f, -0.067256f, -0.018764f, -0.007992f, 0.003558f, 0.044843f, -0.010768f, 0.005668f, -0.027028f, 0.022741f, -0.033641f, -0.021830f, 0.017568f, -0.078094f, 0.011423f, 0.041730f, 0.054270f, 0.041399f, 0.026277f, 0.060954f, 0.033730f, -0.000739f, -0.015018f, -0.015662f, -0.023517f, -0.052578f, -0.005635f, 0.004901f, -0.074278f, -0.029430f, -0.022409f, -0.016794f, 0.023868f, 0.062268f, 0.072833f, 0.048179f, -0.024345f, 0.019867f, -0.015667f, -0.003428f, 0.016552f, 0.011182f, -0.006268f, 0.003919f, 0.005503f, -0.001467f, 0.002588f, -0.011460f, 0.006632f, 0.020411f, -0.009526f, 0.002708f, -0.017933f, 0.004410f, -0.008354f, -0.001249f, -0.000798f, 0.015757f, 0.028067f, -0.010060f, 0.001846f, 0.006781f, 0.011488f, -0.016955f, - -0.026095f, 0.000466f, 0.020489f, 0.005894f, -0.016607f, 0.015614f, 0.008336f, -0.017015f, 0.012003f, 0.007563f, -0.006427f, -0.005252f, -0.001705f, -0.003216f, 0.003185f, 0.006311f, -0.005844f, 0.011379f, -0.071693f, 0.000222f, 0.011847f, 0.050335f, -0.016427f, 0.023352f, 0.021038f, 0.011270f, 0.011465f, -0.078123f, 0.061695f, 0.033816f, 0.076465f, 0.028268f, -0.003357f, -0.028262f, -0.018081f, -0.017628f, -0.027739f, 0.019967f, 0.014532f, -0.027959f, -0.032013f, 0.017111f, 0.022951f, 0.040166f, 0.011198f, -0.024626f, -0.037078f, 0.008065f, 0.006286f, 0.002773f, 0.004458f, 0.071193f, 0.024032f, 0.013787f, 0.023382f, 0.025905f, 0.028908f, 0.000896f, -0.045019f, 0.031933f, 0.099018f, -0.009879f, -0.027567f, -0.060013f, -0.012942f, 0.080078f, 0.009345f, 0.033285f, 0.011076f, -0.110125f, 0.022787f, 0.020069f, 0.002338f, 0.011604f, -0.007702f, 0.001956f, 0.022544f, -0.059155f, -0.024638f, 0.050696f, 0.018738f, 0.007187f, -0.044710f, 0.032250f, 0.011895f, -0.040038f, -0.043730f, -0.029090f, 0.040115f, 0.083633f, 0.077604f, 0.085735f, 0.086702f, 0.003760f, -0.038541f, -0.031431f, - -0.075711f, -0.024524f, 0.024020f, -0.061158f, -0.000480f, -0.049768f, 0.000754f, 0.067685f, 0.026333f, 0.028094f, 0.033532f, 0.021233f, -0.020446f, -0.006463f, -0.025231f, 0.036983f, -0.022039f, -0.019162f, 0.006718f, -0.003861f, -0.013058f, -0.023817f, -0.006918f, 0.025345f, 0.023623f, -0.010559f, 0.036467f, -0.001269f, 0.001059f, -0.016046f, 0.005504f, 0.019203f, -0.004598f, -0.013837f, -0.013717f, 0.009818f, -0.007521f, 0.020959f, 0.013090f, 0.017068f, 0.024377f, -0.024214f, 0.006455f, 0.002635f, 0.011273f, -0.004634f, -0.010401f, 0.022294f, 0.005398f, 0.018299f, -0.009415f, 0.007021f, -0.014351f, -0.004258f, -0.022145f, 0.035455f, 0.072223f, -0.146364f, -0.051625f, 0.011430f, -0.085498f, -0.078421f, -0.033924f, -0.047623f, 0.005456f, -0.035068f, 0.092798f, -0.009868f, -0.032831f, -0.013320f, -0.070957f, -0.019678f, -0.057242f, -0.023860f, 0.010091f, -0.073901f, -0.012301f, 0.057238f, -0.047846f, -0.013801f, 0.016611f, -0.000284f, 0.024001f, 0.005011f, 0.000205f, 0.021349f, 0.008048f, -0.036720f, -0.006748f, 0.032686f, -0.016387f, -0.045737f, -0.014884f, -0.055464f, -0.027161f, -0.097158f, - 0.009639f, -0.066185f, 0.032129f, 0.011820f, -0.024093f, -0.085705f, 0.008123f, -0.009133f, 0.105803f, 0.041969f, 0.002151f, 0.057308f, 0.025054f, 0.000529f, 0.046809f, -0.054974f, -0.025931f, 0.004107f, 0.041427f, -0.045537f, -0.027445f, 0.153081f, -0.014442f, 0.079291f, -0.061634f, -0.000151f, -0.043980f, 0.033277f, -0.015496f, 0.051912f, 0.081693f, 0.002165f, -0.057682f, 0.049528f, -0.061466f, -0.027954f, 0.020778f, -0.063878f, -0.042670f, -0.020369f, 0.046424f, 0.088565f, -0.105375f, 0.088790f, 0.017777f, 0.025959f, 0.009810f, 0.012465f, 0.009463f, -0.013113f, 0.016050f, 0.045995f, -0.023258f, 0.008074f, -0.004519f, 0.006009f, -0.049921f, -0.008963f, -0.015301f, 0.015055f, 0.015391f, 0.049139f, -0.030706f, -0.017790f, -0.023943f, 0.034098f, -0.043589f, 0.010491f, 0.016023f, 0.014794f, 0.016157f, -0.071737f, -0.017135f, 0.025879f, -0.012404f, -0.030653f, -0.004088f, 0.008475f, 0.001750f, 0.030418f, 0.015325f, 0.024150f, -0.024253f, -0.021534f, 0.024389f, 0.007216f, 0.016360f, -0.016141f, 0.016456f, 0.011327f, 0.003023f, 0.006200f, -0.006903f, -0.007429f, 0.000203f, -0.035444f, - -0.034522f, -0.055146f, 0.114124f, -0.065505f, 0.041905f, 0.037602f, -0.059544f, 0.032738f, 0.017873f, 0.012987f, -0.010638f, 0.045289f, 0.023271f, -0.057281f, 0.040686f, 0.047566f, 0.009176f, 0.008203f, 0.028638f, -0.000578f, -0.057141f, 0.074413f, -0.042404f, 0.016983f, -0.031535f, -0.007077f, 0.009325f, -0.013706f, 0.060492f, 0.013805f, -0.007994f, -0.014332f, -0.003159f, 0.012076f, -0.061560f, 0.019752f, -0.031904f, -0.021329f, -0.014758f, 0.000106f, -0.030187f, -0.014113f, 0.007367f, 0.064190f, 0.000719f, -0.013125f, -0.040692f, 0.017305f, 0.011289f, 0.002193f, 0.049657f, -0.011756f, -0.005115f, 0.059340f, 0.018622f, 0.003771f, -0.056880f, -0.029456f, 0.036825f, 0.020911f, -0.053266f, 0.002071f, -0.121144f, -0.059665f, 0.108781f, -0.025074f, 0.058894f, 0.077424f, 0.022022f, 0.013525f, 0.034983f, -0.014439f, -0.042446f, 0.023314f, 0.007303f, -0.002305f, 0.049184f, 0.032364f, -0.035083f, -0.084145f, -0.017364f, 0.034997f, 0.011155f, -0.001525f, 0.027614f, -0.031434f, 0.047662f, -0.022702f, 0.017959f, 0.022747f, 0.009912f, 0.033185f, 0.024927f, 0.040124f, 0.004700f, -0.009614f, - 0.014522f, 0.038970f, -0.009806f, 0.034234f, 0.020351f, -0.020953f, 0.007011f, 0.018593f, 0.012253f, 0.008157f, 0.024318f, 0.020984f, 0.009090f, 0.041057f, -0.012459f, 0.005558f, -0.005512f, -0.001586f, -0.009925f, 0.036694f, 0.029761f, 0.024763f, -0.010850f, 0.005702f, 0.042296f, -0.009691f, 0.031089f, 0.028970f, 0.000371f, 0.049568f, -0.043260f, 0.007638f, 0.066368f, 0.010058f, 0.019016f, -0.012045f, 0.046793f, 0.010784f, 0.017937f, 0.064899f, -0.020058f, -0.108345f, 0.018400f, -0.013024f, 0.037312f, 0.011459f, -0.036766f, 0.019094f, 0.022365f, -0.041848f, -0.046002f, -0.030745f, -0.076804f, -0.077255f, 0.053209f, -0.012274f, -0.079413f, -0.024306f, 0.008167f, 0.026337f, 0.025193f, -0.048608f, -0.052719f, 0.005240f, 0.073460f, -0.035059f, 0.028388f, -0.049341f, 0.017615f, -0.055670f, 0.036356f, 0.038363f, -0.027251f, -0.057293f, -0.039383f, -0.006334f, 0.022591f, -0.024557f, -0.016139f, -0.020435f, -0.072867f, -0.062994f, 0.033164f, -0.052876f, -0.010717f, 0.018930f, -0.043602f, -0.070538f, 0.027084f, 0.037116f, -0.004596f, -0.084932f, 0.038169f, 0.033426f, 0.107653f, 0.000566f, - 0.028393f, 0.021113f, -0.045730f, 0.017652f, -0.014072f, -0.092839f, -0.014017f, 0.056857f, 0.013745f, -0.046939f, -0.116340f, 0.073688f, 0.094367f, -0.027928f, 0.076397f, 0.088645f, 0.004863f, 0.004052f, 0.070334f, -0.045320f, 0.003854f, 0.117307f, -0.086102f, 0.050307f, -0.073681f, -0.020318f, -0.005620f, 0.050513f, -0.016710f, 0.007339f, 0.028793f, -0.000893f, -0.065065f, 0.072203f, -0.012584f, -0.008495f, 0.011654f, 0.030125f, -0.048693f, 0.021538f, 0.013308f, -0.007489f, 0.015683f, 0.017493f, -0.044975f, -0.006269f, 0.011393f, 0.023906f, 0.050653f, -0.004323f, -0.042937f, 0.022117f, 0.052055f, -0.040884f, 0.050842f, -0.023828f, -0.004350f, -0.017758f, 0.057317f, -0.039159f, 0.014414f, 0.034927f, -0.023219f, 0.008550f, 0.007381f, -0.032773f, 0.008333f, 0.013653f, -0.004877f, -0.025034f, 0.017386f, 0.020022f, -0.010032f, 0.040196f, -0.059644f, 0.014550f, 0.019417f, 0.000272f, 0.005335f, 0.007739f, 0.042462f, -0.009890f, 0.023998f, -0.049260f, -0.154113f, 0.041315f, -0.017463f, 0.114931f, -0.039346f, -0.025839f, -0.046004f, -0.132692f, 0.060781f, -0.077544f, -0.044748f, 0.001840f, - 0.000115f, 0.101449f, -0.072701f, -0.051613f, 0.067397f, 0.039435f, 0.035238f, -0.013217f, 0.033663f, -0.024208f, -0.033439f, -0.031538f, 0.078936f, 0.064924f, 0.102556f, -0.033169f, -0.038176f, 0.001215f, -0.006628f, 0.036990f, -0.061529f, 0.012604f, -0.064692f, 0.033994f, 0.063648f, 0.021185f, -0.052264f, 0.035027f, -0.046080f, 0.103253f, 0.052960f, 0.014042f, 0.014037f, -0.016731f, -0.081462f, 0.045364f, -0.110527f, 0.022391f, 0.020590f, 0.053298f, 0.042861f, -0.096214f, 0.028783f, -0.060888f, -0.035733f, 0.025258f, -0.009519f, 0.034878f, 0.022778f, -0.088078f, 0.035629f, 0.079425f, 0.105973f, -0.031563f, 0.031257f, -0.044105f, 0.074332f, -0.106545f, -0.005683f, -0.020089f, 0.033275f, 0.068719f, 0.099766f, -0.080813f, 0.019780f, -0.107863f, 0.068631f, 0.140092f, -0.035973f, -0.096955f, -0.007910f, -0.073353f, 0.092366f, 0.022584f, -0.047478f, -0.014292f, 0.005148f, -0.016763f, 0.065860f, 0.023950f, -0.037622f, 0.034618f, -0.053178f, 0.002474f, 0.049320f, -0.011343f, -0.061284f, 0.066592f, -0.097612f, 0.027186f, -0.015037f, 0.037860f, -0.002821f, 0.023117f, -0.022817f, -0.013055f, - 0.009488f, 0.007479f, 0.009893f, 0.045063f, -0.047648f, -0.040746f, 0.001731f, 0.009543f, -0.011395f, -0.050348f, -0.036518f, 0.070967f, 0.018909f, -0.033198f, -0.037518f, -0.083459f, 0.097950f, 0.075958f, -0.030638f, -0.027597f, -0.058093f, 0.000976f, 0.072972f, 0.012913f, -0.031589f, -0.012305f, -0.017051f, 0.010671f, 0.007223f, 0.002750f, -0.009652f, -0.004782f, 0.013175f, -0.002107f, -0.008152f, -0.006271f, 0.008538f, 0.002639f, 0.017621f, -0.008726f, -0.122982f, 0.088276f, -0.012829f, -0.001817f, 0.027245f, 0.025742f, 0.032744f, 0.011095f, 0.015229f, -0.041177f, 0.039001f, 0.012605f, -0.045060f, 0.030890f, -0.018823f, 0.000795f, 0.038098f, 0.024416f, -0.063475f, 0.036302f, -0.030821f, 0.053109f, -0.039084f, 0.014541f, -0.020695f, 0.025503f, -0.019794f, 0.012518f, -0.028752f, 0.060860f, -0.006728f, 0.003087f, 0.016207f, 0.021376f, -0.031547f, -0.004804f, 0.012121f, 0.021273f, 0.016637f, -0.019422f, 0.006083f, 0.002329f, -0.061785f, -0.003559f, 0.014216f, 0.023658f, 0.008228f, 0.015688f, -0.055726f, 0.010104f, -0.004584f, 0.006936f, 0.011069f, -0.009288f, 0.010389f, 0.010518f, - 0.003698f, -0.011666f, -0.013687f, -0.002725f, 0.061432f, -0.020633f, 0.011085f, 0.024831f, -0.014587f, 0.023703f, -0.026695f, 0.022900f, 0.009692f, -0.015440f, -0.026857f, 0.017466f, -0.017062f, 0.014022f, -0.024311f, -0.018249f, -0.010507f, 0.030381f, -0.008924f, 0.004282f, 0.004294f, -0.000583f, 0.005387f, -0.021366f, 0.015806f, -0.013243f, 0.036508f, -0.033850f, 0.014993f, -0.019571f, 0.017364f, -0.015695f, 0.013564f, 0.001976f, 0.024116f, -0.020694f, 0.010402f, -0.009817f, -0.000326f, 0.006125f, 0.013518f, -0.014393f, 0.002077f, -0.015647f, 0.022710f, -0.018851f, -0.007413f, 0.013979f, 0.003310f, -0.008351f, -0.004726f, 0.015602f, 0.007441f, -0.032074f, 0.017057f, 0.003347f, -0.001621f, -0.001870f, 0.004982f, -0.002506f, 0.001740f, -0.000892f, 0.002496f, 0.002865f, 0.006901f, -0.007792f, 0.022192f, -0.028883f, 0.007917f, -0.003747f, 0.004716f, -0.003973f, 0.006904f, -0.002484f, -0.005572f, -0.001047f, 0.002558f, -0.006404f, 0.096551f, -0.006951f, -0.031274f, -0.047667f, -0.021679f, -0.026752f, 0.035031f, 0.020274f, -0.025469f, 0.002138f, 0.003004f, 0.011460f, 0.001575f, 0.024275f, - 0.008378f, 0.019125f, -0.006546f, -0.000667f, -0.005726f, 0.008979f, 0.020720f, -0.019205f, -0.000112f, -0.009491f, 0.000688f, 0.025278f, -0.014310f, 0.002492f, -0.006458f, 0.009981f, 0.005153f, -0.013818f, -0.005117f, 0.014900f, -0.004546f, 0.024273f, 0.017260f, -0.025245f, 0.008130f, 0.005407f, 0.013293f, 0.005656f, -0.023873f, 0.016227f, -0.004446f, 0.015785f, 0.012618f, -0.028478f, 0.007861f, 0.000141f, 0.006459f, -0.003125f, -0.012496f, 0.020405f, -0.004962f, 0.009298f, 0.000527f, -0.006043f, 0.009460f, -0.012077f, -0.001661f, 0.017038f, -0.011611f, -0.013914f, 0.028330f, -0.018184f, 0.026434f, -0.002669f, -0.021318f, 0.043811f, -0.040095f, 0.034993f, -0.012320f, -0.020835f, 0.022174f, -0.020465f, 0.006155f, 0.007218f, -0.020052f, 0.017037f, -0.003556f, -0.001198f, 0.010887f, -0.013887f, 0.018375f, -0.005827f, -0.001335f, 0.004619f, -0.003048f, 0.006541f, -0.002988f, 0.001149f, 0.005419f, -0.005038f, 0.008619f, -0.000879f, -0.004779f, 0.010623f, -0.016195f, 0.008777f, -0.007153f, -0.003215f, 0.010242f, 0.000981f, -0.002968f, 0.005404f, -0.003771f, 0.005370f, 0.002764f, -0.007403f, - 0.005153f, 0.001172f, -0.001613f, -0.001137f, 0.004669f, 0.001136f, 0.008536f, -0.006489f, 0.002506f, 0.001245f, -0.004654f, 0.009510f, -0.002594f, -0.001312f, -0.047122f, -0.081326f, 0.102538f, 0.293023f, 0.046526f, 0.028233f, -0.214187f, -0.265198f, -0.084763f, -0.052282f, 0.179418f, 0.273242f, 0.140851f, 0.040587f, -0.091882f, -0.198013f, -0.180304f, -0.151328f, 0.012099f, 0.226335f, 0.189584f, 0.108461f, 0.037019f, -0.097119f, -0.125606f, -0.100042f, -0.096398f, -0.034219f, 0.045897f, 0.062733f, 0.130236f, 0.092981f, 0.022717f, -0.031725f, -0.018452f, -0.104910f, -0.050775f, -0.053101f, -0.071589f, 0.042515f, 0.080569f, 0.046362f, 0.117241f, 0.030946f, -0.027708f, -0.045164f, -0.077768f, -0.061710f, -0.009531f, -0.019194f, 0.024021f, 0.048310f, 0.043292f, 0.030700f, 0.021125f, -0.010811f, -0.042651f, -0.030389f, -0.035454f, 0.011301f, 0.041589f, 0.013535f, 0.010299f, -0.018155f, -0.037085f, -0.007103f, 0.000019f, -0.000685f, 0.030232f, 0.026841f, 0.030303f, 0.011781f, -0.010297f, -0.032506f, -0.046784f, -0.048126f, -0.031106f, 0.033127f, 0.049345f, 0.060946f, 0.042347f, -0.010763f, - -0.023779f, -0.025482f, -0.050154f, -0.022333f, 0.018449f, 0.009528f, 0.009211f, 0.014523f, 0.007145f, 0.005488f, -0.007680f, -0.010217f, 0.008039f, 0.017327f, -0.000261f, -0.001640f, -0.011915f, -0.016664f, -0.008490f, -0.010173f, -0.005797f, 0.012815f, -0.002176f, 0.026946f, 0.033529f, 0.019200f, -0.011469f, -0.019109f, -0.021174f, -0.027010f, -0.019549f, -0.026730f, 0.014346f, 0.036550f, 0.033558f, 0.019688f, 0.021001f, 0.007795f, -0.020441f, -0.040296f, -0.041004f, -0.020998f, -0.004134f, 0.012899f, 0.029410f, 0.042917f, 0.035411f, 0.006545f, -0.022610f, -0.037963f, -0.027636f, -0.009309f, 0.000387f, 0.010261f, 0.006716f, 0.016136f, 0.020883f, 0.006060f, -0.008865f, -0.012353f, -0.006770f, -0.005210f, -0.004869f, -0.001509f, 0.001596f, 0.009558f, 0.005944f, 0.000578f, -0.000013f, -0.000696f, -0.001803f, -0.004511f, -0.005096f, 0.001651f, 0.004175f, 0.003005f, -0.000597f, -0.000200f, -0.000484f, -0.001450f, -0.001671f, 0.000885f, 0.000816f, 0.001355f, 0.000434f, 0.000663f, -0.000866f, -0.001098f, -0.001964f, -0.001196f, 0.000459f, 0.002399f, 0.000524f, 0.000965f, 0.000888f, 0.000245f, - -0.001230f, 0.000034f, -0.001264f, -0.003466f, -0.002313f, 0.002285f, 0.002697f, 0.002803f, 0.001418f, 0.000071f, -0.001845f, -0.000753f, -0.001186f, -0.000624f, -0.001124f, 0.000488f, 0.000088f, 0.000409f, 0.000176f, 0.001377f, 0.000678f, 0.001324f, 0.000109f, -0.000157f, -0.001257f, -0.000988f, -0.001963f, -0.000887f, -0.000457f, 0.001530f, 0.001305f, 0.002338f, 0.001127f, 0.000381f, -0.001815f, -0.001547f, -0.001721f, -0.000452f, -0.000506f, 0.001346f, 0.000977f, 0.001087f, -0.000128f, 0.000181f, -0.000648f, 0.000102f, -0.000526f, 0.000231f, -0.000476f, 0.000301f, -0.000307f, 0.000406f, -0.000371f, 0.000328f, -0.000273f, 0.000509f, -0.000267f, 0.000360f, -0.000348f, 0.000312f, -0.000413f, 0.000339f} - }, - { - {-0.005310f, 0.020334f, 0.002407f, 0.005499f, 0.001980f, 0.002893f, -0.004877f, -0.012321f, -0.002343f, 0.006498f, 0.002356f, -0.006101f, -0.000821f, 0.004970f, -0.001248f, -0.007342f, 0.002250f, -0.008460f, -0.005203f, -0.000265f, 0.002366f, -0.002406f, -0.001870f, 0.005242f, -0.007252f, -0.000174f, 0.000968f, 0.003529f, 0.002840f, 0.002687f, 0.008955f, 0.004027f, -0.011033f, -0.002821f, -0.004991f, 0.001407f, -0.000242f, -0.000832f, -0.006929f, -0.009085f, 0.012090f, -0.005552f, 0.002992f, 0.003514f, 0.003067f, -0.011420f, -0.006448f, -0.002984f, 0.001310f, -0.000885f, -0.000307f, -0.001038f, 0.001978f, 0.004371f, -0.005924f, -0.000001f, 0.003257f, 0.003743f, 0.004505f, 0.001654f, 0.000138f, 0.004325f, 0.001586f, -0.001854f, -0.000492f, 0.007013f, -0.005134f, -0.005476f, -0.002905f, -0.002186f, 0.006037f, 0.003551f, 0.001485f, -0.002213f, 0.005822f, -0.002549f, 0.003048f, -0.006790f, -0.000585f, 0.000545f, 0.001481f, 0.001434f, -0.005432f, 0.001510f, 0.003958f, 0.001981f, 0.000727f, -0.000471f, 0.005161f, 0.002451f, -0.000443f, 0.003290f, 0.002011f, 0.000876f, -0.000674f, 0.001124f, - 0.000951f, 0.000741f, -0.000896f, 0.001274f, 0.000426f, -0.000989f, -0.000737f, 0.001801f, 0.000467f, -0.000133f, 0.000101f, 0.000111f, 0.000377f, -0.001602f, 0.001260f, -0.000416f, 0.001008f, -0.001246f, -0.011505f, -0.007043f, 0.005003f, -0.011399f, -0.015943f, 0.003040f, 0.001446f, 0.001901f, 0.002410f, 0.002179f, -0.013698f, -0.002325f, 0.004065f, -0.008807f, 0.009239f, 0.008840f, 0.007718f, -0.003173f, 0.000768f, 0.001992f, 0.005925f, 0.001257f, -0.000136f, 0.001073f, -0.003921f, 0.003617f, -0.001377f, -0.001533f, -0.001812f, 0.011229f, -0.006688f, 0.003832f, -0.004201f, -0.003752f, -0.003767f, 0.002917f, 0.006244f, -0.006687f, -0.003235f, -0.003663f, 0.004584f, 0.004176f, 0.006934f, 0.004587f, 0.000973f, 0.005939f, -0.005080f, 0.003534f, 0.001430f, 0.001484f, 0.012675f, 0.002895f, 0.006292f, -0.010452f, -0.002748f, 0.004181f, -0.005135f, 0.004823f, -0.002193f, -0.003906f, 0.001397f, 0.007481f, 0.005154f, 0.003399f, -0.001809f, 0.001455f, 0.005689f, -0.006928f, 0.009055f, -0.001326f, 0.007427f, -0.003099f, 0.006134f, 0.007176f, 0.006166f, -0.003522f, -0.009051f, -0.013517f, - -0.009026f, 0.000774f, -0.004719f, 0.008760f, 0.001505f, 0.001285f, 0.002405f, -0.006430f, -0.001926f, -0.002950f, 0.003214f, -0.001818f, -0.001187f, 0.003797f, -0.004739f, -0.001792f, 0.001916f, -0.002755f, 0.000247f, -0.003064f, -0.002335f, -0.001982f, -0.000506f, 0.001738f, 0.000529f, 0.000219f, -0.003225f, 0.019527f, 0.013901f, 0.011525f, 0.009453f, 0.010813f, 0.004457f, -0.000778f, -0.000319f, -0.003921f, -0.001273f, 0.014199f, -0.006253f, -0.006293f, 0.009666f, 0.007302f, 0.009288f, -0.006494f, 0.002749f, -0.002419f, 0.002027f, 0.004235f, 0.005761f, 0.000913f, -0.004368f, -0.003121f, -0.005595f, -0.001912f, -0.003496f, -0.009973f, -0.001315f, 0.008490f, -0.006671f, -0.001095f, 0.003019f, -0.005119f, -0.004782f, 0.004819f, -0.002684f, -0.006652f, -0.003695f, 0.003857f, -0.005829f, -0.007326f, -0.003469f, -0.002149f, 0.002375f, -0.005102f, -0.010762f, 0.000791f, -0.001868f, -0.001457f, 0.002971f, -0.008709f, -0.004372f, 0.000192f, -0.003764f, 0.004849f, -0.001340f, 0.002109f, -0.015805f, -0.004729f, 0.008770f, -0.003472f, -0.008753f, 0.002601f, 0.001420f, 0.002459f, -0.003329f, -0.012423f, - -0.005763f, 0.014026f, 0.000840f, 0.005183f, 0.002849f, -0.001993f, 0.004155f, 0.005854f, 0.002339f, -0.002882f, -0.006816f, 0.000002f, 0.001555f, -0.005061f, 0.002181f, -0.006566f, -0.000790f, -0.004184f, -0.002168f, -0.005545f, -0.001174f, -0.003167f, -0.004148f, -0.003106f, 0.000497f, -0.001381f, 0.000598f, -0.001517f, 0.000435f, -0.002802f, 0.001885f, 0.001074f, -0.000889f, -0.000519f, 0.002486f, -0.000068f, -0.001058f, -0.002499f, -0.001400f, -0.001141f, -0.000310f, 0.000225f, -0.000060f, -0.002886f, 0.027487f, 0.017047f, 0.015943f, 0.000396f, 0.001516f, 0.001393f, -0.006654f, -0.014492f, -0.005596f, 0.011139f, -0.008411f, 0.005106f, 0.014832f, 0.001317f, -0.004794f, -0.001750f, -0.003087f, -0.001465f, 0.005963f, 0.008686f, 0.000245f, 0.002642f, 0.003439f, 0.005703f, 0.000280f, -0.007730f, 0.002365f, -0.012528f, -0.003861f, -0.001484f, -0.003566f, -0.002183f, 0.001528f, -0.002912f, -0.006681f, -0.005059f, -0.002432f, 0.000659f, -0.002889f, -0.007556f, 0.009077f, -0.003311f, 0.000629f, -0.002261f, -0.006009f, 0.007591f, 0.020800f, 0.005122f, -0.007273f, 0.012415f, 0.002793f, -0.003704f, - 0.003730f, -0.002044f, -0.008044f, 0.000121f, -0.003383f, 0.003193f, -0.006969f, -0.011954f, 0.000458f, 0.002079f, -0.014612f, 0.004439f, 0.003006f, 0.008233f, 0.004620f, 0.010855f, -0.003663f, -0.007200f, -0.004283f, -0.002189f, 0.005241f, -0.001846f, -0.009392f, 0.006474f, -0.004583f, -0.008463f, 0.005823f, -0.008454f, -0.004673f, 0.002771f, -0.003088f, 0.003030f, -0.002037f, -0.003445f, 0.002829f, 0.007314f, -0.001674f, -0.003487f, -0.001295f, 0.000072f, 0.002539f, 0.005166f, 0.001466f, -0.001406f, -0.001893f, -0.001784f, -0.000614f, 0.001287f, -0.003676f, -0.001210f, -0.001078f, 0.005659f, 0.002843f, 0.004029f, -0.000655f, 0.000391f, 0.003064f, 0.002137f, 0.001486f, -0.000087f, 0.000528f, -0.000558f, 0.001591f, -0.000952f, -0.000757f, -0.014078f, -0.022556f, -0.006774f, -0.011346f, 0.016190f, -0.003791f, -0.001856f, 0.005898f, -0.014731f, -0.010581f, 0.009016f, -0.007317f, -0.006571f, -0.000497f, -0.000501f, 0.001453f, 0.005972f, -0.002599f, 0.002772f, -0.004001f, -0.002778f, -0.000409f, -0.002448f, -0.006638f, -0.000488f, -0.001534f, 0.006887f, 0.006738f, 0.006125f, -0.008196f, 0.003832f, - 0.002586f, 0.011356f, -0.005821f, -0.000332f, -0.004007f, -0.008533f, 0.012130f, -0.011561f, -0.005865f, -0.004452f, 0.002748f, 0.010269f, -0.009579f, 0.010619f, -0.001292f, 0.005760f, 0.008632f, 0.001503f, 0.006618f, -0.012470f, 0.002613f, -0.004657f, 0.000496f, -0.013215f, 0.000096f, -0.004509f, -0.012052f, -0.009072f, 0.000559f, 0.008848f, 0.000305f, -0.006332f, 0.009838f, -0.003368f, 0.005627f, -0.000723f, -0.012511f, 0.017348f, -0.010951f, -0.002078f, -0.006301f, 0.004380f, 0.006851f, 0.004706f, 0.006307f, 0.014053f, 0.010514f, -0.001729f, 0.002063f, 0.006665f, 0.003993f, -0.004927f, 0.006935f, 0.005592f, -0.001222f, 0.003201f, -0.007152f, -0.009567f, -0.001209f, -0.003050f, 0.005222f, -0.005591f, -0.001358f, -0.005374f, -0.001440f, -0.002445f, -0.000997f, 0.001667f, 0.001816f, 0.001148f, -0.000434f, -0.001322f, 0.003050f, 0.001689f, -0.003555f, 0.002463f, -0.000045f, -0.008294f, -0.000950f, -0.002964f, 0.004554f, -0.001241f, -0.000775f, 0.001767f, -0.001128f, 0.001684f, 0.003518f, -0.000225f, 0.002202f, 0.002609f, -0.000726f, 0.000985f, 0.005041f, 0.000871f, 0.005859f, -0.015699f, - -0.022846f, 0.002734f, 0.001715f, 0.001467f, 0.014419f, -0.004537f, -0.016087f, 0.001878f, 0.001666f, -0.004002f, -0.001100f, -0.013789f, -0.002947f, 0.001938f, 0.001893f, 0.015845f, -0.002924f, 0.014220f, -0.003575f, -0.003423f, 0.000987f, -0.013722f, 0.005754f, -0.005050f, 0.008291f, -0.002150f, -0.003768f, -0.004975f, -0.002715f, 0.000692f, -0.010595f, 0.018191f, -0.012661f, -0.020041f, 0.005860f, 0.001125f, -0.014402f, -0.004006f, -0.027465f, 0.000665f, -0.009906f, 0.000061f, -0.010740f, -0.008362f, 0.001284f, 0.001162f, 0.004503f, -0.008433f, 0.006690f, -0.009541f, -0.019031f, 0.002437f, 0.005014f, -0.005515f, 0.005969f, -0.003037f, -0.010654f, -0.009013f, -0.012912f, -0.005840f, -0.001561f, 0.002274f, -0.004012f, 0.011982f, -0.000174f, -0.003492f, 0.000812f, 0.000903f, 0.002239f, 0.002025f, 0.001168f, -0.011124f, -0.010798f, 0.002431f, 0.007275f, 0.004617f, 0.001018f, -0.002309f, 0.009086f, 0.005308f, -0.004568f, -0.003018f, -0.010654f, -0.004122f, 0.004418f, 0.002375f, -0.005918f, 0.002471f, -0.001822f, -0.001503f, -0.002905f, -0.003116f, -0.001381f, -0.004169f, -0.003539f, 0.001962f, - 0.000614f, 0.002770f, 0.004227f, 0.000521f, 0.003674f, 0.000361f, -0.002848f, 0.003884f, 0.002071f, -0.000590f, 0.000282f, -0.001967f, -0.002394f, 0.000100f, -0.000078f, -0.002225f, -0.000164f, -0.000571f, -0.000387f, 0.000132f, -0.000798f, 0.002579f, -0.004179f, -0.000467f, -0.001449f, 0.000352f, 0.001056f, 0.002639f, -0.000197f, -0.035062f, -0.008750f, 0.001343f, -0.008901f, -0.006580f, -0.011145f, 0.002832f, 0.003957f, 0.007913f, -0.005989f, -0.007527f, -0.008426f, 0.004162f, 0.009440f, -0.004754f, -0.004009f, -0.002462f, -0.001429f, 0.004401f, -0.019507f, -0.004890f, 0.011050f, 0.003526f, -0.005703f, 0.002018f, 0.009787f, -0.001033f, -0.002479f, 0.003344f, -0.000602f, 0.023891f, -0.010300f, 0.005786f, 0.001940f, -0.010172f, 0.003332f, 0.002175f, -0.011473f, 0.008027f, -0.016307f, -0.001669f, 0.014448f, 0.003090f, -0.000412f, -0.003125f, -0.011147f, -0.009719f, 0.002580f, 0.006121f, -0.004193f, 0.002935f, 0.011969f, 0.005839f, -0.004963f, 0.007283f, -0.010614f, -0.025072f, -0.003302f, -0.011065f, 0.006952f, -0.007123f, 0.017744f, 0.008787f, -0.000814f, -0.003010f, -0.023003f, 0.007157f, - 0.008794f, -0.007156f, 0.014059f, -0.011023f, 0.004290f, -0.018405f, 0.008494f, 0.006321f, -0.020847f, -0.013368f, -0.004277f, 0.005049f, 0.006923f, 0.015092f, -0.002111f, -0.000834f, 0.009860f, 0.002186f, 0.000049f, -0.004502f, 0.002255f, 0.002185f, 0.002959f, 0.003134f, 0.000803f, -0.000505f, -0.001902f, -0.002259f, -0.005630f, -0.004773f, 0.003736f, 0.002555f, 0.001919f, 0.004547f, -0.001894f, 0.002144f, 0.002355f, -0.001283f, 0.003985f, -0.000635f, -0.000052f, -0.001054f, -0.004542f, -0.001091f, 0.005190f, 0.001071f, 0.003848f, -0.001539f, 0.001400f, -0.002151f, 0.006169f, 0.000489f, 0.005169f, 0.002193f, -0.002573f, 0.001255f, 0.008619f, 0.014944f, 0.033993f, 0.036609f, 0.007153f, 0.011102f, -0.000044f, 0.005396f, 0.000184f, 0.004037f, -0.009886f, 0.004726f, -0.006198f, 0.008277f, 0.007507f, 0.018965f, 0.002760f, -0.003578f, 0.011626f, 0.008698f, 0.014013f, 0.000922f, 0.008674f, 0.005342f, -0.004481f, 0.004632f, 0.020929f, 0.003583f, -0.009201f, -0.004661f, 0.015464f, 0.009873f, 0.007385f, 0.014728f, -0.011244f, 0.004596f, 0.017159f, -0.016944f, -0.020653f, 0.007051f, - 0.010924f, 0.018184f, -0.007860f, -0.013112f, 0.010760f, 0.004202f, -0.001712f, 0.007012f, -0.002801f, -0.001361f, -0.000182f, 0.025791f, -0.009303f, 0.005457f, -0.006229f, -0.003665f, -0.003077f, 0.013595f, -0.001829f, 0.029987f, 0.014175f, -0.013955f, 0.016533f, 0.003924f, 0.007678f, 0.003878f, 0.003551f, 0.004362f, -0.005486f, 0.010337f, -0.023534f, -0.005882f, 0.010706f, -0.023593f, 0.008152f, -0.018998f, 0.004505f, 0.021675f, 0.005244f, 0.000199f, 0.005835f, 0.002380f, -0.005769f, 0.001792f, -0.006127f, 0.001060f, 0.004899f, -0.014016f, 0.008226f, -0.002248f, -0.003432f, 0.001339f, 0.004454f, -0.003396f, -0.005735f, 0.002315f, 0.005183f, -0.002354f, -0.004844f, -0.004383f, -0.002796f, 0.002391f, -0.003414f, -0.002667f, 0.003245f, 0.004918f, 0.002128f, -0.001973f, 0.002963f, -0.001710f, -0.007383f, -0.002927f, -0.000086f, -0.003340f, 0.002148f, 0.001972f, 0.003139f, 0.005489f, 0.007438f, -0.003052f, 0.010479f, -0.003200f, -0.006053f, -0.001616f, 0.003751f, 0.001268f, -0.006147f, -0.003549f, -0.004450f, 0.056717f, 0.009431f, 0.009235f, -0.016872f, 0.024664f, -0.008443f, -0.000691f, - -0.006761f, 0.001722f, -0.016167f, -0.000829f, 0.007099f, 0.002144f, -0.013239f, 0.016399f, -0.004228f, -0.007956f, 0.001958f, 0.005390f, -0.016936f, -0.022933f, 0.009312f, -0.009259f, -0.014113f, 0.003068f, -0.000421f, -0.006710f, 0.011794f, -0.011871f, 0.003690f, 0.012172f, -0.002436f, 0.017572f, 0.005081f, -0.021450f, -0.023139f, -0.009389f, 0.001137f, 0.004510f, -0.018355f, 0.006874f, 0.006219f, 0.003788f, 0.005462f, 0.008314f, -0.019064f, -0.008984f, 0.005098f, -0.020522f, -0.007888f, -0.000137f, -0.021960f, -0.011224f, -0.007729f, 0.004744f, -0.011410f, -0.023146f, -0.011479f, -0.012198f, 0.026908f, 0.013523f, -0.002554f, 0.004093f, -0.007629f, 0.022024f, 0.025663f, 0.003288f, 0.017092f, 0.013072f, 0.004690f, 0.003502f, -0.010385f, -0.001814f, -0.009212f, 0.012995f, -0.016950f, 0.000936f, -0.004336f, -0.025125f, -0.008065f, -0.003299f, 0.013502f, -0.012242f, 0.006599f, 0.006337f, 0.002252f, 0.001713f, 0.005657f, -0.005713f, 0.004443f, -0.003292f, 0.004970f, -0.000963f, 0.007517f, 0.002691f, 0.000320f, -0.003739f, -0.001890f, -0.009572f, 0.004979f, -0.000990f, 0.008103f, -0.007736f, - -0.000381f, -0.000445f, 0.004680f, -0.000490f, 0.004140f, 0.002315f, 0.002082f, 0.002805f, 0.000899f, -0.005046f, 0.005924f, 0.008424f, -0.004460f, -0.005372f, -0.007154f, -0.002398f, -0.000828f, -0.002023f, 0.000299f, -0.001407f, -0.038415f, 0.025928f, 0.041646f, -0.031253f, -0.018600f, 0.008557f, 0.007470f, -0.006363f, 0.013677f, 0.003691f, -0.011652f, -0.014260f, -0.000304f, -0.004609f, -0.010174f, 0.005159f, -0.004689f, 0.000622f, 0.011495f, -0.015540f, 0.003237f, 0.002029f, -0.009229f, 0.001268f, -0.014643f, 0.002800f, 0.021417f, 0.010885f, -0.002186f, -0.006954f, -0.001799f, -0.012308f, -0.013080f, 0.006348f, 0.010803f, -0.003491f, -0.006053f, -0.004345f, 0.006438f, 0.010737f, 0.005135f, 0.019731f, -0.010718f, 0.008073f, -0.005198f, 0.001870f, 0.012295f, -0.004529f, -0.003976f, -0.023661f, -0.003682f, -0.018344f, 0.009106f, 0.006174f, 0.023402f, -0.020219f, -0.007496f, -0.019576f, -0.032138f, -0.005490f, 0.013289f, -0.022249f, 0.004822f, -0.002565f, -0.016248f, -0.019164f, -0.024107f, 0.032118f, 0.001115f, 0.019023f, 0.013970f, 0.016138f, -0.007474f, -0.021578f, -0.016348f, -0.020206f, - 0.006894f, 0.015589f, -0.015151f, 0.006949f, 0.016654f, -0.011508f, 0.001792f, 0.013451f, 0.015501f, 0.003600f, -0.005742f, 0.006541f, -0.002948f, 0.003411f, -0.016818f, -0.001699f, 0.006242f, -0.005833f, 0.001975f, 0.000855f, 0.000549f, 0.003543f, 0.006110f, -0.006786f, -0.002536f, 0.003631f, 0.005413f, 0.001371f, 0.002528f, 0.005262f, -0.001378f, 0.005697f, -0.005184f, 0.003829f, 0.005766f, 0.006440f, 0.000519f, -0.002757f, 0.004979f, -0.004483f, 0.001054f, -0.001209f, -0.003856f, -0.002044f, -0.003815f, -0.001231f, 0.001412f, -0.004678f, -0.012448f, 0.004013f, 0.006371f, -0.030413f, 0.022059f, -0.003096f, -0.010935f, 0.018226f, 0.006898f, -0.018486f, -0.025610f, -0.010404f, 0.000382f, 0.000136f, 0.001548f, -0.009645f, 0.029761f, 0.011802f, 0.009184f, 0.006385f, 0.009538f, -0.009395f, 0.002491f, 0.005422f, 0.004560f, 0.026031f, 0.003001f, -0.039903f, 0.005091f, 0.015960f, -0.014494f, -0.022649f, -0.004483f, -0.012519f, -0.006911f, 0.001364f, 0.028092f, 0.016217f, -0.002641f, -0.001139f, -0.008234f, -0.024938f, -0.008094f, -0.020695f, 0.014567f, 0.019186f, 0.000403f, -0.011479f, - -0.003847f, -0.005065f, 0.009171f, 0.012002f, 0.013439f, -0.031332f, 0.006054f, 0.000501f, 0.002827f, 0.020831f, -0.012387f, 0.008186f, -0.011304f, -0.008798f, 0.002342f, 0.013411f, 0.025282f, -0.004600f, -0.016236f, 0.004669f, -0.029289f, 0.022823f, 0.012704f, -0.003530f, -0.012082f, 0.005701f, -0.006746f, -0.015133f, -0.012025f, -0.013789f, -0.006253f, -0.003420f, 0.000900f, 0.011746f, -0.009485f, 0.033469f, 0.001428f, -0.005875f, 0.001955f, 0.009493f, 0.000446f, -0.001093f, 0.011051f, 0.006910f, 0.005679f, -0.000297f, -0.005415f, -0.004888f, -0.001332f, -0.001497f, -0.005021f, -0.014605f, 0.007261f, 0.006215f, -0.005321f, 0.001166f, -0.007787f, -0.006513f, -0.002765f, -0.002273f, -0.000318f, 0.011442f, -0.002646f, -0.004615f, -0.002123f, -0.001506f, 0.007353f, 0.012800f, -0.004606f, 0.006815f, -0.002237f, -0.009328f, 0.009649f, -0.010045f, -0.007649f, -0.005763f, -0.007732f, 0.000747f, 0.005566f, 0.002089f, 0.005698f, -0.000792f, -0.002483f, -0.001446f, -0.006359f, 0.002742f, -0.003777f, -0.007914f, 0.004953f, -0.003683f, -0.003764f, -0.003611f, -0.000488f, -0.002916f, -0.000240f, -0.002547f, - -0.002046f, -0.000401f, -0.000958f, -0.013779f, -0.002426f, 0.013655f, -0.025077f, -0.008095f, 0.017483f, -0.021769f, -0.001399f, -0.002854f, -0.002043f, -0.025231f, 0.025073f, 0.009775f, -0.016175f, -0.003682f, -0.006504f, -0.006974f, -0.036423f, -0.005988f, -0.016232f, -0.042738f, 0.009723f, 0.005719f, -0.018334f, -0.016561f, -0.021741f, -0.026387f, 0.022581f, 0.011539f, 0.023732f, 0.000034f, 0.048973f, 0.001486f, 0.025939f, 0.033878f, -0.003267f, 0.009811f, 0.036459f, -0.024843f, 0.011763f, -0.015286f, 0.025314f, -0.008509f, 0.048589f, 0.020943f, -0.014146f, -0.023292f, 0.004482f, 0.010291f, 0.020701f, 0.004561f, -0.016560f, -0.004797f, 0.016584f, 0.034742f, -0.014106f, 0.023030f, -0.007944f, 0.013734f, -0.027094f, 0.010169f, -0.014393f, 0.010184f, 0.002559f, 0.002839f, -0.004312f, 0.021144f, 0.031421f, -0.056585f, 0.017659f, 0.010773f, 0.009027f, -0.011015f, 0.008081f, -0.040845f, 0.004155f, -0.000142f, -0.005492f, -0.016138f, -0.012535f, -0.014079f, -0.003106f, 0.027665f, -0.015691f, -0.010522f, -0.022376f, -0.000032f, 0.021248f, -0.011152f, -0.010727f, 0.014998f, 0.000160f, 0.010645f, - 0.003297f, -0.003717f, 0.001017f, 0.004189f, -0.010306f, 0.004688f, 0.002964f, -0.010407f, -0.007217f, -0.005562f, 0.003518f, 0.005508f, 0.007355f, 0.018405f, -0.001313f, 0.013707f, 0.007937f, 0.003827f, -0.008925f, -0.003960f, -0.013853f, -0.007550f, -0.001693f, -0.005860f, -0.006188f, 0.007130f, 0.005442f, 0.008699f, 0.013158f, 0.001333f, -0.002062f, -0.002585f, -0.007196f, 0.003809f, -0.001486f, -0.000971f, 0.004872f, -0.006521f, 0.027664f, 0.029663f, -0.006570f, 0.030837f, -0.001705f, -0.006278f, 0.002298f, 0.017394f, -0.006593f, -0.007695f, -0.003715f, -0.021703f, 0.003455f, -0.006130f, 0.034259f, 0.022761f, -0.016519f, -0.017240f, -0.032775f, -0.011828f, 0.023579f, 0.042836f, -0.019566f, 0.013318f, 0.002732f, 0.005745f, 0.023138f, 0.016776f, -0.033576f, 0.006767f, -0.012070f, -0.006674f, -0.013927f, -0.007418f, -0.014691f, -0.032116f, 0.005520f, 0.021680f, 0.008137f, 0.050616f, -0.012403f, -0.006843f, 0.034954f, -0.012670f, -0.002084f, -0.007709f, 0.009167f, -0.038411f, -0.024856f, 0.013508f, 0.028696f, 0.042121f, 0.050007f, -0.036726f, -0.019242f, -0.001817f, 0.016645f, -0.001537f, - 0.056759f, 0.015948f, 0.008378f, -0.044020f, 0.002939f, 0.000439f, 0.021219f, 0.027968f, -0.020879f, -0.006765f, 0.008583f, -0.008932f, -0.000124f, 0.031761f, 0.011294f, -0.031167f, 0.008042f, 0.016620f, -0.015144f, 0.049329f, -0.017139f, -0.026195f, -0.037060f, 0.027426f, -0.006030f, -0.030885f, -0.024695f, -0.005508f, -0.001262f, -0.012216f, 0.000621f, -0.013310f, 0.002502f, -0.018578f, 0.001200f, 0.009261f, -0.006557f, 0.007320f, 0.001326f, -0.011185f, 0.001164f, -0.000053f, -0.002269f, 0.001333f, -0.007776f, 0.009417f, 0.000004f, -0.004614f, 0.010539f, 0.010916f, 0.000405f, -0.002847f, 0.004673f, -0.010036f, -0.004299f, -0.008036f, -0.001606f, 0.008525f, -0.006670f, 0.003808f, 0.008218f, -0.015154f, -0.005517f, -0.003014f, 0.002478f, -0.002750f, 0.006555f, 0.014949f, -0.004212f, -0.008707f, -0.004335f, 0.009709f, 0.002704f, 0.001049f, 0.007665f, -0.004293f, -0.003173f, -0.002637f, -0.004301f, -0.003438f, 0.006725f, 0.058441f, 0.027549f, -0.015219f, -0.005039f, -0.053720f, 0.004081f, 0.014344f, 0.003642f, 0.080376f, -0.010266f, -0.005989f, -0.035383f, -0.030387f, 0.012388f, -0.024836f, - -0.015342f, -0.016636f, -0.011367f, 0.020014f, -0.013155f, -0.022843f, -0.019890f, 0.001848f, 0.019993f, -0.025851f, 0.005700f, 0.011763f, 0.002461f, 0.029011f, -0.003503f, 0.002313f, -0.029585f, -0.041405f, -0.017212f, 0.019019f, -0.023012f, 0.005572f, -0.019350f, -0.072327f, -0.039113f, 0.021702f, 0.001388f, -0.041446f, 0.006226f, 0.057752f, -0.002837f, -0.001499f, -0.022724f, 0.012630f, -0.025062f, -0.044612f, 0.000941f, 0.006763f, -0.017496f, 0.008543f, 0.016595f, -0.004159f, -0.014782f, 0.012005f, 0.015411f, 0.028942f, -0.016878f, 0.021737f, 0.027699f, 0.011719f, 0.048325f, 0.005403f, -0.030400f, 0.035348f, 0.001916f, 0.005874f, -0.006677f, -0.007182f, 0.021644f, -0.021704f, -0.003336f, 0.053794f, 0.042010f, -0.026209f, 0.026804f, -0.007878f, 0.049746f, 0.020985f, -0.017567f, -0.039996f, -0.001976f, -0.014679f, -0.017570f, 0.011173f, -0.015857f, -0.000563f, -0.004242f, -0.014047f, -0.023622f, -0.004676f, 0.019538f, -0.021394f, -0.000134f, -0.013332f, 0.001778f, 0.008222f, -0.008868f, -0.025030f, -0.004646f, -0.011919f, 0.014914f, 0.009052f, -0.006329f, -0.016625f, -0.007106f, -0.017884f, - 0.010416f, -0.008866f, 0.005536f, 0.006807f, 0.009910f, 0.007956f, -0.014058f, -0.009949f, -0.015762f, 0.004397f, 0.009672f, 0.001106f, 0.019521f, 0.020796f, 0.011127f, 0.008319f, -0.005704f, 0.010993f, -0.001591f, -0.005608f, -0.042473f, -0.043905f, -0.053692f, 0.073820f, -0.041108f, 0.010206f, -0.002795f, -0.022716f, 0.036653f, -0.043160f, 0.018385f, 0.078484f, 0.047415f, 0.011706f, -0.063684f, -0.002965f, -0.042193f, -0.020551f, -0.038569f, -0.003022f, 0.010305f, -0.006253f, 0.029418f, -0.013782f, 0.004476f, 0.015402f, 0.041324f, 0.006433f, 0.005284f, 0.051237f, -0.033807f, -0.004098f, 0.021845f, -0.009134f, -0.026318f, -0.016539f, 0.025035f, -0.021593f, 0.010232f, 0.043976f, -0.012519f, -0.077467f, -0.005228f, 0.020210f, -0.096404f, 0.058563f, 0.044205f, -0.035735f, 0.059069f, 0.041005f, 0.026121f, 0.062407f, 0.000900f, 0.032398f, 0.003234f, 0.004422f, 0.021821f, -0.038555f, 0.038740f, 0.053876f, 0.040522f, -0.041549f, -0.008669f, 0.059155f, -0.028774f, 0.047055f, 0.042106f, 0.100054f, 0.059545f, 0.004124f, 0.006493f, -0.012134f, 0.012088f, 0.018022f, -0.057961f, -0.081690f, - -0.029070f, 0.007893f, 0.002717f, -0.011115f, 0.064138f, 0.031139f, 0.011803f, -0.027617f, 0.025232f, -0.019349f, -0.025810f, -0.012260f, 0.028866f, 0.034774f, 0.006237f, -0.005356f, -0.006869f, 0.001792f, -0.040266f, -0.008681f, -0.010624f, 0.013713f, 0.007126f, -0.019937f, -0.016088f, -0.000167f, 0.031212f, -0.007968f, -0.012420f, 0.001655f, -0.012846f, -0.031091f, 0.015709f, -0.006047f, -0.012747f, -0.017872f, -0.000141f, 0.011456f, 0.001841f, -0.055881f, -0.003455f, 0.028838f, -0.004476f, 0.002007f, 0.004448f, 0.009007f, 0.023586f, 0.019849f, 0.000627f, 0.000663f, -0.009336f, -0.002007f, 0.004634f, 0.045003f, 0.055045f, -0.108253f, -0.099662f, 0.043643f, -0.028828f, -0.031003f, -0.013288f, -0.037524f, 0.013189f, -0.060969f, 0.077129f, 0.029405f, -0.032477f, -0.000371f, -0.031767f, -0.023391f, -0.025644f, -0.028768f, -0.019077f, -0.073580f, -0.066627f, -0.012046f, -0.015287f, 0.004575f, 0.006114f, 0.013206f, -0.004854f, 0.009788f, 0.012198f, 0.033254f, 0.036252f, -0.013370f, -0.018570f, -0.021196f, -0.018453f, -0.041450f, 0.062104f, -0.021602f, 0.015044f, 0.046615f, 0.043563f, -0.016192f, - -0.018847f, -0.034430f, -0.022988f, -0.028195f, 0.047733f, 0.005503f, 0.005799f, -0.058799f, -0.021099f, 0.085994f, -0.008393f, 0.080093f, -0.016182f, -0.029431f, -0.018908f, -0.033320f, -0.034633f, -0.005911f, 0.000317f, -0.047087f, 0.003935f, 0.023153f, -0.001975f, 0.018297f, -0.109730f, -0.043879f, -0.030743f, 0.058702f, -0.013945f, 0.010047f, 0.019882f, 0.091907f, 0.025935f, -0.007959f, -0.009314f, 0.079217f, 0.047572f, 0.012095f, 0.015384f, -0.003545f, 0.062550f, -0.025569f, -0.035612f, 0.019772f, 0.029436f, 0.052689f, 0.048613f, -0.027944f, 0.033022f, 0.025161f, 0.026636f, 0.008421f, -0.018889f, -0.036968f, -0.031730f, 0.020365f, 0.027600f, 0.015220f, 0.010012f, 0.032998f, -0.003057f, -0.008428f, -0.001702f, -0.002149f, 0.017070f, 0.010713f, 0.022239f, 0.039128f, 0.027416f, 0.044683f, 0.012120f, -0.039081f, 0.012818f, 0.011187f, 0.034718f, -0.000052f, 0.027276f, 0.012134f, 0.026259f, 0.001218f, -0.049577f, -0.005819f, -0.010641f, -0.002712f, -0.022157f, -0.012656f, -0.057324f, 0.119086f, -0.038443f, -0.023936f, 0.070602f, -0.044777f, -0.067553f, 0.062638f, -0.090943f, -0.026337f, - 0.021444f, 0.015583f, -0.063443f, -0.024921f, 0.054453f, 0.000312f, -0.010742f, -0.035461f, 0.042729f, -0.042445f, 0.002792f, 0.033605f, -0.011253f, 0.030851f, 0.000192f, -0.015306f, 0.010316f, 0.007292f, -0.018463f, 0.029329f, -0.016210f, -0.006602f, 0.008724f, -0.000631f, 0.001771f, -0.005570f, 0.008661f, 0.018592f, 0.030073f, 0.043336f, 0.021207f, -0.017974f, -0.005082f, -0.027574f, 0.025351f, -0.009206f, -0.039860f, 0.009287f, 0.000063f, -0.022705f, -0.054468f, 0.038226f, 0.002783f, -0.025205f, 0.061320f, 0.003488f, -0.019149f, -0.011131f, 0.090867f, -0.085175f, -0.091791f, 0.055842f, 0.087074f, -0.160984f, 0.000621f, -0.059612f, -0.054262f, -0.023977f, 0.058382f, -0.045269f, 0.077313f, -0.010998f, -0.002117f, 0.104134f, -0.029625f, -0.080654f, 0.099897f, 0.117912f, -0.114766f, 0.128016f, -0.043389f, 0.003153f, 0.105575f, -0.035417f, -0.040777f, 0.029034f, 0.028160f, -0.013593f, -0.005648f, 0.019670f, 0.003599f, 0.002542f, -0.025518f, 0.034853f, -0.000138f, -0.002223f, 0.000311f, 0.004738f, 0.015356f, 0.009591f, -0.013084f, -0.013794f, 0.014239f, 0.034812f, -0.030471f, -0.027744f, - -0.007922f, 0.036477f, -0.001725f, 0.019563f, -0.005737f, 0.008259f, -0.000338f, 0.008467f, -0.004649f, -0.006182f, -0.043470f, -0.017812f, 0.010218f, -0.015268f, -0.004893f, -0.014992f, -0.023794f, 0.036591f, 0.022073f, -0.062837f, 0.024576f, 0.033117f, -0.007090f, 0.000143f, -0.022947f, 0.032861f, 0.070221f, -0.032469f, -0.045548f, -0.011679f, 0.010607f, 0.072706f, 0.053173f, -0.018132f, -0.006364f, 0.023177f, 0.057993f, -0.018838f, -0.003905f, 0.036647f, -0.046692f, -0.038918f, 0.030975f, -0.020329f, -0.016303f, -0.018660f, -0.002346f, -0.031198f, 0.001963f, 0.022607f, -0.014003f, 0.017630f, -0.015599f, -0.008701f, -0.010037f, -0.043401f, 0.006028f, -0.017131f, 0.026525f, 0.058547f, 0.002659f, 0.029561f, 0.023367f, 0.002970f, 0.010407f, 0.018858f, 0.060812f, -0.042608f, 0.029129f, 0.026846f, -0.031905f, 0.021808f, 0.019968f, 0.007329f, -0.028364f, -0.054927f, -0.056855f, 0.019409f, 0.019727f, -0.020457f, -0.094681f, 0.077440f, -0.026278f, -0.040421f, -0.024320f, 0.077914f, -0.036727f, 0.085133f, -0.000473f, 0.029185f, -0.079793f, 0.075861f, -0.034821f, 0.034117f, -0.010622f, -0.107611f, - -0.034674f, 0.022303f, -0.067510f, 0.069871f, 0.006934f, -0.098548f, -0.112350f, -0.056604f, 0.077305f, 0.020189f, -0.069917f, 0.085663f, -0.091527f, -0.003474f, 0.163965f, 0.025631f, 0.008887f, 0.017391f, 0.012007f, -0.042103f, 0.044489f, 0.004407f, 0.022513f, -0.027879f, 0.042751f, -0.022761f, -0.023202f, -0.017941f, -0.002870f, -0.000046f, 0.012642f, -0.003176f, -0.006795f, 0.009662f, -0.015497f, -0.029943f, 0.027896f, -0.009239f, -0.005306f, -0.035715f, 0.016456f, 0.009475f, 0.015600f, 0.005682f, 0.018070f, -0.012403f, 0.003939f, 0.052469f, -0.006372f, 0.001906f, 0.026685f, -0.027663f, -0.006535f, 0.002925f, -0.003320f, 0.021343f, -0.020972f, 0.023815f, -0.008208f, -0.056288f, 0.003344f, -0.013556f, 0.025485f, 0.019872f, 0.017297f, -0.019551f, 0.022653f, -0.036214f, -0.068334f, -0.000032f, -0.072614f, 0.019683f, -0.006244f, -0.013371f, 0.024608f, 0.039922f, -0.025588f, 0.005435f, 0.044471f, -0.035025f, 0.060229f, -0.008362f, -0.065809f, 0.056275f, -0.027043f, -0.012486f, 0.050632f, -0.064993f, 0.017225f, 0.000714f, 0.023632f, -0.010539f, -0.023544f, -0.099014f, 0.022789f, -0.041104f, - -0.098902f, 0.119343f, -0.080464f, -0.033996f, -0.015861f, -0.027681f, -0.060712f, 0.033722f, 0.082774f, -0.051582f, 0.023317f, -0.074635f, -0.041860f, -0.042720f, 0.037454f, 0.006275f, 0.108540f, -0.019114f, -0.008961f, -0.032817f, -0.093469f, -0.000363f, 0.045549f, -0.035053f, 0.038235f, 0.045430f, -0.038697f, 0.003379f, -0.033002f, -0.138688f, -0.072463f, -0.043035f, -0.145184f, 0.092306f, 0.122283f, 0.056995f, -0.123121f, -0.099490f, -0.220878f, 0.031405f, 0.262557f, 0.120920f, 0.046362f, -0.069574f, -0.242302f, -0.055583f, 0.056035f, 0.165029f, 0.165990f, -0.113417f, -0.095536f, -0.044910f, 0.021583f, 0.010851f, 0.180291f, 0.002435f, -0.022100f, 0.014078f, -0.018011f, -0.044661f, 0.063319f, 0.010769f, -0.013765f, 0.034485f, -0.028945f, -0.049770f, 0.034644f, 0.029489f, -0.083864f, 0.055686f, -0.012738f, -0.019105f, -0.044813f, 0.046642f, -0.045295f, 0.053473f, -0.026931f, 0.054737f, -0.065677f, 0.025438f, -0.018592f, 0.000132f, 0.046926f, 0.076561f, 0.021543f, -0.029495f, -0.020815f, -0.005594f, 0.042318f, -0.007623f, 0.061005f, -0.048862f, -0.038292f, 0.016859f, 0.060414f, 0.006322f, - 0.036606f, -0.049149f, -0.014603f, -0.016331f, 0.037516f, -0.003277f, 0.005582f, -0.011486f, -0.104589f, 0.076048f, -0.015430f, -0.015872f, 0.001243f, 0.034603f, 0.000018f, -0.005867f, 0.024508f, 0.009285f, 0.007749f, 0.040712f, -0.026010f, 0.000365f, 0.020189f, -0.006605f, -0.004397f, 0.025914f, -0.024070f, -0.005039f, 0.006494f, 0.040368f, -0.026864f, -0.017979f, 0.021623f, -0.000393f, 0.011873f, -0.038683f, 0.050997f, -0.011642f, 0.016810f, -0.010618f, 0.006046f, 0.028781f, 0.011775f, -0.005946f, 0.023594f, -0.008556f, 0.023855f, -0.018613f, -0.002038f, 0.025893f, -0.006409f, -0.009844f, -0.051537f, 0.005816f, 0.038787f, 0.004769f, 0.017867f, -0.025145f, -0.008772f, -0.014800f, -0.016787f, -0.006005f, 0.027903f, -0.009762f, 0.016778f, -0.021810f, -0.027401f, -0.010874f, 0.005799f, 0.052728f, -0.020559f, 0.024326f, 0.000990f, 0.005820f, -0.026038f, 0.014553f, 0.026470f, 0.002095f, -0.025188f, 0.019666f, -0.016972f, 0.013396f, -0.010574f, -0.006604f, -0.010138f, 0.004174f, 0.018408f, -0.008910f, -0.005423f, 0.009418f, -0.001690f, -0.013761f, -0.003637f, 0.014804f, 0.011461f, -0.011841f, - 0.001574f, 0.013590f, -0.000012f, -0.007204f, 0.001541f, -0.011911f, 0.008876f, -0.000111f, 0.004275f, -0.005037f, 0.001917f, 0.008915f, -0.004648f, 0.010332f, 0.001312f, 0.009490f, 0.006183f, -0.013518f, -0.014960f, -0.004183f, 0.024706f, -0.015353f, 0.017006f, 0.014748f, -0.010770f, -0.025329f, 0.019231f, -0.015998f, 0.021799f, -0.001347f, -0.004217f, -0.008437f, 0.003208f, 0.004465f, -0.001864f, -0.002221f, 0.001390f, 0.003009f, -0.010487f, 0.099084f, 0.019555f, -0.052950f, -0.037783f, -0.058493f, -0.018679f, 0.011373f, 0.031020f, -0.009626f, -0.012674f, -0.010741f, -0.010536f, -0.009780f, 0.014129f, -0.007131f, -0.002082f, -0.003045f, -0.010402f, -0.002375f, 0.015542f, 0.002325f, -0.004611f, -0.015540f, 0.017852f, -0.023182f, 0.013591f, -0.008227f, -0.022920f, 0.000178f, 0.010328f, 0.011788f, 0.009083f, -0.013414f, 0.002929f, -0.004250f, -0.007464f, 0.027577f, -0.024564f, -0.004397f, -0.001068f, -0.001621f, 0.002509f, -0.004028f, -0.014453f, 0.012178f, -0.022864f, 0.021811f, -0.003248f, -0.015205f, 0.005215f, -0.007813f, 0.019287f, -0.011249f, -0.006895f, 0.020949f, -0.018768f, 0.006575f, - -0.009008f, -0.001994f, 0.015973f, -0.011376f, -0.004590f, 0.014422f, -0.009895f, 0.003842f, 0.001441f, -0.011595f, 0.028324f, -0.024705f, -0.002147f, 0.010981f, -0.006331f, 0.018188f, -0.008249f, -0.003932f, 0.004714f, 0.006050f, -0.001980f, 0.004087f, -0.001629f, -0.007961f, 0.007179f, 0.000065f, 0.000682f, 0.004022f, -0.000537f, 0.005731f, -0.005728f, 0.001736f, 0.001118f, 0.001348f, -0.000721f, -0.003453f, 0.004610f, -0.000589f, -0.001237f, -0.003271f, 0.004075f, 0.006744f, -0.002276f, -0.003336f, 0.002065f, 0.003974f, -0.004926f, 0.004143f, -0.003719f, -0.003116f, 0.010659f, -0.001555f, 0.003926f, 0.005704f, -0.007397f, 0.018236f, -0.005975f, -0.000871f, -0.000929f, -0.010397f, 0.010830f, -0.006689f, -0.010872f, 0.009741f, -0.046898f, -0.070354f, 0.092228f, 0.287907f, 0.024602f, 0.025112f, -0.196282f, -0.248174f, -0.051763f, -0.052523f, 0.146175f, 0.248923f, 0.127667f, 0.024640f, -0.090088f, -0.175162f, -0.123720f, -0.088371f, -0.004629f, 0.121306f, 0.177140f, 0.095811f, 0.021903f, -0.062060f, -0.110453f, -0.061767f, -0.059522f, -0.055650f, 0.035177f, 0.072252f, 0.071117f, 0.071744f, - 0.017201f, -0.031010f, -0.012785f, -0.047162f, -0.073964f, -0.008125f, -0.022077f, -0.014853f, 0.066726f, 0.038640f, 0.055740f, 0.033895f, -0.025313f, -0.060765f, -0.014679f, -0.039469f, -0.006134f, 0.027729f, 0.008450f, 0.015017f, 0.030144f, -0.015218f, -0.021427f, -0.004850f, -0.012598f, 0.012253f, 0.019458f, 0.001136f, 0.024026f, 0.014349f, -0.025263f, -0.024203f, -0.038715f, -0.033009f, 0.001453f, 0.040008f, 0.060500f, 0.029236f, 0.007640f, -0.013980f, -0.040522f, -0.006863f, -0.045688f, -0.027933f, 0.021496f, 0.016965f, 0.051150f, 0.017329f, -0.013029f, 0.015170f, -0.026531f, -0.045927f, 0.008095f, 0.011770f, 0.015427f, 0.014364f, -0.002884f, -0.005650f, -0.004406f, -0.019033f, -0.014668f, 0.010143f, 0.015614f, 0.015813f, 0.015935f, -0.004305f, -0.015401f, -0.010096f, -0.005912f, 0.000523f, -0.000317f, -0.017304f, 0.004468f, 0.022061f, 0.011846f, 0.013777f, -0.004057f, -0.021952f, -0.012817f, -0.012905f, 0.005111f, 0.015617f, 0.010230f, 0.009703f, 0.004159f, -0.003020f, -0.016726f, -0.021917f, -0.010075f, 0.001499f, 0.013667f, 0.021912f, 0.013355f, 0.013569f, 0.008500f, -0.013679f, - -0.025649f, -0.032804f, -0.021333f, 0.009393f, 0.018521f, 0.024148f, 0.033295f, 0.010289f, -0.009920f, -0.016607f, -0.013560f, -0.009913f, -0.009477f, -0.009500f, -0.002740f, 0.007643f, 0.014751f, 0.013151f, 0.010250f, 0.007299f, 0.001725f, -0.009040f, -0.016019f, -0.015321f, -0.007795f, -0.000093f, 0.006948f, 0.009488f, 0.008704f, 0.004634f, 0.002840f, 0.001163f, -0.001336f, -0.005774f, -0.007138f, -0.005817f, -0.001947f, 0.002510f, 0.004334f, 0.003594f, 0.000896f, -0.000930f, 0.000693f, 0.000602f, 0.000984f, 0.000412f, -0.001385f, -0.002730f, -0.000867f, 0.001436f, 0.000438f, -0.002234f, -0.001136f, 0.000654f, 0.000561f, -0.000289f, 0.001781f, 0.003880f, 0.003580f, -0.001521f, -0.004076f, -0.003094f, -0.001024f, -0.000158f, -0.000027f, -0.000350f, 0.001214f, 0.002635f, 0.002610f, 0.000399f, -0.000503f, -0.000459f, -0.001080f, -0.002011f, -0.001607f, -0.001019f, 0.000453f, 0.001035f, 0.001849f, 0.001472f, 0.000548f, -0.000394f, -0.000497f, -0.001164f, -0.001015f, -0.000911f, 0.000047f, 0.000713f, 0.001224f, 0.000473f, 0.000163f, -0.000488f, -0.000494f, -0.000712f, -0.000017f, 0.000399f, - 0.000724f, 0.000182f, 0.000166f, -0.000290f, -0.000305f, -0.000497f, 0.000019f, -0.000005f, 0.000239f, 0.000030f, 0.000212f, -0.000081f, 0.000093f, -0.000147f, 0.000068f, -0.000129f}, - {0.002302f, 0.006414f, 0.004973f, -0.001641f, 0.003807f, 0.001840f, 0.010993f, -0.001906f, -0.000309f, 0.001402f, 0.008041f, -0.001579f, -0.008420f, -0.003895f, -0.008083f, 0.001978f, -0.002887f, -0.000662f, -0.001033f, 0.001960f, 0.000765f, 0.001649f, 0.004661f, 0.008602f, -0.003832f, -0.002104f, 0.001703f, -0.004046f, -0.000572f, 0.006711f, -0.003653f, 0.008293f, 0.000842f, -0.002966f, 0.005491f, -0.007506f, -0.001935f, -0.005228f, 0.007335f, -0.000214f, -0.002722f, -0.001993f, 0.000080f, 0.006831f, 0.000268f, 0.008221f, 0.003149f, -0.006750f, 0.005463f, -0.002949f, -0.005051f, -0.004119f, 0.005617f, -0.001169f, 0.017913f, 0.001905f, 0.004500f, 0.003264f, -0.008355f, 0.000127f, -0.001236f, 0.002189f, -0.004746f, -0.003202f, 0.009334f, 0.007653f, 0.000689f, 0.003184f, -0.000858f, 0.004765f, -0.007706f, 0.000791f, 0.005783f, 0.003652f, 0.000587f, -0.000589f, 0.004121f, -0.006529f, -0.003015f, 0.006965f, -0.004577f, 0.001488f, 0.003386f, 0.004123f, 0.001262f, -0.005218f, -0.003486f, 0.002762f, 0.000606f, 0.002739f, -0.000832f, 0.000794f, -0.002612f, -0.000138f, -0.001303f, -0.000760f, - 0.001485f, 0.002873f, 0.001203f, -0.001655f, -0.000649f, -0.001117f, 0.000672f, 0.001761f, -0.001039f, 0.001302f, 0.000946f, 0.001832f, -0.000261f, 0.002195f, -0.000890f, 0.000556f, 0.001340f, 0.001722f, -0.013683f, -0.012329f, -0.007691f, -0.006983f, -0.006072f, 0.002333f, 0.008613f, 0.017593f, 0.003358f, 0.004543f, -0.000052f, -0.012546f, -0.005271f, -0.004657f, -0.011294f, 0.017553f, 0.004646f, 0.006974f, 0.004800f, -0.003878f, 0.001768f, 0.016803f, 0.006687f, -0.003952f, -0.000344f, -0.004076f, 0.000332f, -0.007776f, 0.004656f, -0.002454f, -0.003506f, 0.000664f, 0.008906f, 0.000942f, 0.003092f, 0.005593f, 0.007717f, -0.013872f, 0.000156f, 0.003521f, 0.008047f, 0.012401f, -0.006925f, -0.001402f, -0.003368f, 0.010343f, 0.005579f, 0.006669f, -0.001129f, 0.003091f, 0.020665f, -0.013072f, 0.002596f, 0.001216f, -0.008763f, 0.003720f, -0.012233f, -0.001645f, 0.003108f, -0.002645f, -0.018432f, 0.005159f, 0.001247f, -0.004980f, -0.005127f, -0.000855f, -0.002795f, 0.006212f, -0.005865f, -0.002591f, 0.001787f, -0.000200f, -0.005707f, -0.000281f, 0.004628f, -0.007715f, 0.000657f, -0.002111f, - -0.001875f, -0.002408f, -0.001386f, 0.001166f, -0.004522f, -0.003397f, 0.000639f, -0.002702f, -0.003584f, -0.003670f, -0.001282f, -0.002443f, 0.004442f, -0.003956f, -0.001143f, 0.000617f, 0.002217f, -0.000277f, 0.000123f, -0.001392f, 0.000242f, -0.002381f, 0.001746f, -0.001601f, -0.001587f, -0.000475f, -0.003481f, 0.018616f, 0.001552f, 0.006726f, -0.000850f, -0.004904f, 0.000320f, 0.013101f, 0.006589f, 0.008479f, 0.013389f, -0.005878f, 0.000058f, 0.013147f, 0.004103f, 0.005815f, 0.000666f, 0.001679f, 0.007585f, -0.006867f, -0.002121f, 0.009793f, -0.006696f, 0.003869f, 0.005459f, -0.004077f, 0.003993f, 0.013106f, -0.006255f, 0.004882f, 0.000961f, 0.000574f, 0.000094f, -0.002650f, -0.008971f, -0.002692f, -0.007527f, -0.000722f, 0.003048f, 0.006308f, 0.006532f, -0.001127f, -0.011231f, -0.000963f, 0.016231f, -0.005986f, 0.003225f, -0.002871f, -0.017212f, 0.010068f, 0.002454f, 0.007488f, -0.001307f, 0.008519f, 0.008194f, -0.014545f, 0.005769f, 0.000484f, 0.005412f, -0.001044f, -0.010285f, -0.000453f, -0.001494f, -0.001847f, -0.001979f, 0.006560f, -0.000078f, 0.001305f, 0.013202f, 0.002595f, - 0.010489f, 0.000367f, 0.000983f, 0.002044f, -0.005814f, -0.009072f, 0.006195f, -0.006860f, 0.004062f, 0.002580f, -0.000388f, 0.004363f, -0.004625f, -0.002592f, 0.002887f, 0.000174f, -0.008812f, 0.002856f, 0.001015f, 0.001162f, -0.001800f, 0.003835f, 0.000342f, -0.001499f, 0.004225f, -0.000946f, -0.000385f, -0.003512f, 0.001246f, -0.001742f, 0.000594f, 0.000048f, -0.000538f, 0.000869f, -0.001358f, 0.002314f, 0.000515f, -0.000881f, 0.000651f, -0.000520f, 0.000238f, -0.000085f, -0.001420f, -0.000114f, 0.030424f, 0.016999f, 0.026043f, 0.008374f, -0.010711f, 0.005466f, -0.004761f, 0.000683f, 0.002587f, -0.022196f, -0.005840f, -0.006142f, 0.005787f, 0.008664f, -0.003519f, -0.000549f, 0.002996f, 0.000666f, 0.015925f, -0.001781f, -0.016549f, 0.005384f, -0.009535f, 0.007358f, 0.008505f, 0.006697f, 0.009898f, -0.002386f, -0.003311f, 0.003960f, -0.002856f, -0.003886f, 0.002916f, -0.002600f, 0.005984f, 0.008423f, -0.003550f, -0.012814f, 0.004223f, -0.012461f, -0.007918f, -0.001577f, -0.025795f, 0.000246f, -0.004266f, 0.010151f, 0.009799f, 0.004679f, 0.015980f, 0.015964f, 0.007190f, 0.003557f, - -0.001036f, 0.000781f, 0.001024f, -0.007235f, 0.014945f, -0.001969f, 0.005283f, -0.004690f, -0.005517f, -0.002026f, -0.008331f, 0.007484f, -0.003776f, -0.003117f, 0.014676f, -0.012086f, -0.003567f, 0.003101f, -0.005400f, -0.001656f, -0.000291f, 0.005121f, 0.006172f, 0.004068f, 0.010513f, -0.003355f, -0.002648f, -0.001465f, -0.006339f, 0.003482f, 0.006825f, 0.009169f, 0.000018f, -0.001332f, -0.001745f, 0.000164f, 0.002168f, 0.001980f, -0.002535f, 0.003094f, 0.000172f, 0.002252f, 0.002076f, -0.000303f, -0.000497f, 0.003992f, -0.000903f, 0.002056f, 0.001846f, 0.001902f, 0.001860f, -0.001037f, 0.001714f, 0.006710f, -0.000241f, 0.000423f, 0.001036f, 0.004986f, 0.001140f, -0.000992f, -0.003209f, 0.002670f, 0.002160f, -0.001062f, 0.001151f, -0.011257f, -0.026912f, -0.009215f, -0.003064f, 0.004071f, -0.003586f, 0.008345f, -0.002048f, 0.013297f, -0.011996f, 0.007165f, -0.003167f, 0.024221f, 0.009781f, -0.004988f, -0.010519f, 0.005787f, -0.014855f, -0.007574f, 0.005383f, -0.004915f, -0.008956f, 0.016817f, 0.006675f, -0.000733f, -0.007894f, -0.010145f, 0.006801f, 0.005625f, 0.005022f, -0.000242f, - -0.002800f, -0.006191f, 0.009545f, -0.012534f, -0.005677f, -0.000388f, 0.008850f, 0.007135f, -0.000855f, 0.010189f, 0.001060f, -0.004472f, 0.001837f, -0.004454f, -0.005040f, -0.005424f, 0.006846f, -0.004961f, -0.000352f, 0.009498f, 0.013707f, 0.014413f, 0.005649f, 0.005235f, -0.001093f, 0.008249f, -0.003398f, 0.011778f, -0.002169f, 0.007582f, 0.005541f, -0.004570f, 0.000448f, -0.005025f, 0.005489f, 0.005116f, 0.001832f, -0.001588f, -0.009872f, 0.007080f, -0.010729f, -0.001066f, -0.011595f, 0.004430f, -0.000970f, -0.000879f, 0.002065f, -0.009515f, 0.000338f, 0.002766f, 0.015709f, 0.005367f, 0.002561f, 0.003989f, 0.006074f, 0.002962f, 0.003111f, -0.004470f, 0.003462f, 0.002938f, -0.006564f, -0.000300f, 0.000273f, 0.001631f, 0.002701f, -0.002948f, 0.001989f, -0.001819f, 0.000383f, -0.000139f, 0.003939f, 0.000675f, 0.000450f, 0.000739f, 0.001296f, -0.000572f, 0.003576f, -0.001718f, 0.001317f, 0.001672f, 0.003451f, 0.001929f, 0.004808f, -0.003237f, 0.001769f, -0.000555f, 0.005553f, 0.002419f, 0.001962f, -0.000446f, -0.000811f, 0.000718f, -0.001115f, -0.000881f, -0.003721f, -0.012428f, - -0.026060f, -0.021067f, 0.001334f, -0.018002f, -0.008839f, -0.025489f, -0.013541f, -0.015541f, 0.006204f, -0.008310f, -0.011010f, -0.003792f, 0.000634f, -0.006565f, -0.024712f, 0.006633f, -0.004346f, 0.002477f, -0.011168f, 0.011159f, 0.004170f, 0.000247f, -0.009930f, -0.004442f, 0.012697f, 0.008632f, 0.000598f, -0.001886f, -0.008458f, 0.005299f, 0.002786f, 0.005489f, -0.010132f, -0.000941f, -0.008222f, -0.007407f, -0.008041f, 0.000849f, 0.016447f, -0.013369f, 0.000331f, -0.012734f, 0.001349f, 0.005950f, 0.007487f, -0.013425f, 0.013566f, 0.016433f, -0.005366f, -0.003884f, -0.002818f, -0.000626f, 0.005266f, 0.006648f, 0.001689f, 0.004533f, -0.007953f, -0.001528f, -0.002922f, 0.014153f, -0.004373f, 0.015662f, -0.000350f, -0.004765f, 0.012521f, -0.001268f, -0.007408f, 0.002703f, 0.013564f, 0.015599f, -0.001115f, -0.004831f, -0.008422f, 0.005402f, -0.011258f, -0.001079f, 0.007626f, -0.005751f, 0.003466f, -0.000355f, -0.000015f, -0.004611f, 0.000158f, -0.003563f, -0.005605f, -0.000526f, 0.004845f, 0.002585f, 0.004828f, -0.002081f, -0.001485f, -0.003762f, 0.001553f, -0.003027f, 0.005028f, 0.002586f, - 0.007002f, 0.000718f, -0.001555f, -0.000554f, -0.001163f, -0.002392f, 0.003247f, -0.002106f, -0.001182f, 0.001373f, 0.001138f, -0.003347f, -0.001119f, 0.000990f, 0.000181f, -0.001811f, -0.003232f, -0.000127f, -0.002973f, -0.002027f, -0.001198f, 0.004082f, -0.000209f, 0.001470f, 0.001286f, 0.000260f, -0.002299f, -0.000623f, -0.000197f, -0.019970f, -0.020222f, -0.022980f, 0.006631f, -0.018578f, -0.007987f, 0.018202f, 0.008609f, -0.020182f, -0.001550f, 0.000373f, 0.008763f, 0.013483f, 0.022554f, -0.005980f, -0.008357f, -0.022184f, -0.027623f, -0.016044f, -0.005706f, 0.011355f, -0.011317f, 0.005549f, -0.015997f, 0.016598f, -0.012053f, 0.013360f, -0.006311f, 0.002009f, 0.003255f, -0.002497f, -0.011893f, 0.018697f, -0.016199f, -0.000660f, -0.008732f, 0.002414f, -0.010142f, 0.002432f, -0.040287f, 0.000788f, 0.018474f, -0.023732f, 0.005265f, 0.016437f, 0.005671f, -0.012302f, -0.001566f, 0.019755f, -0.024372f, 0.000039f, 0.009721f, 0.009616f, 0.009127f, -0.003378f, -0.003681f, -0.015534f, -0.007944f, 0.006520f, 0.010496f, 0.017105f, 0.020552f, -0.030426f, 0.011435f, -0.009113f, 0.002056f, -0.021426f, - -0.008934f, 0.017823f, 0.004146f, 0.002530f, -0.012006f, 0.000105f, 0.011250f, 0.008411f, 0.004917f, -0.010571f, -0.007076f, 0.011182f, -0.003134f, -0.004618f, -0.002590f, -0.007766f, 0.006499f, -0.001218f, -0.006393f, -0.002302f, -0.002322f, 0.001672f, -0.004205f, -0.004196f, 0.001278f, 0.001582f, 0.001509f, -0.002368f, -0.003743f, 0.003085f, -0.002467f, -0.008052f, -0.000918f, -0.002365f, 0.004708f, -0.003716f, 0.000047f, 0.000430f, 0.001756f, -0.005037f, -0.003061f, -0.001802f, 0.000327f, 0.005412f, -0.000845f, -0.001261f, 0.003102f, 0.000079f, 0.003044f, -0.001527f, -0.003832f, -0.001352f, -0.006345f, 0.001388f, -0.000277f, -0.004258f, 0.002373f, 0.023967f, 0.039952f, 0.022241f, 0.026036f, 0.003974f, 0.009233f, 0.035056f, -0.001117f, 0.001054f, 0.023971f, -0.011725f, 0.000037f, 0.006904f, 0.011939f, 0.019796f, -0.016129f, -0.022964f, 0.012639f, 0.007035f, -0.013359f, 0.002863f, 0.008168f, -0.005113f, 0.004684f, -0.012363f, -0.002819f, -0.014441f, 0.004419f, 0.015741f, 0.004870f, 0.013788f, 0.010636f, 0.011221f, -0.027338f, 0.001433f, 0.031769f, -0.003782f, -0.000592f, 0.029630f, - -0.003929f, -0.001048f, 0.004366f, -0.003905f, -0.000894f, 0.016401f, 0.025738f, -0.025309f, -0.004150f, 0.005051f, -0.007794f, 0.011948f, -0.004048f, 0.001175f, 0.001852f, -0.005519f, 0.022655f, -0.002906f, -0.008287f, 0.008498f, -0.008593f, -0.014151f, 0.004854f, 0.015453f, 0.005815f, -0.001720f, 0.003104f, 0.014785f, 0.007698f, 0.013245f, 0.003969f, 0.001645f, -0.000179f, -0.012999f, -0.002718f, -0.010186f, -0.002358f, -0.004281f, -0.023179f, -0.010031f, 0.001464f, 0.014923f, -0.006166f, 0.005764f, -0.003999f, -0.012251f, 0.005402f, 0.001318f, -0.003924f, 0.001910f, -0.007487f, 0.000359f, 0.001822f, 0.004558f, 0.006482f, -0.001578f, 0.004165f, -0.005642f, -0.008358f, -0.009990f, -0.001089f, 0.008985f, -0.001662f, -0.000744f, 0.002978f, 0.000453f, 0.000960f, 0.004810f, -0.002388f, -0.000948f, -0.002686f, 0.006928f, 0.000127f, -0.001099f, 0.000785f, -0.001835f, -0.003760f, -0.004547f, 0.001812f, 0.003887f, 0.004904f, 0.002638f, 0.001922f, -0.000967f, -0.000356f, -0.000029f, -0.001651f, -0.006987f, 0.002199f, 0.067435f, 0.009359f, -0.001455f, -0.000404f, -0.032389f, -0.009469f, 0.003102f, - -0.007554f, 0.014256f, 0.006276f, 0.023120f, -0.002959f, 0.000001f, -0.005010f, -0.009825f, 0.015512f, 0.002878f, 0.005919f, 0.008675f, 0.012132f, -0.011485f, -0.011547f, -0.013364f, -0.009299f, -0.007683f, -0.003381f, -0.018347f, -0.003631f, 0.029462f, 0.013873f, -0.005688f, -0.002048f, -0.003547f, 0.002409f, 0.010381f, -0.005175f, 0.042114f, -0.007400f, -0.001237f, -0.019221f, 0.007563f, 0.018338f, -0.003262f, -0.014170f, -0.001928f, 0.007011f, 0.014028f, 0.006019f, 0.019758f, 0.029585f, 0.009555f, -0.000725f, 0.017511f, 0.014304f, 0.005263f, 0.011029f, -0.037113f, 0.008480f, 0.000848f, -0.032839f, 0.011889f, -0.000880f, -0.014240f, 0.009108f, -0.015097f, -0.014674f, 0.017212f, 0.013532f, -0.007861f, -0.029088f, -0.013261f, 0.006825f, -0.016805f, -0.003529f, 0.007118f, 0.028310f, -0.004780f, 0.005610f, -0.014999f, -0.031400f, -0.016959f, -0.015125f, -0.006964f, 0.014781f, 0.001860f, -0.010526f, -0.003331f, -0.006623f, -0.006499f, 0.009390f, 0.007754f, 0.002906f, 0.006589f, 0.007892f, -0.006986f, -0.005149f, -0.005247f, 0.000915f, -0.005739f, -0.008384f, -0.008185f, 0.003288f, -0.002924f, - -0.001355f, 0.000904f, 0.002772f, -0.006998f, 0.003661f, -0.001693f, -0.001000f, -0.003238f, -0.001284f, -0.004500f, 0.010476f, -0.006835f, -0.002491f, 0.001641f, -0.007045f, -0.006855f, -0.005222f, 0.000149f, 0.005224f, 0.004235f, -0.036176f, 0.022944f, -0.004568f, -0.022664f, -0.001339f, 0.021377f, -0.024380f, -0.004651f, -0.019736f, 0.013209f, 0.003738f, -0.006711f, -0.008639f, -0.002563f, 0.012452f, 0.010235f, 0.005116f, 0.013776f, 0.011342f, 0.001591f, 0.013783f, 0.016669f, 0.006332f, 0.009399f, -0.016990f, -0.007732f, -0.011949f, 0.010650f, 0.012989f, 0.005163f, 0.003747f, -0.007492f, -0.006161f, -0.004447f, -0.004669f, -0.013713f, 0.012513f, 0.003338f, 0.000454f, -0.014702f, -0.004887f, 0.024327f, -0.017627f, -0.018034f, -0.028607f, 0.010230f, -0.021548f, 0.031097f, 0.035178f, 0.024862f, 0.013966f, 0.001735f, 0.027420f, -0.014330f, 0.021473f, -0.002484f, -0.015946f, 0.001508f, 0.000910f, -0.033076f, -0.015242f, 0.012901f, 0.001552f, -0.005309f, 0.004690f, 0.028393f, 0.018818f, -0.031875f, -0.008513f, -0.000137f, -0.001214f, 0.009636f, 0.013360f, -0.000310f, -0.026203f, 0.010737f, - -0.015356f, -0.047599f, -0.014308f, -0.009416f, 0.014522f, 0.024546f, 0.007819f, 0.001546f, 0.000883f, 0.001072f, 0.001808f, 0.017586f, -0.000287f, 0.002909f, 0.001872f, 0.009059f, -0.015599f, -0.000459f, 0.004342f, 0.011732f, 0.013362f, 0.005212f, 0.007797f, 0.012499f, 0.015666f, 0.021004f, 0.007545f, 0.010586f, 0.009752f, 0.000883f, -0.001272f, -0.003364f, -0.002875f, 0.000486f, 0.003883f, -0.011684f, -0.003310f, 0.007423f, 0.010990f, -0.000822f, 0.002855f, -0.001152f, 0.004434f, 0.000477f, 0.006939f, -0.000768f, 0.006643f, -0.004774f, 0.008597f, 0.000586f, 0.008103f, -0.029946f, 0.002955f, 0.003369f, 0.018720f, 0.004074f, 0.047879f, 0.007662f, -0.019804f, -0.006363f, -0.016679f, 0.030311f, -0.038868f, -0.003435f, 0.026819f, -0.058631f, -0.023181f, -0.019762f, -0.020536f, -0.038876f, 0.003654f, -0.006786f, -0.016713f, -0.002091f, 0.018385f, 0.002352f, 0.002420f, -0.011442f, 0.004543f, -0.003848f, 0.004517f, 0.000060f, 0.002893f, 0.015045f, -0.003662f, -0.000893f, 0.030516f, -0.019710f, -0.003989f, 0.005312f, 0.026286f, -0.013770f, 0.037538f, -0.011330f, -0.015174f, -0.032108f, - -0.041832f, -0.012168f, -0.031136f, 0.015223f, -0.009448f, -0.023339f, 0.003194f, 0.003814f, 0.017226f, 0.014604f, 0.006095f, -0.002922f, 0.053147f, 0.029445f, -0.003344f, 0.005220f, 0.018211f, 0.013641f, 0.008855f, -0.007160f, -0.001018f, -0.009500f, -0.012367f, -0.011425f, 0.008034f, 0.041477f, -0.028947f, -0.007062f, -0.016471f, 0.029899f, -0.007835f, 0.009288f, -0.004225f, 0.014056f, -0.032777f, -0.024514f, -0.008432f, 0.013981f, 0.004468f, 0.012076f, -0.007210f, 0.007461f, 0.011289f, 0.009896f, 0.004738f, -0.001929f, -0.013938f, 0.008845f, 0.003357f, -0.011853f, -0.008268f, 0.007466f, -0.007743f, -0.005893f, -0.000172f, 0.008035f, -0.007363f, 0.009675f, -0.005957f, 0.013809f, -0.007585f, 0.001567f, 0.004903f, 0.002532f, -0.006548f, -0.012570f, 0.009864f, -0.003762f, -0.002724f, -0.000963f, -0.001200f, -0.003963f, 0.009378f, 0.011572f, 0.008145f, 0.007087f, -0.001246f, 0.004092f, 0.013397f, -0.007138f, 0.005383f, 0.002314f, -0.000165f, 0.002930f, -0.000705f, 0.000725f, -0.004635f, 0.006161f, 0.001953f, 0.005878f, -0.001731f, 0.002577f, -0.001003f, -0.004816f, 0.003518f, 0.000893f, - 0.004145f, 0.006001f, -0.000892f, -0.023986f, -0.022860f, 0.012843f, -0.010198f, -0.043110f, 0.021391f, -0.012916f, 0.017098f, -0.012466f, 0.021497f, 0.014494f, 0.017884f, 0.028429f, 0.004691f, 0.024042f, 0.009765f, 0.006152f, 0.016441f, 0.005576f, 0.004549f, 0.001094f, -0.000631f, -0.015404f, 0.013705f, -0.031198f, 0.013664f, 0.003177f, -0.008872f, -0.016847f, -0.000397f, 0.011958f, -0.013857f, -0.005879f, -0.020742f, -0.008124f, -0.025544f, 0.001547f, 0.014115f, -0.000328f, -0.003282f, -0.016305f, -0.028211f, -0.020581f, 0.022109f, 0.007302f, -0.009170f, -0.016293f, -0.003945f, -0.001365f, -0.027584f, 0.023317f, 0.021311f, -0.027265f, -0.026403f, -0.043380f, -0.006564f, -0.051891f, 0.013993f, 0.020124f, 0.010649f, -0.003290f, -0.006590f, -0.005411f, 0.021298f, 0.021450f, 0.024839f, -0.016217f, -0.012827f, 0.016541f, -0.007142f, -0.007795f, -0.030369f, 0.013445f, 0.024854f, 0.028383f, -0.006679f, 0.015523f, -0.008725f, 0.004628f, 0.015575f, 0.007975f, -0.010940f, 0.005098f, -0.018743f, -0.011471f, -0.007765f, 0.002740f, 0.007940f, 0.006746f, -0.007417f, -0.006866f, -0.002755f, -0.008461f, - -0.001644f, -0.011639f, -0.014416f, -0.007628f, -0.006001f, -0.004479f, -0.001910f, -0.004254f, -0.005725f, 0.001205f, -0.000253f, 0.008309f, -0.002885f, 0.010627f, -0.002805f, 0.008470f, 0.000585f, -0.004882f, 0.002185f, 0.021538f, 0.006695f, 0.010948f, -0.004975f, -0.008802f, 0.001782f, 0.007785f, -0.007545f, 0.015583f, 0.015746f, 0.004423f, 0.007392f, 0.003191f, -0.018018f, -0.009583f, -0.008818f, -0.001287f, -0.000486f, -0.007881f, 0.041491f, 0.047710f, -0.018816f, -0.001188f, 0.012996f, -0.038818f, -0.007098f, 0.047973f, 0.001752f, -0.052552f, 0.005819f, 0.015954f, -0.001196f, 0.018045f, 0.043096f, -0.017828f, 0.038952f, 0.020900f, 0.033247f, 0.009117f, -0.025390f, -0.027293f, 0.021746f, -0.024796f, -0.038581f, -0.011436f, -0.045851f, 0.009864f, -0.003071f, 0.016048f, 0.014012f, 0.009764f, 0.005184f, -0.002111f, 0.001292f, 0.023040f, 0.011376f, -0.045257f, -0.005274f, 0.014770f, 0.028899f, 0.015808f, 0.035800f, 0.031995f, 0.025280f, -0.012291f, -0.004351f, 0.006358f, 0.065178f, -0.027657f, 0.004737f, 0.013464f, 0.025533f, -0.010913f, -0.036305f, -0.007990f, -0.009200f, -0.022224f, - -0.040162f, -0.044193f, 0.011950f, -0.024979f, -0.018618f, 0.010899f, 0.034394f, 0.042035f, 0.000710f, -0.002860f, -0.000616f, 0.032159f, -0.022241f, -0.011794f, 0.038508f, -0.042597f, 0.004550f, -0.033770f, -0.022438f, 0.001957f, 0.044653f, -0.007804f, -0.030779f, 0.039396f, -0.041041f, 0.001100f, -0.049521f, -0.004932f, -0.006363f, 0.013948f, 0.027288f, -0.020929f, -0.011732f, -0.014990f, 0.003511f, 0.000379f, -0.015483f, 0.008034f, -0.004722f, -0.004985f, -0.006727f, -0.005951f, -0.018319f, 0.003380f, -0.008939f, 0.005707f, 0.004663f, -0.002051f, -0.004233f, 0.010252f, -0.000228f, -0.000601f, -0.021598f, 0.002415f, -0.002067f, -0.001514f, 0.019671f, 0.001177f, 0.005369f, -0.009165f, 0.002957f, -0.005670f, -0.011877f, 0.004200f, -0.023933f, 0.006981f, -0.008439f, 0.016786f, -0.014366f, -0.002877f, 0.002977f, -0.002963f, -0.003981f, -0.008384f, 0.012856f, -0.009743f, 0.014020f, -0.006161f, -0.009186f, 0.009010f, 0.007747f, 0.023206f, -0.027157f, -0.058429f, -0.014699f, -0.019924f, -0.020237f, -0.011527f, 0.001994f, -0.019576f, -0.017913f, 0.006344f, 0.012415f, -0.012047f, 0.030545f, -0.002726f, - 0.020205f, -0.009932f, -0.002029f, 0.018725f, -0.026599f, -0.015511f, -0.009579f, 0.027598f, -0.007297f, -0.028960f, -0.011984f, 0.005104f, -0.015165f, 0.012918f, -0.020661f, -0.019336f, 0.028184f, 0.009042f, -0.023812f, 0.014566f, -0.003605f, -0.017512f, -0.002598f, -0.029438f, -0.026675f, 0.005717f, 0.044184f, 0.018744f, 0.013176f, -0.035513f, 0.026942f, -0.002620f, 0.020434f, -0.012010f, -0.026002f, 0.012783f, -0.047230f, 0.039276f, -0.063641f, -0.039220f, 0.013644f, 0.035099f, 0.001778f, 0.041913f, -0.019003f, 0.011388f, -0.029620f, 0.039340f, 0.011561f, 0.029389f, 0.012366f, 0.007301f, -0.010038f, -0.009154f, -0.019886f, -0.006107f, -0.002076f, -0.032938f, -0.020916f, 0.003427f, -0.051646f, 0.003346f, 0.055970f, 0.017460f, 0.019536f, 0.005965f, -0.026800f, -0.018964f, -0.006247f, -0.005763f, -0.002822f, -0.009576f, -0.014581f, 0.011798f, 0.006443f, 0.010742f, 0.015074f, -0.015802f, 0.009540f, -0.005734f, -0.009802f, -0.006194f, 0.013289f, -0.004419f, -0.016667f, -0.023251f, -0.001213f, -0.013840f, -0.007769f, -0.014206f, -0.005126f, -0.009182f, -0.006833f, 0.022674f, -0.013255f, 0.005479f, - 0.005812f, -0.017502f, 0.019292f, 0.000559f, 0.011083f, 0.016425f, -0.008592f, 0.008298f, 0.002468f, -0.000376f, 0.003822f, 0.013782f, -0.008944f, -0.007286f, 0.011216f, 0.001384f, 0.004880f, -0.003442f, -0.004735f, 0.000729f, 0.009360f, -0.043973f, -0.041938f, 0.004572f, 0.016607f, -0.020483f, -0.094271f, -0.019126f, -0.000960f, 0.012738f, -0.032206f, 0.003221f, -0.018171f, -0.003210f, -0.025756f, -0.027743f, 0.024590f, -0.026967f, -0.034156f, -0.005217f, -0.024052f, -0.025443f, 0.008444f, -0.037177f, -0.012946f, 0.023197f, 0.051548f, 0.042502f, -0.002490f, -0.025162f, 0.008510f, 0.038304f, -0.002232f, 0.025634f, -0.007705f, 0.032166f, 0.017334f, -0.032076f, 0.051322f, -0.039012f, -0.021340f, 0.035349f, -0.038912f, 0.012073f, -0.009316f, -0.028446f, 0.002923f, 0.044310f, -0.009582f, -0.025290f, 0.015928f, 0.021986f, -0.001105f, 0.009378f, -0.063529f, 0.015698f, 0.002150f, 0.032282f, 0.014914f, -0.027179f, 0.026979f, -0.014259f, -0.002880f, -0.025154f, 0.013132f, 0.037414f, -0.008098f, -0.006836f, -0.038351f, -0.053078f, 0.029976f, -0.003402f, 0.024056f, -0.028815f, 0.021794f, 0.018279f, - -0.038606f, 0.002669f, 0.033442f, 0.019856f, -0.018291f, -0.030173f, 0.027257f, 0.004994f, -0.024312f, 0.023068f, 0.003232f, 0.010544f, 0.002184f, 0.009830f, 0.001254f, 0.025717f, -0.000154f, 0.009159f, -0.002217f, 0.001512f, 0.021912f, -0.006765f, 0.000042f, 0.005561f, -0.006398f, 0.004551f, 0.001483f, 0.015945f, -0.001327f, -0.016781f, -0.002658f, 0.002647f, -0.010798f, -0.002602f, 0.000554f, -0.006435f, 0.022660f, -0.005032f, -0.013888f, 0.001918f, 0.014196f, 0.007386f, -0.001378f, 0.008858f, 0.000586f, -0.009231f, -0.001825f, 0.024828f, 0.016033f, -0.016076f, -0.012724f, 0.003943f, -0.005739f, 0.035542f, 0.035277f, -0.095450f, 0.035867f, 0.048664f, -0.012528f, 0.033910f, -0.000532f, 0.017663f, -0.007957f, -0.019483f, -0.012897f, 0.020525f, 0.004605f, -0.027444f, -0.018141f, -0.002373f, -0.013153f, -0.006892f, -0.003165f, 0.059342f, 0.011697f, 0.013281f, -0.036798f, 0.025654f, -0.026260f, 0.000566f, 0.004384f, -0.039814f, 0.018478f, -0.014648f, 0.001883f, -0.016014f, -0.029117f, 0.000966f, 0.018990f, 0.054999f, 0.019511f, 0.005876f, 0.033704f, 0.014534f, -0.004300f, 0.005751f, - 0.000647f, 0.009750f, 0.005347f, 0.037364f, 0.016064f, 0.011419f, 0.005924f, -0.004590f, -0.011771f, -0.036429f, -0.030950f, 0.004448f, -0.004610f, -0.022408f, 0.002991f, 0.027639f, -0.042106f, 0.040647f, 0.010208f, -0.014726f, -0.001905f, -0.010656f, -0.003582f, 0.024693f, 0.010492f, 0.008167f, -0.028691f, -0.005608f, -0.039132f, -0.011821f, 0.010602f, 0.014404f, 0.013941f, -0.016665f, -0.013759f, 0.030332f, -0.003793f, -0.048687f, 0.006782f, -0.000712f, -0.000776f, -0.028675f, 0.009215f, 0.021761f, -0.003227f, 0.031243f, 0.020694f, -0.010266f, -0.000828f, -0.013292f, 0.016521f, -0.001270f, 0.005271f, 0.002728f, -0.007323f, -0.005723f, -0.001558f, -0.005938f, 0.006537f, -0.013205f, -0.001583f, 0.000971f, 0.006964f, -0.006718f, -0.008306f, -0.009376f, 0.000241f, -0.002151f, 0.005046f, 0.003251f, -0.000571f, -0.005788f, 0.006178f, 0.005078f, 0.000658f, 0.007268f, 0.000989f, 0.005252f, 0.004383f, 0.006910f, -0.002172f, -0.024323f, -0.001243f, -0.006799f, 0.004891f, -0.011234f, -0.085037f, 0.131774f, -0.130275f, -0.058855f, -0.029788f, -0.008839f, 0.076177f, 0.022449f, 0.085287f, 0.021361f, - -0.017451f, 0.067276f, 0.029077f, -0.022684f, 0.031508f, 0.028593f, 0.015953f, 0.026762f, 0.025886f, -0.022980f, -0.037231f, -0.026432f, 0.004316f, -0.024295f, 0.012893f, 0.007744f, 0.016715f, -0.002502f, 0.011564f, 0.003998f, 0.041920f, 0.010038f, 0.003980f, 0.013001f, -0.009724f, -0.000477f, 0.014830f, -0.026166f, -0.037322f, -0.025290f, -0.021688f, 0.003840f, 0.011145f, -0.026224f, -0.004226f, -0.015726f, -0.064719f, 0.032764f, -0.011637f, 0.016652f, -0.033999f, -0.011435f, -0.031481f, -0.043115f, 0.016434f, 0.011622f, 0.042194f, -0.001659f, 0.037193f, -0.015542f, 0.031178f, 0.003829f, 0.044458f, -0.031238f, 0.027559f, 0.033137f, 0.018365f, 0.019302f, 0.001755f, -0.013281f, 0.052066f, 0.034939f, -0.003296f, 0.062838f, 0.015160f, 0.007539f, 0.026980f, 0.040588f, 0.000659f, 0.018781f, 0.023490f, 0.010875f, 0.010364f, -0.004456f, 0.002244f, -0.036382f, -0.009178f, -0.004703f, 0.006016f, 0.007925f, 0.007442f, 0.024591f, 0.010969f, 0.012663f, -0.009326f, -0.001077f, 0.009784f, 0.001276f, 0.001023f, -0.008436f, 0.010237f, 0.008763f, 0.005050f, -0.006514f, 0.012962f, -0.001650f, - 0.002513f, -0.009578f, -0.008912f, -0.003383f, 0.001265f, 0.001435f, -0.005734f, -0.019828f, 0.004942f, 0.004689f, -0.005178f, -0.000685f, -0.004879f, 0.001853f, -0.007081f, 0.005302f, -0.006799f, 0.000654f, 0.018371f, -0.004779f, -0.017573f, 0.011983f, 0.008752f, 0.007440f, -0.003965f, -0.002013f, 0.080670f, 0.006707f, -0.048216f, -0.071445f, -0.037536f, -0.029978f, 0.009757f, 0.058637f, -0.000783f, -0.025212f, 0.052883f, 0.004035f, -0.042432f, 0.037998f, 0.041718f, -0.007946f, -0.000647f, -0.004376f, -0.037584f, 0.041549f, 0.002468f, 0.023430f, -0.013202f, -0.033918f, -0.058555f, 0.010294f, 0.007471f, 0.008667f, -0.008223f, 0.018018f, -0.019460f, -0.000659f, -0.037556f, -0.047268f, 0.016457f, -0.006379f, 0.014903f, -0.007230f, -0.017390f, -0.042880f, -0.065846f, 0.033264f, -0.036826f, 0.014594f, 0.031595f, -0.002729f, -0.017019f, -0.032842f, -0.023376f, 0.075244f, 0.017118f, -0.004007f, 0.009730f, -0.010576f, -0.030771f, -0.010632f, 0.043795f, -0.043083f, -0.071657f, -0.025581f, -0.022875f, -0.100797f, -0.078467f, -0.042780f, -0.043741f, 0.010110f, -0.000686f, -0.035524f, -0.067074f, -0.027121f, - -0.031846f, -0.023375f, -0.018560f, -0.014170f, -0.040268f, -0.039042f, 0.029996f, -0.034767f, 0.001826f, 0.004409f, -0.042229f, -0.008105f, -0.030925f, -0.039083f, -0.009675f, -0.007036f, 0.017386f, 0.006660f, 0.023498f, -0.025294f, 0.005881f, 0.013231f, -0.000531f, -0.033767f, -0.019066f, -0.022953f, -0.002599f, 0.009861f, -0.011662f, -0.016916f, 0.028056f, 0.016086f, 0.020043f, -0.034578f, 0.005218f, -0.017318f, -0.002394f, 0.000467f, 0.002824f, -0.005003f, 0.033453f, 0.001692f, -0.006545f, 0.003297f, 0.011338f, 0.016146f, 0.013525f, -0.003284f, 0.019538f, -0.015563f, -0.008360f, -0.007321f, -0.026992f, -0.001842f, -0.008705f, -0.034986f, -0.029024f, 0.003768f, 0.000726f, -0.001717f, -0.009394f, -0.008632f, -0.003297f, -0.006192f, 0.054576f, -0.005882f, 0.051962f, 0.078603f, -0.015030f, -0.083896f, -0.082519f, -0.017028f, 0.038592f, 0.005961f, -0.064895f, 0.051015f, -0.011638f, -0.041533f, 0.051117f, -0.096709f, -0.021072f, 0.001014f, -0.017848f, -0.014414f, 0.117365f, -0.048963f, 0.109951f, -0.004998f, 0.022666f, -0.007719f, -0.044257f, 0.071268f, 0.018220f, 0.074080f, -0.051019f, -0.049283f, - 0.015519f, -0.079769f, -0.024580f, -0.012468f, -0.056311f, 0.116439f, -0.010638f, -0.119972f, -0.002355f, -0.053271f, 0.015166f, 0.030024f, 0.047753f, 0.039569f, -0.048045f, -0.029392f, -0.074470f, -0.021317f, -0.034748f, 0.032052f, 0.020479f, -0.003675f, 0.021342f, -0.014473f, -0.052939f, -0.021168f, -0.061694f, 0.063126f, -0.047793f, -0.032417f, 0.055953f, 0.013645f, 0.094897f, 0.046513f, 0.007950f, 0.050614f, -0.067789f, -0.024863f, -0.069968f, -0.067343f, -0.010773f, -0.009551f, -0.085256f, 0.087841f, -0.015720f, -0.067657f, -0.101452f, 0.006913f, -0.020347f, 0.074399f, -0.004983f, 0.004130f, 0.009712f, -0.013005f, 0.013832f, 0.016953f, 0.034587f, -0.023030f, -0.023672f, -0.014752f, 0.000880f, -0.003998f, -0.005037f, -0.021753f, 0.024422f, 0.015447f, 0.029175f, -0.006639f, -0.015967f, -0.013327f, -0.005289f, 0.005739f, 0.039168f, 0.041945f, -0.006865f, 0.002531f, 0.022614f, -0.006087f, -0.052289f, -0.025150f, 0.003247f, 0.007404f, -0.004102f, -0.033099f, 0.011692f, -0.003750f, -0.007885f, -0.037952f, 0.015008f, 0.013111f, 0.045533f, 0.007634f, 0.011300f, -0.002055f, 0.018821f, 0.003458f, - -0.010686f, -0.020049f, -0.001444f, 0.002426f, 0.014886f, 0.006975f, -0.008522f, 0.001457f, -0.157272f, 0.081004f, 0.019136f, -0.034467f, -0.025314f, 0.049876f, 0.028028f, -0.030879f, -0.007981f, -0.074647f, -0.030744f, 0.031119f, -0.063858f, 0.002028f, 0.011797f, -0.020042f, -0.042518f, -0.029646f, 0.057875f, 0.022692f, -0.011329f, -0.083283f, 0.028279f, 0.051657f, 0.030306f, -0.064604f, -0.042518f, -0.000206f, 0.070003f, 0.005740f, -0.016699f, 0.010512f, 0.002433f, 0.035176f, -0.092845f, -0.080966f, 0.099758f, 0.014946f, 0.041823f, -0.095243f, 0.020788f, -0.004783f, 0.069588f, -0.062789f, -0.011766f, -0.095498f, 0.033355f, 0.067917f, 0.016183f, -0.042731f, 0.027338f, 0.098801f, -0.044398f, -0.047932f, -0.037057f, 0.013572f, 0.004261f, 0.086586f, -0.025913f, 0.006124f, -0.046881f, 0.014856f, -0.051424f, -0.002259f, 0.033179f, -0.064941f, 0.061646f, 0.018108f, -0.044617f, -0.070216f, -0.042188f, -0.004100f, 0.062177f, -0.112923f, -0.024390f, 0.101074f, 0.013473f, -0.046446f, -0.021485f, -0.032936f, 0.095825f, -0.011205f, -0.100297f, -0.012253f, 0.000017f, -0.025341f, 0.040974f, -0.007615f, - -0.014025f, 0.030450f, -0.002757f, -0.021188f, -0.026273f, -0.003356f, -0.023167f, 0.006448f, 0.017072f, 0.021943f, -0.020165f, -0.015468f, 0.020894f, -0.014295f, 0.019785f, -0.011096f, -0.020122f, 0.026980f, -0.015142f, 0.024232f, 0.034215f, 0.001582f, -0.049593f, -0.004010f, -0.029567f, 0.011667f, 0.018299f, 0.011315f, -0.034670f, -0.000298f, -0.026189f, 0.023807f, -0.007381f, -0.015666f, -0.010023f, 0.004627f, 0.008360f, -0.019198f, 0.008487f, 0.103770f, 0.053756f, 0.023743f, 0.024501f, 0.024784f, -0.016181f, -0.016642f, -0.034768f, 0.004184f, 0.011681f, 0.008952f, -0.001729f, -0.060154f, 0.029015f, 0.011511f, -0.041323f, -0.035587f, -0.017743f, -0.020913f, 0.015803f, -0.015689f, -0.017386f, 0.004889f, -0.001193f, -0.032058f, 0.041033f, -0.029509f, -0.009218f, -0.030655f, -0.027343f, 0.019597f, -0.011525f, -0.004241f, 0.010479f, 0.012708f, -0.003116f, -0.040724f, 0.009856f, 0.062909f, 0.013680f, -0.099277f, -0.006078f, -0.021734f, -0.030608f, 0.020630f, 0.022515f, 0.051038f, 0.024851f, -0.064839f, 0.070226f, -0.017592f, -0.048419f, 0.145689f, -0.029265f, -0.012722f, -0.047995f, -0.116243f, - 0.053261f, 0.058686f, 0.019568f, 0.022005f, -0.099054f, 0.028589f, -0.007636f, -0.024283f, -0.017351f, 0.003719f, -0.009318f, 0.015265f, 0.018990f, 0.003839f, -0.014606f, -0.028654f, 0.030190f, 0.037520f, 0.052730f, -0.026302f, -0.005239f, 0.010906f, -0.007652f, 0.027304f, -0.067986f, 0.006304f, 0.012129f, -0.032199f, 0.005358f, -0.026880f, 0.010497f, 0.000176f, 0.008429f, -0.004708f, 0.001946f, 0.002303f, -0.001315f, -0.001243f, -0.009013f, -0.007392f, 0.018229f, -0.010395f, -0.000647f, 0.013109f, 0.003017f, 0.000262f, 0.022258f, -0.018695f, 0.013636f, 0.015612f, -0.000984f, -0.003564f, -0.018832f, 0.014878f, -0.035215f, -0.010255f, 0.022959f, 0.006259f, -0.009629f, -0.024196f, 0.007175f, -0.005922f, 0.028551f, 0.003677f, -0.059641f, -0.141111f, -0.239975f, 0.020008f, 0.243119f, 0.023938f, 0.517345f, 0.523859f, 0.189400f, 0.525720f, 0.303918f, -0.087873f, -0.008785f, -0.046894f, -0.398395f, -0.329214f, -0.232036f, -0.412374f, -0.395009f, -0.111853f, -0.248745f, -0.215611f, 0.048655f, 0.069863f, -0.053882f, 0.077552f, 0.112438f, 0.000590f, 0.007655f, 0.225309f, 0.149529f, 0.057958f, - 0.165787f, 0.311365f, 0.145988f, 0.172000f, 0.383997f, 0.152866f, 0.068938f, 0.333149f, 0.320191f, 0.014941f, 0.204782f, 0.363397f, 0.000622f, 0.092961f, 0.214845f, -0.007494f, -0.175688f, 0.087956f, -0.036667f, -0.337054f, -0.315217f, -0.288626f, -0.562888f, -0.831062f, -0.579226f, -0.808525f, -1.078585f, -0.760082f, -0.616867f, -0.832910f, -0.532613f, -0.255273f, -0.247023f, -0.045834f, 0.248608f, 0.502429f, 0.567726f, 0.760790f, 1.033884f, 1.016921f, 0.961109f, 1.083612f, 1.080994f, 0.883808f, 0.710722f, 0.762045f, 0.505887f, 0.181147f, 0.241313f, 0.060425f, -0.443536f, -0.284104f, -0.301394f, -0.618087f, -0.522815f, -0.374819f, -0.440091f, -0.508278f, -0.316806f, -0.275725f, -0.385095f, -0.316587f, -0.164766f, -0.263112f, -0.347929f, -0.207929f, -0.147269f, -0.274763f, -0.155394f, 0.038063f, -0.085907f, -0.097133f, 0.111529f, -0.002114f, -0.139536f, -0.016108f, -0.087565f, -0.315033f, -0.219689f, -0.164722f, -0.293185f, -0.129521f, 0.074111f, 0.142939f, 0.261227f, 0.435460f, 0.504776f, 0.530892f, 0.593900f, 0.633453f, 0.622662f, 0.575463f, 0.534549f, 0.455444f, 0.361343f, 0.223542f, - 0.166973f, 0.022380f, -0.139852f, -0.244595f, -0.394130f, -0.566022f, -0.551544f, -0.467958f, -0.424991f, -0.367175f, -0.251623f, -0.210445f, -0.188881f, -0.134454f, -0.088475f, -0.077547f, -0.031815f, -0.017270f, -0.012323f, 0.004104f, 0.036076f, 0.059851f, 0.074813f, 0.089332f, 0.101892f, 0.100483f, 0.097401f, 0.083984f, 0.082135f, 0.059591f, 0.046792f, 0.024186f, 0.014046f, -0.010400f, -0.026507f, -0.035605f, -0.033689f, -0.044670f, -0.044018f, -0.043727f, -0.044652f, -0.050850f, -0.036588f, -0.037501f, -0.023303f, 0.000729f, 0.029858f, 0.043269f, 0.070094f, 0.082096f, 0.090717f, 0.096561f, 0.109928f, 0.103489f, 0.099792f, 0.096143f, 0.085394f, 0.057418f, 0.050018f, 0.039778f, 0.025660f, 0.008237f, 0.007956f, -0.011711f, -0.022722f, -0.034749f, -0.045602f, -0.065646f, -0.070694f, -0.084511f, -0.094446f, -0.103406f, -0.102051f, -0.110166f, -0.107764f, -0.102410f, -0.088926f, -0.077857f, -0.052615f, -0.033868f, -0.010978f, 0.004057f, 0.027155f, 0.037348f, 0.050254f, 0.055629f, 0.062512f, 0.058876f, 0.062532f, 0.055856f, 0.055882f, 0.046673f, 0.044097f, 0.033738f, 0.028178f, 0.016465f, - 0.013704f, 0.003976f, 0.003570f, -0.002300f, -0.000550f, -0.005665f, -0.002634f, -0.006032f, -0.002140f, -0.005259f, -0.000920f, -0.004005f, -0.000001f, -0.003166f, 0.000956f, -0.002047f} - }, - { - {0.019166f, -0.000861f, -0.000939f, 0.006013f, -0.002401f, 0.006879f, -0.003604f, -0.008985f, 0.003216f, 0.008889f, 0.001402f, -0.001457f, 0.011976f, 0.000338f, 0.000573f, -0.004124f, -0.002182f, 0.018475f, 0.002661f, -0.012648f, -0.009224f, 0.013013f, -0.001109f, 0.013498f, 0.001035f, -0.002638f, -0.001193f, 0.010181f, 0.002111f, 0.021441f, 0.009552f, 0.005861f, -0.001073f, 0.004719f, 0.009811f, -0.002448f, -0.007164f, -0.009162f, -0.001660f, 0.008155f, 0.007146f, 0.010900f, 0.003164f, -0.006178f, -0.006285f, -0.002704f, 0.004662f, -0.001519f, 0.002604f, -0.001298f, -0.009662f, -0.007574f, 0.003071f, 0.007070f, 0.004469f, -0.003574f, -0.003935f, -0.000318f, 0.010718f, 0.005363f, -0.001078f, -0.002423f, 0.005017f, 0.003283f, 0.002203f, -0.005464f, 0.002814f, 0.005056f, -0.000565f, 0.007745f, 0.009277f, -0.016088f, 0.005984f, 0.003241f, 0.010565f, 0.003124f, 0.000923f, 0.004745f, -0.002034f, -0.007517f, -0.002690f, -0.004542f, -0.001414f, -0.000962f, 0.004647f, -0.000262f, -0.003557f, 0.000025f, 0.000628f, 0.002691f, -0.002278f, 0.000414f, -0.000368f, 0.000945f, 0.001483f, 0.000948f, - 0.001888f, 0.000157f, 0.001202f, -0.002421f, 0.005415f, 0.008310f, 0.018110f, -0.014732f, 0.003351f, -0.003272f, 0.000250f, -0.018917f, 0.001937f, 0.011301f, -0.016741f, -0.003528f, 0.011254f, 0.029708f, 0.004305f, -0.000252f, 0.002156f, -0.018688f, -0.000562f, 0.013689f, 0.012234f, 0.000284f, -0.000350f, 0.001081f, 0.006438f, 0.010667f, 0.011332f, 0.012159f, -0.005419f, 0.002589f, -0.000709f, 0.004658f, 0.001353f, 0.002985f, -0.018880f, -0.005235f, 0.002982f, 0.001494f, -0.010428f, -0.000387f, 0.007167f, -0.008372f, 0.006601f, 0.006013f, 0.011226f, 0.005192f, -0.004253f, 0.005537f, 0.012541f, -0.007060f, -0.011274f, 0.003740f, 0.002647f, 0.002155f, 0.005956f, -0.005063f, -0.009114f, -0.013673f, 0.011024f, -0.002079f, -0.002553f, -0.004484f, 0.004849f, -0.000222f, 0.007155f, 0.014051f, 0.002874f, 0.000906f, -0.000740f, -0.003458f, -0.010984f, 0.017056f, 0.004228f, -0.002096f, 0.008859f, -0.001444f, -0.010127f, -0.008971f, -0.001967f, 0.003312f, -0.014778f, 0.001165f, -0.008757f, -0.001710f, 0.004524f, -0.000311f, 0.002382f, -0.002701f, -0.004830f, -0.001082f, 0.002450f, 0.003296f, - 0.002488f, -0.000569f, -0.001481f, -0.000143f, 0.002419f, -0.001330f, -0.002462f, -0.001896f, 0.000471f, -0.000987f, -0.008907f, -0.007637f, -0.009659f, -0.013603f, 0.007591f, -0.000128f, -0.006575f, -0.002549f, -0.003386f, 0.003010f, -0.005472f, -0.009327f, 0.002079f, -0.006049f, 0.015959f, 0.021331f, 0.016780f, -0.011603f, -0.000502f, -0.000724f, 0.004448f, -0.006421f, 0.013152f, 0.008326f, -0.001941f, 0.006439f, 0.009961f, 0.000854f, 0.002372f, 0.003538f, 0.009676f, -0.000888f, 0.003564f, 0.011689f, 0.001130f, -0.000091f, -0.005144f, 0.008422f, -0.012714f, 0.005155f, -0.001830f, -0.002560f, 0.008377f, -0.008109f, -0.001087f, 0.000328f, -0.011060f, 0.004612f, -0.002277f, 0.005136f, -0.000414f, -0.004716f, 0.003283f, 0.003540f, -0.000639f, 0.009814f, -0.000757f, 0.011315f, -0.000229f, -0.007457f, -0.003396f, 0.000471f, -0.005178f, 0.010094f, 0.005187f, 0.008670f, 0.009730f, -0.004242f, -0.009753f, -0.006296f, -0.000073f, -0.001762f, -0.002128f, 0.008016f, 0.010007f, -0.001469f, -0.005579f, 0.003540f, 0.002685f, -0.003822f, -0.005328f, 0.001843f, -0.007625f, 0.001879f, -0.000209f, -0.000202f, - -0.002089f, -0.007125f, 0.001554f, -0.002785f, 0.000231f, 0.003238f, -0.000066f, -0.003624f, 0.001770f, -0.004983f, -0.000155f, 0.000354f, -0.001216f, 0.000453f, 0.000897f, -0.002712f, -0.000017f, 0.000365f, -0.003316f, 0.000719f, -0.001043f, -0.000171f, -0.001775f, -0.000018f, 0.000841f, 0.002874f, -0.028173f, -0.006620f, -0.008785f, -0.015207f, 0.005175f, 0.004009f, -0.001828f, 0.007103f, -0.000993f, 0.005999f, 0.008429f, -0.003686f, -0.009856f, -0.012385f, -0.004743f, -0.011531f, 0.000898f, 0.001306f, -0.005042f, 0.006591f, -0.005663f, 0.003550f, -0.002590f, -0.006562f, -0.017531f, -0.006788f, 0.001558f, 0.002791f, 0.004603f, -0.006481f, 0.004651f, 0.007083f, 0.002331f, 0.016028f, 0.003978f, -0.000370f, 0.012381f, -0.008710f, 0.007152f, 0.001219f, -0.004163f, -0.005883f, 0.007987f, 0.001118f, 0.002527f, -0.018831f, -0.003477f, -0.006192f, 0.018970f, 0.008176f, 0.006837f, 0.007745f, 0.008713f, 0.006939f, 0.009662f, -0.005059f, -0.002063f, 0.005969f, 0.009493f, -0.001224f, 0.011087f, -0.005910f, 0.002434f, -0.002349f, 0.009394f, 0.014107f, -0.021940f, 0.005809f, -0.005419f, 0.000758f, - -0.010344f, -0.005268f, 0.001744f, -0.003087f, -0.004435f, -0.008729f, -0.003948f, 0.004197f, -0.000199f, 0.009458f, -0.000975f, 0.003684f, 0.008161f, 0.013008f, -0.000469f, 0.003482f, -0.001500f, 0.006089f, 0.000983f, 0.002996f, -0.004002f, -0.001349f, 0.000447f, 0.002820f, -0.001777f, -0.002870f, 0.000161f, 0.000230f, -0.002254f, 0.000413f, 0.001335f, 0.000123f, 0.003795f, -0.001590f, -0.001744f, 0.000500f, 0.003311f, -0.001260f, 0.000096f, -0.001123f, 0.001982f, 0.003104f, -0.000400f, 0.002973f, 0.003195f, -0.000693f, -0.001340f, -0.000490f, 0.011017f, 0.006719f, 0.004008f, -0.002117f, 0.000925f, 0.001166f, 0.014214f, -0.011305f, 0.014257f, -0.001924f, 0.007776f, 0.014561f, -0.009123f, 0.011272f, -0.007059f, 0.005766f, 0.002221f, 0.017118f, 0.007595f, -0.009595f, -0.015722f, 0.003540f, -0.011788f, 0.009655f, -0.002418f, 0.012594f, -0.009421f, -0.001580f, -0.007546f, 0.004309f, 0.002803f, 0.003564f, -0.000952f, -0.001397f, -0.013738f, -0.006076f, 0.011277f, -0.009053f, -0.001841f, 0.007281f, 0.000332f, -0.007103f, 0.002279f, 0.000573f, -0.001600f, -0.006169f, 0.012318f, 0.003871f, - -0.017597f, -0.007995f, -0.014212f, -0.002550f, -0.012572f, -0.021698f, -0.004957f, 0.009370f, 0.026616f, 0.005757f, 0.002167f, 0.012486f, -0.000367f, -0.009903f, -0.008631f, 0.006939f, 0.002695f, 0.004660f, 0.007651f, -0.018928f, -0.004677f, -0.017417f, -0.003853f, 0.004788f, -0.006917f, -0.016107f, 0.001577f, 0.006863f, -0.003477f, -0.006037f, -0.002873f, 0.002711f, -0.002432f, -0.000749f, 0.003462f, -0.002277f, -0.002424f, -0.003311f, -0.002407f, -0.007421f, 0.002577f, -0.001993f, 0.003329f, -0.001323f, 0.001926f, 0.004558f, 0.000599f, -0.001333f, -0.000487f, -0.003998f, -0.002652f, -0.006285f, -0.005694f, 0.000778f, 0.000621f, -0.000083f, 0.002154f, 0.003548f, 0.002482f, -0.000083f, 0.002254f, 0.001871f, -0.001755f, 0.001339f, 0.001418f, -0.003320f, -0.001403f, 0.030469f, 0.007463f, 0.022013f, -0.010232f, -0.001616f, -0.007232f, -0.001881f, 0.023738f, -0.020280f, 0.006915f, 0.002109f, 0.031034f, 0.016263f, 0.020650f, 0.003568f, -0.004931f, 0.009493f, -0.006576f, -0.025770f, 0.005030f, 0.001279f, 0.003163f, 0.019993f, 0.002078f, -0.012030f, -0.000886f, 0.000352f, 0.006556f, 0.006803f, - -0.000449f, -0.002821f, 0.008390f, -0.009822f, -0.002502f, -0.005063f, -0.002320f, 0.002309f, 0.000522f, 0.017588f, 0.002711f, 0.013771f, 0.016235f, 0.004270f, 0.014336f, -0.001234f, 0.004844f, 0.008441f, -0.009163f, -0.014087f, 0.001890f, 0.013820f, -0.022227f, 0.006476f, -0.017024f, -0.016224f, -0.009697f, -0.004631f, -0.014964f, -0.014814f, -0.015348f, -0.008126f, -0.003716f, 0.010212f, 0.000389f, 0.012271f, 0.002022f, -0.010445f, 0.015843f, -0.016518f, -0.006062f, -0.006947f, -0.006576f, -0.008844f, -0.011271f, 0.016117f, 0.012814f, -0.007313f, 0.006359f, 0.004945f, 0.013015f, -0.000136f, 0.009436f, -0.004761f, 0.011827f, 0.005725f, -0.006779f, 0.000215f, -0.006114f, 0.007267f, -0.006994f, 0.000607f, 0.005882f, 0.000256f, 0.004529f, -0.001437f, 0.000831f, 0.002883f, -0.000907f, -0.003310f, 0.003026f, -0.001019f, 0.000624f, -0.006197f, -0.004874f, -0.004980f, -0.003639f, -0.000808f, -0.001982f, -0.004334f, -0.000075f, 0.000699f, -0.001841f, 0.000319f, -0.000027f, -0.002593f, 0.000649f, -0.016585f, -0.016590f, -0.009841f, -0.010165f, -0.005496f, -0.004155f, -0.019885f, -0.015892f, -0.013527f, - -0.002008f, -0.001211f, -0.002439f, 0.013714f, 0.001444f, 0.007056f, 0.010621f, 0.012305f, 0.002004f, 0.024103f, 0.030304f, -0.000680f, 0.008819f, 0.006770f, -0.003613f, 0.013173f, 0.007232f, -0.027239f, -0.000848f, -0.009462f, 0.001634f, 0.020963f, 0.008425f, -0.021794f, -0.005715f, 0.009613f, 0.009656f, 0.001269f, 0.027887f, -0.011590f, 0.011280f, 0.011294f, 0.012455f, 0.007191f, 0.014498f, -0.024554f, 0.009031f, -0.009622f, 0.014608f, 0.000478f, 0.006326f, -0.018452f, 0.013558f, 0.009714f, -0.002316f, 0.009403f, -0.001531f, 0.002576f, -0.000123f, -0.009658f, 0.002551f, -0.006200f, 0.006060f, -0.007634f, 0.009470f, 0.002892f, 0.023632f, 0.017559f, -0.005503f, 0.006228f, -0.019389f, 0.016858f, -0.005266f, 0.010311f, 0.018335f, 0.017895f, 0.000889f, 0.018279f, 0.012719f, 0.008607f, 0.009352f, 0.016789f, 0.001710f, 0.003569f, -0.013734f, -0.002462f, -0.003919f, 0.003089f, -0.009899f, 0.001414f, -0.007206f, 0.002181f, -0.007179f, 0.002133f, -0.002622f, -0.004586f, -0.004227f, 0.002903f, 0.000336f, -0.002351f, -0.001679f, -0.005930f, -0.001872f, 0.000956f, -0.001683f, -0.004300f, - 0.000648f, 0.004296f, -0.010031f, -0.006299f, -0.005528f, 0.003974f, -0.006145f, 0.003707f, 0.000061f, 0.002093f, -0.005088f, -0.007609f, -0.001678f, 0.001392f, 0.016012f, -0.014277f, -0.003673f, 0.012651f, -0.006725f, 0.021712f, -0.006902f, -0.015451f, 0.028986f, 0.039270f, 0.008789f, -0.015596f, 0.010910f, -0.008258f, 0.016203f, 0.009331f, -0.003480f, -0.016539f, -0.010730f, -0.028075f, 0.007375f, 0.011866f, -0.024662f, -0.003016f, 0.014402f, 0.003671f, -0.001157f, 0.000511f, -0.002987f, -0.013454f, 0.003293f, 0.016513f, 0.000719f, 0.003509f, 0.006045f, 0.023421f, -0.015441f, -0.000501f, 0.017115f, -0.015686f, 0.022974f, 0.001129f, 0.032271f, -0.026880f, -0.024126f, 0.013238f, 0.001238f, -0.003276f, 0.006973f, -0.002274f, 0.009019f, 0.005455f, 0.017970f, 0.017024f, -0.014065f, 0.002531f, -0.009174f, -0.005617f, 0.010777f, -0.001383f, -0.005468f, -0.002435f, 0.000563f, 0.015988f, -0.030573f, 0.023295f, -0.007257f, -0.010472f, 0.017375f, -0.014024f, 0.013943f, -0.018853f, -0.010506f, -0.003532f, -0.013909f, -0.004872f, -0.009802f, -0.015683f, -0.010472f, 0.003377f, -0.003499f, -0.003799f, - -0.000161f, -0.007325f, -0.002260f, -0.001122f, 0.009767f, -0.000538f, 0.001478f, 0.003867f, -0.004015f, -0.001634f, -0.003387f, 0.002316f, 0.004819f, 0.001261f, -0.001877f, 0.011359f, 0.000143f, 0.008418f, -0.009103f, -0.005971f, -0.005371f, -0.003962f, 0.004433f, 0.002077f, 0.000398f, 0.006591f, -0.004847f, 0.005023f, 0.002094f, 0.004669f, 0.002760f, 0.000625f, -0.005728f, -0.019397f, -0.014955f, -0.006447f, -0.014031f, -0.021155f, -0.004548f, 0.007810f, 0.025999f, 0.004320f, -0.015825f, -0.029081f, -0.006169f, 0.009128f, -0.005183f, 0.031396f, 0.009771f, -0.010997f, -0.022229f, -0.027600f, -0.052513f, -0.004202f, -0.005867f, 0.020167f, 0.014780f, -0.010660f, 0.001283f, -0.008230f, -0.004618f, 0.018932f, -0.000578f, 0.001083f, -0.002378f, 0.021468f, 0.003542f, -0.006337f, -0.001143f, -0.000710f, 0.005707f, -0.019381f, -0.006212f, -0.007573f, 0.030713f, 0.007263f, -0.032468f, 0.008436f, -0.016889f, -0.009378f, 0.004689f, -0.030059f, 0.009299f, 0.021812f, 0.019190f, 0.015112f, 0.003589f, 0.006154f, -0.001055f, 0.003285f, -0.019088f, 0.006990f, -0.029839f, -0.005627f, 0.016965f, 0.006315f, - 0.017382f, 0.017308f, 0.014161f, -0.009661f, -0.022044f, -0.019127f, -0.014936f, 0.004912f, 0.005869f, 0.010253f, 0.010032f, 0.002278f, 0.006680f, 0.021569f, 0.030010f, -0.007134f, 0.010650f, -0.007405f, -0.008163f, 0.009280f, -0.013273f, -0.004591f, 0.000475f, -0.008294f, 0.007763f, -0.007197f, -0.006399f, -0.003416f, 0.001817f, -0.001838f, 0.004200f, 0.000146f, 0.006108f, -0.001390f, -0.003807f, -0.001662f, -0.003728f, -0.009440f, 0.002483f, 0.005176f, -0.000520f, 0.003425f, -0.000979f, 0.004661f, 0.008702f, 0.008465f, 0.006478f, -0.006663f, -0.003470f, 0.006526f, -0.002025f, -0.002520f, 0.000552f, -0.001021f, 0.006439f, -0.001403f, -0.000428f, -0.000937f, 0.015287f, 0.027205f, 0.031395f, 0.022792f, 0.038824f, -0.018137f, 0.027580f, -0.023616f, -0.018605f, 0.020519f, 0.026118f, 0.030950f, -0.031925f, -0.000130f, 0.007997f, -0.023565f, 0.011152f, -0.010329f, -0.016769f, 0.019137f, -0.024859f, 0.026995f, -0.025551f, 0.025293f, -0.018346f, -0.006693f, -0.001704f, -0.033321f, -0.004659f, 0.036862f, -0.009435f, -0.026244f, 0.005607f, 0.017148f, -0.019199f, 0.009563f, 0.039779f, 0.021460f, - 0.008043f, 0.017667f, -0.021063f, 0.014119f, -0.012656f, -0.036193f, -0.011007f, -0.009422f, 0.002683f, 0.016500f, 0.020306f, -0.008937f, -0.015900f, 0.014534f, 0.000099f, 0.011138f, 0.006917f, -0.005848f, 0.001982f, -0.014362f, 0.002195f, 0.004645f, -0.000192f, 0.004791f, 0.032741f, -0.003998f, 0.003241f, 0.009423f, 0.001956f, 0.004087f, -0.016649f, -0.018161f, 0.012665f, -0.021630f, -0.029467f, -0.030851f, 0.024049f, 0.015635f, 0.004637f, -0.001603f, -0.003571f, 0.011554f, -0.001813f, -0.008599f, 0.011025f, 0.030356f, 0.020475f, -0.007927f, -0.005140f, 0.009460f, 0.005429f, -0.002041f, -0.004791f, 0.003510f, 0.004278f, -0.001183f, 0.001249f, 0.016529f, 0.003944f, 0.002444f, 0.006452f, -0.005253f, 0.001211f, 0.005330f, 0.010971f, -0.000955f, 0.000799f, -0.010611f, 0.003487f, -0.005472f, -0.004058f, 0.011302f, 0.009004f, 0.000694f, 0.007062f, -0.005965f, -0.002915f, 0.003478f, 0.000085f, -0.003107f, -0.006152f, -0.006548f, 0.004290f, 0.002042f, -0.002874f, 0.003960f, -0.025180f, -0.040001f, 0.014239f, 0.051927f, 0.025431f, -0.009754f, -0.040165f, -0.013975f, 0.002563f, 0.005585f, - -0.007806f, 0.019696f, 0.013303f, -0.014620f, -0.007554f, -0.001987f, -0.026584f, 0.036896f, -0.016829f, 0.013121f, -0.003093f, -0.008742f, -0.032394f, 0.010573f, 0.006713f, -0.004077f, 0.003900f, 0.014464f, -0.005307f, 0.036070f, -0.008105f, -0.005553f, 0.030100f, -0.003407f, -0.021646f, -0.019381f, -0.037380f, 0.005091f, -0.008321f, -0.011650f, -0.008175f, -0.027450f, -0.011511f, -0.025710f, 0.002704f, -0.022635f, 0.020376f, -0.012813f, -0.000461f, 0.006303f, 0.002492f, 0.011745f, -0.010894f, -0.027778f, 0.012025f, -0.003240f, 0.006852f, -0.006247f, -0.002849f, 0.000777f, 0.026661f, 0.039927f, 0.010808f, -0.012592f, 0.013762f, 0.014468f, 0.015826f, -0.006572f, -0.013417f, 0.020342f, 0.009597f, 0.027199f, 0.006283f, 0.007237f, 0.000720f, 0.008153f, 0.024473f, 0.033454f, 0.016426f, 0.005621f, 0.012530f, 0.005263f, -0.007053f, -0.022974f, -0.014604f, 0.002578f, 0.011063f, 0.001722f, -0.000632f, -0.008623f, -0.003241f, 0.004678f, 0.003141f, -0.018164f, -0.003495f, 0.004066f, -0.000815f, -0.009059f, -0.007606f, -0.010123f, 0.001860f, -0.001807f, 0.006830f, 0.012823f, 0.007504f, 0.000398f, - -0.004333f, 0.007838f, 0.009400f, 0.000611f, 0.003101f, -0.012681f, -0.000527f, -0.004307f, -0.013041f, 0.002717f, 0.002300f, -0.011609f, -0.001261f, -0.002728f, 0.004304f, -0.004515f, 0.010839f, 0.000052f, -0.002653f, 0.014631f, 0.077772f, 0.001722f, -0.020532f, 0.064352f, 0.032913f, 0.028371f, 0.056363f, 0.055701f, 0.016222f, 0.017633f, 0.014270f, 0.060551f, 0.003339f, -0.021526f, 0.026419f, 0.005485f, -0.023497f, -0.026787f, 0.023544f, 0.022518f, 0.043804f, -0.004380f, 0.003354f, 0.000481f, 0.006158f, -0.026015f, 0.029341f, 0.020182f, 0.009131f, -0.020232f, 0.031040f, -0.009463f, -0.001467f, -0.041099f, -0.008786f, -0.003210f, -0.002444f, -0.021731f, 0.014315f, -0.020222f, -0.011353f, -0.011895f, 0.005999f, -0.014048f, -0.018731f, -0.026285f, 0.027794f, -0.020037f, 0.029549f, 0.012879f, 0.024292f, 0.007331f, -0.024433f, -0.001374f, -0.039368f, -0.018443f, -0.021401f, 0.008108f, -0.027305f, -0.015130f, -0.004863f, 0.000006f, 0.028577f, 0.002742f, -0.004341f, -0.045786f, 0.018165f, 0.015169f, -0.000968f, -0.000705f, -0.022948f, 0.017372f, 0.002024f, -0.020102f, 0.054028f, 0.011795f, - -0.006931f, -0.000996f, -0.021644f, 0.003251f, 0.027108f, -0.007510f, -0.002156f, -0.030350f, -0.017680f, 0.010506f, -0.004127f, -0.014627f, 0.017568f, 0.010314f, -0.017788f, 0.015499f, -0.006121f, 0.004635f, -0.005919f, 0.015152f, 0.003413f, -0.002863f, 0.000487f, 0.003349f, -0.021455f, -0.000193f, -0.007897f, 0.005943f, 0.007419f, 0.010077f, -0.008787f, 0.007227f, 0.005818f, 0.004159f, 0.007939f, 0.008847f, -0.000637f, 0.006705f, -0.010316f, 0.017708f, -0.008196f, 0.014903f, -0.010616f, 0.006322f, -0.023616f, -0.043311f, 0.013302f, 0.013043f, -0.013400f, 0.028190f, -0.031171f, 0.033859f, -0.024427f, -0.014228f, 0.010899f, 0.007834f, 0.087390f, 0.034144f, 0.013091f, -0.054537f, -0.001451f, -0.012947f, -0.028905f, -0.008402f, -0.010565f, -0.009572f, -0.003236f, -0.045355f, -0.000873f, -0.017164f, 0.000562f, 0.022073f, -0.024057f, 0.028644f, -0.009392f, -0.031716f, -0.028289f, 0.022691f, 0.017412f, -0.007099f, -0.015619f, 0.028942f, -0.015621f, -0.014762f, 0.022756f, -0.000660f, 0.007003f, -0.023455f, -0.000790f, -0.013795f, 0.029187f, -0.004412f, 0.041869f, -0.015673f, 0.006293f, 0.012603f, - -0.001196f, 0.001587f, 0.012774f, -0.027010f, -0.004328f, 0.034389f, 0.002792f, 0.009428f, -0.000319f, -0.027917f, 0.011927f, -0.019494f, 0.009919f, 0.030059f, 0.039023f, 0.042536f, 0.044805f, -0.009688f, 0.015726f, -0.000382f, 0.024044f, 0.054277f, -0.059637f, 0.046342f, -0.027571f, 0.012437f, 0.037276f, -0.023546f, 0.002401f, 0.011678f, 0.010166f, -0.002811f, 0.025945f, -0.010082f, -0.008204f, 0.010943f, -0.006222f, 0.024965f, -0.003707f, 0.009444f, -0.020146f, -0.003306f, -0.000602f, -0.016261f, -0.006827f, -0.020505f, 0.000214f, 0.005886f, 0.001990f, 0.022696f, -0.007504f, 0.001499f, 0.002452f, 0.009627f, 0.002376f, 0.009710f, -0.013474f, 0.010102f, 0.003114f, -0.000609f, 0.007223f, 0.009902f, -0.011330f, 0.010286f, -0.021786f, -0.019292f, 0.013435f, -0.006496f, -0.015456f, -0.002264f, 0.006324f, -0.009975f, 0.017538f, -0.020966f, -0.046049f, -0.009001f, 0.009350f, 0.000600f, 0.010839f, -0.034269f, -0.004606f, -0.007052f, -0.048670f, -0.037753f, 0.019418f, 0.020182f, 0.009407f, 0.013901f, -0.024884f, -0.012281f, -0.017618f, 0.053216f, 0.012859f, 0.001422f, 0.039976f, 0.022908f, - 0.020144f, 0.018005f, 0.015776f, -0.028176f, 0.020317f, 0.008143f, -0.008544f, 0.015828f, -0.014077f, -0.014074f, 0.027935f, -0.012162f, 0.017651f, 0.036663f, 0.001411f, 0.006963f, -0.000518f, 0.002306f, -0.007857f, -0.021632f, -0.027081f, -0.044333f, 0.018287f, -0.037566f, 0.014232f, 0.014505f, 0.019026f, 0.000043f, 0.001316f, -0.005335f, -0.028668f, -0.013777f, 0.014833f, -0.010089f, 0.015305f, 0.036674f, -0.011110f, 0.028034f, 0.013083f, 0.003035f, -0.001401f, -0.010118f, -0.026506f, -0.001215f, -0.035886f, -0.012628f, 0.038894f, -0.020756f, 0.006360f, -0.063894f, 0.030511f, -0.011907f, 0.009989f, -0.049323f, -0.043560f, 0.004051f, 0.011989f, 0.022438f, -0.050579f, -0.005470f, 0.000891f, 0.034552f, 0.028633f, 0.031972f, -0.009963f, 0.000592f, 0.005135f, 0.016678f, 0.004265f, 0.009133f, 0.026775f, 0.014959f, -0.009821f, 0.009527f, 0.002872f, 0.001808f, -0.000283f, -0.005718f, -0.021579f, 0.007598f, -0.010291f, 0.003184f, 0.008980f, -0.000367f, 0.002265f, -0.000384f, 0.009014f, -0.005488f, 0.036061f, 0.009615f, -0.001073f, 0.019839f, 0.012414f, 0.001567f, 0.006330f, -0.000703f, - -0.015596f, 0.020853f, -0.006505f, 0.002720f, 0.025413f, 0.013816f, -0.007446f, -0.000005f, -0.009606f, 0.016391f, 0.011815f, 0.013979f, 0.012434f, 0.038061f, -0.090153f, -0.022180f, -0.053555f, 0.018067f, -0.048099f, -0.016126f, -0.054510f, 0.014575f, -0.028435f, -0.021804f, -0.004676f, -0.046288f, -0.016853f, -0.049595f, -0.025068f, -0.057423f, 0.012359f, -0.053128f, -0.021031f, -0.027606f, -0.015494f, -0.014596f, -0.012436f, -0.050716f, -0.029026f, -0.038585f, -0.019827f, -0.011148f, 0.021869f, -0.003176f, 0.016316f, -0.031566f, -0.005169f, 0.001817f, -0.036398f, 0.007029f, -0.002581f, 0.003081f, 0.009493f, -0.036814f, -0.002113f, 0.013577f, -0.004586f, 0.015305f, 0.030535f, 0.055383f, -0.046040f, 0.002829f, 0.061526f, 0.000299f, 0.030184f, -0.021577f, 0.038114f, 0.006973f, -0.009144f, -0.051183f, -0.030174f, 0.042503f, 0.026204f, 0.041504f, 0.001485f, -0.028951f, 0.010542f, 0.014998f, 0.029647f, -0.055657f, 0.000366f, 0.010545f, -0.030757f, -0.010238f, -0.013315f, -0.018632f, -0.044638f, 0.068984f, -0.012707f, -0.022162f, -0.014189f, 0.014304f, 0.016532f, -0.038985f, -0.036271f, -0.001437f, - 0.011513f, 0.001810f, 0.000090f, -0.007603f, -0.013198f, -0.000167f, 0.034729f, 0.021538f, -0.000254f, -0.028624f, -0.019837f, 0.003217f, -0.011069f, 0.007585f, 0.009151f, 0.004680f, -0.003042f, -0.014765f, 0.006015f, 0.007321f, -0.004108f, 0.011083f, -0.006469f, -0.025418f, -0.012098f, -0.001451f, 0.007361f, -0.001888f, -0.008199f, -0.037194f, -0.014893f, -0.008517f, 0.002790f, 0.004668f, -0.016098f, -0.028811f, 0.011264f, 0.017305f, -0.015308f, 0.000693f, -0.013461f, 0.014574f, -0.004717f, -0.025554f, 0.038352f, -0.064726f, -0.000681f, -0.012822f, 0.027988f, -0.014242f, -0.039890f, 0.034861f, -0.070024f, -0.060375f, -0.049834f, 0.028598f, -0.014816f, 0.001624f, -0.027167f, -0.025709f, -0.030044f, 0.016921f, 0.014654f, 0.048859f, 0.023010f, 0.009917f, 0.045495f, -0.012049f, 0.016521f, -0.016350f, 0.014254f, 0.008272f, 0.027130f, 0.043841f, 0.022919f, -0.009055f, -0.026733f, -0.015922f, -0.005418f, 0.024652f, -0.008057f, 0.006922f, 0.000989f, -0.011239f, 0.023322f, -0.001409f, 0.019161f, 0.014242f, -0.037218f, 0.030823f, 0.056575f, 0.008873f, 0.047340f, 0.045824f, 0.020829f, 0.015222f, - 0.000190f, 0.024250f, -0.014970f, -0.054876f, -0.017804f, 0.040891f, 0.000492f, -0.020128f, 0.021117f, 0.058042f, -0.013135f, 0.004520f, -0.041840f, 0.041403f, 0.037154f, -0.002608f, 0.012035f, -0.018843f, 0.095228f, -0.059598f, -0.051699f, -0.048819f, 0.004276f, 0.001829f, -0.014261f, 0.042496f, -0.059408f, -0.000924f, -0.037916f, 0.014648f, 0.017026f, -0.002582f, 0.041486f, 0.009626f, -0.003329f, -0.022274f, -0.000097f, 0.010538f, 0.030294f, -0.020532f, -0.026374f, 0.011189f, -0.015632f, -0.004056f, 0.003889f, 0.007336f, 0.002675f, 0.000287f, -0.001769f, -0.024869f, 0.002604f, 0.006115f, 0.017401f, -0.014666f, -0.008146f, 0.009806f, 0.004808f, 0.006861f, 0.000849f, -0.016204f, -0.001599f, -0.018410f, -0.013867f, 0.018785f, 0.009718f, 0.010637f, 0.007557f, -0.000502f, 0.003882f, -0.004920f, 0.011564f, 0.001688f, -0.004812f, -0.000959f, -0.016023f, -0.005983f, -0.010553f, 0.006716f, 0.104581f, -0.023516f, 0.058508f, 0.099330f, -0.033501f, 0.047310f, 0.021711f, -0.063538f, 0.058023f, 0.008131f, -0.027009f, 0.041788f, 0.018563f, 0.039223f, 0.000154f, -0.034213f, 0.032278f, 0.010327f, - 0.000652f, 0.009402f, -0.009140f, -0.036165f, -0.020722f, -0.017638f, -0.030295f, -0.023457f, -0.005355f, 0.023027f, -0.020714f, -0.013348f, -0.029840f, 0.005791f, 0.003063f, 0.004223f, 0.042066f, -0.025537f, 0.010491f, -0.023740f, -0.012593f, 0.023240f, -0.018612f, -0.043334f, -0.054397f, 0.062522f, 0.028520f, -0.016320f, 0.044004f, -0.040706f, -0.034638f, -0.021981f, -0.003068f, 0.005746f, 0.000742f, -0.037943f, -0.026982f, -0.029815f, -0.063678f, -0.040714f, -0.034108f, 0.011725f, 0.021944f, -0.002426f, 0.037659f, 0.006416f, -0.037933f, -0.033752f, 0.050654f, -0.043734f, 0.006467f, 0.043349f, -0.005391f, -0.076440f, 0.053319f, -0.028607f, 0.008782f, 0.002753f, 0.044161f, -0.011191f, -0.016552f, -0.002883f, -0.024860f, 0.012496f, -0.043071f, 0.014079f, -0.055460f, -0.036328f, 0.021778f, -0.024276f, -0.006605f, -0.003707f, -0.032860f, 0.010192f, -0.019119f, 0.015194f, -0.004865f, -0.001249f, 0.001867f, 0.019975f, -0.014715f, -0.012489f, 0.003792f, -0.021543f, -0.009076f, 0.002545f, -0.013500f, -0.015279f, -0.009920f, -0.006863f, -0.015780f, -0.009534f, 0.022628f, -0.018922f, 0.008821f, 0.012941f, - -0.003156f, 0.013883f, -0.019221f, 0.001513f, -0.013475f, 0.027655f, 0.005426f, 0.009549f, -0.019674f, 0.024212f, 0.017198f, 0.018387f, 0.008152f, 0.001810f, 0.006204f, 0.013205f, -0.013466f, 0.000862f, -0.011195f, -0.050535f, 0.030389f, -0.014322f, 0.051261f, 0.035143f, -0.081343f, -0.010262f, 0.008885f, -0.049654f, -0.007855f, -0.008125f, 0.060475f, 0.043478f, 0.040484f, 0.050143f, -0.001626f, -0.035135f, -0.026962f, -0.027966f, 0.001573f, -0.077835f, 0.009591f, 0.066657f, -0.060515f, -0.109684f, 0.011418f, -0.041044f, 0.081167f, -0.000540f, 0.002902f, 0.054254f, -0.024616f, 0.011147f, -0.002269f, -0.014740f, 0.047361f, -0.013595f, 0.024079f, 0.079212f, -0.058055f, -0.033269f, -0.052894f, 0.026449f, 0.004644f, 0.053031f, -0.030181f, 0.020893f, 0.003056f, 0.048300f, 0.028678f, -0.023622f, -0.015500f, 0.018273f, -0.008519f, -0.002153f, -0.033908f, -0.033656f, 0.017874f, -0.007514f, -0.009717f, -0.019139f, 0.043939f, -0.016593f, -0.017374f, 0.073361f, 0.078624f, 0.050803f, -0.066459f, -0.005916f, -0.020759f, 0.025897f, 0.097856f, -0.012355f, -0.074246f, -0.004875f, -0.030479f, 0.043851f, - 0.019802f, -0.049882f, 0.026459f, 0.019379f, 0.025814f, -0.048128f, -0.017165f, 0.003582f, 0.042814f, 0.002640f, -0.006684f, 0.007005f, -0.014439f, 0.003374f, 0.042784f, 0.020710f, -0.017575f, -0.021306f, -0.004679f, 0.013447f, 0.017211f, 0.022531f, -0.021112f, -0.008062f, -0.038837f, -0.008160f, 0.024858f, -0.024469f, -0.003684f, -0.015105f, -0.013857f, -0.022982f, -0.004654f, 0.015691f, -0.003341f, -0.001641f, 0.004090f, 0.010011f, -0.010183f, -0.029323f, -0.030277f, 0.018402f, 0.014301f, 0.025702f, -0.012654f, 0.018871f, 0.055326f, 0.002925f, -0.032834f, -0.005278f, 0.003166f, -0.002930f, -0.020474f, -0.008398f, 0.006264f, 0.016089f, -0.003252f, -0.047672f, 0.006976f, -0.039076f, 0.035988f, 0.021069f, -0.038651f, 0.065783f, 0.099137f, 0.003064f, -0.004813f, -0.033741f, -0.034569f, 0.006043f, 0.005559f, -0.016495f, 0.089681f, -0.007839f, 0.066855f, 0.053972f, -0.067845f, -0.001863f, -0.022840f, -0.072141f, 0.018127f, 0.017060f, 0.039425f, 0.068045f, -0.002179f, -0.019076f, 0.022171f, 0.024858f, 0.053234f, 0.022632f, 0.004786f, 0.044206f, 0.046118f, 0.016201f, -0.010731f, 0.040574f, - 0.017857f, 0.048702f, 0.010274f, 0.014266f, 0.030194f, 0.051574f, -0.008634f, -0.040316f, -0.047049f, -0.015006f, -0.016405f, 0.080960f, 0.044120f, 0.124795f, -0.005867f, -0.062398f, 0.055173f, -0.018610f, -0.021549f, -0.018458f, -0.042393f, 0.006611f, 0.023738f, -0.000553f, -0.023760f, 0.088800f, -0.017689f, 0.104729f, -0.028605f, 0.056540f, 0.004892f, -0.017229f, -0.056959f, -0.080911f, 0.076236f, -0.006970f, -0.013021f, -0.022949f, 0.070865f, 0.000391f, -0.074336f, 0.136752f, 0.042886f, 0.015281f, -0.015615f, -0.056787f, 0.028710f, 0.001982f, 0.028906f, -0.026155f, 0.020642f, 0.010815f, -0.012796f, -0.019202f, 0.003606f, -0.023300f, -0.011065f, -0.026526f, 0.003250f, -0.004282f, -0.000255f, 0.009409f, 0.022380f, -0.022194f, 0.008835f, -0.010599f, -0.000550f, 0.030393f, 0.020084f, -0.010235f, -0.037316f, -0.000726f, -0.002078f, 0.005459f, 0.034358f, -0.021709f, -0.012958f, 0.009074f, 0.021630f, -0.030660f, 0.002246f, 0.021026f, -0.000302f, -0.001901f, -0.032352f, 0.017370f, -0.000848f, 0.015871f, -0.033797f, 0.004367f, 0.014611f, 0.011913f, 0.017025f, -0.032076f, 0.027640f, -0.034017f, - 0.021908f, 0.092803f, -0.055324f, -0.034904f, 0.007075f, 0.017068f, -0.010877f, 0.065778f, 0.050506f, 0.051822f, 0.016959f, 0.025771f, 0.042858f, 0.027091f, -0.016080f, -0.025422f, -0.058513f, -0.009050f, 0.031527f, 0.011278f, 0.006499f, -0.021299f, -0.055360f, -0.015702f, -0.008105f, 0.056387f, 0.000383f, -0.006358f, 0.042119f, -0.006416f, 0.011374f, 0.009404f, -0.095042f, 0.024611f, 0.025192f, -0.016207f, -0.040847f, 0.008027f, -0.053760f, -0.026846f, -0.082140f, 0.025053f, -0.068641f, -0.135009f, 0.015344f, -0.001529f, 0.094938f, -0.002953f, 0.032008f, 0.079011f, -0.013260f, -0.020081f, 0.034600f, -0.000378f, -0.069027f, -0.023678f, 0.008663f, 0.011750f, 0.050299f, 0.021401f, 0.044753f, 0.039395f, -0.028463f, -0.020722f, 0.018866f, 0.057822f, -0.024306f, -0.011757f, -0.053163f, -0.036160f, 0.013667f, -0.070990f, 0.020323f, -0.079776f, 0.014869f, -0.020821f, 0.056495f, -0.024532f, 0.039947f, -0.085527f, -0.017826f, 0.012008f, -0.051409f, 0.013185f, 0.008714f, 0.009101f, -0.038854f, 0.020501f, -0.038050f, 0.011030f, -0.003212f, -0.015803f, -0.007217f, -0.003522f, 0.011746f, -0.012894f, - -0.006328f, -0.010296f, 0.024246f, -0.015733f, 0.014047f, -0.035996f, 0.018793f, -0.001864f, -0.003200f, 0.005429f, 0.034826f, 0.012435f, 0.014731f, -0.041782f, 0.005206f, -0.017007f, -0.052138f, 0.021051f, -0.016872f, -0.012995f, -0.019411f, 0.019534f, -0.009580f, 0.009519f, 0.010656f, -0.004828f, 0.002065f, -0.012540f, 0.003446f, 0.010794f, -0.002682f, 0.001796f, -0.001574f, -0.019880f, 0.072710f, 0.077255f, 0.180933f, 0.021204f, -0.101064f, -0.076083f, -0.055795f, -0.064657f, 0.126700f, 0.168823f, 0.057419f, -0.016209f, -0.052970f, 0.001789f, -0.064133f, 0.070669f, 0.067055f, 0.019768f, 0.009852f, -0.041987f, -0.005902f, 0.077782f, 0.018325f, 0.031209f, 0.026532f, 0.081628f, 0.068916f, -0.026565f, -0.060572f, -0.080382f, -0.053951f, -0.008115f, 0.022571f, 0.073389f, 0.044244f, -0.015387f, 0.040001f, -0.055802f, -0.018782f, -0.125414f, -0.019602f, 0.123341f, 0.095568f, -0.019249f, 0.250233f, 0.078387f, 0.007544f, -0.137125f, -0.023147f, -0.011801f, -0.031939f, 0.034977f, 0.019662f, 0.029633f, 0.052702f, -0.111892f, -0.120265f, -0.060574f, -0.081054f, -0.011630f, 0.027773f, 0.101183f, - -0.060288f, 0.037006f, 0.157999f, 0.078846f, 0.027719f, 0.044211f, 0.032451f, -0.095300f, -0.157443f, 0.080656f, -0.038747f, 0.034727f, 0.084726f, 0.093435f, 0.008522f, -0.056509f, -0.074184f, -0.060705f, 0.065568f, 0.037755f, 0.011662f, 0.065179f, -0.064676f, -0.011278f, -0.010117f, -0.028744f, -0.033331f, -0.002856f, -0.000671f, 0.021158f, 0.006862f, -0.009308f, 0.000481f, -0.000802f, 0.001385f, 0.005600f, 0.012382f, 0.018848f, -0.018525f, -0.025694f, -0.087947f, -0.048272f, -0.043317f, 0.052128f, 0.031148f, 0.018654f, -0.071947f, -0.070728f, -0.113693f, -0.031072f, 0.045119f, 0.057324f, 0.074866f, 0.029282f, 0.022111f, 0.008738f, 0.007522f, -0.002097f, 0.017041f, -0.003959f, 0.053711f, 0.037863f, 0.007888f, 0.000468f, 0.000675f, -0.009130f, 0.000177f, -0.006403f, -0.038493f, -0.165506f, -0.039484f, 0.092317f, 0.176671f, 0.155718f, 0.373212f, 0.195387f, 0.132515f, 0.116661f, 0.053037f, -0.020849f, -0.188603f, -0.236680f, -0.353173f, -0.270395f, -0.277457f, -0.105513f, 0.001344f, 0.106259f, 0.197592f, 0.163070f, 0.168450f, 0.116159f, 0.158492f, 0.124133f, 0.175488f, 0.083621f, - 0.065415f, 0.031332f, -0.045189f, -0.069416f, -0.106414f, -0.064276f, -0.231097f, -0.097566f, -0.218734f, -0.157750f, -0.250347f, -0.148760f, -0.233037f, -0.082716f, -0.115547f, -0.037578f, 0.017793f, 0.118303f, 0.310100f, 0.295391f, 0.413776f, 0.280144f, 0.191012f, 0.248144f, 0.338811f, 0.298269f, 0.250420f, 0.174815f, 0.021018f, -0.169405f, -0.168281f, -0.208477f, -0.396912f, -0.438067f, -0.477274f, -0.476479f, -0.523330f, -0.452501f, -0.381306f, -0.336172f, -0.219021f, 0.025214f, 0.248990f, 0.433318f, 0.572641f, 0.713986f, 0.794310f, 0.553865f, 0.528079f, 0.342820f, 0.207572f, 0.196296f, -0.011856f, -0.064797f, -0.304432f, -0.583226f, -0.628294f, -0.509921f, -0.394298f, -0.232198f, -0.188044f, -0.191323f, -0.105688f, -0.164303f, -0.066645f, -0.018251f, 0.126064f, 0.239657f, 0.196702f, 0.256182f, 0.275152f, 0.293707f, 0.259225f, 0.346255f, 0.257138f, 0.210845f, 0.108742f, 0.022393f, -0.058670f, -0.268228f, -0.237784f, -0.318439f, -0.422433f, -0.382532f, -0.438722f, -0.450659f, -0.131650f, 0.014733f, 0.228762f, 0.280310f, 0.298294f, 0.346506f, 0.361663f, 0.307023f, 0.266781f, 0.204783f, - 0.154995f, 0.056143f, -0.040355f, -0.119455f, -0.215743f, -0.316509f, -0.296813f, -0.264701f, -0.198340f, -0.093247f, -0.041408f, -0.019510f, -0.012011f, 0.029167f, 0.060588f, 0.073944f, 0.079197f, 0.065708f, 0.052231f, 0.057055f, 0.046103f, 0.034775f, 0.063315f, 0.071501f, 0.054606f, 0.026942f, 0.013943f, 0.022723f, 0.029184f, 0.011640f, 0.005765f, 0.011619f, 0.001558f, -0.022030f, -0.065938f, -0.079239f, -0.052547f, -0.040231f, -0.046247f, -0.043939f, -0.027047f, -0.038176f, -0.043551f, -0.037373f, -0.015387f, 0.003485f, 0.018949f, 0.026279f, 0.035347f, 0.040379f, 0.037273f, 0.031702f, 0.035987f, 0.036465f, 0.031689f, 0.022345f, 0.015531f, 0.005451f, -0.001988f, -0.004290f, -0.007123f, -0.014481f, -0.008982f, -0.004248f, -0.007596f, -0.010730f, -0.007077f, -0.001393f, 0.006252f, 0.004915f, -0.000832f, -0.006618f, -0.005542f, -0.009972f, -0.018448f, -0.022936f, -0.021478f, -0.020402f, -0.017710f, -0.019145f, -0.016662f, -0.007244f, 0.000526f, 0.002617f, 0.014172f, 0.030192f, 0.036069f, 0.029907f, 0.027130f, 0.027324f, 0.023522f, 0.013734f, 0.007085f, 0.004853f, -0.000086f, -0.008218f, - -0.012184f, -0.014364f, -0.014555f, -0.014196f, -0.013190f, -0.010587f, -0.007511f, -0.006801f, -0.006272f, -0.005303f, -0.002708f, -0.001499f, -0.000463f, -0.000099f, 0.001010f, 0.000939f, 0.001212f, 0.000641f, 0.000738f, 0.000088f}, - {0.024092f, 0.001069f, 0.004072f, 0.003368f, -0.009790f, -0.005078f, 0.013361f, 0.023217f, 0.003770f, 0.012374f, -0.004990f, 0.002350f, -0.000609f, 0.010485f, -0.008265f, -0.018914f, 0.007691f, 0.008877f, -0.010998f, 0.012815f, 0.006341f, 0.011694f, 0.003735f, 0.002799f, -0.005055f, -0.001608f, 0.000655f, 0.007808f, 0.000750f, -0.011689f, 0.000565f, -0.000919f, 0.002586f, -0.001601f, 0.002141f, 0.002845f, 0.007038f, 0.005103f, 0.001724f, 0.002222f, 0.000751f, 0.003465f, -0.003549f, -0.005804f, -0.012919f, 0.002550f, 0.002916f, 0.001095f, 0.010007f, -0.003476f, 0.007792f, 0.002183f, -0.003019f, -0.006081f, -0.003902f, 0.013979f, 0.003050f, 0.007826f, 0.001364f, 0.003120f, -0.002605f, 0.000533f, 0.001003f, 0.004062f, -0.001132f, -0.005130f, -0.002736f, -0.010741f, 0.001274f, 0.002174f, 0.009314f, -0.002903f, 0.007138f, -0.001164f, 0.004700f, 0.000150f, 0.004242f, 0.003303f, 0.002020f, -0.001659f, 0.004868f, 0.006681f, 0.004694f, 0.004391f, -0.000070f, 0.001010f, 0.001160f, -0.003571f, 0.001615f, 0.000902f, 0.003294f, 0.001737f, 0.001406f, 0.001792f, 0.002381f, -0.001211f, - 0.001473f, -0.000903f, -0.000045f, -0.000379f, 0.009074f, 0.008469f, 0.004083f, 0.003375f, 0.004856f, 0.005549f, 0.008575f, -0.003825f, 0.008894f, -0.000052f, 0.009492f, -0.002198f, 0.016784f, 0.005504f, 0.005644f, -0.011488f, -0.001444f, -0.002721f, -0.014606f, 0.007913f, 0.006939f, -0.004808f, -0.019180f, -0.008949f, -0.002760f, 0.009268f, 0.013097f, 0.008021f, -0.005038f, 0.002617f, -0.008145f, 0.000246f, 0.000859f, -0.006894f, -0.003218f, -0.017629f, 0.001582f, -0.002342f, -0.007180f, 0.000612f, 0.001147f, -0.002519f, -0.000416f, 0.016582f, -0.003884f, 0.013479f, 0.002791f, -0.010684f, 0.000920f, 0.000873f, 0.007802f, -0.003592f, 0.002313f, 0.001665f, 0.000726f, 0.010284f, 0.003760f, 0.010562f, 0.008017f, -0.005650f, 0.009906f, 0.004604f, 0.007270f, 0.000519f, 0.002467f, -0.002655f, -0.004511f, -0.008975f, -0.010727f, 0.011162f, -0.011151f, -0.008862f, -0.009201f, 0.005078f, 0.004862f, 0.001926f, 0.002184f, 0.006477f, -0.004141f, 0.004837f, -0.003094f, -0.004674f, 0.007373f, -0.006820f, 0.001255f, 0.003235f, -0.005483f, 0.001205f, 0.000945f, -0.001029f, -0.000750f, -0.000649f, - 0.003929f, -0.001401f, 0.001545f, -0.001840f, 0.003047f, -0.000970f, 0.001761f, -0.002175f, -0.002083f, -0.002097f, -0.015008f, -0.014086f, 0.003086f, 0.000209f, -0.002975f, 0.008329f, -0.001044f, -0.001535f, 0.008778f, -0.009673f, 0.001938f, -0.008455f, -0.005371f, -0.003102f, 0.000147f, 0.014167f, 0.016234f, -0.007597f, 0.006391f, -0.011738f, -0.001065f, -0.004648f, 0.015769f, -0.004735f, -0.000843f, 0.001558f, -0.022091f, -0.003941f, -0.010888f, -0.003695f, -0.002671f, 0.008153f, 0.010997f, 0.004393f, 0.014848f, -0.001993f, -0.006703f, -0.006940f, 0.008590f, 0.022121f, 0.015572f, -0.008767f, -0.010098f, 0.011014f, -0.009937f, 0.001796f, 0.003581f, 0.018103f, -0.006668f, -0.009076f, 0.002016f, -0.005670f, 0.003513f, 0.004534f, 0.011604f, -0.012781f, -0.008193f, 0.007326f, 0.014009f, -0.001393f, -0.006465f, -0.008346f, -0.019746f, 0.007397f, -0.000013f, 0.005787f, 0.000945f, 0.000408f, -0.003090f, 0.003522f, -0.005031f, 0.003025f, 0.004287f, 0.004200f, -0.007004f, 0.005046f, -0.001274f, -0.005037f, 0.000484f, -0.010494f, 0.006517f, 0.000868f, 0.000832f, -0.004240f, -0.001411f, -0.003607f, - -0.007235f, -0.005614f, 0.003853f, 0.000243f, 0.001560f, -0.001469f, 0.000508f, -0.000529f, -0.002073f, -0.001755f, -0.003029f, 0.000194f, -0.001741f, -0.001420f, -0.000432f, 0.000557f, -0.000544f, 0.000867f, -0.000569f, 0.003512f, 0.001395f, -0.002241f, 0.002460f, 0.001364f, -0.002862f, 0.001888f, -0.036777f, -0.011959f, -0.002058f, 0.006368f, 0.004083f, 0.009235f, -0.017630f, -0.005131f, -0.000918f, -0.018045f, -0.013097f, 0.004671f, 0.010857f, 0.006555f, 0.011994f, -0.001440f, 0.006835f, 0.016246f, 0.014115f, 0.013491f, 0.007589f, -0.005052f, -0.004232f, -0.008186f, -0.003800f, -0.008225f, 0.017098f, 0.008115f, -0.002772f, -0.007531f, -0.004782f, -0.007692f, -0.011479f, -0.012145f, -0.015513f, 0.009378f, 0.006520f, -0.016979f, 0.003901f, -0.000804f, 0.011664f, 0.001886f, 0.005679f, 0.007722f, -0.016264f, -0.002439f, -0.000718f, 0.002208f, 0.008347f, 0.012928f, -0.005274f, -0.001798f, -0.003899f, -0.010099f, 0.003003f, 0.002091f, -0.001191f, -0.002714f, 0.009634f, 0.000590f, -0.005506f, -0.001768f, 0.004508f, 0.006291f, -0.002631f, -0.000225f, 0.001519f, -0.008781f, 0.006446f, -0.000629f, - -0.013387f, 0.001581f, -0.016315f, 0.002628f, 0.011940f, -0.003969f, -0.000593f, -0.018149f, -0.008991f, -0.013472f, -0.008313f, -0.001072f, -0.001503f, 0.008451f, 0.001535f, 0.009913f, -0.006018f, 0.003372f, 0.005256f, 0.001833f, 0.005172f, 0.000656f, -0.003635f, 0.002087f, -0.001673f, 0.001737f, 0.000070f, 0.000745f, -0.000749f, -0.002460f, -0.001003f, 0.002262f, -0.002485f, 0.001693f, 0.004097f, 0.002167f, 0.001006f, 0.000139f, 0.000069f, -0.000853f, -0.001688f, -0.002671f, 0.001943f, 0.002691f, -0.001643f, 0.001775f, -0.001730f, -0.001250f, 0.020307f, 0.007407f, 0.003583f, -0.005210f, 0.015006f, 0.005566f, 0.008558f, 0.023309f, 0.025617f, 0.000790f, -0.003956f, -0.009204f, -0.013654f, 0.004894f, 0.010226f, -0.005388f, -0.000861f, 0.001250f, -0.002252f, -0.008311f, 0.009707f, -0.009520f, 0.004569f, -0.027118f, -0.003722f, -0.006747f, -0.006377f, -0.013499f, -0.002613f, -0.001917f, 0.000367f, -0.007017f, -0.009581f, -0.007874f, 0.001225f, -0.005285f, -0.010178f, 0.005979f, 0.009035f, 0.000523f, -0.008325f, -0.009721f, 0.003648f, -0.007535f, 0.008524f, -0.010683f, 0.006901f, 0.002232f, - 0.000018f, -0.015138f, -0.013673f, 0.002988f, -0.009869f, 0.016032f, 0.003046f, 0.013416f, -0.006926f, 0.013502f, 0.002814f, 0.008610f, 0.003144f, 0.008143f, -0.007575f, -0.011263f, -0.000091f, 0.017415f, -0.001593f, -0.012132f, -0.006175f, 0.007450f, -0.004808f, -0.007044f, 0.001917f, -0.019210f, 0.012931f, 0.015168f, -0.000837f, -0.013416f, -0.016480f, -0.000774f, 0.014086f, 0.009820f, -0.007791f, 0.010445f, 0.001233f, -0.001838f, -0.001974f, -0.001390f, -0.000785f, 0.002665f, -0.004573f, -0.004343f, 0.000469f, 0.001306f, -0.003413f, 0.000986f, -0.001545f, -0.000797f, 0.003811f, -0.001797f, -0.000705f, 0.000288f, -0.005754f, 0.002784f, 0.000871f, 0.000216f, 0.001448f, 0.001530f, -0.000161f, 0.000170f, -0.001058f, -0.001467f, -0.000792f, -0.001011f, -0.001528f, 0.028704f, 0.006160f, 0.015677f, -0.006006f, 0.011695f, 0.009104f, 0.018325f, -0.013476f, -0.009997f, -0.002890f, 0.000877f, 0.013427f, -0.006386f, 0.020255f, -0.001681f, 0.011623f, 0.009625f, -0.005338f, 0.003848f, 0.011774f, 0.010462f, 0.002985f, 0.002755f, 0.010750f, -0.021876f, 0.003804f, 0.016587f, 0.013368f, -0.011912f, - 0.014896f, -0.017479f, 0.010761f, -0.015440f, -0.007440f, -0.004201f, 0.016140f, -0.003445f, 0.016888f, 0.003491f, 0.003838f, 0.000615f, -0.000308f, 0.006373f, 0.010017f, 0.021458f, 0.003659f, 0.018489f, -0.008949f, 0.013457f, 0.018254f, -0.000782f, -0.002977f, -0.006710f, 0.007214f, -0.025938f, -0.001883f, 0.002319f, -0.009379f, -0.015480f, -0.000604f, -0.001187f, -0.001808f, 0.006521f, -0.015460f, 0.007733f, 0.007187f, 0.009773f, -0.024523f, 0.008316f, 0.006216f, -0.014864f, -0.001463f, 0.007861f, 0.018497f, -0.023321f, -0.002603f, 0.001560f, -0.021578f, -0.002135f, 0.003471f, -0.006273f, 0.014617f, -0.003419f, 0.001512f, 0.003831f, -0.002249f, -0.000924f, -0.000715f, 0.002360f, -0.005387f, 0.000648f, -0.002666f, 0.001542f, 0.000784f, -0.003411f, -0.000083f, 0.003781f, -0.001491f, -0.000985f, 0.000371f, -0.004805f, -0.001481f, 0.000717f, -0.001498f, -0.002288f, -0.000386f, 0.000704f, -0.002282f, -0.001258f, 0.003507f, 0.004174f, -0.005316f, -0.000320f, 0.001197f, -0.000127f, -0.000637f, -0.025638f, -0.031585f, -0.025157f, -0.022858f, -0.000708f, 0.015982f, -0.033185f, 0.023607f, 0.015378f, - -0.037414f, 0.023587f, 0.009913f, 0.008111f, 0.003644f, 0.003680f, 0.008397f, -0.005807f, -0.006149f, -0.012213f, -0.000417f, 0.014392f, 0.012064f, 0.007122f, -0.021319f, 0.014598f, -0.015251f, 0.000478f, -0.013416f, 0.016747f, -0.008887f, -0.006837f, 0.005223f, -0.024950f, 0.002454f, -0.008223f, -0.007522f, -0.002604f, 0.001748f, 0.024667f, -0.011645f, -0.003703f, -0.009406f, 0.018776f, -0.011421f, -0.006069f, 0.005725f, 0.005692f, 0.005236f, 0.006687f, -0.007806f, 0.009091f, 0.002261f, -0.020453f, 0.028168f, 0.011288f, 0.004517f, 0.003008f, -0.000184f, -0.013078f, 0.016104f, 0.013594f, 0.005612f, 0.018167f, 0.001887f, 0.008033f, 0.018154f, 0.009331f, 0.003873f, -0.012478f, 0.014951f, -0.006520f, 0.028600f, -0.003063f, 0.000720f, -0.007759f, -0.030089f, 0.003981f, -0.007328f, -0.003522f, 0.015378f, -0.001261f, -0.016341f, -0.009237f, 0.013212f, 0.011136f, 0.001689f, 0.012895f, 0.003346f, -0.009400f, 0.004441f, -0.000868f, -0.003201f, -0.002587f, 0.001004f, 0.007644f, -0.003637f, 0.000974f, 0.001310f, 0.004313f, 0.001584f, -0.003427f, 0.005521f, 0.000841f, 0.001443f, -0.000301f, - 0.001400f, 0.000716f, -0.002214f, 0.003210f, -0.002237f, 0.002647f, 0.002014f, -0.001598f, 0.006227f, -0.000829f, 0.001508f, -0.002109f, -0.001456f, 0.018356f, 0.012512f, -0.002127f, -0.011512f, 0.030169f, 0.047973f, -0.006335f, -0.006656f, 0.023197f, 0.005649f, 0.007653f, 0.006161f, -0.034547f, 0.003813f, -0.022338f, 0.017881f, 0.025489f, -0.006679f, -0.012306f, 0.004176f, 0.016147f, -0.009677f, 0.019504f, -0.007640f, 0.037639f, -0.010991f, 0.007288f, -0.001831f, 0.010220f, 0.026825f, -0.010115f, 0.002657f, -0.002359f, 0.007772f, -0.009934f, -0.004782f, 0.015270f, 0.032908f, 0.002758f, 0.024098f, -0.008905f, 0.003341f, -0.004518f, 0.008050f, 0.017611f, 0.026269f, 0.020473f, 0.019463f, 0.020223f, 0.012810f, -0.003680f, 0.003146f, -0.002771f, 0.000537f, 0.004027f, -0.013100f, -0.003770f, 0.021178f, -0.018564f, 0.007436f, -0.008156f, -0.004861f, -0.009643f, -0.038246f, 0.004295f, 0.020798f, 0.013153f, -0.004681f, -0.018141f, -0.044083f, -0.007093f, 0.018003f, -0.003696f, 0.007134f, -0.013737f, 0.010315f, -0.012666f, 0.011706f, 0.025040f, -0.010930f, -0.013509f, -0.024911f, 0.007555f, - 0.003142f, 0.004123f, -0.019680f, 0.001450f, 0.000183f, -0.005952f, 0.001202f, 0.009341f, 0.000478f, 0.006431f, 0.002910f, 0.004176f, 0.005142f, -0.000846f, 0.008049f, 0.001936f, 0.000886f, -0.001625f, -0.002513f, -0.002167f, 0.007681f, 0.002596f, -0.000182f, 0.005137f, 0.002764f, 0.003718f, -0.000624f, 0.004259f, 0.005233f, 0.007008f, -0.002827f, 0.000782f, -0.002749f, -0.032921f, -0.026268f, 0.003455f, 0.015391f, -0.014774f, -0.009776f, 0.001976f, -0.008037f, -0.049316f, -0.042650f, 0.018618f, 0.017050f, 0.003209f, 0.002461f, -0.018020f, 0.028269f, 0.034479f, 0.021167f, -0.017688f, 0.016516f, 0.022659f, -0.003576f, -0.028600f, -0.012988f, 0.039681f, -0.011826f, 0.004039f, 0.002354f, 0.022323f, -0.017914f, -0.031753f, 0.006849f, 0.014688f, -0.007884f, 0.009423f, 0.020558f, -0.009939f, -0.007979f, -0.000872f, -0.044505f, -0.012807f, 0.015230f, -0.008380f, -0.029760f, 0.005441f, -0.000850f, -0.009282f, 0.005841f, -0.002744f, -0.028221f, -0.023809f, -0.042211f, -0.033440f, 0.006472f, 0.014827f, 0.001314f, -0.009971f, -0.014132f, 0.000404f, -0.009684f, 0.009048f, -0.020315f, 0.000745f, - -0.007238f, -0.005791f, -0.006925f, -0.001776f, 0.007846f, -0.009152f, -0.040501f, 0.006124f, -0.005887f, 0.010039f, 0.011020f, 0.000813f, 0.007637f, 0.009422f, 0.002913f, -0.002262f, 0.004863f, -0.005699f, 0.002209f, -0.012559f, -0.006739f, -0.005609f, -0.006992f, 0.002916f, 0.011080f, -0.005786f, 0.001699f, -0.014286f, 0.001595f, -0.001392f, -0.010673f, 0.004678f, -0.003435f, 0.002723f, 0.004296f, 0.002535f, 0.001887f, 0.009070f, 0.001919f, 0.001212f, 0.002959f, 0.000058f, 0.001184f, 0.001283f, -0.002634f, -0.006802f, -0.001412f, -0.006889f, 0.003213f, -0.005235f, 0.007701f, 0.000109f, 0.011058f, 0.005145f, -0.006750f, -0.004399f, -0.003706f, -0.000390f, 0.016107f, 0.051763f, 0.045985f, 0.035947f, -0.003827f, 0.035150f, 0.011409f, 0.049053f, 0.020788f, -0.000971f, 0.059841f, -0.012410f, -0.003098f, -0.038043f, -0.010008f, -0.000727f, -0.026818f, 0.016132f, 0.024056f, -0.007747f, -0.000282f, -0.021564f, -0.037028f, -0.021820f, -0.028212f, -0.008184f, -0.017012f, -0.005308f, -0.002614f, 0.017066f, 0.004391f, -0.003460f, -0.015198f, -0.005200f, -0.010112f, 0.005507f, 0.000496f, -0.015063f, - 0.008106f, 0.010155f, 0.004085f, -0.011618f, -0.015264f, 0.005224f, 0.014330f, -0.001934f, -0.000406f, -0.027093f, 0.048891f, 0.008279f, -0.009137f, -0.001231f, 0.004468f, 0.020973f, 0.017870f, -0.018238f, 0.010493f, -0.007068f, 0.002376f, -0.002990f, -0.004468f, -0.027764f, -0.024709f, -0.033266f, 0.005224f, -0.001290f, -0.006875f, 0.021061f, -0.006489f, 0.059260f, -0.005649f, -0.003081f, -0.014387f, -0.006399f, 0.007863f, 0.010287f, 0.007341f, -0.000384f, 0.025652f, 0.018365f, -0.003566f, -0.012199f, 0.003577f, -0.007226f, 0.000177f, 0.002513f, -0.007983f, -0.002587f, 0.000437f, -0.002632f, 0.004227f, -0.009958f, 0.006232f, 0.011388f, -0.003212f, 0.006035f, -0.003237f, -0.002652f, -0.004303f, 0.001983f, 0.006492f, -0.002526f, 0.008632f, 0.001715f, 0.003215f, 0.011705f, 0.005247f, -0.001407f, 0.012418f, 0.005614f, 0.008696f, 0.011098f, 0.008722f, 0.001070f, 0.000245f, 0.008256f, -0.007187f, 0.000388f, 0.005232f, 0.002851f, 0.005952f, 0.005386f, 0.003121f, 0.006872f, -0.031218f, -0.045277f, -0.024663f, 0.033059f, 0.026622f, -0.023323f, -0.023442f, 0.035475f, 0.021946f, -0.023051f, - -0.030662f, -0.005492f, 0.005540f, 0.003003f, 0.004648f, -0.018488f, 0.019149f, -0.013908f, 0.037235f, -0.006207f, -0.025742f, 0.005582f, 0.009718f, -0.000703f, 0.003088f, -0.011936f, -0.016646f, -0.001428f, 0.015295f, -0.009708f, 0.011711f, -0.018675f, -0.048295f, -0.039900f, 0.025211f, -0.031194f, 0.024865f, 0.006669f, 0.003138f, -0.010775f, 0.014717f, 0.004114f, -0.003582f, -0.007561f, 0.007034f, 0.014268f, -0.013082f, 0.040574f, -0.010105f, 0.013302f, -0.012127f, 0.003093f, -0.003214f, -0.016638f, 0.039947f, -0.031579f, 0.043434f, -0.002093f, -0.021193f, -0.033163f, 0.016951f, 0.005316f, 0.005685f, 0.001387f, 0.017819f, 0.011231f, 0.016176f, -0.034123f, -0.009909f, 0.000370f, 0.000736f, 0.007951f, -0.025179f, -0.012863f, -0.008131f, -0.004887f, -0.031589f, -0.007029f, -0.010450f, -0.036361f, -0.001720f, -0.020844f, 0.005418f, -0.010056f, 0.002905f, 0.004108f, 0.015883f, 0.008773f, -0.005816f, -0.001515f, -0.012998f, 0.006756f, -0.000761f, 0.005797f, -0.015290f, 0.000342f, -0.006040f, 0.003236f, -0.014084f, 0.002298f, 0.003388f, 0.000211f, -0.003027f, 0.004484f, -0.008222f, 0.005883f, - -0.012906f, 0.004501f, -0.009215f, 0.004066f, 0.002604f, 0.005903f, -0.004722f, 0.015894f, 0.006572f, -0.000247f, -0.009755f, -0.008640f, -0.001433f, 0.010453f, -0.002133f, -0.005845f, -0.004986f, 0.007010f, 0.000629f, 0.006609f, 0.076834f, 0.025637f, -0.017132f, 0.039481f, 0.036769f, -0.019007f, -0.024220f, 0.059364f, -0.005314f, 0.013062f, -0.035200f, 0.086415f, 0.003022f, -0.024187f, 0.012549f, 0.004331f, 0.041962f, 0.000737f, 0.052994f, -0.038069f, 0.000826f, -0.041584f, 0.003217f, 0.029258f, 0.001371f, -0.025472f, 0.036131f, 0.019323f, 0.010650f, 0.008714f, -0.012610f, -0.012158f, 0.003302f, -0.018020f, 0.023664f, -0.021068f, -0.028100f, 0.024843f, 0.009420f, -0.032593f, 0.017726f, 0.002165f, -0.023697f, -0.013281f, -0.007912f, 0.012486f, -0.002789f, -0.014271f, 0.017427f, -0.021068f, -0.008353f, -0.007218f, 0.029162f, -0.019129f, 0.014098f, 0.022402f, 0.010373f, -0.013232f, -0.027232f, 0.017280f, -0.023286f, 0.031510f, -0.039673f, 0.052352f, -0.015487f, -0.007352f, -0.007434f, 0.023841f, -0.001714f, 0.008656f, 0.014254f, 0.008587f, 0.020257f, -0.019762f, -0.037640f, 0.002648f, - 0.031999f, -0.021343f, -0.010104f, -0.022308f, -0.013384f, 0.005892f, -0.002202f, -0.006412f, 0.013847f, 0.009969f, 0.007324f, -0.003508f, 0.021108f, 0.012930f, -0.009790f, -0.005153f, 0.004171f, 0.001137f, 0.017878f, 0.011337f, -0.001438f, -0.005803f, -0.004518f, 0.019521f, 0.001823f, -0.009988f, 0.012373f, 0.003718f, 0.000535f, 0.010321f, 0.004698f, -0.001802f, -0.010493f, 0.002953f, 0.012849f, -0.009500f, -0.002345f, 0.014630f, -0.000913f, -0.003001f, -0.003644f, 0.008644f, 0.001708f, 0.000264f, -0.003846f, -0.045955f, -0.005687f, 0.042023f, -0.012267f, -0.026205f, 0.011629f, -0.012302f, -0.002240f, 0.019055f, -0.045620f, -0.026810f, 0.017671f, 0.023491f, 0.032052f, -0.002260f, -0.006017f, 0.012913f, -0.003058f, -0.045117f, -0.030869f, 0.053089f, -0.003994f, -0.046492f, -0.026961f, -0.018703f, -0.015343f, 0.004331f, 0.015655f, 0.000859f, -0.007724f, -0.023194f, -0.035456f, 0.004794f, 0.004767f, -0.001229f, 0.029074f, -0.019796f, -0.055640f, 0.022600f, 0.016431f, -0.065024f, 0.038888f, -0.010505f, -0.032796f, -0.027048f, -0.002395f, 0.037033f, 0.008903f, -0.012245f, -0.013356f, 0.010588f, - 0.019509f, -0.027375f, 0.021023f, 0.003394f, 0.015502f, -0.011845f, -0.028438f, 0.025292f, 0.000137f, 0.028362f, -0.087972f, 0.011204f, 0.013653f, -0.013008f, 0.024524f, 0.028427f, 0.083746f, 0.002384f, -0.055198f, -0.025466f, -0.014374f, -0.053696f, -0.052659f, 0.002747f, -0.029876f, 0.000396f, -0.019829f, 0.019731f, -0.020179f, -0.019895f, 0.035385f, 0.008676f, -0.001122f, -0.001940f, 0.020802f, -0.004378f, -0.001992f, 0.012003f, 0.009939f, -0.007624f, 0.006820f, -0.018890f, -0.004073f, 0.005258f, -0.003478f, -0.005494f, -0.009008f, -0.009693f, -0.004873f, -0.011952f, 0.004884f, -0.015189f, 0.003384f, -0.002642f, 0.014330f, -0.003372f, -0.007333f, -0.006335f, -0.008463f, -0.009184f, -0.002353f, -0.006428f, -0.011046f, -0.008265f, 0.008266f, -0.011064f, -0.005583f, -0.019768f, 0.006199f, 0.007904f, 0.020494f, 0.004572f, -0.002507f, 0.001230f, -0.038521f, 0.006239f, 0.023564f, 0.021215f, -0.034203f, 0.060765f, 0.042157f, -0.019372f, 0.025161f, -0.049037f, -0.011033f, -0.016379f, 0.077424f, 0.049770f, -0.018599f, -0.029510f, -0.036336f, -0.007964f, 0.001924f, 0.014329f, 0.051895f, 0.011149f, - 0.008709f, 0.011336f, 0.001305f, -0.017077f, 0.001960f, -0.003168f, 0.023842f, 0.032440f, 0.040890f, 0.026785f, 0.017265f, -0.003949f, -0.007712f, 0.006609f, 0.037057f, 0.005977f, 0.006469f, -0.037716f, -0.019350f, 0.063947f, 0.025786f, 0.019299f, 0.000343f, 0.038361f, 0.020302f, 0.080721f, -0.004648f, 0.083226f, 0.005770f, -0.025663f, 0.026767f, -0.022322f, -0.016924f, -0.002805f, -0.015480f, 0.001059f, 0.015290f, 0.033395f, 0.005643f, -0.006928f, -0.036556f, 0.011907f, 0.002869f, 0.024185f, -0.028705f, 0.007786f, -0.012759f, 0.004482f, -0.036476f, 0.018629f, -0.032114f, -0.003697f, -0.043661f, -0.059656f, -0.010132f, -0.009154f, 0.049131f, 0.013479f, -0.001683f, 0.009440f, 0.015222f, 0.019418f, 0.003102f, -0.000519f, 0.000645f, -0.034463f, 0.010839f, 0.000721f, 0.032173f, -0.012895f, -0.001733f, -0.008409f, 0.022818f, 0.004818f, 0.020829f, -0.000002f, -0.024538f, 0.012141f, -0.001420f, 0.008327f, -0.018692f, -0.008125f, 0.004295f, 0.005385f, -0.013938f, 0.001597f, 0.012478f, 0.008145f, -0.012284f, -0.013187f, 0.023589f, -0.023619f, 0.009800f, -0.007081f, -0.019664f, 0.006482f, - 0.004296f, 0.006540f, 0.007941f, -0.008617f, -0.001303f, 0.011726f, 0.000745f, 0.008268f, -0.003549f, -0.008789f, -0.009487f, -0.020451f, -0.030929f, 0.009334f, -0.035505f, -0.000201f, 0.043098f, 0.013357f, 0.036740f, -0.042724f, -0.019595f, 0.020709f, 0.004316f, 0.060761f, -0.030943f, 0.036264f, -0.013773f, -0.018618f, -0.045404f, -0.017824f, -0.024415f, 0.030262f, 0.007105f, -0.040651f, 0.050665f, -0.026403f, -0.024415f, 0.004712f, 0.019710f, -0.015031f, 0.035013f, -0.017229f, -0.024424f, -0.012789f, 0.011581f, -0.004524f, -0.006763f, 0.003549f, 0.034873f, -0.023942f, 0.063885f, -0.025098f, -0.000916f, 0.058997f, -0.011998f, 0.010154f, -0.080942f, 0.003303f, 0.014343f, -0.018545f, 0.035547f, -0.065166f, -0.079463f, 0.029802f, -0.014209f, 0.043557f, -0.032894f, -0.031265f, 0.003390f, -0.010515f, 0.067301f, -0.008558f, -0.003246f, 0.014674f, -0.062822f, 0.003204f, -0.063488f, -0.025739f, 0.003474f, 0.014751f, -0.079231f, -0.035677f, -0.009891f, -0.004257f, 0.025397f, -0.034321f, 0.040281f, -0.017038f, 0.004349f, -0.052362f, -0.002835f, -0.046320f, 0.017131f, 0.009498f, 0.033944f, 0.043091f, - -0.016436f, 0.028100f, 0.003643f, -0.009800f, 0.014372f, 0.008665f, -0.014246f, -0.014666f, -0.025331f, -0.001380f, -0.015168f, -0.016094f, 0.005170f, -0.004169f, 0.021392f, -0.029547f, -0.005313f, -0.018764f, 0.006953f, 0.010087f, -0.010353f, -0.001854f, -0.015729f, -0.015948f, 0.017080f, 0.027951f, 0.031762f, 0.006065f, 0.001795f, -0.009135f, 0.005797f, 0.004775f, -0.012395f, -0.019816f, 0.006315f, -0.010693f, -0.014434f, 0.021125f, 0.014798f, 0.012109f, -0.020119f, -0.023456f, -0.049476f, 0.040447f, -0.035520f, -0.009495f, 0.031503f, 0.073758f, -0.021199f, 0.060558f, 0.021022f, 0.016052f, -0.028182f, 0.067036f, 0.010163f, 0.031597f, 0.002660f, -0.038381f, 0.013955f, -0.038540f, -0.039184f, 0.024940f, -0.039031f, -0.007750f, -0.009290f, 0.039996f, 0.003186f, -0.012594f, 0.012574f, 0.018146f, -0.008293f, -0.036505f, -0.008884f, 0.029197f, 0.069014f, 0.016575f, -0.039134f, 0.004922f, -0.007641f, 0.017218f, 0.020849f, 0.035710f, -0.015656f, 0.001436f, 0.022564f, 0.005863f, -0.001332f, 0.046906f, 0.041657f, 0.050403f, 0.017033f, 0.042449f, 0.005590f, 0.025704f, -0.019819f, -0.002910f, - 0.005427f, -0.038310f, 0.002811f, 0.066406f, -0.008483f, -0.013841f, 0.013733f, -0.000415f, 0.017583f, -0.038636f, 0.051759f, -0.031992f, -0.014649f, -0.008357f, 0.002549f, 0.006656f, 0.006567f, -0.056466f, 0.071818f, -0.015060f, -0.023116f, -0.007993f, 0.060975f, -0.006430f, 0.012618f, -0.047785f, -0.033711f, 0.001501f, 0.025327f, 0.023880f, 0.038966f, -0.062244f, -0.019733f, 0.060591f, -0.021659f, 0.007142f, 0.051344f, 0.012754f, 0.011177f, -0.002844f, 0.001701f, -0.019133f, -0.001593f, 0.005411f, 0.014612f, -0.008385f, 0.012156f, -0.022156f, -0.012790f, 0.001723f, -0.006457f, -0.003408f, -0.052770f, -0.040348f, 0.003288f, 0.027016f, -0.024939f, -0.042106f, -0.017461f, -0.034504f, 0.009757f, 0.001987f, -0.013445f, 0.033971f, -0.009709f, 0.014135f, 0.015300f, -0.017827f, -0.012927f, -0.002631f, 0.004074f, -0.000938f, 0.025280f, 0.000027f, 0.001570f, -0.011850f, -0.002791f, -0.018886f, 0.117807f, -0.007169f, 0.023793f, -0.001260f, -0.011871f, 0.003035f, -0.054172f, -0.023505f, -0.016523f, 0.020841f, 0.015276f, 0.026294f, 0.003223f, -0.028932f, 0.030154f, -0.024631f, 0.034730f, 0.025105f, - -0.027827f, -0.030325f, 0.003707f, 0.041935f, -0.043234f, 0.017796f, 0.020105f, -0.025150f, 0.011144f, -0.003588f, 0.015244f, -0.002320f, -0.063127f, 0.035051f, 0.021873f, -0.053688f, 0.064351f, -0.034494f, -0.008116f, -0.021526f, 0.051943f, -0.010731f, -0.044081f, -0.000535f, 0.000715f, 0.042423f, 0.043651f, 0.002426f, -0.033596f, 0.048424f, -0.007866f, 0.008156f, -0.062004f, 0.048359f, 0.019936f, 0.002459f, -0.035574f, -0.027457f, -0.003778f, 0.016494f, -0.028597f, -0.051635f, -0.021762f, 0.039881f, 0.025034f, -0.006493f, 0.065570f, 0.003390f, -0.010655f, -0.047824f, 0.057857f, -0.054308f, -0.017362f, 0.058546f, 0.018671f, 0.007115f, -0.022228f, 0.008629f, 0.058250f, 0.012377f, 0.025539f, 0.036324f, -0.095317f, -0.021448f, -0.015837f, -0.008466f, -0.039532f, -0.007586f, -0.004686f, 0.057321f, 0.015694f, 0.003326f, 0.029437f, 0.040781f, 0.028981f, -0.021101f, 0.011047f, 0.024158f, -0.004901f, 0.008970f, 0.010687f, 0.012613f, 0.008560f, 0.040508f, 0.022270f, 0.001945f, -0.011962f, -0.019145f, -0.035608f, 0.004570f, 0.000050f, 0.009000f, 0.011703f, 0.004935f, 0.061914f, -0.009123f, - 0.022403f, 0.012788f, -0.016838f, -0.049772f, -0.007936f, -0.018832f, -0.030591f, -0.033640f, 0.005711f, -0.006094f, -0.039821f, -0.000517f, 0.015203f, -0.004585f, -0.003872f, 0.013267f, -0.009790f, -0.031122f, -0.013520f, -0.048081f, 0.002433f, -0.053723f, 0.050285f, 0.076162f, 0.036727f, 0.042897f, -0.066435f, -0.061017f, -0.046283f, 0.003507f, 0.084341f, -0.016495f, 0.031886f, 0.053220f, 0.028192f, -0.031049f, 0.002617f, 0.038545f, -0.050316f, -0.043827f, -0.035868f, 0.040417f, 0.029738f, -0.054734f, -0.074916f, 0.101501f, 0.064072f, -0.074371f, 0.033891f, -0.009746f, 0.031102f, 0.002047f, -0.021418f, -0.052054f, 0.047150f, -0.002476f, -0.036980f, -0.057663f, 0.015143f, 0.011943f, -0.013567f, 0.000237f, -0.004539f, -0.029118f, -0.011562f, -0.015954f, 0.026853f, -0.050744f, 0.055212f, -0.038618f, 0.002665f, 0.084515f, -0.082158f, -0.021318f, 0.078798f, 0.004367f, 0.018909f, -0.012955f, -0.023861f, 0.023177f, -0.008492f, -0.035826f, 0.005057f, -0.079967f, 0.133839f, -0.014490f, -0.146430f, 0.054237f, 0.145518f, 0.084145f, -0.178674f, -0.053537f, 0.034410f, 0.011540f, -0.026801f, -0.042748f, - 0.022835f, 0.053331f, -0.066966f, -0.020057f, -0.117194f, -0.021746f, 0.041059f, 0.013365f, -0.035534f, -0.060348f, 0.023567f, 0.050125f, -0.000711f, -0.017395f, -0.027842f, 0.039514f, 0.024748f, 0.015164f, -0.003106f, -0.013902f, 0.005220f, 0.021374f, 0.018127f, -0.005731f, -0.046836f, -0.030936f, 0.049345f, 0.019432f, -0.025000f, -0.018745f, 0.035455f, 0.010153f, -0.004671f, -0.073145f, -0.032555f, -0.037312f, 0.040359f, 0.009340f, 0.008976f, -0.009109f, 0.001197f, 0.037348f, -0.007777f, -0.008661f, -0.033942f, 0.005018f, -0.010900f, 0.052760f, 0.011677f, -0.013984f, 0.006717f, 0.053237f, -0.007101f, -0.022824f, 0.004529f, 0.000414f, -0.002753f, -0.037840f, 0.009231f, 0.035909f, 0.086115f, -0.036457f, 0.028520f, -0.045841f, -0.119135f, 0.064056f, -0.029497f, -0.066146f, -0.044744f, -0.067602f, 0.032808f, 0.021752f, -0.089464f, 0.057309f, -0.030741f, -0.002822f, -0.000421f, -0.046810f, 0.036367f, 0.035021f, 0.032036f, -0.003490f, 0.041701f, 0.020924f, -0.024197f, 0.001763f, -0.050719f, -0.019113f, -0.044920f, -0.032295f, -0.001559f, 0.073644f, -0.061232f, -0.013691f, -0.012666f, -0.055939f, - 0.033206f, -0.063032f, 0.033101f, 0.027665f, -0.041796f, 0.033049f, -0.067602f, 0.019185f, -0.058688f, 0.038100f, -0.021563f, -0.031801f, -0.031867f, -0.048802f, -0.012373f, 0.023963f, 0.042861f, -0.049518f, 0.033502f, 0.017997f, 0.052050f, 0.062789f, 0.037298f, -0.052886f, -0.023714f, -0.099117f, -0.024290f, -0.029044f, 0.033504f, -0.115604f, -0.021201f, -0.068902f, -0.005291f, 0.068400f, 0.063934f, 0.041236f, 0.015382f, 0.092235f, 0.102054f, 0.089920f, -0.030365f, -0.040915f, 0.034959f, 0.088021f, 0.164034f, 0.011473f, 0.038899f, 0.019595f, -0.008105f, 0.029875f, -0.028812f, 0.017486f, -0.007020f, -0.000751f, -0.018345f, 0.030324f, 0.036083f, -0.012688f, -0.028685f, -0.022552f, 0.027482f, 0.011566f, 0.031079f, -0.017012f, 0.012429f, -0.006356f, -0.012883f, -0.009016f, 0.030863f, 0.059470f, 0.029178f, -0.031323f, 0.016376f, -0.011032f, 0.022009f, 0.009270f, 0.011181f, 0.028928f, -0.018248f, -0.039673f, 0.003854f, 0.029952f, 0.024313f, 0.007837f, -0.005309f, -0.013875f, -0.053508f, 0.052806f, 0.015409f, -0.012836f, -0.055670f, -0.013472f, -0.038088f, 0.018937f, 0.022055f, -0.018645f, - 0.013681f, 0.107100f, -0.063324f, 0.040056f, 0.048616f, -0.022481f, 0.004391f, 0.018670f, -0.006000f, 0.051970f, 0.002633f, 0.037639f, -0.048113f, -0.006764f, 0.041781f, 0.006928f, -0.065270f, 0.042278f, -0.026083f, -0.021196f, -0.024939f, -0.006430f, -0.024323f, 0.024790f, 0.034547f, 0.016889f, -0.006059f, -0.018098f, 0.029973f, -0.009717f, -0.047944f, 0.039311f, -0.080929f, -0.020312f, -0.016683f, -0.017703f, 0.046144f, 0.050611f, 0.090609f, -0.026496f, 0.038754f, -0.001345f, 0.017461f, 0.059517f, -0.004349f, 0.006458f, -0.039636f, -0.124722f, 0.061801f, 0.012025f, -0.060276f, -0.041178f, 0.006098f, 0.032769f, -0.005745f, -0.035234f, 0.018356f, -0.036127f, 0.047717f, 0.026759f, -0.020775f, -0.043351f, 0.086497f, 0.009669f, 0.004625f, -0.007768f, 0.012031f, 0.006276f, 0.003822f, -0.028903f, -0.061400f, 0.017172f, -0.008935f, -0.021691f, -0.056568f, -0.013747f, -0.001597f, 0.050709f, 0.020924f, -0.063450f, 0.037203f, 0.006818f, -0.002316f, -0.006852f, 0.020812f, 0.026737f, -0.005134f, -0.011676f, -0.004386f, -0.011033f, 0.009935f, 0.015993f, -0.000550f, 0.009277f, 0.017850f, -0.006289f, - 0.025711f, 0.011109f, 0.008022f, 0.013677f, -0.007009f, 0.032248f, 0.005599f, -0.006511f, 0.021094f, -0.024983f, 0.008350f, 0.014807f, -0.005752f, -0.010517f, 0.029058f, 0.041810f, -0.036909f, -0.006586f, -0.012828f, -0.012434f, 0.015128f, 0.013177f, -0.023054f, 0.013246f, 0.010690f, 0.009585f, 0.011189f, -0.020630f, 0.015319f, -0.001265f, 0.009187f, -0.025801f, -0.006375f, 0.005422f, 0.119458f, 0.060095f, 0.120200f, -0.111045f, 0.010097f, 0.056876f, -0.021736f, 0.064858f, 0.126791f, 0.068722f, 0.004564f, -0.034580f, -0.034544f, 0.005981f, 0.055251f, 0.058029f, 0.013845f, -0.000714f, -0.086606f, -0.018528f, 0.086459f, 0.027859f, -0.023443f, 0.046887f, -0.039853f, -0.057055f, -0.014992f, -0.004347f, 0.066958f, 0.086195f, 0.078473f, 0.028958f, -0.029706f, -0.047040f, -0.085674f, -0.086285f, 0.075158f, 0.030720f, 0.006627f, 0.114697f, 0.007492f, -0.035889f, -0.046671f, -0.048523f, 0.023820f, 0.048661f, 0.039701f, 0.075026f, 0.005869f, 0.053817f, -0.003071f, -0.010378f, 0.028059f, 0.049780f, 0.037347f, 0.031415f, -0.028247f, -0.011490f, -0.022178f, -0.051708f, -0.040456f, -0.075083f, - -0.024445f, 0.019357f, -0.011747f, 0.053570f, 0.065613f, -0.001674f, 0.001093f, -0.027283f, -0.047140f, 0.009205f, 0.063409f, -0.004245f, 0.035304f, 0.014659f, -0.004105f, -0.020339f, -0.008604f, 0.005135f, 0.022436f, 0.016508f, -0.016362f, -0.035860f, -0.043099f, -0.041498f, -0.015384f, 0.015973f, -0.003804f, -0.026315f, -0.012694f, -0.018453f, -0.014622f, 0.007797f, -0.001835f, 0.023494f, 0.034964f, 0.007119f, -0.041546f, -0.022215f, -0.024718f, -0.006344f, 0.028753f, 0.006204f, 0.007393f, -0.034969f, -0.032097f, -0.037696f, -0.018610f, 0.031720f, 0.022458f, 0.027295f, 0.015417f, -0.014147f, -0.016322f, 0.011222f, 0.011121f, -0.003524f, 0.007664f, -0.014801f, -0.011012f, 0.007791f, 0.006302f, 0.011035f, -0.006446f, -0.014713f, -0.006122f, -0.011421f, -0.001678f, 0.021478f, -0.063304f, -0.123043f, 0.048468f, 0.201018f, 0.204109f, 0.173028f, 0.125134f, -0.077174f, -0.088312f, -0.095143f, -0.126862f, -0.193788f, -0.156359f, -0.135551f, 0.062864f, 0.145918f, 0.108283f, 0.234586f, 0.181068f, 0.094621f, -0.034992f, -0.063048f, -0.157735f, -0.122903f, -0.121964f, -0.024774f, -0.074784f, -0.060492f, - 0.017949f, 0.033121f, 0.066275f, 0.066784f, 0.091310f, 0.090834f, 0.116884f, 0.068380f, 0.029887f, -0.016895f, -0.019889f, -0.051357f, -0.078037f, -0.093949f, -0.115138f, -0.075200f, -0.141386f, -0.093986f, -0.070762f, 0.070833f, 0.133933f, 0.144695f, 0.099888f, 0.068271f, 0.106617f, 0.081801f, 0.102320f, 0.080634f, 0.028104f, -0.037898f, -0.179503f, -0.126732f, -0.129435f, -0.200551f, -0.126019f, -0.108835f, -0.105869f, 0.038568f, 0.106269f, 0.169062f, 0.138983f, 0.198728f, 0.178119f, 0.174416f, 0.124138f, -0.067690f, -0.061506f, -0.139379f, -0.184609f, -0.203158f, -0.166851f, -0.079909f, -0.022845f, -0.042010f, 0.054888f, 0.145587f, 0.102435f, 0.069399f, 0.116552f, 0.098174f, 0.034929f, -0.022976f, -0.023394f, -0.007463f, -0.028674f, -0.078180f, -0.049314f, -0.055834f, -0.030349f, -0.024993f, -0.058439f, -0.021510f, 0.019982f, -0.019462f, 0.064490f, 0.085370f, 0.093550f, 0.099190f, 0.006063f, 0.029674f, 0.028816f, -0.008365f, -0.135845f, -0.108212f, -0.084739f, -0.075483f, -0.059623f, -0.056350f, 0.062394f, 0.093444f, 0.101352f, 0.097199f, 0.079967f, 0.055003f, 0.049328f, -0.000647f, - -0.014716f, -0.078398f, -0.106032f, -0.094779f, -0.079206f, -0.050380f, -0.032916f, 0.003933f, 0.047709f, 0.096986f, 0.072494f, 0.046259f, 0.033385f, 0.009265f, -0.000662f, 0.000159f, -0.019343f, -0.025130f, -0.020883f, -0.024553f, 0.005911f, -0.009163f, -0.033874f, 0.004580f, 0.016264f, -0.005929f, -0.008409f, -0.006916f, 0.003902f, 0.006476f, -0.008765f, 0.002020f, 0.022146f, 0.013941f, 0.006555f, 0.013723f, 0.013232f, 0.002365f, -0.002519f, -0.004112f, -0.008796f, -0.012419f, -0.009208f, -0.006645f, -0.008461f, -0.007028f, -0.003201f, -0.001252f, 0.001931f, 0.004133f, 0.004210f, 0.003843f, 0.006657f, 0.005388f, 0.005938f, 0.002477f, -0.002266f, -0.002748f, -0.000228f, -0.002567f, -0.004951f, -0.003176f, 0.002194f, 0.005103f, 0.006385f, 0.005036f, 0.004896f, 0.001218f, -0.002546f, -0.005375f, -0.008038f, -0.010830f, -0.010118f, -0.008915f, -0.005546f, -0.002374f, 0.002095f, 0.007689f, 0.013675f, 0.015272f, 0.015251f, 0.012285f, 0.007644f, 0.001687f, -0.003746f, -0.010958f, -0.014265f, -0.015488f, -0.013347f, -0.009609f, -0.004614f, 0.001057f, 0.006381f, 0.007769f, 0.009162f, 0.008066f, - 0.005831f, 0.002823f, 0.001199f, -0.000307f, -0.000813f, -0.001512f, -0.001536f, -0.001870f, -0.001008f, -0.001180f, -0.000923f, -0.001204f, -0.000518f, -0.000670f, -0.000110f, -0.000390f, 0.000129f, -0.000294f, 0.000147f, -0.000211f} - }, - { - {-0.006330f, 0.006372f, 0.005245f, 0.012101f, -0.016482f, 0.003612f, 0.010679f, 0.019825f, -0.002242f, 0.011209f, -0.000579f, 0.010185f, 0.002326f, 0.015574f, -0.000426f, -0.004932f, 0.010316f, 0.014928f, 0.013947f, 0.008387f, 0.002158f, -0.005639f, -0.004625f, 0.001479f, 0.007064f, -0.003561f, 0.003226f, 0.000968f, 0.008047f, -0.003864f, -0.000334f, 0.002115f, -0.009840f, -0.005579f, -0.002967f, -0.010086f, 0.002330f, -0.002793f, -0.000188f, -0.001307f, -0.008562f, 0.006661f, 0.009988f, -0.002014f, 0.000712f, 0.001000f, -0.001709f, 0.010776f, -0.013087f, 0.000030f, 0.005280f, 0.001509f, 0.001621f, -0.003054f, -0.010853f, -0.002685f, 0.004093f, 0.005013f, 0.005410f, -0.000915f, 0.000099f, 0.000133f, 0.002092f, -0.001768f, 0.011179f, 0.000374f, -0.001078f, -0.007328f, 0.000912f, -0.005233f, -0.004164f, 0.004501f, 0.004759f, 0.011671f, 0.000327f, 0.011476f, 0.001215f, 0.001291f, 0.000687f, -0.005984f, 0.000292f, -0.002095f, -0.003150f, 0.001287f, 0.003576f, -0.002256f, 0.001398f, -0.002336f, 0.002824f, -0.002978f, -0.001017f, -0.001505f, 0.001602f, -0.000917f, 0.001492f, -0.001304f, - 0.001773f, 0.003299f, 0.001545f, -0.001536f, -0.000500f, -0.000766f, -0.000865f, 0.000979f, 0.000620f, -0.000738f, 0.012949f, 0.020945f, 0.002825f, 0.010416f, -0.003770f, 0.006178f, 0.008111f, -0.002511f, -0.006471f, 0.010972f, 0.018979f, -0.003740f, 0.002123f, 0.007313f, -0.009061f, 0.005630f, 0.008113f, -0.016598f, 0.004680f, 0.001597f, -0.003712f, -0.000020f, -0.017244f, 0.000681f, 0.004853f, -0.008228f, 0.001536f, 0.000269f, 0.011074f, 0.007877f, -0.004135f, -0.001202f, -0.001034f, -0.011774f, -0.007886f, 0.001271f, 0.004764f, 0.001042f, 0.005291f, -0.007786f, 0.001188f, 0.003857f, 0.000817f, -0.007210f, -0.005248f, -0.001614f, 0.002517f, 0.005795f, 0.006030f, 0.003991f, 0.007037f, 0.006853f, -0.007702f, -0.002382f, 0.000326f, 0.009750f, -0.001474f, 0.006990f, -0.004598f, -0.004793f, -0.001465f, -0.008801f, -0.004040f, 0.001779f, 0.005136f, -0.007514f, 0.007347f, -0.002095f, -0.002179f, -0.001484f, -0.002960f, -0.003810f, 0.001527f, 0.005687f, 0.002138f, 0.009505f, -0.013203f, -0.010672f, -0.002337f, 0.003929f, -0.000132f, -0.002191f, 0.002028f, 0.000278f, 0.002458f, 0.004002f, - 0.006740f, 0.000102f, -0.000390f, 0.001577f, -0.000619f, -0.000115f, 0.001044f, -0.003110f, -0.001618f, -0.006414f, 0.002556f, 0.012150f, 0.017208f, 0.009960f, -0.004304f, 0.007369f, -0.004484f, -0.003038f, -0.014681f, -0.011712f, 0.005323f, 0.011247f, 0.011035f, 0.011467f, 0.002586f, 0.000612f, 0.007137f, -0.009485f, 0.009564f, 0.007716f, 0.000743f, 0.006628f, 0.017071f, 0.011586f, 0.003281f, -0.012249f, 0.000391f, 0.004112f, 0.002678f, 0.002018f, -0.013378f, 0.003210f, 0.002507f, 0.008977f, 0.009949f, -0.003115f, 0.006405f, -0.004827f, -0.005316f, 0.007216f, 0.004136f, -0.012842f, -0.012110f, -0.005324f, -0.006785f, -0.005083f, -0.005380f, -0.014835f, -0.013380f, -0.001215f, 0.004893f, -0.000085f, -0.001369f, -0.009995f, 0.001381f, 0.011866f, -0.003281f, -0.003747f, 0.004520f, -0.000022f, 0.008634f, 0.004316f, 0.004438f, -0.005534f, -0.006780f, 0.012744f, 0.005885f, -0.005097f, 0.008450f, -0.001114f, 0.006601f, -0.005530f, 0.001089f, 0.009410f, -0.003513f, -0.003044f, 0.006842f, 0.000836f, 0.002762f, 0.004043f, -0.004618f, 0.005281f, -0.002136f, 0.004328f, 0.004417f, 0.003372f, - -0.002936f, 0.001106f, -0.001429f, -0.002546f, -0.003200f, 0.000189f, 0.000457f, 0.002133f, 0.001893f, 0.000501f, -0.000098f, 0.001676f, 0.000591f, 0.001169f, -0.023712f, -0.014019f, -0.004341f, 0.004466f, -0.009752f, 0.002950f, -0.002641f, 0.006800f, -0.001621f, -0.013332f, -0.010537f, 0.009166f, 0.007569f, 0.018995f, 0.016844f, -0.002586f, 0.012199f, -0.018325f, -0.002935f, 0.014189f, 0.004328f, 0.003268f, -0.001831f, -0.006006f, -0.002743f, 0.001938f, -0.001587f, -0.000584f, 0.007243f, -0.008998f, 0.002048f, 0.003232f, -0.000168f, 0.005635f, -0.006117f, -0.005079f, 0.003307f, -0.003956f, 0.005113f, -0.010050f, 0.001714f, -0.006047f, -0.002318f, -0.006731f, -0.004968f, -0.007643f, -0.011247f, 0.006905f, -0.000020f, 0.011789f, -0.010991f, -0.009478f, -0.000023f, 0.002242f, -0.001243f, -0.002290f, 0.000837f, 0.007096f, 0.003464f, 0.001514f, -0.004802f, -0.004705f, -0.002602f, -0.008839f, 0.001461f, -0.002301f, 0.001093f, -0.000430f, -0.009438f, -0.000811f, -0.000693f, -0.010070f, 0.000338f, -0.001909f, 0.001230f, -0.001707f, -0.011138f, 0.001001f, 0.005095f, -0.002234f, 0.007462f, 0.002040f, - -0.003894f, 0.003112f, 0.007828f, 0.002551f, 0.001405f, 0.001754f, -0.001580f, 0.000963f, 0.006141f, -0.000475f, -0.000897f, 0.002238f, 0.002564f, 0.000968f, 0.002082f, 0.000436f, 0.000915f, -0.004058f, 0.000523f, -0.000317f, -0.001919f, -0.001453f, -0.001393f, -0.002062f, 0.000393f, -0.001690f, 0.008400f, -0.012831f, 0.005310f, -0.014331f, -0.002333f, 0.000632f, -0.010377f, 0.009841f, 0.007710f, -0.021240f, -0.001988f, 0.003493f, -0.001801f, -0.009329f, -0.012260f, 0.002496f, -0.006092f, -0.010397f, -0.004936f, 0.006061f, 0.005594f, 0.014954f, 0.019696f, -0.001761f, 0.017619f, -0.010767f, 0.007031f, 0.007545f, -0.001386f, 0.007432f, -0.004129f, 0.000107f, -0.000972f, -0.003650f, -0.001700f, -0.004079f, 0.014711f, -0.000867f, -0.010672f, -0.002639f, 0.007453f, 0.004480f, 0.005994f, 0.001116f, -0.004897f, 0.010583f, 0.021824f, 0.001308f, 0.002356f, 0.001228f, -0.001438f, 0.003389f, -0.001280f, 0.012335f, -0.009286f, 0.011798f, 0.008381f, -0.007557f, 0.004034f, 0.007673f, 0.005457f, -0.009048f, -0.009581f, -0.019326f, -0.002973f, -0.001857f, 0.002632f, 0.007424f, -0.001629f, 0.004823f, - -0.001454f, -0.005158f, -0.004920f, 0.009931f, -0.002083f, 0.010537f, -0.015397f, -0.006181f, 0.003779f, -0.009915f, 0.002767f, 0.010603f, 0.001209f, -0.000102f, 0.000984f, 0.002243f, 0.001665f, -0.006013f, -0.001711f, -0.000997f, 0.001082f, -0.001083f, 0.002161f, 0.002709f, 0.001619f, -0.001751f, -0.003810f, 0.004394f, 0.001918f, 0.001704f, 0.001372f, 0.001271f, 0.000541f, 0.000103f, -0.001722f, 0.001831f, 0.001091f, 0.000713f, 0.000546f, 0.001927f, 0.001522f, 0.002312f, -0.002457f, -0.001637f, -0.002921f, -0.002931f, -0.000546f, 0.002322f, -0.001604f, -0.001101f, 0.001518f, 0.000512f, 0.001189f, -0.000495f, 0.000430f, 0.005399f, 0.002697f, 0.000080f, 0.007752f, 0.021664f, 0.025993f, -0.006890f, -0.000374f, 0.005239f, -0.003673f, 0.016506f, 0.016519f, -0.010443f, 0.016201f, 0.012372f, 0.005068f, 0.007103f, 0.006744f, 0.003153f, -0.001165f, 0.000992f, 0.002384f, -0.008981f, -0.010543f, 0.002664f, -0.002776f, -0.000296f, 0.002110f, -0.009690f, 0.009865f, 0.019153f, -0.000353f, -0.011740f, 0.019133f, 0.002144f, 0.000833f, 0.007264f, -0.003060f, -0.005809f, 0.003005f, -0.007245f, - 0.003094f, 0.019140f, 0.008523f, -0.000281f, 0.007157f, 0.010344f, 0.027478f, -0.004585f, 0.012009f, -0.002469f, -0.011564f, 0.007646f, 0.000975f, -0.004062f, 0.005623f, 0.016560f, 0.004554f, 0.002843f, 0.000027f, 0.006562f, 0.024362f, 0.010684f, 0.003285f, 0.002330f, 0.006616f, -0.007058f, 0.012600f, -0.003287f, -0.023567f, 0.002800f, -0.002281f, 0.014264f, 0.017197f, 0.007222f, -0.006956f, -0.006670f, -0.005893f, -0.000944f, 0.005543f, 0.000403f, 0.003844f, 0.002341f, 0.004017f, 0.010703f, 0.004948f, -0.008643f, -0.003435f, 0.001105f, 0.003264f, 0.000471f, 0.000067f, 0.000245f, -0.004417f, 0.004895f, 0.001453f, 0.000935f, 0.000821f, 0.000936f, 0.000741f, 0.003651f, -0.001234f, 0.002645f, -0.002429f, -0.000866f, -0.003997f, 0.000798f, -0.001360f, -0.000296f, 0.000535f, 0.001731f, -0.029323f, -0.003060f, -0.012577f, -0.014369f, -0.004096f, -0.010193f, 0.000259f, 0.009134f, -0.013906f, 0.014348f, -0.030473f, 0.004482f, -0.009197f, -0.015926f, -0.021871f, 0.022741f, 0.011011f, 0.001623f, -0.019416f, -0.012364f, 0.006893f, -0.024718f, -0.017660f, 0.006063f, 0.005016f, 0.025422f, - -0.003552f, 0.002253f, 0.018449f, -0.010993f, 0.018113f, 0.006451f, 0.006458f, -0.003448f, -0.011362f, -0.001163f, 0.015027f, -0.008131f, 0.001011f, 0.019361f, -0.007317f, -0.005548f, -0.009607f, -0.011304f, -0.010181f, -0.007288f, -0.015841f, -0.001784f, 0.004356f, -0.005208f, 0.003102f, -0.004978f, -0.008269f, 0.010919f, -0.014192f, 0.008537f, -0.012116f, -0.014757f, 0.000389f, 0.012330f, 0.000460f, -0.003582f, 0.004512f, -0.009817f, -0.005343f, -0.013796f, -0.025114f, -0.011607f, 0.003169f, -0.007416f, 0.027929f, 0.011341f, -0.020109f, -0.009868f, -0.003297f, -0.007038f, 0.008712f, 0.019261f, 0.012227f, -0.009208f, 0.008494f, -0.010936f, 0.006238f, 0.001067f, 0.008508f, -0.009680f, -0.002708f, 0.000934f, -0.004694f, -0.008252f, -0.007367f, 0.001358f, -0.000866f, -0.001873f, 0.003952f, 0.001736f, 0.000260f, -0.002694f, 0.002188f, -0.000486f, -0.002570f, -0.005999f, -0.000570f, -0.003059f, 0.000092f, 0.002747f, -0.002437f, -0.006683f, -0.001230f, -0.002811f, -0.011344f, -0.001570f, -0.003519f, 0.031197f, 0.020800f, 0.021252f, -0.006016f, -0.030953f, -0.002176f, -0.016014f, 0.004194f, 0.006470f, - 0.016738f, -0.008066f, 0.007481f, -0.012926f, 0.002399f, -0.011442f, -0.028232f, -0.015700f, 0.011143f, -0.010735f, -0.022323f, -0.021566f, -0.019487f, -0.031161f, 0.004077f, -0.011139f, -0.023215f, -0.021455f, 0.003946f, 0.029324f, -0.003727f, -0.005299f, -0.009683f, -0.018339f, 0.003951f, -0.007508f, 0.002206f, -0.022793f, 0.001667f, -0.023728f, 0.003497f, -0.002249f, 0.012796f, 0.009388f, 0.010689f, 0.005030f, -0.000656f, 0.008338f, -0.005510f, 0.016736f, 0.005031f, 0.008303f, 0.005412f, -0.005927f, 0.006307f, 0.016868f, -0.002023f, 0.009274f, -0.002222f, 0.026725f, 0.003707f, 0.009833f, 0.001543f, -0.015508f, -0.011392f, 0.000202f, -0.005161f, 0.003168f, -0.003711f, 0.008639f, 0.008212f, 0.010096f, -0.004578f, 0.005619f, -0.020548f, 0.010723f, 0.030566f, -0.014961f, -0.002870f, 0.007747f, -0.017268f, -0.001515f, 0.011146f, -0.007179f, -0.000875f, -0.003947f, 0.009720f, -0.010074f, -0.002117f, 0.002334f, -0.005244f, 0.002335f, -0.001685f, 0.003707f, -0.004840f, -0.005343f, 0.005811f, -0.002832f, -0.005340f, 0.003619f, -0.001987f, -0.000182f, -0.007632f, 0.005689f, 0.002206f, -0.001597f, - -0.001100f, 0.003116f, 0.001410f, 0.003014f, 0.002606f, 0.000299f, -0.003165f, -0.006211f, -0.001538f, 0.003216f, -0.015277f, -0.044077f, -0.007364f, -0.015357f, -0.023283f, 0.012546f, -0.044386f, -0.005712f, -0.015832f, -0.008551f, 0.012730f, -0.014078f, 0.018677f, 0.016195f, 0.002503f, 0.014605f, 0.001217f, 0.007733f, -0.011630f, -0.020365f, -0.022528f, -0.012538f, -0.020655f, 0.016059f, 0.020932f, -0.000885f, -0.011157f, 0.006083f, 0.005971f, -0.007725f, 0.001456f, -0.035042f, -0.018630f, 0.016312f, -0.009031f, 0.000481f, 0.015901f, -0.001514f, 0.009798f, 0.008471f, -0.004663f, 0.009691f, -0.000216f, -0.018687f, 0.020700f, -0.014628f, 0.000896f, 0.001145f, -0.011588f, 0.007641f, 0.012294f, -0.007322f, 0.014060f, 0.001588f, -0.001220f, -0.012963f, 0.015895f, -0.000097f, -0.013090f, -0.004304f, -0.026106f, -0.010908f, -0.014959f, -0.001885f, 0.017745f, 0.005151f, -0.001826f, 0.000290f, -0.016945f, 0.003775f, 0.012805f, -0.016973f, 0.000843f, 0.025970f, -0.010828f, 0.002541f, 0.001833f, -0.018477f, -0.011248f, 0.011810f, 0.009760f, -0.030061f, 0.005914f, 0.022466f, -0.000255f, 0.002674f, - -0.000012f, 0.005409f, -0.001863f, 0.014178f, -0.003399f, -0.000598f, 0.001665f, 0.002716f, -0.006589f, 0.001623f, 0.004842f, 0.001532f, 0.008273f, 0.003089f, -0.000341f, -0.003107f, -0.006805f, -0.001929f, 0.002990f, -0.004123f, 0.002816f, -0.004228f, -0.000292f, 0.005832f, 0.002965f, -0.004129f, -0.005762f, 0.000281f, 0.000012f, 0.012422f, -0.005196f, 0.001007f, 0.006623f, 0.002740f, 0.006532f, 0.078735f, 0.017338f, -0.010164f, -0.015920f, -0.001400f, -0.005140f, 0.014054f, -0.003260f, 0.011895f, 0.022131f, -0.008877f, 0.000964f, -0.014641f, -0.010259f, 0.004846f, -0.002595f, 0.011556f, -0.022196f, -0.012816f, 0.010237f, 0.022175f, 0.014413f, -0.000597f, 0.005065f, -0.005327f, -0.013437f, 0.009673f, 0.017091f, 0.018179f, 0.021673f, -0.018018f, -0.004458f, -0.010307f, -0.022613f, -0.002768f, 0.000991f, -0.004852f, 0.010138f, 0.013671f, -0.000209f, 0.006777f, -0.004206f, -0.023786f, -0.013157f, -0.031834f, -0.032540f, -0.009393f, 0.010659f, -0.004683f, -0.014515f, 0.027169f, 0.010075f, -0.001061f, -0.025619f, -0.001121f, -0.008019f, -0.018151f, 0.000043f, -0.008286f, -0.011970f, -0.025154f, - -0.003415f, -0.009272f, -0.027881f, 0.000025f, 0.021004f, -0.014208f, -0.006938f, 0.007853f, -0.012098f, 0.004765f, -0.011989f, 0.017281f, -0.005708f, -0.016654f, -0.026073f, -0.042500f, 0.008221f, 0.007207f, 0.032323f, 0.013101f, 0.011083f, -0.000139f, 0.009697f, -0.007633f, 0.010288f, -0.000950f, 0.003522f, 0.005218f, 0.012236f, 0.005690f, 0.000342f, -0.002257f, -0.000773f, 0.004924f, 0.002913f, 0.012894f, 0.009957f, 0.006773f, 0.002049f, -0.002615f, -0.006960f, 0.003726f, 0.008209f, 0.000754f, 0.000387f, -0.001562f, -0.006170f, -0.001033f, -0.001037f, -0.002884f, -0.002287f, -0.004647f, 0.003738f, 0.005691f, -0.005465f, -0.005420f, -0.000439f, -0.000706f, 0.002846f, 0.017560f, -0.062148f, -0.035597f, 0.033137f, -0.008690f, 0.002251f, -0.017214f, 0.014535f, -0.006006f, -0.023890f, 0.011449f, 0.033511f, 0.004191f, -0.029055f, 0.008152f, -0.006211f, -0.006762f, 0.019365f, 0.019848f, -0.002533f, -0.004129f, 0.042177f, 0.009320f, -0.005880f, -0.025891f, 0.011602f, -0.037101f, -0.030312f, -0.028152f, 0.011571f, -0.005369f, -0.002836f, 0.024090f, 0.009810f, -0.024570f, -0.020309f, 0.005291f, - 0.024033f, 0.008124f, -0.002531f, 0.001318f, 0.016092f, -0.011522f, -0.025701f, 0.033767f, -0.009730f, 0.003481f, 0.013851f, 0.002084f, 0.004892f, 0.034735f, 0.000817f, 0.022121f, 0.001216f, -0.023307f, 0.003592f, 0.004962f, -0.004605f, 0.004430f, 0.016044f, -0.011787f, -0.003347f, 0.004037f, -0.045808f, 0.012208f, 0.009648f, -0.000270f, 0.011285f, 0.008607f, -0.016843f, 0.008098f, 0.063473f, 0.027183f, 0.015867f, 0.004588f, 0.015605f, -0.048609f, -0.022794f, 0.024611f, 0.001237f, -0.000214f, -0.018398f, 0.016455f, 0.020160f, 0.016681f, 0.003040f, 0.003513f, -0.006409f, 0.000289f, -0.011298f, -0.004178f, 0.009403f, -0.002033f, -0.005558f, 0.004776f, 0.000650f, 0.004586f, -0.006465f, -0.002826f, 0.002546f, -0.001195f, 0.004894f, -0.008032f, -0.002503f, 0.005782f, -0.006151f, 0.004684f, 0.001976f, 0.000637f, 0.000469f, 0.000094f, -0.004925f, 0.002647f, 0.005112f, -0.002379f, -0.002131f, -0.005552f, 0.002749f, -0.000303f, -0.041481f, 0.029071f, 0.031620f, 0.009875f, 0.017551f, -0.011841f, 0.050323f, -0.006129f, 0.019345f, 0.012827f, -0.022860f, -0.009712f, -0.010422f, 0.028866f, - -0.017069f, -0.005620f, 0.018567f, 0.015188f, -0.016775f, -0.004843f, -0.048941f, 0.008968f, -0.005222f, -0.014664f, 0.004486f, 0.001106f, 0.003859f, 0.004297f, 0.016876f, 0.000456f, 0.018463f, 0.001946f, 0.009114f, -0.004937f, -0.015621f, -0.017119f, 0.031996f, -0.011545f, -0.022790f, -0.019596f, -0.008562f, -0.010884f, 0.014004f, 0.008325f, 0.010834f, 0.013824f, 0.004429f, -0.017644f, 0.010195f, -0.028630f, -0.009083f, -0.025047f, 0.017286f, -0.030185f, -0.021289f, -0.006591f, -0.009880f, 0.008713f, 0.020357f, -0.016247f, 0.019229f, 0.031081f, 0.015755f, 0.029932f, -0.012450f, 0.040260f, 0.003910f, 0.034072f, 0.019661f, 0.004032f, -0.018090f, -0.046254f, -0.030878f, -0.025518f, -0.014149f, -0.014411f, -0.004301f, -0.021670f, 0.016360f, 0.026664f, -0.010141f, -0.020876f, -0.018604f, -0.015136f, -0.027785f, 0.017386f, 0.012967f, -0.007690f, -0.007003f, -0.011124f, 0.001652f, -0.006413f, 0.015305f, -0.000213f, 0.004085f, -0.008300f, -0.006688f, -0.011598f, -0.001872f, -0.013843f, -0.012829f, 0.013114f, -0.000725f, 0.001375f, 0.000551f, 0.004643f, -0.005117f, -0.000766f, -0.007798f, 0.000007f, - 0.000266f, -0.000613f, 0.004346f, 0.000174f, -0.006343f, -0.004574f, -0.004491f, 0.001054f, -0.006833f, -0.007943f, -0.009478f, 0.002357f, -0.002409f, 0.023253f, 0.011848f, -0.013228f, 0.039142f, 0.004426f, -0.038215f, 0.047716f, 0.003192f, -0.020326f, 0.016833f, -0.039193f, -0.007511f, -0.024955f, -0.007802f, -0.004423f, -0.007669f, -0.017842f, 0.004984f, -0.033867f, -0.013112f, -0.012217f, -0.045709f, 0.005543f, -0.033156f, -0.023563f, -0.037197f, 0.007451f, -0.028073f, -0.008477f, -0.009319f, 0.000294f, 0.014114f, -0.011411f, 0.019878f, 0.001019f, 0.026384f, -0.006163f, 0.022943f, 0.028940f, -0.034782f, -0.000532f, 0.009284f, 0.021242f, 0.000791f, 0.025543f, 0.008517f, 0.024628f, -0.000561f, -0.018840f, -0.011884f, -0.001824f, 0.015898f, -0.003685f, -0.007386f, -0.001615f, 0.029478f, 0.018630f, -0.007079f, -0.024355f, 0.008099f, 0.013356f, 0.009445f, 0.026171f, -0.035138f, -0.025962f, -0.007481f, 0.002456f, -0.009947f, 0.000265f, -0.010144f, -0.021946f, 0.061452f, -0.030409f, -0.035353f, 0.026313f, 0.015079f, 0.022858f, 0.006929f, 0.008394f, 0.004640f, 0.013358f, -0.012737f, 0.035330f, - -0.006283f, 0.008655f, -0.006939f, 0.004717f, 0.002011f, -0.001951f, 0.022420f, 0.002809f, 0.001854f, -0.022229f, 0.009937f, 0.003311f, -0.003389f, -0.018105f, -0.001986f, -0.003754f, 0.000340f, -0.005773f, 0.016091f, 0.003744f, 0.004390f, -0.013086f, 0.008778f, -0.006224f, 0.001661f, 0.007820f, -0.000488f, -0.003875f, -0.004367f, -0.011642f, 0.006594f, 0.011888f, -0.005839f, -0.001321f, -0.004386f, 0.001765f, -0.006943f, -0.015663f, -0.004933f, -0.000529f, -0.010930f, 0.011121f, -0.001172f, -0.001512f, 0.003546f, -0.010527f, -0.012141f, -0.003369f, 0.004681f, -0.007992f, -0.010644f, 0.031224f, 0.022634f, 0.036881f, -0.012424f, -0.008883f, -0.050589f, 0.058692f, 0.026597f, -0.077714f, -0.041915f, 0.025158f, 0.034461f, 0.035079f, -0.022629f, -0.018001f, 0.041991f, 0.010200f, 0.009465f, 0.029451f, 0.023431f, -0.042896f, 0.012975f, 0.018335f, -0.003453f, 0.020509f, 0.003680f, -0.005360f, 0.003982f, -0.013854f, 0.071688f, 0.019001f, 0.009134f, -0.001810f, -0.009131f, -0.004671f, -0.041033f, 0.007984f, 0.011750f, -0.009447f, -0.013616f, -0.065886f, -0.031795f, 0.013977f, 0.011271f, -0.021525f, - -0.021446f, -0.002846f, -0.031689f, 0.013150f, 0.011424f, -0.004436f, 0.012883f, 0.026177f, 0.001056f, -0.001222f, -0.008595f, -0.013788f, -0.004804f, 0.002464f, -0.048934f, -0.006357f, 0.011177f, 0.029801f, -0.052943f, 0.011822f, 0.018623f, -0.004029f, -0.025066f, -0.022279f, 0.039517f, 0.039432f, -0.006018f, -0.024441f, -0.046848f, 0.009914f, 0.018412f, 0.009883f, 0.000504f, -0.050684f, 0.021152f, 0.046324f, -0.015924f, 0.005316f, 0.014247f, -0.018926f, -0.030620f, -0.015955f, 0.004350f, -0.009329f, -0.002691f, -0.014223f, -0.012608f, -0.010371f, -0.004712f, -0.004041f, 0.005894f, -0.001042f, -0.001212f, -0.012968f, 0.005088f, -0.006062f, 0.002514f, 0.000155f, 0.003926f, 0.007952f, 0.008918f, -0.014508f, 0.005559f, -0.011205f, -0.019227f, -0.009909f, 0.002428f, -0.001881f, 0.007985f, -0.001806f, 0.005099f, 0.011209f, 0.000271f, -0.000494f, -0.010108f, -0.005461f, 0.014519f, 0.007528f, -0.006485f, -0.003776f, -0.001728f, -0.009415f, 0.023123f, -0.017020f, 0.006267f, -0.014181f, -0.012603f, 0.002215f, 0.015645f, 0.031387f, -0.057824f, -0.075344f, -0.052451f, -0.067407f, 0.058474f, -0.039040f, - 0.023499f, -0.006593f, -0.047440f, 0.008479f, -0.012932f, -0.017602f, -0.061574f, -0.056341f, -0.042150f, -0.016066f, 0.002114f, -0.032613f, -0.009525f, 0.008590f, 0.026399f, 0.002073f, -0.016562f, 0.000034f, -0.017707f, 0.025374f, -0.032057f, 0.044139f, 0.037976f, -0.009155f, -0.012212f, -0.052445f, -0.030656f, -0.031920f, 0.003733f, 0.006981f, -0.008643f, 0.042749f, 0.012093f, 0.034636f, 0.006733f, -0.004168f, -0.015859f, 0.031144f, 0.021450f, 0.009715f, -0.031477f, 0.016706f, -0.053152f, -0.006015f, -0.005752f, -0.035305f, -0.005918f, 0.000335f, 0.040430f, 0.026767f, 0.000646f, 0.018648f, -0.000874f, -0.040099f, 0.020239f, 0.005536f, 0.033220f, -0.019010f, -0.038612f, 0.022822f, -0.069281f, -0.015999f, 0.024331f, -0.010525f, -0.011153f, 0.016789f, -0.004654f, -0.013789f, 0.012658f, -0.005928f, -0.044520f, -0.039181f, -0.006609f, 0.018088f, 0.029360f, 0.041348f, 0.041440f, -0.017820f, -0.014304f, 0.008000f, 0.014919f, 0.013408f, 0.005520f, -0.018687f, 0.016087f, 0.000103f, -0.003605f, 0.001887f, 0.009912f, 0.016655f, -0.005096f, 0.002626f, 0.015786f, -0.003928f, -0.000485f, -0.016335f, - 0.007877f, -0.003752f, -0.001282f, 0.013025f, -0.002765f, -0.006188f, 0.005795f, -0.018569f, -0.006935f, 0.018341f, 0.005170f, 0.005757f, -0.006741f, -0.004629f, -0.002909f, -0.014894f, -0.002081f, -0.008441f, 0.010923f, -0.032046f, 0.000379f, 0.023528f, -0.075816f, -0.006564f, -0.048430f, 0.003413f, -0.035781f, 0.032629f, -0.025677f, -0.002215f, 0.005900f, 0.012479f, 0.038353f, 0.013479f, -0.017970f, 0.042355f, 0.012640f, -0.070799f, 0.011371f, -0.042286f, -0.003405f, 0.008629f, -0.006326f, 0.035675f, -0.010775f, 0.006888f, 0.008572f, 0.003596f, -0.023187f, 0.036213f, -0.020996f, -0.001461f, -0.042084f, 0.000472f, 0.006782f, -0.006098f, -0.014992f, -0.018653f, -0.022114f, 0.054658f, 0.001886f, 0.028553f, -0.048493f, 0.005960f, -0.000875f, 0.017074f, 0.028516f, -0.032638f, 0.058638f, 0.085321f, -0.004125f, 0.008703f, -0.029851f, 0.014090f, 0.019497f, -0.015865f, 0.003991f, 0.016482f, 0.032681f, -0.000564f, 0.001714f, -0.009698f, -0.028851f, -0.042502f, 0.021697f, -0.031750f, -0.013840f, -0.020624f, 0.009133f, 0.029466f, 0.025777f, -0.004644f, 0.009561f, -0.057870f, 0.038378f, -0.006689f, - 0.008209f, -0.016648f, 0.037503f, -0.051890f, 0.062315f, 0.045963f, 0.051893f, -0.020554f, -0.001417f, -0.050855f, -0.028006f, -0.018616f, 0.016711f, 0.014741f, -0.042665f, -0.030708f, 0.001028f, -0.010376f, -0.031164f, 0.000334f, -0.021615f, -0.025052f, -0.009684f, -0.003402f, 0.001819f, -0.016428f, 0.002873f, 0.006086f, 0.025617f, 0.023449f, -0.003712f, 0.022126f, -0.010822f, -0.026742f, -0.015133f, -0.005432f, -0.013792f, -0.001713f, -0.010273f, 0.015726f, 0.004552f, 0.059643f, 0.007753f, -0.020060f, -0.007088f, 0.005661f, -0.031048f, -0.019004f, 0.007319f, 0.001575f, -0.008075f, 0.003421f, -0.000015f, -0.033513f, -0.003573f, 0.022957f, -0.016709f, 0.024074f, 0.095284f, 0.026423f, 0.069466f, 0.021354f, -0.071147f, 0.028221f, 0.020561f, -0.024506f, 0.005480f, 0.045746f, 0.002650f, 0.043760f, 0.039889f, -0.046682f, 0.025956f, -0.046701f, -0.030562f, -0.004974f, 0.093264f, 0.027890f, -0.041264f, 0.038905f, 0.026014f, -0.051617f, -0.021946f, -0.004087f, 0.052445f, 0.007068f, -0.046897f, -0.027293f, -0.000919f, -0.013593f, 0.029367f, 0.040960f, -0.014461f, 0.035956f, -0.022977f, -0.032448f, - -0.000533f, 0.074700f, 0.007572f, -0.043816f, 0.025163f, -0.002615f, -0.003730f, 0.020492f, -0.048496f, -0.042982f, -0.039689f, 0.028926f, -0.025793f, 0.008939f, 0.013136f, 0.044435f, 0.022850f, 0.045698f, 0.005515f, -0.002573f, 0.038323f, 0.068708f, 0.041765f, -0.069097f, 0.002014f, 0.006094f, -0.011014f, 0.012654f, 0.019607f, -0.053487f, -0.007380f, 0.009920f, 0.009768f, -0.063596f, -0.059143f, -0.034059f, -0.035699f, 0.062030f, 0.023755f, 0.002348f, 0.028217f, -0.051619f, 0.021684f, 0.013589f, 0.009941f, -0.005067f, -0.011084f, 0.042692f, 0.026592f, -0.017847f, 0.007995f, -0.013593f, 0.028829f, -0.008687f, 0.002583f, 0.005386f, 0.004786f, 0.020500f, -0.002734f, -0.034715f, -0.000839f, 0.005871f, 0.009565f, 0.017044f, -0.004170f, 0.001038f, 0.013757f, -0.027028f, -0.015104f, -0.002994f, -0.047602f, -0.007926f, 0.013957f, -0.004100f, 0.005821f, 0.027056f, -0.003342f, -0.019770f, 0.004713f, 0.006156f, 0.018525f, 0.020858f, -0.020028f, -0.013270f, -0.000767f, -0.018070f, -0.010812f, -0.034145f, -0.039394f, 0.010568f, 0.001257f, -0.018573f, -0.014480f, -0.018947f, -0.035801f, 0.026766f, - -0.071737f, 0.051877f, 0.058368f, 0.015937f, 0.063549f, -0.065079f, -0.031544f, -0.017727f, -0.093053f, 0.052399f, 0.005481f, 0.032386f, 0.043004f, 0.041696f, 0.003456f, -0.001445f, 0.042764f, -0.006855f, -0.050270f, -0.052555f, 0.031985f, -0.059359f, 0.058070f, -0.016700f, 0.012930f, 0.057186f, 0.051922f, -0.026094f, 0.078935f, -0.045696f, 0.005365f, -0.047506f, 0.007943f, -0.016286f, 0.031255f, 0.010453f, -0.033357f, 0.030115f, 0.046172f, 0.067334f, -0.038667f, 0.014361f, 0.041680f, -0.056899f, 0.002934f, -0.022893f, -0.081889f, -0.035410f, 0.022271f, -0.045188f, 0.016413f, -0.037936f, -0.000578f, 0.055332f, -0.025927f, 0.023430f, 0.064136f, 0.045537f, 0.017427f, 0.084799f, -0.131741f, -0.024904f, 0.044479f, -0.005094f, 0.026084f, -0.040910f, -0.071005f, 0.086732f, -0.000851f, -0.043681f, 0.019121f, 0.054898f, 0.136604f, 0.051595f, -0.102579f, -0.056201f, 0.035523f, 0.038118f, 0.016957f, -0.071911f, -0.005825f, 0.015811f, -0.021777f, 0.048616f, 0.017847f, 0.031051f, 0.037388f, 0.027738f, -0.018407f, 0.021432f, -0.056660f, 0.008275f, 0.031036f, -0.003629f, -0.029819f, 0.017761f, - -0.018002f, 0.030358f, 0.034026f, -0.014293f, -0.027378f, -0.007474f, 0.062390f, -0.011027f, -0.006720f, -0.024197f, 0.028514f, -0.024027f, -0.014296f, 0.017922f, -0.010998f, 0.058319f, -0.003893f, -0.014398f, 0.059173f, -0.005205f, 0.014255f, 0.035930f, -0.002161f, -0.003034f, 0.004015f, 0.005364f, -0.026990f, 0.012561f, 0.002101f, -0.039961f, 0.027781f, -0.012379f, 0.052156f, -0.028057f, 0.016125f, 0.004853f, 0.069744f, -0.061254f, -0.005536f, -0.029232f, -0.036304f, 0.055980f, -0.021705f, 0.073489f, -0.007220f, -0.056510f, 0.088114f, 0.127387f, -0.018074f, -0.040510f, -0.061379f, 0.014762f, 0.067728f, 0.013456f, -0.014120f, -0.042008f, 0.010160f, 0.010140f, -0.009185f, 0.010617f, -0.005851f, -0.020528f, -0.020973f, 0.019695f, 0.027979f, -0.001918f, 0.037764f, -0.035989f, 0.077251f, 0.058275f, 0.033687f, -0.002559f, 0.004816f, 0.011227f, -0.040515f, -0.035413f, -0.039251f, -0.020496f, -0.010548f, 0.024967f, 0.021973f, 0.042100f, -0.019880f, -0.004677f, -0.017568f, 0.047876f, 0.093171f, -0.021588f, -0.059368f, -0.038106f, -0.002069f, -0.080489f, 0.063236f, -0.109444f, 0.032073f, 0.046914f, - 0.048210f, -0.047477f, 0.011588f, 0.048859f, -0.110759f, -0.052159f, 0.023269f, -0.011347f, -0.055263f, -0.048758f, -0.005901f, -0.025332f, 0.083176f, 0.035921f, -0.029789f, -0.027409f, -0.045398f, 0.127156f, 0.027757f, 0.066671f, -0.004208f, 0.019832f, 0.024506f, 0.028921f, -0.040864f, -0.004780f, 0.053201f, 0.036802f, 0.022303f, -0.016833f, -0.021958f, 0.000566f, 0.017036f, 0.024838f, 0.017106f, -0.032102f, 0.005323f, 0.000936f, 0.009137f, 0.024155f, 0.024300f, -0.033606f, 0.016633f, -0.020464f, -0.025167f, 0.003357f, 0.027487f, 0.011532f, -0.015399f, 0.004347f, -0.001587f, -0.004214f, -0.013040f, 0.051277f, -0.014240f, 0.000843f, -0.029536f, 0.007826f, -0.010460f, 0.034088f, 0.011537f, -0.006398f, -0.017076f, 0.019732f, 0.016508f, -0.022503f, 0.002394f, -0.037102f, -0.014135f, 0.009791f, 0.016411f, 0.022241f, 0.000588f, 0.023274f, -0.004574f, 0.004533f, 0.011931f, -0.046923f, 0.013501f, 0.074324f, 0.001528f, -0.024140f, 0.060727f, 0.044712f, -0.013440f, -0.038720f, -0.060482f, 0.012167f, 0.116888f, 0.026586f, 0.059604f, -0.004549f, 0.004592f, -0.004015f, -0.014490f, 0.000738f, - 0.004736f, 0.029214f, 0.008757f, -0.022110f, 0.018923f, -0.019264f, -0.022632f, -0.024155f, -0.000011f, 0.024310f, 0.004496f, 0.019576f, 0.019627f, 0.017061f, -0.017141f, -0.028476f, 0.008654f, -0.019524f, -0.051141f, -0.014291f, 0.010891f, -0.016960f, 0.058496f, -0.060292f, 0.049059f, -0.015077f, -0.000181f, 0.074070f, -0.012061f, -0.001371f, 0.095363f, -0.014099f, -0.039558f, 0.007671f, -0.033964f, -0.006979f, -0.032088f, 0.107421f, -0.030717f, 0.026364f, -0.026160f, -0.010919f, -0.015128f, 0.018322f, -0.027360f, -0.064907f, 0.028437f, -0.006949f, -0.073095f, 0.038566f, -0.019483f, 0.040988f, 0.090794f, -0.045168f, -0.001409f, -0.004148f, -0.013913f, -0.048648f, -0.008980f, 0.045580f, 0.017694f, 0.028173f, -0.041773f, 0.012818f, 0.007009f, -0.039491f, -0.011221f, 0.009440f, 0.020278f, 0.026205f, 0.001826f, 0.005429f, 0.016488f, -0.003489f, -0.020171f, 0.029475f, -0.011677f, -0.008269f, 0.026120f, 0.004070f, -0.007489f, 0.039765f, -0.002831f, -0.002483f, 0.000135f, 0.013311f, -0.011969f, 0.020306f, -0.015469f, -0.007184f, -0.012246f, 0.010792f, -0.000469f, -0.000970f, 0.005571f, 0.018696f, - -0.021790f, 0.005167f, -0.003014f, 0.013542f, 0.003808f, -0.003720f, 0.022304f, -0.013180f, 0.012016f, -0.003406f, 0.006578f, 0.001996f, 0.016725f, -0.001991f, -0.025612f, -0.000347f, 0.122883f, 0.061808f, 0.128911f, -0.072250f, -0.018217f, 0.042115f, -0.039728f, 0.030414f, 0.132617f, 0.031075f, 0.019581f, -0.035111f, -0.032391f, 0.037651f, -0.019544f, 0.053341f, -0.008304f, -0.012415f, -0.015042f, -0.076138f, 0.018799f, 0.091200f, -0.047744f, 0.055102f, 0.048708f, -0.031058f, -0.008789f, 0.037892f, -0.060171f, 0.030177f, -0.003757f, 0.045684f, 0.016058f, -0.038076f, -0.011678f, -0.076489f, -0.038618f, 0.035730f, 0.027520f, 0.059287f, 0.093216f, 0.009813f, 0.002056f, -0.080291f, -0.048424f, -0.047970f, -0.038852f, 0.020942f, -0.032124f, -0.009422f, -0.006906f, 0.023970f, -0.060658f, -0.009945f, 0.032354f, 0.016332f, 0.051151f, -0.006806f, -0.023562f, 0.050218f, -0.008464f, 0.030771f, -0.038055f, -0.023389f, -0.005338f, -0.012950f, 0.025305f, 0.036546f, 0.052347f, 0.014585f, 0.004926f, -0.035707f, -0.009378f, -0.018329f, 0.043959f, 0.000474f, 0.065546f, 0.011275f, 0.049544f, -0.047521f, - -0.016348f, -0.000331f, -0.000471f, 0.035386f, -0.004930f, -0.017580f, -0.008868f, 0.008704f, 0.003159f, 0.009217f, 0.017070f, 0.014648f, -0.008271f, -0.010560f, 0.001394f, -0.006232f, 0.014519f, 0.014764f, 0.004183f, -0.012298f, 0.001272f, -0.016131f, -0.006037f, -0.003505f, 0.028627f, 0.010034f, -0.002891f, 0.007308f, -0.017907f, -0.021992f, -0.014153f, 0.007037f, 0.016068f, -0.013073f, -0.000530f, 0.000293f, 0.012187f, 0.006412f, -0.000965f, 0.012235f, 0.002693f, -0.000547f, -0.011216f, 0.005848f, 0.004318f, -0.004815f, 0.002051f, 0.003756f, -0.016619f, -0.033011f, -0.126440f, 0.003932f, 0.201732f, 0.183187f, 0.171009f, 0.073408f, -0.073569f, -0.100412f, -0.100873f, -0.088956f, -0.165167f, -0.116821f, -0.115164f, 0.089210f, 0.135423f, 0.111646f, 0.176449f, 0.147971f, 0.030614f, -0.006220f, -0.064016f, -0.122841f, -0.074329f, -0.129111f, -0.071099f, -0.042812f, 0.000065f, -0.016730f, 0.031916f, 0.056292f, 0.094001f, 0.060142f, 0.098798f, 0.076285f, 0.078371f, 0.006738f, -0.065666f, -0.029038f, 0.001644f, -0.070475f, -0.094482f, -0.121476f, -0.120605f, -0.084533f, -0.012595f, 0.060140f, - 0.022928f, 0.087233f, 0.060696f, 0.099410f, 0.087401f, 0.096411f, 0.110581f, 0.060396f, -0.009143f, -0.017386f, -0.073197f, -0.058847f, -0.196616f, -0.156243f, -0.126271f, -0.097661f, 0.010842f, -0.042318f, 0.002186f, 0.134445f, 0.164743f, 0.226764f, 0.142452f, 0.086558f, 0.057925f, 0.014219f, -0.087263f, -0.078880f, -0.121420f, -0.155648f, -0.132899f, -0.122862f, -0.058514f, 0.009421f, 0.061934f, 0.103339f, 0.100925f, 0.086939f, 0.053895f, 0.058524f, 0.024305f, 0.016158f, -0.003396f, -0.047465f, -0.042414f, -0.037661f, -0.043148f, -0.022118f, -0.048154f, -0.033486f, 0.011174f, 0.004598f, -0.028244f, 0.015557f, 0.038588f, 0.022790f, 0.044112f, 0.070215f, 0.071904f, 0.032517f, -0.045405f, -0.018853f, -0.006863f, -0.090888f, -0.097018f, -0.083565f, -0.035680f, 0.026627f, 0.040715f, 0.034974f, 0.057331f, 0.066018f, 0.080225f, 0.054141f, 0.032483f, -0.011849f, -0.054733f, -0.054525f, -0.061914f, -0.082062f, -0.059204f, -0.032004f, 0.027674f, 0.045372f, 0.028503f, 0.018180f, 0.051826f, 0.035905f, 0.020974f, 0.005514f, -0.008307f, -0.016183f, 0.001229f, -0.019537f, -0.024365f, -0.008240f, - 0.007601f, -0.013362f, -0.010867f, 0.002800f, 0.010384f, 0.001938f, -0.005716f, -0.006624f, 0.007725f, 0.000528f, -0.004535f, -0.007924f, 0.002537f, 0.011730f, 0.013755f, 0.002511f, 0.011811f, 0.011176f, 0.005682f, -0.003101f, -0.002882f, -0.009451f, -0.009147f, -0.013993f, -0.007856f, -0.009087f, -0.002446f, 0.001209f, 0.002521f, -0.000868f, 0.005543f, 0.007114f, 0.010682f, -0.002811f, -0.001262f, 0.003656f, 0.005509f, -0.004479f, -0.000405f, -0.001436f, 0.000678f, 0.002453f, 0.007956f, -0.000512f, 0.002495f, 0.001437f, 0.001779f, -0.004919f, -0.007205f, -0.012320f, -0.007593f, -0.009847f, -0.007311f, -0.007932f, 0.002379f, 0.006343f, 0.011853f, 0.012284f, 0.018766f, 0.014764f, 0.013207f, 0.005101f, 0.000855f, -0.009228f, -0.011869f, -0.017329f, -0.015035f, -0.016476f, -0.009521f, -0.005777f, 0.001562f, 0.003521f, 0.011837f, 0.010048f, 0.012976f, 0.010339f, 0.009750f, 0.001793f, 0.001690f, -0.003649f, -0.003577f, -0.008131f, -0.004818f, -0.005933f, -0.001545f, -0.003625f, 0.000224f, -0.001583f, 0.002120f, -0.000452f, 0.002556f, -0.000484f, 0.002217f, -0.000740f, 0.002009f, -0.001098f, - 0.001566f}, - {0.001985f, -0.002290f, 0.008216f, 0.009365f, 0.004937f, -0.003540f, -0.014118f, -0.012836f, 0.004614f, 0.007461f, -0.002794f, 0.013881f, -0.002738f, 0.008305f, -0.009881f, -0.008602f, 0.003715f, 0.000401f, -0.002611f, 0.003712f, 0.008901f, -0.003843f, 0.001182f, -0.005065f, -0.000574f, 0.000536f, 0.003611f, 0.003478f, 0.004541f, 0.000822f, 0.002679f, 0.010297f, -0.004013f, -0.004732f, -0.005233f, -0.009216f, 0.002607f, -0.001891f, 0.016904f, 0.003358f, -0.001339f, 0.001396f, 0.010232f, -0.000890f, -0.002305f, -0.002564f, -0.006098f, -0.001046f, 0.007854f, -0.001155f, 0.003222f, 0.008066f, -0.002573f, -0.000513f, -0.012934f, -0.007504f, -0.011800f, -0.002234f, -0.003470f, 0.001797f, 0.000581f, 0.001756f, 0.004128f, -0.002751f, 0.001964f, 0.000195f, 0.000978f, 0.001854f, -0.004344f, 0.004118f, -0.001447f, -0.004815f, -0.000679f, -0.004856f, -0.001559f, 0.000526f, -0.007730f, 0.002099f, 0.000289f, 0.005980f, 0.000562f, -0.000036f, -0.003583f, 0.000859f, 0.005835f, 0.002950f, -0.001526f, 0.000724f, 0.001253f, 0.001503f, 0.004438f, 0.000607f, 0.000223f, -0.001017f, -0.000734f, 0.000522f, - 0.000121f, -0.000391f, 0.002912f, 0.001689f, 0.001707f, 0.001326f, 0.000870f, 0.000453f, 0.000841f, 0.001665f, 0.009557f, 0.022539f, 0.008903f, 0.005333f, 0.006266f, -0.013245f, -0.001553f, 0.005716f, -0.001791f, 0.002236f, -0.012081f, 0.011881f, 0.016097f, 0.002776f, 0.007193f, -0.003389f, -0.009424f, -0.014605f, -0.015988f, -0.010632f, 0.012680f, -0.011965f, -0.007599f, -0.010126f, 0.003252f, 0.008422f, 0.001596f, 0.001142f, 0.004713f, -0.000477f, 0.002980f, 0.010379f, -0.001452f, 0.008629f, -0.008213f, 0.007873f, 0.005484f, 0.005006f, -0.004324f, -0.013423f, -0.002851f, 0.007686f, 0.004558f, -0.003752f, -0.000443f, 0.002659f, -0.000561f, -0.006477f, -0.001351f, 0.005492f, -0.001877f, 0.000609f, -0.003192f, -0.000710f, 0.000407f, 0.001835f, 0.009488f, 0.003964f, -0.004850f, 0.000819f, 0.000793f, -0.003220f, 0.001738f, -0.004689f, -0.000540f, 0.007689f, 0.002512f, 0.008627f, -0.006154f, -0.005291f, -0.003155f, -0.001365f, 0.004402f, 0.009780f, -0.005632f, -0.007078f, 0.008430f, -0.000792f, -0.000152f, 0.000291f, 0.002916f, 0.002080f, 0.007087f, -0.001993f, 0.003310f, -0.004316f, - -0.004029f, 0.000317f, 0.001925f, -0.000299f, 0.000156f, 0.001625f, 0.001783f, 0.001380f, -0.003674f, 0.004124f, -0.000871f, 0.006618f, 0.002800f, -0.007406f, -0.006999f, -0.007937f, -0.001249f, -0.006477f, -0.013667f, -0.013005f, 0.013435f, -0.000283f, 0.002829f, -0.000089f, 0.008184f, -0.012095f, 0.017989f, 0.015987f, 0.000828f, 0.000864f, 0.000025f, 0.000487f, -0.001776f, 0.006268f, 0.004868f, 0.000408f, -0.010238f, 0.004450f, -0.003176f, 0.004936f, -0.001426f, 0.010923f, -0.002541f, -0.006337f, -0.002876f, -0.001700f, 0.004044f, -0.000056f, 0.006747f, -0.010819f, 0.005842f, 0.001902f, -0.006011f, 0.017059f, -0.002707f, -0.002428f, -0.000357f, -0.000254f, -0.004493f, -0.001439f, 0.009100f, 0.007461f, -0.015976f, -0.007524f, 0.008124f, 0.002352f, -0.003820f, 0.013914f, 0.000510f, 0.003129f, 0.013688f, 0.005665f, 0.010747f, 0.003049f, -0.004125f, -0.005568f, -0.010750f, -0.010405f, 0.001516f, 0.005557f, 0.013321f, 0.000520f, -0.005429f, -0.006784f, 0.002320f, -0.000112f, -0.003719f, 0.004335f, -0.001500f, -0.003406f, 0.003119f, 0.007231f, 0.002342f, -0.003608f, 0.003621f, 0.003772f, - 0.004717f, 0.003037f, 0.000242f, 0.000462f, -0.004470f, -0.000929f, -0.000059f, 0.002304f, 0.001935f, 0.003689f, 0.003559f, 0.002966f, 0.001125f, -0.000279f, -0.018242f, -0.006347f, -0.008879f, 0.008290f, -0.006067f, 0.005388f, -0.006559f, -0.002700f, 0.015456f, 0.007568f, -0.010272f, 0.004692f, 0.014742f, 0.002172f, -0.005178f, -0.010347f, -0.012450f, -0.008520f, -0.012518f, 0.008317f, 0.001882f, 0.004583f, -0.002410f, -0.005651f, -0.005982f, -0.011009f, 0.000565f, -0.000329f, 0.002610f, -0.002674f, -0.010032f, 0.000177f, 0.010698f, -0.002358f, 0.000115f, -0.005320f, -0.010684f, -0.015782f, -0.001369f, 0.011401f, 0.004129f, 0.001215f, -0.005366f, 0.001475f, -0.008581f, -0.002789f, -0.006458f, 0.000840f, 0.001448f, -0.009741f, 0.011010f, -0.006184f, 0.014011f, 0.005325f, 0.001323f, -0.006349f, -0.003353f, 0.003626f, -0.000813f, 0.003433f, 0.007518f, 0.001554f, 0.002976f, -0.008307f, 0.004910f, -0.004162f, 0.012880f, 0.015990f, 0.007314f, 0.010756f, 0.004986f, -0.001609f, -0.011207f, -0.007202f, 0.000915f, 0.008282f, 0.008309f, -0.006623f, 0.000864f, 0.007874f, -0.010265f, 0.010161f, - 0.000641f, -0.005162f, 0.003330f, -0.002146f, -0.000499f, -0.005743f, 0.001126f, 0.001675f, 0.000989f, -0.004599f, 0.001220f, -0.003238f, -0.004359f, -0.001479f, 0.000300f, 0.001962f, -0.002847f, 0.000744f, -0.001239f, -0.003990f, 0.000424f, 0.003369f, 0.001386f, -0.002842f, 0.001861f, -0.002126f, 0.006109f, -0.014725f, 0.001938f, -0.015747f, -0.000066f, 0.002407f, 0.001466f, 0.007094f, 0.000712f, 0.001120f, 0.027844f, -0.003499f, -0.012302f, -0.013272f, 0.013982f, 0.009362f, -0.010558f, 0.002542f, -0.011776f, -0.005054f, 0.000385f, 0.013308f, -0.016523f, 0.004803f, -0.000656f, 0.002620f, -0.001273f, 0.016896f, -0.008759f, 0.004754f, -0.002661f, -0.004492f, 0.002554f, -0.000828f, 0.005052f, -0.005192f, -0.004823f, -0.014326f, 0.002224f, -0.004771f, -0.003101f, 0.001114f, -0.005089f, 0.004200f, -0.008095f, -0.004825f, -0.014227f, -0.000450f, -0.012635f, -0.005345f, -0.015024f, 0.011121f, 0.002236f, -0.004623f, 0.009769f, -0.011389f, -0.000086f, -0.021680f, -0.001195f, 0.007463f, -0.000621f, 0.006395f, 0.013750f, -0.004862f, -0.001971f, 0.017219f, 0.007245f, 0.006633f, 0.010497f, -0.005474f, - -0.015971f, -0.001715f, -0.009576f, 0.006940f, 0.015844f, -0.002883f, 0.004624f, 0.008427f, 0.007078f, -0.000869f, -0.001369f, 0.001943f, 0.000270f, -0.002960f, 0.004243f, 0.003810f, -0.006646f, 0.002177f, 0.005551f, -0.002829f, -0.002049f, -0.009844f, -0.002312f, -0.004155f, -0.001391f, -0.004310f, 0.000832f, -0.001062f, 0.000738f, -0.000464f, 0.000638f, 0.002514f, -0.002924f, 0.001005f, -0.001219f, -0.002972f, -0.000427f, -0.000523f, -0.000926f, 0.000199f, 0.001654f, 0.002766f, -0.002773f, 0.000943f, -0.002352f, 0.000392f, -0.000300f, -0.003104f, -0.001254f, -0.002375f, -0.000471f, -0.003763f, 0.000886f, 0.000184f, -0.002150f, 0.008012f, 0.008752f, 0.003364f, -0.005498f, 0.003996f, 0.002195f, 0.017085f, -0.002707f, -0.003494f, -0.022976f, -0.006313f, 0.017059f, 0.016922f, 0.010670f, 0.008649f, 0.024338f, 0.001656f, -0.029325f, -0.007344f, -0.004984f, -0.006930f, 0.015456f, -0.002324f, -0.005779f, 0.018299f, 0.002723f, -0.007340f, -0.002711f, 0.007394f, -0.006557f, -0.002399f, 0.002104f, -0.002173f, -0.010286f, -0.004467f, -0.000589f, -0.009685f, -0.004616f, -0.003981f, 0.006755f, -0.004467f, - 0.013116f, 0.013007f, 0.001142f, 0.012380f, 0.008473f, -0.005371f, -0.001987f, -0.004039f, -0.019088f, 0.002290f, 0.003818f, -0.017903f, -0.002694f, -0.004962f, 0.006368f, 0.016660f, 0.002415f, -0.016575f, 0.002363f, -0.006290f, -0.011372f, 0.009295f, -0.002731f, -0.011823f, 0.005347f, 0.004780f, 0.013162f, -0.000891f, -0.001725f, 0.009929f, 0.011461f, 0.012864f, -0.013112f, 0.009374f, -0.001739f, -0.002041f, 0.003355f, 0.013877f, -0.000681f, -0.003484f, 0.004273f, 0.002264f, -0.011681f, -0.001357f, 0.015903f, 0.003699f, -0.001076f, -0.001823f, -0.007252f, 0.005322f, -0.002689f, -0.003094f, 0.000505f, -0.000290f, 0.003660f, -0.000059f, -0.004982f, -0.003368f, 0.006626f, -0.000639f, 0.002606f, -0.002812f, 0.003204f, -0.002288f, -0.001858f, -0.002260f, 0.001673f, 0.003740f, -0.001743f, 0.011708f, -0.029928f, 0.012483f, -0.003302f, -0.006766f, -0.006178f, 0.005180f, -0.002875f, -0.017666f, -0.018910f, 0.002362f, 0.029409f, 0.008173f, -0.021451f, 0.004895f, 0.017441f, -0.012505f, 0.002240f, -0.003110f, 0.010391f, -0.000002f, 0.009589f, 0.025822f, 0.018733f, 0.011779f, -0.000459f, -0.002058f, - -0.011925f, -0.012682f, 0.005058f, -0.033293f, -0.005293f, 0.015893f, 0.001755f, -0.001610f, -0.015995f, -0.005619f, -0.000693f, -0.000645f, -0.007777f, -0.016442f, 0.018507f, -0.006317f, -0.004068f, -0.002902f, -0.015315f, -0.017133f, -0.000547f, -0.008316f, 0.001192f, 0.008284f, 0.006273f, 0.007025f, -0.013667f, -0.003461f, -0.006714f, -0.004182f, 0.021981f, -0.002228f, -0.010033f, 0.000798f, 0.028191f, -0.014946f, 0.004743f, 0.020842f, 0.000653f, -0.004670f, -0.010451f, 0.006410f, 0.001207f, 0.015040f, -0.008027f, 0.012743f, 0.010276f, 0.019673f, 0.009489f, 0.014761f, 0.001570f, -0.009499f, 0.002082f, -0.000293f, -0.005518f, 0.008963f, 0.012637f, -0.010360f, 0.006910f, 0.003880f, -0.009384f, 0.001342f, 0.003370f, 0.002746f, 0.003450f, -0.005268f, 0.003084f, -0.005783f, -0.001744f, -0.001519f, 0.000449f, 0.001215f, 0.002573f, 0.003336f, -0.000627f, 0.004944f, -0.000318f, -0.002040f, 0.001717f, 0.003331f, -0.001044f, 0.002069f, -0.004987f, 0.002119f, -0.001590f, 0.003302f, -0.003658f, 0.017256f, 0.024580f, 0.015137f, 0.002436f, -0.005220f, -0.009308f, -0.020411f, -0.006008f, 0.013578f, - -0.027939f, -0.011366f, 0.025298f, -0.035105f, -0.006446f, 0.019718f, 0.024606f, -0.002482f, -0.024878f, 0.003487f, -0.009573f, 0.033212f, 0.014616f, -0.022731f, -0.014753f, -0.003458f, -0.014148f, -0.028622f, -0.014438f, -0.012677f, -0.010472f, -0.023173f, 0.011582f, 0.004163f, 0.014240f, -0.008798f, -0.004385f, -0.020382f, -0.002193f, -0.017681f, 0.001743f, -0.011741f, 0.002505f, 0.006233f, -0.027465f, -0.008948f, -0.010522f, -0.007227f, 0.005789f, 0.005876f, -0.008843f, 0.027005f, -0.001858f, -0.007019f, -0.005170f, 0.002638f, -0.006444f, -0.002195f, 0.009923f, 0.008582f, 0.011121f, 0.014832f, 0.013931f, 0.001143f, 0.009097f, -0.004463f, 0.020926f, 0.022538f, -0.011436f, -0.005859f, 0.013697f, -0.000368f, -0.034256f, 0.001599f, -0.017455f, 0.010611f, 0.010678f, 0.019332f, -0.014766f, 0.008244f, -0.020673f, -0.001973f, 0.011626f, -0.004994f, 0.018226f, -0.004756f, -0.002355f, 0.003708f, 0.001084f, 0.002598f, -0.001335f, 0.001103f, 0.007682f, -0.005761f, -0.001598f, 0.007522f, -0.001275f, 0.005911f, -0.008898f, -0.007609f, 0.005046f, -0.001206f, 0.001500f, 0.000837f, -0.001166f, 0.001372f, - -0.005370f, -0.001353f, -0.001031f, -0.002265f, -0.003668f, -0.001215f, 0.002671f, 0.003368f, -0.000283f, -0.003546f, -0.019057f, -0.022769f, -0.011346f, -0.021991f, -0.031698f, 0.022473f, 0.002085f, 0.012637f, -0.017572f, -0.018017f, -0.025160f, -0.016798f, 0.007610f, -0.018427f, -0.016794f, 0.022858f, -0.005804f, 0.001215f, 0.005378f, 0.013124f, -0.010202f, -0.007503f, 0.003636f, -0.005977f, 0.003440f, -0.001002f, -0.011321f, -0.021308f, -0.033703f, 0.011257f, -0.024236f, -0.021972f, 0.001062f, -0.005676f, -0.001651f, -0.012297f, 0.005533f, 0.006563f, -0.027484f, -0.000438f, -0.006109f, -0.010559f, -0.015320f, 0.008821f, 0.001761f, 0.027536f, 0.003175f, -0.015193f, -0.001042f, 0.002711f, 0.011204f, 0.004896f, 0.024188f, -0.001913f, -0.026494f, 0.011478f, -0.005684f, 0.012105f, -0.015871f, 0.003621f, 0.008886f, -0.046521f, -0.022257f, 0.016691f, -0.001506f, -0.004829f, 0.007103f, -0.002190f, 0.029424f, -0.000849f, 0.018612f, 0.016422f, -0.023970f, -0.027550f, 0.001553f, -0.030539f, -0.000767f, -0.001318f, 0.000565f, 0.004670f, 0.019208f, -0.000470f, -0.012152f, 0.011252f, 0.014444f, -0.013319f, - 0.002326f, 0.004572f, 0.014534f, -0.006910f, 0.000467f, -0.007007f, 0.004889f, -0.000176f, 0.003048f, 0.005076f, 0.007818f, 0.008182f, -0.000277f, -0.007407f, 0.000308f, 0.005891f, 0.001744f, 0.001427f, -0.007009f, 0.001005f, -0.007018f, -0.000777f, 0.003762f, -0.000871f, 0.006849f, 0.005359f, -0.000312f, 0.001714f, 0.005548f, -0.004899f, 0.009798f, 0.000066f, -0.004311f, 0.004680f, 0.016118f, 0.065309f, -0.016027f, -0.044110f, -0.003845f, -0.019381f, 0.047656f, 0.003519f, 0.026722f, 0.014238f, -0.008227f, -0.021217f, -0.009380f, -0.023107f, -0.005844f, 0.031853f, -0.035635f, 0.001331f, -0.029067f, 0.007718f, 0.002466f, 0.014030f, 0.003331f, -0.014161f, -0.023560f, -0.027705f, -0.005070f, -0.027188f, -0.021096f, 0.003246f, 0.006313f, 0.019849f, -0.018740f, -0.039344f, -0.008174f, -0.013811f, 0.004715f, -0.018625f, -0.012410f, 0.005404f, -0.009779f, -0.015807f, -0.001051f, 0.001453f, -0.007953f, 0.037875f, -0.007813f, -0.006514f, 0.009632f, 0.009699f, -0.011315f, -0.005075f, 0.028206f, 0.023388f, 0.015525f, 0.029476f, 0.023294f, -0.000235f, 0.009751f, 0.016614f, -0.012578f, -0.012110f, - 0.003464f, 0.011881f, 0.019781f, 0.007810f, 0.040149f, 0.004094f, 0.026917f, -0.007950f, -0.015561f, -0.010342f, 0.056976f, 0.009798f, -0.007410f, -0.007208f, -0.020480f, -0.019924f, -0.014125f, -0.014080f, -0.016405f, 0.006190f, 0.013109f, -0.014318f, 0.004460f, 0.013799f, 0.007008f, -0.013261f, 0.002577f, 0.014070f, -0.003660f, 0.007608f, -0.007264f, -0.002425f, 0.003182f, -0.002857f, -0.001680f, -0.004751f, -0.009281f, -0.001862f, -0.008418f, 0.003991f, 0.006912f, 0.003124f, -0.007042f, 0.008797f, 0.005916f, -0.005576f, -0.006176f, -0.009905f, -0.002908f, -0.003083f, 0.002380f, -0.002546f, 0.004285f, 0.002779f, 0.000703f, -0.001423f, 0.000035f, -0.008041f, 0.003010f, 0.012174f, -0.057127f, -0.021508f, 0.028970f, -0.007074f, -0.029069f, -0.027704f, -0.009033f, 0.030911f, 0.016824f, -0.025276f, 0.014110f, -0.033563f, -0.013436f, -0.004266f, -0.021647f, -0.030185f, 0.025398f, 0.013550f, -0.026410f, -0.009677f, 0.057720f, 0.013057f, -0.025142f, -0.035284f, 0.000977f, 0.018531f, 0.003587f, 0.002915f, -0.039682f, -0.001510f, -0.004125f, -0.029127f, -0.016369f, -0.011962f, -0.022628f, -0.011278f, - 0.007123f, 0.000529f, -0.023906f, -0.024716f, 0.003555f, 0.014910f, 0.000049f, 0.020106f, 0.034779f, -0.024539f, 0.021727f, 0.015635f, 0.007221f, 0.004213f, 0.026331f, 0.007640f, 0.016411f, 0.010235f, 0.014835f, -0.005290f, -0.002659f, 0.029079f, 0.046638f, 0.007184f, -0.010291f, 0.005191f, -0.006191f, -0.017974f, 0.029843f, -0.014854f, -0.024325f, -0.039668f, -0.013016f, -0.046147f, 0.023272f, -0.019126f, -0.007431f, -0.003179f, -0.006120f, -0.016935f, -0.002288f, 0.017641f, -0.020335f, -0.002375f, 0.010040f, -0.006520f, -0.019820f, 0.009621f, 0.002109f, 0.005099f, -0.000898f, -0.002975f, -0.006800f, -0.001371f, -0.003308f, 0.010281f, 0.003310f, 0.002416f, 0.002217f, 0.002956f, 0.000599f, 0.004932f, 0.004202f, 0.009022f, -0.013029f, -0.002198f, 0.001566f, 0.008314f, -0.003239f, 0.006818f, -0.007675f, 0.002172f, 0.002438f, -0.002404f, -0.004045f, 0.007162f, -0.003102f, -0.001278f, 0.004958f, 0.000724f, 0.000896f, -0.011621f, -0.025359f, 0.021566f, 0.012814f, -0.003734f, 0.014289f, 0.010740f, 0.030502f, 0.023639f, -0.049739f, -0.016407f, 0.055184f, -0.043448f, -0.012911f, -0.026288f, - 0.039314f, 0.017613f, 0.018096f, 0.007729f, 0.005731f, 0.015847f, 0.041716f, 0.019966f, -0.018420f, -0.000268f, 0.001353f, -0.001073f, 0.016500f, 0.018678f, 0.002234f, 0.011096f, 0.010488f, -0.009478f, 0.012915f, 0.007876f, 0.025780f, -0.012281f, -0.024827f, -0.021200f, -0.016616f, 0.005026f, -0.002173f, 0.009965f, 0.011177f, 0.011363f, 0.022713f, -0.009845f, 0.004790f, -0.009923f, -0.017719f, -0.007055f, 0.001882f, -0.020298f, 0.026092f, 0.031696f, -0.034308f, 0.011819f, -0.023763f, 0.019538f, -0.003878f, 0.007672f, -0.002598f, -0.018868f, -0.004618f, 0.021976f, -0.017080f, -0.005130f, 0.003879f, -0.034902f, -0.013377f, 0.007471f, -0.027084f, -0.001750f, 0.043370f, 0.021694f, -0.002907f, -0.009790f, 0.034613f, 0.009221f, 0.024934f, -0.007699f, -0.011160f, 0.036259f, -0.012241f, 0.011414f, 0.004831f, 0.005270f, -0.007415f, -0.005309f, -0.006624f, -0.004460f, -0.012128f, -0.007366f, -0.008441f, 0.001359f, 0.007852f, -0.002735f, -0.017035f, -0.005342f, -0.002315f, 0.002075f, -0.000479f, -0.004105f, 0.000122f, 0.004965f, 0.008390f, -0.006507f, -0.000146f, -0.018262f, 0.003179f, -0.002145f, - -0.003412f, 0.012574f, -0.000148f, -0.001044f, -0.007253f, 0.007754f, 0.002171f, 0.011409f, -0.003754f, -0.000500f, -0.007449f, -0.000665f, -0.010761f, 0.034564f, -0.002869f, -0.007989f, -0.028733f, 0.001288f, 0.002679f, -0.007662f, -0.000659f, -0.013261f, 0.004997f, -0.041156f, 0.037572f, -0.007553f, -0.013344f, -0.026028f, -0.029477f, -0.002992f, 0.035852f, -0.006453f, 0.009921f, -0.022116f, -0.012828f, -0.006130f, -0.021601f, -0.025990f, 0.023804f, -0.014654f, -0.012000f, 0.021180f, 0.020524f, -0.028963f, 0.010115f, 0.011054f, 0.025143f, 0.020845f, -0.007582f, -0.018295f, -0.011586f, -0.028148f, 0.031073f, 0.020520f, 0.010325f, 0.022247f, -0.022929f, 0.015805f, -0.003312f, 0.014499f, 0.015982f, -0.014925f, -0.001162f, 0.050663f, 0.042407f, -0.031932f, 0.012862f, 0.026360f, -0.020138f, 0.006364f, -0.047212f, 0.014274f, -0.025525f, 0.021256f, -0.014789f, -0.016210f, -0.011503f, 0.056535f, 0.003275f, -0.016298f, 0.005056f, 0.019109f, 0.002551f, 0.011428f, -0.030335f, -0.003313f, 0.050723f, -0.001511f, -0.019827f, -0.030826f, 0.001029f, -0.022773f, 0.014393f, 0.014777f, 0.017785f, -0.031476f, - -0.032968f, -0.008649f, 0.005650f, 0.011047f, 0.003541f, 0.000354f, 0.000905f, 0.012234f, -0.008011f, -0.003062f, -0.002409f, -0.005133f, 0.006043f, 0.005230f, -0.009999f, -0.006760f, -0.015416f, 0.009704f, -0.005579f, 0.004362f, 0.006922f, 0.010212f, 0.008074f, 0.003652f, 0.015730f, 0.001216f, -0.003503f, 0.007700f, -0.011456f, 0.006709f, 0.004632f, 0.003411f, 0.010471f, 0.011307f, 0.002199f, -0.001288f, 0.006678f, 0.000995f, -0.000844f, -0.011950f, -0.015836f, -0.002769f, -0.001069f, -0.001720f, -0.031016f, -0.001307f, -0.003535f, -0.005430f, 0.009542f, -0.045732f, -0.020519f, -0.025817f, 0.021852f, -0.011190f, 0.032297f, 0.018973f, 0.040998f, -0.020516f, -0.001238f, -0.032211f, 0.027483f, 0.048858f, -0.014893f, -0.039452f, 0.004278f, -0.008338f, 0.060853f, -0.015221f, -0.023245f, 0.022688f, 0.013147f, 0.009308f, 0.023210f, 0.007418f, -0.075458f, -0.000044f, -0.004631f, 0.029334f, 0.053796f, -0.050688f, 0.002466f, 0.014804f, -0.023691f, -0.005201f, -0.068363f, -0.015885f, 0.035588f, -0.056952f, -0.033420f, -0.017685f, -0.021681f, 0.022295f, -0.013234f, -0.020479f, 0.030834f, 0.008935f, - 0.011562f, 0.030991f, 0.003946f, -0.011051f, 0.022760f, 0.032536f, -0.031419f, -0.024075f, 0.049346f, 0.033300f, 0.011850f, 0.015235f, 0.012061f, -0.022258f, -0.031210f, -0.000316f, 0.000950f, -0.006801f, 0.010532f, -0.019485f, 0.014176f, -0.026878f, 0.011335f, 0.061832f, -0.028361f, -0.024153f, 0.034707f, 0.009575f, -0.011076f, 0.021344f, 0.030580f, 0.022049f, 0.027094f, 0.012881f, -0.012915f, 0.010682f, -0.032167f, 0.017242f, 0.008000f, 0.008993f, -0.016029f, -0.005221f, 0.004068f, -0.001805f, -0.002723f, -0.005244f, 0.011350f, 0.020779f, -0.007612f, -0.020576f, 0.013503f, 0.024072f, 0.013323f, 0.009313f, -0.028182f, 0.017190f, 0.002502f, 0.009185f, -0.003984f, -0.010118f, -0.001661f, 0.014452f, 0.001987f, -0.002974f, -0.011778f, -0.001279f, -0.006590f, -0.003838f, -0.005080f, 0.006285f, 0.014568f, -0.008621f, 0.001226f, 0.008509f, -0.002752f, -0.001792f, -0.006904f, 0.001118f, -0.004393f, -0.005939f, 0.013122f, 0.004413f, 0.018050f, 0.016220f, 0.026555f, -0.061502f, -0.113470f, -0.052375f, -0.007948f, 0.038551f, 0.002733f, 0.042511f, 0.039337f, -0.011998f, 0.006355f, -0.009745f, - -0.021616f, -0.035600f, -0.020694f, -0.025740f, -0.014951f, 0.040333f, -0.052661f, -0.009288f, -0.043911f, -0.054525f, -0.009605f, -0.055036f, -0.044245f, 0.005234f, -0.011655f, -0.006514f, 0.009870f, 0.047966f, 0.003236f, -0.035146f, 0.001856f, -0.004402f, -0.010662f, -0.045599f, -0.003133f, 0.053866f, 0.004835f, -0.001161f, 0.021737f, 0.041776f, 0.028098f, 0.007093f, -0.017317f, 0.014387f, -0.014590f, -0.038794f, -0.070863f, 0.066909f, -0.008743f, 0.055681f, -0.004962f, 0.000441f, -0.020376f, -0.032657f, 0.058734f, -0.033853f, -0.027529f, -0.003165f, -0.043291f, -0.040737f, 0.033276f, 0.024280f, 0.012605f, -0.004649f, 0.016775f, -0.030199f, 0.011259f, -0.024587f, -0.034531f, -0.037686f, -0.029459f, -0.012392f, 0.028512f, 0.001430f, 0.009987f, -0.017673f, 0.009820f, -0.023003f, 0.016025f, 0.012340f, 0.011281f, -0.007800f, -0.001384f, 0.014103f, -0.004417f, -0.018077f, -0.013755f, -0.017908f, -0.001989f, -0.013350f, -0.003475f, -0.005012f, -0.005197f, 0.004647f, 0.001590f, -0.007430f, 0.002453f, 0.008642f, -0.002959f, -0.006346f, -0.014220f, -0.000637f, -0.009960f, -0.001825f, -0.002110f, -0.007035f, - 0.015350f, -0.015531f, -0.014647f, -0.007188f, 0.007842f, -0.013831f, -0.013994f, 0.001330f, -0.011818f, -0.000669f, -0.002658f, 0.005651f, -0.002139f, 0.001496f, -0.009708f, 0.003027f, -0.019388f, -0.010038f, -0.003547f, -0.040088f, 0.008377f, -0.009568f, -0.029624f, -0.042997f, -0.001222f, -0.041105f, -0.049372f, -0.007491f, -0.022990f, -0.052650f, -0.074694f, 0.009082f, -0.028771f, 0.014326f, -0.006147f, 0.028396f, 0.061425f, 0.003822f, 0.005609f, -0.030922f, -0.034646f, 0.028797f, 0.014875f, -0.022234f, -0.000735f, 0.018987f, -0.042974f, -0.031775f, -0.003142f, 0.054034f, -0.046813f, 0.001198f, 0.000223f, 0.025174f, -0.040127f, 0.041462f, 0.020585f, 0.012140f, -0.001966f, -0.016498f, -0.046450f, 0.000062f, -0.011811f, 0.016984f, -0.025636f, -0.059934f, 0.048874f, -0.035925f, -0.017168f, -0.002063f, 0.047791f, -0.036600f, 0.016147f, -0.029993f, 0.017911f, -0.010588f, -0.045783f, 0.021868f, -0.058077f, -0.012188f, -0.017370f, 0.020354f, 0.045821f, -0.026692f, 0.016335f, 0.047810f, -0.038983f, 0.006635f, 0.010447f, 0.011498f, 0.012998f, -0.068858f, -0.021745f, -0.011389f, 0.023876f, 0.005546f, - -0.001153f, 0.012936f, -0.013216f, 0.027901f, -0.006094f, 0.006556f, -0.027677f, 0.023300f, 0.004845f, -0.042420f, -0.020543f, 0.020305f, 0.024051f, -0.003359f, -0.007490f, -0.016503f, 0.022451f, 0.003137f, -0.000720f, -0.044221f, 0.006126f, -0.021217f, -0.034713f, -0.010054f, -0.007898f, -0.004238f, -0.020903f, -0.025386f, 0.008002f, -0.005814f, -0.013681f, 0.007350f, -0.003726f, -0.003643f, 0.000311f, -0.006834f, 0.001238f, 0.013692f, -0.027070f, 0.002547f, 0.003664f, -0.008614f, 0.017432f, 0.017255f, 0.018532f, 0.007799f, 0.010683f, -0.012626f, 0.003920f, 0.000448f, 0.004394f, -0.005891f, -0.001037f, -0.000638f, 0.006959f, -0.005324f, -0.012896f, 0.010898f, 0.080942f, 0.008477f, 0.034069f, 0.093264f, -0.043731f, -0.024241f, -0.036687f, -0.013395f, 0.042637f, 0.003013f, 0.052564f, 0.014391f, -0.002184f, -0.019529f, 0.039641f, -0.024696f, 0.008789f, -0.016446f, 0.016183f, -0.026181f, 0.030118f, -0.014639f, -0.007422f, -0.017215f, 0.023072f, 0.016201f, -0.026098f, -0.005967f, 0.024299f, 0.007606f, -0.016887f, 0.001809f, -0.021625f, -0.069753f, 0.029956f, -0.036578f, -0.054136f, 0.033380f, - 0.014344f, 0.036087f, -0.003770f, -0.034864f, -0.013497f, -0.009235f, 0.020460f, 0.028030f, 0.030593f, 0.051876f, 0.050617f, -0.022518f, 0.006606f, -0.053904f, 0.000107f, -0.039218f, -0.070746f, -0.006797f, -0.057768f, 0.018711f, -0.046233f, -0.030018f, -0.030782f, -0.042816f, 0.003776f, -0.010066f, 0.003132f, -0.012668f, -0.005911f, -0.003639f, -0.074834f, 0.011983f, 0.010796f, 0.017069f, 0.035178f, -0.006634f, -0.059618f, 0.034339f, -0.038800f, 0.022233f, 0.021291f, 0.048387f, -0.026737f, -0.023889f, -0.016415f, -0.009252f, -0.034858f, 0.013897f, 0.007381f, 0.004492f, -0.008765f, 0.012305f, -0.017684f, 0.017564f, -0.003410f, 0.003787f, 0.004605f, -0.021015f, -0.000664f, 0.008495f, 0.020434f, -0.005316f, -0.013192f, 0.009420f, 0.013981f, 0.018206f, -0.011803f, 0.000355f, 0.009511f, -0.000988f, -0.002501f, -0.006442f, -0.013912f, 0.009672f, -0.000815f, 0.006272f, -0.008020f, -0.000783f, 0.011706f, -0.007873f, -0.013117f, -0.006948f, 0.001417f, -0.005087f, -0.022623f, 0.035769f, -0.009577f, -0.007040f, 0.002521f, 0.007073f, -0.006493f, 0.006809f, 0.007961f, -0.003200f, -0.001213f, -0.004547f, - -0.007477f, 0.058347f, 0.108221f, -0.059289f, -0.048500f, -0.083838f, -0.171412f, -0.042063f, -0.018296f, 0.038470f, 0.022722f, -0.014571f, -0.033402f, 0.046953f, 0.056715f, 0.005155f, -0.003172f, 0.000523f, -0.045543f, -0.026420f, -0.032430f, -0.024397f, -0.048166f, -0.000476f, -0.012500f, -0.005602f, 0.032299f, -0.044672f, 0.035469f, 0.033852f, -0.010984f, 0.017493f, -0.002443f, -0.079637f, -0.057316f, -0.031595f, -0.029544f, -0.013267f, 0.005802f, 0.030854f, 0.009460f, 0.016627f, 0.076511f, 0.070130f, 0.015339f, -0.051962f, -0.027605f, -0.002198f, -0.027297f, -0.049288f, -0.123718f, -0.103454f, -0.047118f, -0.011054f, 0.004516f, 0.026999f, -0.086018f, -0.049207f, 0.043726f, 0.051433f, 0.061137f, -0.056249f, -0.068903f, 0.022261f, -0.042276f, 0.101357f, -0.051722f, -0.005833f, -0.030700f, -0.016281f, 0.013367f, 0.029967f, -0.015597f, -0.040086f, 0.036560f, 0.036062f, -0.008838f, 0.041306f, 0.036074f, -0.080337f, 0.071166f, -0.046609f, -0.000467f, -0.013762f, -0.048700f, -0.013541f, 0.023595f, 0.018040f, -0.004626f, 0.009300f, -0.030009f, 0.000579f, 0.013968f, 0.019752f, 0.030568f, -0.023645f, - 0.003986f, -0.006854f, -0.013566f, -0.033455f, -0.004894f, -0.032246f, 0.027491f, -0.005390f, -0.034945f, 0.005254f, -0.039923f, -0.002812f, 0.003843f, -0.009283f, -0.017790f, 0.000928f, 0.002221f, 0.003852f, 0.011819f, -0.002673f, -0.001553f, 0.022520f, 0.006457f, -0.023284f, -0.027360f, 0.006878f, -0.018513f, -0.037516f, -0.013824f, -0.035332f, 0.010416f, 0.010689f, 0.026364f, 0.003715f, -0.028289f, -0.020331f, 0.020130f, 0.102042f, -0.033976f, 0.032901f, -0.001393f, -0.045409f, 0.007059f, -0.091682f, -0.020602f, 0.019738f, 0.001860f, -0.053344f, 0.031659f, 0.093525f, 0.065646f, -0.028880f, -0.058465f, -0.024871f, 0.006657f, 0.098300f, 0.013297f, 0.002550f, 0.000461f, 0.045504f, 0.046792f, 0.012301f, 0.035800f, 0.029057f, 0.055001f, -0.015537f, 0.006371f, 0.035196f, -0.031907f, -0.048604f, 0.027484f, 0.080741f, 0.017580f, 0.039209f, 0.003859f, 0.024139f, -0.107780f, 0.020136f, -0.004099f, 0.024548f, 0.105900f, 0.042873f, 0.014426f, -0.010306f, 0.047531f, -0.010619f, -0.022103f, 0.016973f, 0.029588f, 0.062489f, -0.019939f, 0.038938f, 0.007179f, 0.010990f, 0.024629f, 0.031770f, - -0.000850f, -0.040952f, -0.025456f, 0.009933f, 0.079923f, 0.054960f, 0.042592f, 0.046292f, 0.038625f, -0.010700f, -0.098661f, -0.070628f, -0.135392f, -0.001539f, 0.041461f, 0.078389f, 0.012283f, -0.056528f, 0.018935f, -0.034825f, 0.011442f, 0.027359f, 0.008283f, -0.016073f, -0.009022f, 0.000727f, -0.007514f, 0.022313f, -0.014858f, -0.038941f, 0.000880f, 0.013609f, 0.017655f, -0.024988f, -0.011449f, -0.046888f, 0.011871f, 0.021169f, -0.018100f, -0.015799f, 0.011966f, -0.008717f, -0.011611f, -0.009664f, -0.036751f, -0.007302f, 0.038112f, 0.024440f, 0.034510f, -0.017902f, -0.038870f, -0.028206f, 0.025363f, 0.020646f, -0.009103f, -0.001003f, -0.002309f, 0.007831f, -0.010906f, 0.023608f, -0.025947f, -0.013883f, 0.001847f, 0.005151f, 0.014999f, -0.031258f, 0.006652f, -0.022700f, 0.062666f, -0.017461f, 0.013654f, -0.019493f, 0.007201f, 0.000631f, 0.005853f, -0.002311f, -0.014890f, -0.038322f, -0.016790f, 0.083924f, -0.003916f, -0.038476f, 0.009020f, -0.007033f, -0.032213f, -0.025235f, 0.004139f, 0.044425f, 0.119185f, 0.054026f, 0.105586f, 0.055766f, 0.046622f, 0.045158f, -0.032067f, -0.026147f, - -0.030701f, 0.013524f, 0.086445f, 0.028229f, -0.073192f, 0.031586f, -0.078651f, 0.039344f, -0.050071f, -0.010290f, -0.044018f, -0.046519f, -0.002768f, 0.006257f, -0.001212f, -0.058255f, 0.075672f, -0.015237f, 0.028110f, -0.073731f, 0.019286f, -0.016955f, -0.023304f, 0.038600f, -0.031929f, 0.076956f, 0.008524f, -0.029996f, 0.003434f, -0.022532f, -0.031936f, 0.021843f, -0.052487f, -0.010900f, 0.064826f, -0.014004f, 0.026245f, -0.003267f, -0.047828f, 0.052159f, -0.028442f, -0.107519f, 0.012956f, 0.008360f, -0.000893f, 0.012149f, -0.015317f, -0.020728f, -0.006479f, 0.049072f, -0.093079f, 0.055026f, -0.022280f, -0.012608f, 0.060517f, -0.037218f, 0.017491f, 0.022784f, 0.088065f, 0.031110f, 0.038697f, -0.005971f, 0.052466f, -0.041935f, 0.041536f, 0.007208f, -0.016613f, 0.011563f, 0.002124f, 0.002077f, -0.023243f, -0.005584f, 0.003689f, -0.009375f, -0.017489f, 0.036330f, 0.000222f, -0.002199f, -0.010983f, 0.012382f, -0.014484f, 0.032459f, 0.018267f, 0.017652f, 0.003600f, 0.000273f, -0.003417f, 0.027272f, -0.021864f, -0.027089f, 0.010233f, 0.014538f, -0.001678f, 0.024573f, -0.010697f, -0.004331f, - 0.000861f, -0.007684f, -0.027152f, -0.026274f, -0.002880f, 0.009543f, -0.013669f, 0.005231f, 0.008230f, 0.010182f, -0.007573f, -0.000012f, 0.017243f, -0.007498f, -0.025221f, -0.045171f, 0.074095f, 0.068753f, 0.239978f, 0.096845f, -0.130442f, -0.061350f, -0.063778f, -0.100338f, 0.070209f, 0.215654f, 0.086569f, 0.040997f, -0.053775f, -0.014764f, -0.003334f, -0.002412f, 0.103817f, 0.071059f, 0.045489f, 0.155932f, -0.186196f, 0.012336f, 0.097887f, -0.023422f, 0.020437f, 0.102421f, 0.018319f, -0.028925f, 0.055536f, -0.102601f, -0.205947f, -0.019397f, 0.020734f, -0.079721f, -0.008608f, 0.110935f, 0.019138f, 0.006873f, 0.042541f, -0.086934f, -0.177306f, -0.162060f, -0.073388f, 0.054169f, 0.106252f, 0.234587f, 0.059391f, -0.029463f, -0.028857f, -0.062961f, -0.139428f, -0.042039f, 0.103075f, 0.103643f, 0.108797f, 0.106026f, 0.066865f, 0.055503f, 0.016577f, 0.024609f, -0.089302f, -0.054674f, 0.014079f, 0.025803f, 0.046844f, 0.057184f, 0.139873f, 0.037099f, 0.081731f, -0.052622f, -0.051833f, -0.093727f, -0.019760f, -0.071499f, -0.016445f, 0.145823f, 0.187114f, 0.004782f, -0.006729f, -0.115274f, - -0.132956f, -0.074574f, -0.030953f, 0.075120f, 0.040449f, -0.007331f, 0.028499f, -0.009467f, -0.018234f, -0.034164f, -0.032219f, -0.003579f, 0.009355f, 0.007750f, 0.041897f, -0.002074f, 0.000080f, -0.020039f, 0.001691f, -0.025146f, -0.007762f, 0.001043f, -0.037431f, -0.016333f, 0.001861f, -0.009487f, -0.001643f, 0.023547f, 0.021080f, 0.048066f, -0.019592f, -0.007416f, -0.046488f, -0.037411f, -0.028093f, 0.049860f, 0.032054f, 0.016490f, 0.017382f, -0.013836f, -0.041070f, -0.032821f, 0.002790f, -0.022711f, 0.042671f, 0.062792f, -0.000984f, -0.013358f, -0.042221f, -0.014533f, -0.171694f, -0.104833f, 0.060849f, 0.161843f, 0.186930f, 0.391157f, 0.237482f, 0.162348f, 0.142153f, 0.111823f, -0.019927f, -0.168407f, -0.185760f, -0.358569f, -0.382668f, -0.361442f, -0.232102f, -0.080060f, 0.079930f, 0.139875f, 0.231156f, 0.228462f, 0.159232f, 0.158619f, 0.201182f, 0.194398f, 0.173146f, 0.110980f, 0.076052f, 0.068426f, -0.007441f, -0.010927f, -0.223994f, -0.158383f, -0.200473f, -0.241213f, -0.102340f, -0.235526f, -0.191377f, -0.347400f, -0.305321f, -0.215182f, -0.144890f, -0.020605f, 0.180607f, 0.220325f, - 0.184375f, 0.198462f, 0.182389f, 0.339889f, 0.440810f, 0.395331f, 0.390681f, 0.346168f, 0.332796f, 0.248765f, 0.247222f, 0.054101f, -0.167669f, -0.346849f, -0.333227f, -0.496758f, -0.415789f, -0.603527f, -0.720635f, -0.638944f, -0.608308f, -0.364838f, -0.255290f, 0.047685f, 0.120240f, 0.285332f, 0.422128f, 0.652610f, 0.563805f, 0.815750f, 0.703154f, 0.505201f, 0.495227f, 0.226797f, 0.015849f, -0.044129f, -0.177149f, -0.307165f, -0.368963f, -0.439093f, -0.382023f, -0.344493f, -0.334009f, -0.269793f, -0.279679f, -0.228164f, -0.202325f, -0.060252f, -0.043519f, 0.056779f, 0.129470f, 0.150595f, 0.194319f, 0.278325f, 0.334769f, 0.358671f, 0.373636f, 0.276051f, 0.227023f, 0.221808f, 0.081329f, 0.055311f, -0.124824f, -0.296437f, -0.397036f, -0.404492f, -0.454570f, -0.287148f, -0.329415f, -0.218095f, -0.158746f, -0.042417f, 0.078360f, 0.156528f, 0.235533f, 0.246213f, 0.368312f, 0.380038f, 0.363411f, 0.309797f, 0.276422f, 0.111584f, 0.027932f, -0.067472f, -0.156611f, -0.296786f, -0.351664f, -0.290498f, -0.198276f, -0.173543f, -0.122503f, -0.110179f, -0.058429f, -0.005355f, 0.015184f, 0.012643f, - 0.054004f, 0.062934f, 0.096545f, 0.084070f, 0.077087f, 0.073840f, 0.082676f, 0.060542f, 0.056956f, 0.066450f, 0.069217f, 0.041485f, 0.027496f, 0.004488f, 0.001880f, 0.011646f, -0.004897f, -0.036211f, -0.027854f, -0.038961f, -0.048998f, -0.064693f, -0.056975f, -0.047989f, -0.031335f, -0.037902f, -0.029479f, -0.025076f, -0.006568f, -0.014650f, -0.010754f, -0.005391f, 0.011894f, 0.003302f, 0.011903f, 0.020317f, 0.033069f, 0.024983f, 0.032332f, 0.026359f, 0.037108f, 0.031320f, 0.025033f, 0.008304f, 0.011668f, 0.004566f, 0.004130f, -0.009825f, -0.007418f, -0.009542f, -0.003330f, -0.012578f, -0.006738f, -0.012445f, -0.008063f, -0.010465f, 0.002864f, -0.002878f, -0.004010f, -0.011910f, -0.006276f, -0.010757f, -0.006435f, -0.017469f, -0.011884f, -0.010639f, -0.001828f, -0.005637f, 0.002886f, 0.001178f, 0.008539f, 0.004856f, 0.013542f, 0.010112f, 0.013460f, 0.006649f, 0.010506f, 0.004496f, 0.010279f, 0.004485f, 0.009186f, 0.002844f, 0.006395f, -0.000950f, 0.002401f, -0.004903f, -0.000542f, -0.006712f, -0.001293f, -0.006623f, -0.000671f, -0.005536f, 0.000562f, -0.004414f, 0.001666f, -0.003281f, - 0.002589f} - }, - { - {-0.009587f, -0.025848f, -0.002130f, -0.004174f, -0.003479f, 0.000329f, -0.004260f, 0.001553f, 0.002570f, 0.010516f, -0.003531f, -0.000484f, -0.009715f, 0.000658f, 0.009838f, 0.000620f, 0.007119f, -0.002155f, 0.003006f, -0.004161f, -0.006128f, 0.000140f, 0.006764f, -0.000934f, -0.008414f, -0.000419f, 0.008196f, 0.002593f, -0.003480f, -0.002990f, -0.000365f, -0.001197f, -0.001892f, 0.000024f, -0.001367f, -0.002887f, -0.000345f, 0.001602f, 0.001155f, -0.000450f, -0.006419f, 0.009481f, 0.013031f, 0.000341f, 0.001522f, -0.005341f, -0.002986f, 0.000954f, -0.006799f, -0.007625f, 0.004510f, -0.006210f, 0.004455f, 0.005697f, 0.005750f, 0.002078f, -0.000877f, 0.001478f, 0.001195f, 0.004264f, -0.009369f, 0.000728f, -0.001220f, -0.006893f, -0.009231f, 0.000190f, 0.004589f, -0.003591f, -0.000505f, -0.001151f, -0.000669f, 0.006417f, 0.003201f, 0.000790f, 0.002522f, -0.002201f, -0.007610f, 0.002867f, 0.001203f, 0.006415f, -0.007827f, -0.005992f, 0.004371f, -0.003572f, -0.001657f, -0.005892f, 0.001283f, -0.003497f, -0.003206f, -0.000004f, -0.002580f, -0.002852f, 0.000722f, -0.001583f, -0.000742f, -0.003238f, - 0.001903f, -0.000480f, 0.000138f, -0.000931f, 0.001543f, -0.000392f, 0.000466f, -0.000655f, -0.000548f, -0.000057f, -0.001083f, -0.000149f, -0.023783f, -0.005432f, 0.009056f, -0.001271f, -0.007418f, 0.003123f, -0.017670f, -0.006736f, -0.002675f, -0.003148f, -0.009203f, -0.009562f, 0.005048f, 0.007974f, 0.006706f, -0.008942f, -0.013330f, 0.001512f, -0.007859f, -0.014075f, 0.003096f, -0.000879f, 0.003860f, 0.015858f, -0.005345f, -0.001655f, -0.010134f, 0.013705f, 0.000928f, 0.006847f, 0.004587f, 0.011255f, 0.005585f, 0.003493f, -0.011282f, -0.001247f, -0.010384f, -0.002809f, 0.000317f, -0.004287f, 0.003314f, 0.002930f, -0.004981f, -0.009497f, 0.005931f, 0.009943f, 0.002660f, -0.004702f, -0.007481f, -0.004535f, 0.002222f, -0.008246f, -0.010612f, -0.002953f, 0.005054f, -0.002863f, 0.002425f, 0.006621f, 0.004029f, -0.004858f, 0.009419f, 0.000894f, 0.008003f, -0.006774f, -0.005870f, -0.003280f, -0.004139f, 0.005725f, -0.003328f, 0.000387f, 0.009511f, 0.003482f, 0.000110f, -0.009073f, 0.002355f, -0.003585f, 0.006633f, 0.009884f, -0.001825f, 0.000874f, -0.004616f, 0.003788f, 0.008518f, -0.003002f, - 0.005260f, 0.002516f, 0.001017f, 0.004524f, 0.001645f, 0.000293f, 0.003426f, 0.001425f, -0.000412f, 0.000101f, 0.001445f, 0.001520f, -0.001727f, 0.001281f, 0.001074f, 0.001909f, -0.001239f, -0.004867f, 0.006135f, 0.008387f, 0.003438f, -0.005279f, 0.003711f, -0.002485f, 0.002585f, 0.015798f, 0.009796f, -0.013364f, 0.009112f, -0.007356f, -0.003576f, -0.001938f, 0.000319f, 0.006719f, 0.000308f, 0.018491f, 0.005400f, -0.007097f, -0.004604f, -0.004603f, 0.013084f, 0.003068f, 0.012606f, 0.004121f, 0.008510f, 0.013092f, 0.015075f, 0.005718f, -0.001624f, -0.001489f, 0.002337f, -0.012014f, -0.011116f, 0.003590f, -0.008418f, 0.004845f, 0.002400f, -0.002861f, -0.001172f, 0.003548f, 0.012607f, -0.004081f, -0.004169f, -0.006416f, 0.016087f, -0.002138f, -0.019862f, -0.009926f, -0.007818f, -0.007228f, 0.008337f, 0.007955f, 0.007064f, 0.010463f, 0.004728f, 0.006574f, -0.000189f, -0.000586f, -0.000190f, 0.010530f, 0.003516f, 0.006198f, -0.013777f, 0.000957f, 0.000753f, 0.000802f, 0.001033f, 0.006095f, 0.004352f, 0.001806f, -0.006608f, -0.006644f, 0.004020f, 0.003304f, -0.001854f, -0.000355f, - -0.005290f, -0.006824f, -0.005497f, 0.003902f, 0.006807f, 0.000887f, 0.000526f, 0.002401f, -0.001788f, -0.000165f, -0.001380f, 0.001289f, 0.001331f, 0.000780f, -0.000766f, 0.002089f, 0.003361f, -0.000382f, 0.000480f, 0.000801f, -0.000344f, 0.000943f, -0.001152f, 0.002436f, 0.000192f, -0.000350f, -0.001331f, 0.002169f, -0.003844f, 0.002377f, 0.000850f, 0.001819f, -0.000106f, -0.002277f, 0.000657f, -0.001046f, 0.035360f, 0.007544f, 0.005595f, -0.004437f, -0.002199f, 0.003252f, 0.002695f, 0.009213f, 0.012629f, -0.000725f, 0.018482f, 0.007123f, -0.006205f, -0.006182f, -0.000232f, 0.008574f, -0.000802f, -0.004922f, 0.009886f, 0.001200f, 0.026543f, 0.006734f, 0.005433f, 0.000928f, -0.002320f, 0.001084f, 0.004203f, 0.004947f, -0.000976f, -0.000103f, 0.014339f, 0.001818f, 0.015762f, -0.007977f, -0.007258f, 0.004972f, 0.023556f, 0.006605f, 0.005852f, -0.002182f, -0.009885f, -0.004126f, 0.003365f, 0.000536f, -0.000024f, 0.000697f, -0.014120f, 0.000856f, -0.006099f, 0.005579f, 0.004723f, -0.005815f, 0.003498f, 0.004867f, 0.003577f, -0.006890f, -0.006715f, 0.001488f, 0.002643f, -0.000137f, - -0.008692f, 0.002167f, -0.003265f, 0.005545f, -0.000627f, 0.000952f, 0.003811f, -0.001528f, 0.002191f, -0.003330f, 0.001165f, 0.020332f, 0.002510f, 0.007103f, 0.000432f, -0.005801f, 0.003553f, 0.001066f, 0.006533f, -0.011555f, -0.007758f, 0.003740f, -0.001488f, 0.002184f, -0.002787f, 0.004183f, 0.003821f, 0.000301f, -0.004868f, -0.002067f, -0.006689f, -0.001381f, -0.001403f, 0.004255f, -0.002992f, -0.000998f, 0.000922f, -0.000765f, -0.001478f, -0.001811f, 0.001456f, -0.001914f, -0.002137f, -0.000185f, 0.000255f, 0.001080f, -0.004482f, -0.001965f, 0.001341f, 0.000516f, -0.004897f, -0.001389f, -0.000177f, -0.006666f, -0.002586f, -0.000856f, 0.005292f, -0.007858f, -0.001222f, 0.007767f, -0.003866f, -0.012323f, 0.000048f, 0.020051f, -0.001271f, 0.015723f, 0.008233f, 0.021792f, 0.002765f, 0.001953f, 0.008087f, -0.006240f, -0.012929f, -0.017246f, 0.004168f, -0.008817f, 0.020306f, 0.011473f, 0.014383f, -0.002742f, -0.005810f, 0.001730f, 0.003325f, 0.006622f, 0.019017f, 0.002220f, 0.007997f, -0.008674f, 0.006144f, -0.006163f, 0.002707f, -0.003337f, 0.006345f, 0.010787f, 0.001586f, 0.010307f, - 0.003915f, 0.005148f, -0.002868f, -0.002519f, 0.013944f, -0.003247f, -0.003335f, 0.010395f, -0.006107f, -0.000602f, 0.001611f, -0.004571f, -0.005920f, 0.004600f, -0.006807f, -0.001334f, -0.008724f, -0.018884f, -0.001994f, -0.002874f, -0.000371f, -0.019673f, -0.007390f, -0.006005f, -0.004974f, 0.007397f, 0.019503f, -0.004935f, 0.006349f, 0.010141f, -0.002708f, 0.001914f, 0.001836f, 0.001160f, -0.006940f, 0.007720f, -0.008835f, 0.002353f, 0.006558f, 0.018178f, 0.005799f, 0.005396f, 0.001773f, -0.000220f, 0.005602f, -0.006545f, 0.000067f, 0.003771f, 0.001899f, 0.000348f, -0.007231f, 0.004416f, 0.005484f, 0.005419f, -0.000896f, 0.004045f, 0.002309f, 0.001169f, 0.003780f, 0.002152f, 0.000563f, 0.002110f, -0.000381f, 0.001650f, 0.001163f, 0.001400f, 0.002241f, 0.002696f, 0.003256f, 0.002223f, 0.002228f, 0.002408f, -0.001262f, 0.002187f, -0.025364f, 0.002043f, 0.013887f, 0.007055f, -0.014156f, -0.001247f, 0.000837f, 0.003212f, 0.005412f, -0.000989f, -0.010985f, -0.010842f, 0.001819f, 0.017929f, 0.008761f, 0.010567f, 0.018364f, -0.012485f, 0.013146f, 0.023872f, -0.002062f, 0.005257f, - -0.013487f, 0.004522f, 0.005059f, -0.011852f, -0.006162f, -0.002679f, 0.005665f, -0.011970f, -0.015469f, 0.002837f, 0.001829f, -0.013522f, 0.001172f, 0.004081f, -0.002631f, 0.028348f, -0.001532f, -0.020319f, -0.001296f, 0.006844f, 0.016115f, 0.005789f, 0.007260f, -0.013069f, 0.003637f, 0.003965f, -0.011490f, -0.000877f, -0.001919f, 0.019662f, 0.012148f, -0.003400f, -0.006757f, -0.015435f, 0.006635f, 0.006032f, -0.009021f, -0.000420f, 0.003694f, 0.005889f, 0.006177f, -0.007908f, -0.000202f, -0.001806f, 0.018573f, -0.015700f, 0.001929f, -0.004164f, 0.016723f, -0.001299f, -0.004081f, -0.007106f, 0.002099f, -0.007349f, -0.017018f, 0.000379f, 0.012943f, 0.003782f, 0.008112f, 0.001933f, -0.006135f, -0.002525f, -0.003098f, 0.010937f, 0.004372f, -0.003078f, -0.000418f, 0.009929f, 0.007476f, -0.002904f, 0.001065f, 0.001500f, 0.002148f, -0.000268f, 0.004000f, 0.002707f, 0.002441f, 0.000185f, -0.001414f, -0.000709f, 0.000784f, -0.001502f, 0.000464f, -0.002066f, -0.000677f, 0.001578f, -0.005220f, -0.001289f, 0.009879f, 0.008670f, 0.003269f, -0.006666f, 0.001956f, 0.004050f, 0.030038f, 0.019665f, - 0.014994f, 0.020862f, 0.008618f, -0.002025f, 0.003083f, 0.007580f, -0.021164f, 0.010673f, 0.000374f, 0.011484f, -0.008515f, -0.004574f, -0.013652f, 0.003641f, 0.024143f, -0.023846f, -0.014960f, -0.025342f, 0.012714f, -0.005995f, 0.000794f, -0.011699f, 0.001459f, -0.004549f, -0.011445f, 0.004062f, 0.005568f, -0.018139f, -0.002473f, 0.002908f, -0.003975f, 0.009089f, -0.025905f, -0.012855f, 0.026397f, 0.002311f, -0.000522f, -0.002968f, 0.000872f, -0.013795f, -0.014334f, 0.000479f, -0.020830f, -0.005164f, 0.002017f, 0.005184f, -0.009006f, -0.002439f, 0.025687f, -0.002054f, 0.008957f, 0.018778f, -0.017955f, -0.006610f, 0.004099f, 0.004136f, 0.003339f, -0.005887f, -0.012873f, 0.014223f, -0.001726f, -0.014043f, 0.009898f, -0.002869f, 0.002230f, 0.003393f, -0.007476f, -0.004876f, -0.003241f, -0.005988f, -0.008102f, -0.010016f, -0.009349f, -0.012190f, -0.003701f, -0.005405f, -0.001311f, -0.001953f, -0.000298f, 0.001123f, -0.004994f, -0.004273f, 0.002618f, 0.002840f, 0.005218f, -0.000731f, -0.002356f, -0.007367f, -0.002136f, -0.008452f, -0.005295f, -0.001518f, 0.001391f, -0.001022f, 0.000903f, -0.002470f, - -0.001376f, 0.005523f, 0.002118f, 0.003694f, -0.004215f, 0.000611f, 0.000781f, 0.001115f, -0.008351f, 0.000159f, 0.002231f, -0.000438f, 0.004146f, -0.001138f, -0.001472f, 0.000443f, 0.001161f, -0.049976f, -0.027392f, 0.022175f, -0.008403f, -0.010841f, 0.013839f, 0.011562f, -0.021004f, -0.028959f, -0.008966f, -0.010517f, -0.010564f, -0.002200f, -0.019521f, -0.014486f, 0.007442f, 0.000526f, -0.026343f, -0.029525f, -0.016196f, -0.008271f, -0.001275f, 0.014751f, -0.000878f, -0.011180f, 0.008432f, -0.024618f, 0.000932f, -0.001384f, 0.001231f, 0.008270f, 0.004866f, -0.018002f, -0.013175f, 0.010416f, 0.003913f, 0.039385f, 0.009898f, -0.013434f, 0.001961f, 0.001053f, 0.000564f, 0.010228f, 0.002155f, 0.004138f, -0.003925f, -0.008940f, 0.002726f, -0.023014f, -0.004121f, -0.010160f, -0.011921f, 0.002406f, -0.018004f, 0.020909f, -0.002596f, 0.008613f, 0.015239f, 0.004268f, 0.008134f, -0.001201f, -0.009692f, -0.000627f, -0.001145f, -0.012406f, 0.015979f, -0.006778f, 0.028345f, -0.001130f, -0.000536f, 0.001118f, -0.007220f, -0.015483f, 0.004872f, -0.012188f, -0.004759f, 0.016353f, -0.021254f, -0.021179f, - 0.014176f, 0.013211f, 0.011586f, -0.017968f, 0.012940f, 0.005183f, 0.007587f, -0.000704f, 0.003379f, 0.003334f, 0.010084f, 0.004107f, 0.002554f, 0.007257f, -0.000885f, -0.000603f, -0.005972f, -0.004862f, -0.000873f, 0.004905f, -0.006421f, 0.000762f, -0.000648f, -0.003963f, -0.002261f, 0.001551f, -0.008293f, -0.005246f, -0.006160f, -0.001212f, 0.002813f, -0.000149f, 0.006329f, -0.002187f, 0.006616f, 0.000471f, 0.002526f, 0.000943f, 0.005148f, -0.004003f, -0.003067f, 0.005725f, -0.002537f, 0.000709f, 0.000543f, 0.010035f, 0.036943f, -0.020639f, 0.017647f, 0.007187f, 0.013182f, -0.005269f, -0.019951f, 0.002836f, -0.005136f, -0.018783f, 0.038132f, -0.002702f, -0.010424f, -0.037479f, 0.023167f, 0.006377f, -0.000270f, -0.014012f, -0.016051f, 0.000419f, 0.038740f, 0.014354f, -0.001343f, -0.003818f, -0.016395f, -0.013491f, 0.011305f, 0.004922f, -0.012782f, -0.009122f, 0.013637f, 0.003360f, -0.000382f, 0.011569f, 0.017993f, 0.002798f, 0.023699f, 0.026673f, 0.016375f, -0.006155f, 0.006067f, 0.002177f, 0.004593f, 0.013918f, -0.019578f, 0.020800f, -0.001240f, -0.010575f, -0.015831f, 0.000097f, - 0.013857f, 0.009567f, -0.018714f, 0.004149f, 0.015153f, 0.002301f, -0.013494f, -0.029546f, -0.026670f, 0.007093f, 0.012099f, 0.002007f, -0.010209f, -0.001379f, 0.021687f, -0.009840f, -0.015983f, -0.031194f, 0.003522f, 0.006074f, -0.023057f, 0.008764f, 0.023505f, -0.010571f, 0.018336f, 0.006314f, -0.021329f, -0.015960f, 0.001909f, 0.022172f, -0.002063f, 0.023293f, -0.003801f, -0.008125f, 0.005139f, 0.011893f, 0.003403f, -0.003939f, -0.006001f, 0.004023f, 0.010761f, 0.008571f, 0.001693f, 0.013856f, 0.002812f, 0.009953f, 0.002718f, 0.013597f, 0.002303f, 0.008413f, 0.000121f, 0.006732f, 0.003866f, -0.003303f, -0.009648f, 0.000897f, -0.011323f, -0.001576f, -0.004475f, 0.001862f, -0.001245f, -0.000400f, -0.010015f, -0.000919f, 0.005093f, -0.004983f, 0.000952f, -0.001172f, 0.001016f, -0.000634f, -0.007153f, 0.001185f, -0.001284f, 0.044604f, 0.029133f, 0.006761f, -0.009027f, -0.004658f, -0.006340f, -0.030442f, -0.012466f, -0.000290f, 0.019391f, -0.013934f, -0.007969f, -0.006458f, 0.000222f, 0.032288f, -0.025127f, -0.006590f, -0.001498f, 0.015222f, -0.005343f, -0.018361f, -0.031048f, 0.011191f, - -0.021488f, -0.009658f, -0.013448f, -0.014302f, 0.004421f, -0.024101f, -0.011887f, 0.021626f, 0.032075f, 0.001615f, -0.020267f, -0.017822f, 0.029572f, -0.003171f, -0.016202f, 0.031147f, 0.000845f, 0.002063f, 0.001190f, -0.033643f, 0.013638f, -0.012360f, 0.012173f, 0.011532f, -0.023100f, -0.002332f, -0.023430f, 0.009237f, -0.022725f, -0.003669f, 0.009356f, 0.013040f, -0.007670f, 0.008001f, -0.027552f, 0.019079f, -0.002251f, 0.013081f, 0.010700f, 0.008023f, -0.006209f, -0.005542f, 0.027230f, -0.018708f, 0.013465f, -0.004433f, -0.023404f, -0.013835f, -0.001674f, 0.024801f, -0.014189f, 0.011744f, 0.003184f, -0.007342f, 0.000195f, -0.027147f, 0.034505f, 0.021532f, -0.004212f, -0.009169f, 0.016848f, 0.007616f, -0.005117f, -0.008621f, 0.001798f, -0.005654f, 0.008624f, -0.001547f, 0.004477f, 0.014652f, 0.005045f, 0.011665f, -0.000138f, 0.004333f, 0.001568f, -0.001818f, 0.000182f, -0.000752f, 0.009716f, 0.004191f, 0.013529f, 0.002610f, -0.007773f, 0.010281f, -0.004108f, 0.000045f, 0.007353f, -0.006856f, -0.002498f, -0.003455f, -0.003189f, 0.006515f, 0.003642f, 0.003557f, 0.005327f, -0.000284f, - -0.001660f, 0.013095f, -0.004416f, -0.004018f, 0.017074f, 0.003655f, -0.011845f, -0.026097f, -0.001771f, -0.034016f, 0.005585f, 0.003386f, 0.016472f, -0.013389f, -0.003603f, 0.009234f, 0.007087f, 0.010125f, -0.023566f, 0.033192f, 0.022987f, 0.004621f, 0.016912f, -0.007444f, -0.033431f, 0.008143f, -0.014263f, -0.015181f, 0.015282f, 0.038418f, 0.006348f, -0.010180f, -0.014130f, -0.030228f, -0.000251f, 0.001749f, 0.046668f, -0.018165f, -0.001050f, 0.001735f, -0.001740f, -0.027977f, -0.032250f, 0.025611f, 0.000687f, 0.014696f, -0.004416f, -0.035849f, -0.021140f, 0.003216f, -0.006356f, -0.007325f, -0.010633f, 0.024003f, -0.005301f, 0.015707f, -0.016893f, 0.033305f, -0.039245f, 0.019606f, 0.019900f, 0.012375f, 0.010385f, 0.010089f, 0.030519f, 0.016159f, -0.002529f, 0.006900f, -0.000048f, 0.030770f, 0.045465f, -0.004953f, 0.003369f, -0.013124f, 0.018861f, 0.031045f, -0.021298f, 0.006778f, -0.053228f, 0.034927f, 0.035462f, 0.024171f, 0.032973f, -0.014836f, -0.026811f, -0.001586f, -0.004120f, -0.007525f, -0.005832f, -0.015602f, -0.011323f, -0.005568f, -0.001649f, -0.008587f, 0.005091f, 0.010046f, - 0.003541f, -0.014644f, 0.002756f, -0.007996f, -0.008971f, -0.005210f, 0.006023f, 0.006076f, -0.002829f, -0.003411f, -0.001511f, -0.002283f, 0.001427f, -0.014163f, 0.004642f, 0.002407f, 0.009206f, 0.002406f, -0.000785f, -0.000112f, 0.001904f, 0.008512f, 0.002691f, -0.007185f, 0.005843f, 0.000313f, 0.000738f, -0.038529f, -0.005697f, -0.049276f, -0.025280f, 0.019366f, -0.020170f, -0.043824f, 0.004068f, -0.023639f, 0.001087f, 0.000834f, -0.028098f, -0.026720f, 0.012076f, 0.025778f, 0.007782f, -0.030006f, 0.014347f, -0.033749f, -0.011830f, -0.012442f, 0.010559f, -0.013875f, -0.006320f, 0.016201f, 0.002770f, -0.011114f, -0.024017f, 0.025419f, 0.024657f, 0.032036f, 0.004185f, -0.003576f, 0.001134f, 0.010261f, -0.002423f, 0.013135f, -0.014458f, 0.017273f, -0.006802f, 0.019900f, 0.015966f, 0.012012f, -0.005784f, 0.000823f, -0.030970f, 0.010538f, -0.007797f, 0.023293f, 0.004239f, -0.054152f, 0.008319f, 0.026688f, 0.035903f, -0.020654f, -0.028212f, 0.033766f, 0.015331f, 0.023740f, -0.042293f, 0.020910f, 0.052948f, 0.055769f, 0.003551f, 0.001324f, 0.031737f, -0.021966f, -0.029267f, 0.018748f, - -0.032403f, 0.012166f, -0.015090f, -0.012754f, -0.007156f, -0.069800f, -0.040304f, -0.033995f, 0.025080f, 0.009514f, 0.007053f, -0.024797f, -0.010083f, -0.018734f, -0.003544f, -0.010065f, 0.027412f, 0.006513f, -0.010899f, -0.024354f, -0.005420f, 0.015768f, -0.002515f, -0.006737f, 0.004846f, 0.016506f, -0.005875f, -0.009755f, -0.004674f, -0.003620f, -0.001120f, 0.012838f, 0.012900f, 0.011206f, -0.011320f, 0.014688f, -0.000745f, 0.004198f, 0.016793f, -0.007545f, -0.007572f, 0.014640f, 0.026282f, -0.006146f, -0.008579f, -0.004185f, 0.003164f, -0.004738f, -0.018103f, 0.002924f, 0.013224f, 0.003567f, -0.018229f, -0.017461f, 0.008237f, 0.005921f, -0.000974f, -0.001117f, -0.003185f, -0.012984f, -0.008890f, -0.029000f, -0.055696f, 0.042586f, 0.004447f, 0.014309f, -0.007232f, 0.030163f, 0.000781f, -0.025697f, 0.019875f, 0.008113f, -0.009128f, -0.015505f, -0.012188f, 0.003848f, 0.007242f, 0.026716f, -0.015228f, 0.020969f, 0.006648f, 0.038087f, -0.054657f, -0.014648f, -0.008685f, 0.007048f, 0.022276f, 0.032374f, 0.007322f, -0.026269f, 0.017720f, 0.025472f, 0.021404f, -0.005983f, 0.007449f, 0.001554f, - -0.009004f, -0.003664f, 0.001520f, 0.008249f, 0.002933f, 0.018833f, 0.003071f, -0.023740f, 0.022152f, -0.024615f, -0.031470f, 0.004892f, 0.022690f, -0.011049f, -0.008194f, 0.008264f, 0.011053f, 0.019593f, -0.011229f, 0.009290f, 0.044206f, -0.017657f, -0.047062f, -0.060903f, -0.030823f, -0.041267f, 0.018698f, 0.035812f, 0.022859f, 0.008751f, 0.021498f, 0.012659f, 0.023764f, -0.020392f, 0.026867f, 0.013978f, 0.010869f, 0.028044f, 0.036399f, -0.011353f, -0.008196f, 0.009952f, -0.002454f, 0.032799f, 0.012647f, -0.005024f, 0.005471f, -0.040040f, -0.028061f, 0.005533f, -0.001648f, 0.007101f, 0.002627f, 0.008395f, -0.007558f, 0.021078f, -0.011225f, -0.012898f, -0.012521f, -0.021074f, -0.007723f, -0.004187f, 0.006830f, 0.005596f, -0.003240f, -0.018109f, -0.001145f, 0.005961f, 0.001922f, -0.007287f, 0.004187f, 0.000222f, 0.006891f, -0.007598f, 0.003009f, 0.001425f, 0.008327f, -0.004061f, 0.012868f, -0.008065f, -0.009358f, 0.002714f, -0.001684f, -0.006804f, 0.002035f, 0.008928f, 0.000651f, -0.001419f, 0.055682f, 0.005434f, 0.008695f, -0.011518f, 0.020190f, -0.063694f, -0.028192f, -0.043518f, - -0.045019f, 0.017899f, -0.039295f, 0.038617f, 0.043844f, 0.001972f, 0.009455f, -0.006715f, 0.007967f, -0.041645f, 0.017063f, 0.046176f, -0.026358f, -0.053630f, 0.007021f, -0.020144f, -0.017202f, -0.052314f, 0.008980f, 0.019266f, -0.000297f, -0.007066f, 0.016742f, -0.029822f, -0.005075f, 0.019460f, -0.010818f, -0.026430f, 0.003093f, -0.013177f, 0.027240f, -0.018092f, -0.010180f, 0.025647f, 0.022104f, 0.047332f, 0.006138f, 0.011447f, -0.004485f, 0.012727f, 0.016712f, 0.029247f, -0.008567f, -0.000938f, -0.018312f, 0.038574f, -0.048745f, 0.052224f, 0.001705f, -0.020796f, 0.024303f, -0.018963f, -0.014136f, 0.048028f, -0.069486f, 0.011318f, -0.014798f, 0.013570f, -0.027070f, 0.012956f, 0.027317f, -0.014239f, -0.002728f, -0.007318f, -0.011672f, -0.006162f, 0.050901f, -0.057967f, -0.019995f, 0.097428f, -0.036886f, -0.043019f, 0.041970f, 0.025221f, 0.027940f, -0.024555f, 0.001723f, -0.024411f, -0.013877f, -0.003852f, -0.028080f, 0.006073f, 0.003533f, -0.007290f, 0.009801f, 0.008939f, -0.012858f, -0.023734f, -0.006335f, -0.002034f, 0.009070f, -0.020956f, -0.014931f, 0.000510f, -0.002348f, 0.005233f, - 0.012792f, 0.030980f, -0.014378f, -0.000754f, -0.003667f, -0.003295f, 0.008648f, 0.003452f, -0.018736f, -0.013979f, 0.014540f, -0.012072f, 0.005309f, 0.003773f, -0.011537f, 0.004226f, -0.002883f, -0.018929f, -0.015787f, 0.009203f, 0.005765f, -0.002913f, -0.000673f, 0.011735f, -0.027933f, -0.042606f, 0.003953f, -0.016029f, -0.014706f, -0.023898f, -0.030392f, 0.038272f, 0.016183f, 0.002617f, 0.017674f, 0.045294f, 0.026457f, -0.002895f, 0.009013f, 0.030516f, 0.038503f, -0.034147f, 0.015854f, 0.032587f, 0.013914f, 0.012068f, 0.044501f, 0.021735f, 0.009146f, -0.001160f, 0.019931f, -0.002045f, 0.022579f, 0.019002f, 0.010118f, -0.020717f, 0.039355f, -0.032283f, -0.004228f, 0.049680f, 0.048756f, -0.011441f, -0.043530f, 0.016535f, -0.000821f, 0.042654f, 0.072893f, 0.016533f, -0.011345f, 0.005379f, -0.042068f, -0.004738f, -0.011227f, -0.008797f, 0.000692f, 0.037494f, -0.016144f, 0.016622f, 0.044713f, 0.007834f, -0.041636f, 0.027673f, -0.002261f, 0.017683f, 0.042011f, 0.059573f, -0.016880f, -0.015522f, -0.005224f, -0.046800f, -0.068976f, 0.002103f, -0.031439f, -0.004846f, -0.038085f, -0.003674f, - 0.001099f, 0.005397f, 0.028058f, -0.000564f, -0.019738f, -0.032392f, 0.023724f, -0.009832f, 0.020286f, 0.000987f, 0.037884f, 0.014327f, 0.013918f, 0.000381f, -0.011914f, 0.021582f, -0.016380f, -0.018617f, -0.005779f, -0.013936f, -0.005585f, 0.001333f, 0.001420f, -0.004846f, 0.005762f, 0.008624f, 0.000615f, -0.001904f, 0.010986f, -0.009255f, -0.013550f, 0.008496f, 0.009674f, 0.002203f, -0.011717f, -0.013759f, -0.008235f, 0.011552f, 0.015139f, 0.002252f, -0.002194f, 0.017090f, 0.004565f, 0.008291f, 0.006942f, 0.012296f, 0.003355f, -0.001956f, -0.008920f, 0.005098f, 0.009561f, -0.019462f, 0.015593f, 0.046560f, -0.087285f, 0.048044f, -0.036791f, -0.085984f, -0.025529f, -0.021648f, -0.003108f, -0.019818f, 0.010379f, -0.023770f, -0.053355f, -0.032175f, -0.016002f, -0.004852f, 0.006039f, -0.021934f, 0.021375f, 0.041763f, 0.001475f, -0.002626f, 0.011369f, 0.002560f, -0.007873f, -0.015514f, -0.008828f, 0.011283f, 0.012328f, -0.003728f, 0.011714f, 0.051276f, 0.014027f, -0.015031f, -0.050998f, -0.008165f, 0.035849f, -0.043826f, -0.020700f, -0.016725f, 0.000411f, -0.003396f, 0.027498f, -0.009172f, - 0.003183f, 0.037957f, 0.013441f, 0.042109f, -0.006075f, -0.019985f, -0.009288f, -0.010900f, -0.011086f, 0.020260f, 0.002052f, 0.013666f, 0.025547f, -0.045305f, 0.006476f, -0.012069f, -0.028308f, -0.021333f, 0.043986f, 0.031701f, 0.001429f, -0.021687f, 0.008749f, 0.018523f, 0.001751f, 0.012774f, -0.030540f, -0.075141f, -0.034939f, -0.027604f, 0.027274f, 0.002639f, -0.003652f, -0.012820f, 0.005184f, -0.008616f, -0.023903f, -0.024743f, -0.013016f, 0.030188f, 0.022730f, -0.034056f, -0.042546f, -0.016727f, 0.002755f, 0.025521f, 0.010207f, -0.008387f, -0.011564f, -0.008905f, 0.005789f, -0.018981f, 0.002602f, -0.013031f, 0.000878f, 0.019187f, 0.020496f, 0.005276f, -0.010918f, 0.006465f, 0.014711f, -0.000712f, -0.003415f, 0.010825f, -0.015414f, 0.020939f, 0.018772f, 0.007150f, -0.000566f, -0.001115f, -0.002349f, 0.017506f, -0.007180f, -0.009617f, -0.010919f, -0.015480f, -0.015161f, 0.004551f, -0.005736f, 0.006194f, -0.004510f, 0.002958f, 0.010977f, -0.005767f, -0.011028f, -0.015976f, -0.004585f, 0.007010f, -0.011396f, 0.024482f, -0.033717f, 0.040687f, -0.002611f, -0.066148f, 0.014060f, -0.032263f, - -0.005838f, -0.005455f, -0.007057f, -0.042394f, 0.013795f, 0.001454f, 0.033705f, -0.071985f, 0.001825f, 0.034396f, 0.004895f, -0.017650f, -0.035401f, -0.003551f, 0.021330f, 0.030006f, -0.024903f, -0.009867f, 0.017240f, 0.034387f, 0.032722f, -0.031753f, -0.005708f, -0.051005f, 0.024021f, 0.024724f, 0.016387f, -0.015097f, -0.003343f, -0.014456f, -0.004764f, -0.017539f, 0.005403f, 0.035844f, -0.013026f, -0.015235f, -0.012030f, -0.021591f, 0.042132f, 0.034939f, -0.002968f, 0.049527f, -0.001771f, 0.017064f, -0.043951f, 0.035659f, 0.016711f, -0.050842f, -0.015691f, 0.056388f, 0.024203f, 0.014645f, 0.011590f, -0.027816f, -0.020788f, -0.029771f, 0.050128f, -0.026612f, 0.038807f, 0.038823f, -0.044678f, 0.103373f, -0.021955f, 0.063752f, 0.003198f, -0.015593f, -0.027580f, 0.047642f, 0.019103f, -0.038676f, -0.022713f, -0.082013f, 0.032726f, -0.012124f, 0.037570f, -0.050896f, 0.056041f, -0.043761f, 0.016723f, -0.017611f, -0.012540f, 0.035628f, 0.003666f, 0.002346f, 0.020646f, 0.013220f, -0.009192f, 0.022964f, -0.002782f, 0.005942f, -0.016641f, 0.002140f, -0.002170f, -0.011785f, -0.016762f, -0.000564f, - -0.018635f, 0.007788f, 0.008137f, -0.005584f, 0.016241f, -0.007032f, -0.009700f, -0.014821f, 0.009554f, 0.000734f, -0.002266f, -0.028111f, 0.012135f, -0.006627f, -0.032389f, -0.011582f, 0.009209f, -0.010476f, -0.016831f, 0.009879f, -0.009208f, 0.007906f, -0.017176f, 0.006673f, -0.017526f, -0.004397f, -0.002814f, 0.008003f, -0.004324f, 0.000291f, -0.005899f, -0.007432f, 0.024188f, 0.043743f, 0.002739f, -0.035139f, 0.016623f, -0.068637f, -0.019231f, -0.062265f, -0.088110f, 0.003869f, -0.034308f, 0.012135f, -0.007180f, -0.012795f, -0.033935f, -0.021957f, 0.018866f, 0.053533f, -0.044508f, -0.008479f, -0.076191f, -0.065379f, 0.017643f, 0.027525f, -0.042114f, -0.042462f, 0.002105f, 0.010587f, -0.070796f, 0.004715f, 0.000894f, 0.037458f, -0.032102f, 0.002376f, 0.029642f, -0.018702f, -0.037123f, -0.039870f, -0.020337f, -0.036261f, -0.031127f, -0.037892f, 0.053911f, -0.068227f, -0.043503f, 0.063629f, -0.002570f, 0.018683f, -0.052972f, -0.008128f, -0.015500f, 0.002410f, 0.087715f, -0.011482f, -0.002283f, 0.009753f, 0.040811f, 0.002001f, -0.039638f, -0.016286f, -0.028729f, 0.010550f, 0.105086f, 0.021592f, - -0.037760f, 0.080653f, 0.056986f, -0.050040f, 0.058796f, 0.098418f, 0.000314f, -0.036927f, 0.065736f, -0.010443f, 0.069190f, 0.063887f, 0.004768f, -0.002190f, -0.019225f, 0.044936f, 0.035164f, 0.021388f, -0.037703f, -0.011300f, -0.024506f, 0.056639f, -0.007516f, -0.037115f, -0.019070f, -0.037314f, -0.016986f, 0.039097f, 0.003870f, -0.018955f, -0.007251f, -0.023443f, -0.004549f, 0.035075f, -0.016815f, 0.009443f, -0.003813f, -0.031353f, 0.034733f, 0.005334f, 0.013715f, 0.018134f, -0.023013f, 0.008099f, 0.031916f, -0.004665f, 0.000934f, -0.016210f, -0.000399f, 0.003764f, -0.010944f, -0.008641f, 0.005796f, 0.025128f, -0.015688f, 0.010648f, -0.020837f, -0.008630f, 0.000956f, -0.005656f, 0.023323f, -0.007868f, 0.000775f, 0.003470f, 0.008385f, 0.002005f, -0.011472f, -0.001425f, -0.006590f, 0.049912f, -0.125626f, -0.074644f, -0.081853f, -0.027115f, -0.054744f, 0.067857f, 0.024817f, 0.055747f, -0.008815f, -0.105970f, -0.016891f, 0.017839f, 0.072653f, -0.002481f, 0.016374f, 0.067855f, -0.025842f, -0.048211f, 0.004310f, -0.002753f, 0.084387f, 0.055857f, -0.028489f, -0.038132f, 0.089654f, 0.006833f, - 0.044484f, 0.022265f, 0.083553f, 0.073285f, 0.055378f, 0.006373f, -0.048414f, -0.025502f, -0.037202f, 0.070860f, -0.034705f, -0.047778f, -0.027172f, 0.002932f, -0.002940f, 0.031517f, -0.031577f, 0.011540f, -0.144206f, 0.016403f, 0.021197f, 0.023863f, -0.060967f, -0.055228f, 0.016008f, 0.050733f, -0.062954f, 0.024343f, -0.036316f, -0.027151f, -0.042706f, -0.003494f, 0.042809f, -0.029288f, 0.047130f, -0.012114f, 0.017689f, -0.089112f, -0.058689f, -0.002100f, 0.046139f, 0.033299f, -0.066270f, -0.069898f, -0.033852f, 0.006667f, 0.072863f, 0.030641f, -0.008542f, -0.052098f, -0.061590f, -0.020436f, 0.011119f, 0.052512f, -0.006102f, 0.017392f, 0.033677f, -0.013497f, 0.011179f, -0.034874f, 0.020033f, 0.012308f, -0.023105f, -0.018002f, 0.000305f, 0.026848f, -0.027533f, -0.001180f, 0.041293f, 0.006569f, 0.004596f, -0.000186f, -0.013956f, -0.029424f, 0.005742f, -0.032683f, 0.036318f, 0.032378f, 0.023027f, 0.002628f, -0.004856f, -0.038334f, 0.022169f, -0.008055f, 0.042513f, -0.011171f, -0.052102f, -0.031370f, -0.008177f, 0.048366f, 0.011774f, -0.011004f, -0.007005f, -0.039918f, -0.021043f, -0.016480f, - -0.004463f, 0.021410f, 0.019135f, -0.040404f, -0.024068f, -0.025083f, -0.025991f, -0.009471f, 0.005186f, -0.004264f, -0.015873f, -0.025157f, -0.027176f, 0.002261f, -0.003717f, -0.013323f, 0.023534f, 0.160223f, 0.017735f, -0.087827f, -0.192797f, -0.019118f, 0.116461f, 0.027411f, 0.051549f, -0.006861f, 0.071342f, -0.013352f, 0.032093f, -0.017822f, 0.040977f, 0.054387f, 0.031136f, -0.028735f, -0.062821f, 0.073832f, 0.086892f, -0.020872f, -0.083541f, -0.053214f, 0.010106f, 0.047768f, 0.017639f, 0.016093f, 0.004359f, 0.011012f, 0.006874f, 0.010894f, -0.015480f, -0.099828f, 0.000606f, 0.059148f, 0.047865f, -0.020919f, 0.005873f, 0.035798f, 0.082994f, 0.048701f, 0.041256f, -0.049824f, -0.032597f, -0.009820f, -0.007806f, -0.074791f, 0.052925f, 0.029218f, 0.054925f, 0.108476f, -0.055557f, -0.037837f, -0.004040f, -0.032031f, -0.025411f, -0.049609f, 0.086309f, -0.053237f, -0.054805f, -0.058862f, -0.019027f, 0.107499f, 0.028836f, 0.041000f, -0.001387f, -0.010581f, -0.024290f, 0.066321f, 0.055655f, -0.029466f, -0.062737f, 0.020621f, -0.007450f, 0.024883f, -0.058800f, -0.024589f, -0.033861f, -0.046552f, - 0.028386f, 0.043668f, 0.009219f, 0.000437f, -0.023241f, 0.012113f, -0.008622f, 0.040514f, 0.004100f, -0.015573f, -0.007542f, 0.012684f, 0.027525f, 0.028277f, -0.016443f, 0.017114f, 0.010247f, 0.008310f, -0.000715f, -0.032596f, -0.003494f, -0.026656f, -0.009564f, 0.000337f, 0.004839f, 0.007497f, 0.009662f, 0.009430f, 0.027906f, 0.039401f, 0.036722f, -0.004338f, -0.008477f, 0.003623f, -0.017335f, 0.021315f, -0.024571f, -0.003948f, 0.020628f, -0.002144f, -0.004632f, -0.041423f, 0.020537f, -0.041311f, 0.013718f, -0.009935f, 0.006614f, -0.004376f, 0.004788f, -0.002731f, -0.025005f, 0.013267f, 0.012516f, -0.002885f, 0.008427f, -0.002200f, 0.007170f, -0.004070f, -0.006647f, -0.001947f, -0.002235f, 0.000722f, -0.001476f, 0.000820f, 0.000708f, -0.009116f, -0.003978f, -0.002212f, 0.005146f, 0.001173f, -0.002672f, -0.005279f, -0.005560f, -0.000279f, 0.001270f, -0.002679f, 0.000099f, -0.003515f, -0.001077f, -0.003923f, -0.046138f, 0.003610f, 0.124484f, 0.094912f, 0.015428f, 0.006717f, -0.066864f, -0.130305f, -0.113034f, -0.056141f, 0.093571f, 0.101243f, 0.106195f, 0.057969f, -0.015067f, -0.067979f, - -0.061780f, -0.041520f, 0.027041f, 0.040614f, 0.072797f, 0.005928f, -0.054631f, -0.047315f, -0.009756f, -0.047411f, -0.021310f, 0.009439f, 0.075358f, 0.106140f, 0.069695f, 0.032244f, 0.030749f, -0.067814f, -0.007530f, -0.135535f, -0.150187f, -0.095169f, -0.045034f, -0.042208f, 0.070792f, 0.109415f, 0.122621f, 0.109613f, 0.096098f, 0.038761f, 0.006842f, -0.047122f, -0.012333f, -0.075370f, -0.131622f, -0.011865f, 0.012690f, 0.011886f, 0.044212f, 0.025165f, 0.044849f, -0.148820f, -0.080396f, -0.053850f, -0.085249f, -0.037370f, 0.063832f, -0.038875f, 0.043127f, 0.004850f, -0.038607f, 0.030435f, -0.032188f, 0.034336f, 0.041696f, -0.032555f, -0.063020f, -0.132063f, -0.126474f, -0.095868f, 0.046857f, 0.015192f, -0.017700f, 0.023306f, 0.007314f, -0.000740f, -0.060120f, -0.043789f, -0.112270f, -0.038628f, -0.041085f, -0.005789f, 0.082916f, 0.086891f, 0.013392f, 0.044238f, -0.026813f, -0.062422f, -0.109183f, -0.073596f, -0.067254f, -0.003715f, 0.034052f, 0.017823f, 0.027857f, 0.028039f, -0.019679f, 0.016439f, -0.018522f, 0.017093f, 0.005191f, -0.002097f, -0.003433f, 0.013845f, 0.014094f, 0.027714f, - -0.006044f, -0.008358f, 0.027943f, 0.024080f, 0.005522f, -0.010208f, 0.021904f, -0.222231f, -0.113312f, -0.059325f, 0.074965f, 0.017128f, 0.285121f, 0.291806f, 0.220356f, 0.284497f, 0.298538f, 0.270846f, 0.194800f, 0.176424f, 0.196205f, 0.077832f, -0.011397f, -0.121426f, -0.187160f, -0.259147f, -0.251374f, -0.375234f, -0.227349f, -0.148208f, -0.117359f, -0.167385f, -0.087756f, -0.024268f, -0.125097f, -0.097461f, -0.102547f, -0.023373f, -0.061492f, -0.022118f, -0.083333f, -0.042569f, 0.050034f, 0.051451f, 0.015635f, -0.015558f, 0.054507f, 0.043840f, -0.126202f, 0.026160f, 0.085699f, 0.187035f, 0.137500f, 0.178065f, 0.073308f, 0.070694f, 0.297068f, 0.160629f, 0.303990f, 0.101616f, 0.285120f, 0.196606f, 0.248957f, 0.335394f, 0.318008f, 0.257602f, 0.289607f, 0.321400f, 0.350106f, 0.298742f, 0.345119f, 0.235235f, 0.350065f, 0.280819f, 0.249451f, 0.265665f, 0.145309f, 0.297430f, 0.144171f, 0.087283f, -0.109235f, 0.007136f, -0.161467f, -0.181781f, -0.277701f, -0.328166f, -0.504122f, -0.492519f, -0.464995f, -0.435067f, -0.409866f, -0.346590f, -0.422600f, -0.520425f, -0.513039f, -0.425761f, - -0.450463f, -0.423828f, -0.425086f, -0.363005f, -0.395098f, -0.379059f, -0.282606f, -0.312342f, -0.239815f, -0.224178f, -0.206476f, -0.131838f, -0.170092f, -0.038962f, -0.063198f, 0.028992f, 0.039480f, 0.123737f, 0.183310f, 0.191895f, 0.221852f, 0.196800f, 0.296908f, 0.336337f, 0.333461f, 0.385140f, 0.402448f, 0.398528f, 0.304036f, 0.271222f, 0.238206f, 0.220615f, 0.214999f, 0.220478f, 0.207410f, 0.157691f, 0.101704f, 0.115314f, 0.089239f, 0.069174f, 0.046221f, -0.036227f, -0.046909f, -0.049553f, -0.060392f, -0.074034f, -0.083122f, -0.058807f, -0.064491f, -0.051865f, -0.052717f, -0.046031f, -0.033083f, -0.039891f, -0.032568f, -0.031966f, -0.038794f, -0.036048f, -0.039764f, -0.031794f, -0.026134f, -0.035274f, -0.040287f, -0.018333f, -0.008959f, -0.012630f, -0.011381f, -0.002221f, -0.003051f, -0.006890f, -0.007137f, 0.002994f, 0.014184f, 0.015016f, 0.015497f, 0.015411f, 0.014476f, 0.020568f, 0.021677f, 0.021804f, 0.015012f, 0.010608f, 0.008200f, 0.013707f, 0.014765f, 0.008746f, 0.002458f, 0.002927f, -0.001934f, 0.006308f, 0.004969f, 0.005228f, 0.003786f, 0.005244f, 0.004422f, 0.004419f, - 0.010080f, 0.020473f, 0.014231f, 0.014951f, 0.013249f, 0.016498f, 0.015464f, 0.011830f, 0.007431f, 0.007321f, 0.003240f, 0.002788f, -0.004008f, -0.007779f, -0.014667f, -0.013410f, -0.021740f, -0.027109f, -0.029483f, -0.030441f, -0.035267f, -0.035134f, -0.036965f, -0.036481f, -0.035749f, -0.038139f, -0.038881f, -0.037247f, -0.033581f, -0.029773f, -0.027585f, -0.019965f, -0.018336f, -0.015118f, -0.014570f, -0.007194f, -0.004565f, -0.000040f, 0.001958f, 0.005141f, 0.006043f, 0.009922f, 0.010489f, 0.011333f, 0.008801f, 0.009171f, 0.006905f, 0.006820f, 0.004413f, 0.004483f, 0.002400f, 0.002545f, 0.000679f, 0.000993f}, - {-0.014287f, -0.028302f, -0.004948f, 0.000375f, -0.006480f, -0.013320f, -0.004390f, 0.009758f, -0.015657f, -0.008654f, -0.005181f, -0.003069f, 0.004978f, -0.002239f, 0.005542f, 0.002532f, 0.004854f, -0.000543f, 0.006008f, -0.005241f, 0.000981f, -0.002301f, 0.001139f, 0.015105f, -0.003212f, -0.000933f, -0.007486f, 0.009336f, 0.005800f, 0.004491f, 0.011655f, -0.005960f, -0.003383f, 0.003983f, 0.010436f, -0.002817f, -0.000693f, -0.008424f, -0.009224f, -0.006173f, 0.006592f, -0.008193f, -0.007021f, -0.000888f, 0.009388f, -0.012701f, -0.002698f, -0.010612f, -0.005144f, -0.003037f, 0.001464f, -0.000956f, -0.007603f, 0.009752f, 0.001668f, 0.008776f, -0.003544f, -0.002225f, -0.010930f, -0.000237f, -0.003831f, -0.004123f, 0.006306f, 0.003542f, -0.001954f, 0.003392f, 0.006978f, -0.001985f, 0.003001f, -0.004993f, -0.002878f, -0.001207f, -0.004705f, 0.004184f, 0.001461f, 0.003186f, -0.007467f, 0.005365f, 0.003093f, 0.012101f, 0.007201f, -0.001980f, -0.007684f, -0.000626f, 0.001680f, 0.000958f, 0.002396f, -0.000354f, -0.002600f, 0.000107f, -0.001765f, 0.000017f, -0.002137f, 0.000767f, -0.002079f, -0.000136f, - 0.002336f, 0.000790f, 0.001208f, -0.001488f, -0.001043f, 0.001108f, 0.001606f, 0.000731f, -0.000234f, 0.000122f, -0.000030f, 0.001005f, -0.023314f, -0.008334f, 0.006682f, -0.006135f, -0.002792f, -0.002578f, 0.003142f, -0.001158f, -0.006162f, 0.009728f, 0.008656f, 0.002927f, -0.001106f, 0.004526f, -0.011973f, -0.001719f, -0.011832f, -0.005920f, 0.008702f, -0.001421f, 0.001541f, -0.001159f, -0.001368f, 0.000233f, 0.018224f, 0.016732f, 0.007446f, 0.008950f, 0.010554f, -0.002001f, -0.001227f, -0.003600f, 0.009312f, -0.000869f, -0.003547f, 0.002661f, -0.005440f, 0.003769f, 0.006701f, -0.003387f, 0.007556f, 0.008590f, 0.016667f, -0.006478f, -0.007874f, 0.007187f, -0.004316f, 0.000287f, 0.003507f, -0.009644f, 0.000577f, -0.005021f, -0.005692f, 0.012898f, 0.007544f, 0.009300f, -0.005291f, -0.006916f, 0.004891f, -0.008059f, 0.005694f, 0.024845f, 0.001396f, 0.001760f, 0.005565f, 0.002481f, 0.002281f, 0.014171f, -0.007555f, -0.001852f, 0.002585f, 0.001905f, -0.007033f, -0.005098f, -0.007179f, -0.003340f, -0.002628f, 0.006555f, -0.001111f, 0.006585f, 0.006672f, -0.006630f, -0.007175f, -0.001776f, - 0.004520f, 0.006357f, -0.007522f, -0.001387f, -0.002240f, -0.005089f, -0.000636f, -0.004815f, 0.001269f, -0.000246f, 0.002609f, -0.001415f, 0.000998f, -0.001817f, -0.000489f, -0.001376f, 0.001143f, -0.006768f, 0.007331f, 0.011906f, -0.005739f, 0.005911f, 0.018647f, 0.006271f, 0.004235f, -0.013050f, 0.010789f, 0.002866f, -0.016862f, 0.007149f, -0.004764f, -0.010082f, 0.004025f, -0.001389f, 0.003877f, 0.009787f, -0.010308f, -0.010770f, -0.004842f, 0.014678f, 0.000368f, 0.007292f, 0.015141f, -0.022569f, -0.018258f, 0.002977f, 0.011085f, -0.008149f, 0.000678f, 0.015089f, 0.003847f, -0.001932f, -0.004574f, 0.018054f, 0.002169f, -0.004376f, 0.002487f, -0.016349f, 0.001823f, -0.009009f, 0.008301f, 0.001476f, 0.008819f, -0.004442f, -0.002255f, 0.004021f, 0.000233f, 0.001182f, 0.000477f, 0.008515f, 0.006807f, -0.009303f, 0.005304f, 0.007539f, -0.012829f, 0.001544f, -0.005799f, 0.002422f, -0.002967f, -0.009871f, 0.000128f, 0.008548f, 0.007378f, 0.016475f, -0.010225f, 0.012761f, -0.008458f, -0.001675f, 0.007525f, -0.008228f, -0.012324f, -0.004423f, 0.000551f, -0.000756f, -0.000658f, -0.001307f, - 0.002406f, 0.005266f, -0.007181f, -0.000071f, 0.003377f, -0.000636f, 0.002896f, -0.005839f, -0.003392f, -0.002303f, -0.004336f, 0.001286f, -0.000961f, -0.003354f, 0.001824f, 0.001937f, -0.002854f, -0.004305f, -0.000256f, -0.000986f, 0.004435f, -0.000202f, -0.000756f, 0.000838f, 0.000932f, -0.000757f, -0.001364f, 0.003022f, 0.000971f, -0.002379f, -0.001240f, -0.001817f, 0.000244f, 0.003093f, 0.000277f, -0.001055f, 0.037600f, 0.016832f, 0.022784f, -0.001859f, -0.006280f, -0.008225f, -0.008214f, 0.004465f, -0.006895f, 0.010469f, -0.001169f, 0.014371f, 0.000890f, 0.007598f, 0.009465f, 0.007290f, 0.006272f, 0.008269f, -0.027898f, -0.008264f, -0.002603f, -0.005893f, -0.005144f, -0.008796f, -0.019865f, 0.000889f, 0.013650f, -0.008393f, 0.008205f, -0.006740f, -0.009901f, -0.007495f, 0.001157f, -0.006325f, -0.002322f, -0.006485f, -0.000424f, 0.016433f, 0.000904f, 0.007388f, 0.010416f, 0.013512f, -0.006319f, 0.003167f, -0.002993f, -0.010424f, 0.011872f, -0.006622f, -0.000452f, -0.010316f, 0.007577f, -0.000096f, 0.000205f, -0.002844f, -0.004771f, 0.003501f, 0.010614f, -0.004432f, 0.005996f, 0.005652f, - 0.004783f, 0.018199f, -0.018268f, -0.007731f, 0.000481f, -0.010073f, -0.013025f, -0.005175f, -0.015949f, 0.002405f, 0.018783f, -0.012924f, -0.006131f, -0.014760f, 0.000993f, -0.004642f, -0.007025f, -0.017304f, 0.010215f, 0.013294f, 0.005298f, 0.009293f, -0.004673f, 0.001503f, -0.003452f, 0.003860f, 0.000205f, 0.009199f, -0.002337f, 0.003965f, -0.000145f, -0.002342f, 0.003243f, 0.002209f, 0.004256f, 0.003544f, -0.000559f, 0.000858f, 0.002349f, 0.000944f, 0.001843f, -0.000142f, -0.001713f, -0.003307f, 0.001698f, 0.000878f, -0.002227f, 0.001649f, 0.001855f, -0.000549f, 0.000836f, 0.002197f, -0.000618f, -0.001961f, -0.000691f, -0.000595f, 0.011549f, 0.016785f, -0.009360f, 0.008785f, -0.007665f, -0.003552f, -0.003123f, -0.020566f, 0.014889f, -0.004281f, -0.002335f, 0.023936f, 0.014696f, 0.016027f, -0.006617f, 0.000698f, 0.002709f, -0.003587f, 0.005169f, -0.012075f, -0.000461f, -0.008238f, 0.009596f, -0.009382f, -0.006660f, -0.000915f, 0.001518f, -0.011605f, 0.002106f, 0.001314f, 0.015202f, 0.000183f, -0.021116f, 0.012155f, 0.011175f, 0.016200f, -0.002711f, 0.004129f, -0.011748f, -0.008679f, - -0.003813f, -0.008425f, 0.003181f, 0.002283f, -0.003321f, -0.001211f, 0.008618f, 0.013729f, -0.018867f, -0.003982f, -0.000168f, -0.007612f, -0.008153f, 0.012423f, -0.010115f, 0.004726f, -0.009933f, -0.012883f, -0.009800f, -0.006336f, 0.004304f, 0.001874f, 0.022971f, -0.003859f, -0.006380f, 0.006956f, -0.007122f, -0.001976f, -0.006343f, 0.006507f, -0.005885f, 0.008369f, -0.004333f, -0.003769f, 0.005537f, 0.013956f, 0.003684f, -0.012993f, -0.000103f, -0.006375f, -0.013418f, 0.003811f, 0.009183f, -0.003056f, 0.001981f, 0.003322f, 0.000274f, -0.001369f, 0.004633f, 0.000154f, -0.005557f, 0.000096f, -0.002127f, -0.000946f, -0.002986f, 0.004456f, -0.001240f, -0.003557f, -0.004071f, 0.000595f, 0.003867f, -0.001771f, -0.000481f, -0.005372f, 0.000300f, 0.001027f, 0.001622f, -0.000931f, -0.004805f, -0.002340f, 0.003816f, -0.001594f, -0.005175f, 0.002055f, -0.028811f, 0.027714f, 0.014773f, -0.016433f, -0.016706f, 0.006884f, 0.021878f, -0.000257f, 0.006368f, 0.025621f, 0.008499f, 0.007754f, -0.004393f, 0.013380f, 0.012101f, 0.014089f, -0.025376f, -0.015485f, -0.015426f, 0.012174f, 0.010379f, 0.013382f, - 0.000559f, -0.015393f, 0.006271f, -0.002294f, 0.006907f, -0.022153f, 0.008498f, 0.013497f, -0.010497f, 0.005862f, 0.010799f, 0.003092f, -0.000410f, 0.002376f, -0.003575f, 0.019477f, 0.013122f, 0.010439f, 0.000303f, 0.006793f, 0.014914f, -0.013355f, -0.007293f, 0.000696f, 0.019747f, 0.012725f, 0.007716f, -0.014910f, 0.000462f, 0.010188f, 0.011755f, -0.004140f, 0.003582f, 0.011597f, 0.014237f, 0.004549f, 0.013157f, 0.005282f, -0.001573f, -0.012205f, -0.000170f, -0.020343f, -0.008434f, -0.009750f, 0.001613f, 0.006731f, -0.011888f, -0.004764f, -0.021630f, 0.009381f, -0.006074f, -0.000145f, 0.011333f, 0.016668f, 0.020034f, 0.002507f, -0.002188f, -0.012483f, -0.003827f, 0.006383f, 0.006781f, -0.013249f, 0.004065f, -0.005963f, 0.004761f, 0.000886f, -0.004572f, 0.000081f, 0.002269f, -0.004207f, 0.001782f, -0.001118f, -0.005115f, -0.002588f, -0.003258f, 0.003149f, 0.003754f, -0.000690f, -0.003013f, 0.002064f, -0.002339f, -0.001626f, -0.004005f, -0.000561f, -0.000942f, -0.004568f, 0.003514f, 0.002847f, 0.003616f, 0.024517f, 0.007478f, -0.003971f, -0.011197f, -0.028701f, -0.014148f, 0.017873f, - -0.006343f, -0.026364f, -0.007224f, -0.004024f, 0.003924f, 0.014870f, 0.022298f, -0.001120f, 0.006476f, -0.004941f, 0.011051f, -0.012318f, -0.013451f, -0.014144f, -0.025610f, 0.013817f, 0.007639f, -0.021091f, 0.000538f, -0.015348f, -0.006051f, 0.013939f, 0.007662f, 0.011414f, -0.003268f, -0.002746f, -0.003770f, 0.024418f, 0.018740f, 0.020182f, -0.009197f, -0.016879f, 0.013401f, -0.002099f, -0.006163f, 0.017419f, 0.002958f, 0.017141f, -0.000649f, 0.009670f, -0.012015f, -0.000426f, 0.008409f, -0.036122f, -0.005588f, 0.001943f, -0.026696f, 0.007091f, -0.006886f, 0.025005f, 0.015711f, -0.015012f, 0.001092f, 0.022846f, -0.002457f, 0.011733f, -0.007717f, 0.015761f, -0.007349f, 0.003261f, -0.006119f, 0.000566f, 0.010798f, -0.014573f, 0.015818f, 0.008349f, 0.009039f, 0.002786f, 0.021059f, -0.008131f, -0.024326f, 0.004374f, 0.016689f, -0.007768f, -0.015149f, -0.010679f, -0.007789f, 0.017555f, 0.000270f, -0.007266f, 0.000619f, 0.000601f, -0.003482f, -0.003149f, 0.000987f, 0.003525f, -0.002046f, -0.002096f, -0.001369f, 0.003906f, -0.002050f, -0.006350f, 0.001725f, -0.007049f, 0.006511f, 0.004483f, - -0.000188f, -0.000559f, 0.001662f, -0.001923f, 0.002827f, 0.000467f, 0.001926f, 0.000570f, 0.000798f, 0.007864f, 0.002578f, -0.003848f, 0.002066f, 0.001087f, 0.003522f, -0.000955f, 0.000786f, -0.058481f, -0.012391f, 0.031395f, -0.025356f, -0.009166f, 0.026636f, 0.010054f, -0.008480f, 0.002829f, -0.022101f, 0.019702f, -0.002529f, -0.035578f, 0.002514f, -0.001867f, 0.013414f, 0.013196f, -0.007109f, -0.027879f, -0.011985f, -0.010652f, 0.000547f, -0.014876f, -0.008215f, -0.018968f, -0.005499f, 0.020639f, -0.017020f, -0.008542f, -0.006580f, -0.011059f, -0.011711f, -0.015843f, 0.010737f, 0.002164f, 0.013366f, 0.002316f, -0.009980f, -0.015362f, -0.015201f, -0.003156f, 0.009998f, 0.014826f, -0.005330f, -0.013593f, 0.014148f, 0.005872f, -0.021390f, -0.023792f, -0.048500f, -0.004336f, -0.015557f, -0.009415f, 0.007085f, 0.007298f, 0.004336f, 0.021684f, -0.002367f, -0.010454f, -0.001413f, -0.011264f, 0.024695f, 0.013109f, -0.004933f, 0.013178f, -0.014068f, 0.006873f, 0.005591f, -0.013724f, -0.006113f, -0.012320f, 0.008622f, 0.006058f, -0.022647f, 0.014757f, 0.022647f, -0.001593f, -0.001228f, -0.023160f, - -0.009117f, 0.010047f, -0.007305f, 0.006597f, 0.022436f, -0.007674f, 0.004818f, 0.002164f, 0.001601f, -0.007273f, 0.001172f, -0.001290f, -0.009593f, -0.005813f, -0.001024f, 0.003216f, 0.000380f, 0.002499f, -0.010009f, 0.001028f, -0.005443f, 0.002352f, -0.005875f, -0.005658f, -0.003536f, -0.000491f, 0.001057f, -0.004369f, 0.001110f, 0.002250f, -0.000781f, 0.000839f, 0.003993f, 0.002191f, -0.008018f, -0.005317f, -0.002650f, 0.000656f, 0.002708f, -0.001426f, 0.002745f, 0.000425f, 0.002295f, -0.001954f, 0.000397f, 0.010068f, 0.039184f, -0.018484f, 0.015130f, -0.009858f, 0.000294f, 0.021899f, -0.006031f, -0.010251f, -0.004855f, -0.002412f, 0.004308f, 0.014787f, 0.051528f, -0.003148f, 0.003485f, 0.013857f, 0.003714f, -0.000089f, -0.023514f, -0.025214f, 0.004241f, 0.003083f, -0.015228f, -0.008301f, -0.003193f, 0.013854f, -0.005866f, 0.002437f, 0.000093f, 0.005876f, -0.005981f, 0.029546f, 0.017003f, -0.014254f, 0.016847f, 0.014568f, -0.017635f, 0.002857f, 0.008122f, 0.005681f, -0.004591f, -0.006417f, 0.025302f, -0.022065f, 0.009652f, 0.027213f, -0.009149f, 0.003136f, 0.018069f, -0.002210f, - 0.015772f, 0.008153f, 0.000675f, 0.008147f, 0.013597f, 0.017823f, 0.011823f, 0.001199f, -0.000226f, -0.012747f, -0.013369f, 0.000252f, 0.001973f, -0.043662f, 0.028783f, -0.006925f, -0.012979f, -0.015344f, -0.031375f, -0.036208f, -0.022899f, 0.004105f, 0.018243f, -0.006774f, 0.002649f, -0.003159f, 0.018133f, -0.006855f, -0.013862f, 0.007885f, 0.004702f, -0.006217f, 0.002630f, 0.011811f, -0.011207f, 0.002080f, -0.014373f, -0.005215f, -0.006200f, 0.003312f, -0.001272f, 0.007382f, 0.005192f, 0.001374f, -0.001687f, 0.003643f, 0.005666f, -0.000359f, -0.010285f, 0.005789f, -0.000073f, 0.008941f, 0.009213f, 0.004139f, -0.003951f, 0.007721f, 0.002184f, -0.001475f, 0.000169f, 0.000250f, -0.006732f, 0.007757f, -0.000291f, -0.005491f, 0.008115f, 0.015118f, -0.002596f, -0.003477f, 0.008310f, -0.003306f, -0.005047f, -0.002249f, 0.007230f, 0.052779f, 0.052520f, -0.001260f, -0.043894f, 0.008765f, 0.008719f, -0.004779f, 0.011221f, 0.006799f, 0.003602f, -0.000264f, -0.007598f, 0.042866f, 0.007678f, -0.006617f, -0.047685f, -0.026454f, 0.011023f, -0.002710f, -0.016701f, -0.028235f, 0.003798f, 0.005070f, - 0.007137f, -0.006857f, -0.031394f, -0.033065f, 0.035933f, 0.034417f, 0.010497f, 0.031628f, -0.026993f, 0.003895f, 0.013897f, -0.005408f, -0.017170f, -0.030344f, -0.015286f, 0.005655f, -0.001450f, -0.014108f, 0.014619f, 0.000526f, 0.014186f, 0.011873f, 0.000653f, -0.032642f, -0.019263f, -0.015221f, -0.002798f, 0.003632f, 0.004207f, -0.005346f, -0.009450f, 0.002513f, 0.005170f, -0.029164f, -0.007550f, 0.005058f, 0.006473f, -0.013107f, -0.036934f, -0.008342f, -0.009391f, 0.027417f, -0.001199f, 0.012475f, -0.012445f, -0.009086f, -0.016614f, -0.018157f, -0.010925f, 0.003219f, -0.001524f, 0.023056f, -0.013700f, 0.004205f, 0.026212f, -0.001591f, 0.013020f, 0.012044f, 0.025459f, 0.005935f, -0.007587f, -0.012869f, -0.011680f, -0.004269f, 0.015331f, 0.002640f, 0.015455f, 0.008544f, -0.001376f, -0.000175f, 0.000611f, 0.001508f, -0.007114f, -0.008485f, -0.000130f, -0.001922f, -0.000995f, 0.002773f, -0.001849f, 0.002223f, -0.010296f, -0.002123f, 0.006068f, -0.000132f, 0.003778f, -0.017122f, -0.002108f, -0.000470f, -0.003553f, 0.003776f, 0.002540f, 0.002451f, 0.002856f, 0.004185f, 0.004253f, 0.004822f, - -0.001691f, -0.007815f, 0.009340f, -0.005957f, 0.022724f, -0.011617f, 0.003843f, -0.008719f, 0.001614f, 0.006151f, -0.014556f, -0.009603f, -0.025863f, -0.028282f, -0.018829f, -0.007175f, -0.001469f, 0.000843f, -0.015895f, -0.014440f, -0.029640f, 0.014305f, -0.029708f, -0.037880f, 0.024372f, -0.022659f, -0.029182f, 0.027138f, 0.004949f, -0.005970f, 0.028790f, 0.016849f, -0.022703f, 0.020940f, -0.057598f, -0.003759f, -0.014947f, -0.006005f, -0.027186f, 0.047363f, 0.021922f, -0.013714f, 0.006733f, 0.015011f, -0.010096f, 0.016559f, 0.000037f, 0.000850f, -0.013713f, 0.016083f, 0.018175f, 0.024982f, -0.039165f, -0.001234f, -0.000493f, 0.011651f, -0.017885f, -0.006619f, -0.018204f, -0.017546f, 0.030720f, 0.010126f, -0.023428f, 0.012068f, -0.014589f, -0.015100f, -0.025148f, -0.045145f, 0.011570f, 0.030020f, 0.001774f, 0.030238f, 0.040648f, -0.002323f, -0.017022f, -0.038671f, 0.002755f, -0.004860f, 0.002207f, -0.009572f, 0.007736f, -0.016937f, 0.036344f, 0.020385f, 0.031752f, 0.006599f, -0.004240f, -0.009643f, 0.012785f, 0.015225f, 0.006519f, -0.002660f, -0.004888f, 0.001535f, 0.016929f, -0.002941f, - 0.006914f, -0.010772f, 0.004375f, -0.017867f, 0.001427f, 0.002315f, -0.008235f, 0.017034f, 0.009466f, -0.004261f, -0.011482f, -0.009653f, -0.003563f, -0.000810f, 0.005089f, -0.011318f, 0.002590f, 0.002133f, -0.001202f, -0.007794f, 0.002612f, -0.017013f, -0.003844f, -0.003969f, -0.005162f, 0.003043f, -0.000707f, -0.033012f, 0.004632f, -0.073339f, -0.048868f, -0.035446f, 0.019293f, 0.036016f, -0.051474f, 0.011757f, 0.036904f, 0.022404f, -0.000282f, 0.013180f, 0.034809f, -0.016119f, -0.001825f, -0.010309f, 0.001262f, -0.022702f, 0.016212f, 0.000091f, 0.002131f, 0.005660f, 0.046579f, -0.002588f, -0.020200f, -0.020153f, 0.011288f, 0.033872f, -0.013535f, -0.034793f, 0.010499f, 0.034376f, 0.020453f, -0.004914f, 0.017054f, 0.011112f, 0.016440f, 0.003356f, 0.013964f, 0.023239f, -0.002687f, -0.039840f, 0.002230f, 0.011966f, -0.036861f, -0.027336f, 0.036544f, 0.028235f, -0.027780f, -0.018609f, 0.009113f, -0.002125f, 0.018052f, 0.043897f, -0.009242f, -0.008791f, 0.008642f, -0.002530f, 0.016591f, 0.007918f, -0.015842f, -0.012889f, -0.005823f, 0.012681f, 0.011997f, -0.011997f, -0.031740f, -0.005894f, - -0.047889f, 0.045302f, 0.007934f, -0.008610f, 0.004589f, 0.018625f, -0.000724f, -0.021411f, 0.008114f, -0.009452f, -0.013469f, 0.010470f, -0.002623f, -0.021190f, -0.034180f, -0.011500f, -0.013784f, 0.028188f, -0.004278f, 0.009133f, 0.005671f, 0.003227f, -0.002416f, -0.002723f, 0.004699f, -0.007887f, 0.001504f, 0.010049f, -0.000978f, -0.005638f, -0.002819f, -0.023728f, -0.006983f, -0.000878f, -0.004140f, -0.017340f, -0.015079f, -0.006688f, -0.003240f, -0.001782f, -0.004750f, -0.001147f, 0.000564f, 0.012636f, 0.004833f, -0.002356f, -0.004949f, 0.001790f, -0.004343f, -0.004131f, 0.008639f, -0.004439f, -0.009698f, -0.003156f, -0.007234f, 0.000679f, -0.008962f, 0.000044f, 0.006416f, 0.001716f, -0.008792f, -0.003055f, -0.028140f, -0.001306f, 0.004994f, -0.034698f, -0.008983f, 0.025956f, 0.033977f, 0.023895f, 0.063305f, 0.038049f, 0.057382f, 0.021317f, 0.015225f, -0.029628f, 0.032275f, -0.010860f, -0.003468f, -0.023724f, -0.015615f, 0.031013f, -0.010005f, 0.070386f, 0.032929f, 0.020299f, -0.003594f, 0.016267f, -0.010902f, -0.032879f, -0.016440f, -0.020406f, 0.015029f, -0.019237f, -0.000242f, -0.020580f, - 0.012251f, 0.028657f, 0.026065f, -0.001687f, 0.037608f, 0.031260f, 0.001681f, -0.010853f, -0.014061f, -0.025594f, -0.008581f, 0.058989f, 0.023099f, 0.067906f, -0.021634f, 0.000390f, -0.002057f, 0.015876f, 0.054720f, 0.018721f, 0.001564f, 0.035079f, 0.040390f, 0.042449f, -0.003572f, -0.024973f, -0.008934f, -0.006839f, -0.006951f, 0.028180f, 0.019461f, 0.026753f, 0.040987f, -0.025287f, 0.061852f, -0.041246f, -0.077294f, -0.011894f, -0.023903f, 0.015928f, 0.037754f, 0.018447f, -0.020640f, -0.002017f, -0.022435f, -0.016882f, -0.010940f, 0.000423f, 0.031311f, 0.005368f, -0.008437f, 0.004997f, 0.002659f, 0.009440f, 0.010228f, 0.006901f, 0.012480f, 0.003460f, 0.007985f, 0.002957f, 0.008826f, 0.000718f, -0.024626f, -0.009473f, 0.000111f, -0.023138f, 0.002952f, -0.024160f, -0.012418f, -0.014583f, -0.013275f, -0.011332f, -0.008051f, -0.003042f, 0.001828f, 0.007223f, 0.026080f, 0.003716f, -0.015801f, 0.007677f, 0.001965f, 0.023444f, -0.003935f, 0.010264f, 0.000275f, 0.000555f, -0.011971f, 0.003198f, 0.037221f, 0.059285f, -0.029283f, -0.024033f, 0.021963f, -0.018500f, -0.002810f, -0.009050f, - 0.008490f, 0.025475f, 0.028608f, 0.040873f, -0.045200f, 0.050551f, -0.018122f, 0.003694f, -0.023308f, 0.020360f, 0.039218f, 0.014814f, 0.007548f, 0.001574f, 0.047675f, 0.010481f, -0.001230f, -0.016820f, -0.006892f, -0.049838f, -0.006247f, -0.024880f, -0.058210f, 0.003732f, -0.003208f, 0.022617f, -0.060646f, -0.013253f, 0.014602f, 0.021216f, 0.051045f, -0.015307f, 0.015072f, 0.026335f, 0.004467f, -0.008452f, 0.014631f, -0.014888f, -0.003191f, -0.077551f, 0.006959f, -0.033835f, -0.037869f, -0.043887f, 0.017440f, -0.069607f, 0.022755f, -0.026915f, -0.034001f, -0.047777f, 0.042230f, 0.044300f, 0.045026f, 0.008222f, 0.008438f, 0.041520f, -0.058530f, -0.006275f, -0.017900f, 0.023313f, -0.069589f, -0.024541f, -0.007008f, 0.021874f, 0.017950f, 0.013864f, 0.028394f, -0.026595f, 0.010521f, -0.032001f, -0.009092f, -0.019377f, -0.007193f, -0.006903f, 0.001068f, -0.030346f, 0.013844f, 0.018287f, -0.003028f, 0.000846f, -0.014435f, -0.005051f, 0.014573f, -0.019736f, -0.000181f, 0.009008f, -0.023649f, 0.010485f, -0.021170f, -0.000164f, 0.013607f, 0.002768f, -0.017317f, -0.011925f, 0.006996f, -0.010157f, - 0.011095f, 0.007236f, 0.012767f, -0.001998f, -0.015140f, 0.028925f, -0.013693f, -0.007389f, -0.018723f, 0.012721f, -0.006226f, 0.001521f, -0.017353f, 0.002022f, -0.021131f, -0.003705f, 0.015897f, -0.005254f, -0.008834f, -0.022701f, 0.002830f, 0.002711f, -0.002732f, -0.029684f, -0.055193f, -0.001055f, -0.019735f, 0.065261f, 0.013570f, 0.046134f, -0.015208f, 0.062996f, -0.039729f, -0.074388f, 0.016666f, 0.012495f, 0.008363f, -0.037039f, -0.042193f, -0.033074f, 0.012209f, -0.033318f, 0.014461f, -0.017737f, 0.049370f, -0.016283f, -0.007622f, 0.035558f, 0.000958f, -0.089060f, -0.037101f, -0.001357f, 0.058429f, -0.006895f, -0.018540f, -0.051149f, 0.008683f, -0.012759f, -0.044038f, -0.052138f, -0.006198f, 0.009324f, -0.018062f, -0.019985f, -0.052168f, 0.033837f, -0.013078f, 0.012019f, -0.026065f, 0.000917f, 0.015242f, 0.009182f, 0.045708f, 0.000222f, -0.015981f, -0.059913f, -0.021229f, 0.028577f, -0.041035f, -0.021090f, 0.014935f, 0.032551f, 0.025426f, 0.065155f, 0.049749f, 0.000650f, 0.037707f, 0.038555f, 0.013045f, 0.001227f, 0.022546f, -0.019711f, 0.098583f, -0.045746f, -0.108063f, 0.028358f, - -0.092013f, -0.003887f, -0.072065f, -0.000839f, 0.087740f, 0.010668f, -0.042086f, 0.013581f, 0.014759f, -0.027740f, -0.022683f, -0.031348f, 0.006535f, -0.009750f, 0.027990f, -0.022647f, 0.018648f, -0.037672f, 0.010238f, -0.001668f, -0.006286f, -0.008897f, 0.025352f, 0.048416f, 0.015106f, 0.019406f, 0.033591f, 0.009841f, -0.033901f, 0.009366f, -0.012677f, 0.022092f, -0.007189f, -0.010987f, -0.001459f, -0.002780f, -0.009230f, -0.028288f, -0.018398f, -0.012823f, -0.001690f, 0.003440f, -0.002171f, -0.018152f, -0.039904f, -0.025404f, 0.005842f, -0.007565f, -0.000835f, -0.015774f, 0.005228f, 0.028154f, 0.011051f, 0.040740f, -0.062061f, -0.042288f, -0.025277f, -0.022607f, 0.025809f, 0.038519f, -0.022405f, 0.002003f, 0.035523f, -0.071290f, 0.005832f, 0.015962f, -0.052717f, 0.027015f, -0.017149f, 0.023762f, 0.009776f, 0.026856f, 0.003583f, -0.035164f, 0.036394f, -0.045645f, -0.009205f, 0.086611f, -0.035182f, 0.031345f, -0.020159f, 0.035303f, 0.033341f, -0.012053f, -0.037652f, 0.040036f, 0.106325f, -0.058539f, 0.015653f, -0.077493f, 0.039494f, 0.022787f, -0.041056f, 0.045538f, 0.004930f, -0.092928f, - 0.013850f, 0.003929f, 0.042739f, -0.011916f, -0.005954f, -0.049114f, -0.046627f, -0.024838f, 0.115842f, -0.018204f, 0.059070f, -0.052000f, 0.039034f, 0.018251f, -0.010090f, -0.040115f, -0.006843f, 0.031925f, 0.065314f, -0.024079f, -0.021292f, -0.007456f, 0.013172f, 0.055836f, -0.013878f, -0.013927f, -0.041460f, 0.012288f, -0.062649f, -0.028657f, 0.045418f, 0.053922f, 0.006532f, -0.005087f, -0.029199f, -0.049041f, -0.140343f, 0.087248f, 0.033743f, 0.049877f, 0.005317f, -0.046331f, 0.050709f, -0.028902f, 0.021643f, 0.029447f, 0.029533f, 0.067248f, -0.000962f, 0.015309f, 0.019052f, -0.008109f, -0.029373f, -0.010354f, 0.049833f, 0.030060f, -0.027465f, -0.006557f, -0.018587f, -0.005327f, 0.023430f, 0.006384f, -0.032196f, -0.021456f, 0.031382f, 0.006801f, -0.009527f, 0.015686f, -0.027182f, -0.017179f, -0.005411f, 0.013166f, 0.022248f, 0.013842f, 0.004509f, 0.016932f, -0.013654f, -0.018762f, 0.003599f, -0.002159f, -0.024375f, 0.002653f, -0.025148f, -0.001277f, -0.015255f, -0.004005f, 0.004295f, -0.013369f, -0.024051f, 0.007896f, -0.058656f, 0.040819f, 0.041118f, -0.080834f, 0.008166f, -0.042724f, - 0.005615f, -0.088914f, 0.089244f, 0.076745f, -0.007524f, -0.040833f, -0.013593f, -0.016664f, 0.043528f, -0.044700f, 0.056028f, -0.074381f, -0.042423f, 0.020602f, 0.026604f, 0.005542f, 0.025707f, 0.069944f, 0.020709f, 0.032034f, 0.009076f, 0.033316f, 0.024438f, -0.016230f, 0.007469f, 0.028170f, -0.001546f, -0.002814f, 0.056665f, 0.024860f, 0.074235f, -0.007115f, 0.042509f, -0.000239f, -0.053504f, 0.054841f, -0.028072f, -0.006528f, 0.017469f, -0.051493f, -0.034140f, 0.019552f, 0.080745f, 0.043551f, 0.029449f, -0.103764f, -0.023642f, -0.072839f, -0.000268f, 0.115752f, 0.076756f, 0.087511f, 0.007299f, -0.085442f, 0.026901f, 0.086144f, 0.018548f, -0.021881f, 0.077317f, 0.008066f, 0.051821f, -0.132707f, -0.109488f, 0.078754f, -0.005304f, -0.035878f, -0.083779f, -0.018559f, -0.031204f, 0.035800f, 0.033783f, 0.039227f, 0.040905f, -0.016909f, 0.013041f, 0.072996f, 0.068036f, 0.070507f, 0.006291f, 0.101401f, 0.051122f, -0.018166f, -0.039790f, 0.000477f, -0.019378f, 0.005900f, 0.052109f, -0.008274f, 0.002721f, 0.037485f, 0.041934f, 0.003876f, 0.000676f, 0.015952f, 0.046419f, 0.016067f, - 0.022033f, 0.031156f, 0.011653f, 0.024222f, -0.000654f, -0.013813f, -0.005458f, -0.005334f, 0.002464f, 0.032225f, -0.011811f, 0.005615f, -0.025902f, 0.039021f, 0.019533f, 0.017006f, 0.000115f, 0.019646f, 0.000604f, 0.066925f, 0.017832f, 0.068710f, -0.018000f, 0.060089f, 0.028231f, 0.008790f, 0.026833f, 0.025790f, 0.030031f, -0.007971f, -0.004750f, 0.041041f, 0.013299f, 0.034506f, -0.076601f, 0.045169f, 0.060434f, 0.004552f, 0.020655f, -0.054669f, 0.042708f, -0.024880f, 0.020485f, 0.001961f, 0.000209f, 0.036111f, -0.011144f, 0.023519f, -0.007531f, -0.043833f, 0.011739f, -0.003013f, 0.049060f, 0.042856f, 0.060999f, 0.020361f, -0.046634f, -0.038473f, 0.039609f, 0.044514f, 0.020607f, 0.003982f, 0.014093f, -0.012064f, -0.038225f, 0.006602f, -0.014141f, 0.054246f, 0.037861f, 0.033149f, 0.042948f, 0.044149f, -0.060757f, 0.067065f, 0.065830f, 0.048372f, -0.032650f, -0.028922f, -0.042236f, 0.058483f, 0.034127f, 0.095945f, -0.058272f, -0.057516f, -0.044575f, -0.084464f, -0.022044f, 0.091737f, 0.014602f, 0.072110f, -0.076610f, -0.081698f, 0.017914f, 0.052328f, -0.071641f, 0.011531f, - -0.057054f, 0.023067f, -0.065861f, -0.004875f, 0.031339f, 0.033471f, -0.059886f, 0.024007f, -0.045552f, -0.090397f, -0.002986f, 0.107896f, 0.055683f, 0.043963f, -0.030023f, -0.076479f, 0.116875f, 0.094964f, 0.026567f, -0.104570f, -0.004099f, -0.024195f, 0.074854f, 0.038735f, 0.046400f, -0.054081f, 0.041047f, -0.023961f, 0.026885f, -0.037247f, 0.013385f, -0.041710f, 0.061148f, -0.011489f, 0.010042f, -0.072369f, 0.021119f, 0.009777f, -0.003413f, -0.015706f, 0.014796f, 0.008344f, 0.007592f, -0.044481f, 0.018966f, 0.046774f, 0.002851f, 0.028447f, 0.023393f, 0.020083f, 0.002990f, 0.009908f, 0.000878f, 0.003323f, 0.001934f, -0.013535f, -0.001746f, 0.015401f, -0.000363f, 0.029907f, 0.024418f, -0.012132f, -0.002698f, 0.014395f, 0.005589f, 0.023433f, -0.042273f, 0.028534f, 0.002831f, -0.000173f, -0.148546f, -0.029126f, -0.004055f, 0.002875f, 0.051340f, -0.136649f, -0.015941f, 0.063406f, -0.101811f, 0.023965f, -0.023345f, 0.119396f, 0.062402f, -0.071356f, 0.017645f, 0.080637f, 0.007926f, -0.030736f, 0.026067f, 0.020075f, 0.010303f, -0.000578f, -0.008093f, 0.007055f, 0.012880f, 0.028207f, - 0.081854f, 0.066527f, 0.071571f, 0.049810f, 0.090171f, 0.044749f, 0.092209f, 0.038782f, 0.081793f, 0.001895f, 0.050768f, 0.046471f, 0.050318f, 0.039275f, -0.003770f, 0.015783f, -0.062902f, -0.036786f, 0.119561f, 0.002219f, -0.047850f, -0.012678f, 0.037510f, 0.063740f, 0.128698f, -0.016684f, -0.070871f, -0.034956f, -0.052242f, 0.074053f, 0.083886f, 0.094694f, 0.029185f, -0.002696f, 0.063607f, -0.107343f, 0.098393f, 0.038001f, -0.051845f, -0.000242f, -0.168086f, 0.004715f, -0.111080f, -0.153383f, -0.038314f, -0.089850f, -0.039256f, 0.175315f, 0.159378f, 0.150533f, -0.117795f, -0.011345f, -0.013352f, 0.118529f, 0.184700f, -0.040389f, -0.051984f, 0.103024f, 0.105191f, 0.091138f, -0.010615f, -0.013812f, -0.050965f, -0.063573f, 0.009518f, -0.022891f, 0.028488f, 0.045191f, 0.038805f, 0.027572f, 0.002806f, 0.018142f, 0.049597f, 0.009248f, 0.000462f, -0.013206f, 0.002990f, 0.004165f, 0.013637f, 0.010965f, 0.010288f, 0.051933f, -0.004269f, -0.029659f, 0.031524f, 0.037959f, 0.008905f, 0.060156f, 0.014258f, 0.029513f, 0.065154f, 0.087639f, 0.063754f, 0.047259f, 0.019033f, 0.009532f, - 0.025569f, 0.060299f, 0.026453f, 0.061785f, 0.045510f, 0.030057f, 0.042832f, 0.016425f, 0.058071f, 0.051244f, 0.041403f, 0.063480f, 0.036314f, 0.012433f, 0.017745f, -0.042081f, 0.106985f, 0.127574f, -0.105477f, -0.098861f, 0.033993f, 0.111390f, 0.003903f, -0.053831f, 0.001482f, 0.029420f, 0.034874f, -0.094156f, 0.035714f, -0.013535f, 0.050235f, -0.052208f, -0.023461f, -0.060989f, 0.064338f, -0.009750f, -0.026800f, -0.057113f, 0.042161f, 0.023066f, -0.008536f, -0.048462f, 0.023293f, 0.019792f, 0.012345f, -0.042976f, -0.004850f, -0.003278f, 0.049532f, -0.037631f, -0.007677f, -0.054493f, -0.012808f, 0.017222f, 0.043662f, -0.056679f, -0.019934f, 0.057854f, 0.051854f, -0.016784f, -0.034499f, -0.001499f, -0.016962f, 0.048078f, -0.026915f, -0.016874f, 0.025210f, 0.016605f, 0.031500f, -0.028440f, 0.009924f, -0.038702f, 0.044519f, 0.049658f, 0.025608f, 0.006569f, -0.038509f, 0.043932f, -0.030663f, 0.068760f, -0.049859f, 0.054963f, -0.086965f, 0.058306f, 0.009084f, -0.006580f, -0.060656f, -0.020002f, 0.021858f, -0.017352f, 0.007698f, -0.016859f, 0.019289f, -0.009277f, 0.021426f, -0.020894f, - -0.024885f, -0.018504f, 0.020530f, -0.000179f, -0.000471f, -0.006263f, -0.012835f, 0.007556f, 0.023856f, -0.013017f, -0.000793f, -0.000351f, 0.005040f, -0.002916f, 0.006006f, -0.005673f, 0.018034f, -0.001349f, 0.022793f, -0.020572f, 0.005733f, -0.010563f, 0.023118f, -0.024416f, 0.022878f, -0.025180f, 0.016202f, 0.004707f, 0.028472f, -0.008293f, 0.027164f, -0.024819f, -0.015386f, -0.006014f, 0.042653f, -0.021794f, 0.033600f, -0.013517f, 0.007134f, 0.001831f, 0.024705f, -0.012138f, 0.014037f, 0.001453f, 0.003222f, -0.004302f, 0.010591f, -0.005303f, -0.010606f, 0.024790f, -0.013220f, 0.001396f, -0.009781f, 0.005605f, -0.008908f, 0.010954f, -0.015278f, 0.018670f, -0.013760f, 0.015090f, -0.019990f, 0.017624f, -0.026258f, 0.025171f, -0.014020f, 0.016293f, -0.017154f, 0.017284f, -0.017078f, 0.017766f, -0.015035f, 0.015905f, -0.020734f, 0.017413f, -0.016842f, 0.017836f, -0.019539f, 0.020589f, -0.018703f, -0.003406f, -0.022972f, 0.102629f, 0.109197f, -0.064247f, -0.038067f, 0.021667f, 0.104285f, 0.064806f, 0.038862f, 0.037395f, -0.016603f, -0.043622f, -0.013203f, 0.024525f, -0.000372f, -0.010260f, - 0.031120f, 0.000563f, 0.021938f, 0.002712f, -0.011652f, -0.039077f, -0.010365f, -0.002262f, 0.002903f, -0.001521f, -0.031753f, 0.035494f, 0.005938f, -0.014248f, -0.000780f, -0.001067f, 0.000524f, 0.022926f, 0.042080f, 0.017967f, 0.004280f, -0.015111f, -0.021738f, -0.005614f, 0.013695f, 0.028224f, 0.037993f, -0.021153f, -0.020890f, 0.004771f, 0.038410f, 0.017344f, 0.008595f, -0.017302f, -0.034788f, 0.029741f, -0.006086f, 0.000872f, 0.002060f, 0.009606f, 0.009220f, -0.004187f, -0.001225f, -0.022671f, 0.003534f, 0.020062f, -0.009464f, 0.012002f, -0.006662f, -0.016144f, 0.010330f, -0.003035f, 0.005614f, -0.001198f, 0.017468f, 0.011850f, -0.025907f, 0.007698f, 0.001299f, -0.047062f, -0.062531f, 0.001833f, 0.003727f, 0.014301f, 0.038177f, 0.004216f, -0.016716f, -0.016389f, 0.015081f, 0.016433f, 0.024948f, 0.016999f, 0.001137f, 0.007275f, -0.002591f, -0.018857f, -0.007775f, 0.002919f, -0.025854f, -0.024779f, 0.016069f, 0.017013f, -0.000315f, 0.019130f, -0.026975f, -0.004875f, -0.001176f, 0.001386f, -0.008268f, 0.004328f, 0.014721f, 0.020330f, 0.009999f, 0.017126f, -0.010706f, -0.021193f, - 0.012559f, 0.002022f, -0.005102f, 0.014548f, 0.008179f, -0.009974f, -0.036067f, -0.135628f, 0.057708f, 0.208633f, 0.192763f, 0.164171f, 0.065770f, -0.156165f, -0.097423f, -0.140413f, -0.156924f, -0.140682f, -0.040724f, 0.030180f, 0.118620f, 0.123159f, 0.147926f, 0.097662f, 0.098885f, 0.002259f, -0.103611f, -0.099330f, -0.122040f, -0.095800f, -0.053039f, -0.003773f, -0.034105f, 0.036973f, 0.045984f, 0.074068f, 0.081724f, 0.082650f, 0.049526f, 0.003995f, 0.022101f, -0.018421f, 0.011920f, -0.056870f, -0.041044f, -0.052606f, -0.085531f, -0.068166f, -0.051947f, -0.036966f, -0.060772f, 0.008290f, 0.104173f, 0.117357f, 0.065770f, 0.122719f, 0.030616f, 0.071543f, 0.037036f, 0.020895f, -0.030749f, -0.065776f, -0.089766f, -0.126464f, -0.096705f, -0.144244f, -0.059525f, -0.064317f, 0.041487f, 0.041242f, 0.120641f, 0.138703f, 0.123800f, 0.109961f, 0.107797f, 0.067196f, 0.008389f, -0.037867f, -0.115057f, -0.072429f, -0.150335f, -0.128463f, -0.178321f, -0.029060f, -0.015875f, 0.043799f, 0.056565f, 0.101526f, 0.119760f, 0.099945f, 0.089515f, 0.066120f, 0.039216f, 0.005341f, -0.033138f, -0.048068f, - -0.064395f, -0.099766f, -0.069866f, -0.086889f, -0.060214f, -0.031122f, -0.008842f, 0.019449f, 0.019211f, 0.094931f, 0.087784f, 0.086706f, 0.067868f, 0.049518f, 0.006008f, 0.030706f, -0.034380f, -0.057328f, -0.044428f, -0.123857f, -0.144077f, -0.028036f, -0.009643f, -0.006466f, 0.070382f, 0.057346f, 0.076805f, 0.053558f, 0.070191f, 0.021166f, 0.018192f, -0.005663f, -0.029647f, -0.038444f, -0.049321f, -0.054930f, -0.033608f, -0.007327f, -0.042621f, -0.022754f, 0.034159f, 0.048386f, 0.032674f, 0.041874f, 0.028803f, 0.020629f, 0.005474f, -0.004080f, -0.014787f, -0.021183f, -0.016184f, -0.026419f, -0.013677f, -0.005446f, -0.009797f, -0.013577f, 0.003016f, 0.009775f, 0.002255f, 0.015043f, 0.019607f, 0.014417f, 0.010424f, 0.008943f, 0.004732f, -0.001571f, -0.009058f, -0.009198f, -0.012828f, -0.009584f, -0.009901f, -0.006430f, -0.005204f, 0.000849f, 0.002469f, 0.004484f, 0.003734f, 0.006228f, 0.006397f, 0.005051f, 0.003827f, 0.003732f, 0.002729f, 0.003296f, 0.000675f, -0.003884f, -0.006169f, -0.003058f, -0.005476f, -0.006305f, -0.005444f, -0.003406f, -0.001496f, 0.002455f, 0.003800f, 0.004397f, - 0.002948f, 0.005692f, 0.003636f, 0.002231f, 0.001240f, 0.000671f, -0.002233f, -0.002421f, -0.002879f, -0.001113f, -0.002197f, -0.001993f, -0.002047f, -0.000316f, -0.000864f, 0.000605f, 0.000474f, 0.001945f, 0.001420f, 0.002364f, 0.001250f, 0.001504f, -0.000205f, -0.000522f, -0.001066f, 0.000587f, -0.001086f, -0.000777f, -0.002032f, -0.000692f, -0.000709f, 0.000915f, 0.000531f, 0.001505f, 0.000561f, 0.000834f, -0.000736f, 0.000100f, -0.000592f, -0.000202f, -0.001258f, 0.000116f, -0.000458f, 0.000522f, -0.000013f, 0.000799f, -0.000239f, 0.000702f, -0.000256f, 0.000440f, -0.000488f, 0.000387f, -0.000462f, 0.000400f} - }, - { - {-0.009644f, -0.009812f, -0.008153f, 0.002275f, -0.004688f, -0.000728f, -0.001357f, 0.004735f, 0.018806f, -0.005015f, 0.001871f, -0.017916f, -0.009823f, 0.005490f, -0.008552f, -0.006631f, -0.002541f, -0.007556f, -0.002032f, 0.015646f, -0.006736f, -0.009985f, 0.016859f, 0.013536f, -0.004795f, -0.003114f, 0.015430f, 0.004417f, 0.005968f, 0.003004f, 0.000731f, -0.003935f, -0.006539f, 0.006146f, -0.004878f, 0.004598f, 0.001637f, 0.001784f, -0.002189f, -0.005292f, -0.004193f, 0.003794f, -0.004823f, -0.007557f, -0.003443f, -0.003367f, -0.009677f, 0.010942f, 0.016851f, -0.009688f, 0.005482f, 0.000488f, -0.003815f, 0.002697f, -0.000445f, 0.000161f, -0.005679f, 0.010461f, -0.006220f, -0.007628f, 0.008660f, 0.002674f, -0.000482f, -0.000954f, 0.004746f, 0.000325f, -0.000164f, -0.002974f, -0.001532f, 0.009196f, -0.013426f, 0.004583f, 0.002436f, -0.003237f, -0.003232f, -0.004656f, -0.006848f, 0.000075f, 0.006550f, 0.006745f, 0.001929f, -0.000106f, 0.001493f, -0.003713f, 0.004866f, -0.001834f, 0.002851f, -0.002062f, -0.001373f, -0.000985f, -0.001252f, -0.000952f, 0.002228f, -0.000084f, 0.000901f, 0.001390f, - 0.000798f, 0.002371f, 0.002932f, -0.000957f, -0.000716f, -0.001305f, -0.000950f, -0.001863f, -0.000591f, -0.001235f, -0.001067f, -0.001895f, -0.000790f, -0.000192f, 0.001152f, -0.000721f, -0.029676f, -0.004668f, -0.010851f, -0.002649f, 0.002386f, -0.008068f, -0.018090f, 0.013273f, -0.004448f, 0.003106f, 0.008864f, -0.002798f, -0.000910f, -0.001083f, 0.004081f, -0.003114f, 0.014923f, -0.000595f, 0.011512f, 0.016906f, -0.020262f, 0.004272f, 0.014079f, 0.000995f, 0.002808f, 0.009771f, 0.018012f, 0.002602f, -0.004046f, 0.009092f, -0.002405f, -0.004667f, 0.004068f, 0.003233f, 0.004025f, -0.005043f, 0.018360f, -0.008441f, 0.004641f, 0.006876f, -0.000072f, -0.000867f, -0.008942f, 0.001488f, -0.010362f, 0.008746f, -0.010584f, -0.008107f, 0.005886f, -0.009849f, 0.006794f, -0.006867f, 0.002865f, -0.005537f, 0.003786f, 0.008019f, 0.015658f, 0.004832f, 0.001792f, 0.007643f, 0.000139f, -0.013484f, 0.001818f, 0.003829f, 0.005169f, -0.003369f, 0.000735f, -0.001831f, 0.002597f, 0.007569f, 0.004576f, 0.010329f, 0.003584f, 0.001399f, -0.006245f, -0.003178f, 0.006102f, 0.004757f, -0.005976f, 0.007231f, - 0.003556f, 0.007905f, -0.002426f, -0.001868f, -0.002432f, 0.000387f, -0.001489f, -0.006300f, -0.001125f, 0.001063f, 0.001095f, 0.004103f, 0.000496f, -0.001195f, -0.001514f, 0.001745f, 0.000916f, -0.003072f, -0.000416f, -0.000214f, 0.000075f, 0.001262f, 0.000390f, -0.001417f, -0.000148f, -0.001341f, -0.010753f, 0.008006f, 0.005256f, 0.001620f, 0.010199f, -0.000541f, 0.005731f, 0.013847f, 0.008612f, 0.018159f, 0.003544f, -0.002673f, -0.018556f, 0.002938f, -0.011363f, -0.003798f, 0.001471f, 0.004206f, -0.007100f, 0.000014f, 0.017920f, -0.009129f, -0.000437f, -0.009115f, 0.004388f, 0.000109f, 0.003516f, 0.007321f, 0.008655f, -0.005398f, 0.006506f, 0.006694f, 0.012982f, 0.000517f, -0.012640f, 0.001256f, 0.013760f, -0.001324f, -0.000805f, -0.001870f, 0.009272f, -0.010709f, 0.000959f, 0.007067f, 0.009281f, 0.011076f, -0.004102f, -0.007213f, -0.000867f, 0.015910f, 0.001546f, 0.005763f, -0.012857f, -0.005754f, 0.003203f, 0.002692f, -0.002143f, 0.008443f, -0.000511f, -0.001722f, 0.004796f, -0.008102f, 0.000590f, -0.001251f, 0.005627f, 0.008551f, -0.012481f, -0.002793f, 0.004145f, 0.008430f, - -0.005297f, -0.005136f, 0.003567f, 0.009986f, -0.000796f, 0.006718f, 0.004839f, 0.006888f, 0.002974f, 0.007682f, 0.011636f, 0.000472f, 0.003328f, -0.003167f, 0.004796f, 0.003382f, -0.002105f, -0.005179f, -0.000882f, -0.003663f, 0.001311f, -0.003347f, 0.001566f, -0.001512f, 0.000916f, -0.002710f, 0.000175f, -0.000243f, 0.000679f, -0.001617f, 0.002681f, -0.002426f, -0.000957f, -0.001069f, -0.001205f, 0.000346f, 0.001560f, 0.001531f, 0.000942f, -0.000708f, -0.000430f, -0.001114f, 0.003590f, 0.000666f, 0.032324f, 0.015578f, 0.012788f, -0.012066f, -0.002043f, -0.016809f, -0.011884f, 0.017901f, 0.001704f, -0.011378f, -0.005188f, 0.003799f, -0.010633f, -0.001010f, 0.018343f, 0.007266f, -0.000672f, 0.005826f, 0.026863f, -0.017862f, 0.004362f, -0.003373f, -0.008574f, 0.015368f, 0.007912f, 0.007962f, -0.005906f, 0.006873f, 0.008931f, -0.002742f, 0.005764f, -0.001826f, -0.007544f, 0.001573f, 0.002960f, -0.001342f, 0.009161f, 0.002226f, -0.003182f, 0.010023f, -0.004489f, -0.004736f, -0.005717f, 0.002811f, 0.003944f, 0.000726f, 0.007302f, 0.000964f, 0.022764f, 0.001489f, 0.000085f, -0.005265f, - -0.004632f, 0.005440f, -0.016770f, 0.000704f, 0.010220f, 0.008047f, -0.009006f, 0.013364f, 0.000329f, 0.005984f, 0.010775f, -0.003016f, 0.008366f, 0.006424f, -0.002830f, -0.009610f, -0.007242f, 0.006051f, 0.015274f, 0.004344f, -0.006489f, -0.003226f, -0.003631f, 0.010458f, -0.008737f, -0.000482f, 0.008722f, 0.010011f, 0.001491f, 0.001281f, -0.002651f, -0.004156f, 0.000292f, -0.000948f, -0.003397f, -0.000700f, -0.001485f, -0.001715f, -0.002583f, -0.001331f, 0.003664f, 0.002438f, -0.000592f, 0.004627f, 0.001478f, 0.001886f, -0.000474f, 0.001598f, -0.000687f, -0.000370f, -0.000062f, 0.000565f, 0.000695f, 0.001322f, 0.002628f, 0.000672f, 0.000418f, -0.000727f, 0.007854f, 0.002008f, 0.021185f, 0.005207f, 0.012667f, -0.000609f, 0.002885f, 0.003500f, 0.003606f, -0.003522f, 0.012963f, -0.005443f, 0.014020f, -0.006854f, -0.005276f, 0.003636f, -0.009082f, -0.002638f, -0.002777f, 0.003921f, 0.005909f, -0.003681f, -0.013339f, 0.006138f, -0.016151f, -0.006552f, -0.002634f, -0.000350f, -0.002417f, 0.003218f, 0.014728f, 0.008283f, 0.001133f, -0.015126f, -0.014431f, 0.000554f, 0.009989f, -0.005140f, - 0.001695f, -0.001801f, -0.006308f, -0.009681f, 0.001171f, 0.006672f, 0.014237f, 0.012770f, -0.001457f, 0.004159f, -0.017468f, 0.006113f, 0.011902f, 0.013405f, -0.001460f, 0.012235f, 0.002788f, 0.017773f, 0.010648f, 0.003479f, 0.008194f, -0.000704f, -0.004422f, -0.003040f, -0.001591f, 0.011202f, -0.004050f, -0.006170f, -0.007527f, 0.011188f, -0.002467f, -0.019346f, 0.004087f, 0.007474f, 0.011122f, 0.014213f, 0.024339f, -0.010010f, -0.008048f, 0.014373f, 0.015311f, 0.011989f, 0.005331f, -0.002403f, -0.002509f, -0.009312f, -0.010309f, -0.002851f, -0.003565f, 0.003251f, -0.000181f, -0.002981f, -0.000177f, -0.005748f, 0.001514f, -0.000695f, 0.003006f, 0.000459f, -0.004199f, -0.000281f, 0.000742f, -0.000659f, -0.000136f, 0.002198f, 0.004225f, 0.004066f, 0.003535f, 0.000957f, 0.001100f, -0.005878f, 0.000563f, 0.004250f, -0.002414f, 0.002375f, 0.000802f, -0.001594f, -0.001123f, -0.000665f, 0.004416f, 0.003167f, 0.000938f, -0.000295f, 0.002567f, 0.000273f, 0.001835f, 0.000976f, -0.001069f, 0.001386f, -0.000515f, -0.000545f, -0.027629f, 0.013225f, 0.019578f, 0.002208f, 0.016361f, 0.001877f, - -0.013938f, -0.001675f, -0.006301f, -0.003849f, 0.015134f, -0.019523f, -0.004973f, 0.006397f, 0.007925f, 0.017058f, -0.003044f, 0.007201f, -0.026852f, -0.014170f, 0.007354f, 0.015800f, -0.010223f, -0.007922f, -0.010986f, -0.014017f, 0.007555f, -0.002003f, 0.000523f, 0.004798f, 0.002874f, 0.005020f, 0.021518f, -0.013109f, 0.020893f, -0.001452f, 0.004581f, 0.004233f, 0.004845f, -0.006504f, 0.007521f, -0.014827f, -0.002373f, -0.008221f, -0.001143f, -0.011095f, 0.013455f, 0.001993f, 0.036576f, 0.000843f, -0.001930f, -0.009475f, 0.001991f, -0.007986f, 0.019302f, -0.011988f, 0.002897f, -0.021483f, 0.016268f, 0.014298f, -0.017138f, 0.010398f, 0.011270f, 0.004221f, -0.009108f, -0.009972f, 0.016323f, 0.003812f, -0.022664f, 0.010748f, -0.010555f, -0.006242f, 0.005606f, -0.006055f, 0.002455f, 0.004367f, 0.006605f, -0.012298f, -0.028817f, 0.003961f, 0.006948f, -0.001188f, -0.005885f, 0.011241f, -0.004580f, -0.004024f, -0.005015f, 0.007384f, -0.009059f, -0.004015f, -0.004979f, -0.004255f, 0.002771f, -0.003882f, 0.005407f, 0.000452f, -0.008010f, 0.005889f, 0.001205f, -0.004579f, 0.000136f, 0.005284f, - 0.002204f, 0.000002f, -0.000352f, -0.001789f, -0.004059f, 0.000112f, 0.001630f, 0.000305f, -0.000053f, 0.002291f, -0.004643f, 0.000295f, 0.001352f, -0.005863f, -0.003872f, -0.004991f, 0.012294f, 0.002392f, -0.000248f, -0.010383f, -0.017466f, 0.006187f, -0.009376f, -0.003770f, 0.016890f, -0.023013f, -0.009600f, -0.016957f, -0.001739f, 0.014546f, -0.001364f, -0.011998f, -0.016668f, -0.018699f, 0.007270f, 0.019777f, -0.005688f, 0.012354f, 0.018582f, -0.005157f, -0.004317f, 0.007278f, 0.010320f, 0.022075f, -0.003230f, 0.012404f, 0.001770f, 0.026245f, 0.019277f, 0.005270f, -0.006218f, 0.002636f, -0.014593f, 0.025476f, 0.005886f, -0.011266f, -0.012524f, 0.014680f, 0.012374f, 0.008915f, 0.006320f, 0.004340f, 0.013151f, -0.005733f, 0.005773f, -0.008762f, 0.001208f, 0.000682f, -0.013311f, -0.017744f, -0.006341f, -0.012545f, 0.007981f, -0.007674f, -0.005736f, -0.019357f, -0.012220f, 0.003662f, -0.006670f, -0.002359f, 0.009214f, 0.019308f, 0.024333f, 0.012644f, 0.010026f, -0.009046f, -0.019954f, 0.000296f, -0.013992f, -0.032183f, 0.000196f, -0.002314f, 0.011899f, 0.008028f, -0.007955f, -0.017961f, - -0.009825f, 0.008598f, -0.000524f, -0.002058f, -0.007511f, 0.003897f, 0.003984f, 0.003168f, -0.002012f, -0.010263f, 0.002043f, 0.001270f, 0.000885f, -0.002378f, -0.001368f, -0.001454f, 0.001156f, -0.005068f, -0.005256f, -0.000620f, 0.000502f, -0.004232f, 0.000238f, -0.000914f, 0.003708f, 0.005041f, -0.005673f, -0.000289f, 0.003882f, -0.000770f, -0.002467f, 0.000845f, 0.000438f, 0.005465f, -0.001874f, 0.003479f, 0.002657f, -0.002489f, -0.002247f, -0.037258f, -0.011265f, 0.001831f, 0.018240f, -0.013211f, 0.008993f, 0.005569f, -0.000593f, 0.026983f, -0.003494f, 0.025378f, -0.014931f, 0.007291f, 0.008242f, 0.000089f, -0.023254f, -0.009904f, -0.008603f, -0.026800f, 0.009194f, -0.006849f, 0.005762f, -0.001903f, 0.009755f, -0.000282f, -0.010275f, 0.005294f, -0.016983f, 0.012365f, 0.007495f, 0.028867f, -0.001130f, 0.000621f, 0.026705f, -0.023768f, 0.020752f, 0.025049f, -0.015737f, 0.016034f, -0.006715f, -0.007921f, -0.013199f, 0.003079f, 0.003142f, 0.017725f, 0.011651f, -0.004923f, -0.007427f, -0.015590f, 0.008447f, 0.009259f, -0.017505f, -0.008188f, 0.016472f, -0.029096f, 0.002726f, -0.022546f, - 0.012593f, 0.000925f, -0.000410f, 0.006421f, -0.007538f, 0.002247f, 0.026546f, -0.011255f, 0.005808f, 0.012598f, 0.008148f, 0.001098f, -0.013996f, 0.005859f, 0.005179f, -0.008472f, -0.022687f, -0.000089f, -0.005190f, -0.018312f, 0.013615f, -0.005240f, 0.005009f, -0.001068f, 0.002576f, 0.005370f, 0.005556f, -0.010400f, 0.002528f, -0.001365f, 0.002288f, -0.001171f, 0.006768f, 0.003018f, -0.001690f, -0.001622f, -0.009809f, -0.000768f, -0.006713f, 0.000787f, 0.001090f, 0.006709f, -0.010380f, 0.003456f, 0.005570f, -0.004326f, -0.006460f, 0.001902f, -0.000964f, -0.004212f, 0.003079f, -0.001237f, -0.004056f, 0.001011f, -0.001398f, -0.005076f, -0.001340f, -0.003443f, -0.006273f, 0.002505f, -0.001951f, 0.000133f, -0.003462f, -0.001169f, -0.003542f, 0.001205f, 0.006620f, -0.001347f, -0.004115f, -0.015335f, 0.044222f, -0.016565f, 0.008702f, 0.006141f, 0.015870f, 0.004752f, 0.009685f, 0.021804f, -0.016858f, -0.010639f, -0.001256f, 0.030406f, -0.011667f, -0.013217f, -0.015042f, 0.007368f, 0.005249f, 0.016550f, -0.034796f, 0.000133f, 0.000875f, -0.002571f, 0.018090f, -0.004556f, 0.013980f, 0.025484f, - -0.018535f, -0.008579f, 0.007451f, -0.014212f, -0.017488f, 0.011646f, -0.016237f, 0.023948f, -0.003994f, -0.025073f, -0.003159f, -0.014486f, 0.008028f, 0.019492f, -0.000253f, 0.009755f, -0.001093f, 0.003619f, 0.023599f, 0.000509f, 0.017151f, 0.006512f, -0.012626f, 0.013070f, 0.011491f, 0.001353f, 0.009672f, 0.033463f, -0.005464f, -0.015370f, 0.008127f, -0.019396f, 0.001623f, 0.031950f, 0.011047f, 0.004851f, -0.006012f, -0.009444f, -0.006083f, -0.011614f, 0.019516f, -0.012975f, -0.003280f, -0.008177f, 0.022128f, -0.040698f, 0.013957f, 0.014028f, 0.024467f, 0.005543f, 0.001967f, 0.021221f, -0.005958f, -0.009517f, -0.012039f, 0.000068f, -0.009997f, -0.001249f, -0.008587f, 0.006803f, 0.000758f, -0.007988f, -0.008062f, -0.007080f, 0.002709f, 0.008154f, 0.006834f, 0.001211f, 0.000593f, -0.003816f, -0.008744f, -0.003190f, -0.002187f, 0.003407f, 0.003822f, -0.001720f, -0.002089f, 0.001496f, -0.005214f, -0.000255f, -0.005059f, -0.002836f, -0.006690f, -0.009373f, -0.002462f, 0.002885f, 0.010233f, 0.001396f, -0.002745f, -0.002952f, 0.004056f, -0.001219f, 0.009807f, 0.004163f, 0.001762f, 0.001126f, - 0.003774f, 0.065045f, 0.019453f, -0.011899f, -0.015779f, -0.013357f, 0.047174f, -0.040678f, 0.003254f, 0.015867f, 0.002371f, -0.022081f, -0.004970f, 0.011004f, -0.002351f, 0.002510f, 0.019565f, -0.020303f, -0.017001f, 0.008280f, 0.025493f, 0.015645f, 0.006579f, -0.012425f, -0.012082f, -0.011698f, -0.013554f, 0.012549f, 0.004999f, 0.018012f, 0.014495f, 0.008185f, -0.019229f, -0.009219f, -0.020487f, -0.004150f, -0.013454f, -0.030998f, -0.005794f, 0.013715f, 0.003031f, -0.014435f, -0.014496f, 0.000263f, 0.007430f, 0.019242f, 0.002408f, 0.009703f, 0.002748f, 0.037273f, -0.032497f, 0.021110f, 0.003917f, -0.033220f, -0.006046f, -0.010099f, -0.008260f, 0.004962f, -0.014566f, 0.008619f, 0.006282f, 0.014693f, -0.018154f, 0.006269f, 0.028853f, 0.013419f, 0.045890f, -0.010425f, -0.001240f, -0.011445f, -0.005884f, 0.001105f, -0.001022f, -0.043751f, 0.019326f, -0.001986f, -0.002667f, 0.011674f, 0.011588f, -0.012522f, -0.018695f, -0.020485f, -0.007680f, 0.014259f, 0.006016f, -0.004913f, -0.012138f, 0.010415f, -0.019011f, 0.009704f, -0.003240f, -0.008726f, -0.010818f, -0.011766f, -0.004335f, -0.004050f, - 0.001672f, -0.005029f, -0.003436f, 0.002197f, -0.003638f, -0.003443f, 0.001827f, -0.009670f, -0.004496f, -0.000870f, -0.003408f, -0.005632f, -0.002610f, -0.009828f, 0.001161f, 0.006971f, 0.009494f, 0.011151f, -0.008475f, -0.010353f, -0.007395f, -0.009387f, 0.000122f, -0.000260f, -0.005842f, -0.006632f, 0.002219f, -0.001098f, 0.006081f, -0.002217f, -0.000713f, 0.004648f, 0.004654f, -0.004209f, -0.021509f, 0.005031f, 0.012129f, -0.000715f, -0.013103f, -0.009547f, -0.028647f, -0.034633f, 0.007426f, -0.015485f, -0.006964f, 0.004818f, 0.000009f, -0.003835f, -0.015041f, -0.007848f, 0.000157f, 0.011844f, 0.013177f, -0.019112f, -0.010523f, 0.011672f, -0.016607f, -0.008529f, -0.027396f, 0.026620f, -0.003169f, 0.023965f, 0.002442f, 0.008864f, 0.026016f, 0.019213f, -0.011070f, 0.005655f, 0.013399f, -0.013910f, -0.005242f, 0.012535f, -0.004374f, -0.030972f, -0.005373f, -0.021751f, 0.032004f, -0.003520f, -0.008044f, -0.018264f, -0.026039f, 0.009297f, 0.005963f, 0.006067f, 0.013397f, 0.000148f, -0.004440f, 0.013479f, 0.003859f, -0.002752f, 0.005177f, -0.007762f, 0.021301f, -0.005079f, 0.013586f, 0.038913f, - 0.009100f, 0.007207f, 0.009542f, 0.014285f, -0.033586f, -0.027628f, 0.010879f, -0.030139f, 0.021204f, -0.004347f, 0.024239f, 0.006192f, 0.046867f, 0.018144f, 0.003585f, -0.013588f, -0.005561f, -0.023971f, -0.001179f, 0.007374f, 0.005101f, 0.005006f, 0.008651f, 0.021131f, -0.008370f, -0.017250f, -0.005526f, -0.004831f, 0.007127f, 0.019189f, 0.007263f, -0.004676f, 0.006012f, 0.005611f, -0.000521f, -0.004470f, -0.010720f, 0.000737f, 0.001743f, -0.005471f, -0.006922f, -0.001412f, -0.011381f, 0.008338f, 0.005226f, -0.005564f, -0.001306f, -0.011766f, -0.005270f, 0.005490f, 0.010839f, -0.005137f, -0.004268f, -0.000159f, -0.008946f, 0.010119f, 0.000062f, 0.007320f, -0.009259f, 0.000099f, -0.009605f, 0.006053f, 0.010767f, -0.011765f, -0.003018f, -0.055159f, -0.039113f, 0.014714f, -0.015737f, -0.031762f, -0.048945f, -0.000868f, 0.003630f, -0.009114f, -0.008022f, 0.046767f, 0.011946f, -0.033237f, 0.006794f, -0.020142f, -0.017460f, -0.016284f, -0.030203f, -0.004590f, 0.002556f, -0.040924f, -0.039304f, -0.014477f, 0.006274f, 0.004236f, 0.023505f, 0.020446f, 0.012280f, -0.009542f, -0.000558f, 0.009573f, - -0.021342f, -0.011391f, -0.007382f, 0.007437f, -0.020045f, -0.011721f, 0.013457f, 0.008676f, -0.000673f, -0.002607f, -0.003842f, 0.011790f, -0.028769f, -0.015863f, -0.014215f, 0.019479f, -0.022310f, 0.015577f, 0.025360f, 0.035359f, -0.002405f, 0.010532f, -0.008346f, -0.016132f, -0.021908f, -0.005371f, 0.021470f, 0.008623f, -0.039149f, 0.002264f, 0.040416f, -0.026327f, 0.001272f, -0.005183f, 0.002130f, 0.010180f, 0.020616f, -0.003706f, 0.006547f, 0.025348f, 0.017035f, 0.011499f, -0.018942f, -0.022212f, 0.016688f, -0.015897f, -0.031214f, -0.029393f, 0.032733f, 0.013075f, 0.018107f, 0.008391f, -0.005093f, -0.005654f, 0.015666f, 0.011711f, 0.003016f, 0.015695f, -0.005907f, -0.019014f, -0.010074f, -0.013034f, 0.005622f, 0.020619f, 0.009819f, 0.003124f, 0.011919f, 0.007269f, 0.011133f, -0.001364f, -0.005493f, 0.007517f, -0.002297f, -0.006865f, -0.006321f, 0.006022f, -0.018008f, 0.004787f, 0.010866f, -0.005616f, 0.013408f, 0.009863f, -0.000541f, -0.000613f, 0.012677f, 0.002383f, -0.002632f, -0.007073f, -0.007530f, 0.003049f, 0.006831f, 0.002381f, 0.005567f, -0.006998f, -0.005427f, 0.003447f, - -0.004574f, 0.003730f, -0.002682f, -0.031738f, 0.017218f, -0.025557f, -0.047427f, 0.009123f, -0.029087f, -0.015835f, 0.054617f, 0.004447f, 0.040741f, 0.037931f, -0.008098f, 0.039915f, 0.053635f, 0.039291f, -0.049146f, -0.005765f, -0.023166f, -0.022131f, -0.014580f, 0.001700f, -0.020604f, 0.043075f, 0.011994f, 0.023974f, -0.020411f, 0.022986f, 0.016548f, 0.006445f, -0.025823f, -0.018892f, 0.039748f, -0.006603f, -0.038155f, -0.001797f, -0.044068f, -0.005507f, 0.011574f, -0.014830f, 0.000444f, -0.034737f, 0.015805f, 0.032992f, 0.016945f, -0.003949f, -0.017919f, -0.005709f, -0.004866f, -0.005236f, -0.016799f, -0.042825f, 0.029021f, 0.017400f, 0.014953f, 0.019296f, -0.025238f, 0.039329f, 0.004411f, -0.010795f, -0.009001f, -0.029862f, -0.013942f, 0.020736f, 0.011911f, 0.033780f, -0.003942f, -0.036856f, -0.066568f, -0.003044f, -0.000838f, 0.001122f, -0.024217f, -0.032484f, -0.006708f, 0.022943f, -0.011983f, -0.012616f, 0.008438f, -0.002095f, 0.033294f, -0.005745f, -0.030221f, -0.009806f, 0.030998f, 0.002906f, 0.005651f, -0.029554f, -0.011119f, -0.004829f, 0.012313f, 0.017235f, -0.008335f, 0.006609f, - 0.000981f, 0.013157f, 0.007716f, -0.000277f, 0.005188f, 0.017328f, 0.003742f, 0.000692f, -0.005678f, 0.002836f, 0.010579f, 0.000636f, 0.005271f, 0.019723f, 0.002534f, -0.005408f, -0.014064f, -0.000483f, 0.009846f, -0.008552f, 0.004936f, -0.003252f, -0.003149f, -0.005319f, -0.008506f, -0.005203f, -0.000040f, 0.012939f, 0.009054f, -0.011420f, -0.023245f, -0.005672f, 0.008474f, 0.004288f, 0.002973f, 0.002386f, 0.071121f, 0.043930f, -0.005751f, -0.041665f, 0.009212f, 0.019917f, 0.012369f, 0.029371f, 0.045504f, -0.020408f, 0.004260f, -0.040748f, 0.011932f, 0.002736f, -0.015034f, 0.071807f, 0.027983f, 0.061878f, 0.026334f, 0.015529f, -0.053877f, 0.000256f, 0.030899f, 0.004948f, -0.028431f, 0.011662f, -0.043749f, -0.017879f, 0.003579f, 0.012758f, -0.012733f, -0.009202f, 0.010129f, 0.007235f, 0.003725f, 0.038621f, 0.024889f, 0.005857f, -0.015178f, 0.026411f, -0.017043f, -0.013212f, -0.025304f, -0.009200f, 0.034202f, -0.053818f, -0.000301f, 0.023276f, -0.026038f, -0.008958f, 0.010642f, 0.008371f, 0.049651f, -0.003444f, -0.000046f, -0.023551f, 0.048553f, -0.022019f, 0.006572f, 0.004426f, - 0.033773f, -0.008381f, -0.011512f, 0.031047f, -0.052935f, 0.013304f, 0.005619f, -0.022778f, 0.043223f, -0.054032f, -0.006282f, -0.018485f, -0.035365f, -0.018579f, -0.002693f, 0.014567f, 0.034056f, 0.054722f, 0.027498f, 0.035941f, 0.056209f, -0.023320f, 0.010756f, 0.013367f, -0.023328f, 0.031568f, 0.001121f, -0.043321f, 0.022864f, 0.011174f, -0.015147f, 0.000834f, 0.033426f, 0.024255f, 0.007822f, 0.018999f, 0.006319f, 0.005757f, 0.018560f, -0.003896f, 0.008158f, 0.015500f, -0.003476f, 0.002896f, -0.002500f, -0.001567f, 0.011858f, 0.001604f, 0.001668f, -0.010631f, -0.005484f, -0.007567f, -0.013657f, 0.002415f, -0.007345f, -0.023214f, 0.009099f, 0.012880f, -0.004230f, -0.000898f, 0.006488f, -0.008462f, 0.000157f, 0.023165f, -0.003184f, -0.007335f, -0.014649f, -0.068805f, 0.019361f, 0.003165f, 0.082990f, 0.018414f, 0.015919f, -0.002726f, 0.040662f, 0.010404f, -0.060170f, -0.009775f, 0.065134f, -0.019683f, -0.013289f, 0.004961f, -0.004139f, 0.000956f, -0.011464f, 0.066928f, 0.077060f, -0.041803f, 0.018938f, 0.020112f, 0.011519f, 0.021239f, -0.033487f, -0.047230f, 0.036192f, 0.009284f, - -0.025537f, -0.045202f, -0.013132f, -0.015756f, 0.041051f, 0.032726f, 0.018957f, -0.038398f, 0.020999f, -0.017007f, 0.013462f, 0.001613f, 0.017738f, 0.037800f, 0.009054f, -0.086684f, -0.026165f, 0.015106f, -0.034274f, 0.009772f, 0.036664f, 0.011546f, 0.063709f, -0.021758f, -0.095305f, -0.002950f, -0.037913f, 0.032457f, 0.028959f, -0.011183f, -0.020181f, 0.028713f, -0.045729f, -0.008982f, -0.024665f, 0.020837f, 0.029944f, 0.024664f, 0.027816f, -0.021519f, -0.038772f, -0.116489f, -0.055218f, -0.068165f, 0.010687f, -0.046497f, -0.022057f, -0.010193f, -0.050125f, 0.025969f, -0.090281f, 0.027183f, -0.064925f, -0.048017f, 0.046324f, 0.053737f, -0.016816f, -0.003216f, 0.029630f, 0.037563f, -0.053025f, 0.000118f, 0.008651f, -0.008678f, 0.009313f, 0.027423f, -0.003688f, 0.011509f, -0.002469f, 0.010022f, -0.023505f, -0.013420f, -0.010768f, -0.016582f, -0.003445f, 0.021184f, 0.009189f, 0.018932f, 0.000645f, -0.022512f, -0.019461f, 0.002124f, 0.011605f, -0.005673f, 0.012322f, 0.011714f, 0.031247f, 0.001765f, 0.010640f, 0.002074f, 0.007312f, -0.015198f, -0.004419f, 0.004354f, -0.011428f, -0.000849f, - -0.005353f, -0.000126f, 0.005613f, 0.031318f, -0.003244f, -0.020970f, -0.021808f, 0.000595f, -0.002141f, -0.033350f, -0.021012f, 0.015151f, -0.023438f, -0.000141f, -0.001164f, -0.088443f, -0.014010f, 0.060556f, -0.071526f, 0.008157f, 0.025612f, 0.001993f, 0.017733f, -0.004022f, -0.056784f, -0.003396f, 0.029769f, 0.011571f, 0.044736f, 0.032144f, -0.048767f, -0.050648f, -0.007618f, -0.021136f, -0.008079f, -0.084319f, 0.031371f, 0.035363f, 0.059290f, 0.028665f, 0.053925f, -0.022191f, 0.006863f, 0.057493f, -0.018327f, 0.062461f, 0.016393f, 0.033723f, 0.010331f, -0.014089f, 0.029609f, -0.035587f, 0.001259f, 0.078622f, -0.060424f, 0.007003f, -0.078415f, -0.033597f, -0.056521f, -0.036603f, -0.010296f, 0.005606f, -0.018884f, -0.057857f, -0.011188f, -0.097090f, 0.110936f, 0.040614f, 0.000227f, -0.013538f, -0.027341f, 0.007737f, -0.049420f, 0.010628f, -0.073840f, 0.003258f, 0.003378f, 0.018009f, 0.046728f, 0.069417f, 0.002012f, -0.112137f, -0.052575f, 0.050380f, -0.025097f, -0.021075f, -0.027818f, -0.013466f, 0.055889f, 0.013353f, -0.031756f, 0.025265f, -0.052905f, 0.010894f, -0.010175f, -0.021667f, - -0.053366f, -0.028378f, 0.033510f, -0.014247f, -0.013011f, 0.019899f, -0.019887f, -0.004355f, 0.033421f, -0.037349f, -0.026631f, -0.009584f, -0.008204f, 0.043954f, 0.019611f, 0.013331f, 0.024910f, 0.011714f, -0.004080f, 0.021383f, -0.000368f, 0.016250f, 0.020420f, 0.033716f, -0.012218f, 0.001817f, -0.003391f, 0.025466f, 0.035695f, 0.015314f, -0.008325f, -0.000377f, -0.010544f, -0.023560f, 0.045682f, -0.011053f, 0.023711f, -0.011100f, 0.007559f, -0.011894f, -0.009909f, 0.014018f, 0.024811f, 0.001230f, -0.008122f, -0.004393f, 0.021763f, -0.045601f, 0.032655f, 0.049625f, 0.019961f, -0.024496f, -0.029732f, 0.013567f, -0.038745f, 0.061967f, 0.053858f, 0.078869f, -0.055975f, -0.071676f, -0.016515f, -0.002897f, -0.034461f, 0.045847f, 0.058326f, -0.043569f, 0.000989f, -0.076686f, -0.021131f, -0.037000f, -0.066953f, 0.020237f, 0.057294f, 0.032744f, -0.043145f, -0.018447f, 0.006282f, 0.036572f, 0.006754f, -0.004018f, 0.015302f, -0.005549f, -0.018075f, -0.062277f, -0.040304f, 0.014459f, -0.004639f, -0.034460f, 0.037087f, 0.030782f, 0.021478f, -0.063716f, -0.055901f, 0.052601f, 0.033567f, 0.038780f, - -0.039619f, -0.105314f, -0.018625f, 0.042555f, 0.044525f, -0.011914f, 0.106272f, -0.014334f, 0.106817f, -0.160333f, -0.196243f, -0.082291f, -0.117843f, 0.000145f, 0.047283f, 0.023134f, 0.129469f, -0.015856f, -0.007459f, 0.022683f, -0.024746f, -0.102652f, -0.089399f, -0.101787f, 0.081263f, 0.064546f, -0.023987f, -0.008071f, -0.167251f, 0.045571f, -0.001336f, -0.076322f, 0.031992f, 0.046811f, 0.075119f, 0.056991f, 0.027747f, -0.006472f, -0.049165f, 0.000186f, 0.003237f, -0.015301f, -0.020747f, 0.058001f, 0.037301f, 0.021763f, 0.061191f, -0.047926f, 0.011831f, -0.014402f, -0.028192f, 0.036505f, -0.005282f, -0.067513f, 0.000200f, 0.019457f, -0.023082f, 0.029964f, -0.011975f, 0.006963f, -0.014019f, 0.071956f, 0.057911f, 0.066542f, -0.056759f, -0.014500f, 0.070992f, 0.050586f, -0.049419f, -0.032404f, -0.049800f, -0.031204f, 0.041610f, 0.045130f, -0.015915f, -0.006331f, 0.078994f, 0.001703f, 0.007749f, -0.011944f, 0.014469f, 0.011898f, -0.002204f, -0.040429f, -0.009880f, -0.009710f, 0.012687f, 0.022788f, -0.076371f, 0.066680f, 0.050691f, 0.020907f, 0.062773f, -0.036818f, 0.023138f, -0.103867f, - -0.050228f, 0.027417f, 0.038407f, 0.017709f, 0.013442f, 0.013017f, 0.026937f, -0.012542f, 0.118325f, 0.010758f, 0.073714f, 0.021254f, -0.035460f, 0.090227f, -0.012182f, 0.035495f, 0.001963f, 0.032407f, -0.003309f, -0.001834f, 0.019901f, 0.045337f, 0.013294f, 0.033153f, 0.002443f, -0.006697f, 0.071280f, 0.008218f, -0.014863f, 0.001349f, -0.005455f, -0.035690f, -0.010100f, 0.020173f, 0.013391f, -0.080145f, -0.019453f, 0.010284f, 0.018741f, 0.084092f, 0.068583f, -0.082863f, -0.045572f, 0.007016f, -0.018193f, 0.092603f, 0.009210f, 0.085430f, -0.059834f, 0.043099f, 0.008854f, 0.004918f, 0.039803f, 0.087812f, 0.057067f, 0.011896f, 0.077680f, 0.030652f, -0.036254f, -0.077895f, 0.068702f, -0.062071f, 0.041630f, -0.081808f, 0.000565f, -0.129864f, 0.135227f, -0.033155f, 0.004851f, -0.090851f, 0.082165f, -0.031555f, 0.026139f, -0.066582f, 0.079379f, -0.041011f, -0.037047f, -0.026806f, -0.049598f, 0.015769f, -0.027707f, 0.023913f, -0.025671f, 0.043685f, -0.048422f, 0.043775f, -0.050986f, 0.028528f, -0.059730f, 0.048244f, -0.020504f, 0.053518f, -0.018365f, 0.028227f, -0.022415f, 0.018354f, - -0.025595f, 0.001326f, -0.027986f, 0.032664f, 0.013403f, 0.009544f, -0.011030f, 0.003532f, -0.022291f, 0.017775f, -0.022901f, 0.041129f, -0.033461f, -0.039702f, -0.017861f, 0.016686f, -0.047430f, 0.037272f, -0.011533f, 0.020690f, -0.013307f, 0.011991f, -0.021676f, 0.010754f, -0.011059f, 0.012790f, 0.015845f, -0.002885f, -0.131190f, -0.031648f, -0.010966f, 0.014670f, 0.010850f, -0.080165f, -0.047959f, 0.074263f, -0.029244f, 0.028017f, -0.033237f, 0.008161f, 0.091299f, 0.149437f, 0.009524f, -0.004256f, 0.073801f, 0.033526f, 0.030144f, 0.092956f, 0.001350f, 0.056705f, 0.066797f, 0.065875f, -0.026085f, 0.029104f, 0.057680f, 0.082327f, 0.065828f, 0.101012f, 0.055793f, 0.128697f, 0.134765f, 0.098973f, 0.107349f, 0.074715f, -0.008630f, 0.037197f, 0.018582f, -0.026767f, -0.028165f, 0.022417f, 0.062504f, 0.015568f, 0.002403f, 0.000860f, 0.030665f, 0.095038f, 0.072479f, 0.158790f, 0.031332f, -0.080552f, 0.032235f, 0.002850f, 0.032990f, -0.040748f, 0.062240f, -0.112965f, -0.147717f, 0.042498f, 0.147805f, 0.065770f, 0.029270f, -0.182326f, 0.000752f, 0.071152f, 0.110663f, 0.150395f, - -0.063613f, 0.010605f, -0.257173f, -0.168003f, 0.068416f, 0.097667f, -0.143307f, -0.120645f, -0.076319f, 0.141941f, 0.093527f, -0.166535f, -0.217143f, -0.042394f, 0.088250f, -0.102316f, 0.049318f, -0.014379f, -0.037636f, -0.054540f, 0.007691f, 0.023863f, 0.036489f, -0.004934f, -0.089840f, -0.076058f, 0.009578f, -0.022554f, 0.037705f, 0.006799f, -0.009295f, -0.032456f, -0.022558f, 0.015913f, -0.001930f, -0.072891f, -0.037487f, -0.054711f, -0.029104f, 0.012032f, -0.028661f, -0.019300f, -0.066668f, -0.086973f, -0.122209f, -0.120286f, -0.102973f, -0.085677f, -0.096502f, -0.094095f, -0.073197f, -0.099301f, -0.107196f, -0.089300f, -0.102914f, -0.064501f, -0.017434f, -0.056898f, -0.085747f, -0.054666f, 0.003399f, -0.028847f, -0.016416f, -0.017901f, 0.045641f, 0.050568f, 0.002490f, 0.024267f, 0.025549f, 0.017008f, 0.015033f, 0.003072f, 0.011986f, 0.011193f, 0.011088f, 0.008306f, 0.012930f, 0.004720f, 0.010544f, 0.004792f, 0.004038f, -0.000578f, 0.002719f, -0.024109f, -0.004479f, -0.047824f, 0.122498f, 0.139468f, -0.157131f, -0.064066f, 0.059445f, -0.042831f, 0.029382f, -0.056399f, 0.051469f, -0.047634f, - 0.011501f, 0.000729f, -0.023678f, 0.012718f, 0.002418f, -0.014084f, -0.011315f, -0.037933f, -0.010585f, 0.009232f, 0.004465f, -0.038673f, 0.037213f, -0.035418f, -0.012762f, -0.030622f, 0.003307f, -0.029283f, 0.060913f, -0.000712f, 0.015880f, -0.015888f, 0.015813f, -0.016932f, 0.017092f, 0.037974f, 0.050523f, -0.013247f, 0.016702f, 0.019328f, 0.044268f, -0.027358f, 0.028313f, -0.024346f, 0.053226f, -0.013671f, -0.031051f, 0.017943f, -0.013979f, -0.015744f, 0.005505f, -0.004223f, 0.022411f, -0.011777f, -0.031351f, -0.029238f, 0.003906f, 0.006300f, -0.054125f, 0.016777f, -0.009102f, -0.004772f, 0.008331f, -0.014483f, -0.010012f, 0.006010f, -0.009487f, 0.007948f, -0.029711f, 0.034238f, -0.096385f, 0.050940f, -0.041733f, 0.064506f, -0.043925f, 0.057831f, -0.001867f, 0.031709f, 0.016843f, 0.025914f, 0.010388f, 0.004902f, 0.009741f, -0.001356f, -0.041454f, -0.007709f, 0.000568f, -0.015550f, -0.008926f, -0.007789f, -0.005667f, 0.003001f, -0.016677f, -0.000486f, 0.004332f, -0.000668f, -0.026466f, 0.027681f, -0.005941f, 0.015195f, -0.028153f, 0.013774f, -0.018004f, 0.011921f, -0.020806f, 0.023142f, - -0.029777f, 0.041057f, -0.009247f, 0.006601f, -0.043029f, 0.029777f, -0.003758f, 0.021999f, -0.041060f, 0.011148f, -0.018273f, 0.007367f, -0.009976f, 0.005069f, -0.027831f, 0.014201f, -0.007327f, -0.014545f, -0.000550f, 0.033558f, -0.038476f, 0.003883f, -0.016519f, 0.020452f, -0.027840f, 0.025773f, -0.022925f, 0.008192f, -0.017278f, 0.020267f, -0.009649f, 0.011857f, -0.010592f, 0.013099f, -0.017430f, 0.010155f, -0.009736f, -0.001120f, -0.004839f, 0.008706f, -0.005928f, 0.004657f, 0.000282f, 0.006576f, -0.008180f, 0.003194f, 0.001068f, -0.003730f, 0.005238f, -0.004924f, 0.002817f, -0.007017f, 0.005937f, -0.007590f, 0.004283f, -0.005659f, 0.005091f, -0.004131f, 0.004397f, -0.005582f, 0.007118f, -0.007018f, 0.006192f, -0.006572f, 0.007466f, -0.005704f, 0.007518f, -0.007503f, 0.008830f, -0.009279f, 0.008039f, -0.009588f, 0.007827f, -0.007631f, 0.009254f, -0.010723f, 0.009790f, -0.009276f, 0.008661f, -0.011899f, 0.009564f, -0.011536f, 0.010119f, -0.008610f, 0.009300f, -0.008730f, 0.007922f, -0.009230f, 0.008298f, -0.010222f, 0.006001f, -0.025080f, 0.118192f, 0.071979f, -0.039204f, -0.044697f, - -0.004105f, 0.147285f, 0.061285f, 0.020831f, 0.040552f, -0.035453f, -0.045181f, 0.012763f, 0.028400f, 0.007669f, 0.002441f, -0.015438f, -0.012349f, 0.014069f, 0.013971f, 0.034474f, 0.015104f, -0.018224f, -0.008270f, -0.008887f, -0.018734f, 0.000039f, 0.003162f, 0.009370f, 0.011495f, 0.000608f, -0.005050f, 0.013924f, -0.039585f, -0.014742f, 0.017462f, 0.025448f, 0.031128f, -0.017306f, -0.010316f, -0.018412f, 0.031851f, 0.022370f, -0.006127f, 0.010428f, -0.036984f, -0.031657f, 0.029401f, 0.023208f, 0.007166f, -0.055644f, -0.028817f, 0.002594f, 0.009266f, 0.037115f, 0.026273f, -0.003831f, 0.010783f, 0.013386f, -0.017521f, 0.016297f, 0.017313f, -0.004816f, -0.010694f, 0.010624f, -0.018739f, 0.002074f, -0.003214f, -0.012812f, -0.020061f, 0.028157f, 0.005689f, 0.006496f, 0.038339f, 0.046968f, 0.016522f, 0.038078f, 0.035346f, -0.005236f, -0.009520f, -0.010277f, -0.006784f, 0.015081f, 0.024138f, -0.009006f, 0.007463f, -0.021285f, -0.007818f, -0.000708f, 0.005205f, -0.011442f, -0.014029f, 0.014947f, 0.027971f, 0.012437f, 0.007822f, 0.012061f, -0.013318f, 0.001474f, 0.013374f, 0.002987f, - -0.004059f, 0.003739f, -0.001247f, -0.015854f, 0.033207f, 0.011182f, -0.026329f, -0.024591f, 0.010210f, -0.004543f, 0.026244f, 0.014227f, -0.003167f, 0.010171f, 0.003531f, -0.004963f, -0.001013f, -0.007099f, 0.007848f, 0.012412f, 0.002073f, -0.002682f, -0.010130f, 0.009327f, -0.001812f, -0.008229f, -0.000081f, -0.042329f, -0.117243f, 0.040698f, 0.215229f, 0.169472f, 0.162035f, 0.051980f, -0.150869f, -0.090296f, -0.133757f, -0.133927f, -0.122293f, -0.042513f, 0.065778f, 0.085064f, 0.133490f, 0.119798f, 0.071974f, 0.012239f, 0.011672f, -0.057772f, -0.091638f, -0.130898f, -0.050473f, -0.035440f, 0.011704f, -0.007256f, 0.066438f, 0.045050f, 0.019041f, 0.089044f, 0.049865f, 0.038187f, -0.007820f, 0.033522f, -0.060431f, -0.045390f, -0.037698f, -0.043839f, -0.057968f, -0.034773f, -0.023160f, -0.058787f, -0.040805f, 0.015765f, 0.086635f, 0.083801f, 0.095002f, 0.074773f, 0.108629f, 0.018920f, 0.027789f, -0.072134f, -0.053535f, -0.045759f, -0.108438f, -0.107838f, -0.096899f, -0.045682f, -0.056801f, 0.013410f, 0.041989f, 0.060608f, 0.121579f, 0.119566f, 0.114317f, 0.102685f, 0.089748f, 0.019263f, - -0.052818f, -0.085898f, -0.153609f, -0.131861f, -0.096258f, -0.131066f, -0.060894f, -0.027314f, 0.005747f, 0.128733f, 0.100820f, 0.148071f, 0.146182f, 0.106878f, 0.029869f, -0.029486f, -0.043756f, -0.050657f, -0.045247f, -0.087101f, -0.107819f, -0.075279f, -0.051483f, -0.045464f, 0.005691f, 0.030293f, 0.048149f, 0.041513f, 0.086671f, 0.094789f, 0.071609f, 0.056976f, 0.009497f, -0.020064f, -0.040914f, -0.066913f, -0.057499f, -0.040810f, -0.064214f, -0.087014f, -0.009209f, 0.004979f, -0.014326f, 0.074865f, 0.098884f, 0.063220f, 0.055584f, 0.004064f, 0.015710f, -0.010394f, -0.017418f, -0.043356f, -0.050828f, -0.033487f, -0.037992f, 0.005276f, -0.015163f, 0.004757f, 0.000752f, 0.033964f, 0.018366f, 0.017442f, 0.031917f, 0.032384f, 0.000066f, -0.008760f, -0.023149f, -0.023330f, -0.006579f, -0.005450f, -0.011168f, -0.011301f, 0.002221f, 0.002543f, -0.002726f, 0.005332f, 0.006174f, 0.005459f, 0.001728f, 0.020788f, 0.007756f, -0.000795f, 0.003304f, -0.001157f, -0.007619f, -0.008024f, -0.009150f, -0.010962f, -0.009642f, -0.003098f, -0.001659f, 0.000593f, 0.009120f, 0.011786f, 0.009153f, 0.008666f, - 0.004575f, 0.000796f, 0.000129f, -0.001505f, -0.008751f, -0.005238f, -0.000063f, -0.005654f, -0.008047f, -0.004232f, -0.000937f, 0.003642f, 0.002586f, 0.000078f, 0.002202f, 0.005842f, 0.004179f, 0.002587f, 0.005848f, 0.002813f, -0.000372f, -0.002669f, -0.004484f, -0.003717f, -0.003771f, -0.003153f, -0.002229f, -0.001708f, -0.000148f, 0.000423f, -0.000021f, 0.001010f, 0.002163f, 0.002000f, 0.003230f, 0.004389f, 0.002239f, 0.000585f, 0.001188f, -0.000814f, -0.001935f, -0.003047f, -0.003388f, -0.003122f, -0.002446f, -0.001224f, 0.000087f, 0.000121f, 0.001737f, 0.002216f, 0.001338f, 0.001576f, 0.002942f, 0.001900f, 0.000389f, -0.000839f, -0.000650f, -0.000702f, -0.001590f, -0.002273f, -0.001188f, -0.000621f, -0.000009f, 0.000233f, 0.000586f, 0.000390f, 0.000636f, 0.000275f, 0.000296f, -0.000015f, 0.000218f, -0.000063f, 0.000108f, -0.000133f, 0.000123f}, - {-0.006005f, -0.008016f, -0.011238f, 0.003637f, -0.005367f, -0.011574f, -0.007015f, 0.004914f, -0.014075f, -0.008174f, -0.017267f, 0.005844f, 0.008065f, 0.009719f, 0.005674f, -0.006368f, 0.013507f, -0.009321f, 0.002921f, 0.000037f, -0.001667f, -0.009836f, -0.004674f, -0.010794f, 0.000654f, -0.004726f, 0.006151f, 0.003673f, -0.004794f, -0.001849f, -0.000910f, -0.009926f, -0.000163f, -0.002392f, 0.004546f, -0.000411f, 0.009003f, -0.003357f, 0.011328f, -0.005039f, 0.000383f, 0.001547f, -0.007856f, 0.005390f, -0.002244f, -0.003346f, 0.001156f, -0.002428f, 0.004482f, -0.017206f, 0.008100f, 0.009984f, 0.001666f, 0.005573f, 0.003347f, -0.007747f, -0.000818f, -0.008387f, 0.011299f, -0.003171f, -0.006773f, 0.006477f, -0.010055f, 0.000220f, 0.004089f, -0.011813f, 0.001510f, -0.002935f, -0.004297f, 0.003777f, 0.000978f, 0.000854f, -0.005379f, -0.003705f, -0.018536f, -0.002468f, 0.004117f, -0.003160f, 0.000984f, 0.002166f, 0.010002f, 0.008342f, 0.000570f, 0.002688f, 0.001266f, -0.001692f, -0.001316f, -0.002577f, -0.001261f, -0.000868f, -0.001837f, -0.001779f, -0.000012f, 0.001754f, 0.001267f, 0.001168f, - -0.002820f, -0.000054f, -0.000035f, -0.000853f, -0.000140f, 0.000652f, -0.000353f, 0.000066f, -0.001330f, -0.001136f, -0.001181f, -0.000087f, -0.001104f, 0.001705f, 0.002247f, 0.002303f, -0.026554f, -0.015972f, 0.002954f, -0.008633f, 0.001645f, -0.008907f, -0.015255f, -0.010169f, 0.017318f, 0.010068f, -0.002684f, 0.011718f, 0.002760f, 0.002871f, 0.003289f, -0.005697f, -0.001550f, 0.009521f, -0.007680f, 0.004316f, 0.006952f, -0.007455f, -0.011772f, 0.005378f, -0.009624f, 0.001056f, 0.005509f, 0.014114f, -0.003190f, -0.006829f, -0.005967f, 0.002185f, 0.007680f, -0.010457f, -0.000092f, 0.008572f, 0.003377f, 0.000887f, -0.000574f, -0.000822f, 0.011150f, -0.000444f, 0.010214f, 0.006699f, -0.002603f, 0.006674f, -0.002364f, -0.000629f, -0.001053f, -0.018680f, 0.006449f, 0.010526f, -0.006114f, -0.003501f, 0.002560f, 0.002848f, 0.002984f, 0.001624f, -0.001027f, -0.002277f, 0.000618f, -0.004719f, 0.012762f, -0.005755f, 0.001472f, 0.006912f, 0.005531f, -0.004596f, 0.005030f, 0.001567f, 0.003271f, 0.006980f, 0.006170f, -0.009298f, 0.009581f, 0.010604f, -0.003624f, 0.000149f, -0.000688f, 0.006913f, - -0.008518f, -0.004457f, 0.001852f, 0.001182f, 0.000311f, 0.000425f, -0.001824f, -0.002893f, 0.001697f, -0.001387f, -0.000743f, 0.000459f, 0.002423f, -0.001844f, -0.000439f, 0.000017f, -0.003348f, 0.001100f, -0.001990f, -0.002088f, -0.001616f, 0.001208f, 0.000168f, -0.001000f, -0.002005f, 0.000433f, -0.010525f, 0.013459f, 0.008808f, 0.020823f, -0.003454f, 0.002244f, 0.006378f, -0.010105f, -0.002096f, 0.004046f, -0.004176f, -0.013727f, -0.000813f, 0.001498f, 0.009227f, -0.011083f, -0.027115f, -0.021878f, -0.013483f, 0.005237f, 0.012899f, -0.012958f, 0.007306f, -0.006343f, 0.009968f, 0.007765f, 0.006758f, 0.011967f, 0.006659f, -0.009342f, -0.008640f, 0.001645f, 0.006393f, -0.000471f, 0.000551f, 0.016732f, -0.000125f, 0.002931f, 0.008326f, 0.008803f, 0.001463f, 0.000271f, 0.020667f, -0.001426f, -0.007754f, -0.002314f, 0.004700f, 0.006047f, -0.004001f, 0.011128f, 0.002185f, 0.005984f, -0.007943f, -0.007022f, -0.002708f, -0.004635f, 0.002697f, -0.003672f, 0.012103f, -0.013940f, -0.012458f, 0.015118f, -0.001578f, -0.000610f, -0.017544f, 0.005476f, -0.008506f, 0.009492f, -0.007297f, -0.019416f, - -0.000888f, 0.010022f, -0.008318f, 0.012948f, -0.007771f, 0.005974f, 0.012081f, -0.003396f, 0.005057f, 0.012176f, -0.000790f, -0.008955f, 0.000757f, 0.005958f, 0.002758f, -0.004325f, 0.008379f, 0.000575f, 0.004421f, 0.001681f, 0.001208f, 0.003188f, 0.000580f, -0.001246f, -0.000083f, 0.000458f, 0.001286f, -0.003362f, -0.001713f, -0.001745f, 0.003222f, 0.000406f, 0.003284f, 0.003429f, -0.003166f, 0.000798f, 0.000838f, -0.001812f, -0.001353f, -0.000635f, 0.000624f, -0.001642f, 0.000684f, -0.001717f, 0.032401f, 0.007630f, 0.008645f, 0.003707f, -0.007395f, 0.015547f, -0.007348f, -0.004405f, 0.019791f, -0.001491f, 0.015919f, -0.001681f, -0.018177f, 0.006432f, -0.006157f, 0.020066f, 0.010580f, -0.001402f, -0.017952f, -0.012568f, 0.016615f, 0.019684f, -0.022964f, 0.011513f, 0.009229f, 0.006921f, -0.001487f, 0.002229f, 0.001933f, -0.001747f, 0.022772f, -0.001037f, -0.003885f, -0.006278f, -0.007620f, -0.009744f, -0.003199f, -0.000522f, -0.013101f, -0.004674f, 0.003435f, -0.009141f, 0.000520f, 0.000522f, 0.013630f, -0.005112f, 0.000438f, 0.006331f, 0.000549f, 0.013015f, 0.005888f, 0.013532f, - 0.006704f, 0.004118f, -0.014305f, 0.001501f, -0.010597f, -0.009922f, 0.002383f, 0.013800f, -0.000529f, 0.011851f, -0.004960f, -0.008969f, -0.002072f, 0.000564f, 0.003499f, 0.008135f, -0.003754f, -0.000080f, -0.004444f, 0.004542f, 0.003122f, -0.011681f, 0.002281f, 0.002416f, 0.001559f, -0.003294f, 0.012224f, -0.001305f, -0.002379f, 0.001300f, 0.005740f, 0.002508f, -0.004005f, -0.001307f, -0.001619f, -0.002947f, 0.002406f, -0.003521f, 0.005769f, -0.003487f, -0.000680f, 0.000690f, -0.002719f, -0.000793f, 0.003208f, -0.003784f, -0.000857f, -0.004073f, 0.001583f, 0.001686f, 0.003273f, -0.004448f, 0.000885f, -0.001828f, 0.002248f, -0.001527f, -0.005307f, -0.001720f, 0.009139f, 0.006404f, 0.007349f, 0.020836f, 0.010902f, -0.009043f, -0.008085f, -0.022427f, -0.001457f, -0.000499f, -0.011968f, 0.004549f, 0.017997f, 0.002181f, -0.014180f, 0.013167f, 0.012512f, -0.001305f, 0.005002f, 0.012681f, 0.003005f, -0.011523f, -0.001779f, 0.026868f, 0.013217f, 0.002778f, -0.017726f, -0.006346f, 0.016169f, 0.005562f, -0.002416f, 0.009104f, 0.008140f, 0.008524f, -0.000069f, 0.016676f, -0.000152f, -0.002141f, - 0.004202f, -0.008287f, -0.010857f, -0.000551f, 0.001836f, 0.006198f, 0.003404f, -0.010147f, 0.010301f, 0.018080f, 0.009280f, -0.000500f, 0.013427f, -0.015294f, 0.008719f, -0.009114f, 0.009580f, -0.002558f, -0.011006f, -0.000564f, -0.014337f, -0.023470f, -0.008569f, -0.009330f, -0.001148f, -0.000105f, -0.012290f, 0.002377f, -0.003780f, 0.007121f, 0.004698f, 0.008435f, -0.001352f, 0.003391f, -0.011835f, 0.002044f, 0.001868f, 0.016479f, -0.006375f, -0.000526f, -0.005730f, 0.003475f, 0.014820f, 0.007613f, -0.008617f, -0.013779f, 0.004347f, -0.005516f, -0.001896f, 0.007160f, -0.001021f, 0.002401f, 0.001678f, -0.008209f, 0.000384f, -0.006266f, 0.001772f, -0.005953f, -0.004011f, -0.002175f, -0.000257f, -0.000809f, 0.001074f, -0.003817f, -0.000404f, -0.001292f, -0.003045f, -0.002574f, 0.000906f, -0.000678f, -0.001583f, 0.000396f, 0.001402f, 0.004550f, -0.001625f, 0.002657f, -0.001983f, -0.004605f, 0.003395f, -0.005038f, 0.004821f, -0.000468f, -0.003254f, -0.000563f, 0.001600f, 0.003527f, -0.002624f, -0.000359f, 0.000751f, -0.000904f, -0.021971f, -0.014517f, 0.031068f, -0.006791f, -0.006824f, 0.001834f, - -0.001095f, 0.033325f, -0.009744f, -0.017964f, 0.000434f, -0.017721f, 0.004416f, 0.014154f, 0.015199f, 0.004819f, -0.030926f, 0.025431f, -0.020013f, 0.010644f, -0.013683f, -0.010383f, -0.007662f, 0.012705f, 0.013642f, -0.020446f, 0.001615f, 0.008951f, -0.006355f, 0.004113f, 0.006001f, -0.007381f, 0.000941f, -0.016836f, -0.011330f, -0.025994f, 0.015397f, -0.003622f, 0.026215f, -0.012199f, 0.005686f, 0.017526f, -0.004380f, -0.005184f, -0.007757f, 0.020084f, 0.014647f, -0.024623f, 0.007024f, -0.013919f, -0.004685f, -0.005396f, -0.013844f, 0.008330f, 0.004403f, 0.021717f, 0.015267f, -0.027240f, -0.004474f, -0.011691f, 0.015920f, 0.005559f, 0.001365f, -0.015887f, 0.002377f, -0.001657f, 0.013378f, -0.002220f, 0.001670f, -0.018276f, -0.000423f, 0.013003f, -0.011983f, 0.002025f, -0.003785f, -0.003556f, -0.009686f, 0.001962f, -0.001280f, 0.023039f, 0.010148f, 0.010544f, -0.004221f, -0.002560f, -0.004006f, -0.006261f, -0.003370f, 0.005148f, -0.007052f, -0.002232f, -0.006917f, 0.005236f, 0.004384f, -0.003751f, -0.002120f, 0.004868f, -0.006512f, 0.003235f, 0.000986f, -0.001742f, -0.002072f, 0.001752f, - -0.000185f, -0.000585f, -0.001252f, 0.004255f, -0.006281f, 0.000840f, 0.000563f, 0.003186f, 0.003438f, 0.003447f, -0.003188f, 0.000946f, -0.002250f, 0.004602f, 0.001263f, 0.001093f, 0.003365f, 0.007581f, -0.008352f, 0.000572f, -0.017608f, -0.002201f, -0.020319f, 0.003181f, -0.005090f, 0.011665f, -0.000821f, 0.009898f, -0.013917f, -0.026201f, 0.005562f, 0.017635f, 0.002305f, -0.002122f, 0.013754f, 0.009260f, -0.021426f, -0.000338f, -0.008075f, 0.027135f, -0.001201f, 0.003166f, 0.002138f, 0.000286f, -0.000842f, -0.009725f, 0.021508f, -0.001818f, -0.030467f, -0.005713f, 0.018480f, -0.011890f, 0.003093f, -0.000475f, 0.002482f, -0.003805f, 0.002956f, -0.005595f, 0.007300f, -0.011678f, 0.011026f, 0.015457f, -0.012091f, -0.003075f, -0.007150f, -0.021210f, 0.008516f, -0.015054f, 0.013134f, -0.013230f, -0.022881f, -0.006244f, 0.013633f, -0.004238f, -0.008159f, 0.009114f, 0.012610f, 0.007215f, 0.013819f, 0.023615f, 0.019033f, -0.001210f, 0.003727f, 0.003235f, -0.012635f, 0.002431f, -0.013212f, -0.014410f, 0.007903f, -0.010988f, 0.003612f, -0.000634f, 0.008331f, 0.008452f, -0.010917f, 0.012741f, - -0.003448f, -0.005198f, -0.002312f, 0.008966f, -0.001609f, -0.008241f, -0.005597f, -0.011679f, 0.013413f, -0.006691f, -0.001718f, 0.002327f, -0.000515f, -0.004934f, -0.004180f, 0.000922f, 0.001813f, 0.000609f, -0.002297f, 0.003112f, 0.002315f, -0.002606f, 0.000285f, 0.002013f, 0.001262f, -0.001577f, 0.000008f, -0.002126f, 0.000887f, -0.003576f, -0.003269f, 0.002066f, 0.001081f, 0.004479f, 0.004924f, 0.000446f, 0.003404f, 0.000073f, -0.000190f, -0.029937f, -0.025104f, 0.014655f, 0.026827f, 0.000046f, -0.001588f, 0.005167f, -0.012900f, -0.006203f, -0.031006f, -0.016460f, -0.008785f, -0.000246f, -0.022553f, 0.032299f, 0.006411f, 0.017992f, -0.020561f, -0.024494f, -0.018454f, -0.007152f, 0.004910f, -0.027814f, -0.012469f, 0.012924f, -0.005524f, -0.033842f, -0.011488f, 0.004586f, 0.000357f, 0.021027f, 0.007064f, -0.006584f, -0.016062f, 0.020000f, -0.011601f, -0.001153f, 0.015060f, 0.004470f, -0.016404f, -0.008409f, -0.001277f, -0.027403f, 0.006901f, 0.021330f, -0.009284f, -0.011755f, 0.003106f, -0.013863f, -0.005128f, 0.002771f, -0.008848f, -0.006746f, 0.007222f, -0.010330f, -0.021874f, 0.010829f, - -0.012476f, -0.016293f, -0.022415f, -0.011185f, 0.002228f, -0.008929f, 0.003719f, 0.027588f, 0.015565f, -0.003330f, 0.026273f, 0.026716f, -0.011561f, 0.003743f, 0.007409f, -0.013796f, -0.008978f, -0.029252f, 0.003016f, -0.009345f, -0.023681f, -0.000201f, 0.012468f, 0.022076f, 0.013562f, 0.006511f, 0.002460f, -0.019861f, -0.002495f, -0.004496f, 0.005217f, -0.007482f, -0.000871f, 0.000516f, -0.000285f, 0.004845f, 0.000930f, -0.001750f, 0.004276f, -0.001715f, -0.006273f, 0.005107f, -0.004205f, -0.005573f, 0.000857f, 0.002128f, 0.001889f, 0.000507f, 0.006113f, -0.000561f, 0.003913f, 0.002354f, 0.000468f, 0.001298f, -0.000035f, -0.004689f, 0.001072f, -0.006470f, 0.001518f, -0.010373f, -0.002598f, -0.000395f, -0.006881f, -0.008115f, -0.001072f, -0.008022f, -0.001505f, -0.001660f, -0.009225f, -0.019087f, 0.048610f, -0.001923f, 0.029812f, -0.015002f, -0.042527f, 0.012143f, 0.003699f, -0.001690f, -0.019918f, -0.001963f, -0.013107f, 0.033697f, 0.024724f, 0.022049f, 0.016167f, -0.026439f, -0.000119f, 0.003620f, 0.023502f, -0.040133f, -0.004516f, -0.009833f, -0.011689f, 0.006013f, -0.013182f, 0.005139f, - 0.008971f, 0.006632f, 0.007176f, 0.009288f, -0.002757f, -0.003959f, -0.019479f, -0.004658f, -0.002949f, 0.019151f, 0.000029f, -0.017551f, -0.004096f, 0.020841f, -0.002400f, 0.012122f, 0.015616f, -0.011310f, -0.006661f, -0.025852f, -0.014996f, 0.050574f, 0.013349f, 0.022503f, 0.012121f, 0.002926f, 0.001926f, -0.032061f, 0.019023f, 0.003000f, 0.005600f, 0.016362f, 0.017872f, 0.027788f, -0.031969f, -0.013214f, -0.017732f, -0.002245f, 0.004459f, -0.004227f, -0.008945f, -0.005252f, -0.026809f, -0.033720f, -0.021878f, -0.031602f, -0.004082f, -0.020655f, -0.035363f, -0.014956f, 0.011519f, 0.019383f, -0.007351f, -0.030260f, -0.001054f, -0.004569f, 0.007189f, -0.008319f, 0.001969f, 0.017397f, 0.000823f, -0.001275f, -0.001058f, 0.002217f, 0.003083f, -0.005137f, -0.004600f, -0.012158f, -0.013610f, 0.007266f, -0.003719f, 0.006503f, 0.005902f, -0.002214f, 0.004027f, 0.005365f, 0.009821f, 0.006957f, -0.004237f, 0.002160f, 0.012510f, 0.002412f, -0.012603f, -0.010433f, -0.005678f, -0.002628f, 0.000975f, -0.004433f, 0.007254f, 0.007984f, -0.001894f, 0.012045f, 0.001612f, -0.003347f, -0.002556f, 0.002808f, - -0.006954f, 0.065253f, 0.014782f, -0.009429f, -0.013535f, 0.002088f, -0.020936f, -0.040937f, 0.030141f, 0.000128f, 0.019404f, -0.014665f, 0.014043f, 0.033503f, -0.003298f, 0.003738f, -0.008421f, 0.029162f, 0.024572f, 0.009528f, -0.039497f, 0.002861f, 0.005835f, 0.024424f, 0.035563f, -0.010490f, -0.007252f, -0.004698f, 0.009552f, 0.012694f, 0.010575f, -0.017971f, 0.008238f, -0.020715f, 0.015875f, 0.021166f, -0.010091f, -0.020951f, 0.013255f, -0.022798f, -0.020838f, -0.000870f, 0.006082f, 0.029715f, 0.003610f, -0.004066f, 0.025335f, -0.004690f, 0.022760f, 0.042019f, 0.021082f, 0.000485f, -0.026655f, -0.002532f, -0.015344f, -0.012449f, 0.026866f, 0.010496f, -0.027031f, -0.000309f, -0.020659f, -0.005236f, 0.035610f, 0.016376f, 0.005213f, 0.015246f, 0.021458f, 0.011122f, -0.028669f, 0.014799f, 0.023966f, 0.008218f, -0.019584f, 0.008096f, 0.002301f, 0.004115f, -0.015319f, 0.023679f, -0.006490f, -0.005677f, 0.028484f, 0.030176f, 0.004474f, 0.008597f, 0.032820f, 0.001942f, 0.016217f, -0.011487f, -0.000324f, 0.018905f, 0.010971f, -0.008351f, 0.009779f, 0.017067f, -0.004589f, 0.000155f, - 0.021765f, 0.004508f, 0.009284f, -0.006414f, -0.010832f, -0.003276f, 0.006102f, 0.003181f, 0.005038f, 0.005162f, -0.003517f, -0.003373f, -0.002785f, 0.001702f, 0.006556f, 0.007902f, -0.005244f, -0.001562f, 0.013589f, 0.002017f, 0.018206f, -0.003234f, 0.004993f, -0.002432f, 0.002375f, 0.008214f, 0.005046f, 0.000700f, -0.000073f, -0.007653f, -0.005344f, -0.003851f, -0.008169f, 0.010496f, 0.009434f, -0.015857f, -0.000821f, -0.020259f, -0.047679f, 0.016467f, -0.019004f, 0.005272f, 0.001670f, 0.033408f, -0.023035f, -0.020362f, -0.008571f, -0.009321f, -0.012323f, 0.024672f, -0.021890f, -0.030885f, 0.009211f, -0.057710f, 0.001672f, -0.010882f, -0.024426f, 0.031020f, -0.002010f, -0.001853f, 0.013039f, -0.012321f, 0.009794f, -0.003142f, -0.034482f, -0.037641f, -0.000398f, 0.007919f, 0.022027f, 0.010625f, -0.002534f, -0.003994f, -0.021694f, -0.010294f, 0.021737f, -0.034060f, 0.046930f, 0.027856f, 0.006252f, 0.034688f, -0.023200f, -0.009965f, -0.021242f, -0.021735f, -0.009407f, 0.015818f, 0.044316f, 0.000357f, -0.022932f, -0.003897f, 0.002137f, -0.002520f, -0.002398f, -0.014131f, 0.011931f, 0.010937f, - 0.029866f, -0.000598f, 0.033772f, 0.017369f, 0.009261f, -0.000898f, 0.007183f, -0.050537f, 0.026594f, -0.006480f, -0.029570f, 0.021023f, -0.000054f, 0.027690f, 0.012287f, -0.046844f, 0.036271f, 0.028276f, -0.024509f, 0.039340f, 0.015137f, 0.029373f, 0.011643f, -0.004163f, -0.001670f, -0.001308f, -0.005543f, -0.010377f, -0.003189f, 0.004283f, -0.010339f, -0.015754f, 0.000115f, -0.010304f, -0.018452f, -0.011078f, -0.013827f, 0.008672f, -0.008510f, 0.010682f, 0.002850f, 0.010900f, 0.005166f, -0.001286f, -0.005903f, 0.001813f, 0.001021f, -0.000909f, 0.001506f, -0.003324f, -0.007672f, 0.003614f, -0.000725f, 0.004427f, 0.004842f, 0.000130f, 0.004089f, 0.001851f, 0.007069f, 0.006029f, -0.011123f, -0.006725f, -0.009977f, -0.018613f, -0.013080f, -0.089538f, -0.006682f, 0.052576f, -0.009548f, 0.001255f, 0.046386f, -0.011050f, 0.000713f, 0.005319f, 0.012495f, -0.014224f, 0.012464f, -0.005111f, -0.015263f, 0.014561f, 0.017714f, -0.052481f, 0.006311f, -0.046746f, -0.001112f, -0.024386f, -0.026076f, -0.006097f, -0.007743f, -0.025814f, 0.012892f, 0.003858f, 0.016224f, 0.021595f, -0.031520f, 0.039460f, - 0.002875f, -0.037615f, 0.003183f, -0.026080f, -0.012876f, -0.028027f, -0.025076f, -0.011232f, 0.026506f, -0.023099f, 0.012682f, 0.026355f, -0.015918f, -0.028863f, -0.026191f, -0.038900f, -0.041471f, -0.024777f, -0.011746f, 0.002873f, -0.006201f, 0.011086f, 0.007954f, -0.025014f, -0.001727f, 0.027348f, 0.015994f, -0.041336f, 0.016153f, -0.003493f, -0.011342f, -0.038334f, 0.025685f, -0.014003f, 0.035422f, 0.044336f, 0.001230f, 0.042146f, -0.023353f, 0.024277f, -0.018373f, 0.026132f, 0.033832f, 0.002525f, -0.044421f, -0.001782f, -0.060642f, 0.019242f, 0.013185f, 0.023687f, 0.011476f, -0.024200f, -0.020640f, -0.000806f, -0.013833f, 0.013308f, -0.014970f, -0.000930f, -0.000906f, -0.015339f, -0.011660f, 0.009832f, -0.005826f, -0.017303f, -0.001588f, 0.004841f, 0.012602f, 0.006333f, 0.027314f, -0.003253f, 0.002314f, -0.008548f, 0.019160f, -0.003131f, -0.004142f, 0.016377f, -0.000919f, 0.002089f, 0.004003f, 0.022219f, -0.003637f, -0.009643f, 0.002352f, 0.015209f, 0.014782f, -0.015320f, -0.001445f, 0.009895f, -0.017243f, 0.009198f, -0.002783f, 0.011905f, 0.000731f, -0.015116f, -0.008173f, 0.006730f, - 0.007708f, 0.009137f, 0.006972f, -0.042471f, 0.034337f, -0.080985f, -0.004769f, -0.007767f, -0.006733f, 0.007456f, -0.046444f, 0.003197f, -0.009131f, -0.004032f, 0.021239f, 0.008286f, 0.024709f, -0.019130f, 0.017496f, -0.009166f, -0.041249f, -0.016700f, -0.030267f, -0.018908f, 0.020021f, -0.036119f, 0.004765f, -0.013421f, -0.027258f, -0.004938f, 0.026751f, -0.035906f, -0.034419f, 0.014052f, 0.020776f, -0.001222f, -0.016246f, 0.019267f, 0.020495f, 0.024946f, 0.021622f, 0.008872f, 0.029575f, 0.034898f, -0.018700f, 0.005181f, -0.016479f, 0.043800f, -0.003475f, -0.030406f, 0.036667f, 0.015990f, 0.008878f, -0.017436f, -0.022996f, 0.005336f, 0.014018f, 0.013949f, -0.001143f, -0.019155f, 0.014606f, -0.022296f, 0.000729f, -0.022003f, 0.067846f, 0.010398f, -0.019387f, 0.055588f, -0.006722f, 0.016964f, -0.014330f, 0.027890f, 0.041649f, -0.025876f, 0.039792f, 0.042071f, 0.055102f, 0.042183f, 0.004038f, 0.031312f, -0.024497f, -0.004916f, 0.005997f, -0.013691f, 0.024379f, 0.001029f, -0.001477f, -0.002488f, -0.006986f, 0.011772f, 0.006063f, 0.033274f, -0.010846f, 0.012255f, -0.007250f, 0.000148f, - 0.006365f, 0.009768f, -0.013968f, 0.005120f, 0.014038f, -0.006123f, -0.015689f, -0.003123f, -0.025219f, 0.008694f, 0.007963f, 0.006800f, -0.006590f, 0.004130f, 0.013361f, 0.007435f, -0.003130f, 0.012695f, 0.005809f, -0.008361f, -0.004151f, -0.002716f, 0.020923f, 0.027066f, 0.014516f, 0.006218f, 0.004962f, 0.009236f, 0.016198f, -0.010818f, -0.004252f, 0.007250f, -0.001609f, 0.001454f, 0.007526f, -0.006448f, 0.083699f, 0.021520f, -0.013938f, -0.012414f, 0.019660f, 0.005352f, 0.008540f, -0.002180f, -0.033061f, 0.027851f, -0.075838f, 0.008209f, 0.017000f, -0.003481f, -0.013632f, -0.029290f, -0.013126f, 0.003393f, 0.022850f, 0.034432f, -0.020155f, -0.044400f, -0.035547f, -0.005177f, 0.001592f, -0.026207f, 0.053989f, -0.025143f, -0.016144f, 0.022097f, -0.007283f, 0.003909f, -0.004551f, 0.046017f, 0.007960f, -0.046299f, 0.018574f, 0.005781f, 0.032248f, -0.011496f, 0.003724f, -0.019190f, 0.016149f, 0.006970f, 0.040582f, -0.009898f, 0.018454f, 0.019061f, -0.024121f, -0.026941f, 0.002167f, 0.024419f, -0.047218f, -0.056206f, -0.016275f, -0.023119f, -0.002785f, -0.008202f, 0.005830f, 0.012677f, - -0.011140f, 0.001872f, -0.064589f, -0.055118f, 0.044034f, 0.046474f, -0.055917f, -0.043204f, -0.053810f, -0.028333f, -0.022145f, 0.027972f, -0.029274f, -0.052152f, 0.001758f, 0.002212f, -0.031656f, -0.006827f, 0.045614f, -0.006880f, 0.002746f, 0.014563f, -0.000244f, 0.002564f, -0.001782f, -0.016101f, -0.019718f, -0.001105f, -0.005443f, 0.013031f, -0.001890f, -0.001287f, -0.014221f, 0.007208f, -0.022118f, -0.000555f, 0.007032f, 0.007382f, 0.010943f, 0.012135f, 0.002462f, 0.006864f, -0.004767f, 0.001129f, -0.011170f, 0.004116f, 0.001342f, -0.012854f, 0.013355f, 0.013141f, -0.020465f, 0.001265f, 0.015267f, 0.012445f, 0.023490f, -0.004839f, -0.026909f, 0.007528f, 0.009028f, -0.013368f, 0.008773f, -0.014881f, -0.006842f, -0.002302f, -0.004548f, -0.012632f, 0.004753f, -0.046245f, -0.005856f, -0.011040f, 0.013789f, -0.021796f, -0.006166f, -0.072008f, 0.063772f, 0.041303f, -0.007110f, 0.087908f, -0.008775f, -0.047878f, -0.004591f, 0.019907f, -0.029882f, -0.039002f, -0.008394f, -0.026549f, -0.001405f, 0.007688f, -0.040440f, 0.059379f, 0.001837f, 0.006600f, -0.037313f, -0.010478f, 0.003880f, -0.010385f, - 0.009362f, 0.013717f, 0.048498f, 0.008959f, -0.002603f, 0.039543f, 0.032303f, -0.011230f, 0.019009f, -0.024557f, 0.006894f, 0.022245f, 0.021265f, 0.055240f, -0.054451f, 0.033678f, 0.100713f, 0.001012f, 0.016456f, 0.034776f, 0.003851f, 0.007147f, 0.016198f, 0.012845f, -0.033777f, -0.039858f, -0.014684f, 0.032592f, 0.009546f, -0.041422f, -0.022683f, -0.001520f, -0.020120f, 0.037417f, 0.003334f, 0.028974f, -0.063717f, -0.039107f, 0.018492f, 0.043983f, 0.026675f, 0.017920f, 0.060459f, 0.035689f, -0.025479f, 0.042032f, -0.031471f, -0.006052f, -0.004572f, 0.023788f, -0.004991f, -0.025662f, 0.022546f, 0.010193f, 0.002115f, -0.029472f, 0.020623f, -0.000091f, 0.000361f, -0.012947f, 0.017380f, -0.013839f, -0.011505f, -0.010520f, 0.008271f, -0.010989f, -0.021884f, 0.007721f, 0.001512f, 0.000240f, -0.011916f, -0.001915f, -0.014914f, -0.012351f, -0.011928f, -0.007104f, -0.004607f, -0.005182f, -0.004539f, 0.002534f, 0.000425f, -0.027791f, 0.018969f, 0.007914f, -0.008914f, -0.020433f, -0.029739f, -0.000263f, -0.016189f, -0.010450f, 0.010772f, -0.007362f, 0.018464f, 0.009689f, -0.006463f, 0.003728f, - 0.017284f, -0.007225f, -0.002820f, -0.007739f, 0.014587f, 0.003993f, 0.006103f, -0.014127f, 0.029839f, -0.084020f, 0.001787f, -0.000574f, -0.002693f, -0.010673f, 0.039239f, 0.003086f, -0.022577f, -0.042145f, 0.042648f, -0.037900f, 0.000990f, 0.027331f, 0.022034f, -0.029816f, -0.007961f, -0.047990f, -0.000199f, 0.013650f, 0.016740f, 0.019325f, 0.005123f, -0.031292f, -0.038886f, 0.031910f, 0.016544f, 0.015841f, 0.006296f, 0.016115f, 0.004890f, 0.023464f, -0.041933f, -0.071128f, 0.019726f, -0.010838f, -0.015092f, 0.039503f, -0.006911f, -0.021241f, 0.035063f, 0.032916f, 0.027474f, -0.002658f, -0.017828f, -0.030683f, -0.007860f, -0.040543f, 0.095024f, -0.008235f, 0.034241f, 0.007206f, -0.031510f, 0.025762f, -0.012031f, -0.030379f, 0.029710f, 0.023415f, -0.052217f, 0.036297f, -0.005536f, 0.050402f, -0.051095f, -0.038732f, 0.051603f, -0.002254f, -0.041714f, 0.042503f, -0.015614f, 0.072700f, -0.030890f, -0.025173f, -0.043945f, 0.027789f, 0.005204f, -0.035925f, 0.014312f, -0.046651f, -0.033919f, 0.002927f, 0.030206f, -0.026814f, -0.016286f, -0.052968f, -0.047846f, 0.056080f, -0.006442f, 0.024375f, - 0.039479f, 0.053209f, 0.000306f, -0.005506f, -0.004086f, 0.013979f, 0.021465f, 0.003897f, 0.009881f, 0.032740f, 0.014447f, 0.018006f, 0.010799f, 0.008154f, -0.006365f, -0.003123f, 0.020271f, 0.015318f, 0.026550f, -0.012600f, 0.017527f, 0.018367f, -0.028829f, 0.007320f, 0.007352f, -0.015802f, -0.007972f, -0.000089f, 0.007365f, -0.012842f, 0.020919f, 0.001111f, -0.004717f, -0.005978f, 0.017777f, 0.000639f, 0.005618f, 0.001587f, 0.005066f, 0.003986f, -0.016069f, -0.008071f, -0.011983f, 0.001457f, -0.000140f, 0.008860f, 0.011544f, -0.010321f, -0.024039f, 0.062270f, -0.014205f, 0.042158f, -0.065977f, -0.011633f, -0.001532f, -0.078777f, -0.017317f, 0.011355f, 0.038674f, -0.019427f, -0.018479f, 0.001664f, -0.006091f, 0.055218f, -0.005280f, -0.027845f, 0.058597f, -0.007330f, -0.003044f, 0.011003f, -0.023436f, 0.050601f, 0.003329f, -0.010398f, 0.024250f, 0.020734f, -0.027667f, -0.009537f, -0.012849f, 0.039388f, -0.078868f, -0.001409f, -0.015312f, -0.027888f, 0.013481f, -0.028355f, 0.045886f, -0.012097f, -0.056840f, -0.005954f, 0.086306f, -0.052420f, 0.037806f, -0.058436f, -0.016829f, 0.058080f, - 0.042459f, -0.031404f, 0.014726f, -0.038288f, -0.050285f, 0.010659f, -0.022128f, 0.021873f, 0.006308f, -0.003553f, 0.008528f, -0.073659f, -0.028814f, -0.037569f, -0.053839f, 0.024966f, -0.020456f, -0.015022f, -0.029867f, -0.052344f, -0.044013f, 0.034427f, -0.006910f, 0.107450f, 0.018821f, 0.009891f, 0.038358f, 0.067564f, 0.008819f, -0.048803f, 0.059282f, 0.044847f, -0.037958f, 0.010002f, -0.009646f, -0.037820f, -0.029811f, -0.025570f, -0.002969f, -0.023346f, 0.008716f, 0.015786f, 0.005471f, -0.018200f, 0.031515f, 0.004877f, 0.014517f, -0.004368f, -0.005591f, 0.014914f, 0.009078f, -0.015180f, -0.013700f, -0.013128f, 0.014398f, 0.006855f, 0.017412f, 0.018513f, 0.000610f, -0.010010f, 0.013978f, -0.008090f, 0.030111f, 0.014272f, -0.036442f, -0.007227f, -0.026922f, 0.003186f, -0.008926f, -0.013003f, 0.037695f, -0.002089f, -0.011967f, 0.009633f, 0.011688f, -0.013857f, -0.003002f, -0.019040f, 0.008208f, 0.013641f, -0.002885f, -0.006066f, 0.001897f, -0.012839f, -0.003633f, -0.002053f, 0.017529f, 0.041912f, -0.024850f, -0.031508f, 0.035415f, -0.056296f, -0.006716f, -0.011472f, 0.003240f, 0.039929f, - -0.026109f, 0.044300f, 0.018832f, 0.010213f, 0.013112f, -0.071833f, 0.048865f, 0.009334f, -0.050714f, 0.020034f, -0.053786f, 0.009379f, 0.072046f, -0.008726f, -0.042727f, -0.045195f, 0.019347f, 0.032985f, 0.026406f, 0.014340f, -0.047592f, -0.032320f, -0.014767f, -0.008572f, 0.061558f, -0.038720f, -0.023424f, 0.091989f, -0.050989f, -0.003632f, 0.036327f, 0.000483f, 0.038272f, -0.005270f, -0.030903f, -0.020368f, -0.056142f, 0.029007f, 0.039904f, -0.059526f, 0.089525f, 0.030178f, -0.067530f, -0.061210f, -0.058734f, -0.069990f, -0.056927f, 0.003340f, 0.028114f, 0.005943f, -0.047432f, -0.017521f, 0.031660f, -0.000408f, -0.029714f, 0.033154f, -0.063839f, 0.004533f, -0.014697f, -0.058535f, -0.055081f, 0.010035f, -0.021917f, 0.042161f, -0.076376f, -0.009762f, -0.027053f, -0.055403f, 0.003824f, 0.090583f, 0.023095f, -0.039303f, 0.019356f, -0.048504f, 0.019912f, -0.019362f, 0.001737f, 0.003274f, 0.025500f, -0.002140f, 0.008725f, 0.032693f, 0.000341f, -0.017159f, -0.008178f, 0.026357f, 0.018221f, 0.012495f, 0.006301f, -0.049876f, -0.005135f, 0.004500f, 0.028317f, 0.014845f, -0.026184f, 0.000213f, - 0.003012f, 0.044873f, 0.002477f, 0.014920f, -0.013636f, -0.007938f, 0.006527f, 0.015185f, -0.001797f, -0.012237f, -0.024763f, 0.004454f, -0.009372f, -0.016298f, 0.008463f, -0.011096f, -0.012221f, 0.017974f, -0.013706f, -0.018869f, -0.027327f, -0.023258f, -0.004449f, 0.008077f, 0.000120f, -0.020053f, 0.017546f, 0.044500f, -0.110288f, -0.100553f, -0.088584f, -0.056032f, 0.022140f, -0.023292f, 0.112085f, 0.030477f, -0.012899f, -0.025263f, -0.015132f, 0.032570f, -0.074331f, 0.086569f, 0.112857f, 0.045780f, -0.007791f, 0.090469f, -0.029479f, 0.054900f, 0.102426f, -0.018386f, 0.004727f, 0.019831f, 0.136588f, -0.034450f, -0.009697f, 0.082186f, 0.029988f, 0.026686f, -0.023603f, -0.083479f, 0.004714f, -0.066105f, 0.030620f, -0.082018f, -0.097556f, -0.000840f, -0.006661f, -0.067038f, -0.004730f, -0.032476f, -0.070205f, -0.054910f, -0.091267f, -0.004060f, 0.090685f, -0.029120f, -0.018870f, -0.084565f, -0.046705f, -0.031049f, -0.030397f, 0.028826f, -0.022113f, 0.153163f, -0.037590f, -0.002022f, -0.057270f, 0.115580f, 0.093489f, -0.067062f, 0.075740f, -0.026969f, -0.113664f, -0.020049f, -0.012276f, 0.023601f, - -0.027600f, -0.025509f, -0.015643f, -0.045558f, 0.011603f, 0.056223f, -0.068138f, -0.009564f, 0.017651f, 0.011549f, -0.078928f, 0.050147f, 0.033848f, 0.115896f, -0.051103f, 0.031673f, 0.047364f, -0.003097f, 0.011876f, -0.001708f, 0.015349f, -0.013096f, 0.036093f, 0.015717f, 0.028965f, 0.025774f, 0.000811f, 0.026535f, 0.007024f, -0.010296f, 0.026896f, -0.001977f, 0.003441f, 0.002781f, 0.018389f, 0.014223f, -0.022095f, -0.016611f, -0.027703f, 0.039949f, -0.028566f, 0.005643f, 0.023407f, 0.010047f, 0.043501f, 0.038104f, 0.065476f, 0.045305f, 0.036629f, 0.002206f, 0.023664f, -0.035503f, 0.030911f, 0.023637f, -0.009219f, -0.034175f, -0.064883f, -0.025246f, 0.017106f, -0.035863f, -0.014640f, -0.026181f, -0.063640f, -0.054449f, -0.026971f, -0.040666f, -0.025425f, -0.035089f, -0.045533f, -0.047149f, -0.016071f, -0.013953f, -0.022445f, -0.034800f, -0.020439f, -0.031140f, -0.022832f, -0.025524f, -0.008494f, -0.012234f, -0.011023f, -0.013257f, -0.011898f, -0.017228f, -0.009617f, -0.034611f, 0.046352f, 0.194624f, 0.022716f, -0.122031f, -0.030261f, -0.043156f, 0.009400f, 0.060747f, 0.109254f, 0.031201f, - -0.091628f, -0.001770f, 0.063491f, 0.013771f, 0.001435f, -0.002866f, 0.016610f, -0.008783f, -0.011088f, 0.075391f, 0.047316f, 0.042099f, -0.064066f, -0.041632f, 0.043684f, 0.016845f, 0.025810f, -0.022282f, 0.008077f, 0.083988f, 0.002018f, 0.071205f, 0.037482f, 0.038821f, 0.069668f, 0.010037f, -0.036945f, 0.008499f, -0.042318f, 0.010558f, 0.029496f, 0.007428f, 0.113881f, -0.038090f, -0.073421f, -0.070853f, 0.087941f, 0.040478f, 0.046824f, 0.031925f, -0.050426f, -0.063357f, -0.038586f, -0.002289f, 0.019103f, -0.013955f, 0.030982f, 0.058157f, -0.004092f, 0.042128f, 0.038310f, -0.059198f, -0.011805f, 0.016657f, -0.027803f, -0.025158f, -0.029196f, -0.097575f, -0.016632f, 0.041933f, 0.003528f, 0.084813f, 0.056477f, -0.041462f, 0.029858f, 0.000235f, -0.028517f, -0.024123f, -0.047369f, -0.105488f, -0.056422f, 0.004036f, 0.001606f, -0.023568f, -0.006606f, -0.011224f, 0.033346f, 0.034868f, 0.017852f, -0.006679f, 0.002189f, 0.026351f, -0.013637f, 0.016419f, -0.047879f, -0.022852f, -0.006704f, 0.025088f, -0.007090f, 0.009691f, 0.016086f, 0.016050f, 0.001586f, 0.045097f, -0.037107f, -0.033305f, - -0.033812f, 0.023320f, -0.022207f, -0.034772f, -0.034659f, 0.023613f, -0.012055f, -0.025445f, -0.013910f, 0.017651f, 0.003667f, 0.026029f, -0.045307f, -0.029548f, -0.006212f, -0.003281f, 0.007681f, 0.020173f, -0.010942f, -0.017938f, 0.028513f, -0.015937f, -0.019968f, -0.016742f, 0.027365f, -0.007997f, -0.016780f, 0.008222f, -0.003447f, -0.015987f, -0.001490f, -0.021214f, -0.015095f, -0.009620f, -0.003295f, -0.006775f, 0.002644f, -0.005465f, 0.000154f, -0.002017f, 0.001335f, -0.010824f, -0.000671f, -0.004002f, -0.000510f, -0.006063f, -0.000116f, -0.009484f, 0.000870f, -0.007223f, 0.000626f, -0.006141f, 0.000598f, -0.002601f, 0.002254f, -0.004223f, 0.000968f, -0.005637f, 0.000023f, -0.006036f, -0.001614f, -0.007809f, -0.001106f, -0.005730f, -0.001460f, -0.005154f, -0.001190f, -0.003236f, -0.001384f, -0.005361f, -0.000911f, -0.002332f, -0.000443f, -0.003174f, -0.000144f, -0.004358f, -0.000522f, -0.002935f, -0.001461f, -0.001829f, -0.001185f, -0.002987f, -0.000849f, -0.002256f, -0.002053f, -0.001358f, -0.001056f, -0.001885f, -0.000704f, -0.001806f, -0.013008f, -0.045276f, 0.003241f, 0.155447f, 0.037386f, 0.066504f, - -0.034137f, -0.137977f, -0.073098f, -0.101073f, -0.036836f, 0.071195f, 0.156778f, 0.072824f, 0.015568f, -0.073615f, -0.073285f, 0.052005f, 0.076946f, 0.041125f, 0.093899f, -0.002149f, -0.064876f, -0.089970f, -0.046809f, -0.012268f, 0.069237f, 0.010656f, 0.039155f, 0.038643f, 0.004155f, 0.097189f, 0.064765f, -0.005438f, -0.011169f, -0.085920f, -0.023434f, 0.000041f, -0.000221f, 0.052232f, 0.087851f, 0.056927f, 0.041129f, 0.086310f, 0.046719f, -0.085660f, -0.072430f, -0.020062f, -0.057204f, 0.060472f, 0.037757f, 0.088548f, 0.065468f, 0.078557f, 0.020667f, 0.015521f, -0.064907f, -0.063838f, -0.063772f, 0.023789f, 0.029488f, 0.001836f, -0.010368f, 0.138587f, 0.032608f, -0.007373f, -0.014876f, 0.095550f, -0.101631f, 0.023022f, -0.191728f, -0.040378f, 0.045523f, -0.064316f, 0.060000f, 0.037143f, -0.000988f, 0.138479f, 0.062746f, -0.075337f, -0.155967f, -0.072004f, -0.071712f, -0.035797f, -0.027867f, -0.017794f, 0.065403f, 0.044892f, 0.088906f, 0.013059f, -0.068811f, -0.043934f, -0.072109f, -0.063165f, -0.066863f, 0.030854f, 0.004155f, 0.030551f, 0.036793f, -0.016082f, 0.033884f, 0.021160f, - -0.026938f, -0.000716f, -0.029633f, -0.006692f, -0.061798f, -0.061114f, -0.025660f, -0.025264f, -0.000855f, -0.057080f, 0.029678f, -0.001956f, 0.009055f, 0.018982f, -0.041601f, -0.079798f, -0.076307f, -0.001607f, 0.014364f, 0.019429f, 0.046944f, 0.014606f, -0.026497f, -0.043790f, 0.013427f, -0.015051f, -0.025032f, 0.011754f, -0.222371f, -0.134469f, -0.074713f, 0.066136f, 0.017714f, 0.303042f, 0.321510f, 0.196816f, 0.356619f, 0.293046f, 0.308329f, 0.215056f, 0.260728f, 0.213106f, 0.003013f, -0.100390f, -0.145215f, -0.137903f, -0.290784f, -0.347092f, -0.364375f, -0.252980f, -0.200471f, -0.077739f, 0.012956f, -0.101960f, 0.061867f, -0.128718f, -0.047768f, -0.008092f, -0.040997f, 0.031479f, -0.119797f, 0.164182f, 0.026960f, 0.149740f, 0.094757f, 0.056477f, 0.037961f, 0.083201f, 0.052753f, 0.085309f, 0.193547f, 0.185626f, 0.146448f, 0.181425f, 0.227609f, 0.208828f, 0.195238f, 0.360687f, 0.125320f, 0.254014f, 0.329069f, 0.227548f, 0.298824f, 0.159921f, 0.212658f, 0.167747f, 0.199562f, 0.217735f, 0.079413f, 0.141254f, 0.105591f, 0.132257f, 0.126271f, 0.035534f, -0.025837f, -0.137118f, - -0.051982f, -0.183199f, -0.161704f, -0.271353f, -0.308969f, -0.309488f, -0.655489f, -0.553580f, -0.596023f, -0.589785f, -0.689882f, -0.696250f, -0.430744f, -0.499480f, -0.373280f, -0.440614f, -0.336383f, -0.317070f, -0.277522f, -0.276923f, -0.160467f, -0.069830f, -0.102425f, -0.102018f, -0.084803f, 0.016655f, 0.131627f, 0.070018f, 0.275382f, 0.238619f, 0.348368f, 0.359740f, 0.330308f, 0.414447f, 0.382350f, 0.444743f, 0.346049f, 0.425545f, 0.449051f, 0.503923f, 0.438987f, 0.263626f, 0.261774f, 0.263315f, 0.265510f, 0.246757f, 0.171735f, 0.162667f, 0.066004f, 0.048349f, -0.007103f, 0.008634f, 0.031414f, -0.090279f, -0.135878f, -0.144670f, -0.091335f, -0.078595f, -0.151288f, -0.173038f, -0.204747f, -0.146340f, -0.189768f, -0.172752f, -0.148504f, -0.156286f, -0.162538f, -0.159303f, -0.043995f, -0.036614f, -0.022086f, -0.034820f, 0.018438f, -0.003669f, -0.006405f, -0.032476f, -0.014576f, 0.013419f, 0.018992f, 0.009088f, 0.027361f, 0.022418f, 0.033620f, 0.003030f, 0.003495f, -0.002745f, 0.016626f, -0.001270f, 0.004107f, 0.003353f, 0.010968f, 0.002380f, 0.002208f, -0.014318f, -0.000411f, -0.002562f, - 0.003481f, -0.009008f, -0.001469f, 0.000378f, 0.003910f, -0.007126f, -0.000013f, -0.005488f, -0.000997f, -0.011780f, -0.007061f, -0.007846f, -0.001566f, -0.011278f, -0.008641f, -0.018159f, -0.005949f, -0.006638f, 0.000262f, -0.008362f, -0.009868f, -0.019882f, -0.017191f, -0.023675f, -0.014256f, -0.018929f, -0.017299f, -0.026062f, -0.019862f, -0.020947f, -0.011988f, -0.016345f, -0.009956f, -0.014197f, -0.007033f, -0.007545f, 0.003556f, 0.006330f, 0.016741f, 0.013986f, 0.022108f, 0.022151f, 0.034776f, 0.036027f, 0.038550f, 0.036881f, 0.042741f, 0.037363f, 0.039237f, 0.033022f, 0.032436f, 0.023270f, 0.021336f, 0.009367f, 0.009293f, -0.000466f, -0.001987f, -0.009979f, -0.007385f, -0.011496f, -0.007782f, -0.011916f, -0.007258f, -0.010204f, -0.004806f, -0.007534f, -0.002189f, -0.005554f, -0.000680f, -0.004256f, 0.000419f, -0.003171f, 0.001398f, -0.002383f, 0.001946f} - }, - { - {0.010236f, 0.000201f, -0.003802f, -0.000868f, -0.009159f, -0.006295f, 0.004076f, 0.000362f, -0.005764f, 0.007178f, 0.004816f, -0.001555f, 0.000442f, -0.000973f, 0.005784f, -0.008015f, 0.003018f, 0.006010f, 0.005309f, -0.011534f, -0.008076f, -0.005727f, 0.007762f, 0.001883f, 0.002543f, -0.003207f, 0.008280f, 0.003114f, -0.002037f, 0.000228f, -0.002340f, 0.001632f, 0.003113f, -0.001826f, -0.002361f, -0.006935f, 0.007411f, 0.012327f, 0.001475f, 0.007835f, -0.001432f, 0.001590f, 0.002829f, 0.003417f, -0.009321f, 0.000674f, -0.009738f, -0.002223f, -0.001363f, 0.003089f, -0.004902f, -0.000143f, 0.002158f, 0.001001f, -0.005669f, 0.000244f, 0.000666f, 0.004677f, -0.006028f, -0.007569f, -0.001002f, 0.010321f, 0.016543f, 0.000057f, 0.002727f, 0.001172f, -0.003520f, -0.009904f, -0.002507f, 0.006953f, -0.003149f, 0.006926f, 0.002695f, 0.007054f, -0.000360f, 0.002763f, 0.002510f, -0.005897f, -0.007996f, -0.000810f, 0.003052f, 0.004641f, 0.002256f, 0.002097f, 0.001403f, 0.001589f, -0.002724f, -0.004338f, -0.002958f, -0.002342f, -0.001119f, 0.000128f, -0.001623f, -0.000180f, 0.001495f, 0.002414f, - 0.002119f, -0.000282f, 0.000176f, 0.001455f, -0.000003f, -0.001683f, 0.004795f, -0.010461f, -0.002255f, -0.009926f, 0.005781f, 0.000540f, -0.004432f, 0.020857f, -0.008091f, -0.015111f, 0.001242f, 0.006858f, -0.001171f, -0.011395f, -0.003121f, -0.005007f, -0.001753f, -0.005454f, -0.001665f, 0.007677f, -0.000448f, -0.005167f, 0.009014f, 0.001215f, 0.008759f, -0.002400f, -0.002031f, 0.003237f, 0.000322f, 0.003786f, -0.001527f, 0.008080f, 0.013454f, -0.003775f, -0.008884f, -0.006674f, 0.005607f, -0.000109f, -0.020472f, -0.002047f, -0.008099f, -0.003144f, 0.010168f, -0.007122f, -0.005243f, 0.006854f, -0.004442f, -0.001084f, 0.009334f, 0.003096f, -0.007183f, 0.003173f, -0.005145f, -0.012239f, 0.003986f, 0.004679f, -0.009123f, -0.005428f, -0.002564f, -0.003966f, 0.000019f, 0.003868f, 0.006405f, 0.009454f, 0.010773f, -0.002633f, 0.001198f, -0.004296f, 0.004708f, 0.002845f, -0.002262f, 0.004382f, 0.006961f, -0.006629f, -0.003229f, 0.001022f, 0.000242f, 0.002557f, 0.007983f, -0.001075f, -0.001997f, 0.007056f, 0.001160f, -0.005030f, -0.002986f, -0.000455f, -0.002925f, 0.002105f, -0.001147f, -0.002814f, - 0.001235f, -0.003182f, -0.002330f, 0.001466f, -0.003004f, -0.002187f, 0.000208f, 0.001996f, -0.003744f, 0.000372f, -0.000820f, -0.001418f, -0.001742f, -0.000245f, -0.002893f, -0.000927f, -0.002764f, -0.016828f, -0.008607f, 0.005223f, 0.007434f, 0.002953f, 0.008069f, -0.006894f, 0.008448f, 0.010451f, -0.002961f, 0.011563f, -0.001607f, 0.008528f, -0.004069f, 0.000302f, -0.003652f, 0.010896f, 0.004204f, -0.000398f, 0.009665f, -0.005122f, -0.004133f, 0.007140f, -0.016877f, -0.002890f, 0.000893f, -0.003543f, -0.015042f, -0.009128f, 0.006202f, -0.005839f, -0.003941f, 0.000260f, 0.011721f, -0.002777f, -0.008247f, -0.000604f, 0.002999f, 0.006688f, -0.001033f, -0.010605f, -0.006889f, -0.001913f, -0.005480f, 0.001818f, -0.009294f, 0.004653f, -0.008745f, -0.012775f, 0.000391f, 0.004545f, 0.005196f, -0.004053f, -0.002965f, -0.008366f, 0.010870f, 0.006347f, 0.001503f, 0.000163f, -0.000319f, -0.003645f, -0.001997f, 0.003736f, 0.004635f, 0.016483f, -0.001864f, 0.004191f, 0.001067f, -0.000437f, -0.008055f, -0.006057f, 0.011125f, -0.004732f, 0.001086f, 0.002822f, 0.001603f, -0.001691f, 0.008409f, 0.000505f, - 0.000300f, -0.009074f, 0.008821f, 0.005012f, -0.003419f, -0.001971f, -0.000995f, -0.002592f, 0.001215f, 0.006429f, -0.000091f, 0.002592f, 0.001924f, -0.000830f, 0.001475f, 0.003354f, -0.000345f, 0.000070f, 0.001011f, 0.001599f, 0.001318f, 0.001946f, 0.003404f, 0.001342f, -0.002496f, 0.002686f, 0.001216f, -0.001768f, -0.001437f, -0.000228f, 0.000394f, 0.000051f, 0.004133f, 0.004978f, 0.004536f, 0.010689f, -0.007083f, -0.010690f, -0.008552f, 0.005327f, 0.011908f, -0.002280f, 0.009126f, -0.008167f, -0.009823f, 0.008065f, -0.004079f, 0.000762f, 0.003054f, 0.010121f, 0.003801f, 0.016119f, -0.007049f, -0.008726f, 0.003792f, -0.004876f, -0.004509f, 0.009092f, -0.014326f, -0.008931f, 0.001439f, -0.002866f, 0.006529f, -0.004964f, 0.001796f, 0.011422f, -0.010732f, 0.007910f, -0.006481f, 0.005087f, -0.006074f, -0.001831f, -0.000989f, 0.011832f, 0.002235f, 0.000315f, -0.008754f, 0.000318f, -0.010417f, 0.003788f, 0.002550f, -0.007066f, -0.000187f, -0.002995f, 0.017994f, 0.002306f, 0.001130f, -0.015756f, -0.009193f, -0.013310f, 0.010270f, -0.006845f, -0.000773f, 0.005300f, 0.022950f, 0.016095f, - -0.006522f, -0.014272f, -0.005926f, -0.012412f, 0.012944f, -0.002628f, -0.003630f, -0.005821f, -0.003815f, -0.001207f, -0.005978f, -0.004075f, -0.001033f, -0.004959f, 0.003413f, -0.003516f, 0.004802f, -0.018026f, 0.001172f, -0.001630f, -0.005696f, -0.002807f, -0.006047f, -0.001363f, -0.009431f, 0.000603f, -0.003938f, -0.000481f, 0.005648f, -0.001972f, -0.002057f, -0.004180f, -0.004507f, -0.001426f, 0.001226f, -0.000430f, -0.000432f, -0.001778f, -0.000738f, -0.002073f, -0.000355f, 0.000270f, 0.001061f, -0.001529f, -0.001630f, -0.002322f, -0.001988f, -0.001827f, -0.002952f, 0.001007f, -0.000995f, -0.000244f, -0.003000f, -0.008920f, 0.006366f, -0.009236f, -0.016810f, 0.017138f, 0.007561f, -0.017717f, 0.017707f, -0.002737f, -0.001176f, -0.024951f, 0.014796f, 0.010078f, -0.020415f, 0.006158f, -0.003480f, 0.007806f, 0.001644f, 0.008975f, 0.005547f, 0.002379f, -0.009566f, 0.000999f, 0.003341f, -0.012355f, -0.005447f, -0.014602f, -0.002655f, -0.009035f, -0.005028f, 0.001784f, -0.011655f, -0.004135f, -0.017113f, 0.006532f, 0.001559f, 0.001573f, 0.001365f, -0.007199f, -0.014915f, -0.004512f, 0.005074f, -0.002293f, - -0.001408f, 0.015587f, -0.023096f, 0.009753f, 0.011605f, -0.001602f, 0.000610f, -0.004371f, -0.001945f, -0.007349f, -0.011476f, -0.007644f, -0.009070f, -0.005888f, 0.005571f, 0.003243f, 0.004945f, 0.007838f, -0.001979f, -0.004046f, 0.010927f, 0.021208f, 0.014770f, -0.000236f, -0.018115f, 0.005022f, -0.002892f, 0.002723f, 0.018917f, -0.000049f, 0.019057f, 0.017199f, -0.002485f, -0.005673f, -0.004740f, 0.001408f, 0.001519f, 0.006448f, 0.019323f, 0.005250f, 0.000638f, -0.001943f, -0.012201f, 0.001488f, 0.003584f, -0.004035f, -0.000733f, 0.000663f, -0.000296f, 0.002286f, 0.001555f, 0.001416f, -0.001653f, 0.002393f, 0.002020f, 0.002139f, 0.002259f, -0.006505f, -0.001187f, -0.004668f, 0.001728f, -0.003645f, 0.001405f, -0.001027f, -0.001825f, -0.003911f, 0.000603f, 0.000992f, -0.005864f, -0.001817f, 0.001200f, 0.000164f, 0.026891f, 0.007101f, -0.004985f, -0.001133f, 0.008151f, -0.002667f, 0.026044f, -0.002606f, -0.004204f, 0.033403f, 0.000032f, 0.016978f, -0.006422f, 0.000640f, -0.001625f, 0.002913f, -0.004427f, 0.002485f, -0.000697f, -0.000772f, -0.018205f, -0.001547f, -0.004473f, -0.003049f, - -0.007690f, 0.011718f, 0.005219f, 0.007045f, -0.010291f, -0.000943f, -0.016160f, -0.006220f, 0.002824f, -0.001123f, -0.009895f, -0.002816f, 0.005162f, 0.012236f, 0.007118f, -0.003645f, -0.015039f, -0.000342f, 0.004050f, -0.002318f, 0.007692f, 0.005410f, 0.010491f, 0.014892f, -0.004966f, 0.000082f, -0.016050f, -0.019110f, 0.018022f, 0.009955f, -0.000842f, -0.000631f, -0.000788f, -0.006856f, -0.007899f, 0.000028f, 0.014389f, 0.008602f, 0.002460f, 0.017963f, -0.013818f, 0.004178f, -0.011368f, -0.008446f, 0.007463f, 0.008040f, 0.006284f, 0.026967f, -0.001156f, -0.011923f, 0.001914f, -0.011684f, 0.005185f, 0.003307f, 0.009593f, -0.005101f, -0.000037f, 0.001390f, -0.009190f, -0.001424f, 0.006103f, -0.000757f, 0.001438f, -0.003725f, -0.002189f, -0.000403f, 0.004164f, -0.002118f, 0.002558f, -0.003961f, 0.000193f, -0.005175f, 0.001519f, -0.002661f, -0.002037f, 0.001044f, 0.002509f, -0.003131f, 0.003389f, 0.002484f, 0.004180f, 0.000457f, 0.002397f, -0.000931f, 0.001385f, 0.000986f, 0.001402f, -0.001475f, -0.000237f, -0.001369f, -0.000426f, 0.000981f, 0.002061f, -0.001787f, 0.000715f, -0.000384f, - -0.014885f, -0.019929f, 0.007722f, -0.018625f, -0.000020f, 0.020785f, -0.021748f, 0.007975f, 0.009726f, -0.005804f, -0.026837f, 0.000378f, 0.015659f, -0.017324f, 0.010763f, -0.001191f, -0.007714f, -0.022472f, -0.000657f, -0.016207f, 0.002850f, -0.008218f, -0.012672f, -0.015766f, 0.006467f, -0.002217f, -0.000948f, 0.015031f, -0.009106f, 0.012684f, -0.009640f, -0.003826f, 0.019377f, 0.006672f, -0.010374f, 0.007988f, 0.004662f, -0.008954f, 0.004711f, 0.004903f, -0.003465f, -0.003812f, 0.000755f, -0.004305f, -0.005137f, 0.003200f, 0.003531f, 0.026424f, -0.024879f, 0.004043f, 0.001566f, -0.008887f, 0.017854f, 0.010195f, -0.006154f, -0.019251f, 0.001696f, -0.001929f, -0.005838f, -0.012141f, -0.014268f, 0.017409f, 0.011255f, 0.001465f, -0.001758f, 0.009286f, 0.004681f, -0.004185f, 0.007390f, 0.005348f, -0.004842f, 0.018523f, -0.006889f, 0.011341f, -0.007595f, 0.005655f, 0.005797f, 0.004196f, -0.000581f, -0.010267f, 0.009816f, -0.007987f, -0.008363f, -0.005698f, 0.002845f, 0.000010f, 0.001199f, -0.009735f, 0.005284f, 0.004133f, -0.006203f, 0.000667f, -0.000265f, -0.003057f, 0.000560f, -0.002015f, - 0.004699f, -0.001330f, 0.000701f, 0.003984f, -0.001815f, -0.002967f, 0.002602f, -0.003387f, 0.002742f, -0.000579f, -0.000060f, -0.003902f, -0.001786f, -0.000096f, -0.004325f, 0.004284f, 0.002383f, 0.000999f, 0.002795f, -0.000871f, 0.001897f, -0.001034f, 0.008777f, -0.020094f, 0.014739f, -0.008392f, -0.003719f, -0.011521f, -0.008315f, 0.007065f, -0.006634f, 0.005784f, 0.022533f, 0.007749f, 0.012380f, -0.028722f, -0.019031f, -0.010215f, -0.006881f, 0.003143f, -0.000135f, 0.004992f, -0.024135f, 0.012949f, 0.005380f, 0.003259f, 0.023021f, 0.000422f, -0.013052f, 0.021647f, 0.008503f, -0.009611f, 0.004414f, -0.012361f, 0.011358f, 0.005390f, 0.015138f, -0.012941f, -0.009215f, 0.003872f, -0.013122f, 0.016586f, -0.015176f, -0.000227f, 0.014706f, 0.013586f, -0.028012f, -0.000752f, 0.001368f, 0.003300f, 0.004630f, 0.030643f, 0.007064f, 0.001957f, -0.009367f, -0.007692f, -0.016545f, -0.008913f, 0.022620f, 0.000595f, -0.027007f, 0.000457f, 0.006251f, -0.015288f, -0.016881f, 0.002056f, -0.010950f, 0.004542f, 0.024793f, 0.012219f, 0.010434f, -0.010119f, -0.026494f, 0.002190f, -0.004534f, 0.012216f, - -0.002382f, -0.022134f, -0.002698f, 0.005847f, 0.006115f, 0.006050f, -0.001871f, 0.018848f, 0.003550f, -0.011891f, 0.015504f, -0.001083f, 0.009280f, -0.000247f, -0.002311f, -0.008002f, 0.011459f, 0.007946f, 0.004484f, -0.005789f, -0.002283f, -0.001471f, -0.003862f, 0.002246f, -0.000019f, -0.004906f, 0.002485f, 0.001582f, -0.002792f, -0.003630f, -0.001536f, -0.002723f, -0.000400f, 0.003562f, -0.003554f, 0.001876f, 0.004392f, 0.005330f, -0.001339f, 0.002323f, -0.002781f, -0.035426f, -0.010589f, 0.010055f, 0.027376f, 0.003937f, 0.014194f, 0.048673f, 0.008075f, 0.008329f, -0.007531f, -0.023291f, 0.013210f, -0.011280f, 0.012173f, -0.002905f, 0.032174f, 0.023481f, -0.012420f, -0.026318f, -0.020955f, 0.015922f, -0.013959f, 0.019512f, 0.008560f, 0.006375f, -0.006737f, -0.002542f, 0.023153f, -0.004544f, 0.020432f, 0.020482f, 0.010566f, 0.014375f, -0.015913f, 0.015564f, 0.008372f, -0.008306f, 0.022626f, -0.009952f, 0.020556f, 0.001571f, 0.002319f, -0.030150f, 0.018180f, 0.001686f, -0.005679f, 0.014929f, -0.021037f, -0.008324f, 0.012597f, 0.010322f, -0.019383f, 0.003143f, -0.012401f, -0.007105f, - 0.019188f, 0.002599f, 0.005788f, -0.002010f, -0.022110f, 0.014857f, 0.014083f, 0.000982f, 0.011134f, 0.005016f, -0.009797f, -0.010269f, -0.000836f, 0.011806f, -0.020022f, -0.000707f, 0.001282f, 0.000885f, -0.000193f, 0.008780f, 0.011510f, 0.023660f, 0.013268f, 0.000798f, -0.033230f, -0.010912f, -0.012443f, -0.001100f, 0.002457f, -0.009322f, -0.019700f, -0.006193f, -0.008878f, 0.005206f, 0.000761f, -0.005603f, 0.002103f, -0.005747f, 0.009156f, -0.003285f, -0.003925f, -0.005423f, 0.000099f, 0.002652f, -0.011849f, 0.007437f, -0.007624f, 0.003092f, -0.001965f, -0.004370f, 0.000202f, -0.007296f, 0.002352f, -0.006583f, -0.004805f, -0.000942f, -0.003811f, -0.003506f, 0.004058f, 0.006998f, 0.004185f, 0.006737f, 0.008763f, -0.001828f, 0.001291f, 0.043937f, 0.012830f, 0.005865f, -0.016305f, -0.039532f, 0.028583f, 0.008941f, -0.026268f, 0.007847f, -0.002879f, 0.006744f, 0.005517f, -0.018952f, -0.040592f, -0.031741f, 0.010660f, 0.024855f, -0.004990f, 0.026091f, -0.012161f, 0.020353f, 0.024784f, 0.033663f, -0.007503f, 0.024870f, -0.022174f, 0.008409f, -0.012138f, 0.002975f, 0.013329f, -0.000604f, - -0.007275f, 0.006029f, 0.016750f, -0.012049f, -0.022509f, -0.022714f, 0.047377f, 0.000040f, -0.002482f, -0.021478f, 0.021902f, 0.007105f, -0.043945f, -0.025443f, 0.009701f, -0.006237f, -0.007894f, 0.017037f, 0.005653f, 0.042324f, 0.023272f, -0.001594f, -0.024796f, -0.024283f, -0.013889f, -0.010046f, -0.028123f, 0.025739f, -0.019293f, 0.020340f, 0.017401f, -0.017821f, -0.023008f, -0.022184f, -0.032392f, 0.007709f, -0.000738f, -0.011713f, -0.014777f, -0.023769f, -0.008676f, -0.023420f, 0.004678f, 0.002658f, -0.008149f, 0.003007f, 0.018835f, -0.048866f, -0.019159f, -0.039915f, 0.019811f, 0.013793f, -0.017322f, -0.005944f, 0.007895f, -0.007695f, -0.000526f, 0.009213f, -0.007663f, -0.016124f, -0.002073f, -0.004806f, -0.005326f, -0.000429f, -0.002389f, -0.007000f, -0.000064f, 0.001162f, 0.008156f, -0.011987f, 0.002761f, 0.006179f, -0.001088f, -0.005129f, -0.007887f, -0.002470f, -0.001529f, 0.001379f, -0.002985f, -0.000940f, -0.004961f, 0.001934f, -0.002241f, -0.007809f, 0.012911f, 0.001054f, 0.003593f, -0.010621f, -0.024087f, -0.044935f, -0.010595f, -0.011269f, 0.002030f, -0.010014f, 0.001495f, 0.005349f, - -0.005354f, 0.020086f, -0.025631f, -0.007060f, -0.024338f, -0.000584f, -0.012330f, 0.028264f, 0.030514f, 0.025328f, -0.034930f, 0.025089f, -0.012872f, 0.019211f, -0.007537f, 0.014356f, -0.011846f, -0.014115f, 0.004936f, -0.018411f, 0.011890f, 0.015424f, -0.002195f, 0.009533f, -0.017817f, -0.001532f, 0.029222f, -0.022836f, 0.000789f, -0.006295f, -0.009968f, -0.018264f, -0.001375f, 0.029907f, 0.038186f, -0.023582f, 0.011339f, -0.002337f, -0.023644f, -0.023163f, -0.025932f, -0.011014f, 0.048461f, 0.030156f, -0.009366f, 0.016387f, -0.010590f, 0.014301f, -0.026900f, 0.016420f, -0.001028f, -0.013818f, 0.036878f, 0.019884f, 0.007371f, 0.012896f, 0.010424f, 0.035505f, 0.004421f, -0.028698f, 0.011823f, 0.023269f, 0.017456f, -0.050654f, 0.031260f, -0.021045f, -0.019559f, -0.008813f, 0.003076f, -0.019381f, 0.022112f, 0.050112f, -0.008667f, 0.007870f, 0.025110f, 0.005109f, -0.004202f, 0.006830f, 0.002512f, 0.015219f, 0.012873f, 0.008627f, 0.023603f, 0.012981f, -0.006605f, 0.016955f, 0.009990f, -0.006234f, -0.014381f, 0.009001f, -0.001971f, 0.009680f, -0.004090f, 0.003528f, 0.007200f, 0.003723f, - -0.001990f, -0.000855f, 0.003310f, 0.011999f, 0.002512f, -0.001675f, 0.002562f, 0.009450f, -0.003618f, 0.001409f, 0.014480f, 0.006500f, -0.003653f, 0.008817f, 0.002646f, 0.003071f, 0.006098f, 0.000844f, 0.005085f, -0.001247f, -0.008900f, -0.007286f, 0.007376f, -0.003368f, 0.032235f, 0.020210f, 0.086558f, 0.023595f, -0.013899f, 0.005069f, 0.015042f, -0.000091f, 0.029222f, 0.020878f, 0.020424f, -0.026023f, -0.042151f, 0.042307f, -0.023619f, 0.003639f, 0.015377f, 0.046478f, 0.019407f, -0.028809f, 0.026224f, -0.026091f, -0.004723f, -0.035715f, -0.045781f, -0.005586f, 0.013109f, 0.012112f, 0.009925f, 0.011442f, -0.003075f, -0.032209f, -0.011169f, 0.009854f, 0.011353f, -0.017225f, 0.035936f, 0.022047f, -0.020568f, 0.011356f, 0.018204f, 0.006538f, 0.001694f, -0.019893f, -0.001803f, -0.014053f, -0.007461f, 0.001660f, 0.022611f, 0.054362f, -0.014217f, 0.004640f, 0.008703f, 0.020067f, -0.018934f, 0.069013f, -0.005347f, 0.006388f, 0.006447f, -0.031800f, -0.030205f, -0.050131f, -0.020498f, 0.026948f, -0.008887f, 0.013397f, 0.011710f, 0.047409f, 0.008305f, 0.008257f, 0.003203f, 0.037303f, - 0.018845f, -0.016024f, 0.035201f, -0.031715f, 0.005735f, 0.031514f, 0.041716f, 0.037457f, 0.015590f, -0.021802f, -0.034384f, -0.015435f, -0.010503f, -0.025911f, -0.013551f, -0.014859f, -0.003321f, -0.021793f, 0.006172f, -0.007675f, -0.002792f, -0.019025f, -0.001464f, -0.011958f, 0.019296f, 0.001659f, 0.004811f, -0.016940f, -0.002458f, -0.023164f, 0.002361f, 0.009555f, 0.000039f, 0.016521f, 0.011355f, -0.000195f, 0.007718f, -0.003702f, -0.009541f, -0.006287f, -0.003841f, -0.019846f, 0.002623f, 0.003724f, 0.005498f, 0.005667f, -0.008882f, 0.013683f, 0.015856f, 0.006451f, -0.010805f, -0.007999f, -0.003037f, 0.003223f, 0.009164f, 0.004362f, -0.006930f, -0.004146f, -0.003016f, -0.008703f, -0.036165f, 0.020502f, 0.009198f, 0.025080f, -0.007046f, -0.054445f, 0.003954f, -0.036443f, -0.032990f, 0.009914f, 0.007350f, 0.015488f, -0.009965f, 0.011195f, -0.002398f, -0.018528f, 0.029355f, -0.004637f, -0.010368f, -0.011788f, -0.021436f, -0.017801f, 0.010345f, -0.022489f, 0.005005f, -0.014360f, -0.010481f, -0.006157f, 0.028729f, -0.005673f, 0.030867f, 0.019701f, -0.008807f, 0.010471f, 0.010298f, 0.022345f, - -0.016000f, -0.021055f, 0.002574f, 0.013144f, 0.016538f, 0.029456f, -0.033138f, -0.031585f, 0.012903f, 0.010471f, 0.035719f, -0.017953f, -0.003247f, 0.018012f, -0.000553f, 0.005015f, -0.007388f, 0.023740f, 0.029206f, 0.013662f, -0.004500f, 0.018705f, 0.061981f, -0.013924f, -0.019020f, 0.023211f, -0.003313f, 0.036542f, 0.008051f, 0.017002f, 0.019872f, -0.006794f, 0.013666f, 0.042268f, -0.012359f, -0.051018f, 0.035004f, 0.010342f, -0.017599f, 0.004756f, -0.078424f, 0.051607f, -0.001369f, 0.031928f, -0.021243f, 0.016572f, 0.001482f, -0.031114f, -0.030384f, -0.004252f, 0.004809f, -0.023071f, -0.000808f, 0.003287f, -0.005147f, -0.007845f, -0.005727f, -0.025260f, -0.005133f, -0.015281f, -0.000782f, -0.008134f, -0.003282f, -0.009291f, 0.014016f, -0.011483f, -0.009572f, -0.016466f, -0.008867f, -0.018758f, -0.004481f, 0.003761f, -0.011347f, -0.001542f, -0.009513f, -0.009552f, -0.011056f, -0.001024f, -0.009370f, -0.006550f, 0.001777f, -0.003086f, 0.006801f, -0.006177f, -0.012987f, -0.013358f, -0.001166f, 0.001727f, -0.009375f, -0.002175f, -0.004944f, 0.003413f, -0.018618f, -0.000312f, -0.034278f, -0.000537f, - 0.050546f, 0.026454f, -0.067665f, 0.011273f, -0.013138f, 0.006630f, 0.009741f, -0.002404f, -0.035451f, 0.005609f, -0.006464f, 0.030606f, 0.056633f, -0.008761f, 0.017441f, 0.038873f, -0.002879f, -0.009927f, -0.010961f, 0.015829f, 0.056529f, -0.000438f, -0.005198f, 0.048188f, -0.020514f, 0.013510f, -0.001086f, -0.000085f, -0.013597f, 0.018546f, -0.054189f, 0.002333f, 0.015545f, 0.039376f, 0.039924f, -0.033210f, 0.000200f, 0.037848f, -0.003485f, 0.069878f, -0.026367f, -0.033272f, 0.003410f, 0.050937f, 0.007633f, -0.037957f, -0.019354f, 0.012101f, -0.001392f, 0.022544f, -0.057491f, 0.007530f, 0.001276f, -0.011105f, -0.042051f, -0.035522f, 0.008358f, -0.010343f, -0.003764f, 0.002680f, -0.043730f, -0.043920f, 0.008222f, 0.007632f, -0.046284f, -0.014602f, -0.030525f, 0.026869f, -0.072450f, -0.026297f, 0.022106f, -0.042572f, 0.022405f, -0.011026f, -0.018638f, 0.024240f, -0.008567f, 0.036092f, 0.032355f, 0.008214f, 0.019575f, -0.008833f, 0.002918f, -0.024475f, 0.025823f, -0.018842f, 0.014818f, -0.025679f, 0.018087f, 0.001953f, 0.007302f, -0.001649f, -0.001254f, -0.014497f, 0.016590f, -0.019205f, - 0.002028f, 0.002882f, 0.008703f, -0.021145f, 0.009881f, -0.008194f, -0.007528f, 0.007469f, -0.006068f, -0.009612f, 0.013185f, 0.006767f, 0.014182f, 0.007496f, -0.003093f, -0.006781f, -0.008961f, -0.001398f, 0.001427f, -0.009771f, 0.002146f, -0.006979f, 0.002143f, -0.020299f, -0.012435f, -0.007983f, 0.009162f, 0.012917f, -0.008418f, 0.003333f, -0.004667f, 0.005887f, -0.018118f, 0.038322f, -0.000715f, 0.021526f, -0.039987f, -0.002215f, -0.037891f, 0.039667f, 0.016529f, 0.051672f, 0.035190f, -0.017365f, 0.006161f, 0.040958f, 0.019959f, 0.021193f, 0.012418f, -0.033493f, -0.010495f, 0.017503f, 0.001991f, 0.020543f, -0.044322f, -0.031675f, 0.018996f, 0.065980f, 0.008179f, -0.020923f, 0.040540f, 0.012422f, 0.025066f, 0.007481f, 0.004322f, -0.036200f, -0.038264f, 0.001311f, -0.000108f, -0.063892f, 0.004485f, -0.012625f, -0.004061f, 0.021047f, -0.025929f, 0.016057f, 0.049940f, 0.005941f, -0.083393f, -0.058809f, -0.010450f, -0.017685f, -0.021318f, -0.000018f, 0.014270f, 0.013689f, -0.021043f, 0.023490f, 0.020927f, 0.020264f, -0.013575f, 0.017517f, -0.010125f, -0.020930f, -0.005890f, 0.019483f, - -0.062486f, -0.013524f, -0.028663f, -0.031605f, -0.013623f, 0.009229f, -0.017207f, -0.001151f, 0.067088f, 0.039169f, -0.026943f, 0.000762f, -0.000078f, -0.011186f, -0.012956f, 0.006488f, 0.044701f, 0.017168f, 0.006042f, -0.013618f, -0.011119f, -0.023134f, -0.028119f, -0.028548f, -0.007533f, 0.004222f, 0.008136f, -0.009684f, 0.007169f, -0.001934f, -0.007525f, -0.002035f, -0.008684f, -0.025034f, -0.007264f, 0.000237f, -0.007363f, -0.021600f, 0.001877f, -0.007531f, 0.023128f, -0.011701f, 0.007217f, -0.001997f, 0.008994f, 0.000328f, -0.020403f, 0.002103f, 0.022394f, 0.004008f, 0.020042f, -0.005352f, 0.009788f, -0.006289f, 0.005857f, -0.001020f, -0.015423f, -0.005992f, -0.002521f, -0.002169f, -0.003847f, 0.000310f, -0.005364f, -0.010302f, 0.013652f, 0.026895f, -0.037338f, -0.009179f, -0.016017f, 0.010061f, 0.077052f, 0.012428f, -0.038415f, 0.010265f, 0.033845f, -0.007149f, 0.031599f, 0.040846f, -0.021337f, 0.009790f, 0.020185f, 0.014183f, 0.000564f, -0.005821f, -0.012929f, 0.006229f, 0.023771f, 0.012595f, 0.022176f, -0.033609f, -0.052388f, -0.005383f, 0.022866f, 0.020622f, 0.016317f, -0.005774f, - -0.048361f, 0.015611f, 0.010293f, 0.072053f, 0.075250f, 0.018106f, -0.056610f, 0.040832f, -0.021781f, -0.057360f, -0.013798f, -0.067912f, -0.052199f, -0.022758f, -0.025337f, -0.052642f, 0.008834f, -0.021145f, -0.060784f, -0.055169f, 0.015612f, 0.036013f, -0.006288f, -0.046561f, 0.013505f, 0.001445f, 0.014566f, 0.029485f, 0.028264f, -0.036012f, 0.046239f, 0.032118f, 0.003701f, 0.012967f, 0.032062f, -0.001608f, 0.084449f, -0.060396f, -0.029286f, -0.001949f, -0.069371f, 0.056708f, 0.003762f, 0.071259f, 0.021608f, 0.015993f, -0.003973f, 0.014167f, 0.029800f, 0.001241f, -0.028464f, -0.000402f, -0.015368f, 0.011340f, 0.010497f, 0.020399f, -0.008912f, -0.025960f, -0.000545f, 0.024190f, 0.011059f, -0.015391f, -0.008084f, 0.012730f, -0.017691f, -0.000056f, 0.000005f, 0.022206f, 0.008312f, -0.012076f, -0.005629f, -0.013726f, -0.022612f, -0.019250f, -0.001432f, 0.004232f, -0.011391f, -0.008084f, 0.002230f, -0.011102f, 0.017075f, 0.008516f, -0.000561f, 0.010488f, 0.034853f, -0.013384f, -0.007043f, 0.003977f, 0.009116f, -0.018985f, 0.020302f, -0.006950f, -0.000961f, 0.003519f, 0.014966f, 0.026425f, - -0.038168f, 0.010352f, -0.075759f, -0.019948f, -0.005137f, -0.018078f, 0.082185f, 0.026496f, -0.022433f, -0.051490f, -0.026808f, -0.020939f, -0.033380f, -0.023709f, 0.012157f, -0.075378f, -0.016808f, 0.056073f, -0.007076f, -0.005827f, -0.058414f, 0.055672f, 0.026890f, 0.001663f, -0.022465f, 0.023962f, 0.011181f, -0.012781f, 0.024717f, -0.038735f, -0.010893f, -0.019587f, 0.010717f, -0.008739f, -0.025177f, 0.028407f, -0.021554f, 0.012080f, 0.000289f, -0.037635f, -0.024206f, -0.005542f, -0.048126f, -0.046345f, -0.063107f, -0.015766f, 0.028168f, -0.020627f, -0.012003f, 0.036487f, -0.044581f, -0.035826f, 0.038486f, 0.000063f, -0.002810f, 0.035525f, -0.000038f, -0.029706f, -0.017834f, 0.012233f, 0.024865f, -0.038494f, -0.012771f, 0.047661f, 0.019874f, 0.046000f, 0.023086f, -0.008981f, 0.023465f, -0.001476f, -0.062386f, 0.019777f, -0.047340f, 0.034247f, 0.005343f, 0.012785f, -0.020268f, -0.053109f, 0.010663f, -0.007625f, -0.046992f, -0.018248f, 0.020225f, -0.023200f, 0.000373f, 0.007661f, 0.014556f, -0.014763f, 0.000208f, 0.002599f, -0.004612f, 0.010034f, -0.007575f, 0.005770f, 0.018410f, -0.003174f, - 0.005894f, 0.005343f, -0.012976f, 0.004235f, 0.008493f, 0.005543f, -0.009864f, 0.012872f, 0.008039f, -0.000577f, -0.013566f, -0.026047f, 0.004768f, -0.020539f, 0.016291f, -0.020978f, 0.013306f, 0.017796f, 0.000140f, 0.001352f, -0.000187f, 0.010262f, 0.000845f, -0.008744f, 0.019828f, 0.016767f, -0.008852f, -0.005539f, -0.013170f, -0.021248f, 0.056148f, 0.019952f, 0.001815f, 0.007144f, -0.015002f, 0.022620f, 0.034490f, 0.088314f, 0.076642f, 0.006900f, -0.034139f, 0.015911f, 0.044320f, 0.012991f, 0.034254f, 0.025150f, 0.016440f, -0.025863f, -0.033805f, -0.040045f, -0.003097f, 0.015202f, 0.028081f, 0.057442f, 0.029981f, 0.036920f, 0.021038f, 0.034245f, 0.016866f, 0.032994f, -0.022186f, 0.006402f, 0.061546f, -0.001442f, 0.047276f, 0.012831f, 0.038173f, -0.060840f, -0.010242f, -0.017783f, -0.018306f, 0.014453f, 0.023463f, 0.044433f, 0.071220f, 0.060134f, -0.021566f, 0.010849f, -0.079773f, 0.019503f, 0.017964f, 0.070201f, -0.055980f, 0.044470f, -0.014784f, -0.038813f, 0.029554f, 0.009420f, 0.024606f, 0.044042f, -0.014613f, -0.055966f, 0.028717f, -0.035915f, -0.049860f, -0.023345f, - 0.065881f, -0.057313f, -0.081973f, -0.041004f, -0.013886f, 0.043226f, -0.004861f, -0.029171f, -0.056699f, -0.042351f, 0.026561f, -0.003675f, -0.001434f, 0.036657f, -0.040127f, 0.011532f, 0.040420f, 0.016061f, 0.026927f, 0.039689f, -0.027166f, -0.013327f, -0.023025f, 0.030391f, 0.006306f, 0.015723f, 0.010607f, -0.027050f, 0.033369f, 0.008502f, 0.004932f, -0.013177f, -0.049825f, -0.047040f, 0.004269f, -0.022313f, -0.009761f, -0.021159f, -0.018973f, -0.007990f, 0.008251f, -0.000145f, -0.021296f, 0.026743f, 0.021830f, -0.002867f, -0.024127f, 0.004009f, 0.013759f, -0.016772f, -0.008150f, -0.009579f, -0.000304f, 0.011624f, -0.005821f, -0.011560f, -0.009982f, 0.008207f, 0.006232f, 0.013090f, 0.015633f, -0.008365f, -0.007709f, -0.009524f, 0.009006f, 0.010254f, 0.055106f, -0.017204f, -0.061372f, 0.004549f, -0.025756f, -0.087154f, -0.044425f, 0.114919f, 0.015832f, -0.051501f, -0.057046f, 0.006684f, 0.000827f, 0.023968f, 0.029584f, -0.039804f, -0.026800f, -0.063668f, 0.014728f, -0.022900f, -0.015517f, 0.098068f, 0.020840f, -0.013204f, -0.101045f, -0.006194f, -0.054015f, 0.053728f, 0.065830f, 0.007253f, - 0.051195f, -0.060114f, -0.023902f, -0.037848f, -0.009130f, 0.100187f, 0.124226f, 0.020220f, -0.033279f, -0.044031f, -0.089849f, 0.001606f, 0.011535f, 0.108914f, 0.060497f, -0.015469f, -0.178479f, -0.092019f, 0.015307f, -0.016721f, 0.156666f, 0.052944f, -0.075253f, -0.030868f, -0.134307f, -0.042062f, 0.004707f, 0.088272f, 0.090603f, 0.102191f, 0.004842f, 0.024570f, -0.010696f, 0.009262f, 0.125155f, -0.045697f, 0.091945f, -0.021766f, -0.094366f, -0.027755f, -0.100027f, -0.031626f, 0.131075f, 0.060106f, 0.093613f, -0.030470f, 0.073434f, -0.081598f, -0.013023f, 0.020095f, 0.039191f, 0.078401f, -0.026176f, -0.001105f, 0.005010f, -0.006775f, 0.012135f, 0.021373f, -0.022148f, 0.004014f, -0.023286f, -0.041713f, 0.019180f, 0.035059f, 0.019337f, -0.003805f, -0.025270f, -0.055985f, -0.055632f, -0.028744f, 0.019066f, 0.052855f, 0.029580f, 0.041059f, -0.054651f, -0.071184f, -0.055257f, 0.006983f, 0.063224f, 0.070720f, 0.053983f, -0.031334f, -0.136725f, -0.087236f, 0.002932f, 0.069767f, 0.149131f, 0.058511f, 0.012530f, -0.066921f, -0.088984f, -0.030152f, -0.028093f, 0.078907f, 0.086550f, 0.033148f, - -0.004759f, -0.073878f, -0.055751f, 0.018065f, 0.026163f, 0.064446f, 0.031242f, -0.031765f, -0.022527f, -0.038207f, -0.018248f, 0.019524f, 0.017310f, 0.019787f, 0.024452f, -0.004200f, -0.006702f, -0.079139f, 0.087814f, 0.000502f, -0.023309f, -0.136605f, -0.037199f, -0.036622f, -0.062118f, 0.132964f, 0.001104f, 0.059780f, -0.090942f, 0.050702f, 0.041953f, -0.040397f, 0.026239f, -0.007451f, 0.023431f, 0.000377f, 0.067555f, 0.024354f, -0.066085f, 0.040147f, 0.032537f, 0.000181f, 0.045549f, -0.033462f, -0.017633f, 0.057886f, 0.040062f, 0.038690f, 0.018900f, 0.033719f, -0.099414f, 0.086995f, -0.049992f, -0.031271f, 0.018756f, -0.069144f, 0.101436f, -0.028491f, 0.010041f, 0.073782f, 0.002438f, -0.010765f, 0.039803f, 0.041195f, 0.071851f, -0.017155f, -0.066838f, -0.067648f, 0.007520f, -0.024170f, 0.031499f, -0.040755f, -0.020038f, -0.027461f, 0.020363f, -0.127469f, 0.002091f, 0.095348f, 0.026289f, 0.039063f, -0.003551f, -0.010040f, 0.025050f, -0.033347f, -0.038595f, 0.024236f, 0.013264f, -0.041208f, -0.046219f, 0.176646f, -0.018995f, -0.056884f, 0.016088f, 0.083021f, -0.002222f, -0.064655f, - 0.026882f, -0.011794f, -0.024550f, 0.053597f, 0.067606f, -0.048989f, -0.080745f, 0.018702f, 0.019573f, -0.018229f, -0.048240f, 0.002835f, 0.024508f, -0.007009f, -0.007733f, -0.002773f, -0.008210f, 0.013406f, 0.014545f, -0.016172f, 0.001969f, 0.007694f, 0.003774f, -0.009549f, 0.003874f, -0.000112f, -0.022227f, 0.016573f, 0.007062f, 0.031653f, 0.015661f, -0.011396f, 0.012930f, -0.005718f, 0.018580f, -0.000860f, -0.004577f, 0.025907f, -0.006099f, 0.017895f, -0.004877f, -0.019556f, -0.001502f, 0.023368f, -0.006189f, 0.026536f, -0.024444f, 0.033200f, 0.007967f, -0.023072f, 0.010178f, 0.000979f, 0.012341f, -0.003501f, -0.009164f, -0.001920f, 0.008245f, 0.026263f, -0.068960f, 0.025003f, 0.107195f, 0.170492f, -0.075681f, 0.056054f, -0.112692f, -0.032319f, -0.068864f, -0.008569f, 0.103792f, 0.111500f, 0.087468f, -0.001982f, -0.070794f, -0.041698f, 0.037763f, 0.003695f, 0.018709f, 0.058713f, -0.001529f, 0.029666f, -0.074116f, -0.017914f, -0.043043f, -0.051004f, 0.028068f, 0.024638f, 0.001210f, 0.052832f, -0.044452f, -0.000634f, 0.011329f, -0.061171f, -0.002061f, 0.005341f, -0.039607f, -0.013826f, - 0.014420f, -0.025222f, 0.058219f, -0.018103f, 0.088356f, 0.068081f, -0.043953f, -0.011195f, -0.060980f, -0.068337f, -0.090372f, 0.029934f, 0.041352f, 0.121618f, 0.091711f, 0.044079f, 0.058234f, 0.012345f, -0.066526f, -0.042704f, -0.037316f, -0.044000f, -0.009719f, 0.026506f, -0.002533f, -0.029826f, 0.008009f, -0.030085f, 0.019642f, 0.046159f, 0.008714f, -0.045553f, 0.036582f, -0.021154f, -0.023843f, -0.045548f, 0.024272f, 0.022127f, 0.010675f, 0.007108f, 0.106302f, 0.082580f, 0.066491f, 0.012677f, -0.015325f, -0.088579f, -0.018735f, -0.007972f, 0.088641f, 0.052169f, 0.023220f, 0.028226f, 0.076831f, -0.010729f, -0.030339f, -0.039904f, -0.034467f, -0.014802f, -0.007532f, 0.008523f, 0.001189f, 0.002110f, 0.040059f, -0.003049f, -0.023461f, -0.012969f, -0.007834f, 0.002455f, 0.020020f, 0.037114f, 0.015900f, -0.002847f, 0.022353f, -0.035086f, 0.014769f, 0.035448f, 0.014208f, 0.068263f, -0.026846f, 0.002151f, 0.011850f, -0.026049f, 0.007745f, -0.042438f, -0.001763f, 0.017224f, 0.001079f, 0.019787f, 0.010887f, -0.003114f, -0.000527f, -0.006584f, -0.000689f, 0.010641f, -0.011595f, -0.185575f, - -0.105600f, -0.062722f, 0.107158f, 0.048508f, 0.283225f, 0.263929f, 0.275038f, 0.275888f, 0.297957f, 0.207623f, 0.110064f, 0.156914f, 0.096052f, -0.048537f, -0.086859f, -0.136770f, -0.262498f, -0.238674f, -0.245191f, -0.179725f, -0.179899f, -0.135345f, -0.110200f, -0.060402f, 0.006922f, -0.105632f, -0.052472f, -0.023004f, -0.015625f, -0.057816f, 0.015369f, 0.069153f, 0.080002f, 0.028096f, 0.094353f, 0.117684f, 0.030277f, 0.022009f, 0.024306f, 0.115586f, 0.122651f, 0.152446f, 0.172963f, 0.149310f, 0.171754f, 0.258372f, 0.105990f, 0.201392f, 0.277478f, 0.176527f, 0.210756f, 0.163710f, 0.083337f, 0.097167f, 0.109732f, 0.095521f, 0.132423f, 0.128382f, 0.081163f, 0.014169f, 0.040589f, 0.074975f, -0.004332f, 0.007250f, -0.036383f, -0.044063f, -0.130202f, -0.060484f, -0.225980f, -0.286135f, -0.227475f, -0.261237f, -0.352840f, -0.342768f, -0.201935f, -0.382684f, -0.345406f, -0.317253f, -0.356627f, -0.302898f, -0.229534f, -0.290352f, -0.212207f, -0.060672f, -0.140927f, -0.176292f, -0.068904f, -0.070854f, -0.056687f, -0.064500f, -0.027821f, 0.015292f, 0.035822f, 0.067663f, 0.090110f, 0.101347f, - 0.116348f, 0.118332f, 0.169697f, 0.102045f, 0.199897f, 0.221925f, 0.106419f, 0.205956f, 0.197585f, 0.123396f, 0.151306f, 0.217962f, 0.149302f, 0.246259f, 0.187141f, 0.233348f, 0.164439f, 0.147648f, 0.154874f, 0.142931f, 0.113412f, 0.128289f, 0.112885f, 0.087494f, 0.066895f, 0.063617f, 0.052782f, 0.020771f, -0.017790f, -0.015631f, -0.010686f, -0.080886f, -0.128729f, -0.125056f, -0.127004f, -0.139505f, -0.128281f, -0.144349f, -0.104220f, -0.108943f, -0.088645f, -0.067150f, -0.052239f, -0.060132f, -0.058481f, -0.045930f, -0.032490f, -0.036287f, -0.046374f, -0.025980f, -0.014296f, -0.028490f, -0.041458f, -0.025639f, -0.019296f, -0.026001f, -0.031409f, -0.015205f, -0.002187f, 0.009033f, -0.000399f, 0.006295f, 0.020486f, 0.020885f, -0.002032f, 0.006210f, 0.013796f, 0.009198f, -0.002982f, 0.002636f, 0.007457f, 0.005707f, -0.006052f, 0.000350f, 0.004992f, 0.008470f, 0.004564f, 0.008658f, 0.001706f, 0.005118f, 0.009537f, 0.017114f, 0.005498f, 0.003275f, 0.001455f, 0.005710f, 0.001527f, 0.004166f, -0.000230f, 0.002097f, -0.004999f, -0.008067f, -0.013759f, -0.005509f, -0.008930f, -0.007385f, - -0.012598f, -0.003627f, -0.006704f, -0.004123f, -0.003951f, 0.005249f, 0.001613f, 0.004312f, -0.001080f, 0.008785f, 0.007505f, 0.013821f, 0.006331f, 0.016051f, 0.016974f, 0.020656f, 0.011379f, 0.018823f, 0.017747f, 0.018147f, 0.009476f, 0.014206f, 0.010528f, 0.015053f, 0.007306f, 0.009311f, 0.004167f, 0.009163f, 0.001124f, 0.004362f, -0.000960f, 0.002267f, -0.004499f, -0.001832f, -0.006127f, -0.001849f, -0.007047f, -0.002836f, -0.006866f, -0.001364f, -0.005554f, -0.000365f, -0.004418f, 0.000990f, -0.003190f, 0.002012f}, - {0.020157f, 0.000971f, -0.001240f, -0.000771f, -0.001491f, -0.010355f, -0.010343f, 0.009906f, 0.002486f, -0.006041f, -0.009019f, -0.004460f, -0.006794f, -0.011940f, 0.015272f, 0.001766f, 0.005591f, 0.007499f, 0.021963f, -0.000630f, 0.003587f, -0.005337f, -0.001849f, -0.004120f, -0.014158f, 0.003115f, -0.004263f, 0.001342f, 0.010007f, -0.003978f, -0.000874f, 0.002093f, 0.001150f, -0.002418f, 0.000566f, -0.013232f, 0.002836f, -0.000378f, -0.004622f, 0.004059f, 0.001995f, -0.008925f, 0.014097f, 0.000432f, 0.002118f, 0.012961f, -0.004947f, -0.005681f, -0.012729f, -0.006561f, 0.008974f, 0.000501f, 0.009560f, -0.004685f, -0.010390f, 0.004514f, -0.009676f, -0.004432f, -0.018779f, 0.007715f, 0.006721f, 0.003976f, 0.005798f, 0.012911f, 0.003473f, -0.005741f, 0.007106f, 0.010716f, -0.006932f, 0.005282f, 0.000072f, -0.002320f, -0.003542f, -0.002947f, 0.007366f, -0.001514f, 0.008163f, -0.004115f, 0.003344f, -0.002556f, 0.003036f, 0.005824f, -0.003072f, 0.002096f, -0.002087f, 0.004700f, 0.003961f, 0.003209f, -0.001522f, 0.001086f, 0.000237f, -0.002681f, 0.001429f, 0.004595f, 0.000929f, 0.001535f, - -0.002629f, 0.001785f, -0.001385f, 0.001044f, -0.001991f, 0.000427f, 0.002768f, -0.008026f, 0.002228f, -0.004998f, -0.009982f, -0.001064f, -0.011806f, -0.014499f, -0.009026f, -0.006985f, -0.015822f, 0.000565f, -0.005658f, -0.003275f, 0.004983f, 0.016875f, 0.001641f, -0.004099f, -0.001853f, 0.002654f, -0.000239f, 0.006970f, 0.012124f, -0.001086f, 0.013603f, -0.001623f, -0.000787f, -0.001684f, 0.007792f, -0.010235f, 0.001683f, 0.001169f, -0.002397f, -0.000643f, -0.005972f, -0.010168f, 0.013988f, -0.004785f, -0.000929f, -0.002534f, 0.006232f, -0.006663f, -0.005579f, 0.002363f, 0.002168f, 0.009645f, -0.006544f, 0.007935f, -0.004558f, -0.008051f, -0.000519f, -0.003355f, 0.002284f, 0.004304f, -0.000060f, 0.005602f, 0.002803f, 0.004072f, -0.005237f, -0.006335f, -0.010306f, -0.007703f, 0.001096f, 0.012405f, 0.001691f, 0.010069f, 0.002745f, -0.005242f, 0.007073f, 0.003265f, -0.007386f, 0.013137f, 0.002321f, -0.012435f, 0.003359f, 0.005591f, 0.001242f, 0.003706f, 0.003355f, -0.008813f, 0.003335f, 0.003053f, 0.002299f, -0.000527f, 0.006602f, 0.002156f, -0.001520f, -0.002140f, 0.000091f, 0.002571f, - 0.000064f, 0.003499f, 0.000029f, 0.000159f, 0.002168f, -0.000850f, -0.001786f, -0.001248f, 0.000494f, -0.001721f, -0.001688f, 0.002259f, -0.000068f, 0.002171f, 0.002056f, -0.000527f, -0.000038f, -0.014675f, -0.013209f, 0.002868f, 0.001387f, 0.011069f, -0.008597f, 0.011384f, -0.005862f, -0.002480f, -0.017892f, -0.001101f, 0.001041f, -0.006065f, -0.001209f, 0.009565f, 0.008838f, 0.013529f, -0.003457f, -0.002036f, 0.008258f, 0.003977f, 0.007396f, -0.018299f, 0.017968f, -0.003896f, -0.000436f, 0.002889f, -0.002407f, -0.000134f, -0.001819f, -0.001247f, 0.011062f, -0.000325f, 0.014582f, -0.002542f, -0.006260f, -0.012298f, 0.001226f, -0.005572f, -0.005092f, 0.008495f, 0.006355f, 0.008880f, 0.000078f, 0.001091f, -0.013318f, -0.009456f, -0.000366f, 0.011912f, 0.003897f, -0.001550f, 0.003762f, -0.004986f, 0.012469f, -0.000697f, -0.011201f, -0.013942f, -0.005207f, 0.015585f, 0.011554f, 0.012031f, 0.005364f, 0.000434f, -0.013293f, -0.005856f, -0.002079f, -0.007659f, 0.007816f, -0.001393f, -0.003890f, 0.006865f, -0.018833f, 0.005551f, -0.002614f, 0.004403f, -0.001659f, -0.005338f, 0.008247f, 0.003191f, - -0.009030f, -0.009384f, 0.004563f, -0.002447f, 0.005354f, 0.001498f, -0.004194f, 0.002885f, 0.003339f, -0.000160f, 0.001173f, 0.000004f, 0.000222f, -0.001567f, -0.000208f, -0.002584f, -0.000152f, -0.002251f, 0.003514f, 0.002023f, -0.002985f, 0.001413f, -0.000898f, 0.000984f, 0.000811f, 0.001293f, -0.002268f, -0.001811f, 0.000482f, 0.001376f, -0.004019f, -0.002171f, 0.003625f, -0.004104f, -0.008194f, -0.001239f, -0.006368f, 0.002968f, 0.010056f, 0.004077f, 0.000264f, -0.004038f, -0.023693f, -0.015455f, -0.000603f, 0.006934f, 0.008172f, 0.000579f, 0.001577f, -0.003227f, 0.008103f, 0.003735f, 0.006475f, -0.010182f, 0.009664f, 0.005707f, -0.011180f, 0.004263f, 0.010082f, -0.000451f, 0.003200f, 0.001765f, 0.009135f, -0.007059f, 0.005388f, -0.000825f, -0.001329f, -0.008709f, 0.000455f, 0.009554f, -0.006105f, -0.004248f, -0.008344f, 0.011197f, -0.001164f, 0.002274f, -0.008771f, -0.024657f, -0.007303f, 0.003759f, 0.002207f, 0.009275f, -0.006670f, -0.003949f, -0.003835f, -0.001532f, -0.008040f, 0.000374f, -0.007265f, 0.016362f, 0.005638f, 0.013371f, -0.013485f, -0.002513f, -0.005636f, 0.012541f, - -0.003850f, -0.002156f, -0.010400f, 0.006545f, -0.000283f, -0.006771f, 0.010498f, 0.003411f, 0.001223f, 0.012258f, 0.002528f, -0.010486f, -0.001551f, 0.001428f, -0.002954f, -0.003444f, 0.000015f, -0.008880f, 0.017845f, 0.007527f, 0.002542f, 0.011309f, 0.004784f, 0.004561f, 0.008142f, -0.002197f, 0.006882f, -0.003825f, 0.001139f, 0.000872f, 0.000361f, -0.001915f, 0.001200f, 0.000696f, -0.000711f, -0.001052f, -0.001211f, 0.001022f, -0.000966f, 0.000244f, 0.005891f, 0.000789f, -0.000221f, 0.000068f, -0.000124f, -0.000632f, 0.004669f, 0.001391f, 0.003017f, 0.000377f, -0.003058f, -0.000579f, 0.006668f, -0.005324f, 0.004263f, 0.000323f, -0.002629f, 0.011129f, 0.008606f, -0.000931f, -0.015189f, -0.020446f, -0.015664f, 0.005771f, 0.000098f, -0.008863f, -0.002207f, 0.000976f, -0.001913f, 0.022881f, 0.004054f, -0.016623f, -0.004311f, -0.005002f, 0.000932f, -0.007846f, 0.013073f, -0.009738f, -0.012605f, 0.011836f, -0.004888f, 0.003224f, 0.003261f, -0.005467f, -0.014851f, 0.001962f, -0.007861f, -0.007073f, -0.007213f, -0.000941f, 0.011763f, -0.001634f, -0.002522f, 0.017190f, 0.003279f, 0.002617f, - -0.022086f, -0.002495f, 0.011968f, 0.013852f, -0.007544f, 0.003751f, 0.002024f, -0.021923f, -0.002804f, -0.001350f, -0.002103f, 0.005516f, 0.000380f, -0.012295f, 0.001736f, -0.009830f, 0.009561f, -0.003343f, 0.012270f, 0.002424f, -0.013784f, 0.006175f, 0.026269f, -0.010142f, 0.000370f, -0.019466f, 0.004860f, 0.016390f, -0.029218f, 0.004202f, -0.001945f, -0.002531f, 0.007443f, -0.004725f, -0.007521f, 0.013794f, 0.013320f, -0.011370f, -0.001236f, 0.008648f, -0.003692f, 0.002059f, 0.004215f, 0.002579f, 0.000985f, -0.003297f, 0.007499f, -0.000164f, 0.004956f, 0.000235f, 0.006720f, 0.004506f, 0.004298f, -0.000310f, 0.001573f, 0.007350f, 0.000947f, -0.001462f, 0.002728f, 0.002320f, 0.001030f, 0.006122f, -0.003207f, 0.001981f, 0.001135f, -0.001300f, 0.000607f, 0.002247f, 0.001694f, 0.000795f, -0.000409f, 0.000326f, 0.019904f, 0.002186f, 0.009073f, 0.013665f, -0.016894f, -0.005518f, -0.012826f, 0.006341f, 0.007874f, 0.014871f, 0.029538f, 0.004365f, -0.022035f, -0.002325f, -0.005327f, -0.002551f, -0.009364f, -0.000197f, -0.000790f, 0.010833f, 0.009099f, 0.002979f, -0.000494f, 0.000220f, - -0.003137f, -0.002774f, 0.012978f, -0.004351f, -0.001391f, 0.009258f, -0.000880f, 0.005370f, -0.000632f, 0.011848f, -0.008888f, -0.018432f, 0.022991f, -0.001539f, 0.005707f, -0.017260f, 0.001585f, -0.005387f, 0.025485f, 0.003770f, 0.011722f, -0.002572f, 0.010436f, 0.006608f, -0.022423f, -0.003773f, -0.012437f, -0.011172f, 0.001884f, 0.015866f, 0.002367f, -0.003399f, 0.025262f, -0.002811f, -0.013713f, -0.010916f, -0.006999f, 0.012058f, 0.037999f, -0.000241f, 0.010815f, 0.002540f, -0.011616f, -0.002791f, 0.000588f, 0.011012f, 0.017491f, 0.001423f, 0.014139f, 0.012119f, -0.022137f, 0.000602f, -0.003627f, -0.000715f, 0.011694f, -0.005178f, 0.003341f, 0.005197f, -0.001324f, -0.011702f, -0.007616f, -0.017030f, 0.004465f, 0.006612f, -0.000425f, 0.002479f, 0.002918f, 0.001935f, 0.000230f, -0.005364f, 0.001552f, 0.002377f, 0.000148f, 0.002196f, -0.002292f, 0.004395f, 0.000067f, 0.002159f, -0.000784f, -0.000911f, -0.001709f, 0.000474f, -0.000697f, 0.000698f, 0.004199f, 0.005887f, 0.005426f, 0.000660f, 0.001781f, 0.003577f, 0.002530f, 0.000033f, 0.002570f, 0.000656f, -0.000061f, 0.004439f, - -0.006418f, -0.029342f, 0.006863f, -0.003224f, 0.010242f, 0.006099f, 0.027316f, 0.005151f, -0.004855f, 0.006187f, 0.020960f, 0.022610f, 0.009718f, 0.015834f, 0.016761f, -0.013106f, -0.009693f, -0.021049f, -0.022162f, 0.002139f, 0.009914f, -0.019275f, -0.013242f, -0.001349f, -0.021691f, -0.018502f, 0.009457f, 0.002627f, -0.009510f, -0.006817f, -0.014157f, 0.011617f, 0.008955f, 0.019312f, 0.037569f, -0.004480f, -0.010369f, -0.004328f, -0.018188f, -0.000561f, -0.014127f, -0.016215f, 0.019348f, 0.001835f, 0.002841f, -0.024940f, 0.025599f, 0.004694f, -0.015613f, -0.005436f, 0.013271f, 0.000521f, 0.003029f, -0.000790f, 0.002320f, 0.007070f, -0.011921f, 0.013847f, 0.000504f, -0.010342f, -0.002600f, -0.017463f, 0.002844f, -0.017922f, -0.015395f, 0.013089f, 0.014078f, -0.014335f, -0.022008f, 0.005271f, -0.010525f, -0.001982f, -0.005745f, 0.007078f, -0.006186f, 0.009461f, 0.003317f, 0.011533f, -0.002541f, 0.008513f, 0.004749f, -0.020306f, -0.006809f, 0.004500f, 0.002773f, -0.000043f, -0.009692f, -0.005959f, -0.002793f, 0.006176f, -0.003657f, -0.003712f, 0.000438f, 0.004862f, 0.004244f, -0.000641f, - -0.000142f, -0.006125f, -0.002933f, 0.000680f, -0.001209f, -0.000995f, 0.004820f, 0.000090f, -0.000190f, -0.004620f, 0.004175f, 0.000866f, -0.001398f, -0.001241f, -0.002693f, -0.000967f, -0.002997f, 0.003832f, -0.000927f, 0.001529f, -0.001110f, 0.007509f, -0.011245f, -0.011934f, 0.014447f, -0.004347f, -0.003641f, 0.008615f, -0.012392f, -0.012682f, 0.014559f, 0.019891f, 0.000118f, -0.001056f, 0.006462f, -0.016844f, 0.028757f, -0.017650f, 0.001872f, 0.014005f, -0.006826f, 0.013073f, 0.015398f, 0.005284f, -0.016660f, 0.017826f, -0.002882f, 0.006776f, -0.013120f, -0.002286f, -0.024729f, 0.008542f, -0.014794f, 0.005723f, -0.025448f, 0.014903f, -0.018672f, -0.012754f, 0.010284f, 0.014708f, 0.004658f, 0.001718f, 0.000355f, -0.015743f, -0.014954f, -0.009299f, 0.038083f, 0.021126f, -0.006284f, -0.035440f, -0.005263f, 0.010063f, 0.020423f, -0.011628f, 0.001433f, -0.024485f, -0.008686f, -0.002981f, 0.006139f, 0.003648f, -0.005755f, -0.000400f, 0.010527f, -0.012111f, -0.000912f, -0.013814f, 0.007297f, 0.009087f, 0.026252f, 0.011275f, -0.013108f, 0.005486f, -0.007403f, -0.019995f, -0.002764f, 0.011590f, - 0.001412f, 0.032992f, -0.019107f, -0.009200f, 0.004866f, -0.017176f, 0.008543f, 0.002757f, -0.003471f, 0.016757f, 0.003919f, 0.007401f, -0.000099f, 0.000608f, -0.002841f, 0.008282f, 0.012114f, 0.002975f, -0.003786f, 0.009046f, -0.004948f, 0.002836f, -0.008747f, -0.002854f, -0.000248f, -0.011220f, -0.000426f, -0.004374f, -0.002222f, -0.004368f, -0.007509f, -0.003380f, 0.002261f, 0.002817f, 0.001719f, -0.002383f, -0.000598f, 0.004932f, -0.008436f, 0.000830f, 0.000463f, -0.025430f, -0.003562f, 0.005035f, 0.015077f, 0.007117f, 0.019638f, 0.003404f, -0.023130f, 0.014683f, -0.019542f, -0.021231f, 0.000750f, -0.002055f, 0.016214f, 0.019816f, 0.018519f, 0.026632f, 0.006714f, -0.027749f, 0.030409f, 0.016406f, -0.012043f, 0.023140f, -0.002830f, 0.002719f, -0.020225f, -0.007176f, -0.005702f, -0.009159f, 0.019687f, -0.032872f, -0.007222f, -0.015499f, -0.014447f, 0.002605f, 0.015986f, -0.007577f, -0.018716f, -0.020153f, -0.025926f, -0.026500f, -0.013221f, -0.004582f, 0.011591f, -0.020817f, -0.026675f, -0.015968f, -0.006570f, -0.013271f, -0.008615f, 0.023337f, -0.012961f, 0.002127f, 0.012632f, -0.021316f, - -0.012416f, -0.014387f, 0.023270f, -0.009907f, 0.015230f, 0.032976f, -0.003001f, 0.007351f, 0.003440f, -0.010187f, -0.013064f, -0.009136f, 0.015823f, -0.002384f, 0.018087f, 0.001020f, 0.013709f, 0.003091f, -0.022478f, 0.028059f, -0.011909f, -0.003637f, -0.023890f, 0.014744f, 0.031842f, 0.005295f, -0.004109f, 0.008349f, 0.003885f, -0.020290f, -0.009223f, 0.001154f, -0.004564f, -0.002220f, -0.008499f, -0.008578f, -0.001184f, 0.001469f, 0.001489f, 0.014663f, -0.001476f, 0.001832f, -0.007058f, 0.005552f, 0.000829f, 0.011017f, 0.005024f, 0.004956f, 0.002316f, -0.001357f, -0.004531f, -0.004039f, -0.006381f, -0.001465f, -0.004750f, 0.003290f, 0.001923f, -0.000134f, -0.003242f, -0.002957f, -0.002317f, -0.001030f, 0.001375f, -0.001202f, 0.006278f, 0.047092f, 0.029294f, 0.021740f, -0.015780f, -0.033480f, -0.009349f, 0.020774f, -0.032190f, -0.017162f, 0.000368f, 0.025332f, 0.017733f, 0.014819f, -0.018759f, 0.014206f, -0.005238f, 0.014201f, -0.003915f, 0.036516f, 0.021490f, -0.001553f, -0.033623f, -0.003197f, 0.025031f, 0.021757f, 0.000635f, 0.044214f, 0.019628f, -0.008597f, -0.000282f, 0.003278f, - -0.005467f, -0.012039f, -0.017203f, -0.002422f, -0.047820f, 0.013714f, -0.016582f, 0.002501f, -0.001946f, 0.012659f, 0.017419f, 0.000687f, 0.004435f, -0.020981f, 0.014846f, -0.007472f, 0.031209f, 0.000960f, 0.004219f, -0.076466f, -0.003578f, 0.020704f, 0.010284f, 0.022006f, -0.007748f, -0.021240f, 0.011648f, 0.004403f, -0.017881f, 0.016988f, 0.003108f, -0.016628f, -0.000042f, 0.000961f, 0.005592f, -0.005960f, -0.028374f, -0.027895f, -0.001452f, -0.009883f, 0.009134f, 0.010156f, 0.003872f, 0.010794f, -0.034685f, -0.011549f, 0.001466f, 0.007864f, 0.007994f, -0.013452f, 0.010490f, 0.002760f, -0.005234f, 0.003875f, 0.009428f, -0.006236f, 0.000991f, -0.001850f, 0.003709f, -0.006347f, -0.010629f, -0.003237f, 0.011931f, -0.009024f, 0.000976f, -0.006681f, 0.004577f, -0.002620f, 0.004011f, 0.007312f, -0.001191f, -0.006781f, 0.005410f, -0.000941f, -0.008567f, -0.004994f, 0.002605f, 0.004053f, 0.000099f, -0.003068f, 0.001279f, -0.000415f, 0.004710f, -0.002138f, 0.009465f, -0.003102f, -0.001003f, 0.005965f, -0.032429f, -0.052012f, 0.008337f, 0.018086f, 0.018661f, 0.000499f, 0.043211f, -0.030727f, - 0.010083f, 0.005977f, -0.008844f, -0.027272f, -0.011578f, -0.015489f, 0.018286f, -0.008007f, -0.016899f, -0.027760f, -0.002641f, -0.010230f, -0.005385f, -0.020928f, 0.011112f, -0.001270f, -0.009891f, 0.011342f, 0.014308f, 0.017066f, -0.022175f, 0.040416f, 0.002379f, -0.005763f, -0.024873f, -0.023270f, -0.004816f, -0.003022f, -0.024264f, -0.025174f, -0.019428f, 0.016297f, -0.011286f, 0.027000f, 0.008557f, 0.045028f, 0.015362f, 0.017113f, -0.005854f, 0.024157f, -0.004278f, 0.005834f, 0.034110f, -0.010396f, 0.012324f, -0.041089f, -0.052428f, 0.011432f, -0.002556f, -0.033212f, 0.001991f, 0.000834f, -0.045262f, 0.012726f, -0.013392f, -0.008930f, -0.017728f, 0.017056f, -0.016570f, 0.000944f, -0.001904f, 0.008222f, -0.000039f, -0.024729f, 0.014430f, -0.003566f, 0.005696f, -0.031192f, -0.043138f, -0.038332f, 0.002048f, -0.009092f, -0.043677f, -0.009180f, 0.041802f, 0.022071f, 0.009634f, 0.007985f, -0.019439f, 0.000639f, -0.004524f, 0.001872f, -0.006454f, -0.005160f, -0.000304f, -0.000477f, 0.001591f, -0.000062f, -0.013594f, -0.003254f, 0.003489f, -0.002540f, 0.006439f, 0.010680f, 0.008876f, -0.000098f, - -0.001575f, -0.004645f, 0.014116f, 0.008172f, 0.009268f, 0.007782f, 0.005654f, -0.001054f, -0.005472f, -0.004861f, 0.011003f, -0.008566f, 0.006539f, 0.009312f, 0.003578f, 0.004594f, 0.000697f, 0.002753f, -0.007533f, 0.000683f, -0.002212f, -0.006409f, 0.003038f, 0.004297f, 0.008504f, 0.031581f, 0.041492f, -0.001237f, 0.011153f, 0.026072f, 0.021593f, -0.002234f, -0.052478f, 0.036009f, -0.003373f, 0.009788f, -0.010545f, 0.018461f, -0.001102f, -0.022791f, 0.006625f, 0.041418f, 0.006563f, -0.027186f, 0.024191f, 0.017132f, 0.011457f, -0.020434f, 0.022298f, 0.016365f, 0.002208f, 0.026354f, -0.010221f, 0.007078f, 0.042703f, 0.030946f, 0.001553f, 0.009820f, 0.021148f, -0.039990f, -0.007744f, -0.002511f, -0.005919f, -0.035023f, 0.009344f, 0.010659f, 0.002395f, -0.027137f, -0.000038f, -0.046493f, 0.002888f, -0.033200f, -0.006172f, 0.017213f, -0.013782f, -0.020060f, -0.015770f, 0.009970f, 0.008569f, -0.018489f, 0.007812f, -0.006610f, 0.023414f, -0.011844f, -0.013026f, 0.012079f, 0.021928f, -0.001952f, 0.009829f, 0.008415f, -0.050356f, -0.001043f, -0.003253f, -0.025786f, 0.003192f, 0.033250f, - 0.010601f, -0.009137f, -0.003566f, 0.024353f, 0.017503f, 0.010744f, -0.006302f, 0.038562f, 0.000931f, -0.031673f, 0.004832f, 0.038609f, 0.020485f, 0.019723f, 0.012107f, 0.002340f, -0.008892f, -0.010614f, 0.007527f, 0.006510f, 0.009732f, 0.014692f, -0.002954f, 0.011672f, 0.007567f, 0.001430f, -0.001314f, -0.000861f, 0.005758f, -0.004869f, -0.001334f, -0.004814f, 0.000562f, -0.002086f, 0.006322f, -0.011223f, 0.002700f, 0.004318f, 0.001974f, 0.009221f, -0.014912f, -0.006141f, 0.003410f, 0.003405f, -0.000793f, 0.009465f, -0.002537f, -0.002575f, -0.003532f, 0.001484f, 0.006652f, 0.007319f, -0.007864f, 0.001763f, 0.004902f, -0.007499f, -0.004181f, -0.003907f, -0.003131f, 0.020988f, -0.047335f, 0.020546f, -0.048995f, -0.056458f, -0.037789f, 0.003173f, -0.032363f, 0.031494f, -0.010472f, -0.037726f, -0.002134f, -0.009041f, 0.004386f, 0.007907f, -0.009816f, -0.004233f, 0.024527f, -0.006847f, 0.008828f, -0.013106f, -0.014629f, 0.041098f, -0.014461f, -0.003921f, -0.002082f, 0.009913f, 0.024012f, -0.049990f, -0.004312f, 0.027860f, 0.025327f, 0.025283f, 0.002352f, -0.008486f, 0.051264f, 0.018390f, - 0.015533f, 0.021065f, 0.008354f, -0.006659f, -0.000554f, 0.031416f, 0.009009f, -0.021023f, 0.010559f, 0.057260f, -0.030811f, 0.039783f, 0.013392f, -0.059037f, 0.013509f, 0.040796f, -0.005306f, 0.018727f, -0.001178f, -0.044586f, 0.021921f, 0.057040f, 0.002227f, 0.039006f, -0.024176f, 0.034585f, 0.027088f, -0.000237f, -0.006043f, 0.031796f, 0.015518f, -0.040265f, 0.039951f, -0.009455f, -0.010324f, 0.025496f, -0.013012f, -0.014063f, -0.019251f, 0.007039f, 0.001132f, 0.007471f, -0.002718f, -0.007643f, 0.029740f, -0.026832f, 0.003726f, -0.005050f, -0.009995f, -0.021822f, -0.022330f, 0.013181f, -0.002652f, -0.013217f, -0.020047f, -0.015354f, -0.028126f, -0.018642f, -0.002120f, -0.012729f, -0.009031f, -0.001397f, -0.015107f, 0.006487f, -0.013434f, -0.012189f, -0.004529f, 0.003701f, 0.003417f, -0.005865f, -0.001895f, -0.019425f, 0.006854f, -0.020410f, 0.014887f, -0.004841f, -0.002452f, -0.008666f, -0.006131f, -0.000519f, 0.022823f, 0.012507f, -0.003606f, 0.006202f, 0.015336f, 0.009446f, -0.010199f, -0.003818f, 0.005298f, -0.007738f, 0.012272f, 0.003473f, -0.006383f, 0.005026f, -0.018639f, -0.031671f, - 0.076773f, 0.038747f, -0.090626f, -0.036640f, 0.009055f, -0.014431f, 0.025524f, 0.031157f, 0.032378f, 0.038129f, -0.023624f, 0.071784f, -0.011238f, 0.002308f, -0.023843f, 0.027369f, 0.035281f, -0.025286f, -0.029936f, -0.005680f, -0.017459f, 0.003679f, 0.013762f, 0.002717f, -0.019038f, -0.006486f, 0.028837f, -0.001825f, 0.014316f, 0.004098f, 0.034804f, 0.053457f, 0.019565f, -0.024935f, -0.060161f, -0.004482f, -0.010645f, 0.007239f, -0.014325f, 0.020203f, 0.032538f, 0.003518f, -0.012778f, -0.026720f, 0.064682f, 0.057553f, -0.008092f, 0.028377f, -0.016047f, -0.020304f, -0.063341f, 0.035256f, -0.029839f, -0.006219f, -0.002409f, -0.019095f, 0.010472f, 0.039120f, 0.005367f, -0.016484f, 0.017777f, -0.007337f, -0.026466f, 0.039992f, 0.007474f, -0.054131f, 0.069518f, -0.046917f, -0.025965f, 0.027636f, 0.027265f, 0.023848f, -0.000147f, -0.057852f, -0.005571f, 0.005676f, -0.003940f, -0.018641f, 0.010764f, -0.009486f, 0.003586f, 0.007800f, -0.024793f, 0.028557f, 0.018958f, 0.009937f, 0.003208f, -0.010943f, -0.009070f, -0.000019f, 0.009325f, 0.001411f, 0.007063f, -0.004034f, -0.019341f, 0.006226f, - -0.028090f, -0.008183f, 0.008187f, -0.007594f, 0.014485f, -0.012217f, -0.002459f, -0.010300f, 0.011420f, 0.001586f, 0.014175f, 0.017690f, 0.011211f, 0.001035f, -0.013578f, 0.009967f, 0.015370f, -0.002623f, -0.002457f, -0.016563f, -0.008138f, 0.020385f, -0.007384f, 0.013941f, -0.001767f, -0.006930f, 0.006431f, 0.007198f, -0.001020f, -0.010727f, 0.019893f, -0.010323f, -0.024897f, 0.002802f, 0.035525f, 0.010571f, -0.048270f, -0.038666f, -0.009294f, 0.060380f, 0.006278f, -0.028959f, -0.077882f, -0.021633f, -0.003569f, 0.018508f, 0.053548f, 0.041072f, -0.005766f, 0.000530f, 0.035214f, 0.028706f, 0.001300f, 0.007885f, -0.105090f, -0.066218f, -0.032314f, -0.051888f, 0.004473f, -0.028937f, 0.046447f, -0.010627f, -0.003686f, -0.000213f, -0.018764f, -0.021364f, 0.033642f, 0.021003f, 0.011879f, -0.004751f, -0.016085f, -0.014356f, 0.016735f, -0.037636f, -0.014152f, 0.006668f, -0.013099f, -0.018326f, 0.015654f, -0.054407f, -0.076188f, 0.018116f, 0.023743f, 0.029557f, -0.044511f, -0.023637f, 0.024572f, 0.009352f, -0.074274f, -0.065188f, 0.003912f, -0.031547f, -0.032686f, 0.012142f, -0.060015f, 0.030432f, - -0.023246f, 0.025010f, 0.023948f, -0.014876f, -0.033847f, -0.078100f, -0.027429f, -0.023465f, 0.043790f, -0.037894f, -0.024763f, 0.013365f, 0.044766f, 0.026122f, 0.000202f, -0.015257f, -0.005066f, 0.013406f, -0.013486f, 0.045286f, -0.028109f, -0.022000f, -0.010675f, -0.003940f, 0.012409f, -0.033367f, 0.019608f, 0.015059f, -0.014017f, -0.023366f, 0.005396f, -0.001358f, 0.022710f, -0.029182f, -0.038093f, -0.009658f, 0.005991f, -0.021058f, -0.003200f, -0.025464f, 0.001075f, 0.006209f, -0.011480f, 0.017763f, -0.004806f, -0.012591f, 0.005502f, -0.008511f, 0.005171f, -0.007250f, -0.026458f, -0.001162f, 0.001940f, 0.025254f, 0.019809f, -0.012151f, 0.000100f, -0.001356f, -0.014917f, -0.019098f, 0.009289f, -0.004846f, -0.006938f, 0.005780f, 0.030966f, 0.042533f, -0.006801f, -0.057217f, 0.025922f, -0.008592f, -0.023868f, -0.049345f, 0.014722f, 0.021077f, -0.073158f, 0.027600f, 0.025995f, 0.065946f, 0.005960f, -0.016578f, 0.004075f, -0.080795f, -0.023471f, -0.009872f, 0.001028f, 0.014707f, -0.027633f, 0.049406f, 0.019779f, 0.061077f, -0.012335f, 0.053700f, 0.034492f, 0.021151f, 0.048978f, 0.024694f, - 0.032290f, 0.041520f, 0.001738f, -0.054729f, -0.051577f, 0.010303f, 0.058835f, 0.042368f, -0.078647f, -0.002488f, -0.013427f, -0.011284f, -0.008379f, -0.054665f, 0.013791f, -0.039028f, 0.034729f, -0.026213f, 0.078549f, -0.021003f, -0.113098f, -0.012321f, -0.039098f, 0.022132f, 0.016577f, 0.031831f, 0.073086f, 0.016027f, -0.010165f, 0.039766f, -0.023908f, 0.081513f, 0.013558f, 0.054398f, 0.025523f, 0.004592f, -0.021004f, -0.019202f, 0.134145f, 0.000370f, -0.093033f, -0.019099f, 0.073879f, -0.044775f, 0.009450f, -0.020920f, 0.032268f, 0.067590f, 0.039017f, -0.079063f, -0.005371f, -0.077858f, 0.010440f, -0.011208f, -0.046099f, -0.005964f, -0.012700f, -0.020858f, -0.000443f, -0.040201f, -0.043815f, 0.014436f, 0.016088f, -0.002787f, -0.049011f, 0.034515f, -0.043472f, -0.067441f, -0.028799f, 0.015943f, -0.016922f, -0.030463f, -0.038686f, 0.006316f, 0.015825f, -0.035511f, -0.026934f, 0.012117f, -0.015775f, -0.028841f, 0.022527f, 0.017480f, -0.002058f, -0.004347f, 0.000908f, -0.007273f, -0.011888f, -0.013109f, 0.004045f, -0.026802f, 0.014769f, -0.010184f, 0.005337f, -0.033887f, 0.036177f, 0.016840f, - -0.077599f, -0.027987f, -0.088013f, 0.014105f, 0.076030f, -0.055819f, -0.053932f, 0.051592f, 0.023046f, -0.086110f, -0.083201f, 0.027216f, 0.003527f, 0.012896f, 0.027206f, -0.002631f, -0.025567f, -0.011776f, 0.051797f, -0.036888f, 0.064154f, 0.011388f, -0.016062f, 0.014687f, 0.036706f, 0.000665f, -0.012088f, -0.068763f, -0.031373f, 0.008517f, -0.038124f, 0.032955f, 0.047189f, 0.004260f, 0.007102f, -0.048975f, 0.058497f, -0.020053f, -0.027386f, 0.049191f, -0.019454f, 0.000887f, -0.035573f, -0.002742f, -0.025265f, -0.084759f, 0.028504f, -0.008801f, 0.062727f, 0.082335f, -0.002056f, -0.013783f, -0.052556f, -0.015567f, -0.015254f, 0.078380f, -0.074646f, -0.051315f, -0.123164f, 0.003633f, -0.051500f, 0.014805f, 0.041560f, -0.022118f, -0.007256f, 0.084186f, 0.052933f, 0.038804f, 0.005695f, 0.004568f, 0.062436f, -0.067905f, -0.003875f, 0.020247f, -0.008999f, 0.038629f, 0.017286f, 0.161737f, 0.024562f, -0.043245f, -0.003370f, -0.029405f, -0.080252f, -0.030724f, 0.002047f, 0.014201f, -0.016195f, -0.015738f, -0.015937f, -0.055984f, -0.001633f, -0.003961f, -0.031026f, 0.008732f, 0.019286f, -0.047908f, - 0.002256f, -0.032284f, 0.011986f, -0.001563f, -0.012387f, -0.005858f, 0.001882f, 0.029321f, 0.015773f, 0.001961f, 0.030776f, -0.018817f, -0.005062f, -0.008603f, 0.028899f, 0.020644f, 0.013244f, 0.031360f, 0.013321f, -0.021247f, -0.011488f, -0.002933f, 0.014236f, -0.026910f, -0.008085f, 0.001540f, -0.032084f, 0.034575f, -0.009451f, 0.005503f, 0.074570f, -0.054880f, 0.019077f, -0.018994f, -0.026463f, -0.026122f, 0.112580f, -0.015358f, 0.055283f, -0.044903f, 0.076790f, -0.026947f, 0.001139f, 0.041017f, 0.044322f, 0.105504f, 0.005025f, 0.016917f, 0.015500f, -0.045388f, 0.054596f, 0.016488f, -0.032205f, 0.052802f, -0.022357f, 0.066600f, 0.051152f, -0.016379f, 0.044478f, 0.001529f, 0.041505f, 0.007816f, 0.070467f, -0.043712f, 0.035080f, -0.071979f, -0.018025f, 0.023336f, 0.076352f, -0.004010f, 0.006014f, 0.032287f, -0.000429f, -0.026495f, -0.092305f, -0.057670f, 0.015552f, -0.040302f, -0.001957f, 0.028324f, -0.080500f, 0.048322f, -0.003757f, 0.057592f, -0.028050f, -0.055482f, -0.009796f, 0.150098f, 0.033997f, -0.138261f, 0.023896f, 0.034046f, 0.008244f, 0.148518f, -0.009364f, -0.111082f, - 0.113880f, -0.039535f, -0.007740f, 0.124053f, -0.013836f, 0.081221f, 0.012849f, -0.075434f, 0.002732f, 0.126764f, -0.104813f, 0.053656f, -0.064424f, -0.073290f, 0.052986f, 0.031004f, -0.066495f, -0.025397f, -0.041513f, -0.023493f, -0.024507f, 0.010671f, -0.040970f, -0.009595f, 0.015539f, -0.042764f, -0.030342f, 0.020197f, -0.049224f, -0.013201f, 0.016530f, 0.005345f, -0.011857f, 0.035049f, -0.016458f, -0.013796f, -0.018322f, -0.034480f, 0.015308f, -0.022795f, -0.025279f, -0.007343f, 0.003494f, 0.047073f, -0.000579f, 0.012156f, -0.040995f, 0.002471f, 0.050722f, -0.011325f, -0.007010f, -0.005815f, 0.001621f, 0.001825f, 0.035068f, -0.020873f, -0.023121f, -0.012916f, -0.035440f, -0.042812f, 0.009828f, -0.022336f, -0.018215f, 0.024142f, 0.007168f, 0.015147f, -0.007117f, -0.108596f, -0.010242f, 0.019194f, -0.043124f, -0.009907f, -0.117753f, 0.075541f, 0.110896f, -0.047388f, 0.014165f, -0.083623f, -0.252164f, -0.045755f, 0.009816f, 0.129254f, 0.104903f, -0.102362f, -0.094954f, -0.091749f, -0.078944f, -0.052294f, 0.064422f, -0.009305f, 0.144121f, 0.101006f, -0.031227f, -0.118544f, -0.303741f, -0.193229f, - 0.011782f, 0.337299f, 0.253153f, 0.048919f, -0.133367f, -0.327613f, -0.339707f, -0.022386f, 0.194840f, 0.306490f, 0.331738f, 0.036610f, -0.109791f, -0.134358f, -0.183021f, -0.160895f, 0.009038f, 0.114987f, 0.208105f, 0.146815f, 0.113626f, -0.148323f, -0.186415f, -0.214520f, -0.262919f, 0.031420f, 0.310875f, 0.310494f, 0.060778f, -0.109172f, -0.295348f, -0.382616f, -0.132038f, 0.031735f, 0.141087f, 0.353114f, 0.127313f, 0.001176f, -0.195581f, -0.156431f, -0.068695f, 0.081770f, 0.135310f, 0.242945f, 0.061041f, 0.127753f, -0.012190f, -0.159792f, -0.135780f, 0.009324f, 0.153543f, 0.171516f, -0.079442f, -0.145962f, -0.183105f, -0.043739f, 0.027483f, 0.044515f, 0.025492f, -0.088861f, -0.080442f, -0.030907f, 0.055662f, 0.001439f, -0.001273f, 0.014334f, 0.044060f, 0.038784f, 0.026650f, -0.014546f, -0.112447f, -0.071918f, 0.005973f, 0.058114f, 0.102956f, 0.052269f, -0.032054f, -0.068567f, -0.094648f, -0.056569f, -0.039451f, -0.047147f, 0.103177f, 0.111526f, 0.118622f, 0.101703f, -0.049148f, -0.191860f, -0.166102f, -0.087076f, 0.071957f, 0.245075f, 0.233910f, 0.014291f, -0.151916f, -0.232529f, - -0.212849f, -0.012741f, 0.114070f, 0.110797f, 0.050650f, 0.049148f, 0.000055f, -0.061831f, -0.077953f, -0.094221f, -0.017122f, 0.089562f, 0.106166f, 0.077850f, 0.006983f, -0.072339f, -0.068864f, -0.030693f, 0.054824f, 0.040469f, -0.094020f, 0.000099f, 0.049830f, -0.040177f, 0.054983f, -0.003118f, -0.008915f, -0.004791f, 0.011878f, 0.040148f, -0.015135f, 0.047479f, 0.033896f, 0.018815f, 0.022898f, 0.015738f, -0.003179f, -0.028560f, 0.046251f, -0.001468f, 0.028623f, -0.017310f, 0.025605f, -0.009294f, -0.002490f, 0.015874f, -0.021337f, -0.024420f, 0.004520f, -0.010958f, 0.037674f, 0.035394f, -0.032110f, 0.015769f, -0.018692f, 0.021986f, 0.001549f, 0.014179f, 0.006763f, 0.018642f, -0.022535f, 0.015631f, -0.026092f, -0.012527f, -0.002677f, -0.003792f, 0.023053f, -0.042179f, -0.007084f, -0.017819f, -0.035800f, -0.003963f, -0.013391f, 0.008143f, 0.036283f, -0.011239f, -0.047624f, 0.007177f, 0.031389f, 0.058381f, -0.001448f, 0.004555f, -0.030676f, -0.024820f, 0.028642f, 0.001867f, -0.009265f, 0.000207f, 0.049360f, 0.020718f, 0.016382f, 0.025421f, 0.045591f, -0.050932f, 0.021276f, -0.009188f, - -0.073899f, -0.009337f, 0.059303f, -0.011351f, 0.052902f, -0.002883f, 0.033319f, -0.038564f, 0.024717f, -0.026405f, -0.006450f, 0.050361f, -0.013397f, 0.004153f, 0.002314f, -0.000756f, 0.019865f, -0.000605f, -0.006363f, -0.004851f, -0.000138f, -0.004114f, 0.010595f, 0.014094f, 0.022615f, 0.001913f, -0.016964f, -0.008726f, -0.022303f, 0.008385f, -0.023163f, 0.012729f, 0.011375f, -0.008042f, 0.015014f, 0.003886f, -0.024043f, -0.000070f, 0.001299f, 0.007618f, -0.042218f, 0.014745f, 0.011012f, 0.003335f, 0.000171f, -0.012499f, 0.015623f, -0.022494f, 0.023595f, -0.002197f, -0.001296f, 0.005520f, -0.009243f, 0.018320f, -0.019655f, 0.005440f, -0.010203f, 0.011327f, -0.035415f, 0.089342f, 0.151829f, 0.013827f, -0.100578f, 0.034298f, -0.008261f, 0.124534f, 0.057385f, 0.122438f, -0.012179f, -0.056945f, -0.016453f, 0.027828f, 0.050386f, 0.040854f, -0.023260f, 0.004801f, 0.020988f, 0.016645f, 0.047579f, -0.032862f, 0.007438f, -0.044620f, -0.008074f, 0.001571f, 0.011005f, 0.024666f, 0.004517f, -0.018472f, 0.036298f, -0.002452f, -0.033369f, 0.045572f, -0.008303f, -0.014974f, 0.011172f, -0.005641f, - 0.034056f, 0.056393f, 0.000701f, 0.015482f, -0.019285f, -0.010605f, 0.031398f, 0.024241f, 0.025897f, 0.006308f, -0.017460f, -0.033774f, -0.036380f, -0.037791f, 0.030478f, 0.035248f, 0.032884f, 0.051045f, 0.052913f, 0.024243f, 0.002234f, -0.045627f, 0.028066f, -0.003891f, -0.043006f, 0.053540f, -0.004420f, 0.035610f, 0.017501f, -0.051371f, 0.013978f, -0.014439f, 0.010683f, 0.036701f, 0.006102f, -0.042717f, -0.031718f, -0.024697f, -0.046545f, 0.029237f, -0.003341f, 0.049584f, -0.001005f, 0.009119f, 0.000467f, -0.024894f, -0.017317f, 0.010424f, -0.039970f, 0.013187f, -0.000886f, -0.006406f, 0.013764f, -0.020670f, 0.012894f, 0.009958f, -0.002230f, -0.017284f, 0.023918f, -0.004854f, 0.021173f, -0.035182f, -0.027318f, -0.014545f, -0.014572f, 0.018578f, -0.007685f, -0.003165f, -0.005060f, -0.016903f, -0.010328f, -0.009850f, -0.000363f, 0.035210f, 0.004131f, -0.007197f, -0.000924f, -0.018265f, 0.013972f, -0.009520f, -0.002286f, -0.006055f, 0.015716f, 0.000068f, 0.001788f, -0.001935f, -0.011969f, -0.006411f, 0.017213f, -0.004686f, 0.012243f, -0.002159f, 0.006388f, -0.009518f, -0.053184f, -0.121093f, - 0.008837f, 0.166168f, 0.221222f, 0.188692f, 0.131237f, -0.006168f, 0.008767f, -0.097091f, -0.114148f, -0.193491f, -0.145097f, -0.155473f, -0.049536f, 0.012463f, 0.051091f, 0.084140f, 0.211012f, 0.174424f, 0.118527f, 0.037571f, -0.017910f, -0.076659f, -0.055987f, -0.079680f, -0.099921f, -0.056550f, -0.056868f, -0.071408f, -0.032314f, -0.047189f, 0.010523f, 0.032311f, 0.028306f, 0.089017f, 0.083383f, 0.072812f, 0.048671f, 0.055008f, 0.035650f, 0.065998f, 0.016708f, 0.057025f, 0.003219f, -0.015643f, -0.099885f, -0.044322f, -0.120524f, -0.141477f, -0.156908f, -0.124121f, -0.092135f, -0.033480f, 0.024451f, 0.089981f, 0.097159f, 0.075496f, 0.157230f, 0.126330f, 0.136288f, 0.125044f, 0.117873f, 0.046490f, 0.076472f, -0.030977f, -0.074735f, -0.079624f, -0.185469f, -0.186572f, -0.179042f, -0.191802f, -0.157033f, -0.054469f, -0.025869f, 0.041929f, 0.107433f, 0.115754f, 0.142796f, 0.170620f, 0.153388f, 0.118470f, 0.108828f, 0.079098f, 0.030456f, -0.003486f, -0.063366f, -0.094821f, -0.094393f, -0.109013f, -0.090310f, -0.102576f, -0.105677f, -0.090315f, -0.069251f, -0.035553f, 0.004835f, 0.045835f, - 0.089948f, 0.083085f, 0.083139f, 0.096726f, 0.108123f, 0.082690f, 0.084003f, 0.036719f, -0.038395f, -0.029027f, -0.068017f, -0.087867f, -0.072290f, -0.060448f, -0.041507f, -0.053500f, -0.037737f, 0.004199f, 0.011834f, 0.018171f, 0.047854f, 0.041096f, 0.027050f, 0.006124f, 0.018475f, 0.017709f, 0.006076f, 0.022522f, -0.013589f, -0.016136f, -0.012024f, 0.008284f, -0.001895f, 0.000091f, -0.000565f, -0.003329f, -0.016467f, -0.012265f, -0.004366f, 0.016209f, 0.000568f, 0.007345f, 0.003123f, -0.009206f, -0.010371f, -0.005884f, -0.007090f, 0.002199f, 0.000226f, 0.002709f, 0.002420f, 0.003781f, -0.003543f, 0.003922f, -0.002101f, 0.000893f, 0.003518f, 0.010361f, 0.004972f, 0.012081f, 0.002176f, -0.000246f, -0.002899f, -0.002616f, -0.007664f, -0.000700f, -0.004078f, -0.002148f, -0.005874f, -0.000497f, -0.002742f, 0.001250f, -0.005372f, -0.000849f, -0.000011f, 0.003944f, -0.002503f, -0.000787f, -0.003831f, 0.002149f, 0.000222f, 0.005175f, 0.005141f, 0.007089f, 0.002282f, 0.004640f, -0.000230f, 0.000229f, -0.002216f, 0.002268f, -0.001576f, 0.001593f, -0.001423f, 0.000811f, -0.004595f, -0.003115f, - -0.008294f, -0.003965f, -0.004846f, -0.000826f, -0.003181f, 0.001460f, -0.000819f, 0.002841f, 0.000796f, 0.005867f, 0.003108f, 0.006299f, 0.003090f, 0.005757f, 0.002456f, 0.004183f, -0.000390f, 0.000378f, -0.005000f, -0.002576f, -0.005944f, -0.003434f, -0.006886f, -0.002363f, -0.004193f, 0.000562f, -0.000580f, 0.003512f, 0.000478f, 0.003931f, 0.000788f, 0.003579f, 0.000171f, 0.003046f, -0.000696f, 0.002090f, -0.001437f, 0.001356f, -0.001946f, 0.001210f, -0.001952f, 0.001245f, -0.001893f, 0.001344f, -0.001716f, 0.001531f} - }, - { - {0.019427f, 0.010215f, -0.001089f, 0.006681f, 0.001758f, 0.001468f, -0.021126f, -0.009296f, -0.010430f, 0.008184f, -0.001069f, -0.006961f, 0.007574f, 0.007676f, 0.000575f, 0.007366f, -0.003044f, -0.000332f, -0.000373f, -0.004672f, -0.002329f, -0.010265f, 0.005326f, -0.015139f, 0.006351f, -0.007936f, 0.006473f, 0.011892f, 0.005526f, -0.002363f, -0.003326f, 0.008765f, -0.001368f, 0.000326f, 0.008432f, -0.009056f, -0.000204f, -0.003121f, -0.005110f, 0.001012f, -0.001201f, 0.001768f, 0.008639f, 0.014057f, -0.004441f, 0.000166f, 0.011802f, 0.000803f, 0.003143f, -0.004417f, -0.006532f, -0.001059f, 0.002026f, -0.011190f, -0.002864f, 0.005707f, 0.000803f, 0.002001f, 0.003493f, -0.001688f, -0.003421f, -0.003377f, -0.003844f, 0.004197f, 0.003563f, -0.002144f, -0.006314f, -0.007917f, 0.003908f, -0.000029f, -0.006447f, 0.006749f, -0.001453f, -0.000555f, 0.001086f, 0.001832f, -0.003197f, 0.003995f, -0.004321f, -0.001577f, 0.005397f, -0.003805f, 0.002174f, -0.006370f, -0.004754f, -0.002413f, -0.001515f, -0.000508f, 0.000883f, -0.002635f, -0.003129f, -0.000427f, -0.001768f, 0.000597f, -0.000636f, -0.000685f, - -0.000831f, 0.000556f, 0.000217f, -0.000777f, -0.001263f, -0.000894f, -0.000453f, -0.000236f, -0.000672f, -0.000566f, -0.000962f, 0.000788f, -0.001423f, -0.001016f, 0.001169f, -0.006982f, -0.001886f, 0.000030f, -0.006564f, -0.006692f, -0.003973f, 0.015974f, -0.011210f, -0.004644f, -0.007819f, -0.014312f, 0.005364f, 0.002427f, 0.000584f, 0.012243f, 0.011641f, 0.011616f, 0.003787f, -0.002199f, 0.001829f, 0.008752f, -0.003724f, 0.003763f, 0.004461f, -0.010371f, 0.014767f, 0.002839f, 0.004613f, 0.010879f, -0.004163f, -0.010894f, 0.000763f, 0.007367f, -0.005177f, -0.002380f, -0.006912f, 0.007334f, -0.000160f, -0.000767f, -0.012034f, -0.000540f, -0.001437f, 0.007411f, 0.003824f, -0.006632f, 0.013227f, 0.004855f, 0.002776f, 0.004608f, -0.002123f, 0.007385f, -0.002853f, 0.000352f, -0.009180f, -0.011016f, 0.008851f, 0.006895f, 0.012250f, 0.001181f, 0.003327f, -0.009475f, -0.014617f, -0.007202f, -0.004365f, -0.004278f, -0.006737f, -0.005839f, 0.003051f, -0.001705f, 0.004475f, -0.005507f, -0.002076f, 0.002408f, 0.002765f, -0.001660f, 0.007487f, 0.002259f, -0.005567f, 0.011250f, -0.004383f, 0.003458f, - 0.014232f, 0.003026f, 0.001979f, -0.004405f, 0.000229f, -0.004836f, -0.005746f, -0.000932f, 0.003300f, -0.000065f, 0.000452f, 0.000178f, -0.001535f, -0.000499f, 0.000174f, -0.001416f, 0.003362f, 0.002139f, -0.001214f, -0.000302f, 0.000128f, 0.000881f, 0.000504f, -0.002205f, -0.001163f, -0.000524f, 0.000278f, 0.000997f, -0.000998f, -0.001581f, 0.001401f, -0.000806f, 0.001082f, -0.000556f, -0.000850f, -0.001091f, -0.013753f, -0.012862f, 0.007547f, 0.001692f, 0.010560f, -0.016310f, -0.002276f, -0.006498f, 0.001772f, 0.019372f, 0.011091f, -0.016982f, 0.006439f, 0.001588f, -0.007051f, -0.007890f, -0.009598f, -0.015639f, 0.000577f, 0.001851f, -0.005772f, 0.002753f, -0.003319f, 0.000576f, 0.004728f, 0.003618f, 0.010085f, -0.008829f, 0.015868f, -0.009687f, 0.009221f, 0.007281f, -0.005923f, 0.004252f, 0.000782f, 0.006566f, -0.002624f, 0.003421f, 0.006057f, 0.001997f, 0.000952f, -0.002444f, 0.004722f, 0.001392f, -0.002094f, 0.011256f, -0.014733f, 0.000993f, -0.008921f, 0.017733f, 0.006279f, -0.015521f, 0.006034f, 0.020277f, -0.019071f, -0.009121f, 0.002307f, -0.001591f, -0.007228f, 0.006027f, - -0.002528f, 0.013492f, -0.011364f, -0.001159f, -0.003755f, -0.000815f, -0.000684f, 0.013034f, -0.012115f, -0.004057f, -0.001310f, -0.012553f, 0.006754f, 0.005186f, 0.013508f, 0.005461f, 0.011501f, 0.010325f, 0.001708f, -0.004224f, 0.003258f, -0.000408f, -0.001441f, -0.003161f, -0.000296f, -0.004820f, -0.001910f, -0.001126f, -0.006685f, 0.004199f, 0.000352f, -0.004713f, -0.000794f, -0.003832f, 0.000346f, -0.000217f, 0.002565f, -0.000956f, -0.001519f, 0.000261f, -0.002159f, -0.000134f, 0.002209f, 0.000756f, -0.000500f, -0.001572f, 0.006098f, -0.009447f, 0.001160f, -0.005926f, 0.006239f, 0.002272f, -0.009600f, 0.027621f, -0.017607f, 0.005540f, 0.029832f, -0.021113f, 0.009776f, -0.000562f, 0.009710f, -0.002607f, -0.018133f, -0.003971f, 0.014847f, 0.013351f, 0.003625f, -0.000150f, 0.007476f, 0.003677f, 0.000192f, 0.006222f, 0.006197f, -0.005221f, 0.007915f, -0.002257f, 0.012523f, -0.010201f, -0.015779f, 0.003307f, -0.013790f, 0.004683f, 0.000156f, -0.003963f, -0.004487f, -0.006303f, -0.009426f, 0.001756f, 0.003175f, 0.000276f, 0.002256f, 0.002654f, -0.005864f, -0.012087f, 0.009334f, 0.002052f, - 0.001427f, -0.000658f, 0.013767f, 0.002724f, 0.005687f, 0.014607f, -0.009154f, 0.003479f, 0.000449f, 0.004348f, 0.010138f, 0.007972f, -0.013544f, -0.011827f, -0.003176f, -0.006798f, -0.001696f, 0.000385f, -0.005926f, 0.002968f, -0.010875f, 0.000425f, -0.010473f, 0.004994f, 0.004880f, -0.006075f, -0.008013f, 0.000764f, 0.004129f, 0.000687f, -0.009242f, 0.001164f, -0.005372f, 0.003780f, 0.003043f, 0.001331f, -0.001890f, -0.002667f, 0.001609f, -0.000391f, -0.001173f, -0.000190f, -0.002538f, -0.002100f, -0.006426f, -0.001679f, 0.005461f, 0.002339f, -0.001840f, -0.001272f, 0.003741f, -0.001512f, 0.000969f, -0.001909f, -0.000154f, -0.000599f, -0.000017f, -0.002417f, -0.001730f, -0.001028f, -0.000881f, -0.000987f, -0.001180f, 0.000010f, -0.000865f, -0.001607f, -0.001418f, 0.000561f, 0.002645f, 0.000860f, 0.008344f, -0.003358f, 0.007521f, -0.001121f, 0.003564f, -0.004168f, 0.000171f, -0.002612f, 0.002250f, -0.001068f, -0.017593f, 0.013444f, 0.008022f, 0.021937f, -0.014529f, 0.009197f, -0.017888f, -0.002648f, 0.010310f, 0.011923f, -0.012668f, 0.003878f, -0.014617f, 0.001414f, -0.017074f, 0.005829f, - -0.012886f, -0.015163f, -0.014267f, 0.007331f, -0.011601f, 0.000843f, -0.013541f, 0.002068f, 0.001552f, -0.001628f, -0.010017f, 0.006405f, 0.008074f, 0.005393f, 0.003554f, -0.009942f, 0.005217f, -0.010444f, -0.003802f, 0.006981f, -0.000173f, -0.001144f, -0.003298f, -0.000064f, 0.006462f, -0.007613f, -0.015751f, -0.002894f, 0.004335f, -0.002893f, -0.011782f, -0.011164f, -0.016727f, 0.004257f, -0.005107f, -0.014940f, 0.010536f, -0.009450f, -0.010010f, 0.018830f, -0.007079f, -0.003297f, 0.001111f, -0.002998f, -0.006430f, 0.001842f, -0.010544f, -0.004675f, -0.008936f, -0.006378f, -0.003206f, 0.005854f, 0.013582f, 0.001059f, 0.007999f, 0.001051f, 0.005864f, 0.004708f, 0.010890f, -0.000479f, -0.000669f, 0.001509f, 0.003762f, -0.001956f, 0.000066f, -0.000763f, 0.007845f, 0.000019f, 0.003571f, 0.000938f, 0.001169f, -0.001073f, 0.001422f, -0.004732f, 0.005113f, 0.000469f, -0.000320f, -0.003807f, -0.001484f, -0.005262f, 0.002225f, -0.002525f, 0.001468f, -0.000419f, 0.005152f, -0.002388f, 0.000666f, -0.004534f, -0.004349f, -0.000030f, -0.002144f, 0.001691f, 0.003120f, 0.001045f, 0.001348f, -0.002116f, - 0.000451f, 0.014200f, -0.020484f, 0.003634f, 0.018065f, -0.006737f, 0.019780f, 0.005427f, 0.001328f, -0.005771f, -0.013667f, -0.009104f, 0.023543f, -0.012648f, -0.000013f, -0.004401f, 0.001932f, 0.014072f, 0.012784f, -0.007725f, 0.018425f, 0.018256f, -0.008512f, -0.004543f, 0.011255f, -0.009442f, -0.008122f, -0.000616f, -0.012535f, -0.000307f, -0.003611f, 0.001615f, 0.022107f, 0.007489f, 0.001318f, -0.010085f, -0.029100f, -0.003569f, 0.016567f, 0.004030f, -0.010814f, 0.008406f, 0.013500f, 0.011670f, 0.014259f, -0.023094f, 0.004825f, 0.001136f, -0.011307f, 0.006232f, -0.010156f, 0.007370f, -0.005656f, 0.009140f, 0.020663f, 0.027113f, 0.017270f, 0.007887f, -0.011057f, -0.003065f, -0.013228f, -0.014059f, -0.002781f, 0.015925f, 0.004098f, 0.000298f, 0.003934f, -0.015493f, 0.004239f, 0.001990f, 0.000063f, -0.007807f, 0.004419f, 0.008572f, -0.008781f, -0.016882f, 0.038823f, 0.005061f, -0.006693f, 0.002459f, 0.004382f, 0.017672f, -0.003311f, 0.004926f, 0.006232f, 0.008822f, -0.005834f, -0.002884f, -0.006313f, 0.003216f, -0.001566f, 0.003540f, 0.003458f, -0.002169f, -0.003330f, 0.006662f, - 0.001138f, 0.001850f, -0.000978f, 0.004081f, -0.006516f, -0.004715f, -0.002988f, -0.001071f, 0.007833f, 0.002919f, 0.005338f, 0.003995f, 0.004254f, 0.000431f, 0.001182f, -0.001524f, -0.004449f, 0.004816f, 0.001439f, 0.002135f, -0.002994f, -0.000971f, 0.000092f, 0.002180f, 0.006219f, 0.001706f, -0.010347f, -0.003279f, -0.006241f, -0.002778f, 0.005223f, -0.006998f, 0.030722f, -0.003296f, 0.008849f, 0.021561f, 0.003126f, -0.003553f, -0.014040f, 0.007740f, -0.007467f, -0.009952f, -0.028650f, -0.013218f, 0.006058f, -0.001830f, -0.005354f, -0.021159f, 0.007522f, 0.011210f, -0.016198f, -0.008878f, -0.004188f, -0.017488f, 0.007072f, 0.000929f, -0.008881f, -0.007767f, -0.002922f, -0.023534f, -0.008075f, 0.011223f, 0.019520f, -0.014930f, -0.018090f, -0.005609f, -0.000877f, -0.015157f, -0.012021f, 0.004351f, 0.008323f, -0.016581f, 0.032782f, -0.000142f, 0.013434f, -0.007721f, 0.012629f, -0.008740f, 0.003921f, -0.023445f, -0.004711f, 0.009142f, -0.022986f, 0.006050f, -0.005077f, -0.012094f, -0.026133f, -0.000885f, 0.014729f, -0.000088f, -0.027584f, -0.004489f, 0.005175f, 0.010851f, 0.020464f, -0.007786f, - 0.009223f, 0.023449f, 0.008047f, 0.002602f, -0.010694f, -0.002352f, -0.006636f, 0.001109f, -0.007936f, 0.001540f, -0.015085f, -0.002314f, 0.011721f, 0.003020f, 0.002345f, -0.006912f, -0.011692f, 0.006232f, -0.002102f, 0.006438f, -0.002438f, 0.000575f, -0.001467f, -0.003711f, -0.003075f, 0.004068f, 0.001755f, -0.001192f, -0.001510f, -0.000175f, -0.004537f, 0.001821f, -0.004641f, -0.006162f, -0.003651f, 0.001732f, 0.000296f, -0.000306f, -0.004400f, 0.003130f, -0.000549f, -0.002616f, -0.006238f, -0.002303f, 0.000381f, 0.000478f, 0.002513f, 0.006279f, 0.002077f, 0.001185f, 0.003304f, -0.001303f, -0.000480f, -0.002083f, 0.005137f, 0.008672f, -0.002618f, -0.009324f, 0.011289f, 0.001673f, -0.016621f, -0.026801f, -0.021399f, -0.027730f, 0.023899f, -0.014633f, -0.003285f, 0.007494f, -0.025734f, -0.011054f, -0.017834f, -0.008322f, -0.005547f, 0.011481f, -0.022528f, -0.012419f, 0.007469f, 0.008736f, 0.013342f, -0.000482f, 0.000652f, -0.004341f, 0.000165f, -0.005628f, 0.003463f, -0.018327f, -0.009505f, -0.016153f, 0.011214f, 0.005183f, 0.008729f, 0.010772f, -0.021746f, -0.001871f, -0.002175f, 0.019669f, - -0.007314f, 0.005991f, 0.011058f, -0.004387f, 0.011825f, -0.007924f, 0.013161f, 0.017909f, -0.006939f, -0.001560f, 0.015803f, -0.013665f, 0.021782f, -0.009563f, -0.034190f, 0.005030f, 0.017970f, -0.007114f, 0.002220f, -0.000912f, 0.013823f, 0.016795f, -0.017199f, -0.007894f, 0.004223f, 0.011459f, -0.020263f, -0.015840f, -0.012241f, 0.024417f, -0.000427f, -0.028726f, -0.006001f, -0.012153f, 0.009860f, 0.000932f, 0.007483f, -0.011009f, 0.017702f, 0.000392f, 0.003298f, 0.004704f, -0.016078f, -0.005884f, 0.001360f, -0.002395f, -0.003940f, -0.005086f, 0.004691f, -0.004865f, -0.004239f, 0.003063f, 0.005321f, 0.002283f, -0.009395f, -0.001237f, -0.003662f, -0.003167f, 0.004092f, 0.003130f, 0.008145f, -0.001489f, -0.003805f, 0.002676f, -0.008825f, -0.001452f, 0.000059f, -0.006242f, 0.000928f, 0.000152f, -0.002091f, 0.000710f, -0.010061f, -0.002261f, -0.001100f, 0.000738f, 0.001423f, 0.003861f, -0.000423f, 0.004384f, 0.002846f, 0.002054f, 0.000440f, -0.001036f, -0.016005f, -0.006386f, 0.010889f, 0.004125f, 0.015631f, 0.005454f, 0.007621f, -0.030733f, -0.012123f, 0.012103f, -0.008163f, -0.005729f, - -0.010308f, 0.003243f, 0.016013f, 0.004302f, 0.003790f, -0.020548f, -0.007014f, -0.003671f, 0.007624f, 0.018227f, -0.022041f, 0.010482f, -0.017968f, -0.004666f, -0.016528f, 0.002228f, 0.002273f, -0.000729f, 0.006886f, -0.015299f, -0.004448f, -0.014327f, -0.005944f, 0.000382f, -0.000667f, -0.018016f, 0.010403f, 0.011773f, -0.004331f, 0.013950f, 0.027190f, 0.002920f, 0.020603f, 0.026543f, 0.002097f, 0.000994f, 0.006393f, -0.005410f, 0.008780f, 0.001936f, -0.005749f, -0.008752f, 0.033204f, -0.003299f, 0.019423f, 0.008726f, -0.009736f, -0.011194f, -0.007855f, 0.009429f, -0.007525f, 0.012209f, 0.029272f, 0.014974f, -0.003821f, 0.000639f, -0.024436f, -0.016712f, -0.014878f, 0.023169f, 0.036169f, -0.015669f, -0.000063f, -0.014482f, -0.002338f, 0.022254f, -0.006897f, -0.001159f, -0.034731f, -0.004473f, -0.006252f, -0.003506f, 0.013312f, 0.001127f, 0.002847f, 0.004219f, -0.006883f, 0.005739f, 0.003063f, 0.005138f, -0.004058f, 0.007361f, -0.003328f, -0.000592f, -0.008699f, -0.001882f, 0.007804f, -0.002624f, -0.000098f, -0.001295f, 0.007508f, -0.001663f, -0.005203f, 0.003332f, 0.003421f, 0.002092f, - 0.002730f, 0.002935f, -0.002739f, 0.000966f, 0.005367f, 0.009232f, 0.007975f, 0.005285f, 0.002913f, 0.000783f, 0.000865f, -0.005395f, -0.000323f, 0.003790f, -0.003260f, 0.003982f, -0.001072f, 0.001539f, 0.005101f, -0.001878f, 0.009142f, -0.000745f, 0.021173f, 0.057456f, 0.025521f, -0.008183f, -0.001671f, -0.011064f, 0.026970f, -0.027008f, -0.014824f, -0.041118f, -0.000130f, 0.019792f, 0.025366f, 0.004185f, -0.009593f, -0.024776f, -0.017552f, 0.017703f, -0.003317f, 0.028307f, 0.000262f, -0.009510f, 0.013855f, 0.004607f, 0.000101f, -0.007432f, 0.019034f, -0.003786f, 0.016491f, -0.000569f, -0.008450f, 0.034907f, -0.008072f, 0.013975f, 0.034971f, 0.011865f, -0.001109f, -0.017227f, -0.002835f, -0.027866f, -0.031935f, 0.006726f, 0.021035f, -0.005266f, 0.003255f, -0.035546f, -0.013044f, 0.020116f, 0.011420f, -0.009434f, 0.007107f, -0.010754f, -0.004714f, -0.016370f, -0.026653f, 0.001335f, -0.006016f, -0.019370f, -0.030815f, -0.027182f, -0.008395f, -0.024991f, 0.011726f, -0.011350f, 0.004279f, 0.002907f, 0.000172f, 0.000306f, -0.003638f, -0.005821f, 0.016356f, 0.031503f, -0.021066f, 0.003600f, - -0.008642f, 0.011213f, -0.011597f, -0.000752f, -0.008272f, -0.004181f, 0.029615f, 0.020980f, 0.005160f, -0.003566f, 0.000666f, -0.012234f, 0.004507f, 0.011643f, -0.001894f, -0.010614f, -0.005536f, 0.010049f, -0.012120f, 0.000878f, 0.005707f, 0.004738f, -0.004015f, -0.004250f, 0.004851f, 0.005362f, -0.003921f, 0.006437f, 0.004256f, 0.005297f, -0.000207f, 0.007079f, -0.000393f, 0.004386f, 0.002671f, 0.002479f, 0.002077f, -0.001866f, 0.009015f, -0.008723f, -0.000864f, 0.001604f, -0.002152f, -0.002397f, -0.003594f, 0.003599f, 0.000741f, -0.007547f, -0.002348f, 0.004537f, -0.004853f, -0.023596f, -0.027145f, 0.007208f, 0.010135f, 0.032543f, -0.027517f, 0.008953f, 0.008198f, -0.045268f, -0.002293f, 0.000567f, -0.038202f, -0.020464f, -0.013622f, 0.009959f, -0.003210f, 0.002562f, -0.010896f, 0.016290f, 0.025038f, 0.013556f, -0.003740f, -0.038326f, -0.016968f, -0.020704f, 0.007688f, 0.002659f, -0.017083f, -0.001019f, 0.013155f, -0.010940f, 0.022836f, -0.020404f, -0.000754f, -0.011764f, -0.038728f, 0.006895f, -0.016562f, -0.018212f, 0.014239f, 0.021632f, -0.024047f, 0.009574f, 0.028097f, -0.008897f, - 0.012242f, 0.010005f, -0.006742f, 0.004171f, -0.031457f, 0.047760f, 0.018552f, 0.011564f, 0.045181f, -0.054950f, -0.004262f, -0.007315f, 0.005749f, 0.022899f, 0.023321f, 0.009343f, 0.011064f, 0.029312f, -0.002877f, -0.019342f, -0.034310f, 0.013590f, -0.013046f, 0.001628f, 0.009140f, -0.006487f, 0.013868f, 0.037470f, -0.023013f, 0.017654f, -0.011214f, -0.010277f, 0.027955f, 0.002485f, 0.008643f, 0.027582f, 0.022356f, -0.009525f, -0.011491f, -0.023595f, -0.006158f, 0.000485f, 0.012381f, 0.013470f, -0.000077f, 0.003482f, 0.001777f, -0.000099f, 0.002508f, 0.003398f, 0.000907f, 0.007785f, -0.003800f, 0.001502f, 0.005221f, 0.003351f, 0.001452f, -0.002921f, 0.007064f, 0.005072f, 0.000992f, -0.003671f, -0.005826f, -0.013161f, 0.008014f, -0.000124f, -0.001324f, 0.004535f, -0.006607f, -0.000353f, 0.004446f, 0.006667f, 0.009296f, 0.005725f, 0.002499f, 0.003038f, -0.000179f, 0.003302f, 0.006913f, 0.029593f, 0.034920f, 0.008657f, 0.021553f, -0.014070f, 0.010167f, 0.009795f, -0.057213f, 0.016119f, 0.018577f, 0.003833f, -0.018219f, -0.000506f, -0.035318f, 0.041487f, 0.025056f, -0.013155f, - -0.013982f, -0.020761f, -0.010795f, 0.029987f, -0.030454f, -0.017541f, -0.004575f, -0.005182f, -0.006577f, 0.004282f, -0.020181f, -0.020675f, -0.012142f, -0.015950f, -0.004311f, -0.020719f, -0.002871f, -0.013940f, -0.045284f, -0.028985f, -0.011204f, -0.007290f, 0.006293f, 0.007457f, -0.000283f, 0.001225f, 0.013079f, 0.006204f, 0.006680f, 0.031752f, 0.006621f, 0.010661f, 0.019839f, 0.042680f, 0.036538f, 0.001826f, -0.014511f, -0.028178f, 0.025519f, -0.006391f, 0.069022f, 0.013839f, 0.030917f, -0.003485f, 0.003893f, -0.027549f, -0.001143f, 0.023857f, 0.013798f, 0.018058f, -0.020798f, -0.013821f, -0.026714f, -0.050694f, 0.029144f, -0.044753f, -0.005515f, 0.058761f, 0.003863f, 0.023483f, 0.011175f, 0.017243f, 0.000458f, -0.031897f, 0.030832f, -0.000641f, -0.027994f, -0.025094f, 0.000839f, 0.009615f, 0.020706f, 0.005463f, -0.024566f, 0.001172f, -0.004950f, 0.004851f, -0.009734f, -0.008144f, 0.004235f, 0.003827f, -0.007690f, 0.000625f, -0.002558f, -0.000817f, -0.010106f, -0.003783f, -0.003306f, 0.004525f, -0.002785f, -0.006236f, 0.007887f, -0.005057f, -0.002098f, -0.014274f, -0.015136f, -0.000082f, - 0.000215f, -0.006310f, -0.004077f, 0.004792f, 0.003530f, -0.006409f, -0.010192f, -0.000740f, -0.010592f, 0.006132f, -0.040459f, 0.011631f, 0.015838f, -0.027862f, -0.020761f, -0.000017f, 0.017334f, 0.039526f, -0.001607f, -0.031262f, -0.030665f, -0.002082f, -0.017163f, 0.004770f, 0.006104f, -0.034854f, -0.029246f, -0.056662f, -0.016171f, -0.016755f, -0.037835f, -0.026386f, 0.000181f, -0.018252f, -0.010747f, -0.010531f, -0.002695f, -0.038283f, -0.019865f, -0.023714f, -0.011082f, 0.011196f, -0.031743f, 0.001937f, 0.027224f, 0.031416f, -0.007045f, 0.008249f, 0.018682f, -0.032026f, 0.018271f, -0.014143f, 0.028495f, -0.014063f, 0.003001f, -0.015120f, -0.002746f, 0.055218f, -0.011006f, 0.020479f, -0.040267f, -0.007229f, 0.000419f, -0.039124f, 0.036512f, 0.000879f, -0.012759f, 0.025380f, -0.010149f, 0.006152f, 0.051603f, -0.020801f, -0.027544f, 0.018770f, -0.004880f, -0.057973f, 0.023818f, -0.076688f, -0.040422f, 0.030042f, 0.024325f, 0.004376f, 0.016620f, -0.000431f, 0.000065f, -0.057986f, -0.030416f, -0.014059f, 0.005733f, -0.033187f, 0.008520f, 0.004005f, 0.013958f, -0.021857f, 0.001758f, 0.015951f, - 0.013011f, 0.008945f, 0.001585f, 0.007268f, -0.018223f, -0.012510f, -0.012140f, -0.004068f, -0.002110f, -0.002199f, 0.015585f, -0.008292f, 0.008413f, 0.014534f, -0.006930f, 0.004116f, -0.011499f, -0.009675f, -0.000076f, 0.003339f, -0.010281f, 0.004179f, -0.013010f, 0.011297f, -0.004263f, -0.002924f, 0.001008f, 0.010082f, -0.002855f, 0.003703f, -0.008989f, 0.007966f, 0.006945f, 0.019092f, 0.005124f, 0.015587f, -0.015417f, -0.005875f, -0.018435f, -0.005884f, -0.009806f, -0.009525f, 0.077267f, 0.042241f, 0.000113f, -0.039799f, 0.020479f, -0.041498f, -0.033672f, 0.006094f, 0.034353f, 0.067767f, -0.010616f, 0.034246f, -0.012204f, 0.024302f, 0.041153f, 0.022955f, 0.026323f, 0.014060f, -0.007643f, -0.033662f, -0.034750f, -0.010558f, -0.032837f, -0.009700f, -0.005987f, -0.007426f, 0.026349f, -0.004501f, -0.067511f, 0.003946f, 0.016352f, 0.015591f, 0.040468f, -0.004188f, -0.080577f, 0.045838f, -0.036031f, 0.011792f, -0.007844f, 0.027118f, 0.039560f, -0.043975f, -0.003029f, -0.021977f, -0.038283f, 0.027743f, -0.019015f, -0.047216f, 0.018579f, 0.027569f, 0.045434f, 0.012015f, -0.007025f, 0.004962f, - 0.037208f, -0.029899f, 0.058707f, -0.018438f, -0.016293f, -0.005275f, 0.035796f, -0.037177f, 0.003479f, 0.004546f, -0.103439f, -0.015339f, 0.032096f, -0.014890f, 0.005431f, 0.014384f, 0.007575f, -0.005065f, 0.008486f, 0.035512f, 0.042463f, -0.033555f, 0.012177f, -0.024574f, -0.004126f, 0.041984f, -0.000824f, -0.004346f, 0.001624f, -0.002813f, -0.021680f, 0.006018f, 0.001533f, -0.012674f, -0.032141f, 0.000462f, -0.007618f, 0.009881f, -0.014798f, -0.013878f, -0.017420f, 0.014872f, 0.003515f, 0.009134f, 0.007402f, 0.000658f, 0.005491f, -0.007095f, -0.014661f, 0.022613f, -0.002167f, -0.010889f, -0.000242f, -0.007833f, -0.004832f, -0.009049f, 0.001269f, 0.002840f, -0.001211f, 0.006317f, 0.016562f, -0.000554f, -0.003876f, -0.006646f, 0.001626f, -0.008278f, -0.004602f, 0.009482f, -0.007055f, -0.005908f, -0.008661f, -0.021665f, -0.012023f, 0.003116f, 0.014242f, -0.011276f, -0.003199f, 0.044431f, 0.029176f, -0.082107f, -0.046962f, 0.056527f, 0.065130f, -0.034938f, -0.012084f, -0.092421f, -0.051367f, 0.013503f, -0.004392f, 0.012477f, -0.049410f, -0.030679f, -0.033927f, 0.050127f, 0.074050f, -0.003455f, - 0.019844f, -0.011934f, -0.006707f, -0.000792f, 0.016847f, 0.032325f, 0.007623f, -0.011311f, -0.006367f, -0.007410f, -0.044564f, -0.025013f, -0.045306f, -0.005858f, 0.013724f, -0.018822f, 0.027606f, -0.020471f, -0.007937f, 0.043308f, -0.021151f, 0.024395f, 0.016640f, -0.007792f, -0.041814f, -0.029983f, -0.025022f, 0.007614f, 0.077525f, 0.013805f, 0.041577f, 0.049392f, 0.038336f, 0.028667f, 0.025322f, -0.042787f, 0.000788f, -0.006913f, 0.057314f, 0.027456f, 0.033418f, 0.060197f, -0.029752f, -0.040321f, 0.014588f, 0.050928f, -0.086379f, -0.001452f, 0.006614f, 0.040162f, -0.069908f, -0.104864f, -0.018931f, 0.029517f, 0.007086f, 0.012001f, 0.032649f, 0.002206f, -0.023542f, -0.034352f, 0.000881f, 0.004837f, 0.006549f, 0.031885f, 0.046840f, 0.022390f, 0.003224f, 0.000274f, -0.000789f, 0.003995f, 0.004459f, -0.011782f, 0.017097f, 0.002283f, -0.016181f, -0.027862f, 0.003175f, -0.011807f, 0.005711f, 0.003176f, -0.002824f, 0.001902f, -0.011896f, 0.012180f, -0.006532f, 0.008223f, -0.012777f, -0.007924f, -0.022551f, -0.021790f, 0.000715f, 0.011695f, -0.010170f, 0.023272f, 0.000282f, 0.007044f, - -0.007317f, 0.024874f, 0.001713f, 0.011497f, -0.012588f, -0.006503f, -0.004267f, -0.004286f, -0.015720f, -0.002649f, 0.016302f, -0.028477f, 0.021841f, -0.000796f, -0.021498f, -0.037113f, 0.013725f, -0.017943f, -0.036873f, 0.026548f, 0.050262f, 0.015744f, -0.019572f, 0.030252f, 0.050555f, 0.019002f, 0.010295f, 0.003792f, -0.005810f, 0.024082f, -0.042548f, 0.002701f, -0.061126f, 0.032765f, -0.049362f, -0.003969f, 0.026342f, 0.014794f, -0.028218f, 0.006085f, -0.032630f, 0.066775f, 0.008498f, 0.021757f, 0.034605f, 0.073639f, -0.030476f, 0.024004f, -0.035299f, 0.012835f, 0.026314f, 0.059212f, 0.013826f, -0.011895f, 0.060440f, 0.008294f, -0.004369f, -0.034744f, 0.002191f, 0.038059f, -0.012966f, 0.036581f, -0.045027f, 0.069301f, 0.071657f, -0.086198f, -0.002374f, -0.005364f, 0.018727f, -0.014627f, -0.011448f, 0.037188f, -0.031455f, -0.091986f, 0.000964f, 0.081903f, -0.064721f, 0.032477f, -0.015081f, -0.008146f, -0.039496f, 0.090390f, -0.006007f, 0.014987f, 0.008130f, -0.060747f, 0.078515f, 0.006174f, 0.069800f, -0.138460f, 0.012996f, -0.013015f, -0.041966f, -0.011215f, 0.024106f, -0.032253f, - 0.021447f, -0.029078f, -0.019589f, -0.038274f, 0.048032f, -0.018579f, 0.003042f, -0.040828f, 0.001497f, -0.030014f, -0.010503f, 0.013864f, -0.020962f, 0.009586f, 0.000984f, -0.027733f, 0.024675f, -0.011426f, 0.003253f, -0.011928f, 0.022347f, -0.017169f, 0.003216f, 0.001459f, -0.006676f, 0.029913f, -0.017725f, -0.021184f, -0.012560f, -0.023736f, -0.033230f, -0.016662f, 0.002778f, 0.001870f, -0.024056f, -0.013619f, -0.016303f, -0.023091f, -0.018535f, 0.007696f, 0.004900f, -0.000949f, -0.010134f, 0.057808f, 0.007475f, -0.045155f, 0.005056f, -0.091303f, -0.020233f, 0.004074f, -0.017112f, -0.072885f, -0.007546f, -0.048019f, -0.011338f, 0.043078f, 0.010571f, 0.056634f, 0.024168f, 0.021062f, 0.013847f, -0.020002f, 0.046274f, -0.023763f, -0.000029f, 0.021151f, 0.010395f, -0.028588f, 0.023179f, 0.008820f, 0.054673f, 0.021838f, -0.009347f, 0.032318f, -0.025696f, 0.043812f, 0.015588f, -0.049143f, -0.049727f, 0.025434f, 0.032909f, 0.013069f, 0.005648f, -0.024099f, -0.031712f, 0.009349f, -0.031203f, -0.048095f, -0.014300f, -0.008493f, -0.043479f, -0.016728f, 0.016698f, -0.030408f, -0.049084f, 0.013504f, - 0.018607f, 0.001303f, -0.005767f, -0.003301f, -0.008110f, 0.017318f, 0.084376f, 0.016736f, -0.002478f, -0.003602f, -0.029456f, -0.048391f, -0.021036f, 0.068840f, 0.074626f, 0.037728f, 0.007314f, 0.067131f, 0.032711f, -0.015650f, -0.093679f, -0.071987f, -0.058721f, -0.112557f, -0.065145f, 0.015521f, 0.091382f, -0.040741f, 0.031060f, -0.045506f, 0.014991f, -0.004034f, 0.031538f, -0.014965f, -0.005075f, -0.040621f, -0.022923f, -0.010125f, -0.035734f, 0.045604f, -0.006955f, -0.024194f, -0.011154f, 0.004480f, -0.025802f, 0.018404f, 0.013937f, 0.029468f, 0.007026f, 0.008188f, -0.028994f, -0.034280f, -0.003759f, -0.025355f, -0.015689f, -0.029513f, -0.042107f, 0.002090f, -0.010862f, 0.002530f, 0.003246f, 0.032313f, 0.032593f, -0.012160f, -0.006251f, -0.014427f, 0.031495f, 0.020682f, 0.013810f, 0.004823f, -0.006179f, 0.017869f, -0.024566f, -0.009893f, -0.003832f, -0.028362f, -0.054722f, 0.028849f, -0.000808f, -0.017633f, -0.016975f, -0.010125f, -0.007626f, 0.020496f, 0.039186f, -0.016951f, 0.050418f, -0.057736f, 0.046594f, -0.006209f, 0.062121f, -0.040460f, 0.035938f, -0.059518f, 0.051667f, -0.048171f, - -0.020082f, 0.071398f, 0.016644f, 0.057275f, 0.082436f, 0.008106f, -0.006573f, -0.034719f, -0.002691f, 0.051922f, 0.013222f, -0.018895f, -0.057864f, 0.004583f, 0.011483f, 0.026995f, 0.016759f, 0.022407f, 0.014251f, -0.034166f, -0.053864f, -0.023248f, 0.052206f, 0.019613f, 0.166504f, -0.053272f, -0.044467f, 0.053903f, 0.085484f, 0.017544f, -0.001447f, 0.022093f, 0.005669f, 0.027051f, -0.025114f, 0.009517f, 0.039967f, 0.043756f, 0.029483f, 0.128819f, -0.016397f, -0.017078f, -0.008391f, 0.066277f, 0.039864f, -0.034187f, 0.034933f, -0.001120f, 0.011401f, -0.028216f, 0.059179f, -0.059406f, 0.004124f, 0.090860f, -0.067179f, 0.195520f, -0.089932f, 0.093379f, 0.085994f, -0.084792f, -0.077170f, 0.086808f, 0.003760f, -0.050640f, -0.021271f, 0.047811f, -0.132281f, 0.020421f, -0.015555f, -0.085459f, 0.055744f, -0.066968f, 0.005294f, 0.004727f, -0.026863f, -0.066090f, 0.017881f, -0.005316f, -0.002944f, 0.012480f, -0.013588f, -0.021930f, 0.011821f, 0.027444f, -0.010474f, 0.004022f, 0.021488f, -0.020318f, 0.029900f, 0.022861f, -0.047621f, 0.006657f, -0.026746f, 0.011965f, -0.001885f, 0.003693f, - -0.024366f, 0.009944f, 0.006384f, -0.000319f, -0.012220f, 0.036630f, 0.008317f, -0.001539f, 0.035162f, -0.025056f, -0.022700f, 0.003565f, 0.015182f, 0.003599f, 0.016916f, 0.008534f, -0.049021f, -0.025613f, 0.012645f, -0.029015f, 0.042192f, -0.019172f, -0.023952f, -0.001150f, -0.016586f, 0.033404f, 0.042554f, -0.100251f, -0.042999f, 0.062053f, -0.130095f, -0.080057f, -0.054542f, 0.091175f, 0.193309f, 0.053886f, -0.152049f, -0.033886f, -0.155332f, -0.080594f, 0.126254f, 0.075946f, 0.118688f, 0.065757f, -0.090134f, -0.142341f, -0.108976f, -0.025719f, 0.064207f, 0.073582f, 0.043854f, 0.025078f, -0.037919f, -0.155629f, -0.187843f, -0.040230f, 0.143466f, 0.256587f, 0.173502f, -0.032343f, -0.120410f, -0.172091f, -0.128180f, -0.103100f, -0.000136f, 0.041748f, 0.139690f, 0.149780f, -0.081132f, -0.050232f, -0.188102f, -0.174239f, -0.063070f, 0.017628f, 0.181085f, 0.268177f, 0.118569f, -0.078644f, -0.280894f, -0.207614f, -0.152870f, 0.074117f, 0.159539f, 0.100134f, 0.062852f, 0.054070f, -0.167709f, -0.030363f, -0.095755f, 0.035891f, -0.013513f, 0.099569f, 0.155592f, 0.124152f, -0.145790f, -0.293143f, - -0.220931f, 0.024891f, 0.171318f, -0.003835f, 0.237667f, 0.010310f, -0.061552f, -0.071183f, -0.052851f, 0.001088f, 0.171631f, 0.148791f, 0.026960f, -0.058659f, -0.021411f, -0.010470f, 0.089935f, 0.099987f, 0.011652f, 0.004750f, -0.015830f, -0.002217f, -0.019435f, -0.023861f, -0.016333f, -0.008409f, 0.034232f, 0.054271f, 0.043774f, -0.064533f, -0.073960f, -0.027954f, -0.030843f, -0.028746f, 0.066802f, 0.055277f, 0.070263f, 0.021175f, -0.030599f, -0.052570f, -0.102866f, -0.064906f, 0.042707f, 0.090984f, 0.136834f, 0.094399f, 0.007503f, -0.211063f, -0.186291f, -0.062901f, 0.076061f, 0.119428f, 0.158705f, 0.120399f, -0.009724f, -0.119834f, -0.177611f, -0.170624f, -0.031564f, 0.186670f, 0.192381f, 0.098467f, -0.046805f, -0.128201f, -0.090127f, -0.059877f, 0.005013f, 0.039021f, 0.050798f, 0.045708f, 0.027489f, 0.002397f, -0.029243f, -0.035806f, -0.037281f, -0.029599f, -0.034509f, 0.068625f, 0.021383f, -0.055591f, -0.052454f, 0.000162f, -0.084514f, -0.010451f, 0.012521f, 0.009667f, -0.007349f, 0.002111f, -0.028422f, -0.003545f, -0.003340f, 0.014582f, -0.009807f, 0.038955f, -0.010343f, -0.007500f, - -0.010879f, -0.012233f, 0.024284f, 0.006949f, -0.011716f, 0.037729f, 0.002387f, -0.067072f, -0.033493f, 0.018476f, 0.032823f, -0.011171f, 0.003999f, 0.045964f, -0.001134f, 0.006275f, -0.037599f, -0.016792f, 0.011575f, -0.008171f, -0.008357f, -0.004989f, 0.030407f, 0.011013f, -0.011909f, -0.035976f, -0.014331f, -0.002107f, -0.032816f, 0.003145f, -0.037480f, -0.025077f, -0.017445f, -0.033301f, 0.052214f, -0.009403f, -0.023633f, 0.022096f, -0.000367f, -0.051319f, -0.003008f, 0.051281f, 0.041577f, -0.023814f, 0.032191f, 0.005428f, 0.030712f, -0.034271f, -0.050573f, 0.019407f, 0.022285f, 0.019664f, 0.017006f, -0.019071f, 0.018772f, -0.037694f, 0.025533f, -0.051426f, -0.045305f, 0.033491f, -0.026515f, 0.022868f, 0.031318f, 0.002317f, -0.024246f, 0.007834f, 0.008842f, -0.002001f, -0.002005f, -0.000783f, 0.020393f, -0.017086f, 0.013235f, -0.017856f, 0.023905f, -0.020901f, -0.011451f, 0.008865f, -0.007277f, -0.000703f, 0.009427f, 0.002344f, 0.006287f, 0.018510f, -0.014754f, -0.008671f, 0.010532f, 0.006427f, 0.021038f, -0.017036f, 0.005815f, -0.001981f, -0.013227f, -0.013155f, 0.005368f, 0.003485f, - -0.013090f, -0.019295f, 0.005540f, 0.000362f, -0.003694f, 0.012492f, -0.018608f, 0.021584f, 0.006361f, -0.018435f, -0.020751f, 0.017416f, -0.029138f, 0.020044f, -0.003345f, 0.013935f, -0.001572f, 0.004895f, 0.026008f, -0.041419f, 0.082820f, 0.126058f, -0.016353f, -0.046771f, -0.039953f, 0.116222f, 0.052725f, 0.112480f, 0.060862f, 0.000085f, -0.052115f, -0.011743f, 0.028884f, 0.052800f, 0.025462f, -0.024557f, -0.005868f, 0.025200f, 0.037400f, 0.004550f, 0.008527f, -0.026103f, 0.004924f, -0.012631f, 0.017143f, 0.018976f, 0.049432f, 0.042375f, -0.022363f, 0.003635f, -0.025122f, 0.006545f, 0.022656f, 0.033528f, 0.002666f, -0.016020f, 0.000121f, -0.028909f, 0.024273f, -0.006697f, 0.010121f, 0.022456f, 0.000651f, 0.029927f, -0.014575f, -0.008256f, -0.006836f, -0.030859f, -0.018291f, -0.047047f, -0.008720f, -0.053641f, 0.003845f, -0.018472f, 0.044298f, 0.006531f, 0.013172f, -0.041478f, 0.017697f, 0.000276f, -0.018268f, 0.030372f, -0.016220f, -0.008552f, 0.007725f, 0.020082f, -0.002246f, -0.011029f, 0.068510f, 0.022225f, 0.015977f, 0.025657f, -0.018327f, -0.000916f, -0.005995f, 0.035723f, - 0.049826f, 0.047700f, -0.028283f, -0.031119f, -0.004067f, -0.012376f, 0.012660f, 0.032153f, 0.033582f, 0.001480f, 0.018903f, -0.002239f, -0.004925f, 0.010939f, 0.021483f, -0.002026f, 0.016921f, -0.014009f, 0.003213f, 0.000253f, 0.006024f, -0.004805f, 0.018929f, 0.010898f, -0.001796f, -0.005237f, 0.005861f, 0.003323f, 0.020570f, 0.001154f, -0.011867f, -0.013086f, -0.007334f, 0.005751f, 0.007128f, 0.013070f, -0.015667f, 0.002215f, -0.004156f, 0.010504f, -0.007590f, 0.014819f, -0.004817f, 0.005538f, -0.008136f, -0.006914f, 0.004896f, -0.012912f, 0.000266f, 0.014310f, 0.003783f, -0.005887f, 0.001535f, -0.000695f, -0.046905f, -0.102486f, -0.013596f, 0.134906f, 0.208533f, 0.174672f, 0.138414f, -0.009527f, 0.016457f, -0.101717f, -0.114910f, -0.187894f, -0.107842f, -0.118412f, -0.037019f, 0.014666f, 0.081935f, 0.057981f, 0.178132f, 0.154712f, 0.051383f, 0.010623f, -0.027403f, -0.060654f, -0.095394f, -0.035202f, -0.097788f, -0.026300f, -0.047477f, -0.031028f, -0.022659f, 0.004979f, 0.001888f, 0.033051f, 0.048294f, 0.072913f, 0.079409f, 0.094911f, 0.082286f, -0.010063f, 0.008188f, -0.001195f, - 0.015622f, -0.047256f, 0.019225f, -0.050496f, -0.125619f, -0.061950f, -0.093977f, -0.158421f, -0.046193f, -0.013933f, -0.063926f, 0.021544f, 0.048854f, 0.110323f, 0.130415f, 0.192050f, 0.121578f, 0.098777f, 0.098530f, 0.061015f, -0.018856f, 0.009830f, -0.096791f, -0.083700f, -0.140264f, -0.167117f, -0.192626f, -0.140553f, -0.108002f, -0.011431f, -0.005057f, 0.015142f, 0.056523f, 0.095225f, 0.171981f, 0.169762f, 0.169337f, 0.135498f, 0.058346f, 0.087370f, 0.013904f, -0.044086f, -0.066006f, -0.156601f, -0.142113f, -0.126146f, -0.108505f, -0.087166f, -0.052461f, -0.032096f, -0.010750f, 0.007683f, 0.052847f, 0.062342f, 0.082514f, 0.068055f, 0.097778f, 0.088224f, 0.058003f, 0.066473f, 0.044943f, -0.012324f, -0.036020f, -0.041903f, -0.099415f, -0.086487f, -0.077596f, -0.058411f, -0.031600f, -0.001340f, -0.003698f, 0.025292f, 0.039310f, 0.030332f, 0.036474f, 0.023054f, 0.007417f, -0.000919f, 0.010654f, 0.002325f, -0.012089f, 0.012976f, 0.015937f, 0.000962f, 0.008612f, -0.002544f, -0.003454f, 0.001318f, 0.005980f, -0.000388f, -0.013427f, -0.018121f, -0.017538f, -0.020538f, -0.013740f, -0.004273f, - -0.004662f, 0.005801f, 0.002402f, 0.001595f, 0.006909f, 0.007789f, 0.006344f, 0.008419f, 0.013374f, 0.011268f, 0.006456f, 0.007690f, 0.002649f, -0.002907f, -0.000917f, -0.003652f, -0.005428f, -0.002702f, -0.004893f, -0.004704f, -0.005693f, -0.007191f, -0.007834f, -0.007572f, -0.004256f, 0.000002f, 0.000387f, 0.004184f, 0.004315f, 0.003170f, 0.002391f, 0.004080f, 0.004106f, 0.006801f, 0.004584f, 0.005720f, 0.002943f, -0.001300f, -0.003127f, -0.001244f, -0.003891f, -0.000553f, -0.000213f, -0.001755f, -0.001041f, -0.001304f, -0.003832f, -0.002874f, -0.002472f, -0.001013f, -0.001233f, -0.000159f, -0.000265f, 0.000284f, -0.001185f, -0.001263f, -0.001965f, 0.001511f, 0.002344f, 0.005689f, 0.005652f, 0.006491f, 0.004713f, 0.003245f, 0.001212f, 0.000000f, -0.001775f, -0.002073f, -0.004845f, -0.004309f, -0.005040f, -0.004356f, -0.004968f, -0.002965f, -0.002037f, 0.000003f, 0.000146f, 0.002091f, 0.001689f, 0.003952f, 0.003958f, 0.004591f, 0.003398f, 0.004016f, 0.002060f, 0.001541f, -0.000661f, -0.001021f, -0.002601f, -0.002083f, -0.002783f, -0.001567f, -0.002155f, -0.000647f, -0.001162f, 0.000123f, - -0.000542f, 0.000607f, -0.000222f, 0.000725f, -0.000299f, 0.000542f}, - {0.013874f, 0.005147f, -0.006824f, -0.001265f, 0.004893f, -0.000939f, 0.005201f, -0.012703f, -0.008904f, -0.002291f, -0.010533f, 0.004367f, -0.002276f, -0.001257f, -0.007087f, -0.003286f, 0.006765f, 0.006583f, -0.002523f, -0.002115f, -0.004337f, -0.010278f, 0.011458f, 0.006679f, 0.000383f, 0.001114f, -0.000533f, 0.000250f, 0.009246f, -0.004721f, 0.001771f, -0.014724f, -0.011917f, -0.003084f, 0.001179f, -0.010283f, -0.001806f, 0.003552f, 0.000968f, 0.000108f, -0.005034f, -0.004016f, 0.009668f, -0.004510f, -0.003996f, -0.001420f, -0.001262f, 0.004148f, -0.002125f, -0.006346f, -0.000133f, 0.005432f, -0.007750f, 0.000269f, -0.008307f, 0.000521f, -0.006060f, 0.009253f, -0.000442f, -0.009892f, -0.001342f, -0.001021f, 0.001259f, -0.014094f, -0.001609f, 0.001102f, -0.009291f, 0.004252f, 0.000289f, -0.010871f, 0.005004f, 0.006583f, -0.005681f, -0.006682f, -0.011792f, 0.006160f, 0.003677f, 0.010962f, 0.005523f, -0.001698f, 0.002226f, -0.001588f, 0.003425f, 0.003447f, 0.007688f, 0.001880f, -0.003232f, -0.000173f, 0.000973f, -0.000303f, 0.004427f, 0.001074f, -0.001417f, -0.002165f, 0.002195f, 0.001639f, - 0.003338f, 0.001578f, 0.001346f, 0.001903f, 0.001850f, 0.000683f, 0.001177f, -0.000252f, -0.000482f, 0.000651f, 0.000541f, 0.000785f, -0.000381f, 0.000935f, -0.001245f, -0.000034f, -0.010266f, 0.004666f, -0.012789f, -0.003501f, -0.001837f, -0.006392f, 0.006076f, 0.014289f, -0.005884f, -0.001860f, 0.000614f, -0.005857f, 0.004037f, -0.000854f, -0.004852f, -0.008107f, -0.004387f, 0.012886f, 0.012351f, 0.007007f, 0.014357f, 0.008516f, 0.004527f, 0.013605f, -0.008499f, 0.003014f, 0.005744f, -0.000245f, 0.002278f, -0.004012f, 0.002540f, -0.018769f, 0.000338f, -0.001074f, 0.006722f, -0.004238f, -0.002453f, -0.001296f, 0.005133f, -0.005935f, -0.001026f, 0.001704f, 0.003594f, 0.003575f, -0.001067f, -0.006370f, 0.001140f, 0.002242f, 0.004534f, 0.003482f, 0.005283f, -0.005991f, -0.003632f, -0.001092f, -0.010712f, -0.001254f, 0.002755f, 0.009151f, 0.010142f, -0.001397f, 0.005560f, 0.004197f, -0.000836f, 0.003795f, 0.004447f, 0.006603f, -0.002722f, -0.000088f, -0.005024f, 0.000855f, -0.004340f, 0.002934f, -0.006390f, -0.005966f, 0.003502f, -0.000039f, -0.011871f, -0.001107f, -0.008911f, -0.002399f, - -0.001336f, -0.001494f, -0.011805f, 0.001128f, 0.004054f, -0.003461f, -0.003430f, 0.002022f, 0.001395f, 0.000848f, -0.002409f, -0.006303f, -0.000414f, -0.002762f, 0.002304f, 0.000086f, 0.000077f, -0.000706f, -0.002698f, -0.002893f, -0.003367f, 0.000232f, -0.001512f, 0.001420f, -0.002148f, 0.000811f, 0.000395f, -0.001871f, -0.000140f, -0.002084f, -0.000853f, 0.000121f, -0.000091f, -0.001854f, -0.000552f, -0.000315f, -0.012972f, -0.012075f, 0.004441f, -0.001349f, 0.010020f, 0.010232f, 0.000763f, 0.000321f, 0.019452f, -0.005204f, -0.000534f, 0.016478f, 0.000611f, -0.009407f, -0.013954f, 0.010154f, -0.004128f, 0.000139f, -0.008664f, 0.002744f, -0.006205f, 0.006923f, 0.030430f, -0.011054f, -0.009016f, -0.010918f, -0.011953f, 0.002252f, -0.009756f, -0.023946f, -0.000657f, 0.002487f, 0.000009f, -0.009473f, -0.002058f, 0.007884f, -0.009858f, -0.005708f, 0.014206f, 0.004773f, -0.003671f, -0.003316f, 0.009135f, -0.004470f, 0.006530f, 0.006085f, -0.013045f, -0.008545f, -0.007738f, 0.008594f, -0.006631f, -0.003840f, -0.003618f, -0.004246f, -0.000711f, -0.008686f, 0.000046f, -0.002562f, 0.002144f, -0.001127f, - -0.019076f, 0.008924f, -0.010674f, 0.008493f, 0.001553f, -0.015572f, 0.003165f, 0.010553f, 0.003215f, 0.017516f, -0.007383f, 0.001041f, 0.002029f, 0.004163f, 0.006233f, -0.006792f, 0.002602f, 0.002383f, -0.010135f, 0.013974f, 0.000999f, -0.001888f, 0.005899f, -0.001913f, 0.002646f, -0.002457f, -0.005288f, -0.000287f, -0.003402f, 0.004644f, -0.001179f, 0.000948f, 0.005427f, 0.001957f, 0.002073f, -0.001122f, 0.002960f, 0.000607f, -0.000783f, 0.002030f, 0.003955f, -0.002766f, 0.000271f, -0.002922f, 0.001895f, -0.000894f, 0.005866f, -0.008182f, 0.003902f, 0.004013f, -0.004261f, 0.001890f, -0.002050f, -0.017583f, 0.005496f, 0.016342f, 0.013779f, 0.015321f, 0.002806f, -0.003402f, -0.013116f, -0.007012f, -0.006108f, -0.005066f, 0.013777f, 0.018913f, 0.001471f, -0.001364f, 0.013643f, -0.022035f, 0.000532f, -0.001834f, -0.000296f, -0.007219f, -0.007291f, 0.007949f, 0.009977f, 0.000269f, -0.002103f, 0.003899f, -0.010591f, -0.008135f, 0.008268f, -0.008961f, 0.017139f, 0.015410f, 0.002665f, 0.009472f, 0.008118f, 0.001585f, -0.006907f, 0.002376f, -0.000307f, -0.012091f, 0.011757f, -0.001083f, - 0.005533f, 0.009462f, -0.011244f, -0.004436f, -0.013375f, -0.003084f, 0.003134f, 0.012564f, -0.012887f, -0.005188f, 0.009504f, -0.002036f, -0.008228f, 0.013786f, -0.011471f, -0.024256f, 0.004128f, -0.013684f, -0.006045f, 0.006541f, -0.005807f, 0.001118f, 0.001488f, -0.005958f, 0.010378f, -0.009511f, -0.010693f, -0.012950f, -0.001388f, -0.005647f, 0.000890f, 0.003375f, -0.007849f, 0.002032f, 0.002298f, 0.000528f, -0.003724f, 0.002032f, 0.001719f, 0.005340f, 0.000844f, -0.001792f, -0.003669f, -0.002440f, -0.001613f, -0.001025f, -0.001279f, -0.002356f, 0.000728f, 0.000991f, 0.001591f, 0.000429f, -0.000694f, -0.001899f, -0.000707f, 0.002621f, -0.002713f, -0.002923f, -0.000825f, -0.000142f, -0.000228f, 0.001989f, 0.002454f, 0.002211f, -0.001396f, 0.000735f, 0.000513f, 0.000834f, 0.000479f, -0.000832f, 0.005241f, -0.002583f, 0.000285f, -0.021865f, 0.004635f, 0.020658f, 0.001630f, 0.003250f, 0.006235f, 0.019348f, 0.002617f, -0.018575f, 0.020597f, 0.009080f, 0.007417f, 0.012574f, 0.010863f, 0.000100f, -0.003896f, 0.011857f, 0.009023f, 0.003107f, -0.008561f, 0.010310f, 0.004812f, 0.015258f, - 0.017755f, 0.006773f, -0.004430f, 0.000408f, -0.000173f, 0.007417f, 0.022544f, 0.013419f, -0.012581f, 0.021858f, 0.000830f, -0.002699f, 0.002842f, -0.016131f, 0.017867f, -0.002399f, 0.000273f, -0.002155f, 0.004517f, -0.002438f, 0.009198f, -0.013022f, 0.018248f, 0.015586f, -0.000641f, -0.002940f, -0.010237f, -0.019423f, -0.006715f, 0.007665f, -0.004578f, -0.007310f, 0.010223f, 0.012036f, -0.008245f, -0.007324f, -0.024943f, -0.008673f, -0.003149f, -0.001260f, -0.027908f, 0.014122f, 0.001482f, -0.016631f, -0.013704f, 0.004512f, -0.006545f, 0.001630f, -0.004200f, 0.000828f, -0.007412f, -0.001684f, -0.006624f, 0.004650f, 0.009204f, -0.002704f, 0.006978f, 0.000760f, -0.003040f, 0.008243f, 0.002800f, 0.000333f, 0.006757f, -0.000884f, -0.003239f, -0.004410f, -0.004979f, -0.005177f, -0.004943f, -0.006040f, -0.004460f, 0.000202f, -0.002519f, -0.005682f, -0.002881f, 0.000452f, -0.001319f, -0.002188f, 0.001062f, 0.002143f, 0.000955f, -0.002668f, -0.003773f, -0.004635f, 0.000341f, -0.004408f, 0.003801f, -0.002485f, -0.002617f, -0.002460f, -0.000074f, -0.001801f, 0.000229f, 0.000919f, 0.001745f, -0.002159f, - 0.002149f, 0.010015f, -0.012718f, -0.000358f, 0.000377f, 0.000224f, 0.021182f, 0.011260f, 0.000055f, 0.025849f, 0.012295f, 0.023311f, 0.005854f, 0.007719f, 0.025378f, -0.010199f, -0.016539f, -0.010854f, 0.023738f, 0.005505f, -0.013050f, 0.017689f, -0.004695f, -0.010723f, 0.016244f, 0.037806f, -0.009613f, 0.001665f, 0.006285f, 0.007031f, -0.009696f, 0.001011f, 0.021151f, 0.002004f, 0.025960f, -0.005855f, 0.027859f, 0.019330f, 0.006817f, 0.016166f, 0.010578f, -0.010092f, 0.007062f, -0.002772f, -0.002285f, 0.002402f, 0.002054f, -0.002031f, 0.007471f, 0.004817f, 0.018045f, 0.011809f, -0.014779f, 0.004979f, 0.006892f, -0.011269f, 0.000815f, -0.026262f, -0.033571f, 0.013267f, -0.008490f, -0.022272f, -0.004583f, -0.012098f, 0.014668f, 0.002957f, -0.006710f, -0.016869f, 0.013166f, -0.012271f, 0.008081f, -0.013742f, 0.002113f, -0.005670f, 0.020558f, 0.003581f, -0.007859f, 0.007639f, -0.017312f, 0.015641f, 0.002696f, -0.015217f, 0.000791f, -0.001781f, -0.004199f, -0.002032f, 0.002233f, 0.004197f, -0.004268f, 0.007073f, -0.001533f, -0.003113f, -0.003237f, -0.002821f, -0.006375f, -0.000767f, - -0.002220f, -0.006500f, -0.002243f, 0.002002f, -0.003816f, 0.003751f, 0.000676f, -0.002478f, 0.001116f, -0.004414f, -0.000725f, -0.003161f, -0.000318f, -0.000389f, 0.000235f, 0.001791f, 0.002533f, 0.002524f, 0.000157f, 0.001146f, -0.000115f, 0.001095f, -0.002043f, 0.001511f, -0.001436f, 0.001013f, -0.015016f, 0.002239f, 0.000338f, 0.004171f, -0.009252f, 0.010436f, 0.010985f, -0.000960f, -0.007743f, -0.025661f, -0.022457f, -0.016841f, 0.007728f, 0.002566f, 0.003892f, -0.020995f, 0.013229f, 0.009752f, 0.016520f, -0.017965f, 0.017045f, 0.013534f, -0.010696f, -0.008431f, -0.005521f, 0.017842f, 0.011905f, -0.007492f, 0.001508f, 0.026869f, 0.013257f, 0.007119f, 0.015193f, 0.010848f, 0.003914f, -0.008568f, 0.001760f, 0.001471f, -0.003986f, -0.009541f, 0.023413f, 0.011288f, -0.022245f, 0.015122f, 0.014563f, 0.014979f, 0.011316f, 0.003358f, -0.013955f, 0.000663f, -0.002064f, 0.020867f, 0.002505f, 0.009464f, 0.018491f, -0.003110f, -0.020677f, 0.004789f, 0.010774f, 0.021080f, -0.028009f, -0.015417f, 0.007380f, 0.000541f, 0.002331f, -0.016205f, -0.004298f, -0.015707f, -0.002450f, 0.007833f, - -0.005482f, -0.008478f, -0.010841f, 0.004748f, -0.002863f, -0.005049f, -0.013352f, 0.000733f, -0.017798f, -0.000076f, -0.001939f, -0.008650f, -0.010133f, 0.011528f, -0.004116f, -0.002562f, -0.005845f, -0.010572f, 0.003593f, 0.005464f, 0.003375f, 0.004330f, 0.002725f, -0.005733f, -0.003489f, -0.001576f, -0.001713f, -0.005376f, -0.010786f, -0.004437f, -0.000512f, -0.003339f, -0.000560f, -0.005411f, 0.000244f, -0.002828f, -0.002405f, -0.003871f, -0.004863f, -0.002187f, 0.004360f, -0.003102f, -0.001862f, 0.000925f, 0.001610f, 0.001449f, -0.002505f, 0.003735f, 0.004999f, 0.005536f, -0.001729f, -0.000097f, -0.000374f, 0.000869f, 0.000654f, 0.009762f, 0.001360f, -0.017311f, 0.017622f, 0.011190f, -0.005171f, 0.006888f, 0.010642f, -0.011735f, -0.003870f, 0.044806f, -0.001401f, 0.017425f, 0.012312f, -0.037550f, -0.019859f, -0.002193f, -0.001518f, -0.000522f, 0.021336f, 0.004693f, -0.010303f, 0.021907f, 0.013563f, -0.002839f, -0.003562f, 0.006933f, -0.003533f, -0.007860f, -0.016653f, -0.019878f, 0.010993f, -0.004428f, -0.009284f, -0.001056f, -0.030793f, -0.005821f, 0.002072f, 0.016925f, -0.020338f, -0.005982f, - 0.002670f, 0.001280f, 0.004474f, 0.001430f, 0.021772f, -0.025427f, -0.008411f, 0.005549f, -0.000801f, -0.015041f, -0.003136f, 0.019638f, 0.016978f, 0.014581f, -0.004029f, -0.025322f, -0.011504f, 0.009047f, -0.002865f, 0.016862f, -0.000983f, -0.000414f, -0.012578f, -0.007882f, 0.014799f, -0.018182f, 0.012392f, 0.009605f, -0.013053f, -0.006558f, -0.003041f, 0.002015f, -0.014059f, 0.006763f, 0.004855f, -0.006974f, -0.002165f, -0.019242f, 0.006932f, 0.014759f, 0.021185f, 0.001792f, 0.005680f, 0.009983f, 0.003092f, -0.016817f, 0.011480f, -0.004081f, 0.001880f, -0.000013f, -0.005400f, -0.005839f, -0.003121f, 0.007735f, 0.001370f, 0.006454f, -0.000733f, 0.001008f, -0.009337f, -0.003236f, -0.004307f, 0.006976f, -0.000736f, -0.003092f, 0.004846f, -0.003645f, 0.003790f, -0.002343f, 0.000599f, -0.007764f, 0.001776f, -0.001859f, -0.001631f, -0.005004f, 0.001738f, -0.000848f, -0.004383f, -0.008027f, -0.001820f, 0.000724f, -0.003244f, 0.003157f, -0.000877f, -0.005289f, -0.034073f, -0.002024f, 0.004573f, 0.022940f, 0.002764f, -0.000857f, 0.013736f, -0.009942f, 0.029897f, -0.029869f, -0.002966f, -0.006343f, - 0.004919f, -0.001392f, -0.002547f, 0.007761f, -0.005739f, -0.010114f, -0.006906f, -0.005953f, -0.018081f, -0.002781f, 0.012659f, -0.002874f, -0.008103f, 0.019068f, -0.000416f, 0.022922f, -0.022490f, -0.012758f, 0.028174f, -0.002827f, -0.001854f, 0.001738f, -0.017952f, -0.002018f, -0.022381f, 0.006567f, -0.026840f, -0.000623f, 0.019703f, -0.006430f, 0.013378f, 0.017838f, 0.010189f, 0.014054f, -0.018210f, 0.018041f, 0.001844f, -0.047019f, -0.008070f, 0.006894f, -0.004006f, -0.005193f, -0.020342f, 0.015956f, -0.017365f, -0.003341f, -0.019674f, -0.018263f, -0.028497f, 0.025305f, 0.000007f, 0.029486f, -0.014842f, 0.022232f, 0.029254f, -0.019306f, 0.023802f, -0.029473f, -0.024717f, -0.026679f, -0.009474f, -0.018793f, 0.005851f, 0.008902f, -0.001223f, -0.003453f, -0.000343f, -0.021103f, 0.001463f, 0.000257f, 0.012009f, 0.004846f, 0.004584f, 0.008699f, 0.004713f, -0.004579f, -0.000383f, -0.008588f, -0.005327f, 0.000239f, 0.003313f, 0.000161f, 0.003769f, -0.002818f, 0.004065f, -0.001288f, 0.002052f, -0.013091f, 0.000587f, 0.005002f, 0.003593f, 0.007285f, -0.004354f, -0.005779f, -0.007896f, -0.000184f, - -0.000874f, -0.006133f, -0.006896f, 0.000686f, -0.001306f, 0.001113f, -0.000187f, -0.001963f, 0.003248f, 0.010417f, -0.002789f, -0.002455f, -0.001561f, -0.002867f, 0.009131f, 0.000352f, 0.000883f, -0.003269f, 0.005318f, -0.006109f, -0.001427f, 0.004018f, 0.022091f, 0.037558f, 0.005240f, -0.009834f, -0.020352f, 0.012702f, 0.034369f, 0.000457f, 0.009765f, 0.001912f, 0.013643f, 0.009625f, 0.010443f, 0.018925f, -0.022777f, -0.001670f, -0.008536f, 0.029752f, 0.021872f, -0.000951f, 0.033994f, 0.018154f, 0.002947f, -0.031951f, -0.016012f, -0.024333f, -0.011413f, 0.002610f, 0.009124f, -0.008648f, 0.001213f, 0.034809f, -0.006578f, 0.000155f, 0.001699f, 0.035764f, -0.021852f, -0.008646f, -0.008938f, -0.003372f, -0.021378f, 0.024676f, 0.001585f, 0.016593f, -0.025628f, 0.003611f, -0.002838f, -0.015102f, -0.006107f, -0.028092f, 0.008804f, 0.000663f, 0.005896f, -0.003338f, -0.001757f, -0.032630f, -0.011177f, 0.012928f, 0.020783f, -0.005911f, 0.005411f, 0.043682f, -0.002864f, 0.002657f, 0.007966f, 0.019765f, -0.018487f, 0.004369f, 0.022038f, -0.012952f, 0.016014f, 0.004843f, 0.016693f, -0.022089f, - -0.011333f, 0.003157f, 0.005069f, 0.011403f, 0.012730f, 0.012350f, -0.008393f, 0.003682f, 0.007508f, 0.014915f, 0.022988f, 0.010812f, -0.010956f, -0.004943f, -0.008628f, 0.003866f, 0.004834f, 0.010181f, 0.009088f, 0.005663f, 0.009604f, -0.010218f, -0.002111f, -0.010423f, 0.009085f, -0.011962f, 0.012257f, 0.009000f, -0.009227f, 0.005602f, -0.001145f, -0.005450f, 0.001344f, 0.002024f, -0.003332f, 0.002973f, 0.015233f, -0.000299f, -0.000047f, -0.009206f, 0.004787f, -0.000238f, -0.000319f, -0.008338f, 0.008722f, -0.007064f, 0.002719f, 0.003951f, 0.006916f, -0.000581f, -0.003310f, -0.020339f, -0.031039f, 0.008626f, -0.003351f, -0.031301f, 0.008553f, 0.003160f, 0.028351f, 0.025103f, -0.023313f, -0.027925f, 0.006216f, -0.021322f, -0.011275f, 0.000883f, 0.042239f, 0.000603f, -0.005436f, -0.037805f, -0.018996f, -0.003271f, -0.028264f, -0.042848f, 0.029322f, -0.011051f, -0.013605f, -0.002468f, 0.031800f, -0.009980f, 0.003405f, -0.006397f, -0.006487f, -0.018529f, -0.009969f, 0.003106f, -0.044848f, -0.028791f, -0.008370f, -0.016341f, -0.015258f, -0.005240f, -0.017665f, 0.015208f, 0.006861f, 0.004870f, - -0.010820f, 0.007689f, -0.064718f, 0.060062f, 0.035141f, -0.006100f, -0.008319f, 0.033783f, 0.001911f, -0.020235f, -0.028921f, -0.003681f, -0.010236f, -0.012006f, -0.017459f, -0.017713f, 0.021965f, 0.020608f, -0.009493f, 0.045294f, -0.025352f, -0.020721f, -0.018836f, 0.000090f, 0.014644f, -0.053102f, 0.015524f, -0.016810f, 0.027573f, -0.030104f, 0.013022f, -0.002757f, -0.010364f, 0.020738f, -0.039277f, 0.036713f, 0.001900f, -0.000521f, -0.008476f, 0.001053f, -0.000739f, -0.018591f, 0.003440f, -0.005169f, 0.009483f, 0.012328f, -0.011560f, 0.005617f, 0.007675f, 0.017310f, 0.000399f, -0.005706f, -0.001200f, -0.001598f, -0.007133f, 0.005031f, -0.002937f, -0.004215f, 0.004190f, -0.006951f, -0.002441f, 0.001616f, 0.004738f, 0.005882f, -0.014126f, -0.010690f, -0.009460f, 0.001486f, 0.005404f, -0.000092f, 0.003465f, 0.003137f, 0.009004f, 0.004747f, -0.007825f, 0.006886f, 0.001091f, -0.008732f, 0.030762f, 0.002540f, 0.071726f, 0.023369f, -0.001454f, 0.003086f, -0.027753f, -0.035950f, 0.044798f, -0.013266f, 0.005079f, 0.059478f, -0.015497f, -0.002868f, -0.012723f, 0.046384f, 0.008921f, -0.019168f, - 0.027380f, -0.009951f, 0.040671f, 0.021356f, 0.010133f, 0.006032f, -0.004504f, -0.015562f, -0.005075f, -0.004216f, -0.043599f, -0.010945f, -0.007022f, 0.024130f, -0.013501f, 0.004559f, 0.008025f, -0.031228f, -0.046532f, -0.001650f, 0.040188f, -0.002672f, 0.035704f, -0.006171f, -0.049881f, -0.019307f, 0.002282f, 0.011321f, 0.009039f, -0.040569f, 0.000358f, -0.011604f, 0.029490f, -0.030101f, 0.037278f, 0.055117f, 0.035750f, -0.011200f, 0.006685f, 0.022246f, -0.007904f, 0.043192f, 0.049986f, 0.044073f, 0.014426f, 0.048326f, -0.001618f, -0.019443f, 0.006277f, -0.025241f, -0.031857f, 0.017426f, -0.013650f, 0.039499f, 0.020439f, 0.010492f, -0.013517f, -0.048589f, -0.044028f, 0.030955f, -0.019466f, -0.039312f, 0.026311f, 0.052468f, 0.031580f, -0.016795f, 0.025091f, 0.015398f, -0.005392f, -0.012371f, 0.014923f, -0.018621f, -0.005597f, -0.001976f, -0.012779f, 0.001727f, -0.002700f, 0.010822f, 0.006616f, -0.002480f, -0.017020f, 0.009565f, 0.008769f, 0.006013f, -0.003610f, 0.000584f, -0.015890f, 0.001317f, -0.000064f, 0.004176f, 0.003858f, 0.000442f, 0.009630f, -0.003295f, 0.013289f, 0.014903f, - 0.003970f, 0.012108f, 0.001231f, -0.009532f, -0.022543f, 0.005161f, 0.000689f, 0.004910f, -0.003743f, -0.016246f, -0.036253f, 0.021213f, 0.026490f, -0.000411f, 0.012937f, 0.008724f, 0.012793f, 0.010647f, 0.004836f, -0.002910f, 0.006206f, -0.007636f, 0.013706f, -0.024664f, -0.068700f, -0.027584f, 0.037527f, 0.002108f, -0.011289f, -0.023050f, -0.000232f, 0.031551f, 0.040289f, 0.008514f, -0.024908f, -0.004480f, 0.032195f, -0.039228f, 0.003606f, -0.005003f, 0.028786f, 0.032859f, -0.026596f, 0.049917f, 0.009573f, 0.001829f, 0.070583f, 0.000171f, -0.022334f, 0.024577f, -0.011963f, 0.003331f, -0.015265f, 0.005041f, 0.046838f, 0.005195f, 0.059705f, 0.025031f, -0.052449f, -0.057471f, -0.012685f, 0.014618f, 0.031790f, -0.044644f, -0.015888f, -0.006703f, 0.053699f, 0.049067f, -0.042483f, -0.001947f, -0.026014f, 0.015970f, -0.009131f, 0.056103f, 0.000496f, -0.012754f, 0.036797f, -0.007897f, -0.044067f, -0.022479f, -0.007445f, 0.045126f, -0.040624f, 0.024035f, 0.070421f, 0.033080f, 0.047165f, -0.013119f, 0.018993f, -0.013228f, -0.029676f, -0.028666f, 0.014517f, -0.020521f, -0.001682f, -0.007675f, - 0.012569f, -0.000814f, 0.028376f, -0.006950f, -0.013574f, -0.005209f, -0.006120f, 0.006536f, -0.004929f, 0.010516f, -0.020080f, 0.013993f, -0.013417f, -0.006526f, 0.003667f, -0.005770f, -0.006542f, 0.008585f, -0.009059f, -0.003905f, -0.002986f, -0.007781f, -0.024648f, -0.014314f, -0.002784f, -0.003506f, -0.007596f, -0.010176f, -0.002679f, 0.006517f, -0.004676f, 0.003533f, -0.004194f, -0.000960f, 0.005027f, -0.019349f, 0.001584f, -0.003386f, -0.014539f, -0.001325f, -0.034079f, 0.025583f, 0.035860f, 0.031246f, -0.053871f, -0.024629f, 0.032834f, 0.102365f, 0.005451f, 0.022771f, -0.030229f, 0.009861f, -0.002172f, -0.004098f, -0.028431f, 0.009051f, -0.010458f, 0.049453f, 0.037986f, -0.050350f, -0.023307f, 0.054565f, 0.026665f, 0.020019f, 0.005024f, 0.029770f, 0.033261f, 0.011451f, 0.019608f, 0.019345f, -0.025319f, 0.004250f, -0.024809f, -0.010195f, 0.005950f, -0.004124f, 0.003413f, -0.020198f, -0.019351f, 0.015057f, -0.004518f, 0.020532f, 0.015031f, -0.046549f, 0.034566f, 0.007644f, 0.027703f, -0.031229f, 0.017601f, 0.029233f, -0.022847f, -0.035754f, -0.037265f, -0.039665f, -0.040950f, -0.032774f, - 0.011366f, 0.060167f, 0.015177f, 0.018954f, 0.027642f, 0.002573f, -0.001098f, -0.022643f, 0.039331f, -0.050001f, -0.102078f, 0.035369f, -0.023726f, 0.005009f, -0.086670f, 0.021865f, 0.026891f, 0.005286f, 0.016748f, 0.015092f, -0.013184f, -0.021440f, -0.034574f, 0.011414f, 0.007212f, -0.025476f, 0.018686f, -0.009333f, -0.044441f, -0.023487f, -0.000831f, -0.007318f, 0.004343f, 0.003548f, 0.012774f, 0.006669f, 0.002069f, -0.000289f, 0.010083f, -0.005813f, -0.014377f, -0.024448f, -0.015305f, -0.015603f, -0.005907f, -0.008366f, 0.008952f, 0.014700f, 0.010290f, -0.019377f, -0.001928f, -0.007837f, -0.000151f, 0.012032f, 0.003211f, -0.017068f, -0.032910f, -0.002246f, 0.001092f, 0.003263f, -0.011908f, -0.004372f, -0.012437f, -0.001919f, -0.016166f, -0.016167f, 0.010536f, -0.015786f, 0.006454f, 0.003296f, -0.008727f, -0.002781f, 0.010073f, -0.008850f, 0.003673f, -0.012060f, 0.024219f, 0.017294f, 0.023133f, -0.032997f, -0.017030f, -0.004723f, 0.021147f, -0.044009f, 0.073130f, 0.034619f, -0.005914f, 0.039758f, 0.023997f, 0.037881f, -0.019931f, -0.025677f, -0.024804f, 0.045900f, 0.016378f, 0.008197f, - 0.041529f, -0.036447f, -0.117600f, -0.007954f, 0.007882f, 0.013876f, -0.066193f, 0.051194f, 0.037333f, -0.071222f, -0.054717f, 0.001629f, 0.029311f, 0.002362f, 0.016652f, 0.037564f, -0.009993f, 0.023275f, -0.034346f, -0.039456f, -0.031357f, -0.040984f, -0.063608f, 0.017590f, 0.006584f, -0.042835f, 0.056364f, 0.021780f, -0.013786f, -0.013573f, -0.033292f, -0.025059f, -0.058003f, -0.031633f, 0.020599f, 0.051317f, -0.019628f, 0.005024f, 0.021136f, -0.045775f, 0.032897f, 0.044451f, 0.006533f, -0.011566f, 0.038063f, 0.010298f, 0.004240f, -0.027457f, -0.032007f, -0.002481f, 0.056912f, -0.017660f, -0.052647f, -0.001062f, -0.067073f, -0.069927f, -0.072772f, -0.034995f, -0.038443f, -0.024631f, 0.031160f, -0.004527f, 0.027995f, -0.005942f, -0.009395f, -0.026435f, -0.007194f, -0.007884f, 0.014962f, -0.011691f, -0.016952f, -0.003457f, -0.006748f, 0.002339f, -0.024669f, 0.004510f, -0.011468f, -0.009941f, 0.012786f, -0.011869f, -0.004104f, 0.004120f, -0.008926f, 0.018972f, -0.012316f, 0.002740f, 0.030761f, 0.003685f, 0.017867f, -0.007035f, -0.011127f, 0.031298f, 0.004447f, -0.016742f, 0.000338f, 0.000219f, - 0.002157f, 0.004364f, -0.009210f, 0.019530f, 0.000879f, -0.001564f, -0.009811f, 0.001762f, -0.009970f, -0.025758f, -0.044513f, -0.023331f, -0.023919f, 0.028979f, 0.057038f, 0.021056f, -0.026027f, -0.055014f, 0.058992f, 0.031753f, -0.028481f, -0.015353f, -0.015209f, 0.003300f, 0.013867f, -0.018195f, 0.030640f, 0.028502f, 0.001571f, -0.019188f, -0.018197f, -0.017132f, -0.002228f, 0.011063f, -0.008654f, -0.018969f, -0.045104f, 0.013850f, 0.039577f, -0.022796f, 0.034981f, 0.001021f, 0.023458f, -0.019703f, 0.026084f, 0.075774f, -0.028489f, 0.033029f, 0.065803f, 0.011363f, -0.011614f, -0.018372f, 0.019018f, 0.001336f, 0.033529f, -0.025819f, 0.090300f, -0.028083f, -0.060811f, 0.013832f, -0.027778f, 0.071420f, 0.023323f, -0.022502f, 0.003973f, -0.043296f, -0.059350f, 0.072496f, 0.008150f, -0.019708f, 0.071604f, -0.037338f, 0.009180f, -0.021171f, 0.041411f, -0.053246f, -0.059751f, -0.042699f, 0.013010f, 0.025406f, 0.047420f, 0.020136f, 0.050119f, 0.078695f, -0.009955f, 0.015647f, -0.010674f, 0.009730f, -0.002783f, 0.002928f, -0.058287f, 0.001901f, -0.080396f, -0.027023f, -0.016095f, 0.013895f, - -0.003024f, 0.017242f, -0.006678f, -0.024274f, -0.025518f, -0.006095f, -0.017002f, -0.018808f, -0.032304f, -0.000366f, -0.003722f, 0.023887f, 0.009956f, -0.020059f, 0.017564f, 0.008010f, 0.014408f, 0.019172f, -0.025961f, 0.006715f, -0.011048f, -0.005279f, 0.025144f, -0.008994f, 0.012288f, 0.016830f, -0.010819f, -0.028227f, -0.014659f, 0.009679f, -0.046212f, -0.014753f, 0.000504f, -0.006953f, -0.010873f, 0.020145f, -0.022158f, -0.024388f, 0.016154f, 0.027239f, -0.013332f, 0.022656f, -0.015985f, 0.054840f, -0.007643f, 0.001023f, 0.066978f, 0.006620f, -0.035785f, -0.042809f, -0.036761f, 0.067560f, -0.045311f, 0.026425f, 0.032432f, -0.022549f, 0.006968f, -0.038136f, -0.008141f, 0.029787f, -0.026840f, 0.021321f, -0.008808f, -0.047775f, -0.103113f, -0.009914f, 0.093215f, 0.038281f, 0.009732f, -0.019049f, -0.027786f, -0.005710f, -0.036534f, 0.011275f, -0.051585f, 0.061330f, 0.004712f, 0.006884f, 0.005198f, -0.021493f, -0.062275f, -0.024451f, 0.050183f, -0.041501f, -0.010403f, -0.028902f, 0.022452f, -0.020879f, 0.069375f, -0.011782f, 0.014355f, -0.025878f, -0.064653f, 0.013725f, -0.049359f, -0.011749f, - -0.004305f, -0.091232f, -0.076408f, -0.072879f, 0.024019f, -0.013958f, -0.039107f, -0.026083f, -0.025018f, -0.023721f, -0.034915f, -0.024205f, -0.006061f, -0.082011f, 0.022725f, 0.008436f, 0.029989f, -0.018711f, 0.070679f, -0.008084f, 0.013618f, -0.025229f, -0.009765f, 0.037402f, -0.075495f, 0.031327f, 0.049426f, -0.051494f, -0.032897f, 0.002310f, 0.007961f, -0.014192f, -0.024449f, -0.040533f, -0.002499f, 0.000105f, -0.024016f, 0.019550f, -0.017737f, -0.032497f, -0.017569f, -0.014462f, 0.019970f, -0.001440f, 0.000586f, -0.001623f, 0.014874f, -0.039886f, -0.011271f, -0.005633f, -0.007693f, -0.003664f, 0.000539f, -0.047686f, 0.001345f, -0.016130f, -0.012466f, -0.005045f, -0.021076f, 0.004683f, -0.006110f, 0.003131f, 0.000678f, -0.005164f, -0.005389f, -0.012780f, -0.002117f, -0.010721f, -0.002443f, 0.005342f, -0.010812f, -0.018315f, 0.000287f, -0.005361f, -0.004075f, -0.011966f, -0.019219f, -0.014185f, -0.005153f, -0.003737f, -0.003748f, 0.005350f, -0.014165f, -0.015319f, 0.027575f, 0.017579f, 0.033486f, -0.012263f, -0.071299f, 0.020974f, 0.000472f, 0.118050f, 0.119700f, 0.015114f, 0.000648f, 0.028898f, - 0.013676f, 0.030832f, 0.051363f, 0.019915f, 0.053357f, 0.081993f, -0.020785f, 0.011271f, -0.067381f, -0.008890f, 0.008259f, -0.008054f, -0.020393f, -0.039958f, -0.034592f, 0.019487f, 0.018296f, -0.088271f, 0.062945f, 0.017731f, 0.089031f, -0.004858f, -0.018164f, 0.029860f, -0.006634f, 0.094805f, 0.023564f, -0.004231f, 0.017701f, 0.019233f, -0.025681f, -0.056940f, -0.045512f, -0.022028f, 0.069941f, 0.001527f, 0.076923f, 0.010090f, 0.075204f, -0.021217f, -0.104366f, -0.038328f, -0.030555f, 0.054417f, 0.006197f, -0.049955f, -0.073566f, -0.050571f, -0.010543f, 0.063794f, -0.055358f, -0.047348f, -0.031904f, 0.056987f, -0.028129f, -0.015892f, -0.073201f, -0.071975f, 0.022574f, 0.012788f, 0.097360f, 0.025635f, -0.010619f, -0.025902f, 0.030352f, 0.032219f, 0.103996f, 0.002396f, -0.034035f, -0.044663f, -0.003148f, -0.004166f, 0.002148f, 0.016693f, 0.014788f, -0.023822f, -0.005704f, 0.008323f, 0.021529f, -0.022880f, -0.019136f, 0.029729f, 0.042965f, 0.020476f, 0.013029f, 0.017182f, -0.018372f, -0.007361f, -0.011625f, -0.002005f, -0.002598f, 0.009834f, -0.000026f, 0.056659f, 0.011679f, -0.002094f, - -0.017341f, -0.029273f, 0.028147f, 0.045989f, -0.016650f, 0.001005f, 0.001701f, 0.005949f, 0.026105f, 0.011617f, 0.019391f, 0.020040f, 0.005015f, 0.015613f, 0.005053f, -0.000849f, 0.005091f, -0.013827f, -0.004703f, 0.003476f, -0.008375f, -0.005630f, -0.018212f, -0.001104f, 0.005910f, 0.001215f, 0.072207f, 0.026960f, -0.034658f, 0.067399f, -0.003935f, -0.133492f, -0.040282f, 0.083564f, 0.093511f, -0.066035f, -0.065484f, -0.067217f, 0.037481f, 0.056680f, 0.114346f, 0.034103f, 0.014910f, -0.065574f, -0.006454f, -0.004498f, 0.025817f, 0.056640f, 0.041617f, 0.002851f, -0.068951f, -0.134683f, -0.035472f, -0.068414f, 0.101015f, 0.106339f, 0.186599f, -0.056443f, -0.179381f, -0.039683f, -0.061624f, 0.138839f, 0.047433f, 0.140806f, 0.036419f, -0.047905f, -0.136731f, -0.093084f, 0.004928f, 0.016350f, 0.153197f, 0.061572f, -0.005412f, -0.126842f, -0.220151f, -0.058250f, 0.004586f, 0.100933f, 0.231400f, 0.049717f, 0.069664f, -0.149970f, -0.228787f, 0.009096f, 0.052317f, 0.181257f, 0.106831f, 0.075689f, -0.042463f, -0.148143f, -0.120740f, -0.002013f, 0.033746f, -0.004019f, 0.091643f, -0.076753f, - -0.071297f, -0.018479f, -0.162745f, 0.024491f, 0.007497f, 0.043425f, -0.032965f, -0.066586f, -0.035663f, -0.028686f, -0.074669f, 0.016152f, 0.021379f, -0.024708f, -0.004107f, -0.070701f, 0.009569f, 0.019275f, 0.022584f, 0.031551f, 0.009967f, -0.036669f, 0.012114f, -0.012234f, -0.006591f, 0.004307f, 0.056228f, 0.008817f, -0.002229f, -0.015401f, -0.043544f, -0.009378f, -0.017666f, 0.015722f, -0.008277f, 0.017535f, 0.011543f, -0.040403f, -0.089905f, -0.044993f, -0.066180f, 0.052735f, 0.053590f, 0.063290f, 0.036373f, -0.084354f, -0.075685f, -0.117256f, -0.028581f, 0.093335f, 0.103852f, 0.100750f, 0.004484f, -0.113184f, -0.084533f, -0.066355f, -0.001892f, 0.166406f, 0.115578f, 0.046437f, -0.090308f, -0.105328f, -0.078819f, 0.037547f, 0.039226f, 0.057074f, 0.029859f, -0.018700f, -0.026465f, -0.050241f, -0.021916f, 0.014039f, 0.001713f, 0.016813f, 0.023852f, -0.001584f, -0.077821f, 0.102933f, -0.003673f, 0.016222f, -0.044172f, -0.095116f, 0.056095f, -0.095788f, 0.101612f, 0.016303f, 0.007762f, 0.023030f, -0.063393f, 0.062726f, 0.004597f, 0.043984f, -0.060834f, 0.022239f, -0.000898f, 0.075046f, - -0.030786f, 0.019374f, 0.047819f, -0.054760f, -0.033699f, 0.006607f, -0.052469f, 0.084077f, -0.019969f, -0.033010f, 0.073181f, 0.086846f, -0.024276f, -0.062261f, -0.016977f, -0.054744f, -0.011640f, 0.035659f, -0.006702f, -0.068460f, 0.007011f, 0.038581f, -0.025785f, 0.043373f, -0.036286f, 0.017430f, 0.044021f, -0.017050f, 0.028592f, -0.078122f, -0.080994f, 0.082247f, 0.043981f, 0.126335f, -0.006373f, -0.030714f, 0.105090f, -0.059605f, -0.055193f, 0.038312f, 0.034712f, 0.061302f, -0.055889f, -0.025113f, 0.015055f, -0.010633f, 0.059079f, -0.047137f, -0.150277f, 0.039780f, 0.082339f, 0.002098f, -0.070195f, 0.014069f, 0.041403f, -0.015683f, -0.019123f, -0.054677f, -0.019007f, -0.044960f, 0.045217f, 0.012252f, -0.033472f, -0.007791f, 0.054220f, -0.038191f, -0.014933f, -0.034418f, -0.005141f, 0.027792f, -0.039888f, 0.021794f, 0.056741f, 0.023137f, -0.001757f, -0.015430f, -0.004177f, -0.020332f, -0.027835f, 0.044664f, -0.019149f, 0.020861f, -0.007037f, -0.021232f, -0.001083f, 0.005802f, 0.003234f, 0.016970f, 0.018339f, -0.032238f, -0.011039f, 0.017676f, 0.013018f, 0.034186f, -0.005259f, -0.027528f, - 0.010459f, -0.032230f, 0.015091f, -0.029250f, -0.017938f, 0.001726f, -0.007409f, -0.019196f, 0.046005f, -0.019246f, 0.008801f, 0.021669f, 0.003580f, 0.017281f, 0.030286f, 0.000708f, -0.006342f, 0.002830f, -0.002599f, -0.039659f, -0.024351f, 0.151078f, 0.041383f, 0.042027f, -0.127964f, -0.031936f, -0.100235f, -0.084629f, 0.076462f, 0.080478f, 0.159255f, 0.073645f, -0.021127f, -0.030579f, -0.018321f, 0.050472f, 0.035204f, 0.001322f, 0.077600f, 0.015350f, -0.030558f, -0.036300f, -0.029189f, 0.055876f, 0.000395f, 0.048905f, 0.023072f, 0.029632f, 0.007715f, -0.011947f, 0.006055f, -0.000058f, 0.007697f, -0.012400f, -0.002824f, 0.016200f, 0.013802f, 0.104534f, 0.084324f, 0.068867f, -0.005626f, 0.019011f, -0.042091f, -0.006775f, -0.026032f, -0.047622f, -0.049521f, 0.015323f, 0.027619f, 0.039888f, 0.048986f, 0.040318f, -0.024689f, -0.063763f, 0.097776f, -0.069326f, -0.030045f, -0.017587f, 0.033836f, 0.004571f, 0.048092f, 0.049883f, 0.043945f, -0.058403f, -0.020566f, 0.008145f, -0.022586f, -0.094323f, 0.063645f, -0.022025f, -0.016585f, 0.035849f, 0.073798f, 0.083362f, 0.061171f, 0.059549f, - 0.051785f, -0.054642f, 0.007572f, -0.013936f, -0.016580f, 0.031319f, 0.025244f, 0.033357f, 0.016609f, -0.015184f, -0.026867f, -0.039493f, -0.042335f, -0.085821f, -0.033875f, 0.012650f, -0.004486f, 0.052277f, 0.000324f, -0.023906f, -0.007566f, -0.034230f, 0.013379f, 0.003898f, -0.002121f, -0.000555f, 0.022621f, 0.048917f, -0.005619f, 0.002307f, 0.027414f, 0.001812f, 0.000709f, -0.009988f, -0.002817f, -0.011844f, -0.010839f, 0.002733f, -0.022975f, 0.010178f, 0.013744f, -0.017430f, -0.025054f, 0.006775f, 0.005491f, -0.009515f, 0.025306f, 0.033186f, -0.004209f, 0.004729f, -0.010541f, -0.034141f, -0.013917f, 0.006779f, 0.006082f, -0.195394f, -0.097199f, -0.134222f, 0.096990f, 0.021305f, 0.277417f, 0.286484f, 0.285707f, 0.326220f, 0.321503f, 0.230788f, 0.143847f, 0.179994f, 0.079826f, 0.016704f, -0.151737f, -0.132313f, -0.331645f, -0.290229f, -0.260315f, -0.153541f, -0.193487f, -0.147633f, -0.011892f, -0.047193f, -0.018804f, -0.023301f, 0.001428f, -0.000379f, 0.009044f, 0.037840f, 0.040886f, 0.038800f, 0.114678f, 0.117440f, 0.124724f, 0.088937f, 0.249217f, 0.065120f, 0.104927f, 0.174319f, - 0.194568f, 0.072271f, 0.195818f, 0.235355f, 0.185821f, 0.161168f, 0.164099f, 0.018111f, 0.098382f, 0.198121f, 0.195985f, 0.126213f, 0.164532f, 0.143684f, -0.001616f, -0.053035f, -0.037083f, -0.097770f, -0.120451f, -0.015408f, -0.135407f, -0.206929f, -0.161007f, -0.192720f, -0.284856f, -0.130383f, -0.192477f, -0.213593f, -0.302341f, -0.245989f, -0.278780f, -0.318756f, -0.212094f, -0.360436f, -0.426215f, -0.427967f, -0.232584f, -0.289513f, -0.364707f, -0.071548f, -0.162173f, -0.076071f, -0.040512f, 0.119927f, 0.053721f, 0.175854f, 0.093709f, 0.166147f, 0.158377f, 0.104125f, 0.082340f, 0.128914f, 0.238694f, 0.242679f, 0.243713f, 0.248731f, 0.258623f, 0.313966f, 0.280704f, 0.232977f, 0.286579f, 0.323113f, 0.258502f, 0.194436f, 0.232116f, 0.195242f, 0.126431f, 0.159372f, 0.108075f, 0.053918f, 0.023609f, 0.049651f, 0.015032f, -0.019489f, -0.013208f, -0.025262f, -0.061349f, -0.093816f, -0.093195f, -0.101684f, -0.086753f, -0.108705f, -0.171382f, -0.154045f, -0.177099f, -0.199868f, -0.232947f, -0.232323f, -0.192232f, -0.193078f, -0.158048f, -0.100013f, -0.112886f, -0.076535f, -0.053526f, 0.007040f, - 0.000211f, 0.001619f, 0.010413f, 0.036047f, 0.041237f, 0.014830f, 0.032863f, 0.052094f, 0.041529f, 0.019348f, 0.021905f, 0.039229f, 0.023323f, 0.010966f, 0.016364f, 0.022964f, 0.020883f, 0.014628f, 0.017892f, 0.028909f, 0.027633f, 0.013066f, 0.004458f, 0.009660f, 0.017143f, 0.010275f, 0.000007f, 0.006952f, 0.012987f, 0.010179f, 0.004944f, 0.008867f, 0.009456f, 0.007365f, 0.006487f, 0.003255f, 0.002486f, 0.007259f, 0.005817f, 0.006354f, 0.002616f, -0.004037f, -0.005109f, 0.002919f, 0.006078f, -0.001314f, -0.004215f, 0.001150f, 0.000004f, 0.001228f, 0.003608f, 0.002539f, 0.004319f, 0.007850f, 0.007343f, 0.011681f, 0.015713f, 0.018287f, 0.014195f, 0.014487f, 0.015888f, 0.013289f, 0.009330f, 0.010641f, 0.012681f, 0.009806f, 0.004697f, 0.006119f, 0.003653f, 0.002847f, -0.000198f, -0.004843f, -0.004430f, -0.006181f, -0.012726f, -0.017688f, -0.017423f, -0.015275f, -0.019884f, -0.018705f, -0.017074f, -0.015290f, -0.014870f, -0.012298f, -0.009872f, -0.006708f, -0.005604f, -0.003461f, -0.002049f, -0.000519f, 0.000176f, 0.001575f, 0.001586f, 0.002877f, 0.001952f, 0.002304f, - 0.001442f, 0.002027f, 0.000909f, 0.001188f, 0.000244f, 0.000527f} - } -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885]={ {-0.000036f, -0.000011f, -0.000019f, -0.000013f, -0.000030f, -0.000006f, -0.000048f, -0.000013f, -0.000158f, 0.000107f, -0.000008f, 0.000108f, -0.000022f, 0.000046f, 0.000299f, -0.000037f, -0.000351f, -0.000354f, -0.000113f, -0.000220f, 0.000032f, -0.000180f, -0.000473f, 0.000130f, -0.000116f, -0.000091f, 0.000132f, 0.000034f, -0.000158f, -0.000261f, -0.000326f, 0.000037f, -0.000195f, -0.000130f, 0.000076f, -0.000361f, 0.000321f, 0.000322f, -0.000185f, -0.000033f, -0.000117f, -0.000344f, 0.000036f, -0.000314f, -0.000234f, 0.000223f, -0.000150f, 0.000483f, 0.002034f, -0.000891f, 0.000900f, -0.000388f, 0.000319f, -0.000018f, 0.000469f, -0.000211f, 0.000114f, 0.000197f, 0.000239f, 0.000254f, 0.000445f, -0.000116f, 0.000049f, 0.000816f, 0.000612f, -0.001621f, 0.000319f, -0.000213f, 0.000079f, -0.000556f, 0.000361f, -0.000699f, 0.000689f, 0.000567f, 0.000282f, -0.000096f, -0.000219f, -0.000261f, 0.000489f, 0.000445f, -0.000204f, 0.000096f, 0.000846f, -0.000323f, -0.000018f, -0.000295f, 0.000099f, 0.000124f, -0.000024f, -0.000246f, 0.000397f, 0.000054f, -0.000122f, 0.000295f, 0.008176f, -0.000604f, - 0.001128f, -0.000033f, 0.000349f, 0.000145f, 0.000264f, 0.000174f, 0.000772f, -0.000464f, 0.000318f, -0.000173f, 0.000123f, 0.000418f, 0.000659f, 0.000255f, 0.000118f, -0.000335f, 0.000599f, -0.000456f, 0.000221f, -0.000219f, -0.000656f, 0.000054f, 0.000212f, 0.000010f, -0.000213f, 0.000043f, -0.000237f, 0.000409f, -0.000881f, 0.000189f, -0.000213f, 0.000216f, -0.000020f, -0.001232f, -0.000434f, 0.000110f, 0.000181f, 0.000126f, -0.000223f, -0.000289f, -0.000249f, 0.000158f, 0.000461f, -0.000210f, 0.000197f, 0.004950f, -0.005827f, 0.001178f, -0.001392f, 0.000781f, -0.000898f, 0.000723f, -0.001232f, -0.000360f, -0.000756f, -0.000127f, -0.000628f, 0.000069f, 0.001158f, 0.001681f, 0.000710f, 0.000385f, 0.000041f, 0.000538f, 0.001203f, 0.000882f, -0.000533f, -0.000639f, -0.000862f, -0.000400f, -0.000494f, 0.000062f, -0.000071f, -0.000060f, 0.000034f, 0.000270f, -0.000396f, 0.000533f, -0.000524f, -0.000694f, 0.000269f, 0.000007f, 0.000062f, 0.000167f, -0.000485f, -0.000543f, 0.000179f, -0.000323f, -0.000451f, -0.000068f, 0.000073f, 0.000377f, -0.011298f, 0.002275f, -0.000551f, 0.000305f, - 0.000263f, -0.000929f, -0.000408f, 0.000919f, -0.000129f, 0.000096f, 0.001028f, 0.000346f, -0.000367f, -0.000684f, 0.000722f, 0.000081f, -0.000836f, -0.001203f, -0.001752f, 0.000590f, -0.000769f, 0.000202f, -0.000237f, 0.000351f, -0.000163f, 0.000145f, -0.000902f, -0.000887f, -0.000548f, -0.000222f, -0.000555f, 0.000191f, -0.000260f, 0.000343f, 0.001079f, 0.000204f, 0.000202f, 0.000723f, 0.000211f, 0.000184f, -0.000007f, -0.000117f, -0.000685f, -0.000145f, 0.000179f, -0.000109f, -0.000017f, -0.013514f, 0.005078f, -0.001249f, 0.001642f, -0.000779f, 0.001189f, -0.000632f, -0.000167f, -0.001139f, 0.000905f, -0.001351f, 0.000927f, -0.000220f, 0.001290f, -0.001714f, 0.000467f, 0.001625f, 0.000494f, -0.001344f, -0.000459f, -0.000804f, -0.000317f, 0.000528f, 0.000286f, 0.000394f, -0.000190f, -0.000449f, -0.000630f, -0.000625f, -0.000029f, -0.000719f, -0.000103f, -0.000668f, -0.000456f, -0.001878f, -0.000502f, -0.000254f, 0.000131f, 0.000055f, 0.000684f, 0.000292f, 0.000675f, -0.000056f, 0.000781f, 0.000189f, 0.000097f, 0.000197f, 0.001667f, 0.005870f, -0.001647f, 0.002592f, -0.001609f, 0.000662f, - -0.001734f, 0.001325f, -0.000146f, 0.001446f, -0.000140f, -0.000168f, 0.001420f, -0.000259f, -0.000223f, 0.001241f, -0.000640f, -0.001178f, -0.001870f, 0.001620f, -0.000157f, 0.001102f, 0.000107f, 0.000777f, 0.000362f, -0.001091f, 0.000432f, 0.000415f, -0.000097f, 0.000533f, 0.000820f, -0.001084f, 0.000116f, -0.000052f, -0.000116f, -0.000630f, -0.000300f, -0.000617f, 0.000138f, -0.000143f, 0.000437f, 0.001363f, 0.000028f, 0.000682f, -0.000151f, 0.000117f, -0.000174f, 0.000194f, 0.000533f, -0.000272f, -0.000524f, 0.017769f, -0.004406f, 0.001672f, -0.000869f, 0.001478f, -0.000674f, 0.001130f, -0.000659f, 0.000377f, -0.001752f, 0.000786f, -0.001674f, 0.001248f, -0.000526f, 0.000356f, -0.000502f, 0.001765f, 0.000224f, 0.000431f, -0.000877f, 0.001148f, -0.000126f, -0.000554f, 0.000970f, -0.000784f, -0.001216f, 0.000015f, -0.000395f, 0.000554f, -0.000028f, -0.000194f, -0.000412f, 0.000158f, -0.000062f, 0.000209f, -0.000845f, 0.000178f, -0.000386f, 0.001267f, -0.000263f, 0.000599f, 0.000092f, 0.000501f, 0.000936f, -0.000674f, 0.000027f, 0.000209f, -0.000351f, 0.000740f, -0.000180f, -0.000349f, - 0.001515f, -0.009212f, 0.003660f, -0.002832f, 0.001696f, -0.001403f, 0.000504f, -0.001854f, 0.001230f, -0.000732f, 0.001712f, -0.000175f, 0.000757f, -0.001477f, -0.000612f, -0.000083f, -0.000525f, -0.000493f, 0.001974f, -0.001428f, 0.000267f, 0.000924f, -0.001769f, 0.000473f, 0.000650f, -0.000436f, 0.000634f, 0.000218f, 0.000373f, -0.001126f, -0.000081f, -0.000353f, 0.000721f, -0.000555f, 0.000403f, -0.001331f, -0.000251f, 0.000994f, 0.000495f, 0.000323f, -0.000322f, -0.000191f, -0.001005f, -0.001080f, 0.000614f, 0.000231f, -0.000028f, -0.000150f, -0.000074f, 0.000107f, 0.000117f, -0.000219f, -0.000201f, 0.000144f, 0.000165f, -0.000365f, -0.000273f, -0.000224f, -0.014887f, 0.004915f, -0.002612f, 0.000707f, -0.000217f, 0.000863f, -0.001089f, 0.001237f, -0.000465f, -0.000390f, -0.000119f, 0.000904f, -0.000443f, -0.000668f, 0.000539f, 0.001711f, -0.000203f, 0.000101f, -0.002788f, 0.000273f, 0.000074f, 0.001405f, -0.000418f, -0.000180f, -0.002125f, -0.000706f, 0.000054f, 0.000073f, 0.000776f, 0.001061f, -0.001600f, -0.001461f, 0.000991f, 0.000275f, -0.001651f, -0.001255f, 0.000657f, 0.000397f, - -0.000073f, -0.000016f, -0.000618f, 0.000691f, -0.000177f, 0.000273f, 0.000111f, -0.000846f, -0.000346f, 0.000503f, -0.001333f, -0.000646f, -0.000247f, 0.000320f, -0.000249f, 0.000057f, -0.000654f, -0.000025f, -0.000468f, 0.000081f, -0.014869f, 0.006610f, -0.003621f, 0.002787f, -0.002521f, 0.001282f, -0.002872f, 0.000688f, -0.001866f, 0.002998f, -0.001487f, 0.001073f, -0.000166f, 0.000044f, -0.001346f, -0.000366f, -0.000546f, 0.002717f, -0.000495f, 0.001399f, 0.002200f, 0.001277f, 0.000339f, -0.000267f, 0.000540f, -0.000452f, 0.001238f, 0.001207f, 0.000184f, -0.000569f, 0.000224f, 0.000252f, -0.000799f, -0.000340f, 0.000633f, 0.000914f, -0.000655f, -0.000629f, -0.000665f, 0.000072f, -0.000268f, 0.000407f, -0.000642f, 0.000496f, -0.001017f, 0.000332f, -0.000552f, -0.000009f, 0.000118f, -0.000380f, -0.000548f, -0.000682f, -0.000657f, -0.000856f, 0.000122f, -0.000778f, -0.000388f, 0.000032f, 0.005495f, 0.005712f, -0.002160f, 0.001879f, -0.002367f, 0.000326f, 0.000673f, 0.000028f, -0.000968f, 0.001039f, 0.000239f, 0.002244f, 0.001152f, 0.002539f, -0.000429f, 0.001485f, -0.000448f, 0.000938f, - 0.001318f, -0.000213f, -0.001912f, 0.001759f, -0.000231f, 0.000722f, -0.000456f, -0.000032f, 0.000220f, 0.002159f, 0.000289f, -0.001218f, -0.000440f, 0.000260f, -0.000692f, 0.001622f, 0.000667f, -0.000286f, -0.000467f, -0.000963f, 0.000698f, -0.000944f, 0.000902f, 0.000959f, -0.000766f, 0.000539f, 0.000474f, 0.000236f, -0.000111f, 0.001576f, 0.000953f, 0.001147f, -0.000085f, 0.000116f, 0.000487f, -0.000367f, -0.000172f, -0.000134f, -0.000386f, -0.000033f, 0.000044f, 0.000122f, -0.000326f, -0.000689f, -0.000735f, 0.000127f, 0.000354f, 0.016778f, -0.006038f, 0.002051f, -0.002841f, 0.001880f, -0.001884f, 0.002426f, -0.000880f, 0.000082f, -0.001882f, 0.003661f, -0.000568f, 0.003295f, 0.000170f, 0.000538f, -0.002268f, 0.000765f, 0.003308f, -0.001060f, -0.002854f, 0.000385f, 0.000081f, 0.001276f, -0.002069f, 0.001634f, -0.000056f, 0.000116f, -0.000217f, -0.001989f, -0.000615f, 0.000298f, -0.002396f, 0.000363f, 0.000918f, 0.000760f, -0.000703f, -0.000215f, -0.000130f, 0.001078f, 0.000291f, -0.000215f, -0.000525f, 0.000835f, 0.000552f, 0.002112f, 0.000509f, -0.000343f, 0.001150f, 0.000454f, - -0.000167f, 0.000371f, 0.000862f, 0.000574f, 0.000080f, 0.000120f, -0.000739f, 0.000127f, -0.000114f, 0.000863f, -0.000138f, 0.000328f, -0.000144f, 0.000293f, -0.000065f, 0.000271f, 0.005644f, -0.008118f, 0.004887f, -0.003602f, 0.001536f, 0.000563f, -0.000353f, -0.000294f, 0.000984f, -0.002034f, -0.001286f, -0.001048f, -0.000809f, -0.002787f, 0.001435f, -0.002588f, -0.000087f, -0.002069f, 0.000782f, -0.001555f, -0.001216f, -0.000613f, 0.002383f, 0.000342f, 0.002320f, 0.001219f, 0.001596f, 0.002288f, 0.000138f, -0.000280f, -0.000329f, 0.000651f, 0.001771f, -0.000138f, -0.000107f, -0.001161f, 0.000910f, -0.000135f, -0.000677f, 0.000656f, 0.000562f, 0.001835f, 0.000768f, 0.000868f, -0.001272f, -0.000597f, -0.000052f, -0.000235f, 0.000915f, -0.002611f, 0.000589f, -0.000638f, -0.000417f, -0.000807f, -0.000894f, -0.000306f, -0.000883f, 0.000373f, -0.000610f, -0.000101f, -0.001354f, -0.001353f, 0.000026f, -0.000480f, 0.001130f, -0.017232f, -0.003745f, 0.000817f, -0.003247f, -0.001327f, 0.000166f, -0.000078f, -0.002763f, 0.000824f, -0.002751f, 0.000106f, 0.002262f, -0.000393f, -0.000345f, 0.001251f, - 0.000832f, 0.001273f, 0.000101f, 0.001535f, -0.000810f, 0.000452f, 0.001781f, -0.000097f, -0.000082f, -0.001127f, 0.001697f, -0.001271f, -0.000681f, 0.000459f, 0.000705f, 0.001295f, 0.003961f, -0.001056f, -0.000610f, -0.001673f, 0.000126f, -0.001227f, 0.000329f, -0.000478f, -0.001819f, -0.000095f, 0.002397f, 0.000686f, -0.001565f, -0.000774f, 0.000817f, -0.000948f, -0.001178f, 0.000246f, -0.000539f, 0.000158f, 0.000282f, 0.001509f, 0.000245f, 0.000750f, 0.000425f, -0.001236f, -0.000610f, 0.000804f, 0.000770f, -0.000488f, 0.000473f, -0.000082f, -0.000547f, 0.000032f, -0.021153f, 0.017462f, -0.006102f, 0.005190f, -0.003822f, 0.002924f, -0.001109f, 0.001864f, -0.002028f, 0.001251f, 0.001456f, 0.002110f, -0.001372f, 0.002554f, 0.001261f, 0.004343f, -0.000681f, 0.000370f, -0.002299f, 0.000587f, -0.000808f, -0.001430f, -0.001782f, -0.002042f, -0.001888f, 0.002820f, -0.000130f, 0.003384f, 0.000874f, 0.000626f, -0.000060f, 0.000437f, -0.001495f, 0.000247f, -0.000548f, 0.000711f, 0.001997f, 0.000367f, 0.000655f, 0.000127f, 0.000204f, -0.001513f, -0.000839f, -0.000050f, -0.000122f, 0.000213f, - -0.000470f, -0.001392f, 0.000027f, 0.001514f, -0.000491f, 0.000454f, 0.000431f, -0.001232f, 0.000847f, 0.000378f, 0.000462f, -0.000245f, 0.000134f, -0.000124f, -0.000396f, 0.000122f, 0.001343f, 0.000024f, 0.000079f, 0.012301f, -0.001922f, -0.004003f, -0.001407f, -0.000864f, -0.000665f, -0.003529f, -0.001866f, 0.000951f, 0.000576f, 0.000974f, 0.001222f, -0.002380f, 0.000926f, -0.000488f, 0.000822f, 0.003752f, -0.003842f, 0.001294f, 0.001298f, 0.001003f, -0.001009f, -0.002234f, 0.001699f, 0.000488f, 0.001210f, 0.002303f, -0.000019f, 0.003183f, 0.000257f, 0.001467f, 0.000105f, 0.000987f, -0.000902f, 0.001189f, 0.000855f, 0.001134f, -0.000467f, 0.000361f, -0.000112f, 0.001461f, 0.001812f, -0.002738f, 0.003641f, 0.000288f, 0.001003f, 0.000138f, 0.000618f, 0.000688f, -0.000791f, 0.002174f, 0.001166f, 0.000063f, 0.001992f, 0.000834f, -0.001125f, -0.000113f, -0.000759f, -0.000818f, -0.000620f, 0.000344f, -0.000175f, 0.000104f, -0.000067f, -0.002265f, 0.001138f, -0.000910f, 0.000299f, -0.000322f, -0.000149f, -0.000576f, -0.000337f, 0.009748f, 0.000833f, 0.001970f, -0.002549f, -0.000499f, - -0.006301f, 0.001482f, -0.000323f, -0.004287f, 0.003556f, -0.001994f, 0.000105f, 0.002607f, 0.001158f, 0.001953f, -0.001534f, 0.000853f, -0.002003f, 0.000021f, -0.001717f, 0.000617f, -0.002598f, 0.003673f, 0.002638f, 0.002163f, 0.002514f, 0.000549f, -0.000865f, -0.001610f, 0.000693f, 0.002011f, -0.000020f, 0.001366f, -0.001024f, 0.000266f, 0.001316f, 0.000934f, 0.001182f, 0.000073f, 0.000407f, -0.000165f, -0.000888f, 0.000844f, -0.000623f, 0.000388f, 0.000325f, -0.000893f, 0.001173f, -0.001639f, 0.001427f, -0.000775f, 0.001001f, 0.001558f, -0.001944f, 0.000181f, 0.000195f, -0.000794f, -0.001538f, 0.001057f, -0.002477f, -0.001903f, 0.001147f, 0.000485f, 0.000519f, 0.000465f, 0.001495f, 0.001457f, -0.000560f, 0.000197f, 0.000861f, -0.000362f, -0.000037f, 0.015421f, -0.012801f, 0.004358f, -0.003178f, 0.001139f, 0.004014f, 0.003267f, -0.002137f, 0.003915f, 0.002208f, 0.002371f, -0.001606f, 0.001111f, -0.000815f, 0.004647f, 0.001297f, 0.001323f, 0.001803f, 0.001976f, 0.001252f, 0.001355f, -0.003799f, 0.000624f, -0.006873f, -0.002380f, -0.000631f, -0.003928f, 0.000998f, 0.002129f, - -0.001479f, -0.002124f, -0.002508f, -0.002400f, -0.001281f, 0.001403f, 0.001102f, -0.003489f, -0.004048f, -0.000296f, -0.002062f, 0.001122f, 0.000906f, 0.000402f, -0.000284f, 0.001935f, -0.001002f, 0.000114f, -0.000262f, -0.000843f, -0.002599f, 0.002035f, 0.003432f, -0.000446f, -0.000425f, 0.001628f, -0.002411f, 0.002950f, 0.000760f, -0.001468f, -0.000051f, -0.001362f, -0.000578f, -0.000331f, -0.000984f, -0.000245f, -0.000664f, -0.002002f, 0.000529f, 0.000745f, 0.000685f, 0.000739f, 0.000234f, -0.023798f, 0.002420f, -0.002076f, 0.000928f, 0.002482f, 0.001797f, 0.004917f, -0.001948f, -0.000118f, 0.000444f, 0.005875f, 0.002074f, -0.004512f, -0.002929f, 0.002620f, 0.003497f, -0.000815f, -0.001251f, -0.000046f, 0.001640f, 0.003610f, 0.003669f, -0.000003f, -0.006426f, -0.001824f, -0.000619f, -0.000729f, 0.003808f, -0.001678f, 0.002244f, 0.000264f, -0.000362f, -0.003313f, 0.000315f, 0.002724f, -0.004250f, -0.002473f, -0.000962f, -0.000706f, -0.001990f, -0.001657f, -0.003970f, -0.000696f, -0.002677f, 0.000071f, 0.000637f, 0.002942f, -0.001928f, -0.001256f, 0.000296f, -0.000247f, 0.000498f, -0.002453f, - 0.001026f, 0.000992f, 0.000359f, 0.000184f, -0.001842f, -0.001671f, -0.000908f, -0.000496f, -0.000103f, -0.003186f, 0.000702f, 0.000983f, -0.001348f, -0.002925f, 0.001232f, -0.000103f, -0.001442f, -0.000253f, -0.000647f, -0.000455f, 0.001922f, -0.014046f, 0.014828f, -0.002163f, 0.000902f, 0.003463f, 0.004164f, -0.003205f, 0.001986f, 0.000758f, 0.002559f, 0.001716f, 0.003628f, 0.002027f, -0.002514f, -0.004164f, 0.000553f, 0.004318f, 0.008680f, -0.002150f, -0.002991f, 0.002236f, 0.001384f, -0.001712f, -0.004323f, -0.000922f, -0.000893f, -0.003932f, 0.003371f, 0.004001f, 0.000035f, 0.000892f, -0.000109f, 0.003134f, -0.002513f, -0.007753f, 0.003221f, -0.000977f, 0.002551f, 0.001181f, 0.000084f, -0.001961f, -0.002985f, 0.001996f, 0.002403f, 0.001716f, -0.000368f, -0.000215f, 0.002646f, 0.001442f, 0.000801f, -0.001647f, 0.002225f, 0.001818f, -0.000331f, -0.000642f, -0.001323f, 0.001480f, 0.000031f, -0.003861f, 0.003109f, 0.001811f, -0.000726f, 0.000836f, -0.000490f, 0.000040f, -0.000089f, 0.000865f, 0.000230f, 0.001077f, 0.001830f, 0.000922f, -0.000295f, -0.001182f, -0.000751f, 0.002633f, - 0.001034f, -0.000526f, -0.000839f, -0.000156f, 0.004163f, 0.000150f, -0.003249f, -0.006626f, 0.001572f, -0.000366f, -0.005476f, 0.001821f, -0.001831f, 0.000235f, -0.002091f, -0.001628f, 0.001690f, 0.004129f, 0.000484f, 0.005477f, 0.002466f, -0.002784f, -0.003664f, 0.005996f, -0.002637f, -0.000210f, 0.000509f, -0.005661f, -0.000073f, 0.002970f, -0.003306f, -0.000885f, 0.003749f, 0.000224f, 0.001943f, 0.000044f, 0.002457f, -0.000435f, -0.001721f, -0.000240f, 0.003272f, 0.004449f, -0.001496f, 0.000893f, 0.000742f, 0.002964f, -0.001806f, -0.000323f, 0.000545f, -0.000764f, 0.001896f, 0.000862f, 0.000124f, -0.001024f, 0.001508f, 0.001707f, 0.000053f, 0.000075f, 0.001248f, 0.001999f, -0.002450f, -0.000017f, 0.000635f, 0.001095f, -0.001274f, 0.000992f, 0.000456f, 0.000028f, 0.000660f, -0.000769f, 0.000296f, 0.000793f, 0.001626f, 0.002008f, -0.001665f, 0.000179f, 0.031211f, -0.003055f, 0.000472f, 0.001899f, -0.002852f, -0.004895f, -0.002864f, -0.001255f, -0.005558f, -0.005969f, 0.000409f, -0.005293f, -0.002349f, -0.001564f, -0.001334f, 0.003173f, 0.003714f, 0.001139f, 0.007822f, 0.001377f, - -0.003935f, 0.006724f, -0.000719f, 0.004747f, -0.001573f, -0.000554f, -0.004500f, 0.000118f, 0.003911f, -0.000186f, -0.001961f, -0.000816f, 0.000367f, -0.001042f, -0.000871f, 0.001472f, -0.003589f, 0.001388f, 0.000498f, -0.001738f, -0.003405f, -0.002340f, 0.002565f, 0.002505f, 0.003020f, -0.005208f, 0.002862f, 0.000739f, -0.000154f, 0.000177f, 0.000481f, 0.000511f, 0.000639f, -0.000497f, 0.000246f, 0.002665f, -0.000796f, 0.001012f, 0.001250f, -0.001195f, 0.002234f, 0.002528f, 0.000407f, -0.000293f, 0.002366f, 0.001643f, 0.001296f, 0.001547f, -0.002034f, -0.000995f, 0.000441f, -0.000287f, -0.000321f, 0.000067f, 0.001047f, 0.000220f, -0.001971f, -0.018325f, -0.030764f, 0.011182f, -0.000751f, 0.004671f, -0.005360f, 0.000288f, -0.006214f, -0.000776f, -0.008974f, 0.003924f, 0.004180f, -0.000167f, -0.000675f, -0.000078f, 0.000864f, -0.002120f, -0.007649f, 0.014165f, 0.001004f, -0.001777f, 0.004869f, 0.000895f, -0.002532f, 0.006819f, 0.007561f, -0.003205f, 0.004469f, 0.000899f, -0.000941f, -0.007036f, -0.003852f, 0.005560f, -0.002824f, 0.000815f, -0.000364f, 0.003792f, -0.005750f, -0.006448f, - 0.000933f, 0.000130f, -0.004368f, 0.002681f, 0.000552f, -0.002700f, 0.001948f, -0.002978f, -0.002499f, 0.001231f, 0.001161f, 0.000194f, -0.000798f, -0.001386f, 0.001805f, 0.003056f, 0.000448f, 0.000985f, -0.000862f, -0.000834f, 0.002645f, 0.000350f, 0.000596f, -0.002656f, -0.000617f, -0.001762f, 0.001487f, 0.002240f, 0.000022f, 0.001850f, -0.000025f, 0.002454f, -0.001957f, 0.001248f, -0.000029f, -0.000083f, -0.001850f, 0.000013f, -0.001587f, -0.000177f, -0.009875f, 0.029792f, -0.013192f, 0.002260f, 0.001976f, 0.007496f, -0.000919f, 0.004799f, -0.004681f, 0.000326f, -0.009002f, -0.001691f, 0.000071f, 0.003676f, 0.000629f, 0.003785f, -0.002564f, -0.005443f, 0.000733f, -0.008207f, -0.008668f, 0.000295f, -0.002833f, -0.000116f, 0.000765f, 0.001291f, -0.002134f, -0.001395f, -0.003082f, -0.004657f, 0.001914f, 0.002329f, -0.006107f, -0.002723f, -0.007683f, 0.000174f, -0.003384f, 0.002822f, 0.003256f, -0.006291f, 0.001018f, 0.005294f, 0.004731f, -0.002387f, 0.001733f, -0.001747f, -0.000881f, 0.001537f, -0.002858f, -0.000555f, 0.002688f, 0.002151f, 0.001846f, 0.002311f, 0.001213f, -0.000602f, - 0.001777f, 0.001231f, -0.001311f, -0.000000f, 0.003612f, -0.000309f, -0.001650f, -0.000457f, 0.001494f, -0.001472f, -0.003678f, -0.000195f, -0.001281f, 0.001015f, 0.000789f, -0.000464f, -0.001489f, -0.002146f, -0.002595f, 0.002708f, -0.000879f, -0.000028f, -0.000581f, -0.000110f, -0.000324f, -0.024509f, -0.007538f, 0.002846f, -0.003808f, 0.003586f, -0.001543f, 0.000112f, -0.007168f, -0.008630f, -0.001103f, -0.002971f, 0.003725f, 0.001115f, -0.000979f, -0.017920f, 0.009114f, 0.000717f, 0.007953f, 0.009866f, 0.006854f, -0.009334f, -0.002215f, -0.000837f, -0.002268f, 0.002104f, 0.002315f, -0.000088f, -0.003345f, 0.003880f, -0.006281f, -0.003329f, 0.005733f, 0.000364f, -0.002349f, 0.006683f, 0.000233f, 0.007007f, -0.002312f, -0.001037f, 0.000911f, 0.002244f, -0.004879f, -0.003595f, -0.000787f, 0.003978f, -0.001335f, 0.000705f, -0.001476f, 0.002681f, 0.003364f, 0.000706f, 0.000264f, -0.005690f, -0.000510f, 0.002889f, 0.003251f, -0.001734f, 0.003632f, 0.001235f, -0.000887f, 0.000993f, -0.003504f, -0.001056f, -0.002314f, 0.002441f, 0.000466f, -0.000774f, 0.000951f, -0.006077f, 0.000134f, 0.001239f, - 0.003038f, 0.001038f, -0.001514f, 0.002913f, 0.000367f, -0.003805f, -0.001664f, -0.001919f, -0.000448f, 0.000883f, 0.015647f, 0.005219f, -0.009558f, -0.001705f, -0.004170f, 0.003209f, -0.005807f, 0.004692f, -0.001159f, 0.005472f, 0.003765f, 0.006662f, -0.009167f, 0.010824f, -0.006788f, 0.006305f, -0.003759f, 0.003754f, 0.000620f, 0.003179f, -0.005902f, -0.013369f, 0.005064f, 0.009204f, -0.003463f, 0.003745f, -0.004814f, 0.001057f, -0.003197f, 0.009685f, -0.000195f, -0.001012f, 0.002221f, -0.004778f, -0.003395f, -0.002819f, 0.004168f, -0.000002f, -0.001679f, -0.000040f, -0.000948f, 0.006644f, 0.004378f, -0.002544f, 0.002061f, 0.002503f, -0.002885f, -0.001651f, -0.002610f, -0.005108f, -0.000807f, 0.000064f, -0.000796f, -0.001903f, -0.005251f, -0.000251f, 0.007740f, 0.004221f, -0.003392f, 0.004344f, -0.000583f, -0.000114f, 0.003565f, 0.001884f, -0.003859f, 0.001376f, 0.000720f, 0.003830f, 0.004518f, -0.003718f, 0.001554f, 0.002669f, 0.003421f, -0.000349f, -0.000222f, -0.001308f, -0.000767f, 0.001953f, -0.000446f, 0.003580f, -0.000935f, 0.033353f, -0.027169f, -0.004544f, 0.001372f, -0.000509f, - -0.007502f, 0.002537f, 0.001977f, 0.010663f, -0.003476f, 0.002110f, 0.008757f, 0.000254f, 0.005269f, 0.017313f, -0.003752f, -0.001108f, -0.008996f, -0.008399f, 0.000391f, 0.002881f, -0.003794f, 0.001661f, 0.015251f, 0.008842f, 0.001269f, 0.000598f, 0.001243f, 0.008462f, -0.007040f, -0.003091f, -0.000390f, 0.004377f, -0.000676f, 0.001071f, -0.003572f, 0.001374f, -0.006345f, -0.003705f, -0.004798f, 0.000105f, -0.004298f, 0.001056f, -0.007654f, 0.003559f, -0.015292f, -0.003884f, 0.002094f, 0.002854f, -0.000576f, -0.003494f, 0.001179f, 0.000483f, 0.001828f, -0.004150f, 0.001856f, -0.002416f, -0.002771f, -0.006714f, -0.005035f, -0.001450f, -0.000848f, 0.000366f, 0.001138f, 0.002198f, 0.000404f, 0.001069f, -0.004035f, 0.000008f, -0.004924f, -0.000704f, -0.000348f, 0.000168f, 0.001626f, 0.004944f, -0.003080f, -0.001331f, -0.000335f, -0.002579f, -0.004547f, 0.001053f, -0.021004f, -0.014597f, -0.001011f, -0.002897f, 0.011125f, 0.000437f, 0.002118f, -0.013758f, 0.000791f, 0.001976f, 0.000868f, 0.001142f, 0.008421f, -0.010326f, 0.002275f, -0.002145f, -0.007096f, -0.003401f, 0.006689f, -0.002239f, - 0.005458f, -0.001763f, 0.003192f, 0.001768f, -0.001045f, -0.000742f, 0.003604f, -0.000399f, 0.000015f, -0.008827f, 0.004472f, 0.004069f, 0.003835f, 0.004421f, -0.007933f, -0.008163f, 0.004861f, 0.007230f, -0.008536f, 0.003247f, 0.001292f, 0.007509f, 0.004331f, 0.000795f, 0.005050f, -0.002548f, -0.005134f, -0.000700f, -0.009949f, -0.007222f, -0.000768f, -0.000287f, 0.001632f, -0.004687f, 0.001704f, -0.003742f, -0.012769f, -0.003673f, -0.003417f, -0.012555f, 0.000057f, -0.001980f, -0.001443f, 0.001529f, 0.003968f, -0.003634f, 0.002458f, 0.001693f, -0.005679f, -0.003561f, -0.004359f, -0.000850f, -0.001273f, -0.000030f, -0.001786f, 0.002511f, -0.002752f, -0.000619f, -0.002336f, 0.004242f, -0.004574f, 0.002831f, -0.000706f, -0.000927f, 0.000270f, 0.001262f, -0.001062f, -0.013116f, 0.020068f, -0.010479f, -0.004445f, -0.006116f, 0.001628f, 0.001755f, 0.002998f, -0.001239f, 0.008790f, 0.006621f, -0.006229f, -0.011118f, 0.004225f, -0.004157f, 0.010308f, 0.000868f, 0.004434f, 0.005409f, -0.003824f, -0.003743f, 0.013683f, -0.007786f, -0.001823f, -0.003944f, 0.000541f, -0.001615f, 0.001874f, -0.002289f, - -0.000840f, -0.010493f, 0.009342f, -0.003222f, -0.000756f, 0.010988f, -0.007445f, -0.009462f, 0.000932f, -0.004286f, -0.006160f, -0.000026f, -0.003120f, 0.002499f, -0.013596f, -0.004531f, -0.003278f, -0.000313f, 0.004896f, 0.000076f, 0.001041f, 0.002506f, -0.002264f, 0.001917f, 0.003302f, 0.002794f, 0.003138f, -0.001737f, -0.002814f, -0.002521f, 0.003559f, -0.008263f, -0.001722f, -0.001938f, -0.001957f, 0.005424f, -0.003578f, -0.005780f, 0.005957f, 0.001798f, 0.003623f, 0.006967f, -0.002460f, -0.002313f, 0.003530f, -0.003752f, -0.004666f, -0.004378f, 0.002703f, 0.002004f, -0.002491f, 0.002406f, 0.000897f, 0.002836f, 0.000605f, -0.005224f, 0.003598f, -0.001734f, -0.027456f, 0.013827f, 0.014891f, 0.007660f, 0.006959f, -0.004862f, 0.007072f, -0.011827f, 0.000447f, -0.013906f, -0.001782f, -0.006037f, 0.006540f, -0.006619f, -0.005493f, -0.001458f, -0.010194f, 0.003069f, -0.004635f, 0.004584f, -0.009569f, 0.016094f, -0.005227f, 0.007635f, -0.006543f, 0.000705f, -0.006556f, -0.002052f, 0.003671f, 0.010327f, 0.011553f, -0.005711f, 0.000079f, -0.003350f, -0.006049f, -0.004586f, -0.016413f, -0.000339f, - 0.002787f, -0.015416f, 0.006064f, 0.003105f, 0.004267f, 0.007458f, 0.004696f, 0.002537f, -0.005170f, -0.001646f, -0.005770f, -0.002890f, 0.003127f, -0.012319f, 0.004903f, 0.002475f, 0.000815f, -0.005794f, -0.003427f, 0.003230f, 0.009995f, 0.004248f, 0.002600f, -0.003882f, 0.004179f, 0.000629f, -0.004716f, 0.001326f, -0.003407f, -0.005349f, -0.002797f, -0.001226f, -0.004876f, 0.005616f, 0.003169f, 0.004580f, 0.002530f, -0.004025f, 0.001354f, 0.007005f, -0.001364f, 0.006510f, 0.003439f, 0.002437f, 0.004364f, -0.002228f, -0.002603f, 0.001730f, 0.001140f, 0.022886f, -0.015598f, -0.006494f, -0.001913f, 0.000004f, 0.011184f, -0.002028f, 0.003715f, -0.006327f, 0.003518f, -0.003907f, -0.017942f, -0.012320f, -0.004539f, 0.006526f, -0.000695f, -0.009893f, -0.009259f, -0.019590f, -0.006267f, 0.002577f, 0.002734f, 0.000969f, -0.001949f, -0.001100f, -0.006019f, 0.001653f, 0.002633f, 0.003395f, 0.000840f, -0.000844f, -0.002281f, -0.009321f, -0.002317f, -0.002079f, 0.004790f, -0.000930f, -0.007408f, -0.002889f, 0.002239f, -0.008356f, 0.001514f, -0.008620f, 0.004899f, 0.006824f, -0.006368f, -0.012498f, - -0.002356f, -0.003900f, -0.005675f, 0.000648f, 0.001205f, 0.001279f, 0.003149f, 0.000200f, -0.004858f, 0.007908f, 0.012286f, -0.005855f, 0.005134f, 0.002084f, 0.005856f, -0.008812f, 0.003404f, 0.001159f, 0.003222f, -0.012694f, 0.010128f, 0.001254f, 0.001196f, -0.001517f, -0.007210f, 0.001922f, 0.000981f, 0.001814f, 0.002280f, -0.007904f, -0.004133f, 0.001593f, 0.003783f, -0.001980f, 0.000049f, 0.002975f, 0.001223f, -0.001405f, -0.003749f, 0.002777f, 0.037062f, -0.020719f, 0.001890f, -0.002088f, -0.004422f, -0.015461f, -0.000842f, -0.000862f, 0.012568f, 0.005744f, 0.025398f, -0.010111f, 0.000967f, 0.002773f, 0.006075f, -0.002606f, -0.001185f, 0.010294f, -0.006479f, 0.014819f, 0.008975f, -0.020613f, 0.019628f, 0.006918f, -0.007104f, -0.005126f, -0.007749f, -0.004039f, 0.001392f, 0.000896f, -0.005578f, 0.013046f, 0.001652f, -0.006261f, -0.005561f, 0.001267f, -0.006880f, -0.012119f, 0.000091f, 0.007224f, 0.002849f, 0.008787f, -0.004114f, 0.002730f, 0.009388f, 0.013544f, 0.003163f, -0.014027f, 0.004567f, -0.004518f, -0.007768f, 0.002039f, 0.005891f, 0.003407f, -0.001755f, -0.012729f, - -0.011188f, 0.015698f, -0.002121f, 0.012132f, 0.001340f, -0.004779f, 0.005895f, -0.010520f, -0.004715f, 0.005076f, -0.001417f, 0.010439f, -0.008450f, -0.016616f, -0.004730f, -0.000810f, -0.005172f, -0.003979f, 0.010271f, -0.003454f, 0.001830f, -0.009484f, -0.009343f, 0.004544f, 0.002305f, 0.003830f, -0.004116f, 0.003911f, 0.000318f, -0.002204f, -0.000562f, -0.041733f, -0.027091f, 0.010055f, -0.014039f, 0.004588f, -0.006976f, -0.025220f, -0.018643f, 0.033855f, -0.015468f, 0.015331f, 0.008691f, -0.008742f, 0.007943f, -0.004928f, 0.010708f, 0.011865f, -0.000688f, -0.003269f, 0.020313f, -0.006502f, -0.022801f, 0.000451f, -0.009509f, 0.002412f, 0.002234f, 0.013773f, 0.007328f, 0.002927f, 0.006773f, -0.006085f, 0.000067f, 0.015075f, 0.009654f, -0.002627f, 0.003927f, -0.013167f, -0.020413f, -0.015015f, -0.010492f, -0.002883f, -0.002853f, 0.003869f, -0.001851f, -0.005626f, 0.013183f, 0.003531f, -0.009809f, -0.009151f, -0.002604f, 0.003894f, -0.009885f, 0.004051f, 0.012300f, -0.000168f, 0.004640f, -0.008334f, 0.006582f, 0.004832f, 0.001558f, 0.004927f, -0.007353f, -0.011364f, -0.016064f, 0.008171f, - 0.006394f, 0.000635f, 0.006345f, 0.001272f, -0.007348f, -0.001477f, 0.000608f, -0.012807f, -0.001130f, -0.019940f, -0.010965f, 0.003425f, -0.005073f, 0.003921f, 0.000512f, -0.002567f, -0.002695f, -0.001802f, -0.003692f, 0.003632f, 0.000136f, -0.000511f, -0.049908f, 0.017115f, -0.003898f, -0.003197f, 0.009008f, 0.002276f, 0.005056f, 0.021864f, 0.013072f, 0.016535f, 0.008344f, 0.022549f, -0.003878f, -0.021787f, 0.003292f, -0.002368f, -0.009311f, -0.019288f, -0.008393f, 0.017039f, 0.003903f, -0.001077f, 0.003594f, -0.001194f, 0.000295f, 0.014379f, 0.001868f, 0.005398f, -0.002108f, 0.003635f, 0.014277f, -0.003833f, -0.009521f, 0.007333f, -0.016948f, -0.016970f, -0.010934f, -0.002054f, 0.000513f, 0.007183f, 0.016712f, 0.000367f, -0.005716f, -0.016508f, -0.027197f, -0.009470f, -0.003940f, -0.001512f, -0.000151f, 0.010169f, -0.012451f, 0.022598f, 0.011708f, -0.002014f, 0.006494f, -0.008728f, 0.001635f, 0.000312f, 0.010420f, 0.020215f, 0.013568f, -0.011687f, -0.004950f, 0.003497f, -0.001891f, -0.002377f, 0.001049f, -0.005960f, -0.019449f, -0.001325f, -0.003580f, -0.001244f, 0.003058f, -0.007423f, - -0.002552f, -0.013120f, -0.001408f, 0.002029f, 0.013911f, 0.006993f, 0.001953f, 0.002417f, 0.003513f, 0.000614f, -0.011774f, 0.002608f, -0.002746f, 0.003329f, -0.001441f, -0.001360f, -0.006452f, 0.020193f, 0.020442f, 0.006855f, 0.013634f, 0.009800f, 0.021458f, -0.019114f, 0.022315f, -0.027523f, -0.004938f, 0.025491f, 0.035005f, 0.007208f, -0.002355f, 0.012669f, -0.010919f, -0.012708f, 0.025292f, 0.003981f, -0.004035f, 0.006072f, 0.020312f, -0.005488f, 0.012414f, -0.004221f, -0.005234f, -0.002567f, 0.009107f, -0.023779f, -0.003000f, 0.011380f, -0.005361f, 0.001091f, -0.008483f, 0.004792f, 0.018630f, -0.017403f, 0.005477f, -0.005239f, 0.006022f, -0.009158f, 0.012486f, 0.000955f, 0.004449f, 0.004988f, -0.021053f, 0.010124f, -0.029272f, -0.006056f, 0.016444f, 0.001666f, -0.010513f, 0.018156f, -0.006397f, -0.011142f, 0.013171f, -0.005575f, -0.003874f, -0.002215f, 0.007925f, -0.001327f, 0.002033f, -0.016057f, 0.005711f, 0.001349f, 0.031084f, -0.023560f, -0.010286f, 0.002652f, -0.006104f, 0.006897f, 0.008714f, -0.011407f, 0.021721f, 0.008015f, -0.000169f, 0.003437f, 0.007232f, -0.003679f, - -0.011886f, 0.004519f, -0.006163f, 0.001800f, -0.002470f, 0.005530f, -0.007556f, 0.002130f, 0.000013f, -0.004133f, 0.004953f, -0.001912f, 0.041689f, -0.026158f, 0.000957f, -0.004240f, -0.007018f, 0.000794f, -0.009584f, -0.004098f, -0.030923f, -0.025914f, -0.025781f, 0.008548f, -0.005407f, 0.008444f, -0.005914f, -0.018792f, 0.029824f, 0.020723f, -0.013898f, -0.011733f, -0.016400f, -0.003515f, 0.006368f, 0.009757f, 0.012060f, -0.000950f, 0.009332f, -0.002790f, -0.011826f, -0.014516f, 0.008994f, -0.006671f, 0.027247f, 0.016967f, 0.025133f, 0.003424f, 0.009135f, 0.024642f, 0.017158f, -0.005556f, 0.004520f, -0.001229f, 0.000310f, 0.002495f, -0.011537f, -0.008441f, 0.004453f, -0.014569f, -0.014861f, 0.014258f, 0.016386f, -0.018096f, -0.000576f, 0.031751f, 0.022235f, -0.001290f, -0.010526f, -0.002475f, 0.006631f, 0.005839f, -0.004290f, -0.012039f, 0.014284f, -0.001120f, 0.003524f, 0.010044f, 0.012997f, -0.013740f, 0.005865f, -0.002398f, 0.005430f, -0.021271f, 0.003945f, 0.018864f, -0.018914f, -0.015761f, -0.008028f, 0.008271f, 0.015082f, -0.008681f, 0.008326f, -0.007513f, -0.000684f, 0.000237f, - 0.003196f, 0.005426f, -0.002558f, -0.001368f, 0.003489f, 0.002950f, 0.000113f, -0.000641f, 0.002548f, 0.033810f, 0.013011f, -0.004524f, -0.001100f, 0.010600f, -0.012669f, -0.016472f, 0.014113f, -0.019678f, -0.025479f, 0.006763f, -0.013676f, -0.017623f, -0.009198f, 0.016827f, 0.041281f, 0.017085f, -0.022474f, 0.042285f, 0.004904f, -0.006629f, 0.007617f, -0.024693f, 0.006278f, 0.003411f, -0.017703f, 0.015310f, -0.004763f, 0.003022f, -0.012747f, 0.007160f, -0.011649f, 0.021401f, -0.025347f, -0.009334f, -0.008758f, 0.012075f, 0.013933f, 0.012418f, -0.013472f, 0.003940f, -0.014084f, -0.004041f, 0.007505f, 0.017889f, 0.008257f, -0.008216f, 0.017423f, 0.008889f, 0.014055f, 0.000945f, 0.016384f, -0.007163f, 0.009059f, -0.024941f, 0.028026f, -0.002429f, 0.003903f, -0.007427f, -0.014611f, 0.000753f, 0.009362f, 0.022393f, 0.006584f, -0.026771f, 0.011420f, -0.010826f, 0.022060f, 0.001916f, -0.008420f, 0.004284f, -0.007281f, 0.004610f, -0.015591f, 0.006247f, 0.001489f, 0.001376f, 0.002499f, -0.003035f, 0.001611f, -0.004181f, -0.006533f, 0.008755f, 0.005479f, 0.005058f, -0.011558f, 0.003836f, - -0.006268f, 0.005424f, 0.001218f, -0.000688f, 0.002708f, 0.001325f, -0.069347f, 0.002961f, 0.011498f, 0.027122f, 0.008851f, -0.042694f, 0.056661f, 0.020721f, -0.026081f, 0.009265f, 0.056356f, 0.012603f, -0.013802f, -0.001789f, -0.034297f, 0.017496f, 0.001538f, -0.008824f, 0.004838f, 0.011635f, -0.022271f, 0.011783f, -0.027885f, 0.002862f, -0.025422f, -0.022849f, -0.009782f, 0.010636f, 0.016208f, -0.012525f, 0.014165f, -0.024775f, -0.003633f, 0.027675f, 0.002483f, -0.010078f, -0.003341f, 0.005352f, -0.006507f, -0.018390f, -0.020526f, -0.002775f, -0.009465f, 0.019977f, -0.028215f, 0.029743f, 0.009417f, 0.003758f, -0.010058f, -0.003329f, 0.013713f, -0.011222f, 0.018527f, 0.004566f, 0.016740f, -0.006253f, -0.009835f, -0.029504f, 0.009990f, -0.003019f, -0.030442f, 0.009069f, -0.002134f, 0.018442f, 0.029681f, -0.012615f, 0.006678f, 0.014639f, 0.015567f, 0.003169f, -0.009173f, -0.001814f, -0.036851f, -0.001834f, 0.003262f, 0.009042f, -0.000288f, 0.024672f, 0.005251f, 0.012252f, -0.013989f, -0.009970f, 0.018386f, -0.001925f, -0.003866f, 0.011165f, -0.002707f, -0.003169f, -0.000319f, -0.000642f, - 0.001093f, -0.002027f, 0.010198f, 0.085892f, 0.039158f, 0.008163f, 0.013966f, -0.017580f, -0.011799f, -0.004142f, 0.032466f, -0.022976f, 0.003696f, -0.019112f, -0.052787f, -0.025295f, 0.012121f, -0.013465f, 0.008730f, -0.020894f, -0.001049f, -0.022468f, 0.019310f, -0.022748f, -0.016375f, -0.048964f, -0.009130f, -0.007670f, -0.012868f, 0.025548f, -0.008288f, -0.020415f, 0.006660f, 0.019717f, 0.007311f, 0.006712f, -0.002933f, -0.004108f, -0.012946f, 0.010068f, -0.016668f, -0.004474f, -0.010357f, -0.029184f, 0.004453f, -0.020243f, 0.008188f, 0.002639f, -0.005948f, -0.000633f, -0.021283f, -0.001188f, -0.004843f, 0.031158f, -0.008962f, -0.000715f, 0.012666f, -0.017053f, -0.007579f, 0.031619f, -0.018442f, 0.012099f, 0.000828f, 0.028123f, 0.039933f, -0.002333f, 0.005162f, 0.004000f, 0.013818f, 0.007236f, -0.030464f, 0.002807f, 0.007704f, 0.010761f, -0.013038f, -0.020279f, 0.002132f, 0.005902f, -0.005304f, -0.007706f, -0.032679f, -0.016120f, -0.018796f, 0.001322f, 0.004128f, -0.006158f, -0.008982f, -0.010200f, -0.002505f, -0.005119f, -0.005719f, 0.006811f, -0.003208f, 0.003300f, -0.011759f, 0.000842f, - -0.004543f, -0.008146f, 0.001910f, 0.004789f, -0.006344f}, - {-0.000043f, -0.000012f, -0.000046f, 0.000003f, -0.000030f, 0.000068f, 0.000045f, -0.000216f, 0.000003f, -0.000141f, -0.000168f, 0.000045f, 0.000141f, 0.000137f, 0.000050f, -0.000312f, -0.000191f, 0.000062f, -0.000098f, 0.000016f, 0.000063f, 0.000081f, 0.000131f, -0.000097f, -0.000106f, -0.000197f, -0.000114f, -0.000001f, -0.000448f, -0.000010f, -0.000045f, -0.000131f, 0.000092f, -0.000259f, -0.000226f, -0.000459f, -0.000064f, -0.000406f, -0.000125f, -0.000011f, 0.000322f, 0.000088f, 0.000246f, -0.000128f, 0.000261f, -0.000071f, 0.000051f, 0.000314f, 0.001946f, -0.001525f, 0.000949f, -0.001206f, 0.000614f, -0.000588f, -0.000581f, -0.000350f, -0.000331f, 0.000351f, 0.000403f, -0.001493f, -0.000083f, 0.000219f, -0.000150f, -0.000251f, -0.000875f, -0.000319f, 0.000621f, 0.000943f, 0.000471f, 0.001487f, 0.000301f, -0.000265f, 0.000304f, 0.000257f, -0.000154f, 0.000486f, 0.001056f, -0.000406f, -0.000012f, 0.000451f, -0.000015f, -0.000103f, -0.000759f, -0.000029f, 0.000383f, 0.000308f, 0.000061f, 0.000022f, -0.000253f, 0.000268f, -0.000029f, 0.000033f, 0.000014f, -0.000258f, 0.007057f, -0.000467f, - 0.000608f, -0.000454f, 0.000448f, -0.000544f, 0.000106f, -0.000139f, -0.000132f, 0.000398f, -0.000380f, -0.001290f, 0.000363f, 0.000125f, 0.000390f, 0.000860f, 0.000457f, 0.000304f, -0.000123f, -0.000751f, -0.000262f, 0.000335f, -0.000108f, -0.000128f, 0.000718f, -0.000927f, -0.000298f, -0.000023f, -0.000164f, -0.000235f, 0.000342f, 0.000375f, 0.000467f, 0.000126f, 0.000162f, -0.000202f, 0.000650f, -0.000037f, 0.000497f, 0.000347f, -0.000124f, -0.000074f, 0.000233f, -0.000002f, -0.000147f, -0.000075f, 0.000001f, 0.005198f, -0.004955f, 0.000785f, -0.001335f, 0.000725f, -0.000085f, 0.000525f, -0.000470f, 0.000940f, -0.000392f, 0.000572f, -0.001180f, 0.000053f, -0.000682f, 0.000203f, -0.000104f, -0.000156f, -0.000314f, -0.000865f, -0.000084f, 0.000110f, -0.000425f, 0.000721f, -0.000318f, -0.000512f, -0.000651f, 0.000399f, -0.000415f, 0.001023f, -0.000102f, 0.000010f, 0.000303f, 0.000011f, 0.000026f, -0.000445f, -0.000377f, -0.000098f, 0.000107f, -0.000166f, -0.000434f, 0.000396f, 0.000281f, 0.000705f, -0.000159f, 0.000237f, -0.000094f, 0.000138f, -0.012165f, 0.001445f, -0.000898f, 0.000042f, - -0.000125f, -0.001006f, 0.001121f, -0.000256f, 0.000114f, 0.000483f, 0.000157f, 0.001297f, -0.000048f, -0.000506f, 0.001551f, 0.000637f, 0.001401f, -0.000013f, -0.001822f, -0.001084f, -0.000871f, 0.000774f, -0.000944f, 0.000096f, -0.000334f, -0.000308f, 0.000126f, 0.000301f, -0.000264f, -0.000560f, -0.000415f, 0.000388f, 0.000434f, 0.000818f, -0.000050f, -0.000095f, -0.000037f, 0.000513f, -0.000543f, 0.000161f, 0.000233f, 0.000385f, -0.000440f, 0.000491f, -0.000536f, -0.000080f, 0.000197f, -0.015368f, 0.005593f, -0.002231f, 0.002597f, -0.001774f, 0.001201f, -0.001925f, 0.001122f, -0.001425f, 0.000575f, 0.001089f, 0.000073f, 0.000428f, 0.001002f, -0.000616f, 0.000726f, -0.000795f, -0.000578f, -0.001775f, 0.001653f, -0.001036f, 0.001115f, 0.000098f, 0.000016f, -0.001702f, -0.000040f, 0.000348f, -0.000221f, -0.000041f, -0.000041f, 0.000733f, -0.000083f, -0.000488f, 0.000567f, 0.000181f, -0.000195f, 0.000051f, 0.000049f, 0.000077f, 0.000338f, -0.000449f, 0.001219f, -0.000082f, -0.000722f, -0.000062f, -0.000381f, -0.000028f, 0.000757f, 0.006997f, -0.001505f, 0.002654f, -0.001219f, 0.000911f, - -0.000989f, 0.003308f, -0.000638f, 0.001765f, -0.000204f, -0.000130f, 0.000447f, -0.000002f, -0.002275f, 0.000516f, -0.000206f, -0.001026f, -0.000249f, 0.000038f, -0.002862f, -0.000079f, 0.000235f, 0.000904f, -0.000022f, -0.000544f, -0.000111f, 0.000980f, 0.000180f, -0.000486f, -0.000963f, 0.001472f, -0.000913f, -0.000036f, -0.001361f, -0.000150f, 0.000004f, 0.000237f, -0.000331f, 0.000361f, 0.000589f, -0.000576f, 0.000467f, -0.000022f, 0.000373f, -0.000021f, 0.000675f, -0.000340f, -0.000204f, 0.000608f, 0.000849f, 0.018429f, -0.005417f, 0.000770f, -0.000947f, 0.001181f, -0.000021f, -0.000047f, -0.002517f, 0.001081f, -0.001120f, 0.000729f, 0.000231f, 0.000359f, 0.000766f, 0.001217f, 0.000159f, 0.000404f, -0.002124f, 0.000738f, 0.000737f, -0.001374f, -0.000296f, 0.001386f, 0.000880f, 0.000875f, 0.001972f, 0.001096f, 0.000257f, 0.000505f, -0.000788f, 0.000611f, -0.000216f, 0.001129f, 0.001465f, -0.000238f, 0.000469f, 0.000918f, -0.000435f, 0.000301f, -0.001345f, -0.000377f, 0.001269f, -0.000003f, -0.000957f, -0.000339f, 0.000355f, 0.000945f, -0.000109f, 0.000525f, -0.000048f, -0.000806f, - 0.001333f, -0.009853f, 0.004178f, -0.002859f, 0.001902f, -0.001693f, 0.002241f, -0.001426f, 0.000114f, -0.001211f, -0.001492f, -0.002099f, 0.000169f, -0.001240f, 0.000631f, 0.000725f, 0.001620f, -0.002596f, 0.001633f, -0.000609f, 0.002259f, 0.000507f, -0.000110f, 0.000192f, 0.000195f, -0.000514f, -0.000426f, 0.000354f, -0.001043f, 0.000714f, 0.001288f, -0.001706f, -0.000356f, -0.000090f, 0.000714f, -0.000644f, 0.001833f, -0.001876f, 0.000389f, 0.000008f, 0.000137f, -0.000801f, 0.000152f, -0.000499f, 0.000502f, 0.000084f, 0.000115f, -0.000568f, -0.000078f, -0.001188f, -0.000383f, -0.000060f, 0.000287f, 0.000101f, -0.000414f, -0.001508f, -0.000030f, -0.000301f, -0.015900f, 0.005062f, -0.003243f, -0.000201f, -0.000648f, 0.001012f, -0.002733f, 0.000211f, 0.000888f, 0.000739f, -0.000946f, 0.000562f, -0.001212f, -0.001997f, -0.000772f, 0.000269f, -0.001192f, 0.004238f, 0.000128f, -0.001155f, -0.000372f, -0.001395f, -0.000650f, 0.001306f, 0.000784f, 0.001690f, -0.000141f, 0.000763f, -0.000933f, 0.000406f, -0.000844f, -0.000273f, -0.000490f, 0.000299f, 0.000532f, -0.000249f, -0.000801f, 0.000218f, - 0.000315f, 0.001177f, -0.000193f, -0.000407f, -0.001500f, -0.001213f, -0.000578f, -0.000220f, 0.000292f, 0.000224f, -0.000610f, -0.000235f, 0.000120f, 0.000574f, 0.000296f, 0.000117f, -0.000263f, 0.000583f, -0.000180f, 0.000982f, -0.015305f, 0.007206f, -0.003373f, 0.003225f, -0.001658f, 0.001918f, 0.000957f, 0.000597f, -0.001728f, 0.000230f, -0.000874f, 0.000278f, -0.002268f, 0.000876f, 0.001443f, 0.000481f, -0.002415f, -0.001186f, -0.001208f, -0.001254f, -0.000820f, 0.001760f, 0.000431f, 0.001245f, 0.000996f, -0.000411f, -0.000086f, -0.001816f, 0.002381f, -0.000655f, -0.000227f, 0.000171f, -0.000495f, -0.000707f, -0.000846f, -0.000174f, -0.001917f, 0.000594f, -0.001012f, 0.000793f, 0.000685f, 0.001129f, -0.000288f, 0.000145f, -0.001241f, 0.000497f, 0.000935f, 0.000244f, -0.000194f, 0.000211f, 0.000734f, 0.001103f, 0.000480f, 0.001028f, 0.000057f, 0.000180f, -0.000048f, -0.000203f, 0.004958f, 0.006137f, -0.002797f, 0.001631f, -0.000873f, 0.000602f, -0.000679f, 0.000338f, 0.000525f, 0.002998f, -0.001084f, 0.001227f, 0.002814f, -0.000787f, -0.000133f, -0.000493f, 0.000669f, 0.001448f, - 0.001482f, 0.001935f, 0.000509f, 0.001645f, -0.000442f, -0.000995f, -0.003338f, 0.000685f, -0.000523f, -0.001680f, -0.001208f, -0.000070f, -0.000334f, 0.001058f, -0.000173f, -0.001940f, -0.002008f, 0.000523f, -0.001748f, 0.000220f, 0.001031f, -0.001565f, -0.001060f, -0.000672f, 0.000751f, 0.000689f, -0.000072f, -0.000216f, 0.001141f, 0.000237f, -0.000470f, 0.000456f, -0.001025f, 0.000116f, -0.000550f, -0.000766f, -0.000532f, 0.000781f, -0.000426f, 0.000587f, -0.000469f, -0.000979f, 0.000241f, 0.000528f, -0.000364f, 0.000299f, -0.000452f, 0.017704f, -0.006169f, 0.003338f, -0.002316f, 0.003319f, -0.002348f, 0.002034f, -0.000764f, 0.002066f, 0.000498f, 0.001453f, -0.001699f, 0.001735f, -0.000600f, -0.001447f, -0.000155f, -0.001554f, -0.002481f, -0.001310f, -0.000275f, 0.001253f, -0.001702f, -0.002271f, -0.002785f, -0.000502f, -0.000250f, 0.002220f, 0.001211f, 0.001426f, -0.000983f, 0.001153f, -0.000889f, -0.000869f, -0.000484f, 0.001465f, 0.001259f, 0.000394f, -0.000017f, -0.000054f, 0.000033f, -0.000412f, -0.000240f, 0.001014f, 0.000190f, 0.002497f, -0.000966f, -0.000301f, -0.002090f, 0.001363f, - -0.000552f, -0.000324f, -0.000499f, -0.000129f, 0.000113f, -0.000346f, 0.000371f, -0.000557f, -0.000001f, -0.000790f, -0.000358f, 0.000177f, 0.000805f, -0.000423f, -0.000063f, -0.000284f, 0.004964f, -0.007611f, 0.004445f, -0.002854f, 0.003451f, -0.000050f, 0.002138f, 0.000596f, -0.003342f, -0.001591f, -0.001134f, 0.000396f, 0.000825f, 0.000455f, 0.003751f, -0.002127f, 0.002996f, 0.000512f, 0.000371f, -0.002068f, -0.000456f, 0.002587f, -0.000181f, -0.002219f, 0.002502f, 0.001906f, 0.000415f, -0.001047f, -0.000827f, -0.000231f, -0.000185f, 0.001152f, -0.000580f, 0.000507f, -0.001417f, -0.000324f, 0.000802f, -0.002041f, 0.000767f, -0.000799f, 0.000717f, -0.000600f, -0.000189f, 0.002381f, 0.001024f, 0.001351f, -0.000114f, 0.000552f, 0.000868f, -0.000192f, -0.000669f, -0.001068f, 0.000352f, 0.000471f, 0.000841f, 0.001017f, 0.000232f, -0.000244f, -0.001067f, -0.000493f, -0.001080f, -0.000968f, 0.000115f, 0.000020f, -0.000813f, -0.018833f, -0.003788f, -0.000486f, -0.003126f, -0.001284f, 0.002842f, 0.001225f, -0.000801f, -0.000710f, -0.002242f, -0.001482f, -0.001815f, -0.002038f, -0.001688f, -0.001067f, - -0.001525f, -0.002609f, -0.002228f, 0.000889f, -0.002263f, 0.000784f, -0.003052f, 0.000124f, -0.001249f, -0.000992f, 0.002702f, -0.000250f, -0.001278f, 0.001755f, -0.001917f, 0.001854f, 0.000574f, 0.001955f, 0.001341f, -0.000012f, -0.000898f, 0.002056f, -0.000001f, -0.000284f, 0.001875f, -0.000741f, -0.002487f, -0.002814f, -0.000703f, 0.000973f, 0.000631f, -0.000816f, -0.000056f, -0.000753f, 0.000209f, 0.000071f, 0.000174f, 0.001812f, 0.000728f, -0.001255f, -0.000457f, 0.000264f, 0.001158f, 0.000294f, 0.001715f, 0.000495f, -0.000113f, -0.000831f, -0.000760f, 0.000045f, -0.022175f, 0.019307f, -0.007862f, 0.005361f, -0.005038f, 0.001238f, -0.002474f, 0.003270f, 0.000619f, 0.000385f, -0.001580f, 0.002218f, 0.000450f, -0.003980f, 0.000404f, 0.000594f, -0.002006f, -0.003066f, 0.003034f, 0.003772f, -0.001218f, -0.000988f, 0.000626f, 0.001742f, -0.001022f, 0.003437f, -0.000113f, 0.000876f, -0.002496f, -0.000879f, -0.001490f, 0.002243f, -0.000504f, 0.000494f, 0.000477f, -0.001276f, 0.002160f, 0.002087f, 0.000560f, 0.000722f, 0.002532f, -0.001541f, -0.000421f, -0.000316f, -0.001857f, 0.000405f, - -0.001216f, 0.000460f, -0.000069f, 0.000174f, 0.002064f, -0.000070f, -0.000485f, 0.000470f, 0.000096f, 0.001368f, -0.001275f, 0.000487f, -0.000097f, 0.002672f, -0.000809f, -0.000095f, -0.001063f, -0.000214f, -0.000689f, 0.014776f, -0.001813f, -0.003120f, -0.000763f, 0.001962f, 0.000999f, 0.000871f, -0.000137f, -0.002086f, 0.000482f, 0.001222f, 0.001389f, -0.000968f, -0.000913f, 0.002959f, 0.000993f, -0.002363f, 0.000474f, 0.003837f, -0.004855f, 0.003199f, 0.000364f, 0.004098f, -0.000300f, 0.000209f, 0.000784f, 0.000807f, 0.002145f, -0.001627f, -0.000631f, 0.000787f, 0.001534f, -0.000640f, -0.000066f, 0.000177f, 0.000341f, 0.000957f, -0.002004f, -0.000069f, 0.001133f, 0.000306f, -0.001112f, -0.000361f, 0.002534f, 0.001859f, 0.000876f, -0.000998f, -0.000734f, 0.000713f, -0.000346f, -0.000650f, 0.000433f, -0.000807f, -0.001245f, 0.002606f, 0.001015f, 0.001668f, 0.000251f, 0.001254f, 0.001021f, 0.001113f, 0.000113f, 0.001353f, 0.000673f, 0.000956f, -0.000807f, 0.000165f, 0.000355f, -0.001186f, 0.000409f, -0.000582f, -0.000125f, 0.007031f, 0.002042f, 0.001696f, -0.001031f, -0.000690f, - -0.001911f, -0.001365f, 0.000347f, -0.000749f, -0.000941f, -0.002737f, 0.002330f, 0.001614f, -0.001706f, 0.002915f, -0.002746f, -0.000830f, 0.001222f, -0.002033f, 0.001180f, 0.001893f, 0.002890f, 0.002553f, 0.002431f, 0.001263f, -0.005144f, 0.000002f, -0.001081f, 0.001031f, -0.000498f, 0.002013f, 0.001362f, -0.000662f, -0.001253f, 0.001322f, -0.000921f, 0.003396f, -0.000002f, 0.001124f, 0.003438f, 0.003296f, -0.002489f, 0.000210f, -0.001642f, -0.002958f, -0.000322f, 0.000558f, -0.000380f, -0.000605f, -0.000318f, 0.000258f, -0.001388f, 0.000186f, -0.001619f, -0.000451f, -0.000193f, 0.000433f, 0.000010f, -0.000943f, -0.001009f, 0.002065f, -0.000730f, 0.000319f, 0.000920f, 0.001143f, -0.000632f, -0.000640f, -0.000304f, -0.001627f, -0.001112f, 0.000179f, 0.000353f, 0.016615f, -0.011690f, 0.004256f, -0.004441f, -0.000342f, -0.003103f, 0.002808f, 0.002789f, 0.000900f, 0.000567f, 0.002638f, 0.007251f, -0.006372f, -0.000886f, -0.001656f, -0.002574f, 0.005626f, 0.004236f, -0.000867f, -0.003855f, 0.001563f, -0.003150f, -0.002517f, -0.004413f, 0.000565f, -0.004519f, -0.001492f, 0.002661f, 0.000385f, - -0.001387f, -0.003728f, 0.000006f, -0.000899f, 0.002265f, 0.002084f, 0.000961f, -0.001693f, 0.000253f, -0.000106f, 0.000915f, 0.001799f, -0.001143f, -0.000576f, -0.002023f, 0.003065f, -0.000382f, 0.000453f, 0.002731f, -0.000564f, -0.000252f, 0.001093f, -0.001376f, -0.000142f, 0.001183f, -0.002031f, 0.000459f, -0.000377f, -0.000181f, -0.002118f, 0.001026f, -0.000454f, 0.000179f, 0.000521f, -0.000787f, 0.001389f, -0.001097f, -0.000284f, -0.002271f, 0.000204f, -0.000319f, 0.000942f, 0.000991f, -0.025867f, 0.003587f, 0.000369f, 0.001824f, -0.001981f, -0.003222f, -0.000007f, 0.002173f, 0.003449f, -0.000202f, 0.005241f, 0.002924f, -0.003531f, -0.003149f, 0.002455f, 0.000450f, -0.002512f, -0.004675f, -0.005364f, -0.003435f, -0.003955f, -0.004428f, 0.000815f, 0.001426f, 0.001196f, -0.003273f, -0.003146f, 0.000496f, -0.000817f, -0.000525f, -0.000407f, -0.002609f, 0.002236f, -0.004501f, -0.001673f, -0.000673f, -0.000148f, 0.001460f, 0.000526f, -0.000296f, 0.002103f, -0.000619f, 0.002097f, 0.001212f, -0.001582f, 0.000273f, 0.003397f, -0.001332f, -0.001331f, 0.000105f, 0.001998f, 0.000529f, -0.001384f, - -0.001787f, 0.001674f, 0.000105f, -0.002349f, 0.003272f, 0.003691f, 0.000461f, -0.001025f, 0.000455f, -0.000045f, 0.000796f, 0.001645f, -0.000142f, 0.002175f, 0.001386f, 0.001255f, 0.001097f, 0.000583f, 0.000917f, -0.001052f, -0.000063f, -0.015855f, 0.013538f, -0.004540f, 0.002887f, -0.000084f, 0.002249f, -0.005496f, 0.002116f, -0.003750f, 0.000012f, -0.002542f, 0.005079f, 0.004316f, 0.001630f, 0.000340f, -0.004184f, -0.002785f, -0.000436f, -0.001693f, 0.004822f, -0.003957f, -0.000161f, -0.001967f, 0.007065f, -0.002261f, 0.000630f, -0.000212f, 0.001215f, 0.000542f, 0.001212f, 0.000878f, -0.001171f, 0.000624f, -0.000286f, 0.002455f, 0.000380f, 0.004666f, 0.002427f, -0.001523f, -0.000318f, -0.000596f, 0.000086f, -0.001800f, -0.001260f, -0.000461f, 0.000836f, 0.005691f, 0.000519f, 0.000368f, -0.001566f, 0.002313f, -0.000863f, -0.001233f, 0.000753f, -0.001199f, 0.000704f, -0.001485f, -0.003192f, 0.001570f, 0.001415f, -0.000459f, 0.003337f, 0.000696f, 0.000793f, 0.001185f, -0.000894f, 0.000381f, 0.001083f, -0.002776f, -0.001296f, -0.000228f, -0.001257f, 0.001256f, 0.001972f, -0.000725f, - 0.003385f, 0.002249f, -0.000076f, -0.000900f, -0.000681f, -0.000235f, 0.010345f, -0.000227f, 0.002336f, -0.007022f, -0.001164f, 0.000893f, -0.005666f, 0.000458f, 0.007860f, -0.001364f, 0.000569f, -0.003539f, -0.004851f, 0.001240f, -0.004432f, 0.006928f, -0.004803f, 0.001666f, 0.001641f, 0.003712f, 0.002887f, -0.000752f, -0.004285f, -0.000493f, -0.000392f, 0.002200f, -0.003003f, -0.000578f, -0.000879f, -0.001426f, -0.001016f, 0.002104f, 0.001294f, 0.005619f, 0.001909f, -0.002086f, 0.002332f, -0.001524f, -0.001607f, 0.001731f, 0.004809f, -0.000687f, -0.002479f, -0.002319f, 0.002557f, -0.000059f, -0.003479f, -0.003203f, 0.001645f, 0.001533f, -0.001443f, -0.002647f, -0.004399f, 0.001220f, 0.001640f, 0.001106f, -0.002484f, 0.001870f, 0.001149f, 0.000781f, -0.000882f, -0.000267f, 0.001362f, -0.003301f, -0.000431f, 0.001458f, 0.001715f, -0.000312f, 0.000836f, 0.000072f, 0.035167f, -0.002268f, 0.001391f, 0.003197f, -0.003108f, -0.001340f, -0.001082f, -0.008318f, 0.005543f, -0.000928f, -0.005169f, 0.001084f, -0.002665f, 0.002996f, 0.002365f, 0.003815f, -0.001396f, 0.005188f, 0.004441f, 0.002830f, - -0.004628f, 0.003504f, -0.006339f, -0.003751f, -0.004323f, 0.001671f, -0.003328f, -0.000625f, -0.001153f, -0.004233f, -0.002312f, 0.003522f, -0.002669f, -0.002025f, -0.004043f, 0.001276f, 0.001268f, 0.002979f, -0.001726f, 0.005147f, 0.001265f, 0.005871f, -0.000705f, 0.001045f, 0.001161f, -0.003285f, 0.002296f, 0.006012f, -0.002108f, -0.000195f, 0.001614f, -0.001782f, -0.002464f, 0.001407f, -0.002455f, -0.001335f, -0.003201f, -0.002106f, 0.002325f, 0.002074f, 0.001386f, 0.002229f, 0.002806f, 0.002675f, 0.004035f, 0.000639f, -0.001231f, 0.002082f, 0.001404f, -0.000042f, -0.000430f, 0.000151f, -0.001546f, -0.000343f, 0.000295f, 0.000354f, -0.000111f, -0.015482f, -0.030454f, 0.011425f, 0.000202f, 0.000719f, -0.002961f, -0.003170f, -0.000644f, 0.001144f, -0.001889f, 0.008072f, -0.003605f, -0.006880f, 0.000497f, 0.000533f, -0.000838f, -0.002366f, 0.005517f, 0.001078f, -0.002366f, 0.002623f, -0.004753f, 0.006211f, -0.003352f, -0.001693f, -0.004099f, 0.006923f, -0.002883f, -0.000899f, -0.004064f, -0.001823f, 0.003777f, -0.001641f, 0.004083f, -0.005101f, -0.006002f, 0.000590f, 0.001118f, 0.001143f, - -0.000099f, -0.003051f, 0.000642f, 0.001713f, 0.000865f, 0.003260f, 0.000040f, 0.005060f, 0.000746f, 0.004749f, 0.006151f, 0.001363f, -0.000406f, 0.001244f, -0.003362f, -0.000781f, -0.005653f, -0.004988f, 0.001544f, 0.001606f, 0.001049f, -0.000258f, -0.001578f, -0.000757f, -0.001343f, -0.000681f, -0.001341f, 0.000125f, -0.000080f, 0.001163f, -0.000303f, -0.000569f, -0.001904f, -0.000053f, -0.002220f, -0.000176f, -0.002962f, -0.000298f, -0.001075f, -0.000234f, -0.010204f, 0.029864f, -0.013574f, 0.006251f, -0.002865f, 0.009502f, -0.001476f, -0.004163f, -0.004352f, 0.002514f, -0.001286f, -0.000538f, 0.000231f, 0.001882f, -0.010016f, -0.004870f, -0.002574f, 0.004017f, 0.003365f, 0.005881f, 0.001084f, -0.000860f, -0.000913f, 0.007052f, -0.009109f, 0.005318f, -0.004376f, -0.000881f, -0.004611f, 0.007287f, 0.002924f, -0.004679f, 0.000639f, -0.002030f, 0.000794f, 0.003114f, -0.013082f, -0.005430f, 0.001090f, 0.004642f, -0.002682f, 0.001012f, 0.003371f, -0.001320f, -0.001468f, -0.000433f, 0.005079f, 0.002047f, 0.000879f, 0.000615f, 0.001965f, 0.006002f, -0.003602f, 0.002773f, -0.008348f, -0.001392f, - 0.001893f, 0.004085f, 0.000765f, 0.000639f, 0.000204f, 0.002240f, -0.001627f, 0.000309f, -0.000581f, -0.001910f, -0.001710f, 0.003186f, 0.003047f, -0.001086f, -0.001575f, -0.005136f, -0.002196f, -0.001099f, -0.000928f, 0.003859f, -0.001444f, -0.001351f, -0.002543f, -0.002228f, -0.000184f, -0.026770f, -0.005771f, 0.002626f, -0.006344f, 0.001606f, 0.001174f, 0.003930f, -0.000012f, 0.007486f, 0.004891f, 0.002710f, -0.002043f, -0.003665f, -0.000182f, 0.007919f, -0.006758f, -0.002579f, -0.005235f, -0.000110f, -0.014324f, -0.011296f, 0.000722f, 0.007020f, 0.009665f, 0.002235f, -0.003503f, 0.003299f, -0.003109f, -0.002077f, -0.002113f, 0.000961f, 0.002540f, 0.000623f, 0.003770f, -0.002846f, -0.005086f, 0.004226f, 0.002789f, 0.008870f, -0.001073f, 0.001449f, -0.001258f, 0.007155f, -0.007425f, -0.003730f, -0.001745f, -0.005641f, 0.003609f, -0.002324f, 0.003034f, -0.006043f, 0.006048f, 0.005858f, 0.005404f, -0.002189f, 0.004793f, 0.000263f, 0.001685f, 0.002805f, 0.002015f, -0.002523f, 0.000464f, -0.000781f, -0.000116f, 0.005504f, 0.002078f, -0.002411f, 0.004477f, -0.000716f, -0.003826f, -0.001270f, - -0.000251f, -0.005415f, -0.000189f, 0.002269f, 0.002981f, 0.000477f, -0.000082f, -0.002234f, 0.000853f, 0.001319f, 0.019383f, 0.012592f, -0.004009f, 0.005693f, -0.012941f, 0.009035f, 0.003291f, 0.006792f, -0.002375f, -0.001756f, -0.007100f, -0.003663f, -0.012112f, -0.002128f, -0.009651f, -0.002958f, -0.005961f, -0.006103f, -0.008206f, 0.003203f, -0.011199f, 0.001461f, 0.004783f, -0.002186f, 0.001479f, -0.004846f, -0.000106f, -0.001541f, -0.001635f, -0.006590f, -0.000927f, 0.000712f, -0.000493f, -0.001052f, -0.003475f, -0.003023f, 0.001972f, 0.002105f, 0.002783f, 0.014136f, -0.005767f, -0.000373f, 0.005692f, -0.001421f, -0.002412f, -0.005486f, 0.001628f, 0.004769f, 0.007910f, 0.002639f, 0.006586f, -0.006535f, -0.009806f, 0.000884f, 0.006339f, 0.003531f, -0.005319f, 0.006070f, -0.004668f, 0.002900f, 0.001164f, 0.005513f, 0.003085f, 0.001993f, 0.003707f, -0.003804f, 0.002343f, 0.001953f, 0.001081f, 0.005414f, 0.001198f, 0.004365f, -0.000717f, -0.001815f, 0.000643f, 0.001000f, 0.000859f, 0.005252f, -0.000907f, -0.003035f, -0.000344f, 0.039217f, -0.025353f, -0.001358f, 0.002959f, 0.000809f, - 0.003106f, 0.005391f, -0.001066f, -0.000842f, 0.003028f, -0.004506f, -0.004312f, -0.000688f, 0.003489f, 0.014131f, 0.000606f, 0.004899f, -0.004531f, 0.000310f, -0.013936f, 0.008645f, -0.008425f, -0.011991f, 0.002807f, 0.003402f, -0.004449f, 0.004041f, 0.001694f, 0.009345f, 0.010321f, -0.001684f, -0.003884f, -0.002907f, -0.015403f, -0.008369f, 0.012089f, 0.004017f, 0.004453f, -0.006919f, -0.007127f, 0.002147f, -0.001377f, -0.006106f, 0.005360f, -0.001133f, -0.003835f, -0.004401f, 0.003038f, -0.003938f, -0.002120f, 0.014199f, -0.008629f, 0.002658f, -0.003094f, 0.003319f, -0.003883f, -0.001559f, -0.010564f, 0.001817f, -0.003911f, -0.002597f, 0.008446f, 0.002075f, 0.002356f, 0.005146f, 0.006125f, 0.001861f, 0.004240f, -0.001852f, -0.000502f, -0.006905f, 0.003173f, 0.005766f, -0.001310f, 0.000412f, -0.000637f, -0.001407f, -0.001788f, 0.000679f, -0.001839f, -0.000798f, -0.024263f, -0.011880f, 0.004656f, -0.001378f, 0.008982f, -0.001119f, -0.002192f, -0.006914f, -0.007761f, 0.004310f, -0.008119f, -0.002724f, -0.004547f, -0.000791f, -0.004806f, -0.003254f, -0.003834f, -0.001906f, -0.004786f, -0.009204f, - 0.005494f, -0.018386f, -0.000062f, 0.016711f, 0.004178f, 0.000043f, -0.004399f, 0.001306f, -0.016624f, 0.007048f, 0.004345f, 0.001286f, 0.006190f, 0.009131f, -0.006966f, -0.003610f, -0.007254f, 0.001215f, 0.000398f, -0.004253f, -0.004868f, -0.005420f, -0.003156f, -0.000128f, 0.003817f, 0.000430f, 0.003155f, 0.001836f, 0.000513f, 0.011629f, 0.002906f, -0.001726f, 0.009261f, -0.004331f, -0.010219f, -0.003061f, -0.001072f, -0.001365f, -0.000523f, -0.003461f, -0.000656f, -0.004346f, -0.000924f, -0.004422f, 0.000614f, 0.002574f, -0.004818f, -0.001289f, -0.002585f, 0.000333f, -0.004886f, -0.006276f, -0.002612f, 0.002718f, 0.004692f, 0.001954f, -0.001336f, -0.000047f, 0.001902f, -0.000701f, -0.000890f, -0.002116f, 0.001194f, 0.002517f, 0.000662f, 0.000021f, -0.002652f, -0.014943f, 0.020316f, -0.009913f, -0.004877f, -0.016465f, 0.012981f, -0.004485f, 0.007680f, 0.000539f, 0.000540f, -0.004952f, 0.010194f, -0.002464f, 0.003373f, 0.002570f, -0.004555f, -0.001516f, -0.001421f, -0.008704f, 0.001828f, 0.001647f, -0.006694f, -0.011315f, -0.006978f, -0.010407f, -0.002458f, 0.005727f, 0.003060f, -0.006106f, - -0.006037f, 0.009199f, 0.006390f, -0.007860f, 0.007369f, -0.003893f, 0.006532f, -0.009978f, -0.007827f, -0.007596f, 0.002817f, -0.006724f, 0.004388f, -0.003012f, 0.001917f, -0.001822f, -0.000860f, 0.001618f, 0.007414f, -0.015934f, -0.001909f, 0.003226f, -0.001344f, -0.004820f, -0.011409f, -0.000992f, 0.010699f, 0.000004f, 0.009289f, 0.006788f, 0.002083f, -0.001277f, 0.007125f, -0.006914f, -0.005566f, 0.004494f, -0.001545f, -0.004285f, 0.003090f, 0.000889f, -0.003245f, -0.004932f, 0.008523f, -0.007794f, -0.004121f, -0.004651f, 0.004899f, 0.000262f, -0.003227f, -0.001881f, 0.002621f, -0.007200f, 0.000159f, 0.001952f, 0.001614f, 0.000186f, -0.002317f, -0.003497f, -0.034420f, 0.013091f, 0.005657f, -0.008512f, 0.004485f, -0.009653f, 0.009056f, 0.007844f, 0.006699f, -0.017540f, 0.010917f, 0.018982f, -0.002415f, 0.006582f, 0.000476f, -0.005656f, -0.007477f, 0.020892f, -0.000103f, -0.001631f, -0.011214f, -0.022309f, -0.012020f, 0.001337f, -0.009793f, 0.008498f, -0.014584f, -0.004706f, -0.008546f, 0.002583f, -0.003246f, -0.010809f, 0.002001f, -0.002346f, 0.007381f, -0.002240f, -0.008497f, -0.003126f, - -0.026333f, 0.004938f, -0.000678f, 0.012435f, -0.007354f, -0.008113f, 0.011557f, 0.002593f, 0.002012f, -0.004382f, -0.006961f, 0.002718f, 0.005328f, 0.003961f, -0.001737f, 0.004197f, 0.002300f, 0.000657f, -0.002201f, -0.002310f, -0.008622f, 0.000876f, -0.003361f, -0.004904f, 0.004697f, 0.002770f, 0.012996f, 0.002887f, -0.008583f, -0.008539f, 0.002020f, -0.005466f, -0.004058f, 0.001636f, -0.004179f, -0.000007f, -0.001877f, -0.002350f, 0.002549f, -0.003243f, 0.001351f, -0.000239f, -0.000603f, -0.001088f, -0.001813f, -0.004020f, -0.005025f, -0.001398f, -0.004321f, 0.028467f, -0.011797f, -0.000226f, 0.001203f, 0.011659f, -0.001945f, -0.002758f, 0.007883f, 0.013809f, -0.009986f, -0.011491f, 0.008250f, -0.002064f, 0.007128f, 0.010471f, 0.008685f, 0.007402f, 0.005888f, 0.006968f, 0.027656f, -0.002795f, 0.001689f, 0.005033f, 0.015091f, -0.003626f, -0.006040f, 0.005532f, -0.000788f, -0.005473f, -0.006592f, -0.005870f, -0.000219f, -0.007503f, 0.010329f, 0.015684f, -0.001199f, -0.004435f, 0.006385f, -0.004355f, 0.009297f, 0.006483f, -0.000104f, -0.008760f, 0.005998f, -0.001075f, -0.003061f, 0.000875f, - -0.001477f, 0.018310f, -0.001912f, 0.007722f, -0.004453f, 0.016263f, -0.001878f, 0.001062f, -0.006121f, -0.010582f, 0.008213f, -0.005483f, 0.016541f, 0.003264f, 0.007680f, -0.000373f, -0.000217f, 0.004446f, 0.001017f, 0.011605f, 0.006450f, 0.001752f, 0.005786f, -0.007509f, 0.002405f, 0.005100f, 0.000350f, -0.002453f, 0.009639f, 0.002005f, -0.003494f, -0.003699f, 0.003725f, -0.002284f, -0.000216f, 0.005129f, -0.001953f, 0.002943f, 0.001147f, -0.003552f, 0.037474f, -0.010684f, 0.003609f, -0.003486f, 0.001769f, 0.004905f, 0.012673f, -0.009660f, 0.005376f, -0.000124f, 0.000795f, 0.006894f, -0.005453f, 0.007361f, -0.019563f, -0.008859f, 0.003430f, 0.007395f, 0.005328f, 0.015720f, -0.015446f, 0.002489f, -0.002190f, -0.021308f, 0.009238f, -0.008262f, -0.005273f, -0.003073f, -0.017381f, 0.005728f, 0.006317f, 0.002760f, -0.008988f, -0.015301f, 0.006170f, -0.009475f, 0.008468f, -0.014668f, 0.000373f, -0.017558f, -0.004143f, -0.011727f, -0.010006f, 0.010391f, 0.016357f, 0.002248f, 0.006136f, -0.007470f, 0.003204f, -0.012532f, 0.005506f, -0.008240f, 0.002476f, 0.011968f, 0.006307f, -0.004248f, - 0.007478f, 0.001173f, 0.006508f, -0.005438f, 0.010765f, 0.017991f, 0.001195f, -0.010950f, -0.007311f, -0.004925f, -0.001762f, 0.001100f, 0.008341f, 0.001541f, 0.013401f, -0.000117f, 0.005287f, -0.012025f, -0.001507f, -0.008708f, -0.001375f, -0.001373f, 0.002971f, -0.010925f, 0.001755f, -0.000925f, 0.003536f, 0.001075f, 0.002321f, 0.000990f, 0.001151f, -0.037979f, -0.031839f, 0.013635f, -0.003880f, 0.015834f, -0.001091f, 0.005266f, -0.018968f, -0.017793f, -0.010765f, 0.006114f, -0.014653f, -0.010077f, -0.004238f, 0.003094f, 0.010950f, 0.003984f, -0.021543f, 0.005967f, 0.012264f, -0.030631f, -0.003529f, 0.001605f, -0.032507f, -0.011081f, 0.014680f, -0.030123f, 0.014958f, 0.015713f, 0.000339f, -0.004246f, -0.001093f, -0.007160f, -0.007886f, 0.005543f, 0.006823f, 0.022801f, -0.013262f, -0.006923f, -0.005491f, -0.010416f, 0.000766f, -0.017863f, -0.004337f, 0.001483f, -0.000362f, -0.005738f, -0.000768f, -0.009790f, -0.001862f, 0.005637f, -0.002326f, -0.006346f, 0.007651f, -0.003407f, -0.007197f, -0.010389f, 0.022487f, -0.000829f, 0.013761f, 0.001900f, 0.005258f, 0.014827f, 0.002281f, 0.010132f, - -0.006526f, 0.011247f, 0.008244f, 0.002522f, 0.003079f, 0.002830f, 0.009871f, 0.004525f, 0.001961f, 0.009478f, -0.003831f, 0.001461f, -0.000932f, -0.014568f, 0.007016f, 0.003572f, 0.002163f, -0.008888f, -0.002398f, 0.001753f, 0.003008f, -0.002497f, -0.061728f, 0.023425f, -0.006728f, -0.027629f, -0.006668f, 0.000809f, -0.007073f, 0.010821f, -0.023916f, 0.011676f, -0.001840f, -0.027500f, -0.018941f, 0.003895f, 0.011057f, 0.010474f, 0.007692f, 0.016377f, 0.004735f, 0.026862f, 0.014729f, 0.031466f, 0.004160f, 0.025584f, -0.019531f, -0.015330f, 0.005352f, 0.002338f, -0.015478f, 0.004478f, 0.003376f, -0.002043f, -0.005855f, 0.015219f, 0.002964f, -0.033172f, -0.014774f, 0.011291f, 0.003916f, -0.006935f, 0.009594f, 0.009847f, 0.015198f, 0.003387f, 0.004557f, 0.002962f, 0.004459f, 0.005660f, -0.011507f, 0.001898f, 0.002190f, -0.024488f, 0.011667f, 0.008685f, 0.010508f, -0.016739f, -0.009741f, 0.012456f, 0.000071f, -0.003130f, -0.002493f, -0.007075f, -0.006330f, 0.000188f, -0.008441f, -0.018783f, 0.006490f, 0.020340f, -0.014149f, 0.002120f, -0.008024f, -0.003124f, -0.005838f, -0.001678f, - 0.010451f, 0.002653f, 0.008641f, 0.002663f, -0.009112f, -0.006347f, -0.007395f, -0.004291f, -0.006043f, 0.001618f, -0.003819f, -0.000667f, -0.005785f, 0.002021f, 0.003046f, 0.003477f, -0.001736f, 0.026285f, 0.017878f, 0.012462f, 0.006929f, 0.001136f, -0.005711f, -0.008884f, 0.008473f, -0.025561f, 0.027657f, -0.016602f, 0.004732f, -0.027778f, -0.000698f, 0.026760f, 0.010714f, -0.009039f, 0.017101f, -0.026375f, 0.010998f, 0.005297f, 0.002199f, -0.032555f, -0.009528f, 0.002333f, 0.005623f, 0.021436f, -0.032011f, -0.004054f, -0.010411f, -0.030136f, -0.006347f, 0.007616f, 0.015548f, 0.023141f, 0.018072f, 0.017969f, -0.001174f, -0.011038f, 0.011963f, 0.003825f, -0.006641f, 0.004477f, -0.014541f, 0.023961f, 0.011405f, 0.008311f, -0.012001f, -0.026750f, -0.006899f, 0.000925f, -0.032461f, -0.026215f, -0.006643f, -0.023483f, 0.015615f, 0.006218f, 0.005085f, -0.010653f, -0.011440f, 0.004878f, 0.003649f, 0.002295f, 0.007677f, -0.004278f, 0.005882f, 0.015942f, 0.007440f, 0.002950f, 0.002453f, -0.010014f, -0.008315f, -0.007465f, 0.004883f, -0.002470f, -0.020669f, -0.016508f, -0.001354f, -0.013239f, - -0.011656f, -0.003158f, -0.017004f, -0.010606f, -0.002400f, 0.001220f, -0.002157f, -0.000850f, 0.004467f, -0.003034f, -0.000933f, 0.001216f, 0.029882f, -0.023276f, 0.006286f, -0.003268f, -0.003010f, 0.000577f, 0.008273f, -0.014480f, 0.019433f, -0.005568f, 0.013327f, -0.001257f, -0.010809f, 0.020708f, 0.020387f, 0.014637f, -0.006829f, 0.031365f, 0.011590f, -0.034956f, 0.036100f, 0.003355f, -0.000110f, 0.026160f, 0.001143f, -0.011255f, -0.015157f, 0.025828f, -0.016153f, -0.021448f, 0.020825f, 0.018258f, -0.011864f, -0.028541f, 0.011202f, -0.009738f, 0.003951f, -0.020045f, -0.016533f, -0.006747f, 0.019485f, 0.017621f, 0.002283f, 0.016183f, -0.023393f, 0.007638f, -0.006178f, -0.008593f, 0.011156f, 0.001686f, 0.003396f, -0.032580f, -0.008987f, 0.018317f, -0.023410f, -0.005955f, -0.029361f, -0.005330f, -0.010991f, 0.005079f, -0.007125f, 0.003454f, 0.002982f, -0.000860f, 0.002903f, -0.007693f, -0.026093f, -0.004759f, 0.013242f, -0.001612f, 0.009170f, -0.009867f, -0.022909f, -0.003888f, 0.005000f, 0.014713f, 0.003499f, 0.008134f, -0.000896f, 0.003449f, 0.005444f, 0.003532f, -0.008001f, 0.002205f, - -0.003311f, 0.003625f, -0.006389f, 0.003962f, 0.001479f, 0.000643f, -0.000775f, -0.005270f, -0.002810f, 0.027127f, 0.002149f, -0.007804f, -0.019319f, -0.000590f, -0.009199f, 0.007276f, -0.015946f, 0.010248f, 0.006551f, -0.013934f, -0.014294f, 0.021732f, -0.025478f, -0.000935f, 0.016558f, -0.018428f, 0.006025f, 0.021240f, -0.016782f, 0.014589f, 0.010732f, 0.015609f, -0.025516f, 0.022159f, -0.025622f, 0.007806f, -0.019490f, 0.002506f, -0.009938f, 0.017461f, 0.000596f, 0.010712f, 0.005555f, -0.018187f, -0.011067f, -0.025166f, 0.014779f, -0.017027f, 0.014861f, -0.020488f, -0.023337f, -0.039126f, 0.003886f, 0.020634f, -0.003077f, -0.000543f, 0.006566f, 0.017793f, -0.005947f, 0.004821f, -0.021583f, 0.005564f, 0.028812f, -0.002845f, 0.026128f, 0.034161f, -0.000156f, 0.005768f, 0.007077f, -0.014512f, 0.007631f, -0.017594f, -0.000820f, -0.018061f, -0.017498f, 0.001083f, -0.006588f, -0.029713f, 0.020240f, 0.000527f, 0.015074f, -0.017517f, -0.008899f, -0.006672f, 0.007763f, -0.000125f, -0.004577f, -0.004586f, -0.002931f, -0.001099f, 0.001782f, 0.001963f, -0.003465f, 0.004083f, -0.003985f, -0.003988f, - -0.002175f, 0.005746f, 0.004323f, 0.004782f, -0.002249f, 0.003613f, -0.061291f, 0.015570f, 0.022971f, 0.006388f, -0.026550f, -0.003870f, 0.043249f, -0.049661f, -0.001239f, -0.008357f, -0.032473f, -0.008168f, -0.021997f, 0.008097f, 0.008048f, 0.019029f, 0.007722f, -0.025944f, -0.009198f, 0.018761f, -0.029619f, -0.008387f, -0.031678f, 0.027093f, 0.008144f, 0.021202f, 0.036089f, -0.012663f, -0.007587f, -0.005902f, -0.018042f, 0.017351f, -0.008451f, -0.021472f, -0.024111f, -0.004174f, 0.009285f, -0.000617f, 0.004955f, 0.005948f, 0.014067f, -0.006107f, -0.000631f, 0.010478f, -0.010013f, 0.020488f, 0.023262f, 0.021989f, -0.017736f, 0.002456f, -0.005509f, 0.010565f, 0.043853f, 0.032950f, 0.062765f, 0.005065f, 0.024836f, 0.020158f, -0.009497f, -0.002066f, -0.003249f, -0.005758f, 0.007957f, 0.001946f, 0.022621f, 0.017111f, -0.007618f, -0.002206f, -0.013378f, -0.026228f, 0.010618f, -0.000271f, 0.009037f, -0.001803f, -0.018166f, -0.002553f, 0.002782f, -0.010047f, 0.006192f, -0.006362f, -0.008800f, 0.000370f, -0.008818f, 0.000081f, -0.002418f, -0.002066f, 0.000103f, 0.001480f, -0.005495f, 0.000908f, - 0.000393f, 0.000101f, 0.002256f, 0.095428f, 0.046171f, 0.016613f, 0.014991f, -0.022361f, 0.014845f, -0.018015f, 0.022105f, 0.018151f, 0.017030f, 0.004542f, -0.030910f, -0.017192f, 0.034230f, 0.006121f, -0.001725f, -0.006965f, 0.038286f, -0.040987f, -0.017097f, -0.010117f, -0.002834f, -0.028967f, 0.007195f, -0.025003f, -0.013855f, 0.004397f, -0.015755f, 0.023811f, -0.022500f, -0.009592f, -0.005361f, 0.025434f, -0.041642f, -0.007838f, -0.030935f, -0.000671f, 0.000067f, -0.027140f, 0.004706f, 0.021729f, 0.011881f, -0.000282f, -0.012640f, 0.001375f, 0.013150f, -0.016994f, 0.034827f, 0.047272f, -0.002753f, -0.029028f, -0.027347f, 0.019620f, -0.006784f, -0.006128f, 0.040691f, -0.008390f, 0.013125f, -0.000885f, 0.025661f, -0.004877f, 0.003523f, -0.004659f, -0.015923f, -0.044746f, -0.026676f, -0.003992f, -0.011873f, -0.030768f, -0.020198f, 0.011902f, 0.026317f, -0.001916f, -0.003152f, -0.002548f, -0.003996f, 0.014548f, 0.009252f, 0.002290f, -0.008577f, 0.010282f, -0.005591f, -0.020307f, -0.019491f, 0.002811f, 0.013727f, -0.015770f, 0.010762f, -0.000765f, -0.005944f, -0.005083f, 0.000625f, -0.008690f, - -0.006725f, 0.000675f, -0.002469f, -0.001058f, -0.004056f} -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885]={ {-0.004498f, 0.002497f, -0.001443f, 0.000619f, -0.000813f, 0.000186f, -0.000598f, -0.000162f, 0.000026f, 0.001200f, -0.000788f, 0.000523f, -0.001278f, 0.000943f, -0.001443f, -0.001961f, -0.001724f, 0.000396f, -0.000185f, 0.000270f, 0.000037f, -0.000892f, 0.000515f, 0.000893f, -0.000505f, 0.000715f, -0.000113f, -0.000312f, -0.000632f, -0.000114f, 0.000186f, 0.000502f, -0.000366f, 0.000751f, -0.000305f, 0.000479f, 0.000699f, -0.000511f, -0.000492f, 0.000032f, -0.000517f, 0.000139f, 0.000013f, -0.000237f, 0.000514f, 0.000084f, -0.000239f, 0.001718f, -0.001776f, -0.000315f, -0.000381f, -0.000400f, -0.000137f, -0.000018f, -0.000346f, -0.000233f, -0.000007f, 0.000084f, -0.000256f, 0.000153f, -0.000558f, -0.000152f, -0.000099f, 0.000343f, -0.001888f, -0.000167f, 0.000378f, -0.000169f, -0.000239f, 0.000174f, 0.000025f, 0.000143f, 0.000854f, -0.000408f, -0.000287f, -0.000452f, -0.000096f, 0.000265f, 0.000378f, -0.000387f, -0.000308f, 0.000471f, -0.000434f, -0.000619f, -0.000080f, -0.000161f, 0.000209f, -0.000177f, -0.000190f, 0.000114f, 0.000183f, -0.000378f, 0.000117f, 0.000157f, -0.006029f, -0.004095f, - -0.001664f, -0.001900f, -0.001062f, -0.000994f, -0.000942f, -0.000426f, -0.001136f, -0.000895f, -0.000391f, -0.000698f, -0.000092f, -0.000251f, -0.000609f, -0.000823f, -0.000922f, -0.000363f, -0.000535f, -0.000929f, -0.000122f, -0.001163f, 0.000003f, -0.000088f, -0.000162f, -0.000704f, -0.000122f, -0.000532f, 0.000004f, -0.000687f, -0.000439f, 0.000237f, -0.000506f, 0.000089f, -0.001174f, -0.000216f, 0.000572f, 0.000351f, -0.000022f, -0.000171f, -0.000338f, 0.000096f, 0.000106f, 0.000544f, -0.000327f, -0.000054f, -0.000169f, -0.007934f, -0.000424f, 0.001012f, -0.000009f, 0.000297f, -0.000047f, 0.000000f, -0.000627f, 0.000669f, 0.000275f, 0.000807f, 0.000589f, 0.001662f, 0.001235f, 0.000087f, -0.000651f, -0.000387f, -0.000147f, 0.000305f, -0.000215f, -0.001481f, -0.001316f, -0.000693f, -0.000196f, 0.000057f, 0.000196f, 0.000266f, -0.000044f, 0.000039f, 0.000171f, -0.000316f, -0.000033f, -0.000049f, -0.000899f, 0.000527f, 0.000229f, -0.000107f, -0.000000f, -0.000354f, -0.000495f, 0.000307f, 0.000130f, -0.000336f, 0.000325f, 0.000262f, 0.000394f, -0.000178f, 0.008893f, 0.006234f, 0.001233f, 0.002409f, - 0.000508f, 0.000792f, 0.001978f, 0.001008f, 0.000321f, 0.001178f, 0.000490f, -0.000528f, -0.000250f, 0.000405f, 0.000695f, -0.001211f, -0.000152f, -0.000730f, 0.001613f, 0.000791f, 0.000420f, 0.000792f, 0.000417f, 0.000407f, 0.000030f, -0.000084f, -0.000384f, 0.000622f, 0.000771f, 0.000642f, 0.000820f, 0.000973f, 0.000596f, 0.001424f, 0.000335f, -0.000086f, 0.000521f, 0.000090f, -0.000237f, -0.000118f, -0.000210f, -0.000287f, 0.000020f, 0.000659f, 0.000172f, 0.000105f, 0.000400f, 0.013276f, 0.005619f, 0.001722f, 0.001533f, 0.001103f, 0.000653f, 0.000233f, 0.000034f, 0.001472f, 0.000277f, 0.000825f, 0.001080f, 0.000598f, -0.000094f, -0.000385f, 0.002300f, -0.000190f, -0.001283f, -0.000707f, 0.000560f, 0.000051f, 0.001224f, 0.000426f, 0.000138f, -0.000209f, -0.000592f, -0.000144f, -0.000279f, 0.000563f, -0.000108f, 0.000245f, 0.000041f, 0.000105f, -0.000311f, 0.000461f, 0.001596f, 0.001037f, 0.001056f, 0.000983f, 0.000783f, 0.000455f, 0.000299f, 0.000203f, 0.000515f, -0.000424f, 0.000310f, -0.000190f, 0.004369f, -0.004604f, -0.001390f, -0.001989f, -0.001717f, -0.000939f, - -0.000275f, 0.000637f, -0.000638f, 0.000065f, -0.001701f, 0.000578f, -0.000618f, -0.001548f, 0.000411f, -0.001108f, -0.001471f, -0.001059f, 0.001411f, 0.001055f, -0.000494f, 0.000533f, -0.000974f, 0.000372f, -0.001774f, 0.000085f, 0.000295f, -0.000310f, -0.000414f, 0.000363f, -0.001404f, -0.000647f, 0.000184f, -0.000501f, -0.000413f, -0.000330f, 0.000117f, 0.000139f, 0.000711f, 0.000031f, 0.001225f, -0.000485f, -0.000334f, -0.000397f, -0.000603f, -0.000200f, -0.000301f, 0.000159f, -0.000520f, -0.000817f, -0.000124f, -0.015760f, -0.007972f, -0.002877f, -0.002233f, -0.002459f, -0.001522f, -0.002128f, -0.001364f, -0.002316f, -0.000407f, -0.001057f, -0.000257f, 0.000086f, -0.000945f, -0.000282f, 0.000160f, -0.000008f, -0.001443f, -0.000985f, -0.000648f, 0.000116f, -0.001949f, 0.000173f, -0.000879f, -0.001763f, 0.000159f, -0.000046f, 0.000130f, -0.000067f, -0.000606f, -0.000495f, 0.000029f, -0.000157f, -0.000013f, -0.000676f, 0.000030f, 0.000151f, 0.000535f, 0.000174f, -0.000668f, 0.000361f, -0.000668f, 0.000432f, -0.001155f, -0.000820f, 0.000184f, -0.000671f, 0.000041f, -0.000271f, -0.000926f, -0.000304f, - -0.009327f, 0.004900f, 0.002036f, 0.000775f, 0.001246f, 0.000249f, 0.000323f, 0.001123f, 0.001224f, 0.000686f, 0.000810f, -0.000612f, -0.000281f, -0.000963f, 0.001175f, 0.000264f, 0.000200f, 0.001639f, 0.000038f, -0.001073f, 0.001915f, -0.001264f, 0.000141f, 0.001611f, -0.000496f, 0.000435f, 0.000192f, -0.000020f, -0.000815f, -0.000174f, 0.000427f, 0.000477f, 0.000064f, -0.000268f, 0.000018f, -0.000547f, 0.001807f, 0.000173f, -0.000042f, -0.000699f, -0.000374f, -0.000445f, -0.000447f, 0.001003f, 0.000931f, -0.000226f, 0.000080f, -0.000044f, 0.000272f, 0.000087f, -0.000075f, -0.000176f, 0.000212f, 0.000166f, -0.000288f, -0.000239f, 0.000039f, 0.000235f, 0.014030f, 0.005938f, 0.001607f, 0.003199f, 0.001882f, 0.000785f, 0.001416f, 0.001190f, 0.000018f, 0.000866f, 0.001406f, 0.000308f, 0.000019f, 0.000698f, 0.001975f, -0.000676f, -0.000343f, -0.001562f, 0.000411f, 0.001774f, 0.000771f, 0.000071f, -0.000992f, -0.000553f, -0.000417f, 0.001870f, 0.000601f, 0.000973f, 0.000567f, -0.000903f, -0.001421f, 0.001621f, 0.000912f, -0.001011f, -0.000461f, 0.001575f, 0.001352f, -0.000077f, - 0.000349f, -0.000174f, 0.000714f, 0.000437f, -0.000138f, 0.000315f, -0.000542f, -0.000269f, 0.000871f, -0.000458f, -0.000331f, 0.000906f, 0.000797f, 0.000427f, 0.000173f, 0.000184f, 0.000210f, 0.000645f, 0.000372f, 0.001021f, 0.016603f, 0.003577f, 0.002787f, 0.001200f, 0.001292f, 0.000518f, 0.001329f, 0.001524f, 0.002480f, 0.001491f, -0.000441f, 0.001919f, -0.000350f, 0.000505f, 0.000455f, 0.001622f, 0.002440f, 0.001541f, -0.000395f, 0.002686f, -0.000490f, -0.000293f, -0.001399f, 0.000371f, -0.000400f, 0.000430f, 0.000751f, -0.000830f, -0.001111f, -0.000483f, 0.000245f, -0.000922f, -0.000276f, 0.000405f, 0.000624f, -0.001079f, -0.000888f, -0.000390f, 0.000373f, -0.000017f, 0.000305f, -0.000397f, 0.000015f, -0.000271f, -0.000338f, 0.000426f, -0.000593f, 0.000580f, -0.000638f, -0.000238f, -0.000480f, 0.000102f, -0.000159f, 0.000654f, 0.000319f, -0.000058f, 0.000931f, 0.000309f, 0.001926f, -0.007360f, -0.002353f, -0.002634f, -0.001687f, 0.000448f, -0.000413f, -0.001584f, 0.000908f, 0.000060f, 0.001115f, -0.000131f, 0.000122f, -0.001727f, -0.001207f, -0.000806f, -0.001243f, 0.000100f, - -0.001323f, -0.002572f, 0.000513f, 0.000294f, -0.001185f, -0.000268f, -0.001075f, 0.000220f, 0.000368f, -0.000217f, -0.002641f, -0.000757f, 0.000172f, -0.000303f, 0.000230f, 0.000703f, -0.001880f, -0.000573f, -0.001174f, 0.000602f, -0.000143f, -0.000110f, 0.001235f, -0.001259f, -0.000082f, 0.000375f, -0.000157f, -0.000422f, 0.000598f, 0.000305f, -0.000747f, -0.000928f, -0.001459f, -0.000234f, -0.001115f, -0.000916f, -0.000476f, -0.000638f, -0.000372f, -0.000185f, -0.000342f, -0.000576f, -0.000756f, -0.000445f, 0.000272f, 0.000500f, -0.000089f, -0.017254f, -0.005829f, -0.003546f, -0.000875f, -0.001846f, -0.000048f, -0.001008f, -0.001260f, -0.001601f, 0.001981f, 0.000025f, -0.000730f, -0.000206f, -0.002842f, -0.001650f, -0.001375f, 0.002316f, -0.001946f, -0.004179f, 0.000367f, 0.000489f, 0.000349f, -0.001551f, -0.000382f, 0.000855f, -0.001889f, -0.000219f, -0.001928f, -0.000604f, 0.001113f, -0.000959f, 0.000290f, 0.002103f, 0.000255f, -0.000461f, -0.000492f, 0.000555f, 0.000682f, 0.000511f, -0.000610f, -0.000139f, 0.000708f, 0.000915f, 0.000588f, 0.000295f, -0.001768f, 0.000318f, -0.000063f, -0.000929f, - -0.000315f, 0.000155f, -0.000219f, -0.000939f, -0.000585f, -0.000974f, -0.000251f, 0.000027f, 0.000157f, -0.000166f, -0.000643f, -0.000142f, -0.000495f, -0.000065f, -0.000531f, -0.000025f, -0.011470f, 0.002683f, 0.000139f, -0.001362f, 0.002020f, -0.001262f, -0.001032f, 0.000551f, -0.001962f, -0.001120f, -0.000441f, 0.000837f, -0.001554f, 0.002118f, 0.000016f, -0.000021f, 0.000944f, 0.001006f, 0.001498f, -0.000128f, 0.002074f, 0.003056f, 0.002154f, 0.000726f, 0.001839f, -0.000571f, 0.001158f, -0.001342f, -0.001433f, -0.000552f, 0.000146f, 0.000951f, -0.000766f, -0.001287f, -0.000741f, 0.000004f, 0.000791f, -0.001243f, 0.000897f, 0.000353f, 0.000686f, -0.000290f, -0.001192f, -0.001536f, -0.001895f, 0.000526f, -0.000981f, 0.000546f, -0.002007f, -0.000538f, 0.000867f, -0.001215f, 0.000182f, -0.000843f, 0.000576f, -0.000246f, 0.000559f, 0.000174f, -0.000376f, 0.000005f, -0.000821f, 0.001527f, 0.000605f, 0.001413f, 0.000568f, 0.007665f, 0.012616f, 0.003680f, 0.003271f, 0.004575f, 0.003684f, 0.000745f, 0.002920f, 0.002627f, 0.001411f, 0.005545f, 0.001308f, 0.000959f, 0.002384f, 0.002236f, - 0.001159f, 0.001005f, 0.000576f, 0.000945f, -0.000718f, 0.002815f, -0.000751f, 0.000297f, -0.000880f, 0.001794f, 0.000085f, -0.000427f, 0.001459f, 0.001770f, 0.000612f, 0.002340f, -0.001638f, -0.002677f, -0.000612f, -0.000127f, 0.000587f, -0.000156f, 0.001166f, -0.001051f, 0.001062f, 0.002360f, 0.001002f, -0.002040f, -0.000429f, 0.001090f, 0.000414f, -0.000982f, 0.001466f, 0.000609f, 0.000869f, 0.000996f, 0.001310f, 0.000463f, -0.000364f, 0.000354f, -0.001181f, -0.000278f, 0.001106f, 0.001044f, -0.000569f, 0.000018f, 0.000273f, -0.000467f, 0.000160f, 0.000835f, 0.029028f, 0.002976f, -0.000266f, 0.001787f, -0.000029f, 0.002472f, 0.000054f, 0.000660f, 0.000340f, 0.002606f, 0.001246f, -0.001082f, 0.000902f, 0.001246f, 0.000697f, -0.001585f, -0.003255f, -0.001511f, -0.001353f, 0.000576f, -0.001989f, -0.000359f, -0.000103f, 0.000535f, 0.003633f, 0.001999f, 0.000705f, 0.001442f, -0.002221f, -0.000142f, -0.001152f, -0.000455f, -0.000902f, 0.001351f, -0.000493f, 0.002264f, -0.001017f, -0.000412f, -0.001138f, -0.000522f, -0.001655f, -0.000785f, 0.000412f, 0.000365f, -0.000062f, 0.000019f, - -0.000896f, 0.000523f, 0.001589f, 0.000127f, -0.000815f, 0.000981f, -0.001356f, 0.000605f, 0.000634f, -0.000135f, -0.000403f, -0.000292f, -0.000035f, -0.000257f, 0.000096f, 0.000940f, -0.000078f, -0.000857f, 0.000207f, -0.008441f, -0.010047f, -0.001867f, -0.000561f, -0.000411f, -0.001599f, -0.000660f, 0.003046f, 0.001804f, 0.000640f, 0.000832f, -0.001333f, -0.000266f, 0.002285f, -0.000843f, 0.003722f, -0.002893f, -0.000793f, 0.003036f, -0.000589f, -0.000341f, -0.001769f, 0.002080f, 0.002297f, 0.000042f, 0.002264f, -0.000827f, 0.001001f, -0.000048f, -0.001274f, -0.000201f, -0.001009f, -0.000421f, -0.000657f, 0.001251f, -0.000928f, -0.000222f, -0.001425f, 0.000959f, -0.000743f, 0.002095f, -0.003317f, 0.001389f, 0.001148f, -0.002003f, 0.000036f, -0.001325f, 0.000349f, -0.001508f, 0.000470f, 0.000624f, -0.001918f, -0.000292f, -0.000703f, -0.002848f, -0.001655f, -0.000793f, -0.001422f, -0.000311f, -0.000246f, 0.000151f, -0.001165f, 0.000159f, -0.002244f, 0.000621f, 0.000265f, -0.000776f, 0.000271f, -0.000774f, -0.000216f, -0.000505f, -0.000243f, -0.007445f, -0.004230f, -0.005782f, -0.002930f, -0.003871f, - -0.000410f, 0.003685f, -0.003853f, 0.002957f, 0.001928f, -0.002140f, 0.004254f, -0.000696f, 0.000846f, -0.002789f, -0.000274f, -0.001256f, -0.000154f, -0.000009f, 0.001065f, 0.000483f, 0.002230f, 0.004206f, -0.001125f, 0.000555f, -0.002003f, -0.002144f, -0.001858f, 0.000399f, 0.001781f, -0.000649f, -0.000595f, -0.000591f, -0.001289f, 0.001439f, -0.000442f, -0.000128f, -0.001262f, -0.001038f, -0.000834f, -0.001351f, -0.000094f, -0.000088f, -0.001099f, 0.000702f, -0.001692f, 0.000601f, -0.000976f, -0.000209f, 0.000637f, -0.001294f, 0.001577f, -0.002746f, -0.000829f, 0.000224f, -0.000789f, -0.001481f, 0.000726f, -0.000432f, -0.001616f, 0.002643f, 0.001528f, 0.000337f, 0.000525f, 0.000505f, 0.000671f, -0.001386f, -0.000874f, 0.000311f, -0.000468f, -0.000971f, 0.001024f, -0.020685f, -0.002340f, 0.001651f, -0.001489f, 0.003411f, 0.001609f, -0.004201f, 0.000592f, 0.000687f, -0.001322f, -0.003520f, -0.001270f, -0.000870f, 0.001028f, 0.000236f, -0.003213f, -0.001240f, -0.001700f, -0.003135f, -0.002599f, -0.006130f, -0.003153f, -0.003587f, -0.004304f, 0.003427f, -0.002274f, 0.001244f, 0.002611f, -0.001882f, - -0.002908f, -0.001148f, -0.000601f, 0.000689f, 0.001970f, 0.001112f, -0.002403f, -0.003037f, 0.002416f, 0.001478f, 0.001918f, 0.002640f, 0.000418f, -0.000024f, 0.001076f, -0.000139f, -0.001138f, 0.000660f, -0.000599f, -0.000416f, 0.001594f, 0.003961f, -0.001282f, -0.001999f, 0.000961f, -0.001278f, -0.000084f, 0.002036f, -0.003892f, -0.000066f, -0.001258f, -0.000225f, -0.000046f, 0.000014f, -0.000430f, 0.000775f, -0.001132f, 0.001416f, 0.001587f, 0.000644f, -0.000053f, -0.000019f, -0.001286f, 0.016567f, 0.014428f, 0.003922f, 0.008770f, 0.002441f, 0.005047f, -0.000808f, -0.000810f, 0.002470f, 0.003315f, 0.001777f, -0.005739f, -0.001887f, 0.003568f, 0.004052f, -0.001495f, -0.001931f, 0.000651f, 0.001697f, 0.001904f, 0.000301f, -0.002987f, -0.006390f, -0.002411f, 0.003515f, -0.000313f, 0.003612f, -0.000854f, -0.001125f, 0.000725f, -0.002959f, -0.001728f, -0.001712f, 0.003292f, -0.004083f, -0.002831f, 0.000759f, 0.000687f, -0.001035f, -0.000130f, -0.001154f, 0.001233f, 0.001701f, 0.001443f, 0.003275f, 0.001895f, 0.000080f, -0.002658f, 0.002529f, -0.000233f, 0.001414f, -0.001297f, 0.000995f, - 0.001986f, -0.000275f, -0.000526f, -0.001211f, -0.001464f, 0.000930f, 0.000208f, 0.001304f, -0.001265f, 0.001094f, 0.002579f, -0.000510f, -0.001403f, 0.001824f, 0.002339f, -0.000914f, 0.001049f, 0.001200f, 0.000943f, 0.002259f, 0.001912f, 0.020130f, 0.003695f, -0.003884f, 0.003213f, 0.002159f, -0.003854f, -0.000817f, 0.001893f, 0.000148f, 0.000573f, -0.000280f, -0.000847f, -0.004176f, -0.004161f, 0.001850f, 0.003831f, 0.004031f, -0.004009f, -0.007998f, 0.001068f, -0.000109f, -0.003270f, -0.004086f, -0.000780f, 0.002059f, -0.001472f, 0.003050f, 0.004826f, -0.001824f, -0.001655f, -0.000651f, -0.000783f, -0.000947f, -0.007530f, 0.003906f, 0.003495f, -0.000135f, 0.002231f, -0.002264f, -0.000782f, -0.002060f, 0.002949f, 0.003220f, 0.000294f, -0.000806f, -0.001239f, 0.001793f, 0.000366f, -0.001054f, -0.001960f, 0.000001f, 0.001526f, -0.002426f, -0.001571f, -0.001324f, 0.000342f, 0.000768f, -0.003118f, 0.001547f, 0.003297f, -0.002755f, -0.000106f, -0.000670f, -0.000543f, -0.000031f, 0.000265f, 0.000179f, -0.000266f, 0.000592f, -0.000980f, -0.001810f, -0.002194f, -0.000946f, -0.000592f, -0.001168f, - -0.002093f, -0.001642f, -0.000476f, 0.001449f, -0.000681f, -0.005544f, -0.003592f, 0.000479f, 0.005016f, -0.005053f, 0.003596f, 0.001585f, 0.000809f, 0.000972f, 0.000889f, 0.003205f, 0.005293f, 0.000096f, 0.001614f, 0.000536f, -0.004501f, -0.004160f, 0.004042f, 0.000496f, -0.004652f, 0.002711f, -0.003969f, 0.000609f, 0.004935f, -0.000363f, -0.001317f, 0.005556f, 0.000897f, 0.000332f, 0.000484f, 0.000116f, 0.000528f, -0.002518f, 0.001500f, 0.002208f, 0.003721f, -0.002990f, -0.001434f, 0.000522f, 0.000536f, -0.001401f, -0.002633f, 0.001642f, -0.000948f, 0.001134f, 0.000649f, -0.000977f, -0.000839f, 0.000325f, 0.001702f, -0.001331f, -0.000544f, -0.000341f, 0.000986f, -0.002743f, -0.001236f, 0.001193f, 0.000286f, -0.000963f, -0.000450f, 0.001073f, -0.001117f, 0.000299f, -0.000749f, -0.000244f, 0.000929f, 0.000210f, 0.000550f, -0.002376f, -0.001634f, 0.000565f, -0.021614f, -0.019799f, -0.004457f, -0.009161f, -0.008090f, -0.004547f, -0.001413f, -0.003408f, -0.004157f, 0.002828f, 0.000721f, -0.000939f, 0.004681f, 0.001748f, 0.005630f, 0.004403f, 0.001229f, 0.001773f, 0.002032f, -0.008658f, - 0.004057f, -0.000653f, -0.001871f, -0.001609f, -0.005168f, -0.001574f, -0.001817f, 0.004946f, -0.001686f, -0.002932f, -0.001505f, 0.000798f, -0.000682f, -0.000972f, 0.001048f, -0.001292f, -0.000887f, 0.003028f, -0.002999f, -0.000248f, -0.000999f, 0.005437f, 0.002112f, 0.002179f, -0.004218f, 0.000330f, 0.003672f, -0.001945f, 0.000843f, 0.000025f, 0.000858f, 0.000029f, 0.000266f, -0.000280f, 0.002322f, -0.000305f, -0.000819f, 0.001728f, -0.001272f, 0.000970f, 0.002016f, -0.000964f, -0.001483f, 0.000640f, 0.000740f, -0.001551f, -0.000685f, -0.002863f, -0.002317f, 0.000750f, -0.000311f, -0.000507f, -0.000103f, 0.000374f, -0.000235f, -0.001820f, -0.000907f, -0.013591f, 0.028623f, 0.017842f, 0.005832f, 0.001671f, 0.002042f, 0.001944f, 0.003285f, 0.002734f, 0.006125f, 0.012000f, 0.000771f, 0.001297f, 0.002714f, 0.002396f, 0.003193f, -0.002332f, 0.011812f, 0.008279f, -0.007697f, 0.005674f, 0.001152f, -0.001329f, 0.002905f, 0.007010f, -0.006559f, -0.001967f, 0.000629f, -0.005592f, -0.003674f, -0.004015f, 0.008146f, -0.000425f, -0.001345f, 0.001004f, 0.000533f, -0.002473f, -0.006383f, 0.004423f, - 0.003752f, -0.001161f, 0.002088f, 0.004538f, -0.002972f, 0.002445f, 0.000348f, -0.001259f, 0.003721f, 0.003041f, 0.000812f, 0.000361f, 0.000460f, 0.002439f, 0.003615f, -0.000027f, -0.000549f, -0.000091f, -0.001028f, 0.002419f, 0.000608f, -0.001058f, -0.001145f, -0.000955f, 0.001971f, 0.000818f, 0.004363f, -0.001342f, 0.001619f, -0.001000f, 0.001158f, -0.001793f, -0.000526f, 0.000477f, -0.000855f, -0.001267f, 0.000202f, 0.000161f, 0.000643f, 0.001110f, 0.030976f, -0.010950f, -0.010656f, 0.004799f, 0.001244f, -0.004102f, -0.003517f, -0.005716f, -0.005565f, -0.004156f, -0.003428f, 0.005073f, 0.001247f, 0.000572f, -0.002851f, -0.002582f, -0.008999f, -0.000056f, -0.003524f, -0.006268f, 0.005240f, 0.003404f, 0.001125f, 0.003161f, 0.000956f, -0.001136f, -0.001949f, -0.000214f, -0.001638f, 0.002580f, 0.004501f, -0.004761f, -0.001679f, 0.000026f, 0.002486f, 0.006118f, 0.001913f, 0.008220f, -0.004177f, 0.002566f, 0.006949f, 0.004019f, -0.003368f, -0.001062f, 0.000871f, -0.001787f, 0.003046f, -0.000501f, 0.000241f, 0.004361f, 0.002490f, 0.000667f, 0.000501f, -0.000146f, -0.001759f, -0.000089f, - 0.000622f, -0.002011f, -0.001023f, 0.001916f, -0.000664f, -0.003780f, -0.000446f, 0.000078f, -0.000547f, -0.003934f, 0.001122f, 0.000770f, 0.001085f, 0.001058f, -0.000704f, -0.001651f, -0.000440f, -0.000848f, 0.003285f, 0.001327f, -0.001122f, 0.000854f, -0.000176f, 0.000641f, 0.000166f, 0.009962f, 0.018836f, 0.007446f, 0.005028f, 0.005949f, -0.001744f, 0.001942f, -0.005405f, 0.009422f, 0.003676f, 0.009053f, 0.002677f, 0.003480f, -0.008239f, 0.010318f, 0.015206f, 0.001984f, 0.009855f, -0.001928f, -0.008021f, -0.007875f, 0.007228f, -0.002276f, 0.005770f, 0.001127f, 0.002307f, -0.004380f, 0.004465f, -0.001496f, -0.001606f, 0.007451f, 0.005129f, -0.003810f, 0.006899f, 0.000844f, 0.001256f, -0.001321f, -0.005214f, 0.001521f, 0.000384f, -0.002825f, -0.003285f, 0.003130f, 0.004289f, 0.001485f, -0.001515f, 0.002104f, 0.000163f, 0.004648f, -0.002756f, -0.000320f, -0.004543f, 0.000613f, 0.004444f, 0.003074f, -0.002064f, 0.000069f, 0.001562f, -0.003949f, -0.000303f, -0.002668f, -0.001534f, 0.000929f, 0.001064f, 0.002801f, -0.003184f, 0.001470f, -0.003663f, 0.000412f, 0.004544f, 0.001688f, - 0.000898f, -0.002784f, 0.000429f, 0.000437f, -0.004737f, -0.001163f, 0.000555f, 0.000904f, 0.001882f, 0.000860f, -0.000024f, -0.022116f, -0.001125f, -0.005058f, 0.006331f, -0.004847f, 0.005221f, 0.000073f, 0.004199f, -0.000657f, 0.003631f, -0.011096f, 0.003309f, -0.001378f, -0.003901f, 0.001850f, -0.004768f, 0.002882f, -0.004815f, -0.002666f, -0.010724f, 0.006052f, 0.012993f, -0.005162f, -0.001653f, -0.001568f, -0.002056f, 0.001879f, 0.002625f, 0.003657f, -0.009536f, 0.002774f, -0.005920f, -0.001804f, -0.000281f, 0.004828f, 0.001921f, -0.002569f, 0.001082f, 0.000953f, 0.003560f, 0.003496f, -0.005946f, -0.002070f, 0.000902f, -0.004463f, -0.003856f, -0.000837f, -0.002746f, 0.001085f, 0.003381f, 0.000349f, 0.000612f, -0.000891f, 0.003153f, 0.008329f, 0.004787f, -0.005279f, 0.001075f, 0.001811f, -0.002537f, 0.002869f, 0.000801f, -0.003418f, -0.000287f, 0.003693f, 0.000432f, 0.003530f, -0.004865f, -0.001245f, 0.002961f, 0.000036f, -0.001583f, -0.003507f, -0.000235f, -0.001911f, 0.002833f, -0.000905f, 0.001778f, -0.000947f, -0.000338f, -0.040541f, -0.015093f, 0.008127f, 0.003050f, -0.005283f, - 0.005838f, 0.004652f, 0.007680f, -0.001920f, -0.003222f, 0.006545f, 0.000385f, -0.004552f, 0.009123f, -0.010193f, -0.013061f, -0.006298f, -0.006959f, 0.004531f, 0.006743f, -0.000234f, 0.001823f, 0.010388f, 0.004723f, -0.010687f, -0.004679f, -0.006604f, 0.002069f, -0.009928f, -0.008475f, -0.000599f, 0.001450f, -0.003845f, -0.004001f, -0.006079f, -0.002997f, -0.005569f, -0.005261f, -0.002095f, 0.000587f, -0.002034f, -0.000191f, -0.003777f, -0.000444f, -0.002909f, -0.006131f, 0.013457f, 0.001229f, 0.003134f, -0.005384f, 0.003518f, -0.000220f, 0.001769f, -0.004295f, -0.000241f, -0.000582f, -0.003744f, -0.002169f, -0.001738f, 0.004535f, 0.003151f, 0.003580f, 0.002083f, 0.002809f, -0.000680f, 0.000184f, -0.003245f, -0.000439f, -0.000210f, -0.000103f, 0.004101f, 0.001277f, 0.002383f, 0.002691f, -0.001931f, -0.004342f, 0.001872f, -0.001575f, -0.000851f, 0.001986f, 0.005275f, -0.000501f, 0.021178f, 0.007834f, 0.017059f, 0.002734f, 0.001127f, -0.006794f, 0.002609f, 0.010275f, 0.003833f, 0.000795f, 0.006858f, -0.006094f, -0.002755f, 0.005644f, -0.004260f, 0.002006f, 0.009828f, 0.003224f, 0.001345f, - 0.003198f, -0.001783f, 0.004343f, -0.003239f, 0.000182f, 0.001682f, 0.000645f, -0.002492f, -0.002629f, 0.001082f, 0.010197f, -0.003252f, 0.002585f, -0.009303f, -0.004907f, 0.004297f, 0.010744f, -0.008163f, 0.000151f, 0.005173f, 0.001381f, 0.001993f, -0.006690f, -0.002329f, -0.005768f, -0.010206f, -0.002614f, -0.005654f, -0.005925f, 0.004910f, 0.002041f, 0.001730f, -0.003421f, -0.002104f, -0.000601f, -0.009792f, -0.000823f, 0.005577f, -0.003800f, 0.004488f, 0.009200f, 0.001445f, 0.006129f, 0.004036f, 0.000448f, -0.001751f, 0.005336f, -0.006538f, -0.000200f, -0.000325f, 0.004271f, 0.002085f, 0.003946f, 0.000223f, 0.004366f, -0.000188f, 0.000999f, 0.000729f, 0.004644f, 0.000115f, 0.000169f, 0.004140f, -0.002063f, 0.002614f, 0.001021f, 0.000773f, -0.001183f, 0.025902f, -0.005789f, -0.007781f, 0.001134f, 0.006061f, 0.004689f, 0.005068f, -0.001567f, 0.005456f, 0.001541f, -0.006189f, -0.012786f, 0.008612f, 0.002149f, 0.006268f, 0.003535f, -0.003233f, 0.001365f, -0.004710f, -0.008404f, 0.008737f, -0.005505f, -0.010160f, 0.000975f, -0.001550f, 0.001153f, -0.000885f, -0.001158f, -0.002476f, - -0.004197f, 0.003174f, 0.006831f, -0.009899f, 0.009705f, -0.008353f, -0.011196f, 0.001219f, 0.002863f, -0.006115f, 0.004821f, -0.000744f, 0.003021f, -0.005245f, -0.002775f, 0.009307f, 0.003650f, 0.009423f, 0.002371f, 0.000848f, 0.002861f, 0.000118f, 0.000260f, 0.005006f, -0.000509f, 0.001004f, -0.004421f, -0.002810f, -0.002651f, 0.003570f, -0.003454f, -0.002732f, 0.005447f, -0.000014f, 0.006110f, 0.001093f, -0.004597f, 0.007557f, 0.005687f, -0.000323f, 0.003682f, -0.003645f, -0.006314f, 0.002551f, -0.002361f, -0.004341f, 0.000312f, 0.004110f, 0.005305f, -0.001877f, 0.001605f, 0.002760f, -0.000431f, 0.001271f, -0.005463f, 0.002223f, 0.001796f, -0.002537f, 0.021640f, 0.026259f, -0.003985f, 0.000114f, -0.013188f, -0.001545f, -0.009610f, -0.007271f, -0.002258f, -0.004986f, 0.007498f, -0.000042f, 0.005828f, -0.012399f, 0.010318f, -0.007825f, 0.010536f, 0.000329f, 0.008377f, -0.003052f, 0.010545f, 0.003408f, -0.004944f, 0.002171f, -0.007405f, 0.004906f, -0.004103f, 0.011774f, 0.003574f, 0.007725f, -0.012869f, -0.007441f, -0.003117f, -0.006588f, -0.002688f, -0.004520f, 0.000474f, 0.015932f, - -0.007327f, 0.007992f, 0.013591f, 0.001881f, 0.006008f, 0.000043f, -0.002978f, -0.006355f, -0.004763f, 0.000637f, -0.003421f, 0.008136f, -0.005237f, 0.003712f, 0.009945f, -0.001336f, -0.000758f, -0.000826f, 0.008145f, 0.008707f, 0.002798f, -0.004091f, -0.003497f, -0.002175f, 0.003478f, -0.008039f, 0.001565f, -0.001467f, -0.002143f, 0.000083f, 0.005348f, 0.000442f, 0.007548f, 0.006824f, 0.001421f, 0.001616f, -0.003193f, -0.000191f, 0.007759f, -0.001021f, 0.000521f, 0.003201f, -0.004043f, 0.000052f, -0.004637f, -0.005146f, 0.000810f, 0.000714f, -0.000959f, -0.020425f, -0.018446f, 0.008261f, -0.002511f, 0.010202f, -0.005832f, -0.004674f, -0.006947f, -0.005559f, -0.002679f, -0.016094f, -0.006001f, 0.006316f, 0.008633f, 0.003680f, -0.011339f, -0.003112f, -0.005474f, 0.004875f, 0.016250f, 0.009228f, 0.003928f, 0.000737f, 0.001180f, 0.000948f, 0.002812f, 0.008537f, 0.000633f, 0.002323f, -0.004850f, 0.000503f, -0.006929f, 0.002803f, 0.003319f, 0.006213f, 0.000750f, -0.004052f, -0.002132f, 0.008159f, -0.003776f, 0.003158f, 0.001613f, 0.003041f, 0.010241f, -0.005588f, -0.008711f, 0.003393f, - 0.007295f, 0.002068f, 0.007292f, 0.008914f, 0.004216f, 0.006223f, 0.002328f, 0.001448f, 0.004807f, 0.014774f, -0.008164f, 0.000133f, 0.002389f, 0.001442f, -0.006334f, -0.000975f, 0.004856f, 0.000063f, -0.005680f, 0.002402f, 0.010612f, -0.008495f, 0.002807f, -0.008036f, 0.004725f, 0.003365f, 0.001300f, 0.000469f, -0.003869f, -0.003695f, 0.007467f, 0.004191f, 0.001520f, -0.002127f, 0.005233f, -0.000592f, 0.000015f, -0.003481f, 0.003858f, 0.001595f, -0.041169f, -0.014506f, -0.000826f, -0.004220f, -0.010078f, 0.006115f, 0.008401f, 0.013904f, 0.004702f, 0.008703f, -0.008079f, -0.017358f, 0.008134f, -0.004181f, 0.000529f, -0.009395f, 0.009237f, -0.005594f, -0.000338f, 0.008389f, -0.023443f, 0.002162f, 0.012337f, -0.022952f, -0.005946f, -0.008204f, 0.001198f, 0.000739f, 0.005681f, -0.006465f, 0.007499f, 0.000942f, -0.011887f, -0.006287f, 0.001507f, -0.001652f, -0.005844f, 0.005106f, 0.014015f, 0.002858f, 0.003940f, -0.002354f, -0.003380f, 0.008005f, 0.001569f, -0.004203f, -0.019920f, -0.003309f, 0.002608f, -0.010267f, 0.004900f, 0.003972f, 0.000894f, -0.007965f, -0.006930f, -0.008485f, - 0.018039f, 0.004637f, -0.002658f, 0.003347f, -0.015187f, 0.001662f, -0.007068f, -0.008344f, 0.008026f, -0.001490f, 0.000179f, -0.005312f, -0.019024f, 0.002440f, 0.005879f, 0.003219f, -0.001320f, 0.011160f, 0.000451f, -0.004875f, -0.000683f, -0.007558f, 0.011779f, 0.006236f, 0.003348f, -0.002077f, 0.000869f, 0.003629f, -0.003412f, 0.001334f, 0.001685f, 0.000494f, 0.043832f, 0.010993f, 0.011346f, 0.009567f, -0.002749f, 0.000347f, 0.045082f, 0.012977f, -0.003674f, 0.027482f, -0.015377f, 0.011453f, 0.002469f, 0.006993f, 0.011302f, -0.003495f, -0.007787f, 0.008461f, -0.001478f, -0.027212f, 0.007021f, 0.007042f, 0.005827f, 0.012940f, 0.008275f, 0.008451f, -0.007587f, 0.001686f, -0.007321f, -0.003861f, 0.008141f, 0.002678f, -0.015794f, -0.009476f, -0.013222f, -0.019804f, -0.002946f, 0.004097f, 0.009767f, 0.008366f, 0.007290f, 0.006051f, -0.002838f, 0.010381f, 0.005864f, -0.012590f, -0.004724f, 0.003387f, 0.009602f, 0.000254f, 0.002155f, 0.016752f, -0.002886f, -0.001384f, -0.004220f, -0.000838f, 0.008638f, -0.007240f, 0.000244f, -0.010253f, -0.009026f, -0.005817f, 0.010838f, 0.014772f, - -0.004147f, 0.001240f, -0.002708f, -0.009088f, -0.006064f, 0.002430f, -0.010453f, -0.002757f, -0.002692f, -0.006784f, 0.018900f, 0.004175f, 0.006420f, 0.005537f, -0.000396f, 0.000095f, 0.003392f, 0.001060f, 0.006054f, 0.003796f, 0.000262f, -0.000516f, 0.044762f, 0.026123f, 0.002092f, 0.016515f, 0.012966f, 0.003449f, 0.019510f, 0.005246f, 0.000133f, -0.006195f, -0.004253f, -0.012785f, -0.033958f, -0.002726f, 0.003516f, -0.011849f, -0.006449f, -0.001503f, 0.024041f, 0.007619f, -0.005993f, 0.000058f, 0.001851f, -0.003601f, 0.010249f, -0.001879f, -0.006001f, -0.004409f, -0.005646f, 0.003586f, -0.008388f, -0.021149f, 0.000669f, -0.011126f, -0.016770f, 0.003145f, 0.007509f, 0.010440f, 0.006172f, 0.009221f, -0.006216f, -0.018240f, -0.011591f, -0.016425f, 0.006569f, 0.015050f, 0.012735f, 0.007932f, 0.015396f, 0.000211f, 0.009694f, 0.020464f, -0.016890f, 0.002902f, -0.007519f, -0.000099f, 0.006127f, 0.005978f, 0.010230f, -0.001083f, -0.020687f, -0.016308f, 0.003667f, -0.004737f, -0.005740f, -0.004159f, -0.004363f, -0.014473f, 0.001463f, 0.009512f, -0.000837f, 0.007205f, -0.004236f, -0.000557f, - -0.000601f, 0.003515f, 0.014389f, 0.009828f, 0.008850f, -0.008372f, 0.000683f, -0.005107f, 0.000792f, -0.013311f, 0.002852f, 0.001991f, 0.001642f, -0.000449f, -0.001391f, -0.003964f, 0.003498f, 0.010933f, -0.022344f, 0.002838f, -0.017126f, 0.007698f, -0.032617f, -0.000805f, -0.010888f, -0.016702f, 0.029931f, 0.017059f, -0.010817f, -0.026903f, -0.006933f, -0.009773f, -0.023684f, 0.018407f, 0.000866f, -0.016231f, -0.006177f, 0.009482f, -0.015547f, -0.010439f, -0.008229f, -0.018226f, -0.007142f, -0.000318f, -0.014921f, -0.013366f, 0.018701f, -0.006985f, -0.006013f, -0.001694f, -0.004348f, 0.016054f, -0.017884f, -0.008251f, 0.003602f, -0.004690f, -0.000168f, -0.003992f, 0.009085f, -0.016789f, 0.005837f, -0.026864f, 0.002579f, -0.007665f, -0.010899f, 0.028263f, 0.002771f, -0.010419f, 0.005218f, 0.005918f, -0.022970f, 0.015832f, -0.004033f, -0.004898f, -0.001905f, 0.009054f, -0.003952f, 0.000408f, -0.011103f, 0.005943f, 0.007210f, 0.012709f, -0.011170f, -0.028155f, 0.019460f, -0.002258f, 0.007917f, 0.009615f, -0.006034f, 0.005541f, 0.014326f, -0.018577f, 0.000785f, -0.006558f, -0.002236f, -0.019289f, - 0.006355f, -0.003020f, 0.000552f, -0.000510f, 0.002325f, -0.003274f, -0.003145f, 0.005270f, -0.005114f, 0.003804f, 0.000889f, -0.003659f, -0.042797f, -0.023422f, 0.005038f, -0.014837f, 0.001545f, -0.010650f, -0.005944f, -0.015746f, -0.011314f, 0.008342f, 0.023594f, 0.025365f, 0.003703f, 0.017976f, -0.012518f, 0.031202f, 0.022418f, -0.017826f, -0.016569f, 0.005390f, 0.004812f, 0.026411f, 0.009194f, 0.017004f, -0.006332f, 0.006971f, -0.003696f, -0.002546f, -0.005841f, 0.024705f, 0.010642f, 0.023673f, 0.020965f, 0.004343f, -0.001559f, -0.010098f, 0.009961f, -0.000974f, -0.021719f, -0.014025f, -0.004379f, -0.010816f, -0.002781f, -0.011125f, -0.010292f, 0.007004f, -0.003335f, -0.006953f, 0.017564f, 0.021315f, -0.012438f, -0.003809f, 0.028425f, 0.011963f, -0.019944f, -0.019059f, -0.007273f, 0.007501f, -0.001233f, -0.003357f, -0.014286f, 0.012029f, 0.003319f, -0.004317f, 0.002957f, 0.003472f, -0.017639f, -0.007401f, 0.001329f, -0.006307f, -0.008730f, -0.008864f, 0.023184f, -0.018195f, -0.016823f, 0.006998f, 0.011740f, 0.017401f, -0.009034f, -0.002571f, 0.001341f, -0.007696f, 0.007895f, -0.001019f, - 0.005849f, -0.004952f, -0.002446f, 0.001808f, 0.002080f, -0.002756f, -0.002909f, -0.000020f, -0.003485f, -0.016266f, -0.023662f, -0.020495f, -0.000084f, -0.016146f, -0.020566f, 0.005238f, -0.001690f, -0.028860f, 0.020635f, 0.003594f, -0.001671f, 0.010174f, 0.031758f, 0.030212f, 0.013129f, -0.037127f, 0.013842f, 0.009779f, -0.036250f, -0.000560f, -0.017465f, -0.008566f, 0.018778f, -0.022019f, 0.012826f, -0.000051f, -0.003712f, -0.007899f, 0.003839f, -0.001872f, 0.006359f, -0.004273f, -0.019388f, 0.018848f, 0.009003f, 0.022583f, -0.002294f, -0.007664f, -0.010880f, 0.009123f, -0.009800f, 0.026682f, 0.005685f, 0.016014f, -0.020760f, 0.016549f, 0.000702f, 0.005838f, -0.013457f, 0.004508f, -0.015994f, -0.002564f, -0.016409f, 0.006703f, 0.011443f, -0.021895f, 0.000941f, -0.018044f, 0.008489f, 0.010616f, 0.010419f, -0.001445f, -0.030853f, 0.000039f, 0.008213f, -0.002685f, 0.013789f, -0.029589f, 0.007634f, -0.012321f, 0.004020f, -0.010443f, 0.002202f, 0.007626f, -0.003278f, -0.000128f, -0.003166f, -0.003861f, 0.001232f, -0.007986f, 0.010072f, 0.002242f, -0.000204f, -0.012721f, -0.001127f, 0.001321f, - -0.000860f, 0.005314f, -0.005433f, 0.001205f, -0.000530f, -0.002818f, 0.044466f, 0.053939f, 0.022562f, 0.018807f, -0.031097f, 0.029911f, 0.043427f, -0.047516f, 0.005686f, 0.030817f, 0.005365f, -0.056675f, -0.005658f, -0.030767f, 0.009932f, 0.011272f, -0.014326f, -0.005609f, 0.010335f, -0.026024f, -0.002078f, -0.010197f, -0.012786f, 0.005076f, -0.019737f, 0.021259f, 0.015155f, 0.027494f, -0.013621f, 0.004492f, -0.002970f, -0.011217f, 0.034715f, -0.000689f, -0.015980f, -0.007557f, 0.007499f, -0.007488f, -0.009094f, -0.010679f, 0.017658f, 0.006548f, 0.024549f, -0.001755f, 0.008998f, 0.032210f, -0.020452f, 0.004260f, -0.013890f, 0.025552f, -0.010053f, 0.011942f, 0.005066f, -0.001043f, -0.009699f, -0.018241f, -0.012328f, 0.005108f, 0.023099f, -0.021773f, 0.019487f, 0.023030f, 0.011579f, 0.026918f, -0.013182f, -0.010752f, 0.017543f, -0.003077f, -0.003280f, -0.024899f, -0.001588f, -0.020551f, 0.004200f, 0.025946f, 0.012732f, 0.006502f, 0.011896f, 0.007045f, -0.011184f, -0.005082f, -0.019519f, 0.022007f, 0.000906f, -0.008817f, 0.005809f, 0.001933f, -0.010270f, 0.005306f, -0.001490f, 0.006268f, - -0.001081f, 0.009539f, 0.004570f, -0.020755f, -0.070541f, -0.029626f, -0.050720f, -0.027433f, -0.021674f, 0.011671f, -0.032556f, -0.033326f, -0.015911f, -0.044524f, -0.014452f, 0.033482f, -0.001014f, 0.001273f, -0.009057f, -0.007935f, -0.004197f, 0.002988f, -0.000535f, -0.029843f, -0.004724f, -0.005946f, 0.043177f, -0.005663f, 0.038390f, 0.003046f, -0.010322f, 0.009916f, 0.031607f, -0.001710f, 0.000330f, -0.012794f, -0.003714f, -0.013425f, 0.007515f, -0.005714f, -0.011357f, 0.005665f, -0.015343f, 0.012400f, 0.012668f, 0.002384f, 0.027677f, -0.012603f, 0.014108f, -0.011787f, 0.015570f, 0.010459f, 0.029159f, 0.003919f, -0.011882f, 0.015606f, -0.001998f, -0.009840f, 0.037033f, -0.002833f, -0.002234f, 0.021261f, 0.006579f, 0.028649f, -0.022369f, -0.021900f, -0.003326f, -0.009526f, -0.003010f, -0.035388f, -0.008032f, 0.012189f, -0.004793f, -0.015267f, -0.024849f, 0.001620f, 0.007596f, -0.012489f, -0.011902f, -0.021669f, -0.007699f, 0.009124f, 0.009470f, 0.019083f, -0.003070f, -0.001814f, -0.000682f, 0.006336f, 0.007641f, 0.001251f, 0.012120f, 0.003293f, 0.001303f, -0.001670f, -0.001156f, 0.008641f, - -0.003709f, 0.008541f, 0.009661f, -0.000451f, 0.002867f}, - {-0.005166f, 0.002777f, -0.001458f, 0.001697f, -0.001015f, 0.001427f, -0.003001f, 0.000132f, -0.000123f, -0.000344f, 0.000687f, 0.001488f, -0.000057f, -0.000145f, -0.001647f, -0.000658f, 0.000702f, 0.000404f, -0.000199f, 0.000646f, -0.000205f, 0.000225f, -0.000746f, -0.000506f, -0.000510f, -0.000173f, 0.000065f, -0.000381f, -0.000271f, 0.000876f, -0.000517f, 0.000533f, -0.000509f, -0.000087f, -0.000399f, 0.000489f, 0.000176f, 0.000403f, 0.000686f, 0.000866f, 0.000322f, 0.000234f, -0.000082f, 0.000097f, 0.000130f, -0.000180f, 0.000167f, 0.001825f, -0.002088f, -0.000278f, -0.000385f, -0.000517f, 0.000336f, -0.001035f, 0.000350f, -0.000023f, 0.000470f, 0.000415f, -0.000824f, -0.000291f, 0.001252f, -0.000130f, 0.000266f, -0.000232f, 0.000543f, 0.001151f, 0.001328f, 0.000227f, 0.000571f, -0.000019f, -0.001052f, -0.000031f, 0.000112f, -0.000227f, 0.000002f, 0.000579f, -0.000605f, -0.000810f, 0.000351f, -0.000391f, -0.000364f, -0.000568f, -0.000028f, 0.000598f, 0.000148f, -0.000177f, -0.000219f, -0.000238f, -0.000006f, 0.000133f, -0.000323f, 0.000118f, -0.000368f, 0.000221f, -0.005242f, -0.003704f, - -0.001828f, -0.001355f, -0.001061f, -0.001067f, -0.000385f, -0.000786f, -0.000260f, -0.000491f, -0.001307f, 0.000258f, 0.000648f, -0.000100f, 0.000364f, -0.000243f, -0.000685f, -0.000667f, -0.001028f, -0.000341f, 0.000230f, 0.000035f, -0.000585f, 0.000389f, -0.000705f, -0.000676f, 0.000432f, 0.000003f, 0.000007f, 0.000362f, 0.000391f, 0.000110f, -0.000173f, -0.000200f, -0.000284f, 0.000140f, 0.000055f, -0.000355f, 0.000175f, -0.000709f, -0.000323f, -0.000176f, -0.000091f, -0.000506f, -0.000120f, -0.000187f, -0.000029f, -0.007463f, -0.000969f, 0.000546f, 0.000141f, 0.000514f, 0.000089f, -0.000437f, 0.000300f, -0.000343f, -0.000320f, -0.000694f, -0.000532f, 0.000243f, -0.000179f, 0.000447f, -0.000427f, -0.000019f, -0.000412f, 0.000113f, 0.000785f, -0.000224f, 0.000592f, 0.000005f, -0.000486f, -0.000130f, 0.000715f, 0.000318f, 0.000476f, 0.000479f, -0.000682f, 0.000455f, -0.000260f, -0.000084f, -0.000354f, -0.000210f, 0.000239f, 0.000283f, 0.000197f, -0.000198f, 0.000583f, 0.000452f, 0.000318f, -0.000190f, -0.000325f, 0.000025f, -0.000262f, 0.000035f, 0.008778f, 0.006959f, 0.001669f, 0.003106f, - 0.000771f, 0.002399f, 0.001717f, 0.000506f, 0.001729f, 0.000670f, 0.001317f, 0.000547f, -0.000449f, 0.001287f, 0.000939f, -0.000369f, -0.000095f, -0.002431f, -0.000237f, 0.000112f, 0.001499f, 0.000157f, 0.000082f, 0.000742f, 0.000085f, 0.000671f, 0.000652f, 0.000092f, -0.000024f, 0.000232f, 0.001034f, 0.000765f, 0.000677f, -0.000070f, -0.000231f, 0.000038f, 0.000496f, -0.000180f, -0.000020f, 0.000519f, 0.000202f, -0.000261f, 0.000018f, 0.000111f, -0.000483f, 0.000642f, -0.000343f, 0.015464f, 0.005588f, 0.002784f, 0.001564f, 0.001043f, 0.000942f, 0.001001f, 0.001520f, 0.000444f, 0.002515f, 0.000411f, 0.000181f, 0.001164f, -0.000655f, 0.000327f, -0.000322f, -0.000214f, -0.000481f, 0.001715f, 0.000857f, -0.000069f, 0.001204f, -0.000797f, -0.000273f, -0.000235f, 0.001890f, -0.000111f, 0.000646f, 0.000226f, 0.000901f, 0.000239f, -0.000333f, 0.000576f, 0.000603f, -0.000224f, 0.000183f, 0.000345f, 0.000127f, 0.000475f, -0.000176f, 0.000534f, 0.000363f, -0.001167f, 0.000227f, 0.000229f, 0.000193f, 0.000939f, 0.005980f, -0.004442f, -0.001466f, -0.002094f, -0.001192f, -0.001274f, - 0.000876f, -0.000760f, -0.001761f, -0.000532f, -0.002364f, -0.000644f, -0.000995f, -0.002402f, -0.000532f, 0.000445f, -0.001414f, -0.000572f, 0.000283f, -0.001723f, -0.000020f, 0.001808f, 0.000477f, 0.000186f, -0.000816f, -0.000051f, 0.000711f, -0.000075f, -0.000748f, -0.000935f, 0.000918f, -0.000169f, -0.001076f, 0.000011f, -0.000430f, 0.001281f, 0.000008f, 0.000523f, -0.000175f, 0.001091f, -0.000737f, 0.000376f, 0.000204f, 0.000176f, 0.000059f, 0.000202f, 0.000010f, -0.000487f, 0.000769f, 0.000455f, 0.000074f, -0.016298f, -0.009124f, -0.001940f, -0.002232f, -0.001638f, -0.001946f, -0.002891f, -0.000207f, 0.000006f, -0.000778f, 0.000635f, -0.000720f, 0.000045f, -0.000034f, -0.001002f, -0.000979f, -0.001691f, -0.000524f, 0.001514f, -0.001475f, -0.000250f, 0.001476f, 0.000839f, -0.000197f, 0.000448f, -0.000183f, -0.001647f, -0.000754f, -0.001368f, -0.000414f, -0.000025f, -0.000302f, 0.000659f, -0.001355f, -0.001172f, -0.000030f, -0.001421f, -0.001019f, -0.001032f, -0.001086f, 0.001060f, -0.000334f, -0.001497f, -0.000444f, 0.000291f, 0.000438f, -0.000570f, -0.000720f, -0.000420f, -0.001341f, -0.000727f, - -0.010118f, 0.005877f, 0.001985f, 0.001096f, 0.000824f, 0.001033f, 0.000282f, -0.000905f, 0.000129f, -0.000473f, -0.000334f, 0.001945f, 0.000943f, 0.001699f, 0.001427f, 0.001787f, -0.001499f, 0.000852f, 0.001603f, 0.000448f, 0.001379f, -0.001630f, 0.000199f, -0.000285f, -0.000262f, -0.000503f, 0.000505f, -0.000062f, -0.000110f, 0.001758f, -0.001772f, -0.000322f, 0.000489f, 0.001088f, -0.000561f, 0.000937f, -0.000781f, -0.000897f, 0.001146f, -0.000459f, -0.000185f, -0.000177f, 0.000353f, 0.000019f, 0.000460f, -0.000452f, -0.000370f, -0.000391f, -0.000285f, -0.000317f, 0.000826f, 0.000277f, 0.000181f, -0.000399f, -0.000835f, 0.000239f, 0.000841f, 0.000237f, 0.014904f, 0.005981f, 0.001374f, 0.003293f, 0.002737f, 0.000428f, 0.001276f, 0.003112f, 0.001553f, -0.000160f, 0.000780f, 0.000315f, -0.000374f, 0.000833f, 0.002845f, 0.000564f, 0.003378f, 0.001514f, -0.002601f, 0.000428f, 0.000197f, 0.000480f, 0.002523f, 0.001289f, 0.001078f, -0.000287f, -0.000274f, -0.000401f, -0.000305f, 0.000306f, -0.000426f, 0.000737f, 0.000349f, 0.001030f, -0.000116f, -0.000349f, 0.000511f, 0.000831f, - 0.000598f, -0.000162f, -0.001076f, -0.000563f, -0.000548f, 0.000999f, 0.000879f, 0.001137f, 0.000774f, 0.000122f, 0.000286f, 0.000967f, 0.000924f, 0.000619f, 0.000224f, 0.000102f, 0.000627f, 0.000495f, 0.000392f, 0.000788f, 0.016626f, 0.004672f, 0.002144f, 0.002513f, 0.000502f, 0.002426f, -0.000329f, -0.001030f, 0.000023f, 0.000569f, 0.000344f, -0.000149f, 0.000553f, 0.002479f, -0.000297f, -0.001665f, -0.001038f, 0.001166f, 0.000395f, 0.001372f, 0.002362f, 0.001933f, -0.000056f, 0.001267f, -0.001370f, 0.000095f, -0.001046f, 0.001472f, 0.000961f, -0.001794f, 0.001091f, -0.000884f, 0.000203f, -0.000724f, 0.001105f, -0.000698f, 0.001366f, 0.000969f, 0.000911f, 0.001605f, 0.000624f, -0.000086f, -0.000325f, -0.000046f, 0.000306f, 0.001787f, 0.000032f, 0.000001f, 0.000212f, 0.000844f, 0.000674f, 0.000025f, -0.000146f, -0.000309f, -0.000888f, -0.000207f, -0.000662f, -0.000288f, 0.002370f, -0.007128f, -0.002776f, -0.001228f, -0.001527f, -0.000819f, -0.000522f, 0.000022f, 0.001094f, -0.001116f, -0.001820f, 0.001692f, -0.002204f, -0.002269f, -0.000316f, -0.000594f, 0.001079f, -0.000708f, - 0.000036f, -0.002197f, -0.001175f, -0.002633f, -0.002711f, -0.003199f, -0.000348f, 0.000633f, -0.002090f, -0.000676f, 0.000393f, 0.000141f, 0.000177f, -0.000372f, -0.002071f, -0.001432f, 0.001018f, 0.000268f, -0.000420f, 0.001945f, -0.001283f, -0.000708f, 0.000590f, 0.001155f, 0.001102f, -0.000272f, -0.000228f, 0.000396f, 0.000383f, -0.001417f, 0.000202f, -0.000872f, -0.000271f, 0.000006f, -0.000454f, -0.000023f, 0.000982f, 0.000103f, -0.000105f, 0.000130f, -0.000916f, 0.000512f, 0.000898f, -0.000271f, 0.000042f, 0.000021f, -0.000082f, -0.018036f, -0.005625f, -0.003441f, -0.001370f, -0.002487f, -0.001914f, -0.000616f, -0.001355f, -0.000622f, -0.001822f, -0.002555f, -0.001759f, -0.000656f, -0.003683f, -0.000933f, -0.001476f, -0.002299f, -0.000240f, 0.000346f, 0.001250f, -0.001363f, -0.001822f, -0.000730f, 0.001564f, 0.001917f, 0.002441f, 0.001247f, -0.000030f, -0.001229f, -0.000504f, -0.000028f, -0.001429f, 0.000571f, 0.001030f, 0.001213f, -0.000818f, -0.000770f, -0.000646f, -0.000376f, -0.000254f, -0.000553f, 0.001005f, -0.000322f, 0.000664f, -0.001281f, -0.002119f, -0.000943f, -0.000049f, 0.001042f, - -0.001830f, 0.000580f, -0.000861f, 0.000839f, -0.000877f, 0.000486f, -0.000728f, -0.000078f, -0.000462f, -0.000089f, 0.000349f, 0.000650f, -0.000435f, -0.000662f, 0.000011f, -0.000660f, -0.010341f, 0.002760f, 0.000758f, 0.000016f, 0.001803f, -0.001732f, 0.000455f, -0.003992f, -0.001310f, 0.001392f, 0.000973f, 0.002579f, -0.000201f, 0.002812f, -0.001652f, -0.000414f, 0.001332f, -0.002447f, -0.000912f, -0.001441f, 0.002726f, -0.000177f, -0.002287f, 0.001139f, 0.002168f, -0.001948f, -0.001499f, -0.001756f, 0.000488f, -0.000416f, 0.000924f, -0.000679f, -0.000575f, -0.000480f, -0.001082f, 0.001536f, -0.001267f, 0.000288f, 0.000992f, -0.000141f, 0.001149f, -0.000694f, 0.002540f, 0.000369f, -0.000282f, -0.000915f, -0.000916f, 0.000020f, -0.001051f, -0.001272f, -0.000803f, 0.000179f, 0.000850f, -0.000144f, 0.000215f, -0.001115f, -0.001121f, -0.001581f, -0.000647f, -0.000522f, -0.000436f, 0.000417f, 0.000612f, -0.000656f, 0.000073f, 0.008914f, 0.012856f, 0.004397f, 0.004487f, 0.006054f, 0.004435f, -0.000642f, 0.000925f, -0.000499f, 0.000876f, 0.000726f, 0.001179f, 0.000806f, 0.002256f, 0.000823f, - 0.001442f, 0.000414f, 0.004398f, 0.001001f, 0.002199f, 0.001246f, 0.001196f, 0.003401f, 0.000894f, 0.004266f, 0.002297f, -0.000871f, 0.003107f, 0.000788f, 0.001581f, 0.003013f, 0.000713f, 0.001795f, -0.000814f, -0.000310f, 0.000955f, 0.001359f, -0.001733f, 0.001579f, -0.000954f, -0.001996f, -0.001066f, 0.001664f, 0.002602f, 0.001892f, -0.000243f, 0.000618f, 0.000696f, 0.000940f, 0.001431f, 0.000762f, 0.001604f, 0.000907f, -0.001287f, -0.000029f, 0.001166f, 0.001443f, 0.000558f, 0.000477f, 0.000383f, -0.001408f, -0.000447f, -0.000866f, 0.000946f, -0.000058f, 0.030960f, 0.002186f, -0.001423f, 0.002340f, -0.001531f, 0.003349f, 0.001196f, 0.003524f, -0.001662f, 0.000211f, 0.000163f, 0.002066f, -0.003741f, 0.000629f, 0.002648f, -0.000659f, -0.000425f, 0.003088f, 0.005208f, -0.002234f, -0.001022f, 0.000490f, 0.002654f, -0.001240f, 0.001780f, -0.000042f, -0.001474f, -0.001482f, -0.001143f, 0.000950f, 0.001697f, 0.001652f, -0.001116f, 0.001837f, -0.001101f, 0.001782f, 0.001876f, -0.000553f, -0.000969f, 0.000539f, -0.001657f, -0.002692f, 0.000748f, -0.001875f, 0.000901f, 0.000073f, - 0.000461f, 0.000993f, 0.000164f, 0.001230f, 0.000275f, -0.001856f, 0.000885f, -0.000559f, 0.001023f, -0.001381f, -0.000065f, 0.000102f, 0.001077f, -0.000796f, -0.002026f, -0.000471f, -0.000771f, 0.000106f, -0.000574f, -0.010499f, -0.010216f, -0.002303f, 0.000777f, -0.000447f, -0.001556f, -0.001660f, -0.002299f, -0.000608f, 0.001667f, -0.000552f, -0.000598f, -0.002353f, 0.002451f, -0.000151f, -0.002061f, -0.001764f, 0.004262f, -0.003894f, 0.000373f, 0.002832f, -0.000366f, 0.000457f, -0.003779f, 0.001183f, -0.001640f, 0.000882f, -0.002640f, -0.001719f, 0.000392f, 0.000676f, -0.001254f, -0.001382f, 0.000092f, -0.000577f, 0.000148f, -0.001614f, -0.000942f, 0.001649f, -0.000223f, -0.000802f, -0.000514f, 0.002101f, 0.000895f, -0.001229f, -0.001888f, -0.001658f, 0.000508f, -0.000273f, -0.000823f, 0.000157f, 0.000304f, -0.000923f, 0.002472f, 0.001344f, -0.000310f, -0.000218f, -0.000703f, 0.000280f, -0.000784f, -0.000756f, -0.000808f, -0.000171f, -0.001474f, -0.001154f, -0.001963f, 0.000419f, -0.002098f, -0.000100f, -0.000568f, -0.000524f, -0.000162f, -0.004201f, -0.003437f, -0.004322f, -0.002947f, -0.002311f, - -0.001382f, 0.000234f, 0.000055f, -0.001167f, -0.000327f, 0.000911f, 0.003762f, -0.003295f, 0.001703f, -0.001171f, -0.001916f, 0.002482f, -0.000121f, 0.000412f, 0.003495f, 0.000400f, 0.001530f, -0.002229f, -0.000403f, -0.006297f, -0.000605f, 0.001076f, 0.000870f, 0.000439f, 0.000732f, 0.000776f, -0.001271f, -0.001953f, 0.001523f, -0.000258f, 0.001445f, 0.000581f, -0.001531f, 0.001256f, -0.000031f, -0.004489f, -0.003514f, -0.000700f, -0.003320f, 0.000353f, 0.001174f, -0.000326f, -0.000776f, -0.000485f, 0.000257f, -0.001101f, -0.000215f, -0.000290f, -0.000494f, 0.000973f, 0.000385f, 0.000261f, -0.000516f, -0.000535f, 0.001787f, 0.000352f, -0.000998f, 0.001080f, -0.000175f, -0.000875f, -0.001688f, -0.000043f, -0.000878f, -0.000391f, 0.001348f, 0.000921f, 0.001427f, -0.020065f, -0.004566f, 0.000290f, -0.003982f, 0.001604f, 0.000406f, 0.004806f, -0.002245f, 0.000280f, -0.001316f, 0.003219f, -0.006571f, -0.006318f, 0.002667f, -0.003065f, 0.004753f, 0.001712f, -0.003807f, -0.006690f, -0.000146f, -0.001898f, -0.003237f, -0.001336f, 0.000770f, 0.001076f, -0.001560f, 0.005717f, 0.000314f, -0.000575f, - -0.002386f, 0.001943f, 0.002175f, 0.002329f, 0.002517f, -0.000317f, -0.001479f, -0.000568f, 0.001491f, -0.000122f, 0.001798f, -0.001691f, -0.000656f, -0.000585f, 0.002082f, 0.001661f, -0.001811f, 0.002353f, -0.001308f, -0.001648f, 0.000209f, -0.000752f, -0.001555f, 0.001605f, -0.001842f, -0.000250f, 0.000477f, -0.000452f, -0.000747f, 0.000418f, 0.001554f, -0.000964f, 0.001491f, -0.001231f, 0.001003f, -0.000685f, -0.000761f, -0.000484f, 0.000306f, 0.001913f, 0.000354f, 0.001792f, -0.001134f, 0.018393f, 0.016168f, 0.003379f, 0.004326f, -0.000861f, 0.005289f, 0.004234f, 0.005328f, -0.000217f, 0.002147f, 0.001286f, -0.004980f, -0.004224f, 0.002336f, 0.000458f, -0.003560f, -0.003774f, -0.002093f, 0.000249f, 0.002164f, 0.000635f, 0.005072f, 0.004621f, 0.002045f, -0.001058f, -0.001095f, 0.003063f, 0.002886f, 0.000236f, 0.002534f, -0.000800f, 0.003233f, 0.000190f, -0.000657f, 0.004464f, 0.002353f, 0.003664f, 0.002396f, 0.000816f, 0.002601f, 0.001302f, 0.000931f, 0.002386f, -0.001257f, 0.000490f, 0.003196f, -0.000017f, -0.001983f, 0.001888f, 0.001906f, 0.001348f, -0.001377f, -0.000018f, - 0.001887f, 0.002784f, -0.001332f, 0.003363f, 0.003874f, -0.000644f, -0.002014f, 0.000376f, 0.000934f, 0.000615f, 0.001733f, 0.000015f, 0.000658f, 0.001318f, -0.000870f, 0.000118f, -0.001261f, -0.000311f, -0.001721f, -0.000995f, -0.000157f, 0.022348f, 0.001788f, -0.000599f, 0.001545f, 0.001111f, -0.003689f, 0.000991f, 0.000966f, 0.000037f, 0.002349f, 0.003446f, 0.005074f, -0.002241f, -0.002335f, -0.003570f, -0.002944f, 0.003328f, -0.000284f, 0.004790f, -0.001169f, -0.001118f, 0.001936f, 0.004167f, 0.001618f, -0.004114f, 0.003261f, -0.001176f, 0.002604f, -0.001334f, 0.002016f, -0.002463f, 0.001511f, -0.000164f, 0.002371f, 0.000328f, 0.001342f, 0.000772f, -0.004232f, -0.002277f, -0.000415f, -0.000814f, -0.000418f, -0.001275f, 0.002007f, 0.000809f, 0.004315f, -0.000634f, -0.002992f, -0.001693f, -0.000321f, 0.000297f, -0.003325f, 0.001151f, -0.001146f, -0.000110f, -0.000343f, -0.001892f, 0.001734f, 0.003395f, -0.001080f, 0.001765f, 0.000378f, -0.001849f, -0.000202f, -0.001758f, -0.001518f, 0.000337f, -0.002653f, -0.001833f, 0.001075f, -0.000099f, 0.000566f, 0.001840f, -0.002513f, 0.003004f, - 0.000318f, -0.001230f, -0.002986f, 0.000865f, -0.001091f, 0.006436f, -0.001530f, -0.006161f, -0.004151f, -0.005555f, 0.005139f, -0.004106f, 0.001146f, 0.006260f, -0.000268f, -0.006368f, 0.000445f, -0.006684f, 0.005572f, -0.001943f, 0.005554f, 0.000032f, -0.002102f, 0.004766f, 0.000187f, 0.000989f, -0.003579f, -0.004534f, -0.000720f, 0.001595f, 0.000984f, -0.000885f, -0.002082f, 0.002110f, -0.000637f, 0.001577f, 0.002433f, 0.002946f, 0.001371f, 0.001631f, -0.005964f, 0.000501f, -0.001346f, -0.002039f, 0.000827f, 0.002964f, -0.002486f, -0.004584f, -0.002017f, 0.001348f, 0.000531f, -0.004027f, -0.001635f, 0.001884f, 0.002758f, -0.002419f, -0.001569f, -0.001860f, 0.002822f, 0.003740f, 0.000763f, -0.001253f, 0.000432f, 0.002681f, -0.001275f, -0.000101f, -0.001751f, 0.001882f, -0.002193f, -0.000253f, 0.002619f, 0.001568f, -0.000753f, -0.000392f, -0.000057f, -0.000836f, -0.022501f, -0.022823f, -0.003685f, -0.011196f, -0.006928f, -0.003984f, -0.006195f, -0.000771f, 0.004691f, -0.010243f, 0.003744f, -0.002111f, 0.003416f, 0.000571f, 0.002096f, -0.004260f, 0.001083f, -0.000552f, -0.002207f, -0.009400f, - -0.001907f, -0.004899f, -0.005960f, -0.000645f, 0.001510f, 0.000294f, -0.002026f, 0.001275f, -0.001923f, -0.000595f, 0.004983f, -0.000131f, -0.001658f, 0.000284f, 0.003260f, 0.004353f, 0.002936f, -0.000025f, 0.002344f, 0.002681f, -0.000265f, -0.000003f, -0.004872f, 0.001761f, -0.004027f, 0.000724f, 0.003882f, -0.002705f, -0.004877f, 0.001378f, -0.002737f, -0.002647f, 0.000538f, -0.000072f, -0.002313f, 0.001089f, -0.000551f, 0.005221f, 0.002948f, 0.001573f, 0.000647f, 0.001892f, -0.000195f, 0.000545f, -0.002075f, -0.003762f, -0.000619f, 0.000284f, -0.002665f, -0.001884f, -0.001465f, -0.001284f, -0.001512f, 0.000793f, -0.000779f, -0.000268f, -0.001677f, -0.013398f, 0.024884f, 0.019499f, 0.001239f, 0.003955f, 0.001601f, 0.004314f, 0.006626f, 0.001497f, 0.006438f, 0.001143f, -0.006725f, 0.004481f, 0.005435f, 0.001593f, 0.001647f, 0.004034f, 0.005358f, -0.005341f, 0.004476f, -0.002823f, 0.003937f, 0.000575f, -0.003198f, 0.000616f, 0.004451f, 0.002494f, -0.005201f, 0.002529f, -0.002099f, 0.007607f, -0.000588f, 0.001768f, -0.001119f, -0.004929f, 0.005014f, 0.004913f, 0.002411f, 0.001242f, - -0.000158f, 0.001759f, 0.005322f, 0.001208f, 0.003826f, 0.000457f, 0.002682f, 0.001410f, -0.000277f, 0.002831f, -0.003368f, -0.005366f, -0.002278f, -0.004096f, -0.003382f, -0.001786f, -0.003474f, 0.004768f, 0.003480f, 0.000402f, -0.000772f, -0.001718f, -0.000477f, -0.000137f, 0.000123f, 0.000224f, 0.000754f, 0.000989f, 0.000642f, -0.000110f, -0.001171f, -0.001084f, -0.000087f, -0.000109f, -0.000365f, 0.000531f, -0.000459f, 0.002877f, -0.000553f, 0.003782f, 0.033419f, -0.013149f, -0.006961f, 0.001105f, 0.000038f, -0.001752f, -0.009136f, -0.004053f, 0.002477f, -0.000550f, -0.001208f, -0.001910f, 0.001542f, -0.007704f, -0.002053f, 0.003854f, 0.007529f, 0.003943f, 0.003445f, -0.002470f, -0.002128f, -0.004476f, 0.005233f, -0.007304f, -0.001135f, 0.001691f, -0.004626f, 0.001463f, 0.002167f, 0.005710f, -0.008749f, -0.000841f, -0.000032f, -0.001929f, 0.002483f, -0.008310f, -0.004162f, 0.008954f, 0.006081f, 0.001148f, -0.001426f, 0.005311f, -0.001456f, -0.000792f, 0.001135f, 0.004134f, 0.002563f, -0.002705f, 0.000684f, -0.001618f, 0.003592f, -0.005630f, -0.002366f, -0.003446f, -0.003398f, 0.006685f, - 0.001989f, 0.000750f, -0.002862f, -0.000342f, -0.000884f, -0.001287f, -0.003006f, 0.000414f, -0.002843f, -0.000218f, 0.001156f, 0.002520f, -0.004381f, -0.003217f, -0.003857f, -0.001308f, 0.002284f, 0.000289f, 0.002990f, -0.000474f, -0.003575f, -0.000483f, -0.001541f, 0.001636f, -0.000033f, 0.009935f, 0.022752f, 0.003781f, 0.008659f, 0.007896f, 0.007502f, 0.002558f, 0.005600f, 0.003511f, -0.001668f, -0.004585f, -0.002971f, -0.001294f, 0.006420f, -0.005471f, -0.006137f, -0.000376f, -0.000309f, -0.002455f, -0.004704f, 0.013858f, 0.012947f, 0.009811f, 0.000452f, -0.005530f, 0.000962f, 0.000971f, -0.002806f, 0.003225f, 0.002011f, 0.005620f, 0.000625f, 0.002322f, -0.000289f, -0.003790f, 0.006295f, 0.005284f, 0.003755f, -0.000857f, -0.005030f, 0.000355f, -0.000405f, -0.001351f, -0.010251f, 0.007420f, -0.004681f, 0.008550f, 0.000466f, 0.004646f, -0.000994f, 0.005119f, 0.007684f, 0.001587f, -0.003502f, -0.000211f, 0.001396f, -0.002492f, 0.001338f, -0.000938f, -0.003287f, -0.001743f, 0.001055f, -0.000747f, 0.003212f, 0.001191f, -0.005480f, 0.000395f, -0.000767f, -0.005831f, -0.001400f, 0.001246f, - -0.002255f, 0.000694f, 0.004972f, 0.002098f, -0.000308f, -0.001679f, -0.001343f, 0.000155f, 0.002159f, -0.000552f, 0.002391f, -0.023949f, -0.003160f, -0.014936f, 0.000185f, 0.002606f, -0.005048f, -0.008744f, -0.010074f, -0.009588f, -0.005648f, -0.007824f, -0.001898f, -0.000553f, -0.002002f, 0.002482f, -0.001542f, 0.000484f, 0.006137f, 0.002725f, -0.000593f, 0.014463f, -0.003169f, 0.002876f, -0.002107f, 0.001189f, 0.002115f, 0.000744f, -0.000803f, 0.002101f, 0.006795f, 0.002014f, 0.002412f, 0.000732f, 0.002724f, 0.005701f, 0.007906f, 0.002453f, 0.009591f, -0.002595f, -0.008253f, 0.008314f, -0.002639f, -0.001787f, -0.001676f, 0.004687f, 0.007327f, 0.005486f, -0.000136f, -0.001934f, -0.004185f, -0.010714f, 0.006584f, 0.007442f, 0.005295f, -0.006413f, 0.003864f, 0.000962f, -0.000640f, 0.006018f, 0.001026f, 0.004030f, -0.003380f, 0.001947f, -0.004214f, -0.000443f, 0.003657f, -0.001104f, 0.002750f, -0.000619f, -0.001540f, -0.001544f, -0.005135f, 0.000478f, 0.000383f, -0.000083f, 0.000985f, -0.001179f, -0.006337f, 0.000440f, 0.000328f, -0.041941f, -0.018736f, 0.008461f, -0.001572f, -0.001498f, - 0.001551f, -0.005310f, -0.004546f, -0.001640f, -0.002019f, -0.007398f, 0.005236f, 0.000501f, 0.011005f, -0.006185f, -0.005197f, -0.009020f, -0.004953f, -0.009287f, 0.000808f, 0.003306f, -0.013710f, 0.008808f, 0.007696f, -0.001165f, 0.001580f, 0.005714f, 0.000913f, 0.005019f, -0.010376f, -0.010571f, -0.005770f, -0.006958f, -0.005247f, 0.016940f, 0.005602f, -0.003821f, -0.006051f, -0.008786f, 0.004186f, 0.002266f, -0.004080f, 0.003322f, 0.003410f, -0.006220f, 0.000629f, 0.001297f, 0.004893f, -0.005782f, 0.014065f, -0.006214f, -0.004842f, 0.002111f, -0.001458f, -0.000154f, -0.004169f, -0.001670f, 0.000487f, 0.008825f, -0.002715f, 0.012751f, 0.002785f, 0.000758f, 0.001482f, 0.003348f, -0.003801f, -0.001464f, -0.005014f, -0.004171f, -0.003832f, -0.000096f, 0.006961f, -0.004584f, -0.003261f, -0.001985f, -0.002535f, -0.002487f, -0.000247f, -0.001672f, -0.002336f, -0.002177f, 0.006619f, 0.021172f, 0.010894f, 0.006759f, 0.004600f, -0.007446f, 0.000766f, -0.006021f, 0.009430f, -0.001014f, -0.001234f, 0.003211f, 0.002094f, 0.002200f, -0.000258f, 0.003332f, 0.001226f, 0.003519f, -0.002862f, 0.009219f, - 0.001274f, -0.000817f, 0.027629f, 0.001525f, -0.002069f, -0.007040f, 0.004150f, -0.006545f, 0.006203f, 0.014891f, -0.001119f, 0.003669f, 0.003714f, -0.007622f, -0.008507f, 0.000288f, 0.000236f, 0.006563f, -0.004176f, 0.000270f, -0.000393f, 0.004847f, 0.005018f, 0.008316f, 0.003177f, 0.002910f, 0.003497f, 0.000389f, 0.005531f, 0.002587f, -0.009981f, 0.002196f, -0.005107f, -0.012860f, -0.001039f, 0.003678f, 0.000148f, 0.001130f, -0.001631f, 0.000303f, -0.000328f, -0.000012f, 0.001714f, 0.000341f, 0.005972f, -0.003462f, -0.000454f, 0.001208f, 0.001333f, 0.000237f, -0.002159f, 0.004135f, 0.007013f, 0.006842f, 0.001526f, -0.001359f, -0.000584f, 0.002488f, -0.000209f, -0.000770f, -0.000024f, 0.001417f, 0.003311f, -0.000472f, -0.001109f, -0.002193f, -0.001286f, 0.031256f, -0.009270f, -0.003203f, -0.008638f, 0.015845f, 0.005526f, 0.001516f, 0.002944f, -0.002055f, -0.003870f, 0.005727f, 0.000287f, -0.005189f, 0.001182f, -0.006915f, -0.005630f, 0.000588f, -0.007460f, 0.001219f, 0.002147f, -0.005115f, -0.009627f, 0.001134f, 0.000292f, 0.006611f, 0.010250f, 0.007534f, -0.005117f, 0.000167f, - 0.006288f, 0.012113f, -0.012636f, 0.004937f, -0.002539f, 0.000043f, -0.005876f, -0.007721f, 0.000475f, 0.007407f, 0.001899f, 0.003457f, 0.004319f, -0.000241f, 0.002820f, -0.000460f, 0.001962f, 0.004850f, -0.008491f, -0.005553f, 0.012699f, -0.000766f, -0.000594f, -0.002658f, 0.004958f, 0.016953f, 0.003988f, 0.002780f, 0.005226f, -0.004129f, -0.005149f, 0.000269f, -0.003890f, -0.009295f, 0.005972f, 0.001061f, -0.004951f, 0.002899f, 0.001254f, -0.002435f, -0.004671f, 0.006363f, -0.002274f, -0.006985f, 0.003221f, 0.003648f, 0.004963f, -0.004781f, 0.000297f, 0.002502f, -0.001059f, -0.001647f, 0.007531f, -0.000329f, 0.001251f, -0.003131f, -0.000614f, 0.000198f, 0.026628f, 0.024975f, -0.008036f, 0.006723f, 0.002206f, 0.005199f, 0.013610f, -0.001778f, -0.006886f, -0.002580f, 0.026164f, -0.014733f, -0.002630f, -0.007354f, -0.005653f, -0.011953f, 0.013169f, -0.003855f, -0.017524f, -0.013279f, -0.015972f, -0.006282f, 0.014461f, -0.001787f, 0.006919f, -0.002609f, -0.007124f, 0.006293f, 0.002062f, 0.007993f, -0.007589f, 0.007108f, 0.005896f, 0.002879f, 0.003510f, -0.012770f, 0.003861f, -0.010666f, - 0.009178f, 0.018934f, 0.005706f, 0.005661f, -0.011868f, 0.016956f, 0.004760f, -0.001804f, -0.002416f, -0.003480f, 0.005543f, 0.008470f, 0.002288f, -0.002003f, -0.000271f, 0.002278f, -0.003884f, -0.002957f, -0.003726f, -0.003072f, -0.000092f, 0.006211f, -0.003936f, 0.009292f, 0.003583f, 0.005684f, -0.001695f, -0.013344f, -0.008705f, 0.003395f, 0.001146f, -0.003982f, 0.005217f, -0.000250f, -0.000214f, 0.002685f, -0.001631f, 0.003910f, -0.000419f, -0.000448f, 0.002149f, -0.002300f, -0.000154f, -0.002486f, -0.001255f, -0.003119f, 0.002302f, 0.000170f, 0.000917f, -0.024712f, -0.015086f, 0.003785f, 0.001720f, 0.000062f, -0.011201f, 0.006691f, 0.003420f, -0.006424f, -0.018185f, 0.014807f, 0.003326f, 0.005604f, 0.008009f, 0.005042f, -0.002629f, 0.002829f, -0.004801f, 0.012303f, -0.010407f, -0.017374f, -0.000867f, -0.000747f, -0.008597f, -0.018908f, 0.000300f, -0.003802f, -0.010302f, -0.005414f, -0.003437f, 0.004349f, 0.000407f, 0.007074f, 0.013685f, -0.005878f, -0.011884f, 0.003711f, -0.001677f, 0.000200f, 0.005408f, -0.008147f, -0.007818f, -0.000965f, 0.006430f, -0.008828f, 0.007044f, -0.002515f, - 0.013892f, -0.001995f, -0.004802f, -0.001643f, -0.000269f, 0.002875f, -0.016626f, 0.002374f, -0.014437f, 0.014424f, -0.000299f, 0.009055f, 0.005022f, -0.005507f, -0.001085f, -0.007308f, 0.003210f, -0.000796f, 0.002465f, 0.002689f, -0.010074f, -0.001488f, -0.009736f, -0.004146f, 0.003782f, -0.002863f, -0.006131f, 0.002715f, -0.000481f, -0.009723f, -0.005180f, 0.000994f, -0.000071f, -0.004044f, 0.003822f, -0.002220f, -0.002897f, 0.002011f, -0.006244f, 0.002987f, -0.034937f, -0.015514f, -0.006217f, -0.003464f, -0.001472f, 0.004012f, -0.012417f, -0.008237f, 0.002779f, -0.009691f, 0.002776f, -0.010808f, -0.003900f, -0.010437f, -0.013474f, 0.014223f, 0.005341f, 0.002470f, -0.001224f, -0.011029f, -0.019748f, 0.010049f, -0.025775f, 0.009596f, -0.000015f, -0.007744f, 0.000945f, -0.004654f, 0.001551f, 0.018074f, -0.009290f, -0.000553f, -0.019463f, 0.015393f, -0.004821f, 0.007222f, -0.007108f, -0.001851f, -0.001942f, -0.000326f, 0.008491f, 0.003447f, 0.018107f, 0.022625f, -0.002724f, 0.000721f, -0.007743f, 0.001216f, -0.003254f, 0.003865f, 0.006695f, 0.001273f, 0.015701f, 0.004953f, -0.006371f, 0.002969f, - 0.002950f, 0.000494f, -0.001520f, 0.000904f, 0.011846f, -0.008724f, -0.018788f, -0.007153f, -0.000111f, 0.004746f, 0.002813f, 0.009658f, -0.001315f, 0.004359f, -0.005047f, -0.006995f, -0.010636f, -0.007784f, 0.000313f, -0.002217f, 0.004615f, 0.001737f, -0.003208f, -0.000876f, 0.008439f, 0.000271f, 0.004517f, -0.001702f, 0.001295f, -0.001729f, -0.002412f, -0.003283f, 0.043903f, 0.019745f, 0.013478f, 0.005734f, -0.005106f, -0.007898f, -0.013827f, 0.007722f, 0.013073f, 0.005546f, -0.006254f, 0.015646f, 0.008658f, 0.015644f, 0.000968f, -0.011128f, -0.004449f, 0.023438f, -0.024435f, -0.004890f, 0.016017f, -0.009424f, -0.005432f, 0.037787f, -0.004807f, 0.010886f, 0.034078f, -0.005362f, -0.002325f, -0.000878f, 0.004169f, -0.001772f, 0.014735f, 0.009649f, 0.012133f, -0.008515f, -0.020250f, 0.008192f, -0.008032f, 0.009821f, -0.003851f, 0.003650f, 0.014314f, 0.008463f, 0.000776f, 0.006460f, 0.002851f, 0.006227f, 0.013840f, 0.007975f, -0.001545f, 0.013657f, 0.005606f, 0.002069f, 0.003156f, 0.025041f, 0.014878f, 0.000175f, 0.013512f, -0.005839f, 0.017098f, -0.004126f, 0.003728f, -0.004720f, - 0.002001f, 0.009982f, -0.005503f, -0.000238f, -0.001022f, 0.003569f, 0.000333f, -0.006280f, 0.000212f, -0.005354f, -0.009904f, 0.001816f, -0.013168f, 0.005269f, 0.008008f, -0.003125f, -0.005660f, -0.003604f, 0.007012f, 0.002259f, 0.000341f, -0.002772f, 0.056917f, 0.025537f, -0.011372f, 0.004836f, 0.029473f, 0.000566f, 0.021322f, -0.006350f, 0.008515f, 0.017542f, -0.013175f, 0.001487f, 0.030960f, 0.027568f, 0.022674f, 0.007843f, 0.019493f, 0.003141f, 0.017107f, 0.005803f, 0.005274f, -0.010725f, -0.012318f, -0.017833f, -0.034965f, 0.011076f, 0.000557f, -0.009643f, -0.003217f, 0.012035f, -0.007836f, -0.001318f, 0.001515f, 0.006720f, -0.030961f, -0.005140f, 0.022719f, 0.017274f, -0.006134f, 0.011378f, 0.009955f, 0.006255f, -0.003664f, -0.007334f, -0.002991f, -0.004967f, -0.002999f, -0.011592f, -0.009612f, 0.007866f, -0.019229f, 0.006316f, 0.016055f, -0.004813f, -0.011192f, -0.017774f, 0.016738f, -0.000613f, -0.008220f, -0.005568f, -0.003668f, -0.006159f, 0.003650f, -0.002892f, -0.006007f, 0.006210f, 0.025974f, -0.012990f, -0.007600f, 0.003210f, -0.004856f, 0.005874f, 0.000398f, 0.013227f, - 0.002734f, -0.001377f, -0.000952f, -0.013907f, -0.006362f, -0.002228f, 0.001343f, 0.000989f, 0.005113f, 0.002981f, 0.000742f, 0.002147f, 0.002739f, 0.008082f, 0.000842f, 0.000152f, -0.005127f, 0.001741f, -0.022542f, -0.006151f, -0.027072f, -0.005754f, -0.027053f, 0.013070f, -0.025778f, 0.013934f, -0.004551f, -0.014747f, -0.004596f, -0.006837f, 0.031312f, 0.004999f, -0.022976f, 0.000570f, -0.015034f, -0.011648f, 0.015383f, -0.017327f, -0.016237f, -0.018089f, 0.027314f, -0.003546f, 0.018005f, -0.027729f, -0.014942f, 0.011242f, -0.013070f, 0.010733f, 0.030254f, 0.020079f, 0.018696f, 0.003376f, -0.003286f, -0.014558f, -0.020998f, -0.000952f, 0.004597f, -0.019227f, 0.000369f, -0.011257f, 0.005561f, 0.008746f, -0.022243f, -0.018669f, -0.034826f, -0.005253f, 0.002355f, -0.014764f, -0.021546f, 0.021389f, 0.001053f, 0.021968f, 0.021337f, -0.002425f, -0.003042f, -0.008474f, 0.012306f, 0.010882f, 0.001527f, 0.005487f, -0.001757f, -0.000878f, 0.010417f, -0.002531f, -0.012207f, -0.009154f, -0.015365f, -0.012679f, -0.004766f, -0.000366f, -0.002101f, -0.019191f, -0.011251f, 0.006566f, 0.001491f, -0.006668f, - 0.008386f, -0.001456f, 0.000459f, 0.013389f, 0.010887f, 0.007246f, 0.002808f, 0.008673f, 0.001288f, 0.000488f, 0.003942f, 0.003035f, -0.037991f, -0.006940f, 0.003707f, -0.003871f, 0.000388f, 0.010041f, -0.008156f, 0.008892f, 0.009066f, -0.006385f, 0.012155f, -0.016764f, 0.020925f, 0.013791f, 0.001036f, -0.015468f, 0.001550f, 0.009715f, -0.044448f, 0.008954f, 0.018593f, -0.032406f, 0.013530f, -0.016756f, -0.023194f, -0.021781f, 0.011225f, -0.005698f, -0.033101f, 0.017632f, 0.009947f, -0.020581f, -0.033494f, 0.006507f, 0.004322f, -0.010990f, -0.002127f, -0.017722f, 0.016675f, 0.013156f, 0.024110f, -0.019371f, 0.003433f, -0.025616f, -0.009228f, 0.004019f, -0.015835f, 0.006382f, -0.001672f, -0.013032f, -0.018742f, -0.020963f, 0.030495f, -0.020673f, -0.009278f, -0.007996f, 0.001601f, 0.013510f, 0.008553f, 0.009760f, 0.000442f, 0.011478f, -0.003641f, 0.001544f, -0.004679f, -0.012849f, 0.002806f, 0.026427f, 0.004494f, 0.000268f, 0.000237f, -0.017599f, 0.011563f, 0.017663f, 0.019143f, 0.003405f, 0.001744f, -0.001176f, -0.001157f, 0.002364f, 0.000715f, -0.008937f, 0.000158f, 0.001370f, - 0.001609f, -0.000229f, 0.000524f, 0.006289f, -0.001956f, 0.000489f, -0.001327f, -0.000010f, 0.011944f, -0.025428f, -0.013543f, -0.026851f, 0.007633f, -0.004749f, 0.010650f, -0.007298f, 0.005038f, 0.008825f, -0.009013f, -0.015317f, 0.022883f, -0.005979f, -0.010222f, 0.026633f, -0.005490f, -0.006169f, 0.030394f, -0.017558f, 0.004464f, 0.007477f, 0.002360f, -0.026778f, 0.000079f, -0.003876f, -0.016127f, 0.009252f, -0.012671f, 0.017097f, -0.003012f, 0.019027f, -0.020786f, 0.012960f, -0.036798f, 0.000449f, -0.020080f, 0.022446f, -0.003458f, 0.003107f, -0.003862f, -0.020373f, -0.001487f, 0.017838f, 0.046950f, 0.003514f, 0.002950f, 0.010026f, 0.016046f, -0.002673f, -0.004524f, 0.001519f, -0.000807f, 0.041346f, -0.003744f, 0.006415f, 0.016580f, -0.016038f, -0.027509f, 0.000143f, -0.029072f, -0.003512f, -0.014926f, -0.010648f, -0.005833f, -0.012215f, 0.006907f, 0.010293f, -0.016932f, 0.021433f, 0.017757f, -0.002478f, -0.004397f, -0.017400f, 0.012198f, 0.004392f, 0.011571f, -0.009725f, 0.004786f, -0.001839f, 0.008753f, 0.001073f, 0.008469f, -0.004240f, 0.006212f, -0.000982f, 0.000156f, 0.002134f, - 0.009607f, 0.004670f, 0.002946f, -0.003091f, 0.000250f, 0.000951f, 0.044314f, 0.048143f, 0.000407f, -0.014868f, -0.011826f, 0.040307f, -0.026501f, -0.030345f, 0.031527f, -0.028671f, 0.018434f, 0.005511f, 0.025511f, 0.023396f, 0.015893f, 0.002458f, -0.016028f, -0.013958f, 0.033093f, -0.014138f, -0.001401f, 0.007970f, 0.028193f, 0.040680f, -0.001226f, 0.027758f, -0.022798f, -0.023926f, 0.002705f, -0.008905f, 0.013172f, 0.008237f, -0.020332f, 0.002668f, 0.012944f, 0.033431f, 0.011451f, 0.013636f, 0.012624f, 0.014891f, 0.003876f, -0.001291f, 0.021296f, 0.003632f, 0.017033f, 0.027146f, 0.005701f, -0.011328f, -0.009510f, 0.024456f, 0.006450f, 0.050289f, 0.011778f, 0.019749f, -0.020550f, -0.032446f, -0.003101f, -0.037865f, -0.024179f, -0.008728f, -0.012901f, 0.001296f, -0.001916f, 0.000179f, 0.000526f, -0.028350f, -0.023368f, -0.012469f, -0.024131f, 0.008697f, 0.009595f, -0.007430f, -0.001867f, -0.022526f, -0.003514f, 0.006479f, -0.006378f, -0.002050f, 0.002293f, -0.014266f, 0.005913f, -0.004473f, 0.001693f, 0.002380f, 0.000086f, 0.000839f, 0.003072f, -0.003506f, 0.000531f, 0.003161f, - -0.000127f, 0.000656f, 0.000958f, -0.021049f, -0.074011f, -0.030558f, -0.060400f, -0.013558f, -0.021114f, -0.008540f, 0.005511f, -0.019813f, -0.023982f, -0.038366f, -0.030493f, 0.027259f, -0.004844f, -0.024409f, -0.025928f, 0.005871f, -0.034505f, -0.048697f, 0.008047f, -0.011337f, -0.010427f, -0.010467f, 0.009378f, -0.029024f, 0.030558f, -0.017759f, 0.020760f, -0.014447f, -0.013858f, 0.000338f, 0.016772f, -0.023665f, -0.022591f, 0.012137f, -0.004260f, 0.033434f, -0.014631f, 0.019165f, 0.028836f, 0.013706f, -0.010477f, -0.004783f, -0.002989f, 0.023649f, -0.008272f, 0.015882f, 0.031926f, -0.026792f, -0.046736f, -0.018402f, 0.015888f, 0.019470f, -0.022037f, 0.036317f, -0.011659f, -0.013109f, -0.004357f, -0.003960f, -0.011213f, -0.029378f, -0.012396f, -0.030354f, -0.029055f, -0.018001f, 0.021498f, 0.005089f, -0.005130f, 0.001988f, 0.033225f, 0.031204f, 0.002242f, -0.014392f, 0.005985f, -0.003233f, 0.013707f, 0.004324f, -0.005912f, -0.013698f, -0.001190f, -0.002712f, -0.021764f, -0.005600f, 0.008350f, 0.022686f, -0.010079f, 0.000076f, 0.008688f, -0.012663f, -0.000348f, -0.000824f, 0.000437f, -0.006566f, - 0.008540f, 0.000569f, 0.002267f, -0.000988f, 0.001342f} -}; -#endif /* Sample Rate = 32000 */ const int16_t CRendBin_Combined_BRIR_max_num_iterations_32kHz = 22; @@ -4016,1962 +228,8 @@ const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHAN const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][22]={{{115, 117, 117, 120, 112, 118, 121, 130, 126, 130, 136, 127, 133, 135, 132, 133, 129, 137, 134, 129, 128, 160},{115, 117, 117, 120, 112, 118, 121, 130, 126, 130, 136, 127, 133, 135, 132, 133, 129, 137, 134, 129, 128, 160}},{{121, 106, 119, 113, 120, 123, 114, 126, 123, 125, 127, 128, 127, 134, 132, 130, 129, 139, 133, 131, 128, 160},{121, 106, 119, 113, 120, 123, 114, 126, 123, 125, 127, 128, 127, 134, 132, 130, 129, 139, 133, 131, 128, 160}},{{113, 103, 116, 104, 123, 123, 122, 124, 130, 128, 132, 131, 131, 132, 130, 132, 130, 135, 137, 128, 128, 160},{113, 103, 116, 104, 123, 123, 122, 124, 130, 128, 132, 131, 131, 132, 130, 132, 130, 135, 137, 128, 128, 160}},{{102, 116, 116, 121, 116, 114, 115, 121, 125, 123, 124, 130, 132, 122, 127, 131, 131, 135, 133, 124, 125, 160},{102, 116, 116, 121, 116, 114, 115, 121, 125, 123, 124, 130, 132, 122, 127, 131, 131, 135, 133, 124, 125, 160}},{{115, 115, 115, 119, 121, 119, 125, 127, 123, 129, 122, 126, 128, 134, 130, 130, 131, 140, 146, 127, 131, 160},{115, 115, 115, 119, 121, 119, 125, 127, 123, 129, 122, 126, 128, 134, 130, 130, 131, 140, 146, 127, 131, 160}},{{112, 106, 118, 121, 115, 117, 129, 123, 128, 126, 130, 130, 131, 131, 130, 134, 133, 149, 130, 132, 126, 160},{112, 106, 118, 121, 115, 117, 129, 123, 128, 126, 130, 130, 131, 131, 130, 134, 133, 149, 130, 132, 126, 160}},{{107, 112, 110, 119, 114, 124, 121, 121, 132, 122, 131, 134, 124, 133, 130, 129, 134, 134, 135, 127, 120, 160},{107, 112, 110, 119, 114, 124, 121, 121, 132, 122, 131, 134, 124, 133, 130, 129, 134, 134, 135, 127, 120, 160}},{{110, 113, 123, 113, 121, 120, 120, 126, 131, 123, 128, 128, 132, 130, 132, 136, 133, 136, 135, 128, 124, 160},{110, 113, 123, 113, 121, 120, 120, 126, 131, 123, 128, 128, 132, 130, 132, 136, 133, 136, 135, 128, 124, 160}},{{114, 101, 113, 113, 124, 126, 123, 128, 122, 127, 132, 127, 136, 128, 128, 127, 132, 132, 129, 125, 120, 160},{114, 101, 113, 113, 124, 126, 123, 128, 122, 127, 132, 127, 136, 128, 128, 127, 132, 132, 129, 125, 120, 160}},{{99, 100, 111, 117, 114, 114, 118, 116, 121, 124, 124, 121, 125, 130, 127, 132, 132, 130, 133, 128, 131, 160},{99, 100, 111, 117, 114, 114, 118, 116, 121, 124, 124, 121, 125, 130, 127, 132, 132, 130, 133, 128, 131, 160}},{{105, 93, 103, 108, 119, 110, 111, 114, 120, 121, 119, 122, 130, 128, 130, 131, 132, 131, 136, 128, 128, 160},{105, 93, 103, 108, 119, 110, 111, 114, 120, 121, 119, 122, 130, 128, 130, 131, 132, 131, 136, 128, 128, 160}},{{105, 100, 112, 114, 115, 108, 117, 120, 123, 117, 122, 129, 124, 128, 124, 132, 135, 131, 139, 153, 116, 160},{105, 100, 112, 114, 115, 108, 117, 120, 123, 117, 122, 129, 124, 128, 124, 132, 135, 131, 139, 153, 116, 160}},{{110, 106, 113, 110, 122, 116, 119, 125, 123, 128, 125, 127, 128, 127, 133, 130, 132, 132, 143, 155, 127, 160},{110, 106, 113, 110, 122, 116, 119, 125, 123, 128, 125, 127, 128, 127, 133, 130, 132, 132, 143, 155, 127, 160}},{{102, 107, 110, 112, 115, 117, 117, 115, 120, 118, 127, 130, 130, 129, 126, 126, 125, 130, 141, 135, 127, 160},{102, 107, 110, 112, 115, 117, 117, 115, 120, 118, 127, 130, 130, 129, 126, 126, 125, 130, 141, 135, 127, 160}},{{110, 117, 106, 118, 118, 116, 121, 124, 128, 125, 122, 122, 126, 131, 124, 130, 133, 131, 139, 134, 131, 160},{110, 117, 106, 118, 118, 116, 121, 124, 128, 125, 122, 122, 126, 131, 124, 130, 133, 131, 139, 134, 131, 160}}}; const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz = 97; const float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]={0.224190f, 0.227445f, 0.241827f, 0.207131f, 0.218113f, 0.222941f, 0.232139f, 0.248192f, 0.249239f, 0.261572f, 0.246309f, 0.279145f, 0.285786f, 0.262528f, 0.271847f}; -#ifdef IVAS_FLOAT_FIXED const Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz_fx[15]={7346, 7452, 7924, 6787, 7147, 7305, 7606, 8132, 8167, 8571, 8071, 9147, 9364, 8602, 8907,}; -#endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]={{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97},{47, 47, 47, 47, 47, 47, 50, 50, 56, 56, 56, 63, 63, 63, 63, 63, 72, 72, 72, 74, 74, 77, 77, 79, 81, 81, 81, 81, 87, 87, 87, 87, 87, 87, 93, 93, 93, 93, 93, 97}}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]={ - { - {-0.009097f, 0.009352f, -0.003456f, 0.000006f, 0.008745f, -0.004992f, 0.003412f, -0.000642f, 0.001223f, -0.005946f, -0.012435f, -0.002568f, 0.004887f, -0.003199f, 0.002973f, 0.004305f, 0.003661f, -0.002738f, 0.002074f, -0.007701f, -0.001411f, 0.001920f, 0.003183f, -0.000267f, -0.000175f, 0.000950f, 0.001899f, -0.006450f, -0.005352f, 0.002251f, 0.004456f, -0.002233f, 0.004665f, 0.008899f, -0.011970f, 0.001696f, -0.005728f, -0.003886f, 0.002671f, -0.001493f, 0.007354f, -0.002285f, 0.006623f, 0.003476f, 0.001083f, -0.000478f, 0.003540f, 0.000208f, -0.000724f, -0.003736f, 0.010735f, -0.007457f, -0.002261f, 0.003771f, 0.004169f, -0.000190f, -0.003631f, 0.002061f, -0.004016f, 0.004162f, 0.000801f, 0.001514f, -0.000085f, -0.001427f, -0.001326f, 0.005561f, -0.014330f, 0.003361f, -0.001844f, -0.008319f, -0.001409f, 0.007005f, 0.003391f, 0.004349f, -0.006273f, 0.005044f, -0.002184f, 0.003171f, 0.001934f, 0.002467f, -0.002649f, 0.001045f, 0.003774f, -0.002504f, -0.005599f, 0.002282f, -0.005197f, 0.001002f, 0.003817f, -0.000006f, -0.001878f, -0.002174f, 0.001025f, 0.002039f, -0.000843f, 0.002450f, - 0.000116f, 0.001753f, 0.001513f, -0.000691f, -0.000354f, 0.000662f, -0.000808f, -0.000500f, -0.000626f, 0.000674f, -0.001121f, 0.000551f, -0.001643f, -0.000420f, -0.001540f, -0.000233f, -0.000483f, -0.001761f, -0.000375f, -0.016686f, 0.012962f, -0.006248f, 0.002887f, 0.002407f, 0.000392f, -0.003586f, -0.000290f, -0.009385f, -0.011673f, 0.003177f, -0.002238f, 0.003631f, 0.003683f, 0.010504f, -0.008595f, 0.001243f, 0.007167f, 0.006916f, -0.006970f, -0.007462f, -0.003932f, -0.006482f, 0.000619f, -0.002179f, -0.005008f, -0.003892f, 0.000057f, -0.011819f, -0.011237f, -0.002395f, 0.002281f, -0.001037f, 0.000974f, -0.001365f, 0.002603f, -0.006216f, 0.007200f, -0.002539f, 0.004117f, -0.000903f, 0.002921f, -0.005673f, 0.001963f, 0.003910f, 0.004776f, 0.002035f, 0.000950f, 0.001679f, -0.001985f, -0.004707f, 0.009579f, 0.007193f, 0.003065f, -0.003588f, 0.011869f, 0.007989f, -0.003324f, 0.007510f, -0.000563f, -0.005908f, -0.001409f, -0.002146f, -0.005218f, 0.003401f, 0.003979f, 0.001874f, -0.003996f, 0.008337f, -0.005486f, 0.004875f, 0.007106f, -0.001379f, 0.000769f, -0.010431f, -0.004571f, -0.011225f, - 0.001685f, 0.005305f, -0.005327f, -0.001630f, 0.002137f, -0.005093f, -0.001371f, 0.002447f, -0.000245f, 0.001748f, -0.001108f, -0.002723f, -0.007323f, -0.003635f, -0.001273f, -0.001799f, -0.000552f, -0.000181f, 0.000515f, -0.000938f, -0.001185f, -0.002732f, -0.001174f, 0.000053f, 0.000654f, 0.000557f, -0.001428f, -0.000279f, 0.000025f, 0.000369f, -0.000268f, 0.000382f, -0.000083f, 0.000718f, -0.000058f, -0.001357f, -0.002149f, -0.002330f, -0.000153f, -0.001394f, 0.000480f, 0.014048f, 0.006459f, -0.005328f, 0.002440f, 0.001881f, 0.022356f, -0.006525f, 0.006439f, 0.010931f, -0.002057f, 0.009953f, 0.004079f, 0.006793f, -0.008789f, -0.003213f, -0.010307f, -0.004726f, 0.007015f, -0.000138f, -0.004884f, 0.001245f, -0.007217f, -0.000503f, -0.004713f, 0.006695f, -0.002872f, -0.000847f, -0.002584f, 0.003590f, 0.001584f, 0.000145f, -0.000817f, 0.002960f, -0.010871f, -0.008335f, 0.003781f, 0.001067f, -0.001030f, -0.005462f, 0.013012f, 0.003795f, -0.001647f, 0.004357f, 0.005166f, 0.000076f, 0.002567f, 0.001287f, -0.006397f, 0.005884f, -0.007620f, -0.005711f, 0.006869f, -0.008086f, 0.007051f, 0.003221f, - -0.006147f, 0.010651f, 0.005728f, 0.004134f, -0.002878f, 0.009659f, 0.002243f, -0.001243f, -0.002785f, 0.002990f, 0.001121f, -0.001608f, -0.011321f, -0.001571f, -0.002217f, 0.003525f, -0.006658f, 0.009036f, -0.003137f, 0.007417f, -0.007705f, 0.000326f, -0.000825f, 0.009221f, -0.004292f, -0.002939f, 0.001645f, 0.003473f, -0.000135f, 0.001864f, -0.001422f, -0.008361f, -0.000967f, -0.000530f, -0.000461f, -0.001084f, -0.000186f, 0.000106f, -0.001175f, -0.001555f, -0.001756f, -0.001916f, 0.000130f, -0.000711f, 0.000020f, 0.001216f, -0.001432f, 0.000965f, 0.001103f, 0.002559f, -0.003017f, 0.002029f, 0.000884f, 0.001589f, -0.000201f, 0.002372f, 0.000857f, -0.001061f, -0.001843f, -0.000477f, -0.000884f, 0.023307f, -0.019323f, -0.016961f, -0.005456f, 0.017848f, -0.002478f, -0.009654f, 0.012225f, -0.008126f, 0.005783f, -0.000435f, -0.013281f, -0.009030f, 0.011224f, -0.007251f, 0.005568f, -0.007567f, 0.007422f, -0.003287f, -0.002039f, -0.000832f, -0.007313f, 0.003884f, 0.005385f, -0.007352f, 0.001824f, -0.003730f, 0.001539f, 0.003383f, -0.001055f, 0.004845f, 0.001481f, 0.003968f, 0.006278f, -0.008008f, - -0.005880f, 0.007274f, 0.000398f, 0.005654f, 0.005520f, -0.005070f, -0.007556f, -0.002993f, 0.001342f, 0.010011f, -0.010751f, 0.004484f, -0.012008f, -0.014637f, -0.003418f, -0.008354f, -0.001368f, -0.009903f, -0.018872f, -0.009978f, 0.008817f, 0.008242f, 0.005363f, -0.006256f, 0.018145f, -0.005527f, 0.003095f, -0.009965f, -0.009402f, 0.002534f, 0.000041f, -0.000873f, -0.011877f, -0.003848f, -0.000640f, -0.002364f, -0.002272f, -0.006373f, -0.005121f, 0.001371f, -0.001606f, -0.003473f, 0.000447f, -0.006173f, 0.001159f, 0.003593f, 0.006236f, 0.003502f, -0.005180f, 0.005546f, -0.003559f, -0.000294f, 0.006209f, 0.002664f, 0.000957f, -0.001968f, 0.003221f, 0.003684f, 0.002894f, 0.000682f, -0.001537f, 0.000594f, 0.004435f, 0.002309f, 0.002878f, 0.001260f, -0.001588f, 0.002398f, 0.000508f, -0.000215f, 0.000724f, -0.001193f, 0.000475f, 0.000698f, -0.001244f, 0.002461f, 0.003640f, 0.004276f, -0.000217f, -0.000267f, 0.000673f, -0.002669f, 0.003994f, -0.000209f, 0.002516f, 0.029839f, -0.009793f, 0.013953f, -0.003724f, 0.018754f, -0.003639f, -0.002925f, 0.003177f, 0.003763f, -0.003166f, -0.021609f, - 0.002141f, -0.002120f, -0.005725f, -0.000372f, -0.001011f, 0.007632f, -0.002440f, 0.018317f, -0.002401f, 0.002024f, -0.001288f, 0.010339f, -0.002012f, 0.003532f, -0.008557f, -0.000384f, -0.005866f, -0.006215f, -0.001723f, -0.001845f, 0.000114f, 0.006599f, -0.011752f, -0.003569f, 0.004042f, -0.001448f, 0.008197f, 0.001780f, -0.002025f, -0.005511f, -0.005336f, -0.005851f, -0.010745f, 0.003957f, 0.004611f, 0.003922f, -0.018758f, -0.002878f, 0.013313f, 0.007335f, -0.002971f, -0.000712f, -0.005781f, -0.013033f, -0.013649f, 0.013532f, -0.004179f, -0.009299f, -0.005085f, 0.007293f, 0.005949f, 0.000549f, 0.006664f, 0.002615f, 0.006445f, -0.003291f, -0.013385f, -0.004703f, -0.006013f, -0.006975f, 0.009908f, 0.006405f, -0.001069f, 0.010871f, 0.016481f, -0.004045f, 0.006999f, -0.006485f, -0.000789f, -0.000014f, 0.007189f, -0.000676f, 0.001816f, 0.001518f, 0.002245f, 0.005573f, -0.005637f, 0.004347f, -0.002922f, 0.000345f, -0.003585f, 0.000511f, 0.001914f, 0.003945f, 0.002952f, -0.000179f, 0.001066f, 0.000161f, -0.000429f, 0.001998f, -0.005321f, -0.000836f, -0.004246f, 0.000901f, -0.000756f, -0.000762f, - -0.001856f, -0.001197f, -0.002213f, 0.002304f, 0.001127f, -0.044753f, 0.024465f, 0.008854f, -0.002148f, -0.002075f, 0.000034f, -0.006890f, -0.012530f, -0.002791f, 0.005996f, 0.018819f, 0.012621f, -0.017324f, -0.003374f, -0.010343f, 0.006930f, -0.000965f, -0.023360f, -0.006958f, 0.014211f, 0.008738f, 0.004810f, 0.012027f, 0.007266f, -0.001326f, -0.001603f, 0.003491f, -0.008933f, -0.005324f, 0.001973f, 0.010481f, -0.004518f, -0.008975f, -0.012930f, -0.006564f, 0.006362f, 0.020733f, 0.001386f, -0.003730f, 0.004355f, -0.004373f, -0.015493f, 0.001069f, -0.010953f, -0.008655f, -0.010224f, 0.006257f, -0.000676f, -0.014552f, 0.002648f, 0.005404f, 0.005605f, -0.015737f, -0.008743f, -0.005910f, -0.003945f, -0.001785f, -0.005846f, -0.002878f, -0.007541f, -0.015277f, -0.001834f, -0.012986f, -0.015558f, -0.009682f, -0.002802f, 0.002593f, -0.009286f, -0.013695f, 0.003954f, 0.010847f, -0.000635f, -0.002087f, -0.001360f, 0.007868f, -0.011950f, 0.008802f, 0.013967f, 0.013556f, 0.010683f, 0.018260f, 0.000169f, -0.007639f, 0.004878f, 0.000740f, -0.002003f, -0.001789f, -0.000041f, -0.004267f, 0.006007f, 0.000230f, - 0.000397f, -0.003811f, -0.001084f, 0.001914f, 0.002231f, -0.002254f, -0.002039f, 0.001078f, 0.006204f, -0.000898f, 0.002326f, 0.002028f, 0.005298f, -0.004424f, 0.000225f, -0.000174f, -0.004877f, 0.000647f, 0.000623f, 0.004007f, 0.000402f, 0.000760f, 0.003470f, 0.002140f, -0.006062f, 0.002171f, -0.002198f, -0.018482f, 0.006963f, -0.009145f, -0.001585f, 0.002406f, 0.005445f, -0.000770f, 0.009545f, 0.000229f, -0.001932f, -0.025922f, 0.012005f, -0.004823f, -0.005515f, 0.009292f, -0.015030f, -0.020661f, 0.008419f, -0.007245f, -0.009694f, -0.003066f, 0.018637f, 0.011719f, -0.006835f, -0.004033f, 0.008664f, -0.002592f, -0.000943f, 0.002502f, 0.008455f, 0.015532f, 0.009881f, 0.012566f, -0.001944f, -0.000553f, 0.000291f, -0.008295f, 0.002101f, -0.003500f, 0.021145f, -0.016187f, -0.009391f, -0.008566f, -0.008028f, 0.005083f, 0.002852f, 0.007573f, -0.001278f, -0.010694f, -0.014329f, -0.004146f, -0.017836f, -0.024828f, -0.004998f, 0.000665f, 0.019262f, 0.003815f, -0.015310f, -0.003933f, 0.014434f, -0.006136f, 0.004820f, 0.004344f, 0.008089f, -0.011497f, -0.017253f, -0.007630f, -0.008795f, 0.027799f, - 0.003080f, -0.008924f, 0.006025f, 0.004632f, -0.002079f, 0.003497f, 0.006333f, -0.000779f, 0.012313f, -0.016348f, -0.014665f, 0.004742f, -0.006790f, 0.014818f, -0.006885f, -0.000388f, 0.007942f, -0.002451f, 0.007032f, -0.000434f, -0.000391f, -0.000492f, -0.002439f, -0.000262f, 0.006323f, 0.002358f, 0.006142f, 0.003466f, 0.003048f, 0.000218f, -0.002298f, -0.001011f, 0.002551f, -0.000811f, 0.000748f, -0.001265f, 0.004399f, -0.003673f, 0.002546f, -0.003291f, 0.004436f, -0.004270f, 0.000373f, -0.000412f, -0.000494f, 0.003184f, 0.004179f, -0.004467f, 0.003091f, 0.001719f, -0.001533f, 0.006559f, 0.016041f, 0.005150f, -0.001196f, 0.011122f, -0.001968f, -0.013579f, -0.002434f, -0.001093f, 0.013608f, -0.007499f, -0.001710f, -0.004004f, 0.002291f, -0.004059f, 0.000941f, 0.004534f, 0.006483f, 0.009329f, 0.006133f, 0.003041f, 0.023777f, 0.009461f, 0.007885f, -0.000884f, -0.018570f, 0.001353f, -0.015452f, 0.004876f, -0.010446f, 0.002708f, 0.000140f, 0.006139f, 0.029216f, 0.008398f, -0.004430f, 0.010599f, -0.008142f, 0.009049f, -0.005019f, 0.015311f, -0.008205f, 0.000041f, -0.011328f, 0.007066f, - 0.011647f, -0.013426f, 0.027468f, -0.006604f, 0.002109f, -0.004096f, -0.007258f, 0.003055f, -0.008108f, -0.023353f, 0.004095f, -0.005770f, -0.001176f, -0.014378f, 0.003572f, -0.005013f, -0.024025f, -0.010821f, -0.006609f, -0.021237f, 0.012264f, 0.030905f, 0.037445f, -0.035418f, -0.026998f, -0.014920f, 0.001659f, 0.008987f, -0.010818f, 0.005221f, -0.012295f, 0.003413f, 0.017377f, 0.026700f, -0.018136f, 0.029882f, 0.009699f, 0.003628f, 0.005249f, 0.005519f, -0.006418f, 0.010357f, 0.009586f, 0.011523f, 0.008922f, 0.003821f, 0.013432f, 0.000216f, 0.004347f, -0.000086f, 0.000160f, 0.007340f, -0.001921f, -0.008514f, -0.002151f, 0.005841f, 0.004602f, 0.001959f, 0.000136f, -0.000382f, -0.000537f, 0.005890f, 0.004780f, 0.002192f, -0.004892f, 0.001475f, 0.001652f, 0.000269f, 0.006321f, 0.002841f, 0.004012f, 0.000158f, 0.004792f, 0.002827f, 0.004845f, 0.006582f, 0.006893f, 0.000619f, 0.000484f, -0.003153f, 0.007585f, 0.006764f, -0.000526f, -0.001819f, 0.000981f, 0.004936f, 0.013866f, -0.024887f, 0.037176f, 0.001191f, 0.021943f, 0.008217f, -0.007135f, -0.007383f, 0.020361f, -0.011327f, - 0.013017f, 0.015959f, -0.001587f, -0.010500f, 0.001037f, 0.016495f, 0.009470f, 0.008687f, 0.007593f, -0.001007f, 0.003002f, 0.005832f, 0.020791f, 0.014784f, -0.010475f, -0.008860f, -0.001250f, -0.004278f, -0.001850f, -0.010257f, -0.006727f, 0.010672f, 0.018375f, 0.005032f, 0.027511f, -0.007123f, 0.030044f, 0.001791f, 0.014357f, 0.033101f, 0.023522f, 0.007863f, 0.007068f, 0.015208f, -0.002836f, -0.012748f, 0.000306f, 0.014343f, -0.007625f, -0.014688f, 0.000944f, -0.001950f, 0.030228f, 0.024443f, 0.000074f, 0.034208f, -0.002631f, 0.018603f, 0.009949f, 0.014811f, -0.001514f, -0.011188f, 0.015508f, -0.002591f, 0.018078f, 0.012594f, 0.037808f, -0.020477f, -0.003247f, -0.041818f, 0.009346f, -0.020323f, -0.002477f, 0.019931f, -0.007628f, 0.008469f, -0.003128f, 0.023228f, -0.005640f, -0.015378f, -0.000845f, -0.004913f, 0.007163f, -0.000536f, 0.011380f, 0.013428f, 0.003778f, -0.002914f, 0.010604f, -0.001767f, 0.004787f, 0.000552f, -0.006448f, 0.005173f, 0.005126f, 0.009508f, 0.005032f, 0.010597f, 0.004868f, 0.000329f, 0.000744f, -0.002599f, 0.000469f, 0.010412f, -0.003186f, -0.006923f, - 0.004635f, 0.000002f, 0.001813f, 0.008637f, 0.002192f, 0.002531f, 0.003730f, 0.005935f, -0.001359f, -0.000429f, 0.003932f, 0.007126f, 0.010902f, 0.010267f, 0.000335f, 0.005176f, 0.000444f, 0.000135f, 0.004958f, 0.007415f, -0.024477f, -0.017953f, 0.008850f, -0.014496f, 0.008326f, -0.008728f, 0.002407f, 0.022576f, -0.003854f, -0.021222f, 0.005726f, -0.008884f, 0.021660f, -0.022671f, -0.015912f, 0.009306f, 0.010399f, 0.015904f, 0.000495f, -0.001509f, 0.010150f, -0.006157f, -0.015626f, 0.009724f, -0.006487f, -0.012325f, 0.003609f, 0.012220f, -0.009018f, 0.022910f, 0.009122f, -0.000746f, 0.002866f, 0.011269f, 0.004751f, -0.038899f, 0.015785f, -0.003904f, -0.004277f, -0.006635f, 0.020575f, 0.000219f, 0.021912f, 0.001022f, 0.001757f, 0.002535f, -0.006021f, -0.002266f, 0.010537f, -0.012378f, 0.002767f, 0.035558f, 0.002918f, 0.026185f, 0.001814f, -0.005174f, -0.003069f, -0.017419f, -0.036671f, -0.026410f, 0.011834f, 0.016880f, -0.007448f, 0.028054f, 0.011692f, -0.019760f, -0.011845f, 0.025719f, 0.017910f, 0.017118f, 0.004943f, -0.007652f, -0.000028f, -0.001190f, -0.015967f, -0.004627f, - -0.009454f, -0.042658f, -0.018726f, -0.000756f, 0.028515f, 0.006661f, -0.006958f, 0.003347f, 0.024425f, -0.005873f, 0.000946f, 0.000420f, 0.005950f, -0.007840f, -0.004215f, -0.005778f, -0.003817f, -0.001847f, 0.005607f, 0.000019f, -0.001410f, -0.000058f, 0.004304f, 0.004053f, 0.006903f, -0.004802f, -0.008407f, 0.003246f, -0.008883f, -0.004341f, 0.000690f, 0.003458f, 0.000601f, -0.001114f, 0.008498f, -0.003756f, -0.003053f, -0.009885f, 0.003501f, -0.008887f, 0.006923f, 0.003664f, 0.004446f, -0.007437f, 0.000270f, -0.000912f, 0.003392f, -0.004082f, 0.002538f, -0.003590f, 0.004438f, -0.008253f, -0.000159f, -0.009746f, 0.011320f, 0.023794f, 0.009362f, 0.008298f, 0.027246f, 0.022860f, 0.019159f, 0.001218f, 0.007433f, 0.001925f, -0.003866f, -0.004745f, 0.004868f, -0.001657f, -0.015557f, 0.003980f, 0.016210f, 0.000284f, -0.004057f, 0.005332f, -0.038708f, 0.013507f, -0.015132f, 0.010188f, 0.013753f, 0.012443f, -0.014241f, 0.008395f, -0.001041f, 0.000140f, 0.023677f, 0.017433f, 0.000703f, 0.009556f, 0.007203f, -0.002677f, -0.012778f, 0.003702f, 0.011801f, 0.000697f, 0.017004f, 0.005430f, - 0.015426f, 0.029956f, 0.002013f, 0.012380f, 0.013097f, 0.016290f, -0.000190f, -0.009635f, 0.025943f, -0.009367f, 0.021036f, -0.023727f, -0.019439f, 0.028405f, -0.000924f, 0.009720f, 0.016935f, 0.024852f, 0.031981f, 0.013781f, 0.004818f, -0.014879f, 0.007417f, -0.002648f, -0.027676f, 0.024406f, 0.015379f, -0.022545f, -0.000873f, 0.001945f, -0.028377f, 0.010218f, 0.023458f, 0.014080f, 0.000307f, 0.009340f, 0.006786f, -0.012934f, 0.025630f, 0.002931f, -0.004419f, 0.013468f, 0.025359f, 0.010281f, -0.000488f, -0.008161f, -0.006299f, -0.002459f, 0.004764f, 0.007534f, 0.010786f, 0.003875f, 0.002296f, 0.003735f, 0.012520f, 0.011247f, 0.013862f, 0.000356f, -0.000885f, 0.005825f, 0.011948f, 0.000570f, 0.001591f, -0.001759f, 0.005809f, 0.001471f, -0.000780f, -0.003778f, 0.003263f, -0.007697f, -0.014146f, -0.000136f, 0.008793f, 0.000323f, 0.006380f, -0.006467f, 0.005030f, 0.000854f, 0.005641f, 0.001333f, -0.003411f, 0.003875f, -0.002121f, -0.001630f, -0.000377f, -0.008346f, 0.006866f, -0.002730f, 0.003176f, 0.005475f, 0.000826f, -0.000727f, -0.003543f, -0.005212f, -0.065005f, -0.040450f, - 0.013101f, 0.013744f, 0.026582f, 0.044054f, -0.012250f, -0.006967f, -0.014164f, -0.013078f, -0.016696f, -0.017812f, 0.001320f, 0.007071f, 0.005455f, 0.027796f, 0.001080f, 0.027280f, -0.001524f, 0.009366f, 0.012495f, 0.009684f, 0.020177f, 0.014469f, 0.000865f, 0.017887f, -0.000394f, -0.002136f, -0.010491f, 0.012106f, -0.001812f, -0.026679f, -0.023255f, 0.014480f, -0.003536f, 0.031816f, 0.018794f, 0.020466f, 0.007363f, -0.040006f, 0.009432f, 0.025185f, -0.004082f, 0.007346f, -0.006360f, 0.005023f, 0.031374f, -0.001066f, 0.026249f, 0.044198f, 0.002232f, -0.016624f, -0.000732f, 0.000513f, -0.027987f, 0.037541f, 0.017586f, -0.004918f, -0.002423f, 0.027226f, 0.012507f, -0.032846f, -0.027110f, 0.010641f, -0.011980f, 0.015820f, 0.011032f, 0.005075f, -0.013371f, -0.023290f, -0.001478f, 0.006027f, 0.004034f, 0.025410f, -0.034360f, 0.005083f, -0.002716f, -0.028680f, -0.014143f, -0.028839f, 0.024873f, -0.008469f, 0.034536f, -0.027361f, 0.002115f, -0.013090f, 0.019417f, 0.008798f, -0.009064f, -0.001505f, 0.017836f, 0.001309f, 0.005231f, -0.010435f, -0.006142f, -0.008793f, 0.015722f, 0.008244f, - -0.000585f, 0.004505f, 0.004331f, -0.014684f, 0.000457f, -0.003992f, 0.004656f, 0.003310f, -0.003795f, -0.014994f, -0.005894f, -0.011016f, 0.012810f, -0.009764f, 0.001563f, -0.002461f, 0.012649f, -0.002582f, -0.002973f, -0.004496f, -0.008944f, -0.000255f, -0.006175f, 0.005526f, 0.013957f, 0.013018f, -0.001615f, -0.013130f, 0.016257f, 0.046031f, -0.054795f, -0.015334f, -0.026712f, -0.001129f, 0.008686f, 0.001445f, 0.036736f, -0.037918f, 0.017926f, -0.005184f, 0.007323f, -0.004598f, 0.020175f, -0.011133f, -0.018769f, -0.001579f, -0.005467f, 0.014250f, -0.001183f, 0.009631f, 0.021377f, -0.004459f, -0.016013f, -0.002155f, 0.024041f, -0.014154f, 0.005737f, 0.005394f, 0.000961f, -0.002196f, 0.023879f, -0.000916f, -0.006150f, -0.039885f, 0.012835f, -0.009881f, -0.025173f, -0.021926f, -0.005811f, -0.024305f, -0.014302f, -0.021109f, 0.010016f, -0.024909f, 0.024846f, -0.022865f, 0.015409f, -0.011825f, 0.030121f, -0.029190f, -0.016933f, -0.004417f, 0.017459f, 0.007159f, 0.000161f, -0.012030f, -0.023886f, 0.002402f, 0.009355f, 0.034095f, 0.017906f, 0.007419f, -0.019501f, 0.011581f, -0.017297f, -0.019556f, - 0.017053f, -0.018987f, 0.009048f, 0.022081f, 0.018466f, -0.004954f, -0.007034f, -0.015990f, 0.026626f, 0.002566f, 0.025484f, 0.041128f, -0.008039f, -0.021640f, -0.009630f, -0.007233f, -0.014814f, 0.006473f, -0.024599f, 0.010679f, 0.008047f, 0.007350f, 0.019485f, -0.013809f, 0.000739f, -0.002555f, 0.004954f, 0.017654f, 0.000534f, 0.013871f, -0.005033f, -0.000389f, 0.001767f, -0.007952f, -0.002806f, 0.008304f, 0.004438f, -0.011346f, -0.014721f, -0.007070f, 0.006520f, 0.005767f, -0.006459f, 0.020984f, 0.006182f, -0.015465f, 0.007771f, 0.011177f, 0.028078f, 0.022723f, 0.012800f, 0.004646f, 0.002721f, -0.011866f, -0.009218f, -0.000475f, -0.009341f, 0.001683f, -0.005415f, -0.017300f, 0.009500f, -0.005792f, -0.002395f, 0.001936f, 0.009362f, 0.000119f, 0.030661f, 0.042393f, -0.044507f, 0.033005f, 0.023048f, 0.001294f, 0.016634f, 0.056286f, -0.015629f, -0.015976f, 0.005473f, 0.016699f, 0.023445f, 0.007865f, -0.021756f, 0.024974f, -0.008965f, 0.049761f, -0.001164f, -0.007991f, 0.016181f, 0.013222f, 0.013034f, -0.000336f, 0.046674f, -0.038461f, 0.009574f, -0.000503f, 0.012915f, -0.015926f, - -0.032043f, 0.016214f, 0.012765f, 0.013264f, -0.011127f, -0.008363f, 0.039035f, 0.014796f, 0.049019f, 0.004677f, -0.017946f, -0.001733f, 0.011000f, -0.004041f, 0.050878f, -0.006174f, 0.027763f, -0.004708f, 0.045663f, 0.016815f, 0.012415f, -0.010831f, -0.002427f, 0.025283f, 0.000602f, 0.027059f, 0.020391f, 0.023939f, -0.031364f, 0.005280f, 0.022634f, 0.027287f, 0.020335f, 0.015724f, 0.036548f, 0.044926f, -0.033967f, -0.003854f, 0.068059f, -0.016098f, -0.018274f, 0.044205f, 0.059402f, 0.001362f, -0.000473f, -0.031834f, -0.026275f, -0.001485f, 0.029889f, -0.004103f, -0.005494f, 0.001607f, -0.002162f, -0.008005f, -0.022736f, -0.008086f, -0.001616f, -0.013263f, 0.001041f, 0.014105f, -0.007612f, 0.017968f, -0.017782f, 0.015874f, -0.003516f, 0.013863f, -0.013300f, 0.000725f, 0.010186f, 0.006181f, 0.017339f, -0.002772f, -0.008963f, -0.003735f, 0.005252f, 0.016020f, 0.004787f, -0.005343f, 0.021865f, -0.006488f, 0.011589f, 0.011787f, -0.001854f, -0.002140f, -0.004790f, 0.032029f, -0.011463f, 0.004371f, 0.008227f, 0.012100f, -0.005619f, -0.020285f, -0.011814f, -0.003288f, 0.024112f, 0.011919f, - -0.001677f, 0.001737f, 0.008657f, -0.001239f, 0.000413f, 0.008791f, 0.004623f, 0.002472f, 0.000332f, 0.018756f, 0.042068f, -0.002457f, 0.013214f, -0.035737f, 0.034261f, -0.018079f, -0.011070f, -0.031295f, -0.020217f, 0.064376f, 0.001025f, -0.045231f, -0.020063f, -0.001308f, 0.000317f, -0.005948f, 0.049872f, 0.023244f, -0.004101f, -0.020762f, -0.001826f, 0.013073f, -0.006006f, 0.066226f, 0.014240f, 0.029099f, 0.010205f, -0.014959f, -0.037343f, 0.008771f, -0.000257f, 0.005817f, -0.028885f, -0.003150f, -0.019445f, 0.022256f, 0.000323f, 0.003572f, 0.023383f, -0.021098f, -0.015186f, 0.004462f, 0.001229f, 0.006764f, -0.031878f, -0.025356f, -0.054766f, -0.028917f, 0.002599f, -0.031567f, 0.004453f, -0.022961f, -0.013403f, 0.040654f, 0.013095f, -0.020054f, 0.012492f, 0.004428f, 0.000098f, 0.039069f, -0.006460f, 0.047364f, 0.018487f, -0.020723f, -0.057804f, 0.009878f, 0.009552f, 0.031911f, -0.017089f, -0.042007f, -0.014567f, 0.011813f, 0.002389f, -0.010256f, -0.029719f, -0.009961f, -0.042116f, -0.048679f, 0.015442f, -0.003029f, 0.049885f, -0.016200f, -0.029845f, -0.026608f, -0.002068f, 0.034656f, - -0.001531f, 0.012516f, 0.022846f, 0.016815f, -0.007315f, 0.011008f, 0.015752f, 0.004710f, 0.016143f, 0.015026f, -0.010543f, -0.002033f, 0.022473f, -0.004833f, 0.003502f, 0.020516f, -0.003549f, 0.011970f, -0.015052f, 0.005562f, 0.012517f, -0.007590f, 0.007673f, 0.006385f, -0.014000f, 0.018701f, -0.017678f, 0.008748f, 0.010163f, 0.014707f, -0.003269f, -0.011092f, 0.021048f, -0.003318f, 0.015716f, -0.022516f, -0.010096f, -0.016717f, -0.012973f, 0.001378f, -0.010570f, 0.007656f, 0.001746f, 0.002788f, -0.021315f, 0.029972f, -0.033618f, -0.002208f, 0.050608f, -0.011133f, 0.014848f, 0.005080f, 0.006545f, -0.047812f, 0.039363f, -0.004158f, -0.038280f, -0.022549f, 0.019821f, -0.005934f, 0.009842f, -0.000483f, -0.015960f, -0.012031f, 0.006706f, -0.012054f, -0.002903f, -0.000932f, -0.055385f, -0.014714f, -0.037185f, 0.007919f, 0.013017f, -0.000611f, -0.016452f, 0.006275f, -0.007948f, 0.021383f, -0.049027f, 0.002991f, 0.008376f, 0.027681f, -0.021432f, 0.025768f, -0.021114f, 0.016289f, 0.004288f, 0.019980f, -0.032065f, 0.009475f, -0.015964f, -0.034229f, 0.021901f, -0.027758f, -0.055330f, 0.007803f, - -0.005330f, 0.043200f, -0.021155f, 0.005782f, 0.019834f, 0.028558f, 0.032517f, 0.003214f, -0.011360f, -0.020881f, 0.000491f, 0.015261f, 0.021356f, -0.043305f, 0.048015f, -0.000681f, -0.032699f, -0.024627f, -0.043454f, 0.017319f, 0.010336f, 0.016926f, 0.007444f, 0.045597f, -0.016484f, 0.049583f, -0.027259f, 0.011374f, -0.011189f, -0.023490f, -0.069716f, 0.038931f, 0.007322f, -0.018748f, -0.047395f, -0.003055f, 0.008555f, -0.004354f, 0.017071f, -0.013043f, -0.015383f, -0.002769f, 0.007144f, -0.013568f, -0.013301f, -0.008687f, -0.002670f, 0.006993f, -0.004343f, -0.004531f, -0.018957f, 0.013569f, 0.000191f, -0.010571f, 0.008313f, -0.007762f, 0.014181f, -0.004802f, 0.006956f, 0.009248f, 0.017569f, -0.006494f, 0.015922f, 0.001464f, 0.000611f, -0.017838f, -0.014046f, 0.003937f, 0.006276f, 0.002074f, 0.000612f, -0.003745f, -0.011783f, -0.006714f, -0.005772f, -0.012866f, -0.006091f, 0.021486f, -0.011291f, -0.012803f, 0.006435f, -0.027669f, -0.041013f, -0.000258f, 0.022477f, -0.009074f, -0.044410f, -0.007167f, -0.064857f, 0.031265f, -0.071667f, 0.042616f, -0.049573f, -0.043310f, 0.012227f, 0.036949f, - 0.027612f, -0.024736f, 0.025902f, 0.046507f, 0.008214f, 0.006825f, 0.010902f, 0.004059f, -0.027558f, 0.033307f, -0.056224f, -0.035047f, 0.003089f, -0.003639f, -0.003666f, -0.007631f, -0.014052f, 0.007327f, 0.051627f, 0.013192f, 0.007132f, 0.004666f, -0.024366f, 0.029832f, -0.005472f, -0.052183f, -0.008049f, 0.000931f, 0.001080f, -0.035764f, -0.025169f, 0.027180f, -0.008950f, 0.046775f, 0.008687f, -0.000164f, -0.038245f, -0.021154f, 0.014072f, 0.005865f, -0.010433f, 0.040041f, -0.031859f, -0.019555f, -0.001392f, -0.002561f, 0.037985f, 0.002882f, 0.044439f, -0.000195f, -0.036295f, 0.008833f, -0.030937f, 0.023378f, -0.004321f, 0.031931f, 0.060832f, -0.093788f, 0.031917f, 0.012744f, 0.017180f, 0.035217f, 0.008833f, -0.043129f, -0.009905f, -0.004104f, -0.007703f, 0.021726f, -0.043888f, 0.003962f, -0.011439f, -0.006464f, -0.030207f, -0.016484f, -0.045733f, 0.004905f, -0.002795f, 0.004521f, 0.012720f, -0.018795f, -0.003259f, 0.022062f, -0.013593f, 0.004174f, -0.007513f, -0.022773f, 0.010619f, 0.013456f, -0.015698f, -0.001855f, -0.024873f, -0.001656f, -0.036039f, 0.012821f, 0.009035f, -0.004699f, - 0.004032f, -0.009316f, 0.001683f, 0.007177f, -0.005631f, -0.006937f, 0.020843f, 0.025081f, -0.005495f, 0.008199f, 0.004265f, 0.025749f, 0.011729f, -0.032820f, 0.004537f, 0.018557f, -0.010435f, 0.018753f, 0.006328f, 0.008540f, 0.076646f, 0.066248f, -0.018868f, -0.025519f, -0.001450f, -0.050267f, 0.029464f, -0.002794f, 0.011154f, 0.003999f, -0.025392f, 0.076479f, -0.032767f, -0.134662f, -0.019666f, 0.026982f, -0.090661f, -0.015454f, 0.028441f, -0.076751f, 0.010712f, 0.050126f, -0.035277f, 0.050009f, -0.047882f, 0.042980f, 0.053243f, -0.033882f, 0.014529f, -0.004802f, 0.001193f, -0.014294f, -0.021013f, -0.003778f, 0.032780f, -0.021002f, -0.035101f, -0.019086f, -0.028262f, -0.002888f, -0.022179f, -0.003521f, 0.011759f, -0.005175f, 0.032009f, -0.028113f, -0.034650f, 0.027744f, -0.036655f, -0.054300f, -0.069750f, -0.024194f, -0.001642f, 0.013687f, 0.038895f, -0.016121f, 0.017442f, 0.018336f, -0.012785f, -0.005894f, 0.064075f, -0.042236f, -0.001625f, 0.043971f, 0.013604f, 0.034603f, -0.008610f, 0.012696f, 0.048649f, 0.025136f, -0.002640f, -0.005805f, -0.029980f, 0.012424f, 0.048932f, -0.045368f, - 0.034611f, -0.044894f, 0.013143f, 0.063794f, 0.014677f, -0.035628f, 0.036200f, 0.005885f, -0.022849f, -0.017704f, 0.043804f, 0.014556f, 0.018894f, -0.002503f, 0.003314f, 0.012154f, 0.014368f, -0.001168f, -0.004390f, 0.018772f, 0.016251f, 0.003564f, -0.021654f, 0.023973f, 0.002944f, -0.008082f, 0.005858f, 0.008308f, -0.015771f, -0.004044f, 0.012153f, 0.002485f, 0.020246f, -0.024873f, 0.037612f, 0.029285f, -0.005188f, -0.023720f, -0.009700f, 0.025208f, 0.028663f, 0.046382f, -0.001443f, 0.009026f, 0.007554f, 0.025475f, -0.038609f, -0.020481f, 0.038696f, 0.024322f, 0.002602f, -0.006161f, 0.003302f, 0.010784f, -0.020227f, -0.015779f, -0.013617f, 0.002897f, 0.012316f, -0.006185f, -0.021939f, -0.015686f, 0.067248f, 0.045561f, -0.064936f, -0.013140f, 0.057887f, -0.017689f, -0.035942f, -0.025379f, -0.036067f, -0.021292f, 0.058434f, 0.035639f, -0.004793f, 0.026517f, -0.006472f, 0.032335f, -0.020454f, -0.011355f, 0.064918f, -0.027100f, 0.011656f, -0.018858f, -0.007123f, -0.000784f, 0.017681f, 0.052847f, 0.020279f, -0.035891f, -0.010619f, -0.001695f, -0.005538f, 0.029730f, 0.003870f, 0.053220f, - -0.015812f, 0.009165f, -0.005611f, 0.015511f, -0.044767f, 0.026797f, -0.041307f, 0.027856f, -0.002307f, 0.040902f, -0.010806f, 0.030324f, -0.014129f, 0.009531f, 0.017282f, -0.017696f, 0.017907f, 0.041301f, 0.051468f, -0.027361f, 0.052737f, 0.022210f, 0.062589f, -0.018039f, 0.011676f, -0.002369f, -0.007886f, -0.012058f, -0.004500f, -0.020805f, -0.103022f, -0.064788f, -0.020103f, -0.001338f, 0.014414f, 0.007207f, 0.023581f, 0.038696f, -0.056790f, -0.003233f, -0.023056f, 0.085622f, -0.006193f, -0.026144f, -0.007651f, -0.075246f, -0.063092f, 0.094638f, 0.038308f, 0.021100f, -0.014818f, 0.029594f, 0.002242f, -0.068922f, 0.013853f, 0.004581f, -0.026412f, -0.026958f, 0.004102f, 0.000286f, 0.007096f, -0.014514f, -0.007565f, -0.033837f, -0.028778f, 0.011973f, 0.014759f, 0.012936f, 0.009805f, -0.017670f, -0.026033f, -0.015846f, -0.033614f, 0.020951f, 0.006914f, -0.059443f, -0.007310f, -0.017357f, -0.004396f, 0.028830f, -0.027616f, -0.038542f, -0.008756f, 0.024595f, 0.008055f, -0.026833f, 0.015547f, 0.034066f, -0.064110f, -0.017379f, 0.022356f, -0.001392f, -0.005221f, -0.012420f, -0.002959f, 0.010851f, - 0.018669f, 0.004221f, 0.051199f, -0.073542f, 0.069629f, -0.020058f, -0.020518f, 0.018077f, 0.032527f, -0.057549f, -0.011353f, 0.001218f, 0.011749f, 0.003312f, -0.001440f, 0.029174f, -0.017368f, 0.003919f, 0.015435f, 0.017064f, 0.024370f, 0.020193f, 0.006887f, -0.031498f, -0.006182f, 0.043302f, -0.041671f, -0.035613f, 0.044873f, 0.015445f, 0.031762f, 0.049026f, 0.075918f, -0.016985f, -0.047964f, 0.064245f, -0.025676f, -0.010628f, 0.066962f, 0.021165f, -0.024311f, -0.069485f, -0.045800f, -0.006814f, -0.025537f, 0.032957f, 0.065997f, 0.033908f, -0.022391f, 0.067774f, 0.022934f, -0.024305f, 0.018842f, 0.075611f, 0.022027f, 0.014802f, -0.015713f, -0.060243f, -0.080920f, -0.064294f, -0.004448f, 0.049074f, 0.015156f, 0.031076f, 0.115847f, 0.057172f, -0.069000f, -0.046433f, 0.030900f, -0.095628f, -0.043800f, 0.082818f, 0.029747f, -0.106270f, -0.088616f, -0.041020f, -0.067789f, -0.063731f, -0.038022f, 0.058133f, -0.016260f, -0.011949f, 0.151420f, 0.025611f, -0.043277f, -0.011865f, -0.046777f, 0.080528f, -0.016698f, 0.017642f, 0.005794f, 0.001338f, -0.043760f, -0.016831f, -0.003213f, -0.022109f, - 0.005542f, 0.017404f, 0.039580f, 0.005287f, -0.026496f, -0.000995f, 0.000109f, -0.017483f, 0.008381f, 0.011562f, 0.013578f, -0.034720f, 0.009211f, -0.032159f, 0.005879f, 0.017079f, -0.001640f, 0.025895f, -0.005982f, -0.001572f, 0.026359f, -0.005243f, 0.014863f, 0.029038f, -0.009552f, 0.008713f, 0.020270f, 0.021839f, 0.018183f, 0.003660f, 0.004787f, 0.015200f, -0.015662f, -0.006102f, 0.010746f, -0.103137f, 0.071669f, 0.030830f, 0.023278f, 0.028868f, -0.010948f, 0.035392f, 0.029107f, 0.041468f, -0.007718f, 0.056825f, -0.035516f, 0.043124f, -0.015547f, -0.032873f, -0.010329f, -0.053983f, 0.005743f, -0.019778f, 0.019236f, -0.013651f, -0.020810f, 0.051926f, -0.059461f, 0.038502f, -0.001918f, -0.025910f, -0.010284f, 0.023023f, 0.026104f, 0.018807f, 0.049211f, 0.039608f, -0.028315f, -0.005909f, -0.025319f, 0.022081f, -0.022427f, 0.017222f, 0.023768f, 0.010837f, 0.013388f, 0.008800f, -0.013881f, 0.054198f, -0.004965f, 0.016109f, 0.005522f, 0.024968f, 0.013963f, -0.064820f, 0.004307f, -0.038786f, 0.009993f, 0.028590f, -0.005202f, -0.027478f, -0.025054f, 0.060367f, -0.063727f, -0.051665f, - 0.094882f, -0.040314f, 0.024688f, 0.009376f, 0.030547f, -0.014359f, 0.016035f, -0.066030f, 0.004623f, 0.064002f, -0.034210f, -0.025979f, 0.055339f, -0.003852f, -0.045692f, -0.033997f, 0.020470f, -0.018053f, -0.010538f, 0.034161f, -0.025141f, 0.008422f, 0.042799f, -0.048206f, 0.003285f, 0.028030f, -0.015485f, -0.009699f, -0.012438f, 0.017188f, 0.004913f, 0.006845f, -0.006185f, 0.009686f, 0.007538f, -0.009617f, 0.000872f, 0.001533f, 0.025610f, 0.012655f, -0.023731f, 0.029020f, 0.007461f, -0.015070f, 0.008684f, 0.008713f, -0.002483f, -0.008928f, 0.021108f, -0.000202f, 0.007232f, 0.002376f, 0.027259f, -0.012836f, -0.010008f, 0.016168f, -0.024130f, 0.030316f, -0.002105f, -0.017605f, -0.002650f, -0.002178f, 0.003889f, -0.000697f, -0.011552f, -0.002134f, 0.016173f, 0.031511f, -0.062019f, -0.248735f, -0.268252f, -0.010671f, -0.154285f, 0.134782f, 0.489816f, 0.212948f, 0.295020f, 0.372857f, -0.142151f, -0.100824f, -0.040707f, -0.336710f, -0.235779f, -0.077098f, -0.369100f, -0.161409f, -0.033710f, -0.151451f, 0.034928f, 0.344636f, 0.313026f, 0.338814f, 0.439461f, 0.264422f, -0.024801f, 0.098051f, - -0.099647f, -0.392781f, -0.213816f, -0.158463f, -0.326515f, -0.224175f, 0.011523f, -0.251617f, -0.083438f, 0.054396f, -0.251389f, -0.129379f, 0.186477f, 0.071762f, 0.202311f, 0.505300f, 0.410630f, 0.331865f, 0.597849f, 0.433678f, -0.008317f, 0.061576f, -0.112854f, -0.537461f, -0.513765f, -0.529987f, -0.824966f, -0.559126f, -0.345924f, -0.338670f, 0.003094f, 0.266599f, 0.300444f, 0.421419f, 0.638548f, 0.590829f, 0.498683f, 0.492305f, 0.281542f, 0.098318f, 0.014734f, -0.031365f, -0.225127f, -0.386812f, -0.474652f, -0.508191f, -0.685748f, -0.570288f, -0.439995f, -0.215859f, 0.228522f, 0.676443f, 0.630033f, 0.690388f, 0.483908f, 0.058126f, -0.066870f, -0.208586f, -0.286304f, -0.193951f, -0.095656f, -0.096532f, -0.043296f, -0.044832f, -0.070474f, -0.000529f, 0.009031f, 0.049362f, 0.156663f, 0.142097f, 0.104540f, 0.143990f, -0.014715f, -0.094719f, -0.013602f, -0.111041f, -0.096189f, 0.057954f, 0.062879f, 0.013754f, 0.013661f, -0.168683f, -0.429797f, -0.407121f, -0.346789f, -0.261584f, 0.125923f, 0.390225f, 0.477544f, 0.603363f, 0.540887f, 0.333210f, 0.231139f, 0.081408f, -0.097083f, -0.202725f, - -0.241538f, -0.313087f, -0.383885f, -0.432931f, -0.505349f, -0.449509f, -0.155857f, 0.109750f, 0.259357f, 0.336378f, 0.365782f, 0.274318f, 0.190338f, 0.095166f, -0.003767f, -0.011268f, 0.046555f, 0.074332f, 0.081588f, 0.088721f, 0.073833f, 0.006856f, -0.060198f, -0.130512f, -0.233551f, -0.224220f, -0.179966f, -0.146470f, -0.071319f, 0.006661f, 0.050612f, 0.044768f, 0.029253f, 0.017308f, 0.014183f}, - {-0.014472f, 0.007019f, -0.016458f, 0.003226f, 0.001197f, 0.001032f, -0.011229f, -0.003981f, 0.003092f, -0.002462f, 0.003660f, 0.005849f, 0.003532f, -0.000153f, 0.004611f, -0.012695f, 0.000308f, -0.000495f, -0.000311f, 0.006973f, 0.010611f, -0.011130f, -0.002496f, -0.006752f, -0.002200f, 0.003959f, 0.007282f, 0.001177f, 0.001807f, -0.002745f, -0.003625f, -0.002956f, -0.002251f, -0.005069f, 0.002770f, -0.005110f, -0.003448f, 0.005807f, -0.004963f, 0.004168f, 0.000689f, -0.012567f, -0.004259f, -0.006928f, -0.001661f, 0.005333f, -0.003716f, -0.001103f, -0.003655f, -0.003783f, -0.002644f, 0.005213f, 0.007932f, 0.001458f, 0.004410f, 0.003501f, -0.004216f, -0.007994f, 0.004286f, 0.003527f, -0.001749f, -0.006879f, -0.005739f, 0.005174f, 0.001046f, 0.003869f, 0.001842f, -0.010573f, -0.003493f, -0.003938f, 0.005829f, 0.002356f, -0.010633f, 0.002794f, -0.005638f, -0.001748f, -0.000556f, -0.003856f, 0.003029f, -0.003519f, 0.000811f, 0.004053f, 0.004184f, 0.002570f, 0.002884f, 0.001887f, -0.000341f, 0.002015f, 0.002480f, 0.000234f, -0.002067f, 0.002838f, 0.000585f, 0.000023f, -0.000841f, -0.001907f, - 0.000912f, 0.001790f, 0.000320f, 0.001469f, -0.000569f, -0.000972f, -0.000025f, -0.001493f, 0.001565f, -0.000276f, 0.001851f, -0.000358f, 0.000357f, -0.000180f, 0.001720f, 0.000905f, -0.000092f, -0.000725f, 0.001089f, -0.020418f, 0.013541f, -0.009750f, 0.001369f, -0.001286f, -0.003714f, 0.010380f, -0.009100f, -0.006043f, 0.000009f, 0.010972f, -0.004050f, -0.000609f, -0.001161f, 0.009081f, -0.005450f, -0.014497f, -0.003211f, -0.007444f, -0.010133f, 0.000405f, -0.000792f, 0.001706f, 0.005886f, 0.009696f, 0.006046f, 0.000964f, 0.014803f, 0.005786f, 0.000518f, 0.010576f, 0.011079f, -0.000859f, -0.005943f, 0.000451f, 0.004904f, 0.003937f, -0.000068f, -0.002103f, -0.008567f, -0.007540f, -0.003701f, 0.008491f, 0.003521f, 0.014602f, 0.008268f, -0.000623f, 0.004896f, 0.005965f, 0.002004f, -0.009032f, 0.009825f, -0.003864f, 0.005146f, -0.000364f, 0.003123f, -0.010774f, -0.001706f, -0.003408f, 0.003839f, -0.003271f, -0.004059f, 0.011299f, -0.000760f, -0.008437f, 0.003366f, -0.006414f, 0.005283f, -0.003606f, 0.008469f, 0.007311f, 0.008124f, 0.002757f, -0.007787f, 0.004324f, -0.001164f, 0.004263f, - -0.003358f, 0.001237f, 0.011121f, -0.004250f, 0.005413f, 0.007330f, -0.001074f, 0.000474f, -0.000311f, -0.001301f, -0.002928f, 0.001872f, -0.000152f, 0.002804f, -0.000036f, 0.002271f, 0.000167f, 0.000213f, 0.001625f, 0.002731f, 0.001152f, 0.002623f, 0.002916f, -0.000520f, -0.002084f, 0.003786f, 0.000439f, -0.000077f, 0.000320f, 0.002320f, -0.000587f, -0.002034f, 0.001123f, -0.000468f, 0.000626f, 0.000110f, 0.002286f, 0.000765f, 0.001258f, 0.000772f, 0.004081f, 0.004587f, 0.000231f, -0.003978f, 0.004278f, 0.001671f, 0.001292f, 0.002027f, -0.016178f, 0.005239f, -0.010314f, 0.001709f, 0.003326f, 0.003508f, -0.004741f, 0.008585f, 0.001347f, -0.003182f, -0.001498f, 0.010021f, 0.007176f, -0.004366f, -0.005632f, -0.004607f, 0.003856f, 0.007110f, -0.004324f, -0.004703f, 0.001364f, -0.018333f, -0.000074f, -0.007825f, -0.003121f, -0.007784f, -0.010237f, -0.001256f, 0.009253f, 0.002558f, -0.008352f, -0.002208f, 0.007914f, 0.002406f, -0.005142f, 0.008999f, -0.003957f, -0.012548f, -0.003780f, 0.007048f, -0.003156f, 0.008340f, 0.015893f, 0.012892f, 0.001739f, -0.000175f, 0.004459f, -0.001953f, - -0.009452f, 0.000102f, 0.003497f, -0.006734f, 0.005630f, -0.013358f, -0.002048f, 0.000834f, -0.005724f, -0.004360f, 0.005768f, 0.011653f, -0.009180f, -0.009527f, 0.005870f, 0.005965f, 0.010913f, 0.003540f, -0.006460f, 0.008766f, 0.007505f, -0.002513f, 0.008373f, -0.009322f, 0.009388f, 0.002298f, 0.006343f, 0.001301f, -0.005083f, -0.002871f, -0.000973f, 0.002088f, 0.000134f, -0.004581f, 0.001516f, 0.000055f, -0.002751f, -0.002196f, 0.000553f, -0.000673f, 0.001991f, 0.000127f, 0.003365f, -0.002482f, -0.001889f, -0.000120f, 0.000369f, 0.002983f, -0.001582f, -0.002964f, 0.001276f, 0.000117f, -0.000703f, 0.002031f, -0.000536f, 0.001234f, -0.001419f, 0.001244f, 0.001723f, 0.000243f, 0.002840f, 0.027540f, -0.010696f, -0.004709f, -0.001761f, 0.019856f, -0.001974f, 0.015017f, -0.010915f, 0.013234f, -0.013093f, -0.011487f, 0.002766f, 0.006269f, -0.007729f, -0.001897f, 0.003952f, -0.001009f, 0.005153f, -0.007970f, 0.009206f, 0.003331f, -0.009865f, -0.000372f, 0.003964f, 0.003094f, 0.001769f, 0.018680f, 0.014891f, 0.011650f, 0.000004f, 0.007563f, 0.000714f, 0.002184f, 0.005599f, -0.017233f, - -0.002630f, 0.010507f, 0.006841f, 0.008156f, -0.000187f, -0.003051f, 0.003811f, -0.000676f, 0.021072f, -0.003186f, 0.003559f, 0.002118f, 0.001037f, -0.006228f, 0.012640f, -0.001433f, 0.013142f, -0.007233f, -0.007581f, 0.005446f, -0.005048f, -0.017530f, -0.008070f, 0.003535f, -0.001658f, -0.012538f, 0.003508f, 0.000041f, 0.016328f, 0.001434f, 0.001424f, -0.004985f, 0.005950f, 0.006030f, -0.001330f, -0.000948f, 0.014344f, 0.010542f, 0.010475f, -0.006908f, -0.009831f, -0.008585f, -0.016800f, 0.001403f, -0.011892f, -0.004014f, 0.000759f, -0.006484f, -0.007396f, -0.004122f, -0.000828f, -0.002523f, 0.003965f, 0.007382f, -0.001372f, -0.000850f, -0.003305f, 0.001713f, -0.002391f, -0.002768f, 0.001190f, 0.002026f, 0.000041f, 0.002609f, -0.001511f, 0.000097f, -0.001459f, -0.000984f, -0.000792f, 0.001520f, -0.000899f, -0.000908f, -0.000532f, -0.002386f, -0.002708f, 0.000170f, -0.000290f, -0.003284f, 0.002805f, 0.002803f, 0.003417f, -0.000062f, -0.002368f, -0.001390f, 0.002688f, 0.020200f, -0.016087f, -0.000452f, -0.016824f, -0.011071f, -0.006582f, 0.014507f, 0.008494f, -0.020319f, -0.027758f, -0.010717f, - 0.009732f, 0.006905f, -0.004200f, 0.009444f, 0.000046f, -0.002410f, 0.001033f, -0.014621f, 0.004341f, -0.001970f, 0.001170f, 0.004554f, 0.000940f, -0.000103f, 0.006075f, 0.005322f, -0.009727f, -0.009704f, 0.010975f, -0.003542f, -0.005466f, 0.006699f, -0.019000f, 0.004468f, 0.003914f, -0.017517f, 0.006313f, 0.018028f, 0.010908f, 0.012359f, 0.002503f, 0.006798f, 0.017124f, 0.003173f, 0.003231f, -0.019739f, 0.010359f, 0.014796f, 0.012107f, 0.002286f, 0.012300f, -0.014078f, 0.013781f, -0.004195f, -0.013838f, -0.021317f, -0.000245f, -0.013577f, -0.010948f, -0.004727f, -0.013000f, -0.032379f, 0.001370f, 0.001638f, -0.001116f, 0.004986f, 0.015875f, 0.005936f, 0.006385f, 0.004196f, -0.011583f, 0.001645f, 0.005373f, 0.004591f, 0.004072f, 0.004658f, -0.011886f, -0.003564f, -0.014974f, -0.006789f, -0.001103f, 0.003443f, -0.005492f, 0.005266f, 0.001037f, 0.000897f, -0.003769f, -0.000642f, -0.002013f, -0.000005f, -0.002173f, 0.001967f, 0.000624f, 0.001483f, -0.000573f, -0.002764f, -0.002304f, -0.002279f, 0.002273f, 0.001447f, -0.000027f, -0.001081f, -0.002089f, -0.002267f, -0.002203f, -0.006760f, - 0.000993f, 0.000919f, -0.005128f, -0.002689f, -0.001876f, -0.043727f, 0.021493f, 0.002747f, -0.017009f, 0.004101f, -0.001900f, -0.005037f, -0.003501f, -0.009645f, 0.005130f, -0.004958f, 0.000977f, 0.006272f, 0.005768f, 0.018909f, -0.007695f, -0.018117f, 0.009802f, -0.022966f, -0.009936f, 0.003720f, 0.003109f, 0.002593f, 0.007383f, 0.009184f, 0.007881f, -0.000189f, 0.010445f, 0.000662f, -0.004225f, 0.013923f, 0.008584f, -0.004268f, 0.008235f, -0.014442f, 0.027192f, 0.001011f, 0.005008f, -0.002574f, -0.023460f, -0.004069f, -0.008773f, -0.008213f, 0.003565f, 0.019484f, 0.000484f, 0.000803f, -0.002584f, -0.005394f, -0.012698f, 0.003983f, -0.002155f, 0.006970f, -0.015986f, 0.005358f, 0.008404f, 0.003721f, -0.011865f, -0.004196f, 0.003031f, 0.001514f, 0.009475f, 0.001869f, 0.033055f, -0.009465f, -0.014200f, -0.016058f, -0.004935f, 0.000332f, 0.011750f, -0.015994f, -0.002153f, -0.006859f, 0.007227f, -0.023348f, -0.001096f, -0.006329f, -0.009855f, 0.002905f, -0.002917f, 0.006362f, -0.000911f, 0.011694f, 0.007326f, -0.000037f, 0.002407f, 0.000902f, 0.001394f, 0.013563f, 0.001553f, 0.009699f, - 0.003440f, -0.002453f, 0.000172f, 0.000347f, 0.002726f, -0.001786f, 0.001364f, -0.000521f, 0.004031f, 0.000760f, -0.003147f, -0.004463f, 0.003534f, -0.001719f, -0.005394f, -0.002343f, -0.002872f, -0.001235f, -0.001701f, -0.000099f, 0.006503f, 0.000112f, 0.001777f, 0.000795f, 0.002585f, -0.002602f, -0.001523f, -0.005653f, 0.019687f, -0.006404f, -0.004766f, 0.004193f, 0.005768f, -0.015982f, -0.016127f, -0.014755f, -0.013874f, -0.022655f, 0.014179f, -0.013284f, 0.003932f, 0.005425f, 0.020471f, -0.003461f, -0.004949f, 0.016020f, 0.003658f, 0.003303f, -0.018958f, -0.012443f, 0.009214f, 0.003964f, 0.007310f, 0.011037f, -0.019971f, 0.000150f, 0.008417f, 0.018916f, -0.000274f, 0.001722f, -0.002942f, -0.000061f, -0.013064f, -0.002533f, -0.004121f, -0.024221f, -0.002025f, 0.007304f, -0.013946f, 0.005857f, -0.015165f, -0.000164f, -0.010522f, -0.002223f, -0.003348f, 0.001283f, 0.019377f, -0.005759f, 0.000161f, 0.009898f, -0.005680f, 0.005762f, -0.016262f, -0.028887f, -0.015752f, -0.008819f, -0.004187f, 0.002977f, 0.019105f, -0.009129f, 0.005040f, 0.004585f, -0.013941f, 0.004576f, -0.010766f, -0.003844f, - 0.006914f, 0.019396f, -0.003119f, -0.001147f, 0.006100f, -0.000546f, -0.018440f, -0.017439f, -0.007407f, 0.017193f, -0.002222f, -0.026054f, 0.001693f, -0.017157f, -0.007707f, -0.003652f, -0.001952f, 0.005648f, -0.006714f, -0.002102f, 0.006305f, -0.001944f, 0.007428f, 0.006447f, 0.004590f, -0.003198f, 0.007267f, -0.006744f, -0.005143f, -0.004815f, 0.000955f, -0.000895f, -0.001596f, -0.001693f, -0.001452f, -0.002421f, 0.001302f, -0.000733f, 0.004609f, -0.003446f, -0.002288f, 0.001879f, -0.003065f, -0.001835f, -0.007686f, -0.009210f, -0.000997f, 0.000577f, 0.004264f, 0.000456f, 0.002492f, 0.000065f, 0.019226f, 0.020181f, -0.006169f, 0.001880f, 0.021170f, -0.021523f, -0.019147f, 0.016198f, -0.003870f, 0.002216f, 0.014713f, -0.002904f, -0.004012f, 0.014689f, -0.027198f, 0.011592f, -0.001215f, 0.004605f, 0.013257f, 0.013657f, -0.015222f, 0.002885f, -0.020919f, 0.006436f, -0.006285f, -0.002247f, -0.014551f, -0.000753f, -0.020864f, 0.002016f, -0.018081f, 0.012668f, -0.006331f, 0.002390f, 0.022609f, 0.010468f, 0.010135f, -0.018043f, 0.003345f, 0.020933f, -0.004930f, -0.029774f, 0.016001f, -0.003646f, - 0.002942f, -0.005869f, -0.013773f, 0.019650f, 0.007100f, 0.016009f, 0.004036f, 0.002308f, -0.013183f, -0.017168f, 0.006217f, 0.008017f, 0.008646f, 0.011400f, 0.026381f, -0.000888f, -0.020386f, -0.013309f, 0.015899f, -0.002298f, -0.017515f, -0.004630f, -0.001037f, -0.004799f, -0.022174f, 0.000341f, 0.003083f, 0.005540f, -0.008005f, 0.012798f, -0.000609f, 0.001407f, 0.018266f, 0.009310f, 0.019018f, -0.018670f, -0.007756f, 0.003439f, -0.010209f, 0.008495f, 0.005270f, 0.005202f, -0.000732f, -0.002377f, -0.001516f, -0.000291f, -0.007303f, 0.009397f, -0.003394f, 0.005762f, -0.001472f, 0.006712f, -0.002629f, -0.003334f, 0.000467f, 0.003856f, -0.003261f, -0.000129f, -0.000772f, -0.003708f, -0.001810f, 0.001700f, -0.004019f, -0.001274f, -0.008594f, -0.006757f, 0.003719f, 0.005972f, 0.003172f, 0.002721f, -0.000837f, -0.000709f, -0.003981f, -0.000651f, 0.004529f, -0.005778f, -0.000748f, 0.002667f, -0.001089f, 0.004674f, 0.004611f, -0.003235f, -0.001225f, 0.004179f, 0.002984f, -0.002175f, 0.015310f, -0.018635f, 0.021827f, -0.004913f, 0.023088f, -0.018855f, 0.017089f, 0.001882f, -0.001806f, 0.028759f, - -0.015024f, 0.001723f, -0.014583f, -0.004342f, 0.043829f, 0.021156f, 0.009306f, 0.006347f, 0.012465f, -0.006998f, -0.000059f, -0.037048f, 0.006882f, -0.001541f, -0.016026f, 0.017776f, 0.013328f, -0.000547f, 0.003163f, -0.021404f, 0.018867f, -0.009991f, 0.020036f, 0.013140f, 0.010697f, -0.015353f, -0.002706f, -0.012907f, 0.019238f, 0.004442f, -0.007011f, 0.034116f, 0.016297f, -0.003835f, 0.001786f, -0.028242f, 0.004792f, 0.001324f, 0.022436f, -0.010068f, -0.028745f, -0.004931f, -0.007959f, -0.005572f, -0.040625f, -0.020226f, -0.043270f, -0.022023f, -0.015470f, 0.005109f, -0.010886f, 0.020443f, 0.002538f, -0.023339f, 0.014084f, -0.015609f, 0.022081f, -0.019674f, -0.015979f, 0.011530f, 0.019668f, 0.019403f, 0.000056f, -0.018157f, -0.014515f, 0.008910f, -0.011906f, 0.000467f, -0.006017f, 0.007342f, -0.008174f, -0.011986f, 0.021163f, 0.009837f, 0.002887f, -0.003351f, 0.007973f, 0.004531f, 0.009815f, -0.000904f, 0.006646f, 0.002374f, 0.011023f, 0.000234f, -0.000523f, 0.000639f, -0.005437f, 0.000209f, 0.002816f, 0.001369f, 0.001206f, 0.000310f, 0.008489f, 0.003909f, -0.006708f, 0.000758f, - 0.003860f, -0.002105f, -0.002563f, -0.001608f, 0.000510f, 0.001635f, 0.004274f, -0.001060f, 0.002914f, 0.004979f, -0.001034f, -0.005029f, -0.000444f, -0.005485f, -0.002414f, -0.005065f, -0.003269f, 0.004411f, 0.000302f, -0.002831f, -0.026845f, -0.031873f, -0.021127f, -0.003040f, -0.000410f, -0.004135f, 0.007576f, 0.011531f, 0.008006f, -0.000005f, 0.004293f, -0.010116f, 0.006638f, -0.020534f, -0.028626f, 0.000899f, 0.021945f, 0.003843f, -0.007731f, 0.017562f, 0.010391f, 0.016998f, 0.028610f, 0.003715f, -0.008840f, -0.018235f, -0.014606f, 0.008361f, -0.016741f, -0.011606f, 0.004301f, -0.013246f, -0.029202f, -0.016006f, -0.001622f, -0.003390f, 0.006818f, -0.006568f, 0.016162f, 0.004696f, 0.006125f, 0.022381f, -0.003597f, 0.002654f, 0.005178f, -0.017865f, 0.021061f, 0.003469f, -0.019500f, -0.031888f, 0.008103f, 0.002866f, -0.023183f, 0.024524f, 0.015912f, -0.021481f, 0.007261f, 0.020614f, 0.011588f, 0.005526f, 0.017110f, -0.007836f, -0.006918f, 0.001294f, -0.009494f, -0.015181f, 0.025968f, -0.023166f, -0.002595f, 0.009688f, 0.002213f, 0.040374f, -0.035064f, 0.010689f, -0.004493f, -0.000171f, - 0.011279f, 0.000449f, 0.002407f, -0.009434f, 0.005332f, -0.020802f, -0.044106f, -0.002494f, -0.000549f, -0.022678f, -0.014424f, -0.003172f, 0.008323f, 0.007255f, 0.003095f, 0.001848f, -0.007359f, -0.000244f, -0.010304f, -0.005207f, -0.002011f, -0.005995f, -0.009292f, 0.003156f, -0.001782f, 0.001557f, -0.004766f, -0.003504f, 0.002172f, -0.007594f, -0.016105f, -0.005657f, 0.001064f, -0.004402f, -0.015532f, -0.008699f, 0.006411f, 0.004367f, 0.003028f, -0.003122f, -0.005984f, -0.007484f, -0.001403f, -0.003787f, -0.008829f, -0.007350f, -0.010406f, -0.005479f, -0.007030f, -0.007079f, -0.000233f, -0.001779f, 0.002787f, -0.002812f, -0.001979f, 0.005680f, -0.007778f, -0.020810f, 0.018322f, -0.037619f, -0.026715f, 0.019802f, -0.000927f, -0.034267f, 0.017565f, -0.020058f, 0.038776f, 0.007736f, -0.051036f, -0.006517f, 0.004641f, -0.012919f, 0.003842f, 0.008867f, 0.018118f, 0.015480f, -0.029641f, -0.001333f, 0.002779f, -0.006183f, -0.027161f, -0.004238f, -0.005629f, -0.009371f, -0.008277f, -0.000433f, 0.002023f, 0.023083f, 0.025348f, -0.007896f, 0.013660f, 0.011742f, 0.011536f, 0.025204f, 0.000338f, 0.006746f, - -0.029065f, -0.010041f, 0.010271f, -0.005796f, 0.014066f, 0.034613f, 0.005133f, -0.030380f, -0.067577f, -0.000199f, -0.020812f, 0.019152f, -0.012746f, -0.006932f, -0.013248f, -0.036568f, 0.015936f, 0.048776f, 0.002903f, 0.012749f, -0.038254f, 0.007882f, -0.004292f, -0.017298f, 0.004452f, 0.018677f, 0.009796f, 0.015061f, -0.016429f, 0.024180f, 0.014278f, -0.028287f, -0.041872f, -0.002722f, -0.031819f, -0.029891f, -0.018937f, -0.022052f, 0.002957f, 0.039279f, 0.015198f, 0.001398f, -0.005156f, 0.025273f, -0.012786f, -0.018904f, -0.002907f, 0.003894f, -0.002847f, 0.004615f, 0.004052f, 0.000182f, 0.004107f, 0.009642f, 0.003703f, -0.001098f, 0.000870f, -0.003803f, -0.003575f, 0.010116f, -0.002915f, 0.009951f, 0.000414f, -0.005718f, 0.001407f, -0.003036f, -0.004038f, 0.012037f, -0.002723f, 0.006486f, -0.014658f, -0.001959f, 0.007439f, -0.000132f, 0.003179f, 0.012293f, -0.009053f, 0.011227f, -0.000901f, 0.001191f, 0.003709f, -0.003866f, 0.008894f, 0.001185f, 0.000778f, 0.001446f, 0.000697f, 0.003866f, 0.011408f, -0.004725f, 0.004198f, 0.004285f, 0.004627f, 0.004830f, -0.073694f, -0.046519f, - 0.033477f, 0.026964f, 0.043843f, -0.000116f, 0.017301f, 0.004317f, 0.013871f, -0.000517f, 0.008962f, -0.019367f, -0.023221f, -0.014404f, -0.020784f, -0.013402f, -0.014793f, 0.017861f, 0.042152f, 0.009237f, -0.051329f, -0.012165f, 0.009054f, -0.013604f, 0.012601f, -0.029330f, -0.002327f, -0.000952f, 0.001760f, 0.014358f, 0.010907f, 0.002051f, -0.003485f, -0.006523f, 0.012011f, 0.023280f, -0.018575f, -0.028862f, 0.019280f, 0.009191f, 0.025273f, 0.011550f, 0.036716f, -0.025329f, -0.008847f, 0.023441f, 0.035011f, 0.030404f, 0.018037f, 0.008578f, -0.007442f, 0.002327f, -0.004349f, 0.000157f, 0.012171f, -0.045651f, 0.024608f, -0.003580f, 0.006709f, -0.003001f, 0.034740f, -0.010567f, -0.000459f, -0.007591f, 0.022052f, 0.018689f, -0.038911f, 0.027968f, -0.033091f, -0.001666f, -0.016753f, -0.016664f, 0.015194f, 0.002774f, -0.051614f, -0.004573f, -0.004019f, -0.009530f, -0.005958f, -0.001211f, -0.006538f, 0.026847f, 0.002700f, 0.025680f, -0.008061f, 0.030365f, 0.014387f, -0.015685f, 0.006743f, -0.003920f, 0.001806f, 0.001968f, 0.002926f, 0.004090f, 0.001629f, -0.005892f, -0.009661f, 0.015098f, - 0.006762f, 0.012390f, 0.003525f, -0.007383f, 0.014333f, 0.000548f, 0.000816f, 0.010747f, -0.030066f, -0.013981f, -0.013323f, 0.004221f, -0.000337f, -0.020483f, 0.000958f, 0.003425f, -0.000874f, -0.003860f, 0.000020f, 0.007021f, -0.007412f, -0.000318f, 0.008232f, 0.004050f, 0.010018f, -0.008705f, -0.004180f, 0.002456f, 0.010864f, 0.040932f, -0.045537f, -0.001047f, -0.025883f, -0.073014f, -0.008632f, -0.026948f, -0.057630f, 0.011518f, -0.000371f, -0.011199f, 0.003625f, 0.030973f, -0.002002f, -0.032737f, 0.011238f, 0.001324f, -0.010518f, -0.007874f, -0.005834f, 0.001658f, 0.035697f, -0.008008f, -0.001309f, 0.016210f, 0.011983f, -0.005135f, 0.017289f, 0.015820f, -0.007616f, -0.007491f, -0.014332f, 0.019867f, -0.004739f, -0.034194f, 0.005232f, -0.002258f, 0.011762f, 0.044824f, -0.029903f, -0.047975f, -0.030251f, -0.014004f, 0.006648f, 0.016020f, 0.008521f, 0.034127f, 0.017063f, -0.024028f, -0.013867f, -0.032778f, 0.028410f, 0.017488f, 0.003177f, 0.006049f, -0.018797f, 0.002004f, -0.019888f, 0.034412f, 0.033764f, 0.002433f, -0.015699f, -0.008716f, 0.003355f, 0.031334f, 0.062503f, 0.038482f, - -0.005889f, -0.013925f, 0.000891f, 0.019923f, 0.008664f, 0.018394f, 0.025346f, -0.025038f, -0.001137f, -0.048324f, -0.032563f, -0.031034f, -0.020787f, 0.013056f, 0.029734f, 0.020453f, 0.003273f, -0.005863f, -0.002739f, -0.026869f, -0.033806f, -0.008487f, -0.017937f, -0.016901f, 0.003939f, -0.003370f, -0.004274f, 0.000253f, 0.001144f, 0.007807f, -0.008564f, 0.017379f, -0.017523f, 0.007512f, -0.022317f, -0.007415f, 0.000024f, 0.004237f, -0.000603f, 0.004032f, 0.008639f, -0.005973f, 0.001078f, 0.020661f, 0.025171f, 0.030324f, 0.016659f, 0.019042f, 0.008645f, 0.003724f, 0.001492f, 0.000665f, 0.001226f, -0.005151f, -0.016232f, -0.015847f, -0.002564f, 0.012578f, 0.000082f, 0.002075f, -0.006579f, -0.004579f, 0.002019f, 0.015383f, 0.009697f, 0.018335f, 0.012959f, 0.015628f, -0.035671f, -0.004209f, -0.018481f, 0.026816f, -0.029640f, 0.005724f, 0.002584f, 0.052466f, -0.032479f, -0.009531f, -0.033405f, -0.007241f, -0.032996f, -0.027736f, -0.020019f, 0.010323f, -0.035491f, -0.025757f, -0.038592f, -0.009872f, -0.005823f, -0.011826f, -0.017450f, -0.043013f, 0.011220f, -0.030410f, 0.012264f, -0.031905f, - 0.039281f, 0.006032f, 0.017596f, -0.007607f, -0.037089f, 0.019839f, 0.011482f, -0.012499f, 0.019834f, 0.027752f, -0.015027f, -0.039964f, -0.021407f, 0.053519f, -0.022891f, -0.001765f, 0.001368f, -0.009102f, 0.011760f, 0.034681f, 0.006148f, 0.014741f, -0.011182f, 0.024807f, 0.000342f, 0.019538f, 0.005955f, 0.006622f, -0.000609f, 0.001989f, 0.042451f, 0.012852f, 0.101634f, -0.062052f, 0.039607f, 0.055683f, -0.014714f, 0.001256f, 0.028732f, -0.020833f, -0.006096f, 0.046622f, 0.018480f, -0.007788f, 0.024759f, -0.010607f, -0.045153f, -0.033420f, 0.011344f, 0.001805f, -0.060329f, -0.016803f, -0.006158f, -0.031348f, 0.016116f, 0.009384f, -0.020359f, -0.016693f, -0.012289f, 0.001758f, 0.005568f, 0.012766f, -0.010575f, 0.001497f, 0.007475f, -0.003345f, -0.013396f, 0.003696f, 0.002834f, 0.004224f, 0.012568f, 0.002232f, -0.007621f, 0.001016f, 0.014561f, 0.012887f, 0.006292f, -0.014425f, -0.000289f, 0.026545f, -0.007548f, -0.005600f, 0.014759f, -0.014417f, -0.024929f, -0.007112f, 0.001399f, -0.003244f, -0.012777f, -0.003935f, -0.000736f, -0.014128f, -0.002892f, 0.001518f, -0.003880f, -0.014660f, - -0.024139f, 0.009203f, 0.026052f, 0.009420f, -0.000486f, 0.000953f, -0.004810f, -0.015374f, -0.012229f, 0.057072f, 0.063712f, 0.001445f, 0.046140f, 0.045971f, -0.001972f, 0.021016f, -0.045149f, -0.013576f, 0.040993f, 0.004444f, 0.040478f, 0.056485f, 0.046568f, -0.008647f, 0.030569f, -0.046213f, -0.072491f, -0.030632f, -0.026793f, 0.018218f, 0.000648f, 0.019453f, 0.020884f, 0.044636f, 0.034580f, 0.012515f, -0.034308f, -0.003590f, 0.035322f, 0.011855f, -0.016588f, 0.023057f, 0.048503f, -0.004747f, 0.017200f, -0.038513f, 0.019240f, -0.030261f, -0.007907f, -0.018968f, -0.040153f, 0.025578f, 0.003281f, 0.012818f, 0.049100f, -0.025637f, -0.029115f, 0.018224f, 0.050850f, -0.038935f, -0.026053f, 0.017053f, -0.012348f, 0.071859f, 0.053134f, -0.049422f, -0.018489f, -0.038929f, 0.002542f, 0.044104f, -0.019745f, -0.029498f, -0.013354f, 0.003335f, 0.010853f, -0.035438f, 0.009030f, 0.073239f, 0.005631f, -0.047853f, -0.073725f, 0.060454f, -0.071113f, -0.059332f, -0.034754f, -0.030020f, -0.051372f, 0.014465f, 0.013445f, 0.083766f, 0.021085f, 0.037175f, -0.018079f, 0.040369f, -0.004593f, -0.016392f, - 0.015263f, 0.002424f, -0.003594f, 0.041386f, 0.005423f, 0.021463f, 0.026180f, 0.014638f, 0.031336f, -0.008270f, 0.008606f, -0.006166f, -0.002347f, -0.006128f, -0.026024f, -0.018786f, -0.021471f, 0.025507f, 0.009028f, 0.022781f, 0.027613f, -0.005487f, 0.016589f, 0.036234f, 0.012945f, -0.010943f, 0.018486f, 0.021981f, 0.007435f, -0.004439f, -0.025795f, -0.022634f, 0.023179f, 0.010370f, 0.015428f, 0.031053f, 0.067668f, 0.029684f, 0.017085f, 0.013016f, 0.019151f, -0.009508f, -0.002257f, 0.034688f, -0.021943f, 0.012461f, -0.012192f, 0.011779f, 0.006858f, -0.066170f, -0.038364f, -0.049799f, 0.013034f, 0.027418f, 0.009592f, 0.042157f, 0.037876f, 0.053506f, 0.016541f, 0.058438f, 0.026046f, 0.037659f, -0.018715f, -0.007487f, -0.018801f, -0.045323f, -0.032534f, -0.070022f, -0.041567f, -0.013604f, -0.040833f, 0.008812f, -0.001687f, -0.001240f, 0.016596f, 0.013549f, 0.006255f, 0.033642f, -0.008580f, -0.028217f, 0.040403f, 0.003561f, -0.053624f, -0.023274f, -0.005853f, -0.064536f, -0.048903f, -0.047656f, 0.004341f, 0.022774f, 0.006176f, -0.024887f, -0.003164f, 0.026733f, 0.016529f, 0.063887f, - 0.011908f, -0.086319f, -0.028749f, -0.015066f, 0.013723f, 0.013283f, -0.009934f, -0.023019f, 0.031896f, -0.047883f, -0.008875f, -0.038423f, 0.028978f, -0.075352f, -0.046596f, -0.061480f, -0.049274f, 0.002198f, -0.027787f, -0.021607f, -0.049433f, 0.024717f, 0.088810f, -0.002445f, 0.057409f, -0.032004f, 0.014081f, -0.042315f, -0.000172f, 0.063113f, 0.015080f, -0.030049f, 0.003354f, 0.024205f, -0.042724f, -0.066323f, -0.035627f, 0.016778f, -0.051476f, 0.021974f, -0.000759f, -0.001574f, 0.033038f, 0.017103f, -0.008818f, 0.038196f, 0.038182f, 0.030503f, -0.010072f, -0.010689f, -0.006689f, -0.000597f, 0.026614f, 0.018991f, 0.013442f, 0.000542f, 0.027756f, 0.015249f, 0.004282f, 0.003512f, 0.020565f, -0.008698f, -0.007026f, 0.014183f, -0.021367f, 0.019190f, -0.018558f, -0.018402f, -0.021841f, 0.038160f, 0.023844f, 0.035466f, 0.013034f, 0.013302f, 0.003162f, 0.002389f, 0.017395f, -0.026799f, -0.042973f, 0.003278f, 0.012018f, 0.010651f, -0.017585f, 0.049191f, 0.020090f, 0.049624f, -0.081142f, 0.035119f, 0.060859f, -0.005982f, 0.070105f, -0.037249f, -0.107122f, -0.055461f, -0.000816f, -0.010742f, - 0.011745f, -0.038412f, 0.036927f, 0.052243f, -0.047170f, 0.041483f, -0.025877f, -0.031639f, -0.074831f, -0.030587f, -0.043037f, -0.028431f, -0.034440f, 0.033652f, 0.004951f, -0.067051f, -0.085850f, 0.064724f, 0.014578f, 0.023158f, -0.020136f, 0.005124f, -0.023293f, 0.000545f, 0.019627f, 0.029826f, 0.027020f, 0.072475f, 0.002251f, -0.052140f, 0.070294f, -0.007527f, -0.018358f, -0.032754f, 0.029625f, -0.057971f, -0.038952f, 0.032766f, -0.030182f, -0.045175f, -0.056661f, -0.049668f, -0.010661f, 0.006542f, 0.005295f, -0.015397f, 0.060955f, 0.051855f, -0.005075f, -0.029703f, -0.051085f, -0.058655f, 0.014396f, 0.012260f, -0.011579f, -0.005814f, 0.083706f, 0.005556f, -0.024490f, 0.036093f, 0.017335f, -0.055300f, 0.043880f, 0.079615f, -0.087446f, 0.141104f, 0.037688f, 0.040666f, 0.015441f, 0.040953f, -0.011246f, -0.087292f, 0.059688f, 0.004975f, -0.010861f, 0.061936f, -0.073642f, 0.012772f, 0.012917f, -0.000540f, -0.007135f, 0.002970f, -0.005766f, -0.020481f, 0.010847f, 0.021634f, -0.018148f, -0.002470f, -0.026836f, -0.030914f, 0.039889f, -0.008995f, -0.019599f, 0.008988f, -0.010695f, -0.024651f, - -0.044398f, -0.010383f, -0.015106f, 0.038656f, -0.037256f, -0.003964f, 0.045727f, -0.009901f, 0.036537f, -0.013284f, -0.031995f, 0.016398f, -0.006471f, -0.015441f, 0.018904f, 0.004215f, 0.050366f, -0.007012f, -0.000811f, 0.033184f, 0.101236f, 0.044476f, 0.002376f, -0.033871f, 0.048369f, -0.000786f, 0.003516f, -0.023195f, 0.044144f, -0.051172f, 0.037395f, 0.035938f, 0.037874f, 0.018333f, -0.013836f, 0.050198f, 0.062964f, -0.012811f, 0.026040f, -0.038982f, 0.063354f, 0.027049f, 0.021242f, -0.040339f, -0.088188f, 0.017622f, -0.026974f, -0.020123f, -0.035732f, -0.045084f, 0.027353f, 0.012285f, -0.021838f, 0.005098f, 0.002223f, -0.023791f, -0.107763f, -0.006675f, -0.022797f, -0.011007f, -0.001550f, 0.076081f, 0.052013f, -0.025289f, 0.019703f, -0.050025f, 0.005704f, 0.037548f, -0.057124f, -0.053035f, -0.043543f, 0.068881f, -0.049361f, 0.014379f, 0.055353f, -0.074426f, -0.069112f, 0.063804f, 0.050783f, 0.053571f, 0.071557f, 0.026504f, -0.091394f, 0.020698f, 0.027107f, -0.008019f, 0.149417f, -0.015381f, -0.022693f, -0.067435f, -0.058307f, 0.030177f, -0.053744f, 0.035133f, 0.012251f, 0.039730f, - 0.081854f, -0.052425f, -0.035780f, 0.099698f, -0.060662f, -0.066935f, 0.043807f, -0.086229f, 0.062780f, -0.065549f, 0.014963f, 0.022644f, -0.047519f, 0.019790f, -0.055171f, 0.038475f, 0.070372f, -0.002800f, 0.012202f, 0.014537f, 0.002595f, -0.021427f, -0.020297f, -0.004530f, 0.020373f, -0.009004f, 0.013731f, -0.014203f, -0.043686f, 0.018795f, 0.003813f, 0.029764f, 0.014656f, 0.026004f, -0.008896f, -0.008555f, -0.043345f, 0.030473f, -0.005915f, -0.039420f, 0.009162f, 0.081466f, 0.022426f, -0.020682f, 0.023839f, 0.043923f, -0.021806f, 0.004899f, 0.033504f, -0.016762f, 0.033400f, 0.011498f, -0.010621f, -0.052224f, 0.008771f, -0.019885f, -0.001396f, 0.065381f, -0.029963f, 0.003580f, -0.017374f, 0.022611f, 0.075136f, 0.006461f, -0.063727f, 0.091459f, 0.022366f, -0.005884f, 0.065259f, 0.032442f, 0.052837f, 0.019863f, -0.078024f, -0.017014f, -0.029031f, 0.037020f, 0.091399f, -0.057596f, 0.014968f, -0.027545f, 0.040848f, 0.046850f, -0.061263f, 0.051544f, -0.049152f, -0.044257f, 0.022878f, 0.042465f, 0.002075f, 0.014233f, 0.033202f, -0.049601f, 0.044257f, 0.003665f, 0.053952f, -0.009302f, - -0.013880f, 0.017721f, 0.079757f, -0.035448f, 0.064496f, -0.030837f, 0.013241f, 0.017025f, 0.064453f, -0.003532f, -0.003869f, 0.022319f, 0.096997f, 0.006619f, -0.075291f, -0.005892f, -0.090705f, 0.054907f, 0.000497f, 0.149447f, 0.032241f, -0.043359f, -0.012940f, 0.033244f, -0.032717f, 0.052660f, 0.097654f, 0.066927f, 0.001754f, 0.028597f, 0.042462f, -0.004535f, -0.045027f, -0.005959f, -0.010027f, -0.155478f, 0.097378f, 0.072719f, 0.067103f, 0.016403f, -0.067203f, -0.019930f, 0.051119f, 0.026612f, 0.044549f, 0.024137f, -0.148912f, -0.053071f, 0.091820f, 0.025427f, 0.029792f, 0.079115f, -0.055666f, -0.001598f, -0.007666f, 0.044901f, 0.011477f, -0.004207f, -0.012003f, 0.035425f, -0.009086f, -0.040504f, 0.020324f, -0.019444f, -0.023204f, 0.021306f, 0.031099f, -0.022720f, -0.007066f, -0.000657f, 0.024541f, -0.031132f, 0.025488f, -0.027485f, 0.013119f, -0.047639f, -0.048855f, 0.048688f, 0.006360f, 0.004452f, -0.005567f, -0.035155f, -0.010835f, 0.032663f, 0.003522f, 0.011213f, 0.054116f, -0.008204f, -0.041058f, -0.003780f, -0.023338f, 0.018637f, 0.020245f, -0.019372f, -0.016600f, 0.021526f, - 0.044788f, 0.056866f, 0.058635f, -0.036319f, 0.059662f, -0.054675f, 0.009160f, 0.028527f, -0.028133f, 0.003971f, 0.011169f, -0.014980f, -0.029378f, -0.055297f, 0.084112f, -0.018906f, -0.016648f, -0.028120f, -0.004784f, -0.011632f, 0.027290f, -0.056640f, -0.016400f, -0.035456f, 0.012081f, -0.035639f, 0.034105f, -0.000258f, 0.017535f, -0.039293f, -0.071635f, 0.003358f, -0.052385f, -0.054656f, 0.024667f, -0.041928f, -0.035554f, 0.069142f, -0.025677f, -0.040447f, 0.005096f, -0.041587f, 0.019427f, 0.026108f, -0.007694f, -0.033965f, -0.009994f, 0.019794f, 0.017341f, -0.015444f, -0.001545f, 0.060978f, -0.010949f, -0.037634f, -0.047883f, -0.006875f, -0.021037f, -0.071958f, 0.067440f, 0.023355f, -0.082710f, 0.050885f, -0.003758f, -0.034639f, 0.158828f, 0.089501f, 0.073089f, 0.038848f, 0.022251f, -0.037713f, 0.005801f, 0.017492f, 0.018648f, 0.007128f, 0.069502f, 0.015604f, -0.020720f, -0.034256f, -0.140651f, 0.028698f, 0.018396f, -0.000678f, -0.027510f, -0.052938f, -0.010541f, -0.034098f, -0.030616f, -0.002184f, 0.044315f, -0.030413f, 0.076717f, 0.011279f, -0.015393f, -0.005358f, -0.006609f, 0.006139f, - 0.032234f, -0.012515f, 0.008027f, 0.022705f, 0.007749f, 0.004394f, 0.017598f, -0.028612f, 0.013859f, 0.005202f, 0.044852f, -0.015572f, -0.011299f, -0.012318f, -0.011426f, -0.035618f, -0.019508f, 0.013067f, -0.039034f, 0.029108f, -0.007970f, -0.018529f, 0.026668f, 0.017080f, 0.022413f, -0.008327f, -0.003634f, 0.003071f, 0.004185f, -0.024531f, 0.012808f, 0.001860f, -0.001277f, -0.002113f, 0.015945f, -0.072755f, 0.122913f, 0.015708f, 0.040310f, 0.022007f, -0.030431f, 0.022903f, 0.034646f, 0.008685f, -0.003487f, -0.029635f, -0.005170f, 0.008450f, -0.013850f, -0.010476f, 0.005188f, 0.013872f, 0.035783f, -0.024679f, 0.015071f, 0.001540f, 0.028564f, -0.009988f, 0.005687f, 0.009491f, -0.032740f, 0.026745f, 0.004348f, 0.006698f, 0.009599f, 0.009949f, -0.020737f, 0.022249f, -0.017872f, 0.004646f, 0.021237f, -0.011437f, 0.020821f, -0.008864f, 0.026236f, 0.020446f, 0.011851f, -0.032380f, 0.024334f, 0.018581f, 0.014821f, 0.040627f, -0.038911f, -0.003283f, -0.000323f, -0.008156f, 0.011948f, -0.019993f, -0.032233f, 0.022267f, 0.025064f, 0.012688f, -0.003055f, 0.005454f, -0.003440f, 0.013162f, - -0.011288f, 0.005430f, -0.023933f, 0.021961f, -0.037176f, 0.035274f, 0.019622f, -0.011642f, -0.000498f, 0.014739f, 0.001061f, 0.013230f, 0.000283f, 0.001642f, -0.001231f, -0.012458f, 0.018046f, 0.024602f, -0.021540f, -0.004787f, 0.004525f, 0.013730f, -0.009779f, -0.010100f, 0.002863f, 0.004638f, -0.002441f, 0.002628f, -0.007914f, 0.003174f, 0.010068f, -0.007651f, 0.002154f, 0.006106f, -0.008112f, 0.007140f, 0.008819f, -0.000619f, -0.002834f, -0.004006f, 0.001720f, 0.018447f, -0.006870f, 0.002558f, -0.016945f, 0.001206f, 0.018810f, -0.013118f, 0.014002f, -0.006276f, 0.001065f, 0.031338f, -0.005461f, 0.000810f, -0.000658f, -0.009415f, 0.016127f, 0.006799f, 0.006926f, 0.006802f, -0.005096f, 0.004360f, 0.017662f, -0.004953f, 0.012025f, -0.007644f, -0.001341f, 0.023756f, -0.098022f, -0.228373f, -0.036483f, 0.133749f, 0.121408f, 0.298934f, 0.156115f, -0.080359f, -0.024674f, -0.165421f, -0.280894f, -0.019319f, -0.127634f, -0.017713f, 0.204734f, 0.087490f, 0.158184f, 0.242853f, -0.028209f, -0.035491f, -0.123282f, -0.209626f, -0.166691f, -0.010673f, -0.062611f, -0.023665f, 0.174255f, 0.055321f, - 0.113363f, 0.206015f, 0.033779f, -0.000770f, 0.021360f, -0.125196f, -0.189621f, 0.032654f, -0.195945f, -0.128150f, 0.043544f, -0.019646f, 0.031904f, 0.252302f, 0.028987f, 0.096757f, 0.206007f, -0.040979f, 0.006438f, 0.045979f, -0.198513f, -0.165536f, -0.058633f, -0.225936f, -0.087478f, 0.028842f, 0.041855f, 0.155688f, 0.219280f, 0.156312f, 0.110359f, 0.096142f, -0.036464f, -0.132343f, -0.108651f, -0.163630f, -0.171894f, -0.073681f, -0.043512f, 0.001174f, 0.144373f, 0.172180f, 0.053967f, 0.134548f, 0.039311f, -0.042576f, 0.028385f, -0.093751f, -0.130272f, -0.025498f, -0.060470f, -0.040512f, 0.073566f, -0.002720f, 0.051333f, 0.091401f, -0.024989f, -0.002011f, 0.000097f, -0.046268f, -0.014149f, -0.003192f, -0.034591f, 0.038708f, 0.014139f, -0.009021f, 0.063356f, 0.020166f, -0.008949f, 0.060770f, -0.021233f, -0.065143f, 0.001412f, -0.099512f, -0.069517f, 0.021490f, -0.066077f, 0.014142f, 0.076845f, 0.056360f, 0.104703f, 0.114014f, 0.041673f, 0.040296f, -0.004644f, -0.094051f, -0.131264f, -0.135253f, -0.141089f, -0.089798f, -0.006609f, 0.045282f, 0.097707f, 0.169365f, 0.181935f, 0.150873f, - 0.118291f, -0.007121f, -0.110893f, -0.159294f, -0.203409f, -0.207742f, -0.110578f, -0.033492f, 0.087098f, 0.183754f, 0.166693f, 0.100271f, 0.074533f, 0.021533f, -0.015302f, -0.025049f, -0.073147f, -0.084946f, -0.063512f, -0.053518f, -0.038027f, -0.008131f, 0.007888f, 0.030157f, 0.045588f, 0.045935f, 0.044563f, 0.039099f, 0.018218f, -0.002570f, -0.014058f, -0.013683f, -0.009907f, -0.005530f, -0.004375f} - }, - { - {-0.008213f, 0.008653f, 0.002179f, -0.004681f, -0.002074f, -0.010448f, -0.002783f, 0.008781f, -0.004618f, -0.003361f, 0.002718f, -0.001348f, -0.000311f, 0.000574f, -0.002777f, -0.002226f, 0.010643f, 0.005189f, -0.001274f, 0.000542f, -0.001561f, -0.003149f, 0.001483f, 0.003820f, 0.005866f, -0.001469f, 0.002256f, 0.002723f, -0.009384f, -0.002860f, 0.000002f, -0.001843f, 0.005789f, 0.000549f, -0.001959f, 0.005216f, -0.003939f, 0.001779f, 0.008079f, -0.004446f, 0.000532f, 0.001103f, 0.006138f, -0.002334f, 0.008458f, -0.011941f, -0.004347f, 0.005229f, -0.002354f, -0.010118f, 0.000744f, 0.002059f, 0.003393f, 0.003491f, -0.001081f, -0.004348f, 0.000391f, -0.003944f, -0.002681f, 0.001200f, 0.005035f, 0.004640f, -0.006745f, 0.005965f, -0.007383f, 0.006623f, 0.000390f, 0.005808f, -0.002244f, -0.004785f, -0.002113f, 0.003908f, -0.000741f, -0.000974f, -0.001162f, 0.005407f, -0.005806f, 0.003000f, 0.001431f, 0.001460f, 0.001854f, 0.004325f, 0.001388f, -0.002775f, -0.003133f, -0.001733f, 0.002357f, -0.000508f, -0.002299f, 0.000444f, -0.002777f, -0.000615f, -0.000190f, -0.002842f, -0.001132f, -0.001602f, - 0.000378f, 0.001530f, -0.001915f, -0.001380f, 0.000797f, -0.000394f, -0.002741f, -0.000029f, 0.001498f, -0.001069f, -0.000136f, 0.000559f, -0.000253f, 0.001074f, 0.000784f, 0.000078f, -0.002071f, -0.000696f, 0.000078f, -0.000942f, 0.000057f, -0.000232f, -0.001451f, 0.000813f, -0.002460f, -0.028477f, 0.009350f, -0.010351f, -0.004124f, -0.008475f, -0.008702f, 0.004948f, -0.002902f, -0.007348f, -0.003948f, 0.009996f, 0.014856f, -0.008124f, -0.003024f, -0.000721f, -0.010699f, -0.010053f, 0.000754f, -0.001016f, 0.006537f, 0.002203f, 0.004869f, -0.004288f, -0.002685f, -0.005556f, 0.001566f, 0.009589f, 0.004163f, 0.001865f, -0.006182f, 0.004689f, 0.001418f, 0.002870f, -0.004035f, 0.000358f, 0.001417f, 0.002155f, -0.005483f, -0.004010f, 0.001501f, -0.007569f, -0.007738f, 0.003321f, 0.005870f, -0.006598f, -0.003320f, -0.002543f, 0.000475f, 0.005852f, 0.004718f, 0.002042f, 0.000890f, 0.015134f, 0.005943f, -0.004779f, 0.005893f, 0.004198f, -0.004205f, 0.007150f, -0.002664f, -0.001793f, -0.000040f, -0.003117f, 0.006354f, -0.003577f, 0.001669f, 0.003830f, 0.003069f, -0.005655f, 0.002228f, 0.001056f, - 0.001145f, -0.001978f, -0.002804f, -0.001178f, 0.008876f, 0.000591f, -0.002631f, -0.001903f, 0.002095f, -0.007987f, 0.001547f, 0.004756f, -0.000309f, 0.003079f, -0.001759f, -0.002878f, 0.001930f, 0.001759f, -0.000745f, 0.002993f, 0.001542f, -0.000854f, 0.002124f, 0.002224f, 0.003719f, 0.000484f, 0.000013f, -0.000263f, -0.001119f, -0.001582f, -0.000160f, -0.000284f, -0.000990f, 0.001095f, -0.000352f, 0.003707f, 0.021669f, 0.008636f, -0.001513f, 0.000978f, 0.004964f, 0.002592f, -0.001469f, -0.009370f, 0.000300f, 0.008305f, -0.008527f, -0.000957f, -0.016001f, 0.004195f, 0.006513f, 0.000430f, -0.003814f, 0.011691f, 0.008220f, -0.007542f, 0.003640f, 0.000438f, -0.006612f, 0.010432f, 0.005751f, -0.000685f, 0.004212f, 0.009940f, -0.003086f, -0.002060f, 0.000662f, 0.000054f, 0.000235f, 0.002383f, 0.012209f, 0.002454f, 0.001820f, -0.019749f, -0.001047f, 0.000894f, 0.002356f, -0.008940f, 0.002065f, -0.007212f, -0.005535f, -0.007628f, -0.004984f, 0.000040f, 0.002290f, -0.004663f, 0.004653f, -0.011349f, -0.006519f, -0.000698f, -0.000154f, 0.003633f, -0.004549f, -0.001064f, -0.004120f, 0.002458f, - 0.006140f, -0.003721f, 0.000656f, -0.003222f, -0.000589f, 0.009519f, 0.007457f, -0.003014f, 0.006988f, -0.003356f, -0.005965f, -0.007453f, -0.000563f, -0.000697f, -0.005027f, 0.004534f, -0.000802f, 0.001290f, -0.000561f, -0.001660f, 0.000337f, -0.001075f, -0.004076f, -0.000263f, -0.006493f, 0.000729f, -0.003200f, -0.002092f, -0.005455f, 0.006320f, -0.001943f, 0.002152f, 0.004317f, 0.001709f, -0.002204f, -0.000514f, -0.002474f, -0.000184f, 0.001086f, -0.002434f, 0.002508f, -0.000208f, 0.000272f, 0.000359f, -0.000896f, 0.001473f, 0.000854f, 0.000462f, 0.000185f, 0.003573f, 0.001716f, -0.001154f, -0.002438f, -0.002223f, 0.002159f, 0.002907f, -0.000011f, 0.000740f, 0.034212f, -0.014876f, 0.002820f, -0.001243f, -0.006304f, 0.005442f, 0.009595f, -0.006218f, 0.010315f, -0.000558f, 0.011002f, 0.003057f, 0.003888f, -0.004730f, 0.006239f, 0.002419f, 0.006389f, -0.013449f, 0.007216f, -0.007948f, 0.002497f, -0.006674f, 0.008450f, -0.002295f, 0.008512f, -0.004989f, 0.003137f, -0.003266f, -0.000732f, -0.000365f, -0.000852f, 0.003355f, 0.017682f, 0.000794f, 0.005196f, -0.004880f, -0.008188f, 0.000359f, - 0.000165f, 0.000360f, 0.002697f, -0.005665f, 0.011601f, -0.000722f, 0.009726f, 0.000692f, -0.004197f, -0.005301f, -0.014575f, 0.007180f, 0.004757f, -0.006802f, 0.000767f, 0.005861f, 0.003112f, -0.016966f, 0.010150f, -0.000554f, 0.007218f, -0.010182f, -0.010977f, -0.005311f, -0.010692f, -0.001943f, 0.012373f, 0.002594f, -0.004732f, 0.000761f, 0.007002f, -0.002330f, -0.005608f, -0.002893f, -0.006290f, 0.004533f, -0.009540f, -0.001656f, -0.007318f, -0.002772f, -0.000027f, 0.008240f, 0.003868f, 0.000931f, 0.002571f, 0.010340f, 0.005426f, 0.001295f, 0.003778f, -0.002879f, -0.001140f, 0.000726f, 0.000198f, 0.001686f, 0.000870f, -0.001738f, 0.001018f, 0.003678f, -0.000244f, 0.000828f, 0.001366f, -0.001714f, -0.002371f, 0.002327f, -0.002838f, 0.003430f, 0.002011f, 0.003183f, 0.000085f, -0.001151f, 0.001937f, 0.003154f, 0.000823f, -0.001239f, 0.001026f, 0.008943f, -0.020976f, 0.004275f, -0.006614f, -0.019166f, -0.014773f, 0.007853f, 0.008759f, 0.011527f, -0.005706f, -0.002966f, 0.007936f, 0.003792f, 0.011860f, 0.003862f, -0.001323f, 0.001213f, 0.007570f, 0.014749f, -0.003776f, 0.004299f, - -0.000180f, 0.011951f, 0.002750f, -0.000731f, -0.002396f, -0.009120f, -0.013866f, 0.000150f, -0.001993f, 0.004168f, -0.000784f, 0.003265f, 0.002431f, 0.000846f, 0.000891f, 0.002761f, -0.004733f, 0.000531f, 0.006596f, 0.010316f, -0.005046f, 0.001226f, -0.004447f, -0.005927f, 0.008525f, -0.006541f, -0.016287f, -0.006405f, -0.004170f, 0.007827f, 0.000656f, 0.008636f, 0.007898f, -0.004184f, 0.000351f, -0.006759f, -0.000938f, -0.002902f, 0.010116f, -0.012737f, -0.000366f, 0.004293f, -0.013486f, -0.015182f, 0.000237f, 0.004692f, 0.009618f, -0.006703f, -0.016058f, 0.008385f, -0.014816f, 0.017329f, 0.009796f, 0.002853f, 0.007391f, -0.000174f, -0.007131f, 0.022028f, -0.002000f, 0.010662f, -0.000403f, 0.015409f, 0.010598f, 0.005634f, -0.001565f, -0.003003f, -0.005164f, -0.001903f, 0.002335f, 0.000560f, 0.004264f, -0.004355f, 0.002660f, -0.002313f, -0.001571f, -0.001635f, -0.001774f, 0.002093f, -0.001101f, -0.000036f, -0.003256f, -0.000148f, 0.002025f, 0.003718f, -0.003725f, -0.004564f, 0.000655f, 0.002023f, -0.000019f, 0.002432f, -0.001352f, 0.000288f, -0.001776f, -0.000575f, 0.001273f, 0.002299f, - 0.002830f, 0.001689f, -0.002205f, -0.046420f, 0.009548f, 0.002333f, -0.023320f, -0.029428f, -0.004744f, -0.022723f, 0.018448f, 0.005272f, -0.013704f, 0.000841f, -0.006385f, 0.002038f, -0.009361f, 0.001182f, -0.000548f, 0.000093f, 0.013001f, -0.004667f, -0.003048f, -0.005444f, -0.004802f, -0.012291f, -0.008242f, 0.012299f, -0.005098f, 0.007771f, -0.006870f, 0.003353f, 0.000195f, 0.007019f, -0.007173f, 0.005312f, -0.007205f, 0.003121f, -0.002764f, -0.004508f, 0.004445f, -0.011493f, 0.004400f, -0.005860f, -0.002109f, -0.008359f, 0.020149f, 0.009578f, 0.017666f, -0.007552f, 0.007447f, 0.005982f, -0.003515f, 0.003129f, -0.008375f, 0.008865f, 0.019375f, 0.015306f, -0.010675f, -0.002874f, 0.004538f, -0.007741f, -0.005192f, -0.013542f, -0.025317f, -0.008601f, 0.012982f, 0.004657f, -0.006247f, 0.002557f, 0.001333f, -0.006910f, -0.012024f, -0.012149f, 0.008633f, 0.000996f, -0.018606f, 0.001971f, 0.001801f, -0.000919f, -0.001387f, 0.006168f, 0.013499f, -0.001380f, -0.000009f, 0.001885f, -0.000007f, -0.003551f, -0.012297f, 0.004071f, 0.004154f, 0.002530f, 0.005756f, 0.003480f, -0.005257f, 0.001357f, - -0.003307f, 0.000687f, -0.002795f, -0.001130f, -0.003093f, 0.000080f, 0.000706f, -0.000372f, -0.002236f, -0.002181f, -0.000651f, 0.000960f, -0.000063f, 0.004524f, 0.001627f, 0.004223f, 0.004579f, 0.004949f, -0.005918f, -0.006017f, -0.002246f, 0.004546f, -0.001534f, 0.001670f, -0.001762f, 0.002512f, 0.002643f, 0.001702f, -0.002878f, -0.001628f, -0.018169f, -0.007565f, -0.004712f, 0.013745f, -0.003614f, 0.003276f, -0.014151f, -0.014768f, 0.000757f, 0.004305f, -0.008630f, -0.004940f, -0.008095f, 0.016843f, 0.003741f, -0.005618f, -0.012244f, -0.012092f, -0.011810f, -0.003272f, 0.005730f, 0.016919f, 0.005523f, 0.009572f, -0.007542f, 0.018017f, 0.010321f, 0.003338f, 0.000251f, 0.018530f, -0.010762f, 0.001791f, 0.005912f, 0.012555f, -0.020211f, -0.010280f, 0.008898f, 0.003599f, -0.002739f, 0.021163f, -0.009173f, 0.006019f, 0.012805f, 0.004006f, 0.002209f, 0.009355f, 0.003853f, 0.004681f, 0.004814f, 0.002071f, 0.005538f, -0.000259f, 0.008126f, -0.001814f, 0.019816f, -0.014298f, 0.016323f, 0.012964f, -0.011166f, 0.012839f, 0.002445f, 0.010921f, 0.011078f, -0.024079f, -0.000554f, -0.000914f, - -0.007181f, 0.003913f, -0.006468f, 0.006743f, -0.002652f, 0.015440f, -0.001587f, 0.002468f, 0.006401f, 0.004374f, 0.006200f, -0.009766f, -0.003199f, -0.009982f, -0.009195f, -0.005285f, 0.015038f, 0.002276f, -0.004658f, 0.004456f, 0.004222f, 0.001944f, -0.002414f, 0.001597f, -0.001675f, 0.005927f, 0.002343f, 0.001907f, -0.002737f, 0.001851f, -0.005495f, -0.000482f, 0.006639f, 0.003433f, -0.000941f, 0.002202f, 0.002431f, -0.001794f, 0.002871f, 0.001881f, 0.006449f, 0.003515f, -0.003398f, -0.001370f, -0.001965f, 0.001959f, -0.005501f, 0.001668f, 0.024269f, -0.006304f, -0.003663f, -0.005841f, 0.017309f, 0.009130f, 0.001927f, 0.006658f, -0.011562f, 0.025843f, 0.008617f, -0.001945f, 0.009807f, 0.012529f, -0.020943f, -0.001322f, 0.005061f, 0.002549f, 0.000054f, 0.017884f, -0.008474f, -0.010716f, 0.024571f, 0.003791f, -0.001657f, -0.002345f, 0.012878f, 0.001071f, -0.001779f, -0.002312f, -0.005866f, 0.006473f, -0.003608f, 0.008604f, 0.006067f, -0.015338f, -0.014544f, 0.001926f, 0.028984f, -0.000251f, 0.005977f, -0.017739f, 0.008879f, 0.011966f, -0.007305f, 0.008896f, 0.010996f, -0.017986f, - -0.010966f, -0.002177f, -0.023090f, -0.012198f, -0.013754f, 0.004161f, -0.004670f, -0.005042f, -0.002475f, 0.016384f, -0.022267f, 0.009963f, 0.004920f, -0.007151f, 0.013701f, -0.008633f, 0.001374f, -0.018665f, -0.000330f, 0.011438f, 0.010253f, 0.021447f, -0.025173f, -0.006177f, -0.027956f, -0.005919f, -0.000514f, -0.006573f, 0.003194f, -0.001278f, 0.025535f, 0.019878f, 0.011247f, -0.012594f, 0.000694f, 0.004979f, 0.012463f, 0.015382f, -0.000313f, 0.000158f, -0.002143f, 0.000415f, 0.008725f, -0.000332f, -0.000724f, -0.000261f, 0.000181f, 0.000528f, 0.001079f, 0.003620f, -0.003570f, -0.001039f, 0.003652f, 0.000698f, 0.003374f, -0.000027f, 0.000384f, -0.002839f, 0.004620f, 0.002937f, 0.000064f, 0.004427f, -0.002197f, -0.000185f, 0.004046f, 0.001178f, -0.000698f, -0.004929f, -0.000346f, 0.001226f, 0.000719f, -0.001698f, 0.005173f, 0.008792f, -0.001605f, -0.000146f, -0.003942f, 0.002972f, 0.016591f, -0.018419f, 0.000704f, -0.011251f, 0.031791f, -0.013302f, -0.007602f, 0.027574f, 0.020810f, 0.003937f, -0.038225f, -0.009243f, 0.017725f, 0.001531f, -0.001746f, -0.005354f, -0.002924f, -0.002884f, - 0.002772f, 0.006041f, 0.005508f, 0.005256f, 0.034047f, -0.006977f, -0.004834f, 0.000137f, 0.004525f, -0.010010f, 0.006058f, 0.003717f, -0.001178f, -0.011026f, -0.006914f, 0.012378f, 0.013218f, 0.024975f, 0.006442f, -0.010112f, 0.006367f, -0.000200f, 0.006451f, 0.000585f, 0.013876f, -0.011369f, -0.017063f, -0.017548f, 0.011652f, -0.004913f, 0.002498f, 0.004729f, -0.006238f, -0.001045f, 0.029582f, 0.010204f, -0.024812f, 0.017831f, 0.005732f, 0.030004f, -0.015462f, -0.014517f, 0.008720f, 0.016213f, 0.011188f, 0.006325f, -0.002673f, 0.001068f, 0.007763f, -0.009605f, -0.002720f, 0.000450f, 0.012761f, -0.009067f, 0.025561f, -0.000790f, -0.000275f, -0.013047f, -0.014782f, 0.029273f, 0.008738f, -0.023785f, -0.005523f, 0.020219f, 0.014004f, 0.002910f, 0.005118f, -0.012042f, 0.003884f, 0.003378f, 0.003990f, 0.002363f, 0.004421f, -0.005461f, -0.006733f, 0.001050f, -0.000138f, -0.005469f, -0.001792f, 0.005366f, 0.005195f, -0.007357f, 0.002054f, 0.000148f, 0.003343f, 0.004655f, -0.001182f, -0.001154f, -0.001781f, 0.003200f, 0.009031f, -0.006318f, 0.005006f, -0.000246f, 0.000285f, -0.003627f, - -0.000821f, -0.002652f, -0.001851f, 0.004477f, -0.001421f, -0.002312f, -0.005757f, -0.000013f, -0.003233f, -0.022948f, -0.019502f, -0.007727f, 0.006834f, 0.007009f, 0.034869f, 0.033825f, -0.004170f, 0.002513f, 0.001304f, 0.000018f, -0.000587f, -0.007287f, -0.023058f, -0.017783f, -0.009252f, 0.007841f, -0.006569f, -0.020144f, -0.005826f, 0.003519f, -0.001665f, -0.030751f, -0.009149f, 0.006485f, -0.003304f, 0.002617f, 0.001923f, 0.008890f, 0.013243f, 0.001896f, -0.009906f, 0.009618f, 0.010137f, 0.006967f, -0.000576f, 0.013074f, -0.026906f, 0.008671f, -0.023856f, 0.029235f, -0.021116f, 0.007773f, -0.022391f, -0.003985f, -0.024995f, -0.013429f, -0.015634f, -0.017056f, 0.011338f, -0.015038f, -0.002992f, 0.004873f, -0.000332f, -0.008166f, -0.005798f, -0.002893f, -0.024433f, 0.000480f, 0.001454f, 0.011732f, -0.038059f, 0.000573f, -0.001116f, 0.017366f, 0.021138f, -0.014769f, -0.008996f, 0.000473f, 0.016216f, -0.031695f, 0.019975f, -0.014440f, -0.009446f, 0.001192f, -0.030633f, -0.001925f, -0.002584f, -0.005126f, -0.005570f, -0.004168f, 0.030491f, 0.012122f, 0.006179f, -0.007695f, -0.006983f, -0.008038f, - 0.000854f, 0.007137f, -0.012360f, -0.000714f, -0.002234f, -0.003683f, 0.001540f, 0.008653f, -0.003464f, -0.006190f, 0.005632f, 0.003113f, -0.000210f, 0.005949f, 0.003352f, 0.004916f, -0.003318f, -0.004527f, 0.007624f, -0.005979f, 0.001911f, -0.007715f, -0.001462f, -0.000099f, -0.001543f, -0.003198f, -0.006499f, -0.007524f, -0.007569f, 0.001378f, -0.000456f, -0.002087f, -0.005462f, -0.005580f, -0.002131f, -0.003163f, 0.001664f, 0.007185f, 0.005527f, -0.018172f, -0.047108f, -0.018915f, -0.009086f, 0.008019f, 0.012537f, -0.015574f, -0.005977f, -0.019551f, -0.017244f, 0.008841f, -0.015167f, 0.015296f, 0.006159f, 0.010932f, -0.002000f, -0.015435f, 0.026487f, 0.010384f, 0.014768f, -0.019250f, 0.007924f, 0.003265f, -0.027905f, 0.016938f, 0.010119f, 0.000794f, -0.019052f, -0.007504f, 0.009155f, 0.009652f, -0.000622f, 0.003169f, 0.013286f, -0.013429f, -0.009916f, 0.015601f, -0.031781f, -0.031431f, -0.041140f, -0.009468f, 0.012980f, -0.036233f, -0.030194f, -0.018489f, 0.000406f, 0.012646f, 0.003930f, 0.003352f, 0.000426f, -0.010705f, -0.014543f, -0.034257f, 0.017721f, 0.004746f, 0.040957f, -0.010160f, - 0.000883f, -0.025803f, -0.030670f, 0.003546f, 0.019483f, 0.001025f, -0.019425f, 0.012355f, 0.004945f, 0.027720f, 0.002557f, 0.003186f, -0.013779f, -0.002927f, 0.011699f, -0.027878f, -0.051618f, -0.014693f, -0.013037f, 0.002414f, 0.013324f, -0.024990f, -0.012657f, 0.007669f, -0.008792f, -0.002367f, 0.007861f, -0.005133f, -0.004313f, 0.010209f, 0.002434f, -0.001334f, 0.005049f, 0.007838f, 0.009019f, 0.001366f, -0.006316f, -0.016746f, -0.001649f, -0.010377f, 0.002561f, 0.001407f, 0.001952f, 0.006369f, -0.005991f, 0.005748f, 0.008303f, 0.005219f, 0.004653f, 0.004303f, -0.012229f, -0.011528f, -0.004305f, -0.009995f, 0.000972f, 0.002288f, 0.003130f, 0.010915f, -0.002745f, 0.006771f, 0.004368f, -0.005237f, -0.002535f, -0.007423f, -0.009450f, -0.003028f, -0.012428f, -0.004504f, -0.002822f, -0.043973f, -0.033799f, -0.015555f, 0.023192f, -0.002035f, 0.039720f, 0.007843f, -0.003460f, -0.022312f, 0.007918f, 0.040939f, -0.042886f, -0.038590f, -0.012778f, -0.006417f, -0.026913f, 0.025469f, 0.007423f, 0.013803f, 0.016443f, -0.026919f, -0.003254f, 0.010814f, -0.017019f, 0.031775f, 0.000406f, 0.007161f, - -0.009313f, 0.007860f, -0.021062f, -0.011952f, -0.007293f, 0.011972f, 0.005588f, 0.019340f, -0.031740f, 0.002869f, -0.000340f, -0.023547f, 0.025647f, -0.015354f, -0.037765f, 0.007489f, 0.013455f, 0.002789f, -0.011369f, -0.002682f, -0.015810f, 0.002646f, 0.012698f, 0.005518f, -0.025879f, 0.010148f, -0.006011f, -0.028522f, -0.017051f, -0.035053f, 0.000624f, -0.005392f, -0.001098f, 0.004640f, 0.021381f, 0.026872f, 0.022104f, -0.011306f, -0.019617f, 0.006523f, -0.005136f, -0.003172f, -0.015220f, 0.027979f, 0.022828f, -0.004833f, 0.042590f, -0.027182f, 0.014053f, 0.027119f, 0.028833f, 0.000919f, 0.018242f, -0.011819f, -0.004956f, -0.023814f, -0.010386f, 0.014483f, -0.005131f, -0.018504f, 0.011382f, -0.010527f, 0.011966f, -0.005285f, -0.013010f, 0.006836f, -0.002802f, -0.007100f, -0.005836f, 0.005083f, -0.006485f, 0.004468f, 0.008336f, -0.008850f, 0.011404f, -0.001209f, -0.006665f, 0.004597f, 0.001101f, 0.001002f, -0.005603f, 0.007095f, -0.010718f, 0.003818f, 0.003592f, 0.000718f, -0.007273f, -0.000437f, -0.004457f, 0.005595f, 0.009338f, 0.021284f, 0.010289f, 0.017078f, -0.001200f, 0.000191f, - 0.008255f, -0.010330f, 0.002519f, -0.014133f, -0.006259f, 0.016024f, -0.038125f, 0.004795f, 0.000411f, -0.024113f, 0.003472f, -0.053606f, -0.046378f, -0.011120f, -0.000448f, 0.001972f, -0.001209f, -0.019073f, -0.000712f, -0.005471f, 0.017092f, 0.003322f, -0.001127f, 0.003195f, -0.040526f, 0.013973f, 0.007503f, 0.022448f, 0.009273f, 0.009713f, 0.026342f, 0.013127f, 0.003768f, 0.066016f, 0.014071f, 0.025388f, 0.034984f, 0.001621f, 0.024655f, 0.006175f, -0.013784f, 0.016029f, 0.001075f, 0.007709f, -0.013505f, 0.000987f, -0.008787f, 0.005585f, -0.008762f, 0.018560f, 0.002167f, -0.011572f, -0.014516f, 0.001974f, -0.039259f, 0.022763f, 0.015290f, -0.002011f, -0.003629f, 0.008939f, -0.010499f, -0.008656f, -0.012942f, -0.015533f, 0.012865f, -0.012394f, 0.021314f, 0.024897f, 0.024316f, 0.025952f, -0.006124f, -0.039357f, 0.000529f, 0.016596f, 0.039579f, -0.009218f, -0.001568f, 0.018788f, 0.027606f, 0.040821f, -0.005407f, 0.017977f, -0.012200f, -0.007016f, -0.032928f, -0.025599f, -0.011307f, -0.011625f, -0.009498f, 0.006837f, 0.001291f, -0.014084f, 0.015802f, 0.010043f, 0.012384f, 0.022442f, - 0.008843f, 0.008403f, -0.002828f, 0.000013f, -0.003476f, -0.006442f, 0.000033f, 0.004037f, -0.000144f, 0.011835f, 0.009299f, 0.005777f, -0.000852f, -0.009735f, 0.000382f, -0.006998f, -0.007924f, 0.004926f, 0.005813f, 0.001782f, -0.012316f, -0.002749f, -0.017825f, -0.004313f, 0.005527f, 0.008697f, -0.005876f, 0.007223f, -0.010311f, -0.011740f, -0.006178f, -0.007095f, 0.006248f, 0.003348f, -0.010580f, -0.007126f, 0.032425f, 0.042056f, -0.031104f, -0.032553f, -0.043040f, 0.039038f, -0.003932f, -0.015536f, 0.013670f, 0.013244f, 0.036568f, 0.030522f, 0.002186f, 0.033452f, 0.047452f, 0.013688f, -0.023803f, 0.022899f, -0.022007f, -0.012174f, -0.004342f, -0.015274f, -0.018425f, 0.010011f, -0.009155f, -0.008960f, -0.022281f, 0.051707f, 0.006728f, -0.027010f, 0.000303f, -0.003361f, 0.023327f, 0.024683f, 0.009921f, -0.015648f, 0.024868f, -0.006295f, 0.015480f, -0.046625f, 0.002803f, 0.019918f, -0.019825f, 0.007141f, -0.021570f, -0.017476f, 0.048875f, 0.020552f, 0.014988f, -0.002992f, -0.042639f, -0.010044f, 0.012802f, 0.009670f, 0.007317f, -0.009787f, 0.034571f, -0.023640f, 0.019373f, -0.010889f, - 0.012940f, 0.014271f, 0.027470f, 0.037039f, -0.042167f, -0.000696f, 0.022239f, 0.011041f, 0.031110f, 0.030221f, -0.042042f, 0.000536f, -0.011365f, -0.021564f, -0.001004f, -0.022570f, 0.009837f, 0.018029f, -0.008194f, 0.032322f, -0.006805f, -0.018643f, -0.022761f, 0.020280f, 0.023177f, 0.023109f, -0.005862f, 0.004372f, -0.000942f, -0.032513f, -0.031490f, -0.029474f, 0.018881f, 0.009724f, 0.006282f, 0.015286f, -0.000624f, -0.007915f, 0.022854f, 0.003498f, 0.000218f, 0.014181f, 0.022153f, 0.013592f, 0.002009f, 0.002792f, -0.006094f, 0.013646f, 0.006967f, 0.028274f, -0.002262f, 0.003772f, 0.019951f, 0.016287f, 0.005820f, -0.002381f, 0.012888f, -0.000007f, -0.002238f, 0.022412f, -0.017284f, 0.001336f, 0.013957f, 0.001471f, -0.003715f, -0.006241f, -0.002998f, 0.000349f, 0.015057f, 0.003161f, 0.001436f, 0.016575f, 0.012185f, -0.010032f, 0.032171f, 0.064487f, 0.002385f, -0.031390f, 0.008367f, -0.021120f, 0.013029f, -0.018405f, -0.019817f, 0.058520f, -0.045108f, 0.073576f, 0.044905f, -0.011280f, 0.014521f, 0.035377f, 0.004799f, -0.056100f, 0.021520f, -0.045491f, 0.010373f, 0.003697f, - -0.022681f, 0.000639f, -0.003417f, 0.031947f, -0.016516f, -0.001919f, -0.001622f, -0.010110f, 0.067770f, -0.004201f, -0.010626f, 0.008504f, 0.022567f, -0.023497f, -0.049433f, 0.038440f, -0.006585f, -0.003215f, 0.043722f, -0.026192f, -0.007577f, -0.031130f, 0.007861f, -0.021821f, 0.024512f, 0.022756f, 0.046544f, -0.013674f, 0.012713f, 0.031161f, -0.044928f, 0.005259f, -0.028781f, -0.044988f, -0.057682f, -0.030308f, -0.062338f, -0.069809f, -0.010171f, 0.004341f, -0.033202f, -0.035421f, 0.021404f, -0.002623f, -0.020220f, -0.038158f, 0.026986f, -0.020443f, 0.006692f, 0.034362f, -0.065461f, -0.018879f, -0.012405f, 0.028747f, 0.077286f, -0.036891f, 0.001796f, -0.023445f, -0.034974f, 0.016650f, -0.041766f, 0.033194f, 0.057468f, -0.016592f, -0.027561f, -0.028752f, -0.007737f, -0.006906f, 0.000058f, 0.018772f, 0.013325f, -0.015287f, 0.014840f, -0.001936f, 0.011559f, 0.000696f, -0.014584f, -0.003994f, 0.016454f, -0.028155f, 0.012700f, -0.014731f, 0.003343f, -0.011977f, -0.005174f, -0.016907f, 0.003306f, -0.016236f, -0.025906f, -0.012110f, 0.005424f, -0.018714f, -0.000624f, 0.005789f, 0.027199f, -0.015928f, - -0.009976f, 0.009280f, 0.010843f, -0.019907f, -0.013135f, 0.005888f, -0.006078f, -0.010502f, 0.018762f, 0.003619f, -0.015811f, 0.013788f, 0.003188f, -0.023177f, 0.003942f, -0.019055f, 0.020803f, -0.009511f, -0.030229f, -0.044698f, -0.033910f, 0.037338f, -0.030712f, 0.015013f, 0.035578f, 0.015116f, 0.022828f, -0.042643f, 0.061090f, 0.038339f, 0.033296f, -0.024734f, 0.043774f, -0.004947f, 0.028935f, 0.018897f, 0.006400f, 0.015647f, 0.021235f, 0.012798f, -0.007182f, -0.011070f, -0.009790f, 0.004242f, -0.029487f, -0.034923f, 0.019523f, 0.008444f, 0.011326f, -0.028772f, 0.007770f, 0.008497f, 0.021387f, 0.031690f, 0.047976f, -0.027326f, 0.007254f, 0.068045f, 0.014718f, 0.007087f, 0.006596f, -0.014317f, 0.005010f, 0.067729f, 0.019723f, 0.043772f, 0.012555f, -0.047389f, -0.019623f, -0.034593f, 0.098716f, 0.039816f, -0.038148f, -0.024200f, -0.034022f, 0.005442f, -0.022323f, -0.053959f, 0.012326f, -0.040954f, 0.060451f, -0.004587f, -0.050029f, 0.065518f, 0.053415f, 0.007258f, -0.014513f, 0.008636f, -0.030446f, 0.040188f, 0.072503f, -0.019793f, 0.034391f, 0.080655f, -0.012753f, -0.013611f, - -0.009225f, 0.048922f, -0.003578f, -0.027691f, -0.025578f, -0.026478f, -0.000428f, -0.003681f, -0.022664f, 0.001320f, -0.009497f, 0.024371f, 0.006212f, -0.024439f, -0.015059f, -0.027780f, -0.002944f, 0.003156f, -0.004417f, -0.019660f, -0.021257f, -0.015732f, 0.013352f, 0.021818f, 0.003527f, -0.024022f, -0.003382f, 0.029052f, 0.000249f, 0.026545f, 0.014339f, -0.015990f, -0.001351f, -0.024448f, 0.023295f, 0.009636f, -0.030525f, -0.058293f, 0.005298f, -0.004547f, -0.017416f, 0.018028f, -0.000138f, -0.010928f, -0.008179f, 0.004965f, 0.001569f, -0.003245f, -0.046790f, 0.018559f, -0.006425f, 0.046378f, -0.097044f, -0.066584f, 0.038380f, 0.018360f, 0.013882f, 0.032588f, -0.033120f, -0.043167f, -0.023776f, -0.035555f, 0.020074f, -0.038148f, 0.011113f, 0.025316f, 0.041588f, 0.001374f, 0.034851f, 0.020298f, 0.005719f, -0.011129f, -0.036486f, -0.025743f, 0.021239f, -0.044609f, 0.022690f, 0.005242f, 0.037977f, 0.028983f, -0.014227f, -0.055519f, -0.036110f, -0.003360f, -0.002792f, -0.014684f, 0.037981f, -0.067111f, -0.005222f, 0.002343f, -0.070297f, -0.001360f, -0.008676f, -0.005608f, 0.007501f, 0.041148f, - -0.040116f, -0.110463f, 0.041214f, 0.045020f, 0.026811f, 0.086169f, -0.070960f, -0.009100f, 0.047843f, 0.036626f, -0.044549f, -0.020679f, -0.012310f, 0.067880f, 0.013331f, 0.064795f, -0.093749f, 0.013687f, -0.111830f, -0.066945f, -0.064845f, 0.076864f, 0.024315f, -0.049553f, 0.045081f, 0.005294f, -0.043521f, 0.044250f, -0.065088f, -0.068254f, 0.010165f, -0.070885f, 0.021001f, -0.121102f, 0.018454f, 0.038257f, -0.051641f, 0.056766f, -0.025773f, -0.013642f, 0.037888f, -0.013054f, -0.010475f, -0.026982f, -0.002029f, 0.008979f, 0.020870f, -0.002446f, 0.019390f, 0.038259f, -0.028812f, -0.003088f, -0.022925f, 0.013663f, -0.015001f, -0.003903f, 0.008264f, 0.004775f, 0.005044f, -0.004958f, 0.039279f, -0.012974f, 0.003102f, 0.016931f, -0.034827f, -0.030472f, -0.033822f, -0.015610f, -0.056903f, -0.025982f, -0.020867f, 0.049057f, 0.009595f, 0.043680f, 0.018665f, 0.008926f, 0.019698f, 0.013935f, 0.001680f, 0.016628f, 0.003406f, 0.034054f, 0.083782f, 0.031006f, -0.030004f, -0.019586f, 0.011565f, -0.021272f, -0.024962f, -0.002962f, 0.038984f, -0.006759f, 0.007286f, -0.041432f, -0.008572f, 0.057261f, - -0.041777f, 0.031683f, 0.074762f, 0.037403f, -0.003179f, -0.014250f, -0.024590f, -0.047793f, -0.035165f, 0.041221f, -0.023481f, 0.038683f, 0.027856f, 0.013293f, 0.001815f, 0.015120f, -0.011933f, -0.060780f, -0.021107f, 0.043539f, 0.034466f, 0.036195f, -0.038488f, 0.066432f, -0.017110f, 0.025859f, -0.049097f, 0.044997f, 0.077347f, -0.015518f, -0.027583f, -0.002802f, 0.002811f, -0.017147f, 0.016875f, 0.033899f, -0.063515f, 0.041733f, 0.040383f, -0.009831f, 0.046817f, 0.024909f, 0.020175f, -0.029649f, 0.006088f, 0.041996f, -0.088575f, -0.078758f, -0.032898f, 0.020969f, -0.040814f, -0.119745f, 0.050149f, 0.032969f, -0.015615f, -0.020245f, 0.000837f, -0.006940f, -0.041127f, -0.109979f, -0.006743f, 0.078261f, 0.018887f, -0.013807f, -0.009443f, 0.016985f, 0.063917f, 0.051087f, -0.075243f, -0.030899f, 0.050030f, -0.010509f, -0.020263f, -0.085796f, -0.005130f, 0.047240f, 0.015534f, -0.013116f, 0.028925f, -0.010688f, 0.002939f, -0.032244f, -0.005450f, 0.019806f, 0.029416f, -0.016676f, -0.006226f, 0.006204f, 0.016944f, -0.010463f, 0.010371f, 0.001530f, -0.021154f, 0.012744f, 0.035784f, 0.006314f, - 0.010570f, 0.006848f, 0.016063f, -0.016794f, -0.029856f, 0.003027f, 0.031940f, -0.026170f, 0.011361f, -0.008752f, 0.002708f, -0.025380f, -0.049329f, -0.026602f, 0.018139f, 0.059970f, -0.006282f, 0.028400f, -0.039793f, -0.017278f, -0.026959f, 0.016698f, 0.011465f, 0.019013f, -0.013683f, -0.020373f, -0.001613f, 0.004423f, -0.001968f, 0.040818f, 0.054082f, 0.001274f, -0.060833f, 0.080718f, -0.022590f, -0.056231f, 0.050515f, -0.008032f, -0.030565f, 0.039061f, 0.010501f, -0.008091f, 0.032955f, -0.045026f, 0.042835f, -0.015213f, 0.001499f, -0.013043f, -0.011141f, -0.062798f, 0.024956f, -0.023928f, 0.009965f, -0.025133f, -0.002020f, -0.018719f, 0.018061f, -0.010938f, 0.068004f, 0.012078f, 0.044508f, -0.017224f, 0.011172f, 0.028169f, -0.011877f, 0.019490f, -0.003797f, 0.034009f, -0.001653f, -0.011337f, 0.053709f, -0.047877f, 0.026802f, 0.036738f, -0.021474f, 0.041572f, -0.025361f, -0.000969f, 0.021401f, -0.016176f, 0.048834f, 0.043750f, 0.009128f, 0.072763f, -0.044762f, -0.102593f, -0.017236f, -0.063412f, -0.041955f, 0.149979f, -0.003779f, 0.046054f, -0.006960f, -0.063215f, -0.001592f, 0.063042f, - 0.089234f, 0.054288f, 0.089886f, -0.048281f, -0.014425f, -0.021606f, -0.051269f, 0.034070f, -0.014372f, -0.031616f, -0.003276f, -0.062215f, -0.113773f, 0.028693f, 0.040093f, -0.033637f, 0.022709f, -0.007042f, -0.033923f, 0.036279f, 0.026713f, -0.013225f, 0.037357f, -0.013681f, -0.033309f, 0.017162f, -0.016529f, 0.044305f, 0.004186f, 0.003342f, 0.025029f, 0.008374f, -0.028184f, -0.011798f, 0.014535f, -0.009261f, 0.027576f, -0.038413f, 0.024823f, -0.040280f, -0.010248f, 0.010070f, -0.028588f, 0.018274f, 0.001168f, -0.042922f, -0.006940f, 0.002782f, -0.011513f, -0.000099f, -0.008007f, -0.031497f, 0.012918f, 0.009451f, -0.004995f, 0.031631f, 0.048513f, -0.026435f, -0.037799f, -0.002428f, -0.018015f, 0.052451f, 0.053905f, -0.031767f, -0.020084f, 0.045747f, -0.048133f, 0.057874f, -0.034869f, 0.008002f, -0.000071f, 0.006040f, -0.044402f, -0.006837f, -0.040156f, -0.033222f, 0.000163f, -0.013074f, -0.030281f, -0.012061f, 0.022288f, -0.025858f, 0.020544f, -0.012196f, 0.062234f, -0.028762f, 0.018627f, 0.003813f, -0.015406f, -0.049889f, -0.018262f, 0.038077f, 0.006928f, -0.012404f, 0.049916f, -0.036848f, - -0.037189f, -0.005037f, 0.047668f, -0.043260f, -0.005999f, 0.008536f, 0.012977f, -0.048185f, 0.014573f, 0.016789f, -0.017185f, -0.050390f, 0.000964f, -0.039122f, 0.016650f, 0.008942f, 0.015080f, -0.077044f, -0.032888f, 0.043997f, 0.118644f, -0.053657f, -0.007356f, 0.009585f, -0.019955f, -0.033456f, -0.000597f, 0.099096f, 0.022894f, -0.010067f, -0.008639f, -0.026157f, -0.006017f, -0.020024f, 0.038499f, 0.002046f, -0.024460f, -0.026317f, 0.001455f, 0.017801f, -0.039425f, 0.030878f, 0.009222f, 0.033660f, 0.001426f, 0.042803f, 0.018058f, -0.029773f, 0.040250f, 0.038369f, 0.094944f, 0.030244f, 0.007458f, 0.009837f, -0.034539f, 0.011647f, 0.031134f, 0.032142f, 0.011189f, -0.002153f, 0.001347f, -0.003773f, 0.012088f, 0.013452f, -0.003012f, 0.017355f, -0.004312f, -0.001667f, 0.032906f, 0.014029f, 0.005779f, -0.009693f, 0.009854f, 0.024919f, 0.026262f, 0.030115f, 0.011051f, 0.011134f, -0.016648f, -0.000002f, -0.000808f, 0.005623f, 0.017131f, -0.000567f, -0.013254f, 0.015528f, -0.013895f, 0.012946f, -0.000433f, 0.015255f, 0.002457f, -0.012266f, -0.003248f, 0.001162f, 0.003664f, 0.007673f, - -0.001596f, 0.005543f, 0.004287f, -0.000038f, -0.075290f, 0.100140f, 0.013881f, 0.022850f, 0.024072f, -0.023045f, -0.026588f, 0.001029f, -0.010215f, 0.014304f, 0.033016f, -0.046227f, 0.015374f, -0.009691f, 0.012083f, 0.011342f, 0.007887f, 0.026461f, 0.020691f, -0.019665f, 0.018605f, 0.016215f, -0.015978f, -0.027568f, 0.008490f, -0.009731f, -0.022894f, 0.013816f, 0.011314f, -0.001858f, -0.014958f, 0.000508f, -0.010896f, -0.005228f, 0.001091f, 0.006047f, 0.010563f, -0.020591f, -0.003046f, 0.016648f, -0.007367f, 0.014952f, 0.002867f, 0.010814f, 0.021759f, 0.006524f, -0.022181f, 0.002419f, 0.020760f, -0.011679f, -0.001073f, 0.010152f, -0.035279f, -0.002044f, -0.008718f, -0.032794f, 0.045499f, -0.011468f, -0.001897f, 0.027105f, 0.004632f, -0.020195f, 0.008013f, -0.019295f, -0.003920f, 0.015132f, -0.018193f, -0.006464f, 0.033629f, -0.035603f, 0.003811f, 0.003332f, 0.012217f, -0.015752f, 0.010812f, -0.005325f, 0.010075f, -0.013492f, 0.000622f, -0.003164f, 0.033870f, -0.015331f, -0.001542f, 0.008971f, -0.017135f, -0.001510f, 0.023440f, -0.004811f, 0.015103f, -0.010179f, -0.009740f, 0.001899f, - 0.009070f, -0.008786f, 0.017281f, 0.000036f, -0.003816f, -0.003604f, -0.005494f, -0.005281f, 0.014733f, -0.012407f, 0.014420f, 0.008080f, -0.019034f, 0.004754f, -0.001961f, -0.001435f, 0.011162f, -0.015632f, -0.006394f, 0.002511f, -0.010583f, 0.011181f, -0.010886f, -0.001384f, 0.017862f, 0.003433f, -0.003391f, 0.008377f, -0.009033f, -0.006929f, -0.004404f, 0.008932f, 0.014889f, -0.004368f, -0.004342f, 0.001878f, 0.023615f, -0.098983f, -0.201531f, -0.025846f, 0.126686f, 0.097436f, 0.279526f, 0.134552f, -0.065025f, -0.056792f, -0.132363f, -0.231898f, -0.029219f, -0.089830f, -0.027802f, 0.163941f, 0.104546f, 0.111600f, 0.213337f, -0.007346f, -0.047082f, -0.080300f, -0.210752f, -0.116272f, -0.037333f, -0.039054f, 0.005987f, 0.096122f, 0.074463f, 0.079045f, 0.148941f, 0.087212f, -0.054596f, 0.079471f, -0.083239f, -0.194360f, 0.025009f, -0.130399f, -0.181489f, 0.070970f, -0.015473f, -0.033517f, 0.223435f, 0.073292f, 0.059487f, 0.192614f, -0.020537f, -0.037725f, 0.058708f, -0.128853f, -0.160151f, -0.042969f, -0.137115f, -0.122517f, 0.026120f, 0.026726f, 0.055576f, 0.168072f, 0.148854f, 0.090239f, - 0.106800f, 0.020775f, -0.084015f, -0.090468f, -0.112032f, -0.154004f, -0.071860f, -0.038984f, -0.052263f, 0.046731f, 0.148655f, 0.097115f, 0.095895f, 0.078883f, -0.055400f, -0.000462f, 0.015784f, -0.127076f, -0.052335f, -0.031744f, -0.037136f, 0.058493f, 0.029966f, -0.007174f, 0.047815f, -0.010930f, -0.009825f, 0.008299f, -0.034219f, -0.025741f, 0.017046f, -0.021124f, 0.034678f, 0.043631f, -0.016115f, 0.023725f, 0.044421f, -0.025706f, 0.029130f, 0.014666f, -0.086501f, 0.015470f, -0.028021f, -0.093880f, 0.001543f, -0.053553f, -0.047966f, 0.068532f, 0.074108f, 0.071618f, 0.132545f, 0.042375f, 0.042241f, 0.045069f, -0.057886f, -0.115516f, -0.129069f, -0.165182f, -0.123104f, -0.037003f, 0.021628f, 0.100408f, 0.166213f, 0.184244f, 0.143832f, 0.104927f, 0.020740f, -0.097350f, -0.146794f, -0.179153f, -0.166575f, -0.086234f, -0.005495f, 0.047131f, 0.119328f, 0.110254f, 0.060115f, 0.060535f, 0.023434f, -0.001614f, -0.000477f, -0.018604f, -0.036689f, -0.030300f, -0.038134f, -0.045998f, -0.034071f, -0.025247f, -0.007101f, 0.012284f, 0.030008f, 0.036330f, 0.038368f, 0.031591f, 0.017545f, 0.004539f, - -0.003982f, -0.005532f, -0.003378f, -0.001784f}, - {-0.001968f, 0.005007f, 0.008669f, -0.006482f, -0.005609f, -0.008671f, 0.007847f, 0.003909f, 0.000680f, 0.011610f, -0.001166f, -0.000149f, -0.003556f, -0.002877f, 0.002516f, -0.003110f, -0.006057f, 0.003402f, 0.000978f, 0.009696f, 0.013251f, -0.003455f, -0.007804f, -0.009612f, -0.000610f, -0.005498f, -0.005299f, -0.003636f, -0.000743f, -0.007657f, 0.007366f, -0.002745f, -0.002897f, -0.005067f, -0.003738f, 0.001409f, 0.008277f, -0.000867f, -0.002395f, 0.002499f, -0.008141f, 0.006100f, -0.005080f, -0.018250f, 0.009045f, 0.006010f, 0.010048f, 0.010424f, 0.001981f, 0.005487f, -0.005449f, 0.001544f, 0.007898f, 0.000612f, -0.000099f, -0.001906f, -0.001054f, 0.004237f, -0.003858f, -0.002784f, 0.000194f, 0.004028f, -0.003350f, -0.004169f, -0.006107f, 0.007806f, 0.003097f, 0.000961f, -0.001907f, -0.007817f, -0.000274f, 0.005838f, 0.003624f, -0.001117f, -0.001484f, 0.005848f, -0.000715f, -0.000431f, -0.002553f, -0.002411f, -0.003576f, -0.004231f, 0.000260f, 0.000890f, 0.002005f, -0.004354f, -0.001728f, 0.002418f, -0.003019f, 0.002611f, 0.000702f, 0.001169f, -0.001132f, -0.000073f, 0.000563f, 0.001273f, - 0.000316f, -0.000508f, 0.000794f, -0.000556f, -0.001492f, -0.000484f, -0.002467f, 0.001634f, 0.000836f, -0.000705f, 0.000030f, -0.001115f, 0.001463f, 0.001512f, 0.000483f, 0.000150f, 0.000564f, 0.000536f, -0.001537f, 0.000055f, -0.000304f, -0.000374f, -0.000605f, -0.000207f, 0.000853f, -0.027401f, 0.014231f, -0.001389f, 0.000364f, 0.004922f, 0.006953f, -0.010236f, -0.001338f, -0.001874f, 0.005775f, 0.002169f, -0.006279f, 0.019415f, -0.002128f, -0.001251f, 0.008616f, 0.007063f, 0.002282f, 0.004887f, 0.015843f, -0.007908f, 0.000458f, -0.004054f, 0.001550f, -0.004935f, 0.000357f, 0.000451f, 0.001747f, -0.008865f, 0.000720f, -0.002164f, -0.003356f, -0.000424f, 0.005506f, -0.003102f, 0.005117f, 0.007456f, -0.012980f, 0.001698f, -0.005299f, -0.001478f, -0.008006f, 0.003929f, -0.004766f, -0.000859f, -0.002707f, -0.008145f, 0.003059f, -0.005481f, 0.003658f, 0.001983f, -0.004042f, -0.005943f, 0.000154f, 0.005426f, 0.004085f, 0.009900f, 0.004564f, -0.004350f, -0.012251f, -0.000870f, 0.002121f, 0.015356f, -0.004811f, -0.002391f, -0.000204f, -0.003054f, -0.008064f, -0.003882f, -0.007509f, -0.001060f, - 0.006170f, -0.001456f, 0.007352f, 0.004704f, 0.003784f, 0.005309f, 0.000934f, -0.009690f, -0.002284f, -0.006256f, -0.003975f, -0.010756f, -0.000395f, -0.003105f, 0.001411f, 0.002847f, 0.001236f, -0.001649f, -0.002211f, 0.000311f, 0.002796f, -0.002470f, -0.000695f, 0.000010f, -0.000904f, -0.000283f, -0.001020f, 0.001077f, -0.003712f, -0.001322f, -0.000902f, 0.000050f, -0.000391f, -0.000743f, -0.000022f, -0.005242f, 0.019951f, 0.010392f, -0.003260f, -0.008072f, 0.011406f, -0.013379f, -0.002256f, 0.007398f, -0.005545f, -0.004003f, -0.005782f, 0.013165f, -0.004685f, 0.004048f, 0.001067f, 0.003999f, 0.017981f, -0.018133f, 0.005345f, 0.009041f, -0.006080f, -0.016784f, -0.008786f, -0.001173f, 0.001000f, -0.002404f, -0.003082f, 0.006996f, 0.010158f, -0.000868f, -0.007290f, 0.000521f, -0.009224f, 0.002708f, -0.005814f, 0.003215f, 0.010850f, 0.003976f, -0.011015f, -0.000310f, 0.000614f, 0.016310f, 0.002998f, 0.008157f, -0.002406f, 0.003610f, 0.002806f, -0.019753f, 0.000264f, 0.009343f, 0.004279f, 0.010452f, -0.009316f, -0.005698f, -0.009276f, 0.002499f, 0.005866f, -0.001889f, 0.001965f, 0.000510f, - -0.004679f, 0.001758f, -0.003526f, 0.003146f, 0.002922f, -0.000674f, 0.004786f, 0.000999f, -0.000763f, 0.002141f, 0.011696f, 0.002165f, 0.006084f, 0.007655f, 0.004183f, 0.000193f, -0.000225f, -0.011003f, -0.000066f, 0.011749f, 0.004104f, 0.005219f, -0.000266f, -0.000797f, 0.007338f, -0.005500f, 0.000570f, -0.000489f, 0.003710f, 0.002012f, -0.000005f, -0.004768f, 0.000754f, -0.002399f, -0.000748f, 0.000835f, -0.001575f, -0.001107f, 0.001124f, -0.000116f, 0.003766f, 0.001622f, 0.003440f, 0.001697f, 0.001028f, 0.001913f, -0.001437f, -0.001862f, 0.000193f, 0.000251f, 0.004309f, 0.002695f, 0.000612f, 0.001539f, 0.004095f, -0.000657f, 0.000384f, 0.001322f, 0.041207f, -0.010645f, -0.003854f, -0.006256f, 0.008425f, 0.005624f, 0.014018f, 0.005564f, -0.002077f, 0.006718f, -0.000306f, 0.007515f, 0.002899f, 0.010446f, 0.000207f, 0.008767f, 0.011395f, -0.012658f, 0.002254f, 0.003271f, 0.002094f, 0.001993f, 0.002809f, -0.007525f, -0.000039f, -0.008665f, -0.001274f, -0.000313f, -0.014703f, -0.009975f, 0.003653f, -0.000062f, -0.000540f, 0.005847f, 0.005705f, -0.002985f, -0.012683f, 0.003799f, - 0.011383f, 0.007519f, 0.010614f, -0.002862f, 0.005723f, 0.010566f, -0.017620f, 0.005586f, 0.007705f, -0.008685f, 0.010850f, -0.007571f, -0.001626f, 0.001084f, 0.002110f, -0.005846f, 0.005113f, -0.001534f, -0.002020f, -0.006082f, -0.005013f, 0.006109f, 0.006089f, 0.002773f, 0.005994f, 0.009393f, 0.005104f, 0.013055f, -0.002784f, -0.014670f, 0.014170f, 0.002333f, 0.006934f, 0.002966f, -0.002461f, 0.003724f, 0.002669f, 0.000634f, 0.009711f, -0.002966f, 0.009581f, -0.013788f, -0.003215f, 0.001806f, 0.004241f, 0.000957f, -0.007590f, -0.003464f, 0.001213f, 0.000454f, -0.000841f, 0.000486f, 0.002873f, -0.003682f, -0.002157f, -0.002068f, -0.002741f, 0.001603f, -0.000862f, -0.000998f, -0.002244f, -0.001571f, 0.004141f, -0.000975f, -0.001436f, -0.000027f, -0.001527f, -0.001187f, 0.002074f, -0.000813f, 0.002218f, -0.000449f, 0.000128f, 0.001805f, -0.000567f, 0.018238f, -0.020985f, 0.013913f, 0.002921f, 0.014248f, 0.003283f, -0.008067f, 0.002615f, 0.010972f, -0.013162f, -0.002806f, 0.001482f, -0.014840f, -0.002952f, -0.011412f, -0.006992f, -0.008322f, -0.009123f, 0.003838f, -0.014172f, -0.008814f, - -0.011296f, -0.002902f, 0.010868f, 0.003901f, -0.013585f, -0.005311f, -0.014207f, -0.003536f, 0.003075f, 0.020339f, -0.016425f, 0.006697f, -0.004195f, -0.006046f, -0.012246f, 0.000539f, 0.002066f, 0.013024f, 0.006845f, 0.001608f, -0.011105f, -0.019285f, -0.000301f, 0.005604f, 0.015100f, 0.005231f, 0.004832f, -0.011220f, 0.004059f, 0.009431f, 0.000717f, 0.001430f, -0.005998f, -0.005976f, -0.002016f, 0.005468f, 0.000974f, -0.003889f, 0.000104f, -0.012340f, -0.001770f, -0.010408f, 0.006521f, -0.002225f, 0.006520f, -0.010199f, -0.008601f, -0.014024f, -0.001628f, -0.009039f, -0.003876f, 0.003526f, -0.013569f, -0.005908f, 0.001560f, 0.007421f, -0.016298f, 0.009454f, -0.007672f, -0.008283f, -0.008663f, -0.007290f, 0.004893f, -0.004917f, 0.002266f, 0.002757f, -0.004325f, 0.000565f, 0.003389f, 0.002577f, 0.000173f, -0.003925f, -0.000581f, -0.001917f, -0.004374f, -0.000828f, 0.003233f, 0.001862f, -0.002165f, 0.002902f, -0.002536f, -0.001984f, -0.000482f, 0.000951f, -0.003258f, 0.000169f, -0.000398f, 0.002153f, 0.001736f, 0.003590f, -0.002939f, 0.000808f, -0.000665f, -0.001311f, 0.001137f, -0.003444f, - -0.001189f, 0.001666f, 0.000926f, -0.050936f, 0.008201f, 0.005806f, -0.014711f, -0.003280f, -0.000072f, 0.000504f, -0.002826f, -0.004892f, -0.003775f, -0.015141f, 0.011638f, -0.007337f, 0.001595f, -0.012611f, -0.004496f, 0.018234f, 0.016511f, -0.010485f, -0.006344f, 0.000524f, -0.000311f, -0.008606f, -0.010053f, -0.007116f, 0.001172f, 0.000779f, 0.000281f, -0.001037f, 0.004230f, -0.012429f, 0.003856f, 0.000425f, -0.021951f, -0.002634f, -0.006589f, 0.010024f, 0.014617f, 0.002288f, -0.002609f, 0.000701f, -0.012881f, -0.016091f, 0.008595f, 0.015921f, 0.017693f, -0.004780f, 0.003198f, 0.010344f, 0.010635f, -0.005525f, 0.009808f, 0.016045f, -0.000710f, 0.013508f, 0.011408f, -0.013452f, 0.004367f, 0.000784f, 0.014433f, -0.008868f, -0.009500f, 0.008348f, 0.010929f, -0.003367f, 0.000939f, -0.015849f, 0.011119f, -0.008862f, 0.011739f, -0.019711f, 0.002097f, 0.004702f, 0.009367f, 0.000657f, -0.008302f, -0.016810f, -0.010365f, 0.014166f, -0.014027f, -0.000641f, 0.001537f, 0.007652f, -0.004277f, -0.002969f, 0.005908f, -0.011227f, -0.009844f, 0.004038f, 0.002631f, -0.000798f, 0.007996f, -0.003708f, - 0.001861f, 0.002101f, 0.002104f, 0.003070f, 0.000607f, -0.003108f, 0.001904f, 0.004179f, -0.001774f, 0.000607f, -0.000892f, -0.002060f, 0.001640f, -0.005173f, -0.000790f, -0.005579f, -0.001129f, -0.001025f, -0.001888f, -0.002844f, 0.001111f, -0.001627f, -0.000133f, -0.004325f, 0.001690f, -0.000751f, 0.001462f, 0.001818f, 0.000610f, 0.000778f, -0.019740f, 0.006992f, -0.017445f, 0.022066f, 0.021221f, 0.000647f, -0.028756f, 0.011902f, 0.001627f, -0.005367f, 0.019838f, 0.000081f, -0.017136f, -0.001826f, 0.021567f, -0.027061f, 0.000853f, -0.006773f, -0.021357f, -0.005943f, 0.000387f, -0.004208f, -0.010939f, 0.006294f, -0.009062f, 0.007363f, -0.007719f, -0.014472f, 0.007712f, -0.001086f, 0.011081f, -0.021547f, 0.008791f, 0.016949f, -0.006817f, 0.001390f, 0.017043f, 0.024919f, -0.006629f, -0.005094f, -0.021003f, 0.001224f, -0.017327f, -0.001419f, -0.012062f, 0.000595f, 0.001690f, 0.010065f, 0.004826f, 0.009198f, -0.006641f, 0.001688f, 0.005704f, -0.001097f, 0.023003f, -0.015273f, -0.007541f, 0.030260f, 0.030398f, -0.006004f, -0.001917f, -0.019081f, -0.009751f, 0.000967f, -0.005293f, -0.012630f, - 0.018362f, 0.005657f, -0.004782f, 0.026938f, 0.005223f, -0.012931f, -0.000356f, -0.024744f, -0.012408f, -0.014029f, -0.012021f, -0.003290f, -0.019315f, -0.013945f, 0.007961f, 0.007356f, -0.001419f, 0.004339f, -0.005731f, 0.006466f, -0.004304f, -0.006324f, 0.001094f, -0.009103f, -0.004158f, 0.011685f, 0.000936f, 0.005822f, -0.003123f, 0.001194f, 0.000897f, 0.002740f, 0.002535f, -0.000513f, -0.000232f, -0.005787f, -0.000066f, 0.001233f, 0.000936f, -0.001632f, -0.001640f, 0.003904f, 0.001164f, -0.000838f, 0.000139f, -0.000998f, 0.000132f, 0.002163f, 0.024508f, -0.006438f, -0.000211f, 0.016901f, -0.003957f, 0.010021f, -0.005391f, -0.021289f, -0.001317f, 0.000101f, -0.004322f, -0.012581f, -0.014056f, 0.007434f, -0.011121f, 0.019857f, -0.006013f, -0.014267f, 0.012305f, 0.024904f, -0.006103f, 0.007041f, -0.006610f, 0.014425f, 0.000380f, -0.030085f, 0.010808f, 0.016843f, 0.001735f, -0.004939f, -0.017481f, 0.014797f, 0.009908f, 0.009560f, 0.001993f, 0.006059f, 0.019753f, -0.013813f, 0.002521f, 0.003940f, -0.010893f, -0.021123f, 0.020267f, 0.011325f, 0.037665f, -0.001831f, 0.016651f, -0.005442f, - -0.011753f, 0.002092f, -0.001786f, -0.000451f, -0.003302f, -0.012169f, 0.027064f, 0.000707f, 0.002171f, 0.003904f, -0.003705f, 0.022297f, 0.002885f, 0.018681f, 0.007830f, 0.003208f, 0.019951f, -0.009306f, -0.022229f, -0.004328f, 0.004185f, 0.002956f, -0.009156f, 0.010967f, -0.006536f, -0.031126f, 0.002889f, 0.006267f, -0.017167f, 0.008098f, -0.001722f, 0.003433f, 0.000109f, -0.007019f, -0.007764f, 0.000029f, 0.003022f, 0.009582f, -0.000791f, 0.002730f, -0.003606f, -0.002671f, 0.004373f, 0.002881f, -0.000471f, 0.002967f, -0.003105f, -0.000308f, 0.000290f, -0.004223f, -0.006088f, 0.003893f, -0.006785f, -0.001726f, -0.002919f, -0.005947f, -0.001593f, -0.000753f, -0.002152f, 0.002657f, -0.000949f, -0.002480f, -0.000672f, 0.011512f, 0.004574f, 0.004417f, -0.002240f, 0.001680f, -0.003513f, -0.004625f, -0.001454f, -0.001571f, 0.002072f, -0.003050f, 0.005629f, -0.007159f, -0.002188f, 0.001575f, 0.019801f, -0.032829f, 0.005390f, 0.014705f, 0.021889f, -0.022992f, -0.003313f, 0.015588f, 0.010864f, 0.013303f, 0.002350f, 0.028079f, 0.005206f, 0.011643f, -0.003491f, 0.001662f, 0.011586f, 0.006354f, - 0.013375f, 0.001061f, -0.018569f, -0.027093f, 0.014369f, 0.006955f, -0.005158f, 0.003187f, 0.008081f, -0.025349f, 0.000237f, -0.015996f, 0.007484f, -0.000870f, 0.016615f, -0.005325f, 0.007421f, -0.003837f, 0.004303f, 0.002275f, -0.000707f, 0.009357f, 0.012487f, 0.004477f, 0.007230f, -0.019859f, 0.008217f, -0.003497f, -0.034638f, -0.023008f, 0.005895f, -0.025289f, -0.001746f, 0.020908f, -0.015258f, 0.041530f, 0.015006f, -0.008360f, 0.022530f, 0.001061f, -0.007387f, -0.016755f, -0.016608f, -0.023055f, -0.003593f, 0.013484f, -0.016507f, -0.002045f, 0.014954f, 0.006837f, 0.008441f, 0.030433f, 0.003747f, 0.019899f, 0.000141f, 0.003910f, -0.032673f, 0.009052f, 0.002448f, -0.029725f, -0.028156f, 0.016245f, -0.010747f, 0.001895f, 0.008537f, -0.004844f, -0.007666f, 0.001723f, -0.001714f, -0.002031f, 0.001706f, -0.005314f, 0.004772f, -0.003820f, 0.001055f, -0.009382f, 0.005088f, 0.001582f, 0.002064f, -0.000503f, 0.011576f, -0.009382f, 0.000800f, -0.002625f, -0.002346f, 0.002347f, 0.002362f, 0.003244f, 0.005568f, 0.009312f, 0.005743f, -0.005977f, 0.001445f, -0.000749f, 0.008470f, -0.002785f, - 0.005463f, -0.008676f, -0.006604f, -0.004997f, -0.004215f, -0.000569f, -0.000477f, 0.004319f, 0.005036f, -0.017031f, -0.000415f, 0.010862f, -0.000048f, 0.007652f, -0.017447f, 0.013734f, -0.000973f, 0.004063f, 0.012812f, -0.023592f, -0.016180f, 0.004393f, -0.000215f, 0.013087f, 0.026916f, -0.002400f, 0.006794f, 0.028883f, -0.010587f, -0.019428f, -0.001013f, 0.021183f, -0.004462f, -0.024211f, 0.002060f, 0.009059f, -0.004666f, -0.007516f, -0.001677f, 0.031313f, -0.005837f, 0.026966f, 0.020415f, 0.024611f, 0.001462f, 0.002090f, 0.014437f, 0.004897f, -0.004865f, 0.005141f, -0.019307f, 0.014726f, 0.024671f, 0.015503f, 0.002219f, 0.013794f, -0.010665f, 0.010613f, -0.010373f, 0.015480f, -0.013773f, 0.000351f, -0.000999f, -0.000998f, 0.043798f, -0.006457f, -0.002335f, -0.003725f, 0.006179f, 0.012126f, 0.023112f, 0.026344f, -0.014247f, 0.006371f, 0.026252f, -0.014586f, -0.018098f, 0.011025f, -0.007820f, 0.011363f, 0.050014f, -0.023512f, 0.003484f, 0.004738f, -0.012890f, 0.005694f, 0.016399f, 0.011487f, 0.001461f, -0.010161f, -0.024478f, 0.011710f, -0.010616f, 0.013535f, -0.009134f, 0.001951f, - -0.012067f, -0.002616f, -0.020255f, 0.001792f, -0.006360f, -0.007149f, -0.002431f, 0.002519f, 0.005244f, 0.010144f, 0.004374f, -0.005746f, -0.001349f, 0.010336f, -0.005978f, -0.005296f, 0.000824f, 0.000766f, -0.009175f, -0.000086f, -0.004583f, -0.002268f, -0.001655f, -0.001634f, 0.003651f, 0.002255f, 0.007383f, -0.004640f, -0.004591f, 0.000584f, -0.005518f, 0.002647f, 0.011540f, -0.005715f, -0.006036f, -0.011379f, 0.005916f, -0.002867f, -0.002888f, -0.016913f, -0.026667f, -0.020528f, -0.027750f, -0.010688f, 0.003119f, 0.022223f, 0.016463f, 0.005966f, 0.023402f, 0.007039f, 0.014296f, 0.013161f, -0.006345f, 0.020298f, 0.021998f, 0.015538f, -0.029689f, -0.016637f, -0.017194f, 0.006481f, -0.011857f, 0.000829f, 0.008458f, -0.008624f, -0.020949f, 0.013560f, -0.009931f, 0.004817f, 0.004511f, 0.021383f, -0.022285f, 0.034666f, -0.034228f, 0.035414f, -0.000072f, 0.017771f, -0.017173f, 0.006259f, -0.038260f, -0.021304f, -0.018612f, 0.016878f, 0.007778f, 0.024467f, -0.002424f, -0.000079f, -0.012406f, -0.030670f, 0.020040f, -0.016744f, -0.008698f, 0.014606f, 0.034809f, 0.033684f, 0.015803f, -0.002232f, - -0.022773f, 0.013419f, -0.034979f, -0.002706f, -0.019857f, 0.011293f, 0.037772f, -0.036218f, 0.013230f, 0.016846f, -0.022519f, -0.002209f, -0.003831f, 0.012664f, -0.014925f, -0.021488f, 0.004298f, -0.008674f, -0.031590f, 0.016075f, -0.003110f, -0.029657f, 0.022062f, 0.029193f, -0.009601f, 0.001016f, 0.004135f, -0.012516f, 0.018956f, 0.008817f, -0.005345f, -0.004671f, -0.012415f, -0.007057f, 0.015210f, 0.008748f, 0.008686f, -0.000611f, -0.013680f, -0.004076f, -0.004633f, -0.015162f, -0.003224f, 0.004629f, -0.000898f, -0.004398f, -0.001366f, -0.010787f, 0.001440f, -0.003625f, 0.007403f, 0.004175f, 0.001559f, -0.012502f, 0.010398f, 0.001039f, -0.005415f, -0.003099f, -0.002047f, -0.000547f, 0.006177f, -0.004551f, -0.001911f, 0.004806f, 0.012785f, 0.006507f, 0.003792f, -0.007628f, 0.010205f, -0.025492f, -0.029765f, -0.008416f, 0.019161f, -0.022793f, 0.015050f, -0.031306f, -0.005606f, -0.012046f, -0.011044f, -0.024820f, -0.002233f, -0.009267f, -0.014928f, 0.011934f, -0.016631f, 0.017884f, 0.003762f, 0.013970f, -0.021971f, -0.041064f, -0.003430f, 0.008473f, -0.017213f, -0.012587f, 0.006699f, 0.005362f, - -0.020130f, -0.009538f, 0.028594f, 0.013900f, -0.003788f, 0.015663f, 0.041072f, 0.001472f, 0.005193f, 0.004223f, -0.003139f, -0.000661f, 0.006039f, 0.005518f, -0.031595f, -0.011466f, -0.038603f, -0.012180f, -0.036003f, -0.016947f, 0.001940f, 0.042062f, 0.019604f, -0.020790f, -0.024457f, 0.015694f, 0.033184f, 0.021012f, -0.014879f, 0.025472f, -0.009714f, -0.001901f, -0.044602f, -0.013241f, -0.005769f, -0.005484f, -0.030514f, -0.048839f, 0.015638f, -0.000100f, -0.035768f, 0.009120f, 0.055895f, 0.007305f, 0.006305f, -0.035311f, -0.003206f, -0.000501f, 0.007799f, -0.039651f, 0.036598f, 0.005797f, 0.010092f, 0.020262f, 0.007798f, 0.021979f, -0.001708f, 0.010324f, -0.008649f, -0.017165f, -0.014330f, 0.007563f, -0.011552f, -0.003643f, -0.015426f, 0.005172f, 0.012547f, 0.000242f, 0.010563f, 0.001191f, -0.004289f, -0.000185f, -0.008883f, 0.006149f, 0.006312f, 0.001135f, 0.001125f, -0.006028f, -0.002500f, 0.003367f, 0.009172f, 0.006690f, -0.008141f, -0.002880f, -0.003382f, -0.018545f, -0.025761f, -0.018935f, -0.006247f, -0.002381f, 0.002946f, -0.004426f, -0.007330f, -0.007894f, -0.000056f, -0.005292f, - -0.006903f, -0.011525f, -0.006305f, 0.018571f, -0.011544f, 0.022561f, -0.034277f, -0.007068f, 0.008061f, -0.016542f, 0.039278f, -0.032595f, -0.033554f, -0.027305f, 0.037981f, 0.016913f, -0.022176f, -0.020005f, -0.013383f, -0.004258f, -0.012072f, -0.012419f, 0.001764f, 0.014109f, 0.037515f, -0.004279f, 0.015917f, 0.013848f, 0.013449f, -0.025239f, -0.031479f, -0.022649f, 0.026184f, -0.004678f, 0.031840f, 0.010497f, -0.003668f, -0.043836f, -0.035781f, -0.003804f, 0.002764f, -0.025471f, -0.016003f, -0.012025f, -0.012314f, -0.057459f, -0.012610f, -0.014116f, -0.020818f, -0.010229f, -0.013671f, -0.026425f, 0.018352f, 0.035684f, 0.019737f, 0.000894f, 0.020977f, 0.026781f, -0.009733f, 0.008432f, 0.006681f, 0.002576f, -0.001272f, -0.006921f, 0.018694f, 0.007523f, 0.031455f, -0.007418f, 0.002964f, 0.011208f, 0.062096f, -0.000796f, 0.032934f, 0.041808f, -0.003810f, -0.036554f, 0.002985f, 0.036312f, 0.005182f, -0.031130f, -0.028019f, -0.035674f, 0.023083f, -0.029146f, -0.008059f, 0.041666f, -0.018098f, -0.027966f, 0.008465f, -0.007680f, 0.000644f, 0.011372f, -0.017674f, -0.007873f, 0.003306f, -0.005243f, - -0.008113f, -0.001587f, 0.003024f, 0.020827f, -0.002129f, -0.010817f, -0.009490f, -0.000090f, -0.008194f, -0.006573f, -0.006025f, -0.010495f, -0.005164f, 0.003962f, -0.005195f, -0.000994f, -0.014464f, 0.003679f, -0.001548f, 0.002892f, 0.014083f, 0.008942f, -0.008613f, 0.003906f, 0.002910f, -0.012580f, -0.019383f, 0.007182f, 0.007475f, 0.001108f, -0.019811f, -0.021187f, -0.003552f, -0.014799f, -0.005034f, -0.002164f, 0.035141f, 0.025599f, -0.058967f, 0.018701f, 0.023521f, -0.010339f, 0.017083f, 0.056028f, 0.004607f, 0.012470f, -0.019573f, 0.012985f, -0.020685f, -0.013219f, -0.011021f, 0.004114f, 0.014418f, 0.020156f, -0.002890f, 0.008308f, -0.006098f, -0.003434f, -0.010816f, 0.014834f, 0.052890f, -0.017276f, -0.017049f, 0.018962f, 0.013376f, 0.001910f, -0.038462f, 0.024931f, -0.030663f, 0.017592f, 0.022078f, 0.002451f, 0.005613f, -0.006355f, 0.036391f, 0.027535f, 0.000331f, 0.018520f, -0.014549f, 0.023354f, 0.003925f, 0.026373f, 0.038546f, -0.000867f, 0.009790f, -0.005039f, -0.014186f, -0.000994f, 0.016814f, 0.018925f, -0.036789f, -0.022378f, 0.008650f, 0.039972f, -0.019355f, 0.026526f, - 0.017803f, 0.005141f, -0.042865f, 0.005193f, 0.006704f, -0.051173f, 0.030179f, -0.028651f, -0.034019f, -0.064768f, 0.015792f, 0.039268f, -0.017763f, -0.036150f, 0.007523f, 0.043522f, 0.027807f, 0.004830f, -0.005648f, 0.000594f, 0.015391f, -0.013338f, 0.020527f, 0.033423f, 0.031902f, -0.002375f, 0.013540f, 0.033067f, -0.005180f, -0.000461f, -0.003636f, 0.028469f, -0.004179f, 0.006986f, -0.013310f, 0.007223f, -0.008186f, 0.001085f, 0.000410f, -0.002253f, -0.006445f, 0.006222f, 0.016791f, 0.005641f, 0.004778f, -0.015177f, 0.003864f, -0.015669f, 0.004758f, 0.024637f, -0.008973f, 0.000365f, 0.003254f, -0.011715f, -0.015247f, -0.017569f, -0.003983f, 0.011120f, -0.005157f, 0.002971f, -0.010619f, -0.001100f, 0.000406f, -0.032508f, -0.008339f, -0.001395f, 0.006836f, 0.008274f, -0.006750f, 0.011515f, 0.006105f, 0.006145f, -0.009638f, -0.009451f, 0.014425f, 0.040629f, 0.029453f, -0.010185f, -0.079400f, 0.009323f, 0.039729f, 0.018958f, 0.008629f, -0.034832f, -0.000220f, -0.024053f, 0.005581f, -0.002333f, 0.006573f, 0.011940f, 0.016635f, 0.007087f, -0.043174f, 0.024983f, -0.006020f, 0.007553f, - 0.032766f, 0.012605f, 0.006115f, -0.011759f, 0.040645f, -0.001462f, 0.040398f, -0.049129f, -0.014458f, 0.015632f, -0.028637f, -0.024759f, 0.001709f, -0.006498f, -0.022422f, 0.002582f, 0.035689f, -0.001235f, 0.002344f, -0.018821f, -0.039069f, -0.024940f, -0.011185f, 0.016119f, -0.004331f, 0.003703f, -0.019235f, -0.020950f, -0.010279f, 0.030984f, -0.021401f, 0.017812f, 0.011981f, 0.009990f, 0.003420f, -0.032211f, -0.045858f, -0.003812f, 0.030616f, -0.038145f, 0.018337f, -0.032857f, 0.020475f, -0.034562f, -0.001791f, -0.034079f, 0.048146f, -0.044083f, -0.026327f, 0.011275f, 0.007866f, 0.021986f, 0.018330f, -0.011499f, -0.006125f, -0.011571f, 0.005935f, -0.000580f, 0.028680f, -0.035786f, -0.014185f, -0.045956f, 0.023651f, -0.016403f, 0.001739f, -0.002027f, 0.012460f, -0.010261f, 0.004634f, -0.018875f, -0.028594f, 0.018226f, -0.014809f, 0.000351f, 0.004651f, 0.024246f, 0.009665f, -0.017612f, 0.003674f, -0.006040f, -0.022597f, -0.004283f, 0.005211f, 0.006987f, -0.020441f, -0.010058f, 0.022405f, -0.002404f, -0.019012f, -0.008421f, 0.026303f, -0.031083f, -0.010598f, 0.006213f, -0.007286f, 0.010926f, - -0.002413f, -0.013727f, -0.018427f, -0.005982f, -0.008309f, -0.005811f, -0.006124f, 0.004914f, -0.001527f, 0.011387f, -0.012236f, 0.006267f, 0.002115f, -0.005621f, 0.012284f, -0.067760f, -0.009627f, 0.020234f, 0.004933f, -0.016182f, -0.024198f, 0.002190f, -0.023003f, -0.002192f, -0.035508f, 0.033172f, -0.013307f, 0.020740f, -0.046162f, -0.026237f, -0.000977f, 0.056485f, -0.046309f, -0.004090f, -0.036254f, -0.028900f, -0.008834f, 0.035353f, -0.008267f, 0.015643f, 0.016550f, -0.018902f, -0.040214f, 0.056523f, 0.024616f, -0.032496f, 0.006244f, 0.004058f, 0.015587f, -0.031629f, 0.028231f, -0.002614f, -0.059242f, 0.006146f, 0.011817f, 0.015152f, -0.049091f, -0.011868f, 0.006153f, 0.043092f, 0.008193f, 0.023952f, -0.063318f, -0.038602f, 0.019386f, -0.000130f, 0.041276f, -0.011201f, -0.007000f, 0.003029f, 0.020971f, 0.019097f, 0.007319f, -0.080608f, 0.022650f, -0.009509f, 0.018397f, 0.042749f, -0.013586f, -0.003959f, -0.049032f, 0.015760f, 0.022149f, -0.025923f, -0.015322f, 0.044235f, 0.070073f, 0.018181f, 0.011412f, -0.020003f, -0.008237f, -0.038439f, 0.002913f, 0.000310f, -0.047272f, 0.017070f, - -0.001429f, -0.014005f, -0.003611f, 0.022072f, -0.018107f, -0.012373f, -0.002112f, -0.005239f, -0.001705f, 0.019462f, -0.008473f, 0.000213f, 0.011313f, 0.004321f, 0.015564f, 0.012919f, 0.009973f, 0.006839f, 0.018635f, 0.021612f, -0.029166f, 0.009082f, -0.018201f, 0.014238f, 0.002178f, -0.018669f, -0.012509f, -0.007392f, -0.006098f, -0.012322f, 0.011227f, -0.006388f, -0.011950f, 0.019859f, -0.003145f, -0.006584f, 0.011475f, 0.020452f, -0.000036f, -0.007655f, 0.005748f, 0.019061f, 0.020998f, 0.012950f, -0.006808f, 0.003283f, 0.003947f, 0.017115f, -0.058140f, -0.038043f, -0.013123f, -0.000639f, -0.033130f, 0.026245f, -0.068697f, 0.003301f, -0.042183f, 0.021832f, -0.015656f, -0.046898f, -0.004172f, -0.012670f, -0.016532f, -0.053416f, -0.038974f, 0.011098f, 0.042053f, -0.028307f, 0.051918f, -0.044324f, -0.029133f, 0.009426f, -0.004359f, 0.023516f, -0.014752f, -0.015515f, -0.021516f, -0.006084f, -0.072960f, -0.021073f, 0.002069f, -0.003261f, -0.012198f, -0.028802f, 0.022855f, -0.025501f, 0.038903f, -0.012174f, -0.004900f, -0.027725f, -0.025474f, -0.048417f, -0.021069f, 0.017724f, 0.007313f, -0.003027f, - 0.003147f, -0.017485f, -0.013142f, -0.022511f, -0.018816f, 0.009725f, 0.014321f, 0.006615f, -0.041980f, 0.047859f, 0.006471f, -0.020981f, 0.038373f, 0.027296f, 0.045740f, -0.008879f, 0.026671f, -0.062920f, -0.033959f, -0.059469f, 0.060258f, -0.019682f, -0.042116f, -0.040709f, -0.085956f, -0.036185f, 0.059407f, -0.004166f, -0.030200f, 0.021480f, -0.058672f, -0.039482f, 0.014671f, -0.003740f, -0.048967f, -0.048081f, -0.000621f, -0.027771f, 0.007295f, 0.009902f, -0.036431f, 0.035141f, -0.021704f, -0.032132f, 0.002720f, -0.019195f, 0.050629f, -0.019878f, 0.022729f, 0.003279f, 0.030764f, -0.016043f, -0.009051f, 0.002602f, -0.014085f, -0.000887f, -0.029582f, -0.022743f, -0.005742f, 0.011932f, 0.000551f, 0.020099f, 0.008223f, 0.014808f, -0.013309f, -0.000476f, -0.025749f, -0.006705f, -0.009315f, 0.007285f, 0.024497f, 0.010915f, 0.009807f, 0.011283f, 0.010115f, 0.002301f, -0.033542f, -0.010366f, -0.023173f, -0.006183f, 0.003828f, 0.015356f, 0.074997f, 0.096029f, -0.009142f, -0.042692f, -0.010174f, -0.016154f, -0.043134f, 0.018540f, 0.001182f, -0.031265f, 0.091786f, 0.031829f, -0.021764f, -0.063677f, - -0.005719f, 0.015326f, 0.016734f, 0.018624f, 0.043900f, -0.012659f, -0.021727f, 0.020604f, -0.079678f, -0.053258f, -0.020825f, -0.005740f, 0.008531f, -0.042564f, -0.038876f, 0.040949f, 0.032567f, -0.025083f, -0.048237f, 0.030576f, 0.000879f, 0.053958f, -0.043967f, -0.010117f, -0.015011f, -0.002760f, -0.034765f, -0.051782f, 0.043453f, -0.032119f, -0.020308f, -0.039577f, -0.008884f, 0.026110f, 0.024514f, -0.015965f, 0.003417f, 0.004585f, 0.032768f, 0.050232f, 0.036956f, -0.064392f, -0.030984f, -0.038202f, -0.009609f, 0.021967f, 0.007985f, -0.044013f, -0.063334f, 0.053654f, 0.003344f, -0.052568f, -0.087325f, 0.044019f, -0.011430f, 0.023695f, 0.021806f, 0.023172f, 0.003007f, 0.017115f, -0.034383f, -0.012968f, 0.023453f, 0.004324f, -0.016154f, 0.009783f, -0.004192f, -0.046219f, 0.023229f, -0.058688f, -0.003957f, -0.002806f, -0.010355f, -0.021022f, -0.008339f, 0.025929f, -0.001906f, -0.005809f, 0.013110f, -0.018886f, 0.057066f, -0.004397f, 0.004955f, -0.004118f, 0.000386f, 0.014406f, -0.001077f, 0.013893f, -0.029399f, 0.006481f, -0.005559f, -0.020216f, 0.001875f, 0.009919f, 0.018841f, -0.009439f, - 0.005098f, -0.048562f, -0.016187f, -0.002485f, -0.025781f, 0.021921f, -0.003183f, -0.005679f, -0.013997f, -0.019868f, -0.029902f, -0.041346f, 0.012300f, -0.003937f, 0.030155f, 0.036381f, 0.022701f, -0.024365f, -0.034552f, -0.043163f, -0.016619f, 0.040152f, 0.032212f, 0.005862f, 0.014860f, -0.013667f, -0.025413f, -0.018777f, -0.018308f, 0.008454f, 0.033605f, 0.041641f, -0.051874f, -0.043547f, 0.123343f, -0.010061f, -0.012173f, -0.018636f, -0.039061f, -0.004365f, 0.044446f, 0.071445f, -0.033048f, -0.020036f, -0.007347f, -0.032694f, -0.008187f, -0.018496f, 0.028370f, -0.029568f, 0.032489f, 0.015381f, -0.011248f, -0.041195f, -0.003076f, -0.017063f, 0.061546f, -0.034008f, -0.000886f, -0.000064f, -0.006195f, 0.027699f, -0.017802f, -0.002505f, 0.012766f, -0.008619f, -0.060205f, 0.030502f, -0.027489f, -0.031977f, -0.007354f, -0.034098f, -0.019727f, -0.061796f, 0.058904f, 0.002507f, -0.039293f, -0.072383f, 0.041996f, -0.042785f, -0.041601f, 0.000351f, -0.032408f, 0.014393f, 0.026628f, 0.081877f, -0.023371f, 0.031924f, -0.006941f, -0.039924f, -0.033760f, -0.010084f, 0.123480f, -0.109174f, -0.007999f, 0.113183f, - -0.103807f, -0.039616f, 0.058427f, -0.008876f, -0.046923f, 0.109434f, -0.054325f, -0.022818f, 0.050330f, 0.012226f, 0.021464f, -0.032782f, 0.036337f, 0.050879f, 0.023943f, -0.013359f, -0.003395f, 0.051376f, -0.007557f, 0.029266f, -0.000730f, 0.020332f, -0.029607f, -0.004159f, 0.013599f, 0.008001f, 0.005677f, 0.001052f, 0.002082f, 0.021168f, -0.009891f, 0.005217f, 0.007951f, 0.006928f, -0.046439f, -0.019467f, 0.014861f, -0.039686f, 0.011828f, 0.022072f, -0.016629f, -0.017912f, -0.013541f, 0.009012f, -0.019036f, 0.022101f, 0.019084f, -0.002902f, 0.011060f, -0.014409f, -0.027974f, -0.027705f, 0.054233f, 0.009323f, 0.033837f, 0.006498f, 0.006700f, 0.020974f, -0.018473f, -0.004856f, 0.034412f, -0.020945f, -0.046890f, 0.034655f, -0.004700f, 0.058698f, -0.073935f, 0.067139f, -0.010990f, -0.041061f, 0.036285f, 0.013011f, -0.006260f, 0.007930f, 0.005280f, -0.007612f, 0.013489f, -0.013947f, -0.018195f, -0.008059f, -0.025361f, -0.021060f, -0.047987f, -0.018118f, 0.042036f, 0.039655f, -0.059761f, 0.020535f, 0.032345f, 0.027168f, -0.009937f, -0.059001f, -0.004970f, -0.029001f, -0.069151f, 0.044281f, - 0.111813f, -0.063539f, -0.006525f, 0.079576f, -0.022081f, -0.027821f, 0.064697f, 0.048152f, 0.023958f, -0.025525f, -0.051405f, 0.017702f, -0.020705f, -0.032324f, 0.116919f, 0.086168f, -0.069891f, -0.051336f, 0.063333f, -0.114351f, -0.039983f, -0.032078f, -0.019403f, 0.080678f, 0.053760f, 0.035529f, 0.038939f, -0.134416f, -0.046651f, 0.128944f, 0.074858f, 0.015681f, -0.033891f, 0.044722f, -0.044843f, -0.091174f, -0.060673f, 0.045151f, -0.033020f, -0.006731f, 0.052303f, 0.096569f, -0.011168f, -0.053673f, 0.007363f, 0.038471f, -0.065113f, -0.023795f, 0.068665f, 0.061886f, 0.061942f, 0.043215f, -0.011848f, -0.038496f, -0.018934f, 0.052686f, 0.015499f, 0.022467f, -0.009611f, 0.006400f, 0.024186f, 0.002634f, -0.009039f, -0.010561f, -0.014488f, 0.012173f, 0.008842f, 0.050599f, 0.014465f, -0.009319f, -0.019508f, 0.005525f, 0.002937f, -0.006756f, -0.017071f, 0.005577f, 0.039159f, -0.040524f, -0.011878f, 0.037846f, -0.008057f, -0.000324f, 0.025175f, -0.008807f, 0.018747f, 0.008399f, 0.021943f, -0.040917f, -0.005504f, 0.009446f, 0.047854f, 0.012179f, 0.023202f, 0.020517f, 0.011421f, -0.008352f, - 0.016130f, 0.023197f, -0.024819f, 0.013287f, -0.114122f, 0.049469f, 0.000618f, -0.011637f, 0.058560f, -0.009886f, -0.044116f, 0.022278f, 0.020297f, 0.057278f, 0.032466f, -0.030866f, 0.001711f, 0.008921f, 0.039242f, 0.009168f, -0.045075f, -0.001656f, -0.002541f, 0.009289f, -0.041931f, -0.045684f, 0.066365f, -0.023811f, -0.069328f, 0.035776f, 0.061600f, -0.034542f, -0.011759f, 0.004144f, 0.042233f, -0.050259f, -0.066118f, 0.018259f, 0.055875f, -0.012000f, -0.023798f, -0.013697f, -0.013604f, 0.024415f, 0.010365f, 0.014635f, 0.140798f, 0.007896f, -0.017989f, 0.002041f, 0.004424f, 0.076164f, 0.002406f, -0.026904f, 0.017129f, -0.059316f, -0.034918f, 0.015545f, 0.000295f, 0.065484f, 0.051874f, -0.033445f, -0.009841f, -0.031609f, 0.001497f, 0.023573f, 0.005934f, 0.007414f, 0.023428f, -0.016687f, -0.069232f, 0.017770f, 0.046704f, -0.021937f, 0.041213f, -0.063934f, 0.030153f, 0.019483f, -0.056195f, 0.009775f, 0.001095f, -0.024344f, 0.002551f, -0.010320f, 0.027914f, 0.027417f, -0.047091f, -0.028862f, 0.062789f, -0.047774f, 0.023080f, -0.004321f, -0.018443f, 0.013954f, -0.001889f, -0.028035f, - 0.016046f, 0.009912f, 0.011482f, -0.000705f, -0.004807f, 0.003305f, 0.008691f, -0.010566f, -0.010215f, 0.008727f, 0.006112f, -0.005754f, -0.000525f, 0.014091f, 0.023377f, -0.013647f, -0.009462f, 0.003193f, -0.004189f, 0.008398f, -0.005800f, -0.002928f, 0.005415f, -0.000060f, 0.014051f, -0.004218f, 0.006938f, -0.017966f, 0.011065f, -0.012461f, 0.011699f, 0.020802f, -0.001815f, 0.000630f, 0.002874f, -0.023408f, 0.039714f, -0.073326f, -0.242134f, -0.286602f, -0.025408f, -0.198645f, 0.078600f, 0.485705f, 0.261454f, 0.394572f, 0.415790f, -0.044744f, -0.119327f, 0.035918f, -0.302178f, -0.369429f, -0.113889f, -0.406719f, -0.326466f, 0.083308f, -0.234734f, -0.063647f, 0.469026f, 0.170090f, 0.331705f, 0.572837f, 0.341052f, 0.152806f, 0.116337f, 0.041000f, -0.254635f, -0.317025f, -0.104396f, -0.433152f, -0.433527f, 0.057612f, -0.324121f, -0.265864f, 0.160424f, -0.272604f, -0.280409f, 0.212370f, 0.086451f, -0.038318f, 0.500661f, 0.468935f, 0.299501f, 0.635610f, 0.598922f, 0.204921f, 0.238589f, 0.186119f, -0.301061f, -0.301703f, -0.381741f, -0.756074f, -0.892650f, -0.641829f, -0.639071f, -0.471215f, - 0.016485f, 0.044008f, 0.311729f, 0.538906f, 0.664019f, 0.605158f, 0.702098f, 0.601722f, 0.354950f, 0.238871f, 0.079719f, -0.118114f, -0.266051f, -0.378535f, -0.325303f, -0.471739f, -0.528527f, -0.438158f, -0.512442f, -0.384317f, 0.061298f, 0.123787f, 0.299071f, 0.599681f, 0.477489f, 0.368197f, 0.278290f, 0.109934f, -0.090519f, -0.073711f, -0.149893f, -0.187538f, -0.143230f, -0.162863f, -0.157456f, -0.066821f, -0.063538f, 0.004032f, 0.097810f, 0.069811f, 0.137191f, 0.164876f, 0.029015f, 0.119744f, 0.114930f, -0.031293f, 0.038455f, 0.027299f, -0.086791f, 0.004284f, 0.028601f, -0.100328f, -0.109767f, -0.153252f, -0.315966f, -0.353164f, -0.274770f, -0.262416f, -0.085768f, 0.129740f, 0.233233f, 0.379348f, 0.571847f, 0.617527f, 0.572566f, 0.401522f, 0.122849f, -0.128547f, -0.275960f, -0.412107f, -0.508994f, -0.500432f, -0.390850f, -0.268027f, -0.127060f, -0.038336f, 0.016957f, 0.047447f, 0.117387f, 0.193187f, 0.199067f, 0.185182f, 0.189983f, 0.135852f, 0.122436f, 0.106558f, 0.044294f, 0.012004f, 0.028633f, 0.025775f, 0.017115f, 0.012841f, -0.020501f, -0.059974f, -0.087314f, -0.100471f, - -0.083436f, -0.049805f, -0.032249f, -0.028664f} - }, - { - {-0.016633f, -0.019806f, 0.010170f, 0.000599f, 0.015348f, 0.005550f, 0.006775f, 0.004337f, 0.006233f, -0.000197f, -0.000204f, -0.003480f, -0.010068f, -0.005835f, 0.002676f, -0.000528f, -0.001858f, -0.001224f, 0.005354f, 0.004137f, 0.000060f, 0.004797f, -0.004514f, -0.011482f, 0.003649f, -0.002700f, 0.001285f, -0.005875f, 0.004583f, -0.004819f, -0.002390f, -0.001931f, 0.008210f, -0.001979f, -0.000091f, -0.003472f, -0.000943f, -0.009315f, 0.003124f, -0.001618f, 0.005007f, -0.004458f, 0.000592f, -0.002135f, -0.007442f, 0.002306f, -0.000742f, -0.002069f, 0.003311f, 0.006060f, -0.001269f, -0.003810f, -0.010883f, 0.000931f, -0.006471f, 0.002941f, 0.000106f, -0.004255f, -0.000171f, -0.001864f, -0.001522f, -0.007915f, 0.005077f, -0.007026f, 0.003845f, -0.002806f, -0.004648f, -0.004024f, -0.008362f, 0.004540f, 0.000427f, 0.002227f, 0.005030f, -0.005432f, -0.008575f, 0.005426f, -0.008217f, 0.000197f, -0.005476f, 0.001679f, -0.004239f, 0.003662f, -0.002144f, 0.001901f, -0.003657f, 0.000592f, -0.001697f, 0.002126f, -0.001753f, -0.002001f, -0.001868f, -0.001840f, -0.003281f, 0.000403f, 0.000807f, -0.000646f, - -0.002585f, 0.001715f, -0.001952f, 0.000199f, -0.001305f, -0.002312f, -0.000825f, -0.000876f, -0.000361f, -0.000570f, -0.000328f, -0.001924f, -0.000999f, 0.000204f, -0.001107f, -0.000669f, -0.000593f, -0.029318f, -0.000353f, -0.003923f, 0.007667f, 0.000111f, 0.002929f, -0.002455f, 0.003797f, 0.000713f, 0.003317f, -0.003419f, 0.018870f, -0.004142f, -0.002693f, -0.008146f, 0.002687f, -0.009829f, -0.003178f, 0.000707f, -0.004795f, -0.000092f, 0.006905f, 0.003948f, 0.002605f, 0.004648f, 0.006707f, -0.008225f, -0.003161f, -0.000181f, 0.004253f, -0.007760f, 0.007517f, -0.006497f, -0.003296f, 0.006026f, -0.001174f, 0.001379f, -0.004836f, 0.005567f, 0.005816f, 0.006254f, -0.009657f, -0.002952f, 0.010379f, -0.000150f, -0.001595f, -0.002343f, 0.011318f, 0.007388f, 0.008750f, 0.000151f, -0.002079f, -0.002630f, -0.000650f, -0.000241f, 0.001262f, 0.003391f, -0.010994f, -0.000992f, -0.005135f, -0.006482f, -0.000876f, 0.001869f, -0.005718f, 0.001523f, -0.004377f, -0.001590f, -0.001787f, -0.000128f, 0.003768f, 0.003523f, -0.002016f, -0.001291f, -0.002516f, -0.008890f, -0.002139f, -0.005506f, 0.000115f, -0.007265f, - 0.001940f, 0.000135f, 0.007321f, -0.002520f, 0.000974f, -0.006357f, 0.000518f, 0.000920f, -0.003013f, -0.003033f, 0.003084f, 0.000132f, 0.000789f, -0.000265f, 0.002149f, -0.000540f, 0.000867f, -0.000332f, -0.000553f, 0.002702f, 0.001173f, 0.001158f, 0.000361f, -0.000247f, 0.009939f, 0.011773f, -0.008215f, 0.001040f, -0.007010f, 0.010785f, 0.001967f, -0.004482f, -0.006347f, -0.005618f, -0.001190f, 0.001352f, 0.002846f, 0.014353f, -0.008566f, -0.001379f, -0.003414f, 0.005612f, -0.016070f, -0.001900f, 0.010215f, -0.000305f, 0.008580f, 0.003781f, 0.006878f, 0.007156f, 0.003102f, -0.001428f, -0.007557f, 0.002463f, -0.002130f, 0.000932f, 0.011949f, 0.002993f, 0.010249f, -0.005422f, -0.002829f, 0.000758f, -0.013838f, 0.001592f, 0.010303f, -0.003061f, 0.000942f, -0.008664f, 0.006502f, -0.000172f, 0.002876f, -0.010249f, 0.005995f, -0.006893f, -0.003850f, -0.007199f, -0.008447f, 0.004829f, 0.001628f, -0.002757f, -0.004334f, -0.004107f, -0.003021f, -0.002066f, 0.004750f, -0.004753f, -0.008580f, -0.013213f, 0.012182f, 0.009339f, 0.000487f, -0.013218f, 0.003990f, -0.006351f, 0.005179f, -0.004299f, - 0.000928f, -0.008107f, -0.005108f, -0.010553f, -0.004778f, -0.001494f, 0.010269f, 0.006107f, -0.011492f, 0.004959f, 0.000242f, -0.001015f, 0.005008f, -0.000697f, 0.003975f, 0.008152f, 0.000417f, 0.001707f, 0.005406f, 0.001106f, 0.001073f, 0.005342f, -0.000950f, -0.000154f, 0.000403f, 0.000687f, 0.001131f, 0.001321f, -0.001200f, 0.001544f, -0.001124f, 0.000386f, 0.000263f, 0.001366f, 0.000314f, 0.003382f, 0.002958f, 0.000207f, -0.000165f, 0.003320f, 0.001696f, -0.002502f, 0.000475f, 0.001196f, 0.049848f, -0.018438f, 0.022361f, -0.017670f, 0.001573f, 0.005349f, 0.005287f, -0.014578f, -0.004919f, -0.004860f, -0.024450f, -0.000079f, 0.001344f, -0.008775f, -0.001381f, -0.000052f, 0.017563f, 0.003293f, -0.012172f, 0.008977f, 0.009786f, 0.002229f, 0.017803f, -0.013150f, -0.004788f, -0.007002f, 0.003794f, 0.014280f, -0.000988f, 0.000952f, 0.005336f, -0.002489f, 0.006400f, 0.002926f, 0.016295f, -0.002398f, 0.006413f, -0.010592f, 0.009757f, -0.007399f, 0.010888f, -0.000139f, -0.011301f, -0.001648f, 0.016425f, -0.000669f, 0.011126f, 0.006711f, 0.010702f, 0.001006f, -0.008398f, -0.006808f, - 0.000216f, -0.005045f, 0.008792f, 0.005862f, -0.008624f, 0.001253f, -0.006730f, 0.011613f, -0.003105f, 0.009329f, 0.011107f, 0.001998f, 0.011448f, -0.000466f, -0.005494f, -0.001820f, -0.007012f, 0.000384f, 0.015031f, -0.009340f, -0.009589f, -0.003578f, 0.004294f, -0.006525f, -0.004044f, 0.002969f, 0.007240f, -0.002926f, 0.002683f, -0.014474f, 0.003617f, 0.001011f, -0.001003f, 0.005160f, 0.000360f, 0.001439f, 0.003496f, -0.000374f, -0.001846f, 0.001636f, -0.003314f, 0.001120f, -0.001360f, 0.000491f, 0.000670f, -0.000446f, -0.001132f, -0.002836f, -0.000196f, -0.002244f, -0.001411f, -0.000905f, -0.004976f, -0.041467f, 0.004546f, -0.012207f, -0.008728f, -0.013388f, -0.016231f, 0.006409f, 0.014523f, -0.002184f, 0.005650f, 0.002304f, 0.007460f, 0.001695f, 0.000550f, 0.004505f, -0.008885f, 0.020609f, -0.001069f, -0.011992f, 0.013526f, -0.004131f, 0.005743f, -0.013518f, -0.008412f, -0.009578f, 0.004150f, 0.002520f, 0.010583f, 0.000323f, -0.006575f, 0.001108f, -0.005871f, -0.006453f, -0.007161f, -0.002488f, -0.009970f, -0.005052f, 0.009287f, -0.008648f, -0.000615f, -0.006766f, -0.010583f, -0.004715f, - 0.001320f, 0.003388f, 0.006709f, -0.005329f, -0.004892f, 0.006635f, 0.001151f, 0.002496f, 0.001753f, 0.004106f, 0.006217f, -0.010129f, -0.003403f, -0.001032f, -0.014207f, 0.003757f, -0.001015f, 0.008306f, -0.008339f, -0.006362f, -0.007797f, 0.001334f, 0.008782f, 0.006806f, 0.015506f, 0.010414f, -0.009624f, 0.003892f, -0.004377f, 0.007341f, 0.004571f, -0.010387f, 0.007452f, 0.002005f, -0.011549f, 0.001477f, -0.002133f, 0.000980f, -0.002197f, -0.007876f, 0.001403f, -0.005653f, -0.005975f, 0.002168f, -0.003307f, 0.001358f, 0.004180f, -0.002838f, -0.003818f, -0.003931f, -0.005913f, -0.001100f, 0.004476f, -0.001207f, 0.004656f, 0.000031f, 0.003127f, 0.002153f, 0.001601f, -0.002108f, -0.000880f, 0.000800f, -0.002104f, -0.002293f, 0.000478f, -0.002213f, -0.000912f, 0.000594f, -0.004187f, 0.002310f, -0.002176f, -0.000722f, 0.000408f, -0.000149f, 0.000261f, 0.001330f, -0.001908f, 0.001183f, 0.002696f, -0.052805f, 0.014498f, -0.015749f, -0.013122f, -0.009438f, 0.001780f, -0.002746f, 0.031105f, 0.003065f, 0.007442f, -0.003465f, 0.000119f, -0.012776f, 0.012689f, 0.003709f, -0.001851f, 0.002553f, - 0.016565f, -0.008295f, -0.002871f, 0.003829f, 0.001142f, 0.008322f, -0.007247f, -0.003252f, 0.009132f, 0.003361f, 0.008411f, 0.001012f, -0.008950f, -0.005849f, 0.005025f, -0.000866f, -0.003052f, -0.005577f, -0.003241f, -0.000364f, 0.015682f, 0.003970f, -0.002863f, 0.000334f, 0.001136f, -0.004760f, 0.011287f, 0.008665f, -0.002725f, -0.011881f, 0.002944f, -0.006289f, 0.010732f, 0.008366f, -0.008425f, 0.003278f, -0.010901f, -0.009678f, -0.008556f, -0.010680f, -0.003739f, 0.002361f, -0.006476f, 0.000534f, -0.007150f, -0.006011f, 0.012342f, 0.007888f, -0.010566f, -0.014184f, 0.001530f, 0.012085f, -0.009394f, -0.006918f, 0.010139f, 0.008035f, 0.011572f, -0.007509f, -0.000407f, 0.003292f, 0.004722f, 0.013087f, 0.003453f, -0.001713f, -0.000591f, -0.009537f, -0.001525f, -0.000174f, -0.008280f, 0.000597f, -0.002510f, -0.003737f, 0.000059f, -0.001108f, 0.003932f, -0.000971f, -0.001683f, 0.001915f, -0.001337f, -0.003412f, -0.002357f, 0.000714f, 0.003142f, -0.001564f, -0.001342f, 0.000096f, -0.000934f, 0.006128f, 0.000976f, 0.007946f, -0.005760f, 0.001431f, 0.000271f, -0.003321f, -0.000223f, -0.000282f, - -0.004408f, 0.001073f, -0.000969f, -0.004722f, -0.004534f, -0.002297f, -0.004347f, -0.003208f, 0.000938f, -0.002099f, -0.027790f, -0.002738f, 0.004702f, 0.013542f, -0.002614f, -0.007070f, 0.003192f, 0.019890f, -0.025007f, 0.005818f, -0.005057f, -0.004633f, -0.011243f, 0.006785f, -0.020033f, -0.013046f, 0.006922f, -0.010476f, 0.006371f, 0.028587f, -0.005028f, 0.011559f, -0.013410f, 0.013808f, -0.003556f, 0.004123f, -0.012023f, 0.005634f, 0.003455f, -0.006455f, 0.002874f, -0.001299f, -0.006166f, -0.000410f, 0.007885f, 0.012306f, -0.009597f, -0.015363f, -0.012138f, -0.011277f, 0.001500f, 0.009022f, 0.023938f, -0.000273f, 0.016135f, 0.016808f, -0.015596f, 0.012024f, -0.022957f, -0.008411f, 0.001501f, -0.010232f, -0.009490f, 0.006378f, -0.022228f, -0.004404f, 0.015545f, -0.006689f, -0.005781f, 0.002043f, -0.006757f, 0.006332f, -0.006703f, 0.010865f, 0.014091f, -0.003895f, 0.004414f, 0.000579f, -0.014167f, 0.001218f, -0.009151f, -0.006350f, -0.011181f, 0.006384f, 0.004941f, -0.010797f, 0.000929f, 0.008035f, 0.007528f, 0.009520f, 0.009873f, -0.001508f, -0.009281f, 0.007733f, 0.004105f, 0.004629f, - 0.002585f, 0.005591f, -0.000579f, -0.000189f, 0.000877f, 0.002297f, 0.002769f, -0.003829f, -0.001119f, -0.003090f, -0.001993f, 0.004487f, 0.003917f, 0.004332f, -0.007814f, 0.001606f, -0.000925f, -0.003250f, -0.003744f, 0.004058f, -0.002449f, -0.004306f, 0.001152f, 0.001016f, -0.001356f, 0.009576f, 0.003242f, -0.001882f, -0.002057f, -0.004452f, -0.001168f, 0.003914f, 0.006029f, 0.001498f, 0.000080f, 0.006002f, 0.066013f, -0.003078f, -0.025956f, -0.003157f, -0.001034f, 0.002606f, 0.008414f, 0.003496f, -0.002909f, -0.002596f, -0.013013f, -0.006106f, 0.007471f, 0.016214f, -0.013082f, -0.008189f, 0.010867f, 0.000987f, -0.003753f, 0.004422f, -0.000933f, -0.015161f, -0.015436f, 0.021289f, -0.001852f, -0.001229f, -0.003415f, 0.010994f, -0.000719f, 0.001268f, 0.007049f, -0.011476f, 0.012432f, 0.005242f, 0.002134f, 0.004823f, 0.012428f, -0.029454f, -0.013110f, -0.007069f, 0.027391f, 0.003646f, 0.002175f, -0.008267f, -0.009114f, 0.008287f, -0.001092f, 0.009588f, -0.003230f, -0.018776f, 0.002167f, 0.002439f, -0.002723f, 0.009316f, 0.004266f, 0.002596f, 0.015254f, 0.036964f, -0.002772f, -0.002984f, - 0.014173f, 0.004392f, -0.004206f, 0.009767f, 0.028811f, -0.003090f, 0.005634f, 0.010507f, 0.008491f, 0.007585f, 0.007768f, 0.008645f, 0.006717f, -0.007452f, 0.011591f, 0.020570f, -0.004574f, 0.007964f, 0.000266f, -0.002453f, -0.013994f, 0.008945f, 0.003496f, -0.001033f, 0.004442f, 0.005025f, 0.001328f, 0.000686f, -0.004610f, -0.005369f, -0.002001f, -0.010811f, -0.004695f, -0.007290f, 0.009656f, 0.004766f, 0.003772f, -0.001428f, -0.001266f, 0.000670f, -0.006117f, 0.000123f, 0.002475f, -0.008569f, 0.007776f, -0.003676f, 0.001522f, -0.002550f, 0.000585f, 0.002986f, 0.003631f, -0.006661f, -0.006519f, -0.005472f, 0.000928f, -0.001055f, -0.001681f, -0.000418f, 0.004868f, -0.001145f, 0.000669f, -0.002687f, -0.005767f, -0.003153f, 0.013326f, 0.014838f, -0.018847f, -0.005450f, -0.015997f, 0.015888f, 0.029737f, -0.014205f, -0.003321f, -0.016300f, -0.007080f, -0.019729f, 0.014101f, -0.012033f, -0.004890f, -0.001249f, 0.000154f, -0.007834f, -0.009666f, 0.017770f, -0.016088f, -0.005918f, 0.001853f, 0.012137f, 0.012937f, -0.018526f, -0.005446f, 0.007171f, -0.015953f, 0.009104f, -0.012655f, -0.005122f, - 0.004674f, 0.000413f, -0.006922f, -0.001887f, 0.003822f, 0.020778f, 0.002570f, 0.004726f, 0.000009f, -0.017685f, 0.019375f, -0.009457f, -0.014524f, 0.011673f, -0.010354f, -0.011667f, 0.015270f, -0.006857f, 0.001954f, -0.003326f, 0.002051f, 0.020122f, -0.003436f, 0.004554f, -0.017552f, -0.001323f, 0.020426f, 0.004626f, 0.020236f, 0.017388f, -0.005710f, -0.004377f, -0.023552f, 0.003678f, -0.003966f, 0.015672f, 0.019118f, -0.010932f, 0.004753f, -0.034522f, -0.009471f, 0.011526f, -0.011964f, 0.017993f, 0.001190f, 0.003942f, -0.006364f, -0.001269f, -0.008315f, 0.001541f, -0.005738f, 0.012731f, 0.012426f, -0.000490f, 0.004218f, -0.000115f, 0.007011f, 0.003116f, 0.005071f, 0.010775f, -0.003247f, -0.011951f, 0.005496f, 0.002822f, 0.007596f, -0.001901f, 0.008060f, -0.001567f, -0.002844f, 0.002128f, -0.004903f, -0.003144f, 0.000790f, -0.008365f, 0.002325f, -0.002849f, 0.007459f, 0.003339f, -0.000594f, -0.001496f, -0.004990f, -0.007398f, -0.000646f, 0.001122f, 0.002999f, -0.002647f, 0.001631f, -0.006946f, -0.000146f, 0.000536f, -0.003779f, 0.004846f, 0.000424f, 0.000229f, 0.001957f, -0.002188f, - 0.000312f, 0.000168f, 0.011933f, -0.015150f, 0.005203f, -0.014166f, -0.001534f, -0.019139f, 0.031473f, -0.009248f, 0.002152f, -0.009919f, -0.028685f, 0.016559f, 0.005807f, -0.021401f, 0.013273f, -0.009632f, -0.007091f, 0.007508f, 0.029791f, -0.014846f, 0.028780f, -0.000547f, -0.020208f, 0.000870f, 0.006734f, -0.017770f, 0.019651f, -0.010281f, 0.014555f, 0.031634f, 0.003104f, -0.014742f, -0.004120f, -0.001659f, 0.007260f, -0.012532f, -0.006846f, -0.001667f, 0.015594f, -0.005533f, -0.006245f, -0.020662f, -0.000689f, -0.024433f, -0.004496f, 0.027757f, -0.006206f, 0.015822f, 0.001513f, 0.004249f, -0.036319f, 0.000539f, -0.023233f, 0.018771f, 0.032575f, 0.010090f, 0.008200f, 0.002069f, 0.004899f, -0.018939f, 0.006714f, 0.010196f, -0.008437f, -0.002314f, -0.007476f, -0.004721f, 0.014699f, 0.000392f, 0.017825f, 0.054607f, 0.019949f, 0.005508f, -0.018709f, -0.017348f, -0.011259f, 0.010786f, -0.018524f, -0.001544f, -0.001663f, 0.003867f, 0.010524f, -0.010106f, -0.001890f, 0.010216f, 0.011167f, 0.002367f, 0.001930f, 0.007651f, 0.009620f, 0.008084f, -0.000061f, -0.001697f, -0.001770f, 0.000925f, - -0.003933f, -0.004865f, 0.004375f, -0.002419f, 0.006784f, -0.008183f, -0.002587f, 0.005803f, 0.004890f, -0.000405f, 0.004421f, -0.004168f, 0.002032f, 0.003098f, 0.004107f, -0.004583f, -0.004566f, 0.006563f, 0.004654f, 0.003726f, -0.001643f, -0.003166f, 0.001597f, -0.009113f, -0.002391f, 0.001573f, -0.004880f, 0.002340f, -0.003380f, -0.002295f, 0.001068f, 0.000849f, -0.000754f, -0.001724f, -0.006835f, 0.056990f, -0.030863f, -0.000846f, -0.015337f, -0.028926f, -0.038605f, 0.010686f, -0.012385f, 0.011316f, -0.036543f, 0.007155f, 0.013006f, 0.011702f, -0.015366f, -0.033551f, -0.026433f, -0.022198f, 0.000245f, -0.012929f, -0.024514f, -0.016880f, -0.008613f, -0.020027f, -0.013997f, 0.003266f, 0.025175f, -0.000751f, 0.003524f, -0.001004f, -0.022292f, 0.013563f, -0.002109f, 0.003890f, -0.005049f, -0.014822f, 0.012407f, -0.018456f, -0.025719f, 0.022800f, -0.025095f, 0.004782f, -0.000339f, -0.035188f, -0.021037f, 0.013517f, -0.000746f, 0.016659f, -0.011312f, -0.037377f, -0.000275f, 0.001096f, 0.013751f, 0.014622f, 0.034625f, -0.020348f, -0.071733f, -0.025257f, -0.024555f, 0.015807f, -0.046785f, -0.016007f, - -0.007917f, -0.042988f, -0.014389f, -0.000967f, -0.008281f, -0.008264f, 0.009197f, -0.011776f, -0.001156f, -0.011064f, 0.009912f, -0.025391f, 0.008929f, 0.019959f, -0.025592f, -0.013047f, 0.012400f, 0.009608f, 0.008323f, -0.026311f, 0.006056f, 0.000062f, -0.003822f, 0.013577f, -0.003619f, 0.011122f, 0.009906f, -0.002501f, 0.002985f, 0.001945f, -0.003285f, -0.008921f, 0.014099f, -0.004916f, -0.010156f, 0.000067f, -0.000540f, 0.007379f, 0.002560f, -0.000217f, 0.002232f, -0.007757f, -0.007826f, 0.000623f, 0.002548f, 0.004329f, 0.008012f, -0.001191f, 0.003582f, -0.001046f, 0.003150f, -0.008988f, -0.003950f, -0.006306f, -0.005737f, -0.001154f, -0.001345f, 0.002988f, -0.010079f, -0.004735f, -0.007583f, -0.005497f, -0.010554f, -0.012999f, -0.011513f, -0.001445f, -0.001187f, 0.001165f, -0.007143f, -0.009188f, -0.033087f, 0.012997f, 0.016265f, -0.005517f, -0.006416f, -0.016534f, -0.018216f, 0.041897f, 0.015247f, -0.039247f, 0.013523f, -0.021418f, -0.002065f, -0.019468f, -0.040268f, 0.011742f, -0.020992f, -0.008857f, 0.001651f, 0.001100f, -0.010254f, -0.034121f, -0.021110f, 0.016620f, -0.020869f, -0.000657f, - -0.018456f, -0.028412f, -0.011019f, 0.031376f, 0.005061f, 0.005519f, -0.027406f, -0.009280f, -0.005589f, -0.003659f, 0.011182f, 0.013706f, 0.017815f, 0.021918f, -0.010695f, 0.012316f, 0.004389f, -0.012794f, 0.007862f, -0.021443f, -0.018543f, -0.016170f, 0.007009f, -0.018668f, 0.000975f, -0.028027f, -0.024422f, -0.012712f, 0.029063f, 0.022542f, 0.022113f, 0.024203f, -0.022248f, 0.030347f, 0.001132f, 0.013936f, 0.041968f, -0.008684f, -0.007563f, 0.006730f, -0.019995f, 0.008222f, -0.009302f, -0.026103f, 0.003568f, 0.021170f, -0.024950f, -0.018010f, -0.002882f, 0.022752f, -0.018895f, 0.002086f, 0.007261f, 0.013636f, 0.003677f, -0.005793f, -0.012784f, 0.003385f, 0.009992f, -0.005470f, 0.001509f, -0.006861f, 0.002440f, -0.006533f, 0.002858f, 0.000278f, 0.003907f, -0.002578f, 0.002807f, 0.004468f, 0.012134f, -0.001672f, 0.000088f, 0.000789f, 0.005857f, -0.008949f, -0.003275f, -0.009841f, -0.002313f, -0.002370f, -0.010651f, 0.001871f, 0.010436f, -0.001125f, -0.012733f, -0.002473f, -0.000747f, -0.011693f, -0.012424f, -0.019072f, -0.007320f, 0.006948f, 0.001674f, 0.004830f, -0.002332f, -0.003662f, - -0.006223f, -0.001275f, -0.015987f, -0.003307f, 0.010493f, 0.015459f, -0.000206f, 0.004431f, -0.008762f, -0.015632f, -0.036692f, 0.042351f, -0.032774f, 0.043852f, 0.024613f, 0.016817f, 0.009516f, 0.017344f, 0.018803f, 0.017419f, 0.047098f, -0.016243f, 0.003469f, -0.002948f, -0.007944f, -0.001234f, 0.005972f, -0.004168f, 0.009180f, -0.002851f, 0.014827f, 0.012511f, -0.002501f, -0.007933f, -0.046643f, -0.016467f, -0.033798f, -0.001366f, 0.018024f, 0.018252f, 0.005871f, 0.009400f, 0.013614f, 0.011351f, 0.013196f, 0.033715f, 0.050094f, 0.033738f, 0.006877f, -0.006146f, -0.009544f, -0.014137f, 0.017593f, 0.018023f, 0.020071f, -0.014636f, -0.011605f, -0.018204f, -0.002949f, 0.024572f, 0.000327f, 0.029403f, -0.017610f, 0.015854f, 0.009499f, 0.026414f, -0.054669f, -0.038982f, -0.015983f, -0.021778f, -0.022439f, 0.006986f, -0.009124f, 0.034691f, 0.010290f, -0.038185f, -0.003112f, 0.062405f, -0.020908f, 0.019626f, -0.009348f, 0.025790f, -0.011861f, -0.007531f, 0.000954f, -0.010314f, -0.013839f, -0.000753f, 0.010479f, 0.015628f, 0.010747f, -0.003790f, 0.012112f, -0.002969f, 0.005608f, -0.015589f, - -0.010773f, 0.010403f, 0.006457f, -0.015672f, -0.006943f, -0.006506f, -0.002143f, 0.004215f, -0.004205f, -0.007551f, 0.003579f, 0.000965f, 0.002584f, -0.000996f, -0.004532f, 0.007329f, 0.002272f, -0.003751f, 0.009316f, -0.001052f, 0.002704f, -0.001486f, 0.010981f, -0.009119f, 0.009766f, 0.004574f, -0.009308f, 0.006365f, 0.000249f, 0.001892f, -0.009718f, -0.027855f, 0.010443f, 0.000503f, 0.001931f, -0.002964f, 0.010599f, -0.002341f, -0.005140f, 0.003688f, 0.008236f, 0.007204f, -0.004297f, 0.008870f, -0.027011f, -0.013532f, 0.022342f, 0.009752f, 0.016469f, 0.043024f, 0.003644f, 0.028745f, 0.042005f, 0.029185f, -0.019076f, -0.042780f, -0.001490f, -0.019648f, 0.046063f, 0.013263f, 0.035973f, -0.005163f, -0.019374f, -0.007132f, -0.021138f, 0.008303f, -0.016284f, 0.001941f, -0.018134f, 0.009386f, -0.013272f, -0.005569f, -0.029084f, -0.028760f, -0.002935f, -0.041194f, 0.022464f, 0.015521f, -0.012412f, 0.021070f, -0.010132f, 0.008183f, 0.023374f, -0.026052f, -0.034227f, 0.006050f, -0.007562f, 0.057270f, 0.024230f, -0.062894f, -0.017089f, -0.017871f, -0.032555f, -0.034362f, -0.070352f, 0.012354f, - -0.025292f, -0.006618f, 0.009938f, 0.002525f, 0.014325f, -0.002819f, -0.008449f, -0.053262f, 0.006188f, -0.024233f, 0.006395f, 0.031178f, 0.006422f, 0.020896f, -0.031866f, -0.042132f, 0.008354f, 0.026070f, 0.017414f, 0.009774f, 0.016534f, 0.027107f, 0.033780f, 0.034883f, -0.031203f, -0.018705f, -0.022530f, -0.016011f, -0.026277f, 0.036808f, 0.021405f, 0.020748f, 0.005496f, 0.015865f, 0.013413f, -0.001308f, 0.019056f, -0.029678f, -0.010634f, -0.003548f, 0.002239f, -0.006425f, -0.021241f, 0.001201f, -0.004463f, 0.002740f, 0.006625f, 0.021517f, 0.000985f, 0.010074f, 0.009875f, 0.001623f, 0.010493f, 0.000369f, -0.006708f, 0.001331f, -0.016366f, -0.006539f, 0.008393f, 0.012431f, 0.003587f, 0.002299f, -0.019976f, -0.001884f, 0.000459f, -0.009461f, -0.006821f, 0.002967f, 0.006086f, -0.018086f, -0.020310f, -0.009102f, 0.006546f, 0.005873f, 0.009977f, 0.002507f, -0.006667f, 0.004558f, -0.021031f, -0.018400f, 0.076007f, 0.050197f, 0.069737f, 0.004511f, -0.013835f, -0.047400f, -0.013985f, 0.007910f, 0.010991f, -0.011316f, -0.036625f, -0.013258f, 0.060256f, 0.024894f, -0.008340f, 0.018431f, - -0.001365f, -0.022169f, -0.006471f, -0.014477f, 0.041084f, -0.003190f, 0.002408f, 0.017700f, 0.001162f, 0.020088f, -0.000213f, 0.028449f, -0.026217f, 0.032784f, 0.006644f, -0.015330f, -0.009252f, -0.016978f, 0.029630f, -0.041107f, -0.044342f, 0.027991f, 0.046368f, 0.002124f, 0.032007f, 0.043968f, -0.049575f, 0.016441f, 0.010125f, -0.002783f, -0.000457f, 0.007296f, -0.018613f, 0.034498f, -0.020984f, -0.016744f, 0.013956f, 0.001687f, -0.003758f, -0.008117f, -0.010345f, 0.004906f, -0.032754f, -0.009890f, 0.026356f, -0.032389f, -0.007456f, -0.021910f, 0.000803f, 0.065270f, -0.020552f, 0.004103f, 0.017471f, 0.000220f, -0.015071f, -0.040938f, 0.039872f, 0.018499f, -0.082262f, 0.020263f, 0.020672f, 0.015182f, -0.018469f, -0.008716f, 0.041980f, 0.001754f, 0.003064f, 0.010635f, -0.029254f, 0.000975f, 0.018557f, -0.007745f, 0.010706f, -0.002492f, -0.009539f, -0.024523f, 0.003669f, -0.003372f, 0.022532f, -0.002279f, -0.001012f, -0.016406f, 0.017834f, -0.006210f, -0.006279f, -0.025909f, -0.012989f, 0.008834f, -0.016623f, 0.001154f, -0.008233f, 0.010062f, -0.009772f, -0.020915f, 0.010363f, -0.022521f, - -0.006202f, -0.010377f, 0.000942f, 0.001097f, -0.008472f, 0.021938f, -0.002863f, 0.029665f, 0.018143f, -0.003304f, 0.003011f, 0.018857f, -0.013428f, 0.003116f, 0.002121f, 0.018061f, -0.016818f, -0.010213f, -0.033474f, -0.080908f, 0.072904f, 0.043659f, 0.023445f, 0.016640f, 0.036259f, -0.081647f, 0.034210f, 0.038429f, 0.016726f, -0.052088f, 0.029741f, 0.053661f, 0.025118f, 0.059120f, 0.021858f, 0.001505f, -0.001852f, -0.001335f, -0.009513f, 0.025343f, 0.042118f, 0.040172f, 0.014334f, -0.011683f, -0.020225f, 0.005453f, -0.018374f, -0.021546f, 0.023660f, 0.016461f, 0.004874f, -0.021594f, -0.021052f, -0.004217f, -0.018246f, 0.010045f, 0.048315f, -0.008003f, -0.015033f, 0.016665f, 0.009115f, 0.014691f, 0.017154f, -0.003154f, -0.009229f, 0.038968f, 0.025875f, 0.013083f, 0.017397f, -0.002591f, -0.037799f, 0.009374f, 0.025863f, 0.003806f, -0.028034f, 0.038574f, 0.010335f, 0.053459f, 0.002370f, 0.048108f, 0.005489f, -0.015095f, -0.004674f, 0.011924f, 0.068152f, -0.008054f, 0.024742f, 0.017204f, 0.032398f, 0.017277f, 0.000523f, -0.001554f, 0.021258f, 0.096918f, 0.004875f, 0.039183f, - -0.032328f, -0.023912f, 0.012602f, 0.015660f, 0.019140f, 0.008227f, 0.003426f, -0.046889f, -0.018410f, -0.049191f, 0.003040f, -0.008042f, -0.016089f, -0.013405f, -0.005208f, -0.020475f, 0.002943f, -0.001691f, -0.021739f, 0.016242f, -0.025377f, -0.011991f, -0.022891f, -0.015372f, -0.001247f, 0.003023f, -0.018270f, -0.021047f, 0.005434f, 0.014142f, 0.016223f, -0.002790f, -0.005874f, -0.027223f, -0.035955f, 0.004071f, 0.004649f, -0.016046f, 0.033142f, 0.032311f, 0.047357f, 0.016980f, -0.010189f, 0.006876f, 0.014744f, 0.018277f, 0.021592f, 0.003583f, -0.022197f, 0.006050f, 0.028785f, 0.015080f, 0.001599f, 0.011863f, -0.053173f, 0.058037f, -0.001011f, 0.051362f, 0.001138f, 0.003395f, -0.046869f, -0.014457f, -0.021170f, 0.035625f, 0.008936f, 0.015753f, 0.009282f, -0.035949f, 0.003393f, 0.002822f, -0.031679f, -0.045159f, -0.046267f, 0.015576f, -0.017315f, 0.041962f, 0.002232f, -0.013342f, -0.011090f, 0.009044f, -0.016455f, 0.002706f, 0.012109f, -0.017665f, 0.009716f, 0.014165f, 0.004612f, 0.004062f, 0.031544f, 0.053426f, -0.010686f, -0.000397f, 0.026602f, 0.022004f, 0.031902f, -0.023805f, - -0.009588f, 0.009726f, -0.032202f, 0.003166f, 0.002527f, -0.042387f, 0.054451f, -0.002628f, 0.027353f, 0.023892f, 0.016457f, -0.032223f, 0.002797f, 0.027656f, -0.022712f, 0.049174f, 0.013223f, -0.017879f, 0.040339f, 0.030693f, 0.021092f, -0.068284f, -0.014198f, 0.013694f, -0.023616f, 0.003765f, -0.038403f, -0.009458f, -0.058061f, -0.016442f, -0.009115f, -0.015865f, -0.064317f, -0.006331f, -0.017767f, 0.096332f, -0.014141f, 0.019706f, -0.010171f, 0.015509f, -0.008366f, -0.015589f, 0.010112f, -0.013046f, -0.002322f, -0.006952f, 0.025562f, 0.009429f, 0.011075f, -0.041410f, -0.037464f, -0.027612f, -0.011856f, 0.007528f, -0.052547f, -0.008233f, -0.004502f, 0.004105f, 0.018830f, 0.014681f, -0.001862f, 0.020487f, -0.018592f, 0.000643f, 0.000801f, -0.029854f, -0.041860f, 0.008451f, -0.012459f, -0.038295f, -0.010878f, -0.017885f, 0.002328f, -0.040937f, -0.005007f, -0.017698f, 0.024035f, 0.000719f, -0.017900f, -0.006084f, 0.007278f, 0.009970f, -0.004248f, 0.018967f, -0.019129f, -0.011321f, 0.023803f, 0.023387f, 0.029967f, 0.026322f, 0.019616f, -0.014221f, 0.012272f, 0.032857f, 0.031729f, 0.013973f, - -0.038248f, -0.044394f, 0.019782f, -0.006078f, 0.014324f, -0.008138f, 0.037761f, -0.028090f, -0.005751f, -0.009662f, 0.032949f, -0.024666f, 0.057717f, 0.070913f, 0.072356f, 0.004500f, -0.013326f, 0.011785f, -0.009309f, 0.017736f, -0.002997f, -0.000350f, -0.021092f, -0.057963f, -0.019234f, -0.055509f, 0.031946f, 0.030034f, -0.034146f, -0.025575f, -0.034230f, -0.015990f, -0.004861f, 0.075808f, 0.000987f, -0.038591f, -0.041425f, -0.002449f, 0.053069f, 0.025369f, -0.106074f, -0.021605f, -0.018668f, 0.014026f, 0.040015f, -0.046053f, -0.014498f, -0.027400f, 0.012174f, -0.062864f, 0.031412f, -0.010434f, -0.001303f, 0.017526f, 0.002718f, -0.030754f, 0.062242f, -0.006162f, 0.029687f, 0.066564f, 0.136451f, 0.081813f, -0.001848f, 0.045990f, 0.069669f, 0.089476f, 0.097066f, 0.027797f, 0.059525f, 0.017052f, 0.000935f, 0.036516f, -0.028506f, 0.059865f, 0.025812f, -0.025919f, -0.088959f, -0.064780f, 0.008652f, -0.025272f, -0.018086f, -0.016369f, -0.009675f, -0.010856f, -0.036510f, -0.023941f, 0.001587f, -0.005576f, -0.001786f, -0.011450f, -0.003019f, -0.019020f, 0.024006f, -0.039514f, -0.015964f, 0.011611f, - 0.007567f, 0.003706f, -0.009962f, -0.012259f, -0.006719f, 0.008133f, -0.006026f, 0.020580f, -0.023702f, -0.029976f, -0.029866f, -0.018456f, 0.023308f, 0.025928f, -0.009323f, -0.004340f, 0.009736f, -0.004768f, 0.043113f, 0.009430f, 0.004135f, 0.034409f, 0.021851f, 0.019754f, 0.048941f, 0.032073f, 0.036930f, 0.011554f, 0.018017f, 0.040242f, 0.015892f, 0.016713f, -0.013380f, -0.030292f, 0.035251f, -0.044046f, 0.074158f, -0.008587f, -0.013425f, 0.001517f, 0.059088f, -0.039215f, -0.006800f, -0.001571f, 0.000950f, 0.021533f, -0.015104f, 0.030988f, 0.010859f, -0.005658f, 0.007312f, 0.003684f, 0.024380f, -0.074017f, -0.023238f, -0.002129f, 0.007995f, -0.007197f, -0.053899f, 0.044487f, -0.002317f, 0.006199f, 0.016200f, -0.035131f, -0.015938f, -0.081690f, 0.021807f, -0.019050f, 0.015806f, 0.059859f, -0.016270f, 0.012640f, -0.007585f, 0.028594f, -0.048744f, -0.065259f, 0.057367f, -0.005281f, 0.005029f, 0.009790f, 0.057699f, 0.042059f, 0.050090f, -0.000781f, -0.066811f, 0.039780f, 0.018743f, -0.015739f, -0.023574f, 0.038022f, -0.006850f, 0.048054f, 0.079483f, 0.061777f, 0.010607f, 0.005441f, - 0.058661f, -0.011498f, 0.018081f, 0.048246f, -0.032721f, 0.055775f, 0.034201f, 0.019919f, -0.039298f, -0.019408f, -0.052470f, -0.001480f, 0.018130f, 0.078305f, 0.033057f, -0.072608f, -0.006616f, 0.047050f, -0.006802f, 0.022934f, 0.031572f, -0.051475f, -0.012655f, 0.025226f, 0.006149f, 0.014130f, -0.022428f, 0.016787f, 0.028441f, 0.003752f, 0.000488f, 0.041586f, 0.007996f, -0.008886f, -0.010711f, 0.013847f, -0.003600f, 0.022375f, 0.003583f, 0.016949f, 0.019263f, -0.002852f, -0.019857f, 0.040935f, -0.005820f, -0.012485f, -0.002584f, -0.027698f, -0.027863f, -0.018275f, -0.019287f, 0.013336f, 0.024245f, -0.024278f, -0.020805f, 0.004897f, 0.036403f, -0.052467f, -0.012710f, 0.020322f, -0.006204f, 0.000171f, -0.007129f, -0.005639f, -0.037725f, -0.000494f, -0.010044f, 0.010489f, 0.002922f, 0.006312f, 0.000442f, 0.003299f, -0.002986f, -0.102796f, 0.023477f, -0.017053f, -0.004098f, 0.080188f, 0.034418f, -0.025195f, -0.019556f, -0.000337f, -0.051977f, -0.063608f, 0.005293f, 0.000530f, -0.035863f, 0.037946f, 0.004510f, -0.036711f, 0.023098f, 0.069004f, -0.009347f, -0.039768f, 0.024867f, -0.023417f, - -0.025629f, 0.012883f, 0.055940f, -0.018243f, 0.008092f, 0.015381f, -0.017409f, -0.041715f, -0.027506f, 0.055370f, 0.019346f, -0.054550f, 0.046548f, 0.018337f, -0.037539f, -0.019518f, 0.076733f, -0.024972f, -0.059149f, -0.030279f, 0.102026f, -0.100834f, -0.046915f, 0.059903f, -0.027256f, -0.032391f, -0.096295f, 0.075041f, -0.061725f, 0.022094f, 0.003015f, -0.011483f, -0.108735f, -0.032020f, 0.092718f, 0.058656f, -0.073635f, -0.020037f, -0.032004f, -0.014970f, 0.014852f, 0.020262f, 0.023979f, -0.128152f, 0.069931f, 0.053875f, 0.056228f, 0.000972f, 0.029326f, -0.062649f, -0.056011f, 0.109859f, 0.044804f, 0.012268f, 0.043962f, -0.058964f, 0.011657f, -0.026021f, 0.027995f, -0.015834f, 0.076771f, -0.031272f, -0.027021f, 0.010813f, 0.009048f, -0.029000f, 0.017288f, 0.008605f, 0.006304f, -0.005352f, 0.003645f, 0.006343f, 0.006010f, -0.007066f, -0.004432f, 0.016283f, 0.000661f, -0.008399f, 0.033430f, 0.010092f, -0.030235f, 0.003462f, 0.028630f, 0.007701f, -0.028780f, 0.038396f, 0.068358f, -0.033575f, -0.039644f, -0.010507f, -0.009169f, 0.023460f, 0.049995f, 0.015408f, -0.046842f, -0.015333f, - -0.007073f, 0.007106f, 0.013849f, -0.007661f, 0.020266f, -0.014688f, -0.002090f, 0.012205f, -0.084614f, 0.014821f, 0.105953f, 0.033206f, 0.011489f, 0.003023f, 0.008079f, 0.045507f, 0.062256f, -0.014089f, 0.011731f, 0.016190f, -0.010575f, 0.037596f, -0.019639f, -0.005189f, -0.014835f, 0.028909f, 0.021496f, -0.011648f, 0.019772f, -0.028117f, -0.022893f, 0.028865f, -0.018377f, 0.031707f, -0.020957f, -0.009246f, -0.000512f, 0.017380f, -0.000977f, 0.012959f, 0.005307f, 0.032286f, -0.022925f, -0.004502f, 0.000665f, -0.012701f, 0.031171f, 0.027058f, -0.022174f, -0.007803f, -0.013592f, 0.007243f, -0.028637f, 0.015600f, 0.008957f, 0.014327f, -0.011389f, -0.008616f, 0.035466f, -0.042412f, -0.007263f, 0.018033f, -0.011445f, -0.007635f, 0.018593f, -0.052147f, 0.012701f, -0.018815f, 0.003211f, -0.018423f, 0.045264f, -0.014614f, -0.019428f, 0.018642f, -0.010175f, -0.029522f, 0.057542f, -0.001497f, 0.005972f, -0.012750f, -0.022041f, -0.025985f, 0.029074f, -0.032475f, -0.015614f, 0.033228f, -0.045145f, -0.019616f, 0.005924f, -0.004156f, 0.005643f, -0.000624f, 0.006547f, 0.020230f, -0.007147f, 0.007982f, - -0.009132f, 0.021224f, 0.011675f, -0.000812f, 0.001888f, 0.012965f, -0.011217f, 0.009446f, 0.001622f, 0.010381f, -0.004557f, 0.016088f, -0.008057f, 0.004391f, -0.013828f, -0.011933f, -0.018926f, 0.003638f, 0.001214f, 0.006454f, -0.009224f, 0.021369f, -0.006929f, -0.003568f, 0.018349f, 0.016184f, 0.008724f, -0.007394f, -0.012154f, 0.011075f, 0.014653f, 0.009216f, 0.006383f, -0.000106f, 0.013252f, 0.014361f, 0.006402f, 0.012212f, 0.001686f, -0.009316f, 0.027446f, -0.079121f, -0.223245f, -0.183447f, 0.096635f, 0.027562f, 0.221445f, 0.395844f, 0.058594f, 0.124650f, 0.045194f, -0.316122f, -0.100132f, -0.214524f, -0.259215f, 0.007059f, 0.041119f, -0.108250f, 0.156304f, 0.204670f, 0.114761f, 0.326554f, 0.188212f, -0.042264f, -0.077808f, -0.151859f, -0.295383f, -0.233297f, -0.068946f, -0.208061f, -0.029212f, 0.179106f, 0.029697f, 0.041521f, 0.270858f, 0.138082f, 0.085303f, 0.282439f, 0.043300f, -0.078254f, 0.110255f, -0.148259f, -0.293472f, -0.122928f, -0.247641f, -0.309837f, -0.004778f, -0.064879f, -0.081749f, 0.205983f, 0.226993f, 0.144388f, 0.342612f, 0.276427f, 0.130251f, 0.117809f, - 0.068081f, -0.229327f, -0.211017f, -0.267116f, -0.352661f, -0.282774f, -0.119491f, -0.082122f, 0.006969f, 0.202381f, 0.246093f, 0.257673f, 0.246947f, 0.228875f, 0.048598f, 0.004047f, -0.039178f, -0.174836f, -0.191613f, -0.110781f, -0.200907f, -0.084623f, 0.017226f, -0.043973f, 0.100401f, 0.180985f, 0.055116f, 0.076357f, 0.033761f, -0.049645f, -0.031146f, -0.075894f, -0.098812f, -0.012012f, 0.027421f, 0.000606f, 0.080974f, 0.074845f, 0.008225f, 0.072049f, -0.000271f, -0.091537f, 0.080360f, 0.024143f, -0.081568f, 0.056988f, -0.060496f, -0.122267f, 0.055492f, -0.087046f, -0.215568f, 0.003266f, -0.095064f, -0.062808f, 0.213069f, 0.096437f, 0.101157f, 0.305180f, 0.202109f, 0.112233f, 0.132974f, -0.033309f, -0.193255f, -0.245372f, -0.333350f, -0.368539f, -0.234088f, -0.149449f, -0.026028f, 0.140169f, 0.311983f, 0.344648f, 0.319330f, 0.332751f, 0.177714f, 0.008173f, -0.085083f, -0.219104f, -0.280492f, -0.181406f, -0.202647f, -0.161197f, -0.032548f, 0.006162f, 0.021497f, 0.079652f, 0.067659f, 0.059443f, 0.105341f, 0.105430f, 0.089093f, 0.105488f, 0.073632f, 0.026613f, -0.005336f, -0.040966f, - -0.096908f, -0.102218f, -0.075694f, -0.059645f, -0.025891f, -0.008577f, -0.005999f, -0.007146f}, - {-0.019694f, -0.023970f, 0.012087f, -0.004389f, 0.010571f, -0.005251f, -0.005372f, -0.010723f, 0.002526f, 0.002273f, -0.000481f, 0.000174f, -0.001204f, -0.008202f, -0.000955f, -0.004690f, -0.005396f, -0.005112f, -0.000199f, 0.000616f, -0.000412f, -0.000923f, 0.004064f, -0.001129f, -0.012413f, 0.007721f, 0.003833f, -0.004227f, 0.001235f, -0.000120f, 0.000127f, 0.001743f, 0.007971f, -0.004446f, 0.000465f, -0.014062f, 0.007002f, 0.001384f, 0.003158f, 0.004861f, 0.007891f, -0.004416f, -0.003366f, -0.001597f, -0.007080f, 0.000567f, -0.001073f, 0.006113f, -0.003296f, -0.000419f, -0.003432f, -0.003922f, 0.007435f, -0.005611f, -0.002722f, 0.000699f, -0.005102f, 0.004252f, -0.000200f, -0.002392f, 0.004594f, 0.008445f, 0.000520f, -0.000328f, -0.001196f, 0.007220f, -0.007186f, 0.000063f, -0.001132f, 0.003778f, -0.001777f, -0.003288f, 0.007844f, -0.000139f, 0.001647f, -0.002182f, 0.001619f, 0.004223f, -0.003396f, -0.004736f, 0.000229f, 0.004123f, 0.006915f, -0.003119f, -0.002123f, 0.001704f, 0.000364f, 0.001058f, -0.003188f, -0.001025f, 0.001884f, -0.000429f, 0.001321f, -0.002513f, -0.000793f, -0.001551f, - -0.002178f, -0.001570f, -0.001468f, 0.001101f, 0.000184f, -0.001100f, 0.001095f, 0.000759f, -0.001005f, -0.000311f, -0.000256f, -0.001363f, -0.002458f, -0.000689f, -0.000010f, 0.000504f, 0.001316f, -0.028580f, 0.004858f, 0.003377f, 0.010017f, -0.003927f, 0.003035f, 0.011647f, -0.004512f, 0.003183f, -0.007068f, -0.010370f, 0.003793f, -0.007060f, -0.008059f, -0.008084f, 0.002432f, 0.003083f, -0.013794f, 0.008107f, 0.005372f, -0.002347f, -0.005053f, 0.003226f, -0.001259f, -0.003142f, 0.000995f, 0.004571f, 0.003377f, 0.007302f, 0.001405f, -0.002224f, 0.007513f, -0.003782f, 0.016391f, 0.003691f, 0.010097f, 0.003893f, 0.008858f, 0.003946f, 0.006103f, 0.003306f, 0.000725f, 0.000340f, 0.012402f, 0.002104f, -0.001997f, 0.000821f, 0.006546f, 0.004853f, 0.000708f, -0.000555f, -0.002556f, 0.001383f, 0.015131f, 0.004342f, 0.006990f, -0.007313f, -0.003770f, -0.007713f, -0.004884f, -0.007487f, 0.005617f, 0.003552f, -0.004793f, -0.003408f, 0.003363f, -0.003567f, 0.003754f, -0.001678f, -0.001145f, -0.005178f, -0.008743f, 0.003761f, -0.014195f, -0.002003f, -0.003041f, -0.003588f, 0.000757f, -0.003310f, - 0.000650f, 0.005344f, 0.002572f, -0.003637f, 0.000644f, -0.002884f, -0.006194f, -0.000998f, 0.002946f, -0.000301f, -0.004788f, 0.001737f, 0.000856f, 0.001814f, 0.003246f, 0.000131f, 0.000437f, -0.002241f, -0.001382f, -0.000328f, -0.000061f, 0.001179f, -0.002605f, -0.002203f, 0.016088f, 0.022167f, -0.006790f, 0.005962f, -0.011010f, -0.000581f, 0.000659f, 0.028323f, -0.002895f, -0.007478f, -0.012204f, 0.000292f, 0.008128f, 0.013033f, -0.002935f, -0.017087f, -0.004916f, -0.006509f, -0.004667f, 0.005819f, -0.001253f, 0.010887f, 0.001214f, -0.006142f, -0.013825f, 0.004159f, -0.001295f, 0.003225f, -0.001667f, 0.001574f, 0.006777f, 0.002498f, -0.017396f, 0.002108f, 0.011193f, 0.005518f, 0.001377f, 0.002693f, -0.002795f, 0.007769f, -0.010286f, -0.000990f, 0.008486f, -0.005839f, 0.000001f, 0.013801f, -0.006368f, -0.000637f, -0.004673f, 0.008496f, -0.008921f, -0.006605f, 0.004128f, -0.009236f, -0.004562f, 0.012053f, 0.007076f, -0.010742f, -0.003968f, -0.001600f, -0.002671f, -0.004888f, 0.003863f, -0.004193f, 0.004431f, -0.000116f, 0.000659f, 0.001958f, 0.009085f, -0.001017f, 0.012525f, 0.006491f, - -0.009620f, -0.004416f, -0.004696f, 0.007542f, 0.002241f, -0.000489f, -0.003866f, 0.010093f, 0.003880f, -0.000169f, -0.000219f, -0.002500f, -0.002313f, 0.003010f, 0.001160f, 0.003337f, 0.007859f, 0.002877f, -0.000425f, 0.000536f, 0.000634f, 0.002572f, -0.000523f, 0.000994f, 0.003758f, 0.000841f, 0.004651f, 0.000179f, 0.001647f, 0.002405f, 0.002851f, 0.001048f, 0.001806f, 0.002094f, 0.001703f, 0.002700f, -0.000817f, 0.000851f, 0.001833f, 0.002765f, -0.000234f, -0.002054f, -0.002449f, 0.000632f, 0.052881f, -0.019537f, 0.010732f, -0.014920f, -0.001548f, 0.000528f, -0.001084f, -0.007908f, 0.004335f, 0.006087f, 0.001483f, -0.005752f, -0.012248f, -0.000457f, 0.007489f, 0.005321f, -0.005384f, -0.009221f, -0.000740f, 0.008262f, 0.015088f, -0.008136f, -0.001092f, -0.006142f, -0.013201f, 0.001480f, -0.006641f, 0.004010f, -0.004917f, 0.010274f, -0.018028f, 0.012176f, -0.000799f, -0.010731f, 0.002614f, 0.004523f, -0.001273f, -0.005681f, 0.000351f, 0.014107f, -0.000534f, 0.002327f, -0.001997f, 0.005403f, 0.002484f, -0.003325f, -0.005301f, -0.011589f, 0.007513f, -0.002421f, -0.003418f, 0.004466f, - 0.000072f, -0.019483f, 0.014969f, -0.020970f, -0.012115f, -0.014849f, 0.003194f, -0.001734f, 0.008895f, -0.004857f, 0.004726f, -0.008935f, 0.004290f, -0.002331f, -0.003670f, -0.009858f, 0.006030f, 0.006957f, 0.011863f, -0.002877f, -0.001152f, 0.003231f, -0.003626f, -0.002119f, 0.002270f, 0.006880f, -0.009106f, 0.004509f, 0.006509f, 0.007271f, -0.011536f, -0.009395f, 0.003925f, -0.005867f, 0.002982f, -0.000081f, -0.000713f, 0.001031f, 0.001425f, -0.000471f, 0.002694f, -0.003334f, 0.001606f, -0.001021f, 0.006708f, 0.000423f, 0.001623f, 0.001539f, 0.000403f, -0.002628f, -0.000259f, 0.000685f, -0.000767f, -0.041754f, 0.004216f, 0.000404f, -0.003579f, -0.006472f, 0.007264f, -0.005697f, 0.004822f, -0.001536f, -0.000108f, 0.006707f, 0.008746f, -0.005438f, 0.006434f, -0.001923f, -0.003600f, -0.011740f, -0.000607f, -0.015849f, -0.011641f, 0.013881f, 0.004935f, -0.005426f, -0.002001f, -0.001669f, 0.009629f, 0.005062f, -0.004998f, 0.008772f, 0.005830f, 0.003419f, 0.003018f, 0.003715f, 0.006680f, 0.005740f, 0.005670f, 0.015528f, 0.013978f, 0.006017f, 0.001526f, -0.009703f, 0.010742f, -0.014400f, - 0.002816f, -0.004033f, 0.011639f, -0.008821f, -0.011461f, 0.019631f, -0.004603f, -0.010560f, -0.009416f, 0.014605f, 0.008961f, 0.000511f, 0.007501f, 0.010595f, 0.004850f, 0.017151f, -0.001046f, -0.002736f, 0.009724f, 0.005934f, 0.000550f, 0.000361f, -0.008959f, 0.005335f, 0.005551f, 0.013840f, 0.005621f, 0.008608f, -0.005352f, -0.007150f, -0.015161f, -0.003504f, -0.008211f, -0.006537f, -0.006919f, 0.007620f, -0.000297f, 0.000562f, -0.004459f, -0.005156f, -0.001450f, -0.004540f, 0.001373f, -0.003069f, -0.005044f, 0.002028f, -0.000521f, 0.000157f, -0.004723f, -0.000717f, 0.000166f, -0.005945f, -0.000839f, -0.001442f, 0.000366f, -0.002691f, -0.003101f, -0.001939f, -0.001169f, 0.000070f, -0.001017f, 0.000901f, -0.001414f, 0.001616f, 0.000367f, 0.001424f, 0.003214f, -0.000784f, 0.003395f, 0.000664f, 0.002219f, -0.001611f, 0.000668f, -0.003003f, -0.001136f, -0.000541f, -0.003602f, -0.001147f, -0.001789f, -0.055636f, 0.014882f, -0.011907f, -0.017588f, -0.017391f, 0.010731f, -0.012918f, 0.009474f, -0.016218f, 0.008872f, 0.007572f, 0.004640f, -0.017071f, 0.011631f, -0.000245f, 0.007026f, -0.014150f, - 0.007821f, 0.016656f, 0.012723f, 0.000423f, -0.006020f, 0.002310f, -0.003646f, -0.018038f, -0.003686f, -0.008689f, 0.004079f, -0.011360f, 0.009682f, 0.009497f, -0.003808f, -0.000458f, 0.013338f, -0.002972f, 0.009036f, -0.007343f, -0.011703f, 0.006038f, -0.000243f, 0.006249f, 0.016417f, 0.009977f, -0.000656f, -0.028733f, -0.013799f, -0.004024f, 0.003941f, -0.004454f, 0.015761f, -0.024968f, 0.007850f, 0.003344f, -0.000293f, 0.007775f, -0.003272f, 0.012068f, -0.026175f, -0.012238f, 0.010084f, -0.026305f, -0.004911f, 0.012217f, 0.004348f, -0.005843f, -0.017561f, 0.006465f, 0.011264f, 0.008255f, -0.003171f, -0.018422f, -0.001628f, 0.000098f, -0.002129f, -0.001023f, -0.009044f, 0.004038f, -0.014442f, 0.008813f, 0.001202f, -0.008584f, 0.001646f, -0.010317f, 0.000736f, -0.012332f, -0.003485f, 0.004267f, 0.004487f, 0.000359f, -0.001228f, -0.004277f, -0.003241f, 0.000818f, -0.007268f, 0.005775f, 0.000400f, -0.003536f, -0.000024f, -0.006276f, -0.004964f, 0.001350f, -0.002612f, 0.003340f, -0.003331f, -0.001872f, -0.002200f, -0.002404f, -0.004267f, -0.000751f, -0.002403f, -0.000976f, 0.001131f, -0.001023f, - -0.001952f, 0.001511f, -0.000817f, -0.001667f, -0.001717f, -0.003776f, -0.002672f, 0.000461f, 0.001925f, -0.000604f, -0.026145f, 0.002820f, 0.004359f, 0.020479f, -0.019342f, 0.022361f, 0.006342f, -0.001809f, -0.005250f, -0.002419f, 0.002080f, -0.016361f, -0.003125f, 0.005231f, -0.005365f, -0.009610f, -0.002585f, 0.015455f, -0.015969f, -0.003492f, 0.016021f, 0.000055f, -0.006333f, 0.005627f, -0.007771f, 0.011760f, 0.005197f, -0.000173f, 0.005911f, -0.006863f, -0.010744f, -0.000796f, 0.000846f, 0.008787f, -0.018853f, -0.010210f, -0.008304f, -0.005865f, -0.005564f, -0.005756f, 0.002864f, 0.000889f, 0.001605f, -0.014127f, -0.014430f, -0.011528f, 0.000457f, -0.018141f, -0.009954f, 0.010793f, -0.007285f, 0.002346f, 0.001203f, -0.000392f, 0.004574f, 0.006376f, 0.006179f, 0.007223f, 0.010735f, -0.001947f, 0.011612f, -0.000801f, 0.005904f, -0.001029f, -0.007352f, -0.000506f, -0.011895f, 0.007325f, -0.013931f, 0.013003f, -0.015551f, -0.000312f, -0.016040f, 0.001453f, -0.016114f, -0.015655f, 0.007456f, 0.021368f, 0.006561f, -0.013915f, 0.009957f, -0.000086f, -0.006021f, -0.003738f, -0.006310f, 0.008442f, - 0.007452f, 0.010400f, 0.001994f, 0.008087f, -0.006803f, -0.000839f, 0.008127f, 0.000846f, 0.002592f, 0.001482f, -0.003780f, 0.004704f, -0.000312f, 0.001686f, 0.007232f, 0.001978f, -0.001638f, -0.004354f, -0.001817f, 0.002822f, 0.003042f, 0.002205f, 0.000967f, -0.003423f, 0.000406f, -0.000821f, -0.007290f, 0.007111f, 0.000995f, 0.002522f, 0.000504f, -0.001892f, -0.003354f, 0.002417f, -0.003418f, -0.001848f, 0.072707f, 0.000878f, -0.020960f, 0.003311f, -0.011379f, 0.028993f, -0.004742f, 0.008164f, 0.002122f, 0.001414f, -0.025472f, -0.013046f, 0.014125f, 0.012424f, -0.020072f, -0.003515f, -0.000612f, 0.017874f, 0.008782f, 0.006809f, 0.017512f, 0.002768f, 0.001145f, 0.015216f, -0.005322f, -0.023143f, 0.003420f, 0.017718f, 0.010477f, -0.006693f, 0.000347f, 0.012359f, 0.007522f, 0.003388f, -0.000667f, -0.012980f, 0.006314f, -0.014119f, 0.001398f, -0.026592f, 0.006966f, 0.008205f, -0.002163f, -0.012231f, 0.016880f, 0.008894f, -0.003511f, 0.013148f, 0.006047f, -0.011063f, 0.020267f, 0.002199f, -0.007200f, 0.004721f, 0.020782f, 0.003251f, -0.000548f, -0.017335f, -0.010131f, 0.002447f, - 0.007039f, 0.023713f, -0.007824f, -0.009377f, 0.002045f, 0.012951f, -0.008367f, -0.010258f, -0.000935f, 0.017242f, 0.012322f, -0.004276f, -0.013234f, -0.000675f, 0.015036f, -0.005970f, 0.031236f, 0.006828f, 0.004661f, -0.015974f, 0.013566f, 0.000841f, -0.003463f, -0.008107f, 0.000794f, -0.004518f, 0.000830f, 0.019347f, 0.008806f, 0.007065f, 0.003686f, 0.002263f, 0.000317f, -0.001227f, 0.001787f, 0.003918f, 0.006970f, 0.001110f, 0.001255f, 0.002596f, -0.005293f, 0.000148f, 0.002295f, -0.001158f, 0.006070f, -0.004269f, -0.000120f, -0.002073f, 0.002391f, 0.010299f, 0.003515f, -0.003172f, -0.000760f, 0.002482f, 0.000878f, 0.003464f, -0.000655f, -0.004390f, 0.004104f, 0.003707f, -0.003455f, -0.000901f, 0.009067f, 0.003132f, 0.016389f, 0.008703f, -0.025860f, -0.002693f, -0.013087f, 0.025961f, -0.009769f, 0.012091f, 0.002294f, 0.016250f, 0.006392f, 0.002394f, -0.001364f, 0.006591f, -0.007457f, -0.011054f, -0.030602f, -0.022641f, 0.007448f, 0.020114f, 0.026984f, -0.009958f, -0.013231f, -0.011628f, 0.005994f, -0.006380f, -0.001413f, -0.001107f, 0.003603f, 0.004101f, 0.018002f, -0.009624f, - 0.001657f, 0.004433f, 0.008772f, -0.008734f, -0.006515f, -0.014405f, -0.009796f, -0.010045f, -0.017177f, -0.043495f, -0.000547f, -0.005833f, -0.018730f, 0.004190f, -0.002151f, -0.023591f, 0.007882f, -0.020005f, 0.005088f, -0.002432f, -0.001681f, 0.010147f, 0.013104f, -0.000378f, -0.019547f, 0.005745f, -0.012285f, -0.013508f, 0.018737f, 0.016963f, 0.018874f, -0.006166f, 0.003025f, 0.002518f, -0.009690f, 0.001506f, -0.004676f, 0.029633f, -0.004932f, -0.003039f, -0.002974f, -0.000201f, -0.018125f, -0.022382f, 0.005288f, -0.001622f, -0.001702f, 0.005077f, 0.032197f, -0.003964f, -0.015140f, -0.006351f, 0.016885f, -0.002444f, -0.005528f, -0.004846f, -0.000382f, -0.013704f, 0.003285f, -0.002609f, 0.002531f, -0.006906f, 0.000269f, -0.008693f, -0.000775f, -0.000519f, 0.003494f, -0.003624f, -0.001833f, -0.005293f, 0.007167f, 0.000501f, -0.005329f, 0.001225f, 0.002345f, -0.005610f, 0.001404f, 0.002283f, 0.008769f, -0.001777f, 0.001992f, 0.006299f, 0.003808f, -0.003162f, 0.003687f, -0.006639f, -0.011000f, 0.001404f, 0.000989f, -0.004065f, -0.010261f, -0.002014f, -0.002577f, 0.009128f, 0.003290f, 0.006156f, - -0.001109f, 0.007666f, 0.008384f, -0.028499f, 0.010459f, 0.003420f, 0.029997f, -0.020271f, -0.011500f, -0.006768f, 0.015996f, -0.015369f, -0.014763f, 0.013239f, 0.008902f, -0.015547f, -0.015670f, -0.015354f, -0.034280f, 0.022421f, 0.021059f, 0.022321f, -0.009676f, 0.007021f, 0.022166f, -0.032233f, 0.000008f, 0.021071f, 0.019550f, 0.008833f, -0.000085f, -0.010355f, 0.002120f, -0.005015f, -0.027874f, 0.003478f, 0.007598f, 0.004036f, 0.018437f, -0.016327f, 0.001725f, -0.030470f, -0.003888f, 0.005962f, -0.016740f, 0.006413f, 0.005109f, 0.013556f, 0.016609f, 0.023090f, -0.004757f, -0.009136f, -0.027957f, -0.019989f, 0.008595f, 0.040988f, -0.012756f, -0.001758f, -0.018936f, -0.010072f, -0.015026f, 0.008791f, 0.009073f, -0.003207f, 0.001326f, -0.030086f, -0.003978f, 0.020277f, -0.016243f, -0.014119f, 0.012046f, -0.005474f, 0.017634f, 0.004312f, -0.012977f, 0.002037f, -0.019599f, -0.005700f, -0.005182f, 0.037734f, -0.003790f, -0.011122f, 0.008271f, 0.007656f, -0.003325f, -0.006487f, -0.001935f, -0.005227f, -0.007029f, -0.006602f, -0.005008f, 0.002594f, 0.002934f, 0.006032f, -0.001575f, -0.000157f, - -0.003644f, 0.003629f, 0.000956f, -0.009760f, 0.002596f, -0.000150f, -0.001049f, 0.003442f, -0.000215f, -0.005360f, -0.005237f, -0.012596f, 0.004181f, -0.004010f, 0.003704f, 0.004721f, -0.005889f, 0.002627f, 0.001716f, -0.001322f, 0.004760f, -0.000047f, 0.013590f, 0.001840f, -0.002456f, 0.000258f, -0.003938f, -0.000777f, 0.002377f, 0.000318f, -0.001172f, 0.001039f, -0.005296f, 0.004182f, -0.017825f, 0.040773f, -0.020303f, -0.010523f, -0.000956f, -0.001495f, -0.029178f, 0.001727f, -0.021520f, 0.015315f, -0.040328f, -0.006001f, -0.012978f, 0.013579f, -0.013952f, -0.014056f, -0.034134f, 0.022777f, -0.014102f, 0.009277f, -0.011057f, 0.006712f, 0.017999f, -0.013298f, -0.022411f, -0.007634f, 0.015157f, 0.031529f, 0.010074f, 0.013120f, 0.001469f, -0.032035f, -0.017178f, -0.017334f, -0.008940f, 0.005438f, 0.028821f, 0.012324f, 0.016747f, 0.015654f, -0.004516f, -0.006875f, -0.009819f, -0.026801f, 0.001356f, -0.018745f, 0.028774f, -0.013339f, 0.019790f, 0.004120f, -0.010496f, 0.006528f, -0.007018f, -0.009178f, -0.015814f, 0.023578f, 0.006122f, 0.039930f, 0.008682f, -0.043261f, -0.010845f, 0.013690f, - 0.011127f, 0.006173f, -0.002531f, 0.003689f, 0.045036f, 0.022436f, -0.007724f, 0.004721f, -0.012248f, 0.032569f, -0.001349f, -0.001421f, 0.012634f, -0.028948f, -0.012532f, -0.009937f, -0.030913f, -0.036645f, 0.007144f, 0.012881f, -0.003513f, -0.018137f, -0.004807f, -0.005879f, -0.014228f, 0.000064f, -0.002985f, -0.011344f, 0.011020f, 0.016903f, -0.003852f, -0.002684f, -0.002683f, -0.006878f, 0.004787f, 0.000967f, -0.002054f, -0.003632f, -0.003083f, -0.002207f, 0.005511f, -0.003488f, -0.008154f, -0.002164f, -0.000508f, 0.002370f, 0.001484f, -0.005124f, 0.011939f, -0.004178f, 0.007202f, -0.001649f, 0.005992f, 0.002998f, -0.002080f, -0.008440f, -0.008009f, 0.002469f, -0.002278f, -0.012646f, -0.004696f, -0.003299f, 0.004421f, 0.000900f, -0.001070f, 0.003208f, 0.005544f, 0.001661f, -0.003544f, -0.005378f, -0.024836f, 0.015014f, 0.033434f, -0.003181f, -0.001346f, -0.000676f, 0.031082f, 0.009691f, 0.007525f, 0.005385f, 0.003761f, 0.005358f, -0.012110f, 0.002359f, -0.038293f, 0.005590f, -0.018402f, 0.016116f, 0.039361f, -0.005028f, 0.002959f, -0.030907f, 0.041490f, 0.020143f, 0.017686f, -0.005090f, - -0.022659f, 0.002802f, -0.007664f, 0.021062f, 0.015166f, -0.018760f, 0.001109f, 0.011136f, 0.007938f, -0.014513f, -0.012827f, 0.060691f, -0.013958f, -0.010524f, 0.012891f, -0.015395f, -0.011151f, 0.019325f, 0.018999f, 0.000787f, 0.007379f, 0.006905f, -0.023360f, -0.011641f, -0.000890f, 0.008030f, 0.020661f, 0.005110f, 0.004966f, -0.026485f, -0.002390f, 0.007848f, -0.036072f, 0.007957f, -0.009950f, -0.003635f, -0.006558f, 0.010662f, -0.010647f, -0.019629f, -0.020882f, -0.033224f, 0.004321f, -0.013460f, -0.006370f, 0.021297f, -0.007094f, 0.006914f, -0.037373f, -0.000066f, 0.034661f, 0.008079f, -0.017315f, -0.010378f, 0.021106f, 0.010753f, -0.022880f, 0.012909f, -0.016533f, -0.012848f, -0.005356f, -0.003230f, 0.007963f, -0.002236f, 0.001484f, -0.003571f, -0.004460f, 0.002768f, 0.004309f, -0.005865f, 0.005107f, 0.015235f, 0.002492f, -0.002100f, 0.006654f, 0.009620f, -0.003975f, 0.006539f, -0.004169f, -0.005941f, 0.001788f, 0.004341f, 0.012792f, 0.003322f, -0.001117f, 0.004589f, -0.001809f, 0.006517f, -0.003572f, 0.005988f, -0.004458f, 0.001974f, 0.005412f, 0.001516f, -0.008644f, -0.005018f, - 0.016203f, -0.006844f, -0.012741f, 0.006317f, 0.003485f, 0.004703f, -0.003267f, 0.020571f, 0.006134f, -0.019237f, -0.019314f, 0.045698f, -0.027456f, 0.007075f, -0.017574f, 0.053886f, 0.011402f, 0.009909f, -0.017310f, -0.020477f, 0.001904f, 0.015345f, -0.016603f, -0.026446f, -0.015737f, -0.038425f, -0.015004f, -0.022590f, -0.000098f, -0.051621f, 0.003554f, 0.027855f, 0.017140f, 0.022754f, -0.015985f, 0.005882f, 0.024730f, -0.002943f, 0.017919f, 0.006611f, 0.027957f, -0.014121f, 0.023309f, 0.018504f, 0.013235f, 0.030280f, -0.017041f, 0.018009f, -0.009329f, -0.010863f, -0.007202f, 0.006640f, -0.058887f, -0.018890f, -0.036615f, 0.042274f, -0.026717f, -0.030194f, -0.006476f, 0.023825f, 0.000641f, -0.010837f, 0.033281f, -0.011975f, -0.010582f, -0.024243f, -0.059544f, 0.002820f, 0.005516f, 0.024740f, -0.024973f, 0.000005f, -0.015229f, -0.020147f, 0.031826f, -0.006496f, 0.015942f, -0.034687f, -0.033707f, -0.021090f, 0.026536f, -0.002802f, -0.016809f, -0.017908f, -0.000708f, -0.029431f, -0.020042f, 0.002786f, -0.012308f, -0.021968f, 0.032307f, -0.044396f, -0.042226f, 0.010977f, 0.000196f, 0.018591f, - 0.002162f, -0.002108f, -0.013602f, -0.012102f, 0.002009f, -0.021029f, -0.008416f, 0.017787f, 0.002409f, 0.002991f, -0.010321f, 0.010503f, 0.003970f, -0.011517f, 0.005413f, -0.008556f, -0.001684f, -0.008772f, 0.007631f, -0.011648f, -0.002841f, 0.007819f, 0.015430f, 0.001651f, 0.000704f, -0.016793f, -0.004982f, -0.001212f, 0.002516f, -0.002536f, 0.014327f, -0.000661f, -0.005352f, 0.009042f, -0.010507f, -0.009808f, 0.006110f, 0.012945f, -0.003542f, -0.009289f, -0.012410f, 0.009953f, 0.008191f, 0.016071f, -0.022284f, -0.000309f, 0.029517f, 0.003739f, -0.009127f, 0.015151f, -0.024261f, 0.047830f, 0.029972f, -0.000451f, -0.022102f, -0.024991f, 0.010204f, -0.006422f, -0.002399f, -0.001482f, 0.043625f, -0.021666f, 0.000659f, -0.015127f, 0.015962f, -0.027374f, -0.025087f, -0.049251f, 0.011226f, -0.020121f, -0.027740f, -0.003543f, -0.046815f, -0.023105f, 0.013029f, 0.009774f, -0.006547f, 0.024121f, 0.002124f, 0.029275f, -0.013144f, -0.040765f, -0.006309f, -0.029913f, -0.005809f, -0.009109f, -0.039057f, 0.004913f, 0.031573f, -0.089461f, 0.011175f, 0.000046f, 0.022014f, -0.004608f, -0.027920f, -0.053157f, - 0.020996f, -0.006679f, 0.019616f, 0.011647f, -0.006578f, 0.030746f, -0.038579f, 0.053747f, -0.013641f, 0.029908f, 0.062803f, 0.025004f, 0.044656f, 0.017431f, 0.011640f, -0.006281f, 0.023275f, -0.008867f, -0.024572f, -0.033148f, -0.021393f, -0.001280f, 0.018463f, -0.003210f, -0.014497f, -0.020639f, -0.018408f, 0.024744f, -0.011189f, -0.009150f, 0.022253f, 0.003901f, 0.016742f, -0.001906f, -0.002519f, -0.006954f, 0.003883f, 0.008293f, -0.011497f, -0.002016f, -0.028022f, -0.020354f, 0.013677f, -0.006971f, -0.000767f, -0.004235f, -0.000586f, -0.010827f, -0.016785f, 0.011975f, -0.010120f, 0.015608f, -0.016141f, -0.007560f, -0.001829f, -0.011438f, -0.005713f, 0.007786f, 0.003262f, 0.018959f, -0.004833f, -0.011556f, 0.007188f, -0.022967f, 0.000358f, 0.002635f, -0.003565f, 0.001338f, -0.002556f, 0.011085f, 0.016174f, 0.002608f, -0.000584f, -0.007962f, -0.013538f, -0.006708f, 0.000780f, 0.026354f, 0.013283f, -0.013516f, 0.075298f, 0.061362f, 0.055297f, -0.012569f, 0.000166f, -0.046907f, 0.035100f, 0.043530f, 0.014828f, 0.042049f, 0.016808f, 0.014308f, 0.014781f, -0.007406f, 0.005842f, 0.011648f, - -0.010689f, -0.045196f, -0.027423f, -0.001655f, -0.030011f, -0.034993f, -0.082192f, 0.018081f, 0.014239f, 0.021448f, -0.015714f, -0.005609f, -0.010911f, 0.000594f, -0.025684f, -0.000725f, -0.019563f, 0.022774f, 0.018977f, -0.011734f, -0.015911f, -0.043348f, 0.073059f, -0.022797f, 0.014452f, -0.000025f, 0.004736f, 0.011660f, -0.030155f, 0.036419f, -0.018332f, 0.012450f, 0.008199f, -0.027212f, -0.028008f, -0.005193f, -0.002416f, 0.016917f, 0.077117f, -0.006441f, 0.011503f, 0.002555f, 0.023289f, 0.016545f, 0.017362f, -0.013619f, -0.004018f, 0.006665f, -0.037207f, 0.007572f, -0.031833f, -0.050910f, 0.017788f, 0.001616f, 0.004085f, -0.037273f, -0.089532f, 0.038738f, 0.040515f, 0.027883f, -0.050752f, 0.048369f, 0.051454f, 0.019014f, 0.014970f, 0.000453f, -0.014747f, -0.033838f, 0.025390f, -0.023845f, 0.001608f, 0.000417f, -0.013364f, 0.010217f, -0.024232f, -0.002545f, -0.004679f, 0.012019f, -0.006663f, -0.011201f, -0.015023f, 0.023136f, -0.012610f, -0.005527f, 0.006121f, -0.020815f, 0.011655f, 0.009451f, -0.007107f, -0.007298f, 0.002118f, -0.019339f, 0.017976f, -0.006503f, -0.004724f, -0.001636f, - 0.001625f, 0.013156f, -0.010268f, -0.024451f, 0.007391f, -0.013641f, -0.004100f, -0.013980f, -0.012247f, 0.001885f, -0.009877f, -0.004610f, -0.009190f, 0.031350f, -0.013774f, -0.025523f, 0.004161f, -0.009178f, -0.044161f, -0.088124f, 0.073101f, 0.011742f, 0.012964f, -0.029367f, -0.021147f, -0.093753f, 0.025900f, 0.067023f, 0.020543f, -0.059382f, -0.029716f, 0.009631f, -0.023123f, -0.014681f, 0.027463f, -0.030917f, 0.017252f, 0.015393f, 0.012731f, -0.034416f, 0.012284f, 0.010642f, -0.016156f, -0.032209f, -0.018650f, -0.012404f, -0.008343f, -0.030725f, -0.026502f, -0.014580f, -0.031682f, 0.024972f, -0.011833f, -0.040886f, -0.014126f, 0.025072f, -0.005195f, -0.028353f, -0.015613f, -0.014473f, -0.000107f, -0.022475f, -0.013560f, -0.037239f, -0.035384f, 0.015061f, -0.012592f, 0.046449f, 0.030527f, 0.002983f, 0.027719f, -0.040615f, 0.026255f, -0.038553f, 0.032393f, -0.005556f, 0.016570f, -0.017198f, 0.057564f, -0.014359f, 0.032237f, -0.008254f, 0.047351f, 0.019064f, 0.011523f, -0.048876f, 0.053012f, 0.042428f, 0.018481f, 0.019713f, -0.038116f, -0.007281f, 0.015607f, 0.026043f, -0.006751f, 0.006285f, - -0.042101f, 0.027015f, 0.046195f, -0.001019f, -0.033059f, -0.001931f, -0.021857f, -0.018727f, 0.009058f, -0.000110f, -0.009120f, 0.010672f, -0.024119f, -0.005679f, 0.000946f, 0.006870f, -0.016622f, -0.022848f, 0.008813f, -0.011132f, -0.021542f, -0.038692f, -0.002815f, 0.012006f, -0.003192f, -0.019487f, -0.023455f, -0.007218f, 0.014992f, -0.016163f, 0.006248f, 0.008655f, 0.002493f, 0.006362f, -0.001935f, -0.010400f, -0.008710f, -0.002923f, 0.010868f, 0.003617f, -0.004108f, -0.014526f, 0.019984f, -0.012863f, -0.011146f, -0.009391f, 0.004103f, 0.023138f, -0.015536f, 0.022784f, 0.019360f, -0.007671f, 0.007149f, 0.012134f, -0.061150f, 0.052241f, -0.006013f, 0.025102f, -0.033656f, -0.010837f, -0.008257f, -0.007734f, -0.007721f, 0.030564f, 0.001071f, -0.025209f, 0.020588f, 0.003636f, 0.014921f, 0.025921f, 0.026242f, 0.001490f, -0.022261f, 0.092383f, -0.025068f, 0.071074f, 0.000814f, 0.004373f, -0.039890f, -0.017444f, 0.006977f, 0.034484f, 0.017318f, -0.011031f, 0.028477f, 0.005886f, -0.038462f, 0.006645f, 0.006070f, 0.040117f, -0.001071f, 0.024084f, -0.029039f, 0.000179f, 0.027472f, 0.013623f, - 0.023071f, 0.060190f, 0.048538f, -0.007321f, 0.025411f, -0.003573f, 0.047695f, -0.037685f, 0.032049f, 0.013000f, -0.001164f, 0.028507f, -0.014358f, 0.073701f, -0.012107f, 0.035711f, -0.026136f, -0.023581f, 0.001825f, 0.078504f, 0.026123f, -0.072481f, 0.065074f, -0.001083f, 0.023231f, -0.054575f, 0.019280f, 0.006551f, -0.109101f, 0.046313f, 0.084510f, 0.032456f, -0.034391f, -0.021823f, 0.017660f, 0.083038f, 0.047716f, 0.063368f, -0.022251f, -0.030323f, -0.027265f, 0.013598f, 0.017850f, -0.002490f, -0.030863f, -0.013684f, 0.039898f, 0.007398f, 0.009653f, -0.013105f, 0.018740f, -0.004189f, 0.008923f, -0.007989f, -0.009876f, -0.012165f, 0.024407f, 0.040194f, 0.039207f, 0.009174f, 0.021180f, 0.036988f, 0.024921f, 0.026223f, 0.035755f, 0.020362f, 0.034186f, 0.026002f, 0.009964f, -0.050156f, -0.009145f, -0.023142f, 0.014945f, 0.030132f, -0.033074f, -0.011456f, 0.040624f, 0.022471f, 0.005292f, -0.008691f, 0.034510f, -0.025819f, 0.006872f, 0.035550f, 0.028177f, 0.015941f, 0.019164f, 0.021962f, 0.018473f, 0.021778f, 0.014340f, -0.016643f, -0.008130f, -0.029621f, 0.037875f, 0.005952f, - 0.025289f, -0.020068f, 0.050520f, -0.017438f, 0.023663f, 0.008000f, 0.010681f, 0.007578f, 0.004631f, -0.052437f, -0.030266f, 0.000535f, 0.004989f, 0.036190f, 0.029935f, -0.042735f, 0.004599f, -0.023450f, -0.021277f, 0.010801f, 0.002851f, -0.014505f, 0.017962f, 0.069698f, -0.045869f, -0.003461f, 0.106622f, -0.064569f, 0.007800f, 0.038216f, -0.019333f, -0.015453f, 0.022216f, 0.035323f, -0.038089f, 0.019073f, -0.069226f, -0.007238f, 0.103638f, 0.004783f, 0.029462f, -0.010691f, 0.056697f, 0.057119f, -0.015572f, -0.000699f, -0.026735f, 0.006850f, -0.019741f, -0.050167f, -0.032345f, -0.059909f, -0.044348f, 0.067324f, 0.027024f, 0.020149f, 0.089202f, -0.062847f, -0.037342f, 0.011718f, 0.033437f, -0.024459f, 0.016271f, -0.026218f, 0.049367f, 0.030012f, 0.017081f, 0.036687f, 0.129274f, -0.030162f, -0.010154f, -0.035629f, -0.041680f, -0.002149f, 0.054300f, -0.042051f, -0.005608f, 0.039300f, 0.041459f, 0.049813f, 0.028596f, -0.032642f, 0.008427f, -0.017758f, -0.004088f, 0.029351f, 0.009162f, -0.001763f, 0.021346f, -0.038459f, 0.002482f, 0.001442f, 0.010465f, -0.008030f, -0.010233f, 0.024628f, - -0.008964f, -0.005096f, 0.026181f, 0.034680f, 0.026866f, 0.012742f, 0.011289f, 0.023191f, 0.006457f, 0.002595f, 0.015275f, 0.002436f, -0.009053f, 0.007686f, -0.000432f, -0.001466f, -0.044304f, 0.011609f, 0.028189f, 0.047361f, -0.011071f, -0.012226f, -0.015590f, 0.024582f, 0.026401f, -0.058878f, 0.006821f, -0.025684f, -0.004180f, 0.004304f, 0.003478f, 0.010261f, -0.015158f, -0.031593f, 0.025255f, -0.007889f, 0.058079f, -0.053385f, 0.013110f, -0.004182f, -0.017292f, -0.015793f, -0.007938f, 0.017535f, 0.010756f, 0.011795f, -0.003066f, 0.032290f, 0.005474f, -0.043086f, -0.033882f, -0.005009f, -0.019998f, -0.024943f, 0.005387f, 0.026629f, -0.004003f, -0.006512f, -0.039359f, 0.018908f, -0.006469f, 0.039693f, -0.013811f, -0.077469f, 0.009268f, -0.023245f, -0.011773f, -0.000277f, -0.062669f, -0.033286f, -0.053844f, 0.000566f, -0.004032f, -0.015481f, -0.071222f, -0.029337f, -0.006320f, 0.036757f, 0.041008f, 0.002875f, 0.003058f, 0.019589f, 0.004480f, -0.049303f, 0.042783f, 0.057886f, -0.025368f, 0.008367f, -0.025409f, 0.010075f, -0.000232f, 0.043977f, -0.049909f, -0.036678f, -0.114123f, -0.040965f, - 0.028771f, 0.045499f, 0.032733f, 0.029194f, -0.028090f, -0.009837f, 0.022807f, 0.021336f, 0.049578f, 0.022964f, 0.021222f, 0.037595f, 0.009711f, -0.042538f, -0.044898f, -0.061562f, 0.025580f, -0.039555f, 0.003534f, -0.034762f, -0.052584f, -0.080444f, 0.011465f, -0.023723f, -0.024831f, 0.006522f, 0.007698f, -0.003639f, -0.011336f, 0.001042f, 0.026505f, 0.017641f, 0.006945f, -0.010811f, 0.019247f, 0.042298f, -0.009253f, -0.024131f, -0.019013f, 0.020401f, -0.010943f, -0.010323f, -0.038048f, -0.037756f, -0.028228f, -0.064045f, -0.003198f, -0.000529f, -0.025039f, 0.010515f, 0.017470f, 0.011771f, 0.031935f, 0.007995f, 0.037646f, 0.001699f, 0.010668f, 0.040324f, -0.019586f, -0.001888f, 0.006592f, -0.001113f, -0.028046f, -0.001840f, -0.005005f, 0.048705f, -0.002651f, -0.021357f, 0.016050f, 0.005355f, 0.015063f, 0.030882f, 0.010861f, -0.091335f, 0.038424f, -0.027257f, 0.003480f, 0.064992f, 0.054439f, -0.021529f, -0.009043f, 0.033468f, -0.020776f, -0.021950f, -0.018200f, 0.004486f, -0.006208f, -0.002473f, 0.007844f, -0.007187f, 0.032102f, 0.076284f, -0.032146f, -0.059853f, 0.059799f, -0.046392f, - -0.012424f, 0.000359f, 0.074611f, 0.005667f, -0.022463f, 0.021827f, 0.020865f, -0.078093f, -0.022832f, 0.012730f, -0.002939f, -0.037175f, -0.002700f, 0.014491f, -0.114439f, -0.053167f, 0.056822f, -0.056684f, -0.062805f, -0.039032f, 0.046428f, -0.060366f, -0.094095f, 0.094635f, -0.027828f, -0.059560f, -0.003360f, 0.036827f, -0.036222f, -0.063925f, -0.001491f, 0.028778f, -0.003195f, -0.082180f, 0.019378f, -0.001428f, -0.036595f, 0.085945f, 0.081284f, -0.006381f, -0.032913f, -0.064177f, 0.099082f, 0.013549f, 0.017635f, 0.033950f, -0.024169f, -0.096206f, 0.043412f, 0.073161f, 0.058911f, -0.036570f, 0.021390f, 0.079837f, 0.046694f, -0.055591f, -0.012008f, -0.043652f, 0.019749f, 0.011808f, 0.050613f, 0.049537f, -0.059562f, -0.002261f, -0.006006f, 0.008785f, -0.022983f, 0.023828f, -0.014954f, 0.013727f, 0.012860f, 0.009999f, -0.016549f, 0.012927f, -0.024872f, 0.041494f, -0.020783f, -0.010796f, 0.026863f, 0.022964f, -0.023669f, 0.003695f, -0.010822f, -0.028195f, -0.014569f, 0.011152f, 0.022593f, 0.013411f, -0.022217f, 0.012632f, -0.014087f, -0.035020f, 0.002263f, 0.006149f, -0.005032f, -0.002951f, - 0.024359f, 0.001425f, 0.003243f, 0.011117f, -0.002579f, 0.005958f, -0.036781f, 0.028064f, -0.094545f, 0.010399f, 0.089163f, 0.048533f, 0.012493f, -0.001166f, -0.016111f, 0.023138f, -0.031406f, 0.074000f, -0.005619f, 0.019690f, 0.027386f, -0.025537f, 0.001034f, -0.003279f, -0.028170f, -0.000180f, 0.010750f, 0.041465f, -0.000096f, -0.025856f, 0.012869f, 0.033342f, -0.005473f, 0.052890f, -0.041084f, 0.008503f, 0.012008f, 0.013729f, 0.046002f, -0.025262f, 0.004122f, -0.001843f, -0.059857f, 0.008398f, -0.019515f, -0.032871f, 0.014096f, -0.012592f, 0.047192f, 0.033803f, -0.024618f, -0.053893f, 0.025628f, 0.005048f, 0.010862f, 0.029866f, 0.065476f, -0.011317f, 0.013650f, -0.026730f, 0.037627f, 0.026668f, 0.028160f, -0.031357f, 0.043087f, -0.014953f, -0.018648f, -0.037809f, -0.003248f, -0.015061f, 0.055769f, -0.041681f, 0.003130f, 0.013560f, -0.012555f, -0.025522f, 0.077835f, -0.003596f, 0.018588f, -0.007331f, 0.009516f, -0.006658f, 0.021943f, -0.002910f, -0.009305f, -0.006449f, -0.008166f, 0.025780f, 0.018229f, 0.024256f, 0.013787f, 0.007650f, -0.016563f, 0.017892f, 0.001621f, 0.009878f, - 0.008797f, 0.021801f, -0.002888f, 0.000681f, 0.003741f, 0.006918f, 0.007463f, 0.016219f, -0.013283f, 0.010197f, 0.009199f, 0.007934f, 0.006964f, 0.005471f, 0.016193f, 0.006081f, -0.020716f, 0.012617f, 0.014777f, 0.015128f, 0.006867f, 0.016257f, 0.004749f, -0.001108f, 0.009502f, 0.005236f, 0.012020f, -0.001040f, -0.010178f, 0.002498f, 0.016556f, -0.008351f, 0.007038f, 0.000765f, 0.018010f, 0.015874f, 0.006452f, 0.011130f, 0.016775f, 0.007634f, 0.031216f, -0.082557f, -0.231910f, -0.220492f, 0.095980f, 0.009515f, 0.212197f, 0.449424f, 0.098482f, 0.181207f, 0.096695f, -0.333153f, -0.149078f, -0.224016f, -0.329083f, -0.021933f, 0.038990f, -0.155371f, 0.138290f, 0.235248f, 0.144047f, 0.405030f, 0.248571f, 0.002433f, -0.037388f, -0.143113f, -0.357555f, -0.289546f, -0.124779f, -0.274261f, -0.080923f, 0.157069f, 0.046682f, 0.039891f, 0.370911f, 0.143264f, 0.090370f, 0.343445f, 0.016278f, -0.017158f, 0.158268f, -0.078612f, -0.282986f, -0.136813f, -0.282780f, -0.412862f, -0.045759f, -0.187436f, -0.153194f, 0.132450f, 0.256414f, 0.118850f, 0.453101f, 0.361234f, 0.209325f, 0.274401f, - 0.092888f, -0.134163f, -0.207132f, -0.275856f, -0.442236f, -0.354279f, -0.237915f, -0.202416f, -0.063101f, 0.154263f, 0.233885f, 0.260995f, 0.350430f, 0.295364f, 0.138239f, 0.050588f, 0.075936f, -0.118081f, -0.181491f, -0.128561f, -0.271137f, -0.203703f, -0.035186f, -0.121496f, 0.048261f, 0.198746f, 0.070836f, 0.101556f, 0.144075f, 0.015626f, 0.008547f, -0.034850f, -0.135901f, -0.070838f, 0.001048f, -0.053935f, 0.041829f, 0.057836f, -0.023471f, 0.073265f, 0.062599f, -0.098023f, 0.075084f, 0.088072f, -0.062012f, 0.143354f, 0.021679f, -0.140395f, 0.098332f, -0.076845f, -0.275171f, -0.045089f, -0.167306f, -0.202572f, 0.125142f, 0.016272f, 0.031714f, 0.265082f, 0.168019f, 0.187678f, 0.300700f, 0.221815f, 0.073160f, 0.032155f, -0.209763f, -0.380532f, -0.379311f, -0.379628f, -0.359715f, -0.218777f, 0.011078f, 0.207304f, 0.303293f, 0.416494f, 0.386022f, 0.365580f, 0.287391f, 0.049598f, -0.132378f, -0.144147f, -0.305462f, -0.376969f, -0.227382f, -0.202684f, -0.113476f, 0.022198f, 0.054840f, 0.067222f, 0.130301f, 0.115713f, 0.107666f, 0.153526f, 0.125994f, 0.081849f, 0.070487f, 0.018747f, - -0.041628f, -0.071572f, -0.082518f, -0.085100f, -0.048489f, -0.024579f, -0.017177f, -0.015640f} - }, - { - {-0.009421f, -0.003640f, 0.002164f, -0.001773f, -0.005438f, -0.000423f, 0.012508f, -0.006465f, 0.001437f, -0.002745f, -0.000166f, -0.004825f, 0.008996f, -0.004711f, -0.005012f, -0.005666f, 0.010725f, -0.006423f, -0.001697f, -0.003053f, 0.003001f, 0.004929f, 0.006268f, -0.008908f, -0.000043f, 0.008462f, 0.003738f, 0.001420f, -0.000490f, -0.001096f, 0.003817f, 0.008627f, 0.002070f, -0.011158f, -0.005755f, -0.006020f, 0.009692f, -0.001030f, 0.007391f, -0.004693f, 0.003416f, 0.009682f, -0.004754f, -0.007355f, 0.002583f, -0.002774f, -0.000508f, -0.006585f, -0.002662f, -0.004930f, 0.001844f, -0.008916f, -0.002947f, -0.002308f, -0.000300f, 0.011982f, -0.003938f, -0.001842f, -0.000444f, -0.003185f, -0.001260f, -0.001170f, 0.007261f, 0.003730f, 0.004448f, -0.006286f, 0.004574f, 0.004783f, -0.004270f, 0.001958f, 0.002845f, -0.003252f, -0.004378f, 0.005076f, -0.007669f, 0.005378f, 0.003262f, 0.001399f, -0.007107f, -0.002494f, 0.002641f, -0.000661f, -0.001480f, -0.001948f, -0.000170f, -0.003842f, -0.004427f, -0.000713f, -0.000731f, 0.000499f, -0.001665f, 0.000006f, 0.002621f, -0.000131f, 0.000976f, 0.000342f, - 0.000518f, -0.000004f, -0.000513f, -0.001948f, -0.001154f, 0.001281f, -0.000681f, 0.000034f, -0.000262f, -0.005905f, 0.006242f, 0.000728f, -0.002695f, -0.004031f, -0.001101f, -0.002053f, 0.000007f, -0.004995f, -0.003833f, 0.002817f, -0.000790f, -0.001927f, -0.008715f, -0.001315f, 0.008106f, -0.005478f, -0.001367f, 0.006092f, -0.003522f, -0.006555f, -0.004989f, 0.004148f, 0.000036f, -0.000656f, -0.001257f, -0.006289f, 0.002111f, -0.002812f, -0.001472f, 0.007068f, -0.003900f, -0.009629f, -0.002863f, 0.000510f, 0.002880f, 0.002500f, 0.000826f, -0.007323f, -0.001684f, -0.008916f, -0.008078f, -0.002203f, 0.008466f, -0.001492f, -0.016729f, -0.000781f, 0.005637f, 0.004864f, -0.003452f, 0.003262f, 0.003601f, 0.000306f, 0.004979f, -0.009044f, -0.006377f, -0.000879f, 0.002619f, 0.000380f, 0.001868f, -0.001004f, 0.002362f, 0.002106f, 0.003485f, -0.000560f, 0.002150f, 0.002007f, -0.001679f, 0.003421f, -0.000853f, -0.008826f, -0.007198f, -0.004705f, -0.003711f, -0.003986f, 0.001205f, -0.002041f, 0.006814f, 0.005590f, -0.001038f, -0.002757f, -0.002363f, -0.001301f, 0.002050f, 0.003174f, 0.000410f, -0.001921f, - 0.000348f, 0.000409f, -0.001858f, 0.002378f, 0.000018f, -0.000599f, -0.000928f, -0.000245f, -0.001381f, 0.000927f, -0.000270f, 0.000142f, -0.001599f, 0.000915f, -0.001006f, -0.000031f, 0.000015f, 0.000621f, -0.000264f, -0.000805f, -0.000306f, -0.001549f, -0.000584f, 0.000112f, -0.000739f, 0.000088f, -0.001252f, 0.007653f, 0.004275f, 0.011465f, 0.000755f, -0.002270f, -0.001424f, 0.008107f, -0.002224f, 0.004342f, -0.007447f, -0.000805f, -0.000211f, 0.004248f, 0.002954f, 0.007268f, 0.005115f, -0.003765f, -0.007351f, -0.006013f, 0.004083f, -0.002576f, 0.005583f, 0.003497f, 0.000732f, -0.000387f, 0.004639f, 0.003252f, -0.003401f, 0.003809f, -0.007914f, -0.001127f, -0.007337f, -0.006299f, -0.008827f, 0.002539f, 0.005008f, -0.000966f, 0.006973f, -0.005468f, 0.006459f, -0.013148f, 0.005026f, 0.002199f, 0.009683f, 0.002807f, 0.003469f, 0.005196f, -0.000249f, -0.003382f, 0.003609f, 0.008428f, 0.002866f, 0.004063f, -0.001381f, -0.000187f, -0.012019f, -0.000837f, 0.001897f, 0.002272f, -0.001775f, 0.006365f, 0.012020f, -0.004064f, -0.008672f, 0.005727f, 0.001264f, -0.006175f, -0.000111f, -0.002885f, - -0.006191f, 0.000719f, 0.008646f, 0.002125f, 0.003138f, 0.001417f, -0.000935f, 0.003249f, 0.002023f, -0.000214f, 0.002838f, 0.000135f, -0.000796f, -0.000684f, -0.001644f, 0.001633f, -0.002410f, -0.000345f, 0.004013f, -0.000920f, -0.000101f, 0.001490f, -0.000955f, 0.002694f, -0.003838f, -0.001773f, 0.000054f, -0.001579f, -0.001677f, 0.000358f, -0.000944f, 0.001266f, 0.002941f, -0.001160f, 0.001660f, 0.000394f, 0.000171f, -0.000011f, 0.000408f, -0.003361f, -0.000855f, -0.000802f, 0.000648f, 0.002670f, 0.001608f, 0.004219f, 0.006309f, 0.006069f, -0.005879f, 0.009263f, -0.003297f, -0.006158f, -0.009100f, 0.002109f, -0.012035f, -0.000755f, 0.001249f, 0.003326f, -0.007677f, 0.004957f, -0.000125f, 0.001102f, 0.003212f, 0.001972f, 0.002718f, -0.010361f, -0.000697f, -0.002347f, -0.006760f, 0.003948f, 0.001987f, 0.001550f, 0.005797f, 0.020404f, -0.001506f, 0.001047f, 0.002908f, 0.005041f, 0.001995f, -0.016752f, 0.003478f, -0.002784f, -0.001925f, 0.009173f, 0.000268f, 0.004564f, 0.006616f, -0.008265f, -0.004614f, -0.002385f, -0.008020f, -0.017192f, 0.000810f, -0.006481f, -0.001038f, -0.001499f, - -0.000356f, -0.003986f, -0.008416f, 0.002389f, -0.008053f, -0.002556f, 0.001813f, -0.008975f, 0.009290f, 0.003208f, 0.002640f, -0.003770f, -0.000690f, -0.001468f, 0.001846f, -0.002892f, 0.004769f, -0.007361f, 0.002445f, 0.011197f, 0.009272f, -0.003239f, 0.004715f, -0.004407f, 0.001998f, -0.008346f, -0.000277f, 0.005198f, 0.005992f, 0.005366f, -0.000926f, 0.009988f, 0.000911f, 0.004995f, 0.004456f, -0.000170f, 0.002076f, 0.001094f, 0.000372f, -0.001682f, 0.001002f, 0.001562f, -0.000603f, 0.000184f, -0.001128f, -0.002735f, -0.000430f, 0.001885f, -0.001470f, 0.004036f, -0.001116f, -0.002081f, -0.001785f, 0.001424f, -0.001008f, 0.001774f, -0.000339f, -0.001681f, 0.001008f, -0.000456f, 0.002078f, 0.001281f, 0.001220f, 0.000851f, -0.003608f, -0.000835f, 0.000490f, 0.001564f, 0.000055f, 0.000319f, -0.000967f, 0.013621f, -0.017334f, 0.000707f, -0.010684f, 0.005427f, 0.007842f, 0.009567f, -0.001516f, -0.009141f, 0.000205f, 0.009424f, 0.001988f, 0.001780f, -0.007135f, -0.000980f, -0.012473f, 0.016512f, -0.000906f, -0.012763f, 0.013761f, 0.003425f, 0.004059f, -0.000927f, -0.005002f, -0.001655f, - -0.006597f, -0.006509f, 0.005068f, 0.007202f, -0.001501f, 0.006794f, -0.005651f, -0.003543f, -0.000027f, 0.009493f, 0.008989f, -0.002559f, -0.005108f, 0.007384f, 0.004705f, 0.000666f, 0.006252f, 0.001465f, -0.007401f, 0.007731f, 0.004818f, -0.000612f, -0.002588f, 0.002113f, -0.007975f, 0.021153f, -0.001121f, -0.000787f, 0.015760f, -0.001465f, -0.009680f, -0.005268f, -0.001163f, 0.003817f, -0.010059f, 0.006838f, 0.002052f, 0.000208f, -0.009134f, -0.007708f, -0.016126f, -0.001452f, 0.007492f, 0.003710f, 0.009091f, -0.005079f, -0.003595f, 0.019050f, -0.005319f, 0.003161f, -0.002669f, -0.007934f, 0.000593f, 0.003462f, -0.008268f, -0.014662f, 0.000594f, -0.009052f, -0.009120f, -0.004479f, 0.004737f, 0.000397f, -0.001390f, -0.005624f, -0.001931f, 0.000614f, -0.002107f, -0.001585f, 0.001484f, 0.005184f, 0.000721f, 0.001284f, -0.003702f, -0.001911f, -0.000396f, -0.000063f, -0.005217f, -0.003842f, -0.003317f, -0.000223f, 0.001248f, 0.000482f, -0.001708f, 0.000100f, -0.000344f, -0.000553f, -0.002742f, -0.001028f, -0.000407f, -0.001070f, -0.001441f, -0.018285f, -0.000280f, -0.007736f, -0.008740f, 0.002544f, - -0.010482f, 0.000211f, 0.007035f, 0.003793f, 0.014827f, -0.024950f, 0.015886f, -0.002733f, 0.006900f, -0.004850f, -0.003645f, -0.013154f, 0.011555f, 0.010180f, 0.002498f, -0.011704f, -0.000724f, -0.006808f, -0.000887f, 0.012005f, 0.008336f, 0.001764f, 0.011441f, -0.000256f, 0.000508f, 0.001039f, -0.000487f, -0.008158f, 0.017147f, -0.001821f, 0.000076f, 0.019929f, -0.013004f, 0.004695f, -0.006247f, -0.001396f, 0.006243f, -0.002828f, -0.010276f, 0.019179f, 0.014940f, -0.000635f, 0.004793f, 0.007986f, 0.020734f, -0.002789f, -0.003837f, -0.011388f, 0.001896f, 0.003865f, -0.012038f, -0.012839f, -0.011298f, 0.013360f, 0.000227f, -0.005603f, 0.009157f, 0.006487f, 0.000041f, -0.003277f, 0.002930f, -0.007340f, -0.001931f, -0.007979f, -0.001851f, 0.007397f, -0.014675f, 0.003394f, -0.003136f, -0.010177f, 0.006131f, 0.009680f, 0.004095f, 0.010083f, 0.008731f, -0.007494f, -0.011965f, -0.005991f, 0.005194f, -0.004737f, -0.009207f, 0.005906f, 0.009964f, -0.007303f, 0.001204f, 0.002110f, 0.001084f, -0.006821f, 0.003931f, -0.003048f, -0.002428f, -0.004383f, -0.002311f, -0.003434f, -0.000364f, -0.000397f, - 0.001295f, 0.002090f, -0.001745f, -0.001505f, -0.000685f, -0.002727f, -0.001599f, -0.000744f, -0.001097f, 0.002143f, 0.002688f, 0.000685f, 0.003964f, -0.003684f, 0.002677f, -0.003197f, -0.001455f, 0.002743f, 0.013691f, 0.014527f, 0.002408f, -0.012518f, -0.001722f, -0.011889f, 0.004959f, 0.031282f, 0.007722f, 0.021677f, 0.007965f, 0.000278f, -0.020218f, -0.004963f, 0.003332f, 0.019581f, -0.008656f, -0.004306f, -0.007539f, 0.001884f, 0.015738f, -0.011512f, 0.007706f, 0.013626f, 0.003029f, 0.005020f, -0.008910f, 0.016837f, -0.003604f, 0.021926f, -0.000205f, -0.006693f, -0.020567f, 0.002530f, 0.000077f, 0.024541f, -0.007402f, -0.001990f, 0.015558f, 0.000125f, 0.002061f, -0.005047f, -0.016083f, 0.001735f, 0.009264f, -0.011539f, -0.009107f, 0.002417f, -0.019288f, 0.010597f, 0.010708f, -0.003242f, -0.001254f, 0.005453f, 0.010921f, -0.000914f, -0.006721f, -0.000244f, 0.016037f, -0.002037f, -0.002466f, -0.006054f, 0.020762f, 0.021034f, 0.001422f, -0.003802f, 0.003276f, -0.000887f, 0.005480f, 0.009727f, -0.000804f, 0.014045f, -0.005468f, -0.007787f, -0.011362f, 0.003851f, -0.000933f, -0.017272f, - -0.012467f, -0.007166f, 0.013587f, -0.003968f, -0.006365f, -0.001746f, 0.000002f, -0.005855f, -0.008856f, -0.003103f, -0.002599f, -0.005280f, 0.000862f, -0.003310f, -0.002915f, 0.002793f, -0.005629f, -0.005795f, 0.001819f, 0.004654f, -0.002808f, -0.003732f, -0.002832f, -0.004868f, -0.002342f, 0.001519f, -0.001690f, 0.000838f, 0.002561f, -0.000855f, -0.001450f, -0.004294f, 0.002647f, 0.000373f, -0.013795f, 0.013986f, 0.010641f, 0.000824f, -0.009152f, -0.010277f, -0.004473f, -0.020417f, 0.023713f, 0.017838f, -0.003823f, 0.006612f, 0.002140f, -0.003896f, 0.017980f, -0.001442f, -0.008362f, 0.026617f, -0.028841f, 0.007450f, 0.012424f, -0.000099f, -0.011796f, 0.012686f, 0.001959f, 0.018343f, -0.007099f, -0.001971f, 0.004887f, 0.007329f, 0.001236f, -0.002507f, 0.026683f, 0.011513f, -0.012204f, -0.018424f, 0.012814f, -0.018432f, -0.005355f, -0.021221f, -0.002756f, 0.031772f, 0.012992f, 0.015360f, 0.000105f, -0.016856f, -0.002813f, -0.008236f, -0.003670f, 0.023762f, -0.003710f, -0.026186f, -0.002122f, 0.005140f, -0.016668f, -0.002764f, 0.010736f, 0.008455f, -0.011207f, -0.005850f, 0.011467f, 0.015188f, - -0.004422f, 0.015822f, 0.000274f, 0.003979f, 0.005913f, 0.001342f, 0.006208f, 0.009492f, 0.009177f, 0.008939f, -0.004711f, -0.018998f, -0.020997f, 0.005235f, -0.004226f, 0.015009f, -0.002696f, 0.017813f, 0.006019f, 0.008287f, -0.009496f, -0.008466f, 0.006340f, -0.000328f, 0.001291f, 0.001664f, 0.000782f, -0.008516f, -0.003912f, -0.001318f, -0.007084f, -0.000208f, -0.006087f, 0.001095f, -0.003442f, 0.002625f, -0.000866f, 0.004547f, -0.000010f, 0.002489f, 0.000794f, -0.002286f, -0.002001f, -0.002739f, 0.005623f, 0.000648f, -0.001673f, 0.001790f, 0.002904f, 0.002435f, 0.000543f, -0.004166f, -0.011653f, -0.006601f, 0.000041f, -0.005635f, -0.000143f, 0.011528f, -0.001635f, 0.010743f, -0.021942f, 0.007657f, 0.006041f, 0.003047f, -0.014422f, -0.012093f, -0.015352f, 0.011694f, 0.006013f, -0.011018f, -0.010993f, 0.014740f, 0.004692f, -0.001352f, -0.009277f, -0.015236f, -0.006305f, 0.005968f, -0.009806f, 0.000986f, -0.018254f, -0.005234f, 0.001958f, 0.006031f, 0.011667f, -0.002080f, 0.007386f, 0.010131f, -0.010674f, -0.025332f, 0.017146f, 0.000617f, -0.004170f, 0.016303f, -0.002727f, 0.000475f, - -0.011292f, 0.014304f, -0.009444f, -0.011945f, -0.004786f, 0.011693f, 0.017834f, 0.014958f, 0.004514f, 0.002866f, -0.032013f, 0.014273f, -0.002133f, 0.005895f, -0.011196f, -0.002266f, -0.012506f, -0.004461f, -0.003224f, -0.016534f, -0.008443f, -0.006887f, -0.009159f, 0.016755f, -0.005663f, 0.021848f, -0.002843f, -0.001428f, 0.013615f, 0.015582f, 0.026365f, 0.018038f, -0.000578f, -0.008803f, -0.001221f, -0.000146f, -0.012958f, 0.003035f, -0.008442f, -0.014167f, 0.026953f, -0.017435f, -0.018537f, -0.002839f, 0.009999f, 0.001322f, 0.003066f, 0.001180f, 0.011287f, -0.000326f, 0.003033f, 0.003917f, -0.004521f, 0.000534f, 0.006911f, -0.004034f, 0.002796f, 0.004927f, 0.004029f, 0.008659f, 0.001879f, 0.000038f, 0.004737f, 0.000765f, -0.001710f, 0.003161f, 0.004909f, 0.001891f, -0.000069f, 0.001454f, 0.000743f, 0.010068f, 0.000768f, 0.008185f, 0.005441f, 0.001180f, 0.008615f, 0.009450f, 0.000913f, -0.000319f, 0.001247f, 0.001273f, 0.001125f, -0.000859f, -0.001164f, 0.002369f, -0.005937f, -0.008508f, -0.033827f, 0.007503f, -0.023276f, -0.013925f, 0.022040f, 0.017148f, -0.038626f, -0.035410f, - 0.001205f, 0.015133f, -0.008979f, 0.009345f, -0.012747f, -0.001418f, -0.022424f, -0.005847f, -0.020244f, -0.001438f, -0.005540f, 0.000660f, 0.007780f, 0.006388f, 0.012606f, -0.001554f, -0.010752f, 0.009353f, -0.012823f, -0.005130f, 0.004112f, 0.000821f, 0.006532f, 0.013388f, -0.002166f, 0.001696f, 0.003074f, -0.005422f, -0.001425f, -0.019593f, -0.023219f, -0.022468f, 0.000017f, -0.022603f, 0.007570f, 0.002977f, -0.008941f, -0.010515f, -0.004531f, -0.003764f, -0.001952f, -0.013462f, -0.021268f, -0.001213f, 0.033739f, 0.018590f, -0.004773f, -0.020176f, -0.020840f, 0.023280f, -0.021887f, -0.007234f, -0.003911f, -0.014618f, -0.011097f, -0.014901f, -0.017437f, -0.024251f, -0.032801f, -0.004737f, -0.005310f, -0.004691f, 0.010955f, 0.010365f, 0.002692f, 0.009078f, -0.007472f, -0.009134f, 0.030272f, 0.012794f, -0.008126f, -0.022383f, 0.006890f, -0.013264f, -0.015733f, -0.000103f, 0.025375f, -0.005103f, -0.000269f, 0.017436f, -0.002031f, -0.011714f, 0.000432f, 0.004110f, -0.000426f, -0.004832f, -0.004673f, -0.000191f, 0.004225f, 0.002035f, 0.002795f, 0.001701f, 0.008615f, -0.002617f, 0.004594f, -0.012614f, - 0.005721f, 0.002976f, -0.002339f, 0.002600f, -0.002724f, 0.004554f, -0.002361f, -0.003719f, -0.002197f, 0.004131f, 0.003534f, 0.000417f, 0.004761f, -0.007184f, 0.007038f, -0.003613f, -0.004401f, 0.002159f, -0.027850f, 0.003107f, 0.013933f, 0.015142f, 0.014035f, 0.005884f, 0.027753f, -0.011068f, -0.020343f, -0.005384f, 0.003486f, -0.004189f, 0.008771f, 0.018437f, 0.037309f, 0.023433f, 0.013625f, 0.017332f, -0.014526f, -0.027700f, -0.009571f, -0.020775f, 0.023356f, 0.005215f, -0.005061f, -0.016874f, 0.026515f, 0.022770f, -0.008591f, -0.001805f, -0.000237f, -0.013914f, -0.011636f, -0.020875f, 0.006039f, 0.007034f, 0.011689f, -0.019746f, 0.001665f, 0.005474f, -0.009063f, -0.019192f, 0.000430f, 0.010957f, 0.014514f, 0.002348f, -0.037455f, -0.013468f, -0.018551f, 0.007509f, 0.022108f, -0.000150f, -0.021083f, 0.004853f, -0.020357f, 0.011063f, -0.005055f, 0.001653f, -0.014484f, 0.029962f, 0.023622f, -0.007595f, -0.007113f, -0.017517f, -0.001323f, 0.023921f, 0.005384f, 0.029430f, 0.028368f, 0.023622f, 0.013831f, 0.004730f, -0.019177f, -0.010755f, -0.025470f, 0.029099f, 0.029256f, -0.002489f, - -0.022510f, 0.014278f, 0.034011f, -0.000547f, 0.004240f, -0.008363f, -0.000889f, -0.022514f, 0.003483f, -0.017779f, 0.012042f, 0.004153f, 0.016975f, 0.016867f, 0.009147f, 0.001313f, 0.001451f, 0.010396f, 0.003786f, -0.002548f, -0.006959f, -0.002353f, -0.010587f, 0.001751f, 0.008135f, -0.007025f, -0.003954f, -0.008026f, 0.005733f, -0.001873f, 0.012294f, -0.011785f, 0.003119f, -0.000478f, 0.011709f, -0.005759f, 0.003863f, 0.007049f, 0.001275f, -0.000456f, 0.000416f, 0.002012f, -0.005404f, -0.002234f, 0.007017f, -0.018405f, -0.004592f, 0.013541f, 0.023575f, -0.024650f, -0.029938f, -0.025869f, 0.028522f, -0.011803f, 0.019078f, -0.000281f, 0.000346f, 0.045849f, -0.005491f, 0.003373f, -0.020253f, -0.031638f, 0.007946f, -0.004724f, 0.008586f, 0.005559f, -0.002480f, -0.018105f, 0.005184f, 0.006757f, 0.003239f, -0.017095f, 0.011384f, 0.008229f, 0.033514f, -0.015429f, 0.002363f, 0.018274f, 0.018771f, 0.000722f, 0.018955f, -0.004771f, 0.000831f, 0.016866f, 0.014330f, 0.003818f, -0.007288f, -0.026919f, -0.020338f, 0.015794f, -0.000368f, -0.006162f, -0.005275f, 0.004007f, 0.036225f, -0.002229f, - -0.012558f, 0.018413f, -0.008807f, 0.017404f, 0.004252f, 0.052161f, -0.010179f, -0.001676f, -0.000090f, 0.007757f, 0.017846f, -0.003473f, -0.006043f, 0.011605f, -0.024448f, 0.019970f, 0.036733f, 0.010881f, -0.007674f, 0.020492f, -0.007784f, -0.001077f, 0.041549f, -0.023979f, 0.009218f, 0.016319f, -0.006947f, 0.034594f, 0.008313f, 0.007434f, -0.013257f, -0.019909f, 0.003570f, 0.009058f, -0.021347f, 0.021752f, 0.000002f, 0.005508f, 0.000145f, 0.006350f, 0.020083f, -0.004551f, 0.020264f, 0.009612f, 0.006697f, 0.011292f, 0.010089f, -0.005877f, 0.012790f, 0.011890f, -0.010387f, 0.003944f, 0.008815f, 0.016209f, 0.003866f, 0.004677f, 0.008118f, 0.009494f, 0.014432f, 0.001479f, 0.000518f, -0.000856f, 0.009891f, 0.008369f, -0.009046f, -0.000137f, 0.006554f, 0.009222f, 0.007266f, -0.005403f, 0.013758f, -0.000371f, 0.004793f, 0.001697f, 0.011370f, 0.005791f, 0.005324f, 0.005445f, 0.007883f, 0.004435f, 0.005257f, 0.009086f, -0.026021f, -0.007411f, 0.017929f, -0.008595f, -0.013547f, -0.012083f, -0.012398f, 0.002318f, 0.018032f, -0.002204f, -0.039792f, 0.000111f, -0.030215f, 0.011872f, - 0.013117f, 0.000340f, 0.006249f, -0.013237f, -0.001614f, 0.016199f, -0.038101f, 0.009810f, -0.008238f, 0.021414f, 0.014869f, 0.009684f, 0.001783f, -0.015134f, -0.034372f, -0.001739f, -0.030024f, 0.018734f, 0.000380f, -0.009009f, 0.031880f, 0.016565f, -0.012526f, -0.009951f, -0.006469f, -0.004745f, -0.008724f, -0.017005f, 0.003237f, 0.005003f, 0.046066f, -0.001453f, -0.032672f, 0.000073f, 0.022591f, 0.001746f, -0.016738f, 0.010760f, -0.025333f, 0.017123f, -0.010605f, 0.011375f, -0.014677f, 0.006949f, -0.025909f, 0.068759f, 0.002772f, 0.047529f, -0.004417f, -0.012931f, 0.012497f, -0.015235f, -0.014862f, 0.026514f, 0.025896f, -0.022461f, -0.059576f, 0.056952f, -0.019779f, -0.015534f, -0.007294f, -0.007928f, 0.007711f, -0.005178f, 0.004584f, 0.024565f, 0.006047f, -0.019782f, -0.015862f, -0.011972f, 0.007493f, -0.012517f, -0.001662f, 0.011441f, -0.030857f, -0.002637f, 0.002110f, -0.004831f, -0.008970f, 0.003509f, -0.006323f, 0.016929f, -0.006583f, 0.007544f, -0.007457f, -0.005486f, 0.000507f, -0.007848f, 0.004650f, 0.004028f, -0.003164f, 0.004263f, -0.007142f, 0.003541f, -0.001829f, -0.000549f, - -0.003168f, 0.000097f, -0.012880f, -0.009488f, -0.001765f, -0.005287f, -0.010532f, -0.014061f, -0.007832f, -0.003433f, -0.005547f, -0.001197f, -0.009342f, -0.000011f, -0.008292f, -0.002413f, -0.010825f, 0.005849f, -0.005989f, -0.003353f, -0.029334f, -0.010415f, -0.008925f, -0.025221f, -0.044416f, -0.010962f, 0.000697f, -0.023590f, 0.011530f, -0.010094f, 0.019737f, -0.017021f, -0.007130f, -0.024252f, 0.057791f, 0.048893f, -0.010987f, 0.010903f, 0.033570f, -0.035318f, 0.035794f, -0.014899f, -0.014943f, 0.012905f, 0.004710f, 0.006118f, -0.005287f, -0.007788f, 0.000990f, 0.011590f, 0.009996f, -0.015705f, 0.017971f, -0.016924f, -0.028171f, 0.020424f, 0.017960f, -0.023451f, -0.029147f, -0.033678f, -0.004953f, -0.005584f, 0.009405f, -0.021996f, -0.027573f, -0.014079f, 0.046097f, 0.016135f, 0.015670f, -0.019760f, 0.017769f, 0.024267f, -0.018965f, 0.045305f, 0.008389f, -0.016215f, -0.021271f, 0.012125f, -0.017871f, -0.038748f, 0.009409f, -0.000443f, 0.000840f, 0.021179f, 0.019694f, -0.017029f, 0.003204f, -0.049658f, -0.006204f, -0.019585f, 0.041062f, 0.002453f, 0.005759f, -0.023952f, 0.019402f, -0.042186f, - -0.005168f, 0.016504f, 0.004717f, -0.004587f, -0.004857f, 0.005114f, -0.001992f, 0.004759f, -0.006354f, 0.001186f, 0.003456f, 0.010037f, 0.002447f, 0.003200f, -0.002338f, 0.005959f, -0.006235f, 0.001917f, 0.018681f, -0.003680f, 0.000797f, -0.005991f, 0.008298f, 0.003887f, -0.001045f, 0.009808f, -0.010365f, -0.009795f, 0.010596f, -0.008935f, -0.003365f, -0.008185f, 0.004461f, -0.011972f, -0.005453f, -0.003898f, 0.009568f, 0.009651f, -0.015452f, 0.002432f, 0.007828f, -0.005289f, -0.017420f, -0.008382f, 0.012815f, -0.008401f, -0.021484f, 0.027221f, 0.028683f, 0.025957f, 0.017509f, -0.000223f, 0.023774f, 0.021559f, 0.003605f, -0.004082f, 0.009580f, 0.000064f, -0.024241f, -0.002885f, 0.009203f, -0.018952f, 0.027068f, -0.028223f, 0.022601f, 0.024615f, -0.007082f, -0.005552f, 0.010434f, 0.032845f, 0.024605f, -0.029683f, -0.006481f, -0.007943f, -0.002369f, 0.007421f, -0.013849f, -0.014499f, 0.032220f, 0.000810f, 0.046271f, -0.030216f, -0.028662f, 0.023299f, -0.015437f, 0.008406f, -0.018163f, 0.015557f, 0.017749f, 0.011721f, -0.007253f, -0.026546f, 0.002627f, 0.008841f, -0.022086f, -0.040558f, - -0.001403f, 0.003712f, -0.023949f, 0.043846f, -0.005004f, -0.012406f, 0.058230f, 0.054867f, 0.005475f, -0.007601f, -0.002048f, -0.011682f, 0.013201f, -0.028737f, 0.026956f, 0.003592f, -0.015646f, 0.032599f, 0.005223f, 0.006632f, -0.009296f, -0.017656f, -0.043738f, 0.009632f, -0.014900f, -0.007179f, 0.020170f, 0.008211f, -0.009605f, -0.028551f, -0.007909f, -0.032517f, 0.013903f, 0.029315f, -0.004142f, -0.022082f, -0.015470f, -0.022020f, 0.000243f, 0.011922f, 0.014230f, -0.002976f, -0.015626f, -0.008099f, -0.008529f, 0.002089f, -0.004739f, -0.007460f, 0.006279f, -0.001149f, -0.004622f, 0.007735f, -0.017664f, 0.005073f, 0.004555f, 0.027318f, 0.002466f, -0.006031f, -0.013979f, 0.012058f, -0.014604f, -0.001891f, 0.010205f, -0.019375f, 0.018066f, 0.003881f, -0.000786f, 0.003718f, 0.012214f, -0.006154f, -0.019168f, 0.000466f, -0.005703f, -0.002412f, 0.018407f, 0.017561f, -0.048063f, -0.111317f, 0.037306f, 0.035348f, -0.012452f, 0.007888f, -0.026807f, 0.048030f, 0.030714f, -0.027236f, 0.007755f, 0.006532f, 0.000685f, -0.012258f, -0.008838f, -0.057411f, 0.024278f, 0.028341f, -0.006554f, -0.000018f, - -0.003224f, 0.019073f, -0.014400f, 0.036400f, 0.010783f, -0.043265f, -0.024525f, 0.054946f, 0.036065f, -0.035805f, -0.008430f, -0.012725f, -0.021934f, 0.003429f, -0.008765f, 0.007842f, 0.071374f, 0.019467f, 0.074783f, 0.042735f, 0.048192f, 0.043940f, 0.086136f, -0.005638f, -0.008003f, 0.020622f, -0.006094f, -0.072242f, 0.058576f, -0.025363f, 0.033588f, -0.047745f, -0.037990f, -0.071320f, 0.014163f, -0.006547f, -0.023957f, 0.017431f, -0.033540f, 0.000153f, -0.047912f, -0.047821f, 0.013417f, 0.027975f, -0.038886f, -0.010284f, -0.026963f, -0.037402f, -0.042039f, -0.030167f, 0.022985f, -0.018207f, -0.052485f, 0.075409f, 0.047230f, 0.076032f, -0.009926f, -0.016327f, -0.015133f, -0.026786f, -0.043111f, -0.002723f, -0.009479f, -0.032584f, -0.010893f, 0.009635f, -0.023112f, -0.020802f, 0.002405f, -0.003378f, -0.010302f, -0.008414f, 0.018751f, 0.020021f, 0.000628f, 0.005085f, 0.014209f, 0.017852f, 0.003623f, -0.001448f, -0.002742f, 0.008423f, -0.003568f, 0.002145f, -0.003282f, -0.012481f, -0.000339f, 0.011882f, -0.012313f, 0.016213f, 0.020414f, 0.008681f, 0.000665f, 0.003393f, 0.002155f, -0.013555f, - 0.001121f, 0.007815f, -0.007005f, 0.000166f, -0.003202f, 0.002295f, -0.004857f, 0.001881f, 0.007594f, -0.010360f, -0.008879f, 0.016502f, 0.006703f, -0.002003f, 0.002506f, -0.040194f, -0.105936f, 0.046359f, 0.055310f, -0.024550f, -0.010507f, -0.002420f, 0.062589f, 0.002350f, 0.013648f, 0.013480f, -0.014305f, 0.012720f, 0.029335f, -0.005465f, -0.027556f, 0.007301f, 0.053283f, -0.027712f, -0.017223f, 0.011952f, -0.007060f, 0.039988f, -0.009592f, 0.018220f, -0.020097f, -0.024186f, -0.024174f, 0.026334f, -0.007493f, 0.023417f, 0.027223f, -0.006596f, 0.003874f, 0.000516f, -0.021638f, 0.007634f, -0.019598f, 0.023879f, 0.057955f, 0.095000f, -0.000850f, -0.002349f, -0.039752f, 0.022008f, 0.031298f, -0.000582f, 0.035109f, 0.050095f, 0.021242f, 0.028637f, -0.043319f, -0.025852f, 0.036573f, 0.094921f, -0.017009f, -0.055164f, 0.014461f, -0.018103f, -0.000691f, 0.025991f, 0.000791f, -0.024970f, -0.011803f, -0.012718f, -0.064016f, -0.026534f, 0.000724f, 0.011023f, 0.022736f, -0.003342f, -0.024435f, -0.013895f, 0.006366f, -0.009676f, -0.024544f, 0.025948f, 0.062176f, 0.027125f, 0.033626f, 0.003767f, - -0.008158f, -0.049977f, -0.010842f, 0.014648f, 0.011420f, -0.010920f, 0.028837f, -0.007722f, 0.016261f, -0.034877f, 0.002324f, -0.011797f, -0.009861f, 0.000689f, 0.010058f, 0.009936f, -0.009664f, -0.018815f, 0.018823f, -0.006918f, 0.015512f, 0.001719f, -0.003579f, 0.001608f, 0.003538f, 0.014454f, 0.000733f, -0.001887f, -0.007032f, -0.007726f, 0.012403f, 0.004376f, 0.011450f, -0.023620f, 0.016945f, 0.009999f, 0.004797f, -0.008336f, -0.002924f, 0.017764f, -0.001844f, 0.001039f, -0.013169f, 0.001608f, -0.020340f, -0.003997f, 0.006207f, 0.017805f, 0.008907f, 0.015771f, 0.033747f, 0.011213f, 0.017682f, 0.006927f, 0.050864f, -0.016044f, -0.006405f, -0.019996f, 0.011777f, -0.012417f, 0.011158f, 0.057739f, 0.011364f, -0.061162f, -0.014974f, -0.017835f, -0.052385f, 0.033266f, 0.015643f, -0.006045f, 0.007325f, 0.003279f, -0.023574f, -0.000195f, -0.001754f, -0.023308f, -0.007093f, 0.050417f, 0.073969f, 0.034976f, -0.025939f, -0.040803f, 0.019149f, 0.033884f, 0.003650f, 0.027118f, -0.018994f, -0.013018f, 0.027668f, 0.008836f, 0.000233f, -0.062117f, -0.081220f, -0.002567f, -0.047576f, -0.027464f, - 0.016772f, 0.067883f, 0.014513f, 0.003435f, -0.019852f, -0.023391f, -0.034193f, -0.029817f, 0.005356f, 0.020536f, -0.007475f, -0.033603f, -0.054468f, 0.021644f, 0.001190f, -0.030107f, -0.050804f, -0.034141f, -0.055905f, -0.100330f, -0.060871f, -0.008954f, -0.012295f, 0.120853f, -0.015043f, -0.004429f, 0.069279f, 0.008262f, 0.003625f, 0.041955f, -0.025278f, -0.060953f, -0.071296f, -0.010906f, -0.034316f, -0.037517f, -0.040342f, -0.043662f, 0.008230f, 0.039685f, 0.062484f, 0.037472f, 0.007365f, 0.004227f, -0.016504f, 0.032575f, 0.006325f, -0.009683f, -0.040883f, 0.008517f, 0.029108f, -0.001260f, -0.000501f, -0.014367f, 0.007744f, 0.016548f, 0.026560f, 0.007803f, 0.011055f, 0.010550f, 0.013073f, 0.016955f, 0.017032f, -0.004686f, 0.012852f, 0.002952f, -0.009732f, -0.020955f, -0.025743f, 0.002827f, 0.005623f, -0.024987f, -0.012796f, -0.024011f, 0.007519f, 0.012810f, 0.018875f, 0.028615f, 0.047354f, 0.035877f, 0.036005f, 0.022014f, 0.013783f, -0.008374f, 0.003419f, 0.000548f, -0.022727f, -0.033912f, -0.026232f, -0.028889f, 0.038115f, -0.054196f, 0.013627f, 0.008554f, -0.023631f, -0.075983f, - 0.051614f, 0.015293f, -0.004935f, -0.076935f, 0.020408f, 0.011889f, -0.040657f, 0.006747f, 0.035560f, 0.021847f, 0.010313f, -0.034849f, -0.007156f, -0.013032f, 0.006073f, -0.013145f, 0.003159f, -0.027000f, -0.038850f, 0.042504f, -0.029448f, 0.064612f, -0.039953f, -0.036158f, -0.024541f, -0.045445f, 0.003921f, -0.000911f, 0.067837f, -0.050357f, -0.053144f, 0.027324f, 0.017408f, -0.043971f, -0.058508f, -0.006520f, -0.033006f, 0.037824f, 0.007978f, -0.048412f, 0.031314f, -0.008302f, -0.074454f, 0.048785f, -0.033262f, 0.031828f, -0.055424f, -0.013586f, -0.001639f, -0.023312f, -0.009640f, 0.006327f, 0.069738f, -0.018899f, -0.006643f, -0.020125f, 0.019839f, -0.033107f, 0.025748f, 0.054529f, -0.003468f, 0.054828f, 0.042985f, -0.006604f, 0.087845f, -0.005203f, 0.010051f, -0.002637f, 0.024710f, 0.088627f, -0.007414f, -0.024574f, -0.094917f, 0.073382f, 0.026069f, 0.062647f, 0.021213f, -0.049287f, 0.021796f, 0.014043f, 0.008907f, -0.043760f, 0.024861f, 0.005093f, 0.007085f, -0.023534f, -0.006986f, 0.029920f, 0.025514f, 0.001115f, -0.003219f, -0.003076f, -0.003573f, 0.007315f, 0.018662f, -0.038432f, - -0.011474f, -0.005334f, 0.006004f, -0.007868f, 0.008405f, 0.008271f, 0.011988f, -0.008982f, -0.020549f, 0.031708f, 0.049524f, 0.017380f, -0.025598f, -0.021880f, -0.009539f, -0.007463f, 0.013321f, 0.006754f, -0.005089f, -0.031364f, -0.022582f, -0.025412f, -0.002604f, 0.024352f, 0.010591f, 0.020532f, 0.007739f, -0.034203f, -0.006237f, 0.014954f, 0.052035f, -0.100297f, 0.003839f, -0.112879f, -0.037826f, -0.019176f, 0.034354f, 0.104233f, 0.088592f, 0.032630f, 0.052304f, -0.033992f, -0.028640f, 0.005038f, -0.007691f, 0.024122f, 0.007643f, -0.023575f, 0.034964f, 0.051481f, 0.042786f, 0.031974f, 0.027035f, -0.000898f, 0.004814f, -0.017541f, 0.048722f, 0.022725f, -0.009343f, -0.030078f, 0.010038f, 0.019966f, -0.005333f, 0.063742f, 0.066598f, -0.038570f, -0.028512f, 0.001377f, 0.051732f, 0.032217f, 0.008272f, 0.006292f, -0.012389f, -0.023394f, 0.012866f, 0.079507f, -0.032254f, -0.039456f, -0.042897f, 0.041504f, 0.016953f, -0.023936f, -0.037109f, -0.059506f, -0.070399f, 0.007631f, 0.015385f, 0.012604f, -0.015558f, -0.005306f, -0.019399f, 0.013780f, -0.056165f, -0.092327f, -0.041613f, -0.006545f, - -0.015728f, -0.036136f, 0.046097f, 0.076982f, -0.017400f, 0.039647f, 0.085087f, 0.055403f, 0.019671f, -0.058868f, 0.009434f, 0.010411f, -0.052015f, -0.028881f, -0.008367f, -0.041523f, 0.045086f, 0.064175f, -0.003958f, -0.015019f, -0.008052f, -0.018949f, -0.010574f, -0.026466f, -0.025879f, -0.009669f, -0.012914f, 0.009060f, -0.005892f, -0.007334f, 0.012543f, -0.039251f, -0.004870f, 0.002991f, 0.039506f, -0.040806f, -0.006752f, -0.009477f, 0.007373f, -0.026074f, -0.009235f, 0.007650f, -0.014303f, -0.024131f, -0.004091f, -0.002080f, -0.023590f, 0.027315f, -0.037959f, -0.004519f, -0.014121f, 0.008123f, -0.004195f, -0.011394f, -0.022256f, 0.000444f, 0.010883f, -0.008151f, -0.063885f, 0.051322f, -0.006639f, 0.044078f, 0.026700f, 0.000908f, 0.029202f, -0.012970f, -0.003394f, 0.025120f, 0.030831f, 0.004649f, 0.000060f, -0.001135f, -0.028258f, -0.018415f, 0.007433f, -0.039376f, 0.000962f, -0.014881f, 0.000861f, -0.033408f, 0.005582f, 0.001728f, -0.030374f, 0.025157f, 0.010664f, 0.016984f, -0.038120f, -0.010400f, 0.007083f, -0.002128f, 0.002666f, 0.021679f, 0.004742f, 0.005971f, -0.004451f, -0.008572f, - -0.006039f, -0.003264f, 0.014001f, -0.006518f, -0.024363f, 0.019523f, -0.033470f, -0.010634f, -0.011532f, 0.003855f, -0.016420f, -0.019521f, 0.025353f, -0.003394f, -0.025575f, 0.015434f, -0.035638f, 0.028339f, 0.008797f, 0.001186f, 0.029282f, 0.032505f, 0.004473f, 0.009148f, -0.024587f, 0.031522f, -0.015566f, -0.021840f, -0.001929f, 0.004522f, 0.059840f, -0.027084f, -0.044289f, 0.037730f, -0.014473f, 0.037698f, -0.006462f, 0.002315f, -0.016607f, 0.022763f, -0.038487f, -0.032063f, -0.012669f, 0.014889f, 0.008957f, -0.002506f, 0.018384f, -0.023042f, -0.023171f, -0.015547f, 0.005437f, 0.006509f, 0.001339f, -0.001178f, -0.007025f, 0.003783f, -0.031944f, 0.006279f, 0.006490f, -0.007887f, -0.002974f, 0.009437f, -0.005136f, -0.013834f, 0.016496f, -0.008435f, 0.002032f, -0.000897f, -0.004189f, 0.010946f, 0.004818f, -0.011774f, -0.001327f, -0.002952f, -0.010350f, -0.002433f, -0.003828f, -0.021460f, 0.006497f, 0.012782f, 0.010391f, -0.009856f, 0.009707f, -0.015716f, -0.004822f, 0.000179f, -0.010018f, 0.030774f, -0.014270f, -0.166692f, -0.317489f, -0.113289f, -0.248692f, -0.283326f, 0.068826f, -0.010014f, - 0.094466f, 0.366242f, 0.397099f, 0.280270f, 0.399931f, 0.328631f, 0.108751f, 0.114785f, 0.084777f, -0.221463f, -0.228067f, -0.127080f, -0.221404f, -0.239263f, -0.080504f, -0.070878f, -0.201791f, -0.152136f, -0.025141f, -0.090342f, -0.110420f, -0.027810f, -0.084638f, -0.149264f, -0.085261f, 0.027200f, -0.060233f, -0.074075f, 0.086856f, -0.015380f, -0.083294f, 0.074856f, 0.139027f, -0.032835f, 0.034327f, 0.215801f, 0.029232f, -0.069910f, 0.142989f, 0.124882f, -0.124947f, 0.070688f, 0.157642f, -0.049884f, 0.016706f, 0.273630f, 0.208587f, 0.104851f, 0.384484f, 0.428196f, 0.218623f, 0.394313f, 0.509259f, 0.319481f, 0.301328f, 0.418666f, 0.268914f, 0.170923f, 0.189250f, 0.098264f, -0.115884f, -0.223563f, -0.303104f, -0.516849f, -0.628854f, -0.712789f, -0.806065f, -0.794742f, -0.861447f, -0.769576f, -0.571504f, -0.571397f, -0.450668f, -0.040958f, -0.023992f, 0.011006f, 0.321950f, 0.254277f, 0.084190f, 0.168534f, 0.251006f, 0.092586f, 0.111612f, 0.255003f, 0.185399f, 0.037342f, 0.152664f, 0.215804f, 0.092317f, 0.115997f, 0.265474f, 0.099124f, -0.042901f, 0.122156f, 0.085171f, -0.059539f, - 0.115196f, 0.256592f, 0.120389f, 0.189025f, 0.409700f, 0.340774f, 0.322736f, 0.481498f, 0.444507f, 0.306334f, 0.266166f, 0.238712f, 0.088929f, -0.004042f, 0.012174f, -0.050857f, -0.160916f, -0.160052f, -0.183859f, -0.314162f, -0.351531f, -0.336872f, -0.377984f, -0.453255f, -0.397193f, -0.383825f, -0.409589f, -0.317096f, -0.214604f, -0.167862f, -0.106002f, 0.003644f, 0.042060f, 0.035359f, 0.058610f, 0.064570f, 0.032951f, 0.030227f, 0.059190f, 0.051293f, 0.034765f, 0.041953f, 0.048952f, 0.037014f, 0.048042f, 0.073526f, 0.080820f, 0.077122f, 0.088413f, 0.086142f, 0.060208f, 0.048775f, 0.033277f, 0.025804f, 0.025114f}, - {-0.008142f, 0.006770f, 0.007248f, -0.003433f, 0.007274f, -0.004381f, -0.000954f, 0.009680f, -0.003957f, 0.004608f, 0.002815f, -0.010720f, -0.004831f, 0.008061f, -0.003129f, -0.001530f, 0.005076f, 0.003362f, 0.003620f, 0.000975f, 0.012411f, 0.002126f, -0.003177f, 0.002788f, -0.004275f, 0.007692f, -0.002200f, -0.004217f, -0.001824f, -0.010034f, -0.003388f, -0.007389f, 0.002440f, -0.000120f, 0.002731f, -0.002957f, 0.004226f, 0.001996f, -0.000445f, 0.001295f, 0.000692f, 0.000979f, 0.001375f, -0.005304f, 0.013278f, 0.001963f, -0.004816f, 0.009831f, -0.002347f, -0.008474f, -0.009282f, 0.009076f, -0.001790f, -0.000718f, 0.006018f, 0.000682f, -0.001547f, 0.004699f, -0.000489f, 0.002726f, 0.000799f, 0.003463f, -0.001785f, 0.003770f, -0.001681f, 0.004478f, 0.006509f, 0.003540f, -0.003825f, -0.003936f, -0.001925f, 0.001755f, -0.004088f, 0.002903f, -0.002000f, 0.003601f, 0.004695f, -0.005798f, -0.003263f, 0.005075f, 0.001523f, -0.001591f, 0.007827f, 0.004538f, 0.003744f, -0.000379f, 0.002075f, -0.000147f, 0.001059f, -0.000892f, 0.001205f, 0.000473f, 0.000582f, -0.001764f, 0.002912f, 0.000960f, - 0.000224f, -0.000491f, 0.001194f, 0.001903f, -0.000975f, 0.002048f, -0.000059f, 0.008507f, 0.001676f, 0.001939f, 0.007141f, 0.000092f, 0.005155f, 0.002456f, -0.000577f, 0.000553f, -0.005568f, 0.002612f, 0.000454f, 0.008749f, 0.003102f, 0.002874f, 0.000401f, 0.002592f, 0.009600f, -0.009046f, 0.005133f, 0.001363f, -0.005968f, -0.002667f, -0.003695f, -0.001201f, -0.003428f, 0.002440f, 0.011085f, 0.006983f, 0.008282f, 0.006584f, 0.011301f, 0.008239f, -0.010231f, -0.018567f, -0.002341f, 0.000887f, -0.004519f, 0.009808f, -0.000402f, 0.014683f, -0.006835f, -0.006852f, 0.006337f, 0.000365f, 0.000540f, 0.005826f, -0.010699f, 0.002772f, -0.007657f, 0.010172f, 0.005994f, -0.000015f, 0.015434f, 0.000710f, -0.001461f, -0.001886f, -0.002695f, -0.003801f, 0.007315f, 0.003928f, -0.003743f, -0.001204f, -0.010724f, -0.004693f, -0.001406f, 0.011284f, 0.007696f, 0.001408f, 0.005676f, 0.000244f, 0.006044f, 0.000044f, 0.002507f, -0.006412f, -0.004151f, 0.001605f, 0.000850f, -0.000300f, -0.003257f, 0.003063f, 0.003566f, -0.000864f, -0.003348f, -0.000571f, 0.003593f, -0.000522f, 0.001917f, -0.001672f, - -0.000989f, -0.001309f, 0.001149f, -0.001140f, 0.000211f, -0.000038f, 0.001818f, -0.001458f, 0.001755f, 0.002760f, -0.001279f, 0.000689f, 0.000225f, -0.000010f, 0.003264f, -0.001001f, 0.000829f, -0.001171f, 0.001297f, 0.001004f, 0.000555f, -0.000334f, 0.002862f, -0.000094f, 0.000139f, 0.001266f, 0.006758f, 0.015364f, 0.004510f, 0.000680f, 0.000481f, 0.004334f, 0.004040f, 0.000923f, 0.002428f, 0.003486f, -0.000234f, -0.000317f, 0.004395f, 0.017390f, 0.005816f, 0.013571f, -0.007686f, -0.006262f, -0.002545f, -0.008135f, -0.009538f, -0.003797f, 0.007057f, -0.011752f, -0.001646f, -0.001369f, -0.018507f, 0.003739f, -0.018696f, -0.006195f, -0.002491f, 0.004464f, 0.000060f, 0.003923f, -0.003650f, -0.000159f, -0.012619f, 0.004667f, -0.004184f, -0.007020f, 0.001332f, 0.003580f, -0.000587f, 0.000959f, 0.005399f, 0.009604f, -0.016113f, 0.004444f, 0.001095f, -0.004726f, -0.005132f, -0.001004f, 0.002227f, -0.002119f, -0.009693f, -0.002244f, 0.002640f, 0.005092f, -0.000664f, 0.012067f, 0.001065f, 0.000574f, 0.004921f, -0.007666f, 0.011395f, 0.003671f, 0.006773f, 0.003058f, 0.005668f, -0.001153f, - -0.001080f, 0.003404f, 0.001981f, -0.001554f, -0.003438f, -0.002757f, -0.005684f, -0.000126f, -0.007630f, 0.000542f, 0.004448f, -0.000365f, -0.003249f, -0.005949f, 0.005313f, -0.003153f, 0.002155f, 0.000840f, -0.000944f, -0.005659f, 0.000474f, -0.000511f, 0.001395f, -0.001717f, -0.001653f, 0.000508f, -0.001839f, -0.003102f, -0.001686f, -0.001285f, -0.000314f, -0.002037f, -0.000358f, -0.001150f, 0.002672f, -0.000478f, -0.001454f, -0.000465f, 0.001421f, -0.000555f, -0.002429f, -0.002572f, 0.002759f, 0.000065f, 0.000236f, -0.001620f, 0.009175f, 0.010026f, -0.000309f, 0.011060f, 0.000706f, -0.001427f, 0.001368f, 0.000939f, -0.002035f, -0.000091f, -0.007697f, -0.004381f, 0.006899f, 0.008120f, -0.009468f, -0.002241f, 0.003957f, -0.006299f, -0.018127f, 0.004539f, 0.006727f, 0.007911f, -0.004150f, -0.004784f, -0.006451f, 0.009922f, 0.011302f, 0.001962f, 0.004472f, -0.008833f, -0.007154f, 0.008412f, 0.003190f, -0.006613f, 0.011668f, -0.011647f, 0.001962f, 0.001146f, 0.010944f, 0.004045f, -0.002396f, 0.001814f, -0.003764f, 0.006027f, -0.014227f, -0.004189f, -0.020507f, -0.008928f, 0.010416f, -0.000835f, - 0.015961f, -0.002138f, -0.013286f, 0.008461f, 0.001877f, -0.005405f, -0.000609f, 0.000682f, -0.005364f, 0.003571f, 0.009571f, 0.010792f, 0.000321f, 0.005177f, -0.000468f, 0.012274f, -0.006204f, 0.005328f, -0.001123f, -0.000179f, 0.000426f, 0.004271f, -0.001224f, 0.015347f, 0.001569f, 0.001423f, -0.002334f, 0.009057f, 0.003125f, -0.003008f, -0.006407f, 0.000176f, 0.006207f, 0.002168f, 0.001852f, -0.003964f, -0.000163f, 0.001275f, -0.000569f, -0.001028f, -0.001052f, -0.002100f, 0.001718f, 0.000178f, 0.000782f, 0.001341f, 0.003286f, -0.001230f, -0.003289f, 0.003725f, -0.000935f, 0.000406f, 0.000129f, -0.000400f, -0.000376f, 0.001501f, 0.001398f, 0.001824f, -0.000584f, 0.001704f, 0.000018f, 0.001001f, 0.001719f, -0.000346f, 0.000273f, 0.001450f, 0.002209f, 0.001207f, 0.001418f, 0.000465f, 0.000233f, 0.011217f, -0.015209f, -0.002091f, -0.010304f, -0.010701f, 0.003852f, 0.002091f, 0.022178f, 0.001170f, 0.008175f, -0.018483f, -0.004405f, 0.004101f, -0.009589f, 0.006369f, 0.001876f, 0.001584f, 0.005430f, 0.006275f, 0.014564f, 0.006493f, -0.002273f, 0.004621f, -0.007217f, 0.002133f, - 0.005897f, -0.000382f, 0.001249f, 0.006468f, 0.008369f, 0.020134f, 0.003970f, -0.002973f, -0.013726f, -0.000561f, 0.010491f, -0.016272f, 0.001846f, -0.001178f, 0.005167f, -0.008147f, -0.009577f, 0.017440f, -0.011080f, 0.003615f, -0.000648f, -0.010889f, 0.025231f, 0.006521f, 0.013258f, 0.007136f, 0.014494f, -0.002628f, -0.005367f, 0.009227f, -0.008414f, 0.007100f, -0.006689f, 0.003877f, 0.010021f, 0.005525f, -0.004386f, -0.000729f, 0.005161f, -0.008772f, -0.006437f, 0.000544f, -0.000961f, 0.014929f, -0.008104f, -0.013908f, -0.002001f, 0.007769f, 0.012639f, -0.007752f, -0.013094f, -0.002872f, 0.018434f, 0.002449f, 0.000080f, -0.006529f, 0.000994f, -0.000358f, 0.005764f, 0.005846f, -0.000268f, 0.002809f, 0.003223f, -0.008919f, -0.001955f, 0.003105f, -0.000330f, 0.005247f, 0.002192f, 0.000548f, -0.003676f, -0.000375f, -0.000402f, 0.002028f, -0.000490f, 0.005474f, -0.000941f, -0.000543f, -0.002585f, 0.000625f, -0.003298f, 0.000177f, -0.000251f, 0.001382f, 0.003305f, 0.000131f, 0.002789f, -0.000151f, -0.003078f, -0.000620f, 0.000445f, -0.005873f, 0.006684f, -0.024099f, 0.013657f, 0.004012f, - -0.005390f, 0.007326f, -0.019693f, -0.016439f, 0.002134f, -0.008119f, 0.018644f, 0.016556f, 0.017607f, -0.011755f, 0.006848f, 0.000257f, 0.017552f, 0.001237f, 0.012411f, 0.004965f, -0.005245f, -0.015801f, -0.014315f, 0.004563f, -0.019076f, -0.000294f, -0.004502f, -0.009279f, -0.012739f, -0.007495f, 0.000117f, 0.015342f, 0.000062f, 0.005976f, -0.021823f, -0.012203f, -0.002315f, -0.013697f, 0.000958f, 0.013687f, -0.014814f, 0.006107f, -0.000177f, -0.005081f, -0.001374f, -0.003192f, 0.015088f, 0.008080f, 0.007522f, -0.003638f, -0.004589f, 0.020755f, -0.006279f, -0.005687f, -0.017124f, 0.012486f, -0.024312f, 0.003305f, -0.007993f, 0.003772f, 0.008642f, -0.005885f, -0.012974f, -0.008054f, 0.000889f, 0.017596f, -0.008856f, -0.001983f, -0.011438f, -0.009251f, 0.005706f, 0.006086f, 0.013932f, -0.016313f, -0.000130f, -0.008661f, -0.005682f, 0.003371f, -0.006429f, -0.012829f, -0.007296f, -0.001179f, 0.011710f, 0.011871f, 0.004131f, 0.000584f, 0.001741f, 0.005382f, 0.000467f, 0.000784f, 0.002475f, -0.003438f, 0.000350f, 0.004871f, -0.001472f, 0.000514f, 0.006031f, -0.001554f, -0.000222f, 0.000892f, - 0.004392f, -0.000105f, 0.000690f, 0.001519f, 0.000754f, 0.003605f, -0.004341f, -0.004896f, -0.000315f, -0.001840f, 0.000058f, 0.002598f, -0.001164f, 0.004905f, 0.003133f, -0.022498f, 0.005994f, 0.002045f, 0.003733f, -0.030964f, 0.027622f, 0.000543f, -0.000639f, -0.000571f, -0.010076f, 0.003227f, 0.000325f, 0.009878f, -0.008701f, 0.011079f, 0.003137f, -0.006937f, -0.011946f, -0.014919f, 0.007440f, 0.001303f, -0.001325f, 0.001004f, -0.008632f, 0.009265f, 0.006893f, 0.017110f, 0.010138f, 0.006757f, 0.009407f, -0.002248f, -0.009500f, -0.007098f, 0.000519f, -0.004992f, 0.007357f, -0.008374f, -0.012708f, -0.013888f, 0.000757f, -0.018993f, 0.008607f, 0.009922f, -0.011412f, 0.011567f, -0.013771f, 0.006874f, -0.020287f, 0.002714f, -0.003787f, 0.001469f, -0.005451f, -0.000313f, -0.018884f, -0.003159f, -0.006554f, -0.011941f, -0.003283f, -0.009330f, 0.002880f, -0.008409f, -0.004928f, -0.012066f, 0.005241f, -0.011538f, -0.000938f, 0.018483f, -0.003245f, 0.000547f, 0.005908f, -0.004115f, -0.018874f, -0.021426f, -0.003671f, -0.014981f, 0.000640f, -0.004088f, 0.013867f, 0.001018f, 0.005153f, -0.014113f, - 0.001141f, -0.003184f, -0.002673f, 0.010199f, 0.002419f, -0.001216f, -0.005667f, 0.002772f, 0.003847f, 0.001434f, 0.005264f, -0.000225f, 0.002886f, -0.001611f, -0.000674f, 0.000797f, 0.000820f, 0.001920f, -0.000637f, 0.005928f, -0.001807f, -0.005058f, 0.001953f, -0.000070f, 0.001401f, 0.001957f, 0.001135f, -0.000736f, -0.002730f, 0.001507f, -0.004700f, 0.001768f, 0.008859f, 0.006059f, -0.019271f, -0.000683f, 0.003353f, -0.017951f, -0.020416f, 0.011055f, -0.020043f, 0.003805f, 0.013258f, -0.009759f, -0.023023f, -0.009908f, 0.000487f, 0.015086f, -0.006205f, 0.026665f, -0.001894f, -0.002174f, -0.015481f, -0.011029f, -0.001872f, 0.005334f, 0.001456f, -0.005585f, -0.004687f, -0.001317f, -0.005807f, -0.011524f, 0.009383f, -0.009563f, -0.005868f, 0.009956f, 0.002919f, -0.016241f, -0.017254f, -0.015903f, 0.013631f, -0.014798f, -0.015944f, 0.025849f, -0.016331f, 0.011357f, -0.002325f, 0.006908f, -0.023450f, 0.010608f, 0.001289f, -0.003909f, -0.001206f, -0.004677f, 0.007506f, 0.005428f, 0.021988f, -0.005678f, -0.004244f, 0.010338f, 0.021247f, 0.005732f, 0.004235f, -0.010220f, -0.006725f, -0.017697f, - -0.003795f, -0.000583f, -0.000251f, 0.012590f, -0.004073f, 0.006666f, 0.022244f, -0.003575f, -0.000887f, -0.002747f, -0.000508f, -0.022830f, -0.025994f, 0.001172f, 0.017039f, 0.000063f, -0.034483f, 0.008845f, -0.012118f, 0.005629f, -0.021562f, -0.013531f, -0.003426f, 0.000467f, -0.007950f, 0.003303f, 0.007865f, -0.001130f, -0.001146f, -0.000919f, -0.003764f, 0.003375f, -0.004281f, 0.003358f, 0.000436f, 0.000978f, -0.003750f, -0.002688f, -0.005202f, 0.002207f, 0.000275f, -0.001774f, -0.004996f, -0.001277f, -0.001572f, -0.003338f, -0.003726f, 0.002018f, -0.004223f, -0.001783f, 0.003408f, 0.000852f, -0.002104f, -0.000509f, -0.000008f, -0.005460f, 0.000442f, 0.009593f, -0.001514f, 0.011349f, -0.001641f, -0.004678f, -0.006816f, 0.009648f, 0.005971f, -0.005227f, 0.004411f, 0.009823f, -0.005033f, -0.032981f, -0.014330f, -0.006389f, -0.003622f, 0.014881f, -0.025880f, -0.018927f, 0.015967f, 0.009987f, 0.040103f, 0.011410f, 0.009279f, 0.011135f, 0.005120f, -0.007054f, 0.000839f, -0.007433f, 0.012795f, 0.000703f, 0.012912f, 0.000524f, -0.000340f, -0.017446f, 0.009141f, -0.011788f, 0.009280f, -0.001690f, - 0.009728f, 0.003993f, 0.013049f, -0.020197f, 0.002388f, -0.013963f, 0.016978f, 0.001192f, -0.017035f, 0.022672f, 0.016647f, 0.010856f, -0.010213f, -0.034125f, 0.009864f, -0.003554f, -0.004266f, 0.016975f, -0.001638f, 0.007953f, 0.016224f, -0.003406f, -0.020620f, 0.000014f, 0.009217f, 0.006201f, -0.005557f, -0.002100f, -0.015128f, 0.005811f, 0.002034f, 0.003396f, -0.002302f, 0.002345f, 0.012956f, -0.007886f, 0.005888f, -0.001925f, -0.000539f, 0.023626f, -0.006340f, 0.010972f, 0.007669f, -0.007161f, -0.008291f, 0.003142f, 0.001703f, -0.003715f, 0.001905f, -0.003874f, 0.003700f, -0.003434f, 0.008836f, 0.001043f, 0.008440f, 0.001873f, -0.000304f, 0.010967f, 0.003716f, -0.002937f, 0.002917f, -0.002271f, -0.003448f, 0.001803f, 0.004164f, -0.003808f, 0.002610f, -0.001841f, -0.004286f, 0.000067f, 0.004137f, -0.001702f, -0.004771f, 0.001691f, -0.002306f, -0.006916f, 0.002965f, 0.000291f, -0.003820f, -0.001893f, -0.001364f, -0.003790f, -0.000503f, 0.005598f, 0.007462f, -0.006932f, 0.008596f, -0.009384f, -0.037291f, 0.007687f, 0.009144f, 0.037913f, -0.007881f, -0.006014f, 0.017967f, 0.023587f, - -0.038282f, -0.021797f, 0.021006f, -0.010806f, 0.000761f, 0.008671f, -0.024364f, -0.053415f, -0.020946f, 0.030492f, 0.024236f, 0.020546f, -0.006158f, 0.011559f, -0.006187f, 0.010655f, -0.011091f, 0.003813f, -0.026934f, 0.006709f, -0.009468f, 0.013934f, 0.013507f, 0.000571f, -0.012685f, 0.012700f, 0.007999f, 0.021856f, -0.002194f, -0.013397f, -0.006665f, -0.034163f, -0.017465f, 0.008513f, -0.002237f, -0.022846f, 0.015638f, 0.021470f, -0.030215f, 0.029386f, -0.002742f, -0.003107f, 0.018461f, 0.003902f, 0.017456f, -0.002173f, 0.006275f, -0.006508f, -0.003490f, 0.008927f, 0.035021f, -0.012532f, 0.022313f, -0.001754f, 0.002126f, 0.008497f, 0.019433f, -0.017807f, 0.002122f, 0.028535f, 0.008514f, -0.012908f, 0.007608f, 0.011343f, 0.002655f, 0.022453f, 0.016167f, 0.028195f, -0.002513f, 0.008174f, -0.000231f, 0.001100f, -0.015591f, -0.010717f, -0.012394f, -0.005895f, -0.000009f, -0.002487f, -0.005008f, -0.004325f, 0.008399f, 0.012266f, 0.005577f, -0.006132f, 0.009784f, -0.002723f, -0.001556f, -0.005737f, -0.004702f, 0.006294f, 0.002052f, -0.002110f, 0.000399f, -0.006376f, -0.005515f, -0.006272f, - 0.000150f, -0.003446f, 0.005701f, 0.003630f, -0.002412f, 0.002654f, 0.006672f, -0.003945f, 0.003069f, 0.004026f, -0.003559f, -0.003086f, -0.003791f, -0.000487f, -0.001087f, 0.004279f, -0.001410f, -0.001602f, -0.024208f, -0.006073f, 0.025254f, 0.016089f, 0.019075f, -0.012157f, -0.006061f, -0.001844f, -0.002512f, 0.027037f, 0.003615f, -0.027554f, -0.012202f, -0.008339f, 0.017897f, 0.003592f, 0.003962f, 0.015205f, 0.033161f, -0.048691f, 0.032513f, -0.006312f, -0.005636f, -0.012502f, 0.009773f, 0.010074f, 0.019167f, 0.003071f, 0.018274f, -0.001769f, -0.004700f, 0.005735f, -0.002892f, 0.009371f, 0.016816f, 0.002078f, -0.001113f, 0.022027f, -0.016161f, -0.002933f, 0.005495f, -0.001815f, 0.019472f, -0.022724f, 0.002225f, -0.019434f, 0.003321f, -0.020612f, -0.002776f, 0.000724f, 0.011498f, 0.028118f, -0.016209f, -0.008933f, -0.016808f, -0.000911f, -0.024635f, -0.016030f, -0.016148f, 0.011072f, 0.020395f, 0.000327f, 0.040263f, -0.025369f, 0.035996f, -0.025210f, -0.005764f, 0.011125f, 0.008300f, 0.035596f, 0.020630f, -0.026557f, 0.014054f, -0.011106f, -0.036645f, -0.000876f, -0.023177f, 0.029443f, - 0.044812f, 0.028465f, -0.005401f, -0.015784f, -0.005683f, 0.025025f, -0.003571f, 0.013058f, 0.001661f, 0.005803f, 0.008974f, 0.002822f, 0.003663f, 0.002972f, -0.010753f, 0.007593f, 0.000282f, 0.003211f, -0.004058f, -0.003582f, -0.010197f, -0.005784f, -0.003413f, 0.006363f, -0.003018f, 0.004263f, 0.005532f, -0.002042f, -0.001168f, 0.000135f, 0.006282f, 0.003878f, 0.002428f, 0.011406f, -0.000014f, 0.011915f, -0.010453f, -0.004710f, 0.007841f, 0.007371f, -0.004280f, 0.002498f, -0.003563f, -0.007793f, 0.001082f, -0.024791f, -0.015691f, 0.000016f, 0.031289f, -0.005443f, 0.014124f, 0.029082f, -0.023681f, 0.010906f, -0.038174f, 0.023827f, -0.023236f, -0.011165f, 0.037938f, 0.013137f, 0.040863f, -0.016842f, 0.000754f, -0.017883f, 0.012160f, 0.052201f, 0.013790f, 0.017953f, -0.025687f, -0.004634f, 0.001779f, 0.020317f, 0.018101f, 0.033533f, -0.026477f, -0.009003f, -0.028854f, -0.024531f, 0.002345f, 0.002395f, 0.017878f, -0.016635f, 0.012670f, -0.039493f, 0.025489f, 0.019318f, 0.009507f, -0.006412f, -0.004215f, 0.002928f, 0.012360f, 0.004256f, 0.003845f, 0.000126f, 0.027608f, 0.023549f, - 0.010546f, 0.002405f, -0.020006f, -0.019885f, 0.056444f, 0.002390f, 0.007499f, 0.031492f, 0.014320f, -0.008515f, -0.006066f, 0.020144f, 0.040798f, -0.028879f, -0.011633f, -0.032585f, -0.030040f, 0.039706f, 0.018161f, 0.000712f, -0.007205f, 0.013367f, 0.030499f, 0.019428f, 0.031455f, 0.008939f, -0.013263f, 0.022705f, -0.015464f, -0.040691f, 0.012673f, 0.001767f, 0.001242f, 0.000397f, 0.017729f, 0.029967f, -0.005491f, 0.016000f, 0.018028f, 0.016180f, 0.002441f, 0.003816f, 0.015875f, 0.000483f, -0.004178f, -0.003067f, -0.005865f, 0.015239f, -0.008129f, -0.002212f, 0.004322f, 0.008718f, 0.001784f, -0.001116f, 0.016535f, 0.003608f, -0.002827f, 0.012295f, 0.015845f, 0.007301f, -0.005812f, 0.000195f, -0.002296f, 0.004958f, 0.000711f, 0.000304f, 0.000145f, -0.003275f, 0.005894f, 0.002297f, 0.001922f, 0.005429f, 0.007385f, -0.000966f, -0.006833f, -0.002635f, -0.000371f, 0.009245f, 0.003756f, 0.001548f, -0.001236f, 0.012163f, -0.026045f, -0.019449f, -0.007585f, -0.024239f, 0.027393f, -0.003051f, -0.006906f, -0.023086f, -0.003778f, -0.021496f, -0.053221f, 0.009274f, -0.006486f, -0.016802f, - 0.012131f, -0.028258f, -0.001628f, -0.015444f, -0.042634f, -0.009790f, -0.018440f, -0.020247f, 0.034246f, -0.009152f, -0.012226f, -0.006228f, -0.000681f, -0.008689f, -0.011953f, -0.001967f, 0.009122f, 0.028862f, 0.021894f, -0.000870f, -0.001561f, -0.048544f, 0.003089f, 0.006566f, 0.020010f, -0.011260f, -0.009944f, 0.073504f, -0.012504f, -0.036045f, -0.034810f, 0.030434f, -0.020293f, 0.008722f, -0.041276f, 0.010218f, -0.011471f, -0.022259f, -0.019009f, -0.047212f, 0.007727f, 0.013430f, 0.033666f, 0.009755f, -0.017980f, 0.026298f, 0.003292f, 0.024728f, 0.027780f, 0.079430f, 0.021511f, 0.005409f, -0.030753f, -0.034781f, -0.009137f, 0.003576f, -0.004237f, -0.031497f, 0.014283f, 0.036263f, 0.008605f, 0.025754f, 0.040303f, 0.035802f, -0.015051f, -0.028905f, -0.019457f, 0.002394f, 0.006587f, -0.003668f, -0.030315f, 0.005743f, -0.024609f, 0.007444f, -0.010796f, 0.001469f, -0.013480f, 0.008845f, -0.002043f, 0.005566f, 0.000983f, -0.006016f, -0.013764f, -0.003387f, -0.000098f, 0.008032f, 0.011627f, 0.008803f, 0.013368f, 0.000578f, 0.011482f, 0.019414f, 0.000741f, 0.003533f, 0.011303f, 0.003623f, - -0.009643f, -0.005860f, -0.016616f, -0.005190f, 0.010455f, 0.005548f, 0.001556f, -0.002433f, 0.006749f, 0.003414f, -0.003257f, -0.008104f, -0.014449f, 0.001735f, 0.002660f, -0.002311f, -0.004497f, -0.001324f, -0.004871f, -0.010617f, -0.032075f, -0.013846f, -0.004925f, 0.009964f, -0.011694f, 0.019163f, -0.009872f, -0.013093f, 0.037151f, 0.019355f, 0.042240f, 0.000605f, -0.012209f, -0.016583f, 0.044782f, -0.038352f, -0.014289f, 0.052279f, -0.031452f, 0.010514f, 0.010915f, 0.013624f, 0.003116f, 0.029419f, -0.009106f, 0.026486f, -0.009969f, 0.005860f, 0.006356f, -0.013493f, 0.019659f, -0.029632f, -0.020651f, -0.019196f, -0.008825f, -0.026326f, -0.048653f, -0.008772f, -0.014543f, 0.007841f, -0.012512f, -0.064607f, 0.018024f, 0.040744f, -0.002311f, -0.008548f, 0.063649f, -0.078703f, -0.017019f, 0.044063f, -0.010740f, 0.034220f, -0.025025f, -0.015443f, 0.011874f, -0.075099f, 0.024366f, -0.025498f, 0.037647f, 0.027752f, -0.039952f, 0.079050f, 0.011685f, 0.004308f, -0.004008f, 0.031227f, -0.057070f, 0.023507f, -0.002647f, -0.008938f, 0.015346f, -0.036781f, 0.052292f, 0.047564f, -0.087612f, 0.012733f, - -0.017404f, -0.082137f, -0.014122f, -0.036592f, 0.020295f, 0.005335f, 0.014310f, -0.033074f, 0.051685f, -0.004910f, -0.013810f, 0.024002f, -0.000938f, 0.017096f, -0.003555f, 0.026906f, 0.000702f, 0.013493f, 0.004212f, -0.001020f, -0.002785f, 0.015114f, -0.010762f, -0.011996f, 0.000334f, -0.014118f, 0.021452f, -0.004509f, -0.011016f, 0.001313f, 0.009911f, 0.004891f, 0.010222f, 0.004102f, 0.024887f, 0.006045f, -0.013412f, 0.025895f, -0.013874f, 0.014806f, 0.022235f, -0.006012f, 0.005068f, 0.015714f, -0.010611f, 0.015455f, 0.002504f, 0.048380f, -0.021567f, -0.062246f, -0.062451f, 0.005025f, 0.007829f, -0.027419f, 0.016397f, -0.034713f, 0.011244f, -0.015697f, 0.032251f, 0.041288f, 0.001427f, 0.039949f, 0.036359f, -0.020089f, -0.000425f, -0.025719f, -0.006388f, -0.005979f, 0.014095f, -0.002453f, -0.003890f, -0.004244f, -0.041684f, -0.063092f, -0.025306f, 0.033056f, 0.025587f, -0.027021f, -0.031089f, 0.018300f, 0.018550f, -0.040998f, 0.020829f, -0.027245f, -0.004991f, 0.031888f, 0.044249f, 0.000414f, -0.026055f, 0.017004f, 0.003480f, 0.027620f, 0.004886f, 0.023067f, 0.023819f, -0.006577f, - -0.090404f, 0.010377f, 0.002502f, 0.036753f, -0.013206f, 0.037483f, 0.037161f, -0.024640f, -0.122536f, -0.016318f, 0.005165f, -0.014602f, 0.073926f, 0.077549f, 0.054148f, 0.077061f, -0.019748f, 0.036315f, -0.030193f, 0.051558f, 0.036190f, -0.060429f, 0.076706f, -0.078987f, -0.067245f, -0.063382f, 0.020368f, 0.047968f, 0.039975f, 0.013520f, -0.049462f, 0.045996f, 0.006564f, -0.016281f, -0.021073f, 0.002883f, 0.043451f, -0.033295f, -0.013205f, 0.066281f, 0.012413f, 0.030413f, 0.005995f, 0.003400f, 0.016486f, -0.024784f, 0.013662f, -0.010017f, 0.000719f, 0.006965f, -0.006164f, -0.012751f, -0.008313f, -0.011136f, -0.024883f, 0.005821f, 0.023508f, -0.004443f, 0.024035f, 0.018634f, -0.015013f, -0.011871f, -0.011068f, 0.014914f, 0.009471f, -0.030426f, -0.017508f, 0.001795f, 0.001744f, -0.004367f, 0.004315f, 0.020283f, -0.000239f, 0.016169f, 0.001912f, -0.011631f, -0.048373f, -0.091572f, 0.019519f, 0.034057f, -0.004724f, 0.046735f, 0.018031f, -0.057686f, -0.014396f, 0.012528f, 0.014461f, 0.016156f, -0.011491f, 0.027055f, 0.002497f, -0.017058f, -0.007714f, 0.009777f, 0.038391f, 0.050042f, - 0.037862f, 0.059971f, -0.057249f, -0.015729f, -0.014706f, -0.058551f, -0.013892f, 0.010335f, 0.003194f, 0.006765f, -0.023226f, -0.026278f, 0.030078f, 0.067376f, -0.031591f, 0.034890f, -0.022496f, 0.009243f, -0.020735f, -0.003357f, -0.052162f, -0.018834f, -0.002812f, -0.072285f, -0.042227f, -0.070738f, -0.059747f, 0.039942f, 0.093750f, 0.074906f, 0.002356f, -0.004467f, 0.000413f, -0.016598f, -0.032022f, -0.113245f, -0.037773f, -0.016048f, 0.009417f, 0.005088f, -0.039886f, -0.027753f, 0.014872f, 0.050170f, 0.029944f, 0.016330f, 0.032810f, 0.056243f, 0.022084f, -0.055829f, 0.043048f, -0.032972f, -0.017242f, 0.033460f, 0.074930f, 0.016331f, 0.096031f, -0.022634f, -0.099533f, -0.011303f, -0.032025f, -0.060897f, 0.092337f, 0.026378f, 0.030145f, 0.000034f, -0.008050f, 0.026887f, 0.022172f, 0.001491f, -0.003577f, -0.015790f, -0.003070f, -0.004542f, 0.025352f, 0.030632f, 0.036509f, -0.003925f, -0.001180f, -0.001260f, -0.001156f, 0.024028f, -0.010060f, -0.007784f, -0.013827f, -0.010778f, 0.013709f, -0.002577f, -0.000259f, 0.004230f, 0.008811f, 0.014204f, 0.017510f, -0.002224f, -0.010110f, -0.017816f, - 0.009197f, 0.003571f, 0.008689f, 0.022692f, 0.019929f, -0.009803f, 0.005187f, 0.010330f, -0.017274f, -0.005185f, -0.003795f, -0.016623f, -0.007505f, -0.000550f, 0.015487f, -0.039211f, -0.064156f, 0.039542f, -0.006322f, -0.038790f, 0.018568f, 0.041936f, 0.036298f, -0.074941f, -0.064756f, 0.016028f, -0.030147f, 0.007543f, 0.036478f, -0.020019f, -0.014791f, 0.060371f, 0.016299f, -0.008553f, -0.019364f, -0.017300f, 0.022583f, -0.013741f, -0.002793f, -0.001916f, -0.024751f, -0.009655f, -0.041105f, -0.054695f, 0.019353f, 0.029642f, -0.034586f, 0.025043f, 0.017096f, -0.012049f, -0.024037f, 0.003534f, 0.042990f, 0.024683f, 0.007634f, -0.043305f, -0.048405f, -0.023672f, 0.012910f, 0.053892f, -0.040636f, -0.021597f, -0.018548f, 0.032122f, 0.086940f, 0.022894f, -0.085287f, -0.019077f, -0.010150f, 0.043580f, 0.000858f, 0.022499f, -0.011250f, -0.020354f, -0.018995f, -0.048375f, 0.044814f, 0.047461f, 0.019060f, 0.050188f, -0.015890f, 0.032406f, -0.015213f, -0.036488f, -0.040344f, -0.043148f, 0.007476f, -0.080651f, 0.084287f, -0.004121f, -0.032179f, -0.046693f, -0.038209f, -0.002726f, -0.025061f, -0.007685f, - -0.044426f, -0.027512f, -0.078846f, -0.022053f, -0.051987f, 0.018979f, -0.018535f, 0.015186f, 0.017539f, 0.018780f, -0.013122f, 0.043372f, -0.009990f, 0.031383f, 0.001061f, 0.007453f, -0.002563f, 0.013581f, -0.006829f, -0.017567f, 0.003478f, 0.004879f, 0.016106f, -0.026160f, -0.009196f, 0.006612f, -0.025776f, -0.000033f, 0.009325f, -0.032198f, -0.014142f, 0.007556f, -0.004546f, -0.024690f, -0.038083f, -0.022933f, 0.013794f, -0.007335f, 0.017361f, 0.004100f, 0.000599f, 0.025677f, 0.001716f, 0.022074f, 0.008517f, 0.013722f, 0.051659f, 0.030900f, -0.014607f, 0.007794f, 0.065210f, 0.048916f, 0.018649f, 0.009577f, 0.030646f, 0.027733f, -0.044416f, -0.064016f, 0.021658f, 0.049780f, 0.071325f, 0.000260f, -0.016064f, -0.044747f, -0.026291f, 0.029846f, -0.000940f, -0.038234f, -0.076855f, -0.076929f, 0.016102f, -0.023256f, 0.042983f, -0.088619f, -0.029283f, 0.017007f, 0.012665f, 0.016637f, -0.028053f, 0.012642f, -0.002436f, -0.016820f, -0.003353f, -0.041714f, 0.038237f, 0.047018f, 0.035058f, -0.056100f, -0.029915f, -0.001561f, 0.018911f, 0.027877f, 0.030051f, 0.023900f, -0.006352f, -0.004209f, - -0.007600f, 0.039750f, 0.110886f, 0.069820f, -0.057772f, -0.057031f, -0.036135f, -0.073404f, 0.086194f, 0.045758f, -0.026728f, -0.076142f, -0.072746f, 0.082494f, 0.050880f, 0.010855f, 0.063648f, -0.066345f, -0.007314f, 0.003873f, -0.017033f, 0.006222f, -0.024633f, -0.067121f, 0.016619f, -0.051360f, 0.068379f, 0.064422f, -0.024679f, -0.011722f, 0.000748f, 0.007185f, 0.072776f, 0.074230f, -0.118059f, -0.066083f, -0.037934f, 0.014657f, 0.033178f, 0.031875f, -0.045735f, -0.049280f, -0.057944f, -0.007394f, 0.060108f, 0.001119f, 0.011976f, -0.013935f, -0.064086f, 0.014550f, -0.026859f, -0.033773f, 0.014672f, 0.112052f, 0.037990f, -0.021252f, -0.028734f, -0.027139f, -0.022173f, 0.029245f, 0.035103f, 0.040303f, -0.007247f, 0.025914f, -0.039678f, 0.009351f, 0.014544f, 0.017835f, -0.014242f, 0.007466f, 0.033265f, -0.008886f, -0.009336f, -0.005839f, 0.032848f, 0.021005f, 0.051104f, 0.012555f, -0.018062f, -0.014020f, 0.018996f, 0.062761f, 0.051461f, 0.010384f, -0.037718f, -0.046871f, -0.014861f, -0.011534f, 0.011158f, -0.023191f, 0.043423f, -0.071041f, 0.061891f, 0.091249f, 0.099055f, -0.111717f, - 0.020515f, -0.003550f, -0.009594f, 0.047227f, -0.020168f, -0.033244f, 0.032739f, 0.016600f, 0.067899f, -0.007023f, -0.053752f, 0.001516f, -0.024523f, 0.040001f, -0.061757f, -0.021995f, -0.029014f, -0.041284f, 0.056412f, -0.041381f, -0.005840f, 0.038699f, 0.022574f, -0.013839f, -0.021546f, -0.057957f, 0.007507f, 0.075988f, 0.046416f, -0.003440f, 0.022691f, -0.017349f, 0.062248f, -0.042103f, 0.028786f, -0.023326f, 0.038697f, 0.064015f, -0.014201f, -0.041908f, 0.020661f, -0.057085f, 0.094280f, 0.010832f, -0.049916f, -0.017342f, -0.077918f, 0.009716f, 0.111818f, -0.020586f, -0.065644f, -0.046166f, 0.068598f, 0.020201f, -0.035860f, -0.002093f, 0.017765f, 0.038163f, 0.094258f, -0.077084f, 0.034336f, 0.076882f, -0.011567f, -0.091504f, -0.088189f, -0.052018f, 0.154827f, -0.113527f, 0.038495f, -0.119561f, -0.057172f, 0.248736f, 0.024097f, -0.108939f, -0.104197f, -0.120634f, 0.151883f, 0.019190f, -0.028529f, -0.120897f, -0.028783f, 0.037292f, 0.122964f, -0.044405f, 0.013546f, -0.053503f, 0.018442f, 0.074164f, 0.045684f, -0.067146f, 0.031702f, 0.011802f, 0.029125f, 0.025216f, -0.067527f, 0.001850f, - -0.015844f, -0.026123f, 0.013680f, -0.025363f, -0.049684f, 0.018644f, -0.014456f, 0.064441f, 0.009956f, -0.060331f, -0.067966f, -0.022310f, 0.002211f, 0.051797f, 0.039736f, 0.008602f, -0.031510f, 0.012855f, -0.000950f, -0.026009f, 0.002207f, 0.032671f, 0.029738f, 0.006545f, -0.049883f, 0.011838f, 0.020087f, 0.031148f, 0.028815f, 0.019747f, 0.040543f, -0.104954f, 0.018372f, -0.094300f, 0.041609f, 0.044559f, 0.088024f, 0.038943f, 0.020170f, 0.023008f, -0.027463f, -0.067339f, -0.046846f, -0.044232f, 0.018854f, 0.010938f, -0.011495f, 0.040220f, 0.062071f, -0.027821f, -0.039033f, 0.043089f, 0.007640f, -0.057484f, -0.013243f, 0.025977f, -0.047421f, -0.008416f, 0.010439f, 0.024082f, 0.012829f, 0.034076f, 0.058467f, 0.010282f, -0.037335f, -0.004361f, 0.011238f, -0.029684f, -0.013278f, 0.027295f, -0.020809f, -0.037573f, 0.052149f, -0.012648f, -0.012958f, -0.020826f, -0.020542f, 0.033764f, 0.008587f, 0.007669f, 0.045003f, -0.021589f, -0.034822f, -0.002085f, 0.003321f, -0.014823f, 0.011486f, -0.002519f, -0.012421f, -0.002310f, -0.043903f, 0.009715f, 0.008564f, -0.007535f, 0.023614f, 0.015892f, - 0.008236f, 0.010497f, -0.045342f, 0.053579f, -0.020120f, -0.019491f, 0.016412f, -0.049151f, 0.015952f, -0.036830f, 0.004253f, -0.029155f, 0.009421f, 0.012738f, 0.019843f, 0.001690f, 0.017599f, 0.026494f, -0.010283f, -0.006087f, 0.014722f, -0.000991f, -0.009370f, 0.008009f, 0.001858f, -0.006219f, -0.009427f, -0.008639f, -0.005668f, 0.019092f, -0.018364f, 0.018514f, 0.001264f, 0.004943f, 0.009297f, 0.005440f, 0.013550f, -0.000863f, -0.000382f, -0.008403f, -0.001842f, -0.011542f, 0.023062f, 0.001576f, -0.010356f, -0.017000f, -0.005526f, 0.008818f, -0.016504f, 0.021747f, -0.010629f, -0.027917f, 0.001576f, 0.011646f, -0.001613f, -0.000956f, 0.002851f, -0.013285f, -0.048676f, 0.078932f, -0.003980f, 0.044724f, -0.040398f, 0.005110f, -0.007231f, 0.014189f, 0.012845f, 0.024010f, -0.012111f, 0.017691f, -0.010840f, 0.009785f, -0.001655f, 0.007757f, 0.019120f, -0.002275f, 0.029595f, -0.011772f, 0.022387f, 0.001245f, -0.000838f, -0.008266f, 0.014375f, -0.011292f, 0.012997f, -0.007520f, 0.001011f, -0.006228f, 0.007168f, -0.005074f, 0.016884f, -0.005170f, -0.011639f, 0.026949f, -0.018481f, 0.014119f, - 0.011432f, 0.004197f, 0.013148f, -0.016421f, -0.011325f, 0.012399f, 0.011661f, -0.007194f, -0.001426f, 0.013216f, -0.001056f, -0.018285f, 0.008196f, -0.009266f, 0.009562f, 0.012831f, 0.006149f, 0.004427f, 0.004267f, -0.019692f, 0.009780f, 0.005613f, -0.005832f, 0.007273f, -0.009166f, 0.004553f, -0.004495f, -0.000853f, -0.002358f, 0.006936f, 0.013420f, -0.018373f, 0.016568f, -0.003210f, -0.006356f, 0.009489f, -0.012684f, 0.006116f, 0.009168f, -0.002191f, -0.004515f, 0.006344f, -0.002379f, 0.003739f, -0.001590f, -0.006525f, -0.000877f, 0.007078f, -0.001734f, 0.002753f, -0.001314f, -0.004783f, 0.003251f, 0.002869f, 0.005107f, -0.006951f, 0.005737f, -0.000461f, -0.002744f, 0.006626f, -0.007245f, 0.011557f, 0.006017f, -0.004314f, 0.011918f, -0.000895f, -0.004508f, 0.000475f, -0.004502f, 0.007045f, -0.007561f, 0.008078f, 0.003413f, 0.004347f, 0.002188f, -0.004645f, 0.004056f, 0.001815f, 0.001079f, 0.000731f, 0.000487f, -0.001897f, 0.002287f, -0.004866f, 0.006077f, 0.002354f, -0.005383f, 0.019464f, -0.066607f, -0.207300f, -0.030610f, 0.100458f, 0.051886f, 0.244380f, 0.045320f, 0.052433f, - 0.032932f, -0.066018f, -0.092939f, -0.066246f, -0.119098f, -0.102363f, -0.058146f, -0.023929f, 0.067907f, 0.185560f, 0.147130f, 0.126721f, 0.071948f, -0.057300f, -0.093166f, -0.068578f, -0.128334f, -0.121545f, -0.037406f, -0.017192f, -0.028518f, 0.046910f, 0.073412f, 0.048529f, 0.089567f, 0.069210f, 0.021032f, 0.063647f, 0.012808f, -0.009653f, 0.005680f, -0.038636f, -0.101411f, -0.086207f, -0.073317f, -0.102769f, -0.043178f, 0.029794f, 0.020393f, 0.065519f, 0.074173f, 0.064836f, 0.066517f, 0.067964f, 0.042977f, 0.042046f, 0.004412f, -0.038047f, -0.070942f, -0.048475f, -0.066796f, -0.088201f, -0.043562f, -0.040568f, -0.033093f, 0.012270f, 0.033178f, 0.031761f, 0.062013f, 0.077576f, 0.037418f, 0.054630f, 0.046594f, -0.013183f, 0.005230f, 0.020850f, -0.026028f, -0.023583f, -0.041637f, -0.074690f, -0.074986f, -0.059582f, -0.061693f, -0.012264f, 0.025703f, 0.017088f, 0.048827f, 0.073306f, 0.057778f, 0.053338f, 0.054845f, 0.036530f, 0.011940f, 0.003290f, -0.017182f, -0.032205f, -0.034579f, -0.051463f, -0.065037f, -0.069224f, -0.059592f, -0.053548f, -0.030624f, 0.006716f, 0.033590f, 0.076933f, - 0.101853f, 0.089334f, 0.074072f, 0.062795f, 0.036302f, 0.007450f, -0.031555f, -0.064948f, -0.088493f, -0.092756f, -0.102223f, -0.075459f, -0.031516f, -0.008107f, 0.021317f, 0.060646f, 0.078398f, 0.084539f, 0.087129f, 0.072774f, 0.030853f, -0.002384f, -0.022577f, -0.049700f, -0.064539f, -0.060687f, -0.053857f, -0.038905f, -0.015924f, 0.001854f, 0.021422f, 0.027689f, 0.021350f, 0.023352f, 0.018637f, 0.012638f, 0.009950f, 0.010186f, 0.003415f, 0.003355f, -0.000877f, -0.005242f, -0.006216f, -0.005552f, -0.007994f, -0.009540f, -0.010060f, -0.008812f, -0.007435f, -0.005041f, -0.001467f, 0.001725f, 0.001781f, 0.001125f, 0.000764f} - }, - { - {-0.006625f, 0.005005f, 0.003148f, -0.006536f, -0.001152f, 0.008345f, 0.002475f, 0.002060f, 0.004601f, -0.001089f, 0.001258f, -0.002171f, -0.008729f, -0.003430f, -0.000435f, -0.001926f, 0.002507f, -0.002702f, -0.000849f, -0.007393f, -0.000012f, 0.001275f, -0.005223f, -0.001136f, -0.006593f, -0.002345f, -0.002104f, -0.007977f, -0.003668f, 0.002539f, 0.003470f, 0.008940f, 0.005286f, 0.011421f, -0.001249f, -0.001863f, 0.001663f, -0.003941f, 0.009919f, 0.000584f, 0.004678f, 0.007872f, 0.001367f, -0.003190f, 0.003206f, -0.004209f, -0.005612f, -0.001409f, -0.002438f, -0.003102f, -0.010353f, -0.003349f, 0.000027f, 0.001607f, 0.003060f, 0.000856f, 0.005229f, -0.005872f, 0.004610f, -0.000047f, 0.001126f, 0.003270f, -0.004108f, -0.009145f, -0.003966f, 0.003880f, 0.005679f, 0.004321f, 0.000334f, 0.004406f, 0.003316f, 0.005995f, 0.002985f, 0.002584f, -0.003999f, 0.000301f, -0.000677f, -0.000805f, -0.003412f, -0.004182f, -0.001840f, -0.000973f, -0.000417f, -0.003225f, -0.000009f, 0.000455f, 0.001220f, 0.000294f, 0.002276f, -0.001256f, 0.001014f, -0.002019f, -0.003085f, 0.001506f, -0.000486f, -0.000078f, - 0.002073f, 0.001478f, 0.001810f, 0.000131f, 0.000132f, -0.001763f, 0.001002f, 0.000328f, 0.000574f, -0.000259f, 0.002819f, -0.000614f, 0.000104f, -0.001232f, -0.001056f, -0.001385f, 0.001164f, -0.000935f, -0.002677f, -0.004789f, 0.004554f, -0.007365f, -0.004526f, 0.011863f, -0.001921f, 0.010488f, -0.005364f, 0.001021f, 0.005188f, 0.002310f, 0.000348f, -0.007038f, -0.009985f, -0.010416f, 0.001123f, 0.000271f, -0.002948f, 0.001417f, -0.009221f, 0.018372f, 0.002078f, -0.010214f, 0.002720f, -0.005349f, -0.005828f, 0.005484f, 0.007790f, -0.000112f, 0.001754f, 0.003724f, -0.000563f, 0.000044f, 0.006116f, -0.003348f, -0.001494f, 0.000371f, 0.011137f, -0.000216f, -0.001302f, -0.004204f, -0.006579f, 0.003436f, -0.001623f, -0.006749f, -0.003051f, -0.008126f, 0.001091f, -0.007370f, 0.000167f, -0.005580f, -0.001845f, -0.004907f, -0.010222f, -0.004186f, -0.000642f, 0.009656f, 0.001420f, -0.002787f, 0.005262f, 0.008842f, 0.001334f, -0.012030f, 0.005544f, -0.000027f, 0.002250f, 0.003959f, -0.002798f, 0.007634f, -0.003805f, -0.006806f, -0.007101f, -0.012572f, 0.001176f, -0.004289f, -0.004464f, -0.005662f, - -0.005937f, -0.000339f, -0.006476f, 0.002056f, -0.001012f, -0.003674f, -0.001363f, -0.004151f, 0.000088f, -0.000179f, -0.004763f, -0.001977f, 0.001931f, -0.000690f, 0.000308f, 0.001072f, 0.000447f, 0.000819f, 0.000605f, -0.001292f, -0.004265f, -0.000766f, -0.001601f, 0.001204f, -0.000546f, 0.000505f, -0.000817f, 0.000037f, -0.000066f, -0.000923f, -0.002678f, -0.002198f, -0.000364f, -0.000969f, -0.001033f, -0.000862f, -0.002007f, -0.000741f, -0.009224f, 0.015442f, -0.003867f, -0.014003f, 0.001085f, 0.004803f, 0.000458f, 0.004428f, 0.003616f, -0.011081f, 0.003981f, -0.002564f, -0.000431f, 0.000475f, -0.002010f, 0.008500f, -0.002598f, -0.005479f, -0.000461f, 0.006799f, 0.004285f, 0.002542f, 0.004004f, 0.016447f, 0.004356f, -0.005606f, 0.007438f, -0.006849f, 0.002300f, -0.005521f, 0.015459f, 0.002435f, -0.005004f, -0.002998f, -0.005017f, -0.001719f, 0.010262f, -0.008149f, -0.006874f, -0.002074f, 0.008502f, 0.004890f, -0.007829f, 0.002244f, 0.001786f, -0.004568f, 0.000242f, -0.016790f, 0.005610f, -0.003851f, -0.003198f, -0.010638f, 0.016172f, 0.000924f, -0.008417f, -0.006606f, -0.008261f, 0.000650f, - -0.001778f, 0.000915f, -0.000045f, -0.009684f, 0.012802f, -0.007220f, -0.006627f, 0.005075f, 0.001372f, 0.005040f, -0.003590f, -0.000748f, -0.007875f, 0.000721f, 0.001722f, -0.010001f, -0.007466f, 0.000739f, -0.006970f, 0.002522f, -0.006234f, -0.001760f, -0.001758f, 0.004457f, -0.008052f, -0.008367f, -0.001711f, -0.001327f, -0.001998f, -0.000539f, -0.003608f, -0.000915f, -0.002626f, -0.002166f, -0.001702f, -0.002610f, -0.003156f, -0.000286f, -0.004238f, 0.001125f, -0.002812f, -0.000011f, 0.000270f, -0.001020f, -0.001596f, -0.000220f, -0.001124f, 0.002187f, -0.000333f, -0.001848f, -0.000109f, -0.003266f, -0.000640f, -0.002003f, 0.000161f, 0.000439f, -0.002240f, 0.013401f, 0.000416f, 0.002899f, -0.011085f, 0.003409f, 0.006369f, 0.004649f, -0.000464f, -0.005559f, 0.014412f, 0.002505f, -0.002871f, 0.006912f, 0.005648f, -0.006737f, 0.008831f, -0.005937f, 0.014563f, 0.002065f, 0.012998f, -0.001418f, 0.002294f, -0.005097f, -0.014715f, 0.001593f, 0.000302f, 0.000505f, -0.002543f, 0.003029f, 0.007771f, -0.001950f, -0.007557f, -0.005003f, -0.010749f, -0.002973f, -0.005293f, -0.005686f, 0.000991f, 0.003705f, - 0.005839f, -0.006912f, 0.004824f, -0.004626f, -0.005748f, -0.000776f, 0.004936f, 0.000925f, 0.001225f, -0.010749f, -0.010370f, -0.001966f, -0.003075f, -0.007859f, 0.017129f, 0.007951f, -0.001082f, 0.003303f, 0.006885f, -0.017279f, -0.008741f, 0.011591f, -0.006460f, 0.010872f, 0.002468f, -0.002263f, -0.011595f, -0.008557f, 0.013791f, 0.007308f, 0.013040f, -0.013693f, -0.000949f, -0.009496f, -0.000757f, 0.003379f, -0.005062f, 0.001615f, 0.001016f, -0.008524f, 0.007661f, 0.000860f, 0.001161f, -0.001388f, -0.015185f, 0.001652f, -0.003655f, -0.004777f, -0.004752f, -0.000917f, 0.002642f, -0.002444f, 0.001178f, -0.005339f, -0.001131f, -0.002444f, 0.003415f, -0.000655f, -0.000411f, -0.001730f, 0.000123f, -0.001808f, 0.001167f, -0.003012f, -0.001445f, 0.001001f, -0.000859f, -0.000184f, -0.000190f, -0.000019f, 0.001404f, 0.000880f, -0.000251f, -0.002111f, -0.002200f, -0.002289f, 0.001979f, 0.000908f, 0.002885f, 0.001521f, 0.001170f, -0.022686f, 0.001085f, -0.003019f, 0.005994f, -0.013777f, 0.004251f, -0.004727f, 0.022696f, -0.006175f, -0.011938f, -0.004451f, -0.010033f, 0.002967f, 0.008353f, -0.002827f, - 0.015830f, 0.001507f, -0.004822f, 0.003717f, 0.001828f, 0.004026f, -0.005766f, -0.001125f, 0.005821f, 0.009230f, 0.003591f, -0.001999f, 0.004379f, -0.008491f, -0.002721f, 0.011639f, 0.008304f, 0.013689f, 0.009697f, -0.000367f, -0.007145f, -0.014879f, 0.010065f, -0.001749f, -0.010863f, 0.005445f, -0.002951f, -0.016651f, 0.000322f, -0.013906f, -0.001202f, 0.012307f, -0.002223f, -0.009398f, -0.004373f, 0.011747f, -0.010412f, -0.017002f, 0.017008f, -0.003366f, -0.004268f, 0.003872f, 0.002066f, 0.001887f, 0.004010f, 0.003984f, 0.002173f, -0.012568f, -0.004826f, 0.009460f, -0.001401f, -0.003827f, 0.002801f, 0.016339f, -0.008460f, -0.009291f, -0.004277f, 0.006607f, 0.003330f, -0.014998f, -0.006702f, -0.005252f, -0.006577f, 0.004741f, -0.000977f, -0.001266f, -0.005618f, -0.004519f, -0.011849f, -0.006907f, 0.002742f, 0.000247f, 0.001778f, -0.000616f, 0.006875f, 0.007067f, 0.001172f, 0.002491f, -0.003708f, 0.000688f, 0.000260f, 0.002804f, -0.004544f, -0.002182f, 0.000473f, -0.000036f, 0.002001f, -0.000228f, -0.002613f, 0.002449f, 0.000886f, -0.005088f, -0.001044f, 0.001290f, 0.000813f, 0.000702f, - -0.001315f, 0.000515f, -0.002481f, -0.002519f, -0.002128f, 0.001111f, -0.001127f, -0.001359f, -0.000428f, -0.019841f, -0.000474f, 0.005242f, 0.018999f, 0.019638f, -0.006399f, 0.009755f, -0.012721f, 0.004117f, 0.008317f, 0.012598f, -0.003745f, 0.018921f, -0.003627f, 0.016042f, -0.008855f, 0.013434f, -0.006839f, -0.022470f, -0.005156f, 0.005553f, -0.007804f, 0.008610f, -0.004921f, -0.005433f, 0.002359f, -0.024624f, -0.008016f, -0.000554f, -0.004344f, -0.001525f, -0.011952f, -0.004150f, -0.004313f, 0.003862f, 0.024980f, 0.014395f, -0.014648f, 0.007921f, 0.019959f, 0.004923f, -0.007109f, 0.004949f, -0.005368f, -0.006012f, 0.014344f, 0.009992f, -0.010112f, -0.001393f, 0.010202f, 0.021450f, -0.007000f, 0.011650f, 0.031828f, 0.013689f, -0.014787f, 0.005903f, 0.003628f, -0.017817f, 0.002581f, -0.014729f, 0.006483f, -0.016046f, -0.003854f, 0.000630f, 0.007491f, -0.010482f, -0.002972f, -0.005211f, -0.009579f, 0.012248f, 0.010467f, -0.000605f, -0.007044f, 0.001875f, 0.001795f, 0.001715f, 0.002886f, 0.009099f, 0.001716f, -0.012149f, -0.000286f, 0.014720f, 0.000397f, 0.003294f, 0.002907f, 0.004454f, - -0.004659f, -0.002154f, -0.007449f, -0.003153f, -0.006859f, -0.000573f, 0.003995f, -0.000891f, -0.003906f, 0.002156f, -0.000832f, 0.000848f, -0.002138f, -0.001442f, 0.002696f, -0.000206f, 0.006517f, 0.001608f, -0.001442f, 0.003468f, -0.000121f, -0.001540f, -0.002513f, -0.003339f, 0.001425f, -0.001763f, -0.000934f, 0.001722f, -0.000201f, 0.003081f, 0.000150f, -0.004011f, 0.008729f, -0.004275f, -0.019986f, 0.004660f, -0.016048f, 0.002637f, -0.005292f, 0.020841f, -0.010522f, 0.002975f, 0.005510f, 0.002103f, 0.007588f, -0.003018f, 0.022806f, 0.001825f, -0.014728f, -0.002707f, -0.010851f, -0.001705f, -0.003507f, -0.010153f, -0.012764f, -0.003245f, -0.008208f, -0.003854f, 0.014602f, 0.005458f, -0.012282f, 0.004847f, -0.014675f, -0.002746f, 0.010734f, -0.020033f, -0.017690f, 0.010128f, 0.009505f, 0.004953f, -0.000575f, -0.012150f, 0.004857f, -0.005971f, -0.011491f, -0.005281f, 0.000646f, 0.003686f, 0.019085f, -0.007477f, -0.002138f, 0.001050f, 0.008908f, 0.004723f, -0.006588f, -0.008483f, -0.015271f, -0.004624f, -0.003374f, -0.008368f, -0.009793f, 0.006290f, 0.012750f, -0.000020f, -0.008132f, 0.014147f, - 0.002722f, -0.006920f, 0.001743f, -0.002021f, -0.001823f, -0.004815f, -0.002741f, 0.009201f, -0.007274f, -0.010873f, -0.006287f, 0.005759f, -0.008437f, 0.014954f, 0.006685f, -0.002418f, -0.006113f, -0.006892f, 0.004244f, 0.009309f, 0.018982f, -0.005436f, 0.009718f, 0.000373f, -0.000030f, 0.001090f, 0.003053f, -0.003444f, 0.000093f, 0.002398f, 0.004000f, -0.002451f, 0.002801f, -0.002096f, 0.009204f, 0.003568f, 0.006923f, 0.000141f, 0.004707f, -0.000191f, 0.004180f, -0.000768f, -0.000372f, 0.004926f, 0.001850f, 0.000655f, 0.002587f, 0.000637f, 0.004818f, -0.003499f, 0.001137f, 0.003354f, 0.004430f, 0.003879f, -0.001458f, -0.004816f, -0.000066f, 0.003144f, 0.000681f, 0.000632f, 0.003983f, 0.010361f, 0.019768f, -0.014744f, -0.000515f, 0.013461f, -0.006441f, -0.009663f, 0.012380f, -0.019533f, -0.001192f, 0.003609f, -0.002539f, -0.007288f, -0.008596f, -0.004138f, 0.003383f, -0.001052f, 0.009354f, 0.004708f, -0.003123f, -0.007446f, -0.005428f, 0.015387f, 0.000607f, -0.018820f, 0.008778f, -0.011907f, -0.011662f, 0.007146f, 0.013559f, 0.013812f, 0.010493f, -0.000339f, 0.007094f, 0.004817f, - 0.006698f, -0.006174f, -0.000304f, -0.005568f, -0.013540f, 0.005690f, -0.003490f, -0.000748f, -0.002980f, 0.001312f, -0.002231f, 0.014959f, 0.027851f, 0.004580f, -0.004819f, -0.000088f, -0.019879f, 0.019294f, -0.013551f, -0.008807f, -0.013040f, -0.015996f, 0.027075f, 0.001474f, -0.015032f, -0.005455f, 0.018686f, 0.009623f, -0.014144f, -0.010586f, 0.021418f, 0.001723f, 0.002223f, 0.027672f, -0.013207f, 0.007597f, -0.009915f, -0.027475f, 0.012923f, 0.013220f, 0.002224f, -0.015865f, -0.002210f, -0.003451f, 0.003300f, -0.006889f, 0.010075f, 0.006187f, -0.021702f, 0.009215f, 0.010428f, 0.013258f, 0.002316f, -0.011623f, 0.019447f, 0.003286f, -0.001700f, -0.001504f, -0.006485f, -0.006863f, -0.002432f, 0.001215f, 0.005894f, -0.000029f, 0.000510f, -0.000641f, -0.005190f, 0.002180f, 0.002387f, 0.001018f, -0.002361f, -0.001460f, 0.003961f, 0.001382f, 0.004507f, -0.002942f, 0.001093f, -0.006833f, 0.000812f, 0.006399f, -0.008572f, 0.001166f, -0.006706f, 0.007826f, -0.003229f, -0.000215f, -0.005210f, -0.000068f, 0.004593f, -0.000582f, 0.006248f, -0.000022f, 0.009333f, 0.011936f, 0.022155f, 0.020287f, - -0.000845f, 0.017293f, 0.007751f, 0.017636f, 0.017035f, -0.028407f, 0.010245f, -0.009210f, -0.012311f, -0.008983f, -0.002717f, -0.018123f, -0.003828f, 0.004401f, -0.015509f, -0.031785f, 0.007227f, -0.002258f, -0.028650f, -0.021023f, -0.018781f, -0.010494f, 0.000984f, -0.005395f, 0.006760f, -0.003796f, 0.011340f, 0.022171f, -0.012740f, 0.007530f, -0.005030f, -0.010183f, -0.007433f, 0.001338f, -0.002212f, -0.000934f, 0.016496f, -0.000699f, 0.016630f, 0.021578f, 0.006418f, 0.009282f, 0.014262f, -0.001887f, 0.002862f, -0.021336f, 0.019901f, -0.017404f, -0.006151f, -0.005556f, 0.001737f, -0.004822f, -0.016622f, -0.014637f, -0.032086f, 0.029033f, -0.032776f, -0.031758f, 0.005340f, 0.030448f, 0.010781f, -0.003950f, -0.007689f, 0.013996f, -0.015401f, 0.017510f, -0.005144f, 0.002216f, 0.001780f, -0.011644f, 0.012184f, -0.013754f, -0.011251f, -0.001333f, 0.004373f, -0.013140f, -0.002097f, 0.007033f, -0.001084f, -0.003618f, 0.009358f, -0.006234f, -0.011828f, -0.002739f, 0.005907f, -0.007840f, -0.004612f, -0.005377f, -0.001238f, 0.003524f, -0.002578f, 0.001036f, -0.002005f, -0.004317f, 0.001172f, -0.002790f, - 0.002681f, -0.002915f, 0.003904f, -0.001231f, 0.007328f, -0.001100f, 0.002803f, 0.003983f, -0.002613f, -0.005036f, -0.000580f, -0.001270f, -0.000348f, -0.001590f, 0.003375f, 0.000127f, 0.004381f, -0.004026f, 0.001510f, -0.008577f, 0.000323f, 0.000312f, -0.003188f, 0.002529f, 0.013295f, 0.017320f, 0.017313f, 0.018846f, 0.044421f, 0.019958f, 0.025391f, -0.012536f, 0.041118f, -0.023465f, 0.001137f, 0.009075f, -0.000179f, -0.015452f, 0.005142f, -0.004261f, -0.035039f, 0.013296f, -0.008819f, 0.003779f, -0.003274f, -0.011597f, 0.000032f, 0.010440f, -0.014143f, -0.007331f, -0.002196f, 0.008260f, -0.021368f, 0.013565f, 0.005126f, -0.019578f, -0.001519f, 0.008010f, -0.017744f, 0.006672f, -0.021282f, 0.009849f, -0.001813f, -0.006870f, -0.000813f, -0.013892f, 0.017906f, 0.021163f, -0.020142f, -0.011499f, 0.009159f, -0.007159f, 0.005642f, 0.005122f, 0.001372f, 0.000700f, 0.024413f, -0.006132f, -0.016290f, 0.015129f, -0.000605f, -0.012815f, -0.010765f, -0.020249f, 0.003926f, 0.005552f, 0.010153f, 0.009755f, -0.009351f, -0.015727f, 0.008831f, 0.004428f, 0.030511f, 0.003236f, -0.003764f, 0.000792f, - 0.002055f, -0.008978f, -0.004009f, -0.011261f, 0.012508f, 0.007241f, 0.008152f, -0.002372f, -0.019477f, -0.017751f, -0.005809f, -0.001560f, -0.006986f, -0.012296f, 0.003482f, -0.005374f, 0.008063f, 0.001434f, -0.001288f, 0.005023f, 0.005204f, 0.008279f, 0.007757f, 0.006256f, -0.000035f, -0.001844f, 0.002219f, 0.005569f, 0.004305f, -0.002464f, -0.002333f, -0.001550f, 0.001431f, -0.000004f, -0.001520f, 0.000110f, -0.009582f, 0.001191f, 0.006280f, 0.004817f, -0.007464f, -0.005367f, 0.010730f, 0.005750f, 0.010641f, 0.004213f, -0.007757f, 0.007394f, -0.001887f, -0.005863f, 0.001156f, -0.008373f, -0.004597f, -0.002125f, 0.003222f, -0.001671f, -0.023995f, -0.026966f, 0.044971f, 0.031356f, 0.040202f, 0.002558f, -0.025817f, 0.009084f, 0.020976f, 0.014931f, -0.006595f, -0.016339f, -0.004816f, -0.006013f, -0.007935f, -0.014069f, -0.005652f, -0.011819f, 0.029976f, 0.004782f, 0.004940f, 0.000216f, 0.001736f, 0.003173f, -0.011098f, 0.019836f, 0.011195f, -0.001196f, 0.007205f, -0.002840f, 0.020417f, 0.003753f, -0.001822f, -0.033438f, -0.002486f, 0.002087f, 0.003172f, -0.006273f, 0.004168f, -0.015846f, - 0.027119f, 0.021965f, 0.021199f, 0.018501f, -0.014571f, -0.020170f, 0.015454f, 0.004754f, 0.007550f, -0.001339f, -0.023479f, -0.016986f, 0.001343f, -0.013245f, 0.000144f, -0.011126f, -0.004848f, 0.014066f, 0.004468f, -0.010061f, 0.003586f, -0.025955f, 0.000783f, -0.043995f, -0.022363f, -0.041567f, 0.035871f, 0.032330f, 0.034508f, 0.041825f, 0.020249f, -0.006932f, -0.018568f, -0.005640f, -0.001038f, 0.005996f, 0.033131f, -0.010956f, -0.025192f, 0.019200f, -0.016037f, 0.008357f, -0.003681f, -0.003633f, 0.007762f, -0.007476f, -0.013631f, -0.003864f, -0.016781f, -0.003569f, -0.015090f, -0.003477f, 0.002103f, -0.001342f, -0.001829f, -0.004109f, -0.005273f, -0.010427f, -0.000169f, 0.005453f, 0.000842f, -0.005259f, 0.001822f, 0.009085f, -0.001238f, 0.006069f, 0.003323f, 0.003586f, 0.002544f, -0.012055f, 0.010531f, -0.004671f, -0.003835f, 0.007059f, 0.002427f, 0.007806f, 0.000786f, -0.010040f, -0.001876f, 0.000199f, 0.001731f, -0.006153f, -0.015958f, -0.021473f, 0.018929f, 0.024562f, -0.012068f, 0.022805f, 0.003214f, -0.009688f, 0.009170f, -0.033061f, -0.010260f, 0.009321f, -0.010536f, -0.020276f, - -0.038213f, 0.018770f, -0.016422f, 0.004417f, 0.024749f, 0.005938f, 0.028858f, 0.022076f, 0.012549f, 0.004736f, -0.017046f, -0.005005f, -0.008925f, 0.001559f, 0.016071f, 0.008376f, 0.003316f, 0.013720f, 0.039237f, -0.002051f, -0.033375f, -0.014657f, 0.005391f, 0.008010f, -0.001913f, 0.000826f, 0.003158f, -0.014238f, 0.000875f, -0.031414f, 0.007064f, -0.032863f, -0.011984f, -0.025448f, 0.012528f, -0.012696f, -0.020881f, 0.031860f, 0.008935f, 0.002596f, -0.014341f, -0.019116f, 0.004772f, 0.007574f, 0.002807f, 0.010381f, -0.016292f, 0.035818f, -0.043493f, 0.011313f, -0.018129f, -0.026401f, -0.014791f, 0.022796f, 0.006870f, -0.024750f, 0.017484f, -0.019710f, 0.048310f, -0.004504f, -0.005303f, -0.023501f, 0.002813f, -0.031351f, -0.016819f, 0.041823f, -0.016836f, -0.018995f, -0.012403f, 0.012505f, 0.001572f, 0.017727f, 0.008837f, 0.009267f, 0.012922f, 0.007022f, -0.001185f, 0.001334f, 0.006164f, 0.002640f, -0.003416f, 0.010384f, -0.003261f, -0.003619f, -0.007825f, -0.007029f, -0.003157f, 0.003832f, -0.006160f, 0.000454f, 0.003014f, -0.002543f, 0.002629f, 0.000486f, 0.010249f, 0.005370f, - -0.000012f, -0.002091f, 0.000019f, -0.000746f, 0.006125f, -0.005445f, 0.005557f, -0.001537f, 0.002461f, 0.008585f, -0.002717f, 0.000449f, -0.001183f, -0.004321f, 0.010517f, -0.001481f, 0.045440f, 0.046759f, 0.044104f, 0.009411f, -0.011828f, -0.007378f, -0.028415f, 0.023073f, 0.000678f, 0.013539f, -0.008503f, 0.004352f, -0.010391f, -0.007994f, -0.016431f, 0.008877f, -0.017109f, 0.028095f, -0.073325f, -0.021349f, 0.000525f, -0.022186f, 0.015759f, -0.022804f, 0.004690f, -0.008811f, 0.023060f, 0.004105f, 0.022198f, 0.001611f, -0.005241f, -0.000354f, 0.008125f, -0.025686f, -0.018457f, -0.019980f, -0.002830f, 0.025006f, -0.049321f, 0.017116f, 0.042889f, 0.005276f, -0.031559f, -0.001240f, -0.026581f, -0.025476f, 0.017641f, -0.003335f, -0.021716f, 0.012073f, 0.001802f, -0.008092f, -0.012272f, 0.007023f, 0.017827f, 0.010835f, -0.025224f, -0.018411f, 0.014421f, 0.021745f, -0.017761f, -0.023463f, 0.011560f, 0.024363f, -0.029632f, -0.001024f, -0.026456f, -0.036302f, 0.043178f, -0.007188f, 0.006665f, -0.008103f, 0.026759f, -0.006314f, 0.006546f, -0.014388f, 0.023275f, 0.012915f, 0.021414f, 0.024761f, - -0.024685f, -0.027244f, -0.011105f, -0.005222f, -0.016363f, -0.040991f, 0.004512f, 0.002229f, -0.000027f, -0.003021f, -0.006659f, -0.005516f, 0.011772f, -0.001037f, -0.005087f, 0.010874f, -0.011996f, -0.006382f, 0.004450f, 0.021354f, -0.006486f, -0.006595f, 0.001043f, -0.002701f, 0.007377f, -0.002586f, -0.001192f, -0.003761f, -0.006005f, -0.015001f, -0.021527f, 0.003807f, -0.001526f, -0.016400f, -0.008203f, 0.004315f, -0.005716f, -0.018580f, -0.010344f, -0.001249f, -0.003236f, 0.001482f, 0.005279f, 0.002216f, -0.000042f, 0.015230f, 0.005257f, 0.023972f, -0.008911f, -0.001189f, -0.035562f, -0.016820f, -0.008538f, -0.030226f, -0.043212f, -0.008450f, -0.014753f, 0.039805f, 0.011629f, 0.059413f, 0.010349f, -0.017663f, 0.007442f, 0.010899f, -0.049409f, 0.002341f, 0.042499f, 0.026833f, -0.028981f, 0.003451f, 0.021013f, -0.039770f, -0.006766f, -0.020137f, 0.016248f, -0.015857f, 0.010557f, 0.002213f, -0.008216f, 0.001679f, -0.000543f, -0.013098f, 0.012957f, -0.027167f, -0.010872f, -0.011929f, -0.033973f, -0.007505f, -0.004856f, 0.000069f, 0.001977f, -0.009611f, -0.010998f, 0.060693f, 0.017967f, -0.024231f, - -0.043726f, -0.016178f, 0.003960f, 0.043727f, -0.011150f, -0.006243f, -0.025148f, -0.007086f, -0.017827f, 0.035752f, -0.029916f, 0.031836f, 0.040555f, -0.041947f, 0.026916f, 0.009818f, -0.018035f, -0.016186f, 0.009581f, 0.018651f, -0.090871f, -0.012529f, -0.000626f, -0.012981f, 0.023357f, -0.012809f, -0.068048f, -0.026896f, -0.020173f, -0.031155f, -0.030257f, 0.004620f, 0.005339f, -0.017951f, -0.015860f, -0.028817f, 0.002408f, -0.011120f, 0.001906f, -0.012925f, -0.014794f, -0.016900f, 0.003232f, -0.004001f, 0.009334f, -0.014747f, 0.006336f, -0.002476f, -0.014845f, -0.030642f, -0.008004f, -0.002534f, 0.009147f, -0.005002f, -0.040273f, 0.007339f, 0.018739f, 0.006886f, -0.001420f, -0.014772f, 0.013622f, -0.002836f, -0.005110f, -0.024874f, -0.004629f, -0.009164f, 0.019355f, -0.003927f, 0.002668f, -0.000789f, 0.003757f, 0.011702f, -0.009731f, -0.000184f, 0.000134f, -0.005351f, 0.000545f, 0.004465f, -0.028984f, -0.025434f, -0.009866f, -0.020777f, -0.014344f, -0.006518f, -0.013090f, -0.016828f, -0.013098f, 0.009969f, 0.059834f, -0.002086f, -0.070317f, -0.039497f, -0.043602f, -0.008429f, -0.024215f, -0.001323f, - -0.035800f, 0.058036f, 0.034487f, -0.006580f, 0.045707f, 0.001017f, 0.049307f, 0.011523f, -0.028735f, -0.039300f, -0.024708f, -0.031787f, -0.014189f, 0.007304f, 0.021209f, -0.007349f, 0.006861f, -0.026356f, 0.004323f, -0.037858f, -0.003494f, -0.002571f, 0.012766f, -0.014504f, 0.059905f, 0.007294f, -0.001642f, 0.039344f, -0.015530f, -0.028711f, -0.016626f, 0.023911f, -0.001917f, -0.016534f, 0.006643f, -0.000737f, 0.051007f, 0.012071f, 0.000133f, -0.020349f, -0.030821f, -0.078381f, 0.005040f, -0.062396f, 0.031333f, 0.105474f, -0.075772f, -0.016812f, 0.017215f, -0.013673f, -0.013302f, -0.021867f, 0.017801f, -0.022445f, -0.073249f, -0.020145f, -0.073027f, -0.015966f, -0.002048f, -0.046519f, -0.006387f, -0.066658f, 0.028735f, -0.007325f, -0.041701f, 0.102096f, 0.008122f, 0.041197f, 0.035303f, 0.055985f, -0.034676f, -0.003083f, -0.020834f, -0.008356f, -0.014034f, 0.026172f, 0.017305f, 0.023423f, -0.049768f, -0.010849f, -0.026974f, -0.035944f, -0.029202f, -0.018873f, -0.003707f, 0.018708f, 0.016411f, 0.010353f, 0.014538f, -0.004843f, 0.004880f, 0.027093f, -0.004901f, 0.026786f, 0.008441f, -0.024910f, - -0.006286f, 0.007686f, -0.010090f, -0.005001f, 0.032848f, -0.000406f, -0.009551f, 0.035493f, -0.016522f, -0.003503f, -0.029624f, -0.008273f, -0.020548f, 0.014765f, -0.015607f, -0.008133f, -0.005681f, 0.005010f, -0.006684f, 0.013188f, 0.000782f, 0.013654f, 0.004562f, -0.006590f, -0.022185f, -0.123700f, -0.013205f, -0.031878f, -0.034851f, 0.044582f, 0.035307f, -0.043585f, -0.034505f, 0.084367f, -0.009928f, 0.027130f, 0.004047f, -0.004788f, -0.010091f, -0.009574f, -0.027832f, -0.000671f, 0.009469f, 0.014804f, 0.009934f, 0.029915f, -0.024102f, -0.000953f, -0.023493f, -0.014196f, 0.009089f, 0.042591f, 0.027329f, 0.037560f, 0.033749f, -0.008032f, 0.012031f, 0.020025f, -0.000233f, -0.035234f, -0.006621f, 0.047849f, -0.008911f, -0.069341f, -0.030643f, 0.007139f, -0.058680f, -0.025692f, -0.060124f, -0.041571f, -0.037671f, 0.054869f, 0.037575f, -0.012476f, 0.037614f, 0.014099f, 0.053167f, 0.035415f, 0.016934f, -0.094472f, -0.021227f, 0.003732f, -0.082842f, -0.060929f, -0.023443f, -0.016582f, -0.096980f, 0.020331f, 0.053270f, 0.071200f, 0.085714f, -0.029448f, -0.056241f, -0.001162f, -0.056736f, -0.042586f, - -0.078697f, -0.087831f, -0.061860f, -0.052510f, 0.057605f, 0.001944f, 0.011400f, -0.053413f, -0.055595f, -0.050259f, -0.005187f, 0.075193f, 0.095974f, 0.001908f, -0.035544f, -0.027808f, -0.039045f, -0.101709f, -0.045384f, -0.045715f, -0.012693f, -0.004629f, -0.023189f, 0.025654f, -0.000400f, -0.008709f, -0.036300f, -0.047801f, -0.024865f, -0.027357f, -0.041768f, -0.010123f, -0.010895f, -0.005004f, -0.011478f, -0.019949f, 0.024730f, 0.014487f, -0.002976f, -0.023875f, 0.016186f, 0.026344f, 0.001705f, -0.024490f, -0.012679f, 0.018115f, 0.004874f, -0.006274f, -0.022851f, 0.018084f, -0.004890f, -0.008416f, 0.001872f, 0.013790f, 0.003494f, -0.005375f, 0.002003f, 0.010449f, -0.037910f, -0.092075f, 0.036341f, 0.004769f, -0.062487f, 0.059005f, 0.029521f, 0.018401f, -0.013316f, -0.055865f, -0.013700f, 0.001994f, 0.055188f, 0.073069f, 0.004761f, 0.019995f, 0.005236f, 0.002598f, -0.002879f, 0.010155f, -0.029872f, 0.102728f, 0.025189f, -0.033135f, -0.032846f, -0.014594f, 0.005146f, 0.050343f, -0.023585f, -0.007324f, 0.000678f, 0.025598f, -0.023636f, 0.013600f, 0.002420f, -0.005412f, -0.083851f, -0.026273f, - 0.027884f, 0.044056f, 0.016353f, -0.009230f, -0.023594f, -0.055645f, -0.005271f, 0.009316f, -0.012422f, 0.001149f, -0.013698f, -0.035832f, 0.037159f, -0.008212f, 0.013892f, -0.038347f, -0.007124f, 0.098606f, 0.008373f, -0.010798f, 0.012498f, 0.012968f, 0.010304f, 0.049692f, -0.017136f, -0.022331f, 0.038048f, -0.004100f, 0.023019f, 0.013776f, 0.033339f, -0.012376f, -0.035474f, 0.018594f, -0.015741f, 0.002981f, 0.140347f, 0.134057f, 0.061409f, -0.011877f, -0.005645f, 0.017009f, 0.064325f, 0.029220f, -0.017481f, -0.002037f, -0.007013f, -0.035525f, -0.036473f, 0.020787f, 0.011767f, 0.005425f, 0.032886f, -0.004158f, -0.016182f, 0.018768f, 0.009351f, 0.027677f, -0.038740f, -0.032711f, -0.039359f, 0.006114f, -0.016842f, 0.002328f, -0.006652f, 0.014809f, 0.018056f, 0.034318f, 0.021484f, -0.036365f, -0.025213f, 0.013103f, -0.020736f, -0.012745f, 0.004482f, 0.011869f, -0.013344f, -0.035803f, -0.002261f, 0.001255f, -0.001318f, 0.015908f, 0.006049f, -0.028911f, 0.010772f, 0.046770f, 0.055652f, 0.040065f, 0.047817f, 0.032836f, 0.043362f, -0.011170f, -0.000521f, 0.035734f, 0.066211f, 0.007157f, - -0.074069f, -0.020964f, 0.013922f, 0.008725f, -0.019332f, 0.052369f, 0.024966f, 0.019147f, -0.020070f, 0.061618f, -0.005910f, -0.000427f, -0.019203f, 0.031930f, 0.020385f, -0.050716f, -0.073245f, -0.021892f, 0.009821f, 0.002129f, -0.015723f, -0.067360f, -0.008659f, 0.021365f, 0.003163f, -0.023990f, -0.011177f, -0.021650f, -0.027261f, 0.013374f, 0.016494f, -0.043937f, -0.049103f, -0.018348f, -0.060404f, 0.013801f, 0.049004f, -0.046885f, 0.047027f, -0.025173f, -0.029229f, -0.052407f, -0.072193f, -0.081007f, -0.076721f, -0.040566f, -0.002147f, 0.026132f, 0.010955f, 0.025991f, -0.041481f, -0.090175f, -0.036798f, -0.086779f, -0.150342f, -0.058741f, 0.117305f, 0.202267f, 0.117784f, -0.052466f, -0.042422f, -0.184128f, -0.165362f, 0.111186f, 0.017720f, 0.146770f, 0.152397f, 0.158231f, 0.051993f, -0.066479f, -0.081616f, -0.091193f, -0.103590f, -0.017215f, 0.099086f, 0.168601f, 0.052670f, 0.015282f, -0.009843f, -0.087828f, -0.127088f, -0.086901f, 0.014307f, 0.115528f, 0.053143f, 0.073879f, 0.060259f, 0.020175f, -0.046848f, -0.052495f, 0.000143f, -0.030345f, 0.007607f, 0.055008f, 0.059340f, 0.042327f, - 0.006992f, 0.020108f, -0.001057f, -0.041896f, 0.006276f, 0.012917f, -0.008161f, 0.003648f, -0.013159f, 0.080692f, 0.046607f, 0.049963f, 0.030031f, -0.032180f, -0.075842f, -0.107837f, 0.013679f, 0.033048f, 0.068481f, 0.067597f, 0.089290f, 0.040942f, -0.069779f, -0.088041f, -0.104891f, -0.021849f, -0.002338f, 0.051856f, 0.029812f, 0.013603f, 0.027801f, -0.055346f, -0.154021f, -0.105763f, -0.095902f, -0.025701f, 0.009590f, 0.030558f, -0.011884f, -0.025075f, -0.037511f, -0.006608f, 0.014233f, -0.046518f, 0.065133f, 0.031317f, 0.057831f, -0.127168f, 0.028802f, 0.017215f, -0.039154f, 0.028537f, -0.029308f, -0.014414f, -0.008787f, -0.018151f, 0.054716f, 0.100973f, -0.029392f, 0.020328f, -0.014137f, 0.024230f, 0.051244f, -0.015653f, -0.009458f, -0.027893f, 0.014650f, -0.017674f, -0.055789f, 0.040715f, 0.068529f, -0.008968f, -0.036080f, -0.032860f, -0.072464f, -0.019823f, 0.054666f, 0.037343f, 0.018930f, -0.079529f, -0.046412f, -0.034603f, 0.070270f, 0.061307f, 0.053419f, -0.155342f, -0.103724f, -0.012421f, 0.076639f, 0.164353f, 0.000405f, -0.197236f, -0.072780f, 0.006804f, 0.066312f, -0.005218f, - 0.036268f, 0.027861f, -0.086521f, -0.037522f, -0.024152f, -0.051456f, 0.003273f, -0.096829f, 0.014870f, 0.038744f, -0.117700f, -0.074822f, -0.036955f, -0.014696f, 0.129520f, -0.000427f, -0.199765f, 0.019526f, 0.027692f, 0.030828f, 0.078127f, 0.037039f, -0.085615f, 0.004713f, -0.003727f, 0.171032f, 0.119872f, -0.099557f, 0.090674f, -0.052835f, 0.035764f, 0.094714f, 0.033351f, -0.051165f, 0.046783f, -0.020124f, 0.011593f, 0.033247f, -0.004072f, -0.034403f, 0.063926f, -0.040866f, 0.046675f, -0.021497f, 0.024808f, -0.007075f, 0.051261f, -0.017460f, 0.040120f, -0.070372f, -0.012982f, -0.000058f, -0.010074f, 0.023683f, 0.043468f, -0.044372f, 0.090396f, -0.034822f, -0.032205f, -0.061275f, 0.044683f, 0.096799f, 0.018063f, -0.125323f, 0.009297f, -0.027403f, 0.060455f, 0.031244f, 0.026707f, -0.049690f, -0.004513f, -0.031206f, 0.029534f, -0.012013f, -0.021365f, -0.006232f, 0.040342f, -0.008757f, -0.026720f, -0.029971f, 0.022296f, 0.005001f, 0.021137f, -0.012570f, -0.000762f, -0.022594f, -0.003183f, -0.003547f, 0.009934f, 0.005187f, 0.023871f, 0.044015f, -0.105174f, 0.014919f, -0.077226f, 0.014063f, - 0.065553f, 0.057956f, 0.018976f, -0.037588f, 0.007520f, -0.022340f, -0.005532f, -0.027718f, -0.020481f, 0.014224f, 0.003827f, -0.040346f, -0.004651f, 0.020975f, -0.004489f, 0.002358f, 0.007594f, -0.025741f, -0.025492f, -0.000679f, 0.016856f, 0.002228f, -0.041024f, 0.003410f, 0.021028f, 0.006596f, 0.004882f, 0.042897f, -0.004737f, -0.011452f, 0.015373f, 0.016418f, -0.029031f, -0.032193f, 0.023854f, 0.004607f, -0.024722f, 0.016583f, 0.007177f, 0.008029f, -0.017298f, 0.006954f, 0.019439f, 0.002335f, -0.024339f, 0.032994f, -0.004019f, -0.037012f, 0.001106f, 0.028943f, 0.009017f, -0.024225f, 0.022023f, 0.007291f, -0.033768f, 0.013871f, 0.001728f, 0.034459f, -0.031250f, 0.002804f, 0.023738f, -0.054711f, 0.001737f, 0.023611f, -0.000918f, 0.016363f, -0.009105f, -0.035026f, 0.004641f, -0.037062f, 0.034776f, 0.017956f, 0.009798f, -0.013775f, -0.014530f, 0.028733f, -0.024776f, 0.025640f, 0.028159f, -0.040283f, -0.013083f, 0.001724f, 0.031181f, 0.000488f, -0.018089f, 0.011553f, -0.021907f, -0.001312f, 0.003165f, 0.018416f, 0.001253f, 0.003030f, -0.011324f, 0.019169f, -0.006422f, -0.022362f, - 0.020334f, -0.009029f, 0.008766f, -0.005063f, 0.014660f, 0.018531f, -0.021283f, 0.003728f, -0.011537f, 0.005020f, -0.011723f, 0.041205f, -0.011653f, -0.023105f, 0.018580f, -0.010402f, -0.003508f, -0.011749f, 0.012144f, 0.011229f, -0.016672f, 0.009338f, 0.016215f, -0.008383f, 0.001071f, -0.022979f, -0.052039f, 0.085341f, 0.012067f, 0.038610f, -0.033179f, 0.014774f, -0.007162f, 0.010351f, 0.009364f, -0.014200f, 0.005776f, 0.015686f, -0.008949f, 0.034078f, 0.001589f, 0.001183f, 0.011630f, 0.011202f, -0.001200f, -0.008583f, 0.014592f, -0.002163f, -0.009957f, -0.001966f, 0.014666f, -0.015650f, 0.003452f, 0.007231f, -0.019952f, 0.025151f, -0.004887f, -0.011950f, 0.038548f, -0.015711f, -0.022532f, 0.017785f, 0.009883f, -0.010492f, 0.016799f, 0.013473f, -0.004504f, -0.005282f, -0.002852f, 0.005144f, 0.009736f, 0.005749f, 0.000091f, -0.006504f, 0.019961f, -0.020953f, 0.019150f, 0.003106f, -0.002143f, 0.005437f, 0.006194f, 0.006301f, 0.001043f, -0.018633f, 0.005458f, 0.016323f, -0.011325f, 0.000087f, 0.000211f, 0.012468f, -0.001039f, -0.004648f, 0.018826f, -0.009320f, 0.010209f, -0.019152f, - -0.006926f, 0.018833f, -0.017563f, 0.018112f, -0.004440f, 0.011974f, 0.014666f, -0.016246f, -0.005338f, 0.020423f, -0.016705f, -0.000753f, 0.002364f, 0.006274f, 0.001753f, -0.002173f, 0.000992f, 0.001651f, 0.009608f, -0.007858f, 0.002310f, 0.006101f, -0.000351f, -0.004004f, 0.001293f, 0.003635f, -0.000556f, 0.001335f, -0.003281f, 0.004348f, 0.006095f, -0.010080f, -0.001367f, 0.017788f, -0.008292f, 0.005168f, -0.001042f, 0.010190f, 0.003115f, -0.005445f, 0.001393f, -0.000978f, -0.005616f, -0.003963f, 0.021097f, -0.003427f, -0.004513f, 0.003101f, 0.002590f, -0.001507f, 0.004696f, 0.008699f, 0.000543f, 0.002347f, 0.001068f, -0.001717f, 0.001557f, 0.002632f, -0.003697f, 0.002878f, 0.000016f, 0.019856f, -0.070468f, -0.225166f, -0.011522f, 0.121246f, 0.054382f, 0.258364f, 0.021980f, 0.054513f, 0.002212f, -0.075422f, -0.094988f, -0.064362f, -0.115743f, -0.081002f, -0.050961f, 0.001777f, 0.088273f, 0.173938f, 0.127998f, 0.111385f, 0.036245f, -0.060641f, -0.089026f, -0.080056f, -0.094333f, -0.104627f, -0.042434f, -0.020120f, -0.009188f, 0.050951f, 0.067672f, 0.050999f, 0.094627f, 0.061057f, - 0.022632f, 0.063451f, 0.001440f, -0.027681f, -0.018295f, -0.057115f, -0.116994f, -0.071178f, -0.068507f, -0.069900f, 0.003616f, 0.032437f, 0.022447f, 0.085863f, 0.070454f, 0.048489f, 0.069298f, 0.073628f, 0.020866f, 0.022008f, -0.007875f, -0.063588f, -0.088266f, -0.067535f, -0.088465f, -0.063000f, -0.021980f, -0.015668f, 0.005443f, 0.048055f, 0.037693f, 0.033918f, 0.067998f, 0.056100f, 0.041320f, 0.070117f, 0.019249f, -0.014528f, -0.002905f, -0.028305f, -0.061022f, -0.035610f, -0.077198f, -0.097706f, -0.057516f, -0.048693f, -0.021089f, 0.056515f, 0.076468f, 0.071165f, 0.082268f, 0.067547f, 0.038498f, 0.036955f, 0.018007f, -0.008106f, -0.020897f, -0.039402f, -0.057988f, -0.058230f, -0.065629f, -0.069089f, -0.058928f, -0.020258f, -0.006939f, 0.023030f, 0.059300f, 0.065820f, 0.065319f, 0.076112f, 0.060709f, 0.045264f, 0.037827f, 0.012224f, -0.029447f, -0.052713f, -0.085528f, -0.109450f, -0.102270f, -0.081287f, -0.040771f, 0.010145f, 0.054880f, 0.075077f, 0.086689f, 0.090106f, 0.077975f, 0.054871f, 0.028150f, -0.018179f, -0.044269f, -0.058833f, -0.067946f, -0.059747f, -0.044748f, -0.031156f, - -0.012741f, 0.014045f, 0.018985f, 0.025538f, 0.029719f, 0.026124f, 0.021056f, 0.016497f, 0.011347f, 0.009634f, 0.004452f, -0.003667f, -0.005652f, -0.006129f, -0.009131f, -0.010399f, -0.013026f, -0.015639f, -0.016897f, -0.013914f, -0.010305f, -0.005734f, 0.000142f, 0.008219f, 0.011113f, 0.008551f, 0.005297f, 0.003626f, 0.003020f}, - {-0.005147f, 0.001241f, 0.006039f, -0.000524f, 0.000548f, -0.008937f, -0.004491f, 0.001329f, 0.011865f, -0.007639f, 0.002484f, -0.012307f, 0.012649f, 0.000842f, 0.004641f, -0.001444f, 0.002012f, -0.002363f, -0.004330f, -0.010696f, 0.004543f, -0.010724f, -0.005005f, -0.006044f, 0.006106f, 0.004858f, 0.002347f, 0.005063f, 0.009538f, 0.000639f, -0.008630f, 0.005704f, 0.000945f, -0.000388f, 0.004678f, -0.001698f, -0.003118f, -0.012618f, 0.002070f, -0.003599f, 0.002785f, 0.005333f, -0.006837f, -0.002706f, 0.006266f, 0.001987f, 0.000764f, -0.006411f, 0.016254f, 0.009810f, 0.001614f, 0.007882f, 0.006480f, 0.006293f, -0.014809f, 0.000959f, -0.001413f, -0.003894f, 0.003667f, 0.002497f, -0.002351f, -0.002734f, -0.000767f, -0.004401f, 0.004409f, -0.001636f, 0.008665f, -0.000278f, -0.002174f, -0.004055f, -0.007521f, -0.001338f, 0.005850f, -0.000208f, 0.001365f, 0.006891f, 0.001904f, 0.007964f, -0.000123f, 0.001248f, -0.000781f, 0.008560f, 0.007593f, 0.007683f, 0.001698f, 0.000041f, 0.003433f, -0.000120f, 0.001087f, 0.000212f, 0.000423f, -0.000585f, -0.002326f, -0.001953f, -0.000400f, -0.002244f, - 0.001129f, 0.001215f, -0.000940f, 0.002549f, -0.000945f, -0.000672f, -0.000472f, 0.001079f, 0.000327f, 0.002287f, 0.000235f, 0.000087f, 0.000223f, 0.002951f, 0.001467f, -0.000164f, -0.000734f, 0.000191f, -0.000363f, 0.000765f, 0.003042f, 0.000705f, 0.003867f, 0.013453f, -0.006514f, 0.004496f, -0.003704f, -0.005824f, -0.002385f, -0.004032f, 0.007352f, -0.006063f, -0.011252f, -0.002872f, 0.002973f, -0.009381f, -0.005663f, 0.010601f, 0.018319f, -0.003084f, 0.007008f, -0.006277f, -0.006601f, -0.000291f, 0.001941f, -0.000804f, -0.000178f, 0.006797f, -0.011599f, 0.003790f, -0.000844f, -0.002432f, -0.009774f, 0.000853f, 0.000242f, 0.005515f, 0.001665f, -0.007659f, 0.010117f, -0.008040f, 0.009441f, -0.001060f, 0.001726f, 0.003832f, -0.001092f, -0.004718f, 0.007388f, 0.001809f, 0.009866f, 0.001497f, -0.008665f, 0.015744f, 0.012539f, -0.004369f, -0.001264f, -0.003038f, -0.010924f, -0.005924f, -0.001781f, -0.001891f, 0.004443f, -0.006032f, 0.000509f, 0.004309f, 0.000045f, -0.000175f, -0.000671f, -0.001045f, -0.005948f, 0.009511f, 0.000338f, -0.000219f, -0.002970f, -0.001074f, -0.008702f, -0.007783f, - 0.002608f, 0.006341f, -0.000761f, -0.001665f, 0.000035f, -0.000083f, -0.004432f, 0.008514f, 0.001214f, 0.002804f, -0.002170f, 0.002308f, 0.001513f, -0.000376f, -0.000101f, -0.000398f, 0.000174f, 0.001998f, -0.001064f, 0.001256f, 0.001430f, -0.000291f, -0.000281f, 0.001031f, 0.002348f, 0.002009f, -0.001390f, 0.000536f, 0.000773f, -0.001159f, -0.000562f, 0.003170f, -0.000375f, -0.000192f, -0.002434f, -0.002346f, -0.003779f, -0.001468f, -0.014112f, 0.017170f, -0.003857f, -0.002120f, 0.012240f, -0.004913f, 0.006266f, 0.027318f, -0.003385f, 0.000726f, -0.010583f, -0.008560f, -0.013160f, 0.007481f, -0.005494f, 0.003608f, 0.007099f, -0.008319f, -0.007127f, -0.005245f, 0.000489f, 0.002610f, -0.010257f, -0.004073f, 0.004337f, 0.003717f, -0.004130f, -0.001744f, 0.006103f, -0.006496f, 0.000897f, -0.003273f, -0.001260f, -0.004550f, 0.003702f, -0.004182f, 0.001586f, 0.003549f, -0.001780f, 0.011433f, 0.000383f, -0.001653f, -0.008620f, 0.000926f, 0.012219f, 0.001613f, 0.004057f, -0.011365f, -0.016202f, -0.005940f, -0.013953f, -0.012323f, -0.000424f, -0.005369f, -0.000583f, -0.014930f, 0.012591f, -0.013829f, - 0.001917f, 0.009327f, -0.008606f, -0.014445f, -0.010313f, -0.003104f, 0.009433f, 0.008373f, 0.012659f, -0.007599f, -0.006696f, -0.005370f, -0.004625f, 0.009144f, 0.002277f, -0.003904f, -0.002143f, 0.004308f, 0.004903f, 0.001434f, 0.002208f, 0.003118f, -0.000791f, -0.005393f, -0.000957f, -0.003598f, 0.001238f, 0.000378f, 0.001075f, 0.000978f, 0.000190f, 0.002151f, 0.000210f, 0.002522f, 0.000171f, -0.002035f, 0.002569f, -0.003147f, -0.002084f, 0.000546f, -0.000889f, 0.002587f, -0.001697f, -0.001288f, -0.000610f, 0.000282f, -0.001122f, -0.001914f, 0.001626f, -0.000651f, 0.001181f, -0.001626f, -0.001567f, -0.001912f, -0.002208f, -0.001411f, -0.002015f, 0.014940f, 0.001551f, -0.006009f, 0.000845f, -0.004974f, -0.001110f, 0.010456f, 0.017535f, -0.005997f, -0.006141f, -0.015914f, 0.002010f, 0.003996f, 0.009050f, -0.006001f, 0.009758f, 0.001548f, 0.015030f, -0.012064f, 0.001926f, -0.022782f, -0.002518f, 0.002725f, -0.005579f, -0.005122f, -0.002024f, 0.008401f, -0.006890f, -0.011973f, 0.003385f, -0.017568f, -0.003846f, -0.008436f, 0.003860f, -0.001865f, 0.005928f, 0.000789f, -0.013415f, -0.014463f, - 0.000378f, 0.007717f, 0.014307f, -0.002835f, -0.005850f, 0.012011f, -0.013254f, -0.007185f, 0.006364f, 0.005719f, 0.009459f, -0.009035f, 0.000313f, 0.003685f, -0.005734f, -0.001905f, 0.005574f, -0.008195f, 0.010676f, -0.004633f, -0.002018f, -0.011396f, -0.009522f, 0.004613f, -0.000054f, 0.000245f, -0.001645f, -0.006979f, 0.006598f, -0.004374f, 0.008211f, -0.000108f, -0.010939f, -0.011406f, 0.004152f, -0.005717f, 0.002009f, -0.016247f, -0.015589f, -0.002440f, 0.014604f, 0.000148f, -0.003056f, 0.000775f, 0.002073f, 0.001612f, -0.000710f, 0.002388f, -0.007673f, 0.001478f, 0.001247f, 0.002371f, 0.002899f, 0.003321f, 0.001678f, -0.004220f, 0.000269f, 0.003837f, 0.001698f, 0.001083f, -0.002177f, -0.002546f, 0.000562f, 0.000064f, -0.000924f, 0.003618f, -0.000119f, -0.000172f, -0.002508f, 0.004503f, 0.003598f, -0.000136f, 0.000269f, -0.002093f, 0.001223f, 0.001468f, 0.000562f, 0.000290f, 0.001403f, -0.001874f, 0.008999f, -0.024294f, 0.005697f, -0.010527f, 0.008998f, 0.010273f, -0.011458f, -0.021296f, 0.003050f, -0.002805f, 0.013573f, -0.008079f, 0.019633f, -0.008203f, 0.013009f, -0.015984f, - -0.005888f, 0.006738f, 0.009686f, 0.002741f, -0.000017f, -0.009791f, -0.001240f, -0.007695f, -0.009619f, 0.005403f, -0.008202f, 0.003269f, 0.001947f, 0.004019f, -0.004640f, 0.009153f, -0.001658f, 0.007883f, -0.001717f, -0.014978f, -0.002452f, -0.004765f, 0.001572f, 0.015033f, 0.001000f, -0.001252f, -0.000725f, -0.006040f, 0.005244f, -0.005692f, 0.007975f, 0.008605f, 0.003169f, 0.003333f, 0.015166f, -0.003703f, -0.002671f, -0.012049f, 0.008669f, 0.007632f, 0.001660f, 0.001994f, 0.001652f, 0.000671f, 0.004486f, 0.009244f, 0.006216f, 0.003550f, 0.003420f, -0.002305f, 0.012072f, 0.004135f, -0.002407f, -0.009185f, 0.004755f, -0.002699f, 0.017599f, 0.009992f, 0.002287f, -0.008041f, -0.002942f, 0.013400f, -0.005113f, 0.001795f, 0.007821f, -0.004262f, -0.005301f, -0.010559f, 0.001426f, 0.003926f, -0.000759f, 0.005151f, -0.004071f, -0.001507f, -0.003155f, 0.003793f, -0.000240f, -0.001126f, -0.005004f, 0.001276f, 0.001388f, 0.003111f, 0.003687f, -0.001160f, 0.000681f, 0.004039f, -0.000222f, 0.004098f, -0.000197f, 0.001283f, 0.006027f, 0.001295f, 0.006193f, -0.000397f, -0.001249f, -0.000315f, - -0.000448f, 0.000274f, 0.000519f, -0.004538f, 0.001796f, 0.003762f, 0.000472f, 0.001560f, -0.001024f, -0.031332f, -0.017006f, 0.006330f, -0.006095f, 0.012644f, 0.012616f, 0.019024f, 0.007889f, 0.007712f, 0.004715f, -0.022832f, -0.005087f, -0.003137f, 0.002078f, -0.002267f, 0.007141f, 0.005074f, -0.008759f, -0.006997f, 0.005898f, 0.011149f, 0.014068f, 0.012123f, 0.015976f, -0.008726f, -0.008698f, -0.011578f, 0.012325f, -0.007100f, 0.010188f, -0.002562f, -0.000502f, -0.010846f, -0.006478f, -0.006202f, 0.009257f, 0.011383f, 0.002035f, 0.011378f, 0.016305f, -0.006466f, 0.004143f, 0.019106f, -0.009582f, 0.006201f, 0.006506f, 0.000715f, 0.014392f, 0.018406f, 0.014025f, 0.031925f, 0.005958f, -0.004539f, -0.005886f, -0.005481f, -0.000320f, 0.005611f, 0.009708f, -0.001777f, -0.003102f, -0.003391f, -0.008531f, 0.003580f, 0.004650f, 0.008259f, -0.019907f, -0.002753f, 0.005067f, 0.013205f, 0.009247f, -0.017046f, -0.012587f, 0.003195f, 0.003210f, 0.013774f, -0.012125f, 0.000742f, -0.001202f, 0.001434f, -0.017263f, -0.004707f, -0.005929f, -0.004228f, -0.007079f, -0.003019f, 0.000571f, 0.006602f, - 0.000013f, 0.000337f, 0.002615f, 0.003136f, -0.006576f, -0.001085f, 0.000521f, -0.000016f, 0.002387f, -0.002325f, -0.004287f, -0.002976f, -0.003266f, 0.004650f, -0.004490f, -0.002230f, -0.005172f, 0.001249f, -0.001085f, 0.003283f, -0.004731f, 0.001938f, -0.001581f, 0.001900f, 0.001814f, 0.000271f, 0.004159f, -0.003988f, 0.002067f, 0.002197f, 0.000722f, 0.004732f, 0.007616f, 0.015199f, -0.001912f, 0.003145f, 0.013001f, 0.019067f, 0.010758f, -0.020937f, 0.000118f, -0.022279f, -0.015788f, -0.009540f, -0.001807f, -0.013612f, 0.016362f, 0.006087f, 0.009705f, -0.027725f, -0.001944f, 0.018224f, 0.009290f, -0.008097f, -0.011629f, -0.007077f, 0.007135f, -0.021196f, -0.001191f, -0.013601f, 0.020961f, -0.002698f, -0.006066f, 0.002287f, -0.000698f, -0.003527f, 0.003740f, -0.005467f, 0.009760f, 0.006967f, 0.014006f, -0.000974f, 0.000760f, 0.021607f, -0.006770f, 0.014484f, -0.002296f, -0.002471f, 0.038001f, 0.004586f, -0.004024f, -0.008507f, -0.029314f, 0.003161f, -0.030045f, -0.004997f, 0.031727f, -0.008874f, -0.006116f, -0.021949f, -0.006414f, 0.000853f, -0.011793f, 0.006435f, -0.001109f, -0.016066f, - 0.017187f, 0.006207f, 0.005623f, 0.004792f, -0.011900f, 0.013172f, -0.020425f, 0.005995f, 0.007899f, 0.000940f, -0.002672f, -0.008205f, -0.006470f, -0.008358f, -0.002669f, 0.006878f, 0.008784f, -0.002125f, -0.007118f, -0.004153f, 0.009787f, 0.004086f, 0.018699f, -0.000241f, 0.001445f, 0.007686f, -0.000738f, -0.003349f, -0.002549f, -0.002267f, -0.002023f, -0.002986f, 0.002229f, -0.003421f, -0.000099f, 0.003901f, 0.001433f, 0.003977f, 0.003783f, 0.003108f, 0.000372f, 0.005733f, 0.004110f, 0.002533f, 0.001766f, 0.001811f, -0.005851f, -0.004891f, 0.004307f, 0.000718f, -0.003595f, 0.000757f, -0.004093f, 0.001307f, 0.004752f, 0.001836f, -0.000761f, 0.001850f, 0.004081f, 0.001027f, -0.003242f, 0.001878f, 0.012545f, -0.024759f, 0.010927f, -0.008623f, -0.012432f, -0.011844f, 0.009650f, 0.012281f, 0.007235f, 0.021168f, 0.015665f, 0.003305f, 0.006496f, -0.016284f, 0.003516f, 0.007584f, 0.016460f, 0.003324f, -0.007633f, 0.006121f, 0.007785f, -0.014579f, 0.002334f, -0.014959f, 0.011987f, 0.010934f, 0.014032f, -0.013294f, 0.008411f, 0.015007f, -0.006526f, 0.003999f, 0.019873f, -0.000435f, - -0.012006f, -0.009536f, 0.004575f, -0.003090f, -0.012204f, -0.004929f, 0.000421f, 0.003057f, 0.006917f, -0.008372f, 0.013931f, 0.008521f, -0.002952f, 0.016753f, -0.001856f, 0.006456f, 0.021933f, -0.022941f, 0.042836f, -0.019462f, 0.006056f, 0.013024f, -0.004256f, -0.002214f, 0.005594f, 0.029048f, -0.001380f, -0.003834f, -0.000665f, -0.006694f, 0.014230f, 0.015906f, -0.004843f, 0.006898f, 0.005794f, 0.005296f, 0.009835f, 0.012560f, 0.001221f, 0.013569f, 0.003089f, -0.011352f, -0.017524f, 0.004398f, 0.001946f, 0.008291f, 0.003671f, 0.026897f, -0.002497f, 0.015094f, 0.012243f, -0.008124f, -0.015032f, -0.001625f, 0.001929f, 0.004114f, -0.003934f, 0.007040f, 0.003440f, -0.006403f, -0.001594f, -0.006107f, -0.002103f, 0.004063f, -0.001811f, 0.005922f, -0.001257f, 0.002225f, 0.001680f, -0.002519f, 0.003256f, 0.003654f, -0.005117f, 0.003728f, 0.002580f, 0.001272f, 0.001462f, -0.000029f, 0.001232f, 0.006554f, 0.002193f, -0.002112f, 0.001356f, 0.001915f, 0.003365f, 0.004096f, -0.001012f, -0.004269f, -0.001082f, -0.003711f, -0.002704f, 0.004885f, 0.014084f, 0.018575f, 0.011383f, -0.019906f, - 0.037909f, -0.012031f, 0.007108f, -0.027959f, 0.010983f, -0.024732f, 0.018995f, 0.001909f, -0.005413f, -0.014020f, 0.017945f, 0.002353f, 0.011405f, 0.011838f, 0.005984f, -0.020828f, 0.010496f, -0.012628f, -0.002432f, 0.009319f, 0.010062f, 0.002322f, -0.003998f, -0.020859f, 0.002763f, 0.019127f, 0.002002f, 0.012369f, 0.013736f, -0.021771f, 0.011823f, -0.011086f, -0.011061f, 0.016003f, 0.017610f, 0.009200f, 0.009838f, 0.002742f, 0.009420f, -0.022425f, -0.010160f, -0.007177f, 0.000473f, 0.023824f, 0.011271f, 0.009428f, -0.001942f, 0.010465f, -0.000718f, 0.026249f, 0.009507f, 0.009947f, 0.003824f, -0.001482f, -0.039058f, 0.014395f, 0.008986f, -0.003607f, -0.002960f, -0.029028f, 0.000055f, -0.011099f, 0.006717f, 0.025269f, -0.004470f, -0.014467f, 0.029239f, -0.001320f, 0.016406f, -0.009820f, -0.000144f, -0.018380f, -0.001954f, 0.000364f, -0.032106f, -0.009460f, -0.005761f, -0.014308f, -0.006917f, -0.002799f, 0.001726f, 0.015978f, 0.000891f, -0.000354f, -0.003378f, -0.008200f, -0.001628f, 0.001510f, -0.003339f, 0.001173f, 0.000072f, 0.004318f, -0.007798f, -0.002895f, -0.001336f, -0.006828f, - 0.000030f, -0.004405f, -0.003167f, -0.002192f, -0.005923f, -0.002797f, 0.006145f, -0.002110f, 0.000779f, -0.001708f, 0.006673f, -0.000240f, 0.002798f, -0.004508f, -0.010754f, -0.003052f, -0.000876f, 0.004559f, 0.001428f, 0.006459f, -0.000874f, -0.001919f, 0.004947f, -0.006570f, 0.007970f, -0.000140f, 0.024946f, -0.021376f, 0.003187f, 0.009113f, 0.011320f, -0.037146f, 0.024757f, 0.006963f, -0.026391f, -0.016855f, 0.014496f, 0.033217f, -0.011614f, -0.005965f, -0.022842f, 0.047529f, 0.018499f, 0.003016f, 0.007968f, -0.024865f, -0.016080f, -0.000988f, 0.002131f, 0.024681f, 0.005400f, 0.019041f, 0.021399f, -0.000873f, 0.001383f, 0.014921f, -0.003859f, -0.015797f, -0.015103f, -0.003801f, 0.021184f, -0.011358f, 0.026783f, -0.012342f, 0.039303f, 0.017508f, 0.031710f, -0.008520f, 0.005177f, 0.025456f, -0.019721f, 0.011893f, 0.011518f, 0.010825f, -0.011272f, 0.013577f, 0.003328f, 0.004362f, 0.011600f, 0.024203f, 0.020362f, -0.020567f, -0.004772f, 0.010658f, -0.020056f, -0.012731f, -0.005262f, -0.041107f, 0.011058f, -0.020302f, -0.012708f, 0.004004f, -0.005057f, 0.014118f, 0.026269f, 0.016842f, - 0.010644f, -0.014134f, -0.003308f, -0.000835f, -0.027802f, 0.005113f, 0.002401f, 0.034436f, 0.007440f, 0.007760f, -0.007427f, 0.026606f, -0.000210f, -0.000747f, 0.000107f, -0.008639f, -0.003931f, 0.001124f, -0.001565f, -0.009369f, 0.000884f, -0.002408f, 0.001712f, -0.011181f, -0.012116f, -0.003985f, 0.009682f, -0.001609f, 0.003774f, 0.003658f, 0.002994f, -0.000803f, -0.002564f, -0.003359f, -0.006722f, -0.011230f, 0.003852f, 0.000574f, -0.002751f, -0.013272f, 0.009760f, 0.006637f, 0.003770f, -0.001118f, 0.000815f, -0.004539f, 0.003313f, -0.002411f, -0.004380f, 0.001525f, 0.005636f, 0.003393f, -0.003526f, -0.000890f, -0.001449f, 0.004133f, -0.029670f, -0.043771f, 0.023642f, -0.017833f, 0.019376f, 0.006332f, 0.009361f, 0.011480f, -0.029429f, -0.053480f, 0.004694f, 0.007728f, 0.030086f, -0.029710f, -0.032619f, 0.028111f, -0.011279f, 0.012790f, -0.006199f, 0.006700f, 0.004399f, 0.007421f, -0.014898f, 0.007178f, -0.002206f, -0.004631f, 0.018503f, 0.006955f, -0.002746f, -0.024102f, -0.003372f, -0.000666f, -0.004527f, -0.001123f, -0.013143f, -0.031966f, -0.014313f, 0.023523f, -0.010100f, 0.011620f, - -0.018240f, 0.013481f, 0.006821f, -0.000196f, -0.009243f, -0.039640f, 0.021827f, 0.021349f, 0.027266f, -0.019095f, -0.008238f, 0.037279f, 0.032770f, 0.015262f, 0.006942f, 0.021102f, 0.007605f, 0.018972f, -0.010283f, 0.016492f, -0.031523f, -0.001916f, 0.008609f, -0.008088f, 0.037194f, 0.001542f, 0.020265f, -0.012088f, -0.020233f, 0.043256f, -0.000893f, 0.017232f, -0.005883f, 0.000713f, -0.050942f, -0.004168f, 0.010617f, -0.019481f, 0.023730f, 0.018253f, 0.004276f, -0.010269f, -0.038870f, -0.000702f, -0.008068f, 0.009765f, 0.011539f, 0.002094f, -0.004926f, 0.009234f, 0.000181f, 0.004610f, -0.002685f, -0.011551f, -0.004514f, -0.010530f, 0.018467f, 0.005897f, -0.000632f, -0.000229f, 0.002083f, 0.017451f, -0.003256f, -0.003970f, 0.002394f, -0.001180f, -0.000066f, 0.007935f, 0.003937f, 0.007158f, -0.005294f, -0.000460f, -0.008307f, 0.001755f, -0.000193f, 0.007505f, 0.006965f, -0.007877f, 0.012707f, 0.013485f, -0.010710f, 0.001034f, -0.021924f, -0.028725f, -0.008334f, -0.006722f, -0.049195f, -0.046147f, -0.012084f, 0.000233f, 0.034750f, 0.028270f, 0.027979f, -0.010808f, -0.004487f, -0.006992f, - 0.029873f, 0.012841f, -0.012521f, -0.002208f, -0.009967f, 0.021609f, 0.016775f, -0.012458f, -0.017451f, -0.016016f, -0.032723f, 0.013681f, 0.000923f, 0.000938f, 0.007155f, -0.004884f, 0.012424f, 0.046043f, -0.026192f, 0.013890f, 0.002758f, -0.017731f, -0.010149f, -0.021055f, 0.007999f, -0.009351f, -0.010572f, 0.023848f, 0.002940f, -0.007938f, 0.024080f, -0.003260f, -0.010613f, 0.008390f, 0.017573f, -0.009652f, 0.018885f, 0.033910f, 0.032705f, -0.022330f, -0.000296f, 0.008183f, 0.018437f, -0.028281f, -0.005881f, -0.007798f, 0.035275f, 0.015044f, -0.003786f, -0.021427f, -0.023782f, -0.021140f, 0.031862f, 0.026391f, -0.050431f, -0.042070f, -0.031902f, -0.022461f, 0.007631f, -0.020255f, 0.012333f, 0.003385f, 0.005026f, -0.040561f, -0.012988f, 0.036717f, 0.028323f, -0.012267f, -0.026022f, 0.025374f, 0.013307f, -0.003022f, 0.000446f, -0.003205f, -0.006150f, 0.014437f, -0.012897f, 0.003185f, 0.002241f, -0.000505f, -0.009310f, -0.017009f, 0.003321f, 0.013886f, -0.001329f, 0.001560f, -0.005924f, 0.013193f, 0.014430f, 0.001456f, -0.001876f, 0.004895f, -0.000482f, 0.005864f, 0.006313f, 0.009112f, - -0.012136f, -0.001125f, 0.004497f, 0.000048f, -0.007514f, 0.002079f, 0.015305f, 0.014259f, -0.005370f, 0.010942f, -0.016622f, 0.004236f, -0.005332f, -0.004563f, -0.006627f, -0.010349f, 0.040573f, 0.031957f, 0.019794f, 0.002990f, -0.026677f, -0.013906f, -0.004211f, 0.010831f, 0.016783f, -0.023617f, 0.006012f, 0.001363f, -0.020196f, -0.009605f, 0.016078f, -0.012041f, 0.012755f, 0.005437f, 0.015019f, -0.018859f, -0.000193f, -0.041990f, 0.006160f, -0.053083f, 0.021675f, 0.021436f, -0.020703f, 0.024216f, 0.028876f, 0.000746f, 0.008128f, -0.034267f, 0.020017f, 0.001900f, -0.014313f, 0.018406f, -0.004508f, 0.000152f, -0.000469f, 0.002155f, 0.035554f, -0.004147f, -0.000202f, 0.043679f, -0.000589f, -0.020348f, -0.058011f, -0.047705f, 0.052728f, 0.032800f, 0.012876f, 0.013179f, -0.022280f, -0.044723f, -0.022061f, 0.006925f, -0.017284f, 0.034728f, -0.002027f, 0.004493f, 0.037458f, -0.007864f, -0.011847f, -0.008603f, -0.023860f, -0.040394f, -0.032123f, 0.090823f, -0.044347f, -0.020155f, 0.025934f, -0.046226f, -0.033350f, 0.032845f, 0.046107f, 0.015089f, -0.008589f, 0.054294f, 0.026132f, -0.043962f, - -0.015369f, -0.024622f, -0.024034f, 0.049344f, 0.003407f, -0.033139f, -0.022962f, -0.025831f, 0.007047f, -0.005459f, 0.014916f, -0.000534f, -0.007795f, -0.012205f, 0.000928f, 0.013535f, -0.007562f, 0.006164f, -0.007374f, 0.006656f, 0.006019f, 0.018911f, -0.007628f, -0.002956f, 0.016176f, 0.001130f, 0.008170f, 0.008350f, 0.011484f, 0.002013f, -0.007039f, -0.004021f, -0.001960f, -0.002925f, 0.006954f, -0.002407f, -0.007870f, 0.015195f, 0.015684f, -0.008965f, 0.003837f, -0.010183f, 0.003397f, 0.003538f, 0.009586f, -0.002689f, -0.001203f, -0.005137f, 0.004826f, 0.011183f, -0.037266f, -0.027481f, -0.019150f, -0.034096f, -0.002992f, 0.032475f, -0.002259f, 0.006750f, 0.016031f, 0.010670f, -0.027429f, -0.013233f, -0.022652f, -0.012087f, 0.029254f, -0.008822f, -0.003093f, -0.003911f, 0.017773f, 0.017724f, 0.052726f, 0.008475f, 0.038836f, -0.002176f, 0.013165f, -0.021017f, -0.015806f, 0.013974f, -0.026767f, -0.029770f, 0.001068f, 0.009495f, -0.015236f, 0.012347f, -0.017853f, 0.005563f, -0.047119f, 0.026440f, 0.014835f, 0.021641f, 0.002773f, -0.019108f, -0.039465f, -0.014021f, -0.003440f, 0.032695f, - -0.024753f, -0.014617f, 0.009196f, 0.074660f, -0.020527f, 0.075897f, -0.046422f, 0.018449f, -0.017064f, 0.033352f, -0.013110f, 0.057603f, -0.054018f, 0.082458f, -0.007708f, 0.017024f, 0.035735f, -0.061008f, 0.054550f, -0.065171f, 0.044120f, -0.106244f, 0.057721f, -0.054579f, 0.048514f, -0.071229f, 0.062766f, 0.002188f, 0.040712f, 0.017663f, -0.033173f, 0.028995f, -0.023733f, 0.072117f, -0.032742f, 0.011931f, -0.042914f, 0.011711f, -0.002807f, 0.007964f, -0.015304f, 0.020064f, -0.019674f, 0.014232f, -0.006928f, 0.004628f, 0.006131f, 0.006426f, 0.008411f, -0.004845f, -0.011296f, -0.009161f, -0.010823f, -0.024947f, 0.014502f, 0.003753f, -0.017126f, -0.007945f, -0.005140f, 0.011179f, -0.019075f, 0.018232f, -0.014601f, 0.003668f, -0.007810f, 0.008887f, 0.002998f, -0.000136f, 0.027658f, -0.024438f, 0.014981f, -0.023613f, 0.035651f, -0.006749f, 0.034827f, -0.013685f, 0.010892f, 0.015749f, 0.005282f, 0.005444f, -0.000019f, 0.016683f, -0.024862f, 0.027279f, -0.018965f, 0.017955f, -0.032725f, -0.029647f, 0.034531f, 0.059559f, -0.049319f, 0.075499f, -0.004371f, 0.000005f, -0.002891f, 0.013125f, - -0.022452f, -0.016485f, -0.033643f, -0.007504f, 0.001085f, 0.000098f, -0.000172f, 0.029697f, 0.005082f, 0.032557f, 0.031842f, -0.020225f, 0.011716f, 0.067878f, 0.022163f, 0.014566f, 0.010171f, -0.058814f, 0.002990f, -0.009502f, -0.007387f, -0.053932f, -0.011430f, 0.031060f, 0.008745f, 0.010359f, 0.015581f, 0.039345f, 0.010232f, -0.012077f, -0.004052f, -0.003336f, 0.014713f, -0.026692f, -0.016489f, 0.040633f, 0.025150f, 0.018952f, 0.031331f, 0.023229f, -0.013691f, -0.006787f, -0.046834f, -0.020494f, 0.018995f, 0.015081f, 0.035291f, -0.025400f, -0.012729f, -0.008865f, 0.025927f, 0.015274f, 0.023268f, 0.009699f, -0.018516f, -0.017064f, 0.058370f, -0.017793f, -0.056827f, 0.013205f, 0.041008f, 0.028227f, -0.000810f, -0.004826f, 0.005007f, 0.009496f, 0.005738f, 0.052277f, -0.062925f, -0.053581f, 0.006167f, 0.021295f, -0.027130f, -0.013861f, 0.004494f, -0.021188f, 0.010002f, -0.010298f, -0.002771f, 0.005724f, -0.004174f, -0.014189f, 0.000434f, 0.012009f, -0.007751f, 0.000249f, -0.020916f, -0.003504f, -0.018421f, 0.013605f, -0.005940f, 0.012494f, -0.007581f, 0.007869f, 0.003077f, 0.010580f, - 0.016158f, -0.016358f, -0.007558f, -0.004761f, 0.012698f, -0.007837f, -0.015090f, -0.027183f, -0.000260f, -0.010743f, -0.004261f, 0.004361f, 0.002557f, 0.000988f, 0.005185f, 0.009183f, -0.001958f, 0.027837f, 0.003207f, -0.001975f, -0.021579f, 0.003949f, -0.004153f, -0.000943f, -0.023121f, -0.119406f, 0.033019f, -0.014534f, -0.007567f, 0.029314f, -0.020230f, 0.031455f, -0.004220f, -0.051735f, -0.009425f, 0.005049f, 0.018180f, 0.023130f, 0.005390f, -0.036657f, 0.036308f, -0.014221f, -0.003293f, -0.022521f, -0.010128f, 0.019482f, -0.003883f, 0.017381f, 0.029276f, -0.006757f, -0.037790f, 0.008406f, 0.041485f, -0.038601f, 0.014214f, 0.032220f, -0.005852f, -0.025525f, -0.047662f, -0.032141f, 0.033629f, 0.086198f, -0.026532f, -0.034356f, 0.097097f, -0.006322f, -0.013978f, 0.069902f, 0.040688f, 0.034745f, 0.028060f, 0.011540f, -0.020544f, 0.035526f, 0.033067f, 0.022809f, 0.010548f, -0.064228f, 0.040132f, 0.035548f, -0.067838f, -0.039204f, -0.024376f, -0.018971f, -0.018692f, 0.074056f, 0.036956f, -0.042296f, 0.039562f, -0.015638f, -0.039584f, 0.017269f, 0.020131f, -0.017456f, -0.016782f, -0.062063f, - 0.006975f, 0.010637f, 0.045411f, 0.021790f, 0.005614f, 0.038008f, -0.030188f, 0.078592f, -0.083523f, -0.097388f, 0.068762f, -0.042014f, -0.002622f, 0.048270f, -0.030413f, -0.020891f, -0.006033f, -0.005714f, 0.005979f, 0.029626f, 0.014512f, -0.024206f, -0.001509f, 0.011553f, -0.002923f, 0.016471f, -0.000679f, 0.009117f, 0.001747f, -0.012839f, 0.006872f, 0.026286f, 0.018054f, -0.001125f, 0.003479f, 0.017582f, -0.002863f, -0.002072f, 0.004413f, 0.040690f, 0.020832f, -0.006519f, 0.008847f, -0.036060f, -0.001628f, 0.009529f, -0.016664f, -0.022357f, 0.021048f, -0.009664f, -0.000680f, 0.021698f, -0.018892f, 0.008346f, -0.003280f, -0.005394f, 0.026860f, -0.015231f, -0.031929f, -0.130108f, 0.039801f, 0.073137f, -0.045607f, -0.009632f, -0.035504f, 0.075251f, 0.050549f, 0.031672f, -0.006187f, -0.026552f, 0.005246f, 0.030223f, 0.013981f, -0.013301f, -0.003060f, 0.041407f, -0.002913f, -0.015506f, -0.055903f, -0.026606f, 0.046832f, 0.027142f, -0.029833f, 0.023564f, -0.021654f, -0.006998f, 0.013920f, 0.013040f, -0.013120f, 0.008350f, -0.049039f, 0.013788f, 0.065855f, -0.008593f, -0.013061f, -0.065106f, - -0.039205f, 0.031279f, -0.051391f, -0.028022f, 0.011514f, 0.012812f, -0.016036f, 0.042325f, 0.039942f, -0.041555f, 0.015230f, 0.022829f, 0.066343f, 0.060752f, -0.009853f, 0.019730f, -0.001841f, 0.069487f, 0.030077f, 0.028052f, 0.065826f, -0.029709f, -0.043375f, -0.022323f, -0.055467f, 0.046365f, 0.021744f, 0.022538f, 0.011864f, 0.078831f, -0.052576f, -0.012444f, 0.033521f, -0.018893f, 0.037224f, -0.002036f, 0.004140f, 0.017211f, -0.045951f, -0.069531f, 0.008481f, 0.013119f, 0.075973f, 0.057773f, 0.001144f, -0.056466f, -0.009153f, -0.061654f, -0.000621f, -0.002172f, -0.017521f, -0.015968f, 0.008065f, -0.005540f, -0.004904f, -0.015810f, -0.010412f, -0.014070f, -0.008541f, 0.001894f, -0.016747f, -0.015259f, -0.002801f, 0.015099f, 0.007527f, -0.020205f, 0.017843f, -0.010355f, 0.033375f, -0.010784f, -0.030270f, -0.011223f, 0.014591f, -0.009532f, -0.023050f, 0.025722f, -0.005925f, -0.023929f, -0.037007f, 0.005430f, -0.006242f, 0.004077f, 0.007751f, -0.014327f, -0.012407f, -0.032336f, -0.007495f, -0.008718f, 0.001883f, 0.005709f, 0.011442f, 0.010022f, -0.024842f, 0.030442f, 0.051564f, 0.045045f, - 0.046394f, 0.059658f, -0.033970f, 0.047043f, -0.091227f, -0.039720f, 0.034836f, 0.008468f, 0.067011f, 0.030740f, 0.057177f, -0.024539f, 0.007751f, -0.049200f, 0.033768f, 0.055654f, 0.050601f, 0.005331f, 0.035920f, -0.087577f, -0.056999f, 0.054777f, 0.016072f, -0.054487f, -0.028091f, 0.006955f, 0.080742f, 0.025135f, -0.032600f, -0.041109f, 0.008381f, -0.011815f, 0.049723f, 0.053756f, -0.005116f, -0.008435f, 0.010792f, -0.014919f, 0.064248f, 0.018677f, -0.015042f, 0.013168f, -0.030346f, -0.017847f, -0.143442f, -0.048558f, 0.025746f, -0.022212f, -0.021346f, -0.000453f, -0.025763f, -0.025692f, 0.065955f, 0.044285f, -0.033011f, 0.060268f, 0.124550f, 0.025826f, 0.088753f, 0.012494f, 0.018143f, 0.065254f, 0.043075f, -0.034776f, -0.039589f, -0.069665f, -0.043326f, -0.004354f, -0.068841f, 0.025803f, -0.008181f, -0.066536f, -0.047770f, -0.047539f, -0.059920f, -0.036197f, -0.024013f, -0.031691f, 0.009558f, 0.057217f, 0.069673f, 0.036921f, -0.007130f, -0.050484f, -0.006370f, 0.002242f, 0.004421f, -0.024452f, -0.004326f, -0.016424f, 0.013682f, 0.019870f, 0.002258f, 0.014630f, -0.000378f, -0.009574f, - 0.016710f, -0.017664f, 0.002341f, 0.016113f, 0.034142f, 0.004984f, -0.000254f, 0.023287f, 0.009786f, 0.061949f, -0.015395f, -0.049838f, -0.002540f, 0.034173f, 0.006078f, -0.013322f, -0.015252f, -0.040445f, -0.038535f, -0.021507f, -0.015327f, -0.006754f, -0.023133f, -0.033091f, -0.035554f, -0.019134f, -0.002866f, 0.005275f, 0.047119f, 0.034474f, -0.012640f, 0.055218f, 0.097466f, 0.067844f, 0.047458f, 0.030070f, 0.018621f, -0.023546f, -0.015548f, -0.023476f, -0.021704f, -0.000847f, 0.057124f, -0.005855f, 0.048577f, -0.030865f, 0.013199f, -0.106631f, 0.030484f, -0.015906f, 0.055338f, -0.013332f, -0.063634f, 0.064683f, -0.023824f, 0.010199f, 0.036976f, 0.027737f, 0.059257f, -0.008637f, 0.009336f, -0.010855f, 0.067512f, -0.013911f, 0.013125f, 0.047114f, -0.053502f, 0.046463f, -0.013096f, 0.028564f, 0.045120f, -0.011677f, 0.010450f, 0.007850f, 0.005038f, -0.014057f, 0.020357f, 0.019707f, -0.007434f, -0.025905f, -0.004392f, -0.030258f, -0.009561f, -0.005448f, 0.025540f, -0.012482f, -0.048289f, -0.031707f, 0.051834f, 0.052352f, -0.048621f, -0.040697f, 0.061979f, 0.072763f, -0.027487f, -0.006729f, - 0.052575f, 0.002555f, 0.027276f, 0.038379f, -0.087099f, -0.025430f, -0.005478f, 0.085313f, 0.008252f, -0.005564f, -0.082978f, 0.017040f, 0.033249f, 0.021964f, 0.003435f, 0.022938f, 0.009097f, 0.012074f, 0.106852f, -0.002778f, 0.006043f, 0.063134f, -0.037074f, 0.042119f, 0.008239f, 0.031908f, 0.020931f, -0.047762f, -0.015477f, 0.057921f, 0.038453f, 0.022511f, -0.013182f, 0.020591f, 0.010458f, 0.000507f, 0.008061f, 0.015157f, -0.006552f, 0.025564f, -0.016036f, -0.003875f, 0.026252f, 0.015822f, 0.005656f, -0.053586f, 0.005285f, 0.027319f, -0.019920f, 0.010109f, -0.047679f, -0.029901f, 0.034182f, 0.017014f, 0.028176f, 0.024832f, -0.018758f, -0.052060f, -0.014290f, 0.018689f, 0.046286f, 0.028550f, -0.006437f, -0.009456f, -0.015726f, 0.038450f, -0.000332f, -0.006878f, -0.015043f, 0.020739f, 0.008796f, -0.007481f, -0.037951f, -0.023465f, 0.024581f, 0.024977f, 0.017565f, -0.025548f, -0.036684f, 0.019389f, 0.049093f, 0.023615f, 0.003585f, -0.023588f, -0.005694f, 0.012311f, -0.000434f, 0.001901f, 0.002856f, -0.005002f, -0.011256f, 0.061482f, -0.104279f, -0.007253f, -0.088235f, -0.081790f, - 0.020487f, 0.017175f, 0.014917f, 0.001991f, 0.077707f, 0.044245f, 0.100062f, 0.109494f, -0.012094f, -0.053951f, 0.011408f, -0.014705f, -0.010045f, 0.023662f, 0.010580f, -0.008866f, -0.050459f, -0.055246f, 0.059755f, 0.027531f, -0.006813f, 0.009060f, 0.009712f, 0.005385f, 0.011008f, -0.005762f, -0.014308f, -0.081668f, 0.001797f, 0.046664f, -0.013710f, -0.063000f, -0.020601f, 0.051438f, -0.095714f, -0.033103f, 0.060569f, 0.036449f, 0.072333f, -0.002291f, 0.005322f, -0.066876f, -0.067256f, -0.085021f, 0.071464f, 0.100871f, -0.133084f, -0.066600f, -0.006885f, 0.067371f, -0.052735f, -0.008875f, 0.122216f, 0.049399f, 0.031086f, 0.080545f, 0.059175f, 0.088440f, -0.031924f, 0.087922f, -0.013308f, -0.069517f, -0.101639f, -0.024188f, 0.039129f, -0.080960f, -0.015638f, 0.017013f, -0.016861f, -0.028745f, 0.017365f, 0.015209f, -0.055282f, 0.040953f, 0.020397f, 0.059671f, -0.014269f, -0.059231f, 0.073570f, 0.014432f, -0.066689f, -0.000036f, -0.015352f, 0.027458f, -0.029397f, -0.030818f, -0.015368f, -0.003551f, -0.000735f, -0.023486f, -0.027658f, 0.021211f, -0.028859f, -0.000708f, -0.028510f, 0.015350f, - 0.027599f, 0.003833f, 0.041139f, 0.027570f, -0.040878f, -0.015819f, 0.000308f, -0.037530f, 0.006501f, -0.006770f, 0.015023f, -0.010269f, 0.013289f, 0.035258f, 0.000427f, 0.006387f, -0.024754f, 0.037951f, 0.024825f, -0.027755f, -0.007643f, 0.026904f, 0.026166f, -0.004353f, -0.039218f, -0.005694f, -0.077324f, 0.059457f, -0.005108f, 0.018136f, 0.022976f, 0.022242f, 0.000670f, -0.026107f, 0.042154f, 0.010516f, 0.040687f, -0.008838f, -0.086497f, -0.007923f, 0.024896f, -0.028492f, -0.031705f, -0.019447f, -0.029228f, 0.035140f, -0.009109f, -0.030800f, -0.001807f, 0.032686f, -0.044092f, 0.030771f, -0.015337f, 0.016340f, -0.043435f, -0.010877f, 0.017524f, -0.003788f, -0.004056f, 0.005293f, 0.024294f, -0.004373f, -0.003992f, -0.030370f, 0.015061f, -0.008377f, 0.004832f, 0.009324f, 0.003149f, 0.022419f, -0.032931f, -0.025177f, 0.034419f, 0.029660f, -0.041339f, 0.019651f, -0.033413f, 0.038456f, -0.032283f, 0.014477f, 0.009913f, -0.027358f, 0.060495f, 0.005837f, -0.067365f, 0.030990f, 0.008127f, -0.052128f, 0.029198f, -0.019166f, 0.031100f, -0.045199f, 0.023151f, -0.047875f, 0.021938f, 0.033992f, - -0.030831f, 0.017632f, -0.032757f, 0.001105f, 0.001094f, 0.003091f, -0.021528f, 0.000384f, 0.016381f, -0.000952f, -0.029569f, 0.022272f, -0.018529f, -0.039821f, 0.017137f, -0.017697f, 0.008663f, 0.018497f, -0.014082f, -0.008539f, 0.003331f, -0.002642f, 0.012028f, -0.006342f, -0.004392f, 0.010704f, 0.013645f, 0.004556f, -0.013721f, -0.008220f, 0.013178f, 0.007860f, -0.031051f, 0.028322f, -0.004067f, -0.010637f, 0.003956f, -0.002252f, 0.006706f, 0.015179f, -0.003754f, 0.028774f, -0.008501f, -0.012555f, -0.014037f, -0.005666f, 0.002773f, -0.013649f, 0.003632f, -0.004655f, -0.005547f, 0.003448f, 0.004660f, -0.005693f, -0.000129f, -0.001629f, -0.006021f, 0.005862f, 0.003961f, -0.006682f, 0.018012f, 0.038617f, -0.017628f, -0.206704f, -0.373995f, -0.123498f, -0.289581f, -0.286461f, 0.156174f, 0.033446f, 0.216722f, 0.488154f, 0.439969f, 0.360973f, 0.440603f, 0.270119f, 0.061316f, 0.085799f, -0.061285f, -0.324961f, -0.321177f, -0.240027f, -0.312042f, -0.213567f, -0.043257f, -0.143750f, -0.198812f, -0.085590f, -0.023782f, -0.102735f, -0.048243f, -0.000803f, -0.050768f, -0.091304f, 0.020676f, 0.081163f, - -0.025857f, 0.112159f, 0.166901f, 0.005302f, 0.033202f, 0.225292f, 0.112265f, 0.002591f, 0.211174f, 0.172922f, -0.039065f, 0.082536f, 0.197238f, -0.002508f, 0.017237f, 0.277902f, 0.149807f, 0.063027f, 0.335741f, 0.369898f, 0.182476f, 0.350739f, 0.435821f, 0.115215f, 0.059518f, 0.178240f, -0.069620f, -0.209103f, -0.121585f, -0.272455f, -0.484326f, -0.483215f, -0.548812f, -0.731184f, -0.736582f, -0.706680f, -0.723192f, -0.646882f, -0.554583f, -0.443939f, -0.290693f, -0.147320f, 0.072513f, 0.321037f, 0.422874f, 0.515930f, 0.698246f, 0.614282f, 0.549035f, 0.613342f, 0.452849f, 0.212002f, 0.248860f, 0.281244f, 0.104262f, 0.136066f, 0.281494f, 0.138665f, 0.026511f, 0.121241f, 0.109003f, -0.061265f, 0.000226f, 0.075983f, -0.111283f, -0.141916f, 0.032490f, -0.028065f, -0.046331f, 0.157076f, 0.134700f, 0.014209f, 0.122439f, 0.177756f, 0.031224f, -0.013237f, 0.009943f, -0.181776f, -0.329184f, -0.343646f, -0.438814f, -0.552043f, -0.523405f, -0.468011f, -0.426661f, -0.380236f, -0.279442f, -0.264826f, -0.289650f, -0.193693f, -0.063475f, 0.017640f, 0.071444f, 0.190000f, 0.227349f, 0.257519f, - 0.461124f, 0.537802f, 0.496705f, 0.458484f, 0.364995f, 0.231271f, 0.197783f, 0.168539f, 0.102917f, 0.073684f, 0.067664f, 0.027072f, -0.006517f, -0.009208f, -0.019947f, -0.040694f, -0.050921f, -0.041722f, -0.057807f, -0.078598f, -0.075995f, -0.073647f, -0.083311f, -0.079173f, -0.060201f, -0.048258f, -0.035726f, -0.029050f, -0.027559f} - }, - { - {-0.015794f, 0.001746f, 0.010395f, 0.003553f, 0.006774f, -0.009882f, -0.005415f, 0.000446f, -0.001751f, 0.002647f, 0.008233f, -0.019798f, -0.000139f, 0.006507f, 0.003909f, 0.005998f, -0.005732f, -0.008002f, 0.008653f, -0.000147f, 0.002412f, 0.005393f, 0.007160f, 0.002640f, 0.001494f, 0.006439f, -0.000951f, -0.002063f, -0.005565f, 0.002997f, -0.001566f, -0.000907f, -0.002889f, 0.003700f, 0.009419f, 0.000038f, -0.001957f, 0.004431f, -0.006025f, -0.009017f, -0.004983f, -0.001829f, -0.005847f, 0.000525f, -0.001352f, 0.003784f, -0.003648f, 0.001050f, -0.007316f, -0.000706f, -0.006016f, -0.000289f, -0.002755f, -0.002378f, 0.003063f, -0.003473f, -0.000353f, 0.004950f, -0.002603f, 0.005904f, 0.007157f, 0.000519f, 0.009674f, -0.004949f, -0.000330f, 0.004624f, -0.001673f, 0.003120f, 0.004397f, 0.002375f, -0.005088f, 0.002002f, 0.002329f, 0.001636f, 0.000310f, -0.004256f, 0.005646f, -0.001524f, 0.002698f, -0.000930f, -0.001169f, 0.000355f, -0.005874f, -0.000486f, -0.004564f, -0.002129f, -0.000200f, -0.000797f, -0.000156f, -0.000456f, -0.002453f, 0.002919f, 0.000342f, 0.000817f, 0.000205f, 0.001630f, - -0.000995f, 0.002059f, -0.000151f, 0.000876f, -0.000337f, -0.000898f, 0.001162f, 0.000112f, -0.000344f, -0.000026f, 0.001640f, 0.000351f, -0.000286f, 0.001011f, 0.000532f, -0.000212f, 0.026251f, -0.007436f, 0.002515f, -0.005746f, -0.000484f, -0.002412f, 0.003009f, 0.002020f, 0.008990f, 0.002747f, 0.001559f, 0.003467f, -0.002197f, -0.018175f, -0.017390f, -0.005452f, 0.002304f, 0.005295f, -0.004426f, 0.000966f, -0.005666f, -0.002040f, 0.000265f, 0.003053f, -0.007726f, -0.008417f, -0.002501f, -0.000562f, 0.004506f, 0.001462f, -0.001906f, -0.006085f, 0.001047f, -0.003364f, 0.000148f, 0.004212f, -0.006168f, 0.002924f, 0.005437f, -0.004293f, -0.011304f, -0.002974f, 0.004077f, -0.000701f, 0.003306f, -0.000580f, 0.002858f, -0.000554f, 0.003143f, 0.000588f, -0.010554f, 0.002043f, 0.004281f, -0.001693f, 0.002893f, 0.000466f, -0.000636f, -0.002115f, 0.000079f, -0.006230f, -0.000580f, -0.001731f, -0.007858f, -0.001348f, -0.000274f, 0.006926f, -0.006907f, 0.011411f, 0.013277f, 0.010443f, -0.004568f, -0.002153f, -0.002446f, 0.005048f, -0.001956f, -0.002900f, 0.003146f, -0.007564f, -0.006879f, 0.000809f, - 0.006046f, -0.000218f, -0.003105f, -0.006768f, -0.004007f, -0.005166f, -0.002738f, -0.004769f, 0.001744f, -0.002868f, -0.000787f, -0.003008f, -0.001592f, 0.000137f, 0.001554f, 0.000107f, 0.001600f, -0.001123f, 0.000096f, 0.001262f, 0.000650f, 0.000990f, 0.001005f, 0.000578f, -0.001275f, 0.001265f, -0.024789f, -0.000161f, -0.003823f, 0.001710f, -0.000856f, -0.012834f, -0.002455f, -0.002711f, 0.004011f, 0.006235f, -0.008592f, 0.006860f, -0.002188f, 0.004725f, 0.004748f, -0.002587f, 0.010320f, 0.000623f, 0.000458f, -0.001799f, 0.001793f, -0.002570f, 0.001905f, -0.002887f, 0.000385f, -0.006751f, 0.000725f, 0.007426f, 0.000001f, 0.003123f, 0.007831f, -0.007708f, -0.008113f, 0.003378f, -0.003684f, 0.006255f, -0.006335f, -0.001922f, -0.013247f, -0.010225f, -0.008852f, 0.003854f, 0.001143f, 0.004699f, -0.004812f, -0.003439f, -0.000999f, 0.008303f, -0.009197f, 0.003787f, 0.001606f, 0.000672f, 0.004666f, -0.003223f, -0.004212f, -0.005549f, 0.003384f, 0.001786f, -0.008135f, -0.008983f, -0.010428f, -0.000318f, -0.002238f, 0.003384f, -0.000471f, -0.001985f, 0.000980f, 0.001388f, 0.004670f, -0.012482f, - 0.001547f, 0.007083f, 0.010537f, 0.010800f, 0.008942f, -0.001591f, -0.006586f, 0.009678f, 0.002966f, 0.001865f, -0.004835f, 0.002784f, 0.002009f, 0.000278f, -0.001193f, -0.002885f, -0.000416f, 0.003298f, -0.002555f, -0.004256f, -0.001725f, -0.001843f, 0.000723f, -0.000374f, -0.001023f, 0.002872f, 0.000241f, 0.003672f, -0.000332f, 0.001043f, 0.002482f, 0.002300f, 0.001821f, 0.001291f, -0.001459f, -0.001652f, -0.000515f, 0.001442f, -0.000270f, 0.001408f, -0.000988f, 0.002478f, 0.002115f, -0.002198f, 0.000150f, 0.000151f, -0.003538f, 0.002666f, -0.014475f, 0.008990f, -0.007671f, 0.010713f, 0.013950f, 0.008697f, -0.000148f, 0.004142f, 0.000955f, 0.011425f, -0.006224f, -0.006252f, 0.003281f, -0.001735f, 0.004687f, 0.008794f, -0.012552f, 0.003999f, 0.011285f, 0.005323f, -0.000807f, -0.000088f, 0.001375f, -0.005237f, -0.000075f, -0.004948f, -0.006900f, -0.001799f, 0.010693f, -0.004006f, 0.004972f, -0.003700f, -0.006520f, 0.012800f, -0.011148f, 0.008595f, 0.009402f, 0.001863f, 0.005963f, -0.008260f, -0.002256f, -0.003269f, -0.002604f, 0.005969f, 0.001809f, -0.008884f, 0.001452f, -0.000857f, - 0.001690f, -0.001915f, 0.003206f, 0.003076f, 0.010663f, -0.011151f, 0.005375f, 0.004244f, -0.001122f, 0.004216f, 0.001180f, 0.006561f, 0.006139f, 0.003892f, -0.003603f, 0.005228f, 0.009229f, -0.000232f, 0.005409f, -0.003906f, 0.010941f, 0.011293f, 0.012395f, -0.003563f, -0.008682f, 0.002803f, -0.001211f, 0.004422f, 0.003190f, -0.000048f, -0.000659f, -0.012419f, -0.003251f, -0.002881f, -0.000985f, -0.002547f, -0.003730f, 0.004265f, 0.001632f, 0.001347f, 0.004997f, -0.000297f, 0.005053f, 0.003193f, 0.001634f, -0.000708f, 0.000867f, -0.001107f, -0.002125f, 0.001497f, 0.000374f, 0.002451f, -0.000742f, 0.000590f, -0.000169f, -0.001652f, 0.002749f, -0.000104f, -0.002371f, 0.000966f, 0.002226f, 0.000261f, -0.003086f, 0.000768f, -0.001431f, 0.004234f, 0.003094f, 0.003087f, -0.000355f, 0.000955f, 0.002409f, 0.000249f, 0.001236f, 0.020307f, -0.001861f, -0.006341f, 0.019317f, -0.007628f, 0.008681f, -0.004642f, -0.018446f, 0.003294f, -0.005298f, 0.000587f, 0.022136f, -0.008564f, -0.010459f, 0.000852f, 0.011647f, -0.018709f, -0.006924f, 0.014040f, -0.004913f, 0.004537f, 0.006662f, -0.005008f, - 0.006067f, -0.003915f, -0.006454f, 0.001304f, -0.001796f, -0.002277f, -0.002368f, 0.007821f, -0.006237f, 0.015232f, 0.003834f, 0.000325f, -0.008700f, -0.002596f, 0.009354f, -0.010696f, 0.002316f, 0.003698f, -0.001627f, -0.014914f, 0.010241f, 0.002705f, 0.002553f, 0.001314f, -0.002008f, 0.007685f, -0.004519f, 0.010510f, 0.006039f, -0.004101f, -0.018117f, 0.008073f, 0.004927f, -0.000464f, -0.005091f, 0.004375f, 0.011785f, 0.011898f, -0.001246f, 0.007032f, -0.010651f, 0.007768f, -0.001835f, -0.003714f, 0.004699f, 0.009197f, -0.006406f, 0.009103f, 0.001701f, -0.003877f, -0.003153f, 0.007420f, -0.006161f, 0.017647f, -0.009022f, 0.007290f, -0.006037f, 0.001563f, -0.005386f, 0.007043f, -0.006266f, 0.000288f, 0.004104f, -0.001254f, 0.000848f, -0.005490f, -0.001784f, -0.000783f, 0.000108f, 0.001457f, -0.002294f, 0.003033f, -0.000225f, -0.002174f, 0.003207f, -0.006303f, -0.006239f, -0.003650f, 0.000193f, -0.000661f, -0.001178f, 0.000138f, -0.004224f, 0.005235f, 0.000431f, -0.000395f, 0.003792f, -0.003085f, -0.000520f, 0.004120f, 0.001888f, 0.001410f, 0.006734f, 0.006037f, 0.019075f, 0.002528f, - -0.004801f, -0.024364f, 0.007548f, 0.013842f, 0.008288f, 0.005421f, -0.002042f, 0.007051f, 0.026540f, -0.003211f, 0.012274f, 0.001214f, 0.006875f, 0.002627f, 0.000505f, 0.005333f, -0.002199f, -0.011318f, -0.003147f, -0.008410f, -0.002171f, -0.011868f, 0.004309f, 0.000364f, 0.013939f, 0.002744f, -0.006451f, 0.004617f, -0.001951f, -0.003385f, 0.008943f, 0.003221f, 0.006690f, 0.003912f, -0.003829f, -0.015506f, 0.000985f, 0.009052f, -0.000591f, -0.002955f, 0.004078f, -0.008181f, -0.003464f, -0.014440f, -0.017892f, 0.009314f, 0.010365f, 0.008104f, -0.002506f, -0.002911f, 0.000163f, -0.000269f, 0.005317f, -0.000877f, 0.005821f, 0.005228f, -0.000142f, 0.005388f, -0.004947f, 0.001482f, -0.002595f, 0.003216f, 0.003925f, 0.016878f, 0.000081f, 0.013821f, -0.005137f, -0.014118f, -0.001248f, -0.001862f, -0.005347f, 0.011345f, -0.000861f, 0.004725f, 0.001094f, -0.007998f, -0.009642f, -0.003355f, -0.002001f, 0.001153f, 0.010013f, 0.003348f, 0.001119f, 0.004292f, 0.006735f, -0.002739f, 0.005097f, -0.000510f, 0.004349f, 0.002779f, 0.001150f, 0.006038f, -0.000570f, 0.003567f, 0.002063f, 0.001889f, - -0.001009f, -0.001479f, -0.003392f, -0.001482f, 0.003576f, 0.005477f, -0.001247f, 0.000566f, -0.002942f, -0.000340f, 0.000301f, -0.002907f, 0.002236f, -0.005556f, 0.000316f, -0.000180f, 0.000082f, 0.008777f, -0.021629f, -0.000712f, 0.022024f, 0.030280f, -0.012587f, 0.003398f, 0.004803f, -0.010524f, -0.006144f, 0.001186f, -0.008783f, -0.009151f, 0.021191f, 0.002958f, -0.014071f, -0.002249f, -0.009188f, -0.005236f, 0.013777f, -0.004344f, -0.006126f, 0.012505f, 0.007716f, 0.012634f, -0.005387f, 0.002593f, 0.012323f, 0.000534f, -0.007428f, 0.003369f, -0.001092f, 0.001528f, -0.015645f, -0.010664f, 0.004651f, -0.001126f, 0.003699f, -0.014404f, 0.006735f, 0.005246f, 0.003344f, -0.025382f, -0.014872f, -0.006449f, -0.003193f, 0.003585f, -0.011114f, -0.007443f, 0.002463f, 0.019415f, 0.012787f, 0.006860f, -0.003468f, -0.002162f, -0.007375f, 0.005585f, -0.002153f, -0.014414f, -0.011011f, -0.001363f, -0.000243f, 0.020332f, 0.011264f, -0.010126f, -0.011288f, 0.014043f, 0.002799f, -0.008534f, 0.000071f, 0.012595f, 0.004781f, 0.000330f, -0.016461f, 0.018071f, -0.006386f, 0.012030f, 0.015834f, 0.016621f, - 0.001471f, -0.006206f, -0.005007f, 0.008512f, 0.009815f, -0.008642f, 0.006902f, 0.009253f, 0.006580f, -0.002902f, -0.002206f, 0.001257f, 0.005659f, 0.004567f, -0.004913f, -0.007686f, -0.007166f, 0.003475f, -0.003435f, -0.002334f, -0.004970f, -0.001065f, -0.003560f, 0.001764f, -0.002936f, 0.002116f, 0.001747f, -0.000661f, 0.000015f, 0.004000f, -0.002968f, -0.006158f, -0.001086f, 0.005494f, -0.003352f, -0.003099f, -0.003171f, -0.002366f, -0.000386f, -0.000216f, -0.003744f, -0.000210f, -0.002722f, -0.001431f, 0.001050f, 0.003631f, -0.002440f, -0.000214f, -0.000783f, -0.001767f, 0.003430f, 0.004161f, -0.005866f, 0.008976f, -0.011464f, 0.013098f, -0.001200f, -0.003540f, 0.006965f, -0.013216f, 0.004515f, 0.007207f, 0.001448f, 0.005038f, 0.006239f, -0.003569f, 0.014592f, -0.006859f, -0.024902f, -0.014807f, -0.003276f, 0.000985f, -0.005276f, -0.010629f, -0.011636f, -0.007887f, 0.024461f, -0.006778f, -0.001930f, 0.003543f, -0.005084f, 0.002933f, 0.020067f, -0.009641f, 0.009525f, -0.006244f, -0.012900f, 0.011573f, 0.008349f, 0.005348f, 0.017985f, 0.000421f, 0.008471f, -0.000768f, 0.002148f, -0.000685f, - -0.005907f, 0.003983f, -0.001367f, 0.013048f, 0.002606f, -0.008955f, -0.002307f, -0.002568f, -0.000613f, -0.014609f, 0.005885f, -0.014402f, 0.003511f, 0.019433f, -0.012653f, -0.024240f, 0.005638f, 0.003388f, 0.011134f, -0.004894f, -0.000219f, 0.011382f, -0.006998f, 0.005592f, 0.008381f, 0.002378f, -0.005082f, 0.011240f, 0.002429f, 0.014426f, 0.003068f, -0.008910f, -0.008459f, 0.009386f, 0.015746f, 0.005565f, -0.000132f, -0.012908f, -0.002601f, -0.004128f, 0.009350f, 0.002399f, -0.017663f, 0.002821f, 0.004712f, 0.001336f, 0.001812f, 0.006913f, -0.003085f, 0.002942f, -0.004801f, 0.003070f, 0.002790f, 0.002263f, 0.003649f, 0.001629f, 0.002425f, 0.002240f, -0.004056f, 0.001383f, -0.001212f, -0.000593f, 0.004043f, 0.001734f, 0.002272f, 0.004571f, -0.001331f, -0.014134f, 0.001423f, -0.000893f, 0.001100f, -0.001230f, -0.000814f, 0.004021f, 0.002666f, -0.002224f, -0.002620f, -0.019393f, 0.044543f, -0.010482f, 0.019977f, 0.001819f, 0.008302f, 0.005986f, -0.000182f, -0.025069f, 0.021210f, -0.031237f, 0.010021f, 0.007408f, 0.028028f, -0.013240f, 0.012593f, -0.019901f, 0.012882f, -0.006489f, - -0.021423f, -0.010308f, 0.004960f, 0.005394f, 0.007732f, 0.003893f, 0.011151f, 0.007269f, 0.016939f, -0.005353f, -0.014000f, -0.012634f, 0.004821f, -0.000235f, -0.006951f, 0.011298f, 0.004898f, -0.002421f, 0.006717f, 0.014003f, -0.001370f, 0.003557f, -0.002177f, 0.006877f, 0.004029f, -0.018134f, -0.007920f, -0.023732f, -0.005514f, -0.004110f, -0.000619f, 0.011251f, 0.010027f, 0.001406f, -0.006600f, -0.000229f, -0.003629f, -0.005714f, 0.003083f, 0.033157f, 0.002918f, -0.000831f, 0.010499f, -0.000902f, 0.012040f, -0.005306f, 0.000080f, -0.008004f, 0.033290f, 0.007760f, -0.013795f, -0.015806f, -0.010569f, 0.001197f, -0.000782f, -0.021449f, 0.001122f, 0.004289f, 0.001396f, 0.023171f, -0.006108f, 0.003309f, -0.014501f, -0.004851f, -0.039293f, -0.006905f, 0.001979f, 0.001377f, -0.015131f, 0.003820f, -0.007304f, 0.004795f, 0.002230f, -0.007260f, -0.000930f, 0.005028f, 0.007917f, 0.014684f, 0.003854f, -0.005523f, -0.005119f, -0.012053f, -0.004677f, 0.000983f, 0.001945f, -0.006992f, -0.002665f, 0.006322f, 0.002251f, -0.001921f, -0.001685f, -0.005221f, -0.004786f, -0.002445f, 0.001320f, -0.010070f, - -0.007060f, 0.001712f, 0.003935f, -0.000106f, -0.002595f, 0.002314f, 0.008102f, 0.001212f, 0.000620f, -0.000838f, -0.003598f, 0.000093f, -0.011649f, 0.023428f, 0.002111f, 0.019520f, 0.011883f, 0.019145f, 0.006478f, -0.019181f, 0.018998f, -0.012240f, 0.032800f, -0.021043f, -0.006165f, -0.029143f, -0.006088f, -0.003003f, 0.013089f, -0.013503f, 0.019165f, 0.015487f, -0.009182f, 0.001185f, 0.021899f, 0.030809f, -0.009705f, 0.000875f, -0.003936f, 0.009725f, 0.000218f, -0.003492f, 0.004523f, 0.008517f, -0.014570f, 0.011137f, 0.002164f, 0.012754f, 0.004893f, 0.002031f, -0.024935f, -0.003940f, 0.029061f, -0.003372f, 0.009762f, 0.022333f, 0.006470f, -0.001629f, -0.007711f, -0.010145f, -0.006086f, 0.001115f, -0.009487f, -0.005622f, 0.016856f, 0.015641f, 0.004920f, 0.025911f, 0.017189f, -0.005308f, -0.002539f, 0.003633f, 0.006017f, -0.007791f, -0.020547f, 0.026942f, 0.011845f, -0.005411f, 0.024591f, 0.025787f, 0.028649f, 0.012514f, 0.004336f, -0.010284f, 0.000738f, -0.014430f, -0.011643f, -0.007320f, -0.028709f, 0.011628f, -0.003638f, 0.024588f, -0.005811f, -0.019152f, -0.003630f, 0.001938f, - -0.002864f, -0.025580f, 0.004092f, 0.006939f, 0.011672f, 0.012463f, -0.008694f, 0.004070f, -0.005947f, -0.016607f, 0.003254f, 0.006549f, -0.001315f, -0.004853f, -0.012635f, 0.013295f, 0.007421f, -0.011698f, -0.013414f, -0.007408f, 0.007620f, -0.001284f, -0.003856f, 0.003650f, -0.006005f, 0.003780f, -0.001595f, 0.002359f, 0.005703f, -0.008448f, -0.004053f, 0.003890f, -0.001903f, 0.000224f, 0.017023f, 0.005675f, 0.001040f, -0.001093f, 0.003956f, -0.005626f, -0.003355f, -0.000488f, 0.005475f, 0.025513f, 0.001453f, 0.004616f, -0.003894f, 0.002056f, -0.003333f, -0.038799f, 0.004439f, -0.000435f, -0.007015f, -0.002951f, -0.019090f, 0.021785f, 0.022359f, 0.024989f, -0.040701f, 0.013060f, 0.008363f, 0.000952f, 0.040053f, 0.016394f, -0.019987f, -0.002395f, 0.039546f, 0.004604f, 0.007025f, 0.008008f, -0.011669f, 0.006540f, 0.008126f, 0.024509f, 0.012443f, -0.018872f, -0.030954f, 0.011624f, 0.007301f, -0.015661f, -0.002960f, 0.001428f, -0.019038f, 0.002088f, 0.023183f, 0.009805f, 0.012985f, 0.018771f, 0.030512f, 0.002804f, 0.026873f, 0.005228f, -0.010700f, -0.001642f, -0.015936f, -0.008422f, - 0.006645f, 0.009015f, 0.006953f, 0.013425f, -0.019154f, -0.008748f, 0.034263f, -0.002637f, -0.007381f, -0.019258f, 0.016243f, 0.014624f, 0.005089f, 0.006046f, -0.000279f, 0.009340f, -0.014917f, 0.024364f, -0.012347f, -0.014726f, -0.011915f, -0.008304f, 0.033177f, 0.008820f, 0.006902f, -0.036247f, -0.019867f, -0.029828f, 0.002151f, -0.003325f, -0.002950f, -0.028315f, -0.039134f, -0.001291f, 0.017566f, -0.009833f, 0.004996f, -0.002752f, -0.002694f, 0.009634f, -0.013640f, -0.006031f, -0.006228f, 0.011662f, 0.001954f, -0.008935f, -0.000154f, -0.001626f, -0.000237f, -0.004366f, -0.008219f, 0.001807f, 0.013067f, -0.006611f, -0.004314f, -0.008636f, -0.003833f, -0.006131f, -0.002899f, 0.005465f, -0.001945f, 0.008786f, -0.003003f, -0.002236f, -0.005206f, -0.004128f, 0.013743f, -0.001711f, -0.000940f, -0.006807f, -0.001059f, 0.007824f, 0.002213f, -0.010321f, 0.002248f, 0.000443f, 0.002894f, 0.036084f, 0.042466f, -0.011000f, 0.011856f, -0.003204f, -0.012551f, 0.002366f, -0.028620f, -0.017712f, -0.001360f, -0.005834f, 0.056985f, -0.025782f, 0.007204f, -0.036366f, -0.005434f, 0.022051f, -0.009410f, -0.020280f, - -0.021290f, -0.007835f, 0.008630f, 0.011194f, -0.001525f, -0.001901f, -0.023917f, 0.005533f, 0.016563f, 0.008336f, 0.010114f, 0.002968f, 0.003622f, -0.013980f, -0.004657f, 0.009243f, 0.003315f, -0.000101f, 0.000948f, -0.016847f, 0.007367f, -0.017726f, -0.002966f, -0.000543f, 0.005029f, -0.019674f, -0.002122f, 0.009526f, 0.013959f, -0.022407f, -0.011816f, 0.039564f, -0.015339f, -0.031337f, 0.026162f, -0.025513f, -0.008123f, -0.011335f, -0.004672f, -0.019608f, -0.013649f, -0.004188f, -0.019775f, -0.028161f, 0.045160f, 0.024888f, 0.020067f, 0.013716f, -0.017693f, -0.006963f, -0.011970f, 0.012631f, -0.021416f, 0.015007f, -0.011481f, 0.006401f, 0.015058f, 0.009800f, 0.002966f, -0.029003f, 0.028223f, -0.034630f, -0.009173f, -0.033577f, -0.013707f, 0.021952f, -0.001395f, 0.012413f, 0.025225f, 0.007961f, -0.002687f, 0.004840f, -0.008966f, 0.000395f, -0.002813f, -0.009681f, 0.011330f, -0.004083f, -0.005416f, 0.012985f, 0.006825f, -0.003578f, 0.000780f, 0.000494f, 0.001969f, -0.006010f, 0.005589f, 0.001683f, 0.002960f, -0.007173f, 0.004706f, -0.003393f, 0.012297f, -0.005675f, 0.008657f, -0.002776f, - -0.004448f, 0.013033f, -0.008917f, -0.003951f, -0.007990f, 0.005177f, 0.012895f, 0.005873f, -0.003831f, 0.006022f, -0.005370f, 0.006154f, 0.008937f, -0.009962f, -0.023798f, -0.001884f, 0.059742f, -0.026889f, 0.025927f, -0.053558f, 0.014627f, -0.034078f, -0.006454f, 0.018868f, -0.001773f, 0.012061f, 0.019775f, 0.015751f, -0.023405f, 0.017298f, 0.003508f, 0.012758f, -0.005094f, 0.017741f, 0.016463f, -0.003753f, 0.003394f, 0.010618f, 0.012024f, -0.017288f, -0.005972f, -0.025162f, -0.003175f, 0.021956f, 0.000520f, -0.010618f, 0.002202f, 0.008038f, 0.001472f, -0.009245f, -0.017928f, 0.004410f, -0.012147f, 0.011411f, -0.011481f, 0.042421f, -0.004069f, -0.023282f, -0.026193f, 0.005748f, -0.014419f, 0.013258f, -0.029369f, -0.023064f, -0.029837f, 0.006706f, -0.025215f, -0.006134f, -0.036152f, 0.025636f, 0.005194f, 0.017203f, 0.010600f, -0.039040f, 0.002880f, -0.003619f, -0.014677f, -0.021881f, -0.006060f, -0.018654f, -0.023466f, -0.013025f, 0.010704f, 0.015244f, 0.022268f, -0.013055f, 0.003005f, 0.009554f, -0.032808f, 0.014856f, -0.022522f, -0.002186f, 0.018300f, 0.007698f, 0.007310f, 0.003278f, - 0.037729f, -0.021846f, -0.008115f, -0.008408f, 0.009784f, -0.032465f, 0.002409f, -0.002778f, -0.000479f, 0.020823f, 0.012018f, 0.010219f, 0.003580f, -0.008032f, 0.001102f, -0.004065f, 0.015075f, -0.006046f, -0.002157f, -0.008760f, 0.017108f, 0.006772f, -0.006274f, 0.004585f, -0.015535f, 0.010385f, 0.005165f, 0.008134f, 0.001118f, -0.003231f, 0.009480f, 0.017466f, 0.005773f, -0.008742f, -0.011945f, -0.004955f, 0.004223f, -0.012104f, -0.002975f, -0.018319f, -0.013493f, -0.007320f, -0.000277f, -0.010157f, 0.007016f, -0.008043f, 0.017517f, -0.014211f, -0.000583f, -0.000259f, -0.049756f, -0.014306f, 0.056098f, 0.049652f, 0.027957f, -0.023844f, 0.024659f, 0.037169f, -0.024390f, 0.032851f, -0.026262f, 0.030342f, 0.007255f, -0.001896f, 0.010088f, -0.000521f, 0.016033f, -0.023743f, -0.006654f, -0.010643f, 0.012246f, -0.022507f, -0.020200f, 0.031952f, -0.002932f, -0.006511f, 0.003143f, -0.030638f, -0.000547f, 0.049603f, 0.027122f, 0.005748f, -0.000330f, 0.010663f, 0.046958f, 0.020099f, 0.000858f, 0.008007f, -0.012811f, -0.005446f, -0.011006f, 0.020228f, -0.010281f, 0.013547f, 0.002684f, 0.024137f, - -0.028318f, -0.000489f, -0.001560f, 0.000841f, -0.007872f, 0.013515f, 0.021734f, -0.004981f, -0.005983f, 0.021880f, 0.002658f, 0.002801f, 0.049508f, 0.007861f, 0.000836f, -0.022515f, 0.010150f, -0.016724f, 0.023021f, -0.026336f, -0.023244f, 0.003676f, -0.022892f, -0.024572f, -0.037477f, 0.010173f, -0.012389f, 0.019511f, -0.006202f, 0.011043f, -0.054813f, 0.011285f, -0.018415f, -0.033287f, 0.017569f, 0.023104f, 0.012256f, 0.007197f, 0.004381f, 0.009729f, 0.014907f, -0.007054f, -0.008311f, -0.010064f, -0.000442f, -0.011046f, 0.007166f, 0.001515f, -0.015669f, -0.010926f, 0.009339f, 0.005478f, 0.000952f, 0.016300f, -0.005446f, -0.001652f, -0.012699f, -0.002699f, 0.000336f, 0.006777f, 0.004516f, -0.010836f, -0.006395f, -0.002971f, -0.012850f, -0.002443f, -0.012047f, 0.004988f, 0.003615f, 0.014661f, 0.010258f, -0.001008f, -0.005635f, 0.000020f, 0.000389f, -0.004152f, -0.000609f, -0.015267f, -0.002421f, 0.006278f, 0.007093f, 0.001952f, -0.002269f, 0.014743f, 0.002768f, 0.041585f, -0.064002f, 0.026849f, 0.027988f, -0.045500f, -0.004644f, -0.038988f, -0.012868f, -0.035003f, -0.015833f, 0.040028f, - -0.013710f, -0.002938f, -0.028158f, -0.005471f, 0.006460f, -0.041740f, -0.001633f, 0.026646f, -0.051533f, 0.001879f, -0.035189f, -0.019008f, 0.000698f, 0.003779f, -0.023308f, -0.018734f, -0.019532f, -0.005647f, -0.016794f, -0.001101f, 0.008933f, -0.005087f, 0.013063f, -0.025159f, -0.016035f, 0.033556f, -0.015720f, 0.018160f, -0.019992f, 0.018894f, 0.017306f, 0.002928f, 0.004612f, 0.017595f, 0.000827f, 0.025084f, 0.031775f, -0.006022f, 0.004700f, 0.047189f, 0.002799f, 0.024233f, -0.001711f, -0.018826f, -0.037234f, 0.006219f, 0.025852f, -0.041114f, 0.000538f, -0.024192f, -0.012694f, -0.053306f, 0.023017f, 0.035111f, -0.009190f, 0.016897f, -0.008628f, 0.038185f, 0.042307f, -0.003444f, -0.041893f, -0.040750f, 0.058057f, -0.045263f, 0.016938f, 0.006657f, 0.006034f, 0.043389f, -0.018494f, 0.070717f, -0.001179f, -0.016101f, -0.018441f, -0.012820f, 0.011322f, -0.004491f, -0.005395f, -0.000486f, 0.018285f, -0.004598f, -0.011488f, 0.015264f, -0.005514f, 0.007670f, -0.014063f, -0.008549f, 0.013391f, 0.000973f, 0.020008f, -0.006658f, 0.008525f, -0.014775f, -0.004190f, -0.020198f, 0.004182f, 0.008145f, - 0.010006f, 0.001877f, 0.010280f, 0.000917f, -0.003124f, 0.010849f, -0.017037f, 0.011225f, -0.014447f, -0.005228f, 0.008805f, -0.017842f, -0.004467f, -0.010268f, -0.029805f, -0.008062f, 0.001985f, 0.010710f, -0.014544f, -0.007664f, -0.012786f, -0.004247f, 0.003156f, 0.011733f, 0.069500f, 0.078326f, -0.004630f, -0.059078f, 0.058345f, -0.064588f, 0.009098f, 0.027386f, 0.006784f, -0.006916f, -0.029804f, 0.033553f, -0.015028f, -0.012028f, -0.030351f, -0.017654f, -0.009468f, -0.037882f, -0.020849f, -0.016933f, -0.009481f, -0.006227f, 0.026299f, -0.000387f, 0.022730f, 0.000167f, -0.009836f, -0.033182f, -0.036358f, -0.009182f, -0.001335f, -0.000490f, -0.005528f, -0.013592f, -0.015713f, 0.017391f, 0.041859f, -0.022751f, 0.014412f, -0.014206f, -0.014649f, 0.016632f, -0.016228f, -0.026274f, 0.058768f, -0.006493f, 0.005395f, 0.002883f, -0.032852f, -0.007224f, -0.006899f, 0.016648f, -0.042438f, -0.018792f, 0.044870f, 0.007216f, -0.019092f, 0.024390f, 0.045602f, -0.025947f, -0.032138f, 0.016689f, -0.027246f, 0.000441f, -0.050983f, 0.016454f, 0.043327f, -0.004436f, 0.022591f, 0.013199f, 0.007565f, 0.049718f, - 0.015589f, -0.000220f, 0.028651f, -0.004160f, -0.003993f, 0.017548f, 0.018783f, -0.072101f, 0.006572f, -0.031355f, 0.025477f, -0.001172f, 0.000959f, 0.017939f, -0.005449f, -0.006882f, -0.009508f, 0.009666f, 0.003659f, -0.007045f, 0.009608f, -0.010309f, 0.001023f, -0.005467f, -0.013940f, 0.006411f, -0.006992f, 0.015597f, 0.008548f, -0.000238f, 0.000048f, 0.004300f, -0.004159f, 0.009247f, 0.004501f, 0.002910f, 0.003746f, -0.002586f, 0.003392f, -0.006206f, -0.012110f, -0.006604f, -0.003162f, 0.001695f, -0.015746f, 0.012829f, 0.008575f, 0.000671f, 0.004650f, -0.010526f, 0.014714f, 0.001832f, -0.008778f, 0.005388f, 0.006337f, -0.018804f, -0.003922f, 0.001926f, -0.001535f, 0.000306f, 0.003416f, 0.002396f, -0.095306f, -0.066752f, 0.027872f, -0.028275f, -0.026644f, -0.081070f, -0.023383f, 0.017315f, 0.006722f, -0.015950f, -0.045071f, -0.000557f, 0.022887f, -0.001648f, 0.003134f, 0.023710f, 0.042090f, -0.036457f, 0.095786f, -0.024620f, -0.031763f, -0.009653f, -0.005348f, 0.000460f, -0.037864f, 0.000892f, -0.006638f, 0.020254f, -0.012764f, 0.028655f, -0.011820f, -0.024338f, 0.010025f, 0.011829f, - -0.021724f, 0.023775f, -0.072903f, 0.000604f, -0.005803f, 0.029135f, 0.035229f, -0.025475f, 0.032855f, -0.012579f, 0.009420f, -0.015672f, -0.005230f, -0.009631f, 0.026295f, -0.003497f, 0.034610f, 0.054036f, -0.046984f, -0.013129f, 0.025385f, -0.031665f, 0.019203f, -0.035974f, -0.019832f, -0.017905f, -0.021056f, -0.036726f, -0.018820f, 0.017124f, 0.013997f, 0.028180f, 0.036579f, 0.026568f, -0.044286f, 0.005535f, 0.008206f, 0.010538f, 0.008957f, 0.028307f, -0.013855f, -0.029963f, 0.017150f, -0.007810f, -0.023411f, 0.004552f, -0.040110f, -0.016620f, -0.034941f, 0.003171f, 0.020593f, -0.012757f, 0.019792f, 0.010591f, -0.001197f, -0.007625f, -0.000592f, -0.031178f, -0.011692f, 0.010273f, 0.005178f, 0.006753f, 0.002145f, 0.003444f, 0.002771f, 0.009622f, 0.002610f, -0.020969f, -0.002948f, 0.003084f, -0.002132f, 0.005335f, -0.009608f, -0.008835f, -0.020470f, 0.005176f, 0.018050f, -0.020615f, -0.014473f, 0.010462f, -0.005242f, -0.021041f, 0.013755f, -0.010306f, -0.008441f, 0.012418f, -0.001000f, -0.004039f, -0.006469f, -0.009425f, -0.012480f, -0.013269f, -0.003472f, -0.011318f, -0.006760f, -0.005904f, - 0.008921f, -0.000778f, 0.013311f, -0.019820f, -0.064922f, 0.048994f, -0.083106f, 0.058402f, -0.008380f, -0.037176f, -0.031723f, -0.035409f, -0.023982f, -0.018671f, 0.001776f, 0.042813f, -0.003478f, -0.035904f, 0.038123f, 0.054033f, -0.082948f, -0.022159f, 0.005772f, -0.006874f, -0.012952f, -0.004167f, -0.011522f, -0.014755f, -0.024125f, 0.030754f, -0.010807f, -0.023043f, -0.039480f, -0.039243f, 0.038629f, 0.010044f, -0.007093f, -0.004297f, 0.000015f, -0.008677f, -0.010545f, 0.008490f, -0.034737f, 0.018887f, 0.039485f, 0.029466f, 0.018375f, 0.037693f, 0.043870f, -0.025269f, 0.009328f, -0.036359f, 0.039244f, -0.022519f, -0.006492f, -0.000271f, -0.057319f, 0.018539f, 0.047132f, 0.007972f, -0.019426f, -0.015826f, 0.061628f, -0.024898f, -0.026669f, 0.017233f, -0.062943f, -0.007428f, -0.031245f, 0.001272f, -0.061548f, 0.025624f, 0.010644f, 0.025110f, -0.099841f, -0.085674f, 0.013944f, -0.029996f, -0.020113f, -0.012484f, -0.066885f, 0.022033f, -0.039564f, -0.043194f, 0.032464f, -0.029102f, -0.017174f, 0.013773f, -0.007054f, -0.013152f, -0.002458f, -0.003721f, 0.013942f, -0.033061f, -0.015605f, -0.031904f, - 0.000025f, -0.014079f, 0.006346f, -0.004666f, -0.025178f, -0.010418f, 0.008819f, -0.001749f, 0.001779f, 0.006601f, -0.027566f, 0.003395f, -0.034917f, 0.015948f, 0.005258f, -0.025443f, 0.008033f, -0.030241f, -0.006524f, -0.011154f, 0.002235f, 0.015829f, -0.011913f, 0.016382f, -0.008835f, 0.027984f, -0.012889f, 0.017532f, -0.009880f, -0.003267f, -0.000919f, -0.003565f, 0.005698f, -0.003054f, -0.000022f, -0.002454f, -0.006395f, -0.000095f, 0.010090f, -0.002978f, -0.004353f, -0.003674f, 0.003227f, -0.003738f, -0.003795f, -0.002860f, -0.001803f, 0.000700f, -0.001797f, -0.001400f, -0.001607f, -0.003624f, -0.001504f, 0.001738f, -0.000079f, 0.006110f, 0.073975f, -0.101856f, 0.104533f, 0.031038f, -0.003081f, 0.009055f, -0.074728f, 0.015996f, 0.035734f, -0.012739f, 0.089098f, -0.024780f, 0.038778f, -0.030724f, 0.098104f, -0.003003f, -0.012748f, -0.036829f, -0.013261f, 0.014797f, -0.009447f, 0.040164f, 0.031157f, -0.009835f, 0.003034f, -0.037866f, 0.015044f, 0.039798f, 0.040118f, -0.042723f, 0.018498f, -0.007999f, 0.042803f, -0.010938f, 0.027951f, -0.025065f, -0.019752f, -0.057168f, 0.004233f, -0.036014f, - -0.053725f, 0.077281f, -0.033716f, -0.006197f, -0.014330f, -0.017836f, 0.010657f, 0.006930f, 0.027392f, -0.012234f, 0.041928f, 0.004504f, 0.075873f, 0.029639f, 0.083952f, 0.071740f, -0.006876f, 0.048170f, 0.036550f, -0.011922f, 0.042955f, 0.058745f, -0.024778f, -0.057439f, 0.033234f, 0.022050f, 0.047690f, 0.025020f, -0.004526f, 0.000045f, -0.061940f, -0.005260f, -0.018168f, -0.021899f, 0.082691f, -0.008819f, -0.000820f, 0.103215f, 0.068676f, 0.037599f, 0.045899f, 0.024245f, 0.003003f, 0.012412f, 0.059572f, 0.001422f, -0.015552f, 0.018362f, 0.050057f, 0.024245f, 0.028549f, 0.014827f, 0.034642f, -0.001108f, 0.009993f, 0.013651f, 0.024260f, 0.009040f, 0.006174f, 0.005117f, 0.002763f, 0.020396f, 0.029470f, 0.013329f, 0.038942f, 0.003633f, 0.024036f, 0.024674f, 0.043898f, 0.000172f, 0.030050f, 0.027526f, 0.005700f, 0.023367f, 0.001252f, 0.005896f, -0.007431f, 0.010199f, 0.012206f, 0.006978f, 0.006321f, 0.002553f, -0.005249f, 0.002228f, 0.010276f, -0.004441f, 0.005581f, 0.020975f, -0.004400f, 0.031791f, -0.071480f, 0.137238f, -0.018617f, -0.015274f, -0.008751f, 0.099843f, - -0.061311f, 0.050075f, -0.067126f, 0.063600f, 0.012884f, -0.012418f, 0.001639f, 0.037243f, -0.015994f, 0.034719f, -0.016124f, -0.000331f, 0.070161f, 0.021485f, -0.017938f, -0.000307f, 0.017537f, 0.013717f, -0.068005f, 0.018088f, -0.024747f, -0.006255f, -0.035813f, 0.034580f, 0.033009f, 0.005027f, 0.015682f, 0.058436f, -0.019369f, -0.093354f, 0.022362f, 0.060885f, -0.023579f, -0.061466f, 0.016375f, 0.043521f, 0.014898f, -0.000186f, -0.073306f, -0.035464f, -0.043348f, 0.040535f, 0.016693f, 0.041748f, -0.088241f, 0.005342f, -0.016135f, -0.098019f, -0.025133f, 0.014007f, 0.044449f, 0.061140f, -0.032518f, 0.114511f, 0.022612f, 0.001562f, -0.023437f, -0.046837f, -0.031812f, 0.021186f, -0.052964f, 0.107844f, -0.034378f, 0.003928f, 0.064435f, -0.042777f, 0.039467f, -0.041818f, -0.023265f, 0.089296f, -0.045140f, 0.058325f, 0.054737f, 0.019104f, 0.025165f, -0.078536f, -0.008898f, -0.004788f, -0.026797f, 0.035937f, 0.033539f, 0.012672f, 0.010556f, 0.034911f, -0.007994f, 0.013127f, -0.003781f, 0.009838f, -0.014806f, 0.011807f, -0.002094f, 0.009816f, 0.008862f, 0.001459f, -0.025957f, -0.005479f, - 0.004255f, -0.010499f, -0.002509f, 0.017935f, 0.011153f, 0.030190f, -0.013503f, 0.005508f, -0.050430f, -0.044060f, -0.005491f, -0.003754f, 0.031192f, 0.021732f, -0.013752f, -0.011890f, -0.040011f, -0.001338f, 0.014872f, -0.007820f, 0.000770f, 0.008495f, -0.011998f, 0.007889f, -0.029210f, 0.000400f, -0.009206f, -0.013107f, 0.020762f, -0.080691f, 0.046035f, 0.029453f, 0.046044f, -0.018398f, -0.013105f, 0.018641f, 0.000111f, 0.005297f, 0.001700f, 0.009093f, 0.002152f, -0.012705f, 0.059563f, -0.013921f, -0.041112f, 0.017358f, -0.001108f, -0.036196f, 0.012568f, 0.008342f, 0.024564f, -0.016712f, -0.027405f, 0.029411f, -0.023699f, -0.003260f, -0.007081f, 0.024133f, -0.041705f, 0.014193f, -0.025885f, 0.021087f, -0.036743f, 0.013011f, -0.012343f, 0.006278f, 0.080437f, -0.055386f, 0.010457f, 0.017659f, -0.049912f, 0.018047f, 0.022959f, -0.037017f, -0.007734f, -0.014216f, 0.066894f, 0.005574f, -0.077442f, 0.046281f, -0.062607f, 0.011311f, 0.032362f, -0.030105f, 0.037022f, -0.044913f, -0.037004f, 0.050817f, -0.008686f, 0.021550f, -0.076300f, 0.014203f, 0.016457f, -0.004135f, -0.011795f, -0.000724f, - 0.030924f, 0.001076f, -0.101457f, 0.061350f, -0.006418f, 0.023502f, -0.026673f, -0.031113f, 0.096695f, -0.002679f, -0.061892f, 0.005254f, 0.031208f, 0.007030f, -0.094077f, 0.003236f, 0.087211f, -0.016085f, -0.040385f, 0.009439f, 0.042174f, -0.005756f, 0.000115f, -0.007551f, -0.004390f, 0.005911f, -0.015294f, -0.009051f, 0.028629f, -0.012578f, -0.000811f, -0.016997f, 0.016783f, 0.025432f, -0.004613f, -0.003987f, 0.027055f, 0.008723f, -0.018634f, -0.004579f, 0.011645f, 0.007660f, -0.015832f, 0.008322f, 0.018610f, -0.015704f, 0.003979f, 0.004509f, 0.011986f, -0.029106f, 0.001821f, 0.017989f, 0.006830f, -0.020334f, 0.001118f, 0.014110f, 0.002338f, -0.015138f, -0.010118f, 0.038158f, -0.013250f, -0.199444f, -0.424355f, -0.169316f, -0.319495f, -0.389120f, 0.137805f, -0.001597f, 0.141345f, 0.537615f, 0.469506f, 0.267086f, 0.514492f, 0.286862f, 0.032368f, 0.177750f, 0.109350f, -0.194681f, -0.137618f, -0.040588f, -0.215793f, -0.260956f, -0.086919f, -0.132190f, -0.206588f, -0.052003f, -0.009489f, -0.263034f, -0.181274f, -0.027586f, -0.159927f, -0.207016f, -0.060439f, -0.101679f, -0.225049f, -0.043341f, - 0.022736f, -0.126287f, -0.096336f, 0.094931f, -0.034386f, -0.135426f, 0.028219f, 0.089363f, -0.066905f, 0.054718f, 0.196772f, -0.029118f, -0.052722f, 0.194725f, 0.103870f, -0.048877f, 0.323533f, 0.439819f, 0.273695f, 0.463777f, 0.693863f, 0.533694f, 0.507882f, 0.742260f, 0.643457f, 0.473544f, 0.581050f, 0.528199f, 0.335954f, 0.297159f, 0.159864f, -0.055420f, -0.232052f, -0.415095f, -0.589653f, -0.701664f, -0.879748f, -0.939935f, -0.991156f, -1.122854f, -1.122060f, -0.848078f, -0.867799f, -0.790320f, -0.355994f, -0.275494f, -0.267950f, 0.118657f, 0.226578f, 0.004782f, 0.236157f, 0.327784f, 0.112149f, 0.156196f, 0.307401f, 0.229737f, 0.133736f, 0.216973f, 0.268660f, 0.114152f, 0.167238f, 0.333440f, 0.198278f, 0.130527f, 0.307283f, 0.230436f, 0.093025f, 0.199701f, 0.228157f, 0.029283f, 0.117815f, 0.274657f, 0.157462f, 0.188930f, 0.387213f, 0.364269f, 0.383872f, 0.497068f, 0.500559f, 0.401536f, 0.379795f, 0.324163f, 0.197938f, 0.142726f, 0.075936f, -0.011900f, -0.078181f, -0.211934f, -0.289544f, -0.391358f, -0.521464f, -0.580657f, -0.656066f, -0.763698f, -0.727281f, -0.653239f, - -0.576915f, -0.421855f, -0.276582f, -0.146732f, -0.054147f, 0.022660f, 0.048169f, 0.058921f, 0.076058f, 0.080560f, 0.068103f, 0.072660f, 0.080289f, 0.077719f, 0.087095f, 0.112465f, 0.126145f, 0.134377f, 0.149375f, 0.152491f, 0.150510f, 0.143710f, 0.107506f, 0.067336f, 0.043131f, 0.036376f, 0.036406f}, - {-0.013341f, 0.000386f, 0.010605f, 0.007285f, 0.007329f, 0.004608f, 0.002910f, -0.004182f, 0.000159f, -0.004759f, 0.011346f, 0.006942f, 0.002724f, 0.001640f, 0.001638f, -0.000144f, -0.003590f, 0.005569f, 0.007806f, 0.007499f, 0.004596f, -0.005719f, -0.008243f, -0.009028f, -0.008566f, -0.000908f, 0.004472f, -0.008827f, 0.007359f, -0.001783f, 0.012864f, -0.002154f, 0.008173f, 0.000098f, -0.010670f, 0.003043f, -0.001374f, 0.008621f, 0.000596f, -0.001019f, -0.004354f, -0.007319f, 0.000658f, 0.004115f, -0.009369f, -0.012821f, 0.008948f, -0.007431f, -0.006838f, -0.006465f, 0.005043f, -0.005102f, 0.002145f, -0.002287f, -0.000632f, -0.007555f, -0.002279f, -0.005143f, -0.007502f, 0.002461f, 0.005821f, -0.002171f, -0.008253f, -0.001619f, -0.001685f, -0.004149f, -0.007135f, -0.000558f, -0.005804f, -0.006841f, -0.001237f, 0.000466f, 0.001607f, -0.002322f, 0.001003f, -0.001272f, -0.009647f, -0.002134f, 0.001187f, -0.002670f, -0.002477f, -0.003030f, 0.003084f, -0.003699f, 0.003176f, -0.000267f, 0.000548f, 0.001217f, -0.002362f, 0.002317f, 0.000019f, -0.001293f, 0.000573f, -0.000636f, -0.002006f, 0.000325f, - 0.001500f, -0.001034f, -0.000878f, -0.000097f, 0.002425f, 0.001094f, 0.000340f, 0.000373f, 0.001307f, 0.000885f, 0.001519f, 0.000430f, 0.001955f, -0.001632f, -0.000720f, -0.000739f, 0.025123f, -0.008780f, -0.005748f, -0.007827f, -0.005378f, 0.000586f, -0.016812f, 0.002838f, -0.008341f, -0.016459f, -0.003517f, 0.014107f, -0.010146f, 0.002751f, -0.001198f, 0.004733f, 0.007126f, 0.007624f, 0.012322f, -0.002639f, -0.007061f, 0.003143f, 0.002976f, -0.005660f, -0.000818f, -0.003825f, -0.002489f, 0.001515f, -0.006469f, -0.004044f, -0.000941f, -0.008144f, -0.009559f, 0.004884f, 0.007390f, -0.004383f, -0.010985f, -0.001926f, -0.002576f, 0.001555f, 0.008875f, 0.000587f, -0.003677f, -0.000591f, 0.011882f, 0.001481f, -0.007271f, -0.007011f, 0.003076f, 0.002250f, 0.009484f, 0.005385f, -0.000622f, -0.009055f, 0.000507f, -0.000533f, 0.007784f, -0.008334f, -0.002799f, 0.004578f, 0.009047f, -0.002551f, 0.000804f, -0.006853f, -0.003848f, 0.004200f, 0.000261f, 0.000885f, 0.002457f, -0.002665f, 0.003295f, 0.000976f, 0.004031f, 0.002479f, 0.001559f, 0.015729f, 0.004819f, -0.000645f, -0.002120f, -0.004637f, - 0.006746f, 0.004185f, 0.007291f, 0.005192f, 0.001830f, 0.001933f, -0.001522f, 0.001444f, -0.002945f, -0.003146f, -0.002414f, 0.000826f, -0.001113f, -0.000770f, -0.000476f, 0.002538f, 0.000421f, 0.003317f, 0.000314f, -0.001051f, -0.000414f, -0.000318f, -0.000458f, 0.001081f, 0.000780f, 0.001341f, -0.018430f, -0.004322f, -0.008691f, 0.008456f, 0.002150f, 0.000218f, 0.006018f, -0.003550f, -0.014243f, -0.007501f, 0.009489f, -0.000500f, 0.009775f, -0.000708f, -0.005508f, 0.010836f, 0.004081f, 0.023732f, -0.004446f, 0.010315f, 0.001520f, -0.011151f, 0.002832f, -0.009468f, 0.006164f, 0.002198f, 0.002437f, -0.010119f, 0.005094f, -0.001745f, -0.003564f, 0.004184f, 0.016163f, 0.006025f, -0.000072f, -0.012931f, 0.011254f, -0.002344f, 0.000071f, 0.007972f, -0.011763f, -0.002180f, 0.008149f, -0.004796f, -0.004184f, -0.013278f, -0.014505f, -0.001082f, 0.008820f, 0.005204f, -0.005806f, -0.000138f, 0.005753f, 0.007204f, 0.002881f, -0.001452f, -0.002777f, -0.012722f, 0.006016f, 0.015879f, 0.007232f, -0.004551f, -0.002216f, 0.005041f, 0.007586f, -0.000574f, -0.002342f, 0.001909f, -0.010470f, -0.001923f, - -0.007332f, -0.003415f, -0.000661f, -0.004495f, 0.012103f, 0.010554f, -0.003128f, 0.005305f, 0.003930f, -0.001998f, -0.007122f, 0.001699f, -0.005509f, -0.002076f, 0.001648f, -0.007110f, -0.001505f, 0.000727f, -0.002054f, 0.002041f, 0.003065f, -0.004544f, -0.001621f, -0.000289f, 0.000322f, -0.003563f, 0.000957f, -0.001643f, 0.002705f, -0.003159f, 0.002988f, -0.002157f, 0.000728f, 0.000498f, -0.001537f, 0.001210f, 0.000542f, -0.001145f, 0.001054f, 0.001178f, 0.001215f, -0.002343f, -0.001097f, 0.000058f, -0.003325f, 0.000446f, 0.001981f, -0.000653f, -0.013862f, 0.015490f, -0.013345f, 0.014146f, -0.000130f, -0.011274f, -0.026595f, -0.010471f, -0.007631f, 0.003990f, 0.013947f, 0.010920f, -0.003353f, -0.002130f, -0.003237f, -0.007622f, -0.002192f, -0.008566f, 0.002947f, 0.003166f, 0.005291f, 0.008779f, 0.005207f, 0.016786f, 0.000061f, 0.003401f, -0.005899f, -0.001368f, -0.003991f, 0.006179f, 0.001876f, -0.007786f, -0.011274f, 0.000482f, -0.008090f, 0.001035f, 0.007685f, -0.012751f, 0.009016f, -0.021467f, -0.005895f, -0.015917f, 0.002752f, -0.000957f, 0.000299f, -0.006222f, -0.008394f, 0.003007f, - 0.007651f, 0.005488f, 0.002051f, -0.012780f, 0.003948f, -0.008816f, -0.003328f, -0.002507f, -0.017414f, -0.006780f, 0.005276f, 0.006791f, -0.000551f, -0.011984f, 0.002123f, 0.004610f, -0.002272f, -0.002344f, 0.001499f, 0.010520f, 0.003818f, -0.002299f, -0.003301f, 0.001900f, -0.024824f, 0.001848f, 0.006371f, 0.005980f, 0.017598f, 0.002487f, -0.009769f, 0.011077f, -0.003792f, 0.001719f, 0.003939f, 0.003712f, -0.002472f, -0.008135f, 0.000529f, 0.004876f, 0.004664f, 0.007515f, -0.002271f, -0.002383f, 0.001369f, -0.001363f, -0.000877f, 0.001245f, -0.002058f, 0.000758f, 0.001774f, -0.000968f, -0.003941f, -0.003017f, -0.000093f, 0.000525f, 0.001114f, -0.001866f, 0.003855f, -0.001927f, -0.001034f, 0.002499f, 0.002916f, -0.000783f, -0.004374f, -0.002285f, 0.001827f, -0.002206f, -0.001150f, -0.001322f, 0.001012f, 0.003501f, -0.000584f, 0.017713f, -0.004584f, 0.000185f, 0.011663f, -0.006120f, -0.005722f, 0.017473f, -0.013432f, -0.031690f, -0.020821f, -0.012294f, 0.018932f, 0.008017f, 0.002565f, -0.018384f, 0.019319f, -0.008430f, 0.005369f, -0.005087f, 0.007548f, 0.009264f, -0.000834f, 0.000170f, - -0.000239f, -0.003220f, -0.010090f, -0.008154f, -0.002529f, 0.000985f, 0.008735f, 0.004919f, 0.013682f, 0.006496f, -0.006067f, -0.003272f, 0.012171f, -0.008882f, 0.014949f, -0.012083f, 0.003163f, 0.006523f, 0.004191f, -0.009813f, 0.013170f, -0.001362f, 0.014156f, 0.018673f, 0.002807f, -0.007561f, -0.007328f, 0.007851f, -0.009081f, -0.019120f, -0.004976f, 0.003926f, -0.012288f, 0.006901f, 0.005595f, -0.004134f, -0.007664f, -0.003319f, -0.002969f, 0.003590f, -0.001530f, -0.010802f, -0.004143f, 0.018443f, 0.014832f, 0.007937f, -0.022122f, -0.021752f, -0.011897f, 0.020716f, 0.010488f, -0.001714f, 0.002848f, -0.010341f, 0.013093f, -0.000674f, -0.010268f, -0.003635f, 0.001315f, -0.001093f, -0.005169f, -0.000832f, -0.004103f, -0.002232f, 0.003848f, 0.005653f, -0.003402f, -0.000142f, 0.000471f, 0.000882f, 0.000783f, -0.005781f, 0.006511f, -0.000537f, -0.006550f, -0.003933f, -0.000943f, -0.002107f, 0.000074f, -0.000555f, -0.000853f, -0.000760f, 0.001518f, 0.000246f, -0.003039f, -0.000272f, 0.001119f, -0.000808f, -0.004700f, -0.003247f, -0.004388f, -0.001598f, 0.003076f, 0.008917f, 0.013132f, -0.000735f, - 0.005062f, -0.020670f, -0.006977f, 0.003375f, 0.007069f, -0.025635f, -0.002839f, 0.011024f, -0.007722f, -0.016683f, 0.010388f, -0.019404f, -0.014229f, -0.007701f, 0.001695f, -0.007054f, -0.004788f, -0.000645f, 0.014413f, -0.012262f, 0.003197f, -0.003900f, -0.005093f, -0.010326f, -0.002849f, -0.015067f, -0.004486f, -0.000467f, 0.002870f, -0.010543f, -0.002224f, -0.006661f, 0.000953f, -0.003412f, -0.004670f, 0.002737f, 0.011858f, 0.002988f, -0.006183f, 0.005868f, -0.009058f, -0.002278f, 0.003469f, -0.003476f, 0.005908f, -0.001959f, -0.000669f, -0.041774f, 0.002770f, -0.014500f, 0.007065f, 0.006007f, 0.009221f, -0.023007f, -0.023440f, 0.003132f, 0.000818f, 0.005443f, 0.000153f, 0.012460f, -0.005067f, 0.006758f, 0.008409f, -0.004040f, 0.019614f, -0.006170f, -0.012773f, -0.002755f, -0.010573f, -0.000400f, -0.020918f, 0.000276f, 0.010346f, 0.004815f, 0.015612f, -0.004360f, -0.004275f, 0.006862f, -0.008258f, 0.001922f, 0.005080f, 0.010046f, -0.005402f, 0.005749f, -0.008196f, 0.001589f, 0.000322f, 0.001052f, -0.004042f, -0.001957f, -0.003014f, 0.003183f, -0.003749f, -0.005989f, -0.000126f, -0.002845f, - -0.003726f, -0.001371f, -0.002920f, -0.001306f, -0.001838f, 0.001670f, -0.002921f, 0.001657f, -0.005894f, -0.000663f, -0.003529f, -0.001531f, 0.000470f, 0.000361f, -0.000838f, -0.002852f, 0.000257f, 0.016164f, -0.032600f, 0.008728f, 0.001390f, 0.009048f, 0.013122f, 0.002376f, -0.012646f, -0.027773f, 0.001978f, -0.011230f, 0.021091f, -0.008592f, 0.004351f, 0.001530f, 0.004505f, 0.015910f, -0.007030f, -0.000491f, -0.007384f, -0.004163f, 0.004156f, -0.004018f, 0.014930f, 0.011119f, 0.003189f, -0.003170f, 0.000205f, 0.009994f, -0.001030f, 0.004824f, -0.000231f, -0.008241f, 0.007283f, -0.002119f, -0.006172f, 0.008827f, 0.014953f, 0.000041f, 0.005846f, 0.001047f, -0.009924f, -0.006189f, 0.018157f, -0.008771f, 0.008684f, 0.013226f, -0.017550f, 0.012518f, 0.006693f, 0.006355f, -0.007793f, 0.012837f, 0.003695f, -0.002219f, 0.016417f, 0.000607f, -0.000205f, -0.007695f, -0.004388f, -0.000008f, -0.007192f, -0.017564f, -0.004631f, 0.017939f, 0.013520f, 0.014759f, -0.001659f, -0.015565f, 0.006448f, 0.018819f, -0.003526f, -0.013327f, -0.000695f, -0.009416f, -0.002431f, -0.001563f, 0.014640f, -0.001404f, - 0.007509f, -0.001928f, 0.000666f, -0.010330f, 0.002715f, -0.001778f, 0.004035f, 0.004014f, -0.007133f, 0.004833f, -0.011280f, 0.001109f, 0.004038f, 0.000296f, -0.002925f, -0.000194f, 0.002216f, -0.007805f, -0.001460f, -0.007345f, 0.002267f, -0.004644f, -0.002943f, -0.004500f, -0.007555f, -0.004970f, -0.001952f, 0.001090f, -0.002329f, -0.000184f, 0.002364f, 0.000798f, -0.001993f, -0.001400f, -0.002280f, 0.004321f, 0.000124f, 0.001561f, 0.002780f, 0.001740f, 0.001949f, -0.001010f, 0.003668f, -0.000560f, 0.000065f, 0.001536f, -0.001469f, -0.002029f, 0.000946f, 0.003891f, -0.015481f, -0.004569f, -0.024958f, -0.007300f, -0.014479f, -0.017072f, -0.016188f, -0.005737f, 0.021767f, 0.023687f, 0.032637f, 0.007295f, -0.012461f, -0.007670f, 0.027013f, -0.000107f, -0.006309f, 0.020694f, -0.002177f, 0.000897f, -0.032352f, 0.014620f, 0.008125f, -0.021589f, 0.029895f, -0.004174f, 0.013423f, -0.003639f, 0.007011f, 0.013286f, 0.000015f, 0.023494f, 0.008997f, 0.006661f, -0.002737f, -0.008344f, 0.002240f, 0.014230f, -0.003836f, 0.004220f, 0.006654f, 0.018849f, -0.000899f, -0.005718f, 0.012141f, -0.014292f, - -0.008990f, 0.006448f, 0.020799f, -0.009239f, -0.011175f, -0.003533f, 0.017137f, 0.000145f, 0.002409f, -0.006420f, -0.002947f, 0.006143f, 0.009031f, 0.000789f, -0.007417f, -0.023737f, 0.002798f, 0.006978f, 0.022571f, 0.006552f, -0.001838f, 0.017336f, 0.030984f, -0.006397f, 0.010845f, 0.007305f, 0.012828f, -0.002511f, -0.010916f, 0.006377f, -0.025717f, -0.007001f, -0.003913f, -0.008349f, -0.005213f, 0.013370f, 0.004603f, -0.016651f, -0.009835f, 0.000463f, -0.005450f, -0.000607f, -0.012749f, -0.000400f, -0.004379f, -0.003220f, -0.001767f, 0.001267f, -0.003563f, -0.000898f, -0.001746f, 0.002715f, -0.001015f, 0.002490f, -0.003496f, -0.000116f, 0.000523f, 0.001147f, 0.005151f, 0.000144f, -0.001997f, 0.004811f, 0.007035f, -0.000576f, -0.004339f, -0.002742f, -0.006106f, -0.005339f, 0.007305f, -0.001255f, 0.001962f, 0.002671f, 0.002580f, 0.002411f, -0.005624f, 0.002731f, -0.002050f, -0.028256f, 0.039568f, -0.019949f, 0.008983f, -0.001465f, -0.013648f, 0.030160f, 0.007102f, 0.003743f, -0.031879f, 0.008274f, -0.012715f, -0.014510f, 0.003542f, -0.014163f, 0.016128f, 0.009761f, -0.002711f, 0.003233f, - -0.007811f, -0.003528f, -0.011585f, -0.007449f, -0.013914f, -0.021486f, -0.005294f, -0.015034f, -0.004036f, 0.008180f, -0.006076f, -0.008093f, 0.017015f, 0.010693f, 0.017077f, -0.014001f, -0.001579f, -0.002813f, -0.015381f, 0.000152f, -0.008178f, -0.038290f, 0.003353f, 0.000692f, -0.005921f, 0.013286f, -0.001387f, 0.014657f, 0.012418f, 0.004583f, 0.023038f, 0.020497f, -0.020239f, -0.005548f, 0.000170f, -0.000748f, 0.007205f, 0.002756f, 0.019588f, -0.004183f, 0.031286f, -0.000042f, -0.018449f, -0.014973f, 0.002396f, 0.005646f, 0.006401f, 0.022741f, 0.005975f, 0.005693f, 0.021378f, 0.028466f, 0.001166f, -0.017465f, -0.016540f, -0.001566f, -0.005549f, -0.004035f, 0.036778f, 0.002637f, -0.016704f, 0.011949f, -0.014625f, 0.013982f, 0.002309f, -0.002903f, -0.004373f, -0.011236f, 0.003128f, 0.003719f, -0.001665f, 0.003288f, 0.006204f, 0.003453f, 0.004228f, -0.001652f, -0.001563f, 0.000406f, -0.002056f, -0.001734f, 0.004169f, 0.001647f, 0.002958f, 0.003719f, 0.006593f, 0.000373f, -0.003096f, 0.006136f, 0.003490f, 0.001184f, 0.001403f, -0.001272f, 0.000932f, -0.000234f, 0.006567f, 0.010247f, - -0.005533f, 0.004889f, -0.001213f, 0.004261f, 0.000554f, 0.000908f, 0.008741f, -0.000456f, 0.000847f, 0.000750f, 0.007181f, 0.004766f, 0.005254f, 0.023736f, 0.001819f, 0.015996f, -0.017510f, 0.007829f, 0.001401f, -0.001303f, 0.010564f, 0.025098f, -0.006928f, -0.002285f, 0.023108f, -0.030569f, -0.017040f, -0.013354f, -0.035016f, 0.006872f, -0.011109f, -0.004941f, 0.004198f, -0.023904f, 0.026177f, 0.019738f, 0.027806f, 0.012468f, -0.017323f, 0.001624f, 0.001103f, 0.020796f, -0.003856f, -0.000688f, -0.000819f, -0.012941f, 0.001029f, -0.007620f, 0.011626f, -0.013731f, -0.005194f, -0.004648f, -0.005936f, -0.016081f, 0.007545f, -0.023574f, -0.003603f, -0.001688f, 0.014785f, 0.008728f, 0.001964f, 0.000223f, -0.004132f, 0.001691f, 0.000219f, 0.012246f, 0.002837f, 0.003528f, -0.001968f, -0.036898f, -0.017147f, 0.004242f, 0.015276f, 0.018286f, -0.028885f, 0.019293f, 0.005733f, -0.011407f, 0.002777f, 0.006220f, -0.006847f, 0.027946f, 0.000260f, 0.005334f, -0.006599f, -0.039012f, -0.013372f, -0.017783f, -0.004623f, 0.000688f, -0.010816f, 0.005582f, 0.008301f, -0.008032f, -0.001672f, 0.025043f, - 0.000708f, 0.012748f, -0.015373f, 0.001919f, -0.000250f, 0.014404f, 0.012745f, 0.009161f, -0.003471f, 0.002960f, 0.010465f, 0.006337f, -0.000461f, 0.011013f, 0.010709f, 0.011695f, 0.001523f, 0.004450f, 0.004018f, 0.001890f, -0.001517f, -0.001515f, 0.010120f, 0.001894f, -0.005337f, 0.000892f, -0.000776f, 0.005559f, -0.003883f, 0.001759f, 0.005280f, -0.004122f, 0.008207f, 0.002831f, -0.001121f, 0.000676f, -0.007084f, 0.005206f, 0.005262f, -0.000856f, -0.001571f, -0.004351f, -0.005867f, 0.036123f, 0.005741f, 0.014591f, -0.021786f, -0.019727f, 0.011316f, 0.018740f, 0.002178f, -0.006655f, 0.034665f, 0.010894f, 0.000116f, -0.009627f, 0.007527f, -0.002709f, -0.003862f, -0.001313f, -0.005990f, 0.001598f, -0.011567f, -0.027533f, 0.009039f, 0.002807f, 0.008361f, 0.002710f, 0.015265f, 0.004634f, -0.016486f, -0.033515f, 0.000848f, 0.002484f, -0.002716f, -0.029333f, -0.014328f, -0.004434f, 0.008187f, -0.006424f, 0.003260f, -0.025663f, 0.001227f, -0.005754f, 0.000143f, 0.002543f, 0.007096f, -0.002793f, -0.024145f, -0.022218f, -0.013847f, 0.009291f, 0.006870f, -0.005944f, -0.005029f, -0.038712f, - -0.021908f, -0.000815f, -0.037740f, 0.034685f, -0.035634f, -0.009820f, -0.023080f, 0.037201f, 0.011921f, -0.026272f, 0.013173f, -0.003085f, 0.014058f, -0.022393f, -0.007422f, 0.000932f, 0.015128f, -0.021263f, -0.008505f, -0.007258f, -0.021595f, 0.001486f, 0.014312f, -0.002750f, -0.003982f, 0.025766f, -0.040925f, 0.032163f, -0.005363f, 0.006755f, -0.018468f, 0.012897f, -0.002092f, 0.010264f, -0.009381f, 0.000473f, 0.008158f, 0.008839f, -0.002582f, -0.004536f, 0.000027f, 0.000856f, 0.001052f, -0.003067f, 0.010061f, 0.010526f, 0.007449f, 0.001887f, 0.007552f, -0.000783f, 0.009289f, -0.003498f, 0.001690f, -0.000471f, -0.003525f, -0.003657f, 0.000625f, -0.007755f, -0.009315f, -0.002773f, -0.000595f, 0.009342f, -0.000585f, -0.001618f, -0.002593f, -0.006574f, 0.004559f, -0.002167f, -0.003410f, -0.002418f, 0.004841f, -0.001112f, -0.010557f, -0.001501f, 0.003734f, 0.000799f, -0.001018f, 0.031729f, 0.069527f, -0.009465f, -0.021817f, -0.020451f, -0.018064f, -0.025876f, 0.004155f, -0.043980f, -0.000491f, -0.034027f, -0.015787f, 0.010339f, 0.021179f, 0.012094f, -0.015375f, -0.002213f, 0.020140f, -0.001508f, - 0.023261f, -0.014048f, -0.014179f, -0.012528f, 0.010908f, -0.008297f, -0.010787f, 0.003626f, -0.012910f, -0.013153f, 0.015727f, 0.037299f, 0.013998f, 0.015883f, 0.006963f, -0.022156f, -0.005351f, -0.018002f, -0.017032f, -0.002807f, -0.003195f, -0.014173f, -0.022635f, -0.045317f, -0.004364f, -0.016530f, 0.005712f, -0.008470f, 0.016787f, 0.015580f, 0.008764f, 0.016313f, 0.011412f, -0.001857f, 0.031502f, 0.045044f, 0.010645f, -0.053005f, 0.010612f, -0.009593f, -0.031128f, 0.004198f, 0.014979f, 0.007405f, 0.001186f, 0.014418f, -0.001036f, -0.025312f, 0.001372f, 0.011835f, -0.025427f, -0.013376f, -0.023837f, -0.043977f, 0.034349f, 0.004668f, -0.002740f, 0.023997f, 0.018636f, 0.001242f, 0.001213f, 0.023719f, -0.032560f, -0.014188f, 0.003455f, 0.017474f, 0.014652f, 0.022492f, 0.016090f, -0.013434f, -0.007921f, -0.003037f, -0.005320f, -0.002008f, -0.003419f, -0.006556f, -0.008671f, -0.013238f, -0.013452f, -0.009561f, -0.005256f, -0.001484f, 0.006355f, -0.003640f, -0.002878f, -0.015149f, -0.010513f, 0.001510f, 0.007735f, 0.005408f, 0.003074f, 0.003139f, 0.002069f, -0.002170f, -0.007908f, -0.003795f, - -0.005010f, -0.004326f, 0.001296f, -0.008351f, 0.001519f, -0.005965f, 0.006098f, -0.000750f, -0.002384f, -0.005713f, 0.005004f, -0.005256f, -0.001867f, 0.010446f, -0.004537f, -0.000360f, 0.051348f, -0.037997f, 0.044387f, -0.003705f, -0.005311f, -0.022575f, -0.008329f, -0.022427f, -0.019053f, 0.023718f, -0.021066f, 0.012269f, 0.053233f, 0.019803f, -0.007863f, -0.023998f, -0.020137f, 0.023757f, -0.019380f, -0.032822f, -0.013502f, 0.003390f, 0.003165f, -0.037474f, 0.002690f, -0.011352f, 0.019589f, -0.011822f, -0.000516f, 0.004373f, 0.055984f, -0.013504f, -0.017836f, 0.027170f, -0.021567f, 0.032634f, -0.019027f, 0.023904f, 0.004043f, -0.017216f, -0.015742f, 0.030338f, -0.039103f, 0.029849f, -0.016834f, 0.003089f, -0.009334f, 0.016322f, -0.013501f, -0.006881f, -0.000498f, -0.012025f, 0.057098f, -0.016376f, 0.038973f, 0.015140f, 0.017889f, -0.000244f, 0.014764f, 0.025014f, 0.028019f, -0.007654f, -0.027131f, 0.000174f, 0.023137f, 0.009340f, -0.004108f, -0.034127f, 0.045676f, -0.009534f, -0.030207f, -0.008350f, -0.018525f, 0.014311f, 0.019718f, 0.000825f, 0.033055f, -0.008911f, 0.016951f, -0.037542f, - -0.006646f, -0.040060f, -0.012492f, -0.014642f, -0.000922f, 0.002249f, -0.007742f, 0.014335f, 0.004685f, -0.010795f, -0.018467f, -0.013670f, -0.003988f, -0.001690f, -0.009269f, -0.001966f, -0.003297f, 0.011344f, -0.003377f, 0.000505f, -0.004318f, -0.017334f, -0.005275f, -0.006954f, 0.002103f, -0.002869f, -0.009777f, -0.015139f, 0.005977f, -0.010227f, 0.004702f, 0.006752f, -0.010643f, -0.025965f, -0.006244f, -0.004053f, -0.006970f, -0.009254f, 0.001022f, -0.004317f, 0.002754f, 0.003067f, -0.011850f, -0.001512f, -0.011931f, 0.011043f, 0.006719f, -0.006216f, 0.002931f, -0.010380f, -0.058193f, -0.024833f, 0.035736f, -0.007037f, -0.014601f, 0.041536f, 0.004007f, -0.021536f, 0.015776f, 0.022627f, 0.019200f, 0.003029f, -0.035782f, -0.014760f, 0.005511f, 0.005330f, 0.018764f, 0.012432f, 0.021162f, -0.018252f, -0.014402f, 0.007139f, -0.004921f, 0.017361f, -0.033629f, -0.005650f, -0.036378f, -0.011727f, 0.006650f, -0.004969f, -0.004518f, 0.039029f, 0.008179f, -0.028833f, -0.004321f, 0.002371f, -0.029452f, -0.003950f, 0.001514f, 0.017790f, 0.044887f, -0.015858f, 0.015053f, -0.024969f, 0.003839f, -0.014674f, - -0.018875f, 0.018309f, 0.039269f, -0.031026f, 0.003076f, 0.034955f, -0.015696f, -0.003190f, -0.013034f, 0.022887f, 0.005587f, -0.028361f, -0.000276f, -0.009893f, -0.009143f, -0.002802f, -0.013877f, 0.021176f, -0.050128f, 0.010653f, 0.004278f, -0.021094f, 0.028192f, 0.043141f, 0.030518f, 0.082164f, 0.024986f, -0.021058f, -0.029107f, -0.024109f, -0.013100f, 0.030167f, -0.010809f, 0.041886f, 0.003913f, 0.051002f, -0.060542f, -0.038869f, 0.018325f, -0.009956f, -0.006206f, 0.024461f, -0.016446f, -0.001882f, 0.026079f, 0.011592f, 0.019362f, 0.028495f, 0.022325f, -0.004832f, 0.009151f, -0.017439f, 0.000684f, -0.000684f, -0.012179f, -0.013400f, 0.008976f, -0.018461f, -0.001521f, 0.027879f, 0.002597f, -0.016675f, -0.021702f, 0.004023f, -0.027282f, -0.010087f, 0.029462f, 0.015258f, -0.004763f, -0.006765f, 0.005711f, -0.005483f, -0.009234f, 0.001947f, -0.006730f, -0.010491f, -0.001753f, -0.014396f, 0.010201f, 0.008784f, 0.009770f, -0.005381f, -0.003791f, 0.006183f, 0.015079f, 0.041146f, -0.095427f, -0.003508f, 0.054885f, -0.072428f, -0.003005f, 0.014607f, -0.074822f, 0.033936f, 0.009474f, 0.060509f, - -0.005702f, 0.021574f, 0.018071f, -0.065814f, -0.054424f, -0.021022f, -0.004985f, -0.032798f, -0.040371f, -0.021236f, 0.037922f, 0.026653f, 0.023103f, 0.002716f, 0.004561f, 0.012164f, 0.002656f, -0.047715f, -0.017644f, -0.061335f, -0.019361f, 0.034731f, 0.010577f, 0.023552f, 0.077815f, 0.020429f, 0.029611f, -0.000947f, 0.015836f, 0.068520f, 0.051652f, 0.014583f, 0.034003f, 0.031181f, 0.068425f, 0.056214f, -0.073863f, 0.046733f, -0.003813f, 0.044734f, 0.045599f, 0.019122f, 0.082088f, 0.072486f, -0.039451f, 0.036007f, -0.000156f, 0.034326f, -0.059365f, 0.006087f, 0.006825f, 0.002497f, -0.013142f, 0.038117f, 0.041363f, -0.039441f, -0.013056f, -0.023061f, 0.014795f, -0.032655f, -0.040479f, 0.038674f, 0.065919f, 0.024298f, 0.068589f, -0.019403f, 0.093060f, 0.090982f, 0.025767f, 0.047828f, -0.013484f, -0.023581f, 0.021739f, 0.021283f, 0.010593f, 0.007444f, 0.005967f, 0.012460f, -0.012519f, -0.023180f, -0.016359f, -0.043737f, -0.045690f, -0.018386f, 0.021889f, -0.000372f, 0.019351f, 0.003545f, 0.011945f, 0.028202f, 0.034743f, -0.010921f, 0.016159f, -0.001465f, -0.013788f, -0.011590f, - -0.009683f, -0.028774f, -0.012908f, 0.000635f, -0.024623f, -0.008709f, -0.022120f, -0.012310f, 0.005293f, 0.031643f, -0.014429f, 0.011474f, 0.009320f, -0.005196f, 0.017826f, 0.010277f, 0.013715f, 0.000484f, 0.023539f, 0.014925f, 0.010510f, -0.009155f, -0.013547f, -0.030390f, 0.044622f, 0.080134f, -0.010712f, -0.109075f, -0.034666f, 0.011269f, -0.008291f, -0.017995f, -0.023721f, 0.000485f, -0.062209f, -0.037355f, -0.051593f, -0.008269f, -0.014857f, 0.017400f, -0.036718f, -0.010551f, 0.010319f, 0.017444f, -0.000081f, 0.019390f, 0.038115f, 0.007880f, 0.054844f, -0.035015f, 0.013522f, 0.002252f, 0.052368f, 0.013683f, -0.009759f, -0.052291f, 0.035226f, -0.008974f, 0.047855f, -0.039772f, -0.031132f, -0.030127f, -0.015586f, -0.048208f, -0.006130f, -0.008325f, -0.044878f, 0.025024f, 0.052235f, -0.024994f, 0.008222f, -0.067113f, 0.065112f, -0.020347f, -0.034547f, 0.029480f, 0.026388f, -0.038375f, 0.003983f, -0.023912f, 0.009100f, -0.017510f, 0.081453f, -0.002958f, -0.006239f, -0.019885f, 0.143307f, 0.003679f, -0.018630f, 0.061135f, 0.049789f, -0.051784f, 0.041213f, -0.063455f, -0.034508f, -0.066316f, - 0.051490f, -0.045633f, 0.025283f, 0.034868f, 0.028587f, -0.058802f, 0.075094f, -0.013387f, -0.096361f, -0.110890f, -0.042808f, -0.013652f, -0.031305f, 0.025842f, 0.026391f, 0.043859f, 0.008134f, 0.003811f, -0.032013f, 0.033122f, 0.052977f, 0.076220f, 0.021076f, -0.021889f, 0.008430f, 0.064840f, 0.011835f, -0.035868f, -0.007815f, 0.069182f, 0.016947f, -0.041023f, -0.009532f, 0.034096f, 0.020861f, 0.031030f, 0.022079f, 0.043749f, 0.001519f, 0.023973f, 0.009741f, 0.030906f, 0.015899f, 0.049202f, 0.017631f, 0.031018f, -0.004853f, 0.009607f, 0.003611f, -0.003869f, 0.014468f, -0.004592f, 0.018414f, 0.030536f, 0.006044f, 0.017622f, 0.003685f, 0.022964f, -0.051074f, -0.012480f, 0.042032f, -0.030672f, -0.146775f, 0.010583f, 0.094488f, -0.056947f, -0.037935f, 0.075884f, -0.055048f, -0.003500f, -0.015558f, 0.072832f, -0.124836f, 0.069923f, 0.041571f, -0.035189f, 0.013164f, 0.068307f, 0.048853f, -0.023831f, 0.028014f, 0.012580f, -0.018902f, 0.032151f, -0.000552f, 0.019513f, 0.029679f, -0.012547f, 0.007285f, -0.003139f, 0.014241f, -0.018035f, -0.014399f, -0.001115f, 0.025512f, -0.074052f, - -0.036510f, 0.036888f, -0.008150f, -0.049092f, -0.057846f, 0.010079f, 0.072377f, -0.031292f, -0.045936f, 0.035526f, 0.054045f, -0.011754f, 0.013739f, -0.009494f, 0.050363f, -0.027221f, 0.075420f, -0.010153f, 0.000355f, 0.041232f, 0.001091f, 0.009505f, -0.053201f, 0.083971f, -0.043174f, -0.052566f, 0.040099f, -0.055664f, -0.018168f, 0.009418f, 0.028004f, 0.077576f, -0.027282f, 0.048372f, -0.009607f, 0.025324f, -0.131128f, -0.100487f, -0.018203f, -0.039171f, 0.020322f, 0.018156f, 0.050145f, -0.007874f, -0.010188f, 0.059497f, -0.064882f, -0.001445f, 0.041953f, 0.041157f, -0.014874f, 0.045855f, 0.006073f, -0.009774f, 0.000067f, -0.010184f, 0.044227f, -0.024409f, -0.002185f, 0.042804f, 0.010156f, -0.009716f, 0.017206f, -0.021270f, 0.005820f, -0.001630f, 0.001079f, 0.017290f, 0.008450f, -0.024337f, -0.005205f, 0.007519f, -0.018556f, -0.027789f, -0.000002f, 0.020296f, 0.036106f, -0.030181f, 0.035296f, 0.011919f, -0.034487f, 0.028902f, 0.033525f, -0.016714f, -0.039099f, 0.036301f, -0.017627f, 0.006664f, 0.020441f, -0.019950f, -0.051888f, 0.017066f, 0.014519f, -0.029010f, -0.026921f, 0.001980f, - 0.020242f, -0.023035f, -0.011015f, -0.049379f, -0.023382f, 0.035541f, -0.061493f, 0.059442f, -0.052419f, -0.065647f, 0.036511f, -0.031950f, -0.021729f, 0.037314f, -0.028746f, 0.031095f, -0.022696f, 0.014233f, 0.073090f, -0.066217f, -0.005200f, -0.010488f, 0.061492f, 0.007923f, 0.005377f, -0.059332f, -0.055746f, -0.020106f, -0.016628f, -0.009058f, -0.018309f, 0.010462f, 0.002737f, -0.006498f, 0.008676f, 0.012806f, 0.005871f, 0.009833f, -0.011870f, 0.028477f, -0.019302f, 0.027227f, -0.052877f, 0.001373f, -0.042934f, -0.055491f, -0.032949f, 0.072650f, -0.032039f, -0.032665f, -0.024434f, 0.016319f, -0.015097f, 0.032058f, 0.046896f, -0.050248f, 0.044023f, 0.007478f, -0.069301f, -0.034950f, 0.141641f, 0.073237f, -0.108290f, -0.020797f, 0.067930f, -0.035230f, -0.039868f, 0.027044f, -0.034532f, -0.074987f, 0.052933f, 0.023870f, -0.101813f, 0.041177f, 0.050775f, -0.060074f, -0.039860f, 0.059933f, -0.015347f, -0.046012f, 0.009835f, 0.029468f, -0.073950f, 0.013361f, 0.012401f, 0.020564f, -0.056594f, -0.017233f, -0.005459f, -0.018526f, -0.004464f, 0.003063f, 0.005616f, -0.034871f, 0.004777f, 0.050016f, - 0.016899f, 0.002585f, 0.016029f, -0.001496f, -0.009059f, -0.028433f, -0.009300f, -0.015683f, -0.021121f, -0.048266f, 0.012008f, -0.027822f, -0.008263f, 0.057833f, -0.052440f, -0.034444f, 0.042357f, -0.031798f, -0.012065f, -0.014135f, 0.018661f, -0.034403f, -0.013031f, 0.053248f, 0.027769f, -0.026980f, 0.029512f, 0.016328f, -0.023251f, -0.014911f, 0.072561f, -0.059271f, -0.046371f, 0.077415f, -0.001254f, -0.062988f, 0.007716f, 0.037755f, -0.037743f, -0.078496f, 0.051079f, 0.005722f, -0.087150f, 0.014139f, 0.023208f, -0.063733f, -0.002239f, 0.041597f, -0.012684f, -0.028767f, 0.021366f, 0.016959f, -0.044307f, -0.005168f, 0.031093f, 0.089721f, 0.126905f, -0.050178f, 0.142017f, -0.010768f, -0.038357f, -0.029578f, -0.047541f, -0.003635f, 0.024192f, 0.083931f, 0.003282f, 0.026123f, -0.020808f, -0.071661f, 0.001767f, 0.003030f, 0.047893f, 0.009410f, -0.054060f, 0.101651f, -0.042858f, 0.019301f, 0.045902f, -0.050083f, -0.040583f, -0.071637f, -0.031166f, 0.044876f, 0.055823f, 0.068881f, -0.025492f, -0.167225f, 0.037524f, 0.087896f, 0.112544f, 0.096815f, -0.001150f, -0.047602f, -0.059127f, 0.020658f, - 0.057539f, -0.036120f, -0.019003f, -0.148111f, -0.090686f, 0.080203f, 0.134587f, 0.027938f, -0.003419f, -0.032214f, -0.058503f, -0.013381f, 0.037508f, -0.051611f, 0.020617f, -0.006996f, 0.085142f, -0.003238f, 0.033341f, -0.165661f, -0.020885f, 0.002444f, 0.102206f, 0.079453f, -0.001944f, -0.049333f, -0.013534f, 0.121764f, 0.055027f, -0.142004f, -0.176273f, -0.068486f, 0.035627f, 0.274371f, 0.029763f, -0.047153f, 0.037880f, -0.072899f, 0.194769f, 0.059854f, -0.154820f, -0.096488f, -0.019180f, 0.137889f, 0.020777f, -0.056774f, -0.052914f, -0.048588f, 0.039270f, 0.074471f, 0.037233f, -0.079234f, -0.006490f, -0.026922f, 0.065927f, -0.006644f, 0.039926f, -0.013488f, -0.016634f, -0.052371f, 0.020739f, -0.015690f, -0.005502f, 0.041634f, -0.064470f, 0.038292f, -0.009623f, -0.009328f, 0.000420f, 0.030372f, 0.064214f, 0.032932f, 0.004483f, -0.012104f, 0.013699f, -0.000000f, 0.026140f, 0.009127f, 0.028830f, 0.007711f, 0.007381f, -0.031902f, 0.015206f, 0.017717f, 0.011798f, 0.000831f, 0.009726f, 0.006651f, 0.028542f, 0.014045f, -0.022956f, 0.058475f, -0.067251f, 0.002149f, -0.027012f, 0.015608f, - -0.041614f, 0.039180f, 0.010900f, -0.022157f, -0.041967f, -0.020616f, -0.007892f, 0.012285f, -0.057295f, 0.013279f, -0.028012f, -0.010903f, -0.044836f, -0.021126f, 0.036529f, -0.038294f, -0.013442f, -0.005239f, 0.017920f, 0.012076f, -0.014811f, 0.020661f, -0.032764f, -0.002589f, 0.000535f, 0.017683f, -0.021408f, 0.031275f, 0.023477f, -0.023752f, -0.027370f, -0.010502f, 0.044607f, -0.031986f, 0.014204f, 0.033037f, 0.007539f, -0.032175f, -0.012145f, 0.013865f, -0.020016f, 0.015010f, 0.001663f, 0.007265f, -0.029524f, 0.006255f, -0.023963f, -0.001046f, 0.022697f, 0.028386f, 0.022324f, -0.016418f, 0.021319f, 0.002668f, -0.026184f, -0.003925f, 0.000190f, 0.031572f, -0.008401f, 0.006650f, 0.027731f, -0.005932f, -0.035466f, 0.049934f, -0.019991f, 0.029528f, 0.021989f, 0.005068f, 0.007317f, -0.021136f, -0.025550f, 0.034376f, 0.005675f, 0.030233f, 0.009578f, 0.016445f, 0.008856f, -0.001018f, -0.001117f, -0.026539f, 0.003485f, 0.006997f, 0.009845f, 0.010368f, -0.002746f, 0.012083f, 0.002635f, -0.001710f, 0.003905f, 0.001419f, 0.013168f, -0.003593f, 0.010409f, -0.012316f, -0.002504f, -0.000180f, - 0.001581f, -0.007023f, -0.003257f, 0.023184f, 0.015371f, -0.004185f, -0.016084f, -0.019155f, -0.006357f, -0.007874f, 0.022070f, 0.001908f, -0.005764f, -0.014387f, -0.006571f, 0.001740f, -0.011029f, 0.024381f, 0.003013f, -0.010295f, 0.004946f, -0.000760f, -0.003719f, 0.006658f, -0.006458f, 0.021093f, -0.019355f, 0.014379f, -0.018797f, -0.054238f, 0.101659f, 0.009295f, 0.005629f, -0.040965f, 0.023643f, -0.003386f, 0.026741f, 0.020391f, 0.031284f, 0.003515f, 0.008032f, -0.017484f, 0.005139f, 0.028669f, -0.002721f, 0.015721f, -0.002405f, 0.005056f, 0.006411f, 0.011674f, -0.012035f, 0.021722f, -0.014659f, 0.002068f, -0.002291f, 0.007422f, -0.001849f, 0.004434f, 0.016546f, 0.018140f, -0.008639f, 0.008052f, 0.003607f, -0.003955f, -0.007672f, 0.024134f, -0.007307f, 0.005177f, -0.006755f, 0.012665f, 0.000011f, -0.011433f, 0.024260f, -0.014935f, -0.005113f, 0.006503f, -0.011282f, -0.006787f, -0.003442f, 0.001100f, -0.004262f, 0.000511f, -0.002226f, -0.006144f, 0.008309f, -0.015453f, 0.009908f, 0.006766f, -0.005227f, 0.010430f, -0.007738f, 0.012336f, -0.006191f, 0.002471f, 0.002499f, -0.007225f, - 0.012146f, 0.000146f, 0.001790f, -0.003664f, 0.016321f, -0.019100f, 0.020633f, -0.014389f, 0.002587f, 0.003681f, -0.000441f, 0.003947f, -0.003140f, 0.012027f, -0.011017f, 0.000953f, 0.010345f, -0.012135f, 0.007861f, 0.007128f, -0.001666f, 0.001688f, 0.007111f, 0.003481f, -0.003081f, 0.004811f, 0.001415f, -0.001403f, 0.001112f, 0.004247f, 0.000637f, -0.004996f, 0.001568f, 0.002301f, -0.002491f, 0.006138f, -0.001147f, 0.005078f, -0.002988f, 0.000990f, 0.004029f, -0.002338f, 0.000796f, 0.002844f, -0.003668f, 0.006715f, -0.000454f, 0.003414f, -0.000667f, 0.007059f, -0.002259f, 0.001009f, 0.006621f, -0.005464f, 0.007633f, -0.004115f, 0.003419f, -0.004237f, 0.007502f, 0.019470f, -0.092675f, -0.230794f, 0.035923f, 0.175847f, 0.163388f, 0.283403f, -0.072274f, -0.075816f, -0.192883f, -0.263385f, -0.054261f, 0.095296f, 0.101993f, 0.192019f, 0.104346f, 0.008262f, -0.049801f, -0.134007f, -0.095231f, -0.016430f, -0.014859f, 0.047785f, 0.044364f, 0.025635f, 0.016409f, 0.012897f, -0.007008f, -0.032919f, -0.002494f, 0.038062f, 0.000353f, 0.008019f, -0.002116f, -0.028520f, -0.021780f, -0.048515f, - -0.047473f, 0.021563f, 0.019961f, 0.044099f, 0.067128f, 0.050245f, 0.024618f, 0.008878f, -0.072318f, -0.051206f, -0.039540f, -0.039698f, -0.044197f, 0.009235f, 0.028309f, 0.049074f, 0.062782f, 0.051863f, 0.011387f, -0.006144f, -0.041510f, -0.042478f, -0.025150f, -0.012314f, 0.004161f, 0.006977f, 0.014150f, 0.001218f, -0.013494f, 0.004586f, -0.021590f, 0.011292f, 0.018522f, 0.002090f, 0.036987f, 0.044576f, 0.013894f, -0.008501f, -0.048966f, -0.064656f, -0.025922f, -0.011955f, -0.007437f, 0.032844f, 0.025580f, -0.006738f, 0.028998f, 0.031326f, 0.017657f, 0.021630f, -0.011889f, -0.023335f, -0.018620f, -0.026843f, -0.021163f, -0.003997f, -0.020310f, -0.008124f, 0.001226f, 0.016332f, 0.023255f, 0.033321f, 0.028930f, 0.026503f, 0.021207f, -0.011020f, -0.024901f, -0.042046f, -0.051638f, -0.030177f, -0.022346f, 0.002852f, 0.024797f, 0.036307f, 0.042284f, 0.033269f, 0.030823f, 0.019725f, -0.026021f, -0.046712f, -0.041989f, -0.020673f, -0.005910f, -0.001984f, 0.003273f, 0.017745f, 0.015812f, 0.007432f, 0.003688f, 0.014503f, 0.008386f, 0.012606f, 0.003650f, -0.019620f, -0.021346f, -0.014201f, - -0.005584f, 0.006635f, 0.004859f, -0.007168f, -0.003907f, 0.006593f, 0.003574f, 0.002793f, 0.009007f, 0.014227f, 0.006596f, 0.000224f, -0.007140f, -0.008394f, -0.006949f, -0.008627f, -0.011085f, -0.008566f, -0.000854f, 0.005780f, 0.008011f, 0.009306f, 0.007544f, 0.002291f, 0.000112f, 0.000180f, 0.000436f} - }, - { - {-0.010872f, -0.000147f, 0.002381f, 0.001806f, 0.007759f, 0.001020f, -0.000950f, -0.005003f, 0.011403f, 0.007043f, 0.000372f, -0.001405f, 0.011327f, 0.003845f, -0.003618f, -0.009934f, 0.006340f, -0.002862f, 0.004924f, -0.009455f, 0.000611f, -0.002262f, -0.007023f, -0.001907f, -0.003533f, -0.001310f, 0.000540f, 0.000044f, -0.005120f, -0.003148f, -0.000812f, -0.000990f, -0.003183f, 0.003408f, -0.000326f, -0.003412f, 0.006076f, -0.010108f, -0.004791f, 0.004820f, -0.006065f, 0.000831f, -0.003764f, -0.005552f, 0.003775f, 0.003420f, -0.002974f, 0.003789f, 0.007313f, 0.004110f, -0.003789f, -0.004442f, 0.000802f, 0.001432f, -0.004468f, 0.004837f, 0.008066f, -0.006883f, -0.002194f, 0.003963f, 0.002973f, -0.001644f, -0.002101f, -0.003364f, 0.004447f, 0.001346f, -0.005321f, 0.006050f, 0.002953f, -0.004981f, -0.003725f, 0.006362f, -0.004800f, -0.006146f, -0.011566f, -0.010067f, 0.005482f, 0.006328f, 0.000514f, 0.002775f, -0.001093f, 0.002270f, -0.004280f, 0.006492f, -0.000535f, 0.003001f, -0.002973f, 0.001671f, -0.002707f, -0.002126f, 0.000109f, 0.004157f, -0.000913f, -0.001068f, -0.001858f, 0.000613f, - -0.001402f, 0.000280f, 0.000495f, -0.000868f, -0.001004f, 0.000125f, -0.000047f, -0.000345f, -0.001102f, 0.000556f, -0.000401f, 0.014515f, -0.001393f, -0.002930f, -0.005941f, 0.009291f, -0.004944f, -0.000527f, -0.007547f, -0.008053f, -0.010128f, -0.004765f, 0.007945f, -0.008220f, -0.003073f, -0.002892f, 0.002755f, -0.002047f, -0.011284f, 0.005882f, 0.002828f, 0.021940f, -0.002240f, 0.010265f, -0.002046f, -0.000542f, -0.000993f, 0.001134f, -0.004625f, 0.008497f, -0.002231f, -0.001711f, -0.005127f, -0.000939f, -0.001833f, 0.013167f, 0.002445f, -0.001332f, -0.012339f, -0.001261f, -0.002373f, 0.003723f, -0.007842f, -0.002171f, 0.002123f, 0.001770f, -0.002169f, -0.001324f, -0.004873f, -0.001835f, -0.005857f, -0.002636f, 0.011369f, -0.003346f, 0.003600f, 0.006347f, -0.001536f, -0.006179f, -0.008108f, 0.002106f, 0.001903f, 0.002449f, 0.005040f, 0.005974f, 0.004920f, 0.002844f, -0.002253f, -0.002185f, -0.002607f, -0.011415f, -0.002730f, -0.001161f, 0.005529f, 0.004714f, -0.002821f, -0.000277f, 0.006073f, -0.006333f, 0.002496f, 0.000181f, -0.001582f, -0.003664f, -0.005582f, -0.000069f, 0.003322f, 0.003359f, - 0.003539f, -0.001479f, 0.001455f, -0.001322f, 0.000296f, 0.004978f, 0.002019f, 0.000386f, 0.000043f, -0.000759f, -0.000118f, 0.000318f, 0.000991f, -0.000632f, -0.000695f, 0.002160f, 0.001107f, 0.002200f, 0.002255f, 0.000463f, 0.001253f, -0.000323f, 0.000363f, 0.000164f, -0.001009f, -0.002555f, -0.000465f, -0.019239f, -0.004701f, -0.000391f, -0.004120f, -0.002861f, 0.006724f, -0.013520f, -0.011333f, -0.006642f, -0.004433f, 0.001908f, 0.015169f, -0.003312f, -0.000047f, 0.001810f, -0.010901f, -0.002866f, -0.009107f, -0.001426f, 0.016066f, -0.001261f, -0.007842f, -0.005109f, 0.000185f, 0.003261f, 0.003204f, -0.004533f, -0.020390f, -0.009772f, -0.002745f, -0.007885f, 0.000706f, 0.000348f, 0.008232f, -0.005347f, 0.007309f, 0.001768f, -0.003791f, -0.010932f, -0.009157f, 0.012613f, -0.010461f, 0.006921f, 0.002011f, -0.006715f, -0.002529f, -0.005998f, -0.004311f, 0.005930f, -0.011234f, 0.005781f, 0.001953f, -0.000198f, 0.001862f, 0.000769f, -0.001136f, 0.000234f, -0.005702f, -0.007811f, 0.000541f, -0.002391f, -0.005773f, -0.002341f, -0.008917f, 0.010332f, 0.007068f, 0.001774f, 0.008454f, 0.000992f, - -0.003619f, 0.010500f, -0.005565f, -0.003494f, -0.003588f, 0.007990f, -0.007829f, 0.003464f, 0.005610f, 0.000305f, 0.003470f, 0.008704f, 0.003180f, -0.000272f, 0.000540f, 0.001849f, 0.001437f, -0.001725f, -0.001055f, 0.000103f, -0.000459f, 0.002792f, 0.001349f, 0.002953f, 0.002190f, 0.000840f, -0.002679f, -0.003135f, 0.001881f, -0.000114f, -0.000189f, 0.002859f, -0.002005f, -0.001594f, -0.000056f, 0.000685f, 0.000931f, -0.000285f, -0.003226f, 0.002676f, 0.000709f, -0.012928f, 0.015852f, 0.017987f, 0.004932f, 0.004844f, -0.005141f, 0.008396f, 0.004211f, -0.010499f, 0.003298f, 0.006783f, -0.012553f, -0.010950f, 0.011038f, -0.009591f, -0.001385f, -0.006174f, 0.011125f, 0.002450f, -0.001261f, -0.004066f, -0.000071f, -0.007179f, 0.006704f, -0.003569f, 0.004066f, -0.001706f, -0.000044f, 0.007261f, 0.002858f, 0.001048f, -0.002785f, 0.007117f, 0.004517f, 0.002142f, -0.000592f, 0.007362f, -0.000554f, 0.001374f, -0.004606f, 0.008968f, 0.002028f, 0.003597f, 0.006560f, -0.017911f, -0.005808f, -0.003504f, -0.006403f, -0.006213f, 0.001845f, 0.010048f, -0.004298f, -0.002637f, -0.005457f, -0.002418f, - 0.002191f, 0.004442f, -0.012324f, -0.000705f, 0.004344f, 0.000541f, -0.000949f, 0.005406f, 0.003527f, -0.011539f, -0.003208f, -0.002480f, 0.007198f, -0.007575f, 0.010155f, 0.010992f, 0.005766f, 0.002302f, -0.005074f, -0.000228f, 0.000908f, 0.007364f, -0.001932f, 0.000924f, 0.000912f, 0.001152f, 0.010853f, 0.001226f, 0.011563f, 0.004302f, 0.000198f, -0.005480f, -0.003130f, 0.004770f, -0.000940f, 0.000037f, 0.000489f, 0.000328f, 0.001082f, 0.004856f, 0.001402f, 0.001924f, 0.000214f, 0.001860f, -0.003814f, -0.000283f, 0.001244f, 0.001575f, -0.000956f, -0.000574f, 0.000054f, 0.001572f, -0.001116f, -0.000803f, 0.001636f, 0.001589f, 0.002940f, 0.001392f, 0.002723f, -0.001558f, 0.000243f, 0.000360f, -0.001033f, 0.002589f, 0.019897f, -0.003709f, -0.000297f, 0.007258f, 0.004695f, 0.003511f, 0.006702f, 0.017671f, -0.004946f, -0.001634f, -0.017051f, 0.000326f, -0.014654f, -0.018583f, 0.000648f, 0.007903f, -0.024001f, 0.008133f, 0.007833f, 0.004293f, -0.007298f, -0.005767f, -0.007958f, -0.003023f, 0.000447f, 0.000498f, 0.007614f, 0.010069f, -0.001395f, -0.009926f, -0.006034f, 0.007453f, - -0.010675f, -0.005311f, -0.009025f, 0.001939f, -0.014576f, 0.007251f, 0.001137f, -0.000990f, 0.002327f, -0.000473f, -0.003347f, 0.000009f, 0.009360f, -0.010825f, 0.013091f, -0.009956f, -0.001176f, 0.002414f, -0.006617f, -0.005398f, 0.005113f, 0.002524f, -0.002106f, -0.005063f, 0.009765f, 0.004078f, -0.006835f, -0.013661f, 0.001567f, 0.003160f, 0.007976f, -0.000333f, -0.003553f, 0.000689f, 0.004216f, -0.003253f, 0.018979f, -0.006358f, -0.003109f, -0.013552f, -0.009000f, 0.021434f, 0.008680f, -0.004762f, -0.001249f, -0.007452f, -0.008367f, -0.000666f, 0.002958f, 0.000570f, -0.004075f, 0.004629f, 0.002521f, 0.006415f, -0.000707f, -0.004638f, 0.001843f, 0.000192f, -0.002147f, 0.001878f, 0.001779f, -0.000485f, 0.000804f, 0.002537f, 0.000804f, -0.000600f, -0.001960f, 0.001065f, 0.000630f, -0.001790f, 0.003488f, 0.002976f, 0.000927f, -0.001748f, -0.004554f, 0.000328f, -0.000394f, -0.000170f, 0.001957f, -0.002227f, 0.001415f, 0.002377f, -0.001458f, 0.005482f, 0.012819f, -0.017123f, -0.010116f, 0.011974f, -0.008973f, -0.009556f, -0.010491f, -0.012542f, 0.009013f, -0.003171f, -0.000374f, -0.002888f, - 0.000470f, -0.013955f, -0.002787f, 0.006381f, 0.006979f, 0.001583f, -0.007369f, -0.010712f, -0.008889f, -0.011304f, 0.002289f, 0.013473f, 0.001813f, 0.004355f, 0.004617f, 0.004490f, -0.007926f, 0.008299f, 0.005165f, -0.005941f, -0.004777f, -0.018303f, 0.002811f, 0.004074f, -0.014372f, -0.001152f, 0.004416f, -0.002710f, 0.001773f, -0.001310f, -0.015419f, 0.013096f, -0.014365f, 0.011278f, 0.000605f, 0.005675f, -0.016168f, -0.009061f, -0.014478f, -0.011432f, 0.002104f, -0.004090f, -0.005147f, -0.006454f, -0.000050f, 0.007180f, -0.013397f, -0.000252f, 0.003883f, -0.004350f, -0.014937f, -0.009376f, -0.003131f, 0.002788f, 0.007241f, 0.003121f, -0.012304f, 0.013098f, -0.004238f, -0.002896f, 0.013039f, -0.017145f, -0.005641f, -0.003442f, -0.003068f, 0.020455f, -0.007482f, -0.000381f, -0.007764f, -0.006458f, 0.003709f, 0.002789f, -0.000483f, 0.002160f, -0.001653f, -0.002922f, 0.003809f, 0.000020f, 0.001545f, 0.001605f, 0.004931f, -0.001974f, 0.001422f, 0.001067f, 0.000322f, 0.001265f, -0.005654f, 0.007304f, 0.006642f, -0.002308f, -0.001171f, 0.001010f, -0.000987f, 0.001224f, 0.000192f, -0.000549f, - -0.002731f, 0.001628f, -0.001422f, 0.000610f, 0.006462f, 0.004106f, 0.003461f, -0.002705f, 0.004603f, 0.001811f, -0.001895f, 0.002070f, 0.000680f, 0.001522f, 0.026487f, -0.023465f, -0.012331f, -0.015607f, 0.011409f, 0.004343f, -0.007929f, 0.005396f, -0.000044f, 0.015786f, 0.001070f, 0.000231f, -0.015077f, 0.010774f, 0.017434f, 0.018270f, 0.015217f, -0.008370f, -0.001209f, 0.002404f, -0.009591f, -0.006555f, 0.002629f, 0.001165f, -0.013856f, -0.006769f, -0.005787f, 0.006879f, -0.000964f, -0.010470f, -0.004753f, 0.003528f, 0.008474f, 0.001099f, -0.002824f, 0.000198f, -0.007305f, -0.000144f, -0.000359f, 0.001205f, -0.015846f, 0.009379f, 0.011084f, 0.002331f, 0.005768f, 0.006608f, -0.012803f, 0.018550f, 0.016758f, 0.003155f, -0.011381f, 0.006686f, -0.003950f, -0.016989f, -0.004220f, -0.005297f, -0.000133f, 0.001146f, -0.000190f, -0.010221f, -0.009079f, -0.021121f, -0.017552f, 0.000356f, 0.010870f, -0.009611f, 0.004667f, 0.001501f, -0.006414f, -0.017180f, -0.001560f, 0.010233f, -0.006551f, 0.009198f, 0.018017f, 0.005553f, -0.007207f, 0.010430f, 0.000134f, -0.000949f, 0.005057f, 0.008152f, - -0.000521f, -0.001256f, 0.002406f, 0.005315f, -0.002672f, -0.011488f, 0.000864f, -0.000182f, 0.001429f, 0.001592f, 0.004095f, 0.008663f, -0.002851f, -0.001347f, 0.006636f, 0.005994f, 0.001463f, 0.001001f, -0.003928f, 0.008360f, 0.001139f, -0.000397f, 0.005136f, 0.001697f, 0.002014f, 0.000991f, 0.004658f, 0.004107f, 0.004638f, 0.007412f, 0.000805f, 0.004489f, 0.000846f, 0.004982f, 0.002528f, 0.002899f, 0.002114f, 0.004729f, 0.004267f, -0.025140f, 0.002691f, -0.009370f, -0.033682f, -0.025909f, 0.006517f, 0.000266f, -0.005779f, 0.006034f, 0.016251f, -0.002554f, 0.009754f, 0.008634f, 0.005042f, -0.002561f, -0.008737f, 0.007190f, -0.007435f, 0.000928f, -0.006377f, 0.010161f, 0.018587f, -0.016654f, -0.004761f, 0.001060f, 0.006785f, 0.001826f, -0.005149f, -0.003006f, -0.006167f, -0.000455f, -0.007643f, 0.009830f, 0.002206f, -0.011701f, 0.013102f, -0.013055f, -0.004134f, 0.016046f, 0.014170f, 0.011937f, -0.013551f, -0.008903f, -0.012134f, 0.014153f, 0.019202f, -0.000259f, -0.003917f, 0.015218f, -0.022326f, 0.002779f, 0.006048f, -0.002135f, -0.018752f, 0.016944f, 0.005978f, 0.008625f, - 0.015930f, 0.000872f, -0.022635f, 0.005984f, 0.009364f, -0.005779f, -0.001639f, 0.015666f, -0.016158f, -0.015185f, -0.013079f, 0.001618f, 0.020208f, 0.010927f, -0.002858f, 0.023107f, -0.030652f, -0.011298f, 0.000415f, 0.014802f, 0.006933f, -0.004409f, -0.024349f, -0.003780f, -0.009736f, 0.002747f, 0.009337f, 0.023809f, 0.004110f, -0.006684f, 0.003172f, -0.004018f, -0.001524f, -0.007834f, 0.000096f, -0.006450f, 0.002283f, 0.006517f, 0.003742f, 0.006002f, 0.006810f, 0.002174f, 0.001516f, 0.000085f, 0.001268f, -0.003228f, -0.003337f, 0.000340f, 0.007189f, 0.002723f, -0.000793f, 0.001298f, 0.002944f, 0.005753f, 0.000846f, -0.001872f, 0.001062f, -0.001828f, 0.004683f, -0.008463f, -0.005063f, -0.003719f, 0.005425f, 0.004650f, -0.027083f, 0.027424f, 0.011161f, -0.000644f, -0.002760f, 0.002329f, 0.004733f, 0.014869f, -0.002790f, 0.001664f, -0.004722f, -0.003403f, 0.008402f, 0.004341f, 0.009751f, 0.004304f, 0.005642f, -0.018492f, -0.007646f, 0.031094f, 0.003176f, 0.009259f, 0.013085f, 0.004926f, -0.010501f, -0.019510f, 0.006112f, -0.008127f, 0.000765f, 0.006894f, -0.009693f, -0.011412f, - 0.013962f, 0.016375f, -0.008489f, -0.006032f, 0.012696f, -0.015543f, 0.006846f, -0.011958f, 0.005423f, -0.011573f, 0.016858f, 0.002365f, -0.002200f, 0.005940f, 0.028942f, 0.007994f, 0.011228f, -0.003247f, 0.001498f, 0.004945f, 0.021379f, -0.001835f, 0.030628f, 0.000924f, 0.014565f, -0.000515f, 0.027649f, 0.009792f, 0.020640f, 0.015658f, -0.003457f, -0.009233f, -0.002474f, -0.010550f, -0.011635f, 0.016206f, -0.003256f, -0.006322f, 0.002527f, 0.000243f, -0.008272f, -0.004030f, 0.002535f, 0.007255f, 0.002016f, -0.013854f, -0.013724f, -0.007132f, -0.014012f, -0.000365f, -0.000290f, -0.004119f, 0.003889f, -0.000276f, 0.005704f, -0.000836f, -0.005713f, 0.001182f, -0.002411f, -0.010562f, -0.006659f, 0.001511f, 0.014133f, -0.005955f, 0.005235f, -0.001596f, -0.000149f, 0.006551f, -0.004911f, 0.002227f, 0.003213f, -0.003589f, -0.002446f, -0.001765f, -0.004041f, 0.001992f, -0.005054f, -0.006596f, -0.002512f, -0.007147f, 0.008964f, -0.002517f, 0.000550f, -0.000771f, -0.000530f, 0.000948f, -0.002964f, 0.001323f, 0.002272f, 0.001164f, 0.003657f, 0.004848f, 0.000864f, 0.003613f, -0.002696f, -0.007733f, - 0.001548f, -0.002143f, 0.003247f, -0.003164f, 0.031777f, -0.008347f, -0.000283f, -0.039172f, -0.001399f, 0.020928f, -0.010967f, 0.018184f, -0.024924f, 0.003611f, 0.002492f, -0.000729f, -0.033050f, -0.001498f, -0.055063f, 0.002588f, -0.006087f, -0.023066f, -0.004039f, 0.003079f, -0.012100f, 0.002084f, 0.013895f, 0.002128f, -0.012625f, 0.002328f, -0.003927f, 0.012195f, -0.013576f, 0.000775f, 0.017625f, 0.003964f, 0.001432f, -0.002648f, 0.013498f, -0.008724f, 0.001387f, -0.000069f, 0.010350f, 0.001993f, -0.018614f, -0.009910f, -0.013141f, 0.015347f, -0.034838f, 0.016829f, 0.013811f, 0.011884f, 0.006605f, 0.002581f, -0.015274f, 0.010842f, -0.022602f, -0.005356f, -0.004785f, -0.004691f, -0.001043f, 0.001418f, 0.007199f, -0.017361f, -0.006862f, 0.029260f, 0.012218f, -0.010681f, -0.012456f, 0.003177f, -0.005205f, 0.008917f, -0.006002f, -0.001810f, -0.009525f, 0.026536f, 0.013466f, -0.009112f, 0.001609f, -0.013519f, 0.003081f, -0.010206f, -0.003582f, 0.010538f, 0.009776f, -0.003066f, 0.019312f, -0.007609f, 0.009551f, -0.012689f, 0.013465f, 0.001977f, -0.007928f, -0.010684f, -0.015966f, 0.004035f, - -0.001812f, 0.007250f, -0.002101f, -0.004699f, 0.002853f, 0.002974f, 0.004745f, 0.003884f, 0.008810f, -0.000336f, 0.002785f, -0.006854f, 0.005469f, -0.004920f, -0.002550f, -0.003690f, -0.000805f, -0.008725f, -0.001578f, 0.003415f, 0.007807f, -0.007498f, -0.003704f, -0.005417f, 0.005329f, 0.004172f, -0.003550f, -0.000676f, -0.005917f, 0.004494f, 0.020169f, 0.020379f, 0.011832f, 0.010566f, -0.009906f, 0.011753f, 0.019591f, -0.014551f, -0.000519f, -0.037766f, 0.021641f, 0.014768f, -0.005379f, 0.008750f, -0.002428f, 0.003020f, 0.013475f, -0.008456f, 0.021077f, -0.019003f, 0.001836f, 0.023732f, 0.010397f, 0.001461f, 0.018320f, -0.006478f, 0.008419f, 0.004830f, 0.009818f, 0.016216f, -0.009576f, -0.001941f, 0.029912f, 0.014954f, -0.000649f, 0.004130f, -0.020257f, 0.027524f, -0.023166f, -0.001459f, 0.024107f, 0.007482f, 0.025954f, -0.016284f, 0.004168f, -0.001053f, -0.006343f, 0.003482f, -0.025058f, -0.017582f, 0.023632f, -0.011767f, -0.005054f, -0.007991f, -0.026648f, 0.018929f, -0.006277f, -0.004416f, -0.011803f, 0.011644f, 0.027092f, -0.021354f, -0.004340f, 0.018260f, -0.020051f, -0.008752f, - 0.016324f, 0.022763f, -0.037624f, -0.010040f, -0.003222f, 0.016056f, -0.000563f, 0.018751f, -0.004548f, -0.013744f, 0.000920f, 0.009979f, 0.024307f, 0.012251f, -0.016325f, -0.000855f, 0.011963f, -0.024229f, -0.014824f, -0.004643f, -0.012400f, -0.012620f, -0.001476f, 0.011490f, -0.010865f, 0.002685f, 0.011990f, 0.003323f, 0.002157f, 0.008372f, -0.002063f, 0.005387f, 0.005218f, 0.005098f, 0.002946f, -0.000965f, -0.007284f, -0.002497f, -0.002018f, -0.006659f, -0.002992f, 0.001020f, 0.000870f, -0.001010f, 0.001056f, 0.007320f, -0.006032f, -0.001975f, -0.004476f, 0.003498f, 0.003461f, -0.001459f, -0.004993f, -0.011106f, 0.005608f, 0.004201f, 0.007225f, 0.001947f, 0.001779f, -0.000811f, -0.006867f, 0.002749f, -0.002748f, -0.003183f, -0.001984f, 0.019694f, 0.041734f, 0.008068f, -0.024668f, -0.008792f, 0.008195f, -0.054739f, 0.001730f, 0.000335f, -0.008568f, -0.002686f, 0.025290f, -0.041313f, 0.009090f, 0.019314f, -0.015190f, 0.017117f, 0.031934f, 0.007917f, -0.029501f, 0.007988f, -0.007425f, -0.000535f, -0.028917f, -0.008736f, 0.026388f, -0.002964f, 0.024197f, -0.006368f, -0.008472f, 0.003959f, - -0.020464f, -0.011510f, -0.014729f, -0.010930f, -0.008045f, 0.019739f, -0.021801f, 0.003545f, 0.038112f, 0.025724f, 0.008602f, -0.038735f, 0.006448f, 0.025414f, 0.010646f, 0.001511f, -0.013804f, -0.016820f, -0.041341f, -0.028568f, 0.005919f, -0.014138f, -0.014124f, -0.000816f, 0.017681f, 0.012513f, -0.012419f, 0.000542f, 0.025152f, -0.009679f, -0.004240f, 0.001141f, 0.033064f, 0.001256f, -0.001645f, 0.016807f, 0.005282f, -0.037613f, 0.010569f, 0.010894f, -0.000164f, -0.031150f, 0.013167f, 0.018245f, -0.013669f, -0.009767f, -0.025518f, 0.006799f, -0.009350f, 0.009668f, 0.004887f, -0.006018f, -0.010797f, 0.007049f, 0.003269f, 0.010885f, -0.005381f, 0.016978f, 0.006046f, -0.011655f, 0.001446f, -0.000608f, -0.015953f, 0.000297f, 0.001348f, -0.000059f, -0.000273f, -0.008439f, -0.007241f, -0.003402f, -0.000141f, 0.010642f, 0.003598f, 0.005563f, 0.008690f, -0.003944f, -0.005042f, 0.004088f, -0.008254f, -0.007470f, -0.000232f, -0.000420f, 0.002683f, -0.002474f, 0.001975f, 0.005235f, 0.005673f, 0.000690f, -0.003208f, -0.000800f, -0.000332f, -0.000944f, 0.000172f, -0.001389f, 0.000780f, -0.000192f, - 0.007373f, -0.004169f, -0.005082f, 0.013215f, 0.009595f, -0.001276f, 0.003813f, -0.012280f, 0.043152f, 0.002402f, -0.008664f, -0.000560f, 0.019095f, -0.009153f, 0.005292f, -0.004600f, 0.004542f, 0.016383f, -0.029757f, 0.031518f, 0.035694f, 0.010077f, 0.015134f, -0.012036f, 0.020265f, 0.046992f, 0.001578f, -0.005327f, -0.008590f, 0.020036f, -0.007021f, -0.011306f, -0.003897f, 0.007142f, -0.023313f, 0.010461f, -0.020524f, 0.023617f, 0.005431f, 0.023783f, -0.014810f, 0.021684f, 0.006520f, 0.028365f, 0.004772f, 0.006023f, -0.010046f, 0.017690f, 0.004504f, -0.005525f, 0.025516f, -0.009840f, -0.018025f, 0.036036f, 0.028781f, 0.010670f, 0.027210f, 0.039425f, 0.047788f, -0.014761f, -0.014858f, -0.016758f, 0.006061f, -0.021832f, 0.025942f, -0.003122f, -0.002261f, -0.036598f, 0.008620f, 0.041691f, 0.042484f, -0.001561f, -0.005450f, -0.029008f, 0.000561f, 0.027704f, -0.014000f, -0.017151f, 0.015734f, 0.002537f, -0.014959f, 0.005432f, -0.002338f, -0.009115f, -0.001968f, -0.007805f, -0.000207f, 0.016113f, 0.012033f, -0.003176f, 0.002981f, -0.003788f, -0.015895f, -0.020779f, -0.003773f, 0.010487f, - 0.004329f, 0.014805f, -0.002845f, -0.013780f, -0.003673f, 0.015349f, -0.007049f, 0.008773f, 0.014178f, -0.014051f, -0.003638f, -0.001289f, 0.003722f, -0.000676f, 0.009512f, 0.006962f, 0.003524f, -0.014006f, 0.003704f, 0.007803f, 0.002479f, 0.003258f, 0.005231f, -0.012420f, -0.005704f, 0.000093f, -0.000501f, -0.006552f, -0.016092f, -0.005182f, 0.001578f, 0.008495f, 0.002004f, -0.006575f, -0.007600f, -0.056588f, -0.039578f, 0.020610f, 0.007924f, -0.029731f, 0.002927f, 0.012948f, -0.027114f, -0.017119f, -0.011767f, 0.032031f, 0.014293f, 0.010143f, -0.010359f, -0.008005f, -0.008259f, -0.020188f, -0.026861f, -0.047239f, 0.024409f, 0.020863f, -0.010110f, 0.053030f, 0.025435f, 0.050913f, 0.034932f, 0.003123f, -0.016458f, 0.013389f, 0.006172f, 0.023081f, 0.026583f, 0.029342f, -0.004333f, -0.005326f, 0.012475f, -0.013469f, -0.003175f, -0.011889f, -0.022132f, -0.036380f, -0.010647f, 0.036759f, -0.009223f, -0.014878f, -0.020966f, 0.014537f, 0.022269f, 0.014726f, 0.001397f, 0.021601f, 0.042323f, -0.025434f, -0.011603f, -0.019612f, -0.014186f, -0.040996f, -0.010053f, 0.010179f, -0.018648f, -0.014694f, - -0.047100f, -0.067142f, 0.007288f, -0.044291f, -0.069510f, -0.050411f, -0.021194f, 0.044807f, 0.015495f, 0.027282f, 0.020528f, -0.046460f, -0.019594f, 0.003842f, 0.023171f, -0.023166f, -0.027326f, -0.026536f, -0.008252f, 0.013611f, -0.015727f, -0.057873f, -0.036364f, -0.008475f, -0.011735f, -0.004328f, -0.008602f, 0.032410f, 0.029704f, 0.030647f, 0.031402f, 0.010281f, -0.000300f, 0.011636f, 0.003267f, -0.001170f, 0.009263f, -0.026183f, -0.010075f, 0.011109f, 0.015201f, -0.000884f, -0.008492f, -0.009585f, 0.003802f, -0.014343f, -0.020601f, 0.018730f, -0.015352f, -0.007959f, 0.001690f, -0.018090f, -0.016900f, -0.030731f, -0.011932f, -0.007368f, 0.002164f, 0.025319f, -0.006567f, -0.003977f, -0.008093f, 0.012816f, -0.006869f, 0.000507f, 0.012427f, 0.000808f, -0.008778f, 0.005514f, 0.012399f, -0.007811f, -0.001858f, -0.000595f, 0.006565f, -0.107417f, -0.016865f, 0.034514f, -0.036571f, 0.015001f, -0.014255f, -0.058281f, -0.018163f, 0.062385f, 0.078574f, -0.041737f, 0.001449f, -0.014390f, -0.064129f, -0.051080f, -0.048266f, -0.051516f, -0.027549f, -0.033652f, -0.002797f, 0.010977f, -0.008988f, 0.013101f, - 0.012079f, -0.021115f, -0.005804f, -0.028965f, 0.012110f, -0.045586f, -0.041071f, 0.009795f, 0.007030f, -0.012464f, -0.015095f, 0.035668f, -0.010581f, 0.049550f, 0.010905f, 0.045923f, -0.031204f, 0.019958f, 0.012921f, 0.055634f, 0.029686f, 0.019454f, 0.005234f, 0.008350f, -0.006700f, 0.016283f, 0.022844f, -0.018107f, -0.025251f, 0.038899f, -0.005513f, -0.049030f, -0.094008f, -0.113024f, -0.081549f, 0.013384f, -0.000281f, -0.105270f, 0.034009f, 0.017756f, 0.026165f, -0.036008f, 0.004385f, 0.012207f, 0.004512f, 0.053773f, 0.054794f, 0.109694f, 0.036314f, -0.058773f, -0.075421f, -0.046427f, -0.041759f, -0.048290f, -0.043003f, -0.001702f, 0.023221f, 0.031323f, -0.020535f, 0.041299f, -0.035849f, -0.049934f, -0.038917f, -0.025928f, -0.019587f, -0.039085f, 0.024074f, -0.002952f, 0.023011f, 0.017611f, 0.002408f, 0.040522f, -0.021696f, -0.009626f, -0.040912f, 0.013376f, 0.021311f, -0.003700f, -0.004003f, 0.011965f, -0.039321f, 0.001109f, -0.014248f, 0.007116f, -0.019165f, -0.027096f, 0.015812f, -0.001122f, -0.011542f, -0.004600f, 0.018649f, -0.015365f, 0.009432f, -0.014333f, 0.010797f, 0.009386f, - -0.005954f, -0.014240f, 0.008289f, 0.009180f, -0.029171f, 0.011567f, -0.007789f, -0.008860f, -0.009308f, 0.005766f, -0.019116f, -0.008752f, 0.060267f, -0.016122f, -0.113780f, -0.032538f, 0.093754f, -0.012992f, 0.020958f, 0.013338f, 0.017564f, 0.032800f, 0.026949f, 0.009355f, -0.018487f, -0.006924f, 0.004745f, -0.020294f, -0.004618f, 0.034386f, -0.030708f, -0.018388f, -0.030776f, -0.007443f, 0.005438f, 0.003916f, 0.008313f, 0.016050f, -0.023357f, 0.020893f, 0.051453f, -0.000973f, -0.029791f, 0.002689f, -0.019432f, -0.006801f, 0.030602f, -0.032150f, 0.003809f, 0.010104f, 0.037400f, 0.053860f, -0.034087f, -0.019601f, 0.021078f, 0.002839f, 0.006097f, 0.006219f, -0.022526f, -0.058116f, -0.010164f, -0.027069f, 0.053068f, -0.100385f, -0.065756f, -0.027194f, -0.010708f, 0.028964f, 0.006308f, -0.035457f, -0.005733f, -0.040846f, -0.043846f, -0.015813f, -0.031634f, 0.005784f, 0.026411f, 0.120618f, 0.022609f, -0.017965f, -0.077373f, -0.063852f, 0.019185f, -0.001994f, -0.072608f, 0.039294f, 0.039382f, -0.074161f, -0.001125f, 0.019236f, 0.021672f, 0.079880f, 0.035380f, 0.016647f, -0.078718f, -0.040789f, - -0.054226f, 0.049553f, -0.004711f, -0.016324f, -0.008535f, 0.015413f, 0.052630f, 0.044350f, -0.023092f, -0.046950f, -0.068180f, 0.016535f, 0.040841f, -0.014384f, -0.006690f, 0.035593f, 0.020741f, 0.031005f, 0.008223f, 0.010976f, -0.026024f, -0.007998f, -0.012104f, 0.013329f, 0.014416f, -0.003835f, -0.005727f, -0.004082f, 0.019326f, 0.021094f, -0.030655f, 0.017846f, 0.014077f, 0.025512f, -0.016024f, -0.011612f, 0.016567f, 0.005515f, -0.021983f, -0.002536f, 0.026855f, 0.004801f, -0.019012f, -0.039910f, -0.135071f, 0.019152f, 0.020840f, -0.004591f, -0.002282f, -0.010521f, -0.038959f, 0.015122f, -0.008669f, 0.068710f, -0.071160f, -0.014639f, 0.072411f, -0.003491f, -0.049169f, -0.006182f, 0.042662f, 0.051891f, 0.031826f, -0.009514f, 0.037099f, -0.028334f, 0.025008f, -0.011614f, -0.009810f, -0.024546f, 0.040646f, 0.027594f, -0.026832f, -0.012456f, -0.004086f, 0.041212f, -0.004112f, 0.004196f, -0.026806f, 0.027697f, 0.017904f, -0.030888f, 0.055419f, 0.002267f, -0.050270f, 0.043972f, -0.054597f, -0.028913f, 0.049270f, -0.105896f, -0.067583f, 0.057208f, -0.036735f, 0.042347f, -0.067234f, 0.014693f, - 0.024327f, -0.037079f, 0.001160f, -0.003154f, -0.069389f, -0.016298f, 0.071150f, 0.075110f, -0.085997f, -0.028722f, 0.025919f, -0.069007f, 0.088518f, 0.088643f, 0.012483f, -0.127506f, -0.067043f, 0.135056f, -0.071733f, -0.014519f, 0.109503f, -0.064654f, -0.131627f, -0.029739f, 0.118424f, -0.025797f, -0.086857f, -0.021535f, -0.158364f, -0.007463f, 0.127872f, -0.046925f, -0.128049f, -0.013229f, -0.036120f, -0.017458f, 0.037835f, -0.004781f, -0.001712f, -0.046809f, -0.030682f, -0.015071f, 0.051020f, -0.065248f, 0.003001f, 0.010225f, -0.020564f, 0.002084f, 0.060769f, -0.039216f, -0.049213f, -0.006693f, 0.016988f, 0.038048f, -0.015403f, 0.019052f, 0.028963f, 0.003150f, -0.044446f, -0.023805f, 0.000822f, -0.035466f, -0.017326f, 0.067316f, -0.025653f, -0.066047f, -0.017837f, 0.038230f, 0.015716f, -0.005165f, 0.008365f, -0.059739f, -0.034517f, 0.045188f, 0.067035f, 0.007988f, -0.050007f, -0.024498f, 0.001977f, 0.017633f, 0.033519f, -0.019672f, -0.074646f, -0.070449f, -0.002155f, -0.088781f, -0.026442f, -0.038046f, -0.035765f, -0.027185f, 0.057098f, -0.006796f, -0.018676f, -0.024725f, 0.010933f, -0.031490f, - -0.073933f, 0.056569f, 0.017678f, 0.048810f, 0.015167f, 0.050503f, -0.020544f, -0.031940f, 0.011033f, -0.053737f, 0.041137f, -0.048703f, -0.010482f, 0.031399f, -0.036901f, -0.008140f, -0.022517f, -0.058847f, 0.008535f, -0.044520f, -0.032125f, -0.038885f, -0.028815f, -0.017968f, -0.039475f, 0.006564f, 0.043175f, -0.029737f, -0.010753f, 0.005043f, 0.039761f, -0.018559f, 0.013899f, -0.041365f, 0.066404f, 0.020577f, 0.028307f, 0.017997f, 0.063672f, -0.004020f, -0.075480f, 0.016336f, 0.026999f, -0.021133f, -0.000550f, 0.039352f, -0.052605f, -0.052079f, -0.061006f, 0.052210f, 0.015217f, -0.074847f, 0.028769f, -0.049455f, -0.009955f, -0.069838f, 0.030499f, 0.049333f, 0.009909f, -0.077323f, 0.042994f, 0.035678f, -0.010205f, -0.067961f, 0.017949f, -0.041042f, -0.014386f, -0.003045f, -0.021097f, 0.033523f, -0.030718f, -0.055100f, 0.026927f, -0.012348f, 0.022704f, -0.000361f, -0.002477f, -0.000408f, -0.015371f, -0.017175f, 0.011191f, 0.049093f, -0.006432f, -0.069414f, -0.019659f, 0.028863f, -0.034766f, -0.014627f, 0.032833f, -0.012560f, -0.005275f, -0.027745f, 0.053926f, 0.031980f, -0.016556f, 0.024493f, - -0.004868f, 0.011024f, 0.043628f, -0.007971f, -0.039205f, 0.016205f, 0.024665f, -0.019902f, 0.031270f, -0.005087f, 0.019076f, 0.002338f, -0.014955f, 0.026644f, 0.038086f, -0.022048f, -0.041290f, 0.016042f, 0.024445f, -0.019964f, -0.004658f, 0.023360f, 0.007443f, 0.065779f, 0.123501f, -0.029616f, 0.061282f, 0.012000f, -0.029085f, -0.055073f, -0.032081f, 0.071884f, -0.023458f, 0.013430f, 0.027930f, -0.007156f, 0.066242f, -0.009636f, 0.051998f, 0.054383f, -0.066561f, 0.034442f, -0.017385f, 0.001726f, 0.024499f, 0.020389f, -0.002211f, 0.010940f, 0.019839f, 0.066569f, 0.068388f, 0.052838f, -0.038530f, -0.013037f, -0.090775f, -0.002611f, 0.021508f, 0.041128f, 0.009510f, -0.075015f, 0.032976f, -0.044968f, 0.058360f, -0.052519f, -0.036784f, 0.003953f, -0.044026f, -0.007408f, -0.025400f, 0.089915f, -0.049012f, -0.023857f, -0.094031f, -0.030440f, -0.049349f, 0.132998f, 0.080793f, -0.027822f, -0.089451f, -0.095774f, -0.056984f, 0.066257f, 0.086259f, 0.043901f, 0.012746f, -0.114947f, -0.053431f, 0.038033f, 0.032341f, 0.005203f, 0.041675f, -0.023691f, -0.075771f, 0.036077f, -0.128565f, 0.140064f, - -0.013062f, -0.090196f, 0.210386f, 0.030390f, 0.073221f, 0.126306f, -0.208832f, -0.150244f, 0.041691f, -0.012176f, 0.031937f, 0.045966f, -0.130557f, -0.009435f, 0.026356f, 0.002863f, 0.109377f, 0.008002f, -0.057276f, -0.005738f, 0.058787f, -0.033876f, 0.025679f, 0.030465f, 0.001191f, -0.023668f, 0.028743f, -0.075763f, 0.058011f, -0.014576f, -0.024231f, 0.033013f, 0.008699f, 0.002594f, 0.034347f, -0.007857f, 0.020558f, -0.003946f, 0.013178f, -0.009658f, -0.039973f, 0.024504f, 0.016834f, 0.023188f, -0.000283f, 0.000952f, 0.015647f, 0.009010f, 0.006034f, 0.046758f, 0.051569f, 0.003241f, 0.033766f, -0.031543f, 0.004730f, -0.020620f, 0.039049f, 0.035979f, 0.005436f, -0.010048f, -0.023594f, -0.054880f, 0.004525f, -0.054683f, 0.037013f, -0.077255f, 0.047830f, -0.031786f, 0.078486f, -0.035384f, -0.003646f, 0.044726f, 0.007954f, 0.003943f, -0.020230f, -0.017494f, 0.002043f, -0.030029f, 0.033116f, -0.003828f, 0.035165f, -0.027537f, -0.027186f, 0.009293f, 0.001384f, -0.027913f, 0.017617f, -0.003478f, 0.015374f, -0.008533f, -0.007562f, 0.014749f, -0.014029f, -0.001085f, 0.010951f, -0.005638f, - -0.006700f, 0.055751f, -0.003833f, -0.018578f, -0.009981f, 0.026516f, -0.002424f, -0.030256f, 0.016093f, 0.032666f, 0.006577f, 0.000865f, -0.019297f, 0.006936f, -0.015631f, 0.015031f, 0.039582f, -0.013961f, 0.018092f, -0.014828f, -0.004463f, -0.016249f, -0.007748f, 0.010550f, 0.012791f, -0.023027f, 0.013928f, 0.004254f, -0.002959f, -0.023017f, 0.003951f, 0.008532f, -0.017167f, 0.024989f, 0.020838f, -0.041667f, 0.010654f, -0.038231f, -0.043630f, 0.030125f, -0.015551f, 0.036361f, 0.019701f, 0.001241f, 0.018529f, -0.005642f, -0.022525f, -0.005227f, 0.001322f, 0.025395f, -0.011412f, 0.007891f, 0.010371f, -0.014346f, -0.002669f, 0.008930f, -0.004412f, -0.002635f, 0.014578f, 0.000001f, 0.005571f, -0.011867f, 0.004997f, -0.001060f, -0.012449f, 0.023694f, 0.002037f, 0.019378f, -0.009413f, 0.015950f, -0.007929f, 0.001298f, -0.012411f, 0.010733f, -0.006047f, 0.023482f, -0.007289f, 0.022221f, -0.022675f, 0.005220f, 0.001453f, -0.004548f, 0.000747f, 0.002981f, 0.017475f, -0.000553f, -0.020633f, 0.013842f, -0.011647f, 0.002424f, 0.012449f, -0.012528f, 0.021791f, -0.045377f, 0.096115f, 0.018204f, - 0.023680f, -0.012130f, 0.008873f, -0.002717f, 0.018285f, 0.005814f, 0.041020f, 0.002888f, -0.022110f, 0.013550f, -0.014393f, 0.006382f, 0.008480f, -0.018712f, 0.001095f, 0.004606f, -0.020202f, 0.018585f, 0.004853f, -0.008260f, 0.025000f, -0.008826f, 0.009944f, -0.007541f, 0.004744f, 0.004823f, 0.002383f, -0.003054f, -0.007254f, -0.003323f, 0.003594f, 0.000693f, -0.004039f, -0.012031f, 0.009151f, -0.008054f, 0.004623f, 0.008032f, -0.008171f, 0.001840f, -0.007623f, 0.002302f, -0.012159f, -0.019817f, 0.020667f, -0.010954f, -0.005207f, 0.008805f, 0.004130f, -0.003424f, 0.002457f, 0.017752f, -0.019357f, 0.008516f, -0.007221f, 0.015392f, -0.016249f, 0.009405f, 0.004709f, -0.002796f, 0.003703f, 0.000479f, 0.000342f, 0.007583f, -0.010232f, 0.005926f, 0.005252f, -0.002711f, -0.000893f, 0.013472f, -0.001938f, 0.004654f, -0.015400f, 0.021033f, -0.016112f, -0.000149f, 0.010595f, -0.009348f, 0.007271f, 0.002440f, 0.002648f, -0.009778f, 0.008099f, 0.008399f, -0.005089f, 0.003387f, 0.004246f, -0.006937f, 0.002600f, 0.003566f, -0.001401f, 0.007389f, 0.000446f, -0.000059f, -0.000661f, 0.006644f, - 0.005164f, -0.004044f, 0.005806f, -0.002818f, 0.002669f, 0.002984f, -0.000591f, 0.008239f, -0.003544f, 0.000168f, 0.005311f, -0.006319f, 0.000635f, -0.000543f, -0.004426f, 0.000754f, 0.004766f, -0.001265f, -0.003701f, 0.008209f, -0.005056f, 0.018169f, -0.085318f, -0.211811f, 0.045761f, 0.176141f, 0.119073f, 0.248437f, -0.081247f, -0.069457f, -0.142926f, -0.228440f, -0.022571f, 0.071204f, 0.093868f, 0.122498f, 0.061767f, 0.006775f, -0.020017f, -0.052964f, -0.075531f, -0.011445f, -0.020168f, 0.007439f, 0.017351f, -0.000900f, 0.004369f, 0.009133f, 0.004065f, 0.029915f, 0.035536f, 0.022075f, -0.004060f, 0.004102f, -0.026273f, -0.055161f, -0.058765f, -0.028828f, -0.038538f, 0.031746f, 0.058540f, 0.062108f, 0.068212f, 0.037367f, -0.011010f, -0.026939f, -0.050102f, -0.052960f, -0.036773f, -0.020714f, -0.002359f, 0.013359f, 0.025737f, 0.027591f, 0.023245f, 0.019992f, -0.003408f, 0.005362f, -0.005889f, 0.002636f, -0.004417f, -0.002755f, -0.001560f, -0.018794f, -0.019643f, -0.014273f, -0.029623f, 0.000018f, -0.005548f, 0.003715f, 0.050488f, 0.066438f, 0.022479f, 0.022499f, -0.018185f, -0.036552f, - -0.025203f, -0.044009f, -0.035276f, 0.012426f, -0.002980f, -0.021349f, 0.016447f, 0.017530f, 0.020996f, 0.049718f, 0.020764f, 0.021793f, 0.005496f, -0.026815f, -0.026330f, -0.021640f, -0.023510f, -0.029890f, -0.025420f, -0.015222f, 0.004779f, 0.033189f, 0.050156f, 0.046853f, 0.019099f, 0.009437f, -0.012120f, -0.022738f, -0.020321f, -0.022538f, -0.025886f, -0.011924f, -0.010716f, -0.000929f, 0.008875f, 0.006694f, 0.020308f, 0.026764f, 0.019505f, 0.013177f, 0.004775f, -0.001739f, -0.012576f, -0.013179f, -0.020352f, -0.023095f, -0.017985f, -0.016211f, -0.003951f, 0.017159f, 0.025872f, 0.027664f, 0.024779f, 0.009978f, 0.004716f, -0.012431f, -0.019465f, -0.010533f, -0.014339f, -0.019795f, -0.014752f, 0.002645f, 0.013588f, 0.012514f, 0.007260f, 0.007931f, 0.007420f, 0.005456f, 0.001834f, -0.001491f, -0.001901f, -0.005353f, -0.006562f, -0.006374f, -0.007128f, -0.008736f, -0.004519f, 0.003454f, 0.006645f, 0.007334f, 0.004841f, 0.002075f, 0.000634f, 0.000526f, 0.000558f}, - {-0.011968f, 0.001523f, 0.003811f, 0.003691f, 0.018853f, 0.005127f, 0.003987f, -0.005577f, 0.000728f, -0.009551f, 0.002249f, 0.008786f, -0.004447f, 0.000426f, -0.001847f, -0.004698f, -0.007569f, 0.005856f, -0.012665f, -0.006388f, -0.006354f, 0.006879f, 0.007534f, 0.003974f, 0.001807f, 0.005459f, 0.004508f, 0.009012f, -0.003123f, 0.003160f, 0.005607f, 0.001197f, 0.001851f, -0.006559f, -0.002824f, -0.002738f, -0.002466f, 0.006096f, -0.011650f, 0.001958f, -0.004033f, 0.012224f, 0.000298f, -0.002190f, -0.003058f, -0.005026f, -0.001671f, -0.005246f, -0.015367f, -0.004856f, -0.003004f, -0.002473f, -0.003442f, 0.001600f, -0.002875f, -0.000713f, -0.000985f, 0.005394f, 0.002413f, -0.000685f, 0.003444f, -0.003000f, 0.006605f, -0.004313f, -0.007151f, 0.006925f, 0.007253f, -0.003120f, -0.006868f, 0.000672f, 0.003771f, 0.002854f, 0.003278f, -0.003242f, 0.000045f, 0.002670f, 0.003590f, 0.001578f, -0.000981f, 0.000451f, 0.004461f, 0.008599f, 0.004162f, -0.001048f, -0.000099f, -0.002023f, -0.002148f, 0.001807f, -0.002830f, 0.001756f, 0.002124f, -0.000820f, -0.000276f, 0.000950f, 0.000828f, -0.000851f, - 0.000719f, 0.000503f, -0.003940f, 0.000638f, 0.000311f, 0.001236f, 0.000705f, -0.001496f, 0.001429f, 0.001140f, -0.000099f, 0.017054f, -0.003188f, -0.001630f, 0.001833f, 0.004707f, -0.012563f, 0.007827f, -0.014912f, -0.000671f, -0.007217f, -0.001060f, -0.004769f, -0.001125f, -0.001159f, 0.007498f, -0.006315f, 0.008121f, -0.008461f, -0.009245f, 0.003923f, 0.012411f, -0.014624f, -0.004061f, -0.007071f, 0.000105f, -0.003676f, 0.003957f, 0.005252f, 0.002655f, 0.005350f, -0.008499f, 0.000315f, 0.011934f, 0.004693f, 0.001522f, -0.008656f, -0.012371f, -0.007440f, 0.001901f, -0.006324f, -0.003572f, 0.002424f, 0.008038f, -0.007236f, -0.007132f, 0.002898f, -0.005214f, 0.009235f, 0.003094f, -0.000943f, 0.006510f, 0.006187f, -0.000005f, 0.010379f, 0.005134f, 0.003255f, 0.002751f, 0.006807f, 0.010708f, -0.007043f, 0.002049f, 0.002949f, -0.007525f, 0.000677f, 0.006117f, -0.002372f, 0.015464f, -0.004768f, -0.004101f, -0.003212f, 0.005704f, 0.007875f, -0.010026f, -0.004078f, 0.002732f, -0.001813f, 0.002464f, 0.000976f, -0.004393f, 0.001968f, 0.000940f, -0.003230f, -0.005314f, 0.002197f, 0.001492f, - 0.004882f, 0.000411f, 0.001511f, 0.002239f, -0.000212f, -0.001595f, 0.003580f, 0.000214f, -0.000009f, 0.003080f, -0.001665f, 0.001492f, 0.004114f, -0.000346f, -0.000883f, 0.000778f, -0.000609f, 0.001269f, -0.002512f, -0.000789f, -0.001167f, 0.000167f, -0.000378f, 0.001608f, 0.000175f, -0.001574f, 0.000075f, -0.021921f, -0.003564f, -0.004901f, -0.003921f, -0.001980f, -0.002698f, 0.011634f, 0.013912f, -0.003201f, 0.011349f, 0.004316f, -0.006300f, 0.002942f, -0.009539f, 0.001659f, 0.001999f, -0.012823f, -0.001911f, 0.001967f, 0.002221f, 0.008832f, -0.001721f, 0.007668f, -0.005171f, -0.009843f, -0.010384f, -0.002991f, -0.005262f, -0.007889f, 0.008125f, -0.003217f, -0.001590f, -0.001451f, 0.001685f, 0.004405f, -0.012576f, 0.000022f, 0.001737f, -0.005981f, 0.014953f, 0.001144f, -0.003707f, -0.003273f, 0.015967f, -0.001171f, 0.002015f, 0.009425f, 0.000266f, 0.005749f, 0.002235f, 0.000505f, 0.008805f, -0.000080f, -0.006185f, 0.007887f, 0.004233f, 0.005056f, 0.007162f, 0.002342f, -0.005840f, 0.004119f, 0.005875f, 0.005687f, 0.008821f, 0.000022f, -0.008194f, -0.006572f, 0.010347f, 0.014388f, - -0.013173f, 0.002612f, -0.003495f, -0.002352f, 0.003009f, 0.005474f, 0.005273f, -0.004242f, -0.001705f, -0.004101f, -0.006800f, -0.005968f, -0.002192f, -0.003807f, -0.005846f, 0.001296f, -0.001604f, 0.002179f, 0.001873f, -0.001848f, 0.001036f, 0.000321f, -0.004752f, 0.001563f, -0.003217f, -0.005795f, 0.000374f, -0.001736f, -0.002432f, -0.002625f, -0.000748f, 0.001002f, -0.000889f, 0.001620f, -0.001119f, -0.001985f, -0.002682f, -0.002509f, -0.001074f, 0.000399f, 0.001891f, -0.016105f, 0.017208f, 0.015944f, 0.012024f, -0.008353f, 0.009404f, 0.016966f, -0.004243f, 0.013264f, 0.005003f, 0.002012f, -0.002044f, 0.014623f, 0.006919f, -0.003394f, -0.010454f, 0.006098f, -0.004322f, -0.005574f, 0.005932f, 0.007012f, 0.003081f, -0.010369f, 0.001703f, 0.009361f, -0.004538f, 0.003193f, -0.020433f, 0.002974f, -0.001631f, 0.009881f, 0.002424f, -0.004213f, -0.006152f, 0.012638f, -0.010841f, 0.000910f, -0.008754f, 0.001056f, -0.002673f, 0.007075f, -0.001457f, -0.002264f, -0.010731f, -0.002544f, -0.001884f, 0.013371f, 0.000675f, -0.012167f, -0.000442f, -0.000640f, 0.004180f, 0.006413f, -0.005421f, 0.000059f, - -0.006920f, 0.007430f, -0.001615f, 0.008973f, -0.004816f, 0.013342f, 0.006614f, -0.014647f, 0.015566f, -0.002206f, -0.010746f, 0.001868f, 0.014223f, 0.002927f, 0.002192f, -0.011461f, -0.000748f, -0.004417f, -0.006214f, -0.005985f, 0.000549f, 0.005462f, 0.007002f, 0.003845f, 0.003827f, -0.004448f, 0.003378f, -0.003849f, -0.000444f, -0.000167f, -0.001797f, -0.000706f, 0.004046f, -0.006352f, 0.001741f, -0.000582f, 0.000560f, 0.002192f, 0.001746f, -0.000129f, 0.002779f, 0.000348f, -0.004211f, -0.004514f, 0.002676f, 0.001278f, -0.000185f, -0.002965f, -0.000597f, 0.000771f, -0.000409f, -0.001270f, -0.002937f, 0.001896f, -0.000053f, -0.001782f, 0.002032f, -0.001171f, -0.000808f, -0.002296f, -0.001445f, -0.000837f, -0.002971f, 0.002133f, 0.018517f, -0.006438f, -0.013489f, -0.000749f, -0.020206f, -0.000072f, -0.017370f, -0.006072f, 0.011858f, -0.012407f, -0.013685f, 0.004035f, 0.001082f, 0.001172f, -0.003245f, -0.004518f, -0.009920f, 0.006631f, -0.019364f, -0.005989f, 0.001908f, 0.011924f, 0.000655f, 0.012099f, 0.004269f, 0.026643f, 0.010174f, -0.000328f, 0.001125f, 0.012665f, -0.003087f, -0.003852f, - -0.002439f, 0.002062f, -0.008464f, -0.004225f, -0.014235f, -0.001037f, -0.006568f, -0.003950f, 0.017420f, 0.000241f, 0.010879f, -0.004422f, 0.004406f, -0.001145f, 0.006469f, -0.002223f, 0.006018f, -0.006043f, -0.007486f, -0.001237f, 0.002048f, -0.007543f, -0.007557f, 0.000623f, 0.003806f, 0.008081f, -0.001224f, -0.003834f, -0.001709f, 0.007667f, 0.013079f, 0.000686f, -0.009001f, -0.012834f, 0.000128f, 0.003478f, 0.001285f, 0.017427f, -0.011003f, -0.000631f, 0.007764f, -0.002927f, -0.009226f, 0.012272f, 0.005581f, 0.002149f, -0.006150f, -0.006612f, -0.010998f, -0.004324f, -0.001231f, -0.005711f, -0.002900f, -0.004952f, 0.000877f, 0.001235f, 0.002677f, 0.000315f, 0.000751f, -0.006138f, -0.003218f, -0.006578f, -0.002334f, -0.001925f, -0.005046f, -0.003204f, 0.001655f, -0.000615f, -0.002169f, -0.000601f, 0.001560f, -0.004131f, 0.001991f, -0.002989f, -0.000400f, -0.001266f, -0.002301f, -0.000820f, -0.000118f, 0.001813f, -0.002953f, -0.004327f, 0.002160f, 0.001122f, 0.016567f, -0.012773f, -0.002622f, 0.001024f, -0.001019f, -0.000508f, -0.010516f, -0.008111f, -0.001160f, 0.006924f, 0.002505f, 0.002757f, - 0.002905f, 0.007277f, -0.001526f, 0.006651f, 0.005401f, -0.017300f, -0.006652f, -0.020298f, 0.005235f, -0.007178f, 0.010175f, -0.006609f, -0.008963f, -0.006605f, 0.005281f, -0.013547f, -0.011240f, 0.015640f, -0.008584f, 0.016961f, -0.004037f, 0.005067f, -0.006005f, -0.011508f, 0.012609f, -0.009770f, -0.010924f, -0.001148f, -0.005947f, -0.012876f, -0.009883f, -0.016222f, 0.000658f, 0.010333f, 0.005974f, -0.006343f, 0.017948f, 0.006522f, -0.006605f, -0.008406f, -0.012997f, 0.000503f, -0.004873f, -0.009154f, -0.004587f, -0.003922f, -0.006404f, 0.003353f, 0.014364f, -0.000938f, 0.000942f, -0.009800f, 0.004571f, 0.004794f, -0.008465f, -0.006793f, 0.003437f, 0.017391f, 0.006962f, -0.004407f, -0.002310f, -0.003745f, -0.017980f, -0.014233f, -0.011935f, 0.012420f, 0.013287f, -0.002008f, -0.006202f, 0.005730f, -0.003957f, 0.005021f, -0.002641f, 0.002336f, 0.000419f, 0.000183f, -0.005826f, 0.003826f, -0.003405f, -0.002530f, -0.000911f, 0.003414f, 0.002627f, -0.000427f, -0.004862f, 0.003013f, -0.000701f, 0.002191f, -0.001642f, -0.001164f, -0.004290f, -0.001959f, -0.000150f, -0.000609f, 0.000841f, 0.000752f, - -0.000539f, 0.000652f, -0.003556f, 0.001523f, 0.000362f, 0.000437f, -0.001279f, 0.004348f, 0.002830f, -0.000269f, -0.001736f, 0.000356f, -0.002699f, 0.004927f, 0.023847f, -0.004498f, -0.000028f, -0.003897f, 0.015529f, 0.014722f, 0.005096f, -0.024500f, -0.004059f, -0.029760f, 0.017649f, 0.007463f, 0.000516f, 0.030766f, 0.014570f, -0.002682f, -0.013751f, 0.012694f, -0.005867f, 0.003167f, 0.004335f, 0.002022f, 0.010108f, -0.008930f, 0.017259f, 0.006580f, 0.001713f, -0.005190f, -0.008725f, 0.011709f, 0.009888f, -0.001871f, 0.006445f, -0.014637f, 0.002793f, -0.019553f, 0.008030f, 0.001132f, 0.010035f, -0.016051f, 0.003383f, -0.005223f, 0.003602f, 0.018324f, 0.015551f, 0.000762f, 0.004535f, -0.011340f, 0.014996f, 0.000455f, 0.031856f, 0.033651f, -0.004410f, -0.008936f, -0.009105f, -0.007246f, -0.019437f, -0.005419f, -0.025400f, 0.001575f, -0.002071f, -0.001382f, -0.005133f, 0.008978f, 0.015109f, 0.023618f, 0.021980f, 0.016918f, -0.027698f, -0.019765f, -0.000806f, 0.001431f, 0.029186f, -0.020470f, 0.015713f, -0.001055f, -0.005814f, -0.002966f, -0.000645f, -0.005728f, -0.016060f, -0.010509f, - -0.002968f, 0.004761f, 0.001587f, -0.000363f, -0.004325f, 0.002587f, -0.005642f, -0.000510f, -0.002963f, 0.006224f, 0.006973f, -0.001621f, -0.001232f, 0.006477f, 0.004984f, 0.000874f, -0.000872f, 0.002408f, 0.000496f, 0.001017f, -0.001174f, 0.002828f, -0.000134f, -0.001570f, -0.002511f, 0.000867f, 0.002843f, 0.004174f, 0.008974f, 0.006974f, -0.003283f, 0.000891f, -0.006233f, -0.001135f, 0.002912f, -0.000459f, -0.001165f, 0.000232f, 0.001379f, -0.008601f, 0.017131f, 0.003697f, -0.012615f, -0.006964f, 0.032154f, 0.031620f, 0.035436f, -0.003454f, -0.001469f, -0.006005f, 0.005985f, 0.017350f, 0.019961f, 0.005813f, -0.008533f, -0.017022f, -0.034643f, 0.010311f, -0.020481f, -0.004472f, -0.002057f, -0.004410f, 0.002379f, -0.001005f, -0.006322f, -0.000735f, -0.020057f, -0.007933f, 0.001255f, -0.003689f, -0.022416f, -0.009445f, 0.001976f, 0.016356f, -0.004559f, 0.000503f, -0.017830f, -0.006001f, 0.000276f, 0.011878f, -0.007196f, 0.007316f, -0.019929f, -0.005535f, 0.004717f, 0.007618f, -0.005410f, 0.026880f, -0.005447f, -0.003372f, -0.013908f, -0.004580f, 0.010885f, 0.003711f, -0.001151f, 0.014037f, - 0.019477f, 0.022661f, -0.003910f, -0.011301f, -0.012766f, 0.000210f, 0.002763f, 0.005336f, -0.009034f, 0.007327f, 0.009721f, 0.008133f, 0.007996f, 0.022657f, 0.015359f, 0.010136f, -0.001125f, 0.005115f, -0.022443f, -0.004202f, 0.002465f, 0.011558f, 0.018342f, -0.003440f, -0.010209f, 0.003235f, 0.006379f, -0.005253f, 0.009449f, 0.007524f, 0.010209f, 0.001585f, 0.004520f, -0.000467f, -0.000703f, -0.007303f, 0.005825f, -0.002273f, 0.003863f, 0.003356f, 0.001166f, 0.005374f, 0.000579f, 0.008642f, 0.006203f, 0.003915f, 0.002545f, 0.002439f, 0.000131f, -0.001106f, 0.000812f, -0.003595f, -0.000143f, -0.004498f, -0.007135f, -0.002880f, 0.001617f, 0.001271f, 0.003270f, -0.001483f, 0.002193f, -0.002981f, 0.001482f, 0.003827f, -0.032790f, 0.040925f, -0.001098f, 0.006065f, 0.022403f, 0.000455f, -0.007790f, 0.001233f, -0.039825f, -0.024202f, -0.011355f, 0.006437f, -0.007808f, 0.004623f, -0.018602f, 0.012979f, -0.006471f, -0.000102f, 0.024645f, -0.023918f, -0.015922f, 0.023096f, -0.007178f, -0.033659f, 0.002428f, -0.020724f, 0.004333f, -0.001652f, 0.012669f, 0.005518f, 0.006402f, 0.002648f, - -0.004043f, 0.015074f, -0.001643f, 0.019345f, 0.011804f, -0.006770f, -0.011533f, -0.010756f, 0.005269f, -0.005244f, 0.005300f, 0.003810f, 0.011363f, 0.003394f, -0.021270f, 0.001342f, 0.007254f, -0.007275f, 0.000922f, -0.014598f, -0.003245f, 0.001382f, 0.000975f, 0.033800f, -0.005875f, 0.024043f, 0.028681f, -0.007799f, 0.015358f, -0.004632f, -0.000834f, -0.015861f, 0.010138f, 0.024473f, 0.017050f, 0.003877f, 0.006704f, 0.015204f, -0.000982f, 0.012617f, -0.005095f, -0.006909f, -0.012166f, 0.006726f, 0.031158f, 0.007060f, -0.004028f, 0.002563f, -0.021909f, -0.007320f, 0.000521f, 0.020713f, 0.015046f, 0.006592f, 0.013359f, -0.003746f, 0.013120f, -0.000051f, 0.008252f, 0.001128f, -0.000644f, -0.001493f, 0.009143f, -0.000890f, -0.005773f, -0.003463f, -0.002300f, -0.001314f, -0.002334f, -0.004519f, 0.006595f, -0.004193f, -0.005733f, -0.001571f, -0.007527f, -0.005078f, -0.006429f, -0.003590f, -0.004497f, -0.005660f, 0.001928f, 0.001436f, 0.002431f, 0.002141f, -0.003429f, -0.001680f, -0.005944f, -0.007635f, -0.000732f, -0.004207f, 0.002488f, -0.001967f, 0.000622f, 0.003872f, 0.003920f, 0.002828f, - 0.006759f, -0.001729f, -0.000650f, 0.005273f, 0.039189f, 0.005705f, 0.009772f, -0.009263f, -0.004698f, 0.026621f, -0.017569f, -0.004050f, -0.034576f, 0.032396f, 0.016915f, 0.002344f, -0.011751f, -0.032621f, 0.003297f, -0.008669f, 0.003991f, -0.036577f, 0.013045f, 0.019345f, -0.021273f, -0.005068f, 0.003173f, 0.002272f, 0.007068f, 0.021001f, 0.025805f, 0.000107f, -0.000065f, 0.004865f, 0.000975f, -0.015620f, -0.017909f, -0.011827f, -0.023598f, -0.011572f, 0.020085f, 0.009392f, -0.007530f, -0.009921f, -0.006602f, -0.041415f, 0.008992f, 0.009998f, -0.019423f, 0.031806f, 0.001122f, 0.023736f, -0.008551f, 0.015414f, -0.005092f, -0.020454f, 0.001831f, 0.018923f, -0.010431f, 0.010413f, 0.012095f, 0.033791f, 0.009321f, 0.010657f, 0.032317f, 0.018517f, 0.012223f, -0.044683f, 0.009237f, 0.006911f, 0.008652f, 0.000978f, -0.018288f, 0.032498f, -0.024123f, 0.018568f, 0.019354f, -0.029116f, -0.006414f, 0.040010f, -0.035613f, 0.006111f, -0.008377f, -0.003775f, -0.012858f, 0.015626f, -0.006709f, -0.013201f, -0.011387f, 0.007032f, 0.015067f, -0.014027f, 0.017503f, -0.014477f, -0.006419f, 0.020048f, - 0.007304f, -0.001564f, -0.008836f, -0.009262f, -0.000306f, -0.003623f, -0.015245f, -0.001660f, -0.003290f, -0.004167f, -0.001439f, 0.012087f, -0.001076f, -0.010972f, 0.000968f, 0.004779f, 0.011390f, 0.007262f, 0.009037f, -0.003554f, 0.004742f, -0.006500f, 0.000263f, -0.002140f, 0.004724f, 0.009638f, -0.007110f, 0.004496f, 0.004440f, -0.000396f, 0.002561f, 0.002081f, -0.021163f, -0.031609f, -0.014283f, -0.013543f, -0.042225f, 0.027736f, 0.003830f, 0.029651f, 0.001122f, 0.003772f, -0.015010f, -0.008065f, 0.014128f, -0.001674f, 0.014630f, -0.015678f, -0.005430f, 0.002176f, -0.007444f, -0.012929f, 0.017561f, -0.019048f, 0.021036f, -0.008104f, 0.006442f, -0.005198f, -0.015287f, -0.013727f, 0.005717f, -0.005306f, -0.000761f, 0.010629f, 0.042704f, 0.002591f, -0.006139f, -0.015127f, 0.005629f, 0.034442f, -0.007024f, -0.006218f, -0.020941f, -0.007530f, 0.002336f, -0.019749f, -0.007621f, -0.027961f, 0.017090f, -0.034117f, -0.061387f, -0.006851f, 0.001376f, 0.028527f, -0.030590f, 0.027375f, 0.017572f, -0.014723f, -0.028909f, -0.004991f, 0.004102f, 0.007835f, 0.000469f, 0.017154f, -0.012317f, -0.004848f, - -0.060571f, -0.008467f, 0.061426f, 0.005623f, -0.010961f, -0.008670f, -0.032673f, 0.023734f, -0.010864f, -0.009565f, -0.008464f, -0.005059f, -0.014442f, -0.021118f, 0.005683f, 0.011512f, -0.001132f, 0.008686f, -0.017978f, -0.032361f, -0.001658f, -0.017239f, -0.005330f, 0.000195f, -0.017162f, 0.003488f, -0.012647f, -0.021820f, -0.016349f, -0.008104f, 0.006432f, 0.009436f, -0.002346f, -0.025741f, -0.006822f, 0.001230f, -0.012969f, -0.005940f, -0.001538f, -0.012002f, -0.007297f, 0.002733f, -0.000984f, -0.009518f, -0.004114f, 0.003813f, 0.001083f, -0.012531f, -0.005294f, -0.000117f, 0.010732f, 0.012031f, 0.002872f, -0.004145f, -0.004989f, -0.001860f, 0.007888f, -0.002200f, -0.001278f, 0.000260f, 0.002692f, -0.010591f, 0.009030f, -0.002493f, 0.005942f, 0.029095f, 0.026020f, -0.007946f, -0.010257f, -0.002260f, -0.041056f, 0.027531f, -0.025865f, -0.021248f, -0.016448f, 0.010548f, 0.004423f, 0.025557f, 0.003322f, -0.013516f, -0.015946f, -0.016432f, 0.013240f, -0.006138f, -0.008761f, 0.023394f, 0.025996f, 0.009077f, -0.017152f, 0.021587f, 0.034507f, -0.012803f, -0.007312f, 0.030008f, 0.007831f, 0.006249f, - -0.019175f, 0.000271f, 0.028419f, -0.041349f, 0.028861f, -0.005934f, 0.004063f, 0.017506f, 0.020923f, 0.000138f, 0.010533f, -0.019308f, -0.015861f, 0.011100f, 0.039620f, 0.010896f, 0.009779f, 0.015266f, -0.019767f, 0.004509f, 0.017662f, 0.010463f, -0.003144f, 0.014432f, 0.008901f, -0.023338f, 0.019358f, -0.022735f, 0.005312f, 0.017203f, -0.018212f, 0.014292f, -0.022256f, -0.008569f, 0.004203f, 0.001156f, 0.014398f, -0.008821f, 0.012359f, -0.009025f, 0.001816f, 0.004922f, -0.004088f, -0.008832f, -0.018011f, 0.048692f, 0.005232f, 0.014845f, -0.021013f, -0.048977f, 0.034863f, -0.033188f, -0.014502f, 0.000144f, -0.007715f, -0.004698f, -0.002896f, -0.013526f, 0.008657f, 0.007302f, 0.003741f, -0.012473f, 0.015843f, 0.012509f, -0.005302f, -0.005107f, 0.004664f, -0.004137f, 0.004384f, -0.004175f, 0.016785f, 0.006501f, 0.001547f, 0.012233f, 0.012545f, -0.006974f, 0.000038f, 0.006339f, 0.008699f, 0.003893f, 0.004136f, -0.007590f, -0.010415f, 0.008672f, 0.010785f, 0.016009f, -0.002230f, -0.013940f, -0.002089f, 0.001697f, 0.006980f, -0.021621f, 0.008212f, -0.006958f, -0.003305f, 0.005500f, - 0.005061f, -0.005040f, 0.007537f, 0.001037f, 0.005963f, -0.003113f, 0.014377f, -0.027069f, 0.028908f, -0.010473f, -0.028344f, -0.036789f, -0.010203f, -0.003630f, 0.021809f, -0.032369f, -0.005106f, -0.003694f, 0.017208f, 0.032404f, 0.026869f, 0.016768f, 0.002674f, -0.008152f, -0.004855f, -0.003196f, 0.022851f, 0.018784f, -0.004259f, 0.003076f, -0.004812f, 0.014743f, -0.035159f, 0.021183f, 0.011753f, 0.016608f, 0.005745f, 0.003921f, 0.030575f, -0.011873f, -0.025744f, 0.000262f, -0.008369f, 0.001892f, -0.035763f, -0.019765f, -0.001951f, 0.030144f, -0.020124f, -0.006295f, 0.005108f, -0.001095f, 0.001045f, 0.029627f, 0.012059f, -0.004462f, 0.002783f, 0.014554f, 0.009720f, 0.034497f, -0.009924f, 0.015819f, 0.017686f, 0.009467f, -0.005374f, 0.005740f, -0.037225f, 0.016112f, -0.006793f, 0.001812f, -0.008380f, -0.020487f, -0.027475f, 0.005742f, -0.012989f, -0.037494f, 0.009249f, -0.031841f, -0.023287f, -0.005418f, -0.047950f, -0.029083f, 0.007443f, 0.020659f, -0.023826f, 0.005298f, 0.002155f, 0.055452f, 0.052742f, 0.049648f, -0.001258f, 0.002888f, -0.025815f, -0.015615f, 0.020928f, -0.011078f, - -0.007084f, 0.003522f, -0.006377f, 0.011723f, -0.013997f, -0.006988f, -0.000266f, 0.004516f, -0.008303f, 0.010760f, 0.010974f, 0.000590f, -0.004308f, 0.003057f, 0.010740f, -0.008381f, -0.010930f, -0.002755f, 0.009699f, -0.012642f, 0.021871f, 0.012527f, -0.000702f, 0.009912f, -0.003151f, -0.008832f, -0.013924f, -0.007595f, -0.012307f, -0.006706f, 0.007707f, 0.001435f, 0.022111f, -0.004934f, -0.006625f, -0.048781f, -0.053973f, 0.032211f, 0.028953f, 0.009754f, 0.031368f, 0.052482f, 0.014979f, -0.019930f, 0.016989f, -0.007905f, -0.014725f, 0.024027f, 0.001798f, -0.021415f, 0.013251f, 0.017307f, 0.004059f, 0.006121f, 0.001390f, 0.002712f, 0.048077f, -0.000988f, 0.010353f, 0.004519f, 0.029864f, 0.001799f, 0.047694f, -0.000182f, -0.020881f, 0.038129f, 0.007864f, -0.016804f, -0.005872f, 0.020205f, -0.004100f, -0.000317f, 0.015863f, -0.028922f, 0.028976f, -0.006071f, -0.042244f, -0.011820f, 0.004234f, -0.042280f, -0.004663f, -0.004389f, 0.018687f, 0.018015f, 0.031912f, -0.022295f, 0.004942f, 0.005093f, 0.006707f, 0.013631f, -0.020184f, -0.022820f, 0.012068f, -0.000538f, 0.024420f, 0.019810f, - 0.006206f, 0.050850f, -0.008383f, -0.007786f, -0.034649f, 0.051883f, 0.009261f, 0.036010f, 0.022130f, -0.057843f, 0.008398f, 0.005292f, 0.035575f, -0.018789f, 0.015225f, 0.000354f, -0.015292f, -0.001886f, -0.012338f, 0.028610f, -0.054656f, -0.006628f, -0.003826f, 0.000245f, 0.002582f, 0.008824f, 0.013507f, -0.000170f, 0.025386f, -0.000965f, -0.003515f, -0.008093f, -0.005148f, 0.001658f, -0.008688f, 0.003001f, -0.002295f, 0.007653f, 0.005457f, -0.002587f, 0.002217f, -0.002944f, -0.015171f, -0.000812f, 0.000866f, 0.003888f, -0.015498f, 0.008364f, -0.003109f, 0.008784f, 0.007031f, 0.012404f, -0.012537f, 0.014492f, -0.007771f, 0.004684f, 0.010554f, 0.009450f, -0.003143f, 0.000337f, -0.005601f, 0.008179f, -0.000388f, 0.003984f, -0.000095f, -0.001699f, 0.021179f, 0.011809f, 0.000395f, 0.009762f, 0.003024f, 0.010139f, 0.031944f, -0.067485f, 0.040060f, 0.040762f, -0.017407f, 0.009687f, 0.005656f, 0.011030f, 0.000267f, 0.032456f, -0.023681f, -0.005109f, -0.025406f, -0.000208f, -0.014371f, 0.002293f, 0.006794f, -0.037010f, 0.016621f, 0.040232f, -0.027712f, -0.026506f, -0.027117f, 0.053567f, - -0.023441f, -0.013125f, 0.004935f, -0.018325f, -0.055543f, 0.009782f, 0.040233f, -0.055285f, -0.025118f, 0.019144f, 0.029620f, 0.008090f, -0.008473f, 0.012845f, -0.019689f, -0.009158f, -0.001092f, 0.027434f, -0.037709f, -0.029887f, 0.021175f, 0.034452f, 0.013473f, -0.042939f, -0.013994f, 0.001121f, -0.002074f, -0.007416f, 0.022363f, -0.006609f, 0.033796f, -0.027514f, -0.006104f, 0.000019f, -0.031663f, 0.020086f, -0.036847f, -0.025201f, 0.011634f, -0.016356f, 0.035634f, 0.051757f, 0.030391f, -0.034091f, 0.018008f, -0.009961f, -0.010345f, -0.024029f, -0.007613f, -0.039219f, 0.029961f, 0.022237f, 0.010592f, 0.001293f, -0.018705f, -0.010324f, 0.012047f, -0.040925f, 0.033019f, -0.007706f, -0.005754f, 0.017466f, 0.002979f, 0.015923f, -0.004584f, -0.002340f, -0.014129f, -0.003906f, 0.001228f, 0.002952f, -0.011107f, -0.003708f, -0.005351f, -0.003798f, 0.018509f, 0.002143f, -0.000408f, -0.008738f, 0.007460f, 0.007584f, -0.006712f, 0.004276f, 0.008426f, 0.002091f, 0.014256f, -0.004950f, -0.010208f, 0.002269f, -0.016581f, 0.008713f, 0.006042f, 0.002329f, -0.000612f, 0.006769f, -0.001501f, 0.010932f, - 0.003338f, 0.007851f, -0.013139f, -0.003710f, 0.012057f, 0.000906f, 0.004853f, 0.006459f, -0.012256f, 0.002014f, 0.012391f, 0.039156f, 0.065289f, -0.000498f, -0.049479f, 0.010448f, -0.059035f, 0.010079f, 0.026766f, 0.012569f, 0.003525f, 0.035447f, 0.026198f, -0.001613f, -0.005444f, -0.048804f, -0.026325f, 0.000698f, -0.022868f, 0.066050f, -0.012093f, -0.015006f, -0.028567f, 0.003533f, 0.024812f, 0.017365f, -0.000946f, 0.012752f, 0.019318f, -0.029333f, 0.009989f, 0.056671f, 0.020033f, -0.038931f, -0.027474f, 0.018389f, -0.019286f, -0.002650f, 0.013766f, -0.008644f, -0.032159f, -0.007689f, 0.003851f, 0.054000f, -0.011741f, 0.011982f, -0.014422f, -0.043667f, 0.007590f, 0.054785f, -0.014789f, -0.032870f, 0.009526f, -0.020136f, 0.013368f, -0.011512f, -0.013420f, 0.037649f, -0.009679f, -0.004309f, 0.018380f, -0.032468f, 0.011674f, 0.039846f, -0.016533f, 0.003418f, -0.023399f, 0.070074f, -0.012784f, 0.008350f, 0.022715f, -0.016286f, -0.003928f, -0.018720f, 0.009802f, -0.021153f, -0.017867f, -0.016688f, 0.026825f, -0.036443f, 0.005330f, -0.005402f, -0.010885f, 0.028317f, 0.000623f, -0.009681f, - -0.012041f, 0.001474f, 0.010622f, 0.008262f, -0.016234f, -0.002961f, 0.000723f, -0.004537f, -0.020086f, -0.012085f, -0.003660f, 0.004771f, 0.001611f, 0.001606f, 0.002807f, 0.016341f, -0.016516f, 0.017179f, 0.003391f, 0.004950f, 0.001151f, 0.013616f, -0.007735f, 0.022369f, -0.004930f, -0.000369f, 0.017154f, 0.022469f, -0.011780f, 0.014680f, -0.007362f, 0.004903f, -0.013059f, 0.011342f, 0.009542f, -0.019436f, -0.000984f, -0.007797f, -0.002675f, -0.009739f, 0.007002f, -0.011979f, 0.010732f, -0.019022f, -0.108109f, -0.037872f, -0.001950f, 0.034561f, -0.018122f, -0.054103f, -0.020378f, -0.007917f, 0.026515f, 0.006910f, -0.007218f, -0.026750f, 0.028272f, 0.050198f, -0.022776f, 0.037951f, 0.009525f, -0.071833f, 0.026810f, 0.033737f, -0.011828f, -0.029202f, -0.005468f, 0.044291f, 0.047262f, -0.003901f, -0.035823f, 0.002517f, -0.004082f, -0.004620f, -0.029852f, 0.007397f, 0.013634f, -0.047364f, 0.032714f, 0.027814f, -0.033404f, 0.006210f, -0.037477f, 0.013296f, 0.091635f, -0.081844f, 0.084723f, 0.038345f, 0.003843f, 0.051832f, 0.025768f, -0.052969f, 0.031877f, -0.039822f, -0.008917f, 0.043568f, - 0.002063f, 0.012506f, -0.022231f, -0.038778f, 0.118078f, -0.027703f, 0.001737f, 0.046547f, -0.022438f, 0.009114f, 0.003587f, 0.028775f, 0.066535f, 0.063230f, 0.059848f, 0.003769f, -0.001132f, -0.009580f, 0.003075f, -0.016119f, 0.004528f, 0.050794f, -0.013404f, -0.017563f, 0.005114f, 0.007066f, 0.029504f, 0.034368f, 0.009827f, 0.009671f, 0.024429f, 0.010409f, -0.018583f, 0.006126f, -0.009566f, -0.027527f, -0.012340f, 0.014541f, -0.020736f, -0.029885f, -0.022686f, -0.000996f, 0.002788f, -0.017111f, 0.008855f, 0.019469f, 0.003068f, -0.006233f, -0.001109f, -0.021823f, 0.025972f, -0.003760f, -0.005600f, 0.018003f, -0.014787f, 0.012258f, -0.011055f, -0.008835f, 0.030563f, -0.000051f, -0.022593f, 0.028976f, -0.017702f, 0.017494f, 0.008227f, -0.011284f, 0.008770f, -0.003925f, 0.021124f, -0.009588f, 0.007414f, 0.001105f, 0.001825f, -0.002170f, 0.022483f, -0.011448f, -0.002565f, -0.001555f, 0.004056f, -0.003188f, 0.009844f, 0.027669f, -0.007321f, -0.079779f, 0.036232f, -0.057965f, 0.081494f, 0.009601f, -0.070866f, 0.015965f, 0.000635f, 0.033252f, 0.015706f, -0.017183f, 0.060312f, 0.014688f, - 0.003076f, 0.040234f, -0.032179f, -0.044807f, 0.001480f, 0.023400f, 0.081289f, -0.011476f, 0.000231f, -0.008557f, 0.058595f, 0.006332f, -0.046497f, -0.027548f, 0.008836f, -0.005202f, 0.025961f, -0.045264f, 0.021753f, 0.007322f, 0.013426f, -0.004101f, -0.017629f, 0.010227f, 0.018213f, 0.000119f, 0.054460f, -0.087814f, 0.007716f, -0.031022f, -0.019187f, -0.011400f, -0.064108f, -0.093312f, -0.096452f, -0.070242f, 0.007501f, 0.000265f, -0.055918f, -0.000549f, -0.010140f, 0.005936f, -0.034674f, -0.089926f, 0.088580f, -0.001695f, -0.013006f, 0.017920f, -0.087742f, -0.006151f, -0.021792f, 0.016359f, 0.025866f, 0.120450f, 0.089939f, -0.010209f, -0.001029f, -0.002982f, 0.023762f, 0.036315f, 0.022201f, 0.016486f, -0.003297f, -0.014715f, -0.085347f, 0.015978f, -0.001678f, -0.033483f, -0.014854f, 0.055638f, -0.007758f, -0.010358f, 0.026729f, -0.002442f, 0.029314f, -0.011559f, 0.014771f, -0.001830f, -0.006010f, 0.020436f, 0.025316f, -0.011721f, 0.003647f, 0.010955f, -0.004612f, 0.005041f, 0.001412f, -0.000547f, 0.017332f, -0.007554f, -0.008641f, 0.014000f, -0.016531f, 0.021801f, 0.000004f, 0.011665f, - 0.018512f, -0.009506f, 0.004695f, 0.015723f, -0.003702f, -0.010820f, -0.003743f, 0.001494f, -0.002756f, 0.004066f, -0.021553f, -0.001704f, -0.017033f, 0.017762f, 0.002866f, 0.011839f, 0.008814f, -0.002950f, 0.000722f, -0.001559f, 0.008451f, 0.010888f, 0.009441f, -0.022649f, 0.109770f, -0.104521f, 0.018059f, -0.020022f, 0.004187f, 0.044420f, -0.032182f, 0.011210f, 0.001809f, -0.113090f, 0.002933f, -0.012558f, 0.005623f, 0.013239f, -0.050465f, -0.018710f, -0.083625f, -0.021432f, -0.003968f, 0.004736f, -0.031582f, -0.023670f, -0.036364f, -0.015048f, 0.036308f, 0.008051f, 0.073215f, 0.018064f, -0.024612f, -0.025769f, 0.045030f, -0.049801f, 0.086100f, -0.067022f, 0.019677f, -0.054038f, 0.001225f, 0.051904f, -0.093867f, 0.088706f, 0.015743f, 0.010410f, -0.064425f, -0.012723f, -0.012133f, 0.000184f, 0.031079f, 0.031092f, 0.039092f, -0.074322f, -0.001769f, -0.029111f, -0.025271f, -0.028494f, -0.040051f, -0.027593f, 0.001523f, 0.042870f, -0.045458f, 0.012470f, -0.083795f, -0.027883f, 0.021348f, 0.025191f, 0.004667f, -0.095270f, -0.051532f, -0.033815f, -0.048505f, -0.040076f, 0.003523f, -0.031526f, - 0.050944f, 0.015464f, 0.025604f, -0.017402f, -0.026176f, 0.085366f, -0.028396f, 0.023114f, -0.016951f, 0.006860f, 0.064124f, 0.008803f, 0.011726f, -0.035573f, 0.036525f, 0.021359f, -0.014834f, 0.034004f, -0.025137f, 0.009570f, -0.009196f, 0.023117f, 0.004791f, -0.007352f, 0.012617f, 0.029381f, -0.009722f, 0.009603f, 0.010588f, 0.009010f, -0.003208f, 0.008143f, -0.003902f, 0.020282f, -0.006354f, 0.003644f, 0.019171f, -0.003594f, -0.007078f, 0.006160f, 0.008473f, -0.012670f, -0.002574f, -0.035793f, 0.022972f, 0.015816f, 0.000465f, -0.019685f, -0.007863f, 0.002165f, 0.007920f, 0.027949f, -0.004153f, -0.007155f, 0.009984f, 0.007480f, -0.003755f, 0.028291f, 0.005681f, -0.033595f, 0.009300f, 0.034044f, 0.047696f, -0.088330f, 0.135970f, -0.101449f, -0.010224f, -0.061011f, 0.012643f, 0.001831f, -0.036672f, -0.052120f, 0.062075f, 0.041861f, 0.019852f, -0.026368f, 0.027680f, 0.008920f, 0.058644f, -0.045514f, -0.029881f, 0.036606f, 0.060946f, -0.076621f, 0.031644f, -0.002301f, 0.037152f, -0.027342f, 0.011216f, -0.033725f, 0.007518f, -0.063577f, 0.021482f, 0.069088f, -0.001818f, -0.004845f, - 0.085786f, 0.015287f, -0.038870f, -0.082916f, 0.071742f, -0.037254f, 0.032614f, -0.030178f, 0.085671f, 0.038003f, -0.008903f, 0.009166f, -0.048852f, 0.006990f, 0.021680f, -0.023424f, 0.024269f, -0.102713f, 0.040928f, 0.093910f, 0.073594f, -0.040085f, -0.041523f, -0.041824f, 0.047808f, 0.004211f, -0.014519f, 0.004212f, 0.121262f, -0.058546f, -0.027016f, 0.047146f, -0.039728f, -0.108670f, 0.046825f, 0.024758f, -0.077425f, 0.044104f, 0.075998f, 0.066968f, -0.019830f, -0.029412f, -0.052635f, 0.028870f, -0.032278f, -0.020652f, 0.048966f, 0.033328f, 0.015519f, 0.042847f, 0.024533f, -0.016109f, -0.014764f, -0.054514f, 0.013370f, -0.022715f, 0.019581f, -0.020008f, 0.039708f, 0.027334f, 0.006565f, -0.007041f, 0.037796f, -0.020043f, -0.002282f, 0.005093f, 0.014891f, 0.008905f, 0.017802f, 0.016045f, 0.001908f, -0.008718f, -0.004713f, 0.013497f, 0.007623f, 0.005570f, 0.002469f, 0.021083f, 0.068046f, -0.001809f, -0.004664f, 0.010289f, -0.022747f, 0.008508f, 0.024938f, -0.034542f, 0.015974f, 0.018148f, -0.012604f, -0.009570f, 0.016548f, 0.009074f, -0.019332f, -0.087430f, 0.046632f, -0.005171f, - 0.012142f, -0.032089f, 0.027942f, 0.000518f, 0.015322f, 0.004572f, 0.005074f, -0.018296f, 0.013918f, 0.047198f, -0.060370f, 0.051792f, -0.008852f, -0.031994f, 0.010692f, -0.021811f, 0.014078f, -0.022350f, -0.018223f, 0.015208f, -0.048112f, -0.005100f, 0.064194f, -0.092781f, 0.026185f, 0.004237f, -0.015429f, -0.028656f, -0.033596f, -0.022099f, 0.067388f, -0.055634f, -0.007843f, 0.021536f, -0.056207f, 0.014062f, 0.031025f, 0.020437f, 0.010710f, 0.009495f, -0.031631f, 0.024758f, -0.082696f, 0.000897f, 0.072687f, -0.030602f, -0.007983f, -0.016557f, -0.020283f, -0.000872f, -0.058447f, 0.030777f, 0.023766f, -0.048795f, 0.045703f, 0.012351f, -0.055047f, 0.022407f, -0.010497f, 0.039754f, 0.035196f, -0.051756f, 0.018214f, 0.056750f, -0.053519f, 0.029736f, -0.038021f, 0.029790f, 0.035231f, -0.055003f, 0.031070f, -0.004336f, -0.028626f, 0.041272f, 0.002528f, -0.066106f, 0.020539f, 0.028806f, 0.009183f, -0.018698f, 0.003559f, 0.049369f, -0.022643f, -0.047007f, 0.049962f, -0.002542f, 0.004174f, -0.002610f, -0.005820f, 0.030033f, -0.022315f, -0.011373f, 0.022028f, 0.007791f, -0.004843f, -0.022795f, - 0.033386f, -0.012990f, -0.021075f, 0.001299f, 0.017825f, -0.010834f, -0.007468f, -0.005660f, 0.026251f, -0.020583f, -0.009824f, 0.001321f, 0.014535f, -0.012909f, 0.010607f, -0.001038f, 0.026109f, -0.016701f, 0.004677f, 0.001564f, 0.003168f, 0.044870f, -0.015607f, -0.198215f, -0.436910f, -0.171812f, -0.289616f, -0.395274f, 0.152581f, 0.055748f, 0.132066f, 0.593700f, 0.494953f, 0.327030f, 0.510133f, 0.347351f, 0.043343f, 0.087996f, 0.064316f, -0.268843f, -0.172681f, -0.118327f, -0.307860f, -0.314285f, -0.085536f, -0.086463f, -0.194581f, -0.056680f, -0.040370f, -0.234803f, -0.201615f, -0.064259f, -0.110074f, -0.221678f, -0.052681f, -0.035689f, -0.173254f, -0.018482f, 0.123704f, -0.051064f, -0.040848f, 0.181689f, 0.112204f, -0.071635f, 0.161203f, 0.264671f, 0.031165f, 0.149654f, 0.324449f, 0.159570f, 0.083338f, 0.349824f, 0.256277f, 0.191057f, 0.424394f, 0.573489f, 0.454026f, 0.526990f, 0.682395f, 0.446247f, 0.292730f, 0.383364f, 0.247652f, -0.066689f, -0.015039f, -0.167490f, -0.417786f, -0.591425f, -0.636369f, -0.852434f, -0.969938f, -1.029890f, -0.996240f, -0.957358f, -0.951830f, -0.794754f, - -0.607901f, -0.570375f, -0.371663f, 0.031538f, 0.160057f, 0.207077f, 0.624050f, 0.612434f, 0.422938f, 0.622205f, 0.570427f, 0.310240f, 0.301554f, 0.397390f, 0.241042f, 0.114277f, 0.278441f, 0.284011f, 0.128481f, 0.229757f, 0.346069f, 0.229952f, 0.137516f, 0.294596f, 0.244284f, 0.050237f, 0.150206f, 0.216972f, 0.025543f, 0.042259f, 0.237369f, 0.145671f, 0.079078f, 0.251482f, 0.249334f, 0.091816f, 0.198900f, 0.171828f, -0.043170f, -0.122414f, -0.126897f, -0.293807f, -0.398192f, -0.393268f, -0.454069f, -0.500762f, -0.519297f, -0.508481f, -0.521601f, -0.580279f, -0.600304f, -0.574445f, -0.640849f, -0.548826f, -0.373733f, -0.285945f, -0.097316f, 0.165611f, 0.346888f, 0.507801f, 0.655718f, 0.666493f, 0.570764f, 0.518145f, 0.425676f, 0.321882f, 0.259478f, 0.217868f, 0.175933f, 0.137005f, 0.124075f, 0.114340f, 0.084049f, 0.069875f, 0.061516f, 0.029737f, -0.006509f, -0.029541f, -0.064277f, -0.097353f, -0.102401f, -0.081711f, -0.060102f, -0.044858f, -0.039543f} - }, - { - {-0.007421f, 0.004520f, 0.007240f, -0.002552f, 0.006434f, -0.001045f, 0.006791f, 0.003417f, -0.001493f, -0.002659f, 0.006879f, 0.000582f, 0.001372f, -0.007819f, -0.001254f, -0.000562f, -0.000349f, 0.010692f, 0.005223f, -0.000389f, -0.008021f, -0.005832f, -0.003451f, 0.000980f, -0.000184f, 0.002317f, 0.004915f, 0.001498f, 0.001813f, -0.008094f, -0.001246f, -0.007878f, 0.000316f, -0.004356f, 0.005159f, 0.005153f, -0.002056f, -0.004250f, 0.005393f, 0.001156f, -0.002025f, -0.007283f, -0.000990f, -0.004671f, 0.001307f, 0.004456f, -0.007392f, -0.003606f, -0.001237f, -0.002890f, 0.018863f, 0.004495f, 0.010889f, 0.000794f, 0.003571f, -0.000080f, -0.005453f, -0.005055f, -0.006438f, 0.003042f, -0.005312f, 0.003821f, 0.000117f, 0.004664f, 0.004767f, 0.011584f, 0.003492f, -0.000959f, -0.000590f, -0.006879f, 0.011215f, 0.010323f, 0.001801f, 0.003184f, 0.002920f, 0.003195f, -0.000659f, -0.005759f, 0.001710f, 0.003332f, -0.002170f, 0.000964f, -0.001779f, -0.005264f, 0.002499f, -0.004391f, -0.002989f, -0.001368f, 0.000342f, -0.001965f, -0.002140f, -0.002503f, -0.000064f, -0.000140f, -0.000404f, 0.000504f, - -0.000889f, 0.001673f, -0.000944f, -0.001567f, -0.000164f, 0.002099f, 0.000778f, -0.000864f, -0.002838f, -0.000836f, 0.002599f, 0.000172f, 0.001164f, 0.001030f, 0.026068f, -0.006168f, -0.005454f, -0.002118f, -0.005164f, 0.001196f, -0.012395f, 0.000966f, 0.002467f, 0.000630f, 0.008422f, 0.000964f, -0.001741f, -0.007443f, 0.004764f, -0.010492f, -0.009046f, 0.003265f, -0.004413f, -0.002110f, -0.001565f, 0.001748f, 0.007070f, 0.009677f, 0.000726f, -0.001502f, 0.011503f, 0.004147f, -0.000671f, 0.000419f, -0.004703f, 0.000145f, 0.012626f, 0.000005f, -0.005870f, -0.004747f, -0.001365f, 0.004284f, -0.005845f, -0.007203f, -0.007359f, -0.006020f, 0.005761f, -0.005664f, 0.002154f, -0.006882f, 0.002420f, 0.008331f, 0.000543f, 0.005920f, -0.002519f, -0.004698f, -0.002326f, 0.004107f, -0.000252f, 0.006356f, 0.009295f, 0.001363f, -0.002814f, -0.004810f, -0.000244f, -0.000712f, 0.000424f, 0.000295f, -0.008199f, -0.000866f, -0.003833f, -0.004170f, 0.003970f, 0.000842f, 0.002547f, 0.003018f, -0.009756f, -0.005437f, 0.004040f, -0.001825f, 0.007205f, 0.001309f, 0.006070f, -0.001242f, -0.001552f, -0.001678f, - -0.003535f, -0.000829f, -0.003893f, -0.001565f, 0.000108f, 0.005684f, -0.001375f, -0.000128f, -0.000987f, 0.001801f, -0.000053f, 0.002191f, 0.000435f, -0.000479f, -0.001438f, 0.001765f, -0.002794f, 0.000013f, 0.000143f, -0.001586f, 0.001306f, 0.001672f, -0.002360f, 0.000790f, -0.001167f, 0.001016f, 0.000984f, -0.000007f, 0.001672f, 0.000179f, -0.000874f, -0.018612f, -0.009196f, -0.004034f, -0.012731f, -0.004436f, -0.012223f, 0.003552f, -0.001108f, -0.007629f, -0.008792f, -0.001342f, -0.007189f, -0.000212f, 0.005907f, -0.000488f, -0.010917f, -0.004080f, 0.000123f, -0.004297f, -0.003564f, 0.003107f, 0.010213f, 0.013096f, -0.002155f, -0.003551f, 0.007342f, 0.008349f, -0.002654f, -0.001990f, -0.001710f, -0.005970f, 0.001767f, 0.002692f, -0.005377f, -0.004044f, -0.001281f, 0.005024f, 0.011180f, 0.000690f, -0.003816f, -0.000038f, -0.005693f, -0.002129f, -0.009030f, -0.004276f, -0.004028f, -0.014266f, -0.001549f, -0.006500f, -0.004519f, -0.015658f, 0.009655f, -0.006842f, -0.006064f, 0.002732f, -0.001008f, -0.001170f, 0.002009f, -0.013018f, -0.003406f, -0.004696f, -0.001064f, -0.007537f, -0.001058f, -0.003575f, - 0.003405f, 0.004458f, -0.004257f, -0.002301f, -0.006235f, 0.002152f, -0.000959f, -0.001314f, -0.000012f, -0.009653f, -0.000257f, -0.008729f, 0.001304f, -0.000636f, -0.002763f, 0.002515f, 0.010528f, 0.004984f, -0.002509f, 0.000527f, -0.001870f, -0.004151f, 0.000384f, 0.001588f, -0.002086f, -0.000342f, -0.002578f, 0.000023f, -0.001074f, -0.003228f, 0.001261f, 0.001181f, -0.003371f, -0.001616f, 0.000894f, -0.001454f, 0.000441f, -0.002234f, -0.001721f, -0.001824f, -0.003148f, -0.003442f, -0.000276f, 0.000817f, -0.001745f, -0.002097f, -0.000015f, -0.001017f, -0.000443f, -0.001155f, -0.000033f, -0.000677f, -0.001153f, -0.002851f, 0.001494f, -0.001038f, -0.001356f, -0.001412f, -0.034422f, -0.002704f, -0.016958f, 0.015260f, -0.008821f, 0.027456f, -0.017538f, 0.017314f, -0.015542f, -0.000920f, -0.000209f, -0.011977f, 0.009354f, 0.000359f, -0.004444f, 0.002827f, -0.003885f, -0.001555f, -0.011655f, -0.000092f, -0.008787f, 0.006999f, 0.002472f, 0.008564f, -0.004981f, 0.012769f, 0.011510f, -0.011124f, 0.003170f, -0.009456f, 0.010119f, 0.000110f, -0.007009f, 0.000608f, -0.000954f, -0.000348f, 0.007438f, 0.001102f, - -0.010958f, 0.004555f, 0.007957f, -0.000507f, 0.009390f, -0.004332f, 0.007665f, -0.011389f, -0.005759f, 0.007496f, -0.006515f, 0.001908f, 0.010110f, -0.009145f, 0.014917f, 0.005896f, -0.014642f, 0.003585f, -0.014103f, 0.005104f, 0.007937f, 0.005346f, 0.007644f, 0.010940f, 0.003736f, -0.001331f, -0.000833f, 0.000737f, 0.003510f, 0.007866f, -0.002664f, 0.014852f, 0.002928f, 0.010181f, 0.005574f, 0.002966f, 0.000781f, 0.010214f, 0.001894f, 0.002544f, -0.005792f, -0.007949f, 0.004118f, 0.005516f, 0.000658f, 0.008782f, -0.000979f, -0.000060f, -0.001561f, 0.010426f, 0.003213f, -0.003714f, 0.002428f, 0.001786f, 0.001567f, 0.003559f, 0.000612f, 0.006491f, -0.000947f, 0.002241f, 0.001296f, 0.002487f, -0.001569f, 0.001244f, 0.000685f, 0.000153f, 0.000649f, -0.002202f, -0.001916f, 0.000827f, -0.002375f, -0.001084f, -0.002580f, 0.001701f, 0.000038f, 0.022749f, 0.000128f, -0.006191f, -0.002075f, -0.008485f, -0.010130f, 0.016613f, -0.003224f, -0.002419f, 0.015248f, -0.001181f, -0.002942f, 0.006742f, 0.011867f, 0.003384f, 0.005897f, -0.000305f, -0.012944f, -0.003433f, 0.009739f, -0.014761f, - -0.014611f, -0.005484f, 0.003210f, -0.010411f, -0.006246f, 0.000202f, -0.001449f, 0.010220f, -0.003933f, -0.002249f, 0.010794f, 0.014991f, -0.012986f, 0.003390f, -0.003086f, 0.005464f, 0.001509f, -0.005779f, -0.001242f, 0.006228f, 0.009580f, -0.002580f, -0.013482f, -0.003051f, -0.001174f, -0.003576f, -0.006720f, 0.000965f, -0.000839f, 0.002445f, -0.001842f, 0.001862f, 0.012633f, -0.009345f, 0.001227f, -0.007122f, -0.005741f, -0.009784f, -0.002925f, -0.005661f, -0.013481f, -0.000503f, 0.000945f, -0.005276f, -0.001015f, -0.005584f, 0.005229f, 0.006539f, -0.001011f, 0.001931f, -0.004842f, -0.001372f, 0.016323f, -0.002181f, -0.006739f, -0.022158f, -0.010058f, -0.000318f, -0.007543f, 0.005080f, -0.002126f, 0.001875f, -0.000006f, -0.004479f, -0.000821f, 0.006414f, -0.005426f, 0.001234f, -0.001517f, 0.000592f, 0.000031f, -0.004670f, -0.003414f, -0.001988f, -0.003560f, -0.000752f, -0.005646f, -0.001219f, -0.003195f, 0.000587f, -0.002224f, -0.000773f, -0.003037f, -0.003331f, -0.003218f, -0.000872f, -0.000330f, 0.001118f, 0.000849f, -0.000488f, 0.000938f, 0.000709f, -0.000161f, 0.003118f, 0.002758f, -0.000088f, - 0.001641f, -0.001352f, -0.001704f, 0.000344f, 0.029490f, 0.033140f, 0.006308f, -0.012053f, 0.007551f, 0.013069f, 0.013109f, 0.007399f, 0.009904f, 0.004438f, 0.016212f, -0.001636f, -0.001978f, -0.006602f, 0.010181f, -0.005956f, -0.014259f, -0.019652f, 0.002275f, -0.009419f, -0.008102f, 0.006966f, -0.002052f, -0.005218f, 0.016568f, -0.001175f, 0.020580f, 0.000232f, -0.008104f, -0.005543f, 0.007239f, 0.004807f, -0.004024f, -0.016263f, 0.023507f, 0.013592f, 0.000166f, 0.012746f, 0.007633f, 0.008296f, -0.007665f, 0.009365f, 0.004806f, 0.001901f, -0.002798f, -0.004168f, -0.010313f, -0.014585f, 0.004175f, 0.007098f, -0.011338f, 0.004598f, 0.009883f, 0.014697f, 0.003936f, 0.013281f, 0.006207f, 0.011320f, -0.016533f, 0.004963f, 0.001590f, 0.003368f, 0.000484f, -0.001099f, 0.007114f, 0.006440f, 0.006294f, 0.009087f, -0.002917f, 0.004435f, 0.002675f, 0.013058f, 0.016020f, -0.008022f, -0.009368f, 0.001471f, -0.003773f, -0.008430f, 0.003635f, 0.008872f, -0.005370f, 0.003786f, -0.015865f, -0.011667f, 0.002786f, -0.008037f, -0.003719f, -0.002565f, -0.007160f, 0.000076f, -0.000009f, 0.000972f, - -0.000084f, 0.003222f, 0.003848f, -0.000197f, 0.001991f, 0.000709f, 0.002936f, 0.003078f, 0.000135f, 0.000284f, -0.000097f, 0.003361f, 0.001770f, 0.001885f, 0.004180f, -0.000645f, -0.001983f, 0.003138f, -0.000784f, 0.000054f, 0.004787f, 0.002956f, 0.004538f, 0.006136f, 0.001049f, 0.002790f, 0.001738f, 0.004089f, 0.027083f, 0.008566f, 0.011963f, -0.009899f, 0.003932f, -0.024505f, 0.001328f, -0.017699f, 0.013424f, 0.009041f, -0.007454f, 0.011311f, 0.006426f, -0.011975f, -0.002969f, 0.017365f, -0.000559f, 0.011967f, -0.003264f, 0.002427f, 0.013840f, -0.017175f, -0.001320f, 0.002850f, 0.005062f, 0.001186f, 0.005568f, 0.000762f, 0.016781f, -0.007738f, -0.004819f, -0.005028f, 0.012688f, 0.001655f, -0.005957f, 0.007749f, 0.021394f, -0.014891f, 0.002644f, 0.002929f, -0.001300f, 0.008688f, -0.004328f, 0.016397f, 0.005491f, 0.004193f, -0.013405f, -0.001270f, -0.003559f, 0.007640f, 0.005692f, 0.008250f, -0.009213f, -0.005943f, 0.007775f, -0.015981f, -0.009003f, 0.003715f, 0.017247f, 0.010540f, 0.015249f, -0.016568f, -0.005291f, -0.016836f, -0.004404f, 0.005217f, -0.001468f, -0.015876f, - 0.002069f, -0.009693f, -0.000168f, -0.017377f, -0.021202f, -0.008550f, -0.015315f, 0.000976f, 0.005367f, 0.003146f, -0.006575f, 0.008552f, 0.013531f, 0.003917f, 0.003963f, 0.007919f, -0.002499f, -0.012897f, -0.000841f, -0.008833f, 0.004634f, 0.001613f, -0.000930f, 0.002550f, 0.001161f, -0.009405f, -0.004932f, -0.002578f, 0.004723f, 0.000828f, -0.003408f, -0.001005f, -0.000357f, -0.001249f, 0.000722f, -0.001792f, -0.000956f, 0.000825f, 0.004284f, 0.001264f, 0.001340f, 0.001148f, -0.000927f, 0.001453f, 0.002830f, 0.001673f, 0.003705f, 0.001309f, 0.001876f, 0.000407f, 0.002913f, -0.004483f, -0.031929f, -0.028794f, -0.020721f, 0.006284f, 0.006364f, 0.023859f, -0.010590f, 0.022658f, -0.009307f, -0.037473f, -0.003374f, -0.003520f, -0.014527f, -0.024260f, -0.008890f, -0.000571f, -0.014978f, -0.000171f, -0.023021f, 0.001637f, -0.024267f, 0.013824f, -0.006149f, 0.010058f, -0.004806f, -0.000478f, -0.007584f, -0.008791f, 0.014898f, 0.002882f, -0.004418f, 0.016913f, 0.001836f, 0.002677f, 0.005761f, 0.015559f, 0.013647f, 0.010401f, 0.000193f, -0.018541f, -0.002003f, 0.008820f, 0.002616f, 0.011268f, - -0.005512f, 0.004986f, -0.027222f, 0.008518f, 0.016283f, -0.020621f, 0.012011f, 0.004162f, 0.019273f, 0.014742f, -0.000141f, -0.005188f, -0.000588f, 0.013068f, 0.006365f, -0.017402f, -0.014215f, -0.024034f, -0.011723f, -0.016164f, -0.003778f, -0.019981f, -0.004375f, -0.006766f, 0.020129f, -0.009555f, 0.009874f, -0.005356f, -0.003110f, -0.006710f, -0.014163f, -0.007599f, -0.004655f, -0.004775f, 0.012610f, -0.038462f, -0.008332f, 0.017824f, 0.000663f, 0.003325f, 0.009438f, 0.018048f, -0.011566f, 0.002050f, 0.004655f, -0.000969f, -0.000347f, -0.002787f, 0.004797f, 0.007387f, -0.003464f, 0.000481f, -0.000915f, 0.008265f, -0.003298f, -0.000386f, 0.008271f, 0.001593f, 0.002790f, 0.003774f, 0.003781f, -0.001533f, 0.000518f, -0.002407f, -0.003480f, -0.002008f, -0.006019f, 0.001537f, 0.003619f, 0.002490f, 0.001330f, -0.007726f, -0.000172f, -0.001158f, -0.000559f, -0.003704f, 0.001901f, 0.003239f, -0.002038f, -0.000522f, 0.003805f, 0.004108f, -0.041933f, 0.032485f, -0.008928f, 0.019277f, 0.011287f, -0.000605f, -0.027680f, 0.022115f, 0.003156f, -0.001762f, 0.014027f, 0.009994f, -0.011339f, -0.000033f, - 0.023798f, 0.008002f, -0.010519f, 0.016931f, -0.009027f, -0.007230f, -0.004913f, 0.005536f, 0.000264f, -0.002914f, 0.002424f, 0.007343f, 0.006579f, 0.006763f, -0.017259f, 0.010900f, -0.014316f, 0.019819f, -0.012097f, 0.019726f, 0.006441f, 0.002008f, -0.019072f, -0.019383f, -0.006337f, -0.006369f, 0.022922f, 0.006577f, 0.018358f, 0.007777f, -0.016153f, 0.000753f, -0.003579f, 0.007946f, 0.000571f, 0.007011f, -0.001912f, -0.010829f, -0.006293f, 0.011693f, 0.028999f, 0.020947f, 0.002457f, 0.007278f, -0.001983f, -0.003929f, 0.014925f, 0.012550f, -0.005205f, 0.018410f, 0.025909f, 0.036193f, 0.000874f, -0.020562f, -0.024812f, 0.008807f, 0.004621f, -0.000925f, 0.006369f, 0.000247f, -0.007879f, -0.000806f, 0.021904f, -0.003847f, -0.009418f, 0.038946f, 0.009916f, -0.006441f, 0.011530f, 0.000395f, -0.000288f, -0.001093f, -0.006034f, -0.000739f, 0.011933f, 0.005995f, -0.003659f, -0.005545f, 0.008415f, 0.006848f, -0.000406f, 0.015911f, 0.004708f, 0.003122f, 0.001870f, 0.007230f, 0.002889f, 0.006785f, 0.004746f, 0.002478f, 0.001507f, 0.008513f, 0.004825f, 0.004619f, 0.001435f, 0.008455f, - -0.000846f, 0.003423f, 0.005164f, 0.003616f, -0.000418f, 0.009433f, 0.010844f, 0.003466f, -0.001429f, 0.011249f, 0.001164f, -0.004872f, -0.000558f, 0.008292f, 0.000779f, -0.000413f, -0.001339f, -0.001184f, 0.000788f, 0.002384f, 0.005617f, 0.019561f, -0.028556f, 0.024074f, 0.009921f, -0.019496f, 0.045732f, 0.006894f, -0.023292f, 0.005431f, 0.012772f, 0.001243f, 0.009242f, 0.032819f, -0.031311f, 0.020497f, -0.012625f, 0.018183f, -0.006855f, 0.003901f, -0.028984f, 0.004964f, -0.003076f, 0.011704f, -0.011056f, 0.001648f, 0.002319f, 0.000326f, -0.016964f, 0.016390f, 0.001823f, -0.001757f, 0.007819f, -0.003252f, 0.007711f, -0.004049f, 0.023192f, 0.018220f, 0.022963f, 0.022733f, -0.003548f, 0.007945f, 0.009980f, 0.001009f, -0.011800f, 0.016071f, -0.018912f, 0.005880f, 0.019050f, -0.011247f, 0.010171f, -0.021126f, 0.006911f, -0.001856f, -0.004854f, -0.001844f, 0.001796f, 0.006502f, 0.006465f, 0.022216f, -0.014402f, -0.000742f, 0.014919f, 0.031658f, -0.027894f, 0.007161f, -0.006695f, 0.009589f, -0.004953f, 0.046238f, -0.028273f, 0.010112f, -0.015652f, -0.008865f, 0.004368f, 0.004779f, - 0.002802f, -0.040549f, -0.021093f, 0.033372f, 0.018587f, -0.003758f, -0.017824f, -0.021020f, -0.008026f, 0.007382f, -0.022235f, -0.012388f, 0.011372f, 0.006096f, -0.000162f, -0.000755f, -0.015454f, 0.002827f, -0.004272f, -0.006067f, 0.007535f, -0.004009f, -0.004532f, -0.001998f, -0.013452f, 0.004525f, -0.003227f, -0.004846f, -0.004662f, 0.006101f, -0.006290f, 0.007463f, -0.000829f, -0.002165f, 0.002999f, 0.002494f, 0.010286f, -0.010428f, -0.001778f, -0.008004f, -0.001251f, 0.004692f, 0.004168f, 0.012714f, -0.003833f, 0.006874f, 0.002040f, -0.005068f, 0.021342f, -0.028185f, -0.006019f, 0.039744f, -0.011994f, -0.000843f, 0.021269f, 0.004960f, 0.013106f, -0.029743f, 0.028441f, 0.001810f, 0.002079f, -0.007585f, -0.017916f, -0.002505f, -0.002816f, -0.019180f, -0.011598f, 0.021175f, -0.006798f, 0.004030f, -0.010469f, -0.046700f, 0.015744f, 0.002078f, -0.014465f, 0.008868f, 0.018019f, -0.001736f, 0.001944f, -0.003691f, 0.004492f, 0.012206f, 0.003844f, 0.019639f, 0.013423f, 0.003040f, 0.017150f, -0.013904f, -0.013710f, -0.019484f, 0.007288f, 0.011199f, 0.003212f, -0.030882f, 0.008687f, -0.026392f, - 0.038123f, -0.009093f, 0.013510f, 0.032536f, -0.012900f, 0.020659f, 0.005105f, 0.022496f, 0.009013f, -0.010912f, -0.033503f, -0.024039f, -0.018772f, -0.002614f, -0.019704f, -0.003957f, -0.017234f, -0.011179f, 0.033566f, 0.007258f, -0.014409f, -0.012763f, 0.006715f, 0.012464f, -0.002994f, 0.004850f, -0.061228f, 0.024589f, 0.004093f, -0.019646f, -0.024189f, -0.006317f, -0.040466f, 0.004336f, 0.020000f, 0.002196f, -0.017434f, 0.010702f, 0.008959f, -0.014283f, 0.007060f, 0.004227f, -0.003639f, 0.000457f, -0.009216f, 0.002386f, 0.003092f, 0.002350f, -0.011988f, -0.006531f, 0.004808f, -0.007473f, 0.001636f, -0.004517f, -0.002963f, 0.002858f, 0.009950f, -0.012735f, 0.004351f, 0.009883f, -0.011934f, -0.011168f, 0.001388f, -0.010250f, 0.002273f, -0.006809f, 0.006985f, 0.003819f, -0.011952f, 0.006647f, -0.007879f, -0.005056f, 0.008108f, 0.001893f, 0.018351f, 0.005704f, -0.000112f, -0.001159f, 0.001363f, -0.004834f, 0.013224f, -0.037922f, -0.046470f, 0.027838f, -0.022899f, -0.026622f, -0.007719f, 0.017423f, 0.036024f, -0.023952f, 0.001780f, 0.017086f, -0.005345f, -0.007641f, 0.009147f, 0.005917f, - 0.027034f, 0.008966f, -0.026331f, -0.001131f, -0.013443f, -0.001037f, -0.015719f, -0.020629f, 0.002980f, 0.020370f, -0.001681f, 0.009012f, -0.017186f, 0.004854f, 0.020099f, 0.015582f, 0.002199f, 0.001466f, 0.012490f, 0.011887f, 0.007480f, 0.018413f, -0.023658f, 0.025589f, 0.018326f, 0.006192f, -0.019590f, 0.001282f, 0.014765f, -0.015489f, 0.017183f, -0.012330f, 0.019486f, -0.005400f, 0.025500f, -0.040533f, 0.042668f, 0.009892f, 0.040224f, 0.002446f, -0.008757f, -0.002988f, 0.014399f, 0.000792f, -0.033955f, 0.001150f, -0.002602f, -0.035193f, 0.010856f, 0.024704f, -0.033442f, 0.027508f, -0.029467f, 0.008929f, 0.011074f, 0.005880f, -0.036825f, -0.017865f, -0.018192f, 0.003329f, 0.002500f, -0.021587f, -0.031573f, 0.005916f, -0.027798f, 0.018593f, -0.013541f, -0.007445f, 0.009246f, -0.017429f, -0.013502f, -0.017881f, -0.007496f, -0.010076f, 0.000315f, -0.014355f, -0.010754f, -0.013123f, -0.019278f, -0.009533f, -0.004213f, -0.004571f, -0.005051f, -0.005829f, -0.003931f, -0.009353f, -0.010167f, 0.006303f, -0.012125f, -0.006760f, -0.003282f, 0.008903f, -0.004716f, 0.000006f, -0.015424f, -0.011254f, - -0.005190f, -0.000587f, -0.003686f, -0.013288f, -0.002032f, -0.001422f, 0.010319f, 0.006484f, -0.008782f, -0.008334f, 0.001493f, -0.004600f, 0.007552f, -0.004678f, 0.003941f, -0.008354f, -0.021449f, 0.032491f, 0.006557f, 0.021382f, 0.020725f, 0.005817f, -0.016003f, 0.003526f, 0.054844f, -0.037726f, 0.009075f, -0.006642f, -0.020600f, 0.001218f, 0.007364f, 0.008844f, -0.000262f, 0.000126f, -0.010807f, -0.015851f, -0.024659f, -0.012472f, 0.018629f, -0.015634f, -0.024775f, 0.014239f, -0.008878f, 0.005457f, -0.003277f, 0.011064f, -0.010545f, 0.023328f, -0.008415f, 0.002519f, -0.000525f, 0.002461f, 0.021508f, 0.007310f, -0.009977f, 0.011460f, -0.009130f, 0.017614f, -0.010591f, 0.007222f, -0.025209f, -0.018437f, -0.013499f, 0.004401f, -0.012591f, -0.022002f, 0.009274f, 0.016301f, 0.004795f, -0.011705f, 0.007546f, 0.011513f, 0.013106f, 0.035249f, 0.048665f, 0.066096f, -0.006676f, 0.010535f, 0.016033f, 0.009342f, 0.009005f, 0.010623f, -0.013419f, 0.026228f, -0.003587f, 0.034241f, 0.042380f, 0.030999f, 0.012710f, 0.017450f, 0.005996f, 0.059109f, 0.017173f, -0.010823f, -0.009182f, -0.008403f, - -0.003187f, -0.003805f, 0.003361f, -0.004719f, -0.010808f, 0.009886f, -0.017241f, 0.005202f, -0.003686f, 0.005489f, -0.008410f, -0.006954f, -0.005143f, 0.013404f, -0.012722f, -0.012554f, -0.000587f, 0.005527f, -0.006223f, -0.016117f, -0.004994f, 0.000929f, -0.007286f, 0.008608f, 0.016724f, -0.009306f, -0.000635f, 0.003474f, -0.001197f, 0.005495f, 0.009932f, -0.004411f, -0.010785f, -0.001846f, 0.005973f, -0.005474f, 0.015306f, 0.017646f, 0.011307f, -0.005011f, -0.011353f, -0.001517f, 0.017829f, 0.002028f, 0.000126f, 0.007768f, 0.003049f, -0.000092f, -0.002251f, 0.004373f, 0.005045f, -0.011604f, -0.000515f, 0.065981f, 0.052806f, -0.023063f, -0.010643f, -0.027503f, 0.015782f, 0.007694f, 0.032270f, -0.005715f, -0.014073f, -0.006356f, -0.021026f, 0.004705f, 0.000726f, 0.030480f, -0.011502f, 0.011357f, -0.041135f, 0.022606f, -0.003310f, 0.015910f, -0.000294f, 0.014420f, 0.002363f, -0.023366f, -0.012159f, -0.020042f, -0.015325f, 0.016888f, 0.040592f, 0.017738f, -0.004951f, -0.012609f, -0.000665f, -0.003408f, 0.010035f, 0.013769f, -0.026148f, -0.000494f, -0.009198f, -0.008686f, -0.028390f, -0.021800f, - -0.045932f, 0.000872f, -0.002436f, 0.016540f, -0.013868f, 0.029395f, -0.022447f, -0.009782f, 0.058624f, 0.058241f, -0.040398f, 0.009036f, 0.033598f, -0.019539f, -0.009505f, 0.017412f, -0.006649f, -0.024546f, 0.065202f, -0.016216f, -0.099473f, 0.033103f, -0.001450f, -0.051126f, 0.038990f, 0.041881f, -0.015012f, 0.029347f, 0.037024f, -0.017511f, 0.001118f, 0.023681f, -0.025770f, 0.010792f, 0.020310f, -0.036524f, -0.005247f, -0.011980f, 0.001780f, -0.013302f, -0.000016f, 0.005238f, -0.015706f, 0.012590f, -0.018182f, -0.008150f, 0.008501f, 0.017816f, -0.010449f, 0.001138f, 0.003302f, -0.002529f, 0.005758f, -0.012789f, 0.018758f, -0.009525f, 0.019819f, 0.019614f, -0.000751f, 0.001165f, 0.012915f, -0.009497f, 0.002565f, -0.000347f, 0.016237f, -0.012210f, 0.009714f, 0.003242f, -0.039066f, 0.007686f, -0.005164f, -0.007080f, 0.001760f, -0.000883f, 0.003799f, -0.021658f, 0.002630f, -0.005474f, -0.019682f, 0.003545f, 0.032766f, -0.030930f, 0.009866f, 0.018437f, -0.027011f, 0.000133f, 0.014139f, -0.024826f, -0.012383f, 0.004482f, 0.011431f, 0.021784f, 0.010505f, -0.017923f, -0.003474f, 0.016066f, - -0.018840f, 0.018497f, -0.009497f, -0.024069f, 0.021274f, 0.010894f, 0.010475f, -0.006185f, -0.006247f, -0.008671f, -0.001417f, 0.017857f, -0.037614f, 0.018344f, -0.001046f, 0.030940f, -0.019934f, -0.000165f, -0.024723f, 0.010417f, -0.040070f, 0.004165f, 0.001504f, -0.016069f, -0.012266f, 0.006146f, -0.027069f, -0.046541f, 0.027784f, -0.002845f, 0.008166f, -0.027633f, 0.016521f, -0.004687f, 0.017773f, 0.019078f, 0.009330f, -0.019572f, 0.015702f, -0.009524f, -0.004500f, -0.036048f, 0.004889f, -0.025736f, -0.028197f, -0.041032f, -0.016997f, 0.006258f, 0.011040f, -0.042350f, -0.021061f, 0.001994f, -0.015332f, -0.056783f, -0.045079f, -0.046346f, -0.009820f, -0.027823f, 0.024137f, 0.034094f, 0.009155f, -0.034345f, -0.039773f, -0.046351f, -0.004586f, -0.003705f, 0.024853f, -0.022532f, -0.038686f, -0.019181f, -0.025863f, 0.008395f, 0.000185f, 0.008783f, 0.004294f, -0.012995f, 0.002434f, 0.009049f, -0.010231f, -0.004530f, -0.008716f, -0.005647f, -0.006385f, -0.012649f, -0.000878f, 0.014842f, 0.000212f, 0.004067f, 0.004133f, -0.003024f, 0.011124f, -0.007819f, 0.017366f, 0.015458f, -0.006566f, -0.014639f, - -0.001014f, -0.005874f, -0.008264f, -0.009366f, -0.008252f, 0.012333f, 0.000258f, 0.011588f, -0.012826f, -0.014018f, -0.002789f, 0.006190f, -0.022068f, 0.003310f, 0.001884f, -0.016375f, 0.003187f, -0.013562f, -0.028739f, 0.017081f, -0.007090f, 0.001724f, -0.005021f, 0.002521f, -0.014842f, -0.004261f, -0.028834f, 0.050152f, 0.055732f, -0.013183f, 0.037639f, -0.010450f, -0.014473f, -0.014383f, 0.036660f, -0.031582f, -0.007071f, -0.014919f, 0.058035f, 0.002413f, 0.021386f, 0.007832f, -0.005159f, 0.029081f, 0.016412f, 0.023857f, 0.007723f, -0.003416f, -0.009826f, 0.022845f, -0.003465f, -0.021882f, 0.027952f, -0.000483f, 0.024523f, -0.026793f, 0.019194f, 0.006980f, -0.027207f, -0.020973f, 0.050585f, 0.032906f, -0.002746f, 0.018295f, 0.015404f, -0.031676f, -0.020600f, 0.010846f, 0.008405f, 0.022617f, 0.003158f, 0.005178f, 0.009105f, 0.027539f, 0.011614f, 0.007270f, -0.026781f, 0.075424f, 0.050857f, 0.006068f, -0.033403f, 0.017086f, -0.010969f, 0.009633f, -0.007327f, 0.016371f, -0.010648f, 0.002812f, 0.041890f, -0.028459f, -0.013438f, -0.038344f, 0.011219f, -0.010243f, -0.006348f, 0.035567f, - 0.011555f, 0.004741f, 0.003488f, -0.014311f, -0.028353f, 0.021081f, 0.000411f, 0.000650f, 0.022836f, 0.022445f, -0.001322f, -0.016123f, -0.018505f, 0.036731f, -0.003350f, -0.001937f, -0.006644f, 0.027653f, -0.001750f, -0.019019f, 0.013052f, 0.010373f, 0.017678f, 0.007994f, 0.006556f, 0.025539f, -0.004704f, -0.009137f, 0.009353f, -0.000510f, 0.001535f, 0.002346f, 0.012170f, -0.006453f, 0.000459f, -0.008264f, 0.003282f, 0.012301f, -0.005146f, 0.002969f, 0.015869f, -0.005350f, 0.003834f, 0.011192f, 0.001331f, -0.002986f, -0.023088f, 0.015404f, -0.012664f, 0.010098f, -0.015226f, -0.003453f, 0.006972f, -0.009972f, -0.003364f, 0.022511f, 0.016984f, 0.001909f, -0.002878f, 0.021018f, 0.004821f, 0.010009f, 0.009977f, 0.004676f, -0.003136f, 0.008988f, -0.018086f, -0.039203f, 0.101946f, -0.114330f, -0.013196f, -0.060151f, 0.073941f, 0.019969f, 0.013071f, -0.028674f, 0.006956f, -0.023383f, 0.066238f, -0.011594f, -0.004219f, 0.006899f, -0.003251f, -0.025773f, 0.009928f, 0.015174f, 0.020053f, -0.044561f, -0.023439f, -0.022878f, 0.009198f, -0.013386f, -0.012009f, -0.001284f, -0.000392f, 0.029488f, - -0.015112f, 0.001619f, 0.022178f, -0.002591f, -0.029466f, 0.003886f, 0.023336f, -0.002609f, -0.046463f, 0.034927f, 0.004186f, 0.000831f, -0.000064f, -0.019419f, 0.015332f, -0.085799f, -0.060044f, -0.008172f, -0.021503f, 0.004123f, 0.006577f, -0.040057f, 0.063324f, -0.024857f, 0.087234f, -0.012079f, -0.030557f, 0.030123f, 0.004982f, 0.026920f, 0.040383f, 0.013075f, -0.041518f, -0.011232f, 0.046620f, 0.108542f, 0.003573f, -0.027391f, 0.045095f, 0.004208f, 0.053187f, 0.008924f, 0.072009f, -0.018270f, -0.002925f, -0.001609f, 0.016785f, 0.002832f, 0.027634f, 0.050987f, 0.002952f, -0.010342f, -0.009091f, 0.016505f, -0.013812f, -0.005525f, 0.032977f, 0.024551f, 0.003552f, -0.005768f, -0.012553f, -0.013580f, -0.008661f, -0.010956f, 0.023721f, -0.014304f, -0.010382f, 0.012249f, 0.004119f, -0.004069f, 0.010535f, 0.012614f, -0.006901f, 0.010899f, 0.016769f, -0.008266f, 0.000946f, -0.023477f, 0.030111f, 0.000371f, 0.024169f, 0.002151f, -0.025615f, 0.000705f, 0.002414f, 0.007233f, 0.002483f, 0.000561f, -0.022076f, -0.019642f, -0.001483f, -0.011172f, 0.015828f, 0.006505f, -0.007751f, -0.000127f, - 0.012366f, 0.003230f, -0.007639f, 0.001372f, 0.008849f, 0.000770f, -0.004779f, 0.004147f, 0.148822f, 0.045960f, 0.016181f, -0.005026f, -0.016334f, -0.021751f, 0.048378f, 0.044312f, -0.051767f, 0.030187f, 0.022868f, 0.004902f, -0.015846f, -0.027720f, -0.070481f, -0.026720f, 0.022139f, 0.006874f, -0.022873f, 0.041945f, -0.014066f, 0.016715f, 0.016669f, -0.010691f, -0.010225f, 0.043777f, 0.000865f, -0.017297f, 0.027322f, -0.024559f, 0.053982f, -0.027084f, -0.016465f, -0.003438f, 0.020868f, 0.010749f, 0.054600f, -0.017384f, -0.033147f, -0.012177f, 0.014207f, 0.003261f, 0.029108f, 0.007563f, 0.002270f, -0.012485f, 0.023392f, 0.102542f, 0.043496f, -0.038841f, 0.032747f, -0.020635f, -0.031617f, 0.024880f, -0.001469f, 0.006861f, -0.002416f, 0.017759f, -0.027663f, -0.042108f, -0.110475f, -0.029563f, 0.038915f, -0.015137f, -0.038180f, 0.015929f, -0.009201f, 0.015855f, -0.044511f, -0.039268f, -0.018631f, 0.015975f, 0.017133f, 0.051913f, 0.008818f, -0.004334f, -0.041556f, -0.058836f, -0.007683f, -0.026816f, 0.004625f, 0.020324f, -0.028195f, -0.029183f, -0.006598f, -0.036152f, -0.059684f, -0.020374f, - -0.016204f, -0.032350f, -0.007856f, 0.016891f, -0.017003f, -0.009426f, -0.019481f, -0.005140f, -0.042674f, -0.027598f, -0.027358f, 0.000038f, 0.003419f, 0.014525f, -0.024096f, 0.012541f, -0.032328f, 0.000581f, -0.019247f, -0.003189f, 0.009347f, -0.010600f, 0.014444f, -0.042622f, -0.008832f, 0.013463f, 0.005427f, 0.012303f, -0.005865f, -0.012237f, 0.019940f, -0.004890f, -0.004832f, 0.013469f, -0.021494f, -0.017468f, -0.003671f, 0.003076f, -0.028349f, -0.014081f, -0.015729f, -0.009349f, -0.002983f, -0.001274f, 0.001729f, -0.013450f, 0.000612f, -0.023257f, 0.033160f, -0.026393f, 0.091142f, 0.076532f, 0.035908f, -0.020766f, -0.031923f, 0.054744f, 0.046939f, -0.061240f, -0.012315f, -0.037466f, 0.052888f, -0.008788f, -0.074695f, -0.032451f, 0.026829f, 0.046982f, -0.086372f, 0.034912f, -0.059747f, 0.022391f, -0.035208f, -0.008953f, 0.041817f, -0.013818f, 0.006518f, 0.026823f, 0.055666f, -0.036092f, -0.060755f, 0.013878f, -0.004624f, 0.006876f, 0.057055f, 0.014579f, 0.042621f, -0.053541f, -0.009765f, 0.017520f, -0.047833f, 0.078694f, -0.008991f, 0.047268f, -0.006402f, -0.010742f, 0.038711f, 0.038825f, - -0.022010f, 0.086669f, -0.020074f, -0.037299f, 0.041834f, 0.074521f, 0.004370f, 0.013755f, 0.003757f, 0.033051f, -0.034763f, 0.026582f, 0.112810f, 0.052149f, -0.003366f, 0.049546f, 0.060783f, -0.044566f, -0.137667f, 0.010798f, 0.083271f, 0.094313f, 0.025859f, -0.008678f, -0.040456f, 0.049164f, 0.103926f, 0.048848f, 0.025458f, -0.101260f, 0.019345f, -0.057166f, -0.035726f, -0.089202f, 0.076357f, 0.017055f, -0.026124f, -0.035183f, 0.026948f, -0.025278f, 0.014663f, 0.010748f, 0.013674f, -0.032687f, -0.006922f, -0.003569f, 0.017896f, -0.010866f, 0.015153f, 0.013707f, -0.014994f, -0.009169f, 0.020985f, 0.001553f, 0.022515f, -0.008844f, 0.008453f, -0.013985f, 0.008078f, 0.042936f, 0.008095f, 0.008658f, -0.005232f, -0.044633f, -0.022851f, -0.027240f, 0.015115f, 0.077333f, 0.072231f, 0.066048f, -0.004992f, -0.046565f, -0.044799f, -0.020474f, 0.030384f, 0.034746f, -0.002432f, -0.014813f, -0.024208f, -0.034368f, 0.009405f, 0.020782f, 0.016515f, 0.016506f, 0.012151f, 0.001347f, 0.062995f, -0.125437f, 0.095299f, 0.019600f, -0.057662f, 0.000566f, 0.053164f, -0.035802f, 0.001224f, 0.029433f, - -0.037567f, 0.002964f, -0.033800f, -0.021468f, 0.035068f, -0.030583f, -0.017613f, -0.064014f, 0.027289f, 0.061839f, 0.017081f, -0.028078f, -0.047730f, -0.007746f, 0.035189f, 0.019080f, -0.040850f, -0.001240f, 0.048307f, -0.006609f, 0.002886f, -0.016774f, -0.012377f, 0.114340f, -0.055419f, -0.014168f, -0.013253f, 0.019101f, 0.052676f, -0.056665f, -0.032258f, 0.075202f, -0.009449f, -0.004962f, -0.090727f, -0.074656f, 0.030601f, 0.050546f, 0.027071f, -0.092438f, 0.062653f, -0.001803f, -0.014794f, 0.013123f, -0.066704f, -0.018396f, -0.009274f, -0.032816f, 0.058657f, -0.046460f, -0.026510f, -0.049943f, -0.029576f, -0.065819f, 0.019036f, -0.102860f, -0.029637f, 0.011979f, -0.052014f, 0.012577f, 0.027609f, 0.012439f, -0.001619f, -0.018481f, -0.037868f, 0.054352f, -0.012733f, -0.005291f, -0.020511f, 0.032905f, 0.065014f, 0.009882f, -0.090141f, 0.007851f, -0.040722f, 0.005939f, 0.007222f, -0.016272f, 0.005170f, -0.026694f, -0.010094f, -0.002247f, -0.021326f, 0.000400f, -0.006914f, 0.015701f, 0.012824f, -0.004846f, 0.005872f, 0.029223f, -0.014363f, -0.010428f, 0.028622f, -0.021604f, 0.018574f, -0.010440f, - -0.011310f, 0.002290f, -0.013964f, -0.006034f, 0.016863f, -0.035286f, 0.009345f, 0.008454f, 0.011784f, 0.025484f, -0.019206f, 0.003195f, 0.017550f, 0.007069f, -0.007882f, -0.016531f, -0.004769f, -0.003835f, -0.001030f, -0.016923f, 0.003644f, -0.002754f, -0.071860f, 0.043824f, -0.001184f, 0.056682f, -0.011500f, 0.058626f, 0.007475f, -0.007313f, 0.026294f, 0.068002f, 0.032637f, 0.017550f, 0.013700f, 0.008830f, 0.026828f, -0.033986f, -0.002634f, -0.025447f, -0.026762f, 0.041890f, 0.026098f, 0.016132f, -0.011876f, -0.010326f, -0.004816f, 0.043803f, 0.006812f, -0.019159f, -0.031428f, -0.001280f, -0.007338f, 0.032981f, 0.005118f, 0.027607f, 0.051686f, -0.014215f, -0.130492f, 0.008730f, 0.106278f, 0.011222f, -0.077742f, -0.009944f, 0.030118f, 0.023686f, 0.041829f, 0.038042f, -0.002972f, -0.024516f, -0.025127f, 0.033303f, -0.020058f, 0.003816f, 0.011745f, -0.135541f, -0.023389f, -0.025995f, 0.021665f, 0.106681f, -0.001824f, 0.008633f, -0.024614f, 0.007309f, 0.022112f, 0.044779f, 0.023486f, -0.026384f, -0.013777f, -0.065812f, -0.003865f, 0.045307f, -0.019848f, -0.009375f, 0.016802f, 0.046013f, - 0.037405f, -0.009904f, -0.046678f, 0.000295f, 0.017222f, 0.005220f, -0.030970f, 0.003847f, 0.003911f, -0.002358f, -0.026716f, -0.034818f, 0.030374f, 0.024822f, -0.001115f, -0.005455f, -0.026120f, 0.020821f, 0.008766f, 0.004736f, 0.008253f, 0.006632f, 0.012228f, 0.000769f, -0.028940f, 0.016265f, 0.000975f, -0.001831f, 0.001845f, 0.007734f, 0.003873f, -0.003955f, 0.000137f, 0.001122f, -0.009358f, -0.005655f, -0.040058f, 0.006317f, 0.028653f, -0.020012f, 0.010371f, -0.032609f, 0.018588f, 0.008478f, -0.004610f, -0.009039f, -0.003040f, -0.003229f, 0.004112f, -0.007191f, 0.036487f, -0.004508f, -0.214414f, -0.403075f, -0.162144f, -0.272890f, -0.313610f, 0.194619f, 0.067858f, 0.178798f, 0.538112f, 0.352155f, 0.284086f, 0.425919f, 0.212474f, 0.013514f, 0.168270f, 0.041742f, -0.170824f, -0.120063f, -0.136191f, -0.312503f, -0.253958f, -0.109841f, -0.227441f, -0.250548f, -0.103793f, -0.154296f, -0.258764f, -0.133813f, 0.019690f, -0.162776f, -0.149073f, 0.032592f, -0.032539f, -0.148455f, 0.165788f, 0.108207f, -0.124833f, 0.122999f, 0.186618f, 0.028102f, 0.106551f, 0.375404f, 0.178049f, 0.112383f, - 0.441516f, 0.309393f, 0.178912f, 0.435353f, 0.583579f, 0.361288f, 0.523263f, 0.677995f, 0.484290f, 0.321184f, 0.423281f, 0.222775f, -0.216164f, -0.142359f, -0.285416f, -0.664324f, -0.666290f, -0.674731f, -1.018542f, -1.005603f, -1.010484f, -1.052519f, -0.993834f, -0.966629f, -0.761146f, -0.609198f, -0.460908f, -0.190017f, 0.055460f, 0.147467f, 0.375563f, 0.652913f, 0.552991f, 0.741616f, 1.054446f, 0.886441f, 0.827678f, 1.008003f, 0.746515f, 0.382930f, 0.414784f, 0.389349f, 0.145797f, 0.103869f, 0.208687f, 0.077123f, -0.018712f, 0.069799f, 0.024516f, -0.145540f, -0.130304f, -0.078529f, -0.260346f, -0.298821f, -0.130731f, -0.227397f, -0.313201f, -0.129454f, -0.083501f, -0.170732f, -0.002874f, 0.054816f, -0.056753f, -0.008707f, -0.041990f, -0.238944f, -0.344345f, -0.385754f, -0.481941f, -0.567170f, -0.509275f, -0.465417f, -0.433583f, -0.325399f, -0.207459f, -0.147681f, -0.027179f, 0.114634f, 0.178183f, 0.258602f, 0.425824f, 0.517842f, 0.603846f, 0.647283f, 0.613128f, 0.546617f, 0.418021f, 0.285864f, 0.159457f, 0.022286f, -0.027186f, -0.046115f, -0.075241f, -0.084670f, -0.086381f, -0.099991f, - -0.106186f, -0.095822f, -0.086290f, -0.095753f, -0.102771f, -0.097821f, -0.102681f, -0.111933f, -0.107625f, -0.101584f, -0.078251f, -0.046440f, -0.028979f, -0.007332f, 0.009120f, 0.007347f, 0.003072f, 0.000817f}, - {-0.012942f, -0.001200f, 0.012109f, -0.010826f, 0.004172f, -0.018233f, 0.000179f, -0.006606f, 0.007318f, -0.006167f, 0.001657f, -0.004187f, -0.007634f, -0.001971f, -0.000739f, 0.005521f, 0.006916f, -0.006585f, -0.011469f, 0.005991f, 0.002037f, 0.004184f, 0.002519f, 0.004732f, -0.006650f, -0.004999f, 0.001178f, -0.001281f, 0.005962f, 0.004288f, -0.005089f, -0.001109f, 0.004541f, 0.008430f, 0.005187f, 0.000048f, -0.006642f, 0.003546f, -0.001152f, -0.003548f, 0.004648f, 0.001998f, -0.006102f, -0.005114f, -0.004148f, 0.003384f, -0.005979f, -0.003227f, 0.004995f, 0.001911f, -0.000197f, -0.006264f, 0.002281f, -0.005389f, -0.013858f, 0.001344f, -0.004730f, -0.008954f, 0.004085f, -0.002566f, -0.002570f, -0.003087f, 0.000174f, 0.006781f, 0.004083f, 0.002269f, 0.003086f, 0.005112f, -0.010442f, 0.005404f, -0.004165f, -0.004031f, -0.002323f, 0.003432f, 0.000646f, 0.007287f, 0.010630f, 0.004128f, 0.000807f, 0.001179f, -0.000176f, 0.006778f, -0.002894f, -0.000278f, 0.003313f, 0.000208f, -0.002836f, -0.002919f, 0.000951f, -0.000110f, -0.003199f, -0.001628f, 0.000984f, -0.000197f, -0.000437f, -0.001300f, - -0.001590f, 0.001026f, 0.000669f, 0.001115f, -0.000482f, 0.000368f, -0.000338f, -0.002984f, -0.001152f, 0.001312f, 0.002348f, -0.001361f, -0.001576f, 0.000501f, 0.027683f, -0.002312f, 0.005093f, 0.006110f, -0.002810f, 0.002890f, 0.011042f, -0.008571f, -0.001497f, 0.003172f, -0.004251f, -0.000820f, 0.008118f, -0.002594f, -0.001802f, -0.000541f, 0.003161f, -0.001527f, 0.003922f, -0.002715f, -0.002666f, -0.001219f, -0.006255f, -0.010705f, -0.001996f, -0.003421f, -0.001414f, 0.006336f, -0.011335f, 0.013983f, 0.000110f, 0.000262f, 0.000506f, 0.002655f, -0.000311f, -0.005350f, 0.000872f, 0.004322f, 0.010565f, 0.000543f, -0.000050f, -0.001588f, -0.003526f, 0.007022f, 0.003355f, -0.002543f, 0.003894f, -0.006963f, 0.001220f, 0.002242f, -0.005251f, -0.018128f, -0.005650f, -0.000440f, -0.001037f, -0.000851f, -0.001566f, -0.002298f, -0.001284f, -0.003437f, 0.004478f, 0.013381f, 0.007608f, 0.000597f, 0.000009f, -0.000347f, 0.004707f, -0.002724f, -0.012156f, -0.000412f, -0.006314f, 0.004005f, -0.007168f, 0.004083f, -0.017557f, -0.000102f, -0.002469f, 0.005982f, 0.009625f, -0.001462f, -0.002245f, 0.001446f, - -0.000002f, 0.005160f, 0.001930f, 0.000868f, 0.007020f, -0.005140f, -0.000638f, 0.000890f, 0.002539f, 0.000015f, 0.002589f, 0.000144f, 0.001673f, 0.000746f, -0.000294f, 0.000522f, -0.000582f, -0.000075f, 0.001512f, 0.002218f, 0.000313f, -0.000609f, -0.000818f, 0.000291f, -0.000335f, 0.001255f, 0.000950f, 0.000610f, -0.000363f, 0.000229f, 0.000899f, -0.024358f, -0.023488f, -0.008840f, -0.003479f, -0.003352f, 0.000020f, 0.005940f, 0.001418f, 0.004825f, -0.011030f, 0.005455f, 0.006873f, 0.006642f, 0.007789f, -0.006026f, 0.001675f, 0.018328f, -0.011336f, -0.000400f, -0.008075f, -0.011712f, -0.001401f, -0.000832f, 0.010155f, -0.004925f, 0.001069f, -0.008748f, 0.005609f, 0.003503f, 0.004404f, -0.019611f, 0.003025f, -0.003587f, -0.006878f, -0.001852f, -0.000094f, -0.014550f, -0.009420f, -0.008125f, -0.000653f, 0.012157f, 0.004218f, 0.004027f, 0.005843f, -0.005439f, 0.003440f, -0.004880f, 0.010396f, 0.015992f, -0.001496f, -0.001471f, 0.004550f, 0.001119f, 0.004139f, 0.008986f, -0.004213f, 0.009297f, -0.001452f, -0.000286f, 0.005505f, 0.007530f, -0.002846f, -0.010878f, -0.010003f, 0.003865f, - -0.001364f, -0.001869f, -0.004406f, 0.004938f, -0.008328f, 0.003096f, 0.006252f, 0.010553f, -0.006131f, 0.010119f, 0.006615f, 0.003291f, 0.005064f, 0.001221f, -0.001707f, -0.006817f, 0.004857f, -0.003208f, -0.006358f, -0.008042f, 0.003343f, -0.002651f, 0.004857f, 0.000852f, -0.003089f, -0.003754f, -0.001907f, 0.001599f, -0.001976f, -0.000708f, -0.002542f, -0.001128f, -0.000144f, 0.002473f, 0.001310f, -0.000080f, 0.001446f, 0.004875f, -0.000460f, 0.000013f, 0.002859f, -0.001540f, 0.000813f, -0.001074f, -0.000822f, 0.001402f, 0.002062f, 0.002062f, 0.001333f, -0.000031f, -0.000628f, 0.001521f, 0.000737f, 0.003337f, 0.004011f, -0.003184f, -0.000316f, 0.001755f, -0.026709f, 0.011460f, -0.011994f, 0.021337f, -0.019999f, 0.015590f, 0.007916f, -0.008349f, -0.010417f, -0.005831f, 0.004018f, 0.003611f, -0.005654f, 0.012554f, -0.004605f, -0.012134f, -0.002523f, 0.012987f, 0.008889f, -0.013276f, 0.002053f, -0.001725f, -0.013892f, -0.005801f, -0.008955f, -0.002151f, -0.010648f, -0.002886f, -0.004473f, -0.014664f, -0.005256f, 0.007338f, 0.010579f, -0.002123f, -0.012557f, -0.002601f, 0.008818f, -0.002795f, - 0.000263f, 0.000534f, 0.000155f, -0.012507f, -0.000412f, -0.001559f, -0.003197f, -0.000654f, 0.002155f, -0.008976f, 0.005048f, -0.009606f, -0.000248f, -0.000134f, 0.000160f, 0.007007f, 0.000109f, -0.003358f, 0.002847f, 0.004838f, 0.011658f, 0.005272f, 0.002623f, -0.003455f, -0.007289f, -0.006902f, -0.002880f, -0.007532f, -0.005398f, 0.004334f, 0.007621f, -0.005699f, -0.009468f, -0.006518f, 0.002959f, 0.001587f, -0.008882f, -0.003098f, 0.001070f, -0.007497f, -0.003452f, 0.000969f, 0.002248f, 0.002962f, -0.003466f, -0.004169f, -0.005680f, 0.000156f, -0.000721f, -0.002224f, 0.001716f, -0.001916f, -0.000670f, -0.004360f, -0.000993f, -0.001501f, 0.003751f, 0.001814f, -0.001572f, 0.001804f, -0.000260f, 0.000537f, -0.001876f, 0.000167f, -0.001127f, -0.000137f, -0.001566f, -0.002915f, 0.002034f, -0.000243f, -0.002770f, -0.001758f, -0.000296f, -0.002547f, -0.002942f, 0.032686f, 0.013069f, -0.002068f, 0.007492f, -0.005118f, 0.018366f, 0.007838f, 0.032995f, 0.000745f, -0.031717f, 0.008287f, 0.019404f, -0.011347f, 0.003485f, 0.013419f, -0.010112f, 0.009505f, -0.008181f, -0.001659f, -0.010112f, -0.009585f, - -0.002981f, 0.002846f, -0.000962f, 0.004554f, -0.004283f, 0.014253f, -0.008342f, 0.004139f, 0.002692f, 0.009331f, -0.016729f, -0.008609f, -0.006545f, -0.001828f, -0.005870f, 0.001750f, 0.010348f, 0.007493f, 0.016383f, -0.002216f, -0.001132f, -0.009117f, -0.002977f, 0.010464f, -0.009965f, 0.008676f, -0.009319f, -0.003767f, 0.015036f, 0.021792f, 0.015559f, 0.002905f, -0.011332f, 0.008186f, 0.006009f, -0.005878f, 0.012647f, -0.008106f, 0.002546f, 0.002185f, -0.022923f, -0.000001f, -0.021727f, -0.008567f, 0.003533f, -0.005559f, -0.010343f, -0.008675f, 0.001873f, 0.015179f, 0.003787f, -0.005901f, -0.007549f, -0.006471f, 0.001555f, 0.002648f, 0.007207f, -0.011114f, -0.010167f, 0.000926f, -0.001927f, 0.000910f, -0.002895f, -0.001451f, -0.001785f, -0.000743f, 0.003432f, 0.001118f, 0.001594f, -0.001232f, -0.002327f, -0.002056f, 0.000700f, 0.006221f, 0.002020f, 0.004594f, 0.001408f, -0.006587f, 0.005186f, 0.002584f, 0.000964f, 0.001274f, 0.003004f, -0.000412f, 0.002590f, 0.000782f, -0.000047f, -0.001854f, -0.001563f, -0.002665f, 0.000881f, 0.003137f, -0.000542f, -0.001108f, -0.001599f, -0.009415f, - -0.001090f, -0.000885f, 0.000330f, -0.001219f, 0.020236f, 0.040957f, -0.017802f, -0.013224f, -0.003566f, -0.004790f, 0.014290f, -0.013609f, -0.024808f, -0.008592f, 0.001757f, -0.006067f, 0.007150f, 0.003385f, 0.012392f, 0.005199f, -0.004937f, 0.017812f, 0.016703f, -0.007680f, 0.001229f, -0.011472f, -0.001935f, 0.000642f, -0.007056f, -0.001363f, 0.012467f, 0.017879f, 0.000730f, 0.002950f, 0.007365f, 0.004710f, 0.002887f, 0.001231f, -0.006751f, -0.012830f, 0.001491f, -0.018459f, 0.000678f, 0.004250f, -0.005874f, 0.007262f, -0.004667f, -0.010202f, -0.000786f, 0.009948f, 0.004409f, -0.004447f, 0.030171f, -0.000081f, 0.009739f, -0.017948f, -0.003994f, 0.012326f, -0.005763f, -0.013287f, 0.007829f, -0.015572f, -0.013964f, 0.003191f, 0.017117f, -0.013994f, -0.007869f, -0.004129f, 0.000716f, -0.006332f, -0.006313f, 0.023094f, 0.013506f, -0.002081f, 0.001289f, -0.010857f, -0.007783f, -0.004409f, 0.006942f, 0.009138f, 0.000802f, 0.007329f, 0.004733f, -0.001472f, 0.006796f, -0.006234f, 0.023050f, 0.013074f, 0.002542f, 0.000752f, 0.002126f, -0.003882f, -0.001489f, -0.003864f, -0.004092f, -0.000108f, - -0.000149f, -0.003718f, 0.001991f, -0.005617f, -0.001696f, 0.004408f, -0.001576f, 0.004518f, 0.002570f, 0.004276f, 0.000180f, 0.002958f, 0.003359f, 0.003065f, 0.000579f, 0.005075f, 0.001665f, 0.000727f, -0.003655f, 0.000392f, -0.001354f, -0.000026f, 0.000252f, 0.001847f, -0.000244f, 0.001687f, -0.003485f, -0.000117f, 0.016164f, -0.029109f, -0.003957f, -0.021875f, -0.012478f, -0.019821f, -0.005080f, -0.003084f, -0.003017f, -0.007649f, 0.008792f, -0.027909f, 0.014285f, -0.009549f, 0.008479f, 0.003679f, 0.011588f, 0.000607f, 0.004785f, -0.011277f, -0.004802f, 0.005160f, -0.011223f, -0.008164f, 0.013660f, 0.003734f, 0.006169f, 0.005460f, -0.001434f, 0.003642f, 0.020353f, -0.007348f, 0.001933f, -0.009230f, 0.016364f, -0.009939f, -0.036443f, 0.011237f, 0.005705f, 0.015291f, 0.008262f, 0.021087f, -0.014289f, -0.005689f, 0.012729f, -0.005333f, -0.012220f, -0.005797f, 0.006615f, -0.017728f, 0.017469f, -0.000644f, 0.011638f, -0.014970f, -0.006575f, -0.005452f, -0.016215f, -0.003323f, -0.012895f, -0.005894f, 0.001355f, 0.018631f, 0.015004f, -0.001716f, -0.022889f, -0.013059f, -0.004226f, 0.018098f, - 0.014972f, 0.010898f, 0.010083f, -0.006436f, -0.026492f, -0.006790f, -0.000790f, 0.006187f, -0.008377f, -0.002617f, 0.013532f, -0.002602f, 0.015997f, 0.000190f, 0.011078f, 0.004235f, 0.000518f, -0.004099f, -0.000442f, 0.006028f, 0.001595f, -0.002820f, 0.000534f, -0.007323f, -0.001273f, -0.000429f, -0.009805f, -0.005869f, -0.006274f, -0.003060f, 0.001915f, -0.003943f, 0.001567f, -0.005282f, -0.000705f, -0.001550f, -0.002881f, 0.004283f, 0.002057f, -0.000910f, -0.006681f, -0.002588f, 0.002641f, 0.004364f, 0.000057f, -0.006484f, -0.003451f, 0.001468f, 0.003323f, 0.000922f, 0.001597f, 0.000492f, -0.038306f, -0.046237f, -0.026205f, 0.018708f, 0.001342f, -0.008780f, -0.009936f, -0.014900f, -0.001733f, 0.004804f, -0.025865f, -0.002642f, 0.016057f, -0.010102f, -0.007224f, 0.017943f, 0.004602f, -0.012135f, 0.004405f, -0.011749f, 0.026729f, -0.008867f, -0.006556f, 0.008520f, -0.014147f, -0.008948f, -0.008362f, 0.004374f, -0.009870f, -0.003815f, 0.004349f, 0.003073f, -0.031732f, 0.013945f, 0.013609f, -0.009270f, 0.024303f, 0.009226f, 0.002187f, 0.023279f, 0.013242f, 0.004018f, 0.003144f, 0.025185f, - -0.002665f, -0.004491f, -0.001844f, 0.015413f, 0.008584f, -0.023138f, 0.008775f, 0.007036f, -0.000299f, -0.012398f, -0.037202f, 0.016203f, -0.002565f, -0.009286f, -0.023374f, -0.013275f, 0.014164f, -0.003181f, -0.006891f, -0.015630f, -0.030271f, 0.002911f, -0.004289f, -0.016144f, -0.006850f, -0.028645f, -0.004665f, -0.006543f, -0.005496f, -0.001353f, 0.010125f, 0.021761f, 0.009287f, -0.007452f, -0.015750f, 0.005945f, 0.001006f, 0.009006f, 0.005658f, -0.003659f, 0.006590f, 0.002310f, -0.000804f, -0.008612f, 0.000702f, -0.013938f, -0.000901f, -0.003162f, 0.002222f, -0.005463f, 0.006458f, 0.003725f, -0.001590f, -0.001258f, -0.001378f, 0.000817f, -0.003190f, -0.000928f, 0.003701f, -0.001609f, -0.001424f, 0.007017f, -0.002857f, -0.001953f, 0.005692f, -0.004532f, 0.003427f, -0.011681f, -0.007548f, -0.004371f, -0.006172f, -0.000743f, -0.006129f, -0.008258f, -0.006090f, -0.001841f, -0.001276f, 0.002627f, -0.000302f, -0.005094f, 0.002879f, 0.000961f, -0.039431f, 0.031735f, 0.001788f, 0.016224f, -0.002887f, -0.001312f, 0.002995f, 0.017526f, 0.001748f, -0.002169f, -0.023808f, 0.008491f, -0.002597f, -0.018396f, - 0.004834f, -0.012015f, -0.009225f, 0.034179f, 0.009737f, 0.010534f, -0.007347f, 0.012252f, 0.014801f, 0.014295f, -0.008257f, 0.012484f, 0.006504f, -0.014367f, 0.009407f, -0.013972f, -0.004796f, 0.008955f, 0.004274f, -0.001428f, -0.007721f, -0.007274f, 0.022765f, -0.006590f, -0.009932f, -0.006366f, 0.004691f, 0.004961f, -0.010806f, -0.018305f, -0.001282f, -0.019643f, -0.002266f, -0.017709f, -0.006633f, -0.004188f, 0.003550f, -0.009015f, -0.015285f, 0.019413f, -0.007946f, -0.021337f, 0.013733f, 0.022813f, -0.010957f, -0.007285f, 0.011620f, 0.008394f, 0.022685f, 0.014634f, 0.002383f, -0.000198f, -0.023128f, 0.005630f, 0.022365f, 0.017923f, -0.015703f, 0.017089f, 0.018592f, -0.012342f, -0.034381f, -0.011109f, -0.030779f, 0.005215f, 0.017853f, 0.008959f, 0.002273f, -0.009258f, -0.012367f, -0.001376f, 0.001768f, 0.005382f, -0.002680f, 0.010126f, -0.004386f, -0.003547f, 0.004117f, 0.010720f, -0.015600f, -0.002082f, -0.001833f, -0.004794f, 0.000281f, 0.004316f, -0.000709f, -0.000487f, -0.002306f, -0.000304f, -0.002326f, 0.000887f, -0.000008f, -0.000335f, 0.001702f, 0.005597f, -0.004647f, -0.002787f, - 0.003413f, 0.003597f, 0.011991f, -0.001143f, 0.005150f, 0.004649f, -0.004830f, 0.004203f, 0.002136f, -0.004418f, 0.001405f, 0.001741f, 0.001648f, 0.004785f, 0.010538f, 0.002195f, -0.003172f, 0.006883f, -0.001860f, -0.003835f, 0.000880f, 0.007722f, -0.062732f, 0.030263f, 0.008672f, -0.002819f, 0.042549f, -0.002366f, 0.021609f, -0.018817f, -0.004294f, 0.003485f, 0.000417f, 0.024381f, 0.015565f, -0.032782f, 0.020707f, 0.001691f, 0.012494f, -0.029515f, -0.001008f, 0.017273f, -0.028957f, 0.036558f, 0.010020f, -0.000254f, -0.012859f, 0.002313f, 0.015928f, -0.025980f, 0.002561f, 0.006806f, 0.004772f, -0.015968f, -0.005810f, 0.015370f, 0.008775f, -0.001505f, 0.002421f, -0.010459f, -0.017961f, 0.007627f, -0.030471f, -0.001139f, 0.044030f, 0.042963f, -0.013557f, 0.005440f, -0.001731f, 0.012389f, 0.030978f, 0.002723f, 0.014894f, 0.005024f, -0.016050f, -0.001092f, -0.002951f, -0.046402f, -0.020874f, 0.028922f, 0.001466f, 0.009003f, -0.011104f, -0.002732f, 0.010374f, 0.014065f, -0.001138f, 0.035964f, 0.000647f, 0.028078f, 0.003610f, 0.006016f, 0.003779f, -0.018181f, -0.022865f, 0.028433f, - 0.006685f, -0.014649f, 0.020673f, -0.016717f, 0.001650f, 0.017505f, 0.002942f, -0.004336f, 0.008220f, -0.007353f, -0.007050f, 0.008821f, 0.012056f, 0.000968f, -0.015893f, -0.007591f, -0.017132f, -0.006047f, 0.004383f, 0.005671f, 0.002898f, -0.006562f, -0.003018f, -0.012297f, 0.009073f, -0.000034f, -0.004902f, -0.002156f, 0.003879f, 0.002202f, 0.011224f, 0.010071f, 0.006554f, 0.006591f, 0.002302f, 0.008026f, -0.005199f, 0.003761f, 0.004347f, 0.004173f, -0.004529f, 0.008110f, 0.004313f, -0.001060f, -0.001343f, -0.001949f, -0.001880f, -0.003514f, 0.021058f, -0.045817f, 0.018408f, 0.028867f, -0.003997f, 0.008586f, 0.012987f, -0.007007f, -0.004440f, 0.017815f, -0.006715f, 0.027034f, -0.025736f, 0.014064f, 0.033415f, -0.035813f, 0.001444f, -0.017032f, 0.021104f, 0.008911f, 0.017502f, -0.018121f, -0.014165f, -0.000205f, 0.045156f, 0.000524f, 0.022842f, -0.010133f, 0.001374f, -0.003104f, -0.004024f, -0.020044f, -0.000787f, -0.005620f, 0.009188f, -0.008945f, -0.013019f, -0.010918f, -0.000844f, -0.003799f, 0.020388f, 0.003518f, -0.011300f, -0.010223f, -0.010406f, -0.003792f, -0.004969f, 0.033319f, - 0.001429f, 0.016741f, 0.001122f, -0.007987f, -0.007315f, 0.027716f, 0.020642f, -0.007961f, -0.026125f, 0.014755f, 0.010110f, -0.057515f, 0.003311f, 0.032482f, 0.031628f, 0.007404f, 0.025142f, -0.034690f, 0.056842f, 0.005013f, 0.010849f, 0.011278f, 0.027094f, -0.002102f, -0.024362f, -0.007367f, -0.028779f, 0.032733f, -0.014502f, -0.009660f, 0.028493f, -0.000823f, -0.011273f, -0.008653f, -0.021512f, 0.020372f, -0.035084f, -0.005105f, 0.003320f, -0.000817f, 0.004933f, -0.007226f, -0.015095f, -0.009531f, 0.004616f, 0.003900f, -0.007169f, 0.001874f, -0.006843f, -0.007262f, -0.005464f, 0.006493f, 0.003297f, -0.008247f, 0.007664f, 0.001631f, -0.010180f, 0.004645f, -0.001929f, -0.003487f, -0.007792f, -0.008680f, 0.001573f, 0.004329f, 0.018045f, -0.007869f, 0.010646f, 0.001401f, -0.003721f, -0.001217f, -0.002248f, -0.004690f, 0.002659f, -0.000418f, -0.005524f, -0.001709f, -0.003870f, 0.001564f, 0.003546f, 0.003077f, 0.017322f, -0.034221f, -0.027408f, 0.024052f, 0.020204f, 0.049683f, -0.017853f, -0.013445f, -0.009128f, 0.009170f, -0.021424f, -0.002795f, 0.008054f, -0.001732f, 0.026594f, 0.017041f, - -0.021727f, 0.001699f, 0.006045f, 0.015259f, -0.024712f, 0.025453f, -0.000678f, 0.011138f, -0.004586f, -0.011974f, -0.025913f, 0.008813f, -0.004696f, -0.011080f, 0.004914f, -0.016005f, -0.015567f, -0.003692f, 0.007798f, 0.030886f, -0.046611f, -0.028306f, -0.025259f, -0.028351f, -0.008225f, 0.032035f, -0.019357f, -0.001146f, 0.031534f, -0.004932f, -0.014602f, -0.027831f, -0.007705f, -0.012144f, -0.057279f, -0.044521f, -0.012757f, 0.009729f, -0.005716f, 0.009699f, -0.012936f, -0.009399f, 0.026804f, 0.016079f, -0.028782f, -0.014997f, -0.032182f, -0.012959f, 0.002341f, 0.012493f, -0.005994f, 0.003143f, -0.027502f, -0.022058f, -0.020161f, -0.000835f, 0.004369f, 0.001442f, -0.026045f, 0.000568f, 0.034376f, 0.014680f, 0.039281f, -0.031436f, 0.048070f, 0.004008f, -0.030342f, -0.005271f, 0.001105f, 0.008214f, -0.005329f, 0.012897f, -0.018666f, 0.008457f, -0.016565f, 0.007413f, 0.010842f, -0.003776f, 0.024476f, -0.002338f, 0.005560f, -0.006945f, -0.009227f, -0.005312f, 0.000436f, 0.005332f, -0.009744f, -0.001949f, 0.002902f, -0.002369f, 0.009238f, -0.003110f, -0.005035f, -0.016249f, 0.006799f, 0.000766f, - 0.008101f, 0.003302f, -0.005629f, -0.015303f, 0.004590f, -0.019491f, 0.004624f, -0.005253f, -0.001053f, 0.001799f, -0.004392f, 0.001270f, 0.002778f, 0.013117f, 0.004982f, -0.006028f, -0.024444f, 0.004657f, -0.002694f, 0.056252f, 0.006129f, 0.027078f, -0.023476f, -0.015971f, -0.005776f, -0.026534f, -0.016837f, -0.025632f, -0.011911f, -0.016624f, 0.030533f, 0.007640f, 0.007707f, 0.031433f, -0.000835f, -0.001832f, 0.014222f, 0.028278f, 0.044278f, 0.032333f, -0.006639f, -0.012053f, -0.050965f, 0.014013f, 0.015996f, 0.006183f, -0.031771f, 0.036717f, 0.014680f, 0.021555f, -0.006005f, 0.002003f, 0.020914f, 0.045869f, 0.044739f, 0.025738f, 0.005442f, 0.047690f, 0.001273f, -0.014296f, 0.015534f, 0.028898f, 0.023558f, 0.042884f, 0.022729f, 0.000907f, 0.005216f, -0.025966f, 0.011286f, -0.064817f, -0.011050f, -0.006567f, 0.014414f, 0.050839f, 0.028698f, 0.007440f, 0.037044f, -0.026932f, -0.024292f, 0.005160f, -0.062794f, -0.015101f, 0.002661f, 0.011975f, 0.014631f, 0.016539f, -0.003707f, 0.027499f, 0.003527f, 0.014173f, 0.051020f, -0.031468f, -0.016231f, -0.008775f, 0.009790f, -0.006088f, - -0.048001f, -0.009204f, 0.032872f, -0.002506f, 0.041670f, -0.022452f, 0.001230f, 0.017071f, -0.003943f, 0.004687f, -0.017271f, -0.008649f, -0.013390f, -0.009143f, -0.014866f, -0.012432f, 0.003337f, 0.002398f, -0.029912f, -0.014115f, -0.016818f, -0.004701f, 0.005607f, 0.008869f, -0.013299f, -0.000761f, 0.004086f, -0.021319f, 0.003214f, -0.008714f, -0.013756f, -0.007479f, 0.001145f, 0.004916f, -0.009419f, -0.002653f, -0.014446f, -0.001414f, -0.003833f, -0.004996f, -0.010526f, -0.015831f, 0.003983f, 0.004851f, -0.008424f, -0.006219f, -0.006174f, -0.005049f, 0.002860f, 0.009925f, 0.002935f, 0.002901f, -0.043286f, -0.013577f, 0.007978f, 0.032893f, 0.060344f, -0.024128f, 0.001154f, 0.010053f, -0.010959f, 0.055939f, 0.009992f, -0.027416f, 0.049021f, -0.009995f, -0.016330f, 0.035120f, -0.031694f, -0.018491f, 0.002226f, 0.003167f, 0.004450f, 0.023039f, 0.012359f, 0.018716f, -0.005613f, 0.009975f, 0.028137f, 0.001812f, 0.019211f, 0.003610f, 0.000820f, 0.031097f, -0.040401f, -0.014613f, -0.013649f, 0.027081f, -0.020558f, -0.005265f, -0.012080f, 0.026821f, -0.011263f, 0.059546f, 0.043552f, -0.040406f, - 0.019922f, -0.048570f, 0.007062f, 0.017681f, 0.009547f, 0.010616f, -0.061950f, -0.011941f, -0.059746f, 0.008030f, 0.005010f, 0.007388f, -0.009374f, -0.010751f, 0.028687f, -0.051569f, 0.017841f, -0.022277f, -0.097243f, -0.036347f, -0.031779f, 0.016109f, -0.014105f, 0.014899f, 0.048777f, 0.052020f, 0.029485f, 0.027415f, 0.025430f, 0.007471f, -0.038628f, 0.040725f, 0.000136f, -0.044852f, -0.035700f, -0.056392f, -0.074759f, -0.038494f, -0.007510f, 0.059944f, 0.021638f, 0.003741f, 0.022993f, -0.018186f, -0.000365f, 0.011610f, 0.009627f, -0.004721f, 0.008832f, 0.002932f, 0.006144f, 0.002607f, -0.018443f, 0.015026f, 0.009970f, 0.007432f, 0.003028f, -0.009570f, 0.005307f, -0.014278f, -0.005080f, -0.022234f, 0.018656f, 0.014149f, -0.003020f, 0.002132f, 0.014935f, 0.023740f, -0.010584f, -0.022958f, -0.006945f, 0.018883f, -0.004120f, -0.013663f, 0.020115f, -0.001631f, -0.011609f, 0.013953f, 0.005603f, 0.001011f, -0.003400f, -0.000408f, -0.009854f, 0.006872f, -0.006271f, -0.002738f, 0.014419f, -0.077926f, -0.036612f, -0.027553f, 0.013505f, -0.059624f, 0.020337f, -0.035948f, 0.049352f, -0.059297f, - -0.074993f, -0.016837f, -0.011446f, 0.057470f, 0.027693f, 0.025177f, -0.015685f, 0.006030f, -0.036732f, -0.029691f, 0.005994f, 0.011455f, -0.047130f, -0.043910f, -0.030993f, -0.004609f, 0.022667f, 0.016092f, -0.033307f, -0.041854f, -0.024559f, -0.025018f, -0.056446f, -0.032928f, 0.023945f, -0.016267f, -0.001074f, -0.008420f, 0.017386f, 0.027999f, -0.008272f, -0.084215f, 0.034524f, 0.069087f, 0.025335f, -0.002260f, -0.084465f, -0.020707f, 0.035849f, -0.011139f, 0.092928f, -0.010704f, -0.076173f, 0.011759f, -0.013419f, 0.005558f, 0.001381f, -0.015785f, 0.019568f, 0.024412f, -0.080329f, -0.021938f, 0.003673f, 0.027540f, -0.015500f, -0.041230f, 0.035441f, 0.002969f, -0.027712f, -0.080007f, -0.092752f, -0.048026f, -0.006590f, 0.006161f, 0.073026f, 0.103529f, 0.052957f, 0.040249f, 0.017144f, -0.061001f, 0.021353f, -0.000849f, -0.032281f, -0.009639f, -0.100217f, -0.021499f, -0.001344f, 0.000238f, 0.002825f, 0.042907f, 0.015610f, 0.012450f, -0.018552f, -0.006214f, 0.037029f, -0.026194f, -0.001116f, -0.002051f, 0.006617f, -0.019556f, -0.032092f, -0.035595f, 0.014891f, -0.016850f, -0.006418f, 0.020110f, - 0.000055f, 0.002882f, -0.027475f, 0.008626f, 0.007971f, 0.004213f, -0.022738f, -0.011595f, -0.015214f, -0.023591f, 0.002427f, -0.013868f, 0.024253f, 0.009357f, -0.017716f, 0.002827f, -0.006999f, 0.016808f, -0.024116f, -0.003500f, -0.001724f, 0.011827f, 0.010318f, 0.005240f, 0.012610f, -0.000611f, 0.006353f, 0.140002f, 0.128588f, -0.054347f, 0.066684f, 0.059059f, -0.016675f, -0.010082f, -0.030755f, -0.016692f, -0.036140f, -0.025462f, 0.106694f, -0.005899f, 0.062151f, 0.000654f, 0.003009f, 0.000719f, -0.042133f, 0.009930f, 0.008720f, -0.092698f, 0.013791f, 0.022288f, -0.048703f, -0.010323f, -0.015004f, -0.006791f, 0.013722f, -0.002920f, 0.002852f, 0.040608f, 0.016570f, -0.020020f, 0.012611f, 0.064816f, 0.001126f, 0.029762f, -0.001546f, 0.024244f, -0.035774f, -0.043482f, -0.024158f, -0.079664f, 0.021331f, 0.008681f, -0.035237f, -0.096769f, -0.062991f, -0.090491f, 0.065840f, -0.047102f, 0.010354f, 0.016043f, 0.015036f, 0.012298f, 0.070269f, -0.067761f, 0.000504f, -0.038096f, 0.074388f, -0.166881f, 0.034307f, 0.012610f, 0.053424f, 0.048231f, 0.000378f, -0.015654f, -0.025362f, -0.007652f, - -0.048277f, 0.035260f, 0.098294f, -0.007768f, 0.020411f, 0.061661f, -0.043110f, 0.024307f, 0.030359f, -0.054819f, -0.037634f, -0.101394f, 0.083889f, -0.016585f, -0.073580f, 0.049157f, -0.012227f, 0.031992f, -0.002095f, 0.027679f, 0.004931f, -0.022012f, 0.034835f, 0.032879f, 0.005550f, 0.018681f, 0.031698f, 0.018395f, -0.021057f, -0.009477f, -0.020562f, -0.009536f, 0.026740f, 0.050502f, -0.002090f, -0.009812f, -0.001954f, 0.032260f, -0.051407f, 0.029120f, -0.013862f, 0.068411f, 0.013760f, -0.041455f, -0.008227f, 0.030080f, -0.015900f, -0.022010f, -0.015980f, -0.012942f, -0.015711f, 0.016232f, 0.012013f, 0.043469f, -0.036719f, 0.001706f, -0.004142f, 0.023475f, 0.001666f, -0.003731f, 0.014398f, 0.016739f, 0.013490f, 0.027967f, 0.003666f, 0.032314f, -0.048605f, -0.046088f, 0.056914f, -0.116019f, 0.079947f, -0.047866f, -0.033462f, -0.021059f, 0.007255f, -0.033615f, -0.026176f, 0.036339f, -0.011197f, -0.079361f, 0.027340f, -0.004890f, 0.014010f, -0.017892f, 0.070499f, -0.057574f, 0.002419f, 0.029253f, -0.020009f, 0.022155f, -0.046991f, 0.003851f, -0.040438f, -0.020482f, 0.043921f, 0.005634f, - 0.017586f, -0.024970f, 0.042459f, -0.012231f, -0.019849f, 0.016305f, -0.026037f, -0.021639f, -0.013922f, -0.014291f, -0.043883f, -0.058719f, -0.016369f, 0.032654f, 0.000504f, -0.018346f, -0.058672f, 0.002318f, -0.046374f, -0.003025f, 0.018669f, -0.045807f, -0.011295f, 0.033853f, 0.034290f, 0.024981f, -0.056937f, -0.026869f, 0.039258f, 0.012871f, -0.001088f, 0.031898f, -0.186870f, -0.043137f, -0.020822f, -0.084798f, 0.008378f, 0.023437f, -0.004958f, 0.015782f, 0.040098f, -0.022982f, -0.039694f, 0.010249f, -0.036031f, -0.010798f, 0.038940f, 0.061832f, -0.023358f, -0.074353f, -0.044901f, 0.004965f, -0.039689f, 0.006357f, -0.030774f, -0.028965f, 0.007829f, -0.059528f, 0.000784f, -0.037089f, -0.011363f, -0.020248f, 0.008448f, 0.015255f, -0.005826f, -0.036793f, 0.008285f, -0.002267f, -0.023219f, 0.029112f, -0.001095f, -0.027034f, -0.009249f, -0.006925f, -0.010139f, -0.018656f, 0.010396f, -0.017007f, 0.014302f, 0.019827f, -0.007518f, 0.002525f, -0.011281f, -0.025531f, -0.036283f, 0.006837f, 0.005108f, 0.017260f, -0.041998f, 0.009237f, 0.000127f, -0.026902f, 0.021350f, -0.010879f, 0.015405f, 0.034816f, - -0.076370f, 0.015990f, 0.011222f, 0.022773f, -0.012294f, -0.007257f, 0.025846f, 0.001428f, 0.125310f, -0.016094f, -0.034944f, 0.004581f, -0.014184f, 0.061994f, 0.011493f, -0.005459f, 0.058833f, 0.059720f, 0.019449f, 0.022994f, 0.032623f, -0.074028f, -0.041088f, 0.061075f, -0.008633f, -0.060797f, -0.030952f, -0.027687f, 0.041494f, 0.022208f, -0.022541f, -0.087713f, 0.026922f, 0.013567f, 0.011308f, 0.014208f, -0.010878f, 0.008724f, -0.065987f, 0.058554f, 0.040430f, 0.021505f, -0.033244f, -0.028086f, -0.000484f, 0.029253f, -0.006797f, 0.030432f, 0.012943f, -0.069375f, -0.031193f, 0.010826f, -0.070114f, 0.004025f, 0.012914f, -0.061433f, -0.086836f, -0.012191f, 0.025649f, -0.050315f, -0.105368f, -0.046026f, -0.027920f, 0.068053f, -0.041831f, 0.076814f, -0.016303f, 0.003582f, 0.032384f, 0.004480f, -0.118048f, -0.007844f, 0.004442f, 0.054934f, -0.105124f, -0.144617f, 0.010003f, -0.009411f, -0.092661f, 0.052063f, 0.024029f, -0.003415f, -0.000782f, 0.085165f, -0.122298f, 0.100038f, 0.020658f, 0.013452f, 0.040062f, -0.043774f, -0.040212f, -0.007519f, 0.018422f, -0.024841f, -0.002303f, 0.051448f, - -0.043974f, -0.034741f, 0.044928f, -0.025539f, -0.013263f, 0.019196f, 0.012045f, -0.050723f, 0.025461f, -0.016855f, -0.005094f, 0.018218f, 0.017222f, -0.053999f, -0.009284f, -0.041920f, 0.023137f, 0.033097f, 0.001717f, -0.069489f, 0.048955f, -0.011788f, -0.001570f, 0.030180f, -0.007962f, -0.025090f, -0.005048f, 0.039814f, -0.059944f, 0.041005f, 0.001763f, -0.004122f, 0.014485f, 0.008236f, -0.037671f, 0.017573f, -0.000625f, 0.002125f, -0.048963f, 0.033770f, -0.032215f, 0.037249f, 0.005053f, -0.043978f, 0.003209f, 0.006033f, -0.013192f, 0.006532f, 0.058915f, 0.023099f, 0.138647f, -0.057967f, -0.060469f, -0.025016f, -0.002187f, 0.131684f, -0.017994f, 0.109085f, -0.076108f, -0.029839f, 0.046350f, -0.082946f, -0.027130f, -0.078039f, 0.013214f, 0.079647f, -0.108980f, -0.039898f, -0.009021f, 0.033305f, -0.000545f, 0.012312f, 0.030670f, -0.007567f, -0.068920f, -0.063863f, 0.003625f, 0.045364f, 0.121904f, -0.026832f, 0.033370f, -0.034810f, 0.060402f, 0.002178f, 0.007451f, -0.016660f, -0.071271f, 0.002516f, 0.066574f, -0.011217f, -0.003422f, -0.024530f, -0.062102f, 0.082543f, 0.031829f, 0.055125f, - 0.074083f, -0.003460f, 0.004798f, 0.045875f, -0.117133f, 0.040817f, -0.058896f, 0.139399f, -0.012650f, 0.013887f, 0.021402f, -0.040431f, -0.040502f, 0.014186f, -0.058704f, 0.088541f, -0.051138f, -0.064895f, -0.065345f, 0.092583f, 0.031849f, 0.053740f, -0.011379f, 0.053691f, 0.054753f, -0.055110f, -0.015445f, -0.051093f, -0.026538f, 0.096497f, 0.068705f, 0.009271f, 0.019199f, -0.145466f, 0.100431f, 0.131448f, 0.015606f, -0.010266f, -0.024392f, -0.077907f, 0.113770f, -0.006256f, 0.008181f, -0.021931f, 0.003804f, -0.049039f, 0.106528f, -0.024936f, 0.052194f, 0.008638f, -0.017868f, -0.005771f, 0.102643f, -0.056013f, 0.050854f, 0.017216f, -0.042794f, 0.006452f, -0.013385f, 0.028629f, 0.008673f, 0.041837f, -0.016662f, 0.004839f, 0.008366f, 0.000048f, 0.041549f, 0.070708f, -0.021050f, -0.003012f, 0.008615f, 0.039126f, 0.011622f, -0.053350f, -0.035588f, 0.076576f, 0.015416f, 0.037891f, -0.073901f, -0.088875f, 0.083338f, 0.055604f, 0.026447f, -0.005648f, -0.068726f, -0.000756f, 0.012288f, -0.103395f, 0.070737f, -0.073532f, 0.008932f, -0.033883f, 0.027301f, -0.002854f, 0.038901f, -0.006258f, - -0.033649f, 0.057959f, -0.020352f, -0.008107f, 0.008916f, -0.024329f, -0.021143f, 0.066914f, -0.015788f, -0.009187f, -0.007835f, -0.003432f, 0.030701f, -0.023406f, 0.007231f, -0.017125f, 0.015325f, -0.014950f, -0.011402f, -0.035884f, 0.052490f, -0.032413f, 0.017404f, 0.008432f, 0.036364f, -0.040847f, 0.009137f, -0.016695f, 0.041248f, 0.005434f, 0.003270f, 0.032665f, 0.009715f, -0.054088f, -0.008016f, -0.009253f, 0.015017f, 0.023718f, 0.019785f, -0.049164f, 0.021043f, -0.037131f, 0.026255f, -0.021152f, 0.005559f, -0.012122f, 0.025916f, -0.010118f, 0.007485f, -0.054993f, 0.012969f, 0.026774f, -0.025262f, 0.025062f, 0.003376f, 0.009249f, 0.015544f, -0.022136f, 0.037987f, 0.015071f, -0.002192f, -0.011910f, 0.018429f, -0.011525f, 0.034448f, -0.028821f, -0.008679f, -0.027425f, 0.035668f, -0.035284f, 0.032391f, -0.029397f, 0.039402f, -0.033490f, 0.020630f, -0.033014f, 0.028964f, -0.002178f, 0.002947f, -0.009480f, 0.001498f, -0.005660f, -0.005176f, -0.010069f, 0.017182f, 0.006879f, -0.002447f, 0.005785f, -0.005334f, -0.009177f, 0.017253f, 0.002804f, 0.006503f, -0.011060f, 0.000625f, 0.017458f, - -0.020031f, -0.004718f, 0.011529f, 0.000416f, -0.006033f, -0.012696f, 0.031308f, -0.009766f, -0.015899f, 0.008337f, 0.002750f, -0.004814f, 0.003267f, -0.001634f, 0.002975f, -0.005173f, 0.004421f, -0.009079f, 0.015312f, -0.012582f, 0.017669f, 0.007940f, -0.043085f, 0.086971f, 0.007233f, 0.010913f, -0.034825f, -0.025660f, -0.055277f, 0.037008f, -0.015537f, -0.011314f, -0.024049f, -0.000979f, -0.021447f, -0.002703f, -0.002874f, 0.009671f, 0.010810f, -0.001746f, -0.002621f, -0.015750f, 0.014585f, 0.013638f, -0.013082f, 0.006093f, -0.029629f, 0.011738f, 0.005689f, -0.005228f, -0.004656f, -0.009920f, 0.009353f, 0.002023f, -0.021124f, -0.005709f, -0.006244f, -0.017529f, 0.028599f, 0.002956f, -0.018383f, 0.002751f, -0.007250f, 0.024929f, -0.008739f, -0.011731f, 0.004771f, -0.014953f, 0.029082f, 0.000791f, -0.016196f, 0.004568f, -0.006646f, 0.014211f, -0.018464f, -0.003694f, 0.005989f, -0.006730f, 0.012733f, -0.007340f, 0.003633f, 0.005766f, -0.016665f, 0.002277f, 0.016409f, -0.025245f, -0.001732f, 0.007605f, -0.023468f, 0.042571f, -0.039063f, 0.019419f, 0.006972f, -0.022310f, 0.043979f, -0.030015f, - 0.006995f, 0.005586f, -0.018711f, 0.014487f, -0.007692f, -0.014412f, 0.013975f, -0.017163f, 0.011064f, -0.007904f, -0.005884f, 0.012631f, -0.010615f, 0.004041f, -0.004351f, -0.000157f, 0.002393f, -0.005789f, 0.002628f, -0.000345f, -0.005701f, 0.011946f, -0.010269f, 0.008898f, 0.000255f, -0.008399f, 0.008113f, -0.014797f, -0.001502f, 0.003871f, -0.002510f, -0.002058f, 0.002009f, -0.007701f, 0.009337f, -0.004794f, -0.003424f, 0.000984f, 0.000902f, -0.006010f, -0.000982f, -0.003478f, 0.003179f, 0.004711f, -0.006836f, 0.005888f, -0.006529f, -0.001266f, 0.006166f, -0.004673f, 0.020324f, -0.093170f, -0.215098f, 0.056455f, 0.199125f, 0.168356f, 0.225905f, -0.111348f, -0.144298f, -0.217006f, -0.221800f, 0.015274f, 0.165390f, 0.182606f, 0.200034f, 0.066541f, -0.043509f, -0.158666f, -0.262704f, -0.143913f, 0.066854f, 0.103570f, 0.175241f, 0.132848f, 0.036311f, -0.023510f, -0.055323f, -0.131570f, -0.085247f, -0.081108f, -0.014848f, 0.069383f, 0.106335f, 0.056002f, 0.070999f, 0.035941f, -0.039958f, -0.006194f, -0.085480f, -0.118986f, -0.020338f, -0.027714f, 0.021023f, 0.112351f, 0.064743f, 0.055798f, - 0.016500f, -0.042012f, -0.043281f, -0.037269f, -0.061613f, -0.016095f, 0.002765f, 0.026498f, 0.032287f, 0.053769f, 0.015348f, -0.001836f, -0.027085f, -0.049955f, -0.004244f, 0.018059f, 0.018517f, 0.031552f, -0.007997f, -0.025059f, -0.012016f, -0.025093f, -0.019693f, 0.005410f, 0.014208f, 0.040399f, 0.034254f, 0.032739f, 0.001936f, -0.017499f, -0.065515f, -0.060906f, -0.024795f, 0.003951f, 0.050695f, 0.054372f, 0.022461f, 0.023080f, -0.002530f, -0.043773f, -0.026768f, -0.003123f, -0.010221f, 0.002393f, 0.004664f, 0.010575f, 0.008853f, -0.005628f, -0.014251f, 0.008496f, 0.013259f, 0.010866f, 0.011316f, -0.000995f, -0.008183f, -0.005101f, -0.022186f, -0.009131f, -0.012218f, -0.020898f, 0.012440f, 0.030408f, 0.035507f, 0.011761f, 0.012846f, -0.006885f, -0.008231f, -0.031743f, -0.047117f, -0.018185f, 0.005463f, 0.014752f, 0.018393f, 0.038695f, 0.036047f, 0.017444f, -0.014199f, -0.030285f, -0.034079f, -0.031986f, -0.023570f, -0.001620f, 0.028771f, 0.044395f, 0.035299f, 0.010190f, -0.016667f, -0.020152f, -0.019996f, -0.011676f, -0.007575f, -0.008782f, 0.008804f, 0.020289f, 0.015094f, 0.003186f, - -0.002527f, -0.001637f, -0.005110f, -0.006020f, -0.008297f, -0.003786f, 0.005035f, 0.004001f, 0.002673f, 0.002685f, 0.002606f, 0.001782f, -0.003517f, -0.003687f, -0.000575f, 0.000225f, -0.000056f, -0.000117f} - }, - { - {-0.010320f, -0.009100f, 0.011321f, -0.002316f, 0.009039f, 0.002637f, 0.013444f, -0.003134f, -0.006956f, -0.004792f, 0.008213f, 0.000228f, -0.002991f, -0.000797f, 0.009287f, -0.002474f, 0.001684f, 0.003258f, -0.006243f, -0.004751f, -0.002037f, 0.001712f, -0.006480f, 0.001645f, 0.001311f, -0.007506f, -0.002446f, -0.004492f, 0.000627f, -0.003283f, 0.001192f, 0.012236f, 0.006266f, -0.003584f, 0.000572f, -0.005817f, 0.004450f, -0.001569f, 0.007221f, -0.015015f, -0.001661f, 0.002316f, -0.005357f, 0.000955f, 0.007260f, 0.005546f, -0.006773f, -0.005005f, -0.005449f, -0.001017f, -0.004322f, -0.002194f, -0.006613f, 0.002509f, -0.000605f, -0.007636f, -0.003976f, -0.003089f, -0.000412f, 0.001563f, -0.001694f, -0.000802f, 0.003251f, 0.001288f, -0.003629f, 0.001875f, 0.008094f, -0.004182f, -0.001109f, -0.008748f, -0.003363f, -0.000692f, 0.003583f, -0.003707f, 0.001017f, 0.001459f, 0.001180f, 0.002804f, -0.006784f, -0.000242f, -0.003839f, 0.003184f, -0.002470f, -0.006527f, -0.001887f, -0.000223f, -0.000148f, -0.002895f, -0.003062f, 0.003149f, -0.001464f, -0.000604f, 0.001139f, 0.001830f, 0.000054f, -0.000448f, - 0.000327f, 0.001079f, 0.000040f, -0.000745f, 0.001413f, 0.000237f, -0.001294f, -0.001179f, 0.001318f, -0.000505f, 0.000458f, -0.000889f, 0.001188f, -0.001152f, -0.000762f, -0.000213f, -0.000276f, 0.000403f, 0.014044f, -0.005234f, 0.004579f, 0.011744f, -0.009502f, -0.010722f, -0.001561f, -0.002670f, -0.000111f, 0.005986f, 0.003349f, -0.014912f, 0.002353f, -0.008553f, -0.011757f, -0.000752f, 0.004343f, 0.004679f, -0.003819f, -0.000493f, -0.001234f, 0.006417f, -0.001303f, 0.005277f, -0.002438f, 0.000618f, 0.001184f, 0.001609f, -0.007432f, 0.003142f, 0.005799f, -0.002703f, 0.007383f, -0.004071f, -0.000772f, -0.009188f, 0.006564f, 0.001650f, -0.002396f, -0.007125f, -0.007030f, -0.003205f, -0.002380f, 0.003569f, -0.000745f, 0.003082f, 0.003082f, -0.006321f, 0.003974f, -0.008492f, 0.003074f, 0.004947f, 0.009411f, 0.009030f, -0.007746f, 0.003859f, -0.000461f, -0.002056f, 0.005526f, -0.004188f, -0.004962f, -0.003761f, 0.004513f, 0.002230f, 0.005872f, -0.005800f, 0.008823f, -0.002849f, -0.000406f, 0.002647f, 0.001495f, 0.005154f, -0.003861f, 0.007343f, 0.009310f, 0.016220f, 0.007572f, 0.005159f, - -0.009538f, -0.001753f, -0.006210f, -0.004524f, 0.005936f, -0.000775f, 0.007325f, 0.002975f, -0.000535f, -0.001457f, -0.001220f, 0.004204f, -0.003141f, 0.003352f, 0.004013f, -0.003133f, 0.001945f, 0.001449f, 0.000468f, 0.002395f, -0.001435f, -0.000446f, -0.003092f, -0.017182f, -0.018490f, 0.002111f, -0.001514f, 0.004401f, 0.004108f, 0.012217f, 0.005529f, 0.005838f, 0.002961f, -0.005970f, 0.002310f, 0.015434f, -0.010304f, -0.001151f, 0.000485f, 0.012392f, 0.007460f, 0.001733f, 0.005503f, -0.000972f, 0.004254f, 0.005717f, 0.012705f, 0.007043f, 0.007140f, 0.003840f, 0.003069f, 0.006197f, 0.002258f, -0.008838f, 0.005448f, 0.007318f, -0.002583f, 0.005325f, 0.007032f, -0.002434f, 0.002227f, 0.008774f, 0.003259f, -0.002097f, 0.003170f, 0.008955f, -0.000434f, -0.000082f, -0.001738f, 0.002470f, 0.008402f, -0.002458f, -0.004697f, 0.002438f, -0.002875f, 0.004445f, 0.005285f, -0.006218f, 0.001368f, -0.004010f, 0.000353f, 0.002573f, 0.007078f, 0.005821f, -0.014802f, -0.000012f, 0.007293f, -0.003755f, -0.006152f, 0.000854f, 0.001166f, 0.007326f, -0.000580f, -0.015802f, -0.006887f, 0.005147f, - -0.004369f, 0.007478f, -0.002042f, 0.000064f, 0.001924f, 0.009373f, 0.005895f, 0.003989f, -0.004781f, 0.007703f, -0.000889f, 0.004728f, 0.002343f, 0.000954f, 0.001640f, 0.001625f, -0.000088f, -0.001204f, 0.001060f, -0.000640f, -0.003806f, -0.001603f, -0.001547f, -0.000463f, -0.000853f, 0.000011f, -0.001128f, -0.002752f, 0.001412f, 0.000609f, -0.001380f, 0.000339f, 0.002643f, 0.001934f, 0.000935f, -0.000347f, -0.000408f, -0.000255f, -0.000109f, 0.002496f, -0.031272f, 0.004404f, 0.003249f, 0.014613f, -0.000547f, 0.011414f, 0.005866f, 0.002921f, -0.018319f, 0.000043f, -0.000262f, -0.014210f, 0.002298f, 0.010653f, 0.002040f, -0.000188f, -0.001324f, -0.005659f, -0.006490f, 0.002921f, 0.004215f, -0.000487f, 0.002818f, 0.003287f, 0.012797f, 0.001482f, 0.005677f, 0.005983f, -0.006687f, 0.001466f, -0.001564f, -0.001832f, -0.000841f, 0.004725f, -0.000714f, -0.003185f, -0.005109f, -0.003048f, 0.001653f, -0.009080f, -0.006452f, 0.003852f, -0.007227f, 0.002385f, -0.011880f, -0.014219f, -0.003623f, 0.017628f, -0.004647f, -0.001020f, 0.010401f, 0.003502f, 0.000774f, 0.011137f, -0.001569f, 0.001262f, - -0.001405f, 0.003279f, 0.007150f, -0.002777f, -0.011113f, 0.007122f, -0.006478f, -0.012319f, -0.004914f, -0.003432f, -0.000012f, 0.004557f, 0.013362f, 0.000111f, -0.000134f, -0.005209f, -0.000496f, 0.007904f, -0.003729f, -0.004055f, 0.009529f, -0.008030f, -0.000620f, 0.004382f, -0.009747f, -0.001888f, -0.003380f, -0.003276f, 0.001087f, -0.005199f, -0.007354f, 0.000474f, 0.004561f, -0.002099f, -0.003175f, -0.004145f, -0.004212f, -0.000568f, 0.003039f, 0.001390f, -0.000416f, -0.001212f, -0.003278f, 0.000176f, -0.001098f, -0.003981f, -0.005886f, -0.005002f, -0.000070f, -0.000625f, 0.002378f, -0.003887f, -0.000188f, -0.000550f, 0.001893f, -0.000286f, 0.000813f, 0.027881f, 0.000927f, -0.001678f, -0.010555f, -0.006067f, 0.014720f, -0.005940f, 0.011496f, 0.009893f, -0.011203f, -0.001815f, 0.008626f, -0.006267f, -0.003014f, -0.002923f, -0.004050f, 0.001861f, 0.003109f, 0.000541f, 0.005397f, -0.002433f, 0.000866f, 0.002042f, -0.002231f, -0.005261f, -0.005476f, -0.006200f, 0.000520f, 0.007268f, 0.003185f, -0.006121f, 0.000601f, 0.002879f, 0.013871f, -0.004081f, 0.012421f, -0.011263f, 0.005142f, 0.008954f, - -0.005859f, -0.003575f, -0.011473f, 0.005457f, -0.000076f, -0.008055f, 0.008046f, -0.009992f, 0.011276f, -0.000589f, 0.015943f, 0.003681f, 0.001779f, 0.003873f, 0.006668f, 0.003559f, -0.005090f, 0.007871f, -0.001409f, -0.008345f, -0.013047f, -0.003540f, 0.005612f, -0.006539f, -0.004205f, 0.005140f, -0.007270f, 0.014396f, -0.013763f, -0.000040f, 0.009302f, -0.007865f, -0.003072f, -0.014472f, -0.001022f, -0.005654f, -0.003116f, -0.004327f, 0.012611f, 0.004961f, 0.001345f, 0.000542f, 0.010890f, 0.001097f, -0.000860f, 0.008699f, 0.007209f, 0.006530f, 0.013515f, -0.002842f, 0.001384f, -0.003761f, 0.003872f, 0.004459f, 0.000979f, 0.001325f, -0.002194f, -0.000063f, -0.003136f, -0.001576f, 0.000390f, 0.001245f, 0.002217f, -0.001030f, -0.000389f, 0.004348f, 0.002089f, -0.001586f, 0.008416f, -0.000427f, -0.001990f, -0.003393f, -0.002156f, 0.003083f, -0.002778f, 0.000315f, -0.000262f, -0.002895f, 0.001376f, 0.000921f, -0.000707f, 0.002140f, 0.002289f, -0.002191f, 0.002373f, 0.013457f, 0.023816f, -0.006949f, -0.010353f, 0.002739f, -0.004219f, 0.006576f, 0.021685f, 0.000145f, -0.004973f, 0.006889f, - 0.003747f, 0.006428f, 0.003909f, -0.011783f, 0.000462f, -0.010515f, 0.005890f, 0.005103f, 0.003125f, 0.019825f, -0.000923f, 0.014783f, -0.000363f, -0.000352f, 0.004523f, -0.000112f, 0.015574f, 0.002069f, 0.009818f, -0.003604f, 0.013291f, -0.005968f, 0.007102f, 0.026283f, -0.004266f, -0.006621f, 0.018553f, 0.003909f, 0.012099f, -0.000284f, -0.011484f, 0.003601f, -0.006611f, 0.007950f, -0.013842f, -0.001845f, -0.007177f, 0.007838f, -0.001142f, 0.001625f, 0.014346f, -0.006944f, -0.014350f, 0.004040f, -0.001205f, -0.000668f, 0.011675f, 0.002261f, 0.001695f, -0.005238f, -0.009425f, -0.010021f, -0.003316f, -0.008272f, -0.006218f, 0.008587f, -0.004279f, -0.000806f, -0.003095f, 0.001019f, 0.000086f, 0.007666f, 0.004832f, -0.008759f, -0.012614f, -0.002950f, 0.000449f, 0.003499f, -0.003407f, -0.003097f, 0.010448f, 0.005942f, 0.005170f, 0.001521f, -0.008426f, -0.003906f, 0.004633f, 0.000210f, -0.002749f, 0.003717f, -0.001117f, 0.002271f, -0.002703f, 0.000234f, -0.001526f, -0.004797f, -0.005651f, -0.001503f, -0.004993f, 0.001348f, -0.000693f, 0.000509f, 0.003518f, -0.000909f, -0.002648f, 0.004265f, - 0.000978f, 0.002725f, 0.001653f, 0.000279f, -0.001518f, 0.002113f, -0.000462f, -0.000474f, -0.000089f, -0.000453f, 0.000253f, -0.000865f, 0.001257f, 0.002707f, -0.003231f, 0.000906f, -0.003821f, 0.000612f, -0.001809f, 0.032670f, -0.017148f, 0.011464f, 0.000448f, 0.005651f, -0.007889f, -0.006183f, -0.003593f, 0.007103f, 0.009151f, 0.001944f, -0.005013f, -0.009499f, 0.004967f, 0.009031f, -0.001765f, 0.002834f, -0.004831f, 0.009845f, 0.003651f, -0.018508f, -0.006075f, 0.005953f, -0.001076f, -0.007870f, -0.000368f, 0.008414f, -0.006175f, 0.002852f, -0.012028f, 0.007016f, 0.015223f, -0.006306f, 0.016102f, 0.000539f, -0.002927f, 0.010715f, -0.000458f, 0.000819f, 0.009704f, -0.020956f, 0.003151f, 0.006341f, 0.008917f, 0.006013f, 0.006967f, -0.009411f, -0.007283f, -0.000340f, 0.003345f, -0.010192f, 0.003369f, 0.009882f, 0.008888f, 0.003278f, 0.027128f, -0.008557f, -0.003397f, -0.012292f, -0.005258f, -0.008063f, -0.011286f, 0.013964f, 0.005835f, 0.013638f, -0.002131f, -0.021859f, 0.012722f, -0.007726f, 0.006993f, 0.006250f, 0.003055f, 0.003755f, -0.017249f, 0.020430f, 0.004467f, -0.009491f, - -0.016552f, -0.010391f, -0.010368f, 0.001435f, 0.008458f, -0.007725f, 0.000648f, 0.005183f, 0.004444f, -0.000008f, -0.003590f, 0.000833f, -0.000359f, 0.003210f, 0.003443f, 0.003679f, 0.002578f, 0.002426f, 0.001278f, -0.006037f, -0.005397f, 0.000245f, -0.001981f, 0.001952f, 0.002460f, -0.002816f, 0.003924f, -0.000969f, 0.001435f, 0.003223f, 0.001404f, 0.002497f, 0.000753f, -0.006421f, -0.000439f, -0.000104f, 0.002264f, 0.001644f, 0.000782f, -0.001468f, -0.001720f, 0.003443f, -0.001008f, 0.008414f, 0.001461f, 0.003627f, -0.039157f, -0.032963f, -0.030391f, 0.006781f, 0.006242f, 0.002544f, 0.001364f, -0.002170f, -0.002367f, 0.000813f, -0.005184f, -0.011028f, -0.007666f, -0.019305f, -0.008528f, -0.009371f, 0.011537f, -0.014839f, -0.006569f, -0.008401f, 0.002490f, 0.000168f, -0.003851f, 0.004327f, -0.001289f, -0.015407f, -0.000313f, 0.014135f, 0.001826f, -0.013744f, -0.012149f, 0.005308f, -0.004914f, 0.011863f, 0.008342f, -0.012986f, 0.012817f, 0.020232f, -0.016964f, -0.017376f, -0.009293f, 0.006382f, 0.016084f, -0.011460f, -0.011850f, 0.006085f, -0.006843f, 0.001251f, -0.001525f, -0.001477f, - -0.018454f, 0.003524f, 0.011171f, -0.005737f, 0.006396f, -0.009177f, -0.010912f, -0.010833f, -0.005362f, -0.018661f, 0.031958f, -0.006777f, -0.002158f, 0.005580f, 0.003476f, 0.006807f, 0.004352f, 0.009970f, 0.004552f, 0.008656f, 0.019780f, -0.025531f, 0.017863f, -0.006091f, -0.004855f, -0.000878f, -0.028495f, -0.001305f, 0.008719f, 0.000790f, 0.001123f, 0.007961f, 0.002913f, -0.000707f, 0.004737f, -0.009634f, 0.011153f, -0.004033f, -0.006494f, 0.006054f, -0.003950f, -0.003564f, 0.001141f, 0.004941f, -0.003814f, -0.006049f, 0.002057f, 0.004796f, 0.000188f, -0.002056f, -0.005273f, -0.002900f, 0.000727f, -0.007456f, -0.004982f, -0.002603f, 0.003555f, -0.001688f, 0.000267f, 0.003929f, 0.000067f, -0.007428f, -0.001692f, -0.006326f, -0.005625f, -0.005307f, -0.003276f, -0.005863f, 0.004963f, -0.001754f, 0.000326f, 0.010644f, -0.002124f, -0.003248f, -0.002881f, 0.005756f, 0.001444f, -0.001984f, -0.038506f, 0.029514f, 0.007820f, 0.006433f, -0.007129f, 0.028888f, -0.004547f, 0.013610f, -0.000041f, 0.012245f, -0.017194f, 0.006804f, 0.006746f, 0.002629f, -0.008459f, 0.025713f, -0.006972f, 0.007836f, - 0.005917f, 0.026686f, -0.018007f, -0.001175f, 0.007425f, -0.004645f, -0.013213f, 0.007970f, -0.012428f, 0.003210f, 0.003405f, -0.014601f, 0.005651f, 0.001190f, 0.000736f, 0.029349f, 0.018356f, -0.002465f, -0.012010f, -0.009395f, 0.006554f, -0.001570f, -0.017602f, 0.004988f, -0.001546f, 0.005176f, 0.013259f, 0.019517f, -0.013406f, 0.013268f, 0.006651f, -0.008812f, 0.006348f, 0.005097f, -0.013865f, -0.007515f, -0.008692f, 0.013967f, -0.015111f, -0.012850f, -0.034637f, -0.025397f, 0.007038f, -0.004784f, -0.004981f, -0.013361f, -0.026875f, 0.010292f, 0.002072f, -0.000813f, 0.013168f, 0.011194f, 0.015837f, 0.009383f, 0.003833f, -0.000475f, 0.002535f, 0.017877f, -0.013219f, 0.024488f, -0.009009f, -0.006968f, -0.022386f, 0.003551f, -0.004109f, -0.011433f, -0.002020f, 0.002708f, -0.005630f, 0.006504f, -0.002703f, 0.000265f, -0.002752f, -0.000909f, -0.002363f, -0.000561f, 0.004049f, 0.006400f, 0.000519f, 0.005281f, -0.005969f, -0.004264f, -0.003024f, 0.002189f, 0.004611f, -0.006107f, -0.002288f, -0.002857f, 0.000897f, -0.003417f, 0.002745f, -0.000634f, 0.002390f, 0.004031f, 0.000068f, -0.006510f, - 0.009184f, 0.008799f, 0.003678f, 0.000040f, -0.003961f, -0.000271f, -0.002062f, -0.000980f, 0.010387f, -0.046543f, 0.043063f, 0.030934f, -0.012615f, -0.010650f, 0.011629f, 0.000106f, 0.001060f, 0.020552f, 0.014547f, 0.000599f, -0.003025f, 0.008278f, -0.004774f, -0.002972f, 0.005803f, -0.009209f, 0.011573f, 0.007932f, -0.009611f, 0.012476f, -0.001335f, 0.003367f, -0.000900f, -0.020510f, -0.001136f, 0.014936f, 0.015486f, 0.006079f, 0.006640f, 0.008304f, -0.009546f, -0.012083f, 0.005232f, 0.009308f, -0.000377f, -0.004660f, -0.010528f, 0.004388f, -0.003079f, 0.013194f, 0.015538f, -0.001725f, 0.017910f, -0.009300f, 0.019959f, 0.010817f, 0.024053f, 0.001747f, 0.003526f, -0.006909f, -0.009806f, -0.001849f, 0.018466f, 0.030141f, 0.001844f, 0.022978f, -0.009882f, -0.022014f, 0.002967f, 0.008335f, -0.019237f, 0.020089f, -0.006614f, 0.007114f, -0.042402f, -0.018227f, -0.000250f, -0.010174f, 0.008242f, 0.014053f, 0.029496f, 0.006164f, 0.000251f, -0.014409f, -0.025576f, 0.006637f, 0.001137f, -0.021463f, 0.008846f, 0.004682f, -0.015475f, -0.004377f, 0.003747f, 0.017016f, 0.000426f, 0.005167f, - 0.005240f, 0.008885f, 0.007312f, -0.014341f, 0.005163f, -0.000221f, -0.002813f, 0.000349f, -0.000661f, -0.002270f, 0.006162f, 0.005820f, -0.005944f, -0.002432f, -0.000033f, 0.004168f, -0.002245f, 0.005930f, 0.000932f, 0.004332f, 0.003883f, -0.004642f, 0.003585f, 0.004344f, 0.011140f, 0.001051f, 0.006390f, 0.006981f, 0.001772f, 0.008189f, 0.003017f, 0.004247f, 0.001934f, 0.001075f, 0.003014f, 0.009615f, -0.004024f, -0.008767f, 0.002218f, 0.011461f, -0.018087f, 0.031060f, -0.013327f, 0.003734f, 0.023218f, 0.024028f, -0.001774f, -0.013806f, -0.007404f, -0.007321f, 0.001782f, -0.017847f, -0.014157f, 0.014949f, 0.003757f, 0.009611f, 0.011714f, 0.013844f, -0.006189f, 0.008981f, -0.003393f, 0.010754f, 0.044796f, 0.010551f, -0.021592f, 0.020972f, 0.024086f, 0.001050f, -0.003971f, 0.001273f, -0.011912f, -0.016423f, -0.008594f, 0.024561f, 0.016498f, 0.013601f, 0.020892f, 0.004235f, -0.003596f, -0.009603f, -0.026529f, 0.012296f, 0.013997f, 0.007770f, -0.004202f, -0.003285f, -0.009151f, 0.003691f, 0.021601f, 0.014884f, -0.024747f, 0.016349f, -0.020864f, 0.021999f, 0.004698f, 0.008236f, - 0.009837f, -0.003681f, -0.011792f, -0.003589f, 0.008858f, 0.038062f, -0.006059f, 0.019012f, -0.008453f, -0.017213f, 0.020212f, 0.018192f, 0.004619f, 0.004161f, 0.018330f, 0.006410f, 0.001082f, -0.002091f, -0.011651f, -0.003595f, -0.017093f, 0.005490f, -0.013270f, -0.006646f, 0.026978f, -0.001429f, 0.000736f, 0.000533f, 0.012446f, -0.004068f, 0.003716f, 0.008233f, 0.012534f, 0.013544f, 0.011300f, 0.004423f, 0.005939f, 0.006191f, 0.011355f, -0.001759f, -0.009058f, 0.012826f, 0.005103f, 0.007070f, 0.007797f, 0.000325f, -0.000899f, 0.000799f, -0.005652f, 0.003521f, 0.012174f, 0.001363f, 0.001569f, -0.002565f, -0.004513f, 0.010159f, 0.010941f, 0.002118f, 0.019389f, -0.002410f, 0.008372f, 0.014829f, 0.000958f, 0.004114f, -0.002137f, -0.005684f, 0.001540f, 0.003219f, 0.005382f, 0.010679f, 0.004673f, 0.008000f, 0.002989f, 0.001916f, 0.011139f, 0.015842f, -0.007995f, 0.016101f, 0.020569f, -0.023590f, 0.015888f, 0.009194f, -0.005702f, 0.001471f, 0.010931f, -0.009872f, -0.020839f, 0.031305f, 0.006767f, 0.005995f, 0.005851f, 0.018582f, 0.005416f, -0.018700f, 0.019979f, -0.026817f, - -0.031329f, 0.002786f, 0.003770f, -0.017300f, -0.005670f, -0.051240f, -0.036280f, -0.027322f, -0.009231f, -0.028109f, -0.013841f, 0.010662f, -0.025269f, 0.017734f, 0.016312f, -0.020582f, 0.026577f, 0.014178f, -0.005198f, -0.002674f, -0.013752f, 0.000597f, -0.024558f, 0.053895f, 0.015761f, 0.008399f, -0.026899f, 0.006553f, -0.008304f, 0.035740f, -0.007187f, -0.000931f, -0.032617f, 0.031921f, 0.002138f, 0.012502f, 0.010362f, 0.018617f, 0.010554f, -0.007228f, 0.010675f, -0.015896f, 0.016138f, -0.005834f, 0.009513f, -0.025446f, 0.057634f, 0.008792f, -0.026716f, 0.014501f, 0.016836f, 0.013156f, 0.019619f, 0.016739f, -0.025945f, 0.020693f, -0.000508f, 0.016687f, -0.013124f, 0.004960f, -0.033386f, 0.014047f, 0.014565f, 0.004226f, -0.008006f, -0.025260f, -0.001625f, 0.017291f, -0.022409f, -0.003061f, -0.002635f, -0.000108f, 0.006874f, 0.005203f, -0.005037f, 0.009716f, -0.000548f, -0.004763f, 0.007699f, 0.005906f, -0.006998f, -0.005661f, -0.014626f, -0.000918f, -0.013605f, 0.008185f, 0.002309f, 0.001367f, 0.010743f, 0.016524f, 0.010502f, 0.007774f, 0.005280f, -0.005879f, -0.002271f, 0.000170f, - -0.010609f, -0.008791f, -0.002410f, -0.003561f, 0.005787f, 0.013419f, 0.004273f, 0.008488f, -0.001893f, -0.000166f, -0.041657f, 0.011692f, -0.005702f, -0.004048f, 0.024737f, -0.004543f, -0.004211f, 0.002408f, 0.022148f, -0.005758f, 0.012920f, -0.010804f, -0.012743f, -0.016284f, -0.020652f, 0.035894f, 0.018715f, 0.013032f, -0.011267f, -0.032852f, -0.040324f, 0.019431f, 0.013384f, -0.014296f, 0.009617f, -0.009709f, 0.000967f, 0.035729f, 0.015605f, -0.010103f, 0.019268f, -0.006480f, 0.010002f, -0.011872f, 0.012095f, -0.026348f, -0.038760f, -0.015037f, -0.017287f, -0.002911f, 0.045373f, -0.036900f, 0.021361f, 0.012303f, 0.009278f, -0.008127f, 0.017864f, 0.008010f, -0.035452f, -0.045063f, -0.016045f, -0.020531f, 0.051075f, 0.037064f, -0.012363f, -0.022732f, -0.001893f, -0.023327f, -0.004933f, 0.037222f, 0.034435f, 0.019582f, -0.030365f, 0.006612f, -0.023719f, 0.037322f, 0.017704f, -0.003885f, 0.000133f, 0.012606f, -0.022015f, 0.005011f, 0.032882f, 0.017924f, -0.029743f, 0.032381f, -0.016493f, 0.019380f, 0.051307f, 0.019658f, -0.012081f, -0.015121f, 0.043910f, 0.004918f, -0.002676f, -0.019869f, - 0.007736f, -0.009323f, 0.002825f, -0.005787f, -0.001037f, -0.001215f, -0.021872f, 0.002849f, -0.002725f, -0.006144f, 0.009617f, -0.001603f, -0.007739f, 0.001490f, -0.004601f, 0.001315f, -0.005711f, -0.008418f, 0.007577f, -0.009341f, -0.006045f, 0.004581f, 0.011414f, -0.000461f, 0.008059f, 0.006760f, -0.001523f, 0.000079f, -0.011002f, 0.001623f, 0.003718f, -0.009198f, 0.012486f, 0.006286f, -0.007628f, -0.004991f, -0.005328f, -0.002245f, -0.012287f, 0.007392f, 0.011633f, 0.000666f, -0.009152f, -0.005176f, 0.006038f, -0.002517f, 0.005803f, 0.008348f, 0.000584f, 0.003168f, -0.033096f, -0.012958f, 0.055449f, 0.025678f, 0.031958f, 0.007806f, -0.046051f, 0.014246f, -0.037360f, 0.024591f, 0.069300f, 0.024647f, 0.043485f, -0.019558f, 0.012566f, 0.020210f, -0.002072f, 0.005227f, -0.017761f, 0.004548f, 0.027262f, 0.001457f, -0.007249f, -0.024581f, 0.013559f, 0.010183f, -0.025050f, 0.013099f, -0.009502f, 0.019208f, 0.027406f, 0.029142f, 0.035100f, 0.003552f, -0.027188f, 0.007391f, 0.016595f, -0.000273f, 0.047784f, 0.004238f, -0.054882f, -0.034414f, 0.015643f, -0.013933f, -0.064774f, 0.002391f, - 0.027640f, 0.010233f, 0.002919f, -0.005854f, 0.034153f, -0.026774f, -0.033226f, -0.006379f, -0.011882f, -0.032320f, -0.001774f, 0.002414f, -0.018828f, -0.027821f, -0.017045f, 0.001422f, 0.004057f, -0.040207f, 0.012045f, -0.016733f, 0.009811f, 0.046524f, -0.006324f, -0.016101f, 0.032407f, -0.005576f, 0.026986f, -0.025479f, 0.017435f, 0.001200f, -0.029533f, -0.032939f, 0.059584f, 0.005862f, 0.008068f, 0.002889f, 0.000086f, 0.059785f, 0.048817f, 0.015491f, -0.004468f, 0.023489f, -0.011446f, 0.008068f, 0.013986f, -0.002504f, 0.018373f, 0.007970f, 0.005374f, -0.027123f, 0.016218f, 0.008772f, -0.001496f, 0.002561f, -0.009179f, 0.007927f, 0.021107f, -0.003394f, -0.006807f, -0.011599f, -0.012729f, 0.012776f, 0.014990f, 0.000914f, 0.000105f, -0.011419f, -0.012330f, 0.002322f, -0.017724f, 0.002638f, -0.005864f, 0.018745f, 0.006688f, 0.000924f, -0.011692f, -0.020426f, -0.004618f, -0.009846f, -0.013778f, 0.008113f, 0.008349f, 0.016108f, 0.046884f, 0.006094f, -0.064207f, -0.029042f, 0.039844f, -0.057425f, 0.032639f, -0.054345f, 0.004422f, -0.008677f, -0.078600f, -0.010354f, 0.035386f, 0.072348f, - 0.023046f, -0.010506f, 0.017568f, -0.027743f, -0.009301f, -0.063107f, -0.003508f, -0.042861f, -0.006171f, -0.009381f, -0.029624f, -0.031431f, -0.010438f, 0.018071f, -0.028471f, 0.019627f, 0.036133f, -0.037233f, 0.013503f, 0.012030f, 0.006396f, -0.039624f, -0.006050f, -0.000406f, -0.041512f, 0.010831f, 0.052879f, -0.004010f, -0.076767f, 0.027194f, -0.046367f, -0.118365f, 0.033383f, -0.048948f, -0.060876f, 0.003249f, -0.027876f, 0.008456f, 0.020927f, -0.011659f, 0.031171f, -0.026048f, 0.027229f, -0.021491f, -0.052975f, 0.000318f, 0.037907f, 0.036348f, -0.068837f, 0.010135f, -0.008233f, -0.051237f, -0.013706f, -0.012689f, 0.089172f, 0.044527f, 0.052309f, 0.023840f, 0.022750f, 0.055193f, 0.079277f, -0.018090f, -0.037560f, -0.040979f, 0.007197f, -0.050914f, -0.015667f, 0.026370f, 0.042827f, 0.006026f, 0.003890f, 0.037193f, -0.008609f, -0.021094f, -0.028706f, 0.022411f, 0.025413f, 0.024972f, 0.005830f, 0.028646f, 0.011878f, -0.017559f, -0.003901f, -0.017007f, 0.026123f, 0.004225f, -0.003054f, -0.029292f, 0.008889f, 0.023484f, 0.002578f, 0.000449f, 0.022941f, -0.018306f, -0.012248f, 0.012702f, - 0.001295f, -0.009236f, -0.017636f, -0.005627f, 0.026995f, -0.001300f, -0.059768f, -0.005546f, -0.001478f, -0.013688f, -0.011654f, -0.015781f, -0.009676f, 0.013036f, 0.011657f, 0.006946f, 0.004138f, -0.009814f, -0.012399f, 0.103780f, 0.112191f, -0.065862f, -0.026093f, 0.050089f, -0.022725f, 0.020204f, -0.031256f, 0.009349f, -0.032114f, -0.060152f, 0.081958f, 0.011949f, 0.025738f, 0.021078f, 0.007675f, 0.010765f, 0.002463f, 0.016608f, 0.020365f, -0.058206f, -0.047985f, -0.042041f, -0.039690f, -0.029734f, -0.018739f, -0.015533f, -0.031205f, -0.017680f, -0.026446f, 0.030073f, 0.022868f, 0.011563f, -0.014573f, 0.006110f, -0.061585f, -0.030944f, 0.016754f, -0.055970f, -0.005173f, 0.027242f, 0.048321f, 0.007082f, 0.009366f, -0.020672f, -0.036141f, -0.042630f, 0.034249f, -0.004635f, 0.033908f, -0.119527f, 0.007468f, -0.013897f, 0.013764f, 0.073086f, 0.008979f, 0.012199f, 0.008250f, -0.021407f, -0.024615f, 0.000673f, -0.004856f, -0.067104f, 0.014404f, -0.024610f, 0.060200f, 0.004017f, -0.065944f, -0.089771f, -0.055775f, -0.011332f, -0.063039f, -0.061734f, -0.038299f, 0.043545f, -0.011273f, -0.042514f, - -0.057324f, 0.047915f, -0.006157f, 0.028355f, -0.032248f, 0.017401f, 0.047246f, -0.031367f, -0.045481f, -0.019103f, -0.023480f, 0.049411f, 0.010422f, -0.021661f, 0.019478f, 0.014500f, 0.043006f, 0.026689f, 0.012528f, -0.038176f, -0.038043f, -0.008361f, 0.004477f, -0.009985f, 0.006902f, 0.026488f, -0.005771f, -0.002216f, -0.019303f, -0.014151f, -0.010515f, -0.020093f, -0.003762f, 0.008273f, 0.012187f, 0.062456f, 0.004212f, -0.015637f, -0.004918f, 0.008376f, 0.019572f, -0.001107f, 0.030963f, 0.012985f, 0.071417f, 0.011084f, -0.000471f, 0.002641f, 0.013130f, -0.019763f, -0.030702f, 0.116891f, -0.067756f, 0.044390f, 0.082837f, -0.039682f, 0.011799f, 0.066207f, -0.083665f, 0.003415f, 0.009497f, 0.040835f, -0.093836f, 0.005307f, 0.006450f, 0.030981f, -0.040877f, 0.000612f, 0.016959f, -0.055167f, 0.008353f, -0.004102f, -0.010199f, 0.030525f, -0.009010f, -0.008239f, 0.012991f, -0.007142f, -0.009270f, 0.029950f, -0.027755f, 0.008337f, -0.011359f, 0.007737f, -0.017734f, -0.009788f, -0.021658f, 0.000430f, 0.004375f, 0.058523f, 0.019552f, 0.028507f, -0.005769f, 0.000794f, 0.043422f, -0.001696f, - -0.016239f, 0.024416f, 0.018029f, -0.019367f, -0.056529f, 0.052080f, -0.056339f, 0.009397f, 0.027256f, 0.035762f, -0.055441f, 0.059544f, 0.095576f, -0.052007f, -0.096842f, 0.129985f, 0.046038f, -0.063933f, 0.029804f, -0.061536f, -0.076466f, -0.038021f, -0.013848f, -0.079860f, 0.064969f, -0.111395f, 0.033683f, 0.053460f, -0.044127f, -0.148978f, 0.141279f, -0.024337f, -0.036206f, 0.094244f, -0.093556f, 0.048653f, 0.080434f, -0.023846f, -0.021838f, 0.025145f, 0.027748f, -0.014835f, 0.010123f, 0.008462f, 0.025628f, -0.012318f, -0.009067f, 0.028716f, 0.000118f, 0.006626f, -0.002830f, 0.005597f, 0.022966f, 0.017105f, -0.002904f, -0.020080f, 0.033571f, 0.036365f, -0.006642f, -0.030767f, -0.003105f, 0.015577f, 0.003504f, 0.022524f, 0.000301f, 0.019751f, 0.008444f, 0.028841f, 0.021302f, 0.024284f, -0.035421f, 0.009471f, -0.000495f, 0.001773f, 0.000333f, -0.021404f, -0.038278f, 0.056648f, -0.008897f, -0.051707f, 0.019119f, 0.012994f, 0.005632f, -0.008202f, -0.035775f, -0.028384f, 0.064856f, -0.042913f, -0.034329f, -0.068453f, -0.031562f, 0.040546f, 0.031449f, -0.018329f, -0.022836f, 0.021553f, - 0.053785f, -0.023242f, 0.040555f, 0.048567f, -0.034619f, -0.005056f, 0.029638f, -0.007796f, -0.000268f, -0.009929f, 0.002475f, -0.049811f, 0.013496f, -0.011128f, 0.001555f, 0.011871f, -0.010128f, 0.010152f, -0.020759f, -0.041741f, -0.019832f, -0.072600f, 0.008940f, -0.000264f, -0.010944f, 0.013342f, 0.006782f, -0.004831f, -0.016650f, 0.029036f, 0.045922f, -0.048495f, 0.070629f, -0.008083f, 0.009325f, 0.010149f, 0.062421f, 0.028597f, 0.045646f, -0.057535f, -0.014360f, -0.010875f, 0.081412f, -0.076183f, -0.026106f, 0.037092f, -0.002855f, -0.087958f, 0.005842f, -0.018225f, -0.015133f, 0.040012f, 0.043855f, 0.002989f, -0.033100f, 0.070894f, -0.030010f, 0.118293f, 0.001464f, -0.055026f, -0.000173f, -0.009633f, -0.062250f, 0.118851f, 0.023810f, -0.017833f, -0.140904f, -0.070461f, 0.039584f, -0.051923f, -0.046739f, 0.055054f, -0.206495f, 0.005119f, 0.040599f, 0.029781f, -0.016773f, 0.057967f, -0.035590f, -0.004689f, 0.000205f, 0.030156f, -0.008653f, 0.006099f, 0.041078f, -0.002949f, -0.010428f, -0.013095f, -0.014850f, -0.000727f, 0.004567f, -0.002813f, -0.006271f, 0.026511f, -0.037259f, -0.008417f, - 0.004394f, 0.006145f, -0.022327f, -0.037778f, -0.009624f, -0.011638f, -0.005420f, -0.003199f, 0.007285f, -0.041893f, 0.003203f, 0.031687f, -0.019781f, 0.024223f, 0.018600f, -0.018275f, 0.001139f, -0.013384f, 0.005289f, 0.008898f, -0.019496f, 0.054795f, -0.026602f, -0.024572f, -0.031716f, 0.026523f, 0.035981f, 0.021964f, 0.089422f, -0.017183f, 0.020280f, -0.008527f, -0.046106f, 0.023151f, -0.029377f, -0.016536f, 0.018460f, 0.040129f, -0.042267f, 0.046233f, 0.005334f, -0.002298f, 0.094225f, -0.019102f, -0.010446f, 0.070640f, -0.045124f, 0.062407f, 0.026937f, -0.014752f, 0.024897f, 0.026308f, 0.058214f, 0.060541f, 0.017597f, -0.049094f, 0.102828f, -0.103109f, 0.003490f, 0.093891f, -0.050508f, 0.020821f, -0.011131f, -0.012127f, -0.108727f, 0.073874f, 0.019541f, 0.032815f, 0.034638f, -0.022554f, -0.054121f, -0.040664f, -0.032979f, 0.005186f, 0.103325f, 0.000734f, 0.081043f, -0.026926f, -0.062368f, 0.003464f, 0.023307f, -0.051195f, 0.083163f, 0.033860f, 0.040868f, 0.082162f, 0.053184f, -0.087844f, 0.033523f, -0.126015f, -0.155715f, 0.003292f, 0.131129f, 0.082261f, 0.010611f, -0.092737f, - -0.331353f, -0.060897f, 0.102463f, 0.117109f, 0.165935f, -0.008406f, -0.210432f, -0.118674f, -0.109622f, 0.168271f, 0.128602f, -0.023193f, -0.084090f, -0.049178f, -0.102261f, -0.013028f, 0.131747f, -0.012759f, 0.030820f, 0.022028f, -0.021603f, -0.047700f, 0.071803f, -0.029111f, 0.040059f, 0.029396f, -0.002724f, -0.066651f, 0.091438f, -0.036028f, -0.017264f, 0.026506f, 0.023727f, -0.049459f, 0.000826f, -0.015478f, -0.018671f, 0.006339f, -0.001778f, 0.036650f, -0.065392f, 0.034693f, -0.078700f, -0.012400f, -0.013120f, 0.093613f, 0.002789f, 0.025436f, -0.057107f, 0.029907f, -0.021469f, 0.041401f, 0.049469f, -0.023872f, -0.056800f, 0.020523f, 0.014720f, 0.047938f, 0.013443f, -0.081234f, 0.068225f, -0.051076f, -0.008836f, -0.033073f, 0.031710f, -0.037152f, -0.001581f, -0.003907f, -0.010079f, 0.007624f, 0.034937f, -0.036903f, 0.016238f, 0.002897f, -0.008544f, 0.000515f, 0.024637f, -0.031195f, -0.008534f, -0.004572f, 0.051169f, -0.051818f, 0.013742f, -0.022709f, 0.033907f, -0.037831f, -0.010763f, 0.012973f, -0.007329f, 0.007183f, -0.024476f, -0.004328f, 0.022129f, -0.006721f, 0.008548f, 0.007024f, - 0.004628f, 0.027689f, -0.025652f, 0.017376f, 0.019960f, 0.024722f, -0.003476f, -0.057329f, 0.007339f, 0.006830f, 0.023347f, 0.021353f, -0.004188f, 0.005744f, -0.009676f, -0.026044f, -0.004457f, 0.011982f, -0.004936f, 0.034862f, -0.028378f, -0.009351f, -0.056605f, 0.016934f, 0.006087f, -0.008884f, 0.012612f, 0.011083f, -0.000848f, -0.029181f, 0.009072f, 0.028601f, -0.005599f, -0.004115f, 0.011182f, -0.011473f, 0.021280f, -0.013102f, 0.003574f, -0.026774f, 0.012646f, 0.005132f, -0.004321f, -0.007282f, 0.015481f, -0.007370f, -0.011331f, -0.016112f, 0.016841f, -0.000610f, -0.008555f, -0.003542f, 0.016753f, -0.006573f, 0.007361f, -0.009239f, -0.005702f, -0.000785f, 0.000518f, -0.000077f, -0.009346f, 0.001117f, 0.000193f, -0.007687f, 0.007870f, -0.007285f, 0.021886f, 0.003611f, 0.002841f, -0.030321f, 0.008485f, -0.000478f, -0.012262f, 0.013934f, 0.025689f, -0.018560f, -0.004333f, -0.000559f, -0.013584f, 0.020618f, -0.003530f, 0.003092f, -0.013625f, 0.007236f, -0.003024f, 0.002700f, -0.008762f, -0.046267f, 0.112342f, 0.030662f, 0.027794f, -0.014797f, -0.035904f, -0.034531f, 0.009863f, 0.021860f, - 0.003483f, -0.001222f, -0.000078f, -0.016343f, -0.002945f, 0.007949f, -0.004310f, 0.003461f, -0.001719f, -0.016367f, -0.000820f, 0.008210f, 0.012860f, -0.011367f, 0.003182f, 0.008291f, -0.016348f, 0.026957f, -0.016292f, -0.014164f, -0.014121f, 0.003754f, 0.007887f, 0.012553f, -0.013587f, 0.017484f, -0.025047f, 0.016699f, 0.014840f, -0.010952f, -0.001119f, -0.000710f, -0.002862f, 0.013039f, -0.013923f, 0.004158f, -0.004439f, -0.017946f, 0.025578f, -0.014186f, -0.000467f, -0.010483f, -0.003294f, 0.017918f, -0.023248f, 0.009570f, 0.006462f, -0.010058f, 0.008557f, -0.019743f, 0.005768f, 0.008363f, -0.014736f, 0.000463f, 0.007929f, -0.013527f, 0.013697f, -0.018713f, 0.005228f, 0.019406f, -0.028237f, 0.008243f, -0.010791f, 0.002068f, 0.011091f, -0.008311f, -0.004324f, 0.002120f, 0.002411f, -0.001561f, 0.007922f, -0.005901f, -0.005215f, 0.004003f, -0.004665f, 0.002673f, -0.001808f, 0.003474f, 0.003111f, -0.004418f, 0.002264f, -0.000719f, 0.004079f, -0.003614f, -0.001088f, 0.002921f, 0.000057f, -0.002019f, -0.006600f, 0.004317f, 0.004315f, -0.000817f, -0.004580f, 0.004497f, -0.000269f, -0.001866f, - 0.004408f, -0.009172f, -0.001954f, 0.005468f, -0.006800f, 0.009992f, -0.006074f, 0.000650f, 0.016205f, -0.004538f, 0.011652f, -0.006465f, -0.000725f, 0.013143f, -0.009148f, 0.016812f, -0.086799f, -0.203621f, 0.057606f, 0.199284f, 0.137047f, 0.216704f, -0.120684f, -0.128460f, -0.175157f, -0.202756f, 0.004333f, 0.156398f, 0.161585f, 0.168699f, 0.033103f, -0.055778f, -0.110656f, -0.158816f, -0.134609f, 0.010461f, 0.104533f, 0.123993f, 0.111566f, 0.026676f, -0.030854f, -0.019282f, -0.087150f, -0.097480f, -0.041133f, -0.002680f, 0.037468f, 0.082153f, 0.040123f, 0.029783f, 0.041143f, -0.020581f, -0.048898f, -0.008031f, -0.078162f, -0.036686f, 0.000841f, 0.012375f, 0.059536f, 0.069317f, 0.006134f, -0.010538f, -0.006534f, -0.051205f, -0.013885f, -0.000749f, -0.010668f, 0.017683f, 0.034247f, -0.007341f, -0.002739f, -0.013484f, -0.021418f, 0.004355f, 0.002093f, -0.002371f, 0.038644f, 0.026140f, 0.009649f, -0.001021f, -0.036487f, -0.052758f, -0.041715f, 0.002974f, 0.039216f, 0.033650f, 0.044185f, 0.005977f, 0.001126f, 0.010018f, -0.054891f, -0.031266f, -0.025825f, -0.004728f, 0.042075f, 0.009484f, - 0.014100f, 0.039239f, -0.022692f, -0.033014f, -0.007702f, -0.005667f, 0.012151f, 0.014123f, 0.004404f, 0.007869f, 0.003437f, -0.020280f, -0.021001f, -0.005151f, -0.000031f, 0.015050f, 0.021805f, 0.007129f, -0.003108f, -0.004773f, -0.006236f, 0.005436f, -0.006150f, -0.025775f, -0.004065f, 0.006039f, 0.011907f, 0.025603f, 0.006221f, -0.005345f, -0.012340f, -0.021106f, -0.004632f, 0.002098f, 0.006851f, 0.012031f, 0.015044f, 0.011841f, -0.006100f, -0.018287f, -0.019268f, -0.016821f, -0.001943f, 0.008340f, 0.009243f, 0.024745f, 0.025411f, 0.012378f, -0.005501f, -0.031272f, -0.033072f, -0.015336f, -0.011594f, 0.011675f, 0.030861f, 0.022869f, 0.009893f, 0.000132f, -0.002447f, -0.004014f, -0.009422f, -0.015502f, -0.014897f, -0.006334f, 0.002246f, 0.006532f, 0.010442f, 0.015147f, 0.014493f, 0.005686f, -0.005294f, -0.011670f, -0.012142f, -0.007793f, -0.001710f, 0.001194f, 0.001018f, 0.000329f, 0.000141f}, - {-0.008192f, -0.005439f, 0.002300f, -0.002093f, -0.002582f, -0.003986f, 0.000979f, 0.007943f, -0.002541f, 0.000040f, 0.000817f, 0.013597f, -0.000262f, 0.002610f, -0.005584f, -0.003874f, -0.001383f, -0.003648f, -0.003925f, -0.003679f, -0.002502f, -0.003495f, -0.004624f, 0.003905f, 0.006463f, -0.003537f, 0.000987f, 0.000275f, -0.007326f, 0.000220f, -0.000159f, -0.005188f, 0.009817f, -0.005001f, 0.005583f, 0.002142f, -0.001503f, -0.005617f, -0.005201f, 0.005063f, -0.002625f, -0.001886f, -0.007752f, -0.001960f, -0.000719f, -0.003642f, 0.010351f, -0.002245f, -0.000651f, 0.004342f, -0.000755f, -0.008609f, -0.004432f, -0.007587f, -0.005108f, 0.011817f, -0.003318f, 0.013140f, -0.000056f, -0.000526f, -0.002382f, 0.001546f, 0.000549f, -0.007785f, -0.008320f, 0.006076f, 0.000687f, 0.004137f, -0.000561f, 0.004815f, 0.002941f, -0.007542f, -0.000053f, 0.002538f, 0.004075f, 0.000009f, 0.003439f, 0.006290f, -0.008361f, 0.002226f, 0.002146f, -0.004162f, -0.000005f, 0.001922f, 0.005994f, 0.003972f, -0.004184f, -0.001243f, -0.000231f, 0.001426f, 0.001904f, 0.001475f, 0.001566f, -0.001075f, 0.000812f, -0.002252f, - -0.001461f, -0.000011f, 0.003051f, 0.001367f, -0.000094f, -0.000196f, -0.002074f, 0.001240f, -0.000162f, -0.000684f, -0.000180f, 0.001107f, 0.000455f, 0.000802f, 0.001966f, -0.000630f, 0.000863f, 0.002393f, 0.017987f, -0.001348f, -0.002116f, -0.004543f, -0.009756f, -0.012047f, -0.011018f, 0.001286f, 0.009916f, 0.003505f, 0.013222f, 0.004579f, -0.005927f, 0.001645f, -0.015628f, -0.013228f, 0.006221f, -0.004614f, 0.008742f, -0.000763f, -0.006918f, -0.003420f, 0.017312f, 0.003905f, 0.007348f, -0.000282f, 0.005638f, -0.002525f, -0.002072f, 0.003468f, -0.002330f, -0.007490f, -0.000507f, 0.002810f, -0.000830f, -0.000403f, 0.011030f, 0.006842f, -0.011755f, 0.000319f, -0.007439f, 0.012489f, 0.007405f, 0.000569f, -0.004370f, -0.004495f, 0.005774f, 0.003242f, 0.009333f, -0.008572f, 0.014786f, 0.018129f, -0.004931f, 0.017665f, 0.000025f, 0.009281f, 0.005789f, -0.003209f, 0.003103f, 0.014168f, -0.001602f, -0.009480f, 0.008210f, 0.002682f, -0.000055f, -0.001048f, -0.001627f, 0.000653f, 0.008290f, -0.005246f, 0.003044f, 0.002258f, 0.004413f, -0.006783f, 0.007818f, 0.001847f, -0.000636f, 0.002505f, - 0.001180f, 0.000802f, -0.000281f, 0.001803f, 0.004615f, -0.003174f, 0.001890f, 0.001258f, 0.001969f, -0.002894f, 0.000256f, -0.004672f, 0.000868f, 0.002261f, -0.002680f, -0.001699f, 0.000673f, 0.001346f, 0.001581f, 0.000471f, 0.001443f, 0.000040f, 0.000069f, -0.015575f, -0.012184f, 0.003783f, -0.006911f, 0.004871f, -0.008628f, -0.012251f, -0.011317f, 0.001534f, -0.008460f, 0.007678f, 0.005633f, -0.010879f, -0.002254f, 0.004369f, 0.001013f, 0.005382f, -0.003215f, 0.005569f, 0.006896f, -0.009664f, 0.003061f, 0.003123f, -0.007742f, 0.004496f, 0.000780f, -0.009160f, 0.006754f, 0.006481f, -0.003253f, 0.007085f, 0.001013f, 0.005773f, 0.005261f, 0.002155f, -0.003436f, -0.000901f, -0.010936f, -0.003345f, -0.005439f, 0.005704f, 0.006055f, 0.002340f, -0.017514f, 0.003293f, 0.007377f, -0.004011f, 0.012310f, -0.010121f, -0.013357f, 0.000964f, -0.003963f, 0.004217f, -0.009535f, 0.017334f, -0.000913f, -0.005876f, 0.001705f, 0.000160f, 0.009905f, -0.000623f, -0.005773f, -0.000444f, -0.003918f, -0.005405f, -0.006762f, 0.003120f, -0.012226f, 0.001193f, 0.000452f, 0.003527f, 0.008179f, 0.002623f, - 0.005822f, 0.008942f, -0.006155f, -0.001156f, 0.002020f, -0.007778f, 0.005274f, -0.002699f, 0.004496f, 0.003507f, -0.002380f, -0.001897f, 0.006616f, -0.002221f, -0.006016f, 0.000776f, -0.000631f, -0.000305f, -0.003242f, 0.004730f, -0.003702f, 0.001747f, 0.001811f, 0.002368f, -0.000950f, -0.001088f, 0.000301f, -0.001937f, 0.000733f, -0.001357f, 0.000126f, -0.000878f, -0.001806f, 0.002264f, -0.000914f, 0.000422f, -0.000315f, 0.000053f, 0.000042f, 0.000326f, -0.037450f, -0.000836f, -0.004771f, 0.025998f, 0.000348f, 0.001355f, 0.005367f, -0.003886f, 0.012983f, 0.003028f, -0.014353f, -0.007829f, -0.016800f, 0.002709f, -0.001393f, -0.005924f, -0.005029f, -0.006307f, -0.004104f, 0.020168f, -0.009623f, -0.004875f, -0.005552f, -0.015788f, -0.000901f, -0.004059f, 0.005071f, 0.007475f, -0.002764f, -0.000347f, 0.004305f, -0.005011f, -0.001540f, -0.002273f, -0.005871f, 0.005990f, 0.012332f, -0.001753f, -0.002321f, 0.009692f, -0.013394f, 0.008294f, -0.010743f, -0.021434f, -0.013665f, -0.021349f, -0.003452f, -0.012281f, -0.008320f, 0.001971f, 0.008184f, 0.004022f, 0.005783f, -0.003361f, 0.007066f, -0.009212f, - -0.002254f, 0.007401f, -0.000259f, 0.010374f, -0.004658f, 0.003028f, -0.007670f, -0.005871f, 0.005300f, -0.013138f, 0.003237f, 0.009442f, -0.012787f, 0.001075f, -0.003545f, -0.006055f, -0.008460f, -0.007654f, -0.002680f, -0.003482f, 0.001779f, 0.008826f, -0.004574f, 0.002633f, -0.007774f, -0.008288f, -0.006556f, 0.002889f, 0.004110f, 0.000957f, -0.002194f, -0.002538f, -0.003592f, 0.001697f, -0.003075f, -0.002716f, -0.001359f, -0.002533f, -0.000494f, 0.000283f, -0.004299f, -0.001125f, -0.000684f, -0.003277f, -0.000999f, -0.001555f, -0.000177f, -0.000695f, -0.005801f, 0.000533f, 0.002171f, -0.001220f, -0.002398f, -0.000381f, 0.003293f, 0.001648f, -0.001550f, 0.023815f, 0.000129f, -0.013326f, -0.012813f, -0.004407f, -0.009356f, -0.003617f, -0.007045f, 0.001802f, 0.001119f, -0.010537f, -0.006225f, -0.011570f, 0.021862f, 0.009273f, 0.001982f, -0.001255f, 0.011836f, -0.017736f, -0.000322f, -0.000385f, -0.011244f, -0.014922f, 0.013305f, 0.000266f, 0.009478f, -0.014964f, -0.006595f, -0.005213f, 0.005148f, -0.000530f, 0.006339f, -0.010316f, 0.003064f, 0.004234f, -0.011228f, -0.010736f, -0.009780f, 0.002341f, - -0.003264f, -0.002990f, 0.009374f, -0.002745f, 0.000979f, 0.000199f, -0.001932f, -0.010639f, -0.006574f, -0.001195f, -0.016103f, -0.010438f, -0.008520f, 0.004503f, 0.002993f, 0.006454f, -0.001663f, 0.002854f, -0.000261f, -0.001588f, 0.007377f, -0.005734f, 0.012910f, 0.001884f, 0.003847f, -0.001648f, -0.004381f, 0.005241f, 0.003927f, 0.010337f, -0.003193f, 0.001685f, 0.006171f, -0.003623f, 0.000028f, -0.013474f, 0.006286f, -0.010349f, 0.006511f, -0.007623f, -0.007613f, -0.014524f, -0.002961f, 0.003809f, 0.001494f, -0.002359f, 0.003296f, 0.001590f, 0.006569f, 0.001206f, -0.002146f, 0.005971f, 0.003080f, -0.005082f, 0.001156f, -0.004105f, 0.004476f, -0.001724f, 0.000655f, -0.001022f, -0.000656f, -0.003592f, -0.000266f, 0.000358f, 0.000576f, -0.002038f, 0.001613f, -0.002982f, 0.001101f, -0.000411f, -0.001704f, -0.002615f, 0.000584f, -0.001698f, 0.003800f, 0.001287f, -0.001197f, -0.001551f, -0.001741f, 0.003250f, 0.001895f, 0.003121f, 0.000143f, 0.000520f, 0.001370f, 0.028038f, 0.026535f, 0.019778f, -0.006850f, 0.007172f, 0.009947f, 0.005793f, 0.005560f, -0.010010f, -0.008762f, -0.013066f, - 0.011402f, -0.012268f, -0.001626f, -0.008957f, 0.015166f, -0.017093f, -0.012809f, -0.006445f, -0.002879f, -0.009469f, -0.014194f, 0.003887f, 0.000594f, 0.000698f, -0.017183f, -0.009513f, 0.004300f, 0.003445f, 0.004684f, -0.004746f, -0.006924f, 0.000409f, 0.004967f, 0.006418f, -0.004956f, 0.006097f, -0.009206f, -0.002531f, -0.022302f, 0.007984f, 0.002498f, -0.003945f, -0.004367f, -0.016460f, -0.007633f, 0.001921f, -0.004137f, -0.023066f, 0.012195f, 0.004968f, -0.000210f, -0.006333f, -0.005000f, -0.009843f, 0.002775f, -0.003587f, 0.006413f, -0.001589f, -0.003493f, -0.013187f, -0.002725f, -0.001458f, -0.007392f, 0.014168f, -0.010596f, 0.000040f, 0.008288f, -0.003728f, -0.011448f, -0.006473f, 0.009440f, 0.013839f, 0.006696f, -0.001232f, -0.000643f, 0.007245f, -0.015324f, 0.005986f, -0.001832f, -0.000899f, 0.000464f, 0.003086f, -0.001108f, -0.000797f, 0.000514f, -0.003122f, -0.009360f, -0.002632f, -0.003035f, 0.002608f, 0.001691f, 0.000883f, -0.003786f, -0.002027f, -0.004336f, -0.005199f, -0.001514f, -0.000366f, 0.005751f, 0.000395f, 0.000552f, 0.000568f, -0.002368f, -0.001396f, 0.002495f, -0.003338f, - -0.000769f, 0.000907f, 0.001453f, -0.003953f, -0.000236f, -0.000514f, 0.001935f, -0.002892f, -0.000936f, -0.001780f, -0.002926f, -0.005982f, -0.002960f, -0.000465f, -0.002823f, -0.000179f, -0.000003f, -0.000466f, -0.003509f, 0.034126f, 0.011482f, -0.004922f, -0.003921f, 0.012021f, -0.022968f, -0.004274f, 0.018692f, 0.009408f, -0.012946f, -0.000225f, -0.008770f, 0.003665f, 0.014382f, 0.035279f, 0.011667f, 0.027495f, -0.009676f, -0.001968f, -0.026647f, 0.009130f, -0.007749f, 0.007588f, -0.011653f, -0.000538f, 0.001160f, -0.004081f, 0.009611f, -0.004211f, 0.004604f, 0.011874f, -0.009008f, 0.005406f, 0.015083f, -0.004019f, 0.005059f, 0.000106f, 0.006073f, 0.008338f, 0.008493f, -0.045181f, 0.016570f, -0.005139f, -0.021190f, -0.003610f, 0.012956f, 0.004058f, -0.016371f, 0.008935f, 0.012915f, -0.026563f, 0.002143f, -0.007425f, 0.015688f, 0.003686f, 0.012957f, -0.003063f, -0.009336f, -0.018618f, 0.001141f, -0.011218f, 0.035338f, 0.006641f, -0.005821f, 0.011893f, 0.001469f, 0.011513f, -0.027832f, -0.003549f, 0.004272f, 0.008736f, 0.002025f, -0.012896f, -0.002077f, 0.004872f, 0.012348f, 0.010564f, - -0.008664f, 0.000352f, 0.012143f, -0.000410f, 0.005697f, -0.004124f, -0.002135f, 0.008662f, 0.000788f, -0.000543f, -0.001211f, 0.000554f, 0.004138f, -0.003907f, -0.001836f, -0.000389f, 0.003200f, 0.003281f, -0.000471f, -0.000997f, 0.008361f, -0.002554f, -0.001506f, -0.004314f, 0.000522f, 0.002413f, -0.002279f, 0.000284f, 0.002519f, 0.003566f, -0.003079f, -0.001242f, -0.005068f, 0.000500f, 0.003864f, -0.001762f, 0.000648f, 0.001954f, 0.001956f, 0.006918f, 0.000776f, 0.003455f, -0.000307f, -0.002817f, 0.004328f, 0.001218f, -0.040425f, -0.044335f, -0.015175f, -0.003448f, 0.000823f, 0.009437f, -0.018933f, 0.005991f, 0.022334f, -0.012794f, 0.011890f, 0.015475f, -0.010767f, 0.000351f, -0.005243f, 0.018925f, 0.026372f, -0.012611f, -0.014886f, 0.013284f, 0.001277f, -0.012637f, 0.005995f, 0.000237f, 0.003306f, 0.003798f, -0.006770f, -0.004904f, -0.028179f, -0.001420f, -0.008061f, -0.000618f, -0.000836f, 0.019190f, 0.005686f, -0.034358f, 0.000575f, 0.016617f, -0.018811f, 0.004987f, 0.020227f, -0.004414f, 0.007119f, 0.000447f, -0.005310f, -0.013032f, 0.026004f, 0.021924f, -0.016646f, 0.008754f, - -0.006193f, -0.000823f, 0.008091f, -0.005734f, 0.006785f, -0.010257f, -0.001178f, 0.022013f, -0.006245f, 0.004691f, 0.010373f, -0.007459f, -0.018063f, -0.000729f, 0.006197f, 0.003254f, -0.008683f, 0.001193f, 0.004864f, 0.007861f, 0.016062f, 0.009991f, 0.017675f, 0.009393f, 0.003412f, 0.008272f, -0.002907f, 0.015996f, -0.000527f, -0.012549f, -0.016969f, 0.002135f, 0.005503f, -0.002918f, 0.012679f, -0.006504f, -0.006856f, 0.005094f, -0.001605f, 0.001410f, 0.000638f, -0.007792f, -0.001103f, -0.004675f, 0.005760f, 0.002639f, 0.004630f, 0.009104f, 0.001121f, -0.003153f, -0.013140f, -0.000959f, 0.003039f, -0.003303f, -0.001366f, 0.001377f, -0.002934f, 0.002857f, 0.002908f, 0.000426f, -0.003107f, -0.002153f, 0.006416f, -0.000855f, 0.003006f, 0.001651f, 0.002068f, -0.004552f, -0.004895f, -0.002825f, 0.001107f, 0.002270f, 0.003834f, 0.002912f, 0.001869f, 0.001853f, 0.004821f, -0.001207f, -0.043529f, 0.048609f, -0.002797f, 0.031285f, 0.002409f, -0.018108f, -0.005410f, -0.010473f, -0.012706f, -0.001624f, 0.000894f, 0.022645f, -0.003552f, 0.015574f, -0.015602f, -0.000782f, 0.003888f, 0.003634f, - 0.001811f, 0.019696f, 0.019626f, 0.007218f, 0.003162f, -0.002414f, -0.003773f, -0.001060f, -0.003216f, -0.032659f, -0.011107f, 0.015154f, 0.009798f, -0.003573f, 0.001722f, -0.015412f, 0.007903f, -0.018915f, 0.004221f, 0.030265f, 0.003350f, 0.006639f, -0.025030f, 0.013495f, 0.011769f, 0.003315f, -0.016766f, -0.007273f, -0.007774f, 0.001478f, -0.015040f, 0.015553f, 0.018960f, 0.011500f, -0.001586f, 0.028401f, 0.010123f, 0.041521f, 0.016278f, -0.010959f, 0.034597f, 0.000899f, -0.012481f, 0.025099f, -0.003965f, 0.008373f, 0.015848f, -0.011234f, -0.009620f, 0.023235f, 0.024946f, 0.014808f, -0.020033f, 0.007794f, -0.000080f, -0.009165f, -0.016431f, 0.012426f, 0.022096f, 0.013433f, 0.032031f, 0.004556f, -0.006912f, -0.006953f, -0.019543f, -0.007293f, 0.012312f, 0.002072f, -0.003476f, 0.000959f, -0.012142f, -0.008410f, 0.001849f, 0.003333f, -0.000281f, 0.013398f, 0.010565f, 0.004831f, 0.000557f, 0.004073f, 0.006394f, 0.003439f, -0.005983f, -0.002258f, 0.001932f, -0.001182f, -0.001967f, 0.005790f, 0.000639f, -0.001332f, 0.004611f, 0.001950f, 0.001572f, 0.002005f, -0.003902f, 0.001285f, - 0.011694f, -0.004972f, 0.007424f, 0.003667f, 0.000446f, -0.004922f, -0.005638f, -0.002671f, 0.010692f, -0.023405f, 0.031075f, -0.009002f, -0.020459f, 0.006824f, 0.013496f, -0.013573f, -0.006905f, -0.028646f, 0.011959f, -0.010509f, -0.003492f, -0.026257f, -0.011577f, -0.008910f, -0.004532f, -0.011841f, 0.006150f, -0.005315f, -0.006512f, 0.006174f, 0.008626f, 0.015287f, 0.014932f, -0.006479f, -0.005466f, -0.021151f, 0.008285f, 0.000410f, 0.013871f, 0.003829f, 0.003676f, -0.004789f, 0.005516f, -0.013217f, -0.011260f, 0.006231f, 0.003112f, 0.006326f, -0.025867f, 0.008646f, 0.016814f, -0.000047f, -0.022795f, -0.023721f, -0.018565f, -0.054710f, 0.007662f, -0.006292f, 0.026409f, -0.012950f, 0.021925f, 0.007079f, 0.001417f, 0.028389f, 0.004237f, -0.003257f, 0.020302f, 0.007571f, -0.027897f, -0.013798f, 0.003229f, -0.008843f, -0.015880f, -0.009572f, 0.035747f, 0.016519f, -0.016975f, -0.002018f, -0.009581f, -0.004601f, 0.005135f, 0.025353f, 0.000354f, -0.006759f, 0.033386f, -0.011964f, -0.030537f, -0.028990f, -0.034546f, -0.006074f, 0.002523f, -0.000856f, -0.006172f, -0.004167f, -0.014839f, -0.002847f, - 0.004194f, -0.004518f, -0.004475f, 0.002960f, 0.002701f, -0.021598f, -0.009020f, -0.016901f, 0.000691f, -0.005688f, -0.005612f, -0.009018f, -0.002960f, 0.002489f, 0.013030f, 0.000200f, 0.016007f, 0.008001f, 0.011725f, 0.001324f, 0.005460f, -0.005462f, 0.010681f, 0.000002f, -0.007887f, -0.011531f, 0.006570f, 0.001131f, 0.003587f, -0.002963f, 0.002014f, -0.003583f, 0.003624f, -0.001243f, 0.004318f, -0.000857f, -0.002005f, 0.002929f, -0.000712f, 0.013652f, -0.022416f, -0.005579f, -0.005956f, -0.002873f, -0.001495f, 0.059818f, 0.009850f, 0.021919f, -0.010533f, 0.019154f, 0.038561f, -0.032915f, 0.050075f, 0.029730f, -0.013318f, 0.000532f, 0.003092f, -0.017898f, -0.030106f, 0.002163f, -0.017433f, -0.026825f, -0.012010f, 0.002483f, 0.000096f, -0.003215f, -0.012049f, -0.001929f, -0.011731f, -0.000723f, -0.013572f, -0.000895f, 0.009378f, -0.021050f, 0.011665f, 0.017916f, -0.013823f, -0.012783f, 0.009236f, 0.007055f, -0.001167f, 0.053753f, 0.004774f, 0.035871f, -0.025668f, -0.002380f, -0.031132f, -0.022767f, 0.005551f, -0.022833f, -0.031474f, -0.020892f, -0.023897f, -0.005099f, -0.006338f, -0.026456f, - -0.028850f, 0.037821f, 0.005954f, 0.002499f, -0.005074f, 0.019658f, 0.010875f, 0.023687f, -0.002303f, 0.022399f, -0.012416f, 0.005211f, -0.041622f, 0.034171f, 0.016487f, 0.002815f, -0.022846f, -0.001582f, 0.010362f, 0.002314f, 0.004012f, 0.016960f, 0.023481f, -0.018016f, -0.023323f, -0.015220f, -0.003626f, -0.000235f, 0.002584f, -0.013563f, 0.001594f, 0.004089f, 0.009692f, 0.012723f, -0.001561f, -0.007601f, 0.013120f, 0.006632f, -0.009745f, -0.000505f, 0.004757f, -0.005671f, -0.010301f, 0.002038f, -0.003477f, -0.003228f, -0.000289f, -0.004352f, 0.012029f, -0.012483f, 0.006993f, -0.000179f, 0.013304f, -0.013682f, -0.003338f, 0.002519f, -0.003491f, -0.005093f, -0.002201f, -0.010799f, -0.012056f, -0.002090f, 0.001298f, 0.003767f, 0.004416f, -0.008001f, 0.008351f, 0.006496f, -0.004911f, 0.007644f, -0.001427f, 0.004484f, 0.000405f, 0.004445f, -0.003317f, 0.029033f, -0.011950f, -0.009756f, 0.032421f, -0.027421f, -0.020928f, -0.005183f, -0.016663f, -0.002723f, -0.032640f, 0.007231f, -0.020127f, 0.015314f, 0.002093f, 0.005173f, 0.018538f, 0.005277f, 0.013060f, 0.017977f, 0.017057f, 0.014076f, - 0.023932f, 0.002774f, 0.016241f, 0.014555f, -0.017609f, 0.030245f, 0.007342f, 0.013938f, -0.016448f, 0.023584f, 0.010578f, 0.016536f, 0.004119f, 0.005845f, -0.003163f, -0.021914f, 0.005462f, 0.012257f, 0.014458f, 0.015810f, 0.003322f, -0.026634f, -0.016886f, 0.019006f, 0.010288f, 0.004254f, -0.010193f, 0.013127f, -0.009757f, -0.026698f, 0.038956f, 0.023762f, 0.017331f, -0.015128f, -0.007510f, -0.019915f, -0.061877f, -0.001966f, -0.008739f, 0.007878f, -0.014546f, -0.015605f, -0.027358f, 0.004719f, 0.008613f, 0.034469f, -0.027387f, 0.010959f, 0.000381f, 0.015817f, -0.024132f, -0.029559f, -0.018075f, 0.018937f, 0.005677f, 0.005859f, 0.009987f, -0.008182f, 0.003243f, 0.022215f, 0.007806f, 0.011205f, 0.014108f, -0.005782f, -0.005321f, -0.009446f, 0.000096f, 0.009658f, 0.011947f, 0.000361f, 0.004872f, 0.002348f, 0.001822f, 0.009071f, -0.005807f, -0.004960f, -0.008136f, -0.004585f, -0.008417f, -0.000347f, -0.012713f, -0.005162f, -0.013434f, -0.000835f, -0.008143f, -0.002388f, -0.001977f, -0.004699f, 0.003674f, -0.003415f, -0.017222f, -0.002650f, 0.006683f, 0.007371f, 0.013915f, -0.002200f, - -0.008518f, 0.003891f, -0.003458f, -0.012537f, 0.011301f, 0.009588f, 0.009153f, 0.021635f, 0.014078f, -0.001315f, -0.049731f, 0.028834f, 0.030676f, -0.014994f, 0.026185f, 0.009125f, -0.041913f, -0.007261f, 0.055490f, -0.007689f, -0.036616f, -0.005569f, -0.003357f, -0.031786f, 0.022566f, 0.004838f, -0.015940f, 0.024315f, 0.016194f, 0.057236f, 0.033621f, 0.001082f, 0.004386f, 0.054013f, -0.013613f, 0.013821f, -0.021794f, -0.031439f, -0.009243f, -0.021291f, 0.005037f, -0.001362f, 0.011043f, -0.001434f, -0.003664f, -0.008891f, 0.042617f, 0.002273f, -0.033229f, -0.026303f, -0.005840f, -0.006657f, -0.000994f, 0.014076f, 0.038916f, 0.024973f, 0.008383f, -0.023264f, 0.030318f, 0.055272f, -0.011437f, 0.025239f, 0.023600f, 0.066559f, 0.012820f, 0.012893f, 0.020263f, 0.028518f, 0.015881f, -0.022509f, -0.021681f, 0.015522f, -0.040451f, -0.024226f, -0.028930f, 0.027904f, 0.024393f, 0.017170f, -0.006395f, 0.020649f, 0.042771f, -0.023995f, 0.034114f, 0.034039f, -0.004325f, 0.033469f, -0.030978f, -0.013478f, -0.010663f, 0.069813f, -0.033717f, 0.034470f, 0.021591f, 0.012897f, 0.009940f, -0.030452f, - -0.002821f, -0.023874f, 0.026210f, 0.025016f, -0.000160f, 0.002164f, -0.012187f, 0.018800f, -0.006994f, 0.002201f, 0.007190f, 0.007928f, 0.000181f, 0.011628f, -0.007529f, -0.003801f, -0.002856f, -0.007348f, 0.003750f, 0.007185f, -0.005497f, 0.003505f, 0.008236f, 0.014502f, 0.002406f, -0.012579f, 0.005750f, -0.013663f, 0.002766f, 0.013128f, 0.008526f, 0.013869f, -0.002084f, 0.022105f, -0.008339f, 0.016442f, -0.003950f, -0.004735f, -0.002605f, 0.001360f, 0.017716f, -0.012235f, 0.008632f, 0.000100f, 0.008742f, -0.009861f, 0.002963f, 0.004699f, -0.004486f, 0.023458f, 0.011095f, 0.038143f, 0.067992f, 0.007346f, -0.006982f, 0.007253f, -0.003596f, -0.011124f, 0.002073f, 0.007164f, -0.016537f, -0.022036f, 0.007559f, -0.011404f, -0.006209f, 0.017393f, -0.000806f, 0.034094f, -0.017838f, 0.033431f, 0.016439f, 0.003380f, -0.019297f, 0.006402f, 0.033312f, 0.009740f, -0.016834f, 0.006692f, -0.003960f, 0.001065f, 0.019592f, -0.026927f, -0.014254f, 0.030338f, 0.000702f, -0.007317f, 0.026284f, -0.001145f, 0.009341f, 0.006118f, -0.025037f, -0.045587f, -0.009627f, 0.016041f, 0.029385f, 0.006517f, - -0.022441f, 0.029467f, -0.009532f, 0.059595f, -0.030017f, 0.040170f, -0.023294f, 0.014509f, 0.034349f, -0.050448f, -0.052295f, -0.000135f, -0.014756f, 0.013758f, 0.016762f, 0.002643f, -0.007644f, -0.030732f, 0.020946f, -0.004235f, 0.037236f, 0.017063f, 0.034676f, 0.009715f, 0.020207f, -0.008167f, 0.026634f, 0.009887f, -0.015849f, 0.003527f, -0.000406f, -0.076285f, -0.002223f, 0.013788f, 0.018571f, 0.032709f, 0.027504f, -0.008626f, 0.002344f, -0.005359f, 0.005167f, 0.000318f, -0.008491f, -0.019961f, 0.008844f, -0.011498f, 0.026580f, 0.003489f, 0.005199f, 0.013416f, 0.007740f, -0.007982f, 0.007676f, 0.019633f, 0.016887f, -0.005357f, -0.003052f, 0.003163f, -0.004078f, -0.002374f, -0.012006f, -0.001759f, -0.025161f, -0.003077f, 0.008633f, -0.020561f, 0.014565f, -0.015405f, -0.012862f, 0.004216f, -0.013083f, 0.013775f, 0.005164f, -0.004540f, 0.008685f, -0.000530f, -0.001448f, 0.006065f, 0.018470f, -0.012351f, 0.002867f, 0.003275f, 0.044315f, 0.057326f, -0.012553f, -0.002247f, 0.020195f, 0.075846f, 0.002087f, -0.044904f, -0.018000f, 0.009106f, 0.008589f, -0.014210f, 0.014459f, -0.010267f, - 0.023464f, -0.038079f, 0.001951f, 0.023695f, -0.015945f, -0.017183f, 0.003257f, -0.037634f, -0.011650f, -0.012264f, -0.059959f, -0.050587f, -0.029372f, 0.022074f, 0.025919f, -0.004559f, -0.042694f, 0.004799f, 0.001446f, -0.001506f, 0.008474f, -0.021401f, 0.051105f, -0.014604f, 0.006445f, 0.056707f, -0.049710f, 0.023941f, 0.008316f, -0.017305f, 0.020542f, -0.013402f, -0.040326f, 0.000846f, 0.034735f, -0.015567f, -0.025368f, 0.014516f, 0.004610f, 0.033212f, 0.000167f, -0.051156f, 0.004011f, -0.030237f, 0.050329f, -0.018273f, 0.007536f, 0.012413f, 0.005957f, -0.007224f, -0.032820f, 0.013685f, 0.034241f, 0.009993f, 0.035330f, -0.051863f, -0.028655f, -0.008531f, -0.000561f, 0.005607f, -0.040136f, 0.035876f, -0.005026f, -0.038143f, -0.012832f, 0.024161f, 0.022361f, -0.021112f, -0.029453f, 0.029012f, -0.023468f, -0.014612f, -0.000644f, -0.003563f, -0.003298f, -0.001864f, -0.008648f, -0.001588f, 0.014443f, -0.003270f, 0.013264f, -0.015281f, 0.010519f, 0.014003f, -0.003856f, 0.007585f, 0.002172f, -0.002782f, 0.000083f, 0.001953f, 0.024800f, 0.001366f, -0.004862f, 0.002191f, 0.005439f, -0.012363f, - 0.004365f, -0.015826f, -0.001356f, 0.018482f, -0.006697f, -0.014401f, -0.005443f, 0.008342f, 0.000192f, 0.000704f, 0.010784f, 0.000969f, -0.014593f, -0.007441f, 0.026370f, 0.019426f, -0.006442f, -0.001018f, -0.039321f, 0.057894f, 0.001686f, -0.099059f, 0.039732f, -0.013584f, 0.007759f, 0.010149f, 0.013341f, 0.024364f, 0.008904f, -0.017904f, -0.004299f, 0.024536f, 0.016599f, -0.019639f, -0.001019f, -0.015574f, -0.008061f, -0.048636f, -0.006178f, 0.023465f, 0.029126f, 0.006578f, -0.011514f, 0.032266f, -0.033166f, 0.036760f, -0.021126f, -0.011846f, 0.004408f, -0.011356f, 0.009821f, -0.029255f, -0.039519f, -0.044221f, -0.014138f, 0.022959f, -0.008824f, 0.000264f, 0.026983f, 0.007526f, 0.004737f, -0.000806f, 0.000942f, -0.009282f, 0.000388f, 0.029092f, 0.017909f, 0.030699f, 0.026026f, 0.030798f, 0.020952f, -0.018246f, -0.011642f, 0.007598f, -0.001939f, -0.035302f, 0.023785f, -0.006354f, -0.033376f, 0.041961f, -0.000457f, 0.006857f, -0.001152f, -0.015204f, -0.005020f, 0.017648f, 0.025513f, 0.021257f, 0.000659f, 0.013037f, -0.042764f, -0.006030f, -0.015238f, 0.023321f, 0.008038f, -0.011875f, - -0.013605f, 0.053909f, -0.016421f, -0.018404f, -0.005840f, 0.008735f, -0.013342f, -0.035444f, -0.002013f, -0.006030f, -0.019192f, 0.033317f, 0.006772f, 0.012574f, -0.010243f, -0.001727f, 0.007724f, 0.002053f, 0.009758f, 0.010607f, -0.003488f, 0.006528f, -0.006440f, 0.007392f, 0.002753f, -0.005823f, -0.004500f, 0.005493f, 0.007604f, 0.002144f, -0.006819f, -0.005547f, -0.006141f, -0.004422f, 0.000093f, 0.003874f, -0.005581f, -0.006604f, 0.001510f, -0.000455f, -0.001281f, 0.005852f, -0.002794f, 0.009229f, 0.002681f, 0.026882f, -0.002371f, -0.003277f, -0.006021f, -0.011538f, -0.015081f, 0.134734f, -0.132627f, -0.006793f, -0.144184f, -0.022446f, -0.054935f, -0.006823f, 0.034981f, -0.018011f, -0.040040f, 0.062685f, -0.017182f, -0.011104f, 0.001896f, 0.019214f, -0.002434f, 0.052072f, 0.034388f, 0.020569f, -0.031025f, 0.001898f, -0.021229f, -0.021558f, -0.014503f, 0.000619f, -0.006781f, -0.005934f, -0.017613f, -0.004042f, 0.028670f, 0.003390f, 0.018904f, 0.018910f, -0.001741f, 0.025298f, 0.036902f, 0.001820f, -0.007814f, -0.019540f, -0.023346f, 0.009074f, 0.009922f, -0.019370f, 0.031237f, -0.041741f, - -0.042261f, 0.004454f, -0.014931f, 0.022303f, -0.039198f, 0.016452f, -0.075180f, -0.040142f, -0.060229f, -0.005400f, -0.029838f, -0.002885f, -0.018296f, -0.022749f, -0.019830f, -0.001998f, 0.004869f, -0.058840f, 0.006472f, -0.013049f, 0.006518f, 0.000058f, -0.027314f, -0.047909f, 0.032778f, -0.028915f, -0.005327f, 0.029300f, -0.003192f, -0.009468f, 0.019328f, 0.024251f, -0.005243f, 0.024157f, 0.015765f, 0.029236f, 0.016054f, 0.029588f, 0.013928f, -0.017874f, -0.005102f, -0.015771f, 0.000529f, -0.013094f, 0.002577f, 0.010589f, 0.015090f, 0.016516f, -0.007594f, 0.007566f, 0.005411f, 0.010763f, -0.002769f, -0.004387f, 0.005565f, 0.012946f, 0.001573f, 0.002860f, 0.014341f, 0.007241f, 0.014771f, -0.002324f, 0.000539f, -0.001734f, 0.007134f, 0.010141f, -0.002021f, -0.017365f, 0.009279f, -0.003055f, 0.003523f, -0.005577f, 0.002257f, -0.005065f, -0.002667f, 0.000720f, -0.014437f, 0.000055f, 0.019482f, -0.012429f, -0.013042f, 0.001516f, 0.006580f, 0.006656f, 0.002206f, -0.012858f, 0.109891f, 0.055504f, 0.027164f, -0.025818f, -0.013069f, -0.056427f, 0.013185f, 0.046370f, -0.008321f, -0.010261f, - 0.075542f, -0.012810f, -0.016057f, 0.037709f, 0.055460f, 0.010107f, 0.056548f, -0.013387f, 0.008740f, 0.033653f, 0.037896f, 0.059525f, 0.048215f, -0.001905f, -0.020694f, 0.018316f, 0.022023f, 0.020897f, 0.025786f, 0.044673f, 0.022094f, 0.056649f, -0.021215f, -0.000885f, 0.016896f, 0.015814f, 0.047956f, 0.028193f, 0.051353f, -0.036068f, -0.011056f, 0.020902f, -0.039043f, 0.032519f, 0.032878f, 0.031653f, 0.013680f, -0.039228f, -0.014107f, 0.076141f, 0.019883f, 0.051529f, 0.042676f, 0.046927f, -0.009096f, 0.062003f, 0.096544f, 0.033709f, 0.008870f, 0.068043f, 0.046974f, -0.025371f, -0.015626f, -0.032060f, -0.025765f, 0.028981f, 0.033333f, 0.003453f, -0.027479f, 0.001161f, -0.024547f, -0.000579f, -0.010805f, 0.016845f, -0.058187f, -0.006104f, 0.006183f, -0.029058f, 0.022612f, 0.004516f, -0.018021f, 0.016189f, -0.036569f, -0.023379f, -0.040555f, -0.013080f, -0.019462f, 0.014976f, 0.004685f, -0.018412f, 0.004480f, 0.027199f, 0.008034f, -0.008179f, -0.016035f, -0.024625f, -0.009588f, 0.008888f, -0.035509f, -0.016078f, -0.002937f, 0.029171f, 0.009696f, -0.011639f, 0.006064f, -0.018686f, - -0.005208f, -0.005388f, -0.015878f, -0.009758f, 0.026791f, -0.005676f, -0.001894f, -0.006037f, 0.006299f, 0.017604f, 0.012131f, 0.015146f, 0.036855f, 0.000517f, 0.029672f, 0.001851f, 0.002937f, 0.019104f, 0.015828f, -0.024080f, -0.014381f, -0.001497f, 0.005540f, 0.003016f, -0.000015f, -0.034869f, 0.016883f, -0.041980f, 0.072718f, 0.103331f, 0.060073f, -0.026910f, -0.057205f, -0.021306f, 0.051004f, -0.015521f, -0.042694f, 0.076908f, -0.053783f, 0.045782f, 0.025809f, -0.061048f, -0.025379f, -0.006746f, -0.100384f, 0.003599f, 0.011303f, -0.048697f, 0.098487f, -0.034303f, 0.091466f, -0.069070f, 0.010010f, 0.003994f, 0.066845f, 0.098286f, -0.008283f, 0.033095f, 0.046467f, -0.055009f, 0.036498f, -0.074315f, -0.020488f, 0.139922f, -0.008009f, -0.039184f, -0.007678f, -0.079024f, 0.003317f, -0.025209f, 0.087765f, 0.032917f, 0.040833f, -0.013956f, -0.023249f, -0.044227f, -0.040483f, 0.009679f, 0.005589f, -0.000290f, 0.058476f, -0.014723f, 0.011166f, -0.061212f, -0.031440f, 0.040005f, -0.090362f, -0.036174f, -0.027146f, -0.031449f, 0.084460f, 0.005593f, 0.091260f, 0.064826f, 0.029152f, 0.034412f, - -0.020360f, -0.048771f, 0.040941f, -0.066182f, -0.039974f, 0.080343f, 0.024704f, -0.049351f, -0.080275f, -0.049270f, -0.057081f, 0.045333f, -0.049245f, 0.024987f, -0.035515f, -0.003757f, -0.030469f, 0.031956f, 0.019202f, 0.002181f, -0.026390f, -0.005623f, -0.018156f, 0.004681f, -0.035932f, -0.025790f, -0.013399f, 0.007203f, 0.020402f, -0.001500f, -0.014492f, -0.021381f, -0.033332f, -0.024841f, 0.021583f, 0.028324f, -0.008917f, 0.019261f, 0.041150f, 0.018667f, -0.037677f, -0.012070f, -0.013661f, 0.023074f, -0.022859f, -0.016194f, -0.005145f, 0.007877f, -0.030117f, -0.042117f, -0.028906f, -0.010782f, 0.017243f, -0.001588f, 0.004176f, -0.006880f, 0.023511f, 0.006153f, 0.065970f, -0.108958f, 0.116300f, -0.002730f, 0.009126f, -0.037024f, 0.093948f, 0.022187f, 0.060569f, 0.022988f, -0.039394f, 0.013662f, 0.033725f, -0.057229f, 0.040338f, 0.000868f, 0.026828f, -0.076454f, -0.005789f, 0.018929f, 0.070716f, -0.029279f, -0.057992f, -0.002415f, 0.070333f, 0.037152f, -0.026611f, -0.060345f, -0.002794f, 0.050776f, 0.006818f, 0.003656f, 0.014233f, 0.036947f, 0.093163f, -0.130934f, -0.021421f, 0.012789f, - 0.073094f, 0.016442f, -0.039512f, -0.009715f, 0.027975f, 0.066839f, -0.006530f, 0.003368f, -0.125483f, 0.036514f, 0.019861f, 0.034411f, -0.090985f, 0.080780f, 0.069672f, 0.026273f, -0.041038f, -0.004070f, -0.045429f, 0.034252f, 0.059705f, 0.025085f, 0.028061f, -0.005061f, 0.045315f, -0.065582f, 0.062524f, -0.018314f, -0.021994f, 0.073362f, 0.060576f, 0.004033f, -0.022578f, -0.060069f, 0.044324f, 0.048397f, -0.128713f, -0.010083f, 0.074392f, 0.018613f, -0.000578f, -0.045979f, -0.019606f, 0.126190f, -0.009411f, -0.042975f, -0.005212f, -0.023110f, -0.027801f, 0.042055f, -0.035191f, 0.012928f, 0.019387f, 0.025716f, -0.017451f, 0.002645f, -0.017721f, -0.021450f, -0.014131f, 0.019447f, 0.019613f, -0.019626f, -0.003684f, 0.009788f, -0.015422f, 0.038265f, -0.036355f, 0.009672f, -0.006320f, -0.011741f, 0.013826f, 0.063289f, 0.004421f, 0.000245f, -0.009864f, -0.022109f, 0.000380f, 0.034515f, 0.008475f, -0.001466f, -0.006385f, -0.016056f, 0.029561f, -0.007423f, -0.001428f, -0.017052f, 0.017076f, -0.097133f, 0.047828f, 0.009436f, 0.030558f, 0.036786f, 0.053389f, 0.019115f, 0.017372f, -0.025036f, - 0.027685f, 0.005327f, 0.063323f, -0.006962f, -0.018481f, 0.049803f, 0.038347f, -0.008037f, 0.003630f, -0.020882f, 0.001016f, 0.015975f, -0.004516f, -0.012357f, 0.028619f, -0.022207f, 0.003295f, 0.038530f, -0.007866f, 0.022360f, -0.038579f, -0.007659f, 0.005619f, -0.015766f, -0.005795f, 0.004748f, 0.028301f, -0.006811f, -0.046183f, 0.002112f, 0.093410f, 0.019547f, -0.049910f, 0.015335f, -0.050885f, -0.034893f, -0.026024f, -0.006921f, 0.059841f, -0.006172f, -0.046731f, 0.096208f, -0.103242f, 0.017902f, 0.106528f, 0.011487f, 0.075072f, -0.056639f, -0.105607f, 0.034561f, 0.004253f, 0.084922f, 0.005106f, -0.047440f, 0.039940f, -0.010406f, -0.008144f, -0.020013f, -0.002721f, -0.029414f, 0.015516f, 0.004422f, 0.023322f, -0.035979f, -0.030488f, -0.012117f, 0.038259f, 0.048563f, -0.015376f, 0.025992f, -0.003135f, 0.040704f, 0.029359f, -0.050519f, 0.041369f, -0.010101f, 0.006802f, -0.008296f, -0.014996f, 0.000159f, 0.000576f, 0.005846f, -0.003067f, 0.004618f, 0.004473f, 0.003236f, 0.006674f, -0.016408f, 0.001703f, 0.009701f, -0.013159f, -0.001458f, 0.009805f, -0.008608f, 0.012601f, 0.013316f, - -0.018261f, 0.023462f, 0.010298f, 0.024290f, -0.004415f, 0.011459f, 0.020189f, -0.036099f, 0.000482f, 0.011529f, 0.022224f, -0.012673f, -0.008723f, -0.012177f, -0.008106f, 0.041269f, -0.018879f, -0.198359f, -0.454772f, -0.180704f, -0.274016f, -0.400895f, 0.214368f, 0.058701f, 0.123047f, 0.569092f, 0.438548f, 0.255471f, 0.468413f, 0.349251f, 0.059117f, 0.114926f, 0.095592f, -0.223102f, -0.190921f, -0.093996f, -0.340683f, -0.325938f, -0.125180f, -0.167869f, -0.236532f, -0.099438f, -0.085379f, -0.240899f, -0.201022f, -0.017480f, -0.114784f, -0.195488f, -0.067485f, 0.061235f, -0.142002f, 0.041720f, 0.209827f, -0.016887f, -0.030767f, 0.284940f, 0.227650f, -0.010851f, 0.333327f, 0.386059f, 0.156566f, 0.362661f, 0.509533f, 0.303460f, 0.263835f, 0.611272f, 0.488006f, 0.366429f, 0.434915f, 0.576649f, 0.205973f, 0.081037f, 0.241295f, -0.191609f, -0.547770f, -0.397631f, -0.605760f, -0.981053f, -0.878396f, -0.932653f, -1.084023f, -1.105269f, -0.952714f, -0.830145f, -0.832054f, -0.585572f, -0.259411f, -0.176328f, -0.027012f, 0.282722f, 0.520917f, 0.525341f, 0.652962f, 0.939038f, 0.821290f, 0.750167f, - 1.037605f, 0.824013f, 0.465926f, 0.679515f, 0.476158f, 0.184016f, 0.167075f, 0.218857f, 0.022319f, -0.070385f, 0.042369f, 0.005284f, -0.154425f, -0.083130f, 0.013425f, -0.123736f, -0.227691f, -0.110192f, -0.156293f, -0.332232f, -0.209062f, -0.081682f, -0.247810f, -0.167429f, 0.033145f, -0.079676f, -0.115821f, 0.055716f, -0.068579f, -0.273779f, -0.209171f, -0.335830f, -0.566164f, -0.534045f, -0.511285f, -0.532028f, -0.466800f, -0.314614f, -0.245065f, -0.148489f, -0.028618f, 0.123723f, 0.221301f, 0.338515f, 0.428406f, 0.531015f, 0.553684f, 0.586103f, 0.654309f, 0.619517f, 0.569224f, 0.537309f, 0.356927f, 0.124772f, 0.012386f, -0.054136f, -0.151744f, -0.180295f, -0.156015f, -0.177570f, -0.197831f, -0.175482f, -0.175621f, -0.173389f, -0.144685f, -0.142426f, -0.147556f, -0.143501f, -0.123306f, -0.102567f, -0.084419f, -0.053044f, -0.024985f, 0.005979f, 0.018668f, 0.024489f, 0.017908f, 0.010913f, 0.007588f} - }, - { - {-0.015949f, 0.009434f, -0.012132f, 0.001472f, -0.005142f, -0.001607f, 0.004718f, -0.007524f, -0.013668f, -0.003497f, 0.001154f, -0.007839f, -0.004520f, 0.006625f, -0.003935f, 0.003063f, -0.017114f, -0.001474f, 0.011575f, 0.006162f, -0.019147f, -0.006600f, -0.005025f, -0.005093f, 0.006464f, -0.002801f, -0.009974f, -0.006273f, -0.007131f, -0.007266f, 0.012614f, 0.003936f, 0.008124f, -0.005275f, 0.010672f, 0.009692f, 0.006913f, -0.003850f, -0.009059f, -0.007126f, 0.000752f, 0.001797f, 0.014519f, 0.005138f, 0.002763f, -0.006850f, 0.001578f, 0.000617f, 0.001661f, 0.005744f, 0.003409f, -0.009870f, -0.008382f, -0.004343f, 0.005307f, 0.001225f, -0.001857f, -0.010551f, -0.003221f, 0.004123f, 0.004775f, -0.004265f, -0.001607f, 0.000223f, 0.005057f, -0.001103f, -0.005576f, -0.000007f, 0.000807f, -0.007205f, 0.015314f, 0.000949f, -0.010387f, -0.000031f, -0.001597f, 0.009814f, 0.000795f, 0.006636f, 0.009191f, 0.003427f, -0.000621f, 0.000425f, -0.003330f, -0.002196f, -0.002211f, 0.005814f, -0.001873f, -0.000778f, -0.002625f, 0.001989f, 0.000715f, -0.001158f, -0.000229f, -0.001552f, 0.000319f, -0.000251f, - 0.001198f, 0.001157f, 0.001965f, -0.010515f, -0.009515f, 0.010805f, 0.009911f, -0.008004f, 0.005971f, 0.000605f, 0.003082f, -0.026302f, 0.010185f, -0.003903f, -0.017957f, -0.023420f, 0.000642f, 0.016947f, 0.001035f, 0.010991f, 0.000422f, -0.021180f, -0.007300f, 0.002452f, 0.007425f, -0.003722f, -0.001799f, -0.008911f, 0.001197f, -0.001610f, 0.014991f, 0.007623f, 0.003198f, 0.002699f, 0.004085f, 0.005212f, 0.013670f, 0.008288f, -0.012047f, -0.001011f, 0.002821f, 0.002933f, -0.014332f, 0.004682f, -0.004251f, -0.009061f, -0.002553f, -0.000369f, 0.009831f, 0.002539f, -0.005470f, 0.009957f, 0.015510f, -0.003267f, -0.005863f, 0.003764f, -0.001095f, 0.008490f, 0.008652f, 0.006781f, -0.010346f, -0.007868f, 0.007445f, -0.003118f, -0.002588f, -0.007927f, 0.000874f, -0.011782f, 0.007042f, 0.006354f, 0.008331f, 0.002160f, 0.009680f, -0.010439f, -0.006559f, 0.013604f, 0.000723f, 0.005060f, 0.016049f, 0.006223f, 0.001590f, -0.006433f, 0.009419f, 0.001158f, -0.004761f, 0.002718f, -0.011328f, 0.000352f, -0.001184f, 0.001720f, 0.003055f, -0.001263f, -0.005042f, -0.002738f, -0.000813f, 0.002504f, - 0.002325f, 0.000816f, -0.001387f, 0.001419f, 0.003211f, 0.000601f, -0.001051f, 0.013413f, 0.001209f, 0.005208f, -0.011247f, -0.009550f, 0.005507f, -0.002631f, -0.004097f, -0.005213f, -0.004872f, 0.004091f, -0.013017f, -0.007455f, -0.016081f, -0.019329f, -0.003555f, 0.016131f, 0.010414f, -0.006484f, -0.001786f, -0.002216f, -0.003723f, -0.013916f, 0.010068f, -0.003477f, -0.003553f, 0.000903f, 0.006591f, -0.003119f, 0.000611f, -0.000461f, 0.009533f, -0.008765f, 0.009563f, 0.005225f, 0.011460f, -0.003879f, 0.008873f, 0.003951f, -0.005440f, 0.007992f, -0.005378f, 0.004609f, 0.008504f, -0.006376f, 0.008930f, -0.005296f, -0.004259f, -0.001327f, -0.002603f, 0.004499f, -0.002562f, -0.006751f, 0.002752f, -0.005859f, 0.001320f, 0.000816f, 0.000947f, 0.013436f, 0.002639f, -0.003070f, 0.000107f, -0.005488f, -0.007647f, 0.003983f, -0.001818f, 0.012825f, 0.013096f, 0.005312f, -0.003595f, -0.002004f, -0.000061f, -0.005137f, -0.005925f, 0.006602f, 0.010387f, 0.000345f, -0.001094f, 0.006380f, 0.006904f, -0.000887f, 0.002461f, 0.002217f, -0.004961f, 0.004747f, -0.000873f, 0.006808f, -0.003338f, -0.001294f, - -0.000223f, -0.002824f, -0.000275f, 0.004960f, -0.001050f, 0.001505f, 0.001487f, -0.003499f, 0.001133f, -0.000640f, -0.000671f, 0.001417f, 0.001333f, -0.002241f, 0.002592f, -0.000866f, -0.001062f, 0.000186f, -0.000251f, -0.000423f, -0.002007f, -0.001520f, 0.025522f, -0.010833f, 0.010449f, -0.013048f, -0.010979f, 0.000029f, -0.003066f, -0.002795f, 0.003535f, -0.005502f, 0.011022f, 0.010756f, 0.009209f, -0.002794f, -0.001231f, -0.004832f, -0.011818f, 0.001822f, -0.007111f, -0.001330f, 0.001266f, -0.003968f, 0.006691f, 0.002523f, -0.000834f, -0.019481f, -0.008153f, -0.012284f, 0.000432f, -0.008042f, -0.012366f, -0.005423f, -0.006846f, -0.007557f, 0.012253f, -0.009828f, 0.008628f, 0.000738f, -0.003514f, 0.004837f, 0.004137f, -0.008810f, -0.002440f, 0.000171f, 0.009455f, -0.000913f, -0.012998f, -0.016462f, -0.017157f, 0.004448f, -0.006287f, 0.000369f, -0.001388f, 0.002471f, 0.005758f, 0.009514f, -0.006608f, -0.003488f, 0.003103f, 0.003270f, 0.001188f, 0.011936f, -0.006711f, 0.007381f, -0.013747f, 0.026880f, 0.003273f, -0.002862f, 0.005194f, 0.002574f, 0.005108f, -0.007471f, -0.001349f, 0.002044f, - -0.000861f, -0.001605f, -0.013597f, -0.004505f, -0.009251f, -0.002738f, -0.001111f, -0.006640f, -0.006530f, 0.004838f, 0.005609f, 0.001730f, 0.001078f, -0.000608f, 0.004735f, 0.002815f, 0.005441f, -0.002724f, 0.000453f, 0.000187f, 0.004998f, -0.001998f, -0.000325f, -0.000286f, 0.000532f, -0.003957f, 0.000951f, -0.002856f, 0.001425f, 0.002034f, -0.000981f, -0.003323f, 0.000642f, 0.001062f, -0.001061f, -0.001122f, -0.003629f, 0.000985f, -0.000447f, -0.001803f, 0.002250f, 0.002655f, -0.000358f, -0.012410f, 0.001904f, 0.002405f, 0.000917f, -0.001887f, -0.007394f, 0.004539f, 0.003651f, -0.011202f, 0.013347f, -0.016448f, 0.020487f, -0.001915f, 0.006896f, 0.003094f, -0.000329f, -0.002112f, 0.004285f, 0.019204f, 0.021534f, -0.004027f, 0.003949f, -0.002502f, -0.002957f, 0.002925f, 0.004641f, 0.014788f, -0.001778f, 0.004538f, -0.007353f, 0.008145f, 0.001879f, 0.011677f, 0.005706f, 0.010943f, -0.015568f, 0.006687f, 0.005799f, -0.004846f, -0.000071f, 0.011874f, 0.000144f, 0.001008f, 0.003681f, 0.007258f, -0.002340f, -0.000935f, 0.022838f, 0.010909f, 0.002110f, 0.002157f, -0.004659f, 0.010414f, - -0.013649f, -0.020054f, -0.024287f, -0.001414f, 0.012914f, -0.000308f, 0.006486f, 0.017420f, 0.006945f, -0.002983f, -0.006003f, 0.009328f, -0.001701f, 0.022375f, 0.010111f, 0.003392f, 0.003209f, -0.012079f, 0.002679f, 0.009271f, -0.004584f, -0.013611f, 0.002499f, 0.005014f, -0.000504f, -0.004672f, -0.001655f, 0.002417f, -0.004358f, 0.002663f, 0.002629f, 0.002414f, -0.000793f, 0.002773f, -0.004276f, -0.003982f, -0.001250f, -0.002496f, 0.001488f, -0.003997f, 0.002452f, 0.004096f, 0.002724f, 0.003111f, 0.003117f, 0.001043f, 0.002031f, -0.005544f, -0.004668f, -0.001685f, -0.002409f, -0.002854f, -0.000524f, 0.001976f, 0.001130f, -0.000114f, 0.003614f, 0.002004f, -0.000186f, 0.004541f, 0.002850f, -0.029679f, 0.003213f, -0.002216f, 0.020408f, -0.015226f, 0.008974f, -0.031427f, 0.012413f, -0.002938f, -0.016002f, -0.017584f, -0.012291f, 0.009425f, 0.007371f, 0.023909f, 0.003203f, 0.007986f, 0.022890f, -0.003939f, -0.016593f, 0.002531f, -0.012776f, 0.003168f, 0.018673f, 0.003501f, -0.005186f, -0.002183f, -0.003526f, 0.005516f, 0.007259f, -0.001499f, 0.004867f, 0.009639f, -0.005950f, 0.003078f, - -0.011224f, -0.000837f, -0.014057f, -0.002175f, 0.001971f, -0.006651f, 0.010455f, 0.007144f, 0.008918f, 0.017717f, 0.001181f, 0.021434f, 0.016434f, 0.007958f, -0.011076f, 0.024575f, 0.010614f, 0.004346f, 0.021561f, -0.002325f, 0.000536f, 0.001825f, 0.007193f, -0.004453f, -0.006226f, -0.014706f, -0.014206f, -0.011608f, 0.000186f, -0.009154f, 0.018929f, -0.011348f, 0.007866f, 0.011807f, -0.006555f, 0.000630f, -0.005348f, -0.003141f, -0.018477f, -0.021200f, 0.009770f, -0.003680f, -0.007054f, -0.006275f, 0.001882f, 0.002500f, 0.001505f, 0.004171f, -0.007344f, 0.017369f, 0.001296f, 0.005233f, -0.003483f, 0.000977f, 0.005245f, -0.008450f, 0.002932f, 0.000334f, 0.003007f, 0.003941f, 0.000061f, 0.003079f, 0.006015f, 0.000018f, 0.001797f, 0.004275f, 0.004804f, 0.006143f, -0.000167f, 0.001054f, -0.003050f, -0.000875f, 0.000411f, -0.001468f, -0.004349f, 0.000315f, -0.001181f, -0.001925f, 0.000592f, 0.024925f, 0.001005f, 0.000358f, -0.002243f, -0.004804f, 0.004525f, 0.001090f, -0.012632f, -0.016205f, -0.021981f, -0.011493f, -0.023001f, -0.014607f, -0.007798f, -0.017009f, -0.010734f, -0.007410f, - -0.008812f, -0.023013f, 0.015879f, 0.009963f, 0.000643f, 0.008389f, 0.003888f, -0.006358f, 0.028696f, 0.001807f, -0.009838f, -0.005152f, -0.019354f, -0.008307f, 0.021386f, 0.001079f, -0.017835f, -0.017848f, 0.002669f, -0.018067f, 0.005865f, 0.006388f, -0.014042f, 0.000596f, 0.004472f, 0.001038f, 0.021055f, 0.006323f, -0.009519f, 0.002156f, -0.011425f, 0.010631f, 0.001576f, 0.004727f, -0.025599f, 0.017736f, -0.008751f, 0.007410f, 0.000666f, 0.003467f, 0.004287f, 0.000695f, -0.007402f, -0.000558f, -0.009949f, 0.000054f, -0.020161f, -0.000079f, -0.021754f, 0.028814f, -0.004817f, 0.018344f, -0.013387f, -0.006265f, -0.002812f, -0.013864f, -0.007679f, 0.011277f, -0.000321f, -0.000398f, 0.008418f, 0.010842f, 0.001817f, 0.017684f, 0.015366f, 0.021262f, 0.011393f, 0.004545f, 0.002679f, 0.009673f, 0.005238f, 0.003242f, 0.004013f, 0.002219f, 0.004826f, -0.001298f, 0.007826f, 0.001388f, -0.000399f, -0.001587f, 0.006121f, 0.002490f, 0.004387f, 0.002191f, -0.002727f, 0.002099f, 0.002482f, 0.002038f, -0.004557f, 0.008937f, 0.004902f, -0.000818f, -0.006682f, -0.000698f, -0.000911f, -0.004836f, - 0.001892f, 0.000934f, 0.005176f, -0.004114f, -0.009263f, -0.012770f, -0.000066f, 0.009373f, -0.024514f, -0.000020f, -0.010604f, -0.008491f, 0.017338f, -0.028273f, -0.026708f, 0.006947f, 0.035583f, 0.000902f, 0.003373f, 0.002727f, -0.005437f, 0.019481f, 0.018914f, 0.010923f, 0.005357f, -0.005143f, -0.028946f, 0.017141f, 0.000134f, -0.023192f, -0.007492f, 0.005365f, -0.001184f, 0.000183f, 0.002357f, -0.005594f, -0.022839f, -0.001298f, 0.000921f, -0.004185f, -0.009550f, 0.006837f, 0.019786f, -0.025556f, 0.015879f, -0.009590f, -0.004824f, 0.001504f, 0.012597f, 0.041491f, -0.026856f, -0.006780f, 0.002621f, -0.002677f, -0.004927f, 0.001356f, -0.010305f, 0.003565f, -0.009308f, 0.028519f, 0.009799f, 0.005329f, 0.007860f, -0.006049f, -0.001662f, 0.015087f, -0.002389f, 0.006547f, -0.012574f, 0.021888f, 0.000959f, -0.015527f, 0.030624f, -0.019543f, 0.014092f, 0.004000f, 0.006943f, 0.022262f, -0.008897f, 0.009467f, -0.001100f, 0.000023f, 0.002671f, -0.001514f, -0.015056f, -0.007990f, -0.000983f, -0.006671f, -0.002376f, -0.003646f, -0.009242f, -0.009452f, -0.007097f, 0.004372f, -0.008095f, 0.004632f, - -0.002175f, -0.000354f, -0.007105f, -0.004873f, -0.005246f, 0.004145f, -0.009804f, 0.000959f, 0.000932f, 0.005919f, 0.009283f, -0.003671f, -0.001785f, -0.008396f, -0.007166f, 0.000476f, -0.006306f, 0.001745f, -0.001182f, -0.005594f, 0.000089f, -0.001714f, 0.002517f, 0.003322f, -0.002352f, 0.030376f, 0.002390f, 0.007934f, 0.009024f, -0.005063f, -0.017460f, -0.013685f, 0.002117f, 0.030388f, 0.017232f, 0.003759f, -0.027141f, 0.003936f, -0.014920f, 0.000112f, 0.030401f, 0.029245f, 0.014778f, 0.019776f, -0.017805f, -0.036884f, -0.019310f, -0.026576f, 0.014766f, -0.000239f, -0.004481f, -0.000076f, -0.020116f, -0.005951f, 0.006242f, -0.003756f, -0.007635f, -0.007414f, 0.021544f, -0.001364f, 0.005872f, -0.006091f, 0.014129f, 0.003022f, -0.008132f, -0.017092f, -0.013140f, 0.039005f, -0.001666f, -0.008781f, 0.012464f, -0.022238f, 0.006996f, -0.012713f, -0.038902f, -0.008696f, -0.005052f, 0.011813f, 0.004523f, 0.010383f, 0.003296f, 0.015435f, 0.000587f, 0.001108f, 0.008533f, -0.037993f, -0.006000f, -0.010177f, -0.002708f, 0.003734f, 0.021848f, 0.024169f, 0.008704f, -0.006272f, -0.016630f, -0.021813f, - -0.007331f, -0.012815f, 0.002761f, -0.006351f, -0.006809f, -0.015007f, 0.022526f, 0.016278f, 0.006603f, 0.020758f, -0.004926f, 0.008319f, 0.012707f, -0.008040f, 0.007570f, -0.005161f, 0.001660f, 0.007605f, -0.002296f, -0.004957f, -0.002079f, -0.002713f, -0.001965f, -0.000121f, 0.000513f, 0.007540f, 0.000304f, 0.000949f, 0.002302f, -0.004102f, -0.011510f, 0.000522f, -0.002682f, -0.001436f, -0.002082f, -0.006714f, -0.000768f, 0.002319f, 0.010240f, 0.008478f, -0.004750f, 0.001245f, 0.006738f, -0.001362f, 0.001552f, -0.002356f, 0.001546f, 0.006531f, 0.000814f, 0.007161f, -0.043999f, -0.028777f, -0.006685f, -0.010498f, 0.022436f, 0.015403f, -0.003712f, 0.038657f, -0.039125f, -0.009143f, -0.014783f, 0.041293f, 0.019797f, -0.013604f, 0.015207f, 0.005772f, -0.016108f, 0.028513f, -0.031498f, 0.015559f, -0.014519f, 0.002439f, 0.003407f, -0.010526f, 0.027532f, -0.019387f, 0.016898f, -0.008085f, -0.040564f, -0.006744f, 0.028299f, -0.017163f, -0.027702f, 0.000362f, -0.003473f, -0.041434f, -0.007765f, 0.016604f, 0.007028f, 0.022075f, 0.016225f, -0.004693f, 0.039821f, -0.009546f, -0.012287f, -0.019606f, - -0.018262f, -0.017658f, 0.010919f, 0.014867f, -0.012842f, -0.014477f, 0.004756f, -0.012558f, 0.016689f, -0.004610f, 0.009052f, -0.006793f, -0.010373f, -0.007959f, -0.000244f, -0.023452f, 0.006335f, 0.016901f, -0.003967f, 0.007307f, 0.010147f, 0.012000f, 0.021631f, -0.015495f, 0.006951f, 0.016875f, -0.002187f, -0.035954f, -0.038280f, 0.004213f, -0.003647f, 0.002844f, -0.014015f, -0.005817f, 0.002813f, -0.013860f, -0.025156f, -0.007682f, 0.018975f, 0.015404f, -0.007569f, -0.003060f, 0.005838f, 0.005213f, -0.002997f, -0.006102f, 0.000455f, -0.000796f, -0.009887f, -0.003653f, 0.010513f, -0.003010f, 0.008449f, 0.001540f, -0.002621f, -0.005157f, 0.006792f, 0.006707f, 0.007861f, 0.000964f, -0.004394f, 0.004583f, -0.011765f, -0.007040f, 0.005826f, 0.002742f, 0.005004f, 0.009206f, -0.004664f, 0.001936f, 0.003627f, 0.004511f, 0.000887f, -0.005339f, -0.007701f, 0.003501f, -0.004176f, -0.002532f, 0.031769f, -0.019652f, -0.049898f, 0.000464f, 0.036021f, 0.045894f, 0.008801f, -0.016590f, -0.012357f, 0.004932f, -0.007872f, -0.006973f, 0.020342f, 0.020586f, -0.009689f, 0.019871f, -0.024603f, -0.002812f, - 0.018257f, -0.008532f, 0.022049f, 0.010468f, -0.002715f, -0.029693f, 0.011754f, -0.006775f, -0.006802f, 0.001761f, -0.001920f, -0.002963f, 0.041374f, -0.019962f, 0.021277f, 0.035402f, 0.024729f, 0.013060f, 0.000788f, -0.023038f, 0.023598f, -0.012807f, 0.022503f, -0.012292f, 0.005465f, -0.024237f, -0.004359f, -0.022898f, -0.014820f, 0.003700f, -0.021145f, -0.005757f, -0.007131f, -0.000695f, 0.019517f, -0.022370f, -0.019029f, -0.006897f, -0.010764f, -0.004396f, -0.018851f, -0.024672f, -0.030715f, 0.003318f, 0.024519f, -0.001499f, -0.014930f, 0.002757f, 0.005549f, 0.019343f, -0.020684f, -0.011903f, -0.006317f, -0.000366f, 0.014802f, 0.000426f, 0.004460f, -0.014376f, -0.005627f, 0.007764f, 0.029581f, 0.013238f, 0.020591f, 0.023589f, 0.030897f, 0.012036f, -0.003624f, -0.010497f, 0.007929f, 0.009603f, 0.013956f, 0.006019f, 0.001839f, 0.000315f, 0.019008f, 0.006912f, -0.006257f, 0.001783f, 0.010932f, 0.004499f, 0.003108f, -0.006448f, -0.006012f, -0.004396f, -0.008592f, 0.000958f, 0.009345f, 0.008706f, 0.002487f, -0.004621f, 0.012808f, 0.007366f, 0.016061f, 0.008392f, 0.001137f, 0.010667f, - 0.000823f, -0.007650f, 0.012507f, 0.000266f, -0.000887f, -0.004143f, 0.003065f, -0.002467f, 0.000502f, 0.010690f, -0.084133f, -0.039993f, 0.028068f, -0.068698f, -0.047624f, -0.003067f, -0.028032f, -0.019214f, 0.020962f, 0.023984f, 0.007341f, -0.004397f, 0.008679f, 0.068621f, -0.008416f, 0.010991f, 0.026405f, 0.030118f, -0.031297f, -0.016218f, -0.014828f, 0.025353f, 0.027641f, 0.013916f, 0.005078f, 0.025923f, -0.007623f, -0.012947f, 0.018173f, 0.035079f, 0.002482f, 0.011361f, 0.035632f, 0.026334f, 0.021426f, -0.015959f, 0.006737f, 0.010844f, -0.000086f, -0.000539f, 0.022862f, -0.007452f, -0.000380f, -0.002261f, 0.015259f, 0.000629f, -0.025048f, -0.016691f, 0.004995f, -0.033919f, 0.025719f, -0.007484f, 0.056853f, 0.002334f, 0.031167f, 0.006258f, -0.001394f, -0.018270f, -0.000916f, 0.007367f, -0.024091f, -0.012305f, -0.028139f, -0.003472f, 0.014334f, 0.019664f, -0.008588f, -0.045646f, 0.016518f, -0.007181f, 0.015549f, -0.016309f, -0.019644f, 0.014448f, -0.029682f, -0.022575f, 0.044082f, 0.000757f, 0.020263f, -0.004062f, -0.019187f, 0.005409f, 0.025926f, 0.006437f, 0.020598f, -0.033396f, - -0.001748f, -0.002164f, -0.005641f, -0.028692f, 0.028029f, -0.016659f, 0.001966f, -0.003171f, 0.003293f, -0.010565f, -0.001151f, 0.006027f, 0.008510f, -0.007009f, 0.018311f, -0.004420f, -0.006006f, -0.010668f, -0.009329f, -0.009187f, 0.008733f, -0.003455f, -0.006638f, -0.002603f, 0.002213f, -0.006956f, 0.012749f, -0.003721f, 0.014442f, -0.009004f, 0.006051f, 0.002388f, 0.005682f, 0.009577f, 0.001776f, 0.034149f, -0.015523f, -0.039443f, 0.016966f, -0.020587f, 0.008671f, -0.000497f, -0.019612f, 0.036350f, -0.048538f, -0.001979f, -0.058600f, 0.001457f, 0.047435f, 0.066327f, 0.031414f, -0.011361f, 0.030702f, -0.002302f, -0.004199f, 0.003321f, -0.005142f, 0.016328f, -0.001957f, -0.031007f, 0.001879f, -0.043099f, 0.015249f, -0.013323f, -0.009549f, 0.028942f, -0.000517f, -0.033137f, -0.036999f, 0.008617f, 0.005195f, -0.018452f, -0.015313f, 0.027787f, -0.040108f, -0.000196f, -0.008026f, 0.014204f, -0.010702f, -0.008697f, -0.032062f, -0.013646f, -0.014103f, -0.005980f, 0.023269f, -0.027472f, 0.009991f, -0.003332f, -0.004670f, 0.003629f, 0.010092f, -0.046518f, -0.004848f, 0.006331f, -0.004004f, 0.017240f, - -0.014552f, -0.020544f, -0.009267f, -0.052055f, -0.022857f, -0.022682f, 0.001207f, 0.022255f, 0.033598f, -0.015815f, 0.025456f, -0.043401f, 0.069730f, 0.004798f, -0.012373f, 0.036439f, -0.043057f, 0.036573f, 0.016469f, -0.009748f, 0.000894f, 0.012222f, 0.001107f, 0.005867f, 0.033432f, -0.014208f, 0.014350f, -0.007681f, 0.010426f, 0.016633f, 0.016502f, 0.020014f, -0.006732f, 0.016881f, 0.004133f, 0.002562f, -0.002635f, -0.022390f, 0.001019f, -0.015876f, 0.007503f, 0.010366f, -0.003274f, -0.002454f, 0.003175f, 0.002310f, 0.011403f, 0.005222f, -0.007934f, 0.012214f, 0.000046f, 0.001480f, 0.015243f, 0.010328f, 0.006234f, 0.027346f, -0.022201f, 0.000223f, 0.010222f, 0.000087f, -0.017373f, 0.004339f, -0.010946f, -0.010510f, 0.042545f, 0.002271f, -0.030636f, -0.000831f, -0.004761f, 0.019654f, 0.012909f, -0.018750f, 0.021340f, 0.000245f, -0.048128f, -0.052403f, -0.005140f, -0.015889f, 0.012907f, -0.002392f, -0.018585f, -0.047248f, -0.041216f, 0.022263f, -0.035086f, -0.007992f, 0.002091f, 0.010919f, 0.002497f, 0.033436f, 0.002701f, -0.017125f, 0.022389f, -0.003136f, 0.003182f, 0.020631f, - -0.027481f, -0.001942f, 0.005833f, -0.028083f, 0.016842f, 0.023068f, 0.010023f, 0.020512f, 0.010694f, 0.031848f, 0.008641f, 0.023148f, -0.032813f, -0.010358f, -0.005309f, -0.044063f, -0.000322f, -0.004889f, 0.018303f, -0.003078f, 0.020995f, -0.003649f, -0.025575f, -0.017492f, -0.001394f, -0.040759f, 0.017737f, 0.000991f, -0.007968f, 0.023627f, 0.014977f, 0.019606f, 0.020408f, 0.006142f, -0.002528f, 0.017108f, -0.055153f, 0.016586f, 0.006872f, 0.024543f, -0.009804f, -0.039011f, 0.024430f, -0.005993f, 0.042033f, -0.062202f, -0.022163f, -0.043594f, 0.029696f, -0.012790f, -0.040019f, -0.044661f, -0.029401f, -0.013290f, 0.014149f, 0.011074f, -0.012274f, -0.012764f, -0.006698f, -0.000903f, -0.013545f, -0.005215f, 0.022685f, 0.003434f, -0.002214f, 0.006586f, 0.004932f, 0.004083f, 0.012303f, -0.009651f, -0.012710f, -0.000401f, -0.022055f, -0.000079f, -0.007761f, -0.003216f, -0.014243f, -0.003904f, -0.019424f, -0.017434f, 0.021967f, -0.012349f, -0.000811f, 0.007341f, 0.010576f, -0.001915f, 0.018441f, -0.015400f, -0.004972f, 0.007593f, -0.018097f, -0.004992f, 0.021172f, 0.007581f, 0.004746f, -0.007262f, - -0.010932f, 0.008171f, 0.029169f, 0.027043f, 0.098929f, 0.074747f, 0.010132f, 0.021671f, 0.006285f, 0.057427f, 0.001591f, 0.027950f, -0.026074f, 0.068012f, -0.026929f, 0.061677f, -0.002757f, 0.039394f, -0.004567f, 0.027797f, -0.027637f, 0.006650f, 0.013916f, -0.015179f, -0.004932f, -0.008166f, -0.006354f, 0.018378f, 0.000475f, -0.015903f, -0.021834f, -0.033039f, -0.041940f, -0.020219f, -0.007025f, 0.000222f, 0.013260f, -0.035406f, 0.015046f, -0.019504f, -0.029972f, -0.006287f, -0.021882f, 0.009979f, -0.005285f, -0.046070f, -0.010885f, -0.023449f, -0.027667f, -0.029174f, 0.026523f, 0.035285f, -0.073830f, 0.016711f, 0.006647f, 0.020701f, 0.007407f, -0.009378f, 0.044799f, 0.025093f, 0.023487f, -0.061914f, -0.027587f, -0.000878f, 0.015346f, 0.051142f, 0.002019f, -0.006995f, 0.002583f, 0.043309f, 0.039076f, -0.037005f, 0.041811f, 0.003013f, 0.009474f, -0.007139f, 0.024584f, -0.052721f, -0.018326f, 0.054162f, -0.008214f, -0.003620f, -0.020779f, 0.036079f, 0.023757f, -0.018806f, -0.031537f, -0.005564f, -0.001239f, 0.003105f, 0.000596f, -0.006885f, -0.029386f, -0.010214f, 0.023137f, 0.030045f, - 0.018833f, -0.016788f, -0.004277f, -0.005007f, -0.014142f, 0.004498f, 0.004906f, 0.013808f, -0.002931f, -0.009996f, 0.008863f, 0.003227f, 0.005398f, 0.027158f, 0.003849f, -0.007757f, -0.010240f, 0.004535f, 0.009946f, 0.021101f, 0.004417f, -0.020853f, -0.010909f, -0.015707f, 0.006309f, 0.007744f, -0.016961f, -0.036624f, 0.011934f, -0.003175f, -0.005981f, -0.012934f, -0.022295f, 0.026644f, -0.011261f, 0.023150f, 0.036295f, -0.042103f, 0.012403f, -0.024278f, 0.068843f, -0.041584f, 0.038673f, 0.035599f, -0.014261f, -0.065315f, -0.038225f, -0.004797f, -0.017756f, -0.002453f, -0.030223f, -0.047727f, -0.063317f, -0.036521f, -0.042333f, 0.017519f, -0.036282f, 0.014366f, 0.003735f, -0.004643f, -0.004218f, -0.029985f, -0.009624f, -0.030791f, 0.008363f, 0.026500f, 0.034894f, 0.000105f, -0.010461f, -0.031600f, -0.007919f, 0.002548f, -0.018984f, 0.004728f, -0.025989f, -0.017154f, -0.004158f, -0.025847f, 0.019508f, -0.022895f, -0.066470f, 0.001891f, -0.002549f, -0.022346f, 0.027608f, 0.021460f, 0.031530f, 0.011724f, 0.024703f, 0.050424f, 0.008077f, -0.051307f, -0.012079f, 0.023293f, -0.011657f, -0.042753f, - 0.023069f, 0.032842f, 0.010770f, -0.000825f, -0.057534f, 0.050367f, -0.002924f, 0.040997f, -0.035010f, 0.041521f, 0.102728f, -0.009739f, -0.003447f, -0.051025f, 0.026668f, -0.041624f, 0.034123f, 0.016968f, -0.023055f, -0.005669f, -0.056218f, 0.012221f, -0.030873f, -0.000148f, 0.020979f, 0.020863f, -0.001235f, -0.015043f, -0.012914f, 0.014687f, 0.037259f, -0.018959f, -0.003406f, 0.005153f, -0.016903f, -0.005440f, -0.005647f, 0.007263f, -0.002279f, 0.015187f, -0.007701f, -0.018762f, -0.010499f, 0.004814f, 0.013827f, -0.018589f, -0.006025f, -0.000954f, 0.002022f, 0.012639f, 0.002438f, -0.005192f, 0.004313f, -0.031102f, -0.017861f, -0.002536f, -0.003227f, 0.005653f, 0.001371f, 0.001804f, -0.000987f, -0.005922f, 0.015115f, -0.001498f, 0.011165f, -0.001421f, -0.003756f, -0.011904f, -0.008119f, -0.081031f, 0.027691f, -0.106323f, 0.070431f, 0.025314f, -0.018069f, 0.075068f, -0.007081f, -0.038018f, 0.066576f, -0.025442f, -0.003505f, 0.014205f, 0.023358f, 0.061592f, 0.002612f, -0.004836f, 0.043481f, 0.018582f, 0.036529f, 0.044765f, 0.033177f, 0.003238f, 0.023219f, 0.003845f, -0.002226f, -0.024222f, - 0.015724f, 0.023598f, 0.005749f, -0.001197f, -0.026266f, 0.012868f, -0.024603f, 0.029944f, 0.029420f, 0.005330f, 0.034741f, -0.021108f, 0.022965f, 0.036181f, 0.023009f, -0.048244f, -0.052042f, 0.061510f, -0.005856f, 0.038577f, 0.059560f, 0.001681f, 0.000138f, -0.005914f, 0.011775f, 0.034651f, 0.032727f, 0.003701f, 0.027198f, 0.000314f, -0.030869f, -0.038323f, -0.057142f, 0.001315f, -0.023162f, 0.001134f, 0.032500f, 0.030687f, -0.053457f, 0.004916f, 0.020826f, -0.046620f, 0.007857f, 0.065642f, -0.028270f, -0.032248f, 0.035109f, -0.037342f, 0.008727f, -0.010249f, 0.068541f, -0.019569f, 0.042350f, -0.020642f, 0.035596f, -0.002989f, 0.013246f, 0.028774f, -0.044720f, -0.013270f, 0.017068f, -0.029279f, 0.021749f, -0.026238f, -0.007354f, -0.014656f, -0.013687f, 0.002290f, -0.007354f, -0.011824f, 0.007170f, 0.020739f, -0.010255f, 0.005944f, 0.007429f, -0.017288f, 0.003117f, 0.002799f, -0.004555f, -0.012109f, -0.005170f, -0.009262f, -0.028761f, -0.011024f, 0.006152f, -0.037356f, 0.013649f, -0.018952f, 0.014549f, -0.008393f, -0.003679f, -0.026075f, -0.013860f, 0.000723f, 0.007290f, -0.011288f, - -0.025851f, 0.004707f, 0.001726f, 0.014264f, 0.005915f, 0.000439f, 0.016753f, 0.013879f, 0.001382f, 0.007702f, -0.037235f, 0.008230f, -0.043127f, 0.088475f, 0.021671f, -0.047352f, 0.017944f, -0.011052f, -0.042140f, -0.049676f, -0.050381f, 0.014822f, -0.002518f, 0.044333f, 0.065838f, 0.031571f, 0.015928f, -0.008073f, 0.021846f, 0.001993f, -0.082928f, 0.036255f, 0.086080f, -0.056485f, -0.059279f, -0.051298f, -0.072450f, 0.052259f, -0.071340f, 0.031971f, 0.000426f, -0.009055f, -0.000503f, -0.023303f, -0.027623f, 0.035243f, -0.073392f, 0.075258f, 0.043227f, 0.009855f, -0.048305f, -0.036631f, -0.032010f, 0.006592f, 0.012548f, -0.031394f, -0.004375f, -0.023230f, 0.051873f, 0.023359f, -0.009433f, -0.001756f, 0.021295f, 0.004610f, 0.024314f, -0.042654f, -0.016880f, -0.004265f, -0.007587f, -0.039698f, -0.027862f, 0.023260f, -0.075187f, -0.044530f, 0.005652f, 0.087610f, 0.042310f, -0.026981f, -0.001866f, -0.066991f, 0.032417f, 0.101643f, 0.003534f, -0.022145f, -0.015381f, -0.048357f, 0.062683f, -0.020427f, -0.024309f, -0.002367f, 0.037132f, 0.023104f, -0.032322f, -0.029355f, -0.010453f, 0.032500f, - -0.008796f, 0.009324f, -0.002609f, -0.026293f, -0.008485f, 0.041237f, 0.023729f, 0.003113f, -0.019310f, -0.003369f, -0.002962f, 0.032082f, 0.026332f, 0.012891f, 0.011879f, -0.038708f, 0.014663f, 0.013519f, -0.005771f, 0.008401f, -0.006027f, -0.005808f, -0.033641f, -0.003892f, -0.001731f, -0.005085f, -0.010735f, 0.008690f, 0.012335f, 0.006145f, -0.039544f, -0.034368f, -0.016759f, -0.000452f, 0.002426f, -0.040241f, 0.014254f, 0.049806f, 0.010140f, -0.014261f, 0.000980f, 0.007423f, 0.000203f, -0.000069f, -0.041384f, -0.028563f, -0.082556f, 0.017834f, -0.060875f, -0.090927f, 0.021151f, 0.050016f, 0.012176f, 0.013307f, -0.038592f, -0.048216f, -0.012665f, -0.071356f, -0.035168f, 0.018431f, -0.059764f, 0.093696f, 0.018090f, -0.023226f, 0.019996f, -0.045145f, -0.089093f, -0.029986f, -0.068187f, 0.010629f, 0.019674f, -0.025110f, -0.048557f, -0.024694f, -0.030035f, 0.025917f, -0.035678f, -0.013115f, -0.004806f, 0.039998f, -0.029255f, -0.005480f, -0.013792f, 0.010093f, 0.016580f, 0.002886f, -0.012221f, 0.041271f, 0.053981f, 0.034486f, -0.027964f, -0.022909f, -0.079926f, -0.044531f, -0.018441f, 0.020944f, - 0.133704f, -0.023053f, 0.001351f, 0.059457f, -0.005639f, 0.025227f, -0.030693f, -0.031880f, -0.025876f, 0.028124f, -0.075844f, 0.000404f, -0.010263f, -0.001131f, 0.065188f, -0.028935f, 0.098802f, 0.008602f, 0.074813f, -0.095826f, -0.028940f, 0.027519f, -0.002150f, -0.041667f, -0.035226f, 0.077489f, -0.080290f, -0.066179f, 0.095009f, 0.016639f, 0.082456f, -0.032998f, -0.005765f, -0.005884f, 0.026359f, 0.011251f, -0.007850f, 0.028037f, 0.027950f, -0.001647f, 0.013004f, 0.008775f, 0.002714f, -0.009900f, -0.018088f, -0.004163f, -0.012061f, -0.015887f, 0.014432f, 0.008455f, -0.013648f, 0.009506f, -0.029489f, -0.002955f, 0.020367f, 0.035978f, -0.003163f, -0.022775f, -0.001994f, -0.025909f, 0.014520f, 0.024730f, -0.017550f, -0.014242f, 0.013643f, 0.016498f, -0.037197f, 0.013202f, 0.001359f, 0.024089f, -0.015975f, -0.016181f, -0.000450f, 0.007660f, 0.010951f, -0.041523f, 0.006481f, -0.017563f, 0.032691f, -0.011438f, -0.004933f, -0.082201f, 0.039102f, 0.060263f, -0.043764f, -0.035985f, -0.012321f, -0.039525f, -0.047602f, 0.012665f, 0.014043f, 0.036920f, 0.001600f, 0.032254f, 0.057444f, 0.059922f, - 0.039771f, 0.013723f, -0.043996f, 0.004270f, 0.022843f, 0.030278f, 0.046605f, 0.000433f, -0.024153f, -0.035171f, -0.013281f, 0.047217f, -0.019417f, 0.018527f, 0.041067f, 0.003971f, 0.080710f, 0.009225f, -0.051532f, 0.044444f, 0.043968f, 0.012595f, 0.018957f, 0.040711f, 0.006520f, 0.003361f, -0.047286f, 0.102051f, -0.108891f, -0.080161f, -0.092885f, -0.030866f, 0.019230f, -0.054723f, 0.028064f, 0.060802f, -0.018054f, 0.005840f, 0.053741f, 0.017029f, -0.058191f, -0.020350f, -0.045028f, -0.006608f, 0.003380f, 0.002809f, 0.051973f, 0.050909f, -0.011709f, -0.013063f, 0.032665f, 0.078467f, 0.013686f, 0.064518f, -0.054524f, 0.057323f, -0.025188f, 0.018868f, -0.011459f, -0.036895f, -0.025487f, -0.006027f, 0.026083f, 0.015731f, 0.064222f, -0.083268f, 0.042315f, -0.033098f, -0.020461f, -0.016432f, 0.030809f, -0.014893f, -0.002836f, 0.006422f, -0.033251f, 0.020581f, -0.016247f, -0.001418f, -0.025229f, 0.007512f, -0.005068f, 0.000799f, -0.028417f, 0.003899f, -0.002563f, 0.005349f, -0.002736f, -0.031379f, 0.012445f, -0.018035f, -0.016042f, -0.007695f, 0.023186f, 0.026406f, 0.029657f, -0.025794f, - 0.050948f, -0.038764f, -0.011513f, 0.002483f, -0.004091f, -0.028783f, -0.015175f, -0.002093f, -0.021189f, 0.005607f, -0.001683f, -0.001407f, -0.002454f, -0.021505f, 0.002788f, -0.004021f, -0.046487f, -0.093536f, -0.094146f, -0.068136f, 0.013992f, 0.174922f, 0.044214f, -0.024119f, -0.052877f, -0.126387f, -0.177780f, 0.040147f, 0.073641f, 0.088402f, -0.018594f, 0.007669f, -0.052126f, -0.090689f, 0.026157f, 0.016475f, 0.029518f, 0.004273f, -0.076056f, -0.023232f, 0.018590f, -0.015284f, -0.002996f, -0.014383f, 0.099111f, 0.087035f, 0.058688f, -0.005362f, -0.042535f, -0.072240f, -0.047819f, -0.043225f, 0.067703f, -0.011209f, 0.049543f, 0.022413f, 0.023205f, -0.030446f, -0.164670f, -0.113368f, 0.055993f, -0.089203f, -0.030440f, 0.190007f, 0.130646f, 0.098175f, -0.074402f, 0.053779f, -0.051529f, 0.003785f, 0.003783f, 0.027591f, 0.080602f, 0.142052f, -0.054370f, -0.005047f, -0.093642f, -0.075649f, -0.123932f, 0.013472f, -0.005103f, -0.133434f, -0.031954f, 0.085986f, 0.032144f, 0.060024f, 0.081348f, 0.146576f, -0.106737f, -0.064049f, 0.008498f, -0.087114f, -0.011207f, 0.048756f, 0.114182f, 0.058066f, - 0.017852f, -0.069630f, -0.066761f, 0.045122f, -0.018987f, 0.067313f, 0.059184f, -0.015932f, 0.027135f, 0.010926f, -0.011344f, -0.022342f, -0.012992f, -0.008399f, 0.020135f, 0.005874f, -0.000469f, 0.007044f, -0.002039f, 0.009762f, 0.000315f, 0.042629f, 0.035059f, 0.055553f, 0.010055f, -0.030440f, -0.064152f, -0.052398f, 0.021410f, 0.049930f, 0.057195f, -0.007096f, -0.036439f, -0.147624f, -0.075831f, -0.069844f, 0.001752f, 0.007562f, 0.015171f, -0.000444f, 0.011083f, -0.016640f, 0.000008f, -0.024663f, -0.022040f, 0.031326f, 0.027655f, 0.016114f, 0.016280f, 0.008230f, 0.003788f, 0.043330f, -0.070261f, -0.232704f, -0.216543f, -0.124283f, -0.135165f, -0.033678f, 0.224208f, 0.113939f, 0.230674f, 0.204713f, 0.320849f, 0.229166f, 0.197121f, 0.031842f, -0.085531f, -0.193386f, -0.309932f, -0.263180f, -0.265074f, -0.138506f, -0.066488f, -0.015570f, 0.002238f, 0.007673f, 0.054754f, 0.073199f, 0.184495f, 0.112087f, 0.217720f, 0.141874f, 0.186632f, 0.067577f, 0.180333f, 0.062705f, 0.044130f, 0.042739f, -0.010711f, -0.050554f, -0.122050f, -0.140791f, -0.261484f, -0.179066f, -0.331353f, -0.262102f, - -0.402167f, -0.238368f, -0.189195f, -0.045581f, 0.110525f, 0.058856f, 0.009934f, 0.110406f, 0.235826f, 0.315103f, 0.413032f, 0.492411f, 0.421274f, 0.307830f, 0.383779f, 0.316737f, 0.177505f, 0.079913f, -0.019692f, -0.131952f, -0.305488f, -0.362737f, -0.485894f, -0.627235f, -0.725990f, -0.655043f, -0.577414f, -0.410847f, -0.280587f, 0.086045f, 0.270586f, 0.329908f, 0.507880f, 0.424163f, 0.529662f, 0.556768f, 0.546060f, 0.629623f, 0.413234f, 0.107448f, -0.104066f, -0.201662f, -0.249751f, -0.161599f, -0.233906f, -0.200411f, -0.234098f, -0.316656f, -0.320430f, -0.372895f, -0.220911f, -0.171848f, -0.146649f, -0.081833f, -0.005044f, 0.022103f, 0.090516f, 0.246019f, 0.259060f, 0.368024f, 0.320192f, 0.420889f, 0.309344f, 0.206865f, 0.213257f, 0.081432f, -0.056075f, -0.091262f, -0.405984f, -0.523181f, -0.487361f, -0.429882f, -0.251888f, -0.197509f, -0.108200f, 0.009526f, 0.109542f, 0.167268f, 0.227143f, 0.271422f, 0.322529f, 0.306463f, 0.289496f, 0.255079f, 0.142338f, -0.000567f, -0.072406f, -0.168279f, -0.176298f, -0.150816f, -0.123358f, -0.128319f, -0.130115f, -0.102088f, -0.073510f, -0.043437f, - -0.018375f, -0.016628f, -0.012075f, 0.003653f, -0.012774f, -0.014846f, 0.017627f, 0.041846f, 0.046475f, 0.030613f, 0.021475f, 0.035935f, 0.043311f, 0.031792f, 0.028928f, 0.026921f, 0.016867f, 0.011463f, 0.009708f}, - {-0.022382f, 0.008214f, -0.012780f, 0.006803f, -0.007245f, -0.014779f, -0.025478f, 0.004400f, 0.000678f, 0.006315f, 0.005545f, -0.001848f, -0.001942f, 0.001843f, 0.015282f, -0.010980f, -0.019535f, 0.006374f, -0.008126f, -0.013117f, 0.000154f, -0.002024f, 0.007981f, 0.002794f, 0.005671f, -0.005939f, -0.001532f, -0.003922f, 0.013006f, -0.003649f, -0.005366f, -0.004741f, -0.002384f, -0.003244f, -0.005331f, -0.004724f, -0.003298f, 0.002505f, 0.001031f, 0.001625f, 0.000368f, 0.003319f, 0.005474f, 0.002731f, -0.005023f, -0.014861f, -0.000227f, -0.010362f, 0.001413f, -0.000788f, -0.004760f, 0.006518f, 0.000369f, -0.000046f, -0.014800f, -0.006106f, 0.001890f, -0.001247f, 0.005060f, 0.000282f, 0.004494f, -0.004368f, 0.001816f, -0.001948f, 0.008999f, -0.003314f, 0.004699f, -0.008221f, -0.008172f, -0.010324f, 0.000425f, -0.002524f, -0.003067f, -0.000029f, -0.003658f, -0.000161f, -0.004252f, 0.000788f, 0.000101f, -0.001854f, -0.006525f, 0.000546f, 0.000586f, 0.003609f, 0.003179f, -0.000065f, 0.003392f, -0.000465f, -0.002782f, -0.000987f, -0.001359f, 0.001259f, -0.000112f, 0.000094f, 0.001876f, 0.001328f, - -0.000334f, 0.001690f, -0.001280f, -0.016016f, -0.003346f, -0.002140f, -0.004575f, -0.002087f, -0.005506f, 0.005251f, -0.002210f, -0.001898f, -0.000508f, 0.000080f, -0.000377f, -0.003881f, 0.014099f, 0.009074f, 0.014737f, -0.006956f, 0.014666f, -0.008751f, -0.006183f, 0.005701f, 0.016245f, -0.000384f, -0.009955f, -0.014621f, -0.010558f, -0.002041f, 0.011555f, 0.004547f, 0.003861f, 0.005140f, -0.005187f, 0.007894f, 0.000929f, 0.005895f, -0.002967f, -0.013318f, 0.003536f, -0.009220f, -0.006391f, -0.006472f, -0.001626f, -0.016901f, -0.000874f, 0.000785f, -0.007151f, 0.015765f, -0.003090f, -0.005110f, -0.006441f, -0.000167f, 0.001638f, -0.006768f, 0.000127f, -0.008298f, -0.003227f, 0.000223f, -0.003527f, 0.011339f, 0.000241f, -0.003059f, 0.006244f, 0.004074f, 0.010394f, 0.004223f, 0.012516f, 0.003113f, 0.010210f, -0.011779f, 0.002939f, 0.009423f, -0.003346f, -0.008409f, -0.011713f, -0.000219f, -0.001036f, -0.002306f, 0.002721f, 0.003421f, -0.002592f, 0.009043f, -0.007903f, 0.003015f, 0.003016f, -0.005769f, 0.004086f, 0.000970f, -0.004376f, 0.002289f, -0.001213f, 0.000918f, -0.004115f, 0.001259f, - 0.000346f, 0.000766f, -0.000597f, -0.000249f, 0.001808f, 0.000542f, 0.003475f, 0.018138f, -0.008159f, -0.006265f, 0.001864f, -0.003975f, -0.002946f, 0.009127f, -0.007006f, 0.008792f, 0.004059f, 0.000252f, 0.004510f, -0.005790f, -0.005525f, -0.010202f, -0.011009f, 0.014634f, 0.006938f, 0.005191f, 0.007841f, -0.005030f, -0.003353f, -0.003682f, 0.018450f, -0.007049f, 0.020189f, -0.000606f, -0.005079f, -0.004775f, -0.010620f, -0.011396f, -0.013873f, -0.000782f, -0.003461f, 0.002599f, 0.013495f, -0.001064f, -0.006260f, -0.018674f, 0.000697f, 0.014988f, 0.021918f, -0.010179f, 0.005689f, 0.004119f, -0.005525f, -0.004859f, 0.005746f, 0.020818f, -0.004908f, 0.003358f, -0.001741f, -0.002929f, -0.001906f, 0.010041f, 0.014384f, -0.010766f, -0.005863f, 0.004552f, 0.018847f, 0.003244f, 0.013358f, -0.010782f, -0.010066f, -0.000447f, -0.001639f, 0.003922f, 0.002888f, -0.000134f, 0.001209f, 0.002063f, -0.004873f, 0.002399f, 0.006118f, 0.004790f, -0.003658f, 0.012141f, -0.003040f, 0.007675f, -0.003924f, -0.004029f, 0.004542f, 0.003919f, 0.004108f, 0.001038f, 0.004282f, 0.000936f, -0.006228f, -0.004126f, - 0.001240f, -0.000179f, 0.002327f, -0.001053f, 0.003465f, -0.000029f, 0.001944f, -0.001740f, -0.000326f, -0.000041f, -0.000897f, -0.002044f, -0.000179f, -0.001197f, -0.000314f, -0.001464f, -0.001344f, 0.003528f, -0.000031f, -0.001505f, 0.003707f, 0.000202f, 0.029583f, -0.020574f, -0.004657f, -0.008630f, 0.002182f, 0.007777f, 0.014133f, -0.014408f, 0.009642f, -0.003864f, -0.015247f, -0.024562f, -0.005152f, -0.010511f, 0.001587f, -0.002463f, -0.010479f, -0.005406f, 0.005547f, 0.005905f, 0.018947f, 0.010474f, 0.009566f, 0.000881f, 0.002874f, -0.010014f, -0.006851f, 0.015232f, 0.011600f, 0.007865f, 0.003547f, 0.007253f, 0.001425f, -0.000041f, -0.012967f, -0.018235f, 0.011981f, -0.004937f, -0.012355f, -0.005918f, -0.007823f, 0.006390f, -0.006908f, 0.015314f, 0.003406f, -0.008974f, -0.004479f, -0.006894f, -0.006048f, 0.007438f, 0.011168f, -0.001060f, 0.007478f, -0.005682f, -0.006395f, -0.000041f, 0.001378f, -0.006049f, -0.002472f, 0.008816f, -0.000045f, -0.003753f, -0.004529f, 0.004768f, 0.005251f, -0.000764f, 0.006378f, 0.000832f, -0.004777f, 0.015298f, -0.002343f, 0.001620f, 0.000588f, -0.018590f, - 0.007074f, 0.005738f, 0.009459f, 0.006194f, -0.006934f, -0.001619f, -0.016860f, -0.007749f, -0.015486f, -0.005694f, -0.007030f, -0.000007f, 0.001304f, -0.010173f, 0.000283f, -0.002508f, -0.000131f, 0.004241f, -0.001693f, -0.001931f, -0.000500f, -0.002863f, 0.000335f, -0.001492f, 0.000991f, -0.001786f, -0.003936f, -0.001964f, -0.001125f, -0.006385f, -0.000746f, -0.000357f, 0.001137f, -0.000457f, 0.000603f, -0.000409f, -0.000023f, -0.003442f, -0.004550f, 0.000377f, -0.000816f, -0.002015f, 0.000640f, -0.020138f, 0.005365f, 0.000350f, -0.005871f, -0.010967f, 0.004777f, -0.010474f, -0.001814f, 0.018483f, 0.027926f, 0.013824f, 0.015410f, -0.001006f, -0.007585f, 0.011625f, 0.010412f, 0.004479f, 0.005619f, 0.013836f, -0.001893f, 0.010100f, 0.009789f, 0.014352f, 0.013750f, -0.011020f, 0.009256f, -0.000582f, 0.003326f, -0.010258f, 0.003286f, -0.001254f, 0.009429f, -0.003470f, -0.002523f, -0.007203f, 0.006890f, -0.011244f, -0.009138f, 0.001056f, 0.009892f, 0.005481f, -0.005791f, -0.002923f, -0.001714f, -0.003766f, 0.006014f, -0.013556f, 0.012699f, 0.000075f, 0.015771f, -0.022114f, 0.001668f, -0.019903f, - -0.006229f, -0.006252f, 0.005561f, -0.001962f, -0.004472f, 0.004533f, 0.001749f, 0.005535f, 0.008747f, 0.014342f, -0.001673f, -0.011279f, 0.002542f, 0.019280f, 0.003996f, -0.005408f, -0.001316f, 0.011941f, -0.006142f, 0.007321f, -0.005931f, -0.020321f, 0.011911f, 0.012676f, 0.011714f, -0.009972f, -0.015089f, -0.010803f, 0.012946f, -0.001240f, -0.001881f, 0.009244f, 0.003451f, 0.002390f, 0.001652f, -0.000498f, 0.003627f, 0.004889f, -0.001497f, -0.002446f, 0.002762f, 0.000429f, -0.000811f, 0.001758f, -0.002479f, 0.000891f, 0.004219f, -0.001563f, 0.004427f, -0.001674f, -0.003134f, 0.001680f, -0.000010f, 0.000173f, 0.002283f, 0.001837f, 0.002317f, 0.001905f, 0.001688f, 0.000032f, 0.002239f, -0.030559f, 0.000469f, -0.006816f, 0.002761f, -0.017139f, 0.002040f, 0.002769f, 0.022608f, -0.018181f, 0.000185f, -0.024372f, 0.005498f, -0.014751f, -0.003623f, 0.000835f, -0.008002f, 0.006970f, 0.003075f, -0.012794f, 0.000200f, -0.000258f, 0.011738f, -0.007761f, 0.018931f, -0.000298f, -0.016468f, -0.008460f, 0.020152f, -0.002014f, 0.008051f, 0.005298f, -0.003359f, 0.011993f, -0.013381f, -0.012715f, - -0.009858f, 0.001303f, -0.012814f, 0.013518f, -0.007513f, 0.008642f, -0.012406f, -0.000227f, -0.015068f, 0.009804f, 0.001306f, 0.011759f, 0.010564f, -0.010111f, 0.019881f, 0.016882f, 0.016005f, 0.003082f, 0.016808f, 0.013736f, -0.014286f, 0.012163f, 0.005842f, 0.001039f, -0.013261f, 0.006016f, -0.011286f, 0.011089f, -0.004856f, -0.008991f, -0.001089f, 0.016588f, 0.005932f, -0.019306f, 0.018308f, -0.001611f, -0.006481f, -0.011079f, 0.018651f, 0.016033f, -0.013907f, 0.013657f, -0.000997f, -0.016684f, 0.000205f, -0.009531f, -0.005169f, 0.009004f, -0.007986f, 0.006394f, -0.000664f, 0.002765f, -0.003821f, 0.004838f, -0.000678f, -0.000634f, -0.001098f, -0.001962f, 0.001769f, 0.000833f, -0.004627f, 0.001523f, 0.002325f, -0.000140f, 0.001738f, 0.001887f, -0.004339f, 0.000798f, -0.000505f, -0.000054f, -0.003654f, 0.001157f, -0.001485f, -0.002373f, -0.004867f, 0.005472f, 0.001197f, -0.002821f, -0.000732f, 0.043555f, 0.007410f, -0.001728f, -0.015007f, -0.028200f, 0.007210f, -0.004145f, -0.041398f, 0.036336f, -0.017591f, -0.026267f, 0.005561f, -0.001667f, 0.004903f, -0.001685f, 0.007050f, 0.010488f, - 0.000147f, -0.000655f, -0.021153f, -0.001744f, -0.002000f, 0.024966f, -0.004549f, 0.000664f, 0.009192f, -0.004362f, -0.003064f, -0.010136f, 0.021315f, -0.015968f, 0.015404f, -0.003781f, -0.012758f, 0.002409f, -0.014264f, -0.007236f, -0.023171f, 0.004104f, 0.010651f, -0.006247f, -0.011556f, -0.009132f, 0.014021f, -0.021705f, -0.005129f, -0.010692f, -0.000294f, -0.003091f, 0.002839f, -0.018825f, 0.018373f, -0.025711f, -0.017589f, 0.007008f, 0.003118f, -0.000949f, 0.006885f, -0.013321f, -0.019197f, 0.002410f, -0.005212f, -0.000850f, 0.009442f, -0.011452f, 0.008561f, 0.005982f, 0.021201f, -0.005839f, 0.003054f, -0.001599f, 0.000320f, 0.029414f, 0.002477f, 0.029124f, -0.007008f, -0.010888f, 0.003331f, -0.014925f, -0.001318f, 0.014905f, 0.001213f, -0.017367f, -0.015220f, 0.004315f, -0.001601f, 0.000110f, 0.014951f, 0.001207f, -0.002788f, 0.006249f, -0.000831f, -0.000555f, -0.006955f, 0.002633f, 0.003288f, -0.003455f, -0.000073f, -0.001671f, 0.005790f, -0.002554f, -0.001143f, 0.003018f, 0.000793f, 0.001857f, -0.000520f, 0.003363f, -0.001058f, 0.000080f, 0.001791f, -0.003589f, 0.004571f, -0.002810f, - 0.001714f, 0.003886f, 0.002112f, 0.003678f, 0.001027f, -0.032104f, -0.004340f, -0.006651f, -0.026074f, -0.044780f, 0.013608f, 0.023026f, -0.016510f, -0.008013f, 0.012955f, -0.004960f, 0.027649f, -0.003241f, -0.015009f, -0.008994f, -0.041749f, 0.013923f, 0.004542f, -0.003927f, -0.029371f, 0.006774f, -0.016404f, -0.004415f, -0.014419f, -0.007432f, 0.020613f, -0.020056f, 0.008441f, -0.029633f, 0.018742f, 0.003641f, 0.000225f, -0.008636f, 0.002079f, -0.003975f, -0.016647f, -0.031189f, 0.005879f, -0.000064f, 0.006503f, 0.012911f, -0.007700f, -0.002604f, -0.020137f, -0.010393f, -0.005505f, 0.008353f, 0.005572f, 0.014625f, 0.023374f, 0.018290f, 0.009312f, 0.013931f, 0.004113f, 0.014526f, 0.013009f, -0.012932f, 0.014924f, 0.016935f, -0.003659f, 0.022717f, -0.002536f, 0.026672f, -0.012003f, -0.028862f, -0.004860f, 0.018253f, 0.020034f, 0.023113f, -0.004640f, -0.040229f, -0.004194f, -0.002223f, 0.001359f, -0.001445f, -0.010033f, 0.005672f, -0.029449f, 0.022717f, 0.014217f, 0.013744f, -0.015500f, -0.014568f, -0.003363f, 0.008401f, -0.001205f, -0.016284f, -0.000025f, -0.007994f, -0.013346f, -0.005370f, - -0.002352f, -0.006383f, 0.000419f, -0.005406f, 0.002496f, -0.003400f, -0.001996f, 0.004156f, 0.000621f, 0.001856f, -0.002278f, -0.005862f, -0.006601f, 0.004418f, -0.005303f, -0.000251f, -0.002053f, 0.002692f, -0.002273f, -0.001381f, -0.002254f, 0.006670f, 0.003383f, 0.001993f, -0.002284f, 0.042743f, -0.009394f, -0.010254f, 0.014258f, 0.023019f, -0.001648f, 0.010719f, 0.026649f, 0.019261f, -0.043748f, -0.040188f, 0.000328f, -0.003853f, 0.005895f, -0.017956f, -0.031919f, 0.007591f, 0.025583f, 0.016917f, -0.018533f, 0.030114f, 0.024314f, 0.022844f, -0.038354f, 0.010873f, 0.020101f, 0.001049f, 0.003049f, 0.017136f, 0.039494f, -0.007619f, -0.018072f, 0.012002f, 0.008941f, -0.005364f, 0.021338f, 0.031899f, 0.005937f, 0.033046f, 0.014420f, -0.024771f, 0.002776f, 0.027408f, -0.002977f, -0.011226f, 0.014166f, 0.002311f, 0.005374f, 0.028767f, 0.018434f, 0.009802f, 0.003385f, -0.033353f, -0.034026f, -0.002821f, 0.005361f, 0.008904f, -0.010521f, -0.001457f, -0.008821f, 0.003009f, 0.004210f, -0.012710f, 0.004791f, -0.007794f, -0.002018f, -0.010796f, 0.001185f, 0.021268f, -0.012601f, -0.030663f, - -0.004833f, -0.026076f, 0.005709f, -0.009288f, -0.000723f, -0.003474f, 0.012280f, -0.004581f, 0.008877f, -0.000084f, 0.007604f, 0.003650f, -0.003606f, -0.004129f, -0.005377f, -0.015106f, 0.005453f, 0.002011f, 0.003731f, 0.000546f, -0.011776f, 0.005928f, -0.009230f, -0.007662f, -0.002743f, -0.009850f, -0.002163f, -0.003189f, -0.003774f, -0.003066f, 0.006345f, -0.002794f, 0.004199f, -0.000349f, 0.003358f, 0.000665f, 0.008209f, -0.003528f, 0.002148f, -0.006642f, -0.001804f, -0.005687f, -0.005359f, -0.001032f, -0.003984f, 0.012826f, 0.005267f, 0.000546f, -0.001900f, -0.001731f, -0.071686f, -0.044835f, -0.013800f, 0.012654f, -0.004702f, -0.018133f, 0.002862f, -0.017682f, 0.049634f, -0.020563f, 0.031719f, 0.048985f, 0.026394f, 0.023962f, -0.019643f, 0.017134f, -0.009930f, -0.023218f, 0.019554f, 0.022907f, 0.015046f, 0.032870f, -0.000176f, -0.002092f, -0.015065f, -0.015402f, -0.013244f, -0.021073f, -0.020568f, -0.014213f, 0.007337f, 0.002407f, -0.000588f, -0.013405f, -0.007508f, -0.020465f, 0.007956f, -0.017734f, -0.016175f, -0.007450f, 0.007992f, -0.000514f, -0.011054f, -0.029618f, 0.003082f, -0.009066f, - 0.010161f, -0.034863f, -0.027089f, 0.029769f, -0.005041f, -0.006279f, -0.014406f, -0.009012f, 0.022206f, 0.006891f, -0.005126f, 0.011961f, -0.003830f, 0.012463f, 0.009810f, 0.014284f, -0.011016f, -0.017837f, -0.044240f, 0.002585f, -0.042923f, -0.003347f, -0.036406f, -0.005653f, 0.033540f, -0.004760f, 0.005561f, -0.024724f, -0.010970f, -0.012987f, 0.002248f, -0.016050f, -0.009535f, 0.014840f, 0.018542f, -0.002451f, -0.002421f, 0.001684f, -0.009174f, 0.002744f, -0.001481f, -0.009005f, -0.003991f, -0.007777f, -0.003373f, -0.004632f, -0.020211f, 0.002950f, -0.003816f, -0.003049f, 0.000703f, -0.005881f, -0.006903f, -0.014050f, -0.003697f, -0.008336f, -0.009894f, -0.002245f, -0.012328f, -0.005985f, 0.001420f, -0.007892f, -0.009137f, 0.000582f, -0.007731f, 0.001913f, 0.002260f, 0.008001f, -0.005677f, 0.005448f, 0.002270f, -0.008227f, -0.003473f, -0.002344f, -0.004141f, 0.001069f, -0.002271f, -0.002728f, 0.049130f, 0.000943f, -0.035602f, -0.030207f, 0.030825f, 0.024144f, -0.022785f, -0.022046f, 0.041341f, 0.026229f, 0.001524f, -0.024580f, 0.002975f, -0.010367f, 0.019620f, -0.015280f, 0.002351f, -0.006509f, - -0.004490f, 0.042681f, -0.006017f, -0.011706f, 0.007960f, 0.007204f, 0.012816f, 0.013131f, 0.001491f, -0.016946f, 0.012813f, 0.006382f, 0.014679f, 0.032978f, 0.015186f, -0.047689f, -0.013574f, -0.007852f, -0.036388f, 0.014015f, -0.006273f, 0.000647f, -0.020255f, 0.017066f, -0.007835f, 0.003178f, -0.026352f, 0.017806f, -0.021453f, 0.001656f, 0.021270f, -0.003521f, 0.022437f, -0.017587f, 0.027969f, -0.035891f, 0.017938f, 0.000277f, -0.012814f, 0.046659f, 0.012554f, -0.009865f, -0.027827f, 0.012001f, -0.005658f, 0.003708f, -0.004161f, 0.016974f, 0.025611f, 0.034251f, -0.021689f, 0.015313f, -0.008548f, 0.030614f, 0.011363f, 0.004242f, -0.002748f, 0.018288f, 0.003377f, -0.012386f, 0.015071f, -0.010814f, -0.017921f, -0.007972f, -0.024403f, 0.000147f, -0.027348f, -0.002506f, -0.018401f, 0.020971f, -0.006617f, 0.013415f, -0.014713f, 0.000372f, -0.008198f, 0.012644f, -0.003981f, -0.001422f, -0.008116f, 0.004139f, -0.006064f, -0.010123f, -0.005620f, 0.004089f, -0.009476f, 0.005606f, -0.007488f, 0.003356f, -0.004814f, -0.004982f, -0.004809f, -0.010786f, -0.006054f, 0.000040f, -0.007610f, -0.007233f, - 0.009857f, 0.008235f, 0.004701f, -0.005138f, -0.012312f, -0.001556f, 0.005502f, -0.000688f, -0.009528f, -0.005986f, -0.071788f, -0.046590f, 0.038214f, -0.028528f, -0.026784f, 0.014534f, 0.033423f, -0.055814f, -0.009494f, 0.012956f, 0.003314f, -0.029272f, -0.043721f, 0.081331f, -0.035446f, 0.010811f, -0.040264f, 0.021776f, -0.014194f, 0.037884f, 0.033647f, 0.003153f, 0.005755f, -0.045599f, -0.000312f, 0.021161f, -0.018618f, -0.027297f, 0.021235f, 0.005813f, 0.022917f, 0.018142f, -0.004092f, 0.007461f, -0.005342f, -0.003154f, 0.033919f, -0.029307f, -0.017306f, 0.027135f, -0.001353f, -0.022188f, 0.028775f, -0.001141f, -0.006601f, -0.019860f, -0.008876f, 0.010446f, -0.015529f, -0.002005f, 0.009995f, -0.019707f, -0.020142f, -0.013224f, 0.014497f, -0.042471f, 0.019964f, -0.002187f, 0.039956f, -0.037985f, 0.012362f, -0.028948f, 0.010411f, -0.017481f, -0.022155f, 0.035959f, -0.020188f, -0.009067f, -0.019654f, 0.015404f, -0.022454f, 0.012930f, -0.007748f, 0.026233f, 0.026991f, -0.003658f, -0.042501f, 0.016668f, 0.017456f, -0.002278f, -0.001506f, -0.024419f, -0.016868f, -0.004262f, -0.020987f, -0.016999f, - -0.006047f, -0.000746f, -0.010516f, -0.014020f, 0.015610f, 0.005036f, -0.009973f, -0.008474f, -0.010184f, -0.010877f, 0.011326f, 0.003983f, 0.002634f, -0.016224f, -0.006226f, 0.013494f, -0.008111f, -0.010053f, 0.006330f, -0.007269f, -0.000059f, 0.004758f, 0.007905f, -0.003522f, -0.013320f, 0.002395f, 0.007796f, -0.017911f, 0.000322f, 0.004334f, 0.000342f, -0.009558f, -0.005389f, 0.000206f, -0.004264f, 0.035950f, 0.017466f, -0.040483f, 0.013795f, 0.043551f, -0.003851f, 0.000099f, 0.020086f, -0.013026f, 0.030522f, 0.027637f, -0.036555f, -0.022404f, -0.006757f, 0.019301f, 0.034850f, 0.006198f, 0.018505f, 0.039367f, 0.029431f, -0.041396f, -0.004480f, 0.065793f, 0.016208f, -0.004372f, -0.007808f, -0.012368f, -0.019366f, 0.005814f, 0.016076f, 0.017979f, 0.016673f, -0.011749f, -0.028142f, 0.007572f, -0.014660f, 0.015450f, 0.045357f, -0.012051f, -0.045654f, 0.054603f, -0.016512f, -0.030044f, 0.044152f, -0.007947f, -0.013249f, -0.047300f, -0.008589f, 0.019596f, 0.009259f, -0.010252f, -0.020059f, 0.018317f, 0.001863f, -0.021895f, 0.018712f, -0.004365f, 0.043056f, -0.031719f, 0.004407f, -0.006167f, - 0.049334f, 0.016883f, -0.070331f, 0.022056f, -0.029455f, -0.012282f, -0.025218f, 0.030420f, 0.100406f, 0.036763f, 0.005717f, 0.023302f, 0.029138f, -0.037029f, -0.015856f, -0.010389f, -0.021300f, -0.012761f, -0.023566f, 0.022169f, -0.051767f, -0.013640f, 0.004515f, 0.006220f, -0.017078f, 0.003263f, 0.008940f, -0.005003f, -0.006724f, 0.017615f, 0.003052f, 0.011779f, 0.009566f, -0.010534f, 0.002809f, 0.008739f, 0.003118f, 0.007320f, -0.005502f, 0.004516f, -0.010238f, 0.001399f, -0.003255f, -0.009537f, -0.005285f, -0.002114f, 0.015507f, 0.000937f, 0.003847f, 0.000709f, -0.003518f, -0.003166f, 0.001070f, -0.001339f, -0.014849f, -0.001699f, 0.002094f, -0.003399f, -0.011522f, -0.026165f, -0.009812f, -0.007888f, 0.015154f, -0.002618f, 0.003085f, -0.015207f, -0.053090f, -0.022519f, 0.003759f, -0.021482f, -0.066856f, 0.058198f, -0.011044f, 0.026299f, 0.005053f, -0.030583f, -0.052728f, -0.050787f, 0.057201f, 0.034898f, 0.013204f, -0.020008f, -0.038092f, -0.028486f, -0.045253f, -0.011528f, 0.017008f, -0.006929f, 0.003798f, 0.007365f, -0.007353f, -0.023366f, -0.022501f, -0.038422f, -0.013747f, -0.007275f, - 0.019042f, 0.013365f, 0.020925f, -0.010202f, -0.017177f, -0.007095f, 0.027322f, 0.004018f, 0.024197f, -0.080463f, -0.018915f, 0.000038f, 0.017763f, -0.025570f, -0.001060f, -0.029617f, 0.023395f, 0.020690f, 0.003992f, 0.099725f, 0.001641f, 0.031275f, 0.041032f, 0.001939f, 0.013290f, 0.000786f, -0.007114f, -0.011809f, 0.020700f, 0.030482f, 0.039692f, -0.000718f, -0.007442f, 0.002899f, 0.026088f, 0.023846f, 0.000884f, 0.019367f, 0.016611f, 0.013096f, -0.005271f, 0.039156f, -0.011213f, 0.050196f, -0.049409f, -0.024534f, -0.060779f, -0.018754f, 0.010895f, 0.001649f, -0.015740f, 0.003437f, -0.000196f, 0.027409f, -0.005513f, 0.032803f, -0.014924f, -0.011938f, -0.016400f, 0.008603f, 0.018336f, -0.002808f, -0.008909f, -0.009728f, 0.011318f, 0.000332f, 0.038040f, -0.005867f, -0.002612f, 0.006985f, 0.010679f, 0.015840f, -0.013154f, -0.001015f, 0.005099f, 0.007899f, -0.018158f, 0.006472f, 0.006926f, 0.023482f, -0.023084f, 0.013281f, 0.008803f, -0.009681f, 0.019799f, -0.011014f, -0.013565f, 0.000236f, -0.004600f, 0.010300f, 0.005083f, -0.007989f, -0.000241f, 0.008491f, 0.001942f, 0.020479f, - -0.000948f, 0.013447f, 0.037791f, -0.006968f, 0.001666f, 0.009953f, -0.051718f, 0.002169f, 0.007422f, 0.032556f, 0.049664f, -0.042266f, 0.009364f, -0.026646f, 0.035401f, 0.032095f, 0.004066f, 0.061616f, 0.019224f, 0.024540f, -0.022454f, -0.003608f, -0.039323f, 0.061563f, -0.035770f, 0.009624f, 0.037673f, -0.008959f, -0.024217f, 0.019028f, -0.005530f, 0.009630f, 0.040446f, 0.001055f, -0.012809f, -0.003718f, 0.007595f, -0.001270f, -0.023977f, 0.017777f, -0.002279f, -0.006799f, 0.069051f, -0.053044f, 0.049964f, 0.032256f, 0.062348f, 0.025406f, -0.044048f, 0.034116f, 0.000710f, 0.031704f, 0.082101f, -0.059192f, -0.024511f, -0.007605f, 0.001616f, 0.055821f, -0.033086f, 0.002921f, -0.035531f, 0.002809f, 0.062945f, -0.007071f, 0.065321f, 0.018425f, 0.011191f, 0.029708f, -0.039866f, -0.006580f, 0.028734f, 0.040661f, -0.066003f, -0.002333f, -0.056549f, 0.025367f, -0.029395f, -0.000952f, 0.013408f, 0.018451f, 0.001427f, -0.020102f, -0.016009f, -0.061834f, -0.007014f, -0.043922f, 0.035665f, 0.003109f, -0.002760f, 0.027778f, 0.001576f, -0.000119f, 0.026680f, 0.019925f, 0.013425f, 0.000352f, - -0.008969f, 0.012600f, -0.020876f, -0.001538f, -0.014316f, 0.014355f, 0.014932f, -0.012603f, -0.002414f, -0.026819f, 0.011920f, -0.001645f, -0.000011f, -0.000712f, -0.026042f, -0.031385f, -0.010379f, 0.010180f, 0.023832f, 0.012134f, 0.010761f, -0.003775f, 0.019963f, 0.013898f, -0.000868f, -0.010141f, 0.017369f, -0.024716f, -0.006943f, 0.005168f, 0.027996f, 0.023151f, 0.005020f, -0.011261f, -0.039986f, 0.011232f, -0.069971f, -0.061669f, 0.000891f, 0.000832f, -0.039169f, 0.031764f, 0.009184f, -0.010713f, -0.036349f, 0.049389f, -0.011540f, 0.073528f, -0.010769f, 0.015776f, 0.026526f, -0.035905f, -0.011986f, 0.011123f, -0.042725f, -0.024148f, -0.037369f, 0.031948f, -0.029946f, -0.008263f, -0.009859f, 0.027629f, -0.025254f, -0.042746f, -0.059451f, -0.001913f, 0.049364f, 0.002767f, -0.027284f, -0.011805f, -0.034533f, -0.011773f, 0.000244f, 0.020377f, -0.038888f, -0.004583f, -0.008515f, -0.027940f, -0.038222f, 0.001569f, 0.006329f, 0.024424f, 0.008410f, 0.042152f, 0.011714f, 0.053257f, -0.022385f, 0.043920f, -0.011322f, -0.034791f, -0.009056f, 0.071592f, -0.031097f, 0.032466f, -0.022810f, 0.052444f, - -0.027948f, 0.017497f, 0.033417f, -0.002301f, -0.013850f, 0.006078f, -0.019132f, 0.047650f, -0.044000f, -0.016884f, 0.047834f, -0.006216f, -0.039984f, 0.001562f, 0.036560f, 0.020014f, 0.036564f, -0.037285f, -0.031440f, -0.020292f, -0.004075f, 0.035746f, 0.043614f, -0.077586f, 0.004070f, 0.022015f, -0.042408f, 0.006649f, 0.026764f, 0.020492f, 0.019634f, 0.018828f, 0.012820f, -0.006270f, 0.001412f, 0.014340f, 0.016444f, 0.013037f, 0.033005f, -0.010383f, 0.017356f, 0.006968f, 0.035732f, 0.020899f, -0.027573f, -0.035241f, 0.011113f, 0.037159f, -0.010676f, -0.010774f, -0.023900f, -0.041136f, 0.004710f, -0.035166f, -0.010912f, 0.007574f, -0.023135f, 0.021208f, 0.006205f, -0.007630f, -0.019099f, -0.004080f, -0.019797f, -0.002020f, 0.011036f, 0.004796f, 0.003145f, -0.003877f, -0.004825f, -0.066349f, 0.073166f, -0.024184f, 0.062319f, -0.012846f, 0.050085f, 0.004341f, -0.015495f, -0.034008f, -0.024018f, -0.004360f, 0.000885f, 0.036861f, -0.013840f, -0.002661f, 0.010665f, -0.033231f, 0.054077f, 0.020329f, 0.002154f, -0.044210f, 0.030600f, 0.016228f, -0.035273f, 0.034849f, 0.003172f, -0.005229f, - 0.008893f, -0.000848f, 0.045679f, -0.010193f, -0.057081f, 0.062089f, -0.031743f, -0.004778f, 0.046130f, -0.020049f, -0.009904f, -0.027229f, 0.072724f, -0.032273f, -0.008827f, -0.045142f, -0.008680f, 0.005799f, 0.065020f, -0.030125f, 0.012347f, 0.020929f, 0.038714f, -0.009881f, -0.041025f, 0.045116f, 0.027345f, 0.036680f, -0.017641f, -0.008449f, 0.004726f, 0.040616f, -0.022240f, -0.047035f, -0.052673f, 0.028404f, -0.036853f, 0.009753f, 0.039592f, 0.036920f, -0.025668f, -0.008541f, 0.053245f, -0.084413f, -0.001887f, 0.011996f, 0.029420f, -0.003619f, -0.030802f, -0.005864f, 0.048568f, -0.009099f, 0.099603f, 0.039243f, -0.028338f, -0.003526f, 0.003053f, -0.011665f, -0.035906f, -0.043815f, -0.032193f, 0.027994f, -0.020802f, -0.008247f, -0.000721f, 0.043719f, 0.018929f, -0.014701f, 0.019276f, 0.014341f, -0.000469f, 0.006725f, 0.008184f, -0.000184f, 0.006150f, 0.044781f, 0.036728f, 0.035715f, 0.024234f, 0.003752f, -0.021744f, 0.012161f, -0.016960f, 0.021666f, -0.026157f, 0.028942f, 0.041879f, 0.014251f, 0.053013f, 0.057394f, 0.023278f, -0.000155f, 0.030075f, 0.010683f, -0.005314f, -0.017770f, - 0.031260f, -0.007708f, -0.024742f, 0.000068f, 0.015226f, -0.006714f, 0.013275f, 0.024880f, 0.009444f, 0.025386f, -0.014153f, -0.016146f, -0.093703f, 0.031915f, 0.018244f, 0.083569f, 0.073230f, -0.010828f, -0.027030f, -0.086105f, 0.002538f, 0.028841f, -0.036854f, 0.028172f, 0.050441f, 0.049075f, -0.022717f, 0.059075f, 0.052809f, 0.002566f, -0.031834f, -0.034089f, 0.053925f, 0.046152f, -0.065472f, -0.089247f, 0.118744f, 0.006244f, -0.008369f, 0.015681f, 0.008836f, 0.044146f, 0.043826f, -0.017494f, -0.014935f, 0.061974f, 0.029468f, -0.010941f, -0.041068f, 0.025080f, 0.005012f, 0.003485f, 0.022100f, 0.003251f, -0.001863f, -0.024521f, 0.013932f, -0.007216f, -0.030173f, 0.055734f, -0.088329f, 0.061855f, 0.051250f, -0.083530f, -0.005739f, 0.042896f, 0.010867f, 0.048917f, -0.011320f, 0.007062f, 0.044712f, -0.005663f, 0.022882f, -0.041068f, -0.065299f, 0.184342f, -0.075209f, -0.105670f, -0.023051f, 0.205277f, 0.088646f, -0.087176f, -0.019670f, 0.036441f, 0.025160f, -0.001640f, -0.052668f, 0.077326f, 0.043266f, 0.032573f, 0.007743f, -0.103852f, -0.016953f, 0.017170f, 0.031130f, -0.042520f, - -0.070572f, 0.006469f, 0.022509f, 0.010005f, -0.033222f, -0.035107f, 0.017163f, 0.009733f, 0.025800f, -0.004529f, -0.008424f, -0.002350f, 0.027565f, 0.035025f, 0.024228f, -0.052184f, -0.020068f, 0.037193f, 0.027468f, -0.026188f, 0.000325f, 0.030364f, 0.053784f, 0.021134f, -0.028018f, -0.038040f, -0.049760f, 0.023805f, -0.015756f, 0.022153f, -0.042012f, 0.023956f, 0.012571f, 0.026963f, -0.019087f, -0.010016f, -0.033654f, -0.014225f, 0.033778f, 0.006334f, -0.027522f, 0.015574f, 0.050909f, 0.013435f, -0.036619f, -0.023114f, 0.046112f, 0.079855f, 0.005579f, 0.132623f, -0.058805f, -0.022616f, 0.076964f, 0.003800f, -0.004332f, -0.039578f, -0.079005f, 0.065681f, -0.041138f, -0.044844f, 0.034154f, -0.049780f, 0.024780f, -0.047203f, -0.052198f, -0.008821f, 0.011550f, 0.007398f, -0.012206f, 0.062825f, 0.015868f, 0.038304f, 0.018528f, 0.001059f, 0.001112f, -0.028402f, -0.060198f, 0.019282f, 0.060317f, -0.049167f, 0.042172f, -0.050121f, -0.005064f, -0.002775f, -0.077343f, 0.055140f, -0.026702f, 0.021455f, 0.001681f, -0.022839f, 0.001488f, -0.056085f, 0.057742f, -0.040618f, 0.019412f, -0.065293f, - -0.039481f, -0.085635f, 0.032518f, -0.040063f, -0.044822f, -0.036435f, -0.018522f, -0.000012f, 0.091285f, 0.032520f, 0.045240f, -0.012538f, -0.042405f, -0.053987f, 0.014446f, 0.003218f, -0.092650f, -0.043316f, -0.163076f, -0.076962f, -0.062940f, -0.009593f, -0.075035f, -0.062086f, -0.013434f, 0.059630f, 0.068328f, -0.055558f, -0.069873f, -0.080722f, 0.040789f, 0.096228f, 0.005132f, 0.077357f, 0.002203f, 0.046658f, 0.019013f, 0.005510f, 0.022804f, 0.008151f, -0.001628f, -0.028138f, 0.040259f, 0.032907f, 0.018029f, -0.033594f, -0.012999f, -0.004647f, 0.017392f, 0.017831f, -0.006391f, 0.019365f, -0.008373f, -0.022665f, -0.038937f, 0.004664f, 0.054794f, 0.019421f, -0.006199f, 0.015148f, -0.017334f, 0.028988f, -0.010435f, 0.037958f, 0.037284f, 0.004111f, -0.039578f, 0.006349f, 0.009156f, 0.043039f, 0.010828f, 0.048948f, -0.032687f, -0.020579f, 0.045687f, 0.046790f, 0.012853f, -0.012599f, -0.008319f, -0.046900f, -0.021913f, -0.093383f, 0.021989f, 0.032974f, -0.080859f, 0.044822f, 0.008932f, -0.023462f, 0.004838f, -0.022865f, -0.002261f, 0.017403f, 0.023606f, 0.041381f, -0.048706f, 0.004742f, - 0.056162f, -0.006241f, -0.026774f, 0.050509f, -0.022199f, 0.003538f, -0.029910f, -0.012140f, -0.059723f, 0.015569f, 0.001439f, 0.033742f, -0.023570f, 0.002503f, 0.041953f, -0.019860f, 0.000671f, 0.043291f, -0.084985f, 0.005528f, -0.097288f, -0.030951f, -0.065179f, 0.052034f, 0.018396f, -0.003818f, 0.021827f, -0.019092f, 0.023813f, 0.066130f, 0.017783f, 0.102674f, -0.057219f, -0.065642f, 0.060480f, 0.016466f, -0.044395f, -0.041672f, -0.017023f, 0.037914f, -0.036451f, -0.001407f, -0.031527f, -0.040698f, 0.023871f, 0.029882f, -0.060691f, -0.035281f, 0.052140f, -0.000927f, 0.018392f, -0.011309f, 0.028561f, 0.012686f, 0.052629f, -0.030675f, -0.022793f, 0.013348f, 0.012108f, -0.015233f, -0.055068f, -0.040251f, -0.043579f, 0.058250f, -0.027122f, -0.045108f, 0.013032f, -0.011812f, -0.014908f, -0.029742f, 0.011162f, 0.013319f, -0.005001f, -0.008859f, -0.016234f, -0.027413f, -0.004859f, -0.006231f, -0.020048f, 0.000715f, -0.009857f, -0.018817f, 0.011330f, -0.011113f, 0.010417f, -0.010966f, -0.009378f, 0.027493f, -0.010996f, 0.012985f, 0.009542f, -0.026224f, 0.011602f, 0.003450f, -0.010693f, -0.031799f, - 0.043111f, 0.028377f, -0.012359f, 0.006682f, -0.021361f, -0.016178f, 0.013057f, -0.000400f, -0.027415f, 0.009533f, -0.011059f, 0.024763f, -0.006771f, -0.004628f, 0.004630f, 0.011532f, -0.063054f, -0.127599f, -0.063727f, -0.024228f, 0.055947f, 0.072881f, -0.139275f, 0.024127f, -0.055242f, -0.075480f, -0.015382f, 0.087352f, 0.055924f, 0.047662f, -0.029938f, -0.033560f, -0.040066f, 0.044085f, 0.031200f, 0.067986f, 0.009013f, -0.088192f, -0.034417f, 0.066383f, -0.010035f, 0.019503f, 0.059570f, -0.028367f, -0.040979f, -0.064513f, -0.064478f, 0.000432f, 0.042293f, 0.090977f, 0.067521f, 0.044672f, 0.018457f, -0.093037f, -0.098957f, 0.034671f, -0.068216f, 0.016158f, 0.087530f, 0.034744f, 0.006110f, -0.044080f, -0.078878f, -0.013559f, -0.033881f, 0.026524f, 0.020852f, 0.014811f, 0.054952f, -0.008562f, -0.010394f, 0.014361f, 0.039943f, 0.064395f, 0.066961f, 0.022589f, 0.059657f, 0.019935f, 0.021570f, -0.013146f, -0.066355f, -0.026216f, -0.028651f, -0.054676f, 0.041335f, 0.038325f, 0.028801f, 0.028324f, -0.012442f, -0.065647f, 0.011101f, 0.019467f, -0.000785f, 0.043505f, 0.028319f, 0.022742f, - -0.004931f, 0.002865f, 0.006683f, 0.044783f, 0.045519f, 0.034219f, 0.010244f, -0.008443f, -0.032938f, -0.006312f, 0.019648f, 0.005473f, -0.009539f, -0.000349f, -0.026101f, -0.012468f, -0.014976f, -0.017538f, 0.013981f, 0.048874f, 0.024411f, -0.009190f, -0.004646f, -0.036908f, -0.003481f, 0.012632f, 0.025085f, 0.027290f, -0.008369f, -0.011979f, -0.056839f, -0.033266f, -0.007961f, 0.000151f, 0.023283f, 0.018856f, -0.010944f, -0.014037f, 0.009579f, 0.003369f, 0.006240f, 0.013793f, -0.015634f, -0.005984f, -0.002873f, 0.009058f, 0.015547f, 0.001163f, -0.005010f, -0.004578f, -0.023585f, 0.039474f, -0.112413f, -0.226147f, -0.116772f, 0.021830f, 0.088209f, 0.215084f, 0.210435f, 0.087623f, 0.089502f, 0.064231f, 0.003428f, -0.107239f, -0.181646f, -0.273697f, -0.081736f, -0.114546f, -0.019986f, 0.111586f, 0.198981f, 0.167269f, 0.147733f, 0.081374f, -0.001873f, -0.052191f, -0.069949f, -0.015031f, -0.121105f, -0.096220f, -0.091377f, -0.059930f, -0.049168f, -0.022872f, -0.004329f, 0.041614f, 0.098114f, 0.100993f, 0.099311f, 0.072658f, 0.094612f, 0.050127f, 0.054109f, -0.017775f, -0.003971f, -0.044730f, - -0.117278f, -0.169931f, -0.205241f, -0.099491f, -0.040024f, 0.031876f, -0.005289f, 0.021620f, 0.047729f, 0.062342f, 0.133150f, 0.153456f, 0.203468f, 0.129718f, 0.013116f, 0.059247f, -0.030726f, -0.112430f, -0.098284f, -0.195718f, -0.228251f, -0.170703f, -0.105475f, -0.045419f, -0.035741f, 0.082086f, 0.092806f, 0.257370f, 0.210826f, 0.154187f, 0.151035f, 0.072280f, -0.009207f, -0.102319f, -0.147844f, -0.108006f, -0.129449f, -0.177849f, -0.084427f, 0.004857f, -0.017360f, 0.004997f, 0.077763f, 0.108280f, 0.080093f, 0.041711f, 0.040498f, 0.068978f, 0.029501f, -0.005181f, -0.008243f, -0.033908f, -0.005669f, -0.030261f, -0.079626f, -0.042174f, -0.059370f, -0.096551f, -0.016948f, -0.016803f, 0.077179f, 0.070231f, 0.042363f, 0.075563f, 0.130945f, 0.093617f, -0.022931f, -0.015858f, -0.063073f, -0.056250f, -0.131721f, -0.136737f, -0.066051f, -0.027962f, 0.011425f, 0.046310f, 0.054982f, 0.081767f, 0.093317f, 0.090064f, 0.094746f, 0.024092f, -0.009560f, -0.050438f, -0.061449f, -0.081330f, -0.089872f, -0.090358f, -0.038813f, 0.020201f, 0.027171f, 0.039164f, 0.041110f, 0.028424f, 0.030490f, 0.031748f, - 0.010341f, 0.007421f, -0.010486f, -0.011239f, 0.019397f, -0.012832f, -0.031007f, 0.001906f, 0.007310f, -0.003752f, -0.009013f, -0.012802f, 0.001342f, -0.002205f, -0.012790f, -0.002648f, 0.001367f, 0.000123f, -0.000143f} - }, - { - {-0.008477f, -0.013211f, -0.009609f, 0.003730f, -0.001463f, -0.022610f, -0.012845f, -0.000988f, 0.003229f, -0.006959f, 0.002377f, -0.008396f, 0.001635f, -0.006069f, 0.015860f, -0.012931f, -0.005680f, -0.005688f, 0.010104f, 0.006978f, 0.016146f, 0.004260f, 0.003351f, -0.007390f, 0.007615f, 0.000969f, 0.002059f, -0.000904f, 0.006109f, 0.008382f, 0.000618f, 0.008355f, 0.007925f, -0.003862f, 0.004428f, -0.004720f, -0.005268f, 0.000588f, -0.004307f, 0.002688f, -0.006752f, -0.012211f, 0.003282f, 0.004359f, -0.003042f, 0.003397f, -0.005843f, 0.005497f, 0.007476f, -0.012897f, 0.002505f, -0.000713f, 0.004839f, 0.004147f, 0.000664f, -0.012729f, -0.003831f, -0.005594f, 0.004207f, -0.000150f, 0.001265f, -0.004086f, 0.002343f, -0.006529f, 0.000299f, 0.007085f, 0.004506f, 0.000480f, -0.003638f, 0.002346f, -0.010428f, -0.005845f, -0.007665f, 0.001387f, 0.001299f, -0.000650f, 0.010986f, 0.000054f, 0.009575f, 0.000140f, 0.001002f, 0.000897f, -0.000047f, -0.005194f, 0.003884f, -0.000314f, 0.001916f, -0.001111f, 0.001231f, 0.001822f, -0.000717f, -0.001812f, -0.000717f, -0.000544f, -0.000560f, -0.000301f, - -0.002798f, 0.000482f, 0.002876f, 0.001666f, 0.000028f, 0.000326f, -0.000788f, -0.001263f, 0.001217f, -0.026098f, -0.000831f, 0.001375f, 0.000369f, 0.004281f, -0.009216f, 0.006759f, 0.003792f, -0.004840f, -0.015558f, 0.010223f, 0.010483f, -0.002476f, 0.008722f, 0.006296f, -0.008629f, 0.017123f, 0.003558f, -0.007760f, 0.009195f, 0.000656f, 0.008591f, 0.001257f, -0.014933f, 0.005664f, -0.002842f, -0.005529f, -0.005808f, -0.004537f, 0.009755f, 0.007567f, 0.000598f, 0.007918f, 0.002853f, -0.007495f, -0.009287f, -0.000851f, -0.002183f, 0.003985f, 0.002696f, -0.007297f, 0.001725f, 0.003792f, 0.003572f, -0.006416f, -0.005392f, -0.008499f, -0.002997f, -0.002123f, 0.001689f, -0.002084f, 0.011388f, 0.004878f, -0.001781f, -0.005782f, 0.002123f, 0.004745f, 0.002445f, 0.012276f, -0.002062f, 0.006183f, -0.000744f, -0.004039f, -0.007474f, 0.005259f, -0.001704f, -0.003460f, 0.007187f, -0.002223f, 0.002383f, -0.001610f, -0.001506f, -0.008288f, 0.001805f, -0.002350f, 0.009729f, 0.012058f, -0.007272f, -0.007380f, -0.005200f, 0.002030f, -0.004668f, -0.002375f, -0.003017f, -0.002999f, -0.003256f, 0.001931f, - 0.004480f, -0.000292f, 0.001149f, 0.001341f, -0.000484f, 0.000144f, -0.002211f, -0.004928f, -0.007729f, -0.017762f, -0.010618f, -0.003879f, 0.012724f, 0.001615f, 0.002361f, 0.007774f, 0.002088f, 0.003331f, -0.018607f, -0.017100f, -0.010894f, -0.002891f, -0.000086f, 0.007833f, -0.005598f, 0.006119f, -0.003207f, -0.011514f, 0.003566f, -0.001724f, -0.007875f, -0.000171f, 0.010998f, 0.015973f, 0.007245f, -0.007381f, 0.004283f, 0.000467f, 0.011530f, -0.000098f, -0.009207f, -0.000360f, -0.005380f, 0.011310f, 0.004952f, 0.005281f, 0.011480f, -0.002031f, 0.000829f, 0.015381f, 0.013470f, -0.000550f, -0.000072f, 0.001018f, -0.000863f, 0.004063f, 0.001122f, -0.011279f, -0.014930f, -0.005305f, -0.001902f, 0.000010f, -0.004953f, -0.016664f, -0.001774f, 0.004573f, -0.009065f, -0.004453f, -0.005907f, -0.005074f, 0.001756f, 0.002098f, 0.005480f, -0.011624f, -0.009282f, 0.008906f, -0.003789f, -0.002058f, 0.001838f, -0.000723f, 0.005823f, -0.011195f, 0.004418f, 0.004107f, -0.004441f, -0.004286f, 0.004452f, -0.004909f, 0.007101f, -0.002823f, 0.000062f, -0.000032f, -0.002805f, 0.001379f, 0.005248f, 0.002891f, - 0.000591f, 0.003163f, 0.000900f, -0.001483f, -0.002869f, -0.001602f, -0.001655f, 0.000624f, 0.000801f, -0.000507f, -0.000422f, 0.000757f, -0.000259f, 0.023739f, -0.009109f, -0.007217f, -0.001155f, 0.000407f, -0.008877f, 0.000080f, -0.006211f, 0.011419f, -0.002794f, -0.014120f, -0.019666f, -0.005050f, -0.013027f, 0.018153f, 0.001474f, 0.012882f, 0.010852f, -0.017213f, -0.000969f, 0.007226f, 0.005226f, 0.009151f, 0.001703f, -0.001108f, -0.001562f, 0.004293f, -0.005706f, 0.006574f, 0.003630f, -0.006139f, 0.003798f, 0.000280f, 0.004435f, 0.009871f, -0.005330f, 0.003922f, -0.000631f, 0.005640f, 0.004853f, -0.002020f, 0.006689f, -0.001895f, 0.005818f, -0.004446f, 0.005306f, -0.013942f, -0.005927f, -0.005091f, 0.003922f, 0.012058f, -0.008857f, -0.005853f, -0.003269f, 0.000735f, -0.004048f, -0.005342f, -0.002830f, 0.004883f, 0.003956f, 0.006974f, -0.002314f, 0.003975f, -0.004108f, -0.004329f, -0.000406f, -0.002601f, 0.004826f, -0.000064f, -0.007284f, 0.004097f, -0.004253f, -0.007170f, -0.002663f, -0.004460f, 0.003154f, -0.005232f, -0.014200f, -0.002012f, -0.006139f, -0.006051f, 0.003080f, -0.003918f, - -0.008548f, -0.001739f, 0.001808f, -0.000613f, 0.000515f, -0.000084f, -0.005368f, 0.000172f, 0.002834f, -0.002030f, -0.002244f, 0.000570f, -0.000109f, 0.001026f, 0.000911f, 0.002786f, 0.000810f, -0.002418f, 0.001606f, -0.000429f, -0.000858f, -0.000935f, -0.002403f, -0.002253f, -0.002451f, 0.004035f, 0.006231f, -0.002406f, 0.009446f, -0.014751f, 0.006632f, -0.008805f, -0.009722f, 0.014319f, 0.005344f, -0.016831f, 0.001783f, 0.000138f, 0.005111f, -0.012102f, -0.007738f, -0.001026f, -0.009801f, -0.017889f, -0.017325f, -0.011417f, -0.017290f, 0.007479f, -0.001776f, 0.002667f, 0.009412f, -0.015171f, 0.010055f, -0.004259f, 0.004724f, 0.003133f, -0.001516f, 0.001613f, -0.002168f, -0.002146f, -0.009884f, -0.005898f, 0.012986f, -0.004735f, -0.010743f, -0.009871f, -0.000934f, -0.004410f, 0.004067f, -0.009433f, -0.014644f, 0.002290f, 0.013668f, -0.002031f, 0.008295f, -0.004674f, 0.004533f, -0.007284f, 0.005586f, 0.002321f, -0.010006f, 0.014789f, 0.002648f, -0.003059f, 0.003464f, 0.013603f, 0.012527f, 0.006620f, -0.001325f, -0.015083f, -0.002541f, -0.012566f, 0.003642f, -0.002728f, 0.002112f, 0.002223f, - 0.003523f, -0.011420f, -0.000088f, -0.000816f, 0.005539f, 0.011743f, -0.014650f, 0.001983f, -0.004289f, -0.013693f, -0.001550f, 0.004036f, -0.001402f, -0.000306f, -0.001317f, 0.004541f, 0.000886f, -0.003960f, -0.002732f, -0.002860f, -0.001757f, -0.004721f, 0.000162f, -0.000377f, 0.002655f, -0.005697f, -0.004015f, -0.000423f, -0.000767f, -0.000696f, 0.000259f, -0.000426f, 0.000914f, -0.002061f, -0.002148f, -0.000541f, -0.000366f, -0.001497f, -0.000390f, -0.000395f, 0.002537f, 0.002379f, -0.000049f, 0.000070f, -0.002650f, -0.004278f, -0.001534f, 0.000227f, -0.016801f, -0.016097f, -0.010457f, -0.017728f, -0.021008f, -0.020028f, 0.008486f, 0.009268f, -0.012883f, -0.003413f, -0.011663f, -0.019038f, 0.010192f, -0.004998f, -0.016510f, 0.005663f, -0.001123f, 0.000828f, 0.001679f, 0.005592f, 0.001842f, -0.000613f, 0.004256f, 0.005693f, -0.009492f, -0.009149f, -0.002454f, -0.011152f, -0.000785f, -0.011887f, -0.020518f, -0.001662f, 0.012431f, -0.014896f, -0.011386f, 0.008015f, -0.007834f, 0.000889f, 0.003167f, -0.007703f, -0.006168f, -0.006542f, -0.022105f, -0.009638f, 0.004759f, -0.006387f, -0.007320f, -0.014005f, - 0.006232f, 0.012370f, -0.004492f, 0.019112f, -0.010615f, -0.005085f, -0.000081f, -0.004711f, -0.016210f, -0.001227f, 0.003719f, -0.000622f, -0.003410f, -0.014246f, -0.002330f, 0.013846f, 0.007029f, 0.004018f, 0.007232f, 0.005074f, -0.003667f, 0.026558f, -0.008375f, -0.010447f, -0.009855f, -0.011921f, 0.004704f, 0.015045f, 0.010342f, 0.001061f, -0.002460f, -0.007749f, -0.002735f, -0.000332f, -0.003586f, 0.000541f, -0.004811f, 0.001753f, 0.011105f, 0.007077f, -0.005454f, -0.001268f, -0.001975f, 0.003898f, -0.002300f, 0.004251f, -0.004614f, -0.002442f, 0.000694f, 0.000771f, -0.001146f, 0.001368f, -0.002664f, 0.002763f, 0.000115f, 0.002150f, 0.001871f, 0.001232f, -0.001297f, -0.002259f, -0.000551f, -0.002282f, 0.029931f, 0.020388f, -0.000846f, 0.018626f, -0.001479f, 0.002794f, 0.003631f, -0.010063f, 0.016995f, 0.000260f, 0.015004f, 0.014379f, -0.011485f, 0.018653f, 0.000366f, -0.014092f, -0.023290f, 0.021411f, 0.010423f, 0.021271f, -0.017690f, 0.012247f, 0.006681f, -0.019501f, -0.019251f, -0.011381f, -0.005412f, 0.020494f, -0.019381f, 0.017292f, -0.001595f, -0.001877f, 0.012489f, 0.011758f, - 0.016028f, 0.005914f, -0.008651f, 0.007837f, 0.015069f, -0.009053f, 0.015066f, 0.022836f, 0.009767f, 0.013867f, 0.005818f, 0.003936f, 0.003956f, 0.000610f, -0.012348f, 0.004609f, 0.001331f, 0.000930f, 0.010534f, -0.007377f, 0.006315f, 0.007003f, -0.002958f, 0.019918f, -0.011601f, -0.007081f, -0.004421f, 0.017203f, -0.003052f, 0.014208f, 0.007258f, 0.009605f, 0.008694f, 0.001674f, -0.024215f, -0.003764f, -0.019395f, -0.010573f, 0.025389f, 0.013207f, -0.011209f, -0.000679f, -0.013836f, -0.012464f, -0.006410f, 0.021046f, 0.001972f, 0.007245f, 0.004207f, -0.003295f, 0.004422f, 0.007536f, 0.013298f, -0.003739f, 0.007826f, 0.005552f, 0.004892f, -0.004543f, -0.002768f, 0.002084f, -0.002226f, -0.000115f, 0.003724f, 0.004863f, 0.002156f, 0.002098f, 0.006001f, 0.005731f, 0.002281f, 0.000160f, 0.002959f, -0.001243f, 0.005121f, 0.007586f, 0.003760f, 0.000199f, 0.008492f, -0.026146f, 0.016632f, 0.015969f, 0.047117f, 0.001919f, 0.004144f, -0.002290f, -0.006383f, -0.003006f, 0.015983f, 0.014566f, 0.012705f, 0.018352f, 0.007487f, 0.028943f, 0.008520f, -0.011386f, 0.002827f, 0.025230f, - 0.010005f, 0.002609f, 0.003973f, -0.012894f, -0.018564f, 0.011989f, -0.009194f, -0.018195f, -0.038580f, -0.000569f, 0.015422f, -0.001138f, 0.009114f, -0.013339f, -0.007035f, -0.004961f, 0.002933f, -0.004199f, -0.011539f, -0.005618f, -0.031071f, -0.008088f, -0.026368f, 0.002261f, -0.013883f, 0.010643f, -0.015117f, 0.005797f, -0.014533f, -0.005032f, -0.000890f, 0.000466f, 0.002275f, 0.002976f, -0.019264f, 0.009350f, -0.002885f, 0.004298f, -0.010059f, 0.000290f, 0.015417f, 0.006219f, 0.021300f, 0.011938f, -0.006480f, -0.001245f, -0.004373f, -0.002160f, -0.004980f, -0.006763f, -0.000318f, 0.008749f, 0.005672f, 0.006506f, 0.004193f, -0.030433f, 0.020116f, 0.019737f, -0.007364f, 0.011308f, 0.008862f, -0.016082f, 0.007786f, 0.004835f, 0.001060f, -0.003408f, 0.002851f, 0.010407f, -0.009097f, 0.006070f, -0.002526f, 0.000536f, -0.000652f, 0.002302f, 0.005626f, -0.004642f, -0.002015f, 0.007729f, -0.005396f, 0.000396f, 0.000325f, 0.002937f, -0.003488f, -0.006457f, 0.004048f, 0.000261f, -0.001924f, -0.001926f, 0.001085f, -0.000226f, 0.003796f, 0.004281f, 0.004905f, 0.000072f, -0.004998f, 0.050712f, - 0.018284f, -0.008466f, 0.025051f, -0.016446f, 0.017474f, 0.011622f, -0.023860f, 0.005094f, -0.030016f, 0.000617f, -0.010192f, -0.021138f, 0.011324f, 0.000386f, 0.008672f, 0.012401f, 0.015397f, 0.024689f, 0.010324f, -0.001752f, -0.006353f, -0.016806f, -0.030251f, 0.010746f, 0.011890f, 0.003294f, -0.010539f, 0.016366f, 0.002168f, 0.017291f, 0.010318f, -0.031577f, -0.011951f, 0.004257f, -0.023199f, 0.001201f, -0.001625f, -0.004411f, 0.006885f, 0.005136f, -0.005431f, 0.023288f, -0.013405f, 0.000926f, 0.013105f, -0.011474f, 0.009019f, -0.005008f, -0.014067f, 0.009471f, -0.000057f, -0.001822f, 0.013474f, 0.008880f, 0.000562f, -0.006962f, 0.027831f, 0.001245f, 0.015689f, 0.001577f, -0.008576f, -0.009622f, -0.023197f, -0.008988f, 0.009801f, -0.000610f, 0.008379f, -0.002628f, -0.018049f, 0.007254f, 0.006084f, -0.026580f, 0.007830f, 0.013725f, -0.006998f, 0.014639f, 0.003551f, -0.015080f, -0.015255f, 0.017453f, -0.000237f, -0.034903f, 0.004494f, 0.003781f, 0.001616f, -0.003531f, 0.002206f, -0.004777f, 0.001027f, 0.010450f, -0.003040f, 0.001694f, 0.002786f, 0.003103f, -0.008632f, 0.002681f, - -0.002978f, 0.002451f, 0.006663f, 0.006896f, 0.005126f, 0.002413f, -0.005597f, 0.002652f, -0.000325f, -0.000493f, 0.002518f, -0.006408f, 0.000109f, 0.004444f, 0.006240f, -0.003988f, -0.002253f, -0.007509f, 0.001537f, 0.007951f, -0.007578f, 0.003210f, 0.002996f, -0.052684f, -0.017490f, 0.055060f, 0.015289f, 0.008792f, -0.008285f, -0.001482f, -0.008460f, 0.011230f, -0.017798f, 0.024070f, 0.013776f, 0.011285f, 0.011602f, -0.008527f, -0.000829f, -0.000993f, 0.007748f, 0.016200f, -0.024373f, -0.014473f, -0.007781f, 0.018523f, 0.006698f, 0.010331f, 0.011130f, -0.002546f, -0.017470f, 0.005727f, 0.001376f, 0.033630f, 0.026481f, 0.006953f, 0.020113f, 0.001092f, -0.009679f, 0.004161f, -0.002767f, -0.004622f, 0.012971f, 0.015922f, 0.013128f, 0.032537f, 0.015738f, 0.012760f, 0.014312f, -0.014769f, -0.024162f, -0.011349f, 0.011042f, -0.020628f, -0.010181f, 0.020034f, 0.021393f, 0.011714f, -0.009645f, 0.018902f, -0.007425f, 0.002053f, 0.004551f, 0.010854f, -0.005537f, -0.011806f, 0.006786f, -0.010648f, -0.033326f, 0.001441f, 0.010813f, -0.018190f, 0.002403f, -0.003286f, -0.004686f, -0.003337f, - -0.010765f, 0.027128f, -0.002804f, 0.015504f, -0.038876f, -0.037015f, -0.031313f, -0.014302f, 0.003222f, 0.003800f, -0.000990f, 0.002137f, -0.000631f, -0.008273f, 0.004089f, -0.009094f, -0.002646f, -0.003991f, 0.009521f, 0.001500f, 0.003465f, -0.007306f, -0.001316f, -0.006504f, -0.002325f, 0.005152f, 0.008230f, 0.008797f, 0.008490f, -0.000125f, -0.005629f, 0.004595f, 0.007484f, 0.004605f, 0.007452f, 0.002588f, -0.000674f, 0.003127f, 0.001098f, 0.001524f, -0.002197f, -0.005095f, 0.006025f, 0.006682f, -0.002174f, -0.001927f, -0.001448f, -0.001126f, 0.027113f, 0.042637f, -0.062846f, -0.008920f, 0.003724f, -0.000508f, -0.007554f, -0.015696f, 0.017180f, -0.020140f, -0.031986f, -0.003283f, 0.031184f, -0.004501f, -0.018273f, 0.005763f, -0.025555f, -0.013899f, 0.000987f, 0.016355f, -0.026786f, 0.002941f, 0.029172f, 0.029931f, 0.000749f, 0.010580f, 0.026144f, -0.014998f, -0.023413f, -0.032717f, 0.003138f, -0.032613f, -0.006993f, 0.013689f, 0.012870f, -0.028862f, -0.027238f, -0.016568f, 0.011684f, -0.007690f, -0.005116f, -0.007601f, 0.025959f, -0.038650f, -0.011331f, 0.005980f, -0.020861f, -0.007213f, - 0.000037f, -0.024395f, 0.001096f, 0.009992f, -0.001363f, 0.031913f, -0.002199f, -0.012968f, 0.002675f, -0.001647f, -0.010528f, 0.006098f, 0.015683f, -0.014576f, 0.022380f, -0.011105f, -0.041773f, 0.001929f, -0.016328f, -0.008969f, -0.001199f, -0.004497f, -0.055098f, -0.009276f, 0.025200f, 0.021765f, 0.015207f, 0.032835f, 0.033439f, -0.045334f, -0.005131f, 0.002892f, 0.009375f, -0.013193f, -0.022605f, -0.000451f, 0.010185f, 0.012050f, 0.010276f, 0.008021f, 0.003790f, 0.006466f, -0.012151f, 0.000044f, 0.007175f, -0.003834f, -0.002862f, 0.001326f, 0.002286f, 0.006504f, -0.007287f, 0.001310f, -0.002995f, 0.003038f, 0.004173f, -0.009689f, 0.001312f, -0.001008f, -0.006731f, 0.002815f, -0.001618f, 0.001256f, 0.000206f, -0.000178f, -0.008495f, 0.004276f, 0.000484f, 0.002226f, -0.005701f, -0.004206f, -0.003821f, -0.003550f, -0.060114f, 0.016755f, -0.011206f, 0.020461f, -0.019258f, -0.000228f, 0.031401f, -0.010538f, 0.044627f, 0.010244f, 0.008576f, -0.019224f, 0.008419f, 0.022112f, -0.013669f, -0.002796f, 0.028851f, 0.018588f, 0.021709f, 0.003051f, -0.033417f, 0.021210f, -0.021586f, -0.002036f, - -0.013023f, 0.003285f, -0.016621f, 0.009637f, -0.004352f, 0.009392f, 0.008938f, 0.015955f, 0.016176f, 0.017957f, -0.021334f, 0.005075f, 0.034016f, 0.007252f, -0.006133f, -0.006839f, -0.017113f, -0.013795f, -0.000092f, 0.001250f, 0.006107f, 0.028631f, 0.002450f, 0.015794f, 0.015294f, -0.001082f, -0.007317f, -0.006969f, 0.025972f, -0.030355f, -0.006622f, -0.026862f, -0.022150f, -0.006218f, 0.000167f, -0.045070f, 0.011697f, -0.014169f, 0.027584f, -0.005717f, 0.001184f, 0.019157f, 0.003899f, 0.046279f, 0.038204f, 0.055126f, 0.020828f, 0.002343f, -0.006428f, -0.005589f, -0.009321f, -0.002703f, -0.011082f, -0.030346f, 0.020535f, 0.025165f, 0.011967f, -0.004103f, 0.002782f, -0.021369f, -0.029110f, 0.013518f, 0.003562f, 0.004032f, -0.009411f, -0.003997f, -0.010210f, -0.005487f, 0.008879f, 0.002976f, 0.011649f, -0.000748f, 0.002529f, -0.006683f, 0.008094f, -0.024068f, -0.006451f, -0.000823f, -0.001065f, -0.004506f, 0.004128f, 0.001128f, 0.001440f, -0.001637f, -0.005993f, -0.001152f, -0.002574f, -0.001583f, 0.007376f, 0.000923f, 0.000792f, -0.004921f, 0.001466f, 0.001238f, -0.000536f, -0.010714f, - -0.007975f, -0.017605f, 0.023743f, -0.006931f, -0.005170f, 0.055384f, -0.011408f, -0.012159f, 0.061579f, -0.000858f, 0.035045f, 0.025869f, 0.002073f, 0.014524f, -0.008259f, 0.011394f, 0.010694f, 0.006802f, 0.008680f, 0.028471f, -0.019611f, 0.034306f, -0.018880f, -0.000562f, 0.007027f, -0.004613f, -0.024865f, -0.022190f, -0.000663f, -0.036034f, -0.011524f, -0.039366f, -0.002722f, -0.023377f, -0.017514f, -0.012791f, -0.011258f, 0.005898f, -0.031688f, 0.036794f, 0.005764f, -0.023860f, -0.017840f, -0.001112f, -0.004633f, -0.005826f, 0.009505f, 0.005073f, 0.036150f, 0.004174f, -0.000419f, -0.018450f, 0.003038f, 0.007515f, -0.001364f, -0.019683f, -0.008546f, 0.022714f, 0.024735f, -0.001443f, -0.021027f, 0.008621f, -0.004147f, 0.032297f, 0.035937f, -0.014015f, -0.009308f, -0.006618f, 0.004076f, -0.013784f, 0.014525f, -0.044713f, -0.004205f, 0.052899f, -0.047715f, -0.023493f, -0.011061f, 0.003449f, 0.004220f, 0.006332f, -0.004321f, 0.014180f, -0.008460f, -0.002365f, 0.025744f, -0.004037f, 0.018658f, -0.012612f, 0.018796f, -0.016439f, 0.012874f, 0.010508f, 0.025553f, -0.000519f, -0.004323f, 0.010803f, - 0.016821f, 0.001506f, -0.004028f, -0.002636f, 0.001712f, -0.009131f, -0.002785f, 0.008616f, 0.011354f, 0.003580f, -0.003680f, 0.011031f, -0.008613f, 0.009064f, 0.007569f, 0.008271f, 0.004554f, 0.000304f, -0.013429f, 0.013506f, 0.007983f, 0.006253f, 0.002966f, 0.006373f, 0.011815f, 0.002721f, -0.009269f, 0.004627f, -0.007554f, -0.005819f, 0.009779f, -0.002378f, 0.008466f, 0.009177f, -0.003581f, -0.006673f, 0.003776f, -0.032220f, -0.017657f, -0.005040f, 0.024936f, 0.030057f, 0.020600f, -0.019126f, -0.049087f, 0.084982f, 0.021379f, -0.053332f, -0.053509f, -0.008017f, 0.012958f, 0.036195f, -0.046553f, -0.008218f, 0.008693f, -0.000673f, -0.006695f, 0.048701f, 0.010450f, -0.028590f, 0.015266f, 0.002010f, -0.001367f, 0.025640f, -0.004678f, 0.014012f, -0.031741f, -0.010754f, 0.055776f, 0.020603f, 0.043984f, 0.013879f, 0.039766f, 0.006951f, -0.014606f, 0.027958f, 0.025483f, 0.039939f, 0.019669f, -0.045111f, -0.017105f, 0.009752f, 0.023316f, -0.018124f, 0.006878f, -0.017464f, -0.029167f, 0.002943f, -0.003372f, -0.017459f, 0.013569f, 0.018892f, 0.016408f, 0.011979f, 0.011249f, -0.008610f, - 0.030188f, -0.000249f, -0.029993f, -0.021789f, 0.027151f, 0.014709f, -0.047106f, 0.020474f, 0.008363f, 0.015133f, -0.041160f, -0.028148f, 0.026467f, 0.040873f, 0.023114f, -0.009204f, -0.044016f, 0.009946f, -0.001947f, 0.037520f, -0.012532f, -0.050481f, 0.021153f, 0.029424f, -0.011158f, 0.030624f, 0.025218f, 0.010379f, -0.020157f, 0.002626f, -0.000266f, 0.005873f, 0.002210f, -0.001388f, -0.010725f, -0.004528f, -0.013461f, -0.001417f, -0.002660f, 0.007012f, -0.008223f, -0.004956f, -0.002763f, -0.006186f, -0.003761f, -0.003301f, -0.003759f, 0.015615f, 0.004703f, 0.000159f, 0.015216f, -0.003809f, -0.014357f, -0.009671f, -0.007695f, -0.006237f, 0.000660f, -0.010501f, 0.004396f, 0.006333f, 0.005378f, 0.003973f, -0.013790f, -0.005395f, 0.011570f, 0.009510f, -0.001428f, 0.020299f, 0.039647f, 0.015284f, 0.041856f, 0.007018f, 0.019204f, 0.014305f, 0.069720f, 0.094859f, 0.007422f, 0.018987f, -0.060364f, -0.019179f, 0.036521f, -0.030760f, 0.071814f, -0.014287f, 0.011325f, 0.019346f, 0.042060f, 0.023329f, -0.010014f, -0.030467f, -0.035708f, -0.011784f, -0.005870f, -0.044781f, -0.021222f, -0.017819f, - 0.028737f, -0.016665f, 0.008560f, -0.028722f, 0.003828f, -0.011295f, -0.041903f, 0.043549f, 0.030208f, 0.035057f, 0.015444f, -0.021387f, -0.020705f, -0.048780f, 0.000901f, -0.043971f, -0.013356f, -0.003757f, 0.005797f, 0.022485f, 0.017743f, -0.014292f, -0.010125f, 0.018620f, 0.041185f, 0.011036f, 0.015747f, 0.030032f, -0.038306f, 0.027111f, -0.021759f, -0.020145f, -0.038676f, -0.016983f, 0.017686f, 0.014916f, 0.002465f, 0.045178f, -0.009901f, -0.016816f, 0.006926f, 0.011785f, 0.062116f, -0.020483f, 0.024901f, 0.024483f, -0.059713f, 0.000016f, 0.007461f, -0.013212f, -0.008800f, 0.020590f, -0.011851f, 0.001702f, 0.025301f, 0.013021f, -0.036749f, -0.044164f, -0.042594f, -0.019996f, -0.015855f, 0.035465f, 0.030963f, -0.008548f, -0.013538f, 0.001760f, 0.003931f, 0.023376f, -0.002644f, -0.007387f, 0.014532f, -0.002728f, -0.002424f, -0.006197f, 0.010526f, 0.014383f, -0.007654f, 0.013767f, 0.013010f, 0.013315f, 0.002351f, -0.005669f, 0.011771f, -0.008162f, 0.007052f, 0.014995f, 0.001106f, 0.008941f, 0.012005f, -0.020395f, -0.000890f, 0.009923f, 0.011097f, 0.014947f, 0.001759f, 0.013382f, - 0.000705f, 0.000862f, -0.004600f, 0.007684f, 0.011253f, 0.059425f, -0.014095f, 0.008686f, -0.026574f, -0.007613f, -0.035425f, 0.028147f, -0.050967f, 0.002342f, -0.041041f, 0.008121f, 0.017572f, 0.006377f, -0.024566f, 0.084186f, -0.005916f, -0.011326f, 0.007644f, -0.047915f, 0.002749f, -0.032376f, 0.001112f, 0.009098f, -0.009708f, -0.001104f, 0.019826f, -0.017594f, 0.000755f, 0.025478f, 0.002080f, 0.006446f, -0.041232f, 0.005249f, -0.003489f, -0.002572f, -0.010448f, -0.051149f, -0.028472f, 0.012639f, 0.004177f, 0.022709f, -0.059274f, 0.006462f, -0.055167f, 0.027969f, -0.037628f, -0.060181f, 0.030468f, 0.055486f, 0.009558f, 0.027292f, -0.041570f, 0.041157f, -0.010215f, 0.006144f, -0.025502f, 0.034280f, 0.013799f, 0.035596f, 0.011166f, 0.043189f, -0.039139f, 0.007473f, 0.002147f, -0.006709f, -0.031038f, -0.025301f, -0.029175f, 0.033096f, -0.008834f, 0.044980f, -0.027971f, -0.021455f, 0.005016f, 0.005991f, -0.025024f, 0.012985f, -0.014731f, -0.058589f, 0.025724f, 0.038812f, 0.064422f, 0.022537f, 0.045686f, -0.026421f, 0.000049f, -0.029788f, 0.048941f, 0.016508f, -0.009427f, -0.019522f, - 0.023210f, -0.016751f, -0.004760f, 0.002476f, -0.014828f, -0.024950f, -0.016678f, -0.011833f, -0.009969f, -0.033227f, -0.014516f, -0.027699f, 0.021274f, -0.005297f, 0.012609f, 0.024849f, 0.006482f, -0.018856f, -0.001903f, -0.018871f, -0.008194f, -0.028194f, -0.015672f, -0.029843f, -0.005334f, 0.048817f, 0.009843f, -0.003773f, 0.010841f, 0.014611f, -0.028386f, -0.013031f, -0.001785f, -0.003833f, -0.011868f, 0.012355f, -0.005720f, -0.043273f, -0.003882f, -0.009998f, -0.098361f, 0.012074f, -0.031423f, 0.091016f, -0.017132f, -0.045970f, 0.018275f, -0.002644f, -0.045797f, -0.007851f, 0.007622f, -0.027589f, 0.068717f, 0.009739f, 0.006592f, 0.031162f, -0.038645f, -0.059506f, -0.036661f, 0.083837f, -0.006694f, -0.017874f, 0.055421f, 0.031211f, -0.026435f, -0.026336f, -0.014809f, 0.066438f, 0.009322f, -0.016299f, -0.026009f, -0.012639f, -0.051947f, 0.034960f, -0.006052f, 0.014114f, 0.033417f, -0.011912f, -0.053798f, -0.006688f, 0.069382f, -0.003081f, -0.017304f, 0.033330f, -0.015193f, 0.041384f, 0.027243f, -0.003635f, -0.051266f, -0.026237f, -0.007028f, -0.047570f, -0.027843f, -0.027451f, 0.003722f, -0.006621f, - 0.040066f, -0.027975f, -0.009661f, -0.000265f, 0.103005f, 0.035718f, -0.017726f, 0.020768f, 0.012152f, -0.006134f, 0.052314f, 0.025361f, -0.019790f, 0.008132f, 0.042298f, 0.047717f, -0.029155f, -0.020874f, -0.069939f, -0.056222f, 0.031976f, -0.021034f, 0.034519f, -0.000995f, -0.041116f, 0.010012f, -0.003247f, 0.013007f, -0.027354f, -0.020924f, 0.038733f, 0.009751f, 0.005145f, -0.003883f, -0.004516f, 0.025678f, -0.012332f, 0.013209f, -0.006572f, 0.016010f, 0.032542f, 0.008616f, -0.023508f, 0.003845f, -0.009030f, 0.017697f, 0.014645f, 0.004824f, 0.021185f, 0.032907f, -0.012932f, 0.026541f, -0.002570f, -0.035288f, -0.009118f, 0.001103f, -0.019717f, 0.007917f, 0.025688f, -0.000507f, -0.013000f, 0.001571f, -0.004804f, 0.033480f, 0.028723f, 0.002909f, 0.013596f, 0.017245f, 0.009022f, 0.022363f, -0.028707f, -0.021377f, 0.010275f, 0.005765f, -0.006101f, -0.002553f, -0.004726f, -0.010740f, -0.010589f, -0.111164f, 0.038147f, -0.023810f, 0.059134f, 0.060123f, -0.034874f, 0.028379f, -0.059540f, -0.089399f, 0.002168f, -0.062881f, 0.008251f, -0.007892f, 0.048617f, -0.036132f, 0.034684f, 0.029750f, - 0.048762f, -0.074287f, 0.008089f, -0.045475f, -0.041667f, 0.004483f, -0.053786f, -0.034709f, 0.048795f, -0.014271f, 0.018522f, 0.056972f, -0.011316f, 0.018746f, -0.046973f, 0.005383f, -0.051790f, 0.047985f, -0.042932f, -0.028520f, -0.031693f, 0.053529f, 0.042908f, -0.030755f, 0.058676f, 0.038847f, -0.012417f, 0.058221f, -0.003248f, -0.061627f, -0.017028f, -0.007273f, -0.048012f, 0.010806f, -0.101583f, 0.010186f, -0.025843f, -0.048763f, -0.039371f, 0.045403f, -0.027120f, 0.094142f, 0.069967f, -0.105261f, 0.000048f, -0.002754f, 0.005056f, 0.048656f, -0.082630f, -0.057635f, 0.056852f, -0.047373f, -0.059185f, -0.068169f, 0.004623f, 0.140003f, 0.069609f, -0.065154f, -0.040993f, 0.005677f, 0.050989f, 0.019485f, -0.068093f, 0.010131f, -0.045475f, -0.026744f, -0.002372f, -0.008202f, 0.002677f, 0.044941f, 0.010679f, 0.026650f, 0.017726f, -0.052407f, 0.014142f, 0.023529f, -0.007344f, -0.018885f, 0.002834f, -0.044720f, 0.039879f, 0.014458f, 0.010954f, -0.059313f, 0.009970f, 0.030601f, 0.008706f, -0.014010f, -0.011021f, 0.026306f, -0.043203f, -0.002785f, -0.032199f, -0.017846f, 0.042479f, -0.044814f, - -0.001758f, 0.026719f, -0.022413f, 0.020950f, 0.025521f, 0.006629f, 0.003890f, 0.018683f, 0.006181f, -0.023844f, 0.034901f, -0.026868f, -0.020971f, -0.012192f, -0.036703f, -0.012682f, -0.034393f, -0.032969f, 0.011998f, 0.051605f, -0.059088f, 0.028396f, -0.098664f, -0.015528f, -0.038947f, -0.033998f, 0.050855f, -0.067630f, -0.105126f, 0.060074f, 0.090779f, 0.021426f, -0.018692f, -0.084069f, 0.004722f, 0.031828f, 0.031662f, -0.014732f, -0.034339f, 0.003417f, -0.009203f, -0.011659f, 0.009643f, -0.013022f, -0.028940f, -0.055286f, 0.005928f, -0.033555f, 0.007140f, -0.030150f, -0.063207f, 0.037934f, 0.027431f, 0.046814f, 0.000654f, 0.050696f, 0.027774f, 0.007047f, -0.017701f, -0.026945f, -0.043865f, -0.031220f, -0.018267f, 0.011507f, 0.028493f, -0.020444f, -0.010711f, -0.071517f, 0.065497f, 0.078232f, 0.042825f, -0.040779f, 0.041046f, -0.055456f, -0.001910f, 0.012080f, -0.121055f, 0.009279f, 0.010902f, 0.056219f, -0.072649f, 0.091961f, 0.035303f, -0.066697f, -0.038529f, 0.027410f, -0.012539f, -0.048964f, -0.060482f, -0.064521f, -0.088396f, 0.063951f, -0.028487f, 0.009750f, -0.134642f, -0.053560f, - 0.007303f, 0.001112f, 0.029753f, -0.021643f, 0.004510f, 0.022493f, 0.023080f, -0.064186f, -0.015568f, 0.010086f, 0.034502f, 0.025408f, -0.006417f, -0.024815f, -0.011382f, -0.005578f, 0.032148f, 0.005377f, -0.021600f, -0.002703f, -0.016991f, -0.006447f, 0.029659f, 0.013812f, -0.016040f, 0.032447f, -0.033423f, -0.019218f, -0.025172f, 0.031392f, -0.013462f, 0.003661f, -0.015426f, 0.013684f, -0.046142f, 0.006629f, 0.018021f, 0.007092f, -0.008818f, -0.019804f, -0.017886f, -0.023148f, 0.022052f, 0.004931f, -0.008518f, -0.026467f, 0.026535f, 0.001552f, 0.001136f, 0.003925f, -0.046961f, -0.022597f, -0.031027f, 0.003956f, -0.016113f, -0.009669f, -0.091649f, -0.012443f, 0.033008f, -0.043151f, -0.040269f, 0.037511f, 0.037956f, 0.007563f, -0.036427f, -0.123876f, -0.018510f, 0.024000f, 0.014409f, 0.053453f, -0.001525f, 0.031006f, -0.008428f, -0.000950f, -0.015941f, 0.002155f, 0.032362f, 0.003629f, 0.000946f, 0.031665f, -0.008896f, -0.007814f, -0.042229f, -0.003991f, -0.007155f, -0.004810f, 0.006752f, 0.025258f, 0.034219f, -0.006921f, -0.000455f, 0.027098f, -0.006635f, -0.052513f, -0.004092f, -0.046623f, - 0.006275f, 0.006254f, -0.061520f, 0.044161f, -0.084583f, 0.018746f, 0.022598f, -0.036934f, -0.003144f, 0.108940f, -0.031421f, 0.036739f, -0.023588f, 0.019423f, -0.082230f, 0.008755f, 0.047191f, -0.001323f, 0.040625f, -0.009636f, 0.003672f, -0.002691f, 0.052068f, -0.033937f, -0.041388f, 0.046748f, -0.043866f, -0.053357f, -0.001366f, -0.085206f, 0.056155f, 0.047261f, -0.017773f, 0.018250f, 0.007141f, -0.000500f, -0.073300f, -0.011933f, -0.006302f, 0.031995f, 0.011228f, -0.030575f, 0.028027f, -0.002049f, -0.037761f, -0.025034f, -0.023799f, 0.004953f, 0.004187f, -0.004997f, -0.001678f, 0.023235f, -0.023759f, -0.006532f, 0.015102f, -0.024363f, -0.014078f, 0.018873f, -0.025960f, 0.001727f, 0.021309f, 0.001480f, -0.007150f, 0.009746f, -0.001783f, 0.002304f, 0.018452f, -0.006970f, -0.006837f, -0.014702f, 0.005521f, -0.009233f, -0.009894f, 0.008627f, 0.009671f, -0.020712f, 0.002415f, -0.019325f, 0.017874f, -0.022014f, 0.011387f, -0.000004f, -0.004944f, 0.002377f, -0.005838f, -0.002418f, -0.001883f, -0.045345f, -0.136788f, -0.064387f, -0.021547f, 0.044479f, 0.100500f, -0.092358f, 0.019999f, -0.026836f, - -0.093142f, -0.013158f, 0.083404f, 0.022352f, 0.068680f, -0.058230f, 0.017129f, -0.020240f, 0.003916f, 0.040511f, 0.006727f, 0.021966f, -0.013300f, -0.118609f, 0.034993f, 0.005725f, -0.050449f, 0.051557f, 0.039285f, -0.035901f, 0.036305f, 0.004300f, -0.038735f, 0.011762f, -0.023988f, 0.074056f, 0.008958f, 0.029961f, 0.001297f, -0.076096f, -0.061043f, -0.020569f, -0.045270f, 0.049450f, 0.070963f, 0.073065f, 0.058697f, -0.020390f, 0.008070f, -0.059787f, -0.009156f, -0.006034f, -0.025299f, -0.031512f, 0.004935f, 0.005760f, -0.082289f, -0.024067f, -0.032271f, -0.002265f, 0.036625f, -0.040423f, -0.009496f, 0.014204f, -0.000088f, 0.042281f, -0.047029f, -0.001909f, -0.053256f, -0.027894f, -0.039423f, 0.021616f, 0.013917f, 0.042240f, -0.005918f, -0.004393f, -0.050229f, -0.015002f, -0.023972f, -0.006300f, 0.020896f, 0.028928f, 0.059205f, -0.038142f, 0.010578f, -0.033049f, 0.011609f, 0.022268f, 0.005946f, -0.018192f, -0.007720f, -0.006395f, -0.007728f, -0.002703f, 0.015393f, 0.016504f, -0.005008f, -0.001951f, -0.008272f, -0.011715f, 0.007301f, 0.016426f, 0.005227f, 0.001823f, 0.004096f, -0.013868f, - -0.016512f, -0.015111f, 0.024591f, -0.000715f, 0.016887f, 0.014246f, -0.002780f, -0.019463f, -0.021278f, 0.003102f, 0.005422f, -0.016152f, -0.005594f, -0.014059f, 0.009952f, -0.010190f, 0.003100f, 0.002946f, 0.010406f, -0.005502f, -0.006868f, 0.002651f, 0.003458f, 0.035520f, -0.057500f, -0.226750f, -0.119596f, 0.024483f, 0.095318f, 0.213397f, 0.163020f, 0.091835f, 0.030876f, 0.047889f, -0.015260f, -0.089787f, -0.173664f, -0.230975f, -0.058491f, -0.066958f, 0.003408f, 0.112470f, 0.160386f, 0.107574f, 0.143693f, 0.033081f, 0.030400f, -0.016828f, -0.072803f, -0.082384f, -0.066684f, -0.070793f, -0.087596f, -0.070189f, -0.030079f, -0.004516f, -0.001154f, 0.056096f, 0.072716f, 0.139180f, 0.065687f, 0.021654f, 0.057064f, 0.088827f, 0.028234f, 0.016952f, -0.071757f, -0.098103f, -0.160429f, -0.074100f, -0.084188f, -0.060860f, -0.036321f, -0.028436f, 0.011778f, 0.019759f, 0.067320f, 0.138051f, 0.110956f, 0.121202f, 0.089629f, 0.109962f, 0.081710f, -0.066132f, -0.060750f, -0.152793f, -0.118469f, -0.086605f, -0.194732f, -0.150514f, -0.092215f, 0.007320f, 0.117842f, 0.112447f, 0.132726f, 0.166136f, - 0.141916f, 0.076526f, 0.092062f, 0.003681f, -0.036237f, -0.097434f, -0.141674f, -0.142106f, -0.117444f, -0.070458f, -0.015365f, 0.020281f, 0.034131f, 0.039456f, 0.065527f, 0.047511f, 0.076672f, 0.048680f, 0.019043f, 0.012608f, -0.003139f, -0.007500f, -0.002032f, -0.053098f, -0.037334f, -0.007440f, -0.024927f, -0.063430f, -0.018055f, -0.022719f, -0.023852f, -0.004317f, 0.047234f, 0.089823f, 0.074182f, 0.007932f, 0.072904f, 0.051641f, -0.009840f, -0.060120f, -0.095598f, -0.088546f, -0.040414f, -0.043797f, -0.027733f, -0.015134f, 0.025004f, 0.055715f, 0.076832f, 0.087766f, 0.062847f, 0.024808f, 0.026731f, -0.016684f, -0.048214f, -0.080638f, -0.072657f, -0.031919f, -0.003550f, -0.023539f, -0.008044f, 0.023347f, 0.029196f, 0.030596f, 0.028668f, 0.007583f, 0.011745f, 0.018701f, -0.003557f, -0.016711f, 0.000197f, 0.006129f, -0.012697f, -0.013741f, -0.002277f, 0.005599f, 0.003718f, -0.008548f, -0.004716f, 0.004309f, 0.001632f, -0.005942f, -0.007926f, -0.003263f, 0.000861f, -0.000134f, -0.000168f}, - {-0.002911f, -0.004136f, -0.007931f, 0.004600f, 0.007370f, 0.013094f, 0.003518f, -0.009232f, -0.016407f, 0.003534f, -0.007678f, 0.000630f, 0.005118f, 0.001980f, 0.013230f, -0.010984f, -0.002727f, -0.001512f, -0.000896f, -0.009432f, 0.005771f, 0.002436f, 0.001183f, 0.000234f, -0.004624f, -0.003555f, -0.003358f, -0.001093f, 0.000432f, 0.002198f, -0.003496f, 0.005031f, 0.011839f, -0.000397f, 0.005243f, -0.008433f, -0.004915f, -0.010089f, -0.004891f, 0.010681f, 0.000481f, -0.002199f, 0.001871f, 0.011333f, 0.001192f, 0.005692f, -0.001465f, -0.005340f, -0.001702f, 0.006464f, -0.005600f, 0.010153f, 0.006228f, 0.011450f, 0.005626f, 0.000717f, -0.003543f, -0.007613f, -0.004247f, -0.006619f, -0.001054f, -0.004833f, 0.001872f, 0.000414f, -0.002634f, 0.001671f, -0.002269f, 0.004092f, -0.001064f, -0.001138f, 0.005754f, -0.000583f, -0.000455f, 0.000768f, -0.005651f, 0.002550f, -0.004148f, -0.006621f, -0.003855f, -0.002913f, 0.002835f, -0.000548f, -0.000506f, -0.007507f, -0.001295f, 0.001957f, 0.001430f, -0.002981f, 0.000234f, -0.002946f, 0.001272f, 0.002111f, 0.001522f, 0.000597f, -0.000570f, -0.001195f, - 0.000296f, -0.002315f, -0.001306f, 0.000518f, 0.000294f, 0.001038f, 0.000950f, 0.000937f, 0.000152f, -0.022863f, -0.005182f, 0.009372f, 0.001638f, 0.012779f, 0.006812f, -0.010526f, 0.002768f, -0.000232f, 0.004180f, -0.003771f, -0.017561f, 0.010130f, 0.006199f, 0.011608f, 0.014502f, 0.012493f, 0.004370f, 0.000167f, -0.017894f, -0.001846f, 0.008200f, -0.008156f, -0.007088f, -0.018676f, -0.001267f, -0.003126f, -0.002174f, -0.004755f, 0.002199f, -0.011149f, 0.005070f, -0.001957f, 0.004703f, 0.001387f, -0.007509f, 0.005782f, 0.004811f, 0.012951f, -0.001523f, -0.010376f, -0.005375f, 0.005614f, 0.002242f, -0.002597f, 0.000521f, 0.004133f, 0.000521f, -0.007582f, -0.000089f, 0.001596f, -0.000825f, 0.000480f, -0.004803f, -0.002098f, -0.006390f, -0.001312f, 0.007826f, 0.002804f, -0.002700f, 0.003352f, -0.001040f, -0.000404f, 0.001170f, -0.009103f, -0.000858f, -0.000451f, 0.005070f, 0.009858f, -0.002937f, -0.000993f, -0.006381f, -0.004923f, 0.002494f, 0.011218f, -0.009950f, -0.001552f, 0.002524f, -0.000537f, -0.002721f, -0.000171f, -0.002653f, 0.003655f, 0.003808f, 0.002030f, 0.006207f, -0.002960f, - -0.001944f, -0.000634f, 0.001438f, -0.001421f, 0.000231f, 0.001014f, 0.000860f, -0.000736f, -0.002650f, 0.001956f, -0.002639f, 0.012643f, 0.004745f, 0.004273f, -0.004240f, 0.000333f, 0.001189f, 0.001212f, -0.021709f, -0.011739f, -0.000984f, -0.005400f, -0.006719f, -0.000333f, -0.005657f, -0.022091f, 0.013167f, 0.003030f, 0.005960f, -0.002322f, 0.004535f, -0.005838f, 0.000280f, 0.000798f, 0.011383f, -0.004044f, -0.002398f, -0.001899f, -0.001924f, -0.001817f, -0.000806f, 0.012340f, -0.002389f, -0.000181f, -0.007026f, -0.000391f, -0.003392f, 0.004012f, 0.002029f, -0.011949f, 0.009269f, -0.012095f, -0.000231f, 0.010611f, -0.001519f, 0.000398f, 0.000809f, -0.000244f, -0.007412f, -0.005267f, 0.012181f, 0.007044f, -0.015095f, -0.008067f, 0.002389f, -0.008863f, -0.006431f, 0.006461f, -0.010864f, 0.002112f, 0.002632f, 0.006213f, 0.012974f, 0.009946f, 0.006085f, 0.004648f, -0.008839f, -0.009216f, -0.007891f, 0.002565f, 0.011290f, 0.004364f, -0.001936f, -0.005042f, 0.003702f, -0.004262f, -0.001858f, 0.002630f, -0.004185f, -0.006344f, -0.000853f, 0.005086f, -0.000921f, -0.004330f, 0.000577f, 0.000042f, - 0.004956f, 0.002064f, 0.004578f, 0.001043f, -0.002098f, -0.002152f, -0.001721f, -0.000899f, -0.000575f, 0.001472f, 0.002880f, 0.003422f, 0.003600f, 0.016594f, -0.004063f, -0.004241f, -0.004974f, 0.004680f, -0.005565f, 0.008114f, -0.015740f, -0.002017f, 0.011676f, 0.006113f, -0.011838f, 0.008759f, 0.014378f, 0.013569f, 0.008653f, 0.001659f, -0.000540f, -0.008875f, -0.011445f, 0.004854f, -0.001101f, 0.011471f, -0.000901f, 0.006859f, -0.007150f, -0.004758f, -0.003837f, 0.001135f, 0.003654f, -0.000651f, -0.013977f, 0.002947f, 0.004840f, 0.003515f, 0.006024f, 0.003695f, -0.007586f, -0.018677f, -0.006015f, 0.002733f, 0.003600f, 0.000877f, -0.000803f, 0.003541f, -0.007664f, -0.000128f, -0.013917f, 0.006501f, -0.014359f, -0.003789f, -0.006090f, -0.009450f, 0.006891f, 0.003045f, 0.002921f, -0.008252f, -0.004014f, -0.002431f, -0.008276f, 0.000780f, -0.000705f, 0.004418f, -0.003549f, -0.006969f, -0.005320f, -0.016529f, 0.005247f, 0.001912f, 0.007096f, 0.010465f, 0.013367f, 0.005215f, -0.005270f, -0.007877f, -0.003719f, 0.007261f, 0.007244f, -0.008209f, 0.008948f, 0.000378f, -0.005821f, 0.012902f, - -0.002504f, 0.002908f, 0.002188f, 0.003784f, -0.000232f, -0.002885f, 0.000836f, 0.004008f, 0.001439f, -0.000637f, 0.004343f, -0.002277f, -0.001783f, -0.003154f, 0.001489f, 0.000390f, -0.001613f, 0.002374f, -0.002304f, -0.004154f, -0.001742f, 0.003147f, -0.000758f, -0.000725f, 0.001135f, 0.008308f, 0.007676f, -0.001316f, 0.005436f, -0.016031f, 0.001907f, -0.007652f, 0.000862f, 0.002397f, -0.010063f, 0.003689f, 0.029534f, 0.003234f, -0.002585f, -0.016606f, 0.023781f, -0.000045f, 0.010003f, 0.001189f, -0.000471f, -0.012904f, 0.012565f, 0.003226f, -0.006905f, 0.001647f, 0.000976f, -0.005148f, 0.005097f, 0.013223f, -0.003818f, 0.014061f, -0.004133f, 0.006018f, -0.000195f, 0.009274f, 0.008263f, 0.009235f, 0.000130f, -0.005025f, 0.007260f, -0.005296f, 0.006398f, -0.001818f, 0.006450f, 0.006248f, 0.006012f, -0.000775f, -0.001812f, 0.002402f, -0.005166f, -0.007507f, -0.019167f, 0.012546f, -0.012383f, 0.008682f, 0.001137f, 0.003657f, -0.002211f, -0.022892f, -0.004930f, -0.006179f, -0.011125f, 0.001518f, 0.006967f, -0.014704f, -0.004625f, 0.006639f, 0.001252f, 0.010404f, 0.018186f, -0.000494f, - -0.004889f, -0.004341f, -0.018849f, 0.005792f, 0.003679f, -0.004218f, 0.001018f, 0.007498f, 0.007716f, 0.002230f, 0.001988f, 0.005429f, 0.000652f, -0.000829f, 0.008124f, 0.004774f, -0.004423f, 0.008288f, 0.006084f, 0.008137f, 0.002527f, -0.001381f, 0.000614f, -0.000525f, -0.000518f, -0.003001f, 0.001093f, -0.001820f, 0.001917f, -0.002301f, 0.003824f, 0.001369f, 0.000396f, 0.003150f, 0.000310f, -0.000946f, 0.000919f, -0.000671f, -0.000240f, -0.001071f, 0.003809f, 0.002323f, 0.000808f, 0.002704f, -0.000818f, 0.004298f, 0.000596f, 0.001385f, -0.008373f, -0.010114f, -0.000981f, 0.005448f, -0.003240f, -0.004879f, -0.007374f, 0.002158f, 0.013409f, 0.006020f, 0.002108f, -0.030481f, -0.013998f, -0.004242f, 0.006233f, -0.003631f, 0.010310f, 0.034805f, 0.010817f, -0.012765f, 0.001980f, -0.015103f, -0.004906f, 0.010608f, -0.012043f, -0.003042f, 0.015514f, 0.003762f, -0.003894f, 0.002224f, 0.008771f, -0.005262f, 0.004249f, 0.004633f, 0.004550f, -0.008617f, 0.003939f, -0.004023f, -0.004944f, -0.012739f, -0.004975f, -0.007439f, -0.014219f, 0.006236f, 0.000483f, -0.000948f, 0.014342f, 0.010497f, - 0.003672f, 0.011539f, 0.000063f, -0.014576f, 0.012283f, -0.001374f, -0.010002f, -0.007866f, -0.014519f, 0.000677f, 0.017472f, 0.001212f, -0.007702f, 0.007445f, -0.013023f, -0.008131f, 0.006731f, -0.010515f, -0.014024f, -0.007345f, -0.004425f, 0.007921f, -0.012392f, -0.003809f, -0.005771f, 0.015944f, 0.002292f, -0.005509f, 0.007809f, -0.004766f, -0.005812f, 0.000918f, 0.012611f, -0.002357f, 0.000833f, 0.006996f, 0.003994f, -0.016090f, -0.000616f, 0.009836f, 0.004670f, 0.005737f, -0.001313f, -0.003114f, 0.007223f, -0.004299f, 0.001245f, -0.003523f, 0.002059f, 0.002723f, 0.003734f, -0.008155f, 0.000048f, 0.000855f, 0.002055f, 0.000503f, 0.000087f, 0.003822f, -0.000716f, -0.000726f, -0.003602f, 0.002809f, 0.010595f, 0.007651f, -0.019786f, 0.018755f, -0.007078f, 0.001720f, -0.008654f, 0.016061f, -0.002289f, -0.010839f, -0.035324f, -0.004723f, 0.018318f, 0.004528f, -0.027541f, 0.012539f, -0.000028f, -0.005650f, -0.008838f, -0.007167f, -0.002728f, -0.016389f, -0.002771f, 0.013227f, 0.017231f, 0.020502f, 0.012446f, 0.018694f, -0.006137f, 0.014722f, 0.007095f, -0.029095f, -0.000693f, 0.007556f, - 0.010322f, 0.005024f, -0.010034f, 0.000557f, -0.002100f, 0.010250f, -0.017439f, -0.006283f, 0.012953f, -0.004294f, 0.007281f, 0.003811f, -0.011618f, -0.012915f, -0.006666f, -0.019344f, -0.005507f, -0.005954f, 0.007931f, 0.002860f, -0.011186f, -0.002588f, -0.023881f, -0.006039f, 0.009745f, -0.006999f, -0.023598f, -0.000375f, 0.013398f, -0.028650f, 0.008300f, 0.004739f, 0.009096f, -0.013599f, -0.006314f, -0.012928f, 0.000996f, -0.003903f, -0.014620f, -0.003876f, -0.002461f, 0.008760f, 0.004958f, 0.021374f, 0.001357f, 0.000193f, 0.003411f, -0.001659f, -0.010849f, 0.013495f, 0.004716f, -0.005611f, 0.011857f, 0.002110f, -0.005895f, 0.001912f, -0.000371f, 0.007168f, 0.001653f, 0.001370f, 0.004492f, -0.003893f, 0.000163f, -0.004178f, -0.000010f, -0.003342f, 0.003300f, -0.001399f, 0.001430f, 0.003989f, 0.000576f, -0.002628f, 0.003760f, 0.000876f, 0.004002f, 0.001013f, -0.001155f, -0.021898f, 0.004923f, 0.017601f, 0.022670f, 0.016905f, 0.017264f, 0.006690f, -0.011919f, 0.012104f, 0.020953f, -0.030928f, 0.015563f, 0.015564f, -0.033139f, -0.008667f, 0.008183f, 0.035809f, -0.002757f, -0.002239f, - -0.008492f, -0.009987f, 0.044291f, 0.021981f, 0.006187f, 0.005573f, 0.022987f, -0.000382f, -0.003463f, -0.008544f, 0.003461f, -0.019870f, -0.017944f, -0.004066f, 0.005593f, 0.013357f, 0.006072f, 0.003061f, -0.006757f, 0.001327f, -0.014590f, 0.006121f, -0.021638f, 0.021264f, -0.002352f, -0.010534f, -0.012431f, -0.014170f, -0.021832f, 0.003820f, -0.021133f, -0.007071f, 0.014541f, -0.003330f, -0.007226f, -0.006919f, -0.003368f, -0.018047f, -0.012553f, -0.008109f, -0.007693f, -0.004086f, 0.006670f, 0.003759f, 0.001119f, 0.001011f, -0.015972f, 0.027571f, 0.015836f, 0.000432f, -0.002010f, 0.036250f, -0.004350f, -0.006208f, -0.008872f, -0.018300f, -0.005011f, 0.012150f, 0.011655f, -0.001744f, 0.014179f, -0.028110f, 0.008343f, -0.010694f, 0.002712f, 0.010884f, -0.003760f, -0.000205f, 0.001779f, 0.000968f, 0.003492f, -0.004384f, 0.005261f, 0.006790f, -0.006324f, 0.002657f, 0.003567f, 0.004443f, 0.011522f, -0.008611f, -0.000777f, 0.001261f, -0.000203f, 0.002735f, 0.001289f, 0.002854f, 0.003638f, -0.003103f, 0.002341f, -0.000942f, 0.000289f, -0.006130f, -0.001324f, -0.001415f, 0.005257f, 0.040783f, - 0.013930f, 0.008630f, 0.019795f, -0.022339f, -0.013442f, 0.012780f, 0.013594f, 0.030272f, 0.004381f, 0.008444f, -0.020379f, -0.001163f, 0.010058f, -0.026714f, -0.008620f, 0.010745f, -0.008934f, 0.000371f, 0.007309f, 0.019804f, -0.006717f, 0.007760f, 0.004035f, 0.004383f, 0.016865f, 0.014735f, 0.017974f, -0.014135f, -0.009497f, 0.019523f, -0.024757f, -0.008188f, -0.008231f, -0.001634f, -0.006729f, -0.015784f, 0.015346f, -0.000531f, -0.017097f, 0.000826f, -0.006765f, -0.017756f, -0.022189f, -0.012302f, -0.013323f, 0.026182f, -0.008387f, -0.006649f, -0.015558f, -0.001276f, -0.007947f, 0.004057f, 0.030806f, -0.005776f, -0.010150f, 0.005258f, -0.001887f, 0.017807f, -0.020720f, 0.034972f, 0.006955f, -0.033650f, -0.024519f, 0.008872f, -0.022707f, 0.000368f, -0.024309f, 0.000107f, 0.005128f, -0.003109f, 0.026140f, 0.032829f, -0.015672f, 0.003974f, -0.006497f, -0.024307f, -0.009135f, -0.013244f, -0.015914f, -0.003660f, 0.011872f, -0.008261f, -0.018745f, 0.012356f, 0.000748f, -0.010138f, -0.008616f, 0.004062f, 0.006869f, -0.003031f, -0.002024f, -0.009549f, 0.000449f, -0.008819f, -0.001836f, -0.004426f, - 0.006069f, 0.006914f, 0.001589f, -0.008759f, 0.000859f, 0.000544f, 0.005570f, -0.000146f, -0.002242f, 0.000450f, -0.011049f, -0.001229f, -0.006267f, -0.004418f, 0.000772f, 0.002449f, -0.005848f, 0.004455f, -0.003439f, -0.003169f, 0.007367f, -0.003005f, -0.007354f, -0.035587f, 0.013658f, 0.074054f, -0.012638f, -0.000696f, -0.032204f, -0.013458f, 0.022100f, -0.003040f, 0.042537f, 0.025614f, 0.023677f, 0.000318f, 0.018307f, -0.034533f, 0.031716f, 0.016514f, 0.001652f, 0.004283f, -0.019955f, 0.008897f, -0.000142f, 0.032332f, 0.018106f, 0.021598f, -0.007642f, 0.002249f, 0.005752f, -0.021453f, -0.017283f, -0.007782f, 0.010028f, 0.037691f, -0.010252f, -0.012508f, -0.012626f, -0.006987f, 0.005031f, -0.023701f, -0.006777f, -0.001413f, -0.012621f, -0.025096f, -0.005187f, -0.031879f, -0.011502f, 0.019027f, -0.022133f, -0.009566f, -0.004241f, 0.001971f, -0.035962f, -0.021595f, -0.004559f, -0.003591f, -0.006743f, 0.022964f, 0.010169f, 0.001705f, 0.013894f, 0.023655f, -0.014286f, -0.005781f, -0.019541f, 0.009173f, -0.015334f, 0.013406f, 0.015312f, 0.018423f, 0.033257f, 0.009604f, -0.024756f, -0.003831f, - 0.055631f, 0.018301f, 0.031349f, 0.015274f, 0.009635f, -0.001907f, 0.003956f, -0.012888f, -0.016613f, 0.007816f, 0.005698f, -0.016415f, 0.004601f, 0.011896f, 0.010699f, -0.015746f, 0.012695f, 0.004528f, 0.009197f, 0.010742f, 0.000094f, 0.005328f, 0.008897f, 0.003866f, 0.010416f, -0.000757f, 0.002384f, -0.002948f, -0.006756f, 0.001778f, 0.009116f, 0.001621f, -0.003726f, 0.014718f, 0.009380f, 0.008150f, 0.000493f, -0.001442f, -0.002194f, -0.000071f, 0.000669f, -0.002040f, 0.005244f, 0.004269f, 0.004168f, 0.004706f, 0.002400f, -0.007363f, 0.038151f, 0.041809f, -0.042148f, 0.010368f, 0.030970f, 0.018726f, -0.011736f, -0.022408f, -0.019388f, 0.043577f, 0.003596f, 0.016419f, 0.022863f, -0.012969f, 0.006469f, 0.009598f, -0.026626f, -0.028281f, 0.023041f, 0.007865f, -0.041212f, -0.009477f, 0.053619f, 0.025742f, -0.000088f, -0.030536f, 0.010049f, 0.008084f, 0.032610f, 0.010816f, -0.015878f, 0.021376f, 0.003789f, -0.008935f, -0.003086f, -0.006408f, -0.025416f, -0.011976f, 0.003905f, 0.004434f, -0.030344f, -0.032714f, -0.019384f, -0.009353f, -0.036040f, 0.021472f, -0.002250f, -0.025551f, - 0.004884f, 0.000663f, -0.011106f, -0.003046f, 0.007739f, -0.000148f, 0.008145f, 0.009514f, 0.014523f, -0.014191f, -0.016915f, 0.022409f, 0.045307f, 0.020580f, 0.012369f, 0.033116f, -0.006207f, 0.018077f, 0.044033f, 0.027000f, 0.004139f, 0.004989f, -0.013781f, -0.026885f, 0.026190f, -0.025606f, 0.011526f, -0.010212f, 0.008000f, -0.033540f, 0.016109f, -0.000365f, -0.011006f, -0.006266f, 0.019091f, -0.018049f, -0.009138f, -0.004620f, 0.002890f, -0.000368f, 0.005638f, -0.007117f, -0.000926f, -0.012870f, -0.003298f, -0.000688f, 0.002362f, -0.003810f, 0.004462f, -0.004785f, 0.003867f, -0.004277f, 0.014638f, 0.004652f, -0.003784f, -0.006742f, 0.005532f, 0.000684f, 0.005073f, 0.004674f, -0.003515f, 0.004217f, 0.005384f, -0.003543f, 0.001406f, 0.006736f, -0.002023f, 0.002432f, 0.007326f, 0.007785f, 0.013394f, -0.008605f, -0.039558f, 0.011099f, -0.019073f, -0.008799f, -0.014743f, -0.002490f, 0.033859f, 0.033532f, -0.067852f, 0.020986f, 0.021531f, -0.021087f, -0.034521f, -0.045016f, 0.007937f, -0.013235f, 0.008329f, -0.015723f, -0.012360f, -0.007323f, 0.041997f, 0.010619f, -0.003661f, -0.000742f, - -0.006694f, -0.012576f, 0.010620f, 0.006964f, -0.000200f, 0.016825f, 0.003659f, -0.003580f, 0.005999f, 0.015266f, 0.043343f, 0.004331f, 0.005333f, -0.021449f, -0.009173f, -0.010171f, -0.010788f, -0.001345f, -0.003614f, 0.014324f, 0.020732f, 0.000949f, 0.023952f, -0.005602f, -0.004056f, -0.004948f, -0.002675f, -0.042056f, 0.047381f, 0.001181f, 0.003352f, -0.003529f, -0.012324f, 0.012534f, -0.003254f, 0.019194f, 0.001085f, -0.018442f, 0.004975f, 0.020351f, -0.014514f, 0.018896f, 0.004602f, -0.029023f, -0.004953f, -0.006245f, -0.052708f, -0.018044f, 0.013472f, 0.013569f, -0.021539f, -0.012431f, 0.012578f, 0.001704f, 0.035223f, -0.028113f, 0.012783f, 0.015680f, -0.002281f, 0.013707f, 0.012771f, 0.015543f, 0.006001f, 0.006892f, 0.006303f, 0.005120f, -0.002346f, -0.002923f, -0.009098f, 0.003579f, 0.013164f, 0.002294f, -0.009659f, -0.003810f, -0.005458f, 0.003068f, -0.004232f, -0.003635f, -0.006434f, 0.008469f, 0.004835f, 0.005757f, 0.000622f, -0.015398f, 0.006126f, -0.015650f, 0.001195f, 0.002430f, 0.005500f, -0.007460f, -0.003569f, -0.002379f, 0.005047f, 0.009266f, 0.004221f, 0.003864f, - 0.001311f, -0.011055f, 0.034452f, 0.009851f, 0.010544f, -0.025426f, 0.018774f, -0.010243f, 0.017882f, -0.014250f, 0.023092f, -0.021242f, -0.017349f, 0.031785f, 0.003853f, 0.008041f, -0.019127f, -0.042626f, -0.004201f, 0.012303f, 0.003167f, 0.018120f, -0.015322f, 0.002239f, -0.000352f, -0.031858f, -0.023027f, 0.010390f, -0.036000f, -0.023606f, 0.011278f, 0.000036f, -0.037640f, -0.005475f, -0.018838f, 0.023775f, 0.014166f, 0.004198f, -0.008907f, -0.023592f, -0.050067f, 0.017485f, -0.022526f, 0.027198f, -0.008418f, -0.009240f, -0.004803f, -0.013354f, 0.007414f, 0.007038f, -0.040068f, -0.017719f, 0.039079f, 0.034223f, -0.035652f, 0.045966f, 0.002194f, 0.033816f, -0.008323f, -0.008262f, -0.004470f, -0.013511f, 0.017440f, -0.013318f, -0.037404f, -0.019884f, 0.044018f, -0.010026f, -0.009086f, -0.002599f, 0.013500f, 0.008645f, 0.022140f, -0.050928f, 0.014793f, 0.034453f, 0.027057f, -0.011269f, -0.003047f, -0.011096f, -0.023197f, 0.002450f, 0.020911f, 0.032621f, -0.020328f, -0.020542f, -0.023280f, -0.002507f, -0.003972f, 0.001984f, -0.011275f, 0.005567f, 0.005566f, -0.004079f, -0.001826f, -0.005125f, - -0.010289f, 0.009656f, 0.000005f, 0.001309f, -0.015516f, -0.013077f, -0.003643f, -0.016904f, -0.006718f, -0.008576f, 0.001657f, -0.006132f, -0.000191f, 0.012675f, -0.005433f, 0.005167f, -0.000397f, -0.012217f, 0.002132f, -0.006267f, -0.001789f, 0.004961f, 0.011062f, 0.001386f, 0.004503f, 0.010337f, 0.010253f, 0.013698f, -0.004656f, -0.004002f, -0.002772f, 0.014048f, -0.002460f, -0.023276f, -0.001556f, 0.023827f, 0.018487f, -0.018025f, -0.030698f, -0.025756f, -0.015138f, -0.029845f, -0.001683f, 0.014093f, 0.032714f, -0.005689f, -0.001588f, -0.054818f, 0.032797f, 0.040852f, -0.006508f, -0.022243f, -0.022610f, -0.014013f, 0.061494f, -0.037486f, -0.000163f, -0.004442f, 0.016575f, -0.002776f, 0.070843f, 0.001710f, -0.038608f, -0.010172f, -0.036694f, 0.047831f, 0.041567f, -0.033593f, 0.039098f, 0.009791f, 0.031465f, 0.011773f, -0.059208f, 0.018549f, 0.031612f, -0.040990f, -0.011417f, -0.046508f, -0.023287f, 0.001608f, -0.042890f, -0.036555f, -0.001096f, -0.029615f, -0.000471f, 0.010416f, -0.010660f, -0.029372f, 0.024062f, 0.021874f, -0.048427f, -0.036960f, 0.020159f, 0.008541f, 0.012933f, 0.024536f, - 0.031976f, -0.011772f, -0.017456f, -0.000977f, -0.011339f, -0.000591f, -0.003662f, -0.016202f, 0.006373f, -0.067119f, 0.022810f, 0.032690f, -0.034706f, -0.028505f, 0.021586f, -0.021817f, -0.019879f, -0.009406f, 0.012046f, 0.001755f, 0.041596f, 0.000372f, 0.024273f, -0.002339f, -0.017046f, 0.009100f, 0.012498f, 0.013104f, -0.011024f, 0.000351f, 0.001279f, -0.001461f, -0.007102f, -0.016551f, 0.010911f, 0.017584f, -0.009032f, -0.029180f, 0.007392f, 0.002603f, 0.030950f, -0.002889f, -0.012183f, 0.009672f, 0.003397f, 0.015597f, -0.000070f, -0.009361f, 0.000178f, 0.012747f, 0.009376f, 0.003258f, -0.003382f, 0.002499f, -0.005817f, -0.004742f, -0.014609f, 0.007418f, 0.006924f, -0.009839f, 0.004770f, 0.004518f, 0.002628f, -0.001558f, -0.004943f, 0.001404f, -0.014007f, 0.015611f, 0.037881f, 0.070725f, 0.111310f, 0.003843f, -0.044273f, -0.057148f, -0.013025f, 0.002793f, -0.013265f, 0.054310f, 0.040835f, 0.028414f, 0.047249f, 0.034540f, 0.027993f, 0.002359f, 0.022645f, -0.028300f, 0.040984f, 0.047358f, 0.003648f, 0.049252f, -0.019608f, 0.004511f, 0.011769f, -0.044956f, -0.030107f, -0.010263f, - -0.026585f, -0.031352f, -0.004263f, 0.050617f, -0.000219f, -0.009136f, 0.006700f, 0.011240f, -0.006332f, -0.067383f, -0.008850f, 0.018309f, -0.009568f, -0.020265f, 0.008837f, 0.026819f, 0.047088f, 0.012059f, 0.024225f, 0.033565f, 0.041111f, -0.055590f, -0.038496f, 0.022655f, -0.015874f, 0.072012f, -0.006964f, 0.062002f, -0.049080f, 0.029885f, 0.050526f, 0.002487f, 0.008609f, 0.030629f, -0.053695f, -0.024575f, 0.001892f, 0.031536f, 0.001356f, 0.036214f, 0.014927f, 0.013999f, 0.036775f, 0.013719f, -0.004325f, -0.014664f, -0.042392f, -0.009300f, 0.002981f, 0.012009f, 0.001356f, 0.001577f, 0.001452f, -0.022741f, 0.012661f, 0.008808f, 0.020757f, -0.006329f, 0.015737f, 0.025567f, 0.015301f, 0.006959f, 0.000415f, -0.002323f, 0.005752f, -0.007965f, 0.005600f, -0.007583f, 0.000748f, 0.005791f, 0.005573f, -0.006628f, 0.011687f, 0.011506f, 0.014113f, 0.002188f, 0.001577f, 0.006360f, -0.004392f, 0.009947f, -0.006434f, 0.010040f, 0.022005f, -0.001951f, -0.003640f, 0.002312f, 0.019196f, -0.010843f, 0.004893f, -0.001576f, -0.002292f, -0.002894f, 0.003052f, 0.005818f, 0.008902f, 0.007054f, - 0.006904f, 0.017992f, -0.011733f, 0.021226f, -0.009554f, 0.079981f, 0.027006f, 0.028464f, 0.058470f, -0.003674f, 0.012847f, 0.025783f, 0.037770f, -0.040800f, -0.032616f, -0.013529f, -0.035830f, -0.005803f, -0.048337f, 0.025733f, 0.039622f, 0.029105f, 0.039353f, -0.025546f, -0.013932f, 0.030552f, 0.023856f, -0.015794f, 0.039904f, 0.024220f, -0.008468f, -0.047527f, 0.027313f, 0.029846f, -0.023885f, -0.003081f, 0.014624f, 0.007489f, -0.038209f, 0.045257f, 0.012536f, 0.048538f, 0.026790f, 0.019348f, -0.025476f, 0.022926f, -0.013247f, 0.073680f, -0.057023f, 0.006840f, 0.022699f, -0.010426f, -0.036587f, 0.024266f, 0.023930f, -0.004064f, 0.023558f, -0.021801f, 0.060291f, -0.027150f, 0.016370f, 0.013463f, -0.037223f, -0.015949f, -0.051642f, 0.022715f, 0.015972f, -0.038436f, 0.036981f, 0.031524f, -0.026255f, 0.022731f, -0.002229f, 0.060964f, 0.020450f, -0.029838f, -0.021516f, -0.021246f, 0.019742f, -0.012209f, 0.016936f, -0.007327f, 0.004271f, 0.020661f, 0.013503f, 0.010496f, -0.019220f, 0.052400f, 0.006472f, -0.019828f, -0.028872f, 0.025480f, 0.013228f, 0.024058f, -0.012841f, 0.007261f, - 0.019569f, 0.039560f, 0.010717f, -0.006194f, 0.033427f, -0.008567f, -0.008739f, -0.004388f, 0.003944f, 0.009055f, -0.018797f, -0.016929f, 0.008181f, -0.014621f, -0.008284f, 0.002035f, -0.006374f, -0.001897f, -0.001775f, -0.014388f, 0.010890f, 0.005966f, -0.027372f, 0.006871f, -0.020271f, -0.013000f, -0.005940f, 0.010388f, 0.006262f, 0.019415f, 0.009236f, -0.000550f, 0.006250f, 0.007135f, 0.009019f, 0.000744f, 0.003084f, 0.004432f, 0.017231f, -0.005401f, -0.070886f, 0.030895f, -0.060537f, 0.061667f, 0.074182f, -0.004470f, 0.012587f, -0.061204f, -0.001017f, -0.014053f, 0.005740f, 0.034795f, 0.035678f, -0.011195f, 0.018288f, 0.028852f, 0.004210f, 0.011836f, 0.008030f, 0.011683f, -0.008121f, 0.042306f, -0.006408f, 0.009259f, -0.024294f, 0.047687f, 0.009998f, -0.004950f, -0.002008f, 0.042897f, 0.016175f, 0.020045f, 0.047478f, -0.011065f, -0.030001f, 0.058427f, -0.062897f, -0.027348f, -0.011233f, 0.013522f, 0.040985f, 0.009307f, -0.017383f, -0.017774f, -0.030562f, -0.000905f, -0.005880f, 0.011762f, 0.065965f, 0.064232f, 0.040605f, 0.057945f, -0.005652f, 0.087375f, -0.029601f, 0.024257f, - -0.021110f, 0.001943f, 0.027247f, -0.013597f, 0.002957f, -0.026379f, -0.034183f, 0.000508f, -0.021569f, 0.017850f, -0.029202f, 0.043215f, -0.032763f, -0.052423f, -0.021902f, -0.013465f, -0.004955f, 0.063045f, -0.038282f, -0.008779f, -0.005586f, -0.039574f, -0.010191f, 0.023070f, 0.049374f, -0.004345f, -0.002346f, 0.001949f, -0.016439f, -0.033981f, 0.001201f, -0.001437f, -0.005360f, -0.003482f, -0.000170f, -0.019595f, 0.015654f, -0.016761f, 0.019382f, -0.007689f, -0.015161f, -0.016372f, 0.003885f, 0.015639f, -0.011115f, -0.013998f, -0.005137f, 0.012997f, 0.014122f, -0.010213f, 0.006552f, 0.008723f, 0.004940f, 0.008706f, -0.008317f, -0.007237f, 0.003851f, 0.000994f, 0.008850f, -0.010933f, 0.007764f, 0.014468f, -0.000766f, -0.004528f, -0.007504f, 0.012707f, -0.025572f, -0.011823f, 0.025018f, -0.015020f, -0.001891f, -0.003810f, 0.004756f, -0.015421f, 0.011220f, -0.004768f, 0.023060f, 0.019995f, 0.000329f, -0.024842f, 0.109064f, 0.151431f, 0.046435f, 0.118050f, -0.025845f, -0.082081f, -0.057534f, -0.040204f, 0.019913f, 0.021723f, -0.027374f, -0.044076f, 0.038201f, 0.051404f, 0.030013f, 0.051286f, - 0.039531f, 0.009784f, 0.015717f, 0.007767f, -0.002587f, -0.033710f, 0.014865f, -0.039950f, 0.028146f, 0.000280f, -0.037440f, 0.043394f, 0.026205f, 0.020769f, 0.074879f, 0.046062f, -0.021517f, -0.014445f, -0.027007f, -0.031946f, -0.039184f, -0.015431f, 0.001500f, -0.030945f, -0.009658f, 0.064730f, 0.098113f, 0.072328f, 0.009845f, 0.049365f, 0.052589f, 0.080495f, 0.036801f, -0.042645f, -0.070089f, -0.043669f, -0.044746f, 0.026450f, 0.022150f, -0.095731f, -0.065725f, -0.016901f, 0.040301f, 0.087125f, -0.065315f, -0.002579f, -0.056700f, -0.007355f, 0.071147f, -0.039199f, 0.026764f, -0.056865f, -0.009349f, -0.016994f, 0.047951f, -0.053306f, -0.030456f, 0.000860f, 0.021125f, -0.043282f, 0.099286f, -0.023418f, -0.001645f, 0.056484f, -0.024918f, 0.042456f, -0.013643f, -0.035118f, -0.027376f, 0.016471f, 0.001520f, 0.014033f, 0.008699f, -0.031371f, 0.000745f, -0.013281f, 0.037936f, 0.022215f, 0.006588f, 0.020723f, 0.023578f, 0.001237f, -0.000448f, -0.007628f, -0.023887f, 0.048420f, -0.015168f, 0.010062f, 0.000221f, -0.028241f, 0.000954f, 0.002948f, -0.009067f, -0.018629f, -0.004217f, -0.011009f, - 0.002476f, 0.007053f, -0.008461f, 0.001461f, 0.032849f, 0.023409f, -0.004494f, -0.005529f, 0.031094f, -0.013352f, -0.004225f, -0.026714f, -0.038390f, -0.014567f, -0.010356f, -0.004543f, -0.010755f, -0.043290f, -0.083644f, 0.009779f, 0.046028f, -0.038964f, 0.071514f, -0.029075f, 0.028241f, -0.009996f, -0.083336f, -0.042956f, -0.004331f, -0.049289f, -0.112375f, -0.031891f, 0.040147f, 0.061720f, -0.030635f, -0.048460f, -0.100287f, -0.030217f, 0.029254f, -0.020378f, -0.029247f, -0.050198f, 0.011545f, -0.011736f, -0.008670f, -0.009850f, 0.019972f, 0.039652f, -0.031489f, 0.030528f, 0.026255f, -0.032124f, -0.091493f, 0.006923f, 0.007189f, 0.023022f, 0.010819f, 0.059174f, 0.005849f, -0.091296f, 0.000427f, -0.100492f, -0.000624f, 0.034126f, 0.041685f, -0.008323f, 0.005397f, 0.045859f, -0.024426f, -0.018285f, -0.031428f, 0.029465f, 0.021756f, -0.014997f, 0.035724f, -0.011793f, 0.014983f, 0.016063f, 0.058559f, 0.007190f, -0.020921f, -0.063437f, -0.021725f, 0.031936f, 0.028197f, 0.049206f, 0.072575f, 0.125095f, 0.062532f, 0.029576f, -0.032832f, -0.126970f, -0.034690f, -0.018931f, 0.096491f, -0.016937f, - 0.005945f, -0.001140f, -0.030532f, 0.003409f, 0.028254f, 0.012766f, -0.000724f, 0.000619f, 0.000474f, -0.000604f, 0.046785f, -0.017701f, -0.013985f, -0.016346f, 0.032455f, 0.011616f, 0.016415f, -0.013613f, -0.039946f, 0.012316f, 0.016888f, -0.019049f, -0.002678f, 0.009284f, -0.002282f, 0.002207f, -0.007068f, -0.058340f, -0.018804f, -0.005534f, 0.026394f, 0.040379f, 0.004969f, -0.035319f, -0.033460f, 0.014368f, 0.005656f, -0.004144f, -0.005591f, 0.000893f, -0.003453f, -0.002713f, 0.030812f, -0.034785f, 0.004430f, -0.030059f, 0.030855f, -0.017943f, 0.000837f, -0.042856f, -0.006351f, 0.027038f, -0.008560f, 0.014047f, -0.023764f, 0.006600f, -0.081541f, -0.024918f, 0.056450f, -0.028011f, -0.023546f, -0.006158f, -0.018429f, -0.065376f, -0.072725f, -0.106256f, -0.033685f, 0.000095f, -0.008397f, 0.069371f, 0.018933f, 0.090645f, 0.055799f, 0.028005f, -0.012868f, -0.033627f, -0.006448f, 0.127171f, 0.007703f, 0.036593f, 0.020473f, -0.016061f, 0.063203f, -0.026538f, 0.050973f, -0.055969f, -0.005767f, -0.040353f, 0.047953f, -0.067934f, -0.014510f, 0.020666f, 0.021151f, 0.021711f, -0.059528f, 0.042138f, - -0.068104f, 0.013727f, -0.033481f, -0.022838f, 0.067326f, 0.003937f, 0.004214f, 0.023197f, -0.025870f, -0.001563f, 0.017425f, -0.082433f, 0.001991f, 0.018955f, -0.012219f, 0.053028f, -0.023985f, -0.010424f, 0.089036f, -0.033857f, -0.074520f, 0.000155f, -0.028298f, 0.005978f, -0.005870f, -0.003939f, -0.059868f, 0.031844f, -0.009960f, -0.081345f, 0.048695f, -0.100739f, 0.019301f, -0.023111f, -0.040138f, -0.063685f, -0.008471f, 0.017208f, 0.029022f, 0.002584f, 0.023447f, 0.029358f, -0.035032f, 0.061345f, -0.014471f, 0.016387f, -0.001097f, 0.029272f, -0.001616f, -0.003325f, -0.010257f, 0.017304f, -0.036955f, -0.004750f, 0.011711f, 0.007918f, -0.014547f, -0.000253f, -0.016252f, -0.021254f, 0.010634f, 0.008675f, 0.015845f, 0.010324f, -0.004937f, 0.012447f, 0.036181f, -0.018074f, -0.019295f, 0.006340f, -0.002094f, 0.007118f, 0.026749f, -0.003898f, 0.014431f, 0.013758f, 0.013664f, -0.018408f, -0.022353f, -0.005483f, -0.002098f, -0.023123f, -0.001644f, -0.004610f, 0.009438f, -0.025257f, 0.007226f, -0.035250f, -0.124304f, -0.127739f, -0.109051f, -0.054984f, 0.225378f, 0.070572f, -0.028198f, -0.029432f, - -0.111598f, -0.236249f, -0.026702f, 0.063381f, 0.079106f, 0.033935f, -0.036458f, -0.027314f, -0.069745f, -0.076792f, 0.057508f, -0.055369f, 0.141988f, 0.106417f, -0.165964f, 0.053441f, 0.021583f, -0.034941f, 0.012676f, 0.118821f, 0.016819f, 0.081896f, 0.162707f, -0.035717f, -0.134042f, 0.006025f, -0.023072f, -0.124957f, -0.034271f, 0.059978f, -0.005763f, 0.073886f, 0.119515f, 0.010424f, -0.104142f, -0.203613f, -0.174875f, -0.156344f, -0.016703f, 0.150926f, 0.042801f, 0.040055f, 0.022427f, -0.041409f, -0.204126f, -0.127825f, -0.065605f, -0.025162f, 0.012184f, 0.045751f, 0.044426f, 0.057170f, 0.058591f, 0.072924f, -0.088135f, -0.031938f, -0.072227f, -0.006428f, -0.078970f, 0.048600f, 0.048557f, 0.099868f, 0.110957f, 0.052831f, 0.001391f, -0.029986f, -0.020832f, -0.137472f, -0.109458f, 0.095551f, 0.149704f, 0.101832f, 0.119574f, -0.029152f, -0.053789f, -0.108854f, -0.062035f, 0.031733f, 0.000016f, 0.007092f, 0.033471f, 0.010986f, 0.008287f, -0.026635f, -0.035114f, -0.017598f, -0.026575f, 0.000644f, 0.026230f, 0.007179f, 0.010041f, -0.006358f, 0.015221f, -0.029018f, 0.019026f, -0.008884f, - -0.026876f, -0.026472f, -0.008120f, -0.043818f, -0.013605f, -0.026897f, 0.027388f, 0.030873f, 0.014866f, 0.011785f, -0.028568f, -0.058433f, -0.057789f, 0.015058f, -0.005617f, 0.025931f, 0.022823f, 0.012044f, -0.042164f, -0.021570f, -0.040155f, -0.061810f, 0.018293f, 0.042728f, -0.016524f, -0.226811f, -0.253925f, -0.172748f, -0.177688f, -0.047666f, 0.198477f, 0.133598f, 0.214166f, 0.238583f, 0.362532f, 0.240684f, 0.249076f, 0.160618f, -0.012691f, -0.179658f, -0.310446f, -0.366586f, -0.318307f, -0.251108f, -0.181837f, -0.044220f, -0.009637f, -0.026552f, 0.008794f, 0.078524f, 0.129436f, 0.179843f, 0.156214f, 0.213212f, 0.205830f, 0.266247f, 0.243377f, 0.068187f, 0.163206f, -0.035826f, 0.044302f, 0.032683f, 0.008786f, -0.022949f, -0.238114f, -0.285569f, -0.365186f, -0.428101f, -0.389447f, -0.216485f, -0.192638f, -0.158356f, -0.198510f, -0.229421f, -0.049623f, 0.055770f, 0.143328f, 0.210521f, 0.304611f, 0.364287f, 0.467479f, 0.617345f, 0.599182f, 0.455223f, 0.368984f, 0.307287f, 0.162096f, 0.258016f, -0.105338f, -0.210895f, -0.504688f, -0.577491f, -0.718246f, -0.689687f, -0.631185f, -0.597784f, - -0.577846f, -0.355669f, -0.220874f, -0.120086f, 0.321649f, 0.328123f, 0.501281f, 0.644527f, 0.558311f, 0.504751f, 0.510096f, 0.401110f, 0.305293f, 0.167904f, 0.021406f, -0.002726f, -0.095402f, -0.115352f, -0.167769f, -0.216601f, -0.298028f, -0.321519f, -0.293372f, -0.337408f, -0.261499f, -0.239500f, -0.226790f, -0.198609f, -0.103268f, -0.020458f, 0.104655f, 0.217388f, 0.203219f, 0.317900f, 0.350543f, 0.387434f, 0.456530f, 0.369958f, 0.215082f, 0.107703f, -0.066644f, -0.168663f, -0.169670f, -0.326170f, -0.303126f, -0.413731f, -0.330464f, -0.342958f, -0.221335f, -0.230397f, -0.135825f, -0.017401f, 0.115086f, 0.174568f, 0.306778f, 0.358350f, 0.346615f, 0.337822f, 0.327954f, 0.252898f, 0.088927f, -0.058198f, -0.084830f, -0.109163f, -0.121794f, -0.136902f, -0.163123f, -0.150598f, -0.112571f, -0.120995f, -0.110585f, -0.095146f, -0.069474f, -0.030835f, -0.022092f, -0.015661f, 0.003355f, 0.020054f, 0.012604f, 0.018728f, 0.047881f, 0.057591f, 0.051324f, 0.034162f, 0.023304f, 0.017519f, 0.016969f} - }, - { - {0.024972f, 0.002931f, -0.010883f, 0.003851f, -0.006848f, 0.001910f, -0.004429f, -0.002761f, -0.005952f, 0.004374f, 0.007482f, 0.002236f, 0.002394f, -0.013486f, 0.002761f, 0.000334f, 0.004320f, 0.005279f, 0.002938f, 0.007899f, -0.001552f, -0.004266f, 0.000919f, 0.009422f, 0.000154f, -0.007043f, -0.000623f, 0.008038f, 0.004409f, 0.000957f, 0.000175f, 0.002337f, -0.000105f, 0.000710f, 0.001635f, -0.000148f, -0.002735f, -0.000230f, 0.000170f, 0.003223f, -0.004548f, -0.010827f, 0.008171f, 0.008166f, 0.007146f, 0.006705f, -0.000237f, 0.003708f, 0.006405f, -0.006522f, -0.001387f, -0.000065f, -0.008715f, 0.002102f, 0.000756f, 0.008096f, 0.000938f, 0.004587f, 0.000246f, 0.010153f, 0.005212f, -0.001360f, 0.007170f, 0.004379f, -0.002175f, -0.008091f, 0.002168f, 0.002252f, -0.002050f, 0.000726f, -0.004541f, -0.001108f, 0.004314f, 0.003036f, 0.003606f, 0.008393f, -0.001254f, -0.002499f, 0.001253f, 0.005037f, 0.011492f, -0.006573f, 0.003155f, 0.003186f, 0.003437f, -0.000230f, -0.000639f, 0.003625f, -0.001835f, 0.000207f, 0.001793f, -0.002029f, -0.000243f, 0.000434f, 0.000724f, -0.001286f, - -0.001981f, 0.001440f, -0.000387f, 0.000372f, -0.000642f, 0.002190f, -0.000133f, 0.002585f, -0.000459f, 0.021112f, -0.014079f, 0.004774f, 0.011894f, 0.002793f, 0.008390f, 0.010151f, -0.009188f, 0.001950f, -0.000818f, 0.003958f, -0.011654f, -0.009258f, -0.001703f, 0.009093f, 0.012335f, -0.004707f, -0.004049f, 0.005911f, -0.009966f, -0.013357f, -0.002439f, -0.015711f, 0.005412f, 0.005222f, 0.001454f, -0.009761f, -0.009906f, 0.003537f, -0.005753f, 0.001346f, -0.000262f, 0.010360f, 0.010967f, 0.009876f, -0.001574f, 0.006920f, -0.010788f, 0.004708f, -0.006348f, -0.000589f, 0.000606f, 0.008449f, -0.009092f, -0.008109f, 0.000095f, 0.011113f, 0.004617f, 0.004337f, -0.006700f, 0.003759f, 0.002789f, -0.003286f, -0.013862f, -0.002263f, -0.004680f, -0.006116f, -0.005463f, 0.006360f, -0.005813f, -0.001903f, 0.001483f, 0.003943f, 0.010014f, -0.003840f, -0.000200f, -0.007544f, -0.003610f, 0.001543f, -0.010391f, -0.000664f, 0.002888f, 0.007116f, -0.002225f, -0.005428f, -0.002691f, -0.010880f, 0.005185f, 0.003163f, 0.000675f, -0.000908f, -0.009339f, 0.003840f, 0.000825f, -0.003369f, 0.003463f, -0.001362f, - 0.000882f, 0.003086f, 0.000360f, 0.000618f, 0.003674f, 0.001587f, 0.000803f, 0.000068f, 0.002959f, 0.001041f, -0.000490f, 0.001168f, 0.001761f, -0.007454f, -0.013502f, -0.003372f, 0.002316f, -0.004170f, -0.006838f, -0.003794f, -0.013460f, -0.007585f, 0.014212f, -0.000580f, -0.006312f, 0.007530f, -0.011400f, -0.002620f, -0.014217f, -0.002964f, -0.011206f, -0.005866f, 0.013144f, 0.000679f, -0.002689f, -0.014853f, -0.009268f, -0.003361f, -0.006371f, 0.002500f, -0.007914f, 0.000762f, 0.004904f, 0.015723f, 0.007707f, 0.005890f, 0.006803f, 0.012726f, -0.010713f, -0.000136f, -0.003216f, -0.008262f, 0.003397f, -0.001698f, -0.003222f, -0.008647f, 0.004496f, 0.009069f, 0.000945f, -0.006604f, -0.004232f, 0.023231f, 0.000094f, -0.006687f, -0.009306f, -0.013944f, -0.018575f, -0.002326f, -0.009633f, 0.002223f, -0.001889f, 0.005182f, 0.000963f, 0.002503f, -0.008536f, 0.001270f, 0.001394f, 0.011240f, 0.003799f, -0.008418f, 0.000471f, -0.002622f, -0.002500f, -0.002011f, 0.004019f, 0.006025f, 0.005904f, -0.005514f, -0.005366f, 0.003380f, 0.001606f, 0.002210f, 0.002432f, -0.002147f, -0.008238f, -0.009676f, - -0.001144f, 0.001743f, -0.002309f, 0.001005f, 0.000067f, -0.001315f, -0.002040f, -0.003034f, -0.001178f, -0.000584f, -0.001822f, -0.003371f, 0.000286f, 0.001097f, -0.001823f, 0.000639f, -0.001604f, 0.000317f, -0.002007f, -0.001007f, 0.000396f, 0.000527f, -0.002419f, 0.000359f, -0.000921f, -0.004349f, 0.000451f, -0.001530f, 0.002442f, -0.032469f, 0.012862f, -0.005802f, 0.005441f, -0.013433f, -0.005403f, -0.010516f, -0.009615f, 0.000661f, -0.003021f, -0.006587f, 0.016554f, 0.004295f, -0.001524f, -0.010028f, -0.003163f, 0.004660f, -0.011483f, -0.006079f, -0.010936f, -0.006086f, 0.015823f, 0.001547f, 0.010554f, -0.001002f, -0.000097f, -0.002649f, 0.002998f, 0.002929f, -0.008380f, 0.000111f, 0.002521f, 0.004737f, 0.017167f, -0.008963f, -0.010392f, -0.002050f, 0.018987f, 0.005981f, 0.020206f, 0.001795f, 0.001865f, -0.003562f, 0.009982f, -0.001724f, 0.014715f, -0.001486f, -0.001710f, -0.002635f, -0.006120f, 0.006264f, 0.001899f, -0.005238f, 0.004278f, 0.005554f, 0.010215f, -0.005891f, -0.000517f, -0.001819f, 0.009097f, -0.003704f, -0.001535f, -0.003410f, -0.002330f, 0.002206f, -0.002982f, 0.001074f, - 0.001534f, -0.002206f, 0.002249f, -0.015053f, 0.001441f, 0.009812f, 0.003433f, 0.013136f, 0.001061f, 0.001413f, 0.003155f, 0.008378f, 0.013379f, -0.008832f, 0.001280f, -0.000675f, 0.003155f, -0.000396f, -0.000340f, 0.004035f, 0.008672f, 0.003364f, 0.004251f, 0.000494f, -0.001514f, -0.002233f, 0.001170f, 0.004427f, -0.001549f, 0.002029f, 0.002002f, 0.002113f, -0.000091f, 0.000933f, 0.003682f, -0.000612f, 0.000963f, -0.000105f, 0.004249f, 0.002519f, -0.001390f, -0.000212f, 0.004571f, 0.002385f, -0.001386f, 0.003408f, 0.001861f, -0.006951f, -0.003430f, -0.000148f, -0.016054f, -0.002683f, 0.000151f, -0.007991f, -0.028413f, -0.006890f, -0.006127f, -0.012382f, -0.002416f, -0.003185f, 0.017793f, -0.006173f, 0.013457f, 0.006303f, 0.009707f, -0.018270f, -0.008208f, -0.018462f, -0.017151f, -0.000015f, 0.003229f, 0.010740f, -0.005179f, -0.008072f, -0.004961f, -0.012487f, 0.002673f, 0.005680f, 0.006538f, 0.004023f, -0.003783f, 0.004649f, -0.008329f, 0.000895f, -0.015025f, 0.005422f, -0.003873f, 0.002053f, 0.003314f, 0.005609f, 0.005994f, -0.005748f, 0.000229f, 0.014549f, -0.007798f, 0.007048f, - 0.007407f, -0.000491f, 0.004437f, 0.007153f, -0.002952f, 0.002812f, 0.007058f, 0.000378f, 0.012444f, -0.006525f, -0.008609f, -0.004178f, 0.004071f, -0.000046f, -0.016536f, -0.008403f, -0.018321f, -0.019958f, -0.003396f, 0.005384f, -0.016253f, 0.007235f, -0.002638f, -0.000301f, -0.005564f, 0.005432f, -0.009669f, -0.001562f, -0.003378f, -0.013664f, -0.012031f, -0.004002f, 0.007148f, 0.000215f, 0.006130f, -0.002595f, 0.003968f, 0.003158f, -0.007552f, 0.000026f, -0.001496f, 0.004256f, -0.005091f, -0.008538f, -0.002785f, 0.001143f, -0.000006f, -0.003298f, 0.001451f, -0.002053f, -0.000774f, 0.001341f, -0.000453f, 0.000078f, -0.000175f, -0.001954f, -0.000423f, -0.001897f, -0.001258f, -0.001232f, -0.000043f, 0.000861f, 0.000104f, 0.002406f, 0.000932f, -0.001190f, 0.009174f, -0.026446f, -0.001275f, 0.008217f, 0.005186f, -0.014037f, -0.001709f, -0.008932f, 0.002299f, 0.002682f, 0.001920f, -0.015331f, -0.020522f, -0.013990f, 0.002404f, -0.011184f, 0.012242f, 0.003873f, -0.019759f, 0.014278f, 0.012523f, 0.009905f, 0.008876f, -0.009822f, 0.016099f, 0.004249f, -0.000115f, -0.006265f, 0.005445f, 0.009643f, - -0.008831f, -0.012980f, 0.004811f, -0.004898f, -0.016076f, -0.002149f, -0.015512f, -0.005660f, 0.028123f, -0.007501f, -0.012622f, -0.015670f, 0.000889f, 0.002561f, 0.011199f, 0.004454f, -0.010279f, 0.009365f, -0.001180f, -0.008089f, -0.010687f, -0.011370f, 0.017338f, 0.007749f, 0.010933f, -0.008253f, -0.011277f, 0.005098f, 0.002821f, -0.011628f, -0.000570f, -0.007131f, 0.011216f, -0.002162f, 0.001017f, -0.013741f, 0.008792f, 0.007342f, -0.007797f, -0.005034f, -0.004832f, 0.015549f, 0.000205f, 0.002280f, -0.004475f, 0.010654f, -0.010867f, -0.018516f, -0.008243f, 0.001600f, -0.003529f, 0.010080f, -0.002056f, -0.001173f, -0.010775f, -0.005708f, 0.004691f, 0.000605f, -0.007664f, -0.005032f, 0.006572f, 0.003520f, -0.002068f, 0.000268f, 0.000113f, -0.000020f, -0.002100f, 0.002824f, 0.001278f, 0.004401f, 0.000718f, 0.000744f, 0.000171f, 0.001890f, -0.000891f, 0.002739f, -0.003616f, 0.003763f, -0.014200f, -0.000624f, 0.003497f, -0.003567f, -0.011353f, -0.016845f, -0.013498f, 0.013573f, 0.001572f, 0.016641f, 0.019871f, 0.019293f, 0.002918f, 0.026486f, 0.006352f, -0.002953f, 0.012248f, 0.009345f, - 0.024481f, 0.003521f, 0.014075f, -0.019332f, 0.031805f, 0.023393f, 0.011311f, -0.009663f, -0.007656f, 0.011484f, 0.002655f, 0.008237f, -0.004726f, 0.013710f, -0.004092f, -0.003568f, 0.012345f, 0.010017f, -0.012554f, 0.008453f, -0.003351f, 0.013353f, 0.014524f, -0.028474f, -0.005237f, 0.017549f, 0.005308f, 0.009556f, 0.007543f, 0.017377f, -0.008377f, 0.006972f, 0.000347f, -0.014630f, -0.007112f, -0.000400f, 0.003076f, -0.021482f, -0.001792f, 0.013592f, -0.010704f, 0.022814f, 0.017129f, -0.006886f, -0.000165f, 0.004380f, 0.008596f, 0.013324f, -0.005117f, -0.004295f, 0.021624f, -0.005092f, -0.000399f, 0.009402f, 0.000490f, 0.012634f, 0.010103f, 0.004163f, 0.007000f, 0.007288f, 0.006993f, 0.003225f, 0.003005f, -0.002995f, -0.004982f, -0.002106f, -0.004532f, -0.000532f, -0.003147f, 0.002402f, 0.002219f, -0.004564f, -0.003553f, -0.000535f, 0.003546f, 0.007068f, 0.005960f, 0.003353f, 0.000740f, 0.003519f, -0.006005f, -0.002733f, -0.003191f, 0.001359f, -0.002291f, 0.003158f, -0.006988f, 0.000781f, -0.000045f, 0.006106f, 0.002518f, 0.000313f, 0.001139f, 0.006329f, 0.002023f, -0.005441f, - 0.001894f, -0.000492f, 0.001566f, 0.055313f, -0.028928f, 0.004033f, 0.022811f, -0.002193f, 0.000829f, 0.030188f, 0.033103f, 0.003930f, -0.002511f, 0.006963f, -0.001576f, 0.007480f, 0.009527f, -0.012098f, -0.003687f, 0.019540f, 0.017279f, -0.008065f, -0.015704f, -0.016826f, -0.017427f, -0.009433f, 0.014544f, -0.011179f, 0.006399f, 0.000769f, -0.020365f, -0.001387f, -0.013521f, -0.001646f, 0.005891f, 0.008934f, -0.026416f, -0.012456f, -0.021022f, -0.006568f, 0.031972f, 0.004574f, -0.002826f, 0.002808f, -0.002840f, 0.001545f, 0.009486f, 0.005500f, 0.015998f, -0.000890f, 0.011973f, 0.007059f, -0.011048f, 0.007012f, -0.016844f, 0.000441f, -0.016917f, -0.017751f, 0.006768f, -0.019528f, 0.008274f, -0.000268f, 0.010004f, 0.007854f, 0.007239f, -0.010448f, 0.012211f, -0.017718f, -0.000285f, -0.008189f, -0.002669f, 0.022143f, 0.000883f, 0.011059f, 0.011095f, -0.002306f, -0.004123f, 0.008531f, -0.018248f, 0.007297f, 0.017557f, -0.026053f, -0.019006f, -0.005357f, 0.013306f, -0.001275f, -0.015872f, 0.005981f, -0.002219f, 0.006801f, -0.005769f, 0.002050f, -0.003225f, 0.011418f, -0.002018f, 0.010494f, - 0.005963f, 0.009795f, 0.003545f, 0.002675f, -0.005046f, 0.006613f, 0.003112f, -0.000287f, 0.004065f, 0.003319f, -0.001766f, 0.004915f, 0.004063f, -0.002487f, -0.002451f, -0.008566f, -0.001604f, -0.004920f, 0.000002f, -0.000279f, -0.002700f, 0.004307f, -0.001314f, 0.002497f, 0.001122f, 0.008807f, -0.006822f, -0.033023f, 0.006147f, 0.007977f, -0.022306f, 0.010076f, -0.000147f, 0.023382f, -0.006169f, -0.011896f, 0.009901f, -0.028908f, -0.009937f, 0.024371f, 0.010701f, -0.014848f, -0.035690f, 0.015880f, -0.004959f, 0.008714f, -0.022766f, -0.030204f, -0.020474f, 0.026098f, 0.002153f, 0.014386f, -0.002497f, -0.013857f, -0.020510f, 0.009655f, -0.005459f, -0.017891f, -0.020868f, 0.001482f, -0.018625f, -0.014368f, -0.007805f, -0.003721f, -0.020179f, 0.011282f, 0.013525f, 0.018231f, -0.008717f, 0.016200f, -0.013057f, 0.025658f, -0.004758f, -0.001411f, 0.019600f, 0.010035f, -0.004827f, -0.013203f, -0.006572f, 0.018863f, 0.004394f, -0.014089f, 0.006738f, 0.020039f, 0.019008f, 0.008121f, -0.023180f, -0.025665f, -0.002269f, 0.004939f, 0.001618f, -0.018487f, 0.005553f, 0.020318f, 0.005920f, -0.008719f, - -0.032792f, 0.008732f, -0.014253f, -0.032052f, 0.001026f, 0.001670f, -0.018064f, 0.025978f, -0.001856f, -0.010742f, -0.035457f, -0.000259f, -0.010418f, -0.001688f, 0.013346f, -0.007984f, -0.013545f, -0.000950f, 0.003079f, 0.003177f, -0.010734f, -0.010945f, -0.010806f, 0.003961f, -0.009325f, 0.000553f, -0.001665f, 0.001492f, -0.002578f, 0.002587f, 0.004790f, 0.004205f, 0.005472f, 0.002665f, 0.009820f, 0.012427f, 0.000723f, 0.003633f, 0.002308f, -0.004891f, -0.001336f, -0.003992f, 0.001546f, 0.001333f, 0.000754f, -0.012136f, 0.001450f, -0.001062f, -0.004395f, -0.000611f, -0.003949f, 0.003616f, -0.004831f, -0.005124f, -0.040859f, 0.025658f, 0.019795f, 0.021792f, 0.003117f, 0.023031f, 0.002367f, -0.014719f, -0.017029f, 0.002617f, 0.018493f, -0.012694f, 0.004337f, -0.027511f, 0.018951f, 0.020098f, -0.010041f, -0.005635f, 0.004695f, 0.022008f, 0.016080f, -0.011277f, -0.010063f, 0.015076f, -0.017936f, 0.006309f, -0.024546f, 0.000052f, -0.007170f, -0.032933f, -0.033962f, 0.006711f, 0.019786f, 0.009220f, -0.028970f, -0.015586f, 0.022391f, -0.024552f, -0.010087f, 0.019883f, -0.005174f, 0.024831f, - -0.008529f, -0.017135f, 0.006669f, -0.024972f, 0.029071f, -0.002944f, 0.005296f, -0.013401f, -0.006691f, -0.001042f, -0.026933f, -0.016425f, 0.002361f, -0.004264f, 0.002889f, -0.008637f, -0.028591f, 0.005566f, -0.023639f, 0.010794f, -0.005818f, 0.017364f, -0.028529f, 0.013093f, 0.005102f, -0.008004f, 0.021593f, -0.002529f, -0.014523f, -0.028043f, -0.003615f, 0.006382f, -0.022580f, 0.017001f, -0.015197f, 0.011094f, -0.029791f, -0.030481f, 0.014765f, 0.011796f, -0.012075f, -0.009483f, 0.009921f, 0.006805f, -0.006340f, -0.005305f, -0.008079f, -0.010484f, -0.000803f, -0.016950f, -0.001640f, -0.002338f, 0.001452f, 0.004867f, -0.002999f, 0.004919f, -0.003129f, -0.000944f, -0.009077f, -0.004470f, -0.002346f, -0.001092f, 0.013809f, -0.003944f, -0.001751f, 0.007983f, -0.008362f, 0.006001f, 0.003568f, -0.003216f, -0.001904f, -0.008493f, -0.007777f, -0.000271f, -0.004480f, -0.005422f, 0.013371f, -0.012946f, 0.004463f, 0.015918f, 0.023467f, -0.006152f, 0.002621f, -0.008274f, -0.031290f, -0.006635f, -0.006689f, 0.013657f, -0.027489f, -0.000022f, -0.015858f, 0.017128f, -0.019233f, -0.026166f, 0.017448f, 0.008081f, - 0.011347f, 0.036201f, -0.005963f, -0.010284f, 0.010185f, -0.023062f, -0.027002f, 0.002307f, 0.034561f, 0.010604f, 0.019394f, -0.013704f, -0.016992f, -0.027396f, 0.005472f, 0.035204f, -0.015758f, 0.018452f, 0.004190f, 0.027402f, -0.041793f, -0.013168f, -0.000734f, 0.005019f, 0.023750f, 0.011591f, -0.031867f, -0.008500f, -0.014814f, -0.001138f, -0.036692f, -0.005634f, -0.013240f, 0.002664f, -0.019339f, -0.001146f, 0.004423f, -0.053359f, 0.006074f, -0.016631f, 0.003225f, -0.021029f, -0.001217f, 0.013308f, 0.006655f, -0.007048f, -0.006849f, -0.028055f, 0.028291f, 0.027416f, 0.008914f, 0.006962f, -0.024557f, 0.037543f, 0.012937f, 0.019440f, -0.007440f, -0.058653f, 0.022848f, -0.001833f, 0.044051f, 0.041648f, 0.012991f, -0.005134f, 0.018177f, 0.001163f, 0.015905f, 0.001063f, 0.001739f, -0.010205f, 0.004884f, -0.009300f, -0.005182f, -0.002436f, 0.019141f, -0.000054f, 0.001059f, 0.005168f, -0.001327f, -0.010160f, -0.005454f, 0.002007f, 0.007693f, -0.003435f, 0.003772f, -0.005854f, 0.008006f, -0.006131f, -0.009930f, -0.004738f, -0.001539f, 0.004847f, 0.001653f, -0.001839f, -0.001834f, -0.001882f, - 0.012570f, -0.002496f, 0.000600f, 0.002385f, 0.006199f, 0.050692f, 0.017896f, 0.034704f, -0.033612f, 0.007853f, 0.035386f, -0.010592f, -0.012707f, 0.005031f, -0.021828f, 0.016726f, 0.004264f, -0.025499f, -0.033398f, -0.002479f, 0.028391f, -0.000701f, -0.002250f, 0.018586f, -0.027668f, -0.007026f, -0.022770f, 0.012842f, -0.038828f, 0.000673f, -0.008274f, 0.014167f, -0.040554f, -0.028011f, -0.017701f, 0.011928f, 0.013098f, 0.009074f, -0.013131f, 0.009895f, -0.009760f, 0.012066f, -0.008000f, -0.003524f, -0.002759f, -0.011367f, 0.007758f, 0.017994f, 0.010731f, 0.018114f, -0.001453f, -0.017511f, 0.002536f, -0.017436f, 0.046569f, -0.011731f, -0.045737f, -0.014230f, 0.012548f, 0.039789f, -0.039758f, -0.016378f, -0.002557f, 0.025595f, 0.001674f, -0.056287f, -0.006878f, 0.026020f, 0.053714f, 0.002018f, 0.037406f, 0.053867f, -0.003969f, 0.017360f, 0.025476f, -0.007012f, 0.045919f, -0.006137f, 0.055444f, 0.008853f, -0.015185f, -0.048023f, -0.030061f, 0.000387f, 0.014491f, 0.006932f, -0.007275f, -0.009310f, -0.014893f, -0.020353f, -0.018073f, 0.022068f, 0.006486f, -0.000241f, -0.031555f, -0.003543f, - 0.001202f, -0.005741f, -0.017928f, 0.004715f, 0.009551f, -0.002696f, -0.009272f, -0.006769f, -0.017564f, -0.010606f, -0.005136f, 0.011113f, -0.002134f, -0.009562f, 0.009646f, -0.013748f, 0.009941f, 0.010016f, -0.008587f, -0.016669f, 0.015293f, 0.022678f, 0.003511f, 0.000713f, 0.001420f, 0.013220f, -0.003896f, -0.015767f, 0.001904f, 0.015318f, 0.012721f, -0.015657f, -0.013262f, 0.002455f, 0.002557f, 0.000237f, 0.004578f, -0.002441f, 0.021347f, 0.025832f, -0.044202f, -0.043002f, 0.011455f, -0.010000f, 0.001417f, -0.017088f, 0.040233f, -0.018002f, -0.011479f, 0.014005f, 0.010124f, 0.000430f, -0.018307f, -0.013403f, -0.022291f, 0.009052f, -0.001230f, -0.010769f, -0.001718f, 0.026757f, 0.040184f, -0.043343f, -0.002704f, -0.042281f, -0.004442f, -0.010898f, 0.042023f, -0.017674f, -0.016864f, -0.008109f, 0.025602f, 0.008522f, 0.007114f, 0.010750f, 0.010287f, -0.007536f, 0.000573f, -0.005449f, 0.006889f, -0.004964f, 0.039347f, -0.010186f, 0.010497f, 0.027702f, -0.014330f, -0.031694f, 0.007137f, 0.010866f, -0.011091f, -0.012124f, -0.002578f, 0.006578f, 0.020000f, -0.027139f, 0.036519f, 0.053642f, - 0.036084f, -0.014991f, -0.021605f, -0.049569f, -0.063951f, -0.023507f, -0.000162f, -0.011533f, -0.003162f, -0.007241f, 0.015395f, -0.001278f, -0.024646f, 0.013038f, -0.010865f, -0.002307f, 0.023588f, 0.039244f, -0.009505f, 0.011064f, -0.006804f, 0.002196f, 0.035779f, 0.018075f, 0.030616f, 0.031116f, -0.024731f, -0.007592f, -0.005588f, 0.000930f, -0.000467f, 0.011106f, 0.000869f, 0.006826f, 0.031402f, 0.001350f, 0.014733f, -0.006586f, -0.006754f, -0.012771f, -0.003816f, 0.001870f, 0.014377f, -0.003910f, -0.011735f, -0.005532f, 0.006994f, -0.004880f, -0.002522f, -0.003627f, 0.004476f, 0.001178f, -0.004457f, -0.002437f, 0.003354f, 0.001634f, 0.001797f, 0.018098f, -0.007223f, 0.000497f, 0.002516f, 0.000312f, -0.009777f, 0.004606f, 0.005810f, 0.011577f, -0.022757f, 0.043163f, 0.019447f, 0.024584f, 0.036869f, 0.056935f, -0.021791f, 0.029494f, -0.058497f, -0.007142f, -0.026208f, -0.057474f, 0.023350f, 0.013697f, 0.017585f, 0.007766f, 0.022870f, 0.007032f, -0.041355f, 0.034947f, 0.061670f, -0.009148f, -0.009856f, 0.015160f, 0.006177f, -0.012799f, -0.054875f, 0.004572f, 0.000246f, -0.004923f, - 0.000793f, 0.018760f, -0.039220f, 0.008574f, 0.011201f, -0.008006f, -0.022604f, -0.010971f, -0.025199f, 0.025780f, -0.056343f, -0.008105f, -0.036225f, 0.020215f, 0.008194f, 0.020499f, -0.007137f, 0.005635f, -0.014379f, 0.034582f, 0.010428f, 0.028402f, -0.025737f, 0.027919f, -0.000595f, -0.027192f, 0.056354f, -0.009261f, 0.006932f, 0.038109f, -0.036515f, 0.042708f, 0.025513f, -0.033342f, 0.014132f, -0.012701f, 0.018768f, -0.046219f, 0.033869f, 0.004873f, 0.011920f, -0.004268f, 0.010987f, -0.037518f, 0.023966f, 0.042769f, -0.084791f, 0.008747f, 0.081837f, -0.052763f, -0.016938f, 0.005858f, 0.039902f, 0.028363f, 0.009860f, 0.024792f, -0.011133f, 0.014983f, -0.006184f, -0.018013f, 0.008974f, -0.003964f, -0.003023f, 0.015469f, 0.022342f, -0.001830f, -0.008661f, -0.007361f, 0.006624f, 0.014325f, -0.018875f, -0.006994f, -0.012912f, -0.007958f, -0.016877f, 0.016985f, 0.022333f, -0.004619f, 0.010290f, -0.006262f, 0.004189f, 0.014296f, 0.016050f, -0.018374f, 0.001587f, 0.006932f, -0.009678f, 0.014775f, 0.000774f, -0.000198f, 0.013316f, 0.006896f, -0.015973f, -0.013281f, 0.004566f, 0.002233f, - -0.004810f, 0.002827f, 0.034248f, -0.020890f, -0.025137f, -0.000894f, -0.024072f, -0.010993f, -0.063433f, -0.054148f, -0.007581f, -0.031103f, -0.037341f, -0.026940f, 0.016401f, -0.009650f, -0.018974f, -0.030347f, 0.027813f, 0.001794f, -0.045851f, -0.007291f, -0.000402f, -0.021834f, -0.006990f, 0.018480f, 0.013188f, -0.003288f, 0.000018f, 0.000798f, -0.011627f, 0.009687f, 0.021188f, -0.008067f, -0.005250f, 0.032706f, -0.061719f, -0.010089f, 0.017165f, 0.065585f, -0.027345f, -0.017085f, -0.024655f, -0.033364f, 0.014362f, 0.069606f, 0.012767f, 0.043100f, 0.008739f, -0.007133f, -0.003814f, -0.005200f, -0.033786f, 0.007325f, 0.007429f, -0.027403f, 0.005885f, 0.054370f, -0.009006f, -0.016816f, 0.008942f, -0.019569f, -0.004666f, 0.047964f, 0.070768f, 0.019122f, 0.042409f, 0.049208f, -0.017661f, -0.020582f, 0.005420f, -0.016286f, 0.002607f, -0.048716f, -0.000629f, -0.037963f, 0.011344f, 0.007908f, 0.022923f, -0.039516f, -0.014966f, -0.013484f, -0.015684f, -0.012377f, -0.014061f, 0.022000f, 0.004533f, 0.028360f, -0.007413f, 0.010815f, 0.028140f, -0.005203f, 0.000788f, -0.004104f, -0.011476f, -0.009042f, - -0.001762f, -0.006827f, -0.010571f, -0.000162f, 0.004069f, -0.005338f, 0.001686f, 0.013266f, -0.013510f, -0.012064f, 0.000684f, 0.009958f, 0.004924f, -0.006351f, -0.019912f, -0.019114f, -0.002578f, 0.004533f, -0.011910f, -0.006466f, 0.003896f, -0.003918f, 0.001831f, 0.001452f, 0.013228f, 0.004577f, 0.003189f, -0.014688f, 0.016094f, -0.006802f, 0.050497f, 0.057030f, -0.022731f, 0.128893f, -0.017591f, 0.003058f, -0.023722f, 0.015273f, -0.009973f, 0.015075f, 0.033183f, 0.009482f, -0.030741f, -0.016645f, -0.032125f, -0.000427f, -0.021776f, -0.039821f, 0.005469f, 0.026016f, -0.004268f, 0.007648f, 0.012411f, 0.015301f, -0.000118f, -0.011413f, -0.014932f, 0.007756f, 0.000021f, -0.019800f, 0.007935f, 0.055469f, 0.039254f, 0.022351f, -0.046826f, 0.033820f, 0.026484f, -0.012277f, -0.014199f, -0.014262f, -0.018651f, -0.007982f, 0.015351f, -0.033891f, 0.003387f, 0.004335f, 0.020537f, 0.052878f, 0.010334f, 0.011038f, 0.003014f, -0.006221f, -0.010535f, 0.022986f, -0.013731f, 0.053393f, 0.017296f, -0.005059f, 0.023499f, 0.004530f, -0.035768f, -0.025750f, 0.030458f, 0.035027f, 0.013144f, -0.008649f, - 0.023396f, 0.025082f, 0.035774f, 0.069667f, 0.007642f, -0.019914f, -0.035593f, -0.023807f, 0.018262f, 0.004021f, 0.006046f, -0.003221f, 0.024669f, 0.002688f, -0.002775f, -0.032386f, -0.015798f, 0.033911f, 0.038149f, -0.013431f, -0.025559f, -0.030693f, -0.008697f, 0.016610f, 0.010628f, 0.003134f, -0.010181f, 0.002771f, 0.000233f, -0.013537f, 0.000379f, -0.030010f, -0.007570f, -0.001052f, 0.021873f, -0.003793f, -0.006267f, 0.000263f, 0.017803f, -0.010392f, 0.012845f, -0.006419f, -0.013844f, 0.012350f, 0.017615f, 0.011259f, 0.012555f, -0.001460f, 0.013427f, 0.024985f, 0.011172f, 0.010741f, 0.007451f, -0.009057f, -0.003821f, 0.000814f, -0.001879f, 0.007601f, -0.006665f, 0.012333f, 0.016104f, 0.009448f, 0.001507f, -0.011840f, 0.005081f, 0.004497f, 0.013078f, 0.020895f, -0.020001f, 0.092100f, -0.013689f, 0.003916f, 0.010214f, -0.006945f, -0.001275f, 0.023106f, -0.017118f, -0.020238f, -0.010620f, 0.029818f, 0.026627f, -0.071154f, 0.013745f, 0.012226f, 0.029138f, -0.018152f, -0.028076f, -0.026698f, 0.020387f, 0.018503f, -0.028685f, -0.015599f, -0.011763f, 0.048012f, 0.024132f, 0.013581f, - -0.009265f, -0.049499f, 0.014091f, 0.012633f, 0.025616f, -0.006000f, 0.013629f, -0.013609f, 0.004869f, -0.042947f, 0.017937f, 0.017814f, 0.000663f, -0.010503f, -0.027010f, -0.053426f, 0.034805f, -0.022382f, 0.017911f, 0.018562f, 0.030753f, 0.004514f, -0.032646f, 0.054623f, 0.010682f, -0.052915f, -0.024634f, 0.032077f, 0.007598f, 0.041923f, 0.017645f, 0.007154f, -0.037866f, -0.018432f, 0.021176f, -0.065602f, 0.070996f, -0.050375f, 0.002891f, 0.042913f, -0.011428f, 0.084764f, 0.012673f, 0.015655f, -0.030570f, 0.098709f, 0.010272f, 0.064356f, -0.043428f, -0.019060f, -0.013657f, 0.025365f, -0.002635f, -0.009560f, 0.044641f, -0.036449f, 0.043056f, -0.050645f, 0.011042f, 0.005686f, 0.009366f, -0.009394f, 0.037963f, -0.004040f, 0.019377f, 0.017571f, 0.025234f, 0.014862f, 0.007449f, 0.018189f, 0.019722f, 0.001260f, 0.007295f, 0.002761f, -0.013213f, 0.017442f, 0.000597f, 0.012184f, 0.023865f, 0.012531f, 0.001608f, -0.000598f, 0.018295f, 0.020194f, 0.009885f, -0.010534f, 0.039939f, -0.001187f, -0.007892f, -0.007152f, 0.025664f, -0.018813f, 0.008966f, -0.003679f, 0.013828f, 0.001476f, - 0.005780f, 0.008163f, -0.005392f, -0.003759f, 0.003963f, 0.008247f, 0.006671f, 0.008600f, 0.010322f, -0.011421f, 0.032305f, 0.075925f, 0.025210f, 0.047676f, 0.060780f, -0.002615f, 0.069701f, -0.053721f, -0.019234f, -0.020238f, -0.017755f, 0.007435f, 0.011392f, -0.004633f, -0.023713f, -0.046229f, 0.044336f, 0.041788f, 0.017769f, 0.037732f, -0.061890f, -0.053673f, 0.018106f, 0.025532f, -0.028589f, -0.040279f, 0.025727f, -0.012774f, -0.057667f, -0.021323f, -0.010945f, 0.028431f, -0.053008f, 0.029239f, 0.019996f, 0.023132f, -0.024760f, -0.001629f, -0.024485f, -0.010936f, -0.070607f, -0.017385f, 0.034337f, -0.112176f, -0.035415f, -0.004466f, -0.002428f, 0.003697f, -0.067301f, -0.016954f, -0.101397f, -0.008649f, 0.020146f, -0.029095f, -0.031659f, -0.013339f, 0.030628f, -0.010523f, -0.036491f, -0.041943f, -0.105784f, -0.037979f, 0.049672f, -0.047094f, -0.071159f, 0.059439f, -0.018625f, -0.080369f, 0.024353f, 0.072129f, -0.038580f, -0.017804f, 0.008883f, -0.052810f, 0.065328f, 0.028664f, 0.041869f, -0.022122f, -0.004491f, 0.021154f, 0.062237f, 0.028635f, 0.009933f, -0.020200f, -0.004191f, 0.070148f, - 0.007008f, 0.010650f, -0.005024f, -0.041880f, -0.018287f, 0.032741f, -0.000567f, 0.001718f, -0.006561f, -0.037480f, -0.002638f, 0.015661f, -0.022829f, 0.026907f, -0.035299f, -0.023189f, 0.007507f, -0.012887f, 0.018653f, 0.007039f, -0.032081f, 0.012816f, 0.016455f, 0.008268f, 0.006405f, -0.013586f, 0.007988f, -0.000809f, -0.007627f, -0.023410f, 0.011675f, 0.008799f, -0.002377f, 0.016757f, -0.025112f, 0.002315f, -0.024018f, 0.000092f, 0.006784f, -0.009197f, -0.003871f, -0.001824f, 0.009973f, 0.000780f, 0.088654f, 0.122201f, -0.018029f, -0.002833f, -0.046566f, -0.046869f, -0.081446f, 0.035856f, -0.013054f, 0.122054f, -0.024641f, -0.051502f, -0.072014f, 0.005115f, 0.023623f, -0.026090f, 0.023797f, 0.080087f, -0.030480f, -0.013266f, -0.054416f, -0.024328f, 0.054493f, 0.062634f, -0.061350f, -0.016820f, 0.032758f, -0.012633f, 0.014973f, -0.017790f, 0.078678f, 0.063168f, 0.133506f, 0.044016f, 0.059526f, -0.025328f, 0.042926f, 0.090462f, 0.029960f, -0.004954f, 0.021772f, -0.002259f, 0.059316f, 0.031344f, 0.086109f, 0.024786f, -0.085149f, 0.030968f, 0.034063f, 0.071601f, -0.038794f, -0.032994f, - 0.041912f, 0.045262f, -0.020339f, 0.071966f, -0.024035f, 0.029950f, -0.077390f, 0.050289f, -0.017456f, 0.027913f, 0.028787f, 0.063183f, 0.055029f, -0.042300f, -0.043990f, -0.013711f, 0.066410f, 0.066926f, -0.024005f, -0.036008f, -0.069554f, -0.007297f, 0.050641f, 0.057046f, 0.038497f, -0.015747f, -0.045668f, -0.043420f, -0.006551f, 0.031373f, -0.029449f, 0.043458f, 0.011677f, 0.030551f, 0.006445f, -0.014568f, 0.035049f, 0.022067f, -0.003918f, -0.013763f, 0.011821f, 0.029433f, -0.040506f, 0.017429f, 0.022115f, 0.028681f, 0.016628f, 0.040287f, -0.011846f, 0.014573f, -0.017328f, -0.026666f, 0.017032f, 0.033976f, 0.030689f, 0.045413f, 0.000864f, -0.000092f, 0.014809f, 0.012405f, 0.081451f, 0.015813f, -0.002050f, -0.034608f, 0.001540f, 0.051615f, 0.027408f, 0.039933f, 0.024427f, -0.000818f, 0.002086f, -0.008607f, 0.001047f, 0.049535f, 0.042293f, 0.004472f, 0.016683f, -0.004852f, -0.006727f, 0.001886f, 0.022200f, 0.015825f, 0.015201f, -0.010682f, -0.009041f, 0.011853f, 0.003049f, -0.029611f, -0.098279f, 0.007009f, 0.150961f, 0.090199f, -0.020905f, -0.220947f, -0.031464f, -0.022370f, - 0.017440f, -0.025090f, 0.004342f, 0.023109f, -0.008285f, 0.010001f, -0.047925f, 0.030754f, 0.037126f, 0.068352f, -0.049218f, -0.062382f, 0.064756f, 0.102284f, 0.025971f, -0.045435f, -0.060349f, -0.013000f, 0.015415f, 0.005732f, 0.016373f, 0.000389f, 0.022714f, 0.009067f, 0.066973f, -0.021327f, -0.091484f, -0.039740f, 0.029701f, 0.010789f, -0.031497f, -0.040140f, 0.005558f, 0.043239f, 0.077023f, 0.070467f, -0.001286f, 0.001172f, 0.029138f, -0.027260f, -0.078901f, 0.024036f, -0.049125f, 0.095006f, 0.104465f, -0.002131f, 0.029692f, 0.014882f, 0.021056f, -0.046104f, -0.006350f, 0.099054f, -0.037036f, 0.000882f, -0.134317f, -0.017923f, 0.015551f, 0.031104f, 0.029648f, 0.027833f, -0.032983f, -0.021000f, 0.061307f, 0.089178f, -0.015376f, -0.003907f, 0.009052f, 0.035873f, 0.043943f, -0.020298f, 0.015063f, -0.048622f, -0.056912f, 0.005813f, 0.016168f, 0.021171f, -0.006554f, -0.009040f, -0.010401f, -0.012410f, 0.039641f, -0.000303f, -0.006864f, -0.020691f, -0.001148f, 0.024124f, 0.022445f, -0.011828f, 0.030525f, 0.006787f, 0.046189f, 0.003674f, 0.008605f, 0.001409f, -0.015515f, -0.013798f, - -0.007491f, -0.010759f, -0.002562f, -0.013891f, -0.009055f, 0.003367f, 0.038543f, 0.042841f, 0.013335f, 0.022181f, 0.008979f, 0.007651f, 0.037715f, -0.026977f, 0.028779f, 0.009979f, 0.046830f, -0.012595f, 0.012666f, 0.008308f, -0.018200f, 0.014442f, -0.008345f, 0.014736f, -0.004637f, 0.025302f, -0.008404f, -0.016177f, 0.013276f, 0.005291f, 0.006801f, 0.009794f, 0.006991f, 0.017832f, 0.004114f, 0.006455f, 0.003914f, 0.006033f, 0.006931f, 0.005095f, 0.012422f, 0.008186f, 0.001885f, 0.001203f, 0.003176f, 0.011065f, 0.008959f, 0.008250f, 0.010203f, -0.011708f, -0.099537f, -0.041292f, 0.079254f, 0.087399f, 0.082958f, 0.112603f, 0.019165f, -0.048706f, -0.149012f, -0.113107f, -0.021503f, 0.031382f, 0.094068f, 0.102457f, 0.048274f, 0.002160f, -0.050205f, -0.043356f, -0.019455f, 0.031923f, 0.087757f, 0.049907f, -0.011891f, 0.003112f, -0.007472f, -0.048427f, -0.066452f, -0.054222f, 0.009841f, 0.080990f, 0.060568f, 0.121831f, 0.078942f, 0.078440f, 0.110114f, -0.032230f, -0.076679f, -0.086878f, -0.115681f, -0.142049f, -0.053985f, -0.016789f, 0.041781f, 0.078158f, 0.112506f, 0.105497f, - 0.085321f, 0.054235f, 0.108037f, -0.021234f, -0.069036f, -0.003229f, -0.017939f, 0.028700f, 0.032341f, 0.129500f, 0.112582f, -0.042046f, 0.019774f, -0.029442f, -0.087113f, -0.025534f, 0.022454f, -0.052103f, 0.079933f, -0.032205f, 0.026190f, 0.006888f, -0.009762f, 0.069671f, 0.096154f, 0.077192f, 0.053680f, -0.040157f, -0.098463f, -0.111307f, 0.031156f, -0.046900f, 0.007930f, -0.005314f, 0.062199f, 0.009871f, 0.034906f, -0.029991f, -0.069245f, -0.063579f, -0.100578f, -0.086806f, 0.036201f, 0.020825f, 0.049609f, 0.075783f, 0.058224f, 0.002314f, -0.045330f, -0.071861f, -0.098284f, -0.053324f, -0.025668f, -0.035856f, 0.015343f, -0.013002f, -0.012095f, -0.011521f, -0.030408f, 0.000314f, -0.013952f, -0.019649f, -0.024327f, -0.014940f, -0.003968f, 0.015616f, -0.029280f, -0.017780f, 0.041552f, 0.004159f, -0.222520f, -0.234203f, -0.243610f, -0.249698f, -0.329950f, -0.035806f, -0.093332f, -0.022576f, 0.030829f, 0.150327f, 0.170836f, 0.176647f, 0.247251f, 0.341804f, 0.327505f, 0.321876f, 0.258607f, 0.186807f, 0.135746f, 0.040840f, -0.155939f, -0.074797f, -0.092124f, -0.057017f, -0.187280f, -0.031032f, - -0.077504f, -0.085344f, -0.154964f, -0.119058f, -0.121147f, -0.109721f, -0.114639f, -0.201457f, -0.178411f, -0.105239f, -0.095172f, -0.119540f, -0.165661f, -0.025115f, -0.145057f, -0.274953f, -0.235609f, -0.206825f, -0.109020f, -0.140481f, -0.025059f, -0.284584f, -0.126004f, -0.126006f, -0.058218f, -0.042402f, -0.146532f, 0.006593f, -0.146808f, -0.017636f, 0.022937f, 0.068930f, 0.006222f, 0.070844f, 0.105664f, 0.166155f, 0.177056f, 0.243618f, 0.159170f, 0.382231f, 0.241524f, 0.444894f, 0.302449f, 0.443221f, 0.514019f, 0.610416f, 0.501359f, 0.504827f, 0.568877f, 0.510524f, 0.518411f, 0.504615f, 0.437480f, 0.253233f, 0.202313f, 0.142871f, 0.104158f, 0.121982f, 0.181857f, 0.100378f, -0.036819f, -0.063084f, -0.072908f, -0.125213f, -0.162633f, -0.198217f, -0.182622f, -0.300092f, -0.290791f, -0.299418f, -0.362835f, -0.319416f, -0.403046f, -0.356776f, -0.418772f, -0.429987f, -0.405158f, -0.446967f, -0.404279f, -0.451332f, -0.358307f, -0.350959f, -0.290963f, -0.310434f, -0.320107f, -0.224889f, -0.201470f, -0.153801f, -0.078341f, 0.026640f, 0.085905f, 0.075473f, 0.096153f, 0.086246f, 0.097203f, 0.111847f, - 0.159486f, 0.191824f, 0.173252f, 0.156089f, 0.190557f, 0.177570f, 0.219173f, 0.199804f, 0.145945f, 0.133140f, 0.115604f, 0.102153f, 0.064259f, 0.049145f, 0.045518f, 0.029038f, 0.031555f, 0.013021f, 0.020615f, 0.018404f, 0.012527f, 0.018469f, 0.013294f, 0.008353f, 0.003073f, -0.006444f, -0.000925f, 0.000163f, -0.019177f, -0.029965f, -0.017185f, -0.013525f, -0.012390f, -0.008534f, -0.006057f, -0.005530f}, - {0.031749f, 0.004210f, -0.010404f, 0.004958f, 0.005622f, 0.001958f, -0.013180f, 0.006046f, 0.009380f, -0.010065f, -0.003006f, -0.012336f, -0.002700f, -0.005230f, -0.004512f, -0.001759f, 0.000700f, -0.000408f, 0.001273f, 0.004464f, -0.005489f, 0.002483f, -0.012642f, 0.004378f, 0.007796f, 0.001677f, -0.003312f, -0.010243f, 0.006725f, -0.004488f, 0.010866f, 0.009277f, -0.000383f, -0.004288f, 0.008862f, 0.010333f, 0.008311f, 0.008408f, 0.002101f, -0.006413f, 0.002032f, 0.007954f, -0.003314f, -0.006702f, 0.006053f, 0.009586f, -0.004187f, 0.005014f, -0.010874f, -0.000881f, -0.009537f, 0.006535f, -0.012699f, -0.003417f, -0.002356f, 0.004369f, 0.006351f, 0.004507f, -0.000351f, -0.006723f, 0.000837f, -0.009307f, -0.006142f, 0.001722f, -0.001143f, -0.005605f, 0.003084f, 0.003174f, 0.000814f, 0.005900f, -0.005227f, 0.002548f, -0.007064f, -0.002793f, -0.002998f, 0.003914f, -0.003657f, -0.007475f, -0.003345f, -0.002776f, 0.010319f, 0.008875f, 0.002262f, -0.004690f, 0.000625f, -0.000534f, 0.001816f, 0.003572f, 0.000670f, 0.000215f, 0.000643f, -0.000132f, 0.000167f, -0.001311f, 0.001046f, -0.003932f, - 0.000202f, -0.000287f, 0.001643f, 0.000865f, -0.001201f, -0.001713f, 0.000376f, 0.000726f, 0.000770f, 0.018102f, -0.018241f, 0.000693f, 0.000324f, -0.004617f, -0.005473f, -0.005830f, 0.001891f, -0.010279f, -0.010139f, 0.001435f, 0.004928f, -0.000375f, 0.005841f, 0.004552f, -0.005573f, 0.002300f, -0.020006f, -0.004893f, -0.004469f, -0.004654f, -0.006304f, -0.006955f, -0.017631f, -0.013698f, 0.001886f, 0.004132f, -0.000942f, 0.009552f, 0.007642f, 0.003217f, -0.003391f, -0.001898f, 0.008952f, -0.003449f, 0.001117f, -0.001297f, -0.009386f, 0.003151f, -0.003136f, -0.006393f, -0.002463f, 0.007689f, 0.018570f, -0.007069f, 0.002084f, 0.004526f, -0.003420f, 0.005853f, 0.002625f, -0.006476f, 0.003795f, -0.015327f, -0.007087f, 0.000183f, 0.006288f, 0.009753f, -0.005957f, -0.002759f, -0.000652f, -0.022217f, 0.003813f, 0.011504f, 0.000636f, 0.001681f, 0.006304f, -0.003605f, 0.009832f, 0.013248f, -0.001658f, 0.003774f, 0.007972f, 0.007565f, 0.001518f, 0.000426f, -0.003674f, -0.005298f, -0.003300f, 0.002357f, -0.005037f, 0.011066f, 0.007445f, -0.000235f, -0.005385f, -0.002756f, 0.006385f, 0.007500f, - -0.003730f, 0.005823f, -0.003521f, 0.001592f, -0.003590f, -0.002175f, -0.002455f, 0.000709f, 0.000186f, 0.000441f, 0.000514f, -0.000402f, -0.001182f, -0.004793f, -0.015628f, 0.003616f, 0.000567f, -0.015116f, 0.002310f, 0.008467f, 0.012460f, 0.003200f, -0.008971f, 0.021124f, -0.002840f, -0.004163f, 0.009926f, -0.006139f, -0.005983f, 0.001016f, -0.007719f, 0.009415f, 0.009407f, -0.003809f, -0.014218f, -0.007024f, 0.007068f, -0.009151f, 0.020092f, 0.017343f, -0.013869f, -0.016964f, 0.000602f, 0.003173f, -0.016148f, -0.001057f, 0.006665f, 0.004527f, -0.007908f, -0.004597f, 0.018523f, -0.001967f, 0.012748f, -0.001266f, -0.004148f, -0.004308f, -0.009548f, 0.001662f, -0.001362f, 0.009997f, -0.008539f, 0.002314f, -0.002243f, 0.001858f, -0.005032f, -0.000660f, 0.008428f, 0.006704f, -0.010567f, 0.016455f, 0.001354f, -0.000074f, -0.000267f, -0.001507f, 0.004459f, -0.002267f, -0.014735f, -0.002090f, -0.007783f, 0.012832f, 0.005371f, 0.000336f, 0.015757f, -0.008718f, 0.010539f, 0.010370f, 0.000949f, -0.007668f, -0.001572f, -0.001631f, -0.000171f, -0.002181f, -0.003183f, 0.004361f, 0.004615f, -0.006964f, - 0.003337f, -0.000410f, 0.004884f, 0.004319f, -0.001431f, 0.000677f, -0.002164f, -0.003271f, 0.002331f, -0.003010f, -0.002546f, 0.001293f, 0.003301f, -0.003040f, -0.002272f, -0.003957f, -0.001703f, 0.002383f, -0.001516f, -0.000575f, 0.000043f, 0.001210f, -0.002199f, -0.001245f, 0.003045f, 0.001015f, -0.000654f, -0.000958f, -0.003438f, -0.037659f, 0.008639f, 0.002012f, 0.026825f, -0.001458f, 0.010777f, -0.014440f, 0.003102f, -0.010823f, -0.002594f, -0.005308f, -0.001710f, 0.004921f, -0.002906f, 0.004595f, 0.009040f, 0.006898f, 0.025470f, 0.017572f, -0.011569f, 0.005832f, -0.000624f, 0.004693f, 0.003003f, -0.003261f, -0.025313f, 0.006400f, -0.001296f, -0.000256f, 0.009604f, -0.001517f, -0.007063f, -0.004920f, -0.001198f, -0.007870f, -0.004228f, -0.020236f, -0.004748f, 0.000522f, -0.007147f, -0.001280f, 0.008381f, 0.011987f, -0.003883f, 0.014815f, -0.011094f, 0.002429f, 0.005062f, 0.001930f, -0.003444f, -0.007817f, 0.005518f, -0.001974f, 0.003397f, -0.005812f, -0.008256f, 0.001527f, 0.004801f, -0.008344f, 0.007942f, -0.005706f, 0.018919f, 0.020065f, -0.006109f, 0.007317f, 0.007705f, -0.001055f, - -0.002609f, -0.002709f, -0.024533f, 0.010238f, 0.009963f, 0.000289f, -0.004134f, -0.010258f, 0.001071f, -0.003021f, -0.012505f, -0.028012f, 0.001831f, -0.006955f, 0.007175f, -0.000015f, -0.000121f, -0.004691f, -0.003174f, -0.005286f, -0.000533f, 0.002857f, -0.003663f, 0.004250f, -0.004509f, -0.002622f, -0.001910f, -0.001134f, 0.002278f, 0.001888f, -0.001529f, 0.000865f, 0.000617f, 0.001521f, 0.002485f, 0.001916f, -0.001326f, -0.002985f, 0.002091f, -0.001269f, -0.002233f, 0.000800f, 0.000706f, -0.001325f, 0.001542f, 0.002519f, 0.000846f, -0.008060f, -0.012306f, 0.012284f, 0.006999f, -0.001070f, 0.014198f, -0.007612f, 0.012737f, -0.014344f, -0.013771f, 0.006707f, -0.021976f, -0.007783f, 0.005545f, 0.013382f, 0.017487f, -0.003050f, 0.013053f, -0.000451f, 0.012432f, 0.004599f, 0.002021f, -0.002043f, 0.000681f, 0.012408f, -0.005913f, -0.001303f, 0.002257f, 0.001079f, -0.012224f, -0.001519f, -0.006632f, 0.025277f, -0.012082f, -0.012242f, -0.002974f, 0.011915f, 0.011987f, 0.010297f, 0.013771f, -0.002381f, 0.002529f, -0.003052f, -0.006837f, 0.005216f, -0.000618f, -0.001300f, -0.007819f, 0.019828f, - 0.012223f, -0.006123f, 0.003776f, 0.005863f, -0.010458f, 0.002225f, 0.007703f, -0.001947f, 0.014867f, -0.006000f, -0.001932f, -0.016160f, -0.006101f, -0.013739f, 0.000611f, 0.018962f, -0.007464f, 0.005358f, 0.003245f, 0.000659f, -0.005178f, -0.001751f, 0.000165f, -0.004629f, 0.009099f, -0.009350f, -0.004416f, -0.000826f, 0.019984f, 0.003171f, -0.000125f, 0.006318f, -0.005448f, -0.014992f, 0.003713f, 0.001516f, -0.002395f, 0.001092f, 0.003677f, -0.000987f, 0.000751f, 0.007295f, 0.001373f, -0.000581f, 0.001726f, 0.000111f, -0.000985f, -0.001737f, 0.006758f, -0.000327f, 0.000558f, -0.006184f, 0.003744f, 0.000961f, 0.003727f, -0.000912f, -0.002557f, -0.000759f, 0.001886f, 0.003068f, 0.001970f, -0.005040f, 0.000234f, 0.003575f, -0.001121f, -0.006359f, -0.004122f, -0.035498f, 0.025750f, 0.002715f, -0.013058f, -0.031351f, -0.003120f, 0.000799f, -0.018548f, -0.001671f, 0.008641f, 0.007365f, 0.000681f, -0.005360f, 0.006841f, 0.022414f, 0.022737f, -0.009738f, -0.010687f, -0.024652f, 0.004929f, -0.004442f, 0.023951f, -0.009757f, -0.000529f, -0.005617f, 0.009015f, -0.002684f, -0.024550f, 0.008066f, - -0.001152f, -0.014546f, 0.000014f, 0.002302f, -0.001993f, -0.002475f, -0.010091f, -0.014046f, 0.008541f, 0.002118f, 0.011170f, -0.009704f, 0.018801f, 0.008929f, -0.003884f, -0.016651f, -0.003308f, 0.006028f, 0.018387f, 0.005711f, -0.010400f, -0.004735f, 0.008544f, 0.005525f, -0.005342f, -0.002599f, 0.009006f, 0.007386f, 0.009507f, 0.018230f, 0.020334f, 0.009948f, 0.010826f, 0.012513f, -0.007323f, 0.001827f, -0.013463f, 0.013474f, 0.002120f, 0.006816f, -0.009618f, -0.014938f, 0.003415f, -0.019100f, -0.006890f, -0.008321f, 0.014031f, 0.014725f, 0.015395f, 0.004064f, -0.004367f, -0.004862f, 0.014381f, 0.002943f, -0.002014f, 0.003640f, -0.004534f, 0.009205f, 0.000475f, -0.000120f, 0.003017f, 0.003790f, -0.001432f, 0.007549f, -0.000006f, 0.001294f, -0.003615f, -0.002156f, 0.002074f, 0.005895f, -0.000362f, 0.002150f, 0.003402f, 0.001979f, 0.001133f, -0.001753f, 0.002812f, -0.002333f, -0.012769f, -0.000758f, 0.023889f, 0.014688f, 0.020196f, 0.003844f, -0.022100f, -0.007284f, 0.023456f, -0.006765f, -0.014864f, -0.015482f, -0.015248f, -0.016128f, 0.008867f, 0.009015f, 0.005783f, 0.005302f, - 0.005470f, 0.022572f, -0.002794f, 0.009798f, -0.019389f, -0.021810f, 0.014603f, -0.000774f, -0.011910f, 0.000856f, -0.030391f, -0.009920f, -0.010243f, 0.003735f, -0.001075f, -0.002803f, -0.021384f, -0.013991f, 0.002364f, 0.014766f, 0.023981f, -0.009512f, -0.009421f, 0.012786f, -0.016483f, -0.001179f, -0.000852f, 0.005517f, 0.010485f, 0.008566f, 0.016617f, -0.008923f, 0.024096f, 0.011377f, -0.026064f, 0.013020f, -0.014494f, -0.017275f, -0.014387f, -0.020898f, 0.018905f, 0.004450f, -0.022295f, 0.002553f, 0.004686f, 0.002071f, 0.003514f, -0.004080f, 0.015674f, -0.009099f, 0.012045f, -0.019380f, 0.014686f, -0.009831f, -0.008978f, 0.001921f, 0.006508f, -0.000751f, 0.010605f, 0.030437f, -0.002573f, -0.016315f, 0.009625f, 0.019949f, 0.001575f, -0.002163f, -0.015829f, -0.006893f, 0.014672f, -0.002492f, -0.001007f, 0.000506f, 0.002950f, -0.004114f, -0.002380f, -0.000359f, 0.004320f, -0.002506f, -0.000536f, -0.002880f, 0.008270f, -0.006067f, 0.001264f, -0.005702f, -0.007148f, 0.001884f, 0.002286f, -0.002227f, 0.001100f, -0.002066f, -0.001577f, -0.000448f, -0.000818f, -0.000172f, -0.003034f, -0.001781f, - 0.008490f, -0.000438f, 0.000049f, 0.049526f, -0.044644f, 0.020649f, 0.021546f, -0.020066f, -0.003621f, 0.029629f, 0.010743f, 0.018818f, 0.005628f, -0.006519f, 0.044573f, -0.001790f, -0.008339f, -0.000048f, 0.000152f, 0.021395f, 0.033530f, 0.012694f, -0.000229f, 0.000674f, 0.005035f, 0.011520f, -0.000158f, 0.006113f, -0.023432f, 0.011095f, 0.018270f, -0.003831f, 0.007454f, 0.000002f, 0.003397f, -0.015107f, -0.011784f, 0.000851f, -0.000515f, 0.020689f, 0.010224f, 0.008558f, -0.008710f, -0.010716f, -0.010700f, 0.011909f, 0.017314f, 0.000146f, -0.005561f, 0.033807f, 0.017516f, 0.022591f, -0.012171f, -0.025225f, -0.004798f, -0.026416f, -0.017374f, -0.007959f, -0.011009f, -0.001518f, 0.019780f, -0.006257f, 0.000769f, -0.016176f, -0.017265f, 0.019702f, -0.000988f, 0.009190f, 0.009845f, -0.010278f, 0.018936f, 0.004929f, 0.001704f, -0.006577f, -0.012669f, 0.014859f, -0.004546f, -0.026310f, 0.015217f, 0.012853f, 0.015911f, 0.007173f, -0.018529f, -0.003886f, 0.001734f, -0.019351f, 0.011065f, 0.011100f, -0.001805f, 0.008382f, 0.007012f, 0.007492f, -0.001811f, 0.011841f, 0.001766f, -0.000467f, - -0.006001f, 0.002942f, -0.000117f, 0.009433f, 0.002036f, -0.000263f, 0.001931f, -0.000091f, 0.006940f, -0.002953f, -0.000855f, -0.004598f, 0.002357f, -0.001226f, -0.003602f, 0.000784f, 0.000970f, -0.001369f, 0.001073f, 0.007642f, 0.005769f, -0.003304f, -0.002155f, -0.004930f, 0.001282f, -0.001062f, -0.000662f, -0.034615f, 0.004255f, 0.011428f, -0.017002f, 0.014180f, -0.029377f, 0.006711f, 0.008961f, -0.003866f, -0.011633f, -0.014929f, -0.017406f, -0.029474f, 0.003766f, 0.033521f, -0.011024f, 0.016169f, 0.008993f, 0.024929f, 0.013248f, -0.009419f, -0.021399f, 0.011031f, -0.005396f, -0.007609f, -0.022175f, -0.003314f, -0.002969f, -0.008849f, -0.009488f, -0.005100f, -0.015575f, -0.020478f, 0.023905f, -0.002344f, -0.013845f, 0.018747f, 0.006637f, -0.016351f, 0.002483f, -0.001200f, 0.010691f, -0.021727f, 0.006153f, 0.007470f, -0.032057f, 0.010720f, 0.010516f, -0.016523f, 0.004790f, 0.001252f, -0.005150f, 0.011858f, 0.001144f, -0.002237f, 0.001467f, 0.008033f, 0.021700f, 0.017231f, 0.022144f, 0.015259f, 0.007927f, -0.005719f, 0.032939f, -0.008360f, -0.016791f, 0.036473f, 0.002484f, 0.022043f, - 0.004793f, -0.007069f, -0.033806f, -0.031294f, -0.007727f, 0.001980f, -0.012319f, -0.005992f, -0.009662f, 0.021520f, -0.018796f, -0.005489f, -0.003153f, 0.005254f, -0.018345f, 0.013277f, -0.001411f, 0.004199f, -0.001537f, -0.007134f, -0.011922f, -0.008030f, -0.009380f, -0.007635f, -0.002226f, 0.001220f, -0.005751f, -0.004113f, -0.003190f, 0.007871f, -0.009109f, -0.008053f, -0.006538f, -0.007754f, -0.000284f, 0.006316f, -0.002757f, -0.003091f, 0.004560f, 0.001110f, -0.002248f, 0.003090f, -0.005685f, -0.006288f, 0.004862f, -0.007333f, -0.011778f, 0.004159f, 0.010630f, -0.005626f, 0.001186f, 0.007114f, -0.002391f, -0.005847f, -0.057632f, 0.028190f, 0.049653f, 0.003449f, -0.028179f, 0.012841f, -0.005205f, -0.001975f, 0.008140f, 0.004795f, 0.012782f, -0.015041f, 0.001736f, 0.044484f, 0.034187f, 0.029885f, -0.032635f, -0.001399f, 0.008019f, 0.017059f, -0.015659f, -0.017557f, -0.004469f, 0.005613f, 0.015466f, 0.007669f, -0.041969f, -0.047653f, 0.014822f, -0.001593f, 0.026846f, 0.027499f, -0.017753f, 0.022757f, 0.018334f, 0.024309f, -0.001656f, -0.014515f, -0.015090f, 0.011612f, -0.015981f, -0.006142f, - -0.000005f, -0.000698f, 0.014554f, 0.030914f, 0.017393f, -0.008475f, -0.007296f, -0.015321f, -0.003902f, 0.001357f, 0.008371f, -0.003304f, -0.005447f, 0.015196f, 0.009575f, -0.023360f, -0.000310f, 0.000965f, 0.028078f, -0.014132f, -0.016116f, -0.030619f, -0.010389f, 0.005242f, 0.002054f, 0.015814f, -0.003408f, 0.003957f, -0.013690f, -0.020345f, -0.018448f, -0.018642f, -0.010722f, 0.008897f, -0.038414f, 0.004588f, -0.005379f, -0.006029f, -0.008121f, 0.007599f, 0.021045f, 0.015328f, 0.002439f, -0.003445f, -0.019514f, -0.006226f, -0.001797f, -0.003970f, 0.012895f, 0.006581f, 0.003938f, 0.002838f, 0.006705f, 0.007823f, -0.002988f, -0.003272f, 0.000200f, -0.003544f, 0.000684f, 0.000862f, 0.002577f, 0.004300f, -0.012480f, 0.001927f, -0.001613f, 0.009470f, 0.002573f, -0.012556f, -0.000699f, -0.007950f, -0.006090f, -0.003135f, -0.002803f, -0.003336f, -0.001584f, 0.007098f, 0.006502f, 0.005482f, 0.009392f, 0.029043f, 0.002373f, 0.025202f, -0.003449f, 0.032713f, 0.016320f, 0.025509f, 0.015680f, 0.007432f, -0.012633f, -0.001278f, -0.007907f, 0.017484f, 0.005150f, 0.015355f, -0.014661f, -0.002564f, - 0.027128f, -0.033440f, -0.018691f, 0.026065f, -0.044109f, -0.019447f, 0.003290f, -0.008420f, -0.021840f, 0.044423f, -0.007939f, 0.030686f, 0.012312f, -0.026733f, -0.004090f, -0.010054f, -0.032322f, -0.041986f, 0.033537f, -0.000305f, -0.012217f, 0.008296f, 0.000611f, -0.005574f, 0.012214f, 0.004793f, -0.004329f, -0.015445f, 0.002966f, 0.031682f, 0.026862f, -0.022156f, 0.008793f, 0.001740f, 0.025061f, -0.011408f, 0.016986f, -0.036022f, -0.008718f, 0.024596f, 0.008265f, -0.008245f, 0.029354f, -0.009337f, 0.020580f, -0.039991f, -0.046111f, -0.016625f, 0.000905f, -0.032668f, 0.035304f, 0.024913f, 0.035865f, -0.016442f, -0.012100f, -0.012436f, 0.001868f, -0.018187f, -0.000186f, -0.027797f, -0.025230f, 0.001156f, 0.007119f, 0.025755f, 0.012183f, -0.002712f, -0.009489f, 0.008106f, 0.014878f, 0.009750f, 0.005954f, -0.009156f, 0.010760f, 0.009606f, 0.012126f, 0.008977f, 0.006572f, 0.009716f, -0.013329f, 0.011248f, -0.008060f, -0.004092f, 0.017639f, 0.015588f, 0.010489f, -0.001854f, 0.000637f, -0.004707f, 0.009050f, 0.002838f, -0.003702f, 0.004912f, 0.009181f, 0.001387f, 0.007139f, 0.006934f, - -0.009179f, 0.003051f, -0.006936f, -0.002029f, 0.002184f, 0.040214f, 0.028919f, 0.045315f, -0.040244f, -0.030249f, -0.068941f, 0.029705f, -0.007676f, -0.058913f, -0.011427f, 0.005589f, 0.008677f, -0.022014f, 0.023982f, 0.020261f, 0.002275f, -0.000267f, 0.003744f, -0.009762f, -0.020514f, 0.004521f, -0.011667f, -0.019199f, -0.000252f, 0.044662f, 0.001386f, -0.006780f, -0.035716f, 0.015066f, 0.028203f, -0.014593f, -0.043094f, -0.007819f, 0.014525f, 0.005151f, -0.009148f, 0.009390f, 0.003069f, 0.015500f, -0.004358f, 0.025565f, 0.039071f, 0.014780f, -0.025980f, 0.029445f, 0.013258f, -0.033277f, -0.035412f, 0.038491f, 0.018616f, -0.014991f, -0.017280f, -0.000856f, -0.031388f, 0.022975f, 0.030269f, -0.000722f, 0.001706f, 0.007621f, -0.003877f, 0.033126f, 0.011138f, 0.008611f, -0.013737f, 0.005352f, 0.011186f, 0.040907f, -0.009821f, 0.015674f, -0.031695f, -0.036104f, 0.032192f, -0.004859f, -0.003011f, 0.003324f, 0.030685f, 0.000671f, -0.001445f, 0.019363f, -0.009268f, 0.003858f, 0.017771f, 0.021688f, -0.010375f, -0.013517f, -0.029116f, -0.014369f, 0.009509f, -0.012870f, 0.010133f, -0.000330f, - 0.010753f, -0.005832f, 0.007930f, 0.001637f, -0.004487f, 0.003488f, 0.016277f, 0.004004f, 0.016203f, 0.004877f, -0.010260f, 0.000647f, 0.006759f, 0.005596f, -0.010069f, -0.009241f, -0.009809f, -0.004225f, -0.007708f, -0.007555f, -0.011979f, -0.005176f, 0.006663f, 0.004217f, -0.001227f, -0.001973f, 0.003639f, -0.007981f, -0.000202f, 0.010216f, -0.002896f, -0.001691f, -0.004940f, -0.004189f, -0.002162f, -0.015215f, -0.002144f, -0.005927f, -0.006524f, -0.009507f, -0.013537f, -0.046658f, -0.003847f, -0.030529f, -0.061930f, -0.063827f, -0.027590f, -0.048734f, -0.022096f, -0.007874f, 0.008753f, 0.027254f, 0.030406f, 0.003113f, -0.016453f, 0.032749f, -0.016652f, 0.016141f, -0.061144f, -0.006016f, -0.041946f, -0.028154f, 0.028410f, 0.019945f, 0.019407f, 0.006452f, 0.040912f, -0.004138f, -0.002561f, -0.029472f, -0.010217f, -0.005938f, -0.020059f, -0.020260f, -0.050245f, -0.019761f, -0.005549f, -0.008105f, -0.031087f, 0.027487f, 0.010947f, 0.016399f, -0.013687f, -0.005274f, -0.076248f, -0.021981f, -0.021017f, 0.017653f, 0.039077f, -0.024080f, -0.003693f, -0.044427f, -0.003208f, 0.022858f, -0.007281f, -0.015007f, - 0.009994f, 0.032785f, 0.055952f, 0.011757f, 0.001774f, -0.003098f, -0.015011f, -0.022402f, 0.014962f, -0.014763f, 0.050753f, 0.009977f, 0.021852f, 0.103500f, -0.020600f, -0.017621f, -0.026149f, -0.036284f, -0.004923f, 0.035356f, 0.015916f, 0.005053f, 0.011766f, -0.014957f, -0.011595f, -0.031581f, -0.007562f, 0.017752f, -0.002900f, -0.006985f, -0.002965f, -0.007365f, 0.003721f, -0.001166f, 0.006884f, 0.006975f, 0.007117f, 0.009339f, 0.010227f, 0.026363f, 0.016096f, -0.009773f, 0.015346f, -0.000410f, 0.000980f, 0.011028f, -0.012755f, 0.000240f, -0.014716f, -0.008902f, -0.020143f, -0.014964f, -0.021009f, -0.017438f, -0.011681f, 0.023037f, -0.014337f, -0.008094f, -0.016911f, 0.001055f, 0.005026f, -0.003660f, 0.006945f, 0.002793f, -0.000426f, -0.014292f, -0.051798f, 0.029384f, 0.048443f, -0.028681f, 0.001444f, 0.010852f, -0.016771f, -0.004056f, -0.036247f, -0.000775f, -0.020349f, 0.052590f, -0.000050f, -0.009960f, 0.042200f, -0.010770f, 0.012234f, -0.048508f, 0.025094f, 0.007453f, 0.032710f, -0.015341f, 0.024343f, 0.043018f, 0.046216f, 0.025917f, 0.041655f, 0.021318f, -0.006701f, 0.040486f, - -0.019690f, -0.026751f, -0.008621f, 0.016218f, 0.027421f, -0.066046f, -0.004578f, -0.042720f, 0.033774f, 0.015264f, -0.000917f, 0.011586f, 0.047326f, 0.001968f, 0.042228f, 0.018006f, 0.063990f, 0.005700f, -0.007376f, 0.027997f, 0.009195f, -0.032732f, 0.006945f, -0.003875f, -0.043904f, 0.030687f, -0.026512f, -0.042842f, -0.087553f, 0.006725f, -0.010862f, 0.051382f, -0.028735f, 0.068783f, 0.022648f, -0.001223f, -0.010605f, 0.026784f, 0.028246f, -0.050438f, -0.021586f, -0.037293f, 0.012904f, -0.016869f, 0.037750f, 0.011960f, 0.012652f, 0.018207f, -0.008774f, 0.003172f, -0.013304f, -0.004675f, 0.001004f, -0.005058f, -0.038971f, 0.015299f, -0.000123f, 0.011457f, 0.000328f, -0.011534f, 0.001201f, 0.015835f, -0.025940f, 0.022250f, -0.009534f, -0.000141f, 0.002495f, -0.021816f, -0.001898f, 0.013070f, 0.006613f, -0.015692f, -0.006495f, -0.003849f, -0.018358f, 0.006083f, -0.005255f, 0.026629f, -0.021442f, 0.009443f, 0.018582f, 0.006605f, -0.007924f, -0.005927f, 0.009027f, 0.004371f, 0.005595f, -0.004802f, 0.009361f, -0.028627f, 0.007627f, 0.006788f, 0.012258f, -0.008734f, -0.013367f, 0.000953f, - 0.011999f, 0.001605f, 0.033265f, -0.022242f, -0.024888f, -0.024485f, 0.031989f, 0.016596f, 0.041655f, 0.011564f, 0.128870f, -0.038273f, 0.000693f, 0.000970f, 0.059987f, 0.024840f, 0.027775f, -0.039350f, 0.017282f, -0.015515f, 0.001114f, -0.018201f, 0.004006f, 0.043357f, -0.011409f, 0.013753f, 0.083779f, 0.026302f, -0.037945f, -0.044428f, 0.005168f, 0.054640f, 0.028495f, 0.010387f, -0.021141f, 0.046516f, 0.007897f, -0.006898f, -0.051112f, 0.015630f, -0.008121f, 0.022032f, -0.046399f, -0.028317f, 0.002419f, -0.011799f, 0.006107f, -0.043262f, -0.001492f, -0.026387f, 0.012261f, 0.038367f, 0.030667f, 0.010042f, -0.059365f, 0.000506f, 0.005870f, -0.053492f, -0.047779f, -0.031659f, -0.026122f, -0.026074f, 0.042345f, 0.009679f, -0.001211f, 0.027616f, 0.044030f, 0.011755f, 0.038133f, 0.001040f, 0.025247f, 0.168371f, -0.038415f, 0.027750f, 0.019329f, -0.029577f, 0.006268f, -0.112177f, 0.002262f, 0.055716f, 0.014584f, -0.030856f, 0.042894f, 0.010348f, 0.016320f, -0.027983f, -0.006351f, -0.023905f, 0.008408f, 0.002095f, 0.002136f, 0.009619f, -0.034757f, 0.012882f, -0.019063f, -0.013858f, - -0.047589f, 0.011828f, 0.010942f, 0.009503f, 0.012267f, 0.059589f, 0.009008f, 0.006390f, 0.006853f, 0.004678f, 0.035623f, 0.004201f, 0.015052f, 0.012473f, 0.027181f, 0.010939f, -0.001615f, -0.006002f, -0.004925f, 0.004525f, 0.017247f, 0.020584f, 0.006105f, -0.031259f, -0.014347f, -0.006917f, -0.006911f, -0.010325f, -0.032641f, -0.007929f, 0.025086f, 0.068172f, -0.031690f, -0.001613f, -0.045729f, -0.033210f, 0.010835f, 0.029884f, -0.037831f, 0.045189f, 0.018954f, -0.059280f, 0.036489f, -0.023992f, -0.029358f, -0.002435f, -0.035507f, 0.008378f, -0.015886f, 0.045863f, -0.026397f, -0.002066f, 0.025255f, -0.088478f, 0.012699f, 0.027496f, -0.026687f, 0.021824f, -0.053455f, 0.053489f, 0.005869f, 0.009239f, -0.101172f, 0.091368f, 0.039193f, 0.030027f, 0.002038f, -0.057672f, 0.052927f, -0.003344f, -0.026185f, 0.093438f, -0.018573f, -0.040981f, -0.021581f, 0.011317f, 0.027058f, 0.025629f, 0.006843f, -0.015710f, -0.109948f, -0.012384f, 0.027541f, 0.001644f, 0.040408f, -0.057689f, 0.059611f, 0.006091f, 0.020176f, -0.058636f, -0.016931f, 0.009488f, 0.075972f, -0.031543f, 0.017776f, -0.054321f, - 0.048115f, 0.026995f, 0.045408f, -0.017455f, 0.020138f, 0.007887f, -0.059390f, -0.056700f, 0.031237f, 0.025549f, 0.048435f, 0.010420f, 0.062152f, -0.093565f, -0.122465f, 0.019611f, -0.025819f, 0.069268f, -0.045132f, -0.009728f, 0.008004f, -0.052106f, 0.002605f, -0.031084f, 0.027150f, 0.038528f, 0.003867f, 0.031272f, 0.034370f, 0.010263f, -0.031003f, -0.015606f, 0.055278f, 0.028821f, 0.007193f, 0.009732f, -0.016553f, 0.001393f, 0.033664f, 0.018934f, -0.027217f, -0.015322f, 0.031324f, -0.004350f, 0.019526f, 0.019692f, -0.012021f, -0.015904f, -0.016136f, 0.000226f, 0.016724f, 0.007660f, 0.021389f, 0.030740f, 0.002536f, -0.000864f, 0.025018f, 0.001659f, 0.005047f, 0.008022f, -0.010437f, 0.008682f, -0.018267f, 0.010537f, 0.003774f, 0.000550f, 0.007686f, -0.009112f, -0.085617f, 0.077965f, -0.016901f, -0.018911f, -0.030509f, -0.008963f, -0.067522f, -0.126031f, 0.043447f, 0.036102f, -0.005603f, -0.026035f, -0.051368f, -0.008542f, -0.015964f, -0.027353f, 0.049591f, -0.112714f, -0.048182f, -0.059533f, -0.017777f, -0.085834f, -0.007945f, -0.012979f, -0.003113f, -0.014424f, -0.017431f, 0.013767f, - -0.000883f, -0.038014f, -0.011922f, -0.000908f, -0.051981f, -0.027799f, -0.015354f, 0.003748f, 0.039968f, -0.020561f, 0.080137f, -0.041918f, -0.006023f, 0.033676f, -0.035768f, 0.021710f, 0.004545f, -0.054972f, -0.082216f, -0.020174f, 0.020984f, 0.074953f, 0.032511f, -0.057448f, -0.024304f, -0.164892f, -0.055183f, -0.011905f, 0.034687f, 0.089526f, -0.004747f, -0.095920f, 0.005333f, 0.052087f, -0.019165f, -0.004540f, 0.055236f, 0.058125f, 0.133370f, -0.147365f, -0.028567f, 0.020885f, 0.037299f, -0.046514f, -0.055217f, -0.078799f, -0.078227f, -0.043766f, -0.036367f, -0.010246f, -0.005592f, -0.091038f, -0.037725f, -0.033366f, 0.033710f, -0.017182f, -0.008965f, 0.082002f, 0.062115f, 0.004986f, -0.011704f, -0.003757f, -0.050644f, -0.002250f, 0.018054f, -0.036592f, -0.019597f, 0.006941f, 0.023147f, -0.015509f, -0.017926f, -0.012130f, 0.025829f, -0.017082f, 0.027067f, 0.001940f, 0.027954f, 0.019862f, 0.020152f, -0.015387f, 0.010207f, -0.038355f, 0.019808f, -0.005039f, 0.011685f, -0.033911f, -0.026252f, -0.003798f, 0.008782f, -0.019089f, 0.000518f, -0.042984f, -0.007517f, -0.005150f, 0.018430f, 0.022777f, - -0.027340f, 0.056144f, 0.001196f, 0.020842f, 0.012522f, 0.040681f, 0.040802f, -0.001966f, 0.025968f, -0.048649f, 0.011389f, -0.019842f, -0.117168f, 0.026189f, -0.020265f, 0.034291f, -0.032592f, -0.033526f, 0.002194f, -0.049162f, 0.008039f, -0.049566f, -0.001298f, -0.008845f, -0.019642f, 0.023474f, -0.037121f, -0.048245f, -0.044149f, -0.056608f, -0.009767f, -0.006404f, 0.062143f, 0.013588f, -0.045941f, -0.068008f, 0.008545f, -0.001665f, 0.015775f, -0.013432f, 0.037501f, -0.044793f, -0.018085f, -0.062812f, -0.040441f, -0.018218f, 0.001690f, -0.026644f, 0.064815f, -0.023007f, -0.056132f, 0.017099f, 0.067281f, 0.048903f, 0.019650f, -0.048072f, -0.031579f, -0.005088f, 0.061048f, 0.117469f, -0.001482f, 0.022962f, -0.022973f, -0.115335f, -0.025698f, 0.010276f, 0.043026f, 0.098079f, -0.054823f, -0.066818f, 0.038697f, 0.018379f, -0.023537f, 0.002940f, -0.037014f, 0.022453f, -0.097731f, -0.011367f, 0.005183f, 0.023484f, -0.059080f, 0.067550f, -0.095588f, -0.108489f, -0.100416f, 0.050360f, -0.020915f, 0.095213f, -0.133310f, -0.058042f, 0.010297f, 0.135608f, -0.011270f, -0.024277f, -0.075038f, -0.027449f, - -0.009081f, 0.065359f, -0.005901f, -0.000379f, 0.003570f, 0.011289f, 0.000962f, -0.001049f, -0.028597f, -0.024154f, 0.030905f, 0.013725f, 0.003468f, -0.071136f, 0.017505f, -0.018329f, -0.008718f, -0.036839f, 0.001353f, -0.003334f, -0.007026f, -0.083673f, 0.007439f, -0.018529f, -0.009870f, -0.007261f, 0.013894f, -0.000291f, 0.004891f, -0.000574f, 0.000221f, -0.000268f, 0.000108f, -0.030507f, -0.006183f, -0.019626f, -0.017117f, 0.014572f, 0.014897f, -0.024463f, 0.000674f, -0.017423f, 0.022525f, -0.008413f, 0.069562f, 0.021342f, -0.123912f, -0.021894f, -0.085463f, 0.038301f, 0.007245f, -0.170423f, 0.011726f, -0.052352f, -0.110384f, -0.085836f, -0.125983f, 0.078166f, -0.038370f, -0.099109f, -0.044510f, 0.032390f, -0.059054f, -0.050916f, -0.039734f, -0.023506f, -0.043814f, -0.043472f, -0.080418f, -0.058105f, -0.110364f, -0.062154f, -0.056074f, -0.018371f, -0.051897f, -0.010457f, -0.024185f, -0.001261f, 0.004413f, 0.014962f, 0.031187f, -0.030227f, 0.025987f, 0.003409f, 0.056986f, 0.025010f, 0.035698f, 0.036071f, -0.103358f, -0.026940f, 0.083516f, -0.013967f, -0.051240f, -0.057803f, -0.042729f, 0.033657f, - 0.134634f, -0.008580f, -0.001663f, -0.089752f, -0.091549f, -0.019062f, 0.019351f, 0.080634f, -0.005133f, 0.073528f, 0.027505f, -0.088154f, 0.160161f, 0.003410f, 0.124734f, 0.000665f, -0.031298f, 0.067107f, -0.089045f, -0.115255f, -0.073636f, -0.255734f, -0.154928f, -0.050597f, 0.117826f, 0.072355f, -0.102258f, -0.067237f, -0.156519f, 0.078232f, 0.104416f, -0.079871f, -0.079731f, 0.018804f, 0.069198f, 0.098105f, 0.027959f, 0.056412f, -0.051551f, -0.028343f, -0.038690f, -0.059378f, -0.023824f, -0.005097f, 0.006452f, 0.002741f, -0.031872f, 0.005388f, 0.023016f, 0.007562f, -0.004334f, -0.023380f, -0.015156f, -0.026687f, -0.009150f, -0.039573f, -0.007612f, 0.024792f, -0.037785f, -0.062706f, -0.008234f, -0.041070f, -0.027123f, -0.004630f, -0.052118f, -0.040840f, -0.009617f, 0.025671f, 0.027523f, 0.029586f, 0.000601f, -0.022475f, -0.002519f, 0.009731f, -0.012230f, 0.039674f, 0.003317f, 0.029302f, 0.003225f, 0.000130f, 0.030646f, 0.022777f, 0.034293f, 0.070988f, 0.046337f, 0.053022f, 0.046004f, -0.043528f, -0.105703f, 0.122929f, 0.117548f, -0.074333f, -0.096450f, -0.000448f, 0.105474f, -0.011432f, - -0.006124f, -0.032858f, 0.092231f, -0.010222f, -0.024617f, -0.002241f, 0.025471f, 0.047361f, 0.001267f, -0.035550f, -0.040474f, 0.056920f, 0.004223f, -0.024447f, -0.060868f, 0.034620f, 0.019092f, -0.006906f, -0.047978f, 0.015102f, 0.020636f, 0.017151f, -0.030350f, -0.018190f, 0.005352f, 0.046974f, -0.013821f, 0.016887f, -0.069084f, -0.019199f, 0.000100f, 0.045516f, -0.096165f, -0.017152f, 0.009342f, 0.069238f, -0.033279f, 0.010761f, -0.049147f, 0.006728f, 0.020324f, -0.033764f, -0.025781f, -0.003974f, 0.011225f, 0.021141f, -0.021937f, 0.001517f, -0.085717f, 0.046411f, -0.014351f, 0.080317f, -0.049805f, 0.035854f, -0.033908f, 0.037277f, 0.006931f, 0.025014f, 0.021140f, -0.062329f, 0.070506f, 0.013985f, 0.040661f, -0.068795f, 0.019095f, -0.017468f, 0.010903f, -0.019581f, 0.002692f, -0.004724f, 0.009342f, 0.023428f, -0.003718f, -0.027473f, -0.016414f, 0.007079f, -0.003759f, 0.001774f, -0.010771f, -0.026761f, 0.008932f, 0.007169f, -0.008375f, -0.007543f, -0.000561f, -0.008360f, 0.001198f, -0.014536f, -0.000531f, -0.007079f, 0.011980f, 0.007078f, -0.005064f, -0.010780f, 0.003678f, 0.000339f, - -0.009585f, 0.006997f, -0.029481f, -0.000226f, -0.003520f, 0.013140f, -0.000566f, 0.033928f, -0.022565f, -0.022832f, -0.007862f, 0.017929f, -0.024428f, 0.036390f, -0.030622f, 0.015458f, -0.015053f, 0.033175f, -0.029733f, 0.036496f, -0.020795f, 0.028540f, -0.025834f, 0.044344f, -0.041792f, 0.032119f, -0.009679f, 0.024177f, -0.022537f, 0.023757f, -0.025505f, 0.026795f, -0.025652f, 0.021497f, -0.017145f, 0.023752f, -0.018382f, 0.019811f, -0.018228f, 0.005776f, -0.005939f, 0.011937f, -0.008862f, 0.009644f, -0.007594f, 0.007536f, -0.004940f, 0.009866f, -0.036048f, -0.080117f, -0.106523f, 0.077635f, 0.051501f, -0.060768f, -0.086573f, -0.042447f, 0.040051f, 0.020982f, 0.053286f, 0.057346f, 0.011224f, -0.028978f, -0.008454f, 0.020034f, -0.019753f, -0.001660f, 0.011856f, 0.003210f, 0.032110f, 0.022411f, 0.009727f, -0.028961f, -0.001083f, -0.017954f, 0.018630f, -0.030343f, -0.026254f, 0.021946f, -0.007001f, -0.012384f, -0.012118f, -0.021114f, -0.028878f, 0.002154f, 0.023578f, 0.021463f, 0.018038f, -0.006911f, -0.023811f, -0.020738f, -0.014466f, 0.025660f, 0.034977f, -0.016361f, -0.024451f, -0.010634f, - 0.029025f, 0.014935f, 0.038831f, -0.027507f, -0.010442f, 0.015285f, -0.007321f, 0.001222f, -0.004163f, 0.013726f, 0.008263f, 0.011077f, 0.002336f, -0.026325f, 0.010873f, 0.004832f, -0.000974f, 0.020293f, -0.010570f, -0.005250f, 0.003511f, -0.003801f, 0.002607f, -0.007657f, 0.034468f, 0.008619f, -0.002791f, 0.032798f, 0.032895f, -0.033479f, -0.050627f, -0.018594f, -0.034676f, 0.000999f, 0.022931f, 0.006517f, -0.020742f, -0.025054f, -0.006677f, -0.004862f, 0.019927f, 0.009481f, 0.012419f, 0.018638f, 0.011393f, -0.010447f, 0.011536f, 0.008154f, -0.024371f, -0.032687f, 0.009778f, -0.008641f, 0.016246f, 0.011900f, -0.017915f, -0.004816f, -0.006088f, -0.006591f, -0.020817f, -0.011444f, -0.001298f, 0.006554f, 0.009937f, 0.027659f, -0.013786f, -0.010334f, 0.007089f, -0.006450f, 0.036523f, -0.088720f, -0.233572f, -0.085866f, 0.041896f, 0.121509f, 0.256637f, 0.171733f, 0.044203f, 0.065085f, -0.034293f, -0.104465f, -0.173477f, -0.150948f, -0.119999f, -0.034615f, 0.004624f, 0.083483f, 0.092054f, 0.195935f, 0.095134f, 0.062713f, -0.004912f, -0.041780f, -0.094305f, -0.048988f, -0.076254f, -0.087965f, - -0.054142f, -0.045352f, -0.003371f, 0.024486f, 0.073322f, 0.045301f, 0.052635f, 0.047814f, 0.048363f, 0.072701f, 0.006292f, 0.050365f, -0.009329f, -0.022644f, -0.061354f, -0.036590f, -0.091506f, -0.134747f, -0.117700f, 0.001365f, -0.020004f, 0.036922f, 0.063312f, 0.034683f, 0.097653f, 0.085228f, 0.123418f, 0.070218f, 0.083709f, 0.004117f, 0.004138f, -0.066016f, -0.107792f, -0.126020f, -0.151230f, -0.099447f, -0.123586f, -0.010427f, -0.000466f, 0.059471f, 0.062438f, 0.149380f, 0.117397f, 0.166866f, 0.067769f, 0.077994f, 0.032570f, -0.000739f, -0.099561f, -0.162488f, -0.108753f, -0.129820f, -0.080826f, -0.087919f, -0.008181f, 0.013552f, 0.051897f, 0.068003f, 0.092228f, 0.094066f, 0.090527f, 0.059210f, 0.064835f, 0.016827f, -0.011708f, -0.022310f, -0.072938f, -0.066585f, -0.087332f, -0.061793f, -0.087300f, -0.066603f, -0.006909f, 0.015546f, 0.046082f, 0.069454f, 0.062043f, 0.063845f, 0.105318f, 0.038066f, 0.064320f, 0.049290f, -0.066344f, -0.120215f, -0.052060f, -0.106009f, -0.066766f, -0.036415f, -0.007538f, 0.009379f, 0.033779f, 0.061077f, 0.042588f, 0.065708f, 0.041779f, 0.035741f, - 0.014472f, -0.004106f, -0.038187f, -0.012633f, -0.017898f, -0.067123f, -0.062625f, -0.017357f, -0.007059f, 0.003473f, 0.022056f, 0.025675f, 0.032704f, 0.026010f, 0.025855f, 0.009588f, 0.008724f, -0.000494f, -0.014676f, -0.007435f, -0.005390f, -0.015113f, -0.023948f, -0.008361f, -0.012079f, -0.014281f, -0.001866f, 0.005924f, 0.006823f, 0.009928f, 0.011066f, 0.010288f, 0.004310f, 0.001968f, 0.001330f, 0.001369f} - }, - { - {0.014252f, 0.001519f, -0.003851f, -0.004029f, 0.002484f, -0.006883f, -0.000100f, -0.013414f, 0.009628f, 0.012208f, 0.008530f, 0.012014f, -0.014405f, 0.001171f, 0.003302f, -0.005134f, -0.003951f, -0.003509f, -0.016872f, -0.002835f, 0.010042f, -0.017274f, -0.014036f, 0.008179f, 0.007415f, -0.011098f, -0.003866f, 0.007355f, 0.000949f, 0.008941f, 0.003836f, 0.009313f, -0.005837f, 0.001786f, 0.001298f, -0.002468f, 0.004342f, 0.003412f, 0.006326f, 0.002657f, -0.002782f, 0.000611f, 0.007067f, -0.001904f, -0.003202f, -0.001190f, -0.008528f, -0.018836f, 0.011210f, 0.005442f, -0.005886f, 0.008270f, -0.003301f, 0.000919f, -0.000281f, 0.003845f, -0.004963f, -0.001289f, 0.011141f, -0.010480f, -0.004195f, 0.003645f, 0.001827f, -0.001619f, -0.000508f, 0.004883f, 0.000567f, 0.004323f, -0.007463f, 0.007606f, 0.003921f, -0.009738f, 0.007769f, 0.000691f, 0.002821f, -0.001161f, -0.002887f, -0.011367f, -0.003509f, -0.000849f, 0.005853f, -0.001499f, 0.004789f, -0.002856f, 0.000577f, 0.001426f, 0.000582f, 0.003393f, -0.000596f, 0.000236f, -0.000405f, -0.002301f, -0.001040f, 0.000454f, -0.001227f, 0.000164f, - -0.000047f, -0.000522f, 0.003119f, 0.003129f, 0.001637f, 0.001305f, 0.001143f, 0.000405f, 0.000022f, 0.000419f, 0.000181f, -0.000472f, -0.001378f, -0.001559f, 0.022253f, -0.012816f, 0.003898f, -0.014164f, 0.001692f, 0.003300f, -0.014279f, -0.018053f, 0.004496f, -0.019586f, 0.004304f, -0.005116f, -0.001362f, -0.012017f, -0.001751f, -0.013493f, -0.006941f, 0.000043f, -0.014274f, 0.015147f, 0.005327f, -0.023669f, 0.002237f, -0.001315f, -0.004295f, -0.010139f, 0.005078f, 0.012262f, 0.000234f, -0.000917f, 0.011511f, -0.006782f, 0.000137f, -0.004322f, 0.007625f, -0.008957f, 0.002613f, 0.010756f, -0.009385f, 0.009404f, 0.003301f, 0.010173f, -0.000886f, 0.002296f, -0.001554f, -0.004318f, 0.013334f, -0.016582f, 0.003810f, -0.007350f, -0.003197f, -0.002180f, -0.006044f, -0.004479f, -0.013218f, -0.008320f, -0.002077f, 0.008577f, -0.000746f, 0.003206f, 0.012019f, -0.000305f, -0.010448f, -0.001367f, 0.000363f, 0.003239f, -0.005108f, -0.000011f, -0.010277f, 0.000190f, -0.004194f, 0.003363f, 0.005319f, 0.007818f, 0.002781f, -0.004459f, -0.005780f, 0.007673f, -0.002594f, -0.003559f, 0.001422f, 0.004253f, - 0.008858f, 0.001050f, 0.002531f, -0.000611f, 0.005187f, -0.001043f, -0.004138f, -0.002140f, -0.002056f, -0.000219f, 0.003513f, 0.000657f, -0.000249f, -0.001907f, 0.003403f, -0.000040f, -0.001296f, -0.000990f, -0.000890f, -0.001028f, 0.001610f, -0.000717f, -0.000185f, -0.002008f, -0.005358f, -0.018434f, -0.000218f, -0.011110f, -0.003506f, -0.001812f, -0.012956f, -0.001776f, -0.003018f, 0.006427f, 0.015110f, 0.015195f, 0.001807f, -0.006499f, 0.006077f, -0.014724f, -0.002105f, -0.005637f, 0.005132f, -0.021941f, 0.007746f, 0.003711f, -0.000801f, -0.006317f, -0.009457f, -0.004328f, -0.007802f, -0.006717f, 0.004104f, -0.001474f, -0.008409f, -0.002459f, 0.001703f, 0.014318f, -0.000553f, -0.014478f, 0.001133f, 0.006225f, -0.000181f, -0.004562f, 0.001201f, 0.005442f, -0.015726f, -0.001231f, -0.006838f, 0.011041f, 0.006727f, 0.001866f, -0.014538f, 0.001637f, 0.005600f, 0.008908f, 0.008342f, -0.009562f, -0.004493f, 0.000427f, -0.002986f, -0.003002f, 0.007771f, -0.004828f, 0.004757f, 0.001299f, -0.006109f, -0.001384f, -0.008393f, 0.010106f, 0.003798f, -0.009996f, -0.006890f, 0.001682f, 0.005302f, -0.007931f, - -0.009996f, -0.001706f, 0.000497f, -0.006653f, 0.001431f, -0.002733f, 0.003374f, -0.006341f, 0.009423f, 0.005044f, 0.007104f, 0.002027f, 0.000938f, 0.006388f, 0.008647f, 0.001006f, 0.002458f, -0.000828f, 0.001231f, 0.000145f, -0.000359f, 0.000964f, 0.000729f, 0.001001f, -0.001364f, 0.000048f, 0.000666f, -0.000484f, 0.000154f, 0.002880f, -0.001675f, 0.000656f, -0.002006f, -0.001610f, -0.001344f, 0.000296f, 0.001094f, 0.000735f, 0.000102f, -0.001868f, -0.001235f, -0.031374f, 0.010128f, 0.009057f, 0.015175f, -0.003954f, 0.009524f, -0.027063f, -0.007412f, 0.008461f, 0.000988f, -0.013395f, -0.003504f, -0.004469f, -0.023714f, -0.009619f, 0.002383f, -0.001105f, -0.016914f, 0.010535f, 0.014975f, -0.015418f, 0.011667f, -0.020186f, -0.006883f, -0.001828f, 0.006919f, -0.000128f, -0.008203f, 0.005514f, 0.002732f, -0.001367f, 0.008985f, -0.004382f, -0.005834f, -0.001832f, -0.003343f, -0.005989f, 0.008836f, -0.006833f, 0.002481f, 0.006617f, -0.001381f, -0.005296f, -0.009935f, -0.001224f, -0.007099f, -0.002181f, -0.008254f, -0.002247f, 0.018259f, 0.000351f, 0.011089f, -0.010232f, 0.009299f, -0.002940f, - -0.014979f, -0.008842f, 0.008241f, -0.005457f, -0.007635f, 0.005434f, -0.008972f, 0.007418f, 0.001967f, -0.002773f, 0.009696f, 0.008763f, 0.003843f, -0.009677f, -0.010963f, -0.000780f, 0.014514f, 0.002869f, 0.002171f, -0.008271f, 0.002114f, 0.005205f, -0.011134f, -0.004085f, 0.003573f, 0.007729f, 0.003810f, 0.006540f, -0.000406f, 0.000043f, 0.002381f, 0.000290f, -0.001284f, 0.000378f, -0.000985f, -0.001420f, -0.004947f, -0.003944f, 0.001160f, -0.002379f, -0.001443f, 0.001638f, 0.000710f, 0.001195f, -0.000345f, 0.001996f, -0.001338f, 0.000084f, -0.001765f, 0.000008f, -0.002134f, 0.001039f, 0.000323f, 0.001428f, -0.002773f, -0.016854f, -0.016025f, -0.010617f, 0.001904f, -0.002765f, 0.006460f, -0.005856f, -0.000064f, 0.001082f, -0.004836f, -0.001883f, 0.003946f, -0.004795f, 0.018589f, -0.012320f, 0.008567f, -0.003290f, -0.001355f, -0.008769f, -0.002469f, -0.001281f, 0.013530f, -0.009377f, 0.001138f, 0.002555f, -0.013431f, -0.008245f, -0.009201f, -0.007836f, -0.015558f, -0.005418f, 0.005484f, 0.010410f, 0.006566f, -0.012442f, -0.017513f, -0.003915f, 0.000449f, -0.008962f, 0.001542f, -0.006118f, - -0.009178f, -0.021663f, -0.010931f, -0.015211f, 0.008629f, -0.004001f, 0.006995f, -0.008776f, -0.021122f, -0.011244f, 0.000953f, -0.004375f, -0.006990f, -0.003230f, -0.008371f, 0.011144f, 0.000919f, 0.006450f, 0.008664f, 0.002126f, -0.000452f, -0.007386f, 0.000234f, 0.009420f, -0.001732f, -0.007134f, -0.009853f, 0.015563f, -0.013116f, -0.018277f, -0.012936f, -0.007490f, -0.010194f, 0.011296f, 0.018082f, -0.014578f, -0.010083f, 0.002140f, 0.008725f, 0.013456f, 0.010624f, 0.008273f, 0.008161f, -0.003016f, -0.003699f, -0.004215f, -0.004362f, 0.003261f, -0.002708f, 0.000819f, -0.003284f, -0.005233f, -0.002187f, -0.003795f, 0.002626f, -0.002405f, -0.004672f, -0.002768f, -0.002736f, -0.004696f, -0.005181f, -0.003277f, -0.001374f, 0.000927f, 0.000830f, 0.002305f, 0.000219f, -0.007998f, 0.000852f, -0.001307f, -0.003267f, 0.000841f, -0.001468f, -0.002479f, -0.005269f, -0.004363f, 0.000060f, -0.000076f, -0.001826f, -0.002091f, -0.000081f, 0.004301f, -0.034423f, 0.010615f, -0.002447f, 0.006085f, 0.018863f, 0.007403f, -0.004684f, 0.006383f, -0.014218f, 0.008778f, 0.010291f, -0.018755f, -0.004022f, -0.009499f, - 0.010559f, 0.009196f, 0.014334f, 0.016641f, -0.021646f, -0.011147f, 0.003548f, 0.018576f, -0.007067f, 0.008635f, -0.020696f, -0.006251f, -0.007270f, -0.004391f, -0.012537f, 0.003099f, -0.020491f, 0.014183f, -0.004038f, -0.003636f, 0.010347f, -0.000620f, 0.002349f, 0.011014f, 0.000282f, 0.009016f, 0.006023f, -0.002552f, -0.003571f, -0.001217f, -0.014393f, -0.010537f, -0.013153f, -0.000828f, 0.027292f, 0.006345f, 0.005264f, -0.000638f, -0.003832f, -0.000225f, 0.016302f, -0.003486f, 0.005089f, -0.031484f, 0.028957f, -0.007017f, -0.005194f, 0.001670f, 0.017728f, 0.006464f, -0.002990f, -0.010792f, 0.031028f, -0.005981f, -0.000397f, 0.009953f, -0.007885f, -0.000044f, 0.004431f, -0.006988f, 0.006112f, 0.006096f, 0.025619f, -0.012754f, -0.016081f, -0.002945f, 0.007653f, -0.009643f, 0.002130f, 0.006638f, 0.002098f, -0.005630f, 0.002519f, 0.006807f, -0.004311f, 0.000619f, -0.007359f, -0.002294f, -0.002180f, -0.005981f, 0.007848f, -0.005688f, -0.004856f, 0.003608f, -0.000251f, -0.006745f, -0.000634f, 0.001647f, 0.002883f, 0.000346f, 0.003396f, -0.002435f, -0.002118f, -0.001981f, 0.002273f, -0.002482f, - 0.004059f, 0.000465f, -0.001748f, 0.001888f, 0.004239f, -0.000095f, -0.001956f, 0.014898f, 0.008358f, 0.016579f, -0.006628f, -0.003938f, 0.009556f, -0.015287f, 0.013771f, 0.015715f, -0.007866f, -0.001317f, -0.024679f, 0.001178f, 0.008506f, 0.006885f, -0.005219f, -0.016788f, -0.034066f, 0.000557f, -0.005783f, -0.016164f, 0.003783f, 0.010880f, -0.014784f, -0.006296f, -0.016125f, 0.008173f, 0.000937f, -0.002394f, -0.005354f, -0.006988f, 0.017409f, 0.020308f, 0.007907f, 0.009681f, -0.004511f, -0.010183f, 0.028319f, 0.007049f, -0.004814f, -0.016614f, 0.012266f, 0.000521f, 0.016290f, -0.001425f, 0.020128f, 0.010074f, 0.014090f, 0.011919f, 0.006083f, 0.015673f, 0.019558f, -0.000548f, 0.003628f, -0.006228f, -0.000187f, 0.010680f, 0.004480f, 0.005815f, -0.017267f, -0.006331f, -0.003629f, -0.015035f, -0.014373f, -0.009464f, 0.008080f, 0.016629f, 0.021739f, 0.028438f, 0.006349f, 0.002504f, 0.022923f, -0.009109f, -0.017237f, -0.005992f, -0.008716f, 0.014844f, 0.012141f, 0.004664f, -0.016320f, -0.004430f, 0.002950f, 0.002398f, -0.003145f, -0.007510f, 0.002346f, 0.001950f, 0.009499f, -0.002240f, - -0.005188f, 0.001125f, 0.001884f, 0.002349f, 0.000227f, 0.000169f, 0.001929f, 0.004368f, -0.003008f, -0.002946f, 0.000343f, -0.000335f, -0.004240f, -0.000947f, -0.005423f, 0.006036f, 0.001992f, -0.004078f, -0.000109f, 0.004111f, -0.002062f, -0.000313f, -0.003190f, 0.001851f, 0.002210f, -0.001386f, 0.005267f, 0.004003f, 0.026315f, -0.024920f, -0.011710f, -0.003333f, 0.010091f, -0.023311f, 0.014767f, -0.022966f, 0.011327f, -0.000054f, 0.012017f, 0.019021f, -0.007764f, 0.017374f, 0.018997f, 0.018065f, -0.010446f, 0.015241f, -0.016377f, -0.013052f, -0.002016f, -0.010083f, -0.000146f, -0.008668f, 0.014929f, -0.011022f, 0.003295f, -0.010881f, -0.019123f, -0.008900f, -0.004018f, 0.023148f, -0.019380f, 0.018237f, 0.008031f, -0.026840f, 0.030821f, 0.007612f, 0.003449f, 0.021661f, 0.003854f, 0.000998f, -0.012244f, -0.000037f, -0.006833f, 0.024697f, 0.010430f, 0.017320f, -0.006727f, -0.004055f, 0.011916f, 0.020577f, -0.021472f, 0.021323f, 0.003900f, -0.003433f, -0.003996f, -0.020207f, 0.009764f, -0.009520f, 0.004129f, 0.000930f, -0.018335f, 0.006226f, 0.015541f, -0.014078f, 0.009861f, 0.006485f, - 0.021749f, 0.002343f, -0.001459f, 0.013228f, 0.019021f, 0.001579f, -0.010901f, 0.012799f, -0.014713f, -0.007636f, 0.003933f, -0.005929f, 0.003980f, -0.004747f, 0.001897f, 0.008253f, 0.006012f, -0.005975f, 0.005254f, -0.003060f, 0.004236f, -0.004185f, 0.013244f, 0.001368f, 0.012645f, -0.001485f, 0.003172f, -0.002639f, -0.001094f, -0.004003f, 0.008014f, 0.003398f, -0.006602f, 0.006937f, 0.008030f, -0.000856f, -0.001104f, 0.004934f, -0.000350f, -0.000383f, 0.006684f, -0.000172f, 0.001640f, 0.004349f, 0.002821f, -0.001005f, 0.005103f, -0.004192f, -0.000781f, 0.001018f, 0.001377f, 0.001170f, -0.000293f, -0.000570f, -0.005091f, 0.002452f, 0.007557f, -0.021243f, -0.015197f, 0.023118f, -0.029603f, 0.007468f, -0.015754f, 0.017601f, -0.018803f, 0.028748f, 0.009977f, 0.002787f, -0.024926f, 0.012716f, 0.021129f, 0.005584f, -0.012805f, -0.008332f, -0.007321f, 0.019604f, 0.010681f, -0.027354f, 0.003891f, -0.019353f, -0.001044f, 0.002216f, -0.016516f, 0.021685f, 0.021793f, -0.009884f, 0.004800f, 0.014765f, -0.018006f, -0.002747f, -0.005523f, -0.014937f, 0.031787f, -0.011548f, -0.007072f, -0.016000f, - -0.026682f, -0.004245f, 0.000528f, -0.009239f, 0.004004f, -0.022118f, 0.001985f, 0.001552f, -0.004395f, 0.017467f, -0.003605f, -0.013606f, 0.007118f, -0.000022f, -0.010134f, 0.008716f, 0.037690f, -0.007545f, 0.009008f, 0.002040f, -0.025526f, -0.004172f, 0.022865f, 0.010273f, 0.022701f, -0.002335f, 0.013148f, -0.018059f, 0.008153f, 0.007962f, 0.002722f, -0.015352f, 0.014239f, 0.004999f, -0.039732f, 0.003089f, -0.007126f, 0.026599f, -0.010154f, 0.020650f, 0.019205f, 0.015371f, -0.001838f, 0.005890f, 0.000974f, 0.001536f, -0.002520f, -0.004400f, 0.010471f, 0.004181f, -0.000064f, -0.006914f, -0.009561f, -0.002263f, 0.004213f, 0.006735f, 0.004923f, 0.008646f, 0.000393f, -0.002363f, -0.003485f, -0.002810f, 0.003228f, 0.005161f, -0.000381f, 0.004067f, 0.002782f, 0.000733f, 0.003853f, -0.000743f, 0.004027f, -0.006528f, -0.007936f, -0.010617f, -0.000389f, 0.004793f, 0.002306f, -0.005004f, -0.001687f, -0.003515f, -0.003730f, 0.006442f, 0.002107f, 0.002849f, -0.046490f, 0.052570f, 0.006200f, 0.020752f, -0.038140f, 0.020826f, 0.027100f, -0.031229f, 0.011902f, 0.015467f, 0.011965f, -0.020178f, - 0.002650f, 0.003566f, -0.006811f, 0.011787f, 0.024275f, -0.019483f, -0.016215f, -0.005927f, 0.020578f, 0.017800f, 0.025166f, -0.001209f, 0.010630f, -0.018748f, -0.004913f, -0.004867f, 0.004115f, 0.011835f, 0.032166f, 0.019158f, 0.011693f, 0.006122f, -0.001068f, 0.015372f, -0.005690f, -0.027597f, -0.005362f, 0.008120f, 0.008814f, -0.016149f, -0.012236f, -0.020001f, 0.003862f, -0.001584f, 0.007022f, -0.013110f, 0.023483f, 0.022964f, -0.019883f, 0.047276f, 0.002166f, -0.004339f, -0.000271f, -0.009836f, -0.002130f, -0.003022f, -0.019118f, 0.000322f, 0.000056f, 0.012554f, -0.039781f, 0.009750f, -0.014102f, 0.028901f, 0.034895f, 0.015110f, 0.014497f, 0.006525f, 0.002328f, 0.031509f, -0.005912f, -0.023292f, 0.019935f, -0.010488f, 0.005343f, 0.015568f, 0.028382f, 0.003993f, 0.002798f, -0.022719f, -0.000991f, 0.006652f, 0.018014f, -0.007825f, 0.009784f, 0.004724f, -0.006900f, 0.018302f, 0.003085f, 0.008208f, -0.005335f, -0.001683f, -0.005287f, 0.000898f, 0.002101f, -0.002785f, -0.000163f, 0.005516f, -0.003047f, 0.005590f, 0.003758f, -0.003893f, -0.000419f, 0.002600f, -0.001653f, 0.000450f, - -0.003754f, -0.012337f, -0.003553f, -0.001873f, 0.012897f, 0.015979f, 0.001562f, 0.002358f, -0.004596f, -0.005335f, 0.001338f, 0.001752f, -0.006687f, -0.005178f, -0.003479f, -0.003014f, 0.004281f, -0.007387f, -0.000366f, -0.005426f, 0.019119f, 0.003660f, -0.013314f, 0.012396f, 0.018605f, 0.016160f, 0.010198f, 0.019279f, -0.023461f, -0.014969f, 0.002603f, -0.021225f, -0.005304f, -0.003624f, 0.004657f, -0.005516f, -0.013790f, -0.017328f, -0.010429f, 0.008445f, 0.014511f, -0.025573f, 0.005340f, -0.002749f, -0.000746f, -0.030799f, -0.027662f, -0.004889f, -0.021473f, 0.010023f, -0.024479f, 0.001490f, 0.012987f, 0.018703f, -0.016719f, 0.022240f, 0.005619f, -0.002288f, -0.005003f, 0.033024f, -0.009307f, -0.001721f, -0.026682f, -0.015026f, 0.021598f, -0.001723f, 0.008123f, -0.025668f, -0.028114f, -0.007731f, -0.015905f, -0.002823f, 0.001133f, -0.010408f, -0.013350f, 0.007821f, -0.012401f, 0.001022f, -0.018232f, -0.009866f, -0.000561f, -0.029949f, 0.002653f, 0.019619f, 0.003650f, 0.010281f, 0.021323f, 0.036670f, -0.035538f, 0.006411f, -0.021969f, -0.021303f, -0.011996f, -0.016197f, -0.010485f, -0.009575f, - 0.035824f, 0.019734f, 0.019781f, 0.004097f, 0.005734f, -0.026011f, 0.001161f, -0.009180f, 0.004047f, -0.011308f, 0.015792f, 0.020967f, 0.001943f, -0.009530f, -0.006567f, -0.017948f, 0.001516f, 0.011005f, 0.005991f, -0.004355f, 0.011256f, 0.005468f, 0.011921f, -0.002598f, -0.002328f, 0.001965f, 0.007712f, -0.005004f, 0.003222f, -0.007354f, -0.010332f, 0.007375f, 0.002532f, 0.001517f, 0.001517f, -0.013914f, -0.008404f, -0.000072f, 0.010563f, -0.009006f, 0.005221f, -0.012067f, -0.004172f, -0.001927f, 0.004139f, 0.002904f, -0.003735f, -0.002942f, -0.016187f, 0.036910f, 0.039135f, 0.043005f, -0.032161f, 0.002242f, 0.023139f, 0.018204f, -0.018837f, -0.035926f, -0.004286f, -0.005439f, -0.028296f, -0.016392f, 0.053367f, 0.004114f, 0.003537f, 0.019921f, -0.002437f, 0.008466f, -0.007493f, -0.021308f, 0.013856f, 0.011596f, -0.028842f, -0.040909f, -0.031754f, -0.025225f, -0.024066f, 0.002216f, 0.006841f, 0.012062f, -0.016048f, 0.015522f, 0.003616f, -0.007895f, -0.016978f, -0.000647f, 0.000814f, -0.026096f, -0.020494f, 0.002908f, -0.004828f, 0.003473f, -0.015893f, 0.012667f, 0.003838f, -0.014921f, - -0.031966f, -0.012665f, -0.010878f, -0.042421f, -0.013480f, 0.003877f, 0.020794f, -0.002110f, 0.024647f, -0.004460f, -0.002221f, -0.036165f, -0.007806f, 0.014097f, 0.006629f, -0.060459f, 0.017168f, 0.005146f, -0.016971f, -0.010322f, -0.017698f, -0.019905f, -0.000931f, 0.000830f, -0.019289f, -0.006256f, 0.012083f, 0.017524f, 0.027589f, -0.021283f, 0.000875f, 0.015570f, -0.000844f, -0.046251f, -0.036942f, -0.000507f, -0.009879f, 0.011479f, -0.000479f, -0.011437f, -0.016670f, 0.007549f, -0.004900f, 0.006851f, 0.018735f, -0.000589f, -0.009472f, -0.015807f, -0.028996f, -0.009924f, 0.001623f, -0.004853f, -0.005004f, 0.001818f, 0.001754f, 0.012758f, -0.006712f, 0.001272f, 0.004688f, 0.002475f, -0.010563f, 0.001137f, -0.002783f, -0.025176f, 0.002433f, -0.009355f, -0.011470f, 0.004016f, 0.002957f, -0.007666f, -0.002520f, 0.008991f, 0.002503f, 0.002353f, -0.009407f, -0.010566f, -0.003825f, -0.000840f, 0.000424f, 0.006398f, 0.014799f, -0.012554f, 0.042015f, -0.035959f, -0.022138f, -0.007311f, -0.067989f, -0.035516f, -0.000187f, -0.043343f, 0.033653f, -0.015246f, -0.014047f, 0.003848f, 0.077062f, 0.037184f, - 0.002381f, 0.015817f, -0.003586f, -0.020692f, -0.002063f, -0.032011f, -0.023165f, 0.011006f, 0.011179f, 0.013815f, -0.022246f, 0.028478f, 0.017431f, 0.032220f, -0.032763f, 0.005249f, 0.047762f, 0.004450f, 0.001950f, 0.009409f, -0.045818f, 0.011674f, -0.011587f, 0.007514f, -0.018457f, -0.043273f, -0.002661f, 0.017454f, 0.021289f, 0.005489f, -0.006771f, 0.003113f, -0.001999f, 0.014302f, -0.032679f, -0.047563f, 0.008484f, -0.017384f, 0.028354f, -0.011391f, -0.011835f, 0.037025f, 0.008320f, 0.015900f, 0.002935f, -0.031374f, -0.012878f, -0.003791f, 0.016883f, 0.048844f, 0.037597f, -0.011275f, -0.043248f, -0.000942f, -0.005003f, 0.015956f, -0.026679f, -0.033443f, -0.018994f, 0.015757f, -0.033873f, -0.005342f, -0.028428f, 0.000118f, 0.022843f, -0.000761f, -0.042592f, -0.009422f, 0.005609f, 0.011130f, 0.005269f, -0.026598f, -0.017923f, -0.028462f, 0.004366f, -0.006029f, -0.012375f, -0.009548f, -0.012368f, 0.002333f, -0.005179f, -0.011859f, -0.003377f, 0.008245f, -0.000080f, -0.000461f, -0.014472f, -0.000426f, -0.001388f, -0.009274f, 0.000728f, 0.017663f, 0.005902f, 0.003141f, -0.018309f, 0.007013f, - -0.002054f, -0.002204f, 0.002829f, -0.000532f, -0.000400f, -0.003859f, -0.010917f, -0.012234f, -0.009998f, 0.012207f, 0.010709f, -0.005112f, -0.027180f, -0.010166f, -0.010116f, -0.002344f, -0.077320f, 0.029891f, 0.024533f, -0.011324f, -0.051093f, -0.011251f, -0.019664f, -0.020697f, 0.022581f, 0.027894f, -0.002819f, 0.007651f, -0.058053f, 0.020499f, -0.072667f, -0.018358f, -0.006267f, 0.014525f, 0.036635f, 0.058147f, 0.024169f, -0.033591f, 0.007878f, 0.040640f, 0.005462f, 0.012395f, 0.022091f, -0.034143f, -0.013129f, -0.005351f, 0.010440f, -0.024041f, -0.012886f, -0.007259f, -0.018020f, -0.013757f, 0.024755f, 0.024267f, 0.006299f, 0.002061f, 0.041860f, -0.007815f, 0.019595f, -0.047192f, 0.031412f, 0.009006f, -0.042740f, 0.004422f, 0.013817f, -0.040214f, -0.005101f, -0.039329f, 0.013272f, 0.016633f, 0.017792f, -0.026464f, -0.002171f, 0.026516f, -0.021951f, 0.000359f, -0.003445f, 0.043738f, -0.025751f, 0.032236f, 0.016426f, -0.040657f, 0.035861f, -0.029922f, 0.023124f, 0.030357f, -0.030487f, 0.017324f, -0.025991f, -0.032444f, -0.048852f, -0.040813f, -0.044659f, -0.010646f, 0.008125f, -0.013433f, - 0.039303f, 0.040725f, -0.017059f, 0.035897f, -0.005357f, -0.007506f, 0.045731f, -0.010092f, -0.030403f, 0.021307f, -0.004436f, -0.023809f, -0.018206f, 0.018073f, 0.003357f, 0.009393f, 0.014427f, 0.002575f, 0.011901f, 0.018182f, -0.004673f, 0.020381f, 0.014152f, 0.010192f, 0.011735f, 0.001749f, 0.007282f, 0.017327f, 0.014107f, 0.017566f, 0.002816f, 0.014594f, -0.002514f, 0.001060f, 0.012895f, -0.006234f, -0.022581f, 0.010841f, 0.003866f, 0.000076f, 0.000705f, 0.010352f, -0.019946f, 0.010412f, 0.014450f, 0.011579f, -0.013128f, 0.012705f, -0.061099f, -0.028814f, -0.029995f, 0.053710f, 0.001757f, 0.020165f, -0.008580f, 0.076109f, 0.012126f, -0.050602f, 0.003848f, 0.055960f, -0.020545f, 0.012576f, -0.009091f, 0.004983f, -0.032498f, -0.043869f, 0.069951f, 0.049840f, -0.018999f, 0.038289f, 0.015116f, 0.049763f, 0.056539f, -0.016347f, -0.013203f, 0.050312f, 0.036894f, 0.004221f, -0.015749f, -0.024793f, -0.026053f, 0.023368f, 0.044353f, 0.020939f, -0.007971f, 0.029878f, -0.015544f, 0.028364f, -0.012531f, 0.041297f, 0.073011f, 0.055656f, -0.059293f, 0.027268f, -0.010033f, -0.024067f, - -0.000702f, 0.020812f, 0.020071f, 0.133305f, -0.013371f, -0.001279f, -0.021606f, -0.023532f, 0.026018f, 0.048225f, -0.011711f, 0.036684f, 0.031310f, -0.004091f, 0.001184f, -0.025825f, 0.026481f, 0.022290f, 0.070932f, 0.072154f, 0.087586f, 0.036446f, -0.022276f, -0.018027f, -0.040153f, 0.039351f, -0.059424f, 0.043116f, -0.055776f, 0.032898f, -0.019633f, -0.033516f, 0.024345f, -0.090350f, -0.071465f, 0.013095f, 0.014108f, -0.025815f, -0.025032f, 0.042229f, 0.021077f, -0.038740f, 0.005820f, -0.008786f, -0.021188f, 0.007001f, 0.010927f, 0.003364f, 0.011072f, 0.012997f, 0.022834f, -0.010507f, 0.004495f, -0.012716f, -0.022555f, -0.013772f, 0.005467f, 0.002005f, 0.031297f, 0.006709f, -0.007505f, -0.025283f, 0.004072f, -0.010002f, -0.008091f, -0.011228f, 0.008797f, 0.018876f, 0.006733f, 0.016387f, 0.013765f, 0.021654f, -0.009035f, 0.016505f, 0.002240f, 0.004834f, -0.001420f, 0.001444f, -0.012647f, 0.015222f, 0.036328f, 0.019493f, -0.003766f, -0.004010f, 0.028887f, 0.024214f, -0.022260f, 0.007148f, 0.014553f, -0.011161f, 0.041785f, 0.009439f, -0.097950f, 0.022463f, 0.012831f, -0.072866f, - 0.004289f, -0.012504f, 0.003017f, 0.026685f, -0.003543f, -0.067350f, -0.011970f, -0.021478f, -0.003786f, 0.047665f, 0.057222f, -0.032593f, -0.008227f, -0.027362f, 0.014076f, -0.051615f, -0.100098f, -0.035881f, -0.030247f, 0.005229f, 0.001617f, 0.045482f, -0.068444f, 0.032569f, -0.015945f, -0.007598f, 0.028064f, 0.013163f, 0.047541f, 0.010808f, 0.018274f, 0.050864f, -0.058218f, 0.072541f, 0.057575f, 0.030004f, 0.053994f, -0.021042f, 0.020460f, -0.050685f, -0.010150f, -0.025540f, 0.044707f, -0.039746f, 0.009498f, -0.085288f, -0.105783f, 0.070508f, -0.003361f, 0.045472f, -0.032204f, 0.030081f, -0.021081f, 0.006482f, -0.012147f, -0.069311f, -0.022021f, -0.046355f, -0.022115f, 0.025011f, 0.102526f, 0.036589f, -0.090750f, -0.020567f, 0.023816f, -0.021061f, -0.013754f, -0.059924f, -0.031157f, 0.046176f, -0.017527f, 0.011133f, 0.008876f, -0.037369f, 0.023375f, -0.005510f, 0.001582f, -0.076631f, -0.022549f, -0.001687f, -0.035257f, -0.019910f, 0.002632f, -0.051877f, 0.005123f, 0.011543f, -0.042226f, -0.033047f, -0.059507f, -0.044202f, -0.004432f, -0.024506f, -0.012053f, 0.001427f, -0.017306f, -0.016783f, - -0.007315f, -0.026202f, -0.012916f, 0.003306f, 0.017402f, -0.023117f, -0.008650f, -0.039541f, 0.013537f, 0.009646f, 0.022802f, -0.016406f, 0.023717f, -0.051144f, -0.003483f, -0.000065f, -0.004062f, 0.007745f, -0.008792f, 0.005349f, -0.024211f, -0.024941f, 0.007173f, 0.006162f, -0.060045f, 0.031908f, 0.031879f, 0.056481f, -0.027323f, 0.020798f, -0.031428f, -0.036561f, 0.016539f, 0.074948f, 0.121366f, -0.007405f, -0.007861f, 0.002696f, -0.002514f, -0.053861f, 0.084982f, 0.040878f, 0.045290f, 0.034915f, -0.024376f, 0.029584f, -0.047621f, -0.068677f, -0.011703f, 0.051670f, 0.033694f, -0.024488f, -0.015716f, -0.003283f, 0.041874f, 0.001892f, 0.030573f, 0.029902f, 0.049551f, 0.016585f, -0.030884f, -0.029374f, 0.028410f, -0.033085f, -0.024583f, 0.014740f, 0.054410f, 0.050112f, -0.056946f, -0.044078f, 0.029648f, 0.035262f, 0.106790f, -0.024640f, -0.057867f, -0.060060f, 0.051200f, -0.038401f, 0.048319f, 0.054524f, 0.109883f, 0.232887f, -0.051865f, -0.029578f, -0.087047f, -0.138790f, -0.044100f, -0.069853f, 0.008207f, 0.096642f, -0.013999f, 0.051218f, 0.073132f, 0.047883f, -0.026762f, -0.085945f, - -0.140669f, 0.078708f, -0.005337f, 0.089513f, -0.045763f, -0.122087f, 0.042840f, -0.072330f, -0.096210f, -0.049435f, -0.030478f, 0.030776f, 0.030483f, 0.054995f, -0.003875f, -0.026680f, -0.004035f, -0.002194f, -0.049670f, -0.048295f, 0.024827f, -0.017075f, 0.049517f, 0.044949f, -0.021242f, 0.044749f, -0.035004f, 0.001009f, 0.044312f, 0.004758f, -0.068393f, 0.018325f, -0.034325f, -0.006006f, -0.010875f, -0.009199f, -0.050351f, -0.041419f, 0.008301f, 0.060021f, 0.064590f, -0.060258f, -0.006870f, 0.073282f, 0.070437f, 0.000083f, 0.015075f, -0.066372f, -0.034949f, 0.009822f, 0.039067f, -0.057384f, 0.014968f, 0.044677f, 0.022754f, 0.016892f, 0.005389f, 0.028166f, -0.047001f, 0.008745f, -0.042845f, -0.118152f, 0.029745f, -0.049367f, 0.049036f, 0.007210f, 0.027377f, 0.023998f, -0.108090f, -0.076577f, -0.037934f, -0.023815f, -0.025131f, -0.044175f, -0.013747f, -0.073390f, -0.046753f, 0.035303f, -0.047796f, 0.090956f, -0.067681f, 0.006963f, 0.018738f, -0.007193f, 0.007991f, -0.003903f, 0.021724f, -0.021093f, -0.022747f, -0.003935f, 0.016274f, -0.002864f, 0.038997f, -0.036818f, 0.008293f, 0.057000f, - 0.018249f, 0.008548f, 0.029007f, 0.003598f, -0.023237f, -0.014791f, 0.046234f, 0.010373f, -0.073129f, -0.032416f, -0.059343f, -0.027008f, 0.078593f, 0.073306f, -0.075751f, -0.008379f, -0.086126f, -0.020754f, -0.007184f, 0.019857f, 0.043145f, -0.070536f, 0.047026f, -0.060051f, -0.010188f, -0.040685f, 0.090490f, -0.018302f, 0.063814f, 0.059712f, 0.132866f, -0.061225f, 0.054776f, 0.008918f, 0.052041f, 0.018181f, 0.039693f, -0.066601f, -0.061212f, 0.088779f, 0.004290f, -0.003352f, -0.062916f, 0.071677f, -0.024312f, 0.036769f, -0.066223f, 0.139090f, -0.074579f, 0.077373f, -0.093369f, 0.036860f, -0.070392f, 0.038847f, -0.064861f, 0.048036f, -0.041108f, 0.028212f, -0.022982f, 0.015532f, -0.034995f, -0.021606f, -0.016617f, -0.004370f, 0.012264f, 0.002140f, 0.009868f, 0.000798f, 0.009690f, -0.005294f, -0.017935f, -0.028266f, 0.012697f, 0.014025f, 0.003945f, 0.012845f, -0.010688f, 0.004994f, -0.008505f, 0.005249f, 0.047679f, -0.012097f, -0.034486f, 0.004803f, -0.019622f, -0.036686f, 0.011449f, -0.020068f, 0.014418f, -0.016843f, 0.011937f, -0.032072f, 0.012759f, -0.041448f, 0.057931f, 0.008914f, - -0.106552f, -0.046931f, -0.066047f, 0.003594f, -0.015501f, -0.143856f, -0.065371f, -0.037769f, -0.076682f, -0.047784f, -0.144968f, -0.122388f, -0.022421f, 0.051958f, -0.079918f, -0.047808f, -0.011880f, -0.068102f, -0.015862f, -0.005719f, -0.065920f, -0.017803f, 0.013126f, 0.002939f, -0.087396f, -0.049864f, -0.049995f, -0.027926f, -0.031166f, -0.009230f, -0.060788f, 0.050057f, 0.032510f, 0.071597f, 0.104286f, 0.090645f, 0.022887f, 0.095851f, 0.038201f, 0.016772f, -0.043133f, 0.033314f, 0.034666f, 0.027323f, -0.011544f, -0.033370f, -0.015673f, 0.023678f, 0.042397f, 0.219569f, 0.029430f, 0.044891f, 0.031930f, 0.089521f, 0.034412f, 0.078566f, 0.143426f, -0.069872f, -0.141293f, 0.017052f, 0.089572f, 0.160294f, 0.070826f, -0.139368f, 0.018328f, -0.035150f, 0.202389f, 0.148752f, 0.181016f, 0.165909f, -0.145079f, -0.095934f, 0.118139f, 0.141901f, -0.042060f, -0.083389f, -0.100499f, 0.224070f, 0.149085f, -0.010292f, -0.193897f, 0.045676f, -0.007962f, -0.043689f, 0.052706f, 0.013627f, -0.017476f, -0.042250f, -0.001378f, 0.029668f, 0.082862f, 0.058509f, -0.050412f, -0.020932f, -0.014004f, -0.011605f, - 0.046482f, 0.033308f, 0.035890f, -0.000507f, 0.018913f, 0.075878f, 0.051397f, 0.009699f, 0.029972f, -0.022246f, 0.037550f, 0.048507f, 0.064350f, 0.081984f, 0.064034f, 0.048541f, -0.000304f, -0.012604f, -0.017826f, -0.007032f, -0.037870f, -0.021784f, -0.018582f, -0.047312f, -0.060484f, -0.069184f, -0.117799f, -0.067775f, -0.044301f, -0.071859f, -0.131025f, -0.091992f, -0.077575f, -0.090808f, -0.107367f, -0.113794f, -0.039433f, -0.044653f, -0.062577f, -0.036070f, -0.039314f, -0.027002f, -0.036964f, -0.036501f, -0.035666f, -0.035289f, -0.104105f, 0.167007f, 0.134841f, -0.116665f, 0.026081f, -0.002642f, 0.018769f, -0.004482f, -0.011559f, 0.043059f, -0.043224f, 0.042065f, -0.017147f, 0.000232f, 0.016564f, 0.013621f, 0.014938f, -0.000035f, -0.024543f, -0.015561f, 0.026789f, -0.021976f, -0.002914f, 0.026008f, -0.014236f, -0.014660f, -0.020687f, -0.037545f, -0.037967f, 0.027824f, -0.013948f, 0.010468f, -0.023957f, 0.004931f, -0.050657f, -0.008931f, 0.013636f, 0.032694f, -0.020867f, 0.007303f, 0.022045f, 0.035811f, -0.008780f, 0.029700f, -0.024200f, 0.094121f, -0.035155f, 0.032633f, 0.004009f, 0.018610f, - -0.017921f, 0.025180f, -0.010332f, 0.067194f, -0.011295f, 0.021036f, -0.047105f, 0.061704f, -0.032691f, -0.002155f, -0.009509f, 0.009294f, -0.018770f, 0.037232f, -0.042993f, 0.035023f, -0.039465f, 0.051000f, -0.053432f, 0.064579f, -0.043189f, -0.022604f, -0.027301f, -0.013018f, 0.001974f, -0.041778f, 0.026901f, -0.024577f, 0.023496f, 0.002404f, 0.032692f, 0.013022f, 0.022380f, 0.041087f, 0.016824f, -0.013616f, 0.010209f, 0.010426f, -0.006541f, 0.007806f, -0.013488f, 0.015202f, -0.007946f, 0.000608f, -0.013275f, 0.029141f, -0.029116f, 0.003234f, -0.003458f, 0.023784f, -0.005341f, 0.005404f, -0.006369f, 0.009976f, -0.014375f, 0.010989f, -0.012478f, -0.005286f, 0.020785f, 0.020469f, -0.007070f, -0.019017f, 0.011624f, 0.018266f, 0.017531f, -0.016290f, 0.013323f, -0.010961f, 0.009640f, 0.003612f, 0.002836f, -0.017427f, 0.018276f, -0.006232f, -0.024631f, 0.020340f, 0.016719f, -0.014360f, -0.004781f, -0.002109f, 0.003334f, -0.013761f, 0.019336f, -0.018185f, 0.005456f, -0.019940f, 0.017323f, -0.013926f, 0.014483f, -0.010818f, 0.018164f, -0.020616f, 0.022226f, -0.020206f, 0.009547f, -0.016431f, - 0.016340f, -0.019016f, 0.014753f, -0.011325f, 0.019331f, -0.021929f, 0.022680f, -0.019251f, -0.040948f, -0.084613f, -0.093099f, 0.079144f, 0.019993f, -0.024505f, -0.126165f, -0.050717f, 0.070274f, 0.014325f, 0.050750f, 0.056612f, -0.020457f, -0.035583f, 0.001657f, 0.013414f, 0.010385f, 0.009384f, -0.022347f, -0.016402f, -0.012431f, 0.000059f, 0.034090f, 0.018443f, -0.001704f, 0.007675f, -0.009891f, -0.016508f, -0.010602f, -0.008642f, 0.000550f, 0.010084f, -0.007832f, 0.013014f, 0.013588f, -0.046327f, -0.020666f, -0.020495f, 0.024653f, 0.017222f, -0.001649f, -0.021557f, -0.029261f, 0.025422f, 0.005509f, 0.017054f, 0.023603f, -0.042948f, -0.028709f, 0.007861f, 0.034495f, 0.017496f, -0.049007f, -0.030107f, -0.039839f, -0.018923f, 0.010104f, 0.009001f, -0.016485f, 0.018000f, -0.007514f, -0.017111f, 0.007529f, 0.016411f, -0.012375f, 0.003931f, -0.000625f, -0.015279f, -0.001554f, -0.005374f, -0.034866f, -0.035010f, -0.002321f, -0.037347f, -0.028206f, 0.001227f, 0.011170f, -0.008104f, 0.041078f, 0.030516f, 0.017178f, 0.001360f, -0.004132f, -0.018295f, 0.022671f, 0.011264f, 0.013150f, 0.012953f, - -0.011739f, -0.004781f, -0.001058f, 0.006645f, -0.021803f, -0.026220f, -0.003813f, 0.011687f, 0.001525f, 0.014769f, 0.010031f, -0.013607f, 0.004329f, 0.008191f, 0.005497f, -0.004284f, 0.014475f, -0.018126f, -0.011081f, 0.033769f, 0.019128f, -0.020531f, -0.015733f, -0.010365f, -0.018642f, 0.020590f, -0.000877f, 0.003115f, 0.009184f, 0.006265f, -0.000406f, -0.000570f, -0.013940f, 0.008985f, 0.005060f, 0.012275f, -0.006970f, -0.001756f, 0.007643f, 0.032850f, -0.081694f, -0.222703f, -0.084618f, 0.050787f, 0.107345f, 0.253070f, 0.148766f, 0.040512f, 0.053019f, -0.043771f, -0.081831f, -0.179134f, -0.120772f, -0.092573f, -0.030258f, 0.036810f, 0.098685f, 0.076724f, 0.095804f, 0.092582f, 0.062770f, -0.021070f, -0.072958f, -0.063143f, -0.064905f, -0.052139f, -0.075249f, 0.023212f, -0.047556f, 0.003585f, 0.035064f, 0.064804f, 0.036576f, 0.060668f, 0.079940f, 0.001593f, 0.023872f, 0.001870f, -0.001202f, -0.044548f, -0.005883f, -0.039627f, -0.077524f, -0.122324f, -0.068163f, -0.037244f, 0.009899f, 0.009427f, 0.072812f, 0.101141f, 0.097168f, 0.115736f, 0.016856f, 0.075995f, 0.030097f, -0.006724f, - -0.071123f, -0.069591f, -0.094600f, -0.124103f, -0.084674f, -0.096137f, -0.060937f, 0.000488f, 0.029855f, 0.069295f, 0.111757f, 0.164711f, 0.131898f, 0.119612f, 0.064716f, -0.024526f, -0.024355f, -0.064479f, -0.137437f, -0.105468f, -0.173680f, -0.114072f, -0.050588f, -0.038378f, 0.054288f, 0.104405f, 0.142894f, 0.100996f, 0.077233f, 0.047095f, 0.053532f, 0.047195f, -0.007524f, -0.053958f, -0.051613f, -0.081251f, -0.090099f, -0.071543f, -0.049063f, -0.045447f, -0.043368f, 0.020030f, 0.042222f, 0.074914f, 0.088687f, 0.072937f, 0.063921f, 0.036666f, 0.001252f, 0.002030f, 0.008233f, -0.053718f, -0.091469f, -0.037278f, -0.079892f, -0.090338f, -0.003094f, 0.022823f, 0.050412f, 0.052378f, 0.033309f, 0.055350f, 0.032000f, 0.044324f, -0.009366f, -0.000733f, -0.038774f, -0.023085f, -0.020633f, -0.025411f, -0.029408f, -0.023459f, 0.003831f, -0.009651f, -0.000028f, 0.027076f, 0.037195f, 0.023689f, 0.020349f, -0.004969f, -0.006645f, -0.000142f, -0.000684f, -0.011175f, -0.013588f, -0.002040f, -0.008126f, -0.007949f, -0.005068f, 0.000332f, -0.008575f, -0.002637f, 0.016111f, 0.005882f, 0.007048f, 0.010590f, - 0.007471f, 0.002264f, 0.000367f, -0.001858f, -0.002210f, -0.001332f, -0.000878f}, - {0.015042f, 0.009628f, 0.000264f, 0.000504f, 0.011849f, 0.002948f, -0.005897f, 0.004024f, 0.007887f, -0.004000f, -0.006537f, -0.023512f, 0.001258f, -0.007913f, 0.015702f, -0.007796f, 0.007877f, 0.006336f, -0.000811f, 0.005119f, 0.008694f, 0.002361f, 0.002040f, -0.004296f, -0.005151f, -0.004012f, -0.006492f, 0.005656f, 0.003396f, -0.003086f, 0.005126f, -0.003550f, -0.005182f, -0.006228f, -0.002978f, -0.004926f, 0.000440f, 0.000057f, -0.000891f, 0.010731f, -0.006195f, 0.008772f, -0.003150f, -0.002264f, 0.005935f, -0.003686f, 0.001877f, -0.003689f, 0.006508f, -0.001944f, -0.018336f, 0.005428f, 0.000682f, 0.002217f, 0.009282f, 0.004736f, 0.000710f, -0.002139f, -0.006031f, 0.015683f, -0.008270f, 0.006069f, 0.003252f, -0.006557f, 0.006675f, 0.002894f, -0.007632f, 0.006040f, -0.007871f, 0.000395f, -0.000759f, 0.006875f, 0.001206f, 0.007186f, -0.002729f, -0.016299f, -0.003403f, -0.003989f, -0.007640f, -0.006983f, -0.006768f, 0.005525f, 0.002546f, 0.001882f, 0.003485f, 0.003314f, 0.000762f, 0.001524f, -0.001815f, 0.001047f, -0.001313f, -0.000738f, -0.003869f, -0.000150f, -0.001219f, 0.002901f, - -0.000193f, -0.001054f, -0.000503f, 0.000211f, -0.001948f, 0.000594f, -0.000783f, 0.000998f, -0.000543f, 0.000089f, -0.002252f, -0.000415f, -0.002839f, -0.001944f, 0.028570f, -0.014160f, 0.001546f, -0.000897f, -0.000875f, 0.006467f, -0.005187f, -0.020586f, -0.018973f, 0.008867f, -0.006030f, -0.001801f, 0.004793f, 0.001002f, 0.004731f, 0.005278f, -0.009062f, 0.004820f, 0.003318f, -0.006443f, 0.007435f, 0.011213f, -0.007403f, -0.002476f, 0.000511f, -0.012219f, -0.005547f, 0.001162f, 0.014477f, -0.002409f, -0.000872f, -0.012176f, 0.007109f, -0.000063f, -0.010918f, -0.004713f, 0.003718f, -0.001721f, 0.002051f, -0.009468f, -0.000287f, 0.000564f, -0.003890f, 0.009960f, 0.002478f, 0.002175f, 0.009631f, -0.001089f, 0.012527f, -0.004313f, -0.016070f, 0.006384f, 0.006201f, -0.005718f, -0.002522f, -0.002047f, 0.001922f, 0.000631f, 0.004397f, -0.003752f, 0.002888f, -0.008817f, -0.000455f, 0.005650f, -0.008414f, -0.001067f, 0.004851f, 0.001475f, -0.004429f, 0.002789f, -0.003368f, 0.000820f, 0.008135f, 0.002865f, -0.011323f, 0.013603f, 0.005080f, 0.004959f, -0.001224f, 0.007799f, 0.008693f, -0.003868f, - -0.000593f, 0.001869f, 0.002200f, 0.002679f, 0.003643f, -0.000436f, 0.000259f, 0.002692f, -0.000437f, 0.000339f, 0.001683f, 0.004210f, -0.000725f, 0.004289f, -0.000203f, 0.000995f, 0.002185f, 0.000531f, -0.001296f, -0.000407f, 0.001484f, 0.001427f, -0.000288f, -0.001988f, -0.006987f, -0.016763f, -0.002070f, 0.001721f, 0.018343f, -0.007093f, 0.015710f, 0.003885f, -0.000617f, 0.000906f, 0.014046f, -0.003357f, -0.003944f, -0.004159f, 0.009875f, 0.020150f, 0.005216f, -0.014013f, -0.019002f, -0.026987f, 0.003446f, -0.007100f, -0.011399f, -0.006279f, -0.017630f, -0.000150f, -0.008227f, 0.001258f, 0.008343f, 0.008811f, -0.010089f, -0.009023f, -0.006449f, 0.001063f, -0.014974f, -0.001686f, 0.004545f, -0.006803f, -0.002540f, 0.001506f, 0.005918f, -0.008423f, 0.002099f, 0.019624f, -0.000901f, -0.001011f, -0.007339f, 0.008142f, -0.003737f, 0.000671f, 0.006169f, 0.008099f, 0.012022f, -0.001984f, 0.001701f, -0.003696f, -0.000249f, -0.002117f, 0.001515f, 0.018863f, -0.021095f, 0.000424f, 0.003996f, 0.011129f, -0.004735f, -0.005602f, -0.001324f, -0.005290f, 0.015019f, -0.008363f, -0.019893f, -0.001409f, - -0.005999f, -0.008328f, 0.004827f, -0.019637f, 0.007153f, -0.002130f, -0.005534f, 0.000365f, 0.013752f, -0.004131f, -0.005299f, -0.005368f, 0.006544f, -0.006250f, -0.001782f, 0.001146f, -0.000661f, 0.002367f, 0.000126f, 0.000914f, 0.004015f, 0.000317f, 0.000979f, -0.001042f, 0.003208f, 0.000714f, -0.000754f, -0.003737f, -0.002100f, -0.000289f, -0.002054f, 0.003826f, 0.002236f, -0.002188f, 0.002761f, 0.000290f, 0.000325f, -0.002028f, 0.000967f, -0.000886f, -0.000010f, -0.030749f, 0.011486f, -0.009617f, 0.012890f, -0.011583f, -0.001052f, 0.008926f, -0.017787f, -0.003052f, 0.005421f, -0.004838f, 0.025910f, -0.010869f, -0.003288f, -0.010368f, -0.008679f, 0.013320f, 0.014800f, 0.005738f, -0.017453f, -0.021048f, 0.019461f, 0.003274f, -0.019744f, 0.007381f, 0.000712f, 0.009348f, -0.005868f, 0.008921f, -0.011823f, 0.005769f, 0.019040f, 0.007890f, 0.008143f, 0.004343f, 0.000312f, -0.004835f, 0.003958f, 0.001505f, -0.013031f, 0.000238f, -0.004152f, -0.009533f, -0.009565f, -0.003598f, 0.007500f, -0.013688f, 0.001838f, -0.009894f, -0.001054f, -0.001488f, 0.004488f, 0.008164f, 0.017181f, 0.006113f, - -0.000142f, 0.007435f, -0.009249f, -0.013509f, -0.000288f, 0.003193f, 0.001359f, 0.016404f, -0.003774f, -0.001958f, -0.005285f, -0.002271f, 0.002273f, 0.007994f, -0.002213f, 0.003371f, -0.008177f, 0.013293f, -0.003535f, -0.004575f, -0.003119f, 0.004346f, -0.007252f, 0.000282f, 0.008125f, -0.000524f, -0.002418f, 0.001272f, 0.006437f, 0.005190f, -0.001086f, 0.004198f, -0.003594f, 0.002684f, -0.002205f, 0.001088f, 0.004581f, -0.001570f, 0.001912f, 0.002058f, -0.003260f, 0.003269f, 0.001872f, 0.000791f, -0.001449f, -0.002809f, -0.000779f, 0.003655f, 0.002285f, -0.001159f, 0.001344f, -0.000604f, 0.005761f, -0.000438f, -0.001731f, -0.015341f, -0.003556f, -0.009947f, -0.000989f, 0.020445f, 0.013079f, 0.009147f, -0.001522f, -0.017939f, 0.002538f, -0.011793f, -0.019015f, -0.006293f, 0.013738f, -0.010728f, -0.016858f, 0.004441f, 0.001480f, -0.008384f, 0.001835f, 0.009640f, 0.002677f, -0.022482f, -0.006350f, 0.014174f, 0.016693f, 0.008338f, -0.018626f, -0.006741f, 0.008531f, -0.003152f, -0.003987f, 0.001237f, 0.006275f, 0.001032f, 0.002337f, 0.019171f, 0.000065f, 0.011607f, 0.009004f, -0.000121f, - -0.008593f, -0.000186f, -0.005058f, 0.011440f, -0.006500f, -0.010864f, 0.000052f, 0.017933f, 0.001032f, 0.017815f, 0.009615f, 0.001750f, 0.011521f, -0.001914f, 0.024726f, 0.002017f, 0.012245f, 0.013945f, 0.001314f, -0.011488f, -0.001741f, -0.013749f, 0.007055f, -0.009847f, -0.005511f, -0.009078f, -0.005978f, -0.004346f, 0.004544f, 0.001550f, 0.006828f, -0.000262f, -0.007846f, -0.006829f, 0.002580f, 0.012742f, -0.003749f, 0.003166f, -0.013637f, 0.004345f, 0.011819f, 0.018134f, -0.006222f, -0.001332f, 0.003017f, -0.006214f, -0.000455f, 0.005996f, -0.001817f, 0.011002f, 0.000739f, 0.002515f, 0.000289f, 0.000536f, 0.004066f, -0.002666f, -0.001728f, -0.001417f, -0.000814f, 0.001121f, 0.001372f, -0.002059f, 0.001808f, -0.000622f, -0.002184f, -0.002663f, 0.000914f, -0.002529f, -0.001663f, -0.003173f, 0.001553f, 0.002206f, -0.000456f, 0.006199f, -0.004015f, 0.001094f, -0.000436f, -0.003513f, 0.005898f, -0.001703f, -0.000838f, 0.018626f, -0.027849f, -0.005138f, 0.023315f, -0.011587f, 0.004260f, -0.018008f, 0.007924f, 0.032796f, -0.004441f, 0.001720f, -0.001389f, -0.023196f, 0.001871f, -0.001494f, - 0.034813f, -0.011004f, -0.001704f, 0.015199f, -0.009595f, 0.021557f, -0.014547f, -0.002196f, -0.021994f, 0.024847f, 0.000345f, -0.009811f, 0.000319f, 0.009086f, -0.011560f, 0.017264f, -0.001835f, 0.015296f, -0.000105f, 0.007999f, -0.024036f, -0.015502f, -0.011210f, -0.003635f, 0.014500f, -0.021820f, 0.011656f, 0.008967f, 0.003049f, -0.009056f, -0.013127f, 0.029922f, 0.005963f, -0.003435f, 0.011634f, -0.010624f, 0.006314f, -0.014132f, -0.013827f, -0.005810f, -0.009278f, 0.032312f, 0.009679f, -0.006473f, -0.009599f, -0.012388f, 0.010190f, 0.008355f, 0.003078f, -0.011433f, -0.001371f, -0.004663f, 0.013845f, 0.001198f, 0.011204f, -0.026180f, 0.014233f, -0.002346f, 0.000725f, -0.002964f, 0.004621f, -0.011591f, -0.005336f, -0.018179f, -0.005904f, 0.006530f, 0.011083f, 0.011622f, 0.004352f, 0.004194f, 0.002759f, -0.006550f, 0.003898f, 0.002593f, -0.000448f, -0.004417f, -0.007201f, 0.003794f, 0.003646f, -0.005601f, 0.002889f, 0.000320f, -0.004527f, 0.002923f, 0.000868f, -0.002026f, -0.001044f, 0.000215f, 0.000924f, -0.003437f, 0.002375f, 0.001218f, -0.005215f, -0.001302f, -0.002659f, 0.000354f, - 0.003740f, 0.002465f, -0.000516f, 0.000082f, -0.002399f, 0.000286f, -0.002211f, 0.011789f, 0.005802f, 0.009715f, 0.002871f, 0.000105f, -0.003705f, -0.014925f, -0.004650f, -0.009632f, 0.005857f, -0.000575f, 0.022409f, -0.018864f, -0.024294f, -0.006166f, 0.007528f, -0.007609f, -0.005910f, 0.019046f, 0.003789f, -0.010592f, -0.012198f, -0.012649f, 0.020825f, -0.010578f, 0.014057f, -0.006867f, 0.015384f, -0.015465f, 0.003334f, 0.023632f, 0.008054f, -0.032366f, 0.007373f, 0.000650f, -0.004201f, -0.002955f, 0.003248f, -0.003941f, 0.003067f, -0.005355f, 0.002517f, -0.001397f, -0.014504f, 0.014369f, 0.014756f, -0.004509f, 0.016354f, -0.014104f, -0.002503f, -0.004127f, -0.006751f, 0.017993f, -0.013091f, -0.023152f, -0.013001f, 0.004249f, -0.018887f, -0.017615f, -0.008838f, -0.006008f, -0.012126f, -0.001094f, 0.015352f, 0.016164f, 0.002411f, 0.017433f, 0.005402f, 0.002263f, 0.013203f, -0.014294f, -0.002573f, -0.000084f, -0.011748f, -0.000204f, -0.011383f, 0.013594f, -0.004007f, -0.002586f, 0.011304f, -0.002175f, -0.003656f, -0.002441f, 0.013511f, -0.001749f, 0.004669f, -0.013313f, -0.004764f, 0.007310f, - -0.008653f, 0.000542f, 0.000168f, 0.001382f, -0.006611f, -0.004606f, -0.003512f, 0.000127f, -0.003654f, -0.004349f, 0.001293f, -0.000738f, -0.003906f, -0.001768f, 0.000431f, -0.000492f, -0.001264f, -0.001387f, -0.002276f, 0.000619f, -0.007170f, -0.005027f, -0.004851f, -0.004821f, -0.000007f, -0.000351f, -0.001752f, 0.001646f, 0.036000f, -0.017780f, -0.017115f, 0.011591f, 0.029258f, 0.005687f, 0.026351f, 0.015039f, 0.023932f, 0.010602f, -0.004477f, -0.010869f, 0.008571f, -0.017891f, -0.013609f, 0.019970f, 0.016705f, 0.041733f, -0.001076f, 0.005805f, -0.015459f, 0.016118f, 0.007303f, -0.018604f, -0.004410f, 0.023635f, -0.000077f, -0.026045f, -0.010519f, -0.014700f, -0.004987f, 0.014525f, 0.013345f, -0.009880f, -0.004787f, 0.018118f, -0.017555f, 0.008062f, 0.015273f, 0.018246f, -0.009735f, 0.015706f, -0.006629f, -0.023723f, 0.008390f, 0.021774f, -0.005811f, 0.006287f, 0.005333f, -0.007381f, 0.002679f, 0.006525f, -0.006748f, 0.002429f, 0.017657f, -0.010383f, -0.005463f, 0.016275f, -0.003466f, -0.003288f, -0.026960f, -0.009552f, -0.016266f, -0.026781f, -0.018006f, 0.013445f, -0.008745f, -0.011449f, - 0.023241f, 0.023202f, -0.005819f, 0.024954f, 0.010049f, 0.016394f, -0.004557f, -0.012905f, 0.010838f, -0.013383f, -0.026680f, -0.016104f, -0.006816f, 0.013188f, 0.006143f, 0.022108f, 0.003967f, -0.004771f, -0.003518f, -0.000015f, 0.003904f, -0.006880f, 0.000514f, -0.004001f, -0.000508f, 0.003875f, -0.000598f, 0.000615f, 0.007230f, -0.002607f, -0.001217f, 0.007100f, -0.005148f, -0.002688f, -0.003381f, 0.002089f, -0.003778f, 0.002580f, 0.001677f, 0.001093f, 0.003832f, 0.004765f, 0.002266f, 0.008613f, 0.001153f, 0.005879f, 0.002109f, 0.004411f, 0.005198f, -0.004500f, 0.004161f, 0.004326f, -0.003034f, -0.001007f, -0.000334f, -0.006287f, 0.001922f, -0.018175f, -0.019443f, 0.026336f, -0.004386f, 0.060164f, -0.024777f, -0.011651f, -0.001380f, 0.014681f, -0.008386f, -0.008195f, -0.024783f, -0.028680f, 0.012958f, 0.002490f, 0.039599f, 0.012827f, -0.004034f, -0.004521f, 0.026308f, 0.026848f, -0.022175f, 0.016114f, -0.021181f, 0.005570f, -0.009115f, -0.010927f, -0.006491f, 0.004507f, -0.003433f, 0.013941f, 0.007006f, 0.015600f, -0.001928f, -0.007454f, -0.014634f, -0.002844f, 0.017075f, 0.001519f, - -0.022639f, -0.002860f, 0.005537f, -0.009687f, 0.017976f, 0.015158f, 0.003182f, 0.005267f, -0.049455f, -0.018964f, 0.017322f, -0.001169f, 0.027805f, 0.007742f, 0.031339f, -0.003527f, -0.016902f, 0.016706f, -0.009434f, 0.011392f, 0.002072f, 0.045598f, 0.037760f, 0.004441f, 0.010718f, -0.006229f, 0.015047f, 0.015897f, 0.017254f, 0.018584f, 0.030303f, -0.000569f, 0.005487f, -0.011612f, -0.010045f, 0.009459f, -0.014085f, -0.035099f, -0.025952f, -0.000628f, 0.021859f, -0.011018f, -0.019773f, -0.011419f, -0.010629f, -0.001209f, -0.023615f, -0.000975f, 0.004477f, -0.000184f, -0.003112f, -0.002356f, 0.002540f, 0.005090f, -0.000560f, 0.003829f, -0.017604f, -0.010879f, -0.005560f, -0.012576f, 0.001204f, -0.004564f, -0.007215f, -0.004951f, -0.002883f, 0.007128f, 0.003029f, -0.006760f, 0.002303f, 0.015807f, 0.008261f, -0.003388f, -0.005541f, -0.007257f, -0.004086f, -0.005860f, -0.012278f, 0.004508f, -0.004663f, -0.001043f, 0.009119f, 0.002895f, -0.001657f, 0.001685f, -0.052257f, 0.041185f, -0.001213f, 0.004660f, -0.014497f, 0.023079f, -0.049617f, -0.031814f, -0.010052f, -0.012762f, -0.001231f, -0.044487f, - 0.008673f, 0.000885f, -0.001225f, -0.020330f, -0.020695f, 0.008383f, 0.028302f, 0.004364f, -0.037842f, -0.008220f, -0.030991f, 0.024434f, 0.015755f, 0.001206f, -0.013738f, -0.006507f, -0.007028f, 0.020133f, -0.002903f, -0.000429f, -0.004394f, -0.027415f, 0.014209f, 0.019184f, -0.011511f, -0.006152f, 0.014912f, -0.029837f, -0.021756f, -0.032915f, -0.011173f, 0.008259f, -0.021007f, -0.010037f, -0.000915f, -0.034083f, 0.010391f, 0.021002f, 0.037183f, 0.005343f, -0.003713f, 0.002272f, -0.024487f, -0.019202f, 0.028465f, -0.002044f, -0.010845f, -0.006742f, -0.043624f, -0.023410f, 0.008520f, -0.009224f, -0.005100f, -0.003412f, 0.028519f, -0.004960f, -0.027128f, 0.002165f, 0.021116f, -0.000554f, -0.013311f, -0.000272f, 0.001450f, -0.011214f, -0.019024f, 0.014932f, -0.034970f, -0.017311f, -0.000267f, 0.016894f, -0.021375f, 0.013512f, 0.008950f, 0.012311f, 0.013118f, -0.013428f, -0.003397f, 0.016099f, 0.003079f, -0.009845f, 0.009237f, 0.013325f, -0.012457f, 0.004631f, 0.011954f, 0.011290f, 0.017735f, 0.001199f, -0.005417f, -0.003027f, 0.002913f, 0.000246f, 0.007801f, 0.006575f, 0.000610f, -0.001607f, - -0.005655f, -0.001919f, 0.003913f, 0.007929f, -0.013097f, 0.001708f, -0.002476f, 0.005447f, 0.012665f, 0.000649f, 0.008877f, -0.004702f, 0.005906f, 0.007264f, 0.010689f, 0.008344f, 0.010435f, -0.000739f, 0.006007f, -0.001884f, 0.005106f, 0.027683f, 0.025424f, 0.009250f, 0.043056f, -0.019197f, -0.008937f, 0.007012f, -0.011230f, -0.003277f, 0.014090f, 0.046135f, -0.007397f, 0.009409f, -0.000246f, -0.002787f, -0.000719f, 0.050880f, -0.024588f, 0.026429f, -0.000227f, -0.033278f, 0.011095f, -0.033010f, -0.020161f, 0.019168f, -0.017371f, 0.013583f, 0.000779f, 0.001897f, 0.022830f, 0.018317f, -0.027334f, -0.030972f, -0.023273f, -0.007742f, 0.008936f, 0.009043f, 0.003409f, 0.006229f, -0.037241f, 0.005798f, -0.019966f, -0.046895f, 0.032058f, -0.009161f, 0.030151f, 0.032246f, 0.001924f, 0.012103f, -0.017105f, -0.020830f, -0.036930f, 0.008589f, 0.033987f, 0.006073f, -0.014819f, 0.002097f, -0.007422f, 0.005288f, -0.019851f, -0.016217f, -0.019820f, 0.003526f, -0.002333f, -0.006407f, 0.021940f, 0.019745f, 0.011922f, 0.031926f, 0.003677f, -0.033396f, 0.043370f, -0.031516f, -0.009631f, -0.007832f, - -0.008260f, 0.036355f, -0.005686f, -0.051834f, 0.044291f, -0.017159f, -0.010453f, 0.012208f, 0.011331f, 0.034146f, 0.021867f, 0.014355f, 0.016770f, 0.015150f, 0.011512f, 0.000758f, 0.014436f, 0.017303f, 0.004709f, 0.000341f, 0.018568f, -0.003161f, 0.002293f, -0.016814f, -0.003911f, -0.005280f, -0.008636f, 0.001528f, -0.001201f, 0.011223f, 0.008256f, 0.003419f, -0.001207f, 0.005469f, 0.002488f, 0.004019f, 0.007681f, -0.002195f, -0.002680f, 0.001691f, -0.002631f, 0.005699f, 0.002810f, 0.002727f, 0.004637f, 0.002674f, 0.017225f, 0.012559f, 0.003771f, 0.039436f, 0.044571f, 0.010417f, -0.083769f, 0.003040f, 0.023718f, -0.027643f, 0.016897f, 0.033549f, 0.001703f, 0.009137f, 0.021226f, 0.016305f, 0.006384f, 0.030158f, 0.006913f, -0.004142f, 0.056682f, 0.021098f, 0.007500f, 0.024508f, -0.018591f, 0.030056f, -0.020910f, -0.001791f, -0.002243f, -0.006893f, -0.030896f, 0.010449f, -0.021810f, 0.040367f, -0.003435f, -0.007887f, 0.059439f, 0.007958f, 0.008845f, 0.019765f, 0.002420f, 0.011408f, -0.013106f, -0.025796f, -0.002739f, 0.017469f, -0.030383f, 0.035534f, 0.032261f, 0.023685f, - 0.006420f, 0.014114f, -0.020914f, -0.021934f, -0.034607f, -0.015363f, -0.018562f, -0.017889f, 0.008534f, -0.003358f, -0.033868f, -0.015109f, 0.030264f, -0.000488f, -0.027886f, 0.015982f, -0.001293f, -0.019151f, -0.045429f, 0.003209f, -0.068988f, 0.040290f, -0.023300f, 0.036648f, 0.002062f, 0.010238f, 0.001490f, -0.013588f, 0.018721f, 0.061961f, 0.005989f, 0.017677f, -0.010526f, -0.048255f, 0.004590f, -0.005189f, 0.035641f, 0.020582f, -0.007993f, -0.001686f, -0.006984f, -0.003795f, 0.012347f, -0.013795f, 0.011619f, -0.001606f, -0.011795f, -0.012209f, 0.013400f, -0.014958f, -0.014387f, -0.020745f, -0.003825f, -0.014910f, 0.005074f, 0.013084f, 0.001277f, -0.003757f, -0.009288f, 0.019095f, -0.017482f, 0.004727f, 0.002740f, 0.001630f, -0.010069f, 0.007616f, 0.019219f, -0.000808f, -0.008871f, -0.002258f, 0.017601f, 0.017800f, -0.013757f, 0.017044f, -0.000725f, -0.004423f, 0.003238f, -0.001072f, 0.019389f, 0.004912f, 0.023097f, 0.017182f, 0.045651f, -0.062795f, 0.024741f, -0.036784f, 0.031322f, -0.015623f, -0.026405f, -0.007585f, -0.030409f, -0.012796f, -0.006822f, 0.010948f, 0.013945f, -0.008889f, - 0.043828f, -0.002091f, -0.007610f, -0.005919f, -0.039804f, -0.004429f, 0.000105f, -0.033476f, 0.010664f, -0.028554f, -0.036019f, -0.011674f, 0.021585f, -0.059582f, -0.040487f, -0.027059f, 0.002995f, -0.041793f, -0.035530f, -0.028775f, -0.014504f, -0.011703f, -0.005557f, -0.028269f, 0.030081f, 0.005108f, -0.003017f, -0.021119f, -0.021735f, 0.040716f, -0.035570f, -0.024341f, 0.010630f, 0.010800f, 0.014570f, -0.020689f, -0.028758f, -0.012183f, -0.005412f, 0.013274f, -0.020680f, -0.008341f, -0.008517f, -0.024666f, -0.042017f, -0.053073f, 0.050052f, -0.054991f, -0.003143f, 0.003826f, -0.009674f, -0.010219f, -0.049199f, 0.018960f, -0.011867f, -0.051574f, -0.001268f, -0.011369f, 0.048398f, 0.011954f, 0.034418f, 0.032786f, -0.009871f, 0.012811f, -0.005486f, -0.009416f, 0.024190f, -0.006173f, 0.013865f, -0.018645f, 0.001369f, -0.018776f, 0.015918f, 0.012482f, 0.002204f, 0.011425f, -0.004973f, -0.001803f, 0.012064f, 0.005785f, -0.011937f, 0.008767f, 0.019724f, -0.003064f, 0.004502f, -0.010778f, -0.025402f, -0.002671f, -0.002290f, -0.000847f, -0.017648f, -0.003816f, 0.002762f, -0.002539f, -0.009428f, 0.012027f, - -0.002250f, -0.006766f, -0.020551f, -0.020724f, 0.000268f, 0.011429f, 0.006680f, 0.004451f, -0.001418f, 0.015001f, 0.016944f, -0.007551f, 0.003643f, 0.004187f, -0.001139f, 0.005148f, -0.055872f, 0.064638f, 0.010236f, 0.006519f, -0.011208f, 0.032818f, 0.000405f, 0.054038f, -0.014736f, 0.037068f, 0.019985f, -0.053304f, 0.023104f, 0.008731f, 0.025306f, -0.004374f, -0.014193f, -0.021247f, -0.007810f, 0.026008f, 0.057292f, 0.006032f, -0.008367f, -0.036278f, 0.013691f, -0.039237f, -0.006195f, 0.039529f, -0.035738f, 0.000018f, 0.002525f, -0.006213f, -0.013481f, -0.015250f, 0.063505f, -0.013762f, -0.015581f, -0.007746f, 0.014415f, 0.021248f, 0.007999f, 0.001000f, -0.012922f, -0.000242f, 0.009520f, 0.038518f, -0.008838f, 0.055128f, 0.032275f, 0.016385f, -0.013250f, 0.048042f, 0.054685f, -0.004562f, -0.014461f, -0.002926f, -0.017748f, 0.005379f, -0.017572f, 0.027512f, 0.009426f, 0.039663f, 0.030731f, -0.048717f, -0.054781f, 0.065679f, 0.048895f, 0.007692f, -0.009255f, -0.026149f, -0.036059f, -0.014189f, 0.037073f, -0.034910f, -0.037635f, -0.005384f, -0.010107f, -0.060375f, -0.013360f, 0.013312f, - -0.023280f, 0.003153f, -0.000063f, 0.003118f, 0.005001f, 0.009947f, -0.017674f, -0.011041f, -0.018161f, -0.006703f, 0.000042f, 0.002618f, -0.009843f, -0.004836f, -0.001625f, -0.029853f, -0.009760f, -0.014271f, -0.006397f, -0.000898f, 0.002797f, 0.001125f, 0.005157f, -0.002030f, 0.001285f, -0.015779f, 0.009202f, -0.013607f, -0.015369f, 0.010952f, 0.004971f, -0.028047f, -0.002811f, -0.008876f, 0.014008f, 0.026452f, 0.000818f, -0.022835f, 0.018458f, -0.005340f, 0.005025f, 0.006203f, -0.007087f, -0.005486f, 0.001953f, -0.012305f, -0.015692f, 0.028580f, -0.023483f, -0.007631f, -0.004970f, 0.005623f, 0.000866f, -0.035274f, -0.102153f, 0.051137f, -0.049140f, 0.019989f, 0.072844f, 0.011106f, -0.030569f, 0.021010f, 0.025370f, -0.010624f, -0.023131f, -0.004817f, -0.050333f, 0.016592f, -0.052314f, -0.031773f, 0.020967f, 0.002150f, 0.009027f, -0.047263f, -0.009645f, -0.034121f, -0.028986f, -0.042098f, -0.014716f, 0.014401f, -0.025093f, -0.025453f, 0.024697f, 0.003404f, -0.002106f, 0.007851f, -0.048437f, -0.002993f, -0.037678f, 0.032222f, 0.008859f, -0.092156f, 0.023175f, 0.049368f, -0.010588f, 0.029444f, - 0.024754f, 0.016717f, 0.013378f, 0.047148f, 0.036938f, 0.001346f, -0.033791f, -0.007155f, 0.037332f, 0.024235f, -0.031324f, 0.002233f, -0.036585f, -0.011796f, 0.002421f, 0.026487f, 0.035444f, -0.065198f, -0.051590f, -0.028871f, 0.005438f, -0.019399f, -0.007219f, 0.060614f, 0.009923f, 0.014333f, 0.047169f, -0.019190f, 0.009688f, -0.012075f, 0.048262f, -0.024626f, 0.001916f, 0.004791f, 0.035736f, -0.010000f, -0.003862f, 0.013075f, 0.014628f, -0.001893f, 0.007108f, 0.023352f, 0.000866f, -0.000763f, -0.001027f, 0.022737f, -0.011608f, -0.007404f, 0.005403f, 0.009821f, 0.006608f, 0.002972f, 0.010653f, -0.005025f, -0.000044f, -0.010456f, -0.000388f, -0.007789f, -0.001249f, -0.010714f, 0.017353f, -0.013207f, -0.019463f, 0.018218f, 0.011864f, 0.012529f, -0.013782f, -0.017618f, -0.000141f, -0.031565f, -0.008785f, -0.016293f, -0.016664f, 0.006361f, -0.000342f, -0.016872f, 0.005483f, 0.006793f, -0.002042f, -0.010008f, -0.009803f, 0.007260f, 0.004346f, 0.014968f, 0.033763f, 0.032628f, -0.057095f, 0.011853f, -0.012348f, -0.015081f, -0.013313f, 0.038171f, 0.020262f, -0.027994f, -0.015975f, 0.029102f, - -0.052503f, 0.002882f, 0.019040f, 0.029152f, -0.006270f, 0.006374f, -0.061251f, -0.000332f, -0.027150f, 0.020372f, 0.007499f, 0.033869f, -0.053861f, -0.027266f, -0.007853f, 0.006532f, -0.004651f, 0.010403f, 0.003838f, 0.029254f, 0.055340f, -0.035158f, -0.045275f, 0.011811f, -0.047178f, -0.014027f, 0.019759f, -0.034414f, -0.033310f, 0.002661f, 0.020539f, 0.028689f, 0.020461f, -0.012997f, -0.002876f, -0.060194f, -0.040475f, 0.053200f, -0.036980f, 0.071855f, -0.030488f, 0.014523f, 0.010583f, -0.000703f, -0.052857f, 0.066147f, -0.030819f, -0.006423f, -0.011858f, 0.025735f, 0.049994f, -0.050650f, -0.028645f, 0.059125f, -0.043792f, -0.000250f, -0.016472f, 0.011945f, 0.068709f, 0.000213f, -0.004944f, -0.042631f, 0.052596f, -0.017285f, 0.013770f, 0.017169f, -0.033062f, -0.040214f, 0.004053f, 0.022896f, -0.011835f, 0.011638f, -0.094808f, -0.044488f, -0.013429f, -0.048630f, -0.023700f, 0.007888f, 0.031657f, -0.006839f, -0.008447f, -0.024973f, 0.000860f, -0.002577f, -0.017883f, -0.006463f, 0.011340f, 0.000707f, 0.015131f, 0.006759f, 0.014364f, -0.018903f, -0.002398f, -0.004152f, 0.019909f, 0.015300f, - -0.011485f, 0.035780f, 0.013588f, -0.014761f, 0.022168f, 0.005730f, -0.001826f, -0.011679f, 0.008620f, -0.008529f, -0.007380f, 0.015822f, 0.001754f, -0.007372f, -0.005941f, 0.013202f, -0.003323f, 0.011900f, -0.002341f, 0.021886f, 0.005082f, 0.002908f, 0.003237f, 0.033071f, -0.037062f, 0.010722f, 0.031280f, 0.030910f, 0.069784f, -0.043871f, 0.064133f, -0.010959f, -0.041472f, -0.040619f, 0.010832f, 0.026936f, -0.018151f, -0.008259f, -0.028438f, -0.011570f, 0.054405f, -0.037879f, -0.003200f, 0.043741f, -0.013707f, 0.026212f, -0.017006f, -0.008017f, 0.046454f, -0.001371f, 0.002711f, 0.044738f, 0.031194f, 0.011142f, -0.005113f, 0.037818f, 0.051652f, -0.052019f, 0.048568f, -0.045927f, 0.024802f, -0.033093f, 0.007350f, 0.039960f, 0.013974f, -0.090014f, 0.040448f, 0.025835f, 0.000097f, 0.045957f, -0.071231f, -0.013631f, 0.049116f, 0.041661f, 0.007343f, 0.065355f, -0.034248f, 0.000947f, -0.007914f, -0.009883f, 0.028376f, 0.011732f, 0.049253f, 0.040859f, -0.030079f, 0.027163f, -0.056209f, -0.017388f, 0.004978f, -0.002727f, -0.003948f, -0.009061f, -0.088209f, -0.048782f, -0.068020f, -0.046359f, - 0.051388f, -0.031537f, -0.007205f, 0.005943f, 0.083850f, -0.019828f, -0.028884f, 0.067035f, 0.041470f, -0.001846f, 0.054671f, 0.008314f, 0.010764f, -0.025248f, 0.000611f, -0.021111f, -0.021875f, -0.011468f, 0.018089f, -0.021354f, -0.010667f, 0.010427f, 0.004532f, 0.016819f, -0.006170f, -0.002787f, 0.022214f, 0.012639f, 0.001859f, -0.017127f, -0.013266f, -0.002118f, -0.004742f, 0.012905f, 0.022200f, -0.001606f, 0.004452f, 0.004996f, -0.008133f, 0.053812f, 0.017264f, 0.003810f, 0.002811f, -0.017621f, 0.014974f, -0.031480f, -0.001663f, 0.027067f, -0.001207f, -0.007215f, 0.020353f, 0.011203f, 0.006736f, -0.000530f, -0.016815f, 0.011608f, 0.013477f, 0.004139f, -0.022240f, 0.021447f, 0.055045f, -0.030399f, 0.021235f, 0.027170f, -0.039688f, 0.005082f, -0.048809f, 0.018552f, -0.005232f, -0.026015f, 0.038633f, 0.001128f, 0.060272f, -0.003708f, -0.045153f, 0.076308f, -0.013745f, 0.007607f, 0.010506f, -0.071637f, 0.021536f, 0.061648f, 0.021958f, -0.026814f, -0.046933f, 0.004875f, 0.011408f, 0.052720f, 0.033973f, -0.017195f, -0.010289f, -0.041084f, 0.000361f, 0.059655f, -0.081120f, 0.024609f, - 0.056658f, -0.051002f, 0.018685f, 0.005298f, 0.019622f, 0.059679f, 0.019896f, 0.023036f, -0.011084f, -0.058595f, 0.060641f, -0.011260f, -0.031051f, 0.127229f, 0.062567f, 0.032465f, 0.005538f, 0.002893f, -0.059901f, -0.049084f, -0.022298f, 0.037410f, -0.001300f, -0.034728f, -0.024555f, 0.047189f, -0.028851f, 0.032507f, 0.018407f, -0.023289f, 0.034682f, 0.015911f, -0.050434f, -0.025162f, -0.029604f, 0.008313f, 0.031509f, -0.063029f, 0.020689f, -0.064583f, -0.081659f, -0.051312f, 0.078241f, -0.027056f, 0.016139f, -0.018295f, -0.027236f, -0.003898f, -0.032458f, -0.022442f, -0.017309f, 0.004003f, -0.031121f, 0.003666f, 0.018139f, -0.000017f, -0.027411f, -0.020303f, 0.009493f, 0.003100f, 0.034692f, 0.004670f, -0.040092f, -0.015540f, -0.023019f, 0.032863f, -0.006778f, -0.013285f, -0.031765f, -0.000401f, 0.018905f, 0.008681f, 0.021549f, -0.010973f, -0.003682f, 0.006411f, 0.021939f, 0.014062f, -0.000747f, -0.012515f, 0.016292f, -0.015326f, -0.001744f, 0.008914f, -0.014429f, -0.000380f, 0.024524f, -0.000801f, 0.004422f, -0.027142f, -0.019260f, -0.020655f, 0.012118f, -0.021976f, 0.078078f, 0.130083f, - -0.021540f, -0.004224f, -0.106436f, -0.035661f, -0.078216f, -0.052138f, 0.072779f, 0.005248f, 0.019899f, -0.060234f, 0.019730f, -0.052881f, -0.119059f, 0.017475f, 0.057477f, -0.004637f, 0.007610f, 0.061763f, -0.081552f, 0.093414f, 0.046731f, 0.029219f, -0.046033f, 0.062832f, 0.121217f, -0.023971f, 0.037637f, 0.091965f, 0.077828f, 0.136991f, 0.030003f, 0.049236f, 0.037517f, 0.033418f, 0.117867f, -0.030508f, -0.013682f, 0.043434f, 0.026051f, -0.012682f, 0.064987f, 0.003996f, 0.013952f, -0.038272f, -0.104674f, 0.004181f, 0.070435f, 0.010776f, 0.042826f, -0.075691f, 0.005115f, -0.100682f, 0.000612f, -0.108209f, 0.007897f, 0.076094f, -0.009182f, -0.032179f, -0.102818f, 0.135398f, 0.025068f, 0.009196f, 0.140607f, -0.001565f, -0.031513f, -0.023528f, 0.007760f, 0.028153f, -0.007203f, 0.000624f, -0.010566f, -0.073961f, 0.044473f, 0.017182f, -0.045868f, -0.028340f, 0.037257f, -0.044639f, -0.076894f, -0.037690f, 0.017431f, 0.074193f, -0.076973f, 0.061784f, -0.002508f, 0.033006f, -0.013028f, 0.026952f, -0.018080f, -0.002637f, 0.007206f, 0.007620f, 0.025341f, 0.022607f, 0.005135f, 0.047408f, - -0.002010f, 0.019496f, 0.025387f, 0.014576f, 0.011347f, 0.011320f, 0.041319f, 0.030456f, 0.015125f, -0.016001f, -0.006329f, 0.035487f, -0.046907f, 0.018203f, -0.027870f, 0.006749f, -0.010193f, 0.031998f, 0.037261f, 0.075017f, 0.042251f, 0.070759f, 0.040868f, 0.014813f, 0.074670f, 0.077117f, 0.073730f, 0.042008f, -0.012403f, 0.043959f, 0.049011f, 0.030000f, 0.058940f, 0.044209f, 0.000183f, 0.013328f, 0.010184f, 0.009600f, 0.017366f, 0.012429f, -0.014950f, -0.015226f, 0.000801f, 0.012267f, -0.003589f, -0.040803f, -0.135672f, 0.006848f, 0.184060f, 0.027010f, -0.037124f, -0.035232f, -0.083323f, -0.054441f, 0.002900f, 0.114977f, 0.020634f, -0.076370f, -0.005066f, 0.031495f, 0.008001f, 0.002529f, -0.007056f, 0.020180f, -0.054229f, -0.020323f, 0.028525f, 0.063774f, 0.064694f, -0.060319f, -0.022657f, 0.004812f, 0.009188f, 0.016339f, -0.068941f, 0.006892f, 0.012046f, -0.018161f, 0.050776f, -0.000364f, 0.058505f, 0.087134f, 0.042398f, 0.018170f, 0.038670f, -0.049218f, 0.045679f, -0.039725f, 0.067949f, 0.118712f, 0.039899f, -0.063902f, -0.054370f, 0.053892f, 0.020532f, 0.101216f, - 0.076916f, 0.023380f, -0.017981f, -0.022498f, 0.004122f, 0.005435f, -0.034129f, 0.039467f, 0.035472f, 0.006722f, 0.092418f, 0.062697f, -0.007255f, 0.044754f, 0.050843f, 0.023351f, 0.050877f, 0.002296f, -0.085593f, -0.010586f, -0.019647f, -0.019924f, 0.100068f, 0.045651f, 0.017364f, 0.078702f, 0.047884f, 0.050214f, 0.062870f, 0.021374f, -0.061328f, -0.031023f, -0.000034f, -0.001004f, -0.020665f, -0.018304f, -0.036559f, 0.023779f, 0.016829f, 0.036996f, -0.015742f, 0.041265f, 0.013168f, 0.042720f, 0.030181f, -0.009361f, -0.020097f, 0.006477f, 0.013214f, 0.000481f, 0.006633f, 0.031299f, 0.004798f, 0.048923f, 0.067232f, 0.018817f, -0.003670f, 0.004870f, 0.048888f, 0.010895f, -0.012994f, -0.012435f, 0.039093f, -0.001886f, -0.009592f, -0.007169f, 0.014265f, 0.026405f, 0.054626f, -0.027670f, 0.006306f, -0.017932f, 0.006456f, 0.002128f, 0.045080f, -0.023003f, 0.023396f, 0.026027f, 0.017755f, -0.019505f, 0.008312f, 0.030276f, 0.006174f, 0.000889f, 0.031674f, 0.003998f, 0.020113f, 0.011053f, 0.005455f, -0.005677f, 0.007871f, -0.004125f, 0.009342f, 0.002075f, 0.009854f, 0.001679f, - 0.017073f, 0.003960f, 0.008687f, 0.002954f, 0.013350f, 0.002564f, 0.013962f, 0.002972f, -0.000980f, -0.027114f, -0.129342f, -0.028023f, 0.072057f, 0.038915f, 0.157756f, 0.008537f, -0.023004f, -0.070842f, -0.138668f, -0.152268f, -0.025469f, 0.065514f, 0.073595f, 0.047170f, -0.077012f, -0.101651f, -0.000872f, -0.012523f, 0.040376f, 0.105887f, 0.053773f, -0.010023f, -0.063729f, -0.086277f, -0.054386f, 0.003466f, -0.053295f, 0.020624f, -0.044653f, -0.021994f, 0.070378f, 0.058381f, 0.051706f, 0.020278f, -0.072892f, -0.020273f, -0.069761f, -0.053428f, -0.028280f, 0.040968f, -0.008108f, 0.043518f, 0.106748f, 0.111789f, -0.047074f, 0.012875f, -0.083001f, -0.056416f, -0.039913f, -0.007136f, 0.014866f, 0.064860f, 0.068587f, 0.095387f, 0.067182f, 0.024387f, -0.047842f, -0.043446f, -0.011087f, 0.030707f, -0.078564f, 0.005737f, 0.090322f, 0.072675f, -0.019787f, 0.098473f, 0.087046f, 0.049643f, 0.090975f, -0.173873f, 0.040508f, -0.049359f, -0.054541f, 0.029955f, -0.029715f, -0.002393f, 0.174491f, 0.148575f, 0.051620f, -0.045734f, -0.005129f, -0.069659f, -0.014810f, -0.093711f, -0.034458f, -0.015634f, - 0.035037f, 0.115095f, 0.059005f, 0.024261f, 0.019225f, -0.018354f, -0.058985f, -0.074101f, -0.001136f, -0.048853f, 0.037883f, -0.004085f, -0.001712f, 0.044288f, 0.034565f, 0.013813f, 0.035804f, 0.013417f, 0.056747f, -0.040466f, -0.002447f, -0.044631f, 0.016983f, -0.038780f, -0.037508f, 0.006516f, -0.012587f, 0.031289f, 0.053290f, 0.003655f, -0.052987f, -0.085750f, -0.027876f, -0.049577f, 0.003717f, 0.022674f, 0.038687f, -0.032950f, -0.013940f, 0.043922f, 0.003786f, -0.223460f, -0.253377f, -0.272436f, -0.275268f, -0.373245f, -0.022117f, -0.133665f, -0.043178f, 0.049561f, 0.124783f, 0.175092f, 0.180573f, 0.368993f, 0.395621f, 0.322124f, 0.239603f, 0.253850f, 0.242020f, 0.093368f, -0.035956f, -0.166189f, -0.166554f, -0.255561f, -0.083034f, -0.138435f, -0.103250f, -0.009534f, -0.216979f, -0.062278f, -0.193800f, -0.052605f, -0.222693f, -0.209842f, -0.096902f, -0.173215f, -0.017655f, -0.087400f, -0.080879f, -0.129480f, -0.085765f, -0.195594f, -0.138336f, -0.073355f, -0.067351f, -0.103383f, -0.063400f, -0.007433f, -0.083756f, 0.028409f, 0.125294f, -0.097376f, 0.148211f, 0.089002f, 0.197818f, 0.198851f, - 0.173504f, 0.214095f, 0.180761f, 0.298556f, 0.296422f, 0.236548f, 0.316286f, 0.271367f, 0.414220f, 0.408050f, 0.480678f, 0.374270f, 0.402698f, 0.438981f, 0.396401f, 0.474126f, 0.351226f, 0.513394f, 0.410189f, 0.156520f, 0.200582f, 0.053056f, 0.079464f, -0.277466f, -0.233016f, -0.259958f, -0.276877f, -0.291749f, -0.377180f, -0.354953f, -0.390362f, -0.428441f, -0.503904f, -0.420979f, -0.385658f, -0.428485f, -0.467517f, -0.557198f, -0.447132f, -0.494885f, -0.498354f, -0.377917f, -0.426297f, -0.245768f, -0.305325f, -0.208759f, -0.194057f, -0.102562f, -0.075199f, -0.106202f, -0.018434f, 0.050336f, 0.241971f, 0.229554f, 0.166433f, 0.188470f, 0.202450f, 0.274796f, 0.281172f, 0.304399f, 0.320721f, 0.276123f, 0.280233f, 0.206182f, 0.291563f, 0.298491f, 0.227063f, 0.159989f, 0.123195f, 0.179355f, 0.177060f, 0.138126f, 0.082407f, 0.045841f, 0.069324f, -0.018169f, 0.009033f, -0.032706f, -0.026455f, -0.132490f, -0.121834f, -0.088461f, -0.061817f, -0.080751f, -0.062516f, -0.029686f, -0.025136f, -0.032194f, -0.060541f, -0.055091f, -0.028240f, -0.035578f, -0.024448f, -0.019988f, 0.002779f, 0.009119f, - 0.000590f, -0.008130f, -0.002561f, 0.000811f, -0.001943f, -0.001991f, -0.001969f} - }, - { - {-0.005288f, 0.009776f, -0.000395f, 0.004012f, 0.001553f, -0.008552f, -0.006433f, 0.002231f, -0.005796f, -0.008599f, 0.004903f, -0.001018f, 0.001279f, -0.004936f, 0.003625f, 0.000350f, -0.007620f, -0.000346f, 0.008790f, 0.007144f, -0.005472f, -0.009639f, -0.008786f, 0.001293f, -0.002027f, -0.001722f, -0.007478f, 0.008134f, -0.002167f, 0.002292f, -0.003413f, -0.002070f, -0.000750f, 0.003085f, -0.002216f, -0.004282f, -0.016411f, 0.005580f, -0.001251f, 0.005303f, 0.003142f, 0.002229f, -0.000431f, 0.010939f, 0.002048f, 0.002186f, 0.001519f, -0.005597f, -0.003587f, -0.000519f, 0.000796f, -0.005603f, -0.001334f, 0.002181f, -0.000779f, -0.005294f, -0.002796f, 0.000195f, 0.005169f, -0.008106f, -0.011004f, -0.013626f, 0.004816f, 0.007807f, 0.000781f, 0.006457f, 0.004729f, 0.000907f, -0.012500f, -0.000325f, -0.003278f, -0.004382f, 0.000207f, 0.000698f, 0.005166f, -0.001115f, 0.007356f, 0.005215f, -0.002340f, -0.007481f, -0.003649f, -0.001336f, 0.001900f, 0.000572f, 0.002404f, 0.002803f, 0.005133f, -0.000109f, -0.000503f, -0.002422f, -0.002109f, -0.002005f, -0.000904f, -0.004174f, -0.001983f, -0.002360f, - 0.001287f, -0.000276f, -0.000537f, -0.001283f, 0.001945f, -0.002938f, 0.005896f, 0.007712f, -0.001795f, -0.000118f, -0.011066f, 0.009842f, -0.012673f, 0.004875f, 0.021301f, -0.004583f, -0.007953f, 0.001194f, 0.011105f, 0.001166f, -0.003183f, -0.001559f, -0.003208f, -0.002034f, -0.010038f, -0.003919f, 0.004918f, -0.007973f, -0.004570f, 0.000435f, -0.000463f, 0.008775f, -0.005389f, 0.001626f, -0.002099f, 0.001905f, -0.001139f, -0.005151f, 0.009715f, 0.016542f, 0.004174f, -0.000959f, -0.003125f, 0.017904f, 0.000815f, -0.007509f, 0.000482f, -0.013378f, 0.000030f, 0.006961f, -0.010275f, -0.001317f, 0.002183f, -0.008206f, -0.002482f, 0.009424f, 0.001328f, -0.001026f, 0.009092f, -0.006071f, -0.009592f, 0.005409f, 0.003582f, -0.006700f, -0.003328f, -0.007172f, -0.008405f, -0.009041f, -0.005007f, -0.005174f, 0.007310f, 0.005196f, 0.001425f, -0.000217f, -0.005088f, 0.004697f, -0.001109f, -0.003476f, 0.006194f, 0.006845f, -0.004898f, -0.000986f, -0.002320f, -0.003129f, 0.000956f, 0.007844f, -0.003971f, 0.001751f, 0.007480f, 0.004942f, -0.001722f, 0.001891f, -0.001313f, -0.000214f, 0.003169f, -0.000457f, - 0.000047f, 0.003225f, -0.003458f, 0.001395f, 0.000709f, -0.001113f, -0.003186f, 0.002433f, 0.000279f, -0.001429f, 0.000749f, 0.000344f, -0.001142f, 0.000358f, -0.000585f, -0.001066f, -0.001860f, 0.010891f, -0.015877f, -0.010482f, -0.003781f, -0.002310f, 0.000536f, 0.002042f, -0.015140f, 0.010513f, -0.004783f, 0.003435f, 0.002166f, 0.003499f, 0.006611f, -0.000048f, -0.002193f, -0.005039f, 0.010896f, -0.000862f, 0.007082f, 0.013458f, -0.002923f, 0.011443f, 0.009759f, -0.008463f, 0.005654f, 0.005723f, 0.006138f, -0.014933f, -0.001488f, 0.000892f, -0.004697f, -0.009393f, 0.000142f, 0.010958f, -0.002577f, -0.004695f, -0.003690f, 0.003351f, 0.010157f, 0.005017f, -0.005196f, -0.000087f, -0.004286f, 0.000430f, -0.001367f, -0.005065f, 0.009485f, -0.012266f, -0.010139f, -0.009310f, 0.002874f, -0.001310f, -0.000340f, -0.011444f, -0.012088f, 0.002942f, -0.000260f, 0.000682f, -0.001197f, -0.000644f, -0.009025f, -0.005340f, -0.009867f, 0.001931f, 0.008446f, -0.002636f, 0.007494f, 0.001403f, 0.006662f, -0.014404f, 0.000056f, 0.002079f, -0.004811f, -0.002175f, 0.001918f, -0.005134f, -0.000637f, 0.003771f, - 0.004069f, -0.003197f, -0.009640f, 0.008480f, 0.001324f, 0.000206f, -0.002135f, -0.001233f, -0.007720f, 0.000339f, 0.000526f, -0.001359f, 0.001386f, 0.000248f, -0.002728f, 0.001162f, 0.001243f, -0.000779f, -0.001116f, -0.000385f, -0.000466f, -0.000522f, 0.000419f, 0.004060f, 0.000062f, -0.001220f, 0.003355f, 0.001499f, -0.000271f, -0.001121f, -0.000339f, -0.005440f, 0.001342f, -0.001092f, 0.009348f, 0.014869f, 0.000943f, -0.005654f, -0.012644f, 0.005786f, 0.003755f, 0.003509f, 0.015751f, -0.010297f, 0.000364f, 0.001919f, -0.002855f, -0.005151f, 0.002330f, 0.000994f, 0.009495f, 0.020949f, -0.001844f, 0.003627f, 0.008760f, -0.003797f, 0.007814f, 0.013617f, -0.009501f, -0.000353f, -0.003540f, -0.000195f, 0.006075f, -0.010604f, 0.011460f, 0.002558f, 0.000135f, 0.006044f, -0.000992f, 0.008368f, -0.004533f, -0.001923f, -0.002353f, 0.013144f, 0.006127f, 0.008373f, -0.001584f, 0.006900f, -0.012751f, 0.014747f, -0.005705f, 0.005803f, -0.013423f, 0.005423f, 0.009750f, 0.017973f, 0.006601f, 0.003362f, -0.011820f, -0.004522f, 0.003269f, -0.008944f, -0.010643f, -0.002519f, 0.021233f, 0.024591f, - 0.004719f, 0.005791f, -0.007010f, -0.003109f, 0.013752f, 0.002688f, 0.006025f, -0.000825f, 0.004190f, 0.003691f, -0.001812f, 0.003150f, -0.002006f, 0.002376f, 0.001663f, 0.008691f, 0.007073f, -0.010899f, 0.009723f, -0.003184f, 0.005003f, -0.003429f, 0.003679f, -0.002893f, -0.004048f, -0.000071f, -0.006466f, 0.001021f, 0.004744f, 0.001083f, 0.002450f, -0.002294f, -0.002854f, -0.001469f, 0.001191f, 0.000208f, 0.001088f, -0.000415f, 0.000757f, -0.001825f, 0.000689f, 0.000702f, 0.003457f, 0.000208f, 0.002357f, -0.001103f, 0.002112f, 0.010371f, 0.000292f, 0.001296f, 0.014550f, -0.012249f, -0.014420f, 0.022486f, -0.005819f, -0.003594f, 0.014705f, 0.008804f, 0.001093f, -0.025786f, 0.027871f, -0.005096f, -0.003513f, -0.002919f, -0.001509f, 0.001116f, 0.001732f, 0.008722f, 0.013009f, 0.008573f, -0.001854f, 0.014594f, 0.009265f, 0.004697f, 0.003939f, -0.005354f, 0.006673f, -0.010472f, 0.008389f, -0.001587f, 0.003523f, -0.008862f, -0.012879f, 0.001670f, -0.001612f, 0.004747f, 0.007802f, -0.003816f, -0.012324f, -0.007187f, 0.003064f, -0.014799f, 0.009606f, 0.002997f, -0.023600f, 0.010698f, - 0.001663f, 0.006129f, 0.001563f, 0.003698f, 0.004046f, -0.000939f, -0.006629f, -0.005759f, -0.016089f, -0.011820f, -0.006543f, -0.008206f, -0.001775f, 0.000994f, -0.011762f, -0.016673f, -0.002446f, 0.010900f, 0.018770f, -0.000919f, -0.012416f, 0.002109f, -0.019552f, 0.001384f, -0.001284f, -0.007671f, 0.016596f, 0.015592f, 0.005294f, -0.000560f, -0.003938f, -0.001138f, -0.008627f, 0.004127f, 0.015921f, 0.008522f, 0.013170f, 0.002687f, -0.005915f, 0.006138f, 0.003236f, -0.000402f, 0.001322f, 0.000754f, 0.000454f, 0.002872f, 0.002988f, 0.002849f, -0.000817f, 0.004972f, 0.001406f, 0.009779f, 0.003875f, 0.002647f, 0.000531f, 0.000872f, 0.002643f, -0.000667f, 0.004643f, 0.001716f, 0.001843f, -0.002573f, 0.005758f, 0.001451f, -0.001952f, -0.000819f, -0.025305f, 0.013097f, -0.004820f, -0.008994f, -0.007131f, -0.008603f, -0.012024f, 0.023216f, -0.029536f, 0.006985f, 0.007153f, 0.009685f, 0.014452f, 0.002389f, 0.004024f, 0.005455f, 0.003923f, 0.003027f, 0.004904f, 0.012725f, 0.002305f, -0.006977f, -0.000003f, -0.001209f, -0.009087f, -0.008210f, 0.004222f, 0.008533f, 0.009171f, 0.001262f, - 0.006541f, -0.015375f, -0.001782f, -0.000200f, -0.000840f, -0.014568f, -0.008732f, -0.005233f, 0.009542f, 0.008577f, -0.000146f, -0.015946f, 0.000092f, -0.008628f, -0.006186f, -0.003119f, -0.004294f, 0.010048f, 0.013647f, 0.004163f, 0.014196f, -0.022694f, -0.015868f, 0.007576f, 0.004638f, 0.000792f, 0.003004f, 0.001506f, -0.007365f, -0.014267f, -0.009873f, 0.007594f, -0.006399f, 0.011602f, 0.011403f, -0.004136f, 0.010805f, -0.017174f, -0.008504f, -0.004817f, -0.005804f, 0.001278f, 0.031313f, -0.004481f, 0.008854f, -0.004976f, -0.004536f, -0.003169f, 0.006643f, 0.007146f, -0.000833f, 0.005773f, 0.003927f, -0.009747f, 0.002690f, 0.000770f, 0.004189f, 0.000933f, 0.000510f, -0.004903f, 0.003152f, -0.000182f, 0.003194f, 0.001046f, 0.001651f, -0.000888f, -0.001874f, 0.000958f, -0.002858f, -0.004088f, 0.001392f, -0.002227f, -0.003539f, -0.001021f, 0.001053f, 0.001421f, 0.001391f, 0.001558f, -0.000211f, 0.001126f, 0.002211f, 0.001875f, 0.000616f, 0.000566f, -0.000740f, -0.001161f, 0.002062f, 0.025913f, -0.004965f, 0.000723f, 0.010922f, -0.024638f, 0.016962f, 0.008610f, -0.013880f, 0.015440f, - 0.017273f, 0.005809f, -0.026602f, 0.016472f, 0.000732f, -0.002495f, 0.013491f, 0.014572f, -0.000810f, -0.004283f, 0.000441f, -0.010315f, 0.009683f, -0.005633f, -0.009827f, -0.020692f, 0.004853f, -0.022492f, 0.006060f, -0.005501f, -0.002501f, 0.006506f, -0.018323f, -0.007520f, 0.015265f, -0.001317f, -0.007102f, 0.009347f, 0.000637f, -0.007989f, 0.006924f, 0.002519f, 0.000696f, -0.003417f, 0.005285f, -0.011150f, -0.001153f, -0.016290f, 0.015445f, 0.015439f, -0.019184f, 0.012848f, -0.013681f, -0.005157f, 0.013277f, 0.018555f, -0.001327f, -0.009222f, 0.005624f, -0.001151f, 0.002692f, -0.022648f, -0.017900f, 0.003593f, 0.003235f, -0.004886f, -0.004639f, 0.005893f, -0.000680f, -0.008018f, 0.009600f, -0.009245f, 0.003265f, 0.006947f, -0.001568f, 0.010887f, -0.010878f, 0.011009f, -0.000057f, 0.017507f, -0.005981f, 0.005325f, 0.009894f, 0.001132f, -0.006253f, -0.001771f, -0.000632f, 0.005145f, -0.001695f, -0.008217f, 0.006958f, 0.001522f, -0.003434f, 0.003081f, -0.002304f, -0.000090f, -0.003222f, -0.000914f, 0.002389f, -0.002743f, 0.001794f, 0.004811f, -0.002469f, 0.001182f, 0.000351f, -0.001575f, - 0.003053f, 0.000827f, 0.002601f, -0.003851f, 0.001589f, -0.003943f, -0.004509f, 0.001700f, -0.000704f, 0.001855f, 0.001926f, 0.000587f, 0.007166f, 0.003122f, -0.009432f, 0.018181f, -0.006228f, 0.008845f, -0.018363f, -0.001304f, -0.004850f, -0.016671f, 0.000577f, 0.011771f, 0.020923f, 0.027376f, -0.015598f, -0.000440f, -0.019441f, -0.001457f, -0.012383f, 0.011049f, -0.011595f, -0.022925f, 0.001480f, -0.014694f, -0.001381f, 0.019003f, -0.011273f, -0.011246f, 0.020392f, 0.000627f, 0.003500f, -0.002137f, -0.011999f, 0.005090f, 0.004347f, 0.024576f, -0.016966f, 0.012051f, -0.014390f, 0.003582f, 0.004767f, -0.014198f, -0.008745f, 0.023599f, 0.006449f, -0.017562f, -0.004540f, -0.006429f, -0.014102f, -0.000599f, 0.023131f, 0.012389f, 0.016094f, 0.003675f, 0.006431f, -0.021122f, -0.003062f, 0.026849f, 0.002120f, -0.016695f, 0.008923f, 0.008873f, -0.012256f, -0.010672f, -0.005912f, -0.027594f, -0.004263f, 0.008187f, 0.013623f, 0.024217f, -0.006079f, -0.013258f, -0.003842f, -0.008255f, 0.019658f, -0.007323f, -0.017178f, -0.011707f, -0.005081f, -0.002351f, -0.005329f, -0.009932f, 0.021402f, -0.012279f, - -0.001500f, 0.001969f, 0.001015f, 0.006983f, 0.004350f, -0.006315f, -0.008479f, 0.006355f, 0.007631f, 0.008071f, -0.001859f, 0.003647f, -0.002249f, -0.001343f, 0.003602f, -0.000802f, -0.003766f, 0.003799f, 0.001774f, -0.000118f, -0.002470f, -0.000832f, -0.006269f, 0.000575f, -0.001564f, -0.005390f, -0.002759f, 0.002439f, 0.002120f, 0.000092f, 0.002491f, 0.011780f, -0.040896f, -0.028189f, -0.018069f, 0.002157f, -0.034266f, 0.005121f, 0.025471f, 0.008428f, 0.026226f, -0.014074f, -0.006491f, -0.002849f, -0.013632f, -0.005102f, -0.020464f, 0.036371f, 0.020765f, 0.014500f, -0.030729f, -0.005940f, -0.009891f, -0.019994f, 0.006914f, -0.002105f, 0.006483f, -0.024834f, -0.001710f, -0.002226f, -0.017836f, 0.010374f, 0.002951f, 0.018225f, 0.007329f, -0.015242f, 0.024010f, -0.011355f, 0.009743f, 0.005057f, -0.000205f, 0.019001f, 0.017657f, 0.004455f, -0.022917f, 0.027951f, -0.014154f, 0.020041f, 0.009133f, -0.010372f, -0.011539f, 0.022473f, 0.003294f, -0.002620f, 0.005846f, -0.018985f, -0.006810f, 0.010947f, -0.001594f, 0.019873f, -0.011495f, -0.017969f, 0.007360f, 0.005084f, 0.000605f, 0.019764f, - 0.008512f, 0.004018f, -0.012617f, 0.014383f, 0.005634f, -0.011026f, -0.001524f, -0.001184f, -0.006346f, -0.004612f, -0.005353f, 0.008651f, 0.021701f, 0.036583f, 0.016994f, -0.006172f, 0.001849f, -0.008399f, 0.008409f, 0.011256f, -0.000187f, -0.009348f, -0.005506f, -0.012202f, 0.007517f, -0.006667f, 0.001778f, -0.005765f, -0.001588f, 0.008117f, -0.000974f, 0.000879f, -0.007436f, 0.007938f, -0.004200f, -0.003563f, 0.004350f, -0.007302f, 0.007990f, -0.005595f, 0.004273f, -0.003955f, -0.000757f, 0.001791f, -0.005459f, -0.003877f, -0.002400f, -0.008883f, -0.008931f, -0.003917f, -0.000479f, -0.003148f, 0.007054f, 0.006519f, 0.003802f, -0.025822f, 0.034713f, 0.014394f, 0.039695f, -0.017795f, -0.021314f, 0.037827f, 0.001286f, -0.003896f, 0.008299f, 0.002911f, 0.022150f, 0.029511f, 0.003859f, -0.027390f, -0.043874f, 0.006176f, -0.012102f, 0.002698f, 0.001255f, -0.018977f, -0.001202f, 0.023928f, 0.019563f, 0.015394f, 0.030798f, -0.006930f, 0.026098f, -0.018299f, 0.023114f, 0.007626f, 0.017912f, -0.011973f, 0.031544f, 0.018178f, 0.023038f, -0.036513f, -0.000161f, 0.033270f, 0.018943f, 0.006067f, - -0.007870f, 0.050034f, 0.021124f, -0.019574f, -0.012069f, 0.012228f, -0.019058f, -0.001822f, -0.009140f, 0.002614f, 0.042006f, 0.044014f, 0.031956f, 0.011767f, 0.000386f, 0.016594f, -0.014579f, -0.003649f, 0.018036f, -0.018629f, 0.044480f, 0.027761f, 0.021841f, 0.008642f, -0.001693f, -0.020955f, 0.026418f, 0.001000f, 0.023047f, -0.010246f, 0.008968f, -0.014774f, -0.008473f, -0.000337f, 0.011635f, -0.017385f, 0.041414f, 0.017885f, -0.004530f, -0.020238f, -0.038983f, 0.019241f, 0.003443f, -0.012638f, -0.001169f, 0.004883f, -0.009088f, 0.005719f, 0.015085f, -0.002555f, -0.005151f, 0.000524f, -0.003162f, -0.003830f, 0.003432f, -0.004658f, -0.003423f, -0.006402f, 0.006779f, 0.003901f, -0.009769f, 0.005562f, 0.006316f, 0.006147f, -0.000175f, -0.002849f, -0.001079f, -0.000025f, 0.003281f, -0.000788f, 0.002431f, -0.005754f, 0.009578f, -0.011950f, 0.000220f, 0.004184f, 0.010735f, 0.042814f, -0.002576f, -0.021270f, -0.009629f, -0.016694f, -0.000709f, -0.026737f, 0.006843f, -0.023053f, 0.012933f, 0.002872f, -0.006271f, -0.018165f, -0.021665f, -0.032834f, -0.034026f, -0.010174f, 0.029389f, -0.002298f, - -0.019284f, 0.007835f, -0.018392f, 0.013962f, -0.015723f, 0.027495f, -0.028419f, 0.006527f, -0.020179f, -0.020686f, -0.003851f, 0.003398f, -0.006078f, 0.012923f, -0.040872f, 0.016324f, 0.003856f, -0.009939f, -0.002901f, -0.002818f, -0.020269f, -0.032486f, -0.034778f, 0.024853f, 0.012264f, -0.013683f, 0.021529f, 0.000575f, -0.009098f, -0.025651f, -0.053737f, -0.044301f, 0.024941f, -0.007847f, 0.000480f, -0.005436f, -0.002608f, -0.002690f, -0.036427f, 0.013684f, -0.043018f, -0.023038f, 0.001881f, -0.001488f, -0.009271f, -0.005915f, -0.005812f, 0.044136f, -0.013796f, -0.014588f, -0.012110f, 0.046181f, -0.008457f, -0.018765f, 0.029259f, -0.023196f, -0.014758f, -0.019147f, -0.016104f, -0.059919f, 0.011861f, 0.009400f, -0.020137f, -0.003081f, 0.013851f, -0.007977f, -0.005496f, -0.011324f, -0.010335f, -0.001634f, -0.005468f, -0.005489f, 0.020730f, -0.001923f, -0.002370f, 0.013744f, 0.016464f, -0.008412f, -0.006143f, -0.001575f, -0.003057f, 0.004016f, -0.010254f, 0.000926f, 0.001047f, 0.001663f, -0.006148f, -0.007662f, -0.003175f, 0.006565f, -0.002894f, -0.005764f, -0.000882f, 0.004065f, -0.013181f, -0.002314f, - 0.007283f, 0.000229f, -0.005321f, 0.006758f, -0.004658f, 0.005958f, -0.000137f, 0.005681f, 0.006225f, 0.006217f, -0.011529f, -0.001433f, -0.063313f, -0.047809f, -0.027350f, 0.055278f, -0.002817f, -0.009215f, -0.006755f, -0.004360f, -0.018218f, 0.019563f, 0.015123f, 0.049473f, -0.045659f, -0.008902f, 0.014060f, -0.033400f, -0.013367f, -0.011818f, 0.056988f, -0.000836f, 0.013136f, 0.029008f, 0.002624f, 0.027918f, -0.030148f, -0.037894f, -0.025359f, -0.006976f, -0.006447f, 0.004521f, 0.017807f, -0.000878f, -0.031920f, -0.022026f, -0.001636f, -0.017043f, -0.035810f, 0.031958f, -0.005345f, -0.017864f, -0.000228f, 0.010259f, 0.010151f, 0.005967f, -0.016184f, 0.003256f, -0.033300f, -0.014583f, -0.049384f, 0.023200f, 0.014917f, -0.005846f, -0.015507f, 0.018247f, -0.024607f, -0.006294f, 0.053272f, -0.005618f, 0.045147f, 0.020188f, 0.012104f, -0.011832f, -0.056706f, -0.023594f, -0.010909f, -0.030540f, -0.022829f, -0.014565f, 0.025380f, -0.011617f, 0.000578f, -0.022802f, 0.048351f, -0.017305f, 0.019944f, 0.013513f, -0.032991f, -0.013294f, 0.007275f, 0.030552f, 0.055818f, 0.046416f, 0.020120f, -0.003192f, - 0.019165f, 0.000117f, 0.001667f, -0.010974f, 0.005640f, -0.011345f, -0.007869f, -0.000239f, 0.003287f, -0.006865f, -0.009068f, -0.016385f, -0.013023f, 0.006909f, 0.005367f, 0.005622f, -0.006023f, -0.002574f, -0.032484f, -0.000682f, -0.014980f, -0.007110f, 0.005885f, 0.004432f, 0.001879f, 0.013348f, 0.000334f, -0.001984f, 0.001340f, -0.005512f, -0.023569f, -0.002334f, -0.013396f, 0.006605f, -0.011887f, -0.013058f, 0.001515f, 0.014915f, 0.006859f, -0.004415f, -0.008802f, -0.008289f, -0.003868f, 0.007936f, 0.002124f, -0.003793f, 0.032873f, -0.001521f, -0.018615f, 0.020307f, 0.011667f, 0.068679f, 0.002450f, 0.000855f, 0.024275f, -0.030837f, -0.021252f, -0.006031f, 0.005743f, 0.011223f, -0.008212f, 0.029151f, -0.017710f, 0.004178f, 0.027401f, 0.012436f, 0.010230f, 0.010273f, -0.020039f, 0.003979f, -0.000486f, -0.009685f, 0.004305f, -0.014445f, -0.025888f, -0.013398f, 0.002189f, -0.025427f, 0.033267f, -0.002215f, 0.003459f, -0.004338f, 0.022947f, 0.025932f, -0.004704f, -0.018762f, -0.001583f, -0.005829f, 0.030502f, 0.039167f, -0.027510f, -0.018782f, -0.013819f, 0.009987f, 0.029104f, -0.025609f, - 0.008835f, -0.000874f, 0.006268f, -0.013186f, -0.017809f, 0.005918f, 0.019280f, 0.003823f, -0.023356f, 0.021623f, 0.062902f, -0.020006f, 0.011901f, -0.004440f, 0.005087f, 0.024486f, 0.007093f, 0.028817f, 0.024108f, -0.005994f, 0.036819f, 0.066750f, 0.002959f, -0.024293f, 0.065350f, -0.001025f, 0.062501f, -0.021261f, -0.030173f, 0.028968f, 0.011356f, 0.043712f, -0.006764f, 0.061450f, 0.019626f, 0.014444f, -0.018010f, 0.029235f, 0.003694f, 0.003153f, 0.007132f, 0.023916f, 0.005310f, 0.027276f, 0.003629f, 0.006953f, 0.001275f, 0.004306f, 0.004682f, 0.008875f, -0.002384f, 0.009919f, 0.023120f, 0.009771f, 0.010787f, 0.003467f, 0.006484f, -0.012422f, 0.011506f, 0.004529f, 0.005481f, 0.008423f, 0.004735f, -0.000558f, 0.000242f, 0.006628f, -0.005974f, 0.002457f, 0.000719f, 0.005925f, 0.016661f, 0.006090f, -0.000104f, -0.007973f, 0.008994f, 0.001731f, 0.002504f, -0.001285f, 0.008801f, 0.005128f, 0.012809f, -0.043058f, -0.013885f, 0.067229f, 0.011257f, -0.031040f, 0.009270f, -0.023512f, 0.008728f, 0.012901f, -0.005437f, -0.035548f, -0.013352f, -0.053149f, 0.022090f, 0.018249f, - -0.020408f, 0.019794f, 0.030906f, 0.006361f, -0.008257f, -0.031041f, 0.007120f, 0.049687f, -0.023727f, 0.029823f, 0.028514f, 0.004508f, 0.021463f, 0.019862f, 0.000975f, 0.024769f, 0.016567f, -0.047306f, -0.006650f, -0.019060f, 0.048406f, 0.032076f, -0.033670f, 0.020759f, -0.003821f, 0.025533f, 0.080684f, -0.007611f, -0.013578f, 0.008073f, 0.072624f, 0.029810f, -0.004403f, 0.009298f, 0.013207f, 0.041906f, 0.037029f, -0.025269f, 0.044440f, 0.020377f, 0.041201f, -0.029116f, 0.004481f, 0.008276f, 0.008816f, 0.025458f, 0.037814f, -0.024550f, -0.019474f, 0.029929f, 0.015004f, -0.010143f, -0.010634f, 0.000122f, 0.045375f, -0.085446f, 0.020173f, -0.030368f, -0.022390f, 0.004140f, -0.029241f, -0.027187f, -0.003875f, -0.046714f, 0.033777f, -0.009914f, 0.035685f, -0.001264f, 0.031220f, -0.020565f, 0.012581f, 0.000779f, 0.010357f, -0.000937f, -0.011988f, 0.009472f, 0.006687f, 0.007572f, 0.015250f, -0.007400f, 0.007734f, 0.010524f, -0.008712f, 0.000844f, 0.014573f, 0.005429f, -0.007800f, 0.016259f, -0.010651f, 0.002217f, 0.008484f, -0.010391f, -0.007842f, 0.003353f, 0.003265f, 0.018134f, - 0.015000f, 0.010778f, 0.005462f, -0.001680f, 0.011704f, 0.002683f, 0.005165f, 0.005213f, 0.009714f, 0.011858f, -0.009775f, -0.008128f, -0.015820f, 0.012530f, 0.004943f, 0.001072f, 0.003947f, -0.016662f, -0.015969f, 0.011169f, 0.014536f, 0.015350f, -0.018907f, -0.022580f, -0.058448f, 0.002776f, -0.032594f, 0.053366f, 0.006555f, -0.013706f, -0.007857f, 0.032079f, 0.009260f, 0.052019f, 0.021000f, -0.013342f, 0.002214f, 0.011092f, 0.023685f, 0.039173f, -0.043614f, -0.037669f, -0.007874f, 0.065791f, -0.020166f, 0.008523f, 0.018788f, 0.028911f, 0.034956f, 0.050046f, 0.043167f, 0.003940f, -0.010211f, 0.046752f, 0.003688f, -0.029546f, 0.015868f, -0.027400f, 0.019974f, 0.005117f, -0.024484f, 0.022622f, 0.087722f, 0.048979f, -0.030881f, -0.023287f, -0.003113f, -0.024163f, -0.024022f, -0.020679f, 0.015131f, -0.011714f, -0.020427f, 0.004715f, 0.024198f, 0.014567f, 0.008079f, 0.034593f, 0.009322f, -0.008186f, 0.036459f, 0.030789f, -0.026203f, 0.018000f, -0.029590f, -0.023037f, -0.026226f, 0.000080f, -0.063468f, -0.018666f, 0.044314f, 0.032791f, -0.015043f, 0.022068f, -0.005255f, 0.001724f, - -0.038977f, 0.008933f, 0.023521f, 0.037373f, 0.021010f, 0.024803f, 0.013597f, 0.011950f, -0.016592f, -0.014543f, -0.017653f, 0.010094f, -0.003765f, 0.001536f, 0.007601f, 0.007927f, -0.000754f, 0.019386f, -0.006005f, -0.008363f, -0.009147f, 0.013631f, -0.017639f, -0.007068f, -0.021769f, -0.001083f, 0.004324f, -0.009331f, 0.000879f, -0.005131f, 0.013636f, -0.002543f, -0.028730f, 0.000506f, -0.001958f, 0.008636f, 0.011261f, 0.003707f, 0.012793f, -0.000751f, 0.020792f, 0.004307f, -0.001642f, -0.000506f, 0.002269f, 0.000927f, 0.001056f, -0.023863f, 0.019733f, 0.015930f, -0.030308f, -0.012953f, -0.065904f, -0.005244f, 0.054970f, 0.000691f, -0.040268f, 0.006523f, 0.001895f, -0.027025f, 0.036645f, 0.021218f, -0.014718f, 0.010466f, 0.016613f, 0.022658f, 0.012580f, 0.003957f, -0.016261f, 0.008905f, 0.013046f, 0.035057f, 0.052345f, -0.014339f, -0.035227f, -0.018523f, 0.009991f, 0.010927f, 0.043080f, -0.016440f, -0.033735f, -0.026258f, -0.026991f, 0.052144f, 0.095531f, 0.034720f, 0.004796f, 0.104818f, 0.006305f, 0.043470f, 0.024795f, -0.008799f, -0.021970f, 0.018648f, -0.029746f, -0.019812f, - 0.021245f, 0.001447f, -0.063138f, -0.065384f, -0.016357f, 0.027334f, -0.034115f, -0.042784f, -0.023559f, -0.031673f, -0.026079f, 0.022112f, -0.018161f, -0.048515f, 0.021824f, 0.001929f, -0.014144f, 0.011366f, -0.010933f, 0.024480f, 0.098328f, -0.060222f, 0.049571f, -0.068473f, -0.038829f, -0.022694f, -0.015494f, 0.038082f, 0.015387f, 0.018266f, -0.007396f, 0.021161f, 0.044129f, 0.011044f, 0.001035f, 0.000579f, -0.012801f, 0.006074f, 0.012100f, 0.035360f, -0.002124f, -0.017516f, -0.002614f, 0.027012f, 0.017364f, -0.007630f, 0.010246f, 0.012261f, -0.009747f, -0.000335f, -0.004168f, 0.033896f, 0.012284f, 0.016072f, 0.011932f, 0.009700f, -0.013954f, -0.009891f, -0.002193f, 0.008702f, -0.017075f, 0.002513f, -0.016840f, -0.011618f, 0.002749f, 0.001806f, -0.019355f, 0.018996f, 0.025955f, -0.002540f, -0.003303f, 0.015789f, 0.000233f, -0.006778f, 0.022976f, -0.009424f, 0.015945f, 0.001488f, 0.053224f, 0.034231f, 0.030863f, 0.045330f, -0.052897f, 0.020345f, -0.055404f, -0.002221f, 0.072413f, 0.064401f, 0.027454f, 0.001001f, 0.012531f, 0.008183f, -0.020765f, 0.016784f, 0.020851f, -0.091242f, - 0.005595f, 0.013416f, 0.027749f, -0.033434f, -0.051375f, 0.037689f, 0.017832f, 0.009592f, -0.021958f, 0.044703f, -0.006278f, 0.034751f, 0.028876f, -0.003440f, 0.004412f, -0.010092f, 0.035193f, -0.020875f, 0.010747f, 0.021178f, -0.001840f, 0.044976f, 0.026043f, -0.002511f, 0.023078f, 0.026224f, -0.001346f, -0.020291f, -0.068437f, -0.012613f, 0.007319f, -0.040523f, 0.003929f, 0.032354f, -0.062189f, -0.027586f, 0.009554f, -0.026726f, -0.004317f, 0.032841f, 0.001919f, -0.023207f, -0.030291f, 0.013511f, 0.013170f, -0.062866f, -0.020951f, -0.005202f, 0.000279f, 0.039518f, 0.019370f, 0.004439f, 0.069023f, -0.008672f, -0.002218f, 0.002749f, -0.039342f, 0.037308f, 0.000338f, 0.061210f, -0.023698f, -0.010203f, 0.018429f, 0.009273f, -0.052131f, 0.001730f, -0.007178f, -0.020833f, -0.016832f, 0.006555f, 0.002188f, -0.014686f, -0.001281f, -0.009109f, -0.006421f, 0.001936f, -0.022283f, 0.006476f, 0.003095f, -0.003079f, 0.008569f, 0.002389f, -0.014697f, 0.003049f, 0.004250f, 0.003963f, -0.014217f, 0.020869f, 0.004127f, 0.027140f, -0.019943f, 0.002579f, -0.016799f, -0.005885f, -0.003062f, -0.029931f, - 0.006414f, 0.002849f, -0.001220f, -0.003994f, -0.005383f, 0.011179f, -0.013480f, -0.010359f, 0.013092f, 0.017534f, -0.017334f, -0.064582f, -0.056287f, 0.010315f, -0.028969f, -0.009066f, -0.043371f, -0.054030f, -0.056848f, -0.037356f, 0.040564f, 0.055371f, 0.001494f, -0.045570f, 0.003629f, 0.002144f, 0.000631f, 0.021062f, 0.035350f, 0.035349f, 0.000902f, -0.022881f, -0.056713f, -0.032511f, -0.049641f, -0.010637f, 0.000241f, 0.004216f, 0.005155f, 0.007013f, 0.013710f, 0.017764f, 0.033456f, -0.052455f, 0.023065f, 0.009201f, 0.011612f, 0.028182f, 0.049814f, 0.055928f, -0.032179f, 0.024939f, -0.044488f, -0.013878f, -0.040367f, -0.003913f, -0.015724f, 0.092961f, 0.032991f, 0.066976f, 0.002834f, -0.035892f, -0.015419f, 0.042901f, 0.046419f, -0.027250f, 0.085744f, -0.035894f, 0.005355f, 0.003793f, 0.014896f, 0.031515f, 0.095383f, -0.006653f, 0.023359f, 0.053132f, 0.012131f, -0.042064f, 0.026745f, 0.097612f, -0.017812f, -0.023596f, -0.057560f, -0.004777f, 0.036003f, 0.022242f, 0.003021f, -0.055240f, -0.041865f, 0.007052f, -0.043686f, 0.013177f, 0.001933f, -0.054993f, -0.006237f, 0.005685f, - -0.008651f, 0.039755f, 0.037316f, 0.000849f, -0.010898f, -0.023678f, 0.025832f, -0.010936f, 0.044895f, -0.010214f, 0.000581f, 0.030781f, 0.030867f, 0.043956f, 0.033931f, -0.024768f, -0.009725f, 0.005946f, -0.008212f, 0.003031f, -0.018908f, -0.018138f, -0.018414f, 0.009657f, -0.022551f, -0.026222f, 0.015574f, 0.020397f, 0.001831f, -0.022515f, 0.014353f, 0.008059f, -0.005566f, -0.005683f, -0.015362f, -0.000237f, 0.008760f, -0.003805f, -0.013736f, -0.017793f, -0.003414f, -0.011653f, 0.014676f, 0.008341f, -0.007619f, -0.009854f, 0.018783f, 0.086671f, -0.004549f, -0.000539f, 0.036737f, 0.007091f, -0.119726f, -0.037664f, 0.084918f, 0.028222f, -0.025003f, -0.047723f, -0.006761f, -0.031547f, 0.043754f, 0.022711f, 0.008159f, -0.025311f, -0.056716f, 0.012098f, -0.097643f, -0.011978f, 0.047643f, 0.065074f, -0.007595f, -0.055361f, -0.037745f, -0.114249f, 0.033446f, -0.019884f, 0.044647f, 0.033745f, -0.032530f, -0.023677f, -0.101410f, -0.076171f, 0.039551f, 0.107924f, 0.043040f, 0.051232f, -0.036047f, -0.064244f, -0.061675f, -0.025880f, 0.091696f, 0.123572f, 0.064396f, -0.143746f, -0.052761f, -0.110165f, - -0.058962f, 0.136458f, 0.033196f, 0.030223f, -0.018210f, -0.131511f, -0.107727f, -0.108064f, -0.020168f, 0.010428f, 0.067998f, -0.025320f, 0.051708f, -0.104298f, 0.064735f, 0.025892f, 0.007823f, 0.131039f, 0.008338f, -0.012151f, -0.006350f, -0.177872f, -0.054414f, -0.012118f, 0.055934f, 0.029175f, 0.025529f, 0.078453f, -0.083985f, 0.005376f, -0.055601f, 0.060520f, 0.043660f, 0.004165f, 0.012016f, 0.012870f, -0.009984f, 0.035986f, 0.019227f, 0.009547f, 0.030589f, -0.020930f, -0.039156f, 0.009483f, 0.027975f, 0.042577f, 0.035030f, 0.023152f, -0.029417f, -0.047583f, -0.066739f, -0.005968f, 0.004697f, 0.053939f, 0.066779f, -0.010068f, -0.050982f, -0.087507f, -0.042086f, 0.006241f, 0.066807f, 0.107369f, 0.027897f, -0.105027f, -0.107889f, -0.110034f, -0.001293f, 0.089770f, 0.078942f, 0.083400f, -0.028102f, -0.040606f, -0.078369f, -0.078992f, 0.028861f, 0.053424f, 0.069533f, 0.035374f, -0.055308f, -0.052133f, -0.029612f, -0.008220f, 0.064510f, 0.034301f, 0.010561f, -0.002883f, -0.039754f, -0.028531f, -0.006038f, 0.007951f, -0.051391f, 0.098622f, 0.042326f, 0.045204f, -0.122174f, 0.024497f, - -0.170190f, -0.037625f, -0.000513f, 0.024025f, 0.009743f, -0.109088f, 0.059022f, -0.030301f, -0.019701f, -0.020600f, -0.023268f, -0.026814f, -0.033801f, 0.071316f, -0.020508f, -0.061454f, 0.019506f, -0.017472f, 0.007425f, 0.034334f, -0.069377f, -0.024904f, -0.004363f, 0.028954f, 0.002890f, 0.078458f, -0.006774f, -0.045055f, 0.103623f, -0.087884f, 0.051201f, -0.081509f, -0.027026f, 0.039612f, -0.066229f, 0.004735f, 0.047835f, -0.025118f, -0.005814f, -0.005023f, 0.061622f, 0.094091f, 0.054383f, -0.031784f, -0.013159f, -0.014814f, 0.005858f, 0.030166f, -0.012602f, -0.018823f, 0.018199f, 0.009622f, -0.170886f, -0.006961f, -0.006447f, 0.024773f, 0.021090f, 0.001033f, 0.000140f, 0.048500f, -0.053892f, -0.013893f, -0.005385f, 0.036944f, -0.137241f, -0.019298f, 0.123740f, -0.031831f, -0.050143f, -0.000527f, 0.093593f, -0.017336f, -0.022621f, 0.025467f, -0.037102f, -0.038713f, 0.057728f, 0.089627f, -0.032699f, -0.045648f, 0.015244f, 0.026835f, -0.014445f, -0.048115f, -0.001260f, 0.006920f, -0.010027f, -0.007046f, -0.015295f, -0.020972f, 0.009565f, 0.000641f, -0.019513f, -0.003504f, -0.001035f, -0.000733f, - -0.018021f, 0.010182f, -0.024034f, -0.025167f, -0.015047f, -0.015383f, 0.022950f, -0.003402f, -0.005259f, -0.000548f, -0.013638f, 0.019238f, -0.025541f, 0.007268f, 0.000337f, 0.001822f, 0.017066f, -0.000808f, -0.030640f, 0.003491f, -0.008401f, 0.005704f, 0.003711f, -0.027187f, 0.042432f, -0.011254f, -0.004502f, -0.004076f, 0.003480f, 0.010914f, -0.001464f, -0.009963f, -0.022765f, -0.041557f, -0.125027f, -0.102708f, 0.089755f, 0.076513f, 0.007001f, 0.081743f, -0.089613f, -0.005444f, -0.172778f, -0.061545f, -0.030827f, 0.083290f, 0.075802f, 0.046359f, -0.069729f, -0.024165f, -0.003336f, -0.033390f, 0.016097f, 0.029951f, 0.038963f, 0.052139f, -0.040257f, 0.029105f, -0.074930f, -0.047499f, -0.012107f, -0.016146f, 0.001697f, 0.049139f, -0.059219f, 0.050628f, -0.023058f, -0.033006f, -0.013310f, 0.004535f, -0.074270f, -0.001883f, -0.067268f, -0.025254f, -0.026300f, -0.063913f, 0.087264f, 0.039965f, 0.019604f, 0.021169f, -0.017213f, -0.089523f, -0.132591f, -0.077563f, -0.078090f, 0.052589f, 0.012359f, 0.056702f, 0.079134f, 0.065205f, -0.021687f, 0.015479f, -0.045956f, -0.035328f, -0.042003f, 0.032534f, - -0.044501f, -0.002331f, -0.042482f, -0.043898f, -0.027722f, 0.051332f, -0.041752f, -0.011907f, 0.003943f, -0.006134f, -0.060109f, -0.064658f, -0.039314f, -0.023310f, -0.087079f, -0.051889f, 0.012902f, 0.052086f, 0.054353f, 0.069408f, -0.004782f, -0.056952f, -0.073747f, -0.056749f, 0.028598f, 0.009036f, -0.009357f, 0.033685f, 0.085556f, 0.022592f, 0.022648f, -0.021894f, -0.016525f, -0.028429f, -0.017481f, -0.009286f, -0.027577f, -0.006503f, 0.032303f, -0.007173f, -0.014652f, -0.026622f, -0.029629f, -0.033281f, -0.010117f, 0.015993f, -0.009149f, 0.006778f, 0.003723f, -0.059803f, 0.006173f, -0.028571f, 0.024690f, 0.047861f, -0.024456f, 0.033037f, -0.004514f, 0.007993f, 0.000822f, -0.047295f, -0.007818f, -0.015452f, -0.012577f, 0.043052f, -0.027456f, -0.186219f, -0.252401f, -0.238497f, -0.226844f, -0.271955f, -0.045485f, -0.075187f, 0.048280f, 0.076965f, 0.243561f, 0.156475f, 0.206492f, 0.284566f, 0.312888f, 0.213615f, 0.271829f, 0.154735f, 0.072132f, -0.010854f, -0.051030f, -0.069331f, -0.114757f, -0.112634f, -0.155654f, -0.065806f, -0.057258f, -0.146436f, -0.109346f, -0.104699f, -0.119082f, -0.193754f, - -0.131974f, -0.101587f, -0.081590f, -0.149109f, -0.020782f, -0.044648f, -0.061999f, -0.144390f, -0.133372f, -0.109943f, -0.094010f, -0.068249f, -0.027760f, -0.091784f, 0.026582f, 0.047671f, -0.071860f, 0.080617f, 0.111961f, 0.107585f, 0.195229f, 0.158664f, 0.122219f, 0.134520f, 0.135339f, 0.134312f, 0.205304f, 0.231027f, 0.227031f, 0.155387f, 0.244862f, 0.241798f, 0.251908f, 0.256168f, 0.290874f, 0.258210f, 0.272652f, 0.361795f, 0.184574f, 0.186398f, 0.188916f, 0.176055f, -0.008285f, 0.080469f, 0.101207f, -0.057899f, -0.031222f, -0.099833f, -0.183200f, -0.165777f, -0.175096f, -0.315409f, -0.231549f, -0.140778f, -0.246707f, -0.261083f, -0.215610f, -0.229635f, -0.227481f, -0.273048f, -0.250365f, -0.252662f, -0.236616f, -0.220670f, -0.201378f, -0.186289f, -0.186682f, -0.154981f, -0.130736f, -0.206620f, -0.031597f, -0.092848f, -0.106848f, -0.023980f, -0.013269f, -0.104523f, -0.013284f, -0.040307f, -0.015033f, 0.038660f, 0.046270f, 0.121532f, 0.072069f, 0.101625f, 0.112625f, 0.122649f, 0.111250f, 0.155381f, 0.151522f, 0.161391f, 0.150542f, 0.180696f, 0.185490f, 0.182178f, 0.147263f, 0.190493f, - 0.200058f, 0.155346f, 0.104665f, 0.101449f, 0.061446f, 0.053326f, 0.014509f, -0.006362f, -0.006027f, -0.032861f, -0.029664f, -0.022541f, -0.013109f, -0.029180f, -0.031515f, -0.029154f, -0.013646f, -0.029152f, -0.037362f, -0.021682f, -0.007412f, -0.025508f, -0.035189f, -0.028119f, -0.023837f, -0.037304f, -0.037951f, -0.028523f, -0.018317f, -0.015898f, -0.014920f}, - {-0.011750f, 0.014856f, -0.001147f, 0.005983f, 0.003010f, 0.007047f, -0.012611f, -0.006811f, 0.008090f, 0.003912f, 0.000082f, -0.007015f, 0.001429f, -0.019566f, -0.012601f, -0.000686f, -0.007514f, -0.008498f, 0.003480f, 0.015281f, 0.002558f, 0.011635f, -0.002704f, 0.011498f, -0.006877f, -0.006138f, -0.000774f, -0.010391f, 0.002053f, 0.005155f, -0.003761f, -0.000259f, 0.002687f, 0.000481f, 0.004677f, -0.000565f, -0.011122f, 0.003968f, -0.006898f, -0.005203f, 0.003110f, -0.006855f, -0.010380f, 0.010307f, -0.010891f, 0.009808f, 0.009156f, 0.006024f, -0.000508f, -0.012779f, -0.007445f, 0.001423f, -0.002429f, 0.016414f, -0.010078f, 0.003980f, -0.001319f, 0.002155f, -0.012457f, -0.020781f, -0.003688f, -0.006253f, -0.006954f, -0.001654f, 0.008748f, -0.001924f, -0.009388f, 0.008191f, 0.003462f, -0.004185f, 0.006833f, -0.001363f, 0.002030f, -0.009580f, -0.000817f, -0.002410f, -0.000186f, 0.003636f, -0.004408f, 0.002940f, -0.008776f, 0.005876f, -0.001406f, 0.000600f, -0.003232f, -0.002919f, -0.000006f, 0.003558f, 0.001269f, -0.000153f, 0.001333f, -0.000093f, -0.005309f, 0.001493f, 0.000380f, 0.003281f, - -0.000582f, 0.000086f, -0.000065f, 0.000049f, -0.000387f, -0.001916f, 0.007975f, 0.007954f, 0.001127f, 0.014345f, -0.000163f, 0.006194f, 0.007709f, -0.000094f, -0.007001f, 0.000732f, -0.009947f, -0.012741f, -0.004836f, -0.014519f, -0.014985f, -0.004882f, 0.009850f, -0.003524f, -0.003413f, -0.007806f, -0.001975f, -0.013647f, 0.006668f, -0.003825f, 0.003368f, 0.008186f, 0.002777f, -0.002877f, 0.005629f, 0.005335f, -0.006660f, 0.004622f, 0.000614f, 0.001232f, 0.004991f, -0.011906f, -0.005137f, 0.008427f, -0.005406f, -0.000398f, -0.003439f, 0.009353f, -0.011991f, -0.001002f, -0.010043f, 0.006507f, -0.000597f, -0.000741f, 0.009073f, -0.003926f, -0.004360f, -0.003140f, -0.008480f, 0.000602f, -0.003841f, -0.000678f, 0.000561f, 0.005768f, 0.005864f, 0.001971f, -0.002605f, -0.010014f, -0.016376f, -0.005081f, -0.001138f, -0.004051f, 0.008802f, -0.003555f, -0.005049f, 0.007023f, -0.004526f, -0.007028f, 0.015541f, -0.003381f, -0.008693f, -0.000785f, 0.001427f, -0.002608f, 0.007666f, -0.000997f, -0.006852f, 0.000098f, 0.000301f, -0.001480f, -0.002064f, 0.006095f, 0.001377f, 0.000859f, -0.003637f, 0.000757f, - -0.001108f, 0.000411f, 0.002378f, -0.000535f, 0.001348f, 0.002828f, 0.000357f, -0.000574f, -0.000610f, 0.001198f, -0.003455f, -0.001292f, -0.000691f, -0.001595f, 0.001437f, 0.001191f, -0.000567f, 0.016649f, -0.010586f, -0.004991f, -0.007660f, 0.006186f, 0.001199f, -0.000742f, 0.012010f, 0.002893f, 0.003521f, -0.017399f, 0.003213f, -0.008109f, -0.009443f, -0.012265f, -0.000197f, 0.000457f, 0.014581f, -0.011897f, 0.005518f, -0.004980f, 0.018028f, -0.006483f, -0.005968f, 0.012842f, -0.004900f, 0.004445f, 0.001939f, -0.000832f, 0.002123f, -0.008580f, 0.001401f, 0.000426f, 0.003641f, 0.016962f, 0.005908f, 0.001604f, -0.007230f, 0.005950f, -0.013162f, -0.003631f, -0.002518f, 0.007234f, 0.006167f, 0.010259f, 0.006717f, -0.007651f, -0.011285f, -0.004901f, 0.008628f, -0.001033f, 0.004481f, -0.001789f, -0.001242f, 0.017249f, 0.004067f, -0.001280f, -0.020554f, -0.009142f, 0.000539f, 0.007180f, 0.011004f, 0.015507f, 0.008674f, -0.003709f, 0.002780f, -0.003762f, -0.005255f, 0.011136f, -0.006993f, 0.011465f, 0.000527f, -0.010292f, 0.003727f, -0.005288f, 0.008930f, -0.007630f, -0.000872f, 0.007790f, - 0.008908f, -0.008895f, -0.003420f, -0.001648f, -0.003653f, 0.005397f, -0.001196f, -0.003783f, 0.002478f, 0.001328f, 0.001365f, 0.001540f, 0.002162f, 0.001205f, 0.001294f, 0.000610f, -0.000639f, -0.000741f, -0.003302f, 0.005179f, -0.000196f, 0.000346f, 0.000593f, 0.000117f, 0.000822f, 0.002784f, 0.002674f, -0.000083f, -0.000697f, 0.003462f, 0.002610f, 0.002085f, 0.008730f, -0.002091f, -0.001463f, -0.003222f, -0.010219f, 0.000397f, 0.007339f, 0.007311f, 0.013676f, 0.006269f, -0.017960f, -0.015002f, -0.013019f, 0.000538f, -0.002206f, 0.000953f, -0.007093f, -0.004407f, -0.001104f, 0.005452f, -0.000074f, -0.011507f, 0.012433f, -0.001777f, -0.011553f, 0.002365f, 0.002728f, -0.000237f, -0.001110f, 0.004998f, 0.006583f, -0.004121f, 0.010062f, 0.000499f, 0.005895f, -0.013724f, 0.009762f, 0.003472f, 0.005629f, -0.009446f, -0.001038f, 0.006905f, 0.005909f, 0.014987f, -0.000561f, -0.020698f, -0.005662f, -0.009915f, 0.004849f, 0.003352f, -0.000859f, -0.005527f, 0.001579f, -0.008489f, -0.003009f, -0.015457f, -0.009099f, -0.000522f, 0.008605f, 0.009604f, -0.006937f, -0.005938f, -0.006079f, 0.009871f, - -0.003372f, -0.001217f, -0.014845f, 0.008944f, -0.014652f, -0.005089f, -0.000640f, -0.003099f, -0.003983f, 0.015583f, -0.001331f, -0.003624f, -0.004176f, 0.003091f, -0.009398f, 0.001080f, -0.016295f, -0.013096f, 0.004767f, -0.004573f, -0.002438f, 0.005820f, -0.002955f, 0.007765f, 0.001526f, 0.003566f, 0.005464f, -0.001463f, 0.002637f, 0.001782f, 0.001005f, -0.001150f, 0.001994f, 0.000807f, 0.000488f, -0.001214f, -0.001287f, 0.000317f, -0.004778f, -0.000091f, 0.002989f, 0.000716f, -0.000190f, 0.000566f, -0.002935f, -0.000949f, 0.001783f, -0.000878f, 0.004156f, -0.005401f, 0.007648f, -0.006150f, 0.000006f, 0.010556f, 0.019220f, 0.013297f, 0.002854f, -0.015049f, -0.011292f, 0.004039f, -0.002584f, -0.009651f, -0.003169f, -0.012432f, -0.005346f, 0.024980f, 0.002887f, -0.002661f, -0.004654f, 0.000015f, -0.005814f, -0.004020f, 0.016889f, -0.017526f, -0.002068f, 0.001731f, -0.003750f, 0.004400f, 0.010215f, -0.004694f, -0.005771f, 0.002584f, -0.007179f, -0.007004f, -0.016297f, -0.006036f, 0.004389f, -0.014589f, -0.002446f, 0.007240f, 0.010990f, 0.003911f, -0.022886f, -0.006905f, 0.004598f, 0.011536f, - -0.008979f, 0.019908f, -0.002321f, -0.010104f, -0.005638f, -0.004310f, -0.007868f, 0.010822f, -0.008095f, -0.002159f, -0.010690f, -0.008386f, -0.003925f, -0.008528f, 0.011442f, -0.004212f, -0.022943f, 0.008762f, 0.015391f, 0.000205f, 0.005561f, -0.027882f, 0.021757f, 0.000394f, -0.018284f, 0.001844f, -0.012352f, -0.002620f, 0.001928f, -0.013270f, -0.015571f, 0.010339f, 0.004830f, -0.013482f, -0.000929f, 0.000334f, -0.008350f, -0.001057f, -0.003093f, 0.002072f, -0.007413f, -0.003825f, -0.001477f, -0.003692f, -0.001889f, -0.005450f, 0.001771f, -0.000371f, 0.002782f, -0.005926f, 0.001375f, 0.003329f, -0.000102f, -0.003375f, 0.002147f, -0.003277f, 0.003085f, 0.002517f, -0.002527f, 0.002454f, -0.000485f, -0.001744f, -0.000832f, 0.000844f, 0.001166f, 0.000698f, -0.020632f, 0.004657f, -0.015187f, 0.016241f, 0.004146f, -0.006171f, -0.012255f, -0.021483f, -0.009328f, -0.015551f, 0.005391f, 0.030070f, 0.005151f, -0.007787f, -0.000430f, -0.004096f, -0.004598f, -0.013516f, -0.008875f, -0.013916f, 0.003813f, -0.001022f, 0.003100f, -0.004852f, 0.002355f, -0.014707f, -0.000969f, 0.003399f, -0.009976f, -0.003664f, - 0.001310f, -0.005437f, 0.001493f, -0.005003f, 0.022242f, -0.027098f, -0.004782f, 0.002225f, 0.007347f, -0.002775f, -0.011093f, -0.016612f, -0.011750f, 0.008947f, -0.002323f, 0.009923f, -0.008393f, 0.025737f, 0.003425f, -0.004966f, -0.000196f, -0.015256f, -0.019475f, -0.009847f, 0.007467f, -0.016655f, -0.000949f, 0.019601f, -0.000482f, -0.009258f, -0.018525f, -0.031414f, 0.001372f, 0.016138f, -0.004397f, 0.018516f, -0.001606f, -0.005789f, -0.011539f, -0.010260f, 0.001874f, 0.007356f, -0.005854f, 0.026845f, 0.008183f, -0.008615f, 0.004206f, -0.011027f, 0.004130f, 0.005077f, -0.003614f, 0.005819f, 0.010955f, 0.004624f, 0.000580f, -0.007205f, -0.019650f, 0.001327f, -0.004405f, -0.001989f, -0.002934f, 0.001419f, 0.000501f, -0.000259f, -0.008644f, 0.001375f, -0.004926f, 0.001637f, -0.004852f, -0.001639f, -0.001211f, -0.000455f, -0.000372f, -0.000955f, -0.003464f, -0.003172f, -0.003802f, -0.005704f, -0.005992f, -0.002541f, 0.000383f, 0.001595f, -0.003111f, -0.000098f, 0.000257f, 0.000589f, -0.002350f, 0.017643f, -0.007749f, -0.020407f, -0.005582f, -0.015242f, -0.007933f, -0.006624f, 0.021616f, -0.005435f, - -0.007236f, -0.009128f, 0.013898f, 0.012480f, 0.011034f, 0.030483f, 0.031950f, 0.014783f, 0.019864f, -0.007489f, -0.009180f, 0.013199f, 0.019601f, -0.008519f, 0.008624f, 0.006037f, -0.017003f, -0.016121f, 0.009524f, -0.002375f, -0.000196f, -0.016088f, -0.020403f, -0.004874f, -0.016536f, 0.018718f, 0.035033f, 0.007218f, 0.013837f, 0.004012f, -0.004102f, 0.012497f, -0.023903f, -0.006407f, 0.004994f, 0.013317f, -0.007859f, -0.019331f, 0.028228f, -0.000066f, -0.008646f, -0.006906f, 0.011594f, -0.003470f, 0.010338f, -0.007064f, 0.016214f, -0.001366f, -0.000406f, 0.020000f, 0.006237f, 0.009223f, 0.003613f, -0.003055f, 0.014961f, -0.022767f, -0.009113f, 0.008514f, 0.025771f, -0.015669f, -0.001809f, -0.003197f, -0.003617f, -0.010737f, -0.002354f, -0.005571f, -0.007373f, -0.001054f, 0.001742f, 0.007281f, -0.003017f, 0.020679f, 0.007544f, -0.011866f, -0.002855f, 0.001550f, 0.007902f, 0.002800f, -0.003581f, -0.007156f, -0.001556f, 0.004576f, -0.004601f, -0.004027f, -0.003520f, 0.004247f, 0.002648f, 0.004195f, 0.002189f, -0.003800f, -0.001505f, 0.000133f, -0.003839f, -0.000654f, 0.003010f, 0.001873f, - -0.000473f, -0.004260f, 0.005648f, -0.000761f, 0.003516f, -0.002370f, 0.001725f, -0.004950f, -0.000480f, -0.000714f, 0.000239f, -0.003294f, 0.012772f, -0.012498f, -0.004837f, 0.011532f, -0.008951f, 0.005001f, 0.008696f, -0.017061f, -0.018204f, 0.005224f, 0.014000f, -0.004729f, 0.012782f, -0.009255f, -0.004069f, 0.024317f, -0.027514f, 0.016629f, -0.007810f, 0.000219f, 0.000776f, 0.030022f, -0.006637f, 0.005948f, 0.009575f, 0.016551f, 0.009704f, 0.014502f, -0.002372f, -0.002307f, 0.004763f, 0.002352f, 0.002445f, -0.014461f, 0.022544f, -0.030001f, -0.006577f, -0.007882f, 0.016804f, -0.003360f, 0.020471f, -0.000918f, 0.001960f, -0.035703f, -0.009772f, 0.021801f, 0.037057f, -0.000315f, -0.018346f, -0.015459f, 0.015238f, 0.012255f, 0.009228f, 0.008750f, -0.015723f, -0.007187f, -0.009090f, 0.004836f, 0.000701f, -0.009655f, 0.005732f, 0.005000f, -0.004488f, -0.004931f, -0.021529f, -0.005658f, -0.007881f, 0.030841f, 0.002852f, 0.005836f, 0.011711f, 0.000954f, -0.024097f, 0.001232f, -0.014496f, 0.012075f, 0.028802f, -0.015226f, 0.008926f, -0.004360f, -0.014906f, 0.007252f, -0.012491f, -0.002135f, - 0.005251f, 0.003901f, 0.006614f, 0.002811f, -0.001016f, -0.005442f, 0.006258f, 0.013519f, 0.002293f, 0.006714f, 0.011121f, 0.004969f, 0.012570f, -0.003761f, 0.011890f, 0.000624f, 0.000302f, 0.002614f, 0.001350f, 0.003438f, -0.000341f, -0.005805f, -0.003224f, 0.000278f, 0.003199f, 0.003371f, -0.002261f, 0.005777f, 0.005469f, -0.004563f, 0.007724f, 0.013009f, -0.022385f, -0.008618f, -0.008422f, 0.004255f, -0.001291f, 0.033299f, -0.004187f, 0.001156f, 0.021139f, -0.018863f, -0.013696f, -0.017686f, -0.018511f, -0.004503f, -0.000683f, 0.008302f, 0.035621f, -0.003280f, -0.020508f, 0.036870f, 0.000604f, 0.010298f, 0.025212f, 0.017363f, 0.023529f, -0.006185f, 0.018587f, -0.012036f, 0.024632f, 0.021507f, -0.005844f, 0.011189f, -0.009919f, -0.009244f, 0.009301f, 0.028155f, 0.012693f, 0.011104f, 0.003989f, -0.009043f, -0.015584f, -0.015906f, 0.002569f, 0.019335f, -0.011288f, -0.013636f, -0.016688f, -0.006394f, -0.033075f, -0.007820f, 0.006335f, -0.024367f, 0.011745f, 0.001658f, -0.011092f, -0.028616f, -0.019088f, -0.000045f, -0.037865f, 0.011787f, 0.008376f, -0.000928f, 0.010544f, 0.006767f, - -0.003700f, -0.019821f, -0.011955f, -0.002325f, -0.012503f, 0.011551f, -0.013102f, 0.031243f, -0.021117f, 0.001001f, 0.013762f, 0.001094f, -0.009445f, -0.036306f, 0.006299f, 0.017605f, 0.004289f, 0.000904f, 0.019619f, 0.010689f, -0.011253f, -0.000130f, -0.001313f, 0.001321f, -0.000805f, -0.006407f, -0.012751f, -0.003964f, -0.013775f, 0.000611f, 0.003441f, 0.001518f, -0.003570f, -0.007289f, -0.003302f, -0.004927f, 0.005980f, 0.001625f, 0.007825f, 0.005394f, 0.004494f, 0.001536f, -0.000648f, -0.002908f, -0.002424f, -0.006439f, 0.002873f, 0.000200f, 0.002862f, -0.003229f, -0.000416f, -0.005441f, 0.000333f, -0.004310f, 0.001613f, -0.046225f, 0.016240f, 0.021118f, 0.037146f, -0.000101f, -0.027583f, 0.007796f, 0.013295f, -0.028552f, -0.029699f, -0.018552f, -0.000730f, 0.015873f, -0.000816f, -0.011620f, -0.000604f, -0.010165f, -0.006849f, -0.018398f, 0.030753f, 0.024037f, 0.009047f, -0.037687f, -0.011294f, 0.006087f, -0.002141f, -0.008373f, 0.047738f, 0.017514f, 0.015005f, 0.014077f, 0.022663f, 0.017028f, 0.004148f, 0.017828f, -0.001206f, -0.029601f, 0.016044f, -0.030450f, 0.009323f, -0.030145f, - 0.025501f, -0.007945f, 0.030790f, -0.016761f, 0.007490f, -0.013549f, 0.011105f, 0.018044f, 0.046993f, 0.009972f, -0.059733f, -0.003124f, -0.008304f, 0.012872f, 0.026117f, -0.005241f, -0.011593f, 0.019230f, -0.003380f, -0.009375f, 0.025727f, 0.001678f, -0.001130f, 0.001354f, 0.011024f, 0.020621f, 0.016301f, -0.017628f, -0.013133f, -0.011102f, -0.017925f, 0.004258f, -0.001650f, 0.020391f, 0.014627f, -0.027385f, -0.006610f, -0.015466f, 0.013325f, -0.007499f, -0.007323f, 0.004865f, 0.000900f, -0.010511f, 0.009076f, 0.002276f, 0.001514f, -0.001496f, 0.005163f, 0.005409f, 0.000856f, -0.015466f, 0.004343f, 0.002784f, -0.001993f, -0.002667f, -0.005163f, 0.000274f, -0.006909f, 0.003281f, 0.007796f, -0.002294f, -0.002317f, 0.007729f, 0.001194f, -0.007051f, -0.005471f, -0.001203f, 0.003722f, -0.003024f, -0.000748f, -0.004302f, 0.001170f, -0.002847f, 0.000029f, 0.007439f, -0.004932f, 0.050323f, -0.019099f, -0.033569f, -0.010701f, 0.013088f, -0.008317f, 0.024175f, 0.034983f, -0.014098f, 0.032082f, 0.020642f, 0.016116f, -0.005322f, -0.003893f, -0.006487f, 0.031118f, 0.005678f, 0.003728f, -0.018147f, - 0.007868f, -0.009491f, -0.000819f, -0.029960f, 0.020267f, -0.027493f, 0.000101f, -0.019396f, 0.032460f, -0.016617f, 0.000700f, 0.032083f, 0.024373f, 0.016481f, -0.001989f, -0.012753f, 0.014893f, -0.000480f, -0.002910f, -0.041000f, -0.012199f, -0.024769f, -0.020141f, -0.015711f, -0.007429f, 0.021302f, 0.013366f, 0.012419f, 0.000026f, 0.031357f, -0.016640f, 0.033182f, 0.029156f, 0.031299f, 0.054742f, -0.021184f, -0.016551f, 0.024070f, 0.004507f, -0.021262f, 0.033020f, -0.010884f, -0.015983f, 0.010711f, -0.004116f, -0.011475f, -0.009489f, 0.014179f, -0.019196f, 0.008675f, -0.011906f, 0.030333f, -0.012944f, 0.000454f, 0.008827f, 0.022110f, 0.030048f, 0.002384f, -0.026308f, -0.028573f, 0.009294f, -0.019048f, -0.061292f, -0.032276f, 0.009734f, -0.000729f, 0.017676f, 0.002224f, -0.010086f, -0.001207f, -0.005875f, 0.002556f, -0.010672f, -0.004725f, -0.007341f, -0.003122f, 0.000789f, -0.001378f, -0.019182f, -0.005086f, -0.012583f, -0.011321f, -0.008893f, 0.003823f, -0.000942f, 0.000707f, -0.013987f, -0.009788f, -0.000581f, -0.000613f, 0.002658f, 0.007099f, 0.005839f, 0.004293f, -0.010087f, 0.000395f, - 0.002221f, -0.013063f, 0.004500f, 0.000662f, 0.005571f, 0.002457f, 0.007124f, 0.003942f, -0.003013f, 0.005968f, -0.004727f, -0.003590f, -0.046957f, -0.039694f, -0.001922f, 0.008335f, -0.027104f, 0.001198f, 0.002394f, 0.043644f, -0.028476f, -0.032579f, 0.010552f, -0.013734f, -0.000058f, -0.023808f, 0.022668f, -0.024189f, -0.032404f, -0.019610f, 0.037437f, -0.025551f, -0.020873f, -0.004819f, 0.015196f, -0.011209f, -0.026863f, 0.008319f, -0.010883f, 0.000144f, 0.012216f, -0.035440f, -0.002676f, 0.019605f, 0.031524f, -0.004806f, 0.048190f, 0.021115f, -0.005499f, 0.002126f, 0.021913f, -0.009044f, -0.019604f, 0.003701f, 0.026103f, 0.002892f, 0.012529f, 0.000568f, -0.021385f, 0.007372f, -0.046941f, 0.004253f, 0.002546f, -0.005998f, -0.027650f, -0.025116f, 0.003043f, -0.011467f, -0.018986f, -0.012733f, -0.015286f, 0.017946f, -0.030918f, -0.017664f, -0.008919f, 0.013431f, -0.018194f, 0.037887f, -0.005712f, -0.031879f, -0.002766f, -0.018987f, -0.050548f, -0.015137f, 0.003340f, -0.001559f, -0.032841f, -0.017553f, -0.007502f, 0.007464f, -0.019521f, -0.009707f, 0.032389f, -0.011546f, -0.044222f, -0.015576f, - 0.005717f, 0.003365f, 0.014524f, 0.012272f, 0.009162f, -0.010292f, -0.012854f, -0.003080f, -0.008984f, 0.006436f, 0.001937f, -0.005687f, 0.009456f, 0.003928f, 0.005555f, -0.003839f, 0.004550f, 0.003401f, -0.000036f, -0.001899f, -0.003283f, -0.004120f, 0.000072f, 0.002550f, -0.015727f, 0.003354f, -0.009054f, 0.010088f, 0.003731f, -0.011641f, -0.010306f, -0.000913f, -0.008160f, -0.001208f, 0.003308f, -0.002962f, -0.005513f, -0.008638f, -0.006566f, 0.004532f, 0.001671f, -0.009782f, 0.003637f, 0.001003f, -0.006513f, -0.005546f, 0.035853f, 0.032045f, 0.009609f, 0.065598f, -0.012183f, -0.022912f, -0.020528f, -0.009614f, -0.035334f, 0.047746f, -0.028597f, -0.010438f, -0.023162f, -0.011950f, -0.010885f, 0.005637f, -0.033602f, 0.000528f, 0.000394f, -0.004632f, 0.009560f, -0.035523f, -0.009016f, 0.024375f, -0.024181f, 0.001334f, -0.031294f, 0.030055f, 0.000195f, -0.053376f, -0.027680f, -0.009662f, -0.001125f, 0.014849f, -0.032398f, -0.018174f, 0.022287f, -0.003801f, 0.015404f, 0.014151f, 0.013990f, -0.019449f, 0.002204f, 0.023619f, 0.008765f, -0.044061f, 0.028449f, 0.020520f, -0.023775f, 0.067688f, - -0.001150f, -0.048570f, 0.013530f, 0.015356f, -0.000989f, 0.036128f, -0.010975f, -0.060341f, 0.017126f, 0.008663f, 0.018197f, 0.021429f, -0.027466f, 0.043674f, 0.016564f, 0.013589f, -0.010243f, 0.066135f, -0.004930f, 0.001150f, 0.045279f, -0.007701f, 0.020742f, 0.035731f, 0.012407f, 0.005338f, -0.008407f, 0.017179f, 0.000914f, 0.030212f, -0.013090f, 0.029409f, 0.027157f, 0.001654f, 0.026877f, 0.015984f, 0.021459f, -0.010827f, 0.000140f, 0.024409f, 0.017803f, 0.013115f, 0.008077f, 0.008357f, -0.015887f, -0.001882f, 0.001014f, -0.007516f, 0.001254f, -0.002725f, -0.006658f, 0.014145f, -0.014271f, -0.002749f, -0.013991f, 0.012327f, -0.005802f, 0.014772f, -0.012313f, 0.002060f, -0.008489f, -0.012434f, 0.008930f, -0.004744f, -0.000023f, -0.012136f, -0.017723f, -0.013376f, 0.014252f, 0.001334f, -0.005428f, 0.001470f, 0.017678f, 0.012593f, -0.004924f, 0.006107f, 0.000571f, -0.004875f, 0.018290f, 0.000634f, 0.013213f, -0.046805f, -0.045939f, 0.094207f, 0.030382f, -0.058862f, -0.029609f, -0.027007f, -0.053908f, -0.004018f, -0.028459f, 0.039231f, -0.022205f, 0.000181f, 0.048928f, 0.001040f, - 0.008110f, -0.036060f, 0.045108f, 0.033624f, -0.000614f, -0.010900f, -0.003548f, -0.028037f, 0.002098f, 0.003549f, 0.005692f, -0.038522f, -0.005641f, -0.002240f, -0.011627f, -0.008586f, -0.026583f, 0.025140f, 0.049785f, 0.059839f, -0.004913f, -0.024253f, -0.010153f, -0.012406f, -0.008428f, -0.036741f, 0.012457f, 0.014346f, 0.013134f, -0.038286f, -0.051138f, 0.055225f, 0.020816f, 0.030927f, 0.040074f, 0.037617f, -0.016354f, -0.025725f, 0.036257f, -0.036946f, 0.018695f, -0.027652f, -0.021261f, -0.012335f, 0.043145f, -0.014320f, 0.008727f, 0.014852f, -0.007927f, -0.034930f, 0.072175f, -0.043667f, 0.004429f, 0.052330f, -0.047420f, -0.021420f, 0.005512f, 0.019156f, 0.053730f, 0.009660f, -0.031260f, 0.000918f, 0.006494f, -0.007279f, -0.013165f, 0.007778f, -0.021917f, 0.016784f, -0.018156f, -0.025358f, 0.013631f, 0.007749f, 0.019289f, 0.008764f, -0.000782f, -0.008759f, 0.002110f, 0.005479f, 0.005897f, 0.020774f, -0.001275f, 0.002934f, 0.012786f, -0.030588f, 0.004327f, -0.013740f, 0.003283f, 0.003497f, -0.005039f, -0.011526f, -0.014471f, -0.003433f, -0.014524f, 0.005750f, 0.007747f, 0.017804f, - -0.001654f, -0.011766f, 0.011202f, 0.013824f, 0.008258f, 0.008490f, -0.022163f, 0.000870f, 0.005462f, -0.005371f, 0.018883f, -0.007020f, 0.001325f, 0.002126f, 0.017426f, -0.008257f, 0.005139f, 0.024448f, -0.015739f, 0.015314f, 0.062728f, 0.037784f, -0.005724f, -0.040261f, 0.004156f, 0.064326f, 0.051208f, 0.010743f, -0.051015f, -0.019682f, -0.044051f, -0.003336f, 0.034380f, 0.042482f, -0.003175f, 0.016114f, 0.050502f, 0.053750f, 0.083434f, 0.083987f, -0.042018f, 0.018233f, -0.045369f, -0.008251f, -0.036790f, -0.013254f, 0.028909f, -0.006540f, 0.012625f, 0.011331f, -0.026158f, -0.019178f, 0.021259f, 0.023708f, 0.030778f, 0.021859f, -0.001098f, 0.022537f, 0.033977f, -0.018076f, 0.017179f, 0.020014f, 0.005921f, 0.019544f, 0.065058f, -0.048996f, -0.042187f, -0.009547f, 0.040178f, 0.038494f, -0.022967f, -0.000356f, 0.061754f, 0.049928f, -0.035088f, -0.023428f, 0.021182f, -0.042845f, 0.011839f, -0.020654f, -0.038866f, 0.012470f, -0.045656f, 0.047297f, 0.017339f, 0.052399f, -0.022100f, -0.030767f, -0.059342f, -0.012909f, 0.019300f, -0.052022f, -0.044503f, -0.024415f, 0.023143f, 0.013657f, - 0.010853f, -0.022970f, 0.009859f, -0.016468f, 0.006228f, 0.048158f, -0.020613f, 0.005565f, -0.027447f, 0.020615f, -0.011364f, -0.023098f, 0.016147f, 0.022412f, -0.012615f, -0.006597f, -0.007508f, 0.016055f, 0.035900f, -0.011655f, -0.024289f, 0.000395f, -0.000540f, -0.009101f, -0.003945f, -0.033685f, 0.004545f, -0.017972f, -0.008097f, 0.011996f, -0.011064f, -0.006128f, -0.001112f, -0.009467f, 0.014661f, -0.014910f, -0.023374f, -0.021243f, -0.017888f, 0.018682f, 0.009793f, -0.004513f, 0.008205f, 0.005420f, -0.015208f, -0.016646f, 0.005967f, -0.029357f, 0.024770f, 0.063113f, -0.004057f, -0.019523f, 0.040532f, 0.008343f, -0.002315f, -0.060067f, 0.052792f, -0.026037f, -0.057062f, -0.019384f, 0.003889f, 0.065815f, 0.006331f, 0.047167f, 0.019146f, -0.055835f, -0.012114f, -0.049464f, 0.007972f, -0.049305f, -0.035432f, -0.021163f, 0.002513f, 0.010380f, -0.038193f, 0.037523f, -0.012075f, 0.022806f, 0.024537f, 0.024265f, 0.045541f, 0.083025f, 0.048745f, -0.015834f, -0.040806f, -0.001420f, 0.087443f, 0.054466f, -0.029733f, 0.043525f, -0.016736f, 0.053164f, -0.026377f, 0.005169f, -0.019739f, -0.009802f, - -0.002947f, -0.014930f, 0.131405f, -0.024986f, -0.036231f, -0.041911f, -0.058918f, -0.022675f, -0.045404f, -0.002020f, 0.050801f, -0.020217f, 0.015025f, -0.016901f, -0.025882f, 0.046192f, -0.012820f, 0.077813f, 0.014444f, 0.062244f, -0.076002f, 0.031323f, 0.133587f, 0.048611f, -0.074466f, 0.044359f, 0.040640f, 0.002461f, 0.008646f, -0.022818f, 0.025472f, 0.117261f, 0.062380f, 0.026330f, 0.035592f, -0.036658f, 0.067891f, -0.007079f, 0.010464f, 0.010789f, 0.016788f, 0.007893f, 0.044671f, -0.036855f, -0.009169f, 0.003240f, 0.056942f, -0.009575f, 0.013995f, 0.065940f, -0.005146f, -0.036642f, -0.008437f, 0.024272f, 0.004045f, -0.015473f, -0.037130f, 0.021667f, 0.015557f, -0.025555f, -0.014991f, 0.017787f, -0.031402f, -0.026115f, 0.008556f, 0.013142f, -0.000057f, 0.009149f, 0.006235f, 0.010691f, -0.011471f, 0.011182f, -0.006961f, -0.009323f, 0.010323f, 0.004471f, 0.014263f, 0.002210f, 0.091285f, 0.042595f, 0.010136f, -0.002913f, -0.099757f, 0.046400f, 0.062583f, -0.045215f, -0.032881f, 0.077275f, 0.050418f, -0.062061f, -0.065808f, 0.002180f, -0.038476f, 0.016584f, 0.006343f, 0.015816f, - -0.061839f, 0.015994f, -0.012030f, -0.030966f, 0.054927f, -0.004005f, -0.009145f, 0.018280f, 0.046071f, 0.041197f, 0.028336f, -0.053110f, 0.001176f, -0.026031f, -0.056362f, 0.020323f, 0.015998f, 0.034502f, -0.011872f, -0.026543f, 0.072208f, -0.052062f, 0.022933f, 0.024798f, 0.020455f, 0.015214f, -0.008890f, 0.042359f, -0.039471f, -0.068619f, -0.011384f, -0.078568f, 0.068793f, 0.041888f, 0.067515f, -0.005785f, 0.013382f, -0.054775f, 0.056731f, 0.071026f, 0.025738f, -0.030733f, -0.079873f, -0.018792f, -0.105409f, 0.001152f, -0.019514f, -0.072004f, -0.060593f, 0.027376f, 0.004597f, 0.043594f, -0.033904f, 0.050027f, 0.042643f, -0.060366f, 0.012862f, -0.036263f, -0.009947f, -0.054607f, 0.007064f, 0.157034f, 0.039490f, 0.045703f, 0.057915f, 0.025218f, -0.044515f, -0.006690f, -0.000434f, 0.036824f, -0.008374f, 0.037843f, -0.017194f, -0.024260f, 0.001150f, -0.003272f, -0.043949f, 0.037376f, -0.006799f, -0.011450f, -0.013473f, -0.031577f, 0.004680f, -0.015251f, -0.019527f, -0.029412f, -0.022392f, 0.013374f, -0.016101f, 0.013073f, 0.015923f, -0.011702f, -0.018160f, -0.025525f, 0.011638f, -0.005177f, - 0.010860f, 0.037309f, 0.023960f, -0.001130f, -0.002870f, 0.011471f, 0.024045f, -0.024201f, 0.021248f, -0.024402f, -0.010283f, -0.062411f, 0.028139f, 0.021600f, -0.029125f, 0.010959f, -0.014781f, -0.094118f, -0.024583f, 0.024048f, -0.010554f, 0.011078f, -0.052288f, 0.069504f, -0.090172f, 0.007824f, -0.065942f, 0.046807f, 0.051296f, 0.017301f, 0.042992f, 0.005437f, -0.043347f, 0.075401f, -0.034447f, 0.008611f, 0.001558f, -0.042207f, 0.071253f, 0.005694f, 0.018776f, 0.016305f, 0.022511f, 0.012586f, 0.053485f, 0.063393f, 0.021531f, 0.073941f, -0.063123f, -0.004048f, 0.000450f, 0.094327f, -0.017448f, 0.075388f, 0.042045f, 0.103283f, 0.020591f, -0.022356f, -0.032217f, 0.041581f, -0.076130f, 0.073161f, -0.043148f, -0.024877f, -0.011666f, 0.015482f, 0.055239f, -0.011913f, -0.098831f, -0.026684f, 0.161327f, 0.012835f, -0.100804f, 0.025949f, -0.066594f, 0.020867f, 0.158959f, -0.042668f, -0.042898f, 0.110938f, -0.118203f, 0.060892f, 0.027728f, 0.036807f, 0.103702f, 0.066214f, -0.091254f, 0.113905f, 0.074937f, 0.004379f, 0.120981f, -0.048525f, -0.015934f, 0.088183f, 0.058135f, 0.011433f, - 0.024094f, 0.000910f, -0.000480f, 0.011568f, 0.030652f, -0.026005f, 0.032363f, 0.033516f, -0.026273f, 0.015136f, 0.022786f, -0.037650f, -0.002793f, 0.015564f, -0.002809f, 0.008455f, 0.049966f, 0.001915f, 0.033580f, -0.016170f, 0.001318f, 0.024885f, -0.014007f, -0.011242f, -0.031360f, 0.006690f, 0.030366f, 0.020844f, 0.028666f, -0.050675f, 0.029969f, 0.035089f, 0.016369f, 0.007150f, 0.015056f, -0.001154f, 0.031892f, 0.056347f, 0.014574f, 0.027844f, 0.026307f, -0.011465f, -0.013329f, 0.027521f, 0.040123f, 0.054541f, 0.103982f, 0.051776f, -0.049859f, 0.066497f, 0.019930f, 0.059994f, -0.017282f, -0.111047f, 0.112909f, 0.098050f, 0.060248f, 0.185111f, -0.017265f, -0.155298f, -0.080299f, -0.073282f, 0.164174f, 0.120702f, 0.029180f, -0.010412f, -0.030006f, -0.108559f, -0.051582f, -0.035147f, -0.062403f, 0.167116f, 0.135548f, 0.188485f, 0.003498f, -0.215505f, -0.335706f, -0.163646f, 0.187043f, 0.252487f, 0.257751f, 0.103997f, -0.213655f, -0.392435f, -0.240710f, -0.121362f, 0.181108f, 0.308064f, 0.174886f, 0.095261f, 0.025450f, -0.138725f, -0.186651f, -0.139496f, -0.010526f, 0.108495f, - 0.219552f, 0.262673f, 0.046681f, 0.051579f, -0.208288f, -0.344995f, -0.184078f, 0.172355f, 0.288862f, 0.274111f, 0.171004f, -0.100115f, -0.335815f, -0.217121f, -0.281600f, 0.001428f, 0.191172f, 0.206989f, 0.103572f, -0.081571f, -0.176815f, -0.156293f, -0.123902f, 0.037185f, 0.117749f, 0.083333f, 0.238225f, 0.086647f, -0.053338f, -0.140215f, -0.052328f, 0.159443f, 0.231892f, 0.079025f, -0.009136f, -0.141152f, -0.028932f, -0.031082f, 0.091457f, 0.035597f, -0.023522f, -0.097133f, -0.029624f, 0.006498f, -0.016002f, -0.028354f, -0.006677f, 0.024391f, 0.049333f, 0.085085f, 0.040128f, -0.081270f, -0.073899f, -0.067557f, 0.016153f, 0.089688f, 0.097714f, 0.046909f, 0.010040f, -0.061187f, -0.027547f, -0.121293f, -0.109228f, -0.007720f, 0.031715f, 0.136898f, 0.202662f, 0.079096f, -0.071401f, -0.165559f, -0.209417f, -0.085564f, 0.163221f, 0.272700f, 0.185046f, 0.058719f, -0.136526f, -0.219047f, -0.109218f, 0.001847f, 0.039555f, 0.042535f, 0.093458f, 0.050695f, 0.020050f, -0.053549f, -0.120388f, -0.087259f, 0.011646f, -0.023407f, -0.060251f, 0.069727f, 0.010105f, -0.100807f, 0.013095f, -0.026171f, - -0.040360f, 0.030445f, -0.030870f, -0.012253f, -0.053796f, 0.003230f, -0.020398f, -0.040215f, 0.016422f, -0.004444f, 0.013823f, 0.006653f, 0.033859f, -0.032786f, -0.010723f, 0.010275f, 0.004057f, 0.015706f, -0.013619f, 0.033922f, -0.023377f, 0.023425f, 0.011507f, -0.010744f, -0.024549f, -0.010591f, -0.046387f, 0.051241f, -0.004090f, 0.001953f, -0.008322f, -0.011934f, 0.003390f, -0.001240f, 0.001921f, 0.019969f, 0.012384f, -0.000334f, 0.029259f, -0.024495f, 0.009486f, -0.023253f, 0.026394f, 0.015950f, -0.018760f, 0.013888f, -0.023038f, -0.026507f, -0.020942f, -0.041005f, -0.003788f, 0.031190f, -0.027567f, -0.055871f, -0.037745f, 0.003517f, 0.034842f, 0.000847f, 0.026141f, -0.053196f, -0.013386f, -0.006091f, -0.004243f, -0.052040f, -0.012477f, 0.001813f, 0.008180f, -0.018627f, 0.054889f, 0.021908f, -0.017077f, 0.050100f, -0.004502f, -0.089623f, -0.003294f, -0.013076f, -0.007633f, 0.017230f, 0.011773f, 0.023750f, -0.027609f, 0.038432f, -0.065485f, 0.018911f, 0.012029f, -0.002901f, 0.000368f, -0.004431f, -0.004164f, 0.021921f, -0.003776f, 0.003723f, -0.009552f, -0.001179f, -0.018959f, 0.004714f, - 0.000489f, 0.038228f, 0.000019f, 0.016793f, -0.017394f, 0.001885f, -0.008574f, -0.023000f, 0.007375f, -0.000867f, -0.010930f, 0.027124f, -0.004883f, -0.007446f, -0.010783f, 0.019782f, -0.007313f, -0.038452f, 0.008162f, -0.007928f, 0.012124f, -0.016638f, 0.002058f, -0.005149f, -0.022932f, 0.021003f, -0.020247f, 0.014293f, -0.019325f, 0.009900f, -0.001448f, -0.007926f, -0.054442f, -0.089327f, -0.140335f, 0.005158f, 0.115860f, -0.044277f, -0.071071f, -0.075966f, -0.071780f, 0.015034f, 0.014924f, 0.133542f, -0.019290f, -0.019126f, -0.059372f, 0.006697f, 0.018099f, 0.042080f, -0.044623f, 0.022660f, -0.032446f, 0.052319f, 0.016701f, 0.017159f, 0.006325f, -0.032498f, -0.017666f, -0.021169f, -0.006970f, 0.018959f, -0.019583f, -0.017254f, 0.036907f, -0.033648f, -0.020977f, 0.030496f, -0.028979f, -0.010647f, -0.024872f, -0.040623f, 0.014394f, 0.026674f, 0.004930f, 0.025130f, -0.038189f, -0.009732f, -0.001105f, 0.022158f, 0.027473f, 0.033999f, 0.002405f, -0.003578f, -0.057448f, -0.059081f, -0.021821f, -0.019179f, -0.012902f, 0.027087f, 0.037174f, 0.052423f, 0.005809f, -0.023991f, 0.052612f, -0.037626f, - -0.016781f, 0.023352f, -0.016449f, 0.069001f, 0.003537f, -0.011574f, 0.011721f, -0.025305f, 0.020051f, 0.047765f, 0.039227f, -0.014244f, 0.014856f, -0.046580f, -0.030329f, -0.017351f, -0.011460f, 0.034371f, -0.004449f, 0.033548f, 0.008968f, -0.011229f, 0.004065f, 0.005888f, -0.040282f, 0.023819f, -0.029812f, 0.018373f, -0.013674f, -0.008596f, -0.002080f, 0.021788f, -0.020919f, 0.002398f, 0.003715f, 0.018979f, 0.033704f, -0.017390f, -0.005008f, -0.027050f, -0.010749f, 0.008973f, -0.010518f, 0.007059f, -0.008218f, -0.011288f, -0.018587f, -0.029580f, -0.016088f, 0.026304f, -0.010446f, 0.012754f, -0.019151f, -0.004850f, -0.001508f, -0.006500f, -0.017167f, -0.008185f, 0.001968f, -0.002467f, 0.000263f, -0.000454f, -0.025982f, 0.036575f, -0.090420f, -0.211368f, -0.161532f, -0.018644f, 0.069922f, 0.182362f, 0.153947f, 0.147005f, 0.150095f, 0.099079f, 0.041702f, -0.054096f, -0.096013f, -0.183177f, -0.135029f, -0.132622f, -0.132295f, -0.082235f, 0.079742f, 0.107571f, 0.157978f, 0.121372f, 0.101587f, 0.033582f, 0.067736f, -0.015213f, -0.017641f, -0.021253f, -0.037182f, -0.069328f, -0.056932f, -0.116797f, - -0.042663f, -0.092744f, -0.044323f, -0.021884f, 0.030280f, 0.006150f, 0.043369f, 0.010136f, 0.060780f, 0.044860f, 0.073545f, 0.098021f, 0.121526f, 0.077907f, 0.052141f, 0.086551f, 0.006534f, -0.029320f, -0.106940f, -0.125128f, -0.172431f, -0.153455f, -0.143736f, -0.054897f, -0.094400f, -0.049198f, 0.005608f, 0.026107f, 0.060648f, 0.116166f, 0.123490f, 0.138353f, 0.208612f, 0.117684f, 0.159776f, 0.111068f, 0.025088f, -0.016836f, -0.065763f, -0.166931f, -0.182936f, -0.173825f, -0.193241f, -0.141587f, -0.099091f, -0.079193f, -0.021943f, 0.040805f, 0.067898f, 0.086712f, 0.128533f, 0.136901f, 0.143776f, 0.136213f, 0.084580f, 0.059388f, 0.027911f, 0.003261f, -0.000604f, -0.040890f, -0.067406f, -0.096864f, -0.115661f, -0.122326f, -0.116178f, -0.081274f, -0.036846f, -0.032632f, -0.012663f, 0.021933f, 0.057491f, 0.072149f, 0.136003f, 0.096275f, 0.075613f, 0.076031f, 0.027112f, -0.002959f, -0.019914f, -0.023977f, -0.025912f, -0.065901f, -0.059604f, -0.042718f, -0.045216f, -0.032695f, 0.004113f, 0.010448f, 0.012827f, -0.007814f, 0.021444f, 0.000776f, 0.025415f, 0.026630f, 0.008430f, -0.009015f, - -0.001335f, 0.005821f, 0.003428f, 0.004235f, 0.011911f, 0.002768f, -0.006342f, -0.019124f, -0.004636f, 0.004359f, -0.000714f, 0.011876f, 0.009076f, -0.002015f, -0.001966f, -0.008177f, -0.006682f, -0.004432f, -0.003074f, -0.003653f, 0.002603f, -0.002224f, -0.001733f, -0.000508f, -0.004054f, -0.005399f, 0.000514f, 0.001086f, 0.001652f, 0.001186f, 0.000798f} - }, - { - {-0.017318f, 0.013452f, 0.000685f, 0.006191f, 0.006143f, 0.017404f, 0.008199f, -0.006398f, -0.008086f, -0.011289f, 0.008127f, -0.009873f, -0.007173f, 0.001639f, 0.002513f, 0.001094f, 0.010220f, -0.003309f, 0.009554f, -0.002419f, 0.008578f, -0.008080f, 0.003775f, -0.003557f, -0.008636f, -0.000589f, -0.016492f, 0.002499f, 0.004074f, 0.007406f, -0.006011f, -0.000076f, 0.006465f, -0.004722f, 0.007259f, 0.006835f, -0.004071f, 0.004914f, -0.005463f, -0.002531f, -0.004034f, -0.005904f, -0.007506f, 0.006758f, 0.009974f, -0.007431f, 0.004437f, 0.008023f, 0.006497f, 0.009818f, 0.001251f, -0.001454f, 0.005726f, 0.004349f, -0.010341f, -0.000378f, 0.001218f, 0.000677f, 0.003308f, 0.006732f, 0.001525f, 0.002451f, -0.003577f, -0.002261f, 0.004772f, 0.006688f, 0.003739f, -0.003522f, -0.006170f, 0.006894f, -0.005568f, -0.001802f, 0.003869f, -0.001149f, -0.000234f, 0.002944f, 0.000712f, 0.000198f, 0.006254f, -0.006095f, 0.004663f, 0.002539f, 0.003063f, 0.005769f, -0.002303f, -0.000660f, -0.001932f, -0.000801f, 0.000253f, 0.002827f, -0.002225f, -0.000403f, -0.001533f, -0.000887f, 0.000108f, -0.000217f, - -0.000888f, -0.000635f, 0.000648f, 0.000837f, -0.000005f, -0.000364f, -0.000612f, 0.000092f, -0.000187f, 0.000097f, -0.000884f, -0.000201f, 0.000908f, -0.001991f, 0.006860f, -0.003643f, 0.005025f, 0.000477f, -0.000430f, -0.013985f, 0.002240f, 0.011905f, -0.007316f, 0.004917f, -0.014851f, -0.015026f, -0.004955f, -0.012219f, -0.010667f, -0.001609f, 0.002198f, 0.008389f, 0.001331f, -0.004047f, 0.001896f, 0.005709f, -0.007389f, 0.010229f, -0.006937f, -0.007501f, 0.008665f, -0.004317f, 0.009983f, 0.012691f, 0.001754f, -0.009158f, 0.006403f, 0.004185f, 0.002564f, -0.004661f, -0.003381f, 0.005330f, 0.004448f, 0.000905f, -0.010353f, -0.002987f, -0.009564f, 0.008634f, -0.008633f, -0.005628f, 0.006352f, 0.000301f, 0.005513f, 0.001580f, 0.002113f, 0.009398f, 0.001586f, 0.010541f, -0.013593f, -0.006975f, -0.003146f, 0.006736f, 0.009518f, 0.010886f, 0.014804f, 0.001611f, -0.004224f, -0.001414f, -0.001993f, -0.000450f, -0.009630f, -0.004211f, -0.004193f, -0.001167f, 0.001480f, -0.007802f, -0.004629f, -0.001757f, -0.003331f, -0.006099f, 0.007328f, -0.007332f, -0.002509f, 0.004891f, -0.012579f, 0.003807f, - 0.006846f, 0.007610f, 0.003993f, 0.002212f, 0.004548f, -0.002224f, -0.004885f, -0.001221f, 0.001305f, -0.000515f, 0.001305f, 0.000250f, -0.001366f, 0.000107f, -0.001964f, -0.002287f, 0.002789f, 0.001271f, -0.000270f, -0.000009f, -0.000033f, 0.002138f, 0.000976f, -0.000816f, -0.000881f, -0.000852f, 0.000146f, 0.001586f, -0.001878f, -0.000298f, -0.000118f, -0.000330f, 0.001023f, -0.000034f, -0.000770f, 0.015925f, -0.011762f, -0.004398f, -0.002298f, 0.009801f, 0.008851f, -0.008882f, -0.000785f, -0.016509f, -0.003584f, 0.020073f, 0.007582f, -0.008040f, 0.014424f, 0.004723f, 0.005566f, 0.001495f, -0.004798f, -0.015755f, 0.002150f, -0.007081f, -0.004467f, -0.002858f, -0.009587f, -0.003378f, -0.007414f, 0.005222f, -0.003339f, -0.004331f, 0.009035f, -0.016958f, 0.015657f, -0.005482f, 0.002252f, -0.005292f, 0.004908f, -0.000607f, -0.001531f, -0.000394f, 0.006681f, 0.000356f, 0.004234f, -0.006044f, 0.011735f, -0.009078f, 0.013660f, 0.002930f, -0.001322f, -0.007606f, -0.008927f, 0.018555f, 0.003221f, -0.017343f, 0.017789f, 0.016769f, -0.009067f, -0.003306f, 0.005282f, -0.006830f, -0.001253f, -0.004199f, - 0.004228f, 0.010706f, -0.006474f, 0.002468f, -0.004844f, -0.004421f, 0.001772f, 0.014403f, -0.013163f, 0.008025f, -0.013568f, -0.010423f, -0.009795f, -0.001707f, 0.000286f, 0.000018f, 0.008240f, 0.012754f, 0.003337f, 0.003114f, 0.006230f, 0.005066f, 0.002797f, 0.003185f, 0.003740f, -0.001355f, 0.004024f, -0.001812f, -0.003934f, 0.006798f, -0.000333f, 0.000957f, -0.001224f, -0.001987f, -0.001174f, 0.000068f, 0.002869f, -0.000702f, 0.000646f, 0.000311f, -0.002547f, 0.000047f, 0.001412f, 0.001827f, -0.000208f, 0.001601f, 0.004541f, -0.006094f, 0.000737f, -0.012038f, 0.011600f, -0.016921f, 0.000722f, 0.017788f, -0.032133f, 0.022490f, 0.009034f, -0.008492f, 0.007133f, -0.000583f, 0.019617f, -0.001969f, -0.016086f, -0.011218f, 0.006652f, 0.007653f, 0.002263f, 0.000617f, 0.008393f, 0.002570f, 0.001459f, 0.011352f, 0.004709f, 0.003311f, 0.008220f, 0.005933f, 0.027948f, -0.007559f, 0.007517f, -0.000301f, -0.004462f, 0.007329f, 0.004603f, 0.002932f, 0.003649f, -0.004457f, -0.007594f, 0.000617f, 0.000105f, 0.000506f, 0.004148f, 0.008606f, -0.008550f, -0.009098f, 0.004097f, -0.002096f, - -0.003402f, -0.005402f, 0.011454f, -0.008022f, 0.016501f, 0.007808f, 0.000849f, 0.003958f, 0.001509f, 0.004591f, 0.020935f, 0.017596f, 0.001459f, 0.001104f, 0.004129f, -0.004069f, 0.007920f, -0.001597f, 0.007157f, 0.002283f, 0.000593f, 0.000131f, -0.008739f, 0.008622f, 0.006642f, -0.001775f, -0.004961f, 0.000831f, 0.008324f, 0.000929f, -0.002151f, 0.000596f, -0.006047f, 0.004617f, 0.001842f, 0.005849f, -0.001363f, 0.001830f, 0.002556f, 0.002523f, 0.002168f, 0.003569f, 0.001795f, 0.001669f, -0.007389f, -0.000297f, 0.003113f, 0.004383f, -0.002418f, 0.002897f, 0.002705f, 0.002409f, 0.002720f, 0.001236f, 0.002147f, 0.002621f, 0.002944f, 0.000592f, 0.001243f, 0.000953f, 0.001450f, 0.000558f, 0.000896f, 0.001881f, 0.000855f, -0.000171f, -0.001484f, -0.002026f, 0.004151f, -0.001864f, 0.009068f, 0.000246f, 0.010462f, -0.003951f, 0.009285f, -0.006954f, 0.019371f, -0.014746f, -0.005468f, -0.007021f, 0.019975f, 0.011308f, 0.007376f, 0.012678f, -0.011380f, -0.002285f, 0.018439f, 0.010460f, 0.008683f, 0.008952f, 0.004820f, 0.006157f, -0.002051f, 0.017656f, -0.001776f, -0.008098f, - -0.005978f, 0.006203f, -0.006593f, 0.004060f, -0.016618f, 0.006196f, -0.003138f, 0.000346f, -0.017858f, 0.007745f, -0.003783f, 0.016839f, -0.002683f, 0.005341f, 0.004677f, -0.007073f, -0.001699f, 0.007679f, 0.001118f, 0.005271f, -0.003729f, 0.009344f, 0.013291f, 0.001687f, -0.009163f, 0.003556f, 0.009367f, 0.006664f, 0.001298f, -0.006312f, -0.012937f, 0.010910f, -0.014411f, -0.006117f, 0.008189f, -0.019193f, -0.004327f, 0.011919f, -0.008799f, 0.002512f, 0.000239f, -0.001073f, -0.002494f, 0.004851f, -0.009500f, 0.000537f, -0.015912f, -0.008271f, -0.021774f, 0.001658f, -0.006051f, 0.000487f, -0.004154f, -0.000674f, -0.005477f, 0.005014f, 0.004871f, 0.001939f, -0.003370f, 0.004629f, -0.000439f, 0.001810f, -0.006213f, 0.001612f, 0.001378f, 0.002024f, 0.001469f, 0.004331f, -0.000468f, 0.004886f, -0.002049f, -0.000322f, 0.003483f, 0.004586f, 0.000807f, 0.002539f, -0.002854f, -0.001112f, -0.000739f, -0.001141f, -0.002022f, 0.001427f, 0.003670f, 0.000977f, 0.003868f, -0.003576f, -0.002049f, -0.002004f, -0.004865f, -0.005698f, 0.005226f, -0.035321f, 0.006163f, -0.011143f, -0.006492f, 0.008079f, - 0.006109f, 0.004296f, 0.001510f, -0.025954f, -0.002786f, 0.008065f, -0.013991f, -0.003665f, -0.019123f, -0.009721f, 0.004186f, -0.002281f, -0.017620f, 0.018262f, 0.010955f, -0.005607f, 0.001889f, 0.014365f, -0.009383f, 0.003848f, -0.006456f, -0.010049f, -0.006948f, -0.018162f, -0.006885f, 0.013668f, 0.006332f, 0.017470f, -0.008977f, -0.028637f, -0.012500f, 0.006972f, -0.009322f, -0.018677f, -0.003300f, -0.003539f, 0.016875f, 0.008648f, -0.020013f, 0.013219f, -0.014218f, -0.000909f, -0.010321f, -0.009840f, -0.009472f, -0.022035f, -0.013182f, 0.001534f, 0.013948f, 0.021228f, 0.013477f, 0.003883f, 0.008309f, -0.009833f, -0.016492f, -0.010176f, 0.010138f, -0.005103f, 0.010948f, -0.003479f, -0.010554f, -0.000632f, 0.000764f, -0.005123f, -0.011870f, 0.000606f, 0.008607f, -0.028687f, -0.019069f, 0.026541f, -0.008846f, 0.000419f, -0.014891f, 0.006917f, 0.003761f, -0.001854f, -0.001336f, 0.009631f, 0.007018f, 0.002069f, -0.003246f, -0.003765f, -0.000861f, -0.004191f, 0.002095f, 0.002742f, -0.005837f, -0.002971f, 0.001891f, 0.000507f, -0.000196f, 0.001543f, 0.005344f, -0.006051f, -0.002927f, -0.010957f, - -0.004613f, -0.001763f, -0.002233f, 0.000407f, 0.001330f, 0.002937f, 0.000008f, 0.003805f, -0.004896f, -0.003501f, 0.000618f, 0.000815f, 0.001362f, 0.013494f, -0.000379f, 0.006829f, -0.009255f, 0.006788f, -0.012648f, -0.000890f, 0.021965f, -0.010349f, 0.020750f, 0.021046f, 0.025938f, 0.006496f, 0.010380f, 0.022379f, 0.017514f, 0.012900f, -0.017343f, 0.002269f, 0.005487f, 0.015014f, -0.002951f, -0.012855f, 0.016662f, 0.016905f, -0.004787f, 0.011269f, -0.005602f, -0.005869f, 0.010598f, 0.009164f, -0.001277f, 0.010872f, 0.000964f, -0.017729f, -0.014180f, 0.015367f, 0.022275f, -0.001731f, -0.007702f, 0.004724f, 0.000694f, -0.010592f, -0.019892f, 0.010412f, -0.018809f, -0.009139f, 0.014401f, 0.003070f, 0.012742f, 0.000566f, 0.020396f, 0.002854f, 0.022397f, -0.026016f, 0.023635f, -0.004565f, -0.000878f, 0.007139f, 0.012503f, -0.009994f, -0.021531f, -0.006093f, 0.019783f, -0.003824f, -0.023040f, -0.013604f, -0.014106f, 0.003845f, 0.008376f, -0.020064f, 0.010189f, 0.011646f, 0.020901f, 0.006449f, 0.006608f, 0.000098f, 0.005909f, 0.001107f, 0.004632f, 0.003187f, -0.015178f, -0.001662f, - 0.007290f, 0.005118f, 0.012358f, -0.008045f, -0.002443f, -0.000104f, 0.001040f, 0.005910f, 0.000797f, 0.004888f, 0.002010f, -0.002325f, -0.001008f, 0.004661f, 0.004288f, 0.001672f, 0.004670f, 0.001330f, 0.002074f, 0.006147f, 0.000095f, -0.003247f, -0.001685f, 0.001379f, 0.002996f, -0.000376f, -0.001407f, 0.004978f, 0.002556f, 0.001139f, -0.005051f, -0.001588f, -0.002888f, -0.002482f, -0.000234f, 0.005317f, 0.000295f, 0.005061f, 0.007010f, 0.022452f, 0.002891f, 0.009387f, 0.026689f, 0.028768f, 0.008583f, 0.007253f, -0.021240f, -0.010705f, 0.023494f, -0.017409f, 0.024010f, 0.006809f, -0.000091f, -0.004745f, -0.008388f, -0.013831f, 0.002547f, 0.010680f, -0.025819f, -0.011644f, -0.010981f, 0.005783f, 0.005187f, 0.005715f, 0.000797f, 0.004446f, -0.000946f, 0.007846f, 0.006322f, -0.006784f, -0.012116f, -0.022259f, 0.003929f, -0.011993f, 0.020148f, 0.000882f, -0.011200f, -0.013972f, -0.004306f, 0.009439f, -0.017544f, 0.011053f, -0.005879f, 0.003702f, -0.000219f, -0.012400f, 0.012383f, 0.015786f, -0.010782f, 0.013300f, 0.003749f, -0.000919f, 0.037625f, -0.009370f, -0.024445f, 0.004732f, - 0.009155f, -0.005999f, 0.002009f, -0.010517f, 0.025531f, 0.014983f, -0.002572f, -0.005349f, 0.018117f, 0.017469f, -0.003672f, -0.014665f, -0.010785f, 0.035691f, -0.003320f, -0.004764f, -0.014388f, -0.009172f, -0.002913f, 0.003600f, -0.003772f, -0.009319f, 0.015266f, -0.004704f, 0.018124f, 0.005424f, -0.005789f, -0.001854f, 0.003193f, 0.000055f, -0.003177f, -0.003016f, 0.006340f, -0.007924f, -0.002053f, -0.002004f, 0.010436f, 0.001132f, -0.002361f, -0.000094f, -0.005431f, -0.004824f, -0.000742f, 0.001237f, 0.010936f, -0.002411f, 0.006449f, 0.002683f, -0.003667f, 0.002446f, 0.000364f, -0.005150f, 0.004024f, -0.002468f, 0.005589f, -0.000361f, -0.005905f, -0.004078f, -0.003415f, -0.004101f, -0.000168f, -0.001158f, -0.001939f, 0.002181f, 0.001921f, 0.003291f, 0.009172f, -0.019709f, -0.005642f, -0.006264f, 0.001543f, 0.008266f, 0.019253f, 0.016819f, -0.027107f, 0.000536f, 0.003085f, -0.002819f, -0.008155f, -0.018694f, -0.001999f, 0.006197f, 0.010967f, 0.008915f, -0.017183f, -0.003059f, -0.021758f, 0.020220f, 0.000792f, -0.002095f, 0.009658f, -0.009730f, -0.001868f, -0.023152f, 0.003768f, -0.013854f, - 0.009404f, -0.001884f, -0.003974f, -0.007884f, -0.015428f, -0.014974f, -0.001883f, -0.018451f, -0.030067f, -0.005651f, -0.013772f, -0.028868f, -0.002468f, -0.002560f, -0.015884f, 0.010231f, 0.015674f, -0.002051f, 0.007396f, -0.002081f, -0.002647f, 0.004200f, 0.004522f, -0.023399f, -0.007024f, 0.012698f, -0.011387f, 0.027796f, 0.004881f, 0.007351f, -0.018152f, -0.000262f, -0.008287f, -0.018449f, -0.002121f, 0.025796f, 0.011839f, 0.019580f, 0.010755f, -0.008659f, -0.021042f, -0.032708f, 0.021726f, 0.022360f, -0.002851f, 0.011514f, -0.025613f, 0.012093f, 0.010239f, 0.018193f, 0.002573f, -0.021854f, -0.002983f, -0.020376f, -0.007225f, 0.001605f, -0.006776f, 0.004224f, -0.004705f, -0.006815f, -0.001943f, 0.001884f, -0.001204f, -0.002282f, 0.005783f, -0.001942f, 0.002120f, -0.014811f, 0.000063f, -0.001289f, -0.002539f, -0.006762f, -0.003050f, 0.004346f, -0.006420f, -0.007299f, -0.002815f, -0.002677f, -0.003199f, -0.000114f, -0.001986f, -0.008070f, -0.006670f, -0.004067f, 0.002027f, 0.002586f, 0.004449f, 0.002140f, 0.004060f, 0.001385f, -0.006015f, 0.001080f, -0.001195f, -0.003644f, 0.001895f, -0.006791f, - 0.002598f, -0.003723f, -0.050496f, -0.012635f, 0.040151f, 0.013418f, 0.016378f, -0.010465f, 0.016542f, 0.027991f, 0.002061f, -0.004721f, -0.046632f, -0.010890f, -0.002186f, 0.026726f, 0.007530f, 0.010707f, -0.034933f, -0.009421f, -0.012986f, -0.008334f, 0.021728f, -0.012275f, -0.004246f, 0.003750f, 0.006228f, -0.011052f, -0.004814f, 0.005592f, -0.009752f, 0.021336f, -0.023930f, 0.002574f, 0.015789f, -0.020540f, 0.016851f, 0.028604f, 0.033348f, 0.015983f, 0.016328f, 0.021855f, -0.014989f, -0.027544f, 0.010999f, 0.011932f, 0.018212f, 0.014444f, -0.031083f, -0.008883f, 0.016362f, 0.009410f, 0.005963f, 0.019482f, 0.004404f, 0.022697f, -0.008437f, -0.004940f, 0.013030f, 0.011984f, 0.003649f, -0.020073f, -0.010686f, -0.021561f, -0.024617f, -0.001480f, -0.026926f, 0.001381f, -0.015667f, 0.001069f, -0.014248f, -0.008480f, -0.034593f, 0.023828f, 0.006321f, -0.005207f, -0.006187f, -0.003958f, 0.004649f, -0.012872f, -0.001778f, -0.030188f, -0.016489f, 0.010411f, 0.013647f, 0.005536f, 0.004592f, 0.001095f, -0.015782f, 0.007147f, 0.007230f, 0.005521f, -0.015080f, 0.003357f, 0.000600f, -0.012114f, - -0.004044f, 0.001989f, 0.001904f, -0.006298f, -0.009014f, 0.002862f, -0.004427f, -0.005645f, -0.001363f, 0.001186f, -0.001118f, -0.000807f, 0.003067f, -0.002938f, 0.004267f, -0.000864f, 0.006084f, -0.002832f, 0.005436f, 0.008371f, -0.006041f, 0.004597f, 0.000418f, 0.003149f, -0.003725f, -0.000522f, 0.004916f, 0.003789f, -0.007443f, 0.003790f, 0.003904f, 0.031657f, -0.015446f, -0.013218f, -0.011719f, 0.021793f, 0.027666f, -0.017396f, 0.044408f, 0.009312f, -0.019019f, 0.022723f, 0.006456f, -0.018531f, -0.021783f, -0.017581f, -0.001454f, -0.009452f, -0.006502f, -0.029009f, 0.011584f, 0.012048f, 0.040036f, 0.005402f, -0.006885f, -0.018116f, -0.018998f, 0.004771f, -0.002293f, -0.025379f, 0.004442f, -0.009432f, 0.001163f, 0.019545f, -0.015200f, 0.025858f, -0.022783f, -0.019130f, -0.001349f, -0.029764f, -0.035631f, 0.005740f, -0.004137f, -0.041087f, 0.002780f, 0.000439f, -0.019599f, 0.010223f, -0.009553f, 0.005148f, -0.027808f, -0.045334f, 0.029679f, -0.027752f, 0.046014f, 0.025119f, -0.032999f, -0.004258f, -0.033438f, -0.009036f, -0.004299f, 0.013814f, -0.012090f, 0.021103f, 0.026584f, 0.025270f, - -0.018339f, -0.014925f, 0.002295f, -0.022437f, -0.002165f, -0.007339f, -0.029639f, 0.017641f, 0.013017f, -0.015779f, 0.023193f, -0.034604f, -0.003400f, 0.002047f, -0.009135f, -0.005853f, 0.029955f, 0.022166f, 0.014688f, -0.001833f, -0.015767f, -0.012725f, -0.011908f, 0.005183f, 0.004753f, -0.000973f, 0.003313f, -0.000929f, -0.001479f, 0.000623f, -0.001353f, 0.001201f, 0.005899f, -0.007147f, 0.002753f, -0.000515f, 0.006500f, -0.003852f, -0.000783f, 0.003809f, 0.008717f, 0.003495f, 0.007017f, -0.008476f, -0.009350f, 0.004402f, -0.006260f, 0.001494f, -0.000135f, -0.009875f, -0.005612f, -0.005889f, 0.000008f, 0.003248f, 0.002835f, 0.001996f, 0.002220f, -0.026913f, -0.020467f, 0.013429f, 0.016268f, 0.017984f, 0.030402f, -0.011196f, 0.055934f, -0.001713f, -0.028936f, 0.012669f, 0.027582f, 0.007590f, 0.014505f, -0.012214f, -0.030991f, 0.046683f, 0.025918f, 0.019164f, 0.009079f, -0.016091f, 0.015046f, 0.038898f, -0.014250f, 0.008395f, -0.000360f, 0.008246f, 0.006720f, 0.027742f, -0.007939f, 0.009485f, -0.009736f, 0.008495f, -0.002600f, -0.001405f, 0.017218f, 0.003738f, -0.034270f, -0.022931f, - -0.032111f, -0.021941f, -0.017013f, -0.008387f, -0.024571f, -0.013841f, -0.012043f, -0.021254f, -0.014784f, 0.009513f, -0.022233f, -0.007591f, -0.017248f, 0.041467f, 0.021096f, 0.036115f, -0.032575f, -0.002965f, -0.029759f, -0.006200f, 0.033465f, 0.018483f, 0.039417f, 0.018875f, 0.024418f, -0.025773f, 0.011750f, 0.011590f, 0.036509f, 0.037120f, 0.011144f, 0.033598f, -0.028781f, -0.013667f, 0.021538f, -0.075557f, 0.001420f, 0.012552f, 0.001639f, 0.018902f, 0.012190f, 0.042787f, -0.003245f, -0.005782f, 0.046287f, 0.014087f, -0.004046f, -0.020582f, -0.000360f, 0.000479f, 0.037943f, 0.005154f, 0.001082f, 0.003187f, 0.007720f, 0.011940f, -0.002054f, -0.002024f, 0.012287f, 0.006004f, 0.004040f, 0.006592f, 0.008937f, 0.006996f, -0.000393f, 0.001639f, 0.001274f, 0.012785f, -0.002176f, 0.006815f, 0.012272f, 0.009147f, 0.013684f, -0.005812f, -0.004458f, 0.003385f, 0.004480f, -0.004440f, 0.000454f, 0.008009f, 0.012713f, -0.000620f, 0.003845f, 0.032560f, 0.021159f, -0.021374f, 0.041636f, 0.024688f, -0.002125f, -0.010440f, -0.005253f, 0.024968f, 0.061521f, 0.032825f, 0.008837f, 0.002513f, - 0.020209f, -0.005003f, 0.049668f, 0.028015f, 0.031024f, 0.001192f, -0.015815f, 0.010452f, 0.003741f, -0.026498f, -0.006509f, -0.001754f, -0.006239f, -0.007621f, 0.010089f, 0.005402f, -0.021666f, -0.010487f, -0.038287f, -0.004028f, -0.011898f, -0.049373f, -0.022121f, 0.001395f, 0.018447f, -0.025462f, 0.031719f, -0.008889f, -0.007567f, -0.004426f, -0.007736f, 0.022957f, -0.015517f, 0.016012f, -0.050513f, 0.015520f, 0.022046f, 0.016887f, 0.033670f, -0.033362f, 0.028834f, -0.029963f, -0.022281f, 0.024822f, -0.014608f, -0.004562f, 0.020945f, -0.033969f, 0.030022f, 0.047983f, -0.000973f, -0.007123f, 0.061391f, -0.013352f, 0.011828f, 0.034470f, -0.073771f, -0.037909f, 0.002518f, 0.002105f, 0.010022f, 0.017605f, 0.035905f, 0.021440f, -0.028203f, -0.022758f, -0.006682f, -0.008217f, -0.038099f, -0.003878f, -0.007581f, 0.009242f, -0.039808f, 0.000290f, -0.011983f, 0.016028f, -0.005993f, 0.020452f, 0.005558f, 0.000004f, -0.011775f, -0.008841f, -0.011070f, -0.011931f, -0.008979f, 0.007932f, -0.024188f, 0.017169f, -0.002862f, 0.009475f, 0.000617f, -0.001740f, -0.016501f, 0.008882f, -0.011710f, 0.002804f, - -0.012442f, -0.007003f, -0.000054f, -0.005718f, -0.014279f, 0.000858f, -0.004453f, 0.001379f, -0.009709f, -0.010952f, -0.011422f, 0.001864f, 0.002492f, 0.014300f, 0.015528f, -0.000330f, 0.000388f, -0.011236f, -0.058615f, -0.035298f, 0.042980f, 0.042735f, 0.004502f, -0.010238f, 0.036225f, -0.058795f, -0.031613f, -0.063608f, 0.027673f, 0.007604f, 0.002717f, 0.012210f, -0.028999f, 0.014530f, 0.019995f, 0.026250f, 0.044552f, 0.045795f, 0.038450f, -0.001660f, 0.008612f, 0.000402f, -0.016888f, -0.003571f, -0.014119f, -0.007339f, 0.053110f, -0.012531f, -0.049042f, -0.012471f, -0.010179f, 0.004273f, 0.076567f, -0.027827f, -0.027602f, 0.025844f, -0.041640f, 0.014252f, -0.046194f, 0.060087f, 0.016893f, -0.001797f, 0.015325f, -0.023340f, -0.029512f, 0.041129f, -0.050281f, -0.040190f, -0.036169f, 0.009875f, 0.014946f, 0.018645f, -0.033568f, 0.034188f, -0.010725f, 0.002459f, 0.052738f, -0.003739f, -0.009119f, 0.015435f, 0.042534f, -0.027750f, 0.070624f, 0.002494f, -0.081669f, -0.010052f, -0.003272f, -0.027360f, -0.007992f, -0.000151f, -0.007770f, -0.022372f, -0.018849f, 0.039978f, 0.026739f, -0.010016f, - 0.025868f, -0.046974f, 0.012996f, 0.020849f, 0.012910f, 0.001374f, 0.024901f, -0.004272f, -0.001265f, 0.009236f, 0.024336f, -0.010288f, -0.010844f, -0.008500f, 0.000965f, 0.009111f, -0.004883f, -0.019466f, -0.020934f, 0.000871f, -0.009918f, 0.007057f, -0.000422f, 0.004934f, 0.010852f, -0.013667f, -0.009107f, 0.023197f, -0.005573f, 0.004066f, -0.001980f, 0.000458f, -0.008155f, -0.009044f, -0.004683f, -0.003146f, -0.012601f, 0.005835f, 0.011158f, 0.006186f, -0.000414f, 0.000883f, 0.004920f, -0.009707f, 0.001980f, 0.010686f, -0.001301f, 0.009137f, -0.005500f, -0.017133f, -0.023166f, 0.000347f, 0.010169f, -0.016508f, -0.007505f, 0.077843f, 0.046149f, -0.062697f, -0.050649f, 0.062663f, 0.059741f, 0.037394f, 0.042948f, -0.074655f, -0.016350f, -0.020554f, 0.019752f, 0.007288f, -0.030106f, -0.055134f, -0.083517f, 0.024481f, 0.022103f, 0.006515f, 0.023034f, -0.011381f, -0.004145f, -0.019799f, 0.016644f, 0.028958f, 0.026015f, 0.006817f, 0.034548f, 0.011097f, -0.003853f, -0.014032f, -0.050742f, -0.002700f, -0.021315f, -0.017682f, 0.017725f, -0.054467f, 0.004941f, 0.002228f, -0.025370f, 0.022286f, - 0.020460f, 0.010113f, -0.036610f, -0.034086f, -0.089833f, -0.022853f, 0.000699f, -0.028772f, 0.005137f, 0.019017f, 0.018977f, 0.050296f, 0.024731f, -0.022183f, -0.015508f, -0.033378f, 0.042344f, -0.017750f, 0.073246f, 0.061181f, 0.017013f, -0.039051f, 0.080862f, 0.037201f, -0.032670f, 0.005039f, 0.040660f, 0.094029f, -0.038782f, -0.071828f, -0.037008f, 0.001013f, -0.025852f, 0.011369f, 0.025989f, 0.021673f, -0.018797f, -0.029359f, -0.016175f, -0.024431f, -0.026794f, 0.007483f, 0.029276f, 0.023362f, 0.013195f, 0.011654f, 0.004327f, 0.019654f, 0.002736f, 0.003183f, 0.028627f, 0.022415f, -0.001235f, -0.009354f, 0.006529f, -0.014853f, 0.015962f, -0.005644f, 0.016338f, -0.008310f, 0.006588f, 0.004271f, 0.010827f, 0.013865f, 0.008238f, 0.006459f, -0.013397f, -0.026540f, 0.003233f, -0.013469f, -0.006745f, 0.008019f, 0.002487f, -0.003921f, -0.005065f, 0.019190f, 0.006412f, 0.025958f, -0.008235f, 0.013887f, 0.014049f, -0.017655f, 0.018446f, 0.000967f, -0.014748f, 0.031206f, 0.011233f, -0.010719f, -0.030016f, 0.025406f, -0.050965f, -0.047124f, -0.016870f, 0.036799f, -0.020858f, -0.026721f, - -0.000104f, 0.042379f, 0.004626f, 0.043788f, -0.014426f, 0.052828f, 0.006253f, 0.028389f, -0.018279f, -0.012161f, 0.016848f, -0.054122f, -0.014948f, 0.020683f, -0.009474f, -0.007098f, -0.043493f, -0.041071f, 0.019400f, -0.024963f, -0.017847f, 0.034096f, 0.046681f, -0.006590f, 0.030791f, -0.054684f, 0.003612f, -0.014661f, 0.071603f, -0.029159f, 0.024028f, 0.043990f, 0.041899f, 0.012463f, -0.028737f, 0.018807f, 0.013589f, 0.012965f, 0.023351f, -0.069938f, 0.130024f, 0.041815f, -0.011051f, 0.007195f, 0.014900f, 0.036398f, -0.009645f, 0.028114f, 0.075991f, -0.003910f, -0.093131f, 0.039494f, 0.032923f, -0.032792f, 0.044323f, -0.009253f, -0.019198f, -0.049704f, 0.097296f, -0.049466f, 0.108286f, -0.070611f, 0.027089f, -0.000923f, 0.117613f, 0.052452f, -0.049674f, 0.048524f, 0.002518f, -0.030668f, 0.023975f, 0.004122f, 0.011024f, 0.026700f, 0.011585f, -0.029644f, -0.007407f, 0.036233f, 0.010012f, 0.020723f, -0.016025f, 0.022855f, -0.037381f, 0.014557f, -0.001700f, -0.011707f, 0.023951f, -0.012552f, -0.006924f, 0.017447f, -0.002453f, 0.003050f, -0.002555f, 0.028985f, -0.018210f, 0.028299f, - -0.015976f, 0.026220f, 0.036366f, 0.013886f, 0.010168f, 0.020407f, -0.004753f, -0.013604f, -0.013341f, 0.017682f, 0.006364f, -0.002313f, 0.000174f, -0.003936f, -0.025407f, -0.019312f, -0.003595f, 0.001347f, -0.015741f, 0.088721f, 0.010369f, 0.048050f, 0.024375f, -0.049216f, 0.002783f, 0.028786f, -0.009019f, -0.042891f, -0.008449f, -0.093236f, -0.026317f, -0.034893f, -0.020345f, 0.020045f, -0.003022f, 0.033029f, -0.016621f, 0.003357f, 0.032106f, -0.029139f, 0.002803f, 0.018243f, -0.002152f, -0.031944f, -0.000391f, -0.022017f, 0.063809f, -0.011486f, 0.036828f, 0.005789f, -0.000990f, 0.065554f, 0.047017f, -0.029193f, -0.034385f, 0.016455f, 0.029386f, 0.035884f, 0.043437f, -0.001032f, 0.015053f, 0.041357f, -0.002683f, -0.016947f, 0.012585f, 0.001238f, -0.037298f, -0.001057f, 0.023824f, -0.036478f, -0.049321f, -0.004836f, -0.003436f, -0.005449f, -0.016887f, -0.017856f, -0.058709f, -0.000235f, 0.056632f, 0.017407f, 0.031265f, 0.018594f, -0.008211f, -0.075411f, -0.055725f, 0.014649f, 0.048120f, 0.015722f, 0.024027f, 0.098654f, 0.102030f, 0.086663f, -0.007505f, 0.042993f, -0.028145f, -0.073063f, - -0.122180f, 0.020984f, 0.014335f, -0.005568f, 0.016218f, -0.038587f, 0.007566f, -0.009505f, 0.043861f, -0.003483f, 0.035069f, -0.044169f, 0.020966f, -0.054208f, -0.011228f, 0.022710f, 0.003123f, -0.027659f, 0.005685f, -0.022802f, -0.025338f, -0.010591f, 0.005690f, 0.020543f, 0.025868f, 0.034968f, -0.009295f, -0.002021f, 0.008218f, -0.009746f, 0.010415f, -0.036492f, -0.031911f, -0.021710f, -0.029936f, -0.028136f, -0.030568f, 0.019150f, 0.013102f, -0.005081f, -0.020401f, -0.029798f, 0.017074f, 0.000172f, 0.027514f, -0.007115f, 0.024259f, 0.018457f, 0.000142f, 0.007860f, 0.029243f, -0.036372f, -0.035046f, 0.020663f, -0.004114f, -0.026905f, -0.057325f, 0.017195f, -0.034116f, 0.017705f, -0.014448f, -0.040238f, -0.012006f, 0.000475f, 0.020976f, -0.016565f, 0.011010f, -0.059382f, 0.056955f, -0.125278f, -0.011921f, -0.030723f, -0.025131f, 0.017676f, 0.072838f, 0.012388f, 0.026877f, -0.061278f, 0.014620f, 0.023702f, 0.050290f, -0.024978f, -0.039426f, -0.027030f, -0.012902f, -0.001058f, -0.000354f, 0.030835f, 0.022549f, -0.016829f, -0.090319f, -0.042372f, -0.073311f, 0.009469f, 0.131300f, -0.091488f, - -0.035854f, -0.013309f, 0.076199f, -0.024333f, 0.032649f, -0.023205f, 0.037119f, -0.013480f, -0.021281f, -0.045944f, 0.024943f, -0.053387f, 0.051034f, 0.091714f, 0.012439f, -0.015785f, -0.016195f, 0.076245f, 0.020757f, 0.000290f, 0.040584f, 0.014039f, 0.015177f, -0.013510f, 0.087831f, -0.135838f, 0.099862f, -0.082375f, 0.040367f, 0.098828f, -0.077704f, 0.159636f, 0.108880f, -0.039650f, -0.012784f, 0.110118f, 0.040623f, -0.009323f, 0.072638f, 0.065431f, -0.082975f, 0.113603f, -0.067305f, 0.021083f, 0.022358f, -0.029113f, 0.022503f, 0.037854f, -0.021956f, -0.040114f, 0.014166f, -0.021112f, 0.010341f, 0.010547f, -0.010528f, -0.031189f, 0.013667f, 0.012651f, -0.012419f, 0.014708f, 0.011729f, -0.024855f, 0.064553f, 0.008074f, 0.002126f, 0.002493f, -0.012114f, 0.010902f, 0.009394f, 0.004534f, -0.019969f, 0.011970f, 0.003732f, -0.007904f, -0.017410f, 0.040554f, -0.014095f, 0.033219f, 0.037352f, -0.002496f, -0.012730f, 0.010874f, 0.009798f, 0.015415f, 0.044857f, 0.039154f, -0.033212f, 0.017080f, -0.013012f, -0.000728f, 0.019817f, -0.003044f, 0.092673f, 0.088361f, -0.074892f, 0.073639f, - 0.067744f, -0.063105f, -0.095482f, -0.141154f, 0.033191f, 0.212701f, 0.087481f, 0.000689f, 0.044048f, -0.202746f, -0.083665f, -0.006887f, 0.031144f, 0.153080f, 0.149659f, 0.026122f, -0.057445f, -0.112181f, -0.065782f, 0.007956f, 0.048431f, 0.073372f, 0.117691f, 0.071303f, -0.094567f, -0.223515f, -0.182319f, -0.017575f, 0.203189f, 0.221265f, 0.139696f, 0.043010f, -0.046792f, -0.089802f, -0.136177f, -0.077328f, -0.082798f, 0.162901f, 0.135312f, 0.085832f, 0.075721f, -0.114545f, -0.160980f, -0.186483f, -0.167304f, 0.064893f, 0.226748f, 0.279557f, 0.094416f, -0.084132f, -0.198684f, -0.237913f, -0.064824f, 0.038823f, 0.024652f, 0.149617f, 0.058529f, -0.055873f, -0.033403f, -0.114326f, -0.025071f, -0.130766f, 0.056815f, 0.156091f, 0.291023f, -0.017180f, -0.155654f, -0.337554f, -0.013267f, -0.113788f, -0.012204f, 0.162569f, 0.032039f, -0.014341f, -0.072375f, -0.151747f, -0.099908f, 0.073687f, 0.117981f, 0.039410f, -0.020735f, -0.051311f, -0.062237f, 0.061108f, 0.069447f, 0.043574f, 0.037122f, 0.017253f, 0.034595f, -0.002751f, 0.003144f, -0.033194f, -0.015819f, 0.004482f, 0.087619f, 0.077419f, - -0.004153f, -0.032269f, -0.008734f, -0.077708f, -0.052849f, -0.001313f, 0.029715f, 0.081738f, 0.062234f, 0.045026f, 0.003808f, -0.108459f, -0.098604f, -0.065825f, 0.025524f, 0.106107f, 0.203890f, 0.125816f, -0.094446f, -0.168708f, -0.150045f, -0.059486f, 0.003937f, 0.140699f, 0.175622f, 0.132186f, 0.022748f, -0.103531f, -0.237651f, -0.148540f, 0.047919f, 0.148262f, 0.167815f, 0.050194f, -0.025070f, -0.064255f, -0.077785f, 0.001317f, -0.019485f, 0.095631f, 0.055908f, -0.008534f, 0.020272f, 0.010267f, -0.068254f, -0.007221f, -0.005620f, 0.007335f, 0.002052f, 0.005351f, -0.025003f, -0.010080f, -0.009268f, -0.006388f, -0.011410f, 0.040689f, -0.014724f, 0.017413f, -0.030776f, -0.003213f, 0.012619f, -0.001576f, -0.009390f, 0.070345f, 0.009697f, -0.040026f, -0.046416f, 0.009617f, 0.009695f, -0.027382f, 0.007510f, 0.035259f, 0.018337f, 0.033175f, -0.034146f, 0.010177f, -0.001251f, 0.007856f, -0.024047f, 0.004414f, 0.026592f, 0.037553f, 0.009507f, -0.009981f, 0.011019f, 0.004097f, -0.008822f, 0.025541f, -0.038022f, 0.008401f, -0.061907f, -0.019556f, 0.025519f, -0.021187f, -0.024904f, 0.033447f, - -0.021496f, -0.057953f, -0.044744f, 0.039393f, -0.004980f, -0.008063f, 0.009063f, 0.019845f, 0.050133f, -0.032937f, -0.042653f, 0.001582f, -0.005892f, 0.033737f, 0.000209f, 0.019622f, 0.009047f, -0.003611f, 0.052076f, -0.068149f, -0.009995f, -0.009850f, -0.039924f, 0.009944f, 0.022271f, 0.000713f, -0.023804f, 0.010264f, -0.005416f, 0.006493f, -0.020593f, 0.014790f, -0.001127f, 0.002163f, -0.001886f, -0.005329f, 0.026367f, -0.026876f, 0.001993f, -0.004851f, -0.009633f, -0.008814f, 0.003008f, -0.011825f, 0.012041f, 0.015234f, -0.016271f, -0.004440f, -0.006284f, 0.013916f, 0.015699f, -0.008310f, 0.019370f, 0.001554f, -0.002909f, -0.013490f, 0.013931f, 0.004481f, -0.005676f, -0.022085f, 0.010126f, -0.020084f, 0.012559f, -0.011045f, -0.009680f, 0.017559f, 0.017801f, -0.024932f, 0.002793f, -0.006185f, -0.024166f, 0.007316f, -0.014196f, 0.015256f, -0.013997f, -0.056045f, -0.061808f, -0.147023f, 0.042492f, 0.042031f, -0.003006f, -0.123945f, -0.080134f, -0.011801f, -0.020346f, 0.082800f, 0.055847f, 0.026855f, -0.054884f, -0.022661f, -0.014561f, 0.051841f, 0.005673f, -0.014793f, -0.032226f, 0.021249f, - 0.009419f, 0.025782f, -0.001441f, -0.010554f, -0.013208f, -0.029681f, -0.014842f, -0.017969f, 0.049509f, 0.026464f, 0.005802f, 0.007412f, -0.032654f, -0.001765f, 0.003933f, 0.045209f, -0.003302f, 0.021063f, -0.016842f, -0.011730f, 0.009181f, -0.018658f, 0.012284f, 0.005394f, 0.013214f, 0.044100f, -0.003898f, 0.038698f, -0.000548f, 0.024845f, -0.019269f, 0.001616f, -0.028318f, -0.036631f, -0.038557f, -0.032989f, 0.010826f, 0.005701f, 0.002802f, -0.048573f, 0.023956f, -0.042279f, -0.004805f, 0.002182f, -0.026508f, -0.028690f, -0.015176f, 0.000507f, -0.050506f, -0.034166f, 0.031327f, -0.015255f, 0.029164f, 0.004627f, -0.008129f, -0.027308f, -0.031544f, -0.002062f, 0.044686f, 0.055402f, -0.013837f, -0.005690f, -0.020874f, -0.027790f, -0.019204f, 0.017655f, 0.009360f, 0.006785f, 0.017308f, -0.003441f, -0.011518f, 0.012000f, 0.006592f, 0.009986f, 0.015139f, -0.008514f, 0.005084f, -0.001692f, 0.000323f, -0.011567f, 0.020013f, 0.006342f, 0.004542f, -0.006021f, 0.002875f, -0.000437f, 0.031214f, 0.003980f, 0.009344f, -0.017526f, 0.001155f, -0.011348f, 0.020422f, 0.001413f, 0.000294f, -0.007197f, - 0.004729f, -0.002352f, 0.000244f, 0.009789f, 0.000915f, 0.012830f, -0.008737f, 0.004170f, 0.001340f, -0.016440f, -0.000900f, 0.009405f, 0.003605f, -0.003382f, 0.033056f, -0.071065f, -0.176229f, -0.168918f, -0.025624f, 0.051103f, 0.169986f, 0.146897f, 0.138487f, 0.148750f, 0.082825f, 0.020043f, -0.075075f, -0.075441f, -0.156782f, -0.121760f, -0.106737f, -0.067715f, -0.085163f, 0.117327f, 0.096544f, 0.127051f, 0.073298f, 0.103845f, -0.003733f, 0.027355f, -0.016648f, -0.040506f, -0.023135f, -0.048432f, -0.056305f, -0.056124f, -0.055326f, -0.065541f, -0.047942f, -0.038970f, -0.004378f, 0.010324f, 0.092152f, 0.077304f, 0.040788f, 0.043779f, 0.060811f, 0.056394f, 0.027212f, 0.131122f, 0.017110f, 0.001714f, 0.024659f, -0.048983f, -0.150384f, -0.043045f, -0.120536f, -0.129346f, -0.136592f, -0.096674f, -0.086027f, 0.004295f, 0.071454f, 0.072821f, 0.089024f, 0.161812f, 0.116538f, 0.142000f, 0.139639f, 0.089037f, 0.095824f, 0.032684f, -0.033619f, -0.109338f, -0.143365f, -0.163908f, -0.106540f, -0.147109f, -0.123528f, -0.141251f, -0.082334f, -0.009859f, 0.038775f, 0.114272f, 0.109147f, 0.110710f, - 0.184471f, 0.128450f, 0.152503f, 0.094919f, 0.015875f, -0.017926f, -0.046092f, -0.076353f, -0.085392f, -0.090602f, -0.088168f, -0.101778f, -0.087115f, -0.063842f, -0.039114f, -0.020344f, -0.015271f, 0.044118f, 0.042027f, 0.059073f, 0.095613f, 0.107596f, 0.068348f, 0.082191f, 0.050797f, -0.003183f, -0.022289f, -0.049702f, -0.062001f, -0.053297f, -0.045900f, -0.055710f, -0.020282f, -0.013857f, 0.001296f, 0.015630f, 0.017513f, 0.004308f, 0.002426f, 0.015298f, -0.002211f, -0.013522f, 0.012356f, 0.007176f, 0.008817f, 0.013498f, 0.004067f, 0.003498f, 0.008306f, 0.018802f, 0.016252f, 0.007283f, 0.001587f, -0.004347f, -0.016176f, -0.012473f, -0.014722f, -0.013014f, -0.005137f, -0.010124f, -0.008673f, -0.005064f, -0.003862f, -0.005597f, -0.001544f, 0.005774f, 0.005904f, 0.007069f, 0.011723f, 0.007457f, 0.005274f, 0.006603f, 0.001728f, 0.001194f, 0.000630f, 0.000011f, 0.000049f, 0.000121f}, - {-0.008237f, 0.013810f, 0.004811f, -0.002529f, 0.003495f, 0.004431f, 0.008280f, 0.013830f, -0.006657f, 0.004585f, -0.005673f, -0.004416f, 0.002769f, 0.000018f, 0.001145f, -0.009788f, -0.004760f, 0.003432f, 0.006883f, -0.000934f, 0.005798f, -0.010495f, -0.009309f, 0.005838f, 0.003732f, 0.001594f, 0.004248f, -0.003594f, 0.007498f, 0.008390f, 0.008148f, 0.011687f, -0.006503f, -0.005380f, 0.000407f, 0.001471f, -0.011233f, -0.000725f, -0.000985f, 0.003066f, 0.001093f, -0.007037f, -0.001741f, 0.009542f, -0.005117f, 0.001857f, -0.005868f, 0.002791f, 0.002942f, 0.001896f, -0.008736f, 0.007027f, 0.000633f, 0.001571f, -0.001213f, -0.002886f, -0.003630f, -0.005969f, 0.012649f, -0.002248f, -0.002344f, -0.002856f, 0.005612f, 0.001295f, -0.011983f, 0.003025f, -0.005479f, -0.008233f, 0.004838f, -0.005096f, -0.012971f, 0.005154f, 0.001892f, 0.000551f, -0.011953f, -0.014501f, -0.005926f, -0.007156f, 0.006706f, -0.001964f, -0.000028f, -0.003293f, -0.003926f, -0.003276f, 0.000090f, 0.005916f, 0.001070f, -0.002664f, -0.000225f, -0.002783f, -0.001238f, 0.002615f, 0.000791f, -0.002523f, -0.003401f, -0.001191f, - -0.001400f, 0.001288f, -0.000859f, 0.000475f, 0.000471f, 0.001406f, 0.000362f, 0.002022f, -0.000859f, 0.000465f, -0.000475f, 0.001420f, -0.000092f, 0.001302f, 0.008097f, 0.000964f, 0.000699f, 0.007204f, -0.010750f, 0.001801f, -0.008970f, -0.011356f, 0.003279f, 0.010655f, -0.006585f, 0.005059f, -0.004955f, -0.002394f, 0.002151f, 0.000537f, -0.005269f, -0.015659f, -0.015548f, 0.000281f, -0.003933f, -0.000140f, 0.008141f, 0.001306f, 0.009966f, 0.013461f, -0.007088f, 0.011625f, 0.001459f, 0.011800f, 0.000752f, 0.014002f, 0.001790f, -0.007832f, -0.002147f, 0.000790f, 0.006385f, -0.001724f, -0.002097f, 0.001392f, 0.004847f, -0.005817f, -0.000346f, -0.001794f, 0.004289f, 0.005219f, 0.000296f, -0.005300f, -0.000368f, -0.000958f, 0.003071f, 0.005481f, 0.009824f, -0.003422f, 0.006378f, -0.002868f, -0.008533f, -0.007623f, -0.005148f, 0.004836f, 0.005253f, -0.002882f, 0.008500f, 0.000283f, 0.003093f, 0.000446f, 0.010334f, 0.006850f, 0.007618f, 0.003095f, 0.004491f, 0.002771f, 0.004168f, 0.008441f, -0.001779f, -0.000431f, 0.011927f, 0.002397f, 0.000356f, 0.002484f, -0.004419f, 0.000667f, - 0.003528f, -0.000264f, -0.011124f, 0.003496f, 0.001197f, -0.001783f, -0.003853f, 0.002579f, 0.000774f, 0.006070f, -0.002227f, -0.001099f, -0.002309f, -0.001883f, 0.001546f, 0.000444f, 0.002444f, 0.001153f, 0.000575f, -0.002188f, -0.001726f, -0.001022f, -0.001067f, 0.000958f, -0.002883f, 0.002554f, -0.001029f, 0.000757f, -0.000689f, -0.001031f, -0.001596f, 0.000986f, -0.001285f, -0.000976f, -0.003141f, 0.011966f, -0.012386f, -0.008375f, -0.006892f, -0.010046f, 0.003072f, 0.004212f, -0.008092f, 0.001776f, 0.016381f, -0.012074f, 0.008269f, 0.014110f, 0.013960f, -0.008743f, -0.002446f, 0.006871f, 0.001259f, 0.002072f, -0.006375f, 0.003371f, -0.021432f, 0.016687f, 0.026208f, 0.004568f, 0.008783f, -0.004356f, -0.000424f, 0.013871f, -0.007401f, -0.016941f, -0.002868f, 0.000167f, -0.000112f, -0.013702f, 0.000949f, 0.003303f, -0.016243f, -0.007689f, 0.007454f, 0.002464f, -0.005813f, -0.001583f, 0.005555f, -0.007978f, 0.016706f, 0.005145f, 0.000724f, -0.010841f, -0.001112f, 0.005697f, -0.003700f, 0.000273f, -0.003888f, -0.000301f, -0.001648f, -0.008703f, 0.000494f, -0.008420f, 0.012534f, -0.012236f, - -0.008131f, -0.002808f, -0.014593f, 0.009668f, -0.007870f, -0.020341f, -0.003765f, -0.008822f, 0.002435f, 0.009226f, -0.009503f, 0.001092f, -0.006465f, 0.006527f, 0.000877f, -0.006778f, 0.005704f, -0.007337f, -0.009625f, 0.010594f, -0.006935f, 0.002966f, 0.000223f, 0.000887f, 0.003696f, -0.002191f, -0.003296f, -0.003724f, -0.005875f, 0.001876f, -0.008287f, 0.000390f, -0.001705f, 0.002514f, -0.002489f, -0.000283f, -0.000022f, 0.000141f, -0.004414f, 0.003845f, 0.000157f, 0.000661f, -0.002393f, -0.001739f, -0.001801f, -0.000202f, 0.002605f, -0.009446f, 0.006033f, -0.000273f, -0.001850f, 0.007161f, -0.006776f, -0.023807f, -0.004649f, -0.001461f, 0.010408f, 0.014742f, 0.013058f, 0.006284f, -0.005124f, -0.001600f, -0.014681f, -0.012442f, 0.004299f, 0.016751f, -0.004793f, 0.017160f, 0.010915f, -0.010579f, 0.005692f, -0.001621f, 0.005952f, -0.011824f, -0.007980f, 0.001959f, 0.008546f, -0.001073f, 0.005095f, 0.007127f, -0.013377f, -0.002676f, -0.006172f, -0.018207f, 0.011328f, 0.001816f, 0.004114f, 0.007909f, 0.014447f, 0.005051f, 0.000678f, 0.011347f, -0.002650f, -0.005782f, 0.011654f, -0.006122f, - 0.019696f, 0.009094f, 0.007831f, 0.000429f, -0.005668f, -0.006872f, 0.009653f, 0.013143f, -0.009756f, 0.002393f, 0.012526f, -0.002203f, 0.004070f, 0.027704f, -0.008377f, -0.003310f, 0.005375f, -0.013853f, -0.000568f, 0.002510f, -0.006195f, 0.006769f, -0.004490f, 0.004185f, 0.013732f, 0.000510f, -0.003173f, -0.009326f, -0.000780f, -0.011589f, 0.004904f, -0.004282f, -0.005722f, -0.002351f, 0.002195f, -0.003311f, -0.003362f, -0.002786f, 0.000619f, 0.004313f, 0.003155f, 0.000905f, -0.001004f, -0.001263f, -0.000999f, -0.000609f, -0.001944f, -0.003386f, -0.000679f, -0.001025f, 0.001792f, 0.000045f, 0.000893f, -0.003423f, 0.001449f, 0.001865f, -0.001313f, -0.002993f, -0.001146f, -0.003140f, -0.001699f, -0.001376f, 0.002328f, 0.000298f, -0.000524f, -0.000200f, 0.000528f, -0.004745f, -0.000942f, 0.001715f, -0.005947f, -0.033968f, -0.002641f, -0.000599f, -0.006695f, -0.010452f, -0.003337f, 0.018413f, -0.012839f, -0.019281f, 0.007415f, -0.007762f, 0.002904f, 0.003571f, 0.012406f, -0.008260f, -0.002394f, 0.002530f, 0.011546f, -0.005227f, -0.007360f, -0.002131f, -0.006313f, 0.008525f, 0.015544f, 0.007867f, - 0.000275f, -0.001162f, -0.008691f, -0.000418f, 0.024379f, 0.004377f, -0.002872f, 0.028122f, -0.001536f, 0.020943f, -0.006154f, 0.000278f, 0.014280f, 0.004403f, 0.003658f, 0.005156f, 0.002624f, 0.007888f, 0.004676f, -0.013194f, 0.024877f, 0.015140f, 0.020455f, 0.013727f, 0.009114f, -0.013426f, 0.006134f, 0.007001f, 0.001193f, -0.008191f, 0.023112f, 0.014008f, 0.020896f, 0.003803f, -0.003982f, -0.005003f, 0.015431f, -0.007338f, -0.015615f, 0.018664f, 0.005964f, -0.010083f, -0.005752f, 0.001032f, -0.004609f, 0.001927f, -0.001997f, 0.002731f, -0.006278f, -0.001652f, -0.014764f, 0.005843f, -0.001675f, -0.000274f, 0.005651f, -0.001722f, -0.002629f, 0.008896f, -0.000415f, 0.006938f, 0.009308f, 0.007610f, 0.004996f, 0.004918f, 0.002100f, 0.002924f, 0.000215f, -0.001777f, -0.001570f, 0.004130f, -0.000954f, -0.002335f, -0.002385f, 0.002029f, -0.002712f, -0.000625f, -0.000395f, 0.005123f, 0.002265f, 0.003708f, -0.003175f, 0.001191f, -0.002509f, -0.000815f, 0.003636f, -0.000334f, -0.001220f, -0.000975f, -0.000722f, -0.008545f, -0.001136f, -0.022247f, -0.008718f, -0.024892f, -0.017016f, 0.001943f, - -0.016123f, -0.012671f, 0.001625f, -0.002748f, 0.016852f, -0.011033f, 0.018665f, 0.022859f, 0.002461f, -0.019241f, -0.013466f, 0.020541f, -0.010250f, -0.005497f, 0.011597f, -0.014875f, -0.026451f, 0.010748f, 0.023073f, -0.011708f, 0.005995f, -0.000334f, 0.010141f, -0.027636f, 0.005667f, -0.011048f, 0.006840f, 0.000652f, -0.011493f, 0.019427f, 0.008980f, 0.008258f, 0.025890f, 0.012094f, 0.005465f, 0.014681f, 0.003068f, 0.004816f, 0.007497f, 0.002547f, 0.001320f, 0.004073f, 0.003663f, 0.029414f, 0.016637f, 0.000023f, 0.024749f, 0.015499f, 0.018308f, 0.028483f, -0.014369f, -0.012037f, 0.025020f, -0.008587f, -0.000812f, -0.014688f, -0.006106f, 0.008929f, 0.013344f, -0.011175f, -0.001179f, 0.003827f, -0.003037f, 0.006930f, -0.011767f, -0.002163f, -0.013633f, 0.026853f, -0.008507f, 0.014695f, -0.004009f, -0.007087f, 0.019845f, 0.003518f, -0.005617f, 0.006467f, -0.002284f, 0.000622f, -0.005419f, 0.007509f, -0.001248f, 0.002739f, 0.008134f, 0.004631f, 0.002543f, 0.004550f, 0.000510f, -0.000666f, 0.003363f, 0.000862f, -0.005292f, 0.001222f, -0.000978f, -0.002505f, 0.005111f, 0.000038f, - 0.002586f, 0.002064f, -0.000938f, 0.000982f, -0.003029f, 0.000702f, -0.002750f, 0.000281f, -0.001016f, 0.003605f, 0.001135f, 0.003100f, 0.001014f, 0.008482f, -0.009049f, 0.002923f, 0.001316f, 0.002897f, -0.012997f, 0.016917f, 0.009831f, 0.022982f, 0.004466f, -0.003108f, -0.025918f, -0.013861f, -0.009703f, 0.006625f, -0.013453f, -0.022453f, -0.006233f, 0.005757f, 0.002523f, -0.025075f, 0.020379f, 0.001567f, -0.001497f, -0.021360f, -0.012259f, 0.005039f, 0.002665f, -0.023732f, -0.007348f, 0.008673f, 0.000996f, 0.002393f, 0.012201f, 0.014209f, 0.008341f, -0.003676f, 0.007205f, 0.002214f, -0.008471f, -0.017569f, 0.030311f, -0.007602f, -0.014693f, 0.000285f, 0.007558f, 0.009777f, 0.022681f, 0.003714f, -0.000357f, -0.008512f, -0.000197f, 0.012542f, -0.001528f, 0.015672f, 0.030110f, 0.002516f, -0.006454f, 0.000901f, 0.025936f, 0.032346f, -0.016060f, 0.004504f, 0.004587f, 0.017482f, 0.009317f, 0.003072f, 0.005454f, -0.012898f, 0.008103f, 0.008329f, 0.008410f, -0.005584f, 0.000556f, 0.006337f, 0.009717f, -0.001377f, 0.003394f, 0.002209f, -0.010859f, 0.005260f, 0.000606f, -0.009889f, - -0.007082f, 0.010445f, -0.004608f, 0.007219f, -0.010407f, -0.008047f, -0.003485f, 0.002359f, -0.000063f, 0.009417f, 0.004416f, 0.001665f, 0.000568f, 0.004693f, 0.004466f, 0.001341f, -0.007864f, 0.000316f, -0.003237f, 0.001244f, -0.002408f, -0.001980f, 0.000020f, -0.000839f, -0.001014f, -0.002754f, -0.007691f, -0.002212f, 0.000976f, -0.005309f, -0.003226f, -0.003383f, 0.000274f, -0.003389f, -0.005374f, -0.001338f, 0.002752f, 0.004200f, -0.008360f, 0.011979f, -0.010548f, -0.019194f, 0.013417f, -0.001492f, -0.004617f, 0.005149f, 0.011433f, -0.032251f, 0.002064f, 0.024856f, -0.002801f, 0.044656f, 0.021381f, -0.013533f, -0.009915f, -0.004098f, -0.012800f, -0.005639f, 0.019979f, -0.007576f, -0.006451f, 0.020028f, 0.016266f, 0.005430f, 0.009360f, 0.018727f, 0.012413f, 0.014037f, -0.010148f, -0.006904f, 0.017774f, -0.003388f, 0.016096f, 0.000194f, -0.019062f, -0.012211f, 0.005253f, 0.015218f, -0.020741f, 0.001395f, -0.011041f, 0.005925f, -0.012629f, 0.017786f, 0.017711f, -0.017122f, -0.001763f, 0.005133f, -0.000488f, -0.023186f, -0.010372f, 0.004099f, 0.015513f, 0.025519f, 0.008709f, -0.018720f, - -0.004085f, -0.004472f, -0.002141f, 0.016095f, 0.002608f, 0.012921f, -0.019189f, 0.008760f, 0.001381f, -0.015153f, 0.018150f, 0.007802f, -0.002377f, -0.003935f, 0.003188f, -0.000561f, -0.015511f, 0.011855f, -0.003541f, 0.007119f, -0.012042f, -0.021281f, -0.011808f, 0.005189f, 0.009612f, 0.000356f, 0.005334f, 0.019343f, 0.000257f, -0.004784f, 0.012141f, -0.003611f, 0.011431f, 0.000804f, 0.003750f, -0.009627f, 0.001054f, 0.000393f, 0.005273f, 0.005876f, 0.008115f, 0.005262f, -0.001931f, -0.002218f, -0.003697f, 0.009701f, -0.004423f, 0.005124f, 0.001094f, 0.003150f, 0.003971f, 0.005501f, 0.002410f, -0.001685f, 0.004871f, 0.002047f, 0.001664f, -0.001699f, 0.006535f, 0.003226f, 0.001409f, -0.006286f, 0.002393f, -0.002378f, -0.000021f, 0.004576f, 0.020725f, -0.025328f, -0.003946f, -0.008023f, 0.026172f, -0.011549f, 0.021582f, -0.006602f, 0.020154f, 0.027294f, -0.011956f, 0.008681f, -0.006819f, 0.015593f, -0.005788f, 0.013001f, 0.010807f, 0.010196f, -0.002211f, 0.010719f, -0.005257f, -0.013384f, -0.006381f, 0.015169f, -0.017525f, 0.002895f, 0.000036f, 0.013526f, 0.027270f, -0.024756f, - 0.000975f, 0.024460f, -0.000496f, 0.022373f, 0.003140f, 0.009892f, -0.002973f, -0.001780f, 0.006108f, -0.034237f, 0.003481f, -0.000715f, -0.013568f, 0.009197f, 0.005721f, 0.025036f, 0.012499f, -0.002367f, 0.047433f, 0.011905f, -0.024856f, 0.006709f, 0.002484f, 0.016642f, -0.010663f, 0.003283f, 0.014054f, 0.001210f, 0.008592f, -0.002379f, -0.027167f, -0.027801f, 0.000134f, -0.009328f, 0.022499f, -0.037822f, 0.048840f, -0.000182f, 0.027222f, 0.031159f, 0.007536f, -0.008124f, -0.006138f, -0.014485f, -0.019263f, -0.001553f, 0.006294f, -0.004801f, 0.009819f, -0.006425f, -0.015506f, -0.009730f, -0.007814f, 0.002900f, -0.002386f, 0.001813f, 0.010486f, 0.005347f, 0.004992f, 0.003922f, -0.004325f, -0.005270f, 0.000342f, -0.001044f, 0.003022f, 0.000806f, 0.001233f, 0.003382f, 0.006084f, 0.003706f, -0.012065f, 0.002295f, -0.002268f, 0.008884f, 0.008882f, 0.005219f, -0.000809f, -0.002487f, 0.003488f, 0.002858f, -0.004270f, -0.004423f, -0.001115f, -0.002999f, 0.000847f, -0.003211f, -0.005855f, 0.002412f, 0.009768f, -0.002442f, 0.003932f, -0.007419f, 0.000962f, 0.004393f, 0.004474f, -0.000149f, - 0.002867f, 0.006370f, -0.045202f, -0.003287f, 0.015256f, 0.002435f, -0.017041f, -0.041984f, -0.000120f, 0.004692f, -0.007450f, -0.001846f, -0.012440f, 0.006400f, -0.010375f, 0.021484f, 0.007507f, -0.012949f, -0.016184f, -0.027627f, 0.020510f, -0.008874f, 0.001302f, 0.026753f, 0.036804f, 0.022417f, -0.003537f, 0.001848f, -0.025422f, -0.010908f, -0.010288f, 0.006718f, -0.036024f, 0.009307f, 0.009704f, 0.001980f, -0.018573f, 0.017657f, 0.027470f, -0.004517f, -0.000590f, 0.003147f, -0.016111f, -0.016987f, 0.009631f, 0.006602f, 0.020752f, -0.022995f, 0.024782f, -0.013169f, 0.013611f, -0.021290f, -0.016868f, -0.008453f, -0.000653f, -0.002569f, 0.008976f, -0.004631f, -0.037231f, -0.027889f, -0.007946f, 0.000942f, -0.037332f, 0.000474f, 0.018297f, -0.009894f, -0.004415f, 0.005602f, 0.015540f, -0.032787f, 0.016620f, -0.005796f, -0.005043f, -0.000192f, 0.013262f, 0.016684f, -0.019795f, -0.010070f, -0.013351f, -0.006449f, -0.004904f, 0.009696f, 0.003098f, -0.011890f, -0.005458f, -0.009121f, 0.006183f, 0.021754f, 0.014211f, -0.000128f, -0.000769f, -0.012166f, 0.000320f, -0.007435f, 0.010103f, -0.001869f, - 0.017727f, 0.005965f, 0.006088f, -0.006420f, 0.000223f, 0.000213f, -0.014452f, 0.015266f, 0.000984f, -0.002688f, 0.007797f, -0.002811f, -0.002580f, -0.000716f, 0.001006f, -0.012386f, 0.005282f, 0.007567f, 0.007831f, -0.001275f, -0.003109f, 0.002736f, 0.004345f, -0.004418f, -0.002819f, 0.004418f, -0.009624f, 0.001064f, -0.000429f, 0.008882f, -0.000880f, 0.040510f, 0.000989f, -0.008213f, 0.031508f, -0.006877f, -0.012806f, -0.003381f, -0.002891f, 0.039080f, 0.044689f, -0.005805f, 0.009514f, 0.011401f, -0.005699f, -0.021202f, 0.010454f, 0.041562f, 0.031698f, 0.027115f, -0.009831f, 0.011763f, 0.022318f, -0.028937f, -0.021560f, 0.025315f, -0.012900f, -0.014148f, -0.000968f, 0.031645f, -0.004756f, 0.029134f, 0.001918f, 0.026148f, -0.015632f, 0.035920f, 0.010925f, -0.011102f, -0.018304f, 0.006588f, -0.025899f, 0.003147f, -0.030733f, -0.010448f, -0.011022f, 0.017635f, -0.017596f, 0.029032f, -0.035489f, -0.061363f, 0.038374f, 0.017217f, -0.007544f, 0.000368f, 0.042325f, 0.019921f, 0.003363f, -0.011061f, 0.009143f, -0.004879f, 0.000507f, -0.027454f, -0.027905f, 0.016474f, -0.009371f, 0.009127f, - 0.052544f, -0.013694f, 0.011299f, -0.034252f, 0.040598f, -0.013535f, -0.018144f, -0.008632f, -0.005684f, 0.017014f, -0.034422f, 0.028834f, -0.033740f, 0.024386f, -0.017378f, -0.023458f, 0.023457f, -0.000953f, 0.007676f, -0.009471f, 0.013866f, -0.007553f, -0.010633f, -0.004681f, -0.016111f, 0.011150f, -0.000548f, -0.010412f, -0.004478f, 0.003980f, 0.017138f, 0.003320f, 0.002421f, 0.004650f, -0.000463f, -0.002860f, 0.008680f, -0.004833f, 0.003902f, 0.003706f, -0.004499f, -0.001191f, -0.001040f, 0.012396f, 0.010727f, -0.003894f, -0.006014f, -0.012821f, -0.000298f, -0.002562f, -0.001913f, -0.002031f, 0.000320f, 0.011886f, 0.003483f, -0.001353f, 0.014841f, -0.046053f, -0.034233f, -0.033193f, 0.046334f, 0.001549f, 0.019886f, 0.011845f, -0.040822f, -0.035696f, 0.023994f, -0.063684f, 0.018605f, 0.018904f, -0.004094f, -0.025345f, -0.023304f, 0.039663f, -0.021337f, -0.002813f, -0.006674f, -0.020573f, 0.030173f, 0.009598f, 0.027299f, 0.015866f, 0.018835f, -0.005984f, 0.030652f, -0.002834f, -0.020046f, -0.023619f, -0.005434f, 0.013289f, -0.017895f, 0.023788f, 0.015283f, -0.017958f, -0.064467f, -0.005430f, - -0.005295f, -0.001611f, 0.046845f, 0.001047f, -0.036691f, -0.021786f, -0.022435f, 0.019220f, -0.014140f, -0.030573f, -0.034099f, -0.021232f, -0.016579f, -0.076034f, 0.001827f, 0.009465f, 0.024979f, -0.039726f, 0.013007f, -0.032828f, -0.026837f, -0.009209f, 0.031787f, 0.008109f, 0.029505f, 0.055682f, 0.016772f, 0.012763f, 0.036338f, -0.028342f, -0.003605f, -0.013473f, -0.015527f, 0.029083f, 0.026930f, 0.042733f, 0.021028f, -0.039177f, -0.026065f, 0.030724f, -0.046237f, -0.050978f, -0.016003f, 0.037099f, 0.005905f, -0.009106f, 0.025337f, 0.020631f, -0.000196f, 0.005865f, 0.021488f, -0.014080f, 0.012721f, -0.010386f, -0.001959f, -0.010822f, -0.001985f, 0.002797f, 0.015060f, -0.009580f, -0.012053f, -0.000064f, 0.008509f, 0.002680f, 0.007740f, -0.001238f, -0.012048f, -0.002925f, -0.007972f, 0.000591f, -0.006657f, -0.001351f, -0.000921f, -0.013622f, 0.011042f, 0.001645f, 0.011239f, 0.014057f, 0.019508f, -0.007354f, -0.010342f, -0.000866f, 0.001906f, 0.022440f, -0.019692f, -0.041740f, 0.012151f, -0.000067f, -0.000287f, 0.002094f, 0.006421f, 0.009508f, 0.019069f, 0.006564f, 0.016130f, 0.009129f, - 0.019013f, 0.048460f, 0.002091f, -0.061953f, -0.022396f, 0.016340f, 0.001097f, -0.012488f, -0.039675f, -0.025947f, 0.008923f, 0.033045f, 0.013081f, -0.030628f, 0.017115f, 0.013691f, -0.034733f, -0.006167f, -0.043064f, 0.034636f, -0.017686f, -0.022235f, 0.031991f, -0.030100f, 0.008974f, 0.066207f, -0.007286f, 0.011153f, 0.019833f, 0.000324f, 0.009997f, -0.038104f, 0.009790f, 0.007238f, 0.006649f, 0.086819f, 0.058900f, -0.006025f, -0.029735f, -0.019525f, 0.027548f, 0.031916f, -0.034231f, -0.018886f, -0.046077f, 0.074150f, 0.020714f, 0.008946f, -0.011500f, -0.007640f, -0.016073f, -0.008709f, 0.053402f, -0.013795f, 0.014710f, 0.053363f, 0.009254f, -0.014554f, -0.038975f, 0.001404f, 0.016064f, -0.078665f, 0.017520f, 0.009033f, 0.054370f, 0.037309f, 0.029123f, 0.048642f, 0.027582f, -0.009176f, 0.005046f, 0.017215f, -0.005181f, 0.002745f, -0.003154f, 0.008054f, 0.004515f, 0.045478f, -0.001058f, 0.018912f, -0.007712f, 0.018284f, -0.001277f, 0.024278f, 0.005278f, 0.007063f, 0.021949f, -0.001363f, 0.009217f, 0.015067f, 0.000570f, 0.012264f, 0.016907f, 0.007788f, 0.013509f, 0.019900f, - 0.011359f, -0.006847f, -0.001255f, 0.004729f, 0.004933f, 0.000608f, -0.007666f, 0.004319f, 0.005245f, 0.002755f, 0.010495f, -0.000999f, 0.016382f, 0.009278f, -0.006528f, 0.017362f, -0.002186f, -0.010997f, -0.050519f, -0.007229f, 0.034851f, 0.019542f, -0.056594f, -0.074630f, 0.008617f, 0.050674f, 0.020523f, 0.030971f, -0.017564f, 0.023921f, 0.004049f, 0.000642f, -0.027051f, -0.009689f, -0.042146f, 0.062665f, 0.021049f, -0.050873f, -0.034855f, 0.022774f, 0.002472f, 0.012551f, -0.015172f, 0.031254f, 0.018320f, 0.021511f, 0.041080f, 0.036324f, 0.007555f, 0.035511f, -0.018626f, 0.020379f, -0.000023f, 0.024771f, 0.011468f, -0.005977f, -0.014857f, 0.017084f, -0.022100f, 0.058428f, -0.015610f, -0.011091f, 0.012092f, 0.028859f, 0.028684f, -0.019403f, 0.050471f, 0.049851f, 0.029143f, 0.012017f, 0.004314f, -0.016119f, -0.037791f, -0.064961f, -0.010403f, 0.022995f, -0.001251f, 0.028152f, 0.030936f, 0.032901f, 0.011657f, 0.018281f, 0.107926f, -0.053098f, -0.022965f, 0.010548f, 0.021006f, -0.002869f, -0.083934f, 0.019587f, -0.012881f, 0.012443f, 0.015128f, 0.037101f, 0.007697f, 0.000440f, - -0.033593f, 0.034879f, -0.012323f, 0.004842f, 0.030985f, 0.013727f, -0.032530f, -0.007340f, -0.018156f, -0.006552f, -0.013867f, 0.002027f, 0.001590f, 0.012919f, -0.002859f, 0.015811f, 0.016140f, 0.020586f, 0.000116f, -0.000531f, -0.012373f, -0.006086f, -0.016669f, -0.011869f, -0.004720f, 0.021843f, 0.007484f, -0.003936f, 0.001876f, -0.009173f, 0.003595f, 0.019057f, 0.022303f, -0.004861f, -0.019841f, -0.000888f, 0.001641f, 0.008934f, -0.005176f, 0.005990f, -0.009189f, 0.014261f, -0.027890f, 0.002265f, -0.008253f, -0.010633f, 0.000446f, 0.004960f, -0.017797f, 0.008132f, -0.003005f, 0.008018f, -0.009447f, -0.016614f, 0.006359f, 0.028234f, 0.027792f, -0.015285f, -0.020802f, 0.006220f, -0.019988f, -0.064090f, 0.066313f, -0.019313f, 0.018664f, 0.006174f, 0.055625f, 0.044362f, 0.027889f, -0.026481f, -0.004355f, 0.038067f, 0.020208f, 0.044798f, 0.119329f, -0.007346f, -0.047000f, -0.012217f, 0.035692f, -0.005284f, -0.055519f, 0.084910f, 0.044000f, -0.029880f, -0.046480f, -0.005691f, 0.010448f, -0.014734f, 0.033728f, 0.028688f, 0.033094f, 0.063402f, 0.010627f, 0.017945f, 0.011342f, -0.024496f, - -0.058962f, 0.034720f, -0.040118f, -0.030102f, 0.046565f, 0.024447f, 0.026271f, 0.013826f, 0.009602f, -0.002620f, -0.058226f, -0.051649f, 0.000975f, 0.030970f, -0.038491f, 0.036520f, -0.017071f, -0.043134f, 0.013628f, 0.037942f, -0.006996f, 0.007346f, 0.037639f, 0.037137f, 0.038509f, 0.002890f, -0.023492f, 0.021999f, 0.091491f, 0.011086f, 0.037208f, 0.052317f, 0.002559f, -0.016517f, -0.045974f, -0.018539f, -0.072455f, -0.024795f, -0.018135f, -0.008887f, 0.016471f, 0.002868f, -0.003293f, -0.020774f, -0.013721f, -0.012044f, 0.017901f, -0.018582f, -0.003725f, -0.016388f, 0.005355f, -0.010391f, -0.017853f, 0.000760f, -0.025696f, -0.009009f, 0.000438f, -0.023159f, -0.004390f, -0.020172f, -0.011680f, 0.002283f, -0.037106f, -0.003546f, 0.001740f, -0.000370f, 0.017531f, -0.023575f, -0.007782f, 0.025368f, 0.000493f, -0.009936f, -0.001100f, -0.008484f, 0.004877f, -0.010844f, -0.008230f, 0.012644f, -0.000870f, 0.000892f, 0.033841f, 0.027897f, 0.000988f, -0.021832f, -0.032375f, -0.057420f, 0.010593f, 0.035741f, 0.048782f, -0.040946f, -0.043676f, 0.054213f, 0.024508f, -0.001835f, -0.005182f, -0.022086f, - 0.010557f, -0.010147f, -0.023069f, 0.025009f, 0.030429f, 0.021140f, 0.002284f, -0.004118f, -0.016593f, 0.003898f, 0.012938f, 0.007936f, -0.018784f, -0.067062f, 0.015292f, -0.015046f, -0.019941f, 0.004009f, -0.008444f, 0.005909f, -0.066840f, 0.031548f, 0.024789f, -0.048053f, 0.034074f, 0.045162f, 0.037833f, -0.009820f, 0.006559f, -0.005745f, 0.024759f, -0.005277f, 0.000120f, 0.120212f, -0.035764f, 0.010238f, -0.031903f, -0.018404f, 0.067995f, 0.025049f, 0.023390f, 0.043599f, -0.054907f, -0.045400f, 0.068365f, -0.042850f, 0.035016f, 0.043271f, 0.004365f, 0.011742f, 0.016616f, 0.077535f, -0.026013f, -0.029242f, -0.070663f, -0.014922f, -0.030293f, 0.024290f, -0.044131f, 0.075367f, 0.041108f, 0.046144f, 0.022834f, 0.040367f, 0.021265f, 0.071960f, 0.017880f, 0.034772f, 0.026564f, -0.034948f, -0.016638f, -0.013342f, 0.006494f, 0.004372f, 0.035342f, 0.015606f, 0.000197f, -0.001354f, 0.008235f, 0.003567f, -0.013436f, -0.026554f, -0.014115f, -0.019861f, 0.025574f, -0.008626f, -0.014244f, 0.008490f, -0.005392f, 0.031608f, 0.014674f, -0.005261f, 0.017777f, -0.019833f, 0.009877f, 0.016072f, - -0.005493f, 0.030629f, 0.031162f, 0.021009f, -0.014322f, 0.025915f, 0.014925f, -0.024926f, -0.004661f, 0.002945f, -0.015071f, 0.002040f, 0.022311f, -0.025080f, -0.029158f, 0.013267f, 0.006021f, -0.002499f, -0.019278f, 0.049657f, -0.028699f, 0.026278f, 0.084362f, 0.041921f, 0.031952f, -0.047075f, 0.013335f, 0.047016f, -0.040065f, 0.066541f, 0.023891f, 0.035630f, 0.031900f, -0.020387f, 0.033044f, 0.028472f, 0.012026f, 0.065972f, 0.050023f, -0.003724f, -0.112706f, -0.013157f, 0.052468f, 0.050620f, 0.052031f, 0.012526f, 0.029079f, 0.002640f, 0.014682f, -0.003661f, -0.034842f, 0.072301f, -0.001797f, 0.068896f, 0.031086f, 0.049745f, -0.069373f, 0.047221f, 0.023581f, 0.021307f, -0.018115f, 0.016476f, -0.012847f, 0.015735f, 0.069253f, 0.027690f, 0.090331f, 0.004587f, 0.020054f, 0.052864f, -0.010552f, 0.083022f, 0.040947f, 0.007417f, -0.054793f, -0.034156f, 0.030318f, 0.003647f, -0.009061f, 0.001997f, -0.009280f, 0.006698f, -0.039911f, 0.026935f, -0.042507f, -0.063217f, -0.023666f, -0.003338f, -0.021121f, -0.016130f, 0.053799f, -0.006195f, 0.048998f, -0.046377f, 0.053831f, 0.007449f, - -0.059484f, 0.059167f, 0.049256f, -0.018206f, -0.008280f, 0.014308f, 0.025877f, 0.016839f, -0.002469f, -0.026787f, 0.017055f, -0.011428f, -0.001718f, 0.034243f, -0.006949f, -0.005337f, -0.027505f, -0.007103f, 0.007603f, 0.005567f, -0.001854f, 0.025814f, 0.022635f, -0.017622f, 0.006116f, -0.000172f, 0.000937f, 0.023767f, 0.007180f, -0.025376f, 0.017247f, -0.021670f, 0.011109f, -0.017481f, -0.007126f, -0.005373f, -0.004033f, 0.003256f, 0.004907f, 0.003375f, 0.001326f, -0.004840f, 0.004279f, -0.012079f, 0.008491f, 0.010020f, -0.002136f, -0.009867f, 0.007463f, -0.002059f, 0.012687f, -0.006936f, -0.006172f, -0.017541f, -0.000842f, -0.015556f, -0.050301f, -0.048089f, -0.019352f, -0.020830f, 0.038936f, -0.062965f, -0.078459f, -0.085306f, -0.103034f, 0.046034f, 0.050543f, -0.002943f, -0.008310f, -0.000322f, -0.024530f, 0.005970f, 0.012780f, -0.021724f, 0.070114f, 0.066067f, 0.043144f, 0.047262f, -0.043553f, 0.028920f, 0.002352f, 0.034440f, -0.013612f, -0.017746f, -0.064381f, 0.057563f, -0.058182f, -0.070429f, -0.018550f, -0.014796f, 0.075534f, -0.041533f, 0.010112f, -0.039205f, -0.011014f, 0.072870f, - 0.013467f, 0.023054f, 0.036031f, 0.066923f, 0.004068f, -0.007495f, -0.081810f, -0.015091f, -0.006605f, -0.002324f, 0.044747f, 0.024082f, 0.152204f, 0.007625f, -0.004755f, -0.050499f, -0.004108f, 0.060526f, 0.055472f, -0.005002f, -0.026807f, -0.075224f, 0.018751f, 0.047623f, -0.024436f, -0.054859f, -0.023282f, 0.046936f, -0.014367f, 0.034453f, -0.109024f, -0.060993f, -0.087155f, -0.023584f, 0.034981f, 0.018579f, -0.037968f, -0.036243f, -0.042662f, 0.017115f, 0.089797f, 0.027175f, -0.000385f, -0.031866f, -0.002577f, -0.024825f, -0.006776f, 0.010614f, 0.010623f, -0.028585f, -0.012904f, -0.002569f, 0.019496f, -0.048581f, -0.033031f, -0.011361f, 0.023895f, -0.003342f, 0.031436f, 0.010033f, 0.003736f, -0.010996f, -0.005389f, -0.021887f, -0.004595f, -0.032972f, -0.007291f, 0.036163f, 0.013050f, 0.016450f, -0.025212f, -0.045591f, 0.022620f, 0.021365f, -0.013135f, -0.000055f, -0.018724f, -0.003547f, 0.005778f, -0.002511f, 0.017144f, 0.010548f, 0.011253f, 0.021628f, 0.012131f, 0.017069f, 0.018597f, -0.003731f, 0.014963f, 0.007910f, -0.012468f, -0.030453f, -0.015801f, 0.074057f, 0.002429f, 0.000432f, - 0.131094f, 0.012980f, -0.097083f, -0.074550f, 0.091928f, 0.081603f, 0.005194f, -0.064663f, -0.080318f, -0.046063f, 0.016055f, 0.079384f, 0.070789f, 0.047423f, -0.028793f, 0.009398f, -0.028920f, 0.025989f, 0.060288f, 0.092919f, 0.101528f, -0.012591f, -0.053966f, -0.085476f, -0.127734f, -0.001215f, 0.068474f, 0.277294f, -0.035930f, -0.014673f, -0.133658f, -0.055293f, 0.011607f, 0.032117f, 0.165286f, 0.119156f, 0.073869f, -0.083700f, -0.047139f, -0.081777f, -0.004599f, 0.138315f, 0.128044f, 0.155884f, -0.042719f, -0.153224f, -0.111373f, -0.154712f, 0.039020f, 0.142211f, 0.125149f, 0.230464f, -0.109764f, -0.133693f, -0.117081f, -0.019446f, 0.102098f, 0.135910f, 0.190065f, 0.086064f, -0.039691f, -0.073776f, 0.017697f, -0.005551f, 0.054224f, 0.152010f, -0.033216f, 0.094497f, -0.033506f, -0.087334f, 0.001473f, 0.013724f, 0.082473f, 0.003980f, -0.007453f, 0.007902f, -0.021344f, -0.075532f, 0.031745f, -0.010361f, 0.025974f, -0.021325f, -0.062023f, -0.015032f, -0.014478f, 0.007067f, 0.041531f, 0.005813f, -0.011743f, 0.015930f, -0.014905f, -0.019346f, -0.003444f, 0.060277f, 0.015497f, 0.055353f, - -0.003842f, 0.006347f, -0.015624f, 0.007236f, 0.006566f, 0.011206f, 0.042924f, 0.073946f, -0.001984f, -0.019933f, -0.067498f, -0.089341f, 0.003735f, 0.005427f, 0.108382f, 0.069800f, 0.011929f, -0.037417f, -0.152221f, -0.085738f, -0.012926f, 0.069077f, 0.135110f, 0.070113f, -0.040622f, -0.050242f, -0.157816f, -0.058603f, 0.075546f, 0.138940f, 0.112281f, 0.007400f, -0.071328f, -0.080809f, -0.007852f, -0.002759f, 0.065735f, -0.011942f, -0.067815f, 0.088635f, -0.020696f, 0.104675f, -0.096622f, 0.000987f, -0.042285f, -0.100371f, 0.073211f, -0.052786f, 0.067765f, -0.053981f, -0.020877f, -0.005018f, 0.034836f, 0.007601f, -0.038533f, -0.020709f, -0.001776f, 0.054084f, -0.050583f, 0.062066f, 0.044582f, -0.034188f, 0.007695f, -0.042873f, -0.042993f, 0.072298f, -0.071661f, -0.036327f, 0.048076f, 0.110557f, -0.000886f, 0.014729f, -0.010253f, -0.048801f, -0.013655f, 0.044944f, -0.015759f, -0.073509f, 0.010281f, -0.016317f, -0.012467f, 0.021768f, -0.066819f, 0.033300f, -0.000267f, 0.022704f, 0.051394f, -0.116710f, -0.086187f, -0.028911f, -0.002661f, 0.119436f, -0.063600f, 0.043042f, 0.094136f, -0.052081f, - -0.030619f, -0.003648f, 0.051043f, 0.074056f, -0.040742f, 0.021133f, -0.015026f, 0.029086f, 0.115908f, -0.043445f, -0.130721f, 0.027409f, 0.059822f, 0.015169f, -0.069872f, 0.043177f, 0.018266f, 0.043345f, -0.013701f, -0.002375f, -0.048808f, -0.039165f, 0.028710f, 0.006887f, -0.052013f, 0.014859f, 0.035924f, -0.017847f, -0.000267f, -0.058113f, 0.008458f, -0.014772f, -0.063422f, -0.002624f, 0.028381f, 0.024190f, 0.010244f, -0.002137f, 0.015730f, -0.043784f, -0.010689f, 0.014903f, -0.020997f, 0.032834f, -0.020253f, -0.008949f, -0.019146f, -0.000428f, -0.020398f, 0.031370f, 0.005845f, -0.025692f, -0.021543f, -0.001543f, -0.000856f, 0.052043f, -0.018294f, 0.018096f, -0.009473f, -0.001561f, 0.011542f, -0.023283f, -0.020029f, 0.002881f, -0.044400f, -0.012940f, 0.013126f, -0.038476f, 0.001880f, -0.007666f, -0.013007f, 0.007495f, 0.024856f, -0.000683f, 0.003747f, -0.013917f, -0.009034f, -0.134905f, -0.042815f, 0.057914f, 0.079289f, 0.065839f, -0.067291f, 0.021454f, -0.187853f, -0.122157f, -0.103808f, -0.016535f, 0.087899f, 0.056570f, -0.004005f, -0.041306f, -0.051047f, 0.024884f, -0.031261f, -0.003198f, - 0.067172f, 0.018310f, 0.003077f, -0.066594f, -0.032134f, -0.006788f, -0.031599f, 0.020342f, -0.005642f, 0.036096f, -0.009549f, -0.000367f, -0.011914f, -0.002148f, -0.008689f, -0.038013f, -0.028866f, -0.063801f, -0.045143f, 0.032596f, 0.062362f, 0.068054f, 0.037774f, 0.059314f, -0.009101f, 0.050477f, -0.011863f, -0.023058f, -0.079743f, -0.003018f, -0.044081f, 0.034168f, 0.012984f, 0.100835f, -0.081430f, 0.028974f, 0.056424f, -0.031048f, -0.043307f, -0.024981f, -0.020229f, -0.020576f, 0.007238f, 0.071669f, 0.045926f, -0.018973f, -0.002751f, 0.051482f, -0.059530f, -0.065587f, 0.027064f, -0.076138f, -0.058791f, -0.051062f, 0.006314f, 0.024905f, 0.029535f, 0.088653f, 0.060062f, -0.009429f, 0.044689f, -0.025590f, 0.001727f, 0.011244f, 0.033098f, 0.053898f, 0.057950f, 0.041049f, 0.033812f, 0.027472f, 0.002262f, -0.074149f, -0.021114f, -0.038182f, -0.009682f, 0.043644f, -0.001945f, 0.006813f, -0.016262f, -0.032870f, 0.003623f, -0.016115f, -0.013583f, -0.035804f, 0.015854f, 0.027326f, -0.012101f, 0.010707f, 0.023908f, 0.013479f, 0.015570f, 0.003033f, 0.015328f, -0.010352f, 0.010524f, -0.004716f, - -0.019013f, 0.014787f, 0.018098f, -0.014591f, -0.021866f, 0.002245f, -0.014792f, -0.025095f, 0.019576f, 0.021473f, 0.008194f, 0.027578f, -0.002508f, -0.024752f, 0.042782f, -0.017575f, -0.161115f, -0.238003f, -0.292118f, -0.230868f, -0.344293f, -0.061108f, -0.125919f, 0.037801f, 0.071957f, 0.248747f, 0.145168f, 0.257691f, 0.262031f, 0.358838f, 0.261849f, 0.266199f, 0.196004f, 0.008165f, -0.057148f, -0.104226f, -0.064208f, -0.214762f, -0.146862f, -0.117020f, -0.119592f, -0.118332f, -0.118111f, -0.114640f, -0.123692f, -0.135705f, -0.101234f, -0.157745f, -0.129051f, -0.112493f, -0.050663f, -0.132592f, -0.041151f, 0.048427f, -0.098585f, -0.047752f, 0.026195f, 0.021340f, -0.083499f, 0.069139f, 0.088908f, 0.112672f, 0.152907f, 0.155444f, -0.012468f, 0.092332f, 0.150302f, 0.213441f, 0.168156f, 0.336346f, 0.315854f, 0.278970f, 0.225984f, 0.286220f, 0.141962f, 0.227834f, 0.277352f, 0.213579f, 0.136472f, 0.231658f, 0.074984f, 0.077678f, 0.142196f, 0.142697f, 0.101228f, 0.029212f, 0.082700f, -0.027833f, 0.004684f, 0.072407f, -0.082952f, -0.208024f, -0.310843f, -0.122941f, -0.425479f, -0.372147f, - -0.327394f, -0.378488f, -0.421138f, -0.352969f, -0.305631f, -0.294770f, -0.203314f, -0.267186f, -0.137354f, -0.169710f, -0.180477f, -0.273459f, -0.221109f, -0.159429f, -0.130706f, -0.110587f, -0.103775f, -0.065028f, 0.025525f, -0.000414f, -0.006504f, 0.076855f, 0.160518f, 0.133980f, 0.135550f, 0.216433f, 0.184883f, 0.192303f, 0.244019f, 0.230291f, 0.195759f, 0.186387f, 0.223400f, 0.190393f, 0.184389f, 0.195917f, 0.203063f, 0.172919f, 0.150959f, 0.139144f, 0.129804f, 0.170025f, 0.133090f, 0.100084f, 0.104340f, 0.078301f, 0.045414f, -0.026972f, -0.056563f, -0.073633f, -0.132445f, -0.112967f, -0.117381f, -0.139271f, -0.147678f, -0.135457f, -0.088667f, -0.098971f, -0.090010f, -0.091014f, -0.047272f, -0.051838f, -0.062948f, -0.042553f, -0.013963f, -0.015065f, -0.029420f, -0.017985f, 0.001851f, -0.009709f, -0.014410f, -0.010791f, -0.000557f, -0.000743f, -0.000813f, 0.000744f, 0.001311f, 0.000232f} - } -}; -const float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819]={ - { - {0.009763f, 0.004826f, -0.006570f, 0.009881f, -0.005791f, -0.002002f, 0.000151f, -0.003400f, -0.003805f, -0.007681f, 0.001838f, 0.011624f, 0.001194f, 0.002073f, 0.004945f, 0.001187f, -0.004128f, -0.001297f, -0.002453f, -0.002488f, 0.007055f, 0.001924f, 0.000928f, -0.002418f, 0.001304f, -0.000306f, -0.002679f, -0.004405f, 0.006838f, 0.005246f, 0.000978f, -0.001469f, 0.007930f, -0.011047f, -0.004108f, 0.004685f, -0.004570f, 0.009484f, 0.000974f, 0.006690f, 0.000864f, 0.000762f, 0.004341f, -0.003817f, -0.001583f, -0.000144f, -0.000106f, -0.002982f, -0.002374f, 0.004178f, -0.000209f, -0.010189f, 0.009547f, -0.001355f, 0.001625f, -0.008609f, 0.004085f, -0.003819f, 0.003384f, 0.000247f, -0.000296f, -0.003242f, -0.000332f, -0.004984f, 0.005131f, -0.009678f, -0.001093f, 0.007056f, -0.005603f, 0.002624f, 0.010545f, 0.003199f, 0.001057f, -0.005259f, 0.000556f, 0.002804f, -0.001992f, 0.003516f, -0.002220f, -0.001537f, -0.002978f, 0.003182f, -0.003473f, -0.005549f, 0.001757f, 0.000922f, -0.001396f, 0.006788f, -0.001729f, -0.001473f, -0.001665f, 0.002253f, 0.002466f, -0.000178f, 0.000264f, 0.001227f, - -0.001368f, 0.001216f, -0.002631f, -0.001082f, -0.000443f, -0.000548f, -0.001426f, -0.000049f, -0.000095f, -0.000291f, -0.000845f, -0.000062f, -0.001432f, 0.000753f, -0.000730f, 0.001637f, -0.001088f, 0.001220f, 0.001645f, 0.020362f, 0.003762f, -0.002850f, 0.006224f, -0.003076f, -0.002546f, -0.003260f, -0.001325f, -0.007645f, 0.010824f, 0.006253f, 0.004673f, 0.005031f, 0.004786f, -0.005016f, -0.006759f, 0.009111f, -0.001958f, -0.007069f, -0.013458f, 0.002204f, -0.003984f, 0.004224f, 0.000085f, -0.001142f, -0.003012f, 0.004236f, -0.004986f, -0.002520f, 0.006652f, 0.012636f, 0.003292f, 0.005749f, 0.001096f, 0.006355f, -0.001316f, 0.006761f, 0.004266f, 0.000764f, 0.003782f, 0.000336f, 0.001111f, 0.000348f, 0.009236f, 0.001956f, 0.002430f, -0.002087f, 0.001368f, -0.000655f, -0.001292f, 0.007494f, 0.008579f, -0.003085f, -0.003158f, 0.001729f, 0.007895f, -0.012851f, -0.000674f, -0.003491f, -0.009512f, -0.003872f, 0.001323f, -0.004056f, 0.004228f, 0.003425f, 0.000283f, -0.005801f, 0.002699f, -0.001237f, -0.005548f, 0.007116f, -0.009823f, -0.004645f, -0.010477f, -0.005187f, -0.001489f, 0.001558f, - 0.010569f, -0.004571f, -0.002756f, 0.003266f, -0.001669f, -0.002516f, 0.005005f, -0.000831f, -0.000208f, -0.002289f, -0.003546f, -0.004398f, -0.001175f, 0.003732f, 0.001485f, 0.001813f, 0.001731f, 0.001323f, 0.000131f, -0.000627f, -0.000274f, 0.000296f, 0.002634f, 0.001281f, 0.001386f, -0.000905f, 0.000215f, 0.000903f, 0.000745f, -0.000002f, 0.000168f, 0.000006f, -0.000203f, -0.000366f, -0.001846f, -0.001419f, -0.000960f, 0.001017f, 0.000852f, -0.000416f, 0.006145f, 0.002721f, -0.012411f, -0.001154f, 0.001828f, 0.008837f, -0.002669f, -0.015367f, 0.012384f, -0.014519f, 0.000761f, -0.006326f, -0.005048f, -0.015396f, -0.010259f, -0.005988f, -0.003900f, 0.006378f, 0.002140f, -0.010124f, 0.001428f, -0.005399f, 0.000068f, -0.000324f, 0.004173f, 0.000890f, -0.004445f, 0.000761f, 0.001075f, 0.002531f, -0.003146f, -0.002130f, -0.000951f, -0.004987f, -0.007643f, 0.010372f, 0.004779f, 0.001441f, -0.001438f, 0.008843f, 0.007597f, -0.008643f, 0.002416f, 0.000871f, -0.001673f, -0.005018f, 0.001130f, -0.008930f, 0.001998f, -0.001664f, -0.007349f, 0.009094f, 0.000132f, -0.000660f, 0.011308f, -0.009801f, - 0.008889f, 0.003335f, -0.001349f, -0.007251f, 0.002094f, -0.001011f, -0.007736f, -0.006382f, 0.000030f, -0.002771f, -0.003491f, -0.010612f, 0.000463f, 0.002317f, 0.004963f, -0.003051f, 0.004613f, 0.001455f, -0.001919f, -0.001444f, -0.006332f, 0.005483f, 0.001077f, 0.000839f, -0.010499f, 0.005528f, -0.000958f, 0.000786f, -0.005446f, 0.000210f, -0.009651f, 0.001210f, 0.002011f, 0.001338f, -0.000879f, 0.000989f, -0.000239f, 0.000115f, -0.001727f, 0.000571f, -0.000554f, 0.002161f, 0.001152f, 0.000926f, 0.001895f, 0.000078f, 0.000608f, 0.002012f, 0.001118f, -0.001308f, -0.000615f, 0.003166f, -0.001165f, 0.000670f, -0.001136f, 0.001217f, -0.003641f, -0.000836f, -0.001160f, 0.001522f, -0.000714f, -0.022861f, -0.021660f, 0.008398f, 0.014326f, 0.008683f, -0.019512f, 0.013897f, -0.004725f, -0.001770f, 0.001222f, -0.009028f, -0.006866f, 0.016395f, -0.000236f, -0.000020f, 0.001238f, -0.000383f, 0.005343f, -0.008144f, 0.004943f, -0.004311f, 0.004430f, 0.007510f, -0.004980f, -0.001341f, 0.004340f, -0.001243f, 0.007816f, -0.002430f, 0.003393f, 0.000686f, -0.000803f, 0.000661f, -0.006673f, -0.009267f, - 0.008749f, 0.001150f, -0.001692f, 0.000080f, -0.008698f, -0.010815f, -0.000307f, 0.000212f, 0.005630f, -0.010054f, -0.008579f, -0.001827f, -0.017877f, 0.006941f, -0.001414f, 0.003648f, -0.001379f, -0.004301f, 0.002728f, 0.022899f, 0.012704f, 0.006647f, -0.006868f, 0.009026f, -0.000109f, -0.011759f, 0.000028f, -0.012274f, 0.010425f, 0.001438f, 0.001226f, -0.006993f, 0.000059f, 0.007138f, 0.002607f, 0.001427f, 0.000887f, 0.000798f, 0.007659f, 0.005346f, 0.000976f, 0.005208f, 0.003087f, 0.004159f, 0.011213f, 0.004658f, 0.005511f, -0.005204f, 0.004206f, 0.003143f, -0.001356f, 0.008845f, 0.002672f, -0.000027f, -0.000810f, 0.002640f, 0.004690f, 0.000574f, -0.000075f, -0.001749f, 0.001115f, 0.003880f, 0.002126f, -0.000887f, 0.000364f, -0.003192f, 0.000896f, 0.000800f, -0.001443f, 0.000307f, -0.000220f, -0.000064f, 0.002151f, -0.000423f, 0.002245f, 0.003113f, 0.001100f, -0.001834f, -0.003546f, 0.000575f, -0.002245f, 0.001694f, 0.001506f, -0.002241f, 0.000890f, -0.032844f, -0.002500f, -0.007901f, -0.001149f, -0.005490f, -0.018632f, -0.000794f, -0.005012f, -0.007682f, -0.017467f, -0.002155f, - 0.012401f, -0.008668f, 0.008157f, -0.001446f, 0.011501f, -0.003899f, 0.009344f, -0.003082f, -0.009255f, -0.002485f, 0.000993f, -0.004061f, -0.008322f, -0.006688f, -0.008181f, 0.000262f, -0.007465f, 0.002718f, 0.000879f, 0.000744f, 0.003529f, -0.005617f, -0.007521f, 0.010846f, -0.000992f, 0.003214f, 0.000110f, -0.008521f, -0.005406f, -0.006017f, 0.000290f, -0.004321f, 0.007561f, 0.007685f, 0.001267f, -0.010438f, -0.003423f, 0.019189f, 0.004772f, -0.008123f, -0.006462f, -0.004115f, -0.007118f, -0.003765f, 0.014991f, 0.009120f, -0.010890f, 0.006656f, 0.008841f, 0.013053f, -0.003373f, 0.005303f, -0.000806f, 0.000111f, -0.005291f, -0.010877f, -0.001972f, 0.008017f, 0.000821f, 0.015532f, 0.011020f, 0.000733f, 0.003604f, 0.013100f, -0.010441f, -0.004787f, -0.003083f, -0.006432f, 0.004615f, 0.002027f, 0.002115f, -0.005638f, 0.003824f, -0.004097f, 0.004239f, -0.008015f, -0.000377f, -0.000743f, -0.003147f, -0.000197f, -0.000690f, 0.003935f, 0.001074f, 0.000882f, -0.003437f, -0.002324f, -0.001110f, -0.003237f, -0.000140f, -0.004669f, -0.002719f, 0.000189f, -0.000365f, 0.002909f, -0.001987f, 0.000796f, - -0.000962f, 0.001583f, 0.001142f, 0.004025f, -0.003328f, 0.042097f, 0.028257f, -0.008700f, -0.001586f, 0.000109f, -0.001146f, -0.004810f, 0.005880f, 0.014416f, 0.012167f, 0.006323f, -0.022083f, -0.009809f, 0.002840f, 0.001288f, 0.009385f, -0.016618f, 0.003361f, 0.022546f, 0.015172f, -0.002582f, 0.005406f, -0.001974f, -0.007610f, -0.010386f, 0.000580f, -0.008849f, -0.005167f, 0.002599f, 0.006999f, -0.006484f, -0.012088f, -0.005739f, 0.002078f, 0.011107f, 0.015501f, -0.002945f, -0.016394f, -0.003463f, -0.005863f, -0.016443f, -0.000993f, -0.000492f, -0.007897f, 0.002726f, 0.004429f, 0.009619f, -0.013800f, 0.005642f, 0.007112f, 0.001557f, -0.013346f, -0.009906f, 0.004541f, 0.000589f, 0.003459f, -0.001450f, -0.001311f, -0.000458f, -0.007402f, 0.003650f, 0.003856f, -0.005161f, 0.009254f, 0.010959f, 0.014973f, 0.003600f, 0.001114f, 0.014117f, 0.022999f, 0.003678f, 0.003140f, 0.003925f, 0.013521f, 0.001536f, 0.007997f, 0.022718f, 0.006731f, 0.004188f, 0.000618f, -0.004288f, -0.019423f, 0.002599f, -0.000531f, -0.003152f, -0.003728f, 0.002389f, -0.002708f, 0.004799f, 0.002119f, -0.002568f, - -0.001431f, -0.000657f, 0.003899f, 0.002493f, -0.001100f, -0.000756f, 0.002647f, 0.005770f, 0.000024f, -0.001448f, 0.001995f, 0.000220f, -0.002717f, -0.005368f, 0.003874f, -0.005055f, 0.003059f, 0.002134f, 0.003726f, -0.000254f, -0.000651f, 0.000077f, 0.001198f, -0.007051f, 0.000176f, 0.001027f, -0.000698f, 0.022154f, 0.000490f, 0.004617f, 0.005389f, 0.010684f, -0.004165f, 0.006804f, -0.005756f, -0.003672f, -0.018250f, 0.007284f, 0.012474f, -0.011292f, 0.009469f, -0.004673f, -0.015989f, 0.016658f, 0.009894f, -0.002967f, 0.010004f, 0.019508f, 0.013689f, -0.010062f, -0.005596f, 0.009834f, 0.003136f, -0.002221f, 0.007601f, 0.006949f, 0.010162f, 0.000642f, -0.004407f, -0.008699f, -0.015419f, -0.000507f, -0.012793f, 0.001579f, -0.004146f, 0.007164f, -0.010167f, -0.023455f, 0.005192f, -0.005818f, 0.010859f, 0.002729f, 0.000883f, -0.006492f, -0.013784f, -0.011595f, -0.001060f, -0.001187f, -0.010385f, 0.014674f, 0.019022f, 0.019709f, 0.008005f, -0.014114f, -0.001204f, 0.018674f, 0.001836f, -0.003221f, 0.008734f, -0.002444f, -0.004668f, -0.017729f, 0.009806f, 0.005136f, 0.025733f, 0.011877f, - -0.017417f, 0.005861f, 0.006601f, -0.001849f, -0.000282f, 0.006236f, -0.004209f, 0.001430f, -0.007443f, -0.018386f, 0.016657f, 0.003040f, 0.009945f, 0.004799f, -0.008627f, 0.014068f, -0.003082f, 0.003353f, 0.000800f, -0.003111f, 0.000579f, 0.000431f, 0.001161f, 0.007361f, 0.002480f, 0.001406f, 0.000678f, -0.002514f, -0.002916f, -0.003844f, -0.002229f, 0.002539f, -0.001174f, -0.000192f, -0.001423f, 0.002327f, -0.002108f, -0.001125f, 0.000270f, -0.000280f, 0.001035f, -0.004053f, 0.004761f, -0.001982f, 0.004196f, 0.001371f, -0.002117f, -0.002673f, 0.005904f, -0.005346f, 0.004751f, -0.001295f, -0.006824f, -0.011383f, -0.003071f, -0.002906f, -0.019650f, 0.000986f, 0.002413f, 0.009838f, -0.003715f, -0.008465f, 0.003528f, 0.001077f, 0.004652f, 0.000159f, 0.010678f, 0.004294f, 0.007376f, 0.001266f, -0.000822f, 0.006354f, 0.003716f, -0.019340f, -0.005977f, -0.027651f, 0.001256f, -0.005146f, 0.003199f, 0.004917f, 0.000374f, 0.013235f, 0.003368f, 0.018892f, 0.002324f, -0.022425f, 0.000461f, -0.009012f, -0.003709f, -0.001047f, -0.003362f, -0.001134f, -0.017788f, 0.003893f, -0.008561f, 0.021455f, - -0.022245f, 0.012369f, -0.004829f, -0.018985f, -0.003550f, -0.013342f, -0.002870f, -0.004046f, -0.020216f, 0.005829f, 0.006203f, -0.003679f, -0.003338f, -0.001265f, 0.007166f, -0.016038f, 0.000418f, 0.015092f, 0.002794f, 0.020985f, 0.034234f, 0.014169f, -0.030983f, -0.041336f, 0.020078f, 0.009019f, 0.030908f, -0.006369f, 0.014839f, 0.003200f, 0.014738f, 0.020650f, 0.026566f, -0.014081f, 0.007674f, 0.019791f, -0.016161f, 0.003047f, -0.002062f, -0.001997f, 0.001505f, 0.014144f, -0.002132f, 0.004858f, -0.009120f, 0.003347f, -0.007027f, -0.007395f, -0.003262f, -0.006170f, 0.001045f, -0.003621f, -0.010415f, -0.000345f, 0.006946f, 0.004350f, -0.001918f, -0.001890f, -0.001528f, 0.000195f, 0.003247f, 0.003432f, -0.002672f, -0.004025f, -0.001776f, 0.006046f, -0.001441f, 0.005860f, 0.000949f, 0.000904f, -0.001446f, 0.001460f, 0.001752f, 0.000543f, 0.001639f, 0.000337f, -0.004905f, -0.004753f, -0.003092f, 0.001600f, 0.005021f, -0.006967f, -0.004638f, -0.002156f, 0.002952f, -0.003241f, -0.037832f, 0.028247f, 0.005249f, -0.005034f, -0.000503f, -0.017184f, -0.014002f, 0.014724f, -0.003909f, -0.004851f, - 0.015367f, -0.011424f, -0.012191f, 0.000642f, 0.015287f, 0.006439f, -0.004841f, 0.000413f, -0.008636f, -0.001213f, 0.001279f, 0.008123f, 0.000445f, -0.019393f, -0.019154f, 0.004289f, -0.002488f, 0.004599f, -0.001833f, 0.007694f, 0.015047f, 0.027842f, -0.000341f, 0.017255f, -0.004158f, 0.004841f, 0.012026f, -0.011648f, 0.022869f, -0.003322f, -0.014043f, -0.020041f, -0.003711f, -0.016638f, -0.020805f, -0.005845f, 0.009753f, -0.006525f, -0.016132f, 0.008055f, 0.011700f, 0.018038f, 0.023503f, -0.019133f, 0.007395f, -0.005378f, -0.017412f, 0.006516f, -0.019475f, -0.003668f, -0.031879f, 0.012729f, -0.009413f, 0.004687f, -0.005624f, 0.004994f, -0.034277f, -0.034365f, -0.020676f, -0.008104f, 0.019198f, -0.018509f, 0.036308f, -0.012790f, 0.003763f, -0.003401f, 0.006913f, -0.003331f, -0.025398f, 0.003677f, 0.003172f, 0.006957f, 0.006129f, 0.002976f, 0.010105f, -0.005706f, -0.008576f, 0.000016f, 0.000608f, -0.008561f, 0.004095f, -0.011012f, 0.006443f, 0.003674f, 0.005269f, -0.001632f, 0.000247f, -0.003374f, -0.008257f, -0.006190f, -0.003244f, -0.003849f, 0.005898f, -0.003819f, -0.010012f, 0.003540f, - 0.004653f, -0.001902f, 0.007234f, -0.000596f, -0.001780f, -0.000049f, 0.001929f, -0.003000f, -0.002636f, 0.003698f, 0.005350f, 0.003777f, 0.002017f, -0.007477f, -0.005027f, -0.001622f, -0.005602f, 0.002199f, 0.000894f, -0.000070f, -0.004983f, 0.031777f, 0.002058f, 0.011874f, 0.008615f, 0.003174f, 0.018831f, 0.002376f, -0.025900f, 0.012376f, 0.003938f, 0.011807f, -0.000991f, -0.019522f, 0.027843f, 0.014750f, 0.011550f, -0.002820f, -0.008194f, 0.003352f, -0.001825f, -0.015538f, 0.010121f, 0.006717f, -0.008336f, 0.010896f, 0.017787f, 0.000247f, 0.006817f, 0.017291f, -0.018877f, 0.004348f, -0.006232f, 0.007628f, -0.035677f, 0.010719f, 0.017455f, -0.006268f, 0.004789f, 0.017054f, 0.009442f, 0.000027f, 0.005909f, -0.018212f, 0.004817f, -0.010828f, 0.001000f, 0.004941f, 0.003039f, -0.008467f, 0.034556f, -0.006454f, -0.006319f, -0.008316f, -0.029779f, -0.012463f, -0.018170f, -0.021590f, -0.003902f, 0.029228f, 0.032620f, -0.003515f, 0.010215f, 0.012643f, -0.026883f, -0.009095f, 0.022208f, 0.017828f, -0.010556f, -0.007951f, -0.026472f, -0.009035f, -0.009889f, -0.013231f, -0.014843f, 0.003635f, - -0.027009f, 0.004099f, 0.025757f, 0.035316f, 0.011199f, -0.010898f, -0.000524f, 0.018543f, -0.006416f, -0.013286f, 0.001465f, -0.002058f, -0.005452f, -0.009058f, 0.001492f, -0.001303f, 0.004448f, 0.005238f, 0.003501f, -0.003505f, 0.001870f, 0.002592f, 0.002582f, -0.000933f, -0.004993f, -0.011852f, 0.003482f, -0.001149f, -0.004435f, 0.008216f, 0.002943f, 0.004409f, -0.004627f, 0.006902f, -0.004973f, -0.004451f, -0.005626f, 0.005367f, 0.001397f, 0.003836f, 0.008832f, -0.001221f, -0.004192f, -0.002873f, 0.004552f, 0.001443f, -0.000132f, -0.000270f, 0.001435f, 0.000731f, -0.000251f, -0.002247f, 0.004625f, 0.005346f, 0.007447f, -0.002924f, -0.010066f, 0.006291f, 0.001700f, -0.013404f, -0.019826f, -0.021354f, -0.008491f, -0.020877f, -0.008637f, -0.008467f, 0.000381f, -0.019858f, 0.004499f, 0.008365f, 0.000985f, -0.022664f, 0.007118f, -0.028116f, 0.008765f, 0.015718f, 0.000525f, 0.024424f, 0.000824f, -0.007237f, -0.004366f, 0.016487f, -0.005827f, 0.022686f, 0.008167f, -0.007802f, -0.007656f, 0.004032f, -0.011434f, -0.006192f, 0.000979f, 0.021474f, -0.000585f, 0.011379f, 0.006582f, 0.002004f, - 0.015182f, -0.006677f, -0.013627f, 0.006180f, -0.009710f, -0.004508f, -0.026760f, 0.015244f, -0.009290f, -0.007879f, -0.005282f, -0.029602f, 0.035692f, 0.009299f, -0.004048f, 0.015558f, 0.005249f, 0.007624f, -0.015530f, -0.023538f, -0.026697f, -0.012882f, 0.001605f, -0.027065f, 0.010344f, 0.019806f, -0.030268f, -0.011014f, 0.011396f, -0.013913f, 0.007578f, 0.033992f, 0.001307f, -0.005364f, -0.008777f, 0.007775f, -0.018186f, 0.012176f, 0.006739f, -0.016490f, 0.005690f, 0.011941f, -0.006467f, -0.019546f, -0.016581f, -0.008672f, -0.000378f, 0.005525f, 0.004850f, 0.003824f, -0.003167f, -0.004782f, -0.002181f, 0.004488f, 0.000504f, -0.002638f, -0.010851f, -0.013117f, -0.003351f, 0.001058f, -0.009195f, -0.011214f, -0.007566f, -0.004627f, -0.004050f, -0.009817f, -0.008302f, -0.004477f, -0.005901f, -0.012571f, 0.002516f, 0.012097f, -0.000902f, -0.000968f, -0.004480f, -0.003460f, 0.004295f, -0.004330f, 0.001228f, -0.009873f, 0.000695f, -0.002751f, -0.005062f, 0.000138f, -0.004722f, 0.003287f, 0.005020f, -0.004054f, 0.007421f, -0.004781f, -0.001580f, -0.004946f, -0.000028f, 0.000972f, 0.021754f, 0.053626f, - 0.056697f, 0.016941f, 0.035263f, -0.024177f, -0.024062f, -0.005802f, -0.003369f, 0.001891f, 0.008186f, 0.017885f, 0.032668f, 0.010491f, 0.030257f, 0.003173f, 0.009329f, 0.004317f, -0.008044f, 0.013547f, -0.000100f, 0.005303f, 0.002587f, -0.015456f, -0.001628f, -0.008370f, -0.016299f, -0.010495f, 0.000542f, 0.001481f, -0.021698f, -0.009231f, 0.027982f, 0.019777f, 0.014688f, 0.023274f, -0.014240f, -0.000028f, -0.039966f, 0.001688f, 0.034869f, -0.006933f, -0.006575f, 0.003966f, -0.003397f, 0.026864f, -0.001832f, -0.004704f, 0.021180f, -0.025083f, -0.040006f, -0.016453f, 0.003936f, -0.021886f, 0.016373f, 0.022247f, -0.031422f, -0.012229f, 0.000612f, -0.000796f, -0.045231f, -0.029234f, 0.014969f, 0.006098f, -0.003046f, 0.014467f, -0.019523f, -0.012416f, -0.027775f, 0.006485f, 0.009430f, 0.002126f, 0.002343f, -0.018918f, -0.030643f, 0.025462f, -0.041803f, 0.012116f, -0.015053f, 0.040086f, 0.004616f, 0.016584f, -0.011061f, -0.016141f, 0.012140f, 0.005221f, 0.018521f, -0.017428f, -0.002648f, 0.012021f, -0.000340f, -0.009757f, -0.008414f, -0.009597f, 0.001385f, 0.009186f, 0.010854f, -0.011827f, - -0.004328f, -0.002120f, -0.014924f, -0.005719f, 0.003329f, -0.001926f, 0.001881f, -0.008322f, -0.013015f, -0.002163f, 0.000893f, 0.010384f, 0.003847f, -0.006807f, 0.008766f, 0.001168f, 0.004747f, -0.015176f, 0.003638f, -0.009158f, 0.007678f, 0.001083f, 0.008103f, 0.011774f, 0.004321f, -0.008665f, -0.016212f, 0.005038f, 0.006272f, -0.052489f, -0.037749f, 0.026148f, -0.005445f, 0.047546f, -0.011585f, 0.039143f, -0.031484f, 0.000948f, 0.014079f, -0.003119f, 0.001703f, 0.004598f, -0.002439f, -0.023633f, 0.008305f, 0.008892f, 0.010359f, 0.011778f, -0.007256f, 0.019426f, -0.017639f, -0.013035f, -0.010078f, 0.027324f, -0.015070f, -0.005083f, 0.002462f, -0.000570f, -0.014175f, 0.012184f, -0.015818f, -0.018843f, -0.035508f, 0.003241f, 0.006521f, -0.024123f, -0.011245f, 0.011620f, -0.004873f, 0.006210f, 0.001939f, 0.028052f, 0.001962f, 0.021113f, 0.009425f, 0.000909f, 0.016928f, 0.003844f, 0.005870f, -0.031818f, 0.032779f, 0.011607f, 0.025685f, -0.015603f, 0.006827f, -0.017077f, 0.026646f, 0.020209f, 0.032507f, 0.005182f, -0.008499f, -0.023620f, -0.001457f, 0.004166f, -0.020092f, 0.028560f, - 0.004620f, 0.004442f, 0.030770f, 0.006882f, -0.009200f, -0.012280f, -0.000983f, 0.018283f, 0.022087f, -0.007176f, 0.027541f, -0.032929f, -0.034478f, -0.015098f, 0.008045f, -0.010518f, 0.015072f, -0.003752f, 0.008106f, 0.026364f, -0.001144f, 0.013086f, -0.010946f, -0.010039f, 0.011562f, -0.001016f, 0.018526f, -0.005716f, -0.000082f, -0.005678f, -0.011381f, 0.002314f, -0.006679f, -0.002675f, 0.007663f, 0.002588f, -0.010336f, -0.009517f, 0.005602f, 0.013994f, 0.014578f, -0.001473f, 0.011953f, 0.012909f, -0.018052f, 0.008442f, 0.017186f, 0.013460f, 0.007661f, -0.013533f, -0.016318f, -0.017097f, -0.017152f, -0.017108f, 0.001506f, -0.005978f, -0.002319f, 0.001927f, -0.012515f, 0.008934f, 0.008194f, -0.006491f, 0.009738f, 0.003422f, 0.004655f, -0.011993f, 0.024190f, -0.057049f, -0.002593f, 0.029730f, -0.018988f, -0.006334f, 0.021919f, -0.023743f, -0.048229f, 0.009612f, 0.008223f, 0.007501f, -0.006264f, -0.028508f, 0.007239f, 0.008144f, 0.002194f, 0.015883f, -0.051089f, 0.023510f, -0.011828f, 0.012262f, -0.029083f, 0.023763f, -0.036811f, -0.023488f, 0.014380f, -0.009596f, -0.004222f, -0.027960f, - 0.022099f, 0.029065f, 0.000003f, 0.003313f, -0.013251f, 0.043571f, 0.010877f, 0.011951f, -0.007798f, -0.037525f, -0.007984f, 0.020890f, -0.003671f, 0.031216f, 0.000384f, -0.011150f, 0.007635f, -0.002044f, 0.019645f, -0.037090f, -0.004352f, -0.028408f, 0.031029f, -0.011346f, 0.010512f, -0.000705f, -0.000933f, -0.033573f, -0.011675f, 0.029817f, 0.009654f, 0.002837f, -0.008739f, 0.001069f, 0.003987f, -0.043042f, -0.044566f, 0.047886f, -0.020947f, -0.051558f, 0.021296f, 0.024693f, -0.041448f, -0.054302f, -0.037815f, -0.036310f, 0.006747f, 0.014750f, -0.004303f, -0.034877f, -0.000869f, -0.018547f, -0.008571f, -0.025203f, -0.001134f, 0.002833f, 0.002858f, -0.004805f, 0.024422f, -0.012808f, 0.009800f, -0.010822f, -0.000226f, 0.006916f, -0.005807f, -0.000627f, -0.013916f, 0.019158f, -0.004042f, 0.006945f, -0.010089f, -0.014900f, -0.002784f, 0.007740f, 0.008846f, 0.003019f, -0.014453f, 0.009183f, -0.001715f, -0.011544f, 0.012091f, -0.017663f, -0.003162f, -0.010760f, 0.018579f, -0.007541f, -0.019636f, 0.009198f, -0.007489f, -0.008208f, -0.026216f, -0.000929f, 0.006488f, 0.022889f, 0.009676f, -0.012710f, - -0.006250f, 0.002744f, -0.003050f, -0.006494f, 0.004677f, -0.000464f, -0.004553f, -0.004434f, -0.001183f, 0.022822f, -0.031766f, -0.016974f, -0.033193f, -0.002556f, 0.006202f, -0.043461f, 0.006525f, -0.021016f, 0.060580f, 0.003682f, -0.055498f, -0.012169f, 0.026124f, 0.016768f, 0.012463f, 0.028163f, 0.027291f, -0.039204f, -0.010675f, -0.014877f, 0.036647f, -0.012605f, 0.042876f, 0.000417f, -0.025659f, -0.019509f, -0.039406f, -0.044044f, 0.002059f, 0.005665f, -0.007875f, -0.022458f, -0.010374f, 0.003490f, 0.006446f, 0.015778f, -0.022397f, 0.011561f, -0.026235f, -0.029616f, 0.005252f, -0.005918f, -0.008661f, -0.030900f, -0.030435f, -0.013823f, -0.009849f, 0.043195f, 0.003294f, 0.014868f, 0.023321f, -0.000204f, 0.052992f, 0.022286f, -0.018551f, 0.003314f, 0.026950f, -0.010244f, 0.034296f, -0.008640f, 0.003699f, 0.002979f, -0.048175f, -0.048029f, 0.006479f, 0.034540f, 0.000019f, -0.010021f, -0.053823f, 0.003991f, 0.017428f, 0.011976f, -0.018948f, -0.014265f, -0.011286f, 0.007069f, -0.023670f, 0.056983f, 0.031082f, 0.035166f, 0.006134f, -0.039244f, 0.013750f, 0.018747f, 0.055435f, 0.013531f, - 0.005005f, 0.023135f, 0.008898f, -0.008589f, -0.000226f, 0.017861f, -0.002344f, 0.002930f, 0.004852f, -0.013681f, -0.010739f, 0.017383f, -0.000265f, -0.013003f, 0.016946f, -0.010397f, -0.004812f, -0.007833f, -0.008902f, 0.016297f, -0.010898f, -0.003978f, 0.007589f, -0.016378f, 0.006379f, -0.000980f, -0.010430f, 0.021294f, -0.008224f, 0.000559f, -0.027199f, 0.016714f, -0.008826f, -0.006342f, -0.017802f, -0.023679f, 0.003092f, -0.009225f, 0.016312f, -0.000012f, 0.009378f, 0.007056f, -0.000355f, -0.009557f, -0.000458f, -0.026399f, -0.024087f, 0.050858f, -0.015778f, -0.018823f, -0.002710f, -0.014006f, -0.034658f, 0.000753f, 0.023923f, -0.059409f, -0.001061f, 0.015431f, 0.018920f, -0.020253f, 0.013417f, -0.034012f, 0.002557f, -0.008771f, 0.010581f, -0.030463f, 0.018899f, -0.051878f, 0.008429f, 0.001432f, 0.029313f, 0.027654f, 0.013675f, -0.019375f, 0.021512f, -0.006317f, 0.024036f, -0.026271f, 0.004054f, 0.030766f, 0.024283f, -0.014445f, 0.004904f, 0.000772f, -0.006931f, 0.014923f, -0.005920f, -0.017916f, -0.020085f, 0.014227f, -0.036191f, 0.023819f, 0.005433f, -0.038683f, 0.036301f, 0.034870f, - 0.032675f, 0.011831f, -0.017204f, 0.042201f, 0.004918f, 0.018125f, -0.026084f, -0.022511f, -0.025017f, 0.007697f, 0.009457f, 0.015107f, -0.035038f, 0.003363f, 0.025446f, -0.066941f, 0.002311f, -0.022003f, 0.041733f, 0.027020f, 0.020845f, -0.005953f, 0.027578f, -0.026277f, -0.001615f, -0.018310f, -0.040485f, -0.001730f, -0.037309f, -0.031045f, 0.017883f, 0.049401f, -0.046743f, -0.011075f, -0.008771f, 0.049590f, -0.012562f, 0.021660f, -0.014530f, -0.008769f, -0.002210f, 0.017502f, -0.010697f, -0.004394f, 0.001108f, 0.011898f, 0.008478f, 0.006221f, -0.006960f, 0.001741f, 0.004831f, 0.024511f, -0.019820f, 0.020437f, -0.004838f, 0.014924f, -0.000352f, 0.003899f, 0.004838f, 0.009354f, -0.013273f, -0.003017f, -0.002906f, -0.016102f, -0.014718f, -0.014305f, 0.009415f, 0.007799f, -0.003360f, -0.006495f, -0.008695f, -0.011323f, -0.007402f, 0.000797f, -0.005455f, -0.000262f, 0.014322f, -0.000497f, -0.027600f, 0.012566f, -0.016368f, -0.002581f, 0.044219f, 0.009597f, 0.022390f, -0.063714f, 0.029534f, -0.035613f, 0.048237f, -0.004746f, 0.018755f, 0.036654f, -0.039525f, 0.070493f, 0.050453f, 0.038191f, - -0.017368f, 0.010394f, 0.048193f, -0.011972f, -0.015605f, -0.011112f, -0.002641f, -0.036313f, 0.009552f, -0.019244f, -0.044349f, 0.042998f, 0.014050f, 0.011945f, 0.005241f, 0.010107f, 0.016450f, 0.045261f, 0.009334f, -0.027925f, -0.002547f, -0.028983f, 0.005623f, 0.004412f, -0.051460f, -0.001982f, 0.027775f, 0.002240f, -0.003836f, -0.015452f, 0.054371f, 0.011450f, 0.023056f, 0.012222f, -0.029618f, -0.020823f, -0.016269f, 0.034109f, 0.019829f, -0.006568f, 0.020383f, -0.002804f, -0.037332f, 0.036265f, 0.004198f, 0.041539f, 0.004379f, 0.004479f, 0.000625f, -0.054608f, 0.007278f, 0.001688f, 0.005869f, 0.034330f, -0.013685f, 0.053893f, -0.081748f, -0.014244f, 0.060604f, -0.024389f, 0.019905f, -0.027524f, -0.043622f, -0.034722f, 0.024970f, -0.023654f, 0.023263f, -0.037319f, -0.008268f, 0.006579f, -0.009480f, -0.014514f, -0.004985f, -0.004163f, 0.016155f, 0.038038f, 0.003751f, 0.022684f, -0.007572f, -0.003495f, 0.027306f, -0.003732f, -0.008119f, 0.007909f, -0.014030f, 0.012538f, 0.023735f, -0.015737f, -0.002717f, -0.005950f, 0.004128f, 0.004812f, 0.011117f, 0.042982f, -0.008021f, 0.015352f, - 0.000494f, 0.010583f, 0.015230f, 0.008122f, 0.002116f, 0.024098f, 0.025402f, -0.006815f, -0.003900f, 0.010977f, 0.005282f, 0.009560f, -0.033349f, -0.002352f, 0.031096f, -0.006637f, 0.006216f, 0.012732f, -0.002060f, 0.032399f, 0.011428f, -0.066026f, -0.078991f, -0.006983f, -0.037021f, 0.005011f, 0.022497f, -0.031617f, 0.009234f, -0.048291f, 0.021015f, -0.026600f, -0.132016f, -0.008505f, 0.080555f, -0.034723f, -0.014916f, 0.080927f, -0.018977f, 0.004361f, 0.096977f, -0.023205f, 0.021459f, 0.009065f, -0.014140f, 0.078079f, -0.062849f, -0.008120f, -0.001692f, -0.011064f, -0.012625f, -0.012874f, -0.001532f, 0.025430f, -0.014279f, -0.042607f, 0.000519f, 0.000851f, 0.012631f, 0.015533f, 0.002863f, 0.035064f, -0.001295f, 0.016136f, -0.009521f, -0.042273f, 0.029522f, -0.005190f, -0.043465f, 0.001671f, 0.025166f, 0.076911f, 0.038972f, 0.064657f, 0.001430f, 0.015922f, 0.030936f, 0.007296f, -0.003697f, 0.060446f, -0.003106f, -0.023543f, 0.070839f, 0.012370f, 0.012592f, 0.000518f, -0.009894f, 0.040438f, 0.000078f, -0.023502f, -0.026452f, -0.005482f, -0.005157f, 0.061227f, -0.041423f, 0.005380f, - 0.007982f, -0.010863f, 0.071990f, 0.000622f, -0.045876f, 0.007743f, 0.023602f, -0.033753f, -0.001504f, 0.034448f, 0.028522f, -0.017340f, 0.002855f, -0.019598f, 0.016715f, -0.005254f, 0.002411f, -0.019282f, 0.018109f, 0.000276f, -0.001820f, -0.028037f, 0.011777f, 0.009647f, -0.018149f, 0.001499f, 0.006815f, -0.009400f, -0.006068f, 0.021768f, 0.003571f, 0.012176f, -0.007784f, 0.006447f, 0.037794f, -0.034043f, -0.015357f, -0.011098f, 0.040865f, 0.015262f, 0.021741f, -0.024444f, -0.022212f, -0.009000f, -0.002461f, -0.029656f, -0.033209f, 0.040275f, 0.016475f, -0.023377f, -0.021670f, -0.013241f, 0.000050f, -0.023162f, -0.020177f, 0.000530f, 0.006512f, 0.015464f, -0.003603f, -0.007206f, 0.003955f, 0.044871f, 0.036233f, -0.074052f, -0.036167f, 0.056851f, -0.010450f, -0.055515f, -0.000487f, 0.001096f, 0.020112f, 0.060115f, 0.053531f, -0.033015f, 0.009922f, -0.007547f, 0.000488f, -0.000634f, -0.034639f, 0.052124f, -0.015488f, -0.034312f, 0.012191f, -0.024661f, 0.029670f, 0.002501f, 0.042188f, -0.013099f, -0.040011f, -0.036273f, 0.031964f, -0.015493f, 0.041611f, -0.011285f, 0.026954f, -0.027480f, - -0.021272f, -0.013133f, 0.002980f, -0.034468f, 0.008420f, 0.001691f, 0.000559f, 0.033445f, -0.000394f, 0.011086f, -0.023330f, 0.016511f, -0.036817f, 0.039270f, -0.035420f, 0.023286f, 0.011894f, 0.032987f, -0.055432f, 0.001754f, 0.004653f, -0.016891f, -0.040058f, -0.067979f, -0.011368f, -0.058031f, -0.022277f, -0.046470f, -0.021600f, -0.084810f, -0.026331f, 0.038267f, 0.048629f, 0.026332f, 0.028302f, -0.004727f, 0.030750f, -0.060472f, -0.013811f, 0.009206f, 0.038944f, 0.010595f, -0.082983f, -0.003430f, -0.036491f, -0.024438f, 0.096986f, 0.065040f, -0.046011f, -0.018880f, -0.032315f, 0.010653f, -0.085520f, 0.005094f, 0.017826f, -0.024602f, -0.025386f, 0.015391f, 0.004980f, 0.000663f, -0.016433f, -0.014576f, -0.014076f, -0.014416f, 0.026674f, 0.024323f, -0.001762f, -0.007022f, -0.026332f, -0.030369f, -0.006431f, -0.007731f, 0.010160f, 0.025939f, -0.050981f, -0.004030f, 0.025489f, -0.000273f, 0.032622f, -0.011562f, -0.031277f, 0.016714f, 0.035261f, 0.017658f, -0.021214f, 0.002421f, 0.032629f, -0.041751f, -0.029638f, 0.054950f, 0.003005f, -0.002080f, -0.005641f, 0.008548f, 0.012671f, 0.016553f, - -0.006976f, -0.013627f, -0.097628f, 0.028567f, 0.015205f, -0.051275f, 0.020149f, 0.019152f, -0.037379f, -0.028542f, 0.043719f, 0.005523f, 0.023233f, -0.011706f, 0.028859f, -0.009142f, -0.004693f, 0.022903f, 0.010921f, 0.007568f, 0.000517f, -0.015330f, -0.026603f, -0.016058f, 0.041327f, -0.014524f, -0.036064f, 0.061193f, 0.037636f, 0.004928f, 0.027761f, 0.008372f, -0.031693f, -0.093219f, 0.038094f, -0.003009f, -0.050560f, 0.042448f, -0.004612f, -0.067909f, -0.057352f, -0.029623f, 0.044517f, 0.018050f, 0.046146f, 0.058459f, 0.017286f, -0.047003f, 0.014780f, 0.017098f, -0.060170f, -0.009542f, 0.033692f, -0.018585f, -0.065553f, -0.049464f, -0.079879f, -0.050670f, -0.011664f, 0.050570f, 0.072820f, 0.035339f, -0.004959f, 0.050430f, -0.012671f, -0.122968f, -0.097795f, 0.021664f, -0.049332f, -0.058160f, 0.083564f, 0.011296f, -0.112687f, -0.086767f, 0.029616f, 0.005466f, 0.019169f, 0.042140f, 0.100728f, 0.058114f, -0.008549f, 0.112564f, 0.035736f, -0.117462f, 0.001004f, -0.024778f, 0.060853f, 0.018631f, -0.038690f, 0.019280f, -0.029045f, -0.016861f, -0.025265f, 0.038676f, -0.007091f, 0.028396f, - 0.023489f, 0.030734f, -0.006778f, -0.029981f, -0.009859f, 0.021376f, -0.013090f, 0.018061f, 0.011362f, 0.013165f, -0.026377f, 0.003675f, 0.010704f, 0.001073f, 0.047485f, -0.001063f, 0.021113f, 0.005242f, -0.007829f, 0.025967f, 0.006147f, -0.003154f, 0.028241f, -0.012838f, -0.004274f, 0.017943f, 0.007124f, -0.001977f, -0.011411f, -0.015266f, 0.001849f, -0.017614f, -0.013620f, 0.010645f, 0.013608f, 0.092404f, 0.089382f, -0.027976f, 0.031039f, -0.036510f, 0.022299f, 0.001447f, 0.012849f, -0.043547f, 0.003360f, -0.037163f, -0.033484f, 0.000590f, -0.077203f, 0.002179f, -0.032925f, 0.008873f, 0.022547f, -0.000306f, 0.026139f, -0.037590f, 0.057311f, -0.028088f, -0.001155f, 0.040035f, -0.037543f, 0.014936f, 0.028530f, 0.035564f, 0.004931f, 0.013059f, 0.008575f, -0.055027f, -0.030973f, -0.008583f, 0.008009f, 0.008922f, -0.008407f, 0.037094f, -0.012019f, -0.000118f, -0.007188f, -0.015504f, 0.012802f, 0.007709f, -0.043978f, 0.013296f, -0.035382f, 0.010046f, -0.084743f, -0.003687f, -0.002305f, 0.000222f, 0.034332f, -0.013522f, -0.031025f, -0.013365f, 0.031521f, 0.000305f, -0.081919f, 0.114748f, - -0.010197f, -0.021461f, 0.024716f, -0.004584f, -0.017028f, -0.021028f, -0.022971f, -0.024105f, 0.078224f, -0.029924f, -0.045634f, 0.039274f, 0.003595f, -0.061493f, -0.014807f, 0.026272f, 0.020383f, -0.020007f, 0.042099f, -0.007061f, -0.011804f, 0.039524f, -0.029010f, -0.026070f, 0.049282f, -0.021507f, -0.008022f, -0.002305f, 0.020772f, 0.010525f, -0.000708f, -0.003089f, 0.001036f, 0.009749f, -0.010358f, -0.000387f, 0.009503f, 0.010666f, 0.012108f, -0.029984f, 0.007646f, 0.015693f, -0.029713f, 0.002867f, 0.006001f, -0.004877f, -0.012134f, 0.012290f, 0.003207f, -0.010309f, 0.001532f, -0.000649f, -0.005156f, -0.036844f, 0.020962f, -0.021658f, 0.006494f, 0.006657f, -0.033840f, -0.001523f, 0.001472f, 0.000148f, -0.000652f, -0.011023f, -0.001836f, 0.009888f, -0.001545f, -0.072586f, -0.107567f, -0.103111f, 0.228437f, 0.189876f, 0.215850f, 0.488305f, 0.127567f, -0.122178f, 0.038432f, -0.391412f, -0.415290f, -0.102628f, -0.261056f, -0.201625f, 0.123281f, -0.064041f, 0.025584f, 0.311162f, 0.154253f, 0.230674f, 0.442700f, 0.295266f, 0.077032f, 0.064306f, -0.130653f, -0.403059f, -0.308189f, -0.235682f, - -0.476458f, -0.192643f, 0.011301f, -0.084223f, -0.038068f, 0.241059f, 0.063773f, 0.032459f, 0.298323f, 0.037066f, 0.071250f, 0.424080f, 0.311577f, 0.197450f, 0.400716f, 0.199757f, -0.070494f, -0.005988f, -0.127014f, -0.624376f, -0.545060f, -0.440241f, -0.684428f, -0.521333f, -0.184891f, -0.246963f, 0.055539f, 0.475215f, 0.424202f, 0.587394f, 0.741393f, 0.551785f, 0.430169f, 0.418602f, 0.231369f, -0.078447f, -0.149510f, -0.340607f, -0.486475f, -0.477657f, -0.414102f, -0.474187f, -0.485424f, -0.390214f, -0.218500f, -0.158348f, 0.058520f, 0.371539f, 0.535607f, 0.764897f, 0.860173f, 0.513460f, 0.124230f, -0.073992f, -0.519084f, -0.493899f, -0.376592f, -0.292721f, -0.109399f, 0.054255f, 0.039877f, 0.052168f, 0.065318f, 0.030170f, 0.076996f, 0.108601f, 0.080243f, 0.131240f, 0.074065f, -0.034757f, -0.042350f, -0.117770f, -0.214542f, -0.059716f, -0.068114f, -0.078299f, 0.065425f, 0.055980f, -0.074059f, -0.094941f, -0.175354f, -0.285276f, -0.120947f, 0.159996f, 0.273548f, 0.532502f, 0.642740f, 0.436360f, 0.269884f, 0.070656f, -0.244208f, -0.356191f, -0.402866f, -0.470650f, -0.442619f, -0.340352f, - -0.276505f, -0.229417f, -0.140510f, -0.037888f, 0.114358f, 0.404628f, 0.566067f, 0.501938f, 0.359618f, 0.220305f, 0.044583f, -0.092457f, -0.138875f, -0.175045f, -0.126414f, -0.038056f, -0.011547f, -0.041284f, -0.064633f, -0.100537f, -0.157002f, -0.202540f, -0.196351f, -0.198117f, -0.120746f, 0.005950f, 0.056511f, 0.112177f, 0.147845f, 0.132421f, 0.076330f, 0.028348f, 0.008473f, 0.002222f, 0.001551f}, - {0.016671f, -0.002219f, 0.001353f, 0.013061f, -0.001661f, -0.000641f, -0.003788f, 0.014250f, 0.000860f, 0.006911f, 0.004244f, 0.004169f, -0.005871f, 0.002927f, -0.009106f, -0.001030f, 0.007097f, 0.001398f, 0.004164f, 0.006626f, -0.011252f, -0.007911f, 0.002700f, -0.000600f, 0.008381f, 0.005052f, -0.000418f, -0.004684f, -0.002906f, -0.005786f, -0.000900f, -0.000810f, -0.000848f, 0.001547f, 0.002200f, -0.005043f, 0.008396f, -0.001973f, -0.001296f, 0.002819f, -0.010675f, -0.002514f, 0.004635f, 0.001587f, 0.010556f, -0.000089f, -0.000762f, 0.002010f, 0.000728f, 0.004339f, 0.007310f, 0.009233f, -0.000529f, -0.001010f, 0.000175f, -0.005394f, -0.006772f, 0.003689f, 0.006061f, -0.004305f, -0.004072f, -0.002810f, 0.007726f, 0.004492f, -0.001059f, 0.001147f, -0.009102f, -0.002680f, 0.004736f, 0.003867f, 0.006735f, -0.009848f, 0.002224f, 0.003644f, -0.002041f, 0.006845f, -0.000445f, 0.005958f, 0.002863f, 0.001874f, 0.007633f, 0.003727f, 0.001924f, -0.000001f, 0.000896f, -0.001884f, 0.000636f, 0.000997f, -0.000608f, -0.002778f, 0.001334f, 0.001255f, -0.002016f, -0.000348f, -0.001364f, 0.001351f, - 0.002186f, 0.000021f, -0.000292f, -0.000192f, -0.002048f, 0.000930f, -0.000733f, 0.001622f, 0.000784f, 0.000449f, 0.000346f, -0.000981f, 0.000534f, 0.000178f, 0.000850f, -0.001690f, -0.000791f, -0.000431f, 0.000200f, 0.021638f, 0.006032f, -0.005027f, 0.011119f, -0.005432f, 0.011572f, -0.003882f, -0.005186f, 0.005802f, 0.010827f, -0.000382f, -0.005259f, 0.002825f, 0.002326f, -0.000490f, -0.015259f, 0.003544f, 0.004558f, 0.001184f, 0.009642f, 0.012843f, 0.006988f, 0.012648f, 0.008700f, 0.007692f, -0.001990f, 0.008548f, 0.004212f, -0.006548f, 0.002515f, 0.003931f, -0.008308f, -0.010683f, -0.001557f, 0.004164f, 0.000247f, -0.003874f, -0.005067f, -0.005045f, -0.002404f, 0.005717f, 0.011600f, 0.009728f, 0.003769f, 0.007468f, -0.012004f, 0.000740f, -0.002995f, 0.000096f, -0.013788f, 0.005127f, -0.001241f, -0.003291f, -0.000445f, -0.003784f, -0.006765f, -0.004836f, 0.004965f, 0.001152f, 0.003833f, -0.005071f, 0.009569f, 0.002425f, -0.010863f, 0.004523f, 0.001496f, 0.003043f, 0.006114f, 0.001819f, 0.011133f, -0.003519f, 0.001318f, -0.012875f, 0.002559f, 0.001244f, 0.000481f, 0.000309f, - -0.002311f, 0.009166f, -0.002686f, -0.004250f, 0.007066f, -0.007189f, -0.003394f, -0.002961f, -0.001219f, -0.003343f, 0.002444f, 0.000630f, 0.001335f, -0.000076f, -0.000193f, 0.000139f, -0.001188f, 0.000812f, 0.001334f, -0.000441f, -0.000434f, -0.000036f, -0.002251f, -0.003858f, 0.001566f, 0.000506f, -0.002933f, -0.000374f, -0.000203f, -0.000634f, -0.003577f, 0.000990f, 0.000122f, -0.000079f, 0.000396f, 0.000690f, 0.000546f, -0.001364f, 0.000091f, -0.002513f, 0.001206f, -0.004521f, -0.004291f, -0.001559f, 0.004155f, -0.007557f, 0.002292f, -0.014800f, 0.002873f, 0.002643f, -0.001589f, 0.010357f, 0.000784f, -0.001294f, 0.001062f, 0.005426f, -0.008877f, 0.001159f, 0.002873f, 0.005619f, -0.012678f, -0.006606f, -0.004711f, 0.004568f, 0.002037f, -0.004140f, -0.012813f, 0.003012f, -0.012745f, -0.000911f, 0.005223f, -0.002506f, 0.004006f, -0.002345f, 0.008783f, 0.012729f, 0.006908f, -0.006774f, 0.001364f, 0.009618f, 0.006134f, -0.006145f, 0.005176f, 0.001386f, -0.009907f, 0.003403f, 0.013896f, 0.006341f, 0.004738f, 0.015247f, 0.001496f, -0.005954f, -0.011643f, -0.000635f, -0.006484f, -0.008039f, - -0.003634f, 0.008330f, -0.007904f, 0.002679f, -0.004670f, -0.004600f, 0.009968f, -0.001411f, 0.001752f, 0.007731f, 0.010817f, -0.004871f, -0.009702f, 0.012377f, 0.009710f, 0.006000f, 0.000702f, -0.007631f, 0.001321f, 0.009756f, -0.009894f, 0.002930f, -0.006405f, -0.000338f, 0.006236f, -0.005857f, -0.000199f, -0.011161f, -0.002790f, -0.001092f, 0.001801f, -0.000708f, -0.004054f, -0.000619f, 0.002236f, -0.003381f, -0.000719f, 0.001392f, 0.001390f, 0.000827f, 0.001036f, -0.000290f, -0.000679f, -0.004477f, 0.002469f, -0.000361f, 0.002540f, -0.001808f, -0.002740f, 0.000894f, 0.002417f, -0.001625f, 0.002151f, -0.000467f, -0.000002f, -0.000304f, -0.000319f, 0.002300f, -0.001279f, 0.000819f, -0.001292f, -0.029090f, -0.010609f, -0.004503f, 0.015930f, -0.006062f, -0.002361f, -0.009422f, -0.007920f, -0.001384f, -0.020930f, 0.011723f, 0.003913f, -0.000620f, -0.007712f, 0.011543f, -0.003224f, 0.005851f, -0.004652f, 0.003688f, 0.007409f, -0.009237f, 0.001008f, 0.010149f, 0.005783f, 0.004076f, 0.010913f, 0.009709f, -0.006067f, -0.007803f, -0.009673f, -0.000179f, -0.012729f, 0.003031f, -0.016824f, -0.003245f, - 0.012461f, 0.006516f, -0.004236f, -0.001328f, -0.012645f, 0.005749f, -0.005382f, 0.011170f, -0.006399f, -0.011492f, -0.002314f, -0.004744f, -0.009386f, 0.003642f, -0.002115f, -0.006015f, -0.006071f, -0.020345f, 0.002827f, -0.006109f, -0.015021f, -0.004019f, 0.009342f, 0.004757f, -0.007744f, 0.006430f, 0.008331f, 0.007989f, 0.003023f, -0.010403f, -0.001680f, -0.002315f, 0.007255f, -0.007312f, -0.002753f, 0.003787f, 0.003909f, -0.011384f, -0.013496f, -0.024343f, -0.004106f, -0.014140f, 0.004712f, -0.000550f, -0.003317f, 0.007155f, -0.001451f, -0.003259f, 0.003183f, 0.004880f, 0.004754f, 0.003647f, 0.008537f, -0.003618f, -0.002915f, -0.002289f, 0.001312f, 0.000427f, -0.001858f, 0.002336f, 0.003432f, -0.000747f, 0.000861f, -0.001483f, -0.001853f, -0.000358f, -0.001177f, 0.000352f, 0.000813f, 0.000102f, -0.002059f, 0.000333f, -0.001362f, -0.000550f, 0.001295f, 0.002733f, -0.001133f, 0.003274f, 0.004069f, 0.000630f, -0.001070f, -0.003460f, -0.000612f, 0.002332f, 0.001638f, -0.025258f, -0.010152f, -0.004498f, -0.007527f, 0.008638f, 0.011214f, 0.010637f, -0.021155f, -0.015739f, 0.006036f, 0.025757f, - 0.015173f, 0.000014f, 0.003623f, 0.007355f, -0.009289f, 0.006128f, -0.008616f, 0.006213f, 0.009097f, 0.001432f, 0.007291f, 0.002308f, -0.000558f, 0.003824f, 0.002212f, -0.006881f, -0.008783f, 0.012087f, 0.004847f, -0.008801f, 0.008597f, -0.004796f, -0.000941f, 0.020763f, -0.009956f, 0.011758f, 0.023150f, 0.009476f, -0.001376f, 0.000900f, -0.008420f, 0.010853f, -0.011134f, -0.006055f, -0.018680f, 0.003512f, 0.014310f, -0.000360f, -0.013240f, -0.004700f, -0.018749f, -0.009495f, -0.003528f, -0.026592f, -0.014526f, -0.002635f, 0.002760f, -0.011649f, 0.005839f, -0.003095f, -0.009251f, 0.009941f, 0.029329f, 0.002720f, 0.014919f, 0.010149f, 0.008746f, -0.009322f, 0.003849f, -0.015873f, 0.001628f, 0.004537f, 0.003489f, -0.006182f, 0.000077f, -0.016122f, -0.005675f, -0.005675f, -0.001212f, 0.007794f, 0.008316f, -0.000407f, 0.003195f, 0.004527f, -0.002373f, -0.001795f, -0.001554f, 0.001469f, 0.000116f, 0.001088f, 0.000808f, 0.002529f, -0.001435f, -0.000131f, -0.003935f, -0.000523f, -0.000674f, 0.002710f, 0.001503f, -0.001745f, -0.002407f, -0.002303f, -0.002266f, -0.000792f, -0.002767f, 0.000908f, - 0.004880f, -0.003982f, -0.000589f, 0.001636f, 0.002740f, 0.039319f, 0.025151f, -0.013770f, 0.005253f, 0.012530f, -0.005063f, 0.007092f, -0.002287f, 0.011675f, 0.006126f, 0.003610f, 0.010943f, 0.005898f, 0.005505f, -0.003542f, -0.026254f, 0.012470f, -0.004322f, -0.006205f, 0.020862f, 0.012613f, 0.007327f, 0.009350f, 0.007262f, 0.005074f, -0.003867f, 0.002875f, 0.001020f, -0.006957f, 0.005646f, 0.008756f, -0.014733f, 0.002665f, -0.009473f, 0.006943f, 0.008434f, -0.023503f, -0.000206f, -0.027934f, 0.000654f, 0.003274f, 0.002531f, 0.007380f, 0.019102f, -0.002508f, -0.009634f, -0.005002f, -0.005091f, -0.007490f, 0.005623f, 0.005672f, 0.002006f, -0.003275f, -0.003229f, 0.018197f, -0.005929f, -0.003878f, -0.009870f, 0.016140f, -0.002310f, 0.013531f, -0.006292f, 0.014473f, -0.013962f, -0.029918f, -0.008663f, 0.001657f, 0.006185f, 0.009841f, -0.009835f, -0.007660f, 0.004243f, 0.002473f, -0.004469f, -0.007959f, 0.018747f, -0.007481f, 0.017842f, 0.004458f, 0.012656f, 0.004705f, 0.009266f, 0.007456f, -0.003029f, -0.001419f, 0.003742f, -0.000745f, 0.009807f, 0.000028f, -0.003028f, 0.000657f, - -0.010641f, -0.002366f, -0.002337f, 0.000524f, -0.003448f, -0.001613f, -0.001053f, -0.000488f, -0.001083f, -0.005901f, -0.004436f, 0.001143f, 0.000555f, -0.006599f, -0.000220f, 0.000699f, 0.001100f, 0.002355f, 0.001266f, 0.006015f, 0.000441f, -0.002359f, -0.000092f, -0.001099f, -0.002739f, -0.003673f, -0.001192f, 0.018428f, -0.007005f, -0.012347f, -0.000511f, 0.001889f, -0.017507f, -0.013797f, -0.004328f, 0.004708f, -0.002574f, 0.022728f, 0.013724f, 0.000528f, 0.021809f, 0.007774f, 0.006405f, -0.018741f, 0.017538f, -0.003360f, -0.004365f, -0.015826f, -0.007085f, 0.013881f, 0.013819f, -0.004028f, 0.009170f, -0.019023f, -0.002644f, 0.012611f, 0.009586f, -0.007180f, -0.013427f, -0.007656f, -0.008296f, -0.010480f, -0.008622f, 0.001953f, -0.014121f, -0.001484f, 0.019524f, -0.009523f, 0.002255f, -0.000866f, -0.004495f, 0.007481f, -0.003118f, 0.012623f, 0.000010f, 0.017854f, -0.004629f, -0.011479f, 0.006496f, -0.009103f, -0.008891f, -0.009107f, -0.025562f, 0.002814f, 0.010556f, 0.015055f, 0.010943f, 0.019830f, -0.002074f, -0.007850f, 0.011526f, -0.014370f, 0.003274f, 0.002026f, -0.002166f, 0.012779f, - 0.012051f, -0.003289f, -0.015468f, 0.002905f, -0.008010f, -0.014880f, -0.013660f, 0.007320f, 0.013150f, 0.008078f, -0.028589f, 0.006241f, 0.002993f, -0.001618f, 0.013415f, 0.007068f, 0.010966f, 0.003965f, -0.001124f, 0.014251f, 0.001887f, 0.006358f, 0.005194f, 0.000929f, -0.006553f, 0.000841f, -0.003683f, -0.008172f, 0.001448f, 0.002190f, 0.003707f, -0.001181f, 0.000957f, 0.000659f, 0.000630f, 0.002594f, 0.001769f, 0.001712f, -0.000377f, -0.005267f, 0.003474f, -0.002280f, -0.002338f, -0.002144f, -0.003660f, 0.006297f, 0.007326f, 0.006028f, 0.002449f, 0.000425f, 0.000987f, -0.001785f, 0.004795f, -0.022483f, -0.013162f, 0.002375f, -0.012843f, -0.033279f, 0.025222f, -0.000551f, -0.001653f, 0.003197f, 0.001998f, -0.022009f, 0.015401f, -0.022945f, 0.002053f, 0.010504f, -0.003011f, 0.003833f, 0.003712f, -0.024683f, -0.008303f, -0.010990f, -0.002274f, 0.005084f, -0.008102f, -0.005132f, -0.000988f, -0.001431f, 0.002278f, 0.010358f, 0.005550f, 0.022248f, -0.008047f, 0.030530f, -0.002118f, 0.000861f, -0.019926f, -0.002925f, 0.014843f, -0.002907f, -0.030656f, 0.012427f, 0.014281f, -0.009086f, - 0.007565f, -0.011416f, 0.021279f, 0.011809f, -0.000584f, -0.001203f, -0.013623f, -0.008653f, -0.014910f, 0.014037f, 0.013819f, 0.006124f, 0.001594f, 0.006358f, -0.012016f, -0.031595f, -0.011556f, 0.011164f, 0.004884f, -0.023410f, 0.000614f, 0.002852f, 0.003236f, -0.011182f, 0.008099f, 0.016767f, 0.008634f, 0.000439f, 0.006775f, 0.011574f, -0.006460f, 0.017191f, 0.000287f, -0.000344f, -0.016916f, -0.021511f, 0.013911f, -0.006472f, 0.006906f, 0.007152f, -0.001169f, -0.004503f, -0.004733f, -0.003481f, 0.002205f, -0.005180f, 0.007010f, 0.001774f, -0.001955f, 0.001943f, -0.002512f, 0.000445f, -0.008860f, 0.002386f, 0.000663f, -0.001362f, -0.004956f, 0.001838f, -0.004393f, -0.000048f, 0.001362f, -0.000704f, -0.002901f, 0.000152f, -0.002914f, 0.010898f, 0.008070f, 0.003255f, -0.001312f, -0.000689f, -0.003161f, 0.000295f, -0.001297f, 0.007069f, -0.002382f, -0.000667f, 0.006429f, 0.001781f, 0.002628f, 0.005034f, -0.003449f, -0.001541f, 0.004767f, 0.003212f, -0.001484f, -0.000480f, -0.035002f, 0.018790f, -0.004715f, 0.006868f, -0.010312f, -0.005753f, 0.014823f, -0.017151f, 0.016660f, -0.010406f, - -0.019834f, 0.008930f, -0.010657f, 0.042341f, 0.006369f, -0.014924f, -0.020553f, -0.003796f, -0.025505f, -0.011846f, -0.027476f, -0.001721f, 0.018470f, -0.013157f, 0.011416f, 0.018479f, -0.017168f, -0.000049f, -0.020049f, 0.011169f, 0.004023f, -0.000852f, 0.011903f, -0.012654f, -0.017977f, -0.015348f, 0.001096f, 0.003279f, 0.015197f, -0.021934f, 0.015578f, 0.002916f, -0.032164f, -0.017850f, -0.025952f, -0.010807f, 0.009928f, -0.008896f, -0.008630f, -0.049621f, -0.000985f, -0.011002f, -0.004486f, -0.031881f, -0.011007f, -0.004338f, 0.002504f, 0.025745f, 0.023637f, 0.019820f, 0.011531f, 0.024809f, -0.026817f, 0.020791f, 0.002954f, 0.009617f, 0.007083f, -0.019335f, 0.029886f, 0.018353f, 0.011814f, -0.013264f, -0.017571f, -0.012828f, 0.017368f, 0.001844f, 0.000120f, 0.009233f, 0.004573f, 0.009715f, -0.008644f, 0.026070f, 0.013821f, -0.002965f, -0.004235f, 0.005729f, 0.005338f, 0.003046f, -0.001525f, -0.001756f, 0.002482f, -0.000570f, -0.000415f, -0.011024f, 0.000687f, -0.006439f, 0.000440f, 0.003297f, 0.001251f, -0.000820f, 0.000102f, 0.001990f, 0.001943f, -0.010504f, -0.002692f, 0.003495f, - -0.002945f, -0.004208f, -0.000196f, 0.001218f, 0.001757f, 0.001834f, -0.001448f, -0.002317f, 0.001851f, -0.004689f, -0.007611f, -0.002120f, -0.001841f, -0.002689f, 0.001485f, -0.000785f, 0.006916f, 0.003020f, -0.002684f, 0.002823f, -0.001529f, 0.013271f, 0.024630f, 0.026681f, 0.010917f, 0.018665f, 0.015123f, 0.009027f, -0.004886f, 0.001993f, -0.007287f, 0.000615f, -0.002518f, -0.016135f, 0.020532f, 0.032571f, 0.012980f, -0.008924f, 0.014597f, 0.013872f, -0.000578f, 0.008611f, -0.015381f, -0.029638f, -0.019725f, -0.013499f, 0.008558f, -0.003601f, -0.015498f, 0.011558f, -0.005341f, -0.013865f, -0.000195f, 0.023990f, 0.012074f, 0.017770f, 0.006204f, 0.013078f, 0.014516f, -0.003345f, 0.013291f, -0.005196f, -0.015260f, 0.006412f, -0.017669f, 0.006568f, 0.006984f, -0.025953f, -0.016888f, 0.010622f, 0.026840f, -0.013947f, 0.018691f, 0.026127f, -0.021653f, 0.000878f, 0.023795f, 0.002563f, -0.008758f, -0.002023f, -0.012276f, -0.021387f, 0.000208f, -0.006505f, -0.011267f, 0.014665f, 0.000679f, -0.024482f, 0.031285f, -0.012980f, 0.025359f, -0.030108f, -0.020634f, 0.014660f, -0.018567f, 0.010180f, - -0.012513f, -0.009119f, -0.017451f, -0.010689f, -0.014225f, -0.035551f, 0.005766f, 0.021627f, -0.010104f, -0.001682f, 0.014948f, 0.015969f, 0.011295f, -0.002327f, -0.001407f, -0.009296f, -0.002998f, -0.004146f, -0.004935f, 0.003704f, -0.001103f, -0.003497f, 0.005068f, 0.004574f, -0.002367f, -0.000609f, -0.006512f, 0.002634f, -0.005755f, -0.010337f, -0.000885f, 0.009339f, -0.000098f, -0.005494f, -0.001600f, 0.015523f, 0.007665f, 0.000357f, -0.004914f, -0.005885f, -0.004372f, 0.000762f, 0.000866f, -0.004981f, -0.002013f, -0.000022f, 0.001625f, 0.006045f, 0.001263f, 0.009654f, 0.005687f, 0.006848f, 0.002450f, 0.002938f, -0.001716f, 0.000784f, -0.022430f, 0.014484f, -0.009760f, -0.023836f, 0.034453f, 0.018067f, -0.024495f, 0.017570f, 0.015505f, 0.004865f, 0.029021f, -0.059465f, 0.004184f, 0.024912f, 0.008315f, 0.002557f, 0.025960f, 0.001375f, 0.014153f, -0.034230f, -0.004799f, 0.009780f, 0.000305f, -0.016950f, 0.006617f, 0.014285f, 0.006597f, 0.006962f, 0.018299f, 0.015710f, 0.024363f, 0.019630f, -0.007697f, -0.007498f, 0.018820f, -0.011284f, 0.013159f, -0.021091f, -0.011808f, -0.027088f, - -0.012660f, 0.015539f, 0.005148f, -0.005952f, 0.022442f, -0.026408f, -0.036342f, -0.058213f, 0.018044f, 0.020634f, 0.015713f, 0.012784f, -0.013979f, 0.009711f, -0.008180f, 0.022529f, 0.058966f, -0.008818f, -0.012633f, -0.025335f, -0.008332f, 0.022533f, -0.015262f, 0.013080f, 0.021630f, 0.003948f, -0.000662f, -0.016788f, -0.005151f, 0.008532f, -0.041151f, -0.037456f, 0.003617f, 0.005507f, -0.014731f, 0.021158f, 0.015678f, 0.030286f, 0.048214f, 0.019669f, -0.011451f, -0.005514f, 0.010010f, 0.000113f, -0.026920f, 0.013077f, 0.010988f, 0.009920f, 0.002941f, 0.012823f, -0.000741f, 0.007271f, 0.005494f, 0.004224f, -0.006322f, 0.000883f, -0.000883f, -0.000453f, 0.009640f, 0.003323f, -0.000434f, 0.005560f, -0.010896f, 0.003421f, 0.001607f, -0.000950f, 0.010147f, 0.002463f, -0.003369f, -0.001384f, -0.006783f, 0.018942f, 0.000907f, 0.003581f, 0.007452f, -0.002333f, -0.003111f, 0.010845f, -0.011665f, 0.010790f, -0.008631f, 0.009016f, -0.000941f, -0.000322f, -0.002367f, 0.003920f, -0.002106f, 0.009310f, -0.007689f, -0.002589f, 0.002350f, -0.001213f, -0.002898f, -0.005168f, 0.006088f, 0.088737f, - 0.050044f, 0.032037f, -0.008266f, -0.008942f, -0.001185f, -0.007460f, -0.009203f, -0.013658f, -0.016650f, -0.028350f, 0.001179f, -0.001915f, 0.006870f, 0.012500f, 0.023554f, 0.035842f, -0.004854f, -0.046406f, -0.018256f, 0.040012f, -0.006297f, 0.015057f, -0.005243f, -0.000572f, 0.026517f, 0.009308f, 0.020119f, 0.011979f, -0.000906f, -0.001099f, -0.000447f, 0.013527f, 0.017081f, -0.006555f, -0.026267f, 0.034406f, 0.024512f, 0.017568f, 0.006357f, 0.009001f, -0.013998f, -0.025856f, 0.035690f, 0.020060f, 0.009136f, -0.016487f, -0.018527f, -0.025796f, -0.016020f, -0.004499f, -0.016273f, 0.009084f, -0.033205f, 0.004691f, 0.024383f, -0.015799f, 0.008555f, 0.001590f, 0.003513f, -0.037711f, 0.013331f, -0.016130f, 0.027522f, -0.060631f, 0.010351f, -0.015763f, -0.020584f, 0.005141f, -0.012450f, 0.012607f, 0.011771f, -0.039460f, 0.000358f, 0.027780f, 0.004065f, 0.008228f, 0.017330f, 0.007217f, 0.028792f, 0.011890f, 0.006034f, 0.002049f, -0.004258f, 0.018707f, -0.036800f, -0.000584f, -0.002216f, -0.003256f, 0.001375f, -0.000941f, -0.000351f, -0.003081f, -0.005475f, -0.006949f, 0.011358f, 0.009685f, - -0.005095f, -0.000706f, -0.017657f, 0.001841f, -0.001168f, -0.017245f, -0.000150f, -0.025634f, -0.019633f, 0.008790f, 0.003210f, 0.013667f, -0.015367f, 0.006690f, 0.013260f, 0.003055f, -0.000640f, 0.003570f, 0.007079f, 0.000716f, -0.003903f, 0.014227f, 0.000037f, 0.004705f, -0.008350f, -0.006109f, 0.005808f, 0.008574f, 0.001433f, -0.054407f, -0.028051f, 0.004091f, -0.047937f, 0.011043f, 0.034681f, -0.016659f, 0.042172f, 0.049609f, 0.006238f, 0.024816f, 0.030492f, 0.013764f, -0.029387f, 0.019193f, 0.023251f, -0.001088f, 0.005827f, 0.016510f, 0.014480f, 0.035027f, 0.005899f, -0.013422f, 0.022257f, 0.008064f, -0.003542f, 0.000566f, 0.014897f, -0.020383f, -0.009316f, -0.008594f, 0.012416f, 0.006531f, -0.028902f, 0.008569f, 0.024008f, 0.000697f, 0.028950f, -0.027399f, -0.051935f, 0.004198f, 0.023194f, 0.035238f, 0.032560f, 0.016897f, 0.015409f, 0.012459f, -0.035317f, -0.010262f, -0.001555f, 0.026489f, 0.041719f, -0.014397f, 0.008921f, -0.015336f, 0.009804f, 0.006697f, 0.025361f, 0.039455f, -0.015277f, -0.017221f, -0.003519f, 0.021638f, 0.027647f, 0.038885f, 0.000867f, -0.041930f, - -0.039678f, -0.006417f, 0.005034f, 0.000169f, -0.018240f, 0.000454f, -0.047825f, -0.030769f, -0.028300f, -0.032069f, 0.013596f, 0.004968f, 0.038368f, 0.030776f, 0.011497f, -0.018348f, -0.018448f, -0.017055f, -0.015615f, -0.026637f, 0.012490f, 0.008393f, 0.004843f, 0.017975f, 0.019852f, 0.000149f, 0.016923f, 0.003531f, 0.018077f, -0.006288f, 0.014976f, -0.004785f, -0.001463f, 0.004507f, -0.005638f, 0.025245f, 0.011260f, 0.015000f, 0.006670f, 0.017982f, 0.003921f, 0.008637f, 0.025651f, 0.022356f, 0.011859f, -0.001413f, -0.009977f, -0.008443f, -0.018317f, -0.010208f, -0.012060f, -0.007119f, -0.011130f, -0.013351f, -0.007834f, 0.007799f, 0.017061f, 0.004778f, -0.004126f, 0.000641f, -0.002645f, 0.010732f, 0.012576f, 0.010527f, -0.001220f, 0.004736f, 0.023079f, -0.050984f, 0.004642f, -0.010237f, 0.027942f, -0.015013f, -0.002298f, 0.008570f, 0.021168f, -0.028500f, -0.047837f, -0.008386f, -0.018735f, 0.001266f, -0.021581f, 0.012640f, 0.012572f, 0.001173f, -0.025809f, 0.016039f, 0.001623f, 0.043049f, -0.006883f, 0.023533f, -0.019931f, 0.044457f, 0.012849f, 0.027706f, 0.018673f, 0.030233f, - 0.044606f, -0.010978f, 0.017308f, -0.031318f, 0.032907f, 0.031882f, -0.000745f, 0.010283f, 0.032222f, -0.020747f, -0.019935f, -0.003410f, 0.064872f, 0.010425f, -0.018154f, 0.032092f, 0.004204f, 0.024580f, 0.035510f, 0.010226f, -0.002420f, 0.003209f, 0.005524f, 0.023303f, -0.008225f, 0.024997f, -0.017379f, 0.024394f, -0.013611f, 0.055237f, -0.008078f, 0.047475f, -0.043232f, -0.047598f, 0.065982f, -0.055436f, -0.029617f, 0.002058f, -0.017844f, -0.034484f, 0.030119f, -0.004206f, -0.042579f, -0.020316f, -0.021895f, -0.062763f, -0.023257f, 0.007519f, 0.014008f, -0.048479f, -0.012388f, 0.029076f, -0.005910f, 0.016605f, 0.028830f, -0.020867f, -0.004777f, 0.004477f, 0.018795f, 0.013306f, 0.014162f, -0.004926f, -0.002800f, 0.011422f, -0.001091f, -0.008029f, 0.006337f, 0.013195f, 0.002476f, 0.009082f, -0.000359f, -0.008964f, -0.000107f, 0.012124f, 0.004603f, -0.006632f, -0.015708f, -0.009748f, 0.018218f, -0.008731f, -0.024702f, 0.005535f, -0.014219f, -0.027128f, -0.000077f, 0.009753f, 0.000850f, -0.007290f, -0.002084f, 0.007010f, -0.005715f, -0.000005f, 0.009535f, -0.000896f, -0.004586f, -0.006145f, - 0.017266f, 0.032951f, 0.001718f, -0.012134f, -0.009844f, -0.005835f, -0.015839f, -0.003789f, -0.006698f, 0.006555f, -0.042696f, -0.028533f, 0.008368f, -0.055895f, -0.032539f, -0.038833f, -0.039438f, 0.048162f, -0.001107f, 0.001680f, 0.014432f, -0.014008f, -0.061345f, -0.045926f, -0.044912f, -0.091754f, 0.006755f, 0.010487f, 0.039802f, 0.023262f, 0.013889f, 0.019881f, 0.013882f, 0.004389f, -0.028819f, -0.042474f, -0.024355f, 0.033211f, -0.004008f, -0.024779f, -0.009867f, 0.032556f, -0.039004f, -0.025146f, -0.040060f, -0.019857f, -0.003224f, -0.038456f, 0.014598f, -0.031892f, 0.034945f, 0.024541f, -0.005143f, 0.024225f, -0.023362f, -0.048331f, 0.021480f, 0.028554f, -0.024790f, -0.055469f, 0.042262f, -0.003360f, 0.030698f, 0.025809f, -0.079389f, -0.056332f, 0.000849f, -0.012627f, 0.052212f, -0.029449f, -0.034074f, -0.008915f, 0.019481f, 0.003269f, -0.004447f, -0.017720f, 0.069261f, -0.033438f, -0.055743f, -0.075495f, 0.054790f, -0.012603f, -0.062088f, 0.029520f, 0.030035f, 0.018000f, 0.063209f, 0.067629f, 0.069404f, 0.029981f, -0.015231f, -0.005867f, -0.010265f, 0.023395f, -0.043714f, 0.028893f, - 0.005872f, 0.006073f, 0.021993f, 0.021361f, -0.017751f, 0.027221f, -0.020443f, 0.009479f, -0.029221f, -0.016346f, -0.011041f, -0.014795f, -0.005627f, -0.015965f, -0.003608f, 0.012056f, 0.031708f, 0.036940f, 0.002055f, 0.029145f, -0.016474f, 0.004833f, 0.017376f, 0.002989f, -0.031007f, 0.004624f, 0.008319f, -0.007979f, -0.022867f, -0.014226f, -0.013827f, 0.038460f, 0.024062f, 0.013029f, 0.018364f, 0.032632f, -0.004362f, -0.036948f, -0.023120f, -0.020830f, -0.026499f, -0.034206f, 0.006884f, -0.028502f, -0.050907f, -0.011649f, -0.010470f, 0.008442f, -0.051033f, -0.019445f, 0.022836f, 0.038829f, 0.077151f, 0.013373f, 0.040042f, 0.020338f, 0.018988f, -0.017142f, -0.006354f, -0.014529f, -0.043349f, -0.049547f, -0.071080f, -0.025037f, -0.064105f, -0.024347f, -0.033885f, -0.011818f, 0.033399f, 0.008959f, 0.022506f, 0.040661f, -0.000635f, 0.027652f, 0.007184f, 0.001946f, -0.001618f, -0.004733f, -0.054213f, 0.020035f, -0.007385f, -0.059915f, -0.038144f, 0.018206f, -0.039509f, -0.014349f, 0.013414f, 0.044430f, 0.052549f, 0.019062f, -0.011792f, 0.007857f, 0.034936f, 0.019603f, 0.006795f, -0.000539f, - -0.106196f, -0.020762f, 0.022606f, 0.027274f, 0.009951f, -0.003536f, -0.036298f, 0.025157f, -0.032465f, -0.023426f, -0.006986f, 0.006959f, -0.018389f, -0.055856f, 0.029361f, -0.006742f, 0.069327f, 0.027120f, 0.023192f, 0.027391f, 0.050758f, 0.116017f, 0.001002f, 0.002418f, -0.005624f, -0.033976f, 0.019765f, -0.023445f, 0.083256f, -0.007052f, -0.030926f, -0.026700f, 0.034729f, -0.045173f, -0.031573f, -0.005597f, 0.071088f, 0.002803f, 0.033499f, 0.053494f, 0.009924f, 0.043375f, 0.031787f, -0.005567f, 0.029075f, 0.032767f, 0.000264f, -0.021776f, -0.024673f, 0.007031f, 0.007386f, 0.027525f, 0.016631f, -0.000832f, -0.004901f, 0.005156f, 0.010222f, -0.019841f, -0.005053f, -0.004636f, -0.003493f, -0.031321f, 0.019073f, -0.022660f, 0.007176f, -0.004376f, -0.014581f, 0.004092f, 0.037652f, 0.033938f, -0.000794f, -0.002022f, -0.025368f, -0.009783f, -0.025224f, -0.003419f, -0.029217f, -0.040207f, 0.010976f, 0.028187f, 0.001045f, 0.001763f, 0.058622f, -0.007600f, 0.010315f, -0.064199f, -0.022264f, 0.076041f, -0.050831f, -0.013396f, -0.044075f, -0.128629f, -0.018731f, 0.039909f, 0.032242f, 0.006601f, - 0.008974f, -0.006647f, 0.071872f, -0.077572f, -0.000481f, -0.022112f, -0.052487f, -0.043787f, -0.006981f, 0.015097f, 0.012559f, 0.017726f, 0.046243f, 0.030570f, -0.033475f, -0.033331f, 0.092395f, 0.076126f, -0.006535f, 0.009161f, -0.010624f, 0.024999f, -0.000811f, 0.054403f, 0.019259f, 0.029043f, 0.007649f, 0.004457f, -0.096440f, 0.040052f, -0.004590f, -0.055038f, -0.028618f, 0.005732f, -0.015367f, -0.054782f, 0.052513f, -0.009108f, -0.039651f, -0.007957f, 0.005309f, 0.047192f, 0.052117f, 0.040219f, 0.014957f, 0.047057f, 0.049566f, -0.037368f, -0.041560f, -0.026053f, -0.007194f, 0.048738f, 0.064407f, 0.011331f, 0.022911f, 0.062417f, 0.036902f, -0.058130f, 0.042629f, 0.015884f, -0.013324f, 0.002499f, 0.119187f, -0.079044f, 0.060502f, 0.070022f, -0.070783f, -0.003933f, -0.046181f, -0.014567f, -0.101480f, 0.029229f, 0.044165f, -0.060641f, 0.036184f, -0.052455f, -0.038523f, 0.046158f, -0.029174f, -0.004101f, -0.017756f, 0.002368f, -0.025816f, 0.007913f, 0.011116f, -0.019043f, -0.027638f, -0.002016f, -0.029979f, 0.038645f, 0.006357f, -0.036115f, 0.007339f, -0.006008f, -0.020257f, -0.018940f, - 0.011852f, 0.024630f, 0.030236f, 0.012689f, -0.028371f, 0.071027f, -0.013760f, 0.007084f, -0.005240f, -0.037580f, 0.013704f, 0.020483f, -0.019723f, 0.030254f, 0.007059f, 0.022576f, -0.005965f, -0.036420f, 0.011573f, 0.054476f, -0.035106f, -0.051055f, -0.082637f, 0.016319f, -0.015810f, -0.026410f, -0.033413f, 0.018242f, -0.020272f, -0.009650f, 0.054388f, -0.017081f, -0.003033f, -0.042769f, 0.003502f, 0.027092f, -0.059727f, -0.037856f, -0.035725f, -0.017728f, 0.021758f, -0.080719f, -0.044797f, -0.116432f, 0.020256f, -0.001331f, -0.029513f, -0.013118f, -0.017144f, 0.024692f, 0.037368f, -0.041465f, 0.001585f, -0.014583f, -0.013952f, -0.072810f, 0.016013f, 0.055599f, 0.014785f, 0.042020f, 0.052997f, 0.047279f, -0.063658f, -0.019655f, -0.019198f, -0.030004f, 0.053630f, -0.054942f, -0.031535f, 0.001747f, 0.077863f, 0.017407f, -0.027274f, 0.078240f, -0.044043f, -0.041590f, 0.093587f, 0.089404f, 0.008696f, 0.022652f, -0.025403f, -0.085031f, -0.026054f, 0.085340f, -0.041378f, 0.077335f, -0.027882f, -0.122132f, -0.032082f, -0.057190f, 0.065139f, 0.000456f, 0.014676f, 0.058171f, -0.009202f, 0.047945f, - -0.062623f, -0.074064f, 0.057006f, -0.014942f, -0.124468f, 0.076852f, -0.039531f, 0.020899f, 0.025410f, -0.043672f, 0.082828f, -0.056535f, 0.030158f, -0.000947f, 0.022195f, 0.083657f, -0.021078f, -0.026524f, 0.003474f, -0.017497f, -0.022497f, -0.018978f, 0.009796f, 0.018775f, 0.004955f, -0.012058f, 0.010920f, -0.039922f, 0.036302f, 0.025098f, 0.020629f, 0.007955f, 0.000683f, -0.018683f, -0.019821f, -0.019433f, 0.017403f, 0.032680f, -0.031530f, 0.028340f, 0.066612f, 0.022172f, -0.056043f, 0.005465f, 0.021241f, -0.021036f, -0.036796f, 0.035175f, -0.031062f, -0.000725f, -0.002166f, -0.033833f, -0.042935f, -0.000453f, 0.025445f, -0.014456f, 0.057546f, -0.019085f, -0.036912f, 0.026269f, 0.022292f, 0.043050f, 0.003216f, -0.077554f, 0.045750f, 0.052723f, -0.064070f, 0.035023f, -0.000339f, -0.023209f, -0.027400f, -0.092474f, -0.040764f, 0.032454f, 0.005879f, 0.084808f, -0.068095f, -0.038559f, 0.015993f, -0.009402f, 0.054450f, -0.075634f, 0.000150f, 0.007738f, -0.063822f, 0.063880f, 0.035120f, 0.019487f, -0.029873f, 0.043748f, -0.051695f, 0.028623f, 0.022371f, 0.013466f, -0.003564f, -0.028927f, - 0.012131f, 0.058128f, -0.030428f, -0.011114f, 0.011512f, -0.045491f, 0.046576f, 0.001846f, 0.012323f, -0.062327f, 0.033807f, 0.008302f, 0.011603f, -0.146295f, 0.020247f, -0.041535f, 0.068578f, 0.056722f, 0.060301f, 0.030827f, -0.118847f, -0.020787f, 0.025703f, 0.002664f, 0.008099f, 0.083970f, -0.012301f, -0.050329f, -0.060335f, 0.002601f, -0.067125f, -0.058925f, -0.052129f, 0.025382f, -0.098007f, 0.069998f, 0.133773f, -0.034820f, -0.015778f, -0.104034f, -0.022479f, 0.040168f, 0.024913f, -0.034433f, -0.006845f, -0.125876f, -0.044014f, 0.126922f, 0.054241f, -0.039015f, 0.037397f, -0.071243f, -0.052510f, 0.014286f, 0.003196f, 0.008899f, -0.048086f, -0.016472f, -0.009745f, 0.000328f, -0.069858f, 0.015519f, -0.008569f, -0.021633f, 0.009835f, 0.029468f, -0.037894f, -0.018789f, -0.005503f, 0.014297f, -0.028964f, -0.007405f, -0.004528f, -0.027394f, 0.000984f, -0.051130f, 0.068037f, 0.022297f, -0.017072f, -0.006274f, -0.019211f, -0.002227f, 0.043926f, 0.013544f, -0.007331f, 0.023225f, -0.013356f, -0.063651f, 0.003661f, 0.003596f, 0.014293f, 0.029191f, -0.016101f, -0.011401f, 0.028786f, 0.034586f, - 0.015234f, -0.030223f, -0.095496f, 0.025952f, -0.041877f, -0.028499f, 0.029008f, -0.023395f, -0.033585f, 0.026575f, -0.044158f, -0.002721f, -0.050336f, 0.072676f, 0.001275f, -0.053153f, -0.015694f, 0.001200f, -0.005345f, 0.016879f, -0.035499f, -0.024621f, 0.007969f, 0.014606f, 0.008529f, 0.007080f, 0.027586f, -0.032021f, -0.012270f, -0.073585f, 0.027289f, 0.006794f, -0.022453f, 0.053009f, 0.029055f, -0.021895f, 0.081305f, 0.017874f, -0.051084f, 0.038413f, 0.006693f, 0.024922f, 0.053699f, -0.005213f, -0.013121f, 0.008147f, 0.044276f, 0.024729f, 0.001049f, -0.004803f, 0.047371f, -0.004509f, -0.054886f, -0.009836f, 0.010223f, 0.043061f, -0.019159f, 0.074370f, 0.082652f, -0.052801f, 0.043211f, 0.092400f, -0.024939f, 0.140496f, 0.079672f, -0.035714f, -0.031943f, -0.053540f, -0.059939f, -0.034424f, 0.018932f, -0.010982f, -0.010516f, -0.002341f, -0.008986f, -0.098970f, -0.037983f, -0.097728f, 0.022952f, 0.086657f, -0.032435f, -0.005797f, -0.047231f, 0.023094f, 0.006082f, 0.016274f, 0.024515f, 0.072606f, -0.003417f, 0.032696f, 0.034185f, -0.055464f, 0.002543f, -0.000659f, 0.012191f, 0.023492f, - -0.002914f, -0.013545f, 0.023044f, -0.003931f, -0.012439f, 0.002336f, -0.022547f, -0.006030f, 0.016963f, 0.002572f, -0.009559f, -0.053147f, 0.002914f, -0.024813f, -0.001761f, -0.021013f, 0.044175f, -0.015357f, 0.021664f, 0.025837f, -0.020724f, 0.031297f, 0.020702f, -0.000317f, -0.011105f, -0.020739f, 0.005198f, -0.002951f, -0.011252f, -0.002709f, 0.022101f, -0.017569f, 0.009749f, -0.006815f, 0.016008f, 0.124291f, 0.032942f, -0.044625f, 0.005073f, -0.058571f, -0.007563f, 0.020441f, -0.024180f, -0.031154f, -0.034547f, -0.013201f, 0.013452f, -0.007709f, -0.011015f, 0.015753f, 0.009242f, 0.021376f, -0.021979f, -0.013921f, 0.016080f, -0.005766f, 0.002988f, -0.032352f, 0.022076f, -0.037862f, 0.018312f, 0.012479f, -0.008001f, -0.001707f, 0.001546f, -0.021972f, 0.003849f, 0.004475f, -0.017344f, 0.031645f, -0.016852f, 0.007666f, 0.000351f, 0.001111f, 0.016175f, -0.015598f, -0.024088f, -0.007274f, 0.036758f, -0.027112f, 0.018107f, -0.049728f, -0.029397f, 0.009479f, -0.010561f, -0.000751f, -0.003086f, -0.029909f, 0.031982f, 0.025434f, 0.002525f, -0.021875f, -0.000871f, -0.013273f, 0.006759f, -0.016574f, - -0.000305f, -0.015899f, 0.012197f, -0.004327f, 0.003352f, 0.040344f, -0.033817f, -0.002807f, 0.006285f, 0.002571f, -0.007143f, 0.001080f, -0.015907f, 0.001054f, -0.013289f, 0.008425f, 0.016144f, -0.024236f, -0.019989f, 0.011837f, 0.001778f, -0.005612f, -0.019028f, 0.008508f, 0.002850f, -0.000635f, -0.004119f, 0.000371f, -0.004159f, 0.013649f, -0.008675f, -0.002270f, 0.006531f, -0.004284f, -0.000445f, 0.011008f, -0.006925f, -0.004491f, -0.002479f, 0.002551f, 0.011418f, -0.003526f, -0.012227f, 0.001035f, -0.007764f, 0.029264f, -0.011395f, 0.003865f, 0.006934f, -0.007047f, 0.023431f, -0.002994f, -0.019717f, 0.007526f, -0.011116f, 0.014604f, 0.007348f, -0.002812f, -0.000879f, -0.004945f, -0.005110f, 0.014469f, -0.008953f, -0.003847f, -0.001149f, -0.011888f, 0.016209f, -0.059631f, -0.088158f, 0.061438f, 0.282308f, 0.123681f, 0.129386f, -0.000827f, -0.261314f, -0.189126f, -0.098394f, -0.205926f, 0.099976f, 0.122882f, 0.063865f, 0.266350f, 0.119747f, -0.011530f, 0.088310f, -0.172299f, -0.219752f, -0.125384f, -0.153955f, -0.033139f, 0.118999f, 0.121939f, 0.051030f, 0.204822f, 0.101609f, -0.014175f, - 0.098469f, -0.090566f, -0.155556f, -0.089109f, -0.117035f, -0.183536f, 0.067588f, -0.001478f, -0.065968f, 0.197880f, 0.119029f, 0.067167f, 0.202390f, 0.049117f, -0.102881f, 0.099894f, -0.146667f, -0.166945f, -0.034286f, -0.175592f, -0.178460f, 0.070784f, -0.029596f, 0.043390f, 0.224819f, 0.154344f, 0.160272f, 0.151591f, 0.018264f, -0.084505f, -0.098123f, -0.163779f, -0.215416f, -0.112597f, -0.061465f, -0.044213f, 0.082113f, 0.128563f, 0.120292f, 0.170860f, 0.153882f, -0.023378f, -0.027341f, -0.027297f, -0.158250f, -0.047018f, -0.078008f, -0.117087f, 0.026146f, 0.048617f, 0.007660f, 0.109956f, 0.048728f, 0.001457f, 0.068438f, -0.052304f, -0.058270f, 0.002088f, -0.037924f, -0.011401f, 0.028484f, -0.005394f, 0.031641f, 0.042990f, -0.023524f, 0.033944f, 0.013470f, -0.050773f, 0.004743f, -0.023911f, -0.097587f, -0.000799f, -0.024886f, -0.040981f, 0.093976f, 0.028814f, 0.035240f, 0.124195f, 0.048904f, 0.036926f, 0.027121f, -0.060584f, -0.089693f, -0.082353f, -0.139566f, -0.113334f, -0.050853f, 0.005559f, 0.062712f, 0.144287f, 0.151925f, 0.140365f, 0.123621f, 0.077223f, -0.030424f, -0.086635f, - -0.174556f, -0.220259f, -0.170706f, -0.101514f, -0.036057f, 0.094137f, 0.172532f, 0.199253f, 0.203308f, 0.099085f, -0.024019f, -0.065708f, -0.081959f, -0.104886f, -0.076246f, -0.077385f, -0.063134f, -0.007723f, 0.020122f, 0.033231f, 0.054904f, 0.059901f, 0.054342f, 0.050691f, 0.028112f, 0.009877f, -0.005506f, -0.023450f, -0.037672f, -0.032073f, -0.020393f, -0.006436f, -0.001998f, 0.001574f, -0.001046f} - }, - { - {0.008957f, 0.005154f, -0.008124f, -0.001854f, -0.003005f, -0.000260f, 0.012161f, 0.000699f, -0.005208f, 0.006412f, 0.001303f, 0.000656f, 0.002136f, 0.001348f, 0.000104f, 0.009152f, 0.005154f, -0.006192f, -0.002392f, -0.000710f, -0.002181f, 0.002568f, 0.003901f, 0.002625f, -0.002658f, -0.003955f, 0.001516f, -0.007968f, -0.003630f, 0.005986f, 0.000520f, 0.004820f, 0.002460f, -0.003887f, 0.002939f, 0.000053f, -0.003439f, 0.008405f, -0.005630f, -0.002643f, 0.001066f, 0.002892f, -0.003852f, -0.001010f, -0.005529f, -0.010929f, 0.010217f, -0.002050f, -0.005708f, 0.000603f, 0.009392f, 0.000010f, 0.003629f, -0.004672f, -0.002741f, -0.001927f, 0.002880f, -0.003695f, 0.007509f, 0.001188f, 0.006774f, -0.009847f, 0.004157f, -0.002559f, 0.001637f, 0.004183f, -0.001708f, -0.001097f, -0.007286f, 0.000051f, 0.003924f, 0.000893f, -0.002038f, -0.000343f, 0.003491f, -0.001853f, -0.001950f, 0.005519f, -0.002529f, 0.001752f, -0.001061f, -0.000331f, -0.006804f, -0.002791f, -0.001865f, 0.002479f, -0.000522f, -0.003028f, -0.000536f, -0.000617f, -0.001924f, 0.001807f, -0.002300f, 0.000150f, 0.000496f, 0.001162f, - 0.001826f, -0.000807f, -0.001663f, 0.001729f, 0.000330f, -0.001246f, 0.000207f, 0.002946f, -0.000417f, -0.000285f, 0.001158f, 0.000102f, 0.000372f, 0.000478f, -0.000925f, -0.001596f, -0.000939f, 0.001261f, -0.000325f, 0.000142f, 0.000592f, -0.000855f, 0.000792f, 0.000020f, -0.000550f, 0.025675f, 0.008802f, -0.002032f, 0.006952f, 0.000355f, 0.012668f, 0.007960f, -0.001777f, 0.006513f, 0.011375f, 0.014878f, -0.008782f, -0.008595f, 0.003656f, -0.003468f, -0.002874f, 0.010639f, 0.008599f, 0.008190f, 0.005847f, 0.001101f, -0.000335f, -0.003715f, 0.004060f, 0.002835f, 0.013554f, 0.001371f, -0.000293f, -0.005995f, 0.002822f, 0.003969f, -0.000772f, -0.001848f, -0.002120f, 0.003675f, -0.000537f, -0.002186f, -0.004963f, 0.005263f, -0.001766f, -0.001782f, 0.007485f, 0.010618f, -0.002738f, -0.001303f, 0.006141f, 0.005494f, 0.009729f, 0.006026f, 0.002674f, 0.001000f, 0.008284f, 0.004686f, -0.011420f, 0.000010f, 0.003506f, -0.006582f, 0.000172f, 0.001074f, -0.008147f, 0.004147f, -0.003956f, 0.006107f, -0.001317f, -0.001057f, 0.003287f, 0.001055f, -0.005620f, -0.000504f, 0.003121f, -0.001107f, - -0.001391f, -0.001634f, 0.000606f, 0.006498f, 0.001147f, -0.006549f, -0.001557f, 0.001536f, -0.001953f, -0.000836f, 0.009617f, -0.001952f, 0.001169f, -0.001131f, -0.002461f, 0.002171f, 0.003577f, -0.000931f, 0.001625f, 0.001748f, -0.001783f, 0.000846f, 0.001600f, 0.000370f, -0.001187f, -0.003382f, -0.001051f, -0.002037f, -0.000947f, -0.000250f, 0.001071f, -0.000632f, 0.001289f, 0.000703f, -0.000295f, 0.008883f, -0.000692f, -0.016768f, -0.007806f, -0.003253f, -0.003629f, -0.009127f, -0.008384f, -0.005264f, 0.009088f, -0.009985f, -0.004663f, -0.004741f, 0.001828f, 0.015162f, -0.002276f, -0.001202f, 0.003708f, 0.008679f, -0.013268f, -0.002162f, 0.002708f, -0.005855f, 0.004685f, 0.007421f, -0.008181f, -0.000502f, 0.001055f, -0.004754f, -0.012042f, 0.002099f, -0.005070f, 0.001637f, -0.004668f, 0.006897f, -0.008314f, -0.007757f, -0.019112f, -0.005147f, 0.006573f, -0.001061f, -0.007333f, -0.003608f, -0.000922f, -0.007681f, 0.000388f, -0.001289f, 0.005282f, 0.004184f, -0.001979f, 0.000247f, -0.001955f, -0.008108f, 0.009911f, 0.001735f, 0.006699f, -0.002451f, 0.000025f, 0.001752f, 0.002899f, 0.007686f, - -0.002459f, -0.001845f, 0.002271f, -0.000207f, 0.008381f, 0.004489f, -0.007245f, -0.002865f, -0.001807f, -0.011461f, -0.001289f, -0.001073f, 0.006825f, -0.004385f, 0.006220f, 0.001081f, -0.000217f, -0.000626f, -0.001095f, -0.001226f, 0.001327f, -0.004616f, 0.002151f, -0.002656f, 0.002338f, 0.002008f, 0.000900f, 0.000587f, 0.006681f, 0.004917f, -0.001227f, 0.006097f, -0.000826f, -0.002033f, -0.001932f, 0.001206f, -0.000435f, 0.004179f, -0.001077f, 0.002616f, 0.002111f, -0.000353f, 0.001770f, 0.000016f, 0.001854f, 0.001851f, 0.000537f, 0.000648f, 0.002007f, 0.001357f, -0.002745f, -0.001492f, -0.000289f, 0.003400f, 0.003765f, 0.000031f, -0.000400f, 0.002065f, -0.036890f, -0.011556f, -0.003257f, -0.002985f, -0.003080f, 0.014236f, -0.013135f, 0.006318f, -0.003060f, 0.002886f, -0.003747f, -0.003060f, -0.010572f, 0.001725f, -0.003848f, 0.000788f, -0.015349f, 0.000295f, -0.001558f, -0.002766f, -0.000234f, 0.002871f, 0.002345f, -0.001472f, -0.001033f, -0.006177f, 0.001921f, -0.004963f, 0.003275f, -0.000025f, 0.002801f, 0.009574f, -0.002487f, -0.011013f, -0.004676f, -0.012893f, 0.001809f, 0.002299f, - -0.001138f, 0.002207f, -0.004466f, 0.004290f, 0.002249f, -0.005724f, 0.000526f, -0.015496f, -0.003264f, -0.010372f, 0.005700f, 0.010210f, -0.008977f, -0.000730f, 0.002975f, 0.001547f, -0.014720f, 0.002440f, 0.007632f, -0.007111f, -0.003329f, -0.016868f, 0.005764f, -0.002460f, 0.007012f, 0.012455f, 0.007165f, -0.010054f, 0.002179f, 0.002348f, 0.000607f, -0.011176f, 0.002939f, -0.004778f, 0.007486f, -0.003025f, -0.000296f, 0.003462f, 0.003094f, 0.008754f, 0.010053f, 0.006807f, -0.000435f, 0.002504f, 0.006022f, 0.002987f, -0.005806f, -0.001233f, -0.003845f, -0.003964f, 0.001880f, -0.000189f, 0.001048f, 0.000079f, -0.001080f, -0.000348f, 0.003688f, -0.001199f, -0.001084f, 0.000088f, -0.000920f, -0.002658f, 0.003362f, 0.000112f, 0.001650f, 0.003939f, -0.000382f, 0.000428f, -0.002996f, 0.001994f, 0.001496f, 0.000309f, -0.003007f, 0.001024f, 0.000167f, -0.022757f, 0.002443f, 0.004162f, -0.008254f, -0.000936f, 0.022255f, 0.017419f, 0.009344f, -0.002417f, -0.004119f, 0.011186f, 0.006901f, 0.003636f, 0.004143f, -0.008881f, 0.003002f, 0.000945f, 0.010435f, -0.009942f, -0.004643f, -0.001835f, - 0.001260f, -0.001973f, -0.011623f, -0.007762f, -0.008197f, -0.009539f, 0.005266f, 0.006526f, 0.004088f, 0.002937f, 0.000152f, 0.002872f, -0.001510f, -0.001172f, 0.000678f, -0.003422f, -0.001055f, 0.005141f, 0.003898f, -0.007784f, -0.008818f, -0.000744f, -0.008844f, 0.005337f, -0.002719f, -0.014795f, 0.001748f, 0.007631f, 0.010665f, 0.007482f, 0.000371f, 0.007073f, -0.010652f, -0.003340f, -0.004781f, -0.000676f, 0.000706f, 0.004824f, -0.003695f, -0.009651f, 0.011793f, -0.010674f, -0.005182f, 0.007380f, 0.017070f, 0.004105f, 0.003348f, -0.016643f, 0.018034f, 0.002219f, 0.012560f, 0.019451f, -0.004313f, 0.002125f, 0.002229f, -0.007885f, 0.016034f, 0.003814f, -0.005297f, 0.004485f, -0.002277f, 0.007979f, -0.013242f, -0.006993f, -0.013531f, -0.002573f, -0.006017f, 0.005462f, -0.003453f, 0.002351f, -0.006358f, -0.001575f, -0.001265f, -0.004018f, -0.000303f, -0.001483f, 0.001631f, -0.000251f, -0.001797f, -0.000894f, -0.000828f, 0.003237f, 0.000833f, -0.002392f, -0.005526f, 0.003115f, 0.003021f, 0.000600f, -0.000034f, -0.000052f, -0.002311f, 0.001010f, -0.001556f, 0.003372f, 0.000593f, 0.001914f, - -0.001944f, -0.002176f, -0.004395f, 0.034528f, 0.024324f, -0.008672f, -0.012673f, 0.019174f, 0.012502f, 0.020181f, 0.029639f, -0.014932f, 0.010285f, 0.004971f, 0.008621f, 0.003893f, 0.005189f, 0.012289f, 0.003072f, 0.012549f, 0.000436f, -0.007962f, 0.003385f, -0.002544f, 0.004244f, -0.001451f, 0.023016f, 0.003921f, 0.005089f, 0.003154f, 0.000930f, 0.008084f, 0.003439f, 0.000508f, -0.001461f, 0.005796f, -0.004430f, 0.011038f, -0.008563f, 0.013282f, -0.006245f, 0.008047f, 0.004205f, 0.004932f, 0.003898f, 0.019482f, 0.014876f, 0.000968f, -0.004178f, -0.010509f, 0.011531f, -0.012818f, 0.003234f, -0.005588f, 0.005676f, 0.012207f, 0.001471f, -0.020347f, -0.016535f, 0.001740f, -0.010287f, -0.011129f, -0.006435f, -0.012838f, 0.004592f, 0.022333f, 0.011193f, -0.008188f, 0.000516f, 0.002599f, -0.005847f, -0.006552f, -0.001090f, 0.010976f, 0.012178f, -0.012905f, 0.006120f, 0.014317f, 0.002841f, 0.004721f, 0.006895f, 0.011157f, -0.001929f, -0.007596f, 0.002953f, -0.003265f, -0.000662f, -0.007290f, 0.006735f, 0.010543f, 0.001598f, 0.001893f, 0.001442f, -0.007383f, -0.001088f, -0.000122f, - -0.000842f, 0.000749f, -0.001184f, 0.001216f, 0.000883f, 0.003610f, 0.000355f, -0.000067f, 0.000308f, 0.002317f, 0.003956f, 0.002073f, 0.004189f, 0.002300f, 0.000742f, 0.001234f, -0.000934f, -0.006888f, -0.007172f, 0.001441f, 0.005211f, 0.001336f, -0.001609f, 0.001270f, -0.000966f, 0.003305f, -0.002695f, -0.002452f, -0.004518f, 0.001936f, 0.015120f, 0.002982f, 0.021928f, -0.001853f, -0.000346f, -0.007221f, -0.005981f, 0.007473f, 0.016576f, -0.004770f, 0.004336f, 0.001286f, 0.017968f, 0.007563f, -0.008481f, -0.007661f, 0.001106f, 0.003887f, 0.016324f, 0.016184f, 0.024406f, 0.004558f, 0.006741f, -0.004184f, 0.009911f, 0.011462f, -0.004473f, -0.005500f, 0.008730f, -0.006628f, -0.009441f, 0.008936f, 0.002595f, -0.010728f, -0.013377f, 0.020381f, 0.010093f, -0.000542f, 0.012858f, 0.002668f, -0.009125f, 0.019372f, -0.004560f, 0.000741f, -0.000521f, 0.005148f, -0.007054f, 0.005151f, -0.007063f, 0.005021f, -0.006563f, 0.006056f, -0.005374f, 0.008184f, -0.006763f, -0.006649f, 0.017862f, -0.022241f, 0.001221f, 0.002845f, -0.007740f, 0.001688f, -0.025231f, -0.012192f, 0.012009f, -0.009852f, - 0.007368f, -0.002482f, 0.004963f, 0.002393f, 0.004254f, 0.002859f, -0.011449f, 0.006355f, -0.006663f, -0.000550f, -0.014533f, -0.007649f, -0.003651f, -0.003250f, 0.004121f, 0.013903f, 0.007907f, -0.010794f, 0.004245f, 0.002386f, 0.000090f, -0.005062f, 0.000748f, -0.000764f, 0.002684f, 0.001521f, -0.002799f, -0.003482f, -0.001460f, -0.000776f, -0.002120f, 0.008180f, 0.001476f, -0.002756f, -0.001692f, 0.002174f, -0.003234f, 0.000628f, 0.001608f, 0.000399f, 0.000455f, -0.008057f, -0.003360f, -0.001777f, 0.001292f, -0.002012f, -0.000303f, 0.005610f, -0.017828f, -0.015457f, -0.000002f, 0.006635f, 0.012593f, -0.014639f, 0.004264f, -0.013158f, 0.010899f, 0.008258f, -0.017958f, -0.003777f, 0.002007f, -0.021177f, -0.011952f, 0.012832f, -0.001593f, -0.000952f, 0.003122f, -0.001367f, -0.022055f, 0.020204f, 0.001383f, -0.014368f, -0.006896f, 0.002660f, -0.001773f, -0.013809f, -0.004044f, -0.007948f, 0.002377f, -0.000719f, -0.004302f, 0.004391f, -0.019098f, -0.008555f, 0.005053f, 0.025068f, -0.004101f, -0.014770f, -0.010332f, -0.008235f, 0.017181f, -0.018218f, -0.003538f, -0.001284f, -0.019343f, -0.024251f, - 0.006067f, -0.016814f, -0.002564f, 0.002494f, 0.012885f, 0.007132f, 0.001158f, 0.002758f, 0.015367f, -0.006597f, -0.004649f, 0.022609f, -0.014990f, 0.011776f, -0.005066f, -0.005654f, -0.002182f, -0.002730f, 0.024258f, 0.000565f, 0.009509f, -0.024837f, -0.017899f, 0.000611f, -0.003474f, 0.027769f, 0.001028f, 0.018940f, 0.008104f, 0.023685f, 0.014494f, -0.003571f, -0.016341f, -0.006175f, 0.011212f, 0.004849f, 0.007617f, -0.009122f, -0.010170f, -0.002830f, -0.003332f, 0.004929f, -0.002406f, -0.006635f, -0.001068f, -0.001594f, 0.000074f, -0.000792f, 0.001034f, -0.002690f, -0.003545f, 0.004550f, -0.000192f, 0.000319f, -0.001129f, -0.001971f, -0.001434f, 0.001265f, 0.003984f, -0.004005f, 0.001045f, -0.002441f, -0.003541f, 0.002645f, -0.000962f, -0.003380f, -0.003873f, -0.000733f, 0.003891f, 0.000440f, 0.000611f, 0.001473f, 0.006919f, -0.005691f, -0.004653f, -0.002868f, 0.000674f, 0.002803f, -0.029704f, 0.002813f, -0.002911f, 0.020287f, 0.002367f, -0.021609f, 0.025735f, 0.008231f, -0.015097f, -0.033171f, -0.013791f, 0.032667f, 0.001633f, -0.004209f, -0.005470f, 0.003316f, 0.001087f, 0.010038f, - 0.005353f, 0.010759f, -0.002340f, 0.019258f, -0.009963f, -0.022813f, 0.000972f, 0.001005f, -0.005412f, -0.000876f, 0.008538f, -0.005892f, -0.003473f, -0.002029f, 0.018209f, 0.014087f, 0.007324f, -0.001384f, -0.024776f, -0.000516f, -0.001284f, -0.001069f, -0.004109f, -0.000434f, -0.010835f, -0.020246f, -0.003156f, 0.013876f, 0.013540f, -0.005117f, 0.014547f, -0.004715f, 0.006293f, 0.015952f, 0.015297f, -0.033762f, 0.011590f, 0.012154f, 0.005068f, -0.008244f, -0.029569f, 0.017934f, 0.010619f, 0.005723f, -0.010532f, -0.005914f, -0.011928f, 0.006621f, -0.013234f, -0.002471f, 0.000266f, 0.012070f, -0.007462f, 0.006144f, 0.003376f, -0.021641f, -0.002945f, -0.014465f, 0.023749f, 0.010999f, -0.027819f, -0.005907f, 0.022122f, 0.011006f, -0.011428f, -0.005725f, -0.012626f, -0.004275f, 0.006650f, -0.003863f, -0.001470f, -0.004830f, -0.006026f, -0.010584f, 0.002120f, 0.000847f, -0.003333f, -0.001066f, 0.005505f, 0.003676f, -0.006613f, -0.002355f, 0.004997f, -0.001284f, 0.003844f, -0.004391f, -0.002977f, -0.000840f, 0.001083f, 0.005706f, -0.005943f, -0.004263f, 0.003142f, -0.006824f, -0.000439f, -0.004803f, - 0.003035f, -0.003805f, 0.006681f, -0.002287f, -0.001068f, -0.003346f, 0.004303f, 0.002868f, 0.007604f, 0.002368f, 0.018340f, 0.022855f, 0.023005f, 0.017972f, 0.022551f, -0.028424f, -0.018939f, -0.009679f, -0.009511f, -0.013511f, -0.010729f, -0.022779f, -0.008019f, 0.001739f, 0.013467f, 0.000174f, -0.013382f, -0.000431f, 0.013452f, 0.000851f, -0.011586f, -0.005145f, 0.030895f, 0.003200f, 0.011461f, 0.003765f, 0.012621f, 0.002793f, 0.003926f, -0.018986f, 0.010430f, 0.000880f, 0.004166f, -0.019915f, 0.006683f, -0.030675f, -0.000282f, -0.009601f, 0.007370f, -0.002676f, -0.022802f, -0.000403f, -0.022700f, 0.004247f, -0.018914f, 0.017144f, -0.009942f, 0.026871f, 0.000542f, -0.000366f, 0.013179f, 0.003020f, -0.004537f, -0.003814f, 0.005151f, -0.009023f, 0.006009f, 0.016614f, 0.008132f, -0.012166f, -0.006737f, 0.035470f, 0.002396f, 0.028311f, -0.026464f, -0.005399f, -0.003088f, 0.020617f, -0.023137f, 0.003317f, 0.010611f, -0.022607f, 0.015531f, -0.014170f, 0.003827f, 0.022145f, 0.002057f, 0.012507f, 0.005553f, 0.028904f, 0.012150f, -0.011893f, -0.009754f, -0.011460f, 0.001404f, 0.001158f, - 0.011783f, -0.007160f, -0.001719f, 0.007961f, 0.000208f, 0.006146f, 0.007952f, 0.001190f, -0.007042f, 0.008014f, 0.005759f, -0.000753f, 0.002115f, 0.002699f, -0.003318f, -0.002382f, -0.009844f, 0.006331f, -0.004917f, -0.004248f, -0.002246f, -0.004931f, 0.004243f, -0.003369f, -0.001539f, -0.005296f, -0.001704f, -0.001222f, 0.006252f, 0.004718f, -0.000643f, -0.001121f, -0.000827f, 0.003725f, 0.004132f, 0.003948f, 0.008117f, -0.001060f, -0.008717f, -0.028542f, 0.004255f, 0.027941f, 0.020798f, 0.022844f, -0.007634f, -0.005793f, 0.005641f, -0.003891f, 0.028138f, 0.009504f, 0.013371f, 0.023828f, -0.001786f, 0.008962f, -0.016207f, 0.023732f, 0.011759f, -0.005890f, -0.014586f, -0.013433f, 0.015807f, -0.027399f, 0.010650f, 0.015879f, -0.011560f, -0.015269f, -0.008846f, 0.014813f, 0.005422f, -0.005504f, -0.010165f, 0.000263f, -0.017040f, -0.025389f, 0.004516f, -0.024368f, -0.036539f, -0.004517f, 0.001274f, 0.036957f, -0.016059f, -0.012520f, 0.016280f, 0.027241f, 0.027053f, 0.014549f, -0.001822f, 0.006365f, -0.011908f, 0.002153f, -0.012480f, 0.030441f, 0.026622f, 0.017432f, -0.001436f, -0.031028f, - -0.000402f, -0.026496f, 0.029062f, 0.022790f, 0.013905f, -0.021993f, 0.017939f, 0.010387f, 0.012336f, -0.004086f, -0.018937f, -0.013547f, -0.015211f, 0.005103f, -0.021280f, -0.038424f, 0.007249f, 0.026099f, 0.013478f, 0.025622f, -0.008132f, -0.007034f, 0.025521f, 0.008632f, 0.003137f, 0.017203f, 0.005321f, 0.000506f, 0.014433f, 0.009322f, -0.001764f, 0.006765f, 0.006027f, 0.003889f, -0.005313f, -0.008498f, -0.011641f, 0.002994f, 0.006807f, 0.004189f, 0.014504f, 0.000367f, 0.010201f, -0.003384f, 0.003909f, 0.008408f, 0.000692f, -0.003898f, -0.002785f, -0.012440f, -0.011136f, 0.003704f, 0.002202f, 0.004903f, 0.012467f, 0.001873f, 0.009346f, -0.003780f, -0.002690f, 0.001651f, -0.010047f, -0.007544f, -0.003308f, -0.008095f, 0.003254f, -0.002730f, 0.002520f, 0.007167f, 0.009591f, 0.014255f, 0.023592f, 0.049709f, 0.022567f, 0.017120f, 0.016607f, -0.031347f, -0.004550f, -0.011696f, 0.039915f, -0.040603f, -0.037853f, 0.010570f, 0.026157f, -0.001100f, 0.031919f, 0.028301f, -0.001071f, 0.010656f, -0.018672f, -0.014071f, 0.030351f, -0.012241f, 0.020944f, 0.006917f, -0.013084f, -0.007381f, - -0.005642f, -0.007024f, -0.013668f, 0.011274f, 0.012750f, 0.010022f, 0.001252f, -0.016016f, -0.019795f, 0.025572f, -0.025284f, 0.019708f, 0.002124f, -0.031910f, 0.016140f, 0.029612f, -0.000348f, -0.008568f, -0.003551f, 0.002024f, 0.001984f, 0.020068f, -0.000825f, -0.015816f, -0.006174f, 0.017011f, -0.031515f, 0.007247f, -0.005082f, 0.025403f, 0.027486f, 0.017766f, 0.021564f, 0.027652f, 0.020413f, 0.006911f, -0.018020f, -0.021002f, 0.010172f, 0.013268f, -0.000762f, 0.011434f, 0.016406f, 0.042360f, -0.023931f, 0.026644f, -0.015836f, -0.010694f, 0.029656f, 0.004051f, -0.017372f, -0.015763f, -0.016014f, -0.026838f, -0.008809f, -0.013345f, 0.021334f, 0.000079f, -0.016688f, 0.008814f, 0.006069f, -0.004045f, 0.010115f, -0.020575f, 0.013350f, 0.000419f, -0.001689f, -0.002606f, 0.011369f, 0.001489f, 0.003134f, 0.011220f, -0.004664f, 0.001461f, 0.008707f, -0.013338f, 0.009273f, 0.000076f, 0.003566f, -0.006213f, 0.007424f, -0.003026f, 0.001024f, 0.009499f, 0.000205f, -0.002855f, 0.002704f, 0.006256f, 0.008626f, 0.013674f, 0.011673f, 0.003741f, -0.006393f, -0.005906f, -0.019953f, 0.003976f, - -0.016599f, -0.005426f, -0.007155f, -0.007366f, 0.008061f, -0.033324f, -0.005943f, 0.019385f, -0.023919f, 0.000756f, -0.015046f, -0.026325f, 0.038291f, 0.032725f, 0.027371f, 0.012968f, 0.007140f, 0.010766f, 0.028114f, 0.015523f, 0.028823f, -0.010674f, 0.024143f, -0.018187f, 0.029238f, 0.039257f, 0.024626f, 0.019622f, 0.010002f, 0.020268f, 0.020430f, -0.006071f, 0.040645f, 0.009755f, -0.024501f, 0.011625f, -0.024806f, -0.017068f, -0.005078f, -0.038595f, 0.000670f, -0.008230f, -0.010458f, -0.018764f, -0.009751f, -0.005391f, -0.001198f, -0.003808f, 0.001682f, 0.001613f, -0.022145f, -0.014631f, 0.004597f, -0.011699f, 0.009207f, 0.038009f, -0.019157f, -0.001547f, -0.003606f, 0.001405f, -0.018163f, 0.009792f, -0.008722f, 0.029423f, 0.006268f, 0.017575f, 0.027521f, 0.004699f, -0.001821f, -0.018146f, -0.040395f, 0.005336f, 0.030080f, 0.021832f, -0.005685f, -0.026923f, 0.022692f, 0.002393f, 0.013672f, -0.034468f, -0.024743f, -0.022696f, -0.034180f, -0.021161f, -0.025006f, 0.011654f, 0.003703f, 0.008756f, 0.011414f, 0.015787f, -0.007715f, 0.016070f, 0.018270f, 0.000583f, 0.009823f, -0.005856f, - -0.012128f, -0.012478f, -0.013131f, -0.005247f, -0.009575f, -0.000574f, 0.002885f, -0.001254f, 0.000863f, 0.002448f, -0.011115f, -0.010260f, -0.017598f, -0.006013f, -0.004089f, -0.009770f, 0.003857f, 0.001477f, -0.005210f, -0.015894f, -0.007336f, -0.005853f, -0.004124f, 0.013296f, 0.004037f, -0.005776f, -0.007363f, -0.002653f, -0.019123f, 0.005235f, -0.003920f, 0.009892f, 0.001095f, -0.005988f, -0.011297f, 0.011774f, 0.016734f, -0.057130f, -0.036651f, -0.017358f, 0.040815f, 0.029814f, -0.022179f, 0.025561f, 0.022980f, 0.019694f, 0.019190f, -0.019111f, 0.001929f, 0.011160f, -0.019099f, -0.057538f, -0.010539f, -0.015908f, -0.035340f, 0.003277f, -0.012065f, -0.008953f, 0.010792f, 0.006516f, -0.007866f, 0.001791f, 0.027001f, 0.028980f, -0.053109f, 0.012730f, 0.002709f, 0.024676f, 0.008372f, 0.001449f, -0.033065f, 0.010209f, -0.008468f, -0.009073f, -0.022730f, -0.016801f, 0.042573f, -0.019199f, -0.000742f, 0.005192f, -0.011222f, 0.047188f, 0.022379f, -0.020829f, -0.012640f, -0.036702f, -0.005275f, 0.035332f, 0.010377f, 0.010783f, -0.011511f, 0.021642f, -0.005014f, -0.009140f, 0.019858f, -0.011582f, - 0.032892f, -0.007565f, 0.024525f, -0.049698f, -0.016812f, 0.028722f, 0.007100f, -0.004423f, 0.008118f, -0.054988f, -0.025994f, 0.008556f, -0.021915f, 0.008605f, 0.002342f, 0.006308f, 0.033939f, -0.012475f, 0.013766f, -0.002488f, -0.027372f, -0.004582f, 0.020944f, 0.030337f, -0.000834f, -0.012430f, -0.023169f, 0.000848f, -0.032397f, -0.010380f, 0.002967f, 0.038500f, 0.034318f, 0.004885f, 0.014514f, 0.004525f, -0.005557f, 0.019206f, 0.014501f, -0.007284f, 0.015905f, 0.012134f, 0.006483f, -0.012925f, -0.000738f, -0.006568f, 0.011668f, 0.008300f, 0.010405f, -0.000563f, -0.015409f, 0.014996f, 0.000869f, -0.006958f, -0.014991f, -0.000410f, -0.001022f, -0.014012f, 0.010270f, -0.010083f, -0.016361f, 0.019079f, -0.007268f, -0.005961f, -0.008154f, 0.004568f, 0.002897f, 0.015415f, 0.003536f, -0.002129f, 0.006460f, 0.009737f, -0.016551f, 0.005101f, 0.011153f, -0.025692f, -0.070820f, -0.006860f, -0.007878f, -0.008552f, 0.011711f, -0.029370f, 0.056846f, -0.011056f, 0.003209f, 0.061073f, -0.072144f, -0.008405f, -0.013564f, -0.007780f, -0.082751f, 0.003813f, -0.012252f, -0.016979f, 0.028942f, -0.029503f, - 0.005031f, 0.004607f, 0.014116f, -0.003494f, -0.029791f, 0.019926f, -0.019366f, 0.042476f, -0.006873f, -0.050047f, -0.003044f, -0.002554f, -0.024239f, -0.050431f, 0.022803f, 0.024307f, -0.040920f, 0.032946f, -0.036963f, -0.030093f, -0.017418f, 0.002340f, 0.003533f, 0.004647f, 0.024456f, -0.005490f, -0.022337f, -0.054957f, 0.011500f, -0.073966f, -0.038325f, -0.026069f, -0.058047f, -0.035628f, -0.016415f, -0.004575f, -0.027025f, 0.040832f, 0.043458f, 0.008565f, -0.012544f, 0.046507f, 0.021840f, -0.006433f, -0.010311f, 0.033191f, 0.025624f, -0.012696f, 0.045629f, -0.039008f, -0.019090f, 0.048434f, 0.023644f, 0.068347f, -0.037527f, -0.043698f, 0.011406f, -0.033490f, 0.035296f, 0.002695f, 0.012517f, 0.064886f, -0.036000f, -0.040040f, -0.013992f, 0.012626f, 0.015407f, 0.015525f, 0.017240f, 0.018013f, -0.019940f, 0.006935f, 0.003471f, -0.002553f, -0.001986f, -0.014723f, -0.010484f, 0.018113f, -0.020462f, -0.002187f, 0.004574f, -0.011218f, 0.002958f, -0.011489f, -0.000391f, -0.002293f, 0.004678f, -0.017867f, 0.008857f, 0.019613f, 0.006502f, 0.003793f, 0.023335f, 0.015668f, -0.001285f, -0.023448f, - 0.020658f, 0.003881f, -0.007375f, -0.017846f, 0.021416f, 0.001829f, 0.000954f, 0.011500f, 0.016650f, -0.022449f, 0.011216f, 0.005446f, -0.014827f, -0.007695f, -0.023897f, 0.015405f, -0.003234f, -0.026166f, -0.013628f, 0.006958f, 0.055360f, 0.031944f, -0.005508f, 0.075597f, -0.009033f, 0.031181f, -0.035927f, 0.044223f, 0.041108f, -0.003539f, -0.033619f, 0.003745f, 0.011683f, -0.018353f, 0.019327f, -0.026889f, -0.000782f, -0.008106f, -0.009241f, -0.030587f, -0.022875f, -0.013794f, -0.002219f, -0.009753f, -0.024542f, 0.036187f, 0.024348f, 0.006900f, -0.010376f, 0.006360f, 0.034301f, 0.016532f, 0.025127f, 0.016241f, -0.019249f, -0.029077f, 0.058891f, -0.007523f, -0.032655f, -0.013260f, -0.014191f, -0.007504f, 0.042552f, 0.002075f, -0.033300f, -0.012378f, -0.082356f, -0.019978f, -0.009892f, 0.050809f, 0.034658f, -0.099520f, -0.043227f, -0.024028f, -0.000759f, 0.005250f, -0.040074f, 0.029569f, 0.015442f, 0.025767f, 0.049799f, -0.065196f, 0.063797f, 0.046225f, -0.021029f, -0.043700f, 0.002581f, -0.010714f, 0.016833f, 0.058542f, -0.030407f, -0.033545f, 0.047332f, -0.055733f, -0.062852f, -0.024987f, - 0.006230f, -0.017704f, -0.068846f, -0.027529f, -0.022373f, 0.001293f, 0.003602f, -0.019422f, -0.001539f, 0.003189f, 0.000680f, 0.006077f, -0.043547f, -0.015030f, -0.014512f, 0.003013f, 0.012007f, -0.003006f, -0.013997f, -0.007868f, 0.004507f, 0.022363f, 0.023574f, -0.003087f, -0.020652f, -0.005143f, 0.030037f, 0.001992f, -0.007917f, 0.006482f, -0.040939f, -0.011836f, -0.019340f, 0.002897f, 0.007017f, -0.039452f, -0.040443f, 0.010263f, 0.035114f, -0.014910f, 0.022981f, 0.007284f, -0.011330f, -0.003119f, 0.009339f, 0.007235f, -0.003310f, 0.007187f, 0.052112f, 0.007196f, 0.019493f, -0.040642f, -0.064589f, 0.093259f, 0.046468f, 0.004387f, 0.005953f, -0.020790f, -0.054971f, 0.019388f, -0.004422f, 0.047160f, 0.010356f, 0.017600f, 0.051381f, 0.028657f, -0.000740f, -0.005345f, 0.008552f, -0.031270f, -0.026004f, -0.033258f, -0.018808f, 0.031078f, -0.008633f, 0.002102f, 0.038513f, -0.006500f, 0.016802f, -0.053580f, -0.048437f, -0.032607f, 0.027737f, 0.011496f, -0.001959f, 0.012924f, -0.017258f, -0.048170f, 0.060818f, -0.057799f, 0.026521f, 0.027686f, 0.021512f, 0.009820f, 0.036748f, -0.023687f, - -0.059453f, 0.043951f, 0.124047f, -0.021769f, 0.059905f, -0.072163f, -0.039207f, 0.044818f, 0.025954f, -0.066990f, -0.019122f, -0.005537f, 0.058060f, -0.014368f, -0.006538f, -0.091137f, -0.058888f, -0.020843f, -0.067254f, 0.056153f, 0.059474f, 0.094357f, -0.083703f, 0.035998f, 0.010199f, -0.046287f, -0.002932f, -0.002082f, -0.096678f, 0.068883f, -0.028905f, 0.032587f, -0.010174f, 0.005472f, 0.130203f, -0.035126f, 0.044978f, 0.030039f, -0.031910f, 0.057001f, -0.000392f, -0.010822f, 0.003152f, 0.014813f, 0.036418f, 0.022637f, 0.014280f, -0.001144f, 0.034437f, -0.032459f, -0.016430f, 0.002909f, 0.008329f, 0.016318f, -0.009324f, 0.028278f, 0.003385f, 0.012672f, -0.005891f, 0.021487f, -0.002223f, -0.031000f, 0.017495f, -0.038116f, -0.023102f, -0.008685f, 0.015956f, -0.003853f, 0.019126f, 0.045089f, 0.068753f, 0.050246f, 0.013242f, 0.032436f, -0.019097f, 0.016658f, -0.001726f, -0.001082f, -0.003515f, 0.007048f, -0.014936f, 0.019353f, -0.018407f, -0.083125f, -0.047130f, -0.001718f, -0.012589f, -0.027861f, 0.010101f, 0.026801f, 0.002781f, -0.029446f, -0.001478f, -0.028228f, 0.076450f, -0.023484f, - 0.001759f, 0.057947f, -0.003249f, -0.059454f, -0.041353f, -0.040639f, -0.017993f, -0.021639f, 0.063695f, 0.006596f, 0.010515f, 0.031740f, -0.017444f, -0.017779f, -0.010689f, -0.018124f, -0.038828f, -0.009130f, 0.073013f, 0.023554f, 0.017365f, -0.048518f, 0.017914f, 0.003799f, -0.034540f, -0.004036f, -0.017300f, 0.079212f, -0.062637f, -0.054089f, -0.019043f, 0.009879f, -0.018647f, 0.002413f, 0.021407f, -0.041241f, -0.011057f, 0.067102f, -0.054051f, 0.009496f, -0.013527f, -0.032874f, -0.057329f, -0.043826f, 0.002151f, -0.079864f, -0.096547f, 0.022920f, 0.019808f, 0.015505f, -0.086269f, 0.066637f, 0.080981f, -0.027492f, -0.023419f, 0.005046f, -0.003348f, -0.018255f, -0.044811f, 0.032479f, 0.122185f, 0.031707f, -0.030163f, 0.000586f, 0.019418f, 0.040748f, 0.011057f, -0.072302f, -0.064454f, 0.069839f, -0.013358f, -0.028594f, -0.042102f, 0.014490f, 0.079860f, 0.024441f, -0.025234f, 0.014706f, -0.003089f, -0.014235f, -0.006975f, -0.004289f, 0.035340f, 0.019515f, -0.012004f, -0.019564f, 0.015999f, 0.009255f, -0.002964f, -0.008110f, 0.012934f, -0.018925f, 0.011746f, 0.030594f, -0.002814f, -0.016965f, - -0.005088f, -0.010934f, -0.018532f, -0.034315f, 0.005002f, 0.026136f, -0.017505f, -0.021658f, 0.010683f, -0.027026f, 0.000160f, -0.043943f, 0.021081f, 0.027334f, 0.069955f, -0.022310f, -0.009529f, -0.029008f, -0.029714f, 0.008351f, 0.015414f, 0.029058f, -0.003505f, -0.006343f, -0.029334f, 0.011750f, 0.007223f, 0.008754f, 0.018503f, 0.021286f, -0.026427f, -0.069767f, 0.019325f, 0.027253f, -0.103287f, 0.056581f, 0.002475f, -0.029451f, 0.009949f, 0.037693f, -0.053353f, 0.032971f, -0.049537f, 0.013382f, -0.002821f, -0.025001f, -0.013830f, -0.006774f, -0.036450f, 0.026151f, 0.022955f, -0.001069f, 0.012691f, 0.001587f, 0.020318f, 0.026412f, 0.025622f, 0.037883f, 0.032627f, -0.020143f, 0.005149f, -0.041338f, 0.043905f, -0.033890f, 0.010815f, -0.006531f, 0.009020f, 0.002150f, -0.031221f, 0.028478f, -0.015780f, -0.030256f, 0.063571f, -0.050789f, 0.015349f, -0.014639f, -0.025149f, 0.025632f, -0.006514f, 0.007617f, 0.039654f, -0.047799f, 0.002037f, -0.058567f, -0.115325f, -0.002922f, 0.036884f, -0.013839f, 0.148471f, 0.030235f, -0.057877f, 0.016332f, -0.080786f, 0.028125f, 0.057974f, 0.068396f, - -0.023401f, -0.013447f, -0.089823f, -0.103041f, -0.008570f, -0.064222f, 0.015329f, -0.004011f, -0.055991f, -0.013086f, -0.027674f, -0.061350f, 0.050412f, 0.099032f, -0.027676f, 0.007042f, 0.021456f, -0.026194f, 0.030726f, 0.039087f, -0.027010f, 0.004600f, 0.000197f, -0.049213f, 0.024715f, 0.004230f, 0.015064f, 0.018106f, -0.034722f, 0.013711f, -0.018376f, -0.027862f, -0.031553f, 0.026995f, -0.019543f, 0.011154f, -0.030499f, -0.010946f, -0.001990f, -0.037223f, 0.036650f, -0.023556f, 0.007408f, 0.011263f, -0.034681f, -0.005557f, 0.026905f, -0.003058f, 0.003914f, 0.006090f, -0.010067f, 0.016598f, 0.034700f, -0.004011f, 0.020193f, 0.023831f, -0.029485f, -0.055993f, 0.019077f, 0.008003f, 0.032501f, 0.038990f, -0.050666f, -0.049683f, 0.008807f, -0.073590f, 0.015131f, -0.005305f, -0.042969f, 0.019373f, -0.027914f, -0.018765f, -0.034685f, 0.017728f, -0.037766f, 0.048379f, -0.005173f, 0.017955f, -0.011173f, 0.064967f, -0.017667f, 0.035713f, -0.000613f, 0.042567f, -0.011889f, -0.021384f, 0.013852f, -0.024209f, -0.025685f, 0.003568f, 0.048333f, 0.031177f, -0.032935f, 0.035249f, -0.024705f, -0.037723f, - 0.010652f, 0.051809f, -0.019903f, -0.020983f, 0.027658f, 0.012510f, -0.025767f, 0.002987f, 0.035191f, -0.014569f, -0.033853f, 0.018552f, 0.014117f, 0.021735f, 0.039636f, 0.008423f, -0.023905f, -0.007751f, 0.087066f, 0.091566f, -0.025263f, -0.075616f, 0.058101f, -0.025202f, 0.016406f, 0.008364f, 0.098053f, 0.013607f, -0.050852f, -0.018460f, -0.012298f, 0.002899f, 0.015208f, 0.023806f, 0.031901f, -0.037700f, 0.012206f, 0.008763f, 0.056885f, -0.014019f, 0.040100f, 0.043246f, 0.023913f, 0.020716f, 0.012486f, 0.034481f, -0.032811f, 0.037096f, 0.047055f, 0.034076f, 0.005818f, -0.066372f, -0.009850f, -0.042733f, 0.002097f, 0.029028f, 0.009799f, -0.014466f, -0.023271f, -0.013479f, -0.003609f, -0.001479f, 0.012331f, -0.013570f, 0.003875f, -0.001209f, -0.010306f, 0.020507f, 0.008043f, -0.017940f, -0.008433f, -0.004426f, 0.024917f, 0.000234f, 0.005231f, -0.023594f, -0.016907f, -0.031375f, -0.014724f, -0.001669f, -0.002838f, 0.000697f, -0.005343f, -0.028078f, 0.007489f, -0.009408f, -0.004462f, 0.004498f, -0.007724f, -0.000107f, -0.024374f, -0.005550f, 0.001237f, 0.000694f, 0.000735f, -0.005952f, - -0.005975f, -0.001828f, -0.009515f, -0.013492f, 0.103720f, 0.043080f, -0.046302f, 0.010892f, -0.048388f, -0.026835f, -0.002973f, 0.017265f, -0.007414f, 0.037489f, -0.044719f, -0.001782f, 0.018164f, -0.001896f, 0.018877f, -0.003069f, 0.006869f, 0.003949f, -0.031937f, -0.010529f, 0.008875f, -0.030535f, -0.029988f, 0.002175f, 0.008205f, -0.021824f, 0.015742f, 0.014450f, -0.008647f, -0.015538f, -0.002026f, 0.002908f, -0.004910f, 0.012363f, 0.003674f, 0.009659f, -0.012910f, -0.006024f, 0.024044f, -0.000360f, 0.001628f, 0.011042f, -0.007218f, 0.012258f, -0.011646f, -0.022772f, -0.014125f, 0.022748f, -0.017955f, -0.013886f, 0.001862f, -0.018593f, -0.019245f, 0.027758f, -0.027561f, 0.044098f, 0.010194f, -0.020093f, 0.019922f, 0.002715f, -0.032516f, 0.002507f, -0.005448f, -0.006156f, 0.016111f, -0.000881f, -0.018884f, 0.037460f, -0.022232f, -0.009185f, 0.020059f, 0.005920f, -0.007772f, 0.000598f, 0.006537f, -0.001005f, -0.001112f, -0.004288f, 0.009187f, 0.015344f, -0.000118f, -0.026599f, 0.019265f, -0.013902f, -0.001535f, 0.022062f, -0.000984f, -0.007243f, -0.000422f, -0.019768f, 0.009881f, 0.006334f, - -0.001657f, 0.000051f, 0.008415f, -0.019259f, 0.001881f, -0.006849f, 0.002411f, 0.007433f, 0.002514f, -0.008405f, 0.019024f, -0.028529f, 0.004199f, 0.002948f, -0.001489f, 0.003107f, -0.003631f, -0.016274f, 0.018044f, -0.008516f, 0.013038f, -0.000169f, -0.001532f, 0.016139f, 0.006686f, -0.014206f, 0.005739f, -0.007350f, -0.005502f, 0.002794f, 0.010978f, 0.010269f, -0.003655f, -0.014027f, 0.007507f, -0.008144f, -0.062538f, -0.075206f, 0.063432f, 0.256890f, 0.100519f, 0.117856f, 0.001619f, -0.240515f, -0.177107f, -0.092588f, -0.141128f, 0.063333f, 0.121575f, 0.050131f, 0.214906f, 0.121602f, -0.008052f, 0.050517f, -0.108605f, -0.219157f, -0.087427f, -0.152215f, -0.024295f, 0.105483f, 0.088892f, 0.080451f, 0.133978f, 0.082660f, 0.022772f, 0.036819f, -0.009925f, -0.155929f, -0.068869f, -0.056142f, -0.215427f, 0.039996f, 0.028306f, -0.095660f, 0.155273f, 0.153633f, -0.005179f, 0.194377f, 0.095623f, -0.090239f, 0.060372f, -0.089711f, -0.186731f, -0.014781f, -0.112766f, -0.163426f, 0.028961f, 0.017530f, -0.009686f, 0.152460f, 0.147051f, 0.087823f, 0.130914f, 0.079562f, -0.050797f, -0.057295f, - -0.101878f, -0.174692f, -0.128853f, -0.061477f, -0.057573f, 0.031397f, 0.098773f, 0.067500f, 0.108513f, 0.163771f, 0.063802f, -0.021477f, -0.020377f, -0.113199f, -0.091342f, 0.008444f, -0.104862f, -0.047607f, 0.057076f, 0.014101f, 0.071424f, 0.057412f, -0.029101f, 0.019184f, -0.005761f, -0.039041f, 0.008794f, -0.017390f, -0.017533f, 0.036279f, 0.012716f, 0.015409f, 0.048360f, -0.027609f, -0.010579f, 0.026273f, -0.035757f, -0.029395f, 0.013845f, -0.085945f, -0.014121f, 0.029641f, -0.069150f, 0.034087f, 0.043547f, 0.004760f, 0.109045f, 0.103657f, 0.024047f, 0.042180f, -0.029972f, -0.092328f, -0.046129f, -0.122923f, -0.139469f, -0.079078f, -0.033426f, 0.026701f, 0.133573f, 0.154601f, 0.162073f, 0.143875f, 0.082390f, -0.017625f, -0.089962f, -0.142717f, -0.199087f, -0.170387f, -0.093493f, -0.024013f, 0.080935f, 0.144724f, 0.144592f, 0.129207f, 0.084328f, -0.015257f, -0.025241f, -0.040827f, -0.061691f, -0.043854f, -0.038289f, -0.045626f, -0.024071f, -0.012222f, -0.010065f, 0.010202f, 0.028290f, 0.036998f, 0.048388f, 0.044559f, 0.035706f, 0.016673f, 0.004294f, -0.014880f, -0.019821f, -0.021536f, - -0.012019f, -0.006727f, 0.000043f, -0.001458f}, - {0.001000f, 0.006407f, -0.008711f, -0.007089f, -0.001217f, 0.006868f, 0.010120f, -0.004765f, 0.005910f, -0.003272f, -0.008428f, -0.002310f, -0.004711f, 0.002771f, -0.001160f, -0.004072f, 0.003734f, 0.005669f, 0.001270f, 0.006853f, -0.012556f, -0.013566f, -0.008717f, 0.001264f, -0.000034f, -0.002318f, 0.000654f, 0.004143f, -0.001357f, 0.005594f, 0.004620f, -0.005925f, 0.002255f, -0.000442f, 0.007242f, 0.006681f, 0.002518f, -0.007095f, 0.004652f, -0.004226f, 0.002365f, 0.004659f, -0.011341f, 0.012393f, 0.018195f, 0.002385f, 0.008244f, -0.006697f, -0.001356f, -0.006287f, -0.003271f, 0.005641f, -0.001887f, -0.006502f, -0.001728f, -0.004092f, 0.003132f, -0.003991f, -0.003635f, 0.000369f, 0.003323f, -0.003308f, -0.003743f, -0.001616f, 0.006461f, 0.005826f, -0.004924f, -0.001805f, -0.005818f, 0.001344f, 0.007676f, 0.002140f, -0.002817f, -0.003664f, 0.002885f, -0.001026f, -0.005238f, -0.001905f, -0.003539f, -0.000502f, -0.001900f, 0.003043f, 0.002838f, 0.001534f, -0.001687f, -0.002313f, 0.005172f, -0.000695f, 0.001403f, 0.002694f, -0.000777f, -0.000065f, -0.001079f, 0.001587f, 0.000204f, 0.000405f, - -0.001521f, 0.000222f, -0.000486f, -0.001497f, 0.000068f, -0.000225f, 0.001112f, 0.002736f, -0.001522f, 0.000644f, -0.000301f, 0.001337f, 0.001619f, -0.000384f, -0.000676f, -0.000331f, -0.000091f, -0.001445f, -0.000618f, 0.000663f, -0.000565f, 0.000288f, -0.000040f, 0.001225f, 0.000256f, 0.027993f, 0.012883f, -0.000972f, 0.005860f, 0.005320f, -0.006716f, -0.003295f, 0.007761f, 0.003528f, 0.008446f, -0.006146f, 0.012283f, 0.004611f, -0.012131f, 0.009618f, 0.000505f, -0.000225f, -0.006407f, 0.007035f, -0.013118f, -0.011257f, -0.002421f, -0.004008f, -0.002189f, -0.004027f, 0.001505f, -0.002449f, -0.005465f, -0.003951f, 0.004545f, -0.004989f, 0.003168f, 0.002000f, 0.001258f, -0.005507f, 0.007691f, -0.016152f, -0.002862f, -0.000103f, -0.002854f, -0.002044f, 0.001364f, 0.002996f, -0.005206f, 0.004099f, -0.006304f, 0.005984f, 0.001868f, 0.001294f, 0.006157f, -0.004389f, -0.001088f, 0.002486f, 0.009651f, 0.002375f, 0.004025f, -0.002259f, -0.008448f, -0.011769f, 0.002118f, 0.006348f, 0.008280f, -0.003441f, -0.013176f, 0.001923f, -0.005415f, -0.003694f, -0.003086f, 0.003608f, 0.000336f, 0.012805f, - -0.000432f, 0.004287f, 0.002467f, -0.001980f, -0.003395f, -0.003619f, -0.013467f, -0.003980f, -0.002247f, -0.001865f, -0.002623f, 0.002454f, 0.006664f, 0.001834f, 0.006318f, -0.000115f, -0.000661f, -0.002083f, 0.001694f, 0.002278f, -0.000701f, -0.002646f, 0.002200f, -0.001387f, 0.000828f, -0.001185f, 0.001113f, -0.001978f, -0.001254f, 0.001769f, 0.000526f, 0.000974f, -0.000762f, 0.000577f, -0.001297f, 0.015061f, 0.003529f, -0.012754f, -0.014423f, 0.003940f, -0.004374f, -0.011987f, 0.013617f, -0.006690f, -0.002187f, -0.001873f, 0.010689f, 0.002224f, -0.006135f, 0.007458f, -0.005755f, 0.011282f, -0.015575f, -0.010320f, 0.012482f, -0.012995f, -0.013060f, -0.005277f, 0.010676f, 0.004643f, 0.005135f, -0.001264f, 0.009572f, 0.005753f, -0.000946f, -0.012598f, 0.003446f, -0.003515f, 0.004571f, 0.003976f, 0.003472f, 0.010904f, 0.002972f, -0.010777f, 0.001035f, 0.007473f, 0.011047f, 0.003691f, -0.005978f, -0.001441f, -0.008839f, 0.003784f, -0.015716f, -0.000632f, 0.017076f, 0.000898f, 0.001877f, -0.008748f, -0.010758f, 0.001646f, 0.002414f, 0.012510f, -0.002671f, 0.001066f, 0.001375f, -0.001863f, - 0.001346f, 0.004152f, 0.000805f, 0.008800f, -0.002328f, 0.005843f, 0.000930f, 0.001575f, 0.001125f, 0.010329f, 0.000499f, -0.001446f, 0.001979f, -0.002208f, -0.006918f, -0.003724f, -0.007133f, -0.000166f, 0.013086f, 0.002731f, -0.004183f, -0.001459f, -0.007350f, 0.004230f, -0.005736f, -0.004078f, 0.001494f, 0.000225f, 0.000520f, -0.003343f, -0.004662f, -0.000969f, 0.001263f, -0.001581f, 0.002813f, -0.000287f, 0.000086f, 0.002684f, 0.001761f, 0.002705f, 0.002315f, -0.000007f, 0.000980f, -0.002154f, 0.000222f, -0.001907f, -0.001974f, 0.001487f, 0.001851f, 0.003110f, 0.002343f, -0.001459f, -0.000273f, 0.001665f, -0.001084f, -0.002316f, 0.001447f, 0.000377f, -0.034626f, -0.022715f, -0.004934f, 0.003709f, 0.005639f, 0.000523f, 0.000012f, -0.013307f, -0.000759f, -0.002950f, -0.002157f, 0.000226f, -0.003310f, -0.001592f, -0.009734f, 0.005018f, -0.020547f, -0.007601f, 0.001912f, -0.004205f, -0.006234f, -0.003675f, -0.011661f, -0.006014f, -0.004805f, -0.005634f, 0.002663f, -0.009148f, -0.004924f, 0.011184f, 0.007406f, 0.000695f, 0.005476f, 0.003906f, -0.003611f, -0.007603f, 0.004549f, 0.016735f, - 0.001981f, 0.002044f, -0.006545f, -0.005980f, 0.005018f, -0.014447f, -0.007578f, 0.015888f, -0.014498f, 0.004348f, -0.003395f, -0.007407f, 0.003453f, 0.001021f, -0.003973f, 0.000893f, 0.002532f, -0.005098f, 0.000132f, -0.001049f, 0.009923f, 0.008679f, 0.001375f, 0.002305f, 0.004353f, -0.000334f, -0.001831f, -0.003438f, -0.020149f, 0.009758f, 0.006201f, -0.005552f, -0.000132f, -0.008509f, -0.002216f, 0.001168f, -0.006104f, 0.002774f, -0.007424f, -0.004215f, -0.008657f, -0.013009f, 0.008628f, -0.002500f, 0.000476f, -0.010998f, -0.002646f, 0.001391f, 0.001913f, -0.002917f, -0.000411f, -0.000630f, -0.002931f, -0.005700f, 0.001004f, -0.002937f, 0.002542f, -0.000473f, -0.001333f, -0.001188f, -0.000495f, 0.002758f, 0.000584f, -0.004222f, 0.000898f, -0.001283f, -0.000246f, 0.001334f, 0.000734f, -0.001111f, 0.001098f, -0.003316f, 0.001876f, -0.003015f, -0.000828f, -0.029965f, 0.004614f, 0.007031f, -0.001894f, -0.002625f, -0.016598f, -0.006788f, 0.004543f, -0.014815f, -0.014207f, 0.002902f, -0.013516f, -0.006953f, -0.000356f, -0.008153f, 0.004589f, -0.006427f, 0.010119f, -0.005347f, -0.003527f, 0.003199f, - 0.007070f, 0.013110f, 0.008175f, -0.014612f, -0.000814f, -0.001085f, 0.007181f, 0.010803f, 0.018333f, -0.008159f, -0.007242f, 0.009514f, -0.010056f, 0.002326f, 0.002850f, 0.015509f, 0.005655f, 0.008656f, -0.011575f, -0.005104f, -0.015793f, 0.012466f, 0.013019f, 0.015005f, -0.000275f, -0.003229f, -0.010096f, -0.002110f, 0.010047f, -0.004681f, -0.006521f, -0.005969f, -0.007940f, 0.001706f, 0.001809f, 0.002367f, -0.010853f, -0.000145f, -0.010636f, -0.000573f, -0.001637f, 0.004313f, 0.003673f, -0.003249f, -0.004861f, -0.013416f, -0.000844f, -0.001075f, 0.008206f, -0.005182f, 0.013676f, -0.007833f, 0.001647f, 0.006369f, 0.012416f, -0.009656f, 0.002820f, 0.006542f, -0.011289f, 0.005620f, -0.000073f, 0.013815f, 0.004535f, 0.003092f, 0.008419f, -0.000861f, 0.002250f, 0.006531f, 0.002565f, 0.000069f, -0.002494f, 0.000106f, 0.002673f, -0.000894f, 0.003416f, 0.005349f, 0.004294f, -0.002028f, 0.002343f, 0.000337f, -0.001540f, 0.002139f, 0.002730f, -0.000005f, 0.001200f, 0.003422f, 0.002426f, 0.002759f, 0.001231f, -0.001349f, -0.002324f, 0.002637f, -0.002489f, 0.002625f, -0.001480f, 0.000190f, - 0.003200f, 0.002508f, -0.000888f, 0.037072f, 0.031805f, -0.001155f, 0.000957f, 0.016528f, 0.002267f, 0.008088f, -0.004950f, 0.009066f, -0.006986f, 0.016685f, 0.005726f, 0.000012f, 0.003418f, 0.001151f, 0.021147f, 0.014259f, -0.013849f, -0.011556f, 0.004502f, 0.002218f, -0.004433f, -0.003027f, 0.002689f, 0.010118f, 0.007534f, 0.004608f, 0.001094f, 0.005331f, -0.003523f, -0.000300f, 0.011653f, -0.012817f, 0.005144f, 0.015529f, 0.011673f, 0.021120f, -0.002074f, -0.003241f, -0.001837f, 0.001308f, -0.006743f, 0.022952f, 0.021069f, 0.015022f, -0.006999f, -0.002125f, 0.008963f, 0.007268f, -0.006424f, 0.001404f, 0.012061f, -0.004540f, -0.005639f, 0.007636f, -0.022333f, -0.002632f, 0.001241f, 0.003249f, -0.007556f, -0.014642f, 0.005968f, 0.009949f, -0.011875f, -0.004465f, -0.012914f, 0.004772f, 0.000912f, -0.002762f, -0.002774f, -0.011316f, 0.018887f, -0.005020f, 0.002544f, -0.019258f, -0.004557f, -0.009225f, 0.022459f, -0.004020f, -0.003081f, 0.009942f, 0.004627f, -0.000124f, -0.007163f, 0.006583f, -0.004712f, -0.006759f, 0.010415f, 0.009628f, -0.000143f, 0.005985f, 0.000223f, -0.002839f, - 0.005528f, -0.000937f, 0.002160f, -0.001872f, -0.002434f, -0.000702f, 0.004302f, -0.003277f, -0.002432f, -0.000232f, -0.003255f, 0.001070f, -0.002934f, -0.001794f, 0.000284f, -0.000635f, 0.004275f, 0.000030f, 0.001258f, 0.002618f, 0.002745f, 0.000614f, 0.001423f, 0.002139f, 0.005697f, 0.000964f, 0.005370f, 0.000786f, 0.002663f, 0.003781f, 0.024407f, -0.000930f, 0.015419f, 0.021105f, -0.011152f, -0.025952f, 0.001077f, 0.019770f, -0.015302f, 0.013887f, -0.004141f, -0.018778f, -0.008688f, 0.018945f, -0.018505f, -0.016310f, 0.011879f, -0.018863f, 0.006277f, 0.009016f, 0.007394f, -0.005344f, 0.011422f, 0.003234f, 0.002136f, 0.007365f, -0.012069f, 0.016442f, 0.008077f, 0.007144f, -0.003404f, -0.001827f, 0.030622f, -0.010721f, 0.001891f, 0.007978f, 0.015404f, -0.020946f, -0.017258f, -0.016063f, 0.000608f, 0.001189f, -0.001087f, 0.009749f, 0.003022f, 0.017401f, 0.006992f, 0.010197f, -0.001651f, 0.001363f, -0.008615f, 0.015550f, -0.007055f, 0.015337f, -0.008379f, -0.013236f, 0.022810f, 0.018532f, -0.026258f, -0.023171f, -0.015241f, -0.011917f, 0.008250f, 0.001301f, -0.005328f, 0.012068f, - 0.013306f, -0.015993f, 0.009398f, -0.001305f, -0.032011f, -0.010584f, -0.016147f, -0.014649f, 0.005529f, -0.004996f, 0.010497f, -0.002436f, 0.001567f, 0.019126f, 0.019484f, -0.001827f, 0.005116f, -0.001716f, 0.003022f, 0.002737f, -0.006607f, 0.005469f, 0.001590f, -0.000271f, 0.016439f, 0.004922f, -0.000130f, 0.000470f, -0.002951f, 0.004838f, -0.000551f, 0.003176f, -0.003573f, -0.000221f, -0.003768f, 0.000976f, 0.004269f, 0.001324f, -0.000026f, -0.000541f, 0.003733f, 0.002386f, -0.002380f, 0.000297f, -0.000117f, 0.000536f, 0.001889f, 0.000810f, -0.013917f, -0.019393f, 0.011623f, -0.011125f, -0.008255f, -0.006887f, -0.022648f, -0.002313f, 0.010048f, -0.006049f, -0.001405f, -0.008189f, 0.018591f, 0.002950f, 0.011829f, 0.009135f, -0.015047f, 0.015498f, 0.023054f, -0.006993f, -0.009462f, 0.002569f, -0.004040f, 0.010057f, -0.028580f, 0.011029f, 0.024703f, -0.003194f, -0.008118f, -0.006952f, 0.010732f, 0.022250f, -0.005276f, 0.005695f, -0.009903f, 0.015279f, -0.018304f, -0.006901f, 0.003540f, -0.002750f, -0.014204f, 0.026238f, 0.018409f, 0.013913f, -0.005829f, -0.019568f, -0.002433f, -0.027845f, - 0.004823f, -0.001912f, -0.000900f, -0.000459f, -0.004222f, 0.015285f, 0.012832f, -0.019300f, 0.010860f, -0.011502f, 0.016071f, -0.001341f, -0.003257f, -0.001198f, -0.017020f, -0.003113f, -0.015526f, -0.034241f, -0.001558f, 0.004167f, 0.002720f, -0.013053f, -0.000441f, -0.003628f, -0.025674f, 0.000672f, 0.022313f, -0.013940f, 0.005849f, 0.007436f, -0.002816f, 0.001742f, -0.006588f, -0.003745f, 0.005252f, 0.006512f, 0.007011f, -0.001611f, -0.004461f, -0.001541f, -0.004795f, 0.004107f, 0.001952f, -0.003883f, -0.001151f, -0.003555f, -0.004039f, -0.000362f, -0.003627f, -0.005363f, 0.003436f, -0.000974f, -0.004222f, 0.003549f, -0.002949f, 0.002961f, 0.004268f, 0.001979f, 0.004104f, 0.003076f, -0.000017f, 0.002920f, 0.009237f, 0.004634f, -0.004547f, -0.002947f, -0.005224f, 0.000221f, -0.006768f, 0.003804f, -0.000363f, 0.005472f, -0.001360f, 0.004314f, -0.000666f, -0.002680f, 0.008731f, 0.004405f, -0.035975f, 0.002400f, 0.021192f, 0.011361f, -0.016320f, -0.013515f, 0.026532f, 0.005964f, 0.006068f, -0.005337f, 0.006966f, -0.000405f, -0.017519f, -0.004738f, -0.018407f, 0.008637f, -0.010911f, -0.001822f, - -0.017931f, -0.020132f, -0.026749f, 0.016689f, 0.011492f, -0.008758f, -0.009449f, 0.007421f, -0.024552f, -0.002387f, 0.001997f, 0.005831f, 0.010989f, 0.005167f, 0.000832f, -0.008676f, 0.003731f, -0.007978f, 0.006654f, -0.007658f, 0.004442f, 0.002154f, -0.007681f, -0.010289f, -0.019210f, -0.012898f, 0.005034f, -0.033152f, -0.008863f, 0.017986f, 0.009779f, -0.004114f, 0.043246f, -0.006372f, 0.020108f, 0.019622f, -0.031281f, 0.001918f, -0.004037f, -0.026668f, -0.013745f, -0.014735f, 0.000600f, 0.002979f, 0.029928f, -0.004923f, 0.003001f, 0.020066f, 0.015115f, -0.003650f, 0.020248f, -0.009663f, -0.007245f, -0.013565f, -0.017688f, -0.026080f, -0.009725f, 0.014685f, -0.028131f, -0.014543f, 0.021985f, 0.015807f, -0.009387f, 0.019849f, -0.008752f, -0.001499f, -0.000748f, 0.009488f, -0.006107f, 0.009456f, -0.005842f, 0.008074f, -0.002225f, 0.003269f, -0.003700f, 0.006513f, 0.006503f, 0.002643f, -0.000970f, 0.007368f, -0.004685f, -0.005591f, 0.005995f, -0.001745f, 0.006530f, 0.004540f, 0.003320f, 0.004193f, 0.002779f, 0.001116f, -0.010738f, -0.002121f, 0.000060f, 0.002936f, -0.002735f, -0.004711f, - -0.003680f, -0.010538f, 0.004127f, -0.000317f, 0.006756f, 0.003616f, 0.006583f, 0.004778f, 0.001538f, 0.002125f, 0.024777f, -0.004263f, 0.007960f, -0.012067f, 0.007113f, 0.010474f, -0.006393f, 0.008971f, -0.013785f, -0.015031f, 0.022996f, 0.012630f, 0.014845f, 0.018448f, -0.000101f, -0.015027f, 0.019866f, -0.017322f, -0.023402f, 0.000428f, 0.021936f, -0.003056f, -0.019013f, 0.002698f, 0.025820f, -0.003619f, 0.007090f, 0.002607f, 0.036227f, 0.002400f, 0.007755f, 0.017988f, -0.002271f, -0.009135f, -0.017351f, 0.002574f, -0.002402f, -0.016555f, 0.000550f, -0.009699f, 0.006660f, 0.024694f, 0.000254f, -0.014677f, -0.004383f, -0.013596f, -0.007300f, -0.001995f, -0.005785f, 0.003472f, -0.018302f, 0.019819f, -0.010374f, 0.033379f, -0.008361f, -0.023979f, 0.001400f, 0.001337f, 0.011810f, 0.005202f, 0.006402f, -0.024590f, -0.020049f, 0.014682f, -0.020877f, -0.028932f, 0.008382f, 0.005965f, -0.006586f, 0.031661f, -0.025579f, -0.035300f, 0.013313f, -0.024039f, 0.002364f, 0.003548f, 0.000732f, -0.023101f, -0.014147f, -0.030102f, 0.010438f, -0.002835f, -0.001626f, -0.004460f, -0.013449f, -0.005845f, - -0.010189f, -0.004828f, -0.003921f, 0.011807f, -0.008797f, 0.009129f, 0.003295f, 0.009422f, 0.001597f, 0.001441f, -0.012309f, -0.004254f, 0.003423f, -0.003717f, -0.013436f, 0.002935f, -0.002122f, -0.004991f, -0.004683f, 0.004583f, -0.005354f, 0.006094f, -0.003034f, 0.007343f, -0.001280f, 0.003893f, -0.006968f, -0.006604f, -0.000151f, 0.000839f, -0.002431f, 0.010962f, -0.009221f, -0.008530f, -0.005749f, 0.005495f, 0.005684f, -0.006837f, 0.001645f, -0.019432f, 0.010839f, 0.000967f, 0.026488f, 0.027530f, 0.040043f, 0.018103f, 0.008615f, 0.005428f, 0.013306f, -0.013669f, 0.015360f, -0.024150f, 0.011865f, -0.002463f, -0.001880f, -0.046195f, -0.017675f, -0.007672f, 0.015852f, -0.002076f, 0.003965f, 0.004892f, 0.004337f, -0.023660f, 0.024528f, -0.001026f, 0.010076f, 0.000708f, 0.022902f, -0.024546f, 0.017143f, -0.012118f, -0.000433f, 0.018329f, -0.020778f, -0.009454f, -0.022657f, -0.009179f, -0.025248f, 0.023028f, 0.017147f, 0.030972f, -0.001382f, 0.007250f, -0.028162f, 0.006344f, -0.029203f, 0.028410f, 0.008207f, -0.004738f, 0.027143f, 0.027452f, 0.014220f, -0.016526f, -0.024381f, -0.035415f, - -0.001434f, -0.012607f, -0.017667f, 0.019055f, -0.005146f, 0.044510f, -0.032927f, -0.012160f, 0.025632f, -0.026717f, -0.010459f, 0.006024f, 0.000587f, -0.003989f, -0.025427f, 0.011553f, 0.004457f, -0.014007f, 0.012754f, 0.026783f, -0.023007f, 0.025848f, 0.032430f, -0.009790f, -0.017012f, 0.013202f, -0.013035f, 0.012189f, 0.007968f, -0.013645f, -0.010439f, -0.002798f, -0.004115f, 0.018843f, 0.006489f, -0.003330f, -0.009112f, -0.015163f, -0.008424f, 0.004653f, -0.009542f, 0.004499f, 0.009213f, 0.005745f, -0.006395f, 0.004845f, -0.005223f, 0.007124f, 0.004776f, 0.007962f, 0.004958f, 0.000269f, -0.008429f, 0.005456f, 0.008540f, -0.008673f, 0.000406f, 0.002859f, 0.003211f, 0.007218f, 0.000718f, -0.001046f, 0.008113f, 0.009811f, 0.001980f, -0.004620f, -0.007698f, -0.000287f, 0.006900f, 0.008366f, 0.005866f, 0.041474f, -0.009440f, 0.005805f, -0.002177f, -0.013741f, 0.018667f, -0.006879f, 0.006941f, 0.002172f, 0.026718f, -0.008463f, 0.031148f, 0.000452f, 0.015524f, 0.013681f, -0.002419f, -0.010158f, -0.030266f, 0.014312f, 0.031575f, 0.001579f, -0.000182f, 0.021810f, 0.018598f, -0.001428f, - 0.003456f, 0.037464f, 0.023549f, -0.006892f, 0.008201f, 0.024597f, -0.006202f, -0.027440f, 0.000672f, -0.019954f, -0.003114f, -0.012689f, 0.001174f, -0.037927f, -0.011284f, -0.013890f, 0.000647f, 0.007803f, 0.007968f, 0.036674f, 0.040659f, 0.021325f, -0.028132f, -0.016715f, 0.022846f, 0.031939f, 0.006771f, -0.029408f, -0.004826f, -0.007066f, -0.030555f, -0.019417f, -0.023142f, 0.028128f, -0.010586f, 0.003739f, -0.028771f, 0.041684f, 0.030838f, -0.003613f, 0.012731f, 0.069277f, -0.003545f, -0.014381f, -0.026725f, -0.001769f, 0.018411f, 0.014453f, -0.010785f, 0.020768f, 0.041495f, -0.017964f, 0.026447f, -0.012240f, 0.008622f, -0.016852f, -0.009110f, -0.014569f, -0.018910f, -0.009876f, 0.012277f, -0.000238f, -0.004214f, 0.002815f, 0.005048f, 0.022208f, -0.002564f, 0.002027f, -0.000350f, -0.010570f, -0.001215f, -0.003922f, 0.001979f, 0.008840f, -0.005975f, -0.003015f, -0.007384f, -0.003692f, 0.002431f, 0.002512f, -0.002753f, -0.015055f, -0.013946f, -0.005001f, -0.017152f, -0.015137f, -0.002846f, 0.012917f, 0.011532f, 0.009798f, 0.002110f, -0.002630f, 0.000441f, 0.005316f, 0.004533f, -0.002146f, - 0.003062f, 0.001996f, 0.021084f, 0.001691f, -0.013155f, -0.018137f, -0.029737f, 0.038705f, -0.024188f, 0.029121f, -0.021223f, -0.032439f, 0.001814f, 0.040096f, 0.026224f, -0.030155f, -0.019723f, 0.006600f, 0.006187f, 0.013359f, -0.002126f, 0.026630f, 0.014577f, 0.035185f, -0.012721f, -0.006258f, -0.001037f, -0.007191f, -0.033987f, -0.025534f, -0.007688f, 0.035365f, 0.007633f, 0.002476f, 0.001408f, -0.033588f, -0.037670f, -0.029602f, 0.015315f, 0.016945f, -0.012762f, -0.008884f, 0.003492f, 0.003763f, -0.020013f, 0.005475f, 0.037815f, 0.006255f, 0.023750f, 0.022826f, 0.016826f, 0.040046f, 0.058157f, 0.018689f, 0.001168f, 0.007990f, 0.023057f, -0.012468f, -0.006287f, 0.015038f, -0.005076f, 0.007869f, -0.005214f, 0.024671f, 0.009025f, 0.017362f, -0.004787f, -0.007048f, 0.012863f, 0.033080f, -0.002301f, -0.027828f, 0.017695f, -0.043333f, -0.049678f, -0.017455f, 0.025894f, -0.017040f, -0.049133f, -0.030526f, -0.012412f, 0.017572f, 0.012400f, -0.027058f, 0.047918f, -0.015791f, -0.033401f, 0.008321f, 0.013189f, -0.011457f, 0.016717f, -0.017732f, -0.006705f, 0.005749f, 0.004588f, -0.009543f, - 0.008540f, 0.001127f, 0.015172f, -0.008826f, -0.017954f, -0.010986f, 0.003091f, -0.004485f, -0.003573f, -0.001941f, 0.000200f, -0.001970f, 0.012305f, -0.002628f, 0.002093f, -0.005493f, 0.005699f, 0.009570f, 0.002023f, 0.009146f, 0.003057f, -0.015627f, -0.006622f, -0.000504f, -0.012994f, -0.015963f, 0.007437f, 0.010239f, -0.008421f, -0.017004f, -0.018037f, 0.006788f, 0.003017f, -0.001397f, 0.011658f, -0.007370f, 0.015665f, -0.069447f, 0.003697f, 0.035253f, -0.006557f, -0.008223f, 0.042689f, -0.022888f, -0.023753f, -0.030152f, -0.010090f, -0.010167f, -0.020201f, 0.005996f, 0.009710f, 0.016509f, 0.011550f, -0.009627f, -0.007716f, -0.003379f, -0.008638f, 0.002891f, 0.007949f, 0.034833f, -0.015027f, -0.045067f, 0.023997f, 0.000213f, -0.001446f, -0.037482f, 0.016599f, 0.007299f, -0.004010f, 0.042738f, -0.012359f, 0.004662f, -0.004093f, 0.018855f, 0.022589f, -0.024983f, -0.002600f, -0.014012f, -0.001774f, 0.012790f, -0.009603f, 0.019578f, -0.030664f, -0.025470f, -0.016270f, -0.027214f, -0.004887f, 0.002480f, 0.004066f, -0.038067f, -0.025181f, 0.018124f, 0.030548f, -0.014580f, -0.017334f, 0.016142f, - -0.035002f, -0.031586f, -0.030735f, 0.033592f, -0.056869f, 0.018404f, -0.003236f, -0.033465f, -0.010856f, 0.028222f, 0.071894f, -0.009682f, -0.020100f, 0.023732f, 0.055077f, 0.019827f, -0.012676f, -0.013440f, -0.002742f, 0.015095f, -0.001251f, 0.007018f, 0.032692f, 0.002114f, -0.012526f, -0.023300f, 0.019060f, -0.027482f, -0.018934f, -0.013719f, 0.009465f, -0.011381f, -0.020100f, -0.012655f, -0.012322f, -0.000256f, -0.014892f, 0.004942f, -0.011595f, -0.001113f, -0.003959f, 0.013851f, -0.010794f, -0.008409f, -0.021873f, -0.006573f, -0.004088f, -0.007421f, 0.020307f, -0.015295f, -0.019692f, -0.001394f, -0.017314f, -0.015764f, -0.007387f, 0.002149f, 0.015152f, -0.002192f, -0.006843f, -0.003153f, -0.010456f, 0.007011f, -0.020838f, -0.001977f, 0.021013f, 0.009914f, 0.013658f, -0.005588f, 0.005014f, 0.006593f, -0.005382f, -0.008319f, -0.011886f, 0.003890f, 0.009975f, -0.004402f, -0.038846f, -0.062601f, -0.003405f, 0.071238f, -0.011234f, -0.005380f, -0.047059f, -0.003835f, -0.002960f, 0.004653f, 0.015829f, 0.001880f, 0.013187f, 0.000658f, -0.000596f, -0.033954f, 0.004970f, 0.030365f, -0.020525f, 0.037725f, - -0.015858f, -0.002636f, -0.033540f, 0.021301f, -0.016636f, -0.011194f, -0.038737f, -0.052999f, 0.027064f, -0.026018f, -0.025199f, 0.008959f, 0.005536f, -0.011641f, 0.002712f, 0.029560f, -0.008742f, -0.028772f, -0.017582f, -0.036763f, -0.004370f, 0.010142f, 0.025346f, 0.004893f, -0.007349f, -0.006536f, -0.015029f, 0.008468f, 0.026307f, 0.004061f, -0.016351f, 0.029561f, -0.028518f, 0.002786f, -0.049194f, -0.014784f, -0.009601f, 0.060433f, -0.038330f, 0.012130f, -0.012429f, 0.007702f, -0.007040f, -0.007053f, 0.001201f, 0.024419f, 0.007508f, -0.045072f, 0.049277f, 0.014780f, 0.017605f, 0.006094f, -0.019624f, -0.015275f, -0.005619f, 0.005954f, -0.001091f, 0.009564f, -0.026640f, -0.028031f, -0.004533f, 0.013243f, 0.029928f, -0.018827f, 0.025380f, -0.006537f, 0.009883f, -0.020359f, 0.011420f, -0.033001f, 0.036571f, 0.001298f, 0.004054f, 0.011701f, 0.016476f, 0.001288f, -0.022869f, -0.011343f, 0.006119f, -0.021992f, 0.005834f, 0.009848f, 0.009102f, -0.013223f, -0.008062f, 0.021584f, 0.003942f, -0.022615f, -0.003287f, 0.018662f, -0.007252f, -0.027752f, 0.030920f, -0.008798f, 0.011882f, -0.005612f, - -0.009021f, -0.014978f, 0.009408f, 0.002248f, 0.009782f, 0.001110f, 0.016506f, 0.001580f, 0.011814f, -0.006215f, 0.000637f, 0.007093f, -0.004433f, -0.007003f, -0.031020f, -0.017934f, 0.066114f, -0.007918f, 0.005479f, -0.034112f, 0.030839f, -0.017502f, 0.022701f, -0.017664f, 0.039930f, 0.004364f, 0.004051f, -0.019041f, -0.015916f, 0.023682f, 0.051761f, -0.021155f, -0.031574f, 0.015300f, -0.012440f, 0.034578f, 0.043132f, 0.021721f, -0.006489f, 0.027146f, -0.017739f, -0.016029f, 0.036237f, 0.050373f, -0.055846f, 0.005066f, 0.008330f, 0.009954f, -0.018899f, -0.000813f, 0.022549f, -0.055937f, 0.016964f, 0.033496f, 0.012414f, -0.024597f, -0.006943f, 0.041020f, 0.033177f, 0.011551f, -0.019067f, -0.024377f, -0.048851f, 0.070217f, 0.012619f, 0.036362f, -0.005213f, -0.014306f, 0.007806f, 0.021393f, 0.000658f, -0.000585f, -0.056777f, 0.009337f, 0.053554f, -0.009024f, 0.051318f, -0.030243f, -0.013833f, -0.020919f, 0.011964f, 0.048833f, -0.015216f, -0.000838f, 0.043662f, 0.053891f, -0.017407f, -0.038407f, -0.034778f, -0.029739f, -0.014128f, -0.012228f, 0.030667f, -0.036986f, 0.020447f, 0.023721f, - -0.008556f, 0.003247f, 0.024024f, -0.004058f, -0.013882f, 0.015068f, 0.010193f, 0.008321f, 0.022078f, 0.005475f, -0.004010f, 0.020653f, 0.007089f, 0.009097f, 0.010084f, -0.002819f, 0.001119f, -0.003932f, 0.008578f, -0.036197f, -0.010347f, 0.002198f, -0.007312f, 0.015001f, -0.027803f, -0.002477f, 0.000179f, 0.010476f, -0.000835f, 0.016266f, 0.010677f, -0.006775f, 0.021928f, 0.011963f, -0.007900f, 0.016652f, 0.017083f, 0.000862f, -0.011396f, 0.009124f, 0.016605f, 0.010933f, -0.002754f, -0.015524f, -0.008151f, 0.004982f, 0.002300f, 0.003348f, 0.026369f, 0.019397f, 0.046537f, -0.014077f, 0.033705f, -0.017839f, -0.007114f, 0.031325f, -0.001055f, 0.042698f, -0.051537f, 0.032289f, 0.005886f, 0.014339f, -0.020733f, 0.015627f, 0.038445f, 0.074759f, -0.017217f, 0.018979f, -0.001057f, -0.049633f, 0.045475f, 0.004581f, 0.017766f, -0.009098f, -0.023247f, -0.008667f, -0.001930f, -0.019295f, -0.012135f, 0.063433f, 0.004400f, 0.024358f, -0.018212f, 0.044935f, 0.000198f, 0.021761f, 0.009166f, -0.026399f, -0.005679f, -0.016320f, 0.000414f, 0.008043f, 0.053121f, 0.026977f, 0.002159f, 0.006206f, - -0.001980f, -0.004536f, 0.008619f, 0.005181f, 0.033210f, 0.026990f, 0.013539f, -0.015999f, 0.023010f, 0.048497f, -0.046095f, 0.042476f, 0.006691f, 0.012639f, -0.046342f, -0.022130f, -0.058199f, -0.047037f, -0.009436f, 0.030996f, 0.025841f, -0.080679f, -0.000816f, -0.036538f, 0.018821f, 0.080019f, 0.040045f, -0.051941f, 0.027964f, -0.021556f, -0.026931f, 0.043919f, 0.022051f, -0.023083f, -0.012996f, 0.038581f, 0.031551f, 0.017061f, 0.049186f, -0.013750f, 0.030020f, 0.026339f, -0.031970f, 0.043804f, 0.011744f, 0.050894f, 0.015230f, -0.005229f, 0.029804f, -0.003625f, 0.007440f, -0.036570f, 0.026679f, -0.018108f, 0.013655f, -0.013623f, 0.005753f, 0.016168f, 0.040399f, 0.010136f, 0.024347f, 0.005680f, 0.007414f, -0.014065f, -0.003578f, -0.005458f, 0.002785f, 0.019846f, 0.016960f, 0.030159f, 0.010823f, -0.004445f, 0.004331f, -0.007992f, -0.004685f, -0.031785f, -0.005848f, 0.006912f, 0.009162f, 0.025789f, 0.023080f, 0.020919f, 0.026131f, -0.067552f, -0.103699f, -0.027198f, -0.011670f, -0.025754f, 0.005769f, 0.034853f, -0.036554f, 0.052644f, 0.019321f, -0.076258f, -0.058386f, -0.011878f, - 0.041629f, 0.001321f, 0.003495f, -0.008149f, -0.024111f, -0.073848f, 0.003041f, -0.062081f, -0.051259f, 0.024932f, 0.019964f, 0.017980f, -0.008654f, -0.024218f, 0.055827f, 0.033236f, -0.023676f, -0.048496f, 0.036866f, 0.018394f, 0.008696f, -0.022948f, -0.056504f, 0.021246f, -0.026517f, 0.008228f, -0.048126f, 0.058263f, 0.001476f, -0.023711f, 0.005737f, 0.014455f, 0.048298f, 0.029893f, -0.012336f, -0.002707f, 0.016936f, 0.016426f, 0.018632f, -0.011298f, -0.075470f, -0.059695f, 0.012046f, -0.008496f, 0.044231f, -0.008807f, -0.018923f, -0.053612f, 0.061926f, 0.023402f, -0.043081f, -0.044850f, 0.063526f, 0.059143f, -0.000579f, 0.043286f, -0.005785f, 0.001131f, -0.017993f, -0.011347f, -0.034051f, 0.041688f, -0.007730f, -0.009942f, -0.018173f, 0.016953f, -0.053604f, 0.024912f, -0.015658f, -0.010503f, 0.038169f, -0.001255f, 0.006082f, 0.009147f, 0.035043f, 0.017458f, -0.014218f, 0.025531f, -0.007690f, 0.030910f, 0.012444f, -0.035664f, 0.008804f, -0.018337f, 0.016768f, -0.014968f, 0.000416f, -0.023852f, -0.011970f, 0.012403f, -0.023112f, 0.009394f, 0.007972f, 0.009663f, -0.020658f, -0.015267f, - -0.026598f, -0.023792f, 0.031105f, -0.011658f, 0.020092f, 0.012174f, -0.019009f, -0.003135f, -0.016623f, 0.000229f, -0.010541f, 0.038853f, 0.033149f, 0.022007f, 0.030963f, -0.008044f, -0.034364f, -0.039797f, -0.005637f, 0.011474f, 0.057268f, 0.034548f, -0.013223f, -0.011135f, -0.015435f, -0.028958f, -0.001769f, 0.012520f, 0.005786f, 0.036378f, 0.003564f, -0.025639f, -0.065873f, 0.103868f, 0.002618f, -0.080343f, -0.006081f, -0.029909f, 0.013587f, 0.039863f, 0.036209f, -0.044699f, -0.071729f, 0.012252f, -0.034331f, 0.010941f, -0.006995f, 0.031626f, -0.010383f, 0.004525f, 0.018789f, -0.029303f, -0.035933f, 0.003797f, 0.009432f, 0.031314f, -0.000718f, -0.050099f, 0.032953f, -0.027942f, 0.025898f, -0.024286f, -0.016534f, -0.002735f, -0.007951f, -0.053861f, 0.010118f, 0.015049f, -0.052076f, 0.022028f, -0.020468f, 0.010433f, -0.017377f, 0.050312f, 0.039175f, -0.050732f, -0.026929f, 0.034650f, 0.043417f, -0.051913f, 0.068532f, 0.004446f, 0.055182f, 0.040095f, 0.065118f, -0.020144f, -0.027639f, 0.014623f, -0.054038f, 0.008253f, 0.006826f, 0.094883f, -0.029420f, -0.089191f, 0.150566f, -0.071141f, - -0.054728f, 0.086809f, 0.039207f, -0.050651f, 0.084346f, 0.009387f, -0.068710f, 0.085443f, 0.010310f, 0.007649f, -0.014942f, 0.012551f, 0.056689f, -0.013873f, -0.019783f, -0.029523f, 0.042202f, -0.015385f, -0.010846f, -0.005944f, -0.017073f, -0.018217f, -0.026513f, 0.025329f, -0.003832f, -0.002388f, -0.009653f, -0.006555f, 0.003132f, -0.011460f, -0.019964f, 0.002502f, -0.016180f, -0.029860f, -0.031135f, 0.038532f, -0.016881f, 0.003544f, 0.035479f, -0.017178f, -0.016464f, 0.002462f, 0.017510f, 0.007550f, 0.007356f, 0.034196f, -0.021327f, 0.004898f, -0.015779f, -0.009787f, -0.007070f, 0.056585f, 0.027896f, -0.009272f, 0.007822f, -0.030092f, 0.009375f, -0.027548f, -0.017328f, 0.013212f, -0.007553f, -0.056790f, 0.034664f, 0.014207f, -0.010851f, -0.093609f, 0.013056f, 0.027918f, -0.070036f, 0.032008f, 0.018688f, -0.024689f, -0.006876f, -0.001316f, -0.017061f, -0.005722f, -0.009936f, -0.031347f, 0.001022f, -0.015666f, -0.003293f, -0.007740f, 0.015390f, 0.055816f, 0.046930f, -0.043153f, -0.004597f, 0.058751f, -0.010131f, -0.011069f, -0.059963f, 0.006929f, 0.019920f, -0.009851f, 0.051428f, 0.122845f, - -0.041141f, -0.051777f, 0.087657f, -0.005835f, -0.046969f, 0.054591f, 0.036132f, -0.028297f, -0.042165f, -0.052343f, 0.016175f, 0.028118f, -0.023115f, 0.082450f, 0.053989f, -0.102762f, -0.098427f, 0.057556f, -0.046205f, -0.060082f, 0.078228f, 0.012606f, 0.104647f, 0.050169f, -0.012426f, -0.013986f, -0.075096f, -0.058687f, 0.171745f, 0.047417f, -0.036543f, -0.082923f, 0.002569f, -0.033744f, -0.073862f, -0.011481f, 0.087101f, 0.037012f, 0.001376f, 0.071556f, 0.062762f, -0.019726f, -0.079298f, 0.012423f, 0.048000f, -0.019673f, -0.018315f, 0.099699f, 0.057577f, 0.009989f, -0.010155f, -0.051128f, -0.049895f, -0.012870f, 0.047754f, 0.019215f, -0.018935f, -0.009036f, -0.021958f, 0.018757f, -0.013989f, -0.019094f, -0.012021f, -0.002276f, 0.014618f, 0.019276f, 0.017393f, 0.007230f, -0.045180f, -0.015823f, -0.008523f, 0.017295f, -0.017301f, 0.003252f, -0.004283f, 0.042007f, -0.026593f, -0.018695f, 0.043737f, 0.012197f, -0.021417f, 0.034218f, -0.011397f, 0.010087f, 0.003209f, 0.007894f, -0.025595f, -0.006933f, 0.036155f, 0.035018f, 0.015055f, -0.013699f, 0.009917f, -0.015745f, -0.012184f, -0.009628f, - 0.019317f, -0.029077f, -0.005500f, 0.023353f, 0.093124f, 0.077307f, -0.020572f, 0.054907f, 0.005831f, -0.042831f, 0.027513f, 0.046885f, 0.015863f, 0.020213f, -0.061390f, -0.012644f, 0.007383f, 0.012343f, -0.008892f, -0.053640f, -0.019107f, 0.019190f, -0.012858f, -0.005805f, -0.045108f, 0.069405f, 0.008890f, -0.057487f, 0.032683f, 0.081501f, -0.041933f, -0.024681f, 0.012142f, 0.026786f, -0.026127f, -0.051547f, 0.044297f, 0.074095f, -0.005739f, -0.029351f, 0.009857f, 0.020861f, 0.034039f, 0.047402f, 0.003352f, 0.086419f, -0.001714f, -0.096606f, 0.000979f, -0.011035f, 0.031684f, -0.010273f, -0.078509f, -0.002360f, -0.033775f, -0.033397f, 0.047503f, 0.024666f, 0.027198f, 0.033770f, -0.070330f, -0.037097f, -0.012151f, -0.001129f, 0.028741f, 0.000810f, -0.014180f, 0.001800f, -0.023912f, -0.048285f, 0.004917f, 0.074620f, -0.038205f, 0.006940f, -0.029631f, -0.021582f, 0.051416f, -0.063109f, -0.000442f, 0.027461f, -0.021994f, 0.010137f, 0.008113f, 0.015471f, 0.018401f, -0.033429f, -0.039546f, 0.066779f, -0.013656f, -0.021928f, 0.034773f, -0.034579f, 0.021807f, 0.004101f, -0.013859f, 0.010339f, - 0.029261f, -0.005725f, 0.004192f, -0.014507f, 0.007248f, 0.001584f, -0.001647f, -0.012985f, 0.016117f, 0.007690f, -0.001311f, -0.001597f, 0.013567f, 0.010797f, -0.012082f, -0.022533f, 0.012469f, -0.001607f, 0.006491f, 0.001025f, -0.005491f, 0.011215f, 0.000611f, 0.009252f, -0.003401f, -0.002098f, -0.006183f, 0.001514f, 0.011058f, -0.002713f, 0.027135f, -0.011210f, -0.007842f, 0.000907f, -0.011388f, 0.007128f, -0.080510f, -0.115491f, -0.102131f, 0.205442f, 0.196113f, 0.195720f, 0.552552f, 0.196311f, -0.022749f, 0.036365f, -0.382052f, -0.465382f, -0.156345f, -0.261137f, -0.361876f, 0.046536f, -0.020068f, -0.060560f, 0.398572f, 0.243270f, 0.101645f, 0.622390f, 0.293871f, 0.054328f, 0.283814f, -0.067307f, -0.338580f, -0.324287f, -0.308900f, -0.428151f, -0.419142f, -0.098448f, -0.151255f, -0.246826f, 0.288292f, 0.132728f, -0.103721f, 0.416231f, 0.134534f, -0.048883f, 0.470713f, 0.428781f, 0.098871f, 0.444966f, 0.451598f, -0.017320f, 0.112226f, 0.051110f, -0.434426f, -0.504439f, -0.375560f, -0.710138f, -0.672402f, -0.403909f, -0.539308f, -0.405788f, 0.046121f, 0.333618f, 0.378714f, 0.813520f, - 0.739799f, 0.652238f, 0.702877f, 0.518345f, 0.263329f, 0.080382f, -0.056853f, -0.395940f, -0.477217f, -0.511002f, -0.575758f, -0.546403f, -0.465616f, -0.300983f, -0.218504f, -0.213814f, 0.041031f, 0.129659f, 0.254777f, 0.605463f, 0.628945f, 0.429950f, 0.537557f, 0.227234f, -0.073977f, -0.177895f, -0.275398f, -0.377711f, -0.273357f, -0.182919f, -0.181871f, -0.062742f, -0.016884f, 0.001562f, 0.097170f, 0.123163f, 0.117576f, 0.179756f, 0.113433f, 0.073254f, 0.090937f, -0.053543f, -0.049283f, 0.015322f, -0.145408f, -0.103061f, -0.037662f, -0.140699f, -0.086613f, -0.009700f, -0.141355f, -0.149580f, -0.099028f, -0.146771f, -0.096043f, 0.110666f, 0.207056f, 0.328873f, 0.485363f, 0.452733f, 0.387790f, 0.364282f, 0.197378f, -0.060051f, -0.302543f, -0.536194f, -0.636418f, -0.574216f, -0.464536f, -0.350892f, -0.164195f, 0.052837f, 0.208811f, 0.292450f, 0.315993f, 0.278708f, 0.249180f, 0.231517f, 0.233790f, 0.162606f, 0.077700f, 0.036015f, -0.019143f, -0.065578f, -0.058700f, -0.106877f, -0.114473f, -0.080750f, -0.059453f, -0.079311f, -0.075018f, -0.096653f, -0.108201f, -0.100722f, -0.068209f, -0.032261f, - 0.013400f, 0.020041f, 0.014214f, 0.000959f} - }, - { - {-0.006839f, 0.025744f, 0.013624f, 0.011354f, 0.006323f, -0.002728f, -0.000811f, -0.002637f, -0.005362f, -0.007433f, -0.005263f, -0.007596f, -0.003214f, 0.007232f, 0.002463f, -0.000378f, -0.000010f, 0.004741f, 0.002204f, -0.003000f, -0.003231f, -0.002432f, -0.013423f, 0.005563f, 0.001405f, 0.000130f, -0.002771f, 0.001742f, 0.000235f, -0.003710f, 0.001935f, 0.004912f, -0.000021f, -0.006129f, -0.001562f, -0.002650f, -0.002854f, 0.000755f, 0.005904f, -0.001530f, 0.001393f, -0.007017f, 0.004503f, -0.008670f, 0.005523f, 0.001223f, 0.000326f, 0.000066f, 0.005494f, -0.006656f, -0.004943f, -0.009071f, 0.002404f, 0.001629f, 0.000443f, 0.005175f, -0.005599f, 0.001206f, -0.000771f, 0.000147f, -0.004086f, 0.003590f, 0.001634f, -0.003011f, 0.005583f, -0.008921f, 0.004077f, -0.004871f, 0.009077f, 0.004134f, 0.001587f, 0.000644f, -0.001830f, -0.011131f, 0.008461f, -0.002677f, -0.000294f, 0.001447f, 0.002349f, 0.002013f, 0.002222f, 0.002672f, -0.000831f, 0.000770f, -0.001262f, 0.002607f, -0.000218f, 0.001478f, -0.003402f, 0.001136f, -0.000558f, 0.000721f, 0.001318f, 0.003608f, -0.000238f, -0.000636f, - 0.001192f, 0.001416f, -0.001504f, 0.001855f, -0.002253f, 0.001810f, 0.000351f, 0.001609f, 0.000083f, 0.001031f, -0.000621f, 0.000393f, 0.001377f, 0.000680f, -0.000285f, 0.001058f, -0.000287f, 0.024601f, 0.011721f, 0.016061f, 0.004401f, 0.005463f, -0.000932f, 0.006285f, 0.000661f, 0.005586f, -0.004117f, 0.010891f, -0.002762f, -0.012447f, -0.003410f, 0.000253f, 0.000686f, -0.003954f, 0.009547f, 0.000525f, 0.003731f, 0.009220f, 0.004518f, 0.000102f, -0.000009f, 0.002194f, -0.008410f, -0.005570f, 0.003348f, 0.004009f, -0.003057f, 0.000874f, 0.004119f, -0.008352f, 0.011774f, -0.001214f, 0.001739f, -0.001874f, 0.004375f, 0.006065f, 0.000309f, -0.006389f, -0.006506f, 0.012761f, 0.000289f, -0.003740f, -0.000537f, 0.007346f, 0.005441f, -0.003809f, -0.005122f, -0.011273f, -0.003494f, -0.004631f, 0.000471f, -0.004184f, 0.001008f, -0.010954f, -0.004470f, 0.001257f, -0.004459f, 0.002396f, 0.004414f, -0.002231f, -0.000294f, 0.002059f, -0.002780f, 0.004295f, -0.000316f, 0.005407f, 0.000067f, -0.001879f, -0.006296f, 0.000699f, -0.007809f, 0.002442f, 0.000143f, 0.004407f, 0.000080f, 0.004526f, - 0.005851f, 0.004970f, 0.000190f, -0.003253f, -0.000247f, -0.001200f, 0.006458f, -0.001757f, 0.000828f, 0.004114f, 0.004320f, -0.000318f, 0.002436f, 0.000855f, 0.002226f, -0.000928f, 0.002695f, -0.001038f, 0.003973f, 0.000893f, 0.000760f, -0.000345f, 0.000356f, 0.000386f, 0.005203f, -0.016608f, -0.005352f, -0.003798f, 0.002897f, 0.003254f, -0.011338f, -0.005111f, -0.002240f, 0.002699f, 0.006042f, 0.001875f, 0.008281f, -0.006851f, -0.009858f, 0.002834f, 0.000346f, -0.001796f, -0.006748f, 0.021902f, -0.001131f, 0.005809f, 0.001322f, 0.000659f, -0.000480f, -0.003403f, -0.008323f, -0.006568f, -0.002035f, 0.005578f, -0.004643f, 0.011456f, -0.003873f, -0.001095f, -0.009395f, -0.011223f, -0.000950f, -0.007167f, -0.003957f, 0.015247f, -0.008332f, -0.002338f, -0.008088f, 0.002946f, 0.000403f, -0.002963f, -0.008499f, -0.001647f, 0.000089f, -0.009691f, 0.001159f, -0.005227f, 0.007753f, 0.005062f, -0.004432f, -0.002393f, -0.002440f, 0.002346f, -0.000401f, 0.006119f, -0.003155f, -0.004060f, -0.004122f, 0.013903f, 0.012600f, -0.004340f, -0.012089f, 0.001619f, 0.003774f, -0.000412f, 0.003587f, -0.005055f, - 0.001019f, -0.005859f, 0.004194f, 0.000295f, 0.013403f, 0.008222f, 0.012745f, -0.011601f, 0.005045f, 0.007724f, 0.000331f, 0.005855f, 0.004271f, 0.000851f, 0.008782f, -0.001634f, -0.000893f, 0.002215f, 0.001254f, -0.003619f, 0.003529f, -0.002779f, -0.002317f, -0.000274f, 0.000932f, -0.000420f, 0.001370f, -0.002084f, 0.001070f, -0.000291f, 0.000320f, 0.001105f, 0.001658f, 0.000739f, 0.001915f, 0.001719f, -0.001282f, -0.001793f, 0.001439f, 0.000480f, -0.003091f, -0.001317f, 0.002587f, -0.001575f, -0.054568f, -0.008837f, -0.015724f, -0.017840f, 0.004801f, -0.006038f, -0.015511f, -0.012858f, 0.002159f, -0.012667f, 0.001806f, 0.018889f, -0.004687f, 0.008109f, 0.006154f, 0.015928f, 0.004151f, -0.011092f, 0.002557f, 0.017313f, -0.008066f, 0.008621f, -0.012756f, -0.011638f, 0.003837f, 0.004970f, 0.013627f, 0.000804f, -0.008321f, 0.007905f, -0.005573f, 0.006068f, -0.000674f, 0.008592f, -0.007248f, -0.004716f, -0.008087f, 0.000113f, 0.001513f, -0.003174f, 0.006278f, -0.014323f, 0.001887f, 0.014462f, 0.003175f, -0.004090f, 0.005613f, -0.007381f, -0.003698f, -0.018084f, -0.005310f, -0.000591f, - 0.002885f, 0.000316f, 0.009777f, -0.014517f, 0.001469f, -0.001983f, 0.007378f, 0.003925f, -0.002748f, 0.010362f, -0.009015f, -0.001210f, -0.007220f, -0.013948f, -0.005813f, -0.003199f, -0.003876f, 0.010512f, -0.009328f, -0.015069f, 0.000671f, 0.004955f, -0.001433f, -0.004336f, 0.005268f, 0.005782f, -0.004136f, -0.003387f, -0.005778f, -0.002404f, 0.012228f, -0.005620f, 0.006785f, -0.001987f, -0.000117f, -0.001098f, -0.000311f, -0.006271f, 0.001641f, -0.003746f, -0.000078f, -0.000425f, -0.000801f, 0.000171f, -0.001340f, -0.001948f, -0.001821f, -0.000507f, 0.000729f, -0.001192f, 0.002134f, 0.000922f, -0.027104f, 0.015445f, 0.017498f, -0.000989f, 0.009841f, 0.004413f, 0.020662f, 0.027359f, 0.003571f, 0.003547f, 0.007915f, 0.003366f, 0.004609f, -0.003933f, 0.005476f, -0.004555f, 0.007255f, 0.008346f, -0.023420f, 0.012127f, -0.002522f, -0.004389f, -0.007211f, -0.009545f, 0.003888f, 0.006633f, 0.010736f, 0.002048f, 0.001867f, -0.013746f, 0.000646f, -0.004040f, -0.004533f, -0.002070f, 0.001876f, 0.000751f, -0.001007f, 0.013435f, -0.000661f, -0.004513f, 0.004491f, -0.005278f, 0.006944f, 0.009063f, - 0.010220f, 0.005250f, 0.001152f, -0.005713f, 0.011409f, 0.003570f, 0.001564f, 0.001146f, 0.001529f, 0.000775f, -0.006552f, -0.009319f, 0.008448f, -0.008691f, 0.008093f, 0.007312f, 0.005432f, -0.001246f, -0.006083f, 0.005458f, 0.007189f, 0.015840f, 0.007360f, 0.005943f, 0.003745f, -0.015608f, -0.004765f, 0.001849f, -0.002525f, 0.006628f, -0.013454f, 0.000612f, 0.004462f, -0.012668f, -0.001176f, 0.004158f, -0.003046f, 0.001544f, -0.007381f, 0.002715f, 0.000952f, -0.003227f, 0.005811f, 0.003342f, 0.000229f, 0.006295f, -0.002891f, -0.002888f, -0.000648f, 0.001244f, 0.002595f, 0.009579f, 0.001566f, 0.003216f, 0.002264f, -0.000170f, 0.002092f, -0.001675f, -0.001854f, -0.002680f, 0.001681f, -0.001513f, -0.001262f, 0.001001f, 0.000998f, -0.001271f, 0.003245f, -0.002007f, 0.002257f, 0.002020f, -0.001000f, 0.003081f, 0.000874f, 0.001258f, 0.001540f, 0.000117f, 0.000294f, 0.003591f, -0.000318f, 0.050347f, 0.015185f, 0.003722f, 0.009851f, 0.025168f, 0.010145f, 0.030348f, 0.007437f, -0.006697f, -0.002176f, -0.002548f, -0.002896f, 0.008233f, 0.013009f, -0.006048f, 0.002795f, 0.009064f, - -0.003370f, -0.012619f, 0.010025f, -0.001192f, 0.004767f, -0.004302f, -0.006330f, 0.010309f, 0.002407f, -0.000953f, -0.002933f, -0.011498f, -0.005682f, 0.006218f, 0.001564f, -0.003960f, -0.002013f, 0.001734f, 0.004330f, 0.011555f, 0.003658f, -0.010663f, -0.002441f, 0.000681f, -0.003343f, 0.003826f, 0.005487f, -0.010747f, -0.012959f, -0.000762f, 0.003258f, -0.001385f, 0.010026f, -0.018492f, -0.003916f, -0.008394f, -0.010392f, -0.001153f, -0.000794f, 0.002719f, 0.009910f, -0.000110f, 0.001501f, 0.003186f, -0.001589f, 0.013187f, 0.008436f, -0.010851f, -0.009495f, 0.007221f, 0.016003f, -0.001399f, -0.007470f, 0.015756f, 0.008353f, 0.003638f, -0.006923f, -0.007542f, 0.007808f, 0.000383f, 0.005909f, -0.003592f, -0.011443f, -0.006337f, -0.007785f, -0.004965f, 0.004536f, -0.006414f, 0.000891f, 0.002705f, -0.002287f, 0.002622f, 0.001936f, 0.002228f, 0.001338f, -0.004162f, 0.002304f, -0.001336f, -0.002168f, -0.001036f, 0.003093f, 0.002380f, 0.000419f, -0.003584f, 0.003166f, -0.001441f, 0.005460f, -0.000895f, 0.000759f, -0.005238f, -0.006677f, 0.002183f, -0.006285f, -0.001268f, -0.000965f, -0.003605f, - -0.001704f, 0.000717f, -0.005643f, -0.002407f, -0.000572f, 0.000573f, -0.001178f, 0.003922f, 0.000564f, -0.001564f, 0.024705f, 0.012002f, 0.022245f, -0.007505f, 0.000178f, -0.005658f, 0.022411f, -0.023059f, -0.003280f, 0.005906f, -0.004423f, -0.004567f, 0.007499f, -0.002592f, -0.007115f, 0.019666f, 0.011109f, 0.002265f, 0.033221f, -0.009081f, -0.002220f, -0.007035f, 0.000245f, 0.005487f, -0.008586f, -0.001105f, -0.004461f, 0.012680f, -0.010732f, 0.002853f, 0.000736f, -0.003371f, 0.001147f, 0.007453f, 0.005072f, -0.010091f, -0.017608f, 0.000413f, 0.003611f, 0.014569f, 0.017089f, 0.017018f, 0.001541f, -0.009815f, 0.012235f, -0.029707f, -0.004899f, -0.011669f, -0.017300f, 0.012092f, -0.003989f, -0.005602f, 0.009418f, -0.003426f, -0.005076f, 0.025919f, 0.000297f, -0.007652f, 0.009016f, 0.000694f, 0.006858f, 0.005059f, 0.003369f, 0.015702f, -0.009428f, -0.005779f, 0.000910f, -0.013485f, -0.000121f, 0.002549f, -0.003435f, 0.004623f, 0.007749f, 0.016511f, -0.006244f, 0.005505f, 0.014248f, 0.008660f, 0.004211f, 0.002693f, -0.004930f, -0.010426f, 0.005318f, 0.007955f, -0.001753f, 0.000798f, - -0.001669f, -0.001331f, -0.005957f, 0.001165f, -0.001841f, 0.001021f, -0.005566f, -0.002791f, -0.000005f, -0.000970f, 0.005113f, 0.002237f, -0.000005f, -0.007139f, -0.003265f, 0.003549f, -0.004196f, -0.000072f, 0.002721f, 0.002805f, -0.004855f, 0.004490f, 0.003466f, 0.001155f, 0.004589f, 0.004170f, -0.008309f, -0.001471f, -0.003224f, 0.002249f, 0.004433f, 0.005462f, -0.001189f, -0.003041f, 0.000661f, -0.001651f, -0.038519f, -0.057906f, -0.009755f, 0.002858f, -0.000998f, 0.001590f, -0.002703f, -0.011622f, -0.006536f, -0.009266f, -0.002484f, 0.009403f, 0.011237f, -0.010205f, -0.015030f, 0.012850f, 0.002671f, -0.008264f, 0.000679f, -0.001378f, -0.009162f, -0.007698f, 0.021365f, 0.010867f, -0.011474f, 0.005832f, 0.002425f, 0.009136f, -0.011131f, 0.012400f, -0.012381f, 0.008523f, 0.005580f, -0.002622f, -0.005770f, 0.005506f, -0.023091f, -0.011464f, 0.014163f, 0.022794f, 0.012661f, -0.015950f, 0.000386f, -0.011309f, 0.015167f, 0.003138f, 0.003943f, 0.001081f, -0.012477f, 0.006069f, 0.018555f, 0.002100f, 0.014032f, 0.009932f, 0.006435f, 0.010730f, 0.022760f, -0.006304f, -0.022884f, 0.011111f, - 0.000081f, -0.005415f, 0.001184f, 0.019695f, -0.008024f, -0.013672f, 0.006730f, -0.003613f, -0.002311f, -0.005169f, -0.003055f, -0.006146f, -0.010683f, -0.005370f, 0.013223f, -0.017979f, -0.011264f, -0.006624f, -0.012896f, -0.012560f, -0.000723f, 0.007822f, -0.011819f, -0.000201f, -0.004350f, -0.004990f, -0.010642f, -0.006736f, -0.012224f, -0.000641f, -0.009386f, -0.000714f, -0.000186f, 0.008639f, 0.006185f, -0.004354f, -0.004617f, -0.006248f, -0.001832f, -0.004414f, -0.004166f, 0.005248f, -0.008281f, 0.003181f, 0.000810f, -0.005296f, 0.000672f, -0.003457f, 0.002116f, -0.001777f, -0.006734f, -0.008339f, 0.000034f, 0.002225f, 0.003589f, -0.001559f, 0.001596f, 0.002673f, 0.000128f, -0.004339f, -0.000459f, -0.005566f, 0.000725f, 0.002629f, 0.002561f, -0.022271f, -0.014511f, 0.003764f, 0.003568f, 0.029698f, -0.025958f, -0.017759f, -0.010024f, -0.004905f, -0.003217f, 0.009608f, 0.009284f, -0.013741f, 0.014129f, -0.003269f, 0.006409f, -0.009895f, 0.021062f, -0.004089f, -0.007928f, 0.013618f, 0.009824f, 0.007925f, -0.014315f, -0.013467f, 0.017831f, -0.009328f, 0.005268f, 0.004364f, -0.006449f, 0.015156f, - 0.004621f, -0.000009f, 0.003381f, 0.011127f, 0.014288f, 0.004404f, -0.012674f, 0.002959f, -0.018092f, 0.010813f, 0.004743f, -0.020271f, 0.014399f, 0.003351f, -0.010521f, 0.018576f, 0.005933f, -0.005026f, 0.010860f, -0.001677f, 0.020539f, -0.004685f, -0.005103f, -0.004343f, -0.002652f, 0.026688f, 0.005671f, 0.000462f, 0.007299f, -0.022419f, -0.013967f, -0.015234f, 0.001712f, 0.014200f, 0.001934f, 0.017611f, -0.022714f, -0.009359f, -0.014395f, -0.013385f, 0.033260f, -0.003380f, 0.011919f, 0.008514f, -0.007068f, -0.001667f, -0.004566f, 0.002514f, 0.001813f, 0.009065f, 0.005594f, 0.018158f, -0.009726f, 0.001505f, -0.003037f, 0.003943f, -0.000058f, -0.000360f, 0.000014f, -0.003878f, -0.017075f, 0.006378f, 0.004072f, 0.002536f, -0.004482f, -0.001622f, -0.002129f, -0.009578f, -0.000536f, -0.003436f, -0.006146f, 0.003472f, -0.005174f, 0.002226f, 0.003140f, 0.002395f, 0.004008f, -0.006673f, -0.003545f, -0.004527f, -0.004018f, 0.002375f, 0.004845f, 0.002779f, -0.001490f, -0.000920f, -0.001098f, -0.002094f, 0.007008f, -0.002401f, 0.005016f, 0.003059f, -0.001787f, 0.002059f, -0.001272f, -0.000021f, - 0.001825f, 0.001830f, -0.030054f, 0.009371f, -0.012898f, 0.007301f, -0.009016f, 0.024274f, 0.004114f, -0.017045f, 0.002698f, -0.017376f, 0.014102f, 0.026833f, -0.022878f, 0.015104f, 0.005622f, -0.000694f, 0.011095f, 0.028604f, -0.010923f, -0.000051f, 0.008779f, -0.031276f, 0.001858f, 0.014198f, -0.008662f, 0.010172f, 0.011126f, -0.005722f, 0.028078f, -0.013999f, -0.025343f, -0.010931f, 0.003087f, 0.000662f, -0.005161f, -0.010956f, 0.007680f, 0.007068f, 0.000046f, -0.017879f, -0.004158f, -0.004539f, 0.011974f, -0.007836f, 0.047077f, -0.005926f, 0.006773f, -0.002173f, -0.001960f, -0.022832f, 0.002384f, 0.016921f, 0.013736f, 0.045873f, -0.004891f, -0.004446f, -0.009459f, -0.001813f, -0.012872f, -0.000981f, 0.018442f, -0.009797f, -0.001857f, 0.003331f, 0.004386f, 0.018087f, 0.014764f, 0.004163f, 0.035562f, -0.006717f, -0.032847f, -0.032929f, -0.023177f, -0.004781f, 0.010438f, -0.003245f, -0.008597f, 0.015672f, -0.000905f, 0.013917f, -0.008526f, -0.001626f, 0.011349f, 0.009592f, -0.003433f, -0.003359f, 0.001205f, 0.002942f, -0.003603f, -0.007684f, -0.011001f, -0.003721f, -0.004644f, -0.001387f, - -0.007827f, 0.005899f, -0.002315f, 0.001778f, -0.003936f, -0.005660f, 0.007649f, 0.003412f, -0.003823f, -0.001042f, -0.003123f, -0.003374f, 0.003370f, -0.002098f, -0.003703f, -0.007474f, 0.005969f, 0.002352f, -0.003155f, -0.005658f, -0.007476f, -0.001401f, -0.005121f, -0.005225f, 0.006422f, -0.003754f, 0.001327f, 0.000271f, -0.002679f, 0.002747f, 0.001307f, -0.001018f, -0.001339f, -0.001653f, 0.053509f, -0.038564f, -0.029254f, -0.009360f, -0.018484f, -0.021140f, 0.025957f, 0.010531f, 0.005206f, -0.008156f, -0.005175f, 0.031495f, -0.009137f, -0.013232f, -0.037662f, -0.005433f, -0.000906f, 0.017795f, 0.006589f, -0.007642f, 0.002349f, 0.015606f, 0.007079f, 0.009767f, 0.024148f, 0.030298f, 0.008425f, -0.011263f, 0.007825f, -0.018168f, 0.012491f, 0.010231f, -0.006484f, 0.000630f, -0.014070f, 0.005706f, 0.000396f, -0.027302f, 0.026635f, -0.002383f, -0.012379f, 0.016442f, -0.025261f, -0.005836f, 0.027811f, 0.015866f, -0.000348f, 0.001046f, -0.035002f, 0.012292f, 0.019561f, 0.011162f, 0.006500f, -0.001915f, -0.025837f, -0.075924f, -0.006059f, 0.015478f, 0.021335f, -0.001949f, -0.022271f, 0.037509f, - -0.017378f, 0.017119f, 0.028395f, 0.023399f, 0.004349f, 0.028306f, 0.003217f, 0.010088f, 0.005987f, 0.017176f, 0.003374f, 0.005448f, 0.036051f, -0.012097f, -0.007883f, 0.030480f, 0.015887f, 0.008258f, -0.012606f, 0.003050f, 0.024789f, -0.002709f, 0.019859f, 0.004548f, 0.004313f, 0.012491f, -0.006752f, -0.000638f, 0.001304f, -0.001338f, -0.005639f, 0.009721f, 0.004497f, -0.013604f, 0.007414f, 0.005026f, 0.007134f, 0.003493f, -0.003947f, -0.000065f, -0.004379f, -0.005027f, 0.005945f, 0.007575f, 0.003113f, 0.004559f, -0.004118f, -0.004020f, -0.002770f, -0.004932f, -0.006468f, -0.009649f, 0.001304f, -0.006230f, 0.004457f, -0.002358f, 0.002540f, -0.008942f, -0.005939f, -0.001987f, -0.003026f, -0.002754f, -0.004174f, 0.000995f, 0.008335f, 0.008709f, 0.003158f, 0.000541f, -0.005143f, 0.006834f, 0.026733f, 0.025427f, -0.006727f, -0.013034f, -0.002535f, -0.007692f, 0.029250f, 0.019013f, -0.051086f, -0.005605f, 0.004090f, -0.023964f, 0.009425f, -0.034954f, 0.026465f, 0.006419f, -0.004213f, 0.014499f, 0.007106f, -0.007361f, -0.011853f, -0.008581f, 0.037390f, 0.001495f, -0.000421f, 0.008287f, - -0.005214f, 0.015020f, 0.044059f, 0.018000f, -0.006605f, -0.007817f, -0.006650f, 0.025596f, 0.008938f, 0.025917f, 0.017764f, 0.012930f, 0.007292f, -0.011294f, -0.012604f, 0.011560f, -0.026434f, 0.004483f, -0.014138f, -0.011660f, 0.000687f, 0.018122f, 0.002331f, 0.001458f, 0.006280f, -0.005702f, 0.030099f, 0.039329f, 0.044776f, -0.000212f, 0.020307f, -0.026715f, 0.010079f, 0.015482f, -0.012497f, 0.022902f, -0.018574f, -0.036589f, 0.004604f, -0.019172f, -0.003133f, 0.001733f, -0.019712f, 0.004901f, 0.026324f, -0.016144f, -0.016044f, 0.013412f, 0.024358f, -0.001080f, -0.009351f, 0.022678f, 0.001725f, 0.005099f, -0.015861f, -0.003188f, -0.001369f, 0.018730f, -0.009791f, 0.001558f, -0.004704f, 0.004142f, -0.000679f, 0.003672f, 0.004417f, 0.003379f, -0.000304f, 0.001901f, 0.003737f, 0.005322f, -0.004614f, -0.008411f, -0.001886f, -0.001199f, -0.008238f, -0.009528f, -0.001117f, -0.004339f, 0.006478f, -0.006412f, 0.004817f, 0.009163f, -0.001057f, -0.014907f, -0.002055f, 0.003052f, -0.005802f, -0.006965f, 0.000484f, 0.004295f, 0.022811f, 0.007933f, 0.006618f, -0.000575f, -0.000062f, -0.001864f, - 0.006206f, -0.001507f, 0.006636f, 0.019768f, 0.017206f, -0.002127f, -0.001715f, -0.003166f, 0.000203f, -0.031863f, 0.057983f, 0.003621f, 0.015106f, 0.044263f, -0.016333f, 0.004488f, -0.008412f, 0.011643f, -0.012734f, 0.012747f, -0.031140f, -0.037012f, -0.001088f, -0.021934f, -0.001633f, -0.002078f, -0.002440f, -0.006280f, 0.002410f, -0.010283f, 0.009284f, -0.029423f, -0.011705f, -0.039682f, -0.001959f, 0.009074f, 0.019067f, 0.042809f, 0.023796f, 0.007388f, 0.005518f, 0.012285f, 0.009546f, 0.007216f, 0.017352f, 0.018122f, -0.005701f, -0.036240f, -0.035865f, -0.024640f, -0.014662f, 0.003595f, 0.012173f, -0.013276f, -0.020994f, -0.036759f, 0.001129f, -0.014042f, 0.033616f, -0.014959f, 0.008501f, -0.025505f, -0.012235f, -0.004466f, -0.010413f, -0.049285f, -0.051277f, 0.014094f, 0.005334f, 0.001345f, 0.026412f, 0.015042f, 0.021219f, 0.017053f, -0.031910f, -0.006942f, 0.060101f, -0.011094f, -0.022618f, 0.008848f, -0.013120f, 0.006161f, -0.036954f, 0.015041f, -0.016902f, 0.002566f, -0.002343f, 0.024392f, 0.001540f, 0.009811f, -0.020977f, 0.004046f, -0.011783f, -0.005300f, -0.014354f, -0.010887f, - 0.007665f, 0.008536f, -0.019160f, -0.006401f, 0.001509f, 0.003717f, 0.004910f, 0.002629f, -0.007353f, 0.008519f, 0.003601f, 0.002994f, -0.000877f, -0.000432f, 0.002780f, 0.008652f, -0.009034f, 0.008748f, -0.002156f, -0.000159f, -0.003125f, 0.005625f, -0.005250f, -0.002993f, 0.007729f, -0.014119f, -0.000143f, 0.002971f, -0.008552f, -0.002802f, -0.019879f, 0.014615f, 0.017163f, -0.000939f, 0.004176f, 0.004758f, 0.005965f, -0.008686f, 0.009649f, 0.006318f, 0.007574f, -0.006232f, 0.004222f, 0.006000f, 0.008776f, 0.034399f, 0.026207f, 0.003416f, 0.027845f, -0.005214f, -0.011320f, 0.015237f, -0.021183f, -0.041492f, -0.061958f, 0.005194f, 0.001378f, 0.023972f, 0.017586f, -0.023118f, -0.011764f, -0.060585f, -0.004003f, -0.028219f, 0.006649f, -0.014204f, -0.006714f, -0.011662f, -0.004429f, -0.004726f, -0.020982f, -0.009472f, -0.024464f, 0.019561f, -0.004867f, 0.016739f, 0.043460f, -0.022928f, 0.012543f, -0.003565f, -0.010725f, 0.011180f, -0.023174f, -0.039498f, 0.019005f, 0.009276f, 0.018902f, 0.011795f, -0.082691f, -0.037558f, 0.011063f, -0.027541f, -0.002302f, -0.023531f, 0.034654f, 0.041703f, - -0.002017f, 0.046098f, 0.006528f, 0.020940f, -0.006066f, -0.001527f, -0.025766f, 0.016331f, 0.033345f, 0.007221f, 0.055510f, 0.001311f, 0.007654f, -0.016296f, -0.024382f, 0.032847f, 0.052091f, 0.018179f, 0.010124f, 0.005132f, 0.019705f, 0.001700f, 0.003773f, -0.048741f, -0.035743f, -0.003702f, 0.002605f, 0.006460f, 0.036654f, 0.039414f, -0.007255f, 0.002589f, -0.013527f, 0.008207f, -0.025242f, 0.000646f, -0.026714f, -0.022634f, 0.011687f, -0.000660f, 0.002943f, -0.015027f, 0.009647f, 0.011799f, 0.007937f, 0.011949f, 0.014111f, 0.001224f, -0.008010f, 0.006191f, -0.010942f, -0.002671f, -0.006753f, -0.016037f, -0.004607f, -0.008871f, -0.007142f, 0.013309f, 0.007350f, -0.004743f, -0.010547f, -0.015883f, -0.010403f, 0.010718f, -0.010557f, -0.001044f, 0.000848f, 0.007336f, -0.014989f, -0.011970f, 0.005308f, 0.018611f, 0.011860f, 0.004790f, -0.000030f, -0.011195f, -0.001371f, -0.006806f, -0.012980f, 0.022166f, -0.032445f, -0.015987f, -0.060619f, -0.075537f, -0.056012f, -0.025572f, 0.017130f, -0.000484f, -0.013285f, -0.027591f, 0.000060f, 0.049862f, 0.024415f, -0.043594f, -0.007174f, -0.009001f, - -0.030812f, -0.005481f, 0.002282f, 0.021003f, 0.015464f, -0.032515f, 0.023386f, -0.018360f, 0.009933f, -0.017101f, 0.005195f, -0.024903f, -0.009307f, 0.012372f, -0.045024f, -0.008581f, -0.016969f, 0.014821f, -0.011199f, -0.041577f, 0.048963f, 0.047240f, 0.000652f, -0.019034f, 0.026678f, -0.063725f, -0.019967f, 0.019040f, -0.021447f, -0.013501f, -0.001636f, -0.020560f, 0.004097f, -0.005254f, -0.042738f, 0.018404f, -0.005437f, -0.013080f, -0.014614f, -0.011228f, -0.002665f, -0.011640f, -0.018115f, 0.035540f, -0.016878f, -0.016696f, 0.016883f, -0.000376f, 0.058219f, -0.011571f, -0.036074f, 0.020716f, -0.018834f, -0.015926f, -0.028142f, 0.019611f, 0.035911f, -0.069954f, 0.005509f, 0.059221f, -0.009608f, -0.003568f, -0.023382f, 0.040409f, -0.002841f, -0.021808f, -0.002906f, -0.020465f, -0.016504f, 0.029311f, -0.017531f, -0.001363f, -0.009726f, -0.012092f, -0.020486f, 0.008786f, 0.006863f, 0.010803f, -0.002434f, -0.016400f, -0.011326f, 0.000727f, 0.002909f, -0.025036f, -0.007204f, -0.016057f, 0.025050f, -0.008236f, 0.001798f, 0.003701f, 0.003109f, 0.002800f, -0.020349f, 0.013886f, 0.000698f, -0.007629f, - 0.018278f, 0.002980f, 0.023913f, -0.004080f, 0.027629f, 0.006565f, 0.011161f, 0.013689f, -0.017863f, -0.011620f, 0.008747f, -0.014531f, -0.011462f, 0.004549f, 0.000084f, -0.010151f, -0.024147f, 0.012004f, -0.047802f, 0.095496f, 0.068115f, -0.001296f, -0.018206f, 0.015160f, -0.057249f, 0.000962f, 0.071273f, -0.012549f, -0.024759f, 0.001186f, 0.080783f, -0.011542f, 0.017754f, -0.017152f, -0.036498f, -0.029508f, -0.007439f, -0.013462f, 0.014921f, 0.020689f, 0.001165f, -0.030350f, -0.042508f, -0.039102f, -0.006268f, -0.008552f, -0.021054f, 0.019837f, 0.016073f, -0.017048f, -0.020807f, -0.022715f, 0.012902f, 0.004545f, 0.015846f, 0.040459f, -0.000146f, -0.034356f, 0.023513f, 0.009347f, 0.008015f, 0.002583f, -0.000530f, -0.016478f, 0.029997f, 0.015445f, -0.011833f, -0.014113f, -0.009333f, -0.038998f, 0.010946f, 0.028879f, 0.008864f, -0.027242f, 0.032252f, 0.023727f, 0.013440f, 0.003783f, -0.016691f, 0.009044f, -0.055661f, 0.008954f, -0.003294f, 0.050048f, -0.017711f, -0.024417f, 0.010763f, -0.012615f, -0.000848f, -0.035733f, -0.006322f, -0.009379f, 0.048578f, -0.031166f, -0.058444f, -0.037950f, - -0.076004f, 0.015256f, -0.015293f, -0.004750f, -0.040458f, -0.025650f, -0.067134f, -0.029519f, -0.023323f, -0.003152f, 0.016761f, -0.021411f, -0.003560f, -0.003765f, -0.003177f, -0.005638f, 0.014702f, -0.024905f, 0.011242f, -0.009553f, -0.019395f, 0.003438f, -0.005396f, 0.018504f, 0.009646f, 0.000789f, -0.009576f, 0.023800f, 0.022110f, 0.013616f, -0.008143f, -0.011191f, -0.011241f, -0.010181f, 0.024835f, 0.040585f, 0.005027f, 0.037351f, 0.040836f, 0.014031f, 0.001057f, -0.035673f, -0.003534f, 0.007322f, 0.005659f, -0.002818f, -0.009589f, -0.030062f, -0.000327f, 0.021219f, 0.003686f, -0.022378f, -0.005461f, -0.016643f, 0.091126f, 0.003176f, 0.015449f, -0.015566f, -0.029380f, -0.040460f, -0.012861f, 0.010891f, 0.026954f, 0.021578f, -0.018855f, -0.000542f, -0.039678f, -0.015074f, 0.014715f, -0.034171f, -0.017733f, -0.013225f, 0.049320f, 0.025118f, 0.027303f, 0.025027f, -0.028035f, 0.004776f, 0.010641f, 0.011125f, -0.002400f, 0.032594f, -0.006942f, 0.014100f, 0.025958f, 0.009372f, 0.007444f, 0.021206f, 0.030064f, -0.017983f, -0.034652f, 0.022916f, -0.003487f, -0.000357f, -0.036653f, -0.034868f, - 0.008207f, -0.017682f, -0.013097f, 0.029741f, -0.030854f, 0.039483f, 0.026075f, -0.018227f, 0.021314f, -0.023913f, -0.023347f, -0.029080f, 0.041535f, -0.029431f, 0.013257f, 0.012106f, -0.047062f, 0.003988f, 0.005709f, -0.037842f, -0.064130f, -0.058041f, 0.042120f, -0.043755f, -0.000600f, -0.039398f, -0.008799f, -0.028321f, -0.002172f, 0.017464f, 0.011159f, -0.028820f, 0.029470f, 0.033535f, 0.071320f, 0.018115f, -0.047774f, 0.016369f, -0.029377f, 0.015442f, -0.042032f, 0.022087f, -0.017968f, 0.002661f, -0.008595f, 0.016733f, -0.005170f, -0.017626f, -0.040388f, -0.040792f, 0.004495f, 0.003385f, 0.025510f, -0.018684f, -0.001746f, 0.039302f, 0.011256f, 0.027090f, 0.008344f, -0.007719f, -0.003079f, -0.009974f, -0.026692f, 0.009048f, -0.032203f, -0.019497f, 0.006839f, 0.026125f, -0.035175f, 0.019038f, 0.003569f, 0.024672f, -0.008652f, 0.013584f, 0.025312f, 0.027472f, 0.028026f, -0.013344f, 0.013590f, 0.021422f, 0.023529f, 0.004108f, 0.013963f, 0.006866f, -0.011011f, 0.043138f, 0.020017f, 0.021489f, -0.018304f, 0.001640f, -0.039920f, -0.000634f, 0.006706f, 0.007801f, -0.035207f, -0.036627f, - -0.057985f, 0.040285f, 0.004116f, 0.013877f, -0.009554f, 0.021374f, -0.015896f, -0.015572f, 0.011967f, 0.030704f, 0.007163f, 0.020215f, 0.062401f, -0.008970f, -0.037709f, -0.079993f, -0.011427f, -0.030861f, -0.015249f, -0.018987f, -0.037219f, -0.026110f, -0.055584f, -0.006360f, -0.000887f, 0.019550f, 0.057588f, -0.047855f, -0.018490f, -0.007780f, 0.018853f, 0.020521f, 0.057063f, 0.007887f, -0.065199f, -0.014843f, 0.013369f, 0.051125f, 0.013383f, -0.078819f, -0.031657f, 0.071615f, 0.006516f, 0.071447f, -0.041934f, 0.002470f, 0.005599f, 0.043324f, -0.003992f, 0.039445f, 0.059195f, 0.008558f, 0.050231f, 0.035402f, 0.008557f, 0.069715f, 0.059451f, 0.019478f, 0.092686f, 0.071362f, 0.044682f, -0.074835f, -0.004797f, 0.029635f, 0.017165f, -0.000643f, -0.054317f, -0.064810f, -0.033548f, -0.092865f, -0.014596f, -0.068990f, -0.026285f, -0.017545f, -0.099551f, -0.094318f, -0.065662f, 0.032791f, 0.001182f, -0.021576f, -0.000997f, -0.006888f, -0.001822f, -0.018102f, -0.009549f, 0.023502f, 0.009467f, 0.004338f, -0.002906f, 0.004014f, -0.004278f, 0.014704f, -0.002141f, -0.024545f, 0.043564f, 0.007346f, - 0.010735f, -0.012492f, 0.002435f, -0.001150f, 0.023032f, -0.000793f, 0.013598f, -0.007414f, -0.023274f, 0.009887f, 0.018741f, 0.048291f, 0.042988f, 0.003245f, 0.000040f, 0.031000f, 0.015706f, 0.036149f, 0.030195f, -0.009019f, 0.034768f, 0.019632f, 0.007488f, 0.021995f, 0.014527f, -0.011699f, -0.004902f, -0.026863f, 0.017432f, -0.023910f, -0.010169f, 0.013601f, -0.051617f, 0.055097f, -0.023900f, 0.036094f, 0.017565f, -0.046156f, 0.006707f, 0.028833f, -0.018341f, -0.048213f, 0.031822f, -0.012986f, 0.027190f, -0.016101f, 0.006799f, 0.011291f, -0.029947f, -0.003393f, -0.013312f, -0.000502f, -0.048884f, -0.038137f, 0.047152f, 0.002317f, 0.018950f, -0.037217f, 0.038514f, 0.034756f, -0.026250f, 0.022207f, -0.038015f, -0.007953f, -0.021390f, 0.027628f, 0.067117f, -0.000993f, 0.081481f, -0.020469f, -0.004134f, 0.004132f, 0.008123f, -0.005343f, -0.046332f, 0.080428f, 0.052026f, -0.005971f, 0.043655f, 0.034644f, 0.045323f, -0.016986f, -0.001319f, -0.081117f, 0.036550f, 0.038707f, -0.010882f, -0.013560f, 0.050690f, 0.027322f, 0.026587f, 0.063832f, 0.010307f, -0.032181f, -0.039608f, 0.012326f, - -0.012656f, -0.046415f, 0.038452f, -0.053828f, 0.001989f, 0.012504f, -0.038931f, -0.059826f, -0.041355f, -0.014883f, 0.003944f, 0.049158f, 0.032269f, 0.016033f, -0.092811f, -0.025481f, 0.055314f, -0.003907f, -0.020506f, 0.016967f, -0.050478f, -0.030706f, 0.041754f, 0.000332f, 0.000216f, -0.017264f, -0.000123f, 0.026184f, -0.008347f, -0.018344f, 0.014161f, -0.005976f, -0.036037f, -0.018804f, 0.003105f, -0.002100f, -0.002588f, 0.001144f, -0.016041f, 0.000610f, -0.024881f, -0.032332f, 0.004031f, -0.002473f, -0.054550f, -0.005502f, -0.033199f, -0.018341f, -0.006425f, 0.008783f, 0.009478f, 0.030286f, -0.027794f, -0.018050f, 0.005587f, 0.029528f, -0.030721f, -0.031847f, 0.045242f, -0.006534f, -0.002981f, -0.008133f, -0.000700f, -0.018552f, 0.007729f, 0.021973f, 0.011348f, 0.019199f, 0.000923f, 0.007567f, 0.000065f, 0.003242f, -0.068514f, 0.038899f, 0.060813f, -0.001330f, 0.070061f, 0.020982f, -0.060580f, -0.037574f, -0.004639f, -0.021304f, -0.036791f, 0.038883f, 0.045838f, -0.004585f, 0.031950f, 0.042660f, -0.033677f, 0.030036f, 0.051516f, -0.003307f, -0.069201f, 0.027060f, -0.001810f, -0.013947f, - 0.019305f, 0.052194f, -0.016559f, -0.026569f, 0.013026f, -0.023153f, -0.029900f, -0.002288f, 0.046215f, 0.039113f, -0.065189f, 0.020599f, 0.028179f, -0.044094f, -0.027850f, 0.052805f, -0.014211f, -0.077258f, -0.009618f, 0.064622f, -0.020910f, -0.111540f, 0.117043f, -0.033409f, -0.013211f, -0.057757f, 0.075731f, 0.024412f, -0.025716f, 0.054727f, -0.031985f, -0.024297f, -0.013781f, 0.140339f, 0.047223f, -0.058987f, -0.051715f, 0.053730f, -0.012143f, 0.078291f, 0.001803f, 0.058723f, -0.080692f, 0.064610f, 0.112026f, 0.010390f, -0.011631f, -0.019829f, -0.019099f, -0.044717f, 0.105737f, 0.070658f, -0.062619f, 0.017532f, -0.065834f, -0.011501f, 0.007566f, 0.013651f, 0.009735f, 0.019389f, 0.002280f, -0.072770f, 0.034420f, 0.004268f, -0.007084f, -0.001732f, 0.033847f, -0.014644f, 0.007865f, -0.010771f, 0.017787f, -0.007046f, 0.004953f, -0.011775f, 0.022292f, 0.000703f, -0.003890f, 0.012238f, 0.018017f, -0.039923f, 0.005316f, 0.024866f, 0.010048f, -0.028820f, 0.015823f, 0.044848f, -0.043582f, -0.068669f, 0.013992f, 0.008330f, 0.027358f, 0.026113f, -0.003065f, -0.062046f, -0.020382f, 0.016751f, - 0.009119f, 0.017237f, -0.008772f, 0.002424f, -0.001922f, -0.020823f, 0.018596f, -0.016329f, 0.050372f, 0.115200f, 0.022271f, -0.044548f, -0.010616f, -0.010927f, 0.020202f, 0.017335f, -0.035975f, -0.051294f, 0.013680f, -0.043408f, 0.008629f, -0.027022f, -0.031083f, -0.006758f, 0.005256f, 0.014723f, -0.034644f, -0.013994f, -0.013742f, -0.043111f, 0.036147f, -0.013563f, 0.002321f, -0.006399f, -0.028767f, 0.011407f, 0.008083f, 0.000999f, -0.006221f, 0.000319f, -0.001061f, -0.017005f, -0.036594f, 0.015645f, -0.018169f, 0.015868f, 0.011150f, -0.036572f, -0.029613f, -0.003365f, -0.004260f, -0.004169f, -0.007863f, 0.029811f, -0.020630f, 0.003051f, -0.038843f, 0.033163f, -0.038056f, -0.020141f, 0.018922f, 0.000537f, -0.030498f, 0.024252f, -0.041005f, 0.003131f, 0.012353f, -0.001077f, 0.004495f, 0.019664f, 0.009338f, -0.042245f, 0.021399f, 0.003018f, -0.025484f, 0.036268f, 0.014297f, -0.040085f, -0.004370f, -0.031954f, -0.004189f, 0.013053f, 0.010745f, -0.040804f, 0.052042f, -0.027464f, -0.015078f, 0.028994f, 0.019252f, 0.004790f, 0.019375f, -0.001553f, 0.027100f, -0.011978f, 0.005592f, -0.003283f, - 0.013150f, 0.010304f, -0.007706f, -0.009306f, 0.010477f, -0.012897f, 0.001454f, 0.002347f, 0.001802f, -0.007527f, 0.001371f, -0.007009f, -0.011643f, -0.006251f, -0.012671f, -0.000541f, 0.009687f, 0.016850f, 0.006323f, 0.002137f, 0.008955f, 0.011101f, -0.015090f, 0.023608f, 0.006277f, -0.000556f, -0.015300f, -0.008580f, 0.007485f, 0.018740f, -0.003464f, -0.000164f, -0.008957f, 0.003280f, 0.002823f, -0.007400f, -0.010212f, -0.008960f, -0.023969f, -0.008543f, -0.069148f, -0.086330f, -0.031656f, 0.260818f, 0.208748f, 0.138445f, 0.252441f, -0.100236f, -0.238829f, -0.076549f, -0.386005f, -0.150398f, 0.010923f, -0.090443f, 0.177047f, 0.241896f, 0.039568f, 0.153796f, 0.264084f, 0.005816f, 0.072796f, -0.017122f, -0.310374f, -0.256711f, -0.194028f, -0.192663f, -0.094971f, 0.147341f, 0.079142f, 0.114044f, 0.324170f, 0.137589f, 0.020126f, 0.194206f, 0.090232f, -0.111063f, 0.037868f, -0.093146f, -0.314556f, -0.075588f, -0.164357f, -0.323944f, -0.053874f, 0.007606f, -0.079197f, 0.219345f, 0.253036f, 0.099916f, 0.297543f, 0.301232f, 0.056183f, 0.116184f, 0.052210f, -0.190269f, -0.213444f, -0.199654f, - -0.359349f, -0.317424f, -0.121042f, -0.147375f, 0.031055f, 0.192561f, 0.263496f, 0.217861f, 0.336592f, 0.249822f, 0.133983f, 0.018615f, -0.042063f, -0.194107f, -0.236557f, -0.174586f, -0.207869f, -0.173264f, -0.007649f, -0.009762f, 0.039357f, 0.187031f, 0.090075f, 0.114257f, 0.179091f, -0.003741f, -0.055903f, -0.029620f, -0.112426f, -0.064253f, -0.037762f, -0.041482f, 0.045906f, 0.094692f, 0.036625f, 0.052394f, 0.059565f, -0.043580f, -0.015643f, -0.018599f, -0.114707f, 0.015717f, 0.047726f, -0.124267f, -0.001655f, -0.011615f, -0.125450f, 0.046432f, 0.020997f, -0.142069f, 0.089459f, 0.133357f, 0.031232f, 0.268836f, 0.167181f, -0.003626f, 0.142993f, 0.025515f, -0.182117f, -0.151400f, -0.237112f, -0.336437f, -0.252600f, -0.164616f, -0.088587f, 0.114316f, 0.248439f, 0.291118f, 0.362648f, 0.355257f, 0.251471f, 0.055188f, -0.027041f, -0.181187f, -0.330079f, -0.321106f, -0.285327f, -0.239839f, -0.052033f, 0.025199f, 0.041203f, 0.164198f, 0.174608f, 0.121000f, 0.124680f, 0.096655f, 0.041778f, 0.058983f, 0.042726f, -0.011092f, -0.022313f, -0.052497f, -0.104861f, -0.113731f, -0.112529f, -0.113930f, - -0.085341f, -0.017130f, 0.008478f, 0.030067f, 0.036100f, 0.020430f, 0.008192f, 0.002036f}, - {-0.009431f, 0.029314f, 0.011241f, 0.007123f, 0.002320f, -0.006218f, 0.000085f, 0.005619f, 0.010585f, 0.000141f, 0.001033f, 0.000614f, -0.003867f, 0.001025f, 0.003598f, -0.000729f, 0.003514f, 0.005404f, 0.007217f, 0.003021f, 0.002967f, 0.003791f, 0.003378f, -0.006636f, 0.006730f, 0.012614f, -0.005978f, 0.003576f, 0.001991f, 0.003511f, 0.000660f, 0.007461f, -0.004860f, -0.001752f, -0.004373f, 0.004297f, 0.012528f, -0.002128f, 0.006084f, -0.000189f, -0.002820f, -0.010339f, 0.003870f, -0.005368f, 0.004765f, 0.002386f, 0.005322f, -0.000618f, -0.003186f, 0.001652f, -0.002192f, 0.007142f, 0.000935f, -0.005709f, 0.007285f, -0.001624f, 0.005688f, 0.004350f, -0.000221f, 0.004173f, 0.008211f, -0.002344f, -0.002866f, -0.002365f, 0.004090f, -0.003392f, -0.004416f, 0.005066f, 0.000068f, 0.003387f, -0.005456f, 0.008029f, 0.000486f, -0.002317f, -0.000939f, -0.000938f, 0.003221f, -0.003068f, -0.004835f, 0.002816f, 0.004340f, 0.004057f, -0.003834f, -0.005784f, 0.002314f, -0.000251f, -0.000679f, -0.002261f, -0.002092f, 0.002821f, -0.000745f, -0.000475f, -0.001775f, -0.002163f, 0.000422f, -0.001572f, - 0.000658f, 0.000387f, 0.002130f, 0.001420f, -0.000630f, 0.000704f, 0.001214f, -0.001344f, -0.000531f, 0.000019f, -0.000583f, -0.001045f, 0.000741f, 0.001996f, 0.001180f, 0.001474f, 0.000030f, 0.022772f, 0.017871f, 0.008957f, 0.001317f, -0.003384f, 0.010363f, -0.006073f, -0.006493f, -0.001513f, -0.011352f, 0.006849f, 0.000476f, -0.004734f, 0.002707f, 0.006581f, 0.011359f, -0.005284f, 0.006560f, 0.014713f, -0.004186f, 0.000077f, 0.003397f, 0.007634f, -0.001909f, 0.008319f, 0.005931f, 0.008416f, 0.001969f, 0.006420f, -0.006538f, 0.011226f, -0.001318f, 0.010830f, 0.005414f, -0.001229f, 0.001380f, -0.001832f, -0.000220f, -0.003961f, -0.001822f, -0.004886f, -0.003543f, 0.003750f, -0.000985f, -0.010557f, -0.002327f, 0.001075f, -0.000259f, -0.005910f, -0.006028f, -0.003120f, -0.002587f, 0.008184f, -0.003258f, -0.009080f, -0.012033f, -0.013333f, -0.004548f, -0.005899f, -0.000441f, 0.002001f, 0.006454f, -0.008739f, -0.003911f, 0.000968f, -0.000844f, -0.003945f, 0.001003f, -0.009197f, -0.000828f, -0.010831f, 0.005796f, -0.005922f, -0.002825f, 0.007421f, -0.001053f, 0.005077f, 0.001516f, 0.001814f, - 0.005824f, 0.001388f, -0.004625f, -0.002192f, 0.000497f, -0.004603f, 0.002453f, 0.004570f, 0.002281f, -0.003619f, 0.002709f, 0.003812f, 0.000789f, 0.002039f, -0.001104f, -0.002152f, -0.001431f, -0.002152f, 0.001522f, -0.000276f, 0.001398f, -0.001808f, -0.001266f, 0.001427f, 0.012068f, -0.026164f, -0.007037f, -0.013250f, -0.002474f, 0.000003f, 0.014401f, -0.006998f, -0.023472f, -0.008253f, -0.000610f, 0.008947f, 0.002775f, -0.008689f, -0.020379f, -0.005226f, 0.005573f, -0.002267f, 0.011463f, 0.000468f, 0.005018f, -0.001116f, -0.009049f, -0.009817f, 0.005920f, 0.007254f, 0.000841f, 0.002370f, -0.000365f, 0.004446f, 0.001021f, -0.012076f, 0.000640f, 0.017069f, 0.002291f, -0.004206f, -0.001575f, -0.004497f, 0.001043f, -0.003874f, -0.007405f, 0.011442f, -0.003547f, -0.004717f, 0.010358f, -0.005382f, -0.009191f, 0.000459f, 0.000065f, 0.000338f, -0.013256f, 0.010821f, -0.004104f, -0.000215f, 0.009952f, 0.009088f, -0.014211f, -0.003562f, 0.002761f, 0.003498f, -0.001249f, 0.007836f, 0.002157f, 0.003917f, 0.005411f, 0.000857f, 0.004327f, 0.006576f, 0.001435f, 0.000091f, 0.006101f, -0.016166f, - -0.003577f, 0.000463f, 0.008281f, 0.004641f, -0.001980f, -0.001583f, 0.006028f, 0.005657f, -0.006450f, -0.000864f, -0.002285f, 0.000259f, 0.003576f, 0.004592f, 0.000925f, 0.005661f, -0.000545f, -0.003949f, -0.001876f, 0.000516f, 0.000438f, 0.000599f, -0.001486f, 0.003967f, -0.000778f, 0.001471f, -0.000571f, -0.001705f, 0.001173f, 0.000017f, -0.000749f, -0.001383f, 0.000349f, -0.001296f, -0.000199f, -0.002382f, -0.001869f, 0.000581f, -0.000345f, -0.001845f, -0.003758f, -0.001310f, 0.000858f, 0.003282f, -0.051986f, -0.020650f, -0.010391f, -0.014873f, 0.004772f, -0.005200f, -0.004863f, -0.000706f, 0.006704f, -0.006055f, -0.006994f, -0.010432f, 0.002203f, 0.009210f, 0.002200f, -0.007178f, -0.008685f, 0.002548f, 0.007882f, 0.007095f, -0.009890f, -0.014843f, 0.001243f, -0.013882f, 0.007485f, -0.000174f, 0.005263f, -0.000471f, 0.005083f, -0.005513f, -0.002151f, 0.014352f, -0.017334f, 0.007955f, 0.004206f, 0.001873f, -0.006063f, 0.003779f, 0.008735f, 0.002213f, -0.010508f, 0.002066f, -0.006617f, 0.005124f, -0.014391f, -0.000631f, -0.013024f, 0.010050f, -0.000940f, -0.002690f, -0.003600f, 0.005498f, - -0.021947f, 0.010106f, -0.006231f, -0.013447f, 0.005483f, 0.010680f, 0.012303f, 0.007094f, 0.002737f, -0.000939f, 0.001587f, -0.001178f, 0.007992f, -0.004552f, 0.002367f, 0.006104f, 0.015349f, 0.002355f, 0.000447f, -0.010989f, 0.007110f, -0.005497f, 0.001392f, 0.000239f, 0.008242f, -0.007245f, 0.000573f, 0.007370f, -0.000510f, -0.008883f, -0.011995f, 0.009979f, 0.000997f, 0.001822f, 0.005218f, -0.001104f, 0.002619f, 0.002107f, 0.000082f, 0.001755f, -0.000691f, 0.000246f, 0.002855f, 0.002444f, 0.002817f, -0.004464f, 0.001895f, -0.003365f, -0.001276f, -0.002843f, 0.002770f, -0.003218f, -0.029642f, 0.014523f, 0.023101f, 0.004516f, 0.001803f, 0.012876f, 0.004315f, 0.003954f, 0.007005f, 0.000988f, 0.007330f, 0.007419f, -0.005994f, -0.001074f, 0.000977f, -0.007245f, -0.004531f, -0.000073f, 0.003548f, -0.004265f, 0.024021f, 0.012798f, -0.003536f, 0.001741f, 0.007609f, 0.009636f, 0.010949f, -0.004575f, 0.007702f, 0.009022f, 0.000479f, 0.002646f, 0.002567f, 0.005146f, 0.003688f, 0.002281f, 0.005055f, 0.004874f, -0.010433f, -0.008023f, -0.016048f, 0.001752f, -0.005703f, -0.007990f, - 0.008213f, -0.002325f, 0.005160f, -0.019829f, 0.021828f, -0.001569f, -0.010422f, -0.001912f, 0.017298f, 0.012556f, -0.002790f, 0.000466f, 0.008362f, -0.003973f, 0.003581f, -0.006372f, -0.013668f, 0.001623f, 0.001249f, -0.010946f, -0.004364f, -0.010790f, 0.001903f, 0.004009f, 0.002417f, -0.005238f, -0.009576f, -0.014539f, -0.017367f, -0.012455f, -0.004885f, 0.001011f, -0.004244f, 0.001703f, 0.005735f, 0.005125f, -0.007233f, -0.000761f, -0.007886f, 0.002882f, -0.002764f, 0.002270f, -0.000128f, -0.003200f, 0.002274f, 0.002637f, -0.002337f, -0.001081f, -0.003036f, 0.004075f, -0.004842f, 0.001060f, 0.001522f, 0.001439f, -0.000510f, -0.001111f, 0.001008f, 0.002171f, 0.002138f, 0.001779f, 0.001337f, 0.001832f, 0.000578f, 0.003475f, -0.000817f, 0.003850f, -0.002413f, 0.001224f, -0.000731f, -0.000975f, -0.002775f, -0.002122f, -0.001852f, -0.002487f, 0.000968f, -0.001995f, -0.000285f, 0.001839f, 0.000594f, 0.054604f, 0.014480f, 0.004050f, -0.002024f, 0.032911f, 0.003863f, 0.015637f, 0.003228f, 0.010400f, 0.017143f, 0.006048f, -0.009515f, 0.010114f, 0.011784f, 0.001857f, -0.000860f, 0.002512f, - 0.021571f, 0.001490f, -0.007372f, -0.013122f, -0.003853f, -0.000404f, -0.014984f, 0.002505f, 0.004446f, 0.008589f, 0.003663f, 0.006059f, 0.016520f, -0.005171f, -0.002629f, 0.010138f, -0.001591f, -0.004491f, -0.000861f, -0.014791f, 0.009552f, 0.006243f, 0.000333f, 0.009490f, -0.004759f, -0.012959f, -0.027981f, -0.010262f, 0.010322f, 0.011401f, 0.000349f, 0.007995f, -0.007914f, -0.008603f, 0.022746f, -0.013194f, 0.010299f, -0.011622f, 0.002406f, -0.016933f, -0.017772f, 0.019243f, -0.007381f, -0.006954f, 0.026560f, 0.001976f, -0.003011f, -0.012516f, 0.009719f, 0.015326f, 0.000721f, -0.008305f, -0.015689f, -0.002490f, 0.011349f, -0.003676f, 0.003823f, -0.006953f, 0.005567f, -0.002670f, 0.001774f, 0.012090f, -0.013127f, 0.004052f, -0.003749f, 0.000768f, 0.001459f, -0.001552f, 0.013963f, 0.004339f, 0.002008f, -0.004215f, 0.000087f, -0.003353f, 0.005846f, -0.002917f, 0.004621f, 0.004638f, -0.004988f, -0.000037f, -0.000856f, -0.003262f, 0.006590f, 0.001048f, 0.003042f, 0.000173f, -0.002428f, 0.001269f, -0.000051f, 0.000037f, 0.001823f, 0.002864f, 0.001014f, 0.003780f, 0.001130f, -0.000393f, - 0.002083f, 0.001376f, -0.001603f, 0.000364f, -0.000750f, 0.000738f, 0.003355f, 0.003724f, 0.000516f, -0.000471f, 0.027735f, 0.009322f, 0.022976f, -0.014039f, 0.004576f, 0.012972f, -0.017596f, -0.005910f, -0.006895f, 0.001925f, -0.008908f, -0.005312f, 0.013607f, -0.004048f, -0.002602f, -0.000863f, 0.017036f, -0.006130f, -0.007945f, 0.018336f, 0.002919f, -0.012784f, 0.005404f, -0.002718f, 0.002883f, 0.007000f, -0.010489f, -0.002303f, -0.007892f, -0.013988f, 0.001678f, 0.000467f, 0.002641f, -0.013761f, -0.014490f, 0.005704f, -0.001296f, 0.005555f, -0.000629f, 0.008029f, 0.002282f, -0.000250f, -0.009277f, -0.008826f, 0.002425f, 0.009018f, 0.004273f, -0.002491f, 0.026106f, 0.006325f, 0.004416f, 0.012004f, 0.004340f, 0.008956f, 0.008939f, 0.006003f, 0.003550f, 0.004627f, -0.003869f, -0.001954f, 0.001919f, -0.010993f, 0.002864f, -0.017785f, 0.004813f, -0.011737f, 0.009197f, -0.006555f, 0.005016f, -0.002207f, -0.008757f, 0.003025f, -0.002375f, 0.009444f, -0.008217f, 0.025088f, 0.020974f, 0.009820f, -0.018088f, 0.005760f, 0.007918f, -0.007585f, 0.003240f, 0.002328f, 0.012165f, 0.011745f, - 0.004795f, -0.000164f, -0.001764f, -0.002406f, -0.007213f, 0.010951f, -0.000919f, -0.001215f, -0.000069f, -0.003025f, 0.001080f, 0.003716f, -0.003090f, 0.005748f, -0.002260f, -0.004563f, -0.004981f, -0.000082f, 0.003215f, 0.003320f, -0.001008f, -0.001076f, -0.003962f, -0.001573f, 0.001911f, -0.004532f, 0.005029f, 0.005410f, -0.003510f, 0.001040f, -0.004412f, -0.001331f, 0.000597f, 0.001817f, -0.003398f, 0.005726f, -0.034464f, -0.066318f, -0.002828f, -0.013291f, 0.011505f, -0.003419f, -0.018359f, -0.001780f, -0.014866f, -0.016399f, -0.014054f, 0.021689f, 0.011265f, -0.014485f, -0.008323f, 0.016508f, 0.009565f, 0.014733f, -0.010129f, 0.009530f, -0.008982f, -0.009078f, -0.002790f, -0.003964f, -0.028037f, 0.007667f, 0.016034f, 0.006903f, -0.016660f, -0.003827f, 0.002976f, 0.004280f, -0.014857f, -0.003308f, -0.021330f, 0.004720f, -0.010099f, -0.000937f, -0.007414f, 0.004096f, 0.022876f, -0.002451f, -0.004215f, 0.011462f, 0.016735f, -0.010089f, 0.004592f, 0.006329f, -0.014049f, 0.007562f, 0.007072f, -0.016525f, 0.002644f, 0.010726f, -0.002484f, -0.017399f, -0.010930f, -0.011214f, 0.015872f, 0.006157f, - 0.015546f, -0.009140f, -0.017848f, 0.004276f, 0.008990f, -0.003776f, -0.012755f, 0.008552f, 0.012589f, 0.011908f, -0.014628f, -0.007601f, -0.002980f, 0.023785f, -0.004970f, 0.014216f, 0.004248f, -0.016666f, -0.013531f, -0.002554f, 0.009407f, -0.015787f, -0.000846f, -0.002896f, 0.008805f, -0.001852f, 0.019734f, 0.002516f, -0.004393f, -0.005807f, -0.004868f, -0.005598f, -0.003557f, -0.001856f, 0.001921f, 0.000017f, -0.002187f, -0.007130f, -0.000573f, -0.006929f, -0.002935f, 0.002948f, -0.002315f, 0.001216f, -0.001896f, -0.005215f, 0.003337f, -0.000777f, 0.008556f, -0.001558f, -0.006678f, -0.004721f, 0.002841f, -0.001199f, 0.000466f, -0.001820f, -0.004224f, 0.001585f, 0.004889f, -0.004098f, -0.001140f, 0.006518f, 0.003163f, -0.003867f, 0.005325f, -0.033927f, -0.000032f, 0.000939f, 0.019566f, 0.004739f, -0.007801f, 0.011571f, -0.005560f, 0.005062f, -0.018375f, -0.005411f, -0.011639f, -0.006465f, -0.023233f, -0.008827f, -0.013870f, 0.032045f, 0.018431f, 0.019528f, -0.022789f, -0.019529f, -0.009328f, 0.010915f, -0.001028f, -0.000269f, 0.000683f, 0.006548f, -0.001535f, 0.009298f, -0.013248f, -0.011413f, - -0.000193f, -0.003257f, -0.016347f, -0.016501f, -0.013148f, -0.009575f, -0.007077f, -0.006588f, -0.020715f, 0.009493f, 0.025469f, -0.005546f, 0.011962f, 0.016316f, -0.011931f, 0.014116f, 0.009007f, 0.003332f, 0.023268f, -0.001145f, 0.019497f, 0.007181f, 0.002569f, -0.018296f, 0.007384f, 0.008978f, -0.004729f, 0.026708f, 0.021413f, 0.004113f, -0.007856f, -0.013381f, 0.007827f, -0.013156f, 0.005415f, -0.000311f, 0.015935f, -0.000091f, -0.023452f, 0.001644f, -0.009164f, -0.003811f, -0.017536f, 0.020587f, 0.010844f, 0.007423f, 0.005049f, 0.022981f, -0.006493f, -0.024214f, -0.003640f, 0.015116f, 0.000566f, -0.012509f, -0.003052f, 0.001655f, -0.005224f, 0.002869f, 0.007460f, -0.000150f, 0.000389f, -0.001634f, 0.002533f, -0.000485f, 0.008958f, 0.002599f, 0.002785f, -0.002162f, 0.003569f, 0.004554f, 0.008152f, -0.006801f, 0.004588f, 0.004523f, 0.000110f, 0.001353f, 0.008212f, 0.004349f, 0.002253f, -0.004990f, 0.007006f, -0.002115f, -0.003795f, -0.004727f, -0.000132f, -0.012110f, 0.007759f, 0.003747f, 0.001551f, -0.005793f, 0.006864f, 0.006588f, 0.012066f, 0.007314f, 0.002202f, 0.001948f, - 0.000790f, 0.009751f, -0.030714f, 0.013842f, 0.010150f, 0.013131f, -0.014351f, -0.025470f, 0.007362f, 0.007637f, 0.001259f, -0.021481f, 0.020510f, 0.005877f, -0.010979f, -0.018921f, 0.008509f, -0.008379f, 0.032845f, 0.038262f, 0.005624f, -0.006145f, -0.014315f, 0.021718f, -0.024770f, -0.008875f, 0.030494f, 0.007571f, -0.005974f, -0.016532f, -0.015254f, -0.008625f, 0.000499f, -0.020215f, 0.004508f, 0.021490f, -0.002784f, 0.008058f, -0.015816f, -0.014427f, -0.004932f, -0.011933f, 0.031214f, -0.011503f, 0.013988f, 0.011521f, 0.012634f, 0.003321f, 0.006178f, -0.021710f, -0.021800f, -0.020876f, -0.004708f, 0.015615f, 0.035987f, -0.014556f, -0.026105f, -0.006051f, -0.012065f, 0.006639f, 0.005527f, 0.020040f, -0.012331f, -0.000290f, -0.016318f, -0.003128f, 0.028801f, -0.003724f, -0.015795f, 0.020624f, 0.006697f, 0.003307f, 0.010774f, -0.023200f, 0.003463f, -0.007879f, 0.002164f, 0.010570f, 0.025305f, 0.007066f, -0.029579f, 0.010749f, 0.002500f, -0.004610f, -0.012378f, 0.000542f, -0.003230f, -0.001645f, -0.000882f, 0.004131f, 0.006710f, 0.008141f, 0.002618f, 0.000524f, -0.004855f, 0.001510f, - -0.001573f, 0.005835f, -0.010111f, 0.003714f, 0.003797f, -0.000249f, 0.000780f, 0.001647f, -0.007684f, -0.000238f, -0.005136f, 0.008223f, 0.007557f, 0.001871f, 0.009095f, -0.003631f, 0.001158f, 0.006991f, -0.001601f, 0.005532f, 0.001246f, 0.005118f, 0.001609f, -0.011687f, -0.000842f, -0.004203f, -0.000794f, 0.001543f, 0.000551f, -0.004148f, 0.000254f, -0.004880f, -0.000142f, -0.002396f, 0.049847f, -0.021629f, -0.017074f, -0.005133f, 0.010444f, -0.029134f, 0.011613f, -0.007820f, 0.014664f, -0.013045f, -0.006057f, 0.018170f, 0.013344f, 0.005171f, -0.009204f, -0.003251f, 0.024701f, 0.024439f, -0.005161f, 0.021343f, -0.006278f, 0.031358f, -0.014739f, -0.007652f, 0.005518f, 0.032844f, 0.023857f, 0.007966f, -0.017691f, -0.001200f, -0.036548f, -0.005478f, 0.005582f, 0.016787f, 0.019416f, 0.034599f, 0.008943f, -0.000612f, -0.001793f, -0.013256f, -0.022850f, -0.001618f, -0.019838f, 0.014266f, 0.004342f, 0.022051f, 0.012137f, -0.007524f, 0.021716f, -0.026012f, 0.011625f, -0.005802f, 0.001746f, -0.004527f, 0.027672f, 0.016293f, 0.007820f, 0.004951f, -0.050627f, -0.008044f, 0.029796f, 0.015103f, - 0.001712f, -0.000955f, 0.001372f, 0.024125f, 0.010096f, -0.038200f, -0.012603f, -0.014756f, 0.003425f, 0.000794f, -0.038084f, 0.001453f, -0.035611f, -0.023545f, -0.003230f, -0.015275f, -0.016668f, 0.022129f, 0.027834f, -0.003047f, -0.013753f, -0.001533f, 0.008444f, -0.003470f, 0.007183f, 0.011422f, -0.001076f, 0.012693f, 0.018496f, -0.005997f, -0.010534f, 0.001693f, -0.004578f, 0.005612f, 0.003527f, -0.002971f, -0.002751f, 0.000216f, 0.000133f, 0.005240f, -0.000714f, -0.006444f, 0.001164f, 0.006322f, 0.002218f, 0.005615f, -0.005046f, 0.008530f, -0.000142f, -0.003172f, 0.001965f, -0.005433f, 0.002033f, -0.010867f, -0.007085f, -0.008507f, 0.004247f, 0.000397f, -0.008197f, -0.001625f, 0.006772f, 0.004526f, 0.005860f, -0.003985f, 0.003169f, 0.000050f, -0.001468f, -0.010385f, -0.005457f, -0.011008f, 0.018087f, 0.035231f, -0.008918f, -0.014329f, 0.001972f, 0.013633f, 0.007762f, -0.021539f, -0.001406f, -0.017448f, -0.001024f, -0.023751f, -0.002690f, -0.020412f, 0.000867f, 0.021164f, 0.001568f, 0.046710f, -0.019700f, -0.009358f, -0.016766f, 0.019088f, 0.030997f, -0.024858f, -0.008447f, -0.038574f, - 0.007150f, -0.000262f, 0.010441f, 0.009586f, -0.021751f, -0.012759f, 0.016778f, -0.006256f, -0.004902f, -0.020939f, 0.042258f, -0.005566f, -0.045485f, 0.012858f, -0.012078f, -0.013369f, 0.016196f, 0.012829f, -0.013236f, -0.014324f, -0.004513f, -0.026082f, -0.015881f, 0.008886f, 0.005738f, 0.009269f, -0.008124f, -0.018791f, -0.022123f, -0.021881f, 0.018076f, -0.032209f, 0.000379f, 0.008019f, -0.010132f, 0.001069f, -0.000346f, -0.004166f, -0.025855f, -0.004522f, -0.010592f, 0.016612f, 0.020797f, -0.003633f, 0.032408f, -0.001599f, -0.000475f, -0.009718f, -0.002221f, 0.047071f, 0.004394f, -0.020869f, -0.008586f, 0.018472f, 0.013414f, -0.025715f, 0.000382f, 0.003977f, -0.017766f, 0.014961f, 0.003304f, 0.016715f, 0.002397f, 0.002773f, 0.002378f, 0.001555f, 0.007026f, 0.010172f, 0.000731f, 0.005232f, 0.015775f, 0.001511f, -0.005837f, 0.003046f, 0.007492f, -0.005778f, -0.001888f, 0.001182f, -0.007638f, 0.007192f, 0.006226f, 0.008270f, 0.001411f, -0.008403f, 0.001832f, -0.002696f, 0.001265f, -0.001546f, -0.001781f, 0.001043f, -0.005050f, 0.007199f, -0.003761f, -0.004502f, -0.005988f, 0.014270f, - -0.000046f, -0.014886f, 0.010898f, 0.008964f, 0.003565f, -0.000712f, 0.008290f, 0.006692f, -0.017072f, -0.022626f, 0.057293f, -0.014661f, -0.005147f, 0.005201f, 0.024360f, 0.017682f, -0.037386f, -0.015111f, -0.035526f, 0.007862f, 0.001914f, -0.010866f, -0.039097f, 0.001704f, -0.018321f, 0.008182f, 0.008455f, 0.019760f, 0.000867f, 0.014404f, 0.067306f, 0.014738f, 0.016695f, -0.010514f, -0.003889f, 0.029522f, -0.002716f, 0.002387f, 0.007662f, 0.001993f, -0.004475f, -0.015326f, 0.027019f, -0.028771f, 0.011852f, -0.042804f, -0.013205f, -0.019999f, -0.026621f, -0.022684f, -0.000207f, -0.046780f, -0.016105f, 0.006479f, 0.026650f, 0.015474f, -0.046181f, 0.026142f, 0.017192f, 0.019061f, -0.029391f, 0.021520f, -0.013881f, -0.033465f, -0.011574f, -0.033299f, 0.016113f, 0.039883f, 0.009908f, -0.003793f, -0.026180f, 0.021100f, -0.027873f, 0.041643f, -0.007856f, -0.004469f, -0.025203f, -0.027394f, 0.003946f, 0.032519f, 0.010627f, -0.022363f, -0.009145f, 0.005451f, -0.004686f, -0.008952f, 0.021258f, 0.010996f, -0.009971f, 0.027519f, -0.002271f, -0.039069f, 0.048947f, 0.026064f, 0.020149f, 0.009242f, - -0.006619f, -0.002416f, -0.004100f, 0.014625f, 0.003310f, 0.002145f, 0.032215f, 0.012579f, 0.000566f, 0.001535f, 0.004570f, 0.016823f, -0.013497f, 0.009483f, 0.000919f, 0.003166f, 0.003078f, 0.010833f, 0.005296f, 0.000667f, 0.018154f, 0.013888f, 0.001207f, -0.006355f, -0.006458f, -0.002388f, 0.014859f, 0.007432f, 0.008339f, 0.008011f, 0.009883f, -0.012299f, 0.012291f, -0.003271f, -0.003286f, 0.011386f, 0.017857f, -0.002604f, -0.004975f, -0.000120f, 0.016995f, 0.019578f, 0.007490f, 0.012061f, 0.009244f, 0.031489f, 0.005871f, -0.020123f, 0.009114f, -0.005805f, 0.009392f, 0.034539f, -0.048591f, -0.021983f, -0.039071f, 0.022244f, -0.007878f, 0.003894f, -0.012900f, 0.028200f, -0.027704f, -0.027872f, -0.012723f, -0.006448f, -0.019953f, -0.034510f, -0.016694f, 0.006549f, 0.022698f, -0.031750f, 0.020979f, -0.011908f, 0.002511f, 0.041292f, 0.031551f, -0.000457f, 0.016628f, 0.008043f, -0.006563f, -0.004912f, -0.055969f, 0.007833f, -0.005680f, 0.005585f, 0.010902f, -0.004329f, 0.001526f, 0.056618f, -0.050766f, 0.004845f, 0.061255f, 0.008057f, 0.016918f, -0.023959f, -0.006559f, 0.032084f, - 0.056233f, 0.002907f, 0.049869f, -0.019389f, 0.045115f, -0.015801f, 0.033394f, 0.033918f, -0.008382f, 0.066050f, -0.010985f, -0.002750f, -0.019604f, -0.029787f, -0.031608f, -0.014465f, -0.018973f, -0.045888f, -0.021437f, -0.009713f, 0.016985f, 0.016830f, 0.002154f, -0.023561f, -0.003941f, -0.006638f, 0.029537f, 0.009186f, -0.015401f, 0.025322f, 0.005696f, -0.003117f, -0.003570f, -0.018411f, -0.002835f, -0.007317f, 0.007708f, -0.018644f, -0.008916f, -0.013004f, -0.012940f, 0.023540f, 0.009089f, -0.007815f, 0.007109f, -0.006017f, 0.004498f, -0.014171f, 0.021095f, 0.000990f, 0.005916f, -0.000563f, -0.014226f, 0.013013f, -0.001733f, 0.004768f, 0.014984f, 0.010371f, 0.006383f, 0.001150f, -0.022134f, 0.010545f, -0.008490f, -0.001053f, 0.019034f, -0.000455f, 0.007048f, 0.004516f, 0.009088f, 0.012750f, -0.004626f, -0.010384f, -0.006850f, -0.008334f, 0.003960f, 0.011425f, 0.019594f, 0.011255f, -0.022906f, -0.002985f, -0.025094f, -0.021216f, -0.072760f, -0.051439f, -0.036602f, -0.003451f, 0.049214f, -0.032185f, -0.004203f, -0.024726f, -0.036088f, -0.029609f, -0.036866f, -0.038157f, -0.015265f, -0.045066f, - -0.049349f, -0.042650f, 0.012036f, -0.029400f, -0.015543f, -0.036690f, 0.035046f, 0.057696f, 0.004906f, -0.006485f, -0.020361f, 0.004866f, -0.003669f, -0.001372f, -0.004702f, 0.018273f, 0.003742f, 0.039389f, -0.034294f, 0.003138f, -0.029184f, 0.059794f, 0.014561f, -0.034853f, 0.027419f, -0.024940f, 0.022262f, -0.033534f, 0.019672f, 0.003024f, -0.020216f, 0.018221f, -0.031942f, -0.010515f, 0.010056f, 0.032739f, 0.014200f, 0.058007f, -0.013031f, -0.037195f, 0.003463f, -0.010524f, 0.004367f, -0.024605f, -0.021464f, -0.039706f, 0.005007f, -0.042222f, -0.008540f, -0.006501f, -0.037152f, 0.024925f, 0.031387f, -0.018156f, -0.002021f, -0.054480f, 0.062747f, 0.076255f, 0.012174f, -0.029920f, 0.010374f, 0.067120f, -0.031466f, -0.014155f, -0.035885f, -0.020773f, -0.039388f, 0.016290f, -0.001911f, -0.022086f, 0.017168f, -0.022124f, 0.009236f, -0.013723f, -0.006381f, 0.009226f, 0.004762f, -0.000053f, -0.014771f, -0.002824f, 0.012911f, 0.007657f, -0.024617f, 0.019549f, -0.017158f, 0.009074f, 0.011221f, -0.007627f, -0.014495f, 0.007897f, -0.011730f, 0.009702f, 0.006885f, -0.015176f, 0.005572f, -0.001957f, - 0.005871f, -0.008997f, -0.024834f, 0.006879f, 0.004301f, -0.010075f, 0.006382f, -0.009015f, 0.017620f, -0.000164f, 0.007174f, 0.002143f, 0.022907f, 0.003156f, -0.030842f, 0.017459f, 0.011378f, 0.005353f, -0.058631f, 0.107311f, 0.040619f, -0.008815f, -0.032334f, -0.009033f, -0.034341f, 0.036926f, 0.093121f, 0.002016f, -0.061761f, -0.028281f, 0.033602f, 0.012485f, -0.012283f, 0.044369f, -0.008571f, 0.005566f, 0.025457f, -0.002683f, -0.025605f, -0.008352f, 0.020969f, -0.026848f, -0.024395f, -0.009915f, 0.008730f, 0.001325f, -0.004642f, -0.011274f, 0.019759f, 0.002052f, 0.029242f, 0.023083f, -0.030118f, 0.014804f, 0.035940f, 0.020106f, -0.027834f, 0.010760f, 0.005978f, 0.024238f, 0.000626f, 0.008451f, 0.006541f, 0.009997f, 0.050668f, 0.047951f, 0.029720f, 0.064991f, -0.032014f, 0.033504f, -0.038571f, 0.024626f, -0.000426f, 0.022506f, 0.028223f, 0.009101f, 0.007341f, 0.034268f, 0.015929f, -0.009120f, 0.021752f, 0.000134f, 0.029176f, -0.030936f, -0.017691f, 0.002702f, 0.070333f, -0.048516f, 0.004693f, -0.061008f, -0.007251f, 0.007097f, 0.024038f, -0.029675f, -0.005871f, -0.030583f, - 0.007917f, 0.037751f, -0.023143f, -0.054545f, -0.011635f, -0.005347f, -0.014825f, 0.013269f, 0.009483f, -0.015421f, 0.005445f, -0.013189f, -0.012927f, 0.012261f, -0.001976f, -0.007342f, -0.024668f, 0.013406f, -0.001073f, -0.015588f, -0.012529f, 0.011677f, 0.033183f, 0.003248f, -0.009555f, -0.004391f, 0.012068f, 0.029838f, 0.005921f, 0.002613f, 0.024817f, -0.000704f, 0.006731f, -0.002294f, -0.004922f, -0.001122f, 0.008978f, 0.014136f, 0.008448f, -0.003975f, -0.005310f, 0.012597f, 0.008928f, -0.018689f, 0.017742f, 0.004828f, 0.034506f, -0.008581f, 0.008737f, 0.020813f, -0.014295f, -0.008729f, 0.011680f, -0.019611f, 0.089841f, 0.007364f, 0.006512f, -0.019779f, -0.012596f, 0.014856f, 0.013725f, 0.008192f, 0.034666f, 0.014444f, -0.014614f, 0.018306f, 0.036989f, -0.001550f, 0.040552f, -0.004015f, 0.019696f, -0.041360f, 0.074809f, -0.011225f, -0.008762f, 0.012452f, -0.056617f, -0.014665f, -0.027255f, 0.039803f, 0.021927f, 0.022489f, -0.026446f, 0.009529f, 0.009553f, -0.035323f, 0.009773f, 0.030034f, 0.025638f, 0.008709f, -0.008712f, 0.003500f, -0.016955f, 0.056746f, 0.008606f, 0.025584f, - 0.020961f, 0.030560f, -0.050608f, -0.004166f, -0.015241f, 0.009313f, -0.018776f, -0.022319f, 0.041937f, -0.040107f, 0.030739f, -0.025508f, 0.032359f, -0.007435f, -0.033871f, -0.003373f, -0.050904f, 0.031376f, 0.029227f, 0.035211f, -0.105293f, 0.030209f, 0.019032f, -0.032541f, -0.021662f, -0.030268f, 0.054271f, -0.077738f, 0.046590f, 0.108908f, 0.002105f, -0.052251f, -0.020848f, 0.031478f, 0.064059f, 0.017514f, -0.021824f, -0.047102f, -0.078834f, -0.006521f, -0.000404f, 0.031175f, -0.023555f, -0.010798f, -0.018034f, 0.053927f, 0.003542f, -0.001706f, -0.015419f, 0.011130f, 0.003192f, -0.000166f, 0.002229f, -0.000696f, 0.010248f, 0.034373f, 0.042231f, 0.022137f, -0.006162f, -0.003482f, 0.016881f, 0.004168f, -0.010250f, 0.004922f, -0.016574f, -0.010158f, -0.020218f, -0.029705f, -0.062164f, -0.024688f, 0.009794f, 0.003029f, 0.035290f, -0.024963f, -0.017521f, 0.044963f, 0.016949f, -0.011664f, -0.018283f, 0.014648f, -0.004258f, -0.017138f, 0.044780f, 0.005247f, -0.001789f, -0.013915f, 0.001644f, -0.017677f, -0.023553f, 0.014807f, -0.050692f, 0.007045f, -0.030243f, 0.045775f, 0.004188f, 0.012071f, - -0.025433f, 0.019972f, -0.006463f, -0.019255f, 0.009644f, -0.019795f, -0.010409f, -0.016878f, -0.040354f, -0.024399f, 0.031213f, 0.024558f, 0.020302f, 0.020827f, -0.048993f, -0.015077f, 0.010732f, -0.015338f, 0.030150f, 0.020042f, 0.002652f, 0.017031f, 0.050544f, -0.015524f, -0.050121f, 0.096356f, -0.041548f, -0.054866f, 0.060870f, -0.029699f, -0.016318f, 0.012789f, 0.031623f, -0.036740f, -0.010551f, 0.003096f, -0.022957f, 0.125678f, -0.000302f, -0.021226f, -0.007174f, 0.000559f, 0.032238f, -0.062404f, -0.046214f, -0.026948f, -0.023917f, -0.002686f, -0.052446f, -0.000640f, -0.003868f, 0.019057f, 0.080843f, 0.080209f, -0.030381f, 0.061884f, -0.060313f, -0.055077f, 0.033931f, 0.050002f, -0.016325f, 0.013474f, 0.007444f, 0.034121f, 0.043949f, -0.000426f, 0.003881f, 0.055960f, -0.049375f, -0.100618f, -0.010055f, -0.040376f, 0.023386f, 0.046704f, -0.003535f, -0.032097f, 0.065402f, 0.018613f, 0.014105f, -0.017804f, -0.051581f, -0.030027f, 0.006898f, -0.023294f, 0.031506f, -0.003157f, -0.017731f, -0.003147f, -0.020209f, -0.022478f, 0.031342f, -0.010089f, 0.013435f, -0.022480f, 0.033325f, -0.003195f, - -0.000581f, 0.020132f, 0.032042f, -0.003775f, -0.005018f, -0.021427f, 0.004115f, -0.018476f, -0.015053f, -0.013127f, -0.003892f, -0.031937f, 0.001463f, -0.014736f, -0.003880f, -0.032020f, 0.010716f, 0.036137f, 0.015444f, -0.022685f, -0.044656f, -0.003800f, -0.002532f, 0.024537f, -0.060663f, -0.013146f, 0.016312f, -0.013064f, 0.030732f, -0.000816f, 0.019367f, 0.004691f, -0.036506f, 0.039452f, 0.000376f, 0.024174f, -0.024954f, -0.037934f, 0.035224f, -0.037553f, 0.011525f, -0.008531f, 0.033090f, 0.000334f, 0.007141f, -0.019872f, 0.006179f, -0.013986f, -0.049346f, -0.038588f, 0.016254f, -0.002820f, -0.001552f, 0.008277f, 0.036323f, -0.016165f, -0.011497f, -0.030504f, 0.012942f, 0.011563f, -0.004136f, -0.005777f, -0.082745f, 0.004085f, 0.022782f, -0.029138f, 0.020108f, -0.045319f, -0.009003f, 0.003363f, 0.028115f, 0.036458f, 0.003900f, -0.016865f, 0.010988f, 0.065395f, 0.056246f, 0.056813f, -0.003091f, -0.004800f, 0.011505f, 0.007153f, -0.026512f, 0.017171f, 0.070775f, -0.050498f, -0.017183f, -0.014365f, -0.000498f, 0.003086f, 0.008597f, -0.037456f, -0.058378f, -0.021298f, -0.004158f, 0.116592f, - 0.058343f, 0.039835f, -0.006191f, -0.009800f, -0.030385f, 0.050913f, 0.006556f, 0.032718f, -0.012747f, -0.015324f, -0.024261f, -0.020388f, -0.086716f, -0.037705f, -0.046157f, 0.035982f, -0.004179f, -0.016416f, -0.003559f, -0.034928f, -0.017356f, 0.037674f, 0.055333f, -0.008456f, 0.048685f, 0.027013f, 0.019893f, 0.003305f, 0.022610f, 0.029961f, 0.024092f, -0.006036f, -0.002452f, 0.000642f, 0.032897f, -0.026509f, -0.035369f, -0.016449f, 0.017637f, -0.002993f, -0.025151f, -0.015575f, -0.025196f, 0.014543f, -0.006402f, 0.030941f, 0.060398f, 0.011692f, 0.036900f, 0.049314f, 0.023034f, 0.030649f, 0.014458f, 0.009831f, 0.012676f, -0.022356f, 0.031471f, -0.026539f, -0.018789f, 0.007248f, 0.001866f, -0.018921f, 0.008888f, 0.017616f, 0.031607f, 0.013358f, -0.038141f, 0.020559f, 0.014829f, 0.004079f, 0.016446f, -0.010027f, -0.079572f, 0.044738f, 0.038845f, -0.002020f, 0.063949f, 0.028940f, -0.043921f, -0.043019f, 0.018540f, -0.017604f, -0.039215f, 0.002638f, 0.003648f, 0.017586f, -0.009940f, 0.022914f, -0.005902f, 0.021701f, 0.027327f, -0.025341f, -0.103099f, 0.055348f, -0.015780f, -0.032117f, - 0.023184f, 0.036599f, 0.001042f, -0.068981f, -0.009301f, -0.002684f, -0.071342f, -0.044268f, 0.037208f, -0.010710f, -0.029133f, -0.024330f, 0.015843f, -0.069090f, -0.049354f, 0.093610f, -0.008204f, -0.054121f, 0.021016f, 0.050919f, 0.021542f, -0.076712f, 0.109619f, 0.044560f, -0.067956f, 0.037780f, 0.049428f, 0.008072f, -0.046101f, 0.047756f, 0.052951f, 0.032484f, -0.042508f, 0.040086f, 0.074266f, 0.004157f, 0.075026f, 0.093241f, -0.050058f, -0.029569f, -0.034928f, 0.088106f, 0.055803f, -0.038076f, 0.021238f, -0.022973f, -0.056200f, 0.048311f, 0.109474f, 0.015959f, -0.033197f, -0.027437f, 0.065688f, -0.006047f, -0.073980f, -0.052699f, 0.013218f, -0.002632f, 0.060897f, -0.010792f, 0.047001f, -0.091594f, -0.014245f, 0.003767f, 0.015568f, -0.018994f, 0.019291f, -0.000771f, 0.001718f, 0.010607f, 0.002445f, -0.023876f, 0.007121f, -0.011322f, 0.014647f, 0.005880f, -0.033523f, 0.029266f, 0.009384f, -0.027741f, -0.019980f, 0.005357f, -0.024227f, 0.004778f, 0.021931f, 0.024292f, 0.003336f, -0.022744f, -0.007511f, 0.007523f, -0.031334f, 0.018261f, 0.023025f, 0.007534f, 0.001831f, 0.023121f, - 0.008372f, -0.010391f, 0.011187f, -0.008383f, 0.001849f, -0.015977f, 0.009991f, 0.036982f, 0.064708f, 0.103699f, 0.041932f, -0.043131f, -0.015772f, -0.036191f, 0.022187f, -0.017646f, 0.028567f, 0.018722f, -0.047573f, 0.024175f, -0.048476f, -0.016424f, 0.000477f, -0.017932f, 0.002825f, 0.025282f, 0.019924f, 0.001342f, -0.038617f, 0.008678f, 0.031209f, -0.011825f, 0.004737f, -0.014065f, -0.045174f, 0.045791f, -0.027239f, 0.031702f, -0.046520f, -0.027526f, -0.006456f, -0.038323f, -0.011261f, 0.038904f, -0.037832f, 0.051299f, 0.003455f, 0.041837f, 0.016641f, -0.020841f, -0.055990f, 0.046037f, 0.028680f, 0.019176f, 0.011950f, 0.047468f, -0.035028f, -0.017866f, -0.020211f, 0.014848f, 0.017956f, -0.004638f, -0.044164f, -0.001990f, -0.005974f, -0.044729f, -0.017594f, 0.007098f, 0.012273f, 0.035343f, -0.004043f, -0.031409f, 0.042097f, -0.008043f, -0.007097f, 0.050473f, 0.024177f, -0.041329f, 0.013607f, -0.025306f, 0.016265f, -0.013239f, 0.019954f, -0.035678f, 0.020217f, -0.012328f, 0.039802f, 0.006861f, 0.015434f, -0.013355f, 0.000153f, -0.028931f, 0.011875f, 0.001959f, 0.001569f, -0.000679f, - 0.008585f, -0.011611f, -0.010579f, -0.001325f, 0.004996f, -0.003170f, 0.007918f, -0.014673f, -0.002523f, 0.011407f, -0.002414f, -0.000452f, -0.002048f, 0.000384f, 0.001031f, -0.023193f, 0.004771f, 0.018768f, 0.000750f, -0.002626f, -0.004635f, -0.002191f, -0.016897f, 0.001346f, -0.003911f, -0.002047f, -0.008560f, -0.014174f, -0.002769f, 0.014114f, -0.007635f, -0.004177f, 0.007026f, 0.003088f, 0.011200f, -0.010543f, -0.003606f, -0.001480f, -0.007967f, -0.012323f, -0.076850f, -0.090521f, -0.048479f, 0.268574f, 0.236102f, 0.142890f, 0.313292f, -0.066759f, -0.235338f, -0.082743f, -0.443705f, -0.232592f, -0.004577f, -0.114830f, 0.158712f, 0.290874f, 0.040849f, 0.170924f, 0.333269f, 0.055945f, 0.116320f, 0.011138f, -0.342220f, -0.285904f, -0.252416f, -0.278087f, -0.168509f, 0.138081f, 0.058565f, 0.138257f, 0.360217f, 0.217060f, 0.056320f, 0.267237f, 0.122111f, -0.163700f, 0.089064f, -0.119462f, -0.313314f, -0.038648f, -0.193651f, -0.356230f, -0.160604f, -0.036961f, -0.186658f, 0.208425f, 0.224396f, 0.106187f, 0.357297f, 0.403536f, 0.153281f, 0.199553f, 0.188434f, -0.209907f, -0.136611f, -0.268442f, - -0.419249f, -0.385730f, -0.247140f, -0.248310f, -0.071094f, 0.161280f, 0.208924f, 0.278989f, 0.393332f, 0.353135f, 0.206627f, 0.150703f, 0.027369f, -0.163634f, -0.237676f, -0.174341f, -0.226281f, -0.279752f, -0.094457f, -0.105617f, -0.051071f, 0.174552f, 0.121209f, 0.128984f, 0.271814f, 0.069320f, -0.011649f, 0.044834f, -0.074707f, -0.117356f, -0.064969f, -0.118590f, -0.035231f, 0.076107f, 0.029361f, 0.041957f, 0.096622f, -0.022559f, 0.020545f, 0.052512f, -0.088117f, -0.008813f, 0.111861f, -0.105331f, 0.009682f, 0.017753f, -0.209570f, -0.010608f, -0.003472f, -0.250921f, 0.020672f, 0.088486f, -0.031557f, 0.258666f, 0.235625f, 0.043161f, 0.252115f, 0.124160f, -0.010188f, 0.041904f, -0.066982f, -0.270961f, -0.281743f, -0.349375f, -0.396985f, -0.200310f, -0.031595f, 0.080714f, 0.250580f, 0.415360f, 0.476980f, 0.379173f, 0.281324f, 0.128541f, -0.051373f, -0.157795f, -0.346702f, -0.435036f, -0.319499f, -0.256749f, -0.243660f, 0.016175f, 0.121460f, 0.147900f, 0.242618f, 0.216148f, 0.143419f, 0.140582f, 0.102297f, 0.033270f, 0.042203f, 0.001044f, -0.073620f, -0.084969f, -0.106837f, -0.137669f, - -0.119599f, -0.080359f, -0.046544f, -0.003850f, 0.026200f, 0.015073f, 0.009636f, 0.000465f} - }, - { - {-0.000983f, 0.012034f, -0.001255f, 0.003665f, -0.002216f, 0.016058f, -0.006321f, -0.001542f, -0.000590f, 0.002001f, -0.002856f, 0.007361f, -0.001293f, -0.004943f, -0.000902f, 0.010059f, 0.000722f, -0.005074f, 0.004688f, 0.003483f, 0.006592f, 0.002720f, -0.005063f, -0.003322f, 0.011205f, 0.001572f, -0.002901f, -0.002212f, -0.002315f, 0.002216f, 0.002364f, -0.001440f, -0.014327f, -0.003573f, 0.000662f, 0.009878f, 0.003500f, -0.001218f, -0.000070f, -0.005690f, 0.007832f, -0.008024f, -0.010708f, 0.001387f, 0.000074f, -0.003614f, -0.002490f, -0.002980f, 0.001497f, 0.000975f, 0.000911f, -0.003737f, 0.009293f, 0.000286f, 0.012465f, -0.002013f, -0.005986f, 0.002739f, -0.000697f, 0.001785f, 0.002868f, 0.006314f, 0.004263f, -0.001618f, -0.003465f, -0.002927f, 0.008074f, -0.008259f, 0.000287f, 0.000228f, -0.001485f, -0.007086f, 0.006209f, -0.003576f, 0.000789f, 0.005415f, -0.003855f, -0.005125f, -0.004293f, 0.005490f, -0.000544f, -0.001723f, -0.001565f, 0.000171f, -0.001069f, -0.002244f, 0.002692f, 0.002785f, 0.002004f, 0.001261f, 0.000660f, 0.003808f, 0.000578f, -0.000096f, 0.000765f, -0.000392f, - 0.000097f, -0.000902f, -0.000515f, -0.000477f, 0.002541f, 0.000603f, -0.001768f, 0.002196f, -0.004770f, 0.004171f, 0.002469f, -0.005560f, -0.003098f, -0.000406f, 0.000495f, -0.000262f, -0.000850f, -0.002800f, 0.005036f, 0.001007f, -0.002205f, -0.002929f, -0.000175f, 0.010502f, -0.001489f, -0.004884f, 0.006680f, -0.002572f, -0.006335f, -0.000602f, 0.005340f, 0.004047f, -0.003481f, 0.000988f, -0.004345f, 0.002560f, 0.002435f, -0.002021f, 0.005333f, -0.001418f, -0.009697f, 0.001843f, 0.004987f, 0.004727f, 0.000632f, -0.000668f, -0.007038f, -0.002314f, -0.000951f, -0.003022f, 0.006302f, 0.008941f, 0.004112f, -0.012075f, 0.004076f, 0.014326f, 0.005876f, -0.000644f, -0.000124f, 0.006628f, -0.003281f, 0.002207f, -0.006048f, -0.005389f, 0.005495f, 0.006300f, 0.002982f, 0.001728f, 0.001074f, 0.001311f, 0.002919f, 0.000618f, -0.000597f, -0.002095f, 0.001466f, -0.004184f, -0.000832f, -0.001771f, -0.008692f, -0.004273f, 0.001781f, 0.003277f, 0.002625f, 0.005916f, 0.004588f, 0.004923f, 0.006974f, -0.004415f, -0.002855f, -0.001243f, 0.002191f, 0.002620f, 0.004100f, -0.000836f, -0.001423f, -0.000733f, - 0.002489f, -0.001788f, 0.002249f, 0.000619f, -0.000990f, -0.000723f, 0.000718f, -0.000379f, 0.001355f, 0.000617f, 0.000185f, -0.000535f, 0.000732f, 0.000740f, -0.000344f, 0.001164f, 0.000242f, 0.000321f, -0.000957f, 0.000239f, -0.000299f, 0.000064f, 0.001429f, 0.000205f, 0.000583f, 0.000579f, 0.008295f, -0.000581f, 0.003419f, -0.005342f, -0.007983f, -0.004981f, 0.004330f, -0.003623f, -0.003711f, -0.003930f, -0.005275f, 0.005077f, 0.000705f, 0.003726f, -0.001654f, 0.001099f, -0.010837f, -0.006955f, -0.004956f, 0.006946f, 0.001310f, 0.001548f, 0.003781f, -0.003831f, -0.001965f, -0.000862f, 0.001237f, -0.008203f, -0.001602f, -0.005534f, -0.006052f, 0.000350f, -0.005342f, 0.003579f, 0.003351f, 0.014308f, -0.003579f, 0.007277f, -0.004861f, 0.003008f, -0.003343f, 0.000749f, 0.012492f, 0.002007f, 0.005401f, -0.005927f, 0.003793f, -0.005332f, -0.002554f, -0.000826f, 0.007928f, -0.003924f, -0.002065f, -0.007074f, -0.003779f, -0.008353f, -0.001143f, 0.007892f, 0.001866f, 0.000585f, 0.001347f, 0.007235f, -0.007156f, -0.012518f, 0.002879f, 0.003937f, -0.008192f, -0.000604f, 0.001077f, -0.002029f, - 0.003279f, 0.009782f, 0.002027f, -0.002490f, 0.000206f, -0.003489f, 0.000631f, 0.000591f, -0.002812f, -0.000845f, -0.000905f, -0.003961f, -0.000946f, -0.002263f, 0.000824f, -0.000863f, -0.001571f, 0.003234f, -0.000626f, -0.003192f, 0.001355f, -0.002275f, 0.000090f, -0.002461f, -0.003586f, 0.002079f, -0.000656f, -0.000261f, 0.001133f, 0.001520f, 0.000457f, 0.003315f, -0.001581f, -0.000279f, 0.000554f, -0.001195f, -0.000511f, -0.000377f, -0.001653f, -0.000867f, 0.002730f, 0.000912f, 0.003890f, 0.000477f, 0.001747f, -0.001543f, 0.004604f, -0.012781f, 0.002134f, -0.004475f, -0.009399f, -0.006808f, 0.003836f, -0.001887f, -0.000421f, 0.009326f, 0.003114f, -0.001305f, 0.000832f, 0.007931f, -0.003716f, 0.005855f, -0.002640f, 0.001749f, -0.008376f, -0.001483f, 0.005710f, -0.001915f, 0.007089f, 0.007928f, 0.002631f, 0.004995f, 0.010406f, -0.002429f, -0.014602f, 0.003327f, -0.006485f, 0.000457f, -0.017889f, 0.000490f, 0.005774f, -0.003590f, 0.006711f, 0.000951f, -0.006437f, 0.002325f, -0.013446f, -0.008617f, -0.003260f, -0.003308f, -0.011153f, 0.005669f, 0.006225f, 0.000367f, 0.005796f, 0.000446f, - 0.001594f, -0.003622f, 0.005259f, 0.003987f, -0.002061f, 0.012340f, -0.002290f, 0.010195f, 0.008762f, -0.000501f, -0.001388f, 0.000027f, 0.002829f, 0.004165f, 0.001362f, 0.004662f, 0.001587f, 0.001584f, 0.013687f, 0.005212f, -0.005928f, -0.002741f, -0.000047f, -0.003289f, 0.002061f, -0.002380f, 0.013807f, 0.002300f, 0.006506f, -0.004947f, 0.005626f, -0.000062f, -0.002678f, 0.001183f, -0.004420f, -0.002904f, -0.000727f, -0.003201f, -0.001931f, -0.001939f, 0.001727f, -0.003004f, -0.000663f, -0.002116f, -0.001052f, -0.001031f, 0.003824f, -0.001614f, 0.002013f, -0.000544f, -0.003180f, -0.000537f, 0.002033f, 0.000799f, 0.000395f, 0.001238f, -0.001904f, 0.001665f, 0.001136f, 0.000975f, 0.001910f, -0.001074f, 0.000489f, -0.003151f, -0.000180f, 0.002415f, 0.002214f, 0.000524f, 0.000455f, 0.000301f, 0.001819f, -0.024377f, 0.000080f, -0.000059f, 0.006256f, 0.010717f, 0.003759f, -0.005380f, -0.008911f, -0.001410f, 0.011593f, -0.002186f, -0.002209f, -0.008576f, -0.000199f, -0.003560f, 0.008585f, 0.010218f, -0.017514f, 0.011444f, 0.007301f, -0.006626f, -0.001421f, -0.009169f, 0.000058f, -0.002756f, - 0.000219f, 0.006035f, 0.011649f, -0.004358f, 0.002693f, -0.003034f, -0.003985f, 0.004339f, 0.008039f, 0.005434f, -0.005050f, -0.008277f, 0.005780f, 0.004026f, -0.002985f, -0.001494f, 0.001013f, -0.010672f, 0.003886f, 0.003248f, -0.004278f, -0.007131f, 0.002763f, -0.005415f, 0.009505f, 0.004198f, -0.016690f, 0.007634f, -0.007148f, -0.018366f, -0.005330f, -0.001358f, 0.003688f, -0.007522f, -0.000350f, 0.004072f, -0.008119f, -0.007981f, -0.008356f, -0.002539f, 0.002092f, 0.017465f, 0.002743f, 0.003336f, -0.003756f, -0.009100f, 0.011885f, -0.003587f, -0.013959f, 0.000710f, -0.014089f, 0.001085f, -0.001368f, -0.005113f, -0.015434f, 0.004727f, 0.000206f, -0.003370f, 0.003769f, 0.009385f, 0.004291f, -0.001753f, -0.001603f, -0.000021f, 0.005101f, 0.000852f, 0.001244f, 0.002899f, 0.004966f, -0.000405f, -0.002341f, -0.002951f, -0.003093f, 0.001223f, -0.000254f, -0.002399f, -0.002490f, 0.002290f, 0.002165f, 0.004380f, 0.000899f, -0.000069f, -0.000267f, 0.001659f, -0.000783f, -0.000041f, -0.000715f, 0.002784f, -0.000339f, 0.001504f, -0.000431f, 0.015187f, 0.004055f, 0.003299f, 0.006622f, 0.009559f, - -0.002138f, 0.023348f, -0.003424f, 0.016705f, -0.019731f, 0.006783f, 0.011485f, -0.004174f, 0.001575f, -0.005554f, -0.000560f, 0.008992f, 0.016390f, -0.004659f, -0.008187f, -0.002414f, 0.007622f, 0.001615f, 0.016666f, 0.007882f, -0.001832f, 0.002383f, -0.000152f, -0.007826f, 0.001523f, -0.001762f, -0.002450f, 0.007277f, 0.009557f, -0.015150f, 0.017443f, -0.013323f, -0.007266f, 0.002950f, -0.005418f, 0.008779f, 0.000197f, -0.005078f, 0.012313f, 0.017280f, -0.012920f, -0.002349f, -0.001290f, 0.005336f, -0.012235f, -0.020127f, -0.009410f, -0.006170f, 0.005884f, -0.013966f, -0.008083f, -0.001647f, 0.014411f, 0.009060f, -0.010101f, 0.007172f, 0.003790f, -0.005507f, -0.008308f, -0.001335f, -0.005127f, -0.005928f, 0.000564f, -0.003952f, 0.010765f, -0.008199f, -0.001742f, 0.009123f, -0.007291f, 0.009861f, 0.011780f, 0.001586f, -0.001262f, 0.001015f, -0.014642f, -0.012987f, -0.003279f, 0.008114f, 0.000310f, -0.005704f, 0.005338f, 0.011972f, -0.008040f, -0.003749f, 0.003224f, -0.001105f, -0.005727f, -0.000053f, 0.001495f, -0.005533f, 0.000254f, -0.001541f, 0.002426f, 0.000708f, 0.004295f, 0.000580f, - 0.003361f, -0.002191f, -0.000947f, 0.000137f, 0.000348f, -0.000250f, 0.003004f, 0.001283f, 0.003511f, 0.003374f, 0.000288f, 0.000991f, -0.000563f, 0.002291f, 0.003491f, -0.001765f, 0.008900f, 0.007235f, 0.009722f, -0.009392f, -0.012426f, -0.006718f, 0.008441f, 0.000381f, 0.034950f, -0.002672f, -0.000868f, -0.008455f, -0.015809f, -0.023234f, -0.005139f, 0.007630f, 0.012278f, -0.007705f, -0.014882f, 0.001886f, 0.000119f, 0.014858f, -0.005002f, -0.006155f, 0.018384f, -0.010076f, 0.001184f, -0.014240f, 0.009076f, -0.002899f, 0.000058f, -0.003210f, -0.021624f, -0.013617f, 0.001135f, 0.011934f, 0.008004f, 0.000917f, -0.022406f, 0.014810f, -0.009063f, -0.009297f, -0.009676f, -0.012865f, -0.002020f, 0.012111f, -0.009939f, -0.010992f, 0.007500f, -0.003635f, 0.004301f, 0.022346f, -0.009798f, 0.000421f, 0.001099f, 0.009452f, -0.006648f, -0.006139f, -0.003112f, 0.014176f, -0.003226f, -0.007579f, -0.001339f, 0.011039f, 0.014413f, -0.014384f, -0.016299f, -0.005605f, -0.002426f, -0.005520f, 0.003448f, -0.011500f, -0.004055f, -0.010859f, -0.021530f, -0.008569f, -0.004985f, 0.002793f, -0.019801f, -0.005557f, - 0.000295f, 0.013931f, 0.000409f, -0.012248f, -0.000240f, -0.000584f, -0.003736f, -0.006812f, 0.000298f, 0.002809f, -0.001295f, 0.002061f, 0.001965f, -0.002765f, 0.004023f, -0.001741f, -0.004018f, 0.004293f, 0.005352f, -0.002397f, -0.005136f, -0.000238f, -0.001010f, 0.000821f, 0.004286f, 0.001523f, 0.000078f, 0.002943f, -0.001631f, -0.002661f, -0.002065f, -0.002912f, 0.004185f, -0.011406f, 0.009667f, 0.011813f, -0.008688f, -0.010516f, -0.008895f, 0.004820f, -0.000900f, 0.017119f, 0.029810f, -0.016729f, 0.001100f, -0.000688f, -0.002086f, 0.002787f, 0.008620f, -0.024474f, 0.021981f, -0.017243f, -0.008547f, 0.022144f, -0.005131f, -0.010571f, 0.007324f, 0.008192f, 0.000484f, -0.001223f, -0.017092f, 0.010678f, -0.002448f, 0.003719f, -0.011318f, 0.014111f, -0.001306f, -0.023546f, -0.025169f, 0.008425f, -0.004629f, -0.012977f, 0.006364f, -0.001061f, 0.038957f, 0.006556f, -0.007142f, -0.011586f, -0.022995f, -0.008132f, 0.004447f, -0.005575f, 0.017931f, -0.003780f, -0.026780f, -0.002572f, 0.018388f, -0.008021f, 0.002396f, 0.015922f, 0.010724f, -0.009003f, -0.001702f, 0.012899f, 0.017188f, -0.007825f, - 0.003346f, 0.002480f, -0.008315f, 0.003753f, -0.003840f, -0.001126f, 0.002546f, -0.003976f, -0.004865f, -0.016555f, -0.018157f, -0.015302f, 0.015272f, 0.008571f, 0.009941f, 0.004244f, 0.000095f, 0.006134f, -0.013256f, -0.007281f, -0.018544f, 0.009231f, -0.002365f, -0.002521f, -0.003793f, -0.002723f, -0.009475f, -0.005570f, 0.001908f, -0.003801f, 0.000540f, 0.000755f, 0.000634f, 0.003679f, 0.000440f, 0.004407f, -0.000511f, 0.003262f, -0.004338f, 0.002514f, -0.006490f, 0.000592f, -0.003103f, 0.005430f, 0.000223f, -0.003360f, -0.001047f, 0.001752f, -0.002816f, -0.003083f, -0.007586f, -0.007525f, -0.004239f, 0.007762f, 0.000471f, 0.002777f, 0.004802f, -0.019972f, 0.007575f, -0.021560f, 0.000835f, 0.007850f, -0.003487f, -0.016134f, -0.007594f, -0.003289f, 0.014448f, 0.011480f, -0.008605f, -0.008904f, 0.015406f, 0.006431f, -0.008926f, -0.009627f, -0.007514f, -0.001017f, 0.014897f, -0.002526f, 0.001351f, -0.000828f, -0.000184f, 0.019142f, 0.009485f, 0.012832f, -0.000900f, -0.000917f, 0.006602f, -0.009875f, -0.016661f, 0.013637f, 0.021908f, -0.014791f, 0.018834f, -0.005494f, -0.001908f, -0.008411f, - 0.009706f, 0.000634f, -0.010544f, 0.006462f, 0.017811f, 0.013978f, 0.006438f, -0.013331f, -0.005483f, -0.027034f, 0.004502f, 0.014158f, -0.008702f, -0.002121f, -0.010718f, 0.002862f, -0.006379f, 0.010570f, -0.006683f, 0.003567f, 0.012551f, 0.007218f, 0.023643f, 0.012431f, 0.008000f, 0.015187f, -0.012678f, 0.022764f, 0.007032f, 0.013870f, -0.004527f, -0.015565f, -0.024115f, -0.004504f, -0.004038f, -0.006215f, -0.005652f, 0.009070f, -0.016573f, 0.025172f, -0.004290f, -0.020196f, 0.011573f, 0.018842f, 0.007796f, 0.002514f, 0.003934f, 0.007137f, 0.002402f, -0.004054f, 0.004838f, -0.003702f, -0.000043f, 0.007984f, -0.000006f, -0.000184f, 0.008640f, 0.001351f, 0.004747f, -0.000599f, -0.004019f, 0.001437f, 0.000873f, -0.003315f, 0.002716f, 0.003661f, 0.000965f, -0.002318f, 0.002105f, 0.000858f, 0.006703f, 0.001619f, -0.001186f, 0.004373f, -0.005689f, 0.001828f, 0.001338f, -0.006078f, -0.009077f, -0.002387f, -0.003529f, -0.002177f, -0.004479f, -0.003016f, -0.001861f, -0.000605f, 0.011190f, -0.023811f, 0.017514f, 0.006064f, -0.003599f, 0.025849f, 0.020003f, -0.032825f, -0.021979f, 0.020712f, - 0.035554f, -0.003283f, 0.005254f, -0.003026f, -0.004478f, -0.003552f, -0.001466f, 0.009000f, 0.005362f, 0.021488f, 0.005301f, 0.020563f, 0.005819f, 0.008950f, -0.002782f, -0.011617f, 0.004999f, 0.001613f, -0.009472f, 0.015743f, 0.001631f, 0.006317f, 0.003689f, -0.003251f, -0.014586f, 0.001907f, -0.016549f, -0.005583f, -0.019154f, -0.012815f, -0.007740f, 0.016113f, 0.002313f, 0.007942f, 0.019730f, -0.008521f, -0.001636f, 0.002324f, 0.007094f, 0.002142f, 0.000495f, -0.005529f, 0.014609f, 0.032176f, 0.015488f, -0.025604f, -0.018247f, -0.018948f, 0.022228f, -0.003366f, -0.020573f, 0.012022f, -0.011528f, -0.001257f, -0.003361f, -0.001429f, -0.001580f, 0.000705f, 0.019487f, 0.032207f, 0.012183f, 0.027739f, 0.017793f, 0.008997f, 0.003616f, 0.006989f, -0.008926f, 0.029524f, 0.009559f, -0.015489f, -0.020737f, 0.009160f, 0.006825f, -0.005683f, 0.014796f, 0.027918f, 0.006443f, -0.010782f, 0.017396f, -0.001632f, -0.012792f, 0.002653f, 0.009755f, 0.001584f, -0.001694f, 0.001106f, 0.005357f, 0.009411f, 0.004179f, 0.004167f, 0.001070f, 0.006138f, -0.002604f, -0.001213f, -0.003624f, -0.001048f, - 0.012879f, -0.006849f, 0.004767f, -0.002030f, 0.003072f, 0.000302f, -0.003434f, 0.001907f, 0.004566f, 0.005594f, -0.002663f, 0.002283f, -0.005199f, -0.000159f, 0.002588f, -0.009326f, 0.003955f, -0.013318f, 0.003715f, 0.032026f, 0.006120f, 0.011247f, -0.010275f, 0.008207f, -0.015777f, -0.027908f, 0.000647f, 0.014845f, 0.004456f, 0.011909f, 0.016821f, 0.018447f, 0.001102f, -0.020258f, -0.017158f, -0.026818f, -0.041433f, -0.000782f, -0.004988f, 0.018261f, 0.013623f, -0.015616f, -0.008666f, 0.010684f, 0.021679f, -0.027187f, -0.017499f, -0.005277f, -0.014856f, -0.010187f, -0.005550f, 0.008331f, 0.016835f, 0.000696f, -0.010221f, -0.012623f, 0.017012f, -0.013648f, -0.005718f, -0.000469f, 0.023945f, -0.001745f, 0.001967f, -0.037648f, -0.002836f, 0.009112f, 0.019314f, 0.025032f, 0.005411f, -0.024275f, 0.011428f, 0.000418f, 0.011374f, 0.015734f, 0.002663f, 0.007872f, 0.018159f, 0.031654f, -0.021093f, -0.008408f, -0.001855f, 0.009645f, 0.033759f, 0.014138f, 0.011279f, 0.018858f, -0.006496f, -0.011230f, -0.020263f, -0.025605f, -0.015148f, -0.001066f, 0.016385f, 0.037507f, -0.023438f, -0.017305f, - -0.002403f, 0.036778f, -0.020630f, -0.012057f, -0.018426f, -0.003466f, -0.016514f, 0.005211f, 0.003157f, 0.008698f, 0.019582f, 0.003541f, 0.012546f, -0.008209f, -0.008065f, -0.010503f, 0.000851f, -0.005337f, -0.012206f, -0.011025f, -0.005339f, -0.002955f, -0.002528f, 0.012374f, -0.009314f, -0.002886f, -0.003501f, 0.008831f, 0.002251f, 0.006418f, -0.004193f, -0.004318f, 0.008915f, 0.002894f, 0.002366f, -0.007503f, 0.011486f, -0.005857f, -0.000294f, -0.004108f, 0.003663f, -0.004258f, 0.001210f, 0.007493f, 0.009136f, 0.016674f, 0.009421f, 0.023489f, -0.027782f, -0.019828f, -0.003094f, 0.040768f, 0.016484f, 0.001035f, 0.022059f, -0.013731f, 0.033100f, -0.007767f, -0.029056f, -0.005627f, -0.028874f, 0.023484f, 0.014031f, 0.009221f, 0.009144f, 0.000555f, -0.009259f, 0.011379f, 0.016921f, 0.008535f, -0.005894f, 0.015173f, 0.020267f, 0.018165f, -0.002259f, -0.015733f, 0.027462f, 0.006485f, -0.001676f, -0.004585f, 0.003305f, -0.017892f, 0.017823f, -0.003347f, -0.004935f, -0.022810f, -0.012423f, -0.014070f, 0.032038f, 0.011450f, 0.000350f, 0.004259f, 0.016565f, 0.023817f, 0.012147f, -0.030719f, - 0.028006f, -0.003264f, 0.016206f, 0.006943f, 0.024613f, -0.005601f, -0.032181f, 0.010144f, -0.001453f, 0.013371f, -0.005698f, -0.013118f, 0.011999f, -0.005081f, 0.008151f, 0.040596f, -0.004898f, -0.018606f, 0.000127f, 0.005395f, -0.019643f, 0.032737f, -0.014497f, -0.019636f, 0.028868f, -0.016708f, 0.014746f, 0.002028f, -0.020841f, -0.014763f, -0.020844f, 0.006679f, 0.017563f, -0.010332f, 0.010206f, 0.019504f, -0.010712f, 0.013798f, -0.004385f, 0.023070f, -0.008067f, 0.006975f, 0.007572f, -0.006175f, 0.000179f, 0.001036f, -0.010314f, -0.001199f, 0.009611f, -0.014450f, -0.002708f, 0.010902f, 0.005620f, 0.000506f, -0.008809f, 0.004649f, -0.002268f, 0.003811f, -0.009209f, -0.008863f, -0.004927f, 0.002136f, 0.002476f, -0.010698f, -0.006650f, 0.010432f, 0.001520f, 0.004692f, -0.010909f, 0.005322f, 0.001177f, -0.004782f, 0.002423f, 0.001828f, 0.003825f, -0.005649f, 0.000676f, -0.002616f, -0.000372f, -0.011628f, 0.008701f, -0.026831f, -0.005816f, 0.014456f, 0.002893f, -0.026240f, 0.006477f, -0.009197f, 0.018866f, 0.004691f, 0.009446f, -0.043829f, 0.012954f, 0.000833f, 0.016566f, 0.028286f, - 0.001040f, -0.003559f, 0.001897f, -0.014246f, 0.028230f, -0.027263f, 0.008414f, 0.017265f, 0.011327f, 0.015899f, -0.007725f, -0.013139f, -0.015737f, -0.028218f, 0.010710f, 0.004302f, 0.015960f, 0.029971f, -0.011796f, 0.025699f, 0.013509f, -0.024794f, -0.014603f, -0.000388f, 0.002210f, 0.001317f, -0.000725f, 0.012710f, 0.021560f, 0.020410f, 0.008125f, -0.051803f, 0.012300f, 0.015375f, 0.014815f, -0.034145f, 0.020132f, -0.017539f, 0.017396f, 0.002120f, 0.008938f, -0.004668f, 0.012908f, -0.004169f, 0.043492f, 0.021114f, -0.020253f, 0.002433f, -0.055915f, 0.009260f, -0.016887f, -0.016801f, 0.014974f, 0.011136f, -0.028399f, -0.055134f, 0.034252f, 0.021426f, -0.052323f, 0.020212f, -0.012301f, 0.019797f, -0.004947f, 0.004765f, 0.007485f, 0.000566f, -0.035470f, -0.012994f, -0.005679f, 0.011087f, -0.000966f, -0.008774f, 0.014013f, -0.018592f, -0.007998f, 0.019412f, -0.002332f, -0.001630f, 0.006074f, 0.004095f, 0.006938f, 0.003539f, -0.011059f, 0.004376f, -0.016214f, 0.009731f, -0.007486f, 0.005601f, 0.003431f, -0.004034f, -0.003063f, -0.002696f, -0.006229f, 0.002960f, -0.009632f, -0.001307f, - -0.008275f, -0.005471f, -0.013191f, 0.006539f, -0.004451f, -0.003170f, -0.007912f, 0.003456f, 0.005468f, 0.004279f, 0.002613f, 0.001391f, 0.001074f, 0.004894f, -0.001083f, 0.005303f, 0.003501f, 0.012116f, -0.007160f, -0.006425f, -0.011206f, 0.020340f, -0.015534f, 0.000172f, 0.003022f, 0.052217f, -0.007099f, 0.037712f, 0.009287f, 0.028403f, 0.001805f, 0.008128f, 0.009223f, 0.050348f, 0.050437f, -0.026037f, -0.023805f, 0.028825f, -0.036534f, 0.000045f, 0.009884f, -0.036410f, 0.020746f, 0.002951f, -0.002906f, -0.006600f, -0.011101f, 0.004417f, 0.003931f, 0.006856f, -0.022380f, 0.000211f, -0.005459f, -0.029405f, 0.015022f, 0.020532f, -0.032882f, -0.024453f, -0.012021f, 0.017763f, 0.017227f, 0.016518f, -0.001772f, -0.006639f, 0.015468f, 0.052429f, 0.028249f, -0.010285f, -0.006824f, -0.007111f, 0.035376f, -0.028257f, 0.013071f, 0.007529f, -0.044117f, -0.018255f, -0.001983f, 0.006036f, -0.037392f, 0.025786f, 0.016775f, 0.007535f, 0.007122f, 0.017891f, -0.035410f, -0.004264f, -0.029372f, 0.001330f, 0.018238f, 0.030697f, 0.018889f, -0.019385f, -0.010315f, -0.001522f, 0.001034f, -0.022276f, - 0.049874f, -0.003948f, 0.006645f, -0.011747f, 0.017114f, -0.003786f, 0.010013f, -0.004510f, 0.006229f, 0.004698f, 0.010862f, -0.001265f, 0.000197f, -0.004066f, 0.002588f, -0.000773f, -0.002793f, 0.014705f, -0.004374f, -0.010858f, -0.000610f, -0.001224f, 0.007542f, -0.011070f, 0.002543f, -0.009185f, -0.014372f, 0.008868f, -0.002650f, -0.009852f, 0.000824f, -0.000215f, 0.001734f, -0.008680f, 0.011524f, 0.002955f, 0.014146f, -0.017481f, -0.001176f, 0.008150f, -0.004368f, -0.014207f, -0.000224f, 0.015228f, 0.006933f, -0.004704f, 0.024055f, 0.037299f, -0.002598f, 0.002426f, -0.023102f, 0.001941f, -0.001018f, -0.016514f, -0.027587f, -0.005296f, -0.012774f, -0.020673f, -0.015113f, 0.023377f, -0.019816f, 0.016953f, -0.005973f, -0.004732f, 0.032740f, -0.022668f, -0.012647f, 0.005001f, 0.013207f, 0.001920f, -0.043316f, -0.026628f, 0.004955f, -0.006990f, 0.007027f, -0.006074f, -0.013596f, 0.027600f, 0.005915f, -0.002401f, -0.011342f, -0.062313f, 0.037410f, -0.011292f, -0.000679f, -0.005328f, 0.002382f, 0.017832f, -0.010375f, -0.017023f, -0.029074f, -0.002770f, 0.012838f, -0.017978f, -0.023037f, 0.009469f, - 0.036579f, -0.006241f, 0.034019f, 0.025016f, -0.024900f, 0.045767f, 0.030277f, -0.030235f, -0.046664f, -0.013454f, -0.020336f, 0.002467f, -0.014785f, -0.003660f, 0.022354f, -0.039053f, 0.019116f, -0.006375f, -0.021923f, -0.024520f, -0.024456f, -0.029672f, 0.006179f, 0.017758f, -0.015921f, 0.025389f, -0.003304f, -0.014870f, -0.030565f, 0.000467f, -0.003423f, 0.011788f, 0.036486f, -0.013223f, -0.027638f, -0.009679f, 0.000810f, 0.009350f, 0.024972f, 0.006537f, -0.003087f, -0.020491f, -0.000149f, 0.000736f, 0.009294f, 0.003835f, 0.000058f, 0.006871f, 0.010237f, -0.007696f, 0.012779f, -0.007389f, 0.005858f, 0.014798f, 0.013376f, 0.000786f, -0.020888f, -0.008617f, 0.003197f, 0.005128f, -0.014516f, 0.023561f, -0.014284f, 0.010754f, 0.012771f, -0.009709f, 0.001292f, 0.002564f, -0.005504f, -0.020027f, 0.004277f, 0.008951f, 0.001619f, 0.016774f, 0.011753f, -0.011456f, -0.039542f, 0.071956f, 0.101266f, -0.009770f, 0.012338f, 0.006503f, 0.024527f, 0.049106f, -0.046872f, 0.000565f, 0.008120f, 0.000933f, -0.016905f, 0.002537f, -0.020885f, 0.024653f, 0.060324f, -0.012731f, 0.001295f, 0.003449f, - 0.018273f, 0.001684f, 0.007082f, 0.023209f, -0.046483f, -0.003455f, 0.045602f, 0.046867f, -0.054768f, -0.011611f, 0.007874f, 0.007722f, 0.016296f, 0.041254f, 0.011598f, 0.083201f, 0.013841f, 0.025686f, 0.012249f, -0.013054f, -0.017268f, -0.000979f, -0.058386f, -0.083961f, -0.028442f, -0.027237f, -0.087500f, 0.013714f, -0.002095f, -0.048846f, -0.023860f, -0.081839f, -0.008969f, -0.011251f, 0.055776f, -0.054650f, 0.034086f, -0.037337f, -0.003063f, -0.024548f, -0.019410f, 0.021968f, 0.050119f, -0.038621f, -0.014520f, -0.003484f, -0.011460f, -0.004080f, 0.021128f, 0.040223f, 0.042901f, -0.030611f, 0.086313f, 0.057932f, 0.007522f, -0.032723f, -0.071062f, -0.016096f, -0.026465f, -0.019371f, 0.004666f, 0.022835f, -0.014933f, 0.008532f, 0.026780f, 0.004373f, -0.008529f, 0.027256f, 0.018112f, 0.009363f, 0.011926f, 0.028615f, 0.028815f, 0.000251f, 0.002336f, 0.011591f, 0.010788f, -0.004679f, -0.008616f, -0.004909f, 0.005252f, -0.000678f, -0.003657f, 0.001836f, -0.005762f, 0.004020f, 0.018783f, -0.000774f, 0.006614f, 0.022996f, -0.006024f, -0.008190f, -0.008807f, -0.000933f, -0.012769f, -0.002523f, - 0.010866f, -0.005924f, -0.003503f, 0.002249f, 0.000058f, 0.002009f, -0.001829f, 0.009087f, -0.006136f, -0.006273f, 0.014853f, 0.010579f, -0.011614f, -0.000541f, -0.006223f, -0.036161f, 0.066247f, 0.110277f, -0.025902f, -0.005616f, 0.019645f, 0.049385f, 0.016689f, -0.028636f, 0.018034f, -0.024451f, 0.006443f, 0.015657f, -0.005819f, -0.032986f, 0.010047f, 0.035215f, -0.008654f, -0.050248f, 0.039495f, -0.011474f, 0.032266f, -0.011811f, -0.007820f, -0.012321f, -0.020221f, -0.000716f, 0.035838f, 0.020051f, 0.006050f, 0.028984f, -0.013567f, -0.011327f, 0.011156f, -0.015300f, 0.020141f, 0.011782f, 0.030732f, 0.052519f, 0.046072f, -0.032918f, -0.061379f, -0.022333f, -0.003693f, 0.048313f, -0.018266f, 0.008718f, 0.019605f, -0.018941f, -0.028182f, -0.045219f, -0.046417f, 0.036883f, 0.039347f, -0.031103f, -0.111987f, 0.009453f, -0.007700f, -0.015195f, 0.008916f, -0.010998f, -0.044802f, -0.020819f, -0.010347f, -0.031075f, -0.013170f, 0.047954f, 0.018302f, 0.027735f, -0.010572f, -0.015404f, -0.009913f, 0.026768f, 0.004691f, 0.005202f, 0.023061f, 0.066463f, -0.005541f, -0.009490f, -0.033207f, -0.031392f, - -0.045944f, -0.004721f, 0.026387f, 0.018093f, -0.018601f, 0.014083f, -0.008455f, -0.010706f, -0.019009f, -0.017257f, 0.016215f, -0.013292f, 0.015829f, 0.007602f, 0.009057f, -0.009584f, -0.014138f, 0.016541f, 0.010330f, -0.003760f, 0.012548f, -0.016657f, 0.007413f, -0.001981f, 0.010390f, -0.005276f, -0.009420f, -0.005142f, -0.004530f, 0.011773f, 0.005943f, -0.000165f, -0.011639f, -0.002443f, 0.024161f, -0.016717f, -0.000148f, -0.016214f, 0.020777f, -0.010632f, -0.004307f, -0.014925f, 0.002497f, -0.006138f, 0.002498f, 0.017795f, 0.017782f, 0.004072f, 0.000578f, -0.006199f, -0.023452f, -0.003489f, -0.019336f, 0.010270f, -0.027495f, -0.045728f, -0.009647f, -0.007833f, 0.008749f, -0.015756f, 0.035374f, -0.021083f, -0.071071f, -0.038926f, 0.025057f, -0.033876f, 0.040022f, 0.035206f, -0.015313f, -0.005614f, 0.005497f, -0.021997f, 0.000469f, 0.011386f, -0.002743f, 0.006097f, 0.050605f, 0.041654f, -0.010797f, -0.066776f, -0.050107f, 0.003538f, 0.035637f, -0.026970f, -0.011121f, -0.031655f, -0.039904f, 0.003489f, -0.010993f, -0.047436f, -0.051049f, -0.075652f, 0.030707f, 0.010175f, 0.002030f, 0.043282f, - 0.058738f, -0.002520f, -0.043266f, -0.033353f, -0.034929f, -0.020176f, -0.012143f, 0.013049f, 0.022950f, -0.020395f, -0.031781f, -0.039431f, 0.021121f, 0.018058f, -0.038198f, -0.036941f, -0.014428f, -0.006633f, -0.022177f, 0.013679f, 0.094929f, 0.056586f, 0.110809f, 0.036721f, -0.058481f, 0.068621f, -0.002765f, -0.035487f, 0.003645f, -0.033424f, -0.072273f, -0.030225f, 0.016830f, 0.034341f, -0.007979f, 0.031617f, 0.018568f, 0.070139f, 0.076947f, 0.062946f, 0.021109f, -0.017988f, -0.010996f, -0.010656f, 0.013506f, 0.017617f, -0.026577f, -0.010117f, 0.004503f, 0.057148f, -0.007917f, 0.004711f, -0.006182f, 0.020514f, 0.020948f, 0.024288f, -0.001201f, 0.000232f, 0.000440f, 0.005084f, -0.002225f, 0.003219f, -0.020904f, -0.006952f, -0.007156f, -0.019858f, -0.020260f, -0.009621f, 0.007351f, 0.024016f, -0.015701f, 0.003409f, 0.008503f, 0.027325f, 0.037325f, 0.025309f, 0.023852f, 0.026334f, 0.005852f, -0.010234f, -0.020566f, -0.029861f, -0.036864f, -0.029274f, -0.017166f, -0.035223f, -0.035574f, -0.014016f, -0.006301f, 0.065893f, -0.037418f, 0.004297f, 0.019381f, -0.008315f, -0.048838f, 0.049399f, - 0.047200f, -0.027157f, -0.037337f, 0.005100f, 0.065356f, -0.034277f, 0.018648f, 0.041856f, 0.012845f, -0.015775f, -0.031184f, -0.020532f, 0.014535f, -0.004989f, 0.011091f, -0.018326f, 0.012245f, -0.040568f, 0.059375f, -0.005764f, 0.013382f, -0.002831f, -0.074713f, 0.023269f, -0.020634f, 0.038526f, 0.023292f, 0.041165f, -0.016018f, -0.072140f, 0.051851f, 0.023275f, -0.024441f, -0.044926f, 0.037196f, 0.019855f, 0.039552f, 0.039817f, -0.034687f, 0.015958f, 0.041738f, -0.061116f, 0.056048f, 0.027508f, -0.001698f, 0.017762f, -0.031596f, 0.070067f, -0.007827f, 0.046097f, 0.020791f, 0.081366f, -0.005634f, -0.014317f, 0.011539f, 0.033074f, 0.022058f, 0.023007f, 0.082309f, 0.004784f, 0.020175f, 0.048015f, -0.031706f, 0.032934f, 0.003974f, -0.054740f, 0.020434f, -0.018480f, 0.061929f, -0.045611f, -0.054681f, -0.057030f, 0.048741f, 0.079855f, -0.025439f, 0.020288f, -0.094155f, 0.008931f, 0.004608f, -0.003654f, -0.044059f, 0.007322f, 0.018742f, -0.014628f, -0.012064f, -0.011905f, 0.029917f, 0.013934f, -0.018760f, -0.020372f, -0.011653f, -0.004860f, -0.005831f, 0.008497f, -0.032415f, -0.019543f, - 0.017336f, 0.007058f, 0.006218f, 0.000971f, 0.014949f, -0.002611f, -0.001646f, -0.019161f, 0.025670f, 0.031842f, -0.013566f, -0.049759f, -0.033485f, -0.000448f, 0.000145f, 0.009441f, 0.002605f, -0.015755f, -0.024327f, -0.013502f, 0.009307f, 0.014252f, 0.039916f, 0.013366f, 0.002187f, 0.000562f, -0.029577f, -0.006203f, 0.030959f, 0.018117f, -0.120909f, 0.006640f, -0.014839f, 0.003779f, 0.093553f, 0.077061f, 0.110793f, 0.058549f, -0.029515f, -0.022561f, -0.045961f, -0.061199f, 0.021506f, 0.005385f, 0.016031f, 0.019478f, -0.017879f, 0.027878f, 0.047214f, 0.008701f, -0.012700f, -0.016002f, -0.033520f, -0.022250f, -0.020278f, 0.009245f, 0.015006f, -0.048067f, -0.028484f, -0.006628f, 0.032203f, -0.014558f, 0.020723f, 0.025806f, -0.068355f, -0.067302f, 0.012717f, 0.019506f, 0.014937f, -0.050805f, -0.023410f, -0.045634f, -0.022140f, -0.020896f, 0.043951f, -0.057841f, -0.080582f, -0.030281f, 0.015917f, 0.013686f, -0.062169f, -0.049885f, -0.039259f, -0.029702f, 0.033503f, 0.047299f, 0.002070f, -0.016083f, -0.019722f, -0.010984f, -0.010549f, -0.021392f, -0.069012f, 0.022665f, 0.051725f, 0.047055f, - 0.014579f, 0.064275f, 0.086872f, -0.007596f, -0.011264f, 0.066553f, -0.016207f, -0.040545f, -0.091667f, -0.031222f, 0.012388f, -0.050289f, -0.033739f, 0.023513f, -0.008325f, 0.032613f, 0.057018f, -0.034805f, -0.054053f, -0.017903f, -0.023253f, -0.013436f, -0.014748f, -0.014566f, 0.005970f, 0.008239f, 0.006567f, 0.011576f, -0.019493f, 0.016866f, -0.026887f, -0.003264f, 0.016532f, 0.022261f, -0.024042f, -0.033432f, 0.018993f, -0.007662f, 0.001111f, -0.023356f, 0.027414f, -0.016192f, -0.005934f, -0.006484f, 0.025358f, -0.021643f, 0.027518f, -0.012345f, -0.013050f, 0.018225f, 0.004682f, 0.014500f, -0.011691f, 0.001217f, 0.005270f, 0.029735f, -0.003647f, 0.007000f, 0.079369f, 0.027887f, 0.006401f, 0.029006f, -0.032934f, 0.002170f, -0.016841f, -0.024562f, 0.014650f, 0.005825f, -0.020570f, -0.034097f, -0.019663f, -0.031648f, -0.025819f, 0.010430f, -0.019936f, -0.009650f, 0.014847f, -0.009788f, 0.003320f, -0.010896f, 0.039416f, -0.030810f, 0.032302f, 0.011818f, 0.003584f, -0.029796f, -0.012935f, 0.023902f, 0.009591f, -0.000468f, 0.018967f, -0.003301f, -0.007975f, -0.012152f, -0.010399f, -0.008117f, - 0.003481f, -0.000075f, 0.003909f, -0.034912f, 0.018296f, -0.014550f, -0.013821f, 0.012289f, 0.008265f, 0.004664f, -0.006721f, 0.024646f, 0.021014f, -0.030541f, 0.027288f, -0.003747f, 0.018466f, 0.037072f, -0.007903f, 0.020107f, 0.018920f, -0.018302f, -0.013258f, -0.024423f, 0.002038f, 0.004309f, -0.039466f, 0.016314f, 0.005800f, 0.030696f, -0.012224f, -0.069629f, 0.043541f, 0.002742f, 0.001091f, 0.000991f, -0.030960f, -0.009633f, -0.008296f, -0.010318f, -0.045048f, 0.025641f, 0.012657f, 0.027647f, -0.020186f, 0.012218f, -0.022624f, -0.020372f, 0.000734f, 0.017580f, 0.013914f, 0.000546f, -0.002789f, -0.006210f, 0.001334f, -0.010207f, -0.002342f, 0.029812f, -0.012309f, 0.005991f, 0.002996f, 0.008525f, -0.018482f, 0.019872f, -0.000973f, -0.003688f, 0.004394f, -0.001891f, 0.004282f, 0.006708f, -0.016851f, -0.002211f, 0.000030f, -0.003042f, -0.003311f, 0.009144f, -0.010876f, 0.013308f, 0.018956f, 0.007325f, -0.012280f, -0.000535f, -0.002796f, -0.011122f, 0.013736f, -0.003831f, 0.007368f, -0.040940f, -0.115896f, -0.172578f, 0.036293f, 0.135465f, 0.005703f, 0.370960f, 0.342116f, 0.234898f, - 0.404212f, 0.310830f, 0.042352f, 0.006608f, -0.041880f, -0.296417f, -0.302215f, -0.229880f, -0.395870f, -0.369271f, -0.105517f, -0.123250f, -0.124513f, 0.029550f, 0.074978f, -0.061859f, -0.020578f, 0.118688f, 0.075664f, -0.004124f, 0.088323f, 0.061184f, 0.004634f, 0.073880f, 0.175048f, 0.115100f, 0.040144f, 0.179312f, 0.132754f, 0.010350f, 0.154123f, 0.208890f, 0.050167f, 0.022609f, 0.213119f, 0.058367f, -0.082979f, 0.107299f, 0.164160f, -0.083897f, 0.038346f, 0.229439f, 0.021795f, 0.037911f, 0.276989f, 0.217682f, 0.018384f, 0.172719f, 0.229086f, -0.079549f, -0.047137f, 0.065186f, -0.187417f, -0.313122f, -0.211329f, -0.345296f, -0.512926f, -0.471124f, -0.526955f, -0.671169f, -0.708180f, -0.626480f, -0.662043f, -0.623547f, -0.468169f, -0.373939f, -0.194777f, -0.048576f, 0.110108f, 0.384060f, 0.446984f, 0.485273f, 0.752987f, 0.736162f, 0.494250f, 0.636368f, 0.497283f, 0.197777f, 0.218611f, 0.309146f, 0.151191f, 0.098502f, 0.230987f, 0.164737f, -0.001056f, 0.078892f, 0.179492f, 0.044669f, 0.012399f, 0.133750f, 0.030799f, -0.139557f, 0.044959f, 0.109523f, -0.032225f, 0.098059f, - 0.261389f, 0.103389f, 0.058585f, 0.230055f, 0.125435f, -0.045520f, 0.026659f, -0.059858f, -0.276351f, -0.338432f, -0.336275f, -0.423989f, -0.478946f, -0.396251f, -0.380962f, -0.434352f, -0.392035f, -0.324221f, -0.373407f, -0.341858f, -0.230492f, -0.183543f, -0.175757f, -0.072643f, 0.040874f, 0.048861f, 0.155287f, 0.262841f, 0.276421f, 0.273273f, 0.308792f, 0.285204f, 0.203592f, 0.172427f, 0.153389f, 0.105381f, 0.085696f, 0.105797f, 0.093664f, 0.062624f, 0.065071f, 0.071356f, 0.059524f, 0.057886f, 0.074784f, 0.065060f, 0.043208f, 0.031964f, 0.023129f, -0.010026f, -0.020698f, -0.020894f, -0.020117f, -0.009408f, -0.002847f}, - {0.006995f, 0.009644f, -0.005667f, 0.000385f, 0.000319f, -0.006929f, 0.009254f, -0.003701f, -0.003609f, 0.002632f, -0.009536f, -0.004290f, 0.010232f, 0.002311f, -0.004163f, 0.007257f, 0.002256f, 0.001544f, -0.001492f, 0.003533f, -0.000056f, -0.012246f, -0.000579f, -0.004552f, -0.000544f, -0.000278f, -0.011708f, 0.000170f, -0.007525f, 0.000398f, 0.001188f, 0.005219f, 0.006259f, 0.002053f, 0.001558f, 0.001138f, 0.005408f, -0.002969f, 0.001852f, 0.000335f, 0.000853f, 0.001119f, -0.001618f, 0.004819f, 0.007225f, -0.013881f, 0.006450f, -0.003636f, -0.008339f, -0.005344f, 0.010649f, 0.005330f, -0.003590f, 0.006038f, 0.001764f, -0.003822f, 0.003756f, 0.000075f, 0.000000f, 0.000553f, 0.000733f, -0.001451f, 0.000087f, 0.000783f, -0.000609f, 0.004571f, -0.002839f, -0.006412f, -0.006203f, -0.000041f, 0.002094f, -0.000396f, 0.000304f, 0.003497f, -0.001373f, 0.006141f, -0.006484f, -0.001938f, 0.005003f, 0.005393f, -0.003703f, 0.006080f, 0.002145f, -0.001574f, -0.004097f, -0.001902f, -0.001746f, -0.001634f, -0.001618f, -0.000808f, -0.000226f, -0.000892f, -0.001705f, 0.000524f, 0.001234f, -0.002440f, - -0.000632f, -0.000783f, 0.001275f, -0.002121f, -0.000478f, 0.000306f, 0.005155f, 0.000370f, -0.004109f, 0.002569f, -0.002213f, -0.003295f, 0.000811f, -0.006932f, -0.000828f, -0.005198f, 0.001820f, 0.003230f, 0.003116f, 0.002466f, -0.005405f, -0.000394f, -0.004479f, 0.004782f, -0.009241f, -0.005258f, 0.004662f, -0.010142f, -0.001146f, -0.000684f, 0.002581f, 0.002207f, 0.004975f, 0.010494f, 0.004845f, -0.001328f, -0.000040f, -0.003780f, -0.002936f, -0.018583f, -0.017098f, -0.001164f, 0.012643f, -0.003163f, 0.010097f, 0.000863f, 0.002881f, -0.003164f, -0.014379f, 0.007410f, 0.002266f, -0.004346f, 0.003531f, -0.007640f, -0.001560f, 0.004293f, 0.001892f, 0.013452f, -0.009256f, 0.008153f, -0.004248f, -0.010636f, -0.004940f, -0.002917f, -0.002926f, 0.003736f, 0.003160f, -0.008579f, -0.003828f, -0.004895f, -0.001831f, 0.008241f, 0.008807f, 0.009465f, -0.006964f, 0.001168f, -0.004372f, -0.000590f, -0.003679f, -0.004695f, -0.005693f, -0.006394f, 0.003511f, 0.000990f, -0.000993f, -0.002330f, 0.000833f, 0.003580f, -0.003666f, -0.003220f, -0.001649f, 0.004103f, -0.001436f, -0.000790f, -0.001803f, -0.002087f, - -0.000526f, 0.000895f, -0.000060f, -0.000350f, 0.000679f, 0.000899f, -0.000274f, -0.000400f, 0.002625f, -0.002079f, -0.001320f, 0.001008f, -0.001281f, 0.002031f, -0.001284f, -0.001413f, -0.000289f, -0.000259f, 0.001269f, -0.000669f, -0.000648f, 0.000761f, 0.000160f, -0.002070f, 0.000665f, 0.000483f, 0.006908f, -0.006545f, -0.008447f, -0.007337f, 0.000219f, -0.002906f, -0.002335f, -0.005808f, 0.001263f, -0.006487f, -0.000463f, -0.002677f, 0.009942f, -0.006406f, -0.007001f, -0.015648f, -0.020286f, -0.004924f, -0.009039f, -0.008334f, -0.001979f, 0.004188f, -0.005144f, -0.012192f, 0.007561f, -0.017677f, 0.005318f, -0.002982f, -0.003163f, 0.011405f, 0.008066f, 0.004209f, 0.001594f, -0.001984f, -0.001804f, -0.004312f, 0.001864f, 0.007734f, -0.006221f, 0.007333f, 0.006809f, 0.001957f, 0.001028f, 0.003042f, 0.005224f, -0.011503f, -0.004956f, 0.010933f, -0.008462f, 0.000698f, -0.000141f, 0.006681f, -0.000807f, -0.002569f, 0.001302f, 0.011344f, 0.006328f, 0.003938f, 0.003704f, 0.006315f, -0.009992f, 0.007733f, -0.008147f, 0.007160f, 0.004771f, -0.002144f, -0.001393f, -0.003430f, -0.004448f, -0.007321f, - -0.000323f, -0.002296f, -0.005773f, -0.006461f, -0.003578f, -0.003764f, -0.000602f, -0.000448f, -0.001717f, 0.008613f, -0.003510f, -0.001629f, -0.005811f, 0.005967f, 0.000086f, -0.001335f, 0.001325f, -0.002526f, -0.004172f, 0.000082f, 0.002440f, -0.000296f, -0.000356f, -0.002755f, 0.000847f, -0.000917f, -0.002413f, 0.000151f, 0.000608f, 0.001350f, -0.000254f, 0.000883f, 0.000810f, 0.002016f, 0.000761f, -0.002220f, 0.000154f, 0.001134f, -0.000262f, -0.001948f, -0.001155f, 0.002834f, 0.001531f, -0.001542f, -0.000611f, -0.000617f, 0.004071f, -0.010753f, -0.000257f, -0.005046f, -0.009876f, -0.004593f, -0.001838f, -0.006886f, -0.002326f, -0.006353f, -0.002479f, 0.005003f, 0.006731f, -0.011158f, -0.006348f, 0.003655f, -0.002223f, -0.012191f, 0.008109f, 0.014521f, 0.003044f, -0.003421f, -0.006789f, 0.001606f, 0.007013f, 0.013136f, -0.006680f, -0.002783f, -0.008422f, -0.006753f, 0.007260f, 0.007288f, -0.010222f, 0.006004f, -0.003268f, -0.006521f, 0.010328f, -0.000027f, 0.005632f, -0.014149f, 0.000973f, -0.009073f, 0.002051f, -0.011272f, -0.007080f, -0.001842f, -0.002634f, 0.023510f, 0.007460f, 0.006096f, - 0.004586f, -0.017504f, 0.009785f, 0.006810f, -0.003869f, -0.000440f, 0.007629f, -0.001084f, 0.008061f, 0.009335f, 0.009281f, -0.005385f, 0.000677f, -0.003006f, 0.004938f, -0.004413f, -0.004671f, 0.003074f, -0.004388f, 0.002073f, 0.002902f, 0.000161f, 0.005464f, 0.002169f, -0.010385f, -0.001255f, -0.001328f, 0.003263f, -0.011771f, -0.003782f, -0.002992f, 0.008297f, -0.002533f, -0.001379f, -0.006366f, -0.001682f, 0.000408f, -0.000598f, -0.002970f, 0.000086f, -0.001931f, 0.002146f, 0.000751f, 0.000019f, 0.000337f, 0.000792f, -0.001531f, -0.004377f, 0.002311f, 0.000980f, -0.002528f, 0.001216f, -0.001387f, 0.000524f, 0.000531f, 0.001571f, -0.000362f, -0.000525f, -0.001110f, 0.001006f, -0.001822f, 0.001711f, -0.002072f, -0.000105f, -0.000181f, 0.001366f, -0.001380f, -0.000529f, -0.002000f, -0.001147f, -0.001847f, -0.014548f, -0.008119f, 0.005956f, -0.006375f, 0.017073f, 0.007506f, 0.016715f, -0.000260f, -0.008166f, -0.008711f, -0.011725f, 0.017837f, -0.004368f, 0.008146f, 0.009117f, 0.001880f, 0.006420f, 0.005816f, 0.005679f, 0.002253f, -0.011779f, -0.000680f, -0.004550f, -0.001773f, 0.008083f, - -0.000741f, -0.000719f, 0.005622f, 0.003560f, 0.005823f, -0.005117f, -0.018594f, -0.011084f, -0.007050f, 0.013688f, -0.012376f, -0.003739f, 0.008371f, -0.000941f, 0.001548f, -0.010369f, 0.017983f, 0.000985f, -0.007021f, 0.014214f, -0.008743f, 0.022017f, 0.011363f, -0.004965f, 0.002536f, -0.006268f, -0.004300f, -0.020276f, 0.007175f, -0.009234f, -0.001448f, -0.000788f, -0.004451f, 0.008697f, -0.003402f, -0.008848f, -0.008640f, 0.002016f, -0.007895f, -0.008677f, 0.004950f, 0.000777f, 0.006250f, -0.003383f, -0.018521f, 0.006405f, 0.008039f, 0.010359f, -0.009968f, -0.011198f, 0.001454f, 0.018364f, 0.002949f, -0.009473f, -0.004352f, -0.001593f, 0.005029f, 0.000935f, 0.005356f, -0.005381f, -0.002050f, -0.001042f, -0.006641f, -0.005417f, 0.008157f, -0.001337f, 0.003200f, -0.000685f, -0.002323f, -0.005167f, -0.000498f, 0.000232f, 0.002030f, -0.000940f, 0.001888f, -0.001314f, -0.004221f, -0.001661f, -0.000581f, -0.000062f, -0.000760f, 0.003215f, 0.000185f, 0.003479f, -0.001155f, -0.000204f, -0.000529f, -0.003702f, -0.000005f, 0.001987f, 0.001946f, 0.014687f, -0.013514f, 0.006749f, 0.017239f, -0.012429f, - 0.003410f, -0.006984f, -0.013554f, 0.020059f, 0.007493f, 0.018643f, 0.017165f, 0.002533f, -0.013703f, -0.008371f, 0.007104f, -0.000873f, 0.002959f, -0.014799f, 0.001545f, -0.026311f, -0.011073f, -0.020519f, 0.012658f, -0.011648f, -0.000430f, 0.003805f, -0.003405f, -0.005294f, 0.006222f, 0.006275f, 0.018201f, -0.002510f, -0.004052f, -0.013918f, -0.011923f, 0.011662f, 0.002492f, 0.004042f, 0.021770f, -0.006558f, 0.000141f, 0.011626f, -0.005215f, 0.005394f, 0.003982f, 0.011636f, 0.010428f, -0.007195f, -0.001145f, -0.014751f, 0.015371f, -0.010062f, -0.013358f, -0.012799f, 0.008113f, -0.004723f, -0.007047f, 0.015184f, -0.004730f, 0.015738f, -0.009675f, -0.007310f, -0.002020f, 0.010323f, 0.013322f, -0.000969f, -0.014413f, 0.005247f, -0.009218f, 0.018790f, 0.003873f, 0.011058f, -0.015096f, -0.006615f, 0.004027f, -0.003822f, 0.009075f, 0.001389f, -0.005149f, 0.005486f, 0.012032f, 0.017040f, 0.013097f, 0.000247f, -0.003088f, -0.000155f, 0.002821f, 0.000314f, -0.002960f, 0.002045f, -0.002495f, -0.000364f, 0.004833f, 0.000307f, -0.002397f, 0.005240f, -0.001676f, -0.002714f, 0.001343f, 0.001866f, - -0.000109f, -0.003214f, 0.001187f, -0.002199f, 0.000454f, -0.004391f, -0.005491f, 0.001415f, 0.002057f, -0.000114f, 0.004241f, -0.001495f, 0.001914f, 0.008687f, -0.022997f, 0.008000f, 0.006871f, 0.004559f, -0.017379f, 0.013260f, 0.021948f, -0.021409f, 0.008175f, -0.013178f, 0.008649f, 0.001129f, 0.007774f, -0.006371f, -0.000449f, 0.005016f, -0.014522f, -0.007252f, -0.006242f, 0.011486f, 0.012133f, -0.004007f, 0.005716f, -0.002994f, 0.008974f, 0.011381f, 0.004480f, 0.003415f, -0.011544f, -0.004377f, -0.014424f, -0.016044f, -0.011170f, 0.001042f, -0.005333f, -0.000782f, -0.006666f, -0.015977f, -0.005378f, 0.003213f, 0.001470f, -0.001005f, 0.024154f, -0.019568f, 0.007225f, -0.009766f, -0.002794f, -0.006101f, -0.006127f, 0.010217f, -0.006100f, 0.000744f, -0.007394f, -0.004988f, -0.008987f, 0.012271f, -0.011304f, 0.010059f, -0.002614f, 0.010048f, -0.000900f, 0.001486f, -0.001030f, 0.009710f, 0.005652f, -0.000326f, 0.020948f, 0.000789f, -0.010474f, 0.005470f, -0.009420f, -0.011630f, -0.013951f, 0.013536f, 0.004817f, 0.012053f, 0.012348f, 0.014417f, 0.008513f, -0.001787f, -0.002581f, -0.002659f, - 0.013926f, -0.002091f, 0.015612f, 0.003280f, -0.000657f, -0.002429f, 0.005361f, 0.007898f, 0.002087f, 0.003217f, 0.001104f, -0.001106f, 0.001562f, -0.002671f, 0.004203f, 0.000141f, 0.003606f, -0.001119f, 0.003422f, -0.000418f, -0.005444f, 0.002651f, 0.003758f, -0.000057f, 0.003058f, -0.001016f, 0.000178f, -0.003207f, 0.002641f, -0.000809f, 0.001295f, 0.005731f, 0.005778f, -0.024193f, -0.001923f, 0.003131f, -0.005603f, -0.019056f, 0.021787f, -0.001420f, 0.000794f, 0.018507f, -0.005192f, -0.019074f, 0.006709f, 0.012479f, 0.023631f, -0.001532f, 0.009976f, 0.002033f, -0.020832f, -0.006129f, -0.010841f, 0.010585f, 0.006018f, 0.005524f, -0.007812f, -0.001436f, -0.000901f, 0.001892f, -0.007062f, 0.009857f, 0.002714f, -0.008390f, 0.012190f, 0.001709f, -0.013697f, -0.011495f, 0.003168f, 0.014768f, 0.013241f, -0.018540f, 0.036215f, -0.001812f, 0.000656f, 0.009957f, -0.001468f, -0.004773f, -0.000352f, 0.023281f, -0.011685f, 0.011508f, -0.002837f, 0.016113f, 0.004835f, 0.014441f, -0.005519f, -0.011380f, 0.007999f, 0.012347f, -0.006155f, -0.013831f, -0.015046f, -0.013244f, -0.006009f, -0.002682f, - 0.013761f, 0.000333f, 0.011959f, -0.001446f, -0.003969f, 0.011879f, -0.010389f, -0.020050f, -0.005345f, -0.012804f, -0.012063f, -0.022294f, 0.016617f, 0.014501f, 0.005954f, -0.034570f, 0.008119f, 0.007279f, -0.002593f, -0.001016f, -0.012064f, 0.016516f, 0.008454f, 0.006539f, 0.004036f, 0.015168f, -0.001323f, -0.001087f, 0.001118f, -0.000156f, 0.003523f, 0.001720f, 0.000068f, 0.004649f, -0.002802f, -0.000629f, -0.003579f, 0.001038f, 0.001202f, 0.005122f, -0.003585f, -0.000563f, -0.001410f, 0.003946f, -0.001830f, 0.001467f, 0.002334f, 0.003158f, -0.002742f, 0.007579f, -0.000021f, -0.000233f, -0.002793f, 0.002958f, -0.004751f, 0.001673f, 0.000194f, -0.006940f, -0.001629f, -0.001152f, -0.013783f, -0.000931f, 0.001074f, 0.010039f, -0.014505f, 0.000736f, -0.002224f, -0.006055f, -0.030131f, -0.003651f, 0.014254f, 0.011000f, 0.014606f, 0.001688f, -0.016181f, 0.042807f, 0.018034f, 0.029113f, 0.003069f, -0.012749f, -0.005057f, -0.004137f, -0.018136f, -0.001147f, -0.007095f, 0.009122f, 0.000089f, 0.000942f, -0.005781f, -0.007772f, -0.015324f, 0.005178f, 0.001561f, 0.000756f, 0.007978f, -0.000656f, - 0.003417f, -0.001533f, -0.013302f, -0.010368f, 0.008134f, 0.000049f, 0.019505f, -0.024579f, 0.019732f, 0.012070f, -0.008616f, -0.017770f, -0.027695f, 0.005873f, 0.021975f, -0.011211f, 0.021275f, -0.001661f, -0.000877f, 0.004879f, -0.006155f, -0.024635f, 0.003031f, 0.011655f, 0.005271f, -0.010696f, -0.002724f, -0.006707f, 0.005529f, 0.011957f, -0.000544f, 0.003060f, -0.001538f, 0.011514f, -0.005067f, -0.003919f, 0.007937f, -0.006797f, 0.018194f, -0.004828f, -0.009082f, 0.006743f, -0.016301f, -0.008352f, 0.000232f, 0.006499f, -0.007010f, 0.003061f, -0.002488f, 0.003624f, 0.000221f, 0.004304f, 0.003826f, -0.001451f, 0.002329f, -0.007759f, 0.004318f, -0.001051f, -0.010386f, -0.003640f, -0.002864f, -0.006311f, 0.000110f, 0.001836f, -0.004795f, -0.003508f, -0.000115f, -0.006649f, 0.000597f, 0.001706f, -0.001330f, -0.007038f, 0.000750f, -0.000105f, -0.005197f, 0.002192f, 0.004062f, -0.004328f, -0.000150f, 0.001266f, 0.000557f, 0.002051f, 0.006352f, 0.005171f, -0.005195f, -0.004281f, 0.004771f, -0.033133f, 0.023707f, 0.021374f, 0.025243f, -0.008160f, -0.022510f, 0.007851f, 0.009052f, -0.033715f, - -0.030607f, 0.029603f, 0.003245f, -0.014557f, 0.011229f, -0.021094f, -0.023910f, 0.003339f, 0.062288f, 0.028852f, 0.011563f, -0.016995f, 0.000281f, -0.006110f, 0.000492f, -0.007179f, -0.003462f, -0.007965f, 0.002244f, 0.017657f, 0.003518f, 0.021787f, -0.008660f, -0.007322f, 0.004004f, 0.015202f, -0.002920f, -0.002280f, -0.032569f, -0.001462f, -0.018343f, -0.001056f, 0.025254f, 0.017940f, -0.006677f, 0.017534f, 0.035044f, -0.016762f, 0.010122f, 0.028956f, -0.021320f, 0.030610f, -0.002558f, 0.012551f, -0.007276f, 0.001226f, -0.004148f, 0.004193f, 0.007112f, 0.030367f, -0.011665f, -0.003904f, 0.007913f, -0.014246f, 0.008948f, 0.004640f, -0.008165f, -0.013880f, 0.029978f, -0.002044f, -0.016463f, -0.005500f, 0.018590f, -0.007874f, 0.012619f, -0.000135f, 0.000908f, -0.019826f, -0.021532f, -0.010405f, -0.018366f, -0.016645f, -0.017994f, -0.001138f, -0.004288f, 0.008719f, -0.001130f, 0.001549f, -0.001641f, 0.010986f, 0.007014f, 0.000765f, -0.013640f, 0.000481f, -0.002553f, -0.010168f, -0.002899f, -0.005243f, 0.005332f, 0.002017f, -0.006934f, -0.002334f, -0.005317f, -0.004182f, -0.000489f, 0.003800f, - 0.003721f, 0.003888f, 0.006678f, -0.004109f, 0.000849f, 0.004188f, -0.002903f, -0.004001f, 0.004906f, -0.006907f, -0.002717f, -0.002122f, 0.003094f, 0.001324f, 0.004969f, 0.000868f, 0.000510f, -0.001951f, -0.004991f, 0.040415f, 0.007240f, 0.005727f, -0.021033f, -0.012167f, 0.001048f, 0.004676f, 0.008167f, 0.009396f, -0.040093f, 0.001833f, 0.002518f, 0.028975f, 0.004619f, 0.007391f, -0.002766f, 0.026363f, -0.043053f, 0.001351f, 0.022034f, -0.025609f, 0.006401f, 0.005057f, 0.020749f, 0.004113f, 0.002199f, -0.007016f, 0.000657f, -0.021980f, 0.007446f, -0.005463f, 0.003890f, 0.006023f, -0.003781f, -0.016661f, 0.006102f, -0.013143f, -0.022943f, 0.012986f, -0.012977f, 0.008557f, -0.021572f, -0.013553f, -0.002292f, -0.006646f, 0.005138f, -0.009120f, 0.023625f, -0.000229f, 0.022526f, -0.023747f, -0.020122f, -0.006406f, 0.000320f, -0.000349f, -0.007005f, 0.020332f, 0.016554f, 0.042355f, -0.006802f, 0.027112f, -0.015865f, -0.002663f, 0.008147f, -0.032056f, 0.036637f, -0.000926f, 0.022808f, -0.000845f, -0.032002f, -0.019228f, 0.013461f, -0.042763f, 0.022291f, 0.006214f, 0.032541f, 0.041085f, - 0.005332f, -0.030354f, -0.023013f, -0.009424f, 0.023364f, -0.002794f, -0.005663f, 0.001350f, -0.008569f, 0.001301f, -0.006272f, -0.009162f, -0.003188f, -0.014774f, -0.000729f, 0.000719f, -0.006880f, -0.006137f, -0.008396f, -0.005937f, -0.002880f, 0.003772f, 0.007136f, 0.002697f, -0.001184f, 0.006560f, -0.004472f, -0.002449f, 0.001521f, 0.003488f, 0.004167f, -0.004127f, 0.005273f, -0.005390f, -0.002545f, -0.007886f, -0.013842f, 0.008601f, 0.001486f, -0.007835f, -0.007924f, -0.001490f, -0.010987f, 0.001529f, 0.000117f, 0.008191f, 0.020519f, 0.031783f, 0.010877f, -0.013073f, 0.029979f, -0.032206f, -0.003511f, -0.009854f, 0.003843f, 0.025825f, -0.023459f, 0.058131f, 0.007548f, 0.014442f, -0.017263f, -0.023371f, 0.007945f, 0.000252f, 0.049179f, -0.007024f, -0.017244f, -0.028147f, -0.019165f, 0.013802f, 0.008666f, 0.008095f, -0.003715f, -0.027705f, -0.042962f, 0.003265f, -0.025960f, 0.034390f, 0.004328f, 0.027940f, -0.017380f, 0.011718f, -0.011292f, 0.014509f, 0.040120f, -0.006624f, -0.004407f, -0.006019f, 0.010370f, 0.013454f, 0.006745f, 0.003017f, 0.004019f, 0.017546f, 0.015580f, -0.008986f, - -0.013957f, -0.012368f, -0.013976f, 0.046115f, 0.018051f, -0.026937f, 0.020693f, -0.006072f, -0.022224f, -0.015787f, 0.008007f, 0.016928f, -0.031623f, -0.041032f, 0.004468f, -0.018281f, 0.053874f, 0.028129f, -0.009392f, -0.006061f, 0.011319f, 0.024433f, 0.006115f, -0.004050f, -0.007295f, -0.037190f, -0.001865f, -0.009042f, -0.040583f, 0.015416f, 0.025369f, -0.004047f, 0.012650f, 0.007156f, 0.025879f, -0.014191f, -0.003952f, 0.009432f, -0.004168f, -0.011634f, -0.013364f, -0.000256f, -0.008114f, -0.019641f, -0.004181f, -0.008994f, 0.008485f, -0.003727f, -0.011014f, 0.007669f, 0.002910f, 0.001201f, -0.006865f, 0.007654f, 0.001969f, -0.012282f, 0.004204f, 0.005043f, -0.005892f, -0.017095f, -0.008581f, -0.003032f, -0.001962f, -0.000094f, -0.006596f, -0.000740f, -0.004919f, 0.002510f, 0.001940f, -0.003254f, 0.000689f, -0.000133f, -0.005246f, -0.010537f, -0.001504f, 0.002416f, 0.006106f, 0.003270f, -0.008146f, -0.005102f, 0.001917f, -0.015130f, -0.025692f, 0.014841f, -0.008634f, 0.022417f, 0.009973f, -0.023859f, -0.010312f, -0.011969f, 0.005015f, -0.032210f, 0.021792f, 0.030899f, -0.012660f, 0.019356f, - -0.004820f, -0.008226f, 0.014767f, -0.022495f, 0.013971f, 0.025144f, 0.006714f, 0.043207f, 0.020732f, -0.017779f, 0.018234f, 0.008031f, 0.016007f, 0.000979f, 0.022986f, 0.020335f, 0.030842f, 0.011909f, -0.012285f, -0.014298f, -0.019346f, -0.001592f, 0.047923f, 0.001265f, 0.020178f, -0.030031f, 0.062652f, -0.018395f, -0.049396f, -0.023036f, 0.039494f, 0.003379f, -0.005694f, -0.005196f, -0.003080f, 0.029796f, -0.021883f, 0.017358f, -0.004589f, 0.037456f, 0.056667f, 0.029506f, 0.027228f, -0.019960f, 0.032146f, 0.019788f, 0.019019f, 0.022228f, 0.032143f, -0.006479f, -0.056631f, -0.035961f, -0.041194f, 0.010893f, 0.014421f, 0.011961f, -0.009706f, 0.019350f, 0.049651f, 0.003753f, 0.003681f, 0.012409f, -0.002985f, -0.043462f, -0.047223f, -0.015827f, 0.009155f, 0.005279f, -0.002195f, -0.026627f, 0.006652f, 0.001601f, 0.002028f, 0.014394f, -0.003306f, 0.009253f, 0.002886f, 0.017707f, -0.004578f, 0.011920f, -0.009406f, 0.002369f, 0.001639f, 0.020510f, 0.009098f, 0.020476f, 0.002086f, 0.010571f, -0.003804f, 0.002564f, 0.008465f, -0.005298f, -0.013333f, 0.003326f, -0.008026f, -0.014509f, - -0.011867f, -0.002929f, -0.003396f, 0.019996f, 0.003931f, 0.000255f, -0.006176f, 0.003388f, -0.000085f, -0.006790f, -0.008245f, -0.005583f, 0.004273f, 0.012899f, -0.001780f, 0.001484f, 0.001404f, 0.005969f, 0.003790f, -0.012911f, 0.008201f, 0.020786f, 0.024340f, 0.008841f, 0.011414f, 0.019011f, -0.014989f, 0.044171f, 0.017381f, 0.008562f, -0.012628f, -0.033832f, -0.013692f, 0.018500f, -0.001872f, -0.047957f, 0.064586f, -0.022664f, -0.012695f, 0.019940f, 0.000946f, -0.006422f, 0.004650f, -0.012518f, -0.015204f, -0.003285f, -0.035191f, 0.008721f, -0.037816f, 0.001070f, -0.029986f, -0.033703f, -0.006801f, -0.007153f, -0.007433f, -0.024651f, 0.010788f, 0.026432f, 0.007046f, 0.020243f, -0.035104f, 0.034597f, 0.062968f, 0.006540f, -0.025340f, 0.039380f, -0.032327f, -0.051135f, 0.085121f, -0.008721f, 0.006004f, -0.005914f, -0.038123f, 0.029394f, -0.034565f, 0.014957f, 0.051993f, -0.001028f, 0.071426f, -0.055762f, 0.053795f, 0.015702f, -0.035411f, -0.018523f, 0.006703f, -0.033976f, -0.016983f, 0.037872f, -0.037177f, 0.024666f, -0.025016f, 0.013691f, 0.039508f, -0.086834f, -0.038323f, 0.040001f, - -0.074581f, 0.026350f, 0.023064f, 0.042644f, 0.037653f, 0.016983f, -0.003080f, 0.025034f, 0.037347f, -0.040600f, 0.040528f, -0.000747f, 0.013991f, -0.002130f, 0.012682f, 0.003299f, -0.007768f, 0.002810f, -0.011834f, -0.003858f, 0.002995f, -0.002091f, -0.020482f, 0.012876f, -0.003656f, 0.016768f, 0.009983f, -0.014458f, 0.011376f, 0.013995f, 0.010112f, 0.004219f, 0.007224f, 0.004397f, 0.009220f, -0.028367f, 0.015869f, -0.003704f, -0.007785f, 0.020172f, -0.016232f, -0.013154f, 0.006744f, -0.016752f, -0.013698f, -0.016508f, 0.009135f, -0.025026f, -0.074692f, -0.019438f, 0.024470f, 0.057665f, -0.018372f, 0.029118f, 0.000791f, 0.013756f, 0.029861f, 0.019347f, 0.051720f, -0.013370f, 0.002179f, 0.014223f, -0.045851f, -0.029462f, -0.013688f, -0.014810f, 0.010516f, 0.000797f, 0.003855f, -0.023869f, -0.003984f, -0.031605f, -0.025746f, 0.012386f, 0.063869f, 0.036786f, -0.016833f, -0.020431f, 0.030423f, 0.036513f, -0.021766f, 0.009657f, 0.028045f, -0.011094f, 0.061088f, 0.020827f, 0.008945f, -0.047123f, 0.029059f, 0.006011f, 0.022891f, -0.004807f, 0.005883f, -0.007748f, -0.010196f, -0.074317f, - 0.019674f, 0.051457f, 0.025367f, 0.006920f, -0.001478f, 0.025970f, -0.041861f, -0.077202f, 0.005707f, 0.102455f, 0.024606f, 0.081290f, 0.076991f, 0.001071f, 0.006682f, -0.048945f, -0.043925f, -0.004634f, -0.037688f, 0.051342f, -0.111839f, 0.021176f, -0.041929f, -0.089230f, 0.019789f, 0.041850f, 0.089214f, 0.008065f, 0.004410f, -0.056824f, 0.018530f, 0.026938f, -0.039823f, -0.003649f, 0.002757f, 0.041779f, -0.011243f, -0.026542f, 0.063083f, 0.013440f, -0.022633f, -0.000735f, -0.036619f, 0.004903f, -0.034666f, -0.006900f, -0.001263f, -0.016823f, 0.005186f, -0.013571f, -0.014583f, -0.007838f, -0.000237f, -0.006809f, 0.011607f, 0.032829f, -0.001940f, 0.000486f, 0.012107f, -0.029517f, -0.018004f, -0.003452f, 0.008867f, 0.009483f, -0.025905f, -0.014484f, 0.020382f, 0.012200f, 0.007022f, 0.005063f, 0.021523f, -0.000696f, 0.000251f, 0.002354f, -0.014739f, 0.002775f, -0.019382f, 0.054456f, 0.095565f, 0.002332f, 0.026243f, 0.017052f, -0.049949f, -0.014361f, 0.050191f, 0.015619f, 0.022234f, -0.012688f, 0.014721f, 0.008383f, -0.017543f, 0.000650f, 0.026136f, 0.027368f, 0.033721f, -0.014956f, - -0.003941f, -0.074243f, -0.069339f, 0.009452f, -0.042802f, 0.001352f, 0.037471f, 0.008889f, 0.004621f, -0.013011f, -0.008126f, 0.023785f, 0.058540f, -0.042528f, -0.024159f, -0.005674f, -0.041026f, -0.003145f, -0.039534f, -0.012490f, -0.041981f, 0.037110f, -0.050911f, -0.004304f, 0.009381f, 0.024608f, 0.089525f, 0.118993f, 0.031036f, -0.031473f, -0.063376f, -0.005758f, -0.043291f, -0.017214f, -0.067416f, 0.009967f, 0.065371f, 0.047938f, 0.039307f, 0.004555f, 0.009669f, 0.066642f, 0.065058f, 0.047514f, -0.003709f, 0.029935f, 0.011306f, 0.014715f, -0.076703f, 0.023041f, 0.008710f, -0.017890f, 0.046569f, 0.062806f, -0.008552f, -0.001224f, -0.030720f, -0.131538f, -0.002342f, 0.038700f, -0.018886f, 0.090787f, 0.064808f, -0.030191f, 0.006216f, -0.033643f, 0.022825f, 0.006116f, -0.011987f, -0.020200f, -0.008945f, -0.002025f, 0.014330f, 0.017416f, 0.027108f, 0.000593f, -0.016001f, -0.035197f, 0.002239f, -0.016689f, 0.013577f, -0.015758f, -0.021160f, -0.005485f, -0.005340f, 0.015698f, 0.006849f, -0.006176f, 0.008553f, 0.004432f, 0.006832f, 0.001398f, -0.011936f, -0.019517f, -0.009594f, 0.007144f, - 0.016428f, -0.001569f, 0.013438f, -0.000328f, -0.019182f, -0.020343f, 0.005839f, -0.024859f, -0.013688f, -0.000107f, -0.010634f, -0.003185f, 0.007175f, 0.009963f, -0.008987f, -0.023210f, 0.059460f, 0.042429f, -0.028358f, 0.028739f, 0.044163f, 0.005003f, -0.055368f, -0.066053f, 0.061697f, 0.021029f, 0.014259f, 0.048610f, 0.001060f, -0.021138f, 0.052132f, 0.013767f, -0.039589f, -0.020054f, -0.014369f, 0.017628f, 0.001072f, -0.023668f, 0.009132f, -0.026185f, -0.002665f, -0.011798f, -0.012788f, 0.035560f, 0.066194f, -0.022516f, 0.013702f, 0.031246f, -0.015554f, -0.013291f, 0.012761f, 0.037747f, 0.012022f, -0.028910f, -0.036688f, -0.044062f, 0.023622f, 0.024901f, 0.060074f, -0.028438f, -0.027043f, 0.021159f, 0.035771f, 0.056092f, -0.001643f, -0.103761f, -0.022277f, 0.033527f, 0.033330f, 0.015081f, -0.020335f, -0.000719f, -0.041577f, 0.006296f, -0.018007f, 0.043212f, 0.061793f, -0.018648f, 0.001294f, -0.036179f, -0.039324f, -0.015105f, -0.079571f, -0.015951f, -0.040490f, 0.035300f, -0.032420f, 0.036616f, 0.045295f, -0.091963f, -0.007751f, -0.038887f, 0.039343f, -0.016176f, 0.013828f, -0.028580f, - 0.004600f, -0.024341f, 0.027077f, 0.030274f, 0.052134f, 0.050432f, 0.024895f, 0.048522f, 0.022429f, 0.002913f, 0.025574f, 0.016524f, -0.007316f, 0.021613f, -0.024061f, 0.011585f, -0.012345f, 0.010032f, -0.030311f, 0.017937f, 0.000066f, 0.014208f, -0.022347f, -0.012643f, 0.014359f, -0.005811f, -0.007555f, 0.026032f, -0.020591f, -0.004710f, 0.020981f, 0.010413f, -0.014265f, -0.004480f, 0.008485f, 0.048038f, 0.025692f, 0.020938f, 0.028200f, 0.001916f, 0.030664f, 0.010366f, 0.009290f, 0.016090f, -0.000122f, 0.025827f, 0.007017f, -0.044455f, -0.020919f, -0.011883f, -0.021844f, -0.030178f, -0.049907f, -0.011313f, -0.027764f, -0.050624f, -0.076489f, 0.037417f, 0.039608f, 0.023357f, -0.051109f, -0.069560f, -0.053413f, -0.030285f, 0.012541f, -0.002271f, -0.067748f, -0.040426f, -0.046425f, 0.065799f, 0.020484f, 0.028696f, -0.020680f, -0.037370f, 0.083376f, 0.020681f, 0.026020f, -0.015880f, 0.004959f, 0.024719f, -0.017027f, 0.019670f, -0.006116f, 0.039858f, 0.056199f, 0.002586f, -0.045299f, -0.036263f, 0.044529f, 0.030629f, 0.039013f, 0.011416f, 0.009817f, -0.019926f, -0.008765f, 0.006625f, - 0.027282f, 0.059032f, -0.000446f, -0.109560f, -0.101692f, 0.001696f, -0.024804f, 0.066110f, 0.067076f, -0.074297f, -0.050298f, -0.031078f, 0.092870f, 0.082956f, -0.044708f, 0.013512f, -0.058568f, -0.056209f, 0.034545f, -0.025670f, 0.000468f, -0.008327f, -0.040592f, 0.029447f, 0.029991f, 0.024141f, 0.094111f, -0.068479f, -0.018381f, -0.005968f, 0.024251f, 0.008077f, 0.038830f, -0.137078f, -0.079755f, 0.029246f, 0.043344f, 0.043099f, 0.012296f, -0.044897f, -0.046206f, 0.001339f, 0.027659f, 0.080045f, 0.019552f, -0.025883f, 0.008381f, -0.050878f, 0.032176f, 0.028415f, 0.001864f, 0.045144f, 0.095677f, 0.023550f, -0.069774f, -0.036069f, -0.004699f, 0.008727f, 0.046357f, 0.040753f, 0.019269f, -0.020384f, -0.008305f, -0.013803f, -0.016249f, 0.042252f, -0.004573f, 0.004583f, -0.016203f, 0.041032f, -0.018321f, -0.006943f, -0.000685f, 0.035753f, 0.015695f, 0.013275f, -0.006985f, -0.043062f, -0.015297f, 0.015170f, 0.035507f, 0.006967f, -0.048274f, -0.066695f, -0.055867f, -0.000384f, 0.008754f, 0.011434f, 0.007393f, 0.092063f, -0.061119f, 0.057441f, 0.057310f, 0.036584f, -0.133364f, -0.053590f, - 0.044801f, -0.036286f, 0.025967f, -0.009542f, -0.055328f, 0.035489f, 0.010794f, 0.010573f, -0.024393f, -0.088361f, -0.008262f, -0.002700f, 0.000452f, -0.012617f, -0.064257f, 0.048121f, -0.039662f, 0.082187f, -0.008558f, -0.007188f, 0.040157f, 0.029809f, -0.039177f, -0.003647f, -0.029626f, 0.043914f, 0.069298f, 0.052651f, -0.058226f, 0.013081f, -0.038923f, 0.035205f, -0.033792f, -0.013925f, 0.005897f, -0.002972f, 0.037724f, -0.034540f, -0.080891f, 0.020838f, -0.028850f, 0.030256f, 0.031725f, -0.102535f, -0.017269f, -0.019557f, 0.003875f, 0.113541f, -0.030480f, -0.082631f, -0.021823f, 0.072165f, 0.034783f, -0.044750f, -0.014551f, 0.044767f, -0.000051f, 0.055269f, -0.082994f, -0.043910f, 0.050164f, -0.052185f, -0.126610f, -0.037392f, -0.017139f, 0.144641f, -0.039324f, -0.074729f, 0.039899f, -0.086210f, 0.227572f, 0.021537f, -0.211166f, -0.056263f, -0.037175f, 0.149988f, 0.081336f, -0.094291f, -0.049632f, -0.001225f, 0.110987f, 0.088394f, -0.013645f, -0.069503f, 0.027378f, -0.023514f, 0.100111f, -0.009679f, -0.050077f, -0.041577f, 0.065628f, -0.052414f, 0.034073f, -0.100367f, -0.000319f, -0.003845f, - -0.005715f, -0.005893f, 0.021229f, -0.055565f, 0.053939f, 0.004465f, 0.039597f, 0.001594f, -0.063257f, -0.048690f, 0.036234f, 0.042720f, 0.067240f, 0.025052f, -0.006718f, -0.043816f, 0.005969f, 0.010903f, -0.011445f, 0.002873f, 0.044113f, 0.006848f, -0.001964f, -0.050123f, 0.009763f, 0.035605f, 0.013273f, 0.001468f, -0.014545f, -0.036048f, -0.122102f, 0.034254f, -0.001971f, 0.041739f, 0.100926f, 0.032384f, 0.013877f, -0.056874f, -0.023635f, -0.056839f, -0.068134f, -0.022782f, 0.013361f, 0.038959f, 0.051484f, -0.005744f, 0.029931f, 0.036324f, -0.031642f, -0.064058f, 0.033918f, 0.012227f, -0.052117f, -0.017676f, 0.049441f, -0.016812f, -0.005578f, 0.045300f, 0.025339f, 0.020151f, 0.006262f, 0.025762f, -0.024680f, -0.059508f, -0.025933f, 0.016985f, -0.024439f, -0.014049f, 0.021760f, 0.001482f, -0.041981f, 0.043729f, 0.009389f, -0.038817f, 0.004929f, -0.009356f, 0.037568f, 0.020957f, -0.015230f, 0.017686f, -0.023237f, -0.052171f, 0.006945f, 0.012716f, -0.004793f, 0.000138f, 0.010993f, -0.022784f, 0.007160f, -0.019508f, 0.011671f, 0.037246f, -0.003997f, 0.016287f, 0.017169f, -0.014386f, - 0.000884f, -0.035524f, 0.012113f, 0.020970f, -0.064619f, 0.037498f, -0.040320f, 0.012710f, 0.001824f, -0.000179f, 0.017748f, 0.007214f, 0.042101f, 0.007698f, 0.011871f, -0.006085f, 0.021516f, -0.022655f, -0.014967f, 0.005226f, 0.003563f, -0.019824f, 0.007092f, -0.001767f, -0.005820f, -0.011450f, 0.004036f, -0.002257f, 0.022755f, -0.005843f, 0.002664f, 0.016337f, -0.011527f, 0.011351f, -0.007127f, 0.003984f, -0.011538f, -0.010005f, -0.011525f, -0.003012f, -0.005224f, 0.008628f, 0.006082f, -0.026737f, -0.007389f, -0.007812f, 0.018537f, -0.011034f, 0.006878f, 0.003198f, -0.029872f, 0.009910f, 0.019243f, 0.001269f, -0.007352f, 0.003223f, -0.008853f, -0.004413f, 0.098837f, -0.003598f, -0.003289f, -0.027444f, -0.026994f, 0.020346f, -0.001200f, 0.017614f, 0.000303f, -0.009659f, -0.013070f, 0.006699f, -0.018293f, 0.018542f, -0.017229f, 0.027016f, -0.021871f, 0.015743f, -0.018516f, -0.004120f, -0.003005f, -0.017221f, -0.013192f, 0.003895f, -0.007801f, -0.005438f, -0.000160f, -0.012949f, 0.001685f, -0.002572f, 0.004100f, -0.003045f, 0.007524f, -0.025961f, 0.023619f, -0.008888f, -0.007778f, 0.017923f, - -0.014414f, 0.000960f, -0.017995f, -0.015738f, 0.011428f, 0.010092f, -0.012652f, -0.008161f, 0.005062f, -0.000817f, -0.022000f, 0.005624f, 0.003843f, -0.000021f, 0.014410f, -0.005357f, -0.006221f, -0.005931f, -0.015027f, -0.004088f, 0.015727f, -0.016752f, 0.004298f, -0.008126f, -0.002076f, 0.001066f, -0.005107f, 0.003686f, 0.000080f, 0.010999f, -0.016011f, -0.001390f, 0.010320f, -0.020665f, 0.012026f, -0.009313f, 0.000129f, 0.009432f, -0.004588f, -0.009421f, 0.004252f, -0.001677f, -0.002708f, -0.000706f, -0.006731f, -0.000177f, 0.006972f, -0.000465f, -0.003288f, 0.001212f, -0.005833f, 0.004020f, 0.002936f, 0.001708f, -0.004711f, -0.001419f, 0.006041f, -0.007740f, 0.007709f, -0.003544f, 0.003350f, 0.008570f, -0.010335f, 0.002457f, 0.000690f, -0.013040f, 0.002365f, -0.004162f, 0.005362f, -0.001859f, 0.000387f, 0.007885f, -0.005213f, 0.001506f, -0.008394f, 0.001431f, 0.001204f, -0.002105f, -0.002031f, -0.001019f, -0.003031f, 0.000581f, -0.001536f, 0.000332f, 0.005804f, -0.008508f, 0.003710f, -0.046413f, -0.078364f, 0.029057f, 0.250978f, 0.062778f, 0.138384f, -0.005476f, -0.134827f, -0.043825f, - -0.132679f, -0.113395f, -0.040105f, -0.027377f, -0.009303f, 0.075112f, 0.100916f, 0.133401f, 0.168544f, 0.072702f, -0.043234f, -0.078172f, -0.165638f, -0.157481f, -0.064250f, -0.052685f, -0.035148f, 0.067909f, 0.092635f, 0.055323f, 0.085876f, 0.102994f, 0.034790f, 0.028166f, 0.019173f, -0.053538f, -0.024686f, -0.038373f, -0.083472f, -0.046133f, -0.062049f, -0.091918f, -0.050072f, 0.011259f, 0.009719f, 0.051164f, 0.124291f, 0.084982f, 0.070711f, 0.068887f, 0.021121f, 0.004980f, -0.007195f, -0.035934f, -0.051219f, -0.064793f, -0.092575f, -0.081859f, -0.045828f, -0.014461f, -0.031355f, 0.025666f, 0.047795f, 0.040600f, 0.070134f, 0.078203f, 0.050159f, 0.045432f, 0.044394f, -0.007062f, -0.021979f, -0.011099f, -0.063905f, -0.052944f, -0.013657f, -0.052406f, -0.056083f, -0.035545f, -0.050464f, -0.024570f, 0.014221f, 0.032044f, 0.058026f, 0.093135f, 0.057675f, 0.053483f, 0.059150f, 0.021822f, -0.007227f, -0.010940f, -0.032026f, -0.052816f, -0.054892f, -0.052288f, -0.057399f, -0.039914f, -0.036797f, -0.030545f, -0.012735f, 0.014172f, 0.035167f, 0.054658f, 0.082481f, 0.086922f, 0.084661f, 0.071980f, - 0.022616f, -0.018928f, -0.038864f, -0.062364f, -0.082598f, -0.093195f, -0.093138f, -0.073719f, -0.041723f, -0.010056f, 0.025282f, 0.076193f, 0.084657f, 0.084896f, 0.088821f, 0.073496f, 0.038436f, 0.012143f, -0.021185f, -0.059601f, -0.083458f, -0.073571f, -0.068976f, -0.054290f, -0.025521f, 0.002077f, 0.019953f, 0.040828f, 0.046085f, 0.045542f, 0.035997f, 0.016269f, 0.007218f, 0.002760f, -0.007138f, -0.008029f, -0.008278f, -0.010653f, -0.013359f, -0.010319f, -0.014733f, -0.009967f, -0.008525f, -0.005920f, -0.007543f, -0.002851f, -0.001730f, 0.003087f, 0.003135f, 0.007069f, 0.005689f, 0.005383f, 0.000642f, 0.001581f, -0.000869f} - }, - { - {0.005807f, 0.005797f, -0.005219f, -0.000924f, 0.008310f, 0.002729f, -0.004297f, 0.000896f, -0.004747f, -0.004229f, -0.003398f, -0.007449f, -0.002585f, 0.004541f, -0.000364f, 0.002515f, -0.001253f, -0.002112f, -0.002062f, -0.000905f, 0.006263f, -0.003956f, 0.000394f, -0.000283f, 0.000277f, 0.004969f, -0.000160f, 0.003418f, 0.010898f, 0.008495f, 0.008547f, 0.004427f, 0.001943f, -0.001379f, -0.010067f, 0.004135f, -0.003754f, 0.006460f, 0.002297f, -0.003419f, 0.003046f, -0.004497f, -0.008725f, -0.002691f, -0.003369f, -0.008268f, 0.000358f, -0.001016f, -0.001176f, -0.003873f, 0.000533f, 0.008629f, 0.003833f, 0.005865f, -0.000085f, 0.003607f, -0.003366f, -0.000243f, 0.004520f, -0.003728f, 0.003030f, -0.004622f, -0.004912f, 0.000501f, 0.010166f, 0.006693f, 0.003908f, -0.001976f, 0.001706f, 0.001090f, 0.000596f, -0.001833f, -0.003893f, -0.005965f, -0.004318f, 0.000136f, -0.003696f, -0.001851f, -0.003980f, 0.001322f, 0.000616f, 0.002064f, -0.001168f, 0.001698f, 0.002408f, 0.001974f, 0.000266f, 0.001240f, -0.000908f, -0.000994f, -0.000024f, -0.002483f, 0.002625f, 0.002149f, -0.000243f, 0.002715f, - 0.000808f, 0.000547f, -0.001218f, -0.000772f, -0.001559f, 0.000522f, 0.000886f, -0.000028f, -0.000486f, 0.000938f, -0.000593f, -0.002304f, -0.000644f, -0.001542f, -0.000085f, 0.000452f, 0.000577f, -0.002413f, 0.000440f, 0.003725f, 0.001915f, -0.006435f, 0.015197f, -0.000330f, 0.000916f, -0.001612f, -0.008029f, 0.005930f, -0.004191f, -0.004015f, -0.009357f, -0.007212f, -0.003037f, 0.005801f, 0.008344f, -0.001697f, 0.004932f, -0.001929f, 0.009051f, 0.009393f, -0.018776f, 0.003428f, 0.000080f, -0.001848f, 0.006340f, 0.009978f, -0.003093f, -0.001467f, 0.000191f, -0.000626f, -0.004781f, 0.003914f, -0.004820f, -0.003812f, -0.000402f, 0.004991f, -0.002845f, -0.010570f, -0.004706f, -0.007191f, 0.000826f, 0.000622f, -0.009386f, -0.001130f, -0.004105f, 0.001926f, -0.000295f, -0.001434f, 0.002287f, -0.003144f, 0.003163f, -0.005045f, 0.004911f, 0.007191f, 0.011060f, 0.004577f, -0.004858f, 0.003946f, 0.004630f, -0.001766f, -0.012558f, 0.000793f, 0.006512f, -0.005065f, 0.003747f, -0.007299f, -0.000101f, -0.004669f, -0.012759f, -0.003911f, -0.006682f, 0.003199f, 0.004715f, -0.004330f, 0.002010f, -0.002054f, - 0.005992f, 0.000439f, 0.003501f, 0.005004f, -0.002169f, 0.002044f, 0.000999f, 0.002090f, 0.004315f, -0.001055f, 0.001445f, 0.005382f, 0.003060f, 0.000688f, 0.003214f, 0.000535f, 0.001377f, -0.000275f, -0.000096f, -0.002995f, 0.001547f, 0.001810f, 0.002435f, 0.001626f, 0.000529f, 0.000737f, 0.000054f, 0.000878f, -0.000413f, -0.000884f, -0.000257f, 0.001934f, 0.001653f, 0.000453f, 0.001478f, 0.000291f, 0.001713f, 0.001428f, 0.012423f, 0.003422f, -0.016925f, 0.006019f, 0.008656f, 0.003183f, -0.001487f, 0.004422f, -0.010643f, 0.001511f, 0.004688f, -0.002370f, 0.004532f, -0.000717f, 0.005526f, 0.001346f, -0.007194f, 0.004512f, 0.006531f, 0.006481f, -0.001908f, 0.003098f, 0.003517f, 0.002461f, -0.019165f, 0.002689f, -0.008172f, -0.002411f, -0.002735f, 0.004470f, 0.002045f, -0.015621f, -0.005653f, -0.003501f, -0.002993f, 0.006350f, -0.005845f, -0.010933f, 0.002669f, 0.005064f, 0.003129f, -0.010879f, -0.005143f, 0.003481f, -0.010296f, -0.000833f, -0.011374f, 0.001662f, 0.005534f, -0.005820f, -0.001800f, 0.006486f, 0.008237f, -0.019288f, -0.001457f, -0.005362f, 0.005809f, 0.002386f, - 0.000930f, 0.001662f, -0.005462f, 0.004905f, 0.004215f, -0.014981f, 0.011470f, -0.001549f, 0.002797f, -0.007648f, -0.003230f, -0.006470f, -0.000841f, 0.001676f, -0.006032f, -0.008330f, 0.007351f, -0.002691f, 0.003007f, -0.000422f, -0.001543f, 0.002133f, 0.002470f, -0.003046f, -0.007738f, 0.004278f, 0.003846f, 0.000979f, 0.001762f, -0.000252f, 0.000540f, 0.001275f, -0.000103f, 0.001270f, 0.000851f, -0.000184f, 0.002917f, 0.000411f, 0.002223f, 0.002685f, 0.000108f, 0.003790f, -0.000150f, 0.000731f, 0.000977f, 0.001691f, 0.001320f, 0.001879f, -0.002893f, 0.001278f, -0.001342f, 0.000560f, 0.001212f, 0.000909f, 0.002186f, -0.000785f, -0.000726f, -0.008125f, -0.007624f, -0.006341f, -0.004018f, 0.012630f, -0.004412f, 0.001716f, -0.010262f, 0.010877f, 0.000731f, -0.007385f, -0.001940f, 0.006298f, -0.013141f, 0.004453f, -0.003876f, 0.002954f, 0.002125f, -0.006026f, -0.004268f, -0.015642f, -0.004205f, -0.017616f, 0.002283f, 0.003960f, -0.001886f, -0.002403f, -0.001606f, 0.002650f, -0.006888f, -0.012560f, -0.005830f, -0.004626f, -0.001935f, 0.004600f, -0.002889f, 0.007464f, 0.003322f, 0.005718f, - -0.007777f, -0.000448f, -0.000383f, -0.006516f, 0.001809f, 0.005117f, -0.000507f, -0.003255f, -0.007624f, -0.007064f, 0.004752f, 0.007094f, -0.000229f, 0.014057f, 0.011159f, -0.010088f, -0.002564f, 0.000015f, -0.010633f, -0.012178f, 0.018389f, -0.000312f, 0.000506f, 0.005755f, -0.011685f, -0.003857f, -0.007570f, 0.018146f, 0.004907f, 0.000930f, -0.014459f, -0.011495f, 0.001544f, -0.004745f, 0.009384f, -0.004828f, -0.000103f, 0.002560f, -0.005675f, 0.002046f, 0.005664f, -0.008521f, 0.000094f, -0.013580f, 0.001481f, 0.005094f, -0.003919f, 0.001969f, 0.001630f, 0.006640f, -0.000954f, 0.001056f, -0.001314f, -0.000270f, 0.002880f, 0.002947f, 0.002765f, -0.002061f, 0.000884f, -0.000145f, 0.001241f, 0.000080f, 0.001216f, -0.001993f, 0.004282f, 0.000026f, 0.001228f, 0.000637f, 0.001352f, 0.000995f, 0.001237f, -0.001153f, -0.001111f, -0.000978f, 0.000944f, 0.002863f, 0.003385f, 0.000591f, 0.001535f, -0.002802f, -0.021213f, 0.010620f, 0.006019f, 0.010829f, -0.005806f, 0.005938f, 0.006211f, 0.011129f, 0.002642f, -0.021173f, 0.005297f, 0.000919f, 0.008426f, 0.015379f, 0.000816f, 0.006683f, - 0.005857f, -0.012677f, 0.004463f, 0.001181f, 0.001764f, -0.003441f, -0.001755f, 0.007877f, 0.005224f, 0.000326f, -0.007752f, -0.000088f, -0.003695f, -0.004011f, 0.012696f, 0.005868f, -0.000525f, -0.001694f, -0.015326f, -0.013148f, -0.015056f, 0.004013f, 0.004079f, -0.015609f, 0.001116f, 0.001062f, -0.015465f, 0.000977f, 0.002397f, -0.002065f, 0.017791f, -0.002189f, -0.008733f, -0.002196f, 0.010220f, -0.000842f, -0.015836f, 0.017218f, 0.008926f, -0.010951f, 0.008385f, 0.001671f, 0.001616f, -0.000283f, 0.000972f, -0.004253f, -0.007950f, -0.007528f, 0.013767f, -0.000913f, -0.004013f, -0.000639f, 0.009903f, -0.009168f, -0.016190f, 0.000581f, 0.003694f, 0.003038f, -0.014151f, -0.007331f, 0.005456f, -0.001273f, 0.007919f, 0.003017f, -0.002509f, -0.002366f, -0.002158f, -0.001125f, 0.000280f, 0.012578f, 0.007334f, 0.004548f, 0.004029f, 0.004862f, 0.007328f, -0.003499f, -0.001166f, -0.003967f, -0.001205f, 0.001394f, 0.000365f, -0.002196f, -0.003540f, 0.003697f, 0.000567f, 0.001667f, -0.000058f, -0.002262f, 0.000811f, 0.001953f, -0.004473f, -0.000761f, 0.003584f, 0.000774f, 0.000213f, -0.001645f, - -0.000492f, -0.001070f, -0.001942f, 0.000479f, 0.001817f, 0.001449f, -0.001310f, 0.001478f, 0.000128f, 0.006352f, 0.024526f, 0.007254f, 0.019677f, -0.021645f, 0.000863f, -0.010707f, 0.000377f, 0.007133f, 0.008303f, -0.011142f, 0.004882f, -0.006472f, -0.005660f, -0.007758f, -0.012518f, -0.001883f, -0.029527f, -0.000323f, 0.009792f, -0.001345f, -0.001982f, 0.003209f, -0.015478f, 0.005417f, -0.014760f, -0.004710f, 0.015260f, 0.003045f, 0.005286f, 0.000321f, 0.004511f, 0.012949f, 0.011780f, 0.022591f, 0.011784f, -0.017155f, -0.001399f, 0.019026f, -0.002642f, -0.013992f, -0.002094f, 0.001730f, -0.006348f, 0.012736f, 0.009495f, -0.011013f, -0.003178f, 0.012213f, 0.013068f, -0.004681f, -0.008260f, 0.020634f, -0.008490f, -0.027901f, -0.018801f, 0.006105f, -0.028001f, -0.000594f, -0.008362f, 0.000103f, -0.002573f, -0.007869f, 0.010529f, 0.002969f, -0.002713f, -0.009195f, 0.008047f, -0.005522f, 0.014893f, 0.010123f, -0.004031f, -0.009886f, 0.002147f, 0.003855f, 0.001414f, 0.000526f, 0.003545f, -0.002083f, -0.010896f, -0.003196f, 0.015246f, -0.001791f, -0.006156f, -0.001675f, -0.003164f, -0.007893f, - -0.007607f, -0.004265f, -0.003638f, 0.000875f, -0.000038f, 0.007594f, -0.000632f, -0.002776f, 0.001103f, 0.002699f, -0.001798f, 0.001565f, -0.002589f, 0.005155f, -0.000133f, 0.003156f, 0.000509f, -0.005011f, -0.000472f, -0.000567f, -0.005203f, -0.001439f, -0.003153f, 0.002360f, 0.000189f, -0.000832f, 0.001833f, 0.000783f, -0.000491f, 0.000910f, -0.005823f, 0.001249f, 0.001705f, -0.023892f, 0.011341f, -0.002103f, 0.006075f, 0.007924f, 0.012958f, 0.002904f, -0.011310f, 0.015436f, -0.005696f, 0.006874f, -0.006851f, 0.005729f, -0.000995f, -0.028066f, -0.005760f, -0.004797f, -0.003248f, 0.001928f, -0.006685f, -0.004629f, 0.003810f, 0.006167f, 0.002184f, 0.015171f, 0.007056f, -0.014652f, -0.001020f, 0.000039f, -0.008194f, 0.017453f, -0.010371f, -0.010078f, 0.018432f, 0.019355f, -0.002340f, -0.000219f, -0.011977f, 0.004352f, 0.002686f, -0.006273f, 0.003280f, 0.011991f, 0.007470f, 0.014418f, -0.003515f, -0.011308f, 0.007109f, 0.001690f, 0.003532f, -0.013480f, -0.006918f, -0.007917f, 0.003250f, 0.007727f, 0.002897f, 0.002073f, 0.013917f, 0.016602f, 0.002548f, -0.007881f, 0.009517f, 0.007744f, - -0.011628f, 0.001640f, 0.002100f, -0.001332f, 0.001437f, -0.000261f, 0.009979f, -0.001077f, -0.007669f, 0.003952f, 0.013132f, 0.005812f, 0.007739f, 0.016190f, -0.010966f, 0.001977f, -0.003686f, 0.015364f, 0.008866f, 0.016455f, -0.007851f, -0.002100f, 0.002804f, -0.005841f, 0.000924f, 0.001625f, -0.001798f, 0.000020f, 0.003880f, 0.004408f, -0.001583f, 0.002412f, 0.001777f, 0.005715f, 0.005103f, -0.000669f, -0.000358f, -0.002560f, 0.000798f, -0.002578f, 0.001431f, -0.004545f, 0.004581f, -0.000066f, -0.001679f, -0.000059f, -0.000312f, 0.000191f, -0.001536f, -0.003535f, 0.005091f, -0.000616f, 0.000903f, -0.005597f, -0.004531f, -0.001227f, 0.004895f, -0.000498f, -0.000442f, 0.000486f, -0.000483f, 0.010008f, -0.020765f, -0.012369f, 0.008211f, -0.004814f, -0.019398f, 0.009890f, -0.010166f, -0.008807f, 0.012458f, -0.003749f, -0.004170f, -0.003058f, 0.003188f, 0.009294f, 0.004770f, 0.005020f, 0.005084f, -0.007662f, -0.004642f, -0.001562f, 0.011221f, 0.005841f, -0.019822f, 0.006346f, 0.006137f, -0.008254f, 0.018583f, 0.017127f, 0.009159f, 0.000708f, -0.006795f, -0.004334f, 0.000968f, -0.005758f, - -0.006993f, -0.011416f, 0.001634f, -0.013040f, 0.009470f, 0.003702f, 0.000085f, 0.002123f, 0.004983f, 0.004390f, 0.010140f, 0.015925f, -0.006048f, -0.025092f, -0.004416f, -0.017070f, 0.005871f, 0.002429f, -0.022798f, 0.008319f, -0.009590f, 0.028651f, 0.009457f, -0.017947f, -0.000651f, 0.018253f, 0.009450f, -0.014847f, -0.008915f, 0.019095f, 0.010894f, -0.013146f, 0.016220f, -0.013493f, -0.017921f, 0.002837f, -0.027117f, 0.016416f, 0.017547f, -0.003961f, -0.016338f, -0.002850f, 0.006370f, 0.003390f, 0.002693f, 0.001720f, 0.012563f, -0.017629f, 0.005662f, 0.019804f, 0.000292f, 0.000763f, -0.017415f, 0.008731f, 0.004815f, -0.015957f, -0.004044f, -0.008013f, -0.003879f, 0.000720f, 0.004976f, 0.004106f, 0.000525f, -0.004739f, 0.000447f, -0.005083f, 0.002098f, 0.003173f, -0.000706f, -0.002410f, -0.001776f, 0.003255f, 0.000955f, -0.000919f, -0.002757f, -0.005069f, -0.000641f, -0.004946f, 0.010013f, -0.009336f, -0.000081f, -0.000900f, 0.003803f, 0.002705f, -0.005494f, 0.001760f, -0.001744f, 0.008665f, -0.001138f, 0.002526f, 0.000189f, -0.004815f, -0.000552f, 0.005492f, -0.000059f, -0.016245f, - -0.011999f, 0.000384f, -0.019506f, 0.000058f, -0.045863f, -0.014436f, -0.005273f, -0.025062f, -0.008777f, -0.005249f, -0.010989f, -0.008495f, 0.005982f, -0.012081f, -0.022935f, 0.006107f, 0.014394f, -0.023428f, -0.006476f, 0.007219f, 0.011761f, 0.020208f, 0.012903f, 0.011903f, 0.013060f, 0.004720f, 0.023146f, -0.013775f, -0.005894f, 0.004899f, -0.011452f, 0.004356f, 0.006561f, 0.012114f, 0.001594f, 0.019810f, 0.004164f, 0.004882f, 0.013681f, -0.006048f, -0.011729f, 0.000207f, -0.017982f, -0.011504f, -0.020756f, -0.000874f, -0.000954f, -0.027294f, 0.009841f, -0.012369f, 0.005586f, -0.025781f, 0.003086f, -0.019513f, 0.029106f, 0.001455f, -0.025943f, 0.031124f, 0.038135f, 0.010698f, -0.012783f, -0.009482f, 0.009895f, -0.003333f, -0.001260f, 0.011254f, -0.018213f, 0.011851f, -0.018811f, 0.009944f, -0.007502f, -0.010615f, 0.004480f, 0.009986f, -0.005442f, -0.000599f, 0.011734f, 0.003056f, -0.005804f, 0.006585f, -0.002913f, -0.010788f, 0.001402f, 0.010028f, -0.001947f, -0.004001f, 0.003980f, 0.002896f, 0.008175f, 0.001611f, 0.000263f, 0.003500f, -0.002767f, 0.005681f, 0.001424f, 0.004699f, - 0.001616f, 0.003726f, 0.003017f, 0.003033f, 0.002443f, -0.003540f, 0.003921f, -0.004751f, -0.004401f, 0.000392f, 0.002563f, 0.000813f, 0.001270f, 0.002797f, 0.001846f, 0.000182f, -0.001557f, -0.003585f, 0.000013f, -0.003768f, 0.009921f, -0.004982f, 0.008937f, 0.013486f, 0.001986f, 0.012446f, -0.007038f, 0.019455f, -0.015129f, -0.014092f, -0.037074f, -0.008243f, -0.019225f, -0.045235f, 0.011346f, -0.026088f, -0.015842f, -0.021037f, 0.005770f, -0.040754f, 0.010894f, 0.003304f, -0.007829f, -0.000932f, -0.011723f, -0.004167f, 0.009763f, -0.013913f, -0.009903f, 0.000503f, 0.007440f, -0.012177f, -0.000949f, 0.013894f, -0.022363f, -0.005213f, 0.013039f, -0.012452f, -0.000766f, 0.000073f, -0.003543f, 0.018851f, -0.016531f, 0.011177f, -0.007524f, 0.015325f, 0.016209f, -0.016546f, -0.022042f, 0.020574f, -0.002234f, 0.004446f, 0.005386f, 0.001808f, -0.004734f, 0.011566f, -0.006297f, -0.025533f, 0.006647f, 0.005145f, -0.022082f, -0.002514f, -0.007905f, 0.013224f, 0.016154f, 0.007952f, 0.002724f, -0.006403f, -0.015687f, 0.016006f, 0.009928f, 0.014311f, -0.000985f, -0.022659f, -0.005285f, -0.003458f, - -0.009866f, -0.005622f, -0.002632f, 0.006486f, 0.010081f, -0.008781f, -0.007415f, -0.022514f, -0.010657f, 0.004290f, 0.009283f, 0.002459f, -0.001891f, 0.010246f, 0.009718f, 0.005760f, 0.011930f, -0.003705f, 0.009362f, 0.004193f, 0.006413f, 0.001033f, 0.000108f, -0.006240f, -0.004701f, -0.001180f, 0.003043f, -0.001518f, -0.005232f, -0.006651f, -0.000172f, -0.001132f, 0.001438f, -0.004538f, 0.001116f, -0.005403f, 0.001742f, 0.008916f, 0.002093f, -0.005179f, -0.005205f, 0.011360f, 0.006569f, -0.001455f, -0.000609f, -0.014471f, -0.001549f, -0.000213f, -0.012128f, 0.000269f, -0.004864f, -0.003831f, 0.003000f, 0.003757f, 0.001017f, -0.001446f, -0.011147f, 0.055062f, 0.031795f, 0.002119f, -0.017479f, -0.041694f, -0.005084f, 0.019387f, -0.009131f, -0.016845f, -0.031262f, -0.001827f, -0.006748f, 0.001010f, -0.010726f, 0.010026f, -0.000177f, 0.027217f, 0.010789f, -0.011470f, -0.000812f, -0.004950f, 0.002060f, -0.005707f, 0.005635f, 0.016842f, -0.019826f, 0.003762f, -0.011951f, 0.007803f, -0.008516f, -0.014524f, -0.028249f, -0.002355f, 0.016155f, 0.005345f, -0.003538f, 0.005890f, -0.002104f, 0.015344f, - 0.024381f, -0.008585f, -0.005569f, -0.028330f, -0.030643f, 0.008395f, 0.004536f, -0.013030f, -0.011212f, -0.025519f, -0.017498f, 0.010004f, -0.003309f, -0.000029f, 0.001287f, -0.002047f, 0.011619f, 0.006575f, -0.020954f, 0.000800f, -0.019097f, -0.001738f, -0.010305f, -0.006006f, 0.020266f, 0.041716f, 0.068841f, 0.002517f, 0.022141f, -0.020851f, -0.026464f, -0.037257f, -0.001964f, -0.000205f, 0.007534f, 0.007801f, -0.005088f, -0.047076f, 0.019507f, -0.008067f, -0.006490f, 0.002880f, -0.012325f, 0.001341f, -0.006702f, -0.019225f, 0.000240f, -0.007741f, 0.000181f, 0.001834f, 0.000734f, 0.013519f, 0.001975f, 0.001474f, -0.000731f, 0.000487f, -0.000568f, 0.005763f, 0.012820f, 0.003716f, -0.000452f, 0.002667f, 0.011625f, 0.000244f, 0.000150f, 0.004301f, -0.003845f, 0.001371f, -0.010621f, 0.003563f, 0.005567f, -0.010059f, 0.010222f, 0.000546f, 0.000896f, -0.003027f, -0.011105f, -0.003650f, 0.004990f, -0.000016f, -0.001117f, -0.002842f, 0.000400f, 0.020157f, 0.033546f, -0.016580f, 0.000042f, 0.006474f, -0.027399f, 0.000276f, -0.017698f, -0.017108f, 0.025769f, -0.007569f, -0.006497f, -0.013841f, - 0.029596f, 0.026050f, -0.000031f, 0.042784f, 0.004787f, 0.013376f, 0.009387f, -0.011902f, -0.013992f, -0.022240f, -0.011750f, 0.005233f, 0.000180f, 0.019183f, 0.001463f, -0.002073f, -0.003521f, 0.013560f, -0.019604f, -0.047814f, -0.016801f, 0.014124f, 0.004391f, -0.003913f, -0.014285f, 0.000866f, -0.023047f, -0.003442f, -0.021001f, -0.001434f, -0.002662f, -0.014758f, 0.014123f, 0.007049f, 0.026859f, -0.022203f, 0.041628f, 0.011200f, -0.008146f, -0.014733f, -0.007613f, 0.006578f, 0.023995f, -0.007384f, 0.013711f, -0.021225f, 0.017120f, -0.019274f, -0.021749f, 0.021416f, -0.031087f, 0.020359f, 0.017050f, 0.033035f, -0.033670f, 0.025566f, -0.003236f, 0.022793f, 0.008850f, -0.035326f, -0.006231f, -0.008293f, 0.009805f, -0.018741f, 0.055582f, -0.002729f, -0.019692f, 0.007899f, 0.025659f, 0.017472f, 0.011990f, 0.013284f, -0.001810f, 0.006332f, -0.002332f, -0.007367f, -0.004750f, 0.001967f, -0.000305f, -0.007308f, 0.002041f, -0.002143f, -0.011345f, -0.002339f, -0.004372f, 0.004753f, 0.005888f, 0.003248f, -0.001623f, 0.010990f, -0.001850f, 0.006086f, 0.002364f, 0.007779f, 0.002852f, -0.003918f, - -0.004960f, 0.001341f, -0.000657f, 0.005367f, -0.002247f, 0.000523f, 0.004472f, -0.002744f, 0.007713f, -0.003673f, -0.004381f, 0.002187f, -0.003307f, 0.008149f, 0.002861f, -0.002372f, 0.002396f, -0.023260f, -0.031201f, -0.063899f, -0.019626f, -0.037524f, 0.010446f, -0.001715f, -0.012797f, -0.018589f, -0.017706f, -0.015997f, -0.017345f, -0.016985f, 0.001758f, -0.013851f, -0.002517f, -0.030094f, -0.046179f, 0.056521f, -0.017651f, 0.030615f, -0.005890f, 0.007885f, 0.009726f, 0.016489f, 0.010855f, -0.002916f, -0.000969f, -0.024447f, -0.005566f, -0.005846f, -0.016464f, -0.025642f, 0.009950f, -0.002932f, 0.036139f, -0.025106f, 0.000610f, 0.050015f, -0.012124f, -0.041653f, -0.013480f, 0.001595f, -0.018918f, 0.029235f, 0.013398f, -0.016150f, 0.011817f, 0.015673f, -0.009771f, -0.000390f, 0.007839f, 0.019514f, -0.000805f, -0.019366f, -0.019067f, 0.023364f, 0.016681f, -0.012399f, -0.026800f, 0.016966f, 0.019645f, -0.017698f, -0.024129f, 0.016758f, -0.030578f, 0.058247f, 0.012455f, -0.004864f, 0.002282f, 0.014171f, 0.003120f, -0.010376f, 0.000842f, 0.004086f, 0.020846f, -0.013857f, 0.004087f, -0.041570f, - -0.037451f, -0.004292f, 0.002115f, -0.004195f, -0.018240f, 0.013070f, 0.030715f, -0.000988f, 0.007780f, -0.003026f, 0.006465f, 0.009190f, 0.010996f, -0.012058f, 0.013244f, -0.006320f, -0.003690f, 0.008719f, 0.016329f, -0.005007f, -0.016667f, 0.004563f, -0.001669f, 0.002607f, -0.001652f, -0.009018f, -0.002614f, -0.009320f, -0.005832f, -0.011469f, 0.011484f, 0.011753f, -0.007309f, -0.000185f, 0.014162f, 0.004371f, -0.006235f, 0.002823f, 0.017776f, 0.011622f, 0.012769f, 0.012858f, 0.011349f, 0.004094f, 0.016270f, 0.008490f, 0.006672f, 0.005911f, 0.015394f, -0.024052f, 0.000052f, 0.008893f, 0.006840f, -0.015763f, 0.037980f, 0.026779f, 0.054671f, 0.030193f, 0.020359f, 0.007911f, -0.047815f, -0.003949f, 0.006521f, -0.028196f, -0.007500f, 0.054056f, 0.004158f, -0.031387f, -0.030918f, 0.027981f, -0.042606f, -0.011103f, 0.001881f, 0.011363f, 0.004905f, -0.008186f, 0.013846f, -0.019306f, -0.000025f, -0.003964f, -0.012115f, -0.002747f, -0.008432f, -0.027910f, 0.014669f, -0.024207f, 0.014150f, 0.012512f, 0.016469f, 0.002882f, 0.010916f, -0.010196f, 0.044992f, 0.005915f, -0.047778f, -0.042141f, - 0.003856f, 0.018714f, 0.036569f, -0.012209f, -0.028702f, -0.012879f, -0.003803f, 0.003958f, 0.021474f, 0.004496f, -0.016943f, 0.049297f, -0.060666f, -0.010295f, 0.011483f, -0.042407f, -0.021863f, -0.011315f, 0.006234f, -0.068600f, -0.032389f, 0.048745f, -0.018571f, 0.014067f, -0.015928f, -0.055456f, -0.020913f, 0.026340f, -0.008173f, 0.010104f, 0.016894f, 0.034657f, -0.016671f, 0.003579f, -0.010473f, 0.021588f, 0.009870f, 0.009130f, 0.001343f, -0.001163f, 0.000511f, 0.018749f, 0.009703f, 0.010961f, -0.003034f, -0.000744f, 0.006963f, -0.013096f, -0.011799f, 0.004757f, 0.021948f, 0.010012f, 0.008455f, -0.021878f, 0.012554f, 0.039949f, -0.000331f, -0.000803f, -0.015612f, 0.010545f, 0.001644f, -0.009764f, -0.012720f, 0.001295f, 0.011771f, 0.013591f, 0.009942f, -0.012895f, 0.008193f, -0.008801f, 0.009317f, -0.016519f, -0.009074f, -0.003709f, -0.008701f, -0.010935f, -0.003435f, -0.026661f, -0.025118f, 0.003577f, -0.002062f, -0.004636f, 0.008573f, -0.000850f, -0.002708f, -0.000328f, 0.008479f, 0.028358f, -0.012507f, -0.087647f, -0.023466f, 0.005507f, 0.023962f, 0.024669f, 0.021179f, 0.022593f, - 0.038996f, 0.071988f, -0.041622f, 0.030460f, -0.011067f, -0.000776f, -0.011216f, -0.058168f, -0.044556f, -0.007845f, -0.003348f, 0.013090f, 0.022314f, 0.030590f, -0.010160f, -0.000520f, -0.016187f, 0.000600f, -0.003460f, 0.000168f, 0.030369f, 0.017074f, 0.009681f, 0.024335f, 0.027595f, -0.049133f, 0.023909f, -0.028369f, -0.037246f, -0.010375f, 0.022940f, 0.007232f, -0.025373f, 0.008591f, 0.002327f, 0.018100f, -0.002353f, -0.047760f, -0.035189f, -0.039540f, -0.040442f, 0.005619f, 0.032276f, -0.005771f, 0.118692f, -0.077652f, -0.059485f, 0.036319f, -0.011175f, -0.023576f, -0.008724f, -0.006181f, 0.000652f, -0.072753f, 0.007059f, -0.005043f, 0.009394f, 0.056196f, -0.004557f, 0.019839f, 0.020951f, 0.026936f, 0.091195f, -0.033836f, 0.115487f, 0.032563f, -0.003799f, 0.015537f, 0.006024f, -0.047464f, -0.042927f, -0.000525f, -0.011017f, 0.006200f, 0.017301f, 0.014506f, -0.008917f, -0.040673f, -0.034376f, 0.013732f, -0.023411f, 0.015049f, 0.015515f, 0.036477f, 0.034489f, 0.032488f, 0.005581f, 0.011503f, -0.001183f, -0.001320f, 0.023058f, -0.003652f, -0.002802f, 0.007891f, -0.035113f, -0.007895f, - 0.013795f, 0.000274f, -0.004211f, 0.022223f, 0.007560f, -0.031720f, 0.021348f, -0.017600f, -0.025746f, -0.013632f, -0.008498f, 0.006534f, 0.009647f, 0.011230f, -0.014110f, 0.016090f, 0.005869f, 0.010481f, 0.003651f, 0.013699f, -0.006296f, 0.008434f, -0.021522f, -0.003951f, -0.052482f, 0.019124f, 0.083798f, 0.002460f, 0.087448f, 0.046268f, -0.005458f, -0.033781f, 0.098631f, 0.014876f, -0.016819f, 0.012826f, -0.022707f, -0.006589f, -0.003603f, -0.006033f, 0.012239f, 0.027611f, 0.018958f, 0.003673f, 0.012415f, -0.019808f, -0.019462f, 0.006021f, -0.006145f, 0.032505f, 0.034920f, 0.022443f, -0.009376f, 0.002241f, -0.043160f, -0.026862f, -0.008302f, -0.029383f, -0.046683f, -0.027577f, 0.021694f, -0.026901f, -0.082086f, -0.037779f, 0.024554f, -0.033009f, -0.023710f, 0.001169f, -0.006440f, 0.038437f, 0.056074f, 0.074270f, -0.039794f, 0.021115f, -0.001034f, 0.002438f, -0.016466f, -0.049126f, -0.098524f, -0.064547f, 0.033521f, -0.065407f, -0.034817f, 0.017842f, 0.032710f, -0.024229f, 0.036947f, 0.107489f, 0.022095f, 0.020827f, -0.081794f, -0.108958f, -0.024145f, -0.033923f, -0.058690f, -0.016603f, - -0.049127f, 0.034667f, 0.019175f, 0.097435f, 0.039608f, -0.011295f, -0.020278f, -0.033859f, 0.022470f, 0.044268f, 0.087698f, 0.061730f, -0.043071f, -0.089206f, -0.044147f, -0.028477f, -0.053377f, -0.009874f, 0.044383f, 0.021538f, 0.055031f, 0.002350f, 0.038941f, 0.015717f, -0.013502f, -0.016714f, -0.019756f, 0.010696f, 0.023528f, 0.005953f, 0.030793f, 0.039159f, 0.023043f, 0.027893f, 0.012197f, 0.042287f, 0.036551f, 0.001437f, -0.001503f, 0.018473f, 0.041324f, -0.004250f, -0.011999f, -0.006436f, 0.035117f, 0.010885f, 0.000936f, -0.010815f, 0.021647f, 0.017067f, -0.006310f, 0.014133f, 0.016944f, 0.008639f, -0.004723f, 0.003740f, 0.011867f, 0.001398f, -0.021354f, 0.044901f, 0.089044f, -0.047530f, 0.067413f, 0.054111f, -0.009119f, -0.014091f, -0.030710f, 0.009006f, 0.060069f, 0.044571f, 0.070508f, -0.031127f, -0.014426f, -0.014775f, -0.004833f, -0.019391f, 0.018101f, -0.023746f, 0.051597f, 0.021769f, -0.086029f, -0.037297f, 0.000231f, 0.012479f, 0.036426f, -0.018031f, -0.032866f, 0.009218f, 0.009583f, -0.014142f, -0.016487f, 0.009212f, -0.024823f, -0.037668f, -0.017413f, 0.080207f, - 0.032886f, 0.013246f, -0.041401f, -0.013634f, -0.035204f, 0.019878f, 0.038608f, 0.012750f, 0.002107f, 0.022691f, -0.014190f, 0.051039f, 0.028734f, 0.002656f, 0.016613f, -0.002284f, 0.101468f, 0.020669f, -0.043864f, 0.016201f, 0.017167f, 0.009772f, 0.022634f, 0.000968f, -0.041870f, 0.048752f, 0.010395f, 0.008060f, 0.018847f, 0.008585f, -0.000486f, -0.030810f, 0.034721f, 0.039668f, 0.020304f, 0.114519f, 0.081284f, -0.044430f, -0.089050f, -0.062401f, -0.006472f, 0.007395f, -0.009427f, -0.075722f, -0.037758f, -0.027054f, -0.031380f, -0.031226f, 0.027700f, 0.021674f, -0.008239f, 0.004410f, -0.007063f, -0.042511f, 0.011899f, -0.008033f, -0.002591f, -0.043541f, -0.041916f, -0.007712f, 0.017435f, 0.020481f, 0.002333f, 0.021857f, 0.009228f, 0.027632f, 0.003837f, 0.005391f, -0.047440f, -0.028242f, 0.019958f, 0.005349f, -0.013239f, 0.024659f, 0.010384f, 0.004309f, -0.022858f, 0.021905f, 0.030116f, 0.021181f, 0.021849f, 0.027649f, -0.006184f, 0.030654f, 0.061455f, 0.048470f, 0.010928f, 0.006715f, -0.007876f, -0.010720f, -0.031605f, -0.039951f, 0.010509f, -0.004392f, -0.016650f, -0.104061f, - -0.013662f, 0.025814f, 0.029099f, -0.023974f, 0.036382f, 0.011077f, -0.015045f, -0.039213f, 0.008352f, -0.009846f, -0.058220f, -0.018909f, -0.020900f, 0.003758f, -0.080079f, -0.062928f, -0.011025f, 0.038602f, -0.005673f, -0.012709f, -0.048638f, 0.000300f, 0.040868f, 0.001273f, -0.029098f, -0.017239f, -0.006635f, -0.016939f, 0.009784f, 0.012966f, -0.041317f, -0.046295f, 0.006601f, -0.002349f, 0.009295f, 0.074325f, -0.046462f, -0.005565f, -0.003439f, -0.074014f, -0.022631f, -0.054379f, -0.008974f, -0.005320f, 0.051232f, 0.057578f, 0.070886f, 0.019670f, 0.011487f, -0.027960f, -0.063222f, 0.001710f, 0.024768f, -0.022531f, 0.087141f, 0.204501f, 0.196513f, 0.027967f, -0.126916f, -0.116692f, -0.046175f, -0.073687f, 0.241166f, 0.148831f, 0.093239f, 0.121386f, -0.002750f, -0.065621f, -0.173162f, -0.111279f, -0.043603f, -0.010058f, 0.068619f, 0.139659f, 0.124273f, -0.015696f, -0.104286f, -0.063477f, -0.094540f, -0.074473f, 0.012173f, 0.100915f, 0.147433f, 0.056669f, -0.008996f, 0.007481f, -0.057886f, -0.068152f, -0.067944f, 0.022593f, 0.009446f, 0.016685f, 0.058560f, 0.031051f, -0.007106f, -0.038961f, - -0.034178f, -0.022591f, -0.053420f, -0.011170f, 0.022007f, -0.020215f, 0.000230f, -0.007875f, 0.035159f, 0.026644f, -0.049802f, -0.030938f, -0.099460f, -0.079746f, -0.071464f, 0.044314f, 0.078323f, 0.029622f, 0.019374f, -0.029496f, -0.052177f, -0.154784f, -0.115266f, -0.069081f, 0.011973f, 0.042173f, 0.026180f, 0.005758f, -0.057916f, -0.047946f, -0.090946f, -0.149369f, -0.059793f, 0.016702f, 0.042263f, 0.075564f, 0.034005f, -0.000630f, -0.043149f, -0.016018f, -0.029062f, 0.053703f, -0.052531f, 0.060576f, 0.012454f, 0.006053f, -0.096439f, -0.032152f, 0.086181f, -0.057866f, 0.024413f, -0.000597f, -0.018434f, 0.025664f, 0.010689f, 0.044888f, 0.072895f, -0.042865f, -0.055531f, 0.014158f, -0.033445f, 0.044492f, -0.058053f, -0.031633f, -0.036360f, 0.003763f, -0.009148f, -0.034803f, 0.016448f, 0.068032f, -0.052888f, -0.060160f, -0.043072f, -0.014386f, -0.011966f, 0.091546f, 0.006542f, -0.003267f, -0.089735f, -0.023882f, 0.009401f, 0.076838f, 0.034475f, -0.014203f, -0.129771f, -0.093974f, 0.089503f, 0.096238f, 0.094306f, -0.043216f, -0.217083f, -0.043222f, 0.098473f, 0.081365f, 0.013020f, -0.025399f, - 0.014364f, -0.088107f, -0.051932f, 0.029624f, -0.025434f, 0.026814f, -0.015683f, 0.003572f, 0.092635f, -0.068578f, -0.035695f, 0.076474f, 0.060584f, 0.115394f, 0.049283f, -0.154025f, 0.048558f, 0.166432f, 0.036112f, 0.084296f, 0.021568f, -0.046679f, -0.001055f, 0.105934f, 0.073123f, 0.140680f, -0.184454f, 0.025344f, -0.000881f, -0.020869f, 0.073588f, 0.001003f, -0.095703f, 0.008220f, -0.003844f, -0.020060f, 0.014547f, -0.000770f, -0.058399f, 0.051035f, -0.023895f, -0.001848f, 0.003012f, -0.014382f, 0.002981f, 0.007256f, -0.015894f, -0.021862f, -0.031606f, -0.047543f, 0.046677f, -0.002878f, 0.017479f, 0.038774f, -0.044440f, 0.020760f, -0.001169f, -0.082362f, 0.000864f, 0.024619f, 0.088666f, -0.024119f, -0.121841f, -0.015387f, 0.059086f, 0.014663f, 0.052346f, -0.041544f, -0.033370f, -0.045696f, 0.021381f, -0.009078f, 0.032433f, -0.048357f, 0.024421f, 0.010596f, 0.015217f, -0.053754f, 0.006538f, 0.009675f, 0.038265f, -0.016345f, 0.009191f, -0.033477f, 0.013202f, -0.020714f, 0.033285f, -0.007579f, 0.027064f, -0.009956f, 0.012317f, -0.108557f, 0.012267f, 0.019414f, 0.010347f, 0.107031f, - 0.018028f, -0.008034f, -0.068334f, -0.011683f, -0.006727f, -0.016012f, -0.000687f, -0.012935f, 0.027378f, 0.012778f, -0.020151f, -0.003453f, 0.042494f, 0.000131f, -0.002401f, 0.004514f, -0.010650f, -0.018244f, 0.023840f, 0.021086f, 0.015994f, -0.026576f, 0.013957f, 0.039761f, 0.015581f, -0.002286f, 0.025635f, -0.004672f, -0.030448f, 0.008046f, 0.007699f, -0.024518f, -0.026660f, 0.026541f, 0.025832f, -0.025520f, 0.016336f, 0.015786f, -0.000242f, -0.009298f, 0.000173f, 0.020177f, -0.001132f, -0.022544f, 0.011714f, 0.013745f, -0.041884f, 0.010702f, 0.030941f, 0.010122f, -0.027238f, 0.004235f, 0.019197f, -0.035273f, 0.009563f, 0.016520f, 0.006960f, -0.009180f, -0.033643f, 0.039574f, -0.042862f, -0.003792f, 0.041213f, 0.000662f, -0.007128f, 0.000900f, -0.038768f, 0.017142f, -0.000589f, 0.022125f, 0.040983f, -0.018565f, -0.002970f, -0.023709f, 0.031340f, -0.006583f, -0.003524f, 0.032139f, -0.042004f, -0.018475f, 0.023290f, 0.019007f, 0.008327f, -0.034152f, 0.011782f, -0.007517f, -0.002166f, 0.016356f, 0.012424f, 0.002329f, -0.008712f, -0.004387f, 0.001564f, 0.009247f, -0.029824f, 0.021697f, - 0.004410f, -0.004159f, 0.008392f, -0.003924f, 0.018833f, -0.028052f, -0.005101f, 0.000561f, 0.001629f, 0.002780f, 0.012955f, 0.008572f, -0.047634f, 0.025161f, -0.005106f, -0.005554f, -0.002001f, 0.009671f, 0.013001f, -0.011818f, -0.004782f, 0.022135f, -0.018971f, -0.002451f, -0.014517f, 0.010516f, 0.100308f, 0.008798f, -0.012242f, -0.033545f, -0.022295f, 0.011752f, -0.014950f, 0.012936f, -0.019954f, -0.001589f, 0.015893f, -0.008992f, 0.007472f, 0.007319f, -0.027809f, 0.007678f, -0.009110f, -0.006059f, -0.022920f, 0.006463f, -0.006494f, -0.014459f, -0.006743f, 0.011070f, -0.010007f, -0.009911f, 0.014137f, -0.015714f, 0.007947f, 0.013440f, -0.027865f, 0.027457f, -0.006959f, -0.032783f, 0.017388f, 0.017293f, -0.015290f, 0.005306f, 0.009914f, -0.013854f, -0.012406f, 0.000074f, 0.001845f, 0.008918f, -0.004511f, -0.001698f, -0.013793f, 0.012636f, -0.010806f, -0.003506f, 0.015869f, -0.019187f, 0.005527f, -0.003497f, 0.000049f, -0.009047f, -0.012370f, -0.005061f, 0.021576f, -0.014778f, -0.005622f, 0.003463f, 0.004585f, 0.000595f, -0.013077f, 0.009931f, -0.005861f, -0.011315f, -0.000322f, -0.020720f, - 0.030254f, -0.013391f, 0.006132f, 0.006653f, -0.006221f, 0.010467f, -0.017994f, -0.014703f, 0.018424f, -0.009074f, -0.012480f, 0.012315f, -0.000819f, 0.003419f, -0.008315f, 0.002173f, -0.001834f, 0.005620f, -0.006630f, -0.005216f, 0.006993f, -0.004076f, -0.004828f, -0.001322f, 0.004421f, -0.002890f, -0.000390f, -0.002349f, 0.001190f, 0.004182f, -0.005882f, -0.005959f, 0.017348f, -0.005118f, -0.006181f, 0.005415f, -0.001965f, 0.005034f, -0.013879f, 0.000927f, -0.002286f, -0.000433f, -0.003655f, 0.016247f, 0.000247f, -0.014298f, 0.004720f, 0.001582f, -0.000577f, 0.000126f, 0.006364f, -0.004076f, -0.004068f, -0.001807f, -0.003662f, -0.001853f, 0.001844f, -0.004463f, -0.000052f, 0.001357f, -0.000562f, -0.049806f, -0.081434f, 0.037239f, 0.280845f, 0.043089f, 0.140272f, -0.032898f, -0.142824f, -0.051826f, -0.139194f, -0.091551f, -0.029166f, -0.015251f, 0.006527f, 0.082689f, 0.099247f, 0.137978f, 0.136877f, 0.043573f, -0.054248f, -0.087598f, -0.160905f, -0.123142f, -0.064903f, -0.025197f, -0.016543f, 0.049690f, 0.083233f, 0.064430f, 0.087702f, 0.085127f, 0.031264f, 0.027617f, 0.010310f, -0.062242f, - -0.023234f, -0.053513f, -0.092779f, -0.055997f, -0.054244f, -0.080315f, -0.017207f, 0.037577f, 0.028435f, 0.081986f, 0.107310f, 0.055944f, 0.071445f, 0.053872f, -0.007670f, -0.002317f, -0.005149f, -0.057749f, -0.071270f, -0.063433f, -0.095694f, -0.081394f, -0.028903f, -0.004758f, 0.011442f, 0.066343f, 0.060924f, 0.058859f, 0.073992f, 0.055363f, 0.018900f, 0.034995f, 0.019054f, -0.021551f, -0.010408f, -0.039858f, -0.084042f, -0.050448f, -0.047744f, -0.066071f, -0.031977f, -0.021163f, -0.037293f, 0.031435f, 0.059294f, 0.068638f, 0.109326f, 0.103157f, 0.043397f, 0.025620f, -0.001582f, -0.037376f, -0.044525f, -0.045765f, -0.066801f, -0.061028f, -0.056203f, -0.051378f, -0.032268f, -0.012750f, -0.000261f, 0.025027f, 0.058500f, 0.073120f, 0.067834f, 0.082050f, 0.056653f, 0.027545f, 0.011456f, -0.009529f, -0.042283f, -0.047557f, -0.066486f, -0.086510f, -0.087402f, -0.069301f, -0.058082f, -0.008827f, 0.034403f, 0.077399f, 0.103558f, 0.112295f, 0.086529f, 0.056491f, 0.024812f, -0.006801f, -0.043729f, -0.063753f, -0.086364f, -0.085523f, -0.061462f, -0.040211f, -0.012518f, 0.015438f, 0.030545f, 0.040811f, - 0.050824f, 0.044042f, 0.027208f, 0.023202f, 0.007909f, -0.000687f, -0.008576f, -0.010723f, -0.014199f, -0.013619f, -0.019867f, -0.016029f, -0.012979f, -0.010594f, -0.010968f, -0.007149f, -0.007377f, -0.001911f, 0.002202f, 0.009753f, 0.011182f, 0.015755f, 0.015405f, 0.014618f, 0.004749f, 0.001465f, -0.002053f, 0.000335f, -0.001275f}, - {-0.002126f, 0.011493f, -0.006458f, 0.001924f, -0.009600f, 0.002688f, 0.001081f, 0.014649f, -0.008772f, 0.000029f, -0.004614f, 0.007342f, 0.007498f, -0.004782f, -0.000909f, -0.004110f, -0.002356f, -0.004804f, -0.005980f, 0.004414f, 0.001445f, -0.003911f, 0.008180f, 0.007447f, 0.012729f, -0.000376f, 0.004823f, 0.002532f, -0.000209f, -0.011497f, 0.002995f, 0.004791f, -0.004535f, 0.002878f, -0.003342f, -0.003896f, -0.006306f, 0.003280f, 0.008128f, 0.000845f, 0.009484f, -0.003863f, -0.000801f, 0.009565f, 0.005008f, 0.000780f, -0.000111f, 0.009087f, 0.013646f, -0.010131f, 0.002281f, -0.003491f, -0.001563f, -0.015774f, -0.005594f, 0.006395f, -0.004894f, 0.004436f, 0.002053f, -0.002304f, -0.003819f, 0.002250f, -0.001300f, 0.004941f, 0.002683f, 0.002312f, 0.002534f, -0.008177f, 0.000324f, -0.003921f, 0.005056f, 0.008382f, 0.005880f, -0.001170f, 0.009074f, 0.000081f, 0.003859f, -0.001178f, -0.001995f, 0.000509f, 0.004561f, 0.005261f, -0.001693f, -0.003548f, -0.007358f, -0.000925f, -0.003234f, -0.003464f, -0.001947f, -0.002942f, -0.002104f, -0.003469f, -0.001812f, -0.000055f, -0.000025f, 0.000114f, - 0.002933f, -0.001980f, 0.001545f, -0.000692f, -0.001393f, 0.000117f, 0.001357f, 0.000527f, 0.001086f, 0.000041f, -0.000952f, 0.000060f, 0.001387f, 0.000494f, -0.001979f, -0.001512f, -0.000051f, 0.000066f, 0.000840f, 0.000167f, 0.001519f, -0.001961f, 0.006842f, -0.008387f, -0.008773f, 0.000332f, -0.011815f, 0.002169f, -0.003720f, 0.005742f, -0.003165f, -0.009372f, 0.001066f, 0.009188f, -0.001404f, 0.000317f, 0.012793f, 0.016080f, -0.006939f, -0.007378f, -0.002097f, -0.011953f, 0.005107f, 0.001092f, 0.002980f, -0.004203f, 0.006382f, -0.008328f, -0.001517f, 0.005704f, -0.004687f, -0.001708f, 0.000874f, 0.010362f, 0.000667f, 0.007498f, -0.009881f, 0.009709f, -0.001058f, 0.001405f, 0.006285f, -0.005422f, 0.005244f, -0.002461f, -0.002509f, 0.004518f, 0.005960f, -0.001008f, 0.003409f, -0.013104f, 0.007926f, 0.007694f, -0.013892f, -0.012227f, -0.003454f, -0.010140f, -0.002842f, 0.003870f, 0.002523f, 0.003695f, 0.000213f, -0.003378f, 0.008549f, -0.002861f, 0.000313f, -0.003415f, 0.002014f, -0.005174f, 0.007274f, 0.001786f, -0.005597f, -0.003126f, -0.002216f, -0.003241f, -0.002871f, 0.007370f, - 0.009652f, -0.000456f, -0.001968f, 0.000379f, 0.003091f, -0.002004f, 0.006743f, 0.003833f, -0.002756f, -0.000514f, -0.001722f, 0.002936f, -0.002827f, -0.000075f, -0.000746f, 0.000452f, 0.001068f, -0.000161f, -0.000829f, 0.001834f, -0.001416f, -0.000465f, 0.000379f, 0.001226f, 0.000096f, -0.002442f, -0.001690f, 0.000479f, -0.001613f, -0.001345f, 0.001618f, -0.000851f, -0.002993f, -0.001920f, -0.002408f, -0.000632f, 0.000381f, 0.002886f, 0.020666f, 0.003948f, -0.007642f, 0.009581f, 0.001220f, -0.006505f, 0.018877f, -0.012667f, -0.018145f, -0.010634f, -0.011002f, -0.003704f, 0.005369f, 0.006622f, -0.006271f, 0.009530f, -0.011957f, -0.006520f, -0.001446f, 0.003964f, 0.002983f, -0.003643f, -0.004699f, 0.010662f, 0.002053f, -0.000727f, -0.005977f, 0.007959f, -0.005821f, -0.001347f, -0.000012f, -0.000675f, -0.000836f, 0.003099f, 0.001656f, -0.001642f, 0.006646f, -0.003134f, 0.004052f, -0.000286f, -0.010841f, -0.004254f, -0.004330f, 0.011529f, -0.006391f, -0.007772f, -0.014079f, -0.016451f, -0.003006f, 0.000837f, -0.006569f, 0.012484f, 0.001686f, 0.006706f, -0.005042f, 0.010806f, 0.004609f, -0.006266f, - 0.017426f, -0.007896f, -0.008437f, 0.001349f, 0.010923f, 0.016012f, 0.011339f, 0.003754f, -0.005577f, -0.012602f, 0.005021f, -0.000155f, 0.012419f, 0.004994f, -0.003549f, -0.000430f, 0.006333f, 0.005087f, 0.000093f, -0.001187f, 0.000522f, -0.002481f, -0.005231f, -0.000495f, 0.001647f, 0.001296f, 0.004522f, -0.000161f, 0.002742f, -0.000960f, 0.002164f, -0.000551f, 0.000413f, -0.000466f, -0.003061f, 0.000287f, -0.000558f, -0.003926f, 0.003154f, -0.000725f, 0.001932f, -0.001067f, -0.002110f, 0.000292f, 0.000375f, -0.000153f, -0.001380f, 0.001454f, 0.000584f, -0.001038f, -0.000317f, -0.003021f, 0.000392f, -0.001705f, 0.001523f, -0.000568f, 0.003266f, -0.001476f, -0.019517f, 0.003033f, -0.007068f, 0.004512f, 0.001348f, 0.014030f, -0.018048f, -0.010351f, -0.013233f, 0.007090f, 0.005960f, 0.008515f, -0.009423f, 0.003239f, -0.002759f, 0.001184f, -0.014707f, -0.012615f, -0.009182f, -0.009175f, 0.014974f, -0.006029f, -0.001730f, -0.000292f, 0.005146f, -0.002398f, -0.015628f, 0.006595f, -0.006176f, -0.002072f, 0.007329f, 0.005434f, 0.008404f, 0.000517f, 0.004527f, -0.011017f, -0.004476f, 0.009841f, - 0.016450f, 0.009590f, -0.000639f, -0.012529f, 0.008993f, -0.004051f, -0.010729f, 0.014906f, 0.004508f, 0.005116f, -0.009106f, -0.005372f, 0.005201f, -0.003394f, -0.005034f, 0.007859f, -0.006126f, 0.002724f, 0.000475f, -0.010418f, -0.002123f, -0.006899f, 0.011013f, 0.005551f, -0.001431f, 0.001851f, -0.004939f, 0.006461f, 0.001172f, -0.000198f, 0.002010f, -0.012464f, -0.006399f, 0.007016f, 0.003480f, -0.002043f, -0.001516f, -0.008865f, 0.014609f, 0.017960f, 0.010015f, -0.008249f, 0.007460f, 0.001260f, 0.006381f, -0.002750f, 0.005261f, -0.003960f, 0.003438f, 0.006557f, 0.003631f, 0.003140f, 0.002476f, 0.000119f, -0.002121f, -0.000747f, 0.006528f, 0.000327f, 0.000518f, -0.002426f, -0.000372f, 0.001342f, 0.003961f, -0.000492f, 0.004639f, 0.000740f, 0.000206f, -0.000176f, 0.003782f, 0.004532f, -0.001894f, -0.000875f, -0.000422f, 0.000700f, 0.003334f, -0.000192f, 0.000964f, 0.000238f, 0.000866f, -0.001635f, -0.029517f, 0.009848f, 0.001498f, 0.007342f, 0.007951f, -0.005764f, -0.020875f, 0.016088f, 0.006835f, 0.015830f, -0.002910f, 0.008392f, -0.000164f, -0.005697f, -0.000391f, -0.014755f, - 0.018056f, 0.004123f, 0.001712f, -0.009293f, -0.005338f, -0.006294f, 0.005395f, -0.008287f, 0.013829f, 0.000608f, 0.004762f, 0.007704f, 0.004259f, -0.000887f, 0.004467f, 0.004267f, -0.003229f, 0.003591f, -0.015372f, 0.003998f, 0.007011f, 0.007173f, 0.013809f, 0.004795f, -0.009218f, 0.004623f, -0.004643f, 0.009391f, 0.001824f, 0.006834f, 0.010515f, 0.001723f, -0.002295f, 0.008238f, -0.005662f, -0.008951f, -0.003302f, 0.005747f, 0.014573f, -0.003453f, 0.000926f, 0.000261f, 0.001752f, 0.002861f, 0.006113f, 0.002073f, -0.003820f, -0.000687f, -0.005156f, 0.003752f, 0.001222f, -0.009231f, -0.008114f, 0.003244f, 0.005140f, 0.005141f, 0.009166f, -0.014097f, -0.007569f, -0.010276f, 0.012108f, -0.005332f, -0.007486f, 0.003919f, -0.006898f, -0.010048f, -0.003611f, 0.000281f, 0.010780f, -0.003803f, 0.003502f, -0.004283f, -0.002489f, -0.000625f, 0.003304f, 0.001424f, -0.001921f, -0.001633f, 0.002093f, 0.005344f, 0.001841f, 0.003081f, -0.001451f, -0.001016f, 0.003660f, -0.000144f, 0.000285f, 0.001362f, -0.002489f, 0.004774f, -0.001452f, -0.000333f, -0.002193f, -0.006088f, -0.000903f, -0.001341f, - -0.000407f, -0.000068f, -0.002243f, 0.000240f, 0.005502f, -0.001362f, -0.000478f, -0.001041f, -0.001967f, 0.007283f, 0.029978f, 0.015906f, 0.014243f, 0.020767f, 0.005652f, 0.003794f, -0.012700f, -0.000416f, -0.023751f, -0.004279f, 0.009052f, 0.006569f, 0.004225f, 0.005496f, 0.006542f, -0.005127f, -0.003470f, 0.013619f, 0.012284f, 0.010536f, -0.000793f, 0.001479f, -0.016959f, -0.014694f, -0.005558f, 0.010740f, 0.003483f, -0.002228f, 0.005841f, -0.009882f, 0.000944f, -0.005098f, 0.011822f, 0.009279f, 0.020757f, -0.002059f, 0.007837f, 0.006522f, -0.003329f, -0.010880f, 0.019530f, -0.011350f, -0.002565f, 0.008840f, 0.000434f, 0.005025f, 0.014084f, -0.004494f, 0.005260f, -0.013608f, -0.029079f, -0.016134f, -0.009641f, -0.003907f, 0.001360f, -0.001161f, -0.007489f, -0.015636f, -0.003246f, -0.011227f, 0.003461f, -0.000259f, 0.001399f, -0.017633f, -0.008015f, 0.011433f, 0.003961f, -0.000686f, -0.019535f, -0.017688f, 0.010542f, 0.001894f, 0.006423f, -0.012959f, -0.010329f, 0.000697f, -0.005263f, -0.011055f, -0.007846f, 0.006214f, -0.002385f, 0.002864f, 0.000832f, 0.007771f, 0.005706f, 0.002670f, - -0.003937f, 0.002105f, -0.000693f, -0.004704f, -0.004633f, 0.004475f, -0.001899f, 0.001329f, -0.002992f, -0.004539f, -0.000780f, -0.000357f, 0.004050f, -0.000440f, -0.003920f, 0.001074f, 0.001525f, 0.004476f, 0.000888f, 0.001089f, -0.001878f, 0.005602f, -0.002111f, 0.006377f, -0.003496f, 0.004735f, -0.004161f, 0.000748f, 0.002484f, 0.000239f, -0.000293f, 0.001043f, -0.000946f, -0.001660f, -0.015158f, 0.011469f, -0.006737f, -0.000569f, -0.039466f, -0.009331f, -0.014584f, -0.009662f, 0.001615f, 0.013022f, -0.002584f, 0.017222f, 0.009139f, -0.001031f, -0.016965f, -0.007042f, 0.025277f, 0.004212f, -0.015109f, -0.011066f, -0.004980f, 0.011831f, -0.009221f, 0.000127f, 0.008161f, 0.012873f, 0.014556f, -0.015959f, 0.010744f, 0.001438f, 0.003050f, 0.004539f, 0.005907f, 0.005112f, 0.014594f, 0.000385f, 0.004440f, -0.012794f, 0.017883f, -0.008996f, -0.004197f, 0.002985f, -0.014823f, 0.018333f, -0.002894f, -0.035889f, -0.011848f, -0.028821f, 0.001772f, -0.000441f, -0.008692f, 0.039035f, -0.006821f, -0.019361f, -0.006550f, -0.004779f, 0.017959f, -0.002483f, 0.008573f, 0.010499f, -0.007317f, 0.013378f, - 0.018509f, -0.009425f, 0.007053f, -0.016468f, 0.008030f, -0.005922f, -0.004636f, 0.018968f, -0.006942f, -0.001842f, -0.008434f, 0.000481f, 0.000334f, 0.007222f, 0.010735f, 0.011343f, -0.003020f, -0.003246f, 0.000459f, 0.014700f, 0.006992f, 0.007633f, 0.000306f, -0.012040f, 0.004840f, -0.005856f, -0.006530f, -0.003610f, -0.000108f, -0.000351f, 0.000793f, 0.002659f, 0.002819f, -0.000719f, 0.008012f, 0.001285f, 0.003510f, 0.001382f, 0.001596f, -0.002246f, 0.002135f, 0.000803f, -0.002350f, -0.003509f, -0.002260f, -0.006029f, -0.004695f, 0.004147f, 0.003361f, -0.005102f, 0.001410f, -0.000278f, 0.001454f, 0.005761f, 0.001246f, -0.002251f, 0.000650f, 0.001861f, 0.000153f, -0.004653f, 0.002089f, 0.017942f, -0.025054f, 0.005003f, 0.005128f, -0.007937f, 0.003370f, 0.018882f, 0.020247f, 0.007506f, 0.007246f, 0.009653f, -0.015654f, -0.002727f, -0.016714f, -0.000354f, 0.010691f, 0.006761f, -0.003512f, -0.013231f, -0.004276f, 0.008938f, -0.017325f, 0.000588f, -0.001226f, 0.007999f, 0.016523f, 0.001562f, -0.008885f, -0.006782f, 0.017681f, -0.011355f, -0.005466f, 0.010168f, -0.006309f, -0.020884f, - -0.007547f, 0.004754f, 0.003554f, -0.008349f, 0.001978f, 0.010881f, 0.007532f, 0.010496f, -0.001207f, 0.007915f, 0.015043f, -0.006614f, 0.007510f, 0.006463f, -0.010236f, 0.022284f, -0.021378f, 0.012776f, 0.005657f, -0.029751f, 0.028523f, -0.018418f, 0.004088f, -0.003277f, 0.022774f, -0.009634f, -0.016070f, -0.003413f, 0.000189f, 0.004141f, 0.017512f, -0.014824f, -0.000678f, 0.001082f, 0.001075f, -0.002648f, 0.005225f, -0.012047f, -0.001714f, -0.008583f, -0.016014f, -0.017781f, 0.009658f, 0.007808f, 0.007486f, 0.000207f, 0.011339f, -0.005163f, -0.012963f, 0.003428f, -0.023007f, -0.019202f, -0.003553f, 0.005685f, -0.000127f, -0.003514f, -0.002909f, 0.002817f, -0.012559f, -0.004159f, -0.002587f, -0.001992f, 0.005940f, -0.000542f, 0.001045f, 0.000553f, -0.004072f, 0.002158f, -0.004585f, 0.000438f, 0.002301f, -0.004964f, -0.000998f, 0.004381f, -0.003257f, 0.000129f, -0.002260f, -0.000084f, 0.001666f, 0.000269f, -0.006847f, -0.000970f, -0.000009f, -0.000214f, -0.001112f, -0.004101f, -0.007049f, -0.001568f, -0.000361f, -0.000837f, 0.005874f, 0.004454f, -0.019965f, 0.015827f, -0.045750f, 0.025045f, - -0.018213f, -0.012517f, -0.022371f, 0.002452f, -0.002693f, 0.003867f, 0.015959f, -0.013490f, -0.005172f, 0.012650f, 0.011614f, -0.003915f, 0.004510f, -0.006265f, -0.020972f, -0.002125f, 0.005263f, -0.010879f, 0.016895f, 0.002701f, -0.001987f, -0.010206f, -0.009901f, 0.002128f, 0.026041f, 0.000903f, -0.003674f, 0.006935f, -0.022535f, -0.004102f, 0.008217f, -0.015480f, 0.021880f, 0.013682f, -0.000797f, -0.006934f, -0.007345f, -0.008673f, -0.014983f, -0.018742f, 0.015549f, 0.000913f, 0.027630f, 0.002268f, -0.001440f, -0.012665f, 0.002294f, -0.005112f, 0.006203f, -0.000631f, -0.017419f, -0.013867f, -0.017750f, -0.030146f, -0.004164f, 0.026113f, -0.025205f, -0.001797f, -0.026392f, 0.003969f, 0.007439f, 0.005892f, 0.018842f, -0.002316f, -0.027130f, 0.019231f, -0.001880f, -0.013378f, -0.010943f, -0.023695f, -0.008022f, -0.018075f, 0.009786f, -0.027625f, -0.004556f, 0.010524f, -0.000200f, 0.001847f, 0.013108f, 0.006434f, 0.015742f, -0.000172f, -0.008501f, -0.003598f, -0.005821f, -0.000525f, 0.005820f, -0.001838f, 0.001031f, 0.000566f, 0.000644f, -0.004802f, -0.006653f, 0.003974f, -0.004654f, 0.001807f, - 0.000860f, -0.001182f, 0.002105f, 0.000471f, 0.000896f, 0.009223f, 0.001732f, -0.000786f, 0.001825f, 0.002761f, 0.002121f, -0.004986f, -0.000691f, -0.010244f, 0.003792f, 0.004955f, 0.007877f, 0.002591f, 0.002737f, -0.000386f, -0.005033f, 0.002818f, -0.000187f, 0.019590f, -0.007126f, 0.017414f, -0.016986f, -0.009103f, 0.012023f, 0.003774f, -0.022945f, 0.001438f, 0.030022f, -0.034544f, 0.002116f, 0.016067f, 0.038850f, -0.016620f, -0.009777f, -0.004289f, 0.030107f, 0.029435f, -0.031067f, -0.001501f, -0.023844f, -0.011496f, 0.015684f, 0.015648f, 0.020628f, 0.011629f, -0.003977f, 0.014407f, -0.017754f, -0.009654f, -0.001691f, -0.002770f, -0.025739f, 0.002266f, -0.000487f, 0.034167f, -0.005181f, 0.016832f, 0.004175f, 0.009974f, 0.022999f, -0.013868f, -0.006070f, -0.033774f, 0.023370f, -0.029765f, -0.005180f, 0.006831f, -0.003914f, -0.017190f, -0.004207f, 0.004883f, -0.012117f, 0.003354f, -0.001887f, -0.002599f, -0.037837f, -0.026874f, 0.001992f, -0.019481f, -0.026531f, 0.004926f, -0.024519f, 0.007860f, 0.016149f, -0.014452f, 0.027654f, 0.005800f, 0.017792f, 0.018981f, 0.004987f, -0.014041f, - -0.016555f, -0.020726f, 0.010790f, -0.021505f, 0.013080f, 0.015601f, 0.021602f, 0.003830f, -0.015167f, -0.009787f, 0.000558f, 0.002122f, -0.028364f, -0.000656f, -0.018319f, -0.003091f, -0.005084f, 0.001201f, -0.013372f, 0.001828f, -0.002951f, -0.000142f, -0.008630f, -0.006343f, 0.002249f, 0.014278f, 0.001655f, -0.001300f, 0.002088f, -0.001964f, -0.005107f, -0.005118f, -0.005536f, -0.002439f, -0.006597f, 0.007406f, 0.005539f, -0.000435f, -0.005422f, 0.008791f, 0.013244f, -0.002832f, -0.002079f, -0.003014f, -0.001140f, -0.000363f, 0.003417f, -0.004881f, 0.005400f, 0.004900f, 0.003521f, -0.004638f, -0.000490f, 0.002805f, 0.004034f, 0.009085f, -0.018281f, 0.047302f, 0.019829f, 0.008155f, 0.024440f, -0.009370f, 0.005203f, -0.025208f, -0.032321f, 0.020372f, 0.041728f, 0.012357f, -0.000119f, -0.041200f, 0.049751f, 0.007145f, 0.006192f, 0.007091f, 0.001917f, 0.008947f, 0.002911f, -0.007151f, -0.000232f, 0.012511f, -0.007627f, 0.015731f, 0.003101f, -0.012444f, -0.017148f, -0.004733f, 0.015804f, -0.004340f, 0.005206f, -0.007144f, -0.006245f, 0.000238f, 0.044639f, 0.007185f, 0.006515f, 0.005996f, - 0.003828f, 0.026690f, -0.009889f, 0.007664f, -0.017199f, 0.031806f, 0.044398f, 0.011536f, -0.002495f, -0.015800f, 0.046387f, 0.021756f, 0.000739f, -0.017943f, 0.006830f, -0.010769f, -0.001609f, -0.020581f, -0.007677f, -0.013737f, -0.018812f, 0.030482f, -0.009101f, 0.022462f, 0.004759f, -0.017532f, -0.000217f, -0.037508f, 0.035689f, -0.002590f, -0.017014f, -0.013324f, -0.021697f, -0.026788f, -0.014615f, 0.041481f, -0.012897f, 0.014943f, 0.018876f, -0.016765f, -0.015923f, -0.029929f, 0.004540f, 0.020180f, 0.006954f, 0.019297f, -0.004425f, -0.003809f, 0.000889f, 0.005490f, -0.008211f, 0.002313f, -0.014888f, 0.004853f, -0.000678f, 0.016934f, 0.011952f, -0.009141f, 0.000933f, -0.000489f, 0.010078f, -0.003408f, -0.013403f, 0.002990f, -0.000414f, -0.001073f, 0.004986f, 0.000941f, -0.002102f, -0.006704f, -0.007524f, -0.001428f, -0.001799f, 0.007985f, -0.000308f, 0.008010f, -0.010968f, 0.002674f, 0.008265f, -0.015526f, -0.011340f, 0.004121f, -0.004949f, 0.011678f, 0.014023f, -0.010442f, -0.011100f, 0.044099f, 0.043231f, 0.053406f, 0.032136f, 0.010606f, -0.013585f, -0.014099f, 0.007987f, 0.015516f, - 0.018977f, -0.028377f, -0.000844f, -0.003378f, 0.014232f, 0.011247f, -0.019700f, -0.024282f, -0.000099f, -0.009197f, 0.023147f, 0.027250f, -0.000016f, 0.014448f, 0.004750f, 0.005779f, 0.031459f, -0.019210f, -0.025474f, 0.020093f, -0.033359f, 0.002889f, -0.010284f, 0.018417f, 0.009391f, 0.000346f, 0.021528f, 0.019773f, -0.017975f, 0.022403f, -0.000053f, -0.009577f, 0.005295f, 0.024337f, -0.009410f, 0.010415f, 0.018037f, 0.008171f, -0.038883f, -0.022474f, 0.003827f, 0.002061f, -0.026437f, -0.018055f, 0.008777f, 0.012585f, 0.010688f, -0.036009f, -0.025160f, -0.025057f, -0.001992f, 0.015618f, 0.022764f, -0.057207f, -0.042053f, 0.007004f, 0.008789f, 0.033054f, 0.011650f, 0.012126f, 0.024059f, -0.002584f, -0.006178f, -0.008728f, 0.059070f, 0.020428f, -0.009324f, -0.030906f, 0.028239f, 0.018456f, -0.009240f, -0.008392f, 0.004357f, -0.008502f, 0.015082f, -0.005443f, -0.003234f, 0.008887f, -0.002204f, -0.003538f, -0.004660f, 0.009333f, 0.024212f, 0.000174f, 0.001719f, 0.000852f, 0.010526f, 0.013528f, -0.003453f, -0.008510f, 0.003653f, -0.000791f, 0.002717f, 0.001589f, 0.002066f, -0.011482f, - -0.006278f, 0.008142f, 0.000816f, -0.004671f, 0.003961f, 0.011330f, 0.008807f, -0.015193f, -0.003426f, -0.010100f, -0.009742f, 0.007214f, -0.011630f, 0.004558f, -0.006280f, 0.011287f, -0.013458f, -0.018767f, -0.036312f, -0.035352f, -0.029050f, 0.011207f, -0.003738f, 0.016393f, -0.032030f, -0.005287f, 0.001500f, -0.012367f, -0.014987f, 0.026036f, -0.009973f, 0.005266f, -0.000392f, 0.001805f, -0.026115f, -0.009619f, -0.022331f, 0.002964f, 0.002953f, 0.005796f, 0.061753f, -0.024063f, 0.017059f, 0.025987f, -0.013189f, -0.012457f, -0.018679f, -0.003783f, 0.028849f, -0.029439f, 0.020156f, -0.001938f, -0.004900f, 0.002698f, 0.002962f, 0.015806f, 0.001782f, -0.031231f, 0.023889f, -0.019458f, -0.044805f, -0.036281f, -0.018165f, 0.060650f, 0.051476f, -0.027986f, -0.008045f, -0.038417f, -0.032045f, -0.012666f, 0.037483f, 0.000966f, 0.025857f, 0.013501f, -0.017617f, 0.019694f, -0.013410f, -0.039986f, -0.003376f, -0.024250f, -0.004930f, -0.013000f, 0.078924f, 0.000712f, -0.065309f, 0.051275f, -0.020683f, -0.014574f, 0.051829f, 0.052653f, 0.000188f, -0.023072f, 0.010289f, 0.012869f, -0.070919f, -0.030531f, - 0.001898f, -0.010440f, 0.037155f, 0.015710f, -0.053795f, -0.008065f, -0.004302f, 0.024384f, 0.015538f, 0.010609f, 0.009666f, -0.011218f, 0.001938f, 0.004269f, 0.022537f, -0.002800f, 0.003117f, 0.004411f, 0.003867f, 0.013229f, 0.006297f, 0.000294f, -0.015357f, 0.019457f, -0.001742f, -0.000097f, 0.000926f, 0.000020f, -0.008288f, -0.012965f, -0.008861f, 0.001760f, -0.003185f, 0.005661f, -0.000861f, -0.005747f, 0.006210f, 0.014357f, -0.019084f, -0.006215f, -0.005808f, -0.002742f, 0.005468f, -0.000372f, -0.005439f, -0.010772f, -0.004016f, -0.002784f, 0.009730f, -0.031409f, -0.019529f, 0.009548f, 0.007455f, 0.017087f, 0.053771f, 0.009279f, -0.001363f, 0.012590f, 0.002823f, -0.022346f, -0.013719f, 0.012057f, 0.002784f, 0.043910f, 0.010385f, -0.002721f, 0.015901f, 0.023583f, 0.023909f, 0.025730f, 0.001411f, -0.018020f, -0.004983f, -0.041185f, -0.005577f, -0.046505f, 0.025974f, -0.028294f, -0.010937f, 0.000158f, 0.037695f, -0.021817f, 0.020987f, -0.015315f, 0.012728f, -0.019212f, 0.024069f, 0.036360f, 0.002503f, -0.007658f, -0.019526f, -0.028166f, 0.015803f, 0.018097f, 0.046106f, -0.006217f, - 0.002339f, 0.020333f, 0.073831f, -0.017194f, 0.011090f, -0.011916f, -0.041079f, 0.028892f, -0.005859f, 0.020555f, -0.002523f, 0.005121f, -0.024739f, 0.068363f, -0.102454f, 0.075475f, -0.117559f, 0.050731f, -0.060633f, 0.018889f, -0.047539f, 0.017170f, 0.031555f, -0.007494f, 0.023452f, -0.012011f, 0.085789f, -0.051980f, 0.056967f, -0.088202f, 0.044541f, -0.034565f, 0.042852f, -0.028742f, -0.031143f, -0.015209f, -0.007877f, 0.021667f, -0.005919f, -0.003782f, 0.002166f, 0.001356f, -0.011011f, 0.015421f, -0.016614f, 0.016296f, -0.012006f, 0.005009f, -0.019108f, -0.010675f, -0.014117f, 0.002554f, -0.012980f, 0.016091f, 0.017147f, -0.016226f, -0.000258f, 0.006518f, 0.015737f, -0.002360f, 0.005644f, 0.012909f, -0.012083f, 0.021335f, -0.005931f, 0.028212f, -0.016807f, 0.033792f, -0.024096f, 0.008701f, -0.001981f, 0.018851f, 0.015638f, -0.002987f, 0.009156f, -0.026027f, 0.029676f, -0.020386f, 0.007212f, -0.020715f, 0.015001f, -0.027635f, 0.009496f, -0.002327f, -0.010131f, 0.010448f, 0.026151f, 0.020887f, 0.082811f, -0.057588f, 0.024164f, 0.015124f, -0.049570f, -0.001394f, -0.009666f, -0.014130f, - -0.025422f, -0.001383f, 0.003031f, 0.032914f, 0.012380f, 0.017219f, 0.024849f, 0.020022f, 0.000854f, 0.027443f, -0.031554f, -0.004574f, 0.038260f, 0.004239f, -0.052246f, -0.012048f, -0.068402f, -0.012820f, 0.012062f, -0.012709f, -0.015858f, -0.002995f, 0.061356f, 0.015469f, 0.004807f, 0.007468f, 0.015447f, -0.004632f, -0.035014f, -0.010770f, -0.003782f, 0.006514f, -0.007983f, -0.016424f, 0.044466f, 0.023863f, -0.009049f, -0.002120f, -0.009411f, -0.040112f, -0.032798f, -0.024060f, -0.019870f, 0.044749f, 0.010903f, 0.016511f, -0.026853f, -0.026205f, 0.008548f, 0.018210f, 0.016926f, -0.007589f, -0.005181f, -0.030427f, -0.019976f, 0.026552f, 0.001324f, -0.073636f, 0.026023f, 0.040161f, 0.012980f, -0.032097f, -0.019614f, -0.015997f, 0.005401f, -0.023113f, 0.011531f, -0.054204f, -0.072314f, 0.029969f, 0.026251f, -0.014492f, -0.026511f, 0.020310f, -0.011804f, 0.005249f, 0.006411f, -0.010685f, 0.011712f, -0.006625f, -0.006697f, -0.003939f, 0.017529f, -0.012404f, -0.003545f, -0.013569f, -0.000080f, 0.001124f, 0.011754f, 0.012048f, -0.001248f, 0.007095f, -0.008454f, 0.014081f, -0.009717f, 0.011501f, - -0.026546f, -0.012143f, -0.003576f, 0.007686f, -0.008615f, -0.017395f, -0.013240f, 0.006343f, 0.013823f, -0.000524f, 0.017832f, 0.004978f, 0.007104f, 0.001084f, 0.011636f, -0.006542f, 0.011122f, -0.002670f, -0.021875f, -0.016893f, -0.006394f, 0.009994f, -0.012272f, 0.007264f, -0.068285f, 0.059770f, 0.072739f, -0.006846f, 0.052884f, 0.002117f, 0.008075f, 0.023004f, -0.046729f, 0.016954f, 0.034569f, 0.034082f, 0.014305f, 0.010532f, -0.033793f, 0.024677f, 0.014527f, -0.020533f, 0.010899f, -0.004112f, 0.040280f, 0.011073f, 0.010290f, 0.023778f, -0.009572f, -0.027479f, 0.007912f, 0.051295f, -0.018411f, -0.010027f, 0.046341f, -0.017072f, -0.020767f, -0.016928f, 0.015943f, 0.059597f, 0.082910f, -0.005196f, -0.053823f, 0.081316f, 0.027993f, -0.053612f, 0.060650f, 0.023203f, -0.015070f, -0.015591f, -0.022776f, -0.037784f, -0.002166f, 0.019804f, -0.032409f, -0.021231f, -0.068438f, -0.009314f, 0.039813f, -0.082904f, -0.044911f, 0.013075f, 0.013351f, 0.016340f, 0.050273f, 0.044489f, -0.073675f, 0.000599f, 0.002815f, -0.052141f, 0.014551f, 0.024803f, -0.026756f, -0.019097f, -0.022592f, 0.015106f, - 0.057888f, 0.018116f, 0.030104f, -0.039588f, 0.020172f, -0.044824f, 0.003920f, -0.030145f, -0.122471f, 0.093667f, 0.024071f, -0.034184f, 0.063403f, -0.021875f, -0.028891f, 0.017056f, 0.012957f, 0.016313f, 0.024792f, 0.010027f, -0.024906f, -0.007910f, 0.024323f, -0.000800f, 0.009359f, 0.003922f, -0.003994f, 0.005971f, -0.010925f, 0.008090f, 0.022725f, 0.008204f, -0.013410f, -0.009921f, 0.006938f, -0.006086f, -0.012167f, 0.004637f, 0.014177f, 0.008239f, -0.042359f, -0.012811f, -0.031196f, -0.016186f, 0.018182f, -0.013909f, -0.017437f, 0.016596f, 0.010723f, -0.018285f, 0.023226f, -0.017155f, -0.007507f, 0.008342f, -0.013465f, 0.015268f, -0.006792f, -0.025131f, -0.038859f, 0.044777f, 0.148460f, -0.047399f, 0.001308f, 0.011408f, 0.067031f, 0.059428f, -0.019451f, -0.025803f, -0.037439f, 0.001594f, 0.028393f, -0.000946f, -0.019141f, -0.019687f, 0.026794f, -0.014621f, -0.036015f, -0.032197f, -0.006504f, 0.054553f, 0.038264f, -0.043384f, 0.002915f, 0.000789f, -0.018916f, 0.021505f, 0.007957f, -0.015483f, -0.005111f, -0.012178f, -0.005818f, 0.069639f, -0.025934f, -0.046252f, -0.032374f, -0.026289f, - 0.061587f, 0.001702f, -0.014282f, 0.056710f, 0.038983f, 0.015494f, 0.028858f, 0.055764f, -0.033920f, 0.008595f, 0.054255f, 0.031720f, 0.041447f, -0.047092f, -0.013280f, -0.001766f, 0.019849f, 0.018699f, -0.044579f, 0.004246f, -0.058567f, -0.088082f, -0.004654f, -0.023310f, 0.040888f, 0.045473f, -0.011943f, -0.003622f, 0.009221f, -0.032036f, -0.085325f, 0.057402f, -0.041358f, 0.008863f, -0.015938f, -0.028864f, -0.016760f, -0.033470f, -0.067649f, 0.039921f, 0.035518f, 0.043107f, 0.008295f, -0.053765f, -0.094449f, -0.028058f, -0.026157f, -0.011576f, 0.029807f, -0.019342f, -0.004766f, 0.005673f, 0.003959f, -0.015051f, -0.006920f, -0.012098f, 0.001406f, -0.005410f, 0.009922f, -0.005961f, -0.007394f, 0.010915f, 0.014178f, 0.011246f, -0.022922f, 0.007439f, 0.001218f, -0.002109f, 0.000186f, -0.050240f, 0.002337f, 0.006893f, 0.007285f, -0.033124f, 0.021421f, -0.004799f, -0.027654f, -0.022589f, 0.013253f, 0.017647f, -0.003445f, 0.010452f, -0.017124f, -0.012013f, -0.011729f, 0.001273f, 0.020349f, 0.005121f, 0.019416f, -0.000563f, 0.008887f, -0.029256f, -0.004740f, 0.007041f, 0.003872f, -0.023207f, - -0.007033f, -0.072904f, -0.041792f, -0.033990f, -0.085829f, 0.099101f, -0.002272f, 0.052195f, -0.011911f, 0.002594f, -0.059821f, -0.032720f, -0.030866f, 0.006905f, 0.046873f, -0.002159f, -0.048805f, -0.036512f, -0.069767f, -0.077680f, 0.066615f, 0.024563f, -0.060457f, -0.018780f, 0.029829f, 0.055458f, 0.007772f, -0.068862f, -0.041860f, 0.013552f, 0.019260f, 0.017072f, 0.040191f, -0.042825f, -0.040621f, -0.006261f, -0.014416f, 0.005648f, 0.011970f, -0.082752f, -0.015247f, -0.057726f, -0.036954f, -0.076982f, -0.029172f, 0.105391f, 0.018180f, 0.003303f, 0.025860f, 0.026109f, 0.008261f, 0.078308f, 0.062023f, -0.020538f, 0.021073f, 0.105817f, -0.027727f, -0.024762f, -0.025279f, -0.078894f, -0.003038f, -0.043216f, -0.097948f, -0.102772f, -0.053855f, -0.053076f, 0.024002f, -0.039762f, 0.003477f, 0.020789f, -0.069795f, -0.025627f, 0.000445f, -0.000350f, 0.018021f, 0.045592f, 0.030353f, 0.054986f, 0.074540f, 0.054023f, -0.006658f, -0.039419f, -0.057101f, -0.004912f, 0.023634f, 0.006911f, -0.008034f, -0.000763f, 0.016191f, 0.013027f, 0.035109f, -0.004002f, 0.005598f, 0.000573f, -0.011699f, 0.011427f, - 0.001815f, -0.005707f, 0.030002f, 0.012925f, 0.006811f, -0.028177f, 0.018923f, -0.010151f, 0.014271f, -0.026746f, -0.074053f, -0.003536f, 0.029240f, -0.005593f, -0.039308f, -0.025298f, -0.028768f, -0.021767f, 0.009381f, 0.012839f, 0.014684f, 0.003932f, -0.002632f, 0.010941f, 0.028979f, 0.048293f, 0.045693f, 0.056730f, 0.048643f, -0.004750f, 0.032707f, 0.073998f, 0.005258f, -0.032640f, -0.046422f, -0.046858f, -0.063634f, -0.051799f, -0.024745f, -0.027884f, -0.003893f, 0.065606f, -0.042890f, 0.012960f, -0.049675f, -0.016843f, -0.054173f, 0.006958f, 0.065713f, -0.001511f, 0.040615f, -0.081242f, 0.071420f, 0.023935f, -0.014635f, 0.056610f, 0.007938f, 0.025754f, -0.022641f, -0.026724f, -0.000508f, 0.017346f, 0.013294f, -0.056727f, 0.052080f, -0.062864f, 0.007703f, 0.017596f, -0.021341f, 0.037057f, -0.039074f, -0.022196f, -0.004314f, -0.013941f, -0.019780f, -0.004364f, 0.008386f, -0.029027f, -0.034215f, -0.011084f, -0.005987f, -0.008398f, 0.020792f, 0.011301f, 0.008473f, -0.041505f, 0.011047f, 0.050504f, 0.066946f, -0.049382f, -0.024881f, 0.056926f, 0.077849f, -0.047196f, -0.029190f, 0.032833f, - 0.013780f, -0.037482f, 0.031124f, -0.088049f, -0.017340f, 0.035888f, 0.070391f, 0.009166f, -0.043665f, -0.039479f, 0.010685f, 0.084371f, 0.007355f, 0.012656f, 0.002532f, 0.028005f, -0.005404f, 0.062708f, -0.000686f, -0.069354f, 0.043777f, -0.045247f, -0.013878f, 0.019212f, -0.026485f, 0.006350f, -0.056468f, -0.021026f, 0.052362f, 0.024138f, -0.023459f, -0.033516f, -0.018349f, 0.004408f, -0.027223f, -0.008187f, -0.006002f, -0.016653f, -0.010229f, -0.008019f, -0.035345f, 0.022428f, -0.013210f, -0.015642f, -0.051196f, -0.012864f, 0.037661f, -0.026006f, -0.014382f, -0.013526f, -0.029238f, 0.056368f, 0.023117f, 0.002238f, -0.001849f, -0.031199f, -0.046865f, 0.003092f, 0.041923f, 0.034509f, 0.011547f, -0.035141f, -0.020597f, -0.015630f, 0.020453f, 0.003865f, -0.031346f, -0.007635f, 0.002037f, 0.012499f, -0.027881f, -0.018620f, -0.016446f, 0.043868f, 0.022422f, 0.002988f, -0.027081f, -0.023306f, 0.024515f, 0.052731f, -0.000527f, -0.022443f, -0.032346f, -0.010794f, 0.014620f, 0.001334f, -0.007454f, 0.002058f, -0.006453f, -0.004779f, 0.004979f, -0.105863f, -0.029621f, 0.018084f, -0.036006f, 0.104892f, - 0.076415f, 0.050450f, 0.026443f, 0.070815f, 0.049629f, 0.016772f, 0.033706f, -0.082966f, -0.111978f, -0.015378f, 0.000754f, -0.028591f, 0.014623f, -0.005187f, -0.029490f, -0.036476f, -0.030193f, 0.058022f, 0.050041f, -0.040172f, -0.005509f, -0.005470f, -0.010457f, -0.014185f, -0.021346f, -0.030370f, -0.043072f, -0.008009f, 0.075156f, -0.023981f, -0.042258f, -0.019866f, 0.070521f, -0.032928f, -0.032885f, 0.109811f, 0.038692f, 0.018633f, -0.026986f, -0.060052f, -0.042373f, -0.061946f, 0.016494f, 0.051465f, 0.138163f, -0.121468f, -0.051902f, 0.071590f, 0.098554f, 0.017459f, -0.006104f, 0.127118f, 0.060566f, -0.039830f, 0.040208f, -0.014399f, 0.000271f, -0.087671f, -0.044529f, -0.030496f, -0.144270f, -0.060889f, -0.023403f, 0.077802f, -0.042111f, -0.024056f, 0.057720f, -0.003627f, -0.007817f, 0.014075f, 0.040593f, -0.039139f, 0.028668f, 0.044293f, 0.000919f, -0.008160f, -0.081451f, 0.037767f, 0.029086f, -0.093809f, -0.006867f, 0.010413f, 0.006048f, -0.007771f, -0.041791f, 0.011351f, 0.007060f, 0.011975f, -0.006634f, -0.011836f, 0.030053f, 0.006653f, -0.006294f, 0.020970f, 0.008582f, 0.055505f, - -0.007580f, 0.018365f, 0.003483f, -0.043658f, -0.038252f, 0.027085f, -0.021297f, 0.016560f, 0.020636f, 0.013044f, 0.012741f, 0.000605f, 0.036525f, -0.011419f, -0.009150f, -0.014172f, 0.010482f, 0.028701f, -0.042854f, -0.015701f, 0.020581f, 0.009809f, -0.024279f, -0.043467f, -0.011174f, 0.012251f, 0.091814f, 0.033713f, -0.007667f, 0.023831f, -0.004661f, -0.008480f, -0.033842f, 0.016256f, 0.014015f, -0.026676f, -0.013005f, -0.097121f, -0.003953f, 0.040017f, -0.009383f, -0.040492f, 0.017732f, -0.009086f, 0.043705f, 0.008747f, -0.021169f, -0.000325f, 0.046788f, -0.026622f, 0.007530f, 0.016912f, -0.014233f, -0.000402f, -0.025309f, 0.051672f, -0.003101f, 0.007698f, 0.000829f, 0.024976f, -0.011304f, -0.009716f, -0.016148f, 0.010335f, 0.019419f, -0.008502f, 0.023069f, -0.009981f, 0.014216f, -0.024229f, -0.019090f, 0.029429f, 0.037737f, -0.048746f, 0.002281f, 0.000073f, 0.004572f, 0.015374f, -0.030671f, 0.047063f, -0.042145f, 0.037881f, 0.005305f, -0.065792f, -0.003585f, 0.051365f, -0.066973f, 0.031968f, 0.000295f, 0.008666f, -0.016078f, -0.010021f, 0.013538f, -0.019418f, 0.068595f, -0.050732f, - 0.007589f, -0.013606f, -0.006152f, 0.016928f, 0.000964f, -0.008316f, -0.001572f, 0.020753f, -0.000644f, -0.023793f, 0.006711f, 0.012092f, -0.039846f, 0.031011f, 0.013998f, 0.001470f, 0.028585f, -0.010454f, -0.008840f, 0.013466f, 0.006247f, 0.008544f, 0.004861f, -0.007878f, 0.016138f, 0.006955f, 0.001197f, -0.017427f, -0.002878f, 0.008522f, 0.015468f, -0.026455f, 0.013847f, 0.016490f, -0.023385f, 0.011098f, 0.003432f, 0.003986f, 0.012342f, -0.006955f, 0.002757f, -0.004359f, -0.033921f, -0.000510f, -0.008203f, 0.014818f, -0.009556f, 0.005658f, 0.003720f, -0.001399f, 0.004523f, 0.008585f, -0.005623f, 0.000008f, 0.001526f, -0.000244f, 0.002451f, 0.010308f, -0.010519f, 0.009658f, -0.007684f, -0.048940f, -0.138185f, -0.197370f, 0.066372f, 0.175533f, 0.038758f, 0.486518f, 0.400696f, 0.270736f, 0.458173f, 0.238667f, -0.016278f, -0.057163f, -0.180899f, -0.417714f, -0.344947f, -0.335486f, -0.466528f, -0.344912f, -0.101288f, -0.074698f, -0.012211f, 0.162345f, 0.075587f, -0.020167f, 0.102982f, 0.170327f, 0.083412f, 0.079811f, 0.155017f, 0.092355f, 0.071230f, 0.140456f, 0.220550f, 0.091829f, - 0.129473f, 0.207023f, 0.035535f, 0.014056f, 0.182930f, 0.108175f, -0.070128f, 0.088214f, 0.113675f, -0.118610f, -0.035385f, 0.131097f, -0.026405f, -0.078469f, 0.169341f, 0.089769f, -0.105051f, 0.090894f, 0.120560f, -0.160769f, -0.150498f, -0.064279f, -0.388264f, -0.515209f, -0.323133f, -0.455471f, -0.607134f, -0.423065f, -0.432947f, -0.559777f, -0.442663f, -0.306948f, -0.332812f, -0.198911f, 0.019010f, 0.124269f, 0.270123f, 0.441974f, 0.550919f, 0.678408f, 0.753754f, 0.823449f, 0.873157f, 0.784075f, 0.616558f, 0.569576f, 0.365097f, 0.110387f, 0.086709f, -0.058344f, -0.280318f, -0.220164f, -0.093426f, -0.208561f, -0.214424f, -0.045259f, -0.151049f, -0.289523f, -0.174844f, -0.126786f, -0.258976f, -0.220490f, -0.077907f, -0.195946f, -0.232790f, -0.018551f, -0.011621f, -0.104862f, 0.041663f, 0.024310f, -0.168790f, -0.125114f, -0.072618f, -0.240305f, -0.331107f, -0.270749f, -0.369819f, -0.458732f, -0.340311f, -0.273308f, -0.259242f, -0.113472f, 0.053175f, 0.137997f, 0.204730f, 0.282693f, 0.319020f, 0.286144f, 0.373073f, 0.478291f, 0.495797f, 0.463034f, 0.471564f, 0.454831f, 0.369279f, 0.416968f, - 0.376471f, 0.161857f, 0.021299f, -0.092382f, -0.203603f, -0.215223f, -0.177448f, -0.209600f, -0.204905f, -0.177372f, -0.174991f, -0.186551f, -0.153207f, -0.136814f, -0.130616f, -0.123318f, -0.095005f, -0.089971f, -0.093262f, -0.073794f, -0.048225f, -0.043355f, -0.027645f, -0.002970f, 0.011458f, 0.011913f, 0.014353f, 0.005395f, 0.003308f} - }, - { - {0.007552f, 0.018077f, 0.000306f, 0.000741f, -0.008639f, -0.006916f, 0.005212f, 0.003185f, 0.000467f, 0.007373f, -0.011144f, -0.003792f, 0.018044f, 0.001219f, 0.003508f, -0.004760f, -0.006105f, 0.008476f, 0.007088f, -0.002989f, 0.006976f, 0.000283f, 0.001127f, -0.006900f, 0.002465f, -0.006284f, -0.004907f, -0.006173f, 0.002081f, 0.000234f, -0.002021f, -0.000708f, 0.002093f, 0.005354f, -0.002583f, -0.009829f, 0.000152f, -0.007011f, -0.008961f, -0.002360f, 0.004015f, -0.001390f, 0.003582f, 0.002272f, 0.003282f, -0.001424f, -0.001277f, -0.001696f, -0.001466f, 0.003008f, -0.000123f, 0.006199f, -0.000854f, 0.007679f, 0.001261f, 0.001728f, 0.007300f, 0.002596f, 0.001856f, 0.009456f, -0.003868f, 0.003120f, -0.003310f, -0.006706f, 0.006126f, -0.002231f, -0.000002f, 0.002258f, -0.001143f, -0.005570f, -0.001735f, 0.003992f, -0.002613f, -0.000151f, -0.005419f, 0.002598f, 0.000339f, -0.003611f, 0.000414f, -0.005756f, 0.000841f, -0.005521f, -0.000519f, -0.000083f, -0.000764f, 0.003182f, 0.001514f, 0.000831f, 0.001729f, -0.000607f, 0.003193f, 0.002331f, -0.000291f, 0.000714f, 0.000690f, -0.000121f, - 0.000087f, 0.001067f, -0.001380f, 0.000738f, -0.001756f, 0.001474f, 0.000129f, -0.000272f, -0.000107f, 0.001221f, 0.000282f, -0.001127f, 0.000357f, -0.000059f, -0.000685f, -0.001702f, -0.023724f, -0.012320f, -0.005544f, -0.005150f, -0.000025f, 0.000059f, 0.001761f, 0.000334f, -0.001333f, -0.009722f, -0.004412f, -0.009963f, -0.015603f, -0.013035f, 0.007353f, 0.009070f, 0.009175f, -0.003620f, -0.001091f, -0.001038f, -0.002054f, 0.003376f, 0.001408f, -0.003323f, -0.007074f, 0.005089f, 0.004343f, 0.006359f, 0.001660f, -0.002145f, -0.003876f, 0.001802f, 0.003034f, -0.000728f, 0.006459f, -0.003148f, -0.000187f, 0.006278f, -0.004813f, -0.007633f, 0.000602f, 0.010550f, 0.002419f, 0.002332f, 0.001471f, 0.000089f, 0.001346f, -0.001636f, 0.001871f, -0.008341f, 0.001353f, 0.008650f, -0.001989f, 0.000125f, 0.000851f, -0.002956f, -0.001660f, -0.001203f, -0.001415f, -0.002318f, 0.005286f, -0.004971f, 0.005188f, 0.004423f, 0.009710f, -0.000677f, 0.005455f, 0.012404f, -0.002297f, -0.010002f, -0.011216f, -0.000543f, -0.001473f, 0.000601f, -0.009521f, 0.002756f, -0.006686f, -0.004972f, 0.002278f, 0.006939f, - -0.002865f, -0.005302f, -0.006350f, -0.001243f, -0.000704f, 0.001744f, 0.000553f, 0.003986f, 0.002353f, -0.000226f, 0.002007f, 0.000576f, 0.003930f, 0.002974f, 0.001865f, 0.000851f, 0.000852f, -0.000696f, 0.002627f, 0.000121f, 0.000783f, -0.000329f, 0.000049f, -0.001993f, -0.000008f, -0.000390f, 0.016484f, 0.013006f, 0.005529f, 0.006669f, -0.004304f, 0.003020f, 0.011398f, 0.005603f, 0.012276f, -0.004764f, 0.004949f, 0.007056f, -0.000356f, 0.009042f, -0.004670f, 0.005662f, 0.001027f, -0.005746f, -0.001468f, -0.001065f, -0.000362f, -0.001612f, 0.000673f, -0.002871f, 0.000905f, -0.002094f, 0.011228f, -0.002559f, -0.000621f, -0.000005f, -0.005068f, -0.014253f, 0.008122f, -0.003363f, 0.003135f, -0.005646f, -0.005367f, -0.006042f, -0.004023f, 0.003734f, 0.010771f, 0.008522f, 0.003577f, -0.000590f, -0.002316f, 0.003441f, 0.007741f, -0.001698f, -0.002544f, 0.009612f, -0.004251f, 0.004613f, -0.004782f, -0.003728f, -0.002293f, 0.003590f, 0.003797f, -0.006719f, -0.004639f, 0.000203f, 0.007205f, 0.009354f, 0.005065f, 0.007294f, -0.001003f, 0.006834f, 0.002679f, 0.007176f, -0.004032f, 0.002887f, - 0.016377f, 0.007648f, 0.006950f, -0.001667f, -0.004607f, -0.011156f, 0.006483f, 0.002805f, -0.004609f, -0.004615f, -0.001519f, 0.003420f, -0.003393f, -0.001555f, -0.003054f, 0.000114f, 0.002344f, -0.000985f, -0.004598f, 0.001341f, 0.001586f, 0.002650f, 0.002725f, 0.000382f, 0.003859f, 0.001910f, 0.001604f, 0.001202f, -0.001264f, 0.002731f, 0.000253f, -0.000000f, -0.001323f, -0.002007f, -0.002209f, 0.000547f, 0.001586f, 0.000664f, 0.000102f, 0.000498f, -0.000133f, 0.002454f, -0.003344f, -0.000788f, 0.001012f, -0.001328f, 0.001337f, 0.005131f, 0.018936f, 0.002699f, 0.006872f, 0.013718f, 0.000260f, -0.007839f, -0.003363f, -0.002352f, 0.000541f, -0.004938f, -0.013462f, 0.005406f, 0.000454f, 0.000294f, 0.005627f, -0.008927f, -0.004126f, 0.014064f, -0.003446f, -0.005307f, -0.008331f, 0.000289f, -0.007872f, -0.001311f, -0.002627f, -0.002365f, 0.001010f, 0.011365f, -0.000366f, -0.003562f, 0.003333f, -0.009029f, 0.012117f, -0.001541f, -0.002725f, 0.015153f, -0.008728f, 0.000724f, -0.010314f, -0.004712f, 0.000878f, 0.000485f, 0.003965f, 0.004786f, -0.009203f, 0.002745f, 0.003857f, 0.003143f, - 0.000883f, 0.004350f, 0.003154f, 0.006350f, -0.005826f, -0.003107f, 0.011955f, -0.004968f, 0.004569f, 0.001146f, 0.003435f, 0.003094f, -0.001017f, -0.004045f, -0.000627f, 0.008452f, -0.005027f, -0.000552f, -0.002672f, 0.001964f, 0.007539f, -0.004229f, -0.009404f, -0.018158f, 0.001135f, -0.000741f, -0.001564f, 0.000080f, -0.006986f, -0.004886f, -0.010132f, -0.003983f, 0.005044f, -0.000161f, 0.003139f, -0.001196f, 0.006312f, 0.004382f, -0.000058f, 0.003287f, -0.000253f, -0.000382f, 0.002192f, -0.003932f, -0.002104f, -0.003189f, -0.000020f, -0.003809f, 0.002280f, -0.000127f, 0.001089f, -0.001407f, -0.001223f, -0.000149f, -0.001371f, 0.000892f, 0.001444f, -0.003525f, 0.001695f, 0.001447f, 0.000840f, -0.003360f, 0.001797f, 0.001212f, 0.003199f, 0.003378f, -0.000295f, -0.001147f, -0.001751f, 0.001695f, -0.000878f, -0.000604f, 0.000642f, -0.008067f, -0.020422f, 0.010389f, -0.006805f, -0.011434f, 0.000391f, -0.021585f, 0.004552f, 0.006769f, -0.002530f, 0.015991f, -0.006210f, -0.018973f, 0.004444f, 0.007378f, -0.006789f, -0.013386f, 0.022952f, -0.001323f, -0.001523f, 0.005995f, -0.005250f, -0.002832f, - 0.002215f, -0.011179f, 0.006483f, -0.001075f, 0.003119f, -0.002244f, 0.010655f, -0.002608f, 0.005909f, 0.005445f, -0.010814f, -0.005110f, -0.006159f, 0.011214f, -0.005668f, -0.003193f, 0.008282f, -0.002820f, -0.006417f, 0.005007f, 0.015313f, -0.007735f, 0.007389f, -0.007995f, 0.010018f, -0.005491f, 0.005212f, 0.001142f, -0.005611f, -0.015710f, 0.008707f, 0.011510f, -0.001208f, -0.003526f, 0.006412f, 0.008100f, 0.007617f, -0.010781f, -0.001380f, -0.009499f, -0.001021f, 0.003488f, -0.006842f, 0.002687f, 0.007404f, -0.007919f, -0.000304f, 0.001644f, -0.007806f, -0.005500f, 0.007063f, -0.005044f, 0.005558f, -0.003251f, -0.009986f, 0.002098f, -0.009685f, 0.002570f, -0.003739f, 0.003430f, -0.010652f, 0.009797f, -0.008056f, 0.001074f, -0.007497f, -0.000175f, -0.000566f, 0.002063f, -0.000888f, 0.000018f, -0.002415f, 0.002625f, -0.007242f, 0.002564f, -0.005949f, -0.004647f, 0.000036f, 0.004354f, 0.001945f, 0.000851f, 0.001245f, 0.000328f, 0.002470f, 0.005523f, -0.004686f, 0.004599f, -0.003058f, -0.000569f, 0.002812f, 0.002354f, -0.003347f, 0.000013f, -0.008193f, 0.010351f, -0.011403f, -0.011350f, - -0.019411f, 0.008161f, 0.020544f, 0.003104f, -0.003670f, -0.001796f, -0.003444f, 0.017858f, -0.010711f, -0.009792f, -0.002297f, -0.010793f, -0.003297f, -0.011724f, -0.005041f, -0.008235f, -0.016245f, -0.004583f, -0.003571f, -0.000590f, -0.001771f, 0.004201f, 0.009716f, 0.003447f, 0.004820f, -0.014955f, 0.001869f, -0.000259f, -0.004660f, 0.005168f, 0.002784f, -0.004371f, -0.001905f, -0.010649f, -0.011771f, -0.001736f, 0.013098f, -0.003845f, -0.006700f, -0.001452f, -0.004336f, -0.009196f, 0.000182f, -0.009601f, 0.019647f, 0.016539f, 0.004311f, -0.005063f, -0.004564f, 0.001725f, 0.002985f, 0.003383f, 0.003265f, -0.001199f, 0.007336f, -0.006931f, 0.003265f, -0.006097f, 0.000224f, -0.000073f, 0.004136f, 0.002867f, 0.009244f, -0.003990f, -0.005618f, -0.005159f, -0.021269f, 0.000665f, 0.004480f, -0.002152f, 0.007766f, 0.003343f, -0.006369f, 0.001856f, -0.011142f, -0.004156f, 0.000972f, 0.008569f, 0.003695f, 0.011725f, 0.002401f, -0.001402f, 0.000115f, 0.004348f, -0.004807f, -0.000611f, 0.001168f, -0.002010f, 0.003048f, -0.004201f, 0.002258f, -0.003199f, -0.002567f, -0.000518f, -0.003540f, -0.003514f, - -0.004342f, -0.002309f, -0.001230f, 0.003303f, 0.002797f, -0.003250f, -0.004599f, -0.001408f, -0.003504f, 0.002478f, -0.003914f, 0.001961f, -0.002252f, -0.000643f, 0.004022f, 0.000290f, 0.003375f, -0.020058f, 0.003248f, 0.020450f, 0.019274f, -0.020715f, -0.018908f, 0.004885f, -0.015047f, -0.007992f, 0.002152f, -0.001057f, -0.006159f, 0.015518f, 0.006856f, -0.021883f, -0.001800f, 0.001297f, -0.000233f, 0.013973f, 0.005166f, -0.010171f, 0.014685f, 0.005480f, 0.001899f, -0.007896f, -0.008443f, 0.006292f, -0.005433f, -0.014825f, -0.002748f, -0.001938f, -0.006671f, -0.008849f, -0.012005f, 0.012723f, 0.000843f, 0.001879f, -0.008334f, 0.000204f, 0.008973f, -0.007117f, -0.015094f, -0.015245f, 0.015945f, 0.003595f, 0.015048f, -0.002406f, 0.004271f, 0.011126f, 0.022584f, 0.007310f, -0.002903f, -0.011556f, -0.005026f, -0.005760f, 0.003377f, 0.001227f, -0.009079f, -0.003660f, 0.013102f, 0.009301f, 0.017823f, 0.008377f, -0.012439f, -0.011835f, 0.014733f, 0.007873f, -0.007850f, 0.000092f, 0.015176f, 0.001194f, -0.000929f, -0.011840f, 0.013012f, 0.009809f, -0.002405f, 0.018218f, -0.002803f, -0.005246f, - -0.019117f, -0.002510f, 0.000869f, 0.010142f, -0.013223f, -0.000808f, 0.005777f, -0.003204f, -0.009540f, -0.008865f, -0.001286f, -0.000878f, -0.001821f, -0.011083f, -0.009899f, -0.005807f, 0.003447f, -0.000202f, -0.004608f, -0.001507f, -0.000708f, 0.000988f, 0.000824f, 0.001660f, -0.001042f, 0.003749f, -0.003175f, -0.000764f, -0.000010f, -0.002193f, -0.007436f, 0.000504f, 0.004156f, -0.001315f, -0.006581f, 0.000573f, -0.001666f, 0.002326f, 0.000274f, -0.000800f, -0.000685f, 0.002149f, -0.001105f, 0.003961f, 0.001931f, -0.000104f, -0.003692f, 0.002685f, -0.002935f, 0.002713f, 0.003340f, -0.008213f, 0.003251f, -0.003073f, -0.001656f, 0.010047f, -0.016741f, 0.010065f, -0.010977f, 0.001979f, 0.008776f, -0.000116f, -0.004464f, 0.003280f, -0.011496f, 0.000457f, -0.008955f, -0.025985f, -0.007955f, 0.010988f, 0.007104f, 0.003998f, -0.006330f, 0.005293f, 0.002363f, 0.027729f, 0.004750f, -0.009409f, 0.010303f, 0.002014f, 0.002178f, 0.018426f, -0.005340f, -0.005217f, 0.006389f, -0.013034f, 0.015614f, 0.014417f, -0.000377f, 0.008142f, -0.003081f, -0.007993f, -0.001083f, -0.010038f, 0.000793f, -0.009830f, - 0.003779f, -0.000171f, 0.002781f, 0.001098f, -0.016859f, -0.003494f, -0.002218f, 0.000901f, -0.008522f, 0.003635f, 0.003680f, -0.003262f, 0.022121f, -0.009718f, -0.019761f, 0.011732f, 0.019338f, 0.004369f, 0.004961f, -0.008594f, 0.016585f, -0.005709f, 0.002747f, 0.007442f, 0.002132f, -0.007573f, 0.007887f, 0.003406f, 0.000903f, -0.000083f, -0.015247f, -0.005399f, 0.007411f, 0.013470f, -0.005280f, -0.010016f, -0.013876f, -0.004537f, 0.004609f, 0.002524f, 0.006873f, -0.017085f, 0.003169f, 0.011465f, 0.001472f, -0.000685f, 0.004362f, -0.003580f, -0.001977f, -0.000495f, -0.000964f, 0.006009f, -0.001732f, 0.001900f, -0.001829f, -0.001264f, -0.001351f, -0.004376f, -0.002490f, 0.002057f, -0.003091f, 0.004138f, -0.000691f, -0.000757f, -0.002038f, -0.002461f, -0.012982f, 0.001213f, 0.006896f, -0.000354f, 0.002387f, -0.001251f, 0.004265f, 0.001442f, -0.002564f, -0.002991f, 0.002377f, 0.056604f, -0.015511f, 0.000341f, -0.005712f, -0.003621f, -0.012614f, -0.000286f, -0.033170f, 0.017224f, -0.011926f, -0.000843f, 0.019187f, 0.009475f, -0.012746f, -0.013676f, -0.005127f, -0.011696f, 0.010542f, -0.027442f, - 0.005053f, 0.011353f, 0.015683f, 0.003075f, 0.004664f, 0.000619f, 0.002541f, -0.003643f, -0.008643f, -0.025090f, -0.003725f, 0.003157f, 0.011510f, -0.009057f, 0.011097f, 0.004311f, -0.004591f, -0.001641f, 0.008586f, -0.009113f, -0.008616f, -0.004978f, -0.006594f, -0.001015f, -0.022229f, -0.010425f, -0.005334f, -0.000665f, 0.017548f, 0.003888f, 0.016738f, 0.005730f, -0.000810f, -0.010588f, 0.001243f, 0.000993f, 0.002513f, 0.005754f, 0.023474f, 0.002696f, -0.022065f, 0.005630f, -0.008682f, -0.000671f, -0.008354f, -0.009355f, -0.004407f, 0.008949f, 0.005779f, -0.039059f, -0.014689f, -0.011666f, 0.007333f, -0.001743f, -0.008431f, -0.005439f, 0.021956f, -0.009109f, 0.016855f, -0.016006f, -0.012043f, -0.017328f, -0.009477f, -0.018416f, -0.002937f, 0.024432f, 0.005665f, -0.003032f, 0.002858f, 0.010340f, -0.000286f, 0.012763f, -0.007308f, 0.004869f, 0.007102f, 0.008630f, 0.003360f, -0.001624f, -0.017083f, -0.006392f, -0.008818f, 0.000035f, 0.005418f, 0.004664f, -0.003532f, -0.001319f, 0.007076f, 0.002885f, -0.005708f, -0.002452f, -0.004035f, -0.001836f, 0.000210f, 0.003597f, -0.003087f, -0.003022f, - 0.009016f, 0.007593f, 0.002321f, -0.001188f, 0.003192f, 0.006190f, 0.000352f, -0.005699f, -0.000667f, -0.005815f, 0.001341f, -0.005234f, 0.002904f, -0.008737f, -0.009501f, 0.007094f, -0.017657f, 0.001039f, -0.041277f, 0.010001f, -0.013479f, 0.003984f, -0.014011f, -0.030543f, -0.004638f, -0.007146f, 0.021703f, 0.009127f, 0.007857f, -0.000777f, 0.028788f, -0.021631f, 0.005343f, 0.008115f, 0.022262f, -0.025608f, -0.014513f, -0.005105f, 0.002189f, -0.001753f, -0.007179f, -0.002415f, 0.007750f, -0.013805f, 0.002899f, 0.008106f, -0.001489f, 0.001075f, -0.011020f, -0.012759f, -0.007785f, 0.034310f, 0.000408f, -0.008381f, 0.013457f, -0.008278f, -0.017178f, -0.014183f, -0.009262f, -0.002507f, 0.006197f, 0.001249f, 0.001296f, 0.019049f, 0.017542f, -0.003166f, 0.006325f, 0.004190f, -0.021914f, -0.015136f, -0.000840f, -0.001776f, -0.005649f, -0.015039f, 0.018582f, 0.022289f, -0.018159f, 0.012032f, 0.011430f, -0.003580f, -0.017346f, -0.028210f, -0.027213f, -0.021090f, -0.012291f, -0.024343f, 0.002350f, -0.019927f, 0.012082f, 0.010754f, 0.001912f, 0.000241f, -0.033876f, 0.002228f, 0.000773f, 0.002510f, - -0.017293f, 0.005862f, 0.019472f, 0.002608f, 0.005049f, -0.015397f, -0.009400f, -0.001881f, -0.016087f, 0.003792f, 0.010254f, -0.004781f, -0.005878f, -0.007446f, 0.006464f, 0.010309f, -0.017868f, -0.009850f, -0.000733f, 0.012043f, 0.004615f, -0.005225f, 0.004382f, -0.000611f, -0.000032f, 0.005432f, -0.003301f, 0.006996f, -0.007830f, -0.002791f, 0.006007f, 0.005112f, -0.001815f, 0.013536f, 0.001040f, -0.008436f, -0.007016f, -0.001179f, -0.005745f, -0.005321f, 0.000908f, 0.003848f, -0.002330f, -0.016825f, -0.014301f, -0.009753f, -0.011214f, -0.003426f, -0.025341f, 0.001184f, 0.027447f, -0.009653f, 0.014400f, -0.005748f, 0.027362f, 0.023333f, 0.009486f, -0.028515f, -0.007476f, 0.038201f, -0.010019f, 0.028328f, 0.004269f, -0.027082f, -0.013914f, 0.031999f, 0.000516f, -0.021465f, 0.000330f, -0.018298f, -0.002697f, 0.006513f, 0.002449f, -0.003643f, -0.032043f, -0.028284f, 0.007639f, 0.020503f, -0.018379f, -0.001585f, 0.007811f, -0.001350f, 0.002957f, 0.034043f, 0.006093f, 0.004973f, 0.002777f, 0.011264f, -0.015233f, -0.010660f, -0.007899f, -0.035848f, -0.012335f, -0.013446f, -0.009447f, 0.009476f, - 0.006167f, -0.002258f, -0.003727f, -0.014178f, -0.021649f, 0.028069f, -0.006195f, -0.024649f, -0.011698f, 0.005021f, 0.018654f, -0.014891f, -0.004806f, -0.015806f, -0.003108f, -0.018887f, -0.003774f, -0.004022f, -0.038100f, 0.003487f, -0.012919f, 0.026304f, -0.006903f, -0.021372f, -0.040397f, -0.026555f, -0.005143f, 0.003344f, 0.014029f, -0.010417f, -0.009636f, -0.021943f, 0.019992f, 0.033953f, 0.003502f, -0.004025f, 0.011471f, -0.008869f, 0.012698f, -0.009576f, -0.004703f, 0.004371f, 0.009701f, 0.007047f, -0.011926f, 0.000413f, 0.002415f, -0.000157f, -0.000902f, -0.002981f, 0.003160f, 0.012054f, -0.005098f, -0.010599f, -0.000501f, -0.002378f, 0.005489f, -0.000088f, 0.011692f, 0.000812f, 0.004263f, 0.000412f, -0.007204f, 0.001881f, -0.002892f, 0.012581f, 0.000721f, -0.008025f, -0.001525f, -0.001954f, 0.008418f, 0.000825f, -0.009219f, -0.001429f, 0.006496f, -0.003015f, 0.001593f, 0.013106f, -0.046400f, -0.023748f, -0.015943f, -0.025432f, -0.013562f, -0.010432f, -0.026305f, 0.027641f, -0.007990f, 0.041740f, -0.021067f, -0.031567f, -0.006116f, -0.021207f, 0.035974f, -0.012418f, -0.018947f, -0.008824f, - 0.009656f, 0.018239f, 0.015713f, -0.003840f, -0.004208f, -0.008286f, 0.003975f, 0.029597f, -0.000779f, 0.002782f, -0.009535f, -0.003790f, -0.015515f, -0.005122f, 0.006894f, 0.005056f, -0.012826f, 0.000567f, -0.018984f, 0.003761f, -0.005667f, -0.005735f, 0.007765f, 0.003561f, -0.008837f, -0.003598f, 0.016239f, 0.006047f, -0.013435f, -0.017745f, 0.029535f, -0.001464f, -0.047012f, 0.024401f, -0.005208f, -0.020041f, 0.009482f, -0.002969f, 0.002165f, -0.004653f, 0.016364f, 0.006247f, 0.001685f, 0.045089f, 0.044600f, -0.015823f, 0.004879f, -0.033610f, -0.007113f, -0.006538f, 0.014248f, -0.005229f, 0.002325f, 0.013665f, -0.010132f, 0.025695f, -0.010894f, 0.002728f, -0.034933f, 0.014402f, -0.009084f, -0.024573f, 0.012295f, -0.005777f, 0.049212f, 0.011594f, 0.009391f, 0.018078f, 0.002049f, -0.017304f, -0.001356f, -0.007215f, -0.004211f, 0.004796f, -0.006079f, 0.009885f, 0.006160f, -0.007661f, 0.012554f, 0.006963f, -0.008211f, -0.002307f, 0.000768f, 0.001117f, -0.003358f, 0.002524f, 0.004416f, -0.001342f, -0.003668f, 0.000696f, 0.003930f, 0.002149f, 0.002983f, -0.008081f, 0.008055f, -0.016017f, - 0.014101f, -0.009489f, -0.005422f, -0.001257f, 0.007366f, 0.010300f, 0.002834f, -0.012223f, 0.000146f, -0.005055f, -0.002859f, 0.002684f, -0.011536f, -0.021215f, 0.006213f, 0.055829f, -0.041843f, -0.013374f, -0.026452f, -0.017585f, 0.021224f, -0.024056f, 0.051306f, -0.005973f, 0.015745f, 0.002883f, 0.012543f, -0.031801f, 0.005941f, 0.008404f, -0.002251f, -0.004745f, -0.002694f, 0.009457f, -0.019462f, -0.011819f, -0.002672f, -0.005494f, -0.024081f, -0.021433f, -0.005662f, -0.009887f, 0.029309f, -0.007563f, -0.013753f, -0.009960f, 0.010137f, -0.014957f, -0.006261f, -0.025923f, 0.012251f, -0.009877f, 0.010806f, -0.009148f, 0.013715f, -0.006912f, -0.044712f, -0.022778f, 0.006696f, -0.003452f, -0.002663f, -0.013933f, -0.026601f, -0.001495f, 0.011826f, 0.007940f, -0.005995f, 0.008832f, 0.013791f, 0.042515f, -0.018156f, 0.020161f, -0.047744f, 0.003048f, 0.007080f, -0.005646f, -0.013677f, 0.009729f, 0.001850f, 0.002248f, 0.010787f, 0.033799f, 0.022961f, 0.017335f, -0.009009f, -0.010867f, 0.016755f, -0.020325f, 0.005051f, 0.017114f, -0.012066f, 0.042272f, -0.000614f, 0.013138f, -0.011491f, 0.024390f, - -0.023157f, -0.022818f, 0.000776f, 0.008573f, -0.010449f, -0.002539f, 0.026414f, 0.000260f, 0.024050f, 0.008797f, -0.003692f, -0.003786f, -0.013689f, -0.001095f, -0.000707f, 0.006789f, -0.000874f, -0.011012f, 0.001929f, 0.004962f, 0.013635f, -0.019882f, 0.003442f, -0.010090f, 0.004210f, 0.011360f, -0.003881f, -0.000309f, -0.010378f, 0.003423f, 0.003880f, -0.006727f, -0.023945f, -0.014994f, -0.009464f, 0.004648f, -0.012655f, -0.007189f, -0.008488f, -0.007605f, 0.004816f, 0.009253f, -0.000265f, 0.007677f, 0.002948f, 0.004090f, 0.001402f, -0.017314f, 0.014689f, -0.012779f, 0.022423f, 0.066077f, 0.046809f, -0.012574f, -0.029303f, -0.019856f, 0.040119f, -0.047682f, 0.002553f, -0.012088f, -0.011694f, 0.019497f, -0.034952f, 0.004660f, -0.017881f, -0.000442f, -0.024321f, -0.018763f, 0.002835f, 0.001273f, 0.000977f, -0.023486f, 0.037439f, 0.007586f, -0.016752f, 0.006790f, -0.004949f, 0.003291f, 0.055820f, 0.017639f, -0.015586f, -0.013712f, 0.002708f, 0.017323f, 0.004670f, -0.041733f, -0.010278f, -0.028848f, -0.009638f, -0.013501f, 0.014097f, -0.007774f, -0.003967f, -0.000268f, -0.001440f, -0.020454f, - -0.023765f, 0.015491f, -0.009004f, 0.004203f, -0.001119f, 0.020792f, -0.016878f, -0.012053f, 0.005285f, 0.008697f, -0.022344f, 0.024953f, -0.015631f, -0.036364f, -0.033925f, -0.012109f, -0.009741f, -0.014694f, -0.007606f, -0.051702f, 0.018254f, -0.024524f, -0.007792f, -0.020470f, 0.028669f, 0.009332f, 0.013715f, 0.000008f, -0.004407f, -0.024993f, -0.007571f, 0.033788f, -0.027813f, 0.040941f, 0.031236f, 0.011008f, -0.007377f, 0.001447f, -0.005787f, 0.005917f, -0.018091f, -0.014504f, -0.009032f, 0.002535f, -0.002484f, 0.002641f, 0.007630f, -0.013088f, -0.003278f, 0.013273f, 0.013769f, -0.005367f, 0.008554f, -0.007266f, -0.011822f, -0.005152f, -0.003730f, 0.008818f, 0.002321f, 0.003364f, -0.011699f, -0.007574f, 0.003986f, -0.004244f, 0.003702f, 0.004949f, 0.008242f, 0.016479f, 0.006469f, 0.009298f, -0.011084f, -0.006233f, -0.003847f, 0.004947f, -0.005436f, 0.002344f, -0.005042f, 0.002452f, 0.016557f, 0.008002f, 0.004424f, -0.003033f, 0.010374f, 0.003487f, -0.004461f, -0.065192f, -0.008065f, 0.043435f, -0.053257f, -0.021186f, -0.001283f, -0.016280f, 0.019320f, -0.011043f, 0.060219f, -0.006002f, - -0.013082f, -0.009910f, -0.002653f, 0.017705f, -0.011957f, -0.011544f, 0.049141f, -0.035914f, -0.004371f, 0.011534f, -0.007951f, 0.030846f, 0.017343f, -0.002033f, -0.003853f, 0.013165f, 0.017471f, 0.019132f, 0.015589f, 0.032643f, 0.010365f, 0.014120f, 0.008464f, -0.010421f, 0.054417f, 0.006988f, 0.010157f, 0.013895f, 0.008093f, 0.039428f, -0.002818f, 0.009841f, 0.013529f, 0.011502f, 0.006404f, 0.026065f, -0.015364f, -0.012233f, 0.025781f, -0.004599f, -0.026072f, -0.006548f, -0.045569f, -0.015349f, -0.008771f, 0.043256f, -0.040840f, -0.005141f, 0.001743f, -0.001265f, -0.002379f, 0.025560f, 0.069620f, -0.012026f, 0.008704f, 0.008094f, 0.010531f, 0.033357f, -0.036045f, -0.036850f, -0.033640f, 0.059435f, 0.004358f, -0.022191f, 0.054428f, -0.020650f, 0.047448f, -0.025445f, 0.018186f, 0.002124f, -0.063174f, -0.009064f, -0.015819f, 0.018201f, -0.001339f, -0.005330f, 0.000376f, 0.011480f, -0.001726f, -0.019043f, 0.010290f, 0.000389f, -0.008967f, -0.000073f, -0.016836f, 0.022701f, -0.002463f, 0.008216f, -0.010758f, -0.009588f, -0.009621f, -0.012731f, -0.001239f, 0.000464f, 0.021529f, -0.000879f, - 0.002360f, -0.008538f, 0.002380f, -0.020347f, 0.006484f, -0.019610f, -0.003671f, -0.004173f, -0.017616f, 0.009409f, -0.013951f, -0.013926f, 0.003064f, -0.019458f, 0.005991f, 0.015697f, 0.014569f, -0.007281f, -0.006889f, 0.003837f, 0.005906f, 0.013654f, 0.017319f, 0.038621f, 0.003519f, -0.038923f, -0.114456f, 0.022932f, -0.027487f, -0.044245f, 0.049590f, -0.029698f, -0.015280f, -0.043571f, 0.011321f, -0.008618f, -0.042566f, -0.013780f, -0.025269f, 0.011952f, -0.023400f, 0.001202f, 0.009145f, 0.019211f, 0.009770f, 0.032498f, 0.005138f, -0.000166f, -0.003338f, -0.027238f, -0.020933f, -0.019374f, 0.015764f, 0.024315f, 0.011309f, 0.008691f, -0.000663f, 0.009438f, 0.019049f, 0.044399f, -0.020953f, -0.011599f, 0.007811f, -0.020062f, 0.021368f, 0.004714f, -0.019362f, 0.045188f, 0.016509f, -0.037890f, 0.015041f, -0.036445f, 0.004365f, 0.007060f, 0.019273f, -0.010299f, -0.012298f, 0.057436f, 0.022326f, -0.024579f, 0.015018f, 0.030425f, -0.023485f, -0.049922f, 0.027821f, -0.003933f, -0.000517f, 0.004197f, 0.012234f, 0.077695f, -0.007158f, 0.009799f, 0.014934f, -0.000154f, 0.017905f, 0.010520f, - -0.041107f, 0.008837f, -0.021835f, -0.019053f, -0.011455f, 0.009486f, -0.066426f, -0.007996f, 0.020845f, 0.003391f, 0.033147f, -0.024199f, 0.023508f, -0.015773f, -0.006865f, -0.008837f, 0.010582f, 0.004703f, -0.008046f, 0.000164f, 0.000087f, -0.011685f, 0.009509f, -0.014777f, 0.015753f, 0.002195f, 0.011007f, 0.009380f, -0.006615f, -0.005431f, 0.002853f, -0.004046f, 0.002386f, 0.003729f, -0.006419f, -0.002263f, -0.007392f, -0.005168f, -0.004813f, -0.013237f, 0.000363f, 0.001953f, 0.007871f, -0.004205f, 0.007586f, 0.018193f, -0.009375f, 0.003054f, -0.009407f, 0.004872f, 0.005858f, -0.015157f, 0.000270f, 0.004982f, -0.014298f, -0.007077f, 0.012642f, 0.000205f, 0.002600f, 0.002861f, 0.000579f, -0.035409f, -0.040747f, 0.087396f, 0.018696f, -0.005649f, -0.010520f, 0.019711f, 0.078988f, 0.036228f, 0.009461f, -0.002290f, 0.026490f, 0.065954f, 0.016426f, 0.022737f, 0.020583f, 0.047022f, -0.030301f, 0.030455f, 0.013556f, -0.090295f, 0.026765f, -0.012773f, 0.026789f, -0.028121f, 0.021256f, 0.014095f, 0.028069f, -0.000228f, 0.011920f, 0.004392f, -0.025601f, 0.012770f, 0.025428f, -0.021321f, - 0.012793f, -0.020704f, -0.012426f, 0.064728f, 0.006641f, 0.057309f, -0.040761f, 0.017843f, -0.002063f, -0.008211f, -0.001258f, -0.004990f, 0.008932f, 0.021001f, 0.014599f, -0.001605f, 0.032776f, -0.052214f, -0.049185f, 0.035690f, -0.027984f, -0.007227f, -0.006534f, -0.033771f, 0.017041f, -0.008910f, 0.009627f, 0.005224f, 0.055499f, 0.026930f, 0.029255f, 0.010967f, 0.007863f, -0.050473f, -0.011602f, 0.024808f, -0.000462f, 0.000618f, -0.000039f, -0.016206f, -0.043890f, 0.008386f, 0.004061f, -0.032878f, 0.004645f, -0.015808f, -0.012989f, 0.013777f, 0.009284f, 0.049776f, -0.007144f, 0.012642f, 0.011889f, -0.009610f, -0.012877f, -0.001424f, -0.012243f, -0.004741f, 0.029318f, 0.012230f, 0.005287f, 0.001435f, -0.000570f, 0.000668f, -0.000401f, -0.001783f, -0.019948f, -0.006126f, 0.012133f, -0.003523f, 0.001190f, -0.007430f, -0.010096f, -0.004151f, 0.003194f, 0.023758f, -0.015908f, -0.015392f, 0.013962f, 0.006812f, -0.017868f, 0.012520f, 0.007540f, -0.012700f, 0.015858f, 0.001255f, -0.009585f, -0.004509f, -0.006660f, -0.003063f, -0.003112f, 0.007830f, 0.003926f, 0.003877f, 0.008995f, 0.013086f, - 0.009713f, -0.002635f, 0.022689f, -0.079222f, 0.067586f, -0.028487f, 0.013354f, 0.043732f, -0.063330f, -0.001654f, -0.005089f, 0.015436f, 0.024129f, 0.027524f, 0.047810f, 0.008017f, -0.030117f, 0.016837f, 0.050897f, -0.071715f, -0.041776f, 0.048170f, 0.002899f, -0.000371f, 0.002706f, 0.004126f, -0.000866f, -0.001239f, 0.025056f, 0.015103f, -0.034010f, 0.002187f, -0.009255f, 0.059903f, 0.036666f, -0.012250f, 0.004061f, 0.007198f, 0.007891f, -0.000402f, 0.022212f, 0.002177f, 0.017168f, 0.061136f, 0.008882f, 0.006431f, -0.008806f, 0.015689f, -0.057711f, -0.025196f, -0.024006f, -0.002618f, 0.006588f, -0.051330f, 0.020572f, -0.045562f, 0.015740f, 0.047189f, -0.010028f, -0.042532f, -0.022525f, 0.017558f, -0.008079f, -0.086851f, 0.023949f, -0.060627f, -0.013037f, -0.007565f, 0.002142f, -0.024326f, 0.006288f, 0.030565f, -0.025031f, -0.057615f, -0.086458f, 0.067603f, 0.020635f, -0.010621f, 0.019346f, -0.020482f, 0.020670f, 0.037487f, -0.038953f, 0.067206f, 0.009274f, -0.007164f, 0.031229f, 0.017717f, -0.010830f, 0.017351f, 0.001271f, 0.018730f, -0.018228f, -0.009711f, 0.005059f, 0.013533f, - 0.023323f, 0.006931f, 0.021023f, -0.013921f, 0.011933f, 0.021842f, 0.019385f, -0.003252f, 0.017647f, -0.018969f, 0.007512f, 0.001789f, 0.008120f, 0.036418f, -0.024335f, 0.014474f, 0.001981f, -0.001389f, 0.028424f, 0.007760f, 0.037058f, -0.004889f, 0.018305f, 0.004842f, 0.014440f, 0.004128f, -0.007623f, 0.011086f, -0.019152f, 0.016523f, -0.007098f, 0.013680f, -0.003284f, 0.003664f, -0.001554f, 0.002747f, -0.000276f, 0.014323f, -0.003275f, -0.003574f, -0.001948f, 0.006100f, -0.000715f, -0.001606f, 0.000670f, 0.002980f, 0.002052f, 0.002473f, -0.001796f, 0.002471f, -0.002108f, 0.002335f, 0.001641f, 0.002613f, -0.004965f, 0.096578f, -0.103926f, 0.042017f, 0.052840f, -0.065110f, -0.020089f, -0.035051f, -0.019312f, 0.095892f, -0.043169f, 0.068054f, -0.031945f, -0.009158f, -0.017303f, 0.022311f, 0.008320f, -0.082912f, -0.015858f, -0.021940f, 0.035547f, 0.001875f, 0.014765f, 0.028878f, -0.040772f, -0.007461f, -0.026167f, 0.014593f, 0.033470f, 0.021108f, -0.052654f, -0.008995f, 0.010079f, 0.007150f, -0.003685f, -0.024475f, -0.010604f, -0.047010f, -0.009069f, -0.006365f, 0.043021f, -0.038329f, - 0.094447f, 0.021123f, -0.028149f, 0.042099f, 0.001073f, 0.054613f, 0.029270f, 0.051850f, 0.012266f, 0.047398f, 0.038057f, 0.046384f, 0.048252f, 0.007678f, 0.046683f, -0.059970f, -0.010781f, 0.012961f, -0.040094f, -0.006580f, 0.024628f, -0.046440f, -0.068833f, 0.027847f, 0.044112f, 0.001751f, 0.009931f, -0.047590f, -0.013205f, -0.039748f, -0.001851f, 0.046158f, 0.003524f, 0.085941f, 0.038558f, -0.021254f, 0.090085f, 0.048172f, -0.026839f, -0.009946f, -0.019229f, -0.028295f, -0.018402f, 0.022537f, -0.013045f, -0.044024f, 0.007138f, 0.031550f, 0.001023f, -0.014157f, -0.011805f, -0.008828f, -0.015056f, -0.026488f, 0.004626f, -0.005781f, -0.003649f, -0.020320f, -0.001996f, -0.006843f, 0.009059f, 0.015325f, -0.004576f, 0.003469f, -0.006033f, -0.015706f, 0.010495f, -0.003800f, -0.012612f, -0.030130f, 0.014210f, -0.041719f, -0.005946f, -0.028727f, -0.017912f, -0.023236f, -0.006202f, -0.003124f, -0.008692f, -0.016046f, -0.008251f, -0.018381f, -0.003559f, -0.001517f, -0.001464f, -0.012080f, 0.019402f, -0.014709f, 0.009184f, -0.134939f, 0.123038f, -0.027912f, -0.040786f, -0.035959f, 0.085288f, -0.064715f, - -0.010259f, -0.018586f, -0.000565f, 0.045644f, -0.050684f, -0.004671f, 0.020391f, -0.015364f, -0.006520f, 0.001158f, -0.028567f, 0.040804f, 0.002685f, -0.066804f, -0.016463f, -0.016258f, 0.004501f, -0.073214f, -0.000238f, 0.008601f, -0.014131f, 0.000514f, 0.020371f, 0.045006f, -0.018289f, -0.011517f, 0.010039f, -0.030334f, -0.093690f, 0.008024f, 0.075097f, -0.038229f, -0.057509f, 0.003859f, 0.060669f, -0.028250f, -0.017574f, -0.078168f, -0.012267f, 0.001468f, 0.056047f, 0.025690f, 0.007484f, -0.058979f, -0.033285f, 0.046208f, -0.055205f, 0.019511f, 0.092295f, 0.051901f, 0.071649f, -0.034504f, 0.041907f, 0.026385f, -0.079567f, -0.029445f, -0.042598f, -0.010606f, 0.047319f, -0.002264f, 0.051145f, 0.041261f, -0.079070f, 0.088418f, -0.053562f, -0.000257f, 0.004782f, -0.040663f, 0.087613f, -0.005939f, -0.020068f, 0.070137f, -0.056841f, -0.009888f, -0.081197f, -0.027792f, 0.037404f, -0.011634f, 0.033858f, 0.036118f, -0.008227f, -0.014312f, 0.006350f, -0.020008f, -0.022889f, -0.006533f, -0.016809f, -0.010274f, -0.013587f, 0.005779f, -0.016940f, 0.003308f, -0.021416f, -0.021333f, -0.018732f, 0.015789f, - -0.010991f, -0.001952f, 0.011167f, 0.002622f, -0.003744f, -0.023291f, -0.036115f, -0.023441f, -0.047131f, 0.034701f, 0.014547f, 0.030031f, 0.010949f, -0.025719f, -0.026007f, -0.013718f, -0.003544f, 0.038141f, -0.007871f, -0.000264f, 0.005202f, -0.006161f, -0.006169f, -0.003298f, -0.014254f, 0.026559f, -0.016671f, 0.034079f, -0.000176f, 0.080417f, 0.057072f, 0.008411f, -0.015387f, -0.041778f, 0.024474f, -0.003282f, -0.003727f, -0.002654f, -0.001371f, 0.000177f, -0.015963f, 0.020250f, -0.000384f, -0.071764f, 0.018039f, 0.006432f, -0.024792f, 0.000948f, 0.031039f, -0.010456f, 0.002113f, -0.051894f, 0.037826f, -0.018466f, -0.005558f, -0.005233f, 0.021552f, -0.028124f, -0.000999f, 0.006396f, 0.000897f, 0.005943f, -0.013297f, 0.038434f, -0.020098f, 0.067750f, -0.041640f, -0.044448f, 0.041939f, -0.046966f, 0.002524f, 0.035014f, -0.032369f, -0.014475f, 0.018728f, 0.021800f, 0.028937f, -0.103351f, 0.032982f, -0.000983f, -0.023567f, 0.065536f, -0.032812f, 0.004021f, 0.000418f, -0.055653f, 0.071411f, -0.003403f, -0.003027f, -0.037499f, -0.006677f, 0.058830f, -0.013629f, -0.002216f, 0.002431f, 0.016961f, - 0.009874f, -0.072654f, 0.035920f, 0.064739f, -0.033912f, 0.025938f, -0.050576f, 0.084872f, 0.003919f, -0.079214f, 0.001171f, 0.044187f, -0.004363f, -0.049210f, -0.010975f, 0.115636f, -0.017908f, -0.047632f, 0.008110f, 0.051013f, -0.013095f, -0.015945f, -0.005904f, -0.002263f, 0.003096f, 0.002302f, -0.012863f, 0.033676f, -0.005359f, -0.007912f, 0.001986f, 0.011503f, 0.028316f, -0.008424f, -0.013684f, 0.015546f, 0.003604f, -0.026097f, -0.009439f, 0.014008f, 0.003303f, -0.010902f, -0.005766f, 0.022499f, -0.020358f, -0.004115f, 0.003601f, 0.003239f, -0.019220f, -0.007799f, 0.025098f, -0.001352f, -0.017895f, -0.007615f, 0.018218f, -0.005324f, -0.013413f, -0.011465f, 0.015933f, -0.045099f, -0.149482f, -0.226614f, 0.015290f, 0.195996f, 0.003087f, 0.512756f, 0.464781f, 0.278253f, 0.536568f, 0.352054f, -0.058136f, 0.020366f, -0.068809f, -0.422378f, -0.239828f, -0.185862f, -0.412530f, -0.339270f, -0.100055f, -0.199164f, -0.228699f, -0.018637f, 0.013650f, -0.096749f, 0.021251f, 0.087534f, -0.111747f, -0.095009f, 0.149845f, 0.030654f, -0.036262f, 0.104562f, 0.140353f, -0.000177f, 0.143965f, 0.243653f, - 0.087363f, 0.066832f, 0.248454f, 0.167915f, 0.020343f, 0.182381f, 0.269142f, 0.118222f, 0.137646f, 0.306668f, 0.116510f, 0.041853f, 0.292951f, 0.288288f, 0.089155f, 0.347226f, 0.493838f, 0.184067f, 0.202761f, 0.344318f, 0.105095f, -0.111484f, 0.019802f, -0.114514f, -0.414853f, -0.395754f, -0.422600f, -0.678989f, -0.733859f, -0.784840f, -0.928142f, -0.971019f, -0.948387f, -0.923100f, -0.812624f, -0.729338f, -0.596309f, -0.394042f, -0.281196f, -0.097143f, 0.268073f, 0.434737f, 0.429483f, 0.795226f, 0.848073f, 0.660042f, 0.804393f, 0.842573f, 0.452384f, 0.471889f, 0.578726f, 0.280891f, 0.227249f, 0.375517f, 0.272549f, 0.127946f, 0.177408f, 0.237393f, 0.101047f, 0.082355f, 0.238594f, 0.125991f, -0.021624f, 0.130593f, 0.102106f, -0.074591f, 0.010399f, 0.093961f, -0.062012f, -0.027208f, 0.176419f, 0.069614f, 0.006696f, 0.169567f, 0.111547f, -0.016779f, 0.009220f, -0.074436f, -0.249732f, -0.340026f, -0.375796f, -0.493061f, -0.527310f, -0.526973f, -0.570600f, -0.576145f, -0.603146f, -0.605173f, -0.553032f, -0.549495f, -0.461063f, -0.356306f, -0.282023f, -0.118233f, 0.102660f, 0.220242f, - 0.367838f, 0.459937f, 0.487368f, 0.464364f, 0.423833f, 0.359710f, 0.292163f, 0.254092f, 0.222374f, 0.181837f, 0.163934f, 0.158788f, 0.144731f, 0.135148f, 0.141296f, 0.131086f, 0.109369f, 0.092388f, 0.071787f, 0.039073f, 0.014936f, -0.023538f, -0.052515f, -0.052787f, -0.033977f, -0.016373f, -0.003910f}, - {0.005473f, 0.017776f, 0.003983f, 0.002579f, -0.004035f, -0.001472f, -0.008775f, -0.000378f, -0.002241f, 0.006581f, 0.005838f, -0.005886f, -0.004232f, -0.003557f, -0.003370f, -0.004192f, 0.000460f, 0.005237f, -0.004162f, -0.004476f, -0.014653f, -0.010791f, -0.007927f, -0.000372f, 0.000789f, 0.010745f, -0.005921f, 0.005325f, 0.003295f, 0.002737f, 0.000646f, -0.008028f, 0.002058f, -0.017115f, 0.002088f, 0.000528f, 0.000808f, -0.001175f, -0.010554f, -0.004812f, -0.009098f, 0.000558f, 0.000586f, -0.005503f, -0.014128f, 0.009712f, -0.000682f, -0.008270f, -0.000039f, 0.005511f, 0.001200f, -0.002853f, 0.002008f, -0.004710f, -0.002031f, -0.004445f, 0.003422f, -0.004731f, 0.006661f, 0.005386f, -0.001069f, -0.009414f, 0.000492f, 0.001299f, -0.000837f, -0.003451f, 0.002384f, 0.001673f, -0.002147f, 0.005086f, 0.005541f, 0.003823f, 0.000366f, 0.000024f, 0.001772f, -0.005113f, 0.000709f, 0.007869f, 0.000920f, 0.001504f, 0.001457f, 0.005815f, 0.002235f, 0.001828f, 0.005219f, -0.001289f, 0.004109f, -0.001607f, 0.002682f, 0.001883f, -0.000716f, 0.001114f, 0.001515f, -0.000464f, 0.001917f, 0.002938f, - 0.000702f, 0.000063f, 0.002083f, 0.002769f, 0.002212f, -0.000333f, 0.000841f, 0.000908f, 0.001081f, 0.000318f, 0.000175f, -0.000214f, -0.000691f, -0.002188f, 0.001426f, 0.000160f, -0.018896f, -0.021209f, -0.001506f, -0.008383f, 0.006478f, -0.010390f, 0.002611f, 0.004811f, -0.007086f, 0.005799f, 0.021224f, 0.001198f, -0.001953f, 0.011641f, 0.001577f, 0.011689f, 0.000181f, 0.005341f, -0.008353f, -0.011061f, -0.000599f, 0.004212f, -0.007698f, -0.002467f, -0.000781f, -0.002160f, 0.002108f, -0.002250f, -0.004066f, 0.003860f, -0.001917f, -0.001599f, 0.008338f, 0.011906f, -0.003708f, -0.006377f, 0.002367f, 0.009533f, 0.003612f, 0.012214f, 0.000510f, -0.001696f, -0.000314f, 0.010903f, 0.000699f, -0.007765f, -0.004277f, 0.008566f, 0.006197f, 0.006670f, 0.001808f, -0.004216f, -0.008795f, 0.001765f, 0.004138f, 0.005164f, -0.001896f, -0.004579f, 0.009506f, 0.006417f, -0.001579f, -0.005288f, 0.000317f, -0.003669f, 0.009908f, 0.003076f, 0.001816f, 0.003205f, 0.001106f, 0.002099f, 0.006087f, 0.001122f, 0.006115f, -0.001138f, 0.009748f, 0.001244f, -0.009649f, -0.003763f, -0.003363f, 0.004848f, - 0.005956f, -0.000901f, 0.001590f, -0.006690f, -0.002457f, -0.006226f, -0.001913f, -0.004036f, -0.003496f, -0.001415f, 0.002045f, 0.000156f, 0.000054f, 0.000332f, 0.002696f, 0.000496f, 0.000612f, -0.000268f, -0.002897f, -0.000750f, 0.000150f, -0.000214f, 0.001168f, 0.000515f, 0.000499f, -0.001030f, 0.011136f, 0.007810f, 0.011726f, 0.012209f, -0.002927f, 0.006119f, -0.002617f, -0.006914f, -0.000645f, 0.018085f, 0.007915f, 0.004043f, 0.006433f, -0.007531f, 0.012889f, 0.005536f, 0.008636f, -0.002538f, -0.014309f, 0.006025f, -0.022326f, 0.004542f, -0.005703f, 0.004501f, 0.003518f, -0.000407f, -0.007686f, 0.001868f, 0.005014f, -0.002973f, 0.004702f, 0.011335f, -0.000813f, -0.009369f, -0.012792f, 0.002014f, 0.005717f, -0.011758f, 0.006547f, -0.011049f, -0.007221f, 0.008052f, -0.004670f, -0.009337f, -0.004561f, -0.006582f, 0.010334f, 0.014208f, 0.008036f, -0.005087f, 0.000061f, 0.007597f, 0.004527f, -0.000626f, -0.005801f, -0.002738f, -0.005091f, 0.005419f, 0.017550f, -0.000124f, -0.009520f, -0.007501f, 0.004071f, 0.001444f, -0.003568f, -0.010377f, -0.000193f, -0.008887f, -0.003497f, 0.001415f, - -0.001526f, 0.007077f, 0.001319f, 0.008883f, 0.010322f, -0.009043f, -0.003334f, 0.000519f, -0.007068f, -0.008471f, -0.001357f, 0.000053f, -0.005192f, 0.004986f, -0.004718f, -0.000577f, 0.003928f, 0.000801f, 0.000282f, 0.003892f, -0.004772f, -0.001640f, 0.001130f, 0.001804f, -0.002161f, 0.001557f, 0.000847f, 0.001758f, -0.000266f, -0.000030f, 0.001790f, -0.002430f, 0.003121f, -0.002434f, 0.001528f, 0.000485f, -0.000693f, -0.000186f, 0.001389f, -0.000998f, -0.001625f, -0.002751f, 0.001724f, -0.002019f, 0.000758f, 0.002635f, -0.000362f, -0.001677f, 0.024915f, -0.006694f, 0.002429f, 0.003557f, -0.016434f, -0.014003f, 0.000365f, 0.016284f, 0.012424f, 0.019684f, 0.006493f, -0.005556f, -0.008470f, 0.001451f, -0.004862f, 0.003880f, 0.001881f, 0.006651f, 0.012228f, 0.003895f, 0.009016f, -0.000254f, 0.005346f, -0.005426f, -0.011390f, -0.005970f, -0.008718f, 0.000118f, -0.002434f, 0.002658f, -0.013876f, -0.006928f, -0.001857f, 0.005134f, -0.006859f, 0.014378f, -0.016202f, 0.003476f, -0.010203f, -0.008276f, 0.004711f, 0.004128f, 0.013872f, -0.001541f, 0.003506f, -0.003961f, 0.009716f, 0.010268f, - 0.002855f, -0.002214f, -0.010440f, -0.001449f, 0.003603f, -0.008005f, 0.008023f, -0.008812f, 0.003780f, 0.014566f, 0.012209f, 0.000179f, -0.004705f, 0.002281f, 0.014563f, -0.001821f, 0.003580f, 0.002262f, 0.011900f, 0.000117f, -0.003178f, -0.007392f, 0.005189f, -0.011139f, 0.004053f, 0.023165f, 0.005694f, 0.010907f, 0.001080f, -0.015329f, 0.005540f, 0.002845f, -0.006050f, 0.006252f, -0.001944f, -0.001671f, -0.007647f, 0.003193f, 0.007519f, 0.003356f, 0.001444f, -0.003496f, -0.007527f, 0.001736f, -0.001501f, -0.001176f, 0.000482f, -0.000385f, -0.001426f, 0.002421f, -0.002569f, -0.002338f, -0.002214f, 0.003408f, 0.001362f, 0.002681f, -0.001518f, 0.002472f, 0.000135f, -0.002447f, 0.002617f, 0.001425f, -0.002173f, -0.004148f, -0.001516f, 0.003404f, 0.000208f, -0.000903f, 0.001709f, 0.001543f, 0.003700f, -0.000180f, -0.001457f, -0.009084f, -0.015538f, 0.007838f, -0.011079f, -0.011422f, 0.002354f, -0.005536f, -0.036553f, 0.003542f, 0.005648f, 0.033458f, 0.010841f, 0.002477f, -0.015189f, 0.013942f, 0.006047f, -0.006074f, 0.007313f, -0.001272f, 0.012166f, -0.007344f, -0.003760f, -0.002476f, - -0.003223f, -0.005045f, -0.002177f, 0.008633f, 0.007567f, 0.013065f, 0.004684f, 0.006406f, -0.000120f, -0.008516f, -0.009188f, 0.012374f, -0.006767f, 0.002743f, -0.001101f, -0.008754f, 0.012577f, -0.002109f, -0.005426f, 0.002178f, 0.009161f, -0.006096f, 0.013901f, -0.017610f, -0.014543f, -0.017860f, 0.004340f, -0.010068f, -0.015258f, -0.003532f, 0.014295f, -0.006069f, 0.004301f, 0.008452f, -0.006125f, -0.008077f, 0.000665f, 0.001295f, 0.004792f, 0.000851f, -0.004441f, -0.000537f, 0.018414f, 0.007781f, -0.007489f, -0.023186f, -0.018492f, 0.006739f, 0.021902f, 0.018380f, -0.014350f, 0.000338f, -0.009360f, 0.004117f, 0.003644f, -0.015726f, -0.001244f, 0.003077f, 0.001837f, -0.004294f, 0.000939f, 0.000905f, 0.000478f, 0.005286f, 0.004870f, -0.003173f, -0.003828f, 0.002571f, -0.001862f, 0.001181f, -0.005478f, 0.002205f, 0.001634f, -0.008782f, -0.001971f, 0.001834f, 0.001323f, 0.000674f, 0.001713f, -0.000587f, 0.000632f, 0.000598f, 0.000864f, -0.003241f, -0.000453f, 0.001070f, -0.001024f, -0.003930f, -0.001948f, 0.000468f, 0.000597f, 0.004162f, -0.006531f, 0.010830f, -0.018207f, -0.003030f, - -0.022563f, -0.006537f, 0.003345f, 0.007953f, -0.020567f, -0.005039f, 0.014087f, -0.001616f, -0.020586f, 0.010753f, -0.006590f, -0.011690f, 0.006449f, 0.010887f, 0.002444f, 0.002348f, 0.003722f, 0.014198f, -0.006699f, -0.005778f, 0.003689f, -0.006911f, -0.003567f, 0.000271f, -0.000795f, 0.000553f, 0.011313f, 0.005886f, -0.001316f, -0.000909f, 0.006611f, 0.002854f, 0.008120f, -0.000628f, 0.009167f, 0.009781f, 0.003868f, -0.010518f, 0.001531f, -0.001411f, -0.007536f, 0.010272f, -0.005783f, 0.004344f, -0.007001f, -0.002503f, -0.025210f, 0.002376f, 0.020465f, 0.001875f, 0.021756f, -0.003949f, -0.004890f, -0.022338f, 0.026288f, 0.012449f, 0.014979f, 0.002515f, 0.012278f, -0.000079f, -0.000096f, 0.010305f, -0.005989f, 0.003766f, -0.000042f, -0.025062f, 0.005764f, -0.005837f, 0.006638f, -0.003730f, 0.005991f, 0.023369f, 0.007032f, 0.006197f, -0.000283f, -0.014108f, 0.010627f, -0.005699f, 0.002132f, 0.005382f, 0.007007f, -0.007750f, -0.002060f, -0.003182f, -0.004220f, 0.004596f, -0.002654f, -0.001992f, -0.003315f, 0.000579f, 0.000851f, 0.000386f, -0.006522f, 0.002650f, 0.001131f, -0.001431f, - 0.001882f, 0.000942f, 0.001641f, 0.001390f, 0.003099f, 0.000057f, 0.000660f, -0.000370f, -0.001499f, 0.003932f, -0.000735f, 0.005530f, 0.000855f, 0.002316f, -0.001696f, 0.003053f, 0.001016f, -0.028948f, -0.000955f, 0.021761f, -0.004770f, 0.012879f, -0.013890f, -0.009584f, -0.025007f, 0.014275f, 0.007411f, 0.016575f, 0.007749f, -0.008184f, 0.013976f, -0.003546f, 0.013372f, -0.008819f, -0.008145f, 0.001000f, -0.002990f, 0.011568f, 0.002430f, 0.009752f, 0.010923f, -0.006563f, -0.005583f, -0.003884f, 0.007194f, -0.001503f, -0.004643f, 0.001460f, -0.009836f, 0.005058f, 0.003484f, -0.005202f, 0.007279f, 0.012758f, -0.005115f, -0.005831f, -0.001541f, -0.009688f, -0.004690f, 0.014666f, 0.002000f, -0.009133f, 0.017868f, -0.019676f, 0.003114f, 0.010490f, -0.004495f, -0.006501f, -0.001441f, 0.008356f, -0.014983f, 0.007476f, -0.006078f, -0.012908f, -0.009638f, -0.007815f, 0.000294f, -0.003714f, -0.008191f, 0.003501f, 0.022194f, 0.012199f, -0.002993f, -0.007665f, -0.021427f, 0.002226f, 0.011953f, -0.007041f, -0.023681f, 0.000585f, -0.003683f, 0.001139f, 0.003033f, 0.010826f, -0.000591f, -0.005589f, - -0.002056f, -0.008716f, -0.005060f, -0.004153f, 0.006585f, -0.005435f, 0.006116f, -0.012701f, 0.001126f, -0.005864f, -0.003800f, 0.007631f, -0.003599f, -0.003693f, -0.004350f, 0.001510f, -0.008006f, -0.003292f, -0.001784f, -0.000380f, 0.001805f, -0.005799f, 0.001700f, -0.004614f, 0.002591f, 0.002939f, 0.006721f, 0.001180f, 0.002482f, 0.003431f, 0.002759f, -0.001970f, 0.001161f, 0.000351f, 0.005025f, 0.002796f, -0.000421f, 0.002898f, -0.000161f, 0.000198f, -0.001944f, 0.000243f, 0.000103f, -0.003562f, 0.001125f, -0.002478f, -0.001765f, 0.000190f, 0.002711f, -0.000798f, 0.009631f, -0.004242f, 0.002450f, 0.014236f, 0.000925f, 0.016678f, 0.018079f, 0.040343f, 0.027512f, 0.016871f, -0.004289f, -0.021371f, -0.007456f, 0.019578f, 0.008464f, -0.020643f, 0.015400f, -0.003604f, -0.010247f, -0.012634f, 0.001879f, 0.034878f, -0.023648f, 0.025221f, 0.009837f, -0.005438f, 0.008277f, -0.006823f, 0.018042f, -0.006935f, 0.009525f, 0.001894f, -0.012538f, -0.008780f, -0.012216f, 0.000463f, 0.010313f, -0.002989f, -0.006894f, 0.006646f, 0.000847f, -0.002091f, -0.023608f, 0.007136f, -0.013232f, -0.010010f, - 0.006496f, 0.015547f, -0.011501f, -0.016550f, 0.000573f, 0.014035f, 0.001144f, -0.009438f, -0.003531f, -0.005621f, 0.006388f, 0.004662f, -0.005443f, -0.008921f, -0.013409f, 0.008279f, 0.021472f, 0.013160f, 0.006773f, -0.012473f, 0.006450f, 0.013596f, -0.015278f, -0.019937f, 0.003475f, -0.016462f, -0.007885f, -0.032270f, 0.000405f, -0.022161f, -0.011555f, 0.005957f, -0.002795f, -0.002134f, 0.009800f, 0.001668f, -0.018090f, -0.012543f, 0.008142f, -0.002505f, 0.000977f, -0.005629f, 0.000523f, 0.005278f, -0.000797f, 0.003498f, 0.003512f, 0.000723f, 0.000323f, 0.002596f, 0.003029f, 0.002016f, 0.000229f, 0.000625f, -0.001833f, 0.004775f, 0.000117f, 0.004395f, -0.000794f, -0.002926f, 0.001415f, 0.004091f, -0.005141f, -0.007543f, -0.003856f, -0.001092f, -0.002372f, 0.008577f, 0.003219f, -0.002699f, 0.003803f, -0.002173f, 0.000564f, -0.006912f, -0.000631f, 0.000502f, -0.003176f, 0.044143f, 0.000988f, -0.017279f, 0.019457f, -0.021283f, 0.024632f, 0.001998f, -0.015005f, -0.025696f, -0.006229f, 0.012610f, -0.020433f, 0.018134f, -0.002897f, 0.011692f, 0.013920f, -0.011949f, -0.004977f, -0.007190f, - -0.009525f, -0.003699f, -0.008899f, 0.001487f, -0.010876f, 0.011316f, 0.007140f, 0.009499f, 0.019256f, 0.009920f, -0.002877f, 0.022979f, 0.011705f, 0.004251f, -0.012335f, -0.013439f, 0.006886f, -0.010286f, 0.002362f, 0.007268f, -0.015347f, 0.013143f, 0.034995f, 0.002677f, 0.024887f, 0.011793f, 0.012038f, 0.017782f, 0.001030f, 0.009429f, 0.009942f, -0.022647f, -0.015373f, 0.015642f, 0.001040f, 0.014764f, 0.002621f, 0.015500f, -0.002508f, 0.005584f, 0.003849f, -0.032445f, -0.002143f, 0.008354f, 0.021712f, 0.004864f, 0.019042f, 0.001952f, -0.004495f, 0.006266f, 0.008542f, -0.018202f, -0.030813f, -0.016241f, 0.004234f, 0.007605f, 0.001028f, 0.022636f, 0.007971f, -0.035421f, 0.009020f, -0.005118f, 0.000187f, 0.010225f, -0.014227f, -0.000458f, -0.007666f, 0.006554f, 0.009165f, 0.000589f, 0.001979f, 0.006665f, 0.000270f, -0.000026f, -0.003071f, -0.003362f, 0.001206f, 0.000709f, 0.000228f, 0.005578f, 0.004020f, 0.001438f, 0.003337f, 0.002196f, 0.000159f, -0.005383f, 0.004348f, 0.003605f, -0.002126f, -0.000422f, -0.000739f, 0.000324f, 0.003187f, 0.002696f, 0.008419f, -0.006991f, - -0.001985f, 0.003221f, -0.001701f, 0.004482f, -0.003478f, 0.007449f, -0.001721f, -0.002165f, 0.001081f, 0.004307f, 0.003038f, -0.000945f, -0.000433f, -0.021294f, -0.001945f, -0.018947f, -0.009053f, 0.008139f, -0.009731f, 0.004407f, 0.006418f, -0.011303f, -0.028482f, 0.009246f, -0.028218f, -0.032212f, 0.006939f, -0.015762f, 0.014194f, 0.020515f, -0.005298f, 0.023916f, -0.005839f, 0.023632f, 0.031909f, 0.000209f, 0.001802f, -0.032143f, -0.006196f, 0.003685f, 0.005444f, -0.003592f, -0.021376f, 0.001673f, -0.018115f, 0.002489f, -0.004947f, 0.005103f, -0.007010f, -0.011750f, 0.002626f, -0.001934f, -0.006668f, 0.007776f, 0.000672f, -0.004733f, 0.023032f, 0.008780f, 0.017272f, -0.010769f, 0.003118f, -0.009049f, 0.006532f, -0.001869f, 0.009013f, -0.002852f, -0.006934f, -0.008668f, -0.020530f, -0.011871f, 0.032916f, 0.013555f, 0.021805f, -0.025126f, 0.005257f, 0.018923f, -0.016030f, 0.000343f, 0.012160f, -0.006431f, 0.012203f, 0.001952f, -0.022187f, -0.005550f, -0.034114f, -0.004012f, 0.013658f, 0.007297f, 0.022779f, 0.002786f, 0.015107f, 0.016390f, 0.005552f, -0.000814f, 0.029535f, 0.002709f, - 0.000699f, -0.004874f, -0.003000f, 0.015884f, 0.009110f, 0.015204f, -0.001859f, -0.002876f, -0.003918f, 0.011168f, 0.002147f, -0.002065f, 0.002877f, 0.007737f, -0.001886f, -0.004197f, -0.008804f, 0.000540f, -0.007048f, -0.002845f, -0.006030f, 0.005236f, -0.000823f, -0.009933f, -0.002011f, 0.001014f, 0.000614f, -0.000235f, -0.004956f, 0.007198f, -0.005763f, 0.002043f, 0.002465f, -0.007408f, -0.001591f, -0.004854f, 0.000880f, 0.006438f, -0.005646f, -0.004173f, -0.003581f, -0.003051f, 0.003260f, -0.020766f, -0.018910f, -0.019659f, -0.029155f, 0.019942f, 0.012583f, 0.001951f, -0.019693f, 0.017791f, -0.000379f, -0.024407f, -0.020330f, -0.006846f, -0.005236f, -0.015572f, -0.006431f, -0.009169f, -0.008146f, -0.005661f, -0.022972f, 0.011541f, 0.013084f, -0.001029f, -0.002354f, -0.003999f, -0.008643f, -0.026861f, -0.029705f, 0.001048f, 0.012543f, -0.007637f, -0.018394f, -0.010052f, 0.013565f, 0.010300f, 0.000418f, -0.005539f, -0.008054f, -0.007762f, 0.017213f, -0.008761f, 0.012020f, -0.008284f, 0.000097f, -0.029242f, -0.006668f, -0.002185f, 0.021904f, 0.006224f, -0.005467f, -0.016390f, -0.011761f, -0.022993f, - 0.037031f, -0.017036f, 0.035152f, 0.004636f, -0.015556f, 0.023495f, 0.022730f, 0.039894f, -0.039302f, 0.016265f, 0.006195f, 0.005371f, -0.008045f, -0.011103f, 0.016944f, 0.009034f, -0.003275f, -0.018205f, 0.020038f, -0.010588f, 0.021562f, 0.018164f, 0.016798f, -0.015403f, 0.033465f, -0.024855f, 0.013565f, 0.021876f, -0.012880f, 0.002816f, 0.000286f, 0.019016f, -0.005377f, 0.008500f, -0.010223f, 0.020311f, -0.000998f, 0.003636f, -0.011970f, 0.009319f, -0.001007f, 0.009609f, -0.003136f, 0.012921f, 0.005902f, 0.004133f, -0.007964f, 0.002509f, -0.006736f, 0.000449f, -0.005799f, -0.007210f, -0.001866f, -0.006360f, -0.004700f, -0.000609f, -0.003685f, -0.006339f, 0.003984f, 0.005421f, 0.007440f, 0.001908f, -0.007778f, 0.000770f, -0.005397f, 0.005051f, 0.001639f, -0.003533f, 0.000522f, 0.003553f, 0.001636f, -0.008196f, 0.001161f, 0.008375f, 0.002793f, -0.001231f, 0.001916f, 0.031520f, -0.052807f, -0.057096f, -0.035567f, -0.006152f, -0.024741f, 0.015130f, -0.020318f, 0.001943f, 0.010394f, -0.001695f, 0.037655f, 0.026848f, 0.009743f, -0.011154f, -0.008178f, 0.026069f, -0.004212f, 0.003898f, - -0.010567f, -0.023582f, 0.000247f, 0.009315f, 0.006459f, -0.013039f, 0.011528f, 0.001456f, -0.001347f, 0.022061f, 0.030786f, 0.002030f, -0.019389f, -0.008594f, -0.037359f, -0.014716f, -0.009528f, -0.011440f, 0.001867f, 0.006399f, -0.013474f, -0.005629f, -0.018917f, 0.020398f, 0.024852f, 0.020399f, 0.023216f, 0.017945f, 0.030328f, 0.003522f, 0.010518f, 0.006983f, -0.005310f, 0.011446f, 0.018141f, -0.018218f, -0.062180f, -0.014698f, 0.020873f, -0.032489f, 0.016628f, 0.020179f, 0.007523f, -0.010018f, 0.001720f, -0.007957f, -0.024881f, -0.007014f, 0.016448f, -0.020226f, -0.016794f, 0.005813f, -0.013609f, 0.040382f, 0.041429f, -0.015500f, 0.026727f, 0.006806f, -0.003764f, -0.018292f, 0.012848f, -0.024602f, -0.020026f, 0.021956f, 0.016890f, 0.011519f, -0.001438f, -0.002370f, -0.029586f, -0.021595f, -0.003798f, -0.006994f, -0.005421f, -0.004683f, -0.008679f, -0.007521f, -0.008087f, -0.004346f, 0.001179f, 0.006770f, 0.005639f, 0.009050f, -0.000695f, -0.004674f, -0.004368f, -0.003283f, 0.013485f, 0.012200f, 0.006514f, -0.001408f, -0.000784f, -0.003120f, -0.004951f, -0.008057f, -0.003385f, 0.001151f, - -0.002255f, 0.005158f, -0.002828f, 0.001774f, 0.002626f, 0.002029f, 0.005157f, -0.006238f, -0.000081f, 0.000936f, 0.004365f, -0.007468f, 0.012381f, -0.005404f, -0.003122f, 0.050812f, -0.042754f, -0.000887f, 0.007341f, -0.041089f, -0.012018f, -0.017407f, 0.006259f, -0.012621f, 0.035661f, 0.004462f, -0.000356f, 0.044288f, -0.002429f, -0.039508f, -0.031481f, -0.019472f, 0.015298f, -0.002459f, -0.038079f, 0.009603f, 0.010712f, 0.019870f, -0.022620f, 0.011333f, 0.019394f, 0.016598f, 0.013585f, -0.004871f, 0.023161f, 0.024707f, 0.008514f, -0.055798f, 0.040706f, -0.020169f, 0.015741f, -0.004301f, -0.005672f, 0.010386f, -0.024519f, -0.014337f, 0.026219f, -0.012222f, -0.003305f, 0.023335f, -0.026322f, 0.023465f, -0.009079f, 0.021760f, -0.029005f, 0.038539f, -0.017168f, 0.059786f, -0.007759f, 0.003453f, 0.015575f, -0.013635f, -0.009756f, -0.007653f, 0.005017f, -0.003437f, -0.030130f, -0.038371f, -0.010372f, 0.021689f, -0.011256f, -0.014192f, -0.038585f, 0.017446f, 0.004139f, -0.053323f, -0.000614f, 0.000291f, 0.007976f, 0.026798f, -0.018323f, 0.008073f, -0.023578f, -0.021219f, -0.031327f, -0.031871f, - -0.005405f, -0.018841f, 0.022913f, -0.004260f, 0.022386f, -0.011312f, 0.012830f, -0.002276f, -0.014040f, -0.020282f, -0.002094f, 0.001845f, 0.009850f, -0.005230f, 0.004439f, 0.001412f, 0.008095f, -0.001333f, -0.010320f, -0.002076f, -0.015708f, -0.001298f, 0.002761f, 0.002950f, 0.001082f, -0.006606f, -0.007523f, 0.008152f, 0.004234f, -0.003229f, 0.010128f, -0.013111f, -0.016467f, -0.000929f, 0.014984f, -0.000289f, 0.004478f, 0.005207f, 0.010311f, -0.000053f, 0.011517f, -0.009892f, 0.003835f, 0.001580f, 0.009402f, 0.014907f, -0.009507f, 0.001809f, -0.002084f, 0.001833f, 0.019329f, 0.059360f, 0.029209f, -0.017717f, 0.040458f, 0.013687f, -0.026256f, 0.010304f, 0.026062f, -0.003779f, -0.009201f, -0.035994f, -0.010075f, 0.022683f, 0.014394f, 0.010953f, 0.006360f, -0.006240f, -0.014787f, -0.033949f, 0.018015f, -0.011369f, 0.008870f, -0.025991f, -0.014451f, -0.000342f, -0.004260f, 0.034003f, 0.009949f, 0.005690f, 0.025592f, 0.012706f, -0.039219f, -0.004238f, 0.014078f, -0.006989f, 0.000621f, 0.033613f, 0.010767f, 0.038973f, -0.022681f, -0.013856f, -0.006523f, -0.014083f, 0.014984f, -0.014691f, - 0.028929f, 0.029315f, -0.012917f, -0.027969f, 0.047252f, -0.024059f, -0.010022f, -0.005338f, 0.013960f, 0.007576f, -0.026615f, -0.007540f, 0.016769f, -0.012224f, 0.021315f, -0.009800f, 0.030268f, -0.015443f, 0.006716f, 0.046884f, -0.001088f, 0.033141f, 0.056601f, 0.007552f, 0.027720f, -0.014021f, -0.068412f, -0.045882f, -0.009008f, -0.002532f, 0.038649f, -0.000872f, 0.012831f, 0.003694f, -0.009790f, -0.031227f, -0.070591f, 0.053720f, 0.003546f, 0.001987f, 0.017302f, 0.008725f, -0.017317f, 0.039828f, 0.001842f, 0.008743f, -0.000620f, 0.003080f, -0.034875f, -0.012478f, -0.023034f, -0.013391f, -0.001246f, -0.012480f, -0.013059f, 0.008512f, -0.002934f, -0.008446f, 0.025306f, -0.004286f, -0.025972f, -0.018029f, 0.006382f, 0.001736f, -0.007609f, 0.039836f, 0.011779f, -0.012694f, -0.015322f, 0.004572f, -0.003638f, -0.007671f, 0.001190f, 0.004118f, -0.008955f, 0.009846f, -0.000387f, 0.014003f, 0.017430f, 0.003947f, -0.001725f, -0.004761f, 0.011671f, 0.011911f, 0.010193f, -0.077011f, -0.018549f, 0.080650f, -0.030989f, -0.034405f, 0.071050f, -0.045485f, 0.040025f, 0.053707f, 0.021132f, 0.007528f, - -0.040693f, 0.015748f, -0.071353f, -0.034957f, 0.015621f, 0.037301f, 0.004218f, 0.008777f, 0.027077f, 0.072404f, 0.048837f, 0.015496f, 0.002757f, 0.000179f, 0.008109f, 0.006237f, -0.027914f, 0.000886f, 0.017968f, 0.022881f, 0.096436f, 0.054604f, 0.037252f, 0.069878f, 0.028570f, -0.009620f, 0.021062f, -0.000959f, 0.066816f, 0.024485f, -0.005248f, -0.010733f, 0.028053f, -0.003897f, 0.032196f, -0.098947f, 0.004530f, 0.034626f, -0.001799f, 0.041835f, -0.015219f, 0.011384f, 0.022345f, -0.092047f, -0.035448f, -0.006784f, -0.029308f, -0.037842f, -0.044837f, 0.042762f, -0.027286f, 0.008936f, -0.008095f, 0.042937f, -0.069124f, -0.018554f, -0.009405f, 0.022354f, 0.000083f, -0.005854f, 0.051665f, 0.089921f, -0.000007f, 0.028369f, -0.016475f, 0.008098f, 0.062984f, -0.065916f, -0.039043f, -0.055066f, -0.069745f, -0.005548f, -0.002314f, -0.027077f, -0.029282f, -0.027567f, -0.026269f, -0.033898f, -0.049575f, -0.021239f, -0.031963f, -0.019264f, 0.009270f, 0.044673f, 0.014623f, 0.007304f, 0.007172f, -0.003735f, 0.010371f, 0.004918f, -0.030739f, -0.027546f, -0.007548f, -0.039070f, -0.015214f, -0.016867f, - -0.013072f, -0.015003f, 0.018753f, -0.013813f, 0.001716f, 0.003340f, 0.008446f, 0.022509f, 0.033972f, 0.000254f, -0.007798f, 0.024863f, -0.011675f, 0.016077f, 0.006548f, 0.004008f, -0.005882f, 0.005048f, 0.003713f, -0.013612f, -0.018192f, -0.019742f, -0.002171f, 0.042483f, 0.036196f, -0.034035f, -0.123395f, -0.021583f, 0.049700f, 0.012033f, -0.014311f, -0.009285f, 0.003205f, -0.016555f, -0.023130f, 0.027482f, 0.019598f, 0.056235f, 0.019722f, 0.033971f, -0.013177f, 0.074695f, 0.012845f, 0.047507f, -0.007196f, 0.068940f, -0.026571f, 0.045062f, -0.044031f, 0.000810f, 0.004274f, 0.032321f, -0.013091f, -0.023360f, -0.058051f, 0.032479f, 0.003701f, 0.007014f, -0.028327f, -0.051149f, -0.003675f, 0.006450f, -0.006864f, 0.016282f, 0.032729f, 0.005494f, 0.023265f, 0.085356f, -0.036212f, 0.008991f, -0.028450f, 0.044322f, 0.037560f, -0.042097f, 0.039746f, 0.046393f, -0.033261f, 0.012152f, 0.010352f, 0.032304f, 0.015268f, 0.065127f, 0.019926f, -0.022425f, 0.003449f, 0.084031f, 0.026049f, -0.095000f, 0.027769f, 0.017608f, -0.082602f, -0.022342f, -0.026726f, -0.057556f, 0.003802f, 0.036355f, - 0.038912f, -0.022802f, 0.070290f, -0.017674f, -0.031048f, -0.015304f, 0.037012f, -0.138185f, -0.017280f, 0.002530f, 0.111537f, 0.015338f, 0.094530f, 0.046079f, 0.066258f, -0.001361f, 0.022542f, -0.012245f, 0.056117f, 0.057741f, 0.051075f, -0.011921f, -0.034496f, -0.013481f, 0.056093f, -0.006117f, -0.037079f, -0.015489f, 0.066528f, 0.009829f, -0.041775f, -0.013689f, 0.060016f, 0.017745f, 0.024877f, -0.000292f, 0.022562f, -0.016693f, -0.001370f, -0.000780f, 0.009691f, -0.001084f, 0.010504f, -0.007848f, -0.019689f, -0.022619f, -0.028418f, -0.003207f, -0.020764f, 0.000514f, -0.003779f, -0.007541f, 0.019911f, -0.022242f, -0.009373f, -0.022048f, -0.008406f, -0.040900f, -0.030894f, 0.042374f, 0.000743f, -0.076071f, 0.061680f, 0.133080f, 0.008862f, -0.073779f, 0.114621f, -0.025689f, -0.001714f, 0.016514f, 0.064994f, -0.037237f, 0.002750f, 0.130374f, -0.064592f, 0.031179f, 0.043839f, 0.042268f, -0.057771f, -0.005645f, 0.010319f, -0.028113f, 0.004909f, 0.013760f, -0.023498f, 0.023303f, -0.039827f, -0.011096f, -0.015958f, -0.002816f, -0.023917f, -0.020719f, -0.007736f, 0.012743f, -0.043428f, -0.040374f, - 0.060997f, 0.011284f, -0.038228f, -0.009803f, 0.036279f, 0.088299f, -0.007688f, -0.042731f, 0.045950f, 0.067775f, -0.019633f, -0.004792f, 0.001752f, 0.024686f, 0.000183f, 0.000295f, 0.030717f, -0.074384f, 0.051193f, -0.042811f, 0.000550f, -0.060780f, 0.034249f, -0.004535f, -0.091144f, 0.045230f, -0.006506f, -0.035025f, 0.061509f, 0.007476f, 0.060820f, -0.051196f, -0.019701f, -0.020534f, -0.047584f, -0.073590f, -0.097679f, 0.083157f, 0.033894f, 0.061285f, 0.056281f, 0.035083f, 0.013587f, -0.034868f, 0.053293f, -0.026228f, -0.022428f, 0.072406f, 0.024095f, -0.013318f, -0.006471f, 0.022260f, -0.051141f, 0.013449f, -0.020210f, 0.034137f, -0.013009f, -0.021585f, 0.032311f, 0.005775f, -0.038016f, 0.003357f, -0.018015f, -0.010292f, 0.008042f, -0.007994f, 0.006954f, -0.001769f, -0.027387f, -0.013528f, 0.011840f, -0.008792f, -0.017276f, 0.017444f, 0.026935f, 0.026797f, -0.021287f, -0.008371f, 0.030962f, -0.052195f, 0.015750f, 0.019604f, -0.022536f, -0.051853f, 0.026243f, 0.003648f, -0.023578f, 0.016705f, -0.025241f, -0.040264f, 0.010652f, 0.036859f, -0.030226f, -0.012630f, 0.012861f, 0.032237f, - -0.008785f, -0.003553f, 0.001735f, -0.021852f, 0.072163f, -0.029414f, 0.021377f, 0.016633f, -0.074850f, 0.067239f, 0.023529f, -0.019309f, 0.057777f, 0.004753f, 0.003846f, 0.028165f, -0.025118f, 0.073645f, -0.059220f, -0.031790f, 0.027465f, 0.025286f, 0.012518f, -0.055165f, -0.033556f, -0.061464f, 0.033859f, 0.008017f, 0.030918f, -0.000089f, 0.033204f, 0.013273f, 0.011071f, 0.001178f, 0.028286f, -0.012958f, 0.015533f, -0.028219f, 0.020942f, -0.026106f, -0.000325f, -0.034414f, -0.024425f, 0.001227f, -0.030560f, 0.014042f, 0.072445f, 0.017118f, -0.054530f, 0.028138f, 0.021692f, 0.038234f, 0.000934f, 0.063734f, -0.055160f, 0.008136f, 0.025367f, -0.053358f, -0.012559f, 0.106783f, 0.060101f, -0.142043f, -0.060373f, 0.075058f, -0.020792f, -0.067592f, 0.026300f, -0.007247f, -0.052114f, 0.037680f, 0.064216f, -0.087767f, 0.017028f, 0.077193f, -0.052846f, -0.047611f, 0.063173f, 0.008071f, -0.052511f, 0.008827f, 0.040943f, -0.046111f, -0.006666f, 0.049554f, -0.007690f, -0.022806f, -0.036195f, 0.045263f, -0.012468f, 0.024992f, 0.005557f, 0.025378f, -0.018177f, 0.016214f, 0.045788f, 0.017642f, - -0.034470f, 0.002171f, -0.024799f, -0.017125f, -0.034751f, -0.003759f, -0.009623f, -0.003106f, -0.023537f, 0.022872f, 0.019794f, -0.008761f, 0.052293f, -0.014102f, -0.056675f, 0.066828f, -0.008567f, -0.013627f, 0.011894f, 0.022874f, 0.002591f, -0.007091f, 0.056442f, 0.030516f, -0.040690f, 0.002532f, 0.015591f, -0.029965f, -0.024687f, 0.040355f, -0.021936f, -0.079173f, 0.074703f, 0.008670f, -0.076981f, -0.003210f, 0.039433f, -0.029651f, -0.064896f, 0.035992f, 0.048619f, -0.080116f, 0.010827f, 0.058502f, -0.035751f, -0.007182f, 0.064317f, -0.005913f, -0.027542f, 0.014187f, 0.026585f, -0.036829f, -0.010781f, 0.037125f, -0.009814f, 0.061760f, -0.134354f, -0.010475f, -0.023077f, -0.151157f, -0.026061f, -0.047209f, 0.015587f, 0.025006f, 0.045322f, -0.020679f, -0.057797f, -0.022993f, -0.083776f, 0.010505f, 0.031133f, 0.016698f, 0.014286f, -0.068882f, 0.042614f, 0.005814f, -0.080945f, 0.058943f, -0.087105f, -0.036780f, -0.032135f, 0.023084f, 0.064519f, 0.073034f, -0.005181f, -0.017400f, -0.141474f, 0.060357f, 0.145022f, 0.051776f, 0.004198f, -0.079957f, -0.115154f, -0.048427f, -0.008907f, 0.059858f, - -0.071786f, -0.044177f, -0.073767f, -0.024541f, 0.135544f, 0.144433f, -0.024399f, -0.067679f, -0.056776f, -0.031458f, -0.014434f, 0.072392f, -0.033858f, 0.021150f, 0.016147f, 0.047919f, -0.012470f, -0.033508f, -0.083885f, -0.037505f, 0.130081f, 0.054608f, 0.086881f, -0.079558f, -0.042806f, -0.037224f, 0.088768f, 0.001101f, -0.141989f, -0.138547f, 0.078134f, 0.132243f, 0.223883f, 0.038333f, -0.188398f, 0.031028f, -0.049056f, 0.063746f, 0.063050f, -0.232658f, -0.072998f, 0.044685f, 0.123270f, 0.029097f, -0.117061f, -0.027088f, -0.010762f, 0.068021f, 0.059666f, 0.015037f, -0.093509f, -0.015425f, 0.021877f, 0.041552f, 0.022137f, -0.025285f, 0.005227f, -0.052960f, -0.005432f, -0.001508f, 0.051834f, -0.035270f, 0.068746f, -0.043698f, 0.020541f, 0.038556f, -0.014850f, 0.031878f, 0.030097f, 0.052367f, 0.004098f, -0.026332f, -0.029134f, 0.004166f, 0.004020f, 0.008347f, 0.007009f, -0.002383f, -0.002063f, -0.019802f, -0.018704f, -0.004653f, 0.035039f, -0.009238f, 0.002522f, -0.007615f, 0.012820f, 0.001902f, 0.020324f, -0.067704f, 0.057694f, -0.060331f, -0.013888f, 0.002845f, 0.014786f, -0.010919f, - 0.013193f, 0.024260f, -0.039937f, -0.033171f, -0.001413f, 0.009478f, 0.024544f, -0.027861f, 0.003334f, 0.022273f, -0.017534f, 0.014096f, -0.009434f, 0.067017f, -0.001633f, -0.009505f, 0.037522f, 0.021453f, 0.033265f, -0.016654f, 0.020989f, -0.006385f, -0.001610f, 0.028518f, 0.019213f, 0.005176f, 0.007659f, 0.038276f, -0.035926f, -0.010124f, 0.003070f, 0.051463f, -0.001520f, -0.010960f, 0.046681f, -0.011530f, -0.021303f, -0.019987f, 0.038554f, -0.008793f, 0.016438f, 0.011027f, 0.005263f, -0.013260f, 0.006339f, 0.015842f, 0.004690f, 0.044882f, 0.021288f, 0.013151f, -0.019931f, -0.002326f, 0.016185f, -0.031062f, 0.010671f, 0.012631f, 0.031938f, 0.001045f, -0.004619f, 0.019094f, 0.003338f, -0.036131f, 0.040607f, 0.013260f, -0.010403f, 0.034969f, -0.024070f, -0.002257f, -0.018160f, -0.014586f, 0.033036f, 0.025379f, -0.003114f, 0.013031f, -0.020973f, 0.005367f, -0.028009f, -0.001925f, -0.025723f, 0.006238f, 0.015293f, 0.006542f, 0.002190f, -0.004718f, -0.004270f, 0.005453f, -0.015727f, 0.005035f, -0.007299f, 0.007769f, -0.010668f, -0.002749f, -0.009946f, -0.010867f, 0.004734f, -0.001292f, - -0.001660f, -0.003547f, 0.015120f, 0.006927f, -0.021202f, -0.020450f, -0.015377f, 0.005213f, 0.005708f, 0.016228f, 0.008248f, -0.018764f, -0.003833f, -0.006579f, 0.016993f, -0.003709f, 0.018393f, 0.008814f, -0.016797f, 0.000919f, 0.007628f, -0.008223f, 0.011380f, -0.006438f, 0.012986f, -0.008984f, -0.004122f, 0.005359f, -0.008864f, 0.107095f, 0.008556f, -0.039488f, -0.032815f, 0.005369f, 0.024139f, -0.001427f, 0.022031f, -0.008358f, -0.005982f, -0.029635f, -0.006591f, -0.020739f, 0.032981f, -0.020625f, -0.001746f, -0.013005f, -0.006219f, -0.007612f, 0.003562f, -0.021917f, 0.003315f, -0.009419f, -0.015530f, 0.004591f, -0.002515f, 0.001291f, -0.004238f, 0.007785f, 0.003686f, -0.018320f, -0.011845f, 0.000039f, -0.012498f, -0.010786f, 0.009074f, -0.002922f, -0.018812f, 0.001302f, -0.010475f, 0.008061f, -0.027767f, 0.013918f, -0.012085f, -0.020993f, 0.006372f, -0.009591f, -0.010938f, 0.002905f, -0.000204f, 0.001367f, -0.004636f, 0.004714f, -0.008502f, 0.009441f, -0.005840f, 0.001053f, 0.015450f, -0.011105f, 0.005177f, -0.002880f, -0.001651f, 0.004280f, -0.012797f, 0.011697f, -0.013451f, 0.011680f, - -0.002816f, -0.000494f, -0.008614f, 0.011049f, -0.012920f, 0.000925f, 0.004557f, -0.016899f, 0.016928f, -0.010257f, 0.007182f, -0.007746f, 0.006862f, -0.005947f, -0.007504f, 0.012677f, -0.007903f, -0.001463f, 0.012372f, -0.007893f, -0.000119f, 0.001130f, 0.001955f, -0.008731f, 0.000701f, -0.000677f, -0.003866f, -0.002361f, 0.002120f, -0.002652f, -0.004767f, -0.002235f, 0.005390f, -0.004797f, 0.004038f, -0.001258f, -0.000571f, -0.001438f, -0.003663f, 0.003593f, -0.002477f, -0.002724f, 0.003700f, -0.003716f, 0.002925f, 0.001529f, -0.002343f, 0.000748f, -0.000611f, 0.001202f, -0.007481f, 0.007347f, -0.007695f, 0.001516f, -0.001143f, -0.003835f, 0.001020f, -0.002021f, 0.005227f, -0.051473f, -0.083223f, 0.088220f, 0.306289f, 0.058822f, 0.091873f, -0.188610f, -0.262493f, -0.109521f, -0.137513f, 0.106184f, 0.245877f, 0.141527f, 0.094835f, 0.009605f, -0.135710f, -0.119919f, -0.120163f, -0.048987f, 0.067946f, 0.058184f, 0.061910f, 0.055880f, -0.002014f, -0.008925f, -0.014390f, -0.019234f, -0.028614f, -0.003737f, 0.037459f, -0.003232f, -0.022023f, -0.008457f, -0.031745f, -0.017647f, -0.005669f, -0.007739f, - 0.060200f, 0.056250f, 0.033025f, 0.035756f, 0.001646f, -0.043483f, -0.044644f, -0.081441f, -0.054523f, 0.007615f, 0.006465f, 0.016788f, 0.047940f, 0.068697f, 0.040952f, 0.034674f, -0.001778f, -0.038673f, -0.054225f, -0.046483f, -0.039334f, 0.005760f, 0.013742f, 0.025274f, 0.017139f, 0.011700f, 0.002288f, -0.013973f, 0.005327f, 0.001541f, 0.005690f, 0.034250f, -0.003419f, 0.015272f, 0.015267f, -0.025155f, -0.048155f, -0.049147f, -0.044727f, 0.012015f, 0.036237f, 0.026646f, 0.039670f, 0.035395f, -0.012055f, 0.009054f, 0.021511f, -0.013819f, -0.013408f, -0.030465f, -0.039802f, -0.015145f, -0.009608f, -0.003890f, 0.016473f, 0.008047f, 0.008768f, 0.026884f, 0.025073f, 0.026471f, 0.014697f, 0.006930f, -0.013424f, -0.016048f, -0.040912f, -0.044315f, -0.031874f, -0.022922f, 0.009765f, 0.029350f, 0.036332f, 0.049389f, 0.034819f, 0.022680f, 0.000041f, -0.014970f, -0.024322f, -0.050511f, -0.054143f, -0.018724f, 0.009332f, 0.026062f, 0.020271f, 0.018239f, 0.020291f, 0.015187f, -0.001292f, -0.003501f, 0.001884f, 0.000898f, -0.009229f, -0.007666f, -0.027502f, -0.017506f, -0.001044f, 0.010226f, - 0.013125f, 0.011013f, -0.004334f, -0.000055f, 0.009614f, 0.008209f, 0.000328f, 0.005854f, 0.004520f, -0.002699f, -0.013060f, -0.011052f, -0.011327f, -0.002052f, -0.003143f, 0.000322f, 0.002158f, 0.011912f, 0.012402f, 0.011776f, 0.004800f, 0.003328f, -0.004566f, -0.003270f, -0.003263f, 0.000555f, -0.001313f} - }, - { - {0.004058f, 0.011758f, 0.000993f, 0.007867f, -0.001811f, -0.001158f, -0.004253f, 0.008388f, 0.005298f, -0.004945f, -0.006519f, 0.004220f, -0.001670f, -0.010017f, -0.011604f, 0.002738f, 0.000564f, -0.003925f, -0.003967f, -0.007815f, 0.004968f, -0.009191f, 0.002333f, -0.000918f, 0.002063f, 0.000742f, 0.001950f, -0.004138f, -0.000619f, 0.001614f, 0.002620f, -0.000956f, 0.003209f, 0.002342f, -0.004093f, 0.003055f, -0.002485f, -0.007841f, 0.011092f, -0.002151f, 0.000484f, 0.002632f, -0.001416f, 0.006113f, 0.007813f, -0.001698f, 0.002917f, 0.005873f, 0.000471f, -0.006270f, -0.004812f, 0.001551f, 0.003701f, -0.001915f, 0.002011f, 0.007211f, -0.006392f, -0.005755f, 0.005980f, 0.001125f, -0.002411f, -0.003895f, -0.000198f, 0.001353f, 0.004528f, -0.007314f, 0.003556f, 0.001838f, -0.005723f, -0.006175f, 0.005220f, -0.003369f, -0.007575f, -0.003242f, -0.000744f, 0.011367f, 0.013114f, -0.001154f, 0.002145f, -0.001656f, 0.001983f, -0.002187f, 0.003454f, 0.002107f, -0.002211f, -0.000747f, -0.002346f, 0.001108f, -0.003115f, 0.002882f, 0.002542f, 0.000573f, -0.003643f, 0.000413f, -0.000217f, 0.001555f, - -0.000978f, 0.002421f, -0.001312f, 0.000421f, 0.000108f, 0.001499f, -0.000387f, 0.000513f, 0.000390f, 0.001549f, -0.000129f, -0.014467f, -0.006246f, -0.009983f, 0.006543f, -0.004846f, -0.006772f, -0.004598f, -0.006073f, -0.001216f, 0.002244f, 0.010931f, 0.001890f, -0.005854f, 0.009236f, 0.000352f, 0.009520f, -0.009158f, 0.014743f, 0.006831f, 0.015993f, -0.002880f, -0.005445f, -0.001110f, -0.008802f, -0.000760f, -0.000630f, -0.003200f, 0.002988f, 0.000284f, -0.006991f, -0.001707f, -0.000029f, 0.002152f, 0.006935f, 0.001588f, -0.010453f, -0.008716f, -0.003306f, 0.005856f, 0.000385f, 0.000275f, -0.005302f, 0.008687f, -0.000243f, 0.000623f, -0.003759f, 0.001094f, -0.002274f, 0.004551f, -0.001488f, 0.014490f, 0.000115f, -0.001926f, 0.005489f, -0.003680f, -0.006536f, -0.002719f, 0.004904f, 0.008736f, 0.001442f, 0.005343f, 0.001309f, 0.000886f, -0.004619f, -0.004520f, -0.007393f, -0.000350f, -0.007664f, 0.001880f, 0.006218f, 0.006630f, 0.004661f, -0.002391f, -0.003406f, 0.005949f, -0.004254f, -0.001794f, 0.003714f, -0.003434f, -0.000616f, -0.001798f, 0.003844f, 0.006843f, 0.003527f, 0.001989f, - -0.001754f, -0.000797f, 0.001222f, -0.000711f, 0.004582f, 0.000755f, -0.002262f, -0.001357f, -0.001048f, -0.000337f, 0.000627f, 0.000545f, 0.000056f, -0.000740f, 0.002114f, 0.001327f, 0.000086f, 0.000799f, -0.001682f, -0.001086f, -0.001347f, -0.001579f, -0.000571f, -0.001766f, -0.001727f, -0.000398f, 0.002164f, 0.010111f, 0.010939f, 0.005775f, 0.000018f, 0.008919f, -0.004806f, -0.007589f, 0.007407f, 0.007686f, 0.009769f, 0.014357f, 0.001400f, -0.009147f, 0.005358f, -0.008724f, -0.000527f, 0.002919f, 0.002158f, 0.015990f, 0.001334f, -0.012875f, -0.000518f, 0.002298f, 0.005491f, -0.000930f, -0.004286f, -0.014175f, -0.002696f, 0.012030f, 0.004252f, 0.007912f, 0.009362f, 0.007702f, 0.002243f, -0.001341f, 0.008333f, -0.010530f, -0.000225f, -0.007159f, 0.019309f, -0.001042f, 0.000635f, 0.008552f, -0.007029f, -0.001121f, 0.003101f, -0.001078f, 0.011554f, -0.001770f, 0.003556f, 0.010965f, -0.002040f, 0.003438f, 0.001003f, -0.000531f, -0.000018f, -0.001443f, -0.003080f, 0.004739f, 0.006453f, -0.001541f, 0.006423f, 0.002309f, 0.012622f, 0.014326f, -0.000678f, 0.003830f, 0.002454f, -0.007236f, - 0.007184f, -0.001772f, -0.005952f, 0.002526f, 0.007075f, 0.001975f, -0.001747f, 0.012695f, -0.001727f, 0.003447f, 0.003886f, 0.001880f, -0.006372f, -0.000374f, -0.001243f, 0.001024f, -0.003332f, -0.000703f, 0.000457f, 0.001348f, 0.001430f, 0.002336f, -0.000754f, 0.001142f, -0.003096f, -0.002148f, -0.003856f, 0.002987f, 0.001054f, -0.000584f, 0.001253f, -0.000541f, -0.003156f, 0.002024f, 0.000372f, 0.001466f, -0.000925f, -0.001127f, 0.000623f, 0.003774f, -0.003858f, 0.015984f, 0.015623f, -0.006138f, -0.008976f, -0.007806f, -0.005394f, 0.004044f, -0.017122f, -0.001632f, 0.002348f, -0.008148f, -0.015170f, 0.014749f, -0.003201f, -0.003655f, 0.002331f, 0.006829f, 0.006016f, -0.007451f, -0.003009f, -0.000245f, -0.000842f, 0.003601f, 0.005154f, -0.002782f, 0.006345f, -0.004698f, 0.009742f, -0.001092f, 0.000375f, -0.004916f, 0.005137f, 0.001989f, -0.001506f, -0.004893f, 0.002348f, -0.002737f, -0.004377f, -0.003567f, 0.000858f, 0.003314f, -0.009248f, 0.000894f, -0.017438f, -0.009972f, 0.006260f, -0.002519f, 0.002076f, 0.004000f, 0.011471f, -0.003585f, -0.005784f, -0.000290f, 0.000363f, 0.004943f, - 0.004645f, -0.005256f, -0.002359f, 0.012794f, 0.000490f, 0.002056f, 0.001085f, 0.005763f, -0.010563f, 0.000482f, 0.005364f, 0.009977f, 0.002076f, 0.004362f, 0.014990f, -0.003555f, -0.001399f, -0.007978f, 0.000119f, 0.002599f, 0.005258f, 0.000120f, -0.003217f, 0.004712f, -0.000379f, 0.008453f, 0.000097f, -0.000197f, 0.001040f, -0.010390f, -0.005405f, -0.006095f, 0.005885f, -0.000890f, -0.001674f, 0.000018f, 0.000798f, -0.000302f, 0.003105f, -0.000859f, -0.001725f, -0.002198f, -0.001109f, -0.003160f, -0.002094f, 0.002556f, 0.000184f, -0.000795f, -0.001622f, 0.000860f, 0.000683f, 0.000310f, -0.001419f, 0.002807f, 0.001200f, 0.001801f, -0.000361f, -0.000078f, -0.001855f, -0.001988f, 0.001418f, -0.000909f, 0.001903f, 0.002524f, -0.010122f, -0.015846f, 0.006802f, -0.005174f, 0.000325f, -0.008158f, 0.006355f, -0.018292f, -0.014991f, -0.017250f, -0.005781f, -0.003652f, -0.012014f, 0.006157f, 0.016524f, -0.012133f, 0.002579f, 0.019376f, -0.004447f, -0.005271f, -0.008876f, 0.001588f, -0.000017f, 0.008596f, 0.002840f, 0.006184f, 0.004358f, -0.006287f, -0.012269f, -0.005839f, 0.007382f, -0.004155f, - -0.007492f, 0.001918f, 0.003141f, 0.002438f, 0.001595f, 0.016874f, -0.007925f, 0.009195f, -0.004359f, 0.004626f, -0.004875f, 0.014043f, -0.010408f, 0.005743f, -0.000829f, -0.008317f, 0.007800f, -0.003076f, -0.002728f, 0.008380f, 0.004479f, -0.000703f, -0.003663f, 0.007618f, 0.003777f, -0.007805f, -0.009342f, 0.006431f, 0.010393f, 0.005850f, 0.000266f, -0.004498f, 0.000551f, 0.006625f, -0.002827f, 0.008004f, -0.001858f, -0.016262f, 0.000535f, -0.007136f, 0.023193f, 0.008102f, -0.013167f, -0.007418f, -0.002583f, -0.005962f, 0.005995f, 0.005804f, 0.004410f, -0.002834f, 0.005098f, 0.004099f, 0.001455f, -0.000970f, -0.006793f, 0.001353f, 0.002357f, -0.001941f, 0.001582f, 0.002374f, -0.000897f, -0.000284f, 0.001511f, -0.000430f, -0.002009f, -0.001688f, 0.000176f, 0.001781f, -0.001833f, 0.001685f, 0.001997f, -0.002549f, -0.003243f, -0.004102f, 0.000144f, 0.002440f, -0.001104f, 0.002167f, -0.001752f, -0.000168f, 0.001658f, -0.001166f, 0.000702f, 0.006077f, -0.013485f, -0.016445f, 0.014169f, -0.002953f, -0.013418f, 0.001215f, -0.003452f, 0.013855f, 0.006852f, -0.003399f, 0.002568f, -0.000577f, - -0.002043f, -0.002343f, 0.016000f, 0.003250f, 0.000875f, -0.010791f, -0.004971f, -0.002429f, 0.005623f, 0.007151f, 0.021540f, 0.000668f, 0.000730f, -0.000530f, 0.001488f, -0.009332f, 0.000451f, 0.004041f, -0.011742f, -0.008178f, -0.007596f, -0.000836f, 0.015752f, -0.012665f, 0.002203f, 0.007311f, 0.003136f, -0.005854f, 0.006572f, -0.015841f, 0.013080f, -0.002700f, 0.000022f, 0.007216f, -0.008056f, -0.009338f, -0.014653f, 0.003235f, -0.004782f, 0.014023f, 0.004849f, 0.000465f, 0.002665f, 0.004349f, 0.010920f, -0.004702f, -0.002385f, 0.011506f, -0.002326f, -0.006379f, -0.000226f, 0.011513f, 0.011562f, 0.010648f, 0.005714f, -0.006902f, 0.006775f, 0.009641f, -0.011247f, 0.014517f, -0.008799f, -0.008128f, 0.013070f, 0.001475f, 0.018853f, -0.000141f, -0.010571f, 0.004750f, -0.004706f, 0.012581f, 0.005964f, 0.003533f, 0.000847f, 0.004372f, -0.002199f, 0.007938f, 0.002738f, 0.003206f, 0.002372f, 0.004682f, -0.000367f, -0.000306f, 0.003596f, -0.000056f, 0.002640f, -0.001332f, 0.004352f, 0.008974f, -0.005180f, -0.002303f, 0.001567f, 0.001189f, 0.000570f, 0.002336f, -0.000451f, 0.000785f, - 0.001827f, 0.004433f, 0.000316f, 0.008265f, 0.001950f, 0.001024f, -0.003685f, 0.000999f, 0.002708f, -0.003616f, 0.000800f, 0.001676f, -0.000224f, 0.001117f, -0.029522f, -0.019450f, 0.005230f, 0.009484f, 0.020186f, -0.012302f, 0.010832f, 0.002018f, 0.011408f, -0.000582f, -0.005327f, -0.006934f, 0.007043f, 0.020914f, 0.001764f, -0.001831f, -0.019957f, -0.016690f, 0.000102f, -0.012267f, -0.007225f, 0.000717f, 0.002508f, -0.012572f, -0.003772f, 0.003056f, 0.007377f, 0.003946f, -0.008144f, -0.000018f, 0.009378f, 0.007653f, 0.001578f, -0.007705f, 0.001416f, -0.004709f, 0.002264f, 0.002646f, 0.004295f, -0.005928f, 0.007443f, 0.018229f, -0.001864f, -0.001342f, 0.003523f, -0.010138f, 0.004783f, 0.014687f, -0.014471f, -0.017036f, -0.008835f, 0.001433f, -0.022096f, 0.000572f, 0.000620f, 0.003108f, 0.000203f, -0.000297f, -0.010497f, -0.005622f, -0.006822f, -0.000899f, 0.015014f, 0.022214f, 0.000617f, 0.001494f, 0.010812f, -0.004500f, -0.001866f, 0.005059f, 0.024946f, 0.003192f, 0.008960f, 0.017565f, 0.003192f, -0.011333f, 0.004708f, 0.005280f, -0.005261f, 0.005434f, 0.004499f, -0.001128f, - -0.005440f, 0.002603f, 0.001585f, -0.001131f, -0.009287f, 0.004138f, 0.008502f, 0.003235f, 0.006192f, 0.003514f, 0.007475f, -0.001567f, -0.002821f, 0.006945f, 0.005714f, -0.001720f, -0.000392f, -0.002003f, 0.004919f, 0.005405f, -0.004322f, 0.005371f, 0.001421f, 0.000717f, 0.001328f, 0.002947f, 0.003982f, 0.000583f, 0.003479f, -0.002296f, -0.001267f, 0.000048f, -0.000629f, 0.001493f, -0.002327f, 0.000420f, -0.000702f, 0.001092f, -0.003134f, 0.015276f, 0.009445f, -0.013940f, -0.000693f, 0.030221f, 0.026538f, 0.005733f, 0.015974f, 0.019972f, 0.004934f, -0.000171f, 0.012964f, -0.005780f, 0.000070f, -0.011716f, 0.009601f, -0.000692f, 0.000407f, 0.004477f, 0.005077f, 0.016502f, -0.013890f, -0.012491f, 0.012453f, 0.002676f, 0.005645f, -0.009728f, 0.001699f, -0.003333f, 0.006367f, 0.000201f, 0.008967f, 0.008993f, -0.009129f, 0.007631f, 0.006202f, -0.010304f, 0.026621f, 0.004772f, 0.005111f, -0.020617f, -0.006740f, -0.001564f, 0.017219f, 0.016239f, -0.001745f, -0.017684f, 0.011514f, -0.015364f, -0.004911f, 0.013647f, -0.000503f, -0.010867f, 0.013117f, 0.016728f, -0.004348f, 0.005706f, - -0.006807f, -0.023210f, 0.000019f, 0.015047f, -0.006990f, -0.007873f, 0.009713f, -0.011081f, -0.017101f, 0.004320f, 0.011391f, 0.021081f, 0.010875f, -0.015621f, 0.006459f, -0.018369f, -0.021893f, 0.020187f, 0.009319f, 0.007450f, -0.013653f, -0.014501f, -0.002323f, 0.015241f, 0.004922f, 0.021732f, 0.009467f, 0.005558f, -0.023121f, 0.003814f, -0.006535f, 0.000971f, -0.005497f, 0.004881f, 0.001315f, 0.005888f, 0.009583f, 0.005165f, 0.000735f, 0.004378f, -0.003958f, -0.001802f, -0.004031f, 0.000032f, -0.003783f, -0.001002f, 0.001307f, 0.007333f, 0.001136f, -0.002940f, -0.001430f, 0.002398f, 0.000191f, -0.000570f, -0.007527f, 0.000482f, -0.003915f, 0.001476f, -0.005393f, -0.005720f, 0.003722f, 0.004637f, 0.007097f, -0.007040f, 0.031260f, 0.020053f, -0.013550f, -0.003712f, -0.000516f, 0.005466f, 0.004409f, -0.001980f, -0.012221f, 0.002955f, -0.008379f, 0.012996f, 0.000405f, 0.005003f, -0.004254f, -0.001944f, -0.012755f, -0.006800f, 0.026871f, 0.008872f, -0.016389f, 0.007744f, -0.016010f, -0.011320f, -0.025042f, 0.010872f, 0.000415f, 0.000373f, 0.005929f, -0.000712f, -0.011358f, 0.018860f, - 0.010797f, -0.004189f, -0.019028f, 0.019026f, -0.013065f, 0.005001f, -0.000496f, 0.006214f, 0.003757f, 0.012079f, 0.013960f, -0.003289f, 0.007729f, 0.022098f, 0.002835f, -0.006974f, -0.006336f, -0.003948f, 0.003434f, 0.014740f, -0.004063f, 0.005972f, 0.001160f, -0.013565f, 0.000517f, -0.003365f, 0.006599f, -0.020387f, -0.000344f, -0.033965f, -0.020572f, -0.018966f, -0.004792f, -0.018742f, 0.012578f, -0.004710f, -0.015485f, -0.004200f, -0.001740f, -0.012577f, -0.005447f, -0.000481f, 0.001260f, -0.007559f, -0.016269f, -0.016332f, 0.000879f, -0.003576f, 0.003982f, 0.009102f, -0.001455f, 0.004536f, 0.002279f, -0.000111f, -0.000266f, -0.008913f, -0.000378f, -0.000219f, -0.007125f, -0.000623f, 0.006720f, 0.012875f, -0.002230f, -0.006212f, 0.004843f, -0.008031f, 0.006768f, -0.006711f, -0.002484f, 0.001251f, -0.004854f, -0.006035f, -0.000031f, -0.003781f, 0.000942f, -0.001433f, -0.006026f, 0.002935f, -0.000235f, 0.007496f, 0.005084f, -0.005351f, 0.004560f, -0.003006f, 0.004243f, -0.002474f, 0.002889f, 0.002611f, 0.002070f, 0.000116f, 0.003034f, -0.003554f, -0.001866f, -0.003946f, -0.007856f, 0.001001f, - 0.002884f, -0.000862f, 0.001739f, -0.006225f, -0.021293f, -0.026768f, -0.012523f, -0.017818f, 0.046137f, -0.022339f, 0.010560f, -0.021097f, -0.005918f, 0.002217f, -0.003279f, -0.031435f, -0.000524f, -0.014941f, 0.001250f, 0.037008f, -0.011711f, 0.015525f, 0.020507f, 0.007356f, 0.008417f, 0.022255f, 0.006760f, -0.008674f, 0.006462f, 0.008721f, 0.009528f, 0.003980f, -0.004495f, 0.025901f, 0.001121f, -0.002091f, -0.004209f, 0.007017f, -0.002083f, -0.009028f, 0.008898f, -0.003348f, 0.006419f, -0.025108f, 0.001176f, -0.004862f, 0.022835f, -0.008973f, 0.007453f, 0.034034f, -0.002841f, 0.000701f, -0.008186f, -0.014083f, -0.000685f, -0.002321f, -0.014277f, 0.018073f, -0.003777f, 0.013110f, 0.001511f, 0.012380f, -0.007077f, -0.001350f, 0.027328f, 0.013302f, -0.021025f, -0.011078f, 0.005869f, 0.006529f, 0.003343f, 0.005788f, -0.006073f, 0.007688f, 0.010082f, 0.022594f, -0.028943f, 0.001733f, -0.012326f, 0.005907f, -0.000442f, 0.003307f, 0.010772f, 0.015516f, -0.010292f, 0.010958f, -0.007434f, -0.005112f, -0.004123f, -0.003886f, 0.008820f, -0.019772f, -0.003821f, -0.009134f, 0.011391f, 0.009152f, - 0.003964f, 0.004709f, -0.006570f, 0.007559f, 0.003519f, 0.005440f, -0.000731f, 0.004313f, -0.005830f, -0.003304f, -0.007325f, -0.000626f, -0.001172f, -0.006617f, -0.000087f, -0.000689f, -0.001757f, -0.000092f, 0.007842f, 0.004805f, -0.004316f, -0.007077f, 0.003692f, 0.002681f, 0.008987f, -0.006936f, 0.000541f, -0.002502f, 0.004031f, 0.004584f, -0.003771f, -0.007136f, -0.015273f, -0.013532f, -0.014776f, 0.016012f, -0.030909f, -0.008991f, -0.019393f, 0.009715f, 0.031896f, -0.017297f, 0.000873f, 0.001017f, -0.006329f, 0.012439f, -0.010356f, 0.005069f, -0.003258f, -0.013048f, 0.028454f, 0.001537f, -0.009359f, 0.000526f, -0.004228f, -0.012500f, 0.009898f, -0.009549f, 0.009290f, -0.017937f, -0.008441f, 0.012294f, 0.008896f, -0.030047f, -0.005459f, -0.025569f, 0.007616f, -0.004187f, -0.024741f, 0.030233f, -0.008458f, -0.000476f, -0.022887f, -0.024954f, 0.001432f, -0.022487f, -0.002976f, -0.019413f, -0.016691f, 0.019831f, 0.002161f, -0.025285f, 0.008320f, -0.022620f, 0.020251f, 0.007435f, -0.009833f, 0.000886f, 0.006508f, 0.021398f, -0.016477f, -0.023195f, 0.023575f, -0.016357f, -0.009393f, 0.012466f, - 0.017799f, -0.032918f, -0.016247f, 0.018887f, 0.013963f, 0.007391f, -0.001730f, 0.002432f, -0.023724f, 0.008256f, 0.007912f, 0.013194f, -0.004176f, -0.024997f, -0.018198f, 0.008989f, -0.021657f, -0.018860f, 0.007994f, -0.001152f, 0.000298f, 0.008012f, 0.018294f, 0.000128f, -0.000766f, 0.017138f, 0.001585f, -0.002672f, 0.002921f, -0.002222f, -0.003463f, 0.003771f, -0.004478f, -0.003063f, -0.008597f, -0.008132f, -0.005869f, 0.001612f, -0.004883f, 0.000171f, 0.003484f, 0.002873f, -0.000475f, -0.000004f, 0.003729f, -0.004213f, -0.006819f, 0.002154f, -0.000222f, 0.006620f, -0.006282f, -0.001694f, -0.007122f, 0.008374f, 0.008737f, 0.001987f, -0.000433f, -0.005288f, -0.002184f, -0.007478f, 0.000653f, 0.001331f, -0.004246f, 0.001426f, 0.001729f, 0.015709f, -0.024244f, -0.039527f, -0.031925f, 0.014384f, -0.038170f, -0.001846f, 0.028895f, -0.002561f, 0.002054f, 0.020749f, -0.013798f, -0.011737f, 0.045934f, -0.018202f, 0.010727f, 0.017488f, -0.003274f, -0.041665f, -0.003496f, 0.004395f, -0.010507f, -0.005775f, -0.009728f, 0.038876f, 0.000340f, 0.000441f, -0.001948f, -0.028004f, 0.005091f, -0.016124f, - -0.008138f, 0.001744f, 0.004646f, 0.008299f, 0.022537f, 0.005015f, -0.005858f, 0.044420f, 0.004635f, -0.010986f, -0.040660f, -0.005928f, 0.029753f, -0.006467f, -0.018684f, -0.024998f, -0.022063f, -0.018802f, -0.011877f, 0.031597f, 0.012239f, 0.001817f, 0.017513f, 0.026398f, 0.014673f, -0.005750f, -0.004682f, 0.027286f, -0.005438f, -0.008368f, 0.007875f, 0.020866f, 0.002920f, -0.021442f, 0.004877f, -0.002164f, -0.032106f, -0.002422f, 0.025451f, -0.012633f, -0.014792f, -0.003587f, 0.034234f, -0.027292f, -0.005529f, -0.015229f, 0.015605f, 0.009089f, 0.007200f, 0.010967f, -0.004554f, -0.005882f, 0.011553f, 0.009268f, 0.006354f, -0.001873f, 0.001374f, 0.007294f, -0.020207f, -0.003725f, 0.002582f, -0.010433f, 0.000211f, 0.011015f, -0.001173f, 0.002033f, -0.004389f, -0.001257f, 0.005981f, 0.007780f, 0.011623f, 0.006558f, -0.002013f, 0.004151f, -0.006733f, -0.008519f, 0.002387f, -0.001672f, -0.006979f, 0.007704f, 0.004049f, 0.005827f, 0.001190f, 0.002820f, 0.005944f, 0.003313f, -0.001778f, -0.004290f, -0.001173f, 0.002425f, -0.000030f, 0.002458f, 0.000462f, 0.003049f, 0.001813f, 0.005220f, - 0.000629f, -0.005026f, 0.011056f, 0.009074f, -0.008577f, -0.002897f, -0.004126f, 0.032345f, 0.003243f, -0.028873f, -0.001077f, 0.008675f, -0.001051f, -0.013155f, 0.012528f, -0.009729f, 0.025706f, -0.019769f, 0.017663f, 0.038640f, -0.010457f, -0.010274f, -0.009110f, -0.008020f, 0.034479f, -0.025538f, -0.028091f, -0.021412f, 0.007821f, -0.011161f, -0.018084f, -0.008297f, 0.012385f, -0.017310f, 0.009586f, 0.002296f, 0.013528f, 0.020113f, 0.002472f, -0.002541f, -0.003857f, 0.019827f, -0.005102f, 0.007025f, -0.024269f, -0.000187f, -0.008643f, 0.019335f, -0.025790f, 0.021210f, -0.008909f, -0.013263f, 0.021326f, 0.036980f, -0.020767f, 0.010548f, -0.004584f, 0.007528f, -0.055474f, -0.043954f, -0.026681f, 0.003881f, -0.016924f, 0.007345f, 0.001815f, -0.020576f, -0.016273f, 0.001826f, 0.044230f, 0.010461f, -0.027549f, -0.041165f, -0.021730f, -0.015175f, 0.027112f, -0.018747f, -0.026827f, 0.006467f, 0.005905f, -0.024779f, -0.001546f, -0.000363f, -0.012295f, -0.002778f, -0.000635f, -0.000982f, 0.012169f, 0.003051f, -0.014247f, -0.012602f, -0.006935f, -0.018193f, -0.009915f, 0.003105f, 0.020590f, 0.003534f, - 0.003887f, -0.005869f, -0.016836f, -0.002522f, 0.013859f, -0.000561f, -0.007807f, 0.012807f, -0.019198f, -0.009351f, 0.002942f, 0.003161f, -0.000267f, 0.002252f, 0.001411f, -0.006384f, -0.013419f, -0.004723f, 0.010341f, -0.005853f, -0.004735f, -0.005257f, -0.011964f, -0.013173f, 0.005046f, -0.004640f, -0.002841f, -0.012394f, 0.003170f, 0.008381f, 0.010028f, -0.000271f, -0.005911f, -0.006830f, 0.007251f, 0.006606f, 0.055551f, 0.036440f, -0.009604f, 0.003749f, 0.035919f, -0.014115f, 0.001173f, 0.015539f, 0.038884f, 0.022936f, -0.006856f, -0.008590f, -0.013540f, 0.003598f, -0.007496f, 0.000701f, 0.000903f, 0.041115f, 0.067758f, -0.003874f, 0.046709f, 0.029661f, 0.005957f, 0.007442f, -0.033462f, -0.032989f, -0.003871f, 0.008870f, -0.002498f, 0.008220f, -0.012567f, -0.024675f, -0.041926f, -0.003495f, -0.027024f, -0.022654f, -0.015197f, -0.023454f, -0.017051f, -0.000828f, 0.038689f, -0.001135f, -0.029606f, -0.002382f, 0.008246f, 0.028919f, -0.009194f, -0.007218f, -0.017745f, 0.013177f, -0.052995f, -0.047387f, -0.023004f, -0.023591f, -0.025546f, -0.015307f, 0.016682f, -0.021267f, -0.029779f, -0.024813f, - -0.044460f, 0.022805f, 0.011983f, -0.039270f, 0.020006f, 0.039861f, 0.077777f, 0.043101f, -0.000678f, 0.014327f, -0.045059f, -0.018264f, 0.023956f, 0.020505f, -0.011698f, -0.030263f, 0.003744f, 0.006460f, 0.027385f, -0.003421f, -0.028546f, -0.004866f, 0.044967f, 0.028950f, 0.032495f, 0.026108f, 0.045354f, 0.043002f, 0.012654f, 0.011757f, -0.010266f, -0.017941f, -0.005253f, -0.001481f, -0.015658f, 0.000039f, -0.018063f, -0.013204f, 0.020457f, 0.009285f, -0.005867f, -0.017876f, -0.007091f, -0.002055f, -0.000527f, -0.019909f, 0.019702f, 0.000350f, -0.016977f, 0.010117f, -0.010561f, -0.008571f, -0.002807f, 0.006338f, 0.027269f, 0.013564f, 0.032674f, 0.000242f, -0.006734f, 0.003861f, 0.012315f, 0.008478f, -0.004482f, 0.017477f, 0.000595f, -0.005502f, 0.002331f, 0.014490f, -0.007325f, -0.005964f, 0.005117f, -0.001100f, -0.057748f, -0.005209f, 0.092137f, -0.006513f, 0.003050f, 0.023321f, -0.034059f, 0.019174f, 0.065216f, 0.060733f, -0.061443f, -0.058342f, -0.000372f, -0.063319f, -0.024424f, 0.000110f, 0.006956f, 0.023373f, 0.034503f, 0.030977f, 0.054020f, 0.013035f, 0.021020f, 0.021855f, - -0.009623f, -0.003718f, 0.005492f, 0.007341f, 0.015630f, -0.029039f, 0.064959f, 0.028211f, 0.030076f, -0.005557f, 0.065957f, 0.008373f, 0.039560f, 0.016721f, 0.012035f, -0.015527f, -0.010662f, 0.033985f, 0.012510f, 0.015852f, -0.036229f, -0.019000f, -0.030350f, -0.017317f, -0.022232f, -0.000021f, -0.043778f, -0.046872f, -0.003314f, -0.018016f, -0.089136f, -0.065857f, -0.060276f, 0.017076f, 0.063948f, 0.083639f, -0.046791f, 0.057672f, 0.088997f, 0.015325f, 0.006936f, -0.005682f, 0.061029f, 0.004726f, 0.055140f, 0.024012f, 0.025461f, -0.037183f, -0.123741f, -0.097463f, -0.022701f, -0.003328f, 0.001909f, 0.004308f, 0.044773f, 0.042966f, 0.036704f, -0.023360f, 0.002252f, -0.012230f, -0.064211f, 0.006340f, 0.004271f, 0.031812f, 0.004146f, 0.046812f, 0.041575f, 0.010388f, 0.036044f, -0.015737f, 0.024126f, -0.022300f, -0.025792f, -0.009364f, 0.009020f, 0.040590f, -0.010077f, -0.011684f, 0.005093f, -0.020393f, -0.010817f, 0.020405f, -0.006825f, 0.014008f, -0.026672f, 0.034718f, 0.009597f, 0.000061f, -0.003436f, 0.026601f, -0.007666f, 0.001542f, 0.003326f, -0.000901f, 0.017204f, -0.013606f, - -0.007870f, -0.000597f, 0.016447f, -0.026620f, 0.002333f, 0.008883f, -0.013968f, 0.001476f, 0.003558f, 0.002744f, -0.007001f, 0.045172f, -0.010145f, -0.080768f, -0.007395f, 0.129357f, 0.023333f, -0.023806f, 0.033018f, -0.010303f, 0.021399f, -0.009961f, -0.014260f, -0.042120f, -0.016255f, -0.004248f, -0.007385f, -0.019965f, 0.030246f, -0.027187f, -0.029901f, -0.001643f, 0.004456f, 0.027431f, 0.011878f, 0.007839f, 0.011255f, -0.010626f, -0.000039f, 0.040772f, -0.020897f, -0.047687f, -0.009911f, 0.004642f, -0.016524f, 0.034013f, -0.017842f, -0.010892f, 0.028024f, 0.008387f, 0.021093f, -0.049272f, -0.056260f, 0.019058f, -0.011084f, -0.018594f, -0.024256f, -0.029122f, -0.061923f, 0.000631f, -0.005686f, 0.021048f, -0.039749f, -0.081835f, 0.061376f, 0.017449f, 0.057674f, 0.006942f, -0.018980f, -0.016953f, 0.014807f, -0.030494f, 0.047773f, 0.010065f, 0.057396f, 0.040756f, 0.085355f, -0.007963f, -0.082528f, -0.063429f, -0.036642f, 0.047824f, 0.047261f, -0.035645f, 0.037467f, 0.075396f, -0.044432f, -0.006305f, 0.080220f, 0.013019f, 0.061546f, -0.008693f, -0.031929f, -0.083286f, -0.032896f, 0.009935f, - 0.053132f, 0.047100f, -0.027867f, 0.023891f, 0.021678f, 0.044688f, 0.014911f, -0.043625f, -0.052507f, -0.020116f, 0.035700f, 0.077006f, -0.002291f, -0.006484f, 0.039479f, 0.021414f, 0.003264f, -0.006213f, -0.017131f, -0.020320f, -0.017073f, 0.013435f, 0.007644f, 0.024621f, -0.010540f, -0.002468f, 0.001940f, 0.015015f, 0.018543f, -0.023921f, 0.000057f, 0.027765f, -0.003486f, -0.007685f, -0.030814f, 0.022409f, -0.000420f, -0.012795f, -0.009719f, 0.030902f, -0.001813f, -0.019365f, -0.010884f, -0.068042f, 0.070546f, 0.095724f, 0.016669f, 0.004346f, 0.021258f, -0.014612f, 0.041758f, 0.023360f, 0.043638f, -0.008853f, -0.046115f, 0.102416f, 0.000571f, -0.038511f, 0.004717f, 0.069246f, 0.031689f, 0.013567f, -0.043909f, 0.004742f, -0.023524f, -0.017176f, 0.006836f, -0.032669f, 0.002724f, 0.008759f, 0.039330f, -0.055928f, -0.009556f, -0.006734f, 0.033205f, -0.012681f, -0.020700f, -0.019692f, -0.000319f, 0.021156f, -0.043530f, 0.003125f, 0.011390f, -0.088982f, 0.012189f, -0.024158f, -0.062759f, 0.041155f, -0.046411f, -0.081325f, 0.107214f, -0.000910f, 0.006118f, -0.008547f, -0.029946f, 0.064662f, - -0.045916f, -0.004402f, 0.009526f, -0.029664f, -0.002544f, 0.081720f, 0.042179f, -0.072299f, -0.078246f, 0.076918f, -0.036920f, 0.044756f, 0.073800f, -0.066516f, -0.114408f, -0.079236f, 0.131722f, -0.007993f, -0.103618f, 0.094390f, -0.069162f, -0.131367f, -0.002294f, 0.112936f, -0.005129f, -0.136339f, -0.002199f, -0.046037f, 0.000982f, 0.167633f, -0.025893f, -0.123820f, 0.017650f, 0.065533f, 0.001100f, 0.076670f, 0.004171f, 0.001264f, -0.024657f, 0.002861f, 0.017269f, 0.061823f, -0.013322f, -0.017040f, 0.061131f, -0.008516f, 0.014304f, 0.042765f, -0.007748f, -0.063019f, 0.040539f, 0.029346f, 0.047535f, -0.015197f, -0.001525f, 0.016707f, -0.014220f, -0.046501f, -0.020773f, 0.018696f, 0.001003f, -0.009444f, 0.060372f, -0.002193f, -0.068136f, 0.015437f, 0.054824f, 0.031684f, -0.024037f, 0.002652f, -0.027488f, -0.015435f, 0.066559f, 0.055863f, -0.015185f, -0.064896f, -0.021210f, 0.026062f, 0.021020f, 0.017149f, -0.012738f, -0.002802f, -0.045145f, 0.069381f, -0.013442f, 0.020440f, 0.045486f, 0.031235f, 0.034619f, 0.081757f, 0.036374f, -0.021184f, 0.013679f, 0.019458f, 0.027579f, -0.030858f, - 0.080093f, 0.074181f, 0.011047f, 0.025070f, -0.017781f, -0.000991f, -0.080559f, 0.036346f, -0.042259f, 0.027962f, -0.002720f, -0.030779f, 0.044570f, -0.018459f, -0.032237f, 0.016655f, -0.045767f, 0.029815f, 0.001908f, -0.009774f, 0.013399f, 0.018264f, 0.029374f, 0.028508f, 0.028639f, 0.083188f, -0.007667f, 0.008202f, 0.027205f, 0.055728f, -0.004969f, 0.014100f, 0.000823f, 0.043371f, 0.053246f, -0.018129f, 0.013292f, -0.003319f, -0.007956f, -0.097140f, 0.008341f, 0.040014f, -0.022346f, -0.024509f, 0.021957f, -0.041049f, -0.058965f, 0.004336f, 0.034499f, 0.070061f, -0.090594f, 0.033946f, -0.003998f, -0.003541f, 0.001091f, 0.034706f, 0.077184f, 0.000374f, -0.055133f, 0.017528f, 0.062769f, -0.034620f, -0.048415f, 0.003762f, 0.027928f, -0.027315f, 0.049857f, -0.010560f, 0.038484f, 0.002296f, -0.036985f, 0.045357f, 0.037971f, 0.005339f, 0.030104f, -0.017577f, 0.019065f, -0.010017f, 0.010416f, 0.014160f, 0.045496f, -0.010516f, -0.053589f, -0.008004f, 0.063615f, 0.003855f, -0.007287f, 0.054893f, 0.012391f, -0.001272f, 0.014168f, 0.037781f, 0.058400f, -0.038035f, 0.014945f, 0.006889f, - -0.002023f, 0.027331f, -0.007519f, -0.043005f, 0.014541f, 0.039058f, -0.016402f, 0.009466f, 0.014379f, -0.013999f, 0.016341f, -0.027702f, 0.019789f, 0.016133f, -0.022526f, -0.051282f, 0.022238f, 0.027646f, -0.012492f, -0.019311f, 0.027494f, -0.002987f, -0.015452f, 0.043238f, -0.082144f, -0.064982f, -0.000603f, -0.099968f, -0.033590f, -0.037344f, 0.077104f, -0.002779f, -0.027793f, 0.034670f, -0.017527f, 0.018971f, 0.005534f, -0.038504f, 0.045851f, -0.103014f, -0.009203f, 0.005676f, -0.025102f, 0.018349f, 0.005090f, -0.020536f, -0.003134f, 0.002476f, 0.026328f, 0.001020f, -0.029532f, -0.099953f, -0.072001f, -0.055767f, -0.026965f, 0.061114f, -0.011979f, 0.001806f, -0.099052f, 0.006953f, -0.006430f, -0.013987f, 0.003646f, -0.096755f, 0.052053f, -0.047223f, 0.024223f, -0.019613f, 0.066058f, -0.036272f, -0.062981f, -0.031010f, -0.000042f, 0.047079f, 0.087192f, 0.090608f, -0.111880f, -0.083628f, -0.056870f, 0.038294f, 0.092850f, 0.111303f, -0.018977f, -0.028498f, -0.097860f, -0.036924f, 0.088087f, 0.053079f, -0.000536f, -0.000397f, -0.001569f, -0.083535f, 0.056135f, -0.017102f, 0.054202f, 0.129568f, - -0.144674f, 0.175596f, 0.050254f, -0.095710f, 0.027205f, -0.191494f, -0.186220f, 0.137489f, 0.059367f, 0.013240f, 0.041671f, -0.071079f, -0.033419f, 0.128133f, -0.004327f, 0.086072f, -0.007911f, -0.069777f, -0.022087f, 0.076016f, -0.024811f, -0.001975f, 0.025360f, -0.006416f, -0.043895f, 0.024517f, -0.035519f, 0.016447f, 0.049277f, -0.050852f, 0.048553f, 0.015867f, -0.005796f, 0.017931f, -0.002296f, -0.011585f, 0.008625f, -0.017740f, 0.009685f, -0.036108f, 0.032559f, 0.033110f, 0.007470f, 0.000999f, -0.010374f, 0.016946f, 0.006940f, 0.006735f, 0.017208f, 0.031910f, -0.038920f, -0.013449f, -0.036061f, -0.028119f, 0.003668f, 0.001432f, 0.032394f, -0.041042f, -0.030672f, -0.039529f, -0.024200f, -0.010552f, -0.082967f, 0.068584f, -0.041119f, 0.042074f, 0.022419f, 0.026458f, 0.015756f, -0.053332f, 0.058138f, -0.008888f, -0.020621f, -0.019310f, -0.022886f, 0.017507f, -0.011971f, 0.025019f, 0.015151f, -0.003594f, -0.005969f, -0.044701f, 0.025916f, 0.010236f, -0.011304f, 0.009603f, 0.023535f, -0.006969f, 0.013402f, -0.022867f, 0.026771f, -0.010234f, 0.003530f, 0.010539f, 0.011448f, -0.012177f, - 0.041213f, -0.001911f, -0.038516f, -0.002875f, 0.017935f, 0.008477f, -0.029437f, 0.014053f, 0.034527f, -0.006787f, -0.016599f, -0.016640f, -0.002145f, 0.009157f, -0.004056f, 0.040099f, -0.027073f, -0.010725f, -0.009545f, -0.020620f, -0.001610f, -0.006509f, 0.014926f, 0.010408f, -0.016598f, -0.002825f, 0.015648f, -0.016642f, -0.008294f, -0.005178f, 0.025099f, -0.015749f, 0.010826f, 0.016502f, -0.038622f, -0.015886f, 0.012513f, -0.040675f, 0.061379f, 0.016112f, 0.019605f, 0.028009f, -0.017827f, -0.000732f, -0.005200f, -0.028079f, 0.005692f, 0.008946f, 0.022474f, -0.004670f, -0.009313f, 0.013415f, -0.014043f, -0.006035f, 0.013511f, -0.000063f, -0.003203f, 0.011128f, 0.003553f, -0.007443f, -0.000238f, -0.008192f, 0.017971f, -0.017108f, 0.027223f, 0.001026f, 0.006062f, -0.011493f, -0.000933f, -0.004286f, -0.008404f, -0.004624f, 0.006538f, 0.003118f, 0.007891f, -0.000303f, -0.006314f, -0.004422f, -0.020939f, 0.021101f, -0.016799f, 0.009497f, -0.003932f, 0.012287f, -0.006863f, -0.019713f, 0.001384f, 0.010095f, -0.016008f, 0.024064f, -0.019095f, 0.010499f, -0.007244f, 0.095946f, 0.012486f, -0.032495f, - -0.025268f, -0.018909f, -0.001859f, -0.003072f, 0.002075f, -0.002599f, -0.003742f, -0.054234f, 0.001146f, -0.010787f, -0.012563f, 0.006902f, -0.021341f, -0.009649f, 0.009839f, -0.014835f, 0.004188f, 0.016855f, -0.022800f, 0.014365f, -0.008466f, -0.012055f, -0.001971f, -0.012056f, 0.005607f, -0.011186f, -0.006017f, -0.013183f, -0.002619f, -0.000164f, -0.000347f, -0.007902f, -0.008284f, 0.002536f, 0.004288f, -0.009450f, 0.012805f, -0.015769f, -0.001439f, -0.006262f, -0.002051f, -0.002921f, -0.012585f, 0.017253f, 0.010521f, -0.017198f, 0.020959f, -0.002074f, 0.004448f, -0.009420f, 0.020112f, -0.020061f, 0.001487f, 0.001800f, 0.005299f, -0.003252f, -0.005236f, 0.015109f, -0.009993f, 0.002317f, 0.000779f, -0.002974f, 0.004790f, -0.006452f, -0.000923f, 0.008488f, -0.004235f, -0.003739f, 0.009503f, -0.003608f, -0.004163f, -0.008734f, 0.004587f, 0.004434f, -0.019595f, 0.023563f, -0.013244f, 0.005417f, 0.001609f, 0.000436f, -0.007594f, 0.003360f, 0.009644f, -0.007037f, -0.003631f, 0.005291f, -0.007214f, -0.000338f, 0.005907f, -0.002308f, 0.002353f, 0.001415f, -0.005346f, 0.001061f, 0.000691f, 0.004935f, - -0.008681f, 0.000847f, -0.000979f, -0.003290f, 0.003629f, -0.004137f, 0.002090f, -0.002632f, -0.007593f, 0.004387f, -0.006582f, -0.003651f, 0.002444f, -0.003987f, 0.001528f, 0.003963f, 0.000426f, -0.005608f, 0.006106f, -0.001032f, -0.003757f, -0.046882f, -0.076276f, 0.085179f, 0.286472f, 0.029157f, 0.065804f, -0.155847f, -0.238325f, -0.059885f, -0.124476f, 0.097009f, 0.199726f, 0.105253f, 0.066592f, -0.014920f, -0.077446f, -0.076179f, -0.057293f, -0.053207f, 0.019050f, 0.034077f, 0.019737f, 0.036679f, 0.004896f, 0.002944f, 0.014523f, 0.004166f, 0.016482f, 0.013113f, -0.009727f, -0.036476f, -0.026945f, -0.032147f, -0.043377f, -0.022920f, 0.024528f, 0.031613f, 0.058719f, 0.082888f, 0.030084f, 0.012014f, -0.027478f, -0.065669f, -0.063522f, -0.044373f, -0.030762f, 0.006340f, 0.024526f, 0.035195f, 0.037574f, 0.031659f, 0.021389f, 0.002510f, -0.002439f, -0.020849f, -0.014371f, -0.009184f, -0.010389f, -0.004039f, -0.011748f, -0.003364f, -0.013941f, -0.013639f, 0.005117f, -0.001066f, 0.018202f, 0.029864f, 0.017783f, 0.044402f, 0.039577f, -0.018974f, -0.038908f, -0.039000f, -0.058060f, -0.016323f, - -0.013929f, -0.003087f, 0.035829f, 0.031932f, -0.005567f, 0.027775f, 0.034650f, 0.011781f, 0.024228f, -0.002124f, -0.027849f, -0.020183f, -0.047852f, -0.030121f, -0.011302f, -0.002926f, -0.003492f, 0.008703f, 0.022672f, 0.035918f, 0.045295f, 0.038344f, 0.012829f, -0.020828f, -0.034170f, -0.032683f, -0.036481f, -0.016326f, -0.009246f, -0.003705f, 0.008120f, 0.018096f, 0.014350f, 0.025286f, 0.013808f, 0.016642f, 0.015083f, 0.000220f, -0.012430f, -0.016189f, -0.020352f, -0.019943f, -0.017820f, -0.009374f, -0.009814f, 0.005808f, 0.010312f, 0.020822f, 0.030081f, 0.029120f, 0.011065f, 0.002159f, -0.016523f, -0.019996f, -0.023682f, -0.023645f, -0.006949f, -0.000927f, -0.004563f, 0.005823f, 0.018474f, 0.024220f, 0.011905f, 0.002817f, -0.001298f, 0.000528f, -0.004861f, -0.005265f, -0.009110f, -0.005405f, -0.006938f, -0.004693f, -0.003039f, 0.000341f, 0.000003f, 0.005605f, 0.010353f, 0.011171f, 0.004990f, 0.002204f, -0.002870f, -0.001447f, -0.002179f, 0.000445f, -0.001016f}, - {0.007429f, 0.012093f, 0.003175f, 0.010678f, 0.000184f, -0.011008f, -0.007593f, -0.008016f, -0.001247f, -0.005503f, 0.012912f, -0.009651f, -0.002453f, -0.004379f, -0.001543f, -0.007739f, 0.007448f, -0.004561f, -0.003574f, 0.006269f, 0.010389f, 0.011760f, 0.001814f, -0.000835f, 0.002448f, 0.000630f, 0.001663f, -0.005311f, -0.005722f, 0.002808f, -0.005187f, -0.005191f, -0.006962f, -0.007316f, 0.002239f, -0.004842f, 0.006487f, -0.008076f, -0.001094f, 0.003578f, 0.003400f, 0.003003f, -0.012534f, -0.002240f, -0.006949f, -0.001198f, -0.002912f, -0.007636f, -0.000149f, 0.009145f, 0.002788f, 0.004450f, 0.004210f, 0.004952f, 0.000639f, 0.006209f, 0.003907f, 0.006928f, -0.003900f, 0.004631f, -0.002258f, 0.003205f, 0.000379f, -0.006361f, 0.007476f, 0.008458f, -0.004508f, -0.005643f, 0.002506f, 0.007776f, 0.001866f, 0.002093f, -0.002581f, -0.000488f, 0.004222f, 0.002651f, 0.000695f, -0.001513f, 0.000531f, 0.003574f, 0.004340f, -0.000500f, -0.006730f, -0.004106f, -0.002257f, -0.002849f, 0.001582f, -0.000621f, -0.000599f, 0.003230f, -0.002348f, -0.000767f, 0.000001f, 0.000589f, -0.001587f, -0.000435f, - 0.000253f, -0.002533f, -0.000280f, 0.003166f, -0.000451f, 0.001687f, -0.002260f, 0.001339f, 0.000683f, -0.000130f, -0.001481f, -0.018892f, -0.004963f, -0.008522f, 0.006252f, -0.017711f, 0.003880f, -0.007808f, -0.004126f, 0.002509f, 0.000348f, 0.001977f, 0.002644f, 0.001993f, 0.007681f, -0.003421f, 0.000799f, -0.000781f, -0.009357f, 0.006889f, 0.011511f, -0.009378f, -0.008804f, 0.006681f, 0.001713f, 0.008249f, 0.002610f, 0.011083f, -0.001546f, 0.003731f, -0.005877f, -0.001794f, 0.011299f, 0.000897f, -0.007382f, -0.009105f, -0.009835f, 0.000410f, 0.008134f, 0.004126f, -0.000060f, 0.009257f, 0.007378f, 0.000284f, -0.007581f, 0.011840f, 0.003018f, 0.009130f, 0.009282f, -0.001632f, 0.005912f, 0.006987f, -0.000854f, 0.004126f, 0.004788f, -0.004614f, 0.000946f, -0.001435f, 0.004550f, -0.010415f, -0.006669f, 0.003355f, -0.006448f, -0.002490f, 0.008921f, -0.003618f, 0.004900f, -0.002097f, -0.014014f, 0.002359f, -0.000071f, 0.007359f, -0.011542f, -0.006209f, 0.005213f, 0.001316f, -0.001112f, 0.002974f, -0.005442f, 0.001578f, 0.001385f, -0.001667f, -0.003431f, 0.004717f, 0.004288f, 0.002966f, - 0.000537f, -0.001778f, 0.001139f, -0.001317f, -0.002079f, 0.001553f, 0.001334f, -0.002815f, 0.002029f, -0.001574f, -0.001197f, 0.002533f, -0.001822f, -0.003746f, -0.000057f, -0.001397f, -0.000459f, -0.001775f, -0.001951f, 0.000784f, -0.000146f, 0.001141f, -0.000010f, 0.001120f, -0.002761f, 0.000802f, -0.000804f, 0.011882f, 0.012544f, 0.005519f, 0.009278f, 0.007246f, 0.012563f, 0.014319f, -0.005328f, -0.001538f, 0.004819f, -0.014307f, -0.000481f, -0.004718f, -0.002732f, 0.006549f, -0.008331f, -0.000976f, 0.010583f, 0.001955f, 0.006783f, -0.003358f, -0.002456f, -0.003567f, -0.013456f, -0.002206f, 0.000912f, 0.007114f, -0.002167f, 0.012243f, 0.004822f, -0.002117f, 0.004892f, 0.002536f, 0.006289f, -0.004552f, -0.000954f, 0.014296f, -0.001917f, 0.013506f, 0.006336f, -0.005930f, 0.001414f, 0.011893f, 0.006189f, -0.007850f, 0.010839f, -0.002979f, 0.000728f, 0.000560f, -0.002196f, 0.002077f, 0.001198f, -0.009810f, 0.006249f, 0.004568f, -0.000854f, 0.000351f, -0.002197f, -0.008863f, -0.000000f, 0.004974f, -0.001025f, -0.001050f, -0.005976f, -0.013031f, -0.004489f, 0.004843f, 0.010920f, -0.016615f, - -0.008871f, 0.003100f, -0.007265f, 0.004250f, -0.000353f, -0.000082f, -0.010014f, -0.007591f, -0.004461f, -0.006497f, -0.003224f, 0.000363f, 0.001102f, -0.002333f, 0.003744f, 0.002993f, 0.000591f, 0.002758f, -0.003064f, -0.001130f, 0.000049f, -0.004481f, -0.001007f, 0.000439f, -0.005709f, 0.002379f, 0.001341f, -0.001093f, 0.000133f, 0.001181f, 0.002695f, 0.000303f, 0.000349f, 0.000043f, -0.002802f, -0.000355f, -0.000877f, 0.002022f, 0.001363f, 0.002768f, -0.002010f, 0.017509f, 0.018702f, -0.003771f, -0.007772f, -0.008584f, 0.017935f, -0.015563f, 0.000473f, -0.002574f, -0.007187f, -0.009868f, 0.003544f, -0.002741f, -0.013335f, -0.016326f, 0.000669f, -0.001264f, -0.008458f, 0.003042f, 0.004566f, -0.006026f, -0.008971f, -0.008456f, 0.011948f, -0.012877f, -0.001499f, -0.015041f, 0.000228f, 0.008321f, 0.002900f, 0.001397f, -0.008363f, -0.008128f, 0.007419f, -0.005718f, -0.008548f, 0.001038f, -0.003076f, 0.005235f, 0.000161f, 0.002099f, -0.008522f, -0.003199f, -0.002364f, 0.008209f, 0.005702f, 0.005701f, -0.016927f, 0.002662f, 0.004790f, 0.003855f, 0.004844f, -0.004866f, -0.003037f, 0.000587f, - 0.003500f, 0.006698f, -0.001107f, 0.004419f, -0.004857f, 0.013095f, -0.023731f, 0.008340f, 0.000737f, -0.012675f, -0.000485f, 0.013976f, -0.004175f, -0.006578f, -0.012696f, -0.004319f, 0.001052f, -0.003558f, 0.000045f, 0.005725f, 0.007363f, 0.006089f, -0.001748f, -0.001020f, -0.007444f, -0.001541f, -0.001863f, -0.003788f, 0.001097f, -0.001544f, -0.001429f, 0.003042f, -0.003737f, -0.001763f, 0.003720f, -0.001835f, 0.002422f, -0.000565f, -0.001455f, -0.001324f, -0.000955f, -0.005498f, -0.003377f, 0.002388f, 0.002751f, -0.002611f, -0.002053f, -0.001777f, 0.002078f, -0.001299f, -0.000733f, -0.002159f, 0.001464f, 0.001499f, -0.002517f, 0.001028f, -0.000313f, -0.002341f, -0.000506f, -0.001326f, 0.001559f, -0.000778f, 0.002295f, 0.003177f, -0.008307f, -0.026351f, 0.004820f, -0.012026f, 0.002647f, 0.002180f, -0.001509f, 0.018663f, 0.001048f, -0.011978f, 0.015977f, 0.007668f, 0.005494f, -0.002426f, 0.003320f, -0.004888f, 0.012526f, -0.002106f, 0.001435f, 0.018823f, 0.018411f, 0.007845f, 0.008436f, 0.008075f, 0.009168f, 0.006083f, -0.018179f, -0.005714f, -0.000249f, -0.004817f, -0.015475f, -0.001742f, - -0.003669f, -0.004128f, -0.008315f, -0.000200f, -0.002443f, 0.013275f, -0.004278f, 0.023306f, -0.000147f, 0.001925f, -0.004334f, -0.003425f, 0.000168f, -0.000718f, -0.001881f, -0.004130f, -0.002750f, -0.011490f, 0.002770f, 0.001825f, -0.001383f, -0.005966f, 0.007971f, 0.005866f, 0.006905f, -0.002483f, -0.005034f, 0.000083f, 0.006011f, 0.006483f, -0.005286f, -0.015000f, -0.007662f, 0.001560f, 0.012431f, -0.001778f, 0.010156f, -0.008148f, -0.011786f, 0.008720f, -0.004146f, -0.009710f, 0.005571f, 0.005793f, -0.010859f, -0.008618f, -0.011948f, -0.004020f, -0.004145f, 0.006774f, -0.003770f, 0.002017f, -0.000813f, 0.004493f, 0.002771f, 0.002457f, -0.002301f, -0.001341f, -0.006252f, -0.003184f, -0.001713f, -0.000147f, 0.002689f, -0.000602f, 0.000126f, 0.005076f, 0.001946f, -0.000329f, -0.000017f, 0.003232f, -0.002249f, 0.000817f, 0.000880f, -0.001828f, 0.001918f, -0.001632f, 0.001234f, 0.000944f, 0.001385f, -0.001022f, -0.003940f, 0.003656f, -0.006580f, 0.009679f, -0.011463f, -0.012535f, 0.006033f, -0.003591f, -0.001049f, -0.006581f, -0.003762f, 0.006427f, 0.009135f, 0.004762f, -0.002054f, 0.001399f, - -0.001029f, -0.002082f, -0.008607f, 0.002937f, -0.023297f, -0.006759f, -0.007374f, 0.006475f, 0.008086f, 0.000699f, 0.004053f, -0.014519f, 0.004048f, 0.002274f, 0.004031f, -0.013085f, 0.024853f, -0.001083f, 0.004684f, 0.003287f, -0.011631f, 0.001885f, -0.016711f, 0.010823f, -0.003498f, -0.014018f, 0.002918f, 0.001115f, -0.006968f, 0.000806f, 0.001620f, 0.011145f, 0.020066f, 0.008693f, -0.003963f, 0.006514f, 0.008290f, -0.018556f, -0.006755f, -0.008479f, 0.005256f, 0.004298f, -0.003012f, 0.002988f, 0.006556f, 0.004168f, 0.008421f, 0.015631f, 0.000441f, -0.005761f, -0.001523f, -0.000625f, 0.012321f, -0.008767f, 0.000123f, 0.005688f, 0.016588f, 0.000098f, -0.010912f, -0.010685f, -0.000878f, -0.013132f, -0.001718f, 0.005021f, 0.020296f, 0.017447f, -0.001961f, -0.009220f, 0.007520f, 0.000580f, 0.002240f, 0.001910f, -0.000638f, 0.002576f, -0.000650f, -0.002536f, 0.002261f, 0.002924f, -0.002806f, 0.004087f, 0.003821f, 0.003690f, -0.001017f, -0.002974f, 0.002394f, 0.003284f, -0.000498f, 0.000980f, -0.002497f, 0.000406f, -0.000524f, 0.004760f, 0.001753f, 0.002972f, 0.002304f, 0.000743f, - 0.001546f, -0.000021f, 0.001869f, 0.004256f, 0.000894f, 0.001748f, 0.003038f, 0.004139f, -0.001985f, -0.001040f, 0.000988f, 0.001231f, 0.003117f, 0.004861f, -0.024268f, -0.006602f, -0.009021f, 0.010382f, 0.000298f, -0.004980f, -0.031184f, -0.004101f, -0.004235f, 0.012905f, 0.030746f, -0.008868f, 0.020631f, 0.003568f, -0.018296f, -0.018610f, 0.003163f, 0.004738f, -0.010666f, 0.011677f, -0.008446f, 0.009411f, -0.011667f, 0.005617f, 0.003927f, -0.011016f, -0.009347f, -0.007073f, 0.003592f, 0.012063f, -0.015790f, 0.000590f, -0.016599f, -0.000919f, -0.006356f, 0.004034f, 0.011999f, 0.001272f, -0.005289f, -0.004617f, 0.012994f, -0.000037f, 0.019843f, 0.006118f, -0.007573f, -0.007221f, -0.005831f, 0.002853f, 0.012428f, -0.000256f, 0.020644f, -0.036873f, -0.027258f, -0.022004f, -0.005155f, -0.018768f, 0.001155f, -0.007064f, 0.006614f, 0.016749f, 0.002945f, 0.006933f, 0.010678f, 0.017729f, 0.009054f, 0.002714f, -0.012290f, -0.030523f, -0.032229f, 0.017264f, 0.001106f, 0.021915f, -0.015672f, -0.011236f, 0.009542f, -0.022593f, 0.000388f, -0.008070f, -0.000912f, -0.014571f, 0.000515f, 0.004862f, - 0.013106f, 0.002380f, 0.002073f, -0.004201f, 0.004689f, -0.000962f, 0.001514f, 0.003677f, 0.005906f, 0.007675f, -0.002136f, -0.003223f, 0.005536f, 0.002830f, -0.002179f, -0.004047f, 0.000801f, -0.000675f, -0.000538f, -0.001714f, 0.000818f, 0.000059f, -0.002242f, -0.000747f, 0.002250f, 0.004151f, 0.003288f, 0.002852f, 0.001448f, -0.009358f, -0.005190f, -0.003579f, -0.003364f, 0.005028f, -0.000815f, -0.001550f, 0.000010f, 0.001434f, 0.000339f, 0.014619f, 0.006387f, -0.011645f, -0.000318f, 0.027837f, 0.023599f, -0.002181f, -0.020398f, -0.034418f, -0.003927f, -0.012082f, 0.012312f, -0.010314f, -0.010153f, -0.038976f, -0.016724f, -0.034910f, 0.012885f, -0.001141f, -0.008507f, 0.009304f, -0.001222f, 0.000215f, 0.002530f, -0.011203f, 0.000991f, -0.012869f, -0.002285f, 0.007826f, 0.005822f, -0.013126f, 0.004734f, 0.013410f, 0.021822f, -0.003295f, -0.003049f, -0.007251f, 0.001245f, 0.011337f, 0.016088f, -0.002299f, 0.002383f, -0.003457f, -0.002780f, 0.019173f, 0.013952f, 0.000575f, 0.014391f, 0.004180f, -0.017618f, 0.003343f, -0.001764f, 0.022821f, 0.008925f, 0.002890f, 0.011018f, 0.014814f, - 0.004087f, -0.012999f, -0.022280f, -0.005127f, 0.004666f, 0.011980f, 0.006124f, 0.000767f, 0.004687f, 0.017707f, 0.003914f, 0.005774f, 0.008165f, 0.004781f, -0.011349f, -0.012827f, -0.011147f, -0.012670f, -0.011601f, 0.019685f, 0.002790f, 0.015208f, -0.013330f, -0.011759f, -0.002247f, 0.012715f, -0.007924f, 0.006785f, 0.003905f, 0.002046f, -0.006727f, -0.004264f, -0.006214f, -0.004244f, -0.007085f, 0.002853f, 0.002313f, -0.001921f, 0.004690f, -0.003058f, 0.002220f, -0.001222f, 0.000532f, 0.002153f, -0.006269f, -0.003887f, -0.006291f, -0.004066f, -0.007668f, -0.002190f, -0.006355f, -0.003033f, -0.003676f, -0.004833f, -0.000299f, 0.005593f, 0.001839f, 0.002344f, -0.001979f, -0.000524f, -0.000679f, -0.001309f, 0.004361f, -0.002036f, 0.048824f, 0.010699f, -0.015047f, 0.008724f, -0.008755f, -0.028940f, -0.005840f, -0.028388f, -0.015534f, 0.014703f, 0.019621f, 0.007581f, 0.004088f, 0.001672f, 0.003693f, 0.018593f, -0.013106f, 0.026301f, -0.016893f, -0.017275f, 0.021095f, 0.009343f, -0.033722f, 0.014837f, 0.008795f, 0.010765f, 0.022483f, 0.011040f, 0.016778f, -0.001096f, 0.009196f, -0.005269f, - 0.014372f, 0.003756f, 0.003255f, 0.009492f, -0.018850f, -0.010275f, -0.005610f, 0.012269f, 0.005572f, 0.004430f, 0.009987f, 0.002877f, 0.003722f, -0.017199f, 0.000455f, 0.018720f, -0.003062f, 0.002359f, 0.002656f, 0.002471f, 0.022633f, 0.008672f, 0.030349f, 0.007007f, -0.003962f, 0.028633f, -0.024245f, -0.003111f, -0.003556f, -0.009718f, -0.001906f, 0.006077f, 0.028648f, 0.002815f, -0.005658f, -0.010897f, 0.006208f, -0.011461f, -0.004585f, -0.007336f, -0.015129f, -0.002376f, 0.004521f, 0.024328f, -0.001633f, -0.023275f, -0.006093f, -0.013923f, -0.006655f, 0.017030f, 0.014035f, 0.015963f, -0.012210f, 0.002743f, -0.013625f, -0.001990f, -0.004351f, -0.008324f, -0.004322f, -0.011462f, -0.006339f, -0.002036f, -0.004536f, -0.015081f, -0.005593f, -0.004222f, -0.002670f, -0.003296f, -0.004909f, 0.000830f, -0.002132f, -0.011824f, -0.000178f, -0.005605f, -0.003015f, -0.000836f, 0.000301f, 0.002291f, 0.000052f, 0.005561f, 0.005724f, 0.001101f, 0.001393f, -0.003657f, -0.002914f, -0.000705f, -0.003608f, 0.005704f, 0.003733f, 0.005372f, 0.005356f, 0.002309f, 0.007325f, 0.004756f, 0.002192f, 0.003405f, - -0.000463f, -0.002594f, 0.005335f, 0.007169f, -0.017501f, -0.027163f, -0.009708f, -0.026745f, 0.019228f, -0.022830f, -0.016676f, -0.013475f, 0.012181f, 0.030446f, -0.030891f, -0.011063f, -0.034823f, 0.009925f, 0.004945f, 0.003202f, -0.009951f, 0.002652f, 0.039364f, -0.020631f, -0.003377f, 0.014805f, 0.010237f, 0.007709f, 0.013897f, 0.009131f, -0.012849f, -0.021913f, -0.004005f, -0.012171f, -0.016409f, -0.020238f, 0.000398f, -0.004781f, 0.005040f, 0.025887f, 0.016514f, -0.014660f, -0.007804f, -0.001710f, -0.007458f, 0.006278f, 0.049452f, -0.016841f, 0.034519f, 0.010709f, 0.005864f, -0.002339f, -0.005509f, 0.005744f, -0.018839f, 0.008969f, 0.026884f, 0.001051f, 0.004356f, 0.021373f, 0.013998f, 0.008219f, -0.018018f, 0.015047f, -0.010715f, -0.016204f, -0.043537f, -0.013810f, 0.028406f, -0.016196f, 0.007417f, -0.030779f, 0.022038f, -0.011641f, -0.012023f, 0.019106f, -0.030530f, -0.022707f, 0.034740f, -0.024790f, -0.023197f, 0.013832f, -0.015891f, 0.003152f, 0.000126f, 0.009853f, -0.025031f, 0.007829f, 0.000728f, 0.024969f, -0.018563f, 0.006155f, -0.002576f, -0.014220f, 0.018627f, 0.003706f, - -0.015379f, -0.011253f, -0.010575f, 0.001586f, 0.000027f, -0.007823f, 0.000274f, 0.009642f, -0.000746f, 0.006823f, 0.007785f, 0.006090f, -0.013845f, 0.007698f, 0.007148f, 0.011135f, -0.000220f, 0.000796f, -0.010054f, -0.004067f, -0.004919f, -0.005269f, 0.002396f, -0.001188f, 0.006530f, -0.009220f, -0.005747f, 0.003453f, -0.008847f, -0.007520f, 0.003223f, -0.019716f, -0.014699f, -0.002000f, 0.022412f, -0.010623f, 0.039396f, 0.036696f, 0.007187f, 0.011746f, -0.021347f, 0.002628f, -0.017296f, 0.027536f, -0.005562f, 0.008098f, -0.013212f, -0.008541f, 0.004633f, 0.003687f, -0.012698f, 0.021082f, -0.006039f, 0.004438f, 0.007808f, -0.013882f, 0.005162f, -0.017705f, -0.000003f, 0.009983f, 0.011945f, 0.000218f, 0.015814f, 0.019999f, -0.001595f, -0.037665f, -0.006424f, -0.011205f, 0.026807f, -0.022797f, -0.028321f, -0.020220f, -0.013580f, 0.003820f, -0.016101f, -0.012660f, -0.008162f, -0.002418f, 0.004835f, -0.055211f, 0.034674f, 0.027012f, 0.039545f, -0.012727f, 0.006243f, 0.026461f, -0.025541f, -0.023670f, 0.004528f, 0.017239f, 0.011276f, -0.003123f, 0.005217f, -0.014058f, -0.016732f, -0.021319f, - -0.006371f, 0.073144f, 0.005738f, -0.040767f, -0.007428f, -0.022407f, 0.013813f, 0.010800f, -0.025354f, 0.005239f, -0.007907f, 0.001919f, -0.012611f, 0.015515f, 0.015796f, -0.002551f, -0.008308f, -0.009788f, -0.032115f, 0.009445f, 0.004942f, -0.001463f, 0.012972f, -0.006549f, 0.001891f, 0.004934f, -0.015364f, 0.005616f, 0.008818f, 0.020724f, 0.010883f, 0.001113f, -0.018236f, -0.000065f, 0.016161f, 0.000763f, -0.000266f, 0.012079f, -0.000017f, 0.003989f, 0.011824f, 0.010048f, -0.002164f, 0.005402f, 0.009947f, 0.009250f, -0.004829f, 0.003921f, 0.011985f, 0.014858f, 0.010817f, -0.000568f, -0.008261f, -0.002049f, 0.000001f, 0.009200f, -0.000385f, -0.002965f, 0.000267f, 0.003205f, -0.006303f, 0.003219f, 0.005475f, -0.006044f, 0.003350f, -0.010592f, -0.020973f, -0.040481f, 0.003270f, -0.033818f, 0.015928f, 0.005453f, -0.027221f, 0.015353f, 0.017664f, 0.024624f, 0.007121f, 0.009731f, -0.028251f, -0.000578f, -0.005635f, 0.026299f, 0.012241f, 0.001148f, 0.024599f, 0.027398f, -0.003304f, -0.013145f, 0.003130f, 0.033788f, -0.022015f, -0.017457f, 0.017416f, 0.009494f, -0.022395f, -0.004997f, - -0.020723f, 0.038641f, -0.033007f, 0.009129f, 0.020558f, -0.012487f, 0.018894f, 0.006763f, -0.009442f, -0.010081f, -0.010162f, -0.015805f, 0.021631f, 0.029105f, 0.005805f, -0.022445f, 0.002303f, -0.024786f, -0.009440f, 0.015997f, -0.003083f, -0.012367f, -0.009045f, 0.004023f, -0.032901f, 0.000879f, -0.003480f, -0.019078f, 0.025636f, -0.025412f, -0.001743f, -0.005970f, -0.018742f, 0.019666f, -0.001608f, 0.011305f, -0.009553f, -0.002123f, -0.001165f, -0.012161f, 0.009186f, -0.011224f, -0.002090f, -0.011058f, 0.029645f, 0.012561f, -0.035297f, -0.007950f, -0.058134f, 0.033314f, -0.000137f, -0.026416f, 0.023440f, 0.002300f, 0.003440f, 0.008345f, 0.000380f, 0.013209f, 0.016417f, 0.003452f, -0.004303f, 0.008795f, 0.017658f, -0.010388f, -0.006268f, 0.006897f, 0.002530f, 0.004069f, 0.005182f, 0.008678f, 0.012028f, -0.008173f, 0.006269f, 0.003504f, -0.009548f, -0.009031f, 0.007635f, 0.001279f, -0.001001f, -0.006694f, -0.005798f, -0.010730f, 0.010294f, 0.010304f, 0.001785f, -0.007285f, -0.021923f, 0.000134f, 0.001972f, 0.006798f, -0.014081f, 0.001206f, 0.011130f, -0.006447f, 0.012879f, 0.005470f, - -0.000851f, 0.003221f, 0.007005f, 0.000257f, 0.002547f, 0.003523f, 0.008610f, 0.035430f, 0.001335f, -0.026976f, -0.011596f, 0.015933f, 0.025807f, 0.027659f, 0.000994f, -0.006509f, 0.038888f, 0.016915f, 0.043222f, 0.005250f, 0.003665f, -0.020842f, -0.008572f, -0.012370f, 0.011530f, 0.006229f, 0.023376f, -0.026822f, 0.001810f, -0.015980f, 0.014338f, -0.023257f, 0.008820f, 0.025681f, -0.003876f, -0.000821f, -0.013445f, 0.003598f, -0.013533f, -0.046232f, 0.006335f, -0.007152f, 0.003202f, -0.020684f, -0.004546f, 0.017977f, 0.034859f, -0.003675f, -0.012677f, 0.020239f, 0.009528f, 0.004892f, 0.023991f, 0.008305f, -0.012833f, -0.006182f, 0.015483f, -0.002185f, 0.014131f, -0.016932f, -0.015066f, 0.005178f, -0.014159f, -0.027130f, -0.012538f, -0.030892f, -0.006905f, 0.010367f, -0.024258f, -0.003508f, -0.027859f, -0.012201f, -0.000214f, 0.010935f, -0.033197f, 0.014502f, 0.002451f, -0.019755f, 0.024717f, -0.008824f, 0.006539f, 0.043823f, 0.049616f, 0.003185f, 0.017443f, 0.036288f, 0.043393f, 0.043074f, -0.004254f, -0.028719f, -0.044031f, -0.016003f, -0.029194f, 0.027566f, -0.005942f, -0.012999f, - 0.007049f, -0.000707f, 0.003003f, -0.000515f, -0.013054f, 0.014011f, 0.003950f, 0.005262f, 0.001010f, 0.018944f, -0.010600f, -0.000185f, -0.005822f, 0.013153f, -0.012197f, -0.005166f, -0.001300f, 0.018719f, -0.004879f, 0.011323f, 0.015412f, -0.014114f, -0.003036f, -0.005938f, -0.016026f, -0.006428f, -0.003678f, 0.006970f, 0.000548f, 0.021942f, 0.005937f, 0.014875f, -0.001409f, -0.014027f, 0.003939f, 0.000437f, 0.059299f, 0.068596f, 0.003307f, 0.022153f, 0.020675f, -0.002620f, -0.049437f, -0.001043f, -0.002252f, -0.018389f, 0.013587f, 0.013114f, -0.027037f, 0.014834f, 0.018457f, 0.003348f, -0.007401f, 0.010429f, -0.007110f, 0.035050f, -0.006251f, -0.016052f, -0.000050f, 0.008141f, -0.003553f, -0.002068f, -0.000899f, -0.055260f, 0.015747f, -0.001044f, -0.038600f, -0.015679f, 0.006362f, -0.003392f, -0.026388f, 0.009284f, -0.031094f, -0.002580f, 0.002768f, -0.049272f, -0.009113f, 0.021438f, -0.016142f, 0.002511f, 0.030954f, 0.019333f, 0.023621f, 0.007636f, -0.013699f, -0.022907f, 0.023510f, -0.012062f, 0.013063f, -0.021754f, -0.011715f, 0.015974f, 0.026440f, 0.004117f, 0.031722f, -0.021220f, - 0.027413f, -0.023195f, -0.028423f, -0.019922f, 0.027324f, 0.029061f, -0.026885f, 0.014010f, -0.073825f, -0.006506f, 0.021401f, 0.007061f, -0.011778f, -0.029109f, 0.013280f, -0.041231f, 0.006463f, -0.021147f, 0.019432f, -0.031786f, -0.020652f, 0.032339f, 0.000503f, 0.016377f, 0.003430f, 0.014310f, -0.007441f, 0.006060f, -0.003854f, -0.023741f, -0.004558f, -0.010933f, 0.007254f, -0.007475f, 0.004052f, 0.001225f, 0.003780f, 0.002202f, -0.005497f, -0.007014f, 0.000806f, -0.014906f, 0.005210f, 0.004604f, 0.008515f, -0.009437f, 0.008456f, 0.008364f, 0.005109f, 0.007242f, 0.004900f, -0.010141f, 0.000902f, 0.005397f, -0.007923f, 0.014290f, -0.001464f, -0.005084f, -0.008190f, 0.000260f, 0.001044f, 0.006988f, -0.005287f, 0.006651f, -0.005114f, 0.015039f, 0.006255f, -0.012026f, -0.003424f, -0.002720f, -0.006037f, -0.004851f, -0.053983f, 0.003973f, 0.066842f, -0.045189f, -0.004228f, -0.003924f, 0.003571f, -0.017883f, 0.008554f, -0.028510f, -0.029167f, -0.009637f, -0.007953f, 0.007049f, -0.007324f, 0.015199f, -0.021860f, 0.000715f, 0.043004f, -0.035239f, -0.031072f, -0.007551f, 0.037634f, 0.005244f, - -0.047079f, 0.020038f, -0.017457f, -0.020162f, 0.004701f, 0.064724f, -0.036402f, -0.020323f, 0.046107f, 0.034116f, 0.002989f, -0.019081f, 0.001285f, -0.007110f, -0.014617f, 0.013165f, 0.012058f, -0.007872f, -0.037328f, 0.047819f, 0.022491f, 0.009028f, -0.050823f, -0.007812f, 0.015815f, 0.017565f, -0.006305f, 0.026708f, -0.004297f, 0.009064f, -0.011639f, -0.030654f, 0.019976f, -0.021881f, 0.013127f, 0.006771f, -0.026821f, 0.050663f, 0.007814f, 0.036478f, 0.036619f, 0.006504f, -0.055050f, -0.010589f, 0.000537f, -0.021892f, -0.011079f, 0.002065f, -0.001744f, 0.023901f, 0.044969f, -0.013006f, -0.004387f, -0.019851f, -0.008852f, 0.018670f, -0.012599f, 0.010847f, 0.033436f, -0.029232f, 0.033234f, -0.006533f, 0.009994f, -0.012638f, -0.006769f, -0.010609f, 0.001443f, 0.006203f, 0.007339f, -0.005560f, 0.000186f, 0.007584f, 0.004324f, 0.017566f, 0.008246f, -0.008865f, 0.000756f, 0.001603f, 0.016026f, -0.008878f, 0.004665f, 0.007404f, 0.002501f, -0.000624f, 0.000568f, -0.020897f, 0.010272f, -0.007691f, 0.010057f, 0.013114f, 0.001763f, -0.002117f, 0.006671f, -0.000684f, 0.005107f, 0.001738f, - -0.002175f, -0.007716f, -0.007850f, 0.015585f, 0.002666f, -0.003643f, 0.004376f, -0.009695f, -0.001824f, 0.015890f, 0.020844f, 0.002878f, -0.019186f, -0.096028f, 0.006308f, -0.025025f, 0.003311f, 0.048140f, 0.004594f, -0.009231f, 0.008763f, 0.001907f, -0.032625f, -0.035157f, -0.031720f, -0.030392f, 0.039621f, -0.007878f, 0.047291f, 0.004259f, -0.044680f, -0.001508f, 0.004927f, 0.038341f, 0.007536f, -0.006120f, -0.007610f, 0.011001f, -0.024060f, -0.009149f, 0.042331f, -0.008561f, -0.054976f, -0.041919f, 0.025092f, -0.005385f, -0.011428f, 0.012712f, -0.003946f, -0.028245f, 0.008539f, 0.016715f, 0.038116f, -0.007599f, -0.031643f, 0.000517f, -0.039909f, 0.015441f, 0.045179f, -0.007145f, -0.055450f, 0.017546f, -0.000635f, 0.003211f, 0.013366f, -0.017373f, 0.034127f, 0.002656f, -0.023022f, 0.018000f, -0.012464f, -0.007608f, 0.048766f, -0.024881f, -0.008386f, -0.008100f, 0.030727f, 0.012448f, -0.053935f, 0.027468f, -0.043462f, -0.010269f, -0.023447f, 0.005710f, -0.014297f, -0.013076f, -0.004481f, 0.024878f, -0.008043f, -0.015160f, 0.029327f, -0.016987f, 0.030107f, -0.000050f, -0.015885f, -0.009458f, - 0.007504f, 0.008396f, 0.005983f, -0.017977f, -0.005965f, 0.004561f, -0.000989f, -0.011718f, 0.000291f, 0.011282f, 0.017211f, 0.007280f, 0.008872f, 0.001525f, 0.016925f, -0.009438f, 0.005526f, 0.013481f, -0.005029f, 0.001804f, 0.005495f, -0.003211f, 0.002719f, 0.005421f, -0.016490f, 0.014111f, 0.006021f, -0.016516f, -0.013580f, 0.001102f, -0.019512f, 0.001842f, -0.014354f, 0.018829f, -0.033710f, 0.000065f, -0.007057f, 0.003699f, -0.008693f, 0.010689f, -0.005519f, 0.005055f, 0.003909f, -0.046917f, 0.009606f, 0.077449f, 0.050455f, 0.023073f, -0.038431f, 0.028793f, 0.036417f, 0.053873f, 0.026026f, 0.006362f, 0.001917f, 0.033749f, 0.058271f, -0.013155f, -0.007094f, 0.032992f, -0.065228f, 0.023735f, 0.058210f, -0.012073f, -0.020150f, 0.015104f, 0.045202f, 0.036393f, -0.024320f, -0.041692f, -0.002435f, 0.020968f, -0.007046f, 0.005050f, 0.000693f, 0.048894f, -0.027896f, 0.031323f, 0.047329f, -0.018931f, -0.005688f, 0.033393f, -0.004968f, 0.117090f, -0.049061f, 0.021085f, 0.080189f, -0.046148f, 0.015175f, 0.005368f, -0.064921f, -0.002011f, 0.012191f, -0.028648f, 0.063620f, 0.004816f, - -0.008658f, 0.004952f, -0.026358f, 0.087146f, 0.024117f, -0.069833f, 0.067483f, -0.028158f, 0.002598f, 0.020691f, 0.025135f, 0.044737f, 0.021918f, -0.012069f, -0.043543f, -0.058718f, -0.021925f, -0.023528f, -0.003906f, -0.018008f, 0.037061f, -0.022442f, -0.038793f, 0.004378f, 0.010902f, 0.007951f, 0.014332f, -0.022013f, -0.021321f, -0.013010f, -0.014044f, -0.046272f, -0.019400f, -0.015733f, -0.031809f, -0.015340f, 0.011626f, -0.013566f, -0.029807f, -0.001398f, 0.011848f, 0.020183f, -0.004550f, 0.009519f, 0.022138f, -0.001217f, -0.014687f, -0.000878f, -0.008821f, 0.012260f, 0.017716f, -0.024488f, 0.021814f, -0.012662f, 0.000504f, 0.003294f, -0.011146f, 0.022734f, 0.009005f, -0.031803f, 0.019874f, 0.003034f, -0.011052f, 0.023590f, -0.026496f, 0.010803f, -0.004721f, 0.011565f, -0.006086f, -0.007381f, 0.004780f, -0.004313f, -0.002392f, 0.008349f, -0.004505f, -0.018189f, 0.008828f, -0.001627f, 0.005939f, -0.000728f, 0.015669f, 0.019182f, -0.090132f, 0.052504f, 0.002349f, 0.031745f, 0.052255f, -0.086391f, 0.019715f, 0.044490f, 0.010034f, 0.033202f, -0.033321f, 0.036549f, 0.010609f, -0.033856f, - 0.000455f, -0.021331f, -0.063323f, 0.034747f, 0.019661f, 0.057879f, -0.032062f, -0.042365f, -0.014877f, 0.013595f, -0.008875f, -0.071716f, -0.035473f, 0.022079f, -0.005426f, 0.010759f, -0.030358f, -0.009359f, 0.023788f, -0.020198f, -0.010183f, -0.030599f, -0.007261f, 0.011188f, -0.034029f, 0.003612f, -0.074216f, -0.060957f, 0.018750f, -0.063408f, 0.005416f, -0.066339f, -0.046643f, -0.031981f, 0.031111f, 0.062008f, 0.076160f, -0.018006f, 0.033772f, 0.041410f, 0.019891f, 0.017989f, -0.029744f, 0.084991f, 0.086437f, -0.058774f, 0.058863f, -0.046223f, 0.029542f, 0.061008f, 0.057721f, 0.070685f, 0.084048f, 0.059814f, -0.067174f, -0.047477f, -0.000662f, 0.001790f, 0.025178f, -0.015835f, -0.013047f, -0.040024f, -0.022423f, -0.059432f, 0.012923f, 0.050160f, -0.020369f, 0.012409f, 0.052050f, 0.024763f, -0.035930f, 0.040283f, -0.002639f, 0.014354f, -0.004094f, -0.006915f, 0.011413f, -0.012444f, 0.017590f, 0.015183f, -0.013490f, -0.015923f, 0.015156f, -0.010785f, 0.000368f, 0.000685f, -0.001437f, 0.004588f, 0.001342f, -0.021256f, 0.019812f, -0.008893f, 0.009379f, 0.011710f, -0.008153f, 0.012599f, - -0.015516f, -0.011008f, 0.009980f, -0.012067f, -0.016022f, -0.006757f, 0.006108f, -0.005960f, 0.003725f, -0.014074f, 0.000306f, 0.005525f, 0.012982f, 0.020016f, -0.004897f, 0.011394f, -0.013288f, 0.000276f, -0.002643f, 0.006258f, 0.004341f, -0.000906f, -0.010338f, 0.111522f, -0.081633f, -0.041530f, 0.043969f, -0.026173f, 0.042001f, -0.032746f, -0.036535f, 0.012334f, -0.086337f, -0.003908f, 0.058034f, -0.014015f, 0.029822f, -0.049520f, -0.012183f, -0.019556f, 0.001955f, 0.061911f, 0.018712f, 0.013754f, -0.011065f, 0.033980f, 0.010920f, 0.084589f, 0.020796f, 0.049381f, 0.003501f, -0.038630f, -0.036538f, 0.049216f, -0.023956f, 0.022753f, -0.000495f, -0.063544f, 0.045786f, -0.056619f, 0.109911f, -0.081964f, 0.050003f, 0.044769f, -0.047074f, -0.039566f, -0.029237f, 0.040578f, -0.003127f, 0.042465f, -0.000564f, 0.005518f, -0.075201f, -0.040423f, 0.017459f, -0.036978f, 0.012200f, -0.022563f, 0.022044f, 0.012507f, 0.057695f, -0.034345f, -0.011858f, -0.014670f, -0.028345f, 0.078237f, 0.014445f, 0.007327f, -0.072952f, -0.023658f, 0.039162f, 0.023098f, 0.024923f, 0.067754f, 0.043339f, 0.059907f, - 0.069140f, -0.002072f, 0.030585f, -0.028835f, 0.091980f, 0.006871f, -0.015258f, 0.033482f, -0.007930f, 0.070573f, 0.001213f, -0.014287f, -0.014661f, 0.008397f, 0.049593f, -0.037742f, 0.025582f, -0.012063f, -0.004160f, 0.014663f, 0.009790f, 0.019256f, -0.012234f, 0.012505f, 0.023091f, -0.006175f, -0.008926f, 0.015611f, -0.002669f, -0.002557f, -0.001887f, 0.004122f, 0.002441f, 0.007451f, -0.016992f, 0.021985f, -0.013163f, -0.007329f, -0.003719f, 0.013387f, -0.019235f, 0.001796f, -0.013818f, 0.018336f, 0.033289f, -0.011345f, -0.009441f, -0.004604f, 0.022789f, 0.011139f, 0.023804f, -0.002101f, -0.014160f, 0.010799f, 0.011311f, -0.003625f, 0.011194f, 0.008722f, -0.032844f, 0.004854f, 0.037070f, -0.005206f, -0.168332f, 0.117026f, -0.072522f, -0.050716f, 0.001302f, 0.024060f, 0.030278f, 0.005500f, -0.026871f, 0.091133f, 0.046283f, 0.012791f, -0.045478f, 0.029951f, -0.001429f, 0.034044f, -0.043405f, -0.029999f, 0.023437f, 0.068178f, -0.077927f, 0.003293f, 0.025459f, 0.008405f, -0.019051f, -0.011438f, -0.009663f, 0.003250f, -0.003787f, 0.017750f, 0.086023f, 0.005655f, -0.038601f, 0.057857f, - -0.013279f, -0.055672f, -0.071795f, 0.068706f, 0.022637f, -0.009386f, 0.025757f, 0.015995f, 0.057275f, -0.077281f, -0.007974f, -0.039231f, -0.010952f, 0.044409f, -0.032388f, 0.017399f, -0.037377f, 0.018313f, 0.118579f, 0.009107f, -0.067465f, -0.075868f, -0.004427f, 0.036360f, 0.035811f, -0.030325f, 0.007640f, 0.057730f, -0.023892f, -0.111334f, 0.063853f, -0.038298f, -0.063110f, 0.027972f, 0.106018f, -0.072910f, 0.053576f, 0.073843f, 0.025728f, -0.063714f, -0.052967f, -0.032688f, 0.026918f, 0.023179f, -0.021709f, 0.066287f, 0.032660f, -0.004024f, -0.001513f, 0.004103f, -0.054834f, -0.020968f, -0.038676f, 0.020254f, 0.018285f, 0.013263f, 0.018486f, 0.013675f, 0.041191f, -0.020241f, -0.009431f, 0.007917f, 0.000687f, -0.031326f, 0.027709f, -0.001094f, 0.017607f, -0.007761f, 0.013440f, -0.020148f, -0.005553f, -0.012120f, 0.019822f, 0.003715f, 0.004659f, 0.000617f, 0.012279f, 0.029943f, -0.011021f, -0.056964f, 0.005513f, -0.028103f, -0.004624f, 0.017084f, -0.023215f, -0.015657f, 0.033363f, -0.030283f, -0.005745f, 0.000263f, 0.016607f, -0.032438f, 0.003411f, 0.097262f, 0.031185f, 0.007031f, - -0.007705f, 0.015941f, 0.026572f, -0.008043f, 0.012067f, -0.014016f, -0.000756f, -0.010948f, 0.044769f, -0.050318f, -0.006339f, 0.031065f, -0.071363f, 0.023509f, -0.017881f, 0.005943f, -0.008897f, -0.019193f, 0.012034f, -0.004862f, -0.029426f, 0.078122f, -0.059772f, -0.016044f, 0.054428f, -0.034678f, -0.006004f, -0.010530f, 0.011505f, 0.055047f, 0.003635f, -0.052528f, 0.072214f, -0.038749f, 0.025348f, 0.045963f, 0.019621f, -0.016364f, 0.003427f, -0.039420f, 0.009187f, -0.023648f, -0.019643f, 0.098098f, -0.023249f, -0.038304f, 0.012119f, -0.017585f, 0.022576f, -0.014588f, 0.024847f, 0.063321f, -0.035090f, 0.021341f, 0.047358f, -0.055790f, 0.025238f, 0.031234f, 0.013450f, 0.038950f, -0.044329f, -0.010963f, 0.066466f, -0.045706f, -0.010780f, 0.019710f, -0.019343f, 0.064531f, -0.064126f, 0.011369f, 0.022324f, -0.028794f, 0.021699f, 0.025016f, -0.061098f, 0.022110f, 0.050994f, 0.000011f, -0.016105f, -0.001864f, 0.032591f, -0.006285f, -0.057412f, 0.046766f, 0.021311f, -0.024390f, 0.008869f, -0.013181f, 0.019891f, -0.007413f, -0.026031f, 0.030523f, 0.001065f, -0.005929f, -0.022710f, 0.021393f, - 0.003350f, -0.028871f, 0.009930f, 0.020344f, -0.004682f, -0.009043f, 0.003713f, 0.018858f, -0.003302f, -0.018352f, 0.018784f, 0.013299f, 0.001770f, -0.000344f, 0.015610f, 0.003741f, 0.005091f, -0.021912f, 0.028046f, -0.015144f, 0.029953f, -0.054583f, -0.147069f, -0.231299f, 0.021111f, 0.221556f, 0.018314f, 0.501569f, 0.517857f, 0.257846f, 0.542173f, 0.361620f, -0.074732f, -0.007583f, -0.118933f, -0.434827f, -0.381559f, -0.235791f, -0.444094f, -0.347565f, -0.100713f, -0.217638f, -0.182043f, 0.065083f, 0.109843f, -0.052464f, 0.029157f, 0.098123f, -0.074614f, -0.043488f, 0.138203f, 0.122750f, 0.014709f, 0.137171f, 0.233753f, 0.078516f, 0.169330f, 0.319515f, 0.153910f, 0.081558f, 0.286497f, 0.239543f, 0.032713f, 0.172283f, 0.335669f, 0.067101f, 0.079768f, 0.271267f, 0.117491f, -0.028380f, 0.192187f, 0.181372f, -0.015836f, 0.160264f, 0.206745f, -0.002490f, -0.149625f, -0.069278f, -0.352904f, -0.583719f, -0.518941f, -0.553496f, -0.845752f, -0.759688f, -0.710741f, -0.864744f, -0.840053f, -0.689108f, -0.621188f, -0.558855f, -0.323137f, -0.123796f, 0.110477f, 0.234127f, 0.447637f, 0.666939f, - 0.728107f, 0.810900f, 1.057906f, 1.043998f, 0.821686f, 0.898741f, 0.794792f, 0.329442f, 0.358991f, 0.305142f, -0.011874f, -0.048917f, 0.089148f, -0.011394f, -0.135376f, 0.018563f, 0.092716f, -0.087557f, -0.034093f, 0.082008f, -0.041823f, -0.172260f, -0.056148f, -0.045886f, -0.249629f, -0.176687f, -0.046796f, -0.195637f, -0.221595f, -0.014388f, -0.077862f, -0.224190f, -0.107117f, -0.100868f, -0.315508f, -0.299167f, -0.270911f, -0.489372f, -0.529035f, -0.441027f, -0.470369f, -0.507699f, -0.363303f, -0.309743f, -0.268534f, -0.194147f, -0.103861f, -0.046080f, -0.011384f, 0.042471f, 0.175745f, 0.239379f, 0.368553f, 0.600005f, 0.678490f, 0.750495f, 0.876548f, 0.856700f, 0.755161f, 0.643957f, 0.452968f, 0.197610f, 0.053316f, -0.040684f, -0.138055f, -0.162889f, -0.159486f, -0.161158f, -0.164436f, -0.152670f, -0.136756f, -0.147401f, -0.150168f, -0.140723f, -0.150471f, -0.164408f, -0.153986f, -0.143525f, -0.131423f, -0.094664f, -0.043980f, -0.010207f, 0.002737f, 0.003902f, 0.000883f} - }, - { - {0.003031f, 0.012017f, -0.005986f, 0.003317f, -0.001243f, 0.000684f, 0.000563f, -0.004865f, -0.005516f, 0.003597f, -0.001010f, -0.004436f, -0.005656f, -0.003495f, 0.004980f, -0.000533f, 0.006685f, 0.001392f, -0.008487f, -0.008776f, -0.006224f, 0.002543f, 0.002165f, 0.004529f, -0.000681f, 0.005185f, -0.003977f, -0.000750f, -0.009178f, -0.001426f, -0.001713f, 0.001879f, 0.003451f, 0.003449f, 0.006776f, -0.003390f, -0.004539f, 0.003651f, 0.002068f, -0.004440f, -0.004514f, 0.000195f, 0.003152f, 0.001494f, 0.007524f, -0.002881f, -0.002386f, 0.008511f, 0.002607f, 0.015971f, 0.006796f, -0.004508f, -0.000154f, -0.009864f, 0.000184f, -0.011241f, -0.000740f, -0.004219f, 0.007752f, 0.000796f, 0.004161f, 0.005656f, 0.003073f, 0.005422f, 0.003622f, 0.000750f, -0.009413f, -0.001070f, -0.004718f, 0.006466f, 0.009473f, -0.006668f, -0.004730f, -0.002881f, -0.003835f, -0.005039f, -0.008070f, -0.001857f, 0.002420f, -0.004781f, -0.003933f, -0.001700f, -0.006634f, 0.000746f, -0.001334f, -0.004503f, 0.001431f, 0.000215f, -0.000026f, -0.002229f, 0.000396f, 0.000393f, 0.002467f, -0.000709f, 0.001592f, -0.000843f, - 0.001152f, -0.000344f, -0.001490f, 0.000383f, 0.001939f, 0.000304f, -0.001738f, -0.001813f, -0.000183f, 0.003280f, 0.000767f, -0.000664f, 0.000533f, -0.000995f, -0.018872f, -0.020175f, -0.001603f, -0.005786f, 0.000777f, -0.004378f, -0.001189f, 0.011226f, -0.002007f, 0.006035f, -0.002774f, -0.005396f, -0.007458f, 0.001370f, -0.001542f, -0.008908f, 0.010269f, 0.003085f, 0.000706f, 0.005474f, 0.005223f, 0.008467f, 0.005965f, -0.000562f, -0.006300f, 0.005882f, 0.001371f, -0.008493f, -0.003752f, -0.003830f, -0.002544f, 0.007592f, -0.002600f, -0.012952f, -0.004386f, -0.001481f, 0.002705f, -0.004026f, -0.008427f, 0.000275f, -0.000822f, 0.009790f, 0.001451f, -0.000079f, 0.003577f, -0.000225f, 0.013210f, -0.002279f, 0.001216f, -0.002920f, -0.005241f, 0.000005f, 0.005673f, 0.002565f, 0.001548f, 0.005361f, -0.004918f, -0.008196f, -0.005862f, -0.001180f, 0.001079f, -0.001912f, 0.000235f, -0.006152f, -0.001362f, 0.003224f, -0.001962f, 0.006417f, 0.003349f, -0.000362f, 0.001191f, -0.006017f, -0.005124f, 0.009958f, 0.002263f, 0.004242f, 0.002889f, -0.001770f, -0.000585f, -0.007563f, 0.000534f, -0.004321f, - 0.001857f, -0.001473f, 0.001926f, 0.002053f, 0.005856f, -0.000608f, -0.002047f, 0.000346f, 0.001255f, 0.000785f, 0.000210f, 0.000208f, -0.001764f, -0.001387f, 0.000711f, -0.000636f, -0.001520f, 0.002381f, -0.001204f, 0.001224f, 0.001811f, -0.001713f, -0.000511f, 0.001371f, -0.000517f, 0.002457f, -0.001477f, 0.001221f, -0.001177f, -0.000854f, -0.003069f, 0.002825f, 0.013047f, -0.000722f, 0.006695f, 0.003932f, 0.008928f, 0.010940f, -0.002487f, 0.000890f, 0.006747f, 0.006649f, 0.004462f, 0.012516f, 0.002550f, -0.004110f, 0.000555f, 0.010947f, 0.003868f, 0.005160f, 0.009516f, 0.012764f, 0.008445f, -0.002923f, -0.008751f, 0.006141f, 0.004211f, -0.005094f, -0.008453f, 0.000429f, -0.004934f, 0.002221f, 0.003246f, -0.003125f, -0.004217f, 0.004214f, 0.003366f, 0.007509f, -0.005049f, -0.010340f, -0.005163f, -0.004505f, -0.006863f, -0.002434f, -0.007840f, 0.004640f, -0.010733f, 0.004551f, 0.000914f, 0.002418f, -0.004774f, 0.010183f, 0.007815f, -0.007318f, 0.009004f, 0.003312f, -0.001335f, 0.002890f, -0.006531f, -0.002166f, 0.006155f, 0.002107f, 0.002577f, 0.001529f, 0.007351f, 0.002894f, - 0.009089f, -0.004553f, -0.000553f, -0.000682f, 0.003525f, 0.005173f, -0.002104f, 0.003409f, -0.004779f, 0.002318f, 0.003189f, 0.002775f, 0.009972f, 0.000270f, 0.007440f, 0.008243f, 0.004678f, -0.007703f, -0.001466f, -0.001289f, -0.001995f, 0.000573f, 0.004221f, -0.001860f, 0.000125f, -0.000422f, 0.000477f, 0.001427f, -0.001248f, 0.001695f, 0.002907f, -0.002149f, -0.001096f, 0.002661f, 0.000090f, -0.000085f, -0.000149f, -0.001692f, 0.000685f, -0.000881f, 0.000220f, 0.002032f, 0.003500f, 0.000037f, -0.000485f, 0.001655f, 0.001348f, 0.000440f, 0.000805f, 0.000560f, 0.000851f, -0.000249f, -0.000496f, 0.001441f, 0.001894f, -0.001881f, 0.000991f, -0.000755f, 0.036080f, 0.000301f, 0.031947f, 0.002573f, 0.020234f, -0.004341f, -0.003484f, 0.005546f, -0.015104f, 0.016519f, -0.009389f, 0.011086f, 0.008168f, -0.006031f, 0.004821f, -0.000428f, 0.000612f, -0.002775f, 0.004592f, 0.006544f, 0.008090f, 0.013361f, 0.003250f, 0.004281f, -0.000525f, 0.015713f, -0.018022f, 0.000467f, -0.001386f, 0.004354f, 0.007637f, -0.009446f, 0.003617f, 0.004313f, 0.002190f, 0.006310f, 0.003383f, -0.007278f, - 0.003470f, 0.014077f, -0.002649f, 0.004336f, -0.002389f, -0.002142f, -0.000694f, -0.010038f, 0.015519f, -0.000196f, 0.001485f, 0.011671f, -0.001665f, 0.000946f, 0.014385f, -0.021106f, 0.005768f, -0.000345f, 0.006288f, 0.017175f, 0.005065f, 0.004194f, 0.005886f, -0.001799f, -0.004839f, -0.003181f, 0.004130f, 0.001624f, 0.009135f, -0.003262f, 0.007495f, 0.003590f, -0.002643f, 0.001620f, -0.006112f, -0.003851f, 0.000731f, -0.001700f, -0.008415f, -0.005227f, -0.008609f, 0.005128f, 0.007456f, -0.001952f, 0.002239f, -0.001687f, -0.005757f, -0.000154f, 0.003031f, 0.003233f, -0.010263f, -0.000328f, 0.000853f, -0.001467f, 0.000477f, -0.001995f, 0.000109f, -0.002149f, -0.004996f, 0.000010f, -0.003341f, -0.002503f, -0.004147f, 0.000288f, -0.004058f, -0.001114f, -0.003939f, -0.002807f, -0.000222f, -0.001271f, -0.002143f, -0.000097f, 0.000419f, 0.001985f, -0.002156f, -0.014399f, -0.017746f, -0.007009f, -0.002686f, -0.006613f, 0.014160f, 0.006085f, -0.011348f, 0.012647f, -0.001795f, -0.009183f, 0.002722f, 0.005521f, -0.005155f, -0.008391f, -0.007608f, -0.015975f, -0.008105f, 0.006930f, -0.010172f, -0.016222f, - 0.004549f, 0.006596f, 0.001274f, -0.005954f, 0.012139f, 0.001527f, 0.011221f, -0.000683f, -0.002628f, 0.006452f, 0.010627f, -0.015145f, -0.007266f, 0.004157f, -0.003443f, 0.003740f, -0.009964f, -0.000699f, 0.002628f, 0.003617f, -0.008514f, -0.015381f, -0.004388f, 0.004520f, -0.002660f, -0.001917f, 0.000882f, 0.005005f, -0.001580f, 0.002790f, -0.005249f, 0.008961f, -0.011787f, -0.008744f, -0.003128f, -0.008565f, -0.002638f, -0.002295f, 0.003360f, -0.006276f, 0.004698f, 0.009729f, -0.000907f, 0.002307f, 0.002547f, 0.004684f, 0.009406f, -0.003573f, -0.001890f, -0.001766f, -0.004004f, 0.009894f, -0.004086f, -0.017145f, -0.011044f, -0.007225f, 0.016426f, 0.000321f, 0.009389f, 0.004379f, 0.001353f, 0.002594f, -0.001224f, -0.000332f, 0.007862f, -0.002602f, -0.001896f, 0.002612f, -0.001479f, 0.001319f, -0.003647f, -0.002117f, 0.001731f, -0.000439f, 0.001912f, -0.000470f, 0.001089f, 0.003024f, 0.002044f, 0.002830f, -0.000078f, 0.001985f, -0.000529f, 0.002900f, 0.003033f, 0.005136f, 0.003085f, 0.004087f, 0.000856f, 0.002744f, 0.002216f, 0.001720f, 0.002309f, 0.003396f, -0.001621f, 0.000310f, - -0.000761f, -0.001377f, 0.001278f, 0.002028f, -0.004118f, -0.015590f, -0.036245f, -0.003374f, 0.002511f, 0.000396f, -0.011751f, -0.005194f, -0.013336f, -0.003427f, -0.015729f, -0.018006f, -0.014079f, -0.003252f, -0.009326f, -0.020292f, -0.012705f, 0.004220f, 0.006285f, -0.005593f, 0.012219f, 0.006778f, -0.004518f, 0.015086f, 0.003229f, 0.001266f, 0.002425f, -0.020601f, -0.000755f, 0.003456f, 0.007769f, -0.006460f, -0.005740f, 0.012311f, 0.023910f, -0.017861f, 0.006439f, -0.005237f, -0.000920f, -0.015738f, -0.001385f, -0.000154f, -0.008035f, -0.010173f, -0.007403f, -0.008650f, -0.004615f, 0.005186f, 0.017558f, -0.008173f, 0.006589f, 0.011889f, 0.010743f, -0.003597f, 0.001222f, -0.003815f, -0.003401f, -0.016154f, -0.008003f, 0.009200f, -0.005827f, 0.002019f, -0.005562f, 0.004653f, 0.002465f, -0.001756f, -0.000602f, -0.007521f, -0.006216f, 0.001450f, -0.002237f, 0.003355f, -0.019137f, -0.020225f, -0.002166f, -0.002930f, -0.008688f, -0.000013f, 0.006442f, -0.009925f, -0.007648f, -0.008457f, -0.014721f, 0.010457f, -0.001050f, -0.002172f, 0.004022f, -0.000539f, 0.003612f, 0.006915f, 0.002409f, 0.003861f, - 0.002209f, 0.005093f, -0.001487f, 0.000950f, 0.000846f, 0.001197f, 0.001701f, -0.001271f, -0.001224f, 0.000330f, 0.001592f, 0.002003f, -0.001212f, 0.001652f, -0.001777f, -0.003414f, 0.001924f, 0.001417f, -0.001329f, 0.004579f, 0.002095f, 0.000357f, 0.001794f, -0.002689f, -0.002917f, -0.000722f, -0.001522f, -0.001180f, -0.022508f, -0.004434f, -0.027103f, -0.006079f, -0.019200f, -0.002295f, 0.003625f, 0.004887f, 0.020853f, -0.013009f, 0.004671f, 0.005626f, -0.011301f, -0.005108f, 0.016782f, 0.001777f, -0.004888f, 0.002105f, -0.013801f, 0.012531f, -0.017687f, -0.005848f, 0.007905f, 0.004909f, -0.001829f, 0.003021f, -0.003482f, 0.005796f, -0.007539f, -0.013297f, 0.000921f, 0.006431f, 0.005280f, -0.010634f, 0.002963f, 0.011948f, -0.012273f, -0.015578f, 0.012431f, -0.010624f, 0.008122f, -0.007647f, 0.004539f, -0.000317f, -0.011037f, -0.014386f, -0.008841f, 0.003916f, -0.000558f, 0.005371f, -0.007497f, -0.007332f, -0.018344f, 0.009570f, -0.013144f, -0.006021f, 0.007166f, 0.016292f, -0.002097f, -0.003386f, -0.024018f, -0.018941f, -0.006295f, -0.006754f, 0.009056f, -0.002565f, -0.014063f, -0.002261f, - 0.000761f, -0.007837f, -0.001908f, -0.016824f, 0.011225f, 0.004351f, 0.014151f, 0.017256f, 0.009115f, 0.000702f, 0.007536f, 0.015392f, -0.001264f, -0.003557f, -0.001036f, -0.004716f, -0.015289f, 0.000846f, 0.001149f, 0.003290f, 0.008220f, -0.003343f, 0.001831f, -0.000016f, -0.006003f, -0.003269f, 0.005617f, 0.005377f, 0.005114f, -0.003931f, 0.001556f, 0.002112f, 0.001964f, 0.001876f, 0.002262f, 0.000730f, 0.004281f, 0.004223f, 0.002901f, -0.000868f, 0.001985f, -0.000735f, 0.001706f, 0.003045f, 0.001106f, 0.001222f, 0.000096f, -0.001065f, -0.000933f, -0.000071f, -0.002636f, -0.001244f, 0.013369f, 0.007007f, 0.038825f, 0.018783f, 0.025153f, -0.007783f, -0.000957f, -0.000420f, -0.038293f, 0.002007f, 0.016548f, -0.007593f, -0.002952f, 0.001311f, 0.024170f, -0.004098f, 0.014012f, -0.002872f, 0.013420f, 0.007354f, 0.016569f, 0.023254f, 0.003013f, 0.015523f, -0.004790f, 0.013433f, -0.001801f, 0.024885f, 0.013265f, -0.000429f, 0.014184f, 0.011427f, -0.004176f, 0.010907f, 0.006589f, 0.009416f, -0.007437f, -0.005992f, -0.020106f, -0.001246f, 0.014279f, 0.002730f, 0.001829f, -0.004699f, - -0.007514f, -0.006024f, -0.006624f, 0.035017f, -0.022523f, 0.008914f, 0.010654f, 0.006017f, 0.003037f, -0.013471f, -0.017880f, -0.004599f, -0.002659f, -0.000854f, -0.030987f, -0.015400f, -0.015928f, 0.000733f, -0.000730f, 0.009184f, -0.001016f, 0.008154f, 0.010985f, 0.019815f, 0.003644f, -0.005148f, 0.006674f, -0.012533f, 0.003413f, -0.009205f, 0.003333f, 0.007638f, 0.004335f, 0.012600f, -0.008550f, -0.009753f, 0.045469f, 0.006180f, 0.008239f, 0.005704f, 0.015420f, -0.010981f, -0.005671f, 0.009660f, -0.001152f, -0.000327f, 0.001763f, 0.003134f, 0.008887f, -0.004494f, -0.000711f, 0.001611f, 0.005100f, 0.001098f, -0.004738f, 0.008558f, 0.000283f, -0.002121f, 0.000157f, -0.001086f, -0.004667f, -0.004421f, -0.002074f, -0.004910f, -0.000060f, -0.001985f, 0.002051f, 0.006087f, -0.000627f, -0.000712f, -0.006867f, -0.001544f, 0.003309f, -0.000866f, 0.000347f, 0.000511f, 0.005300f, -0.002901f, -0.000869f, 0.001601f, 0.001955f, -0.006072f, 0.059482f, 0.006414f, 0.008850f, 0.006735f, -0.003733f, -0.024086f, 0.016261f, 0.017233f, -0.009657f, 0.007577f, 0.007715f, -0.014409f, -0.002047f, 0.014224f, - 0.008115f, -0.025411f, 0.006463f, -0.006821f, -0.013069f, -0.000137f, 0.007467f, 0.002202f, -0.000261f, -0.000291f, 0.010994f, -0.003244f, 0.006196f, -0.019704f, 0.007972f, -0.001829f, 0.007829f, 0.004727f, -0.003632f, 0.014421f, -0.019354f, -0.008095f, -0.019112f, 0.016883f, 0.007879f, 0.027391f, 0.013426f, 0.000179f, 0.005837f, -0.021734f, -0.000182f, 0.006705f, 0.007025f, 0.006986f, 0.001476f, 0.004170f, -0.005817f, 0.006569f, 0.019502f, 0.026554f, 0.011370f, -0.011637f, -0.006578f, -0.002380f, -0.005177f, 0.010099f, 0.013279f, -0.008866f, 0.007861f, 0.015011f, 0.004515f, -0.019878f, -0.039931f, -0.019358f, 0.008030f, 0.017855f, -0.007517f, 0.005632f, -0.001499f, -0.003274f, -0.000128f, 0.018645f, 0.003358f, -0.014628f, 0.024695f, 0.011605f, -0.028602f, 0.001779f, -0.003426f, -0.008742f, -0.003192f, -0.003872f, -0.000002f, 0.010411f, 0.004192f, -0.007215f, -0.004078f, 0.006386f, 0.010691f, -0.004217f, 0.008142f, 0.002639f, -0.006620f, -0.001165f, 0.001097f, 0.000835f, -0.001207f, 0.001156f, -0.003257f, -0.001815f, 0.002418f, 0.001280f, -0.002880f, -0.002533f, 0.000249f, -0.001395f, - -0.004807f, 0.003682f, -0.001629f, -0.001880f, 0.001459f, 0.005762f, -0.005375f, -0.007937f, 0.000024f, -0.000546f, -0.012572f, -0.001459f, 0.003260f, 0.000741f, -0.007540f, -0.000145f, -0.002711f, 0.003236f, 0.001924f, 0.004795f, 0.003281f, -0.036389f, 0.010853f, 0.017442f, -0.019643f, 0.012752f, 0.021206f, -0.051833f, 0.011112f, 0.002358f, 0.011294f, -0.019243f, 0.029244f, -0.040862f, -0.000474f, -0.002788f, -0.003473f, -0.004054f, -0.012054f, -0.015348f, -0.002661f, 0.014854f, 0.001388f, 0.000568f, -0.007943f, 0.010508f, -0.001736f, -0.004897f, 0.007680f, 0.018308f, -0.012149f, 0.013256f, -0.002501f, 0.008122f, 0.003860f, 0.012469f, 0.018718f, -0.004164f, 0.004835f, -0.024207f, -0.012345f, -0.004839f, -0.009364f, -0.022022f, 0.002271f, -0.007883f, -0.014583f, 0.021563f, -0.020128f, -0.006446f, -0.009557f, -0.010587f, 0.014462f, -0.016325f, 0.009153f, -0.005549f, 0.014864f, -0.007657f, 0.016290f, -0.021409f, -0.006280f, 0.003066f, 0.019753f, -0.034716f, -0.013321f, 0.001593f, -0.000140f, -0.005919f, 0.013797f, -0.017843f, -0.035739f, 0.008048f, -0.031404f, 0.016179f, -0.011333f, 0.000443f, - -0.032830f, -0.012431f, 0.035019f, 0.020268f, -0.026691f, -0.021800f, -0.018971f, 0.001465f, 0.010461f, -0.004251f, -0.012082f, 0.023270f, 0.007944f, -0.003651f, -0.005232f, -0.008220f, -0.002044f, 0.009368f, -0.008664f, 0.010046f, -0.001413f, -0.006294f, 0.000936f, -0.004714f, 0.003244f, 0.008559f, -0.005165f, 0.004022f, 0.005664f, 0.004647f, -0.001040f, 0.009894f, -0.009343f, 0.009369f, -0.002872f, 0.008297f, -0.010824f, -0.005001f, 0.001203f, 0.001128f, 0.010491f, 0.004101f, 0.006154f, -0.003217f, -0.006607f, 0.004049f, -0.012375f, -0.000706f, -0.026962f, -0.011574f, 0.033968f, 0.001429f, -0.028010f, 0.026366f, -0.012342f, 0.001746f, -0.029208f, 0.004483f, 0.011586f, -0.025781f, -0.006290f, -0.023043f, -0.000159f, 0.001452f, -0.007759f, -0.006410f, 0.022489f, 0.003443f, -0.015228f, 0.003802f, -0.032631f, 0.019594f, 0.031099f, -0.010076f, 0.012989f, 0.022039f, -0.001645f, -0.004526f, 0.002716f, 0.002658f, 0.012924f, 0.002184f, 0.002989f, 0.006763f, -0.018242f, -0.001336f, -0.020971f, -0.021451f, -0.008790f, 0.008986f, 0.012725f, -0.000694f, -0.025232f, 0.004951f, 0.006616f, 0.012394f, - 0.026976f, -0.027681f, 0.040483f, -0.033593f, 0.001479f, -0.006785f, -0.005822f, -0.016256f, -0.031157f, -0.042050f, -0.016307f, -0.004832f, 0.010700f, -0.003209f, 0.001737f, 0.006165f, -0.000315f, 0.029581f, 0.013995f, -0.030389f, -0.004749f, -0.000640f, 0.019369f, -0.021010f, 0.001389f, -0.042323f, 0.007912f, 0.033030f, -0.029557f, -0.011620f, 0.004170f, -0.000343f, 0.008251f, 0.046292f, 0.000677f, -0.006133f, 0.002393f, 0.023557f, -0.016030f, 0.006292f, 0.008600f, -0.003523f, -0.001734f, -0.000335f, -0.000645f, 0.010472f, -0.003458f, -0.002436f, -0.009113f, 0.015259f, -0.003340f, 0.004473f, 0.001509f, 0.002664f, 0.003787f, 0.011087f, -0.007770f, -0.002017f, 0.011745f, -0.008577f, -0.012084f, 0.009908f, 0.000444f, 0.004820f, 0.006662f, 0.003746f, 0.012144f, -0.009511f, 0.005628f, 0.006701f, -0.004264f, 0.017203f, 0.005869f, 0.010509f, 0.003815f, -0.010422f, -0.003845f, -0.001801f, -0.001862f, -0.001882f, -0.017342f, -0.035178f, 0.042048f, 0.017965f, -0.020607f, 0.027299f, 0.027314f, 0.038798f, -0.014312f, -0.013394f, 0.028316f, -0.004163f, -0.005607f, 0.009875f, 0.012588f, 0.005031f, - 0.006019f, -0.038589f, -0.004103f, 0.000124f, 0.000318f, 0.002141f, -0.004370f, 0.016377f, 0.031735f, 0.003226f, 0.002163f, -0.000528f, 0.001510f, 0.029250f, 0.007758f, -0.002047f, -0.006395f, 0.007500f, 0.006457f, -0.004573f, 0.003344f, -0.016670f, -0.003496f, 0.025438f, -0.025246f, -0.012251f, -0.021775f, 0.028421f, -0.026050f, 0.013061f, -0.010678f, 0.008369f, -0.005678f, 0.006751f, -0.020938f, 0.004800f, 0.031551f, -0.020771f, 0.001628f, -0.055106f, -0.002477f, -0.019468f, 0.001464f, -0.051436f, -0.002306f, -0.002535f, -0.015899f, -0.011056f, 0.041954f, -0.045071f, 0.007481f, -0.012192f, -0.016854f, 0.012110f, -0.015291f, -0.035216f, -0.024737f, 0.003399f, 0.001811f, 0.007247f, -0.017492f, -0.023725f, 0.013446f, 0.001113f, 0.002583f, 0.015758f, -0.026341f, 0.019665f, -0.019180f, -0.009012f, -0.008283f, 0.004642f, 0.000614f, 0.005577f, -0.003468f, -0.006759f, 0.001566f, -0.003871f, 0.005459f, 0.012205f, 0.007064f, 0.004449f, 0.003380f, 0.003249f, 0.003159f, -0.001400f, 0.013244f, 0.002441f, -0.002662f, 0.009861f, 0.010117f, 0.003725f, -0.005794f, -0.000680f, -0.008403f, 0.013179f, - 0.004592f, 0.010569f, -0.005367f, 0.010844f, 0.009642f, 0.014228f, 0.006918f, -0.004207f, -0.007656f, 0.011923f, 0.002296f, 0.010285f, 0.002206f, 0.002644f, 0.002579f, 0.002932f, 0.035269f, 0.012416f, -0.004658f, 0.007635f, -0.017667f, -0.018603f, -0.015263f, 0.034374f, -0.030702f, -0.038148f, 0.018297f, -0.035490f, 0.013192f, 0.001420f, 0.009702f, -0.015835f, -0.003815f, -0.019283f, -0.008184f, -0.014870f, 0.007212f, 0.017725f, 0.012208f, -0.028633f, 0.033382f, 0.004111f, 0.011677f, 0.003115f, 0.016086f, -0.003384f, 0.015453f, 0.003859f, -0.006871f, 0.009926f, 0.003611f, 0.013132f, 0.009005f, -0.021703f, 0.008765f, -0.006308f, 0.006160f, -0.004359f, -0.008101f, -0.006659f, -0.015270f, 0.014327f, 0.015270f, 0.016030f, -0.002969f, 0.029261f, 0.034880f, 0.014033f, 0.004579f, 0.015908f, 0.036152f, 0.017922f, 0.039436f, 0.025412f, 0.029399f, -0.031505f, -0.031792f, 0.006550f, -0.006450f, -0.008479f, 0.002483f, -0.015836f, 0.013224f, 0.009970f, 0.006217f, 0.030104f, -0.007055f, -0.019346f, -0.016279f, -0.014286f, 0.003492f, -0.006773f, -0.064477f, -0.027973f, -0.025099f, -0.009044f, - -0.013037f, -0.006697f, -0.009787f, -0.018230f, 0.000665f, -0.010928f, -0.010548f, 0.004353f, -0.010583f, -0.003244f, -0.016265f, 0.001041f, 0.000836f, -0.002482f, -0.023175f, 0.009654f, -0.000081f, 0.001208f, -0.017439f, 0.005376f, 0.006171f, 0.006837f, 0.001883f, 0.020349f, -0.013095f, -0.004852f, 0.004105f, 0.002359f, -0.001502f, 0.008487f, -0.009284f, -0.007699f, -0.001717f, 0.014510f, -0.001506f, 0.010609f, 0.011850f, -0.002369f, -0.014982f, -0.013196f, -0.001662f, 0.015157f, 0.001109f, -0.010510f, 0.001468f, -0.002147f, -0.007337f, -0.005228f, -0.002369f, 0.001074f, -0.011221f, -0.009256f, 0.028680f, 0.019479f, -0.062808f, -0.046389f, -0.014445f, -0.000606f, 0.020701f, -0.008637f, -0.001473f, -0.050009f, 0.007081f, -0.026207f, 0.018706f, -0.003668f, 0.024783f, -0.021282f, -0.005282f, -0.025253f, 0.004383f, 0.020498f, -0.009828f, 0.005929f, -0.014418f, 0.001000f, -0.033745f, -0.009456f, -0.001613f, 0.002321f, 0.025050f, 0.032458f, 0.001151f, -0.030036f, -0.021025f, -0.009803f, 0.003092f, -0.008050f, 0.009543f, -0.034525f, -0.010646f, -0.004878f, -0.008897f, -0.019483f, -0.004500f, -0.009085f, - 0.023435f, 0.033773f, 0.022949f, 0.008173f, 0.014036f, 0.014027f, -0.016336f, 0.056524f, 0.034452f, -0.044975f, -0.038655f, 0.041449f, -0.032730f, -0.019172f, 0.006484f, 0.004353f, -0.031766f, 0.030566f, 0.002071f, -0.096375f, 0.025790f, 0.060014f, -0.041674f, 0.041250f, 0.055682f, -0.018850f, -0.005692f, 0.029371f, -0.034654f, -0.023352f, 0.011662f, -0.019275f, -0.021646f, 0.024834f, -0.042059f, -0.013198f, 0.005485f, 0.000574f, 0.002465f, -0.004467f, 0.015510f, -0.011448f, 0.006669f, 0.001847f, -0.011127f, 0.021868f, 0.011456f, -0.001172f, -0.014164f, 0.016759f, -0.010748f, 0.012825f, -0.011447f, 0.015695f, 0.001727f, 0.002882f, 0.016414f, -0.013156f, -0.014197f, 0.003819f, -0.013097f, -0.008573f, -0.000588f, 0.000919f, -0.008715f, -0.016249f, 0.007496f, -0.037491f, -0.000001f, 0.016533f, -0.013647f, 0.009524f, -0.004179f, 0.004524f, -0.015495f, -0.000154f, 0.008488f, -0.007788f, 0.005557f, 0.032675f, -0.014795f, -0.014465f, 0.032666f, -0.024180f, -0.003974f, 0.026907f, -0.019597f, -0.012396f, 0.020599f, 0.012720f, 0.013509f, -0.003333f, -0.020223f, -0.016145f, 0.019014f, -0.015185f, - -0.001445f, 0.005667f, -0.028597f, 0.018589f, 0.015128f, -0.011562f, -0.009408f, -0.022295f, 0.000539f, -0.013795f, 0.019206f, -0.031307f, 0.002316f, 0.011996f, -0.001738f, -0.014898f, -0.032523f, -0.007308f, -0.014196f, -0.003165f, -0.025191f, 0.034234f, -0.033527f, 0.005845f, -0.012248f, 0.008599f, -0.047452f, 0.048802f, 0.009187f, 0.004865f, -0.019631f, 0.011113f, 0.007853f, 0.002116f, 0.004337f, -0.008739f, -0.037478f, -0.006500f, -0.016289f, -0.023993f, -0.032222f, -0.011617f, -0.008213f, -0.031929f, -0.012333f, -0.001528f, 0.021920f, 0.010120f, -0.029011f, -0.025286f, 0.015421f, -0.006679f, -0.036799f, -0.015873f, 0.008870f, 0.030117f, 0.029849f, 0.030425f, 0.048527f, -0.009430f, -0.033158f, -0.031623f, -0.002158f, 0.021298f, 0.037751f, 0.016955f, 0.007983f, -0.038756f, 0.021597f, 0.008006f, 0.036805f, 0.025583f, 0.016576f, 0.012560f, -0.000180f, 0.003167f, 0.021573f, -0.005294f, 0.001321f, 0.003724f, 0.006079f, 0.007346f, 0.006782f, 0.010374f, 0.025903f, 0.008070f, 0.001656f, 0.008834f, -0.000901f, 0.008223f, 0.002132f, 0.001371f, 0.015937f, -0.019891f, -0.014329f, -0.005405f, - 0.007005f, -0.010176f, 0.006124f, -0.004564f, 0.020076f, 0.000551f, 0.003023f, -0.010897f, -0.013676f, 0.000928f, 0.011493f, -0.011484f, -0.001712f, 0.013574f, -0.011857f, -0.000914f, 0.006006f, -0.020042f, 0.023649f, 0.012712f, -0.004828f, 0.005518f, -0.001454f, -0.000533f, -0.006374f, 0.013396f, 0.022623f, 0.061227f, -0.054004f, -0.001561f, -0.021549f, -0.028568f, -0.017149f, 0.028019f, -0.015378f, -0.016630f, 0.014299f, 0.036084f, 0.022651f, -0.027071f, 0.017436f, -0.028406f, 0.020833f, 0.001186f, -0.003268f, -0.013728f, -0.021268f, -0.017062f, 0.003521f, 0.003927f, -0.033598f, 0.021314f, 0.003437f, -0.002979f, -0.012807f, -0.014174f, 0.023729f, -0.032482f, -0.001621f, 0.035473f, 0.041551f, -0.037253f, -0.002585f, -0.007341f, -0.024266f, -0.031183f, 0.034109f, 0.007875f, 0.021648f, -0.006611f, 0.002560f, -0.002854f, 0.021549f, -0.008326f, 0.001070f, -0.026699f, 0.038349f, 0.032186f, -0.046985f, -0.057179f, -0.012255f, 0.000823f, -0.018973f, 0.002068f, -0.014131f, 0.004542f, -0.029202f, 0.030999f, -0.037513f, -0.032585f, -0.012337f, 0.005592f, 0.025690f, -0.013289f, 0.037278f, 0.004153f, - -0.013481f, -0.012564f, -0.009941f, -0.023312f, 0.022663f, 0.017264f, -0.006320f, 0.014648f, 0.011176f, -0.018167f, -0.018548f, -0.015345f, 0.028859f, 0.007955f, -0.020876f, 0.003059f, 0.008044f, 0.010201f, -0.031070f, 0.016386f, 0.012229f, 0.006454f, -0.000455f, -0.008044f, 0.003991f, -0.008844f, -0.027659f, 0.006418f, -0.003795f, -0.004269f, -0.003356f, 0.003464f, -0.008477f, -0.009750f, -0.000705f, -0.003032f, 0.013623f, -0.006536f, -0.003952f, 0.008766f, -0.003809f, -0.012132f, 0.010734f, -0.012077f, -0.004344f, -0.021652f, 0.011920f, 0.003300f, -0.003330f, 0.004916f, -0.010214f, 0.020979f, -0.001381f, 0.004378f, 0.022525f, 0.017209f, -0.006368f, -0.006362f, 0.010802f, 0.007135f, -0.007842f, 0.005421f, -0.007195f, -0.005490f, -0.001437f, 0.006186f, -0.082865f, 0.122767f, -0.084348f, -0.021576f, 0.022213f, 0.066278f, 0.053880f, -0.019938f, -0.021576f, 0.003463f, 0.003077f, 0.034143f, 0.012609f, -0.045328f, 0.013584f, -0.009868f, -0.015898f, 0.004350f, 0.018521f, -0.000357f, -0.033920f, -0.030022f, 0.015839f, 0.012818f, 0.020975f, -0.011596f, 0.025964f, 0.005924f, 0.030452f, -0.003293f, - -0.010375f, 0.022394f, -0.002714f, -0.024225f, 0.004212f, 0.027837f, -0.001184f, -0.032083f, 0.015873f, 0.037045f, -0.034257f, 0.013378f, -0.036799f, 0.014419f, -0.046503f, -0.030550f, 0.051258f, 0.047616f, 0.022475f, 0.062054f, -0.011918f, 0.074109f, 0.027644f, 0.028477f, 0.039930f, -0.067424f, 0.056763f, 0.019209f, 0.022993f, 0.026018f, 0.006318f, -0.033005f, 0.005414f, 0.062501f, 0.071448f, -0.001027f, -0.080739f, 0.039539f, 0.002271f, 0.016713f, -0.002710f, 0.001723f, -0.017512f, -0.061115f, 0.012401f, -0.010328f, 0.013832f, -0.011564f, 0.030284f, -0.034460f, -0.036600f, -0.026059f, 0.005466f, -0.011369f, -0.016383f, 0.019419f, 0.007898f, -0.026541f, -0.027679f, -0.022264f, -0.016214f, -0.003207f, -0.004168f, 0.014249f, -0.000180f, -0.022818f, 0.018056f, 0.003223f, -0.005302f, 0.000672f, 0.009059f, -0.011560f, -0.005233f, 0.010845f, -0.019437f, -0.008747f, -0.013164f, 0.011226f, 0.014912f, -0.016951f, 0.005395f, -0.044859f, 0.001401f, 0.001813f, 0.002998f, -0.009072f, -0.007751f, -0.020464f, -0.014456f, 0.009798f, 0.007236f, 0.009374f, 0.016284f, -0.015226f, 0.001983f, 0.005619f, - 0.004776f, -0.014941f, 0.000928f, 0.003213f, 0.000363f, -0.012352f, -0.000820f, 0.081324f, -0.003119f, -0.096436f, -0.048938f, -0.056714f, -0.021838f, 0.000645f, 0.031740f, -0.082175f, -0.018563f, 0.013098f, -0.038500f, -0.044040f, -0.040371f, -0.043965f, -0.007244f, 0.048846f, 0.024870f, -0.019154f, 0.023255f, 0.009743f, -0.022460f, 0.025275f, -0.028335f, -0.006092f, 0.011588f, 0.016775f, -0.056136f, 0.028265f, -0.027711f, 0.016173f, -0.011197f, -0.044813f, 0.012291f, 0.014108f, 0.006742f, 0.007528f, -0.018889f, -0.063679f, 0.002358f, 0.013306f, 0.013660f, 0.000764f, 0.007710f, -0.026373f, -0.000576f, -0.002149f, 0.057676f, -0.008815f, -0.095574f, -0.042961f, -0.010641f, -0.079082f, 0.017731f, -0.024110f, -0.020511f, -0.038089f, -0.017400f, -0.056932f, -0.056187f, -0.068483f, -0.007156f, 0.072186f, 0.009566f, -0.045620f, 0.020672f, 0.000662f, -0.005430f, -0.025660f, -0.036469f, 0.015166f, 0.029319f, 0.022625f, 0.011888f, -0.013675f, -0.058856f, -0.041702f, -0.059260f, 0.008637f, 0.005992f, -0.002081f, 0.020455f, -0.031023f, -0.037966f, -0.005324f, -0.014424f, -0.038339f, 0.007780f, 0.022000f, - 0.002445f, 0.008014f, 0.036191f, -0.006693f, -0.008301f, -0.006367f, 0.001728f, -0.013286f, -0.008047f, 0.016367f, 0.024423f, 0.027413f, 0.017768f, -0.007712f, 0.000455f, 0.004187f, -0.012297f, 0.025356f, -0.011263f, 0.037047f, -0.013923f, 0.017319f, -0.018607f, -0.005083f, 0.036849f, 0.012368f, 0.004262f, -0.000338f, -0.015709f, 0.014702f, 0.002284f, -0.018543f, 0.007343f, -0.015899f, -0.021204f, 0.005661f, 0.005035f, -0.012677f, -0.013175f, 0.012676f, -0.000362f, 0.017894f, 0.002831f, 0.012118f, -0.007811f, 0.005223f, 0.003993f, 0.053071f, -0.005838f, 0.042437f, 0.055868f, -0.047313f, -0.058176f, -0.062278f, 0.016758f, 0.021138f, -0.084164f, -0.049447f, 0.002244f, 0.001913f, 0.026069f, -0.099044f, 0.011096f, 0.022260f, 0.068896f, -0.079444f, 0.009918f, 0.012425f, -0.009263f, 0.043009f, -0.024482f, 0.075759f, -0.003613f, 0.006204f, 0.023590f, 0.029109f, -0.028241f, -0.062129f, 0.036495f, 0.042982f, 0.010629f, 0.054523f, 0.011283f, -0.007513f, -0.019978f, -0.047075f, 0.072677f, -0.032756f, 0.068918f, 0.026470f, -0.004425f, 0.019705f, -0.028246f, 0.036428f, 0.037152f, -0.025979f, - 0.027804f, 0.013376f, -0.070945f, 0.051710f, 0.053787f, -0.007173f, -0.035834f, 0.006457f, -0.001073f, 0.001877f, -0.012184f, 0.098156f, -0.001118f, -0.057659f, -0.031330f, 0.010758f, -0.081840f, -0.108591f, 0.015568f, 0.134908f, 0.030683f, -0.009961f, -0.085640f, -0.022332f, -0.013553f, 0.091828f, -0.062266f, -0.040799f, -0.151094f, -0.022382f, -0.026962f, -0.036166f, -0.027628f, 0.055458f, 0.060489f, -0.059749f, -0.022158f, 0.019236f, 0.009187f, -0.011210f, 0.025430f, -0.010790f, -0.017782f, -0.019023f, 0.022090f, 0.008088f, 0.007873f, -0.007890f, 0.021722f, -0.021669f, -0.006177f, 0.017916f, 0.009520f, -0.001521f, 0.000304f, -0.016234f, 0.008881f, -0.010869f, 0.040578f, -0.011072f, -0.020189f, -0.017845f, -0.032441f, -0.011719f, 0.027281f, 0.029087f, 0.081431f, 0.030219f, -0.007736f, -0.061360f, -0.083098f, -0.039817f, 0.002698f, 0.034320f, 0.029438f, -0.022779f, -0.032137f, -0.017318f, -0.012240f, 0.020729f, 0.037942f, 0.007824f, 0.003680f, -0.004772f, -0.011305f, -0.011183f, -0.134865f, 0.039154f, 0.065275f, -0.086858f, -0.007425f, 0.048685f, -0.020569f, -0.039084f, 0.035314f, -0.037712f, - -0.020218f, 0.002859f, -0.027937f, 0.045787f, -0.015011f, -0.020931f, -0.007559f, 0.024185f, 0.083297f, -0.012922f, -0.037723f, -0.042638f, 0.015807f, 0.039588f, 0.024133f, -0.037690f, -0.005483f, 0.045055f, 0.001668f, -0.034168f, 0.011769f, -0.030503f, 0.077068f, -0.034694f, -0.082575f, 0.028616f, -0.013524f, 0.039564f, -0.055176f, -0.054775f, 0.055371f, -0.004494f, -0.070749f, -0.037919f, -0.067581f, 0.087993f, 0.042907f, 0.023664f, -0.092349f, 0.016400f, 0.038742f, -0.065171f, 0.004280f, -0.046853f, -0.034991f, 0.036225f, -0.031064f, 0.041581f, -0.025583f, -0.056661f, -0.012307f, -0.014145f, -0.007910f, 0.019288f, 0.007237f, -0.035473f, 0.110213f, -0.013692f, 0.049160f, 0.049694f, 0.030880f, -0.015170f, 0.012055f, -0.025149f, 0.062212f, 0.014953f, -0.015068f, 0.007110f, 0.026721f, 0.042547f, -0.010150f, -0.093439f, -0.005823f, 0.028718f, -0.008765f, 0.048854f, -0.020343f, 0.016623f, -0.006993f, 0.000916f, 0.020754f, 0.004527f, 0.012823f, 0.024703f, 0.015356f, 0.028732f, -0.006523f, 0.009047f, 0.015880f, 0.001588f, -0.029472f, 0.035421f, -0.014441f, -0.000244f, 0.005989f, -0.018404f, - 0.009663f, 0.001364f, -0.004350f, 0.024453f, -0.010856f, 0.001330f, 0.036446f, -0.000895f, 0.020468f, -0.018153f, -0.010987f, 0.018915f, -0.004209f, -0.013962f, -0.018522f, 0.000417f, 0.002897f, 0.003934f, -0.005992f, 0.004028f, 0.011539f, -0.004673f, 0.097570f, 0.020355f, 0.042106f, -0.003329f, 0.009957f, 0.015770f, -0.035871f, 0.015943f, 0.033868f, 0.000604f, -0.041233f, -0.021631f, -0.030666f, -0.012172f, -0.041324f, -0.039340f, 0.004659f, -0.031301f, 0.046042f, 0.015287f, -0.011099f, -0.033275f, -0.016400f, -0.010755f, 0.024662f, -0.007419f, -0.039101f, -0.031743f, 0.007810f, 0.008627f, 0.021931f, 0.008735f, -0.008875f, 0.010628f, -0.034141f, -0.102712f, 0.003986f, 0.125296f, -0.003989f, -0.090560f, -0.015094f, 0.059802f, 0.016241f, 0.010025f, -0.002010f, -0.039153f, -0.049517f, -0.029095f, 0.010867f, -0.002695f, -0.045829f, 0.017135f, -0.091836f, -0.016033f, 0.084409f, 0.025288f, 0.108678f, -0.013986f, -0.043359f, -0.012630f, -0.009941f, 0.029556f, 0.006007f, -0.000446f, -0.059802f, -0.029537f, -0.028781f, -0.003634f, 0.068663f, -0.008894f, -0.017223f, 0.023095f, 0.027606f, 0.004870f, - -0.037077f, -0.056927f, -0.004496f, 0.023634f, -0.002903f, -0.028045f, -0.007643f, 0.016439f, -0.012418f, -0.010287f, -0.019127f, 0.035039f, 0.036180f, -0.017936f, -0.009987f, -0.016441f, 0.014499f, 0.021996f, -0.010358f, 0.003563f, -0.004195f, -0.002554f, -0.007195f, -0.026957f, 0.002650f, 0.016112f, -0.016988f, 0.004565f, -0.004369f, 0.001703f, -0.015249f, -0.004540f, -0.006632f, -0.009285f, -0.011660f, -0.011121f, -0.003663f, 0.049435f, -0.024669f, 0.000773f, -0.009937f, 0.003178f, 0.026721f, -0.017802f, -0.002929f, -0.004745f, 0.008181f, -0.000771f, 0.007414f, -0.013552f, -0.043171f, -0.144375f, -0.222360f, 0.052273f, 0.199479f, 0.062624f, 0.487611f, 0.458819f, 0.204428f, 0.473100f, 0.200180f, -0.086074f, -0.001192f, -0.142615f, -0.389207f, -0.212877f, -0.203691f, -0.399397f, -0.290366f, -0.167156f, -0.251186f, -0.169320f, 0.037023f, -0.014939f, -0.080219f, 0.095037f, 0.089318f, -0.000661f, 0.095736f, 0.258977f, 0.109074f, 0.048547f, 0.248405f, 0.221769f, 0.074829f, 0.264238f, 0.323893f, -0.000814f, 0.191968f, 0.326000f, 0.123810f, 0.130144f, 0.332872f, 0.198420f, -0.026108f, 0.259302f, - 0.182444f, -0.071107f, 0.102134f, 0.206180f, -0.092251f, -0.164220f, -0.036814f, -0.346707f, -0.581270f, -0.563271f, -0.625726f, -1.001658f, -0.866514f, -0.715360f, -0.926421f, -0.794822f, -0.510352f, -0.605542f, -0.462344f, -0.128386f, -0.041171f, 0.195494f, 0.364744f, 0.600649f, 0.805387f, 0.877962f, 1.024662f, 1.112340f, 1.039608f, 0.984164f, 1.044645f, 0.794230f, 0.630174f, 0.747032f, 0.407789f, 0.064716f, 0.094243f, -0.151435f, -0.552153f, -0.464150f, -0.343011f, -0.495610f, -0.506269f, -0.316379f, -0.359504f, -0.453919f, -0.332308f, -0.302755f, -0.426533f, -0.383254f, -0.249605f, -0.318060f, -0.341036f, -0.112226f, -0.107436f, -0.201904f, -0.021281f, 0.075952f, -0.057759f, 0.010167f, 0.075912f, -0.109339f, -0.140686f, -0.134140f, -0.292477f, -0.323546f, -0.226237f, -0.170644f, -0.124064f, 0.041057f, 0.197702f, 0.268255f, 0.381031f, 0.487777f, 0.509941f, 0.540362f, 0.598248f, 0.566790f, 0.515682f, 0.536524f, 0.486262f, 0.360798f, 0.247529f, 0.063928f, -0.096958f, -0.248161f, -0.360048f, -0.403971f, -0.425017f, -0.380076f, -0.291161f, -0.255944f, -0.215568f, -0.177357f, -0.152950f, -0.135737f, - -0.102010f, -0.080437f, -0.073900f, -0.073093f, -0.051707f, -0.040916f, -0.033194f, -0.015331f, 0.010235f, 0.031010f, 0.059291f, 0.059421f, 0.057100f, 0.050854f, 0.032928f, 0.012507f, 0.007024f, 0.000373f}, - {-0.001031f, 0.020775f, -0.010300f, 0.000820f, -0.006145f, -0.000472f, 0.008781f, 0.004167f, 0.005509f, -0.004806f, 0.006824f, -0.007055f, 0.007661f, 0.003830f, 0.009233f, 0.003900f, -0.001758f, -0.010426f, 0.011212f, 0.007732f, 0.002841f, 0.001320f, 0.001038f, -0.004430f, -0.005079f, 0.005801f, 0.003548f, 0.003791f, 0.005562f, -0.005657f, -0.000442f, 0.005227f, 0.006181f, -0.000805f, -0.004628f, -0.008777f, 0.000021f, 0.001642f, -0.005319f, 0.001988f, 0.001399f, -0.007911f, -0.004294f, -0.000600f, 0.004005f, 0.000093f, -0.003873f, 0.007392f, 0.001360f, -0.002496f, -0.005490f, -0.001214f, 0.000627f, -0.010330f, 0.004748f, 0.006479f, -0.003618f, 0.008296f, 0.006765f, -0.001071f, 0.005590f, 0.003326f, 0.010951f, 0.003465f, 0.002024f, -0.001700f, 0.004104f, -0.008824f, 0.001104f, 0.004246f, -0.004412f, 0.004860f, 0.005811f, 0.006435f, 0.003970f, 0.008454f, -0.001852f, -0.005115f, -0.002703f, -0.002156f, 0.001078f, -0.001940f, -0.006603f, 0.003124f, -0.003140f, -0.003439f, -0.004025f, 0.001530f, -0.000051f, -0.002002f, -0.001638f, 0.002630f, 0.000146f, -0.000285f, -0.000752f, -0.000241f, - 0.001182f, 0.001772f, -0.000335f, -0.000085f, -0.001539f, 0.000436f, -0.002730f, 0.000276f, 0.001739f, 0.002393f, -0.001745f, -0.001776f, 0.000358f, 0.001568f, -0.019711f, -0.013786f, -0.001963f, -0.008876f, -0.007597f, 0.003739f, -0.011226f, -0.010823f, 0.003114f, -0.004902f, -0.004400f, 0.004507f, -0.003546f, -0.007666f, -0.000839f, -0.000578f, -0.002171f, -0.003506f, -0.002075f, -0.008792f, -0.000553f, -0.006340f, -0.004593f, -0.000239f, 0.007858f, -0.001744f, 0.011358f, -0.005904f, 0.006821f, 0.007846f, -0.008815f, 0.003074f, -0.002239f, 0.001711f, -0.006244f, 0.003094f, 0.004024f, 0.006055f, -0.003118f, -0.007388f, -0.002585f, -0.004049f, 0.002355f, 0.002876f, -0.008978f, -0.001121f, -0.006170f, -0.004939f, 0.001669f, -0.007336f, -0.011777f, -0.002194f, 0.011534f, 0.002567f, 0.004026f, 0.000642f, 0.002638f, 0.001594f, 0.004234f, 0.004581f, 0.012936f, 0.000988f, -0.005775f, -0.007416f, -0.001617f, -0.003521f, -0.000978f, -0.015014f, 0.003096f, -0.001047f, 0.004778f, -0.001987f, 0.001312f, -0.003564f, -0.001784f, 0.014740f, 0.002928f, 0.013519f, -0.004604f, -0.002434f, 0.001006f, 0.003866f, - 0.001283f, 0.004604f, -0.004515f, 0.004998f, -0.005260f, -0.003214f, 0.002655f, 0.001972f, -0.000224f, 0.000269f, 0.000080f, -0.001099f, 0.000339f, -0.001962f, -0.000216f, -0.000651f, -0.000359f, 0.000912f, 0.000990f, -0.001068f, -0.001938f, -0.001143f, 0.000092f, 0.000115f, 0.000290f, 0.000673f, -0.000827f, -0.000828f, -0.000842f, 0.000250f, -0.000345f, 0.001090f, 0.016001f, 0.018501f, 0.014192f, 0.010580f, 0.014920f, 0.006087f, 0.006469f, -0.001338f, 0.004219f, 0.015755f, 0.001651f, 0.004822f, -0.005874f, -0.003873f, 0.012027f, -0.008065f, -0.014777f, 0.004486f, -0.012351f, 0.010658f, 0.002479f, 0.012784f, -0.004093f, -0.000780f, -0.003176f, 0.004215f, 0.005080f, -0.000160f, -0.012583f, -0.002570f, 0.010725f, -0.007139f, 0.004819f, 0.002865f, -0.002455f, -0.003076f, 0.011921f, 0.009029f, 0.020818f, 0.008362f, 0.001700f, 0.005009f, -0.001794f, 0.001282f, 0.006536f, 0.003930f, 0.017738f, -0.007597f, -0.005103f, 0.001251f, 0.004544f, -0.002786f, 0.008204f, -0.007704f, 0.001567f, -0.000497f, -0.005958f, 0.001853f, 0.001750f, -0.008020f, -0.010898f, -0.006715f, 0.008568f, 0.004176f, - 0.000001f, -0.000692f, 0.006457f, 0.000497f, 0.002117f, 0.011265f, 0.005520f, -0.002680f, -0.001829f, 0.010014f, -0.008717f, 0.001153f, -0.007862f, -0.003520f, -0.010151f, 0.002757f, -0.002142f, -0.005995f, -0.003966f, 0.005869f, 0.003581f, 0.001049f, 0.003410f, -0.005617f, -0.000981f, -0.000479f, 0.004314f, 0.000126f, 0.000272f, 0.000804f, 0.001261f, 0.003201f, 0.003553f, 0.002833f, 0.000181f, 0.001514f, 0.003212f, 0.000183f, -0.002994f, 0.002735f, -0.001539f, -0.000585f, 0.000627f, -0.000498f, 0.002349f, 0.002171f, 0.001049f, -0.000005f, -0.000869f, -0.000861f, 0.000987f, 0.001367f, 0.000460f, 0.002087f, -0.004262f, -0.002699f, 0.002075f, -0.000149f, 0.034813f, -0.000618f, 0.017055f, -0.003094f, -0.002668f, 0.018291f, -0.017908f, -0.006206f, -0.001397f, 0.009032f, 0.006275f, -0.003841f, 0.003482f, 0.001685f, -0.016224f, 0.004095f, 0.008673f, 0.007697f, -0.018186f, -0.006404f, 0.002043f, -0.013049f, -0.003596f, 0.000983f, 0.000576f, 0.001758f, -0.002018f, 0.008287f, -0.005889f, 0.006585f, 0.013613f, 0.013595f, -0.003976f, -0.007834f, -0.001417f, 0.015314f, -0.000901f, -0.000853f, - 0.000089f, 0.001478f, -0.007997f, 0.001329f, 0.006426f, 0.000932f, 0.001501f, 0.006141f, -0.004126f, 0.004120f, 0.002382f, -0.001731f, 0.010749f, 0.001015f, 0.008537f, 0.001646f, -0.002914f, 0.003692f, 0.005690f, 0.004891f, -0.000294f, -0.008491f, -0.007725f, -0.010215f, -0.004573f, -0.000420f, -0.000041f, -0.001253f, 0.007502f, 0.006426f, -0.004967f, -0.010031f, 0.000262f, 0.005097f, 0.006163f, -0.006171f, -0.001196f, 0.005803f, -0.000591f, -0.000899f, 0.007755f, 0.003575f, 0.003638f, -0.003007f, -0.002586f, -0.000561f, 0.003298f, 0.004929f, 0.000037f, 0.003704f, 0.001291f, 0.000210f, 0.000653f, 0.001157f, 0.004593f, 0.003400f, 0.005177f, -0.002787f, 0.002392f, 0.000234f, 0.000570f, -0.000893f, 0.000452f, 0.000650f, 0.000132f, 0.000549f, -0.000966f, 0.002376f, 0.002362f, -0.002438f, 0.000497f, 0.001255f, 0.001437f, -0.000908f, 0.004755f, -0.009356f, -0.025957f, -0.006806f, -0.008788f, 0.001634f, 0.004330f, -0.004475f, -0.005199f, -0.049042f, 0.000981f, 0.015665f, -0.011435f, -0.018411f, 0.013719f, -0.020829f, -0.003147f, -0.009374f, -0.010918f, -0.006877f, -0.006862f, 0.000632f, - 0.008311f, -0.001636f, 0.004627f, -0.005415f, 0.006263f, -0.004931f, -0.007439f, 0.003144f, -0.002798f, -0.011842f, -0.014976f, 0.007019f, 0.000698f, 0.006927f, 0.002147f, 0.015662f, 0.002218f, 0.005343f, -0.007605f, -0.013291f, -0.003831f, -0.006670f, 0.013123f, -0.006276f, 0.000328f, 0.003270f, -0.006539f, 0.018231f, 0.012159f, 0.000118f, -0.014652f, -0.018717f, -0.006317f, 0.006035f, -0.016768f, -0.000567f, -0.008163f, -0.016094f, 0.001469f, -0.025118f, -0.005535f, -0.002806f, -0.009298f, 0.016640f, -0.001048f, -0.002794f, -0.000284f, 0.010368f, 0.013412f, 0.003885f, -0.013444f, -0.004495f, -0.003408f, 0.007088f, 0.003384f, 0.004006f, -0.007554f, -0.009773f, 0.007545f, 0.004996f, 0.001894f, 0.002391f, -0.000474f, 0.004166f, 0.001199f, 0.006352f, 0.001845f, 0.001369f, -0.000548f, -0.000335f, 0.001040f, 0.004047f, 0.005975f, 0.003525f, -0.001456f, 0.002240f, -0.007461f, 0.003722f, 0.004452f, -0.001388f, -0.000618f, 0.001237f, -0.001677f, -0.000602f, -0.000405f, -0.002430f, -0.002405f, -0.001447f, -0.000701f, 0.001278f, 0.002976f, -0.000589f, -0.003432f, -0.000145f, -0.004852f, 0.001538f, - 0.006686f, 0.002746f, 0.003955f, 0.002675f, 0.010391f, -0.028031f, -0.041317f, 0.005015f, -0.009467f, 0.009153f, -0.011600f, -0.020566f, 0.000466f, 0.018807f, 0.003810f, 0.011520f, 0.009194f, 0.007109f, 0.004542f, -0.006661f, 0.005007f, 0.012486f, -0.019677f, -0.009238f, -0.006575f, -0.004443f, 0.007151f, -0.001657f, 0.002433f, 0.012965f, 0.011286f, -0.004635f, -0.011114f, 0.002571f, -0.006241f, -0.004751f, -0.010772f, -0.007476f, -0.016383f, 0.003921f, -0.006145f, -0.000141f, 0.014489f, -0.002906f, 0.002754f, 0.003838f, -0.010442f, 0.008756f, 0.008627f, 0.012108f, -0.010638f, 0.019118f, -0.003131f, -0.013977f, -0.011827f, -0.015289f, 0.014239f, -0.005379f, -0.016258f, 0.004943f, -0.002508f, -0.011446f, 0.012192f, 0.016389f, -0.005656f, -0.013674f, 0.010157f, 0.003227f, 0.007966f, -0.001182f, 0.022044f, 0.012960f, -0.012848f, -0.006374f, -0.006054f, -0.005006f, 0.007374f, 0.010093f, 0.013096f, -0.000017f, 0.001754f, 0.005026f, -0.005166f, 0.004781f, -0.001401f, 0.008456f, 0.012038f, -0.016282f, -0.007238f, -0.008207f, -0.005081f, -0.008385f, -0.000606f, -0.005943f, 0.002794f, -0.000360f, - -0.000472f, -0.000732f, 0.002239f, -0.004046f, 0.010251f, -0.001312f, 0.004411f, 0.001496f, 0.002190f, -0.002032f, 0.000477f, 0.000233f, 0.000688f, -0.003486f, 0.000813f, -0.002286f, -0.003472f, -0.005424f, -0.001482f, -0.000376f, -0.000780f, 0.000145f, 0.000757f, -0.001148f, -0.000600f, -0.002079f, -0.001741f, 0.003138f, -0.038582f, -0.000026f, -0.007008f, 0.002558f, -0.000070f, 0.014559f, 0.010678f, 0.015080f, -0.002445f, 0.020570f, -0.009559f, 0.013989f, 0.017124f, 0.003159f, 0.017068f, 0.003689f, 0.004439f, -0.004781f, -0.001742f, -0.007171f, 0.013533f, -0.000831f, -0.001536f, 0.019064f, 0.011517f, 0.000187f, 0.005140f, -0.001613f, -0.000635f, 0.012402f, -0.007081f, -0.012251f, -0.000007f, -0.001691f, 0.006299f, -0.034662f, 0.020856f, 0.022501f, 0.008883f, 0.004387f, 0.000601f, -0.011015f, -0.023117f, 0.015284f, -0.009314f, -0.010506f, -0.007036f, 0.013719f, -0.009650f, 0.008467f, 0.008591f, -0.008206f, -0.005435f, -0.019963f, 0.009199f, -0.012984f, 0.007713f, 0.001293f, 0.006907f, 0.012143f, 0.019384f, 0.008317f, -0.008937f, -0.021316f, -0.003755f, 0.013046f, 0.021360f, 0.016034f, - -0.003236f, -0.004239f, -0.013730f, -0.022831f, -0.002417f, 0.015790f, 0.007048f, 0.004977f, -0.005067f, 0.020955f, -0.000715f, 0.007043f, 0.002028f, -0.004071f, 0.001980f, -0.010717f, -0.005214f, -0.005431f, 0.003561f, -0.002711f, -0.007649f, -0.004535f, -0.005287f, -0.005740f, 0.002282f, -0.008159f, -0.003391f, 0.001537f, 0.001396f, 0.006258f, 0.000327f, 0.000860f, 0.001072f, -0.001741f, 0.005124f, -0.001656f, 0.005828f, 0.002072f, -0.001685f, -0.004527f, -0.000248f, 0.005590f, 0.003992f, -0.000756f, -0.005504f, -0.001496f, 0.004836f, 0.004299f, 0.000601f, -0.001048f, -0.000683f, -0.003383f, 0.003717f, 0.014762f, 0.050423f, 0.027558f, -0.002427f, 0.004900f, 0.004506f, 0.011231f, 0.019959f, -0.002660f, 0.003954f, 0.033859f, 0.003488f, -0.001340f, 0.020391f, 0.014330f, -0.013996f, 0.008514f, 0.002089f, 0.013712f, 0.009392f, -0.023289f, 0.017885f, -0.010707f, -0.001491f, 0.002148f, 0.014013f, 0.002642f, 0.003837f, 0.010757f, 0.012235f, -0.011479f, 0.012567f, 0.037403f, -0.006518f, 0.017100f, 0.017458f, -0.009133f, 0.013705f, 0.003747f, -0.008910f, -0.009574f, 0.006676f, -0.008545f, - -0.023123f, -0.002871f, -0.001034f, 0.002509f, -0.029615f, -0.007120f, 0.009165f, -0.018646f, -0.012594f, -0.030792f, 0.010261f, 0.014338f, -0.021102f, -0.007428f, -0.010164f, 0.022484f, 0.000569f, -0.012697f, -0.008939f, -0.014155f, 0.007184f, 0.018824f, -0.013291f, 0.007311f, -0.005645f, 0.009120f, 0.021184f, 0.008981f, 0.016688f, 0.017039f, 0.021149f, 0.003314f, -0.011853f, -0.011758f, 0.008476f, 0.013468f, 0.001931f, 0.009068f, -0.009488f, 0.003852f, -0.001172f, -0.002887f, -0.009966f, 0.001420f, -0.004434f, 0.000620f, 0.008075f, 0.003472f, 0.003390f, 0.002780f, 0.008915f, -0.005512f, 0.000292f, -0.001466f, 0.002629f, -0.001023f, 0.000271f, 0.003844f, 0.000972f, -0.003131f, 0.004747f, -0.001033f, -0.006919f, 0.004289f, -0.004960f, -0.003928f, -0.005144f, -0.010314f, 0.005522f, -0.002365f, 0.004659f, -0.000550f, -0.001041f, 0.001375f, 0.007606f, 0.005159f, 0.006775f, 0.003176f, -0.000172f, 0.002792f, 0.007811f, -0.003233f, 0.051833f, 0.013948f, 0.002101f, -0.002904f, -0.007519f, 0.000413f, 0.009693f, -0.006201f, -0.011997f, -0.017650f, 0.001323f, 0.012767f, -0.015801f, 0.007863f, - 0.010365f, -0.004350f, 0.034979f, 0.012474f, -0.008729f, -0.005873f, -0.002650f, 0.012674f, -0.005202f, -0.011566f, -0.012869f, 0.008153f, -0.028063f, 0.001100f, -0.007942f, -0.010132f, 0.008936f, 0.002098f, -0.010317f, -0.006231f, -0.009918f, 0.014107f, -0.004662f, -0.022083f, -0.002746f, 0.000631f, 0.001603f, -0.012755f, -0.018171f, 0.001836f, -0.003448f, -0.002334f, 0.006090f, -0.003713f, 0.016901f, 0.003634f, 0.010052f, -0.010703f, 0.024631f, 0.007307f, -0.012414f, 0.016486f, 0.031176f, -0.008834f, -0.007771f, 0.016150f, 0.014693f, 0.006300f, 0.008905f, -0.019142f, -0.005235f, -0.020706f, 0.006039f, 0.019707f, 0.008752f, -0.024297f, -0.005073f, 0.007903f, -0.024262f, -0.037735f, -0.003390f, 0.001409f, 0.010657f, 0.034579f, 0.002638f, -0.003751f, -0.010861f, -0.007975f, 0.005277f, 0.008895f, 0.007209f, -0.000359f, 0.003761f, 0.000507f, -0.007722f, 0.004887f, 0.005816f, -0.009513f, -0.009388f, 0.010623f, -0.003627f, 0.006318f, 0.004533f, 0.003275f, -0.002764f, 0.002425f, -0.000397f, 0.003798f, 0.000741f, 0.005678f, 0.000005f, 0.005039f, 0.003252f, 0.001275f, -0.004622f, 0.010295f, - 0.003067f, 0.009417f, -0.002094f, -0.002894f, 0.003211f, -0.005991f, -0.001211f, 0.004585f, -0.005974f, 0.001693f, 0.003193f, 0.002251f, 0.002032f, 0.005139f, -0.002111f, -0.008803f, -0.000286f, -0.000745f, -0.009716f, 0.001605f, -0.004174f, -0.040228f, 0.018914f, 0.053473f, -0.021995f, 0.037529f, -0.008490f, -0.008087f, -0.011757f, -0.019386f, 0.014370f, 0.000552f, 0.009805f, 0.009719f, -0.035139f, 0.000468f, 0.016315f, -0.014236f, -0.007561f, -0.022118f, 0.039113f, -0.024411f, 0.019282f, 0.018230f, -0.023335f, -0.009595f, -0.008166f, 0.016430f, -0.018675f, -0.007597f, 0.018944f, -0.003297f, -0.005111f, -0.009233f, 0.023114f, 0.004091f, -0.003773f, -0.009504f, 0.000585f, -0.017596f, 0.019053f, -0.002250f, 0.008752f, 0.047594f, 0.031912f, -0.027381f, -0.019403f, 0.007490f, -0.002489f, 0.019921f, -0.010958f, -0.016048f, -0.005722f, -0.029844f, -0.011537f, -0.003529f, -0.022939f, -0.013089f, 0.050857f, 0.012151f, 0.000176f, -0.002481f, -0.000564f, 0.014989f, 0.017919f, -0.003761f, 0.017702f, 0.001442f, -0.009718f, 0.001938f, -0.027131f, -0.002020f, -0.025138f, -0.013554f, 0.015164f, 0.022228f, - -0.033333f, 0.013559f, -0.008532f, -0.010556f, 0.016170f, -0.002337f, -0.015332f, -0.000842f, -0.005997f, -0.011991f, 0.006187f, 0.004501f, -0.008370f, -0.020653f, -0.009946f, -0.002025f, -0.001609f, 0.016414f, 0.004884f, 0.004153f, -0.008877f, 0.000222f, -0.003637f, 0.008848f, 0.009845f, -0.005157f, 0.004228f, 0.007495f, 0.008107f, 0.006443f, 0.009216f, -0.003526f, 0.000681f, -0.006194f, 0.000546f, -0.007227f, -0.003870f, 0.002943f, -0.001989f, -0.005791f, -0.001358f, 0.003301f, -0.009766f, -0.004669f, -0.005274f, -0.002774f, -0.003698f, -0.004278f, -0.042601f, 0.007229f, 0.039609f, -0.010486f, -0.010045f, 0.008459f, -0.012231f, -0.010111f, 0.011212f, -0.001588f, -0.002177f, -0.000588f, -0.026798f, 0.045451f, -0.048384f, -0.004777f, -0.001062f, 0.016477f, 0.010032f, 0.000474f, -0.018339f, -0.013341f, 0.005842f, 0.035458f, -0.002845f, -0.015816f, -0.010680f, -0.025383f, -0.001673f, -0.014964f, -0.011754f, -0.005335f, 0.007967f, -0.000978f, 0.001234f, -0.017239f, 0.003488f, 0.004716f, 0.010983f, 0.008957f, 0.011059f, -0.023352f, 0.000156f, -0.004881f, 0.015307f, 0.003720f, 0.031004f, 0.006544f, - -0.007114f, 0.002589f, -0.016781f, -0.000275f, 0.013574f, 0.017297f, -0.026512f, -0.020757f, -0.001874f, 0.027573f, -0.043310f, 0.011242f, 0.050137f, 0.027383f, -0.013319f, 0.004482f, -0.026839f, 0.011207f, 0.024814f, -0.042486f, 0.009551f, -0.020775f, -0.005742f, -0.057546f, 0.000386f, -0.024327f, 0.022473f, 0.001401f, -0.026575f, 0.017593f, -0.001605f, -0.034545f, -0.004487f, -0.021896f, 0.014302f, -0.012260f, -0.017863f, 0.024333f, -0.004616f, 0.004204f, -0.008039f, -0.010742f, -0.002785f, 0.010326f, 0.007938f, -0.006007f, -0.001365f, 0.000315f, -0.005937f, 0.003677f, 0.006065f, 0.008527f, -0.008624f, 0.003328f, 0.004762f, -0.010507f, 0.000779f, 0.004448f, -0.007320f, 0.000599f, -0.004693f, 0.011376f, 0.006288f, 0.013871f, -0.006497f, -0.005341f, 0.004815f, -0.013444f, -0.001285f, -0.003944f, -0.001960f, -0.000813f, 0.002964f, -0.007595f, 0.000616f, -0.001116f, 0.002752f, 0.002453f, 0.000608f, -0.007665f, -0.011608f, -0.032340f, 0.051165f, 0.015047f, 0.026761f, -0.030142f, -0.034015f, -0.006037f, 0.008948f, -0.009215f, -0.004603f, 0.017432f, 0.004658f, 0.005597f, 0.015121f, -0.037419f, - -0.004188f, 0.000767f, 0.009515f, -0.025942f, 0.003379f, 0.004729f, -0.018302f, -0.009798f, -0.025189f, -0.018617f, -0.000205f, 0.008336f, -0.020402f, 0.001786f, -0.009290f, -0.017810f, 0.006945f, 0.000213f, 0.014352f, -0.039687f, -0.041790f, 0.008896f, -0.003672f, 0.015893f, 0.034884f, 0.004113f, -0.022107f, 0.031459f, -0.015688f, -0.029203f, -0.022742f, -0.009504f, 0.002396f, -0.031033f, -0.012170f, 0.030799f, 0.041497f, 0.017680f, 0.011533f, 0.008790f, -0.004934f, 0.026613f, 0.014861f, -0.030873f, -0.017021f, 0.000243f, 0.002956f, 0.029105f, 0.018525f, 0.004711f, -0.004610f, -0.003547f, -0.014400f, 0.019324f, 0.014977f, 0.033566f, 0.007512f, 0.009798f, 0.003919f, 0.060237f, 0.006666f, 0.023344f, -0.025088f, 0.002157f, 0.022722f, -0.054565f, 0.004299f, 0.007215f, 0.015193f, -0.005669f, 0.007990f, -0.007144f, -0.002040f, 0.009345f, -0.004726f, 0.028901f, -0.011815f, 0.016882f, -0.004675f, -0.010299f, -0.005718f, -0.011142f, 0.000092f, 0.004486f, 0.005447f, -0.002358f, -0.005827f, 0.012007f, -0.003864f, 0.008013f, -0.004550f, -0.004685f, -0.009065f, 0.008990f, 0.009621f, 0.002029f, - 0.000664f, -0.007488f, -0.013070f, 0.005860f, -0.001418f, 0.000291f, 0.014873f, -0.004407f, 0.012981f, -0.002194f, 0.007441f, 0.005122f, 0.009902f, 0.002156f, -0.009840f, -0.001967f, 0.034505f, 0.002299f, 0.042877f, -0.001542f, -0.019945f, -0.021706f, -0.040591f, 0.007301f, -0.017260f, -0.001245f, 0.003219f, 0.014394f, 0.020917f, 0.035621f, 0.036806f, -0.005863f, 0.032736f, -0.002586f, -0.003120f, 0.012341f, 0.027545f, 0.011968f, 0.007525f, -0.044375f, -0.022969f, -0.036109f, 0.017977f, 0.035909f, 0.006745f, -0.015699f, 0.024911f, 0.036022f, -0.005145f, 0.005486f, -0.008715f, 0.030267f, 0.025435f, 0.021676f, -0.013154f, -0.023048f, -0.003898f, -0.006071f, -0.051271f, 0.008782f, 0.006732f, 0.004429f, -0.013221f, -0.006890f, -0.057146f, -0.020253f, -0.051889f, -0.009155f, -0.038919f, -0.020160f, 0.037061f, 0.009787f, 0.039060f, 0.002505f, -0.032414f, -0.015758f, -0.033717f, -0.064067f, 0.008800f, -0.039626f, -0.011764f, 0.037642f, 0.015517f, 0.014763f, 0.002887f, -0.007243f, -0.002982f, 0.007361f, -0.027761f, 0.022040f, -0.047202f, -0.048479f, -0.002904f, -0.004159f, -0.006264f, -0.035607f, - -0.008303f, 0.047070f, -0.002779f, 0.002955f, -0.012757f, -0.040669f, 0.020500f, -0.027320f, -0.010966f, -0.027192f, -0.017074f, -0.012657f, -0.008907f, -0.009731f, -0.006266f, 0.000756f, 0.004642f, -0.025416f, -0.011194f, 0.005062f, 0.004385f, 0.014429f, 0.006497f, -0.008344f, -0.010951f, 0.009487f, -0.017447f, -0.002452f, 0.005164f, -0.013057f, 0.004016f, 0.004198f, 0.009444f, -0.008858f, -0.003319f, -0.004639f, -0.000872f, 0.006583f, -0.003951f, -0.000375f, -0.005241f, 0.010360f, 0.013883f, -0.004432f, -0.002427f, 0.003994f, 0.004556f, 0.009032f, 0.012287f, 0.002492f, -0.002278f, -0.002793f, 0.020168f, 0.040633f, 0.035366f, 0.038104f, -0.021961f, -0.038225f, 0.029399f, -0.017373f, 0.030385f, 0.009134f, -0.048811f, 0.012312f, 0.009093f, -0.054951f, 0.029549f, -0.025018f, -0.025585f, 0.015042f, 0.016725f, 0.002676f, 0.019853f, 0.001556f, 0.000992f, -0.012839f, -0.007445f, 0.012130f, -0.007634f, -0.018791f, 0.001267f, -0.035361f, 0.012805f, -0.044967f, -0.027377f, 0.001749f, 0.017874f, -0.006071f, -0.018618f, 0.007065f, 0.014100f, 0.010571f, 0.000833f, 0.036358f, -0.083369f, -0.018847f, - -0.022827f, -0.027604f, 0.036180f, -0.029073f, -0.003980f, -0.067160f, -0.018805f, -0.007893f, 0.003516f, 0.044945f, -0.010811f, 0.005773f, -0.027071f, 0.022850f, -0.033685f, -0.021718f, 0.017524f, -0.077978f, 0.011378f, 0.041849f, 0.054225f, 0.041522f, 0.026231f, 0.061080f, 0.033682f, -0.000609f, -0.015067f, -0.015528f, -0.023566f, -0.052439f, -0.005686f, 0.005044f, -0.074330f, -0.029283f, -0.022462f, -0.016642f, 0.023813f, 0.062425f, 0.072778f, 0.048341f, -0.024402f, 0.020035f, -0.015725f, -0.003255f, 0.016492f, 0.011361f, -0.006329f, 0.004103f, 0.005439f, -0.001277f, 0.002523f, -0.011263f, 0.006565f, 0.020614f, -0.009595f, 0.002918f, -0.018004f, 0.004626f, -0.008426f, -0.001025f, -0.000873f, 0.015988f, 0.027990f, -0.009822f, 0.001767f, 0.007028f, 0.011407f, -0.016700f, -0.026178f, 0.000730f, 0.020404f, 0.006167f, -0.016694f, 0.015896f, 0.008246f, -0.016723f, 0.011911f, 0.007865f, -0.006521f, -0.004939f, -0.001800f, -0.002892f, 0.003088f, 0.006646f, -0.005943f, 0.011726f, -0.071581f, 0.000097f, 0.011946f, 0.050196f, -0.016342f, 0.023200f, 0.021110f, 0.011105f, 0.011524f, -0.078302f, - 0.061740f, 0.033624f, 0.076496f, 0.028062f, -0.003339f, -0.028482f, -0.018076f, -0.017862f, -0.027748f, 0.019719f, 0.014510f, -0.028220f, -0.032048f, 0.016836f, 0.022902f, 0.039877f, 0.011135f, -0.024929f, -0.037154f, 0.007747f, 0.006197f, 0.002442f, 0.004355f, 0.070847f, 0.023915f, 0.013427f, 0.023251f, 0.025530f, 0.028764f, 0.000506f, -0.045177f, 0.031528f, 0.098846f, -0.010299f, -0.027754f, -0.060447f, -0.013143f, 0.079628f, 0.009130f, 0.032820f, 0.010846f, -0.110606f, 0.022543f, 0.019573f, 0.002079f, 0.011092f, -0.007976f, 0.001428f, 0.022255f, -0.059700f, -0.024942f, 0.050135f, 0.018419f, 0.006608f, -0.045044f, 0.031655f, 0.011546f, -0.040650f, -0.044095f, -0.029720f, 0.039734f, 0.082985f, 0.077208f, 0.085070f, 0.086289f, 0.003077f, -0.038970f, -0.032133f, -0.076157f, -0.025245f, 0.023557f, -0.061898f, -0.000959f, -0.050528f, 0.000257f, 0.066905f, 0.025819f, 0.027294f, 0.033000f, 0.020412f, -0.020996f, -0.007305f, -0.025799f, 0.036120f, -0.022626f, -0.020048f, 0.006112f, -0.004769f, -0.013683f, -0.024748f, -0.007562f, 0.024391f, 0.022959f, -0.011538f, 0.035783f, -0.002272f, - 0.000354f, -0.017074f, 0.004778f, 0.018149f, -0.005345f, -0.014917f, -0.014485f, 0.008710f, -0.008311f, 0.019823f, 0.012276f, 0.015903f, 0.023541f, -0.025408f, 0.005595f, 0.001411f, 0.010389f, -0.005889f, -0.011309f, 0.021007f, 0.004465f, 0.016979f, -0.010373f, 0.005667f, -0.015334f, -0.005647f, 0.034471f, 0.073210f, -0.147344f, -0.050634f, 0.010454f, -0.084503f, -0.079394f, -0.032925f, -0.048592f, 0.006459f, -0.036033f, 0.093805f, -0.010830f, -0.031820f, -0.014278f, -0.069943f, -0.020632f, -0.056224f, -0.024811f, 0.011114f, -0.074849f, -0.011275f, 0.056294f, -0.046816f, -0.014742f, 0.017645f, -0.001221f, 0.025040f, 0.004078f, 0.001249f, 0.020419f, 0.009095f, -0.037646f, -0.005696f, 0.031764f, -0.015330f, -0.046656f, -0.013823f, -0.056379f, -0.026095f, -0.098069f, 0.010710f, -0.067093f, 0.033204f, 0.010916f, -0.023013f, -0.086605f, 0.009208f, -0.010029f, 0.106894f, 0.041076f, 0.003246f, 0.056419f, 0.026155f, -0.000356f, 0.047916f, -0.055855f, -0.024819f, 0.003229f, 0.042545f, -0.046411f, -0.026321f, 0.152211f, -0.013312f, 0.078425f, -0.060497f, -0.001013f, -0.042836f, 0.032419f, -0.014346f, - 0.051058f, 0.082850f, 0.001315f, -0.056517f, 0.048682f, -0.060294f, -0.028796f, 0.021957f, -0.064716f, -0.041482f, -0.021203f, 0.047620f, 0.087735f, -0.104170f, 0.087964f, 0.018991f, 0.025138f, 0.011033f, 0.011649f, 0.010696f, -0.013925f, 0.017294f, 0.045187f, -0.022004f, 0.007271f, -0.003253f, 0.005210f, -0.048643f, -0.009757f, -0.014012f, 0.014266f, 0.016693f, 0.048354f, -0.029389f, -0.018570f, -0.022612f, 0.033323f, -0.042243f, 0.009720f, 0.017385f, 0.014028f, 0.017536f, -0.072499f, -0.015737f, 0.025122f, -0.010987f, -0.031405f, -0.002651f, 0.007728f, 0.003209f, 0.029675f, 0.016809f, 0.023413f, -0.022744f, -0.022266f, 0.025925f, 0.006488f, 0.017926f, -0.016864f, 0.018053f, 0.010610f, 0.004655f, 0.005487f, -0.005233f, -0.008137f, 0.001915f, -0.055285f, 0.114250f, -0.065657f, 0.042017f, 0.037436f, -0.059444f, 0.032558f, 0.017959f, 0.012794f, -0.010564f, 0.045082f, 0.023332f, -0.057502f, 0.040735f, 0.047331f, 0.009212f, 0.007953f, 0.028661f, -0.000843f, -0.057130f, 0.074133f, -0.042405f, 0.016688f, -0.031548f, -0.007387f, 0.009300f, -0.014031f, 0.060455f, 0.013464f, -0.008042f, - -0.014689f, -0.003219f, 0.011703f, -0.061632f, 0.019363f, -0.031988f, -0.021735f, -0.014853f, -0.000317f, -0.030294f, -0.014554f, 0.007249f, 0.063731f, 0.000589f, -0.013601f, -0.040833f, 0.016811f, 0.011137f, 0.001681f, 0.049494f, -0.012287f, -0.005289f, 0.058789f, 0.018437f, 0.003201f, -0.057076f, -0.030047f, 0.036618f, 0.020301f, -0.053484f, 0.001439f, -0.121372f, -0.060318f, 0.108541f, -0.025749f, 0.058644f, 0.076726f, 0.021762f, 0.012804f, 0.034712f, -0.015184f, -0.042727f, 0.022546f, 0.007011f, -0.003098f, 0.048882f, 0.031545f, -0.035395f, -0.084989f, -0.017685f, 0.034125f, 0.010824f, -0.002425f, 0.027274f, -0.032362f, 0.047312f, -0.023660f, 0.017600f, 0.021759f, 0.009543f, 0.032166f, 0.024549f, 0.039072f, 0.004314f, -0.010700f, 0.014128f, 0.037849f, -0.010208f, 0.033077f, 0.019941f, -0.022148f, 0.006593f, 0.017359f, 0.011829f, 0.006882f, 0.023887f, 0.019665f, 0.008653f, 0.039694f, -0.012901f, 0.004148f, -0.005959f, -0.003045f, -0.010375f, 0.035183f, 0.029307f, 0.023198f, -0.011306f, 0.004079f, 0.041839f, -0.011375f, 0.030632f, 0.027221f, -0.000083f, 0.047750f, -0.043711f, - 0.005746f, 0.065924f, 0.008086f, 0.018581f, -0.014102f, 0.046369f, 0.008634f, 0.064852f, -0.020018f, -0.108398f, 0.018432f, -0.013083f, 0.037336f, 0.011394f, -0.036749f, 0.019023f, 0.022373f, -0.041925f, -0.046002f, -0.030827f, -0.076813f, -0.077342f, 0.053192f, -0.012365f, -0.079440f, -0.024402f, 0.008130f, 0.026237f, 0.025147f, -0.048711f, -0.052776f, 0.005133f, 0.073393f, -0.035169f, 0.028309f, -0.049454f, 0.017525f, -0.055786f, 0.036254f, 0.038245f, -0.027365f, -0.057413f, -0.039509f, -0.006456f, 0.022452f, -0.024681f, -0.016292f, -0.020559f, -0.073033f, -0.063119f, 0.032984f, -0.053002f, -0.010913f, 0.018805f, -0.043812f, -0.070663f, 0.026858f, 0.036991f, -0.004838f, -0.085056f, 0.037910f, 0.033304f, 0.107377f, 0.000446f, 0.028100f, 0.020995f, -0.046041f, 0.017537f, -0.014402f, -0.092951f, -0.014367f, 0.056748f, 0.013376f, -0.047044f, -0.116730f, 0.073588f, 0.093956f, -0.028023f, 0.075963f, 0.088556f, 0.004406f, 0.003968f, 0.069854f, -0.045397f, 0.003350f, 0.117237f, -0.086632f, 0.050245f, -0.074237f, -0.020371f, -0.006203f, 0.050469f, -0.017321f, 0.007305f, 0.028153f, -0.000916f, - -0.065735f, 0.072191f, -0.013285f, -0.008494f, 0.010920f, 0.030139f, -0.049461f, 0.021566f, 0.012505f, -0.007445f, 0.014844f, 0.017553f, -0.045853f, -0.006191f, 0.010475f, 0.024003f, 0.049694f, -0.004206f, -0.043939f, 0.022255f, 0.051007f, -0.040722f, 0.049747f, -0.023642f, -0.005495f, -0.017545f, 0.056120f, -0.038918f, 0.013163f, 0.035199f, -0.024528f, 0.008855f, 0.006012f, -0.032432f, 0.006901f, 0.014031f, -0.006376f, -0.024614f, 0.015815f, 0.020486f, -0.011679f, 0.040709f, -0.061370f, 0.015115f, 0.017605f, 0.000894f, 0.003433f, 0.042028f, -0.009443f, 0.023576f, -0.048800f, -0.154522f, 0.041787f, -0.017859f, 0.115415f, -0.039730f, -0.025342f, -0.046375f, -0.132183f, 0.060423f, -0.077022f, -0.045093f, 0.002374f, -0.000217f, 0.101995f, -0.073021f, -0.051054f, 0.067091f, 0.040006f, 0.034944f, -0.012634f, 0.033383f, -0.023613f, -0.033707f, -0.030931f, 0.078681f, 0.065544f, 0.102316f, -0.032536f, -0.038404f, 0.001860f, -0.006842f, 0.037647f, -0.061729f, 0.013273f, -0.064878f, 0.034675f, 0.063476f, 0.021879f, -0.052423f, 0.035734f, -0.046224f, 0.103972f, 0.052830f, 0.014773f, 0.013921f, - -0.015987f, -0.081564f, 0.046120f, -0.110614f, 0.023160f, 0.020519f, 0.054079f, 0.042804f, -0.095420f, 0.028741f, -0.060081f, -0.035760f, 0.026078f, -0.009530f, 0.035710f, 0.022782f, -0.087233f, 0.035649f, 0.080283f, 0.106009f, -0.030692f, 0.031310f, -0.043221f, 0.074401f, -0.105648f, -0.005598f, -0.019178f, 0.033378f, 0.069643f, 0.099886f, -0.079877f, 0.019917f, -0.106913f, 0.068785f, 0.141055f, -0.035801f, -0.095978f, -0.007720f, -0.072363f, 0.092574f, 0.023588f, -0.047250f, -0.013275f, 0.005394f, -0.015733f, 0.066126f, 0.024994f, -0.037336f, 0.035676f, -0.052872f, 0.003546f, 0.049646f, -0.010257f, -0.060938f, 0.067692f, -0.097244f, 0.028299f, -0.014647f, 0.038988f, -0.002409f, 0.024259f, -0.022383f, -0.011899f, 0.009945f, 0.008649f, 0.010373f, 0.046247f, -0.047144f, -0.039548f, 0.002259f, 0.010755f, -0.010843f, -0.049122f, -0.035940f, 0.072207f, 0.019513f, -0.031944f, -0.036888f, -0.082191f, 0.098606f, 0.077239f, -0.029956f, -0.026302f, -0.057385f, 0.002285f, 0.073707f, -0.121385f, 0.086680f, -0.011231f, -0.003413f, 0.028843f, 0.024145f, 0.034343f, 0.009498f, 0.016828f, -0.042774f, - 0.040601f, 0.011008f, -0.043458f, 0.029293f, -0.017220f, -0.000803f, 0.039702f, 0.022817f, -0.061870f, 0.034703f, -0.029214f, 0.051508f, -0.037475f, 0.012940f, -0.019084f, 0.023900f, -0.018181f, 0.010914f, -0.027136f, 0.059254f, -0.005110f, 0.001480f, 0.017827f, 0.019767f, -0.029924f, -0.006415f, 0.013747f, 0.019660f, 0.018266f, -0.021037f, 0.007715f, 0.000711f, -0.060150f, -0.005179f, 0.015855f, 0.022035f, 0.009870f, 0.014062f, -0.054079f, 0.008475f, -0.002934f, 0.005304f, 0.012723f, -0.010923f, 0.012048f, 0.008880f, 0.005361f, -0.013308f, -0.012018f, -0.004371f, 0.063105f, -0.022283f, 0.012763f, 0.023177f, -0.012903f, 0.022044f, -0.025005f, 0.021237f, 0.011387f, -0.017108f, -0.025155f, 0.015793f, -0.015354f, 0.012344f, -0.022596f, -0.019932f, -0.008785f, 0.028692f, -0.007195f, 0.002587f, 0.006031f, -0.002284f, 0.007131f, -0.023073f, 0.017558f, -0.014957f, 0.038269f, -0.035571f, 0.016762f, -0.021300f, 0.019142f, -0.017431f, 0.015352f, 0.000233f, 0.025914f, -0.022446f, 0.012210f, -0.011578f, 0.001493f, 0.004356f, 0.015348f, -0.016171f, 0.003919f, -0.017435f, 0.024564f, -0.020648f, - -0.005546f, 0.012171f, 0.005189f, -0.010169f, -0.002833f, 0.013772f, 0.009349f, -0.033915f, 0.018980f, 0.001494f, 0.000317f, -0.003736f, 0.006936f, -0.004385f, 0.003712f, -0.002784f, 0.004485f, 0.000959f, 0.008908f, -0.009713f, 0.024218f, -0.030819f, 0.096578f, -0.006981f, -0.031249f, -0.047700f, -0.021656f, -0.026787f, 0.035051f, 0.020236f, -0.025451f, 0.002097f, 0.003019f, 0.011417f, 0.001587f, 0.024230f, 0.008387f, 0.019077f, -0.006539f, -0.000717f, -0.005721f, 0.008926f, 0.020722f, -0.019261f, -0.000113f, -0.009549f, 0.000685f, 0.025217f, -0.014315f, 0.002428f, -0.006465f, 0.009915f, 0.005142f, -0.013888f, -0.005129f, 0.014828f, -0.004561f, 0.024198f, 0.017242f, -0.025323f, 0.008110f, 0.005326f, 0.013270f, 0.005573f, -0.023898f, 0.016141f, -0.004474f, 0.015696f, 0.012587f, -0.028569f, 0.007828f, 0.000046f, 0.006423f, -0.003223f, -0.012535f, 0.020304f, -0.005003f, 0.009194f, 0.000484f, -0.006150f, 0.009414f, -0.012187f, -0.001710f, 0.016925f, -0.011662f, -0.014031f, 0.028276f, -0.018304f, 0.026378f, -0.002792f, -0.021378f, 0.043685f, -0.040157f, 0.034863f, -0.012385f, -0.020968f, - 0.022107f, -0.020602f, 0.006085f, 0.007078f, -0.020125f, 0.016893f, -0.003632f, -0.001346f, 0.010808f, -0.014038f, 0.018294f, -0.005982f, -0.001420f, 0.004460f, -0.003136f, 0.006378f, -0.003079f, 0.000982f, 0.005326f, -0.005209f, 0.008522f, -0.001054f, -0.004879f, 0.010444f, -0.016298f, 0.008594f, -0.007259f, -0.003403f, 0.010133f, 0.000788f, -0.003081f, 0.005207f, -0.003887f, 0.005168f, 0.002645f, -0.007610f, 0.005030f, 0.000960f, -0.001739f, -0.001354f, 0.004539f, 0.000914f, 0.008403f, -0.006717f, 0.002369f, 0.001011f, -0.004795f, 0.009271f, -0.002739f, -0.001557f, -0.047306f, -0.081142f, 0.102355f, 0.293207f, 0.046342f, 0.028416f, -0.214370f, -0.265014f, -0.084947f, -0.052099f, 0.179234f, 0.273425f, 0.140667f, 0.040770f, -0.092066f, -0.197830f, -0.180487f, -0.151145f, 0.011916f, 0.226517f, 0.189400f, 0.108643f, 0.036835f, -0.096937f, -0.125790f, -0.099859f, -0.096581f, -0.034037f, 0.045714f, 0.062915f, 0.130053f, 0.093163f, 0.022534f, -0.031544f, -0.018635f, -0.104728f, -0.050958f, -0.052920f, -0.071772f, 0.042696f, 0.080386f, 0.046543f, 0.117058f, 0.031126f, -0.027891f, -0.044983f, - -0.077950f, -0.061530f, -0.009713f, -0.019014f, 0.023838f, 0.048490f, 0.043110f, 0.030880f, 0.020944f, -0.010632f, -0.042832f, -0.030210f, -0.035635f, 0.011479f, 0.041408f, 0.013713f, 0.010118f, -0.017977f, -0.037266f, -0.006926f, -0.000161f, -0.000509f, 0.030052f, 0.027017f, 0.030123f, 0.011956f, -0.010476f, -0.032331f, -0.046963f, -0.047952f, -0.031285f, 0.033302f, 0.049167f, 0.061120f, 0.042169f, -0.010590f, -0.023957f, -0.025310f, -0.050331f, -0.022161f, 0.018272f, 0.009700f, 0.009034f, 0.014693f, 0.006969f, 0.005658f, -0.007855f, -0.010048f, 0.007864f, 0.017495f, -0.000435f, -0.001472f, -0.012089f, -0.016497f, -0.008664f, -0.010007f, -0.005970f, 0.012981f, -0.002348f, 0.027110f, 0.033357f, 0.019363f, -0.011639f, -0.018946f, -0.021344f, -0.026849f, -0.019718f, -0.026571f, 0.014178f, 0.036708f, 0.033391f, 0.019845f, 0.020834f, 0.007951f, -0.020606f, -0.040141f, -0.041168f, -0.020846f, -0.004297f, 0.013050f, 0.029249f, 0.043066f, 0.035251f, 0.006691f, -0.022769f, -0.037818f, -0.027793f, -0.009167f, 0.000231f, 0.010401f, 0.006563f, 0.016272f, 0.020732f, 0.006194f, -0.009014f, -0.012223f, - -0.006915f, -0.005084f, -0.005010f, -0.001387f, 0.001462f, 0.009676f, 0.005820f, 0.000693f, -0.000119f, -0.000576f, -0.001858f, -0.004215f, -0.004414f, 0.001334f, 0.001359f, 0.000827f, -0.000331f, 0.000400f} - }, - { - {-0.005343f, 0.020366f, 0.002374f, 0.005529f, 0.001946f, 0.002922f, -0.004913f, -0.012293f, -0.002380f, 0.006525f, 0.002318f, -0.006075f, -0.000860f, 0.004995f, -0.001288f, -0.007318f, 0.002209f, -0.008438f, -0.005245f, -0.000243f, 0.002323f, -0.002386f, -0.001915f, 0.005261f, -0.007297f, -0.000155f, 0.000921f, 0.003546f, 0.002792f, 0.002703f, 0.008906f, 0.004042f, -0.011082f, -0.002807f, -0.005042f, 0.001420f, -0.000294f, -0.000821f, -0.006982f, -0.009075f, 0.012036f, -0.005544f, 0.002937f, 0.003521f, 0.003010f, -0.011414f, -0.006505f, -0.002979f, 0.001252f, -0.000881f, -0.000366f, -0.001036f, 0.001917f, 0.004372f, -0.005986f, -0.000002f, 0.003194f, 0.003742f, 0.004441f, 0.001651f, 0.000072f, 0.004320f, 0.001519f, -0.001860f, -0.000560f, 0.007006f, -0.005203f, -0.005484f, -0.002975f, -0.002196f, 0.005966f, 0.003540f, 0.001412f, -0.002226f, 0.005748f, -0.002563f, 0.002973f, -0.006805f, -0.000662f, 0.000527f, 0.001403f, 0.001415f, -0.005511f, 0.001489f, 0.003878f, 0.001959f, 0.000645f, -0.000495f, 0.005077f, 0.002425f, -0.000528f, 0.003263f, 0.001925f, 0.000847f, -0.000761f, 0.001094f, - 0.000862f, 0.000708f, -0.000987f, 0.001239f, 0.000335f, -0.001026f, -0.000830f, 0.001763f, 0.000372f, -0.000174f, 0.000005f, 0.000068f, 0.000279f, -0.001646f, 0.001160f, -0.000463f, 0.000907f, -0.001296f, -0.011577f, -0.006970f, 0.004932f, -0.011325f, -0.016014f, 0.003115f, 0.001376f, 0.001976f, 0.002341f, 0.002255f, -0.013767f, -0.002248f, 0.003998f, -0.008729f, 0.009173f, 0.008918f, 0.007652f, -0.003094f, 0.000703f, 0.002072f, 0.005860f, 0.001337f, -0.000199f, 0.001154f, -0.003984f, 0.003699f, -0.001439f, -0.001450f, -0.001873f, 0.011312f, -0.006749f, 0.003916f, -0.004260f, -0.003668f, -0.003826f, 0.003002f, 0.006186f, -0.006601f, -0.003292f, -0.003576f, 0.004527f, 0.004264f, 0.006878f, 0.004676f, 0.000918f, 0.006028f, -0.005134f, 0.003624f, 0.001377f, 0.001575f, 0.012623f, 0.002987f, 0.006241f, -0.010359f, -0.002798f, 0.004273f, -0.005184f, 0.004916f, -0.002241f, -0.003812f, 0.001349f, 0.007576f, 0.005108f, 0.003495f, -0.001854f, 0.001552f, 0.005645f, -0.006831f, 0.009011f, -0.001228f, 0.007385f, -0.003000f, 0.006093f, 0.007276f, 0.006126f, -0.003421f, -0.009090f, -0.013416f, - -0.009064f, 0.000876f, -0.004756f, 0.008864f, 0.001469f, 0.001389f, 0.002370f, -0.006325f, -0.001960f, -0.002845f, 0.003182f, -0.001711f, -0.001219f, 0.003905f, -0.004769f, -0.001683f, 0.001887f, -0.002646f, 0.000219f, -0.002953f, -0.002361f, -0.001870f, -0.000531f, -0.003149f, 0.019453f, 0.013978f, 0.011453f, 0.009532f, 0.010742f, 0.004538f, -0.000847f, -0.000237f, -0.003989f, -0.001189f, 0.014133f, -0.006168f, -0.006358f, 0.009753f, 0.007240f, 0.009377f, -0.006554f, 0.002840f, -0.002478f, 0.002120f, 0.004178f, 0.005855f, 0.000857f, -0.004272f, -0.003175f, -0.005497f, -0.001964f, -0.003396f, -0.010024f, -0.001214f, 0.008441f, -0.006568f, -0.001143f, 0.003123f, -0.005164f, -0.004676f, 0.004775f, -0.002576f, -0.006695f, -0.003585f, 0.003816f, -0.005718f, -0.007365f, -0.003355f, -0.002186f, 0.002490f, -0.005138f, -0.010645f, 0.000757f, -0.001749f, -0.001489f, 0.003092f, -0.008739f, -0.004249f, 0.000164f, -0.003639f, 0.004823f, -0.001213f, 0.002084f, -0.015677f, -0.004752f, 0.008901f, -0.003493f, -0.008621f, 0.002581f, 0.001554f, 0.002442f, -0.003192f, -0.012438f, -0.005624f, 0.014013f, 0.000981f, - 0.005171f, 0.002992f, -0.002002f, 0.004300f, 0.005846f, 0.002486f, -0.002887f, -0.006667f, -0.000002f, 0.001707f, -0.005063f, 0.002334f, -0.006565f, -0.000634f, -0.004182f, -0.002010f, -0.005540f, -0.001014f, -0.003161f, -0.003986f, -0.003097f, 0.000662f, -0.001370f, 0.000765f, -0.001503f, 0.000604f, -0.002786f, 0.002057f, 0.001093f, -0.000714f, -0.000499f, 0.002663f, -0.000045f, -0.000878f, -0.002474f, -0.001218f, -0.001113f, -0.000125f, 0.000255f, 0.000127f, 0.027586f, 0.016947f, 0.016041f, 0.000295f, 0.001613f, 0.001291f, -0.006558f, -0.014595f, -0.005501f, 0.011035f, -0.008317f, 0.005001f, 0.014925f, 0.001211f, -0.004703f, -0.001857f, -0.002996f, -0.001573f, 0.006052f, 0.008577f, 0.000333f, 0.002532f, 0.003526f, 0.005592f, 0.000366f, -0.007842f, 0.002450f, -0.012640f, -0.003778f, -0.001597f, -0.003484f, -0.002298f, 0.001610f, -0.003027f, -0.006601f, -0.005175f, -0.002353f, 0.000542f, -0.002811f, -0.007674f, 0.009154f, -0.003430f, 0.000703f, -0.002381f, -0.005936f, 0.007470f, 0.020872f, 0.005000f, -0.007203f, 0.012293f, 0.002862f, -0.003827f, 0.003798f, -0.002168f, -0.007978f, -0.000004f, - -0.003318f, 0.003067f, -0.006905f, -0.012081f, 0.000520f, 0.001952f, -0.014551f, 0.004310f, 0.003065f, 0.008103f, 0.004678f, 0.010725f, -0.003607f, -0.007331f, -0.004228f, -0.002321f, 0.005294f, -0.001979f, -0.009341f, 0.006341f, -0.004534f, -0.008597f, 0.005871f, -0.008588f, -0.004627f, 0.002635f, -0.003044f, 0.002893f, -0.001994f, -0.003582f, 0.002869f, 0.007176f, -0.001635f, -0.003626f, -0.001258f, -0.000068f, 0.002574f, 0.005025f, 0.001499f, -0.001547f, -0.001862f, -0.001926f, -0.000586f, 0.001144f, -0.003650f, -0.001353f, -0.001054f, 0.005515f, 0.002866f, 0.003884f, -0.000635f, 0.000245f, 0.003082f, 0.001990f, 0.001502f, -0.000234f, 0.000541f, -0.014195f, -0.022437f, -0.006889f, -0.011226f, 0.016077f, -0.003669f, -0.001968f, 0.006021f, -0.014841f, -0.010456f, 0.008907f, -0.007190f, -0.006678f, -0.000369f, -0.000607f, 0.001583f, 0.005868f, -0.002467f, 0.002670f, -0.003868f, -0.002878f, -0.000274f, -0.002547f, -0.006502f, -0.000585f, -0.001396f, 0.006791f, 0.006878f, 0.006031f, -0.008054f, 0.003739f, 0.002730f, 0.011265f, -0.005676f, -0.000421f, -0.003860f, -0.008621f, 0.012279f, -0.011647f, - -0.005714f, -0.004536f, 0.002901f, 0.010186f, -0.009424f, 0.010537f, -0.001136f, 0.005680f, 0.008790f, 0.001425f, 0.006779f, -0.012546f, 0.002775f, -0.004732f, 0.000660f, -0.013288f, 0.000263f, -0.004580f, -0.011884f, -0.009141f, 0.000729f, 0.008780f, 0.000478f, -0.006398f, 0.010012f, -0.003433f, 0.005803f, -0.000786f, -0.012332f, 0.017287f, -0.010770f, -0.002137f, -0.006118f, 0.004323f, 0.007037f, 0.004651f, 0.006494f, 0.014000f, 0.010703f, -0.001780f, 0.002255f, 0.006615f, 0.004188f, -0.004975f, 0.007132f, 0.005546f, -0.001023f, 0.003157f, -0.006950f, -0.009609f, -0.001004f, -0.003090f, 0.005428f, -0.005628f, -0.001148f, -0.005409f, -0.001228f, -0.002478f, -0.000782f, 0.001637f, 0.002034f, 0.001120f, -0.000214f, -0.001349f, 0.003273f, 0.001665f, -0.003330f, 0.002442f, 0.000184f, -0.008313f, -0.000718f, -0.002980f, 0.004789f, -0.001255f, -0.000537f, 0.001756f, -0.000887f, 0.001676f, 0.003762f, -0.000230f, 0.002450f, 0.002607f, -0.000475f, 0.000987f, 0.005295f, 0.006048f, -0.015886f, -0.022655f, 0.002548f, 0.001907f, 0.001283f, 0.014612f, -0.004719f, -0.015892f, 0.001696f, 0.001862f, - -0.004182f, -0.000902f, -0.013968f, -0.002747f, 0.001761f, 0.002095f, 0.015670f, -0.002721f, 0.014046f, -0.003370f, -0.003596f, 0.001194f, -0.013893f, 0.005963f, -0.005220f, 0.008502f, -0.002319f, -0.003556f, -0.005143f, -0.002501f, 0.000526f, -0.010378f, 0.018026f, -0.012443f, -0.020204f, 0.006080f, 0.000962f, -0.014180f, -0.004167f, -0.027241f, 0.000505f, -0.009680f, -0.000097f, -0.010512f, -0.008519f, 0.001515f, 0.001005f, 0.004735f, -0.008588f, 0.006924f, -0.009695f, -0.018794f, 0.002284f, 0.005253f, -0.005667f, 0.006211f, -0.003188f, -0.010410f, -0.009163f, -0.012665f, -0.005989f, -0.001312f, 0.002126f, -0.003760f, 0.011836f, 0.000080f, -0.003637f, 0.001068f, 0.000758f, 0.002498f, 0.001881f, 0.001430f, -0.011267f, -0.010533f, 0.002290f, 0.007543f, 0.004476f, 0.001288f, -0.002449f, 0.009360f, 0.005169f, -0.004292f, -0.003156f, -0.010374f, -0.004259f, 0.004701f, 0.002238f, -0.005631f, 0.002335f, -0.001532f, -0.001639f, -0.002612f, -0.003251f, -0.001084f, -0.004303f, -0.003239f, 0.001828f, 0.000918f, 0.002637f, 0.004535f, 0.000388f, 0.003987f, 0.000228f, -0.002531f, 0.003752f, 0.002391f, - -0.000722f, 0.000607f, -0.002099f, -0.002064f, -0.000031f, 0.000257f, -0.002356f, 0.000176f, -0.000703f, -0.000042f, 0.000000f, -0.000448f, 0.002447f, -0.003823f, -0.000599f, -0.001088f, 0.000220f, 0.001423f, 0.002505f, -0.034983f, -0.008828f, 0.001423f, -0.008976f, -0.006499f, -0.011220f, 0.002915f, 0.003884f, 0.007996f, -0.006061f, -0.007442f, -0.008497f, 0.004248f, 0.009371f, -0.004666f, -0.004077f, -0.002374f, -0.001495f, 0.004491f, -0.019572f, -0.004799f, 0.010986f, 0.003619f, -0.005765f, 0.002111f, 0.009727f, -0.000939f, -0.002538f, 0.003440f, -0.000660f, 0.023988f, -0.010356f, 0.005884f, 0.001886f, -0.010073f, 0.003279f, 0.002275f, -0.011524f, 0.008128f, -0.016357f, -0.001566f, 0.014400f, 0.003194f, -0.000458f, -0.003020f, -0.011192f, -0.009613f, 0.002537f, 0.006228f, -0.004234f, 0.003043f, 0.011930f, 0.005949f, -0.005001f, 0.007394f, -0.010651f, -0.024961f, -0.003336f, -0.010953f, 0.006919f, -0.007010f, 0.017714f, 0.008902f, -0.000843f, -0.002894f, -0.023029f, 0.007274f, 0.008769f, -0.007038f, 0.014036f, -0.010904f, 0.004269f, -0.018286f, 0.008475f, 0.006441f, -0.020864f, -0.013246f, - -0.004292f, 0.005171f, 0.006910f, 0.015215f, -0.002121f, -0.000710f, 0.009851f, 0.002312f, 0.000042f, -0.004376f, 0.002251f, 0.002313f, 0.002957f, 0.003262f, 0.000803f, -0.000375f, -0.001899f, -0.002128f, -0.005624f, -0.004641f, 0.003744f, 0.002688f, 0.001929f, 0.004680f, -0.001881f, 0.002278f, 0.002370f, -0.001148f, 0.004004f, -0.000499f, -0.000032f, -0.000917f, -0.004519f, -0.000952f, 0.005216f, 0.001210f, 0.003877f, -0.001399f, 0.001432f, -0.002009f, 0.006204f, 0.000631f, 0.005207f, 0.002336f, -0.002533f, 0.001399f, 0.008793f, 0.014766f, 0.034164f, 0.036427f, 0.007319f, 0.010917f, 0.000119f, 0.005207f, 0.000343f, 0.003845f, -0.009731f, 0.004529f, -0.006046f, 0.008077f, 0.007655f, 0.018760f, 0.002905f, -0.003786f, 0.011768f, 0.008486f, 0.014151f, 0.000706f, 0.008808f, 0.005122f, -0.004351f, 0.004408f, 0.021056f, 0.003355f, -0.009078f, -0.004894f, 0.015584f, 0.009637f, 0.007501f, 0.014487f, -0.011132f, 0.004352f, 0.017268f, -0.017193f, -0.020547f, 0.006798f, 0.011026f, 0.017927f, -0.007762f, -0.013373f, 0.010854f, 0.003937f, -0.001621f, 0.006742f, -0.002714f, -0.001636f, - -0.000098f, 0.025512f, -0.009223f, 0.005173f, -0.006152f, -0.003953f, -0.003004f, 0.013302f, -0.001760f, 0.029690f, 0.014240f, -0.014257f, 0.016595f, 0.003617f, 0.007736f, 0.003566f, 0.003606f, 0.004045f, -0.005435f, 0.010015f, -0.023487f, -0.006209f, 0.010749f, -0.023926f, 0.008192f, -0.019335f, 0.004541f, 0.021332f, 0.005276f, -0.000149f, 0.005864f, 0.002026f, -0.005744f, 0.001433f, -0.006105f, 0.000695f, 0.004917f, -0.014386f, 0.008239f, -0.002625f, -0.003422f, 0.000957f, 0.004460f, -0.003784f, -0.005733f, 0.001920f, 0.005181f, -0.002755f, -0.004851f, -0.004790f, -0.002806f, 0.001977f, -0.003428f, -0.003088f, 0.003226f, 0.004490f, 0.002105f, -0.002408f, 0.002937f, -0.002152f, -0.007414f, -0.003377f, -0.000121f, -0.003797f, 0.002108f, 0.001506f, 0.003095f, 0.005016f, 0.007390f, -0.003534f, 0.010426f, -0.003690f, -0.006110f, -0.002115f, 0.003689f, 0.000760f, -0.006213f, -0.004066f, 0.056326f, 0.009822f, 0.008845f, -0.016481f, 0.024274f, -0.008051f, -0.001081f, -0.006369f, 0.001332f, -0.015775f, -0.001219f, 0.007491f, 0.001754f, -0.012846f, 0.016010f, -0.003834f, -0.008345f, 0.002351f, - 0.005001f, -0.016542f, -0.023322f, 0.009707f, -0.009648f, -0.013718f, 0.002679f, -0.000026f, -0.007099f, 0.012189f, -0.012259f, 0.004086f, 0.011784f, -0.002039f, 0.017183f, 0.005478f, -0.021839f, -0.022741f, -0.009778f, 0.001536f, 0.004121f, -0.017956f, 0.006485f, 0.006618f, 0.003399f, 0.005862f, 0.007925f, -0.018663f, -0.009373f, 0.005499f, -0.020911f, -0.007486f, -0.000527f, -0.021557f, -0.011614f, -0.007325f, 0.004354f, -0.011006f, -0.023536f, -0.011074f, -0.012589f, 0.027314f, 0.013132f, -0.002147f, 0.003703f, -0.007221f, 0.021633f, 0.026071f, 0.002897f, 0.017502f, 0.012681f, 0.005100f, 0.003110f, -0.009973f, -0.002206f, -0.008799f, 0.012602f, -0.016536f, 0.000542f, -0.003921f, -0.025519f, -0.007649f, -0.003694f, 0.013920f, -0.012637f, 0.007018f, 0.005942f, 0.002672f, 0.001317f, 0.006079f, -0.006110f, 0.004866f, -0.003689f, 0.005394f, -0.001361f, 0.007943f, 0.002292f, 0.000747f, -0.004139f, -0.001461f, -0.009972f, 0.005410f, -0.001391f, 0.008536f, -0.008138f, 0.000053f, -0.000848f, 0.005116f, -0.000894f, 0.004578f, 0.001910f, 0.002523f, 0.002400f, 0.001341f, -0.005453f, 0.006369f, - 0.008016f, -0.004012f, -0.005781f, -0.006704f, -0.002809f, -0.000376f, -0.002435f, 0.000755f, -0.038426f, 0.025943f, 0.041640f, -0.031234f, -0.018603f, 0.008580f, 0.007471f, -0.006336f, 0.013683f, 0.003722f, -0.011642f, -0.014225f, -0.000291f, -0.004569f, -0.010157f, 0.005203f, -0.004668f, 0.000670f, 0.011520f, -0.015488f, 0.003267f, 0.002085f, -0.009195f, 0.001328f, -0.014606f, 0.002864f, 0.021459f, 0.010954f, -0.002140f, -0.006880f, -0.001749f, -0.012231f, -0.013025f, 0.006430f, 0.010862f, -0.003405f, -0.005990f, -0.004254f, 0.006504f, 0.010832f, 0.005206f, 0.019830f, -0.010643f, 0.008177f, -0.005119f, 0.001979f, 0.012379f, -0.004415f, -0.003888f, -0.023543f, -0.003590f, -0.018221f, 0.009203f, 0.006302f, 0.023503f, -0.020086f, -0.007391f, -0.019439f, -0.032028f, -0.005347f, 0.013403f, -0.022101f, 0.004941f, -0.002412f, -0.016125f, -0.019006f, -0.023979f, 0.032281f, 0.001248f, 0.019191f, 0.014108f, 0.016311f, -0.007331f, -0.021399f, -0.016201f, -0.020022f, 0.007046f, 0.015779f, -0.014994f, 0.007145f, 0.016816f, -0.011306f, 0.001959f, 0.013659f, 0.015673f, 0.003813f, -0.005564f, 0.006760f, - -0.002765f, 0.003637f, -0.016630f, -0.001466f, 0.006436f, -0.005594f, 0.002175f, 0.001101f, 0.000754f, 0.003796f, 0.006321f, -0.006527f, -0.002318f, 0.003897f, 0.005636f, 0.001645f, 0.002758f, 0.005544f, -0.001141f, 0.005986f, -0.004941f, 0.004126f, 0.006016f, 0.006746f, 0.000776f, -0.002444f, 0.005243f, -0.004160f, 0.001326f, -0.000878f, -0.003577f, -0.001704f, -0.003528f, -0.000882f, 0.001707f, -0.004318f, -0.012144f, 0.004383f, 0.006683f, -0.030059f, 0.021713f, -0.002735f, -0.011273f, 0.018595f, 0.006567f, -0.018109f, -0.025932f, -0.010019f, 0.000067f, 0.000529f, 0.001241f, -0.009245f, 0.029461f, 0.012210f, 0.008892f, 0.006801f, 0.009254f, -0.008971f, 0.002216f, 0.005854f, 0.004292f, 0.026472f, 0.002741f, -0.039455f, 0.004839f, 0.016416f, -0.014738f, -0.022184f, -0.004719f, -0.012047f, -0.007140f, 0.001845f, 0.027872f, 0.016706f, -0.002853f, -0.000642f, -0.008438f, -0.024432f, -0.008290f, -0.020181f, 0.014379f, 0.019709f, 0.000224f, -0.010948f, -0.004018f, -0.004526f, 0.009008f, 0.012550f, 0.013285f, -0.030775f, 0.005908f, 0.001067f, 0.002690f, 0.021406f, -0.012516f, 0.008770f, - -0.011424f, -0.008205f, 0.002231f, 0.014013f, 0.025179f, -0.003989f, -0.016329f, 0.005290f, -0.029373f, 0.023454f, 0.012629f, -0.002890f, -0.012148f, 0.006351f, -0.006803f, -0.014473f, -0.012072f, -0.013118f, -0.006290f, -0.002739f, 0.000872f, 0.012436f, -0.009502f, 0.034170f, 0.001420f, -0.005163f, 0.001957f, 0.010216f, 0.000459f, -0.000359f, 0.011074f, 0.007655f, 0.005713f, 0.000459f, -0.005371f, -0.004120f, -0.001277f, -0.000717f, -0.004954f, -0.013813f, 0.007339f, 0.007019f, -0.005232f, 0.001983f, -0.007685f, -0.005683f, -0.002651f, -0.001430f, -0.000192f, 0.012298f, -0.002506f, -0.003745f, -0.001971f, -0.000621f, 0.007519f, 0.013700f, -0.004427f, 0.007729f, -0.002044f, -0.008398f, 0.009856f, -0.009100f, -0.007426f, -0.004801f, -0.007494f, 0.001726f, 0.005819f, 0.003085f, 0.005967f, 0.000222f, -0.002197f, -0.000414f, -0.006056f, 0.003794f, -0.003456f, -0.013018f, -0.003185f, 0.014419f, -0.025835f, -0.007331f, 0.016726f, -0.021002f, -0.002155f, -0.002085f, -0.002797f, -0.024461f, 0.024320f, 0.010546f, -0.016926f, -0.002909f, -0.007254f, -0.006199f, -0.037172f, -0.005211f, -0.016979f, -0.041958f, - 0.008976f, 0.006500f, -0.019079f, -0.015778f, -0.022485f, -0.025601f, 0.021838f, 0.012326f, 0.022990f, 0.000824f, 0.048232f, 0.002278f, 0.025199f, 0.034672f, -0.004005f, 0.010608f, 0.035721f, -0.024044f, 0.011026f, -0.014484f, 0.024578f, -0.007705f, 0.047854f, 0.021750f, -0.014881f, -0.022483f, 0.003748f, 0.011103f, 0.019968f, 0.005376f, -0.017292f, -0.003979f, 0.015853f, 0.035563f, -0.014837f, 0.023854f, -0.008674f, 0.014562f, -0.027824f, 0.010999f, -0.015122f, 0.011018f, 0.001831f, 0.003676f, -0.005039f, 0.021984f, 0.030694f, -0.055740f, 0.016932f, 0.011621f, 0.008300f, -0.010163f, 0.007355f, -0.039989f, 0.003429f, 0.000718f, -0.006217f, -0.015274f, -0.013261f, -0.013211f, -0.003831f, 0.028538f, -0.016416f, -0.009645f, -0.023101f, 0.000850f, 0.020523f, -0.010265f, -0.011452f, 0.015890f, -0.000565f, 0.011542f, 0.002573f, -0.002814f, 0.000292f, 0.005098f, -0.011031f, 0.005603f, 0.002238f, -0.009487f, -0.007942f, -0.004635f, 0.002792f, 0.006441f, 0.006629f, 0.019345f, -0.002040f, 0.014655f, 0.007209f, 0.004782f, -0.009653f, -0.002997f, -0.014582f, -0.006579f, -0.002422f, -0.004880f, - -0.006918f, 0.008118f, 0.004711f, 0.009697f, 0.012426f, 0.002340f, -0.002795f, -0.001567f, -0.007931f, 0.004837f, 0.027791f, 0.029536f, -0.006442f, 0.030710f, -0.001576f, -0.006405f, 0.002427f, 0.017268f, -0.006465f, -0.007821f, -0.003586f, -0.021828f, 0.003585f, -0.006255f, 0.034388f, 0.022636f, -0.016389f, -0.017365f, -0.032645f, -0.011952f, 0.023710f, 0.042711f, -0.019436f, 0.013194f, 0.002863f, 0.005621f, 0.023270f, 0.016653f, -0.033444f, 0.006644f, -0.011938f, -0.006797f, -0.013795f, -0.007541f, -0.014559f, -0.032238f, 0.005653f, 0.021558f, 0.008270f, 0.050494f, -0.012269f, -0.006965f, 0.035088f, -0.012792f, -0.001950f, -0.007831f, 0.009301f, -0.038532f, -0.024722f, 0.013386f, 0.028830f, 0.042000f, 0.050142f, -0.036847f, -0.019107f, -0.001938f, 0.016780f, -0.001658f, 0.056894f, 0.015827f, 0.008513f, -0.044141f, 0.003074f, 0.000318f, 0.021354f, 0.027847f, -0.020744f, -0.006886f, 0.008717f, -0.009053f, 0.000011f, 0.031640f, 0.011429f, -0.031288f, 0.008177f, 0.016499f, -0.015009f, 0.049208f, -0.017005f, -0.026317f, -0.036926f, 0.027304f, -0.005897f, -0.031007f, -0.024562f, -0.005631f, - -0.001129f, -0.012339f, 0.000753f, -0.013433f, 0.002634f, -0.018702f, 0.001330f, 0.009136f, -0.006427f, 0.007195f, 0.001455f, -0.011311f, 0.001292f, -0.000179f, -0.002142f, 0.001206f, -0.007650f, 0.009290f, 0.000128f, -0.004743f, 0.010661f, 0.010787f, 0.000526f, -0.002977f, 0.004792f, -0.010167f, -0.004182f, -0.008169f, -0.001491f, 0.008391f, -0.006558f, 0.003672f, 0.008327f, -0.015292f, -0.005412f, -0.003153f, 0.002581f, -0.002891f, 0.006654f, 0.014807f, -0.004117f, -0.008852f, -0.004246f, 0.009562f, 0.002788f, 0.000900f, 0.007742f, -0.004445f, -0.003101f, -0.002791f, 0.006841f, 0.058331f, 0.027670f, -0.015324f, -0.004913f, -0.053820f, 0.004212f, 0.014248f, 0.003778f, 0.080286f, -0.010124f, -0.006074f, -0.035236f, -0.030467f, 0.012540f, -0.024911f, -0.015185f, -0.016705f, -0.011205f, 0.019950f, -0.012988f, -0.022902f, -0.019718f, 0.001794f, 0.020171f, -0.025900f, 0.005883f, 0.011719f, 0.002649f, 0.028972f, -0.003309f, 0.002280f, -0.029386f, -0.041433f, -0.017008f, 0.018996f, -0.022803f, 0.005554f, -0.019135f, -0.072339f, -0.038892f, 0.021695f, 0.001614f, -0.041448f, 0.006457f, 0.057757f, - -0.002601f, -0.001490f, -0.022481f, 0.012645f, -0.024814f, -0.044591f, 0.001194f, 0.006789f, -0.017236f, 0.008575f, 0.016860f, -0.004121f, -0.014511f, 0.012048f, 0.015688f, 0.028991f, -0.016595f, 0.021793f, 0.027988f, 0.011780f, 0.048620f, 0.005471f, -0.030100f, 0.035422f, 0.002223f, 0.005954f, -0.006364f, -0.007095f, 0.021964f, -0.021611f, -0.003011f, 0.053893f, 0.042342f, -0.026103f, 0.027143f, -0.007765f, 0.050091f, 0.021104f, -0.017216f, -0.039869f, -0.001618f, -0.014546f, -0.017205f, 0.011314f, -0.015486f, -0.000414f, -0.003863f, -0.013891f, -0.023236f, -0.004512f, 0.019930f, -0.021222f, 0.000266f, -0.013152f, 0.002185f, 0.008410f, -0.008453f, -0.024833f, -0.004224f, -0.011713f, 0.015343f, 0.009267f, -0.005892f, -0.016400f, -0.006662f, -0.017648f, 0.010868f, -0.008621f, 0.005996f, 0.007063f, 0.010377f, 0.008223f, -0.013582f, -0.009670f, -0.015279f, 0.004689f, 0.010164f, 0.001411f, 0.020021f, 0.021114f, 0.011634f, 0.008653f, -0.041907f, -0.044476f, -0.053132f, 0.073243f, -0.040553f, 0.009623f, -0.002246f, -0.023304f, 0.037196f, -0.043754f, 0.018923f, 0.077884f, 0.047947f, 0.011100f, - -0.063157f, -0.003576f, -0.041671f, -0.021169f, -0.038053f, -0.003646f, 0.010816f, -0.006883f, 0.029924f, -0.014417f, 0.004977f, 0.014760f, 0.041820f, 0.005784f, 0.005774f, 0.050583f, -0.033322f, -0.004759f, 0.022324f, -0.009802f, -0.025844f, -0.017213f, 0.025504f, -0.022274f, 0.010696f, 0.043288f, -0.012060f, -0.078161f, -0.004775f, 0.019509f, -0.095956f, 0.057854f, 0.044648f, -0.036451f, 0.059507f, 0.040282f, 0.026554f, 0.061677f, 0.001327f, 0.031660f, 0.003656f, 0.003677f, 0.022237f, -0.039309f, 0.039151f, 0.053114f, 0.040928f, -0.042318f, -0.008268f, 0.058378f, -0.028379f, 0.046269f, 0.042496f, 0.099260f, 0.059930f, 0.003321f, 0.006872f, -0.012946f, 0.012462f, 0.017202f, -0.057593f, -0.082520f, -0.028707f, 0.007054f, 0.003074f, -0.011964f, 0.064489f, 0.030280f, 0.012149f, -0.028486f, 0.025572f, -0.020228f, -0.025476f, -0.013150f, 0.029195f, 0.033873f, 0.006560f, -0.006268f, -0.006552f, 0.000869f, -0.039956f, -0.009616f, -0.010320f, 0.012766f, 0.007424f, -0.020897f, -0.015797f, -0.001139f, 0.031497f, -0.008954f, -0.012141f, 0.000655f, -0.012574f, -0.032104f, 0.015974f, -0.007075f, - -0.012489f, -0.018915f, 0.000110f, 0.010397f, 0.002085f, -0.056956f, -0.003218f, 0.027745f, -0.004248f, 0.000897f, 0.004669f, 0.007878f, 0.023799f, 0.018701f, 0.000831f, -0.000505f, -0.009141f, -0.003196f, 0.044722f, 0.055321f, -0.108540f, -0.099392f, 0.043350f, -0.028564f, -0.031302f, -0.013030f, -0.037828f, 0.013441f, -0.061279f, 0.077374f, 0.029089f, -0.032237f, -0.000693f, -0.031534f, -0.023718f, -0.025417f, -0.029101f, -0.018857f, -0.073918f, -0.066413f, -0.012390f, -0.015079f, 0.004225f, 0.006315f, 0.012851f, -0.004659f, 0.009428f, 0.012386f, 0.032888f, 0.036433f, -0.013742f, -0.018395f, -0.021573f, -0.018285f, -0.041833f, 0.062264f, -0.021990f, 0.015197f, 0.046221f, 0.043710f, -0.016591f, -0.018707f, -0.034834f, -0.022856f, -0.028605f, 0.047858f, 0.005088f, 0.005916f, -0.059220f, -0.020990f, 0.085568f, -0.008291f, 0.079662f, -0.016088f, -0.029868f, -0.018822f, -0.033763f, -0.034555f, -0.006359f, 0.000386f, -0.047541f, 0.003996f, 0.022694f, -0.001922f, 0.017832f, -0.109686f, -0.044350f, -0.030708f, 0.058226f, -0.013919f, 0.009565f, 0.019899f, 0.091420f, 0.025943f, -0.008452f, -0.009316f, - 0.078718f, 0.047561f, 0.011591f, 0.015362f, -0.004055f, 0.062519f, -0.026086f, -0.035655f, 0.019250f, 0.029384f, 0.052160f, 0.048549f, -0.028479f, 0.032947f, 0.024620f, 0.026550f, 0.007874f, -0.018987f, -0.037521f, -0.031840f, 0.019805f, 0.027477f, 0.014653f, 0.009876f, 0.032424f, -0.003206f, -0.009009f, -0.001865f, -0.002737f, 0.016893f, 0.010118f, 0.022047f, 0.038524f, 0.027209f, 0.044072f, 0.011897f, -0.039701f, 0.012578f, 0.010559f, 0.034461f, -0.000689f, 0.027001f, 0.011487f, 0.025965f, 0.000561f, -0.049892f, -0.006487f, -0.010977f, -0.003391f, -0.057345f, 0.119110f, -0.038461f, -0.023909f, 0.070588f, -0.044746f, -0.067564f, 0.062671f, -0.090950f, -0.026301f, 0.021442f, 0.015621f, -0.063441f, -0.024880f, 0.054459f, 0.000355f, -0.010731f, -0.035415f, 0.042745f, -0.042398f, 0.002812f, 0.033654f, -0.011227f, 0.030901f, 0.000222f, -0.015255f, 0.010352f, 0.007345f, -0.018421f, 0.029383f, -0.016163f, -0.006547f, 0.008777f, -0.000575f, 0.001830f, -0.005514f, 0.008726f, 0.018649f, 0.030145f, 0.043392f, 0.021286f, -0.017917f, -0.004996f, -0.027518f, 0.025443f, -0.009150f, -0.039760f, - 0.009342f, 0.000171f, -0.022651f, -0.054353f, 0.038279f, 0.002906f, -0.025153f, 0.061451f, 0.003538f, -0.019009f, -0.011082f, 0.091015f, -0.085129f, -0.091634f, 0.055886f, 0.087241f, -0.160943f, 0.000798f, -0.059574f, -0.054076f, -0.023941f, 0.058579f, -0.045237f, 0.077520f, -0.010970f, -0.001899f, 0.104158f, -0.029396f, -0.080635f, 0.100138f, 0.117926f, -0.114513f, 0.128024f, -0.043124f, 0.003155f, 0.105853f, -0.035422f, -0.040486f, 0.029022f, 0.028465f, -0.013612f, -0.005329f, 0.019642f, 0.003933f, 0.002506f, -0.025169f, 0.034808f, 0.000227f, -0.002278f, 0.000693f, 0.004671f, 0.015755f, 0.009512f, -0.012668f, -0.013885f, 0.014675f, 0.034707f, -0.030017f, -0.027863f, -0.007447f, 0.036342f, -0.001229f, 0.019411f, -0.005219f, 0.008089f, 0.000203f, 0.008278f, -0.004084f, -0.006392f, -0.042880f, -0.018045f, 0.010835f, -0.015526f, -0.004249f, -0.015277f, -0.023120f, 0.036277f, 0.022777f, -0.063183f, 0.025313f, 0.032736f, -0.006317f, -0.000277f, -0.022137f, 0.032400f, 0.070874f, -0.033128f, -0.044900f, -0.012343f, 0.011250f, 0.072036f, 0.053810f, -0.018808f, -0.005732f, 0.022495f, 0.058620f, - -0.019526f, -0.003284f, 0.035953f, -0.046075f, -0.039618f, 0.031587f, -0.021036f, -0.015695f, -0.019373f, -0.001743f, -0.031918f, 0.002561f, 0.021880f, -0.013409f, 0.016896f, -0.015010f, -0.009442f, -0.009453f, -0.044148f, 0.006608f, -0.017886f, 0.027100f, 0.057784f, 0.003231f, 0.028791f, 0.023935f, 0.002192f, 0.010970f, 0.018072f, 0.061371f, -0.043402f, 0.029684f, 0.026044f, -0.031354f, 0.020997f, 0.020516f, 0.006509f, -0.027821f, -0.055755f, -0.056316f, 0.018571f, 0.020263f, -0.021304f, -0.094149f, 0.076584f, -0.025750f, -0.041287f, -0.023795f, 0.077038f, -0.036205f, 0.084247f, 0.000045f, 0.028288f, -0.079278f, 0.074953f, -0.034310f, 0.033198f, -0.010114f, -0.108541f, -0.034170f, 0.021361f, -0.067008f, 0.068917f, 0.007432f, -0.099514f, -0.111855f, -0.057583f, 0.077796f, 0.019197f, -0.069428f, 0.084657f, -0.091041f, -0.004494f, 0.164447f, 0.024597f, 0.009366f, 0.016342f, 0.012483f, -0.043167f, 0.044961f, 0.003327f, 0.022983f, -0.028975f, 0.043218f, -0.023875f, -0.022738f, -0.019072f, -0.002409f, -0.001195f, 0.013100f, -0.004344f, -0.006340f, 0.008475f, -0.015045f, -0.031151f, 0.028344f, - -0.010467f, -0.004861f, -0.036965f, 0.016898f, 0.008202f, 0.016038f, 0.004385f, 0.018504f, -0.013724f, 0.004369f, 0.051122f, -0.005946f, 0.000532f, 0.027106f, -0.029065f, -0.006119f, 0.001494f, -0.002908f, 0.019881f, -0.020566f, 0.022321f, -0.007808f, -0.057816f, 0.003736f, -0.015120f, 0.016997f, -0.019244f, 0.022361f, -0.035900f, -0.068619f, 0.000289f, -0.072891f, 0.020012f, -0.006514f, -0.013036f, 0.024346f, 0.040265f, -0.025843f, 0.005785f, 0.044223f, -0.034668f, 0.059989f, -0.007999f, -0.066041f, 0.056646f, -0.027267f, -0.012108f, 0.050415f, -0.064608f, 0.017017f, 0.001107f, 0.023431f, -0.010140f, -0.023737f, -0.098607f, 0.022604f, -0.040691f, -0.099078f, 0.119763f, -0.080633f, -0.033569f, -0.016021f, -0.027247f, -0.060864f, 0.034163f, 0.082631f, -0.051133f, 0.023183f, -0.074179f, -0.041985f, -0.042257f, 0.037337f, 0.006745f, 0.108433f, -0.018637f, -0.009060f, -0.032333f, -0.093558f, 0.000128f, 0.045469f, -0.034554f, 0.038166f, 0.045936f, -0.038757f, 0.003893f, -0.033052f, -0.138167f, -0.072503f, -0.042506f, -0.145214f, 0.092842f, 0.122263f, 0.057538f, -0.123129f, -0.098939f, -0.220876f, - 0.031964f, 0.262570f, 0.121486f, 0.046387f, -0.069000f, -0.242265f, -0.055000f, 0.056084f, 0.165619f, 0.166051f, -0.112818f, -0.095462f, -0.044304f, 0.021670f, 0.011466f, 0.180391f, 0.003058f, -0.021986f, 0.014710f, -0.017883f, -0.044021f, 0.063461f, 0.011418f, -0.013608f, 0.035143f, -0.028772f, -0.049102f, 0.034832f, 0.030166f, -0.083659f, 0.056372f, -0.012516f, -0.018409f, -0.044573f, 0.047348f, -0.045037f, 0.054189f, -0.026652f, 0.055464f, -0.065379f, 0.026175f, -0.018273f, 0.000880f, 0.047268f, 0.077321f, 0.021907f, -0.028723f, -0.020426f, -0.004808f, 0.042733f, -0.006824f, 0.061447f, -0.048050f, -0.037822f, 0.017686f, 0.060915f, 0.007165f, 0.037139f, -0.103956f, 0.075413f, -0.014800f, -0.016509f, 0.001872f, 0.033964f, 0.000644f, -0.006508f, 0.025132f, 0.008641f, 0.008371f, 0.040066f, -0.025391f, -0.000283f, 0.020806f, -0.007255f, -0.003782f, 0.025262f, -0.023457f, -0.005694f, 0.007105f, 0.039710f, -0.026255f, -0.018639f, 0.022230f, -0.001056f, 0.012478f, -0.039348f, 0.051600f, -0.012309f, 0.017411f, -0.011288f, 0.006645f, 0.028109f, 0.012372f, -0.006621f, 0.024189f, -0.009234f, - 0.024448f, -0.019294f, -0.001447f, 0.025210f, -0.005821f, -0.010530f, -0.050951f, 0.005127f, 0.039371f, 0.004078f, 0.018449f, -0.025839f, -0.008192f, -0.015497f, -0.016209f, -0.006705f, 0.028479f, -0.010464f, 0.017352f, -0.022515f, -0.026829f, -0.011582f, 0.006369f, 0.052016f, -0.019991f, 0.023611f, 0.001556f, 0.005102f, -0.025474f, 0.013832f, 0.027032f, 0.001370f, -0.024628f, 0.018938f, -0.016414f, 0.012664f, -0.010018f, -0.007339f, -0.009585f, 0.003435f, 0.018959f, -0.009652f, -0.004875f, 0.008673f, -0.001143f, -0.014510f, -0.003093f, 0.014050f, 0.012002f, -0.012598f, 0.002113f, 0.012829f, 0.000525f, -0.007970f, 0.002076f, -0.012680f, 0.009408f, -0.000885f, 0.004804f, -0.005815f, 0.002444f, 0.008132f, -0.004124f, 0.009546f, 0.001833f, 0.008698f, 0.006701f, -0.014314f, -0.014445f, -0.004984f, 0.025218f, -0.016158f, 0.017515f, 0.013938f, -0.010265f, -0.026144f, 0.019732f, -0.016817f, 0.022296f, -0.002171f, -0.003724f, -0.009266f, 0.003697f, 0.003631f, -0.001380f, -0.003060f, 0.001869f, 0.098955f, 0.019685f, -0.053078f, -0.037654f, -0.058621f, -0.018549f, 0.011244f, 0.031150f, -0.009754f, - -0.012544f, -0.010869f, -0.010406f, -0.009908f, 0.014258f, -0.007258f, -0.001952f, -0.003173f, -0.010272f, -0.002502f, 0.015672f, 0.002198f, -0.004481f, -0.015666f, 0.017982f, -0.023309f, 0.013722f, -0.008353f, -0.022790f, 0.000052f, 0.010458f, 0.011663f, 0.009213f, -0.013539f, 0.003059f, -0.004375f, -0.007334f, 0.027452f, -0.024434f, -0.004521f, -0.000938f, -0.001745f, 0.002639f, -0.004151f, -0.014323f, 0.012055f, -0.022734f, 0.021688f, -0.003118f, -0.015328f, 0.005345f, -0.007935f, 0.019416f, -0.011370f, -0.006765f, 0.020828f, -0.018639f, 0.006455f, -0.008879f, -0.002115f, 0.016101f, -0.011496f, -0.004462f, 0.014303f, -0.009767f, 0.003723f, 0.001569f, -0.011714f, 0.028452f, -0.024823f, -0.002019f, 0.010864f, -0.006204f, 0.018071f, -0.008122f, -0.004049f, 0.004841f, 0.005934f, -0.001854f, 0.003971f, -0.001503f, -0.008076f, 0.007305f, -0.000049f, 0.000807f, 0.003909f, -0.000412f, 0.005618f, -0.005604f, 0.001623f, 0.001242f, 0.001236f, -0.000598f, -0.003564f, 0.004733f, -0.000700f, -0.001115f, -0.003381f, 0.004197f, 0.006634f, -0.002155f, -0.003445f, 0.002185f, 0.003866f, -0.004806f, 0.004036f, - -0.003600f, -0.003223f, 0.010778f, -0.001661f, 0.004044f, 0.005599f, -0.007280f, 0.018131f, -0.005859f, -0.000975f, -0.000813f, -0.010500f, 0.010945f, -0.006792f, -0.010758f, -0.046850f, -0.070402f, 0.092275f, 0.287858f, 0.024648f, 0.025062f, -0.196236f, -0.248225f, -0.051718f, -0.052574f, 0.146219f, 0.248871f, 0.127710f, 0.024587f, -0.090046f, -0.175216f, -0.123678f, -0.088425f, -0.004587f, 0.121251f, 0.177180f, 0.095755f, 0.021943f, -0.062117f, -0.110414f, -0.061825f, -0.059484f, -0.055709f, 0.035214f, 0.072193f, 0.071154f, 0.071684f, 0.017237f, -0.031071f, -0.012749f, -0.047225f, -0.073929f, -0.008188f, -0.022043f, -0.014917f, 0.066759f, 0.038575f, 0.055773f, 0.033829f, -0.025281f, -0.060833f, -0.014648f, -0.039538f, -0.006104f, 0.027659f, 0.008480f, 0.014946f, 0.030173f, -0.015290f, -0.021399f, -0.004924f, -0.012571f, 0.012179f, 0.019484f, 0.001060f, 0.024052f, 0.014272f, -0.025239f, -0.024281f, -0.038691f, -0.033089f, 0.001476f, 0.039927f, 0.060522f, 0.029154f, 0.007661f, -0.014064f, -0.040502f, -0.006948f, -0.045669f, -0.028021f, 0.021514f, 0.016876f, 0.051167f, 0.017238f, -0.013013f, - 0.015077f, -0.026516f, -0.046022f, 0.008109f, 0.011674f, 0.015439f, 0.014265f, -0.002873f, -0.005751f, -0.004396f, -0.019136f, -0.014660f, 0.010037f, 0.015621f, 0.015705f, 0.015940f, -0.004416f, -0.015398f, -0.010210f, -0.005910f, 0.000407f, -0.000317f, -0.017424f, 0.004465f, 0.021938f, 0.011842f, 0.013651f, -0.004064f, -0.022082f, -0.012826f, -0.013039f, 0.005099f, 0.015479f, 0.010215f, 0.009560f, 0.004140f, -0.003168f, -0.016748f, -0.022071f, -0.010101f, 0.001340f, 0.013636f, 0.021746f, 0.013319f, 0.013396f, 0.008458f, -0.013860f, -0.025697f, -0.032994f, -0.021388f, 0.009194f, 0.018457f, 0.023937f, 0.033222f, 0.010066f, -0.010005f, -0.016845f, -0.013658f, -0.010169f, -0.009592f, -0.009776f, -0.002875f, 0.007341f, 0.014590f, 0.012818f, 0.010056f, 0.006927f, 0.001490f, -0.009461f, -0.016307f, -0.015792f, -0.008083f, -0.000509f, 0.005885f, 0.005922f, 0.003451f, 0.000632f, 0.000498f, -0.000173f}, - {0.002348f, 0.006368f, 0.005018f, -0.001687f, 0.003852f, 0.001794f, 0.011038f, -0.001952f, -0.000264f, 0.001356f, 0.008087f, -0.001625f, -0.008375f, -0.003941f, -0.008038f, 0.001932f, -0.002842f, -0.000709f, -0.000989f, 0.001913f, 0.000809f, 0.001602f, 0.004705f, 0.008555f, -0.003788f, -0.002150f, 0.001746f, -0.004093f, -0.000529f, 0.006665f, -0.003610f, 0.008247f, 0.000885f, -0.003013f, 0.005534f, -0.007552f, -0.001893f, -0.005274f, 0.007377f, -0.000260f, -0.002680f, -0.002039f, 0.000121f, 0.006785f, 0.000309f, 0.008175f, 0.003190f, -0.006796f, 0.005504f, -0.002995f, -0.005011f, -0.004164f, 0.005656f, -0.001214f, 0.017952f, 0.001860f, 0.004539f, 0.003219f, -0.008317f, 0.000083f, -0.001198f, 0.002145f, -0.004708f, -0.003246f, 0.009371f, 0.007610f, 0.000726f, 0.003140f, -0.000822f, 0.004722f, -0.007671f, 0.000748f, 0.005818f, 0.003609f, 0.000621f, -0.000631f, 0.004155f, -0.006571f, -0.002981f, 0.006924f, -0.004544f, 0.001447f, 0.003418f, 0.004082f, 0.001294f, -0.005258f, -0.003455f, 0.002723f, 0.000636f, 0.002700f, -0.000802f, 0.000756f, -0.002583f, -0.000177f, -0.001274f, -0.000797f, - 0.001513f, 0.002836f, 0.001230f, -0.001692f, -0.000623f, -0.001153f, 0.000698f, 0.001726f, -0.001015f, 0.001268f, 0.000970f, 0.001798f, -0.000239f, 0.002163f, -0.000868f, 0.000525f, 0.001360f, 0.001691f, -0.013665f, -0.012346f, -0.007671f, -0.006998f, -0.006051f, 0.002319f, 0.008636f, 0.017581f, 0.003383f, 0.004532f, -0.000025f, -0.012555f, -0.005242f, -0.004664f, -0.011264f, 0.017547f, 0.004678f, 0.006970f, 0.004833f, -0.003880f, 0.001803f, 0.016802f, 0.006723f, -0.003951f, -0.000306f, -0.004073f, 0.000372f, -0.007773f, 0.004698f, -0.002448f, -0.003463f, 0.000671f, 0.008951f, 0.000951f, 0.003139f, 0.005603f, 0.007766f, -0.013860f, 0.000207f, 0.003534f, 0.008100f, 0.012416f, -0.006871f, -0.001386f, -0.003311f, 0.010361f, 0.005637f, 0.006688f, -0.001069f, 0.003112f, 0.020727f, -0.013050f, 0.002660f, 0.001240f, -0.008697f, 0.003745f, -0.012165f, -0.001618f, 0.003177f, -0.002616f, -0.018360f, 0.005189f, 0.001321f, -0.004948f, -0.005051f, -0.000822f, -0.002716f, 0.006247f, -0.005784f, -0.002554f, 0.001869f, -0.000162f, -0.005623f, -0.000241f, 0.004715f, -0.007673f, 0.000746f, -0.002068f, - -0.001784f, -0.002364f, -0.001292f, 0.001212f, -0.004426f, -0.003349f, 0.000737f, -0.002653f, -0.003483f, -0.003620f, -0.001179f, -0.002391f, 0.004547f, -0.003902f, -0.001035f, 0.000672f, 0.002328f, -0.000220f, 0.000236f, -0.001333f, 0.000357f, -0.002321f, 0.001864f, -0.003330f, 0.018464f, 0.001703f, 0.006573f, -0.000700f, -0.005058f, 0.000469f, 0.012947f, 0.006737f, 0.008324f, 0.013536f, -0.006034f, 0.000204f, 0.012990f, 0.004248f, 0.005657f, 0.000811f, 0.001520f, 0.007729f, -0.007026f, -0.001978f, 0.009633f, -0.006554f, 0.003708f, 0.005600f, -0.004239f, 0.004133f, 0.012944f, -0.006116f, 0.004719f, 0.001100f, 0.000409f, 0.000232f, -0.002815f, -0.008833f, -0.002858f, -0.007391f, -0.000889f, 0.003184f, 0.006139f, 0.006667f, -0.001296f, -0.011098f, -0.001133f, 0.016364f, -0.006157f, 0.003357f, -0.003043f, -0.017081f, 0.009896f, 0.002585f, 0.007314f, -0.001177f, 0.008344f, 0.008323f, -0.014720f, 0.005897f, 0.000308f, 0.005540f, -0.001221f, -0.010159f, -0.000632f, -0.001369f, -0.002027f, -0.001854f, 0.006380f, 0.000046f, 0.001123f, 0.013325f, 0.002412f, 0.010611f, 0.000183f, 0.001105f, - 0.001859f, -0.005694f, -0.009258f, 0.006314f, -0.007047f, 0.004181f, 0.002392f, -0.000270f, 0.004174f, -0.004508f, -0.002782f, 0.003003f, -0.000017f, -0.008697f, 0.002663f, 0.001129f, 0.000968f, -0.001687f, 0.003640f, 0.000455f, -0.001695f, 0.004337f, -0.001144f, -0.000275f, -0.003711f, 0.001356f, -0.001942f, 0.000703f, -0.000153f, -0.000430f, 0.000666f, -0.001251f, 0.002110f, 0.000622f, -0.001087f, 0.000756f, -0.000727f, 0.000343f, -0.000293f, -0.001317f, 0.030346f, 0.017074f, 0.025962f, 0.008446f, -0.010795f, 0.005534f, -0.004849f, 0.000748f, 0.002496f, -0.022134f, -0.005934f, -0.006084f, 0.005689f, 0.008719f, -0.003620f, -0.000496f, 0.002892f, 0.000715f, 0.015818f, -0.001736f, -0.016660f, 0.005426f, -0.009649f, 0.007397f, 0.008388f, 0.006733f, 0.009777f, -0.002353f, -0.003435f, 0.003990f, -0.002983f, -0.003860f, 0.002786f, -0.002577f, 0.005850f, 0.008442f, -0.003687f, -0.012798f, 0.004083f, -0.012449f, -0.008062f, -0.001568f, -0.025942f, 0.000252f, -0.004416f, 0.010153f, 0.009645f, 0.004678f, 0.015822f, 0.015960f, 0.007029f, 0.003549f, -0.001201f, 0.000769f, 0.000855f, -0.007250f, - 0.014773f, -0.001988f, 0.005107f, -0.004712f, -0.005696f, -0.002052f, -0.008514f, 0.007455f, -0.003963f, -0.003150f, 0.014486f, -0.012123f, -0.003761f, 0.003060f, -0.005598f, -0.001701f, -0.000493f, 0.005073f, 0.005966f, 0.004016f, 0.010303f, -0.003411f, -0.002861f, -0.001526f, -0.006557f, 0.003418f, 0.006603f, 0.009101f, -0.000208f, -0.001405f, -0.001976f, 0.000087f, 0.001933f, 0.001899f, -0.002774f, 0.003009f, -0.000071f, 0.002162f, 0.001828f, -0.000397f, -0.000750f, 0.003893f, -0.001160f, 0.001953f, 0.001584f, 0.001794f, 0.001594f, -0.001150f, 0.001443f, 0.006593f, -0.000517f, 0.000301f, 0.000754f, 0.004859f, 0.000853f, -0.001124f, -0.003501f, -0.011560f, -0.026610f, -0.009519f, -0.002764f, 0.003766f, -0.003286f, 0.008038f, -0.001750f, 0.012989f, -0.011699f, 0.006855f, -0.002871f, 0.023910f, 0.010075f, -0.005299f, -0.010225f, 0.005474f, -0.014562f, -0.007888f, 0.005674f, -0.005230f, -0.008666f, 0.016501f, 0.006964f, -0.001051f, -0.007606f, -0.010464f, 0.007087f, 0.005304f, 0.005308f, -0.000564f, -0.002516f, -0.006514f, 0.009828f, -0.012858f, -0.005395f, -0.000714f, 0.009131f, 0.006807f, - -0.000575f, 0.009860f, 0.001339f, -0.004803f, 0.002114f, -0.004785f, -0.004763f, -0.005757f, 0.007121f, -0.005296f, -0.000077f, 0.009162f, 0.013980f, 0.014076f, 0.005921f, 0.004896f, -0.000822f, 0.007909f, -0.003128f, 0.011436f, -0.001900f, 0.007239f, 0.005808f, -0.004915f, 0.000714f, -0.005371f, 0.005755f, 0.004768f, 0.002096f, -0.001938f, -0.009609f, 0.006729f, -0.010467f, -0.001418f, -0.011335f, 0.004076f, -0.000711f, -0.001235f, 0.002323f, -0.009872f, 0.000595f, 0.002406f, 0.015965f, 0.005006f, 0.002816f, 0.003626f, 0.006327f, 0.002597f, 0.003364f, -0.004836f, 0.003714f, 0.002569f, -0.006313f, -0.000670f, 0.000523f, 0.001259f, 0.002949f, -0.003322f, 0.002236f, -0.002195f, 0.000629f, -0.000517f, 0.004183f, 0.000296f, 0.000693f, 0.000357f, 0.001538f, -0.000956f, 0.003817f, -0.002104f, 0.001556f, 0.001284f, 0.003689f, 0.001539f, 0.005045f, -0.003629f, 0.002005f, -0.000950f, 0.005788f, 0.002022f, 0.002195f, -0.000845f, -0.000579f, 0.000316f, -0.000884f, -0.003766f, -0.012385f, -0.026109f, -0.021027f, 0.001283f, -0.017964f, -0.008892f, -0.025454f, -0.013597f, -0.015509f, 0.006146f, - -0.008280f, -0.011071f, -0.003766f, 0.000570f, -0.006540f, -0.024778f, 0.006655f, -0.004414f, 0.002495f, -0.011239f, 0.011174f, 0.004097f, 0.000260f, -0.010006f, -0.004432f, 0.012619f, 0.008639f, 0.000517f, -0.001882f, -0.008541f, 0.005300f, 0.002700f, 0.005487f, -0.010219f, -0.000946f, -0.008312f, -0.007414f, -0.008134f, 0.000838f, 0.016352f, -0.013384f, 0.000234f, -0.012752f, 0.001250f, 0.005929f, 0.007385f, -0.013449f, 0.013462f, 0.016405f, -0.005472f, -0.003915f, -0.002928f, -0.000660f, 0.005154f, 0.006611f, 0.001575f, 0.004492f, -0.008069f, -0.001573f, -0.003041f, 0.014104f, -0.004495f, 0.015609f, -0.000474f, -0.004821f, 0.012395f, -0.001328f, -0.007537f, 0.002638f, 0.013433f, 0.015530f, -0.001249f, -0.004904f, -0.008558f, 0.005325f, -0.011397f, -0.001161f, 0.007485f, -0.005837f, 0.003322f, -0.000445f, -0.000161f, -0.004706f, 0.000009f, -0.003662f, -0.005756f, -0.000631f, 0.004691f, 0.002475f, 0.004671f, -0.002196f, -0.001645f, -0.003882f, 0.001390f, -0.003153f, 0.004863f, 0.002455f, 0.006834f, 0.000581f, -0.001725f, -0.000697f, -0.001337f, -0.002541f, 0.003071f, -0.002262f, -0.001362f, - 0.001211f, 0.000956f, -0.003516f, -0.001304f, 0.000814f, -0.000007f, -0.001993f, -0.003424f, -0.000317f, -0.003168f, -0.002225f, -0.001396f, 0.003876f, -0.000411f, 0.001256f, 0.001080f, 0.000037f, -0.002509f, -0.000855f, -0.020203f, -0.019987f, -0.023211f, 0.006868f, -0.018808f, -0.007749f, 0.017974f, 0.008850f, -0.020408f, -0.001308f, 0.000148f, 0.009007f, 0.013260f, 0.022800f, -0.006201f, -0.008110f, -0.022403f, -0.027374f, -0.016262f, -0.005455f, 0.011138f, -0.011065f, 0.005334f, -0.015743f, 0.016385f, -0.011796f, 0.013148f, -0.006053f, 0.001799f, 0.003515f, -0.002705f, -0.011631f, 0.018490f, -0.015935f, -0.000865f, -0.008466f, 0.002211f, -0.009875f, 0.002230f, -0.040018f, 0.000588f, 0.018746f, -0.023930f, 0.005539f, 0.016241f, 0.005947f, -0.012497f, -0.001288f, 0.019561f, -0.024093f, -0.000153f, 0.010003f, 0.009426f, 0.009411f, -0.003567f, -0.003395f, -0.015721f, -0.007655f, 0.006335f, 0.010787f, 0.016921f, 0.020845f, -0.030608f, 0.011730f, -0.009293f, 0.002354f, -0.021605f, -0.008634f, 0.017646f, 0.004449f, 0.002355f, -0.011702f, -0.000068f, 0.011557f, 0.008239f, 0.005226f, -0.010741f, - -0.006763f, 0.011013f, -0.002820f, -0.004785f, -0.002272f, -0.007931f, 0.006819f, -0.001382f, -0.006071f, -0.002463f, -0.001996f, 0.001512f, -0.003876f, -0.004355f, 0.001609f, 0.001425f, 0.001844f, -0.002523f, -0.003406f, 0.002932f, -0.002127f, -0.008203f, -0.000575f, -0.002514f, 0.005054f, -0.003864f, 0.000397f, 0.000285f, 0.002109f, -0.005181f, -0.002705f, -0.001944f, 0.000687f, 0.005272f, -0.000482f, -0.001399f, 0.003469f, -0.000057f, 0.003415f, -0.001662f, -0.003457f, -0.001485f, -0.005966f, 0.001258f, 0.000105f, -0.004387f, 0.002440f, 0.023901f, 0.040019f, 0.022176f, 0.026104f, 0.003910f, 0.009302f, 0.034993f, -0.001047f, 0.000992f, 0.024042f, -0.011786f, 0.000108f, 0.006843f, 0.012011f, 0.019736f, -0.016056f, -0.023022f, 0.012712f, 0.006978f, -0.013284f, 0.002807f, 0.008243f, -0.005168f, 0.004759f, -0.012417f, -0.002743f, -0.014493f, 0.004496f, 0.015690f, 0.004947f, 0.013739f, 0.010713f, 0.011172f, -0.027260f, 0.001386f, 0.031848f, -0.003828f, -0.000512f, 0.029586f, -0.003849f, -0.001090f, 0.004446f, -0.003947f, -0.000813f, 0.016361f, 0.025820f, -0.025347f, -0.004068f, 0.005015f, - -0.007711f, 0.011914f, -0.003965f, 0.001142f, 0.001935f, -0.005549f, 0.022739f, -0.002935f, -0.008203f, 0.008472f, -0.008508f, -0.014176f, 0.004939f, 0.015431f, 0.005901f, -0.001740f, 0.003190f, 0.014767f, 0.007784f, 0.013229f, 0.004056f, 0.001632f, -0.000092f, -0.013010f, -0.002631f, -0.010194f, -0.002271f, -0.004286f, -0.023091f, -0.010034f, 0.001552f, 0.014924f, -0.006077f, 0.005768f, -0.003910f, -0.012244f, 0.005491f, 0.001329f, -0.003835f, 0.001923f, -0.007398f, 0.000376f, 0.001912f, 0.004579f, 0.006572f, -0.001554f, 0.004255f, -0.005613f, -0.008268f, -0.009956f, -0.000998f, 0.009023f, -0.001571f, -0.000702f, 0.003069f, 0.000501f, 0.001052f, 0.004863f, -0.002296f, -0.000890f, -0.002594f, 0.006992f, 0.000219f, -0.001029f, 0.000877f, -0.001758f, -0.003667f, -0.004464f, 0.001905f, 0.003977f, 0.004997f, 0.002736f, 0.002015f, -0.000861f, -0.000262f, 0.000086f, -0.001557f, -0.006863f, 0.067447f, 0.009351f, -0.001439f, -0.000408f, -0.032369f, -0.009469f, 0.003126f, -0.007550f, 0.014284f, 0.006284f, 0.023152f, -0.002947f, 0.000038f, -0.004994f, -0.009785f, 0.015532f, 0.002922f, 0.005943f, - 0.008723f, 0.012160f, -0.011433f, -0.011515f, -0.013308f, -0.009262f, -0.007623f, -0.003341f, -0.018283f, -0.003587f, 0.029530f, 0.013922f, -0.005616f, -0.001995f, -0.003470f, 0.002466f, 0.010461f, -0.005114f, 0.042199f, -0.007334f, -0.001148f, -0.019152f, 0.007655f, 0.018411f, -0.003165f, -0.014092f, -0.001828f, 0.007093f, 0.014133f, 0.006106f, 0.019867f, 0.029676f, 0.009668f, -0.000630f, 0.017628f, 0.014403f, 0.005385f, 0.011133f, -0.036988f, 0.008588f, 0.000978f, -0.032726f, 0.012023f, -0.000763f, -0.014101f, 0.009229f, -0.014954f, -0.014548f, 0.017359f, 0.013662f, -0.007710f, -0.028953f, -0.013105f, 0.006965f, -0.016645f, -0.003385f, 0.007282f, 0.028459f, -0.004611f, 0.005764f, -0.014826f, -0.031241f, -0.016781f, -0.014962f, -0.006782f, 0.014948f, 0.002046f, -0.010353f, -0.003140f, -0.006446f, -0.006303f, 0.009573f, 0.007954f, 0.003093f, 0.006794f, 0.008084f, -0.006776f, -0.004952f, -0.005033f, 0.001117f, -0.005520f, -0.008177f, -0.007962f, 0.003500f, -0.002696f, -0.001137f, 0.001137f, 0.002994f, -0.006760f, 0.003888f, -0.001450f, -0.000768f, -0.002991f, -0.001046f, -0.004248f, 0.010719f, - -0.006579f, -0.002243f, 0.001902f, -0.006792f, -0.006590f, -0.004964f, 0.000418f, 0.005487f, -0.035747f, 0.022513f, -0.004142f, -0.023097f, -0.000915f, 0.020941f, -0.023959f, -0.005090f, -0.019317f, 0.012768f, 0.004154f, -0.007155f, -0.008225f, -0.003009f, 0.012863f, 0.009786f, 0.005525f, 0.013325f, 0.011748f, 0.001137f, 0.014187f, 0.016212f, 0.006734f, 0.008939f, -0.016591f, -0.008195f, -0.011552f, 0.010185f, 0.013384f, 0.004695f, 0.004140f, -0.007963f, -0.005771f, -0.004920f, -0.004281f, -0.014190f, 0.012899f, 0.002858f, 0.000838f, -0.015185f, -0.004505f, 0.023841f, -0.017248f, -0.018522f, -0.028230f, 0.009738f, -0.021174f, 0.030602f, 0.035550f, 0.024364f, 0.014336f, 0.001234f, 0.027787f, -0.014835f, 0.021838f, -0.002992f, -0.015583f, 0.000997f, 0.001271f, -0.033591f, -0.014884f, 0.012383f, 0.001908f, -0.005831f, 0.005044f, 0.027868f, 0.019169f, -0.032404f, -0.008163f, -0.000669f, -0.000867f, 0.009099f, 0.013704f, -0.000851f, -0.025861f, 0.010192f, -0.015016f, -0.048147f, -0.013970f, -0.009969f, 0.014858f, 0.023990f, 0.008153f, 0.000985f, 0.001215f, 0.000507f, 0.002138f, 0.017017f, - 0.000040f, 0.002336f, 0.002197f, 0.008481f, -0.015276f, -0.001041f, 0.004663f, 0.011144f, 0.013681f, 0.004620f, 0.008114f, 0.011902f, 0.015981f, 0.020402f, 0.007858f, 0.009980f, 0.010063f, 0.000271f, -0.000963f, -0.003982f, -0.002568f, -0.000137f, 0.004188f, -0.012312f, -0.003007f, 0.006789f, 0.011292f, -0.001461f, 0.003155f, -0.001798f, 0.004732f, -0.000174f, 0.007237f, -0.001425f, 0.006939f, -0.005437f, 0.008892f, -0.000083f, 0.008398f, -0.029980f, 0.002988f, 0.003334f, 0.018752f, 0.004039f, 0.047910f, 0.007625f, -0.019774f, -0.006400f, -0.016650f, 0.030273f, -0.038840f, -0.003473f, 0.026846f, -0.058670f, -0.023155f, -0.019802f, -0.020512f, -0.038916f, 0.003677f, -0.006826f, -0.016691f, -0.002132f, 0.018405f, 0.002311f, 0.002439f, -0.011484f, 0.004561f, -0.003890f, 0.004533f, 0.000017f, 0.002908f, 0.015002f, -0.003649f, -0.000936f, 0.030527f, -0.019753f, -0.003980f, 0.005268f, 0.026293f, -0.013813f, 0.037544f, -0.011374f, -0.015171f, -0.032152f, -0.041831f, -0.012211f, -0.031136f, 0.015180f, -0.009450f, -0.023383f, 0.003189f, 0.003770f, 0.017219f, 0.014560f, 0.006085f, -0.002966f, - 0.053135f, 0.029402f, -0.003359f, 0.005177f, 0.018194f, 0.013598f, 0.008835f, -0.007202f, -0.001041f, -0.009542f, -0.012392f, -0.011467f, 0.008006f, 0.041436f, -0.028978f, -0.007103f, -0.016505f, 0.029859f, -0.007873f, 0.009249f, -0.004266f, 0.014017f, -0.032822f, -0.024552f, -0.008481f, 0.013943f, 0.004416f, 0.012039f, -0.007266f, 0.007425f, 0.011229f, 0.009861f, 0.004673f, -0.001963f, -0.014007f, 0.008811f, 0.003283f, -0.011886f, -0.008346f, 0.007434f, -0.007826f, -0.005924f, -0.000260f, 0.008005f, -0.007457f, 0.009647f, -0.006056f, 0.013782f, -0.007689f, 0.001542f, 0.004793f, 0.002507f, -0.006663f, -0.012594f, 0.009742f, -0.003783f, -0.002853f, -0.000984f, -0.001335f, -0.003981f, 0.009236f, 0.011556f, 0.007995f, 0.007071f, -0.001403f, 0.004079f, 0.013233f, -0.007149f, 0.005211f, 0.002304f, -0.000346f, 0.002922f, -0.000893f, 0.000718f, -0.004832f, -0.023885f, -0.022960f, 0.012946f, -0.010295f, -0.043007f, 0.021295f, -0.012811f, 0.017004f, -0.012359f, 0.021403f, 0.014602f, 0.017792f, 0.028540f, 0.004601f, 0.024155f, 0.009676f, 0.006266f, 0.016353f, 0.005692f, 0.004462f, 0.001212f, - -0.000717f, -0.015284f, 0.013621f, -0.031076f, 0.013581f, 0.003302f, -0.008954f, -0.016721f, -0.000479f, 0.012086f, -0.013937f, -0.005748f, -0.020821f, -0.007991f, -0.025622f, 0.001683f, 0.014038f, -0.000190f, -0.003358f, -0.016165f, -0.028286f, -0.020438f, 0.022035f, 0.007448f, -0.009243f, -0.016145f, -0.004017f, -0.001213f, -0.027655f, 0.023471f, 0.021240f, -0.027108f, -0.026473f, -0.043220f, -0.006633f, -0.051727f, 0.013925f, 0.020291f, 0.010582f, -0.003120f, -0.006656f, -0.005237f, 0.021233f, 0.021627f, 0.024775f, -0.016035f, -0.012890f, 0.016726f, -0.007205f, -0.007606f, -0.030431f, 0.013639f, 0.024793f, 0.028581f, -0.006739f, 0.015725f, -0.008785f, 0.004835f, 0.015516f, 0.008187f, -0.010998f, 0.005315f, -0.018801f, -0.011249f, -0.007821f, 0.002967f, 0.007884f, 0.006979f, -0.007472f, -0.006627f, -0.002809f, -0.008216f, -0.001697f, -0.011387f, -0.014468f, -0.007370f, -0.006052f, -0.004214f, -0.001960f, -0.003982f, -0.005775f, 0.001485f, -0.000302f, 0.008596f, -0.002932f, 0.010922f, -0.002851f, 0.008775f, 0.000540f, -0.004569f, 0.002141f, 0.021860f, 0.006653f, 0.011280f, -0.005016f, -0.008460f, - 0.001742f, 0.008138f, -0.007583f, 0.015948f, 0.015709f, 0.004800f, 0.007357f, 0.003581f, -0.018051f, -0.009180f, 0.041322f, 0.047888f, -0.018977f, -0.001001f, 0.012843f, -0.038622f, -0.007242f, 0.048178f, 0.001617f, -0.052338f, 0.005692f, 0.016178f, -0.001315f, 0.018278f, 0.042987f, -0.017586f, 0.038850f, 0.021151f, 0.033154f, 0.009378f, -0.025475f, -0.027023f, 0.021669f, -0.024515f, -0.038650f, -0.011146f, -0.045911f, 0.010164f, -0.003124f, 0.016357f, 0.013968f, 0.010084f, 0.005148f, -0.001781f, 0.001264f, 0.023380f, 0.011355f, -0.044906f, -0.005286f, 0.015132f, 0.028894f, 0.016181f, 0.035803f, 0.032379f, 0.025291f, -0.011896f, -0.004333f, 0.006764f, 0.065204f, -0.027240f, 0.004772f, 0.013892f, 0.025575f, -0.010473f, -0.036255f, -0.007538f, -0.009143f, -0.021759f, -0.040096f, -0.043716f, 0.012023f, -0.024489f, -0.018537f, 0.011401f, 0.034483f, 0.042551f, 0.000807f, -0.002332f, -0.000512f, 0.032702f, -0.022129f, -0.011238f, 0.038628f, -0.042027f, 0.004677f, -0.033186f, -0.022303f, 0.002556f, 0.044795f, -0.007190f, -0.030629f, 0.040025f, -0.040884f, 0.001745f, -0.049356f, -0.004271f, - -0.006190f, 0.014625f, 0.027468f, -0.020236f, -0.011545f, -0.014279f, 0.003707f, 0.001107f, -0.015280f, 0.008781f, -0.004511f, -0.004220f, -0.006509f, -0.005168f, -0.018093f, 0.004183f, -0.008706f, 0.006530f, 0.004904f, -0.001207f, -0.003985f, 0.011117f, 0.000027f, 0.000286f, -0.021336f, 0.003325f, -0.001797f, -0.000581f, 0.019948f, 0.002134f, 0.005653f, -0.008183f, 0.003247f, -0.004662f, -0.011579f, 0.005234f, -0.023628f, 0.008043f, -0.008128f, 0.017877f, -0.014048f, -0.001755f, 0.003300f, -0.001810f, -0.003651f, -0.007198f, 0.013191f, -0.008522f, 0.014361f, -0.004905f, 0.008479f, 0.022479f, -0.026419f, -0.059151f, -0.013956f, -0.020640f, -0.019489f, -0.012238f, 0.002747f, -0.020282f, -0.017155f, 0.005643f, 0.013178f, -0.012743f, 0.031314f, -0.003417f, 0.020979f, -0.010618f, -0.001250f, 0.018044f, -0.025814f, -0.016186f, -0.008789f, 0.026928f, -0.006502f, -0.029625f, -0.011183f, 0.004444f, -0.014359f, 0.012264f, -0.019850f, -0.019985f, 0.029001f, 0.008398f, -0.022990f, 0.013928f, -0.002777f, -0.018145f, -0.001764f, -0.030066f, -0.025835f, 0.005094f, 0.045029f, 0.018127f, 0.014027f, -0.036125f, - 0.027798f, -0.003226f, 0.021296f, -0.012611f, -0.025134f, 0.012187f, -0.046356f, 0.038686f, -0.062761f, -0.039805f, 0.014530f, 0.034520f, 0.002670f, 0.041340f, -0.018104f, 0.010820f, -0.028715f, 0.038778f, 0.012472f, 0.028833f, 0.013284f, 0.006750f, -0.009114f, -0.009698f, -0.018956f, -0.006646f, -0.001140f, -0.033471f, -0.019973f, 0.002900f, -0.050696f, 0.002826f, 0.056927f, 0.016945f, 0.020500f, 0.005456f, -0.025829f, -0.019467f, -0.005269f, -0.006259f, -0.001837f, -0.010065f, -0.013589f, 0.011315f, 0.007444f, 0.010265f, 0.016082f, -0.016272f, 0.010556f, -0.006197f, -0.008778f, -0.006650f, 0.014321f, -0.004868f, -0.015628f, -0.023694f, -0.000165f, -0.014276f, -0.006713f, -0.014635f, -0.004061f, -0.009603f, -0.005760f, 0.022260f, -0.012172f, 0.005073f, 0.006904f, -0.017901f, 0.020393f, 0.000168f, 0.012193f, 0.016042f, -0.007472f, 0.007923f, 0.003598f, -0.000742f, 0.004962f, 0.013423f, -0.007794f, -0.007637f, 0.012377f, 0.001041f, 0.009840f, -0.044453f, -0.041457f, 0.004092f, 0.017087f, -0.020962f, -0.093790f, -0.019605f, -0.000479f, 0.012259f, -0.031724f, 0.002743f, -0.017689f, -0.003688f, - -0.025274f, -0.028222f, 0.025072f, -0.027445f, -0.033673f, -0.005695f, -0.023568f, -0.025921f, 0.008928f, -0.037655f, -0.012461f, 0.022720f, 0.052034f, 0.042025f, -0.002004f, -0.025639f, 0.008997f, 0.037827f, -0.001744f, 0.025157f, -0.007217f, 0.031690f, 0.017823f, -0.032552f, 0.051812f, -0.039488f, -0.020849f, 0.034872f, -0.038421f, 0.011597f, -0.008823f, -0.028922f, 0.003417f, 0.043835f, -0.009087f, -0.025766f, 0.016424f, 0.021510f, -0.000607f, 0.008903f, -0.063031f, 0.015223f, 0.002650f, 0.031807f, 0.015416f, -0.027653f, 0.027482f, -0.014733f, -0.002375f, -0.025628f, 0.013638f, 0.036941f, -0.007589f, -0.007309f, -0.037841f, -0.053550f, 0.030489f, -0.003874f, 0.024571f, -0.029286f, 0.022312f, 0.017808f, -0.038087f, 0.002199f, 0.033964f, 0.019386f, -0.017766f, -0.030642f, 0.027785f, 0.004526f, -0.023781f, 0.022601f, 0.003766f, 0.010077f, 0.002722f, 0.009365f, 0.001795f, 0.025253f, 0.000392f, 0.008696f, -0.001667f, 0.001050f, 0.022466f, -0.007225f, 0.000601f, 0.005102f, -0.005833f, 0.004094f, 0.002053f, 0.015490f, -0.000752f, -0.017235f, -0.002077f, 0.002196f, -0.010210f, -0.003052f, - 0.001150f, -0.006882f, 0.023263f, -0.005476f, -0.013277f, 0.001477f, 0.014816f, 0.006948f, -0.000749f, 0.008423f, 0.001225f, -0.009662f, -0.001176f, 0.024401f, 0.016694f, -0.016499f, -0.012050f, 0.003526f, 0.035352f, 0.035468f, -0.095639f, 0.036058f, 0.048476f, -0.012336f, 0.033721f, -0.000341f, 0.017475f, -0.007764f, -0.019670f, -0.012704f, 0.020338f, 0.004799f, -0.027631f, -0.017947f, -0.002559f, -0.012958f, -0.007079f, -0.002969f, 0.059155f, 0.011894f, 0.013095f, -0.036600f, 0.025468f, -0.026062f, 0.000380f, 0.004584f, -0.040000f, 0.018678f, -0.014833f, 0.002085f, -0.016199f, -0.028915f, 0.000781f, 0.019194f, 0.054813f, 0.019716f, 0.005691f, 0.033909f, 0.014348f, -0.004093f, 0.005565f, 0.000855f, 0.009564f, 0.005556f, 0.037177f, 0.016275f, 0.011232f, 0.006136f, -0.004776f, -0.011558f, -0.036617f, -0.030735f, 0.004260f, -0.004394f, -0.022596f, 0.003209f, 0.027450f, -0.041887f, 0.040459f, 0.010429f, -0.014915f, -0.001682f, -0.010846f, -0.003358f, 0.024502f, 0.010718f, 0.007975f, -0.028463f, -0.005800f, -0.038903f, -0.012014f, 0.010834f, 0.014210f, 0.014174f, -0.016860f, -0.013524f, - 0.030136f, -0.003555f, -0.048884f, 0.007022f, -0.000909f, -0.000533f, -0.028874f, 0.009460f, 0.021561f, -0.002980f, 0.031042f, 0.020943f, -0.010468f, -0.000575f, -0.013496f, 0.016776f, -0.001475f, 0.005529f, 0.002520f, -0.007063f, -0.005932f, -0.001295f, -0.006149f, 0.006804f, -0.013417f, -0.001313f, 0.000756f, 0.007237f, -0.006935f, -0.008029f, -0.009595f, 0.000522f, -0.002372f, 0.005330f, 0.003028f, -0.000283f, -0.006014f, 0.006470f, 0.004850f, 0.000955f, 0.007037f, 0.001290f, 0.005017f, 0.004688f, 0.006673f, -0.001861f, -0.024563f, -0.000928f, -0.007043f, -0.085000f, 0.131732f, -0.130244f, -0.058902f, -0.029763f, -0.008891f, 0.076197f, 0.022391f, 0.085301f, 0.021299f, -0.017442f, 0.067208f, 0.029081f, -0.022758f, 0.031507f, 0.028514f, 0.015945f, 0.026677f, 0.025873f, -0.023070f, -0.037249f, -0.026526f, 0.004292f, -0.024395f, 0.012864f, 0.007639f, 0.016680f, -0.002613f, 0.011524f, 0.003882f, 0.041874f, 0.009916f, 0.003928f, 0.012874f, -0.009782f, -0.000610f, 0.014766f, -0.026304f, -0.037391f, -0.025434f, -0.021764f, 0.003691f, 0.011063f, -0.026378f, -0.004313f, -0.015886f, -0.064812f, - 0.032598f, -0.011737f, 0.016481f, -0.034105f, -0.011612f, -0.031594f, -0.043297f, 0.016316f, 0.011434f, 0.042069f, -0.001853f, 0.037062f, -0.015742f, 0.031040f, 0.003623f, 0.044314f, -0.031449f, 0.027408f, 0.032919f, 0.018207f, 0.019079f, 0.001590f, -0.013509f, 0.051894f, 0.034704f, -0.003476f, 0.062597f, 0.014973f, 0.007292f, 0.026786f, 0.040335f, 0.000457f, 0.018522f, 0.023281f, 0.010610f, 0.010147f, -0.004728f, 0.002019f, -0.036660f, -0.009410f, -0.004987f, 0.005775f, 0.007634f, 0.007193f, 0.024293f, 0.010711f, 0.012359f, -0.009593f, -0.001387f, 0.009508f, 0.000959f, 0.000738f, -0.008759f, 0.009943f, 0.008432f, 0.004747f, -0.006851f, 0.012648f, -0.001995f, 0.002189f, -0.009929f, -0.009246f, -0.003742f, 0.000920f, 0.001070f, -0.006091f, -0.020200f, 0.004574f, 0.004309f, -0.005557f, -0.001071f, -0.005271f, 0.001460f, -0.007486f, 0.004902f, -0.007217f, 0.000247f, 0.017940f, -0.005193f, -0.018018f, 0.011563f, 0.008291f, 0.007014f, -0.004441f, -0.002446f, 0.080423f, 0.006968f, -0.048450f, -0.071172f, -0.037757f, -0.029691f, 0.009550f, 0.058937f, -0.000977f, -0.024899f, 0.052703f, - 0.004361f, -0.042599f, 0.038338f, 0.041565f, -0.007594f, -0.000787f, -0.004010f, -0.037710f, 0.041928f, 0.002356f, 0.023821f, -0.013300f, -0.033514f, -0.058639f, 0.010711f, 0.007400f, 0.009098f, -0.008279f, 0.018462f, -0.019501f, -0.000203f, -0.037583f, -0.046798f, 0.016444f, -0.005896f, 0.014905f, -0.006734f, -0.017373f, -0.042371f, -0.065815f, 0.033786f, -0.036780f, 0.015129f, 0.031656f, -0.002181f, -0.016943f, -0.032281f, -0.023285f, 0.075819f, 0.017225f, -0.003419f, 0.009852f, -0.009975f, -0.030633f, -0.010017f, 0.043948f, -0.042455f, -0.071487f, -0.024939f, -0.022689f, -0.100142f, -0.078265f, -0.042112f, -0.043522f, 0.010792f, -0.000451f, -0.034829f, -0.066822f, -0.026411f, -0.031577f, -0.022652f, -0.018274f, -0.013433f, -0.039965f, -0.038290f, 0.030317f, -0.034002f, 0.002165f, 0.005189f, -0.041872f, -0.007310f, -0.030550f, -0.038274f, -0.009281f, -0.006213f, 0.017799f, 0.007498f, 0.023930f, -0.024441f, 0.006332f, 0.014098f, -0.000060f, -0.032885f, -0.018575f, -0.022054f, -0.002088f, 0.010775f, -0.011130f, -0.015986f, 0.028608f, 0.017031f, 0.020616f, -0.033617f, 0.005813f, -0.016340f, -0.001777f, - 0.001461f, 0.003463f, -0.003993f, 0.034115f, 0.002720f, -0.005860f, 0.004342f, 0.012047f, 0.017208f, 0.014257f, -0.002203f, 0.020295f, -0.014464f, -0.007578f, -0.006203f, -0.026184f, -0.000705f, -0.007872f, -0.033828f, -0.028164f, 0.004946f, 0.001613f, -0.000518f, -0.008478f, -0.007411f, 0.055260f, -0.006569f, 0.052643f, 0.077913f, -0.014353f, -0.084588f, -0.081845f, -0.017723f, 0.039263f, 0.005263f, -0.064229f, 0.050315f, -0.010975f, -0.042236f, 0.051775f, -0.097414f, -0.020418f, 0.000307f, -0.017198f, -0.015123f, 0.118011f, -0.049673f, 0.110592f, -0.005710f, 0.023302f, -0.008433f, -0.043626f, 0.070553f, 0.018846f, 0.073364f, -0.050398f, -0.050000f, 0.016135f, -0.080487f, -0.023971f, -0.013186f, -0.055708f, 0.115719f, -0.010040f, -0.120692f, -0.001763f, -0.053992f, 0.015751f, 0.029304f, 0.048332f, 0.038848f, -0.047473f, -0.030112f, -0.073905f, -0.022037f, -0.034190f, 0.031333f, 0.021029f, -0.004394f, 0.021885f, -0.015191f, -0.052404f, -0.021885f, -0.061167f, 0.062411f, -0.047274f, -0.033131f, 0.056463f, 0.012932f, 0.095398f, 0.045802f, 0.008441f, 0.049905f, -0.067306f, -0.025570f, -0.069495f, - -0.068047f, -0.010310f, -0.010252f, -0.084803f, 0.087143f, -0.015278f, -0.068352f, -0.101021f, 0.006221f, -0.019927f, 0.073711f, -0.004575f, 0.003446f, 0.010108f, -0.013684f, 0.014215f, 0.016279f, 0.034958f, -0.023700f, -0.023315f, -0.015416f, 0.001223f, -0.004656f, -0.004708f, -0.022405f, 0.024736f, 0.014802f, 0.029474f, -0.007278f, -0.015684f, -0.013957f, -0.005022f, 0.005117f, 0.039417f, 0.041331f, -0.006633f, 0.001927f, 0.022828f, -0.006681f, -0.052093f, -0.025733f, 0.003423f, 0.006832f, -0.003947f, -0.033659f, 0.011827f, -0.004297f, -0.007773f, -0.038485f, 0.015098f, 0.012593f, 0.045600f, 0.007132f, 0.011342f, -0.002539f, 0.018838f, 0.002993f, -0.010696f, -0.157769f, 0.081510f, 0.018647f, -0.033952f, -0.025795f, 0.050399f, 0.027556f, -0.030347f, -0.008445f, -0.074106f, -0.031200f, 0.031669f, -0.064306f, 0.002587f, 0.011357f, -0.019474f, -0.042950f, -0.029069f, 0.057452f, 0.023278f, -0.011744f, -0.082687f, 0.027871f, 0.052262f, 0.029907f, -0.063990f, -0.042909f, 0.000418f, 0.069619f, 0.006374f, -0.017074f, 0.011156f, 0.002065f, 0.035829f, -0.093205f, -0.080303f, 0.099406f, 0.015620f, - 0.041478f, -0.094559f, 0.020451f, -0.004089f, 0.069258f, -0.062084f, -0.012087f, -0.094783f, 0.033042f, 0.068643f, 0.015877f, -0.041994f, 0.027040f, 0.099549f, -0.044689f, -0.047173f, -0.037340f, 0.014343f, 0.003985f, 0.087369f, -0.026181f, 0.006918f, -0.047141f, 0.015662f, -0.051676f, -0.001440f, 0.032934f, -0.064110f, 0.061409f, 0.018951f, -0.044846f, -0.069360f, -0.042410f, -0.003231f, 0.061963f, -0.112040f, -0.024596f, 0.101970f, 0.013275f, -0.045537f, -0.021676f, -0.032012f, 0.095643f, -0.010268f, -0.100472f, -0.011301f, -0.000150f, -0.024374f, 0.040816f, -0.006633f, -0.014176f, 0.031447f, -0.002900f, -0.020175f, -0.026408f, -0.002327f, -0.023293f, 0.007493f, 0.016954f, 0.023005f, -0.020275f, -0.014389f, 0.020793f, -0.013199f, 0.019692f, -0.009982f, -0.020206f, 0.028113f, -0.015217f, 0.025384f, 0.034148f, 0.002752f, -0.049651f, -0.002820f, -0.029616f, 0.012877f, 0.018259f, 0.012546f, -0.034701f, 0.000954f, -0.026211f, 0.025081f, -0.007393f, -0.014370f, -0.010024f, 0.005947f, 0.008368f, 0.104286f, 0.053247f, 0.024267f, 0.023999f, 0.025314f, -0.016675f, -0.016104f, -0.035254f, 0.004729f, - 0.011202f, 0.009504f, -0.002201f, -0.059595f, 0.028551f, 0.012077f, -0.041779f, -0.035014f, -0.018191f, -0.020333f, 0.015362f, -0.015102f, -0.017818f, 0.005483f, -0.001618f, -0.031458f, 0.040616f, -0.028902f, -0.009626f, -0.030041f, -0.027743f, 0.020217f, -0.011917f, -0.003613f, 0.010096f, 0.013342f, -0.003490f, -0.040083f, 0.009490f, 0.063556f, 0.013323f, -0.098623f, -0.006426f, -0.021073f, -0.030947f, 0.021297f, 0.022185f, 0.051711f, 0.024530f, -0.064159f, 0.069915f, -0.016905f, -0.048721f, 0.146382f, -0.029557f, -0.012022f, -0.048277f, -0.115536f, 0.052988f, 0.059399f, 0.019305f, 0.022724f, -0.099306f, 0.029314f, -0.007878f, -0.023551f, -0.017582f, 0.004457f, -0.009538f, 0.016010f, 0.018781f, 0.004590f, -0.014804f, -0.027896f, 0.030003f, 0.038284f, 0.052554f, -0.025532f, -0.005403f, 0.011683f, -0.007804f, 0.028087f, -0.068125f, 0.007094f, 0.012002f, -0.031402f, 0.005244f, -0.026077f, 0.010396f, 0.000985f, 0.008341f, -0.003893f, 0.001872f, 0.003125f, -0.001375f, -0.000414f, -0.009059f, -0.006557f, 0.018198f, -0.009554f, -0.000663f, 0.013956f, 0.003016f, 0.001116f, 0.022273f, -0.017835f, - 0.013668f, 0.016479f, -0.000936f, -0.002691f, -0.018766f, 0.015758f, -0.035131f, -0.009368f, 0.023061f, 0.007152f, -0.009508f, -0.023297f, 0.007316f, -0.005016f, 0.028712f, -0.058831f, -0.141937f, -0.239180f, 0.019166f, 0.243897f, 0.023079f, 0.518107f, 0.522984f, 0.190146f, 0.524829f, 0.304648f, -0.088781f, -0.008070f, -0.047818f, -0.397697f, -0.330154f, -0.231353f, -0.413332f, -0.394342f, -0.112828f, -0.248094f, -0.216603f, 0.049290f, 0.068854f, -0.053264f, 0.076525f, 0.113039f, -0.000456f, 0.008241f, 0.224245f, 0.150098f, 0.056876f, 0.166339f, 0.310264f, 0.146523f, 0.170880f, 0.384515f, 0.151725f, 0.069438f, 0.331989f, 0.320674f, 0.013761f, 0.205248f, 0.362196f, 0.001069f, 0.091738f, 0.215274f, -0.008738f, -0.175277f, 0.086690f, -0.036275f, -0.338343f, -0.314845f, -0.289938f, -0.562535f, -0.832397f, -0.578894f, -0.809885f, -1.078273f, -0.761467f, -0.616577f, -0.834321f, -0.532344f, -0.256711f, -0.246777f, -0.047299f, 0.248831f, 0.500935f, 0.567925f, 0.759267f, 1.034058f, 1.015367f, 0.961258f, 1.082026f, 1.081117f, 0.882190f, 0.710818f, 0.760393f, 0.505955f, 0.179460f, 0.241351f, - 0.058701f, -0.443528f, -0.285866f, -0.301417f, -0.619889f, -0.522872f, -0.376663f, -0.440183f, -0.510167f, -0.316934f, -0.277660f, -0.385261f, -0.318570f, -0.164973f, -0.265146f, -0.348178f, -0.210017f, -0.147563f, -0.276908f, -0.155737f, 0.035857f, -0.086301f, -0.099403f, 0.111080f, -0.004453f, -0.140042f, -0.018521f, -0.088134f, -0.317523f, -0.220325f, -0.167297f, -0.293895f, -0.132187f, 0.073322f, 0.140175f, 0.260351f, 0.432589f, 0.503807f, 0.527904f, 0.592827f, 0.630337f, 0.621475f, 0.572207f, 0.533234f, 0.452033f, 0.359886f, 0.219959f, 0.165356f, 0.018603f, -0.141650f, -0.248591f, -0.396133f, -0.570266f, -0.553786f, -0.472488f, -0.427510f, -0.372036f, -0.254468f, -0.215697f, -0.192117f, -0.140173f, -0.092185f, -0.083834f, -0.036115f, -0.024264f, -0.017373f, -0.003801f, 0.030033f, 0.050725f, 0.067396f, 0.078476f, 0.092364f, 0.085115f, 0.076594f, 0.046140f, 0.031854f, 0.006745f, 0.007675f, -0.002778f} - }, - { - {0.019095f, -0.000790f, -0.001011f, 0.006083f, -0.002474f, 0.006948f, -0.003677f, -0.008916f, 0.003142f, 0.008958f, 0.001328f, -0.001390f, 0.011901f, 0.000405f, 0.000497f, -0.004058f, -0.002258f, 0.018540f, 0.002584f, -0.012583f, -0.009302f, 0.013077f, -0.001187f, 0.013561f, 0.000956f, -0.002576f, -0.001272f, 0.010243f, 0.002031f, 0.021502f, 0.009472f, 0.005921f, -0.001154f, 0.004778f, 0.009730f, -0.002390f, -0.007246f, -0.009104f, -0.001742f, 0.008212f, 0.007063f, 0.010956f, 0.003080f, -0.006123f, -0.006368f, -0.002650f, 0.004578f, -0.001465f, 0.002519f, -0.001245f, -0.009747f, -0.007523f, 0.002986f, 0.007121f, 0.004383f, -0.003524f, -0.004021f, -0.000269f, 0.010632f, 0.005411f, -0.001165f, -0.002376f, 0.004930f, 0.003329f, 0.002116f, -0.005419f, 0.002727f, 0.005099f, -0.000654f, 0.007787f, 0.009188f, -0.016046f, 0.005895f, 0.003282f, 0.010476f, 0.003163f, 0.000834f, 0.004783f, -0.002123f, -0.007480f, -0.002780f, -0.004506f, -0.001504f, -0.000927f, 0.004556f, -0.000229f, -0.003647f, 0.000057f, 0.000537f, 0.002722f, -0.002369f, 0.000443f, -0.000459f, 0.000974f, 0.001392f, 0.000975f, - 0.001797f, 0.000182f, 0.001110f, 0.005368f, 0.008358f, 0.018064f, -0.014683f, 0.003306f, -0.003223f, 0.000205f, -0.018867f, 0.001893f, 0.011351f, -0.016785f, -0.003478f, 0.011211f, 0.029759f, 0.004263f, -0.000200f, 0.002114f, -0.018636f, -0.000603f, 0.013742f, 0.012193f, 0.000338f, -0.000390f, 0.001135f, 0.006399f, 0.010722f, 0.011294f, 0.012215f, -0.005457f, 0.002645f, -0.000745f, 0.004714f, 0.001318f, 0.003042f, -0.018915f, -0.005177f, 0.002948f, 0.001552f, -0.010462f, -0.000328f, 0.007135f, -0.008313f, 0.006569f, 0.006073f, 0.011195f, 0.005252f, -0.004283f, 0.005598f, 0.012512f, -0.006998f, -0.011302f, 0.003802f, 0.002620f, 0.002218f, 0.005930f, -0.004999f, -0.009139f, -0.013609f, 0.010999f, -0.002014f, -0.002577f, -0.004419f, 0.004827f, -0.000156f, 0.007133f, 0.014117f, 0.002854f, 0.000973f, -0.000760f, -0.003391f, -0.011002f, 0.017124f, 0.004210f, -0.002027f, 0.008843f, -0.001374f, -0.010142f, -0.008901f, -0.001981f, 0.003383f, -0.014791f, 0.001236f, -0.008769f, -0.001638f, 0.004513f, -0.000239f, 0.002373f, -0.002628f, -0.004837f, -0.001008f, 0.002444f, 0.003371f, 0.002483f, - -0.000495f, -0.001484f, -0.000067f, 0.002417f, -0.001254f, -0.002463f, -0.001819f, -0.008856f, -0.007687f, -0.009608f, -0.013653f, 0.007642f, -0.000178f, -0.006523f, -0.002598f, -0.003334f, 0.002962f, -0.005419f, -0.009375f, 0.002133f, -0.006097f, 0.016013f, 0.021284f, 0.016834f, -0.011649f, -0.000448f, -0.000770f, 0.004503f, -0.006467f, 0.013207f, 0.008280f, -0.001884f, 0.006394f, 0.010017f, 0.000809f, 0.002429f, 0.003494f, 0.009733f, -0.000932f, 0.003622f, 0.011645f, 0.001188f, -0.000134f, -0.005085f, 0.008379f, -0.012654f, 0.005112f, -0.001769f, -0.002602f, 0.008438f, -0.008150f, -0.001026f, 0.000287f, -0.010998f, 0.004571f, -0.002215f, 0.005096f, -0.000351f, -0.004755f, 0.003346f, 0.003501f, -0.000575f, 0.009775f, -0.000693f, 0.011277f, -0.000163f, -0.007495f, -0.003330f, 0.000434f, -0.005112f, 0.010057f, 0.005254f, 0.008634f, 0.009797f, -0.004278f, -0.009685f, -0.006331f, -0.000004f, -0.001796f, -0.002058f, 0.007982f, 0.010077f, -0.001503f, -0.005508f, 0.003507f, 0.002757f, -0.003854f, -0.005255f, 0.001811f, -0.007552f, 0.001848f, -0.000135f, -0.000233f, -0.002014f, -0.007155f, 0.001630f, - -0.002815f, 0.000308f, 0.003209f, 0.000012f, -0.003653f, 0.001849f, -0.005011f, -0.000075f, 0.000327f, -0.001136f, 0.000426f, 0.000979f, -0.002738f, 0.000066f, 0.000340f, -0.003232f, 0.000694f, -0.000958f, -0.000195f, -0.001689f, -0.000041f, 0.000929f, -0.028150f, -0.006645f, -0.008763f, -0.015233f, 0.005197f, 0.003982f, -0.001808f, 0.007075f, -0.000973f, 0.005970f, 0.008448f, -0.003716f, -0.009839f, -0.012416f, -0.004726f, -0.011563f, 0.000914f, 0.001273f, -0.005027f, 0.006557f, -0.005650f, 0.003515f, -0.002578f, -0.006599f, -0.017520f, -0.006825f, 0.001568f, 0.002752f, 0.004612f, -0.006521f, 0.004659f, 0.007042f, 0.002337f, 0.015986f, 0.003983f, -0.000413f, 0.012385f, -0.008754f, 0.007155f, 0.001173f, -0.004161f, -0.005929f, 0.007988f, 0.001070f, 0.002527f, -0.018880f, -0.003478f, -0.006242f, 0.018968f, 0.008125f, 0.006833f, 0.007693f, 0.008708f, 0.006886f, 0.009656f, -0.005113f, -0.002070f, 0.005914f, 0.009485f, -0.001281f, 0.011077f, -0.005968f, 0.002423f, -0.002409f, 0.009382f, 0.014046f, -0.021953f, 0.005747f, -0.005433f, 0.000695f, -0.010359f, -0.005332f, 0.001728f, -0.003152f, - -0.004453f, -0.008796f, -0.003967f, 0.004128f, -0.000219f, 0.009388f, -0.000997f, 0.003613f, 0.008138f, 0.012935f, -0.000494f, 0.003408f, -0.001526f, 0.006014f, 0.000955f, 0.002919f, -0.004031f, -0.001427f, 0.000416f, 0.002740f, -0.001809f, -0.002951f, 0.000128f, 0.000147f, -0.002289f, 0.000329f, 0.001299f, 0.000037f, 0.003757f, -0.001677f, -0.001783f, 0.000411f, 0.003270f, -0.001351f, 0.000053f, -0.001215f, 0.001938f, 0.003010f, -0.000446f, 0.002878f, 0.003147f, -0.000791f, -0.001390f, 0.010990f, 0.006748f, 0.003984f, -0.002086f, 0.000904f, 0.001200f, 0.014195f, -0.011269f, 0.014240f, -0.001885f, 0.007761f, 0.014601f, -0.009135f, 0.011315f, -0.007068f, 0.005811f, 0.002214f, 0.017166f, 0.007591f, -0.009545f, -0.015723f, 0.003592f, -0.011787f, 0.009709f, -0.002414f, 0.012650f, -0.009414f, -0.001521f, -0.007537f, 0.004370f, 0.002814f, 0.003627f, -0.000937f, -0.001332f, -0.013721f, -0.006009f, 0.011297f, -0.008983f, -0.001819f, 0.007353f, 0.000357f, -0.007029f, 0.002308f, 0.000649f, -0.001568f, -0.006091f, 0.012352f, 0.003952f, -0.017559f, -0.007913f, -0.014172f, -0.002465f, -0.012528f, - -0.021611f, -0.004911f, 0.009460f, 0.026666f, 0.005848f, 0.002220f, 0.012580f, -0.000311f, -0.009807f, -0.008571f, 0.007036f, 0.002758f, 0.004760f, 0.007717f, -0.018826f, -0.004607f, -0.017313f, -0.003779f, 0.004894f, -0.006840f, -0.015998f, 0.001658f, 0.006974f, -0.003392f, -0.005924f, -0.002785f, 0.002826f, -0.002340f, -0.000632f, 0.003558f, -0.002157f, -0.002324f, -0.003190f, -0.002303f, -0.007297f, 0.002685f, -0.001867f, 0.003442f, -0.001195f, 0.002043f, 0.004688f, 0.000720f, -0.001201f, -0.000361f, -0.003863f, -0.002521f, -0.006148f, -0.005558f, 0.000918f, 0.000762f, 0.000059f, 0.002300f, 0.003692f, 0.002633f, 0.000063f, 0.002410f, 0.002020f, -0.001593f, 0.001489f, 0.001585f, -0.003168f, 0.030640f, 0.007293f, 0.022185f, -0.010402f, -0.001443f, -0.007401f, -0.001708f, 0.023570f, -0.020107f, 0.006747f, 0.002283f, 0.030867f, 0.016437f, 0.020483f, 0.003743f, -0.005097f, 0.009669f, -0.006741f, -0.025593f, 0.004866f, 0.001456f, 0.003000f, 0.020171f, 0.001915f, -0.011851f, -0.001048f, 0.000531f, 0.006394f, 0.006982f, -0.000609f, -0.002641f, 0.008230f, -0.009642f, -0.002661f, -0.004882f, - -0.002479f, 0.002490f, 0.000365f, 0.017769f, 0.002554f, 0.013953f, 0.016078f, 0.004453f, 0.014180f, -0.001051f, 0.004689f, 0.008625f, -0.009317f, -0.013903f, 0.001737f, 0.014005f, -0.022379f, 0.006661f, -0.017175f, -0.016039f, -0.009848f, -0.004445f, -0.015114f, -0.014628f, -0.015497f, -0.007940f, -0.003865f, 0.010398f, 0.000242f, 0.012458f, 0.001875f, -0.010258f, 0.015697f, -0.016330f, -0.006207f, -0.006759f, -0.006721f, -0.008656f, -0.011415f, 0.016305f, 0.012671f, -0.007125f, 0.006216f, 0.005134f, 0.012874f, 0.000053f, 0.009295f, -0.004572f, 0.011687f, 0.005914f, -0.006918f, 0.000404f, -0.006252f, 0.007456f, -0.007132f, 0.000796f, 0.005746f, 0.000445f, 0.004393f, -0.001248f, 0.000696f, 0.003072f, -0.001041f, -0.003122f, 0.002892f, -0.000831f, 0.000491f, -0.006009f, -0.005006f, -0.004792f, -0.003771f, -0.000621f, -0.002113f, -0.004148f, -0.000206f, 0.000886f, -0.001971f, 0.000505f, -0.000156f, -0.016441f, -0.016735f, -0.009697f, -0.010310f, -0.005351f, -0.004299f, -0.019740f, -0.016036f, -0.013382f, -0.002152f, -0.001066f, -0.002584f, 0.013859f, 0.001300f, 0.007202f, 0.010477f, 0.012451f, - 0.001860f, 0.024249f, 0.030159f, -0.000534f, 0.008674f, 0.006916f, -0.003758f, 0.013319f, 0.007088f, -0.027092f, -0.000993f, -0.009315f, 0.001488f, 0.021110f, 0.008279f, -0.021647f, -0.005860f, 0.009761f, 0.009510f, 0.001418f, 0.027741f, -0.011442f, 0.011134f, 0.011443f, 0.012308f, 0.007341f, 0.014351f, -0.024404f, 0.008884f, -0.009472f, 0.014461f, 0.000628f, 0.006179f, -0.018301f, 0.013411f, 0.009865f, -0.002464f, 0.009555f, -0.001679f, 0.002729f, -0.000272f, -0.009505f, 0.002402f, -0.006046f, 0.005911f, -0.007479f, 0.009321f, 0.003047f, 0.023482f, 0.017715f, -0.005653f, 0.006385f, -0.019539f, 0.017015f, -0.005417f, 0.010470f, 0.018183f, 0.018054f, 0.000738f, 0.018439f, 0.012567f, 0.008768f, 0.009199f, 0.016951f, 0.001557f, 0.003731f, -0.013887f, -0.002299f, -0.004073f, 0.003254f, -0.010054f, 0.001580f, -0.007362f, 0.002348f, -0.007335f, 0.002301f, -0.002779f, -0.004416f, -0.004384f, 0.003074f, 0.000178f, -0.002179f, -0.001837f, -0.005756f, -0.002031f, 0.001131f, -0.001843f, -0.004123f, 0.000487f, 0.004474f, -0.010192f, -0.006119f, -0.005690f, 0.004156f, -0.006308f, 0.003890f, - -0.000102f, 0.002278f, -0.005252f, -0.007422f, -0.001843f, 0.001490f, 0.015914f, -0.014180f, -0.003772f, 0.012747f, -0.006825f, 0.021808f, -0.007003f, -0.015356f, 0.028885f, 0.039363f, 0.008687f, -0.015503f, 0.010806f, -0.008165f, 0.016098f, 0.009423f, -0.003585f, -0.016447f, -0.010837f, -0.027984f, 0.007268f, 0.011957f, -0.024771f, -0.002926f, 0.014292f, 0.003760f, -0.001268f, 0.000600f, -0.003099f, -0.013366f, 0.003179f, 0.016601f, 0.000604f, 0.003597f, 0.005929f, 0.023509f, -0.015559f, -0.000413f, 0.016996f, -0.015599f, 0.022853f, 0.001216f, 0.032149f, -0.026793f, -0.024249f, 0.013325f, 0.001113f, -0.003189f, 0.006847f, -0.002188f, 0.008891f, 0.005541f, 0.017840f, 0.017110f, -0.014197f, 0.002617f, -0.009308f, -0.005531f, 0.010642f, -0.001297f, -0.005605f, -0.002349f, 0.000424f, 0.016074f, -0.030714f, 0.023382f, -0.007401f, -0.010385f, 0.017230f, -0.013937f, 0.013795f, -0.018766f, -0.010656f, -0.003445f, -0.014061f, -0.004784f, -0.009956f, -0.015595f, -0.010628f, 0.003466f, -0.003659f, -0.003710f, -0.000323f, -0.007235f, -0.002425f, -0.001032f, 0.009599f, -0.000447f, 0.001308f, 0.003958f, - -0.004188f, -0.001542f, -0.003563f, 0.002408f, 0.004640f, 0.001355f, -0.002059f, 0.011453f, -0.000043f, 0.008513f, -0.009292f, -0.005875f, -0.005564f, -0.003865f, 0.004236f, 0.002176f, 0.000197f, 0.006691f, -0.005052f, 0.005124f, 0.001885f, 0.004772f, 0.002547f, 0.000729f, -0.005946f, -0.019502f, -0.014851f, -0.006552f, -0.013926f, -0.021259f, -0.004443f, 0.007705f, 0.026104f, 0.004216f, -0.015719f, -0.029185f, -0.006063f, 0.009024f, -0.005077f, 0.031292f, 0.009877f, -0.011100f, -0.022123f, -0.027703f, -0.052406f, -0.004305f, -0.005760f, 0.020063f, 0.014887f, -0.010764f, 0.001390f, -0.008334f, -0.004511f, 0.018828f, -0.000470f, 0.000979f, -0.002270f, 0.021364f, 0.003650f, -0.006440f, -0.001035f, -0.000814f, 0.005816f, -0.019485f, -0.006102f, -0.007677f, 0.030823f, 0.007159f, -0.032358f, 0.008332f, -0.016779f, -0.009482f, 0.004800f, -0.030163f, 0.009410f, 0.021708f, 0.019302f, 0.015007f, 0.003702f, 0.006050f, -0.000942f, 0.003180f, -0.018975f, 0.006885f, -0.029726f, -0.005733f, 0.017079f, 0.006209f, 0.017497f, 0.017203f, 0.014276f, -0.009767f, -0.021928f, -0.019234f, -0.014820f, 0.004806f, - 0.005986f, 0.010147f, 0.010150f, 0.002171f, 0.006799f, 0.021461f, 0.030129f, -0.007242f, 0.010769f, -0.007514f, -0.008043f, 0.009171f, -0.013152f, -0.004700f, 0.000596f, -0.008403f, 0.007885f, -0.007307f, -0.006276f, -0.003527f, 0.001940f, -0.001949f, 0.004325f, 0.000034f, 0.006233f, -0.001503f, -0.003681f, -0.001775f, -0.003601f, -0.009554f, 0.002611f, 0.005062f, -0.000391f, 0.003310f, -0.000849f, 0.004545f, 0.008833f, 0.008348f, 0.006610f, -0.006780f, -0.003336f, 0.006408f, -0.001890f, -0.002639f, 0.000688f, -0.001141f, 0.006576f, -0.001524f, -0.000290f, -0.001059f, 0.015350f, 0.027139f, 0.031456f, 0.022724f, 0.038883f, -0.018207f, 0.027637f, -0.023690f, -0.018551f, 0.020443f, 0.026170f, 0.030872f, -0.031875f, -0.000211f, 0.008044f, -0.023648f, 0.011196f, -0.010415f, -0.016727f, 0.019049f, -0.024819f, 0.026904f, -0.025513f, 0.025200f, -0.018311f, -0.006788f, -0.001671f, -0.033420f, -0.004628f, 0.036761f, -0.009407f, -0.026348f, 0.005633f, 0.017042f, -0.019175f, 0.009453f, 0.039801f, 0.021348f, 0.008061f, 0.017552f, -0.021047f, 0.014001f, -0.012642f, -0.036314f, -0.010995f, -0.009546f, - 0.002693f, 0.016374f, 0.020313f, -0.009066f, -0.015895f, 0.014401f, 0.000101f, 0.011003f, 0.006917f, -0.005987f, 0.001979f, -0.014504f, 0.002190f, 0.004499f, -0.000200f, 0.004642f, 0.032730f, -0.004150f, 0.003228f, 0.009267f, 0.001940f, 0.003928f, -0.016667f, -0.018324f, 0.012643f, -0.021796f, -0.029491f, -0.031021f, 0.024022f, 0.015461f, 0.004608f, -0.001781f, -0.003603f, 0.011373f, -0.001848f, -0.008784f, 0.010987f, 0.030167f, 0.020434f, -0.008121f, -0.005184f, 0.009261f, 0.005382f, -0.002244f, -0.004841f, 0.003303f, 0.004225f, -0.001395f, 0.001192f, 0.016312f, 0.003883f, 0.002222f, 0.006388f, -0.005479f, 0.001144f, 0.005098f, 0.010900f, -0.001192f, 0.000725f, -0.010854f, 0.003409f, -0.005720f, -0.004140f, 0.011048f, 0.008918f, 0.000434f, 0.006972f, -0.006231f, -0.003009f, 0.003206f, -0.000013f, -0.003386f, -0.006255f, -0.006834f, 0.004182f, 0.001750f, -0.002986f, 0.003660f, -0.025214f, -0.039964f, 0.014208f, 0.051966f, 0.025403f, -0.009711f, -0.040190f, -0.013929f, 0.002541f, 0.005634f, -0.007825f, 0.019748f, 0.013287f, -0.014566f, -0.007567f, -0.001930f, -0.026594f, 0.036955f, - -0.016835f, 0.013183f, -0.003096f, -0.008677f, -0.032394f, 0.010640f, 0.006717f, -0.004008f, 0.003907f, 0.014537f, -0.005296f, 0.036145f, -0.008092f, -0.005476f, 0.030117f, -0.003327f, -0.021625f, -0.019299f, -0.037355f, 0.005175f, -0.008293f, -0.011564f, -0.008143f, -0.027361f, -0.011475f, -0.025619f, 0.002744f, -0.022542f, 0.020419f, -0.012718f, -0.000414f, 0.006401f, 0.002543f, 0.011845f, -0.010839f, -0.027676f, 0.012084f, -0.003136f, 0.006914f, -0.006141f, -0.002782f, 0.000885f, 0.026732f, 0.040036f, 0.010883f, -0.012480f, 0.013842f, 0.014582f, 0.015910f, -0.006457f, -0.013328f, 0.020458f, 0.009690f, 0.027317f, 0.006381f, 0.007357f, 0.000822f, 0.008275f, 0.024580f, 0.033577f, 0.016537f, 0.005746f, 0.012646f, 0.005389f, -0.006932f, -0.022847f, -0.014478f, 0.002706f, 0.011193f, 0.001851f, -0.000496f, -0.008493f, -0.003101f, 0.004810f, 0.003287f, -0.018032f, -0.003344f, 0.004199f, -0.000658f, -0.008926f, -0.007444f, -0.009989f, 0.002027f, -0.001672f, 0.007003f, 0.012958f, 0.007682f, 0.000533f, -0.004150f, 0.007973f, 0.009589f, 0.000745f, 0.003297f, -0.012546f, -0.000326f, -0.004173f, - -0.012834f, 0.002850f, 0.002512f, -0.011477f, -0.001042f, -0.002597f, 0.004529f, -0.004385f, 0.011069f, 0.000179f, 0.015146f, 0.077258f, 0.002239f, -0.021044f, 0.064870f, 0.032401f, 0.028890f, 0.055853f, 0.056222f, 0.015712f, 0.018155f, 0.013762f, 0.061074f, 0.002832f, -0.021001f, 0.025913f, 0.006012f, -0.024002f, -0.026259f, 0.023039f, 0.023048f, 0.043300f, -0.003848f, 0.002851f, 0.001016f, 0.005655f, -0.025479f, 0.028839f, 0.020721f, 0.008630f, -0.019691f, 0.030538f, -0.008920f, -0.001967f, -0.040554f, -0.009287f, -0.002663f, -0.002944f, -0.021181f, 0.013815f, -0.019670f, -0.011852f, -0.011339f, 0.005500f, -0.013490f, -0.019230f, -0.025724f, 0.027295f, -0.019473f, 0.029050f, 0.013446f, 0.023793f, 0.007901f, -0.024932f, -0.000801f, -0.039867f, -0.017867f, -0.021901f, 0.008688f, -0.027805f, -0.014547f, -0.005363f, 0.000592f, 0.028076f, 0.003332f, -0.004842f, -0.045192f, 0.017663f, 0.015767f, -0.001470f, -0.000103f, -0.023450f, 0.017978f, 0.001521f, -0.019492f, 0.053524f, 0.012411f, -0.007435f, -0.000376f, -0.022149f, 0.003875f, 0.026602f, -0.006881f, -0.002663f, -0.029716f, -0.018188f, - 0.011146f, -0.004637f, -0.013981f, 0.017058f, 0.010965f, -0.018300f, 0.016155f, -0.006634f, 0.005297f, -0.006433f, 0.015821f, 0.002897f, -0.002188f, -0.000030f, 0.004030f, -0.021974f, 0.000495f, -0.008417f, 0.006639f, 0.006897f, 0.010781f, -0.009311f, 0.007938f, 0.005292f, 0.004878f, 0.007411f, 0.009574f, -0.001166f, 0.007441f, -0.010847f, 0.018453f, -0.008730f, 0.015657f, -0.011151f, 0.007085f, -0.023616f, -0.043310f, 0.013301f, 0.013044f, -0.013401f, 0.028191f, -0.031172f, 0.033860f, -0.024427f, -0.014227f, 0.010899f, 0.007836f, 0.087389f, 0.034146f, 0.013091f, -0.054535f, -0.001451f, -0.012944f, -0.028905f, -0.008399f, -0.010565f, -0.009568f, -0.003236f, -0.045351f, -0.000873f, -0.017159f, 0.000562f, 0.022078f, -0.024057f, 0.028650f, -0.009393f, -0.031709f, -0.028290f, 0.022697f, 0.017411f, -0.007092f, -0.015620f, 0.028950f, -0.015622f, -0.014754f, 0.022754f, -0.000650f, 0.007001f, -0.023444f, -0.000792f, -0.013784f, 0.029185f, -0.004400f, 0.041866f, -0.015660f, 0.006290f, 0.012617f, -0.001199f, 0.001602f, 0.012770f, -0.026995f, -0.004332f, 0.034406f, 0.002787f, 0.009445f, -0.000324f, - -0.027898f, 0.011921f, -0.019474f, 0.009913f, 0.030080f, 0.039016f, 0.042558f, 0.044797f, -0.009664f, 0.015717f, -0.000357f, 0.024035f, 0.054304f, -0.059647f, 0.046370f, -0.027581f, 0.012466f, 0.037265f, -0.023515f, 0.002389f, 0.011711f, 0.010153f, -0.002777f, 0.025932f, -0.010046f, -0.008219f, 0.010981f, -0.006238f, 0.025006f, -0.003724f, 0.009487f, -0.020164f, -0.003261f, -0.000621f, -0.016214f, -0.006847f, -0.020455f, 0.000193f, 0.005939f, 0.001967f, 0.022752f, -0.007528f, 0.001558f, 0.002426f, 0.009689f, 0.002348f, 0.009775f, -0.013503f, 0.010170f, 0.003083f, -0.000537f, 0.007190f, 0.009977f, -0.011365f, 0.010366f, -0.021823f, -0.019207f, 0.013395f, -0.006406f, -0.015498f, -0.002170f, 0.006279f, -0.009875f, 0.017490f, -0.020780f, -0.046239f, -0.008818f, 0.009156f, 0.000779f, 0.010642f, -0.034093f, -0.004807f, -0.006880f, -0.048875f, -0.037584f, 0.019210f, 0.020348f, 0.009195f, 0.014063f, -0.025101f, -0.012122f, -0.017839f, 0.053372f, 0.012634f, 0.001575f, 0.039747f, 0.023058f, 0.019911f, 0.018152f, 0.015538f, -0.028032f, 0.020075f, 0.008283f, -0.008790f, 0.015965f, -0.014328f, - -0.013939f, 0.027680f, -0.012030f, 0.017391f, 0.036792f, 0.001146f, 0.007089f, -0.000788f, 0.002430f, -0.008132f, -0.021511f, -0.027361f, -0.044215f, 0.018002f, -0.037450f, 0.013942f, 0.014618f, 0.018731f, 0.000154f, 0.001016f, -0.005227f, -0.028974f, -0.013671f, 0.014521f, -0.009985f, 0.014988f, 0.036776f, -0.011433f, 0.028134f, 0.012755f, 0.003132f, -0.001736f, -0.010023f, -0.026846f, -0.001122f, -0.036233f, -0.012537f, 0.038541f, -0.020667f, 0.006000f, -0.063806f, 0.030144f, -0.011821f, 0.009616f, -0.049238f, -0.043940f, 0.004134f, 0.011602f, 0.022519f, -0.050973f, -0.005390f, 0.000490f, 0.034630f, 0.028225f, 0.032049f, -0.010378f, 0.000668f, 0.004711f, 0.016753f, 0.003833f, 0.009208f, 0.026335f, 0.015033f, -0.010269f, 0.009600f, 0.002416f, 0.001881f, -0.000748f, -0.005646f, -0.022052f, 0.007670f, -0.010773f, 0.003256f, 0.008489f, -0.000294f, 0.001764f, -0.000311f, 0.008504f, -0.005415f, 0.035540f, 0.009690f, -0.001603f, 0.019914f, 0.011874f, 0.001644f, 0.005779f, -0.000624f, -0.016157f, 0.020934f, -0.007077f, 0.002804f, 0.024830f, 0.013903f, -0.008041f, 0.000085f, -0.010211f, - 0.016486f, 0.011198f, 0.013777f, 0.012638f, 0.037861f, -0.089946f, -0.022378f, -0.053346f, 0.017872f, -0.047888f, -0.016319f, -0.054298f, 0.014385f, -0.028221f, -0.021992f, -0.004459f, -0.046473f, -0.016634f, -0.049777f, -0.024847f, -0.057603f, 0.012582f, -0.053306f, -0.020806f, -0.027781f, -0.015268f, -0.014768f, -0.012208f, -0.050885f, -0.028796f, -0.038751f, -0.019596f, -0.011311f, 0.022102f, -0.003337f, 0.016551f, -0.031723f, -0.004932f, 0.001662f, -0.036160f, 0.006877f, -0.002341f, 0.002933f, 0.009734f, -0.036959f, -0.001871f, 0.013435f, -0.004342f, 0.015166f, 0.030780f, 0.055247f, -0.045794f, 0.002697f, 0.061774f, 0.000170f, 0.030432f, -0.021702f, 0.038364f, 0.006852f, -0.008892f, -0.051302f, -0.029922f, 0.042388f, 0.026458f, 0.041394f, 0.001739f, -0.029058f, 0.010796f, 0.014895f, 0.029903f, -0.055756f, 0.000622f, 0.010450f, -0.030500f, -0.010329f, -0.013057f, -0.018718f, -0.044380f, 0.068901f, -0.012449f, -0.022240f, -0.013931f, 0.014230f, 0.016790f, -0.039054f, -0.036012f, -0.001501f, 0.011772f, 0.001751f, 0.000348f, -0.007657f, -0.012939f, -0.000216f, 0.034987f, 0.021494f, 0.000003f, - -0.028663f, -0.019581f, 0.003184f, -0.010814f, 0.007558f, 0.009405f, 0.004658f, -0.002789f, -0.014780f, 0.006267f, 0.007311f, -0.003858f, 0.011080f, -0.006220f, -0.025415f, -0.011852f, -0.001440f, 0.007605f, -0.001870f, -0.007957f, -0.037169f, -0.014654f, -0.008485f, 0.003026f, 0.004709f, -0.015865f, -0.028762f, 0.011493f, 0.017363f, -0.015083f, 0.000759f, -0.013240f, 0.014650f, -0.004624f, -0.025652f, 0.038439f, -0.064829f, -0.000598f, -0.012929f, 0.028066f, -0.014353f, -0.039817f, 0.034745f, -0.069956f, -0.060496f, -0.049771f, 0.028472f, -0.014758f, 0.001494f, -0.027115f, -0.025844f, -0.029997f, 0.016781f, 0.014696f, 0.048715f, 0.023047f, 0.009768f, 0.045526f, -0.012202f, 0.016547f, -0.016508f, 0.014275f, 0.008111f, 0.027145f, 0.043675f, 0.022929f, -0.009226f, -0.026729f, -0.016097f, -0.005419f, 0.024473f, -0.008064f, 0.006739f, 0.000976f, -0.011427f, 0.023303f, -0.001600f, 0.019136f, 0.014046f, -0.037249f, 0.030623f, 0.056538f, 0.008669f, 0.047297f, 0.045616f, 0.020780f, 0.015010f, 0.000135f, 0.024034f, -0.015032f, -0.055096f, -0.017872f, 0.040667f, 0.000418f, -0.020356f, 0.021037f, - 0.057810f, -0.013222f, 0.004284f, -0.041934f, 0.041164f, 0.037053f, -0.002851f, 0.011927f, -0.019091f, 0.095114f, -0.059849f, -0.051821f, -0.049074f, 0.004147f, 0.001571f, -0.014397f, 0.042234f, -0.059552f, -0.001189f, -0.038067f, 0.014379f, 0.016867f, -0.002854f, 0.041320f, 0.009350f, -0.003503f, -0.022553f, -0.000279f, 0.010255f, 0.030104f, -0.020819f, -0.026572f, 0.010900f, -0.015838f, -0.004348f, 0.003675f, 0.007040f, 0.002452f, -0.000012f, -0.002000f, -0.025170f, 0.002364f, 0.005810f, 0.017152f, -0.014974f, -0.008403f, 0.009496f, 0.004542f, 0.006548f, 0.000573f, -0.016520f, -0.001884f, -0.018728f, -0.014161f, 0.018464f, 0.009414f, 0.010314f, 0.007244f, -0.000827f, 0.003559f, -0.005248f, 0.011232f, 0.001358f, -0.005154f, -0.001291f, -0.016375f, -0.006317f, -0.010914f, 0.006380f, 0.103992f, -0.022923f, 0.057922f, 0.099927f, -0.034083f, 0.047911f, 0.021133f, -0.062933f, 0.057448f, 0.008740f, -0.027580f, 0.042401f, 0.017995f, 0.039840f, -0.000409f, -0.033592f, 0.031718f, 0.010952f, 0.000095f, 0.010031f, -0.009694f, -0.035531f, -0.021272f, -0.017001f, -0.030842f, -0.022815f, -0.005898f, - 0.023674f, -0.021253f, -0.012697f, -0.030377f, 0.006446f, 0.002530f, 0.004882f, 0.041536f, -0.024872f, 0.009964f, -0.023071f, -0.013117f, 0.023913f, -0.019133f, -0.042655f, -0.054914f, 0.063205f, 0.028005f, -0.015632f, 0.043492f, -0.040013f, -0.035147f, -0.021283f, -0.003574f, 0.006449f, 0.000238f, -0.037235f, -0.027482f, -0.029102f, -0.064176f, -0.039996f, -0.034603f, 0.012448f, 0.021452f, -0.001697f, 0.037169f, 0.007150f, -0.038420f, -0.033012f, 0.050169f, -0.042988f, 0.005984f, 0.044101f, -0.005872f, -0.075683f, 0.052841f, -0.027844f, 0.008306f, 0.003522f, 0.043687f, -0.010416f, -0.017023f, -0.002102f, -0.025330f, 0.013284f, -0.043539f, 0.014873f, -0.055926f, -0.035527f, 0.021314f, -0.023469f, -0.007068f, -0.002893f, -0.033321f, 0.011013f, -0.019578f, 0.016023f, -0.005323f, -0.000413f, 0.001410f, 0.020818f, -0.015171f, -0.011638f, 0.003338f, -0.020684f, -0.009529f, 0.003411f, -0.013953f, -0.014405f, -0.010372f, -0.005980f, -0.016232f, -0.008643f, 0.022177f, -0.018022f, 0.008369f, 0.013851f, -0.003608f, 0.014803f, -0.019673f, 0.002442f, -0.013928f, 0.028595f, 0.004973f, 0.010499f, -0.020128f, - 0.025174f, 0.016742f, 0.019362f, 0.007695f, 0.002797f, 0.005746f, 0.014205f, -0.013926f, 0.001877f, -0.050279f, 0.030130f, -0.014071f, 0.050998f, 0.035390f, -0.081610f, -0.010018f, 0.008615f, -0.049414f, -0.008129f, -0.007889f, 0.060198f, 0.043710f, 0.040203f, 0.050371f, -0.001911f, -0.034911f, -0.027250f, -0.027747f, 0.001281f, -0.077619f, 0.009296f, 0.066868f, -0.060814f, -0.109477f, 0.011116f, -0.040841f, 0.080862f, -0.000342f, 0.002593f, 0.054448f, -0.024928f, 0.011336f, -0.002585f, -0.014555f, 0.047042f, -0.013416f, 0.023757f, 0.079387f, -0.058381f, -0.033098f, -0.053222f, 0.026615f, 0.004312f, 0.053192f, -0.030516f, 0.021048f, 0.002718f, 0.048451f, 0.028337f, -0.023477f, -0.015844f, 0.018413f, -0.008867f, -0.002019f, -0.034259f, -0.033527f, 0.017520f, -0.007391f, -0.010074f, -0.019021f, 0.043579f, -0.016482f, -0.017737f, 0.073467f, 0.078257f, 0.050903f, -0.066828f, -0.005822f, -0.021132f, 0.025985f, 0.097480f, -0.012273f, -0.074625f, -0.004800f, -0.030861f, 0.043919f, 0.019417f, -0.049821f, 0.026071f, 0.019433f, 0.025423f, -0.048081f, -0.017559f, 0.003621f, 0.042416f, 0.002672f, - -0.007085f, 0.007029f, -0.014843f, 0.003391f, 0.042377f, 0.020719f, -0.017985f, -0.021306f, -0.005092f, 0.013439f, 0.016795f, 0.022515f, -0.021532f, -0.008088f, -0.039260f, -0.008195f, 0.024432f, -0.024514f, -0.004114f, -0.015159f, -0.014291f, -0.023046f, -0.005091f, 0.015616f, -0.003782f, -0.001727f, 0.003646f, 0.009913f, -0.010630f, -0.029432f, -0.030729f, 0.018281f, 0.013846f, 0.025569f, -0.013113f, 0.018725f, 0.054863f, 0.002765f, -0.033302f, -0.005452f, 0.002695f, -0.003119f, -0.020950f, -0.047945f, 0.007242f, -0.039356f, 0.036248f, 0.020783f, -0.038398f, 0.065490f, 0.099383f, 0.002765f, -0.004574f, -0.034047f, -0.034336f, 0.005731f, 0.005786f, -0.016814f, 0.089901f, -0.008165f, 0.067068f, 0.053640f, -0.067639f, -0.002202f, -0.022641f, -0.072487f, 0.018319f, 0.016708f, 0.039610f, 0.067687f, -0.002000f, -0.019441f, 0.022343f, 0.024486f, 0.053399f, 0.022254f, 0.004943f, 0.043821f, 0.046268f, 0.015809f, -0.010587f, 0.040175f, 0.017993f, 0.048297f, 0.010403f, 0.013855f, 0.030316f, 0.051156f, -0.008520f, -0.040742f, -0.046942f, -0.015438f, -0.016306f, 0.080521f, 0.044212f, 0.124349f, - -0.005783f, -0.062851f, 0.055250f, -0.019070f, -0.021480f, -0.018925f, -0.042331f, 0.006137f, 0.023792f, -0.001034f, -0.023714f, 0.088312f, -0.017651f, 0.104233f, -0.028576f, 0.056037f, 0.004913f, -0.017740f, -0.056947f, -0.081428f, 0.076240f, -0.007495f, -0.013026f, -0.023482f, 0.070851f, -0.000149f, -0.074358f, 0.136204f, 0.042854f, 0.014725f, -0.015656f, -0.057351f, 0.028659f, 0.001410f, 0.028846f, -0.026735f, 0.020572f, 0.010226f, -0.012876f, -0.019798f, 0.003516f, -0.023905f, -0.011165f, -0.027139f, 0.003139f, -0.004904f, -0.000377f, 0.008779f, 0.022247f, -0.022834f, 0.008691f, -0.011248f, -0.000706f, 0.029735f, 0.019915f, -0.010903f, -0.037497f, -0.001404f, -0.002271f, 0.004771f, 0.034151f, -0.022407f, -0.013178f, 0.008366f, 0.021395f, -0.031380f, 0.001997f, 0.020295f, -0.000567f, -0.002644f, -0.032633f, 0.016616f, -0.001147f, 0.015103f, -0.034113f, 0.003587f, 0.014276f, 0.011119f, 0.016671f, -0.032885f, -0.034445f, 0.022337f, 0.092375f, -0.054895f, -0.035330f, 0.007505f, 0.016641f, -0.010447f, 0.065353f, 0.050936f, 0.051397f, 0.017390f, 0.025347f, 0.043289f, 0.026668f, -0.015649f, - -0.025844f, -0.058082f, -0.009470f, 0.031958f, 0.010858f, 0.006930f, -0.021717f, -0.054929f, -0.016119f, -0.007673f, 0.055971f, 0.000815f, -0.006773f, 0.042550f, -0.006830f, 0.011805f, 0.008992f, -0.094612f, 0.024200f, 0.025622f, -0.016616f, -0.040417f, 0.007619f, -0.053331f, -0.027252f, -0.081712f, 0.024648f, -0.068213f, -0.135412f, 0.015771f, -0.001930f, 0.095364f, -0.003353f, 0.032434f, 0.078613f, -0.012835f, -0.020477f, 0.035024f, -0.000772f, -0.068604f, -0.024070f, 0.009084f, 0.011360f, 0.050719f, 0.021013f, 0.045172f, 0.039009f, -0.028046f, -0.021105f, 0.019281f, 0.057441f, -0.023893f, -0.012136f, -0.052751f, -0.036537f, 0.014077f, -0.071365f, 0.020730f, -0.080147f, 0.015273f, -0.021190f, 0.056897f, -0.024899f, 0.040346f, -0.085891f, -0.017430f, 0.011646f, -0.051015f, 0.012826f, 0.009104f, 0.008745f, -0.038467f, 0.020149f, -0.037666f, 0.010680f, -0.002832f, -0.016150f, -0.006841f, -0.003866f, 0.012118f, -0.013235f, -0.005961f, -0.010633f, 0.024608f, -0.016068f, 0.014404f, -0.036327f, 0.019144f, -0.002191f, -0.002855f, 0.005105f, 0.035165f, 0.012115f, 0.015063f, -0.042099f, 0.005532f, - -0.017320f, -0.051820f, 0.020741f, -0.016562f, -0.013302f, -0.019110f, 0.019231f, -0.009288f, 0.009219f, 0.010938f, -0.005124f, 0.002336f, -0.012834f, 0.003706f, 0.010504f, -0.002434f, -0.001691f, -0.019765f, 0.072589f, 0.077367f, 0.180809f, 0.021312f, -0.101191f, -0.075978f, -0.055925f, -0.064555f, 0.126566f, 0.168923f, 0.057282f, -0.016113f, -0.053110f, 0.001883f, -0.064277f, 0.070760f, 0.066908f, 0.019856f, 0.009700f, -0.041901f, -0.006057f, 0.077865f, 0.018166f, 0.031289f, 0.026370f, 0.081706f, 0.068750f, -0.026490f, -0.060743f, -0.080310f, -0.054126f, -0.008045f, 0.022393f, 0.073456f, 0.044061f, -0.015323f, 0.039815f, -0.055741f, -0.018973f, -0.125355f, -0.019797f, 0.123398f, 0.095369f, -0.019195f, 0.250029f, 0.078439f, 0.007336f, -0.137076f, -0.023360f, -0.011754f, -0.032158f, 0.035021f, 0.019439f, 0.029675f, 0.052474f, -0.111853f, -0.120498f, -0.060537f, -0.081292f, -0.011596f, 0.027529f, 0.101215f, -0.060537f, 0.037035f, 0.157745f, 0.078872f, 0.027459f, 0.044235f, 0.032185f, -0.095278f, -0.157715f, 0.080675f, -0.039025f, 0.034743f, 0.084442f, 0.093448f, 0.008232f, -0.056498f, - -0.074480f, -0.060697f, 0.065264f, 0.037760f, 0.011352f, 0.065181f, -0.064993f, -0.011279f, -0.010441f, -0.028748f, -0.033662f, -0.002863f, -0.001010f, 0.021148f, 0.006515f, -0.009321f, 0.000127f, -0.000819f, 0.001022f, 0.005580f, 0.012011f, 0.018825f, -0.018904f, -0.025721f, -0.088335f, -0.048304f, -0.043713f, 0.052092f, 0.030742f, 0.018614f, -0.072363f, -0.070772f, -0.114118f, -0.031122f, 0.044684f, 0.057270f, 0.074421f, 0.029223f, 0.021655f, 0.008672f, 0.007055f, -0.002168f, 0.016563f, -0.004037f, 0.053222f, 0.037778f, 0.007387f, 0.000375f, 0.000161f, -0.009232f, -0.000349f, -0.038457f, -0.165541f, -0.039445f, 0.092284f, 0.176712f, 0.155687f, 0.373256f, 0.195359f, 0.132561f, 0.116635f, 0.053087f, -0.020873f, -0.188551f, -0.236703f, -0.353119f, -0.270416f, -0.277399f, -0.105532f, 0.001404f, 0.106242f, 0.197655f, 0.163054f, 0.168517f, 0.116145f, 0.158562f, 0.124120f, 0.175561f, 0.083609f, 0.065492f, 0.031323f, -0.045109f, -0.069424f, -0.106330f, -0.064283f, -0.231010f, -0.097572f, -0.218643f, -0.157754f, -0.250251f, -0.148763f, -0.232937f, -0.082718f, -0.115443f, -0.037579f, 0.017901f, - 0.118303f, 0.310213f, 0.295392f, 0.413894f, 0.280146f, 0.191134f, 0.248147f, 0.338938f, 0.298272f, 0.250552f, 0.174820f, 0.021156f, -0.169400f, -0.168138f, -0.208471f, -0.396763f, -0.438060f, -0.477119f, -0.476472f, -0.523169f, -0.452493f, -0.381139f, -0.336163f, -0.218847f, 0.025224f, 0.249170f, 0.433328f, 0.572828f, 0.713996f, 0.794505f, 0.553876f, 0.528282f, 0.342832f, 0.207782f, 0.196309f, -0.011638f, -0.064784f, -0.304204f, -0.583212f, -0.628058f, -0.509907f, -0.394053f, -0.232184f, -0.187789f, -0.191308f, -0.105423f, -0.164287f, -0.066369f, -0.018234f, 0.126350f, 0.239674f, 0.197000f, 0.256200f, 0.275462f, 0.293726f, 0.259547f, 0.346274f, 0.257473f, 0.210864f, 0.109091f, 0.022414f, -0.058306f, -0.268206f, -0.237405f, -0.318417f, -0.422038f, -0.382509f, -0.438311f, -0.450635f, -0.131222f, 0.014758f, 0.229208f, 0.280336f, 0.298759f, 0.346533f, 0.362148f, 0.307051f, 0.267287f, 0.204812f, 0.155522f, 0.056172f, -0.039806f, -0.119426f, -0.215171f, -0.316481f, -0.296218f, -0.264675f, -0.197723f, -0.093227f, -0.040770f, -0.019498f, -0.011357f, 0.029165f, 0.061253f, 0.073917f, 0.079862f, - 0.065641f, 0.052875f, 0.056920f, 0.046689f, 0.034522f, 0.063773f, 0.071031f, 0.054793f, 0.026045f, 0.013525f, 0.020838f, 0.027059f, 0.006411f, -0.001161f, -0.002481f, -0.007501f, -0.011974f, -0.004983f, -0.003283f}, - {0.024074f, 0.001085f, 0.004053f, 0.003381f, -0.009811f, -0.005067f, 0.013338f, 0.023226f, 0.003744f, 0.012381f, -0.005017f, 0.002354f, -0.000638f, 0.010487f, -0.008297f, -0.018913f, 0.007657f, 0.008875f, -0.011034f, 0.012811f, 0.006303f, 0.011688f, 0.003696f, 0.002791f, -0.005097f, -0.001619f, 0.000611f, 0.007795f, 0.000704f, -0.011704f, 0.000517f, -0.000936f, 0.002536f, -0.001620f, 0.002089f, 0.002823f, 0.006984f, 0.005079f, 0.001668f, 0.002196f, 0.000693f, 0.003436f, -0.003609f, -0.005835f, -0.012982f, 0.002517f, 0.002852f, 0.001059f, 0.009941f, -0.003514f, 0.007724f, 0.002143f, -0.003090f, -0.006124f, -0.003975f, 0.013934f, 0.002975f, 0.007777f, 0.001287f, 0.003069f, -0.002683f, 0.000479f, 0.000922f, 0.004006f, -0.001215f, -0.005188f, -0.002821f, -0.010802f, 0.001187f, 0.002110f, 0.009224f, -0.002970f, 0.007046f, -0.001233f, 0.004606f, 0.000078f, 0.004146f, 0.003228f, 0.001922f, -0.001738f, 0.004768f, 0.006600f, 0.004592f, 0.004306f, -0.000175f, 0.000923f, 0.001053f, -0.003661f, 0.001505f, 0.000809f, 0.003182f, 0.001640f, 0.001292f, 0.001691f, 0.002265f, -0.001315f, - 0.001354f, -0.001010f, -0.000166f, 0.008924f, 0.008618f, 0.003933f, 0.003524f, 0.004705f, 0.005697f, 0.008424f, -0.003677f, 0.008741f, 0.000095f, 0.009340f, -0.002052f, 0.016631f, 0.005650f, 0.005490f, -0.011343f, -0.001598f, -0.002576f, -0.014761f, 0.008058f, 0.006784f, -0.004664f, -0.019335f, -0.008806f, -0.002916f, 0.009411f, 0.012941f, 0.008163f, -0.005195f, 0.002758f, -0.008302f, 0.000386f, 0.000701f, -0.006754f, -0.003376f, -0.017490f, 0.001424f, -0.002203f, -0.007338f, 0.000750f, 0.000988f, -0.002382f, -0.000575f, 0.016719f, -0.004044f, 0.013615f, 0.002631f, -0.010549f, 0.000759f, 0.001008f, 0.007641f, -0.003458f, 0.002151f, 0.001798f, 0.000564f, 0.010416f, 0.003598f, 0.010693f, 0.007855f, -0.005520f, 0.009743f, 0.004734f, 0.007107f, 0.000647f, 0.002304f, -0.002527f, -0.004675f, -0.008848f, -0.010891f, 0.011288f, -0.011315f, -0.008737f, -0.009365f, 0.005202f, 0.004697f, 0.002049f, 0.002019f, 0.006599f, -0.004306f, 0.004958f, -0.003260f, -0.004554f, 0.007207f, -0.006701f, 0.001089f, 0.003353f, -0.005650f, 0.001321f, 0.000778f, -0.000913f, -0.000917f, -0.000535f, 0.003762f, - -0.001288f, 0.001378f, -0.001728f, 0.002879f, -0.000859f, 0.001594f, -0.002065f, -0.015076f, -0.014017f, 0.003019f, 0.000280f, -0.003040f, 0.008401f, -0.001107f, -0.001461f, 0.008716f, -0.009598f, 0.001878f, -0.008378f, -0.005429f, -0.003024f, 0.000090f, 0.014247f, 0.016178f, -0.007515f, 0.006338f, -0.011654f, -0.001117f, -0.004562f, 0.015718f, -0.004648f, -0.000893f, 0.001646f, -0.022139f, -0.003850f, -0.010934f, -0.003603f, -0.002715f, 0.008247f, 0.010954f, 0.004489f, 0.014806f, -0.001895f, -0.006743f, -0.006841f, 0.008551f, 0.022222f, 0.015534f, -0.008665f, -0.010133f, 0.011119f, -0.009971f, 0.001902f, 0.003548f, 0.018211f, -0.006699f, -0.008966f, 0.001987f, -0.005559f, 0.003485f, 0.004648f, 0.011577f, -0.012666f, -0.008218f, 0.007444f, 0.013986f, -0.001273f, -0.006487f, -0.008224f, -0.019765f, 0.007521f, -0.000032f, 0.005913f, 0.000928f, 0.000536f, -0.003105f, 0.003653f, -0.005044f, 0.003158f, 0.004275f, 0.004335f, -0.007014f, 0.005183f, -0.001282f, -0.004898f, 0.000478f, -0.010352f, 0.006512f, 0.001013f, 0.000829f, -0.004093f, -0.001413f, -0.003457f, -0.007235f, -0.005462f, 0.003856f, - 0.000397f, 0.001564f, -0.001312f, 0.000514f, -0.000368f, -0.002065f, -0.001592f, -0.003019f, 0.000360f, -0.001730f, -0.001251f, -0.000419f, 0.000729f, -0.000529f, 0.001042f, -0.000552f, 0.003691f, 0.001414f, -0.002059f, 0.002482f, 0.001550f, -0.002838f, -0.036658f, -0.012079f, -0.001942f, 0.006247f, 0.004198f, 0.009111f, -0.017516f, -0.005256f, -0.000806f, -0.018172f, -0.012987f, 0.004543f, 0.010966f, 0.006425f, 0.012101f, -0.001572f, 0.006940f, 0.016113f, 0.014219f, 0.013356f, 0.007690f, -0.005189f, -0.004132f, -0.008325f, -0.003701f, -0.008365f, 0.017195f, 0.007973f, -0.002677f, -0.007674f, -0.004688f, -0.007837f, -0.011387f, -0.012292f, -0.015423f, 0.009229f, 0.006608f, -0.017129f, 0.003987f, -0.000956f, 0.011748f, 0.001732f, 0.005762f, 0.007566f, -0.016183f, -0.002597f, -0.000638f, 0.002049f, 0.008424f, 0.012767f, -0.005198f, -0.001961f, -0.003825f, -0.010264f, 0.003075f, 0.001924f, -0.001121f, -0.002883f, 0.009702f, 0.000420f, -0.005440f, -0.001940f, 0.004573f, 0.006117f, -0.002568f, -0.000401f, 0.001579f, -0.008959f, 0.006504f, -0.000809f, -0.013331f, 0.001399f, -0.016260f, 0.002445f, - 0.011993f, -0.004155f, -0.000543f, -0.018337f, -0.008943f, -0.013662f, -0.008267f, -0.001264f, -0.001459f, 0.008257f, 0.001577f, 0.009716f, -0.005979f, 0.003173f, 0.005293f, 0.001632f, 0.005207f, 0.000453f, -0.003602f, 0.001881f, -0.001643f, 0.001529f, 0.000098f, 0.000535f, -0.000724f, -0.002673f, -0.000980f, 0.002047f, -0.002465f, 0.001475f, 0.004115f, 0.001946f, 0.001021f, -0.000084f, 0.000081f, -0.001079f, -0.001678f, -0.002900f, 0.001950f, 0.002459f, -0.001639f, 0.001541f, -0.001729f, 0.020116f, 0.007600f, 0.003394f, -0.005014f, 0.014819f, 0.005764f, 0.008373f, 0.023509f, 0.025434f, 0.000992f, -0.004136f, -0.009000f, -0.013833f, 0.005100f, 0.010050f, -0.005180f, -0.001035f, 0.001461f, -0.002424f, -0.008097f, 0.009537f, -0.009305f, 0.004401f, -0.026900f, -0.003888f, -0.006527f, -0.006541f, -0.013277f, -0.002775f, -0.001692f, 0.000207f, -0.006789f, -0.009740f, -0.007644f, 0.001069f, -0.005053f, -0.010332f, 0.006214f, 0.008883f, 0.000760f, -0.008475f, -0.009481f, 0.003500f, -0.007292f, 0.008378f, -0.010438f, 0.006757f, 0.002480f, -0.000124f, -0.014887f, -0.013813f, 0.003241f, -0.010007f, - 0.016288f, 0.002909f, 0.013674f, -0.007060f, 0.013764f, 0.002681f, 0.008874f, 0.003014f, 0.008410f, -0.007703f, -0.010993f, -0.000218f, 0.017688f, -0.001718f, -0.011857f, -0.006298f, 0.007729f, -0.004929f, -0.006763f, 0.001798f, -0.018925f, 0.012814f, 0.015456f, -0.000952f, -0.013125f, -0.016593f, -0.000480f, 0.013975f, 0.010117f, -0.007900f, 0.010746f, 0.001126f, -0.001534f, -0.002079f, -0.001083f, -0.000889f, 0.002976f, -0.004675f, -0.004028f, 0.000369f, 0.001624f, -0.003511f, 0.001308f, -0.001640f, -0.000471f, 0.003717f, -0.001467f, -0.000796f, 0.000622f, -0.005843f, 0.003122f, 0.000784f, 0.000558f, 0.001363f, 0.001876f, -0.000245f, 0.000520f, -0.001140f, -0.001112f, -0.000871f, -0.000653f, 0.028933f, 0.005930f, 0.015906f, -0.006236f, 0.011923f, 0.008874f, 0.018554f, -0.013707f, -0.009769f, -0.003121f, 0.001105f, 0.013196f, -0.006159f, 0.020023f, -0.001454f, 0.011390f, 0.009852f, -0.005571f, 0.004074f, 0.011541f, 0.010688f, 0.002751f, 0.002981f, 0.010516f, -0.021651f, 0.003569f, 0.016813f, 0.013132f, -0.011687f, 0.014660f, -0.017254f, 0.010524f, -0.015215f, -0.007678f, -0.003976f, - 0.015902f, -0.003221f, 0.016650f, 0.003715f, 0.003598f, 0.000840f, -0.000548f, 0.006597f, 0.009776f, 0.021682f, 0.003418f, 0.018713f, -0.009191f, 0.013681f, 0.018011f, -0.000558f, -0.003220f, -0.006486f, 0.006970f, -0.025714f, -0.002128f, 0.002543f, -0.009625f, -0.015256f, -0.000851f, -0.000963f, -0.002056f, 0.006745f, -0.015708f, 0.007957f, 0.006938f, 0.009997f, -0.024773f, 0.008540f, 0.005966f, -0.014640f, -0.001715f, 0.008086f, 0.018245f, -0.023096f, -0.002857f, 0.001785f, -0.021833f, -0.001910f, 0.003215f, -0.006048f, 0.014360f, -0.003193f, 0.001254f, 0.004058f, -0.002509f, -0.000698f, -0.000975f, 0.002587f, -0.005649f, 0.000875f, -0.002929f, 0.001769f, 0.000520f, -0.003183f, -0.000348f, 0.004009f, -0.001758f, -0.000756f, 0.000102f, -0.004576f, -0.001751f, 0.000947f, -0.001770f, -0.002057f, -0.000660f, 0.000935f, -0.002557f, -0.001026f, 0.003230f, 0.004407f, -0.005595f, -0.000086f, 0.000916f, -0.025711f, -0.031512f, -0.025231f, -0.022786f, -0.000783f, 0.016053f, -0.033261f, 0.023677f, 0.015300f, -0.037345f, 0.023508f, 0.009981f, 0.008031f, 0.003712f, 0.003599f, 0.008463f, -0.005889f, - -0.006084f, -0.012296f, -0.000352f, 0.014308f, 0.012128f, 0.007037f, -0.021257f, 0.014512f, -0.015189f, 0.000391f, -0.013355f, 0.016658f, -0.008827f, -0.006927f, 0.005282f, -0.025041f, 0.002512f, -0.008315f, -0.007465f, -0.002697f, 0.001805f, 0.024572f, -0.011589f, -0.003798f, -0.009351f, 0.018679f, -0.011367f, -0.006167f, 0.005779f, 0.005593f, 0.005288f, 0.006587f, -0.007754f, 0.008989f, 0.002312f, -0.020556f, 0.028218f, 0.011183f, 0.004567f, 0.002902f, -0.000135f, -0.013185f, 0.016153f, 0.013485f, 0.005659f, 0.018056f, 0.001934f, 0.007920f, 0.018200f, 0.009217f, 0.003919f, -0.012593f, 0.014996f, -0.006637f, 0.028644f, -0.003181f, 0.000763f, -0.007880f, -0.030046f, 0.003859f, -0.007287f, -0.003646f, 0.015419f, -0.001387f, -0.016301f, -0.009365f, 0.013252f, 0.011006f, 0.001728f, 0.012764f, 0.003384f, -0.009534f, 0.004479f, -0.001004f, -0.003164f, -0.002725f, 0.001041f, 0.007504f, -0.003601f, 0.000833f, 0.001346f, 0.004169f, 0.001619f, -0.003573f, 0.005555f, 0.000692f, 0.001476f, -0.000452f, 0.001433f, 0.000562f, -0.002181f, 0.003053f, -0.002204f, 0.002488f, 0.002046f, -0.001760f, - 0.006258f, -0.000994f, 0.001539f, -0.002277f, -0.001425f, 0.018368f, 0.012497f, -0.002117f, -0.011529f, 0.030176f, 0.047954f, -0.006329f, -0.006677f, 0.023201f, 0.005625f, 0.007654f, 0.006135f, -0.034548f, 0.003785f, -0.022340f, 0.017851f, 0.025484f, -0.006712f, -0.012313f, 0.004140f, 0.016138f, -0.009715f, 0.019494f, -0.007681f, 0.037627f, -0.011034f, 0.007274f, -0.001877f, 0.010204f, 0.026777f, -0.010134f, 0.002606f, -0.002379f, 0.007718f, -0.009956f, -0.004839f, 0.015246f, 0.032849f, 0.002732f, 0.024036f, -0.008933f, 0.003277f, -0.004548f, 0.007982f, 0.017580f, 0.026198f, 0.020440f, 0.019389f, 0.020188f, 0.012734f, -0.003716f, 0.003066f, -0.002808f, 0.000454f, 0.003988f, -0.013186f, -0.003811f, 0.021089f, -0.018607f, 0.007344f, -0.008200f, -0.004957f, -0.009688f, -0.038345f, 0.004248f, 0.020695f, 0.013105f, -0.004787f, -0.018191f, -0.044192f, -0.007144f, 0.017890f, -0.003748f, 0.007018f, -0.013791f, 0.010195f, -0.012722f, 0.011583f, 0.024984f, -0.011058f, -0.013567f, -0.025043f, 0.007496f, 0.003007f, 0.004064f, -0.019819f, 0.001389f, 0.000039f, -0.006015f, 0.001055f, 0.009278f, - 0.000326f, 0.006367f, 0.002754f, 0.004111f, 0.004982f, -0.000912f, 0.007884f, 0.001870f, 0.000716f, -0.001692f, -0.002687f, -0.002235f, 0.007501f, 0.002528f, -0.000366f, 0.005068f, 0.002575f, 0.003649f, -0.000818f, 0.004190f, 0.005033f, 0.006938f, -0.003031f, 0.000712f, -0.002959f, -0.033144f, -0.026043f, 0.003233f, 0.015618f, -0.014994f, -0.009548f, 0.001757f, -0.007808f, -0.049534f, -0.042419f, 0.018402f, 0.017282f, 0.002994f, 0.002695f, -0.018233f, 0.028504f, 0.034267f, 0.021404f, -0.017899f, 0.016754f, 0.022450f, -0.003337f, -0.028808f, -0.012747f, 0.039475f, -0.011583f, 0.003834f, 0.002598f, 0.022119f, -0.017668f, -0.031955f, 0.007096f, 0.014487f, -0.007635f, 0.009224f, 0.020808f, -0.010137f, -0.007727f, -0.001068f, -0.044251f, -0.013003f, 0.015485f, -0.008574f, -0.029502f, 0.005248f, -0.000591f, -0.009473f, 0.006102f, -0.002934f, -0.027959f, -0.023997f, -0.041947f, -0.033627f, 0.006738f, 0.014642f, 0.001582f, -0.010155f, -0.013862f, 0.000221f, -0.009413f, 0.008867f, -0.020042f, 0.000565f, -0.006963f, -0.005970f, -0.006648f, -0.001953f, 0.008125f, -0.009328f, -0.040220f, 0.005950f, - -0.005604f, 0.009866f, 0.011305f, 0.000642f, 0.007924f, 0.009252f, 0.003203f, -0.002430f, 0.005155f, -0.005866f, 0.002503f, -0.012724f, -0.006443f, -0.005772f, -0.006693f, 0.002754f, 0.011381f, -0.005946f, 0.002003f, -0.014445f, 0.001901f, -0.001549f, -0.010364f, 0.004523f, -0.003124f, 0.002569f, 0.004611f, 0.002383f, 0.002204f, 0.008919f, 0.002239f, 0.001063f, 0.003282f, -0.000089f, 0.001511f, 0.001138f, -0.002305f, -0.006946f, -0.001080f, -0.007030f, 0.003550f, -0.005375f, 0.008041f, -0.000029f, 0.011402f, 0.005010f, -0.006402f, -0.004532f, -0.003354f, -0.000521f, 0.016120f, 0.051744f, 0.045991f, 0.035924f, -0.003826f, 0.035121f, 0.011404f, 0.049018f, 0.020777f, -0.001012f, 0.059824f, -0.012456f, -0.003121f, -0.038095f, -0.010037f, -0.000784f, -0.026852f, 0.016069f, 0.024015f, -0.007816f, -0.000329f, -0.021638f, -0.037081f, -0.021900f, -0.028271f, -0.008269f, -0.017078f, -0.005398f, -0.002686f, 0.016970f, 0.004313f, -0.003561f, -0.015283f, -0.005307f, -0.010203f, 0.005395f, 0.000399f, -0.015180f, 0.008001f, 0.010032f, 0.003975f, -0.011746f, -0.015382f, 0.005090f, 0.014206f, -0.002073f, - -0.000537f, -0.027237f, 0.048753f, 0.008129f, -0.009281f, -0.001386f, 0.004317f, 0.020813f, 0.017711f, -0.018403f, 0.010327f, -0.007238f, 0.002203f, -0.003165f, -0.004649f, -0.027944f, -0.024897f, -0.033452f, 0.005029f, -0.001481f, -0.007078f, 0.020864f, -0.006700f, 0.059058f, -0.005868f, -0.003288f, -0.014614f, -0.006611f, 0.007629f, 0.010070f, 0.007098f, -0.000606f, 0.025402f, 0.018138f, -0.003825f, -0.012431f, 0.003310f, -0.007464f, -0.000099f, 0.002271f, -0.008268f, -0.002835f, 0.000144f, -0.002885f, 0.003925f, -0.010215f, 0.005921f, 0.011126f, -0.003532f, 0.005768f, -0.003567f, -0.002924f, -0.004643f, 0.001706f, 0.006143f, -0.002807f, 0.008273f, 0.001429f, 0.002846f, 0.011415f, 0.004868f, -0.001703f, 0.012028f, 0.005314f, 0.008296f, 0.010794f, 0.008311f, 0.000762f, -0.000177f, 0.007943f, -0.007619f, 0.000072f, 0.004788f, 0.002531f, 0.005497f, 0.005062f, 0.002654f, 0.006545f, -0.031832f, -0.044664f, -0.025278f, 0.033671f, 0.026006f, -0.022711f, -0.024058f, 0.036086f, 0.021329f, -0.022441f, -0.031281f, -0.004882f, 0.004921f, 0.003611f, 0.004027f, -0.017881f, 0.018527f, -0.013301f, - 0.036612f, -0.005601f, -0.026366f, 0.006187f, 0.009093f, -0.000098f, 0.002462f, -0.011332f, -0.017274f, -0.000825f, 0.014666f, -0.009105f, 0.011081f, -0.018073f, -0.048927f, -0.039299f, 0.024578f, -0.030593f, 0.024230f, 0.007269f, 0.002502f, -0.010176f, 0.014079f, 0.004713f, -0.004221f, -0.006963f, 0.006394f, 0.014866f, -0.013724f, 0.041170f, -0.010750f, 0.013898f, -0.012773f, 0.003689f, -0.003862f, -0.016043f, 0.039297f, -0.030986f, 0.042782f, -0.001500f, -0.021847f, -0.032571f, 0.016296f, 0.005908f, 0.005027f, 0.001978f, 0.017159f, 0.011821f, 0.015513f, -0.033534f, -0.010574f, 0.000959f, 0.000068f, 0.008538f, -0.025849f, -0.012276f, -0.008804f, -0.004301f, -0.032265f, -0.006444f, -0.011129f, -0.035777f, -0.002402f, -0.020261f, 0.004733f, -0.009474f, 0.002217f, 0.004688f, 0.015191f, 0.009353f, -0.006512f, -0.000937f, -0.013697f, 0.007332f, -0.001464f, 0.006372f, -0.015998f, 0.000915f, -0.006751f, 0.003807f, -0.014800f, 0.002869f, 0.002668f, 0.000779f, -0.003752f, 0.005051f, -0.008952f, 0.006447f, -0.013642f, 0.005063f, -0.009956f, 0.004625f, 0.001857f, 0.006460f, -0.005475f, 0.016448f, - 0.005813f, 0.000304f, -0.010521f, -0.008093f, -0.002207f, 0.010996f, -0.002914f, -0.005305f, -0.005775f, 0.007546f, 0.006585f, 0.076853f, 0.025608f, -0.017119f, 0.039447f, 0.036777f, -0.019046f, -0.024218f, 0.059319f, -0.005317f, 0.013012f, -0.035208f, 0.086359f, 0.003008f, -0.024248f, 0.012530f, 0.004265f, 0.041938f, 0.000666f, 0.052965f, -0.038146f, 0.000792f, -0.041667f, 0.003177f, 0.029170f, 0.001326f, -0.025565f, 0.036080f, 0.019224f, 0.010594f, 0.008610f, -0.012672f, -0.012268f, 0.003235f, -0.018135f, 0.023592f, -0.021189f, -0.028178f, 0.024716f, 0.009336f, -0.032726f, 0.017637f, 0.002027f, -0.023792f, -0.013425f, -0.008012f, 0.012336f, -0.002895f, -0.014426f, 0.017315f, -0.021229f, -0.008471f, -0.007385f, 0.029038f, -0.019302f, 0.013968f, 0.022223f, 0.010238f, -0.013418f, -0.027373f, 0.017088f, -0.023433f, 0.031312f, -0.039827f, 0.052148f, -0.015646f, -0.007563f, -0.007600f, 0.023624f, -0.001886f, 0.008432f, 0.014076f, 0.008356f, 0.020072f, -0.019999f, -0.037832f, 0.002404f, 0.031800f, -0.021594f, -0.010310f, -0.022566f, -0.013596f, 0.005627f, -0.002421f, -0.006684f, 0.013621f, - 0.009690f, 0.007091f, -0.003795f, 0.020867f, 0.012636f, -0.010038f, -0.005455f, 0.003915f, 0.000828f, 0.017614f, 0.011020f, -0.001710f, -0.006128f, -0.004798f, 0.019188f, 0.001535f, -0.010329f, 0.012076f, 0.003368f, 0.000229f, 0.009963f, 0.004384f, -0.002169f, -0.010817f, 0.002577f, 0.012516f, -0.009884f, -0.002688f, 0.014236f, -0.001266f, -0.003404f, -0.004008f, 0.008232f, 0.001334f, -0.000157f, -0.004197f, -0.045603f, -0.006035f, 0.042377f, -0.012614f, -0.025849f, 0.011284f, -0.011944f, -0.002583f, 0.019415f, -0.045961f, -0.026449f, 0.017332f, 0.023855f, 0.031716f, -0.001895f, -0.006351f, 0.013280f, -0.003390f, -0.044749f, -0.031200f, 0.053459f, -0.004322f, -0.046120f, -0.027288f, -0.018329f, -0.015667f, 0.004707f, 0.015333f, 0.001236f, -0.008043f, -0.022815f, -0.035773f, 0.005175f, 0.004452f, -0.000846f, 0.028761f, -0.019412f, -0.055950f, 0.022986f, 0.016123f, -0.064636f, 0.038583f, -0.010116f, -0.033099f, -0.026657f, -0.002696f, 0.037426f, 0.008605f, -0.011850f, -0.013652f, 0.010984f, 0.019216f, -0.026977f, 0.020732f, 0.003794f, 0.015214f, -0.011444f, -0.028723f, 0.025695f, -0.000145f, - 0.028767f, -0.088252f, 0.011610f, 0.013376f, -0.012600f, 0.024251f, 0.028837f, 0.083476f, 0.002795f, -0.055465f, -0.025052f, -0.014638f, -0.053281f, -0.052921f, 0.003163f, -0.030134f, 0.000815f, -0.020084f, 0.020151f, -0.020431f, -0.019473f, 0.035137f, 0.009099f, -0.001367f, -0.001514f, 0.020561f, -0.003951f, -0.002229f, 0.012432f, 0.009705f, -0.007193f, 0.006591f, -0.018456f, -0.004299f, 0.005693f, -0.003699f, -0.005057f, -0.009225f, -0.009253f, -0.005086f, -0.011511f, 0.004675f, -0.014745f, 0.003179f, -0.002196f, 0.014130f, -0.002924f, -0.007528f, -0.005885f, -0.008653f, -0.008731f, -0.002538f, -0.005972f, -0.011226f, -0.007807f, 0.008093f, -0.010603f, -0.005752f, -0.019304f, 0.006036f, 0.008372f, 0.020338f, 0.005042f, -0.002658f, 0.001098f, -0.038388f, 0.006108f, 0.023699f, 0.021085f, -0.034067f, 0.060636f, 0.042294f, -0.019500f, 0.025300f, -0.049164f, -0.010891f, -0.016505f, 0.077567f, 0.049645f, -0.018454f, -0.029635f, -0.036189f, -0.008089f, 0.002074f, 0.014205f, 0.052046f, 0.011025f, 0.008862f, 0.011213f, 0.001461f, -0.017200f, 0.002118f, -0.003290f, 0.024002f, 0.032317f, 0.041054f, - 0.026663f, 0.017432f, -0.004072f, -0.007543f, 0.006486f, 0.037229f, 0.005854f, 0.006644f, -0.037839f, -0.019172f, 0.063823f, 0.025968f, 0.019175f, 0.000529f, 0.038237f, 0.020491f, 0.080596f, -0.004455f, 0.083100f, 0.005967f, -0.025790f, 0.026968f, -0.022450f, -0.016719f, -0.002934f, -0.015270f, 0.000929f, 0.015504f, 0.033264f, 0.005861f, -0.007061f, -0.036332f, 0.011773f, 0.003098f, 0.024050f, -0.028471f, 0.007649f, -0.012520f, 0.004343f, -0.036231f, 0.018488f, -0.031864f, -0.003840f, -0.043405f, -0.059801f, -0.009869f, -0.009302f, 0.049401f, 0.013330f, -0.001407f, 0.009288f, 0.015505f, 0.019263f, 0.003392f, -0.000677f, 0.000943f, -0.034624f, 0.011145f, 0.000557f, 0.032487f, -0.013062f, -0.001410f, -0.008580f, 0.023149f, 0.004643f, 0.021170f, -0.000181f, -0.024188f, 0.011959f, -0.001060f, 0.008139f, -0.018321f, -0.008317f, 0.004677f, 0.005188f, -0.013545f, 0.001395f, 0.012883f, 0.007938f, -0.011867f, -0.013400f, 0.024019f, -0.023839f, 0.010244f, -0.007307f, -0.019206f, 0.006249f, 0.004768f, 0.006300f, 0.008429f, -0.008864f, -0.000798f, 0.011471f, 0.001267f, 0.008004f, -0.003008f, - -0.009062f, -0.008927f, -0.020280f, -0.031094f, 0.009510f, -0.035665f, -0.000019f, 0.042943f, 0.013545f, 0.036591f, -0.042530f, -0.019739f, 0.020909f, 0.004178f, 0.060966f, -0.031076f, 0.036474f, -0.013901f, -0.018402f, -0.045527f, -0.017601f, -0.024533f, 0.030490f, 0.006993f, -0.040417f, 0.050558f, -0.026163f, -0.024516f, 0.004958f, 0.019614f, -0.014779f, 0.034922f, -0.016971f, -0.024510f, -0.012524f, 0.011500f, -0.004253f, -0.006839f, 0.003826f, 0.034802f, -0.023659f, 0.063819f, -0.024809f, -0.000977f, 0.059293f, -0.012054f, 0.010456f, -0.080993f, 0.003612f, 0.014297f, -0.018230f, 0.035505f, -0.064844f, -0.079500f, 0.030131f, -0.014241f, 0.043893f, -0.032921f, -0.030922f, 0.003368f, -0.010166f, 0.067283f, -0.008202f, -0.003259f, 0.015037f, -0.062830f, 0.003575f, -0.063491f, -0.025361f, 0.003475f, 0.015137f, -0.079225f, -0.035285f, -0.009880f, -0.003857f, 0.025413f, -0.033913f, 0.040300f, -0.016622f, 0.004373f, -0.051939f, -0.002806f, -0.045889f, 0.017164f, 0.009937f, 0.033981f, 0.043538f, -0.016395f, 0.028555f, 0.003689f, -0.009337f, 0.014422f, 0.009137f, -0.014191f, -0.014185f, -0.025273f, - -0.000891f, -0.015106f, -0.015596f, 0.005236f, -0.003662f, 0.021462f, -0.029031f, -0.005239f, -0.018239f, 0.007031f, 0.010621f, -0.010272f, -0.001310f, -0.015644f, -0.015395f, 0.017169f, 0.028514f, 0.031854f, 0.006638f, 0.001891f, -0.008551f, 0.005897f, 0.005369f, -0.012292f, -0.019212f, 0.006421f, -0.010078f, -0.014325f, 0.021751f, 0.014911f, 0.012746f, -0.020003f, -0.022807f, -0.048934f, 0.039902f, -0.034980f, -0.010044f, 0.032040f, 0.073206f, -0.020664f, 0.060004f, 0.021554f, 0.015495f, -0.027653f, 0.066476f, 0.010689f, 0.031034f, 0.003183f, -0.038946f, 0.014475f, -0.039108f, -0.038667f, 0.024369f, -0.038517f, -0.008324f, -0.008779f, 0.039420f, 0.003693f, -0.013173f, 0.013079f, 0.017564f, -0.007791f, -0.037089f, -0.008385f, 0.028610f, 0.069510f, 0.015985f, -0.038642f, 0.004329f, -0.007152f, 0.016623f, 0.021336f, 0.035112f, -0.015173f, 0.000835f, 0.023044f, 0.005260f, -0.000856f, 0.046300f, 0.042130f, 0.049793f, 0.017502f, 0.041837f, 0.006056f, 0.025089f, -0.019356f, -0.003528f, 0.005886f, -0.038930f, 0.003267f, 0.065783f, -0.008031f, -0.014467f, 0.014181f, -0.001044f, 0.018027f, - -0.039268f, 0.052200f, -0.032627f, -0.014212f, -0.008995f, 0.002982f, 0.006015f, 0.006995f, -0.057109f, 0.072243f, -0.015706f, -0.022696f, -0.008643f, 0.061391f, -0.007083f, 0.013030f, -0.048440f, -0.033303f, 0.000843f, 0.025730f, 0.023218f, 0.039364f, -0.062909f, -0.019340f, 0.059922f, -0.021270f, 0.006471f, 0.051727f, 0.012079f, 0.011556f, -0.003523f, 0.002074f, -0.019815f, -0.001226f, 0.004725f, 0.014974f, -0.009073f, 0.012512f, -0.022848f, -0.012440f, 0.001027f, -0.006112f, -0.004108f, -0.052432f, -0.041052f, 0.003619f, 0.026307f, -0.024615f, -0.042818f, -0.017143f, -0.035221f, 0.010068f, 0.001266f, -0.013143f, 0.033245f, -0.009414f, 0.013404f, 0.015587f, -0.018563f, -0.012648f, -0.003372f, 0.004344f, -0.001685f, 0.025540f, -0.000726f, 0.001820f, -0.012610f, -0.002551f, -0.019653f, 0.117547f, -0.006900f, 0.023543f, -0.000981f, -0.012112f, 0.003323f, -0.054404f, -0.023208f, -0.016745f, 0.021147f, 0.015063f, 0.026610f, 0.003019f, -0.028607f, 0.029959f, -0.024296f, 0.034544f, 0.025449f, -0.028004f, -0.029971f, 0.003539f, 0.042298f, -0.043392f, 0.018169f, 0.019957f, -0.024768f, 0.011005f, - -0.003196f, 0.015114f, -0.001919f, -0.063247f, 0.035463f, 0.021763f, -0.053267f, 0.064249f, -0.034063f, -0.008207f, -0.021085f, 0.051862f, -0.010280f, -0.044153f, -0.000074f, 0.000653f, 0.042894f, 0.043598f, 0.002908f, -0.033639f, 0.048916f, -0.007899f, 0.008659f, -0.062027f, 0.048872f, 0.019923f, 0.002983f, -0.035577f, -0.026923f, -0.003771f, 0.017039f, -0.028579f, -0.051079f, -0.021735f, 0.040448f, 0.025072f, -0.005915f, 0.065619f, 0.003979f, -0.010596f, -0.047223f, 0.057927f, -0.053695f, -0.017281f, 0.059170f, 0.018762f, 0.007751f, -0.022125f, 0.009277f, 0.058363f, 0.013037f, 0.025664f, 0.036997f, -0.095181f, -0.020763f, -0.015690f, -0.007768f, -0.039373f, -0.006875f, -0.004514f, 0.058046f, 0.015877f, 0.004063f, 0.029632f, 0.041532f, 0.029188f, -0.020336f, 0.011267f, 0.024937f, -0.004669f, 0.009764f, 0.010932f, 0.013421f, 0.008817f, 0.041331f, 0.022541f, 0.002782f, -0.011678f, -0.018292f, -0.035310f, 0.005439f, 0.000360f, 0.009885f, 0.012028f, 0.005837f, 0.062253f, -0.008205f, 0.022755f, 0.013723f, -0.016471f, -0.048819f, -0.007554f, -0.017862f, -0.030195f, -0.032652f, 0.006122f, - -0.005088f, -0.039395f, 0.000508f, 0.015644f, -0.003541f, -0.003417f, 0.014330f, -0.009320f, -0.030040f, -0.047135f, 0.001495f, -0.052768f, 0.049356f, 0.077127f, 0.035807f, 0.043871f, -0.067346f, -0.060034f, -0.047185f, 0.004500f, 0.083448f, -0.015493f, 0.031001f, 0.054231f, 0.027317f, -0.030028f, 0.001751f, 0.039575f, -0.051174f, -0.042787f, -0.036717f, 0.041467f, 0.028898f, -0.053675f, -0.075747f, 0.102570f, 0.063250f, -0.073292f, 0.033077f, -0.008657f, 0.030297f, 0.003146f, -0.022214f, -0.050944f, 0.046362f, -0.001356f, -0.037759f, -0.056533f, 0.014372f, 0.013083f, -0.014329f, 0.001388f, -0.005292f, -0.027956f, -0.012306f, -0.014781f, 0.026118f, -0.049560f, 0.054486f, -0.037423f, 0.001948f, 0.085721f, -0.082866f, -0.020101f, 0.078099f, 0.005596f, 0.018219f, -0.011714f, -0.024542f, 0.024429f, -0.009163f, -0.034561f, 0.004394f, -0.078690f, 0.133186f, -0.013201f, -0.147073f, 0.055539f, 0.144883f, 0.085459f, -0.179298f, -0.052210f, 0.033795f, 0.012880f, -0.027406f, -0.041394f, 0.022239f, 0.054698f, -0.067552f, -0.018676f, -0.117770f, -0.020351f, 0.040494f, 0.014774f, -0.036089f, -0.058924f, - 0.023023f, 0.051564f, -0.001244f, -0.015941f, -0.028365f, 0.040983f, 0.024236f, 0.016649f, -0.003606f, -0.012401f, 0.004732f, 0.022890f, 0.017650f, -0.004198f, -0.047300f, -0.029386f, 0.048893f, 0.020999f, -0.025440f, -0.017160f, 0.035029f, 0.011757f, -0.005084f, -0.071523f, -0.032954f, -0.035672f, 0.039975f, 0.010999f, 0.008606f, -0.007430f, 0.000843f, 0.039048f, -0.008115f, -0.006940f, -0.034263f, 0.006760f, -0.011204f, 0.054523f, 0.011392f, -0.012198f, 0.006451f, 0.055046f, -0.007346f, -0.037164f, 0.008553f, 0.036581f, 0.085434f, -0.035787f, 0.027837f, -0.045173f, -0.119821f, 0.064721f, -0.030186f, -0.065484f, -0.045435f, -0.066943f, 0.032114f, 0.022409f, -0.090161f, 0.057963f, -0.031440f, -0.002171f, -0.001123f, -0.046162f, 0.035662f, 0.035667f, 0.031329f, -0.002848f, 0.040991f, 0.021564f, -0.024909f, 0.002400f, -0.051433f, -0.018478f, -0.045638f, -0.031663f, -0.002279f, 0.074273f, -0.061955f, -0.013065f, -0.013391f, -0.055315f, 0.032479f, -0.062411f, 0.032372f, 0.028284f, -0.042528f, 0.033664f, -0.068337f, 0.019797f, -0.059425f, 0.038710f, -0.022302f, -0.031193f, -0.032608f, -0.048197f, - -0.013117f, 0.024566f, 0.042115f, -0.048918f, 0.032754f, 0.018594f, 0.051299f, 0.063384f, 0.036545f, -0.052294f, -0.024469f, -0.098527f, -0.025046f, -0.028456f, 0.032746f, -0.115020f, -0.021961f, -0.068319f, -0.006054f, 0.068980f, 0.063170f, 0.041814f, 0.014617f, 0.092810f, 0.101286f, 0.090493f, -0.031133f, -0.040344f, 0.034189f, 0.088591f, 0.163262f, 0.012040f, 0.038125f, 0.020160f, -0.008880f, 0.030439f, -0.029587f, 0.018048f, -0.007796f, -0.000191f, -0.019122f, 0.030883f, 0.035305f, -0.012130f, -0.029463f, -0.021996f, 0.026704f, 0.012122f, 0.030300f, -0.016457f, 0.011651f, -0.005803f, -0.013661f, -0.008464f, 0.030085f, 0.060022f, 0.028401f, -0.030771f, 0.015600f, -0.010479f, 0.021235f, 0.009823f, 0.010409f, 0.029481f, -0.019018f, -0.039119f, 0.003088f, 0.030507f, 0.023549f, 0.008394f, -0.006068f, -0.013317f, -0.054262f, 0.053367f, 0.014661f, -0.012273f, -0.056411f, -0.012906f, -0.038821f, 0.019506f, -0.018878f, 0.013907f, 0.106861f, -0.063105f, 0.039811f, 0.048828f, -0.022734f, 0.004596f, 0.018411f, -0.005802f, 0.051705f, 0.002824f, 0.037366f, -0.047929f, -0.007043f, 0.041958f, - 0.006642f, -0.065101f, 0.041986f, -0.025921f, -0.021494f, -0.024784f, -0.006735f, -0.024176f, 0.024478f, 0.034687f, 0.016571f, -0.005927f, -0.018423f, 0.030098f, -0.010048f, -0.047827f, 0.038974f, -0.080820f, -0.020656f, -0.016581f, -0.018053f, 0.046237f, 0.050255f, 0.090694f, -0.026859f, 0.038831f, -0.001714f, 0.017531f, 0.059141f, -0.004288f, 0.006076f, -0.039583f, -0.125111f, 0.061845f, 0.011630f, -0.060240f, -0.041579f, 0.006124f, 0.032361f, -0.005727f, -0.035648f, 0.018365f, -0.036547f, 0.047717f, 0.026332f, -0.020785f, -0.043784f, 0.086478f, 0.009230f, 0.004597f, -0.008215f, 0.011993f, 0.005823f, 0.003774f, -0.029362f, -0.061458f, 0.016706f, -0.009004f, -0.022163f, -0.056646f, -0.014226f, -0.001686f, 0.050224f, 0.020825f, -0.063941f, 0.037092f, 0.006320f, -0.002437f, -0.007357f, 0.020679f, 0.026226f, -0.005279f, -0.012194f, -0.004542f, -0.011558f, 0.009766f, 0.015462f, -0.000731f, 0.008738f, 0.017656f, -0.006835f, 0.025505f, 0.010557f, 0.007803f, 0.013118f, -0.007242f, 0.031682f, 0.005352f, -0.007083f, 0.020833f, -0.025563f, 0.008074f, 0.014220f, -0.006042f, -0.011111f, 0.028752f, - 0.041209f, -0.037229f, -0.007194f, -0.013165f, -0.013049f, 0.014774f, 0.012554f, -0.023424f, 0.012617f, 0.010303f, 0.008948f, 0.010784f, -0.021274f, 0.014896f, -0.001917f, 0.008745f, -0.006923f, 0.005972f, 0.118911f, 0.060648f, 0.119655f, -0.110491f, 0.009554f, 0.057432f, -0.022277f, 0.065416f, 0.126252f, 0.069282f, 0.004026f, -0.034019f, -0.035080f, 0.006545f, 0.054717f, 0.058594f, 0.013313f, -0.000147f, -0.087136f, -0.017960f, 0.085931f, 0.028429f, -0.023969f, 0.047459f, -0.040377f, -0.056481f, -0.015515f, -0.003771f, 0.066438f, 0.086773f, 0.077954f, 0.029537f, -0.030222f, -0.046458f, -0.086188f, -0.085701f, 0.074645f, 0.031305f, 0.006117f, 0.115284f, 0.006984f, -0.035300f, -0.047177f, -0.047933f, 0.023316f, 0.049254f, 0.039199f, 0.075621f, 0.005370f, 0.054413f, -0.003568f, -0.009780f, 0.027565f, 0.050380f, 0.036855f, 0.032017f, -0.028737f, -0.010886f, -0.022666f, -0.051102f, -0.040942f, -0.074475f, -0.024928f, 0.019967f, -0.012227f, 0.054182f, 0.065135f, -0.001061f, 0.000618f, -0.026668f, -0.047612f, 0.009823f, 0.062939f, -0.003626f, 0.034837f, 0.015280f, -0.004569f, -0.019716f, - -0.009065f, 0.005761f, 0.021977f, 0.017135f, -0.016818f, -0.035230f, -0.043551f, -0.040866f, -0.015833f, 0.016607f, -0.004250f, -0.025679f, -0.013137f, -0.017816f, -0.015061f, 0.008437f, -0.002271f, 0.024137f, 0.034531f, 0.007763f, -0.041975f, -0.021569f, -0.025143f, -0.005696f, 0.028332f, 0.006854f, 0.006976f, -0.034316f, -0.032511f, -0.037041f, -0.019019f, 0.032377f, 0.022053f, 0.027954f, 0.015017f, -0.013486f, -0.016717f, 0.011886f, 0.010732f, -0.002858f, 0.007280f, -0.014133f, -0.011391f, 0.008461f, 0.005929f, 0.011707f, -0.006813f, -0.014039f, -0.006483f, -0.010745f, -0.002031f, -0.063164f, -0.123185f, 0.048606f, 0.200874f, 0.204245f, 0.172882f, 0.125268f, -0.077322f, -0.088180f, -0.095292f, -0.126731f, -0.193939f, -0.156231f, -0.135704f, 0.062990f, 0.145763f, 0.108407f, 0.234429f, 0.181190f, 0.094462f, -0.034872f, -0.063208f, -0.157617f, -0.123066f, -0.121848f, -0.024938f, -0.074670f, -0.060659f, 0.018060f, 0.032952f, 0.066384f, 0.066613f, 0.091417f, 0.090662f, 0.116989f, 0.068205f, 0.029990f, -0.017072f, -0.019789f, -0.051536f, -0.077940f, -0.094130f, -0.115043f, -0.075383f, -0.141293f, - -0.094171f, -0.070672f, 0.070646f, 0.134020f, 0.144506f, 0.099972f, 0.068080f, 0.106698f, 0.081607f, 0.102398f, 0.080438f, 0.028180f, -0.038096f, -0.179431f, -0.126933f, -0.129365f, -0.200754f, -0.125953f, -0.109040f, -0.105806f, 0.038361f, 0.106329f, 0.168852f, 0.139039f, 0.198516f, 0.178172f, 0.174201f, 0.124187f, -0.067908f, -0.061460f, -0.139600f, -0.184568f, -0.203382f, -0.166815f, -0.080136f, -0.022812f, -0.042239f, 0.054915f, 0.145354f, 0.102458f, 0.069163f, 0.116570f, 0.097935f, 0.034942f, -0.023218f, -0.023387f, -0.007709f, -0.028672f, -0.078429f, -0.049318f, -0.056088f, -0.030360f, -0.025251f, -0.058456f, -0.021772f, 0.019958f, -0.019728f, 0.064457f, 0.085099f, 0.093509f, 0.098914f, 0.006014f, 0.029393f, 0.028758f, -0.008652f, -0.135913f, -0.108504f, -0.084817f, -0.075782f, -0.059713f, -0.056656f, 0.062291f, 0.093131f, 0.101236f, 0.096878f, 0.079836f, 0.054674f, 0.049182f, -0.000986f, -0.014880f, -0.078747f, -0.106216f, -0.095140f, -0.079411f, -0.050754f, -0.033145f, 0.003545f, 0.047454f, 0.096582f, 0.072208f, 0.045836f, 0.033064f, 0.008821f, -0.001022f, -0.000310f, -0.019750f, - -0.025628f, -0.021343f, -0.025085f, 0.005387f, -0.009736f, -0.034471f, 0.003959f, 0.015582f, -0.006601f, -0.009174f, -0.007624f, 0.003133f, 0.005732f, -0.007803f, 0.001490f, 0.008673f, 0.002502f, 0.000940f, 0.000034f} - }, - { - {-0.006192f, 0.006233f, 0.005383f, 0.011961f, -0.016344f, 0.003472f, 0.010816f, 0.019685f, -0.002106f, 0.011068f, -0.000443f, 0.010044f, 0.002462f, 0.015432f, -0.000290f, -0.005075f, 0.010451f, 0.014785f, 0.014081f, 0.008243f, 0.002291f, -0.005784f, -0.004492f, 0.001334f, 0.007197f, -0.003707f, 0.003358f, 0.000822f, 0.008179f, -0.004010f, -0.000203f, 0.001968f, -0.009709f, -0.005726f, -0.002837f, -0.010234f, 0.002460f, -0.002942f, -0.000059f, -0.001457f, -0.008433f, 0.006511f, 0.010117f, -0.002164f, 0.000840f, 0.000849f, -0.001581f, 0.010625f, -0.012959f, -0.000123f, 0.005407f, 0.001355f, 0.001748f, -0.003208f, -0.010727f, -0.002839f, 0.004218f, 0.004858f, 0.005535f, -0.001071f, 0.000224f, -0.000024f, 0.002216f, -0.001925f, 0.011303f, 0.000216f, -0.000955f, -0.007486f, 0.001036f, -0.005392f, -0.004041f, 0.004341f, 0.004881f, 0.011510f, 0.000449f, 0.011314f, 0.001337f, 0.001128f, 0.000808f, -0.006147f, 0.000413f, -0.002259f, -0.003030f, 0.001122f, 0.003696f, -0.002422f, 0.001517f, -0.002503f, 0.002943f, -0.003146f, -0.000898f, -0.001674f, 0.001721f, -0.001087f, 0.001610f, -0.001474f, - 0.001890f, 0.003127f, 0.001662f, -0.001709f, -0.000383f, -0.000939f, -0.000748f, 0.000805f, 0.000737f, 0.012926f, 0.020968f, 0.002802f, 0.010439f, -0.003792f, 0.006201f, 0.008089f, -0.002488f, -0.006493f, 0.010995f, 0.018957f, -0.003717f, 0.002101f, 0.007337f, -0.009082f, 0.005653f, 0.008091f, -0.016575f, 0.004659f, 0.001621f, -0.003733f, 0.000004f, -0.017265f, 0.000705f, 0.004832f, -0.008204f, 0.001515f, 0.000292f, 0.011054f, 0.007901f, -0.004155f, -0.001179f, -0.001054f, -0.011750f, -0.007906f, 0.001295f, 0.004744f, 0.001065f, 0.005271f, -0.007762f, 0.001169f, 0.003880f, 0.000798f, -0.007186f, -0.005267f, -0.001591f, 0.002498f, 0.005818f, 0.006012f, 0.004015f, 0.007019f, 0.006876f, -0.007719f, -0.002359f, 0.000309f, 0.009773f, -0.001491f, 0.007013f, -0.004615f, -0.004770f, -0.001481f, -0.008778f, -0.004056f, 0.001802f, 0.005120f, -0.007492f, 0.007332f, -0.002073f, -0.002194f, -0.001462f, -0.002975f, -0.003788f, 0.001513f, 0.005708f, 0.002124f, 0.009527f, -0.013217f, -0.010650f, -0.002350f, 0.003950f, -0.000145f, -0.002170f, 0.002016f, 0.000299f, 0.002446f, 0.004022f, 0.006729f, - 0.000123f, -0.000401f, 0.001597f, -0.000629f, -0.000095f, 0.001034f, -0.003073f, -0.001656f, -0.006378f, 0.002517f, 0.012185f, 0.017168f, 0.009994f, -0.004345f, 0.007403f, -0.004526f, -0.003005f, -0.014724f, -0.011680f, 0.005279f, 0.011278f, 0.010991f, 0.011497f, 0.002541f, 0.000641f, 0.007090f, -0.009456f, 0.009516f, 0.007744f, 0.000695f, 0.006655f, 0.017021f, 0.011612f, 0.003231f, -0.012223f, 0.000339f, 0.004137f, 0.002625f, 0.002041f, -0.013432f, 0.003233f, 0.002452f, 0.008999f, 0.009894f, -0.003094f, 0.006348f, -0.004806f, -0.005374f, 0.007236f, 0.004077f, -0.012823f, -0.012171f, -0.005306f, -0.006847f, -0.005065f, -0.005443f, -0.014818f, -0.013444f, -0.001199f, 0.004828f, -0.000070f, -0.001436f, -0.009981f, 0.001313f, 0.011880f, -0.003349f, -0.003734f, 0.004450f, -0.000010f, 0.008562f, 0.004327f, 0.004365f, -0.005523f, -0.006854f, 0.012754f, 0.005809f, -0.005088f, 0.008373f, -0.001106f, 0.006522f, -0.005523f, 0.001009f, 0.009417f, -0.003595f, -0.003038f, 0.006759f, 0.000841f, 0.002678f, 0.004047f, -0.004704f, 0.005285f, -0.002224f, 0.004331f, 0.004328f, 0.003375f, -0.003028f, - 0.001108f, -0.001523f, -0.002545f, -0.003295f, 0.000189f, 0.000360f, 0.002132f, 0.001794f, 0.000500f, -0.000199f, 0.001674f, 0.000488f, 0.001166f, -0.023761f, -0.013971f, -0.004391f, 0.004512f, -0.009804f, 0.002995f, -0.002695f, 0.006843f, -0.001676f, -0.013290f, -0.010593f, 0.009207f, 0.007512f, 0.019034f, 0.016786f, -0.002549f, 0.012139f, -0.018289f, -0.002996f, 0.014223f, 0.004265f, 0.003301f, -0.001895f, -0.005975f, -0.002808f, 0.001967f, -0.001654f, -0.000556f, 0.007175f, -0.008971f, 0.001978f, 0.003257f, -0.000239f, 0.005659f, -0.006189f, -0.005057f, 0.003233f, -0.003935f, 0.005037f, -0.010032f, 0.001637f, -0.006030f, -0.002396f, -0.006716f, -0.005048f, -0.007629f, -0.011328f, 0.006917f, -0.000102f, 0.011799f, -0.011075f, -0.009469f, -0.000109f, 0.002249f, -0.001329f, -0.002285f, 0.000748f, 0.007099f, 0.003374f, 0.001515f, -0.004893f, -0.004706f, -0.002694f, -0.008841f, 0.001367f, -0.002306f, 0.000998f, -0.000437f, -0.009535f, -0.000820f, -0.000792f, -0.010081f, 0.000238f, -0.001922f, 0.001128f, -0.001722f, -0.011241f, 0.000985f, 0.004991f, -0.002253f, 0.007356f, 0.002018f, -0.004002f, - 0.003088f, 0.007719f, 0.002525f, 0.001294f, 0.001726f, -0.001692f, 0.000933f, 0.006027f, -0.000508f, -0.001012f, 0.002202f, 0.002447f, 0.000930f, 0.001963f, 0.000396f, 0.000794f, -0.004101f, 0.000400f, -0.000363f, -0.002044f, -0.001502f, -0.001520f, -0.002114f, 0.000264f, -0.001745f, 0.008253f, -0.012686f, 0.005160f, -0.014188f, -0.002484f, 0.000772f, -0.010531f, 0.009979f, 0.007553f, -0.021104f, -0.002147f, 0.003627f, -0.001962f, -0.009198f, -0.012423f, 0.002625f, -0.006257f, -0.010270f, -0.005104f, 0.006186f, 0.005424f, 0.015076f, 0.019523f, -0.001640f, 0.017444f, -0.010649f, 0.006853f, 0.007661f, -0.001566f, 0.007546f, -0.004311f, 0.000218f, -0.001157f, -0.003541f, -0.001887f, -0.003972f, 0.014521f, -0.000762f, -0.010865f, -0.002537f, 0.007258f, 0.004580f, 0.005797f, 0.001214f, -0.005097f, 0.010679f, 0.021622f, 0.001401f, 0.002151f, 0.001319f, -0.001646f, 0.003478f, -0.001491f, 0.012421f, -0.009499f, 0.011882f, 0.008165f, -0.007475f, 0.003815f, 0.007752f, 0.005235f, -0.008971f, -0.009806f, -0.019251f, -0.003200f, -0.001785f, 0.002401f, 0.007494f, -0.001863f, 0.004891f, -0.001690f, - -0.005093f, -0.005159f, 0.009994f, -0.002325f, 0.010597f, -0.015643f, -0.006124f, 0.003530f, -0.009860f, 0.002516f, 0.010655f, 0.000954f, -0.000052f, 0.000725f, 0.002291f, 0.001404f, -0.005968f, -0.001976f, -0.000955f, 0.000813f, -0.001044f, 0.001890f, 0.002746f, 0.001344f, -0.001717f, -0.004090f, 0.004425f, 0.001635f, 0.001732f, 0.001085f, 0.001296f, 0.000251f, 0.000126f, -0.002016f, 0.001851f, 0.000793f, 0.000730f, 0.000244f, 0.001941f, 0.001216f, 0.002323f, -0.002767f, -0.001629f, -0.003236f, -0.002926f, -0.000865f, 0.002323f, -0.001928f, 0.000218f, 0.005607f, 0.002482f, 0.000285f, 0.007534f, 0.021865f, 0.025771f, -0.006691f, -0.000599f, 0.005434f, -0.003902f, 0.016697f, 0.016287f, -0.010255f, 0.015965f, 0.012557f, 0.004829f, 0.007284f, 0.006501f, 0.003331f, -0.001411f, 0.001166f, 0.002134f, -0.008810f, -0.010796f, 0.002832f, -0.003032f, -0.000132f, 0.001850f, -0.009530f, 0.009602f, 0.019311f, -0.000620f, -0.011586f, 0.018863f, 0.002295f, 0.000559f, 0.007411f, -0.003338f, -0.005665f, 0.002724f, -0.007105f, 0.002809f, 0.019277f, 0.008234f, -0.000147f, 0.006864f, 0.010473f, - 0.027182f, -0.004459f, 0.011709f, -0.002346f, -0.011867f, 0.007765f, 0.000667f, -0.003947f, 0.005312f, 0.016672f, 0.004239f, 0.002951f, -0.000292f, 0.006667f, 0.024039f, 0.010785f, 0.002958f, 0.002427f, 0.006285f, -0.006965f, 0.012265f, -0.003198f, -0.023906f, 0.002886f, -0.002624f, 0.014346f, 0.016850f, 0.007300f, -0.007308f, -0.006596f, -0.006248f, -0.000873f, 0.005184f, 0.000470f, 0.003480f, 0.002404f, 0.003648f, 0.010762f, 0.004576f, -0.008588f, -0.003812f, 0.001155f, 0.002882f, 0.000517f, -0.000320f, 0.000287f, -0.004808f, 0.004934f, 0.001057f, 0.000969f, 0.000421f, 0.000966f, 0.000336f, 0.003677f, -0.001644f, 0.002666f, -0.002844f, -0.000849f, -0.004417f, 0.000810f, -0.001785f, -0.000289f, 0.001440f, -0.029027f, -0.003347f, -0.012277f, -0.014652f, -0.003792f, -0.010472f, 0.000567f, 0.008860f, -0.013594f, 0.014078f, -0.030157f, 0.004216f, -0.008876f, -0.016188f, -0.021547f, 0.022483f, 0.011340f, 0.001370f, -0.019083f, -0.012613f, 0.007230f, -0.024963f, -0.017319f, 0.005822f, 0.005361f, 0.025186f, -0.003202f, 0.002021f, 0.018802f, -0.011220f, 0.018471f, 0.006227f, 0.006820f, - -0.003667f, -0.010995f, -0.001378f, 0.015397f, -0.008341f, 0.001386f, 0.019156f, -0.006938f, -0.005748f, -0.009224f, -0.011500f, -0.009793f, -0.007479f, -0.015449f, -0.001971f, 0.004753f, -0.005390f, 0.003503f, -0.005156f, -0.007864f, 0.010746f, -0.013782f, 0.008369f, -0.011702f, -0.014920f, 0.000807f, 0.012172f, 0.000884f, -0.003735f, 0.004940f, -0.009966f, -0.004911f, -0.013940f, -0.024677f, -0.011746f, 0.003611f, -0.007550f, 0.028376f, 0.011213f, -0.019657f, -0.009991f, -0.002841f, -0.007155f, 0.009172f, 0.019149f, 0.012692f, -0.009314f, 0.008965f, -0.011037f, 0.006714f, 0.000972f, 0.008988f, -0.009770f, -0.002222f, 0.000850f, -0.004203f, -0.008330f, -0.006871f, 0.001286f, -0.000365f, -0.001939f, 0.004459f, 0.001675f, 0.000772f, -0.002749f, 0.002706f, -0.000533f, -0.002047f, -0.006041f, -0.000041f, -0.003093f, 0.000626f, 0.002718f, -0.001897f, -0.006704f, -0.000684f, -0.002826f, 0.031503f, 0.020495f, 0.021559f, -0.006320f, -0.030644f, -0.002479f, -0.015705f, 0.003892f, 0.006781f, 0.016438f, -0.007755f, 0.007181f, -0.012614f, 0.002101f, -0.011129f, -0.028529f, -0.015386f, 0.010847f, -0.010420f, - -0.022618f, -0.021250f, -0.019780f, -0.030845f, 0.003785f, -0.010822f, -0.023506f, -0.021136f, 0.003656f, 0.029643f, -0.004016f, -0.004979f, -0.009970f, -0.018019f, 0.003665f, -0.007187f, 0.001922f, -0.022471f, 0.001385f, -0.023405f, 0.003216f, -0.001925f, 0.012516f, 0.009713f, 0.010410f, 0.005355f, -0.000933f, 0.008664f, -0.005785f, 0.017063f, 0.004758f, 0.008631f, 0.005140f, -0.005599f, 0.006037f, 0.017197f, -0.002292f, 0.009603f, -0.002488f, 0.027055f, 0.003442f, 0.010163f, 0.001281f, -0.015177f, -0.011653f, 0.000534f, -0.005420f, 0.003500f, -0.003967f, 0.008971f, 0.007958f, 0.010429f, -0.004831f, 0.005953f, -0.020798f, 0.011058f, 0.030318f, -0.014627f, -0.003116f, 0.008082f, -0.017511f, -0.001180f, 0.010905f, -0.006844f, -0.001114f, -0.003610f, 0.009485f, -0.009738f, -0.002350f, 0.002671f, -0.005474f, 0.002672f, -0.001912f, 0.004044f, -0.005064f, -0.005005f, 0.005589f, -0.002494f, -0.005559f, 0.003956f, -0.002202f, 0.000156f, -0.007844f, 0.006027f, 0.001998f, -0.001259f, -0.001304f, 0.003454f, 0.001209f, 0.003351f, 0.002409f, 0.000636f, -0.003358f, -0.005874f, -0.001727f, -0.015177f, - -0.044175f, -0.007263f, -0.015454f, -0.023181f, 0.012450f, -0.044282f, -0.005806f, -0.015727f, -0.008644f, 0.012837f, -0.014170f, 0.018784f, 0.016104f, 0.002612f, 0.014515f, 0.001327f, 0.007644f, -0.011519f, -0.020452f, -0.022416f, -0.012624f, -0.020541f, 0.015974f, 0.021047f, -0.000969f, -0.011040f, 0.006001f, 0.006090f, -0.007805f, 0.001576f, -0.035122f, -0.018509f, 0.016233f, -0.008908f, 0.000404f, 0.016025f, -0.001590f, 0.009924f, 0.008396f, -0.004536f, 0.009617f, -0.000088f, -0.018759f, 0.020830f, -0.014699f, 0.001028f, 0.001075f, -0.011454f, 0.007572f, 0.012429f, -0.007389f, 0.014197f, 0.001522f, -0.001082f, -0.013028f, 0.016035f, -0.000160f, -0.012948f, -0.004366f, -0.025963f, -0.010970f, -0.014813f, -0.001945f, 0.017892f, 0.005092f, -0.001677f, 0.000232f, -0.016795f, 0.003719f, 0.012957f, -0.017028f, 0.000998f, 0.025917f, -0.010672f, 0.002489f, 0.001992f, -0.018528f, -0.011088f, 0.011760f, 0.009922f, -0.030109f, 0.006078f, 0.022419f, -0.000089f, 0.002628f, 0.000157f, 0.005364f, -0.001692f, 0.014135f, -0.003225f, -0.000639f, 0.001841f, 0.002676f, -0.006411f, 0.001584f, 0.005022f, - 0.001494f, 0.008457f, 0.003053f, -0.000155f, -0.003141f, -0.006616f, -0.001963f, 0.003182f, -0.004155f, 0.003011f, -0.004259f, -0.000094f, 0.005803f, 0.003166f, -0.004156f, -0.005557f, 0.000255f, 0.000220f, 0.012398f, -0.004985f, 0.000985f, 0.006838f, 0.002719f, 0.006681f, 0.078588f, 0.017488f, -0.010310f, -0.015768f, -0.001545f, -0.004987f, 0.013910f, -0.003105f, 0.011753f, 0.022287f, -0.009018f, 0.001121f, -0.014781f, -0.010100f, 0.004708f, -0.002434f, 0.011419f, -0.022033f, -0.012951f, 0.010400f, 0.022041f, 0.014578f, -0.000729f, 0.005232f, -0.005458f, -0.013268f, 0.009543f, 0.017261f, 0.018050f, 0.021845f, -0.018145f, -0.004285f, -0.010433f, -0.022438f, -0.002893f, 0.001167f, -0.004976f, 0.010316f, 0.013548f, -0.000029f, 0.006655f, -0.004024f, -0.023906f, -0.012973f, -0.031953f, -0.032355f, -0.009511f, 0.010846f, -0.004799f, -0.014326f, 0.027054f, 0.010266f, -0.001175f, -0.025426f, -0.001234f, -0.007824f, -0.018263f, 0.000240f, -0.008396f, -0.011772f, -0.025264f, -0.003214f, -0.009381f, -0.027678f, -0.000083f, 0.021208f, -0.014314f, -0.006731f, 0.007748f, -0.011889f, 0.004661f, -0.011778f, - 0.017178f, -0.005495f, -0.016756f, -0.025857f, -0.042601f, 0.008439f, 0.007107f, 0.032543f, 0.013003f, 0.011306f, -0.000237f, 0.009922f, -0.007730f, 0.010515f, -0.001046f, 0.003752f, 0.005123f, 0.012469f, 0.005596f, 0.000578f, -0.002351f, -0.000535f, 0.004831f, 0.003154f, 0.012803f, 0.010201f, 0.006682f, 0.002296f, -0.002705f, -0.006710f, 0.003637f, 0.008461f, 0.000665f, 0.000643f, -0.001650f, -0.005911f, -0.001121f, -0.000774f, -0.002971f, -0.002022f, -0.004734f, 0.004007f, 0.005604f, -0.005192f, -0.005507f, -0.000163f, -0.000792f, 0.003127f, 0.017680f, -0.062270f, -0.035481f, 0.033012f, -0.008577f, 0.002123f, -0.017104f, 0.014404f, -0.005900f, -0.024025f, 0.011553f, 0.033373f, 0.004291f, -0.029197f, 0.008249f, -0.006355f, -0.006669f, 0.019217f, 0.019938f, -0.002684f, -0.004041f, 0.042024f, 0.009404f, -0.006037f, -0.025810f, 0.011442f, -0.037022f, -0.030476f, -0.028077f, 0.011405f, -0.005298f, -0.003005f, 0.024159f, 0.009637f, -0.024505f, -0.020485f, 0.005353f, 0.023853f, 0.008182f, -0.002714f, 0.001374f, 0.015907f, -0.011470f, -0.025890f, 0.033815f, -0.009923f, 0.003526f, 0.013656f, - 0.002126f, 0.004693f, 0.034774f, 0.000614f, 0.022157f, 0.001011f, -0.023275f, 0.003382f, 0.004991f, -0.004817f, 0.004455f, 0.015828f, -0.011765f, -0.003567f, 0.004056f, -0.046031f, 0.012223f, 0.009422f, -0.000258f, 0.011055f, 0.008616f, -0.017077f, 0.008102f, 0.063236f, 0.027184f, 0.015626f, 0.004586f, 0.015361f, -0.048615f, -0.023043f, 0.024602f, 0.000986f, -0.000227f, -0.018653f, 0.016439f, 0.019901f, 0.016661f, 0.002777f, 0.003489f, -0.006677f, 0.000263f, -0.011569f, -0.004209f, 0.009128f, -0.002067f, -0.005837f, 0.004738f, 0.000367f, 0.004545f, -0.006752f, -0.002871f, 0.002255f, -0.001244f, 0.004598f, -0.008084f, -0.002803f, 0.005726f, -0.006455f, 0.004625f, 0.001667f, 0.000574f, 0.000156f, 0.000028f, -0.005243f, 0.002577f, 0.004790f, -0.002452f, -0.002458f, -0.005627f, 0.002417f, -0.000382f, -0.041753f, 0.029344f, 0.031349f, 0.010149f, 0.017281f, -0.011566f, 0.050054f, -0.005853f, 0.019076f, 0.013104f, -0.023128f, -0.009434f, -0.010688f, 0.029145f, -0.017334f, -0.005340f, 0.018303f, 0.015469f, -0.017038f, -0.004562f, -0.049203f, 0.009250f, -0.005484f, -0.014380f, 0.004226f, - 0.001390f, 0.003599f, 0.004582f, 0.016617f, 0.000742f, 0.018205f, 0.002233f, 0.008857f, -0.004648f, -0.015876f, -0.016830f, 0.031742f, -0.011255f, -0.023043f, -0.019305f, -0.008815f, -0.010592f, 0.013752f, 0.008618f, 0.010583f, 0.014118f, 0.004180f, -0.017350f, 0.009946f, -0.028335f, -0.009330f, -0.024751f, 0.017040f, -0.029888f, -0.021534f, -0.006293f, -0.010124f, 0.009012f, 0.020114f, -0.015948f, 0.018987f, 0.031382f, 0.015515f, 0.030233f, -0.012690f, 0.040562f, 0.003671f, 0.034374f, 0.019423f, 0.004336f, -0.018327f, -0.045949f, -0.031114f, -0.025213f, -0.014384f, -0.014105f, -0.004535f, -0.021363f, 0.016128f, 0.026971f, -0.010372f, -0.020568f, -0.018835f, -0.014828f, -0.028015f, 0.017695f, 0.012738f, -0.007380f, -0.007231f, -0.010814f, 0.001425f, -0.006102f, 0.015079f, 0.000099f, 0.003860f, -0.007988f, -0.006912f, -0.011286f, -0.002096f, -0.013530f, -0.013051f, 0.013428f, -0.000946f, 0.001688f, 0.000330f, 0.004957f, -0.005337f, -0.000452f, -0.008017f, 0.000322f, 0.000047f, -0.000299f, 0.004128f, 0.000489f, -0.006561f, -0.004260f, -0.004708f, 0.001368f, -0.007050f, -0.007629f, -0.009695f, - 0.002671f, 0.023250f, 0.011852f, -0.013229f, 0.039148f, 0.004427f, -0.038206f, 0.047718f, 0.003203f, -0.020322f, 0.016846f, -0.039187f, -0.007497f, -0.024948f, -0.007785f, -0.004414f, -0.007650f, -0.017831f, 0.005005f, -0.033854f, -0.013089f, -0.012202f, -0.045684f, 0.005559f, -0.033128f, -0.023545f, -0.037167f, 0.007470f, -0.028040f, -0.008457f, -0.009284f, 0.000316f, 0.014151f, -0.011388f, 0.019917f, 0.001044f, 0.026426f, -0.006137f, 0.022987f, 0.028967f, -0.034735f, -0.000503f, 0.009334f, 0.021271f, 0.000843f, 0.025574f, 0.008572f, 0.024660f, -0.000503f, -0.018807f, -0.011823f, -0.001790f, 0.015961f, -0.003649f, -0.007320f, -0.001578f, 0.029547f, 0.018668f, -0.007006f, -0.024316f, 0.008174f, 0.013396f, 0.009524f, 0.026211f, -0.035057f, -0.025920f, -0.007396f, 0.002498f, -0.009859f, 0.000309f, -0.010053f, -0.021902f, 0.061547f, -0.030364f, -0.035255f, 0.026358f, 0.015181f, 0.022903f, 0.007035f, 0.008441f, 0.004749f, 0.013405f, -0.012623f, 0.035377f, -0.006166f, 0.008703f, -0.006818f, 0.004766f, 0.002136f, -0.001902f, 0.022549f, 0.002858f, 0.001987f, -0.022180f, 0.010075f, 0.003360f, - -0.003247f, -0.018056f, -0.001839f, -0.003705f, 0.000492f, -0.005724f, 0.016248f, 0.003793f, 0.004551f, -0.013038f, 0.008945f, -0.006176f, 0.001832f, 0.007867f, -0.000312f, -0.003829f, -0.004186f, -0.011597f, 0.006781f, 0.011932f, -0.005646f, -0.001279f, -0.004187f, 0.001806f, -0.006738f, -0.015624f, -0.004722f, -0.000491f, -0.010713f, 0.011157f, -0.000950f, -0.001479f, 0.003775f, -0.010497f, -0.011905f, 0.004887f, -0.008197f, -0.010436f, 0.031020f, 0.022844f, 0.036679f, -0.012212f, -0.009083f, -0.050376f, 0.058493f, 0.026811f, -0.077910f, -0.041698f, 0.024962f, 0.034679f, 0.034885f, -0.022410f, -0.018193f, 0.042212f, 0.010009f, 0.009688f, 0.029262f, 0.023656f, -0.043083f, 0.013201f, 0.018149f, -0.003226f, 0.020325f, 0.003910f, -0.005542f, 0.004213f, -0.014035f, 0.071921f, 0.018822f, 0.009369f, -0.001988f, -0.008894f, -0.004847f, -0.040795f, 0.007809f, 0.011990f, -0.009620f, -0.013375f, -0.066057f, -0.031552f, 0.013807f, 0.011516f, -0.021693f, -0.021200f, -0.003013f, -0.031441f, 0.012985f, 0.011674f, -0.004600f, 0.013134f, 0.026015f, 0.001309f, -0.001383f, -0.008340f, -0.013947f, -0.004547f, - 0.002306f, -0.048675f, -0.006513f, 0.011437f, 0.029647f, -0.052682f, 0.011669f, 0.018887f, -0.004181f, -0.024801f, -0.022429f, 0.039784f, 0.039283f, -0.005750f, -0.024588f, -0.046578f, 0.009769f, 0.018684f, 0.009739f, 0.000777f, -0.050826f, 0.021427f, 0.046183f, -0.015648f, 0.005176f, 0.014525f, -0.019065f, -0.030341f, -0.016091f, 0.004631f, -0.009464f, -0.002409f, -0.014357f, -0.012325f, -0.010503f, -0.004427f, -0.004172f, 0.006180f, -0.001171f, -0.000925f, -0.013095f, 0.005376f, -0.006188f, 0.002803f, 0.000030f, 0.004216f, 0.007829f, 0.009209f, -0.014630f, 0.005850f, -0.011326f, -0.018936f, -0.010028f, 0.002720f, -0.001998f, 0.008277f, -0.001923f, 0.005391f, 0.011094f, 0.000562f, -0.000607f, -0.009817f, -0.005573f, 0.014809f, 0.007417f, -0.006196f, -0.003885f, 0.023175f, -0.017067f, 0.006324f, -0.014223f, -0.012541f, 0.002178f, 0.015711f, 0.031355f, -0.057753f, -0.075371f, -0.052374f, -0.067429f, 0.058555f, -0.039057f, 0.023585f, -0.006604f, -0.047350f, 0.008473f, -0.012837f, -0.017603f, -0.061474f, -0.056336f, -0.042045f, -0.016055f, 0.002223f, -0.032597f, -0.009411f, 0.008611f, 0.026517f, - 0.002100f, -0.016439f, 0.000067f, -0.017580f, 0.025413f, -0.031926f, 0.044184f, 0.038112f, -0.009104f, -0.012071f, -0.052388f, -0.030511f, -0.031857f, 0.003882f, 0.007050f, -0.008489f, 0.042824f, 0.012252f, 0.034717f, 0.006896f, -0.004080f, -0.015692f, 0.031238f, 0.021622f, 0.009816f, -0.031301f, 0.016814f, -0.052972f, -0.005900f, -0.005568f, -0.035183f, -0.005730f, 0.000464f, 0.040623f, 0.026903f, 0.000843f, 0.018792f, -0.000672f, -0.039948f, 0.020445f, 0.005694f, 0.033430f, -0.018844f, -0.038398f, 0.022996f, -0.069063f, -0.015817f, 0.024554f, -0.010334f, -0.010926f, 0.016987f, -0.004423f, -0.013582f, 0.012893f, -0.005712f, -0.044280f, -0.038956f, -0.006365f, 0.018322f, 0.029608f, 0.041591f, 0.041692f, -0.017567f, -0.014048f, 0.008263f, 0.015179f, 0.013682f, 0.005784f, -0.018404f, 0.016356f, 0.000397f, -0.003332f, 0.002192f, 0.010189f, 0.016971f, -0.004815f, 0.002954f, 0.016071f, -0.003589f, -0.000197f, -0.015983f, 0.008169f, -0.003388f, -0.000986f, 0.013403f, -0.002465f, -0.005797f, 0.006099f, -0.018164f, -0.006627f, 0.018761f, 0.005481f, 0.006191f, -0.006426f, -0.004180f, -0.002591f, - -0.014428f, -0.001759f, -0.007958f, 0.011249f, -0.031547f, -0.075343f, -0.007042f, -0.047964f, 0.002928f, -0.035321f, 0.032139f, -0.025222f, -0.002711f, 0.006348f, 0.011976f, 0.038795f, 0.012971f, -0.017533f, 0.041840f, 0.013070f, -0.071319f, 0.011796f, -0.042813f, -0.002986f, 0.008096f, -0.005913f, 0.035135f, -0.010369f, 0.006342f, 0.008972f, 0.003045f, -0.022793f, 0.035655f, -0.020608f, -0.002026f, -0.041701f, -0.000099f, 0.007158f, -0.006676f, -0.014622f, -0.019237f, -0.021750f, 0.054067f, 0.002244f, 0.027956f, -0.048142f, 0.005357f, -0.000530f, 0.016463f, 0.028855f, -0.033255f, 0.058971f, 0.084697f, -0.003799f, 0.008072f, -0.029531f, 0.013452f, 0.019810f, -0.016511f, 0.004298f, 0.015829f, 0.032981f, -0.001224f, 0.002007f, -0.010365f, -0.028564f, -0.043177f, 0.021977f, -0.032432f, -0.013568f, -0.021315f, 0.009399f, 0.028768f, 0.026036f, -0.005350f, 0.009813f, -0.058584f, 0.038622f, -0.007412f, 0.008446f, -0.017379f, 0.037733f, -0.052629f, 0.062537f, 0.045214f, 0.052108f, -0.021312f, -0.001210f, -0.051621f, -0.027807f, -0.019391f, 0.016902f, 0.013956f, -0.042482f, -0.031503f, 0.001202f, - -0.011181f, -0.030999f, -0.000480f, -0.021457f, -0.025877f, -0.009535f, -0.004237f, 0.001959f, -0.017274f, 0.003003f, 0.005229f, 0.025738f, 0.022580f, -0.003600f, 0.021246f, -0.010721f, -0.027634f, -0.015041f, -0.006336f, -0.013711f, -0.002630f, -0.010203f, 0.014795f, 0.004612f, 0.058699f, 0.007802f, -0.021018f, -0.007051f, 0.004689f, -0.031022f, -0.019991f, 0.007333f, 0.000572f, -0.008074f, 0.002402f, -0.000027f, -0.034548f, -0.003598f, 0.021904f, -0.016747f, 0.094617f, 0.027089f, 0.068797f, 0.022020f, -0.071817f, 0.028885f, 0.019891f, -0.023842f, 0.004808f, 0.046410f, 0.001977f, 0.044423f, 0.039215f, -0.046019f, 0.025280f, -0.046038f, -0.031238f, -0.004312f, 0.092585f, 0.028551f, -0.041944f, 0.039567f, 0.025332f, -0.050956f, -0.022630f, -0.003425f, 0.051760f, 0.007729f, -0.047584f, -0.026631f, -0.001608f, -0.012931f, 0.028675f, 0.041622f, -0.015154f, 0.036619f, -0.023673f, -0.031786f, -0.001232f, 0.075364f, 0.006871f, -0.043152f, 0.024459f, -0.001950f, -0.004437f, 0.021157f, -0.049206f, -0.042317f, -0.040402f, 0.029593f, -0.026509f, 0.009607f, 0.012416f, 0.045104f, 0.022127f, 0.046368f, - 0.004788f, -0.001902f, 0.037593f, 0.069380f, 0.041031f, -0.068423f, 0.001276f, 0.006769f, -0.011756f, 0.013331f, 0.018860f, -0.052808f, -0.008132f, 0.010600f, 0.009011f, -0.062914f, -0.059905f, -0.033375f, -0.036466f, 0.062716f, 0.022983f, 0.003037f, 0.027439f, -0.050928f, 0.020900f, 0.014282f, 0.009150f, -0.004371f, -0.011881f, 0.043391f, 0.025787f, -0.017146f, 0.007183f, -0.012888f, 0.028009f, -0.007979f, 0.001755f, 0.006097f, 0.003950f, 0.021214f, -0.003580f, -0.033997f, -0.001694f, 0.006593f, 0.008699f, 0.017770f, -0.005047f, 0.001768f, 0.012869f, -0.026294f, -0.016003f, -0.002255f, -0.048514f, -0.007181f, 0.013030f, -0.003350f, 0.004880f, 0.027811f, -0.004298f, -0.019009f, 0.003740f, 0.006923f, 0.017534f, 0.021631f, -0.021038f, -0.012490f, -0.001797f, -0.017282f, -0.011865f, -0.033349f, -0.040471f, 0.011372f, 0.000154f, -0.017760f, -0.015612f, -0.018124f, -0.036006f, 0.026964f, -0.071948f, 0.052069f, 0.058150f, 0.016122f, 0.063325f, -0.064900f, -0.031775f, -0.017554f, -0.093291f, 0.052566f, 0.005237f, 0.032547f, 0.042753f, 0.041851f, 0.003198f, -0.001297f, 0.042499f, -0.006713f, - -0.050542f, -0.052419f, 0.031706f, -0.059229f, 0.057784f, -0.016576f, 0.012636f, 0.057304f, 0.051621f, -0.025982f, 0.078627f, -0.045590f, 0.005049f, -0.047406f, 0.007619f, -0.016192f, 0.030923f, 0.010542f, -0.033697f, 0.030198f, 0.045824f, 0.067411f, -0.039023f, 0.014432f, 0.041316f, -0.056833f, 0.002561f, -0.022833f, -0.082270f, -0.035356f, 0.021881f, -0.045139f, 0.016014f, -0.037893f, -0.000985f, 0.055369f, -0.026344f, 0.023461f, 0.063709f, 0.045563f, 0.016991f, 0.084818f, -0.132187f, -0.024890f, 0.044024f, -0.005085f, 0.025619f, -0.040908f, -0.071481f, 0.086729f, -0.001337f, -0.043690f, 0.018624f, 0.054884f, 0.136095f, 0.051575f, -0.103098f, -0.056226f, 0.034992f, 0.038086f, 0.016414f, -0.071948f, -0.006380f, 0.015769f, -0.022345f, 0.048568f, 0.017266f, 0.030998f, 0.036794f, 0.027678f, -0.019014f, 0.021367f, -0.057281f, 0.008204f, 0.030400f, -0.003705f, -0.030470f, 0.017680f, -0.018668f, 0.030271f, 0.033344f, -0.014385f, -0.028077f, -0.007571f, 0.061675f, -0.011130f, -0.007452f, -0.024305f, 0.027763f, -0.024140f, -0.015065f, 0.017805f, -0.011787f, 0.058196f, -0.004702f, -0.014525f, - 0.058344f, -0.005336f, 0.013404f, 0.035795f, -0.003034f, -0.003173f, 0.003119f, 0.005222f, -0.027910f, 0.012417f, 0.001155f, -0.040108f, 0.026809f, -0.012527f, 0.051156f, -0.028087f, 0.016139f, 0.004807f, 0.069743f, -0.061314f, -0.005553f, -0.029308f, -0.036337f, 0.055889f, -0.021753f, 0.073383f, -0.007285f, -0.056630f, 0.088033f, 0.127252f, -0.018172f, -0.040660f, -0.061493f, 0.014597f, 0.067597f, 0.013277f, -0.014268f, -0.042201f, 0.009995f, 0.009932f, -0.009368f, 0.010395f, -0.006052f, -0.020764f, -0.021192f, 0.019445f, 0.027743f, -0.002183f, 0.037510f, -0.036268f, 0.076977f, 0.057982f, 0.033394f, -0.002866f, 0.004504f, 0.010906f, -0.040846f, -0.035748f, -0.039602f, -0.020845f, -0.010919f, 0.024604f, 0.021582f, 0.041723f, -0.020293f, -0.005069f, -0.018002f, 0.047470f, 0.092716f, -0.022008f, -0.059845f, -0.038540f, -0.002568f, -0.080938f, 0.062714f, -0.109907f, 0.031527f, 0.046437f, 0.047641f, -0.047968f, 0.010995f, 0.048354f, -0.111376f, -0.052679f, 0.022627f, -0.011882f, -0.055931f, -0.049307f, -0.006596f, -0.025897f, 0.082455f, 0.035341f, -0.030538f, -0.028003f, -0.046175f, 0.126546f, - 0.026952f, 0.066046f, -0.005043f, 0.019191f, 0.023641f, 0.028264f, -0.041761f, -0.005453f, 0.052273f, 0.036113f, 0.021342f, -0.017539f, -0.022953f, -0.000156f, 0.016007f, 0.024098f, 0.016042f, -0.032859f, 0.004222f, 0.000161f, 0.007998f, 0.023362f, 0.023123f, -0.034418f, 0.015416f, -0.021295f, -0.026425f, 0.002507f, 0.026186f, 0.010661f, -0.016743f, 0.003455f, -0.002976f, -0.005128f, -0.014476f, 0.050341f, -0.015725f, -0.000117f, -0.031071f, 0.006841f, -0.012046f, 0.033077f, 0.009897f, -0.007437f, -0.018771f, 0.018664f, 0.014756f, -0.023602f, 0.000582f, -0.038235f, -0.016009f, 0.008621f, 0.014475f, 0.021031f, -0.001413f, -0.047835f, 0.014407f, 0.073407f, 0.002429f, -0.025062f, 0.061623f, 0.043785f, -0.012549f, -0.039652f, -0.059598f, 0.011229f, 0.117767f, 0.025643f, 0.060477f, -0.005497f, 0.005459f, -0.004967f, -0.013628f, -0.000220f, 0.005592f, 0.028251f, 0.009607f, -0.023077f, 0.019767f, -0.020236f, -0.021794f, -0.025132f, 0.000821f, 0.023329f, 0.005321f, 0.018590f, 0.020446f, 0.016070f, -0.016328f, -0.029471f, 0.009460f, -0.020524f, -0.050342f, -0.015295f, 0.011684f, -0.017969f, - 0.059282f, -0.061305f, 0.049839f, -0.016095f, 0.000591f, 0.073049f, -0.011296f, -0.002397f, 0.096121f, -0.015129f, -0.038807f, 0.006636f, -0.033220f, -0.008017f, -0.031352f, 0.106378f, -0.029989f, 0.025316f, -0.025440f, -0.011970f, -0.014415f, 0.017267f, -0.026655f, -0.065966f, 0.029133f, -0.008012f, -0.072407f, 0.037499f, -0.018803f, 0.039917f, 0.091465f, -0.046243f, -0.000747f, -0.005227f, -0.013260f, -0.049731f, -0.008336f, 0.044494f, 0.018329f, 0.027083f, -0.041148f, 0.011724f, 0.007625f, -0.040588f, -0.010615f, 0.008339f, 0.020873f, 0.025101f, 0.002412f, 0.004322f, 0.017063f, -0.004599f, -0.019607f, 0.028361f, -0.011124f, -0.009385f, 0.026661f, 0.002951f, -0.006959f, 0.038643f, -0.002312f, -0.003608f, 0.000641f, 0.012183f, -0.011474f, 0.019176f, -0.014987f, -0.008316f, -0.011777f, 0.009658f, -0.000013f, -0.002106f, 0.006014f, 0.017559f, -0.021361f, 0.004029f, -0.002600f, 0.012402f, 0.004207f, -0.004861f, 0.022689f, -0.014321f, 0.012386f, -0.004547f, 0.006933f, 0.000856f, 0.017063f, -0.026040f, 0.000075f, 0.122449f, 0.062222f, 0.128469f, -0.071842f, -0.018665f, 0.042516f, -0.040183f, - 0.030808f, 0.132155f, 0.031463f, 0.019112f, -0.034730f, -0.032866f, 0.038025f, -0.020025f, 0.053708f, -0.008792f, -0.012055f, -0.015538f, -0.075785f, 0.018297f, 0.091547f, -0.048253f, 0.055442f, 0.048193f, -0.030725f, -0.009312f, 0.038218f, -0.060700f, 0.030497f, -0.004293f, 0.045996f, 0.015514f, -0.037770f, -0.012228f, -0.076191f, -0.039176f, 0.036021f, 0.026956f, 0.059572f, 0.092644f, 0.010090f, 0.001478f, -0.080021f, -0.049010f, -0.047707f, -0.039445f, 0.021198f, -0.032724f, -0.009174f, -0.007514f, 0.024211f, -0.061272f, -0.009712f, 0.031732f, 0.016558f, 0.050521f, -0.006588f, -0.024199f, 0.050428f, -0.009109f, 0.030974f, -0.038707f, -0.023193f, -0.005998f, -0.012762f, 0.024637f, 0.036726f, 0.051671f, 0.014758f, 0.004243f, -0.035543f, -0.010069f, -0.018173f, 0.043259f, 0.000622f, 0.064838f, 0.011415f, 0.048828f, -0.047390f, -0.017072f, -0.000208f, -0.001204f, 0.035501f, -0.005671f, -0.017474f, -0.009618f, 0.008801f, 0.002401f, 0.009305f, 0.016302f, 0.014728f, -0.009048f, -0.010489f, 0.000608f, -0.006171f, 0.013725f, 0.014816f, 0.003379f, -0.012254f, 0.000458f, -0.016097f, -0.006860f, - -0.003481f, 0.027794f, 0.010049f, -0.003733f, 0.007313f, -0.018760f, -0.021996f, -0.015017f, 0.007023f, 0.015194f, -0.013098f, -0.001415f, 0.000258f, 0.011292f, 0.006366f, -0.001871f, 0.012179f, 0.001776f, -0.000614f, -0.012144f, 0.005770f, 0.003378f, -0.004904f, -0.033676f, -0.125775f, 0.003264f, 0.202395f, 0.182518f, 0.171671f, 0.072738f, -0.072908f, -0.101083f, -0.100213f, -0.089628f, -0.164509f, -0.117495f, -0.114507f, 0.088534f, 0.136079f, 0.110969f, 0.177104f, 0.147292f, 0.031268f, -0.006901f, -0.063363f, -0.123523f, -0.073677f, -0.129795f, -0.070448f, -0.043498f, 0.000716f, -0.017417f, 0.032566f, 0.055603f, 0.094650f, 0.059450f, 0.099446f, 0.075591f, 0.079018f, 0.006043f, -0.065020f, -0.029735f, 0.002290f, -0.071175f, -0.093838f, -0.122178f, -0.119961f, -0.085237f, -0.011952f, 0.059433f, 0.023570f, 0.086524f, 0.061338f, 0.098698f, 0.088042f, 0.095697f, 0.111221f, 0.059680f, -0.008503f, -0.018106f, -0.072558f, -0.059570f, -0.195977f, -0.156969f, -0.125633f, -0.098390f, 0.011479f, -0.043050f, 0.002822f, 0.133710f, 0.165380f, 0.226025f, 0.143088f, 0.085816f, 0.058560f, 0.013473f, - -0.086628f, -0.079629f, -0.120785f, -0.156401f, -0.132265f, -0.123620f, -0.057880f, 0.008659f, 0.062567f, 0.102573f, 0.101557f, 0.086168f, 0.054527f, 0.057747f, 0.024937f, 0.015377f, -0.002765f, -0.048252f, -0.041784f, -0.038453f, -0.042518f, -0.022917f, -0.047524f, -0.034291f, 0.011804f, 0.003787f, -0.027615f, 0.014739f, 0.039216f, 0.021964f, 0.044741f, 0.069381f, 0.072531f, 0.031675f, -0.044778f, -0.019704f, -0.006237f, -0.091748f, -0.096392f, -0.084436f, -0.035055f, 0.025746f, 0.041339f, 0.034081f, 0.057954f, 0.065113f, 0.080847f, 0.053223f, 0.033103f, -0.012781f, -0.054115f, -0.055473f, -0.061298f, -0.083026f, -0.058590f, -0.032987f, 0.028284f, 0.044369f, 0.029110f, 0.017155f, 0.052428f, 0.034855f, 0.021570f, 0.004436f, -0.007719f, -0.017292f, 0.001808f, -0.020681f, -0.023797f, -0.009424f, 0.008156f, -0.014592f, -0.010328f, 0.001518f, 0.010905f, 0.000599f, -0.005209f, -0.008015f, 0.008244f, -0.000863f, -0.003639f, -0.008184f, 0.003551f, 0.002458f, 0.005033f, -0.002333f, 0.003005f}, - {0.002045f, -0.002350f, 0.008276f, 0.009304f, 0.004997f, -0.003601f, -0.014059f, -0.012897f, 0.004673f, 0.007399f, -0.002735f, 0.013819f, -0.002680f, 0.008243f, -0.009823f, -0.008665f, 0.003773f, 0.000338f, -0.002554f, 0.003649f, 0.008958f, -0.003907f, 0.001238f, -0.005129f, -0.000518f, 0.000471f, 0.003667f, 0.003413f, 0.004597f, 0.000757f, 0.002734f, 0.010232f, -0.003958f, -0.004797f, -0.005179f, -0.009282f, 0.002661f, -0.001957f, 0.016958f, 0.003292f, -0.001285f, 0.001329f, 0.010285f, -0.000957f, -0.002252f, -0.002631f, -0.006046f, -0.001113f, 0.007906f, -0.001223f, 0.003274f, 0.007998f, -0.002521f, -0.000582f, -0.012883f, -0.007573f, -0.011749f, -0.002303f, -0.003420f, 0.001728f, 0.000630f, 0.001686f, 0.004177f, -0.002821f, 0.002013f, 0.000125f, 0.001026f, 0.001783f, -0.004296f, 0.004046f, -0.001399f, -0.004887f, -0.000632f, -0.004928f, -0.001512f, 0.000454f, -0.007683f, 0.002026f, 0.000334f, 0.005906f, 0.000608f, -0.000109f, -0.003538f, 0.000785f, 0.005880f, 0.002875f, -0.001483f, 0.000650f, 0.001296f, 0.001427f, 0.004481f, 0.000531f, 0.000265f, -0.001093f, -0.000692f, 0.000445f, - 0.000162f, -0.000468f, 0.002952f, 0.001612f, 0.001747f, 0.001248f, 0.000909f, 0.000375f, 0.000879f, 0.009535f, 0.022561f, 0.008881f, 0.005355f, 0.006244f, -0.013223f, -0.001576f, 0.005737f, -0.001813f, 0.002257f, -0.012103f, 0.011901f, 0.016074f, 0.002797f, 0.007170f, -0.003368f, -0.009447f, -0.014585f, -0.016011f, -0.010612f, 0.012657f, -0.011945f, -0.007623f, -0.010106f, 0.003228f, 0.008442f, 0.001571f, 0.001161f, 0.004689f, -0.000457f, 0.002955f, 0.010398f, -0.001477f, 0.008648f, -0.008238f, 0.007892f, 0.005459f, 0.005025f, -0.004349f, -0.013404f, -0.002876f, 0.007704f, 0.004532f, -0.003733f, -0.000468f, 0.002677f, -0.000587f, -0.006459f, -0.001377f, 0.005510f, -0.001904f, 0.000626f, -0.003219f, -0.000692f, 0.000380f, 0.001852f, 0.009461f, 0.003981f, -0.004877f, 0.000836f, 0.000766f, -0.003203f, 0.001710f, -0.004673f, -0.000568f, 0.007706f, 0.002484f, 0.008644f, -0.006182f, -0.005275f, -0.003183f, -0.001349f, 0.004373f, 0.009796f, -0.005661f, -0.007062f, 0.008401f, -0.000777f, -0.000181f, 0.000306f, 0.002887f, 0.002096f, 0.007058f, -0.001978f, 0.003280f, -0.004301f, -0.004060f, - 0.000332f, 0.001894f, -0.000284f, 0.000126f, 0.001639f, 0.001752f, 0.001368f, -0.003662f, 0.004112f, -0.000859f, 0.006606f, 0.002811f, -0.007418f, -0.006988f, -0.007949f, -0.001237f, -0.006489f, -0.013655f, -0.013017f, 0.013446f, -0.000295f, 0.002840f, -0.000101f, 0.008195f, -0.012107f, 0.018000f, 0.015975f, 0.000839f, 0.000852f, 0.000036f, 0.000475f, -0.001765f, 0.006256f, 0.004879f, 0.000396f, -0.010227f, 0.004438f, -0.003165f, 0.004924f, -0.001416f, 0.010910f, -0.002530f, -0.006349f, -0.002866f, -0.001712f, 0.004054f, -0.000068f, 0.006758f, -0.010832f, 0.005852f, 0.001889f, -0.006001f, 0.017047f, -0.002696f, -0.002441f, -0.000347f, -0.000266f, -0.004483f, -0.001451f, 0.009110f, 0.007448f, -0.015965f, -0.007537f, 0.008134f, 0.002339f, -0.003810f, 0.013901f, 0.000520f, 0.003116f, 0.013699f, 0.005652f, 0.010757f, 0.003036f, -0.004115f, -0.005581f, -0.010740f, -0.010418f, 0.001526f, 0.005545f, 0.013332f, 0.000508f, -0.005419f, -0.006796f, 0.002330f, -0.000125f, -0.003708f, 0.004323f, -0.001489f, -0.003418f, 0.003130f, 0.007219f, 0.002353f, -0.003620f, 0.003632f, 0.003760f, 0.004728f, - 0.003025f, 0.000252f, 0.000450f, -0.004459f, -0.000940f, -0.000048f, 0.002292f, 0.001946f, 0.003677f, 0.003570f, 0.002954f, 0.001136f, -0.000290f, -0.018225f, -0.006365f, -0.008862f, 0.008272f, -0.006050f, 0.005370f, -0.006543f, -0.002719f, 0.015472f, 0.007549f, -0.010256f, 0.004673f, 0.014757f, 0.002152f, -0.005163f, -0.010367f, -0.012435f, -0.008540f, -0.012504f, 0.008297f, 0.001896f, 0.004561f, -0.002395f, -0.005672f, -0.005968f, -0.011031f, 0.000579f, -0.000351f, 0.002624f, -0.002697f, -0.010018f, 0.000154f, 0.010711f, -0.002382f, 0.000128f, -0.005344f, -0.010672f, -0.015806f, -0.001356f, 0.011376f, 0.004141f, 0.001190f, -0.005354f, 0.001449f, -0.008569f, -0.002816f, -0.006447f, 0.000813f, 0.001459f, -0.009769f, 0.011021f, -0.006212f, 0.014023f, 0.005296f, 0.001334f, -0.006378f, -0.003343f, 0.003596f, -0.000802f, 0.003402f, 0.007528f, 0.001523f, 0.002987f, -0.008338f, 0.004920f, -0.004195f, 0.012890f, 0.015957f, 0.007324f, 0.010722f, 0.004995f, -0.001643f, -0.011197f, -0.007237f, 0.000924f, 0.008247f, 0.008318f, -0.006660f, 0.000874f, 0.007837f, -0.010255f, 0.010123f, 0.000650f, - -0.005201f, 0.003339f, -0.002186f, -0.000491f, -0.005784f, 0.001135f, 0.001634f, 0.000998f, -0.004641f, 0.001229f, -0.003281f, -0.004351f, -0.001524f, 0.000309f, 0.001917f, -0.002839f, 0.000698f, -0.001231f, -0.004037f, 0.000432f, 0.003321f, 0.001394f, -0.002891f, 0.001869f, -0.002176f, 0.006102f, -0.014716f, 0.001933f, -0.015736f, -0.000070f, 0.002419f, 0.001464f, 0.007108f, 0.000712f, 0.001136f, 0.027845f, -0.003482f, -0.012299f, -0.013253f, 0.013987f, 0.009383f, -0.010552f, 0.002564f, -0.011768f, -0.005030f, 0.000395f, 0.013334f, -0.016512f, 0.004830f, -0.000643f, 0.002649f, -0.001257f, 0.016927f, -0.008742f, 0.004787f, -0.002642f, -0.004457f, 0.002575f, -0.000792f, 0.005075f, -0.005154f, -0.004799f, -0.014287f, 0.002250f, -0.004729f, -0.003073f, 0.001157f, -0.005059f, 0.004245f, -0.008064f, -0.004778f, -0.014193f, -0.000402f, -0.012600f, -0.005295f, -0.014987f, 0.011172f, 0.002276f, -0.004570f, 0.009811f, -0.011334f, -0.000042f, -0.021624f, -0.001149f, 0.007522f, -0.000573f, 0.006455f, 0.013800f, -0.004800f, -0.001920f, 0.017283f, 0.007299f, 0.006699f, 0.010553f, -0.005407f, -0.015913f, - -0.001646f, -0.009516f, 0.007012f, 0.015907f, -0.002810f, 0.004689f, 0.008502f, 0.007145f, -0.000792f, -0.001300f, 0.002022f, 0.000342f, -0.002879f, 0.004318f, 0.003893f, -0.006570f, 0.002262f, 0.005630f, -0.002742f, -0.001967f, -0.009756f, -0.002228f, -0.004064f, -0.001304f, -0.004218f, 0.000922f, -0.000967f, 0.000830f, -0.000367f, 0.000733f, 0.002613f, -0.002826f, 0.001106f, -0.001118f, -0.002869f, -0.000324f, -0.000417f, -0.000819f, 0.000307f, 0.001763f, 0.002876f, -0.002660f, 0.001055f, -0.002236f, 0.000506f, -0.000181f, -0.002987f, -0.001132f, -0.002005f, 0.007866f, 0.008896f, 0.003217f, -0.005355f, 0.003849f, 0.002338f, 0.016937f, -0.002565f, -0.003643f, -0.022835f, -0.006462f, 0.017199f, 0.016772f, 0.010810f, 0.008498f, 0.024476f, 0.001504f, -0.029188f, -0.007497f, -0.004847f, -0.007084f, 0.015592f, -0.002479f, -0.005644f, 0.018144f, 0.002858f, -0.007496f, -0.002578f, 0.007237f, -0.006424f, -0.002557f, 0.002236f, -0.002332f, -0.010155f, -0.004626f, -0.000459f, -0.009845f, -0.004486f, -0.004141f, 0.006884f, -0.004628f, 0.013243f, 0.012844f, 0.001269f, 0.012217f, 0.008599f, -0.005535f, - -0.001861f, -0.004204f, -0.018963f, 0.002124f, 0.003941f, -0.018070f, -0.002572f, -0.005130f, 0.006490f, 0.016491f, 0.002536f, -0.016744f, 0.002483f, -0.006461f, -0.011253f, 0.009123f, -0.002613f, -0.011995f, 0.005464f, 0.004607f, 0.013278f, -0.001065f, -0.001610f, 0.009754f, 0.011575f, 0.012688f, -0.012999f, 0.009197f, -0.001627f, -0.002219f, 0.003466f, 0.013698f, -0.000571f, -0.003664f, 0.004381f, 0.002083f, -0.011574f, -0.001538f, 0.016009f, 0.003516f, -0.000971f, -0.002007f, -0.007148f, 0.005137f, -0.002586f, -0.003280f, 0.000606f, -0.000478f, 0.003760f, -0.000247f, -0.004883f, -0.003557f, 0.006723f, -0.000829f, 0.002702f, -0.003004f, 0.003298f, -0.002481f, -0.001766f, -0.002454f, 0.001764f, 0.003544f, 0.011660f, -0.029881f, 0.012434f, -0.003256f, -0.006816f, -0.006133f, 0.005128f, -0.002831f, -0.017719f, -0.018868f, 0.002308f, 0.029450f, 0.008118f, -0.021411f, 0.004838f, 0.017479f, -0.012563f, 0.002277f, -0.003169f, 0.010427f, -0.000062f, 0.009623f, 0.025761f, 0.018766f, 0.011716f, -0.000427f, -0.002122f, -0.011894f, -0.012747f, 0.005088f, -0.033359f, -0.005265f, 0.015826f, 0.001782f, - -0.001678f, -0.015969f, -0.005689f, -0.000669f, -0.000715f, -0.007754f, -0.016514f, 0.018528f, -0.006390f, -0.004048f, -0.002976f, -0.015297f, -0.017208f, -0.000529f, -0.008393f, 0.001207f, 0.008206f, 0.006287f, 0.006946f, -0.013654f, -0.003541f, -0.006703f, -0.004263f, 0.021991f, -0.002311f, -0.010025f, 0.000714f, 0.028198f, -0.015031f, 0.004748f, 0.020756f, 0.000657f, -0.004758f, -0.010449f, 0.006321f, 0.001208f, 0.014950f, -0.008028f, 0.012651f, 0.010273f, 0.019581f, 0.009484f, 0.014667f, 0.001564f, -0.009594f, 0.002074f, -0.000390f, -0.005528f, 0.008865f, 0.012626f, -0.010460f, 0.006896f, 0.003780f, -0.009399f, 0.001240f, 0.003353f, 0.002643f, 0.003431f, -0.005372f, 0.003063f, -0.005889f, -0.001767f, -0.001627f, 0.000424f, 0.001106f, 0.002546f, 0.003227f, -0.000656f, 0.004833f, -0.000349f, -0.002153f, 0.001684f, 0.003217f, -0.001080f, 0.001953f, -0.005025f, 0.002002f, 0.017178f, 0.024659f, 0.015060f, 0.002516f, -0.005296f, -0.009227f, -0.020487f, -0.005927f, 0.013503f, -0.027857f, -0.011441f, 0.025381f, -0.035178f, -0.006362f, 0.019645f, 0.024690f, -0.002554f, -0.024793f, 0.003416f, - -0.009487f, 0.033141f, 0.014702f, -0.022801f, -0.014666f, -0.003527f, -0.014060f, -0.028690f, -0.014349f, -0.012744f, -0.010383f, -0.023239f, 0.011672f, 0.004097f, 0.014330f, -0.008863f, -0.004295f, -0.020446f, -0.002102f, -0.017744f, 0.001836f, -0.011804f, 0.002598f, 0.006172f, -0.027371f, -0.009009f, -0.010428f, -0.007286f, 0.005884f, 0.005818f, -0.008748f, 0.026948f, -0.001762f, -0.007076f, -0.005074f, 0.002582f, -0.006346f, -0.002250f, 0.010021f, 0.008528f, 0.011220f, 0.014779f, 0.014030f, 0.001091f, 0.009196f, -0.004514f, 0.021026f, 0.022488f, -0.011336f, -0.005908f, 0.013798f, -0.000416f, -0.034154f, 0.001551f, -0.017353f, 0.010565f, 0.010781f, 0.019287f, -0.014663f, 0.008200f, -0.020569f, -0.002016f, 0.011730f, -0.005036f, 0.018331f, -0.004797f, -0.002250f, 0.003668f, 0.001189f, 0.002559f, -0.001229f, 0.001065f, 0.007788f, -0.005797f, -0.001491f, 0.007487f, -0.001167f, 0.005877f, -0.008790f, -0.007642f, 0.005154f, -0.001238f, 0.001609f, 0.000807f, -0.001057f, 0.001343f, -0.005261f, -0.001381f, -0.000921f, -0.002292f, -0.003558f, -0.001241f, 0.002781f, 0.003343f, -0.000172f, -0.018926f, - -0.022901f, -0.011217f, -0.022125f, -0.031572f, 0.022337f, 0.002209f, 0.012499f, -0.017449f, -0.018156f, -0.025039f, -0.016939f, 0.007729f, -0.018571f, -0.016676f, 0.022713f, -0.005688f, 0.001068f, 0.005492f, 0.012975f, -0.010090f, -0.007654f, 0.003746f, -0.006130f, 0.003549f, -0.001157f, -0.011214f, -0.021465f, -0.033598f, 0.011097f, -0.024133f, -0.022134f, 0.001163f, -0.005839f, -0.001552f, -0.012463f, 0.005631f, 0.006395f, -0.027388f, -0.000608f, -0.006015f, -0.010731f, -0.015228f, 0.008647f, 0.001851f, 0.027359f, 0.003264f, -0.015372f, -0.000956f, 0.002529f, 0.011289f, 0.004712f, 0.024271f, -0.002100f, -0.026412f, 0.011289f, -0.005605f, 0.011914f, -0.015793f, 0.003428f, 0.008962f, -0.046717f, -0.022183f, 0.016493f, -0.001435f, -0.005030f, 0.007173f, -0.002394f, 0.029492f, -0.001056f, 0.018678f, 0.016213f, -0.023906f, -0.027762f, 0.001615f, -0.030754f, -0.000707f, -0.001536f, 0.000622f, 0.004450f, 0.019264f, -0.000693f, -0.012098f, 0.011026f, 0.014496f, -0.013549f, 0.002375f, 0.004340f, 0.014582f, -0.007146f, 0.000512f, -0.007246f, 0.004932f, -0.000419f, 0.003088f, 0.004830f, 0.007857f, - 0.007933f, -0.000241f, -0.007660f, 0.000342f, 0.005635f, 0.001775f, 0.001167f, -0.006981f, 0.000741f, -0.006992f, -0.001044f, 0.003785f, -0.001142f, 0.006870f, 0.005083f, -0.000294f, 0.001435f, 0.005563f, -0.005182f, 0.009811f, -0.000221f, -0.004301f, 0.004388f, 0.015944f, 0.065488f, -0.016197f, -0.043927f, -0.004010f, -0.019193f, 0.047496f, 0.003712f, 0.026566f, 0.014436f, -0.008379f, -0.021015f, -0.009527f, -0.022900f, -0.005986f, 0.032065f, -0.035773f, 0.001548f, -0.029200f, 0.007939f, 0.002338f, 0.014256f, 0.003207f, -0.013930f, -0.023679f, -0.027469f, -0.005185f, -0.026947f, -0.021206f, 0.003492f, 0.006207f, 0.020099f, -0.018841f, -0.039089f, -0.008271f, -0.013551f, 0.004623f, -0.018360f, -0.012497f, 0.005675f, -0.009861f, -0.015531f, -0.001129f, 0.001734f, -0.008026f, 0.038161f, -0.007882f, -0.006223f, 0.009568f, 0.009996f, -0.011374f, -0.004773f, 0.028152f, 0.023696f, 0.015476f, 0.029789f, 0.023250f, 0.000083f, 0.009712f, 0.016939f, -0.012613f, -0.011780f, 0.003434f, 0.012217f, 0.019756f, 0.008152f, 0.040129f, 0.004442f, 0.026903f, -0.007596f, -0.015571f, -0.009983f, 0.056971f, - 0.010164f, -0.007410f, -0.006836f, -0.020474f, -0.019546f, -0.014114f, -0.013695f, -0.016389f, 0.006582f, 0.013131f, -0.013920f, 0.004487f, 0.014204f, 0.007040f, -0.012850f, 0.002615f, 0.014488f, -0.003616f, 0.008034f, -0.007214f, -0.001992f, 0.003237f, -0.002416f, -0.001619f, -0.004303f, -0.009214f, -0.001407f, -0.008345f, 0.004454f, 0.006991f, 0.003595f, -0.006957f, 0.009276f, 0.006008f, -0.005089f, -0.006078f, -0.009409f, -0.002804f, -0.002578f, 0.002490f, -0.002033f, 0.004403f, 0.003302f, 0.000827f, -0.000891f, 0.000166f, -0.007500f, 0.003149f, 0.012689f, -0.057639f, -0.020990f, 0.028460f, -0.006554f, -0.029576f, -0.027181f, -0.009537f, 0.031436f, 0.016322f, -0.024748f, 0.013610f, -0.033033f, -0.013934f, -0.003733f, -0.022142f, -0.029648f, 0.024905f, 0.014089f, -0.026901f, -0.009135f, 0.057232f, 0.013602f, -0.025629f, -0.034736f, 0.000492f, 0.019082f, 0.003104f, 0.003470f, -0.040163f, -0.000952f, -0.004603f, -0.028566f, -0.016845f, -0.011398f, -0.023103f, -0.010710f, 0.006651f, 0.001100f, -0.024376f, -0.024141f, 0.003087f, 0.015488f, -0.000418f, 0.020688f, 0.034315f, -0.023953f, 0.021264f, - 0.016225f, 0.006760f, 0.004806f, 0.025872f, 0.008237f, 0.015954f, 0.010836f, 0.014380f, -0.004684f, -0.003113f, 0.029689f, 0.046186f, 0.007798f, -0.010741f, 0.005809f, -0.006639f, -0.017351f, 0.029397f, -0.014226f, -0.024770f, -0.039035f, -0.013459f, -0.045510f, 0.022831f, -0.018484f, -0.007871f, -0.002532f, -0.006558f, -0.016282f, -0.002724f, 0.018299f, -0.020770f, -0.001712f, 0.009607f, -0.005851f, -0.020251f, 0.010296f, 0.001679f, 0.005780f, -0.001326f, -0.002287f, -0.007227f, -0.000678f, -0.003734f, 0.010981f, 0.002886f, 0.003123f, 0.001794f, 0.003670f, 0.000178f, 0.005653f, 0.003782f, 0.009750f, -0.013447f, -0.001462f, 0.001149f, 0.009058f, -0.003655f, 0.007570f, -0.008089f, 0.002933f, 0.002025f, -0.001635f, -0.004457f, 0.007940f, -0.003513f, -0.000490f, 0.004548f, 0.001522f, 0.000487f, -0.010813f, -0.025267f, 0.021472f, 0.012905f, -0.003829f, 0.014379f, 0.010644f, 0.030590f, 0.023541f, -0.049652f, -0.016507f, 0.055269f, -0.043549f, -0.012828f, -0.026390f, 0.039396f, 0.017510f, 0.018176f, 0.007624f, 0.005809f, 0.015741f, 0.041793f, 0.019858f, -0.018345f, -0.000377f, 0.001426f, - -0.001182f, 0.016572f, 0.018568f, 0.002304f, 0.010984f, 0.010556f, -0.009591f, 0.012981f, 0.007762f, 0.025844f, -0.012396f, -0.024765f, -0.021316f, -0.016556f, 0.004909f, -0.002115f, 0.009846f, 0.011233f, 0.011243f, 0.022766f, -0.009966f, 0.004841f, -0.010045f, -0.017670f, -0.007178f, 0.001929f, -0.020423f, 0.026136f, 0.031571f, -0.034266f, 0.011692f, -0.023724f, 0.019410f, -0.003841f, 0.007544f, -0.002563f, -0.018997f, -0.004586f, 0.021845f, -0.017051f, -0.005262f, 0.003906f, -0.035034f, -0.013354f, 0.007337f, -0.027064f, -0.001885f, 0.043387f, 0.021558f, -0.002893f, -0.009927f, 0.034624f, 0.009083f, 0.024941f, -0.007839f, -0.011156f, 0.036118f, -0.012240f, 0.011272f, 0.004828f, 0.005128f, -0.007423f, -0.005452f, -0.006635f, -0.004605f, -0.012144f, -0.007512f, -0.008460f, 0.001212f, 0.007828f, -0.002883f, -0.017063f, -0.005491f, -0.002347f, 0.001924f, -0.000516f, -0.004257f, 0.000080f, 0.004812f, 0.008342f, -0.006661f, -0.000199f, -0.018418f, 0.003120f, -0.002302f, -0.003477f, 0.012416f, -0.000218f, -0.001204f, -0.007330f, 0.007592f, 0.002087f, 0.011245f, -0.003844f, -0.000665f, -0.007546f, - -0.000833f, 0.034499f, -0.002807f, -0.008057f, -0.028675f, 0.001216f, 0.002734f, -0.007737f, -0.000607f, -0.013339f, 0.005045f, -0.041238f, 0.037617f, -0.007638f, -0.013303f, -0.026117f, -0.029439f, -0.003083f, 0.035887f, -0.006548f, 0.009952f, -0.022215f, -0.012800f, -0.006232f, -0.021576f, -0.026096f, 0.023825f, -0.014762f, -0.011982f, 0.021068f, 0.020539f, -0.029078f, 0.010126f, 0.010935f, 0.025151f, 0.020722f, -0.007578f, -0.018421f, -0.011585f, -0.028277f, 0.031070f, 0.020387f, 0.010319f, 0.022111f, -0.022938f, 0.015665f, -0.003325f, 0.014356f, 0.015965f, -0.015072f, -0.001182f, 0.050512f, 0.042383f, -0.032086f, 0.012835f, 0.026202f, -0.020169f, 0.006203f, -0.047247f, 0.014110f, -0.025563f, 0.021087f, -0.014830f, -0.016382f, -0.011548f, 0.056360f, 0.003226f, -0.016478f, 0.005004f, 0.018926f, 0.002495f, 0.011241f, -0.030394f, -0.003503f, 0.050659f, -0.001706f, -0.019895f, -0.031024f, 0.000958f, -0.022975f, 0.014318f, 0.014571f, 0.017707f, -0.031686f, -0.033050f, -0.008863f, 0.005564f, 0.010830f, 0.003451f, 0.000132f, 0.000811f, 0.012008f, -0.008109f, -0.003292f, -0.002511f, -0.005367f, - 0.005937f, 0.004992f, -0.010109f, -0.007002f, -0.015529f, 0.009457f, -0.005696f, 0.004110f, 0.006801f, 0.009957f, 0.007949f, 0.003392f, 0.015601f, 0.000951f, -0.003636f, 0.007431f, -0.011593f, 0.006435f, 0.004490f, 0.003133f, 0.010326f, 0.011024f, 0.002049f, -0.001575f, 0.006525f, 0.000703f, -0.001002f, -0.012247f, -0.015998f, -0.003070f, -0.001235f, -0.002026f, -0.031186f, -0.001618f, -0.003710f, 0.009090f, -0.045282f, -0.020974f, -0.025369f, 0.021396f, -0.010744f, 0.031838f, 0.019418f, 0.040537f, -0.020073f, -0.001702f, -0.031770f, 0.027017f, 0.049297f, -0.015361f, -0.039015f, 0.003807f, -0.007903f, 0.060380f, -0.014788f, -0.023720f, 0.023120f, 0.012670f, 0.009738f, 0.022729f, 0.007846f, -0.075941f, 0.000383f, -0.005117f, 0.029758f, 0.053308f, -0.050265f, 0.001975f, 0.015226f, -0.024184f, -0.004781f, -0.068860f, -0.015467f, 0.035089f, -0.056535f, -0.033922f, -0.017269f, -0.022186f, 0.022709f, -0.013742f, -0.020065f, 0.030323f, 0.009347f, 0.011048f, 0.031401f, 0.003428f, -0.010642f, 0.022239f, 0.032944f, -0.031943f, -0.023668f, 0.048819f, 0.033706f, 0.011320f, 0.015640f, 0.011527f, - -0.021855f, -0.031748f, 0.000087f, 0.000409f, -0.006400f, 0.009987f, -0.019084f, 0.013627f, -0.026479f, 0.010783f, 0.062231f, -0.028917f, -0.023755f, 0.034147f, 0.009973f, -0.011640f, 0.021741f, 0.030012f, 0.022445f, 0.026522f, 0.013277f, -0.013492f, 0.011077f, -0.032748f, 0.017637f, 0.007414f, 0.009387f, -0.016619f, -0.004827f, 0.003473f, -0.001411f, -0.003322f, -0.004850f, 0.010746f, 0.021173f, -0.008222f, -0.020182f, 0.012888f, 0.024467f, 0.012704f, 0.009708f, -0.028807f, 0.017586f, 0.001872f, 0.009580f, -0.004620f, -0.009721f, -0.002302f, 0.014849f, 0.001340f, -0.002575f, -0.012430f, -0.000879f, -0.007248f, -0.003437f, -0.005745f, 0.006688f, 0.013897f, -0.008217f, 0.000550f, 0.008916f, -0.003435f, -0.001383f, -0.007593f, 0.001530f, -0.005088f, -0.005524f, 0.018013f, 0.016267f, 0.026528f, -0.061446f, -0.113488f, -0.052308f, -0.007956f, 0.038627f, 0.002735f, 0.042596f, 0.039349f, -0.011902f, 0.006378f, -0.009640f, -0.021584f, -0.035486f, -0.020652f, -0.025616f, -0.014899f, 0.040466f, -0.052598f, -0.009145f, -0.043838f, -0.054372f, -0.009522f, -0.054874f, -0.044151f, 0.005406f, -0.011551f, - -0.006333f, 0.009985f, 0.048156f, 0.003362f, -0.034947f, 0.001992f, -0.004192f, -0.010515f, -0.045381f, -0.002975f, 0.054094f, 0.005004f, -0.000923f, 0.021917f, 0.042024f, 0.028289f, 0.007350f, -0.017114f, 0.014653f, -0.014376f, -0.038519f, -0.070637f, 0.067194f, -0.008506f, 0.055975f, -0.004713f, 0.000745f, -0.020115f, -0.032344f, 0.059007f, -0.033529f, -0.027244f, -0.002833f, -0.042994f, -0.040394f, 0.033586f, 0.024632f, 0.012928f, -0.004287f, 0.017110f, -0.029828f, 0.011607f, -0.024206f, -0.034170f, -0.037295f, -0.029085f, -0.011992f, 0.028899f, 0.001840f, 0.010387f, -0.017253f, 0.010234f, -0.022574f, 0.016453f, 0.012779f, 0.011723f, -0.007351f, -0.000927f, 0.014561f, -0.003946f, -0.017608f, -0.013270f, -0.017429f, -0.001489f, -0.012862f, -0.002959f, -0.004514f, -0.004666f, 0.005155f, 0.002137f, -0.006912f, 0.003016f, 0.009170f, -0.002380f, -0.005808f, -0.013625f, -0.000089f, -0.009348f, -0.001267f, -0.001481f, -0.006467f, 0.015996f, -0.014953f, -0.013984f, -0.006600f, 0.008523f, -0.013233f, -0.013295f, 0.001939f, -0.011101f, -0.000051f, -0.001922f, 0.006278f, -0.001384f, 0.002133f, -0.008934f, - 0.003674f, -0.018594f, -0.009381f, -0.002734f, -0.039422f, -0.028863f, -0.043747f, -0.000451f, -0.041845f, -0.048590f, -0.008221f, -0.022198f, -0.053369f, -0.073892f, 0.008372f, -0.027959f, 0.013627f, -0.005324f, 0.027708f, 0.062257f, 0.003145f, 0.006452f, -0.031589f, -0.033793f, 0.028141f, 0.015738f, -0.022879f, 0.000138f, 0.018353f, -0.042091f, -0.032398f, -0.002249f, 0.053422f, -0.045910f, 0.000597f, 0.001136f, 0.024585f, -0.039203f, 0.040884f, 0.021519f, 0.011574f, -0.001022f, -0.017053f, -0.045495f, -0.000481f, -0.010846f, 0.016453f, -0.024661f, -0.060453f, 0.049859f, -0.036432f, -0.016173f, -0.002557f, 0.048797f, -0.037082f, 0.017164f, -0.030462f, 0.018938f, -0.011045f, -0.044744f, 0.021425f, -0.057028f, -0.012618f, -0.016310f, 0.019937f, 0.046892f, -0.027095f, 0.017418f, 0.047421f, -0.037889f, 0.006260f, 0.011552f, 0.011137f, 0.014114f, -0.069203f, -0.020618f, -0.011720f, 0.025015f, 0.005231f, -0.000002f, 0.012637f, -0.012053f, 0.027616f, -0.004920f, 0.006288f, -0.026489f, 0.023049f, 0.006045f, -0.042655f, -0.019331f, 0.020088f, 0.025276f, -0.003559f, -0.006252f, -0.016684f, 0.023702f, - 0.002974f, 0.000544f, -0.044365f, 0.007404f, -0.021341f, -0.033421f, -0.010158f, -0.006592f, -0.004322f, -0.019582f, -0.025448f, 0.009337f, -0.005854f, -0.012331f, 0.007333f, -0.002361f, -0.003637f, 0.001692f, -0.006804f, 0.002636f, 0.013746f, -0.025657f, 0.002627f, 0.005094f, -0.008507f, 0.018880f, 0.017390f, 0.019998f, 0.007963f, 0.012167f, -0.012432f, 0.005423f, 0.000673f, 0.005918f, -0.005634f, 0.000507f, -0.000347f, 0.008524f, -0.004997f, -0.011309f, 0.081530f, 0.007891f, 0.034660f, 0.092682f, -0.043137f, -0.024820f, -0.036090f, -0.013971f, 0.043237f, 0.002440f, 0.053167f, 0.013821f, -0.001578f, -0.020096f, 0.040249f, -0.025260f, 0.009400f, -0.017006f, 0.016796f, -0.026738f, 0.030734f, -0.015193f, -0.006803f, -0.017765f, 0.023693f, 0.015655f, -0.025475f, -0.006510f, 0.024925f, 0.007066f, -0.016258f, 0.001272f, -0.020994f, -0.070286f, 0.030589f, -0.037108f, -0.053500f, 0.032855f, 0.014982f, 0.035564f, -0.003130f, -0.035382f, -0.012855f, -0.009749f, 0.021105f, 0.027519f, 0.031239f, 0.051369f, 0.051266f, -0.023022f, 0.007257f, -0.054404f, 0.000760f, -0.039714f, -0.070091f, -0.007288f, - -0.057111f, 0.018224f, -0.045574f, -0.030502f, -0.030122f, -0.043295f, 0.004438f, -0.010542f, 0.003796f, -0.013140f, -0.005246f, -0.004106f, -0.074167f, 0.011520f, 0.011464f, 0.016610f, 0.035847f, -0.007088f, -0.058947f, 0.033889f, -0.038127f, 0.021788f, 0.021964f, 0.047946f, -0.026063f, -0.024326f, -0.015739f, -0.009684f, -0.034182f, 0.013469f, 0.008059f, 0.004068f, -0.008088f, 0.011886f, -0.017005f, 0.017149f, -0.002731f, 0.003377f, 0.005284f, -0.021421f, 0.000016f, 0.008094f, 0.021114f, -0.005713f, -0.012512f, 0.009027f, 0.014661f, 0.017818f, -0.011123f, -0.000030f, 0.010191f, -0.001368f, -0.001822f, -0.006817f, -0.013234f, 0.009300f, -0.000138f, 0.005904f, -0.007344f, -0.001147f, 0.012380f, -0.008233f, -0.012445f, -0.007305f, 0.002088f, -0.005440f, -0.021955f, 0.035418f, -0.008912f, -0.007388f, 0.003184f, 0.006728f, -0.005834f, 0.006465f, 0.008616f, -0.003542f, -0.000877f, -0.004875f, -0.007134f, 0.058026f, 0.108572f, -0.059602f, -0.048141f, -0.084143f, -0.171045f, -0.042360f, -0.017922f, 0.038180f, 0.023105f, -0.014853f, -0.033012f, 0.046679f, 0.057113f, 0.004889f, -0.002765f, 0.000264f, - -0.045129f, -0.026671f, -0.032008f, -0.024640f, -0.047736f, -0.000711f, -0.012062f, -0.005829f, 0.032745f, -0.044892f, 0.035923f, 0.033640f, -0.010521f, 0.017289f, -0.001973f, -0.079832f, -0.056837f, -0.031782f, -0.029056f, -0.013446f, 0.006298f, 0.030683f, 0.009965f, 0.016464f, 0.077025f, 0.069976f, 0.015861f, -0.052108f, -0.027074f, -0.002335f, -0.026757f, -0.049416f, -0.123169f, -0.103574f, -0.046560f, -0.011165f, 0.005084f, 0.026896f, -0.085441f, -0.049301f, 0.044313f, 0.051349f, 0.061734f, -0.056324f, -0.068296f, 0.022195f, -0.041659f, 0.101300f, -0.051095f, -0.005881f, -0.030062f, -0.016319f, 0.014016f, 0.029939f, -0.014938f, -0.040104f, 0.037230f, 0.036054f, -0.008156f, 0.041308f, 0.036767f, -0.080324f, 0.071871f, -0.046585f, 0.000250f, -0.013727f, -0.047970f, -0.013495f, 0.024337f, 0.018097f, -0.003870f, 0.009369f, -0.029239f, 0.000659f, 0.014752f, 0.019844f, 0.031366f, -0.023540f, 0.004798f, -0.006737f, -0.012738f, -0.033324f, -0.004050f, -0.032103f, 0.028351f, -0.005233f, -0.034067f, 0.005425f, -0.039028f, -0.002626f, 0.004757f, -0.009082f, -0.016857f, 0.001144f, 0.003175f, 0.004085f, - 0.012794f, -0.002424f, -0.000556f, 0.022786f, 0.007478f, -0.023000f, -0.026314f, 0.007182f, -0.017440f, -0.037193f, -0.012722f, -0.034988f, 0.011548f, 0.011055f, 0.027529f, 0.003734f, -0.028314f, -0.020319f, 0.020098f, 0.102047f, -0.034013f, 0.032900f, -0.001436f, -0.045417f, 0.007011f, -0.091697f, -0.020657f, 0.019715f, 0.001801f, -0.053375f, 0.031593f, 0.093487f, 0.065576f, -0.028926f, -0.058540f, -0.024925f, 0.006576f, 0.098238f, 0.013213f, 0.002479f, 0.000372f, 0.045425f, 0.046699f, 0.012213f, 0.035702f, 0.028960f, 0.054899f, -0.015643f, 0.006265f, 0.035080f, -0.032017f, -0.048729f, 0.027370f, 0.080605f, 0.017463f, 0.039064f, 0.003739f, 0.023983f, -0.107904f, 0.019970f, -0.004226f, 0.024371f, 0.105771f, 0.042684f, 0.014294f, -0.010506f, 0.047396f, -0.010831f, -0.022240f, 0.016749f, 0.029449f, 0.062252f, -0.020080f, 0.038689f, 0.007036f, 0.010728f, 0.024485f, 0.031495f, -0.000996f, -0.041241f, -0.025603f, 0.009630f, 0.079774f, 0.054642f, 0.042442f, 0.045960f, 0.038475f, -0.011048f, -0.098811f, -0.070991f, -0.135542f, -0.001919f, 0.041310f, 0.077993f, 0.012133f, -0.056941f, - 0.018786f, -0.035256f, 0.011293f, 0.026910f, 0.008135f, -0.016541f, -0.009168f, 0.000240f, -0.007658f, 0.021806f, -0.015001f, -0.039468f, 0.000739f, 0.013061f, 0.017517f, -0.025558f, -0.011584f, -0.047481f, 0.011739f, 0.020552f, -0.018227f, -0.016439f, 0.011843f, -0.009383f, -0.011730f, -0.010356f, -0.036865f, -0.008021f, 0.038003f, 0.023693f, 0.034408f, -0.018678f, -0.038965f, -0.029012f, 0.025274f, 0.019808f, -0.009184f, -0.001874f, -0.002381f, 0.006925f, -0.010969f, 0.022666f, -0.026000f, -0.014862f, 0.001805f, 0.004133f, 0.014967f, -0.032317f, 0.006633f, -0.023802f, 0.062660f, -0.018609f, 0.013663f, -0.020688f, 0.007225f, -0.038852f, -0.016265f, 0.083389f, -0.003397f, -0.039016f, 0.009535f, -0.007578f, -0.031703f, -0.025784f, 0.004644f, 0.043871f, 0.119685f, 0.053466f, 0.106082f, 0.055200f, 0.047112f, 0.044588f, -0.031581f, -0.026722f, -0.030220f, 0.012944f, 0.086920f, 0.027644f, -0.072721f, 0.030995f, -0.078185f, 0.038748f, -0.049611f, -0.010891f, -0.043563f, -0.047126f, -0.002317f, 0.005645f, -0.000767f, -0.058873f, 0.076113f, -0.015860f, 0.028546f, -0.074361f, 0.019716f, -0.017590f, - -0.022879f, 0.037959f, -0.031510f, 0.076310f, 0.008939f, -0.030648f, 0.003843f, -0.023191f, -0.031532f, 0.021179f, -0.052089f, -0.011571f, 0.065219f, -0.014681f, 0.026632f, -0.003951f, -0.047446f, 0.051469f, -0.028066f, -0.108216f, 0.013326f, 0.007657f, -0.000528f, 0.011439f, -0.014957f, -0.021446f, -0.006126f, 0.048347f, -0.092731f, 0.054294f, -0.021939f, -0.013348f, 0.060853f, -0.037966f, 0.017820f, 0.022028f, 0.088388f, 0.030346f, 0.039013f, -0.006743f, 0.052776f, -0.042716f, 0.041839f, 0.006418f, -0.016316f, 0.010764f, 0.002414f, 0.001269f, -0.022960f, -0.006402f, 0.003965f, -0.010203f, -0.017220f, 0.035492f, 0.000484f, -0.003048f, -0.010729f, 0.011521f, -0.014237f, 0.031588f, 0.018506f, 0.016768f, 0.003831f, -0.000623f, -0.003195f, 0.026363f, -0.021650f, -0.028012f, 0.010438f, 0.013601f, -0.001481f, 0.023622f, -0.010510f, -0.005298f, 0.001040f, -0.008668f, -0.026984f, -0.027274f, -0.002721f, 0.008525f, -0.013521f, 0.004193f, 0.008368f, 0.009124f, -0.007446f, -0.001091f, 0.017359f, -0.025375f, -0.045034f, 0.073925f, 0.068874f, 0.239792f, 0.096949f, -0.130644f, -0.061262f, -0.063996f, - -0.100267f, 0.069975f, 0.215709f, 0.086319f, 0.041036f, -0.054041f, -0.014743f, -0.003617f, -0.002407f, 0.103519f, 0.071047f, 0.045175f, 0.155903f, -0.186526f, 0.012289f, 0.097540f, -0.023485f, 0.020075f, 0.102340f, 0.017941f, -0.029023f, 0.055141f, -0.102718f, -0.206358f, -0.019531f, 0.020307f, -0.079873f, -0.009050f, 0.110765f, 0.018679f, 0.006685f, 0.042066f, -0.087141f, -0.177797f, -0.162285f, -0.073896f, 0.053924f, 0.105727f, 0.234323f, 0.058849f, -0.029746f, -0.029415f, -0.063264f, -0.140002f, -0.042362f, 0.102484f, 0.103300f, 0.108189f, 0.105662f, 0.066240f, 0.055119f, 0.015934f, 0.024204f, -0.089962f, -0.055101f, 0.013401f, 0.025355f, 0.046149f, 0.056713f, 0.139161f, 0.036607f, 0.081000f, -0.053137f, -0.052582f, -0.094266f, -0.020527f, -0.072061f, -0.017231f, 0.145237f, 0.186310f, 0.004173f, -0.007552f, -0.115909f, -0.133798f, -0.075234f, -0.031815f, 0.074434f, 0.039567f, -0.008043f, 0.027598f, -0.010207f, -0.019156f, -0.034931f, -0.033161f, -0.004374f, 0.008392f, 0.006926f, 0.040913f, -0.002928f, -0.000925f, -0.020923f, 0.000664f, -0.026061f, -0.008811f, 0.000096f, -0.038503f, - -0.017312f, 0.000767f, -0.010500f, -0.002760f, 0.022500f, 0.019939f, 0.046982f, -0.020757f, -0.008537f, -0.047677f, -0.038569f, -0.029307f, 0.048663f, 0.030814f, 0.015253f, 0.016117f, -0.015115f, -0.042362f, -0.034143f, 0.001471f, -0.024078f, 0.041325f, 0.061379f, -0.015865f, -0.170373f, -0.106176f, 0.062160f, 0.160489f, 0.188230f, 0.389793f, 0.238771f, 0.160973f, 0.143432f, 0.110437f, -0.018659f, -0.169804f, -0.184502f, -0.359977f, -0.381421f, -0.362862f, -0.230865f, -0.081491f, 0.081156f, 0.138433f, 0.232371f, 0.227009f, 0.160437f, 0.157154f, 0.202376f, 0.192921f, 0.174328f, 0.109492f, 0.077224f, 0.066924f, -0.006281f, -0.012441f, -0.222845f, -0.159909f, -0.199335f, -0.242752f, -0.101214f, -0.237077f, -0.190262f, -0.348964f, -0.304217f, -0.216760f, -0.143798f, -0.022196f, 0.181687f, 0.218719f, 0.185442f, 0.196842f, 0.183444f, 0.338254f, 0.441852f, 0.393682f, 0.391710f, 0.344503f, 0.333812f, 0.247084f, 0.248225f, 0.052405f, -0.166680f, -0.348562f, -0.332252f, -0.498488f, -0.414828f, -0.605274f, -0.719689f, -0.640709f, -0.607377f, -0.366622f, -0.254375f, 0.045882f, 0.121140f, 0.283508f, - 0.423010f, 0.650766f, 0.564671f, 0.813885f, 0.704002f, 0.503313f, 0.496057f, 0.224887f, 0.016660f, -0.046063f, -0.176358f, -0.309124f, -0.368192f, -0.441077f, -0.381274f, -0.346505f, -0.333282f, -0.271834f, -0.278976f, -0.230234f, -0.201647f, -0.062353f, -0.042866f, 0.054645f, 0.130095f, 0.148426f, 0.194916f, 0.276120f, 0.335334f, 0.356427f, 0.374168f, 0.273765f, 0.227520f, 0.219479f, 0.081789f, 0.052935f, -0.124404f, -0.298864f, -0.396660f, -0.406972f, -0.454241f, -0.289686f, -0.329137f, -0.220696f, -0.158524f, -0.045087f, 0.078520f, 0.153784f, 0.235626f, 0.243387f, 0.368329f, 0.377122f, 0.363342f, 0.306781f, 0.276258f, 0.108457f, 0.027658f, -0.070726f, -0.157010f, -0.300183f, -0.352209f, -0.294060f, -0.198994f, -0.177297f, -0.123428f, -0.114161f, -0.059607f, -0.009612f, 0.013690f, 0.008045f, 0.052104f, 0.057900f, 0.094101f, 0.078453f, 0.073878f, 0.067391f, 0.078304f, 0.052772f, 0.050564f, 0.055861f, 0.056861f, 0.020775f, 0.006321f, -0.013502f, -0.002813f, -0.008730f, 0.004202f} - }, - { - {-0.009636f, -0.025798f, -0.002176f, -0.004122f, -0.003524f, 0.000383f, -0.004304f, 0.001608f, 0.002528f, 0.010573f, -0.003571f, -0.000425f, -0.009753f, 0.000719f, 0.009802f, 0.000683f, 0.007084f, -0.002091f, 0.002973f, -0.004095f, -0.006160f, 0.000208f, 0.006734f, -0.000864f, -0.008442f, -0.000347f, 0.008170f, 0.002666f, -0.003504f, -0.002915f, -0.000388f, -0.001121f, -0.001913f, 0.000102f, -0.001386f, -0.002807f, -0.000362f, 0.001684f, 0.001140f, -0.000366f, -0.006433f, 0.009567f, 0.013019f, 0.000429f, 0.001512f, -0.005252f, -0.002994f, 0.001046f, -0.006805f, -0.007532f, 0.004506f, -0.006115f, 0.004453f, 0.005794f, 0.005749f, 0.002177f, -0.000876f, 0.001579f, 0.001199f, 0.004367f, -0.009364f, 0.000833f, -0.001213f, -0.006786f, -0.009222f, 0.000299f, 0.004600f, -0.003480f, -0.000492f, -0.001038f, -0.000654f, 0.006532f, 0.003218f, 0.000907f, 0.002541f, -0.002082f, -0.007589f, 0.002989f, 0.001226f, 0.006539f, -0.007802f, -0.005866f, 0.004398f, -0.003444f, -0.001627f, -0.005762f, 0.001314f, -0.003365f, -0.003173f, 0.000130f, -0.002544f, -0.002715f, 0.000760f, -0.001443f, -0.000702f, -0.003096f, - 0.001945f, -0.000335f, 0.000183f, -0.000784f, 0.001589f, -0.000242f, 0.000515f, -0.000503f, -0.000497f, -0.023631f, -0.005584f, 0.009208f, -0.001422f, -0.007267f, 0.002972f, -0.017518f, -0.006888f, -0.002523f, -0.003299f, -0.009051f, -0.009713f, 0.005200f, 0.007823f, 0.006859f, -0.009093f, -0.013178f, 0.001362f, -0.007707f, -0.014226f, 0.003248f, -0.001029f, 0.004012f, 0.015707f, -0.005193f, -0.001806f, -0.009982f, 0.013554f, 0.001080f, 0.006697f, 0.004740f, 0.011105f, 0.005737f, 0.003343f, -0.011129f, -0.001396f, -0.010231f, -0.002959f, 0.000470f, -0.004436f, 0.003467f, 0.002780f, -0.004829f, -0.009646f, 0.006084f, 0.009794f, 0.002813f, -0.004852f, -0.007328f, -0.004684f, 0.002375f, -0.008395f, -0.010458f, -0.003102f, 0.005207f, -0.003012f, 0.002578f, 0.006473f, 0.004182f, -0.005007f, 0.009572f, 0.000746f, 0.008156f, -0.006922f, -0.005716f, -0.003428f, -0.003986f, 0.005578f, -0.003175f, 0.000239f, 0.009664f, 0.003335f, 0.000263f, -0.009220f, 0.002509f, -0.003732f, 0.006786f, 0.009737f, -0.001672f, 0.000727f, -0.004462f, 0.003641f, 0.008671f, -0.003148f, 0.005413f, 0.002370f, 0.001170f, - 0.004379f, 0.001799f, 0.000147f, 0.003579f, 0.001280f, -0.000258f, -0.000044f, 0.001599f, 0.001375f, -0.001573f, 0.001136f, 0.001227f, 0.001765f, -0.004828f, 0.006094f, 0.008424f, 0.003394f, -0.005245f, 0.003664f, -0.002453f, 0.002536f, 0.015828f, 0.009745f, -0.013336f, 0.009058f, -0.007331f, -0.003633f, -0.001915f, 0.000260f, 0.006739f, 0.000246f, 0.018508f, 0.005336f, -0.007081f, -0.004670f, -0.004590f, 0.013015f, 0.003079f, 0.012534f, 0.004129f, 0.008436f, 0.013098f, 0.014998f, 0.005722f, -0.001704f, -0.001488f, 0.002255f, -0.012016f, -0.011201f, 0.003587f, -0.008506f, 0.004839f, 0.002310f, -0.002870f, -0.001265f, 0.003537f, 0.012512f, -0.004095f, -0.004268f, -0.006431f, 0.015986f, -0.002156f, -0.019966f, -0.009946f, -0.007925f, -0.007250f, 0.008228f, 0.007930f, 0.006951f, 0.010436f, 0.004613f, 0.006544f, -0.000307f, -0.000619f, -0.000311f, 0.010495f, 0.003392f, 0.006161f, -0.013904f, 0.000917f, 0.000623f, 0.000760f, 0.000900f, 0.006050f, 0.004215f, 0.001759f, -0.006747f, -0.006694f, 0.003877f, 0.003251f, -0.002000f, -0.000411f, -0.005439f, -0.006882f, -0.005650f, 0.003841f, - 0.006651f, 0.000824f, 0.000367f, 0.002335f, -0.001951f, -0.000234f, -0.001547f, 0.001217f, 0.001160f, 0.000706f, -0.000941f, 0.002012f, 0.003183f, -0.000462f, 0.000299f, 0.000718f, -0.000530f, 0.000857f, -0.001341f, 0.002347f, -0.000002f, -0.000441f, -0.001528f, 0.002075f, -0.004046f, 0.002280f, 0.000644f, 0.001719f, -0.000316f, 0.035122f, 0.007783f, 0.005358f, -0.004197f, -0.002434f, 0.003493f, 0.002461f, 0.009456f, 0.012396f, -0.000481f, 0.018250f, 0.007368f, -0.006436f, -0.005936f, -0.000461f, 0.008822f, -0.001030f, -0.004673f, 0.009658f, 0.001450f, 0.026317f, 0.006986f, 0.005209f, 0.001180f, -0.002543f, 0.001338f, 0.003981f, 0.005202f, -0.001197f, 0.000153f, 0.014119f, 0.002076f, 0.015543f, -0.007717f, -0.007476f, 0.005232f, 0.023339f, 0.006867f, 0.005636f, -0.001918f, -0.010100f, -0.003861f, 0.003152f, 0.000802f, -0.000236f, 0.000965f, -0.014331f, 0.001125f, -0.006309f, 0.005849f, 0.004514f, -0.005543f, 0.003290f, 0.005140f, 0.003371f, -0.006615f, -0.006920f, 0.001765f, 0.002439f, 0.000141f, -0.008895f, 0.002446f, -0.003467f, 0.005826f, -0.000828f, 0.001235f, 0.003612f, - -0.001243f, 0.001993f, -0.003043f, 0.000969f, 0.020621f, 0.002314f, 0.007393f, 0.000238f, -0.005509f, 0.003360f, 0.001359f, 0.006341f, -0.011259f, -0.007949f, 0.004037f, -0.001678f, 0.002483f, -0.002974f, 0.004484f, 0.003635f, 0.000604f, -0.005053f, -0.001762f, -0.006873f, -0.001074f, -0.001585f, 0.004565f, -0.003173f, -0.000687f, 0.000743f, -0.000452f, -0.001657f, -0.001495f, 0.001279f, -0.001596f, -0.002312f, 0.000136f, 0.000081f, 0.001403f, -0.004655f, -0.001640f, 0.001170f, 0.000844f, -0.005067f, -0.001058f, -0.000345f, -0.006333f, -0.000740f, 0.005173f, -0.007745f, -0.001344f, 0.007878f, -0.003991f, -0.012215f, -0.000080f, 0.020156f, -0.001402f, 0.015825f, 0.008099f, 0.021891f, 0.002628f, 0.002049f, 0.007947f, -0.006147f, -0.013071f, -0.017156f, 0.004022f, -0.008730f, 0.020157f, 0.011557f, 0.014231f, -0.002661f, -0.005965f, 0.001808f, 0.003167f, 0.006697f, 0.018856f, 0.002292f, 0.007833f, -0.008604f, 0.005977f, -0.006097f, 0.002537f, -0.003274f, 0.006171f, 0.010847f, 0.001410f, 0.010365f, 0.003735f, 0.005203f, -0.003051f, -0.002468f, 0.013757f, -0.003199f, -0.003525f, 0.010440f, - -0.006300f, -0.000560f, 0.001414f, -0.004532f, -0.006120f, 0.004635f, -0.007010f, -0.001301f, -0.008930f, -0.018855f, -0.002204f, -0.002848f, -0.000585f, -0.019650f, -0.007607f, -0.005985f, -0.005195f, 0.007413f, 0.019278f, -0.004922f, 0.006122f, 0.010151f, -0.002939f, 0.001920f, 0.001600f, 0.001163f, -0.007179f, 0.007719f, -0.009078f, 0.002348f, 0.006311f, 0.018170f, 0.005548f, 0.005384f, 0.001519f, -0.000235f, 0.005343f, -0.006565f, -0.000196f, 0.003748f, 0.001632f, 0.000322f, -0.007502f, 0.004385f, 0.005208f, 0.005384f, -0.001176f, 0.004006f, 0.002025f, 0.001126f, 0.003491f, 0.002105f, 0.000270f, 0.002059f, -0.000679f, 0.001594f, 0.000860f, 0.001340f, 0.001934f, 0.002631f, 0.002944f, 0.002154f, 0.001911f, 0.002334f, -0.001584f, 0.002108f, -0.025561f, 0.002239f, 0.013688f, 0.007249f, -0.014357f, -0.001055f, 0.000634f, 0.003402f, 0.005207f, -0.000800f, -0.011191f, -0.010656f, 0.001611f, 0.018113f, 0.008551f, 0.010749f, 0.018152f, -0.012304f, 0.012933f, 0.024050f, -0.002277f, 0.005434f, -0.013704f, 0.004696f, 0.004840f, -0.011679f, -0.006382f, -0.002508f, 0.005443f, -0.011801f, - -0.015693f, 0.003004f, 0.001604f, -0.013357f, 0.000945f, 0.004244f, -0.002860f, 0.028508f, -0.001762f, -0.020161f, -0.001528f, 0.007000f, 0.015881f, 0.005943f, 0.007025f, -0.012917f, 0.003400f, 0.004115f, -0.011729f, -0.000730f, -0.002159f, 0.019807f, 0.011906f, -0.003257f, -0.007001f, -0.015295f, 0.006390f, 0.006170f, -0.009268f, -0.000284f, 0.003446f, 0.006022f, 0.005927f, -0.007778f, -0.000453f, -0.001678f, 0.018320f, -0.015574f, 0.001674f, -0.004041f, 0.016466f, -0.001179f, -0.004338f, -0.006989f, 0.001839f, -0.007234f, -0.017279f, 0.000491f, 0.012681f, 0.003892f, 0.007848f, 0.002040f, -0.006401f, -0.002421f, -0.003365f, 0.011037f, 0.004103f, -0.002981f, -0.000688f, 0.010023f, 0.007204f, -0.002813f, 0.000791f, 0.001588f, 0.001872f, -0.000183f, 0.003723f, 0.002788f, 0.002162f, 0.000263f, -0.001694f, -0.000634f, 0.000503f, -0.001431f, 0.000182f, -0.001998f, -0.000961f, 0.001641f, 0.009712f, 0.008842f, 0.003107f, -0.006489f, 0.001799f, 0.004232f, 0.029886f, 0.019852f, 0.014847f, 0.021054f, 0.008476f, -0.001828f, 0.002947f, 0.007782f, -0.021296f, 0.010880f, 0.000247f, 0.011697f, - -0.008636f, -0.004356f, -0.013768f, 0.003864f, 0.024031f, -0.023618f, -0.015066f, -0.025109f, 0.012613f, -0.005757f, 0.000698f, -0.011455f, 0.001368f, -0.004300f, -0.011531f, 0.004316f, 0.005487f, -0.017879f, -0.002548f, 0.003173f, -0.004045f, 0.009359f, -0.025970f, -0.012579f, 0.026338f, 0.002592f, -0.000576f, -0.002681f, 0.000824f, -0.013503f, -0.014378f, 0.000776f, -0.020868f, -0.004860f, 0.001984f, 0.005493f, -0.009033f, -0.002124f, 0.025665f, -0.001733f, 0.008942f, 0.019105f, -0.017965f, -0.006278f, 0.004095f, 0.004474f, 0.003340f, -0.005543f, -0.012865f, 0.014574f, -0.001713f, -0.013687f, 0.009917f, -0.002506f, 0.002255f, 0.003763f, -0.007444f, -0.004500f, -0.003204f, -0.005605f, -0.008058f, -0.009627f, -0.009298f, -0.011794f, -0.003644f, -0.005002f, -0.001248f, -0.001543f, -0.000228f, 0.001540f, -0.004917f, -0.003849f, 0.002701f, 0.003271f, 0.005309f, -0.000293f, -0.002258f, -0.006921f, -0.002032f, -0.007998f, -0.005183f, -0.001057f, 0.001510f, -0.000553f, 0.001030f, -0.001992f, -0.001241f, 0.006009f, 0.002260f, 0.004188f, -0.004064f, 0.001114f, 0.000941f, 0.001626f, -0.008183f, 0.000680f, - 0.002408f, 0.000092f, 0.004331f, -0.049578f, -0.027788f, 0.022573f, -0.008798f, -0.010441f, 0.013445f, 0.011964f, -0.021397f, -0.028557f, -0.009358f, -0.010113f, -0.010955f, -0.001795f, -0.019911f, -0.014080f, 0.007054f, 0.000933f, -0.026731f, -0.029116f, -0.016582f, -0.007862f, -0.001660f, 0.015161f, -0.001262f, -0.010769f, 0.008049f, -0.024205f, 0.000551f, -0.000970f, 0.000850f, 0.008686f, 0.004487f, -0.017585f, -0.013553f, 0.010834f, 0.003536f, 0.039804f, 0.009522f, -0.013014f, 0.001587f, 0.001474f, 0.000191f, 0.010650f, 0.001783f, 0.004561f, -0.004296f, -0.008515f, 0.002357f, -0.022589f, -0.004489f, -0.009733f, -0.012288f, 0.002834f, -0.018371f, 0.021337f, -0.002961f, 0.009043f, 0.014875f, 0.004699f, 0.007772f, -0.000769f, -0.010053f, -0.000194f, -0.001505f, -0.011972f, 0.015620f, -0.006342f, 0.027987f, -0.000693f, -0.000893f, 0.001556f, -0.007576f, -0.015043f, 0.004517f, -0.011748f, -0.005113f, 0.016794f, -0.021606f, -0.020736f, 0.013824f, 0.013654f, 0.011236f, -0.017524f, 0.012591f, 0.005629f, 0.007239f, -0.000258f, 0.003032f, 0.003782f, 0.009738f, 0.004556f, 0.002209f, 0.007708f, - -0.001229f, -0.000152f, -0.006315f, -0.004410f, -0.001215f, 0.005359f, -0.006762f, 0.001216f, -0.000988f, -0.003507f, -0.002600f, 0.002008f, -0.008632f, -0.004787f, -0.006498f, -0.000753f, 0.002475f, 0.000311f, 0.005992f, -0.001725f, 0.006280f, 0.000934f, 0.002190f, 0.001406f, 0.004813f, -0.003539f, -0.003402f, 0.010256f, 0.036718f, -0.020423f, 0.017418f, 0.007400f, 0.012949f, -0.005060f, -0.020189f, 0.003040f, -0.005378f, -0.018583f, 0.037886f, -0.002506f, -0.010675f, -0.037287f, 0.022912f, 0.006565f, -0.000530f, -0.013828f, -0.016315f, 0.000599f, 0.038472f, 0.014529f, -0.001616f, -0.003646f, -0.016673f, -0.013323f, 0.011023f, 0.005085f, -0.013069f, -0.008963f, 0.013346f, 0.003516f, -0.000678f, 0.011720f, 0.017692f, 0.002945f, 0.023393f, 0.026817f, 0.016065f, -0.006015f, 0.005751f, 0.002313f, 0.004273f, 0.014049f, -0.019903f, 0.020928f, -0.001570f, -0.010452f, -0.016167f, 0.000217f, 0.013516f, 0.009683f, -0.019060f, 0.004261f, 0.014801f, 0.002409f, -0.013850f, -0.029442f, -0.027033f, 0.007193f, 0.011731f, 0.002103f, -0.010583f, -0.001287f, 0.021308f, -0.009752f, -0.016368f, -0.031110f, - 0.003132f, 0.006154f, -0.023454f, 0.008840f, 0.023102f, -0.010499f, 0.017927f, 0.006382f, -0.021744f, -0.015896f, 0.001488f, 0.022232f, -0.002491f, 0.023348f, -0.004235f, -0.008073f, 0.004698f, 0.011941f, 0.002956f, -0.003896f, -0.006456f, 0.004062f, 0.010300f, 0.008606f, 0.001225f, 0.013887f, 0.002336f, 0.009979f, 0.002234f, 0.013620f, 0.001812f, 0.008431f, -0.000378f, 0.006746f, 0.003359f, -0.003293f, -0.010162f, 0.000902f, -0.011846f, -0.001575f, -0.005006f, 0.001859f, -0.001785f, -0.000407f, -0.010564f, -0.000930f, 0.004535f, -0.004999f, 0.000386f, -0.001192f, 0.000441f, -0.000659f, -0.007739f, 0.001157f, 0.044214f, 0.029519f, 0.006368f, -0.008645f, -0.005055f, -0.005961f, -0.030842f, -0.012091f, -0.000693f, 0.019763f, -0.014342f, -0.007601f, -0.006869f, 0.000587f, 0.031874f, -0.024766f, -0.007008f, -0.001140f, 0.014800f, -0.004988f, -0.018786f, -0.030697f, 0.010762f, -0.021140f, -0.010090f, -0.013103f, -0.014738f, 0.004761f, -0.024541f, -0.011549f, 0.021182f, 0.032409f, 0.001168f, -0.019936f, -0.018273f, 0.029899f, -0.003626f, -0.015879f, 0.030688f, 0.001164f, 0.001600f, 0.001506f, - -0.034109f, 0.013951f, -0.012830f, 0.012482f, 0.011058f, -0.022794f, -0.002810f, -0.023128f, 0.008755f, -0.022427f, -0.004155f, 0.009651f, 0.012550f, -0.007379f, 0.007507f, -0.027264f, 0.018580f, -0.001966f, 0.012578f, 0.010982f, 0.007516f, -0.005931f, -0.006053f, 0.027504f, -0.019223f, 0.013735f, -0.004952f, -0.023138f, -0.014358f, -0.001410f, 0.024273f, -0.013929f, 0.011212f, 0.003440f, -0.007879f, 0.000447f, -0.027689f, 0.034754f, 0.020986f, -0.003967f, -0.009720f, 0.017090f, 0.007061f, -0.004879f, -0.009181f, 0.002032f, -0.006219f, 0.008854f, -0.002116f, 0.004704f, 0.014078f, 0.005268f, 0.011085f, 0.000081f, 0.003748f, 0.001784f, -0.002407f, 0.000394f, -0.001346f, 0.009924f, 0.003592f, 0.013734f, 0.002006f, -0.007572f, 0.009672f, -0.003910f, -0.000569f, 0.007547f, -0.007476f, -0.002308f, -0.004080f, -0.003002f, 0.005884f, 0.003825f, 0.002921f, 0.012768f, -0.004090f, -0.004345f, 0.017400f, 0.003328f, -0.011518f, -0.026423f, -0.001444f, -0.034342f, 0.005912f, 0.003060f, 0.016799f, -0.013715f, -0.003276f, 0.008908f, 0.007415f, 0.009799f, -0.023238f, 0.032867f, 0.023315f, 0.004296f, - 0.017240f, -0.007769f, -0.033103f, 0.007818f, -0.013935f, -0.015506f, 0.015611f, 0.038093f, 0.006677f, -0.010505f, -0.013801f, -0.030553f, 0.000078f, 0.001424f, 0.046997f, -0.018490f, -0.000721f, 0.001410f, -0.001410f, -0.028301f, -0.031920f, 0.025286f, 0.001016f, 0.014372f, -0.004085f, -0.036173f, -0.020810f, 0.002892f, -0.006025f, -0.007649f, -0.010302f, 0.023679f, -0.004970f, 0.015383f, -0.016562f, 0.032982f, -0.038913f, 0.019283f, 0.020232f, 0.012052f, 0.010718f, 0.009766f, 0.030852f, 0.015836f, -0.002196f, 0.006578f, 0.000285f, 0.030448f, 0.045799f, -0.005275f, 0.003703f, -0.013445f, 0.019195f, 0.030724f, -0.020963f, 0.006457f, -0.052893f, 0.034606f, 0.035797f, 0.023850f, 0.033309f, -0.015157f, -0.026475f, -0.001906f, -0.003783f, -0.007844f, -0.005495f, -0.015921f, -0.010985f, -0.005887f, -0.001311f, -0.008905f, 0.005430f, 0.009728f, 0.003880f, -0.014961f, 0.003097f, -0.008312f, -0.008630f, -0.005526f, 0.006364f, 0.005760f, -0.002487f, -0.003726f, -0.001168f, -0.002597f, 0.001771f, -0.014477f, 0.004986f, 0.002095f, 0.009552f, 0.002095f, -0.000439f, -0.000423f, 0.002252f, 0.008202f, - 0.003039f, -0.007494f, 0.006192f, 0.000005f, 0.001089f, -0.038496f, -0.005730f, -0.049244f, -0.025313f, 0.019397f, -0.020204f, -0.043793f, 0.004034f, -0.023609f, 0.001052f, 0.000864f, -0.028134f, -0.026691f, 0.012039f, 0.025807f, 0.007745f, -0.029977f, 0.014309f, -0.033721f, -0.011868f, -0.012414f, 0.010520f, -0.013848f, -0.006360f, 0.016228f, 0.002730f, -0.011088f, -0.024058f, 0.025445f, 0.024615f, 0.032062f, 0.004142f, -0.003550f, 0.001091f, 0.010286f, -0.002467f, 0.013159f, -0.014504f, 0.017298f, -0.006849f, 0.019924f, 0.015919f, 0.012035f, -0.005832f, 0.000846f, -0.031019f, 0.010561f, -0.007847f, 0.023315f, 0.004187f, -0.054130f, 0.008267f, 0.026710f, 0.035850f, -0.020633f, -0.028267f, 0.033787f, 0.015275f, 0.023760f, -0.042350f, 0.020930f, 0.052890f, 0.055788f, 0.003492f, 0.001343f, 0.031676f, -0.021947f, -0.029329f, 0.018767f, -0.032467f, 0.012184f, -0.015156f, -0.012736f, -0.007223f, -0.069783f, -0.040373f, -0.033978f, 0.025009f, 0.009530f, 0.006981f, -0.024781f, -0.010158f, -0.018719f, -0.003620f, -0.010050f, 0.027333f, 0.006527f, -0.010979f, -0.024341f, -0.005503f, 0.015781f, - -0.002600f, -0.006724f, 0.004758f, 0.016518f, -0.005965f, -0.009744f, -0.004767f, -0.003609f, -0.001216f, 0.012847f, 0.012801f, 0.011215f, -0.011422f, 0.014696f, -0.000850f, 0.004205f, 0.016684f, -0.007539f, -0.007684f, 0.014645f, 0.026167f, -0.006142f, -0.008699f, -0.004182f, 0.003040f, -0.004736f, -0.018232f, 0.002924f, 0.013091f, 0.003566f, -0.018368f, -0.017463f, 0.008094f, 0.005918f, -0.001123f, -0.001122f, -0.003340f, -0.012990f, -0.008856f, -0.029033f, -0.055661f, 0.042555f, 0.004484f, 0.014280f, -0.007194f, 0.030135f, 0.000821f, -0.025724f, 0.019916f, 0.008087f, -0.009085f, -0.015529f, -0.012143f, 0.003825f, 0.007288f, 0.026695f, -0.015181f, 0.020949f, 0.006697f, 0.038069f, -0.054606f, -0.014665f, -0.008633f, 0.007033f, 0.022330f, 0.032361f, 0.007377f, -0.026282f, 0.017776f, 0.025462f, 0.021463f, -0.005992f, 0.007509f, 0.001546f, -0.008942f, -0.003670f, 0.001584f, 0.008244f, 0.002998f, 0.018830f, 0.003138f, -0.023741f, 0.022220f, -0.024615f, -0.031399f, 0.004893f, 0.022762f, -0.011046f, -0.008120f, 0.008269f, 0.011129f, 0.019600f, -0.011151f, 0.009299f, 0.044286f, -0.017647f, - -0.046980f, -0.060891f, -0.030739f, -0.041253f, 0.018784f, 0.035827f, 0.022947f, 0.008769f, 0.021588f, 0.012678f, 0.023856f, -0.020371f, 0.026961f, 0.014002f, 0.010965f, 0.028069f, 0.036497f, -0.011325f, -0.008095f, 0.009982f, -0.002350f, 0.032831f, 0.012753f, -0.004990f, 0.005579f, -0.040004f, -0.027950f, 0.005571f, -0.001535f, 0.007143f, 0.002744f, 0.008439f, -0.007439f, 0.021125f, -0.011103f, -0.012849f, -0.012396f, -0.021022f, -0.007594f, -0.004132f, 0.006961f, 0.005654f, -0.003106f, -0.018048f, -0.001007f, 0.006026f, 0.002063f, -0.007218f, 0.004331f, 0.000295f, 0.007039f, -0.007522f, 0.003161f, 0.001505f, 0.008482f, -0.003976f, 0.013027f, -0.007976f, -0.009194f, 0.002808f, -0.001517f, -0.006705f, 0.002207f, 0.009032f, 0.000827f, -0.001309f, 0.055798f, 0.005323f, 0.008814f, -0.011626f, 0.020313f, -0.063798f, -0.028066f, -0.043619f, -0.044889f, 0.017802f, -0.039162f, 0.038524f, 0.043981f, 0.001882f, 0.009597f, -0.006802f, 0.008112f, -0.041728f, 0.017212f, 0.046097f, -0.026205f, -0.053706f, 0.007178f, -0.020217f, -0.017041f, -0.052382f, 0.009144f, 0.019200f, -0.000129f, -0.007128f, - 0.016914f, -0.029880f, -0.004898f, 0.019405f, -0.010637f, -0.026481f, 0.003278f, -0.013225f, 0.027429f, -0.018136f, -0.009987f, 0.025607f, 0.022302f, 0.047295f, 0.006340f, 0.011414f, -0.004279f, 0.012697f, 0.016923f, 0.029221f, -0.008351f, -0.000960f, -0.018091f, 0.038555f, -0.048520f, 0.052208f, 0.001935f, -0.020808f, 0.024537f, -0.018971f, -0.013896f, 0.048023f, -0.069242f, 0.011316f, -0.014549f, 0.013572f, -0.026815f, 0.012962f, 0.027577f, -0.014230f, -0.002463f, -0.007305f, -0.011402f, -0.006145f, 0.051177f, -0.057946f, -0.019714f, 0.097453f, -0.036599f, -0.042991f, 0.042263f, 0.025253f, 0.028239f, -0.024520f, 0.002028f, -0.024371f, -0.013565f, -0.003810f, -0.027762f, 0.006119f, 0.003857f, -0.007240f, 0.010132f, 0.008993f, -0.012520f, -0.023676f, -0.005990f, -0.001972f, 0.009423f, -0.020891f, -0.014570f, 0.000578f, -0.001980f, 0.005305f, 0.013168f, 0.031056f, -0.013994f, -0.000674f, -0.003273f, -0.003211f, 0.009050f, 0.003539f, -0.018325f, -0.013889f, 0.014961f, -0.011979f, 0.005741f, 0.003870f, -0.011096f, 0.004326f, -0.002430f, -0.018826f, -0.015322f, 0.009309f, 0.006242f, -0.002804f, - -0.000183f, 0.011846f, -0.027691f, -0.042851f, 0.004192f, -0.016276f, -0.014468f, -0.024147f, -0.030158f, 0.038020f, 0.016415f, 0.002363f, 0.017903f, 0.045038f, 0.026685f, -0.003153f, 0.009238f, 0.030255f, 0.038726f, -0.034409f, 0.016075f, 0.032322f, 0.014131f, 0.011800f, 0.044716f, 0.021465f, 0.009359f, -0.001432f, 0.020141f, -0.002319f, 0.022786f, 0.018726f, 0.010323f, -0.020996f, 0.039557f, -0.032563f, -0.004029f, 0.049397f, 0.048953f, -0.011726f, -0.043336f, 0.016248f, -0.000630f, 0.042365f, 0.073081f, 0.016242f, -0.011160f, 0.005085f, -0.041885f, -0.005034f, -0.011048f, -0.009095f, 0.000869f, 0.037194f, -0.015970f, 0.016320f, 0.044883f, 0.007530f, -0.041469f, 0.027367f, -0.002096f, 0.017374f, 0.042172f, 0.059263f, -0.016721f, -0.015834f, -0.005069f, -0.047115f, -0.068824f, 0.001787f, -0.031290f, -0.005165f, -0.037939f, -0.003995f, 0.001242f, 0.005074f, 0.028196f, -0.000889f, -0.019603f, -0.032719f, 0.023856f, -0.010161f, 0.020414f, 0.000657f, 0.038009f, 0.013994f, 0.014038f, 0.000046f, -0.011797f, 0.021245f, -0.016267f, -0.018955f, -0.005670f, -0.014276f, -0.005479f, 0.000991f, - 0.001522f, -0.005190f, 0.005859f, 0.008279f, 0.000708f, -0.002251f, 0.011075f, -0.009604f, -0.013466f, 0.008145f, 0.009754f, 0.001851f, -0.011641f, -0.014113f, -0.008164f, 0.011196f, 0.015206f, 0.001895f, -0.002132f, 0.016732f, 0.004622f, 0.007932f, 0.006995f, 0.011935f, 0.003403f, -0.002317f, -0.008877f, 0.004736f, 0.009598f, -0.019825f, 0.046452f, -0.087169f, 0.047944f, -0.036668f, -0.086077f, -0.025398f, -0.021733f, -0.002970f, -0.019896f, 0.010525f, -0.023840f, -0.053202f, -0.032237f, -0.015842f, -0.004906f, 0.006207f, -0.021981f, 0.021550f, 0.041724f, 0.001657f, -0.002657f, 0.011559f, 0.002537f, -0.007676f, -0.015529f, -0.008624f, 0.011276f, 0.012539f, -0.003727f, 0.011933f, 0.051285f, 0.014254f, -0.015014f, -0.050765f, -0.008139f, 0.036090f, -0.043792f, -0.020452f, -0.016683f, 0.000666f, -0.003346f, 0.027761f, -0.009113f, 0.003453f, 0.038025f, 0.013718f, 0.042185f, -0.005790f, -0.019900f, -0.008996f, -0.010806f, -0.010787f, 0.020363f, 0.002359f, 0.013779f, 0.025861f, -0.045183f, 0.006797f, -0.011938f, -0.027979f, -0.021193f, 0.044322f, 0.031850f, 0.001773f, -0.021528f, 0.009100f, - 0.018691f, 0.002110f, 0.012952f, -0.030174f, -0.074953f, -0.034565f, -0.027406f, 0.027655f, 0.002847f, -0.003263f, -0.012602f, 0.005581f, -0.008387f, -0.023499f, -0.024503f, -0.012603f, 0.030438f, 0.023150f, -0.033795f, -0.042117f, -0.016454f, 0.003191f, 0.025804f, 0.010651f, -0.008093f, -0.011112f, -0.008598f, 0.006248f, -0.018663f, 0.003070f, -0.012701f, 0.001354f, 0.019529f, 0.020980f, 0.005630f, -0.010426f, 0.006831f, 0.015211f, -0.000333f, -0.002906f, 0.011217f, -0.014896f, 0.021344f, 0.019297f, 0.007568f, -0.000031f, -0.000684f, -0.001806f, 0.017951f, -0.006629f, -0.009159f, -0.010359f, -0.015007f, -0.014593f, 0.005038f, -0.005159f, 0.006695f, -0.003924f, 0.003473f, 0.011572f, -0.005237f, -0.010424f, -0.015432f, -0.003972f, 0.007569f, -0.010772f, 0.025179f, -0.034404f, 0.041394f, -0.003287f, -0.065431f, 0.013394f, -0.031535f, -0.006494f, -0.004717f, -0.007702f, -0.041645f, 0.013160f, 0.002212f, 0.033080f, -0.071216f, 0.001210f, 0.035175f, 0.004290f, -0.016860f, -0.035995f, -0.002751f, 0.020746f, 0.030817f, -0.025476f, -0.009045f, 0.016677f, 0.035220f, 0.032169f, -0.030909f, -0.006250f, - -0.050151f, 0.023490f, 0.025589f, 0.015866f, -0.014221f, -0.003853f, -0.013569f, -0.005264f, -0.016641f, 0.004914f, 0.036754f, -0.013504f, -0.014314f, -0.012497f, -0.020658f, 0.041676f, 0.035883f, -0.003413f, 0.050483f, -0.002204f, 0.018032f, -0.044373f, 0.036639f, 0.016300f, -0.049850f, -0.016090f, 0.057392f, 0.023815f, 0.015661f, 0.011213f, -0.026787f, -0.021152f, -0.028730f, 0.049776f, -0.025558f, 0.038467f, 0.039891f, -0.045006f, 0.104454f, -0.022270f, 0.064847f, 0.002896f, -0.014485f, -0.027870f, 0.048764f, 0.018827f, -0.037540f, -0.022977f, -0.080862f, 0.032476f, -0.010959f, 0.037334f, -0.049716f, 0.055819f, -0.042566f, 0.016515f, -0.016400f, -0.012734f, 0.036854f, 0.003487f, 0.003589f, 0.020482f, 0.014479f, -0.009340f, 0.024240f, -0.002915f, 0.007235f, -0.016758f, 0.003451f, -0.002271f, -0.010457f, -0.016846f, 0.000783f, -0.018701f, 0.009154f, 0.008088f, -0.004199f, 0.016210f, -0.005627f, -0.009712f, -0.013395f, 0.009562f, 0.002180f, -0.002239f, -0.026644f, 0.012183f, -0.005137f, -0.032319f, -0.010070f, 0.009301f, -0.008940f, -0.016716f, 0.011439f, -0.009069f, 0.009491f, -0.017012f, - 0.008284f, -0.017336f, -0.002760f, -0.002597f, 0.009668f, -0.004077f, 0.001984f, -0.005622f, -0.005710f, 0.025015f, 0.042908f, 0.003558f, -0.035981f, 0.017433f, -0.069487f, -0.018428f, -0.063124f, -0.087315f, 0.003002f, -0.033522f, 0.011260f, -0.006402f, -0.013678f, -0.033164f, -0.022848f, 0.019628f, 0.052633f, -0.043753f, -0.009387f, -0.075444f, -0.066295f, 0.018381f, 0.026601f, -0.041384f, -0.043395f, 0.002827f, 0.009646f, -0.070082f, 0.003766f, 0.001600f, 0.036500f, -0.031404f, 0.001410f, 0.030333f, -0.019677f, -0.036440f, -0.040853f, -0.019663f, -0.037254f, -0.030461f, -0.038893f, 0.054569f, -0.069237f, -0.042854f, 0.062611f, -0.001929f, 0.017656f, -0.052339f, -0.009165f, -0.014875f, 0.001364f, 0.088332f, -0.012537f, -0.001675f, 0.008689f, 0.041410f, 0.000928f, -0.039047f, -0.017368f, -0.028146f, 0.009458f, 0.105660f, 0.020490f, -0.037194f, 0.079542f, 0.057542f, -0.051161f, 0.059344f, 0.097287f, 0.000852f, -0.038068f, 0.066266f, -0.011594f, 0.069711f, 0.062726f, 0.005280f, -0.003362f, -0.018723f, 0.043754f, 0.035657f, 0.020195f, -0.037219f, -0.012504f, -0.024031f, 0.055425f, -0.007051f, - -0.038341f, -0.018615f, -0.038551f, -0.016541f, 0.037848f, 0.004305f, -0.020215f, -0.006826f, -0.024714f, -0.004134f, 0.033791f, -0.016411f, 0.008148f, -0.003419f, -0.032662f, 0.035117f, 0.004013f, 0.014087f, 0.016801f, -0.022652f, 0.006752f, 0.032266f, -0.006025f, 0.001272f, -0.017584f, -0.000072f, 0.002376f, -0.010629f, -0.010043f, 0.006098f, 0.023711f, -0.015398f, 0.009215f, -0.020560f, -0.010078f, 0.001219f, -0.007121f, 0.023572f, -0.009349f, 0.001010f, 0.001971f, 0.008605f, 0.000488f, -0.011267f, 0.049117f, -0.124808f, -0.075416f, -0.081011f, -0.027864f, -0.053879f, 0.067131f, 0.025705f, 0.055044f, -0.007903f, -0.106649f, -0.015956f, 0.017183f, 0.073612f, -0.003113f, 0.017356f, 0.067245f, -0.024836f, -0.048797f, 0.005339f, -0.003316f, 0.085440f, 0.055318f, -0.027411f, -0.038647f, 0.090756f, 0.006341f, 0.045609f, 0.021797f, 0.084704f, 0.072841f, 0.056553f, 0.005953f, -0.047214f, -0.025898f, -0.035978f, 0.070488f, -0.033455f, -0.048125f, -0.025897f, 0.002609f, -0.001639f, 0.031219f, -0.030251f, 0.011268f, -0.142854f, 0.016155f, 0.022575f, 0.023641f, -0.059563f, -0.055424f, 0.017440f, - 0.050563f, -0.061496f, 0.024199f, -0.034830f, -0.027268f, -0.041192f, -0.003584f, 0.044351f, -0.029352f, 0.048701f, -0.012150f, 0.019288f, -0.089121f, -0.057060f, -0.002081f, 0.047797f, 0.033347f, -0.064582f, -0.069822f, -0.032133f, 0.006773f, 0.074613f, 0.030777f, -0.006761f, -0.051932f, -0.059776f, -0.020239f, 0.012965f, 0.052740f, -0.004222f, 0.017652f, 0.035590f, -0.013204f, 0.013127f, -0.034549f, 0.022016f, 0.012667f, -0.021086f, -0.017608f, 0.002361f, 0.027276f, -0.025439f, -0.000715f, 0.043425f, 0.007070f, 0.006767f, 0.000353f, -0.011745f, -0.028847f, 0.007994f, -0.032067f, 0.038613f, 0.033035f, 0.025364f, 0.003327f, -0.002474f, -0.037592f, 0.024598f, -0.007269f, 0.044988f, -0.010340f, -0.049578f, -0.030492f, -0.005604f, 0.049292f, 0.014399f, -0.010028f, -0.004327f, -0.038891f, -0.018310f, -0.015399f, -0.001673f, 0.022547f, 0.021983f, -0.039210f, -0.021160f, -0.023828f, -0.023021f, -0.008154f, 0.008222f, -0.002882f, -0.012770f, -0.023707f, -0.024005f, 0.003782f, -0.000475f, -0.012116f, -0.011905f, 0.022126f, 0.161650f, 0.016336f, -0.086391f, -0.194186f, -0.017673f, 0.115081f, 0.028865f, - 0.050180f, -0.005398f, 0.069983f, -0.011881f, 0.030744f, -0.016342f, 0.039638f, 0.055876f, 0.029807f, -0.027237f, -0.064138f, 0.075338f, 0.085586f, -0.019358f, -0.084837f, -0.051691f, 0.008822f, 0.049298f, 0.016366f, 0.017631f, 0.003097f, 0.012558f, 0.005623f, 0.012448f, -0.016718f, -0.098265f, -0.000621f, 0.060718f, 0.046651f, -0.019342f, 0.004671f, 0.037383f, 0.081805f, 0.050293f, 0.040080f, -0.048224f, -0.033760f, -0.008213f, -0.008955f, -0.073177f, 0.051789f, 0.030839f, 0.053804f, 0.110104f, -0.056665f, -0.036202f, -0.005133f, -0.030390f, -0.026489f, -0.047960f, 0.085245f, -0.051582f, -0.055853f, -0.057200f, -0.020059f, 0.109168f, 0.027820f, 0.042675f, -0.002386f, -0.008901f, -0.025272f, 0.068007f, 0.054691f, -0.027773f, -0.063683f, 0.022319f, -0.008378f, 0.026586f, -0.059709f, -0.022879f, -0.034751f, -0.044837f, 0.027516f, 0.045388f, 0.008370f, 0.002162f, -0.024069f, 0.013843f, -0.009428f, 0.042249f, 0.003316f, -0.013834f, -0.008302f, 0.014427f, 0.026789f, 0.030024f, -0.017154f, 0.018864f, 0.009562f, 0.010063f, -0.001374f, -0.030840f, -0.004125f, -0.024897f, -0.010166f, 0.002098f, - 0.004267f, 0.009260f, 0.009121f, 0.011194f, 0.027397f, 0.041166f, 0.036247f, -0.002574f, -0.008916f, 0.005387f, -0.017737f, 0.023078f, -0.024933f, -0.002188f, 0.020307f, -0.000387f, -0.004910f, -0.039670f, 0.020305f, -0.039563f, 0.013536f, -0.008195f, 0.006483f, -0.002644f, 0.004712f, -0.001009f, -0.025021f, 0.014976f, 0.012563f, -0.001191f, 0.008543f, -0.000525f, 0.007360f, -0.002417f, -0.006374f, -0.000321f, -0.001872f, 0.002314f, -0.001011f, 0.002371f, 0.001287f, -0.007618f, -0.003264f, -0.000784f, 0.006026f, 0.002501f, -0.001571f, -0.004100f, -0.002769f, -0.047289f, 0.004766f, 0.123336f, 0.096071f, 0.014282f, 0.007878f, -0.068009f, -0.129141f, -0.114176f, -0.054973f, 0.092430f, 0.102414f, 0.105057f, 0.059142f, -0.016204f, -0.066802f, -0.062916f, -0.040340f, 0.025907f, 0.041798f, 0.071664f, 0.007115f, -0.055763f, -0.046124f, -0.010887f, -0.046216f, -0.022439f, 0.010639f, 0.074229f, 0.107344f, 0.068567f, 0.033453f, 0.029622f, -0.066601f, -0.008657f, -0.134318f, -0.151314f, -0.093947f, -0.046161f, -0.040981f, 0.069665f, 0.110647f, 0.121495f, 0.110850f, 0.094972f, 0.040003f, 0.005715f, - -0.045874f, -0.013461f, -0.074116f, -0.132749f, -0.010605f, 0.011561f, 0.013152f, 0.043083f, 0.026437f, 0.043718f, -0.147542f, -0.081528f, -0.052566f, -0.086382f, -0.036078f, 0.062697f, -0.037577f, 0.041991f, 0.006156f, -0.039745f, 0.031748f, -0.033329f, 0.035657f, 0.040552f, -0.031226f, -0.064165f, -0.130727f, -0.127623f, -0.094523f, 0.045705f, 0.016546f, -0.018855f, 0.024668f, 0.006155f, 0.000631f, -0.061282f, -0.042407f, -0.113436f, -0.037238f, -0.042256f, -0.004388f, 0.081741f, 0.088302f, 0.012212f, 0.045660f, -0.027998f, -0.060989f, -0.110374f, -0.072151f, -0.068451f, -0.002259f, 0.032849f, 0.019292f, 0.026647f, 0.029520f, -0.020896f, 0.017933f, -0.019747f, 0.018601f, 0.003958f, -0.000575f, -0.004675f, 0.015382f, 0.012842f, 0.029266f, -0.007306f, -0.006790f, 0.026671f, 0.021678f, -0.222005f, -0.113538f, -0.059099f, 0.074740f, 0.017355f, 0.284895f, 0.292032f, 0.220130f, 0.284724f, 0.298311f, 0.271074f, 0.194573f, 0.176653f, 0.195978f, 0.078062f, -0.011625f, -0.121195f, -0.187389f, -0.258915f, -0.251603f, -0.375001f, -0.227579f, -0.147974f, -0.117591f, -0.167149f, -0.087988f, -0.024030f, - -0.125331f, -0.097221f, -0.102781f, -0.023132f, -0.061728f, -0.021874f, -0.083570f, -0.042323f, 0.049795f, 0.051700f, 0.015396f, -0.015307f, 0.054266f, 0.044094f, -0.126445f, 0.026417f, 0.085455f, 0.187295f, 0.137254f, 0.178329f, 0.073060f, 0.070961f, 0.296819f, 0.160900f, 0.303739f, 0.101891f, 0.284868f, 0.196885f, 0.248702f, 0.335678f, 0.317752f, 0.257890f, 0.289349f, 0.321693f, 0.349847f, 0.299040f, 0.344858f, 0.235539f, 0.349802f, 0.281129f, 0.249187f, 0.265982f, 0.145043f, 0.297753f, 0.143904f, 0.087613f, -0.109504f, 0.007474f, -0.161737f, -0.181434f, -0.277971f, -0.327811f, -0.504394f, -0.492155f, -0.465267f, -0.434693f, -0.410138f, -0.346207f, -0.422872f, -0.520031f, -0.513311f, -0.425356f, -0.450734f, -0.423410f, -0.425356f, -0.362574f, -0.395367f, -0.378614f, -0.282872f, -0.311882f, -0.240079f, -0.223702f, -0.206735f, -0.131344f, -0.170347f, -0.038450f, -0.063446f, 0.029524f, 0.039238f, 0.124291f, 0.183077f, 0.192472f, 0.221628f, 0.197403f, 0.296697f, 0.336968f, 0.333264f, 0.385802f, 0.402268f, 0.399224f, 0.303875f, 0.271955f, 0.238068f, 0.221390f, 0.214889f, 0.221298f, - 0.207331f, 0.158562f, 0.101663f, 0.116242f, 0.089243f, 0.070168f, 0.046279f, -0.035160f, -0.046788f, -0.048401f, -0.060196f, -0.072783f, -0.082835f, -0.057441f, -0.064093f, -0.050362f, -0.052182f, -0.044364f, -0.032377f, -0.038020f, -0.031643f, -0.029837f, -0.037579f, -0.033576f, -0.038148f, -0.028839f, -0.023912f, -0.031544f, -0.036839f, -0.012652f, -0.003020f, -0.002551f, -0.000954f, 0.002805f, 0.000016f, 0.001218f}, - {-0.014319f, -0.028270f, -0.004980f, 0.000408f, -0.006512f, -0.013286f, -0.004421f, 0.009792f, -0.015688f, -0.008620f, -0.005211f, -0.003035f, 0.004949f, -0.002204f, 0.005513f, 0.002567f, 0.004826f, -0.000507f, 0.005980f, -0.005204f, 0.000953f, -0.002264f, 0.001112f, 0.015142f, -0.003239f, -0.000895f, -0.007512f, 0.009374f, 0.005774f, 0.004529f, 0.011629f, -0.005921f, -0.003408f, 0.004022f, 0.010411f, -0.002777f, -0.000717f, -0.008384f, -0.009248f, -0.006133f, 0.006568f, -0.008152f, -0.007044f, -0.000847f, 0.009365f, -0.012660f, -0.002720f, -0.010570f, -0.005165f, -0.002995f, 0.001443f, -0.000914f, -0.007623f, 0.009795f, 0.001648f, 0.008820f, -0.003564f, -0.002181f, -0.010949f, -0.000193f, -0.003849f, -0.004078f, 0.006288f, 0.003588f, -0.001971f, 0.003438f, 0.006961f, -0.001939f, 0.002985f, -0.004947f, -0.002894f, -0.001161f, -0.004721f, 0.004231f, 0.001447f, 0.003234f, -0.007481f, 0.005413f, 0.003080f, 0.012149f, 0.007189f, -0.001931f, -0.007696f, -0.000576f, 0.001669f, 0.001008f, 0.002385f, -0.000303f, -0.002610f, 0.000158f, -0.001775f, 0.000068f, -0.002146f, 0.000818f, -0.002087f, -0.000084f, - 0.002328f, 0.000842f, 0.001201f, -0.001435f, -0.001049f, 0.001161f, 0.001601f, 0.000785f, -0.000238f, -0.023263f, -0.008386f, 0.006733f, -0.006188f, -0.002742f, -0.002632f, 0.003192f, -0.001212f, -0.006113f, 0.009673f, 0.008705f, 0.002871f, -0.001058f, 0.004470f, -0.011926f, -0.001776f, -0.011785f, -0.005978f, 0.008748f, -0.001480f, 0.001587f, -0.001218f, -0.001323f, 0.000173f, 0.018269f, 0.016672f, 0.007490f, 0.008889f, 0.010597f, -0.002063f, -0.001184f, -0.003662f, 0.009354f, -0.000932f, -0.003505f, 0.002597f, -0.005399f, 0.003704f, 0.006742f, -0.003453f, 0.007596f, 0.008524f, 0.016706f, -0.006546f, -0.007835f, 0.007119f, -0.004278f, 0.000218f, 0.003545f, -0.009714f, 0.000614f, -0.005092f, -0.005656f, 0.012826f, 0.007580f, 0.009227f, -0.005255f, -0.006990f, 0.004926f, -0.008134f, 0.005728f, 0.024770f, 0.001430f, 0.001684f, 0.005598f, 0.002404f, 0.002314f, 0.014093f, -0.007523f, -0.001931f, 0.002617f, 0.001825f, -0.007002f, -0.005179f, -0.007148f, -0.003422f, -0.002598f, 0.006472f, -0.001081f, 0.006501f, 0.006701f, -0.006716f, -0.007147f, -0.001862f, 0.004548f, 0.006269f, -0.007495f, - -0.001476f, -0.002213f, -0.005179f, -0.000609f, -0.004907f, 0.001294f, -0.000339f, 0.002635f, -0.001509f, 0.001023f, -0.001912f, -0.000464f, -0.001472f, -0.006812f, 0.007375f, 0.011862f, -0.005694f, 0.005866f, 0.018692f, 0.006227f, 0.004280f, -0.013095f, 0.010834f, 0.002822f, -0.016817f, 0.007105f, -0.004719f, -0.010126f, 0.004070f, -0.001433f, 0.003922f, 0.009743f, -0.010263f, -0.010814f, -0.004797f, 0.014635f, 0.000414f, 0.007248f, 0.015186f, -0.022613f, -0.018212f, 0.002933f, 0.011130f, -0.008192f, 0.000724f, 0.015046f, 0.003892f, -0.001976f, -0.004528f, 0.018011f, 0.002215f, -0.004419f, 0.002533f, -0.016392f, 0.001869f, -0.009052f, 0.008346f, 0.001433f, 0.008865f, -0.004484f, -0.002209f, 0.003978f, 0.000279f, 0.001140f, 0.000523f, 0.008473f, 0.006853f, -0.009345f, 0.005351f, 0.007497f, -0.012782f, 0.001502f, -0.005753f, 0.002380f, -0.002921f, -0.009913f, 0.000174f, 0.008506f, 0.007425f, 0.016433f, -0.010178f, 0.012720f, -0.008412f, -0.001716f, 0.007572f, -0.008268f, -0.012277f, -0.004464f, 0.000598f, -0.000796f, -0.000611f, -0.001348f, 0.002454f, 0.005226f, -0.007133f, -0.000111f, - 0.003424f, -0.000676f, 0.002943f, -0.005879f, -0.003345f, -0.002342f, -0.004289f, 0.001247f, -0.000913f, -0.003393f, 0.001872f, 0.001898f, -0.002806f, -0.004344f, -0.000208f, -0.001024f, 0.004483f, -0.000240f, -0.000708f, 0.000800f, 0.000980f, -0.000795f, -0.001315f, 0.002984f, 0.001020f, -0.002416f, -0.001191f, -0.001854f, 0.000293f, 0.037582f, 0.016848f, 0.022766f, -0.001843f, -0.006299f, -0.008210f, -0.008235f, 0.004478f, -0.006917f, 0.010481f, -0.001192f, 0.014383f, 0.000866f, 0.007608f, 0.009440f, 0.007300f, 0.006246f, 0.008277f, -0.027925f, -0.008257f, -0.002631f, -0.005887f, -0.005173f, -0.008791f, -0.019895f, 0.000893f, 0.013618f, -0.008389f, 0.008173f, -0.006738f, -0.009934f, -0.007493f, 0.001122f, -0.006325f, -0.002358f, -0.006486f, -0.000462f, 0.016432f, 0.000865f, 0.007385f, 0.010376f, 0.013509f, -0.006360f, 0.003163f, -0.003035f, -0.010429f, 0.011828f, -0.006628f, -0.000497f, -0.010323f, 0.007531f, -0.000104f, 0.000158f, -0.002852f, -0.004820f, 0.003491f, 0.010564f, -0.004443f, 0.005945f, 0.005641f, 0.004730f, 0.018186f, -0.018322f, -0.007744f, 0.000425f, -0.010087f, -0.013082f, - -0.005190f, -0.016008f, 0.002389f, 0.018723f, -0.012941f, -0.006192f, -0.014778f, 0.000930f, -0.004661f, -0.007089f, -0.017324f, 0.010149f, 0.013273f, 0.005230f, 0.009271f, -0.004743f, 0.001481f, -0.003524f, 0.003836f, 0.000132f, 0.009175f, -0.002412f, 0.003940f, -0.000221f, -0.002369f, 0.003165f, 0.002182f, 0.004175f, 0.003516f, -0.000641f, 0.000828f, 0.002264f, 0.000914f, 0.001757f, -0.000172f, -0.001801f, -0.003339f, 0.001607f, 0.000846f, -0.002319f, 0.001616f, 0.001760f, -0.000584f, 0.000739f, 0.002161f, -0.000717f, -0.001998f, -0.000725f, 0.011680f, 0.016655f, -0.009228f, 0.008657f, -0.007532f, -0.003680f, -0.002989f, -0.020692f, 0.015024f, -0.004407f, -0.002199f, 0.023811f, 0.014833f, 0.015903f, -0.006478f, 0.000575f, 0.002848f, -0.003709f, 0.005310f, -0.012197f, -0.000319f, -0.008358f, 0.009738f, -0.009501f, -0.006516f, -0.001034f, 0.001663f, -0.011724f, 0.002253f, 0.001196f, 0.015349f, 0.000066f, -0.020967f, 0.012039f, 0.011325f, 0.016085f, -0.002560f, 0.004015f, -0.011595f, -0.008793f, -0.003659f, -0.008538f, 0.003336f, 0.002171f, -0.003164f, -0.001323f, 0.008776f, 0.013618f, - -0.018708f, -0.004092f, -0.000007f, -0.007721f, -0.007991f, 0.012314f, -0.009952f, 0.004618f, -0.009767f, -0.012991f, -0.009633f, -0.006443f, 0.004472f, 0.001768f, 0.023141f, -0.003965f, -0.006209f, 0.006850f, -0.006949f, -0.002081f, -0.006169f, 0.006402f, -0.005708f, 0.008265f, -0.004155f, -0.003873f, 0.005717f, 0.013852f, 0.003866f, -0.013096f, 0.000080f, -0.006477f, -0.013232f, 0.003710f, 0.009371f, -0.003158f, 0.002171f, 0.003220f, 0.000465f, -0.001470f, 0.004826f, 0.000053f, -0.005362f, -0.000004f, -0.001929f, -0.001046f, -0.002786f, 0.004356f, -0.001037f, -0.003657f, -0.003866f, 0.000495f, 0.004074f, -0.001870f, -0.000272f, -0.005471f, 0.000512f, 0.000928f, 0.001837f, -0.001030f, -0.004588f, -0.002440f, 0.004036f, -0.001694f, -0.004952f, 0.001955f, -0.028745f, 0.027649f, 0.014841f, -0.016497f, -0.016637f, 0.006821f, 0.021949f, -0.000318f, 0.006439f, 0.025560f, 0.008572f, 0.007695f, -0.004319f, 0.013322f, 0.012176f, 0.014033f, -0.025300f, -0.015540f, -0.015349f, 0.012120f, 0.010458f, 0.013330f, 0.000639f, -0.015444f, 0.006351f, -0.002343f, 0.006989f, -0.022201f, 0.008581f, 0.013450f, - -0.010412f, 0.005817f, 0.010885f, 0.003048f, -0.000323f, 0.002333f, -0.003487f, 0.019436f, 0.013211f, 0.010399f, 0.000393f, 0.006754f, 0.015005f, -0.013392f, -0.007201f, 0.000661f, 0.019840f, 0.012691f, 0.007811f, -0.014943f, 0.000558f, 0.010157f, 0.011852f, -0.004169f, 0.003679f, 0.011570f, 0.014335f, 0.004523f, 0.013256f, 0.005258f, -0.001472f, -0.012227f, -0.000068f, -0.020363f, -0.008331f, -0.009769f, 0.001717f, 0.006714f, -0.011783f, -0.004779f, -0.021524f, 0.009368f, -0.005967f, -0.000157f, 0.011441f, 0.016658f, 0.020144f, 0.002500f, -0.002078f, -0.012489f, -0.003715f, 0.006379f, 0.006894f, -0.013251f, 0.004179f, -0.005963f, 0.004876f, 0.000889f, -0.004456f, 0.000085f, 0.002386f, -0.004200f, 0.001900f, -0.001109f, -0.004996f, -0.002577f, -0.003137f, 0.003163f, 0.003876f, -0.000674f, -0.002890f, 0.002082f, -0.002216f, -0.001605f, -0.003881f, -0.000537f, -0.000817f, -0.004541f, 0.003776f, 0.024357f, 0.007637f, -0.004131f, -0.011038f, -0.028862f, -0.013989f, 0.017712f, -0.006184f, -0.026525f, -0.007065f, -0.004186f, 0.004083f, 0.014708f, 0.022457f, -0.001282f, 0.006634f, -0.005103f, - 0.011210f, -0.012481f, -0.013292f, -0.014307f, -0.025452f, 0.013653f, 0.007797f, -0.021256f, 0.000696f, -0.015512f, -0.005893f, 0.013774f, 0.007820f, 0.011248f, -0.003110f, -0.002912f, -0.003612f, 0.024251f, 0.018898f, 0.020014f, -0.009038f, -0.017047f, 0.013559f, -0.002268f, -0.006005f, 0.017250f, 0.003116f, 0.016971f, -0.000490f, 0.009500f, -0.011856f, -0.000597f, 0.008568f, -0.036293f, -0.005429f, 0.001771f, -0.026537f, 0.006919f, -0.006726f, 0.024832f, 0.015871f, -0.015187f, 0.001253f, 0.022671f, -0.002296f, 0.011557f, -0.007556f, 0.015585f, -0.007188f, 0.003084f, -0.005957f, 0.000388f, 0.010960f, -0.014753f, 0.015981f, 0.008169f, 0.009202f, 0.002605f, 0.021222f, -0.008313f, -0.024162f, 0.004192f, 0.016854f, -0.007952f, -0.014983f, -0.010864f, -0.007622f, 0.017370f, 0.000437f, -0.007453f, 0.000787f, 0.000413f, -0.003313f, -0.003338f, 0.001156f, 0.003335f, -0.001876f, -0.002288f, -0.001197f, 0.003713f, -0.001877f, -0.006544f, 0.001898f, -0.007244f, 0.006686f, 0.004286f, -0.000013f, -0.000756f, 0.001839f, -0.002122f, 0.003006f, 0.000267f, 0.002105f, 0.000368f, 0.000979f, 0.007661f, - 0.002761f, -0.004053f, 0.002250f, -0.058507f, -0.012362f, 0.031373f, -0.025322f, -0.009184f, 0.026673f, 0.010039f, -0.008439f, 0.002818f, -0.022057f, 0.019695f, -0.002481f, -0.035581f, 0.002566f, -0.001866f, 0.013470f, 0.013200f, -0.007049f, -0.027871f, -0.011921f, -0.010641f, 0.000614f, -0.014860f, -0.008144f, -0.018949f, -0.005424f, 0.020662f, -0.016941f, -0.008516f, -0.006498f, -0.011028f, -0.011625f, -0.015809f, 0.010827f, 0.002202f, 0.013460f, 0.002357f, -0.009882f, -0.015317f, -0.015100f, -0.003106f, 0.010104f, 0.014879f, -0.005220f, -0.013536f, 0.014261f, 0.005933f, -0.021272f, -0.023727f, -0.048378f, -0.004267f, -0.015432f, -0.009342f, 0.007214f, 0.007375f, 0.004470f, 0.021765f, -0.002229f, -0.010369f, -0.001271f, -0.011175f, 0.024841f, 0.013202f, -0.004782f, 0.013275f, -0.013913f, 0.006974f, 0.005750f, -0.013619f, -0.005949f, -0.012211f, 0.008789f, 0.006171f, -0.022474f, 0.014875f, 0.022824f, -0.001471f, -0.001047f, -0.023034f, -0.008932f, 0.010178f, -0.007115f, 0.006732f, 0.022631f, -0.007534f, 0.005018f, 0.002308f, 0.001806f, -0.007125f, 0.001381f, -0.001137f, -0.009378f, -0.005656f, - -0.000805f, 0.003378f, 0.000604f, 0.002665f, -0.009780f, 0.001199f, -0.005209f, 0.002527f, -0.005636f, -0.005478f, -0.003291f, -0.000306f, 0.001307f, -0.004180f, 0.001365f, 0.002445f, -0.000520f, 0.001038f, 0.004260f, 0.002395f, -0.007745f, -0.005109f, -0.002371f, 0.000870f, 0.002992f, -0.001207f, 0.003035f, 0.010445f, 0.038804f, -0.018110f, 0.014747f, -0.009486f, -0.000091f, 0.022268f, -0.006419f, -0.009885f, -0.005246f, -0.002048f, 0.003914f, 0.015148f, 0.051132f, -0.002790f, 0.003086f, 0.014212f, 0.003312f, 0.000264f, -0.023919f, -0.024863f, 0.003833f, 0.003431f, -0.015639f, -0.007956f, -0.003607f, 0.014196f, -0.006282f, 0.002777f, -0.000326f, 0.006213f, -0.006404f, 0.029881f, 0.016578f, -0.013922f, 0.016418f, 0.014897f, -0.018067f, 0.003184f, 0.007687f, 0.006006f, -0.005029f, -0.006095f, 0.024860f, -0.021746f, 0.009207f, 0.027529f, -0.009597f, 0.003449f, 0.017618f, -0.001899f, 0.015317f, 0.008461f, 0.000217f, 0.008453f, 0.013136f, 0.018126f, 0.011358f, 0.001499f, -0.000694f, -0.012450f, -0.013842f, 0.000546f, 0.001498f, -0.043370f, 0.028304f, -0.006636f, -0.013462f, -0.015058f, - -0.031862f, -0.035924f, -0.023390f, 0.004386f, 0.017748f, -0.006496f, 0.002150f, -0.002884f, 0.017630f, -0.006582f, -0.014369f, 0.008154f, 0.004191f, -0.005950f, 0.002114f, 0.012075f, -0.011728f, 0.002341f, -0.014898f, -0.004957f, -0.006729f, 0.003567f, -0.001807f, 0.007634f, 0.004654f, 0.001623f, -0.002231f, 0.003889f, 0.005117f, -0.000116f, -0.010839f, 0.006029f, -0.000633f, 0.009177f, 0.008648f, 0.004373f, -0.004522f, 0.007951f, 0.001608f, -0.001248f, -0.000413f, 0.000474f, -0.007320f, 0.007977f, -0.000886f, -0.005274f, 0.007514f, 0.015331f, -0.003204f, -0.003268f, 0.007695f, -0.003100f, -0.005668f, -0.002047f, 0.052518f, 0.052781f, -0.001521f, -0.043632f, 0.008505f, 0.008981f, -0.005039f, 0.011484f, 0.006539f, 0.003865f, -0.000524f, -0.007335f, 0.042607f, 0.007942f, -0.006876f, -0.047421f, -0.026713f, 0.011287f, -0.002968f, -0.016436f, -0.028493f, 0.004063f, 0.004812f, 0.007403f, -0.007115f, -0.031128f, -0.033323f, 0.036200f, 0.034160f, 0.010765f, 0.031371f, -0.026725f, 0.003638f, 0.014166f, -0.005665f, -0.016901f, -0.030600f, -0.015016f, 0.005399f, -0.001179f, -0.014364f, 0.014890f, - 0.000270f, 0.014458f, 0.011617f, 0.000925f, -0.032898f, -0.018990f, -0.015476f, -0.002524f, 0.003377f, 0.004482f, -0.005601f, -0.009175f, 0.002258f, 0.005447f, -0.029418f, -0.007273f, 0.004804f, 0.006752f, -0.013360f, -0.036655f, -0.008596f, -0.009110f, 0.027164f, -0.000917f, 0.012222f, -0.012162f, -0.009339f, -0.016329f, -0.018410f, -0.010640f, 0.002967f, -0.001237f, 0.022804f, -0.013412f, 0.003953f, 0.026502f, -0.001842f, 0.013311f, 0.011793f, 0.025751f, 0.005685f, -0.007293f, -0.013119f, -0.011384f, -0.004519f, 0.015629f, 0.002391f, 0.015755f, 0.008295f, -0.001075f, -0.000423f, 0.000915f, 0.001260f, -0.006808f, -0.008732f, 0.000178f, -0.002168f, -0.000684f, 0.002527f, -0.001536f, 0.001978f, -0.009980f, -0.002367f, 0.006386f, -0.000376f, 0.004099f, -0.017364f, -0.001783f, -0.000711f, -0.003225f, 0.003535f, 0.002872f, 0.002212f, 0.003191f, 0.003947f, -0.007963f, 0.009490f, -0.006103f, 0.022876f, -0.011761f, 0.003997f, -0.008860f, 0.001771f, 0.006012f, -0.014396f, -0.009740f, -0.025701f, -0.028417f, -0.018664f, -0.007308f, -0.001302f, 0.000712f, -0.015725f, -0.014569f, -0.029468f, 0.014178f, - -0.029533f, -0.038005f, 0.024549f, -0.022782f, -0.029002f, 0.027017f, 0.005132f, -0.006089f, 0.028976f, 0.016731f, -0.022514f, 0.020825f, -0.057406f, -0.003873f, -0.014753f, -0.006118f, -0.026989f, 0.047253f, 0.022123f, -0.013823f, 0.006936f, 0.014904f, -0.009889f, 0.016453f, 0.000248f, 0.000746f, -0.013499f, 0.015980f, 0.018392f, 0.024881f, -0.038945f, -0.001334f, -0.000270f, 0.011553f, -0.017658f, -0.006716f, -0.017973f, -0.017642f, 0.030954f, 0.010032f, -0.023190f, 0.011975f, -0.014347f, -0.015192f, -0.024903f, -0.045235f, 0.011819f, 0.029931f, 0.002028f, 0.030150f, 0.040906f, -0.002411f, -0.016760f, -0.038757f, 0.003021f, -0.004945f, 0.002478f, -0.009656f, 0.008010f, -0.017020f, 0.036623f, 0.020302f, 0.032036f, 0.006517f, -0.003952f, -0.009724f, 0.013078f, 0.015145f, 0.006817f, -0.002740f, -0.004584f, 0.001456f, 0.017238f, -0.003019f, 0.007228f, -0.010850f, 0.004694f, -0.017945f, 0.001752f, 0.002238f, -0.007904f, 0.016957f, 0.009803f, -0.004338f, -0.011140f, -0.009730f, -0.003214f, -0.000887f, 0.005444f, -0.011395f, 0.002951f, 0.002056f, -0.000834f, -0.007872f, 0.002987f, -0.017092f, - -0.003462f, -0.004048f, -0.004773f, 0.002964f, -0.000311f, -0.032771f, 0.004391f, -0.073099f, -0.049110f, -0.035205f, 0.019051f, 0.036257f, -0.051715f, 0.011998f, 0.036662f, 0.022645f, -0.000524f, 0.013420f, 0.034567f, -0.015879f, -0.002067f, -0.010070f, 0.001019f, -0.022463f, 0.015969f, 0.000331f, 0.001888f, 0.005900f, 0.046335f, -0.002349f, -0.020444f, -0.019914f, 0.011045f, 0.034111f, -0.013779f, -0.034554f, 0.010255f, 0.034615f, 0.020209f, -0.004675f, 0.016809f, 0.011351f, 0.016195f, 0.003595f, 0.013718f, 0.023478f, -0.002933f, -0.039602f, 0.001983f, 0.012204f, -0.037108f, -0.027098f, 0.036296f, 0.028473f, -0.028028f, -0.018371f, 0.008865f, -0.001888f, 0.017803f, 0.044134f, -0.009491f, -0.008554f, 0.008392f, -0.002293f, 0.016341f, 0.008155f, -0.016093f, -0.012652f, -0.006075f, 0.012918f, 0.011745f, -0.011761f, -0.031993f, -0.005658f, -0.048143f, 0.045538f, 0.007680f, -0.008374f, 0.004334f, 0.018860f, -0.000980f, -0.021176f, 0.007857f, -0.009218f, -0.013727f, 0.010703f, -0.002881f, -0.020957f, -0.034440f, -0.011267f, -0.014045f, 0.028420f, -0.004539f, 0.009365f, 0.005409f, 0.003458f, - -0.002679f, -0.002492f, 0.004434f, -0.007657f, 0.001237f, 0.010278f, -0.001246f, -0.005410f, -0.003088f, -0.023501f, -0.007254f, -0.000652f, -0.004413f, -0.017115f, -0.015353f, -0.006465f, -0.003516f, -0.001559f, -0.005028f, -0.000926f, 0.000284f, 0.012856f, 0.004551f, -0.002138f, -0.005235f, 0.002005f, -0.004631f, -0.003918f, 0.008348f, -0.004229f, -0.009993f, -0.002948f, -0.007532f, 0.000884f, -0.009263f, 0.000246f, 0.006110f, 0.001914f, -0.008889f, -0.002965f, -0.028243f, -0.001222f, 0.004885f, -0.034620f, -0.009098f, 0.026028f, 0.033856f, 0.023961f, 0.063178f, 0.038109f, 0.057248f, 0.021371f, 0.015085f, -0.029580f, 0.032129f, -0.010818f, -0.003621f, -0.023688f, -0.015775f, 0.031044f, -0.010170f, 0.070410f, 0.032757f, 0.020317f, -0.003773f, 0.016280f, -0.011087f, -0.032872f, -0.016633f, -0.020405f, 0.014830f, -0.019241f, -0.000448f, -0.020590f, 0.012038f, 0.028640f, 0.025845f, -0.001709f, 0.037380f, 0.031232f, 0.001447f, -0.010887f, -0.014303f, -0.025634f, -0.008830f, 0.058944f, 0.022843f, 0.067855f, -0.021897f, 0.000333f, -0.002328f, 0.015814f, 0.054441f, 0.018652f, 0.001277f, 0.035005f, - 0.040095f, 0.042369f, -0.003874f, -0.025059f, -0.009245f, -0.006931f, -0.007270f, 0.028082f, 0.019134f, 0.026650f, 0.040652f, -0.025397f, 0.061509f, -0.041361f, -0.077647f, -0.012016f, -0.024264f, 0.015801f, 0.037384f, 0.018313f, -0.021019f, -0.002156f, -0.022823f, -0.017027f, -0.011337f, 0.000272f, 0.030904f, 0.005211f, -0.008854f, 0.004834f, 0.002232f, 0.009271f, 0.009791f, 0.006725f, 0.012032f, 0.003278f, 0.007528f, 0.002769f, 0.008358f, 0.000524f, -0.025105f, -0.009673f, -0.000379f, -0.023344f, 0.002451f, -0.024373f, -0.012931f, -0.014802f, -0.013800f, -0.011558f, -0.008588f, -0.003274f, 0.001279f, 0.006984f, 0.025518f, 0.003471f, -0.016376f, 0.007425f, 0.001377f, 0.023186f, -0.004537f, 0.009999f, -0.000341f, 0.000284f, -0.012601f, 0.002920f, 0.036751f, 0.059756f, -0.029753f, -0.023561f, 0.021494f, -0.018027f, -0.003278f, -0.008576f, 0.008023f, 0.025950f, 0.028141f, 0.041348f, -0.045666f, 0.051026f, -0.018587f, 0.004170f, -0.023771f, 0.020837f, 0.038755f, 0.015291f, 0.007086f, 0.002052f, 0.047214f, 0.010960f, -0.001690f, -0.016340f, -0.007352f, -0.049358f, -0.006705f, -0.024399f, - -0.058667f, 0.004213f, -0.003664f, 0.023099f, -0.061102f, -0.012771f, 0.014148f, 0.021698f, 0.050592f, -0.014825f, 0.014619f, 0.026818f, 0.004016f, -0.007969f, 0.014180f, -0.014404f, -0.003641f, -0.077068f, 0.006510f, -0.033352f, -0.038318f, -0.043403f, 0.016993f, -0.069124f, 0.022308f, -0.026432f, -0.034446f, -0.047293f, 0.041785f, 0.044783f, 0.044582f, 0.008705f, 0.007995f, 0.042003f, -0.058972f, -0.005793f, -0.018341f, 0.023795f, -0.070030f, -0.024059f, -0.007447f, 0.022355f, 0.017511f, 0.014345f, 0.027956f, -0.026115f, 0.010084f, -0.031522f, -0.009529f, -0.018899f, -0.007629f, -0.006426f, 0.000632f, -0.029870f, 0.013409f, 0.018762f, -0.003463f, 0.001320f, -0.014869f, -0.004578f, 0.014139f, -0.019265f, -0.000615f, 0.009477f, -0.024083f, 0.010952f, -0.021603f, 0.000301f, 0.013173f, 0.003230f, -0.017750f, -0.011466f, 0.006562f, -0.009700f, 0.010661f, 0.007689f, 0.012332f, -0.001548f, -0.015575f, 0.029372f, -0.014130f, -0.006947f, -0.019160f, 0.013159f, -0.006665f, 0.001955f, -0.017793f, 0.002450f, -0.021572f, -0.003282f, 0.015454f, -0.004838f, -0.009280f, -0.022292f, 0.002382f, 0.003113f, - -0.003183f, -0.029290f, -0.055293f, -0.000948f, -0.019828f, 0.065375f, 0.013483f, 0.046255f, -0.015287f, 0.063124f, -0.039802f, -0.074253f, 0.016600f, 0.012638f, 0.008304f, -0.036889f, -0.042246f, -0.032916f, 0.012163f, -0.033152f, 0.014421f, -0.017563f, 0.049335f, -0.016102f, -0.007650f, 0.035747f, 0.000936f, -0.088862f, -0.037117f, -0.001152f, 0.058419f, -0.006681f, -0.018544f, -0.050927f, 0.008685f, -0.012527f, -0.044031f, -0.051898f, -0.006185f, 0.009573f, -0.018043f, -0.019727f, -0.052143f, 0.034103f, -0.013048f, 0.012295f, -0.026030f, 0.001202f, 0.015282f, 0.009477f, 0.045754f, 0.000527f, -0.015929f, -0.059598f, -0.021172f, 0.028902f, -0.040973f, -0.020755f, 0.015002f, 0.032896f, 0.025498f, 0.065511f, 0.049825f, 0.001017f, 0.037788f, 0.038933f, 0.013131f, 0.001616f, 0.022637f, -0.019311f, 0.098679f, -0.045333f, -0.107963f, 0.028783f, -0.091909f, -0.003450f, -0.071956f, -0.000389f, 0.087853f, 0.011131f, -0.041969f, 0.014056f, 0.014880f, -0.027251f, -0.022558f, -0.030845f, 0.006664f, -0.009233f, 0.028122f, -0.022116f, 0.018783f, -0.037126f, 0.010377f, -0.001107f, -0.006145f, -0.008320f, - 0.025497f, 0.049009f, 0.015253f, 0.020016f, 0.033741f, 0.010467f, -0.033749f, 0.010010f, -0.012523f, 0.022754f, -0.007033f, -0.010307f, -0.001302f, -0.002080f, -0.009071f, -0.027568f, -0.018239f, -0.012083f, -0.001530f, 0.004201f, -0.002011f, -0.017369f, -0.039744f, -0.024598f, 0.006000f, -0.006736f, -0.000678f, -0.014921f, 0.005382f, 0.029033f, 0.041344f, -0.062665f, -0.041683f, -0.025881f, -0.022002f, 0.025206f, 0.039125f, -0.023008f, 0.002610f, 0.034921f, -0.070684f, 0.005230f, 0.016569f, -0.053319f, 0.027623f, -0.017750f, 0.024370f, 0.009176f, 0.027464f, 0.002983f, -0.034554f, 0.035795f, -0.045035f, -0.009804f, 0.087221f, -0.035781f, 0.031955f, -0.020757f, 0.035913f, 0.032743f, -0.011442f, -0.038250f, 0.040647f, 0.105727f, -0.057928f, 0.015056f, -0.076882f, 0.038897f, 0.023398f, -0.041653f, 0.046150f, 0.004333f, -0.092316f, 0.013253f, 0.004541f, 0.042142f, -0.011304f, -0.006551f, -0.048503f, -0.047224f, -0.024227f, 0.115246f, -0.017593f, 0.058474f, -0.051389f, 0.038437f, 0.018862f, -0.010687f, -0.039505f, -0.007440f, 0.032535f, 0.064716f, -0.023470f, -0.021890f, -0.006848f, 0.012574f, - 0.056443f, -0.014477f, -0.013320f, -0.042060f, 0.012894f, -0.063249f, -0.028052f, 0.044816f, 0.054525f, 0.005930f, -0.004485f, -0.029803f, -0.048441f, -0.140948f, 0.087847f, 0.033137f, 0.050474f, 0.004709f, -0.045736f, 0.050100f, -0.028310f, 0.021032f, 0.030036f, 0.028920f, 0.067835f, -0.001578f, 0.015893f, 0.018434f, -0.007528f, -0.029993f, -0.009777f, 0.049210f, 0.030634f, -0.028091f, -0.005988f, -0.019217f, -0.004762f, 0.022796f, 0.006943f, -0.032834f, -0.020902f, 0.030740f, 0.007349f, -0.010173f, 0.016227f, -0.027834f, -0.016645f, -0.006069f, 0.013692f, 0.021584f, 0.014360f, 0.003839f, 0.017441f, -0.014331f, -0.018264f, 0.002915f, -0.001672f, -0.025067f, 0.003128f, -0.025849f, -0.000815f, -0.015966f, -0.003558f, 0.003574f, -0.012937f, -0.024783f, 0.008477f, -0.059247f, 0.041389f, 0.040516f, -0.080275f, 0.007552f, -0.042175f, 0.004990f, -0.088375f, 0.088608f, 0.077273f, -0.008172f, -0.040316f, -0.014252f, -0.016157f, 0.042857f, -0.044203f, 0.055345f, -0.073895f, -0.043117f, 0.021079f, 0.025898f, 0.006009f, 0.024989f, 0.070401f, 0.019979f, 0.032482f, 0.008333f, 0.033754f, 0.023683f, - -0.015802f, 0.006701f, 0.028589f, -0.002327f, -0.002405f, 0.055871f, 0.025260f, 0.073428f, -0.006724f, 0.041690f, 0.000143f, -0.054337f, 0.055214f, -0.028918f, -0.006165f, 0.016609f, -0.051138f, -0.035014f, 0.019897f, 0.079857f, 0.043887f, 0.028547f, -0.103436f, -0.024558f, -0.072520f, -0.001199f, 0.116063f, 0.075810f, 0.087814f, 0.006339f, -0.085147f, 0.025926f, 0.086431f, 0.017558f, -0.021602f, 0.076312f, 0.008337f, 0.050800f, -0.132444f, -0.110525f, 0.079009f, -0.006357f, -0.035630f, -0.084848f, -0.018319f, -0.032289f, 0.036033f, 0.032681f, 0.039453f, 0.039786f, -0.016690f, 0.011905f, 0.073208f, 0.066883f, 0.070713f, 0.005121f, 0.101600f, 0.049934f, -0.017973f, -0.040996f, 0.000664f, -0.020602f, 0.006081f, 0.050865f, -0.008098f, 0.001459f, 0.037656f, 0.040653f, 0.004043f, -0.000624f, 0.016115f, 0.045100f, 0.016225f, 0.020694f, 0.031310f, 0.010294f, 0.024373f, -0.002033f, -0.013664f, -0.006857f, -0.005187f, 0.001044f, 0.032371f, -0.013250f, 0.005760f, -0.027363f, 0.039166f, 0.018052f, 0.017151f, -0.001386f, 0.019793f, -0.000918f, 0.067075f, 0.016290f, 0.068864f, -0.019563f, - 0.060249f, 0.026648f, 0.008958f, 0.025229f, 0.025966f, 0.028408f, -0.007784f, -0.006392f, 0.041242f, 0.013222f, 0.034566f, -0.076695f, 0.045212f, 0.060324f, 0.004576f, 0.020529f, -0.054663f, 0.042566f, -0.024892f, 0.020327f, 0.001931f, 0.000036f, 0.036063f, -0.011333f, 0.023451f, -0.007734f, -0.043921f, 0.011521f, -0.003120f, 0.048827f, 0.042729f, 0.060751f, 0.020213f, -0.046896f, -0.038642f, 0.039334f, 0.044325f, 0.020318f, 0.003771f, 0.013790f, -0.012297f, -0.038541f, 0.006346f, -0.014470f, 0.053968f, 0.037519f, 0.032847f, 0.042594f, 0.043825f, -0.061124f, 0.066716f, 0.065452f, 0.047999f, -0.033040f, -0.029320f, -0.042638f, 0.058059f, 0.033713f, 0.095495f, -0.058697f, -0.057993f, -0.045011f, -0.084968f, -0.022491f, 0.091205f, 0.014145f, 0.071550f, -0.077077f, -0.082287f, 0.017436f, 0.051709f, -0.072129f, 0.010882f, -0.057551f, 0.022387f, -0.066367f, -0.005586f, 0.030824f, 0.032727f, -0.060410f, 0.023230f, -0.046084f, -0.091209f, -0.003527f, 0.107049f, 0.055135f, 0.043081f, -0.030578f, -0.077397f, 0.116312f, 0.094008f, 0.025997f, -0.105565f, -0.004675f, -0.025230f, 0.074271f, - 0.037659f, 0.045812f, -0.055199f, 0.040454f, -0.025122f, 0.026287f, -0.038453f, 0.012783f, -0.042962f, 0.060542f, -0.012788f, 0.009433f, -0.073717f, 0.020507f, 0.008379f, -0.004027f, -0.017156f, 0.014181f, 0.006840f, 0.006976f, -0.046040f, 0.018350f, 0.045158f, 0.002236f, 0.026771f, 0.022779f, 0.018345f, 0.002380f, 0.008107f, 0.000271f, 0.001456f, 0.001332f, -0.015471f, -0.002341f, 0.013394f, -0.000950f, 0.027825f, 0.023840f, -0.014292f, -0.003265f, 0.012154f, 0.005035f, 0.021108f, -0.042812f, -0.001293f, -0.147437f, -0.030258f, -0.002958f, 0.001731f, 0.052425f, -0.137805f, -0.014867f, 0.062239f, -0.100750f, 0.022786f, -0.022295f, 0.118207f, 0.063439f, -0.072557f, 0.018670f, 0.079425f, 0.008939f, -0.031959f, 0.027068f, 0.018841f, 0.011291f, -0.001823f, -0.007117f, 0.005799f, 0.013843f, 0.026940f, 0.082805f, 0.065249f, 0.072509f, 0.048521f, 0.091096f, 0.043450f, 0.093121f, 0.037472f, 0.082693f, 0.000575f, 0.051654f, 0.045140f, 0.051191f, 0.037934f, -0.002910f, 0.014431f, -0.062055f, -0.038147f, 0.120394f, 0.000847f, -0.047029f, -0.014059f, 0.038317f, 0.062348f, 0.129491f, - -0.018085f, -0.070092f, -0.036367f, -0.051477f, 0.072633f, 0.084638f, 0.093264f, 0.029923f, -0.004136f, 0.064331f, -0.108791f, 0.099102f, 0.036544f, -0.051150f, -0.001708f, -0.167405f, 0.003240f, -0.110414f, -0.154867f, -0.037662f, -0.091343f, -0.038619f, 0.173814f, 0.160001f, 0.149024f, -0.117187f, -0.012862f, -0.012758f, 0.117005f, 0.185279f, -0.041920f, -0.051421f, 0.101486f, 0.105740f, 0.089593f, -0.010081f, -0.015363f, -0.050446f, -0.065129f, 0.010022f, -0.024452f, 0.028978f, 0.043625f, 0.039280f, 0.026002f, 0.003266f, 0.016568f, 0.050042f, 0.007671f, 0.000892f, -0.014785f, 0.003406f, 0.002584f, 0.014039f, 0.009384f, 0.010677f, 0.050352f, -0.003893f, -0.031238f, 0.031887f, 0.036382f, 0.009256f, 0.058584f, 0.014597f, 0.027947f, 0.065482f, 0.086081f, 0.064072f, 0.045711f, 0.019343f, 0.007997f, 0.025872f, 0.058779f, 0.026751f, 0.060284f, 0.045805f, 0.028579f, 0.043127f, 0.014974f, 0.058369f, 0.049827f, 0.041709f, 0.062103f, 0.036634f, 0.011104f, 0.018085f, -0.003926f, -0.040983f, 0.105886f, 0.128672f, -0.106579f, -0.097764f, 0.032888f, 0.112489f, 0.002795f, -0.052732f, - 0.000369f, 0.030522f, 0.033756f, -0.093051f, 0.034590f, -0.012427f, 0.049104f, -0.051095f, -0.024600f, -0.059871f, 0.063191f, -0.008626f, -0.027956f, -0.055982f, 0.040995f, 0.024205f, -0.009712f, -0.047315f, 0.022105f, 0.020948f, 0.011145f, -0.041809f, -0.006063f, -0.002100f, 0.048304f, -0.036441f, -0.008920f, -0.053291f, -0.014067f, 0.018438f, 0.042386f, -0.055448f, -0.021228f, 0.059100f, 0.050541f, -0.015521f, -0.035831f, -0.000219f, -0.018316f, 0.049378f, -0.028290f, -0.015556f, 0.023811f, 0.017945f, 0.030077f, -0.027078f, 0.008475f, -0.037317f, 0.043043f, 0.051068f, 0.024104f, 0.008005f, -0.040042f, 0.045395f, -0.032227f, 0.070251f, -0.051456f, 0.056484f, -0.088595f, 0.059859f, 0.007418f, -0.004994f, -0.062359f, -0.018382f, 0.020116f, -0.015695f, 0.005916f, -0.015163f, 0.017464f, -0.007541f, 0.019556f, -0.019116f, -0.026801f, -0.016681f, 0.018565f, 0.001690f, -0.002488f, -0.004344f, -0.014905f, 0.009526f, 0.021729f, -0.010993f, -0.002978f, 0.001730f, 0.002792f, -0.000775f, 0.003694f, -0.003469f, 0.015654f, 0.000921f, 0.020341f, -0.018231f, 0.003205f, -0.008148f, 0.020510f, -0.021924f, - 0.020186f, -0.022606f, 0.013422f, 0.007369f, 0.025598f, -0.005539f, 0.024192f, -0.021968f, -0.018463f, -0.003059f, 0.039466f, -0.018729f, 0.030295f, -0.010335f, 0.003704f, 0.005138f, 0.021142f, -0.008698f, 0.010332f, 0.005035f, -0.000635f, -0.000566f, 0.006571f, -0.001403f, -0.014800f, 0.028867f, -0.017602f, 0.005664f, -0.014367f, 0.010082f, -0.013715f, 0.015658f, -0.020326f, 0.023623f, -0.019073f, 0.020318f, -0.025596f, 0.023158f, -0.032192f, 0.031050f, -0.020326f, 0.022568f, -0.023891f, 0.024026f, -0.024334f, 0.025087f, -0.022964f, 0.024040f, -0.003417f, -0.022962f, 0.102616f, 0.109204f, -0.064262f, -0.038061f, 0.021650f, 0.104289f, 0.064787f, 0.038864f, 0.037375f, -0.016604f, -0.043644f, -0.013206f, 0.024501f, -0.000376f, -0.010285f, 0.031113f, 0.000536f, 0.021929f, 0.002683f, -0.011663f, -0.039107f, -0.010378f, -0.002295f, 0.002887f, -0.001555f, -0.031771f, 0.035459f, 0.005918f, -0.014285f, -0.000803f, -0.001105f, 0.000499f, 0.022886f, 0.042053f, 0.017926f, 0.004250f, -0.015154f, -0.021771f, -0.005659f, 0.013660f, 0.028178f, 0.037955f, -0.021200f, -0.020930f, 0.004722f, 0.038367f, - 0.017294f, 0.008549f, -0.017354f, -0.034837f, 0.029688f, -0.006137f, 0.000818f, 0.002006f, 0.009550f, 0.009164f, -0.004244f, -0.001285f, -0.022729f, 0.003471f, 0.020003f, -0.009530f, 0.011941f, -0.006731f, -0.016205f, 0.010258f, -0.003098f, 0.005539f, -0.001262f, 0.017390f, 0.011785f, -0.025988f, 0.007633f, 0.001215f, -0.047129f, -0.062619f, 0.001765f, 0.003636f, 0.014232f, 0.038081f, 0.004147f, -0.016815f, -0.016459f, 0.014978f, 0.016361f, 0.024842f, 0.016927f, 0.001026f, 0.007202f, -0.002705f, -0.018930f, -0.007894f, 0.002845f, -0.025976f, -0.024853f, 0.015943f, 0.016937f, -0.000446f, 0.019054f, -0.027110f, -0.004952f, -0.001316f, 0.001309f, -0.008412f, 0.004250f, 0.014572f, 0.020252f, 0.009845f, 0.017048f, -0.010865f, -0.021271f, 0.012395f, 0.001943f, -0.005271f, -0.036276f, -0.135419f, 0.057499f, 0.208843f, 0.192554f, 0.164381f, 0.065562f, -0.155954f, -0.097630f, -0.140202f, -0.157131f, -0.140471f, -0.040931f, 0.030391f, 0.118413f, 0.123371f, 0.147719f, 0.097874f, 0.098678f, 0.002472f, -0.103817f, -0.099117f, -0.122246f, -0.095586f, -0.053245f, -0.003559f, -0.034310f, 0.037187f, - 0.045779f, 0.074282f, 0.081520f, 0.082865f, 0.049321f, 0.004210f, 0.021898f, -0.018205f, 0.011717f, -0.056653f, -0.041247f, -0.052389f, -0.085734f, -0.067949f, -0.052150f, -0.036749f, -0.060974f, 0.008508f, 0.103971f, 0.117575f, 0.065568f, 0.122938f, 0.030414f, 0.071763f, 0.036835f, 0.021115f, -0.030950f, -0.065555f, -0.089967f, -0.126242f, -0.096905f, -0.144022f, -0.059725f, -0.064094f, 0.041287f, 0.041465f, 0.120442f, 0.138927f, 0.123601f, 0.110186f, 0.107599f, 0.067421f, 0.008191f, -0.037640f, -0.115255f, -0.072202f, -0.150532f, -0.128235f, -0.178518f, -0.028831f, -0.016071f, 0.044029f, 0.056369f, 0.101757f, 0.119565f, 0.100176f, 0.089320f, 0.066353f, 0.039022f, 0.005575f, -0.033332f, -0.047833f, -0.064588f, -0.099529f, -0.070059f, -0.086652f, -0.060406f, -0.030883f, -0.009034f, 0.019690f, 0.019020f, 0.095173f, 0.087594f, 0.086949f, 0.067678f, 0.049763f, 0.005820f, 0.030952f, -0.034568f, -0.057079f, -0.044614f, -0.123606f, -0.144263f, -0.027783f, -0.009828f, -0.006210f, 0.070198f, 0.057604f, 0.076622f, 0.053818f, 0.070009f, 0.021429f, 0.018012f, -0.005396f, -0.029827f, -0.038174f, - -0.049499f, -0.054656f, -0.033785f, -0.007048f, -0.042796f, -0.022471f, 0.033984f, 0.048675f, 0.032501f, 0.042168f, 0.028631f, 0.020929f, 0.005303f, -0.003773f, -0.014959f, -0.020870f, -0.016358f, -0.026098f, -0.013855f, -0.005119f, -0.009984f, -0.013247f, 0.002810f, 0.010100f, 0.002006f, 0.015343f, 0.019259f, 0.014616f, 0.009736f, 0.008503f, 0.002560f, -0.001576f, -0.005496f, -0.001396f, -0.002080f, 0.000734f} - }, - { - {-0.009620f, -0.009836f, -0.008129f, 0.002252f, -0.004664f, -0.000752f, -0.001333f, 0.004711f, 0.018830f, -0.005038f, 0.001896f, -0.017939f, -0.009798f, 0.005466f, -0.008528f, -0.006655f, -0.002517f, -0.007580f, -0.002008f, 0.015622f, -0.006711f, -0.010009f, 0.016884f, 0.013513f, -0.004769f, -0.003137f, 0.015455f, 0.004394f, 0.005994f, 0.002981f, 0.000757f, -0.003959f, -0.006513f, 0.006123f, -0.004852f, 0.004575f, 0.001663f, 0.001760f, -0.002163f, -0.005315f, -0.004166f, 0.003771f, -0.004796f, -0.007581f, -0.003416f, -0.003391f, -0.009650f, 0.010918f, 0.016878f, -0.009712f, 0.005509f, 0.000464f, -0.003788f, 0.002672f, -0.000418f, 0.000136f, -0.005651f, 0.010436f, -0.006192f, -0.007653f, 0.008688f, 0.002649f, -0.000454f, -0.000978f, 0.004774f, 0.000300f, -0.000135f, -0.003000f, -0.001503f, 0.009170f, -0.013396f, 0.004557f, 0.002466f, -0.003262f, -0.003202f, -0.004682f, -0.006817f, 0.000049f, 0.006581f, 0.006719f, 0.001960f, -0.000133f, 0.001524f, -0.003740f, 0.004898f, -0.001861f, 0.002883f, -0.002089f, -0.001341f, -0.001013f, -0.001219f, -0.000980f, 0.002262f, -0.000113f, 0.000935f, 0.001361f, - 0.000832f, 0.002342f, 0.002967f, -0.000986f, -0.000681f, -0.001335f, -0.000915f, -0.001893f, -0.000555f, -0.001266f, -0.001031f, -0.001926f, -0.000753f, -0.000225f, -0.029660f, -0.004685f, -0.010836f, -0.002668f, 0.002399f, -0.008088f, -0.018078f, 0.013251f, -0.004438f, 0.003084f, 0.008874f, -0.002822f, -0.000902f, -0.001108f, 0.004087f, -0.003141f, 0.014928f, -0.000623f, 0.011516f, 0.016877f, -0.020260f, 0.004241f, 0.014080f, 0.000963f, 0.002808f, 0.009738f, 0.018010f, 0.002567f, -0.004049f, 0.009056f, -0.002410f, -0.004705f, 0.004062f, 0.003194f, 0.004018f, -0.005084f, 0.018352f, -0.008484f, 0.004631f, 0.006833f, -0.000083f, -0.000912f, -0.008955f, 0.001442f, -0.010376f, 0.008698f, -0.010600f, -0.008157f, 0.005869f, -0.009901f, 0.006776f, -0.006919f, 0.002845f, -0.005591f, 0.003765f, 0.007963f, 0.015635f, 0.004775f, 0.001768f, 0.007584f, 0.000114f, -0.013544f, 0.001791f, 0.003767f, 0.005140f, -0.003433f, 0.000705f, -0.001896f, 0.002566f, 0.007501f, 0.004543f, 0.010260f, 0.003550f, 0.001328f, -0.006281f, -0.003251f, 0.006064f, 0.004683f, -0.006015f, 0.007155f, 0.003515f, 0.007827f, - -0.002468f, -0.001947f, -0.002476f, 0.000306f, -0.001534f, -0.006383f, -0.001173f, 0.000977f, 0.001046f, 0.004016f, 0.000446f, -0.001285f, -0.001566f, 0.001654f, 0.000862f, -0.003165f, -0.000472f, -0.000310f, 0.000018f, 0.001164f, 0.000330f, -0.001517f, -0.000209f, -0.001443f, -0.010830f, 0.008082f, 0.005178f, 0.001695f, 0.010120f, -0.000467f, 0.005651f, 0.013920f, 0.008531f, 0.018231f, 0.003462f, -0.002601f, -0.018638f, 0.003008f, -0.011446f, -0.003729f, 0.001387f, 0.004274f, -0.007185f, 0.000081f, 0.017834f, -0.009064f, -0.000524f, -0.009050f, 0.004301f, 0.000173f, 0.003428f, 0.007384f, 0.008565f, -0.005336f, 0.006416f, 0.006754f, 0.012891f, 0.000576f, -0.012731f, 0.001314f, 0.013668f, -0.001267f, -0.000898f, -0.001814f, 0.009178f, -0.010654f, 0.000864f, 0.007121f, 0.009186f, 0.011128f, -0.004198f, -0.007161f, -0.000964f, 0.015960f, 0.001448f, 0.005811f, -0.012956f, -0.005707f, 0.003103f, 0.002739f, -0.002243f, 0.008488f, -0.000612f, -0.001678f, 0.004694f, -0.008060f, 0.000488f, -0.001210f, 0.005524f, 0.008590f, -0.012584f, -0.002755f, 0.004041f, 0.008467f, -0.005402f, -0.005101f, - 0.003462f, 0.010020f, -0.000902f, 0.006750f, 0.004732f, 0.006919f, 0.002867f, 0.007712f, 0.011528f, 0.000500f, 0.003219f, -0.003141f, 0.004687f, 0.003407f, -0.002215f, -0.005156f, -0.000992f, -0.003642f, 0.001200f, -0.003328f, 0.001454f, -0.001494f, 0.000804f, -0.002694f, 0.000062f, -0.000229f, 0.000566f, -0.001605f, 0.002567f, -0.002415f, -0.001071f, -0.001060f, -0.001319f, 0.000352f, 0.001445f, 0.001535f, 0.000827f, -0.000706f, -0.000546f, -0.001114f, 0.003474f, 0.032246f, 0.015655f, 0.012708f, -0.011991f, -0.002123f, -0.016735f, -0.011965f, 0.017974f, 0.001621f, -0.011306f, -0.005271f, 0.003870f, -0.010718f, -0.000940f, 0.018258f, 0.007335f, -0.000759f, 0.005893f, 0.026775f, -0.017796f, 0.004273f, -0.003308f, -0.008664f, 0.015432f, 0.007821f, 0.008025f, -0.005999f, 0.006935f, 0.008837f, -0.002682f, 0.005670f, -0.001767f, -0.007640f, 0.001631f, 0.002864f, -0.001286f, 0.009063f, 0.002281f, -0.003281f, 0.010077f, -0.004589f, -0.004683f, -0.005818f, 0.002863f, 0.003842f, 0.000777f, 0.007199f, 0.001013f, 0.022659f, 0.001536f, -0.000020f, -0.005218f, -0.004738f, 0.005485f, -0.016877f, - 0.000748f, 0.010111f, 0.008089f, -0.009116f, 0.013405f, 0.000218f, 0.006024f, 0.010663f, -0.002978f, 0.008253f, 0.006462f, -0.002943f, -0.009574f, -0.007357f, 0.006085f, 0.015159f, 0.004377f, -0.006606f, -0.003194f, -0.003748f, 0.010489f, -0.008856f, -0.000453f, 0.008602f, 0.010038f, 0.001371f, 0.001307f, -0.002773f, -0.004132f, 0.000170f, -0.000925f, -0.003520f, -0.000679f, -0.001609f, -0.001695f, -0.002709f, -0.001313f, 0.003537f, 0.002455f, -0.000719f, 0.004642f, 0.001350f, 0.001900f, -0.000603f, 0.001611f, -0.000817f, -0.000359f, -0.000193f, 0.000575f, 0.000563f, 0.001330f, 0.002495f, 0.000678f, 0.000284f, -0.000722f, 0.007764f, 0.002094f, 0.021091f, 0.005289f, 0.012569f, -0.000532f, 0.002783f, 0.003573f, 0.003500f, -0.003452f, 0.012852f, -0.005378f, 0.013906f, -0.006793f, -0.005395f, 0.003693f, -0.009205f, -0.002585f, -0.002904f, 0.003970f, 0.005778f, -0.003636f, -0.013474f, 0.006178f, -0.016290f, -0.006516f, -0.002777f, -0.000318f, -0.002565f, 0.003246f, 0.014576f, 0.008306f, 0.000977f, -0.015107f, -0.014591f, 0.000568f, 0.009825f, -0.005130f, 0.001526f, -0.001796f, -0.006480f, - -0.009680f, 0.000994f, 0.006668f, 0.014056f, 0.012762f, -0.001642f, 0.004146f, -0.017658f, 0.006096f, 0.011708f, 0.013383f, -0.001658f, 0.012208f, 0.002585f, 0.017742f, 0.010442f, 0.003443f, 0.007983f, -0.000744f, -0.004638f, -0.003085f, -0.001811f, 0.011152f, -0.004274f, -0.006226f, -0.007756f, 0.011128f, -0.002701f, -0.019411f, 0.003849f, 0.007404f, 0.010879f, 0.014138f, 0.024092f, -0.010090f, -0.008300f, 0.014287f, 0.015054f, 0.011898f, 0.005070f, -0.002500f, -0.002775f, -0.009413f, -0.010580f, -0.002959f, -0.003841f, 0.003138f, -0.000463f, -0.003100f, -0.000463f, -0.005872f, 0.001222f, -0.000825f, 0.002709f, 0.000323f, -0.004500f, -0.000423f, 0.000434f, -0.000807f, -0.000448f, 0.002044f, 0.003907f, 0.003906f, 0.003211f, 0.000790f, 0.000770f, -0.006051f, 0.000228f, 0.004070f, -0.002755f, 0.002188f, 0.000455f, -0.001787f, -0.001476f, -0.000865f, 0.004057f, 0.002960f, 0.000573f, -0.000510f, 0.002195f, 0.000052f, -0.028013f, 0.013608f, 0.019194f, 0.002592f, 0.015976f, 0.002261f, -0.014322f, -0.001291f, -0.006686f, -0.003466f, 0.014749f, -0.019139f, -0.005358f, 0.006781f, 0.007540f, - 0.017442f, -0.003429f, 0.007584f, -0.027238f, -0.013787f, 0.006969f, 0.016184f, -0.010608f, -0.007539f, -0.011371f, -0.013633f, 0.007169f, -0.001620f, 0.000137f, 0.005181f, 0.002488f, 0.005403f, 0.021131f, -0.012726f, 0.020507f, -0.001068f, 0.004194f, 0.004616f, 0.004458f, -0.006120f, 0.007133f, -0.014444f, -0.002761f, -0.007838f, -0.001531f, -0.010712f, 0.013066f, 0.002376f, 0.036187f, 0.001226f, -0.002319f, -0.009092f, 0.001601f, -0.007603f, 0.018912f, -0.011605f, 0.002506f, -0.021100f, 0.015878f, 0.014681f, -0.017529f, 0.010781f, 0.010878f, 0.004604f, -0.009500f, -0.009589f, 0.015931f, 0.004196f, -0.023057f, 0.011131f, -0.010948f, -0.005859f, 0.005212f, -0.005671f, 0.002060f, 0.004751f, 0.006211f, -0.011914f, -0.029213f, 0.004345f, 0.006551f, -0.000804f, -0.006282f, 0.011625f, -0.004978f, -0.003640f, -0.005413f, 0.007768f, -0.009458f, -0.003631f, -0.005379f, -0.003871f, 0.002370f, -0.003497f, 0.005006f, 0.000836f, -0.008412f, 0.006273f, 0.000802f, -0.004195f, -0.000268f, 0.005668f, 0.001799f, 0.000386f, -0.000758f, -0.001405f, -0.004466f, 0.000496f, 0.001222f, 0.000689f, -0.000463f, - 0.002675f, -0.005054f, 0.000678f, 0.000940f, -0.005479f, -0.005011f, 0.012316f, 0.002374f, -0.000223f, -0.010398f, -0.017439f, 0.006174f, -0.009347f, -0.003782f, 0.016922f, -0.023023f, -0.009566f, -0.016964f, -0.001703f, 0.014542f, -0.001326f, -0.012001f, -0.016628f, -0.018700f, 0.007313f, 0.019779f, -0.005643f, 0.012358f, 0.018630f, -0.005151f, -0.004267f, 0.007286f, 0.010372f, 0.022086f, -0.003175f, 0.012417f, 0.001827f, 0.026261f, 0.019336f, 0.005288f, -0.006156f, 0.002655f, -0.014528f, 0.025497f, 0.005953f, -0.011242f, -0.012454f, 0.014707f, 0.012446f, 0.008943f, 0.006395f, 0.004370f, 0.013229f, -0.005700f, 0.005853f, -0.008727f, 0.001290f, 0.000720f, -0.013226f, -0.017705f, -0.006254f, -0.012503f, 0.008072f, -0.007629f, -0.005642f, -0.019310f, -0.012124f, 0.003711f, -0.006571f, -0.002307f, 0.009315f, 0.019361f, 0.024437f, 0.012700f, 0.010133f, -0.008988f, -0.019843f, 0.000356f, -0.013879f, -0.032120f, 0.000312f, -0.002248f, 0.012018f, 0.008096f, -0.007833f, -0.017891f, -0.009699f, 0.008671f, -0.000395f, -0.001983f, -0.007379f, 0.003975f, 0.004119f, 0.003248f, -0.001874f, -0.010180f, - 0.002184f, 0.001355f, 0.001031f, -0.002291f, -0.001220f, -0.001364f, 0.001309f, -0.004975f, -0.005100f, -0.000524f, 0.000661f, -0.004133f, 0.000401f, -0.000813f, 0.003875f, 0.005144f, -0.005503f, -0.000183f, 0.004056f, -0.000662f, -0.002288f, 0.000956f, 0.000621f, 0.005579f, -0.001687f, 0.003596f, 0.002848f, -0.002370f, -0.037047f, -0.011473f, 0.002045f, 0.018035f, -0.012994f, 0.008791f, 0.005789f, -0.000792f, 0.027206f, -0.003691f, 0.025604f, -0.015125f, 0.007520f, 0.008052f, 0.000321f, -0.023442f, -0.009668f, -0.008787f, -0.026562f, 0.009012f, -0.006607f, 0.005584f, -0.001659f, 0.009580f, -0.000034f, -0.010448f, 0.005545f, -0.017152f, 0.012619f, 0.007328f, 0.029125f, -0.001293f, 0.000881f, 0.026545f, -0.023504f, 0.020594f, 0.025316f, -0.015891f, 0.016305f, -0.006867f, -0.007647f, -0.013347f, 0.003356f, 0.002997f, 0.018005f, 0.011509f, -0.004639f, -0.007566f, -0.015303f, 0.008311f, 0.009550f, -0.017638f, -0.007893f, 0.016342f, -0.028797f, 0.002599f, -0.022244f, 0.012470f, 0.001231f, -0.000530f, 0.006730f, -0.007655f, 0.002560f, 0.026432f, -0.010938f, 0.005698f, 0.012920f, 0.008041f, - 0.001423f, -0.014099f, 0.006188f, 0.005080f, -0.008139f, -0.022784f, 0.000249f, -0.005282f, -0.017970f, 0.013526f, -0.004893f, 0.004923f, -0.000716f, 0.002494f, 0.005725f, 0.005478f, -0.010039f, 0.002454f, -0.001000f, 0.002218f, -0.000801f, 0.006702f, 0.003393f, -0.001753f, -0.001242f, -0.009867f, -0.000382f, -0.006768f, 0.001178f, 0.001040f, 0.007106f, -0.010426f, 0.003858f, 0.005529f, -0.003918f, -0.006497f, 0.002315f, -0.000996f, -0.003792f, 0.003051f, -0.000811f, -0.004079f, 0.001444f, -0.001415f, -0.004637f, -0.001353f, -0.002996f, -0.006281f, 0.002959f, -0.001953f, 0.000594f, -0.003459f, -0.000700f, -0.003534f, 0.001683f, 0.006635f, -0.000861f, -0.015145f, 0.044032f, -0.016374f, 0.008513f, 0.006333f, 0.015682f, 0.004944f, 0.009498f, 0.021997f, -0.017045f, -0.010445f, -0.001441f, 0.030601f, -0.011851f, -0.013022f, -0.015226f, 0.007564f, 0.005066f, 0.016747f, -0.034978f, 0.000331f, 0.000694f, -0.002373f, 0.017909f, -0.004358f, 0.013800f, 0.025683f, -0.018714f, -0.008379f, 0.007274f, -0.014012f, -0.017664f, 0.011847f, -0.016412f, 0.024150f, -0.004169f, -0.024871f, -0.003332f, -0.014283f, - 0.007855f, 0.019696f, -0.000424f, 0.009959f, -0.001264f, 0.003824f, 0.023429f, 0.000715f, 0.016982f, 0.006718f, -0.012793f, 0.013277f, 0.011325f, 0.001560f, 0.009507f, 0.033671f, -0.005628f, -0.015161f, 0.007964f, -0.019187f, 0.001462f, 0.032159f, 0.010887f, 0.005061f, -0.006170f, -0.009233f, -0.006240f, -0.011402f, 0.019361f, -0.012763f, -0.003434f, -0.007964f, 0.021976f, -0.040484f, 0.013806f, 0.014242f, 0.024317f, 0.005757f, 0.001819f, 0.021436f, -0.006104f, -0.009302f, -0.012183f, 0.000284f, -0.010139f, -0.001032f, -0.008728f, 0.007020f, 0.000620f, -0.007771f, -0.008199f, -0.006862f, 0.002575f, 0.008373f, 0.006702f, 0.001430f, 0.000463f, -0.003596f, -0.008872f, -0.002969f, -0.002314f, 0.003628f, 0.003699f, -0.001498f, -0.002210f, 0.001718f, -0.005332f, -0.000033f, -0.005175f, -0.002614f, -0.006803f, -0.009150f, -0.002573f, 0.003109f, 0.010125f, 0.001620f, -0.002850f, -0.002727f, 0.003955f, -0.000995f, 0.009709f, 0.004388f, 0.001668f, 0.001351f, 0.065080f, 0.019422f, -0.011861f, -0.015806f, -0.013315f, 0.047150f, -0.040633f, 0.003234f, 0.015916f, 0.002354f, -0.022029f, -0.004983f, - 0.011060f, -0.002360f, 0.002570f, 0.019559f, -0.020239f, -0.017003f, 0.008347f, 0.025495f, 0.015716f, 0.006585f, -0.012350f, -0.012072f, -0.011620f, -0.013540f, 0.012630f, 0.005016f, 0.018098f, 0.014516f, 0.008274f, -0.019204f, -0.009127f, -0.020458f, -0.004054f, -0.013421f, -0.030898f, -0.005758f, 0.013819f, 0.003071f, -0.014328f, -0.014452f, 0.000374f, 0.007478f, 0.019357f, 0.002461f, 0.009821f, 0.002804f, 0.037395f, -0.032436f, 0.021236f, 0.003982f, -0.033090f, -0.005977f, -0.009966f, -0.008187f, 0.005099f, -0.014488f, 0.008760f, 0.006363f, 0.014837f, -0.018068f, 0.006417f, 0.028943f, 0.013571f, 0.045985f, -0.010269f, -0.001141f, -0.011285f, -0.005780f, 0.001268f, -0.000913f, -0.043584f, 0.019439f, -0.001815f, -0.002550f, 0.011849f, 0.011710f, -0.012343f, -0.018569f, -0.020303f, -0.007549f, 0.014446f, 0.006152f, -0.004722f, -0.011996f, 0.010609f, -0.018865f, 0.009902f, -0.003088f, -0.008524f, -0.010662f, -0.011560f, -0.004173f, -0.003840f, 0.001839f, -0.004815f, -0.003263f, 0.002414f, -0.003461f, -0.003222f, 0.002010f, -0.009445f, -0.004307f, -0.000641f, -0.003214f, -0.005399f, -0.002410f, - -0.009592f, 0.001367f, 0.007211f, 0.009706f, 0.011395f, -0.008256f, -0.010106f, -0.007170f, -0.009137f, 0.000353f, -0.000006f, -0.005605f, -0.006374f, 0.002463f, -0.000837f, 0.006332f, -0.001953f, -0.000455f, 0.004914f, 0.004919f, -0.003939f, -0.021783f, 0.005297f, 0.011852f, -0.000453f, -0.013384f, -0.009288f, -0.028932f, -0.034378f, 0.007138f, -0.015234f, -0.007256f, 0.005064f, -0.000287f, -0.003593f, -0.015341f, -0.007609f, -0.000147f, 0.012079f, 0.012869f, -0.018881f, -0.010834f, 0.011899f, -0.016922f, -0.008306f, -0.027715f, 0.026838f, -0.003492f, 0.024179f, 0.002116f, 0.009074f, 0.025686f, 0.019419f, -0.011404f, 0.005857f, 0.013061f, -0.013712f, -0.005583f, 0.012729f, -0.004719f, -0.030783f, -0.005722f, -0.021567f, 0.031651f, -0.003340f, -0.008401f, -0.018089f, -0.026400f, 0.009468f, 0.005599f, 0.006233f, 0.013029f, 0.000309f, -0.004812f, 0.013636f, 0.003483f, -0.002600f, 0.004797f, -0.007615f, 0.020917f, -0.004937f, 0.013198f, 0.039049f, 0.008708f, 0.007339f, 0.009145f, 0.014411f, -0.033987f, -0.027508f, 0.010474f, -0.030024f, 0.020795f, -0.004237f, 0.023825f, 0.006295f, 0.046450f, - 0.018242f, 0.003163f, -0.013496f, -0.005988f, -0.023885f, -0.001610f, 0.007454f, 0.004666f, 0.005079f, 0.008211f, 0.021198f, -0.008816f, -0.017190f, -0.005976f, -0.004777f, 0.006672f, 0.019235f, 0.006803f, -0.004637f, 0.005546f, 0.005642f, -0.000991f, -0.004446f, -0.011196f, 0.000753f, 0.001262f, -0.005464f, -0.007409f, -0.001412f, -0.011873f, 0.008328f, 0.004728f, -0.005583f, -0.001810f, -0.011794f, -0.005781f, 0.005452f, 0.010322f, -0.005185f, -0.004792f, -0.000218f, -0.009477f, 0.010049f, -0.000476f, 0.007238f, -0.009804f, 0.000004f, -0.010158f, 0.005946f, -0.012054f, -0.002735f, -0.055456f, -0.038837f, 0.014410f, -0.015469f, -0.032073f, -0.048684f, -0.001186f, 0.003883f, -0.009440f, -0.007776f, 0.046433f, 0.012184f, -0.033577f, 0.007026f, -0.020490f, -0.017236f, -0.016639f, -0.029987f, -0.004953f, 0.002765f, -0.041294f, -0.039102f, -0.014855f, 0.006469f, 0.003851f, 0.023692f, 0.020053f, 0.012459f, -0.009942f, -0.000386f, 0.009165f, -0.021178f, -0.011806f, -0.007226f, 0.007014f, -0.019896f, -0.012152f, 0.013598f, 0.008238f, -0.000539f, -0.003053f, -0.003716f, 0.011337f, -0.028651f, -0.016325f, - -0.014106f, 0.019009f, -0.022209f, 0.015099f, 0.025454f, 0.034873f, -0.002319f, 0.010038f, -0.008268f, -0.016634f, -0.021839f, -0.005882f, 0.021531f, 0.008104f, -0.039096f, 0.001737f, 0.040460f, -0.026863f, 0.001308f, -0.005727f, 0.002157f, 0.009627f, 0.020634f, -0.004268f, 0.006556f, 0.024777f, 0.017035f, 0.010919f, -0.018951f, -0.022801f, 0.016670f, -0.016496f, -0.031241f, -0.030001f, 0.032696f, 0.012457f, 0.018061f, 0.007763f, -0.005149f, -0.006292f, 0.015600f, 0.011063f, 0.002941f, 0.015037f, -0.005993f, -0.019682f, -0.010170f, -0.013713f, 0.005516f, 0.019929f, 0.009702f, 0.002423f, 0.011792f, 0.006557f, 0.010995f, -0.002088f, -0.005642f, 0.006781f, -0.002458f, -0.007613f, -0.006494f, 0.005262f, -0.018192f, 0.004015f, 0.010670f, -0.006401f, 0.013200f, 0.009064f, -0.000761f, -0.001425f, 0.012444f, 0.001556f, -0.002878f, -0.007914f, -0.007788f, 0.002192f, 0.006560f, 0.001509f, 0.005282f, -0.007886f, -0.032411f, 0.017885f, -0.026237f, -0.046767f, 0.008437f, -0.028433f, -0.016528f, 0.055264f, 0.003748f, 0.041382f, 0.037226f, -0.007463f, 0.039203f, 0.054263f, 0.038572f, -0.048524f, - -0.006491f, -0.022550f, -0.022863f, -0.013971f, 0.000960f, -0.020001f, 0.042329f, 0.012590f, 0.023221f, -0.019821f, 0.022226f, 0.017132f, 0.005678f, -0.025246f, -0.019666f, 0.040319f, -0.007384f, -0.037591f, -0.002585f, -0.043510f, -0.006302f, 0.012125f, -0.015633f, 0.000989f, -0.035548f, 0.016343f, 0.032174f, 0.017476f, -0.004774f, -0.017395f, -0.006542f, -0.004348f, -0.006077f, -0.016288f, -0.043674f, 0.029526f, 0.016543f, 0.015450f, 0.018432f, -0.024747f, 0.038456f, 0.004895f, -0.011676f, -0.008523f, -0.030752f, -0.013472f, 0.019838f, 0.012375f, 0.032873f, -0.003486f, -0.037772f, -0.066120f, -0.003969f, -0.000396f, 0.000188f, -0.023782f, -0.033427f, -0.006281f, 0.021990f, -0.011564f, -0.013578f, 0.008850f, -0.003067f, 0.033697f, -0.006728f, -0.029825f, -0.010798f, 0.031386f, 0.001903f, 0.006031f, -0.030567f, -0.010747f, -0.005853f, 0.012676f, 0.016199f, -0.007980f, 0.005562f, 0.001327f, 0.012099f, 0.008053f, -0.001348f, 0.005516f, 0.016246f, 0.004061f, -0.000403f, -0.005368f, 0.001728f, 0.010879f, -0.000486f, 0.005562f, 0.018588f, 0.002814f, -0.006557f, -0.013794f, -0.001646f, 0.010105f, - -0.009730f, 0.005185f, -0.004444f, -0.002911f, -0.006528f, -0.008280f, -0.006427f, 0.000175f, 0.011698f, 0.009257f, -0.012678f, -0.023055f, -0.006948f, 0.008652f, 0.002994f, 0.003138f, 0.070553f, 0.044499f, -0.006317f, -0.041094f, 0.008647f, 0.020490f, 0.011806f, 0.029945f, 0.044943f, -0.019832f, 0.003700f, -0.040170f, 0.011374f, 0.003316f, -0.015592f, 0.072389f, 0.027428f, 0.062462f, 0.025780f, 0.016115f, -0.054430f, 0.000844f, 0.030347f, 0.005538f, -0.028981f, 0.012253f, -0.044298f, -0.017286f, 0.003032f, 0.013353f, -0.013279f, -0.008604f, 0.009584f, 0.007835f, 0.003181f, 0.039224f, 0.024346f, 0.006462f, -0.015719f, 0.027018f, -0.017583f, -0.012603f, -0.025843f, -0.008588f, 0.033664f, -0.053204f, -0.000838f, 0.023893f, -0.026573f, -0.008338f, 0.010108f, 0.008993f, 0.049118f, -0.002820f, -0.000578f, -0.022923f, 0.048022f, -0.021389f, 0.006043f, 0.005059f, 0.033245f, -0.007745f, -0.012040f, 0.031686f, -0.053462f, 0.013946f, 0.005094f, -0.022133f, 0.042699f, -0.053384f, -0.006806f, -0.017833f, -0.035888f, -0.017924f, -0.003214f, 0.015225f, 0.033536f, 0.055384f, 0.026979f, 0.036607f, - 0.055690f, -0.022650f, 0.010238f, 0.014041f, -0.023844f, 0.032246f, 0.000606f, -0.042639f, 0.022349f, 0.011861f, -0.015661f, 0.001525f, 0.032913f, 0.024951f, 0.007310f, 0.019700f, 0.005809f, 0.006462f, 0.018050f, -0.003186f, 0.007650f, 0.016216f, -0.003984f, 0.003617f, -0.003006f, -0.000839f, 0.011353f, 0.002337f, 0.001164f, -0.009892f, -0.005987f, -0.006821f, -0.014158f, 0.003167f, -0.007844f, -0.022454f, 0.008601f, 0.013647f, -0.004727f, -0.000123f, 0.005993f, -0.007680f, -0.000335f, 0.023956f, -0.003675f, -0.006535f, -0.015137f, -0.068379f, 0.018946f, 0.003602f, 0.082586f, 0.018862f, 0.015526f, -0.002267f, 0.040280f, 0.010874f, -0.060541f, -0.009294f, 0.064773f, -0.019190f, -0.013639f, 0.005465f, -0.004479f, 0.001472f, -0.011794f, 0.067456f, 0.076740f, -0.041263f, 0.018629f, 0.020664f, 0.011221f, 0.021803f, -0.033776f, -0.046654f, 0.035913f, 0.009872f, -0.025805f, -0.044601f, -0.013390f, -0.015143f, 0.040803f, 0.033352f, 0.018719f, -0.037759f, 0.020771f, -0.016355f, 0.013244f, 0.002278f, 0.017531f, 0.038478f, 0.008856f, -0.085992f, -0.026353f, 0.015811f, -0.034452f, 0.010491f, - 0.036496f, 0.012278f, 0.063551f, -0.021011f, -0.095454f, -0.002189f, -0.038051f, 0.033233f, 0.028830f, -0.010393f, -0.020300f, 0.029518f, -0.045838f, -0.008162f, -0.024765f, 0.021672f, 0.029854f, 0.025516f, 0.027737f, -0.020652f, -0.038842f, -0.115606f, -0.055278f, -0.067266f, 0.010637f, -0.045581f, -0.022097f, -0.009260f, -0.050156f, 0.026919f, -0.090302f, 0.028151f, -0.064935f, -0.047031f, 0.046323f, 0.054741f, -0.016807f, -0.002194f, 0.029648f, 0.038604f, -0.052997f, 0.001178f, 0.008689f, -0.007598f, 0.009361f, 0.028522f, -0.003629f, 0.012628f, -0.002400f, 0.011162f, -0.023427f, -0.012259f, -0.010679f, -0.015399f, -0.003347f, 0.022389f, 0.009297f, 0.020159f, 0.000763f, -0.021262f, -0.019333f, 0.003398f, 0.011744f, -0.004375f, 0.012471f, 0.013036f, 0.031406f, 0.003112f, 0.010810f, 0.003447f, 0.007492f, -0.013798f, -0.004229f, 0.005780f, -0.011228f, 0.000604f, -0.005142f, 0.001355f, 0.005835f, 0.032827f, -0.003012f, -0.019432f, -0.021565f, 0.002163f, -0.001220f, -0.034288f, -0.020107f, 0.014196f, -0.022550f, -0.001111f, -0.000291f, -0.089430f, -0.013154f, 0.059552f, -0.070687f, 0.007137f, - 0.026434f, 0.000956f, 0.018540f, -0.005075f, -0.055994f, -0.004466f, 0.030542f, 0.010484f, 0.045493f, 0.031041f, -0.048028f, -0.051769f, -0.006895f, -0.022273f, -0.007373f, -0.085474f, 0.032061f, 0.034192f, 0.059963f, 0.027476f, 0.054580f, -0.023397f, 0.007501f, 0.056269f, -0.017706f, 0.061219f, 0.016996f, 0.032463f, 0.010916f, -0.015367f, 0.030176f, -0.036883f, 0.001808f, 0.077308f, -0.059893f, 0.005670f, -0.077903f, -0.034949f, -0.056027f, -0.037974f, -0.009820f, 0.004216f, -0.018428f, -0.059268f, -0.010751f, -0.098521f, 0.111353f, 0.039164f, 0.000625f, -0.015009f, -0.026963f, 0.006246f, -0.049062f, 0.009115f, -0.073503f, 0.001724f, 0.003695f, 0.016453f, 0.047023f, 0.067839f, 0.002286f, -0.113738f, -0.052323f, 0.048757f, -0.024867f, -0.022723f, -0.027611f, -0.015137f, 0.056073f, 0.011657f, -0.031596f, 0.023544f, -0.052769f, 0.009147f, -0.010063f, -0.023440f, -0.053279f, -0.030178f, 0.033571f, -0.016075f, -0.012977f, 0.018043f, -0.019879f, -0.006240f, 0.033400f, -0.039264f, -0.026679f, -0.011530f, -0.008282f, 0.041976f, 0.019503f, 0.011320f, 0.024771f, 0.009668f, -0.004251f, 0.019302f, - -0.000572f, 0.014132f, 0.020182f, 0.031561f, -0.012491f, -0.000377f, -0.003701f, 0.023231f, 0.035347f, 0.013036f, -0.008713f, -0.002700f, -0.010973f, -0.025930f, 0.045210f, -0.013471f, 0.023195f, -0.013570f, 0.006995f, -0.014418f, -0.010522f, 0.011436f, 0.020525f, -0.044356f, 0.031424f, 0.050877f, 0.018737f, -0.023238f, -0.030949f, 0.014833f, -0.039955f, 0.063240f, 0.052655f, 0.080149f, -0.057171f, -0.070389f, -0.017705f, -0.001602f, -0.035643f, 0.047149f, 0.057151f, -0.042261f, -0.000179f, -0.075371f, -0.022293f, -0.035677f, -0.068107f, 0.021567f, 0.056148f, 0.034082f, -0.044285f, -0.017102f, 0.005150f, 0.037925f, 0.005629f, -0.002657f, 0.014184f, -0.004181f, -0.019185f, -0.060901f, -0.041407f, 0.015843f, -0.005734f, -0.033068f, 0.035999f, 0.032182f, 0.020398f, -0.062308f, -0.056974f, 0.054017f, 0.032502f, 0.040204f, -0.040675f, -0.103881f, -0.019674f, 0.043997f, 0.043485f, -0.010464f, 0.105240f, -0.012875f, 0.105793f, -0.158865f, -0.197258f, -0.080813f, -0.118850f, 0.001631f, 0.046286f, 0.024631f, 0.128480f, -0.014350f, -0.008439f, 0.024199f, -0.025716f, -0.101126f, -0.090360f, -0.100251f, - 0.080312f, 0.066093f, -0.024928f, -0.006514f, -0.168182f, 0.047138f, -0.002256f, -0.074744f, 0.031082f, 0.048401f, 0.074220f, 0.058593f, 0.026859f, -0.004858f, -0.050041f, 0.001812f, 0.002373f, -0.013664f, -0.021598f, 0.059651f, 0.036462f, 0.023426f, 0.060365f, -0.046250f, 0.011019f, -0.012712f, -0.028991f, 0.038209f, -0.006066f, -0.065796f, -0.000569f, 0.021189f, -0.023836f, 0.031711f, -0.012713f, 0.008726f, -0.014740f, 0.073735f, 0.057207f, 0.068337f, -0.057445f, -0.012689f, 0.070325f, 0.052414f, -0.050067f, -0.030559f, -0.050428f, -0.029342f, 0.041002f, 0.047010f, -0.016501f, -0.004433f, 0.078431f, 0.003619f, 0.007210f, -0.010010f, 0.013953f, 0.013850f, 0.012874f, 0.022594f, -0.076190f, 0.066479f, 0.050865f, 0.020700f, 0.062941f, -0.037032f, 0.023299f, -0.104087f, -0.050074f, 0.027190f, 0.038553f, 0.017476f, 0.013582f, 0.012778f, 0.027070f, -0.012787f, 0.118450f, 0.010507f, 0.073832f, 0.020996f, -0.035349f, 0.089963f, -0.012078f, 0.035225f, 0.002060f, 0.032131f, -0.003220f, -0.002116f, 0.019982f, 0.045049f, 0.013368f, 0.032860f, 0.002510f, -0.006996f, 0.071339f, 0.007913f, - -0.014812f, 0.001038f, -0.005412f, -0.036007f, -0.010065f, 0.019851f, 0.013418f, -0.080473f, -0.019434f, 0.009950f, 0.018752f, 0.083752f, 0.068585f, -0.083208f, -0.045578f, 0.006665f, -0.018207f, 0.092246f, 0.009187f, 0.085068f, -0.059866f, 0.042732f, 0.008814f, 0.004545f, 0.039753f, 0.087434f, 0.057009f, 0.011513f, 0.077613f, 0.030264f, -0.036330f, -0.078289f, 0.068616f, -0.062471f, 0.041535f, -0.082212f, 0.000461f, -0.130274f, 0.135113f, -0.033570f, 0.004727f, -0.091271f, 0.082032f, -0.031980f, 0.025995f, -0.067012f, 0.079226f, -0.041446f, -0.037210f, -0.027246f, -0.049772f, 0.015324f, -0.027892f, 0.023464f, -0.025866f, 0.043231f, -0.048628f, 0.043316f, -0.051203f, 0.028065f, -0.059957f, 0.047776f, -0.020743f, 0.053046f, -0.018615f, 0.027750f, -0.022676f, 0.017873f, -0.025867f, 0.000840f, -0.028270f, 0.032174f, 0.013107f, 0.009050f, -0.011338f, 0.003035f, -0.022611f, 0.017274f, -0.023233f, 0.040625f, -0.033805f, -0.040210f, -0.018216f, 0.016175f, -0.047798f, 0.036758f, -0.011914f, 0.020174f, -0.013700f, 0.011473f, -0.022081f, 0.010234f, -0.011477f, 0.012269f, -0.003782f, -0.130310f, - -0.032561f, -0.010102f, 0.013741f, 0.011698f, -0.081110f, -0.047126f, 0.073301f, -0.028427f, 0.027039f, -0.032436f, 0.007166f, 0.092084f, 0.148425f, 0.010293f, -0.005285f, 0.074554f, 0.032480f, 0.030881f, 0.091892f, 0.002071f, 0.055624f, 0.067502f, 0.064775f, -0.025397f, 0.027986f, 0.058352f, 0.081190f, 0.066483f, 0.099856f, 0.056432f, 0.127522f, 0.135387f, 0.097779f, 0.107954f, 0.073501f, -0.008042f, 0.035962f, 0.019152f, -0.028023f, -0.027613f, 0.021141f, 0.063038f, 0.014270f, 0.002919f, -0.000460f, 0.031162f, 0.093695f, 0.072957f, 0.157423f, 0.031791f, -0.081943f, 0.032674f, 0.001435f, 0.033408f, -0.042188f, 0.062637f, -0.114432f, -0.147340f, 0.041005f, 0.148159f, 0.064250f, 0.029603f, -0.183876f, 0.001061f, 0.069573f, 0.110949f, 0.148786f, -0.063352f, 0.008965f, -0.256936f, -0.169675f, 0.068627f, 0.095961f, -0.143123f, -0.122386f, -0.076163f, 0.140164f, 0.093654f, -0.168350f, -0.217045f, -0.044248f, 0.088317f, -0.104210f, 0.049352f, -0.016316f, -0.037634f, -0.056520f, 0.007658f, 0.021837f, 0.036420f, -0.007008f, -0.089947f, -0.078181f, 0.009432f, -0.024729f, 0.037517f, - 0.004569f, -0.009527f, -0.034743f, -0.022835f, 0.013565f, -0.002254f, -0.075302f, -0.037862f, -0.057188f, -0.029532f, 0.009485f, -0.029145f, -0.021920f, -0.067211f, -0.089672f, -0.122814f, -0.123067f, -0.103645f, -0.088544f, -0.097244f, -0.097054f, -0.074014f, -0.102357f, -0.108092f, -0.092459f, -0.103895f, -0.067769f, -0.018505f, -0.060283f, -0.086915f, -0.058175f, 0.002128f, -0.032487f, -0.017797f, -0.021680f, 0.044142f, 0.046641f, 0.000865f, 0.020185f, 0.023790f, 0.012762f, 0.013132f, -0.001344f, 0.009937f, 0.006606f, -0.049979f, 0.124657f, 0.137316f, -0.154968f, -0.066215f, 0.061613f, -0.044979f, 0.031556f, -0.058545f, 0.053649f, -0.049781f, 0.013688f, -0.001418f, -0.021484f, 0.010570f, 0.004621f, -0.016233f, -0.009103f, -0.040085f, -0.008363f, 0.007078f, 0.006697f, -0.040832f, 0.039456f, -0.037581f, -0.010507f, -0.032789f, 0.005575f, -0.031456f, 0.063194f, -0.002892f, 0.018175f, -0.018076f, 0.018124f, -0.019128f, 0.019418f, 0.035770f, 0.052865f, -0.015461f, 0.019062f, 0.017103f, 0.046647f, -0.029594f, 0.030711f, -0.026594f, 0.055645f, -0.015933f, -0.028611f, 0.015667f, -0.011517f, -0.018035f, - 0.007991f, -0.006530f, 0.024922f, -0.014102f, -0.028814f, -0.031581f, 0.006469f, 0.003937f, -0.051533f, 0.014393f, -0.006481f, -0.007177f, 0.010984f, -0.016912f, -0.007327f, 0.003556f, -0.006768f, 0.005468f, -0.026956f, 0.031730f, -0.093593f, 0.048402f, -0.038902f, 0.061937f, -0.041053f, 0.055229f, 0.001047f, 0.029072f, 0.019803f, 0.023241f, 0.013395f, 0.002191f, 0.012797f, -0.004108f, -0.038346f, -0.010505f, 0.003731f, -0.018392f, -0.005706f, -0.010680f, -0.002387f, 0.000059f, -0.013334f, -0.003483f, 0.007742f, -0.003723f, -0.022985f, 0.024565f, -0.002386f, 0.012014f, -0.024520f, 0.010523f, -0.014288f, 0.008597f, -0.017002f, 0.019739f, -0.025880f, 0.037570f, -0.005251f, 0.003025f, -0.038928f, 0.026105f, 0.000456f, 0.018224f, -0.036727f, 0.007263f, -0.013812f, 0.003364f, -0.005378f, 0.000938f, -0.023086f, 0.009932f, -0.002424f, -0.018964f, 0.004524f, 0.028976f, -0.033217f, -0.000876f, -0.011059f, 0.015499f, -0.022159f, 0.020606f, -0.017002f, 0.002788f, -0.011089f, 0.014600f, -0.003164f, 0.005895f, -0.003775f, 0.006802f, -0.010237f, 0.003473f, -0.002113f, -0.008251f, 0.003285f, 0.001041f, - 0.002795f, -0.003670f, 0.009750f, -0.002627f, 0.002308f, -0.007480f, 0.013788f, -0.018405f, 0.006187f, -0.025270f, 0.118374f, 0.071784f, -0.039027f, -0.044895f, -0.003932f, 0.147082f, 0.061453f, 0.020624f, 0.040716f, -0.035665f, -0.045022f, 0.012547f, 0.028554f, 0.007449f, 0.002591f, -0.015662f, -0.012204f, 0.013840f, 0.014111f, 0.034242f, 0.015240f, -0.018461f, -0.008139f, -0.009128f, -0.018608f, -0.000207f, 0.003283f, 0.009121f, 0.011611f, 0.000355f, -0.004940f, 0.013666f, -0.039479f, -0.015004f, 0.017563f, 0.025182f, 0.031223f, -0.017576f, -0.010226f, -0.018686f, 0.031936f, 0.022092f, -0.006047f, 0.010146f, -0.036909f, -0.031943f, 0.029470f, 0.022918f, 0.007229f, -0.055938f, -0.028759f, 0.002295f, 0.009318f, 0.036812f, 0.026319f, -0.004138f, 0.010824f, 0.013075f, -0.017487f, 0.015982f, 0.017341f, -0.005135f, -0.010672f, 0.010300f, -0.018724f, 0.001747f, -0.003205f, -0.013144f, -0.020059f, 0.027822f, 0.005685f, 0.006156f, 0.038328f, 0.046624f, 0.016504f, 0.037729f, 0.035321f, -0.005588f, -0.009551f, -0.010634f, -0.006823f, 0.014720f, 0.024092f, -0.009371f, 0.007409f, -0.021655f, - -0.007879f, -0.001082f, 0.005135f, -0.011820f, -0.014107f, 0.014564f, 0.027885f, 0.012049f, 0.007727f, 0.011669f, -0.013421f, 0.001077f, 0.013262f, 0.002586f, -0.004181f, 0.003333f, -0.001378f, -0.016265f, 0.033067f, 0.010766f, -0.026479f, -0.025011f, 0.010050f, -0.004968f, 0.026073f, 0.013796f, -0.003348f, 0.009735f, 0.003339f, -0.005405f, -0.001216f, -0.007546f, 0.007632f, 0.011959f, 0.001846f, -0.003141f, -0.010370f, 0.008861f, -0.002065f, -0.042465f, -0.117106f, 0.040564f, 0.215367f, 0.169339f, 0.162175f, 0.051849f, -0.150729f, -0.090426f, -0.133615f, -0.134055f, -0.122150f, -0.042640f, 0.065922f, 0.084939f, 0.133634f, 0.119675f, 0.072119f, 0.012118f, 0.011818f, -0.057891f, -0.091491f, -0.131015f, -0.050326f, -0.035555f, 0.011851f, -0.007368f, 0.066586f, 0.044940f, 0.019190f, 0.088936f, 0.050014f, 0.038081f, -0.007671f, 0.033420f, -0.060282f, -0.045490f, -0.037549f, -0.043936f, -0.057818f, -0.034867f, -0.023010f, -0.058878f, -0.040655f, 0.015677f, 0.086785f, 0.083716f, 0.095152f, 0.074692f, 0.108779f, 0.018842f, 0.027939f, -0.072208f, -0.053386f, -0.045830f, -0.108289f, -0.107905f, - -0.096750f, -0.045744f, -0.056653f, 0.013353f, 0.042137f, 0.060555f, 0.121726f, 0.119517f, 0.114464f, 0.102641f, 0.089893f, 0.019224f, -0.052674f, -0.085932f, -0.153465f, -0.131889f, -0.096115f, -0.131088f, -0.060752f, -0.027331f, 0.005888f, 0.128722f, 0.100960f, 0.148066f, 0.146322f, 0.106880f, 0.030007f, -0.029477f, -0.043619f, -0.050640f, -0.045111f, -0.087078f, -0.107684f, -0.075247f, -0.051350f, -0.045425f, 0.005823f, 0.030341f, 0.048279f, 0.041570f, 0.086800f, 0.094856f, 0.071737f, 0.057053f, 0.009623f, -0.019976f, -0.040789f, -0.066815f, -0.057375f, -0.040699f, -0.064092f, -0.086891f, -0.009088f, 0.005116f, -0.014206f, 0.075015f, 0.099003f, 0.063385f, 0.055703f, 0.004245f, 0.015828f, -0.010195f, -0.017300f, -0.043139f, -0.050710f, -0.033251f, -0.037873f, 0.005534f, -0.015043f, 0.005038f, 0.000875f, 0.034270f, 0.018492f, 0.017777f, 0.032048f, 0.032750f, 0.000204f, -0.008360f, -0.023002f, -0.022891f, -0.006421f, -0.004967f, -0.010993f, -0.010766f, 0.002418f, 0.003138f, -0.002499f, 0.006000f, 0.006444f, 0.006217f, 0.002059f, 0.021662f, 0.008178f, 0.000235f, 0.003860f, 0.000070f, - -0.006743f, -0.005685f, -0.005704f, -0.003118f, -0.001942f, 0.000467f, -0.000715f}, - {-0.006247f, -0.007775f, -0.011480f, 0.003879f, -0.005610f, -0.011332f, -0.007258f, 0.005155f, -0.014317f, -0.007933f, -0.017510f, 0.006085f, 0.007822f, 0.009960f, 0.005430f, -0.006128f, 0.013263f, -0.009081f, 0.002677f, 0.000278f, -0.001911f, -0.009596f, -0.004918f, -0.010554f, 0.000409f, -0.004486f, 0.005906f, 0.003913f, -0.005040f, -0.001609f, -0.001155f, -0.009687f, -0.000409f, -0.002153f, 0.004300f, -0.000172f, 0.008757f, -0.003118f, 0.011081f, -0.004800f, 0.000136f, 0.001785f, -0.008103f, 0.005629f, -0.002492f, -0.003108f, 0.000907f, -0.002190f, 0.004234f, -0.016968f, 0.007852f, 0.010222f, 0.001417f, 0.005811f, 0.003097f, -0.007509f, -0.001068f, -0.008149f, 0.011048f, -0.002933f, -0.007024f, 0.006715f, -0.010306f, 0.000458f, 0.003837f, -0.011575f, 0.001258f, -0.002697f, -0.004550f, 0.004015f, 0.000725f, 0.001092f, -0.005633f, -0.003467f, -0.018791f, -0.002231f, 0.003862f, -0.002922f, 0.000728f, 0.002403f, 0.009746f, 0.008580f, 0.000313f, 0.002926f, 0.001008f, -0.001454f, -0.001575f, -0.002339f, -0.001520f, -0.000630f, -0.002097f, -0.001541f, -0.000272f, 0.001992f, 0.001005f, 0.001406f, - -0.003082f, 0.000184f, -0.000298f, -0.000614f, -0.000404f, 0.000890f, -0.000618f, 0.000304f, -0.001595f, -0.000897f, -0.001447f, 0.000151f, -0.001372f, 0.001943f, -0.026588f, -0.015937f, 0.002921f, -0.008598f, 0.001613f, -0.008871f, -0.015286f, -0.010132f, 0.017288f, 0.010105f, -0.002714f, 0.011757f, 0.002731f, 0.002910f, 0.003261f, -0.005656f, -0.001577f, 0.009562f, -0.007707f, 0.004358f, 0.006926f, -0.007412f, -0.011798f, 0.005422f, -0.009649f, 0.001100f, 0.005485f, 0.014160f, -0.003213f, -0.006783f, -0.005989f, 0.002232f, 0.007659f, -0.010408f, -0.000113f, 0.008622f, 0.003357f, 0.000938f, -0.000594f, -0.000770f, 0.011132f, -0.000391f, 0.010196f, 0.006753f, -0.002620f, 0.006729f, -0.002381f, -0.000573f, -0.001069f, -0.018623f, 0.006434f, 0.010584f, -0.006129f, -0.003442f, 0.002547f, 0.002908f, 0.002971f, 0.001686f, -0.001039f, -0.002214f, 0.000607f, -0.004655f, 0.012752f, -0.005690f, 0.001462f, 0.006979f, 0.005522f, -0.004528f, 0.005021f, 0.001636f, 0.003263f, 0.007050f, 0.006162f, -0.009227f, 0.009574f, 0.010677f, -0.003630f, 0.000223f, -0.000693f, 0.006989f, -0.008523f, -0.004380f, - 0.001848f, 0.001261f, 0.000308f, 0.000505f, -0.001826f, -0.002811f, 0.001695f, -0.001304f, -0.000744f, 0.000544f, 0.002423f, -0.001757f, -0.000438f, 0.000106f, -0.003346f, 0.001190f, -0.001988f, -0.001996f, -0.001613f, 0.001302f, 0.000172f, -0.000904f, -0.002001f, 0.000530f, -0.010436f, 0.013369f, 0.008894f, 0.020731f, -0.003370f, 0.002151f, 0.006460f, -0.010201f, -0.002014f, 0.003949f, -0.004097f, -0.013826f, -0.000735f, 0.001398f, 0.009303f, -0.011185f, -0.027040f, -0.021982f, -0.013410f, 0.005131f, 0.012970f, -0.013066f, 0.007375f, -0.006453f, 0.010036f, 0.007653f, 0.006824f, 0.011853f, 0.006722f, -0.009457f, -0.008578f, 0.001527f, 0.006454f, -0.000590f, 0.000610f, 0.016611f, -0.000068f, 0.002808f, 0.008381f, 0.008678f, 0.001517f, 0.000144f, 0.020719f, -0.001555f, -0.007704f, -0.002445f, 0.004748f, 0.005914f, -0.003955f, 0.010992f, 0.002229f, 0.005846f, -0.007900f, -0.007163f, -0.002667f, -0.004778f, 0.002736f, -0.003817f, 0.012140f, -0.014087f, -0.012423f, 0.014969f, -0.001545f, -0.000762f, -0.017513f, 0.005322f, -0.008477f, 0.009335f, -0.007270f, -0.019575f, -0.000862f, 0.009860f, - -0.008294f, 0.012783f, -0.007750f, 0.005807f, 0.012100f, -0.003566f, 0.005074f, 0.012003f, -0.000776f, -0.009131f, 0.000770f, 0.005780f, 0.002768f, -0.004507f, 0.008386f, 0.000391f, 0.004426f, 0.001494f, 0.001211f, 0.002997f, 0.000581f, -0.001440f, -0.000085f, 0.000260f, 0.001281f, -0.003562f, -0.001721f, -0.001949f, 0.003212f, 0.000198f, 0.003271f, 0.003218f, -0.003182f, 0.000583f, 0.000818f, -0.002031f, -0.001375f, -0.000858f, 0.000598f, -0.001870f, 0.000655f, 0.032323f, 0.007708f, 0.008566f, 0.003785f, -0.007473f, 0.015625f, -0.007426f, -0.004326f, 0.019713f, -0.001412f, 0.015841f, -0.001603f, -0.018255f, 0.006510f, -0.006234f, 0.020144f, 0.010502f, -0.001324f, -0.018030f, -0.012490f, 0.016538f, 0.019762f, -0.023041f, 0.011591f, 0.009153f, 0.006999f, -0.001564f, 0.002307f, 0.001856f, -0.001670f, 0.022696f, -0.000960f, -0.003961f, -0.006201f, -0.007695f, -0.009667f, -0.003274f, -0.000445f, -0.013177f, -0.004597f, 0.003360f, -0.009065f, 0.000446f, 0.000598f, 0.013556f, -0.005036f, 0.000364f, 0.006407f, 0.000475f, 0.013090f, 0.005815f, 0.013607f, 0.006632f, 0.004193f, -0.014377f, - 0.001575f, -0.010669f, -0.009848f, 0.002312f, 0.013873f, -0.000600f, 0.011924f, -0.005030f, -0.008896f, -0.002142f, 0.000636f, 0.003430f, 0.008207f, -0.003822f, -0.000009f, -0.004512f, 0.004612f, 0.003055f, -0.011611f, 0.002214f, 0.002486f, 0.001493f, -0.003225f, 0.012158f, -0.001236f, -0.002444f, 0.001368f, 0.005676f, 0.002575f, -0.004068f, -0.001241f, -0.001681f, -0.002881f, 0.002344f, -0.003456f, 0.005708f, -0.003423f, -0.000739f, 0.000753f, -0.002778f, -0.000731f, 0.003151f, -0.003723f, -0.000914f, -0.004013f, 0.001527f, 0.001745f, 0.003219f, -0.004390f, 0.000832f, -0.001771f, 0.002196f, -0.001472f, -0.005358f, -0.001666f, 0.009143f, 0.006401f, 0.007355f, 0.020834f, 0.010908f, -0.009044f, -0.008078f, -0.022426f, -0.001448f, -0.000497f, -0.011959f, 0.004552f, 0.018008f, 0.002185f, -0.014168f, 0.013172f, 0.012525f, -0.001299f, 0.005016f, 0.012688f, 0.003020f, -0.011514f, -0.001762f, 0.026878f, 0.013235f, 0.002789f, -0.017707f, -0.006333f, 0.016190f, 0.005575f, -0.002394f, 0.009118f, 0.008162f, 0.008539f, -0.000046f, 0.016693f, -0.000127f, -0.002122f, 0.004228f, -0.008268f, -0.010830f, - -0.000530f, 0.001864f, 0.006220f, 0.003434f, -0.010124f, 0.010332f, 0.018105f, 0.009313f, -0.000474f, 0.013461f, -0.015267f, 0.008754f, -0.009085f, 0.009616f, -0.002528f, -0.010968f, -0.000533f, -0.014298f, -0.023437f, -0.008529f, -0.009295f, -0.001106f, -0.000069f, -0.012246f, 0.002414f, -0.003736f, 0.007160f, 0.004744f, 0.008475f, -0.001304f, 0.003433f, -0.011786f, 0.002088f, 0.001919f, 0.016524f, -0.006323f, -0.000479f, -0.005676f, 0.003524f, 0.014876f, 0.007664f, -0.008560f, -0.013726f, 0.004406f, -0.005462f, -0.001836f, 0.007216f, -0.000959f, 0.002459f, 0.001742f, -0.008149f, 0.000450f, -0.006204f, 0.001839f, -0.005889f, -0.003942f, -0.002108f, -0.000186f, -0.000741f, 0.001148f, -0.003746f, -0.000328f, -0.001219f, -0.002968f, -0.002498f, 0.000986f, -0.000600f, -0.001501f, 0.000477f, 0.001486f, 0.004633f, -0.001537f, 0.002743f, -0.001894f, -0.004516f, 0.003488f, -0.004946f, 0.004916f, -0.000373f, -0.003156f, -0.000465f, -0.021940f, -0.014547f, 0.031098f, -0.006822f, -0.006793f, 0.001804f, -0.001064f, 0.033295f, -0.009713f, -0.017994f, 0.000465f, -0.017751f, 0.004447f, 0.014124f, 0.015230f, - 0.004790f, -0.030895f, 0.025402f, -0.019982f, 0.010615f, -0.013652f, -0.010412f, -0.007631f, 0.012677f, 0.013673f, -0.020474f, 0.001646f, 0.008923f, -0.006324f, 0.004085f, 0.006032f, -0.007408f, 0.000972f, -0.016863f, -0.011299f, -0.026021f, 0.015428f, -0.003649f, 0.026246f, -0.012225f, 0.005716f, 0.017500f, -0.004350f, -0.005209f, -0.007727f, 0.020060f, 0.014676f, -0.024647f, 0.007054f, -0.013943f, -0.004655f, -0.005419f, -0.013815f, 0.008307f, 0.004432f, 0.021695f, 0.015296f, -0.027262f, -0.004445f, -0.011712f, 0.015947f, 0.005539f, 0.001392f, -0.015908f, 0.002404f, -0.001676f, 0.013405f, -0.002239f, 0.001697f, -0.018294f, -0.000397f, 0.012986f, -0.011958f, 0.002009f, -0.003760f, -0.003572f, -0.009661f, 0.001946f, -0.001255f, 0.023024f, 0.010172f, 0.010530f, -0.004198f, -0.002573f, -0.003984f, -0.006273f, -0.003349f, 0.005137f, -0.007031f, -0.002242f, -0.006897f, 0.005227f, 0.004403f, -0.003759f, -0.002102f, 0.004861f, -0.006495f, 0.003229f, 0.001003f, -0.001748f, -0.002056f, 0.001748f, -0.000170f, -0.000588f, -0.001238f, 0.004253f, -0.006269f, 0.000839f, 0.000574f, 0.003186f, 0.003448f, - 0.003449f, -0.003180f, 0.000950f, -0.002243f, 0.004607f, 0.001078f, 0.003378f, 0.007565f, -0.008340f, 0.000554f, -0.017599f, -0.002222f, -0.020311f, 0.003159f, -0.005084f, 0.011642f, -0.000817f, 0.009873f, -0.013915f, -0.026228f, 0.005563f, 0.017606f, 0.002304f, -0.002153f, 0.013751f, 0.009227f, -0.021431f, -0.000373f, -0.008081f, 0.027098f, -0.001209f, 0.003128f, 0.002128f, 0.000245f, -0.000853f, -0.009767f, 0.021495f, -0.001862f, -0.030482f, -0.005759f, 0.018464f, -0.011938f, 0.003074f, -0.000525f, 0.002462f, -0.003857f, 0.002934f, -0.005650f, 0.007276f, -0.011734f, 0.011000f, 0.015399f, -0.012118f, -0.003135f, -0.007178f, -0.021272f, 0.008485f, -0.015119f, 0.013102f, -0.013297f, -0.022915f, -0.006313f, 0.013597f, -0.004309f, -0.008196f, 0.009040f, 0.012571f, 0.007140f, 0.013778f, 0.023537f, 0.018991f, -0.001289f, 0.003682f, 0.003153f, -0.012681f, 0.002347f, -0.013260f, -0.014497f, 0.007853f, -0.011077f, 0.003560f, -0.000726f, 0.008278f, 0.008358f, -0.010972f, 0.012644f, -0.003505f, -0.005297f, -0.002371f, 0.008865f, -0.001670f, -0.008346f, -0.005659f, -0.011786f, 0.013348f, -0.006801f, - -0.001785f, 0.002215f, -0.000583f, -0.005049f, -0.004249f, 0.000804f, 0.001741f, 0.000488f, -0.002370f, 0.002989f, 0.002240f, -0.002733f, 0.000208f, 0.001883f, 0.001183f, -0.001710f, -0.000073f, -0.002261f, 0.000805f, -0.003715f, -0.003353f, 0.001924f, 0.000995f, 0.004334f, 0.004835f, 0.000297f, 0.003314f, -0.000079f, -0.030131f, -0.024908f, 0.014462f, 0.027025f, -0.000144f, -0.001388f, 0.004979f, -0.012698f, -0.006390f, -0.030802f, -0.016645f, -0.008580f, -0.000429f, -0.022345f, 0.032118f, 0.006620f, 0.017812f, -0.020350f, -0.024672f, -0.018241f, -0.007328f, 0.005125f, -0.027988f, -0.012252f, 0.012752f, -0.005305f, -0.034012f, -0.011267f, 0.004417f, 0.000581f, 0.020861f, 0.007289f, -0.006748f, -0.015834f, 0.019837f, -0.011371f, -0.001314f, 0.015291f, 0.004311f, -0.016170f, -0.008566f, -0.001041f, -0.027558f, 0.007138f, 0.021177f, -0.009044f, -0.011906f, 0.003348f, -0.014012f, -0.004884f, 0.002623f, -0.008602f, -0.006892f, 0.007470f, -0.010473f, -0.021623f, 0.010687f, -0.012224f, -0.016433f, -0.022160f, -0.011322f, 0.002485f, -0.009065f, 0.003979f, 0.027454f, 0.015827f, -0.003462f, 0.026537f, - 0.026586f, -0.011294f, 0.003615f, 0.007678f, -0.013922f, -0.008707f, -0.029376f, 0.003289f, -0.009467f, -0.023405f, -0.000321f, 0.012746f, 0.021958f, 0.013843f, 0.006396f, 0.002743f, -0.019974f, -0.002210f, -0.004607f, 0.005505f, -0.007591f, -0.000580f, 0.000409f, 0.000008f, 0.004740f, 0.001226f, -0.001853f, 0.004575f, -0.001816f, -0.005972f, 0.005009f, -0.003901f, -0.005668f, 0.001164f, 0.002035f, 0.002198f, 0.000417f, 0.006425f, -0.000649f, 0.004227f, 0.002269f, 0.000784f, 0.001215f, 0.000285f, -0.004769f, 0.001394f, -0.006547f, 0.001843f, -0.010447f, -0.002270f, -0.000466f, -0.006550f, -0.008182f, -0.000739f, -0.008086f, -0.001169f, -0.001721f, -0.018973f, 0.048496f, -0.001809f, 0.029698f, -0.014887f, -0.042641f, 0.012258f, 0.003586f, -0.001574f, -0.020030f, -0.001847f, -0.013218f, 0.033813f, 0.024613f, 0.022166f, 0.016056f, -0.026322f, -0.000229f, 0.003738f, 0.023393f, -0.040015f, -0.004625f, -0.009715f, -0.011797f, 0.006132f, -0.013290f, 0.005257f, 0.008864f, 0.006750f, 0.007069f, 0.009406f, -0.002863f, -0.003841f, -0.019584f, -0.004540f, -0.003053f, 0.019270f, -0.000075f, -0.017432f, - -0.004199f, 0.020960f, -0.002502f, 0.012241f, 0.015515f, -0.011191f, -0.006762f, -0.025734f, -0.015096f, 0.050693f, 0.013250f, 0.022622f, 0.012023f, 0.003044f, 0.001829f, -0.031943f, 0.018927f, 0.003118f, 0.005505f, 0.016479f, 0.017778f, 0.027906f, -0.032062f, -0.013097f, -0.017824f, -0.002129f, 0.004367f, -0.004111f, -0.009036f, -0.005136f, -0.026898f, -0.033605f, -0.021966f, -0.031488f, -0.004169f, -0.020541f, -0.035449f, -0.014843f, 0.011434f, 0.019495f, -0.007434f, -0.030148f, -0.001137f, -0.004458f, 0.007108f, -0.008209f, 0.001889f, 0.017506f, 0.000744f, -0.001168f, -0.001135f, 0.002323f, 0.003007f, -0.005032f, -0.004675f, -0.012054f, -0.013682f, 0.007368f, -0.003790f, 0.006604f, 0.005832f, -0.002114f, 0.003959f, 0.005463f, 0.009755f, 0.007053f, -0.004302f, 0.002254f, 0.012446f, 0.002504f, -0.012664f, -0.010344f, -0.005738f, -0.002542f, 0.000917f, -0.004349f, 0.007198f, 0.008066f, -0.001948f, 0.012124f, 0.001559f, -0.003272f, -0.002607f, 0.002880f, 0.065267f, 0.014766f, -0.009418f, -0.013555f, 0.002097f, -0.020958f, -0.040931f, 0.030116f, 0.000131f, 0.019377f, -0.014664f, 0.014013f, - 0.033501f, -0.003331f, 0.003733f, -0.008456f, 0.029155f, 0.024534f, 0.009518f, -0.039537f, 0.002848f, 0.005792f, 0.024408f, 0.035517f, -0.010509f, -0.007301f, -0.004719f, 0.009502f, 0.012670f, 0.010522f, -0.017998f, 0.008182f, -0.020745f, 0.015816f, 0.021133f, -0.010152f, -0.020987f, 0.013191f, -0.022836f, -0.020905f, -0.000912f, 0.006013f, 0.029671f, 0.003539f, -0.004113f, 0.025262f, -0.004740f, 0.022683f, 0.041966f, 0.021003f, 0.000429f, -0.026736f, -0.002591f, -0.015428f, -0.012511f, 0.026780f, 0.010430f, -0.027120f, -0.000377f, -0.020751f, -0.005307f, 0.035516f, 0.016302f, 0.005116f, 0.015168f, 0.021359f, 0.011041f, -0.028770f, 0.014715f, 0.023862f, 0.008131f, -0.019690f, 0.008006f, 0.002192f, 0.004022f, -0.015431f, 0.023582f, -0.006604f, -0.005776f, 0.028367f, 0.030073f, 0.004355f, 0.008491f, 0.032698f, 0.001833f, 0.016093f, -0.011599f, -0.000451f, 0.018790f, 0.010842f, -0.008470f, 0.009647f, 0.016945f, -0.004723f, 0.000030f, 0.021628f, 0.004380f, 0.009145f, -0.006545f, -0.010974f, -0.003411f, 0.005958f, 0.003043f, 0.004892f, 0.005020f, -0.003666f, -0.003517f, -0.002936f, - 0.001555f, 0.006403f, 0.007752f, -0.005400f, -0.001715f, 0.013431f, 0.001861f, 0.018045f, -0.003393f, 0.004830f, -0.002593f, 0.002210f, 0.008051f, 0.004878f, 0.000534f, -0.000243f, -0.007821f, -0.005516f, -0.004021f, -0.008343f, 0.010422f, 0.009512f, -0.015926f, -0.000738f, -0.020322f, -0.047591f, 0.016409f, -0.018911f, 0.005219f, 0.001768f, 0.033360f, -0.022933f, -0.020405f, -0.008464f, -0.009359f, -0.012211f, 0.024640f, -0.021774f, -0.030912f, 0.009332f, -0.057731f, 0.001797f, -0.010897f, -0.024296f, 0.031011f, -0.001875f, -0.001857f, 0.013177f, -0.012319f, 0.009937f, -0.003134f, -0.034334f, -0.037627f, -0.000247f, 0.007939f, 0.022183f, 0.010651f, -0.002374f, -0.003961f, -0.021530f, -0.010255f, 0.021905f, -0.034015f, 0.047103f, 0.027907f, 0.006429f, 0.034747f, -0.023019f, -0.009899f, -0.021057f, -0.021663f, -0.009218f, 0.015897f, 0.044509f, 0.000443f, -0.022735f, -0.003804f, 0.002338f, -0.002419f, -0.002192f, -0.014023f, 0.012141f, 0.011053f, 0.030080f, -0.000474f, 0.033990f, 0.017501f, 0.009483f, -0.000758f, 0.007409f, -0.050389f, 0.026824f, -0.006323f, -0.029336f, 0.021188f, 0.000183f, - 0.027864f, 0.012528f, -0.046660f, 0.036517f, 0.028469f, -0.024259f, 0.039542f, 0.015391f, 0.029584f, 0.011900f, -0.003942f, -0.001408f, -0.001076f, -0.005278f, -0.010135f, -0.002919f, 0.004536f, -0.010065f, -0.015491f, 0.000392f, -0.010029f, -0.018170f, -0.010791f, -0.013542f, 0.008971f, -0.008220f, 0.010992f, 0.003144f, 0.011223f, 0.005465f, -0.000950f, -0.005600f, 0.002163f, 0.001328f, -0.000546f, 0.001818f, -0.002946f, -0.007356f, 0.004006f, -0.000404f, 0.004835f, 0.005168f, 0.000554f, 0.004420f, 0.002290f, 0.007405f, 0.006486f, -0.010782f, -0.006250f, -0.018031f, -0.013659f, -0.088952f, -0.007257f, 0.053165f, -0.010120f, 0.001848f, 0.045818f, -0.010453f, 0.000149f, 0.005920f, 0.011934f, -0.013619f, 0.011906f, -0.004502f, -0.015818f, 0.015173f, 0.017162f, -0.051865f, 0.005763f, -0.046126f, -0.001658f, -0.023761f, -0.026618f, -0.005469f, -0.008282f, -0.025181f, 0.012356f, 0.004495f, 0.015690f, 0.022236f, -0.032050f, 0.040106f, 0.002348f, -0.036965f, 0.002658f, -0.025425f, -0.013398f, -0.027367f, -0.025595f, -0.010567f, 0.025989f, -0.022430f, 0.012168f, 0.027030f, -0.016429f, -0.028183f, - -0.026700f, -0.038216f, -0.041977f, -0.024088f, -0.012249f, 0.003567f, -0.006702f, 0.011785f, 0.007456f, -0.024308f, -0.002223f, 0.028059f, 0.015501f, -0.040619f, 0.015662f, -0.002771f, -0.011831f, -0.037606f, 0.025198f, -0.013269f, 0.034938f, 0.045076f, 0.000748f, 0.042893f, -0.023834f, 0.025029f, -0.018851f, 0.026891f, 0.033355f, 0.003291f, -0.044896f, -0.001009f, -0.061115f, 0.020021f, 0.012714f, 0.024473f, 0.011007f, -0.023406f, -0.021107f, -0.000005f, -0.014299f, 0.014116f, -0.015434f, -0.000114f, -0.001368f, -0.014515f, -0.012121f, 0.010665f, -0.006286f, -0.016462f, -0.002047f, 0.005690f, 0.012145f, 0.007191f, 0.026857f, -0.002385f, 0.001858f, -0.007671f, 0.018705f, -0.002245f, -0.004595f, 0.017273f, -0.001371f, 0.002996f, 0.003551f, 0.023137f, -0.004088f, -0.008714f, 0.001901f, 0.016149f, 0.014332f, -0.014368f, -0.001896f, 0.010859f, -0.017693f, 0.010175f, -0.003233f, 0.012895f, 0.000281f, -0.014111f, -0.042051f, 0.033908f, -0.080572f, -0.005206f, -0.007363f, -0.007178f, 0.007852f, -0.046897f, 0.003585f, -0.009593f, -0.003651f, 0.020769f, 0.008659f, 0.024231f, -0.018766f, 0.017009f, - -0.008810f, -0.041744f, -0.016351f, -0.030770f, -0.018568f, 0.019509f, -0.035787f, 0.004244f, -0.013097f, -0.027787f, -0.004621f, 0.026212f, -0.035598f, -0.034966f, 0.014353f, 0.020220f, -0.000929f, -0.016811f, 0.019552f, 0.019921f, 0.025223f, 0.021039f, 0.009140f, 0.028983f, 0.035159f, -0.019301f, 0.005434f, -0.017090f, 0.044045f, -0.004095f, -0.030169f, 0.036037f, 0.016219f, 0.008239f, -0.017216f, -0.023645f, 0.005548f, 0.013358f, 0.014153f, -0.001813f, -0.018959f, 0.013926f, -0.022108f, 0.000039f, -0.021823f, 0.067145f, 0.010570f, -0.020098f, 0.055751f, -0.007443f, 0.017119f, -0.015063f, 0.028036f, 0.040906f, -0.025738f, 0.039037f, 0.042200f, 0.054336f, 0.042304f, 0.003260f, 0.031424f, -0.025286f, -0.004813f, 0.005196f, -0.013597f, 0.023566f, 0.001114f, -0.002303f, -0.002412f, -0.007824f, 0.011839f, 0.005212f, 0.033332f, -0.011711f, 0.012304f, -0.008129f, 0.000188f, 0.005473f, 0.009799f, -0.014875f, 0.005141f, 0.013116f, -0.006112f, -0.016625f, -0.003122f, -0.026170f, 0.008685f, 0.006996f, 0.006782f, -0.007573f, 0.004102f, 0.012361f, 0.007396f, -0.004147f, 0.012646f, 0.004774f, - -0.008421f, -0.005204f, -0.002786f, 0.019852f, 0.026985f, 0.013425f, 0.006126f, 0.003851f, 0.009132f, 0.015066f, -0.010933f, -0.005405f, 0.007123f, -0.002785f, 0.001315f, 0.006327f, 0.083275f, 0.021943f, -0.014362f, -0.011992f, 0.019234f, 0.005773f, 0.008114f, -0.001760f, -0.033488f, 0.028269f, -0.076265f, 0.008626f, 0.016572f, -0.003065f, -0.014061f, -0.028876f, -0.013555f, 0.003806f, 0.022421f, 0.034843f, -0.020585f, -0.043991f, -0.035977f, -0.004770f, 0.001162f, -0.025802f, 0.053559f, -0.024741f, -0.016574f, 0.022497f, -0.007713f, 0.004307f, -0.004981f, 0.046413f, 0.007530f, -0.045905f, 0.018145f, 0.006172f, 0.031819f, -0.011108f, 0.003296f, -0.018805f, 0.015721f, 0.007352f, 0.040155f, -0.009519f, 0.018027f, 0.019436f, -0.024547f, -0.026569f, 0.001741f, 0.024788f, -0.047642f, -0.055841f, -0.016698f, -0.022758f, -0.003208f, -0.007845f, 0.005409f, 0.013030f, -0.011560f, 0.002221f, -0.065008f, -0.054774f, 0.043617f, 0.046813f, -0.056333f, -0.042869f, -0.054225f, -0.028003f, -0.022558f, 0.028295f, -0.029686f, -0.051834f, 0.001349f, 0.002524f, -0.032064f, -0.006520f, 0.045208f, -0.006580f, - 0.002342f, 0.014857f, -0.000646f, 0.002851f, -0.002182f, -0.015822f, -0.020115f, -0.000833f, -0.005838f, 0.013295f, -0.002282f, -0.001031f, -0.014611f, 0.007455f, -0.022505f, -0.000317f, 0.006647f, 0.007611f, 0.010561f, 0.012353f, 0.002083f, 0.007073f, -0.005143f, 0.001327f, -0.011542f, 0.004302f, 0.000972f, -0.012680f, 0.012990f, 0.013303f, -0.020828f, 0.001412f, 0.014908f, 0.012579f, 0.023135f, -0.004720f, -0.027261f, 0.007631f, 0.008680f, -0.013282f, 0.008429f, -0.014812f, -0.007181f, -0.002253f, -0.004883f, -0.012603f, 0.004422f, -0.046453f, -0.005653f, -0.011253f, 0.013988f, -0.022013f, -0.005972f, -0.072230f, 0.063962f, 0.041076f, -0.006924f, 0.087677f, -0.008594f, -0.048114f, -0.004414f, 0.019666f, -0.029710f, -0.039248f, -0.008225f, -0.026800f, -0.001240f, 0.007432f, -0.040280f, 0.059117f, 0.001993f, 0.006332f, -0.037160f, -0.010751f, 0.004029f, -0.010663f, 0.009506f, 0.013433f, 0.048638f, 0.008670f, -0.002466f, 0.039248f, 0.032436f, -0.011531f, 0.019137f, -0.024863f, 0.007018f, 0.021932f, 0.021386f, 0.054921f, -0.054333f, 0.033353f, 0.100826f, 0.000681f, 0.016566f, 0.034438f, - 0.003957f, 0.006802f, 0.016301f, 0.012494f, -0.033678f, -0.040216f, -0.014588f, 0.032227f, 0.009638f, -0.041794f, -0.022595f, -0.001899f, -0.020035f, 0.037030f, 0.003415f, 0.028579f, -0.063640f, -0.039509f, 0.018566f, 0.043573f, 0.026746f, 0.017502f, 0.060526f, 0.035263f, -0.025415f, 0.041597f, -0.031411f, -0.006495f, -0.004515f, 0.023336f, -0.004938f, -0.026123f, 0.022596f, 0.009723f, 0.002161f, -0.029952f, 0.020666f, -0.000581f, 0.000401f, -0.013447f, 0.017416f, -0.014349f, -0.011473f, -0.011041f, 0.008300f, -0.011521f, -0.021859f, 0.007178f, 0.001533f, -0.000315f, -0.011899f, -0.002482f, -0.014901f, -0.012931f, -0.011919f, -0.007697f, -0.004602f, -0.005787f, -0.004539f, 0.001914f, 0.000422f, -0.028425f, 0.018960f, 0.007265f, -0.008927f, -0.021097f, -0.029758f, -0.000943f, -0.016213f, -0.011148f, 0.010742f, -0.008077f, 0.018428f, 0.008955f, -0.006506f, 0.002974f, 0.017234f, -0.007999f, -0.002878f, -0.008535f, 0.014521f, 0.003174f, 0.006027f, -0.014970f, 0.029312f, -0.083496f, 0.001256f, -0.000054f, -0.003227f, -0.010156f, 0.038701f, 0.003599f, -0.023119f, -0.041634f, 0.042103f, -0.037393f, - 0.000441f, 0.027834f, 0.021481f, -0.029315f, -0.008518f, -0.047493f, -0.000759f, 0.014144f, 0.016176f, 0.019816f, 0.004555f, -0.030804f, -0.039459f, 0.032394f, 0.015967f, 0.016323f, 0.005714f, 0.016594f, 0.004304f, 0.023940f, -0.042523f, -0.070656f, 0.019132f, -0.010368f, -0.015691f, 0.039970f, -0.007515f, -0.020777f, 0.034455f, 0.033377f, 0.026861f, -0.002200f, -0.018446f, -0.030227f, -0.008483f, -0.040090f, 0.094396f, -0.007785f, 0.033608f, 0.007653f, -0.032148f, 0.026207f, -0.012675f, -0.029938f, 0.029061f, 0.023854f, -0.052872f, 0.036733f, -0.006196f, 0.050836f, -0.051761f, -0.038301f, 0.050930f, -0.001826f, -0.042393f, 0.042929f, -0.016298f, 0.073123f, -0.031581f, -0.024753f, -0.044643f, 0.028207f, 0.004500f, -0.035510f, 0.013600f, -0.046238f, -0.034637f, 0.003337f, 0.029480f, -0.026406f, -0.017019f, -0.052563f, -0.048587f, 0.056483f, -0.007191f, 0.024775f, 0.038723f, 0.053607f, -0.000459f, -0.005111f, -0.004860f, 0.014372f, 0.020682f, 0.004288f, 0.009089f, 0.033128f, 0.013646f, 0.018392f, 0.009988f, 0.008537f, -0.007186f, -0.002742f, 0.019439f, 0.015697f, 0.025707f, -0.012224f, - 0.016673f, 0.018740f, -0.029695f, 0.007690f, 0.006474f, -0.015433f, -0.008863f, 0.000277f, 0.006461f, -0.012478f, 0.020002f, 0.001472f, -0.005649f, -0.005619f, 0.016830f, 0.000995f, 0.004656f, 0.001940f, 0.004088f, 0.004337f, -0.017064f, -0.007723f, 0.011474f, -0.010244f, -0.024101f, 0.062353f, -0.014261f, 0.042248f, -0.066026f, -0.011536f, -0.001573f, -0.078673f, -0.017351f, 0.011466f, 0.038648f, -0.019309f, -0.018498f, 0.001788f, -0.006102f, 0.055349f, -0.005285f, -0.027708f, 0.058600f, -0.007186f, -0.003033f, 0.011153f, -0.023417f, 0.050758f, 0.003356f, -0.010234f, 0.024285f, 0.020904f, -0.027624f, -0.009360f, -0.012798f, 0.039571f, -0.078808f, -0.001219f, -0.015244f, -0.027692f, 0.013557f, -0.028152f, 0.045971f, -0.011888f, -0.056747f, -0.005738f, 0.086408f, -0.052198f, 0.037917f, -0.058207f, -0.016709f, 0.058315f, 0.042589f, -0.031162f, 0.014865f, -0.038040f, -0.050137f, 0.010914f, -0.021970f, 0.022133f, 0.006475f, -0.003286f, 0.008706f, -0.073386f, -0.028627f, -0.037289f, -0.053642f, 0.025252f, -0.020248f, -0.014728f, -0.029647f, -0.052045f, -0.043783f, 0.034733f, -0.006669f, 0.107763f, - 0.019074f, 0.010210f, 0.038622f, 0.067890f, 0.009095f, -0.048470f, 0.059570f, 0.045187f, -0.037658f, 0.010348f, -0.009333f, -0.037466f, -0.029485f, -0.025209f, -0.002631f, -0.022979f, 0.009069f, 0.016160f, 0.005837f, -0.017819f, 0.031895f, 0.005266f, 0.014912f, -0.003972f, -0.005181f, 0.015317f, 0.009503f, -0.014769f, -0.013259f, -0.012710f, 0.014855f, 0.007281f, 0.017886f, 0.018946f, 0.001100f, -0.009569f, 0.014486f, -0.007641f, 0.030637f, 0.014730f, -0.035896f, -0.006762f, -0.026358f, 0.003659f, -0.008342f, -0.012521f, 0.038300f, -0.001598f, -0.011341f, 0.010133f, 0.012335f, -0.013348f, -0.002332f, -0.018521f, 0.008901f, 0.014170f, -0.002168f, -0.005527f, 0.018093f, 0.041343f, -0.024290f, -0.032082f, 0.035970f, -0.056875f, -0.006165f, -0.012055f, 0.003786f, 0.039341f, -0.025568f, 0.043707f, 0.019368f, 0.009616f, 0.013644f, -0.072436f, 0.049392f, 0.008727f, -0.050192f, 0.019422f, -0.053268f, 0.008762f, 0.072559f, -0.009348f, -0.042219f, -0.045822f, 0.019850f, 0.032353f, 0.026905f, 0.013703f, -0.047098f, -0.032963f, -0.014277f, -0.009220f, 0.062043f, -0.039373f, -0.022944f, 0.091331f, - -0.050513f, -0.004296f, 0.036797f, -0.000186f, 0.038738f, -0.005945f, -0.030443f, -0.021048f, -0.055687f, 0.028321f, 0.040354f, -0.060217f, 0.089970f, 0.029481f, -0.067090f, -0.061914f, -0.058299f, -0.070699f, -0.056498f, 0.002624f, 0.028538f, 0.005222f, -0.047013f, -0.018249f, 0.032073f, -0.001143f, -0.029306f, 0.032413f, -0.063437f, 0.003785f, -0.014300f, -0.059290f, -0.054690f, 0.009273f, -0.021531f, 0.041392f, -0.075996f, -0.010538f, -0.026680f, -0.056187f, 0.004191f, 0.089792f, 0.023456f, -0.040102f, 0.019711f, -0.049312f, 0.020260f, -0.020178f, 0.002078f, 0.002450f, 0.025834f, -0.002973f, 0.009052f, 0.031851f, 0.000662f, -0.018010f, -0.007864f, 0.025496f, 0.018526f, 0.011624f, 0.006600f, -0.050757f, -0.004844f, 0.003608f, 0.028600f, 0.013942f, -0.025910f, -0.000701f, 0.003278f, 0.043947f, 0.002734f, 0.013982f, -0.013388f, -0.008889f, 0.006766f, 0.014221f, -0.001568f, -0.013215f, -0.024544f, 0.003461f, -0.009163f, -0.017306f, 0.008661f, -0.012120f, -0.012035f, 0.016934f, -0.013532f, -0.019927f, -0.027164f, -0.024334f, -0.004299f, 0.006981f, 0.000255f, -0.021169f, 0.043746f, -0.109513f, - -0.101285f, -0.087786f, -0.056741f, 0.022960f, -0.023980f, 0.112927f, 0.029811f, -0.012034f, -0.025908f, -0.014244f, 0.031946f, -0.073419f, 0.085967f, 0.113791f, 0.045199f, -0.006833f, 0.089909f, -0.028497f, 0.054362f, 0.103432f, -0.018903f, 0.005757f, 0.019335f, 0.137643f, -0.034925f, -0.008618f, 0.081732f, 0.031093f, 0.026253f, -0.022472f, -0.083891f, 0.005869f, -0.066496f, 0.031802f, -0.082388f, -0.096348f, -0.001189f, -0.005426f, -0.067366f, -0.003468f, -0.032782f, -0.068915f, -0.055196f, -0.089948f, -0.004324f, 0.092032f, -0.029363f, -0.017494f, -0.084786f, -0.045300f, -0.031249f, -0.028962f, 0.028648f, -0.020647f, 0.153006f, -0.036093f, -0.002156f, -0.055742f, 0.115468f, 0.095049f, -0.067152f, 0.077334f, -0.027036f, -0.112037f, -0.020094f, -0.010614f, 0.023579f, -0.025903f, -0.025508f, -0.013911f, -0.045534f, 0.013372f, 0.056271f, -0.066332f, -0.009493f, 0.019496f, 0.011645f, -0.077044f, 0.050267f, 0.035772f, 0.116041f, -0.049138f, 0.031843f, 0.049372f, -0.002901f, 0.013928f, -0.001486f, 0.017446f, -0.012848f, 0.038236f, 0.015991f, 0.031155f, 0.026076f, 0.003050f, 0.026864f, 0.009314f, - -0.009938f, 0.029238f, -0.001590f, 0.005837f, 0.003198f, 0.020841f, 0.014671f, -0.019585f, -0.016132f, -0.025134f, 0.040460f, -0.025935f, 0.006186f, 0.026102f, 0.010624f, 0.046263f, 0.038717f, 0.068308f, 0.045955f, 0.039532f, 0.002893f, 0.026643f, -0.034777f, 0.033969f, 0.024403f, -0.006079f, -0.033366f, -0.061657f, -0.024393f, 0.020421f, -0.034965f, -0.011230f, -0.025234f, -0.060131f, -0.053451f, -0.023358f, -0.039613f, -0.021702f, -0.033978f, -0.041695f, -0.045977f, -0.012111f, -0.012714f, -0.018357f, -0.033488f, -0.033767f, 0.045531f, 0.195491f, 0.021919f, -0.121142f, -0.031034f, -0.042244f, 0.008650f, 0.061680f, 0.108528f, 0.032157f, -0.092328f, -0.000793f, 0.062816f, 0.014770f, 0.000785f, -0.001847f, 0.015986f, -0.007743f, -0.011686f, 0.076451f, 0.046744f, 0.043180f, -0.064610f, -0.040531f, 0.043167f, 0.017966f, 0.025321f, -0.021142f, 0.007616f, 0.085148f, 0.001586f, 0.072384f, 0.037078f, 0.040019f, 0.069294f, 0.011253f, -0.037289f, 0.009733f, -0.042631f, 0.011811f, 0.029215f, 0.008698f, 0.113631f, -0.036802f, -0.073638f, -0.069547f, 0.087757f, 0.041800f, 0.046674f, 0.033265f, - -0.050541f, -0.062001f, -0.038666f, -0.000917f, 0.019059f, -0.012567f, 0.030975f, 0.059561f, -0.004062f, 0.043547f, 0.038378f, -0.057765f, -0.011697f, 0.018105f, -0.027655f, -0.023696f, -0.029006f, -0.096099f, -0.016400f, 0.043422f, 0.003804f, 0.086314f, 0.056798f, -0.039948f, 0.030226f, 0.001760f, -0.028103f, -0.022586f, -0.046906f, -0.103940f, -0.055909f, 0.005593f, 0.002171f, -0.022002f, -0.005987f, -0.009650f, 0.034020f, 0.036450f, 0.018584f, -0.005091f, 0.002979f, 0.027944f, -0.012786f, 0.018016f, -0.046963f, -0.021252f, -0.005723f, 0.026689f, -0.006040f, 0.011293f, 0.017207f, 0.017651f, 0.002782f, 0.046694f, -0.035833f, -0.031713f, -0.032457f, 0.024904f, -0.020767f, -0.033198f, -0.033130f, 0.025173f, -0.010431f, -0.023901f, -0.012187f, 0.019175f, 0.005494f, 0.027529f, -0.043369f, -0.028077f, -0.004157f, -0.001845f, 0.009862f, 0.021569f, -0.008627f, -0.016590f, 0.030971f, -0.014644f, -0.017357f, -0.015515f, 0.030142f, -0.006846f, -0.013822f, 0.009282f, -0.000291f, -0.015034f, 0.001883f, -0.020388f, -0.011481f, -0.008946f, 0.000589f, -0.006286f, 0.006835f, -0.005203f, 0.004701f, -0.002040f, - 0.006303f, -0.011216f, 0.004818f, -0.004902f, 0.005683f, -0.007795f, 0.007347f, -0.012406f, -0.010955f, -0.047332f, 0.005291f, 0.153387f, 0.039434f, 0.064440f, -0.032092f, -0.140043f, -0.071056f, -0.103143f, -0.034798f, 0.069121f, 0.158813f, 0.070747f, 0.017601f, -0.075695f, -0.071254f, 0.049920f, 0.078974f, 0.039037f, 0.095924f, -0.004241f, -0.062853f, -0.092067f, -0.044788f, -0.014368f, 0.071255f, 0.008552f, 0.041170f, 0.036534f, 0.006169f, 0.095076f, 0.066776f, -0.007555f, -0.009160f, -0.088042f, -0.021427f, -0.002085f, 0.001783f, 0.050100f, 0.089854f, 0.054791f, 0.043130f, 0.084168f, 0.048717f, -0.087807f, -0.070434f, -0.022214f, -0.055209f, 0.058314f, 0.039750f, 0.086385f, 0.067459f, 0.076388f, 0.022657f, 0.013346f, -0.062919f, -0.066019f, -0.061786f, 0.021601f, 0.031472f, -0.000357f, -0.008385f, 0.136387f, 0.034589f, -0.009580f, -0.012896f, 0.093336f, -0.099653f, 0.020801f, -0.189751f, -0.042607f, 0.047498f, -0.066552f, 0.061974f, 0.034898f, 0.000984f, 0.136227f, 0.064717f, -0.077598f, -0.153998f, -0.074273f, -0.069743f, -0.038075f, -0.025900f, -0.020082f, 0.067369f, 0.042595f, - 0.090871f, 0.010751f, -0.066848f, -0.046252f, -0.070147f, -0.065494f, -0.064902f, 0.028514f, 0.006114f, 0.028199f, 0.038751f, -0.018446f, 0.035841f, 0.018783f, -0.024983f, -0.003106f, -0.027680f, -0.009097f, -0.059845f, -0.063533f, -0.023710f, -0.027698f, 0.001094f, -0.059530f, 0.031626f, -0.004423f, 0.011000f, 0.016498f, -0.039657f, -0.082301f, -0.074366f, -0.004129f, 0.016303f, 0.016886f, 0.048880f, 0.012041f, -0.024564f, -0.046378f, 0.015357f, 0.010853f, -0.221464f, -0.135362f, -0.073799f, 0.065249f, 0.018635f, 0.302160f, 0.322438f, 0.195941f, 0.357554f, 0.292176f, 0.309272f, 0.214192f, 0.261679f, 0.212247f, 0.003973f, -0.101243f, -0.144247f, -0.138752f, -0.289806f, -0.347936f, -0.363389f, -0.253819f, -0.199475f, -0.078574f, 0.013961f, -0.102791f, 0.062881f, -0.129544f, -0.046743f, -0.008915f, -0.039962f, 0.030660f, -0.118750f, 0.163366f, 0.028018f, 0.148928f, 0.095826f, 0.055668f, 0.039042f, 0.082395f, 0.053845f, 0.084505f, 0.194651f, 0.184826f, 0.147565f, 0.180627f, 0.228739f, 0.208032f, 0.196383f, 0.359893f, 0.126478f, 0.253222f, 0.330242f, 0.226757f, 0.300011f, 0.159132f, - 0.213861f, 0.166959f, 0.200781f, 0.216949f, 0.080649f, 0.140468f, 0.106843f, 0.131472f, 0.127540f, 0.034749f, -0.024549f, -0.137902f, -0.050675f, -0.183984f, -0.160379f, -0.272138f, -0.307624f, -0.310274f, -0.654123f, -0.554366f, -0.594635f, -0.590573f, -0.688473f, -0.697039f, -0.429313f, -0.500271f, -0.371825f, -0.441407f, -0.334903f, -0.317865f, -0.276017f, -0.277721f, -0.158936f, -0.070631f, -0.100867f, -0.102823f, -0.083217f, 0.015846f, 0.133243f, 0.069204f, 0.277028f, 0.237800f, 0.350046f, 0.358916f, 0.332018f, 0.413617f, 0.384094f, 0.443906f, 0.347828f, 0.424700f, 0.450868f, 0.503070f, 0.440841f, 0.262764f, 0.263668f, 0.262443f, 0.267445f, 0.245874f, 0.173714f, 0.161771f, 0.068027f, 0.047439f, -0.005033f, 0.007709f, 0.033532f, -0.091221f, -0.133711f, -0.145631f, -0.089117f, -0.079577f, -0.149017f, -0.174044f, -0.202422f, -0.147373f, -0.187389f, -0.173816f, -0.146069f, -0.157385f, -0.160046f, -0.160443f, -0.041448f, -0.037802f, -0.019486f, -0.036063f, 0.021088f, -0.004977f, -0.003713f, -0.033861f, -0.011852f, 0.011944f, 0.021730f, 0.007507f, 0.030084f, 0.020716f, 0.036278f, 0.001196f, - 0.006179f, -0.004607f, 0.015418f, -0.004623f, 0.007741f, -0.006052f, 0.007177f} - }, - { - {0.010258f, 0.000177f, -0.003781f, -0.000892f, -0.009139f, -0.006321f, 0.004095f, 0.000335f, -0.005747f, 0.007150f, 0.004833f, -0.001585f, 0.000457f, -0.001003f, 0.005798f, -0.008047f, 0.003030f, 0.005977f, 0.005321f, -0.011568f, -0.008066f, -0.005763f, 0.007771f, 0.001846f, 0.002551f, -0.003245f, 0.008287f, 0.003074f, -0.002032f, 0.000187f, -0.002336f, 0.001590f, 0.003116f, -0.001869f, -0.002359f, -0.006980f, 0.007412f, 0.012281f, 0.001474f, 0.007788f, -0.001434f, 0.001541f, 0.002825f, 0.003367f, -0.009326f, 0.000623f, -0.009744f, -0.002276f, -0.001370f, 0.003035f, -0.004910f, -0.000199f, 0.002148f, 0.000944f, -0.005680f, 0.000185f, 0.000654f, 0.004617f, -0.006041f, -0.007630f, -0.001016f, 0.010258f, 0.016527f, -0.000008f, 0.002710f, 0.001106f, -0.003539f, -0.009971f, -0.002527f, 0.006883f, -0.003170f, 0.006856f, 0.002672f, 0.006982f, -0.000384f, 0.002689f, 0.002484f, -0.005972f, -0.008023f, -0.000887f, 0.003024f, 0.004562f, 0.002227f, 0.002016f, 0.001371f, 0.001506f, -0.002757f, -0.004423f, -0.002993f, -0.002428f, -0.001155f, 0.000039f, -0.001660f, -0.000270f, 0.001456f, 0.002322f, - 0.002078f, -0.000376f, 0.000134f, 0.001358f, -0.000047f, -0.001781f, 0.004698f, -0.010364f, -0.002352f, -0.009830f, 0.005683f, 0.000636f, -0.004531f, 0.020952f, -0.008190f, -0.015016f, 0.001143f, 0.006952f, -0.001270f, -0.011301f, -0.003221f, -0.004913f, -0.001853f, -0.005361f, -0.001766f, 0.007769f, -0.000549f, -0.005074f, 0.008912f, 0.001307f, 0.008657f, -0.002308f, -0.002133f, 0.003328f, 0.000219f, 0.003877f, -0.001630f, 0.008170f, 0.013350f, -0.003685f, -0.008989f, -0.006585f, 0.005502f, -0.000021f, -0.020577f, -0.001959f, -0.008205f, -0.003057f, 0.010062f, -0.007035f, -0.005350f, 0.006940f, -0.004549f, -0.000998f, 0.009227f, 0.003181f, -0.007291f, 0.003258f, -0.005254f, -0.012155f, 0.003877f, 0.004762f, -0.009233f, -0.005344f, -0.002674f, -0.003883f, -0.000092f, 0.003950f, 0.006294f, 0.009535f, 0.010662f, -0.002552f, 0.001087f, -0.004216f, 0.004596f, 0.002925f, -0.002375f, 0.004461f, 0.006848f, -0.006551f, -0.003343f, 0.001100f, 0.000128f, 0.002634f, 0.007868f, -0.000999f, -0.002112f, 0.007131f, 0.001044f, -0.004955f, -0.003102f, -0.000381f, -0.003042f, 0.002179f, -0.001265f, -0.002742f, - 0.001117f, -0.003110f, -0.002450f, 0.001537f, -0.003124f, -0.002117f, 0.000087f, 0.002065f, -0.003865f, 0.000440f, -0.000942f, -0.001351f, -0.001865f, -0.000179f, -0.003016f, -0.000862f, -0.002888f, -0.016868f, -0.008567f, 0.005182f, 0.007473f, 0.002911f, 0.008107f, -0.006937f, 0.008485f, 0.010408f, -0.002925f, 0.011518f, -0.001572f, 0.008483f, -0.004034f, 0.000256f, -0.003618f, 0.010849f, 0.004237f, -0.000446f, 0.009698f, -0.005170f, -0.004101f, 0.007091f, -0.016845f, -0.002940f, 0.000923f, -0.003593f, -0.015012f, -0.009179f, 0.006231f, -0.005891f, -0.003913f, 0.000207f, 0.011749f, -0.002831f, -0.008220f, -0.000658f, 0.003025f, 0.006633f, -0.001008f, -0.010662f, -0.006865f, -0.001970f, -0.005456f, 0.001760f, -0.009271f, 0.004593f, -0.008723f, -0.012835f, 0.000412f, 0.004485f, 0.005217f, -0.004115f, -0.002945f, -0.008429f, 0.010889f, 0.006283f, 0.001521f, 0.000098f, -0.000302f, -0.003710f, -0.001980f, 0.003669f, 0.004651f, 0.016415f, -0.001849f, 0.004122f, 0.001081f, -0.000507f, -0.008042f, -0.006127f, 0.011138f, -0.004803f, 0.001097f, 0.002750f, 0.001614f, -0.001764f, 0.008419f, 0.000431f, - 0.000309f, -0.009150f, 0.008829f, 0.004936f, -0.003411f, -0.002048f, -0.000989f, -0.002670f, 0.001221f, 0.006349f, -0.000087f, 0.002511f, 0.001928f, -0.000912f, 0.001477f, 0.003271f, -0.000343f, -0.000015f, 0.001012f, 0.001513f, 0.001318f, 0.001860f, 0.003403f, 0.001254f, -0.002498f, 0.002597f, 0.001213f, -0.001859f, -0.001441f, -0.000319f, 0.000389f, 0.004085f, 0.005028f, 0.004490f, 0.010742f, -0.007126f, -0.010634f, -0.008593f, 0.005385f, 0.011870f, -0.002219f, 0.009090f, -0.008104f, -0.009857f, 0.008130f, -0.004110f, 0.000829f, 0.003025f, 0.010192f, 0.003775f, 0.016191f, -0.007073f, -0.008652f, 0.003771f, -0.004799f, -0.004528f, 0.009172f, -0.014342f, -0.008849f, 0.001425f, -0.002782f, 0.006517f, -0.004876f, 0.001787f, 0.011512f, -0.010739f, 0.008002f, -0.006484f, 0.005181f, -0.006075f, -0.001734f, -0.000988f, 0.011932f, 0.002239f, 0.000417f, -0.008748f, 0.000423f, -0.010407f, 0.003895f, 0.002562f, -0.006956f, -0.000172f, -0.002883f, 0.018011f, 0.002420f, 0.001150f, -0.015639f, -0.009170f, -0.013190f, 0.010296f, -0.006722f, -0.000744f, 0.005426f, 0.022981f, 0.016223f, -0.006488f, - -0.014142f, -0.005889f, -0.012278f, 0.012984f, -0.002492f, -0.003587f, -0.005682f, -0.003769f, -0.001065f, -0.005929f, -0.003931f, -0.000980f, -0.004812f, 0.003468f, -0.003366f, 0.004861f, -0.017873f, 0.001234f, -0.001474f, -0.005631f, -0.002648f, -0.005979f, -0.001201f, -0.009359f, 0.000768f, -0.003863f, -0.000313f, 0.005726f, -0.001801f, -0.001975f, -0.004006f, -0.004422f, -0.001249f, 0.001315f, -0.000249f, -0.000339f, -0.001594f, -0.000642f, -0.001886f, -0.000255f, 0.000460f, 0.001164f, -0.001335f, -0.001523f, -0.002125f, -0.001877f, -0.001626f, -0.002852f, -0.009066f, 0.006515f, -0.009381f, -0.016659f, 0.016995f, 0.007713f, -0.017859f, 0.017860f, -0.002878f, -0.001022f, -0.025090f, 0.014952f, 0.009940f, -0.020258f, 0.006021f, -0.003322f, 0.007671f, 0.001803f, 0.008842f, 0.005707f, 0.002247f, -0.009405f, 0.000868f, 0.003504f, -0.012484f, -0.005283f, -0.014729f, -0.002490f, -0.009161f, -0.004862f, 0.001660f, -0.011488f, -0.004258f, -0.016945f, 0.006411f, 0.001728f, 0.001454f, 0.001535f, -0.007316f, -0.014744f, -0.004628f, 0.005246f, -0.002406f, -0.001235f, 0.015475f, -0.022921f, 0.009643f, 0.011780f, - -0.001710f, 0.000786f, -0.004477f, -0.001768f, -0.007453f, -0.011298f, -0.007746f, -0.008891f, -0.005988f, 0.005751f, 0.003145f, 0.005126f, 0.007743f, -0.001797f, -0.004139f, 0.011110f, 0.021117f, 0.014953f, -0.000325f, -0.017931f, 0.004935f, -0.002707f, 0.002638f, 0.019103f, -0.000131f, 0.019243f, 0.017119f, -0.002298f, -0.005750f, -0.004552f, 0.001334f, 0.001707f, 0.006376f, 0.019512f, 0.005181f, 0.000827f, -0.002010f, -0.012011f, 0.001424f, 0.003775f, -0.004096f, -0.000541f, 0.000605f, -0.000104f, 0.002231f, 0.001748f, 0.001364f, -0.001461f, 0.002344f, 0.002214f, 0.002094f, 0.002452f, -0.006547f, -0.000993f, -0.004707f, 0.001922f, -0.003680f, 0.001599f, -0.001059f, -0.001631f, -0.003938f, 0.000798f, 0.000968f, -0.005669f, -0.001836f, 0.001395f, 0.027068f, 0.006924f, -0.004808f, -0.001310f, 0.008328f, -0.002843f, 0.026221f, -0.002783f, -0.004027f, 0.033226f, 0.000209f, 0.016801f, -0.006245f, 0.000463f, -0.001448f, 0.002736f, -0.004249f, 0.002308f, -0.000519f, -0.000949f, -0.018027f, -0.001724f, -0.004295f, -0.003226f, -0.007512f, 0.011540f, 0.005398f, 0.006867f, -0.010112f, -0.001121f, - -0.015981f, -0.006398f, 0.003003f, -0.001301f, -0.009715f, -0.002994f, 0.005342f, 0.012057f, 0.007298f, -0.003824f, -0.014858f, -0.000522f, 0.004231f, -0.002497f, 0.007873f, 0.005230f, 0.010673f, 0.014711f, -0.004784f, -0.000098f, -0.015867f, -0.019291f, 0.018206f, 0.009773f, -0.000658f, -0.000812f, -0.000603f, -0.007038f, -0.007714f, -0.000154f, 0.014574f, 0.008420f, 0.002646f, 0.017780f, -0.013631f, 0.003994f, -0.011180f, -0.008630f, 0.007651f, 0.007856f, 0.006473f, 0.026782f, -0.000966f, -0.012108f, 0.002104f, -0.011870f, 0.005376f, 0.003120f, 0.009784f, -0.005288f, 0.000156f, 0.001202f, -0.008997f, -0.001613f, 0.006297f, -0.000947f, 0.001633f, -0.003915f, -0.001992f, -0.000594f, 0.004362f, -0.002310f, 0.002756f, -0.004153f, 0.000392f, -0.005369f, 0.001719f, -0.002856f, -0.001835f, 0.000849f, 0.002712f, -0.003327f, 0.003594f, 0.002287f, 0.004386f, 0.000259f, 0.002604f, -0.001130f, 0.001594f, 0.000786f, 0.001613f, -0.001677f, -0.000025f, -0.001571f, -0.000213f, 0.000778f, 0.002276f, -0.014860f, -0.019955f, 0.007748f, -0.018650f, 0.000006f, 0.020760f, -0.021722f, 0.007950f, 0.009752f, - -0.005829f, -0.026811f, 0.000353f, 0.015685f, -0.017349f, 0.010790f, -0.001216f, -0.007688f, -0.022497f, -0.000631f, -0.016232f, 0.002877f, -0.008243f, -0.012645f, -0.015791f, 0.006494f, -0.002242f, -0.000921f, 0.015006f, -0.009079f, 0.012659f, -0.009612f, -0.003851f, 0.019405f, 0.006646f, -0.010346f, 0.007962f, 0.004690f, -0.008980f, 0.004740f, 0.004877f, -0.003436f, -0.003837f, 0.000784f, -0.004330f, -0.005107f, 0.003174f, 0.003561f, 0.026399f, -0.024849f, 0.004017f, 0.001597f, -0.008913f, 0.017884f, 0.010169f, -0.006123f, -0.019277f, 0.001727f, -0.001956f, -0.005806f, -0.012168f, -0.014237f, 0.017382f, 0.011287f, 0.001438f, -0.001725f, 0.009258f, 0.004714f, -0.004214f, 0.007423f, 0.005320f, -0.004809f, 0.018494f, -0.006855f, 0.011312f, -0.007561f, 0.005626f, 0.005831f, 0.004166f, -0.000546f, -0.010297f, 0.009851f, -0.008018f, -0.008327f, -0.005729f, 0.002881f, -0.000022f, 0.001236f, -0.009767f, 0.005321f, 0.004100f, -0.006165f, 0.000633f, -0.000226f, -0.003092f, 0.000599f, -0.002050f, 0.004739f, -0.001366f, 0.000741f, 0.003947f, -0.001775f, -0.003005f, 0.002643f, -0.003425f, 0.002784f, - -0.000618f, -0.000018f, -0.003943f, -0.001743f, -0.000138f, -0.004282f, 0.004241f, 0.002427f, 0.000955f, 0.002840f, -0.000916f, 0.001942f, 0.008807f, -0.020124f, 0.014768f, -0.008423f, -0.003691f, -0.011553f, -0.008287f, 0.007032f, -0.006607f, 0.005751f, 0.022559f, 0.007715f, 0.012405f, -0.028758f, -0.019007f, -0.010251f, -0.006858f, 0.003107f, -0.000112f, 0.004954f, -0.024112f, 0.012911f, 0.005402f, 0.003220f, 0.023042f, 0.000382f, -0.013032f, 0.021606f, 0.008522f, -0.009652f, 0.004433f, -0.012404f, 0.011376f, 0.005347f, 0.015155f, -0.012986f, -0.009199f, 0.003827f, -0.013106f, 0.016540f, -0.015161f, -0.000274f, 0.014720f, 0.013538f, -0.027998f, -0.000801f, 0.001381f, 0.003250f, 0.004643f, 0.030592f, 0.007075f, 0.001905f, -0.009357f, -0.007745f, -0.016535f, -0.008967f, 0.022629f, 0.000540f, -0.026998f, 0.000401f, 0.006259f, -0.015345f, -0.016874f, 0.001998f, -0.010943f, 0.004483f, 0.024798f, 0.012159f, 0.010439f, -0.010180f, -0.026490f, 0.002128f, -0.004531f, 0.012152f, -0.002379f, -0.022199f, -0.002696f, 0.005781f, 0.006116f, 0.005983f, -0.001871f, 0.018780f, 0.003549f, -0.011961f, - 0.015503f, -0.001154f, 0.009278f, -0.000319f, -0.002314f, -0.008076f, 0.011456f, 0.007871f, 0.004480f, -0.005865f, -0.002288f, -0.001549f, -0.003868f, 0.002167f, -0.000025f, -0.004987f, 0.002478f, 0.001500f, -0.002800f, -0.003714f, -0.001545f, -0.002809f, -0.000410f, 0.003475f, -0.003564f, 0.001787f, 0.004381f, 0.005239f, -0.001351f, 0.002230f, -0.002794f, -0.035468f, -0.010548f, 0.010014f, 0.027418f, 0.003897f, 0.014236f, 0.048633f, 0.008118f, 0.008290f, -0.007487f, -0.023330f, 0.013255f, -0.011319f, 0.012217f, -0.002943f, 0.032219f, 0.023444f, -0.012375f, -0.026355f, -0.020909f, 0.015886f, -0.013913f, 0.019476f, 0.008607f, 0.006340f, -0.006690f, -0.002577f, 0.023201f, -0.004579f, 0.020481f, 0.020448f, 0.010615f, 0.014341f, -0.015864f, 0.015531f, 0.008421f, -0.008339f, 0.022677f, -0.009983f, 0.020607f, 0.001539f, 0.002370f, -0.030181f, 0.018232f, 0.001656f, -0.005626f, 0.014900f, -0.020984f, -0.008352f, 0.012651f, 0.010294f, -0.019329f, 0.003116f, -0.012346f, -0.007132f, 0.019244f, 0.002573f, 0.005844f, -0.002035f, -0.022053f, 0.014833f, 0.014141f, 0.000959f, 0.011192f, 0.004993f, - -0.009738f, -0.010291f, -0.000777f, 0.011785f, -0.019962f, -0.000727f, 0.001343f, 0.000865f, -0.000130f, 0.008762f, 0.011573f, 0.023643f, 0.013332f, 0.000782f, -0.033166f, -0.010927f, -0.012378f, -0.001114f, 0.002523f, -0.009335f, -0.019632f, -0.006205f, -0.008809f, 0.005196f, 0.000831f, -0.005613f, 0.002175f, -0.005755f, 0.009229f, -0.003292f, -0.003851f, -0.005428f, 0.000174f, 0.002648f, -0.011772f, 0.007434f, -0.007545f, 0.003092f, -0.001884f, -0.004369f, 0.000284f, -0.007293f, 0.002436f, -0.006578f, -0.004719f, -0.000936f, -0.003723f, -0.003498f, 0.004148f, 0.007009f, 0.004278f, 0.006749f, 0.008858f, -0.001813f, 0.001388f, 0.043848f, 0.012926f, 0.005784f, -0.016203f, -0.039607f, 0.028692f, 0.008873f, -0.026151f, 0.007786f, -0.002755f, 0.006690f, 0.005647f, -0.018999f, -0.040455f, -0.031781f, 0.010805f, 0.024822f, -0.004837f, 0.026065f, -0.012002f, 0.020333f, 0.024951f, 0.033650f, -0.007329f, 0.024864f, -0.021992f, 0.008409f, -0.011949f, 0.002983f, 0.013525f, -0.000590f, -0.007071f, 0.006051f, 0.016961f, -0.012020f, -0.022290f, -0.022678f, 0.047603f, 0.000082f, -0.002248f, -0.021429f, - 0.022144f, 0.007161f, -0.043695f, -0.025380f, 0.009959f, -0.006167f, -0.007629f, 0.017114f, 0.005926f, 0.042408f, 0.023554f, -0.001503f, -0.024506f, -0.024184f, -0.013591f, -0.009940f, -0.027817f, 0.025852f, -0.018978f, 0.020460f, 0.017725f, -0.017694f, -0.022675f, -0.022050f, -0.032050f, 0.007851f, -0.000387f, -0.011564f, -0.014418f, -0.023613f, -0.008308f, -0.023256f, 0.005055f, 0.002830f, -0.007763f, 0.003186f, 0.019231f, -0.048679f, -0.018754f, -0.039721f, 0.020226f, 0.013996f, -0.016897f, -0.005734f, 0.008330f, -0.007477f, -0.000081f, 0.009440f, -0.007207f, -0.015889f, -0.001607f, -0.004564f, -0.004849f, -0.000178f, -0.001901f, -0.006741f, 0.000434f, 0.001430f, 0.008666f, -0.011710f, 0.003282f, 0.006465f, -0.000555f, -0.004834f, -0.007343f, -0.002167f, -0.000973f, 0.001692f, -0.002416f, -0.000618f, -0.004380f, 0.002266f, -0.001647f, -0.007467f, 0.013517f, 0.001405f, 0.004213f, -0.023579f, -0.045452f, -0.010096f, -0.011795f, 0.002520f, -0.010548f, 0.001977f, 0.004806f, -0.004882f, 0.019534f, -0.025167f, -0.007621f, -0.023884f, -0.001155f, -0.011885f, 0.027686f, 0.030950f, 0.024741f, -0.034504f, - 0.024492f, -0.012455f, 0.018606f, -0.007129f, 0.013742f, -0.011448f, -0.014738f, 0.005325f, -0.019043f, 0.012269f, 0.014784f, -0.001825f, 0.008883f, -0.017457f, -0.002190f, 0.029572f, -0.023503f, 0.001130f, -0.006971f, -0.009637f, -0.018949f, -0.001055f, 0.029213f, 0.038496f, -0.024285f, 0.011640f, -0.003049f, -0.023354f, -0.023884f, -0.025652f, -0.011744f, 0.048730f, 0.029416f, -0.009108f, 0.015639f, -0.010343f, 0.013543f, -0.026663f, 0.015652f, -0.000803f, -0.014595f, 0.037092f, 0.019098f, 0.007573f, 0.012100f, 0.010615f, 0.034699f, 0.004600f, -0.029513f, 0.011991f, 0.022444f, 0.017611f, -0.051489f, 0.031403f, -0.021889f, -0.019428f, -0.009668f, 0.003194f, -0.020246f, 0.022218f, 0.049237f, -0.008574f, 0.006985f, 0.025189f, 0.004213f, -0.004136f, 0.005924f, 0.002564f, 0.014302f, 0.012910f, 0.007699f, 0.023626f, 0.012043f, -0.006597f, 0.016005f, 0.009983f, -0.007195f, -0.014403f, 0.008028f, -0.002009f, 0.008695f, -0.004144f, 0.002532f, 0.007129f, 0.002715f, -0.002077f, -0.001876f, 0.003206f, 0.010966f, 0.002390f, -0.002720f, 0.002421f, 0.008392f, -0.003777f, 0.000337f, 0.014301f, - 0.005415f, -0.003852f, 0.007719f, 0.002427f, 0.001958f, 0.005857f, -0.000283f, 0.004821f, -0.002389f, -0.009187f, -0.008443f, 0.007066f, 0.031623f, 0.020818f, 0.085941f, 0.024198f, -0.014521f, 0.005667f, 0.014416f, 0.000502f, 0.028591f, 0.021467f, 0.019788f, -0.025439f, -0.042791f, 0.042885f, -0.024265f, 0.004213f, 0.014727f, 0.047047f, 0.018753f, -0.028245f, 0.025565f, -0.025532f, -0.005387f, -0.035162f, -0.046449f, -0.005038f, 0.012436f, 0.012654f, 0.009248f, 0.011979f, -0.003757f, -0.031677f, -0.011855f, 0.010380f, 0.010662f, -0.016704f, 0.035240f, 0.022563f, -0.021268f, 0.011866f, 0.017499f, 0.007042f, 0.000985f, -0.019395f, -0.002517f, -0.013561f, -0.008180f, 0.002146f, 0.021887f, 0.054843f, -0.014945f, 0.005114f, 0.007970f, 0.020535f, -0.019672f, 0.069475f, -0.006090f, 0.006843f, 0.005700f, -0.031351f, -0.030957f, -0.049689f, -0.021255f, 0.027384f, -0.009648f, 0.013826f, 0.010943f, 0.047831f, 0.007533f, 0.008672f, 0.002426f, 0.037711f, 0.018063f, -0.015624f, 0.034414f, -0.031322f, 0.004942f, 0.031899f, 0.040918f, 0.037834f, 0.014786f, -0.021433f, -0.035194f, -0.015073f, - -0.011318f, -0.025558f, -0.014371f, -0.014514f, -0.004148f, -0.021457f, 0.005339f, -0.007348f, -0.003630f, -0.018707f, -0.002308f, -0.011650f, 0.018445f, 0.001958f, 0.003953f, -0.016651f, -0.003322f, -0.022886f, 0.001489f, 0.009823f, -0.000839f, 0.016778f, 0.010469f, 0.000051f, 0.006825f, -0.003468f, -0.010442f, -0.006064f, -0.004750f, -0.019635f, 0.001706f, 0.003922f, 0.004572f, 0.005852f, -0.009817f, 0.013854f, 0.014911f, 0.006609f, -0.011761f, -0.007856f, -0.004004f, 0.003351f, 0.008186f, 0.004474f, -0.007920f, -0.004051f, -0.009049f, -0.035807f, 0.020168f, 0.009567f, 0.024757f, -0.006665f, -0.054756f, 0.004347f, -0.036742f, -0.032586f, 0.009626f, 0.007767f, 0.015212f, -0.009537f, 0.010930f, -0.001958f, -0.018781f, 0.029807f, -0.004878f, -0.009904f, -0.012018f, -0.020961f, -0.018019f, 0.010832f, -0.022695f, 0.005504f, -0.014555f, -0.009970f, -0.006339f, 0.029252f, -0.005844f, 0.031402f, 0.019543f, -0.008259f, 0.010325f, 0.010858f, 0.022211f, -0.015429f, -0.021177f, 0.003158f, 0.013035f, 0.017135f, 0.029359f, -0.032529f, -0.031670f, 0.013524f, 0.010398f, 0.036353f, -0.018013f, -0.002600f, - 0.017964f, 0.000107f, 0.004980f, -0.006715f, 0.023718f, 0.029892f, 0.013652f, -0.003801f, 0.018708f, 0.062694f, -0.013908f, -0.018295f, 0.023240f, -0.002574f, 0.036584f, 0.008804f, 0.017058f, 0.020639f, -0.006726f, 0.014447f, 0.042350f, -0.011565f, -0.050922f, 0.035813f, 0.010452f, -0.016776f, 0.004879f, -0.077586f, 0.051745f, -0.000516f, 0.032080f, -0.020375f, 0.016738f, 0.002365f, -0.030934f, -0.029486f, -0.004057f, 0.005723f, -0.022860f, 0.000122f, 0.003512f, -0.004200f, -0.007605f, -0.004764f, -0.025004f, -0.004154f, -0.015010f, 0.000215f, -0.007848f, -0.002268f, -0.008989f, 0.015047f, -0.011165f, -0.008524f, -0.016132f, -0.007800f, -0.018407f, -0.003396f, 0.004128f, -0.010243f, -0.001158f, -0.008389f, -0.009151f, -0.009912f, -0.000606f, -0.008206f, -0.006114f, 0.002961f, -0.002633f, 0.008007f, -0.005707f, -0.011759f, -0.012869f, 0.000084f, 0.002233f, -0.008102f, -0.001652f, -0.003647f, 0.003954f, -0.017297f, -0.033169f, -0.001638f, 0.051663f, 0.025360f, -0.066540f, 0.010186f, -0.012006f, 0.005552f, 0.010881f, -0.003475f, -0.034303f, 0.004546f, -0.005308f, 0.029550f, 0.057797f, -0.009809f, - 0.018613f, 0.037832f, -0.001700f, -0.010961f, -0.009774f, 0.014803f, 0.057724f, -0.001456f, -0.003995f, 0.047178f, -0.019303f, 0.012507f, 0.000134f, -0.001081f, -0.012369f, 0.017558f, -0.052953f, 0.001352f, 0.016789f, 0.038403f, 0.041177f, -0.034175f, 0.001461f, 0.036890f, -0.002215f, 0.068928f, -0.025089f, -0.034214f, 0.004697f, 0.050002f, 0.008929f, -0.038884f, -0.018050f, 0.011182f, -0.000079f, 0.021632f, -0.056169f, 0.006627f, 0.002607f, -0.012001f, -0.040712f, -0.036410f, 0.009707f, -0.011223f, -0.002406f, 0.001807f, -0.042363f, -0.044784f, 0.009599f, 0.006776f, -0.044898f, -0.015450f, -0.029129f, 0.026029f, -0.071045f, -0.027128f, 0.023522f, -0.043396f, 0.023830f, -0.011841f, -0.017202f, 0.023433f, -0.007122f, 0.035293f, 0.033811f, 0.007424f, 0.021041f, -0.009615f, 0.004395f, -0.025248f, 0.027311f, -0.019606f, 0.016316f, -0.026434f, 0.019596f, 0.001207f, 0.008822f, -0.002385f, 0.000277f, -0.015225f, 0.018133f, -0.019923f, 0.003582f, 0.002173f, 0.010269f, -0.021844f, 0.011459f, -0.008883f, -0.005939f, 0.006790f, -0.004467f, -0.010281f, 0.014799f, 0.006108f, 0.015808f, 0.006848f, - -0.001455f, -0.007419f, -0.007309f, -0.002025f, 0.003091f, -0.010386f, 0.003823f, -0.007583f, 0.003834f, -0.020891f, -0.010731f, -0.008563f, 0.010879f, 0.012350f, -0.006687f, 0.002779f, -0.002922f, -0.017362f, 0.037571f, 0.000045f, 0.020780f, -0.039221f, -0.002957f, -0.037121f, 0.038930f, 0.017304f, 0.050939f, 0.035970f, -0.018092f, 0.006945f, 0.040234f, 0.020748f, 0.020474f, 0.013212f, -0.034207f, -0.009697f, 0.016794f, 0.002795f, 0.019838f, -0.043513f, -0.032376f, 0.019810f, 0.065284f, 0.008998f, -0.021615f, 0.041364f, 0.011735f, 0.025895f, 0.006799f, 0.005156f, -0.036878f, -0.037425f, 0.000638f, 0.000737f, -0.064561f, 0.005334f, -0.013289f, -0.003206f, 0.020388f, -0.025068f, 0.015402f, 0.050806f, 0.005290f, -0.082522f, -0.059455f, -0.009573f, -0.018326f, -0.020436f, -0.000654f, 0.015158f, 0.013057f, -0.020149f, 0.022862f, 0.021827f, 0.019641f, -0.012670f, 0.016899f, -0.009213f, -0.021544f, -0.004972f, 0.018874f, -0.061562f, -0.014128f, -0.027734f, -0.032204f, -0.012687f, 0.008634f, -0.016265f, -0.001741f, 0.068037f, 0.038584f, -0.025988f, 0.000182f, 0.000883f, -0.011761f, -0.011988f, - 0.005917f, 0.045675f, 0.016603f, 0.007024f, -0.014179f, -0.010131f, -0.023690f, -0.027124f, -0.029099f, -0.006531f, 0.003677f, 0.009146f, -0.010225f, 0.008187f, -0.002469f, -0.006500f, -0.002566f, -0.007651f, -0.025559f, -0.006223f, -0.000282f, -0.006314f, -0.022115f, 0.002934f, -0.008040f, 0.024193f, -0.012204f, 0.008291f, -0.002495f, 0.010076f, -0.000164f, -0.019312f, 0.001617f, 0.023494f, 0.003527f, 0.021151f, -0.005827f, 0.010907f, -0.006758f, 0.006985f, -0.001483f, -0.014284f, -0.006449f, -0.001373f, -0.002618f, -0.002688f, -0.000133f, 0.013937f, 0.026614f, -0.037051f, -0.009458f, -0.015727f, 0.009786f, 0.077344f, 0.012156f, -0.038119f, 0.009996f, 0.034144f, -0.007415f, 0.031900f, 0.040583f, -0.021033f, 0.009531f, 0.020491f, 0.013928f, 0.000873f, -0.006074f, -0.012617f, 0.005980f, 0.024085f, 0.012350f, 0.022493f, -0.033852f, -0.052069f, -0.005622f, 0.023189f, 0.020387f, 0.016642f, -0.006006f, -0.048034f, 0.015383f, 0.010623f, 0.071829f, 0.075582f, 0.017886f, -0.056277f, 0.040615f, -0.021445f, -0.057573f, -0.013460f, -0.068121f, -0.051858f, -0.022962f, -0.024995f, -0.052843f, 0.009179f, - -0.021342f, -0.060438f, -0.055361f, 0.015961f, 0.035825f, -0.005937f, -0.046745f, 0.013857f, 0.001265f, 0.014920f, 0.029309f, 0.028620f, -0.036183f, 0.046596f, 0.031952f, 0.004060f, 0.012805f, 0.032422f, -0.001765f, 0.084810f, -0.060549f, -0.028923f, -0.002098f, -0.069007f, 0.056564f, 0.004127f, 0.071121f, 0.021974f, 0.015860f, -0.003606f, 0.014038f, 0.030168f, 0.001117f, -0.028095f, -0.000520f, -0.014999f, 0.011227f, 0.010866f, 0.020292f, -0.008542f, -0.026062f, -0.000175f, 0.024093f, 0.011429f, -0.015482f, -0.007715f, 0.012644f, -0.017322f, -0.000136f, 0.000373f, 0.022132f, 0.008680f, -0.012144f, -0.005262f, -0.013789f, -0.022248f, -0.019306f, -0.001069f, 0.004182f, -0.011030f, -0.008128f, 0.002588f, -0.011140f, 0.017429f, 0.008484f, -0.000209f, 0.010461f, 0.035201f, -0.013405f, -0.006700f, 0.003963f, 0.009453f, -0.018993f, 0.020632f, -0.006953f, -0.000637f, 0.003522f, 0.015429f, 0.025964f, -0.037701f, 0.009893f, -0.075290f, -0.020404f, -0.004665f, -0.018531f, 0.082659f, 0.026045f, -0.021956f, -0.051938f, -0.026327f, -0.021385f, -0.032897f, -0.024153f, 0.012643f, -0.075820f, -0.016318f, - 0.055633f, -0.006583f, -0.006264f, -0.057919f, 0.055237f, 0.027389f, 0.001231f, -0.021963f, 0.023532f, 0.011687f, -0.013210f, 0.025226f, -0.039162f, -0.010380f, -0.020011f, 0.011233f, -0.009161f, -0.024657f, 0.027986f, -0.021031f, 0.011661f, 0.000816f, -0.038052f, -0.023676f, -0.005957f, -0.047592f, -0.046759f, -0.062568f, -0.016178f, 0.028710f, -0.021037f, -0.011456f, 0.036079f, -0.044030f, -0.036234f, 0.039041f, -0.000343f, -0.002250f, 0.035121f, 0.000526f, -0.030109f, -0.017266f, 0.011832f, 0.025437f, -0.038894f, -0.012193f, 0.047262f, 0.020456f, 0.045603f, 0.023673f, -0.009377f, 0.024057f, -0.001872f, -0.061789f, 0.019382f, -0.046738f, 0.033854f, 0.005950f, 0.012392f, -0.019655f, -0.053500f, 0.011281f, -0.008015f, -0.046368f, -0.018638f, 0.020855f, -0.023589f, 0.001008f, 0.007272f, 0.015198f, -0.015151f, 0.000856f, 0.002211f, -0.003958f, 0.009646f, -0.006914f, 0.005384f, 0.019077f, -0.003561f, 0.006568f, 0.004957f, -0.012295f, 0.003849f, 0.009182f, 0.005157f, -0.009169f, 0.012486f, 0.008743f, -0.000962f, -0.012855f, -0.026432f, 0.005487f, -0.020925f, 0.017019f, -0.021364f, 0.014042f, - 0.017410f, 0.000885f, 0.000966f, 0.000567f, 0.009876f, 0.001608f, -0.009131f, 0.020601f, 0.016381f, -0.008070f, -0.012908f, -0.021507f, 0.056412f, 0.019695f, 0.002082f, 0.006888f, -0.014733f, 0.022367f, 0.034762f, 0.088063f, 0.076916f, 0.006651f, -0.033862f, 0.015665f, 0.044599f, 0.012747f, 0.034535f, 0.024908f, 0.016724f, -0.026102f, -0.033519f, -0.040283f, -0.002808f, 0.014966f, 0.028372f, 0.057209f, 0.030275f, 0.036690f, 0.021335f, 0.034017f, 0.017165f, 0.032768f, -0.021884f, 0.006178f, 0.061850f, -0.001663f, 0.047583f, 0.012612f, 0.038482f, -0.061057f, -0.009930f, -0.017998f, -0.017991f, 0.014240f, 0.023781f, 0.044222f, 0.071541f, 0.059926f, -0.021242f, 0.010642f, -0.079446f, 0.019299f, 0.018294f, 0.069999f, -0.055647f, 0.044271f, -0.014448f, -0.039010f, 0.029894f, 0.009225f, 0.024949f, 0.043849f, -0.014267f, -0.056157f, 0.029066f, -0.036103f, -0.049507f, -0.023532f, 0.066237f, -0.057497f, -0.081613f, -0.041186f, -0.013523f, 0.043047f, -0.004494f, -0.029349f, -0.056328f, -0.042526f, 0.026936f, -0.003848f, -0.001054f, 0.036486f, -0.039743f, 0.011364f, 0.040808f, 0.015895f, - 0.027319f, 0.039526f, -0.026769f, -0.013488f, -0.022624f, 0.030231f, 0.006712f, 0.015566f, 0.011019f, -0.027204f, 0.033785f, 0.008350f, 0.005354f, -0.013327f, -0.049397f, -0.047188f, 0.004703f, -0.022458f, -0.009321f, -0.021302f, -0.018527f, -0.008132f, 0.008704f, -0.000283f, -0.020836f, 0.026606f, 0.022297f, -0.003001f, -0.023652f, 0.003877f, 0.014243f, -0.016902f, -0.007658f, -0.009707f, 0.000197f, 0.011498f, -0.005310f, -0.011684f, -0.009460f, 0.008085f, 0.006764f, 0.012970f, 0.016177f, -0.008482f, 0.009243f, 0.010010f, 0.055335f, -0.017455f, -0.061149f, 0.004291f, -0.025540f, -0.087419f, -0.044216f, 0.114647f, 0.016034f, -0.051780f, -0.056851f, 0.006398f, 0.001015f, 0.023675f, 0.029765f, -0.040104f, -0.026626f, -0.063976f, 0.014895f, -0.023215f, -0.015357f, 0.097745f, 0.020993f, -0.013534f, -0.100899f, -0.006531f, -0.053876f, 0.053384f, 0.065962f, 0.006901f, 0.051319f, -0.060473f, -0.023784f, -0.038215f, -0.009020f, 0.099812f, 0.124329f, 0.019837f, -0.033183f, -0.044422f, -0.089760f, 0.001207f, 0.011617f, 0.108507f, 0.060571f, -0.015884f, -0.178413f, -0.092442f, 0.015366f, -0.017152f, - 0.156717f, 0.052504f, -0.075209f, -0.031317f, -0.134271f, -0.042519f, 0.004735f, 0.087806f, 0.090623f, 0.101716f, 0.004854f, 0.024086f, -0.010692f, 0.008769f, 0.125151f, -0.046199f, 0.091933f, -0.022278f, -0.094386f, -0.028277f, -0.100056f, -0.032157f, 0.131038f, 0.059565f, 0.093567f, -0.031021f, 0.073379f, -0.082160f, -0.013087f, 0.019523f, 0.039118f, 0.077817f, -0.026258f, -0.001699f, 0.004917f, -0.007381f, 0.012033f, 0.020756f, -0.022260f, 0.003384f, -0.023407f, -0.042354f, 0.019048f, 0.034405f, 0.019195f, -0.004472f, -0.025423f, -0.056666f, -0.055796f, -0.029438f, 0.018891f, 0.052147f, 0.029394f, 0.040337f, -0.054849f, -0.071921f, -0.055467f, 0.006229f, 0.063002f, 0.069951f, 0.053748f, -0.032120f, -0.136973f, -0.088039f, 0.002671f, 0.068946f, 0.148855f, 0.057670f, 0.012240f, -0.067781f, -0.089288f, -0.031033f, -0.028412f, 0.078005f, 0.086215f, 0.032223f, -0.005110f, -0.074827f, -0.056118f, 0.017090f, 0.025779f, 0.063444f, 0.030840f, -0.032796f, -0.022947f, -0.039269f, -0.018686f, 0.018429f, 0.016853f, -0.079486f, 0.088155f, 0.000149f, -0.022973f, -0.136964f, -0.036870f, -0.036987f, - -0.061795f, 0.132593f, 0.001421f, 0.059403f, -0.090631f, 0.050321f, 0.042258f, -0.040784f, 0.026538f, -0.007844f, 0.023724f, -0.000021f, 0.067842f, 0.023950f, -0.065805f, 0.039738f, 0.032810f, -0.000234f, 0.045815f, -0.033882f, -0.017373f, 0.057460f, 0.040315f, 0.038259f, 0.019147f, 0.033283f, -0.099174f, 0.086554f, -0.049759f, -0.031718f, 0.018982f, -0.069595f, 0.101655f, -0.028947f, 0.010253f, 0.073321f, 0.002643f, -0.011231f, 0.040000f, 0.040724f, 0.072041f, -0.017631f, -0.066655f, -0.068129f, 0.007695f, -0.024656f, 0.031668f, -0.041246f, -0.019877f, -0.027956f, 0.020516f, -0.127969f, 0.002236f, 0.094843f, 0.026426f, 0.038553f, -0.003422f, -0.010554f, 0.025171f, -0.033866f, -0.038482f, 0.023714f, 0.013369f, -0.041735f, -0.046122f, 0.176115f, -0.018908f, -0.057419f, 0.016167f, 0.082481f, -0.002151f, -0.065199f, 0.026943f, -0.012342f, -0.024498f, 0.053045f, 0.067649f, -0.049544f, -0.080711f, 0.018143f, 0.019597f, -0.018791f, -0.048226f, 0.002269f, 0.024513f, -0.007579f, -0.007738f, -0.003347f, -0.008225f, 0.012830f, 0.014520f, -0.016752f, 0.001933f, 0.007112f, 0.003728f, -0.010134f, - 0.003818f, -0.000699f, -0.022295f, 0.015983f, 0.006984f, 0.031061f, 0.015571f, -0.011990f, 0.012829f, -0.006314f, 0.018467f, -0.001457f, -0.004701f, 0.025308f, -0.006236f, 0.017296f, -0.005026f, -0.020156f, -0.001664f, 0.022768f, -0.006364f, 0.025937f, -0.024632f, 0.032602f, 0.007765f, -0.023668f, 0.009962f, 0.000386f, 0.012111f, -0.004091f, -0.009409f, -0.002505f, 0.025611f, -0.068324f, 0.024333f, 0.107814f, 0.169806f, -0.075080f, 0.055351f, -0.112107f, -0.033038f, -0.068296f, -0.009305f, 0.104343f, 0.110746f, 0.088002f, -0.002752f, -0.070277f, -0.042486f, 0.038263f, 0.002891f, 0.019192f, 0.057891f, -0.001063f, 0.028827f, -0.073667f, -0.018771f, -0.042612f, -0.051878f, 0.028482f, 0.023747f, 0.001607f, 0.051923f, -0.044073f, -0.001560f, 0.011691f, -0.062115f, -0.001716f, 0.004379f, -0.039280f, -0.014805f, 0.014729f, -0.026220f, 0.058510f, -0.019119f, 0.088630f, 0.067048f, -0.043698f, -0.012247f, -0.060742f, -0.069407f, -0.090153f, 0.028845f, 0.041553f, 0.120511f, 0.091893f, 0.042953f, 0.058397f, 0.011200f, -0.066382f, -0.043869f, -0.037191f, -0.045184f, -0.009614f, 0.025303f, -0.002447f, - -0.031049f, 0.008076f, -0.031328f, 0.019688f, 0.044896f, 0.008740f, -0.046836f, 0.036588f, -0.022458f, -0.023858f, -0.046873f, 0.024237f, 0.020781f, 0.010618f, 0.005740f, 0.106223f, 0.081191f, 0.066390f, 0.011265f, -0.015447f, -0.090012f, -0.018880f, -0.009427f, 0.088473f, 0.050691f, 0.023030f, 0.026724f, 0.076617f, -0.012254f, -0.030577f, -0.041453f, -0.034729f, -0.016375f, -0.007820f, 0.006925f, 0.000877f, 0.000488f, 0.039721f, -0.004697f, -0.023826f, -0.014643f, -0.008226f, 0.000755f, 0.019600f, 0.035387f, 0.015452f, -0.004602f, 0.021877f, -0.036868f, 0.014263f, 0.033638f, 0.013672f, 0.066424f, -0.027414f, 0.000282f, 0.011250f, -0.027949f, 0.007112f, -0.044369f, -0.002430f, 0.015262f, 0.000377f, 0.017792f, -0.012803f, -0.184350f, -0.106790f, -0.061480f, 0.105984f, 0.049767f, 0.282069f, 0.265205f, 0.273899f, 0.277180f, 0.296835f, 0.208933f, 0.108960f, 0.158240f, 0.094966f, -0.047194f, -0.087927f, -0.135411f, -0.263548f, -0.237297f, -0.246223f, -0.178332f, -0.180912f, -0.133935f, -0.111195f, -0.058975f, 0.005946f, -0.104187f, -0.053428f, -0.021542f, -0.016563f, -0.056337f, 0.014451f, - 0.070650f, 0.079105f, 0.029611f, 0.093476f, 0.119217f, 0.029421f, 0.023560f, 0.023470f, 0.117154f, 0.121836f, 0.154032f, 0.172171f, 0.150915f, 0.170984f, 0.259996f, 0.105243f, 0.203035f, 0.276753f, 0.178189f, 0.210056f, 0.165392f, 0.082661f, 0.098869f, 0.109081f, 0.097243f, 0.131797f, 0.130125f, 0.080563f, 0.015933f, 0.040016f, 0.076760f, -0.004878f, 0.009058f, -0.036901f, -0.042232f, -0.130691f, -0.058631f, -0.226439f, -0.284257f, -0.227902f, -0.259335f, -0.353236f, -0.340841f, -0.202299f, -0.380732f, -0.345735f, -0.315275f, -0.356920f, -0.300893f, -0.229792f, -0.288318f, -0.212427f, -0.058609f, -0.141107f, -0.174199f, -0.069044f, -0.068730f, -0.056785f, -0.062344f, -0.027874f, 0.017482f, 0.035815f, 0.069888f, 0.090152f, 0.103608f, 0.116440f, 0.120632f, 0.169842f, 0.104385f, 0.200098f, 0.224307f, 0.106678f, 0.208383f, 0.197906f, 0.125869f, 0.151692f, 0.220484f, 0.149757f, 0.248834f, 0.187668f, 0.235977f, 0.165044f, 0.150336f, 0.155562f, 0.145682f, 0.114188f, 0.131107f, 0.113757f, 0.090385f, 0.067868f, 0.066587f, 0.053865f, 0.023825f, -0.016587f, -0.012484f, -0.009354f, - -0.077637f, -0.127255f, -0.121694f, -0.125372f, -0.136017f, -0.126474f, -0.140720f, -0.102217f, -0.105152f, -0.086418f, -0.063171f, -0.049754f, -0.055931f, -0.055690f, -0.041457f, -0.029327f, -0.031470f, -0.042738f, -0.020701f, -0.010020f, -0.022534f, -0.036217f, -0.018511f, -0.012201f, -0.015503f, -0.017286f, 0.002300f, 0.006880f, 0.009664f, 0.001125f, 0.003365f}, - {0.020074f, 0.001053f, -0.001324f, -0.000691f, -0.001576f, -0.010276f, -0.010429f, 0.009985f, 0.002398f, -0.005964f, -0.009108f, -0.004384f, -0.006883f, -0.011866f, 0.015180f, 0.001840f, 0.005499f, 0.007572f, 0.021869f, -0.000558f, 0.003492f, -0.005267f, -0.001945f, -0.004051f, -0.014256f, 0.003183f, -0.004362f, 0.001410f, 0.009907f, -0.003911f, -0.000975f, 0.002158f, 0.001047f, -0.002354f, 0.000462f, -0.013169f, 0.002731f, -0.000316f, -0.004729f, 0.004120f, 0.001887f, -0.008864f, 0.013988f, 0.000491f, 0.002007f, 0.013020f, -0.005060f, -0.005624f, -0.012843f, -0.006504f, 0.008859f, 0.000556f, 0.009443f, -0.004630f, -0.010508f, 0.004567f, -0.009796f, -0.004380f, -0.018901f, 0.007766f, 0.006598f, 0.004027f, 0.005673f, 0.012960f, 0.003347f, -0.005692f, 0.006978f, 0.010764f, -0.007062f, 0.005329f, -0.000060f, -0.002274f, -0.003675f, -0.002902f, 0.007231f, -0.001470f, 0.008026f, -0.004072f, 0.003205f, -0.002514f, 0.002895f, 0.005866f, -0.003215f, 0.002137f, -0.002232f, 0.004740f, 0.003814f, 0.003247f, -0.001671f, 0.001124f, 0.000086f, -0.002644f, 0.001276f, 0.004631f, 0.000773f, 0.001570f, - -0.002787f, 0.001819f, -0.001544f, 0.001077f, -0.002153f, 0.000460f, 0.002681f, -0.007941f, 0.002140f, -0.004915f, -0.010071f, -0.000981f, -0.011896f, -0.014418f, -0.009117f, -0.006905f, -0.015914f, 0.000644f, -0.005752f, -0.003197f, 0.004888f, 0.016951f, 0.001545f, -0.004024f, -0.001950f, 0.002728f, -0.000337f, 0.007043f, 0.012024f, -0.001015f, 0.013502f, -0.001553f, -0.000890f, -0.001616f, 0.007688f, -0.010169f, 0.001578f, 0.001234f, -0.002503f, -0.000579f, -0.006080f, -0.010106f, 0.013880f, -0.004724f, -0.001039f, -0.002475f, 0.006121f, -0.006605f, -0.005691f, 0.002420f, 0.002054f, 0.009700f, -0.006659f, 0.007989f, -0.004674f, -0.007999f, -0.000636f, -0.003305f, 0.002165f, 0.004353f, -0.000180f, 0.005649f, 0.002682f, 0.004118f, -0.005360f, -0.006291f, -0.010430f, -0.007660f, 0.000971f, 0.012446f, 0.001565f, 0.010109f, 0.002617f, -0.005205f, 0.006944f, 0.003301f, -0.007517f, 0.013171f, 0.002189f, -0.012403f, 0.003225f, 0.005622f, 0.001108f, 0.003734f, 0.003219f, -0.008787f, 0.003197f, 0.003078f, 0.002160f, -0.000505f, 0.006462f, 0.002176f, -0.001662f, -0.002122f, -0.000052f, 0.002588f, - -0.000081f, 0.003514f, -0.000117f, 0.000171f, 0.002020f, -0.000840f, -0.001935f, -0.001241f, 0.000343f, -0.001716f, -0.001841f, 0.002262f, -0.000222f, 0.002171f, 0.001901f, -0.000529f, -0.000196f, -0.014763f, -0.013121f, 0.002782f, 0.001476f, 0.010984f, -0.008507f, 0.011299f, -0.005771f, -0.002563f, -0.017800f, -0.001183f, 0.001134f, -0.006146f, -0.001115f, 0.009485f, 0.008934f, 0.013450f, -0.003361f, -0.002114f, 0.008355f, 0.003900f, 0.007494f, -0.018375f, 0.018067f, -0.003971f, -0.000336f, 0.002815f, -0.002305f, -0.000206f, -0.001717f, -0.001319f, 0.011165f, -0.000396f, 0.014686f, -0.002612f, -0.006155f, -0.012366f, 0.001332f, -0.005639f, -0.004985f, 0.008428f, 0.006463f, 0.008815f, 0.000187f, 0.001028f, -0.013208f, -0.009519f, -0.000255f, 0.011850f, 0.004009f, -0.001610f, 0.003875f, -0.005045f, 0.012583f, -0.000755f, -0.011086f, -0.013999f, -0.005091f, 0.015529f, 0.011671f, 0.011977f, 0.005483f, 0.000381f, -0.013174f, -0.005908f, -0.001959f, -0.007709f, 0.007937f, -0.001442f, -0.003767f, 0.006817f, -0.018710f, 0.005505f, -0.002489f, 0.004358f, -0.001533f, -0.005382f, 0.008374f, 0.003149f, - -0.008902f, -0.009425f, 0.004691f, -0.002486f, 0.005484f, 0.001460f, -0.004062f, 0.002848f, 0.003471f, -0.000195f, 0.001307f, -0.000029f, 0.000357f, -0.001599f, -0.000072f, -0.002614f, -0.000015f, -0.002280f, 0.003652f, 0.001995f, -0.002846f, 0.001387f, -0.000757f, 0.000961f, 0.000954f, 0.001271f, -0.002124f, -0.001832f, 0.000627f, 0.001358f, -0.003873f, 0.003723f, -0.004202f, -0.008097f, -0.001338f, -0.006273f, 0.002868f, 0.010150f, 0.003975f, 0.000357f, -0.004141f, -0.023602f, -0.015560f, -0.000513f, 0.006828f, 0.008261f, 0.000472f, 0.001665f, -0.003335f, 0.008190f, 0.003626f, 0.006561f, -0.010293f, 0.009749f, 0.005595f, -0.011096f, 0.004150f, 0.010164f, -0.000564f, 0.003282f, 0.001650f, 0.009216f, -0.007176f, 0.005467f, -0.000943f, -0.001251f, -0.008827f, 0.000532f, 0.009434f, -0.006030f, -0.004369f, -0.008269f, 0.011074f, -0.001091f, 0.002150f, -0.008699f, -0.024782f, -0.007232f, 0.003633f, 0.002277f, 0.009147f, -0.006601f, -0.004078f, -0.003768f, -0.001663f, -0.007973f, 0.000242f, -0.007200f, 0.016228f, 0.005702f, 0.013237f, -0.013422f, -0.002649f, -0.005574f, 0.012403f, -0.003789f, - -0.002295f, -0.010340f, 0.006405f, -0.000225f, -0.006913f, 0.010555f, 0.003267f, 0.001279f, 0.012112f, 0.002582f, -0.010633f, -0.001498f, 0.001280f, -0.002902f, -0.003594f, 0.000065f, -0.009032f, 0.017895f, 0.007373f, 0.002590f, 0.011154f, 0.004830f, 0.004404f, 0.008187f, -0.002355f, 0.006926f, -0.003986f, 0.001182f, 0.000710f, 0.000403f, -0.002079f, 0.001240f, 0.000530f, -0.000672f, -0.001219f, -0.001173f, 0.000853f, -0.000930f, 0.000072f, 0.005926f, 0.000616f, -0.000188f, -0.000108f, -0.000093f, -0.000809f, 0.004700f, 0.001211f, 0.006589f, -0.005248f, 0.004182f, 0.000396f, -0.002713f, 0.011200f, 0.008519f, -0.000863f, -0.015278f, -0.020381f, -0.015756f, 0.005833f, 0.000004f, -0.008803f, -0.002305f, 0.001033f, -0.002013f, 0.022936f, 0.003951f, -0.016571f, -0.004416f, -0.004953f, 0.000824f, -0.007800f, 0.012962f, -0.009695f, -0.012719f, 0.011876f, -0.005005f, 0.003261f, 0.003142f, -0.005432f, -0.014973f, 0.001994f, -0.007986f, -0.007044f, -0.007341f, -0.000914f, 0.011633f, -0.001611f, -0.002655f, 0.017211f, 0.003143f, 0.002635f, -0.022225f, -0.002480f, 0.011827f, 0.013864f, -0.007687f, - 0.003760f, 0.001878f, -0.021917f, -0.002953f, -0.001347f, -0.002256f, 0.005516f, 0.000225f, -0.012299f, 0.001577f, -0.009837f, 0.009400f, -0.003353f, 0.012105f, 0.002411f, -0.013952f, 0.006159f, 0.026099f, -0.010162f, 0.000197f, -0.019489f, 0.004683f, 0.016364f, -0.029398f, 0.004173f, -0.002128f, -0.002565f, 0.007257f, -0.004762f, -0.007710f, 0.013754f, 0.013127f, -0.011414f, -0.001432f, 0.008600f, -0.003891f, 0.002007f, 0.004012f, 0.002524f, 0.000779f, -0.003356f, 0.007289f, -0.000227f, 0.004743f, 0.000169f, 0.006503f, 0.004435f, 0.004077f, -0.000385f, 0.001349f, 0.007272f, 0.000719f, -0.001544f, 0.002496f, 0.002233f, 0.000794f, 0.006031f, -0.003447f, 0.001886f, 0.000891f, -0.001399f, 0.000359f, 0.002143f, 0.001441f, 0.000686f, -0.000666f, 0.019643f, 0.002444f, 0.008809f, 0.013919f, -0.017162f, -0.005267f, -0.013097f, 0.006589f, 0.007600f, 0.015116f, 0.029261f, 0.004607f, -0.022316f, -0.002086f, -0.005610f, -0.002315f, -0.009651f, 0.000036f, -0.001080f, 0.011062f, 0.008806f, 0.003206f, -0.000791f, 0.000443f, -0.003437f, -0.002553f, 0.012674f, -0.004134f, -0.001698f, 0.009472f, - -0.001190f, 0.005581f, -0.000946f, 0.012056f, -0.009205f, -0.018226f, 0.022670f, -0.001336f, 0.005382f, -0.017061f, 0.001257f, -0.005191f, 0.025153f, 0.003963f, 0.011386f, -0.002382f, 0.010097f, 0.006795f, -0.022766f, -0.003589f, -0.012784f, -0.010991f, 0.001534f, 0.016043f, 0.002013f, -0.003224f, 0.024904f, -0.002639f, -0.014075f, -0.010748f, -0.007365f, 0.012223f, 0.037628f, -0.000078f, 0.010441f, 0.002699f, -0.011995f, -0.002634f, 0.000206f, 0.011165f, 0.017105f, 0.001573f, 0.013748f, 0.012266f, -0.022533f, 0.000746f, -0.004027f, -0.000574f, 0.011290f, -0.005040f, 0.002933f, 0.005332f, -0.001738f, -0.011571f, -0.008034f, -0.016901f, 0.004042f, 0.006737f, -0.000853f, 0.002601f, 0.002485f, 0.002054f, -0.000208f, -0.005248f, 0.001109f, 0.002490f, -0.000300f, 0.002306f, -0.002745f, 0.004502f, -0.000392f, 0.002262f, -0.001249f, -0.000810f, -0.002180f, 0.000572f, -0.001173f, 0.000792f, 0.003717f, 0.005978f, 0.004938f, 0.000749f, 0.001287f, 0.003662f, 0.002030f, 0.000115f, 0.002062f, -0.006698f, -0.029061f, 0.006586f, -0.002941f, 0.009966f, 0.006384f, 0.027043f, 0.005438f, -0.005126f, - 0.006476f, 0.020690f, 0.022901f, 0.009451f, 0.016126f, 0.016495f, -0.012811f, -0.009957f, -0.020753f, -0.022424f, 0.002437f, 0.009654f, -0.018975f, -0.013500f, -0.001047f, -0.021947f, -0.018198f, 0.009203f, 0.002933f, -0.009762f, -0.006509f, -0.014407f, 0.011927f, 0.008707f, 0.019624f, 0.037323f, -0.004166f, -0.010613f, -0.004012f, -0.018430f, -0.000243f, -0.014367f, -0.015895f, 0.019111f, 0.002157f, 0.002606f, -0.024616f, 0.025365f, 0.005020f, -0.015844f, -0.005108f, 0.013042f, 0.000850f, 0.002802f, -0.000459f, 0.002096f, 0.007404f, -0.012144f, 0.014183f, 0.000283f, -0.010004f, -0.002818f, -0.017123f, 0.002628f, -0.017580f, -0.015609f, 0.013433f, 0.013867f, -0.013988f, -0.022217f, 0.005619f, -0.010731f, -0.001632f, -0.005949f, 0.007431f, -0.006387f, 0.009816f, 0.003118f, 0.011890f, -0.002737f, 0.008872f, 0.004555f, -0.019945f, -0.007001f, 0.004863f, 0.002584f, 0.000323f, -0.009879f, -0.005591f, -0.002977f, 0.006547f, -0.003837f, -0.003339f, 0.000260f, 0.005237f, 0.004069f, -0.000264f, -0.000314f, -0.005745f, -0.003102f, 0.001062f, -0.001375f, -0.000611f, 0.004657f, 0.000476f, -0.000350f, - -0.004230f, 0.004019f, 0.001258f, -0.001551f, -0.000847f, -0.002843f, -0.000570f, -0.003144f, 0.004232f, -0.001071f, 0.001931f, -0.001250f, -0.011083f, -0.012094f, 0.014612f, -0.004505f, -0.003474f, 0.008459f, -0.012223f, -0.012837f, 0.014730f, 0.019739f, 0.000291f, -0.001206f, 0.006637f, -0.016992f, 0.028934f, -0.017796f, 0.002051f, 0.013861f, -0.006645f, 0.012931f, 0.015581f, 0.005144f, -0.016474f, 0.017688f, -0.002694f, 0.006640f, -0.012930f, -0.002420f, -0.024537f, 0.008410f, -0.014600f, 0.005594f, -0.025252f, 0.014776f, -0.018474f, -0.012879f, 0.010485f, 0.014585f, 0.004861f, 0.001597f, 0.000560f, -0.015862f, -0.014747f, -0.009415f, 0.038293f, 0.021011f, -0.006072f, -0.035552f, -0.005049f, 0.009953f, 0.020640f, -0.011736f, 0.001652f, -0.024590f, -0.008465f, -0.003085f, 0.006362f, 0.003547f, -0.005529f, -0.000498f, 0.010756f, -0.012207f, -0.000681f, -0.013908f, 0.007530f, 0.008995f, 0.026487f, 0.011186f, -0.012870f, 0.005400f, -0.007161f, -0.020079f, -0.002520f, 0.011508f, 0.001659f, 0.032912f, -0.018858f, -0.009276f, 0.005118f, -0.017250f, 0.008798f, 0.002685f, -0.003214f, 0.016688f, - 0.004179f, 0.007335f, 0.000164f, 0.000544f, -0.002574f, 0.008220f, 0.012384f, 0.002917f, -0.003513f, 0.008991f, -0.004672f, 0.002783f, -0.008467f, -0.002905f, 0.000035f, -0.011267f, -0.000139f, -0.004418f, -0.001932f, -0.004409f, -0.007215f, -0.003418f, 0.002558f, 0.002781f, 0.002021f, -0.002415f, -0.000293f, 0.004903f, -0.008126f, 0.000804f, 0.000777f, -0.025277f, -0.003716f, 0.005187f, 0.014922f, 0.007268f, 0.019482f, 0.003553f, -0.023288f, 0.014832f, -0.019701f, -0.021084f, 0.000590f, -0.001909f, 0.016053f, 0.019961f, 0.018357f, 0.026776f, 0.006551f, -0.027607f, 0.030245f, 0.016547f, -0.012208f, 0.023279f, -0.002996f, 0.002857f, -0.020392f, -0.007039f, -0.005870f, -0.009023f, 0.019518f, -0.032738f, -0.007393f, -0.015366f, -0.014618f, 0.002737f, 0.015814f, -0.007446f, -0.018889f, -0.020024f, -0.026100f, -0.026372f, -0.013397f, -0.004456f, 0.011414f, -0.020692f, -0.026852f, -0.015845f, -0.006748f, -0.013149f, -0.008794f, 0.023457f, -0.013141f, 0.002246f, 0.012451f, -0.021199f, -0.012598f, -0.014272f, 0.023087f, -0.009793f, 0.015046f, 0.033089f, -0.003186f, 0.007462f, 0.003255f, -0.010077f, - -0.013250f, -0.009028f, 0.015636f, -0.002278f, 0.017899f, 0.001124f, 0.013520f, 0.003193f, -0.022667f, 0.028160f, -0.012100f, -0.003538f, -0.024081f, 0.014841f, 0.031651f, 0.005390f, -0.004301f, 0.008442f, 0.003692f, -0.020199f, -0.009417f, 0.001243f, -0.004759f, -0.002133f, -0.008694f, -0.008493f, -0.001379f, 0.001552f, 0.001293f, 0.014744f, -0.001672f, 0.001910f, -0.007254f, 0.005628f, 0.000632f, 0.011090f, 0.004827f, 0.005026f, 0.002118f, -0.001289f, -0.004729f, -0.003974f, -0.006578f, -0.001402f, -0.004948f, 0.003349f, 0.001725f, -0.000077f, -0.003440f, -0.002904f, -0.002514f, -0.000979f, 0.001178f, -0.001155f, 0.006081f, 0.046849f, 0.029538f, 0.021497f, -0.015534f, -0.033721f, -0.009103f, 0.020533f, -0.031942f, -0.017402f, 0.000616f, 0.025092f, 0.017982f, 0.014580f, -0.018508f, 0.013968f, -0.004987f, 0.013964f, -0.003662f, 0.036279f, 0.021744f, -0.001789f, -0.033368f, -0.003432f, 0.025288f, 0.021521f, 0.000892f, 0.043979f, 0.019887f, -0.008831f, -0.000021f, 0.003044f, -0.005205f, -0.012273f, -0.016940f, -0.002655f, -0.047555f, 0.013481f, -0.016316f, 0.002269f, -0.001678f, 0.012427f, - 0.017689f, 0.000455f, 0.004706f, -0.021213f, 0.015119f, -0.007704f, 0.031483f, 0.000728f, 0.004495f, -0.076698f, -0.003300f, 0.020472f, 0.010564f, 0.021774f, -0.007466f, -0.021472f, 0.011932f, 0.004171f, -0.017595f, 0.016756f, 0.003396f, -0.016861f, 0.000247f, 0.000728f, 0.005884f, -0.006193f, -0.028079f, -0.028128f, -0.001155f, -0.010117f, 0.009433f, 0.009922f, 0.004173f, 0.010560f, -0.034381f, -0.011783f, 0.001772f, 0.007629f, 0.008303f, -0.013688f, 0.010801f, 0.002523f, -0.004920f, 0.003638f, 0.009744f, -0.006475f, 0.001310f, -0.002089f, 0.004031f, -0.006588f, -0.010304f, -0.003478f, 0.012259f, -0.009267f, 0.001308f, -0.006925f, 0.004912f, -0.002865f, 0.004349f, 0.007065f, -0.000850f, -0.007029f, 0.005754f, -0.001190f, -0.008219f, -0.005245f, 0.002957f, 0.003800f, 0.000454f, -0.003323f, 0.001638f, -0.000671f, 0.005073f, -0.002397f, 0.009832f, -0.003363f, -0.000631f, -0.032367f, -0.052074f, 0.008399f, 0.018025f, 0.018723f, 0.000437f, 0.043273f, -0.030789f, 0.010145f, 0.005915f, -0.008783f, -0.027333f, -0.011516f, -0.015551f, 0.018347f, -0.008069f, -0.016837f, -0.027821f, -0.002580f, - -0.010291f, -0.005324f, -0.020989f, 0.011173f, -0.001332f, -0.009829f, 0.011281f, 0.014369f, 0.017004f, -0.022114f, 0.040355f, 0.002441f, -0.005824f, -0.024812f, -0.023331f, -0.004755f, -0.003083f, -0.024203f, -0.025234f, -0.019367f, 0.016237f, -0.011225f, 0.026940f, 0.008617f, 0.044968f, 0.015422f, 0.017052f, -0.005794f, 0.024097f, -0.004218f, 0.005774f, 0.034170f, -0.010455f, 0.012384f, -0.041148f, -0.052369f, 0.011372f, -0.002496f, -0.033271f, 0.002050f, 0.000775f, -0.045204f, 0.012668f, -0.013333f, -0.008989f, -0.017670f, 0.016997f, -0.016512f, 0.000886f, -0.001846f, 0.008165f, 0.000019f, -0.024787f, 0.014487f, -0.003624f, 0.005753f, -0.031249f, -0.043081f, -0.038389f, 0.002104f, -0.009149f, -0.043622f, -0.009237f, 0.041858f, 0.022015f, 0.009689f, 0.007930f, -0.019384f, 0.000584f, -0.004470f, 0.001817f, -0.006400f, -0.005215f, -0.000250f, -0.000531f, 0.001644f, -0.000116f, -0.013542f, -0.003308f, 0.003541f, -0.002593f, 0.006491f, 0.010627f, 0.008927f, -0.000151f, -0.001524f, -0.004697f, 0.014166f, 0.008120f, 0.009318f, 0.007731f, 0.005703f, -0.001104f, -0.005424f, -0.004910f, 0.011051f, - -0.008615f, 0.006586f, 0.009264f, 0.003625f, 0.004547f, 0.000743f, 0.002706f, -0.007487f, 0.000638f, -0.002167f, -0.006453f, 0.003083f, 0.008386f, 0.031690f, 0.041365f, -0.001136f, 0.011018f, 0.026165f, 0.021449f, -0.002150f, -0.052632f, 0.036085f, -0.003535f, 0.009855f, -0.010716f, 0.018519f, -0.001282f, -0.022741f, 0.006436f, 0.041459f, 0.006365f, -0.027153f, 0.023984f, 0.017157f, 0.011241f, -0.020418f, 0.022072f, 0.016372f, 0.001973f, 0.026353f, -0.010465f, 0.007069f, 0.042449f, 0.030928f, 0.001289f, 0.009794f, 0.020875f, -0.040025f, -0.008027f, -0.002554f, -0.006211f, -0.035075f, 0.009041f, 0.010599f, 0.002082f, -0.027206f, -0.000361f, -0.046570f, 0.002555f, -0.033286f, -0.006516f, 0.017118f, -0.014136f, -0.020163f, -0.016135f, 0.009858f, 0.008194f, -0.018610f, 0.007426f, -0.006740f, 0.023017f, -0.011982f, -0.013434f, 0.011932f, 0.021508f, -0.002108f, 0.009398f, 0.008250f, -0.050799f, -0.001217f, -0.003708f, -0.025969f, 0.002726f, 0.033057f, 0.010122f, -0.009339f, -0.004058f, 0.024141f, 0.016999f, 0.010523f, -0.006818f, 0.038331f, 0.000401f, -0.031913f, 0.004288f, 0.038360f, - 0.019927f, 0.019463f, 0.011536f, 0.002071f, -0.009477f, -0.010893f, 0.006927f, 0.006220f, 0.009117f, 0.014392f, -0.003584f, 0.011361f, 0.006922f, 0.001109f, -0.001974f, -0.001193f, 0.005081f, -0.005212f, -0.002027f, -0.005169f, -0.000149f, -0.002452f, 0.005594f, -0.011600f, 0.001954f, 0.003929f, 0.001210f, 0.008819f, -0.015695f, -0.006555f, 0.002607f, 0.002978f, -0.001616f, 0.009025f, -0.003380f, -0.003028f, -0.004397f, 0.001017f, 0.005764f, 0.006837f, -0.008775f, 0.001267f, 0.003968f, -0.008010f, -0.005141f, -0.004435f, 0.020225f, -0.046566f, 0.019788f, -0.048222f, -0.057211f, -0.037011f, 0.002425f, -0.031579f, 0.030751f, -0.009683f, -0.038464f, -0.001339f, -0.009774f, 0.005186f, 0.007179f, -0.009012f, -0.004956f, 0.025337f, -0.007565f, 0.009643f, -0.013819f, -0.013809f, 0.040390f, -0.013635f, -0.004624f, -0.001250f, 0.009216f, 0.024849f, -0.050683f, -0.003469f, 0.027173f, 0.026175f, 0.024600f, 0.003206f, -0.009163f, 0.052124f, 0.017718f, 0.016398f, 0.020398f, 0.009225f, -0.007321f, 0.000323f, 0.030759f, 0.009891f, -0.021675f, 0.011447f, 0.056613f, -0.029917f, 0.039142f, 0.014293f, - -0.059673f, 0.014415f, 0.040165f, -0.004394f, 0.018101f, -0.000259f, -0.045207f, 0.022847f, 0.056425f, 0.003159f, 0.038396f, -0.023238f, 0.033981f, 0.028032f, -0.000836f, -0.005091f, 0.031203f, 0.016476f, -0.040852f, 0.040916f, -0.010037f, -0.009353f, 0.024920f, -0.012033f, -0.014633f, -0.018264f, 0.006474f, 0.002126f, 0.006912f, -0.001717f, -0.008196f, 0.030748f, -0.027380f, 0.004743f, -0.005591f, -0.008971f, -0.022357f, -0.021298f, 0.012652f, -0.001612f, -0.013740f, -0.018999f, -0.015871f, -0.027068f, -0.019152f, -0.001054f, -0.013232f, -0.007956f, -0.001894f, -0.014023f, 0.005996f, -0.012340f, -0.012672f, -0.003426f, 0.003224f, 0.004530f, -0.006335f, -0.000772f, -0.019888f, 0.007988f, -0.020865f, 0.016031f, -0.005289f, -0.001297f, -0.009106f, -0.004965f, -0.000952f, 0.024001f, 0.012083f, -0.002416f, 0.005785f, 0.016539f, 0.009038f, -0.008984f, -0.004217f, 0.006527f, -0.008128f, 0.013515f, 0.003091f, -0.005125f, -0.018130f, -0.032180f, 0.077282f, 0.038239f, -0.090116f, -0.037148f, 0.009565f, -0.014938f, 0.026034f, 0.030650f, 0.032889f, 0.037622f, -0.023113f, 0.071278f, -0.010727f, 0.001801f, - -0.023330f, 0.026862f, 0.035794f, -0.025793f, -0.029423f, -0.006187f, -0.016945f, 0.003173f, 0.014276f, 0.002211f, -0.018522f, -0.006992f, 0.029353f, -0.002331f, 0.014833f, 0.003592f, 0.035322f, 0.052951f, 0.020083f, -0.025440f, -0.059642f, -0.004988f, -0.010125f, 0.006733f, -0.013804f, 0.019697f, 0.033059f, 0.003012f, -0.012255f, -0.027226f, 0.065206f, 0.057047f, -0.007567f, 0.027870f, -0.015522f, -0.020811f, -0.062814f, 0.034749f, -0.029311f, -0.006726f, -0.001880f, -0.019603f, 0.011002f, 0.038611f, 0.005898f, -0.016993f, 0.018310f, -0.007846f, -0.025932f, 0.039483f, 0.008010f, -0.054641f, 0.070055f, -0.047427f, -0.025426f, 0.027126f, 0.027804f, 0.023337f, 0.000394f, -0.058364f, -0.005028f, 0.005163f, -0.003396f, -0.019154f, 0.011310f, -0.010000f, 0.004134f, 0.007286f, -0.024243f, 0.028042f, 0.019509f, 0.009422f, 0.003762f, -0.011459f, -0.008514f, -0.000536f, 0.009883f, 0.000893f, 0.007623f, -0.004552f, -0.018779f, 0.005706f, -0.027525f, -0.008703f, 0.008754f, -0.008116f, 0.015054f, -0.012739f, -0.001886f, -0.010823f, 0.011995f, 0.001062f, 0.014753f, 0.017165f, 0.011792f, 0.000508f, - -0.012994f, 0.009439f, 0.015957f, -0.003151f, -0.001867f, -0.017093f, -0.007545f, 0.019854f, -0.006787f, 0.013409f, -0.001165f, -0.007463f, 0.007036f, 0.006664f, -0.000410f, -0.011262f, 0.020507f, -0.024867f, 0.002773f, 0.035555f, 0.010544f, -0.048238f, -0.038693f, -0.009262f, 0.060354f, 0.006312f, -0.028984f, -0.077848f, -0.021657f, -0.003534f, 0.018485f, 0.053584f, 0.041050f, -0.005729f, 0.000509f, 0.035252f, 0.028686f, 0.001339f, 0.007866f, -0.105050f, -0.066236f, -0.032274f, -0.051905f, 0.004514f, -0.028953f, 0.046489f, -0.010642f, -0.003643f, -0.000227f, -0.018721f, -0.021377f, 0.033686f, 0.020991f, 0.011924f, -0.004763f, -0.016040f, -0.014367f, 0.016782f, -0.037646f, -0.014105f, 0.006660f, -0.013051f, -0.018334f, 0.015702f, -0.054414f, -0.076140f, 0.018109f, 0.023792f, 0.029551f, -0.044462f, -0.023642f, 0.024621f, 0.009348f, -0.074224f, -0.065191f, 0.003962f, -0.031550f, -0.032636f, 0.012140f, -0.059965f, 0.030431f, -0.023196f, 0.025009f, 0.023999f, -0.014876f, -0.033797f, -0.078099f, -0.027379f, -0.023463f, 0.043840f, -0.037892f, -0.024713f, 0.013367f, 0.044815f, 0.026124f, 0.000251f, - -0.015254f, -0.005019f, 0.013409f, -0.013439f, 0.045289f, -0.028063f, -0.021996f, -0.010630f, -0.003936f, 0.012452f, -0.033363f, 0.019650f, 0.015063f, -0.013976f, -0.023362f, 0.005435f, -0.001354f, 0.022747f, -0.029178f, -0.038059f, -0.009655f, 0.006023f, -0.021055f, -0.003170f, -0.025461f, 0.001102f, 0.006211f, -0.011457f, 0.017765f, -0.004786f, -0.012590f, 0.005518f, -0.008510f, 0.005183f, -0.007251f, -0.026450f, -0.001163f, 0.001942f, 0.025251f, 0.019806f, -0.012154f, 0.000091f, -0.001361f, -0.014933f, -0.019105f, 0.009266f, -0.004854f, 0.030880f, 0.042629f, -0.006877f, -0.057109f, 0.025858f, -0.008473f, -0.023922f, -0.049215f, 0.014679f, 0.021218f, -0.073191f, 0.027753f, 0.025972f, 0.066110f, 0.005948f, -0.016403f, 0.004073f, -0.080608f, -0.023463f, -0.009673f, 0.001046f, 0.014917f, -0.027605f, 0.049628f, 0.019817f, 0.061311f, -0.012286f, 0.053947f, 0.034550f, 0.021410f, 0.049046f, 0.024965f, 0.032367f, 0.041804f, 0.001825f, -0.054432f, -0.051480f, 0.010613f, 0.058942f, 0.042691f, -0.078531f, -0.002151f, -0.013301f, -0.010934f, -0.008243f, -0.054301f, 0.013936f, -0.038651f, 0.034884f, - -0.025822f, 0.078713f, -0.020597f, -0.112924f, -0.011901f, -0.038915f, 0.022567f, 0.016770f, 0.032280f, 0.073288f, 0.016492f, -0.009954f, 0.040246f, -0.023688f, 0.082009f, 0.013787f, 0.054909f, 0.025762f, 0.005120f, -0.020756f, -0.018658f, 0.134402f, 0.000931f, -0.092767f, -0.018521f, 0.074154f, -0.044180f, 0.009735f, -0.020307f, 0.032562f, 0.068220f, 0.039319f, -0.078414f, -0.005060f, -0.077191f, 0.010760f, -0.010522f, -0.045769f, -0.005259f, -0.012362f, -0.020133f, -0.000096f, -0.039455f, -0.043459f, 0.015203f, 0.016452f, -0.002000f, -0.048637f, 0.035324f, -0.043089f, -0.066609f, -0.028408f, 0.016797f, -0.016522f, -0.029586f, -0.038278f, 0.007216f, 0.016241f, -0.034586f, -0.026508f, 0.013067f, -0.015341f, -0.027865f, 0.022969f, 0.018482f, -0.001608f, -0.003319f, 0.001366f, -0.006218f, -0.011422f, -0.012026f, 0.004520f, -0.025689f, 0.015252f, -0.009041f, 0.005829f, -0.032714f, 0.036997f, 0.016022f, -0.076777f, -0.028803f, -0.087189f, 0.013292f, 0.076855f, -0.056630f, -0.053104f, 0.050782f, 0.023875f, -0.086917f, -0.082370f, 0.026411f, 0.004360f, 0.012094f, 0.028042f, -0.003431f, -0.024730f, - -0.012574f, 0.052636f, -0.037684f, 0.064995f, 0.010595f, -0.015219f, 0.013896f, 0.037551f, -0.000123f, -0.011242f, -0.069549f, -0.030524f, 0.007733f, -0.037273f, 0.032174f, 0.048041f, 0.003482f, 0.007956f, -0.049751f, 0.059354f, -0.020827f, -0.026528f, 0.048421f, -0.018593f, 0.000119f, -0.034711f, -0.003507f, -0.024401f, -0.085521f, 0.029370f, -0.009560f, 0.063595f, 0.081579f, -0.001185f, -0.014536f, -0.051684f, -0.016317f, -0.014379f, 0.077633f, -0.073769f, -0.052059f, -0.122284f, 0.002893f, -0.050619f, 0.014069f, 0.042444f, -0.022850f, -0.006370f, 0.083456f, 0.053822f, 0.038079f, 0.006586f, 0.003847f, 0.063330f, -0.068623f, -0.002979f, 0.019533f, -0.008100f, 0.037919f, 0.018188f, 0.161032f, 0.025466f, -0.043946f, -0.002462f, -0.030101f, -0.079342f, -0.031416f, 0.002961f, 0.013513f, -0.015277f, -0.016421f, -0.015016f, -0.056661f, -0.000709f, -0.004634f, -0.030097f, 0.008065f, 0.020218f, -0.048570f, 0.003193f, -0.032941f, 0.012927f, -0.002214f, -0.011442f, -0.006504f, 0.002832f, 0.028681f, 0.016729f, 0.001327f, 0.031737f, -0.019445f, -0.004095f, -0.009225f, 0.029873f, 0.020027f, 0.014225f, - 0.030749f, 0.014309f, -0.021852f, -0.010491f, -0.003532f, 0.015241f, -0.027504f, -0.007070f, 0.000952f, -0.031058f, -0.009599f, 0.005675f, 0.074445f, -0.054685f, 0.018975f, -0.018776f, -0.026542f, -0.025881f, 0.112524f, -0.015093f, 0.055250f, -0.044615f, 0.076780f, -0.026636f, 0.001153f, 0.041352f, 0.044358f, 0.105863f, 0.005085f, 0.017300f, 0.015583f, -0.044981f, 0.054701f, 0.016920f, -0.032076f, 0.053258f, -0.022205f, 0.067080f, 0.051327f, -0.015874f, 0.044676f, 0.002059f, 0.041728f, 0.008371f, 0.070713f, -0.043132f, 0.035350f, -0.071373f, -0.017731f, 0.023968f, 0.076669f, -0.003352f, 0.006356f, 0.032971f, -0.000063f, -0.025784f, -0.091914f, -0.056933f, 0.015967f, -0.039538f, -0.001517f, 0.029116f, -0.080035f, 0.049142f, -0.003267f, 0.058439f, -0.027534f, -0.054606f, -0.009255f, 0.151004f, 0.034564f, -0.137327f, 0.024490f, 0.035011f, 0.008864f, 0.149512f, -0.008717f, -0.110057f, 0.114554f, -0.038479f, -0.007039f, 0.125140f, -0.013107f, 0.082340f, 0.013607f, -0.074282f, 0.003519f, 0.127949f, -0.103997f, 0.054875f, -0.063579f, -0.072037f, 0.053861f, 0.032292f, -0.065589f, -0.024073f, - -0.040575f, -0.022133f, -0.023537f, 0.012069f, -0.039968f, -0.008160f, 0.016574f, -0.041290f, -0.029273f, 0.021711f, -0.048121f, -0.011646f, 0.017669f, 0.006941f, -0.010682f, 0.036688f, -0.015245f, -0.012113f, -0.017071f, -0.032752f, 0.016598f, -0.021020f, -0.023949f, -0.005521f, 0.004866f, 0.048944f, 0.000836f, 0.014077f, -0.039537f, 0.004444f, 0.052227f, -0.009297f, -0.005458f, -0.003733f, 0.003223f, 0.003965f, 0.036721f, -0.018672f, -0.021413f, -0.010653f, -0.033677f, -0.040485f, 0.011651f, -0.019942f, 0.008999f, 0.013328f, -0.005274f, -0.110403f, -0.008387f, 0.017399f, -0.041257f, -0.011691f, -0.115874f, 0.073770f, 0.112787f, -0.049148f, 0.016068f, -0.085370f, -0.250249f, -0.047491f, 0.011744f, 0.127530f, 0.106843f, -0.104074f, -0.093002f, -0.093449f, -0.076979f, -0.053982f, 0.066399f, -0.010981f, 0.146110f, 0.099341f, -0.029225f, -0.120197f, -0.301726f, -0.194869f, 0.013809f, 0.335670f, 0.255193f, 0.047303f, -0.131314f, -0.329217f, -0.337640f, -0.023978f, 0.196919f, 0.304910f, 0.333831f, 0.035043f, -0.107685f, -0.135913f, -0.180901f, -0.162437f, 0.011172f, 0.113456f, 0.210252f, 0.145297f, - 0.115787f, -0.149828f, -0.184240f, -0.216013f, -0.260730f, 0.029940f, 0.313079f, 0.309027f, 0.062997f, -0.110626f, -0.293115f, -0.384056f, -0.129791f, 0.030308f, 0.143349f, 0.351700f, 0.129591f, -0.000225f, -0.193288f, -0.157818f, -0.066386f, 0.080397f, 0.137634f, 0.241585f, 0.063382f, 0.126408f, -0.009833f, -0.161123f, -0.133406f, 0.008007f, 0.155933f, 0.170213f, -0.077035f, -0.147250f, -0.180680f, -0.045012f, 0.029926f, 0.043257f, 0.027953f, -0.090103f, -0.077963f, -0.032134f, 0.058160f, 0.000229f, 0.001244f, 0.013140f, 0.046597f, 0.037606f, 0.029207f, -0.015707f, -0.109870f, -0.073062f, 0.008571f, 0.056989f, 0.105576f, 0.051161f, -0.029413f, -0.069656f, -0.091984f, -0.057639f, -0.036764f, -0.048197f, 0.105888f, 0.110496f, 0.121359f, 0.100694f, -0.046386f, -0.192847f, -0.163313f, -0.088040f, 0.074774f, 0.244135f, 0.236756f, 0.013376f, -0.149039f, -0.233417f, -0.209940f, -0.013601f, 0.117013f, 0.109968f, 0.053630f, 0.048353f, 0.003074f, -0.062589f, -0.074889f, -0.094936f, -0.014010f, 0.088896f, 0.109335f, -0.029740f, 0.053864f, 0.041415f, -0.094987f, 0.001037f, 0.048856f, -0.039245f, - 0.054002f, -0.002193f, -0.009904f, -0.003874f, 0.010883f, 0.041057f, -0.016138f, 0.048382f, 0.032886f, 0.019710f, 0.021881f, 0.016625f, -0.004204f, -0.027679f, 0.045220f, -0.000594f, 0.027585f, -0.016444f, 0.024559f, -0.008435f, -0.003543f, 0.016726f, -0.022398f, -0.023577f, 0.003452f, -0.010122f, 0.036599f, 0.036223f, -0.033192f, 0.016590f, -0.019781f, 0.022799f, 0.000452f, 0.014985f, 0.005659f, 0.019440f, -0.023647f, 0.016422f, -0.027211f, -0.011744f, -0.003803f, -0.003016f, 0.021919f, -0.041412f, -0.008226f, -0.017059f, -0.036949f, -0.003211f, -0.014548f, 0.008887f, 0.035119f, -0.010503f, -0.048797f, 0.007904f, 0.030209f, 0.059101f, -0.002636f, 0.005266f, -0.031872f, -0.024118f, 0.027438f, 0.002561f, -0.010477f, 0.000893f, 0.048140f, 0.021396f, 0.015154f, 0.026090f, 0.044354f, -0.050272f, 0.020031f, -0.008536f, -0.075152f, -0.008695f, 0.058041f, -0.010717f, 0.051631f, -0.002258f, 0.032040f, -0.037949f, 0.023429f, -0.025799f, -0.007747f, 0.050958f, -0.014704f, 0.004740f, 0.000999f, -0.000177f, 0.018540f, -0.000036f, -0.007698f, -0.004292f, -0.001483f, -0.003564f, 0.009241f, 0.014634f, - 0.021251f, 0.002443f, -0.018338f, -0.008207f, -0.023688f, 0.008894f, -0.024559f, 0.013229f, 0.009968f, -0.007553f, 0.013596f, 0.004364f, -0.025472f, 0.000398f, -0.000142f, 0.008075f, -0.043671f, 0.015192f, 0.009546f, 0.003771f, -0.001309f, -0.012074f, 0.014130f, -0.022079f, 0.022087f, -0.001793f, -0.002820f, 0.005914f, -0.010783f, 0.018703f, -0.021212f, 0.005812f, 0.010555f, -0.034650f, 0.088562f, 0.152586f, 0.013041f, -0.099828f, 0.033504f, -0.007518f, 0.123733f, 0.058121f, 0.121629f, -0.011450f, -0.057761f, -0.015731f, 0.027004f, 0.051101f, 0.040022f, -0.022552f, 0.003962f, 0.021689f, 0.015798f, 0.048273f, -0.033717f, 0.008125f, -0.045482f, -0.007394f, 0.000700f, 0.011678f, 0.023788f, 0.005183f, -0.019358f, 0.036958f, -0.003347f, -0.032717f, 0.044669f, -0.007657f, -0.015885f, 0.011811f, -0.006560f, 0.034688f, 0.055464f, 0.001326f, 0.014546f, -0.018667f, -0.011550f, 0.032009f, 0.023287f, 0.026501f, 0.005345f, -0.016862f, -0.034747f, -0.035789f, -0.038773f, 0.031061f, 0.034257f, 0.033460f, 0.050044f, 0.053483f, 0.023233f, 0.002797f, -0.046646f, 0.028621f, -0.004920f, -0.042457f, - 0.052501f, -0.003878f, 0.034560f, 0.018036f, -0.052431f, 0.014506f, -0.015510f, 0.011204f, 0.035620f, 0.006616f, -0.043809f, -0.031211f, -0.025800f, -0.046046f, 0.028122f, -0.002849f, 0.048458f, -0.000519f, 0.007981f, 0.000944f, -0.026043f, -0.016846f, 0.009261f, -0.039507f, 0.012012f, -0.000430f, -0.007594f, 0.014213f, -0.021871f, 0.013335f, 0.008744f, -0.001797f, -0.018512f, 0.024344f, -0.006096f, 0.021591f, -0.036438f, -0.026906f, -0.015816f, -0.014169f, 0.017291f, -0.007289f, -0.004468f, -0.004672f, -0.018222f, -0.009947f, -0.011185f, 0.000010f, 0.033857f, 0.004495f, -0.008568f, -0.000567f, -0.019654f, 0.014321f, -0.010928f, -0.001946f, -0.007483f, 0.016048f, -0.001381f, 0.002112f, -0.003405f, -0.011653f, -0.007903f, -0.053928f, -0.120350f, 0.008092f, 0.166909f, 0.220475f, 0.189432f, 0.130488f, -0.005429f, 0.008017f, -0.096354f, -0.114900f, -0.192755f, -0.145851f, -0.154738f, -0.050291f, 0.013197f, 0.050334f, 0.084873f, 0.210253f, 0.175156f, 0.117766f, 0.038302f, -0.018673f, -0.075929f, -0.056752f, -0.078951f, -0.100688f, -0.055822f, -0.057637f, -0.070680f, -0.033085f, -0.046463f, 0.009750f, - 0.033037f, 0.027531f, 0.089741f, 0.082605f, 0.073536f, 0.047891f, 0.055731f, 0.034867f, 0.066721f, 0.015923f, 0.057747f, 0.002431f, -0.014922f, -0.100676f, -0.043602f, -0.121317f, -0.140758f, -0.157705f, -0.123402f, -0.092935f, -0.032761f, 0.023648f, 0.090699f, 0.096353f, 0.076214f, 0.156421f, 0.127047f, 0.135475f, 0.125761f, 0.117057f, 0.047206f, 0.075652f, -0.030262f, -0.075559f, -0.078909f, -0.186297f, -0.185857f, -0.179874f, -0.191087f, -0.157869f, -0.053754f, -0.026710f, 0.042643f, 0.106587f, 0.116467f, 0.141946f, 0.171333f, 0.152532f, 0.119183f, 0.107968f, 0.079810f, 0.029590f, -0.002774f, -0.064238f, -0.094109f, -0.095270f, -0.108301f, -0.091194f, -0.101864f, -0.106568f, -0.089604f, -0.070148f, -0.034842f, 0.003930f, 0.046545f, 0.089036f, 0.083795f, 0.082219f, 0.097435f, 0.107195f, 0.083398f, 0.083066f, 0.037426f, -0.039341f, -0.028320f, -0.068973f, -0.087161f, -0.073257f, -0.059743f, -0.042485f, -0.052796f, -0.038727f, 0.004901f, 0.010831f, 0.018871f, 0.046838f, 0.041794f, 0.026020f, 0.006819f, 0.017428f, 0.018401f, 0.005013f, 0.023209f, -0.014671f, -0.015454f, -0.013126f, - 0.008961f, -0.003020f, 0.000760f, -0.001714f, -0.002669f, -0.017645f, -0.011616f, -0.005574f, 0.016843f, -0.000677f, 0.007961f, 0.001837f, -0.008613f, -0.011707f, -0.005322f, -0.008485f, 0.002721f, -0.001242f, 0.003175f, 0.000858f, 0.004170f, -0.005234f, 0.004205f, -0.003965f, 0.001143f, 0.000845f, 0.007884f, -0.000970f, 0.004468f, -0.002981f, 0.003164f} - }, - { - {0.019357f, 0.010286f, -0.001158f, 0.006752f, 0.001689f, 0.001541f, -0.021194f, -0.009223f, -0.010498f, 0.008258f, -0.001136f, -0.006887f, 0.007508f, 0.007751f, 0.000509f, 0.007442f, -0.003109f, -0.000256f, -0.000437f, -0.004595f, -0.002392f, -0.010186f, 0.005264f, -0.015060f, 0.006289f, -0.007856f, 0.006412f, 0.011973f, 0.005466f, -0.002282f, -0.003386f, 0.008847f, -0.001427f, 0.000409f, 0.008374f, -0.008973f, -0.000262f, -0.003037f, -0.005167f, 0.001097f, -0.001257f, 0.001853f, 0.008583f, 0.014144f, -0.004495f, 0.000253f, 0.011748f, 0.000891f, 0.003090f, -0.004329f, -0.006584f, -0.000970f, 0.001974f, -0.011100f, -0.002914f, 0.005798f, 0.000754f, 0.002093f, 0.003444f, -0.001595f, -0.003469f, -0.003283f, -0.003891f, 0.004291f, 0.003516f, -0.002048f, -0.006360f, -0.007821f, 0.003864f, 0.000068f, -0.006491f, 0.006847f, -0.001496f, -0.000457f, 0.001044f, 0.001932f, -0.003239f, 0.004095f, -0.004361f, -0.001476f, 0.005358f, -0.003703f, 0.002135f, -0.006267f, -0.004792f, -0.002309f, -0.001552f, -0.000403f, 0.000847f, -0.002529f, -0.003164f, -0.000320f, -0.001802f, 0.000705f, -0.000668f, -0.000576f, - -0.000863f, 0.000667f, 0.000186f, -0.000665f, -0.001292f, -0.000782f, -0.000481f, -0.000122f, -0.000700f, -0.000451f, -0.000988f, 0.000903f, -0.001448f, -0.000899f, -0.006957f, -0.001912f, 0.000055f, -0.006590f, -0.006667f, -0.004000f, 0.015998f, -0.011237f, -0.004620f, -0.007847f, -0.014288f, 0.005336f, 0.002450f, 0.000556f, 0.012266f, 0.011613f, 0.011638f, 0.003758f, -0.002177f, 0.001800f, 0.008773f, -0.003753f, 0.003784f, 0.004432f, -0.010350f, 0.014737f, 0.002859f, 0.004583f, 0.010899f, -0.004193f, -0.010875f, 0.000733f, 0.007386f, -0.005207f, -0.002362f, -0.006942f, 0.007351f, -0.000191f, -0.000749f, -0.012065f, -0.000523f, -0.001468f, 0.007428f, 0.003792f, -0.006616f, 0.013195f, 0.004870f, 0.002744f, 0.004623f, -0.002155f, 0.007399f, -0.002885f, 0.000365f, -0.009213f, -0.011003f, 0.008818f, 0.006907f, 0.012217f, 0.001193f, 0.003294f, -0.009464f, -0.014651f, -0.007192f, -0.004398f, -0.004268f, -0.006771f, -0.005831f, 0.003017f, -0.001697f, 0.004442f, -0.005500f, -0.002110f, 0.002414f, 0.002731f, -0.001654f, 0.007452f, 0.002264f, -0.005602f, 0.011253f, -0.004417f, 0.003461f, 0.014197f, - 0.003028f, 0.001945f, -0.004404f, 0.000195f, -0.004836f, -0.005780f, -0.000932f, 0.003265f, -0.000067f, 0.000417f, 0.000176f, -0.001569f, -0.000503f, 0.000139f, -0.001420f, 0.003327f, 0.002133f, -0.001249f, -0.000308f, 0.000093f, 0.000873f, 0.000469f, -0.002214f, -0.001198f, -0.000534f, 0.000243f, 0.000985f, -0.001033f, -0.001593f, 0.001367f, -0.000820f, 0.001048f, -0.000571f, -0.000884f, -0.001108f, -0.013779f, -0.012835f, 0.007521f, 0.001720f, 0.010535f, -0.016281f, -0.002300f, -0.006468f, 0.001748f, 0.019403f, 0.011069f, -0.016951f, 0.006417f, 0.001620f, -0.007072f, -0.007857f, -0.009618f, -0.015606f, 0.000557f, 0.001885f, -0.005790f, 0.002789f, -0.003337f, 0.000612f, 0.004711f, 0.003655f, 0.010069f, -0.008791f, 0.015853f, -0.009648f, 0.009207f, 0.007321f, -0.005936f, 0.004292f, 0.000770f, 0.006607f, -0.002636f, 0.003463f, 0.006047f, 0.002040f, 0.000943f, -0.002400f, 0.004714f, 0.001437f, -0.002102f, 0.011301f, -0.014740f, 0.001039f, -0.008927f, 0.017780f, 0.006275f, -0.015473f, 0.006030f, 0.020326f, -0.019074f, -0.009071f, 0.002305f, -0.001540f, -0.007228f, 0.006079f, -0.002527f, - 0.013545f, -0.011363f, -0.001105f, -0.003752f, -0.000761f, -0.000680f, 0.013090f, -0.012110f, -0.004000f, -0.001304f, -0.012495f, 0.006761f, 0.005244f, 0.013516f, 0.005521f, 0.011510f, 0.010386f, 0.001718f, -0.004162f, 0.003269f, -0.000345f, -0.001428f, -0.003097f, -0.000282f, -0.004754f, -0.001894f, -0.001059f, -0.006668f, 0.004266f, 0.000371f, -0.004644f, -0.000773f, -0.003762f, 0.000368f, -0.000146f, 0.002588f, -0.000884f, -0.001494f, 0.000335f, -0.002133f, -0.000059f, 0.002237f, 0.000833f, -0.000469f, -0.001494f, 0.006140f, -0.009486f, 0.001205f, -0.005961f, 0.006287f, 0.002240f, -0.009548f, 0.027592f, -0.017553f, 0.005515f, 0.029890f, -0.021135f, 0.009837f, -0.000580f, 0.009775f, -0.002622f, -0.018065f, -0.003983f, 0.014918f, 0.013343f, 0.003699f, -0.000156f, 0.007553f, 0.003675f, 0.000273f, 0.006223f, 0.006281f, -0.005216f, 0.008003f, -0.002249f, 0.012614f, -0.010190f, -0.015685f, 0.003322f, -0.013693f, 0.004701f, 0.000257f, -0.003942f, -0.004383f, -0.006278f, -0.009319f, 0.001785f, 0.003285f, 0.000308f, 0.002370f, 0.002690f, -0.005746f, -0.012048f, 0.009455f, 0.002095f, 0.001551f, - -0.000611f, 0.013894f, 0.002775f, 0.005818f, 0.014660f, -0.009019f, 0.003537f, 0.000587f, 0.004410f, 0.010280f, 0.008037f, -0.013399f, -0.011758f, -0.003027f, -0.006726f, -0.001544f, 0.000461f, -0.005771f, 0.003048f, -0.010715f, 0.000509f, -0.010310f, 0.005082f, 0.005047f, -0.005982f, -0.007843f, 0.000860f, 0.004303f, 0.000788f, -0.009065f, 0.001268f, -0.005190f, 0.003889f, 0.003229f, 0.001444f, -0.001701f, -0.002550f, 0.001802f, -0.000269f, -0.000976f, -0.000064f, -0.002338f, -0.001970f, -0.006221f, -0.001544f, 0.005669f, 0.002479f, -0.001627f, -0.001128f, 0.003958f, -0.001364f, 0.001189f, -0.001755f, 0.000071f, -0.000441f, 0.000212f, -0.002254f, -0.001497f, -0.000860f, -0.000644f, -0.000813f, -0.000938f, 0.000189f, -0.000619f, -0.001423f, -0.001168f, 0.000750f, 0.008712f, -0.003725f, 0.007889f, -0.001488f, 0.003933f, -0.004533f, 0.000540f, -0.002977f, 0.002620f, -0.001433f, -0.017223f, 0.013080f, 0.008393f, 0.021574f, -0.014157f, 0.008834f, -0.017515f, -0.003010f, 0.010684f, 0.011561f, -0.012293f, 0.003517f, -0.014241f, 0.001052f, -0.016698f, 0.005468f, -0.012509f, -0.015524f, -0.013889f, - 0.006971f, -0.011222f, 0.000483f, -0.013161f, 0.001708f, 0.001933f, -0.001987f, -0.009635f, 0.006046f, 0.008457f, 0.005035f, 0.003938f, -0.010301f, 0.005601f, -0.010803f, -0.003416f, 0.006623f, 0.000214f, -0.001502f, -0.002909f, -0.000422f, 0.006851f, -0.007971f, -0.015360f, -0.003252f, 0.004727f, -0.003251f, -0.011389f, -0.011521f, -0.016333f, 0.003899f, -0.004711f, -0.015298f, 0.010933f, -0.009808f, -0.009612f, 0.018471f, -0.006680f, -0.003656f, 0.001511f, -0.003357f, -0.006028f, 0.001483f, -0.010140f, -0.005034f, -0.008531f, -0.006738f, -0.002800f, 0.005494f, 0.013991f, 0.000699f, 0.008409f, 0.000690f, 0.006275f, 0.004347f, 0.011303f, -0.000840f, -0.000254f, 0.001147f, 0.004179f, -0.002319f, 0.000484f, -0.001127f, 0.008266f, -0.000345f, 0.003993f, 0.000573f, 0.001593f, -0.001439f, 0.001848f, -0.005098f, 0.005541f, 0.000101f, 0.000110f, -0.004176f, -0.001052f, -0.005632f, 0.002659f, -0.002897f, 0.001905f, -0.000791f, 0.005590f, -0.002762f, 0.001107f, -0.004910f, -0.003905f, -0.000407f, -0.001698f, 0.001313f, 0.014272f, -0.020560f, 0.003702f, 0.017986f, -0.006672f, 0.019698f, 0.005488f, - 0.001242f, -0.005713f, -0.013757f, -0.009050f, 0.023450f, -0.012598f, -0.000110f, -0.004354f, 0.001832f, 0.014115f, 0.012680f, -0.007685f, 0.018318f, 0.018291f, -0.008624f, -0.004510f, 0.011140f, -0.009413f, -0.008241f, -0.000591f, -0.012658f, -0.000285f, -0.003737f, 0.001633f, 0.021977f, 0.007503f, 0.001185f, -0.010075f, -0.029237f, -0.003563f, 0.016425f, 0.004032f, -0.010959f, 0.008405f, 0.013351f, 0.011666f, 0.014106f, -0.023103f, 0.004668f, 0.001123f, -0.011467f, 0.006216f, -0.010321f, 0.007350f, -0.005824f, 0.009116f, 0.020490f, 0.027085f, 0.017094f, 0.007855f, -0.011238f, -0.003101f, -0.013413f, -0.014098f, -0.002970f, 0.015881f, 0.003905f, 0.000250f, 0.003737f, -0.015545f, 0.004037f, 0.001934f, -0.000143f, -0.007868f, 0.004209f, 0.008507f, -0.008995f, -0.016951f, 0.038604f, 0.004988f, -0.006917f, 0.002382f, 0.004154f, 0.017590f, -0.003544f, 0.004840f, 0.005995f, 0.008731f, -0.006076f, -0.002979f, -0.006560f, 0.003115f, -0.001818f, 0.003435f, 0.003201f, -0.002279f, -0.003592f, 0.006547f, 0.000871f, 0.001731f, -0.001250f, 0.003957f, -0.006793f, -0.004845f, -0.003270f, -0.001205f, - 0.007545f, 0.002779f, 0.005044f, 0.003850f, 0.003954f, 0.000280f, 0.000876f, -0.001680f, -0.004760f, 0.004654f, 0.001121f, 0.001968f, -0.003318f, -0.010635f, -0.002987f, -0.006525f, -0.002481f, 0.004943f, -0.006697f, 0.030446f, -0.002992f, 0.008578f, 0.021869f, 0.002858f, -0.003240f, -0.014304f, 0.008057f, -0.007726f, -0.009631f, -0.028905f, -0.012894f, 0.005806f, -0.001501f, -0.005601f, -0.020826f, 0.007279f, 0.011547f, -0.016436f, -0.008537f, -0.004423f, -0.017143f, 0.006842f, 0.001278f, -0.009107f, -0.007414f, -0.003144f, -0.023177f, -0.008292f, 0.011585f, 0.019308f, -0.014565f, -0.018298f, -0.005239f, -0.001080f, -0.014783f, -0.012220f, 0.004729f, 0.008129f, -0.016199f, 0.032592f, 0.000245f, 0.013249f, -0.007330f, 0.012449f, -0.008345f, 0.003745f, -0.023046f, -0.004882f, 0.009545f, -0.023153f, 0.006458f, -0.005239f, -0.011682f, -0.026290f, -0.000468f, 0.014577f, 0.000333f, -0.027730f, -0.004064f, 0.005033f, 0.011281f, 0.020327f, -0.007351f, 0.009092f, 0.023888f, 0.007921f, 0.003045f, -0.010815f, -0.001904f, -0.006752f, 0.001563f, -0.008046f, 0.001998f, -0.015189f, -0.001851f, 0.011622f, - 0.003488f, 0.002253f, -0.006439f, -0.011778f, 0.006709f, -0.002183f, 0.006921f, -0.002513f, 0.001063f, -0.001535f, -0.003218f, -0.003138f, 0.004566f, 0.001699f, -0.000689f, -0.001560f, 0.000334f, -0.004580f, 0.002334f, -0.004677f, -0.005643f, -0.003680f, 0.002257f, 0.000274f, 0.000224f, -0.004415f, 0.003666f, -0.000557f, -0.002075f, -0.006238f, -0.001756f, 0.000389f, 0.001032f, 0.002528f, 0.006838f, 0.002101f, 0.001751f, 0.003336f, 0.009006f, -0.002950f, -0.008989f, 0.010958f, 0.002010f, -0.016950f, -0.026463f, -0.021726f, -0.027390f, 0.023573f, -0.014292f, -0.003609f, 0.007837f, -0.026057f, -0.010710f, -0.018156f, -0.007976f, -0.005867f, 0.011829f, -0.022846f, -0.012070f, 0.007153f, 0.009087f, 0.013027f, -0.000129f, 0.000339f, -0.003987f, -0.000147f, -0.005272f, 0.003153f, -0.017970f, -0.009814f, -0.015795f, 0.010907f, 0.005543f, 0.008424f, 0.011134f, -0.022049f, -0.001508f, -0.002476f, 0.020034f, -0.007614f, 0.006357f, 0.010760f, -0.004019f, 0.011528f, -0.007554f, 0.012866f, 0.018280f, -0.007232f, -0.001187f, 0.015512f, -0.013290f, 0.021493f, -0.009186f, -0.034478f, 0.005409f, 0.017684f, - -0.006734f, 0.001936f, -0.000530f, 0.013541f, 0.017179f, -0.017479f, -0.007509f, 0.003945f, 0.011846f, -0.020540f, -0.015451f, -0.012516f, 0.024808f, -0.000699f, -0.028333f, -0.006271f, -0.011759f, 0.009591f, 0.001328f, 0.007217f, -0.010610f, 0.017438f, 0.000792f, 0.003036f, 0.005106f, -0.016338f, -0.005480f, 0.001102f, -0.001989f, -0.004195f, -0.004678f, 0.004437f, -0.004455f, -0.004490f, 0.003476f, 0.005072f, 0.002698f, -0.009641f, -0.000820f, -0.003906f, -0.002748f, 0.003851f, 0.003552f, 0.007906f, -0.001065f, -0.004041f, 0.003102f, -0.009059f, -0.001023f, -0.000172f, -0.005811f, 0.000700f, 0.000585f, -0.002316f, 0.001146f, -0.010283f, -0.001822f, -0.001319f, 0.001180f, 0.001207f, 0.004306f, -0.000635f, 0.004831f, 0.002637f, 0.002504f, 0.000234f, -0.015942f, -0.006453f, 0.010950f, 0.004054f, 0.015688f, 0.005381f, 0.007675f, -0.030810f, -0.012073f, 0.012022f, -0.008117f, -0.005813f, -0.010265f, 0.003156f, 0.016052f, 0.004211f, 0.003825f, -0.020642f, -0.006981f, -0.003768f, 0.007652f, 0.018126f, -0.022016f, 0.010379f, -0.017947f, -0.004773f, -0.016510f, 0.002118f, 0.002287f, -0.000842f, - 0.006896f, -0.015416f, -0.004442f, -0.014447f, -0.005941f, 0.000259f, -0.000668f, -0.018143f, 0.010397f, 0.011643f, -0.004340f, 0.013817f, 0.027177f, 0.002784f, 0.020586f, 0.026403f, 0.002076f, 0.000851f, 0.006368f, -0.005555f, 0.008751f, 0.001787f, -0.005783f, -0.008904f, 0.033167f, -0.003454f, 0.019381f, 0.008568f, -0.009782f, -0.011355f, -0.007906f, 0.009264f, -0.007580f, 0.012041f, 0.029213f, 0.014803f, -0.003885f, 0.000465f, -0.024504f, -0.016889f, -0.014951f, 0.022988f, 0.036091f, -0.015853f, -0.000146f, -0.014669f, -0.002425f, 0.022064f, -0.006989f, -0.001353f, -0.034828f, -0.004670f, -0.006354f, -0.003706f, 0.013205f, 0.000924f, 0.002734f, 0.004013f, -0.007001f, 0.005530f, 0.002940f, 0.004926f, -0.004187f, 0.007146f, -0.003462f, -0.000811f, -0.008839f, -0.002104f, 0.007658f, -0.002849f, -0.000250f, -0.001523f, 0.007350f, -0.001894f, -0.005368f, 0.003098f, 0.003251f, 0.001855f, 0.002553f, 0.002695f, -0.002922f, 0.000722f, 0.005177f, 0.008986f, 0.007778f, 0.005036f, 0.002709f, 0.000531f, 0.000654f, -0.005650f, -0.000541f, 0.003533f, -0.003486f, 0.003722f, -0.001305f, 0.001277f, - 0.004860f, -0.002143f, 0.020841f, 0.057787f, 0.025187f, -0.007854f, -0.002006f, -0.010736f, 0.026633f, -0.026682f, -0.015163f, -0.040793f, -0.000470f, 0.020115f, 0.025024f, 0.004507f, -0.009936f, -0.024456f, -0.017897f, 0.018022f, -0.003663f, 0.028624f, -0.000086f, -0.009194f, 0.013506f, 0.004922f, -0.000250f, -0.007119f, 0.018681f, -0.003475f, 0.016137f, -0.000258f, -0.008806f, 0.035216f, -0.008430f, 0.014283f, 0.034612f, 0.012171f, -0.001470f, -0.016923f, -0.003197f, -0.027564f, -0.032300f, 0.007028f, 0.020669f, -0.004966f, 0.002887f, -0.035247f, -0.013414f, 0.020413f, 0.011048f, -0.009138f, 0.006734f, -0.010460f, -0.005089f, -0.016077f, -0.027030f, 0.001626f, -0.006395f, -0.019081f, -0.031197f, -0.026894f, -0.008778f, -0.024705f, 0.011341f, -0.011065f, 0.003892f, 0.003190f, -0.000217f, 0.000588f, -0.004029f, -0.005540f, 0.015962f, 0.031782f, -0.021461f, 0.003877f, -0.009040f, 0.011489f, -0.011997f, -0.000478f, -0.008674f, -0.003908f, 0.029211f, 0.021251f, 0.004753f, -0.003297f, 0.000257f, -0.011966f, 0.004095f, 0.011909f, -0.002309f, -0.010350f, -0.005953f, 0.010311f, -0.012540f, 0.001139f, - 0.005285f, 0.004998f, -0.004440f, -0.003993f, 0.004424f, 0.005618f, -0.004352f, 0.006692f, 0.003822f, 0.005550f, -0.000644f, 0.007329f, -0.000833f, 0.004635f, 0.002228f, 0.002726f, 0.001631f, -0.001621f, 0.008566f, -0.008479f, -0.001317f, 0.001846f, -0.002608f, -0.002157f, -0.004054f, 0.003837f, 0.000278f, -0.007311f, -0.002815f, 0.004772f, -0.005324f, -0.023809f, -0.026934f, 0.006992f, 0.010344f, 0.032324f, -0.027311f, 0.008732f, 0.008402f, -0.045492f, -0.002092f, 0.000340f, -0.038003f, -0.020694f, -0.013426f, 0.009727f, -0.003016f, 0.002327f, -0.010704f, 0.016051f, 0.025227f, 0.013315f, -0.003553f, -0.038570f, -0.016783f, -0.020951f, 0.007870f, 0.002409f, -0.016903f, -0.001272f, 0.013333f, -0.011196f, 0.023012f, -0.020663f, -0.000580f, -0.012027f, -0.038556f, 0.006629f, -0.016393f, -0.018481f, 0.014406f, 0.021360f, -0.023882f, 0.009299f, 0.028260f, -0.009176f, 0.012403f, 0.009723f, -0.006583f, 0.003885f, -0.031300f, 0.047470f, 0.018707f, 0.011271f, 0.045334f, -0.055246f, -0.004111f, -0.007615f, 0.005899f, 0.022595f, 0.023468f, 0.009034f, 0.011209f, 0.029000f, -0.002733f, -0.019659f, - -0.034168f, 0.013270f, -0.012906f, 0.001303f, 0.009279f, -0.006815f, 0.014005f, 0.037137f, -0.022877f, 0.017317f, -0.011080f, -0.010619f, 0.028088f, 0.002138f, 0.008774f, 0.027231f, 0.022486f, -0.009881f, -0.011362f, -0.023956f, -0.006031f, 0.000119f, 0.012506f, 0.013099f, 0.000047f, 0.003106f, 0.001900f, -0.000480f, 0.002630f, 0.003011f, 0.001028f, 0.007393f, -0.003679f, 0.001104f, 0.005341f, 0.002947f, 0.001571f, -0.003330f, 0.007182f, 0.004656f, 0.001110f, -0.004093f, -0.005708f, -0.013589f, 0.008131f, -0.000559f, -0.001206f, 0.004093f, -0.006490f, -0.000802f, 0.004563f, 0.006210f, 0.009415f, 0.005260f, 0.002618f, 0.002566f, -0.000059f, 0.006785f, 0.029727f, 0.034798f, 0.008797f, 0.021438f, -0.013923f, 0.010057f, 0.009948f, -0.057317f, 0.016278f, 0.018480f, 0.003998f, -0.018310f, -0.000335f, -0.035402f, 0.041663f, 0.024979f, -0.012972f, -0.014054f, -0.020572f, -0.010859f, 0.030182f, -0.030512f, -0.017341f, -0.004627f, -0.004975f, -0.006622f, 0.004495f, -0.020220f, -0.020457f, -0.012174f, -0.015726f, -0.004336f, -0.020488f, -0.002889f, -0.013703f, -0.045295f, -0.028743f, -0.011208f, - -0.007042f, 0.006296f, 0.007711f, -0.000273f, 0.001484f, 0.013097f, 0.006470f, 0.006704f, 0.032023f, 0.006653f, 0.010939f, 0.019879f, 0.042964f, 0.036585f, 0.002115f, -0.014456f, -0.027883f, 0.025581f, -0.006090f, 0.069092f, 0.014146f, 0.030994f, -0.003172f, 0.003978f, -0.027230f, -0.001049f, 0.024182f, 0.013900f, 0.018389f, -0.020688f, -0.013484f, -0.026596f, -0.050351f, 0.029270f, -0.044404f, -0.005380f, 0.059116f, 0.004007f, 0.023844f, 0.011328f, 0.017610f, 0.000619f, -0.031524f, 0.031003f, -0.000262f, -0.027814f, -0.024709f, 0.001028f, 0.010006f, 0.020905f, 0.005860f, -0.024358f, 0.001575f, -0.004732f, 0.005260f, -0.009506f, -0.007729f, 0.004473f, 0.004248f, -0.007441f, 0.001052f, -0.002299f, -0.000384f, -0.009836f, -0.003345f, -0.003025f, 0.004970f, -0.002494f, -0.005786f, 0.008190f, -0.004600f, -0.001784f, -0.013812f, -0.014811f, 0.000385f, 0.000553f, -0.005837f, -0.003728f, 0.005270f, 0.003891f, -0.005926f, -0.009819f, -0.000251f, 0.006713f, -0.041041f, 0.012212f, 0.015255f, -0.027281f, -0.021345f, 0.000563f, 0.016750f, 0.040106f, -0.002192f, -0.030683f, -0.031250f, -0.001503f, - -0.017749f, 0.005348f, 0.005517f, -0.034276f, -0.029833f, -0.056084f, -0.016759f, -0.016178f, -0.038424f, -0.025809f, -0.000408f, -0.017676f, -0.011337f, -0.009955f, -0.003285f, -0.037708f, -0.020456f, -0.023138f, -0.011674f, 0.011770f, -0.032336f, 0.002511f, 0.026630f, 0.031990f, -0.007640f, 0.008823f, 0.018086f, -0.031453f, 0.017674f, -0.013571f, 0.027897f, -0.013491f, 0.002402f, -0.014548f, -0.003346f, 0.055790f, -0.011607f, 0.021050f, -0.040869f, -0.006658f, -0.000184f, -0.038554f, 0.035907f, 0.001449f, -0.013365f, 0.025950f, -0.010757f, 0.006721f, 0.050994f, -0.020233f, -0.028154f, 0.019338f, -0.005492f, -0.057406f, 0.023204f, -0.076121f, -0.041036f, 0.030608f, 0.023708f, 0.004942f, 0.016002f, 0.000134f, -0.000554f, -0.057421f, -0.031038f, -0.013495f, 0.005110f, -0.032624f, 0.007895f, 0.004567f, 0.013330f, -0.021295f, 0.001128f, 0.016512f, 0.012379f, 0.009506f, 0.000951f, 0.007827f, -0.018860f, -0.011952f, -0.012779f, -0.003511f, -0.002752f, -0.001643f, 0.014941f, -0.007737f, 0.007765f, 0.015087f, -0.007580f, 0.004668f, -0.012152f, -0.009124f, -0.000732f, 0.003888f, -0.010940f, 0.004727f, - -0.013673f, 0.011843f, -0.004929f, -0.002380f, 0.000338f, 0.010624f, -0.003529f, 0.004243f, -0.009666f, 0.008504f, 0.006264f, 0.019627f, 0.004439f, 0.016119f, -0.016107f, -0.005346f, -0.019129f, -0.009855f, -0.009478f, 0.077216f, 0.042286f, 0.000060f, -0.039755f, 0.020424f, -0.041456f, -0.033729f, 0.006135f, 0.034295f, 0.067806f, -0.010676f, 0.034283f, -0.012266f, 0.024337f, 0.041089f, 0.022989f, 0.026257f, 0.014092f, -0.007711f, -0.033632f, -0.034820f, -0.010530f, -0.032909f, -0.009673f, -0.006061f, -0.007401f, 0.026273f, -0.004478f, -0.067590f, 0.003968f, 0.016272f, 0.015610f, 0.040385f, -0.004170f, -0.080662f, 0.045854f, -0.036118f, 0.011807f, -0.007934f, 0.027131f, 0.039468f, -0.043963f, -0.003123f, -0.021967f, -0.038380f, 0.027751f, -0.019114f, -0.047210f, 0.018477f, 0.027574f, 0.045329f, 0.012018f, -0.007132f, 0.004963f, 0.037098f, -0.029900f, 0.058594f, -0.018441f, -0.016408f, -0.005280f, 0.035678f, -0.037184f, 0.003358f, 0.004537f, -0.103563f, -0.015350f, 0.031968f, -0.014903f, 0.005301f, 0.014370f, 0.007442f, -0.005082f, 0.008349f, 0.035493f, 0.042322f, -0.033576f, 0.012033f, - -0.024598f, -0.004274f, 0.041958f, -0.000976f, -0.004374f, 0.001468f, -0.002844f, -0.021839f, 0.005985f, 0.001369f, -0.012710f, -0.032309f, 0.000423f, -0.007790f, 0.009840f, -0.014974f, -0.013922f, -0.017601f, 0.014825f, 0.003330f, 0.009084f, 0.007212f, 0.000606f, 0.005296f, -0.007151f, -0.014861f, 0.022553f, -0.002374f, -0.010952f, -0.000454f, -0.007900f, -0.005049f, -0.009120f, 0.001045f, 0.002765f, -0.001441f, 0.006238f, 0.016325f, -0.000637f, -0.004119f, -0.006734f, 0.001376f, -0.008371f, -0.004859f, 0.009384f, -0.007320f, -0.006012f, -0.008934f, -0.021774f, -0.012304f, 0.003001f, 0.013953f, -0.011454f, -0.003019f, 0.044255f, 0.029358f, -0.082281f, -0.046778f, 0.056355f, 0.065316f, -0.035108f, -0.011896f, -0.092589f, -0.051177f, 0.013336f, -0.004200f, 0.012313f, -0.049216f, -0.030842f, -0.033730f, 0.049966f, 0.074249f, -0.003615f, 0.020046f, -0.012091f, -0.006503f, -0.000948f, 0.017054f, 0.032170f, 0.007832f, -0.011464f, -0.006156f, -0.007562f, -0.044351f, -0.025163f, -0.045090f, -0.006007f, 0.013942f, -0.018969f, 0.027827f, -0.020617f, -0.007713f, 0.043164f, -0.020924f, 0.024251f, 0.016870f, - -0.007934f, -0.041581f, -0.030124f, -0.024787f, 0.007474f, 0.077763f, 0.013666f, 0.041818f, 0.049254f, 0.038580f, 0.028529f, 0.025569f, -0.042923f, 0.001038f, -0.007048f, 0.057567f, 0.027321f, 0.033675f, 0.060063f, -0.029492f, -0.040454f, 0.014851f, 0.050795f, -0.086112f, -0.001585f, 0.006885f, 0.040029f, -0.069634f, -0.104996f, -0.018654f, 0.029385f, 0.007367f, 0.011869f, 0.032934f, 0.002074f, -0.023253f, -0.034485f, 0.001173f, 0.004705f, 0.006846f, 0.031752f, 0.047141f, 0.022257f, 0.003530f, 0.000140f, -0.000479f, 0.003860f, 0.004773f, -0.011918f, 0.017416f, 0.002146f, -0.015857f, -0.028001f, 0.003504f, -0.011947f, 0.006045f, 0.003034f, -0.002486f, 0.001757f, -0.011552f, 0.012033f, -0.006183f, 0.008074f, -0.012422f, -0.008077f, -0.022191f, -0.021947f, 0.001082f, 0.011535f, -0.009797f, 0.023108f, 0.000661f, 0.006875f, -0.006931f, 0.024699f, 0.002106f, 0.011316f, -0.012187f, -0.006691f, -0.003859f, -0.015379f, -0.002981f, 0.016651f, -0.028801f, 0.022199f, -0.001111f, -0.021131f, -0.037420f, 0.014100f, -0.018241f, -0.036489f, 0.026258f, 0.050655f, 0.015463f, -0.019171f, 0.029980f, - 0.050965f, 0.018738f, 0.010714f, 0.003537f, -0.005382f, 0.023835f, -0.042112f, 0.002462f, -0.060680f, 0.032535f, -0.048908f, -0.004190f, 0.026805f, 0.014581f, -0.027746f, 0.005881f, -0.032148f, 0.066580f, 0.008989f, 0.021570f, 0.035105f, 0.073461f, -0.029967f, 0.023835f, -0.034781f, 0.012674f, 0.026842f, 0.059060f, 0.014363f, -0.012038f, 0.060987f, 0.008160f, -0.003813f, -0.034869f, 0.002757f, 0.037942f, -0.012391f, 0.036473f, -0.044442f, 0.069202f, 0.072252f, -0.086287f, -0.001769f, -0.005444f, 0.019342f, -0.014698f, -0.010823f, 0.037126f, -0.030820f, -0.092038f, 0.001608f, 0.081861f, -0.064066f, 0.032444f, -0.014415f, -0.008169f, -0.038820f, 0.090376f, -0.005321f, 0.014983f, 0.008827f, -0.060741f, 0.079222f, 0.006190f, 0.070518f, -0.138433f, 0.013725f, -0.012978f, -0.041226f, -0.011168f, 0.024857f, -0.032195f, 0.022209f, -0.029010f, -0.018816f, -0.038195f, 0.048816f, -0.018488f, 0.003838f, -0.040726f, 0.002303f, -0.029901f, -0.009685f, 0.013990f, -0.020133f, 0.009723f, 0.001824f, -0.027583f, 0.025526f, -0.011264f, 0.004116f, -0.011753f, 0.023221f, -0.016981f, 0.004102f, 0.001660f, - -0.005779f, 0.030128f, -0.016816f, -0.020954f, -0.011641f, -0.023492f, -0.032299f, -0.016402f, 0.003719f, 0.002145f, -0.023105f, -0.013327f, -0.015341f, -0.022781f, -0.017565f, 0.008024f, 0.005880f, -0.000601f, 0.058531f, 0.006750f, -0.044433f, 0.004330f, -0.090583f, -0.020960f, 0.004793f, -0.017840f, -0.072167f, -0.008276f, -0.047303f, -0.012069f, 0.043793f, 0.009839f, 0.057348f, 0.023435f, 0.021775f, 0.013112f, -0.019291f, 0.045538f, -0.023054f, -0.000766f, 0.021859f, 0.009657f, -0.027882f, 0.022439f, 0.009525f, 0.053932f, 0.022542f, -0.010089f, 0.033019f, -0.026439f, 0.044512f, 0.014844f, -0.048444f, -0.050472f, 0.026130f, 0.032162f, 0.013764f, 0.004900f, -0.023406f, -0.032462f, 0.010039f, -0.031954f, -0.047407f, -0.015052f, -0.007807f, -0.044232f, -0.016043f, 0.015943f, -0.029725f, -0.049841f, 0.014184f, 0.017849f, 0.001981f, -0.006527f, -0.002625f, -0.008871f, 0.017991f, 0.083614f, 0.017406f, -0.003241f, -0.002934f, -0.030221f, -0.047726f, -0.021802f, 0.069503f, 0.073858f, 0.038387f, 0.006544f, 0.067787f, 0.031939f, -0.014997f, -0.094453f, -0.071337f, -0.059497f, -0.111911f, -0.065922f, - 0.016163f, 0.090603f, -0.040102f, 0.030279f, -0.044871f, 0.014208f, -0.003404f, 0.030753f, -0.014340f, -0.005862f, -0.040000f, -0.023713f, -0.009509f, -0.036526f, 0.046215f, -0.007749f, -0.023588f, -0.011951f, 0.005079f, -0.026602f, 0.018998f, 0.013134f, 0.030055f, 0.006221f, 0.008768f, -0.029803f, -0.033708f, -0.004572f, -0.024790f, -0.016504f, -0.028957f, -0.042927f, 0.002637f, -0.011685f, 0.003068f, 0.002420f, 0.032841f, 0.031762f, -0.011643f, -0.007087f, -0.013922f, 0.030655f, 0.021175f, 0.012965f, 0.005302f, -0.007030f, 0.018333f, -0.025421f, -0.009445f, -0.004693f, -0.027932f, -0.055589f, 0.029261f, -0.001682f, -0.017242f, -0.008060f, 0.020939f, 0.038761f, -0.016497f, 0.050003f, -0.057273f, 0.046189f, -0.005735f, 0.061725f, -0.039977f, 0.035551f, -0.059024f, 0.051290f, -0.047666f, -0.020451f, 0.071913f, 0.016284f, 0.057801f, 0.082085f, 0.008643f, -0.006916f, -0.034171f, -0.003024f, 0.052481f, 0.012897f, -0.018324f, -0.058181f, 0.005165f, 0.011174f, 0.027589f, 0.016459f, 0.023013f, 0.013960f, -0.033548f, -0.054148f, -0.022618f, 0.051930f, 0.020256f, 0.166237f, -0.052617f, -0.044726f, - 0.054572f, 0.085233f, 0.018226f, -0.001690f, 0.022788f, 0.005433f, 0.027760f, -0.025342f, 0.010240f, 0.039747f, 0.044493f, 0.029270f, 0.129571f, -0.016602f, -0.016311f, -0.008588f, 0.067059f, 0.039674f, -0.033390f, 0.034751f, -0.000307f, 0.011226f, -0.027386f, 0.059011f, -0.058561f, 0.003964f, 0.091722f, -0.067332f, 0.196400f, -0.090078f, 0.094276f, 0.085855f, -0.083876f, -0.077301f, 0.087742f, 0.003635f, -0.049686f, -0.021389f, 0.048784f, -0.132392f, 0.021415f, -0.015659f, -0.084445f, 0.055647f, -0.065932f, 0.005204f, 0.005785f, -0.026946f, -0.065010f, 0.017803f, -0.004213f, -0.003015f, 0.013607f, -0.013652f, -0.020778f, 0.011763f, 0.028622f, -0.010525f, 0.005227f, 0.021443f, -0.019086f, 0.029861f, 0.024121f, -0.047654f, 0.007947f, -0.026772f, 0.013286f, -0.001906f, 0.005046f, -0.024382f, 0.011329f, 0.006374f, 0.001101f, -0.012225f, 0.038087f, 0.008318f, -0.000044f, 0.035169f, -0.023521f, -0.022689f, 0.005142f, 0.015198f, 0.005220f, 0.016937f, 0.010202f, -0.048996f, -0.023895f, 0.012673f, -0.027244f, 0.042224f, -0.015525f, 0.032346f, 0.043617f, -0.101306f, -0.041933f, 0.061000f, - -0.129026f, -0.081107f, -0.053469f, 0.090127f, 0.194385f, 0.052841f, -0.150970f, -0.034929f, -0.154250f, -0.081634f, 0.127340f, 0.074908f, 0.119778f, 0.064721f, -0.089040f, -0.143375f, -0.107879f, -0.026751f, 0.065308f, 0.072552f, 0.044959f, 0.024050f, -0.036810f, -0.156656f, -0.186729f, -0.041255f, 0.144584f, 0.255564f, 0.174624f, -0.033364f, -0.119283f, -0.173111f, -0.127049f, -0.104118f, 0.001000f, 0.040732f, 0.140831f, 0.148764f, -0.079987f, -0.051247f, -0.186950f, -0.175252f, -0.061914f, 0.016616f, 0.182247f, 0.267166f, 0.119736f, -0.079654f, -0.279721f, -0.208623f, -0.151691f, 0.073110f, 0.160724f, 0.099127f, 0.064043f, 0.053064f, -0.166512f, -0.031368f, -0.094551f, 0.034886f, -0.012302f, 0.098565f, 0.156810f, 0.123149f, -0.144565f, -0.294146f, -0.219699f, 0.023889f, 0.172558f, -0.004837f, 0.238914f, 0.009308f, -0.060296f, -0.072185f, -0.051587f, 0.000086f, 0.172903f, 0.147790f, 0.028241f, -0.059660f, -0.020120f, -0.011471f, 0.091235f, 0.098986f, 0.012962f, 0.003749f, -0.014509f, -0.003218f, -0.018105f, -0.024862f, -0.014991f, -0.009411f, 0.035585f, 0.053269f, 0.045139f, -0.065535f, - -0.072582f, -0.028955f, -0.029453f, -0.029747f, 0.068205f, 0.054275f, 0.071681f, 0.020173f, -0.029166f, -0.053572f, -0.101418f, -0.065907f, 0.044171f, 0.089983f, 0.138315f, 0.093398f, 0.009002f, -0.212064f, -0.184772f, -0.063901f, 0.077601f, 0.118429f, 0.160267f, 0.119402f, -0.008139f, -0.120829f, -0.176000f, -0.171617f, -0.029925f, 0.185680f, 0.194051f, 0.097481f, -0.045100f, -0.129180f, -0.088382f, -0.060849f, 0.006804f, -0.034167f, 0.068281f, 0.021723f, -0.055936f, -0.052115f, -0.000186f, -0.084177f, -0.010801f, 0.012856f, 0.009315f, -0.007016f, 0.001758f, -0.028090f, -0.003901f, -0.003010f, 0.014225f, -0.009478f, 0.038595f, -0.010016f, -0.007861f, -0.010553f, -0.012597f, 0.024609f, 0.006582f, -0.011393f, 0.037360f, 0.002709f, -0.067443f, -0.033172f, 0.018103f, 0.033143f, -0.011547f, 0.004317f, 0.045585f, -0.000817f, 0.005894f, -0.037283f, -0.017176f, 0.011890f, -0.008558f, -0.008043f, -0.005378f, 0.030720f, 0.010620f, -0.011597f, -0.036372f, -0.014020f, -0.002506f, -0.032505f, 0.002744f, -0.037170f, -0.025481f, -0.017137f, -0.033709f, 0.052521f, -0.009814f, -0.023326f, 0.021682f, -0.000061f, - -0.051737f, -0.002703f, 0.050859f, 0.041882f, -0.024240f, 0.032496f, 0.004999f, 0.031016f, -0.034704f, -0.050269f, 0.018970f, 0.022589f, 0.019223f, 0.017309f, -0.019516f, 0.019075f, -0.038144f, 0.025837f, -0.051880f, -0.045002f, 0.033032f, -0.026211f, 0.022404f, 0.031622f, 0.001848f, -0.023942f, 0.007359f, 0.009146f, -0.002480f, -0.001701f, -0.001268f, 0.020699f, -0.017576f, 0.013541f, -0.018353f, 0.024212f, -0.021404f, -0.011143f, 0.008356f, -0.006968f, -0.001219f, 0.009737f, 0.001821f, 0.006599f, 0.017980f, -0.014440f, -0.009209f, 0.010848f, 0.005882f, 0.021357f, -0.017590f, 0.006136f, -0.002544f, -0.012902f, -0.013727f, 0.005696f, 0.002904f, -0.012758f, -0.019887f, 0.005877f, -0.000241f, -0.003352f, 0.011879f, -0.018260f, 0.020958f, 0.006716f, -0.019074f, -0.020389f, 0.016763f, -0.028767f, 0.019376f, -0.002963f, 0.013251f, -0.001179f, 0.004193f, 0.025700f, -0.041116f, 0.082509f, 0.126357f, -0.016669f, -0.046474f, -0.040272f, 0.116514f, 0.052402f, 0.112770f, 0.060535f, 0.000371f, -0.052446f, -0.011461f, 0.028549f, 0.053079f, 0.025123f, -0.024281f, -0.006211f, 0.025472f, 0.037052f, - 0.004820f, 0.008175f, -0.025836f, 0.004568f, -0.012368f, 0.016782f, 0.019237f, 0.049066f, 0.042632f, -0.022734f, 0.003889f, -0.025497f, 0.006796f, 0.022276f, 0.033777f, 0.002281f, -0.015774f, -0.000269f, -0.028665f, 0.023879f, -0.006456f, 0.009721f, 0.022694f, 0.000246f, 0.030163f, -0.014985f, -0.008023f, -0.007252f, -0.030628f, -0.018712f, -0.046818f, -0.009147f, -0.053415f, 0.003412f, -0.018247f, 0.043860f, 0.006754f, 0.012728f, -0.041257f, 0.017247f, 0.000495f, -0.018724f, 0.030589f, -0.016682f, -0.008336f, 0.007257f, 0.020296f, -0.002720f, -0.010816f, 0.068029f, 0.022436f, 0.015490f, 0.025866f, -0.018822f, -0.000707f, -0.006496f, 0.035931f, 0.049318f, 0.047907f, -0.028798f, -0.030913f, -0.004590f, -0.012170f, 0.012129f, 0.032358f, 0.033044f, 0.001685f, 0.018357f, -0.002034f, -0.005479f, 0.011144f, 0.020921f, -0.001821f, 0.016350f, -0.013803f, 0.002634f, 0.000460f, 0.005436f, -0.004597f, 0.018332f, 0.011107f, -0.002403f, -0.005026f, 0.005244f, 0.003536f, 0.019944f, 0.001369f, -0.012504f, -0.012869f, -0.007981f, 0.005972f, 0.006470f, 0.013294f, -0.016337f, 0.002443f, -0.004837f, - 0.010736f, -0.008284f, 0.015057f, -0.005522f, 0.005781f, -0.008854f, -0.006665f, 0.004164f, -0.012656f, -0.000480f, 0.014573f, 0.003022f, -0.005615f, 0.000759f, -0.047168f, -0.102222f, -0.013857f, 0.135170f, 0.208272f, 0.174937f, 0.138155f, -0.009261f, 0.016199f, -0.101450f, -0.115167f, -0.187626f, -0.108097f, -0.118143f, -0.037273f, 0.014936f, 0.081682f, 0.058251f, 0.177880f, 0.154983f, 0.051132f, 0.010894f, -0.027652f, -0.060382f, -0.095641f, -0.034930f, -0.098034f, -0.026027f, -0.047721f, -0.030754f, -0.022902f, 0.005253f, 0.001647f, 0.033326f, 0.048055f, 0.073189f, 0.079171f, 0.095187f, 0.082051f, -0.009786f, 0.007954f, -0.000918f, 0.015391f, -0.046978f, 0.018996f, -0.050218f, -0.125847f, -0.061672f, -0.094202f, -0.158143f, -0.046416f, -0.013655f, -0.064147f, 0.021823f, 0.048635f, 0.110603f, 0.130199f, 0.192329f, 0.121365f, 0.099056f, 0.098320f, 0.061295f, -0.019064f, 0.010110f, -0.096996f, -0.083420f, -0.140466f, -0.166836f, -0.192824f, -0.140272f, -0.108197f, -0.011150f, -0.005249f, 0.015424f, 0.056334f, 0.095506f, 0.171795f, 0.170044f, 0.169155f, 0.135779f, 0.058168f, 0.087652f, - 0.013731f, -0.043804f, -0.066175f, -0.156319f, -0.142278f, -0.125864f, -0.108666f, -0.086884f, -0.052616f, -0.031813f, -0.010900f, 0.007966f, 0.052702f, 0.062626f, 0.082374f, 0.068339f, 0.097644f, 0.088509f, 0.057876f, 0.066758f, 0.044822f, -0.012037f, -0.036134f, -0.041616f, -0.099522f, -0.086199f, -0.077695f, -0.058122f, -0.031691f, -0.001050f, -0.003781f, 0.025584f, 0.039236f, 0.030625f, 0.036409f, 0.023350f, 0.007362f, -0.000621f, 0.010611f, 0.002626f, -0.012121f, 0.013280f, 0.015918f, 0.001271f, 0.008607f, -0.002231f, -0.003445f, 0.001637f, 0.006005f, -0.000062f, -0.013383f, -0.017787f, -0.017476f, -0.020195f, -0.013656f, -0.003918f, -0.004553f, 0.006171f, 0.002538f, 0.001982f, 0.007075f, 0.008196f, 0.006545f, 0.008852f, 0.013615f, 0.011732f, 0.006740f, 0.008187f, 0.002974f, -0.002385f, -0.000607f, -0.003115f, -0.004784f, -0.001720f, -0.002591f, -0.000769f, -0.000979f, 0.000279f}, - {0.013781f, 0.005240f, -0.006918f, -0.001174f, 0.004798f, -0.000848f, 0.005105f, -0.012612f, -0.009000f, -0.002201f, -0.010630f, 0.004455f, -0.002374f, -0.001169f, -0.007185f, -0.003199f, 0.006666f, 0.006670f, -0.002622f, -0.002029f, -0.004438f, -0.010193f, 0.011356f, 0.006763f, 0.000281f, 0.001198f, -0.000636f, 0.000333f, 0.009142f, -0.004639f, 0.001667f, -0.014643f, -0.012022f, -0.003004f, 0.001073f, -0.010204f, -0.001912f, 0.003631f, 0.000861f, 0.000186f, -0.005142f, -0.003939f, 0.009560f, -0.004434f, -0.004106f, -0.001344f, -0.001373f, 0.004223f, -0.002236f, -0.006272f, -0.000244f, 0.005505f, -0.007862f, 0.000341f, -0.008421f, 0.000592f, -0.006175f, 0.009324f, -0.000557f, -0.009822f, -0.001457f, -0.000953f, 0.001142f, -0.014027f, -0.001727f, 0.001168f, -0.009410f, 0.004318f, 0.000170f, -0.010807f, 0.004884f, 0.006646f, -0.005802f, -0.006620f, -0.011914f, 0.006222f, 0.003554f, 0.011023f, 0.005399f, -0.001639f, 0.002101f, -0.001530f, 0.003299f, 0.003505f, 0.007561f, 0.001936f, -0.003359f, -0.000118f, 0.000844f, -0.000249f, 0.004298f, 0.001126f, -0.001548f, -0.002113f, 0.002063f, 0.001690f, - 0.003205f, 0.001627f, 0.001212f, 0.001950f, 0.001715f, 0.000730f, 0.001040f, -0.000207f, -0.000620f, 0.000695f, 0.000402f, 0.000827f, -0.000521f, 0.000976f, -0.000101f, -0.010197f, 0.004600f, -0.012720f, -0.003566f, -0.001767f, -0.006456f, 0.006148f, 0.014226f, -0.005812f, -0.001922f, 0.000688f, -0.005918f, 0.004112f, -0.000914f, -0.004775f, -0.008166f, -0.004310f, 0.012828f, 0.012430f, 0.006950f, 0.014437f, 0.008461f, 0.004608f, 0.013551f, -0.008417f, 0.002961f, 0.005827f, -0.000297f, 0.002363f, -0.004063f, 0.002626f, -0.018819f, 0.000425f, -0.001123f, 0.006810f, -0.004285f, -0.002363f, -0.001343f, 0.005224f, -0.005980f, -0.000934f, 0.001660f, 0.003688f, 0.003532f, -0.000973f, -0.006412f, 0.001236f, 0.002201f, 0.004631f, 0.003443f, 0.005382f, -0.006030f, -0.003532f, -0.001130f, -0.010611f, -0.001291f, 0.002858f, 0.009116f, 0.010246f, -0.001431f, 0.005665f, 0.004164f, -0.000729f, 0.003763f, 0.004555f, 0.006572f, -0.002612f, -0.000118f, -0.004912f, 0.000827f, -0.004227f, 0.002906f, -0.006276f, -0.005992f, 0.003617f, -0.000064f, -0.011754f, -0.001132f, -0.008792f, -0.002422f, -0.001215f, - -0.001516f, -0.011683f, 0.001107f, 0.004178f, -0.003480f, -0.003304f, 0.002003f, 0.001522f, 0.000831f, -0.002280f, -0.006319f, -0.000283f, -0.002777f, 0.002437f, 0.000072f, 0.000211f, -0.000718f, -0.002562f, -0.002904f, -0.003229f, 0.000222f, -0.001372f, 0.001411f, -0.002006f, 0.000803f, 0.000539f, -0.001878f, 0.000006f, -0.002089f, -0.000705f, 0.000116f, 0.000059f, -0.001857f, -0.000401f, -0.000317f, -0.012874f, -0.012175f, 0.004538f, -0.001451f, 0.010115f, 0.010129f, 0.000856f, 0.000215f, 0.019543f, -0.005311f, -0.000445f, 0.016369f, 0.000698f, -0.009518f, -0.013868f, 0.010041f, -0.004045f, 0.000025f, -0.008583f, 0.002627f, -0.006125f, 0.006804f, 0.030507f, -0.011175f, -0.008940f, -0.011041f, -0.011879f, 0.002128f, -0.009684f, -0.024072f, -0.000587f, 0.002359f, 0.000077f, -0.009604f, -0.001992f, 0.007752f, -0.009794f, -0.005842f, 0.014268f, 0.004636f, -0.003611f, -0.003454f, 0.009194f, -0.004610f, 0.006587f, 0.005943f, -0.012991f, -0.008689f, -0.007685f, 0.008447f, -0.006581f, -0.003988f, -0.003569f, -0.004396f, -0.000665f, -0.008839f, 0.000090f, -0.002717f, 0.002186f, -0.001284f, -0.019036f, - 0.008765f, -0.010637f, 0.008332f, 0.001589f, -0.015735f, 0.003198f, 0.010387f, 0.003246f, 0.017348f, -0.007354f, 0.000871f, 0.002055f, 0.003991f, 0.006257f, -0.006967f, 0.002624f, 0.002206f, -0.010115f, 0.013794f, 0.001016f, -0.002070f, 0.005913f, -0.002098f, 0.002659f, -0.002644f, -0.005279f, -0.000477f, -0.003394f, 0.004452f, -0.001174f, 0.000753f, 0.005429f, 0.001760f, 0.002072f, -0.001323f, 0.002956f, 0.000404f, -0.000789f, 0.001824f, 0.003946f, -0.002975f, 0.000259f, -0.003134f, 0.001880f, -0.001109f, 0.005697f, -0.008011f, 0.003733f, 0.004184f, -0.004429f, 0.002062f, -0.002217f, -0.017410f, 0.005329f, 0.016516f, 0.013613f, 0.015496f, 0.002641f, -0.003227f, -0.013281f, -0.006836f, -0.006272f, -0.004889f, 0.013613f, 0.019091f, 0.001309f, -0.001186f, 0.013481f, -0.021856f, 0.000371f, -0.001654f, -0.000456f, -0.007038f, -0.007450f, 0.008131f, 0.009818f, 0.000451f, -0.002261f, 0.004082f, -0.010748f, -0.007950f, 0.008111f, -0.008776f, 0.016983f, 0.015596f, 0.002510f, 0.009659f, 0.007963f, 0.001772f, -0.007061f, 0.002565f, -0.000460f, -0.011902f, 0.011604f, -0.000892f, 0.005381f, - 0.009653f, -0.011395f, -0.004244f, -0.013525f, -0.002891f, 0.002984f, 0.012758f, -0.013036f, -0.004993f, 0.009356f, -0.001840f, -0.008375f, 0.013983f, -0.011618f, -0.024059f, 0.003982f, -0.013485f, -0.006191f, 0.006740f, -0.005952f, 0.001319f, 0.001344f, -0.005757f, 0.010235f, -0.009309f, -0.010836f, -0.012746f, -0.001530f, -0.005443f, 0.000749f, 0.003581f, -0.007990f, 0.002239f, 0.002158f, 0.000735f, -0.003863f, 0.002241f, 0.001580f, 0.005550f, 0.000706f, -0.001582f, -0.003805f, -0.002229f, -0.001749f, -0.000813f, -0.001415f, -0.002143f, 0.000594f, 0.001206f, 0.001457f, 0.000644f, -0.000827f, -0.001683f, -0.000840f, 0.002838f, -0.002845f, -0.002705f, -0.000955f, 0.000077f, -0.000358f, 0.002209f, 0.002325f, 0.002431f, -0.001524f, 0.000957f, 0.000386f, 0.001056f, 0.005292f, -0.002631f, 0.000339f, -0.021910f, 0.004692f, 0.020616f, 0.001690f, 0.003212f, 0.006297f, 0.019312f, 0.002683f, -0.018608f, 0.020665f, 0.009051f, 0.007489f, 0.012547f, 0.010937f, 0.000076f, -0.003819f, 0.011836f, 0.009104f, 0.003090f, -0.008478f, 0.010295f, 0.004898f, 0.015246f, 0.017844f, 0.006765f, -0.004338f, - 0.000403f, -0.000077f, 0.007415f, 0.022642f, 0.013420f, -0.012480f, 0.021863f, 0.000934f, -0.002691f, 0.002949f, -0.016120f, 0.017978f, -0.002384f, 0.000386f, -0.002138f, 0.004633f, -0.002417f, 0.009317f, -0.012997f, 0.018370f, 0.015614f, -0.000515f, -0.002909f, -0.010108f, -0.019388f, -0.006584f, 0.007703f, -0.004443f, -0.007268f, 0.010361f, 0.012082f, -0.008104f, -0.007274f, -0.024799f, -0.008620f, -0.003001f, -0.001204f, -0.027757f, 0.014183f, 0.001636f, -0.016567f, -0.013547f, 0.004580f, -0.006384f, 0.001702f, -0.004035f, 0.000904f, -0.007245f, -0.001604f, -0.006453f, 0.004734f, 0.009378f, -0.002615f, 0.007156f, 0.000852f, -0.002858f, 0.008340f, 0.002985f, 0.000434f, 0.006946f, -0.000779f, -0.003046f, -0.004299f, -0.004783f, -0.005062f, -0.004743f, -0.005920f, -0.004257f, 0.000326f, -0.002312f, -0.005553f, -0.002669f, 0.000586f, -0.001104f, -0.002049f, 0.001281f, 0.002288f, 0.001178f, -0.002518f, -0.003545f, -0.004480f, 0.000573f, -0.004247f, 0.004037f, -0.002319f, -0.002377f, -0.002288f, 0.000171f, -0.001623f, 0.010265f, -0.012965f, -0.000104f, 0.000134f, 0.000481f, 0.020941f, 0.011520f, - -0.000182f, 0.026112f, 0.012061f, 0.023578f, 0.005623f, 0.007989f, 0.025151f, -0.009926f, -0.016763f, -0.010578f, 0.023517f, 0.005785f, -0.013267f, 0.017972f, -0.004909f, -0.010436f, 0.016033f, 0.038096f, -0.009821f, 0.001958f, 0.006081f, 0.007327f, -0.009897f, 0.001311f, 0.020953f, 0.002307f, 0.025765f, -0.005548f, 0.027668f, 0.019641f, 0.006630f, 0.016480f, 0.010394f, -0.009774f, 0.006882f, -0.002451f, -0.002462f, 0.002726f, 0.001881f, -0.001703f, 0.007301f, 0.005149f, 0.017878f, 0.012144f, -0.014942f, 0.005319f, 0.006732f, -0.010926f, 0.000660f, -0.025915f, -0.033723f, 0.013618f, -0.008638f, -0.021917f, -0.004727f, -0.011739f, 0.014528f, 0.003320f, -0.006847f, -0.016502f, 0.013033f, -0.011899f, 0.007952f, -0.013367f, 0.001988f, -0.005290f, 0.020437f, 0.003965f, -0.007975f, 0.008028f, -0.017424f, 0.016034f, 0.002588f, -0.014819f, 0.000687f, -0.001379f, -0.004299f, -0.001625f, 0.002138f, 0.004609f, -0.004358f, 0.007490f, -0.001619f, -0.002691f, -0.003318f, -0.002394f, -0.006452f, -0.000335f, -0.002291f, -0.006063f, -0.002310f, 0.002446f, -0.003878f, 0.004200f, 0.000619f, -0.002024f, - 0.001065f, -0.003953f, -0.000771f, -0.002695f, -0.000358f, 0.000083f, 0.000201f, 0.002270f, 0.002504f, 0.003010f, 0.000134f, 0.001639f, -0.000132f, -0.014757f, 0.001982f, 0.000598f, 0.003916f, -0.008991f, 0.010182f, 0.011248f, -0.001213f, -0.007478f, -0.025912f, -0.022191f, -0.017091f, 0.007995f, 0.002317f, 0.004161f, -0.021242f, 0.013499f, 0.009506f, 0.016792f, -0.018210f, 0.017318f, 0.013291f, -0.010421f, -0.008672f, -0.005244f, 0.017602f, 0.012183f, -0.007731f, 0.001787f, 0.026632f, 0.013538f, 0.006883f, 0.015476f, 0.010614f, 0.004199f, -0.008802f, 0.002046f, 0.001239f, -0.003699f, -0.009771f, 0.023702f, 0.011059f, -0.021954f, 0.014895f, 0.014856f, 0.014753f, 0.011610f, 0.003134f, -0.013659f, 0.000440f, -0.001767f, 0.020645f, 0.002804f, 0.009244f, 0.018792f, -0.003329f, -0.020374f, 0.004572f, 0.011079f, 0.020864f, -0.027703f, -0.015632f, 0.007688f, 0.000328f, 0.002641f, -0.016416f, -0.003986f, -0.015917f, -0.002136f, 0.007624f, -0.005166f, -0.008684f, -0.010523f, 0.004543f, -0.002543f, -0.005253f, -0.013030f, 0.000531f, -0.017474f, -0.000276f, -0.001613f, -0.008849f, -0.009805f, - 0.011330f, -0.003786f, -0.002758f, -0.005512f, -0.010766f, 0.003928f, 0.005271f, 0.003712f, 0.004139f, 0.003064f, -0.005922f, -0.003147f, -0.001764f, -0.001368f, -0.005562f, -0.010439f, -0.004622f, -0.000163f, -0.003521f, -0.000208f, -0.005592f, 0.000599f, -0.003008f, -0.002047f, -0.004048f, -0.004503f, -0.002362f, 0.004724f, -0.003276f, -0.001496f, 0.000753f, 0.001980f, 0.001279f, -0.002132f, 0.003566f, 0.005374f, 0.005369f, -0.001350f, 0.009844f, 0.001279f, -0.017226f, 0.017544f, 0.011277f, -0.005247f, 0.006977f, 0.010568f, -0.011644f, -0.003941f, 0.044900f, -0.001471f, 0.017520f, 0.012245f, -0.037452f, -0.019924f, -0.002093f, -0.001581f, -0.000420f, 0.021276f, 0.004797f, -0.010361f, 0.022013f, 0.013507f, -0.002730f, -0.003616f, 0.007043f, -0.003584f, -0.007747f, -0.016702f, -0.019763f, 0.010946f, -0.004311f, -0.009328f, -0.000937f, -0.030835f, -0.005700f, 0.002033f, 0.017048f, -0.020374f, -0.005856f, 0.002636f, 0.001408f, 0.004442f, 0.001560f, 0.021742f, -0.025295f, -0.008437f, 0.005683f, -0.000826f, -0.014906f, -0.003158f, 0.019776f, 0.016959f, 0.014721f, -0.004045f, -0.025180f, -0.011518f, - 0.009192f, -0.002876f, 0.017008f, -0.000991f, -0.000266f, -0.012584f, -0.007731f, 0.014796f, -0.018029f, 0.012392f, 0.009760f, -0.013050f, -0.006401f, -0.003035f, 0.002174f, -0.014050f, 0.006925f, 0.004866f, -0.006811f, -0.002151f, -0.019077f, 0.006949f, 0.014927f, 0.021205f, 0.001962f, 0.005703f, 0.010155f, 0.003118f, -0.016642f, 0.011509f, -0.003904f, 0.001913f, 0.000166f, -0.005364f, -0.005658f, -0.003081f, 0.007918f, 0.001413f, 0.006640f, -0.000687f, 0.001196f, -0.009287f, -0.003046f, -0.004254f, 0.007169f, -0.000679f, -0.002897f, 0.004906f, -0.003448f, 0.003854f, -0.002144f, 0.000666f, -0.007563f, 0.001847f, -0.001655f, -0.001556f, -0.004799f, 0.001816f, -0.000640f, -0.004301f, -0.007817f, -0.001734f, 0.000936f, -0.003153f, 0.003372f, -0.000782f, -0.033864f, -0.002231f, 0.004786f, 0.022737f, 0.002981f, -0.001057f, 0.013956f, -0.010138f, 0.030120f, -0.030062f, -0.002740f, -0.006532f, 0.005149f, -0.001579f, -0.002314f, 0.007578f, -0.005503f, -0.010294f, -0.006666f, -0.006129f, -0.017838f, -0.002954f, 0.012905f, -0.003044f, -0.007853f, 0.018902f, -0.000163f, 0.022759f, -0.022233f, -0.012918f, - 0.028434f, -0.002983f, -0.001591f, 0.001585f, -0.017684f, -0.002168f, -0.022110f, 0.006421f, -0.026566f, -0.000765f, 0.019980f, -0.006569f, 0.013660f, 0.017702f, 0.010474f, 0.013922f, -0.017922f, 0.017913f, 0.002136f, -0.047144f, -0.007774f, 0.006773f, -0.003707f, -0.005311f, -0.020039f, 0.015842f, -0.017058f, -0.003452f, -0.019363f, -0.018370f, -0.028183f, 0.025202f, 0.000325f, 0.029386f, -0.014519f, 0.022137f, 0.029580f, -0.019398f, 0.024133f, -0.029561f, -0.024383f, -0.026763f, -0.009136f, -0.018872f, 0.006194f, 0.008826f, -0.000876f, -0.003525f, 0.000008f, -0.021170f, 0.001818f, 0.000194f, 0.012369f, 0.004787f, 0.004948f, 0.008644f, 0.005082f, -0.004630f, -0.000009f, -0.008633f, -0.004948f, 0.000198f, 0.003696f, 0.000125f, 0.004157f, -0.002850f, 0.004457f, -0.001315f, 0.002450f, -0.013113f, 0.000990f, 0.004985f, 0.004001f, 0.007273f, -0.003941f, -0.005786f, -0.007477f, -0.000185f, -0.000450f, -0.006129f, -0.006466f, 0.000697f, -0.000870f, 0.001129f, 0.000256f, -0.001940f, 0.003696f, 0.010445f, -0.002333f, -0.002420f, -0.001099f, -0.002826f, 0.009600f, 0.000401f, 0.001359f, -0.003213f, - 0.005801f, -0.006046f, 0.022340f, 0.037306f, 0.005487f, -0.010088f, -0.020108f, 0.012445f, 0.034611f, 0.000198f, 0.010004f, 0.001651f, 0.013880f, 0.009361f, 0.010678f, 0.018659f, -0.022545f, -0.001939f, -0.008307f, 0.029481f, 0.022098f, -0.001225f, 0.034218f, 0.017878f, 0.003168f, -0.032229f, -0.015793f, -0.024614f, -0.011197f, 0.002327f, 0.009337f, -0.008934f, 0.001423f, 0.034521f, -0.006371f, -0.000135f, 0.001904f, 0.035472f, -0.021650f, -0.008941f, -0.008739f, -0.003669f, -0.021182f, 0.024377f, 0.001779f, 0.016291f, -0.025438f, 0.003307f, -0.002651f, -0.015408f, -0.005922f, -0.028401f, 0.008985f, 0.000352f, 0.006074f, -0.003652f, -0.001582f, -0.032946f, -0.011006f, 0.012610f, 0.020951f, -0.006232f, 0.005576f, 0.043359f, -0.002702f, 0.002331f, 0.008124f, 0.019438f, -0.018331f, 0.004039f, 0.022189f, -0.013284f, 0.016162f, 0.004508f, 0.016838f, -0.022426f, -0.011192f, 0.002818f, 0.005206f, 0.011062f, 0.012863f, 0.012006f, -0.008263f, 0.003336f, 0.007634f, 0.014567f, 0.023109f, 0.010461f, -0.010839f, -0.005296f, -0.008514f, 0.003511f, 0.004943f, 0.009823f, 0.009193f, 0.005303f, - 0.009705f, -0.010580f, -0.002014f, -0.010787f, 0.009177f, -0.012329f, 0.012343f, 0.008631f, -0.009145f, 0.005231f, -0.001068f, -0.005823f, 0.001416f, 0.001648f, -0.003266f, 0.002595f, 0.015294f, -0.000678f, 0.000008f, -0.009587f, 0.004837f, -0.000622f, -0.000275f, -0.008724f, 0.008760f, -0.007451f, 0.002750f, 0.003562f, 0.006941f, -0.000972f, -0.003292f, -0.020489f, -0.030886f, 0.008479f, -0.003195f, -0.031445f, 0.008712f, 0.003019f, 0.028514f, 0.024966f, -0.023148f, -0.028060f, 0.006385f, -0.021453f, -0.011103f, 0.000755f, 0.042414f, 0.000478f, -0.005258f, -0.037926f, -0.018815f, -0.003389f, -0.028080f, -0.042963f, 0.029509f, -0.011163f, -0.013415f, -0.002576f, 0.031993f, -0.010085f, 0.003601f, -0.006498f, -0.006288f, -0.018627f, -0.009767f, 0.003011f, -0.044643f, -0.028882f, -0.008162f, -0.016428f, -0.015046f, -0.005324f, -0.017451f, 0.015128f, 0.007078f, 0.004793f, -0.010599f, 0.007616f, -0.064494f, 0.059993f, 0.035368f, -0.006165f, -0.008089f, 0.033721f, 0.002145f, -0.020292f, -0.028684f, -0.003735f, -0.009996f, -0.012055f, -0.017216f, -0.017758f, 0.022212f, 0.020567f, -0.009242f, 0.045257f, - -0.025098f, -0.020753f, -0.018578f, 0.000061f, 0.014905f, -0.053126f, 0.015788f, -0.016829f, 0.027841f, -0.030119f, 0.013294f, -0.002767f, -0.010088f, 0.020733f, -0.038997f, 0.036713f, 0.002183f, -0.000516f, -0.008189f, 0.001062f, -0.000447f, -0.018576f, 0.003735f, -0.005149f, 0.009783f, 0.012353f, -0.011256f, 0.005648f, 0.007984f, 0.017346f, 0.000712f, -0.005664f, -0.000882f, -0.001550f, -0.006811f, 0.005086f, -0.002609f, -0.004155f, 0.004523f, -0.006884f, -0.002103f, 0.001689f, 0.005081f, 0.005961f, -0.013777f, -0.010604f, -0.009105f, 0.001580f, 0.005765f, 0.000009f, 0.003833f, 0.003245f, 0.009379f, 0.004862f, -0.007444f, 0.007009f, 0.001479f, 0.030806f, 0.002494f, 0.071766f, 0.023320f, -0.001417f, 0.003034f, -0.027719f, -0.036005f, 0.044829f, -0.013324f, 0.005107f, 0.059418f, -0.015472f, -0.002931f, -0.012701f, 0.046319f, 0.008939f, -0.019236f, 0.027395f, -0.010021f, 0.040682f, 0.021283f, 0.010141f, 0.005957f, -0.004499f, -0.015640f, -0.005074f, -0.004296f, -0.043602f, -0.011028f, -0.007029f, 0.024045f, -0.013512f, 0.004472f, 0.008011f, -0.031317f, -0.046551f, -0.001741f, 0.040166f, - -0.002766f, 0.035677f, -0.006266f, -0.049912f, -0.019405f, 0.002247f, 0.011221f, 0.008999f, -0.040671f, 0.000314f, -0.011708f, 0.029441f, -0.030206f, 0.037224f, 0.055009f, 0.035691f, -0.011309f, 0.006621f, 0.022135f, -0.007973f, 0.043079f, 0.049912f, 0.043959f, 0.014346f, 0.048210f, -0.001703f, -0.019561f, 0.006186f, -0.025360f, -0.031953f, 0.017305f, -0.013752f, 0.039377f, 0.020331f, 0.010368f, -0.013631f, -0.048714f, -0.044148f, 0.030828f, -0.019593f, -0.039440f, 0.026178f, 0.052338f, 0.031440f, -0.016926f, 0.024943f, 0.015266f, -0.005546f, -0.012505f, 0.014761f, -0.018755f, -0.005767f, -0.002112f, -0.012957f, 0.001590f, -0.002886f, 0.010684f, 0.006421f, -0.002619f, -0.017223f, 0.009425f, 0.008557f, 0.005872f, -0.003832f, 0.000442f, -0.016121f, 0.001174f, -0.000306f, 0.004033f, 0.003606f, 0.000297f, 0.009367f, -0.003440f, 0.013015f, 0.014758f, 0.003684f, 0.011962f, 0.000933f, -0.009679f, -0.022854f, 0.005013f, 0.000365f, 0.004762f, -0.016278f, -0.036211f, 0.021191f, 0.026542f, -0.000422f, 0.012999f, 0.008723f, 0.012865f, 0.010656f, 0.004919f, -0.002890f, 0.006298f, -0.007605f, - 0.013808f, -0.024622f, -0.068588f, -0.027532f, 0.037649f, 0.002171f, -0.011157f, -0.022976f, -0.000091f, 0.031636f, 0.040440f, 0.008610f, -0.024747f, -0.004373f, 0.032366f, -0.039109f, 0.003787f, -0.004873f, 0.028976f, 0.033001f, -0.026396f, 0.050070f, 0.009783f, 0.001994f, 0.070803f, 0.000348f, -0.022104f, 0.024766f, -0.011724f, 0.003532f, -0.015016f, 0.005254f, 0.047097f, 0.005421f, 0.059973f, 0.025269f, -0.052172f, -0.057220f, -0.012398f, 0.014882f, 0.032087f, -0.044368f, -0.015581f, -0.006413f, 0.054015f, 0.049370f, -0.042157f, -0.001630f, -0.025678f, 0.016301f, -0.008785f, 0.056448f, 0.000852f, -0.012395f, 0.037163f, -0.007523f, -0.043691f, -0.022090f, -0.007060f, 0.045529f, -0.040229f, 0.024454f, 0.070826f, 0.033513f, 0.047579f, -0.012670f, 0.019418f, -0.012763f, -0.029241f, -0.028185f, 0.014962f, -0.020023f, -0.001226f, -0.007160f, 0.013034f, -0.000281f, 0.028852f, -0.006400f, -0.013088f, -0.004641f, -0.005624f, 0.007122f, -0.004422f, 0.011121f, -0.019563f, 0.014617f, -0.012889f, -0.005882f, 0.004205f, -0.005106f, -0.005993f, 0.009269f, -0.008500f, -0.003200f, -0.002416f, -0.007054f, - -0.024068f, -0.013565f, -0.002193f, -0.002734f, -0.006994f, -0.009381f, -0.002066f, 0.007335f, -0.004053f, 0.004376f, -0.003560f, -0.000091f, 0.005672f, -0.018454f, 0.002240f, -0.002466f, -0.013872f, -0.032981f, 0.024488f, 0.036962f, 0.030154f, -0.052766f, -0.025717f, 0.033943f, 0.101280f, 0.006565f, 0.021690f, -0.029112f, 0.008782f, -0.001051f, -0.005173f, -0.027306f, 0.007978f, -0.009329f, 0.048384f, 0.039119f, -0.051417f, -0.022169f, 0.053502f, 0.027807f, 0.018958f, 0.006171f, 0.028712f, 0.034412f, 0.010396f, 0.020764f, 0.018292f, -0.024159f, 0.003200f, -0.023644f, -0.011243f, 0.007119f, -0.005170f, 0.004587f, -0.021241f, -0.018171f, 0.014016f, -0.003333f, 0.019493f, 0.016221f, -0.047586f, 0.035761f, 0.006609f, 0.028904f, -0.032262f, 0.018807f, 0.028202f, -0.021636f, -0.036784f, -0.036047f, -0.040693f, -0.039727f, -0.033800f, 0.012596f, 0.059142f, 0.016412f, 0.017931f, 0.028884f, 0.001550f, 0.000150f, -0.023664f, 0.040585f, -0.051020f, -0.100817f, 0.034350f, -0.022459f, 0.003991f, -0.085396f, 0.020848f, 0.028172f, 0.004269f, 0.018037f, 0.014076f, -0.011889f, -0.022456f, -0.033272f, - 0.010398f, 0.008522f, -0.026492f, 0.020005f, -0.010349f, -0.043115f, -0.024503f, 0.000504f, -0.008334f, 0.005686f, 0.002531f, 0.014125f, 0.005651f, 0.003429f, -0.001308f, 0.011452f, -0.006833f, -0.012999f, -0.025470f, -0.013918f, -0.016627f, -0.004511f, -0.009391f, 0.010358f, 0.013672f, 0.011706f, -0.020408f, -0.000502f, -0.008870f, 0.001286f, 0.010996f, 0.004659f, -0.018108f, -0.031451f, -0.003290f, 0.002561f, 0.002215f, -0.010427f, -0.005426f, -0.010944f, -0.002978f, -0.014661f, -0.017232f, 0.012054f, -0.016858f, 0.007984f, 0.002217f, -0.007183f, -0.003868f, 0.011630f, -0.009946f, 0.005244f, -0.011969f, 0.024131f, 0.017388f, 0.023048f, -0.032901f, -0.017112f, -0.004625f, 0.021068f, -0.043908f, 0.073053f, 0.034722f, -0.005987f, 0.039863f, 0.023927f, 0.037989f, -0.019997f, -0.025567f, -0.024867f, 0.046012f, 0.016319f, 0.008311f, 0.041473f, -0.036331f, -0.117653f, -0.007836f, 0.007833f, 0.013996f, -0.066238f, 0.051316f, 0.037292f, -0.071098f, -0.054754f, 0.001754f, 0.029278f, 0.002488f, 0.016623f, 0.037692f, -0.010017f, 0.023404f, -0.034366f, -0.039325f, -0.031373f, -0.040852f, -0.063619f, - 0.017723f, 0.006577f, -0.042701f, 0.056362f, 0.021915f, -0.013783f, -0.013437f, -0.033284f, -0.024923f, -0.057990f, -0.031496f, 0.020617f, 0.051454f, -0.019605f, 0.005162f, 0.021166f, -0.045636f, 0.032932f, 0.044590f, 0.006574f, -0.011427f, 0.038109f, 0.010437f, 0.004293f, -0.027318f, -0.031948f, -0.002343f, 0.056978f, -0.017522f, -0.052574f, -0.000924f, -0.066994f, -0.069790f, -0.072686f, -0.034858f, -0.038350f, -0.024495f, 0.031261f, -0.004392f, 0.028103f, -0.005809f, -0.009279f, -0.026304f, -0.007070f, -0.007754f, 0.015094f, -0.011563f, -0.016811f, -0.003331f, -0.006598f, 0.002463f, -0.024510f, 0.004631f, -0.011300f, -0.009823f, 0.012965f, -0.011754f, -0.003916f, 0.004232f, -0.008728f, 0.019080f, -0.012107f, 0.002844f, 0.030981f, 0.003785f, 0.018099f, -0.006940f, -0.010883f, 0.031388f, 0.004703f, -0.016658f, 0.000607f, 0.000297f, 0.002439f, 0.004435f, -0.008914f, 0.019594f, 0.001190f, -0.001509f, -0.009485f, -0.009872f, -0.025845f, -0.044406f, -0.023408f, -0.023801f, 0.028912f, 0.057165f, 0.021000f, -0.025889f, -0.055060f, 0.059140f, 0.031717f, -0.028323f, -0.015379f, -0.015041f, 0.003285f, - 0.014045f, -0.018200f, 0.030828f, 0.028508f, 0.001769f, -0.019172f, -0.017989f, -0.017105f, -0.002010f, 0.011100f, -0.008425f, -0.018921f, -0.044865f, 0.013909f, 0.039826f, -0.022726f, 0.035241f, 0.001102f, 0.023728f, -0.019611f, 0.026364f, 0.075877f, -0.028198f, 0.033144f, 0.066104f, 0.011489f, -0.011303f, -0.018235f, 0.019340f, 0.001485f, 0.033862f, -0.025659f, 0.090644f, -0.027911f, -0.060456f, 0.014016f, -0.027412f, 0.071616f, 0.023700f, -0.022294f, 0.004361f, -0.043076f, -0.058951f, 0.072729f, 0.008561f, -0.019463f, 0.072026f, -0.037080f, 0.009614f, -0.020900f, 0.041857f, -0.052963f, -0.059293f, -0.042403f, 0.013480f, 0.025715f, 0.047902f, 0.020459f, 0.050614f, 0.079032f, -0.009447f, 0.015998f, -0.010153f, 0.010095f, -0.002249f, 0.003307f, -0.057740f, 0.002294f, -0.079835f, -0.026616f, -0.015519f, 0.014317f, -0.002434f, 0.017679f, -0.006073f, -0.023822f, -0.024899f, -0.005628f, -0.016367f, -0.018325f, -0.031653f, 0.000133f, -0.003055f, 0.024401f, 0.010639f, -0.019528f, 0.018264f, 0.008557f, 0.015127f, 0.019736f, -0.025225f, 0.007295f, -0.010293f, -0.004682f, 0.025919f, -0.008380f, - 0.013083f, 0.017461f, -0.010002f, -0.027579f, -0.013821f, 0.010344f, -0.045351f, -0.014070f, 0.001389f, -0.006254f, -0.009963f, 0.020862f, -0.021221f, -0.023655f, 0.017119f, 0.027988f, -0.012338f, 0.023422f, 0.055652f, -0.008442f, 0.001847f, 0.066191f, 0.007457f, -0.036560f, -0.041959f, -0.037523f, 0.068422f, -0.046060f, 0.027300f, 0.031696f, -0.021662f, 0.006244f, -0.037236f, -0.008853f, 0.030700f, -0.027540f, 0.022247f, -0.009494f, -0.046837f, -0.103787f, -0.008962f, 0.092553f, 0.039246f, 0.009083f, -0.018071f, -0.028423f, -0.004719f, -0.037158f, 0.012280f, -0.052197f, 0.062348f, 0.004113f, 0.007915f, 0.004612f, -0.020448f, -0.062848f, -0.023393f, 0.049622f, -0.040429f, -0.010951f, -0.027817f, 0.021917f, -0.019780f, 0.068852f, -0.010669f, 0.013845f, -0.024751f, -0.065150f, 0.014866f, -0.049843f, -0.010593f, -0.004775f, -0.090062f, -0.076866f, -0.071694f, 0.023575f, -0.012758f, -0.039538f, -0.024868f, -0.025436f, -0.022492f, -0.035319f, -0.022961f, -0.006452f, -0.080751f, 0.022348f, 0.009712f, 0.029625f, -0.017420f, 0.070329f, -0.006777f, 0.013282f, -0.023906f, -0.010087f, 0.038742f, -0.075802f, - 0.032683f, 0.049132f, -0.050121f, -0.033176f, 0.003700f, 0.007696f, -0.012785f, -0.024699f, -0.039108f, -0.002735f, 0.001547f, -0.024237f, 0.021011f, -0.017943f, -0.031018f, -0.017760f, -0.012964f, 0.019794f, 0.000077f, 0.000425f, -0.000087f, 0.014730f, -0.038330f, -0.011400f, -0.004056f, -0.007807f, -0.002066f, 0.000441f, -0.046067f, 0.001264f, -0.014490f, -0.012531f, -0.003383f, -0.021124f, 0.006368f, -0.006141f, 0.004839f, 0.000664f, -0.003432f, -0.005386f, -0.011024f, -0.002097f, -0.008940f, -0.002405f, 0.007149f, -0.010756f, -0.016482f, 0.000361f, -0.003500f, -0.003982f, -0.010076f, -0.019107f, -0.012266f, -0.005022f, -0.001787f, -0.013609f, -0.015877f, 0.028129f, 0.017019f, 0.034038f, -0.012825f, -0.070750f, 0.020410f, 0.001019f, 0.117485f, 0.120244f, 0.014547f, 0.001189f, 0.028331f, 0.014213f, 0.030264f, 0.051897f, 0.019346f, 0.053888f, 0.081423f, -0.020258f, 0.010701f, -0.066857f, -0.009461f, 0.008778f, -0.008625f, -0.019877f, -0.040529f, -0.034081f, 0.018916f, 0.018802f, -0.088841f, 0.063447f, 0.017162f, 0.089528f, -0.005426f, -0.017672f, 0.029292f, -0.006146f, 0.094239f, 0.024047f, - -0.004796f, 0.018178f, 0.018670f, -0.025210f, -0.057502f, -0.045047f, -0.022587f, 0.070400f, 0.000970f, 0.077376f, 0.009535f, 0.075651f, -0.021769f, -0.103925f, -0.038876f, -0.030121f, 0.053872f, 0.006625f, -0.050496f, -0.073146f, -0.051108f, -0.010130f, 0.063261f, -0.054953f, -0.047876f, -0.031506f, 0.056464f, -0.027739f, -0.016410f, -0.072820f, -0.072487f, 0.022947f, 0.012282f, 0.097724f, 0.025135f, -0.010264f, -0.026395f, 0.030698f, 0.031734f, 0.104333f, 0.001918f, -0.033708f, -0.045133f, -0.002831f, -0.004627f, 0.002455f, 0.016241f, 0.015083f, -0.024264f, -0.005419f, 0.007890f, 0.021803f, -0.023301f, -0.018873f, 0.029320f, 0.043215f, 0.020079f, 0.013267f, 0.016798f, -0.018147f, -0.007732f, -0.011413f, -0.002361f, -0.002399f, 0.009494f, 0.000160f, 0.056336f, 0.011850f, -0.002401f, -0.017185f, -0.029561f, 0.028289f, 0.045721f, -0.016524f, 0.000757f, 0.001811f, 0.005724f, 0.026200f, 0.011415f, 0.019469f, 0.019863f, 0.005076f, 0.015462f, 0.005096f, -0.000972f, 0.005117f, -0.013919f, -0.004696f, 0.003416f, -0.008387f, 0.005588f, 0.001554f, 0.071902f, 0.027316f, -0.034946f, 0.067771f, - -0.004207f, -0.133103f, -0.040536f, 0.083970f, 0.093273f, -0.065612f, -0.065705f, -0.066778f, 0.037278f, 0.057137f, 0.114159f, 0.034577f, 0.014740f, -0.065083f, -0.006607f, -0.003990f, 0.025681f, 0.057165f, 0.041498f, 0.003392f, -0.069052f, -0.134124f, -0.035556f, -0.067838f, 0.100949f, 0.106932f, 0.186550f, -0.055832f, -0.179413f, -0.039055f, -0.061638f, 0.139484f, 0.047436f, 0.141469f, 0.036440f, -0.047224f, -0.136692f, -0.092385f, 0.004985f, 0.017066f, 0.153272f, 0.062307f, -0.005318f, -0.126089f, -0.220039f, -0.057480f, 0.004716f, 0.101722f, 0.231548f, 0.050524f, 0.069832f, -0.149144f, -0.228601f, 0.009940f, 0.052523f, 0.182119f, 0.107056f, 0.076570f, -0.042219f, -0.147243f, -0.120476f, -0.001093f, 0.034030f, -0.003080f, 0.091946f, -0.075794f, -0.070973f, -0.017501f, -0.162401f, 0.025489f, 0.007862f, 0.044443f, -0.032580f, -0.065548f, -0.035256f, -0.027628f, -0.074241f, 0.017231f, 0.021828f, -0.023608f, -0.003635f, -0.069581f, 0.010063f, 0.020416f, 0.023101f, 0.032714f, 0.010506f, -0.035484f, 0.012677f, -0.011027f, -0.006004f, 0.005535f, 0.056838f, 0.010067f, -0.001594f, -0.014128f, - -0.042884f, -0.008082f, -0.016980f, 0.017041f, -0.007566f, 0.018878f, 0.012281f, -0.039038f, -0.089140f, -0.043604f, -0.065388f, 0.054148f, 0.054410f, 0.064726f, 0.037222f, -0.082893f, -0.074807f, -0.115771f, -0.027673f, 0.094844f, 0.104791f, 0.102283f, 0.005455f, -0.111626f, -0.083529f, -0.064773f, -0.000855f, 0.168011f, 0.116649f, 0.048065f, -0.089200f, -0.103677f, -0.077674f, 0.039219f, 0.040410f, 0.058766f, 0.031082f, -0.076333f, 0.101439f, -0.002192f, 0.014723f, -0.042696f, -0.096621f, 0.057565f, -0.097298f, 0.103076f, 0.014786f, 0.009220f, 0.021508f, -0.061941f, 0.061198f, 0.006044f, 0.042449f, -0.059393f, 0.020699f, 0.000537f, 0.073500f, -0.029357f, 0.017822f, 0.049242f, -0.056319f, -0.032282f, 0.005042f, -0.051058f, 0.082506f, -0.018564f, -0.034588f, 0.074580f, 0.085262f, -0.022883f, -0.063851f, -0.015590f, -0.056341f, -0.010259f, 0.034056f, -0.005327f, -0.070069f, 0.008380f, 0.036965f, -0.024423f, 0.041750f, -0.034930f, 0.015801f, 0.045370f, -0.018687f, 0.029935f, -0.079766f, -0.079657f, 0.080597f, 0.045311f, 0.124677f, -0.005050f, -0.032379f, 0.106406f, -0.061277f, -0.053884f, - 0.036632f, 0.036015f, 0.059615f, -0.054594f, -0.026809f, 0.016344f, -0.012336f, 0.060360f, -0.048848f, -0.149003f, 0.038061f, 0.083605f, 0.000370f, -0.068936f, 0.012333f, 0.042654f, -0.017428f, -0.017880f, -0.056431f, -0.017772f, -0.046723f, 0.046444f, 0.010479f, -0.032253f, -0.009574f, 0.055429f, -0.039983f, -0.013732f, -0.036220f, -0.003949f, 0.025979f, -0.038705f, 0.019970f, 0.057915f, 0.021302f, -0.000593f, -0.017276f, -0.003023f, -0.022190f, -0.026691f, 0.042794f, -0.018015f, 0.018978f, -0.005914f, -0.023127f, 0.000029f, 0.003893f, 0.004334f, 0.015047f, 0.019427f, -0.034175f, -0.009963f, 0.015724f, 0.014082f, 0.032218f, -0.004208f, -0.029512f, 0.011495f, -0.034231f, 0.016113f, -0.031269f, -0.016931f, -0.000312f, -0.006417f, -0.021253f, 0.046980f, -0.021325f, 0.009759f, 0.019569f, 0.004519f, 0.015158f, 0.031207f, -0.001440f, -0.005442f, 0.000656f, -0.002994f, -0.039264f, -0.024745f, 0.151473f, 0.040988f, 0.042422f, -0.128358f, -0.031541f, -0.100629f, -0.084234f, 0.076068f, 0.080874f, 0.158861f, 0.074041f, -0.021521f, -0.030182f, -0.018715f, 0.050869f, 0.034810f, 0.001720f, 0.077207f, - 0.015748f, -0.030952f, -0.035902f, -0.029583f, 0.056274f, 0.000001f, 0.049305f, 0.022679f, 0.030032f, 0.007322f, -0.011547f, 0.005663f, 0.000344f, 0.007305f, -0.011998f, -0.003216f, 0.016602f, 0.013410f, 0.104937f, 0.083933f, 0.069271f, -0.006017f, 0.019416f, -0.042482f, -0.006368f, -0.026422f, -0.047214f, -0.049911f, 0.015732f, 0.027230f, 0.040299f, 0.048597f, 0.040729f, -0.025077f, -0.063350f, 0.097389f, -0.068911f, -0.030432f, -0.017170f, 0.033450f, 0.004990f, 0.047706f, 0.050304f, 0.043561f, -0.057980f, -0.020950f, 0.008570f, -0.022968f, -0.093895f, 0.063264f, -0.021594f, -0.016964f, 0.036283f, 0.073420f, 0.083799f, 0.060794f, 0.059989f, 0.051410f, -0.054199f, 0.007198f, -0.013489f, -0.016951f, 0.031770f, 0.024874f, 0.033812f, 0.016242f, -0.014724f, -0.027231f, -0.039029f, -0.042697f, -0.085352f, -0.034235f, 0.013125f, -0.004843f, 0.052758f, -0.000029f, -0.023419f, -0.007916f, -0.033737f, 0.013033f, 0.004398f, -0.002463f, -0.000047f, 0.022283f, 0.049433f, -0.005952f, 0.002831f, 0.027085f, 0.002346f, 0.000385f, -0.009445f, -0.003135f, -0.011289f, -0.011151f, 0.003298f, -0.023281f, - 0.010755f, 0.013446f, -0.016839f, -0.025344f, 0.007379f, 0.005208f, -0.008895f, 0.025033f, 0.033822f, -0.004473f, 0.005383f, -0.010794f, -0.033468f, -0.014158f, 0.005895f, -0.195214f, -0.097393f, -0.134050f, 0.096789f, 0.021470f, 0.277208f, 0.286641f, 0.285491f, 0.326370f, 0.321279f, 0.230931f, 0.143617f, 0.180129f, 0.079588f, 0.016832f, -0.151982f, -0.132192f, -0.331897f, -0.290116f, -0.260575f, -0.153436f, -0.193754f, -0.147536f, -0.012167f, -0.047104f, -0.019087f, -0.023220f, 0.001138f, -0.000306f, 0.008746f, 0.037905f, 0.040580f, 0.038856f, 0.114364f, 0.117488f, 0.124403f, 0.088977f, 0.248887f, 0.065151f, 0.104589f, 0.174341f, 0.194222f, 0.072284f, 0.195463f, 0.235359f, 0.185458f, 0.161162f, 0.163727f, 0.018095f, 0.098001f, 0.198096f, 0.195595f, 0.126177f, 0.164132f, 0.143638f, -0.002025f, -0.053092f, -0.037502f, -0.097838f, -0.120879f, -0.015487f, -0.135846f, -0.207020f, -0.161456f, -0.192822f, -0.285316f, -0.130499f, -0.192948f, -0.213721f, -0.302823f, -0.246130f, -0.279274f, -0.318910f, -0.212600f, -0.360605f, -0.426734f, -0.428150f, -0.233116f, -0.289712f, -0.365252f, -0.071763f, - -0.162733f, -0.076302f, -0.041087f, 0.119678f, 0.053131f, 0.175587f, 0.093103f, 0.165861f, 0.157754f, 0.103820f, 0.081700f, 0.128587f, 0.238035f, 0.242331f, 0.243035f, 0.248359f, 0.257924f, 0.313570f, 0.279984f, 0.232555f, 0.285835f, 0.322663f, 0.257734f, 0.193957f, 0.231322f, 0.194732f, 0.125610f, 0.158829f, 0.107224f, 0.053339f, 0.022726f, 0.049033f, 0.014115f, -0.020148f, -0.014161f, -0.025964f, -0.062343f, -0.094567f, -0.094231f, -0.102487f, -0.087836f, -0.109565f, -0.172517f, -0.154967f, -0.178290f, -0.200858f, -0.234201f, -0.233388f, -0.193555f, -0.194227f, -0.159448f, -0.101254f, -0.114372f, -0.077880f, -0.055108f, 0.005580f, -0.001480f, 0.000028f, 0.008599f, 0.034308f, 0.039283f, 0.012924f, 0.030750f, 0.049999f, 0.039235f, 0.017040f, 0.019409f, 0.036693f, 0.020619f, 0.008226f, 0.013541f, 0.019868f, 0.016744f, 0.009773f, 0.008455f, 0.006378f, 0.002691f, 0.000657f} - } -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870]={ {-0.000055f, -0.000016f, -0.000030f, -0.000018f, -0.000046f, -0.000008f, -0.000074f, -0.000017f, -0.000239f, 0.000164f, -0.000016f, 0.000165f, -0.000036f, 0.000073f, 0.000441f, -0.000049f, -0.000525f, -0.000519f, -0.000172f, -0.000319f, 0.000042f, -0.000258f, -0.000703f, 0.000200f, -0.000177f, -0.000125f, 0.000186f, 0.000060f, -0.000237f, -0.000368f, -0.000480f, 0.000065f, -0.000289f, -0.000175f, 0.000101f, -0.000504f, 0.000450f, 0.000472f, -0.000271f, -0.000032f, -0.000174f, -0.000470f, 0.000042f, -0.000423f, -0.000335f, 0.000326f, -0.000217f, 0.000489f, 0.002039f, -0.000885f, 0.000905f, -0.000382f, 0.000324f, -0.000012f, 0.000474f, -0.000204f, 0.000119f, 0.000203f, 0.000244f, 0.000260f, 0.000450f, -0.000109f, 0.000054f, 0.000822f, 0.000616f, -0.001615f, 0.000323f, -0.000206f, 0.000083f, -0.000549f, 0.000365f, -0.000692f, 0.000693f, 0.000575f, 0.000285f, -0.000088f, -0.000216f, -0.000253f, 0.000493f, 0.000452f, -0.000200f, 0.000104f, 0.000849f, -0.000315f, -0.000015f, -0.000287f, 0.000102f, 0.000132f, -0.000021f, -0.000238f, 0.000400f, 0.000062f, -0.000120f, 0.000303f, 0.008189f, -0.000591f, - 0.001141f, -0.000020f, 0.000362f, 0.000158f, 0.000276f, 0.000188f, 0.000784f, -0.000451f, 0.000331f, -0.000160f, 0.000136f, 0.000431f, 0.000671f, 0.000268f, 0.000130f, -0.000322f, 0.000611f, -0.000442f, 0.000233f, -0.000205f, -0.000644f, 0.000067f, 0.000224f, 0.000023f, -0.000201f, 0.000057f, -0.000225f, 0.000423f, -0.000869f, 0.000203f, -0.000201f, 0.000230f, -0.000009f, -0.001218f, -0.000423f, 0.000124f, 0.000193f, 0.000141f, -0.000211f, -0.000275f, -0.000238f, 0.000173f, 0.000472f, -0.000195f, 0.000209f, 0.004940f, -0.005836f, 0.001168f, -0.001401f, 0.000771f, -0.000907f, 0.000713f, -0.001241f, -0.000370f, -0.000765f, -0.000137f, -0.000637f, 0.000059f, 0.001149f, 0.001671f, 0.000701f, 0.000375f, 0.000033f, 0.000528f, 0.001196f, 0.000871f, -0.000541f, -0.000650f, -0.000870f, -0.000411f, -0.000501f, 0.000051f, -0.000079f, -0.000072f, 0.000027f, 0.000259f, -0.000403f, 0.000521f, -0.000531f, -0.000706f, 0.000263f, -0.000005f, 0.000055f, 0.000155f, -0.000491f, -0.000555f, 0.000173f, -0.000335f, -0.000457f, -0.000081f, 0.000067f, 0.000365f, -0.011317f, 0.002256f, -0.000570f, 0.000287f, - 0.000244f, -0.000948f, -0.000427f, 0.000900f, -0.000147f, 0.000077f, 0.001010f, 0.000327f, -0.000386f, -0.000704f, 0.000704f, 0.000061f, -0.000854f, -0.001223f, -0.001770f, 0.000571f, -0.000787f, 0.000182f, -0.000255f, 0.000331f, -0.000181f, 0.000125f, -0.000919f, -0.000907f, -0.000566f, -0.000242f, -0.000572f, 0.000171f, -0.000277f, 0.000323f, 0.001062f, 0.000183f, 0.000185f, 0.000703f, 0.000194f, 0.000163f, -0.000023f, -0.000138f, -0.000701f, -0.000166f, 0.000163f, -0.000129f, -0.000033f, -0.013529f, 0.005063f, -0.001263f, 0.001626f, -0.000794f, 0.001173f, -0.000647f, -0.000183f, -0.001153f, 0.000888f, -0.001365f, 0.000910f, -0.000233f, 0.001273f, -0.001728f, 0.000450f, 0.001612f, 0.000476f, -0.001357f, -0.000476f, -0.000816f, -0.000335f, 0.000516f, 0.000268f, 0.000382f, -0.000208f, -0.000461f, -0.000649f, -0.000637f, -0.000048f, -0.000731f, -0.000122f, -0.000679f, -0.000475f, -0.001889f, -0.000522f, -0.000264f, 0.000111f, 0.000045f, 0.000664f, 0.000282f, 0.000654f, -0.000066f, 0.000760f, 0.000179f, 0.000076f, 0.000188f, 0.001689f, 0.005892f, -0.001625f, 0.002614f, -0.001586f, 0.000684f, - -0.001711f, 0.001347f, -0.000123f, 0.001468f, -0.000117f, -0.000147f, 0.001443f, -0.000238f, -0.000200f, 0.001262f, -0.000616f, -0.001158f, -0.001846f, 0.001640f, -0.000133f, 0.001122f, 0.000131f, 0.000797f, 0.000386f, -0.001071f, 0.000456f, 0.000435f, -0.000072f, 0.000553f, 0.000845f, -0.001065f, 0.000141f, -0.000032f, -0.000090f, -0.000611f, -0.000275f, -0.000598f, 0.000163f, -0.000124f, 0.000462f, 0.001381f, 0.000054f, 0.000700f, -0.000124f, 0.000135f, -0.000148f, 0.000212f, 0.000559f, -0.000254f, 0.017789f, -0.004387f, 0.001691f, -0.000849f, 0.001497f, -0.000654f, 0.001149f, -0.000639f, 0.000395f, -0.001731f, 0.000804f, -0.001653f, 0.001266f, -0.000505f, 0.000374f, -0.000481f, 0.001783f, 0.000245f, 0.000449f, -0.000855f, 0.001165f, -0.000104f, -0.000537f, 0.000992f, -0.000768f, -0.001193f, 0.000031f, -0.000372f, 0.000570f, -0.000005f, -0.000178f, -0.000389f, 0.000174f, -0.000039f, 0.000225f, -0.000821f, 0.000194f, -0.000363f, 0.001282f, -0.000239f, 0.000614f, 0.000116f, 0.000516f, 0.000960f, -0.000659f, 0.000052f, 0.000223f, -0.000327f, 0.000754f, -0.000155f, 0.001499f, -0.009227f, - 0.003644f, -0.002847f, 0.001680f, -0.001418f, 0.000488f, -0.001869f, 0.001214f, -0.000747f, 0.001696f, -0.000189f, 0.000740f, -0.001491f, -0.000629f, -0.000097f, -0.000542f, -0.000506f, 0.001956f, -0.001442f, 0.000249f, 0.000911f, -0.001787f, 0.000460f, 0.000632f, -0.000448f, 0.000615f, 0.000206f, 0.000354f, -0.001138f, -0.000100f, -0.000365f, 0.000702f, -0.000567f, 0.000384f, -0.001343f, -0.000271f, 0.000983f, 0.000475f, 0.000312f, -0.000342f, -0.000202f, -0.001025f, -0.001090f, 0.000593f, 0.000221f, -0.000048f, -0.000160f, -0.000095f, 0.000097f, 0.000096f, -0.000228f, -0.000223f, 0.000135f, 0.000143f, -0.000374f, -0.014916f, 0.004886f, -0.002641f, 0.000678f, -0.000246f, 0.000834f, -0.001117f, 0.001208f, -0.000493f, -0.000420f, -0.000146f, 0.000874f, -0.000470f, -0.000698f, 0.000512f, 0.001681f, -0.000230f, 0.000071f, -0.002815f, 0.000243f, 0.000047f, 0.001374f, -0.000445f, -0.000211f, -0.002152f, -0.000737f, 0.000028f, 0.000041f, 0.000750f, 0.001029f, -0.001626f, -0.001492f, 0.000966f, 0.000243f, -0.001676f, -0.001287f, 0.000632f, 0.000365f, -0.000098f, -0.000049f, -0.000643f, 0.000659f, - -0.000202f, 0.000241f, 0.000087f, -0.000879f, -0.000371f, 0.000470f, -0.001357f, -0.000679f, -0.000271f, 0.000287f, -0.000272f, 0.000024f, -0.000678f, -0.000059f, -0.014890f, 0.006590f, -0.003641f, 0.002766f, -0.002540f, 0.001260f, -0.002891f, 0.000667f, -0.001885f, 0.002976f, -0.001506f, 0.001050f, -0.000184f, 0.000022f, -0.001364f, -0.000389f, -0.000564f, 0.002694f, -0.000512f, 0.001375f, 0.002183f, 0.001253f, 0.000323f, -0.000291f, 0.000524f, -0.000477f, 0.001222f, 0.001181f, 0.000168f, -0.000594f, 0.000208f, 0.000226f, -0.000814f, -0.000366f, 0.000618f, 0.000888f, -0.000670f, -0.000656f, -0.000679f, 0.000045f, -0.000282f, 0.000380f, -0.000655f, 0.000468f, -0.001030f, 0.000304f, -0.000565f, -0.000038f, 0.000105f, -0.000409f, -0.000560f, -0.000712f, -0.000668f, -0.000886f, 0.000111f, -0.000808f, 0.005531f, 0.005748f, -0.002123f, 0.001915f, -0.002331f, 0.000361f, 0.000710f, 0.000064f, -0.000931f, 0.001074f, 0.000276f, 0.002279f, 0.001190f, 0.002573f, -0.000391f, 0.001519f, -0.000410f, 0.000972f, 0.001356f, -0.000179f, -0.001874f, 0.001793f, -0.000193f, 0.000756f, -0.000417f, 0.000001f, - 0.000259f, 0.002192f, 0.000329f, -0.001185f, -0.000400f, 0.000292f, -0.000652f, 0.001654f, 0.000708f, -0.000254f, -0.000426f, -0.000931f, 0.000739f, -0.000912f, 0.000943f, 0.000990f, -0.000725f, 0.000570f, 0.000515f, 0.000267f, -0.000070f, 0.001606f, 0.000994f, 0.001177f, -0.000042f, 0.000147f, 0.000529f, -0.000337f, -0.000129f, -0.000105f, -0.000343f, -0.000004f, 0.000088f, 0.000151f, -0.000282f, -0.000660f, -0.000691f, 0.016813f, -0.006003f, 0.002085f, -0.002806f, 0.001914f, -0.001848f, 0.002460f, -0.000844f, 0.000115f, -0.001845f, 0.003693f, -0.000531f, 0.003328f, 0.000208f, 0.000570f, -0.002230f, 0.000796f, 0.003346f, -0.001029f, -0.002816f, 0.000416f, 0.000120f, 0.001306f, -0.002030f, 0.001664f, -0.000016f, 0.000146f, -0.000176f, -0.001960f, -0.000575f, 0.000327f, -0.002355f, 0.000391f, 0.000960f, 0.000788f, -0.000661f, -0.000187f, -0.000087f, 0.001105f, 0.000334f, -0.000188f, -0.000482f, 0.000861f, 0.000595f, 0.002138f, 0.000553f, -0.000318f, 0.001195f, 0.000479f, -0.000122f, 0.000395f, 0.000907f, 0.000598f, 0.000126f, 0.000144f, -0.000693f, 0.000150f, -0.000067f, 0.000886f, - -0.000091f, 0.000351f, -0.000096f, 0.000315f, 0.005629f, -0.008132f, 0.004872f, -0.003616f, 0.001521f, 0.000550f, -0.000369f, -0.000307f, 0.000967f, -0.002047f, -0.001302f, -0.001060f, -0.000826f, -0.002799f, 0.001418f, -0.002600f, -0.000105f, -0.002080f, 0.000764f, -0.001566f, -0.001234f, -0.000623f, 0.002365f, 0.000332f, 0.002301f, 0.001209f, 0.001577f, 0.002278f, 0.000118f, -0.000289f, -0.000349f, 0.000642f, 0.001750f, -0.000146f, -0.000128f, -0.001169f, 0.000888f, -0.000142f, -0.000699f, 0.000649f, 0.000540f, 0.001828f, 0.000746f, 0.000862f, -0.001295f, -0.000602f, -0.000076f, -0.000240f, 0.000891f, -0.002616f, 0.000565f, -0.000643f, -0.000442f, -0.000811f, -0.000919f, -0.000310f, -0.000909f, 0.000370f, -0.000636f, -0.000104f, -0.001381f, -0.001355f, -0.000001f, -0.017258f, -0.003771f, 0.000791f, -0.003274f, -0.001353f, 0.000139f, -0.000104f, -0.002790f, 0.000798f, -0.002779f, 0.000080f, 0.002235f, -0.000418f, -0.000372f, 0.001226f, 0.000804f, 0.001248f, 0.000073f, 0.001510f, -0.000838f, 0.000427f, 0.001753f, -0.000121f, -0.000110f, -0.001151f, 0.001669f, -0.001295f, -0.000710f, 0.000435f, - 0.000676f, 0.001272f, 0.003932f, -0.001079f, -0.000639f, -0.001697f, 0.000097f, -0.001251f, 0.000299f, -0.000501f, -0.001849f, -0.000118f, 0.002368f, 0.000664f, -0.001594f, -0.000796f, 0.000787f, -0.000970f, -0.001208f, 0.000223f, -0.000569f, 0.000136f, 0.000252f, 0.001487f, 0.000215f, 0.000728f, 0.000394f, -0.001258f, -0.000640f, 0.000783f, 0.000739f, -0.000509f, 0.000442f, -0.000103f, -0.021154f, 0.017460f, -0.006103f, 0.005188f, -0.003822f, 0.002922f, -0.001109f, 0.001861f, -0.002028f, 0.001249f, 0.001457f, 0.002107f, -0.001371f, 0.002551f, 0.001262f, 0.004340f, -0.000679f, 0.000366f, -0.002297f, 0.000583f, -0.000805f, -0.001435f, -0.001779f, -0.002047f, -0.001886f, 0.002814f, -0.000127f, 0.003379f, 0.000877f, 0.000620f, -0.000057f, 0.000431f, -0.001491f, 0.000240f, -0.000544f, 0.000704f, 0.002002f, 0.000359f, 0.000660f, 0.000119f, 0.000209f, -0.001521f, -0.000833f, -0.000058f, -0.000116f, 0.000204f, -0.000464f, -0.001401f, 0.000034f, 0.001505f, -0.000484f, 0.000444f, 0.000438f, -0.001242f, 0.000854f, 0.000368f, 0.000470f, -0.000255f, 0.000142f, -0.000135f, -0.000388f, 0.000111f, - 0.001352f, 0.012327f, -0.001896f, -0.003977f, -0.001382f, -0.000838f, -0.000639f, -0.003504f, -0.001840f, 0.000977f, 0.000601f, 0.001000f, 0.001247f, -0.002355f, 0.000952f, -0.000462f, 0.000847f, 0.003777f, -0.003817f, 0.001320f, 0.001324f, 0.001028f, -0.000983f, -0.002209f, 0.001725f, 0.000514f, 0.001236f, 0.002328f, 0.000007f, 0.003209f, 0.000283f, 0.001492f, 0.000130f, 0.001013f, -0.000876f, 0.001214f, 0.000880f, 0.001159f, -0.000441f, 0.000386f, -0.000086f, 0.001486f, 0.001837f, -0.002713f, 0.003667f, 0.000313f, 0.001029f, 0.000163f, 0.000644f, 0.000713f, -0.000766f, 0.002198f, 0.001192f, 0.000088f, 0.002017f, 0.000859f, -0.001099f, -0.000089f, -0.000733f, -0.000794f, -0.000594f, 0.000369f, -0.000149f, 0.000128f, -0.000041f, -0.002240f, 0.001163f, -0.000885f, 0.000325f, -0.000298f, -0.000123f, -0.000552f, -0.000311f, 0.009770f, 0.000855f, 0.001991f, -0.002527f, -0.000478f, -0.006278f, 0.001502f, -0.000300f, -0.004266f, 0.003579f, -0.001974f, 0.000128f, 0.002627f, 0.001182f, 0.001973f, -0.001509f, 0.000872f, -0.001979f, 0.000040f, -0.001693f, 0.000635f, -0.002573f, 0.003691f, - 0.002663f, 0.002180f, 0.002540f, 0.000567f, -0.000839f, -0.001593f, 0.000719f, 0.002028f, 0.000006f, 0.001383f, -0.000997f, 0.000283f, 0.001343f, 0.000950f, 0.001209f, 0.000088f, 0.000435f, -0.000150f, -0.000860f, 0.000859f, -0.000595f, 0.000403f, 0.000354f, -0.000879f, 0.001202f, -0.001625f, 0.001457f, -0.000761f, 0.001031f, 0.001572f, -0.001914f, 0.000194f, 0.000225f, -0.000781f, -0.001507f, 0.001069f, -0.002446f, -0.001891f, 0.001178f, 0.000497f, 0.000551f, 0.000476f, 0.001528f, 0.001468f, -0.000528f, 0.000207f, 0.000894f, -0.000352f, -0.000003f, 0.015411f, -0.012811f, 0.004347f, -0.003188f, 0.001129f, 0.004004f, 0.003256f, -0.002147f, 0.003904f, 0.002199f, 0.002359f, -0.001615f, 0.001099f, -0.000824f, 0.004635f, 0.001289f, 0.001311f, 0.001795f, 0.001963f, 0.001244f, 0.001342f, -0.003806f, 0.000612f, -0.006880f, -0.002393f, -0.000638f, -0.003941f, 0.000991f, 0.002115f, -0.001486f, -0.002137f, -0.002514f, -0.002414f, -0.001288f, 0.001388f, 0.001095f, -0.003504f, -0.004054f, -0.000311f, -0.002068f, 0.001107f, 0.000901f, 0.000387f, -0.000290f, 0.001919f, -0.001007f, 0.000098f, - -0.000267f, -0.000859f, -0.002604f, 0.002019f, 0.003427f, -0.000463f, -0.000429f, 0.001612f, -0.002415f, 0.002933f, 0.000757f, -0.001486f, -0.000055f, -0.001380f, -0.000581f, -0.000349f, -0.000987f, -0.000264f, -0.000667f, -0.002021f, 0.000527f, 0.000726f, 0.000683f, 0.000720f, 0.000232f, -0.023850f, 0.002367f, -0.002129f, 0.000875f, 0.002430f, 0.001744f, 0.004864f, -0.002001f, -0.000170f, 0.000391f, 0.005823f, 0.002021f, -0.004564f, -0.002983f, 0.002568f, 0.003443f, -0.000866f, -0.001304f, -0.000097f, 0.001587f, 0.003559f, 0.003615f, -0.000054f, -0.006480f, -0.001876f, -0.000672f, -0.000780f, 0.003754f, -0.001729f, 0.002190f, 0.000213f, -0.000416f, -0.003363f, 0.000261f, 0.002673f, -0.004304f, -0.002523f, -0.001017f, -0.000756f, -0.002045f, -0.001707f, -0.004025f, -0.000746f, -0.002732f, 0.000022f, 0.000582f, 0.002892f, -0.001983f, -0.001306f, 0.000241f, -0.000296f, 0.000443f, -0.002503f, 0.000971f, 0.000942f, 0.000303f, 0.000135f, -0.001898f, -0.001720f, -0.000964f, -0.000545f, -0.000159f, -0.003234f, 0.000646f, 0.000934f, -0.001404f, -0.002974f, 0.001175f, -0.000151f, -0.001499f, -0.000301f, - -0.000703f, -0.000503f, 0.001865f, -0.014008f, 0.014866f, -0.002124f, 0.000938f, 0.003502f, 0.004200f, -0.003165f, 0.002022f, 0.000799f, 0.002594f, 0.001757f, 0.003662f, 0.002069f, -0.002480f, -0.004122f, 0.000586f, 0.004361f, 0.008712f, -0.002107f, -0.002959f, 0.002280f, 0.001415f, -0.001667f, -0.004292f, -0.000876f, -0.000863f, -0.003886f, 0.003401f, 0.004048f, 0.000064f, 0.000939f, -0.000080f, 0.003182f, -0.002485f, -0.007704f, 0.003248f, -0.000928f, 0.002577f, 0.001231f, 0.000109f, -0.001911f, -0.002960f, 0.002047f, 0.002427f, 0.001768f, -0.000344f, -0.000162f, 0.002669f, 0.001494f, 0.000823f, -0.001594f, 0.002247f, 0.001872f, -0.000311f, -0.000587f, -0.001302f, 0.001535f, 0.000050f, -0.003804f, 0.003128f, 0.001867f, -0.000708f, 0.000893f, -0.000473f, 0.000098f, -0.000072f, 0.000924f, 0.000246f, 0.001137f, 0.001845f, 0.000982f, -0.000281f, -0.001121f, -0.000737f, 0.002657f, 0.001058f, -0.000503f, -0.000815f, -0.000134f, 0.004188f, 0.000172f, -0.003224f, -0.006604f, 0.001598f, -0.000344f, -0.005449f, 0.001842f, -0.001805f, 0.000255f, -0.002063f, -0.001608f, 0.001718f, 0.004149f, - 0.000512f, 0.005496f, 0.002494f, -0.002766f, -0.003635f, 0.006014f, -0.002607f, -0.000192f, 0.000538f, -0.005644f, -0.000042f, 0.002987f, -0.003275f, -0.000868f, 0.003780f, 0.000240f, 0.001975f, 0.000059f, 0.002489f, -0.000420f, -0.001689f, -0.000226f, 0.003305f, 0.004463f, -0.001463f, 0.000907f, 0.000776f, 0.002977f, -0.001772f, -0.000311f, 0.000580f, -0.000752f, 0.001931f, 0.000874f, 0.000160f, -0.001013f, 0.001545f, 0.001718f, 0.000089f, 0.000085f, 0.001285f, 0.002009f, -0.002412f, -0.000008f, 0.000673f, 0.001103f, -0.001235f, 0.001000f, 0.000495f, 0.000036f, 0.000700f, -0.000762f, 0.000336f, 0.000799f, 0.001666f, 0.002014f, -0.001624f, 0.000184f, 0.031279f, -0.002987f, 0.000540f, 0.001968f, -0.002784f, -0.004826f, -0.002796f, -0.001185f, -0.005491f, -0.005900f, 0.000476f, -0.005223f, -0.002282f, -0.001493f, -0.001268f, 0.003244f, 0.003780f, 0.001210f, 0.007888f, 0.001449f, -0.003870f, 0.006796f, -0.000654f, 0.004819f, -0.001508f, -0.000482f, -0.004436f, 0.000192f, 0.003975f, -0.000113f, -0.001898f, -0.000743f, 0.000430f, -0.000968f, -0.000808f, 0.001547f, -0.003526f, 0.001463f, - 0.000561f, -0.001663f, -0.003343f, -0.002264f, 0.002627f, 0.002581f, 0.003082f, -0.005132f, 0.002923f, 0.000816f, -0.000093f, 0.000255f, 0.000542f, 0.000589f, 0.000700f, -0.000419f, 0.000307f, 0.002744f, -0.000736f, 0.001091f, 0.001310f, -0.001116f, 0.002294f, 0.002608f, 0.000466f, -0.000212f, 0.002425f, 0.001724f, 0.001354f, 0.001629f, -0.001976f, -0.000913f, 0.000499f, -0.000205f, -0.000263f, 0.000150f, 0.001105f, 0.000304f, -0.001914f, -0.018376f, -0.030813f, 0.011131f, -0.000800f, 0.004619f, -0.005408f, 0.000235f, -0.006262f, -0.000830f, -0.009021f, 0.003870f, 0.004134f, -0.000222f, -0.000720f, -0.000134f, 0.000819f, -0.002176f, -0.007694f, 0.014109f, 0.000961f, -0.001834f, 0.004826f, 0.000838f, -0.002574f, 0.006761f, 0.007520f, -0.003264f, 0.004428f, 0.000839f, -0.000981f, -0.007096f, -0.003892f, 0.005499f, -0.002863f, 0.000753f, -0.000402f, 0.003729f, -0.005787f, -0.006512f, 0.000897f, 0.000066f, -0.004404f, 0.002616f, 0.000517f, -0.002766f, 0.001914f, -0.003044f, -0.002533f, 0.001164f, 0.001128f, 0.000127f, -0.000830f, -0.001454f, 0.001774f, 0.002987f, 0.000418f, 0.000915f, - -0.000891f, -0.000904f, 0.002616f, 0.000279f, 0.000568f, -0.002728f, -0.000644f, -0.001835f, 0.001460f, 0.002167f, -0.000004f, 0.001776f, -0.000050f, 0.002379f, -0.001981f, 0.001173f, -0.000052f, -0.000159f, -0.001873f, -0.000064f, -0.001609f, -0.000255f, -0.009906f, 0.029760f, -0.013222f, 0.002227f, 0.001946f, 0.007463f, -0.000949f, 0.004766f, -0.004710f, 0.000292f, -0.009030f, -0.001726f, 0.000043f, 0.003640f, 0.000602f, 0.003749f, -0.002590f, -0.005480f, 0.000707f, -0.008244f, -0.008693f, 0.000257f, -0.002858f, -0.000154f, 0.000741f, 0.001252f, -0.002157f, -0.001434f, -0.003105f, -0.004697f, 0.001892f, 0.002289f, -0.006129f, -0.002764f, -0.007703f, 0.000132f, -0.003404f, 0.002779f, 0.003237f, -0.006334f, 0.000999f, 0.005250f, 0.004713f, -0.002431f, 0.001716f, -0.001792f, -0.000898f, 0.001491f, -0.002874f, -0.000601f, 0.002673f, 0.002105f, 0.001831f, 0.002264f, 0.001199f, -0.000649f, 0.001764f, 0.001183f, -0.001324f, -0.000049f, 0.003600f, -0.000358f, -0.001661f, -0.000507f, 0.001483f, -0.001523f, -0.003688f, -0.000246f, -0.001290f, 0.000963f, 0.000781f, -0.000516f, -0.001496f, -0.002199f, - -0.002601f, 0.002654f, -0.000885f, -0.000082f, -0.000586f, -0.000165f, -0.000328f, -0.024587f, -0.007617f, 0.002768f, -0.003888f, 0.003509f, -0.001623f, 0.000034f, -0.007248f, -0.008707f, -0.001184f, -0.003048f, 0.003644f, 0.001039f, -0.001061f, -0.017996f, 0.009032f, 0.000642f, 0.007871f, 0.009792f, 0.006772f, -0.009408f, -0.002299f, -0.000910f, -0.002351f, 0.002031f, 0.002231f, -0.000161f, -0.003430f, 0.003807f, -0.006366f, -0.003401f, 0.005647f, 0.000292f, -0.002435f, 0.006612f, 0.000146f, 0.006936f, -0.002399f, -0.001108f, 0.000823f, 0.002174f, -0.004967f, -0.003665f, -0.000875f, 0.003908f, -0.001424f, 0.000636f, -0.001565f, 0.002613f, 0.003274f, 0.000638f, 0.000174f, -0.005758f, -0.000601f, 0.002822f, 0.003160f, -0.001801f, 0.003540f, 0.001169f, -0.000980f, 0.000927f, -0.003597f, -0.001122f, -0.002407f, 0.002376f, 0.000372f, -0.000838f, 0.000856f, -0.006141f, 0.000039f, 0.001175f, 0.002942f, 0.000974f, -0.001611f, 0.002850f, 0.000270f, -0.003868f, -0.001762f, -0.001981f, -0.000546f, 0.000822f, 0.015736f, 0.005306f, -0.009468f, -0.001618f, -0.004080f, 0.003295f, -0.005717f, 0.004777f, - -0.001067f, 0.005556f, 0.003858f, 0.006746f, -0.009074f, 0.010907f, -0.006694f, 0.006387f, -0.003664f, 0.003835f, 0.000716f, 0.003259f, -0.005806f, -0.013289f, 0.005161f, 0.009283f, -0.003365f, 0.003823f, -0.004715f, 0.001135f, -0.003097f, 0.009762f, -0.000095f, -0.000936f, 0.002323f, -0.004702f, -0.003293f, -0.002745f, 0.004271f, 0.000072f, -0.001575f, 0.000034f, -0.000843f, 0.006717f, 0.004484f, -0.002472f, 0.002168f, 0.002574f, -0.002777f, -0.001581f, -0.002501f, -0.005038f, -0.000698f, 0.000133f, -0.000686f, -0.001835f, -0.005140f, -0.000184f, 0.007852f, 0.004287f, -0.003279f, 0.004409f, -0.000468f, -0.000049f, 0.003681f, 0.001949f, -0.003743f, 0.001440f, 0.000837f, 0.003893f, 0.004637f, -0.003656f, 0.001674f, 0.002730f, 0.003541f, -0.000289f, -0.000101f, -0.001248f, -0.000645f, 0.002012f, -0.000322f, 0.003638f, -0.000810f, 0.033311f, -0.027211f, -0.004587f, 0.001331f, -0.000553f, -0.007542f, 0.002492f, 0.001938f, 0.010617f, -0.003515f, 0.002063f, 0.008720f, 0.000207f, 0.005232f, 0.017265f, -0.003788f, -0.001157f, -0.009031f, -0.008449f, 0.000356f, 0.002830f, -0.003827f, 0.001610f, - 0.015219f, 0.008790f, 0.001237f, 0.000545f, 0.001212f, 0.008408f, -0.007070f, -0.003146f, -0.000420f, 0.004321f, -0.000704f, 0.001015f, -0.003600f, 0.001317f, -0.006372f, -0.003763f, -0.004824f, 0.000046f, -0.004323f, 0.000996f, -0.007679f, 0.003498f, -0.015316f, -0.003946f, 0.002071f, 0.002792f, -0.000598f, -0.003557f, 0.001158f, 0.000419f, 0.001808f, -0.004216f, 0.001837f, -0.002482f, -0.002790f, -0.006781f, -0.005053f, -0.001518f, -0.000865f, 0.000297f, 0.001122f, 0.002128f, 0.000389f, 0.000998f, -0.004049f, -0.000064f, -0.004937f, -0.000777f, -0.000361f, 0.000094f, 0.001614f, 0.004869f, -0.003091f, -0.001407f, -0.000345f, -0.002656f, -0.004556f, 0.000975f, -0.021140f, -0.014733f, -0.001146f, -0.003034f, 0.010991f, 0.000300f, 0.001984f, -0.013896f, 0.000657f, 0.001838f, 0.000735f, 0.001003f, 0.008288f, -0.010465f, 0.002143f, -0.002284f, -0.007228f, -0.003541f, 0.006557f, -0.002379f, 0.005328f, -0.001904f, 0.003062f, 0.001627f, -0.001175f, -0.000884f, 0.003474f, -0.000541f, -0.000113f, -0.008969f, 0.004344f, 0.003926f, 0.003707f, 0.004278f, -0.008060f, -0.008307f, 0.004734f, 0.007086f, - -0.008662f, 0.003102f, 0.001166f, 0.007364f, 0.004206f, 0.000649f, 0.004925f, -0.002694f, -0.005258f, -0.000847f, -0.010073f, -0.007369f, -0.000891f, -0.000435f, 0.001510f, -0.004835f, 0.001583f, -0.003891f, -0.012890f, -0.003822f, -0.003537f, -0.012705f, -0.000063f, -0.002130f, -0.001562f, 0.001379f, 0.003849f, -0.003785f, 0.002340f, 0.001541f, -0.005796f, -0.003713f, -0.004476f, -0.001003f, -0.001389f, -0.000184f, -0.001901f, 0.002357f, -0.002867f, -0.000773f, -0.002450f, 0.004087f, -0.004687f, 0.002675f, -0.000818f, -0.001083f, 0.000159f, 0.001106f, -0.001173f, -0.013165f, 0.020018f, -0.010526f, -0.004497f, -0.006161f, 0.001575f, 0.001712f, 0.002943f, -0.001281f, 0.008734f, 0.006581f, -0.006288f, -0.011157f, 0.004165f, -0.004194f, 0.010246f, 0.000833f, 0.004371f, 0.005375f, -0.003888f, -0.003775f, 0.013617f, -0.007816f, -0.001891f, -0.003972f, 0.000472f, -0.001642f, 0.001802f, -0.002314f, -0.000913f, -0.010517f, 0.009267f, -0.003244f, -0.000832f, 0.010967f, -0.007523f, -0.009481f, 0.000852f, -0.004302f, -0.006242f, -0.000041f, -0.003203f, 0.002485f, -0.013681f, -0.004543f, -0.003364f, -0.000323f, - 0.004808f, 0.000068f, 0.000951f, 0.002500f, -0.002356f, 0.001913f, 0.003208f, 0.002791f, 0.003043f, -0.001738f, -0.002911f, -0.002520f, 0.003460f, -0.008260f, -0.001823f, -0.001934f, -0.002060f, 0.005431f, -0.003682f, -0.005771f, 0.005850f, 0.001809f, 0.003514f, 0.006979f, -0.002570f, -0.002299f, 0.003417f, -0.003736f, -0.004780f, -0.004360f, 0.002587f, 0.002024f, -0.002609f, 0.002428f, 0.000776f, 0.002860f, 0.000483f, -0.005198f, 0.003474f, -0.001706f, -0.027533f, 0.013750f, 0.014815f, 0.007582f, 0.006884f, -0.004940f, 0.006997f, -0.011906f, 0.000373f, -0.013986f, -0.001855f, -0.006117f, 0.006467f, -0.006699f, -0.005566f, -0.001540f, -0.010266f, 0.002987f, -0.004706f, 0.004501f, -0.009639f, 0.016011f, -0.005297f, 0.007551f, -0.006612f, 0.000620f, -0.006625f, -0.002137f, 0.003602f, 0.010241f, 0.011486f, -0.005798f, 0.000012f, -0.003437f, -0.006115f, -0.004674f, -0.016479f, -0.000428f, 0.002722f, -0.015506f, 0.005999f, 0.003015f, 0.004203f, 0.007367f, 0.004632f, 0.002445f, -0.005233f, -0.001739f, -0.005833f, -0.002983f, 0.003064f, -0.012413f, 0.004842f, 0.002379f, 0.000754f, -0.005890f, - -0.003487f, 0.003133f, 0.009935f, 0.004150f, 0.002540f, -0.003980f, 0.004120f, 0.000530f, -0.004774f, 0.001226f, -0.003465f, -0.005450f, -0.002855f, -0.001328f, -0.004933f, 0.005513f, 0.003113f, 0.004475f, 0.002474f, -0.004130f, 0.001299f, 0.006899f, -0.001419f, 0.006403f, 0.003385f, 0.002329f, 0.004311f, -0.002337f, -0.002656f, 0.001619f, 0.001087f, 0.022785f, -0.015698f, -0.006594f, -0.002015f, -0.000096f, 0.011082f, -0.002127f, 0.003613f, -0.006426f, 0.003415f, -0.004005f, -0.018046f, -0.012417f, -0.004643f, 0.006430f, -0.000800f, -0.009988f, -0.009364f, -0.019685f, -0.006372f, 0.002482f, 0.002628f, 0.000874f, -0.002055f, -0.001194f, -0.006126f, 0.001560f, 0.002526f, 0.003302f, 0.000732f, -0.000936f, -0.002389f, -0.009412f, -0.002426f, -0.002169f, 0.004681f, -0.001020f, -0.007518f, -0.002978f, 0.002129f, -0.008445f, 0.001404f, -0.008708f, 0.004788f, 0.006737f, -0.006479f, -0.012585f, -0.002467f, -0.003986f, -0.005787f, 0.000563f, 0.001092f, 0.001194f, 0.003037f, 0.000116f, -0.004972f, 0.007826f, 0.012172f, -0.005937f, 0.005020f, 0.002002f, 0.005742f, -0.008893f, 0.003289f, 0.001079f, - 0.003107f, -0.012773f, 0.010012f, 0.001175f, 0.001081f, -0.001594f, -0.007326f, 0.001845f, 0.000865f, 0.001738f, 0.002164f, -0.007979f, -0.004250f, 0.001518f, 0.003666f, -0.002053f, -0.000069f, 0.002902f, 0.001105f, -0.001477f, -0.003867f, 0.002706f, 0.037102f, -0.020680f, 0.001932f, -0.002051f, -0.004378f, -0.015425f, -0.000798f, -0.000828f, 0.012614f, 0.005777f, 0.025446f, -0.010079f, 0.001016f, 0.002803f, 0.006125f, -0.002577f, -0.001133f, 0.010322f, -0.006426f, 0.014845f, 0.009029f, -0.020589f, 0.019684f, 0.006942f, -0.007047f, -0.005104f, -0.007690f, -0.004018f, 0.001452f, 0.000915f, -0.005516f, 0.013063f, 0.001714f, -0.006245f, -0.005496f, 0.001282f, -0.006814f, -0.012106f, 0.000158f, 0.007236f, 0.002918f, 0.008797f, -0.004044f, 0.002739f, 0.009459f, 0.013551f, 0.003236f, -0.014021f, 0.004641f, -0.004514f, -0.007692f, 0.002041f, 0.005969f, 0.003407f, -0.001676f, -0.012730f, -0.011108f, 0.015695f, -0.002038f, 0.012128f, 0.001423f, -0.004784f, 0.005980f, -0.010527f, -0.004628f, 0.005067f, -0.001329f, 0.010428f, -0.008360f, -0.016628f, -0.004639f, -0.000824f, -0.005078f, -0.003995f, - 0.010365f, -0.003471f, 0.001927f, -0.009502f, -0.009245f, 0.004523f, 0.002405f, 0.003808f, -0.004015f, 0.003887f, 0.000421f, -0.002230f, -0.000457f, -0.041951f, -0.027308f, 0.009837f, -0.014256f, 0.004368f, -0.007193f, -0.025440f, -0.018860f, 0.033635f, -0.015684f, 0.015111f, 0.008476f, -0.008964f, 0.007728f, -0.005150f, 0.010494f, 0.011643f, -0.000902f, -0.003492f, 0.020100f, -0.006725f, -0.023014f, 0.000228f, -0.009722f, 0.002188f, 0.002022f, 0.013549f, 0.007117f, 0.002702f, 0.006562f, -0.006311f, -0.000143f, 0.014849f, 0.009444f, -0.002853f, 0.003718f, -0.013394f, -0.020622f, -0.015243f, -0.010701f, -0.003111f, -0.003061f, 0.003641f, -0.002059f, -0.005856f, 0.012976f, 0.003302f, -0.010015f, -0.009381f, -0.002810f, 0.003663f, -0.010090f, 0.003819f, 0.012095f, -0.000400f, 0.004436f, -0.008566f, 0.006378f, 0.004599f, 0.001355f, 0.004694f, -0.007556f, -0.011599f, -0.016266f, 0.007937f, 0.006192f, 0.000400f, 0.006144f, 0.001037f, -0.007549f, -0.001714f, 0.000408f, -0.013044f, -0.001329f, -0.020177f, -0.011163f, 0.003187f, -0.005272f, 0.003682f, 0.000315f, -0.002807f, -0.002892f, -0.002042f, - -0.003889f, 0.003391f, -0.000060f, -0.000752f, -0.049993f, 0.017027f, -0.003981f, -0.003287f, 0.008928f, 0.002184f, 0.004978f, 0.021769f, 0.012997f, 0.016437f, 0.008272f, 0.022449f, -0.003948f, -0.021891f, 0.003224f, -0.002474f, -0.009376f, -0.019397f, -0.008456f, 0.016928f, 0.003843f, -0.001191f, 0.003536f, -0.001311f, 0.000240f, 0.014259f, 0.001815f, 0.005276f, -0.002159f, 0.003510f, 0.014229f, -0.003960f, -0.009567f, 0.007203f, -0.016991f, -0.017103f, -0.010975f, -0.002190f, 0.000475f, 0.007044f, 0.016676f, 0.000225f, -0.005750f, -0.016653f, -0.027228f, -0.009618f, -0.003969f, -0.001663f, -0.000177f, 0.010016f, -0.012474f, 0.022441f, 0.011687f, -0.002174f, 0.006476f, -0.008891f, 0.001619f, 0.000146f, 0.010406f, 0.020045f, 0.013557f, -0.011860f, -0.004958f, 0.003321f, -0.001897f, -0.002557f, 0.001045f, -0.006143f, -0.019450f, -0.001511f, -0.003579f, -0.001433f, 0.003062f, -0.007616f, -0.002546f, -0.013317f, -0.001398f, 0.001828f, 0.013923f, 0.006789f, 0.001967f, 0.002209f, 0.003530f, 0.000402f, -0.011755f, 0.002392f, -0.002724f, 0.003109f, -0.001416f, -0.001584f, -0.006424f, 0.000969f, - -0.006770f, 0.020477f, 0.020727f, 0.007141f, 0.013919f, 0.010085f, 0.021742f, -0.018828f, 0.022598f, -0.027237f, -0.004655f, 0.025778f, 0.035288f, 0.007495f, -0.002072f, 0.012956f, -0.010637f, -0.012421f, 0.025574f, 0.004269f, -0.003753f, 0.006360f, 0.020593f, -0.005199f, 0.012695f, -0.003932f, -0.004953f, -0.002278f, 0.009388f, -0.023489f, -0.002719f, 0.011670f, -0.005081f, 0.001382f, -0.008203f, 0.005083f, 0.018910f, -0.017112f, 0.005757f, -0.004947f, 0.006301f, -0.008865f, 0.012765f, 0.001248f, 0.004728f, 0.005281f, -0.020775f, 0.010417f, -0.028994f, -0.005762f, 0.016722f, 0.001960f, -0.010235f, 0.018451f, -0.006119f, -0.010846f, 0.013448f, -0.005279f, -0.003597f, -0.001919f, 0.008202f, -0.001030f, 0.002310f, -0.015759f, 0.005988f, 0.001647f, 0.031360f, -0.023262f, -0.010009f, 0.002951f, -0.005828f, 0.007196f, 0.008990f, -0.011107f, 0.021997f, 0.008316f, 0.000107f, 0.003738f, 0.007508f, -0.003378f, -0.011610f, 0.004821f, -0.005887f, 0.002103f, -0.002194f, 0.005834f, -0.007281f, 0.002433f, 0.000289f, -0.003829f, 0.005228f, -0.001607f, -0.001113f, -0.000408f, 0.041784f, -0.026060f, - 0.001049f, -0.004139f, -0.006928f, 0.000898f, -0.009498f, -0.003991f, -0.030840f, -0.025804f, -0.025701f, 0.008661f, -0.005329f, 0.008560f, -0.005840f, -0.018674f, 0.029896f, 0.020845f, -0.013829f, -0.011609f, -0.016334f, -0.003387f, 0.006430f, 0.009888f, 0.012120f, -0.000816f, 0.009388f, -0.002653f, -0.011772f, -0.014376f, 0.009044f, -0.006528f, 0.027294f, 0.017113f, 0.025177f, 0.003573f, 0.009176f, 0.024794f, 0.017196f, -0.005401f, 0.004555f, -0.001070f, 0.000342f, 0.002656f, -0.011509f, -0.008276f, 0.004479f, -0.014401f, -0.014839f, 0.014429f, 0.016405f, -0.017922f, -0.000560f, 0.031929f, 0.022247f, -0.001109f, -0.010517f, -0.002290f, 0.006637f, 0.006027f, -0.004287f, -0.011848f, 0.014283f, -0.000925f, 0.003520f, 0.010242f, 0.012989f, -0.013538f, 0.005854f, -0.002194f, 0.005416f, -0.021063f, 0.003927f, 0.019076f, -0.018935f, -0.015546f, -0.008053f, 0.008489f, 0.015054f, -0.008458f, 0.008294f, -0.007287f, -0.000720f, 0.000467f, 0.003157f, 0.005660f, -0.002601f, -0.001131f, 0.003443f, 0.003191f, 0.000063f, -0.000397f, 0.002494f, 0.033849f, 0.013052f, -0.004486f, -0.001058f, 0.010637f, - -0.012626f, -0.016436f, 0.014157f, -0.019643f, -0.025434f, 0.006797f, -0.013629f, -0.017590f, -0.009151f, 0.016858f, 0.041329f, 0.017115f, -0.022425f, 0.042314f, 0.004955f, -0.006601f, 0.007669f, -0.024667f, 0.006330f, 0.003436f, -0.017650f, 0.015334f, -0.004708f, 0.003044f, -0.012691f, 0.007180f, -0.011593f, 0.021420f, -0.025290f, -0.009316f, -0.008699f, 0.012091f, 0.013992f, 0.012433f, -0.013411f, 0.003953f, -0.014022f, -0.004030f, 0.007567f, 0.017899f, 0.008320f, -0.008208f, 0.017487f, 0.008896f, 0.014120f, 0.000950f, 0.016450f, -0.007160f, 0.009126f, -0.024939f, 0.028093f, -0.002430f, 0.003971f, -0.007429f, -0.014542f, 0.000749f, 0.009432f, 0.022387f, 0.006655f, -0.026778f, 0.011492f, -0.010836f, 0.022132f, 0.001904f, -0.008347f, 0.004271f, -0.007207f, 0.004594f, -0.015516f, 0.006229f, 0.001564f, 0.001356f, 0.002575f, -0.003057f, 0.001688f, -0.004206f, -0.006455f, 0.008728f, 0.005557f, 0.005028f, -0.011479f, 0.003804f, -0.006188f, 0.005390f, 0.001298f, -0.000725f, 0.002789f, 0.001285f, -0.069152f, 0.003157f, 0.011692f, 0.027320f, 0.009043f, -0.042494f, 0.056852f, 0.020922f, - -0.025891f, 0.009468f, 0.056545f, 0.012807f, -0.013615f, -0.001584f, -0.034111f, 0.017702f, 0.001722f, -0.008615f, 0.005021f, 0.011845f, -0.022089f, 0.011995f, -0.027703f, 0.003075f, -0.025242f, -0.022635f, -0.009603f, 0.010852f, 0.016386f, -0.012307f, 0.014342f, -0.024555f, -0.003458f, 0.027897f, 0.002658f, -0.009855f, -0.003167f, 0.005578f, -0.006335f, -0.018163f, -0.020354f, -0.002546f, -0.009294f, 0.020208f, -0.028045f, 0.029976f, 0.009586f, 0.003994f, -0.009890f, -0.003092f, 0.013880f, -0.010982f, 0.018693f, 0.004807f, 0.016905f, -0.006009f, -0.009671f, -0.029258f, 0.010154f, -0.002770f, -0.030279f, 0.009320f, -0.001972f, 0.018695f, 0.029842f, -0.012360f, 0.006838f, 0.014897f, 0.015727f, 0.003430f, -0.009014f, -0.001550f, -0.036693f, -0.001568f, 0.003419f, 0.009312f, -0.000131f, 0.024944f, 0.005407f, 0.012527f, -0.013833f, -0.009692f, 0.018540f, -0.001644f, -0.003712f, 0.011450f, -0.002554f, -0.002881f, -0.000166f, -0.000351f, 0.001246f, -0.001732f, 0.010350f, 0.085614f, 0.038881f, 0.007884f, 0.013690f, -0.017862f, -0.012073f, -0.004425f, 0.032193f, -0.023260f, 0.003425f, -0.019398f, - -0.053057f, -0.025582f, 0.011853f, -0.013753f, 0.008463f, -0.021184f, -0.001315f, -0.022759f, 0.019046f, -0.023040f, -0.016638f, -0.049258f, -0.009392f, -0.007965f, -0.013128f, 0.025251f, -0.008546f, -0.020713f, 0.006403f, 0.019418f, 0.007055f, 0.006411f, -0.003187f, -0.004411f, -0.013198f, 0.009764f, -0.016918f, -0.004779f, -0.010606f, -0.029490f, 0.004205f, -0.020551f, 0.007942f, 0.002329f, -0.006192f, -0.000945f, -0.021526f, -0.001501f, -0.005085f, 0.030844f, -0.009202f, -0.001031f, 0.012427f, -0.017370f, -0.007816f, 0.031300f, -0.018677f, 0.011779f, 0.000595f, 0.027801f, 0.039702f, -0.002657f, 0.004933f, 0.003675f, 0.013590f, 0.006909f, -0.030690f, 0.002478f, 0.007480f, 0.010432f, -0.013261f, -0.020610f, 0.001911f, 0.005569f, -0.005523f, -0.008041f, -0.032896f, -0.016457f, -0.019011f, 0.000984f, 0.003915f, -0.006498f, -0.009193f, -0.010543f, -0.002714f, -0.005463f, -0.005926f, 0.006465f, -0.003413f, 0.002952f, -0.011961f, 0.000492f, -0.004743f, -0.008498f, 0.001712f, 0.004435f}, - {-0.000064f, -0.000019f, -0.000070f, 0.000004f, -0.000045f, 0.000103f, 0.000068f, -0.000324f, 0.000004f, -0.000211f, -0.000252f, 0.000067f, 0.000210f, 0.000205f, 0.000074f, -0.000463f, -0.000284f, 0.000093f, -0.000145f, 0.000025f, 0.000093f, 0.000121f, 0.000192f, -0.000140f, -0.000156f, -0.000287f, -0.000168f, -0.000000f, -0.000653f, -0.000012f, -0.000065f, -0.000187f, 0.000133f, -0.000371f, -0.000325f, -0.000655f, -0.000092f, -0.000575f, -0.000178f, -0.000012f, 0.000456f, 0.000128f, 0.000346f, -0.000175f, 0.000365f, -0.000094f, 0.000072f, 0.000319f, 0.001951f, -0.001521f, 0.000953f, -0.001201f, 0.000619f, -0.000584f, -0.000576f, -0.000345f, -0.000326f, 0.000356f, 0.000407f, -0.001488f, -0.000078f, 0.000224f, -0.000146f, -0.000246f, -0.000870f, -0.000314f, 0.000626f, 0.000948f, 0.000476f, 0.001492f, 0.000305f, -0.000260f, 0.000308f, 0.000262f, -0.000149f, 0.000491f, 0.001061f, -0.000401f, -0.000008f, 0.000456f, -0.000011f, -0.000097f, -0.000754f, -0.000024f, 0.000387f, 0.000313f, 0.000065f, 0.000027f, -0.000249f, 0.000273f, -0.000025f, 0.000039f, 0.000018f, -0.000253f, 0.007069f, -0.000456f, - 0.000620f, -0.000443f, 0.000460f, -0.000532f, 0.000117f, -0.000127f, -0.000121f, 0.000410f, -0.000369f, -0.001278f, 0.000374f, 0.000137f, 0.000401f, 0.000872f, 0.000468f, 0.000316f, -0.000112f, -0.000739f, -0.000251f, 0.000346f, -0.000097f, -0.000116f, 0.000729f, -0.000915f, -0.000288f, -0.000011f, -0.000153f, -0.000223f, 0.000353f, 0.000387f, 0.000477f, 0.000138f, 0.000173f, -0.000189f, 0.000660f, -0.000025f, 0.000508f, 0.000359f, -0.000113f, -0.000061f, 0.000243f, 0.000010f, -0.000137f, -0.000063f, 0.000012f, 0.005193f, -0.004960f, 0.000779f, -0.001340f, 0.000719f, -0.000090f, 0.000519f, -0.000475f, 0.000934f, -0.000396f, 0.000566f, -0.001184f, 0.000047f, -0.000687f, 0.000197f, -0.000108f, -0.000162f, -0.000318f, -0.000872f, -0.000088f, 0.000103f, -0.000429f, 0.000714f, -0.000322f, -0.000519f, -0.000655f, 0.000392f, -0.000419f, 0.001015f, -0.000106f, 0.000003f, 0.000300f, 0.000004f, 0.000023f, -0.000453f, -0.000380f, -0.000106f, 0.000104f, -0.000174f, -0.000436f, 0.000387f, 0.000279f, 0.000697f, -0.000161f, 0.000229f, -0.000096f, 0.000129f, -0.012182f, 0.001429f, -0.000914f, 0.000026f, - -0.000142f, -0.001022f, 0.001104f, -0.000273f, 0.000098f, 0.000467f, 0.000141f, 0.001280f, -0.000064f, -0.000523f, 0.001535f, 0.000620f, 0.001385f, -0.000029f, -0.001838f, -0.001100f, -0.000887f, 0.000758f, -0.000959f, 0.000080f, -0.000350f, -0.000325f, 0.000110f, 0.000285f, -0.000280f, -0.000577f, -0.000430f, 0.000371f, 0.000418f, 0.000801f, -0.000066f, -0.000112f, -0.000052f, 0.000496f, -0.000558f, 0.000144f, 0.000218f, 0.000367f, -0.000455f, 0.000474f, -0.000552f, -0.000098f, 0.000182f, -0.015385f, 0.005576f, -0.002247f, 0.002579f, -0.001791f, 0.001184f, -0.001941f, 0.001104f, -0.001441f, 0.000558f, 0.001073f, 0.000055f, 0.000412f, 0.000984f, -0.000632f, 0.000708f, -0.000811f, -0.000597f, -0.001790f, 0.001634f, -0.001051f, 0.001096f, 0.000083f, -0.000003f, -0.001717f, -0.000059f, 0.000333f, -0.000241f, -0.000055f, -0.000060f, 0.000719f, -0.000103f, -0.000502f, 0.000546f, 0.000167f, -0.000215f, 0.000038f, 0.000028f, 0.000064f, 0.000317f, -0.000462f, 0.001198f, -0.000094f, -0.000744f, -0.000075f, -0.000403f, -0.000040f, 0.000774f, 0.007013f, -0.001488f, 0.002671f, -0.001202f, 0.000927f, - -0.000972f, 0.003324f, -0.000621f, 0.001780f, -0.000186f, -0.000115f, 0.000464f, 0.000013f, -0.002257f, 0.000531f, -0.000188f, -0.001011f, -0.000231f, 0.000053f, -0.002843f, -0.000065f, 0.000254f, 0.000919f, -0.000004f, -0.000530f, -0.000092f, 0.000994f, 0.000199f, -0.000472f, -0.000943f, 0.001486f, -0.000894f, -0.000022f, -0.001341f, -0.000137f, 0.000024f, 0.000250f, -0.000310f, 0.000374f, 0.000609f, -0.000564f, 0.000488f, -0.000009f, 0.000394f, -0.000008f, 0.000696f, -0.000328f, -0.000183f, 0.000620f, 0.018465f, -0.005382f, 0.000805f, -0.000911f, 0.001216f, 0.000015f, -0.000012f, -0.002481f, 0.001115f, -0.001083f, 0.000763f, 0.000268f, 0.000393f, 0.000803f, 0.001251f, 0.000195f, 0.000438f, -0.002087f, 0.000771f, 0.000775f, -0.001341f, -0.000259f, 0.001419f, 0.000918f, 0.000908f, 0.002010f, 0.001129f, 0.000295f, 0.000538f, -0.000750f, 0.000643f, -0.000178f, 0.001161f, 0.001503f, -0.000206f, 0.000508f, 0.000950f, -0.000396f, 0.000332f, -0.001306f, -0.000346f, 0.001308f, 0.000028f, -0.000917f, -0.000308f, 0.000395f, 0.000975f, -0.000068f, 0.000555f, -0.000007f, 0.001309f, -0.009877f, - 0.004152f, -0.002883f, 0.001876f, -0.001716f, 0.002215f, -0.001449f, 0.000088f, -0.001234f, -0.001519f, -0.002122f, 0.000142f, -0.001262f, 0.000604f, 0.000703f, 0.001592f, -0.002618f, 0.001605f, -0.000630f, 0.002231f, 0.000486f, -0.000139f, 0.000171f, 0.000165f, -0.000534f, -0.000455f, 0.000334f, -0.001073f, 0.000695f, 0.001258f, -0.001725f, -0.000387f, -0.000109f, 0.000683f, -0.000662f, 0.001802f, -0.001894f, 0.000357f, -0.000009f, 0.000105f, -0.000818f, 0.000119f, -0.000516f, 0.000469f, 0.000067f, 0.000082f, -0.000584f, -0.000111f, -0.001204f, -0.000416f, -0.000075f, 0.000253f, 0.000086f, -0.000449f, -0.001522f, -0.015921f, 0.005041f, -0.003263f, -0.000222f, -0.000668f, 0.000991f, -0.002752f, 0.000189f, 0.000868f, 0.000717f, -0.000965f, 0.000539f, -0.001231f, -0.002019f, -0.000791f, 0.000247f, -0.001210f, 0.004215f, 0.000110f, -0.001178f, -0.000390f, -0.001418f, -0.000667f, 0.001283f, 0.000766f, 0.001666f, -0.000158f, 0.000739f, -0.000950f, 0.000381f, -0.000860f, -0.000298f, -0.000506f, 0.000274f, 0.000516f, -0.000275f, -0.000816f, 0.000193f, 0.000299f, 0.001151f, -0.000208f, -0.000433f, - -0.001514f, -0.001240f, -0.000593f, -0.000246f, 0.000278f, 0.000197f, -0.000623f, -0.000263f, 0.000107f, 0.000546f, 0.000282f, 0.000089f, -0.000276f, 0.000555f, -0.015328f, 0.007183f, -0.003396f, 0.003202f, -0.001680f, 0.001894f, 0.000935f, 0.000574f, -0.001750f, 0.000206f, -0.000895f, 0.000254f, -0.002289f, 0.000851f, 0.001422f, 0.000456f, -0.002436f, -0.001211f, -0.001229f, -0.001279f, -0.000841f, 0.001734f, 0.000411f, 0.001219f, 0.000976f, -0.000437f, -0.000106f, -0.001842f, 0.002361f, -0.000681f, -0.000246f, 0.000145f, -0.000514f, -0.000734f, -0.000865f, -0.000202f, -0.001936f, 0.000566f, -0.001030f, 0.000765f, 0.000667f, 0.001101f, -0.000306f, 0.000116f, -0.001259f, 0.000468f, 0.000918f, 0.000215f, -0.000211f, 0.000181f, 0.000717f, 0.001074f, 0.000464f, 0.000998f, 0.000041f, 0.000150f, 0.004975f, 0.006155f, -0.002780f, 0.001649f, -0.000855f, 0.000619f, -0.000661f, 0.000355f, 0.000543f, 0.003014f, -0.001066f, 0.001243f, 0.002833f, -0.000771f, -0.000114f, -0.000477f, 0.000689f, 0.001463f, 0.001501f, 0.001950f, 0.000528f, 0.001660f, -0.000422f, -0.000980f, -0.003318f, 0.000700f, - -0.000502f, -0.001666f, -0.001187f, -0.000056f, -0.000313f, 0.001072f, -0.000152f, -0.001926f, -0.001987f, 0.000536f, -0.001726f, 0.000233f, 0.001053f, -0.001552f, -0.001038f, -0.000659f, 0.000774f, 0.000701f, -0.000049f, -0.000204f, 0.001164f, 0.000249f, -0.000447f, 0.000468f, -0.001001f, 0.000128f, -0.000527f, -0.000754f, -0.000508f, 0.000792f, -0.000402f, 0.000598f, -0.000445f, -0.000968f, 0.000266f, 0.000538f, -0.000339f, 0.017709f, -0.006163f, 0.003344f, -0.002310f, 0.003324f, -0.002342f, 0.002039f, -0.000757f, 0.002071f, 0.000504f, 0.001458f, -0.001693f, 0.001739f, -0.000593f, -0.001443f, -0.000148f, -0.001550f, -0.002474f, -0.001306f, -0.000268f, 0.001257f, -0.001694f, -0.002267f, -0.002777f, -0.000498f, -0.000242f, 0.002224f, 0.001219f, 0.001429f, -0.000975f, 0.001156f, -0.000881f, -0.000866f, -0.000476f, 0.001467f, 0.001267f, 0.000396f, -0.000008f, -0.000052f, 0.000042f, -0.000410f, -0.000230f, 0.001016f, 0.000199f, 0.002498f, -0.000956f, -0.000300f, -0.002080f, 0.001364f, -0.000542f, -0.000323f, -0.000489f, -0.000129f, 0.000123f, -0.000346f, 0.000381f, -0.000557f, 0.000009f, -0.000790f, - -0.000347f, 0.000177f, 0.000816f, -0.000423f, 0.004975f, -0.007600f, 0.004456f, -0.002843f, 0.003461f, -0.000039f, 0.002149f, 0.000607f, -0.003332f, -0.001580f, -0.001123f, 0.000408f, 0.000835f, 0.000467f, 0.003762f, -0.002115f, 0.003006f, 0.000524f, 0.000382f, -0.002056f, -0.000446f, 0.002599f, -0.000171f, -0.002206f, 0.002512f, 0.001919f, 0.000425f, -0.001034f, -0.000817f, -0.000219f, -0.000175f, 0.001165f, -0.000571f, 0.000520f, -0.001407f, -0.000311f, 0.000811f, -0.002028f, 0.000776f, -0.000786f, 0.000726f, -0.000587f, -0.000180f, 0.002394f, 0.001033f, 0.001365f, -0.000106f, 0.000565f, 0.000877f, -0.000179f, -0.000660f, -0.001055f, 0.000361f, 0.000484f, 0.000850f, 0.001030f, 0.000241f, -0.000230f, -0.001059f, -0.000479f, -0.001071f, -0.000954f, 0.000123f, -0.018898f, -0.003853f, -0.000551f, -0.003191f, -0.001350f, 0.002777f, 0.001160f, -0.000866f, -0.000776f, -0.002307f, -0.001548f, -0.001880f, -0.002104f, -0.001752f, -0.001133f, -0.001589f, -0.002675f, -0.002293f, 0.000823f, -0.002327f, 0.000718f, -0.003116f, 0.000058f, -0.001313f, -0.001059f, 0.002638f, -0.000317f, -0.001342f, 0.001688f, - -0.001981f, 0.001787f, 0.000510f, 0.001888f, 0.001277f, -0.000079f, -0.000962f, 0.001989f, -0.000065f, -0.000351f, 0.001812f, -0.000808f, -0.002550f, -0.002882f, -0.000766f, 0.000906f, 0.000568f, -0.000884f, -0.000119f, -0.000821f, 0.000146f, 0.000003f, 0.000112f, 0.001745f, 0.000665f, -0.001323f, -0.000519f, 0.000196f, 0.001095f, 0.000225f, 0.001652f, 0.000427f, -0.000175f, -0.000899f, -0.022179f, 0.019303f, -0.007865f, 0.005356f, -0.005040f, 0.001232f, -0.002476f, 0.003264f, 0.000618f, 0.000378f, -0.001580f, 0.002210f, 0.000450f, -0.003989f, 0.000405f, 0.000584f, -0.002004f, -0.003076f, 0.003037f, 0.003761f, -0.001215f, -0.001000f, 0.000630f, 0.001729f, -0.001017f, 0.003424f, -0.000107f, 0.000861f, -0.002490f, -0.000893f, -0.001483f, 0.002228f, -0.000496f, 0.000478f, 0.000485f, -0.001293f, 0.002169f, 0.002069f, 0.000570f, 0.000704f, 0.002543f, -0.001561f, -0.000409f, -0.000336f, -0.001844f, 0.000385f, -0.001202f, 0.000438f, -0.000055f, 0.000152f, 0.002079f, -0.000093f, -0.000469f, 0.000446f, 0.000112f, 0.001343f, -0.001258f, 0.000462f, -0.000079f, 0.002645f, -0.000790f, -0.000122f, - -0.001043f, 0.014829f, -0.001760f, -0.003067f, -0.000710f, 0.002015f, 0.001052f, 0.000924f, -0.000084f, -0.002033f, 0.000534f, 0.001276f, 0.001441f, -0.000915f, -0.000861f, 0.003012f, 0.001046f, -0.002309f, 0.000526f, 0.003890f, -0.004803f, 0.003252f, 0.000416f, 0.004152f, -0.000248f, 0.000263f, 0.000836f, 0.000861f, 0.002196f, -0.001573f, -0.000579f, 0.000842f, 0.001586f, -0.000586f, -0.000014f, 0.000231f, 0.000393f, 0.001011f, -0.001952f, -0.000014f, 0.001185f, 0.000360f, -0.001061f, -0.000306f, 0.002585f, 0.001914f, 0.000927f, -0.000944f, -0.000683f, 0.000768f, -0.000295f, -0.000594f, 0.000484f, -0.000752f, -0.001194f, 0.002661f, 0.001066f, 0.001723f, 0.000302f, 0.001309f, 0.001071f, 0.001169f, 0.000163f, 0.001408f, 0.000723f, 0.001012f, -0.000757f, 0.000221f, 0.000405f, -0.001130f, 0.000459f, -0.000526f, -0.000075f, 0.007039f, 0.002049f, 0.001702f, -0.001023f, -0.000684f, -0.001902f, -0.001360f, 0.000357f, -0.000744f, -0.000931f, -0.002733f, 0.002341f, 0.001618f, -0.001695f, 0.002918f, -0.002734f, -0.000828f, 0.001235f, -0.002032f, 0.001193f, 0.001895f, 0.002903f, 0.002553f, - 0.002445f, 0.001264f, -0.005129f, 0.000001f, -0.001065f, 0.001030f, -0.000481f, 0.002011f, 0.001378f, -0.000664f, -0.001235f, 0.001319f, -0.000903f, 0.003392f, 0.000016f, 0.001120f, 0.003457f, 0.003291f, -0.002469f, 0.000205f, -0.001621f, -0.002964f, -0.000301f, 0.000551f, -0.000358f, -0.000613f, -0.000296f, 0.000249f, -0.001366f, 0.000177f, -0.001596f, -0.000460f, -0.000169f, 0.000422f, 0.000034f, -0.000953f, -0.000984f, 0.002054f, -0.000704f, 0.000306f, 0.000946f, 0.001130f, -0.000605f, -0.000654f, -0.000276f, -0.001642f, -0.001083f, 0.000164f, 0.000382f, 0.016619f, -0.011686f, 0.004260f, -0.004436f, -0.000338f, -0.003099f, 0.002812f, 0.002794f, 0.000903f, 0.000572f, 0.002642f, 0.007256f, -0.006369f, -0.000881f, -0.001653f, -0.002568f, 0.005629f, 0.004242f, -0.000863f, -0.003850f, 0.001566f, -0.003144f, -0.002514f, -0.004407f, 0.000568f, -0.004513f, -0.001489f, 0.002667f, 0.000388f, -0.001380f, -0.003725f, 0.000012f, -0.000897f, 0.002271f, 0.002087f, 0.000967f, -0.001691f, 0.000260f, -0.000104f, 0.000922f, 0.001801f, -0.001137f, -0.000574f, -0.002016f, 0.003067f, -0.000375f, 0.000455f, - 0.002739f, -0.000562f, -0.000244f, 0.001094f, -0.001369f, -0.000141f, 0.001191f, -0.002030f, 0.000467f, -0.000376f, -0.000173f, -0.002117f, 0.001034f, -0.000453f, 0.000187f, 0.000521f, -0.000778f, 0.001389f, -0.001088f, -0.000283f, -0.002262f, 0.000204f, -0.000310f, 0.000943f, 0.001000f, -0.025902f, 0.003552f, 0.000334f, 0.001790f, -0.002016f, -0.003257f, -0.000042f, 0.002139f, 0.003414f, -0.000237f, 0.005206f, 0.002889f, -0.003566f, -0.003184f, 0.002420f, 0.000415f, -0.002547f, -0.004710f, -0.005399f, -0.003470f, -0.003990f, -0.004463f, 0.000780f, 0.001392f, 0.001161f, -0.003308f, -0.003180f, 0.000461f, -0.000852f, -0.000560f, -0.000442f, -0.002643f, 0.002201f, -0.004536f, -0.001708f, -0.000708f, -0.000183f, 0.001425f, 0.000491f, -0.000330f, 0.002069f, -0.000653f, 0.002063f, 0.001177f, -0.001617f, 0.000239f, 0.003363f, -0.001367f, -0.001366f, 0.000070f, 0.001963f, 0.000495f, -0.001418f, -0.001821f, 0.001640f, 0.000071f, -0.002383f, 0.003238f, 0.003657f, 0.000427f, -0.001059f, 0.000421f, -0.000079f, 0.000762f, 0.001610f, -0.000175f, 0.002141f, 0.001352f, 0.001221f, 0.001063f, 0.000549f, - 0.000883f, -0.001086f, -0.000096f, -0.015846f, 0.013547f, -0.004530f, 0.002895f, -0.000074f, 0.002257f, -0.005485f, 0.002123f, -0.003739f, 0.000019f, -0.002530f, 0.005086f, 0.004327f, 0.001636f, 0.000352f, -0.004178f, -0.002772f, -0.000430f, -0.001680f, 0.004827f, -0.003944f, -0.000156f, -0.001953f, 0.007069f, -0.002246f, 0.000633f, -0.000197f, 0.001219f, 0.000558f, 0.001214f, 0.000894f, -0.001169f, 0.000640f, -0.000284f, 0.002472f, 0.000381f, 0.004683f, 0.002428f, -0.001505f, -0.000317f, -0.000578f, 0.000086f, -0.001781f, -0.001260f, -0.000442f, 0.000835f, 0.005710f, 0.000518f, 0.000388f, -0.001568f, 0.002334f, -0.000865f, -0.001212f, 0.000751f, -0.001177f, 0.000702f, -0.001463f, -0.003196f, 0.001592f, 0.001411f, -0.000436f, 0.003333f, 0.000719f, 0.000789f, 0.001208f, -0.000899f, 0.000405f, 0.001077f, -0.002752f, -0.001302f, -0.000202f, -0.001264f, 0.001282f, 0.001965f, -0.000738f, 0.003372f, 0.002235f, -0.000089f, -0.000914f, -0.000694f, -0.000248f, 0.010332f, -0.000241f, 0.002323f, -0.007036f, -0.001176f, 0.000879f, -0.005678f, 0.000444f, 0.007848f, -0.001378f, 0.000557f, -0.003553f, - -0.004864f, 0.001226f, -0.004445f, 0.006913f, -0.004815f, 0.001651f, 0.001629f, 0.003697f, 0.002874f, -0.000766f, -0.004297f, -0.000508f, -0.000404f, 0.002185f, -0.003015f, -0.000593f, -0.000891f, -0.001442f, -0.001028f, 0.002088f, 0.001282f, 0.005603f, 0.001897f, -0.002102f, 0.002320f, -0.001540f, -0.001619f, 0.001715f, 0.004798f, -0.000703f, -0.002491f, -0.002335f, 0.002546f, -0.000075f, -0.003491f, -0.003220f, 0.001633f, 0.001516f, -0.001455f, -0.002664f, -0.004410f, 0.001203f, 0.001628f, 0.001088f, -0.002495f, 0.001852f, 0.001137f, 0.000763f, -0.000893f, -0.000286f, 0.001351f, -0.003320f, -0.000442f, 0.001439f, 0.001704f, -0.000331f, 0.000824f, 0.000053f, 0.035220f, -0.002214f, 0.001445f, 0.003250f, -0.003055f, -0.001287f, -0.001028f, -0.008264f, 0.005597f, -0.000874f, -0.005116f, 0.001138f, -0.002611f, 0.003050f, 0.002419f, 0.003869f, -0.001342f, 0.005242f, 0.004494f, 0.002884f, -0.004575f, 0.003558f, -0.006285f, -0.003697f, -0.004269f, 0.001725f, -0.003274f, -0.000571f, -0.001100f, -0.004179f, -0.002259f, 0.003576f, -0.002616f, -0.001971f, -0.003990f, 0.001330f, 0.001321f, 0.003033f, - -0.001673f, 0.005201f, 0.001318f, 0.005926f, -0.000652f, 0.001099f, 0.001214f, -0.003231f, 0.002349f, 0.006066f, -0.002055f, -0.000140f, 0.001667f, -0.001728f, -0.002411f, 0.001461f, -0.002403f, -0.001281f, -0.003148f, -0.002052f, 0.002377f, 0.002129f, 0.001438f, 0.002284f, 0.002859f, 0.002729f, 0.004088f, 0.000694f, -0.001179f, 0.002137f, 0.001456f, 0.000012f, -0.000378f, 0.000206f, -0.001494f, -0.000288f, 0.000347f, 0.000409f, -0.000060f, -0.015588f, -0.030559f, 0.011318f, 0.000097f, 0.000612f, -0.003065f, -0.003278f, -0.000747f, 0.001035f, -0.001991f, 0.007963f, -0.003707f, -0.006989f, 0.000396f, 0.000422f, -0.000939f, -0.002477f, 0.005417f, 0.000967f, -0.002466f, 0.002511f, -0.004852f, 0.006098f, -0.003450f, -0.001807f, -0.004197f, 0.006810f, -0.002980f, -0.001013f, -0.004161f, -0.001938f, 0.003680f, -0.001757f, 0.003987f, -0.005217f, -0.006097f, 0.000472f, 0.001024f, 0.001025f, -0.000193f, -0.003169f, 0.000549f, 0.001593f, 0.000773f, 0.003140f, -0.000052f, 0.004939f, 0.000655f, 0.004627f, 0.006060f, 0.001241f, -0.000496f, 0.001121f, -0.003452f, -0.000904f, -0.005742f, -0.005112f, - 0.001455f, 0.001481f, 0.000961f, -0.000384f, -0.001665f, -0.000883f, -0.001430f, -0.000809f, -0.001428f, -0.000004f, -0.000166f, 0.001034f, -0.000388f, -0.000699f, -0.001989f, -0.000184f, -0.002303f, -0.000307f, -0.003045f, -0.000430f, -0.001158f, -0.000367f, -0.010243f, 0.029825f, -0.013612f, 0.006210f, -0.002902f, 0.009460f, -0.001512f, -0.004206f, -0.004387f, 0.002470f, -0.001320f, -0.000583f, 0.000199f, 0.001835f, -0.010048f, -0.004917f, -0.002604f, 0.003969f, 0.003336f, 0.005831f, 0.001055f, -0.000910f, -0.000940f, 0.007001f, -0.009135f, 0.005265f, -0.004402f, -0.000934f, -0.004636f, 0.007232f, 0.002900f, -0.004735f, 0.000616f, -0.002087f, 0.000772f, 0.003056f, -0.013103f, -0.005489f, 0.001070f, 0.004582f, -0.002701f, 0.000950f, 0.003353f, -0.001383f, -0.001484f, -0.000497f, 0.005064f, 0.001982f, 0.000865f, 0.000549f, 0.001951f, 0.005934f, -0.003615f, 0.002704f, -0.008360f, -0.001462f, 0.001883f, 0.004014f, 0.000756f, 0.000566f, 0.000195f, 0.002166f, -0.001635f, 0.000234f, -0.000587f, -0.001986f, -0.001715f, 0.003108f, 0.003043f, -0.001165f, -0.001578f, -0.005217f, -0.002198f, -0.001181f, - -0.000929f, 0.003776f, -0.001444f, -0.001435f, -0.002542f, -0.002314f, -0.000182f, -0.026788f, -0.005789f, 0.002609f, -0.006362f, 0.001588f, 0.001155f, 0.003913f, -0.000031f, 0.007469f, 0.004872f, 0.002694f, -0.002062f, -0.003681f, -0.000202f, 0.007903f, -0.006779f, -0.002595f, -0.005256f, -0.000125f, -0.014346f, -0.011311f, 0.000700f, 0.007006f, 0.009643f, 0.002221f, -0.003525f, 0.003285f, -0.003131f, -0.002091f, -0.002136f, 0.000948f, 0.002517f, 0.000610f, 0.003746f, -0.002858f, -0.005110f, 0.004214f, 0.002765f, 0.008858f, -0.001098f, 0.001438f, -0.001282f, 0.007144f, -0.007450f, -0.003741f, -0.001771f, -0.005651f, 0.003584f, -0.002334f, 0.003008f, -0.006053f, 0.006022f, 0.005848f, 0.005377f, -0.002199f, 0.004766f, 0.000254f, 0.001658f, 0.002797f, 0.001987f, -0.002531f, 0.000436f, -0.000789f, -0.000144f, 0.005497f, 0.002049f, -0.002418f, 0.004448f, -0.000723f, -0.003856f, -0.001276f, -0.000281f, -0.005421f, -0.000220f, 0.002263f, 0.002950f, 0.000471f, -0.000114f, -0.002239f, 0.000822f, 0.001315f, 0.019448f, 0.012657f, -0.003944f, 0.005757f, -0.012875f, 0.009100f, 0.003356f, 0.006856f, - -0.002310f, -0.001691f, -0.007035f, -0.003599f, -0.012046f, -0.002064f, -0.009585f, -0.002894f, -0.005895f, -0.006039f, -0.008140f, 0.003267f, -0.011132f, 0.001525f, 0.004850f, -0.002122f, 0.001546f, -0.004782f, -0.000039f, -0.001477f, -0.001568f, -0.006526f, -0.000860f, 0.000776f, -0.000425f, -0.000989f, -0.003407f, -0.002960f, 0.002040f, 0.002169f, 0.002851f, 0.014199f, -0.005698f, -0.000310f, 0.005762f, -0.001358f, -0.002342f, -0.005423f, 0.001698f, 0.004833f, 0.007980f, 0.002703f, 0.006656f, -0.006471f, -0.009735f, 0.000948f, 0.006410f, 0.003595f, -0.005248f, 0.006134f, -0.004596f, 0.002964f, 0.001236f, 0.005577f, 0.003157f, 0.002058f, 0.003780f, -0.003740f, 0.002416f, 0.002017f, 0.001155f, 0.005478f, 0.001272f, 0.004430f, -0.000643f, -0.001750f, 0.000717f, 0.001065f, 0.000934f, 0.005318f, -0.000832f, -0.002969f, -0.000268f, 0.039181f, -0.025388f, -0.001395f, 0.002923f, 0.000772f, 0.003071f, 0.005353f, -0.001101f, -0.000880f, 0.002994f, -0.004545f, -0.004345f, -0.000727f, 0.003456f, 0.014091f, 0.000574f, 0.004858f, -0.004563f, 0.000269f, -0.013968f, 0.008603f, -0.008456f, -0.012033f, - 0.002777f, 0.003359f, -0.004478f, 0.003998f, 0.001665f, 0.009301f, 0.010293f, -0.001728f, -0.003912f, -0.002952f, -0.015430f, -0.008414f, 0.012061f, 0.003971f, 0.004426f, -0.006966f, -0.007153f, 0.002100f, -0.001403f, -0.006153f, 0.005335f, -0.001181f, -0.003860f, -0.004450f, 0.003014f, -0.003988f, -0.002144f, 0.014149f, -0.008652f, 0.002607f, -0.003117f, 0.003268f, -0.003905f, -0.001611f, -0.010586f, 0.001764f, -0.003932f, -0.002650f, 0.008424f, 0.002020f, 0.002336f, 0.005091f, 0.006105f, 0.001805f, 0.004220f, -0.001908f, -0.000521f, -0.006962f, 0.003155f, 0.005708f, -0.001328f, 0.000354f, -0.000655f, -0.001466f, -0.001805f, 0.000619f, -0.001855f, -0.000859f, -0.024487f, -0.012104f, 0.004432f, -0.001603f, 0.008759f, -0.001344f, -0.002415f, -0.007139f, -0.007984f, 0.004084f, -0.008342f, -0.002950f, -0.004770f, -0.001018f, -0.005028f, -0.003481f, -0.004055f, -0.002134f, -0.005007f, -0.009432f, 0.005273f, -0.018615f, -0.000283f, 0.016482f, 0.003958f, -0.000186f, -0.004619f, 0.001076f, -0.016844f, 0.006818f, 0.004126f, 0.001056f, 0.005970f, 0.008900f, -0.007185f, -0.003841f, -0.007473f, 0.000983f, - 0.000179f, -0.004485f, -0.005087f, -0.005653f, -0.003374f, -0.000361f, 0.003599f, 0.000196f, 0.002938f, 0.001602f, 0.000295f, 0.011394f, 0.002689f, -0.001962f, 0.009044f, -0.004567f, -0.010436f, -0.003297f, -0.001288f, -0.001602f, -0.000740f, -0.003699f, -0.000872f, -0.004585f, -0.001140f, -0.004661f, 0.000398f, 0.002335f, -0.005033f, -0.001529f, -0.002800f, 0.000092f, -0.005101f, -0.006518f, -0.002827f, 0.002476f, 0.004477f, 0.001711f, -0.001551f, -0.000291f, 0.001687f, -0.000945f, -0.001104f, -0.002362f, 0.000980f, 0.002271f, 0.000447f, -0.000226f, -0.002867f, -0.015074f, 0.020182f, -0.010042f, -0.005012f, -0.016592f, 0.012843f, -0.004610f, 0.007540f, 0.000417f, 0.000398f, -0.005073f, 0.010049f, -0.002582f, 0.003226f, 0.002455f, -0.004704f, -0.001630f, -0.001571f, -0.008815f, 0.001675f, 0.001538f, -0.006849f, -0.011422f, -0.007136f, -0.010512f, -0.002618f, 0.005625f, 0.002898f, -0.006206f, -0.006201f, 0.009102f, 0.006223f, -0.007955f, 0.007200f, -0.003986f, 0.006361f, -0.010069f, -0.008000f, -0.007685f, 0.002642f, -0.006810f, 0.004210f, -0.003096f, 0.001737f, -0.001903f, -0.001043f, 0.001539f, - 0.007229f, -0.016011f, -0.002096f, 0.003152f, -0.001533f, -0.004892f, -0.011600f, -0.001061f, 0.010505f, -0.000062f, 0.009093f, 0.006724f, 0.001884f, -0.001339f, 0.006924f, -0.006973f, -0.005769f, 0.004437f, -0.001751f, -0.004340f, 0.002882f, 0.000837f, -0.003456f, -0.004981f, 0.008310f, -0.007840f, -0.004337f, -0.004694f, 0.004681f, 0.000221f, -0.003447f, -0.001919f, 0.002398f, -0.007236f, -0.000066f, 0.001919f, 0.001386f, 0.000156f, -0.002548f, -0.003524f, -0.034641f, 0.012869f, 0.005438f, -0.008735f, 0.004268f, -0.009878f, 0.008841f, 0.007617f, 0.006485f, -0.017768f, 0.010705f, 0.018752f, -0.002626f, 0.006350f, 0.000267f, -0.005888f, -0.007685f, 0.020658f, -0.000309f, -0.001867f, -0.011419f, -0.022547f, -0.012223f, 0.001098f, -0.009994f, 0.008257f, -0.014784f, -0.004949f, -0.008744f, 0.002339f, -0.003442f, -0.011055f, 0.001806f, -0.002593f, 0.007188f, -0.002490f, -0.008689f, -0.003377f, -0.026523f, 0.004686f, -0.000866f, 0.012181f, -0.007541f, -0.008369f, 0.011372f, 0.002335f, 0.001828f, -0.004642f, -0.007143f, 0.002457f, 0.005148f, 0.003698f, -0.001915f, 0.003932f, 0.002123f, 0.000390f, - -0.002376f, -0.002578f, -0.008795f, 0.000606f, -0.003532f, -0.005175f, 0.004527f, 0.002496f, 0.012828f, 0.002612f, -0.008749f, -0.008816f, 0.001856f, -0.005745f, -0.004220f, 0.001355f, -0.004340f, -0.000290f, -0.002035f, -0.002634f, 0.002393f, -0.003529f, 0.001196f, -0.000528f, -0.000756f, -0.001379f, -0.001964f, -0.004313f, -0.005174f, -0.001692f, -0.004468f, 0.028889f, -0.011377f, 0.000199f, 0.001621f, 0.012087f, -0.001530f, -0.002327f, 0.008296f, 0.014242f, -0.009576f, -0.011055f, 0.008657f, -0.001626f, 0.007533f, 0.010913f, 0.009087f, 0.007846f, 0.006287f, 0.007415f, 0.028053f, -0.002346f, 0.002083f, 0.005485f, 0.015484f, -0.003171f, -0.005651f, 0.005990f, -0.000401f, -0.005013f, -0.006208f, -0.005406f, 0.000163f, -0.007037f, 0.010708f, 0.016153f, -0.000822f, -0.003963f, 0.006760f, -0.003880f, 0.009669f, 0.006961f, 0.000265f, -0.008279f, 0.006365f, -0.000590f, -0.002696f, 0.001362f, -0.001114f, 0.018801f, -0.001553f, 0.008215f, -0.004096f, 0.016760f, -0.001524f, 0.001562f, -0.005769f, -0.010079f, 0.008563f, -0.004976f, 0.016888f, 0.003774f, 0.008024f, 0.000140f, 0.000125f, 0.004963f, - 0.001356f, 0.012126f, 0.006787f, 0.002276f, 0.006121f, -0.006981f, 0.002736f, 0.005632f, 0.000679f, -0.001917f, 0.009965f, 0.002544f, -0.003171f, -0.003156f, 0.004046f, -0.001737f, 0.000103f, 0.005679f, -0.001637f, 0.003498f, 0.001460f, -0.002992f, 0.037373f, -0.010780f, 0.003504f, -0.003578f, 0.001659f, 0.004817f, 0.012559f, -0.009744f, 0.005259f, -0.000204f, 0.000673f, 0.006818f, -0.005579f, 0.007290f, -0.019694f, -0.008926f, 0.003294f, 0.007333f, 0.005188f, 0.015662f, -0.015590f, 0.002434f, -0.002339f, -0.021358f, 0.009086f, -0.008308f, -0.005431f, -0.003115f, -0.017543f, 0.005691f, 0.006151f, 0.002728f, -0.009159f, -0.015330f, 0.005995f, -0.009499f, 0.008288f, -0.014688f, 0.000188f, -0.017573f, -0.004332f, -0.011739f, -0.010200f, 0.010384f, 0.016158f, 0.002245f, 0.005933f, -0.007469f, 0.002996f, -0.012526f, 0.005292f, -0.008229f, 0.002258f, 0.011983f, 0.006084f, -0.004229f, 0.007250f, 0.001197f, 0.006275f, -0.005410f, 0.010527f, 0.018024f, 0.000952f, -0.010913f, -0.007559f, -0.004884f, -0.002016f, 0.001146f, 0.008082f, 0.001591f, 0.013137f, -0.000062f, 0.005017f, -0.011965f, - -0.001782f, -0.008644f, -0.001656f, -0.001303f, 0.002685f, -0.010851f, 0.001463f, -0.000846f, 0.003239f, 0.001158f, 0.002017f, 0.001079f, 0.000841f, -0.038108f, -0.031968f, 0.013507f, -0.004010f, 0.015707f, -0.001222f, 0.005140f, -0.019100f, -0.017919f, -0.010897f, 0.005989f, -0.014786f, -0.010201f, -0.004371f, 0.002971f, 0.010816f, 0.003862f, -0.021678f, 0.005846f, 0.012128f, -0.030751f, -0.003665f, 0.001486f, -0.032645f, -0.011200f, 0.014542f, -0.030241f, 0.014820f, 0.015596f, 0.000200f, -0.004362f, -0.001233f, -0.007276f, -0.008027f, 0.005429f, 0.006681f, 0.022687f, -0.013404f, -0.007036f, -0.005634f, -0.010527f, 0.000622f, -0.017973f, -0.004481f, 0.001373f, -0.000507f, -0.005846f, -0.000913f, -0.009898f, -0.002008f, 0.005530f, -0.002472f, -0.006451f, 0.007504f, -0.003512f, -0.007345f, -0.010492f, 0.022339f, -0.000931f, 0.013611f, 0.001798f, 0.005108f, 0.014727f, 0.002130f, 0.010033f, -0.006677f, 0.011149f, 0.008093f, 0.002425f, 0.002927f, 0.002734f, 0.009718f, 0.004430f, 0.001808f, 0.009385f, -0.003985f, 0.001368f, -0.001087f, -0.014659f, 0.006861f, 0.003482f, 0.002007f, -0.008976f, - -0.002554f, 0.001665f, 0.002851f, -0.002583f, -0.061833f, 0.023317f, -0.006832f, -0.027738f, -0.006770f, 0.000698f, -0.007174f, 0.010709f, -0.024015f, 0.011563f, -0.001938f, -0.027615f, -0.019037f, 0.003778f, 0.010963f, 0.010355f, 0.007600f, 0.016257f, 0.004643f, 0.026740f, 0.014640f, 0.031342f, 0.004072f, 0.025459f, -0.019617f, -0.015456f, 0.005267f, 0.002209f, -0.015561f, 0.004347f, 0.003294f, -0.002174f, -0.005935f, 0.015085f, 0.002885f, -0.033307f, -0.014851f, 0.011154f, 0.003841f, -0.007073f, 0.009520f, 0.009707f, 0.015126f, 0.003245f, 0.004486f, 0.002818f, 0.004390f, 0.005514f, -0.011574f, 0.001750f, 0.002124f, -0.024637f, 0.011603f, 0.008534f, 0.010446f, -0.016891f, -0.009802f, 0.012301f, 0.000012f, -0.003286f, -0.002550f, -0.007233f, -0.006385f, 0.000028f, -0.008496f, -0.018945f, 0.006438f, 0.020176f, -0.014200f, 0.001955f, -0.008073f, -0.003291f, -0.005885f, -0.001848f, 0.010405f, 0.002481f, 0.008597f, 0.002489f, -0.009155f, -0.006523f, -0.007436f, -0.004469f, -0.006082f, 0.001438f, -0.003857f, -0.000849f, -0.005821f, 0.001837f, 0.003012f, 0.003292f, -0.001768f, -0.005835f, - 0.000097f, 0.025950f, 0.017542f, 0.012129f, 0.006593f, 0.000803f, -0.006048f, -0.009215f, 0.008134f, -0.025892f, 0.027317f, -0.016931f, 0.004391f, -0.028107f, -0.001040f, 0.026431f, 0.010370f, -0.009367f, 0.016757f, -0.026702f, 0.010653f, 0.004972f, 0.001853f, -0.032880f, -0.009876f, 0.002009f, 0.005274f, 0.021113f, -0.032362f, -0.004376f, -0.010763f, -0.030458f, -0.006700f, 0.007295f, 0.015194f, 0.022821f, 0.017716f, 0.017649f, -0.001531f, -0.011358f, 0.011604f, 0.003506f, -0.007001f, 0.004159f, -0.014903f, 0.023643f, 0.011042f, 0.007994f, -0.012366f, -0.027066f, -0.007266f, 0.000609f, -0.032829f, -0.026530f, -0.007012f, -0.023798f, 0.015244f, 0.005904f, 0.004712f, -0.010967f, -0.011815f, 0.004564f, 0.003273f, 0.001982f, 0.007299f, -0.004591f, 0.005502f, 0.015630f, 0.007059f, 0.002637f, 0.002069f, -0.010326f, -0.008700f, -0.007777f, 0.004495f, -0.002781f, -0.021058f, -0.016820f, -0.001746f, -0.013550f, -0.012051f, -0.003470f, -0.017400f, -0.010917f, -0.002798f, 0.000909f, -0.002558f, -0.001161f, 0.004064f, -0.003345f, -0.001339f, 0.000905f, 0.000536f, -0.005077f, 0.029861f, -0.023299f, - 0.006269f, -0.003295f, -0.003024f, 0.000547f, 0.008262f, -0.014513f, 0.019426f, -0.005605f, 0.013323f, -0.001297f, -0.010810f, 0.020665f, 0.020389f, 0.014590f, -0.006824f, 0.031315f, 0.011598f, -0.035010f, 0.036112f, 0.003298f, -0.000095f, 0.026100f, 0.001161f, -0.011318f, -0.015135f, 0.025762f, -0.016128f, -0.021518f, 0.020853f, 0.018184f, -0.011832f, -0.028618f, 0.011237f, -0.009819f, 0.003989f, -0.020129f, -0.016491f, -0.006834f, 0.019529f, 0.017530f, 0.002331f, 0.016088f, -0.023341f, 0.007540f, -0.006123f, -0.008695f, 0.011215f, 0.001581f, 0.003458f, -0.032689f, -0.008922f, 0.018204f, -0.023342f, -0.006071f, -0.029288f, -0.005451f, -0.010915f, 0.004955f, -0.007045f, 0.003326f, 0.003064f, -0.000992f, 0.002989f, -0.007828f, -0.026003f, -0.004899f, 0.013336f, -0.001756f, 0.009267f, -0.010016f, -0.022807f, -0.004041f, 0.005106f, 0.014557f, 0.003608f, 0.007973f, -0.000783f, 0.003284f, 0.005561f, 0.003362f, -0.007880f, 0.002031f, -0.003185f, 0.003447f, -0.006259f, 0.003779f, 0.001613f, 0.000455f, -0.000637f, -0.005462f, -0.002667f, 0.027055f, 0.002077f, -0.007877f, -0.019391f, -0.000662f, - -0.009271f, 0.007203f, -0.016018f, 0.010176f, 0.006479f, -0.014006f, -0.014366f, 0.021659f, -0.025550f, -0.001008f, 0.016486f, -0.018501f, 0.005953f, 0.021168f, -0.016854f, 0.014516f, 0.010660f, 0.015537f, -0.025588f, 0.022087f, -0.025694f, 0.007734f, -0.019561f, 0.002434f, -0.010009f, 0.017389f, 0.000525f, 0.010640f, 0.005484f, -0.018258f, -0.011137f, -0.025237f, 0.014709f, -0.017098f, 0.014791f, -0.020559f, -0.023407f, -0.039197f, 0.003817f, 0.020564f, -0.003147f, -0.000613f, 0.006497f, 0.017723f, -0.006016f, 0.004751f, -0.021652f, 0.005494f, 0.028743f, -0.002915f, 0.026060f, 0.034091f, -0.000224f, 0.005699f, 0.007010f, -0.014581f, 0.007564f, -0.017663f, -0.000886f, -0.018130f, -0.017564f, 0.001015f, -0.006653f, -0.029780f, 0.020174f, 0.000460f, 0.015009f, -0.017584f, -0.008964f, -0.006739f, 0.007699f, -0.000191f, -0.004640f, -0.004651f, -0.002994f, -0.001165f, 0.001720f, 0.001899f, -0.003527f, 0.004019f, -0.004046f, -0.004052f, -0.002236f, 0.005683f, 0.004263f, 0.004720f, -0.002308f, 0.003551f, -0.061278f, 0.015582f, 0.022986f, 0.006399f, -0.026534f, -0.003860f, 0.043266f, -0.049653f, - -0.001221f, -0.008350f, -0.032454f, -0.008162f, -0.021977f, 0.008102f, 0.008069f, 0.019033f, 0.007745f, -0.025942f, -0.009175f, 0.018762f, -0.029594f, -0.008387f, -0.031652f, 0.027091f, 0.008172f, 0.021199f, 0.036117f, -0.012668f, -0.007558f, -0.005908f, -0.018012f, 0.017344f, -0.008419f, -0.021481f, -0.024079f, -0.004184f, 0.009318f, -0.000628f, 0.004989f, 0.005935f, 0.014102f, -0.006122f, -0.000594f, 0.010462f, -0.009975f, 0.020470f, 0.023301f, 0.021970f, -0.017696f, 0.002436f, -0.005467f, 0.010543f, 0.043895f, 0.032926f, 0.062808f, 0.005040f, 0.024880f, 0.020132f, -0.009452f, -0.002094f, -0.003203f, -0.005788f, 0.008005f, 0.001914f, 0.022669f, 0.017077f, -0.007569f, -0.002242f, -0.013327f, -0.026265f, 0.010670f, -0.000310f, 0.009090f, -0.001844f, -0.018112f, -0.002596f, 0.002837f, -0.010091f, 0.006248f, -0.006409f, -0.008743f, 0.000321f, -0.008761f, 0.000031f, -0.002359f, -0.002119f, 0.000163f, 0.001426f, -0.005434f, 0.000851f, 0.000455f, 0.000042f, 0.002319f, 0.095118f, 0.045863f, 0.016303f, 0.014684f, -0.022672f, 0.014538f, -0.018327f, 0.021799f, 0.017838f, 0.016724f, 0.004228f, - -0.031215f, -0.017507f, 0.033926f, 0.005805f, -0.002028f, -0.007282f, 0.037984f, -0.041305f, -0.017399f, -0.010436f, -0.003136f, -0.029288f, 0.006894f, -0.025325f, -0.014156f, 0.004074f, -0.016055f, 0.023486f, -0.022799f, -0.009917f, -0.005660f, 0.025107f, -0.041941f, -0.008167f, -0.031233f, -0.001001f, -0.000231f, -0.027472f, 0.004408f, 0.021396f, 0.011583f, -0.000617f, -0.012937f, 0.001038f, 0.012853f, -0.017332f, 0.034530f, 0.046932f, -0.003050f, -0.029370f, -0.027644f, 0.019276f, -0.007081f, -0.006473f, 0.040394f, -0.008737f, 0.012829f, -0.001234f, 0.025365f, -0.005228f, 0.003227f, -0.005013f, -0.016220f, -0.045102f, -0.026972f, -0.004350f, -0.012170f, -0.031129f, -0.020495f, 0.011539f, 0.026020f, -0.002282f, -0.003449f, -0.002916f, -0.004293f, 0.014177f, 0.008954f, 0.001916f, -0.008876f, 0.009905f, -0.005889f, -0.020687f, -0.019790f, 0.002428f, 0.013427f, -0.016156f, 0.010462f, -0.001154f, -0.006245f, -0.005476f, 0.000324f, -0.009086f, -0.007026f, 0.000275f, -0.002771f, -0.001462f} -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870]={ {-0.004481f, 0.002514f, -0.001425f, 0.000635f, -0.000793f, 0.000202f, -0.000577f, -0.000144f, 0.000043f, 0.001204f, -0.000761f, 0.000531f, -0.001239f, 0.000940f, -0.001392f, -0.001895f, -0.001655f, 0.000398f, -0.000160f, 0.000274f, 0.000053f, -0.000833f, 0.000504f, 0.000853f, -0.000454f, 0.000677f, -0.000086f, -0.000273f, -0.000558f, -0.000091f, 0.000184f, 0.000458f, -0.000306f, 0.000668f, -0.000248f, 0.000422f, 0.000610f, -0.000419f, -0.000394f, 0.000036f, -0.000404f, 0.000121f, 0.000025f, -0.000176f, 0.000409f, 0.000071f, -0.000165f, 0.001707f, -0.001764f, -0.000327f, -0.000370f, -0.000411f, -0.000125f, -0.000029f, -0.000334f, -0.000244f, 0.000005f, 0.000072f, -0.000244f, 0.000142f, -0.000546f, -0.000163f, -0.000087f, 0.000331f, -0.001876f, -0.000178f, 0.000390f, -0.000180f, -0.000226f, 0.000163f, 0.000038f, 0.000132f, 0.000867f, -0.000418f, -0.000275f, -0.000463f, -0.000084f, 0.000254f, 0.000391f, -0.000397f, -0.000295f, 0.000461f, -0.000421f, -0.000630f, -0.000067f, -0.000172f, 0.000222f, -0.000187f, -0.000177f, 0.000104f, 0.000196f, -0.000388f, 0.000130f, 0.000147f, -0.006023f, -0.004100f, - -0.001658f, -0.001906f, -0.001056f, -0.000999f, -0.000936f, -0.000431f, -0.001130f, -0.000900f, -0.000385f, -0.000702f, -0.000086f, -0.000256f, -0.000602f, -0.000828f, -0.000916f, -0.000367f, -0.000528f, -0.000933f, -0.000115f, -0.001166f, 0.000011f, -0.000092f, -0.000154f, -0.000707f, -0.000114f, -0.000536f, 0.000011f, -0.000690f, -0.000431f, 0.000234f, -0.000498f, 0.000086f, -0.001166f, -0.000219f, 0.000580f, 0.000349f, -0.000014f, -0.000173f, -0.000330f, 0.000093f, 0.000115f, 0.000542f, -0.000318f, -0.000056f, -0.000160f, -0.007922f, -0.000437f, 0.001025f, -0.000022f, 0.000309f, -0.000060f, 0.000013f, -0.000640f, 0.000681f, 0.000261f, 0.000819f, 0.000575f, 0.001674f, 0.001221f, 0.000099f, -0.000665f, -0.000375f, -0.000161f, 0.000317f, -0.000229f, -0.001469f, -0.001329f, -0.000681f, -0.000210f, 0.000069f, 0.000182f, 0.000277f, -0.000058f, 0.000051f, 0.000157f, -0.000305f, -0.000047f, -0.000038f, -0.000913f, 0.000539f, 0.000215f, -0.000096f, -0.000015f, -0.000343f, -0.000509f, 0.000318f, 0.000115f, -0.000325f, 0.000310f, 0.000272f, 0.000379f, -0.000167f, 0.008884f, 0.006243f, 0.001224f, 0.002418f, - 0.000498f, 0.000801f, 0.001968f, 0.001016f, 0.000311f, 0.001187f, 0.000480f, -0.000520f, -0.000261f, 0.000413f, 0.000684f, -0.001204f, -0.000164f, -0.000722f, 0.001602f, 0.000798f, 0.000408f, 0.000798f, 0.000405f, 0.000413f, 0.000018f, -0.000078f, -0.000396f, 0.000628f, 0.000758f, 0.000648f, 0.000807f, 0.000978f, 0.000583f, 0.001429f, 0.000321f, -0.000081f, 0.000507f, 0.000094f, -0.000251f, -0.000113f, -0.000224f, -0.000283f, 0.000005f, 0.000663f, 0.000157f, 0.000109f, 0.000384f, 0.013257f, 0.005638f, 0.001703f, 0.001552f, 0.001084f, 0.000672f, 0.000213f, 0.000052f, 0.001453f, 0.000295f, 0.000805f, 0.001097f, 0.000578f, -0.000076f, -0.000405f, 0.002318f, -0.000211f, -0.001266f, -0.000727f, 0.000577f, 0.000031f, 0.001240f, 0.000405f, 0.000154f, -0.000230f, -0.000575f, -0.000165f, -0.000263f, 0.000542f, -0.000092f, 0.000224f, 0.000057f, 0.000083f, -0.000295f, 0.000439f, 0.001611f, 0.001016f, 0.001071f, 0.000961f, 0.000798f, 0.000433f, 0.000313f, 0.000181f, 0.000529f, -0.000447f, 0.000325f, -0.000212f, 0.004354f, -0.004589f, -0.001404f, -0.001974f, -0.001732f, -0.000924f, - -0.000289f, 0.000653f, -0.000652f, 0.000081f, -0.001715f, 0.000594f, -0.000632f, -0.001532f, 0.000397f, -0.001092f, -0.001484f, -0.001042f, 0.001398f, 0.001073f, -0.000507f, 0.000551f, -0.000986f, 0.000390f, -0.001786f, 0.000103f, 0.000283f, -0.000292f, -0.000426f, 0.000381f, -0.001415f, -0.000629f, 0.000172f, -0.000482f, -0.000424f, -0.000311f, 0.000106f, 0.000158f, 0.000701f, 0.000050f, 0.001215f, -0.000465f, -0.000344f, -0.000377f, -0.000613f, -0.000180f, -0.000311f, 0.000180f, -0.000529f, -0.000797f, -0.015738f, -0.007994f, -0.002855f, -0.002254f, -0.002436f, -0.001543f, -0.002105f, -0.001386f, -0.002293f, -0.000428f, -0.001033f, -0.000277f, 0.000110f, -0.000966f, -0.000258f, 0.000140f, 0.000016f, -0.001463f, -0.000960f, -0.000668f, 0.000140f, -0.001969f, 0.000198f, -0.000899f, -0.001738f, 0.000140f, -0.000021f, 0.000111f, -0.000042f, -0.000624f, -0.000469f, 0.000011f, -0.000131f, -0.000031f, -0.000649f, 0.000012f, 0.000177f, 0.000517f, 0.000201f, -0.000686f, 0.000388f, -0.000685f, 0.000459f, -0.001172f, -0.000793f, 0.000167f, -0.000643f, 0.000024f, -0.000243f, -0.000943f, -0.009307f, 0.004880f, - 0.002055f, 0.000756f, 0.001265f, 0.000229f, 0.000342f, 0.001103f, 0.001243f, 0.000665f, 0.000829f, -0.000633f, -0.000262f, -0.000984f, 0.001193f, 0.000243f, 0.000218f, 0.001618f, 0.000056f, -0.001094f, 0.001933f, -0.001286f, 0.000159f, 0.001589f, -0.000479f, 0.000413f, 0.000209f, -0.000042f, -0.000798f, -0.000196f, 0.000444f, 0.000455f, 0.000080f, -0.000290f, 0.000034f, -0.000569f, 0.001824f, 0.000150f, -0.000026f, -0.000722f, -0.000358f, -0.000469f, -0.000431f, 0.000980f, 0.000946f, -0.000250f, 0.000096f, -0.000068f, 0.000287f, 0.000063f, -0.000060f, -0.000200f, 0.000226f, 0.000142f, -0.000274f, -0.000263f, 0.014014f, 0.005953f, 0.001591f, 0.003214f, 0.001866f, 0.000799f, 0.001399f, 0.001205f, 0.000001f, 0.000879f, 0.001389f, 0.000321f, 0.000001f, 0.000711f, 0.001957f, -0.000663f, -0.000362f, -0.001549f, 0.000392f, 0.001786f, 0.000753f, 0.000083f, -0.001011f, -0.000542f, -0.000436f, 0.001881f, 0.000581f, 0.000984f, 0.000547f, -0.000893f, -0.001441f, 0.001631f, 0.000891f, -0.001002f, -0.000483f, 0.001585f, 0.001330f, -0.000067f, 0.000327f, -0.000166f, 0.000692f, 0.000445f, - -0.000160f, 0.000323f, -0.000565f, -0.000262f, 0.000848f, -0.000450f, -0.000355f, 0.000912f, 0.000773f, 0.000433f, 0.000149f, 0.000190f, 0.000185f, 0.000651f, 0.016574f, 0.003606f, 0.002758f, 0.001228f, 0.001262f, 0.000546f, 0.001299f, 0.001552f, 0.002450f, 0.001519f, -0.000471f, 0.001946f, -0.000380f, 0.000532f, 0.000424f, 0.001649f, 0.002410f, 0.001568f, -0.000426f, 0.002713f, -0.000521f, -0.000266f, -0.001430f, 0.000397f, -0.000432f, 0.000456f, 0.000719f, -0.000804f, -0.001143f, -0.000457f, 0.000213f, -0.000897f, -0.000309f, 0.000430f, 0.000591f, -0.001054f, -0.000921f, -0.000366f, 0.000340f, 0.000008f, 0.000272f, -0.000373f, -0.000019f, -0.000247f, -0.000372f, 0.000449f, -0.000627f, 0.000603f, -0.000672f, -0.000215f, -0.000515f, 0.000124f, -0.000194f, 0.000677f, 0.000284f, -0.000036f, 0.001906f, -0.007339f, -0.002373f, -0.002613f, -0.001706f, 0.000469f, -0.000432f, -0.001562f, 0.000889f, 0.000082f, 0.001096f, -0.000108f, 0.000104f, -0.001703f, -0.001225f, -0.000783f, -0.001260f, 0.000124f, -0.001340f, -0.002547f, 0.000497f, 0.000318f, -0.001201f, -0.000242f, -0.001091f, 0.000246f, - 0.000353f, -0.000191f, -0.002656f, -0.000731f, 0.000157f, -0.000276f, 0.000216f, 0.000731f, -0.001893f, -0.000546f, -0.001187f, 0.000630f, -0.000156f, -0.000081f, 0.001223f, -0.001230f, -0.000094f, 0.000405f, -0.000168f, -0.000392f, 0.000587f, 0.000335f, -0.000757f, -0.000898f, -0.001470f, -0.000203f, -0.001125f, -0.000885f, -0.000485f, -0.000606f, -0.000381f, -0.000153f, -0.000351f, -0.000544f, -0.000764f, -0.000412f, 0.000264f, -0.017218f, -0.005865f, -0.003510f, -0.000911f, -0.001809f, -0.000083f, -0.000971f, -0.001295f, -0.001563f, 0.001947f, 0.000063f, -0.000764f, -0.000168f, -0.002876f, -0.001611f, -0.001409f, 0.002356f, -0.001979f, -0.004140f, 0.000335f, 0.000529f, 0.000317f, -0.001510f, -0.000414f, 0.000896f, -0.001920f, -0.000178f, -0.001958f, -0.000562f, 0.001083f, -0.000917f, 0.000260f, 0.002145f, 0.000226f, -0.000418f, -0.000521f, 0.000599f, 0.000654f, 0.000555f, -0.000638f, -0.000095f, 0.000680f, 0.000959f, 0.000560f, 0.000340f, -0.001795f, 0.000363f, -0.000090f, -0.000883f, -0.000342f, 0.000201f, -0.000245f, -0.000893f, -0.000610f, -0.000927f, -0.000276f, 0.000075f, 0.000132f, -0.000118f, - -0.000667f, -0.000094f, -0.000519f, -0.000016f, -0.011435f, 0.002648f, 0.000174f, -0.001397f, 0.002054f, -0.001297f, -0.000998f, 0.000516f, -0.001928f, -0.001155f, -0.000407f, 0.000802f, -0.001520f, 0.002082f, 0.000049f, -0.000057f, 0.000978f, 0.000970f, 0.001531f, -0.000164f, 0.002107f, 0.003020f, 0.002187f, 0.000689f, 0.001872f, -0.000607f, 0.001191f, -0.001379f, -0.001401f, -0.000589f, 0.000179f, 0.000914f, -0.000734f, -0.001324f, -0.000709f, -0.000034f, 0.000823f, -0.001280f, 0.000929f, 0.000315f, 0.000718f, -0.000328f, -0.001160f, -0.001574f, -0.001863f, 0.000487f, -0.000950f, 0.000507f, -0.001976f, -0.000577f, 0.000898f, -0.001254f, 0.000213f, -0.000882f, 0.000606f, -0.000286f, 0.000589f, 0.000134f, -0.000346f, -0.000035f, -0.000791f, 0.001487f, 0.000635f, 0.007650f, 0.012631f, 0.003665f, 0.003285f, 0.004560f, 0.003697f, 0.000730f, 0.002934f, 0.002611f, 0.001424f, 0.005528f, 0.001321f, 0.000943f, 0.002397f, 0.002219f, 0.001171f, 0.000988f, 0.000588f, 0.000928f, -0.000706f, 0.002798f, -0.000740f, 0.000279f, -0.000870f, 0.001776f, 0.000096f, -0.000446f, 0.001469f, 0.001751f, - 0.000622f, 0.002321f, -0.001628f, -0.002696f, -0.000603f, -0.000147f, 0.000595f, -0.000176f, 0.001175f, -0.001072f, 0.001070f, 0.002339f, 0.001010f, -0.002061f, -0.000421f, 0.001068f, 0.000421f, -0.001004f, 0.001473f, 0.000587f, 0.000875f, 0.000974f, 0.001316f, 0.000440f, -0.000358f, 0.000331f, -0.001176f, -0.000302f, 0.001111f, 0.001020f, -0.000564f, -0.000007f, 0.000278f, -0.000491f, 0.029002f, 0.003003f, -0.000292f, 0.001814f, -0.000055f, 0.002498f, 0.000028f, 0.000686f, 0.000313f, 0.002632f, 0.001220f, -0.001056f, 0.000876f, 0.001273f, 0.000671f, -0.001558f, -0.003281f, -0.001484f, -0.001379f, 0.000602f, -0.002015f, -0.000333f, -0.000129f, 0.000562f, 0.003607f, 0.002026f, 0.000679f, 0.001468f, -0.002247f, -0.000115f, -0.001178f, -0.000428f, -0.000928f, 0.001377f, -0.000519f, 0.002291f, -0.001043f, -0.000386f, -0.001164f, -0.000495f, -0.001681f, -0.000758f, 0.000386f, 0.000391f, -0.000088f, 0.000045f, -0.000922f, 0.000549f, 0.001563f, 0.000153f, -0.000841f, 0.001008f, -0.001381f, 0.000632f, 0.000608f, -0.000108f, -0.000429f, -0.000265f, -0.000060f, -0.000231f, 0.000070f, 0.000966f, - -0.000103f, -0.008442f, -0.010046f, -0.001867f, -0.000560f, -0.000411f, -0.001597f, -0.000660f, 0.003048f, 0.001805f, 0.000643f, 0.000832f, -0.001330f, -0.000266f, 0.002289f, -0.000842f, 0.003725f, -0.002891f, -0.000789f, 0.003038f, -0.000585f, -0.000339f, -0.001765f, 0.002083f, 0.002302f, 0.000045f, 0.002269f, -0.000824f, 0.001007f, -0.000045f, -0.001268f, -0.000198f, -0.001003f, -0.000417f, -0.000650f, 0.001255f, -0.000921f, -0.000217f, -0.001418f, 0.000963f, -0.000736f, 0.002100f, -0.003309f, 0.001394f, 0.001156f, -0.001998f, 0.000044f, -0.001319f, 0.000358f, -0.001501f, 0.000480f, 0.000631f, -0.001908f, -0.000285f, -0.000693f, -0.002840f, -0.001645f, -0.000785f, -0.001411f, -0.000304f, -0.000235f, 0.000159f, -0.001153f, 0.000168f, -0.002232f, 0.000630f, 0.000278f, -0.000766f, 0.000284f, -0.000765f, -0.000203f, -0.000496f, -0.000229f, -0.007420f, -0.004255f, -0.005756f, -0.002955f, -0.003845f, -0.000435f, 0.003711f, -0.003877f, 0.002983f, 0.001903f, -0.002113f, 0.004230f, -0.000669f, 0.000823f, -0.002762f, -0.000298f, -0.001228f, -0.000177f, 0.000018f, 0.001042f, 0.000510f, 0.002207f, 0.004234f, - -0.001147f, 0.000584f, -0.002026f, -0.002115f, -0.001880f, 0.000428f, 0.001759f, -0.000620f, -0.000617f, -0.000562f, -0.001310f, 0.001468f, -0.000463f, -0.000098f, -0.001283f, -0.001008f, -0.000855f, -0.001321f, -0.000114f, -0.000058f, -0.001120f, 0.000732f, -0.001713f, 0.000632f, -0.000996f, -0.000178f, 0.000617f, -0.001263f, 0.001558f, -0.002715f, -0.000848f, 0.000256f, -0.000808f, -0.001449f, 0.000707f, -0.000400f, -0.001634f, 0.002676f, 0.001510f, 0.000370f, 0.000507f, 0.000537f, 0.000653f, -0.001353f, -0.000891f, 0.000344f, -0.000485f, -0.000938f, 0.001007f, -0.020663f, -0.002362f, 0.001673f, -0.001511f, 0.003433f, 0.001587f, -0.004179f, 0.000570f, 0.000708f, -0.001344f, -0.003499f, -0.001293f, -0.000849f, 0.001005f, 0.000256f, -0.003235f, -0.001219f, -0.001723f, -0.003114f, -0.002622f, -0.006109f, -0.003176f, -0.003566f, -0.004327f, 0.003447f, -0.002297f, 0.001264f, 0.002588f, -0.001862f, -0.002931f, -0.001127f, -0.000625f, 0.000709f, 0.001946f, 0.001132f, -0.002426f, -0.003017f, 0.002392f, 0.001497f, 0.001894f, 0.002659f, 0.000394f, -0.000005f, 0.001052f, -0.000120f, -0.001163f, 0.000679f, - -0.000623f, -0.000397f, 0.001569f, 0.003979f, -0.001307f, -0.001980f, 0.000936f, -0.001259f, -0.000109f, 0.002054f, -0.003917f, -0.000047f, -0.001284f, -0.000207f, -0.000071f, 0.000032f, -0.000455f, 0.000793f, -0.001157f, 0.001433f, 0.001561f, 0.000662f, -0.000079f, -0.000002f, -0.001312f, 0.016556f, 0.014438f, 0.003911f, 0.008779f, 0.002429f, 0.005056f, -0.000820f, -0.000802f, 0.002457f, 0.003322f, 0.001764f, -0.005733f, -0.001901f, 0.003574f, 0.004037f, -0.001489f, -0.001946f, 0.000655f, 0.001681f, 0.001909f, 0.000284f, -0.002983f, -0.006407f, -0.002408f, 0.003497f, -0.000311f, 0.003594f, -0.000852f, -0.001144f, 0.000726f, -0.002979f, -0.001727f, -0.001733f, 0.003291f, -0.004104f, -0.002832f, 0.000737f, 0.000686f, -0.001057f, -0.000132f, -0.001177f, 0.001231f, 0.001678f, 0.001439f, 0.003251f, 0.001892f, 0.000055f, -0.002663f, 0.002504f, -0.000239f, 0.001387f, -0.001303f, 0.000968f, 0.001979f, -0.000302f, -0.000533f, -0.001240f, -0.001472f, 0.000901f, 0.000199f, 0.001274f, -0.001274f, 0.001064f, 0.002570f, -0.000541f, -0.001413f, 0.001792f, 0.002328f, -0.000947f, 0.001037f, 0.001167f, - 0.000931f, 0.002225f, 0.001898f, 0.020077f, 0.003747f, -0.003936f, 0.003266f, 0.002107f, -0.003801f, -0.000868f, 0.001947f, 0.000098f, 0.000627f, -0.000331f, -0.000792f, -0.004226f, -0.004106f, 0.001800f, 0.003887f, 0.003982f, -0.003953f, -0.008046f, 0.001125f, -0.000157f, -0.003213f, -0.004134f, -0.000723f, 0.002012f, -0.001414f, 0.003003f, 0.004884f, -0.001870f, -0.001595f, -0.000697f, -0.000724f, -0.000992f, -0.007470f, 0.003861f, 0.003556f, -0.000179f, 0.002292f, -0.002307f, -0.000721f, -0.002103f, 0.003011f, 0.003177f, 0.000357f, -0.000848f, -0.001177f, 0.001751f, 0.000430f, -0.001095f, -0.001896f, -0.000039f, 0.001590f, -0.002467f, -0.001506f, -0.001364f, 0.000407f, 0.000728f, -0.003052f, 0.001508f, 0.003363f, -0.002793f, -0.000039f, -0.000708f, -0.000476f, -0.000068f, 0.000333f, 0.000142f, -0.000198f, 0.000556f, -0.000912f, -0.001846f, -0.002125f, -0.000981f, -0.000522f, -0.001130f, -0.002131f, -0.001604f, -0.000513f, 0.001487f, -0.000718f, -0.005505f, -0.003629f, 0.000518f, 0.004979f, -0.005014f, 0.003560f, 0.001625f, 0.000774f, 0.001012f, 0.000854f, 0.003245f, 0.005258f, 0.000137f, - 0.001579f, 0.000577f, -0.004535f, -0.004119f, 0.004008f, 0.000538f, -0.004686f, 0.002753f, -0.004002f, 0.000651f, 0.004902f, -0.000321f, -0.001350f, 0.005599f, 0.000865f, 0.000375f, 0.000452f, 0.000159f, 0.000496f, -0.002474f, 0.001469f, 0.002252f, 0.003690f, -0.002945f, -0.001465f, 0.000567f, 0.000505f, -0.001355f, -0.002662f, 0.001688f, -0.000977f, 0.001180f, 0.000620f, -0.000931f, -0.000867f, 0.000372f, 0.001674f, -0.001284f, -0.000572f, -0.000293f, 0.000958f, -0.002695f, -0.001263f, 0.001241f, 0.000260f, -0.000914f, -0.000476f, 0.001122f, -0.001142f, 0.000348f, -0.000775f, -0.000194f, 0.000904f, 0.000260f, 0.000526f, -0.002326f, -0.001659f, 0.000616f, -0.021590f, -0.019822f, -0.004433f, -0.009184f, -0.008065f, -0.004568f, -0.001387f, -0.003430f, -0.004131f, 0.002807f, 0.000749f, -0.000959f, 0.004709f, 0.001729f, 0.005658f, 0.004384f, 0.001259f, 0.001756f, 0.002062f, -0.008676f, 0.004088f, -0.000670f, -0.001840f, -0.001625f, -0.005136f, -0.001589f, -0.001785f, 0.004931f, -0.001652f, -0.002945f, -0.001471f, 0.000785f, -0.000647f, -0.000984f, 0.001083f, -0.001304f, -0.000850f, 0.003017f, - -0.002962f, -0.000258f, -0.000961f, 0.005427f, 0.002150f, 0.002170f, -0.004179f, 0.000322f, 0.003712f, -0.001952f, 0.000883f, 0.000018f, 0.000899f, 0.000024f, 0.000308f, -0.000285f, 0.002365f, -0.000309f, -0.000776f, 0.001725f, -0.001229f, 0.000967f, 0.002061f, -0.000966f, -0.001438f, 0.000639f, 0.000786f, -0.001551f, -0.000638f, -0.002862f, -0.002269f, 0.000751f, -0.000262f, -0.000504f, -0.000054f, 0.000377f, -0.000185f, -0.001816f, -0.000856f, -0.013522f, 0.028554f, 0.017910f, 0.005763f, 0.001739f, 0.001972f, 0.002010f, 0.003214f, 0.002800f, 0.006054f, 0.012065f, 0.000699f, 0.001361f, 0.002641f, 0.002461f, 0.003120f, -0.002269f, 0.011739f, 0.008342f, -0.007771f, 0.005736f, 0.001077f, -0.001267f, 0.002829f, 0.007071f, -0.006635f, -0.001906f, 0.000552f, -0.005532f, -0.003752f, -0.003956f, 0.008067f, -0.000366f, -0.001424f, 0.001063f, 0.000453f, -0.002416f, -0.006463f, 0.004480f, 0.003672f, -0.001105f, 0.002006f, 0.004594f, -0.003055f, 0.002500f, 0.000265f, -0.001204f, 0.003638f, 0.003095f, 0.000728f, 0.000415f, 0.000375f, 0.002493f, 0.003530f, 0.000026f, -0.000635f, -0.000038f, - -0.001115f, 0.002471f, 0.000520f, -0.001006f, -0.001234f, -0.000905f, 0.001881f, 0.000868f, 0.004273f, -0.001292f, 0.001528f, -0.000951f, 0.001066f, -0.001744f, -0.000619f, 0.000525f, -0.000948f, -0.001220f, 0.000108f, 0.000207f, 0.000548f, 0.001156f, 0.030926f, -0.010900f, -0.010707f, 0.004849f, 0.001192f, -0.004052f, -0.003568f, -0.005667f, -0.005617f, -0.004108f, -0.003481f, 0.005121f, 0.001194f, 0.000619f, -0.002904f, -0.002535f, -0.009053f, -0.000009f, -0.003578f, -0.006222f, 0.005185f, 0.003449f, 0.001070f, 0.003206f, 0.000901f, -0.001091f, -0.002005f, -0.000169f, -0.001694f, 0.002624f, 0.004444f, -0.004717f, -0.001736f, 0.000069f, 0.002428f, 0.006160f, 0.001855f, 0.008262f, -0.004236f, 0.002608f, 0.006890f, 0.004060f, -0.003428f, -0.001021f, 0.000811f, -0.001746f, 0.002986f, -0.000462f, 0.000180f, 0.004400f, 0.002428f, 0.000706f, 0.000439f, -0.000107f, -0.001821f, -0.000051f, 0.000559f, -0.001974f, -0.001086f, 0.001953f, -0.000727f, -0.003744f, -0.000509f, 0.000114f, -0.000611f, -0.003899f, 0.001057f, 0.000805f, 0.001020f, 0.001092f, -0.000769f, -0.001617f, -0.000506f, -0.000815f, - 0.003219f, 0.001359f, -0.001189f, 0.000886f, -0.000243f, 0.000672f, 0.000098f, 0.009930f, 0.018867f, 0.007414f, 0.005058f, 0.005916f, -0.001715f, 0.001908f, -0.005377f, 0.009387f, 0.003703f, 0.009018f, 0.002704f, 0.003444f, -0.008213f, 0.010281f, 0.015231f, 0.001946f, 0.009879f, -0.001966f, -0.007997f, -0.007914f, 0.007251f, -0.002316f, 0.005792f, 0.001087f, 0.002328f, -0.004421f, 0.004486f, -0.001538f, -0.001587f, 0.007408f, 0.005147f, -0.003854f, 0.006917f, 0.000800f, 0.001273f, -0.001366f, -0.005197f, 0.001475f, 0.000399f, -0.002872f, -0.003270f, 0.003082f, 0.004302f, 0.001437f, -0.001502f, 0.002055f, 0.000175f, 0.004598f, -0.002745f, -0.000371f, -0.004533f, 0.000562f, 0.004454f, 0.003022f, -0.002055f, 0.000016f, 0.001569f, -0.004003f, -0.000297f, -0.002723f, -0.001529f, 0.000873f, 0.001069f, 0.002744f, -0.003181f, 0.001412f, -0.003660f, 0.000353f, 0.004545f, 0.001629f, 0.000898f, -0.002844f, 0.000428f, 0.000376f, -0.004739f, -0.001225f, 0.000552f, 0.000841f, 0.001878f, 0.000797f, -0.000102f, -0.022037f, -0.001202f, -0.004978f, 0.006255f, -0.004766f, 0.005145f, 0.000155f, - 0.004124f, -0.000574f, 0.003557f, -0.011013f, 0.003236f, -0.001294f, -0.003974f, 0.001935f, -0.004840f, 0.002967f, -0.004886f, -0.002579f, -0.010794f, 0.006140f, 0.012924f, -0.005074f, -0.001721f, -0.001479f, -0.002124f, 0.001969f, 0.002558f, 0.003747f, -0.009602f, 0.002866f, -0.005985f, -0.001712f, -0.000345f, 0.004921f, 0.001857f, -0.002474f, 0.001019f, 0.001048f, 0.003498f, 0.003592f, -0.006007f, -0.001973f, 0.000842f, -0.004365f, -0.003916f, -0.000738f, -0.002805f, 0.001184f, 0.003323f, 0.000449f, 0.000555f, -0.000789f, 0.003097f, 0.008432f, 0.004732f, -0.005175f, 0.001020f, 0.001915f, -0.002591f, 0.002974f, 0.000748f, -0.003312f, -0.000340f, 0.003800f, 0.000381f, 0.003638f, -0.004915f, -0.001136f, 0.002911f, 0.000146f, -0.001632f, -0.003396f, -0.000282f, -0.001799f, 0.002786f, -0.000791f, 0.001732f, -0.000833f, -0.000383f, -0.040453f, -0.015181f, 0.008214f, 0.002961f, -0.005196f, 0.005749f, 0.004739f, 0.007590f, -0.001834f, -0.003312f, 0.006631f, 0.000294f, -0.004466f, 0.009031f, -0.010108f, -0.013153f, -0.006214f, -0.007051f, 0.004615f, 0.006650f, -0.000150f, 0.001730f, 0.010471f, - 0.004629f, -0.010604f, -0.004773f, -0.006522f, 0.001974f, -0.009846f, -0.008571f, -0.000518f, 0.001353f, -0.003764f, -0.004098f, -0.005999f, -0.003094f, -0.005488f, -0.005358f, -0.002015f, 0.000489f, -0.001955f, -0.000290f, -0.003698f, -0.000543f, -0.002831f, -0.006231f, 0.013535f, 0.001128f, 0.003211f, -0.005486f, 0.003595f, -0.000322f, 0.001846f, -0.004398f, -0.000165f, -0.000685f, -0.003668f, -0.002273f, -0.001663f, 0.004430f, 0.003226f, 0.003475f, 0.002157f, 0.002703f, -0.000606f, 0.000077f, -0.003172f, -0.000546f, -0.000137f, -0.000211f, 0.004173f, 0.001168f, 0.002455f, 0.002582f, -0.001859f, -0.004452f, 0.001943f, -0.001686f, -0.000781f, 0.001874f, 0.005345f, -0.000543f, 0.021219f, 0.007790f, 0.017098f, 0.002689f, 0.001165f, -0.006842f, 0.002644f, 0.010226f, 0.003868f, 0.000744f, 0.006891f, -0.006146f, -0.002724f, 0.005590f, -0.004230f, 0.001950f, 0.009856f, 0.003167f, 0.001371f, 0.003140f, -0.001759f, 0.004282f, -0.003216f, 0.000119f, 0.001703f, 0.000581f, -0.002473f, -0.002694f, 0.001100f, 0.010129f, -0.003236f, 0.002516f, -0.009288f, -0.004978f, 0.004310f, 0.010672f, -0.008152f, - 0.000077f, 0.005182f, 0.001305f, 0.002001f, -0.006767f, -0.002322f, -0.005847f, -0.010201f, -0.002695f, -0.005651f, -0.006008f, 0.004911f, 0.001956f, 0.001730f, -0.003508f, -0.002106f, -0.000689f, -0.009796f, -0.000913f, 0.005571f, -0.003892f, 0.004481f, 0.009105f, 0.001435f, 0.006033f, 0.004025f, 0.000350f, -0.001764f, 0.005236f, -0.006553f, -0.000302f, -0.000342f, 0.004167f, 0.002067f, 0.003840f, 0.000203f, 0.004258f, -0.000210f, 0.000889f, 0.000705f, 0.004532f, 0.000088f, 0.000055f, 0.004111f, -0.002179f, 0.002583f, 0.000903f, 0.000740f, -0.001303f, 0.025767f, -0.005654f, -0.007917f, 0.001269f, 0.005924f, 0.004823f, 0.004930f, -0.001434f, 0.005318f, 0.001673f, -0.006327f, -0.012654f, 0.008472f, 0.002281f, 0.006128f, 0.003666f, -0.003373f, 0.001495f, -0.004851f, -0.008274f, 0.008595f, -0.005376f, -0.010303f, 0.001103f, -0.001693f, 0.001281f, -0.001029f, -0.001031f, -0.002620f, -0.004071f, 0.003030f, 0.006957f, -0.010044f, 0.009830f, -0.008499f, -0.011072f, 0.001072f, 0.002987f, -0.006263f, 0.004944f, -0.000892f, 0.003143f, -0.005394f, -0.002653f, 0.009158f, 0.003771f, 0.009273f, - 0.002491f, 0.000698f, 0.002981f, -0.000033f, 0.000378f, 0.004855f, -0.000391f, 0.000852f, -0.004304f, -0.002963f, -0.002534f, 0.003417f, -0.003338f, -0.002886f, 0.005562f, -0.000169f, 0.006225f, 0.000938f, -0.004483f, 0.007401f, 0.005800f, -0.000480f, 0.003794f, -0.003803f, -0.006203f, 0.002393f, -0.002251f, -0.004500f, 0.000421f, 0.003950f, 0.005414f, -0.002037f, 0.001713f, 0.002599f, -0.000324f, 0.001109f, -0.005357f, 0.002061f, 0.001901f, -0.002700f, 0.021591f, 0.026307f, -0.004035f, 0.000161f, -0.013238f, -0.001497f, -0.009661f, -0.007224f, -0.002309f, -0.004940f, 0.007447f, 0.000004f, 0.005776f, -0.012354f, 0.010265f, -0.007780f, 0.010483f, 0.000373f, 0.008323f, -0.003008f, 0.010491f, 0.003451f, -0.004999f, 0.002214f, -0.007460f, 0.004948f, -0.004159f, 0.011815f, 0.003518f, 0.007766f, -0.012926f, -0.007401f, -0.003175f, -0.006548f, -0.002746f, -0.004481f, 0.000416f, 0.015971f, -0.007386f, 0.008031f, 0.013532f, 0.001919f, 0.005948f, 0.000080f, -0.003039f, -0.006319f, -0.004824f, 0.000673f, -0.003483f, 0.008172f, -0.005300f, 0.003747f, 0.009882f, -0.001301f, -0.000821f, -0.000792f, - 0.008081f, 0.008740f, 0.002733f, -0.004058f, -0.003562f, -0.002143f, 0.003412f, -0.008007f, 0.001499f, -0.001436f, -0.002209f, 0.000113f, 0.005281f, 0.000472f, 0.007480f, 0.006854f, 0.001353f, 0.001645f, -0.003261f, -0.000163f, 0.007690f, -0.000993f, 0.000451f, 0.003228f, -0.004114f, 0.000079f, -0.004708f, -0.005120f, 0.000738f, 0.000739f, -0.001031f, -0.020502f, -0.018371f, 0.008183f, -0.002437f, 0.010123f, -0.005760f, -0.004755f, -0.006875f, -0.005642f, -0.002609f, -0.016179f, -0.005932f, 0.006231f, 0.008700f, 0.003593f, -0.011273f, -0.003200f, -0.005410f, 0.004785f, 0.016313f, 0.009137f, 0.003990f, 0.000644f, 0.001241f, 0.000853f, 0.002871f, 0.008442f, 0.000691f, 0.002225f, -0.004794f, 0.000404f, -0.006874f, 0.002703f, 0.003372f, 0.006111f, 0.000802f, -0.004156f, -0.002081f, 0.008054f, -0.003727f, 0.003051f, 0.001661f, 0.002933f, 0.010287f, -0.005698f, -0.008666f, 0.003282f, 0.007339f, 0.001955f, 0.007335f, 0.008799f, 0.004257f, 0.006107f, 0.002368f, 0.001330f, 0.004845f, 0.014654f, -0.008127f, 0.000011f, 0.002425f, 0.001319f, -0.006299f, -0.001100f, 0.004889f, -0.000064f, - -0.005649f, 0.002273f, 0.010641f, -0.008625f, 0.002835f, -0.008168f, 0.004752f, 0.003231f, 0.001325f, 0.000333f, -0.003845f, -0.003832f, 0.007490f, 0.004051f, 0.001541f, -0.002268f, 0.005253f, -0.000736f, 0.000033f, -0.003626f, 0.003875f, 0.001448f, -0.041269f, -0.014405f, -0.000926f, -0.004118f, -0.010177f, 0.006217f, 0.008302f, 0.014006f, 0.004603f, 0.008806f, -0.008177f, -0.017255f, 0.008036f, -0.004078f, 0.000432f, -0.009291f, 0.009140f, -0.005489f, -0.000434f, 0.008494f, -0.023539f, 0.002268f, 0.012242f, -0.022847f, -0.006040f, -0.008098f, 0.001105f, 0.000846f, 0.005588f, -0.006358f, 0.007407f, 0.001050f, -0.011978f, -0.006179f, 0.001415f, -0.001544f, -0.005935f, 0.005214f, 0.013925f, 0.002967f, 0.003851f, -0.002244f, -0.003469f, 0.008115f, 0.001481f, -0.004092f, -0.020007f, -0.003199f, 0.002521f, -0.010156f, 0.004814f, 0.004084f, 0.000808f, -0.007853f, -0.007014f, -0.008372f, 0.017955f, 0.004749f, -0.002741f, 0.003460f, -0.015269f, 0.001775f, -0.007150f, -0.008230f, 0.007945f, -0.001377f, 0.000099f, -0.005198f, -0.019103f, 0.002555f, 0.005801f, 0.003334f, -0.001397f, 0.011275f, - 0.000374f, -0.004760f, -0.000759f, -0.007442f, 0.011703f, 0.006352f, 0.003273f, -0.001960f, 0.000795f, 0.003746f, -0.003485f, 0.001451f, 0.001613f, 0.000533f, 0.043790f, 0.011029f, 0.011302f, 0.009602f, -0.002796f, 0.000378f, 0.045032f, 0.013006f, -0.003726f, 0.027509f, -0.015431f, 0.011477f, 0.002412f, 0.007015f, 0.011243f, -0.003476f, -0.007849f, 0.008477f, -0.001542f, -0.027198f, 0.006954f, 0.007053f, 0.005757f, 0.012948f, 0.008202f, 0.008457f, -0.007662f, 0.001689f, -0.007399f, -0.003860f, 0.008061f, 0.002676f, -0.015877f, -0.009480f, -0.013307f, -0.019811f, -0.003034f, 0.004087f, 0.009677f, 0.008354f, 0.007197f, 0.006036f, -0.002934f, 0.010363f, 0.005765f, -0.012611f, -0.004825f, 0.003364f, 0.009498f, 0.000228f, 0.002048f, 0.016723f, -0.002995f, -0.001416f, -0.004333f, -0.000872f, 0.008522f, -0.007278f, 0.000126f, -0.010294f, -0.009147f, -0.005861f, 0.010714f, 0.014725f, -0.004273f, 0.001190f, -0.002838f, -0.009141f, -0.006196f, 0.002375f, -0.010589f, -0.002815f, -0.002830f, -0.006845f, 0.018758f, 0.004110f, 0.006275f, 0.005469f, -0.000544f, 0.000024f, 0.003241f, 0.000985f, - 0.005899f, 0.003718f, 0.000105f, -0.000597f, 0.044544f, 0.026341f, 0.001874f, 0.016732f, 0.012748f, 0.003666f, 0.019290f, 0.005463f, -0.000087f, -0.005979f, -0.004472f, -0.012568f, -0.034179f, -0.002510f, 0.003296f, -0.011634f, -0.006670f, -0.001288f, 0.023819f, 0.007834f, -0.006215f, 0.000273f, 0.001629f, -0.003386f, 0.010027f, -0.001665f, -0.006224f, -0.004196f, -0.005869f, 0.003799f, -0.008611f, -0.020936f, 0.000445f, -0.010913f, -0.016994f, 0.003357f, 0.007285f, 0.010652f, 0.005947f, 0.009432f, -0.006441f, -0.018029f, -0.011816f, -0.016214f, 0.006344f, 0.015261f, 0.012509f, 0.008143f, 0.015169f, 0.000421f, 0.009467f, 0.020674f, -0.017117f, 0.003111f, -0.007746f, 0.000110f, 0.005899f, 0.006186f, 0.010002f, -0.000875f, -0.020915f, -0.016100f, 0.003438f, -0.004530f, -0.005969f, -0.003952f, -0.004592f, -0.014265f, 0.001233f, 0.009718f, -0.001067f, 0.007411f, -0.004466f, -0.000351f, -0.000831f, 0.003721f, 0.014158f, 0.010033f, 0.008619f, -0.008167f, 0.000451f, -0.004902f, 0.000560f, -0.013106f, 0.002620f, 0.002196f, 0.001410f, -0.000245f, -0.001623f, -0.003760f, 0.003265f, 0.000168f, - 0.005910f, 0.010848f, -0.022256f, 0.002756f, -0.017035f, 0.007619f, -0.032524f, -0.000881f, -0.010791f, -0.016775f, 0.030030f, 0.016989f, -0.010714f, -0.026970f, -0.006827f, -0.009837f, -0.023575f, 0.018346f, 0.000978f, -0.016289f, -0.006061f, 0.009427f, -0.015429f, -0.010491f, -0.008107f, -0.018276f, -0.007017f, -0.000365f, -0.014793f, -0.013410f, 0.018832f, -0.007026f, -0.005879f, -0.001732f, -0.004210f, 0.016019f, -0.017743f, -0.008283f, 0.003747f, -0.004720f, -0.000020f, -0.004019f, 0.009236f, -0.016813f, 0.005992f, -0.026885f, 0.002737f, -0.007683f, -0.010738f, 0.028248f, 0.002935f, -0.010431f, 0.005386f, 0.005909f, -0.022799f, 0.015826f, -0.003858f, -0.004902f, -0.001726f, 0.009053f, -0.003770f, 0.000410f, -0.010917f, 0.005948f, 0.007400f, 0.012717f, -0.010976f, -0.028144f, 0.019658f, -0.002244f, 0.008118f, 0.009632f, -0.005829f, 0.005561f, 0.014536f, -0.018554f, 0.000999f, -0.006532f, -0.002018f, -0.019260f, 0.006577f, -0.002989f, 0.000778f, -0.000475f, 0.002555f, -0.003236f, -0.002910f, 0.005311f, -0.004876f, 0.003849f, 0.001133f, -0.003612f, 0.002181f, 0.000599f, -0.042512f, -0.023705f, - 0.005324f, -0.015120f, 0.001833f, -0.010931f, -0.005656f, -0.016026f, -0.011024f, 0.008063f, 0.023885f, 0.025087f, 0.003995f, 0.017699f, -0.012225f, 0.030926f, 0.022712f, -0.018101f, -0.016274f, 0.005116f, 0.005109f, 0.026138f, 0.009492f, 0.016733f, -0.006033f, 0.006701f, -0.003395f, -0.002815f, -0.005539f, 0.024437f, 0.010945f, 0.023406f, 0.021269f, 0.004077f, -0.001254f, -0.010363f, 0.010268f, -0.001237f, -0.021410f, -0.014288f, -0.004070f, -0.011078f, -0.002470f, -0.011385f, -0.009980f, 0.006745f, -0.003022f, -0.007211f, 0.017879f, 0.021058f, -0.012122f, -0.004065f, 0.028743f, 0.011709f, -0.019624f, -0.019312f, -0.006952f, 0.007249f, -0.000911f, -0.003608f, -0.013962f, 0.011780f, 0.003644f, -0.004565f, 0.003284f, 0.003225f, -0.017311f, -0.007647f, 0.001658f, -0.006552f, -0.008399f, -0.009107f, 0.023517f, -0.018437f, -0.016488f, 0.006757f, 0.012076f, 0.017162f, -0.008696f, -0.002809f, 0.001680f, -0.007934f, 0.008236f, -0.001255f, 0.006192f, -0.005187f, -0.002101f, 0.001574f, 0.002427f, -0.002988f, -0.002560f, -0.000251f, -0.003134f, -0.016170f, -0.023757f, -0.020397f, -0.000177f, -0.016048f, - -0.020658f, 0.005338f, -0.001781f, -0.028758f, 0.020546f, 0.003697f, -0.001759f, 0.010279f, 0.031671f, 0.030318f, 0.013044f, -0.037020f, 0.013758f, 0.009888f, -0.036333f, -0.000450f, -0.017546f, -0.008455f, 0.018699f, -0.021906f, 0.012748f, 0.000063f, -0.003789f, -0.007784f, 0.003764f, -0.001755f, 0.006285f, -0.004154f, -0.019460f, 0.018968f, 0.008931f, 0.022704f, -0.002364f, -0.007541f, -0.010948f, 0.009248f, -0.009867f, 0.026808f, 0.005620f, 0.016141f, -0.020824f, 0.016678f, 0.000640f, 0.005968f, -0.013518f, 0.004639f, -0.016054f, -0.002430f, -0.016467f, 0.006837f, 0.011386f, -0.021758f, 0.000886f, -0.017907f, 0.008436f, 0.010756f, 0.010367f, -0.001304f, -0.030903f, 0.000181f, 0.008165f, -0.002540f, 0.013743f, -0.029442f, 0.007589f, -0.012174f, 0.003977f, -0.010293f, 0.002160f, 0.007777f, -0.003318f, 0.000025f, -0.003204f, -0.003706f, 0.001196f, -0.007830f, 0.010037f, 0.002401f, -0.000237f, -0.012560f, -0.001157f, 0.001483f, -0.000889f, 0.005479f, -0.005460f, 0.001371f, -0.000555f, -0.002650f, 0.044506f, 0.053900f, 0.022604f, 0.018769f, -0.031053f, 0.029875f, 0.043472f, -0.047551f, - 0.005732f, 0.030784f, 0.005412f, -0.056707f, -0.005609f, -0.030798f, 0.009982f, 0.011243f, -0.014275f, -0.005637f, 0.010388f, -0.026050f, -0.002024f, -0.010222f, -0.012731f, 0.005054f, -0.019681f, 0.021239f, 0.015213f, 0.027475f, -0.013562f, 0.004474f, -0.002910f, -0.011233f, 0.034777f, -0.000703f, -0.015918f, -0.007569f, 0.007563f, -0.007498f, -0.009030f, -0.010688f, 0.017724f, 0.006541f, 0.024616f, -0.001760f, 0.009066f, 0.032207f, -0.020382f, 0.004258f, -0.013819f, 0.025553f, -0.009981f, 0.011944f, 0.005139f, -0.001038f, -0.009625f, -0.018234f, -0.012252f, 0.005117f, 0.023176f, -0.021762f, 0.019565f, 0.023043f, 0.011657f, 0.026934f, -0.013103f, -0.010735f, 0.017624f, -0.003057f, -0.003198f, -0.024877f, -0.001505f, -0.020527f, 0.004284f, 0.025974f, 0.012818f, 0.006532f, 0.011983f, 0.007077f, -0.011097f, -0.005047f, -0.019430f, 0.022045f, 0.000995f, -0.008777f, 0.005899f, 0.001976f, -0.010179f, 0.005352f, -0.001397f, 0.006317f, -0.000987f, 0.009591f, 0.004665f, -0.020561f, -0.070739f, -0.029435f, -0.050922f, -0.027246f, -0.021880f, 0.011854f, -0.032765f, -0.033147f, -0.016125f, -0.044348f, - -0.014669f, 0.033654f, -0.001235f, 0.001442f, -0.009283f, -0.007770f, -0.004426f, 0.003149f, -0.000768f, -0.029685f, -0.004961f, -0.005792f, 0.042936f, -0.005513f, 0.038145f, 0.003193f, -0.010571f, 0.010059f, 0.031353f, -0.001570f, 0.000072f, -0.012657f, -0.003977f, -0.013292f, 0.007248f, -0.005585f, -0.011628f, 0.005791f, -0.015618f, 0.012522f, 0.012389f, 0.002502f, 0.027393f, -0.012488f, 0.013819f, -0.011675f, 0.015276f, 0.010568f, 0.028861f, 0.004024f, -0.012185f, 0.015707f, -0.002306f, -0.009742f, 0.036720f, -0.002739f, -0.002552f, 0.021352f, 0.006256f, 0.028736f, -0.022697f, -0.021816f, -0.003660f, -0.009447f, -0.003349f, -0.035312f, -0.008376f, 0.012262f, -0.005142f, -0.015198f, -0.025203f, 0.001686f, 0.007236f, -0.012427f, -0.012268f, -0.021611f, -0.008071f, 0.009178f, 0.009091f, 0.019134f, -0.003455f, -0.001767f, -0.001072f, 0.006380f, 0.007244f, 0.001291f, 0.011716f, 0.003328f, 0.000893f, -0.001638f, -0.001573f, 0.008669f, -0.004133f, 0.008565f, 0.009231f, -0.000431f}, - {-0.005154f, 0.002787f, -0.001446f, 0.001705f, -0.001002f, 0.001433f, -0.002977f, 0.000142f, -0.000111f, -0.000330f, 0.000690f, 0.001478f, -0.000045f, -0.000131f, -0.001599f, -0.000630f, 0.000692f, 0.000401f, -0.000180f, 0.000629f, -0.000185f, 0.000223f, -0.000694f, -0.000466f, -0.000466f, -0.000152f, 0.000070f, -0.000340f, -0.000237f, 0.000800f, -0.000454f, 0.000483f, -0.000439f, -0.000068f, -0.000337f, 0.000427f, 0.000158f, 0.000346f, 0.000579f, 0.000719f, 0.000269f, 0.000194f, -0.000057f, 0.000082f, 0.000108f, -0.000130f, 0.000132f, 0.001823f, -0.002086f, -0.000280f, -0.000384f, -0.000519f, 0.000338f, -0.001036f, 0.000352f, -0.000024f, 0.000472f, 0.000414f, -0.000822f, -0.000292f, 0.001254f, -0.000132f, 0.000268f, -0.000233f, 0.000545f, 0.001150f, 0.001330f, 0.000226f, 0.000573f, -0.000020f, -0.001050f, -0.000032f, 0.000114f, -0.000228f, 0.000004f, 0.000578f, -0.000603f, -0.000811f, 0.000353f, -0.000392f, -0.000362f, -0.000569f, -0.000025f, 0.000597f, 0.000150f, -0.000177f, -0.000217f, -0.000239f, -0.000004f, 0.000132f, -0.000320f, 0.000117f, -0.000366f, 0.000220f, -0.005238f, -0.003708f, - -0.001823f, -0.001359f, -0.001056f, -0.001071f, -0.000380f, -0.000790f, -0.000255f, -0.000495f, -0.001302f, 0.000254f, 0.000654f, -0.000104f, 0.000370f, -0.000246f, -0.000679f, -0.000670f, -0.001022f, -0.000344f, 0.000236f, 0.000031f, -0.000579f, 0.000386f, -0.000698f, -0.000679f, 0.000439f, -0.000000f, 0.000014f, 0.000359f, 0.000398f, 0.000108f, -0.000166f, -0.000203f, -0.000277f, 0.000138f, 0.000062f, -0.000358f, 0.000182f, -0.000711f, -0.000316f, -0.000178f, -0.000084f, -0.000508f, -0.000112f, -0.000189f, -0.000021f, -0.007452f, -0.000981f, 0.000557f, 0.000129f, 0.000525f, 0.000077f, -0.000426f, 0.000288f, -0.000332f, -0.000331f, -0.000683f, -0.000544f, 0.000254f, -0.000191f, 0.000458f, -0.000439f, -0.000008f, -0.000424f, 0.000124f, 0.000774f, -0.000213f, 0.000580f, 0.000016f, -0.000498f, -0.000119f, 0.000703f, 0.000329f, 0.000464f, 0.000490f, -0.000694f, 0.000466f, -0.000272f, -0.000073f, -0.000366f, -0.000199f, 0.000227f, 0.000294f, 0.000185f, -0.000187f, 0.000571f, 0.000462f, 0.000306f, -0.000180f, -0.000337f, 0.000036f, -0.000274f, 0.000046f, 0.008773f, 0.006964f, 0.001664f, 0.003111f, - 0.000766f, 0.002404f, 0.001711f, 0.000510f, 0.001723f, 0.000675f, 0.001310f, 0.000552f, -0.000456f, 0.001291f, 0.000932f, -0.000365f, -0.000102f, -0.002427f, -0.000244f, 0.000115f, 0.001492f, 0.000160f, 0.000074f, 0.000745f, 0.000078f, 0.000674f, 0.000644f, 0.000095f, -0.000032f, 0.000235f, 0.001025f, 0.000767f, 0.000669f, -0.000068f, -0.000239f, 0.000039f, 0.000487f, -0.000178f, -0.000029f, 0.000520f, 0.000193f, -0.000259f, 0.000008f, 0.000112f, -0.000493f, 0.000642f, -0.000353f, 0.015448f, 0.005604f, 0.002767f, 0.001580f, 0.001027f, 0.000958f, 0.000984f, 0.001536f, 0.000427f, 0.002530f, 0.000394f, 0.000196f, 0.001146f, -0.000640f, 0.000310f, -0.000307f, -0.000231f, -0.000467f, 0.001697f, 0.000872f, -0.000087f, 0.001219f, -0.000815f, -0.000259f, -0.000254f, 0.001904f, -0.000130f, 0.000660f, 0.000208f, 0.000915f, 0.000220f, -0.000320f, 0.000557f, 0.000616f, -0.000243f, 0.000196f, 0.000325f, 0.000139f, 0.000455f, -0.000163f, 0.000514f, 0.000376f, -0.001187f, 0.000239f, 0.000209f, 0.000205f, 0.000919f, 0.005963f, -0.004425f, -0.001482f, -0.002076f, -0.001209f, -0.001257f, - 0.000860f, -0.000742f, -0.001777f, -0.000514f, -0.002379f, -0.000626f, -0.001011f, -0.002384f, -0.000547f, 0.000464f, -0.001429f, -0.000553f, 0.000268f, -0.001704f, -0.000035f, 0.001827f, 0.000462f, 0.000206f, -0.000830f, -0.000032f, 0.000697f, -0.000055f, -0.000762f, -0.000915f, 0.000905f, -0.000149f, -0.001090f, 0.000032f, -0.000443f, 0.001301f, -0.000005f, 0.000543f, -0.000188f, 0.001112f, -0.000749f, 0.000397f, 0.000192f, 0.000198f, 0.000047f, 0.000223f, -0.000002f, -0.000465f, 0.000757f, 0.000477f, -0.016282f, -0.009141f, -0.001923f, -0.002248f, -0.001621f, -0.001962f, -0.002873f, -0.000222f, 0.000024f, -0.000793f, 0.000653f, -0.000735f, 0.000064f, -0.000049f, -0.000982f, -0.000993f, -0.001671f, -0.000538f, 0.001534f, -0.001488f, -0.000229f, 0.001463f, 0.000860f, -0.000210f, 0.000469f, -0.000195f, -0.001625f, -0.000765f, -0.001347f, -0.000425f, -0.000003f, -0.000314f, 0.000681f, -0.001366f, -0.001149f, -0.000040f, -0.001398f, -0.001029f, -0.001009f, -0.001095f, 0.001084f, -0.000343f, -0.001473f, -0.000453f, 0.000316f, 0.000430f, -0.000546f, -0.000728f, -0.000395f, -0.001349f, -0.010083f, 0.005841f, - 0.002020f, 0.001061f, 0.000859f, 0.000997f, 0.000316f, -0.000942f, 0.000163f, -0.000509f, -0.000300f, 0.001908f, 0.000977f, 0.001662f, 0.001460f, 0.001749f, -0.001466f, 0.000814f, 0.001636f, 0.000410f, 0.001412f, -0.001668f, 0.000231f, -0.000324f, -0.000230f, -0.000542f, 0.000537f, -0.000101f, -0.000079f, 0.001719f, -0.001741f, -0.000361f, 0.000520f, 0.001048f, -0.000530f, 0.000897f, -0.000750f, -0.000938f, 0.001176f, -0.000500f, -0.000155f, -0.000218f, 0.000382f, -0.000023f, 0.000489f, -0.000494f, -0.000341f, -0.000433f, -0.000256f, -0.000359f, 0.000854f, 0.000235f, 0.000209f, -0.000442f, -0.000807f, 0.000196f, 0.014879f, 0.006006f, 0.001349f, 0.003317f, 0.002712f, 0.000452f, 0.001250f, 0.003135f, 0.001527f, -0.000137f, 0.000754f, 0.000339f, -0.000400f, 0.000857f, 0.002819f, 0.000587f, 0.003351f, 0.001536f, -0.002628f, 0.000451f, 0.000170f, 0.000502f, 0.002496f, 0.001310f, 0.001050f, -0.000265f, -0.000302f, -0.000379f, -0.000333f, 0.000327f, -0.000454f, 0.000758f, 0.000321f, 0.001051f, -0.000145f, -0.000328f, 0.000482f, 0.000852f, 0.000568f, -0.000142f, -0.001106f, -0.000543f, - -0.000578f, 0.001018f, 0.000849f, 0.001156f, 0.000744f, 0.000141f, 0.000255f, 0.000985f, 0.000893f, 0.000637f, 0.000193f, 0.000120f, 0.000596f, 0.000512f, 0.016606f, 0.004693f, 0.002123f, 0.002533f, 0.000481f, 0.002446f, -0.000350f, -0.001010f, 0.000002f, 0.000588f, 0.000322f, -0.000130f, 0.000531f, 0.002498f, -0.000319f, -0.001647f, -0.001060f, 0.001185f, 0.000372f, 0.001390f, 0.002339f, 0.001951f, -0.000079f, 0.001285f, -0.001394f, 0.000113f, -0.001070f, 0.001490f, 0.000937f, -0.001777f, 0.001067f, -0.000867f, 0.000179f, -0.000707f, 0.001081f, -0.000682f, 0.001341f, 0.000985f, 0.000886f, 0.001621f, 0.000599f, -0.000070f, -0.000351f, -0.000031f, 0.000280f, 0.001803f, 0.000006f, 0.000016f, 0.000186f, 0.000859f, 0.000648f, 0.000040f, -0.000172f, -0.000295f, -0.000915f, -0.000193f, 0.002348f, -0.007105f, -0.002799f, -0.001204f, -0.001549f, -0.000795f, -0.000545f, 0.000045f, 0.001072f, -0.001092f, -0.001842f, 0.001715f, -0.002226f, -0.002244f, -0.000338f, -0.000570f, 0.001057f, -0.000683f, 0.000015f, -0.002172f, -0.001196f, -0.002608f, -0.002732f, -0.003174f, -0.000369f, 0.000658f, - -0.002110f, -0.000651f, 0.000372f, 0.000167f, 0.000156f, -0.000347f, -0.002091f, -0.001406f, 0.000998f, 0.000294f, -0.000440f, 0.001971f, -0.001303f, -0.000681f, 0.000571f, 0.001182f, 0.001083f, -0.000245f, -0.000247f, 0.000423f, 0.000364f, -0.001390f, 0.000184f, -0.000845f, -0.000289f, 0.000034f, -0.000473f, 0.000005f, 0.000964f, 0.000131f, -0.000123f, 0.000159f, -0.000934f, 0.000540f, 0.000881f, -0.000242f, 0.000024f, -0.018019f, -0.005642f, -0.003423f, -0.001387f, -0.002469f, -0.001931f, -0.000598f, -0.001372f, -0.000604f, -0.001839f, -0.002537f, -0.001776f, -0.000638f, -0.003700f, -0.000914f, -0.001493f, -0.002280f, -0.000257f, 0.000365f, 0.001234f, -0.001344f, -0.001839f, -0.000711f, 0.001548f, 0.001936f, 0.002425f, 0.001266f, -0.000046f, -0.001211f, -0.000520f, -0.000009f, -0.001445f, 0.000590f, 0.001014f, 0.001232f, -0.000834f, -0.000751f, -0.000662f, -0.000357f, -0.000269f, -0.000533f, 0.000990f, -0.000302f, 0.000648f, -0.001261f, -0.002135f, -0.000923f, -0.000064f, 0.001062f, -0.001846f, 0.000600f, -0.000876f, 0.000859f, -0.000892f, 0.000506f, -0.000743f, -0.000058f, -0.000477f, -0.000069f, - 0.000334f, 0.000671f, -0.000450f, -0.000641f, -0.010335f, 0.002755f, 0.000764f, 0.000010f, 0.001809f, -0.001738f, 0.000461f, -0.003998f, -0.001304f, 0.001387f, 0.000980f, 0.002574f, -0.000194f, 0.002807f, -0.001646f, -0.000419f, 0.001338f, -0.002452f, -0.000906f, -0.001446f, 0.002732f, -0.000182f, -0.002281f, 0.001134f, 0.002175f, -0.001953f, -0.001492f, -0.001760f, 0.000495f, -0.000420f, 0.000931f, -0.000683f, -0.000568f, -0.000484f, -0.001075f, 0.001532f, -0.001260f, 0.000284f, 0.000999f, -0.000144f, 0.001156f, -0.000698f, 0.002548f, 0.000365f, -0.000274f, -0.000918f, -0.000908f, 0.000017f, -0.001043f, -0.001275f, -0.000796f, 0.000176f, 0.000858f, -0.000147f, 0.000223f, -0.001118f, -0.001112f, -0.001583f, -0.000639f, -0.000525f, -0.000428f, 0.000415f, 0.000620f, 0.008925f, 0.012845f, 0.004407f, 0.004475f, 0.006064f, 0.004422f, -0.000633f, 0.000911f, -0.000491f, 0.000861f, 0.000733f, 0.001164f, 0.000813f, 0.002240f, 0.000829f, 0.001426f, 0.000419f, 0.004381f, 0.001005f, 0.002181f, 0.001249f, 0.001177f, 0.003404f, 0.000874f, 0.004268f, 0.002277f, -0.000870f, 0.003085f, 0.000789f, - 0.001560f, 0.003013f, 0.000690f, 0.001795f, -0.000837f, -0.000312f, 0.000931f, 0.001356f, -0.001758f, 0.001576f, -0.000979f, -0.002000f, -0.001092f, 0.001659f, 0.002574f, 0.001887f, -0.000271f, 0.000612f, 0.000667f, 0.000933f, 0.001401f, 0.000754f, 0.001573f, 0.000899f, -0.001318f, -0.000039f, 0.001134f, 0.001433f, 0.000525f, 0.000466f, 0.000350f, -0.001420f, -0.000481f, -0.000878f, 0.030895f, 0.002251f, -0.001489f, 0.002405f, -0.001597f, 0.003414f, 0.001130f, 0.003589f, -0.001728f, 0.000276f, 0.000097f, 0.002130f, -0.003807f, 0.000694f, 0.002582f, -0.000595f, -0.000491f, 0.003152f, 0.005142f, -0.002170f, -0.001088f, 0.000554f, 0.002588f, -0.001175f, 0.001713f, 0.000022f, -0.001540f, -0.001418f, -0.001209f, 0.001014f, 0.001630f, 0.001716f, -0.001182f, 0.001901f, -0.001167f, 0.001846f, 0.001809f, -0.000490f, -0.001036f, 0.000603f, -0.001724f, -0.002628f, 0.000681f, -0.001811f, 0.000834f, 0.000136f, 0.000394f, 0.001056f, 0.000097f, 0.001293f, 0.000208f, -0.001793f, 0.000817f, -0.000496f, 0.000955f, -0.001318f, -0.000133f, 0.000165f, 0.001009f, -0.000733f, -0.002094f, -0.000408f, - -0.000839f, -0.010502f, -0.010212f, -0.002306f, 0.000782f, -0.000450f, -0.001551f, -0.001662f, -0.002292f, -0.000609f, 0.001674f, -0.000553f, -0.000591f, -0.002353f, 0.002459f, -0.000151f, -0.002053f, -0.001763f, 0.004272f, -0.003892f, 0.000383f, 0.002834f, -0.000356f, 0.000459f, -0.003768f, 0.001186f, -0.001629f, 0.000886f, -0.002627f, -0.001715f, 0.000405f, 0.000681f, -0.001241f, -0.001376f, 0.000106f, -0.000571f, 0.000162f, -0.001607f, -0.000927f, 0.001657f, -0.000207f, -0.000794f, -0.000498f, 0.002109f, 0.000912f, -0.001220f, -0.001870f, -0.001648f, 0.000526f, -0.000262f, -0.000804f, 0.000169f, 0.000324f, -0.000911f, 0.002492f, 0.001357f, -0.000290f, -0.000205f, -0.000682f, 0.000294f, -0.000762f, -0.000741f, -0.000785f, -0.000156f, -0.001451f, -0.001138f, -0.001939f, 0.000436f, -0.002073f, -0.000083f, -0.000543f, -0.000506f, -0.000136f, -0.004148f, -0.003490f, -0.004269f, -0.003000f, -0.002258f, -0.001435f, 0.000288f, 0.000003f, -0.001114f, -0.000379f, 0.000964f, 0.003710f, -0.003241f, 0.001651f, -0.001117f, -0.001968f, 0.002536f, -0.000173f, 0.000466f, 0.003444f, 0.000454f, 0.001478f, -0.002175f, - -0.000455f, -0.006243f, -0.000657f, 0.001131f, 0.000819f, 0.000494f, 0.000681f, 0.000831f, -0.001322f, -0.001898f, 0.001472f, -0.000203f, 0.001394f, 0.000636f, -0.001582f, 0.001311f, -0.000082f, -0.004434f, -0.003564f, -0.000645f, -0.003371f, 0.000409f, 0.001124f, -0.000270f, -0.000826f, -0.000429f, 0.000207f, -0.001045f, -0.000265f, -0.000234f, -0.000544f, 0.001029f, 0.000335f, 0.000318f, -0.000565f, -0.000479f, 0.001738f, 0.000408f, -0.001047f, 0.001137f, -0.000224f, -0.000818f, -0.001737f, 0.000014f, -0.000927f, -0.000334f, 0.001299f, 0.000979f, 0.001379f, -0.020058f, -0.004573f, 0.000297f, -0.003990f, 0.001612f, 0.000399f, 0.004813f, -0.002252f, 0.000288f, -0.001323f, 0.003227f, -0.006579f, -0.006310f, 0.002659f, -0.003057f, 0.004745f, 0.001719f, -0.003815f, -0.006683f, -0.000153f, -0.001890f, -0.003244f, -0.001328f, 0.000763f, 0.001084f, -0.001567f, 0.005724f, 0.000306f, -0.000568f, -0.002394f, 0.001950f, 0.002168f, 0.002337f, 0.002510f, -0.000310f, -0.001486f, -0.000561f, 0.001484f, -0.000115f, 0.001791f, -0.001683f, -0.000663f, -0.000578f, 0.002075f, 0.001668f, -0.001818f, 0.002361f, - -0.001315f, -0.001641f, 0.000202f, -0.000744f, -0.001562f, 0.001613f, -0.001849f, -0.000243f, 0.000470f, -0.000445f, -0.000753f, 0.000426f, 0.001548f, -0.000957f, 0.001484f, -0.001224f, 0.000996f, -0.000678f, -0.000767f, -0.000477f, 0.000299f, 0.001920f, 0.000347f, 0.001799f, -0.001141f, 0.018397f, 0.016163f, 0.003383f, 0.004321f, -0.000857f, 0.005283f, 0.004238f, 0.005322f, -0.000215f, 0.002141f, 0.001288f, -0.004987f, -0.004222f, 0.002328f, 0.000460f, -0.003568f, -0.003773f, -0.002102f, 0.000249f, 0.002156f, 0.000635f, 0.005063f, 0.004620f, 0.002036f, -0.001059f, -0.001105f, 0.003062f, 0.002876f, 0.000234f, 0.002523f, -0.000802f, 0.003222f, 0.000188f, -0.000669f, 0.004461f, 0.002341f, 0.003660f, 0.002383f, 0.000812f, 0.002588f, 0.001298f, 0.000917f, 0.002381f, -0.001271f, 0.000485f, 0.003181f, -0.000023f, -0.001998f, 0.001881f, 0.001891f, 0.001341f, -0.001393f, -0.000025f, 0.001870f, 0.002776f, -0.001349f, 0.003355f, 0.003857f, -0.000652f, -0.002031f, 0.000367f, 0.000915f, 0.000606f, 0.001715f, 0.000005f, 0.000639f, 0.001308f, -0.000890f, 0.000107f, -0.001281f, -0.000322f, - -0.001741f, -0.001006f, -0.000178f, 0.022313f, 0.001823f, -0.000633f, 0.001580f, 0.001076f, -0.003654f, 0.000957f, 0.001001f, 0.000003f, 0.002384f, 0.003411f, 0.005109f, -0.002275f, -0.002299f, -0.003605f, -0.002909f, 0.003294f, -0.000249f, 0.004756f, -0.001133f, -0.001152f, 0.001972f, 0.004133f, 0.001654f, -0.004147f, 0.003297f, -0.001209f, 0.002640f, -0.001367f, 0.002052f, -0.002496f, 0.001547f, -0.000197f, 0.002407f, 0.000295f, 0.001378f, 0.000739f, -0.004195f, -0.002310f, -0.000379f, -0.000846f, -0.000381f, -0.001307f, 0.002044f, 0.000777f, 0.004352f, -0.000666f, -0.002955f, -0.001725f, -0.000284f, 0.000265f, -0.003288f, 0.001119f, -0.001110f, -0.000142f, -0.000306f, -0.001923f, 0.001771f, 0.003364f, -0.001043f, 0.001734f, 0.000415f, -0.001880f, -0.000165f, -0.001789f, -0.001481f, 0.000306f, -0.002615f, -0.001863f, 0.001112f, -0.000129f, 0.000603f, 0.001810f, -0.002475f, 0.003013f, 0.000309f, -0.001221f, -0.002995f, 0.000875f, -0.001100f, 0.006445f, -0.001539f, -0.006152f, -0.004161f, -0.005546f, 0.005130f, -0.004097f, 0.001137f, 0.006269f, -0.000277f, -0.006358f, 0.000436f, -0.006674f, - 0.005563f, -0.001934f, 0.005545f, 0.000042f, -0.002111f, 0.004776f, 0.000179f, 0.000999f, -0.003588f, -0.004524f, -0.000728f, 0.001604f, 0.000975f, -0.000875f, -0.002091f, 0.002120f, -0.000646f, 0.001587f, 0.002425f, 0.002956f, 0.001363f, 0.001641f, -0.005973f, 0.000511f, -0.001354f, -0.002029f, 0.000819f, 0.002974f, -0.002495f, -0.004574f, -0.002026f, 0.001358f, 0.000523f, -0.004017f, -0.001643f, 0.001894f, 0.002750f, -0.002408f, -0.001577f, -0.001850f, 0.002813f, 0.003750f, 0.000755f, -0.001242f, 0.000423f, 0.002692f, -0.001283f, -0.000090f, -0.001759f, 0.001893f, -0.002201f, -0.000242f, 0.002611f, 0.001579f, -0.000761f, -0.000380f, -0.000065f, -0.000825f, -0.022514f, -0.022810f, -0.003697f, -0.011181f, -0.006940f, -0.003969f, -0.006206f, -0.000756f, 0.004680f, -0.010226f, 0.003734f, -0.002095f, 0.003406f, 0.000588f, 0.002087f, -0.004243f, 0.001075f, -0.000533f, -0.002214f, -0.009381f, -0.001914f, -0.004879f, -0.005966f, -0.000624f, 0.001505f, 0.000315f, -0.002031f, 0.001297f, -0.001928f, -0.000572f, 0.004979f, -0.000108f, -0.001661f, 0.000308f, 0.003257f, 0.004378f, 0.002933f, -0.000000f, - 0.002342f, 0.002707f, -0.000266f, 0.000024f, -0.004873f, 0.001788f, -0.004027f, 0.000752f, 0.003883f, -0.002676f, -0.004876f, 0.001407f, -0.002735f, -0.002617f, 0.000540f, -0.000041f, -0.002310f, 0.001121f, -0.000548f, 0.005253f, 0.002952f, 0.001607f, 0.000651f, 0.001926f, -0.000190f, 0.000579f, -0.002069f, -0.003727f, -0.000613f, 0.000321f, -0.002658f, -0.001847f, -0.001458f, -0.001246f, -0.001504f, 0.000832f, -0.000770f, -0.000228f, -0.001668f, -0.013345f, 0.024830f, 0.019552f, 0.001183f, 0.004006f, 0.001544f, 0.004364f, 0.006569f, 0.001547f, 0.006379f, 0.001191f, -0.006784f, 0.004528f, 0.005374f, 0.001639f, 0.001585f, 0.004079f, 0.005295f, -0.005297f, 0.004412f, -0.002780f, 0.003872f, 0.000617f, -0.003263f, 0.000657f, 0.004384f, 0.002534f, -0.005269f, 0.002567f, -0.002168f, 0.007644f, -0.000658f, 0.001804f, -0.001190f, -0.004894f, 0.004941f, 0.004948f, 0.002337f, 0.001275f, -0.000232f, 0.001791f, 0.005247f, 0.001239f, 0.003750f, 0.000487f, 0.002604f, 0.001439f, -0.000355f, 0.002859f, -0.003448f, -0.005340f, -0.002359f, -0.004070f, -0.003464f, -0.001762f, -0.003557f, 0.004791f, - 0.003395f, 0.000424f, -0.000857f, -0.001697f, -0.000563f, -0.000117f, 0.000036f, 0.000243f, 0.000665f, 0.001006f, 0.000552f, -0.000094f, -0.001262f, -0.001069f, -0.000179f, -0.000095f, -0.000458f, 0.000544f, -0.000554f, 0.002889f, -0.000648f, 0.003792f, 0.033314f, -0.013044f, -0.007067f, 0.001210f, -0.000069f, -0.001648f, -0.009243f, -0.003948f, 0.002370f, -0.000446f, -0.001316f, -0.001806f, 0.001435f, -0.007601f, -0.002161f, 0.003957f, 0.007420f, 0.004045f, 0.003337f, -0.002368f, -0.002237f, -0.004373f, 0.005124f, -0.007202f, -0.001245f, 0.001793f, -0.004736f, 0.001564f, 0.002057f, 0.005811f, -0.008860f, -0.000740f, -0.000143f, -0.001828f, 0.002372f, -0.008209f, -0.004274f, 0.009054f, 0.005969f, 0.001248f, -0.001539f, 0.005411f, -0.001569f, -0.000693f, 0.001022f, 0.004233f, 0.002449f, -0.002606f, 0.000570f, -0.001519f, 0.003478f, -0.005532f, -0.002481f, -0.003348f, -0.003514f, 0.006783f, 0.001873f, 0.000847f, -0.002979f, -0.000245f, -0.001001f, -0.001190f, -0.003124f, 0.000510f, -0.002961f, -0.000122f, 0.001038f, 0.002616f, -0.004500f, -0.003121f, -0.003976f, -0.001213f, 0.002164f, 0.000384f, - 0.002869f, -0.000379f, -0.003695f, -0.000388f, -0.001662f, 0.001730f, -0.000154f, 0.009896f, 0.022791f, 0.003742f, 0.008698f, 0.007856f, 0.007541f, 0.002518f, 0.005639f, 0.003472f, -0.001630f, -0.004625f, -0.002932f, -0.001334f, 0.006459f, -0.005511f, -0.006099f, -0.000416f, -0.000271f, -0.002495f, -0.004666f, 0.013818f, 0.012985f, 0.009770f, 0.000489f, -0.005571f, 0.000999f, 0.000930f, -0.002769f, 0.003184f, 0.002049f, 0.005579f, 0.000662f, 0.002281f, -0.000252f, -0.003832f, 0.006333f, 0.005242f, 0.003792f, -0.000900f, -0.004993f, 0.000313f, -0.000368f, -0.001393f, -0.010214f, 0.007377f, -0.004644f, 0.008507f, 0.000503f, 0.004603f, -0.000957f, 0.005075f, 0.007721f, 0.001543f, -0.003465f, -0.000255f, 0.001433f, -0.002536f, 0.001375f, -0.000983f, -0.003250f, -0.001787f, 0.001092f, -0.000792f, 0.003249f, 0.001146f, -0.005443f, 0.000349f, -0.000730f, -0.005877f, -0.001363f, 0.001200f, -0.002218f, 0.000648f, 0.005009f, 0.002052f, -0.000271f, -0.001725f, -0.001305f, 0.000108f, 0.002196f, -0.000599f, 0.002373f, -0.023931f, -0.003178f, -0.014917f, 0.000168f, 0.002625f, -0.005064f, -0.008724f, - -0.010090f, -0.009567f, -0.005664f, -0.007803f, -0.001913f, -0.000531f, -0.002016f, 0.002504f, -0.001556f, 0.000506f, 0.006124f, 0.002748f, -0.000606f, 0.014487f, -0.003181f, 0.002900f, -0.002119f, 0.001214f, 0.002103f, 0.000769f, -0.000814f, 0.002126f, 0.006785f, 0.002040f, 0.002402f, 0.000759f, 0.002714f, 0.005728f, 0.007897f, 0.002480f, 0.009582f, -0.002567f, -0.008261f, 0.008343f, -0.002646f, -0.001758f, -0.001682f, 0.004716f, 0.007321f, 0.005517f, -0.000141f, -0.001903f, -0.004189f, -0.010682f, 0.006580f, 0.007474f, 0.005291f, -0.006380f, 0.003861f, 0.000995f, -0.000642f, 0.006052f, 0.001023f, 0.004064f, -0.003381f, 0.001982f, -0.004215f, -0.000407f, 0.003657f, -0.001068f, 0.002751f, -0.000582f, -0.001539f, -0.001506f, -0.005134f, 0.000517f, 0.000385f, -0.000044f, 0.000988f, -0.001140f, -0.006333f, 0.000480f, 0.000332f, -0.041877f, -0.018801f, 0.008526f, -0.001637f, -0.001434f, 0.001485f, -0.005246f, -0.004612f, -0.001577f, -0.002086f, -0.007335f, 0.005169f, 0.000564f, 0.010938f, -0.006122f, -0.005265f, -0.008957f, -0.005021f, -0.009225f, 0.000740f, 0.003368f, -0.013779f, 0.008870f, - 0.007627f, -0.001103f, 0.001510f, 0.005775f, 0.000842f, 0.005080f, -0.010447f, -0.010510f, -0.005841f, -0.006898f, -0.005318f, 0.017000f, 0.005530f, -0.003761f, -0.006124f, -0.008727f, 0.004113f, 0.002325f, -0.004153f, 0.003381f, 0.003336f, -0.006161f, 0.000555f, 0.001356f, 0.004818f, -0.005724f, 0.013990f, -0.006156f, -0.004919f, 0.002169f, -0.001535f, -0.000096f, -0.004246f, -0.001612f, 0.000409f, 0.008883f, -0.002794f, 0.012809f, 0.002706f, 0.000815f, 0.001402f, 0.003405f, -0.003882f, -0.001407f, -0.005095f, -0.004115f, -0.003913f, -0.000040f, 0.006879f, -0.004527f, -0.003344f, -0.001929f, -0.002619f, -0.002431f, -0.000332f, -0.001616f, -0.002422f, -0.002121f, 0.006582f, 0.021207f, 0.010855f, 0.006791f, 0.004559f, -0.007416f, 0.000723f, -0.005993f, 0.009385f, -0.000988f, -0.001281f, 0.003235f, 0.002044f, 0.002221f, -0.000310f, 0.003351f, 0.001171f, 0.003536f, -0.002919f, 0.009234f, 0.001216f, -0.000805f, 0.027568f, 0.001536f, -0.002132f, -0.007032f, 0.004084f, -0.006539f, 0.006135f, 0.014895f, -0.001189f, 0.003670f, 0.003641f, -0.007623f, -0.008582f, 0.000284f, 0.000159f, 0.006558f, - -0.004256f, 0.000263f, -0.000474f, 0.004837f, 0.004934f, 0.008304f, 0.003091f, 0.002896f, 0.003408f, 0.000373f, 0.005439f, 0.002568f, -0.010074f, 0.002175f, -0.005204f, -0.012884f, -0.001137f, 0.003653f, 0.000047f, 0.001102f, -0.001735f, 0.000272f, -0.000435f, -0.000045f, 0.001605f, 0.000306f, 0.005860f, -0.003500f, -0.000568f, 0.001169f, 0.001216f, 0.000194f, -0.002278f, 0.004090f, 0.006891f, 0.006795f, 0.001402f, -0.001408f, -0.000712f, 0.002436f, -0.000339f, -0.000824f, -0.000157f, 0.001360f, 0.003175f, -0.000531f, -0.001247f, -0.002255f, -0.001427f, 0.031032f, -0.009047f, -0.003429f, -0.008416f, 0.015617f, 0.005746f, 0.001287f, 0.003162f, -0.002285f, -0.003653f, 0.005494f, 0.000502f, -0.005423f, 0.001395f, -0.007151f, -0.005417f, 0.000350f, -0.007249f, 0.000980f, 0.002356f, -0.005355f, -0.009419f, 0.000892f, 0.000498f, 0.006367f, 0.010454f, 0.007288f, -0.004914f, -0.000080f, 0.006489f, 0.011864f, -0.012436f, 0.004686f, -0.002341f, -0.000209f, -0.005679f, -0.007975f, 0.000671f, 0.007151f, 0.002093f, 0.003199f, 0.004512f, -0.000501f, 0.003011f, -0.000722f, 0.002151f, 0.004586f, - -0.008304f, -0.005818f, 0.012885f, -0.001033f, -0.000409f, -0.002927f, 0.005141f, 0.016682f, 0.004169f, 0.002507f, 0.005405f, -0.004403f, -0.004971f, -0.000007f, -0.003713f, -0.009574f, 0.006147f, 0.000780f, -0.004778f, 0.002616f, 0.001425f, -0.002720f, -0.004501f, 0.006075f, -0.002105f, -0.007275f, 0.003388f, 0.003357f, 0.005128f, -0.005074f, 0.000461f, 0.002206f, -0.000897f, -0.001945f, 0.007691f, -0.000630f, 0.001410f, -0.003434f, -0.000457f, -0.000107f, 0.026496f, 0.025105f, -0.008171f, 0.006850f, 0.002069f, 0.005323f, 0.013470f, -0.001656f, -0.007029f, -0.002461f, 0.026019f, -0.014616f, -0.002777f, -0.007240f, -0.005803f, -0.011841f, 0.013016f, -0.003746f, -0.017680f, -0.013172f, -0.016130f, -0.006179f, 0.014300f, -0.001686f, 0.006756f, -0.002511f, -0.007290f, 0.006388f, 0.001894f, 0.008086f, -0.007760f, 0.007198f, 0.005722f, 0.002966f, 0.003333f, -0.012685f, 0.003682f, -0.010584f, 0.008996f, 0.019013f, 0.005521f, 0.005737f, -0.012056f, 0.017030f, 0.004570f, -0.001733f, -0.002610f, -0.003413f, 0.005347f, 0.008535f, 0.002089f, -0.001941f, -0.000473f, 0.002337f, -0.004088f, -0.002901f, - -0.003933f, -0.003019f, -0.000302f, 0.006261f, -0.004148f, 0.009339f, 0.003367f, 0.005728f, -0.001914f, -0.013303f, -0.008927f, 0.003433f, 0.000922f, -0.003948f, 0.004990f, -0.000218f, -0.000445f, 0.002713f, -0.001864f, 0.003934f, -0.000655f, -0.000427f, 0.001909f, -0.002282f, -0.000397f, -0.002471f, -0.001502f, -0.003108f, 0.002052f, 0.000178f, 0.000664f, -0.024932f, -0.014862f, 0.003570f, 0.001949f, -0.000149f, -0.010969f, 0.006484f, 0.003657f, -0.006627f, -0.017944f, 0.014609f, 0.003571f, 0.005411f, 0.008259f, 0.004852f, -0.002376f, 0.002644f, -0.004543f, 0.012122f, -0.010145f, -0.017551f, -0.000600f, -0.000919f, -0.008326f, -0.019076f, 0.000575f, -0.003966f, -0.010022f, -0.005574f, -0.003153f, 0.004194f, 0.000696f, 0.006923f, 0.013978f, -0.006024f, -0.011587f, 0.003569f, -0.001375f, 0.000062f, 0.005714f, -0.008280f, -0.007507f, -0.001094f, 0.006745f, -0.008952f, 0.007364f, -0.002634f, 0.014216f, -0.002110f, -0.004473f, -0.001754f, 0.000065f, 0.002770f, -0.016287f, 0.002273f, -0.014094f, 0.014328f, 0.000049f, 0.008963f, 0.005375f, -0.005594f, -0.000727f, -0.007390f, 0.003572f, -0.000874f, - 0.002833f, 0.002616f, -0.009702f, -0.001555f, -0.009359f, -0.004209f, 0.004164f, -0.002921f, -0.005744f, 0.002663f, -0.000088f, -0.009771f, -0.004782f, 0.000952f, 0.000332f, -0.004081f, 0.004230f, -0.002252f, -0.002484f, 0.001984f, -0.005825f, 0.002966f, -0.034515f, -0.015936f, -0.005796f, -0.003888f, -0.001051f, 0.003588f, -0.011998f, -0.008662f, 0.003198f, -0.010117f, 0.003194f, -0.011234f, -0.003483f, -0.010864f, -0.013057f, 0.013795f, 0.005757f, 0.002041f, -0.000809f, -0.011458f, -0.019333f, 0.009618f, -0.025361f, 0.009165f, 0.000399f, -0.008176f, 0.001358f, -0.005088f, 0.001964f, 0.017639f, -0.008878f, -0.000989f, -0.019052f, 0.014956f, -0.004410f, 0.006784f, -0.006698f, -0.002289f, -0.001533f, -0.000766f, 0.008899f, 0.003007f, 0.018515f, 0.022183f, -0.002316f, 0.000278f, -0.007336f, 0.000772f, -0.002848f, 0.003420f, 0.007102f, 0.000827f, 0.016107f, 0.004506f, -0.005965f, 0.002520f, 0.003355f, 0.000044f, -0.001116f, 0.000453f, 0.012250f, -0.009177f, -0.018384f, -0.007607f, 0.000292f, 0.004291f, 0.003216f, 0.009201f, -0.000912f, 0.003901f, -0.004645f, -0.007454f, -0.010234f, -0.008245f, - 0.000714f, -0.002679f, 0.005016f, 0.001273f, -0.002807f, -0.001342f, 0.008839f, -0.000196f, 0.004917f, -0.002170f, 0.001695f, -0.002200f, -0.002013f, -0.003383f, 0.044002f, 0.019643f, 0.013575f, 0.005631f, -0.005010f, -0.008003f, -0.013734f, 0.007615f, 0.013165f, 0.005438f, -0.006163f, 0.015536f, 0.008747f, 0.015532f, 0.001055f, -0.011242f, -0.004363f, 0.023323f, -0.024351f, -0.005007f, 0.016100f, -0.009543f, -0.005351f, 0.037667f, -0.004727f, 0.010764f, 0.034156f, -0.005486f, -0.002248f, -0.001003f, 0.004244f, -0.001899f, 0.014808f, 0.009520f, 0.012205f, -0.008646f, -0.020179f, 0.008059f, -0.007963f, 0.009687f, -0.003783f, 0.003513f, 0.014380f, 0.008325f, 0.000841f, 0.006320f, 0.002914f, 0.006085f, 0.013902f, 0.007831f, -0.001485f, 0.013511f, 0.005665f, 0.001921f, 0.003213f, 0.024892f, 0.014934f, 0.000023f, 0.013566f, -0.005993f, 0.017151f, -0.004281f, 0.003780f, -0.004878f, 0.002052f, 0.009822f, -0.005455f, -0.000400f, -0.000975f, 0.003405f, 0.000379f, -0.006447f, 0.000257f, -0.005523f, -0.009860f, 0.001645f, -0.013126f, 0.005096f, 0.008048f, -0.003301f, -0.005621f, -0.003782f, - 0.007050f, 0.002079f, 0.000377f, -0.002955f, 0.056788f, 0.025665f, -0.011502f, 0.004963f, 0.029342f, 0.000692f, 0.021190f, -0.006225f, 0.008382f, 0.017666f, -0.013309f, 0.001610f, 0.030825f, 0.027690f, 0.022538f, 0.007964f, 0.019357f, 0.003261f, 0.016969f, 0.005922f, 0.005135f, -0.010608f, -0.012457f, -0.017716f, -0.035105f, 0.011191f, 0.000416f, -0.009529f, -0.003359f, 0.012148f, -0.007979f, -0.001206f, 0.001371f, 0.006831f, -0.031106f, -0.005031f, 0.022573f, 0.017382f, -0.006281f, 0.011485f, 0.009808f, 0.006362f, -0.003813f, -0.007229f, -0.003140f, -0.004863f, -0.003150f, -0.011489f, -0.009763f, 0.007967f, -0.019381f, 0.006417f, 0.015902f, -0.004714f, -0.011345f, -0.017676f, 0.016584f, -0.000517f, -0.008376f, -0.005473f, -0.003824f, -0.006065f, 0.003493f, -0.002800f, -0.006165f, 0.006301f, 0.025815f, -0.012900f, -0.007759f, 0.003299f, -0.005016f, 0.005961f, 0.000237f, 0.013313f, 0.002572f, -0.001293f, -0.001116f, -0.013824f, -0.006526f, -0.002147f, 0.001178f, 0.001069f, 0.004948f, 0.003059f, 0.000576f, 0.002224f, 0.002572f, 0.008157f, 0.000674f, 0.000226f, -0.005296f, 0.002676f, - 0.003941f, 0.001634f, -0.022438f, -0.006261f, -0.026972f, -0.005867f, -0.026956f, 0.012954f, -0.025684f, 0.013814f, -0.004461f, -0.014870f, -0.004509f, -0.006963f, 0.031396f, 0.004869f, -0.022895f, 0.000437f, -0.014957f, -0.011784f, 0.015458f, -0.017467f, -0.016166f, -0.018231f, 0.027381f, -0.003692f, 0.018070f, -0.027879f, -0.014881f, 0.011089f, -0.013011f, 0.010576f, 0.030309f, 0.019919f, 0.018748f, 0.003213f, -0.003238f, -0.014725f, -0.020954f, -0.001122f, 0.004639f, -0.019400f, 0.000407f, -0.011434f, 0.005596f, 0.008565f, -0.022212f, -0.018853f, -0.034798f, -0.005441f, 0.002379f, -0.014955f, -0.021525f, 0.021194f, 0.001070f, 0.021769f, 0.021350f, -0.002628f, -0.003031f, -0.008680f, 0.012313f, 0.010672f, 0.001530f, 0.005273f, -0.001758f, -0.001096f, 0.010413f, -0.002753f, -0.012215f, -0.009380f, -0.015377f, -0.012909f, -0.004782f, -0.000600f, -0.002120f, -0.019429f, -0.011274f, 0.006324f, 0.001464f, -0.006914f, 0.008354f, -0.001707f, 0.000424f, 0.013134f, 0.010847f, 0.006986f, 0.002764f, 0.008408f, 0.001240f, 0.000219f, 0.003890f, 0.002762f, -0.001856f, 0.000798f, -0.038326f, -0.006605f, - 0.003372f, -0.003536f, 0.000053f, 0.010376f, -0.008491f, 0.009227f, 0.008731f, -0.006050f, 0.011820f, -0.016429f, 0.020590f, 0.014126f, 0.000701f, -0.015133f, 0.001215f, 0.010051f, -0.044783f, 0.009290f, 0.018257f, -0.032069f, 0.013194f, -0.016419f, -0.023530f, -0.021444f, 0.010889f, -0.005361f, -0.033438f, 0.017969f, 0.009610f, -0.020243f, -0.033831f, 0.006845f, 0.003985f, -0.010651f, -0.002465f, -0.017383f, 0.016336f, 0.013495f, 0.023771f, -0.019031f, 0.003094f, -0.025276f, -0.009567f, 0.004360f, -0.016175f, 0.006723f, -0.002012f, -0.012690f, -0.019083f, -0.020621f, 0.030153f, -0.020330f, -0.009619f, -0.007652f, 0.001259f, 0.013854f, 0.008210f, 0.010105f, 0.000098f, 0.011824f, -0.003985f, 0.001891f, -0.005024f, -0.012502f, 0.002460f, 0.026775f, 0.004148f, 0.000616f, -0.000110f, -0.017249f, 0.011215f, 0.018014f, 0.018794f, 0.003757f, 0.001394f, -0.000823f, -0.001508f, 0.002718f, 0.000363f, -0.008582f, -0.000195f, 0.001726f, 0.001255f, 0.000128f, 0.000169f, 0.006648f, -0.002312f, 0.000849f, -0.001685f, 0.000351f, 0.011585f, -0.025449f, -0.013522f, -0.026874f, 0.007652f, -0.004773f, - 0.010668f, -0.007323f, 0.005055f, 0.008798f, -0.008997f, -0.015345f, 0.022898f, -0.006008f, -0.010209f, 0.026603f, -0.005478f, -0.006200f, 0.030405f, -0.017591f, 0.004474f, 0.007443f, 0.002369f, -0.026814f, 0.000086f, -0.003913f, -0.016121f, 0.009215f, -0.012665f, 0.017058f, -0.003008f, 0.018987f, -0.020783f, 0.012918f, -0.036796f, 0.000406f, -0.020079f, 0.022401f, -0.003458f, 0.003061f, -0.003864f, -0.020420f, -0.001490f, 0.017789f, 0.046946f, 0.003464f, 0.002944f, 0.009975f, 0.016039f, -0.002726f, -0.004532f, 0.001465f, -0.000816f, 0.041290f, -0.003754f, 0.006358f, 0.016569f, -0.016096f, -0.027521f, 0.000083f, -0.029086f, -0.003573f, -0.014941f, -0.010711f, -0.005850f, -0.012280f, 0.006889f, 0.010227f, -0.016950f, 0.021366f, 0.017737f, -0.002547f, -0.004418f, -0.017470f, 0.012175f, 0.004319f, 0.011547f, -0.009799f, 0.004760f, -0.001914f, 0.008726f, 0.000995f, 0.008442f, -0.004319f, 0.006183f, -0.001063f, 0.000126f, 0.002052f, 0.009575f, 0.004585f, 0.002913f, -0.003177f, 0.000215f, 0.000863f, 0.044242f, 0.048216f, 0.000336f, -0.014794f, -0.011897f, 0.040382f, -0.026570f, -0.030269f, - 0.031458f, -0.028595f, 0.018366f, 0.005588f, 0.025444f, 0.023474f, 0.015827f, 0.002536f, -0.016093f, -0.013878f, 0.033029f, -0.014058f, -0.001464f, 0.008051f, 0.028131f, 0.040762f, -0.001287f, 0.027841f, -0.022859f, -0.023842f, 0.002646f, -0.008821f, 0.013114f, 0.008322f, -0.020389f, 0.002753f, 0.012887f, 0.033517f, 0.011396f, 0.013723f, 0.012570f, 0.014979f, 0.003823f, -0.001202f, 0.021244f, 0.003721f, 0.016982f, 0.027236f, 0.005652f, -0.011237f, -0.009558f, 0.024547f, 0.006403f, 0.050382f, 0.011733f, 0.019842f, -0.020594f, -0.032353f, -0.003144f, -0.037770f, -0.024221f, -0.008633f, -0.012941f, 0.001391f, -0.001955f, 0.000276f, 0.000488f, -0.028253f, -0.023404f, -0.012371f, -0.024166f, 0.008796f, 0.009562f, -0.007331f, -0.001898f, -0.022425f, -0.003544f, 0.006580f, -0.006407f, -0.001948f, 0.002266f, -0.014163f, 0.005888f, -0.004370f, 0.001670f, 0.002484f, 0.000065f, 0.000944f, 0.003053f, -0.003401f, 0.000513f, 0.003267f, -0.000142f, 0.000763f, 0.000945f, -0.021037f, -0.074026f, -0.030548f, -0.060417f, -0.013550f, -0.021133f, -0.008534f, 0.005490f, -0.019809f, -0.024006f, -0.038365f, - -0.030519f, 0.027258f, -0.004872f, -0.024412f, -0.025958f, 0.005865f, -0.034537f, -0.048705f, 0.008013f, -0.011347f, -0.010463f, -0.010480f, 0.009340f, -0.029039f, 0.030517f, -0.017776f, 0.020717f, -0.014466f, -0.013902f, 0.000316f, 0.016725f, -0.023690f, -0.022640f, 0.012110f, -0.004311f, 0.033404f, -0.014684f, 0.019133f, 0.028780f, 0.013672f, -0.010535f, -0.004820f, -0.003049f, 0.023610f, -0.008334f, 0.015840f, 0.031862f, -0.026837f, -0.046802f, -0.018449f, 0.015820f, 0.019420f, -0.022107f, 0.036264f, -0.011732f, -0.013165f, -0.004432f, -0.004019f, -0.011290f, -0.029439f, -0.012475f, -0.030418f, -0.029136f, -0.018067f, 0.021415f, 0.005020f, -0.005215f, 0.001915f, 0.033137f, 0.031128f, 0.002152f, -0.014470f, 0.005893f, -0.003315f, 0.013612f, 0.004239f, -0.006009f, -0.013786f, -0.001289f, -0.002803f, -0.021865f, -0.005694f, 0.008246f, 0.022588f, -0.010185f, -0.000025f, 0.008581f, -0.012767f, -0.000458f, -0.000932f, 0.000324f, -0.006676f, 0.008426f, 0.000455f, 0.002150f, -0.001106f} -}; -#endif /* Sample Rate = 16000 */ const int16_t CRendBin_Combined_BRIR_max_num_iterations_16kHz = 23; @@ -5980,1327 +238,8 @@ const uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHAN const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][23]={{{77, 76, 77, 77, 77, 76, 77, 76, 77, 76, 77, 77, 77, 78, 76, 76, 77, 77, 77, 77, 77, 76, 80},{77, 76, 77, 77, 77, 76, 77, 76, 77, 76, 77, 77, 77, 78, 76, 76, 77, 77, 77, 77, 77, 76, 80}},{{76, 77, 77, 75, 77, 78, 77, 76, 77, 77, 76, 77, 77, 77, 77, 77, 76, 77, 76, 76, 77, 78, 80},{76, 77, 77, 75, 77, 78, 77, 76, 77, 77, 76, 77, 77, 77, 77, 77, 76, 77, 76, 76, 77, 78, 80}},{{77, 76, 76, 78, 75, 76, 74, 78, 77, 76, 77, 77, 77, 76, 76, 77, 78, 78, 77, 77, 77, 77, 80},{77, 76, 76, 78, 75, 76, 74, 78, 77, 76, 77, 77, 77, 76, 76, 77, 78, 78, 77, 77, 77, 77, 80}},{{76, 76, 76, 76, 77, 77, 76, 78, 77, 77, 77, 77, 78, 78, 77, 77, 77, 77, 77, 78, 77, 78, 80},{76, 76, 76, 76, 77, 77, 76, 78, 77, 77, 77, 77, 78, 78, 77, 77, 77, 77, 77, 78, 77, 78, 80}},{{76, 77, 77, 76, 77, 77, 75, 77, 77, 77, 76, 77, 77, 77, 77, 78, 77, 77, 77, 77, 76, 76, 80},{76, 77, 77, 76, 77, 77, 75, 77, 77, 77, 76, 77, 77, 77, 77, 78, 77, 77, 77, 77, 76, 76, 80}},{{77, 76, 77, 77, 77, 77, 77, 77, 76, 78, 76, 78, 75, 76, 77, 77, 76, 76, 77, 78, 78, 77, 80},{77, 76, 77, 77, 77, 77, 77, 77, 76, 78, 76, 78, 75, 76, 77, 77, 76, 76, 77, 78, 78, 77, 80}},{{77, 77, 75, 76, 76, 77, 77, 77, 77, 77, 77, 75, 77, 76, 76, 76, 77, 77, 76, 77, 76, 77, 80},{77, 77, 75, 76, 76, 77, 77, 77, 77, 77, 77, 75, 77, 76, 76, 76, 77, 77, 76, 77, 76, 77, 80}},{{75, 76, 77, 77, 75, 77, 75, 76, 76, 77, 77, 77, 78, 78, 77, 77, 76, 77, 78, 78, 78, 76, 80},{75, 76, 77, 77, 75, 77, 75, 76, 76, 77, 77, 77, 78, 78, 77, 77, 76, 77, 78, 78, 78, 76, 80}},{{77, 77, 77, 76, 77, 77, 76, 76, 76, 77, 77, 75, 76, 78, 78, 77, 77, 78, 78, 77, 76, 76, 80},{77, 77, 77, 76, 77, 77, 76, 76, 76, 77, 77, 75, 76, 78, 78, 77, 77, 78, 78, 77, 76, 76, 80}},{{76, 75, 76, 76, 77, 77, 77, 77, 77, 77, 74, 78, 77, 78, 78, 77, 76, 77, 77, 77, 77, 76, 80},{76, 75, 76, 76, 77, 77, 77, 77, 77, 77, 74, 78, 77, 78, 78, 77, 76, 77, 77, 77, 77, 76, 80}},{{76, 76, 77, 76, 77, 77, 76, 76, 76, 76, 77, 77, 76, 76, 77, 75, 77, 76, 76, 76, 77, 77, 80},{76, 76, 77, 76, 77, 77, 76, 76, 76, 76, 77, 77, 76, 76, 77, 75, 77, 76, 76, 76, 77, 77, 80}},{{76, 76, 77, 75, 78, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 77, 76, 78, 76, 77, 76, 77, 80},{76, 76, 77, 75, 78, 77, 77, 77, 77, 77, 77, 77, 77, 76, 78, 77, 76, 78, 76, 77, 76, 77, 80}},{{76, 77, 77, 76, 76, 77, 77, 75, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 77, 76, 76, 78, 80},{76, 77, 77, 76, 76, 77, 77, 75, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 77, 76, 76, 78, 80}},{{74, 76, 74, 76, 75, 76, 76, 76, 76, 77, 77, 78, 77, 78, 75, 76, 77, 76, 78, 76, 78, 77, 80},{74, 76, 74, 76, 75, 76, 76, 76, 76, 77, 77, 78, 77, 78, 75, 76, 77, 76, 78, 76, 78, 77, 80}},{{76, 77, 77, 77, 76, 78, 77, 76, 75, 77, 77, 77, 76, 78, 77, 78, 78, 78, 77, 76, 77, 75, 80},{76, 77, 77, 77, 76, 78, 77, 76, 75, 77, 77, 77, 76, 78, 77, 78, 78, 78, 77, 76, 77, 75, 80}}}; const uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz = 77; const float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]={0.223532f, 0.226827f, 0.248830f, 0.208782f, 0.220391f, 0.219790f, 0.231187f, 0.248730f, 0.251408f, 0.263698f, 0.243858f, 0.281483f, 0.283080f, 0.261660f, 0.273527f}; -#ifdef IVAS_FLOAT_FIXED const Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz_fx[15]={7346, 7452, 7924, 6787, 7147, 7305, 7606, 8132, 8167, 8571, 8071, 9147, 9364, 8602, 8907}; -#endif const uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]={{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77},{46, 46, 46, 46, 46, 46, 46, 49, 49, 53, 53, 53, 55, 55, 61, 61, 61, 65, 67, 67, 67, 67, 67, 67, 69, 72, 72, 72, 73, 73, 75, 75, 75, 75, 75, 75, 75, 75, 75, 77}}; -#ifndef IVAS_FLOAT_FIXED -const float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]={ - { - {0.010832f, 0.002712f, -0.004173f, 0.000188f, -0.002118f, 0.002726f, 0.010885f, -0.000914f, -0.007116f, -0.010756f, 0.001174f, -0.008083f, -0.002332f, -0.002440f, 0.001864f, 0.005777f, -0.008313f, -0.004040f, -0.002553f, 0.000455f, -0.004910f, -0.008631f, -0.003371f, -0.007258f, -0.003869f, 0.001568f, -0.000354f, -0.003350f, -0.000643f, -0.000920f, 0.000933f, -0.007724f, -0.001925f, 0.003126f, 0.006652f, 0.003422f, -0.000986f, -0.000941f, 0.000320f, -0.007324f, -0.004978f, 0.001622f, 0.000486f, 0.001950f, -0.001956f, 0.001611f, -0.001588f, 0.002919f, -0.001525f, 0.005462f, 0.005550f, -0.000510f, -0.000125f, 0.004259f, 0.001657f, -0.000296f, 0.000411f, -0.008943f, -0.005621f, -0.001358f, 0.003347f, -0.003679f, -0.007892f, -0.004968f, -0.003761f, -0.005550f, 0.003359f, -0.010204f, 0.003130f, 0.010428f, -0.005504f, -0.002617f, -0.005058f, 0.005816f, -0.002310f, -0.006421f, 0.001701f, -0.009205f, 0.009235f, -0.003556f, -0.000119f, 0.008653f, -0.005126f, 0.003328f, -0.000784f, 0.001148f, -0.006096f, -0.012503f, -0.002727f, 0.004827f, -0.003367f, 0.002923f, 0.004129f, 0.003619f, -0.002924f, 0.002040f, - -0.007896f, -0.001437f, 0.001716f, 0.003166f, -0.000481f, -0.000184f, 0.000726f, 0.001899f, -0.006684f, -0.005343f, 0.002006f, 0.004474f, -0.002488f, 0.004692f, 0.008633f, -0.011933f, 0.001419f, -0.005681f, -0.004175f, 0.002728f, -0.001795f, 0.007420f, -0.002599f, 0.006700f, 0.003149f, 0.001171f, -0.000820f, 0.003639f, -0.000148f, -0.000614f, -0.004107f, 0.010858f, -0.007844f, -0.002127f, 0.003367f, 0.004316f, -0.000613f, -0.003470f, 0.001619f, -0.003841f, 0.003699f, 0.000990f, 0.001028f, 0.000119f, -0.001937f, -0.001107f, 0.005025f, -0.014096f, 0.002796f, -0.001594f, -0.008915f, -0.001143f, 0.006375f, 0.003674f, 0.003685f, -0.005967f, 0.004348f, -0.017398f, 0.012247f, -0.006959f, 0.002170f, 0.001696f, -0.000326f, -0.004296f, -0.001011f, -0.010096f, -0.012397f, 0.002466f, -0.002965f, 0.002920f, 0.002952f, 0.009792f, -0.009331f, 0.000528f, 0.006426f, 0.006200f, -0.007716f, -0.008181f, -0.004684f, -0.007203f, -0.000139f, -0.002904f, -0.005772f, -0.004621f, -0.000715f, -0.012553f, -0.012018f, -0.003134f, 0.001492f, -0.001782f, 0.000175f, -0.002117f, 0.001792f, -0.006976f, 0.006378f, -0.003308f, - 0.003281f, -0.001682f, 0.002072f, -0.006462f, 0.001097f, 0.003108f, 0.003892f, 0.001219f, 0.000047f, 0.000846f, -0.002910f, -0.005557f, 0.008629f, 0.006321f, 0.002087f, -0.004483f, 0.010858f, 0.007065f, -0.004372f, 0.006554f, -0.001654f, -0.006902f, -0.002551f, -0.003185f, -0.006420f, 0.002309f, 0.002701f, 0.000716f, -0.005367f, 0.007097f, -0.006979f, 0.003533f, 0.005444f, -0.002855f, -0.001149f, -0.012072f, -0.006967f, -0.012810f, 0.000373f, 0.013930f, 0.006364f, -0.005457f, 0.002356f, 0.001740f, 0.022282f, -0.006678f, 0.006376f, 0.010766f, -0.002109f, 0.009775f, 0.004036f, 0.006602f, -0.008821f, -0.003416f, -0.010329f, -0.004943f, 0.007003f, -0.000369f, -0.004885f, 0.000999f, -0.007208f, -0.000763f, -0.004694f, 0.006419f, -0.002843f, -0.001138f, -0.002545f, 0.003282f, 0.001633f, -0.000181f, -0.000758f, 0.002617f, -0.010802f, -0.008698f, 0.003861f, 0.000684f, -0.000940f, -0.005866f, 0.013113f, 0.003368f, -0.001536f, 0.003907f, 0.005289f, -0.000400f, 0.002701f, 0.000783f, -0.006251f, 0.005351f, -0.007462f, -0.006276f, 0.007039f, -0.008686f, 0.007235f, 0.002582f, -0.005949f, 0.009969f, - 0.005940f, 0.003404f, -0.002649f, 0.008874f, 0.002490f, -0.002092f, -0.002517f, 0.002066f, 0.001412f, -0.002624f, -0.011000f, -0.002703f, -0.001859f, 0.002238f, -0.006249f, 0.007523f, -0.002645f, 0.005501f, -0.006974f, 0.023049f, -0.019580f, -0.017219f, -0.005712f, 0.017590f, -0.002731f, -0.009912f, 0.011974f, -0.008383f, 0.005533f, -0.000691f, -0.013528f, -0.009286f, 0.010980f, -0.007505f, 0.005328f, -0.007819f, 0.007186f, -0.003536f, -0.002271f, -0.001078f, -0.007540f, 0.003641f, 0.005163f, -0.007590f, 0.001608f, -0.003963f, 0.001329f, 0.003155f, -0.001259f, 0.004622f, 0.001285f, 0.003752f, 0.006089f, -0.008217f, -0.006060f, 0.007073f, 0.000228f, 0.005463f, 0.005361f, -0.005250f, -0.007705f, -0.003161f, 0.001206f, 0.009856f, -0.010873f, 0.004344f, -0.012115f, -0.014761f, -0.003509f, -0.008459f, -0.001442f, -0.009986f, -0.018927f, -0.010037f, 0.008784f, 0.008212f, 0.005353f, -0.006252f, 0.018162f, -0.005484f, 0.003142f, -0.009875f, -0.009321f, 0.002682f, 0.000158f, -0.000653f, -0.011718f, -0.003536f, -0.000435f, -0.001927f, -0.002016f, -0.005759f, -0.004816f, 0.002262f, -0.001272f, -0.002112f, - 0.030034f, -0.009616f, 0.014166f, -0.003566f, 0.018986f, -0.003499f, -0.002673f, 0.003299f, 0.004034f, -0.003062f, -0.021320f, 0.002226f, -0.001811f, -0.005658f, -0.000042f, -0.000963f, 0.007982f, -0.002411f, 0.018689f, -0.002392f, 0.002417f, -0.001298f, 0.010755f, -0.002043f, 0.003971f, -0.008608f, 0.000079f, -0.005939f, -0.005728f, -0.001818f, -0.001331f, -0.000004f, 0.007140f, -0.011894f, -0.003000f, 0.003876f, -0.000848f, 0.008005f, 0.002412f, -0.002244f, -0.004846f, -0.005583f, -0.005149f, -0.011022f, 0.004697f, 0.004302f, 0.004704f, -0.019102f, -0.002050f, 0.012933f, 0.008212f, -0.003391f, 0.000219f, -0.006245f, -0.012042f, -0.014161f, 0.014590f, -0.004743f, -0.008166f, -0.005708f, 0.008511f, 0.005259f, 0.001866f, 0.005898f, 0.004047f, 0.005589f, -0.001722f, -0.014348f, -0.002965f, -0.007106f, -0.005026f, 0.008648f, 0.008631f, -0.002555f, 0.013476f, 0.014636f, -0.045502f, 0.023720f, 0.008101f, -0.002889f, -0.002831f, -0.000703f, -0.007649f, -0.013262f, -0.003554f, 0.005270f, 0.018054f, 0.011900f, -0.018092f, -0.004089f, -0.011114f, 0.006221f, -0.001738f, -0.024063f, -0.007733f, 0.013514f, - 0.007962f, 0.004121f, 0.011249f, 0.006584f, -0.002106f, -0.002277f, 0.002710f, -0.009597f, -0.006106f, 0.001318f, 0.009698f, -0.005162f, -0.009758f, -0.013563f, -0.007348f, 0.005741f, 0.019950f, 0.000778f, -0.004513f, 0.003761f, -0.005155f, -0.016071f, 0.000288f, -0.011513f, -0.009434f, -0.010765f, 0.005480f, -0.001194f, -0.015326f, 0.002154f, 0.004634f, 0.005138f, -0.016503f, -0.009179f, -0.006671f, -0.004345f, -0.002540f, -0.006205f, -0.003625f, -0.007851f, -0.016014f, -0.002087f, -0.013713f, -0.015742f, -0.010396f, -0.002903f, 0.001893f, -0.009284f, -0.014380f, 0.004087f, 0.010178f, -0.000331f, -0.002746f, -0.000827f, 0.007192f, -0.011101f, 0.007947f, -0.019134f, 0.006288f, -0.009773f, -0.002283f, 0.001800f, 0.004724f, -0.001352f, 0.008800f, -0.000330f, -0.002700f, -0.026457f, 0.011212f, -0.005334f, -0.006331f, 0.008805f, -0.015871f, -0.021124f, 0.007554f, -0.007682f, -0.010585f, -0.003478f, 0.017721f, 0.011332f, -0.007778f, -0.004394f, 0.007694f, -0.002926f, -0.001941f, 0.002196f, 0.007429f, 0.015254f, 0.008825f, 0.012316f, -0.003030f, -0.000773f, -0.000828f, -0.008484f, 0.000948f, -0.003657f, - 0.019956f, -0.016311f, -0.010617f, -0.008655f, -0.009294f, 0.005029f, 0.001543f, 0.007557f, -0.002633f, -0.010671f, -0.015735f, -0.004082f, -0.019297f, -0.024720f, -0.006521f, 0.000820f, 0.017669f, 0.004020f, -0.016983f, -0.003676f, 0.012669f, -0.005823f, 0.002944f, 0.004719f, 0.006079f, -0.011056f, -0.019436f, -0.007116f, -0.011205f, 0.028392f, 0.000348f, -0.008244f, 0.002799f, 0.005408f, -0.006178f, 0.004361f, 0.000218f, 0.016233f, 0.005320f, -0.000982f, 0.011271f, -0.001731f, -0.013450f, -0.002173f, -0.000985f, 0.013892f, -0.007410f, -0.001400f, -0.003934f, 0.002627f, -0.004007f, 0.001304f, 0.004567f, 0.006874f, 0.009344f, 0.006554f, 0.003038f, 0.024228f, 0.009441f, 0.008368f, -0.000922f, -0.018053f, 0.001298f, -0.014900f, 0.004804f, -0.009857f, 0.002619f, 0.000769f, 0.006034f, 0.029887f, 0.008277f, -0.003716f, 0.010461f, -0.007380f, 0.008895f, -0.004207f, 0.015141f, -0.007339f, -0.000144f, -0.010404f, 0.006865f, 0.012634f, -0.013643f, 0.028524f, -0.006836f, 0.003239f, -0.004343f, -0.006045f, 0.002793f, -0.006805f, -0.023630f, 0.005498f, -0.006062f, 0.000340f, -0.014683f, 0.005216f, - -0.005331f, -0.022236f, -0.011151f, -0.004653f, -0.021578f, 0.014416f, 0.030556f, 0.039829f, -0.035772f, -0.024335f, -0.015271f, 0.004665f, 0.008652f, -0.007386f, 0.004933f, -0.008356f, 0.003264f, 0.021235f, 0.014997f, -0.023769f, 0.038320f, 0.002295f, 0.023101f, 0.009307f, -0.005963f, -0.006307f, 0.021546f, -0.010265f, 0.014215f, 0.017005f, -0.000375f, -0.009469f, 0.002263f, 0.017511f, 0.010710f, 0.009687f, 0.008847f, -0.000024f, 0.004271f, 0.006798f, 0.022076f, 0.015732f, -0.009175f, -0.007931f, 0.000067f, -0.003369f, -0.000516f, -0.009370f, -0.005374f, 0.011537f, 0.019746f, 0.005873f, 0.028903f, -0.006307f, 0.031457f, 0.002579f, 0.015793f, 0.033861f, 0.024983f, 0.008591f, 0.008556f, 0.015902f, -0.001318f, -0.012091f, 0.001856f, 0.014959f, -0.006039f, -0.014117f, 0.002570f, -0.001429f, 0.031900f, 0.024908f, 0.001798f, 0.034610f, -0.000847f, 0.018933f, 0.011804f, 0.015058f, 0.000424f, -0.011037f, 0.017547f, -0.002554f, 0.020243f, 0.012492f, 0.040132f, -0.020752f, -0.000712f, -0.042319f, 0.012171f, -0.021139f, 0.000782f, 0.018622f, -0.003629f, 0.006179f, -0.024180f, -0.017627f, - 0.009119f, -0.014142f, 0.008566f, -0.008345f, 0.002619f, 0.022989f, -0.003670f, -0.020779f, 0.005882f, -0.008412f, 0.021788f, -0.022167f, -0.015812f, 0.009841f, 0.010471f, 0.016470f, 0.000537f, -0.000911f, 0.010164f, -0.005526f, -0.015641f, 0.010390f, -0.006530f, -0.011625f, 0.003537f, 0.012955f, -0.009120f, 0.023682f, 0.008990f, 0.000064f, 0.002705f, 0.012118f, 0.004558f, -0.038009f, 0.015562f, -0.002972f, -0.004532f, -0.005658f, 0.020289f, 0.001242f, 0.021594f, 0.002094f, 0.001406f, 0.003659f, -0.006405f, -0.001086f, 0.010119f, -0.011138f, 0.002314f, 0.036862f, 0.002431f, 0.027559f, 0.001293f, -0.003722f, -0.003625f, -0.015881f, -0.037260f, -0.024774f, 0.011214f, 0.018629f, -0.008096f, 0.029938f, 0.011024f, -0.017710f, -0.012521f, 0.027981f, 0.017250f, 0.019667f, 0.004349f, -0.004682f, -0.000447f, 0.002480f, -0.015923f, 0.000426f, -0.007732f, 0.012530f, 0.025007f, 0.010569f, 0.009513f, 0.028450f, 0.024078f, 0.020360f, 0.002439f, 0.008630f, 0.003148f, -0.002672f, -0.003519f, 0.006060f, -0.000428f, -0.014368f, 0.005211f, 0.017396f, 0.001517f, -0.002874f, 0.006568f, -0.037528f, - 0.014745f, -0.013955f, 0.011429f, 0.014927f, 0.013686f, -0.013069f, 0.009640f, 0.000128f, 0.001388f, 0.024844f, 0.018682f, 0.001868f, 0.010807f, 0.008367f, -0.001423f, -0.011614f, 0.004958f, 0.012964f, 0.001955f, 0.018168f, 0.006691f, 0.016592f, 0.031219f, 0.003182f, 0.013646f, 0.014271f, 0.017560f, 0.000990f, -0.008362f, 0.027133f, -0.008089f, 0.022240f, -0.022444f, -0.018217f, 0.029695f, 0.000321f, 0.011018f, 0.018213f, 0.026162f, 0.033302f, 0.015106f, 0.006198f, -0.013533f, 0.008879f, -0.001271f, -0.026101f, 0.025829f, 0.017119f, -0.021048f, 0.001113f, 0.003566f, -0.026004f, 0.012079f, 0.026482f, 0.016571f, 0.004303f, -0.065736f, -0.041149f, 0.012336f, 0.013077f, 0.025782f, 0.043419f, -0.013085f, -0.007572f, -0.015035f, -0.013653f, -0.017605f, -0.018358f, 0.000373f, 0.006555f, 0.004469f, 0.027308f, 0.000052f, 0.026819f, -0.002594f, 0.008932f, 0.011382f, 0.009276f, 0.019019f, 0.014087f, -0.000340f, 0.017531f, -0.001647f, -0.002467f, -0.011795f, 0.011799f, -0.003168f, -0.026962f, -0.024665f, 0.014221f, -0.005002f, 0.031580f, 0.017269f, 0.020253f, 0.005776f, -0.040198f, - 0.007780f, 0.025015f, -0.005801f, 0.007197f, -0.008150f, 0.004895f, 0.029511f, -0.001174f, 0.024308f, 0.044109f, 0.000210f, -0.016695f, -0.002840f, 0.000460f, -0.030184f, 0.037505f, 0.015294f, -0.004938f, -0.004812f, 0.027221f, 0.010018f, -0.032838f, -0.029700f, 0.010660f, -0.014668f, 0.015849f, 0.008257f, 0.005111f, -0.016204f, -0.023254f, -0.004304f, 0.006052f, 0.001374f, 0.025389f, -0.036400f, 0.004809f, -0.002274f, 0.046377f, -0.054445f, -0.014992f, -0.026357f, -0.000791f, 0.009046f, 0.001780f, 0.037102f, -0.037586f, 0.018299f, -0.004854f, 0.007702f, -0.004271f, 0.020562f, -0.010807f, -0.018375f, -0.001254f, -0.005064f, 0.014574f, -0.000771f, 0.009954f, 0.021799f, -0.004136f, -0.015581f, -0.001831f, 0.024484f, -0.013829f, 0.006192f, 0.005721f, 0.001429f, -0.001868f, 0.024360f, -0.000585f, -0.005654f, -0.039551f, 0.013346f, -0.009543f, -0.024645f, -0.021583f, -0.005264f, -0.023957f, -0.013736f, -0.020756f, 0.010602f, -0.024549f, 0.025455f, -0.022497f, 0.016042f, -0.011449f, 0.030781f, -0.028803f, -0.016245f, -0.004019f, 0.018177f, 0.007570f, 0.000912f, -0.011605f, -0.023099f, 0.002844f, - 0.010181f, 0.034555f, 0.018774f, 0.007899f, -0.018587f, 0.012082f, -0.016335f, -0.019032f, 0.018066f, -0.018441f, 0.010112f, 0.022640f, 0.019578f, -0.004404f, -0.005891f, -0.015514f, 0.027761f, 0.002966f, 0.022202f, 0.032460f, 0.044195f, -0.042713f, 0.034810f, 0.024837f, 0.003100f, 0.018416f, 0.058094f, -0.013854f, -0.014169f, 0.007240f, 0.018506f, 0.025201f, 0.009670f, -0.020011f, 0.026777f, -0.007232f, 0.051560f, 0.000555f, -0.006196f, 0.017884f, 0.015011f, 0.014720f, 0.001447f, 0.048341f, -0.036686f, 0.011220f, 0.001263f, 0.014538f, -0.014169f, -0.030447f, 0.017960f, 0.014331f, 0.014997f, -0.009593f, -0.006644f, 0.040532f, 0.016499f, 0.050476f, 0.006362f, -0.016534f, -0.000069f, 0.012360f, -0.002399f, 0.052179f, -0.004558f, 0.028999f, -0.003120f, 0.046823f, 0.018370f, 0.013489f, -0.009314f, -0.001454f, 0.026757f, 0.001457f, 0.028482f, 0.021108f, 0.025303f, -0.030812f, 0.006574f, 0.022986f, 0.028495f, 0.020443f, 0.016825f, 0.036350f, 0.045891f, -0.034557f, -0.003069f, 0.066951f, -0.015567f, -0.020090f, 0.044348f, 0.056565f, 0.000833f, -0.004861f, -0.033860f, 0.021294f, - 0.044660f, 0.000029f, 0.015862f, -0.033302f, 0.036967f, -0.015693f, -0.008304f, -0.028956f, -0.017389f, 0.066669f, 0.003917f, -0.042982f, -0.017104f, 0.000898f, 0.003344f, -0.003783f, 0.052971f, 0.025370f, -0.000928f, -0.018674f, 0.001424f, 0.015126f, -0.002674f, 0.068245f, 0.017656f, 0.031086f, 0.013709f, -0.013002f, -0.033746f, 0.010702f, 0.003438f, 0.007724f, -0.025087f, -0.001264f, -0.015538f, 0.024124f, 0.004346f, 0.005426f, 0.027528f, -0.019253f, -0.010909f, 0.006304f, 0.005647f, 0.008608f, -0.027308f, -0.023501f, -0.050032f, -0.027043f, 0.007512f, -0.029663f, 0.009563f, -0.021014f, -0.008076f, 0.042661f, 0.018665f, -0.017966f, 0.018334f, 0.006624f, 0.006253f, 0.041409f, 0.000056f, 0.049896f, 0.025429f, -0.017933f, -0.050347f, 0.013020f, 0.017653f, 0.035546f, -0.008147f, -0.037654f, -0.004455f, 0.017271f, 0.014320f, -0.002917f, -0.014231f, 0.029341f, -0.034216f, -0.002874f, 0.050042f, -0.011835f, 0.014315f, 0.004342f, 0.006043f, -0.048587f, 0.038892f, -0.004971f, -0.038721f, -0.023402f, 0.019410f, -0.006828f, 0.009461f, -0.001420f, -0.016313f, -0.013011f, 0.006381f, -0.013079f, - -0.003199f, -0.002004f, -0.055654f, -0.015836f, -0.037426f, 0.006745f, 0.012803f, -0.001838f, -0.016640f, 0.004991f, -0.008110f, 0.020040f, -0.049163f, 0.001585f, 0.008265f, 0.026209f, -0.021517f, 0.024225f, -0.021174f, 0.014671f, 0.004252f, 0.018281f, -0.032076f, 0.007689f, -0.015950f, -0.036109f, 0.021938f, -0.029741f, -0.055270f, 0.005708f, -0.005248f, 0.040981f, -0.021050f, 0.003425f, 0.019961f, 0.026044f, 0.032664f, 0.000522f, -0.011194f, -0.023781f, 0.000674f, 0.012117f, 0.021554f, -0.046744f, 0.048225f, -0.004489f, -0.032483f, -0.028917f, -0.043237f, 0.012364f, 0.010555f, 0.010960f, 0.007702f, 0.037798f, -0.015818f, 0.036091f, -0.042942f, -0.002171f, 0.020532f, -0.010971f, -0.046373f, -0.009049f, -0.066839f, 0.029397f, -0.073668f, 0.040762f, -0.051595f, -0.045150f, 0.010184f, 0.035122f, 0.025546f, -0.026549f, 0.023812f, 0.044707f, 0.006098f, 0.005038f, 0.008757f, 0.002285f, -0.029732f, 0.031547f, -0.058431f, -0.036794f, 0.000847f, -0.005373f, -0.005947f, -0.009351f, -0.016374f, 0.005620f, 0.049259f, 0.011499f, 0.004714f, 0.002988f, -0.026838f, 0.028168f, -0.008006f, -0.053831f, - -0.010651f, -0.000701f, -0.001598f, -0.037379f, -0.027932f, 0.025582f, -0.011811f, 0.045196f, 0.005716f, -0.001723f, -0.041342f, -0.022692f, 0.010829f, 0.004349f, -0.013848f, 0.038548f, -0.035475f, -0.021022f, -0.005249f, -0.004000f, 0.033836f, 0.001473f, 0.039931f, -0.001570f, -0.041256f, 0.007496f, -0.036483f, 0.022084f, -0.010652f, 0.030690f, 0.053394f, -0.094962f, 0.022795f, 0.011666f, 0.005103f, 0.034194f, -0.011076f, 0.005465f, 0.073531f, 0.063213f, -0.022023f, -0.028514f, -0.004645f, -0.053221f, 0.026229f, -0.005708f, 0.007878f, 0.001127f, -0.028708f, 0.073647f, -0.036124f, -0.137452f, -0.023065f, 0.024234f, -0.094101f, -0.018159f, 0.024959f, -0.079412f, 0.007187f, 0.047508f, -0.038845f, 0.047436f, -0.051495f, 0.040452f, 0.049586f, -0.036363f, 0.010825f, -0.007236f, -0.002557f, -0.016680f, -0.024813f, -0.006114f, 0.028930f, -0.023288f, -0.039002f, -0.021320f, -0.032217f, -0.005068f, -0.026190f, -0.005646f, 0.007689f, -0.007243f, 0.027878f, -0.030123f, -0.038846f, 0.025794f, -0.040921f, -0.056187f, -0.074090f, -0.026016f, -0.006063f, 0.011932f, 0.034386f, -0.017806f, 0.012835f, 0.016723f, - -0.017501f, -0.007431f, 0.059235f, -0.043695f, -0.006611f, 0.042593f, 0.008445f, 0.033309f, -0.013981f, 0.011491f, 0.043005f, 0.024025f, -0.008654f, -0.006815f, -0.036546f, 0.011483f, 0.041325f, -0.046975f, -0.022137f, -0.015970f, 0.067134f, 0.045189f, -0.064967f, -0.013601f, 0.057938f, -0.018242f, -0.035812f, -0.026027f, -0.035858f, -0.022037f, 0.058721f, 0.034794f, -0.004429f, 0.025569f, -0.006031f, 0.031280f, -0.019938f, -0.012520f, 0.065508f, -0.028380f, 0.012321f, -0.020256f, -0.006384f, -0.002306f, 0.018493f, 0.051196f, 0.021165f, -0.037677f, -0.009659f, -0.003622f, -0.004505f, 0.027654f, 0.004977f, 0.050987f, -0.014631f, 0.006766f, -0.004355f, 0.012937f, -0.043436f, 0.024034f, -0.039900f, 0.024893f, -0.000823f, 0.037724f, -0.009242f, 0.026913f, -0.012485f, 0.005868f, 0.019008f, -0.021634f, 0.019718f, 0.037061f, 0.053368f, -0.031935f, 0.054730f, 0.017261f, 0.064680f, -0.023410f, 0.013872f, -0.008224f, -0.005574f, -0.018475f, -0.002059f, -0.027891f, -0.100433f, -0.072690f, -0.017339f, -0.010278f, 0.017398f, -0.003136f, 0.026851f, 0.026234f, -0.053149f, -0.019797f, -0.019428f, 0.049498f, - -0.075217f, 0.067901f, -0.021707f, -0.022273f, 0.016454f, 0.030746f, -0.059146f, -0.013162f, -0.000353f, 0.009913f, 0.001768f, -0.003303f, 0.027656f, -0.019258f, 0.002428f, 0.013517f, 0.015600f, 0.022423f, 0.018755f, 0.004912f, -0.032908f, -0.008186f, 0.041919f, -0.043705f, -0.036968f, 0.042810f, 0.014119f, 0.029669f, 0.047728f, 0.073795f, -0.018253f, -0.050118f, 0.063006f, -0.027861f, -0.011836f, 0.064746f, 0.019989f, -0.026559f, -0.070628f, -0.048080f, -0.007922f, -0.027849f, 0.031884f, 0.063653f, 0.032873f, -0.024766f, 0.066779f, 0.020527f, -0.025257f, 0.016406f, 0.074706f, 0.019563f, 0.013949f, -0.018202f, -0.061038f, -0.083429f, -0.065024f, -0.006972f, 0.048421f, 0.012628f, 0.030517f, 0.113331f, 0.056728f, -0.071480f, -0.046729f, 0.028496f, -0.095726f, -0.046056f, 0.082998f, 0.027773f, -0.105678f, -0.090011f, -0.039794f, -0.067781f, -0.061571f, -0.032106f, -0.100637f, 0.074109f, 0.033391f, 0.025659f, 0.031490f, -0.008625f, 0.038076f, 0.031370f, 0.044216f, -0.005514f, 0.059638f, -0.033370f, 0.046003f, -0.013461f, -0.029925f, -0.008302f, -0.050965f, 0.007709f, -0.016687f, 0.021141f, - -0.010485f, -0.018967f, 0.055172f, -0.057682f, 0.041830f, -0.000205f, -0.022497f, -0.008637f, 0.026527f, 0.027682f, 0.022407f, 0.050719f, 0.043308f, -0.026881f, -0.002101f, -0.023962f, 0.026003f, -0.021151f, 0.021268f, 0.024960f, 0.015015f, 0.014491f, 0.013122f, -0.012871f, 0.058677f, -0.004055f, 0.020760f, 0.006325f, 0.029808f, 0.014651f, -0.059769f, 0.004870f, -0.033499f, 0.010420f, 0.034145f, -0.004925f, -0.021617f, -0.024943f, 0.066581f, -0.063803f, -0.045035f, 0.094594f, -0.033188f, 0.024154f, 0.017107f, 0.029723f, -0.005872f, 0.014862f, -0.056563f, 0.003012f, 0.074800f, -0.036395f, -0.013230f, 0.052345f, 0.012193f, -0.049929f, 0.023293f, -0.070180f, -0.257008f, -0.276355f, -0.018995f, -0.162327f, 0.126407f, 0.481837f, 0.204525f, 0.287108f, 0.364389f, -0.149994f, -0.109337f, -0.048478f, -0.345265f, -0.243473f, -0.085693f, -0.376715f, -0.170040f, -0.041240f, -0.160117f, 0.027486f, 0.335938f, 0.305678f, 0.330087f, 0.432214f, 0.255670f, -0.031941f, 0.089278f, -0.106672f, -0.401570f, -0.220717f, -0.167263f, -0.333282f, -0.232979f, 0.004902f, -0.260417f, -0.089899f, 0.045609f, -0.257674f, - -0.138142f, 0.180388f, 0.063038f, 0.196442f, 0.496633f, 0.405009f, 0.323275f, 0.592511f, 0.425195f, -0.013328f, 0.053234f, -0.117484f, -0.545613f, -0.517944f, -0.537888f, -0.828601f, -0.566691f, -0.348893f, -0.345782f, 0.000958f, 0.260105f, 0.299377f, 0.415785f, 0.638892f, 0.586423f, 0.500960f, 0.489710f, 0.286589f, 0.098520f, 0.023999f, -0.026560f, -0.208883f, -0.373671f, -0.445265f, -0.477228f, -0.624737f, -0.476615f, -0.186451f, 0.054341f, 0.053551f}, - {0.016394f, 0.003508f, -0.000366f, -0.002725f, -0.005240f, -0.003985f, 0.004793f, 0.006277f, 0.003167f, 0.005132f, 0.000969f, -0.003613f, -0.000492f, 0.000282f, -0.003748f, -0.003799f, -0.007416f, 0.010633f, -0.004831f, 0.009252f, -0.006533f, -0.008086f, 0.001099f, 0.013007f, -0.000873f, 0.005309f, -0.001478f, 0.003674f, 0.005456f, 0.004156f, 0.006924f, 0.004429f, -0.012967f, 0.000752f, -0.007141f, 0.002178f, -0.003372f, -0.001600f, -0.002531f, 0.000472f, -0.001100f, -0.002449f, 0.000097f, -0.001281f, 0.006619f, 0.001953f, 0.000706f, 0.005540f, 0.005299f, 0.001018f, -0.002933f, -0.002556f, -0.002782f, 0.003073f, -0.000192f, 0.000415f, -0.005086f, 0.013371f, 0.006090f, 0.003227f, -0.002376f, -0.002842f, 0.005882f, 0.001541f, -0.000502f, 0.001817f, -0.002937f, 0.001690f, -0.004191f, 0.000138f, 0.003490f, -0.005721f, -0.003868f, -0.002079f, 0.000276f, 0.000751f, 0.003185f, -0.014805f, 0.006690f, -0.016793f, 0.002901f, 0.000858f, 0.000710f, -0.011572f, -0.004298f, 0.002746f, -0.002775f, 0.003311f, 0.005540f, 0.003180f, -0.000457f, 0.004255f, -0.012994f, -0.000050f, -0.000790f, -0.000673f, - 0.006684f, 0.010247f, -0.011415f, -0.002863f, -0.007032f, -0.002569f, 0.003686f, 0.006910f, 0.000909f, 0.001433f, -0.003006f, -0.004001f, -0.003211f, -0.002629f, -0.005317f, 0.002390f, -0.005350f, -0.003830f, 0.005575f, -0.005346f, 0.003943f, 0.000304f, -0.012782f, -0.004645f, -0.007133f, -0.002048f, 0.005139f, -0.004104f, -0.001286f, -0.004043f, -0.003953f, -0.003032f, 0.005058f, 0.007546f, 0.001318f, 0.004024f, 0.003380f, -0.004599f, -0.008094f, 0.003906f, 0.003451f, -0.002124f, -0.006925f, -0.006108f, 0.005164f, 0.000684f, 0.003904f, 0.001492f, -0.010481f, -0.003830f, -0.003768f, 0.005511f, 0.002637f, -0.010926f, 0.003252f, -0.005894f, -0.000942f, -0.019987f, 0.013961f, -0.009309f, 0.001780f, -0.000834f, -0.003313f, 0.010843f, -0.008709f, -0.005569f, 0.000391f, 0.011457f, -0.003678f, -0.000113f, -0.000798f, 0.009589f, -0.005097f, -0.013976f, -0.002866f, -0.006911f, -0.009798f, 0.000951f, -0.000466f, 0.002266f, 0.006203f, 0.010270f, 0.006353f, 0.001552f, 0.015102f, 0.006390f, 0.000807f, 0.011195f, 0.011360f, -0.000223f, -0.005671f, 0.001104f, 0.005167f, 0.004609f, 0.000186f, -0.001411f, - -0.008322f, -0.006828f, -0.003464f, 0.009225f, 0.003749f, 0.015360f, 0.008488f, 0.000160f, 0.005106f, 0.006776f, 0.002206f, -0.008192f, 0.010019f, -0.002990f, 0.005332f, 0.000546f, 0.003302f, -0.009823f, -0.001533f, -0.002410f, 0.004007f, -0.002221f, -0.003894f, 0.012412f, -0.000596f, -0.007250f, 0.003534f, -0.005136f, 0.005464f, -0.002214f, 0.008679f, 0.008856f, 0.008396f, 0.004523f, -0.007368f, 0.006442f, -0.000309f, 0.007016f, 0.003895f, 0.004409f, 0.000037f, -0.004148f, 0.004075f, 0.001509f, 0.001080f, 0.001874f, -0.016398f, 0.005094f, -0.010544f, 0.001571f, 0.003087f, 0.003379f, -0.004989f, 0.008464f, 0.001089f, -0.003295f, -0.001766f, 0.009916f, 0.006898f, -0.004464f, -0.005921f, -0.004697f, 0.003556f, 0.007028f, -0.004636f, -0.004776f, 0.001041f, -0.018398f, -0.000409f, -0.007881f, -0.003468f, -0.007831f, -0.010598f, -0.001294f, 0.008878f, 0.002529f, -0.008741f, -0.002228f, 0.007510f, 0.002396f, -0.005563f, 0.008999f, -0.004394f, -0.012537f, -0.004236f, 0.007070f, -0.003631f, 0.008374f, 0.015397f, 0.012939f, 0.001222f, -0.000115f, 0.003919f, -0.001878f, -0.010018f, 0.000193f, - 0.002904f, -0.006625f, 0.005007f, -0.013229f, -0.002703f, 0.000985f, -0.006412f, -0.004182f, 0.005044f, 0.011862f, -0.009941f, -0.009279f, 0.005078f, 0.006263f, 0.010111f, 0.003906f, -0.007190f, 0.009239f, 0.007290f, 0.027761f, -0.010473f, -0.004489f, -0.001538f, 0.020074f, -0.001749f, 0.015234f, -0.010691f, 0.013448f, -0.012869f, -0.011276f, 0.002990f, 0.006477f, -0.007506f, -0.001692f, 0.004176f, -0.000807f, 0.005375f, -0.007773f, 0.009427f, 0.003523f, -0.009645f, -0.000185f, 0.004183f, 0.003275f, 0.001986f, 0.018855f, 0.015106f, 0.011817f, 0.000218f, 0.007722f, 0.000926f, 0.002335f, 0.005809f, -0.017091f, -0.002422f, 0.010639f, 0.007047f, 0.008276f, 0.000016f, -0.002944f, 0.004012f, -0.000583f, 0.021272f, -0.003108f, 0.003757f, 0.002179f, 0.001234f, -0.006186f, 0.012837f, -0.001411f, 0.013339f, -0.007235f, -0.007383f, 0.005419f, -0.004847f, -0.017586f, -0.007864f, 0.003447f, -0.001444f, -0.012662f, 0.003735f, -0.000125f, 0.016572f, 0.001222f, 0.001694f, -0.005249f, 0.006259f, 0.005707f, -0.000962f, -0.001335f, 0.014805f, 0.010096f, 0.011091f, -0.007366f, -0.008926f, -0.008525f, - 0.019845f, -0.016425f, -0.000822f, -0.017147f, -0.011458f, -0.006890f, 0.014103f, 0.008201f, -0.020740f, -0.028035f, -0.011154f, 0.009470f, 0.006450f, -0.004447f, 0.008970f, -0.000187f, -0.002904f, 0.000815f, -0.015134f, 0.004139f, -0.002503f, 0.000983f, 0.004000f, 0.000767f, -0.000679f, 0.005918f, 0.004724f, -0.009868f, -0.010326f, 0.010850f, -0.004189f, -0.005576f, 0.006026f, -0.019093f, 0.003767f, 0.003838f, -0.018247f, 0.006255f, 0.017268f, 0.010868f, 0.011566f, 0.002482f, 0.005970f, 0.017123f, 0.002308f, 0.003251f, -0.020644f, 0.010401f, 0.013847f, 0.012173f, 0.001290f, 0.012392f, -0.015126f, 0.013900f, -0.005299f, -0.013688f, -0.022484f, -0.000060f, -0.014813f, -0.010725f, -0.006042f, -0.012731f, -0.033782f, 0.001691f, 0.000132f, -0.000730f, 0.003361f, 0.016341f, 0.004168f, 0.006959f, 0.002254f, -0.010857f, -0.000522f, 0.006340f, 0.002102f, 0.005519f, -0.043936f, 0.021284f, 0.002540f, -0.017218f, 0.003894f, -0.002110f, -0.005242f, -0.003711f, -0.009849f, 0.004919f, -0.005161f, 0.000766f, 0.006070f, 0.005557f, 0.018708f, -0.007905f, -0.018316f, 0.009591f, -0.023164f, -0.010146f, - 0.003524f, 0.002901f, 0.002399f, 0.007176f, 0.008992f, 0.007676f, -0.000380f, 0.010242f, 0.000473f, -0.004426f, 0.013735f, 0.008386f, -0.004453f, 0.008041f, -0.014626f, 0.027002f, 0.000829f, 0.004824f, -0.002754f, -0.023638f, -0.004247f, -0.008944f, -0.008389f, 0.003403f, 0.019310f, 0.000333f, 0.000631f, -0.002723f, -0.005564f, -0.012823f, 0.003815f, -0.002263f, 0.006804f, -0.016072f, 0.005194f, 0.008344f, 0.003560f, -0.011893f, -0.004354f, 0.003043f, 0.001359f, 0.009538f, 0.001719f, 0.033184f, -0.009609f, -0.013983f, -0.016192f, -0.004597f, 0.000214f, 0.012261f, -0.016079f, -0.001374f, -0.006874f, 0.008466f, -0.023166f, 0.001121f, -0.005066f, -0.006189f, 0.019143f, -0.006930f, -0.005319f, 0.003676f, 0.005205f, -0.016490f, -0.016699f, -0.015255f, -0.014456f, -0.023146f, 0.013588f, -0.013766f, 0.003331f, 0.004952f, 0.019859f, -0.003925f, -0.005572f, 0.015565f, 0.003024f, 0.002857f, -0.019603f, -0.012880f, 0.008557f, 0.003537f, 0.006641f, 0.010620f, -0.020652f, -0.000257f, 0.007723f, 0.018520f, -0.000982f, 0.001337f, -0.003664f, -0.000435f, -0.013801f, -0.002896f, -0.004873f, -0.024571f, - -0.002794f, 0.006968f, -0.014732f, 0.005535f, -0.015969f, -0.000471f, -0.011346f, -0.002514f, -0.004193f, 0.001010f, 0.018510f, -0.006013f, -0.000730f, 0.009665f, -0.006597f, 0.005553f, -0.017206f, -0.029070f, -0.016725f, -0.008971f, -0.005190f, 0.002860f, 0.018068f, -0.009206f, 0.003970f, 0.004556f, -0.015046f, 0.004605f, -0.011901f, -0.003744f, 0.005760f, 0.019586f, -0.004258f, -0.000837f, 0.005072f, -0.000057f, -0.018983f, 0.019723f, 0.020672f, -0.005666f, 0.002364f, 0.021680f, -0.021044f, -0.018631f, 0.016671f, -0.003346f, 0.002684f, 0.015244f, -0.002441f, -0.003474f, 0.015147f, -0.026652f, 0.012046f, -0.000662f, 0.005054f, 0.013818f, 0.014102f, -0.014653f, 0.003327f, -0.020342f, 0.006874f, -0.005700f, -0.001812f, -0.013958f, -0.000320f, -0.020263f, 0.002446f, -0.017472f, 0.013096f, -0.005713f, 0.002817f, 0.023235f, 0.010895f, 0.010769f, -0.017616f, 0.003987f, 0.021360f, -0.004280f, -0.029345f, 0.016658f, -0.003214f, 0.003606f, -0.005433f, -0.013102f, 0.020091f, 0.007776f, 0.016457f, 0.004716f, 0.002765f, -0.012501f, -0.016701f, 0.006898f, 0.008498f, 0.009323f, 0.011897f, 0.027049f, - -0.000371f, -0.019733f, -0.012767f, 0.016526f, -0.001726f, -0.016929f, -0.004020f, -0.000513f, -0.004145f, -0.021750f, 0.001047f, 0.003344f, 0.006298f, -0.008026f, 0.013576f, -0.001184f, 0.001990f, 0.015997f, 0.014966f, -0.018975f, 0.021479f, -0.005248f, 0.022736f, -0.019186f, 0.016734f, 0.001554f, -0.002165f, 0.028436f, -0.015386f, 0.001405f, -0.014948f, -0.004656f, 0.043460f, 0.020847f, 0.008934f, 0.006043f, 0.012091f, -0.007297f, -0.000436f, -0.037342f, 0.006503f, -0.001829f, -0.016407f, 0.017492f, 0.012945f, -0.000824f, 0.002779f, -0.021676f, 0.018482f, -0.010257f, 0.019651f, 0.012880f, 0.010311f, -0.015606f, -0.003091f, -0.013153f, 0.018855f, 0.004204f, -0.007392f, 0.033886f, 0.015919f, -0.004057f, 0.001413f, -0.028455f, 0.004424f, 0.001121f, 0.022077f, -0.010260f, -0.029094f, -0.005111f, -0.008295f, -0.005740f, -0.040944f, -0.020378f, -0.043568f, -0.022158f, -0.015742f, 0.004995f, -0.011123f, 0.020354f, 0.002348f, -0.023398f, 0.013955f, -0.015629f, 0.022036f, -0.019644f, -0.015903f, 0.011631f, 0.019925f, 0.019608f, 0.000614f, -0.017788f, -0.013363f, 0.009542f, -0.028256f, -0.033299f, - -0.022524f, -0.004481f, -0.001795f, -0.005594f, 0.006202f, 0.010053f, 0.006642f, -0.001503f, 0.002938f, -0.011635f, 0.005291f, -0.022075f, -0.029967f, -0.000667f, 0.020610f, 0.002250f, -0.009061f, 0.015941f, 0.009064f, 0.015347f, 0.027285f, 0.002031f, -0.010165f, -0.019954f, -0.015930f, 0.006605f, -0.018068f, -0.013403f, 0.002971f, -0.015086f, -0.030537f, -0.017893f, -0.002965f, -0.005328f, 0.005467f, -0.008560f, 0.014800f, 0.002644f, 0.004750f, 0.020264f, -0.004989f, 0.000466f, 0.003767f, -0.020131f, 0.019628f, 0.001117f, -0.020961f, -0.034335f, 0.006611f, 0.000313f, -0.024713f, 0.021854f, 0.014337f, -0.024284f, 0.005632f, 0.017662f, 0.009895f, 0.002402f, 0.015338f, -0.011159f, -0.008787f, -0.002262f, -0.011485f, -0.019015f, 0.023819f, -0.027339f, -0.004953f, 0.005090f, -0.000436f, 0.035218f, -0.038145f, 0.004746f, -0.008289f, -0.007392f, 0.005682f, -0.003066f, 0.004589f, -0.008861f, -0.021904f, 0.017243f, -0.038716f, -0.027789f, 0.018702f, -0.001997f, -0.035369f, 0.016500f, -0.021162f, 0.037715f, 0.006631f, -0.052092f, -0.007624f, 0.003590f, -0.014026f, 0.002796f, 0.007760f, 0.017077f, - 0.014374f, -0.030678f, -0.002437f, 0.001748f, -0.007286f, -0.028188f, -0.005337f, -0.006652f, -0.010466f, -0.009295f, -0.001523f, 0.001009f, 0.021999f, 0.024338f, -0.008972f, 0.012652f, 0.010675f, 0.010531f, 0.024149f, -0.000666f, 0.005704f, -0.030068f, -0.011067f, 0.009268f, -0.006803f, 0.013061f, 0.033629f, 0.004124f, -0.031338f, -0.068591f, -0.001125f, -0.021835f, 0.018263f, -0.013780f, -0.007776f, -0.014298f, -0.037356f, 0.014865f, 0.048056f, 0.001805f, 0.012113f, -0.039386f, 0.007355f, -0.005468f, -0.017684f, 0.003223f, 0.018481f, 0.008502f, 0.015134f, -0.017793f, 0.024659f, 0.012864f, -0.027130f, -0.043195f, -0.000221f, -0.031595f, -0.073943f, -0.046809f, 0.033268f, 0.026633f, 0.043675f, -0.000489f, 0.017175f, 0.003903f, 0.013787f, -0.000973f, 0.008920f, -0.019866f, -0.023220f, -0.014945f, -0.020740f, -0.013986f, -0.014706f, 0.017233f, 0.042284f, 0.008564f, -0.051151f, -0.012883f, 0.009278f, -0.014369f, 0.012874f, -0.030142f, -0.002006f, -0.001814f, 0.002132f, 0.013446f, 0.011332f, 0.001087f, -0.003006f, -0.007541f, 0.012547f, 0.022206f, -0.017980f, -0.029995f, 0.019937f, 0.007998f, - 0.025995f, 0.010293f, 0.037507f, -0.026653f, -0.007984f, 0.022046f, 0.035953f, 0.028934f, 0.019061f, 0.007028f, -0.006328f, 0.000693f, -0.003138f, -0.001568f, 0.013488f, -0.047474f, 0.026042f, -0.005507f, 0.008272f, -0.005040f, 0.036448f, -0.012727f, 0.001414f, -0.009881f, 0.024116f, 0.016263f, -0.036623f, 0.025404f, -0.030535f, -0.004356f, -0.013869f, -0.019430f, 0.018486f, 0.000112f, -0.047825f, -0.006383f, -0.000267f, 0.041501f, -0.044984f, -0.000462f, -0.025345f, -0.072412f, -0.008109f, -0.026329f, -0.057121f, 0.012155f, 0.000123f, -0.010544f, 0.004105f, 0.031649f, -0.001535f, -0.032041f, 0.011691f, 0.002042f, -0.010079f, -0.007134f, -0.005409f, 0.002422f, 0.036108f, -0.007218f, -0.000912f, 0.017026f, 0.012366f, -0.004290f, 0.017658f, 0.016695f, -0.007263f, -0.006584f, -0.013995f, 0.020809f, -0.004418f, -0.033215f, 0.005535f, -0.001240f, 0.012047f, 0.045886f, -0.029639f, -0.046867f, -0.030009f, -0.012846f, 0.006866f, 0.017233f, 0.008713f, 0.035402f, 0.017225f, -0.022687f, -0.013739f, -0.031363f, 0.028500f, 0.018986f, 0.003223f, 0.007640f, -0.018802f, 0.003700f, -0.019953f, 0.036229f, - 0.033628f, 0.004390f, -0.015920f, -0.006594f, 0.003030f, 0.033654f, 0.062052f, 0.041045f, -0.006497f, -0.011051f, 0.000089f, 0.023213f, 0.007627f, 0.022289f, 0.024056f, -0.020112f, -0.002513f, -0.040610f, -0.026240f, 0.016213f, 0.018892f, -0.032425f, -0.000935f, -0.015242f, 0.030101f, -0.026408f, 0.009021f, 0.005811f, 0.055777f, -0.029257f, -0.006205f, -0.030186f, -0.003899f, -0.029780f, -0.024377f, -0.016805f, 0.013702f, -0.032278f, -0.022357f, -0.035379f, -0.006450f, -0.002609f, -0.008379f, -0.014234f, -0.039540f, 0.014438f, -0.026908f, 0.015486f, -0.028372f, 0.042508f, 0.009600f, 0.020829f, -0.004002f, -0.033849f, 0.023484f, 0.014731f, -0.008809f, 0.023093f, 0.031490f, -0.011756f, -0.036172f, -0.018122f, 0.057370f, -0.019590f, 0.002151f, 0.004687f, -0.005112f, 0.015100f, 0.038752f, 0.009512f, 0.018904f, -0.007790f, 0.029074f, 0.003767f, 0.023923f, 0.009418f, 0.011143f, 0.002900f, 0.006669f, 0.046014f, 0.017719f, 0.105263f, -0.056959f, 0.043317f, 0.061054f, -0.010902f, 0.006981f, 0.032673f, -0.014635f, -0.001988f, 0.053501f, 0.022801f, 0.000211f, 0.029316f, -0.000153f, 0.054087f, - 0.060808f, -0.001624f, 0.043319f, 0.042820f, -0.004710f, 0.017782f, -0.047805f, -0.016895f, 0.038420f, 0.001039f, 0.037989f, 0.052995f, 0.044164f, -0.012225f, 0.028252f, -0.049881f, -0.074721f, -0.034392f, -0.028933f, 0.014365f, -0.001400f, 0.015503f, 0.018930f, 0.040588f, 0.032723f, 0.008365f, -0.036065f, -0.007845f, 0.033668f, 0.007491f, -0.018133f, 0.018580f, 0.047071f, -0.009341f, 0.015885f, -0.043230f, 0.018050f, -0.035107f, -0.008965f, -0.023948f, -0.041071f, 0.020457f, 0.002514f, 0.007547f, 0.048494f, -0.031066f, -0.029546f, 0.012627f, 0.050610f, -0.044711f, -0.026084f, 0.011087f, -0.012147f, 0.065688f, 0.053595f, -0.055813f, -0.017734f, -0.045558f, 0.003635f, 0.037219f, -0.018259f, -0.036659f, -0.011400f, -0.004124f, 0.013376f, -0.043214f, 0.012268f, 0.065134f, 0.009803f, -0.056275f, -0.068252f, 0.051796f, -0.063638f, -0.067895f, -0.023503f, 0.008746f, -0.016000f, 0.008158f, 0.002957f, -0.069698f, -0.042358f, -0.053232f, 0.008946f, 0.024081f, 0.005410f, 0.038916f, 0.033599f, 0.050364f, 0.012167f, 0.055397f, 0.021575f, 0.034720f, -0.023286f, -0.010320f, -0.023474f, -0.048047f, - -0.037312f, -0.072634f, -0.046453f, -0.016101f, -0.045830f, 0.006435f, -0.006800f, -0.003492f, 0.011364f, 0.011427f, 0.000897f, 0.031657f, -0.014069f, -0.030058f, 0.034775f, 0.001871f, -0.059399f, -0.024804f, -0.011784f, -0.065896f, -0.055001f, -0.048833f, -0.001936f, 0.021792f, -0.000296f, -0.025658f, -0.009848f, 0.026191f, 0.009611f, 0.063594f, 0.004730f, -0.086339f, -0.036217f, -0.014784f, 0.005924f, 0.013900f, -0.018113f, -0.022025f, 0.023274f, -0.046464f, -0.018025f, -0.036517f, 0.019184f, -0.072884f, -0.057195f, -0.058354f, -0.060921f, 0.006103f, -0.040861f, -0.016772f, -0.064590f, 0.030657f, 0.070266f, 0.004676f, 0.032132f, -0.024957f, -0.018409f, 0.048252f, 0.019380f, 0.048571f, -0.081738f, 0.033952f, 0.060380f, -0.007263f, 0.069743f, -0.038644f, -0.107365f, -0.056973f, -0.000940f, -0.012369f, 0.011744f, -0.040158f, 0.037050f, 0.050379f, -0.046921f, 0.039498f, -0.025498f, -0.033748f, -0.074320f, -0.032822f, -0.042389f, -0.030795f, -0.033652f, 0.031157f, 0.005883f, -0.069682f, -0.084768f, 0.061953f, 0.015815f, 0.020242f, -0.018737f, 0.002057f, -0.021726f, -0.002678f, 0.021370f, 0.026439f, - 0.028948f, 0.068915f, 0.004374f, -0.055882f, 0.072624f, -0.011462f, -0.015810f, -0.036894f, 0.032407f, -0.062331f, -0.035919f, 0.028168f, -0.026878f, -0.050031f, -0.053065f, -0.054808f, -0.006743f, 0.001090f, 0.009567f, -0.021199f, 0.065620f, 0.045657f, 0.000034f, -0.036354f, -0.045470f, -0.065834f, 0.020599f, 0.004454f, -0.004680f, -0.014383f, 0.091447f, -0.003963f, -0.015719f, 0.025372f, 0.027236f, -0.067364f, 0.051912f, 0.034108f, 0.102120f, 0.045441f, 0.003217f, -0.032866f, 0.049169f, 0.000261f, 0.004274f, -0.022108f, 0.044858f, -0.050044f, 0.038065f, 0.037107f, 0.038500f, 0.019543f, -0.013257f, 0.051450f, 0.063496f, -0.011516f, 0.026523f, -0.037645f, 0.063787f, 0.028431f, 0.021624f, -0.038913f, -0.087860f, 0.019095f, -0.026702f, -0.018603f, -0.035519f, -0.043515f, 0.027505f, 0.013904f, -0.021751f, 0.006769f, 0.002241f, -0.022065f, -0.107818f, -0.004892f, -0.022930f, -0.009164f, -0.001766f, 0.077988f, 0.051707f, -0.023316f, 0.019299f, -0.047980f, 0.005194f, 0.039671f, -0.057752f, -0.050829f, -0.044302f, 0.071177f, -0.050266f, 0.016775f, 0.054281f, -0.071919f, -0.070375f, 0.066435f, - 0.049297f, 0.056344f, 0.069805f, 0.029440f, -0.093469f, 0.023828f, 0.024627f, -0.004653f, 0.146412f, -0.011715f, -0.026417f, -0.063368f, -0.063088f, 0.034829f, -0.060265f, 0.040762f, 0.002168f, 0.046653f, -0.014685f, 0.025333f, 0.077791f, 0.009215f, -0.061107f, 0.094245f, 0.024951f, -0.003067f, 0.067806f, 0.035289f, 0.055346f, 0.022740f, -0.075555f, -0.014108f, -0.026603f, 0.039956f, 0.093784f, -0.054631f, 0.017308f, -0.024552f, 0.043141f, 0.049871f, -0.059019f, 0.054593f, -0.046960f, -0.041179f, 0.025016f, 0.045571f, 0.004155f, 0.017367f, 0.035221f, -0.046438f, 0.046210f, 0.006857f, 0.055835f, -0.006080f, -0.012071f, 0.020972f, 0.081485f, -0.032166f, 0.066136f, -0.027524f, 0.014786f, 0.020371f, 0.065896f, -0.000152f, -0.002542f, 0.025735f, 0.098198f, 0.010073f, -0.074231f, -0.002399f, -0.089804f, 0.058444f, 0.001218f, 0.153032f, 0.032755f, -0.039720f, -0.012667f, 0.036944f, -0.032727f, 0.056432f, 0.097305f, 0.070784f, 0.000990f, 0.032559f, 0.041180f, -0.000437f, -0.046980f, -0.001678f, -0.012881f, -0.150932f, 0.093246f, 0.077681f, 0.061042f, 0.021952f, -0.075556f, 0.059982f, - -0.034908f, 0.060946f, -0.053198f, 0.010381f, 0.030070f, -0.026973f, 0.005581f, 0.012268f, -0.013301f, -0.028339f, -0.053548f, 0.085093f, -0.017086f, -0.015725f, -0.026229f, -0.003918f, -0.009667f, 0.028100f, -0.054600f, -0.015646f, -0.033340f, 0.012782f, -0.033446f, 0.034753f, 0.002014f, 0.018131f, -0.036940f, -0.071089f, 0.005794f, -0.051887f, -0.052137f, 0.025117f, -0.039323f, -0.035150f, 0.071834f, -0.025315f, -0.037666f, 0.005417f, -0.038714f, 0.019710f, 0.029073f, -0.007444f, -0.030907f, -0.009775f, 0.022947f, 0.017537f, -0.012195f, -0.001368f, 0.064323f, -0.010784f, -0.034193f, -0.047719f, -0.003340f, -0.020862f, -0.068331f, 0.067642f, 0.027066f, -0.082460f, 0.054672f, -0.003432f, -0.030791f, 0.159266f, 0.093387f, 0.073696f, 0.042734f, 0.023107f, -0.033890f, 0.007034f, 0.021143f, 0.020476f, 0.010405f, 0.072350f, 0.018078f, -0.015808f, -0.033721f, -0.128221f, -0.071311f, 0.124376f, 0.017133f, 0.041792f, 0.023413f, -0.028930f, 0.024289f, 0.036167f, 0.010052f, -0.001947f, -0.028289f, -0.003611f, 0.009776f, -0.012271f, -0.009170f, 0.006788f, 0.015157f, 0.037403f, -0.023415f, 0.016712f, - 0.002781f, 0.030226f, -0.008770f, 0.007371f, 0.010686f, -0.031033f, 0.027915f, 0.006078f, 0.007842f, 0.011354f, 0.011067f, -0.018957f, 0.023339f, -0.016066f, 0.005705f, 0.023071f, -0.010409f, 0.022684f, -0.007869f, 0.028128f, 0.021405f, 0.013775f, -0.031459f, 0.026291f, 0.019462f, 0.016814f, 0.041463f, -0.036880f, -0.002495f, 0.001748f, -0.007421f, 0.014062f, -0.019316f, -0.030073f, 0.022880f, 0.027275f, 0.013229f, -0.000790f, 0.005914f, -0.001116f, 0.013530f, -0.008900f, 0.005693f, -0.021474f, 0.022102f, -0.034638f, 0.035273f, 0.022247f, -0.011810f, 0.002226f, 0.014379f, 0.003902f, 0.012672f, 0.003278f, 0.001030f, 0.002141f, 0.023543f, -0.098202f, -0.228618f, -0.036631f, 0.133471f, 0.121293f, 0.298624f, 0.156033f, -0.080702f, -0.024723f, -0.165795f, -0.280909f, -0.019727f, -0.127615f, -0.018154f, 0.204788f, 0.087017f, 0.158273f, 0.242346f, -0.028084f, -0.036032f, -0.123121f, -0.210201f, -0.166493f, -0.011283f, -0.062375f, -0.024309f, 0.174530f, 0.054641f, 0.113679f, 0.205299f, 0.034136f, -0.001524f, 0.021760f, -0.125987f, -0.189176f, 0.031824f, -0.195454f, -0.129020f, 0.044084f, - -0.020557f, 0.032495f, 0.251349f, 0.029633f, 0.095760f, 0.206710f, -0.042021f, 0.007204f, 0.044890f, -0.197680f, -0.166673f, -0.057726f, -0.227124f, -0.086490f, 0.027601f, 0.042934f, 0.154391f, 0.220462f, 0.154957f, 0.111661f, 0.094727f, -0.035018f, -0.133822f, -0.107030f, -0.165173f, -0.170050f, -0.075287f, -0.041371f, -0.000487f, 0.146936f, 0.170490f, 0.057180f, 0.132906f, 0.043652f, -0.043896f, 0.034991f, -0.092458f, -0.097676f, -0.014884f, -0.016038f} - }, - { - {0.014085f, 0.003015f, -0.003886f, -0.001391f, -0.012989f, -0.006968f, 0.003037f, -0.000664f, -0.000688f, 0.011340f, 0.009528f, 0.002088f, -0.002756f, -0.002327f, -0.006276f, 0.005696f, 0.000631f, -0.003797f, -0.001952f, -0.003632f, -0.001690f, -0.000933f, -0.008573f, -0.007868f, 0.007024f, 0.006528f, 0.002812f, -0.008093f, -0.003750f, -0.001893f, 0.003547f, -0.002993f, -0.004002f, -0.000711f, 0.000351f, 0.001679f, 0.003808f, 0.000765f, 0.005449f, -0.006988f, -0.006472f, -0.008698f, -0.006355f, -0.003515f, 0.000815f, -0.001142f, -0.001206f, -0.003676f, 0.001338f, -0.001025f, 0.000739f, 0.006166f, 0.004616f, -0.002338f, -0.004630f, -0.003376f, 0.001808f, 0.001424f, 0.000608f, -0.000514f, 0.012116f, 0.007436f, 0.001175f, -0.002393f, 0.000596f, -0.007037f, 0.000435f, -0.000466f, 0.001926f, -0.001106f, -0.003904f, 0.006675f, -0.008500f, 0.000402f, 0.000820f, -0.000836f, -0.008431f, 0.008433f, 0.001963f, -0.004904f, -0.002288f, -0.010673f, -0.002996f, 0.008553f, -0.004829f, -0.003591f, 0.002509f, -0.001582f, -0.000519f, 0.000337f, -0.002984f, -0.002467f, 0.010437f, 0.004945f, -0.001479f, 0.000295f, - -0.001765f, -0.003401f, 0.001279f, 0.003564f, 0.005663f, -0.001729f, 0.002053f, 0.002458f, -0.009588f, -0.003130f, -0.000202f, -0.002118f, 0.005584f, 0.000268f, -0.002164f, 0.004929f, -0.004146f, 0.001485f, 0.007870f, -0.004747f, 0.000321f, 0.000795f, 0.005924f, -0.002651f, 0.008241f, -0.012267f, -0.004568f, 0.004893f, -0.002580f, -0.010465f, 0.000512f, 0.001700f, 0.003154f, 0.003119f, -0.001328f, -0.004735f, 0.000133f, -0.004348f, -0.002951f, 0.000777f, 0.004750f, 0.004195f, -0.007050f, 0.005494f, -0.007711f, 0.006119f, 0.000032f, 0.005265f, -0.002640f, -0.005379f, -0.002562f, 0.003244f, -0.001261f, -0.001743f, -0.001779f, 0.004453f, -0.006406f, -0.028480f, 0.009344f, -0.010351f, -0.004133f, -0.008471f, -0.008714f, 0.004955f, -0.002918f, -0.007337f, -0.003966f, 0.010011f, 0.014835f, -0.008105f, -0.003047f, -0.000698f, -0.010725f, -0.010025f, 0.000726f, -0.000983f, 0.006506f, 0.002241f, 0.004836f, -0.004245f, -0.002720f, -0.005508f, 0.001529f, 0.009643f, 0.004124f, 0.001925f, -0.006223f, 0.004755f, 0.001375f, 0.002944f, -0.004080f, 0.000438f, 0.001371f, 0.002243f, -0.005530f, -0.003914f, - 0.001452f, -0.007463f, -0.007788f, 0.003435f, 0.005819f, -0.006473f, -0.003372f, -0.002407f, 0.000422f, 0.006001f, 0.004665f, 0.002205f, 0.000836f, 0.015312f, 0.005889f, -0.004584f, 0.005839f, 0.004413f, -0.004258f, 0.007387f, -0.002716f, -0.001531f, -0.000091f, -0.002824f, 0.006304f, -0.003248f, 0.001622f, 0.004204f, 0.003026f, -0.005225f, 0.002188f, 0.001562f, 0.001108f, -0.001366f, -0.002839f, -0.000403f, 0.008831f, 0.001667f, 0.003866f, 0.021828f, 0.008796f, -0.001355f, 0.001139f, 0.005121f, 0.002753f, -0.001311f, -0.009208f, 0.000458f, 0.008468f, -0.008370f, -0.000794f, -0.015844f, 0.004359f, 0.006671f, 0.000596f, -0.003656f, 0.011858f, 0.008378f, -0.007374f, 0.003800f, 0.000607f, -0.006452f, 0.010602f, 0.005912f, -0.000513f, 0.004375f, 0.010112f, -0.002922f, -0.001886f, 0.000828f, 0.000229f, 0.000403f, 0.002559f, 0.012379f, 0.002632f, 0.001992f, -0.019571f, -0.000872f, 0.001073f, 0.002535f, -0.008760f, 0.002247f, -0.007032f, -0.005349f, -0.007448f, -0.004794f, 0.000219f, 0.002485f, -0.004485f, 0.004853f, -0.011172f, -0.006314f, -0.000524f, 0.000058f, 0.003804f, -0.004331f, - -0.000898f, -0.003895f, 0.002617f, 0.006372f, -0.003572f, 0.000896f, -0.003088f, -0.000342f, 0.009634f, 0.007710f, -0.002928f, 0.007244f, -0.003312f, -0.005711f, -0.007477f, -0.000321f, -0.000844f, 0.034857f, -0.014233f, 0.003467f, -0.000600f, -0.005654f, 0.006084f, 0.010248f, -0.005577f, 0.010972f, 0.000083f, 0.011662f, 0.003698f, 0.004553f, -0.004088f, 0.006909f, 0.003062f, 0.007063f, -0.012805f, 0.007897f, -0.007303f, 0.003185f, -0.006025f, 0.009145f, -0.001644f, 0.009214f, -0.004335f, 0.003849f, -0.002608f, -0.000011f, 0.000297f, -0.000120f, 0.004023f, 0.018427f, 0.001467f, 0.005953f, -0.004200f, -0.007415f, 0.001046f, 0.000954f, 0.001056f, 0.003505f, -0.004958f, 0.012430f, -0.000004f, 0.010578f, 0.001423f, -0.003319f, -0.004555f, -0.013668f, 0.007944f, 0.005698f, -0.006016f, 0.001748f, 0.006671f, 0.004138f, -0.016126f, 0.011229f, 0.000323f, 0.008359f, -0.009261f, -0.009761f, -0.004335f, -0.009385f, -0.000895f, 0.013795f, 0.003737f, -0.003164f, 0.002033f, 0.008765f, -0.000872f, -0.003569f, -0.001150f, -0.003829f, 0.006770f, -0.006320f, 0.001650f, -0.002003f, 0.009023f, -0.020887f, - 0.004346f, -0.006515f, -0.019104f, -0.014665f, 0.007906f, 0.008876f, 0.011571f, -0.005578f, -0.002931f, 0.008074f, 0.003819f, 0.012008f, 0.003880f, -0.001164f, 0.001223f, 0.007740f, 0.014750f, -0.003595f, 0.004292f, 0.000013f, 0.011935f, 0.002954f, -0.000754f, -0.002180f, -0.009152f, -0.013636f, 0.000110f, -0.001750f, 0.004120f, -0.000528f, 0.003209f, 0.002701f, 0.000782f, 0.001177f, 0.002689f, -0.004432f, 0.000451f, 0.006914f, 0.010228f, -0.004712f, 0.001130f, -0.004094f, -0.006031f, 0.008898f, -0.006653f, -0.015894f, -0.006524f, -0.003756f, 0.007701f, 0.001094f, 0.008502f, 0.008362f, -0.004326f, 0.000843f, -0.006908f, -0.000415f, -0.003057f, 0.010672f, -0.012899f, 0.000228f, 0.004126f, -0.012850f, -0.015354f, 0.000923f, 0.004518f, 0.010361f, -0.006876f, -0.015246f, 0.008219f, -0.013918f, 0.017188f, 0.010809f, 0.002798f, 0.008594f, 0.000347f, -0.003371f, -0.046890f, 0.009075f, 0.001866f, -0.023796f, -0.029892f, -0.005223f, -0.023184f, 0.017967f, 0.004815f, -0.014187f, 0.000388f, -0.006870f, 0.001589f, -0.009848f, 0.000737f, -0.001037f, -0.000347f, 0.012510f, -0.005103f, -0.003541f, - -0.005874f, -0.005297f, -0.012715f, -0.008738f, 0.011881f, -0.005596f, 0.007360f, -0.007370f, 0.002949f, -0.000306f, 0.006623f, -0.007676f, 0.004925f, -0.007709f, 0.002743f, -0.003270f, -0.004875f, 0.003938f, -0.011849f, 0.003892f, -0.006203f, -0.002618f, -0.008688f, 0.019638f, 0.009265f, 0.017154f, -0.007847f, 0.006933f, 0.005708f, -0.004030f, 0.002878f, -0.008892f, 0.008641f, 0.018856f, 0.015114f, -0.011196f, -0.003030f, 0.004015f, -0.007852f, -0.005717f, -0.013601f, -0.025845f, -0.008593f, 0.012451f, 0.004748f, -0.006782f, 0.002756f, 0.000794f, -0.006565f, -0.012568f, -0.011596f, 0.008085f, 0.001873f, -0.019151f, 0.003426f, 0.001328f, 0.002087f, -0.017994f, -0.007402f, -0.004526f, 0.013896f, -0.003416f, 0.003414f, -0.013941f, -0.014642f, 0.000977f, 0.004419f, -0.008398f, -0.004839f, -0.007852f, 0.016932f, 0.003996f, -0.005543f, -0.011978f, -0.012030f, -0.011533f, -0.003224f, 0.006018f, 0.016954f, 0.005822f, 0.009592f, -0.007232f, 0.018022f, 0.010642f, 0.003329f, 0.000583f, 0.018505f, -0.010418f, 0.001751f, 0.006267f, 0.012499f, -0.019846f, -0.010353f, 0.009274f, 0.003508f, -0.002351f, - 0.021055f, -0.008774f, 0.005893f, 0.013215f, 0.003861f, 0.002631f, 0.009189f, 0.004286f, 0.004494f, 0.005259f, 0.001862f, 0.005996f, -0.000491f, 0.008596f, -0.002070f, 0.020299f, -0.014579f, 0.016820f, 0.012657f, -0.010654f, 0.012503f, 0.002974f, 0.010556f, 0.011625f, -0.024475f, 0.000016f, -0.001342f, -0.006582f, 0.003452f, -0.005829f, 0.006249f, -0.001953f, 0.014917f, -0.000781f, 0.001926f, 0.007426f, 0.003832f, 0.024475f, -0.006088f, -0.003467f, -0.005614f, 0.017495f, 0.009368f, 0.002104f, 0.006908f, -0.011395f, 0.026104f, 0.008776f, -0.001672f, 0.009957f, 0.012816f, -0.020802f, -0.001022f, 0.005194f, 0.002863f, 0.000180f, 0.018213f, -0.008357f, -0.010371f, 0.024680f, 0.004152f, -0.001556f, -0.001966f, 0.012971f, 0.001468f, -0.001693f, -0.001895f, -0.005788f, 0.006911f, -0.003537f, 0.009064f, 0.006131f, -0.014852f, -0.014488f, 0.002437f, 0.029033f, 0.000290f, 0.006019f, -0.017167f, 0.008914f, 0.012571f, -0.007277f, 0.009539f, 0.011017f, -0.017301f, -0.010952f, -0.001446f, -0.023083f, -0.011416f, -0.013754f, 0.005002f, -0.004676f, -0.004134f, -0.002488f, 0.017371f, -0.022286f, - 0.011040f, 0.004895f, -0.005966f, 0.013670f, -0.007319f, 0.001338f, -0.017189f, -0.000371f, 0.013118f, 0.010209f, 0.023398f, -0.025218f, -0.003848f, -0.027995f, -0.003008f, -0.000526f, -0.002606f, 0.003470f, 0.017064f, -0.017954f, 0.001184f, -0.010793f, 0.032278f, -0.012852f, -0.007108f, 0.028016f, 0.021311f, 0.004371f, -0.037717f, -0.008818f, 0.018241f, 0.001947f, -0.001223f, -0.004947f, -0.002394f, -0.002487f, 0.003310f, 0.006427f, 0.006053f, 0.005631f, 0.034600f, -0.006615f, -0.004272f, 0.000487f, 0.005096f, -0.009674f, 0.006638f, 0.004038f, -0.000589f, -0.010722f, -0.006314f, 0.012664f, 0.013829f, 0.025241f, 0.007064f, -0.009868f, 0.007002f, 0.000020f, 0.007099f, 0.000778f, 0.014540f, -0.011206f, -0.016383f, -0.017418f, 0.012350f, -0.004822f, 0.003216f, 0.004776f, -0.005498f, -0.001048f, 0.030348f, 0.010142f, -0.024017f, 0.017700f, 0.006561f, 0.029793f, -0.014594f, -0.014826f, 0.009634f, 0.015784f, 0.012159f, 0.005749f, -0.001631f, 0.000304f, 0.008896f, -0.010617f, -0.001465f, -0.000902f, 0.014191f, -0.010919f, 0.027267f, -0.003463f, 0.001951f, -0.017389f, -0.010893f, -0.023254f, - -0.019799f, -0.008042f, 0.006546f, 0.006687f, 0.034591f, 0.033495f, -0.004438f, 0.002176f, 0.001046f, -0.000326f, -0.000834f, -0.007637f, -0.023294f, -0.018139f, -0.009477f, 0.007479f, -0.006781f, -0.020511f, -0.006025f, 0.003147f, -0.001851f, -0.031128f, -0.009321f, 0.006105f, -0.003461f, 0.002234f, 0.001780f, 0.008505f, 0.013117f, 0.001509f, -0.010015f, 0.009230f, 0.010046f, 0.006579f, -0.000649f, 0.012687f, -0.026959f, 0.008286f, -0.023887f, 0.028854f, -0.021125f, 0.007396f, -0.022375f, -0.004355f, -0.024953f, -0.013791f, -0.015563f, -0.017407f, 0.011439f, -0.015375f, -0.002856f, 0.004554f, -0.000157f, -0.008464f, -0.005580f, -0.003164f, -0.024167f, 0.000242f, 0.001777f, 0.011536f, -0.037669f, 0.000431f, -0.000644f, 0.017294f, 0.021713f, -0.014748f, -0.008288f, 0.000623f, 0.017109f, -0.031355f, 0.021147f, -0.013796f, -0.007804f, 0.002412f, -0.028018f, 0.004243f, -0.019473f, -0.048377f, -0.020233f, -0.010337f, 0.006686f, 0.011303f, -0.016923f, -0.007194f, -0.020916f, -0.018444f, 0.007460f, -0.016349f, 0.013899f, 0.004995f, 0.009518f, -0.003146f, -0.016865f, 0.025361f, 0.008937f, 0.013661f, - -0.020713f, 0.006838f, 0.001784f, -0.028972f, 0.015441f, 0.009074f, -0.000721f, -0.020075f, -0.009037f, 0.008155f, 0.008100f, -0.001599f, 0.001598f, 0.012334f, -0.015020f, -0.010843f, 0.013989f, -0.032681f, -0.033064f, -0.042012f, -0.011124f, 0.012137f, -0.037914f, -0.031006f, -0.020195f, -0.000373f, 0.010912f, 0.003185f, 0.001589f, -0.000283f, -0.012501f, -0.015213f, -0.036088f, 0.017093f, 0.002876f, 0.040373f, -0.012073f, 0.000347f, -0.027766f, -0.031156f, 0.001525f, 0.019054f, -0.001062f, -0.019794f, 0.010188f, 0.004640f, 0.025456f, 0.002321f, 0.000798f, -0.013942f, -0.005482f, 0.011607f, -0.030681f, -0.051658f, -0.017965f, -0.012826f, -0.043003f, -0.032873f, -0.014541f, 0.024075f, -0.000976f, 0.040560f, 0.008948f, -0.002662f, -0.021160f, 0.008673f, 0.042138f, -0.042172f, -0.037342f, -0.012105f, -0.005118f, -0.026282f, 0.026818f, 0.008012f, 0.015206f, 0.016990f, -0.025462f, -0.002749f, 0.012328f, -0.016556f, 0.033347f, 0.000826f, 0.008793f, -0.008937f, 0.009555f, -0.020731f, -0.010191f, -0.007007f, 0.013801f, 0.005828f, 0.021241f, -0.031548f, 0.004844f, -0.000197f, -0.021492f, 0.025740f, - -0.013216f, -0.037725f, 0.009715f, 0.013440f, 0.005109f, -0.011442f, -0.000263f, -0.015945f, 0.005171f, 0.012498f, 0.008157f, -0.026149f, 0.012911f, -0.006358f, -0.025627f, -0.017480f, -0.032014f, 0.000103f, -0.002196f, -0.001723f, 0.008009f, 0.020639f, 0.030430f, 0.021226f, -0.007537f, -0.020658f, 0.010526f, -0.006374f, 0.001089f, -0.016711f, 0.032522f, 0.020997f, 0.000001f, 0.040259f, -0.022116f, 0.010864f, 0.031645f, 0.016232f, -0.037901f, 0.004987f, 0.000649f, -0.023938f, 0.003724f, -0.053449f, -0.046112f, -0.010982f, -0.000169f, 0.002091f, -0.000917f, -0.018975f, -0.000408f, -0.005395f, 0.017407f, 0.003374f, -0.000801f, 0.003223f, -0.040189f, 0.013975f, 0.007850f, 0.022422f, 0.009631f, 0.009656f, 0.026709f, 0.013039f, 0.004144f, 0.065894f, 0.014456f, 0.025229f, 0.035378f, 0.001422f, 0.025057f, 0.005933f, -0.013374f, 0.015740f, 0.001493f, 0.007368f, -0.013080f, 0.000590f, -0.008356f, 0.005126f, -0.008324f, 0.018032f, 0.002611f, -0.012176f, -0.014067f, 0.001284f, -0.038806f, 0.021977f, 0.015747f, -0.002907f, -0.003170f, 0.007917f, -0.010040f, -0.009824f, -0.012485f, -0.016872f, - 0.013317f, -0.013937f, 0.021756f, 0.023107f, 0.024740f, 0.023856f, -0.005733f, -0.041839f, 0.000864f, 0.013605f, 0.039813f, -0.012908f, -0.001534f, 0.014064f, 0.027189f, 0.034358f, -0.007194f, 0.007436f, 0.034080f, 0.043730f, -0.029467f, -0.030860f, -0.041421f, 0.040752f, -0.002329f, -0.013801f, 0.015258f, 0.015001f, 0.038141f, 0.032303f, 0.003744f, 0.035257f, 0.048996f, 0.015519f, -0.022272f, 0.024757f, -0.020489f, -0.010288f, -0.002835f, -0.013358f, -0.016930f, 0.011959f, -0.007670f, -0.006980f, -0.020806f, 0.053722f, 0.008193f, -0.024958f, 0.001759f, -0.001270f, 0.024775f, 0.026815f, 0.011361f, -0.013471f, 0.026301f, -0.004071f, 0.016906f, -0.044350f, 0.004223f, 0.022247f, -0.018410f, 0.009529f, -0.020161f, -0.015026f, 0.050279f, 0.023071f, 0.016388f, -0.000397f, -0.041243f, -0.007367f, 0.014194f, 0.012438f, 0.008703f, -0.006917f, 0.035952f, -0.020655f, 0.020747f, -0.007774f, 0.014304f, 0.017537f, 0.028819f, 0.040483f, -0.040841f, 0.002963f, 0.023529f, 0.014969f, 0.032341f, 0.034501f, -0.040914f, 0.005316f, -0.010421f, -0.015975f, -0.000424f, -0.015177f, 0.010019f, 0.032470f, - 0.064808f, 0.002664f, -0.031047f, 0.008624f, -0.020756f, 0.013265f, -0.018018f, -0.019603f, 0.058928f, -0.044915f, 0.074006f, 0.045076f, -0.010827f, 0.014671f, 0.035853f, 0.004926f, -0.055602f, 0.021625f, -0.044969f, 0.010456f, 0.004243f, -0.022621f, 0.001209f, -0.003380f, 0.032542f, -0.016503f, -0.001299f, -0.001633f, -0.009465f, 0.067735f, -0.003529f, -0.010686f, 0.009204f, 0.022481f, -0.022769f, -0.049545f, 0.039197f, -0.006725f, -0.002426f, 0.043554f, -0.025372f, -0.007775f, -0.030276f, 0.007632f, -0.020932f, 0.024251f, 0.023683f, 0.046247f, -0.012708f, 0.012380f, 0.032170f, -0.045302f, 0.006313f, -0.029199f, -0.043885f, -0.058149f, -0.029151f, -0.062861f, -0.068592f, -0.010758f, 0.005624f, -0.033866f, -0.034062f, 0.020644f, -0.001177f, -0.021105f, -0.036608f, 0.025929f, -0.018764f, 0.005379f, 0.036209f, -0.067201f, -0.016785f, -0.014980f, 0.031313f, 0.071998f, 0.003372f, -0.019625f, 0.020230f, -0.010082f, -0.030806f, -0.045274f, -0.034495f, 0.036756f, -0.031306f, 0.014423f, 0.034972f, 0.014515f, 0.022208f, -0.043258f, 0.060453f, 0.037708f, 0.032640f, -0.025384f, 0.043096f, -0.005618f, - 0.028233f, 0.018202f, 0.005671f, 0.014925f, 0.020476f, 0.012045f, -0.007975f, -0.011857f, -0.010620f, 0.003417f, -0.030358f, -0.035790f, 0.018607f, 0.007531f, 0.010361f, -0.029736f, 0.006751f, 0.007479f, 0.020309f, 0.030610f, 0.046833f, -0.028472f, 0.006038f, 0.066826f, 0.013423f, 0.005789f, 0.005213f, -0.015702f, 0.003529f, 0.066249f, 0.018133f, 0.042189f, 0.010843f, -0.049084f, -0.021472f, -0.036411f, 0.096711f, 0.037866f, -0.040330f, -0.026290f, -0.036411f, 0.003204f, -0.024952f, -0.056348f, 0.009411f, -0.043488f, 0.057190f, -0.007241f, -0.053721f, 0.062816f, 0.049166f, 0.004687f, -0.019523f, 0.006686f, -0.036608f, 0.040548f, -0.047785f, 0.017608f, -0.007463f, 0.045472f, -0.098125f, -0.067444f, 0.037256f, 0.017546f, 0.012716f, 0.031823f, -0.034328f, -0.043884f, -0.025026f, -0.036221f, 0.018782f, -0.038761f, 0.009779f, 0.024757f, 0.040213f, 0.000870f, 0.033434f, 0.019853f, 0.004259f, -0.011514f, -0.037989f, -0.026065f, 0.019693f, -0.044865f, 0.021099f, 0.005055f, 0.036340f, 0.028869f, -0.015911f, -0.055557f, -0.037842f, -0.003316f, -0.004574f, -0.014553f, 0.036147f, -0.066889f, - -0.007110f, 0.002664f, -0.072241f, -0.000933f, -0.010680f, -0.005068f, 0.005433f, 0.041813f, -0.042250f, -0.109664f, 0.039008f, 0.045967f, 0.024529f, 0.087279f, -0.073324f, -0.007809f, 0.045391f, 0.038120f, -0.047096f, -0.018957f, -0.014960f, 0.069863f, 0.010571f, 0.067076f, -0.096623f, 0.016313f, -0.114817f, -0.063916f, -0.067926f, 0.080361f, 0.021200f, -0.045530f, 0.042119f, 0.009807f, -0.045676f, 0.048542f, -0.061475f, 0.034280f, 0.083970f, 0.031270f, -0.029855f, -0.019284f, 0.011675f, -0.020932f, -0.024891f, -0.002585f, 0.039015f, -0.006344f, 0.007276f, -0.040979f, -0.008622f, 0.057752f, -0.041868f, 0.032211f, 0.074630f, 0.037969f, -0.003354f, -0.013646f, -0.024808f, -0.047151f, -0.035427f, 0.041901f, -0.023786f, 0.039402f, 0.027505f, 0.014050f, 0.001419f, 0.015916f, -0.012376f, -0.059945f, -0.021598f, 0.044413f, 0.033927f, 0.037109f, -0.039076f, 0.067386f, -0.017748f, 0.026853f, -0.049786f, 0.046032f, 0.076607f, -0.014443f, -0.028374f, -0.001685f, 0.001967f, -0.015989f, 0.015980f, 0.035098f, -0.064461f, 0.042972f, 0.039388f, -0.008553f, 0.045775f, 0.026225f, 0.019092f, -0.028299f, - 0.004972f, 0.043376f, -0.089713f, -0.077355f, -0.034038f, 0.022382f, -0.041925f, -0.118343f, 0.049120f, 0.034322f, -0.016470f, -0.019010f, 0.000334f, -0.005973f, -0.040876f, -0.109688f, -0.004426f, -0.002141f, 0.040643f, 0.053909f, 0.001096f, -0.061007f, 0.080535f, -0.022766f, -0.056420f, 0.050335f, -0.008229f, -0.030750f, 0.038854f, 0.010310f, -0.008309f, 0.032756f, -0.045258f, 0.042626f, -0.015461f, 0.001281f, -0.013308f, -0.011372f, -0.063084f, 0.024712f, -0.024237f, 0.009706f, -0.025467f, -0.002294f, -0.019082f, 0.017769f, -0.011332f, 0.067693f, 0.011648f, 0.044176f, -0.017694f, 0.010817f, 0.027656f, -0.012256f, 0.018928f, -0.004203f, 0.033393f, -0.002088f, -0.012014f, 0.053243f, -0.048622f, 0.026301f, 0.035918f, -0.022013f, 0.040666f, -0.025941f, -0.001971f, 0.020776f, -0.017286f, 0.048160f, 0.042517f, 0.008398f, 0.071388f, -0.045555f, -0.104131f, -0.018101f, -0.065139f, -0.042904f, 0.148028f, -0.004828f, 0.043835f, -0.008132f, -0.065760f, -0.002924f, 0.060087f, 0.087684f, 0.050798f, 0.088014f, -0.052516f, -0.016842f, -0.026999f, -0.054797f, 0.026295f, 0.046913f, -0.046932f, 0.059007f, - -0.033631f, 0.009103f, 0.001206f, 0.007112f, -0.043083f, -0.005792f, -0.038793f, -0.032203f, 0.001573f, -0.012079f, -0.028823f, -0.011089f, 0.023798f, -0.024907f, 0.022110f, -0.011263f, 0.063858f, -0.027846f, 0.020313f, 0.004714f, -0.013655f, -0.049001f, -0.016440f, 0.038954f, 0.008824f, -0.011536f, 0.051892f, -0.035987f, -0.035128f, -0.004180f, 0.049821f, -0.042405f, -0.003748f, 0.009392f, 0.015334f, -0.047324f, 0.017043f, 0.017657f, -0.014590f, -0.049510f, 0.003694f, -0.038226f, 0.019527f, 0.009858f, 0.018119f, -0.076100f, -0.029670f, 0.044975f, 0.122061f, -0.052637f, -0.003717f, 0.010657f, -0.016066f, -0.032321f, 0.003578f, 0.100308f, 0.027398f, -0.008759f, -0.003752f, -0.024731f, -0.000673f, -0.018450f, 0.044398f, 0.003805f, -0.017863f, -0.024323f, 0.008967f, 0.020097f, -0.030625f, 0.033556f, 0.020057f, 0.036753f, 0.016364f, 0.045091f, -0.074081f, 0.101338f, 0.015101f, 0.024037f, 0.025305f, -0.021868f, -0.025344f, 0.002196f, -0.008958f, 0.015461f, 0.034287f, -0.045078f, 0.016659f, -0.008552f, 0.013383f, 0.012472f, 0.009202f, 0.027583f, 0.022022f, -0.018552f, 0.019953f, 0.017320f, - -0.014611f, -0.026471f, 0.009875f, -0.008642f, -0.021488f, 0.014897f, 0.012742f, -0.000785f, -0.013507f, 0.001573f, -0.009420f, -0.004170f, 0.002593f, 0.007097f, 0.012094f, -0.019548f, -0.001483f, 0.017683f, -0.005770f, 0.015979f, 0.004501f, 0.011833f, 0.023434f, 0.007534f, -0.020460f, 0.003420f, 0.022531f, -0.010687f, 0.000754f, 0.011133f, -0.033387f, -0.001075f, -0.006753f, -0.031838f, 0.047549f, -0.010528f, 0.000252f, 0.028027f, 0.006900f, -0.019296f, 0.010424f, -0.018426f, -0.001331f, 0.015962f, -0.015378f, -0.005687f, 0.036747f, -0.034901f, 0.007352f, 0.003926f, 0.016405f, -0.015299f, 0.016171f, -0.004846f, 0.019167f, -0.006821f, 0.023609f, -0.098966f, -0.201561f, -0.025806f, 0.126632f, 0.097500f, 0.279449f, 0.134640f, -0.065125f, -0.056680f, -0.132487f, -0.231762f, -0.029367f, -0.089669f, -0.027974f, 0.164127f, 0.104350f, 0.111812f, 0.213116f, -0.007109f, -0.047328f, -0.080036f, -0.211023f, -0.115981f, -0.037631f, -0.038735f, 0.005663f, 0.096470f, 0.074112f, 0.079423f, 0.148563f, 0.087620f, -0.055003f, 0.079912f, -0.083676f, -0.193887f, 0.024542f, -0.129890f, -0.181988f, 0.071515f, - -0.016005f, -0.032932f, 0.222868f, 0.073917f, 0.058885f, 0.193284f, -0.021177f, -0.037007f, 0.058027f, -0.128084f, -0.160875f, -0.042143f, -0.137885f, -0.121628f, 0.025301f, 0.027685f, 0.054704f, 0.169111f, 0.147923f, 0.091372f, 0.105804f, 0.022019f, -0.085083f, -0.089088f, -0.113181f, -0.152452f, -0.073104f, -0.037201f, -0.053618f, 0.048840f, 0.147164f, 0.099735f, 0.094220f, 0.082421f, -0.057406f, 0.005118f, 0.011821f, -0.094694f, -0.026192f, -0.013995f}, - {0.010523f, 0.001233f, -0.009159f, -0.002329f, -0.002385f, -0.001025f, -0.002392f, 0.004557f, 0.010740f, 0.001637f, 0.008729f, 0.003248f, -0.002100f, -0.004759f, 0.004082f, -0.001445f, 0.008632f, 0.006097f, -0.002946f, -0.005422f, -0.006346f, 0.003188f, -0.002123f, 0.000742f, -0.004603f, -0.001929f, -0.001176f, 0.003696f, -0.004506f, 0.003654f, -0.001447f, -0.005044f, 0.006486f, 0.006559f, 0.001073f, 0.002454f, 0.001303f, -0.001286f, -0.004234f, -0.013756f, 0.003805f, -0.004438f, 0.004191f, -0.004394f, -0.005325f, 0.003961f, -0.004692f, 0.002290f, 0.002512f, -0.009690f, 0.000403f, 0.001455f, 0.002411f, -0.003813f, 0.005131f, -0.005090f, -0.003276f, -0.001706f, -0.002315f, 0.003380f, -0.000562f, 0.001633f, 0.002908f, 0.004279f, -0.000754f, -0.004583f, -0.004632f, 0.000302f, -0.009714f, -0.004214f, -0.000897f, 0.008788f, 0.002650f, 0.003527f, 0.002741f, 0.004923f, -0.002073f, 0.004902f, 0.008563f, -0.006586f, -0.005715f, -0.008775f, 0.007741f, 0.003805f, 0.000573f, 0.011506f, -0.001274f, -0.000253f, -0.003666f, -0.002982f, 0.002406f, -0.003214f, -0.006168f, 0.003297f, 0.000866f, 0.009591f, - 0.013137f, -0.003560f, -0.007919f, -0.009718f, -0.000727f, -0.005604f, -0.005419f, -0.003743f, -0.000865f, -0.007765f, 0.007242f, -0.002854f, -0.003024f, -0.005176f, -0.003868f, 0.001298f, 0.008143f, -0.000979f, -0.002533f, 0.002385f, -0.008284f, 0.005985f, -0.005228f, -0.018367f, 0.008891f, 0.005891f, 0.009887f, 0.010302f, 0.001812f, 0.005362f, -0.005627f, 0.001415f, 0.007709f, 0.000480f, -0.000301f, -0.002044f, -0.001271f, 0.004093f, -0.004095f, -0.002936f, -0.000066f, 0.003867f, -0.003639f, -0.004342f, -0.006433f, 0.007616f, 0.002721f, 0.000747f, -0.002349f, -0.008067f, -0.000812f, 0.005527f, 0.002940f, -0.001545f, -0.002417f, 0.005114f, -0.002144f, -0.027383f, 0.014247f, -0.001369f, 0.000378f, 0.004943f, 0.006964f, -0.010213f, -0.001328f, -0.001849f, 0.005782f, 0.002194f, -0.006274f, 0.019442f, -0.002126f, -0.001223f, 0.008615f, 0.007092f, 0.002278f, 0.004917f, 0.015835f, -0.007878f, 0.000447f, -0.004023f, 0.001536f, -0.004904f, 0.000339f, 0.000482f, 0.001724f, -0.008833f, 0.000693f, -0.002132f, -0.003388f, -0.000393f, 0.005468f, -0.003071f, 0.005074f, 0.007486f, -0.013030f, 0.001727f, - -0.005355f, -0.001451f, -0.008070f, 0.003954f, -0.004838f, -0.000836f, -0.002787f, -0.008125f, 0.002968f, -0.005465f, 0.003557f, 0.001994f, -0.004155f, -0.005938f, 0.000026f, 0.005424f, 0.003941f, 0.009889f, 0.004403f, -0.004373f, -0.012434f, -0.000908f, 0.001912f, 0.015299f, -0.005050f, -0.002475f, -0.000480f, -0.003175f, -0.008387f, -0.004058f, -0.007894f, -0.001321f, 0.005698f, -0.001866f, 0.006745f, 0.003974f, 0.002907f, 0.003360f, -0.004609f, 0.020586f, 0.011022f, -0.002621f, -0.007444f, 0.012048f, -0.012753f, -0.001611f, 0.008022f, -0.004895f, -0.003381f, -0.005128f, 0.013787f, -0.004026f, 0.004668f, 0.001731f, 0.004619f, 0.018650f, -0.017514f, 0.006021f, 0.009660f, -0.005398f, -0.016165f, -0.008096f, -0.000554f, 0.001697f, -0.001784f, -0.002377f, 0.007617f, 0.010872f, -0.000245f, -0.006567f, 0.001146f, -0.008490f, 0.003335f, -0.005069f, 0.003844f, 0.011607f, 0.004608f, -0.010244f, 0.000326f, 0.001399f, 0.016949f, 0.003799f, 0.008800f, -0.001586f, 0.004259f, 0.003646f, -0.019098f, 0.001127f, 0.010004f, 0.005167f, 0.011120f, -0.008398f, -0.005021f, -0.008325f, 0.003186f, 0.006855f, - -0.001191f, 0.003001f, 0.001220f, -0.003588f, 0.002483f, -0.002368f, 0.003888f, 0.004165f, 0.000089f, 0.006140f, 0.001788f, 0.000742f, 0.002965f, 0.013420f, 0.003046f, 0.008167f, 0.008640f, 0.041812f, -0.010028f, -0.003261f, -0.005626f, 0.009006f, 0.006265f, 0.014586f, 0.006216f, -0.001523f, 0.007382f, 0.000235f, 0.008190f, 0.003426f, 0.011133f, 0.000720f, 0.009464f, 0.011892f, -0.011949f, 0.002736f, 0.003990f, 0.002560f, 0.002723f, 0.003258f, -0.006784f, 0.000393f, -0.007913f, -0.000860f, 0.000450f, -0.014308f, -0.009201f, 0.004027f, 0.000723f, -0.000186f, 0.006643f, 0.006036f, -0.002176f, -0.012376f, 0.004619f, 0.011666f, 0.008351f, 0.010870f, -0.002017f, 0.005950f, 0.011423f, -0.017423f, 0.006457f, 0.007867f, -0.007800f, 0.010977f, -0.006671f, -0.001540f, 0.001999f, 0.002153f, -0.004914f, 0.005107f, -0.000584f, -0.002079f, -0.005112f, -0.005133f, 0.007101f, 0.005900f, 0.003791f, 0.005725f, 0.010441f, 0.004742f, 0.014138f, -0.003257f, -0.013541f, 0.013562f, 0.003522f, 0.006156f, 0.004242f, -0.003462f, 0.005146f, 0.001357f, 0.002380f, 0.007935f, 0.017481f, -0.021719f, - 0.013133f, 0.002209f, 0.013446f, 0.002594f, -0.008893f, 0.001948f, 0.010124f, -0.013806f, -0.003678f, 0.000861f, -0.015736f, -0.003550f, -0.012331f, -0.007567f, -0.009266f, -0.009674f, 0.002869f, -0.014699f, -0.009808f, -0.011798f, -0.003923f, 0.010392f, 0.002853f, -0.014035f, -0.006386f, -0.014631f, -0.004640f, 0.002679f, 0.019206f, -0.016792f, 0.005533f, -0.004533f, -0.007241f, -0.012552f, -0.000690f, 0.001793f, 0.011761f, 0.006607f, 0.000309f, -0.011306f, -0.020622f, -0.000463f, 0.004227f, 0.014981f, 0.003811f, 0.004759f, -0.012685f, 0.004037f, 0.007918f, 0.000750f, -0.000135f, -0.005902f, -0.007597f, -0.001850f, 0.003786f, 0.001220f, -0.005636f, 0.000442f, -0.014160f, -0.001321f, -0.012308f, 0.007102f, -0.004213f, 0.007266f, -0.012287f, -0.007642f, -0.016223f, -0.000385f, -0.011360f, -0.002225f, 0.001076f, -0.011276f, -0.008454f, 0.005058f, 0.005095f, -0.008884f, -0.051093f, 0.008031f, 0.005660f, -0.014892f, -0.003413f, -0.000265f, 0.000383f, -0.003031f, -0.005001f, -0.003992f, -0.015237f, 0.011410f, -0.007421f, 0.001355f, -0.012682f, -0.004747f, 0.018175f, 0.016249f, -0.010531f, -0.006617f, - 0.000492f, -0.000596f, -0.008625f, -0.010348f, -0.007121f, 0.000866f, 0.000787f, -0.000035f, -0.001016f, 0.003902f, -0.012394f, 0.003518f, 0.000473f, -0.022299f, -0.002572f, -0.006947f, 0.010100f, 0.014249f, 0.002378f, -0.002986f, 0.000804f, -0.013267f, -0.015974f, 0.008200f, 0.016052f, 0.017291f, -0.004636f, 0.002789f, 0.010501f, 0.010220f, -0.005356f, 0.009388f, 0.016226f, -0.001133f, 0.013699f, 0.010985f, -0.013253f, 0.003945f, 0.000990f, 0.014017f, -0.008660f, -0.009906f, 0.008554f, 0.010541f, -0.003169f, 0.000578f, -0.015669f, 0.010800f, -0.008713f, 0.011484f, -0.019615f, 0.001939f, 0.004714f, 0.009364f, 0.000553f, -0.008077f, -0.016634f, -0.020177f, 0.006549f, -0.017876f, 0.021617f, 0.020795f, 0.000193f, -0.029176f, 0.011442f, 0.001213f, -0.005833f, 0.019429f, -0.000391f, -0.017539f, -0.002305f, 0.021170f, -0.027545f, 0.000462f, -0.007264f, -0.021743f, -0.006440f, 0.000007f, -0.004711f, -0.011313f, 0.005784f, -0.009430f, 0.006846f, -0.008082f, -0.014996f, 0.007355f, -0.001617f, 0.010731f, -0.022086f, 0.008447f, 0.016403f, -0.007155f, 0.000835f, 0.016711f, 0.024355f, -0.006954f, - -0.005666f, -0.021321f, 0.000643f, -0.017639f, -0.002010f, -0.012366f, -0.000006f, 0.001393f, 0.009453f, 0.004538f, 0.008574f, -0.006921f, 0.001052f, 0.005433f, -0.001747f, 0.022743f, -0.015938f, -0.007790f, 0.029579f, 0.030163f, -0.006703f, -0.002137f, -0.019800f, -0.009953f, 0.000225f, -0.005471f, -0.013395f, 0.018215f, 0.004865f, -0.004885f, 0.026119f, 0.005185f, -0.013774f, -0.000291f, -0.025599f, -0.012169f, -0.014842f, 0.024345f, -0.006614f, -0.000361f, 0.016711f, -0.004095f, 0.009817f, -0.005517f, -0.021507f, -0.001431f, -0.000132f, -0.004425f, -0.012829f, -0.014147f, 0.007169f, -0.011200f, 0.019576f, -0.006081f, -0.014566f, 0.012247f, 0.024587f, -0.006150f, 0.006705f, -0.006647f, 0.014070f, 0.000354f, -0.030461f, 0.010792f, 0.016444f, 0.001728f, -0.005360f, -0.017478f, 0.014351f, 0.009920f, 0.009087f, 0.002014f, 0.005558f, 0.019783f, -0.014344f, 0.002560f, 0.003377f, -0.010847f, -0.021722f, 0.020322f, 0.010689f, 0.037727f, -0.002509f, 0.016720f, -0.006166f, -0.011678f, 0.001318f, -0.001706f, -0.001280f, -0.003218f, -0.013062f, 0.027150f, -0.000256f, 0.002258f, 0.002860f, -0.003620f, - 0.021161f, 0.002964f, 0.017436f, 0.007897f, 0.001836f, 0.019999f, -0.010832f, -0.022212f, -0.006044f, 0.004151f, 0.001001f, -0.009277f, 0.008700f, -0.006817f, -0.033817f, 0.002274f, 0.003013f, -0.018541f, 0.020792f, -0.031843f, 0.006387f, 0.015687f, 0.022892f, -0.022015f, -0.002305f, 0.016562f, 0.011879f, 0.014272f, 0.003372f, 0.029046f, 0.006235f, 0.012606f, -0.002453f, 0.002622f, 0.012633f, 0.007311f, 0.014431f, 0.002015f, -0.017503f, -0.026141f, 0.015446f, 0.007905f, -0.004069f, 0.004134f, 0.009184f, -0.024404f, 0.001353f, -0.015053f, 0.008616f, 0.000071f, 0.017764f, -0.004386f, 0.008589f, -0.002900f, 0.005490f, 0.003210f, 0.000503f, 0.010291f, 0.013721f, 0.005408f, 0.008491f, -0.018929f, 0.009508f, -0.002570f, -0.033313f, -0.022083f, 0.007258f, -0.024366f, -0.000341f, 0.021827f, -0.013804f, 0.042446f, 0.016515f, -0.007446f, 0.024103f, 0.001970f, -0.005740f, -0.015850f, -0.014873f, -0.022153f, -0.001753f, 0.014383f, -0.014538f, -0.001148f, 0.017082f, 0.007737f, 0.010772f, 0.031346f, 0.006349f, 0.020850f, 0.003119f, 0.004969f, -0.029144f, 0.010433f, 0.006488f, -0.017245f, - -0.000614f, 0.010632f, -0.000233f, 0.007404f, -0.017617f, 0.013468f, -0.001131f, 0.003777f, 0.012665f, -0.023900f, -0.016316f, 0.004063f, -0.000342f, 0.012734f, 0.026798f, -0.002777f, 0.006683f, 0.028479f, -0.010692f, -0.019860f, -0.001113f, 0.020723f, -0.004558f, -0.024702f, 0.001966f, 0.008535f, -0.004759f, -0.008075f, -0.001770f, 0.030717f, -0.005932f, 0.026331f, 0.020317f, 0.023934f, 0.001357f, 0.001368f, 0.014325f, 0.004127f, -0.004987f, 0.004321f, -0.019442f, 0.013850f, 0.024520f, 0.014567f, 0.002048f, 0.012793f, -0.010859f, 0.009542f, -0.010595f, 0.014332f, -0.014028f, -0.000882f, -0.001295f, -0.002325f, 0.043454f, -0.007888f, -0.002738f, -0.005274f, 0.005706f, 0.010443f, 0.022552f, 0.024507f, -0.014915f, 0.004354f, 0.025448f, -0.016819f, -0.019079f, 0.008528f, -0.009039f, 0.008526f, 0.048458f, -0.026821f, 0.001416f, 0.000653f, -0.015850f, -0.003379f, -0.017384f, -0.027178f, -0.020978f, -0.028282f, -0.011118f, 0.002566f, 0.021814f, 0.015889f, 0.005578f, 0.022807f, 0.006672f, 0.013680f, 0.012814f, -0.006982f, 0.019973f, 0.021340f, 0.015235f, -0.030370f, -0.016917f, -0.017898f, - 0.006223f, -0.012583f, 0.000594f, 0.007708f, -0.008836f, -0.021724f, 0.013373f, -0.010730f, 0.004655f, 0.003686f, 0.021246f, -0.023137f, 0.034556f, -0.035108f, 0.035331f, -0.000981f, 0.017717f, -0.018113f, 0.006234f, -0.039232f, -0.021298f, -0.019617f, 0.016916f, 0.006738f, 0.024539f, -0.003502f, 0.000028f, -0.013523f, -0.030526f, 0.018881f, -0.016561f, -0.009903f, 0.014829f, 0.033556f, 0.033950f, 0.014498f, -0.001919f, -0.024135f, 0.013780f, -0.036400f, -0.002294f, -0.021343f, 0.011757f, 0.036218f, -0.035701f, 0.011607f, 0.017415f, -0.024208f, -0.001597f, -0.005569f, 0.013288f, -0.016651f, -0.020958f, 0.002791f, -0.008767f, -0.031659f, -0.027311f, -0.031606f, -0.010212f, 0.017298f, -0.024567f, 0.013164f, -0.033056f, -0.007516f, -0.013774f, -0.012978f, -0.026525f, -0.004191f, -0.010949f, -0.016910f, 0.010276f, -0.018639f, 0.016250f, 0.001728f, 0.012360f, -0.024031f, -0.042648f, -0.005518f, 0.006914f, -0.019330f, -0.014119f, 0.004552f, 0.003858f, -0.022309f, -0.011014f, 0.026382f, 0.012455f, -0.006035f, 0.014250f, 0.038789f, 0.000093f, 0.002870f, 0.002879f, -0.005503f, -0.001967f, 0.003630f, - 0.004253f, -0.034052f, -0.012688f, -0.041113f, -0.013354f, -0.038570f, -0.018069f, -0.000689f, 0.040996f, 0.016907f, -0.021792f, -0.027230f, 0.014762f, 0.030326f, 0.020160f, -0.017833f, 0.024710f, -0.012779f, -0.002558f, -0.047794f, -0.013775f, -0.009112f, -0.005872f, -0.034036f, -0.049049f, 0.011896f, -0.000087f, -0.039787f, 0.009423f, 0.051512f, 0.008002f, 0.001413f, -0.034035f, -0.008890f, 0.001749f, 0.000544f, -0.034888f, 0.022490f, -0.034394f, -0.007092f, 0.007898f, -0.016521f, 0.039066f, -0.032528f, -0.033812f, -0.027193f, 0.037674f, 0.017071f, -0.022533f, -0.019801f, -0.013790f, -0.004008f, -0.012530f, -0.012123f, 0.001253f, 0.014452f, 0.036951f, -0.003889f, 0.015297f, 0.014286f, 0.012773f, -0.024753f, -0.032214f, -0.022113f, 0.025389f, -0.004092f, 0.030981f, 0.011135f, -0.004592f, -0.043145f, -0.036773f, -0.003058f, 0.001700f, -0.024669f, -0.017143f, -0.011164f, -0.013533f, -0.056538f, -0.013913f, -0.013130f, -0.022212f, -0.009176f, -0.015160f, -0.025301f, 0.016759f, 0.036884f, 0.018032f, 0.002176f, 0.019150f, 0.028150f, -0.011695f, 0.009898f, 0.004569f, 0.004149f, -0.003551f, -0.005227f, - 0.016224f, 0.009356f, 0.028765f, -0.005422f, 0.000015f, 0.013401f, 0.058834f, 0.001644f, 0.029283f, 0.044574f, -0.007969f, -0.033327f, -0.001879f, 0.040259f, -0.000780f, -0.025848f, -0.036112f, -0.026584f, 0.038116f, 0.028587f, -0.056005f, 0.021703f, 0.026471f, -0.007321f, 0.020023f, 0.059062f, 0.007536f, 0.015520f, -0.016654f, 0.016054f, -0.017775f, -0.010131f, -0.008120f, 0.007223f, 0.017312f, 0.023288f, -0.000004f, 0.011463f, -0.003218f, -0.000253f, -0.007942f, 0.018042f, 0.055759f, -0.014038f, -0.014185f, 0.022232f, 0.016238f, 0.005214f, -0.035604f, 0.028273f, -0.027806f, 0.020974f, 0.024934f, 0.005877f, 0.008470f, -0.002880f, 0.039250f, 0.031062f, 0.003194f, 0.022106f, -0.011681f, 0.027004f, 0.006801f, 0.030094f, 0.041432f, 0.002935f, 0.012690f, -0.001147f, -0.011268f, 0.002999f, 0.019755f, 0.023033f, -0.033819f, -0.018137f, 0.011658f, 0.044366f, -0.016298f, 0.031099f, 0.020923f, 0.009926f, -0.039660f, 0.010231f, 0.010021f, -0.045824f, 0.033648f, -0.022914f, -0.030335f, -0.058529f, 0.019786f, 0.046182f, -0.013295f, -0.028266f, 0.012763f, 0.052975f, 0.034000f, 0.013887f, - 0.040148f, 0.028859f, -0.010610f, -0.080052f, 0.008954f, 0.039018f, 0.018644f, 0.007859f, -0.035091f, -0.001049f, -0.024256f, 0.004691f, -0.002482f, 0.005621f, 0.011845f, 0.015621f, 0.007046f, -0.044252f, 0.024997f, -0.007163f, 0.007621f, 0.031556f, 0.012728f, 0.004838f, -0.011582f, 0.039299f, -0.001231f, 0.038981f, -0.048843f, -0.015948f, 0.015973f, -0.030202f, -0.024363f, 0.000067f, -0.006046f, -0.024143f, 0.003089f, 0.033886f, -0.000673f, 0.000456f, -0.018202f, -0.041043f, -0.024265f, -0.013251f, 0.016850f, -0.006491f, 0.004491f, -0.021493f, -0.020106f, -0.012639f, 0.031884f, -0.023868f, 0.018767f, 0.009402f, 0.010999f, 0.000723f, -0.031150f, -0.048679f, -0.002703f, 0.027662f, -0.036992f, 0.015243f, -0.031668f, 0.017232f, -0.033350f, -0.005194f, -0.032863f, 0.044571f, -0.042895f, -0.030086f, 0.012378f, 0.003917f, 0.022900f, 0.014246f, -0.010945f, -0.009262f, 0.013334f, -0.066704f, -0.008581f, 0.021296f, 0.005976f, -0.015111f, -0.023157f, 0.003269f, -0.021963f, -0.001102f, -0.034467f, 0.034274f, -0.012264f, 0.021856f, -0.045116f, -0.025107f, 0.000072f, 0.057633f, -0.045254f, -0.002924f, - -0.035193f, -0.027713f, -0.007766f, 0.036561f, -0.007190f, 0.016876f, 0.017637f, -0.017641f, -0.039115f, 0.057813f, 0.025727f, -0.031174f, 0.007370f, 0.005416f, 0.016728f, -0.030232f, 0.029389f, -0.001175f, -0.058065f, 0.007631f, 0.013015f, 0.016688f, -0.047871f, -0.010276f, 0.007396f, 0.044746f, 0.009461f, 0.025676f, -0.062023f, -0.036803f, 0.020709f, 0.001755f, 0.042629f, -0.009220f, -0.005617f, 0.005118f, 0.022385f, 0.021308f, 0.008762f, -0.078257f, 0.024120f, -0.006996f, 0.019887f, 0.045451f, -0.012088f, -0.001031f, -0.047547f, 0.018960f, 0.023577f, -0.022384f, -0.014034f, 0.048215f, 0.071034f, 0.022763f, 0.011535f, -0.014535f, -0.058942f, -0.038845f, -0.013923f, -0.001440f, -0.033928f, 0.025446f, -0.069491f, 0.002507f, -0.042972f, 0.021043f, -0.016439f, -0.047680f, -0.004946f, -0.013444f, -0.017297f, -0.054181f, -0.039727f, 0.010344f, 0.041312f, -0.029048f, 0.051192f, -0.045051f, -0.029843f, 0.008715f, -0.005051f, 0.022822f, -0.015424f, -0.016189f, -0.022166f, -0.006736f, -0.073585f, -0.021701f, 0.001471f, -0.003863f, -0.012766f, -0.029375f, 0.022321f, -0.026043f, 0.038405f, -0.012681f, - -0.005357f, -0.028194f, -0.025886f, -0.048844f, -0.021431f, 0.017343f, 0.007005f, -0.003359f, 0.002901f, -0.017761f, -0.013319f, -0.022726f, -0.018916f, 0.009577f, 0.014310f, 0.006541f, -0.041892f, 0.047867f, 0.006674f, -0.020881f, 0.038709f, 0.027500f, 0.046231f, -0.008561f, 0.027346f, -0.062471f, -0.033060f, -0.058874f, 0.061431f, -0.018921f, -0.040597f, -0.039764f, -0.083993f, -0.035047f, 0.061916f, -0.002859f, -0.027766f, 0.014855f, 0.074460f, 0.095565f, -0.009716f, -0.043121f, -0.010785f, -0.016547f, -0.043783f, 0.018183f, 0.000495f, -0.031588f, 0.091061f, 0.031541f, -0.022528f, -0.063931f, -0.006522f, 0.015107f, 0.015891f, 0.018438f, 0.043016f, -0.012811f, -0.022651f, 0.020485f, -0.080643f, -0.053345f, -0.021832f, -0.005795f, 0.007482f, -0.042587f, -0.039968f, 0.040957f, 0.031431f, -0.025045f, -0.049418f, 0.030644f, -0.000347f, 0.054054f, -0.045237f, -0.009994f, -0.016328f, -0.002611f, -0.036128f, -0.051610f, 0.042043f, -0.031925f, -0.021766f, -0.039364f, -0.010389f, 0.026338f, 0.022961f, -0.015726f, 0.001818f, 0.004830f, 0.031124f, 0.050476f, 0.035269f, -0.064158f, -0.032710f, -0.037991f, - -0.011367f, 0.022140f, 0.006205f, -0.043903f, -0.065118f, 0.053671f, 0.001582f, -0.052693f, -0.089017f, 0.043679f, -0.012967f, 0.023013f, 0.020594f, 0.021920f, 0.002497f, 0.014789f, -0.033078f, -0.017667f, 0.009090f, 0.034252f, 0.042273f, -0.051220f, -0.042918f, 0.124006f, -0.009434f, -0.011500f, -0.018010f, -0.038377f, -0.003738f, 0.045141f, 0.072074f, -0.032339f, -0.019404f, -0.006623f, -0.032057f, -0.007448f, -0.017852f, 0.029126f, -0.028916f, 0.033264f, 0.016043f, -0.010453f, -0.040521f, -0.002259f, -0.016375f, 0.062386f, -0.033303f, -0.000020f, 0.000660f, -0.005302f, 0.028446f, -0.016879f, -0.001732f, 0.013721f, -0.007817f, -0.059217f, 0.031338f, -0.026463f, -0.031101f, -0.006288f, -0.033177f, -0.018618f, -0.060823f, 0.060060f, 0.003539f, -0.038087f, -0.071281f, 0.043258f, -0.041601f, -0.040280f, 0.001630f, -0.031022f, 0.015785f, 0.028085f, 0.083403f, -0.021837f, 0.033612f, -0.005325f, -0.038039f, -0.032053f, -0.007957f, 0.125282f, -0.106743f, -0.006096f, 0.116002f, -0.101802f, -0.036287f, 0.060533f, -0.004858f, -0.044727f, 0.114419f, -0.052017f, -0.016390f, 0.060481f, -0.072153f, 0.068926f, - -0.009206f, -0.039269f, 0.038072f, 0.014809f, -0.004468f, 0.009738f, 0.007079f, -0.005793f, 0.015297f, -0.012114f, -0.016375f, -0.006210f, -0.023528f, -0.019193f, -0.046137f, -0.016231f, 0.043904f, 0.041566f, -0.057871f, 0.022472f, 0.034260f, 0.029134f, -0.007996f, -0.057002f, -0.002999f, -0.026966f, -0.067146f, 0.046356f, 0.113856f, -0.061420f, -0.004440f, 0.081743f, -0.019950f, -0.025601f, 0.066879f, 0.050431f, 0.026197f, -0.023180f, -0.049103f, 0.020120f, -0.018333f, -0.029825f, 0.119369f, 0.088757f, -0.067354f, -0.048645f, 0.065969f, -0.111545f, -0.037237f, -0.029141f, -0.016532f, 0.083763f, 0.056773f, 0.038785f, 0.042117f, -0.130960f, -0.043282f, 0.132636f, 0.078454f, 0.019656f, -0.030022f, 0.049044f, -0.040638f, -0.086416f, -0.056037f, 0.050478f, -0.027803f, -0.000627f, 0.058371f, 0.103819f, -0.003666f, -0.044500f, 0.018027f, 0.051667f, -0.113109f, 0.050477f, 0.001637f, -0.010636f, 0.059586f, -0.008889f, -0.043083f, 0.023270f, 0.021338f, 0.058266f, 0.033516f, -0.029882f, 0.002770f, 0.009900f, 0.040311f, 0.010144f, -0.043995f, -0.000684f, -0.001449f, 0.010256f, -0.040826f, -0.044721f, - 0.067484f, -0.022851f, -0.068193f, 0.036731f, 0.062752f, -0.033591f, -0.010587f, 0.005090f, 0.043425f, -0.049318f, -0.064903f, 0.019193f, 0.057116f, -0.011072f, -0.022530f, -0.012777f, -0.012304f, 0.025327f, 0.011701f, 0.015536f, 0.142172f, 0.008785f, -0.016570f, 0.002915f, 0.005893f, 0.077021f, 0.003932f, -0.026068f, 0.018721f, -0.058505f, -0.033249f, 0.016325f, 0.002052f, 0.066226f, 0.053736f, -0.032751f, -0.007855f, -0.030973f, 0.003635f, 0.024132f, 0.008258f, 0.007875f, 0.025986f, -0.016356f, -0.066372f, 0.017925f, 0.049968f, -0.022026f, 0.045036f, -0.064377f, 0.034796f, 0.018507f, -0.050279f, 0.008006f, 0.008500f, -0.022033f, 0.035526f, -0.077503f, -0.246333f, -0.290766f, -0.029615f, -0.202794f, 0.074387f, 0.481573f, 0.257237f, 0.390458f, 0.411570f, -0.048837f, -0.123547f, 0.031848f, -0.306396f, -0.373475f, -0.118104f, -0.410737f, -0.330674f, 0.079319f, -0.238933f, -0.067603f, 0.464840f, 0.166171f, 0.327535f, 0.568958f, 0.336902f, 0.148970f, 0.112212f, 0.037212f, -0.258731f, -0.320758f, -0.108456f, -0.436824f, -0.437544f, 0.054007f, -0.328087f, -0.269392f, 0.156520f, -0.276046f, - -0.284240f, 0.209026f, 0.082707f, -0.041548f, 0.497022f, 0.465836f, 0.295989f, 0.632666f, 0.595563f, 0.202160f, 0.235419f, 0.183577f, -0.303999f, -0.303979f, -0.384388f, -0.758024f, -0.894930f, -0.643369f, -0.640880f, -0.472231f, 0.015292f, 0.043676f, 0.311361f, 0.539493f, 0.664786f, 0.607021f, 0.704483f, 0.605433f, 0.359743f, 0.245404f, 0.088322f, -0.106947f, -0.250885f, -0.358890f, -0.297171f, -0.433306f, -0.462534f, -0.278542f, -0.133698f, -0.066015f} - }, - { - {-0.000387f, 0.003966f, 0.004430f, 0.012898f, -0.001574f, 0.002067f, 0.001524f, -0.000787f, 0.007292f, 0.005492f, -0.010060f, -0.005690f, -0.009159f, -0.005399f, -0.001026f, -0.006505f, 0.000105f, 0.000704f, 0.000466f, -0.000907f, -0.000582f, -0.008937f, -0.001421f, 0.002066f, 0.003452f, -0.004293f, 0.005535f, 0.001699f, -0.004441f, -0.002937f, 0.001016f, 0.005526f, -0.001841f, -0.001914f, -0.002757f, -0.007439f, 0.001494f, -0.009652f, -0.000804f, -0.004791f, -0.004409f, -0.003184f, 0.002028f, -0.003266f, -0.005482f, -0.003852f, -0.000562f, -0.002800f, -0.007660f, -0.003264f, -0.002159f, -0.001943f, -0.005691f, 0.000797f, -0.002763f, 0.006634f, 0.001325f, -0.007673f, -0.004419f, 0.009380f, -0.002790f, 0.002623f, -0.005097f, 0.002508f, 0.004292f, 0.003953f, -0.006923f, 0.003582f, 0.004978f, 0.003624f, -0.000348f, -0.004138f, -0.002657f, -0.003767f, 0.002586f, -0.001166f, 0.001968f, -0.017090f, -0.020271f, 0.009721f, 0.000125f, 0.014906f, 0.005068f, 0.006342f, 0.003847f, 0.005807f, -0.000696f, -0.000622f, -0.003988f, -0.010478f, -0.006351f, 0.002273f, -0.001054f, -0.002253f, -0.001759f, 0.004966f, - 0.003592f, -0.000320f, 0.004243f, -0.004886f, -0.012046f, 0.003284f, -0.003275f, 0.000928f, -0.006462f, 0.004235f, -0.005417f, -0.002731f, -0.002541f, 0.007877f, -0.002602f, -0.000415f, -0.004107f, -0.001258f, -0.009965f, 0.002817f, -0.002282f, 0.004708f, -0.005137f, 0.000302f, -0.002831f, -0.007722f, 0.001593f, -0.001013f, -0.002800f, 0.003049f, 0.005308f, -0.001521f, -0.004584f, -0.011125f, 0.000133f, -0.006702f, 0.002117f, -0.000115f, -0.005108f, -0.000382f, -0.002749f, -0.001723f, -0.008837f, 0.004885f, -0.007990f, 0.003661f, -0.003818f, -0.004827f, -0.005093f, -0.008540f, 0.003403f, 0.000239f, 0.001005f, 0.004808f, -0.006757f, -0.008895f, 0.003983f, -0.028955f, 0.000000f, -0.003549f, 0.008010f, 0.000496f, 0.003262f, -0.002059f, 0.004120f, 0.001121f, 0.003632f, -0.003000f, 0.019176f, -0.003710f, -0.002397f, -0.007701f, 0.002975f, -0.009371f, -0.002898f, 0.001178f, -0.004524f, 0.000394f, 0.007168f, 0.004449f, 0.002860f, 0.005166f, 0.006954f, -0.007691f, -0.002922f, 0.000369f, 0.004484f, -0.007191f, 0.007741f, -0.005908f, -0.003079f, 0.006634f, -0.000965f, 0.002009f, -0.004633f, 0.006220f, - 0.006012f, 0.006932f, -0.009467f, -0.002249f, 0.010562f, 0.000582f, -0.001418f, -0.001581f, 0.011488f, 0.008183f, 0.008915f, 0.000981f, -0.001920f, -0.001760f, -0.000496f, 0.000672f, 0.001412f, 0.004353f, -0.010847f, 0.000023f, -0.004992f, -0.005406f, -0.000734f, 0.003015f, -0.005575f, 0.002749f, -0.004231f, -0.000268f, -0.001632f, 0.001308f, 0.003941f, 0.005101f, -0.001805f, 0.000472f, -0.002218f, -0.006869f, -0.001573f, 0.010296f, 0.012132f, -0.007861f, 0.001402f, -0.006657f, 0.011150f, 0.002319f, -0.004113f, -0.005996f, -0.005244f, -0.000839f, 0.001730f, 0.003197f, 0.014736f, -0.008215f, -0.000990f, -0.003062f, 0.006007f, -0.015716f, -0.001498f, 0.010571f, 0.000104f, 0.008939f, 0.004198f, 0.007240f, 0.007582f, 0.003468f, -0.000992f, -0.007186f, 0.002909f, -0.001753f, 0.001389f, 0.012332f, 0.003462f, 0.010641f, -0.004939f, -0.002429f, 0.001255f, -0.013428f, 0.002105f, 0.010725f, -0.002530f, 0.001377f, -0.008113f, 0.006952f, 0.000400f, 0.003343f, -0.009654f, 0.006482f, -0.006271f, -0.003340f, -0.006547f, -0.007910f, 0.005516f, 0.002196f, -0.002032f, -0.003731f, -0.003336f, -0.002375f, - -0.001241f, 0.005447f, -0.003863f, -0.007821f, -0.012244f, 0.013017f, 0.010408f, 0.001418f, -0.012018f, 0.005043f, -0.004972f, 0.006393f, -0.002655f, 0.002367f, -0.006023f, -0.003335f, -0.007541f, -0.002354f, 0.005155f, 0.049793f, -0.018495f, 0.022308f, -0.017729f, 0.001521f, 0.005287f, 0.005236f, -0.014642f, -0.004968f, -0.004928f, -0.024499f, -0.000150f, 0.001296f, -0.008850f, -0.001429f, -0.000131f, 0.017516f, 0.003209f, -0.012220f, 0.008887f, 0.009738f, 0.002134f, 0.017755f, -0.013251f, -0.004837f, -0.007110f, 0.003744f, 0.014164f, -0.001040f, 0.000828f, 0.005283f, -0.002622f, 0.006345f, 0.002784f, 0.016239f, -0.002551f, 0.006354f, -0.010756f, 0.009696f, -0.007577f, 0.010824f, -0.000331f, -0.011368f, -0.001856f, 0.016355f, -0.000895f, 0.011052f, 0.006465f, 0.010623f, 0.000737f, -0.008482f, -0.007102f, 0.000127f, -0.005368f, 0.008697f, 0.005506f, -0.008726f, 0.000859f, -0.006840f, 0.011175f, -0.003223f, 0.008839f, 0.010977f, 0.001445f, 0.011306f, -0.001096f, -0.005651f, -0.002547f, -0.007188f, -0.000471f, 0.014831f, -0.010377f, -0.009823f, -0.004907f, 0.004009f, -0.005073f, -0.041562f, - 0.004447f, -0.012300f, -0.008829f, -0.013479f, -0.016333f, 0.006320f, 0.014419f, -0.002270f, 0.005545f, 0.002220f, 0.007353f, 0.001614f, 0.000443f, 0.004426f, -0.008993f, 0.020533f, -0.001178f, -0.012065f, 0.013416f, -0.004201f, 0.005632f, -0.013586f, -0.008523f, -0.009643f, 0.004039f, 0.002459f, 0.010472f, 0.000265f, -0.006685f, 0.001053f, -0.005981f, -0.006504f, -0.007270f, -0.002536f, -0.010078f, -0.005097f, 0.009181f, -0.008689f, -0.000720f, -0.006804f, -0.010684f, -0.004749f, 0.001221f, 0.003357f, 0.006614f, -0.005358f, -0.004983f, 0.006609f, 0.001064f, 0.002472f, 0.001672f, 0.004084f, 0.006142f, -0.010151f, -0.003470f, -0.001055f, -0.014264f, 0.003732f, -0.001062f, 0.008276f, -0.008372f, -0.006401f, -0.007814f, 0.001281f, 0.008785f, 0.006731f, 0.015535f, 0.010304f, -0.009562f, 0.003724f, -0.004270f, 0.007079f, 0.004745f, -0.010824f, -0.053484f, 0.013818f, -0.016426f, -0.013804f, -0.010114f, 0.001095f, -0.003422f, 0.030418f, 0.002390f, 0.006752f, -0.004141f, -0.000575f, -0.013452f, 0.011991f, 0.003031f, -0.002553f, 0.001873f, 0.015858f, -0.008978f, -0.003583f, 0.003144f, 0.000425f, - 0.007633f, -0.007970f, -0.003945f, 0.008403f, 0.002663f, 0.007675f, 0.000308f, -0.009692f, -0.006559f, 0.004276f, -0.001585f, -0.003809f, -0.006304f, -0.004007f, -0.001101f, 0.014908f, 0.003221f, -0.003647f, -0.000428f, 0.000343f, -0.005537f, 0.010484f, 0.007871f, -0.003540f, -0.012694f, 0.002118f, -0.007123f, 0.009893f, 0.007506f, -0.009277f, 0.002390f, -0.011767f, -0.010600f, -0.009436f, -0.011641f, -0.004635f, 0.001354f, -0.007389f, -0.000528f, -0.008080f, -0.007139f, 0.011392f, 0.006678f, -0.011536f, -0.015497f, 0.000537f, 0.010637f, -0.010414f, -0.008550f, 0.009088f, 0.006136f, 0.010479f, -0.027969f, -0.002922f, 0.004529f, 0.013352f, -0.002780f, -0.007265f, 0.003032f, 0.019689f, -0.025160f, 0.005612f, -0.005202f, -0.004843f, -0.011382f, 0.006570f, -0.020164f, -0.013264f, 0.006799f, -0.010699f, 0.006256f, 0.028361f, -0.005135f, 0.011331f, -0.013508f, 0.013576f, -0.003645f, 0.003889f, -0.012102f, 0.005398f, 0.003386f, -0.006693f, 0.002815f, -0.001538f, -0.006214f, -0.000650f, 0.007847f, 0.012065f, -0.009623f, -0.015603f, -0.012152f, -0.011517f, 0.001498f, 0.008784f, 0.023949f, -0.000509f, - 0.016159f, 0.016576f, -0.015558f, 0.011795f, -0.022904f, -0.008634f, 0.001570f, -0.010449f, -0.009405f, 0.006169f, -0.022126f, -0.004603f, 0.015664f, -0.006876f, -0.005643f, 0.001870f, -0.006600f, 0.006175f, -0.006526f, 0.010727f, 0.014288f, -0.004011f, 0.004633f, 0.000487f, -0.013924f, 0.001152f, -0.008880f, -0.006395f, -0.010869f, 0.006333f, 0.005352f, -0.010969f, 0.001865f, 0.005787f, 0.066203f, -0.002903f, -0.025752f, -0.002997f, -0.000816f, 0.002750f, 0.008644f, 0.003623f, -0.002665f, -0.002487f, -0.012758f, -0.006015f, 0.007739f, 0.016287f, -0.012803f, -0.008137f, 0.011157f, 0.001019f, -0.003452f, 0.004432f, -0.000621f, -0.015174f, -0.015115f, 0.021250f, -0.001520f, -0.001294f, -0.003074f, 0.010902f, -0.000369f, 0.001146f, 0.007408f, -0.011630f, 0.012799f, 0.005053f, 0.002510f, 0.004598f, 0.012812f, -0.029719f, -0.012719f, -0.007378f, 0.027788f, 0.003290f, 0.002578f, -0.008674f, -0.008705f, 0.007823f, -0.000678f, 0.009060f, -0.002812f, -0.019374f, 0.002587f, 0.001761f, -0.002301f, 0.008548f, 0.004688f, 0.001726f, 0.015672f, 0.035975f, -0.002359f, -0.004113f, 0.014576f, 0.003098f, - -0.003817f, 0.008273f, 0.029176f, -0.004831f, 0.005966f, 0.008451f, 0.008773f, 0.005112f, 0.007970f, 0.005587f, 0.006788f, -0.011410f, 0.011420f, 0.014922f, -0.005431f, 0.013037f, 0.014563f, -0.019149f, -0.005711f, -0.016314f, 0.015642f, 0.029406f, -0.014437f, -0.003666f, -0.016518f, -0.007439f, -0.019932f, 0.013728f, -0.012222f, -0.005277f, -0.001423f, -0.000247f, -0.007993f, -0.010082f, 0.017626f, -0.016519f, -0.006046f, 0.001407f, 0.012025f, 0.012475f, -0.018621f, -0.005922f, 0.007092f, -0.016446f, 0.009042f, -0.013163f, -0.005167f, 0.004149f, 0.000386f, -0.007464f, -0.001895f, 0.003261f, 0.020790f, 0.001991f, 0.004758f, -0.000588f, -0.017633f, 0.018758f, -0.009383f, -0.015161f, 0.011769f, -0.011012f, -0.011548f, 0.014589f, -0.006713f, 0.001250f, -0.003156f, 0.001322f, 0.020319f, -0.004191f, 0.004778f, -0.018334f, -0.001068f, 0.019614f, 0.004913f, 0.019394f, 0.017709f, -0.006585f, -0.004019f, -0.024460f, 0.004074f, -0.004909f, 0.016111f, 0.018141f, -0.010450f, 0.003746f, -0.033995f, -0.010498f, 0.012088f, -0.012984f, 0.018508f, 0.012209f, -0.014886f, 0.005490f, -0.013912f, -0.001236f, - -0.018896f, 0.031783f, -0.009016f, 0.002474f, -0.009698f, -0.028351f, 0.016769f, 0.006153f, -0.021202f, 0.013632f, -0.009444f, -0.006719f, 0.007686f, 0.030177f, -0.014679f, 0.029179f, -0.000392f, -0.019794f, 0.001014f, 0.007162f, -0.017638f, 0.020095f, -0.010160f, 0.015014f, 0.031743f, 0.003581f, -0.014644f, -0.003625f, -0.001574f, 0.007773f, -0.012459f, -0.006313f, -0.001607f, 0.016149f, -0.005486f, -0.005668f, -0.020628f, -0.000088f, -0.024413f, -0.003869f, 0.027763f, -0.005550f, 0.015814f, 0.002201f, 0.004226f, -0.035596f, 0.000501f, -0.022472f, 0.018717f, 0.033380f, 0.010021f, 0.009054f, 0.001984f, 0.005810f, -0.019040f, 0.007692f, 0.010082f, -0.007380f, -0.002442f, -0.006321f, -0.004857f, 0.015976f, 0.000255f, 0.019262f, 0.054483f, 0.021610f, 0.005428f, -0.016705f, -0.017314f, -0.008627f, 0.011131f, -0.013955f, -0.008288f, 0.055545f, -0.032323f, -0.002282f, -0.016802f, -0.030354f, -0.040077f, 0.009269f, -0.013862f, 0.009909f, -0.038024f, 0.005760f, 0.011521f, 0.010318f, -0.016854f, -0.034922f, -0.027924f, -0.023554f, -0.001248f, -0.014270f, -0.026007f, -0.018205f, -0.010106f, -0.021334f, - -0.015490f, 0.001977f, 0.023683f, -0.002020f, 0.002035f, -0.002252f, -0.023778f, 0.012338f, -0.003590f, 0.002690f, -0.006525f, -0.015995f, 0.010939f, -0.019600f, -0.027178f, 0.021688f, -0.026544f, 0.003705f, -0.001775f, -0.036228f, -0.022458f, 0.012518f, -0.002149f, 0.015705f, -0.012694f, -0.038280f, -0.001633f, 0.000248f, 0.012423f, 0.013836f, 0.033332f, -0.021065f, -0.072984f, -0.025896f, -0.025755f, 0.015258f, -0.047923f, -0.016453f, -0.008977f, -0.043314f, -0.015351f, -0.001150f, -0.009114f, -0.008275f, 0.008534f, -0.011573f, -0.001575f, -0.010582f, 0.009866f, -0.024513f, 0.009559f, 0.021524f, -0.022912f, -0.032214f, 0.013819f, 0.017191f, -0.004745f, -0.005438f, -0.015812f, -0.017184f, 0.042570f, 0.016334f, -0.038622f, 0.014667f, -0.020841f, -0.000863f, -0.018940f, -0.039007f, 0.012224f, -0.019670f, -0.008423f, 0.003036f, 0.001486f, -0.008805f, -0.033782f, -0.019594f, 0.016913f, -0.019283f, -0.000412f, -0.016798f, -0.028214f, -0.009286f, 0.031526f, 0.006872f, 0.005621f, -0.025514f, -0.009228f, -0.003611f, -0.003656f, 0.013251f, 0.013658f, 0.019978f, 0.021819f, -0.008432f, 0.012164f, 0.006757f, - -0.013000f, 0.010343f, -0.021705f, -0.015942f, -0.016491f, 0.009739f, -0.019049f, 0.003844f, -0.028472f, -0.021402f, -0.013224f, 0.032246f, 0.021959f, 0.025476f, 0.023542f, -0.018687f, 0.029603f, 0.004915f, 0.013099f, 0.046001f, -0.009625f, -0.003243f, 0.005669f, -0.015342f, 0.007021f, -0.004250f, -0.027476f, 0.009115f, 0.019573f, -0.018752f, -0.019914f, 0.004296f, 0.020398f, -0.009390f, -0.016504f, -0.037560f, 0.041475f, -0.033639f, 0.042970f, 0.023751f, 0.015928f, 0.008656f, 0.016449f, 0.017943f, 0.016515f, 0.046238f, -0.017156f, 0.002608f, -0.003871f, -0.008806f, -0.002168f, 0.005107f, -0.005114f, 0.008311f, -0.003810f, 0.013954f, 0.011538f, -0.003380f, -0.008922f, -0.047528f, -0.017474f, -0.034691f, -0.002391f, 0.017122f, 0.017207f, 0.004959f, 0.008333f, 0.012690f, 0.010260f, 0.012259f, 0.032598f, 0.049141f, 0.032593f, 0.005907f, -0.007321f, -0.010533f, -0.015346f, 0.016582f, 0.016776f, 0.019036f, -0.015923f, -0.012668f, -0.019536f, -0.004044f, 0.023190f, -0.000804f, 0.027967f, -0.018782f, 0.014356f, 0.008280f, 0.024846f, -0.055943f, -0.040630f, -0.017322f, -0.023517f, -0.023854f, - 0.005140f, -0.010629f, 0.032720f, 0.008675f, -0.040308f, -0.004860f, 0.060095f, -0.022822f, 0.017076f, -0.011469f, 0.022915f, -0.014229f, -0.010875f, -0.001607f, -0.027801f, -0.014333f, 0.021563f, 0.008940f, 0.015702f, 0.042202f, 0.002888f, 0.027912f, 0.041261f, 0.028341f, -0.019808f, -0.043635f, -0.002211f, -0.020514f, 0.045355f, 0.012385f, 0.035278f, -0.006051f, -0.020055f, -0.008033f, -0.021805f, 0.007391f, -0.016936f, 0.001017f, -0.018770f, 0.008449f, -0.013892f, -0.006519f, -0.029687f, -0.029723f, -0.003518f, -0.042171f, 0.021900f, 0.014529f, -0.012955f, 0.020062f, -0.010651f, 0.007159f, 0.022880f, -0.027094f, -0.034694f, 0.004989f, -0.007999f, 0.056189f, 0.023825f, -0.063996f, -0.017458f, -0.018997f, -0.032883f, -0.035513f, -0.070634f, 0.011174f, -0.025523f, -0.007830f, 0.009765f, 0.001278f, 0.014220f, -0.004105f, -0.008476f, -0.054595f, 0.006254f, -0.025619f, 0.006572f, 0.029728f, 0.006735f, 0.019371f, -0.031384f, -0.043750f, 0.009053f, 0.024337f, 0.018403f, 0.007896f, 0.017927f, 0.025039f, 0.035755f, 0.032536f, 0.075273f, 0.049443f, 0.069023f, 0.003735f, -0.014530f, -0.048199f, - -0.014663f, 0.007088f, 0.010330f, -0.012163f, -0.037270f, -0.014130f, 0.059626f, 0.023994f, -0.008955f, 0.017502f, -0.001966f, -0.023127f, -0.007060f, -0.015467f, 0.040507f, -0.004212f, 0.001842f, 0.016643f, 0.000607f, 0.018995f, -0.000759f, 0.027317f, -0.026755f, 0.031611f, 0.006113f, -0.016545f, -0.009776f, -0.018239f, 0.029112f, -0.042416f, -0.044857f, 0.026630f, 0.045856f, 0.000708f, 0.031497f, 0.042493f, -0.050086f, 0.014902f, 0.009612f, -0.004390f, -0.000973f, 0.005616f, -0.019134f, 0.032737f, -0.021514f, -0.018593f, 0.013415f, -0.000259f, -0.004313f, -0.010170f, -0.010918f, 0.002733f, -0.033350f, -0.012198f, 0.025732f, -0.034851f, -0.008117f, -0.024552f, 0.000096f, 0.062414f, -0.021320f, 0.000987f, 0.016622f, -0.003226f, -0.016039f, -0.044829f, 0.038707f, 0.013941f, -0.083862f, 0.014449f, 0.016795f, -0.034227f, -0.081667f, 0.072156f, 0.042890f, 0.022699f, 0.015858f, 0.035512f, -0.082444f, 0.033460f, 0.037613f, 0.015971f, -0.052925f, 0.028976f, 0.052800f, 0.024342f, 0.058231f, 0.021069f, 0.000583f, -0.002659f, -0.002292f, -0.010339f, 0.024346f, 0.041268f, 0.039131f, 0.013457f, - -0.012774f, -0.021132f, 0.004307f, -0.019316f, -0.022754f, 0.022680f, 0.015186f, 0.003851f, -0.022945f, -0.022124f, -0.005652f, -0.019372f, 0.008516f, 0.047128f, -0.009636f, -0.016288f, 0.014914f, 0.007784f, 0.012808f, 0.015737f, -0.005186f, -0.010741f, 0.036768f, 0.024253f, 0.010690f, 0.015651f, -0.005205f, -0.039687f, 0.006505f, 0.023812f, 0.000639f, -0.030275f, 0.035055f, 0.007872f, 0.049520f, -0.000356f, 0.043660f, 0.002445f, -0.020172f, -0.008109f, 0.006053f, 0.064223f, -0.014963f, 0.020171f, 0.008885f, 0.026949f, 0.006915f, -0.006225f, -0.015197f, 0.012264f, 0.076650f, -0.010651f, -0.010323f, -0.051870f, 0.059364f, 0.000268f, 0.052713f, 0.002393f, 0.004770f, -0.045638f, -0.013057f, -0.019964f, 0.037049f, 0.010118f, 0.017202f, 0.010441f, -0.034476f, 0.004527f, 0.004321f, -0.030569f, -0.043635f, -0.045182f, 0.017125f, -0.016255f, 0.043538f, 0.003267f, -0.011739f, -0.010081f, 0.010673f, -0.015472f, 0.004362f, 0.013065f, -0.015981f, 0.010645f, 0.015876f, 0.005513f, 0.005802f, 0.032416f, 0.055194f, -0.009844f, 0.001399f, 0.027414f, 0.023829f, 0.032683f, -0.021951f, -0.008841f, - 0.011609f, -0.031490f, 0.005078f, 0.003204f, -0.040448f, 0.055089f, -0.000662f, 0.027951f, 0.025884f, 0.017012f, -0.030209f, 0.003306f, 0.029689f, -0.022253f, 0.051220f, 0.013627f, -0.015830f, 0.040683f, 0.032731f, 0.021368f, -0.066278f, -0.013998f, 0.015632f, -0.023504f, 0.005577f, -0.038396f, -0.007878f, -0.058186f, -0.015298f, -0.009416f, -0.015613f, -0.064867f, -0.008223f, -0.017476f, 0.070446f, 0.033735f, 0.030111f, 0.023363f, -0.010412f, 0.015999f, 0.036687f, 0.035435f, 0.017823f, -0.034564f, -0.040524f, 0.023445f, -0.002187f, 0.017966f, -0.004227f, 0.041381f, -0.024159f, -0.002152f, -0.005711f, 0.036526f, -0.020697f, 0.061271f, 0.074901f, 0.075887f, 0.008507f, -0.009818f, 0.015810f, -0.005824f, 0.021778f, 0.000464f, 0.003708f, -0.017656f, -0.053891f, -0.015826f, -0.051424f, 0.035327f, 0.034131f, -0.030793f, -0.021469f, -0.030907f, -0.011877f, -0.001571f, 0.079924f, 0.004243f, -0.034477f, -0.038208f, 0.001659f, 0.056244f, 0.029463f, -0.102946f, -0.017534f, -0.015594f, 0.018063f, 0.043027f, -0.042064f, -0.011557f, -0.023479f, 0.015028f, -0.059035f, 0.034160f, -0.006731f, 0.001313f, - 0.021057f, 0.005165f, -0.027460f, 0.064465f, -0.003195f, 0.031603f, 0.069065f, 0.137926f, 0.083637f, -0.001039f, 0.046781f, 0.069385f, 0.088572f, 0.094742f, 0.023602f, 0.051044f, 0.020299f, -0.009680f, -0.026819f, 0.039066f, -0.040685f, 0.078089f, -0.005339f, -0.009376f, 0.004652f, 0.063257f, -0.036193f, -0.002509f, 0.001338f, 0.005365f, 0.024328f, -0.010561f, 0.033667f, 0.015532f, -0.003096f, 0.012120f, 0.006127f, 0.029326f, -0.071696f, -0.018148f, 0.000069f, 0.013234f, -0.005126f, -0.048505f, 0.046428f, 0.003238f, 0.008005f, 0.021925f, -0.033464f, -0.010035f, -0.080167f, 0.027897f, -0.017676f, 0.022095f, 0.061076f, -0.009770f, 0.013692f, -0.000860f, 0.029473f, -0.041778f, -0.064563f, 0.064593f, -0.004780f, 0.012535f, 0.010084f, 0.065512f, 0.042129f, 0.058239f, -0.000952f, -0.058292f, 0.039346f, 0.027675f, -0.016458f, -0.014179f, 0.036988f, 0.003071f, 0.046670f, 0.090007f, 0.060001f, 0.021835f, 0.003225f, 0.070722f, -0.014215f, 0.031153f, 0.044957f, -0.018389f, 0.051833f, 0.050168f, 0.015254f, -0.021069f, -0.024737f, -0.030662f, -0.005348f, -0.003460f, -0.103189f, 0.022922f, - -0.017364f, -0.004733f, 0.079961f, 0.033705f, -0.025337f, -0.020348f, -0.000394f, -0.052848f, -0.063577f, 0.004344f, 0.000650f, -0.036890f, 0.038156f, 0.003404f, -0.036407f, 0.021914f, 0.069403f, -0.010610f, -0.039271f, 0.023524f, -0.022819f, -0.027051f, 0.013585f, 0.054436f, -0.017434f, 0.006507f, 0.016302f, -0.019076f, -0.040680f, -0.029257f, 0.056525f, 0.017509f, -0.053271f, 0.044625f, 0.019745f, -0.039551f, -0.017974f, 0.074630f, -0.023287f, -0.061345f, -0.028445f, 0.099735f, -0.098844f, -0.049305f, 0.062058f, -0.029748f, -0.030062f, -0.098892f, 0.077554f, -0.064431f, 0.024802f, 0.000194f, -0.008569f, -0.111675f, -0.028888f, 0.089653f, 0.062018f, -0.076831f, -0.016435f, -0.035338f, -0.011122f, 0.011372f, 0.024353f, 0.020345f, -0.123840f, 0.066139f, 0.058334f, 0.052275f, 0.005381f, 0.025235f, -0.058867f, -0.060126f, 0.110727f, 0.041244f, -0.084115f, 0.015296f, 0.106476f, 0.033657f, 0.012036f, 0.003449f, 0.008650f, 0.045909f, 0.062852f, -0.013710f, 0.012351f, 0.016544f, -0.009931f, 0.037925f, -0.018970f, -0.004884f, -0.014141f, 0.029189f, 0.022215f, -0.011393f, 0.020515f, -0.027887f, - -0.022125f, 0.029069f, -0.017583f, 0.031885f, -0.020138f, -0.009094f, 0.000334f, 0.017506f, -0.000104f, 0.013058f, 0.006206f, 0.032359f, -0.021999f, -0.004456f, 0.001619f, -0.012683f, 0.032154f, 0.027049f, -0.021162f, -0.007839f, -0.012549f, 0.007180f, -0.027563f, 0.015509f, 0.010063f, 0.014209f, -0.010250f, -0.008761f, 0.036639f, -0.042582f, -0.006053f, 0.017837f, -0.010196f, -0.007853f, 0.019883f, -0.052385f, 0.014036f, -0.019068f, 0.004599f, -0.018684f, 0.046710f, -0.014872f, -0.017909f, 0.018405f, -0.008562f, -0.029708f, 0.059289f, -0.001581f, 0.007928f, -0.012631f, -0.019701f, -0.025441f, 0.032278f, -0.030915f, -0.009979f, 0.026240f, -0.080321f, -0.224455f, -0.184641f, 0.095419f, 0.026374f, 0.220224f, 0.394662f, 0.057369f, 0.123475f, 0.043965f, -0.317289f, -0.101364f, -0.215684f, -0.260450f, 0.005906f, 0.039882f, -0.109394f, 0.155065f, 0.203534f, 0.113520f, 0.325427f, 0.186971f, -0.043382f, -0.079049f, -0.152966f, -0.296623f, -0.234394f, -0.070184f, -0.209147f, -0.030446f, 0.178033f, 0.028468f, 0.040461f, 0.269634f, 0.137036f, 0.084088f, 0.281409f, 0.042095f, -0.079266f, 0.109062f, - -0.149251f, -0.294650f, -0.123898f, -0.248799f, -0.310780f, -0.005912f, -0.065792f, -0.082854f, 0.205106f, 0.225923f, 0.143556f, 0.341585f, 0.275648f, 0.129280f, 0.117099f, 0.067179f, -0.229950f, -0.211832f, -0.267625f, -0.353361f, -0.283130f, -0.120038f, -0.082267f, 0.006631f, 0.202540f, 0.246053f, 0.258287f, 0.247356f, 0.230211f, 0.049736f, 0.006617f, -0.036712f, -0.169894f, -0.186156f, -0.100231f, -0.181902f, -0.041978f, 0.022171f, 0.002014f}, - {-0.001329f, 0.002296f, 0.006628f, 0.008642f, 0.000113f, -0.004743f, 0.006038f, 0.003391f, 0.007143f, 0.008806f, -0.003533f, -0.001013f, -0.007112f, 0.003974f, 0.001243f, -0.002997f, -0.008503f, 0.002850f, 0.004328f, 0.005820f, 0.000336f, -0.008059f, -0.004587f, 0.004665f, -0.005540f, 0.004872f, -0.001200f, 0.001632f, 0.001913f, 0.001833f, -0.008173f, 0.002557f, 0.002996f, -0.005618f, -0.009468f, -0.009054f, 0.000491f, 0.000723f, 0.001863f, -0.000543f, 0.000070f, -0.002627f, 0.004379f, -0.000777f, 0.003823f, -0.005796f, -0.000726f, 0.006083f, 0.011223f, 0.000880f, -0.000236f, 0.001456f, 0.006569f, 0.004245f, -0.008038f, 0.002104f, 0.003937f, 0.002497f, 0.000020f, 0.004284f, 0.003871f, 0.002459f, 0.002503f, 0.001537f, -0.002070f, -0.004696f, 0.006075f, 0.002632f, -0.003753f, -0.000720f, -0.003076f, 0.004070f, -0.000081f, -0.002792f, 0.003409f, 0.002277f, 0.001675f, -0.019901f, -0.024173f, 0.011876f, -0.004587f, 0.010354f, -0.005445f, -0.005593f, -0.010912f, 0.002301f, 0.002089f, -0.000711f, -0.000006f, -0.001438f, -0.008377f, -0.001194f, -0.004861f, -0.005640f, -0.005278f, -0.000448f, - 0.000456f, -0.000665f, -0.001079f, 0.003807f, -0.001280f, -0.012676f, 0.007575f, 0.003566f, -0.004367f, 0.000962f, -0.000255f, -0.000151f, 0.001614f, 0.007688f, -0.004569f, 0.000176f, -0.014180f, 0.006707f, 0.001273f, 0.002857f, 0.004757f, 0.007583f, -0.004513f, -0.003680f, -0.001688f, -0.007401f, 0.000484f, -0.001401f, 0.006037f, -0.003632f, -0.000486f, -0.003776f, -0.003980f, 0.007082f, -0.005660f, -0.003085f, 0.000659f, -0.005475f, 0.004222f, -0.000583f, -0.002411f, 0.004198f, 0.008439f, 0.000110f, -0.000323f, -0.001621f, 0.007239f, -0.007629f, 0.000095f, -0.001597f, 0.003823f, -0.002270f, -0.003235f, 0.007312f, -0.000092f, 0.001044f, -0.002202f, -0.028829f, 0.004607f, 0.003132f, 0.009762f, -0.004169f, 0.002776f, 0.011408f, -0.004775f, 0.002947f, -0.007334f, -0.010604f, 0.003522f, -0.007292f, -0.008334f, -0.008315f, 0.002151f, 0.002854f, -0.014079f, 0.007880f, 0.005082f, -0.002573f, -0.005349f, 0.003001f, -0.001560f, -0.003366f, 0.000688f, 0.004347f, 0.003064f, 0.007078f, 0.001085f, -0.002449f, 0.007186f, -0.004007f, 0.016058f, 0.003465f, 0.009756f, 0.003665f, 0.008509f, 0.003716f, - 0.005747f, 0.003074f, 0.000360f, 0.000104f, 0.012028f, 0.001864f, -0.002380f, 0.000576f, 0.006154f, 0.004602f, 0.000305f, -0.000813f, -0.002970f, 0.001118f, 0.014705f, 0.004067f, 0.006551f, -0.007599f, -0.004222f, -0.008011f, -0.005351f, -0.007800f, 0.005134f, 0.003221f, -0.005294f, -0.003761f, 0.002841f, -0.003945f, 0.003209f, -0.002088f, -0.001718f, -0.005628f, -0.009351f, 0.003258f, -0.014851f, -0.002581f, -0.003766f, 0.016415f, 0.022490f, -0.006460f, 0.006283f, -0.010677f, -0.000262f, 0.000996f, 0.028640f, -0.002554f, -0.007163f, -0.011859f, 0.000605f, 0.008478f, 0.013346f, -0.002580f, -0.016775f, -0.004555f, -0.006198f, -0.004300f, 0.006130f, -0.000879f, 0.011197f, 0.001596f, -0.005832f, -0.013436f, 0.004470f, -0.000897f, 0.003536f, -0.001260f, 0.001886f, 0.007194f, 0.002812f, -0.016969f, 0.002423f, 0.011632f, 0.005835f, 0.001829f, 0.003012f, -0.002329f, 0.008090f, -0.009805f, -0.000666f, 0.008983f, -0.005512f, 0.000517f, 0.014130f, -0.005833f, -0.000304f, -0.004115f, 0.008833f, -0.008339f, -0.006265f, 0.004737f, -0.008892f, -0.003921f, 0.012399f, 0.007751f, -0.010392f, -0.003254f, - -0.001249f, -0.001912f, -0.004537f, 0.004674f, -0.003844f, 0.005301f, 0.000226f, 0.001598f, 0.002286f, 0.010105f, -0.000715f, 0.013640f, 0.006745f, -0.008397f, -0.004254f, -0.003376f, 0.007502f, 0.003398f, -0.000093f, 0.052424f, -0.019996f, 0.010276f, -0.015381f, -0.002002f, 0.000065f, -0.001537f, -0.008373f, 0.003884f, 0.005621f, 0.001033f, -0.006220f, -0.012696f, -0.000928f, 0.007042f, 0.004847f, -0.005829f, -0.009698f, -0.001184f, 0.007782f, 0.014646f, -0.008619f, -0.001532f, -0.006629f, -0.013640f, 0.000989f, -0.007077f, 0.003514f, -0.005351f, 0.009773f, -0.018460f, 0.011670f, -0.001228f, -0.011244f, 0.002188f, 0.004003f, -0.001696f, -0.006209f, -0.000069f, 0.013570f, -0.000950f, 0.001780f, -0.002407f, 0.004845f, 0.002079f, -0.003896f, -0.005700f, -0.012176f, 0.007120f, -0.003025f, -0.003803f, 0.003842f, -0.000304f, -0.020131f, 0.014605f, -0.021645f, -0.012467f, -0.015557f, 0.002857f, -0.002482f, 0.008576f, -0.005653f, 0.004428f, -0.009792f, 0.004018f, -0.003263f, -0.003911f, -0.010889f, 0.005830f, 0.005793f, 0.011713f, -0.004230f, -0.001240f, 0.001595f, -0.003650f, -0.000692f, -0.041691f, - 0.004303f, 0.000454f, -0.003481f, -0.006434f, 0.007373f, -0.005672f, 0.004942f, -0.001525f, 0.000023f, 0.006704f, 0.008888f, -0.005455f, 0.006585f, -0.001955f, -0.003438f, -0.011787f, -0.000435f, -0.015912f, -0.011460f, 0.013801f, 0.005127f, -0.005523f, -0.001801f, -0.001784f, 0.009839f, 0.004927f, -0.004778f, 0.008618f, 0.006058f, 0.003244f, 0.003255f, 0.003518f, 0.006926f, 0.005520f, 0.005925f, 0.015284f, 0.014241f, 0.005747f, 0.001797f, -0.010000f, 0.011022f, -0.014727f, 0.003104f, -0.004391f, 0.011935f, -0.009213f, -0.011157f, 0.019203f, -0.004291f, -0.011027f, -0.009096f, 0.014094f, 0.009288f, -0.000046f, 0.007835f, 0.009986f, 0.005192f, 0.016486f, -0.000698f, -0.003464f, 0.010079f, 0.005136f, 0.000913f, -0.000517f, -0.008586f, 0.004367f, 0.005936f, 0.012772f, 0.006029f, 0.007429f, -0.004893f, -0.008434f, -0.014563f, -0.004775f, -0.056389f, 0.014141f, -0.012672f, -0.018317f, -0.018169f, 0.010014f, -0.013709f, 0.008770f, -0.017022f, 0.008179f, 0.006754f, 0.003960f, -0.017902f, 0.010962f, -0.001091f, 0.006369f, -0.015011f, 0.007176f, 0.015781f, 0.012090f, -0.000468f, -0.006640f, - 0.001402f, -0.004254f, -0.018962f, -0.004281f, -0.009631f, 0.003497f, -0.012321f, 0.009113f, 0.008517f, -0.004363f, -0.001458f, 0.012797f, -0.003994f, 0.008510f, -0.008387f, -0.012214f, 0.004970f, -0.000739f, 0.005155f, 0.015937f, 0.008856f, -0.001117f, -0.029883f, -0.014242f, -0.005206f, 0.003518f, -0.005671f, 0.015360f, -0.026222f, 0.007471f, 0.002050f, -0.000646f, 0.006436f, -0.003596f, 0.010680f, -0.026467f, -0.013682f, 0.009828f, -0.027811f, -0.005124f, 0.010641f, 0.004187f, -0.007500f, -0.017659f, 0.004712f, 0.011247f, 0.006389f, -0.003074f, -0.020429f, -0.001360f, -0.002094f, -0.001565f, -0.025480f, 0.003471f, 0.005038f, 0.021117f, -0.018648f, 0.022987f, 0.007052f, -0.001195f, -0.004524f, -0.001816f, 0.002823f, -0.015769f, -0.002363f, 0.005814f, -0.004584f, -0.009036f, -0.001784f, 0.016021f, -0.015147f, -0.002934f, 0.016865f, 0.000607f, -0.005466f, 0.006172f, -0.006879f, 0.012301f, 0.006114f, 0.000364f, 0.006855f, -0.006329f, -0.009771f, -0.000265f, 0.001849f, 0.009317f, -0.017817f, -0.009679f, -0.007234f, -0.005332f, -0.004457f, -0.005220f, 0.004011f, 0.001431f, 0.002794f, -0.013577f, - -0.013195f, -0.010968f, 0.001742f, -0.017567f, -0.008615f, 0.011383f, -0.005887f, 0.002958f, 0.002666f, 0.000246f, 0.006110f, 0.007046f, 0.007797f, 0.007934f, 0.012444f, -0.001186f, 0.013427f, 0.000023f, 0.007841f, -0.000125f, -0.005270f, 0.000500f, -0.009637f, 0.008464f, -0.011451f, 0.014321f, -0.012780f, 0.001249f, -0.012857f, 0.003356f, -0.012273f, -0.013257f, 0.012850f, 0.021386f, 0.073791f, 0.001966f, -0.019880f, 0.004405f, -0.010303f, 0.030092f, -0.003670f, 0.009268f, 0.003190f, 0.002524f, -0.024407f, -0.011930f, 0.015187f, 0.013546f, -0.019014f, -0.002387f, 0.000444f, 0.019010f, 0.009835f, 0.007952f, 0.018562f, 0.003919f, 0.002193f, 0.016376f, -0.004276f, -0.021975f, 0.004464f, 0.018897f, 0.011519f, -0.005504f, 0.001388f, 0.013558f, 0.008562f, 0.004599f, 0.000371f, -0.011756f, 0.007351f, -0.012881f, 0.002435f, -0.025340f, 0.008002f, 0.009473f, -0.001127f, -0.010945f, 0.017915f, 0.010200f, -0.002476f, 0.014475f, 0.007082f, -0.009713f, 0.021303f, 0.003576f, -0.006164f, 0.006127f, 0.021819f, 0.004689f, 0.000489f, -0.015859f, -0.009094f, 0.003966f, 0.008075f, 0.025282f, - -0.006789f, -0.007750f, 0.003077f, 0.014648f, -0.007342f, -0.008479f, 0.000079f, 0.019122f, 0.013314f, -0.002277f, -0.012285f, 0.001446f, 0.015890f, -0.003874f, 0.031527f, 0.015414f, 0.007748f, -0.026856f, -0.003628f, -0.014103f, 0.025047f, -0.010806f, 0.011197f, 0.001237f, 0.015376f, 0.005315f, 0.001540f, -0.002461f, 0.005759f, -0.008575f, -0.011865f, -0.031742f, -0.023432f, 0.006288f, 0.019345f, 0.025802f, -0.010705f, -0.014435f, -0.012353f, 0.004768f, -0.007083f, -0.002662f, -0.001787f, 0.002331f, 0.003444f, 0.016707f, -0.010257f, 0.000337f, 0.003825f, 0.007428f, -0.009318f, -0.007886f, -0.014964f, -0.011193f, -0.010577f, -0.018601f, -0.044000f, -0.001999f, -0.006310f, -0.020213f, 0.003741f, -0.003665f, -0.024010f, 0.006335f, -0.020393f, 0.003506f, -0.002787f, -0.003299f, 0.009825f, 0.011445f, -0.000664f, -0.021249f, 0.005496f, -0.014033f, -0.013718f, 0.016937f, 0.016796f, 0.017017f, -0.006289f, 0.001103f, 0.002442f, -0.011685f, 0.001480f, -0.006755f, 0.029660f, -0.007108f, -0.002961f, -0.005256f, -0.000088f, -0.020505f, -0.022394f, 0.008552f, -0.028358f, 0.010656f, 0.003534f, 0.030222f, - -0.020185f, -0.011247f, -0.006709f, 0.016278f, -0.015338f, -0.014451f, 0.013242f, 0.009243f, -0.015571f, -0.015299f, -0.015407f, -0.033878f, 0.022340f, 0.021493f, 0.022212f, -0.009209f, 0.006883f, 0.022666f, -0.032401f, 0.000542f, 0.020873f, 0.020120f, 0.008606f, 0.000522f, -0.010614f, 0.002765f, -0.005306f, -0.027189f, 0.003154f, 0.008325f, 0.003677f, 0.019207f, -0.016721f, 0.002541f, -0.030900f, -0.003023f, 0.005493f, -0.015823f, 0.005902f, 0.006080f, 0.013003f, 0.017639f, 0.022491f, -0.003663f, -0.009784f, -0.026794f, -0.020689f, 0.009833f, 0.040230f, -0.011435f, -0.002580f, -0.017523f, -0.010965f, -0.013509f, 0.007817f, 0.010709f, -0.004273f, 0.003100f, -0.031263f, -0.002041f, 0.018965f, -0.014107f, -0.015602f, 0.014431f, -0.007187f, 0.020346f, 0.002261f, -0.009805f, -0.000577f, -0.015708f, -0.009509f, 0.000151f, -0.018406f, 0.040192f, -0.020885f, -0.011103f, -0.001540f, -0.002076f, -0.029765f, 0.001145f, -0.022110f, 0.014731f, -0.040920f, -0.006587f, -0.013575f, 0.012990f, -0.014554f, -0.014648f, -0.034741f, 0.022181f, -0.014715f, 0.008676f, -0.011676f, 0.006106f, 0.017372f, -0.013911f, - -0.023047f, -0.008254f, 0.014512f, 0.030901f, 0.009419f, 0.012483f, 0.000802f, -0.032682f, -0.017858f, -0.017992f, -0.009633f, 0.004768f, 0.028111f, 0.011639f, 0.016020f, 0.014954f, -0.005261f, -0.007592f, -0.010586f, -0.027538f, 0.000566f, -0.019504f, 0.027958f, -0.014123f, 0.018944f, 0.003309f, -0.011375f, 0.005685f, -0.007934f, -0.010057f, -0.016773f, 0.022658f, 0.005114f, 0.038962f, 0.007618f, -0.044285f, -0.011974f, 0.012601f, 0.009921f, 0.005004f, -0.003828f, 0.002423f, 0.043629f, 0.021046f, -0.009265f, 0.003169f, -0.013952f, 0.030787f, -0.003256f, -0.003573f, 0.010481f, -0.031940f, -0.014867f, -0.025362f, 0.014489f, 0.032906f, -0.003705f, -0.001875f, -0.001200f, 0.030552f, 0.009168f, 0.006994f, 0.004862f, 0.003227f, 0.004837f, -0.012646f, 0.001838f, -0.038831f, 0.005070f, -0.018943f, 0.015597f, 0.038816f, -0.005547f, 0.002411f, -0.031425f, 0.040938f, 0.019626f, 0.017129f, -0.005606f, -0.023221f, 0.002287f, -0.008232f, 0.020548f, 0.014592f, -0.019272f, 0.000526f, 0.010626f, 0.007347f, -0.015020f, -0.013427f, 0.060186f, -0.014569f, -0.011025f, 0.012268f, -0.015891f, -0.011789f, - 0.018834f, 0.018346f, 0.000302f, 0.006708f, 0.006427f, -0.024053f, -0.012110f, -0.001607f, 0.007572f, 0.019916f, 0.004665f, 0.004187f, -0.026913f, -0.003209f, 0.007440f, -0.036939f, 0.007574f, -0.010875f, -0.003986f, -0.007555f, 0.010351f, -0.011736f, -0.019885f, -0.022091f, -0.033406f, 0.002948f, -0.013533f, -0.007980f, 0.021397f, -0.009081f, 0.007332f, -0.040074f, 0.001151f, 0.029376f, -0.019105f, -0.019197f, 0.045846f, -0.027353f, 0.007239f, -0.017483f, 0.054066f, 0.011480f, 0.010108f, -0.017243f, -0.020259f, 0.001961f, 0.015583f, -0.016557f, -0.026187f, -0.015701f, -0.038144f, -0.014976f, -0.022285f, -0.000078f, -0.051290f, 0.003567f, 0.028212f, 0.017146f, 0.023139f, -0.015985f, 0.006297f, 0.024725f, -0.002496f, 0.017910f, 0.007092f, 0.027944f, -0.013605f, 0.023294f, 0.019059f, 0.013219f, 0.030876f, -0.017058f, 0.018650f, -0.009345f, -0.010175f, -0.007216f, 0.007379f, -0.058897f, -0.018095f, -0.036620f, 0.043128f, -0.026714f, -0.029274f, -0.006463f, 0.024815f, 0.000666f, -0.009769f, 0.033323f, -0.010821f, -0.010519f, -0.022995f, -0.059455f, 0.004172f, 0.005640f, 0.026208f, -0.024807f, - 0.001604f, -0.015006f, -0.018402f, 0.032124f, -0.004587f, 0.016341f, -0.032593f, -0.033166f, -0.018791f, 0.027289f, -0.000283f, -0.015715f, -0.015174f, 0.001021f, -0.023152f, -0.001193f, 0.028666f, 0.002838f, -0.009963f, 0.014233f, -0.025080f, 0.046896f, 0.029169f, -0.001402f, -0.022889f, -0.025961f, 0.009433f, -0.007409f, -0.003154f, -0.002487f, 0.042886f, -0.022689f, -0.000064f, -0.016169f, 0.015256f, -0.028436f, -0.025776f, -0.050333f, 0.010554f, -0.021224f, -0.028395f, -0.004668f, -0.047453f, -0.024252f, 0.012408f, 0.008603f, -0.007150f, 0.022926f, 0.001539f, 0.028054f, -0.013711f, -0.042013f, -0.006857f, -0.031189f, -0.006339f, -0.010416f, -0.039568f, 0.003574f, 0.031083f, -0.090834f, 0.010705f, -0.001365f, 0.021563f, -0.006059f, -0.028350f, -0.054651f, 0.020586f, -0.008220f, 0.019228f, 0.010054f, -0.006945f, 0.029097f, -0.038925f, 0.052036f, -0.013966f, 0.028129f, 0.062499f, 0.023152f, 0.044373f, 0.015500f, 0.011379f, -0.008292f, 0.023036f, -0.010949f, -0.024786f, -0.035261f, -0.021576f, -0.003284f, 0.018295f, -0.004559f, 0.076500f, 0.062542f, 0.056522f, -0.011412f, 0.001413f, -0.045773f, - 0.036370f, 0.044641f, 0.016121f, 0.043137f, 0.018124f, 0.015374f, 0.016120f, -0.006363f, 0.007205f, 0.012667f, -0.009302f, -0.044202f, -0.026011f, -0.000685f, -0.028575f, -0.034048f, -0.080731f, 0.019001f, 0.015726f, 0.022341f, -0.014202f, -0.004743f, -0.009372f, 0.001431f, -0.024118f, 0.000083f, -0.017968f, 0.023551f, 0.020601f, -0.010990f, -0.014258f, -0.042639f, 0.074742f, -0.022125f, 0.016166f, 0.000608f, 0.006482f, 0.012250f, -0.028375f, 0.036962f, -0.016519f, 0.012941f, 0.010047f, -0.026779f, -0.026123f, -0.004825f, -0.000495f, 0.017211f, 0.079076f, -0.006233f, 0.013501f, 0.002662f, 0.025326f, 0.016530f, 0.019437f, -0.013782f, -0.001906f, 0.006314f, -0.035062f, 0.006977f, -0.029662f, -0.051834f, 0.019971f, 0.000227f, 0.006254f, -0.039370f, -0.087430f, 0.035442f, 0.042454f, 0.022136f, -0.048133f, -0.044701f, -0.088656f, 0.072551f, 0.011220f, 0.012404f, -0.029879f, -0.021716f, -0.094256f, 0.025322f, 0.066529f, 0.019957f, -0.059866f, -0.030311f, 0.009156f, -0.023726f, -0.015149f, 0.026852f, -0.031376f, 0.016634f, 0.014941f, 0.012106f, -0.034861f, 0.011652f, 0.010203f, -0.016794f, - -0.032642f, -0.019294f, -0.012833f, -0.008991f, -0.031152f, -0.027154f, -0.015006f, -0.032338f, 0.024546f, -0.012491f, -0.041315f, -0.014785f, 0.024637f, -0.005855f, -0.028797f, -0.016272f, -0.014930f, -0.000764f, -0.022950f, -0.014214f, -0.037737f, -0.036033f, 0.014532f, -0.013235f, 0.045880f, 0.029893f, 0.002363f, 0.027096f, -0.041300f, 0.025644f, -0.039321f, 0.031798f, -0.006430f, 0.015992f, -0.018209f, 0.057006f, -0.015548f, 0.031703f, -0.009676f, 0.046843f, 0.017328f, 0.011046f, -0.051045f, 0.052570f, 0.039640f, 0.018080f, 0.015985f, -0.038457f, -0.012581f, 0.015392f, 0.017484f, -0.007127f, -0.011732f, -0.057036f, 0.056339f, -0.001882f, 0.029186f, -0.029507f, -0.006766f, -0.004087f, -0.003674f, -0.003529f, 0.034615f, 0.005287f, -0.021166f, 0.024829f, 0.007673f, 0.019190f, 0.029953f, 0.030540f, 0.005519f, -0.017931f, 0.096412f, -0.020705f, 0.075104f, 0.005213f, 0.008406f, -0.035453f, -0.013406f, 0.011455f, 0.038530f, 0.021840f, -0.006976f, 0.033046f, 0.009954f, -0.033842f, 0.010729f, 0.010743f, 0.044219f, 0.003660f, 0.028208f, -0.024244f, 0.004328f, 0.032335f, 0.017802f, 0.028008f, - 0.064403f, 0.053556f, -0.003068f, 0.030517f, 0.000725f, 0.052899f, -0.033335f, 0.037360f, 0.017408f, 0.004266f, 0.032981f, -0.008794f, 0.078251f, -0.006393f, 0.040346f, -0.020250f, -0.018848f, 0.007908f, 0.083347f, 0.032435f, -0.067515f, 0.071656f, 0.004020f, 0.030135f, -0.049325f, 0.026577f, 0.011952f, -0.101316f, 0.051842f, 0.092917f, 0.038031f, -0.025150f, -0.016323f, 0.029137f, 0.078921f, 0.018692f, 0.022074f, 0.014481f, -0.016269f, -0.008067f, -0.029171f, 0.037859f, 0.006479f, 0.025194f, -0.019463f, 0.050344f, -0.016757f, 0.023405f, 0.008759f, 0.010340f, 0.008416f, 0.004205f, -0.051520f, -0.030778f, 0.001532f, 0.004389f, 0.037267f, 0.029245f, -0.041575f, 0.003815f, -0.022207f, -0.022157f, 0.012128f, 0.001872f, -0.013092f, 0.016880f, 0.071199f, -0.047057f, -0.001870f, 0.105322f, -0.062886f, 0.006383f, 0.039992f, -0.020872f, -0.013580f, 0.020548f, 0.037296f, -0.039895f, 0.021147f, -0.071178f, -0.005059f, 0.101530f, 0.007071f, 0.027185f, -0.008291f, 0.054237f, 0.059634f, -0.018233f, 0.001935f, -0.029616f, 0.009605f, -0.022868f, -0.047289f, -0.035750f, -0.056908f, -0.048070f, - 0.070447f, 0.022933f, 0.023385f, 0.084673f, -0.059516f, -0.042402f, 0.015106f, 0.027708f, -0.021094f, 0.009661f, -0.023056f, 0.041514f, 0.032506f, 0.007230f, 0.036826f, 0.113663f, 0.012401f, -0.013014f, -0.029456f, 0.027404f, -0.005754f, 0.060234f, -0.051251f, 0.015272f, -0.002049f, -0.015122f, -0.013659f, -0.005759f, 0.019671f, 0.012946f, 0.013935f, -0.000864f, 0.034434f, 0.007688f, -0.040937f, -0.031654f, -0.002854f, -0.017755f, -0.022780f, 0.007647f, 0.028801f, -0.001725f, -0.004330f, -0.037062f, 0.021102f, -0.004150f, 0.041899f, -0.011469f, -0.075249f, 0.011635f, -0.021008f, -0.009379f, 0.001978f, -0.060245f, -0.031013f, -0.051388f, 0.002860f, -0.001541f, -0.013164f, -0.068693f, -0.026997f, -0.003749f, 0.039122f, 0.043625f, 0.005267f, 0.005727f, 0.022009f, 0.007205f, -0.046854f, 0.045572f, 0.060363f, -0.022507f, 0.010871f, -0.022465f, 0.012602f, 0.002806f, 0.046519f, -0.046759f, -0.034134f, -0.110840f, -0.038443f, 0.032218f, 0.047957f, 0.036387f, 0.031510f, -0.024161f, -0.007820f, 0.027117f, 0.022711f, 0.054457f, 0.022735f, 0.026891f, 0.030951f, 0.012653f, -0.089485f, 0.040161f, - -0.025349f, 0.005163f, 0.066959f, 0.056070f, -0.019500f, -0.007463f, 0.035562f, -0.019248f, -0.019789f, -0.016722f, 0.006717f, -0.004780f, -0.000169f, 0.009223f, -0.004807f, 0.033430f, 0.078744f, -0.030867f, -0.057309f, 0.061027f, -0.043759f, -0.011247f, 0.003085f, 0.075736f, 0.008493f, -0.021393f, 0.024758f, 0.021880f, -0.075049f, -0.021874f, 0.015893f, -0.002042f, -0.033884f, -0.001867f, 0.017920f, -0.113673f, -0.049589f, 0.057515f, -0.052946f, -0.062192f, -0.035119f, 0.046955f, -0.056264f, -0.093664f, 0.098946f, -0.027503f, -0.055020f, -0.003156f, 0.041620f, -0.036157f, -0.058851f, -0.001587f, 0.034167f, -0.003480f, -0.076435f, 0.018867f, 0.004722f, -0.037382f, 0.092559f, 0.080152f, 0.000771f, -0.034484f, -0.056392f, 0.096934f, 0.022089f, 0.014700f, 0.043401f, -0.028236f, -0.085640f, 0.037598f, 0.085084f, 0.050049f, -0.023191f, 0.006061f, -0.092700f, 0.012257f, 0.090996f, 0.050404f, 0.014315f, 0.000719f, -0.014300f, 0.025039f, -0.029606f, 0.075917f, -0.003828f, 0.021624f, 0.029168f, -0.023586f, 0.002807f, -0.001309f, -0.026405f, 0.001811f, 0.012508f, 0.043476f, 0.001655f, -0.023821f, - 0.014614f, 0.035401f, -0.003734f, 0.054975f, -0.039350f, 0.010616f, 0.013737f, 0.015872f, 0.047727f, -0.023086f, 0.005844f, 0.000367f, -0.058138f, 0.010646f, -0.017798f, -0.030581f, 0.015812f, -0.010258f, 0.048908f, 0.036187f, -0.022901f, -0.051454f, 0.027346f, 0.007548f, 0.012584f, 0.032434f, 0.067202f, -0.008673f, 0.015382f, -0.023999f, 0.039367f, 0.029499f, 0.029912f, -0.028410f, 0.044854f, -0.011870f, -0.016862f, -0.034564f, -0.001437f, -0.011619f, 0.057615f, -0.037993f, 0.005026f, 0.017563f, -0.010585f, -0.021098f, 0.079923f, 0.001420f, 0.020885f, -0.001414f, 0.012246f, 0.000812f, 0.025825f, 0.007873f, -0.000599f, 0.029754f, -0.083988f, -0.233402f, -0.221893f, 0.094458f, 0.008146f, 0.210646f, 0.448086f, 0.096902f, 0.179902f, 0.095086f, -0.334425f, -0.150715f, -0.225255f, -0.330749f, -0.023136f, 0.037297f, -0.156539f, 0.136569f, 0.234117f, 0.142298f, 0.403936f, 0.246795f, 0.001378f, -0.039191f, -0.144127f, -0.359385f, -0.290519f, -0.126635f, -0.275190f, -0.082805f, 0.156186f, 0.044775f, 0.039057f, 0.368980f, 0.142481f, 0.088415f, 0.342716f, 0.014301f, -0.017829f, 0.156270f, - -0.079220f, -0.285002f, -0.137353f, -0.284813f, -0.413327f, -0.047805f, -0.187817f, -0.155250f, 0.132161f, 0.254355f, 0.118667f, 0.451045f, 0.361172f, 0.207284f, 0.274481f, 0.090875f, -0.133913f, -0.209096f, -0.275398f, -0.444123f, -0.353560f, -0.239680f, -0.201359f, -0.064677f, 0.155777f, 0.232610f, 0.263157f, 0.349646f, 0.298501f, 0.138309f, 0.055323f, 0.077633f, -0.110385f, -0.176101f, -0.114121f, -0.250248f, -0.135718f, -0.003095f, -0.017737f} - }, - { - {-0.002684f, 0.000038f, 0.004022f, -0.007594f, -0.002239f, -0.004807f, -0.006689f, -0.000587f, 0.008250f, 0.001430f, -0.004459f, -0.004223f, 0.011405f, -0.005154f, 0.001089f, -0.003708f, -0.003806f, -0.005893f, -0.001447f, 0.014284f, 0.000939f, -0.000712f, 0.002677f, 0.003685f, 0.001215f, -0.004622f, 0.007917f, 0.000245f, -0.000277f, -0.003551f, 0.000999f, -0.002685f, 0.001182f, 0.005253f, 0.000387f, -0.000216f, -0.000298f, -0.000373f, -0.001242f, -0.006992f, 0.001633f, 0.005909f, -0.001762f, -0.003447f, 0.005516f, -0.006408f, -0.000491f, -0.002724f, 0.004046f, -0.010331f, 0.003815f, -0.000785f, 0.001553f, -0.002335f, -0.002149f, -0.000285f, -0.002916f, 0.000419f, 0.003121f, 0.002301f, -0.000635f, 0.002037f, 0.009214f, -0.005820f, -0.004625f, 0.000472f, -0.002183f, -0.004383f, 0.001216f, -0.004718f, 0.002588f, -0.005679f, 0.000587f, -0.002892f, -0.004781f, -0.000695f, -0.009260f, -0.003483f, 0.002330f, -0.001621f, -0.005267f, -0.000275f, 0.012684f, -0.006322f, 0.001618f, -0.002606f, 0.000020f, -0.004691f, 0.009187f, -0.004582f, -0.004815f, -0.005541f, 0.010927f, -0.006303f, -0.001489f, -0.002937f, - 0.003214f, 0.005040f, 0.006488f, -0.008802f, 0.000184f, 0.008563f, 0.003971f, 0.001516f, -0.000249f, -0.001005f, 0.004065f, 0.008713f, 0.002327f, -0.011078f, -0.005489f, -0.005946f, 0.009966f, -0.000962f, 0.007675f, -0.004632f, 0.003710f, 0.009736f, -0.004448f, -0.007308f, 0.002901f, -0.002736f, -0.000177f, -0.006555f, -0.002316f, -0.004910f, 0.002206f, -0.008906f, -0.002567f, -0.002310f, 0.000099f, 0.011967f, -0.003516f, -0.001872f, 0.000004f, -0.003231f, -0.000784f, -0.001234f, 0.007770f, 0.003643f, 0.004997f, -0.006399f, 0.005170f, 0.004638f, -0.003615f, 0.001773f, 0.003575f, -0.003490f, -0.003545f, 0.004761f, -0.006679f, 0.004925f, -0.000821f, -0.000101f, -0.000405f, -0.006036f, 0.006094f, 0.000601f, -0.002846f, -0.004154f, -0.001256f, -0.002170f, -0.000152f, -0.005107f, -0.003995f, 0.002710f, -0.000955f, -0.002028f, -0.008884f, -0.001410f, 0.007934f, -0.005567f, -0.001541f, 0.006010f, -0.003700f, -0.006630f, -0.005170f, 0.004080f, -0.000148f, -0.000715f, -0.001444f, -0.006340f, 0.001922f, -0.002854f, -0.001664f, 0.007036f, -0.004094f, -0.009651f, -0.003061f, 0.000499f, 0.002679f, 0.002502f, - 0.000622f, -0.007308f, -0.001890f, -0.008887f, -0.008287f, -0.002158f, 0.008254f, -0.001430f, -0.016945f, -0.000699f, 0.005418f, 0.004968f, -0.003674f, 0.003391f, 0.003375f, 0.000463f, 0.004748f, -0.008855f, -0.006612f, -0.000652f, 0.002379f, 0.000653f, 0.001622f, -0.000677f, 0.002109f, 0.002501f, 0.003225f, -0.000078f, 0.001883f, 0.002606f, -0.001953f, 0.004187f, -0.001130f, -0.007796f, -0.007457f, -0.003166f, -0.000932f, 0.007966f, 0.004602f, 0.011771f, 0.001089f, -0.001971f, -0.001083f, 0.008399f, -0.001876f, 0.004627f, -0.007091f, -0.000528f, 0.000152f, 0.004518f, 0.003325f, 0.007531f, 0.005493f, -0.003509f, -0.006966f, -0.005765f, 0.004477f, -0.002336f, 0.005985f, 0.003730f, 0.001142f, -0.000162f, 0.005057f, 0.003469f, -0.002975f, 0.004017f, -0.007478f, -0.000927f, -0.006893f, -0.006108f, -0.008372f, 0.002721f, 0.005472f, -0.000793f, 0.007447f, -0.005305f, 0.006944f, -0.012996f, 0.005522f, 0.002340f, 0.010191f, 0.002936f, 0.003989f, 0.005312f, 0.000284f, -0.003280f, 0.004156f, 0.008516f, 0.003427f, 0.004134f, -0.000804f, -0.000134f, -0.011425f, -0.000804f, 0.002510f, 0.002282f, - -0.001142f, 0.006348f, 0.012675f, -0.004114f, -0.007993f, 0.005637f, 0.001969f, -0.006316f, 0.000623f, -0.003094f, -0.005426f, 0.000414f, 0.009442f, 0.001670f, 0.003957f, 0.000695f, 0.006554f, 0.006321f, -0.005641f, 0.009522f, -0.003066f, -0.005891f, -0.008876f, 0.002385f, -0.011817f, -0.000472f, 0.001461f, 0.003619f, -0.007469f, 0.005259f, 0.000077f, 0.001413f, 0.003409f, 0.002294f, 0.002910f, -0.010029f, -0.000509f, -0.002004f, -0.006576f, 0.004303f, 0.002167f, 0.001917f, 0.005974f, 0.020784f, -0.001332f, 0.001440f, 0.003078f, 0.005448f, 0.002163f, -0.016329f, 0.003645f, -0.002346f, -0.001761f, 0.009628f, 0.000432f, 0.005037f, 0.006779f, -0.007773f, -0.004452f, -0.001873f, -0.007858f, -0.016659f, 0.000973f, -0.005925f, -0.000873f, -0.000918f, -0.000188f, -0.003378f, -0.008244f, 0.003026f, -0.007877f, -0.001888f, 0.001994f, -0.008272f, 0.009478f, 0.003950f, 0.002837f, -0.002986f, -0.000481f, -0.000634f, 0.002068f, -0.002003f, 0.005008f, -0.006405f, 0.002705f, 0.012234f, 0.009560f, -0.002096f, 0.005040f, -0.003106f, 0.002386f, -0.006734f, 0.000327f, 0.013593f, -0.017364f, 0.000682f, - -0.010717f, 0.005404f, 0.007805f, 0.009546f, -0.001556f, -0.009160f, 0.000161f, 0.009406f, 0.001939f, 0.001764f, -0.007189f, -0.000995f, -0.012531f, 0.016498f, -0.000970f, -0.012777f, 0.013691f, 0.003412f, 0.003982f, -0.000940f, -0.005086f, -0.001668f, -0.006688f, -0.006522f, 0.004968f, 0.007188f, -0.001610f, 0.006779f, -0.005770f, -0.003559f, -0.000156f, 0.009476f, 0.008847f, -0.002578f, -0.005262f, 0.007363f, 0.004537f, 0.000642f, 0.006068f, 0.001438f, -0.007602f, 0.007701f, 0.004599f, -0.000646f, -0.002828f, 0.002075f, -0.008239f, 0.021109f, -0.001411f, -0.000836f, 0.015440f, -0.001520f, -0.010034f, -0.005330f, -0.001556f, 0.003746f, -0.010497f, 0.006757f, 0.001559f, 0.000115f, -0.009692f, -0.007816f, -0.016763f, -0.001579f, 0.006755f, 0.003559f, 0.008222f, -0.005264f, -0.004647f, 0.018813f, -0.006649f, 0.002837f, -0.004514f, -0.008356f, -0.017896f, 0.000116f, -0.007355f, -0.008336f, 0.002918f, -0.010071f, 0.000577f, 0.007454f, 0.004152f, 0.015253f, -0.024599f, 0.016320f, -0.002390f, 0.007342f, -0.004515f, -0.003196f, -0.012827f, 0.012013f, 0.010498f, 0.002964f, -0.011394f, -0.000250f, - -0.006507f, -0.000404f, 0.012297f, 0.008828f, 0.002046f, 0.011942f, 0.000016f, 0.001019f, 0.001300f, 0.000034f, -0.007908f, 0.017678f, -0.001583f, 0.000618f, 0.020155f, -0.012451f, 0.004907f, -0.005681f, -0.001198f, 0.006822f, -0.002646f, -0.009683f, 0.019344f, 0.015548f, -0.000489f, 0.005418f, 0.008111f, 0.021375f, -0.002687f, -0.003176f, -0.011312f, 0.002578f, 0.003911f, -0.011332f, -0.012826f, -0.010566f, 0.013333f, 0.000990f, -0.005677f, 0.009956f, 0.006357f, 0.000881f, -0.003476f, 0.003821f, -0.007628f, -0.000977f, -0.008383f, -0.000815f, 0.006832f, -0.013528f, 0.002586f, -0.001827f, -0.011395f, 0.007724f, -0.004084f, 0.002285f, -0.003607f, -0.001839f, 0.002324f, 0.013313f, 0.014097f, 0.002036f, -0.012961f, -0.002089f, -0.012346f, 0.004597f, 0.030812f, 0.007362f, 0.021191f, 0.007608f, -0.000224f, -0.020574f, -0.005484f, 0.002976f, 0.019041f, -0.009013f, -0.004867f, -0.007897f, 0.001302f, 0.015376f, -0.012118f, 0.007340f, 0.012994f, 0.002656f, 0.004360f, -0.009289f, 0.016147f, -0.003993f, 0.021204f, -0.000605f, -0.007451f, -0.020979f, 0.001734f, -0.000350f, 0.023703f, -0.007847f, - -0.002874f, 0.015093f, -0.000810f, 0.001572f, -0.006038f, -0.016600f, 0.000682f, 0.008715f, -0.012662f, -0.009693f, 0.001215f, -0.019918f, 0.009307f, 0.010027f, -0.004635f, -0.001997f, 0.003941f, 0.010105f, -0.002565f, -0.007626f, -0.002061f, 0.015023f, -0.004056f, -0.003618f, -0.008327f, 0.019430f, 0.018433f, -0.000153f, -0.006847f, 0.001347f, -0.004575f, 0.002981f, 0.004982f, -0.004486f, 0.006646f, -0.012580f, 0.002948f, 0.000683f, -0.013501f, 0.014303f, 0.010926f, 0.001149f, -0.008875f, -0.009944f, -0.004205f, -0.020077f, 0.023973f, 0.018185f, -0.003573f, 0.006967f, 0.002381f, -0.003533f, 0.018212f, -0.001073f, -0.008141f, 0.026993f, -0.028630f, 0.007833f, 0.012624f, 0.000292f, -0.011607f, 0.013083f, 0.002135f, 0.018748f, -0.006935f, -0.001560f, 0.005038f, 0.007748f, 0.001373f, -0.002081f, 0.026804f, 0.011946f, -0.012099f, -0.017985f, 0.012901f, -0.017986f, -0.005287f, -0.020768f, -0.002708f, 0.032231f, 0.013017f, 0.015825f, 0.000105f, -0.016384f, -0.002841f, -0.007760f, -0.003729f, 0.024244f, -0.003804f, -0.025700f, -0.002256f, 0.005630f, -0.016849f, -0.002273f, 0.010502f, 0.008947f, - -0.011505f, -0.005361f, 0.011092f, 0.015672f, -0.004893f, 0.016295f, -0.000318f, 0.004435f, 0.005163f, 0.001771f, 0.005240f, 0.009880f, 0.007889f, 0.009274f, -0.006529f, -0.018669f, -0.023468f, 0.011859f, -0.001302f, 0.011072f, -0.021605f, 0.007984f, 0.006381f, 0.003372f, -0.014077f, -0.011768f, -0.015003f, 0.012018f, 0.006368f, -0.010693f, -0.010632f, 0.015066f, 0.005059f, -0.001024f, -0.008903f, -0.014905f, -0.005924f, 0.006303f, -0.009417f, 0.001326f, -0.017857f, -0.004889f, 0.002364f, 0.006383f, 0.012083f, -0.001720f, 0.007811f, 0.010501f, -0.010238f, -0.024951f, 0.017593f, 0.001010f, -0.003711f, 0.016710f, -0.002255f, 0.000899f, -0.010807f, 0.014747f, -0.008945f, -0.011480f, -0.004272f, 0.012183f, 0.018364f, 0.015478f, 0.005062f, 0.003419f, -0.031446f, 0.014866f, -0.001547f, 0.006533f, -0.010588f, -0.001575f, -0.011875f, -0.003707f, -0.002567f, -0.015705f, -0.007757f, -0.005968f, -0.008441f, 0.017785f, -0.004907f, 0.023015f, -0.002042f, -0.000087f, 0.014475f, 0.017151f, 0.027305f, 0.019916f, 0.000492f, -0.006481f, 0.000105f, 0.002866f, -0.010875f, 0.006920f, -0.006542f, -0.009112f, - -0.034434f, 0.006902f, -0.023883f, -0.014524f, 0.021434f, 0.016554f, -0.039231f, -0.036000f, 0.000602f, 0.014549f, -0.009579f, 0.008767f, -0.013344f, -0.001989f, -0.023016f, -0.006409f, -0.020831f, -0.001991f, -0.006122f, 0.000118f, 0.007205f, 0.005857f, 0.012038f, -0.002072f, -0.011312f, 0.008850f, -0.013374f, -0.005617f, 0.003572f, 0.000351f, 0.006004f, 0.012938f, -0.002682f, 0.001268f, 0.002572f, -0.005826f, -0.001911f, -0.019969f, -0.023689f, -0.022814f, -0.000434f, -0.022917f, 0.007140f, 0.002702f, -0.009348f, -0.010749f, -0.004914f, -0.003952f, -0.002307f, -0.013596f, -0.021593f, -0.001287f, 0.033449f, 0.018585f, -0.005025f, -0.020101f, -0.021049f, 0.023446f, -0.022047f, -0.006960f, -0.004016f, -0.014216f, -0.011138f, -0.014344f, -0.017404f, -0.023503f, -0.032681f, -0.003749f, -0.005086f, -0.003390f, 0.011307f, 0.012100f, 0.003220f, 0.011477f, -0.006145f, 0.002998f, -0.027039f, 0.003974f, 0.014716f, 0.016036f, 0.014792f, 0.006807f, 0.028482f, -0.010116f, -0.019639f, -0.004402f, 0.004163f, -0.003177f, 0.009421f, 0.019478f, 0.037933f, 0.024506f, 0.014223f, 0.018436f, -0.013955f, -0.026563f, - -0.009025f, -0.019605f, 0.023875f, 0.006420f, -0.004568f, -0.015633f, 0.026982f, 0.024047f, -0.008151f, -0.000491f, 0.000177f, -0.012561f, -0.011249f, -0.019482f, 0.006399f, 0.008470f, 0.012022f, -0.018266f, 0.001970f, 0.006999f, -0.008785f, -0.017619f, 0.000681f, 0.012581f, 0.014737f, 0.004024f, -0.037259f, -0.011735f, -0.018384f, 0.009301f, 0.022248f, 0.001705f, -0.020970f, 0.006776f, -0.020271f, 0.013059f, -0.004996f, 0.003729f, -0.014450f, 0.032124f, 0.023633f, -0.005338f, -0.007123f, -0.015155f, -0.001348f, 0.026402f, 0.005353f, 0.032049f, 0.028343f, 0.026408f, 0.013837f, 0.007733f, -0.019094f, -0.007417f, -0.025171f, 0.032719f, -0.015895f, -0.002062f, 0.016032f, 0.026126f, -0.022176f, -0.027364f, -0.023412f, 0.031120f, -0.009360f, 0.021702f, 0.002148f, 0.002997f, 0.048266f, -0.002811f, 0.005778f, -0.017542f, -0.029243f, 0.010691f, -0.002337f, 0.011365f, 0.007937f, 0.000337f, -0.015733f, 0.008040f, 0.009124f, 0.006137f, -0.014733f, 0.014327f, 0.010588f, 0.036505f, -0.013071f, 0.005405f, 0.020632f, 0.021867f, 0.003081f, 0.022110f, -0.002410f, 0.004048f, 0.019232f, 0.017614f, - 0.006189f, -0.003931f, -0.024540f, -0.016903f, 0.018181f, 0.003153f, -0.003763f, -0.001662f, 0.006418f, 0.039938f, 0.000197f, -0.008735f, 0.020855f, -0.004864f, 0.019865f, 0.008329f, 0.054642f, -0.005954f, 0.000827f, 0.004300f, 0.010283f, 0.022422f, -0.000924f, -0.001258f, 0.014175f, -0.019424f, 0.022555f, 0.042030f, 0.013467f, -0.002061f, 0.023054f, -0.001807f, 0.001407f, 0.047925f, -0.021677f, 0.015872f, 0.018789f, 0.001103f, 0.002640f, 0.003492f, 0.007262f, -0.027758f, -0.009267f, 0.016219f, -0.010484f, -0.015231f, -0.014005f, -0.014056f, 0.000360f, 0.016398f, -0.004198f, -0.041403f, -0.001921f, -0.031805f, 0.009801f, 0.011548f, -0.001772f, 0.004700f, -0.015391f, -0.003144f, 0.013999f, -0.039613f, 0.007564f, -0.009733f, 0.019119f, 0.013390f, 0.007338f, 0.000318f, -0.017534f, -0.035825f, -0.004195f, -0.031466f, 0.016218f, -0.001053f, -0.011587f, 0.030455f, 0.013921f, -0.013946f, -0.012666f, -0.007886f, -0.007535f, -0.010141f, -0.019874f, 0.001818f, 0.002048f, 0.044641f, -0.004500f, -0.034108f, -0.003073f, 0.021139f, -0.001508f, -0.018211f, 0.007388f, -0.026833f, 0.013624f, -0.012141f, - 0.007735f, -0.016259f, 0.003152f, -0.027550f, 0.064787f, 0.001057f, 0.043361f, -0.006225f, -0.017320f, 0.010572f, -0.019876f, -0.016936f, 0.021586f, 0.023636f, -0.027705f, -0.062055f, 0.051406f, -0.022422f, -0.021366f, -0.010856f, -0.003691f, -0.029692f, -0.010733f, -0.009303f, -0.025517f, -0.044814f, -0.011237f, 0.000278f, -0.023843f, 0.011092f, -0.010326f, 0.019280f, -0.017230f, -0.007606f, -0.024438f, 0.057295f, 0.048731f, -0.011501f, 0.010765f, 0.033036f, -0.035432f, 0.035241f, -0.014987f, -0.015514f, 0.012843f, 0.004119f, 0.006083f, -0.005896f, -0.007795f, 0.000362f, 0.011612f, 0.009350f, -0.015653f, 0.017306f, -0.016841f, -0.028855f, 0.020540f, 0.017257f, -0.023301f, -0.029869f, -0.033492f, -0.005694f, -0.005360f, 0.008645f, -0.021733f, -0.028353f, -0.013772f, 0.045298f, 0.016487f, 0.014851f, -0.019358f, 0.016930f, 0.024721f, -0.019824f, 0.045818f, 0.007509f, -0.015637f, -0.022173f, 0.012776f, -0.018796f, -0.038015f, 0.008459f, 0.000385f, -0.000137f, 0.022121f, 0.018685f, -0.015949f, 0.002156f, -0.048402f, -0.007303f, -0.018086f, 0.039885f, 0.004317f, 0.004446f, -0.021414f, 0.017764f, - -0.037034f, -0.008548f, -0.021648f, 0.027089f, 0.028503f, 0.025839f, 0.017311f, -0.000326f, 0.023557f, 0.021468f, 0.003368f, -0.004160f, 0.009323f, -0.000002f, -0.024520f, -0.002940f, 0.008900f, -0.018996f, 0.026741f, -0.028258f, 0.022248f, 0.024589f, -0.007463f, -0.005570f, 0.010024f, 0.032834f, 0.024165f, -0.029687f, -0.006955f, -0.007941f, -0.002878f, 0.007428f, -0.014395f, -0.014488f, 0.031634f, 0.000824f, 0.045641f, -0.030201f, -0.029339f, 0.023314f, -0.016165f, 0.008420f, -0.018948f, 0.015568f, 0.016903f, 0.011726f, -0.008166f, -0.026548f, 0.001639f, 0.008829f, -0.023157f, -0.040583f, -0.002567f, 0.003670f, -0.025217f, 0.043782f, -0.006392f, -0.012499f, 0.056705f, 0.054739f, 0.003790f, -0.007774f, -0.003922f, -0.011912f, 0.011102f, -0.029042f, 0.024582f, 0.003188f, -0.018366f, 0.032059f, 0.002057f, 0.005900f, -0.013066f, -0.018681f, -0.048391f, 0.008100f, -0.020985f, -0.010170f, -0.048562f, -0.111814f, 0.036804f, 0.034853f, -0.012955f, 0.007395f, -0.027313f, 0.047537f, 0.030205f, -0.027728f, 0.007243f, 0.006041f, 0.000169f, -0.012749f, -0.009358f, -0.057902f, 0.023755f, 0.027849f, - -0.007082f, -0.000512f, -0.003756f, 0.018578f, -0.014936f, 0.035903f, 0.010241f, -0.043765f, -0.025071f, 0.054442f, 0.035514f, -0.036314f, -0.008988f, -0.013240f, -0.022497f, 0.002908f, -0.009335f, 0.007312f, 0.070797f, 0.018928f, 0.074199f, 0.042185f, 0.047600f, 0.043377f, 0.085535f, -0.006216f, -0.008614f, 0.020026f, -0.006716f, -0.072859f, 0.057941f, -0.026004f, 0.032938f, -0.048414f, -0.038658f, -0.072024f, 0.013474f, -0.007292f, -0.024672f, 0.016638f, -0.034288f, -0.000700f, -0.048702f, -0.048749f, 0.012572f, 0.026954f, -0.039807f, -0.011427f, -0.027993f, -0.038710f, -0.043231f, -0.031710f, 0.021534f, -0.020116f, -0.054388f, 0.072842f, 0.044412f, 0.071775f, -0.015381f, -0.041853f, -0.107606f, 0.044710f, 0.053629f, -0.026190f, -0.012202f, -0.004053f, 0.060879f, 0.000722f, 0.011922f, 0.011858f, -0.016048f, 0.011101f, 0.027573f, -0.007083f, -0.029338f, 0.005684f, 0.051479f, -0.029329f, -0.019050f, 0.010332f, -0.008912f, 0.038364f, -0.011471f, 0.016589f, -0.022004f, -0.025824f, -0.026112f, 0.024686f, -0.009464f, 0.021757f, 0.025217f, -0.008271f, 0.001831f, -0.001177f, -0.023723f, 0.005920f, - -0.021725f, 0.022140f, 0.055782f, 0.093233f, -0.003073f, -0.004151f, -0.042029f, 0.020166f, 0.028963f, -0.002470f, 0.032712f, 0.048153f, 0.018777f, 0.026630f, -0.045856f, -0.027935f, 0.033957f, 0.092747f, -0.019710f, -0.057448f, 0.011667f, -0.020522f, -0.003586f, 0.023405f, -0.002214f, -0.027767f, -0.014927f, -0.015787f, -0.067270f, -0.029966f, -0.002671f, 0.007086f, 0.019187f, -0.008016f, -0.028150f, -0.019741f, 0.002471f, -0.017654f, -0.028521f, 0.012798f, 0.033692f, 0.011136f, 0.017650f, 0.006830f, 0.050856f, -0.016161f, -0.006388f, -0.020131f, 0.011820f, -0.012570f, 0.011229f, 0.057569f, 0.011464f, -0.061347f, -0.014843f, -0.018035f, -0.052221f, 0.033052f, 0.015841f, -0.006272f, 0.007560f, 0.003040f, -0.023301f, -0.000445f, -0.001439f, -0.023568f, -0.006734f, 0.050150f, 0.074375f, 0.034702f, -0.025483f, -0.041083f, 0.019660f, 0.033601f, 0.004219f, 0.026832f, -0.018361f, -0.013303f, 0.028371f, 0.008553f, 0.001012f, -0.062395f, -0.080358f, -0.002836f, -0.046622f, -0.027720f, 0.017829f, 0.067644f, 0.015684f, 0.003219f, -0.018552f, -0.023577f, -0.032747f, -0.029964f, 0.006970f, 0.020438f, - -0.005666f, -0.033638f, -0.052430f, 0.021691f, 0.003501f, -0.029954f, -0.048160f, -0.033850f, -0.052847f, -0.099855f, -0.057284f, -0.008227f, -0.008001f, 0.121932f, -0.009757f, -0.002839f, 0.076077f, 0.010625f, 0.013059f, 0.045416f, -0.009395f, -0.028693f, 0.038304f, -0.053993f, 0.013809f, 0.008767f, -0.023455f, -0.075762f, 0.051786f, 0.015524f, -0.004768f, -0.076694f, 0.020573f, 0.012141f, -0.040495f, 0.007010f, 0.035721f, 0.022122f, 0.010474f, -0.034562f, -0.006994f, -0.012732f, 0.006237f, -0.012832f, 0.003327f, -0.026675f, -0.038676f, 0.042843f, -0.029266f, 0.064964f, -0.039762f, -0.035793f, -0.024338f, -0.045066f, 0.004139f, -0.000520f, 0.068071f, -0.049953f, -0.052889f, 0.027739f, 0.017687f, -0.043546f, -0.058200f, -0.006086f, -0.032664f, 0.038264f, 0.008360f, -0.047969f, 0.031743f, -0.007860f, -0.073968f, 0.049221f, -0.032710f, 0.032250f, -0.054792f, -0.013188f, -0.000911f, -0.022951f, -0.008795f, 0.006632f, 0.070725f, -0.018677f, -0.005478f, -0.020024f, 0.021227f, -0.033182f, 0.027424f, 0.054194f, -0.001411f, 0.054098f, 0.045559f, -0.007965f, 0.091152f, -0.007654f, 0.014454f, -0.007320f, - 0.030851f, 0.075759f, 0.000651f, 0.050941f, -0.101392f, 0.002744f, -0.113977f, -0.038923f, -0.020279f, 0.033253f, 0.103122f, 0.087484f, 0.031510f, 0.051188f, -0.035122f, -0.029768f, 0.003896f, -0.008832f, 0.022965f, 0.006487f, -0.024748f, 0.033789f, 0.050290f, 0.041589f, 0.030763f, 0.025815f, -0.002133f, 0.003566f, -0.018801f, 0.047442f, 0.021439f, -0.010657f, -0.031394f, 0.008684f, 0.018618f, -0.006730f, 0.062358f, 0.065152f, -0.039992f, -0.030013f, -0.000087f, 0.050171f, 0.030708f, 0.006642f, 0.004733f, -0.014095f, -0.025008f, 0.011074f, 0.077834f, -0.034142f, -0.041194f, -0.044894f, 0.039693f, 0.014834f, -0.025826f, -0.039368f, -0.061485f, -0.072818f, 0.005552f, 0.012781f, 0.010412f, -0.018376f, -0.007628f, -0.022469f, 0.011308f, -0.059534f, -0.094978f, -0.045343f, -0.009413f, -0.019904f, -0.039275f, 0.041353f, 0.073489f, -0.022898f, 0.035660f, 0.078504f, 0.050648f, 0.011245f, -0.065153f, -0.004189f, -0.063201f, 0.052016f, -0.005965f, 0.044780f, 0.027364f, 0.001619f, 0.029857f, -0.012250f, -0.002749f, 0.025849f, 0.031465f, 0.005387f, 0.000683f, -0.000388f, -0.027645f, -0.017660f, - 0.008034f, -0.038613f, 0.001553f, -0.014110f, 0.001439f, -0.032629f, 0.006148f, 0.002516f, -0.029821f, 0.025952f, 0.011205f, 0.017787f, -0.037593f, -0.009589f, 0.007596f, -0.001310f, 0.003164f, 0.022504f, 0.005224f, 0.006803f, -0.003985f, -0.007733f, -0.005590f, -0.002419f, 0.014431f, -0.005667f, -0.023952f, 0.020379f, -0.033081f, -0.009773f, -0.011166f, 0.004721f, -0.016079f, -0.018651f, 0.025666f, -0.002523f, -0.025293f, 0.016307f, -0.035391f, 0.029210f, 0.009004f, 0.002053f, 0.029442f, 0.033365f, 0.004577f, 0.009995f, -0.024549f, 0.032348f, -0.015612f, -0.021047f, -0.002084f, 0.005261f, 0.059536f, -0.026436f, -0.044811f, 0.038219f, -0.015345f, 0.037891f, -0.007940f, 0.002047f, -0.018555f, 0.017348f, 0.027202f, -0.017814f, -0.170289f, -0.320998f, -0.116906f, -0.252163f, -0.286958f, 0.065399f, -0.013656f, 0.091089f, 0.362595f, 0.393777f, 0.276623f, 0.396670f, 0.324990f, 0.105557f, 0.111155f, 0.081659f, -0.225077f, -0.231102f, -0.130670f, -0.224347f, -0.242822f, -0.083346f, -0.074399f, -0.204522f, -0.155609f, -0.027747f, -0.093757f, -0.112889f, -0.031156f, -0.086954f, -0.152528f, -0.087407f, - 0.024033f, -0.062187f, -0.077128f, 0.085118f, -0.018299f, -0.084790f, 0.072095f, 0.137808f, -0.035409f, 0.033423f, 0.213449f, 0.028691f, -0.072000f, 0.142867f, 0.123107f, -0.124580f, 0.069291f, 0.158586f, -0.050822f, 0.018336f, 0.273252f, 0.211043f, 0.105167f, 0.387947f, 0.429381f, 0.223336f, 0.396606f, 0.515550f, 0.323212f, 0.309658f, 0.424308f, 0.279953f, 0.179179f, 0.204015f, 0.110233f, -0.095752f, -0.206051f, -0.274731f, -0.490449f, -0.586507f, -0.670406f, -0.735399f, -0.710309f, -0.591944f, -0.279099f, -0.175983f}, - {0.001818f, 0.002056f, 0.003999f, 0.004770f, 0.005359f, 0.003863f, 0.000813f, -0.000185f, -0.003831f, 0.003760f, -0.006051f, -0.004578f, 0.001901f, 0.001685f, -0.005802f, 0.010857f, -0.003356f, 0.003234f, -0.003473f, -0.003151f, 0.002335f, -0.000959f, -0.001879f, -0.001051f, 0.000673f, -0.003444f, -0.001604f, -0.006794f, 0.004090f, 0.003100f, -0.005362f, -0.002356f, -0.002338f, -0.005934f, 0.001897f, 0.001044f, -0.000234f, 0.001354f, 0.002233f, 0.000451f, 0.001939f, 0.006170f, -0.008732f, 0.001668f, -0.001377f, 0.005904f, 0.005052f, -0.004066f, 0.011634f, -0.007137f, -0.007577f, 0.001899f, 0.005189f, 0.003233f, -0.001327f, -0.001699f, -0.001204f, 0.001684f, 0.001931f, -0.000659f, -0.004529f, -0.003784f, -0.002390f, -0.005843f, 0.000760f, 0.003704f, 0.001135f, -0.001350f, -0.000885f, 0.007003f, 0.003098f, 0.002704f, 0.005273f, 0.001929f, 0.001999f, 0.002603f, -0.008114f, 0.006800f, 0.007275f, -0.003401f, 0.007299f, -0.004348f, -0.000931f, 0.009716f, -0.003935f, 0.004645f, 0.002835f, -0.010681f, -0.004813f, 0.008102f, -0.003113f, -0.001488f, 0.005091f, 0.003406f, 0.003633f, 0.001021f, - 0.012421f, 0.002173f, -0.003168f, 0.002838f, -0.004269f, 0.007743f, -0.002196f, -0.004164f, -0.001822f, -0.009978f, -0.003389f, -0.007332f, 0.002438f, -0.000060f, 0.002725f, -0.002894f, 0.004218f, 0.002061f, -0.000456f, 0.001364f, 0.000678f, 0.001050f, 0.001359f, -0.005229f, 0.013258f, 0.002042f, -0.004839f, 0.009914f, -0.002373f, -0.008387f, -0.009312f, 0.009169f, -0.001823f, -0.000619f, 0.005980f, 0.000787f, -0.001588f, 0.004813f, -0.000534f, 0.002848f, 0.000749f, 0.003596f, -0.001838f, 0.003916f, -0.001736f, 0.004640f, 0.006452f, 0.003722f, -0.003879f, -0.003728f, -0.001971f, 0.001999f, -0.004113f, 0.003201f, -0.001977f, 0.004002f, -0.000031f, 0.008536f, 0.001703f, 0.001968f, 0.007167f, 0.000122f, 0.005180f, 0.002485f, -0.000553f, 0.000582f, -0.005546f, 0.002641f, 0.000475f, 0.008778f, 0.003122f, 0.002903f, 0.000418f, 0.002620f, 0.009615f, -0.009019f, 0.005146f, 0.001389f, -0.005957f, -0.002643f, -0.003687f, -0.001178f, -0.003422f, 0.002461f, 0.011088f, 0.007001f, 0.008282f, 0.006599f, 0.011297f, 0.008251f, -0.010239f, -0.018558f, -0.002351f, 0.000892f, -0.004533f, 0.009809f, - -0.000421f, 0.014679f, -0.006857f, -0.006861f, 0.006309f, 0.000350f, 0.000508f, 0.005803f, -0.010736f, 0.002741f, -0.007699f, 0.010132f, 0.005947f, -0.000065f, 0.015381f, 0.000647f, -0.001520f, -0.001964f, -0.002760f, -0.003896f, 0.007244f, 0.003811f, -0.003820f, -0.001347f, -0.010806f, -0.004869f, -0.001494f, 0.011065f, 0.007602f, 0.001131f, 0.005574f, -0.000115f, 0.005929f, -0.000442f, 0.002350f, -0.007120f, 0.006326f, 0.014936f, 0.004073f, 0.000255f, 0.000040f, 0.003913f, 0.003593f, 0.000505f, 0.001976f, 0.003070f, -0.000692f, -0.000730f, 0.003931f, 0.016980f, 0.005346f, 0.013162f, -0.008163f, -0.006669f, -0.003029f, -0.008541f, -0.010029f, -0.004202f, 0.006557f, -0.012157f, -0.002155f, -0.001774f, -0.019024f, 0.003334f, -0.019223f, -0.006602f, -0.003029f, 0.004056f, -0.000489f, 0.003513f, -0.004210f, -0.000573f, -0.013191f, 0.004250f, -0.004769f, -0.007442f, 0.000732f, 0.003152f, -0.001202f, 0.000524f, 0.004768f, 0.009161f, -0.016761f, 0.003991f, 0.000428f, -0.005190f, -0.005819f, -0.001483f, 0.001518f, -0.002614f, -0.010426f, -0.002760f, 0.001882f, 0.004552f, -0.001451f, 0.011499f, - 0.000247f, -0.000031f, 0.004069f, -0.008315f, 0.010506f, 0.002965f, 0.005846f, 0.002279f, 0.004699f, -0.002029f, -0.002091f, 0.002389f, 0.000935f, -0.002777f, -0.004491f, -0.004355f, 0.009156f, 0.010002f, -0.000324f, 0.011031f, 0.000695f, -0.001460f, 0.001361f, 0.000901f, -0.002036f, -0.000134f, -0.007695f, -0.004430f, 0.006905f, 0.008065f, -0.009457f, -0.002301f, 0.003971f, -0.006365f, -0.018109f, 0.004467f, 0.006749f, 0.007833f, -0.004125f, -0.004869f, -0.006423f, 0.009830f, 0.011334f, 0.001862f, 0.004507f, -0.008940f, -0.007116f, 0.008297f, 0.003230f, -0.006736f, 0.011712f, -0.011780f, 0.002008f, 0.001003f, 0.010991f, 0.003892f, -0.002346f, 0.001650f, -0.003713f, 0.005850f, -0.014175f, -0.004379f, -0.020454f, -0.009133f, 0.010468f, -0.001056f, 0.016012f, -0.002379f, -0.013237f, 0.008200f, 0.001922f, -0.005691f, -0.000569f, 0.000368f, -0.005333f, 0.003224f, 0.009592f, 0.010404f, 0.000326f, 0.004738f, -0.000485f, 0.011770f, -0.006253f, 0.004739f, -0.001217f, -0.000889f, 0.000261f, 0.003381f, -0.001505f, 0.014151f, 0.001060f, -0.000436f, -0.003526f, 0.011660f, -0.014765f, -0.001647f, - -0.009860f, -0.010256f, 0.004295f, 0.002535f, 0.022621f, 0.001615f, 0.008618f, -0.018037f, -0.003963f, 0.004547f, -0.009147f, 0.006815f, 0.002318f, 0.002031f, 0.005872f, 0.006723f, 0.015006f, 0.006941f, -0.001832f, 0.005070f, -0.006776f, 0.002583f, 0.006338f, 0.000069f, 0.001689f, 0.006920f, 0.008809f, 0.020587f, 0.004409f, -0.002519f, -0.013288f, -0.000106f, 0.010928f, -0.015815f, 0.002281f, -0.000720f, 0.005601f, -0.007687f, -0.009145f, 0.017902f, -0.010651f, 0.004079f, -0.000222f, -0.010422f, 0.025653f, 0.006990f, 0.013675f, 0.007607f, 0.014906f, -0.002153f, -0.004962f, 0.009705f, -0.008017f, 0.007581f, -0.006304f, 0.004363f, 0.010393f, 0.006015f, -0.004032f, -0.000233f, 0.005492f, -0.008270f, -0.006136f, 0.001055f, -0.000701f, 0.015451f, -0.007904f, -0.013369f, -0.001889f, 0.008339f, 0.012601f, -0.007100f, -0.013436f, -0.001793f, -0.006504f, 0.006059f, -0.024736f, 0.013039f, 0.003368f, -0.006002f, 0.006676f, -0.020298f, -0.017095f, 0.001536f, -0.008781f, 0.018052f, 0.015888f, 0.017022f, -0.012429f, 0.006270f, -0.000423f, 0.016981f, 0.000551f, 0.011846f, 0.004273f, -0.005803f, - -0.016498f, -0.014865f, 0.003860f, -0.019620f, -0.001002f, -0.005038f, -0.009993f, -0.013268f, -0.008214f, -0.000405f, 0.014619f, -0.000453f, 0.005247f, -0.022331f, -0.012936f, -0.002815f, -0.014435f, 0.000465f, 0.012945f, -0.015299f, 0.005362f, -0.000656f, -0.005830f, -0.001846f, -0.003945f, 0.014623f, 0.007325f, 0.007063f, -0.004396f, -0.005043f, 0.019995f, -0.006727f, -0.006448f, -0.017568f, 0.011724f, -0.024752f, 0.002544f, -0.008431f, 0.003012f, 0.008204f, -0.006642f, -0.013414f, -0.008808f, 0.000442f, 0.016846f, -0.009316f, -0.002727f, -0.011920f, -0.009990f, 0.005182f, 0.005350f, 0.013320f, -0.017034f, -0.001011f, 0.003851f, 0.002059f, -0.023531f, 0.004898f, 0.001034f, 0.002617f, -0.031953f, 0.026484f, -0.000425f, -0.001798f, -0.001517f, -0.011257f, 0.002303f, -0.000878f, 0.008977f, -0.009925f, 0.010201f, 0.001891f, -0.007792f, -0.013215f, -0.015750f, 0.006148f, 0.000497f, -0.002641f, 0.000223f, -0.009971f, 0.008509f, 0.005529f, 0.016382f, 0.008749f, 0.006057f, 0.007992f, -0.002919f, -0.010942f, -0.007739f, -0.000951f, -0.005601f, 0.005858f, -0.008949f, -0.014238f, -0.014428f, -0.000805f, - -0.019495f, 0.007012f, 0.009460f, -0.013041f, 0.011148f, -0.015437f, 0.006501f, -0.021993f, 0.002391f, -0.005535f, 0.001201f, -0.007243f, -0.000522f, -0.020724f, -0.003301f, -0.008446f, -0.012010f, -0.005231f, -0.009316f, 0.000871f, -0.008300f, -0.007004f, -0.011849f, 0.003093f, -0.011192f, -0.003165f, 0.018986f, -0.005551f, 0.001244f, 0.003530f, -0.003159f, -0.021269f, -0.020075f, -0.005806f, -0.012639f, 0.001477f, 0.008685f, 0.005857f, -0.019416f, -0.000914f, 0.003237f, -0.018212f, -0.020503f, 0.010765f, -0.020101f, 0.003485f, 0.013229f, -0.010108f, -0.023023f, -0.010288f, 0.000517f, 0.014675f, -0.006146f, 0.026223f, -0.001804f, -0.002647f, -0.015360f, -0.011535f, -0.001720f, 0.004794f, 0.001641f, -0.006159f, -0.004470f, -0.001926f, -0.005556f, -0.012169f, 0.009668f, -0.010245f, -0.005547f, 0.009236f, 0.003277f, -0.017001f, -0.016858f, -0.016704f, 0.014066f, -0.015643f, -0.015468f, 0.024960f, -0.015812f, 0.010420f, -0.001760f, 0.005922f, -0.022837f, 0.009570f, 0.001953f, -0.005002f, -0.000488f, -0.005830f, 0.008282f, 0.004212f, 0.022827f, -0.006960f, -0.003337f, 0.008984f, 0.022229f, 0.004301f, - 0.005300f, -0.011735f, -0.005567f, -0.019302f, -0.002533f, -0.002285f, 0.001132f, 0.010786f, -0.002547f, 0.004762f, 0.023943f, -0.005563f, 0.001036f, -0.004745f, 0.001744f, -0.024499f, -0.022823f, 0.009320f, -0.001783f, 0.011072f, -0.001906f, -0.004961f, -0.007077f, 0.009361f, 0.005714f, -0.005519f, 0.004158f, 0.009526f, -0.005282f, -0.033284f, -0.014576f, -0.006698f, -0.003864f, 0.014565f, -0.026118f, -0.019250f, 0.015733f, 0.009656f, 0.039872f, 0.011071f, 0.009052f, 0.010787f, 0.004898f, -0.007411f, 0.000621f, -0.007802f, 0.012581f, 0.000323f, 0.012704f, 0.000131f, -0.000543f, -0.017852f, 0.008944f, -0.012210f, 0.009089f, -0.002129f, 0.009544f, 0.003536f, 0.012872f, -0.020675f, 0.002219f, -0.014465f, 0.016818f, 0.000664f, -0.017186f, 0.022115f, 0.016507f, 0.010264f, -0.010341f, -0.034756f, 0.009750f, -0.004230f, -0.004366f, 0.016246f, -0.001722f, 0.007162f, 0.016159f, -0.004273f, -0.020665f, -0.000944f, 0.009193f, 0.005129f, -0.005558f, -0.003317f, -0.015107f, 0.004403f, 0.002070f, 0.001726f, -0.002272f, 0.000297f, 0.012910f, -0.010524f, 0.005461f, -0.005519f, 0.009126f, -0.008862f, - -0.036754f, 0.008202f, 0.009688f, 0.038420f, -0.007331f, -0.005515f, 0.018523f, 0.024079f, -0.037719f, -0.021314f, 0.021575f, -0.010332f, 0.001336f, 0.009136f, -0.023783f, -0.052960f, -0.020359f, 0.030936f, 0.024830f, 0.020978f, -0.005557f, 0.011980f, -0.005580f, 0.011063f, -0.010478f, 0.004208f, -0.026315f, 0.007089f, -0.008842f, 0.014299f, 0.014141f, 0.000918f, -0.012045f, 0.013029f, 0.008647f, 0.022164f, -0.001538f, -0.013111f, -0.006001f, -0.033901f, -0.016791f, 0.008748f, -0.001554f, -0.022641f, 0.016332f, 0.021640f, -0.029509f, 0.029518f, -0.002023f, -0.003019f, 0.019194f, 0.003940f, 0.018205f, -0.002194f, 0.007042f, -0.006598f, -0.002702f, 0.008755f, 0.035833f, -0.012804f, 0.023154f, -0.002149f, 0.003001f, 0.007944f, 0.020349f, -0.018565f, 0.003090f, 0.027497f, 0.009548f, -0.014355f, 0.008729f, 0.009239f, 0.003908f, 0.019109f, 0.017517f, -0.002111f, -0.024689f, -0.006609f, 0.024800f, 0.015525f, 0.018647f, -0.012748f, -0.006461f, -0.002464f, -0.002885f, 0.026387f, 0.003269f, -0.028233f, -0.012520f, -0.009049f, 0.017607f, 0.002851f, 0.003700f, 0.014432f, 0.032928f, -0.049498f, - 0.032310f, -0.007153f, -0.005808f, -0.013379f, 0.009632f, 0.009160f, 0.019058f, 0.002118f, 0.018199f, -0.002763f, -0.004740f, 0.004698f, -0.002894f, 0.008289f, 0.016852f, 0.000948f, -0.001036f, 0.020846f, -0.016040f, -0.004168f, 0.005664f, -0.003108f, 0.019691f, -0.024078f, 0.002499f, -0.020856f, 0.003655f, -0.022106f, -0.002377f, -0.000849f, 0.011971f, 0.026459f, -0.015655f, -0.010686f, -0.016162f, -0.002769f, -0.023884f, -0.018005f, -0.015273f, 0.008967f, 0.021413f, -0.001924f, 0.041454f, -0.027785f, 0.037399f, -0.027812f, -0.004092f, 0.008315f, 0.010328f, 0.032563f, 0.023161f, -0.029785f, 0.017381f, -0.014289f, -0.031717f, -0.001599f, -0.022745f, -0.013655f, 0.002072f, 0.033315f, -0.003376f, 0.016142f, 0.031162f, -0.021672f, 0.012998f, -0.036172f, 0.025933f, -0.021242f, -0.009045f, 0.039926f, 0.015272f, 0.042845f, -0.014691f, 0.002730f, -0.015715f, 0.014130f, 0.054387f, 0.015755f, 0.020159f, -0.023726f, -0.002408f, 0.003735f, 0.022565f, 0.020054f, 0.035804f, -0.024528f, -0.006706f, -0.026908f, -0.022207f, 0.004289f, 0.004749f, 0.019819f, -0.014250f, 0.014609f, -0.037074f, 0.027426f, - 0.021774f, 0.011443f, -0.003915f, -0.002280f, 0.005469f, 0.014293f, 0.006845f, 0.005777f, 0.002770f, 0.029538f, 0.026252f, 0.012474f, 0.005174f, -0.018081f, -0.017040f, 0.058365f, 0.005320f, 0.009412f, 0.034519f, 0.016223f, -0.005375f, -0.004178f, 0.023417f, 0.042660f, -0.025449f, -0.009810f, -0.028964f, -0.028281f, 0.043567f, 0.019812f, 0.004881f, -0.005745f, 0.017955f, 0.031581f, 0.024633f, 0.031633f, 0.015033f, -0.011816f, 0.001059f, -0.001687f, 0.011638f, -0.026457f, -0.020011f, -0.007958f, -0.024839f, 0.027059f, -0.003687f, -0.007199f, -0.023758f, -0.004031f, -0.022204f, -0.053432f, 0.008530f, -0.006654f, -0.017581f, 0.012006f, -0.029073f, -0.001708f, -0.016295f, -0.042668f, -0.010678f, -0.018428f, -0.021171f, 0.034306f, -0.010112f, -0.012116f, -0.007226f, -0.000521f, -0.009724f, -0.011740f, -0.003040f, 0.009389f, 0.027749f, 0.022217f, -0.002022f, -0.001181f, -0.049738f, 0.003528f, 0.005329f, 0.020511f, -0.012542f, -0.009380f, 0.072175f, -0.011874f, -0.037425f, -0.034112f, 0.029001f, -0.019525f, 0.007231f, -0.040436f, 0.008663f, -0.010558f, -0.023884f, -0.018022f, -0.048919f, 0.008790f, - 0.011630f, 0.034804f, 0.007846f, -0.016772f, 0.024254f, 0.004563f, 0.022515f, 0.029099f, 0.076995f, 0.022849f, 0.002667f, -0.029450f, -0.037973f, -0.007979f, -0.000340f, -0.003474f, -0.036749f, 0.013971f, 0.028082f, 0.006684f, -0.010287f, -0.031769f, -0.013490f, -0.004642f, 0.010346f, -0.011435f, 0.019571f, -0.009635f, -0.012657f, 0.037367f, 0.019820f, 0.042436f, 0.001100f, -0.012034f, -0.016058f, 0.044938f, -0.037794f, -0.014152f, 0.052870f, -0.031332f, 0.011139f, 0.011017f, 0.014287f, 0.003201f, 0.030119f, -0.009036f, 0.027226f, -0.009915f, 0.006642f, 0.006396f, -0.012667f, 0.019685f, -0.028761f, -0.020637f, -0.018276f, -0.008824f, -0.025354f, -0.048662f, -0.007745f, -0.014562f, 0.008927f, -0.012539f, -0.063458f, 0.017989f, 0.041960f, -0.002351f, -0.007258f, 0.063605f, -0.077334f, -0.017066f, 0.045519f, -0.010786f, 0.035773f, -0.025068f, -0.013783f, 0.011837f, -0.073319f, 0.024339f, -0.023580f, 0.037635f, 0.029829f, -0.039943f, 0.081314f, 0.011724f, 0.006798f, -0.003927f, 0.033996f, -0.056930f, 0.026636f, -0.002418f, -0.005322f, 0.015718f, -0.032467f, 0.052925f, 0.052943f, -0.086409f, - 0.018374f, 0.017285f, 0.004324f, 0.050221f, -0.019756f, -0.060392f, -0.060648f, 0.006893f, 0.009625f, -0.025536f, 0.018187f, -0.032814f, 0.013030f, -0.013780f, 0.034033f, 0.043225f, 0.003207f, 0.041907f, 0.038138f, -0.018108f, 0.001354f, -0.023713f, -0.004607f, -0.003947f, 0.015880f, -0.000393f, -0.002101f, -0.002153f, -0.039889f, -0.060969f, -0.023503f, 0.035215f, 0.027399f, -0.024823f, -0.029265f, 0.020539f, 0.020387f, -0.038713f, 0.022683f, -0.024911f, -0.003118f, 0.034276f, 0.046144f, 0.002860f, -0.024134f, 0.019514f, 0.005430f, 0.030200f, 0.006870f, 0.025725f, 0.025843f, -0.003834f, -0.088333f, 0.013215f, 0.004628f, 0.039697f, -0.011017f, 0.040545f, 0.039426f, -0.021444f, -0.120180f, -0.012970f, 0.007632f, -0.011080f, 0.076529f, 0.081271f, 0.056924f, 0.081013f, -0.016747f, 0.040533f, -0.026890f, 0.056079f, 0.039920f, -0.055580f, 0.081100f, -0.073835f, -0.061524f, -0.056180f, -0.046284f, -0.089462f, 0.021587f, 0.036191f, -0.002675f, 0.048894f, 0.020063f, -0.055500f, -0.012379f, 0.014742f, 0.016463f, 0.018401f, -0.009501f, 0.029332f, 0.004476f, -0.014747f, -0.005743f, 0.012124f, - 0.040354f, 0.052428f, 0.039821f, 0.062397f, -0.055293f, -0.013260f, -0.012751f, -0.056037f, -0.011935f, 0.012897f, 0.005155f, 0.009377f, -0.021257f, -0.023612f, 0.032056f, 0.070098f, -0.029599f, 0.037672f, -0.020485f, 0.012089f, -0.018702f, -0.000444f, -0.050102f, -0.015849f, -0.000720f, -0.069224f, -0.040095f, -0.067596f, -0.057567f, 0.043171f, 0.095986f, 0.078227f, 0.004660f, -0.001048f, 0.002798f, -0.013075f, -0.029539f, -0.109611f, -0.035172f, -0.012297f, 0.012163f, 0.008963f, -0.036961f, -0.023749f, 0.018020f, 0.054307f, 0.033379f, 0.020597f, 0.036619f, 0.060628f, 0.026398f, -0.051358f, 0.048070f, -0.028496f, -0.011179f, 0.037739f, 0.082568f, 0.019781f, 0.102890f, -0.039345f, -0.064266f, 0.039385f, -0.006407f, -0.038970f, 0.018507f, 0.041733f, 0.036263f, -0.075167f, -0.064766f, 0.015779f, -0.030131f, 0.007271f, 0.036521f, -0.020314f, -0.014721f, 0.060053f, 0.016398f, -0.008895f, -0.019236f, -0.017665f, 0.022742f, -0.014131f, -0.002603f, -0.002330f, -0.024528f, -0.010094f, -0.040848f, -0.055160f, 0.019646f, 0.029150f, -0.034256f, 0.024523f, 0.017464f, -0.012598f, -0.023627f, 0.002954f, - 0.043444f, 0.024070f, 0.008134f, -0.043952f, -0.047856f, -0.024357f, 0.013511f, 0.053166f, -0.039979f, -0.022368f, -0.017830f, 0.031301f, 0.087723f, 0.022017f, -0.084433f, -0.020017f, -0.009218f, 0.042566f, 0.001876f, 0.021400f, -0.010136f, -0.021553f, -0.017772f, -0.049697f, 0.046161f, 0.045988f, 0.020549f, 0.048522f, -0.014232f, 0.030487f, -0.013350f, -0.038751f, -0.038223f, -0.045908f, 0.009946f, -0.084179f, 0.087300f, -0.008957f, -0.028060f, -0.052740f, 0.058778f, 0.042474f, 0.012224f, 0.003122f, 0.024225f, 0.021262f, -0.050837f, -0.070506f, 0.015235f, 0.043268f, 0.064897f, -0.006278f, -0.022501f, -0.051313f, -0.032741f, 0.023248f, -0.007405f, -0.044869f, -0.083340f, -0.083602f, 0.009593f, -0.029973f, 0.036446f, -0.095383f, -0.035853f, 0.010191f, 0.006057f, 0.009764f, -0.034703f, 0.005708f, -0.009136f, -0.023821f, -0.010108f, -0.048788f, 0.031419f, 0.039865f, 0.028169f, -0.063339f, -0.036883f, -0.008894f, 0.011853f, 0.020442f, 0.022893f, 0.016353f, -0.013624f, -0.011879f, -0.015000f, 0.031946f, 0.103339f, 0.061870f, -0.065485f, -0.065143f, -0.044037f, -0.081695f, 0.078072f, 0.037270f, - -0.035102f, -0.084848f, -0.081416f, 0.073546f, 0.041860f, 0.001640f, 0.054211f, -0.075854f, -0.017256f, -0.005952f, -0.027597f, -0.003932f, -0.035982f, -0.077577f, 0.004259f, -0.061977f, 0.054680f, 0.054186f, -0.040136f, -0.019138f, -0.017077f, -0.022412f, 0.044120f, -0.070179f, 0.062505f, 0.092193f, 0.099585f, -0.110691f, 0.020962f, -0.002442f, -0.009231f, 0.048417f, -0.019890f, -0.031972f, 0.032932f, 0.017953f, 0.068006f, -0.005588f, -0.053731f, 0.003033f, -0.024588f, 0.041600f, -0.061909f, -0.020315f, -0.029254f, -0.039522f, 0.056084f, -0.039537f, -0.006258f, 0.040624f, 0.022068f, -0.011833f, -0.022142f, -0.055870f, 0.006821f, 0.078155f, 0.045640f, -0.001193f, 0.021825f, -0.015024f, 0.061292f, -0.039700f, 0.027742f, -0.020848f, 0.037565f, 0.066566f, -0.015418f, -0.039287f, 0.019362f, -0.054399f, 0.092903f, 0.013578f, -0.051365f, -0.014544f, -0.079431f, 0.012556f, 0.110254f, -0.017718f, -0.067241f, -0.043289f, 0.066990f, 0.023061f, -0.037446f, 0.000712f, 0.016250f, 0.040859f, 0.092883f, -0.074573f, 0.033207f, 0.079092f, -0.012288f, -0.089769f, -0.088242f, -0.051000f, 0.155871f, -0.113314f, - 0.041259f, -0.113476f, -0.041612f, 0.040193f, -0.105279f, 0.017998f, -0.094601f, 0.041210f, 0.044283f, 0.087600f, 0.038692f, 0.019722f, 0.022783f, -0.027936f, -0.067539f, -0.047343f, -0.044406f, 0.018333f, 0.010790f, -0.012041f, 0.040100f, 0.061500f, -0.027914f, -0.039629f, 0.043023f, 0.007019f, -0.057522f, -0.013890f, 0.025968f, -0.048094f, -0.008396f, 0.009741f, 0.024133f, 0.012104f, 0.034158f, 0.057715f, 0.010396f, -0.038114f, -0.004214f, 0.010432f, -0.029502f, -0.014111f, 0.027512f, -0.021671f, -0.037318f, 0.051259f, -0.012355f, -0.013876f, -0.020491f, -0.021489f, 0.034142f, 0.007611f, 0.008092f, 0.043999f, -0.021117f, -0.035855f, -0.001561f, 0.002261f, -0.014243f, 0.010401f, -0.001878f, -0.013528f, -0.001604f, -0.045028f, 0.010493f, 0.007431f, -0.006678f, 0.022488f, 0.016837f, 0.007144f, 0.011537f, -0.046350f, 0.054719f, -0.020941f, -0.018264f, 0.016024f, -0.047920f, 0.016707f, -0.035958f, 0.008640f, -0.047856f, 0.079735f, -0.003143f, 0.045509f, -0.039544f, 0.005878f, -0.006360f, 0.014939f, 0.013734f, 0.024742f, -0.011204f, 0.018404f, -0.009916f, 0.010480f, -0.000712f, 0.008433f, - 0.020081f, -0.001619f, 0.030576f, -0.011136f, 0.023388f, 0.001861f, 0.000183f, -0.007672f, 0.015417f, -0.010720f, 0.014061f, -0.006972f, 0.002098f, -0.005705f, 0.008279f, -0.004577f, 0.018020f, -0.004700f, -0.010476f, 0.027389f, -0.017290f, 0.014529f, 0.012653f, 0.004573f, 0.014402f, -0.016081f, -0.010036f, 0.012700f, 0.012988f, -0.006936f, -0.000058f, 0.013427f, 0.000357f, -0.018126f, 0.009659f, -0.009165f, 0.011081f, 0.012868f, 0.007731f, 0.004391f, 0.005920f, -0.019812f, 0.011514f, 0.005395f, -0.004004f, 0.006941f, -0.007227f, 0.004084f, -0.002424f, -0.001490f, -0.000126f, 0.006089f, 0.015854f, -0.019492f, 0.019256f, -0.004699f, -0.003341f, 0.007466f, -0.009272f, 0.003263f, 0.012431f, -0.003385f, 0.019973f, -0.066082f, -0.206808f, -0.030069f, 0.100934f, 0.052444f, 0.244841f, 0.045894f, 0.052877f, 0.033523f, -0.065590f, -0.092332f, -0.065834f, -0.118474f, -0.101966f, -0.057505f, -0.023548f, 0.068565f, 0.185925f, 0.147805f, 0.127069f, 0.072641f, -0.056968f, -0.092455f, -0.068262f, -0.127605f, -0.121246f, -0.036659f, -0.016908f, -0.027752f, 0.047177f, 0.074197f, 0.048781f, 0.090372f, - 0.069445f, 0.021856f, 0.063866f, 0.013653f, -0.009449f, 0.006546f, -0.038448f, -0.100523f, -0.086034f, -0.072407f, -0.102612f, -0.042244f, 0.029937f, 0.021351f, 0.065647f, 0.075157f, 0.064950f, 0.067527f, 0.068066f, 0.044016f, 0.042137f, 0.005483f, -0.037965f, -0.069837f, -0.048398f, -0.065653f, -0.088126f, -0.042376f, -0.040488f, -0.031858f, 0.012361f, 0.034471f, 0.031877f, 0.063377f, 0.077735f, 0.038873f, 0.054860f, 0.048165f, -0.012849f, 0.006943f, 0.021269f, -0.024280f, -0.024220f, -0.036967f, -0.033727f, -0.018175f} - }, - { - {0.002918f, 0.005029f, 0.000714f, 0.002853f, 0.006330f, -0.001978f, 0.006738f, 0.001745f, 0.001243f, -0.007809f, -0.001932f, -0.007740f, -0.000934f, 0.007770f, 0.005638f, -0.000557f, 0.003545f, -0.001114f, 0.002949f, -0.000970f, 0.003689f, 0.003121f, 0.003992f, 0.009549f, 0.004008f, -0.007040f, -0.000639f, -0.007973f, 0.004108f, 0.002956f, -0.001205f, 0.000809f, 0.000887f, -0.001728f, -0.002500f, 0.004773f, -0.002182f, 0.001543f, 0.004268f, -0.004246f, 0.007171f, -0.001680f, -0.000003f, 0.003410f, -0.001536f, 0.001121f, 0.000808f, 0.003604f, 0.005625f, 0.000110f, 0.000861f, -0.002056f, -0.000272f, 0.000339f, -0.003171f, -0.003005f, 0.003559f, 0.009655f, -0.000884f, -0.005397f, -0.004841f, 0.003040f, 0.004768f, 0.005496f, 0.003106f, 0.007846f, 0.000459f, 0.005688f, -0.004512f, -0.002993f, 0.003590f, -0.001157f, 0.004790f, -0.000295f, -0.001576f, 0.002565f, -0.006599f, 0.005035f, 0.003170f, -0.006503f, -0.001134f, 0.008382f, 0.002490f, 0.002101f, 0.004612f, -0.001045f, 0.001265f, -0.002123f, -0.008725f, -0.003379f, -0.000435f, -0.001870f, 0.002503f, -0.002642f, -0.000856f, -0.007330f, - -0.000023f, 0.001341f, -0.005238f, -0.001066f, -0.006612f, -0.002270f, -0.002127f, -0.007898f, -0.003695f, 0.002622f, 0.003439f, 0.009026f, 0.005250f, 0.011511f, -0.001288f, -0.001769f, 0.001619f, -0.003843f, 0.009871f, 0.000686f, 0.004626f, 0.007978f, 0.001311f, -0.003080f, 0.003146f, -0.004095f, -0.005677f, -0.001291f, -0.002507f, -0.002980f, -0.010427f, -0.003223f, -0.000051f, 0.001737f, 0.002978f, 0.000989f, 0.005143f, -0.005734f, 0.004520f, 0.000093f, 0.001033f, 0.003412f, -0.004203f, -0.009001f, -0.004062f, 0.004024f, 0.005586f, 0.004462f, 0.000249f, 0.004539f, 0.003250f, 0.006112f, 0.002961f, 0.002663f, -0.003915f, 0.000272f, -0.000241f, -0.004951f, 0.004395f, -0.007530f, -0.004684f, 0.011697f, -0.002076f, 0.010320f, -0.005516f, 0.000850f, 0.005038f, 0.002137f, 0.000201f, -0.007214f, -0.010130f, -0.010594f, 0.000982f, 0.000091f, -0.003087f, 0.001235f, -0.009357f, 0.018188f, 0.001946f, -0.010401f, 0.002591f, -0.005539f, -0.005953f, 0.005291f, 0.007668f, -0.000308f, 0.001636f, 0.003525f, -0.000676f, -0.000158f, 0.006008f, -0.003554f, -0.001597f, 0.000161f, 0.011039f, -0.000430f, - -0.001394f, -0.004423f, -0.006665f, 0.003212f, -0.001702f, -0.006979f, -0.003123f, -0.008363f, 0.001027f, -0.007615f, 0.000112f, -0.005833f, -0.001890f, -0.005170f, -0.010257f, -0.004461f, -0.000665f, 0.009367f, 0.001412f, -0.003093f, 0.005270f, 0.008517f, 0.001361f, -0.012380f, 0.005592f, -0.000408f, 0.002326f, 0.003539f, -0.002689f, 0.007161f, -0.003653f, -0.007351f, -0.006890f, -0.013219f, 0.001470f, -0.005099f, -0.004044f, -0.006708f, -0.009669f, 0.014989f, -0.004304f, -0.014464f, 0.000656f, 0.004333f, 0.000036f, 0.003950f, 0.003201f, -0.011569f, 0.003574f, -0.003062f, -0.000832f, -0.000033f, -0.002404f, 0.007981f, -0.002986f, -0.006009f, -0.000843f, 0.006258f, 0.003910f, 0.001989f, 0.003635f, 0.015881f, 0.003992f, -0.006186f, 0.007081f, -0.007443f, 0.001948f, -0.006130f, 0.015113f, 0.001810f, -0.005345f, -0.003640f, -0.005352f, -0.002379f, 0.009933f, -0.008828f, -0.007197f, -0.002773f, 0.008184f, 0.004168f, -0.008141f, 0.001498f, 0.001480f, -0.005340f, -0.000058f, -0.017589f, 0.005315f, -0.004680f, -0.003487f, -0.011501f, 0.015890f, 0.000024f, -0.008693f, -0.007547f, -0.008530f, -0.000337f, - -0.002041f, -0.000123f, -0.000300f, -0.010781f, 0.012553f, -0.008385f, -0.006869f, 0.003831f, 0.001135f, 0.003701f, -0.003825f, -0.002203f, -0.008117f, -0.000883f, 0.001450f, -0.011808f, -0.007843f, -0.001377f, 0.013389f, 0.000399f, 0.002892f, -0.011107f, 0.003407f, 0.006342f, 0.004651f, -0.000497f, -0.005552f, 0.014373f, 0.002516f, -0.002915f, 0.006928f, 0.005598f, -0.006717f, 0.008775f, -0.005913f, 0.014500f, 0.002093f, 0.012929f, -0.001386f, 0.002217f, -0.005061f, -0.014799f, 0.001632f, 0.000211f, 0.000548f, -0.002642f, 0.003075f, 0.007663f, -0.001901f, -0.007674f, -0.004951f, -0.010876f, -0.002917f, -0.005429f, -0.005628f, 0.000844f, 0.003765f, 0.005681f, -0.006849f, 0.004654f, -0.004561f, -0.005931f, -0.000710f, 0.004739f, 0.000993f, 0.001014f, -0.010680f, -0.010597f, -0.001897f, -0.003320f, -0.007791f, 0.016864f, 0.008017f, -0.001370f, 0.003367f, 0.006572f, -0.017219f, -0.009082f, 0.011645f, -0.006834f, 0.010917f, 0.002055f, -0.002231f, -0.012055f, -0.008544f, 0.013272f, 0.007294f, 0.012446f, -0.013749f, -0.001645f, -0.009623f, -0.001600f, 0.003108f, -0.006126f, 0.000815f, 0.001331f, - -0.022524f, 0.001244f, -0.002855f, 0.006152f, -0.013611f, 0.004408f, -0.004560f, 0.022852f, -0.006005f, -0.011783f, -0.004280f, -0.009879f, 0.003140f, 0.008506f, -0.002652f, 0.015982f, 0.001684f, -0.004670f, 0.003896f, 0.001979f, 0.004208f, -0.005615f, -0.000940f, 0.005971f, 0.009418f, 0.003741f, -0.001809f, 0.004529f, -0.008297f, -0.002571f, 0.011836f, 0.008454f, 0.013890f, 0.009848f, -0.000162f, -0.006994f, -0.014670f, 0.010217f, -0.001535f, -0.010710f, 0.005664f, -0.002797f, -0.016427f, 0.000478f, -0.013675f, -0.001044f, 0.012545f, -0.002062f, -0.009153f, -0.004209f, 0.012001f, -0.010244f, -0.016739f, 0.017181f, -0.003091f, -0.004090f, 0.004160f, 0.002251f, 0.002191f, 0.004204f, 0.004308f, 0.002378f, -0.012219f, -0.004607f, 0.009840f, -0.001164f, -0.003405f, 0.003063f, 0.016821f, -0.008164f, -0.008720f, -0.003931f, 0.007333f, 0.003756f, -0.013911f, -0.006107f, -0.019650f, -0.000280f, 0.005430f, 0.019194f, 0.019824f, -0.006202f, 0.009938f, -0.012521f, 0.004298f, 0.008519f, 0.012776f, -0.003541f, 0.019096f, -0.003422f, 0.016214f, -0.008648f, 0.013602f, -0.006630f, -0.022304f, -0.004945f, - 0.005715f, -0.007592f, 0.008769f, -0.004708f, -0.005278f, 0.002574f, -0.024473f, -0.007799f, -0.000407f, -0.004126f, -0.001382f, -0.011733f, -0.004012f, -0.004093f, 0.003995f, 0.025201f, 0.014523f, -0.014426f, 0.008043f, 0.020182f, 0.005039f, -0.006885f, 0.005058f, -0.005145f, -0.005910f, 0.014567f, 0.010087f, -0.009889f, -0.001306f, 0.010426f, 0.021528f, -0.006777f, 0.011717f, 0.032050f, 0.013745f, -0.014567f, 0.005945f, 0.003846f, -0.017791f, 0.002797f, -0.014721f, 0.006695f, -0.016059f, -0.003647f, 0.000591f, 0.007691f, -0.010553f, -0.002781f, -0.005325f, -0.009401f, 0.012075f, 0.010625f, -0.000870f, -0.006918f, 0.001435f, 0.008229f, -0.004772f, -0.020490f, 0.004167f, -0.016555f, 0.002149f, -0.005801f, 0.020358f, -0.011034f, 0.002497f, 0.004997f, 0.001631f, 0.007074f, -0.003484f, 0.022290f, 0.001365f, -0.015245f, -0.003161f, -0.011368f, -0.002151f, -0.004023f, -0.010592f, -0.013278f, -0.003676f, -0.008721f, -0.004277f, 0.014092f, 0.005044f, -0.012789f, 0.004443f, -0.015178f, -0.003141f, 0.010236f, -0.020417f, -0.018182f, 0.009754f, 0.009020f, 0.004591f, -0.001052f, -0.012501f, 0.004390f, - -0.006309f, -0.011946f, -0.005606f, 0.000204f, 0.003375f, 0.018659f, -0.007772f, -0.002546f, 0.000770f, 0.008521f, 0.004459f, -0.006950f, -0.008730f, -0.015603f, -0.004853f, -0.003671f, -0.008579f, -0.010047f, 0.006097f, 0.012548f, -0.000195f, -0.008271f, 0.013990f, 0.002662f, -0.007063f, 0.001784f, -0.002157f, -0.001648f, -0.004959f, -0.002381f, 0.009017f, -0.006637f, -0.011186f, -0.005172f, 0.005016f, -0.005918f, 0.010531f, 0.019916f, -0.014552f, -0.000389f, 0.013675f, -0.006337f, -0.009427f, 0.012462f, -0.019274f, -0.001133f, 0.003891f, -0.002502f, -0.006984f, -0.008581f, -0.003810f, 0.003375f, -0.000701f, 0.009323f, 0.005083f, -0.003179f, -0.007046f, -0.005508f, 0.015811f, 0.000502f, -0.018370f, 0.008649f, -0.011431f, -0.011817f, 0.007649f, 0.013377f, 0.014342f, 0.010284f, 0.000221f, 0.006857f, 0.005406f, 0.006432f, -0.005553f, -0.000601f, -0.004914f, -0.013868f, 0.006378f, -0.003850f, -0.000024f, -0.003374f, 0.002075f, -0.002661f, 0.015763f, 0.027383f, 0.005428f, -0.005327f, 0.000808f, -0.020429f, 0.020242f, -0.014147f, -0.007801f, -0.013684f, -0.014927f, 0.026379f, 0.002614f, -0.015784f, - -0.004234f, 0.017874f, 0.010938f, -0.015022f, -0.009158f, 0.020468f, 0.003288f, 0.001196f, 0.029411f, -0.014318f, 0.009571f, -0.011113f, -0.025158f, 0.011642f, 0.016124f, 0.000874f, -0.011383f, 0.008644f, 0.011252f, 0.021463f, 0.019606f, -0.001541f, 0.016615f, 0.007052f, 0.016960f, 0.016332f, -0.029080f, 0.009537f, -0.009880f, -0.013023f, -0.009651f, -0.003434f, -0.018789f, -0.004550f, 0.003737f, -0.016236f, -0.032446f, 0.006494f, -0.002917f, -0.029388f, -0.021681f, -0.019525f, -0.011150f, 0.000233f, -0.006050f, 0.006003f, -0.004451f, 0.010576f, 0.021517f, -0.013511f, 0.006877f, -0.005809f, -0.010836f, -0.008221f, 0.000684f, -0.003008f, -0.001589f, 0.015690f, -0.001355f, 0.015813f, 0.020920f, 0.005590f, 0.008622f, 0.013422f, -0.002551f, 0.002009f, -0.022004f, 0.019034f, -0.018077f, -0.007034f, -0.006235f, 0.000836f, -0.005509f, -0.017542f, -0.015334f, -0.033028f, 0.028323f, -0.033743f, -0.032483f, 0.004345f, 0.029704f, 0.009753f, -0.004719f, -0.008755f, 0.013196f, -0.016511f, 0.016666f, -0.006307f, 0.001312f, 0.000555f, -0.012638f, 0.010890f, -0.014915f, -0.012605f, 0.003302f, 0.014052f, - 0.018109f, 0.018054f, 0.019651f, 0.045146f, 0.020779f, 0.026101f, -0.011699f, 0.041812f, -0.022611f, 0.001815f, 0.009946f, 0.000483f, -0.014564f, 0.005788f, -0.003356f, -0.034410f, 0.014219f, -0.008207f, 0.004720f, -0.002679f, -0.010638f, 0.000610f, 0.011418f, -0.013582f, -0.006334f, -0.001653f, 0.009276f, -0.020844f, 0.014601f, 0.005631f, -0.018522f, -0.001034f, 0.009088f, -0.017279f, 0.007772f, -0.020839f, 0.010971f, -0.001392f, -0.005725f, -0.000417f, -0.012723f, 0.018277f, 0.022356f, -0.019798f, -0.010281f, 0.009474f, -0.005915f, 0.005925f, 0.006392f, 0.001619f, 0.001996f, 0.024621f, -0.004809f, -0.016127f, 0.016478f, -0.000491f, -0.011442f, -0.010711f, -0.018852f, 0.003909f, 0.006966f, 0.010048f, 0.011180f, -0.009567f, -0.014306f, 0.008467f, 0.005821f, 0.029940f, 0.004554f, -0.004651f, 0.001937f, 0.000630f, -0.008227f, -0.006525f, -0.023674f, -0.026634f, 0.045280f, 0.031699f, 0.040499f, 0.002911f, -0.025532f, 0.009447f, 0.021249f, 0.015304f, -0.006336f, -0.015957f, -0.004570f, -0.005622f, -0.007703f, -0.013669f, -0.005434f, -0.011411f, 0.030178f, 0.005197f, 0.005127f, 0.000638f, - 0.001907f, 0.003602f, -0.010944f, 0.020271f, 0.011332f, -0.000756f, 0.007324f, -0.002395f, 0.020517f, 0.004202f, -0.001742f, -0.032985f, -0.002427f, 0.002542f, 0.003209f, -0.005817f, 0.004182f, -0.015391f, 0.027108f, 0.022419f, 0.021162f, 0.018953f, -0.014636f, -0.019723f, 0.015359f, 0.005194f, 0.007422f, -0.000909f, -0.023643f, -0.016569f, 0.001139f, -0.012845f, -0.000105f, -0.010747f, -0.005147f, 0.014417f, 0.004109f, -0.009745f, 0.003158f, -0.025684f, 0.000271f, -0.043783f, -0.022981f, -0.041432f, 0.035115f, 0.032360f, 0.033564f, 0.041711f, 0.019026f, -0.007255f, -0.020249f, -0.006283f, -0.003614f, 0.004852f, 0.027538f, -0.015721f, -0.021218f, 0.019149f, 0.024835f, -0.011864f, 0.023097f, 0.003403f, -0.009376f, 0.009343f, -0.032728f, -0.010102f, 0.009676f, -0.010392f, -0.019899f, -0.038082f, 0.019171f, -0.016304f, 0.004843f, 0.024854f, 0.006390f, 0.028951f, 0.022556f, 0.012630f, 0.005245f, -0.016977f, -0.004464f, -0.008866f, 0.002133f, 0.016120f, 0.008985f, 0.003355f, 0.014366f, 0.039267f, -0.001365f, -0.033354f, -0.013928f, 0.005404f, 0.008786f, -0.001907f, 0.001652f, 0.003158f, - -0.013357f, 0.000871f, -0.030473f, 0.007055f, -0.031856f, -0.011996f, -0.024368f, 0.012513f, -0.011535f, -0.020895f, 0.033111f, 0.008922f, 0.003950f, -0.014350f, -0.017644f, 0.004769f, 0.009181f, 0.002813f, 0.012145f, -0.016273f, 0.037770f, -0.043456f, 0.013491f, -0.018069f, -0.023943f, -0.014702f, 0.025611f, 0.006994f, -0.021457f, 0.017643f, -0.015734f, 0.048485f, 0.000574f, -0.005234f, -0.016114f, 0.002016f, 0.045347f, 0.046662f, 0.044014f, 0.009310f, -0.011914f, -0.007482f, -0.028498f, 0.022964f, 0.000599f, 0.013426f, -0.008579f, 0.004235f, -0.010463f, -0.008115f, -0.016500f, 0.008752f, -0.017175f, 0.027965f, -0.073388f, -0.021483f, 0.000466f, -0.022325f, 0.015703f, -0.022949f, 0.004637f, -0.008961f, 0.023010f, 0.003950f, 0.022151f, 0.001450f, -0.005285f, -0.000521f, 0.008083f, -0.025859f, -0.018496f, -0.020160f, -0.002867f, 0.024818f, -0.049355f, 0.016921f, 0.042857f, 0.005072f, -0.031589f, -0.001454f, -0.026610f, -0.025701f, 0.017612f, -0.003572f, -0.021744f, 0.011823f, 0.001773f, -0.008358f, -0.012303f, 0.006739f, 0.017792f, 0.010529f, -0.025265f, -0.018742f, 0.014371f, 0.021383f, - -0.017826f, -0.023865f, 0.011473f, 0.023910f, -0.029754f, -0.001545f, -0.026631f, -0.036916f, 0.042913f, -0.007935f, 0.006240f, -0.009050f, 0.026020f, -0.007579f, 0.005062f, -0.016107f, 0.018788f, -0.011349f, -0.003625f, -0.038003f, -0.019257f, -0.010983f, -0.032663f, -0.045663f, -0.010889f, -0.017210f, 0.037362f, 0.009163f, 0.056966f, 0.007873f, -0.020117f, 0.004954f, 0.008438f, -0.051910f, -0.000129f, 0.039984f, 0.024352f, -0.031513f, 0.000959f, 0.018462f, -0.042276f, -0.009339f, -0.022658f, 0.013653f, -0.018396f, 0.007936f, -0.000345f, -0.010866f, -0.000901f, -0.003224f, -0.015701f, 0.010241f, -0.029797f, -0.013627f, -0.014588f, -0.036771f, -0.010196f, -0.007701f, -0.002659f, -0.000921f, -0.012379f, -0.013954f, 0.057880f, 0.014945f, -0.027093f, -0.046821f, -0.019096f, 0.000782f, 0.040745f, -0.014422f, -0.009297f, -0.028526f, -0.010220f, -0.021326f, 0.032523f, -0.033554f, 0.028498f, 0.036755f, -0.045415f, 0.022927f, 0.006195f, -0.022248f, -0.019999f, 0.005101f, 0.014598f, -0.095673f, -0.016897f, -0.005816f, -0.017786f, 0.017707f, -0.018279f, -0.074171f, -0.033625f, -0.026002f, -0.012862f, 0.010160f, - 0.060116f, -0.001940f, -0.069988f, -0.039394f, -0.043225f, -0.008369f, -0.023789f, -0.001305f, -0.035323f, 0.058012f, 0.035016f, -0.006645f, 0.046290f, 0.000910f, 0.049946f, 0.011376f, -0.028038f, -0.039488f, -0.023951f, -0.032015f, -0.013370f, 0.007035f, 0.022094f, -0.007658f, 0.007815f, -0.026706f, 0.005348f, -0.038247f, -0.002393f, -0.003001f, 0.013946f, -0.014975f, 0.061170f, 0.006783f, -0.000287f, 0.038792f, -0.014079f, -0.029304f, -0.015072f, 0.023277f, -0.000254f, -0.017210f, 0.008425f, -0.001455f, 0.052918f, 0.011311f, 0.002184f, -0.021150f, -0.028615f, -0.079224f, 0.007415f, -0.063281f, 0.033897f, 0.104550f, -0.072998f, -0.017776f, 0.020225f, -0.014673f, -0.010023f, -0.022899f, 0.021388f, -0.023500f, -0.069306f, -0.021213f, -0.068667f, -0.017025f, 0.002804f, -0.047532f, -0.000950f, -0.067549f, 0.034863f, -0.007906f, -0.034817f, 0.102504f, 0.015530f, 0.044020f, -0.022680f, -0.124197f, -0.013700f, -0.032375f, -0.035345f, 0.044084f, 0.034814f, -0.044084f, -0.034997f, 0.083867f, -0.010419f, 0.026630f, 0.003556f, -0.005288f, -0.010581f, -0.010074f, -0.028321f, -0.001171f, 0.008981f, 0.014304f, - 0.009446f, 0.029417f, -0.024589f, -0.001451f, -0.023981f, -0.014691f, 0.008601f, 0.042098f, 0.026840f, 0.037071f, 0.033259f, -0.008517f, 0.011540f, 0.019545f, -0.000725f, -0.035707f, -0.007116f, 0.047384f, -0.009408f, -0.069797f, -0.031143f, 0.006694f, -0.059184f, -0.026123f, -0.060633f, -0.041986f, -0.038185f, 0.054474f, 0.037055f, -0.012847f, 0.037086f, 0.013756f, 0.052631f, 0.035108f, 0.016388f, -0.094737f, -0.021784f, 0.003520f, -0.083412f, -0.061075f, -0.024026f, -0.016647f, -0.097578f, 0.020369f, 0.052659f, 0.071370f, 0.085093f, -0.029109f, -0.056863f, -0.000603f, -0.057333f, -0.041750f, -0.079204f, -0.086684f, -0.062063f, -0.051293f, 0.058779f, -0.035244f, -0.089411f, 0.039011f, 0.007432f, -0.059813f, 0.061667f, 0.032200f, 0.021063f, -0.010630f, -0.053201f, -0.011008f, 0.004660f, 0.057888f, 0.075739f, 0.007470f, 0.022669f, 0.007954f, 0.005278f, -0.000151f, 0.012842f, -0.027133f, 0.105424f, 0.027939f, -0.030429f, -0.030083f, -0.011877f, 0.007922f, 0.053074f, -0.020795f, -0.004578f, 0.003483f, 0.028361f, -0.020816f, 0.016382f, 0.005256f, -0.002609f, -0.080997f, -0.023447f, 0.030754f, - 0.046909f, 0.019242f, -0.006347f, -0.020687f, -0.052729f, -0.002346f, 0.012268f, -0.009479f, 0.004143f, -0.010738f, -0.032793f, 0.040136f, -0.005122f, 0.016884f, -0.035199f, -0.004121f, 0.101818f, 0.011383f, -0.007513f, 0.015509f, 0.016335f, 0.013305f, 0.053156f, -0.014160f, -0.018756f, 0.040975f, -0.000394f, 0.025859f, 0.017645f, 0.036029f, -0.008297f, -0.033043f, 0.022968f, -0.013777f, 0.007833f, 0.141362f, 0.139740f, 0.058518f, 0.029876f, 0.060412f, 0.001237f, -0.079811f, -0.026948f, 0.008235f, 0.002673f, -0.024967f, 0.046246f, 0.019382f, 0.012950f, -0.025606f, 0.055343f, -0.011400f, -0.006783f, -0.024648f, 0.025487f, 0.014983f, -0.057248f, -0.078605f, -0.028519f, 0.004500f, -0.004598f, -0.021005f, -0.074192f, -0.013904f, 0.014422f, -0.002045f, -0.031051f, -0.016350f, -0.028835f, -0.032399f, 0.006057f, 0.011390f, -0.051395f, -0.054174f, -0.025956f, -0.065441f, 0.006034f, 0.044000f, -0.054824f, 0.042056f, -0.033295f, -0.034167f, -0.060728f, -0.077095f, -0.089541f, -0.081587f, -0.049332f, -0.006974f, 0.017114f, 0.006170f, 0.016698f, -0.046220f, -0.099771f, -0.041485f, -0.096709f, -0.154970f, - -0.069043f, 0.112746f, 0.191550f, 0.113306f, -0.063651f, -0.046801f, -0.195848f, -0.169619f, 0.098851f, 0.013617f, 0.133720f, 0.148494f, 0.144346f, 0.048358f, -0.081313f, -0.084854f, -0.106840f, -0.105852f, -0.028356f, -0.008364f, 0.012416f, -0.048211f, 0.063258f, 0.029689f, 0.055898f, -0.128731f, 0.026813f, 0.015719f, -0.041198f, 0.027111f, -0.031405f, -0.015769f, -0.010936f, -0.019434f, 0.052518f, 0.099765f, -0.031638f, 0.019197f, -0.016429f, 0.023179f, 0.048908f, -0.016622f, -0.011836f, -0.028778f, 0.012233f, -0.018472f, -0.058242f, 0.040008f, 0.066043f, -0.009581f, -0.038597f, -0.033376f, -0.075007f, -0.020237f, 0.052102f, 0.037035f, 0.016350f, -0.079727f, -0.049003f, -0.034685f, 0.067676f, 0.061347f, 0.050831f, -0.155174f, -0.106298f, -0.012118f, 0.074092f, 0.164801f, -0.002100f, -0.196634f, -0.075226f, 0.007571f, 0.063947f, -0.004271f, 0.034011f, 0.029004f, -0.088633f, -0.036162f, -0.026075f, -0.049854f, 0.001599f, -0.094949f, 0.013527f, 0.040950f, -0.118600f, -0.072218f, -0.037251f, -0.011577f, 0.130071f, 0.003418f, -0.197981f, 0.024550f, 0.031360f, 0.038287f, 0.084732f, 0.052091f, - 0.043731f, -0.105551f, 0.014728f, -0.077696f, 0.013964f, 0.064990f, 0.057951f, 0.018320f, -0.037497f, 0.006768f, -0.022153f, -0.006379f, -0.027435f, -0.021425f, 0.014606f, 0.002785f, -0.039864f, -0.005794f, 0.021560f, -0.005733f, 0.003048f, 0.006244f, -0.024942f, -0.026950f, 0.000231f, 0.015287f, 0.003253f, -0.042707f, 0.004554f, 0.019225f, 0.007863f, 0.002955f, 0.044294f, -0.006794f, -0.009920f, 0.013181f, 0.018092f, -0.031367f, -0.030370f, 0.021367f, 0.006588f, -0.027370f, 0.018732f, 0.004357f, 0.010358f, -0.020302f, 0.009476f, 0.016237f, 0.005066f, -0.027757f, 0.035951f, -0.007673f, -0.033808f, -0.002808f, 0.032419f, 0.004814f, -0.020446f, 0.017494f, 0.011410f, -0.038667f, 0.018376f, -0.003598f, 0.039408f, -0.037076f, 0.008273f, 0.017313f, -0.048621f, -0.005426f, 0.030464f, -0.009024f, 0.024187f, -0.018473f, -0.025902f, -0.006550f, -0.026081f, 0.020693f, -0.050893f, 0.086476f, 0.013224f, 0.039734f, -0.032010f, 0.015886f, -0.005982f, 0.011452f, 0.010556f, -0.013109f, 0.006979f, 0.016765f, -0.007733f, 0.035147f, 0.002817f, 0.002240f, 0.012871f, 0.012249f, 0.000053f, -0.007548f, - 0.015858f, -0.001139f, -0.008677f, -0.000953f, 0.015960f, -0.014649f, 0.004760f, 0.008220f, -0.018629f, 0.026129f, -0.003549f, -0.010985f, 0.039902f, -0.014757f, -0.021163f, 0.018725f, 0.011270f, -0.009564f, 0.018203f, 0.014387f, -0.003082f, -0.004381f, -0.001412f, 0.006030f, 0.011197f, 0.006620f, 0.001572f, -0.005648f, 0.021464f, -0.020114f, 0.020675f, 0.003928f, -0.000594f, 0.006241f, 0.007767f, 0.007084f, 0.002642f, -0.017870f, 0.007084f, 0.017063f, -0.009673f, 0.000802f, 0.001889f, 0.013155f, 0.000662f, -0.003990f, 0.020544f, -0.008696f, 0.011930f, -0.018564f, -0.005234f, 0.019381f, -0.015979f, 0.018629f, -0.003197f, 0.012532f, 0.019770f, -0.070532f, -0.225272f, -0.011565f, 0.121119f, 0.054361f, 0.258217f, 0.021981f, 0.054344f, 0.002235f, -0.075611f, -0.094942f, -0.064571f, -0.115674f, -0.081231f, -0.050869f, 0.001528f, 0.088389f, 0.173669f, 0.128139f, 0.111097f, 0.036410f, -0.060948f, -0.088836f, -0.080382f, -0.094116f, -0.104972f, -0.042190f, -0.020484f, -0.008916f, 0.050569f, 0.067972f, 0.050599f, 0.094957f, 0.060639f, 0.022993f, 0.063016f, 0.001833f, -0.028132f, -0.017867f, - -0.057581f, -0.116530f, -0.071658f, -0.068005f, -0.070392f, 0.004160f, 0.031934f, 0.023036f, 0.085352f, 0.071092f, 0.047973f, 0.069990f, 0.073112f, 0.021618f, 0.021497f, -0.007054f, -0.064086f, -0.087366f, -0.068009f, -0.087471f, -0.063435f, -0.020870f, -0.016041f, 0.006697f, 0.047776f, 0.039137f, 0.033784f, 0.069701f, 0.056193f, 0.043402f, 0.070577f, 0.021929f, -0.013445f, 0.000837f, -0.026097f, -0.054986f, -0.031575f, -0.053702f, -0.034234f, -0.014690f}, - {-0.000974f, -0.000544f, -0.001053f, 0.007468f, 0.004839f, 0.000821f, -0.002807f, 0.003869f, 0.006696f, -0.002052f, 0.007410f, -0.004715f, -0.001510f, 0.004824f, 0.001644f, -0.008346f, 0.002647f, 0.005176f, -0.011583f, -0.000211f, 0.009561f, -0.005616f, -0.008028f, 0.008018f, -0.006457f, 0.001631f, -0.004731f, 0.000691f, 0.000623f, 0.000710f, -0.000425f, -0.005849f, 0.008387f, -0.003795f, -0.001920f, -0.005160f, -0.005383f, 0.000329f, -0.001152f, -0.003904f, -0.006648f, -0.005349f, 0.010195f, -0.001120f, 0.003981f, 0.002811f, -0.000651f, 0.007783f, 0.002081f, 0.005424f, -0.000607f, -0.004044f, 0.005315f, -0.007496f, -0.004059f, 0.000068f, -0.000799f, 0.000762f, 0.001814f, 0.005628f, -0.001923f, -0.001122f, -0.002282f, 0.001571f, -0.000779f, -0.001392f, 0.003496f, -0.000117f, 0.004366f, -0.000820f, -0.003615f, -0.003065f, -0.000014f, 0.000885f, -0.001373f, 0.001829f, -0.004964f, 0.001424f, 0.006222f, -0.000341f, 0.000731f, -0.008753f, -0.004307f, 0.001512f, 0.012049f, -0.007454f, 0.002670f, -0.012122f, 0.012835f, 0.001028f, 0.004830f, -0.001257f, 0.002202f, -0.002175f, -0.004139f, -0.010507f, - 0.004737f, -0.010532f, -0.004810f, -0.005851f, 0.006305f, 0.005053f, 0.002548f, 0.005260f, 0.009743f, 0.000839f, -0.008422f, 0.005907f, 0.001157f, -0.000182f, 0.004894f, -0.001489f, -0.002897f, -0.012404f, 0.002297f, -0.003382f, 0.003018f, 0.005555f, -0.006597f, -0.002479f, 0.006513f, 0.002220f, 0.001020f, -0.006171f, 0.016520f, 0.010056f, 0.001891f, 0.008137f, 0.006770f, 0.006557f, -0.014505f, 0.001233f, -0.001092f, -0.003608f, 0.004008f, 0.002797f, -0.001987f, -0.002417f, -0.000374f, -0.004065f, 0.004836f, -0.001276f, 0.009135f, 0.000111f, -0.001648f, -0.003630f, -0.006919f, -0.000868f, 0.006563f, 0.000320f, 0.002266f, 0.007467f, 0.003241f, 0.000983f, 0.003262f, 0.000922f, 0.004089f, 0.013668f, -0.006290f, 0.004710f, -0.003478f, -0.005611f, -0.002157f, -0.003820f, 0.007583f, -0.005852f, -0.011018f, -0.002662f, 0.003210f, -0.009171f, -0.005423f, 0.010810f, 0.018562f, -0.002875f, 0.007254f, -0.006069f, -0.006352f, -0.000082f, 0.002195f, -0.000595f, 0.000080f, 0.007007f, -0.011336f, 0.004000f, -0.000577f, -0.002220f, -0.009503f, 0.001066f, 0.000520f, 0.005730f, 0.001948f, -0.007442f, - 0.010406f, -0.007821f, 0.009737f, -0.000837f, 0.002029f, 0.004058f, -0.000782f, -0.004487f, 0.007706f, 0.002045f, 0.010193f, 0.001739f, -0.008329f, 0.015994f, 0.012885f, -0.004110f, -0.000906f, -0.002768f, -0.010554f, -0.005640f, -0.001397f, -0.001590f, 0.004841f, -0.005709f, 0.000923f, 0.004660f, 0.000475f, 0.000215f, -0.000222f, -0.000602f, -0.005479f, 0.010032f, 0.000824f, 0.000428f, -0.002476f, -0.000185f, -0.008238f, -0.005972f, -0.014817f, 0.016466f, -0.004563f, -0.002824f, 0.011532f, -0.005616f, 0.005557f, 0.026616f, -0.004096f, 0.000024f, -0.011295f, -0.009261f, -0.013875f, 0.006779f, -0.006210f, 0.002906f, 0.006381f, -0.009020f, -0.007847f, -0.005947f, -0.000234f, 0.001907f, -0.010983f, -0.004777f, 0.003609f, 0.003011f, -0.004861f, -0.002452f, 0.005369f, -0.007205f, 0.000161f, -0.003985f, -0.001999f, -0.005265f, 0.002959f, -0.004900f, 0.000841f, 0.002828f, -0.002529f, 0.010707f, -0.000369f, -0.002384f, -0.009376f, 0.000190f, 0.011459f, 0.000870f, 0.003294f, -0.012116f, -0.016969f, -0.006699f, -0.014724f, -0.013093f, -0.001199f, -0.006150f, -0.001362f, -0.015725f, 0.011809f, -0.014641f, - 0.001132f, 0.008495f, -0.009395f, -0.015302f, -0.011106f, -0.003991f, 0.008637f, 0.007448f, 0.011861f, -0.008574f, -0.007497f, -0.006413f, -0.005430f, 0.008004f, 0.001466f, -0.005197f, -0.002961f, 0.002744f, 0.014912f, 0.001510f, -0.006023f, 0.000791f, -0.004973f, -0.001177f, 0.010471f, 0.017457f, -0.005967f, -0.006231f, -0.015869f, 0.001908f, 0.004058f, 0.008937f, -0.005922f, 0.009634f, 0.001644f, 0.014896f, -0.011950f, 0.001782f, -0.022649f, -0.002672f, 0.002878f, -0.005742f, -0.004949f, -0.002196f, 0.008595f, -0.007071f, -0.011757f, 0.003196f, -0.017328f, -0.004043f, -0.008172f, 0.003657f, -0.001574f, 0.005717f, 0.001108f, -0.013632f, -0.014115f, 0.000156f, 0.008095f, 0.014080f, -0.002424f, -0.006082f, 0.012458f, -0.013489f, -0.006700f, 0.006127f, 0.006245f, 0.009222f, -0.008464f, 0.000077f, 0.004304f, -0.005968f, -0.001231f, 0.005346f, -0.007462f, 0.010456f, -0.003834f, -0.002226f, -0.010521f, -0.009712f, 0.005576f, -0.000220f, 0.001309f, -0.001777f, -0.005792f, 0.006513f, -0.003035f, 0.008197f, 0.001429f, -0.010846f, -0.009590f, 0.004422f, -0.003451f, 0.002611f, -0.012728f, 0.009837f, - -0.023469f, 0.006547f, -0.009714f, 0.009861f, 0.011075f, -0.010581f, -0.020506f, 0.003941f, -0.002027f, 0.014478f, -0.007312f, 0.020553f, -0.007448f, 0.013944f, -0.015240f, -0.004937f, 0.007471f, 0.010653f, 0.003464f, 0.000967f, -0.009079f, -0.000237f, -0.006995f, -0.008597f, 0.006092f, -0.007160f, 0.003947f, 0.003010f, 0.004686f, -0.003555f, 0.009808f, -0.000550f, 0.008526f, -0.000584f, -0.014346f, -0.001293f, -0.004146f, 0.002759f, 0.015639f, 0.002217f, -0.000659f, 0.000525f, -0.005461f, 0.006530f, -0.005128f, 0.009299f, 0.009154f, 0.004536f, 0.003865f, 0.016579f, -0.003190f, -0.001207f, -0.011556f, 0.010189f, 0.008103f, 0.003245f, 0.002439f, 0.003310f, 0.001088f, 0.006227f, 0.009627f, 0.008054f, 0.003892f, 0.005372f, -0.002012f, 0.014162f, 0.004366f, -0.000146f, -0.009037f, 0.007234f, -0.002664f, 0.020370f, 0.009863f, 0.005464f, -0.008392f, 0.000579f, -0.030843f, -0.016498f, 0.006801f, -0.005569f, 0.013095f, 0.013160f, 0.019456f, 0.008451f, 0.008124f, 0.005295f, -0.022440f, -0.004490f, -0.002766f, 0.002693f, -0.001917f, 0.007773f, 0.005402f, -0.008109f, -0.006691f, 0.006565f, - 0.011431f, 0.014753f, 0.012381f, 0.016679f, -0.008494f, -0.007978f, -0.011372f, 0.013063f, -0.006922f, 0.010945f, -0.002412f, 0.000273f, -0.010727f, -0.005684f, -0.006115f, 0.010070f, 0.011437f, 0.002868f, 0.011397f, 0.017159f, -0.006486f, 0.005017f, 0.019046f, -0.008686f, 0.006098f, 0.007424f, 0.000565f, 0.015334f, 0.018206f, 0.014991f, 0.031669f, 0.006950f, -0.004855f, -0.004867f, -0.005863f, 0.000727f, 0.005155f, 0.010785f, -0.002315f, -0.001992f, -0.004022f, -0.007387f, 0.002842f, 0.005831f, 0.007398f, -0.018685f, -0.003759f, 0.006331f, 0.012022f, 0.010555f, -0.018449f, -0.011241f, 0.001503f, 0.004567f, 0.011668f, 0.007785f, 0.015385f, -0.001761f, 0.003348f, 0.013136f, 0.019289f, 0.010877f, -0.020697f, 0.000221f, -0.022020f, -0.015701f, -0.009261f, -0.001735f, -0.013312f, 0.016419f, 0.006407f, 0.009746f, -0.027384f, -0.001917f, 0.018587f, 0.009302f, -0.007710f, -0.011631f, -0.006666f, 0.007118f, -0.020760f, -0.001221f, -0.013138f, 0.020918f, -0.002208f, -0.006123f, 0.002806f, -0.000768f, -0.002977f, 0.003658f, -0.004884f, 0.009665f, 0.007584f, 0.013900f, -0.000320f, 0.000642f, - 0.022301f, -0.006898f, 0.015221f, -0.002434f, -0.001688f, 0.037855f, 0.005420f, -0.004178f, -0.007617f, -0.029474f, 0.004112f, -0.030209f, -0.003978f, 0.031562f, -0.007777f, -0.006280f, -0.020763f, -0.006572f, 0.002142f, -0.011940f, 0.007845f, -0.001238f, -0.014510f, 0.017089f, 0.007941f, 0.005571f, 0.006753f, -0.011881f, 0.015434f, -0.020295f, 0.008682f, 0.008219f, 0.004291f, -0.001981f, -0.003584f, -0.004583f, 0.002369f, 0.013037f, -0.024269f, 0.011420f, -0.008135f, -0.011938f, -0.011357f, 0.010145f, 0.012766f, 0.007729f, 0.021651f, 0.016159f, 0.003786f, 0.006990f, -0.015805f, 0.004010f, 0.008059f, 0.016954f, 0.003796f, -0.007140f, 0.006590f, 0.008278f, -0.014114f, 0.002825f, -0.014498f, 0.012477f, 0.011390f, 0.014521f, -0.012842f, 0.008897f, 0.015454f, -0.006041f, 0.004439f, 0.020355f, -0.000001f, -0.011528f, -0.009109f, 0.005050f, -0.002671f, -0.011733f, -0.004518f, 0.000888f, 0.003458f, 0.007379f, -0.007982f, 0.014387f, 0.008900f, -0.002503f, 0.017118f, -0.001416f, 0.006807f, 0.022365f, -0.022607f, 0.043256f, -0.019146f, 0.006463f, 0.013318f, -0.003866f, -0.001943f, 0.005965f, - 0.029290f, -0.001033f, -0.003624f, -0.000350f, -0.006520f, 0.014506f, 0.016036f, -0.004620f, 0.006976f, 0.005944f, 0.005310f, 0.009879f, 0.012494f, 0.001092f, 0.013387f, 0.002623f, -0.011687f, 0.014720f, 0.019223f, 0.012006f, -0.019247f, 0.038520f, -0.011361f, 0.007707f, -0.027278f, 0.011568f, -0.024040f, 0.019567f, 0.002611f, -0.004855f, -0.013308f, 0.018489f, 0.003074f, 0.011934f, 0.012568f, 0.006497f, -0.020089f, 0.010994f, -0.011881f, -0.001950f, 0.010074f, 0.010528f, 0.003086f, -0.003549f, -0.020088f, 0.003195f, 0.019905f, 0.002416f, 0.013154f, 0.014132f, -0.020981f, 0.012200f, -0.010290f, -0.010703f, 0.016804f, 0.017948f, 0.010005f, 0.010157f, 0.003552f, 0.009719f, -0.021612f, -0.009882f, -0.006362f, 0.000731f, 0.024640f, 0.011508f, 0.010245f, -0.001724f, 0.011281f, -0.000519f, 0.027063f, 0.009689f, 0.010757f, 0.003992f, -0.000677f, -0.038901f, 0.015193f, 0.009138f, -0.002819f, -0.002804f, -0.028251f, 0.000230f, -0.010338f, 0.006932f, 0.026013f, -0.004178f, -0.013741f, 0.029668f, -0.000607f, 0.017080f, -0.009087f, 0.000969f, -0.017414f, -0.000485f, -0.007391f, 0.007180f, - -0.000993f, 0.024186f, -0.022262f, 0.002457f, 0.008192f, 0.010619f, -0.038102f, 0.024085f, 0.005971f, -0.027036f, -0.017886f, 0.013878f, 0.032147f, -0.012205f, -0.007076f, -0.023406f, 0.046375f, 0.017960f, 0.001817f, 0.007454f, -0.026110f, -0.016567f, -0.002282f, 0.001668f, 0.023336f, 0.004962f, 0.017641f, 0.020986f, -0.002329f, 0.000995f, 0.013404f, -0.004222f, -0.017378f, -0.015441f, -0.005450f, 0.020871f, -0.013080f, 0.026496f, -0.014142f, 0.039042f, 0.015625f, 0.031477f, -0.010493f, 0.004971f, 0.023385f, -0.019897f, 0.009717f, 0.011372f, 0.008533f, -0.011385f, 0.011158f, 0.003250f, 0.001803f, 0.011562f, 0.021487f, 0.020369f, -0.023458f, -0.004713f, 0.007568f, -0.019936f, -0.016047f, -0.005064f, -0.044684f, 0.011355f, -0.024185f, -0.012275f, -0.000242f, -0.004422f, 0.009436f, 0.027229f, 0.011631f, 0.012218f, -0.019951f, -0.000228f, -0.029219f, -0.043323f, 0.024096f, -0.017387f, 0.019834f, 0.006776f, 0.009821f, 0.011921f, -0.028965f, -0.053041f, 0.005162f, 0.008165f, 0.030556f, -0.029276f, -0.032145f, 0.028542f, -0.010800f, 0.013219f, -0.005716f, 0.007128f, 0.004886f, 0.007847f, - -0.014406f, 0.007601f, -0.001710f, -0.004209f, 0.019004f, 0.007374f, -0.002239f, -0.023685f, -0.002860f, -0.000252f, -0.004008f, -0.000711f, -0.012617f, -0.031556f, -0.013782f, 0.023930f, -0.009561f, 0.012024f, -0.017693f, 0.013882f, 0.007375f, 0.000202f, -0.008679f, -0.039245f, 0.022400f, 0.021739f, 0.027849f, -0.018710f, -0.007645f, 0.037658f, 0.033375f, 0.015636f, 0.007559f, 0.021467f, 0.008235f, 0.019328f, -0.009640f, 0.016837f, -0.030865f, -0.001584f, 0.009281f, -0.007773f, 0.037882f, 0.001836f, 0.020968f, -0.011819f, -0.019517f, 0.043494f, -0.000170f, 0.017436f, -0.005167f, 0.000907f, -0.050259f, -0.003751f, 0.011530f, -0.022904f, -0.029695f, -0.009325f, -0.007681f, -0.050197f, -0.047094f, -0.013097f, -0.000702f, 0.033727f, 0.027347f, 0.026944f, -0.011718f, -0.005532f, -0.007889f, 0.028819f, 0.011958f, -0.013586f, -0.003077f, -0.011043f, 0.020754f, 0.015689f, -0.013298f, -0.018547f, -0.016840f, -0.033829f, 0.012873f, -0.000194f, 0.000147f, 0.006028f, -0.005657f, 0.011286f, 0.045289f, -0.027341f, 0.013157f, 0.001598f, -0.018442f, -0.011320f, -0.021743f, 0.006818f, -0.010014f, -0.011765f, - 0.023212f, 0.001735f, -0.008545f, 0.022864f, -0.003835f, -0.011840f, 0.007850f, 0.016334f, -0.010152f, 0.017635f, 0.033454f, 0.031444f, -0.022736f, -0.001567f, 0.007834f, 0.017158f, -0.028564f, -0.007167f, -0.008001f, 0.033987f, 0.014935f, -0.005072f, -0.021417f, -0.025057f, -0.020979f, 0.030615f, 0.026755f, -0.051623f, -0.041418f, -0.032989f, -0.021364f, 0.006754f, -0.018373f, 0.011897f, 0.007009f, 0.005101f, 0.040066f, 0.031415f, 0.019321f, 0.002411f, -0.027116f, -0.014521f, -0.004616f, 0.010179f, 0.016412f, -0.024307f, 0.005673f, 0.000634f, -0.020502f, -0.010374f, 0.015805f, -0.012852f, 0.012515f, 0.004584f, 0.014812f, -0.019757f, -0.000367f, -0.042933f, 0.006018f, -0.054074f, 0.021567f, 0.020396f, -0.020778f, 0.023124f, 0.028835f, -0.000400f, 0.008122f, -0.035471f, 0.020045f, 0.000637f, -0.014248f, 0.017079f, -0.004407f, -0.001242f, -0.000331f, 0.000688f, 0.035731f, -0.005691f, 0.000014f, 0.042052f, -0.000333f, -0.022066f, -0.057712f, -0.049521f, 0.053070f, 0.030877f, 0.013264f, 0.011136f, -0.021846f, -0.046899f, -0.021580f, 0.004598f, -0.016753f, 0.032226f, -0.001448f, 0.001788f, - 0.038085f, -0.010812f, -0.011178f, -0.011847f, -0.023159f, -0.044013f, -0.031411f, 0.086709f, -0.043668f, -0.024962f, 0.026487f, -0.052085f, -0.033138f, 0.025183f, 0.045399f, 0.003601f, -0.011968f, 0.004094f, 0.010459f, -0.038006f, -0.028196f, -0.019899f, -0.034804f, -0.003751f, 0.031775f, -0.003028f, 0.006057f, 0.015251f, 0.009985f, -0.028220f, -0.013911f, -0.023455f, -0.012758f, 0.028439f, -0.009486f, -0.003921f, -0.004568f, 0.016931f, 0.017075f, 0.051868f, 0.007832f, 0.037961f, -0.002811f, 0.012272f, -0.021645f, -0.016718f, 0.013353f, -0.027701f, -0.030383f, 0.000110f, 0.008890f, -0.016219f, 0.011751f, -0.018864f, 0.004975f, -0.048162f, 0.025861f, 0.013758f, 0.021071f, 0.001657f, -0.019668f, -0.040626f, -0.014569f, -0.004650f, 0.032158f, -0.026020f, -0.015141f, 0.007864f, 0.074148f, -0.021935f, 0.075400f, -0.047919f, 0.017969f, -0.018665f, 0.032890f, -0.014837f, 0.057162f, -0.055898f, 0.082041f, -0.009781f, 0.016635f, 0.033416f, -0.061362f, 0.051905f, -0.065480f, 0.041023f, -0.106491f, 0.053952f, -0.054732f, 0.043637f, -0.071225f, 0.055682f, 0.002429f, 0.025910f, -0.032066f, -0.029006f, - 0.035206f, 0.060181f, -0.048627f, 0.076102f, -0.003665f, 0.000587f, -0.002170f, 0.013685f, -0.021719f, -0.015948f, -0.032897f, -0.006993f, 0.001843f, 0.000584f, 0.000596f, 0.030155f, 0.005860f, 0.032986f, 0.032629f, -0.019827f, 0.012511f, 0.068242f, 0.022966f, 0.014895f, 0.010980f, -0.058523f, 0.003804f, -0.009251f, -0.006568f, -0.053726f, -0.010608f, 0.031220f, 0.009569f, 0.010467f, 0.016405f, 0.039398f, 0.011055f, -0.012084f, -0.003232f, -0.003410f, 0.015528f, -0.026839f, -0.015681f, 0.040406f, 0.025948f, 0.018634f, 0.032115f, 0.022810f, -0.012924f, -0.007321f, -0.046088f, -0.021160f, 0.019713f, 0.014263f, 0.035974f, -0.026397f, -0.012091f, -0.010074f, 0.026507f, 0.013807f, 0.023773f, 0.007912f, -0.018113f, -0.019261f, 0.058631f, -0.020536f, -0.056774f, 0.009695f, 0.040731f, 0.023555f, -0.001674f, -0.011503f, 0.002841f, -0.001619f, -0.001279f, 0.016623f, -0.022118f, -0.118373f, 0.033990f, -0.013470f, -0.006626f, 0.030408f, -0.019319f, 0.032580f, -0.003340f, -0.050578f, -0.008576f, 0.006237f, 0.018998f, 0.024350f, 0.006176f, -0.035406f, 0.037063f, -0.012937f, -0.002569f, -0.021204f, - -0.009437f, 0.020833f, -0.003224f, 0.018766f, 0.029902f, -0.005337f, -0.037197f, 0.009861f, 0.042045f, -0.037110f, 0.014740f, 0.033749f, -0.005361f, -0.023958f, -0.047206f, -0.030534f, 0.034049f, 0.087847f, -0.026148f, -0.032664f, 0.097445f, -0.004585f, -0.013669f, 0.071686f, 0.040959f, 0.036579f, 0.028293f, 0.013426f, -0.020350f, 0.037468f, 0.033221f, 0.024811f, 0.010663f, -0.062162f, 0.040206f, 0.037685f, -0.067804f, -0.036991f, -0.024382f, -0.016673f, -0.018738f, 0.076449f, 0.036872f, -0.039795f, 0.039440f, -0.013012f, -0.039744f, 0.020045f, 0.019931f, -0.014494f, -0.017035f, -0.058854f, 0.006619f, 0.014227f, 0.044758f, 0.026246f, 0.003424f, -0.032026f, -0.130165f, 0.039664f, 0.073118f, -0.045788f, -0.009614f, -0.035731f, 0.075304f, 0.050276f, 0.031758f, -0.006510f, -0.026433f, 0.004871f, 0.030372f, 0.013551f, -0.013121f, -0.003547f, 0.041615f, -0.003460f, -0.015270f, -0.056515f, -0.026344f, 0.046153f, 0.027430f, -0.030583f, 0.023876f, -0.022480f, -0.006663f, 0.013013f, 0.013398f, -0.014113f, 0.008730f, -0.050124f, 0.014188f, 0.064672f, -0.008174f, -0.014349f, -0.064669f, -0.040607f, - 0.031734f, -0.052915f, -0.027550f, 0.009856f, 0.013299f, -0.017839f, 0.042827f, 0.037981f, -0.041039f, 0.013094f, 0.023357f, 0.064015f, 0.061292f, -0.012394f, 0.020281f, -0.004621f, 0.070049f, 0.027028f, 0.028624f, 0.062472f, -0.029127f, -0.047078f, -0.021728f, -0.059573f, 0.046975f, 0.017165f, 0.023172f, 0.006727f, 0.079501f, -0.058385f, -0.011707f, 0.026902f, -0.018026f, 0.029636f, -0.000883f, -0.004450f, 0.019089f, -0.053102f, 0.032865f, 0.054022f, 0.047434f, 0.048887f, 0.062013f, -0.031440f, 0.049365f, -0.088660f, -0.037431f, 0.037441f, 0.010724f, 0.069655f, 0.032965f, 0.059860f, -0.022346f, 0.010476f, -0.047037f, 0.036536f, 0.057786f, 0.053412f, 0.007432f, 0.038776f, -0.085507f, -0.054095f, 0.056818f, 0.019025f, -0.052476f, -0.025087f, 0.008938f, 0.083800f, 0.027089f, -0.029486f, -0.039182f, 0.011555f, -0.009916f, 0.052961f, 0.055630f, -0.001812f, -0.006586f, 0.014168f, -0.013093f, 0.067701f, 0.020482f, -0.011506f, 0.014954f, -0.026721f, -0.016075f, -0.139720f, -0.046797f, 0.029576f, -0.020456f, -0.017397f, 0.001305f, -0.021682f, -0.023921f, 0.070186f, 0.046083f, -0.028609f, - 0.062110f, 0.129151f, 0.027741f, 0.093588f, 0.014521f, 0.023261f, 0.067450f, 0.048545f, -0.032321f, -0.033663f, -0.066805f, -0.036779f, -0.000835f, -0.061371f, 0.030466f, 0.000862f, -0.059642f, -0.035085f, -0.034694f, 0.002265f, 0.060283f, -0.002789f, 0.051783f, -0.027845f, 0.016453f, -0.103656f, 0.033785f, -0.012977f, 0.058689f, -0.010447f, -0.060233f, 0.067523f, -0.020373f, 0.012995f, 0.040478f, 0.030489f, 0.062812f, -0.005928f, 0.012944f, -0.008190f, 0.071174f, -0.011289f, 0.016843f, 0.049693f, -0.049728f, 0.049000f, -0.009264f, 0.031058f, 0.049011f, -0.009226f, 0.014403f, 0.010259f, 0.009054f, -0.011690f, 0.024437f, 0.022033f, -0.003287f, -0.023621f, -0.000176f, -0.028014f, -0.005274f, -0.003244f, 0.029901f, -0.010318f, -0.043850f, -0.029582f, 0.056354f, 0.054438f, -0.044017f, -0.038648f, 0.066673f, 0.074777f, -0.022699f, -0.004749f, 0.057464f, 0.004503f, 0.032273f, 0.040297f, -0.081983f, -0.023539f, -0.000231f, 0.087179f, 0.013650f, -0.003721f, -0.077402f, 0.018860f, 0.039049f, 0.023756f, 0.009545f, 0.024678f, 0.015696f, 0.013691f, 0.114402f, -0.001532f, 0.016239f, 0.061932f, - 0.060897f, -0.104794f, -0.007909f, -0.088681f, -0.082517f, 0.020111f, 0.016376f, 0.014610f, 0.001119f, 0.077468f, 0.043300f, 0.099893f, 0.108473f, -0.012195f, -0.055048f, 0.011376f, -0.015880f, -0.010006f, 0.022407f, 0.010689f, -0.010202f, -0.050280f, -0.056665f, 0.060005f, 0.026026f, -0.006491f, 0.007467f, 0.010108f, 0.003701f, 0.011478f, -0.007540f, -0.013763f, -0.083542f, 0.002419f, 0.044688f, -0.013008f, -0.065081f, -0.019819f, 0.049247f, -0.094849f, -0.035409f, 0.061518f, 0.034022f, 0.073371f, -0.004846f, 0.006451f, -0.069567f, -0.066033f, -0.087856f, 0.072786f, 0.097882f, -0.131659f, -0.069754f, -0.005350f, 0.064037f, -0.051085f, -0.012404f, 0.123989f, 0.045655f, 0.032992f, 0.076564f, 0.061225f, 0.084194f, -0.029715f, 0.083377f, -0.010920f, -0.074405f, -0.099044f, -0.029473f, 0.041975f, -0.086710f, -0.012465f, 0.010726f, -0.013201f, -0.035566f, 0.021978f, -0.077599f, 0.059177f, -0.005378f, 0.017851f, 0.022711f, 0.021952f, 0.000411f, -0.026403f, 0.041900f, 0.010216f, 0.040438f, -0.009143f, -0.086741f, -0.008234f, 0.024659f, -0.028809f, -0.031937f, -0.019770f, -0.029454f, 0.034812f, - -0.009329f, -0.031134f, -0.002019f, 0.032345f, -0.044297f, 0.030424f, -0.015535f, 0.015986f, -0.043625f, -0.011238f, 0.017342f, -0.004157f, -0.004227f, 0.004915f, 0.024132f, -0.004760f, -0.004142f, -0.030767f, 0.014923f, -0.008785f, 0.004708f, 0.008904f, 0.003041f, 0.021986f, -0.033022f, -0.025624f, 0.034349f, 0.029196f, -0.041386f, 0.019168f, -0.033433f, 0.037952f, -0.032271f, 0.013947f, 0.009964f, -0.027918f, 0.060592f, 0.005242f, -0.067210f, 0.030353f, 0.008355f, -0.052817f, 0.029520f, -0.019919f, 0.031546f, -0.046032f, 0.023769f, -0.048808f, 0.022804f, 0.032934f, -0.029578f, 0.016429f, -0.030834f, -0.000207f, 0.004421f, 0.002055f, 0.014145f, -0.042098f, -0.231169f, -0.398456f, -0.147947f, -0.314023f, -0.310886f, 0.131760f, 0.009054f, 0.192345f, 0.463806f, 0.415638f, 0.336677f, 0.416329f, 0.245885f, 0.037111f, 0.061639f, -0.085411f, -0.349035f, -0.345209f, -0.264003f, -0.335968f, -0.237430f, -0.067059f, -0.167484f, -0.222475f, -0.109178f, -0.047285f, -0.126158f, -0.071564f, -0.024037f, -0.073881f, -0.114324f, -0.002202f, 0.058386f, -0.048465f, 0.089658f, 0.144601f, -0.016882f, 0.011256f, - 0.203470f, 0.090726f, -0.018813f, 0.190105f, 0.152001f, -0.059587f, 0.062178f, 0.177356f, -0.022207f, -0.001890f, 0.258981f, 0.131575f, 0.045034f, 0.318583f, 0.353022f, 0.166619f, 0.335221f, 0.421561f, 0.101376f, 0.047246f, 0.166506f, -0.079373f, -0.218144f, -0.128078f, -0.277971f, -0.486486f, -0.483974f, -0.545019f, -0.725272f, -0.724235f, -0.690894f, -0.697735f, -0.615231f, -0.506852f, -0.382700f, -0.196101f, 0.001719f, 0.322431f, 0.383469f, 0.258023f} - }, - { - {0.013548f, -0.006997f, 0.003290f, -0.000917f, 0.001273f, -0.001926f, 0.006944f, 0.010525f, -0.005045f, 0.003679f, -0.001194f, 0.003670f, -0.004751f, -0.000556f, 0.002762f, -0.006361f, -0.006367f, 0.002066f, 0.003341f, -0.007454f, 0.003414f, -0.004137f, -0.005592f, 0.000365f, -0.002932f, -0.005570f, -0.007021f, -0.001256f, 0.005896f, -0.001273f, 0.002242f, 0.003896f, 0.002182f, 0.002802f, 0.003312f, 0.002856f, 0.006833f, -0.010079f, 0.002622f, -0.006562f, 0.003667f, 0.007104f, 0.000429f, -0.001520f, -0.006127f, 0.002419f, -0.001036f, 0.001077f, 0.002160f, 0.001185f, -0.002412f, -0.005300f, -0.003939f, -0.006843f, 0.001451f, 0.000007f, 0.000838f, 0.003220f, 0.004436f, 0.001317f, 0.007887f, 0.000451f, -0.004923f, 0.005366f, -0.001514f, -0.001001f, -0.001678f, -0.007289f, 0.006305f, 0.003100f, 0.005528f, -0.006518f, -0.010567f, -0.003182f, 0.004674f, 0.003495f, -0.005450f, -0.015743f, 0.001800f, 0.010441f, 0.003611f, 0.006817f, -0.009820f, -0.005376f, 0.000512f, -0.001715f, 0.002717f, 0.008264f, -0.019725f, -0.000112f, 0.006585f, 0.003932f, 0.006079f, -0.005713f, -0.007917f, 0.008667f, - -0.000057f, 0.002422f, 0.005487f, 0.007165f, 0.002738f, 0.001495f, 0.006542f, -0.000956f, -0.001956f, -0.005574f, 0.003109f, -0.001581f, -0.000790f, -0.002910f, 0.003823f, 0.009393f, 0.000166f, -0.001990f, 0.004564f, -0.006065f, -0.008877f, -0.005030f, -0.001683f, -0.005902f, 0.000678f, -0.001416f, 0.003944f, -0.003722f, 0.001218f, -0.007399f, -0.000529f, -0.006111f, -0.000103f, -0.002863f, -0.002182f, 0.002941f, -0.003266f, -0.000492f, 0.005170f, -0.002761f, 0.006137f, 0.006977f, 0.000768f, 0.009467f, -0.004682f, -0.000569f, 0.004912f, -0.001953f, 0.003432f, 0.004064f, 0.002716f, -0.005494f, 0.002378f, 0.001816f, 0.002052f, -0.000383f, -0.003796f, 0.025978f, -0.007706f, 0.002240f, -0.006014f, -0.000763f, -0.002678f, 0.002728f, 0.001756f, 0.008706f, 0.002485f, 0.001271f, 0.003206f, -0.002488f, -0.018434f, -0.017685f, -0.005708f, 0.002005f, 0.005039f, -0.004729f, 0.000712f, -0.005973f, -0.002293f, -0.000047f, 0.002801f, -0.008043f, -0.008668f, -0.002824f, -0.000812f, 0.004177f, 0.001213f, -0.002242f, -0.006333f, 0.000705f, -0.003612f, -0.000201f, 0.003965f, -0.006526f, 0.002677f, 0.005070f, - -0.004540f, -0.011681f, -0.003220f, 0.003689f, -0.000947f, 0.002906f, -0.000827f, 0.002446f, -0.000801f, 0.002716f, 0.000340f, -0.010997f, 0.001794f, 0.003819f, -0.001944f, 0.002410f, 0.000213f, -0.001144f, -0.002371f, -0.000456f, -0.006490f, -0.001149f, -0.001996f, -0.008466f, -0.001620f, -0.000930f, 0.006645f, -0.007622f, 0.011116f, 0.012487f, 0.010126f, -0.005457f, -0.002506f, -0.003473f, 0.004630f, -0.003198f, -0.003479f, 0.001337f, -0.024600f, 0.000024f, -0.003632f, 0.001894f, -0.000662f, -0.012653f, -0.002258f, -0.002531f, 0.004212f, 0.006414f, -0.008387f, 0.007038f, -0.001978f, 0.004902f, 0.004962f, -0.002410f, 0.010539f, 0.000799f, 0.000682f, -0.001622f, 0.002022f, -0.002393f, 0.002140f, -0.002709f, 0.000627f, -0.006571f, 0.000973f, 0.007607f, 0.000256f, 0.003306f, 0.008094f, -0.007521f, -0.007842f, 0.003567f, -0.003405f, 0.006449f, -0.006046f, -0.001724f, -0.012949f, -0.010021f, -0.008543f, 0.004064f, 0.001463f, 0.004916f, -0.004480f, -0.003213f, -0.000654f, 0.008537f, -0.008838f, 0.004031f, 0.001980f, 0.000929f, 0.005056f, -0.002953f, -0.003804f, -0.005263f, 0.003811f, 0.002089f, - -0.007687f, -0.008659f, -0.009956f, 0.000030f, -0.001740f, 0.003759f, 0.000056f, -0.001578f, 0.001540f, 0.001832f, 0.005267f, -0.011993f, 0.002187f, 0.007628f, 0.011226f, 0.011419f, 0.009680f, -0.000835f, -0.005796f, -0.013152f, 0.010313f, -0.006348f, 0.012037f, 0.015273f, 0.010022f, 0.001177f, 0.005468f, 0.002281f, 0.012753f, -0.004897f, -0.004923f, 0.004610f, -0.000403f, 0.006019f, 0.010129f, -0.011218f, 0.005337f, 0.012621f, 0.006665f, 0.000533f, 0.001258f, 0.002718f, -0.003885f, 0.001273f, -0.003591f, -0.005547f, -0.000435f, 0.012050f, -0.002636f, 0.006335f, -0.002322f, -0.005150f, 0.014187f, -0.009772f, 0.009991f, 0.010786f, 0.003271f, 0.007355f, -0.006841f, -0.000855f, -0.001836f, -0.001193f, 0.007417f, 0.003230f, -0.007419f, 0.002886f, 0.000627f, 0.003137f, -0.000409f, 0.004668f, 0.004607f, 0.012142f, -0.009592f, 0.006873f, 0.005835f, 0.000397f, 0.005845f, 0.002723f, 0.008234f, 0.007711f, 0.005618f, -0.001997f, 0.007017f, 0.010875f, 0.001634f, 0.007104f, -0.001945f, 0.012701f, 0.013375f, 0.014241f, -0.001324f, -0.006707f, 0.005251f, 0.000992f, 0.007134f, 0.006093f, - 0.020275f, -0.001862f, -0.006403f, 0.019346f, -0.007722f, 0.008740f, -0.004767f, -0.018357f, 0.003137f, -0.005179f, 0.000397f, 0.022285f, -0.008787f, -0.010280f, 0.000596f, 0.011857f, -0.019000f, -0.006685f, 0.013714f, -0.004642f, 0.004175f, 0.006963f, -0.005409f, 0.006400f, -0.004355f, -0.006089f, 0.000824f, -0.001398f, -0.002799f, -0.001937f, 0.007256f, -0.005772f, 0.014622f, 0.004333f, -0.000334f, -0.008165f, -0.003305f, 0.009926f, -0.011458f, 0.002926f, 0.002880f, -0.000977f, -0.015792f, 0.010932f, 0.001763f, 0.003288f, 0.000303f, -0.001227f, 0.006599f, -0.003691f, 0.009344f, 0.006919f, -0.005356f, -0.017182f, 0.006719f, 0.005921f, -0.001927f, -0.004033f, 0.002789f, 0.012915f, 0.010171f, -0.000037f, 0.005143f, -0.009353f, 0.005688f, -0.000433f, -0.006026f, 0.006224f, 0.006597f, -0.004728f, 0.006128f, 0.003577f, -0.007371f, -0.000994f, 0.003111f, -0.003538f, 0.011420f, 0.007544f, 0.006850f, 0.019881f, 0.003345f, -0.003998f, -0.023543f, 0.008348f, 0.014667f, 0.009086f, 0.006251f, -0.001247f, 0.007885f, 0.027333f, -0.002371f, 0.013064f, 0.002059f, 0.007663f, 0.003478f, 0.001292f, - 0.006190f, -0.001414f, -0.010455f, -0.002363f, -0.007541f, -0.001388f, -0.010992f, 0.005091f, 0.001248f, 0.014721f, 0.003636f, -0.005670f, 0.005518f, -0.001170f, -0.002475f, 0.009725f, 0.004140f, 0.007473f, 0.004843f, -0.003044f, -0.014564f, 0.001771f, 0.010007f, 0.000197f, -0.001987f, 0.004869f, -0.007198f, -0.002669f, -0.013441f, -0.017093f, 0.010330f, 0.011170f, 0.009140f, -0.001694f, -0.001853f, 0.000983f, 0.000814f, 0.006147f, 0.000232f, 0.006663f, 0.006368f, 0.000715f, 0.006564f, -0.004072f, 0.002700f, -0.001697f, 0.004481f, 0.004852f, 0.018199f, 0.001046f, 0.015207f, -0.004121f, -0.012657f, -0.000159f, -0.000327f, -0.004146f, 0.012869f, 0.000672f, 0.008863f, -0.021527f, -0.000643f, 0.022142f, 0.030333f, -0.012453f, 0.003434f, 0.004953f, -0.010505f, -0.005977f, 0.001188f, -0.008600f, -0.009166f, 0.021390f, 0.002926f, -0.013855f, -0.002299f, -0.008956f, -0.005305f, 0.014026f, -0.004431f, -0.005860f, 0.012399f, 0.008000f, 0.012508f, -0.005086f, 0.002448f, 0.012641f, 0.000368f, -0.007092f, 0.003182f, -0.000738f, 0.001319f, -0.015273f, -0.010896f, 0.005042f, -0.001382f, 0.004110f, - -0.014685f, 0.007165f, 0.004939f, 0.003794f, -0.025718f, -0.014401f, -0.006814f, -0.002700f, 0.003188f, -0.010599f, -0.007874f, 0.003001f, 0.018947f, 0.013349f, 0.006351f, -0.002881f, -0.002715f, -0.006763f, 0.004982f, -0.001515f, -0.015073f, -0.010345f, -0.002087f, 0.000453f, 0.019533f, 0.011991f, -0.011016f, -0.010528f, 0.013039f, 0.003595f, -0.009685f, 0.000904f, 0.011243f, 0.005652f, -0.001325f, -0.015556f, 0.015892f, -0.005474f, 0.008631f, 0.003807f, 0.004538f, -0.005490f, 0.009355f, -0.011089f, 0.013479f, -0.000825f, -0.003158f, 0.007340f, -0.012832f, 0.004890f, 0.007592f, 0.001823f, 0.005426f, 0.006615f, -0.003179f, 0.014969f, -0.006467f, -0.024524f, -0.014411f, -0.002896f, 0.001384f, -0.004894f, -0.010227f, -0.011253f, -0.007480f, 0.024847f, -0.006368f, -0.001541f, 0.003958f, -0.004690f, 0.003353f, 0.020465f, -0.009216f, 0.009928f, -0.005813f, -0.012492f, 0.012011f, 0.008764f, 0.005793f, 0.018408f, 0.000874f, 0.008903f, -0.000307f, 0.002591f, -0.000213f, -0.005451f, 0.004465f, -0.000898f, 0.013544f, 0.003092f, -0.008445f, -0.001801f, -0.002041f, -0.000083f, -0.014063f, 0.006444f, - -0.013832f, 0.004104f, 0.020032f, -0.012016f, -0.023608f, 0.006330f, 0.004064f, 0.011897f, -0.004163f, 0.000640f, 0.012184f, -0.006005f, 0.006493f, 0.009574f, 0.003422f, -0.003556f, 0.012507f, 0.004612f, 0.016067f, -0.018631f, 0.045316f, -0.009732f, 0.020761f, 0.002558f, 0.009096f, 0.006713f, 0.000624f, -0.024354f, 0.022027f, -0.030535f, 0.010848f, 0.008097f, 0.028865f, -0.012563f, 0.013441f, -0.019238f, 0.013741f, -0.005840f, -0.020554f, -0.009674f, 0.005840f, 0.006012f, 0.008624f, 0.004496f, 0.012053f, 0.007855f, 0.017853f, -0.004785f, -0.013074f, -0.012084f, 0.005758f, 0.000295f, -0.006002f, 0.011807f, 0.005860f, -0.001934f, 0.007692f, 0.014467f, -0.000381f, 0.003997f, -0.001174f, 0.007289f, 0.005048f, -0.017750f, -0.006885f, -0.023380f, -0.004463f, -0.003792f, 0.000451f, 0.011531f, 0.011116f, 0.001645f, -0.005491f, -0.000035f, -0.002498f, -0.005571f, 0.004239f, 0.033243f, 0.004100f, -0.000808f, 0.011708f, -0.000951f, 0.013280f, -0.005438f, 0.001351f, -0.008232f, 0.034594f, 0.007422f, -0.012461f, -0.016270f, -0.009216f, 0.000599f, 0.000555f, -0.022134f, 0.002349f, 0.004299f, - 0.001866f, 0.023033f, 0.001742f, 0.019097f, 0.011539f, 0.018694f, 0.006159f, -0.019662f, 0.018703f, -0.012751f, 0.032528f, -0.021586f, -0.006415f, -0.029719f, -0.006316f, -0.003614f, 0.012881f, -0.014150f, 0.018977f, 0.014802f, -0.009351f, 0.000459f, 0.021749f, 0.030041f, -0.009837f, 0.000063f, -0.004050f, 0.008867f, 0.000120f, -0.004399f, 0.004441f, 0.007557f, -0.014637f, 0.010121f, 0.002111f, 0.011679f, 0.004854f, 0.000893f, -0.024961f, -0.005147f, 0.029046f, -0.004652f, 0.009758f, 0.020973f, 0.006476f, -0.003075f, -0.007697f, -0.011685f, -0.006065f, -0.000529f, -0.009462f, -0.007381f, 0.016884f, 0.013755f, 0.004948f, 0.023882f, 0.017214f, -0.007499f, -0.002521f, 0.001256f, 0.006023f, -0.010384f, -0.020560f, 0.024095f, 0.011804f, -0.008564f, 0.024508f, 0.022257f, 0.028503f, 0.008503f, 0.004094f, -0.014936f, 0.000334f, -0.019994f, -0.012355f, -0.014332f, -0.030188f, 0.025154f, 0.001098f, 0.004252f, -0.004246f, 0.001685f, -0.003684f, -0.039177f, 0.004088f, -0.000821f, -0.007366f, -0.003347f, -0.019443f, 0.021377f, 0.022002f, 0.024569f, -0.041063f, 0.012627f, 0.007993f, 0.000503f, - 0.039676f, 0.015929f, -0.020375f, -0.002878f, 0.039147f, 0.004101f, 0.006611f, 0.007485f, -0.012098f, 0.005993f, 0.007677f, 0.023937f, 0.011974f, -0.019471f, -0.031447f, 0.010995f, 0.006780f, -0.016322f, -0.003512f, 0.000732f, -0.019626f, 0.001354f, 0.022556f, 0.009029f, 0.012312f, 0.017950f, 0.029787f, 0.001933f, 0.026089f, 0.004301f, -0.011552f, -0.002631f, -0.016868f, -0.009479f, 0.005622f, 0.007880f, 0.005823f, 0.012202f, -0.020412f, -0.010072f, 0.032852f, -0.004080f, -0.008980f, -0.020843f, 0.014412f, 0.012865f, 0.002962f, 0.004070f, -0.002798f, 0.007074f, -0.017976f, 0.021688f, -0.016205f, -0.018048f, -0.017094f, -0.012849f, 0.025263f, 0.000455f, -0.009608f, 0.035913f, 0.042312f, -0.011189f, 0.011721f, -0.003410f, -0.012668f, 0.002142f, -0.028720f, -0.017954f, -0.001441f, -0.006093f, 0.056923f, -0.026060f, 0.007161f, -0.036661f, -0.005458f, 0.021737f, -0.009414f, -0.020613f, -0.021274f, -0.008186f, 0.008666f, 0.010824f, -0.001467f, -0.002291f, -0.023838f, 0.005122f, 0.016665f, 0.007904f, 0.010239f, 0.002514f, 0.003771f, -0.014458f, -0.004483f, 0.008742f, 0.003515f, -0.000628f, - 0.001176f, -0.017401f, 0.007623f, -0.018308f, -0.002680f, -0.001156f, 0.005347f, -0.020319f, -0.001771f, 0.008846f, 0.014346f, -0.023126f, -0.011391f, 0.038802f, -0.014873f, -0.032147f, 0.026672f, -0.026377f, -0.007565f, -0.012261f, -0.004063f, -0.020606f, -0.012982f, -0.005272f, -0.019045f, -0.029350f, 0.045962f, 0.023569f, 0.020953f, 0.012226f, -0.016708f, -0.008689f, -0.010861f, 0.010556f, -0.020134f, 0.012355f, -0.009915f, 0.002581f, -0.003535f, 0.058082f, -0.028532f, 0.024258f, -0.055193f, 0.012949f, -0.035706f, -0.008141f, 0.017248f, -0.003471f, 0.010448f, 0.018067f, 0.014144f, -0.025124f, 0.015698f, 0.001778f, 0.011165f, -0.006836f, 0.016153f, 0.014710f, -0.005335f, 0.001629f, 0.009041f, 0.010245f, -0.018859f, -0.007764f, -0.026728f, -0.004981f, 0.020394f, -0.001301f, -0.012176f, 0.000366f, 0.006484f, -0.000380f, -0.010796f, -0.019796f, 0.002861f, -0.014032f, 0.009865f, -0.013383f, 0.040876f, -0.005990f, -0.024826f, -0.028132f, 0.004205f, -0.016377f, 0.011714f, -0.031347f, -0.024611f, -0.031835f, 0.005155f, -0.027233f, -0.007691f, -0.038190f, 0.024069f, 0.003136f, 0.015624f, 0.008525f, - -0.040636f, 0.000791f, -0.005241f, -0.016777f, -0.023537f, -0.008162f, -0.020361f, -0.025557f, -0.014805f, 0.008648f, 0.013354f, 0.020290f, -0.015121f, 0.001191f, 0.007184f, -0.034270f, 0.011875f, -0.023097f, -0.049211f, -0.013801f, 0.056683f, 0.050117f, 0.028581f, -0.023418f, 0.025323f, 0.037554f, -0.023687f, 0.033194f, -0.025519f, 0.030643f, 0.008037f, -0.001638f, 0.010911f, -0.000306f, 0.016897f, -0.023573f, -0.005748f, -0.010518f, 0.013193f, -0.022429f, -0.019210f, 0.031983f, -0.001898f, -0.006530f, 0.004223f, -0.030709f, 0.000580f, 0.049480f, 0.028297f, 0.005569f, 0.000895f, 0.010427f, 0.048236f, 0.019804f, 0.002190f, 0.007649f, -0.011421f, -0.005869f, -0.009554f, 0.019736f, -0.008765f, 0.012982f, 0.004271f, 0.023495f, -0.026655f, -0.001212f, 0.000185f, 0.000031f, -0.006035f, 0.012612f, 0.023672f, -0.005983f, -0.003930f, 0.020771f, 0.004842f, 0.001577f, 0.051845f, 0.006514f, 0.003353f, -0.023996f, 0.012887f, -0.018349f, 0.026035f, -0.028114f, -0.019870f, 0.001735f, -0.019026f, -0.026677f, -0.032889f, 0.007913f, -0.006630f, 0.017142f, 0.001812f, 0.008636f, -0.040089f, 0.040178f, - -0.065395f, 0.025427f, 0.026610f, -0.046938f, -0.006008f, -0.040442f, -0.014218f, -0.036473f, -0.017170f, 0.038542f, -0.015034f, -0.004441f, -0.029469f, -0.006992f, 0.005161f, -0.043278f, -0.002920f, 0.025088f, -0.052809f, 0.000302f, -0.036454f, -0.020605f, -0.000556f, 0.002161f, -0.024553f, -0.020373f, -0.020767f, -0.007309f, -0.018020f, -0.002787f, 0.007715f, -0.006798f, 0.011853f, -0.026895f, -0.017240f, 0.031792f, -0.016919f, 0.016367f, -0.021187f, 0.017068f, 0.016113f, 0.001069f, 0.003420f, 0.015699f, -0.000367f, 0.023149f, 0.030576f, -0.008002f, 0.003494f, 0.045160f, 0.001581f, 0.022150f, -0.002945f, -0.020971f, -0.038491f, 0.004003f, 0.024564f, -0.043413f, -0.000792f, -0.026589f, -0.014080f, -0.055822f, 0.021556f, 0.032448f, -0.010753f, 0.014046f, -0.010335f, 0.035089f, 0.040391f, -0.006873f, -0.044126f, -0.044646f, 0.055298f, -0.049793f, 0.013158f, 0.002109f, 0.012103f, 0.069838f, 0.078729f, -0.004325f, -0.058642f, 0.058618f, -0.064119f, 0.009339f, 0.027888f, 0.006992f, -0.006381f, -0.029629f, 0.034122f, -0.014885f, -0.011423f, -0.030242f, -0.017014f, -0.009392f, -0.037207f, -0.020807f, - -0.016222f, -0.009474f, -0.005478f, 0.026270f, 0.000400f, 0.022666f, 0.000994f, -0.009937f, -0.032316f, -0.036497f, -0.008274f, -0.001513f, 0.000462f, -0.005746f, -0.012595f, -0.015973f, 0.018434f, 0.041556f, -0.021659f, 0.014063f, -0.013062f, -0.015045f, 0.017828f, -0.016674f, -0.025021f, 0.058270f, -0.005180f, 0.004840f, 0.004260f, -0.033467f, -0.005779f, -0.007580f, 0.018166f, -0.043190f, -0.017195f, 0.044039f, 0.008898f, -0.020011f, 0.026166f, 0.044584f, -0.024068f, -0.033270f, 0.018683f, -0.028512f, 0.002562f, -0.052410f, 0.018718f, 0.041699f, -0.002014f, 0.020703f, 0.015793f, 0.005317f, 0.052482f, 0.012783f, 0.002633f, 0.024715f, 0.001146f, -0.096543f, -0.068017f, 0.026649f, -0.029555f, -0.027853f, -0.082365f, -0.024579f, 0.016005f, 0.005539f, -0.017276f, -0.046240f, -0.001901f, 0.021731f, -0.003009f, 0.001991f, 0.022331f, 0.040960f, -0.037855f, 0.094669f, -0.026038f, -0.032867f, -0.011092f, -0.006438f, -0.001001f, -0.038941f, -0.000594f, -0.007700f, 0.018743f, -0.013812f, 0.027118f, -0.012853f, -0.025904f, 0.009006f, 0.010232f, -0.022728f, 0.022144f, -0.073891f, -0.001063f, -0.006775f, - 0.027427f, 0.034274f, -0.027226f, 0.031917f, -0.014379f, 0.008499f, -0.017526f, -0.006133f, -0.011546f, 0.025411f, -0.005480f, 0.033745f, 0.051976f, -0.047830f, -0.015277f, 0.024557f, -0.033915f, 0.018393f, -0.038344f, -0.020627f, -0.020417f, -0.021839f, -0.039410f, -0.019601f, 0.014228f, 0.013202f, 0.025015f, 0.035740f, 0.023051f, -0.045232f, 0.001534f, 0.007014f, 0.005816f, 0.007159f, 0.022371f, -0.017481f, 0.011054f, -0.022100f, -0.067155f, 0.046690f, -0.085317f, 0.056073f, -0.010568f, -0.039530f, -0.033889f, -0.037789f, -0.026127f, -0.021076f, -0.000347f, 0.040381f, -0.005581f, -0.038364f, 0.036041f, 0.051545f, -0.085010f, -0.024676f, 0.003731f, -0.009420f, -0.014973f, -0.006743f, -0.013523f, -0.017363f, -0.026107f, 0.028114f, -0.012770f, -0.025715f, -0.041423f, -0.041949f, 0.036704f, 0.007302f, -0.008998f, -0.007075f, -0.001871f, -0.011492f, -0.012412f, 0.005637f, -0.036585f, 0.015994f, 0.037658f, 0.026532f, 0.016567f, 0.034717f, 0.042083f, -0.028289f, 0.007564f, -0.039424f, 0.037503f, -0.025630f, -0.008208f, -0.003429f, -0.059006f, 0.015335f, 0.045478f, 0.004721f, -0.021043f, -0.019122f, - 0.060059f, -0.028236f, -0.028178f, 0.013860f, -0.064372f, -0.010821f, -0.032560f, -0.002116f, -0.062695f, 0.022291f, 0.009769f, 0.021941f, -0.100236f, -0.088405f, 0.014532f, -0.031333f, -0.017136f, 0.009749f, 0.077583f, -0.098184f, 0.108112f, 0.034745f, 0.000470f, 0.012800f, -0.071202f, 0.019782f, 0.039237f, -0.008912f, 0.092580f, -0.020909f, 0.042242f, -0.026806f, 0.101552f, 0.000964f, -0.009314f, -0.032811f, -0.009839f, 0.018870f, -0.006033f, 0.044294f, 0.034565f, -0.005645f, 0.006440f, -0.033613f, 0.018450f, 0.044118f, 0.043528f, -0.038334f, 0.021916f, -0.003535f, 0.046233f, -0.006397f, 0.031398f, -0.020442f, -0.016283f, -0.052457f, 0.007731f, -0.031211f, -0.050193f, 0.082182f, -0.030142f, -0.001191f, -0.010705f, -0.012719f, 0.014344f, 0.012167f, 0.031151f, -0.006870f, 0.045774f, 0.010005f, 0.079824f, 0.035289f, 0.088028f, 0.077550f, -0.002649f, 0.054153f, 0.040961f, -0.005749f, 0.047594f, 0.065127f, -0.019853f, -0.050826f, 0.038529f, 0.028920f, 0.053476f, 0.032180f, 0.001950f, 0.007538f, -0.054421f, 0.002648f, -0.008848f, -0.013299f, 0.096125f, 0.003866f, 0.034463f, 0.033463f, - -0.069782f, 0.138885f, -0.016892f, -0.013653f, -0.007000f, 0.101438f, -0.059534f, 0.051645f, -0.065323f, 0.065146f, 0.014713f, -0.010898f, 0.003494f, 0.038739f, -0.014113f, 0.036192f, -0.014217f, 0.001117f, 0.072092f, 0.022910f, -0.015981f, 0.001096f, 0.019519f, 0.015098f, -0.065999f, 0.019448f, -0.022716f, -0.004915f, -0.033760f, 0.035901f, 0.035085f, 0.006331f, 0.017780f, 0.059723f, -0.017251f, -0.092081f, 0.024499f, 0.062146f, -0.021424f, -0.060215f, 0.018546f, 0.044764f, 0.017082f, 0.001055f, -0.071110f, -0.034223f, -0.041146f, 0.041782f, 0.018899f, 0.043007f, -0.086037f, 0.006621f, -0.013940f, -0.096711f, -0.022956f, 0.015356f, 0.046599f, 0.062545f, -0.030411f, 0.115992f, 0.024659f, 0.003145f, -0.021474f, -0.045118f, -0.029967f, 0.023093f, -0.051286f, 0.110012f, -0.032934f, 0.006478f, 0.065542f, -0.039627f, 0.040086f, -0.037557f, -0.023218f, 0.095934f, -0.032566f, -0.080489f, 0.046272f, 0.029620f, 0.046317f, -0.018266f, -0.012796f, 0.018738f, 0.000456f, 0.005359f, 0.002081f, 0.009120f, 0.002569f, -0.012712f, 0.060018f, -0.013964f, -0.040620f, 0.017281f, -0.000578f, -0.036309f, - 0.013137f, 0.008194f, 0.025172f, -0.016895f, -0.026757f, 0.029193f, -0.023010f, -0.003514f, -0.006350f, 0.023844f, -0.040931f, 0.013868f, -0.025067f, 0.020726f, -0.035879f, 0.012614f, -0.011433f, 0.005846f, 0.081395f, -0.055855f, 0.011466f, 0.017155f, -0.048851f, 0.017507f, 0.024075f, -0.037592f, -0.006561f, -0.014825f, 0.068128f, 0.004931f, -0.076143f, 0.045606f, -0.061240f, 0.010606f, 0.033804f, -0.030838f, 0.038544f, -0.045670f, -0.035393f, 0.050043f, -0.006977f, 0.020766f, -0.074479f, 0.013422f, 0.018408f, -0.004892f, -0.009690f, -0.001426f, 0.033222f, 0.000489f, -0.098905f, 0.060996f, -0.003486f, 0.023654f, -0.023036f, -0.029556f, 0.102458f, 0.005234f, 0.034075f, -0.017315f, -0.203540f, -0.428395f, -0.173420f, -0.323505f, -0.393224f, 0.133832f, -0.005698f, 0.137415f, 0.533525f, 0.465626f, 0.263012f, 0.510669f, 0.282811f, 0.028610f, 0.173729f, 0.105666f, -0.198664f, -0.141220f, -0.044525f, -0.219301f, -0.264839f, -0.090322f, -0.136009f, -0.209874f, -0.055746f, -0.012642f, -0.266690f, -0.184279f, -0.031140f, -0.162765f, -0.210452f, -0.063088f, -0.104980f, -0.227485f, -0.046485f, 0.020542f, - -0.129249f, -0.098254f, 0.092180f, -0.035988f, -0.137931f, 0.026980f, 0.087146f, -0.067722f, 0.052840f, 0.196445f, -0.030594f, -0.052472f, 0.193727f, 0.104804f, -0.049299f, 0.325286f, 0.440098f, 0.276439f, 0.464917f, 0.697823f, 0.535909f, 0.513360f, 0.745839f, 0.650861f, 0.478885f, 0.590955f, 0.535874f, 0.349197f, 0.308019f, 0.177718f, -0.040048f, -0.207534f, -0.392995f, -0.554872f, -0.668770f, -0.827554f, -0.887498f, -0.903782f, -1.015445f, -0.782287f, -0.328791f, -0.239100f}, - {0.015411f, -0.004835f, 0.003598f, 0.002703f, -0.005164f, 0.006210f, 0.004807f, -0.001574f, 0.008486f, -0.000062f, 0.003607f, -0.012048f, 0.004522f, 0.004561f, -0.006273f, 0.012698f, 0.001577f, 0.006213f, -0.000874f, -0.001550f, 0.000757f, 0.008771f, 0.009662f, -0.009656f, -0.003025f, -0.004316f, 0.006311f, -0.003000f, -0.002298f, 0.001390f, -0.005192f, -0.008012f, 0.004325f, -0.007579f, 0.004329f, 0.004266f, 0.004248f, -0.000168f, 0.002384f, -0.000085f, 0.006220f, -0.002180f, 0.000959f, -0.006256f, -0.001556f, -0.011929f, -0.005601f, 0.001504f, 0.004265f, -0.000517f, 0.005970f, -0.000565f, 0.003038f, -0.007430f, 0.002075f, 0.003668f, 0.004347f, 0.001095f, -0.003381f, 0.000296f, -0.001629f, 0.002803f, 0.003272f, 0.001405f, -0.000289f, -0.002635f, -0.001525f, 0.006098f, -0.001585f, 0.002727f, 0.005248f, 0.003306f, -0.002841f, 0.006124f, 0.000130f, 0.001911f, -0.001890f, -0.013352f, 0.000381f, 0.010588f, 0.007286f, 0.007307f, 0.004615f, 0.002884f, -0.004168f, 0.000127f, -0.004740f, 0.011309f, 0.006969f, 0.002682f, 0.001674f, 0.001592f, -0.000103f, -0.003641f, 0.005617f, 0.007751f, - 0.007556f, 0.004537f, -0.005655f, -0.008306f, -0.008955f, -0.008633f, -0.000825f, 0.004401f, -0.008735f, 0.007285f, -0.001681f, 0.012787f, -0.002042f, 0.008092f, 0.000222f, -0.010754f, 0.003179f, -0.001459f, 0.008769f, 0.000508f, -0.000858f, -0.004444f, -0.007142f, 0.000567f, 0.004308f, -0.009462f, -0.012612f, 0.008855f, -0.007203f, -0.006931f, -0.006217f, 0.004951f, -0.004831f, 0.002056f, -0.001991f, -0.000718f, -0.007230f, -0.002360f, -0.004786f, -0.007576f, 0.002856f, 0.005758f, -0.001734f, -0.008303f, -0.001131f, -0.001716f, -0.003599f, -0.007139f, 0.000068f, -0.005769f, -0.006118f, -0.001142f, 0.001316f, 0.001808f, -0.001296f, 0.001423f, 0.000008f, 0.025178f, -0.008730f, -0.005689f, -0.007782f, -0.005314f, 0.000627f, -0.016743f, 0.002875f, -0.008267f, -0.016425f, -0.003437f, 0.014136f, -0.010060f, 0.002776f, -0.001107f, 0.004755f, 0.007224f, 0.007642f, 0.012426f, -0.002625f, -0.006951f, 0.003153f, 0.003093f, -0.005654f, -0.000693f, -0.003822f, -0.002357f, 0.001514f, -0.006328f, -0.004049f, -0.000792f, -0.008153f, -0.009401f, 0.004872f, 0.007557f, -0.004400f, -0.010808f, -0.001947f, -0.002388f, - 0.001530f, 0.009074f, 0.000558f, -0.003466f, -0.000625f, 0.012105f, 0.001442f, -0.007034f, -0.007055f, 0.003328f, 0.002200f, 0.009751f, 0.005329f, -0.000338f, -0.009119f, 0.000808f, -0.000605f, 0.008104f, -0.008416f, -0.002459f, 0.004486f, 0.009408f, -0.002655f, 0.001188f, -0.006972f, -0.003440f, 0.004062f, 0.000694f, 0.000725f, 0.002914f, -0.002854f, 0.003773f, 0.000748f, 0.004521f, 0.002194f, 0.002032f, 0.015335f, 0.004952f, -0.018520f, -0.004415f, -0.008779f, 0.008360f, 0.002065f, 0.000119f, 0.005936f, -0.003653f, -0.014323f, -0.007608f, 0.009410f, -0.000611f, 0.009699f, -0.000822f, -0.005583f, 0.010717f, 0.004008f, 0.023608f, -0.004518f, 0.010186f, 0.001450f, -0.011286f, 0.002762f, -0.009609f, 0.006095f, 0.002051f, 0.002368f, -0.010273f, 0.005025f, -0.001905f, -0.003634f, 0.004016f, 0.016093f, 0.005848f, -0.000143f, -0.013117f, 0.011182f, -0.002540f, -0.000003f, 0.007765f, -0.011840f, -0.002398f, 0.008068f, -0.005028f, -0.004268f, -0.013523f, -0.014595f, -0.001344f, 0.008723f, 0.004924f, -0.005910f, -0.000439f, 0.005639f, 0.006879f, 0.002756f, -0.001805f, -0.002918f, -0.013107f, - 0.005857f, 0.015456f, 0.007050f, -0.005022f, -0.002429f, 0.004512f, 0.007333f, -0.001177f, -0.002650f, 0.001208f, -0.010855f, -0.002760f, -0.007832f, -0.004453f, -0.001350f, -0.005867f, 0.011054f, 0.008503f, -0.004962f, -0.014224f, 0.015127f, -0.013706f, 0.013782f, -0.000490f, -0.011638f, -0.026954f, -0.010835f, -0.007989f, 0.003626f, 0.013591f, 0.010556f, -0.003708f, -0.002495f, -0.003590f, -0.007986f, -0.002543f, -0.008929f, 0.002598f, 0.002803f, 0.004944f, 0.008417f, 0.004863f, 0.016424f, -0.000280f, 0.003041f, -0.006237f, -0.001727f, -0.004326f, 0.005821f, 0.001545f, -0.008143f, -0.011600f, 0.000127f, -0.008411f, 0.000683f, 0.007368f, -0.013101f, 0.008705f, -0.021815f, -0.006200f, -0.016263f, 0.002453f, -0.001299f, 0.000008f, -0.006560f, -0.008677f, 0.002673f, 0.007377f, 0.005159f, 0.001787f, -0.013104f, 0.003695f, -0.009134f, -0.003568f, -0.002817f, -0.017640f, -0.007082f, 0.005065f, 0.006498f, -0.000744f, -0.012267f, 0.001949f, 0.004340f, -0.002424f, -0.002599f, 0.001371f, 0.010283f, 0.003714f, -0.002514f, -0.003382f, 0.001709f, -0.024893f, 0.001683f, 0.006253f, 0.005809f, 0.016687f, - 0.017864f, -0.004444f, 0.000346f, 0.011793f, -0.005949f, -0.005602f, 0.017654f, -0.013324f, -0.031499f, -0.020724f, -0.012093f, 0.019018f, 0.008228f, 0.002639f, -0.018164f, 0.019382f, -0.008200f, 0.005419f, -0.004847f, 0.007586f, 0.009513f, -0.000810f, 0.000429f, -0.000227f, -0.002952f, -0.010092f, -0.007876f, -0.002545f, 0.001272f, 0.008704f, 0.005216f, 0.013635f, 0.006803f, -0.006130f, -0.002956f, 0.012091f, -0.008557f, 0.014852f, -0.011748f, 0.003046f, 0.006867f, 0.004054f, -0.009460f, 0.013012f, -0.001000f, 0.013975f, 0.019045f, 0.002601f, -0.007180f, -0.007560f, 0.008241f, -0.009343f, -0.018721f, -0.005271f, 0.004333f, -0.012619f, 0.007317f, 0.005223f, -0.003711f, -0.008083f, -0.002888f, -0.003442f, 0.004028f, -0.002066f, -0.010356f, -0.004755f, 0.018896f, 0.014127f, 0.008398f, -0.022946f, -0.021279f, -0.012884f, 0.021216f, 0.009262f, -0.001136f, 0.001193f, -0.009185f, 0.002344f, 0.008189f, 0.012395f, -0.001457f, 0.004320f, -0.021388f, -0.007723f, 0.002663f, 0.006318f, -0.026342f, -0.003594f, 0.010322f, -0.008482f, -0.017379f, 0.009624f, -0.020094f, -0.014998f, -0.008386f, 0.000922f, - -0.007733f, -0.005566f, -0.001317f, 0.013631f, -0.012928f, 0.002410f, -0.004560f, -0.005885f, -0.010979f, -0.003645f, -0.015712f, -0.005287f, -0.001105f, 0.002064f, -0.011173f, -0.003035f, -0.007283f, 0.000136f, -0.004024f, -0.005494f, 0.002134f, 0.011028f, 0.002395f, -0.007020f, 0.005285f, -0.009903f, -0.002850f, 0.002615f, -0.004036f, 0.005044f, -0.002505f, -0.001544f, -0.042306f, 0.001881f, -0.015016f, 0.006159f, 0.005508f, 0.008297f, -0.023486f, -0.024389f, 0.002675f, -0.000161f, 0.005012f, -0.000866f, 0.012060f, -0.006139f, 0.006395f, 0.007264f, -0.004359f, 0.018364f, -0.006431f, -0.014182f, -0.002944f, -0.012242f, -0.000497f, -0.023063f, 0.000242f, 0.007114f, 0.016392f, -0.032395f, 0.008977f, 0.001573f, 0.009318f, 0.013282f, 0.002668f, -0.012509f, -0.027460f, 0.002092f, -0.010896f, 0.021181f, -0.008237f, 0.004417f, 0.001906f, 0.004546f, 0.016307f, -0.007015f, -0.000073f, -0.007397f, -0.003725f, 0.004116f, -0.003559f, 0.014862f, 0.011599f, 0.003092f, -0.002669f, 0.000077f, 0.010516f, -0.001189f, 0.005368f, -0.000424f, -0.007676f, 0.007056f, -0.001532f, -0.006436f, 0.009437f, 0.014650f, - 0.000673f, 0.005502f, 0.001702f, -0.010311f, -0.005510f, 0.017723f, -0.008069f, 0.008201f, 0.013954f, -0.018087f, 0.013271f, 0.006097f, 0.007134f, -0.008453f, 0.013643f, 0.002964f, -0.001386f, 0.015608f, 0.001469f, -0.001103f, -0.006803f, -0.005386f, 0.000915f, -0.008306f, -0.016607f, -0.005882f, 0.018931f, 0.012105f, 0.015789f, -0.003276f, -0.014493f, 0.004573f, 0.019939f, -0.005750f, -0.012145f, -0.003433f, -0.008130f, -0.006079f, 0.000003f, -0.015200f, -0.004280f, -0.024685f, -0.007003f, -0.014214f, -0.016768f, -0.015933f, -0.005425f, 0.022013f, 0.024005f, 0.032873f, 0.007618f, -0.012236f, -0.007340f, 0.027227f, 0.000228f, -0.006106f, 0.021034f, -0.001986f, 0.001241f, -0.032173f, 0.014968f, 0.008291f, -0.021237f, 0.030047f, -0.003820f, 0.013561f, -0.003282f, 0.007135f, 0.013645f, 0.000123f, 0.023854f, 0.009089f, 0.007021f, -0.002663f, -0.007983f, 0.002296f, 0.014589f, -0.003798f, 0.004577f, 0.006671f, 0.019203f, -0.000904f, -0.005369f, 0.012113f, -0.013949f, -0.009042f, 0.006784f, 0.020721f, -0.008913f, -0.011280f, -0.003220f, 0.017001f, 0.000444f, 0.002241f, -0.006140f, -0.003150f, - 0.006401f, 0.008791f, 0.001020f, -0.007700f, -0.023540f, 0.002470f, 0.007133f, 0.022193f, 0.006655f, -0.002271f, 0.017373f, 0.030491f, -0.006446f, 0.010288f, 0.007137f, 0.012208f, -0.002862f, -0.011583f, 0.005583f, -0.027563f, 0.040277f, -0.019271f, 0.009710f, -0.000803f, -0.012904f, 0.030808f, 0.007863f, 0.004377f, -0.031098f, 0.008895f, -0.011915f, -0.013903f, 0.004362f, -0.013568f, 0.016970f, 0.010343f, -0.001848f, 0.003803f, -0.006924f, -0.002968f, -0.010675f, -0.006901f, -0.012979f, -0.020948f, -0.004332f, -0.014507f, -0.003047f, 0.008698f, -0.005058f, -0.007584f, 0.018063f, 0.011192f, 0.018158f, -0.013510f, -0.000465f, -0.002329f, -0.014231f, 0.000628f, -0.006989f, -0.037820f, 0.004582f, 0.001156f, -0.004649f, 0.013745f, -0.000070f, 0.015112f, 0.013785f, 0.005035f, 0.024458f, 0.020947f, -0.018764f, -0.005099f, 0.001707f, -0.000298f, 0.008808f, 0.003209f, 0.021261f, -0.003725f, 0.033036f, 0.000425f, -0.016615f, -0.014493f, 0.004319f, 0.006146f, 0.008418f, 0.023268f, 0.008090f, 0.006262f, 0.023585f, 0.029099f, 0.003441f, -0.016727f, -0.014286f, -0.000628f, -0.003620f, -0.002536f, - 0.030188f, 0.024598f, 0.002691f, 0.016850f, -0.016628f, 0.008676f, 0.002295f, -0.000463f, 0.011471f, 0.025933f, -0.006006f, -0.001455f, 0.024044f, -0.029742f, -0.016087f, -0.012530f, -0.034045f, 0.007694f, -0.010119f, -0.004118f, 0.005210f, -0.023081f, 0.027212f, 0.020563f, 0.028866f, 0.013296f, -0.016236f, 0.002457f, 0.002219f, 0.021635f, -0.002708f, 0.000159f, 0.000364f, -0.012084f, 0.002250f, -0.006751f, 0.012888f, -0.012848f, -0.003887f, -0.003748f, -0.004578f, -0.015161f, 0.008958f, -0.022631f, -0.002128f, -0.000717f, 0.016329f, 0.009730f, 0.003585f, 0.001264f, -0.002424f, 0.002777f, 0.002025f, 0.013386f, 0.004756f, 0.004732f, 0.000081f, -0.035615f, -0.014946f, 0.005621f, 0.017656f, 0.019784f, -0.026290f, 0.020943f, 0.008589f, -0.009560f, 0.005962f, 0.008330f, -0.003239f, 0.030423f, 0.004435f, 0.008349f, -0.001616f, -0.035133f, -0.007130f, -0.012293f, 0.003904f, 0.035115f, 0.004739f, 0.013576f, -0.022780f, -0.020748f, 0.010329f, 0.017712f, 0.001199f, -0.007689f, 0.033694f, 0.009854f, -0.000846f, -0.010671f, 0.006575f, -0.003759f, -0.004805f, -0.002367f, -0.006923f, 0.000538f, - -0.012490f, -0.028596f, 0.008128f, 0.001739f, 0.007461f, 0.001639f, 0.014378f, 0.003559f, -0.017360f, -0.034593f, -0.000011f, 0.001403f, -0.003560f, -0.030416f, -0.015155f, -0.005518f, 0.007377f, -0.007509f, 0.002471f, -0.026747f, 0.000458f, -0.006838f, -0.000602f, 0.001462f, 0.006376f, -0.003871f, -0.024836f, -0.023291f, -0.014507f, 0.008225f, 0.006245f, -0.007000f, -0.005613f, -0.039755f, -0.022447f, -0.001841f, -0.038227f, 0.033681f, -0.036060f, -0.010795f, -0.023437f, 0.036263f, 0.011647f, -0.027160f, 0.012998f, -0.003904f, 0.014004f, -0.023117f, -0.007329f, 0.000345f, 0.015405f, -0.021641f, -0.007999f, -0.007288f, -0.020824f, 0.002140f, 0.015221f, 0.000117f, -0.003944f, 0.029952f, 0.067723f, -0.011217f, -0.023648f, -0.022178f, -0.019922f, -0.027580f, 0.002267f, -0.045661f, -0.002408f, -0.035685f, -0.017736f, 0.008702f, 0.019198f, 0.010477f, -0.017389f, -0.003809f, 0.018090f, -0.003085f, 0.021175f, -0.015607f, -0.016303f, -0.014069f, 0.008745f, -0.009822f, -0.012993f, 0.002116f, -0.015159f, -0.014647f, 0.013432f, 0.035818f, 0.011654f, 0.014415f, 0.004568f, -0.023613f, -0.007801f, -0.019449f, - -0.019539f, -0.004245f, -0.005764f, -0.015605f, -0.025270f, -0.046745f, -0.007071f, -0.017956f, 0.002929f, -0.009897f, 0.013919f, 0.014148f, 0.005805f, 0.014872f, 0.008352f, -0.003311f, 0.028329f, 0.043569f, 0.007348f, -0.054508f, 0.007172f, -0.011134f, -0.034731f, 0.002605f, 0.011186f, 0.005741f, -0.002833f, 0.012660f, -0.005330f, -0.027200f, -0.003271f, 0.009764f, -0.030533f, -0.015716f, -0.029605f, -0.046740f, 0.027514f, 0.001151f, -0.001596f, 0.050077f, -0.039199f, 0.043079f, -0.004875f, -0.006658f, -0.023714f, -0.009717f, -0.023537f, -0.020484f, 0.022636f, -0.022542f, 0.011214f, 0.051710f, 0.018773f, -0.009436f, -0.025005f, -0.021763f, 0.022773f, -0.021060f, -0.033785f, -0.015241f, 0.002446f, 0.001364f, -0.038400f, 0.000824f, -0.012263f, 0.017653f, -0.012717f, -0.002526f, 0.003489f, 0.053894f, -0.014376f, -0.020010f, 0.026305f, -0.023832f, 0.031775f, -0.021391f, 0.023048f, 0.001573f, -0.018071f, -0.018328f, 0.029479f, -0.041815f, 0.028982f, -0.019684f, 0.002209f, -0.012337f, 0.015424f, -0.016673f, -0.007805f, -0.003859f, -0.012983f, 0.053524f, -0.017379f, 0.035157f, 0.014079f, 0.013794f, - -0.001382f, 0.010346f, 0.023778f, 0.023218f, -0.009021f, -0.032390f, -0.001368f, 0.017311f, 0.007557f, -0.010650f, -0.036251f, 0.038185f, -0.012173f, -0.039028f, -0.011828f, -0.029403f, 0.009245f, 0.004961f, -0.058765f, -0.025410f, 0.035169f, -0.007618f, -0.015163f, 0.040949f, 0.003449f, -0.022128f, 0.015222f, 0.022031f, 0.018650f, 0.002427f, -0.036327f, -0.015367f, 0.004970f, 0.004717f, 0.018227f, 0.011813f, 0.020629f, -0.018877f, -0.014931f, 0.006507f, -0.005445f, 0.016722f, -0.034149f, -0.006296f, -0.036895f, -0.012380f, 0.006138f, -0.005631f, -0.005027f, 0.038358f, 0.007674f, -0.029514f, -0.004822f, 0.001680f, -0.029949f, -0.004652f, 0.001020f, 0.017076f, 0.044396f, -0.016585f, 0.014565f, -0.025712f, 0.003354f, -0.015434f, -0.019358f, 0.017532f, 0.038788f, -0.031825f, 0.002597f, 0.034132f, -0.016176f, -0.004040f, -0.013514f, 0.022007f, 0.005105f, -0.029277f, -0.000762f, -0.010852f, -0.009635f, -0.003809f, -0.014378f, 0.020110f, -0.050642f, 0.009518f, 0.003746f, -0.022311f, 0.027639f, 0.041830f, 0.029939f, 0.080752f, 0.024390f, -0.022552f, -0.029667f, -0.025599f, -0.013619f, 0.036505f, - -0.100088f, -0.008132f, 0.050202f, -0.077039f, -0.007716f, 0.010006f, -0.079563f, 0.029342f, 0.004699f, 0.055919f, -0.010513f, 0.016984f, 0.013218f, -0.070407f, -0.059323f, -0.025622f, -0.009934f, -0.037408f, -0.045375f, -0.025860f, 0.032859f, 0.022010f, 0.017975f, -0.001950f, -0.000639f, 0.007471f, -0.002621f, -0.052440f, -0.023005f, -0.066098f, -0.024815f, 0.029924f, 0.005023f, 0.018695f, 0.072151f, 0.015514f, 0.023826f, -0.005928f, 0.009918f, 0.063464f, 0.045588f, 0.009442f, 0.027777f, 0.025943f, 0.062019f, 0.050866f, -0.080469f, 0.041260f, -0.010645f, 0.039116f, 0.038514f, 0.013337f, 0.074714f, 0.066509f, -0.047156f, 0.029805f, -0.008244f, 0.027859f, -0.067903f, -0.000696f, -0.002249f, -0.004667f, -0.022866f, 0.030485f, 0.030830f, -0.047662f, -0.024626f, -0.032044f, 0.001828f, -0.042667f, -0.055459f, 0.027192f, 0.047691f, 0.010543f, 0.043803f, -0.036338f, -0.029891f, 0.045062f, 0.080695f, -0.010329f, -0.108449f, -0.034339f, 0.011961f, -0.008018f, -0.017234f, -0.023500f, 0.001318f, -0.062038f, -0.036447f, -0.051471f, -0.007283f, -0.014782f, 0.018467f, -0.036689f, -0.009399f, 0.010304f, - 0.018686f, -0.000139f, 0.020725f, 0.038015f, 0.009313f, 0.054704f, -0.033478f, 0.013344f, 0.003898f, 0.052153f, 0.015444f, -0.010011f, -0.050407f, 0.034940f, -0.006959f, 0.047535f, -0.037618f, -0.031484f, -0.027824f, -0.015969f, -0.045745f, -0.006543f, -0.005689f, -0.045320f, 0.027848f, 0.051764f, -0.021966f, 0.007723f, -0.063861f, 0.064585f, -0.016849f, -0.035102f, 0.033252f, 0.025803f, -0.034295f, 0.003364f, -0.019486f, 0.008442f, -0.012687f, 0.080746f, 0.002324f, -0.007011f, -0.014063f, 0.142442f, 0.010151f, -0.019633f, 0.068407f, 0.048564f, -0.043492f, 0.039608f, -0.053798f, -0.036822f, -0.054697f, 0.047664f, -0.030821f, 0.017288f, -0.032541f, -0.148662f, 0.008733f, 0.092581f, -0.058779f, -0.039862f, 0.074070f, -0.056995f, -0.005297f, -0.017525f, 0.071051f, -0.126824f, 0.068159f, 0.039562f, -0.036937f, 0.011133f, 0.066574f, 0.046800f, -0.025550f, 0.025939f, 0.010875f, -0.021000f, 0.030459f, -0.002672f, 0.017833f, 0.027535f, -0.014215f, 0.005117f, -0.004797f, 0.012050f, -0.019685f, -0.016615f, -0.002757f, 0.023272f, -0.075688f, -0.038775f, 0.035257f, -0.010440f, -0.050720f, -0.060160f, - 0.008451f, 0.070038f, -0.032923f, -0.048300f, 0.033890f, 0.051656f, -0.013401f, 0.011325f, -0.011155f, 0.047926f, -0.028900f, 0.072961f, -0.011859f, -0.002126f, 0.039492f, -0.001409f, 0.007722f, -0.055718f, 0.082132f, -0.045705f, -0.054476f, 0.037560f, -0.057666f, -0.020709f, 0.007300f, 0.025469f, 0.075308f, -0.029802f, 0.045908f, -0.012103f, 0.022607f, -0.133599f, -0.103520f, -0.020692f, -0.042502f, 0.017588f, -0.015312f, -0.053727f, -0.027629f, 0.031141f, -0.065692f, 0.054987f, -0.056572f, -0.070158f, 0.032404f, -0.036519f, -0.025792f, 0.032685f, -0.032765f, 0.026403f, -0.026673f, 0.009475f, 0.069155f, -0.071044f, -0.009095f, -0.015386f, 0.057638f, 0.002950f, 0.001562f, -0.064383f, -0.059522f, -0.025240f, -0.020365f, -0.014278f, -0.022009f, 0.005150f, -0.000925f, -0.011907f, 0.005052f, 0.007294f, 0.002284f, 0.004211f, -0.015420f, 0.022739f, -0.022815f, 0.021364f, -0.056352f, -0.004624f, -0.046372f, -0.061632f, -0.036350f, 0.066352f, -0.035401f, -0.039134f, -0.027758f, 0.009665f, -0.018382f, 0.025200f, 0.043651f, -0.057332f, 0.040817f, 0.000143f, -0.072466f, -0.042567f, 0.138514f, 0.065300f, - -0.111380f, -0.029101f, 0.064871f, -0.043963f, -0.042908f, 0.017801f, -0.037578f, -0.084852f, 0.049830f, 0.013212f, -0.105088f, 0.029445f, 0.047046f, -0.073432f, -0.044851f, 0.043345f, -0.024624f, 0.091827f, 0.128941f, -0.048000f, 0.143982f, -0.008517f, -0.036462f, -0.027254f, -0.045715f, -0.001236f, 0.025949f, 0.086405f, 0.004969f, 0.028673f, -0.019190f, -0.069031f, 0.003316f, 0.005738f, 0.049373f, 0.012200f, -0.052650f, 0.104525f, -0.041519f, 0.022261f, 0.047171f, -0.047036f, -0.039385f, -0.068498f, -0.030040f, 0.048108f, 0.056876f, 0.072209f, -0.024513f, -0.163795f, 0.038428f, 0.091430f, 0.113370f, 0.100458f, -0.000402f, -0.043846f, -0.058460f, 0.024534f, 0.058123f, -0.032118f, -0.018504f, -0.143976f, -0.090277f, 0.084479f, 0.134902f, 0.032365f, -0.003202f, -0.027624f, -0.058390f, -0.008615f, 0.037509f, -0.046653f, 0.020498f, -0.001827f, 0.084889f, 0.002166f, 0.032941f, -0.159993f, -0.021455f, 0.008416f, 0.101440f, 0.085780f, -0.002947f, -0.042581f, -0.014830f, 0.129045f, 0.053352f, -0.134038f, -0.178453f, -0.059571f, 0.032782f, 0.284702f, 0.026446f, -0.035117f, 0.035627f, 0.013451f, - -0.023511f, 0.057841f, -0.067765f, 0.001475f, -0.027485f, 0.014895f, -0.042045f, 0.038429f, 0.010511f, -0.022948f, -0.042313f, -0.021445f, -0.008194f, 0.011416f, -0.057552f, 0.012371f, -0.028223f, -0.011850f, -0.045000f, -0.022113f, 0.036413f, -0.039322f, -0.013509f, -0.006307f, 0.017905f, 0.010966f, -0.014773f, 0.019509f, -0.032672f, -0.003783f, 0.000685f, 0.016445f, -0.021199f, 0.029991f, 0.023748f, -0.025083f, -0.027034f, -0.011881f, 0.045010f, -0.033416f, 0.014679f, 0.031555f, 0.008089f, -0.033713f, -0.011514f, 0.012269f, -0.019300f, 0.013352f, 0.002472f, 0.005541f, -0.028616f, 0.004460f, -0.022948f, -0.002918f, 0.023830f, 0.026430f, 0.023586f, -0.018466f, 0.022725f, 0.000518f, -0.024615f, -0.006189f, 0.001945f, 0.029181f, -0.006431f, 0.004119f, 0.029958f, -0.008614f, -0.032925f, 0.047105f, -0.017051f, 0.026608f, 0.025469f, 0.002343f, 0.011644f, -0.021523f, -0.016385f, -0.053199f, 0.102672f, 0.010360f, 0.006617f, -0.039875f, 0.024606f, -0.002270f, 0.027678f, 0.021534f, 0.032195f, 0.004685f, 0.008917f, -0.016288f, 0.005998f, 0.029892f, -0.001889f, 0.016972f, -0.001599f, 0.006334f, - 0.007190f, 0.012981f, -0.011284f, 0.023059f, -0.013936f, 0.003434f, -0.001597f, 0.008818f, -0.001184f, 0.005862f, 0.017182f, 0.019600f, -0.008034f, 0.009545f, 0.004180f, -0.002428f, -0.007131f, 0.025698f, -0.006801f, 0.006777f, -0.006284f, 0.014305f, 0.000445f, -0.009752f, 0.024655f, -0.013211f, -0.004758f, 0.008273f, -0.010971f, -0.004969f, -0.003177f, 0.002971f, -0.004048f, 0.002439f, -0.002067f, -0.004153f, 0.008409f, -0.013394f, 0.009942f, 0.008901f, -0.005269f, 0.012653f, -0.007867f, 0.014660f, -0.006423f, 0.004916f, 0.002144f, -0.004633f, 0.011634f, 0.002930f, 0.001071f, -0.000615f, 0.015306f, -0.015646f, 0.019147f, -0.010208f, 0.000195f, 0.009367f, 0.019110f, -0.093018f, -0.231172f, 0.035597f, 0.175452f, 0.163079f, 0.282991f, -0.072566f, -0.076245f, -0.193157f, -0.263831f, -0.054517f, 0.094834f, 0.101754f, 0.191540f, 0.104126f, 0.007767f, -0.050003f, -0.134519f, -0.095414f, -0.016958f, -0.015024f, 0.047241f, 0.044217f, 0.025074f, 0.016281f, 0.012321f, -0.007117f, -0.033511f, -0.002583f, 0.037454f, 0.000283f, 0.007396f, -0.002165f, -0.029158f, -0.021808f, -0.049168f, -0.047481f, - 0.020897f, 0.019975f, 0.043419f, 0.067164f, 0.049552f, 0.024676f, 0.008174f, -0.072237f, -0.051921f, -0.039434f, -0.040422f, -0.044065f, 0.008504f, 0.028468f, 0.048339f, 0.062971f, 0.051126f, 0.011607f, -0.006877f, -0.041254f, -0.043201f, -0.024854f, -0.013018f, 0.004504f, 0.006305f, 0.014553f, 0.000597f, -0.013016f, 0.004044f, -0.021007f, 0.010881f, 0.019261f, 0.001900f, 0.037985f, 0.044796f, 0.015386f, -0.007376f, -0.046282f, -0.059850f, -0.015115f, -0.000186f, -0.001366f} - }, - { - {0.013420f, -0.000209f, 0.005181f, 0.005615f, 0.001992f, 0.002040f, 0.002951f, 0.004505f, 0.008385f, 0.003966f, -0.000592f, -0.003196f, 0.000563f, -0.004413f, -0.004280f, 0.000795f, -0.000774f, 0.001794f, -0.000829f, -0.001739f, -0.004675f, 0.006127f, 0.001248f, -0.000221f, -0.008309f, 0.000727f, 0.005836f, 0.008334f, -0.005496f, -0.001211f, -0.001522f, 0.004249f, -0.000613f, -0.000284f, 0.001900f, 0.000669f, -0.001158f, 0.003107f, -0.003384f, 0.001505f, -0.008440f, -0.006124f, 0.002785f, 0.003340f, 0.012023f, -0.004514f, -0.004511f, -0.002546f, 0.004971f, -0.003818f, -0.007079f, -0.004891f, -0.008346f, 0.000921f, -0.005535f, 0.005018f, 0.006468f, 0.001583f, 0.002777f, -0.003821f, 0.002505f, -0.000577f, -0.009330f, 0.010984f, 0.007395f, 0.005305f, 0.001905f, -0.003562f, -0.001580f, 0.004679f, -0.002822f, 0.001426f, 0.000530f, 0.000330f, -0.000813f, -0.002734f, -0.007743f, -0.010960f, -0.000232f, 0.002290f, 0.001724f, 0.007665f, 0.000941f, -0.001047f, -0.005079f, 0.011303f, 0.006971f, 0.000269f, -0.001474f, 0.011222f, 0.003779f, -0.003726f, -0.009996f, 0.006230f, -0.002921f, 0.004811f, - -0.009510f, 0.000495f, -0.002313f, -0.007142f, -0.001953f, -0.003655f, -0.001352f, 0.000415f, 0.000006f, -0.005247f, -0.003181f, -0.000942f, -0.001018f, -0.003316f, 0.003385f, -0.000461f, -0.003430f, 0.005937f, -0.010120f, -0.004933f, 0.004814f, -0.006210f, 0.000832f, -0.003913f, -0.005544f, 0.003622f, 0.003435f, -0.003131f, 0.003812f, 0.007151f, 0.004143f, -0.003956f, -0.004401f, 0.000629f, 0.001484f, -0.004647f, 0.004902f, 0.007879f, -0.006805f, -0.002391f, 0.004056f, 0.002765f, -0.001532f, -0.002323f, -0.003230f, 0.004208f, 0.001509f, -0.005584f, 0.006251f, 0.002657f, -0.004728f, -0.004071f, 0.006694f, -0.005227f, -0.005676f, -0.012158f, -0.009275f, 0.004257f, 0.014873f, -0.001041f, -0.002566f, -0.005595f, 0.009663f, -0.004604f, -0.000148f, -0.007212f, -0.007667f, -0.009799f, -0.004371f, 0.008268f, -0.007819f, -0.002754f, -0.002481f, 0.003068f, -0.001627f, -0.010975f, 0.006310f, 0.003132f, 0.022378f, -0.001940f, 0.010714f, -0.001751f, -0.000082f, -0.000701f, 0.001606f, -0.004338f, 0.008981f, -0.001947f, -0.001214f, -0.004848f, -0.000427f, -0.001557f, 0.013694f, 0.002717f, -0.000789f, -0.012071f, - -0.000700f, -0.002108f, 0.004303f, -0.007580f, -0.001571f, 0.002382f, 0.002392f, -0.001913f, -0.000677f, -0.004620f, -0.001161f, -0.005607f, -0.001933f, 0.011615f, -0.002610f, 0.003843f, 0.007119f, -0.001295f, -0.005366f, -0.007870f, 0.002966f, 0.002138f, 0.003362f, 0.005272f, 0.006950f, 0.005147f, 0.003894f, -0.002031f, -0.001047f, -0.002393f, -0.010169f, -0.002529f, 0.000223f, 0.005707f, 0.006283f, -0.002700f, 0.001562f, -0.019505f, -0.004962f, -0.000661f, -0.004377f, -0.003134f, 0.006472f, -0.013797f, -0.011580f, -0.006922f, -0.004675f, 0.001625f, 0.014933f, -0.003598f, -0.000278f, 0.001521f, -0.011126f, -0.003157f, -0.009325f, -0.001719f, 0.015855f, -0.001556f, -0.008045f, -0.005405f, -0.000011f, 0.002963f, 0.003016f, -0.004833f, -0.020570f, -0.010073f, -0.002916f, -0.008186f, 0.000544f, 0.000047f, 0.008081f, -0.005648f, 0.007169f, 0.001467f, -0.003920f, -0.011233f, -0.009274f, 0.012313f, -0.010565f, 0.006622f, 0.001921f, -0.007012f, -0.002604f, -0.006293f, -0.004369f, 0.005638f, -0.011275f, 0.005493f, 0.001931f, -0.000482f, 0.001860f, 0.000490f, -0.001115f, -0.000039f, -0.005655f, -0.008077f, - 0.000616f, -0.002649f, -0.005666f, -0.002590f, -0.008774f, 0.010094f, 0.007253f, 0.001550f, 0.008689f, 0.000782f, -0.003322f, 0.010309f, -0.005186f, -0.003663f, -0.003086f, 0.007851f, -0.007072f, -0.012786f, 0.015983f, 0.018140f, 0.005052f, 0.005008f, -0.005032f, 0.008571f, 0.004310f, -0.010312f, 0.003387f, 0.006981f, -0.012474f, -0.010740f, 0.011106f, -0.009368f, -0.001327f, -0.005939f, 0.011173f, 0.002699f, -0.001223f, -0.003804f, -0.000043f, -0.006903f, 0.006722f, -0.003280f, 0.004074f, -0.001402f, -0.000045f, 0.007580f, 0.002847f, 0.001383f, -0.002806f, 0.007467f, 0.004486f, 0.002509f, -0.000632f, 0.007746f, -0.000604f, 0.001776f, -0.004666f, 0.009389f, 0.001958f, 0.004038f, 0.006481f, -0.017449f, -0.005897f, -0.003020f, -0.006502f, -0.005706f, 0.001737f, 0.010580f, -0.004416f, -0.002078f, -0.005585f, -0.001831f, 0.002053f, 0.005059f, -0.012470f, -0.000055f, 0.004188f, 0.001228f, -0.001115f, 0.006133f, 0.003352f, -0.010767f, -0.003393f, -0.001656f, 0.007004f, -0.006694f, 0.009952f, 0.011943f, 0.005555f, 0.003338f, -0.005291f, 0.000922f, 0.000697f, 0.019275f, -0.004332f, -0.000919f, - 0.006634f, 0.004074f, 0.002886f, 0.006081f, 0.017044f, -0.005567f, -0.002263f, -0.017672f, -0.000304f, -0.015275f, -0.019216f, 0.000027f, 0.007269f, -0.024623f, 0.007496f, 0.007210f, 0.003653f, -0.007921f, -0.006410f, -0.008583f, -0.003669f, -0.000178f, -0.000152f, 0.006987f, 0.009415f, -0.002023f, -0.010585f, -0.006664f, 0.006789f, -0.011307f, -0.005980f, -0.009659f, 0.001263f, -0.015213f, 0.006569f, 0.000498f, -0.001680f, 0.001685f, -0.001172f, -0.003991f, -0.000699f, 0.008713f, -0.011543f, 0.012441f, -0.010686f, -0.001830f, 0.001671f, -0.007276f, -0.006156f, 0.004450f, 0.001749f, -0.002774f, -0.005857f, 0.009091f, 0.003261f, -0.007514f, -0.014504f, 0.000880f, 0.002286f, 0.007282f, -0.001245f, -0.004257f, -0.000269f, 0.003500f, -0.004269f, 0.018246f, -0.007451f, -0.003866f, -0.014748f, -0.009803f, 0.020086f, 0.007774f, -0.006352f, -0.002531f, -0.002167f, 0.004762f, 0.012122f, -0.017853f, -0.010801f, 0.011234f, -0.009646f, -0.010307f, -0.011152f, -0.013303f, 0.008366f, -0.003941f, -0.001009f, -0.003667f, -0.000150f, -0.014744f, -0.003393f, 0.005584f, 0.006388f, 0.000777f, -0.007945f, -0.011527f, - -0.009448f, -0.012126f, 0.001746f, 0.012643f, 0.001288f, 0.003518f, 0.004110f, 0.003646f, -0.008413f, 0.007448f, 0.004698f, -0.006798f, -0.005223f, -0.019166f, 0.002388f, 0.003205f, -0.014771f, -0.002025f, 0.004042f, -0.003588f, 0.001426f, -0.002192f, -0.015737f, 0.012212f, -0.014651f, 0.010392f, 0.000353f, 0.004788f, -0.016384f, -0.009948f, -0.014654f, -0.012316f, 0.001972f, -0.004971f, -0.005230f, -0.007328f, -0.000080f, 0.006315f, -0.013365f, -0.001104f, 0.003983f, -0.005184f, -0.014758f, -0.010184f, -0.002860f, 0.002018f, 0.007620f, 0.002409f, -0.011796f, 0.012481f, -0.003577f, -0.003327f, 0.013860f, -0.017071f, -0.004921f, 0.027334f, -0.022642f, -0.011459f, -0.014806f, 0.012307f, 0.005122f, -0.007005f, 0.006153f, 0.000907f, 0.016522f, 0.002050f, 0.000946f, -0.014068f, 0.011470f, 0.018473f, 0.018947f, 0.016288f, -0.007711f, -0.000105f, 0.003046f, -0.008452f, -0.005930f, 0.003804f, 0.001774f, -0.012642f, -0.006176f, -0.004534f, 0.007457f, 0.000331f, -0.009906f, -0.003414f, 0.004078f, 0.009860f, 0.001637f, -0.001389f, 0.000724f, -0.005818f, 0.000372f, 0.001184f, 0.001711f, -0.014243f, - 0.009877f, 0.012751f, 0.002822f, 0.007503f, 0.007093f, -0.010993f, 0.019031f, 0.018649f, 0.003635f, -0.009402f, 0.007166f, -0.001874f, -0.016506f, -0.002037f, -0.004807f, 0.002170f, 0.001647f, 0.002248f, -0.009705f, -0.006488f, -0.020583f, -0.014784f, 0.000924f, 0.013844f, -0.009004f, 0.007890f, 0.002161f, -0.002888f, -0.016450f, 0.002354f, 0.011056f, -0.002114f, 0.010147f, 0.023231f, 0.006661f, -0.000519f, -0.024362f, 0.003474f, -0.008597f, -0.032893f, -0.025141f, 0.007313f, 0.001030f, -0.004977f, 0.006794f, 0.017062f, -0.001797f, 0.010572f, 0.009389f, 0.005869f, -0.001809f, -0.007901f, 0.007941f, -0.006589f, 0.001678f, -0.005521f, 0.010909f, 0.019455f, -0.015906f, -0.003881f, 0.001809f, 0.007678f, 0.002575f, -0.004243f, -0.002256f, -0.005246f, 0.000297f, -0.006707f, 0.010585f, 0.003159f, -0.010944f, 0.014072f, -0.012294f, -0.003144f, 0.016812f, 0.015180f, 0.012708f, -0.012519f, -0.008125f, -0.011079f, 0.014937f, 0.020282f, 0.000533f, -0.002809f, 0.016018f, -0.021189f, 0.003589f, 0.007217f, -0.001314f, -0.017547f, 0.017776f, 0.007222f, 0.009469f, 0.017217f, 0.001731f, -0.021302f, - 0.006857f, 0.010750f, -0.004891f, -0.000194f, 0.016570f, -0.014649f, -0.014266f, -0.011497f, 0.002549f, 0.021869f, 0.011862f, -0.001117f, 0.024028f, -0.028858f, -0.010454f, 0.002102f, 0.015117f, -0.026599f, 0.027913f, 0.011639f, -0.000149f, -0.002289f, 0.002829f, 0.005197f, 0.015373f, -0.002334f, 0.002172f, -0.004274f, -0.002891f, 0.008841f, 0.004856f, 0.010180f, 0.004822f, 0.006063f, -0.017972f, -0.007236f, 0.031616f, 0.003575f, 0.009782f, 0.013472f, 0.005450f, -0.010126f, -0.018986f, 0.006474f, -0.007603f, 0.001114f, 0.007417f, -0.009359f, -0.010891f, 0.014281f, 0.016893f, -0.008187f, -0.005516f, 0.012981f, -0.015031f, 0.007112f, -0.011451f, 0.005669f, -0.011071f, 0.017083f, 0.002860f, -0.001997f, 0.006428f, 0.029121f, 0.008474f, 0.011382f, -0.002776f, 0.001623f, 0.005406f, 0.021473f, -0.001386f, 0.030690f, 0.001361f, 0.014589f, -0.000091f, 0.027634f, 0.010202f, 0.020579f, 0.016056f, -0.003569f, -0.008847f, -0.002647f, -0.010171f, -0.011878f, 0.016585f, -0.003590f, -0.005925f, 0.002073f, 0.000692f, -0.008910f, -0.003451f, 0.001548f, 0.008148f, -0.000030f, 0.030956f, -0.009141f, - -0.001132f, -0.039939f, -0.002275f, 0.020188f, -0.011871f, 0.017471f, -0.025855f, 0.002926f, 0.001533f, -0.001386f, -0.034038f, -0.002127f, -0.056079f, 0.001987f, -0.007132f, -0.023638f, -0.005114f, 0.002535f, -0.013206f, 0.001570f, 0.012758f, 0.001645f, -0.013794f, 0.001876f, -0.005129f, 0.011774f, -0.014812f, 0.000386f, 0.016354f, 0.003609f, 0.000124f, -0.002968f, 0.012152f, -0.009008f, 0.000001f, -0.000315f, 0.008923f, 0.001786f, -0.020085f, -0.010076f, -0.014658f, 0.015224f, -0.036403f, 0.016752f, 0.012194f, 0.011855f, 0.004933f, 0.002604f, -0.017005f, 0.010919f, -0.024395f, -0.005218f, -0.006648f, -0.004489f, -0.002980f, 0.001692f, 0.005181f, -0.017008f, -0.008970f, 0.029703f, 0.010010f, -0.010134f, -0.014775f, 0.003845f, -0.007649f, 0.009732f, -0.008588f, -0.000804f, -0.012272f, 0.027805f, 0.010537f, -0.007419f, -0.001523f, -0.010916f, -0.000305f, 0.020586f, 0.020777f, 0.012267f, 0.010945f, -0.009452f, 0.012113f, 0.020063f, -0.014211f, -0.000030f, -0.037447f, 0.022147f, 0.015066f, -0.004856f, 0.009026f, -0.001889f, 0.003274f, 0.014031f, -0.008225f, 0.021650f, -0.018795f, 0.002425f, - 0.023917f, 0.011002f, 0.001621f, 0.018941f, -0.006344f, 0.009055f, 0.004938f, 0.010470f, 0.016296f, -0.008909f, -0.001889f, 0.030594f, 0.014976f, 0.000049f, 0.004122f, -0.019544f, 0.027483f, -0.022438f, -0.001533f, 0.024850f, 0.007374f, 0.026712f, -0.016429f, 0.004941f, -0.001236f, -0.005555f, 0.003258f, -0.024254f, -0.017848f, 0.024452f, -0.012079f, -0.004218f, -0.008350f, -0.025796f, 0.018519f, -0.005408f, -0.004880f, -0.010915f, 0.011121f, 0.027999f, -0.021940f, -0.003411f, 0.017605f, -0.019096f, -0.009483f, 0.017309f, 0.021949f, -0.036599f, -0.010949f, -0.002139f, 0.015040f, 0.000613f, 0.017619f, -0.003173f, 0.019230f, 0.041291f, 0.007582f, -0.025090f, -0.009298f, 0.007795f, -0.055267f, 0.001352f, -0.000214f, -0.008924f, -0.003257f, 0.024956f, -0.041906f, 0.008778f, 0.018699f, -0.015479f, 0.016480f, 0.031669f, 0.007258f, -0.029742f, 0.007306f, -0.007642f, -0.001240f, -0.029110f, -0.009465f, 0.026221f, -0.003717f, 0.024056f, -0.007145f, -0.008586f, 0.003155f, -0.020549f, -0.012340f, -0.014785f, -0.011787f, -0.008071f, 0.018854f, -0.021794f, 0.002631f, 0.038152f, 0.024779f, 0.008677f, - -0.039712f, 0.006560f, 0.024403f, 0.010798f, 0.000464f, -0.013610f, -0.017905f, -0.041101f, -0.029694f, 0.006208f, -0.015306f, -0.013781f, -0.002031f, 0.018084f, 0.011247f, -0.011949f, -0.000779f, 0.025696f, -0.011059f, -0.003610f, -0.000305f, 0.033793f, -0.000261f, -0.000800f, 0.015213f, 0.006268f, -0.039287f, 0.011728f, 0.009146f, 0.001213f, -0.032931f, 0.014820f, 0.016602f, -0.011737f, -0.010055f, -0.012003f, 0.043414f, 0.002692f, -0.008417f, -0.000256f, 0.019325f, -0.008838f, 0.005505f, -0.004275f, 0.004736f, 0.016719f, -0.029582f, 0.031862f, 0.035848f, 0.010430f, 0.015265f, -0.011676f, 0.020373f, 0.047358f, 0.001661f, -0.004956f, -0.008534f, 0.020411f, -0.006993f, -0.010928f, -0.003899f, 0.007522f, -0.023346f, 0.010842f, -0.020592f, 0.023998f, 0.005326f, 0.024163f, -0.014953f, 0.022060f, 0.006336f, 0.028736f, 0.004544f, 0.006388f, -0.010322f, 0.018046f, 0.004176f, -0.005179f, 0.025132f, -0.009507f, -0.018469f, 0.036353f, 0.028272f, 0.010969f, 0.026629f, 0.039702f, 0.047128f, -0.014510f, -0.015605f, -0.016538f, 0.005217f, -0.021647f, 0.024989f, -0.002980f, -0.003336f, -0.036505f, - 0.007406f, 0.041724f, 0.041108f, -0.001598f, -0.007013f, -0.029129f, -0.001225f, 0.027480f, -0.016058f, -0.017501f, 0.013339f, 0.002029f, -0.017783f, 0.004708f, -0.005674f, -0.058374f, -0.041344f, 0.018804f, 0.006179f, -0.031559f, 0.001202f, 0.011100f, -0.028819f, -0.018988f, -0.013452f, 0.030141f, 0.012627f, 0.008231f, -0.012004f, -0.009939f, -0.009884f, -0.022143f, -0.028468f, -0.049216f, 0.022823f, 0.018863f, -0.011677f, 0.051008f, 0.023888f, 0.048868f, 0.033404f, 0.001055f, -0.017966f, 0.011298f, 0.004684f, 0.020966f, 0.025114f, 0.027204f, -0.005781f, -0.007488f, 0.011047f, -0.015655f, -0.004583f, -0.014098f, -0.023521f, -0.038613f, -0.012015f, 0.034502f, -0.010570f, -0.017158f, -0.022293f, 0.012234f, 0.020964f, 0.012402f, 0.000112f, 0.019255f, 0.041059f, -0.027799f, -0.012844f, -0.021995f, -0.015406f, -0.043393f, -0.011251f, 0.007772f, -0.019824f, -0.017106f, -0.048255f, -0.069552f, 0.006153f, -0.046688f, -0.070627f, -0.052779f, -0.022299f, 0.042490f, 0.014393f, 0.025053f, 0.019410f, -0.048541f, -0.020766f, 0.002033f, 0.021873f, 0.004530f, -0.109491f, -0.018862f, 0.032401f, -0.038530f, - 0.012848f, -0.016176f, -0.060474f, -0.020047f, 0.060151f, 0.076727f, -0.044013f, -0.000360f, -0.016709f, -0.065902f, -0.053442f, -0.050002f, -0.053923f, -0.029248f, -0.036104f, -0.004459f, 0.008478f, -0.010613f, 0.010553f, 0.010491f, -0.023712f, -0.007355f, -0.031614f, 0.010596f, -0.048287f, -0.042548f, 0.007039f, 0.005591f, -0.015277f, -0.016497f, 0.032795f, -0.011944f, 0.046616f, 0.009579f, 0.042924f, -0.032490f, 0.016891f, 0.011673f, 0.052495f, 0.028477f, 0.016240f, 0.004064f, 0.005057f, -0.007832f, 0.012906f, 0.021750f, -0.021572f, -0.026307f, 0.035340f, -0.006531f, -0.052688f, -0.094990f, -0.116786f, -0.082498f, 0.009512f, -0.001200f, -0.109255f, 0.033117f, 0.013658f, 0.025292f, -0.040210f, 0.003522f, 0.007924f, 0.003646f, 0.049471f, 0.053911f, 0.105530f, 0.035406f, -0.062353f, -0.076295f, -0.047711f, -0.020250f, -0.009923f, 0.059170f, -0.017328f, -0.114839f, -0.033778f, 0.092734f, -0.014265f, 0.019978f, 0.012032f, 0.016626f, 0.031463f, 0.026054f, 0.007988f, -0.019337f, -0.008320f, 0.003940f, -0.021718f, -0.005376f, 0.032935f, -0.031417f, -0.019865f, -0.031436f, -0.008945f, 0.004830f, - 0.002392f, 0.007759f, 0.014504f, -0.023855f, 0.019327f, 0.051013f, -0.002557f, -0.030170f, 0.001089f, -0.019748f, -0.008414f, 0.030351f, -0.033773f, 0.003627f, 0.008473f, 0.037290f, 0.052226f, -0.034121f, -0.021234f, 0.021124f, 0.001213f, 0.006228f, 0.004607f, -0.022307f, -0.059707f, -0.009849f, -0.028628f, 0.053484f, -0.101901f, -0.065231f, -0.028649f, -0.010067f, 0.027590f, 0.007074f, -0.036723f, -0.004831f, -0.041965f, -0.042795f, -0.016733f, -0.030422f, 0.005141f, 0.027800f, 0.120371f, 0.024188f, -0.017623f, -0.075598f, -0.062567f, 0.021117f, 0.000968f, -0.070820f, 0.045835f, 0.037325f, -0.043088f, -0.138309f, 0.016031f, 0.017539f, -0.007655f, -0.005647f, -0.013531f, -0.042391f, 0.012164f, -0.012171f, 0.065802f, -0.074735f, -0.017499f, 0.068760f, -0.006303f, -0.052901f, -0.008948f, 0.038848f, 0.049170f, 0.027924f, -0.012193f, 0.033104f, -0.030971f, 0.020916f, -0.014211f, -0.014004f, -0.027104f, 0.036344f, 0.025073f, -0.031250f, -0.014941f, -0.008625f, 0.038762f, -0.008782f, 0.001780f, -0.031615f, 0.025313f, 0.012946f, -0.033242f, 0.050300f, -0.000059f, -0.055564f, 0.041674f, -0.060079f, - -0.031187f, 0.043580f, -0.108148f, -0.073498f, 0.054975f, -0.042902f, 0.040130f, -0.073679f, 0.012488f, 0.017570f, -0.039277f, -0.005951f, -0.005351f, -0.076905f, -0.018502f, 0.063165f, 0.072889f, -0.094537f, -0.030974f, 0.016711f, -0.071311f, 0.078484f, 0.086258f, 0.001392f, -0.130021f, -0.079555f, 0.132326f, -0.086299f, -0.017642f, 0.091611f, -0.068656f, -0.156088f, -0.036780f, -0.019201f, -0.074203f, -0.069949f, -0.001737f, -0.088249f, -0.026048f, -0.037481f, -0.035393f, -0.026586f, 0.057451f, -0.006159f, -0.018341f, -0.024050f, 0.011252f, -0.030774f, -0.073627f, 0.057329f, 0.017973f, 0.049615f, 0.015453f, 0.051356f, -0.020265f, -0.031037f, 0.011308f, -0.052780f, 0.041412f, -0.047690f, -0.010206f, 0.032470f, -0.036619f, -0.007006f, -0.022226f, -0.057648f, 0.008840f, -0.043252f, -0.031802f, -0.037544f, -0.028468f, -0.016549f, -0.039099f, 0.008065f, 0.043586f, -0.028149f, -0.010298f, 0.006724f, 0.040269f, -0.016779f, 0.014470f, -0.039478f, 0.067051f, 0.022578f, 0.029044f, 0.020120f, 0.064518f, -0.001763f, -0.074502f, 0.018739f, 0.028137f, -0.018571f, 0.000784f, 0.042091f, -0.051027f, -0.049142f, - -0.059118f, 0.055373f, 0.017506f, -0.071421f, 0.031597f, -0.045712f, -0.006374f, -0.065686f, 0.035205f, 0.054073f, 0.016468f, -0.071542f, 0.053059f, 0.066085f, 0.123797f, -0.029301f, 0.061567f, 0.012325f, -0.028810f, -0.054739f, -0.031818f, 0.072226f, -0.023206f, 0.013779f, 0.028171f, -0.006800f, 0.066472f, -0.009274f, 0.052217f, 0.054750f, -0.066354f, 0.034813f, -0.017189f, 0.002101f, 0.024684f, 0.020766f, -0.002037f, 0.011317f, 0.020004f, 0.066944f, 0.068542f, 0.053210f, -0.038385f, -0.012671f, -0.090639f, -0.002252f, 0.021636f, 0.041476f, 0.009632f, -0.074681f, 0.033092f, -0.044653f, 0.058472f, -0.052227f, -0.036675f, 0.004216f, -0.043917f, -0.007180f, -0.025289f, 0.090099f, -0.048895f, -0.023727f, -0.093906f, -0.030375f, -0.049210f, 0.132981f, 0.080950f, -0.027940f, -0.089269f, -0.096019f, -0.056770f, 0.065850f, 0.086513f, 0.043288f, 0.013052f, -0.115831f, -0.053064f, 0.036788f, 0.032779f, 0.003458f, 0.042190f, -0.026155f, -0.075193f, 0.032520f, -0.128001f, 0.134704f, -0.012828f, -0.098942f, 0.208685f, 0.013875f, 0.005205f, -0.053976f, 0.037667f, -0.076521f, 0.048457f, -0.031023f, - 0.079086f, -0.034592f, -0.003071f, 0.045548f, 0.008503f, 0.004796f, -0.019708f, -0.016609f, 0.002538f, -0.029112f, 0.033584f, -0.002876f, 0.035606f, -0.026549f, -0.026773f, 0.010318f, 0.001768f, -0.026848f, 0.017971f, -0.002371f, 0.015697f, -0.007381f, -0.007271f, 0.015948f, -0.013772f, 0.000166f, 0.011172f, -0.004332f, -0.006517f, 0.057116f, -0.003691f, -0.017149f, -0.009884f, 0.028015f, -0.002374f, -0.028679f, 0.016090f, 0.034327f, 0.006516f, 0.002620f, -0.019424f, 0.008798f, -0.015831f, 0.017011f, 0.039298f, -0.011846f, 0.017711f, -0.012558f, -0.004956f, -0.013799f, -0.008375f, 0.013211f, 0.012003f, -0.020115f, 0.012943f, 0.007468f, -0.004191f, -0.019430f, 0.002404f, 0.012587f, -0.019130f, 0.029647f, 0.018308f, -0.036205f, 0.007317f, -0.031655f, -0.048178f, 0.038304f, -0.022002f, 0.046766f, -0.044322f, 0.097181f, 0.019249f, 0.024758f, -0.011096f, 0.009962f, -0.001693f, 0.019385f, 0.006828f, 0.042132f, 0.003892f, -0.020985f, 0.014544f, -0.013256f, 0.007366f, 0.009631f, -0.017737f, 0.002260f, 0.005571f, -0.019023f, 0.019541f, 0.006047f, -0.007313f, 0.026210f, -0.007889f, 0.011170f, - -0.006614f, 0.005986f, 0.005741f, 0.003643f, -0.002146f, -0.005975f, -0.002423f, 0.004892f, 0.001583f, -0.002719f, -0.011151f, 0.010493f, -0.007184f, 0.005989f, 0.008891f, -0.006779f, 0.002690f, -0.006204f, 0.003140f, -0.010709f, -0.018990f, 0.022149f, -0.010139f, -0.003689f, 0.009608f, 0.005688f, -0.002634f, 0.004059f, 0.018527f, -0.017705f, 0.009274f, -0.005512f, 0.016132f, -0.014473f, 0.010123f, 0.006565f, -0.002103f, 0.005654f, 0.001139f, 0.002412f, 0.008201f, -0.008006f, 0.006489f, 0.007690f, -0.002229f, 0.001863f, 0.013832f, 0.001360f, 0.004820f, -0.010909f, 0.020685f, 0.017873f, -0.085595f, -0.212125f, 0.045502f, 0.175809f, 0.118833f, 0.248087f, -0.081468f, -0.069826f, -0.143128f, -0.228827f, -0.022754f, 0.070799f, 0.093704f, 0.122075f, 0.061622f, 0.006333f, -0.020142f, -0.053424f, -0.075636f, -0.011924f, -0.020252f, 0.006941f, 0.017288f, -0.001416f, 0.004327f, 0.008598f, 0.004045f, 0.029361f, 0.035538f, 0.021502f, -0.004034f, 0.003510f, -0.026224f, -0.055773f, -0.058691f, -0.029459f, -0.038438f, 0.031095f, 0.058666f, 0.061437f, 0.068366f, 0.036676f, -0.010827f, -0.027650f, - -0.049887f, -0.053692f, -0.036524f, -0.021466f, -0.002075f, 0.012587f, 0.026060f, 0.026799f, 0.023611f, 0.019181f, -0.002994f, 0.004533f, -0.005422f, 0.001791f, -0.003887f, -0.003614f, -0.000955f, -0.019662f, -0.018946f, -0.015143f, -0.028809f, -0.000842f, -0.004575f, 0.002887f, 0.051688f, 0.065685f, 0.024037f, 0.021911f, -0.015979f, -0.036729f, -0.021507f, -0.042052f, -0.020942f, 0.004099f, -0.000533f}, - {0.011661f, 0.000092f, 0.015194f, 0.000707f, -0.004832f, -0.001199f, 0.000104f, 0.001400f, 0.007083f, -0.002935f, 0.003623f, -0.007161f, 0.002410f, -0.000752f, 0.004930f, -0.003340f, 0.007122f, 0.001822f, -0.003633f, 0.000512f, -0.007243f, 0.008074f, -0.000753f, -0.001652f, -0.000004f, 0.001191f, 0.001695f, 0.001232f, 0.005961f, -0.010484f, 0.000784f, 0.006613f, 0.001309f, -0.000521f, -0.001165f, -0.000606f, -0.000243f, -0.000867f, -0.010733f, -0.000891f, 0.003172f, -0.003730f, 0.003613f, -0.008412f, 0.000042f, 0.004716f, -0.004945f, 0.009471f, 0.009166f, 0.006836f, 0.005827f, 0.007501f, 0.000927f, 0.003767f, -0.003558f, -0.001509f, -0.006177f, -0.002477f, -0.000342f, -0.005389f, -0.001810f, -0.007661f, 0.001078f, -0.006495f, -0.008498f, 0.001611f, -0.006217f, 0.004699f, 0.000685f, -0.006917f, 0.004759f, 0.003021f, -0.007686f, 0.002296f, 0.000166f, 0.008992f, 0.002643f, -0.011910f, 0.001583f, 0.003866f, 0.003755f, 0.018907f, 0.005193f, 0.004038f, -0.005508f, 0.000777f, -0.009480f, 0.002296f, 0.008860f, -0.004402f, 0.000504f, -0.001804f, -0.004616f, -0.007528f, 0.005941f, -0.012627f, - -0.006300f, -0.006317f, 0.006971f, 0.007569f, 0.004071f, 0.001841f, 0.005560f, 0.004539f, 0.009117f, -0.003094f, 0.003271f, 0.005635f, 0.001312f, 0.001877f, -0.006438f, -0.002800f, -0.002611f, -0.002444f, 0.006229f, -0.011629f, 0.002098f, -0.004014f, 0.012371f, 0.000315f, -0.002036f, -0.003043f, -0.004863f, -0.001659f, -0.005074f, -0.015357f, -0.004674f, -0.002998f, -0.002281f, -0.003439f, 0.001805f, -0.002876f, -0.000496f, -0.000991f, 0.005626f, 0.002401f, -0.000436f, 0.003424f, -0.002733f, 0.006575f, -0.004024f, -0.007195f, 0.007240f, 0.007190f, -0.002774f, -0.006960f, 0.001058f, 0.003635f, 0.003293f, 0.003068f, -0.002723f, -0.000316f, 0.003341f, 0.002768f, 0.017181f, -0.003063f, -0.001500f, 0.001956f, 0.004839f, -0.012442f, 0.007962f, -0.014793f, -0.000534f, -0.007100f, -0.000920f, -0.004655f, -0.000982f, -0.001046f, 0.007644f, -0.006204f, 0.008270f, -0.008352f, -0.009092f, 0.004030f, 0.012568f, -0.014519f, -0.003902f, -0.006968f, 0.000269f, -0.003575f, 0.004125f, 0.005352f, 0.002828f, 0.005448f, -0.008322f, 0.000411f, 0.012116f, 0.004786f, 0.001710f, -0.008564f, -0.012178f, -0.007351f, - 0.002101f, -0.006237f, -0.003365f, 0.002509f, 0.008252f, -0.007154f, -0.006910f, 0.002978f, -0.004984f, 0.009311f, 0.003333f, -0.000870f, 0.006760f, 0.006256f, 0.000256f, 0.010444f, 0.005408f, 0.003315f, 0.003040f, 0.006861f, 0.011013f, -0.006995f, 0.002373f, 0.002989f, -0.007181f, 0.000707f, 0.006487f, -0.002354f, 0.015863f, -0.004766f, -0.003666f, -0.003231f, 0.006183f, 0.007827f, -0.009492f, -0.004171f, 0.003329f, -0.021797f, -0.003438f, -0.004779f, -0.003794f, -0.001860f, -0.002569f, 0.011751f, 0.014042f, -0.003086f, 0.011479f, 0.004429f, -0.006170f, 0.003051f, -0.009408f, 0.001764f, 0.002129f, -0.012721f, -0.001781f, 0.002064f, 0.002351f, 0.008924f, -0.001592f, 0.007756f, -0.005043f, -0.009761f, -0.010258f, -0.002914f, -0.005139f, -0.007819f, 0.008246f, -0.003153f, -0.001472f, -0.001396f, 0.001799f, 0.004452f, -0.012466f, 0.000060f, 0.001841f, -0.005953f, 0.015051f, 0.001161f, -0.003616f, -0.003269f, 0.016050f, -0.001181f, 0.002089f, 0.009399f, 0.000328f, 0.005705f, 0.002284f, 0.000442f, 0.008838f, -0.000166f, -0.006171f, 0.007774f, 0.004226f, 0.004913f, 0.007128f, 0.002164f, - -0.005907f, 0.003898f, 0.005767f, 0.005416f, 0.008663f, -0.000311f, -0.008417f, -0.006982f, 0.010041f, 0.013878f, -0.013593f, 0.001967f, -0.004078f, -0.003192f, 0.002175f, 0.004309f, 0.003963f, -0.016194f, 0.017125f, 0.015849f, 0.011947f, -0.008454f, 0.009332f, 0.016859f, -0.004310f, 0.013149f, 0.004942f, 0.001891f, -0.002100f, 0.014494f, 0.006868f, -0.003531f, -0.010501f, 0.005953f, -0.004365f, -0.005728f, 0.005893f, 0.006849f, 0.003046f, -0.010542f, 0.001672f, 0.009179f, -0.004566f, 0.003000f, -0.020457f, 0.002770f, -0.001652f, 0.009665f, 0.002406f, -0.004441f, -0.006167f, 0.012397f, -0.010853f, 0.000654f, -0.008763f, 0.000785f, -0.002681f, 0.006787f, -0.001462f, -0.002569f, -0.010734f, -0.002869f, -0.001886f, 0.013025f, 0.000674f, -0.012537f, -0.000441f, -0.001036f, 0.004181f, 0.005988f, -0.005418f, -0.000398f, -0.006917f, 0.006936f, -0.001612f, 0.008436f, -0.004813f, 0.012755f, 0.006616f, -0.015294f, 0.015567f, -0.002926f, -0.010746f, 0.001057f, 0.014224f, 0.001997f, 0.002194f, -0.012558f, -0.000742f, -0.005765f, -0.006193f, -0.007773f, 0.000617f, 0.018357f, -0.006597f, -0.013650f, - -0.000907f, -0.020368f, -0.000230f, -0.017534f, -0.006231f, 0.011693f, -0.012566f, -0.013853f, 0.003874f, 0.000912f, 0.001010f, -0.003419f, -0.004682f, -0.010097f, 0.006464f, -0.019545f, -0.006159f, 0.001723f, 0.011751f, 0.000465f, 0.011922f, 0.004075f, 0.026461f, 0.009975f, -0.000515f, 0.000919f, 0.012472f, -0.003299f, -0.004052f, -0.002658f, 0.001853f, -0.008690f, -0.004442f, -0.014470f, -0.001265f, -0.006811f, -0.004190f, 0.017166f, -0.000013f, 0.010614f, -0.004691f, 0.004129f, -0.001432f, 0.006179f, -0.002530f, 0.005714f, -0.006374f, -0.007808f, -0.001595f, 0.001709f, -0.007933f, -0.007918f, 0.000196f, 0.003420f, 0.007609f, -0.001638f, -0.004361f, -0.002156f, 0.007074f, 0.012593f, 0.000011f, -0.009536f, -0.013614f, -0.000467f, 0.002560f, 0.000612f, 0.016320f, -0.011783f, -0.002018f, 0.006826f, -0.004774f, -0.010426f, 0.009467f, 0.003712f, 0.002208f, 0.001174f, 0.016612f, -0.012717f, -0.002580f, 0.001084f, -0.000978f, -0.000442f, -0.010478f, -0.008040f, -0.001124f, 0.007001f, 0.002540f, 0.002840f, 0.002940f, 0.007367f, -0.001492f, 0.006749f, 0.005435f, -0.017195f, -0.006618f, -0.020183f, - 0.005270f, -0.007053f, 0.010211f, -0.006474f, -0.008926f, -0.006459f, 0.005320f, -0.013388f, -0.011199f, 0.015813f, -0.008540f, 0.017147f, -0.003990f, 0.005270f, -0.005954f, -0.011287f, 0.012664f, -0.009530f, -0.010864f, -0.000886f, -0.005881f, -0.012590f, -0.009812f, -0.015910f, 0.000737f, 0.010674f, 0.006060f, -0.005968f, 0.018043f, 0.006934f, -0.006501f, -0.007951f, -0.012882f, 0.001007f, -0.004745f, -0.008592f, -0.004445f, -0.003292f, -0.006246f, 0.004064f, 0.014540f, -0.000127f, 0.001140f, -0.008865f, 0.004796f, 0.005892f, -0.008208f, -0.005472f, 0.003737f, 0.019037f, 0.007327f, -0.002228f, -0.001820f, -0.000473f, -0.016830f, 0.024803f, -0.003550f, 0.000935f, -0.002957f, 0.016499f, 0.015655f, 0.006075f, -0.023575f, -0.003073f, -0.028841f, 0.018643f, 0.008374f, 0.001518f, 0.031669f, 0.015581f, -0.001786f, -0.012732f, 0.013583f, -0.004839f, 0.004048f, 0.005371f, 0.002896f, 0.011153f, -0.008064f, 0.018313f, 0.007438f, 0.002776f, -0.004340f, -0.007653f, 0.012551f, 0.010971f, -0.001037f, 0.007538f, -0.013811f, 0.003896f, -0.018737f, 0.009143f, 0.001940f, 0.011159f, -0.015252f, 0.004519f, - -0.004434f, 0.004749f, 0.019103f, 0.016710f, 0.001530f, 0.005707f, -0.010584f, 0.016180f, 0.001199f, 0.033054f, 0.034381f, -0.003199f, -0.008220f, -0.007880f, -0.006546f, -0.018198f, -0.004737f, -0.024147f, 0.002237f, -0.000805f, -0.000744f, -0.003854f, 0.009588f, 0.016399f, 0.024195f, 0.023277f, 0.017452f, -0.026404f, -0.019285f, 0.000469f, 0.001839f, 0.030394f, -0.020157f, 0.016708f, -0.000810f, -0.005936f, -0.008538f, 0.017214f, 0.003740f, -0.012512f, -0.006941f, 0.032277f, 0.031622f, 0.035580f, -0.003472f, -0.001304f, -0.006044f, 0.006171f, 0.017291f, 0.020168f, 0.005734f, -0.008305f, -0.017122f, -0.034393f, 0.010189f, -0.020209f, -0.004614f, -0.001763f, -0.004574f, 0.002696f, -0.001191f, -0.005982f, -0.000943f, -0.019693f, -0.008165f, 0.001643f, -0.003944f, -0.022003f, -0.009724f, 0.002415f, 0.016052f, -0.004093f, 0.000173f, -0.017336f, -0.006358f, 0.000798f, 0.011494f, -0.006645f, 0.006901f, -0.019346f, -0.005980f, 0.005332f, 0.007140f, -0.004761f, 0.026366f, -0.004763f, -0.003924f, -0.013186f, -0.005173f, 0.011648f, 0.003072f, -0.000344f, 0.013348f, 0.020331f, 0.021913f, -0.003004f, - -0.012115f, -0.011803f, -0.000683f, 0.003791f, 0.004347f, -0.007932f, 0.006216f, 0.010912f, 0.006862f, 0.009300f, 0.021161f, 0.016815f, 0.008294f, 0.000566f, 0.002667f, -0.020236f, -0.007864f, -0.033920f, 0.039793f, -0.002226f, 0.004929f, 0.021276f, -0.000684f, -0.008915f, 0.000089f, -0.040951f, -0.025352f, -0.012481f, 0.005281f, -0.008935f, 0.003461f, -0.019731f, 0.011809f, -0.007602f, -0.001281f, 0.023511f, -0.025107f, -0.017060f, 0.021897f, -0.008320f, -0.034870f, 0.001281f, -0.021948f, 0.003179f, -0.002890f, 0.011508f, 0.004264f, 0.005233f, 0.001376f, -0.005222f, 0.013782f, -0.002832f, 0.018032f, 0.010603f, -0.008107f, -0.012747f, -0.012120f, 0.004041f, -0.006638f, 0.004055f, 0.002382f, 0.010099f, 0.001929f, -0.022556f, -0.000166f, 0.005943f, -0.008831f, -0.000416f, -0.016211f, -0.004615f, -0.000295f, -0.000432f, 0.032048f, -0.007325f, 0.022202f, 0.027181f, -0.009746f, 0.013798f, -0.006707f, -0.002465f, -0.018093f, 0.008419f, 0.022043f, 0.015220f, 0.001190f, 0.004730f, 0.012169f, -0.003153f, 0.009085f, -0.007561f, -0.011225f, -0.015164f, 0.000898f, 0.025919f, 0.038839f, 0.005336f, - 0.009440f, -0.009652f, -0.005011f, 0.026210f, -0.017865f, -0.004482f, -0.034855f, 0.031942f, 0.016653f, 0.001867f, -0.011997f, -0.033122f, 0.003067f, -0.009195f, 0.003776f, -0.037128f, 0.012845f, 0.018766f, -0.021458f, -0.005674f, 0.003002f, 0.001636f, 0.006910f, 0.020333f, 0.025660f, -0.000593f, -0.000198f, 0.004130f, 0.000854f, -0.016391f, -0.018018f, -0.012638f, -0.023696f, -0.012423f, 0.019998f, 0.008497f, -0.007607f, -0.010863f, -0.006670f, -0.042408f, 0.008933f, 0.008951f, -0.019474f, 0.030700f, 0.001079f, 0.022565f, -0.008588f, 0.014172f, -0.005124f, -0.021773f, 0.001803f, 0.017518f, -0.010456f, 0.008911f, 0.012072f, 0.032180f, 0.009299f, 0.008921f, 0.032293f, 0.016636f, 0.012195f, -0.046732f, 0.009205f, 0.004660f, 0.008614f, -0.001519f, -0.018333f, 0.029691f, -0.024170f, 0.015350f, 0.019321f, -0.032923f, -0.006360f, 0.035138f, -0.034535f, 0.001766f, 0.001288f, -0.021961f, -0.032400f, -0.015084f, -0.014332f, -0.043031f, 0.026949f, 0.003020f, 0.028864f, 0.000306f, 0.002985f, -0.015831f, -0.008851f, 0.013301f, -0.002462f, 0.013795f, -0.016467f, -0.006272f, 0.001385f, -0.008294f, - -0.013722f, 0.016702f, -0.019844f, 0.020167f, -0.008903f, 0.005563f, -0.006001f, -0.016179f, -0.014535f, 0.004813f, -0.006119f, -0.001679f, 0.009809f, 0.041771f, 0.001764f, -0.007088f, -0.015962f, 0.004662f, 0.033598f, -0.008011f, -0.007072f, -0.021950f, -0.008395f, 0.001303f, -0.020627f, -0.008680f, -0.028853f, 0.016001f, -0.035025f, -0.062508f, -0.007778f, 0.000218f, 0.027579f, -0.031789f, 0.026403f, 0.016326f, -0.015723f, -0.030208f, -0.006022f, 0.002741f, 0.006767f, -0.000964f, 0.016042f, -0.013834f, -0.006014f, -0.062189f, -0.009699f, 0.059684f, 0.004310f, -0.012853f, -0.010091f, -0.034751f, 0.022169f, -0.013150f, 0.031452f, 0.028376f, -0.005587f, -0.007903f, 0.000102f, -0.038701f, 0.029896f, -0.023509f, -0.018879f, -0.014091f, 0.012921f, 0.006782f, 0.027934f, 0.005684f, -0.011133f, -0.013580f, -0.014044f, 0.015611f, -0.003743f, -0.006384f, 0.025795f, 0.028381f, 0.011486f, -0.014759f, 0.024003f, 0.036909f, -0.010379f, -0.004898f, 0.032440f, 0.010258f, 0.008690f, -0.016732f, 0.002721f, 0.030878f, -0.038890f, 0.031340f, -0.003465f, 0.006564f, 0.019985f, 0.023450f, 0.002627f, 0.013089f, - -0.016809f, -0.013273f, 0.013609f, 0.042245f, 0.013415f, 0.012447f, 0.017793f, -0.017049f, 0.007045f, 0.020436f, 0.013006f, -0.000303f, 0.016981f, 0.011819f, -0.020787f, 0.022368f, -0.020186f, 0.008431f, 0.019743f, -0.014962f, 0.016813f, -0.018844f, -0.006082f, 0.007818f, 0.003582f, 0.018275f, -0.006499f, 0.016588f, -0.006893f, 0.006545f, 0.006680f, 0.001427f, -0.007939f, -0.010965f, 0.046151f, -0.027405f, 0.028623f, -0.010859f, -0.028579f, -0.037224f, -0.010385f, -0.004114f, 0.021680f, -0.032901f, -0.005181f, -0.004275f, 0.017189f, 0.031775f, 0.026906f, 0.016092f, 0.002770f, -0.008876f, -0.004699f, -0.003968f, 0.023069f, 0.017964f, -0.003977f, 0.002209f, -0.004464f, 0.013827f, -0.034742f, 0.020219f, 0.012242f, 0.015595f, 0.006309f, 0.002858f, 0.031218f, -0.012985f, -0.025018f, -0.000900f, -0.007555f, 0.000678f, -0.034856f, -0.021030f, -0.000945f, 0.028826f, -0.019012f, -0.007667f, 0.006334f, -0.002522f, 0.002395f, 0.028143f, 0.013544f, -0.006003f, 0.004415f, 0.012955f, 0.011516f, 0.032838f, -0.007945f, 0.014101f, 0.019872f, 0.007687f, -0.002952f, 0.003900f, -0.034530f, 0.014212f, - -0.003775f, -0.000144f, -0.004972f, -0.022492f, -0.023584f, 0.003704f, -0.008480f, -0.039535f, 0.014587f, -0.033819f, -0.016765f, -0.007178f, -0.039565f, -0.030176f, 0.019313f, -0.046909f, -0.052127f, 0.034110f, 0.030774f, 0.011679f, 0.033162f, 0.054434f, 0.016747f, -0.017951f, 0.018730f, -0.005898f, -0.013010f, 0.026062f, 0.003486f, -0.019351f, 0.014912f, 0.019401f, 0.005691f, 0.008245f, 0.002994f, 0.004867f, 0.049652f, 0.001200f, 0.011898f, 0.006740f, 0.031378f, 0.004055f, 0.049176f, 0.002111f, -0.019432f, 0.040461f, 0.009279f, -0.014432f, -0.004494f, 0.022621f, -0.002761f, 0.002145f, 0.017163f, -0.026411f, 0.030233f, -0.003506f, -0.041033f, -0.009198f, 0.005397f, -0.039596f, -0.003553f, -0.001636f, 0.019741f, 0.020843f, 0.032902f, -0.019383f, 0.005864f, 0.008099f, 0.007552f, 0.016743f, -0.019425f, -0.019586f, 0.012727f, 0.002837f, 0.024966f, 0.023350f, 0.006616f, 0.054588f, -0.008135f, -0.003808f, -0.034603f, 0.056163f, 0.009049f, 0.040679f, 0.021570f, -0.052649f, 0.007334f, 0.011241f, 0.033691f, -0.011649f, 0.011664f, 0.031213f, -0.068165f, 0.039278f, 0.040132f, -0.018239f, - 0.009109f, 0.004774f, 0.010503f, -0.000666f, 0.031981f, -0.024665f, -0.005532f, -0.026442f, -0.000578f, -0.015459f, 0.001976f, 0.005654f, -0.037272f, 0.015428f, 0.040025f, -0.028959f, -0.026656f, -0.028418f, 0.053476f, -0.024798f, -0.013157f, 0.003521f, -0.018296f, -0.057014f, 0.009875f, 0.038702f, -0.055127f, -0.026710f, 0.019370f, 0.027966f, 0.008387f, -0.010191f, 0.013216f, -0.021473f, -0.008710f, -0.002944f, 0.027964f, -0.039631f, -0.029271f, 0.019180f, 0.035160f, 0.011402f, -0.042132f, -0.016143f, 0.002034f, -0.004305f, -0.006388f, 0.020047f, -0.005457f, 0.031391f, -0.026223f, -0.008600f, 0.001463f, -0.034255f, 0.021703f, -0.039536f, -0.023385f, 0.008845f, -0.014309f, 0.032745f, 0.054078f, 0.027409f, -0.031432f, 0.014946f, -0.006871f, -0.013450f, -0.020356f, -0.010677f, -0.034678f, 0.027151f, 0.028345f, 0.011405f, 0.038166f, 0.064305f, -0.001492f, -0.050460f, 0.009448f, -0.060014f, 0.009074f, 0.025786f, 0.011558f, 0.002546f, 0.034430f, 0.025217f, -0.002638f, -0.006427f, -0.049837f, -0.027313f, -0.000343f, -0.023860f, 0.065001f, -0.013091f, -0.016064f, -0.029573f, 0.002466f, 0.023797f, - 0.016289f, -0.001972f, 0.011666f, 0.018279f, -0.030428f, 0.008934f, 0.055566f, 0.018961f, -0.040044f, -0.028566f, 0.017267f, -0.020401f, -0.003781f, 0.012624f, -0.009783f, -0.033331f, -0.008835f, 0.002645f, 0.052849f, -0.012986f, 0.010827f, -0.015713f, -0.044824f, 0.006247f, 0.053629f, -0.016192f, -0.034021f, 0.008055f, -0.021276f, 0.011816f, -0.012636f, -0.015066f, 0.036550f, -0.011435f, -0.005370f, 0.016492f, -0.033475f, 0.009628f, 0.038916f, -0.018774f, 0.002597f, -0.025883f, 0.069410f, -0.015580f, 0.007917f, 0.019504f, -0.016365f, -0.007721f, -0.018230f, 0.005137f, -0.019676f, -0.023517f, -0.018248f, -0.107338f, -0.037096f, -0.001183f, 0.035339f, -0.017358f, -0.053323f, -0.019617f, -0.007135f, 0.027271f, 0.007694f, -0.006466f, -0.025966f, 0.029019f, 0.050983f, -0.022034f, 0.038736f, 0.010261f, -0.071050f, 0.027540f, 0.034519f, -0.011105f, -0.028420f, -0.004751f, 0.045070f, 0.047972f, -0.003124f, -0.035121f, 0.003290f, -0.003388f, -0.003851f, -0.029167f, 0.008161f, 0.014311f, -0.046606f, 0.033381f, 0.028565f, -0.032748f, 0.006953f, -0.036833f, 0.014030f, 0.092268f, -0.081121f, 0.085342f, - 0.039056f, 0.004448f, 0.052529f, 0.026357f, -0.052289f, 0.032448f, -0.039160f, -0.008363f, 0.044210f, 0.002595f, 0.013125f, -0.021721f, -0.038185f, 0.118562f, -0.027139f, 0.002193f, 0.047079f, -0.022013f, 0.009612f, 0.003977f, 0.029238f, 0.066889f, 0.063663f, 0.060165f, 0.004183f, -0.000844f, -0.009148f, 0.003359f, -0.015577f, 0.004902f, 0.051727f, -0.012571f, -0.015060f, 0.028556f, -0.006396f, -0.078929f, 0.037197f, -0.057152f, 0.082501f, 0.010378f, -0.069817f, 0.016707f, 0.001728f, 0.033960f, 0.016845f, -0.016509f, 0.061499f, 0.015330f, 0.004312f, 0.040844f, -0.030892f, -0.044229f, 0.002821f, 0.023947f, 0.082687f, -0.010960f, 0.001689f, -0.008071f, 0.060115f, 0.006788f, -0.044912f, -0.027122f, 0.010491f, -0.004806f, 0.027690f, -0.044897f, 0.023560f, 0.007660f, 0.015317f, -0.003792f, -0.015649f, 0.010508f, 0.020288f, 0.000373f, 0.056638f, -0.087587f, 0.010005f, -0.030822f, -0.016779f, -0.011226f, -0.061570f, -0.093163f, -0.093772f, -0.070116f, 0.010337f, 0.000370f, -0.052911f, -0.000462f, -0.006943f, 0.006010f, -0.031266f, -0.089859f, 0.092225f, -0.001625f, -0.009093f, 0.018010f, - -0.083524f, -0.006018f, -0.017223f, 0.016575f, 0.030845f, 0.120822f, 0.095404f, -0.009545f, 0.005022f, -0.001737f, 0.030534f, 0.038876f, 0.029828f, -0.021005f, 0.111434f, -0.102892f, 0.019745f, -0.018405f, 0.005899f, 0.046030f, -0.030440f, 0.012814f, 0.003586f, -0.111486f, 0.004748f, -0.010952f, 0.007481f, 0.014850f, -0.048559f, -0.017090f, -0.081666f, -0.019800f, -0.001950f, 0.006385f, -0.029500f, -0.022001f, -0.034211f, -0.013356f, 0.038538f, 0.009770f, 0.075529f, 0.019815f, -0.022204f, -0.023983f, 0.047539f, -0.047975f, 0.088719f, -0.065152f, 0.022418f, -0.052119f, 0.004101f, 0.053877f, -0.090844f, 0.090739f, 0.018929f, 0.012508f, -0.061059f, -0.010554f, -0.008568f, 0.002430f, 0.034867f, 0.033422f, 0.043129f, -0.071901f, 0.002547f, -0.026592f, -0.020637f, -0.025869f, -0.035055f, -0.024855f, 0.006934f, 0.045728f, -0.039563f, 0.015456f, -0.077332f, -0.024766f, 0.028489f, 0.028440f, 0.012634f, -0.091894f, -0.042536f, -0.030332f, -0.038186f, -0.036530f, 0.015619f, -0.028010f, 0.065581f, 0.018793f, 0.044187f, -0.013175f, 0.046702f, -0.089391f, 0.135043f, -0.102576f, -0.011084f, -0.062206f, - 0.011852f, 0.000568f, -0.037395f, -0.053452f, 0.061422f, 0.040460f, 0.019269f, -0.027840f, 0.027168f, 0.007375f, 0.058206f, -0.047133f, -0.030243f, 0.034911f, 0.060660f, -0.078395f, 0.031439f, -0.004156f, 0.037030f, -0.029281f, 0.011180f, -0.035752f, 0.007572f, -0.065696f, 0.021630f, 0.066873f, -0.001572f, -0.007160f, 0.086137f, 0.012864f, -0.038410f, -0.085452f, 0.072320f, -0.039911f, 0.033317f, -0.032964f, 0.086509f, 0.035077f, -0.007920f, 0.006089f, -0.047712f, 0.003748f, 0.022992f, -0.026846f, 0.025770f, -0.106333f, 0.042638f, 0.090068f, 0.075536f, -0.044175f, -0.039319f, -0.046194f, 0.050309f, -0.000481f, -0.011676f, -0.000855f, 0.124503f, -0.064055f, -0.023303f, 0.041104f, -0.035442f, -0.115373f, 0.051827f, 0.017201f, -0.071492f, 0.035378f, 0.083225f, 0.056470f, -0.010578f, -0.043213f, -0.088477f, 0.045554f, -0.006186f, 0.011032f, -0.033073f, 0.026801f, -0.000434f, 0.014149f, 0.003653f, 0.003870f, -0.019183f, 0.012682f, 0.046346f, -0.061638f, 0.050973f, -0.010153f, -0.032778f, 0.009358f, -0.022559f, 0.012710f, -0.023062f, -0.019625f, 0.014533f, -0.049549f, -0.005737f, 0.062721f, - -0.093377f, 0.024675f, 0.003683f, -0.016977f, -0.029167f, -0.035184f, -0.022565f, 0.065760f, -0.056052f, -0.009515f, 0.021169f, -0.057923f, 0.013748f, 0.029262f, 0.020179f, 0.008898f, 0.009297f, -0.033496f, 0.024624f, -0.084616f, 0.000834f, 0.070707f, -0.030589f, -0.010026f, -0.016460f, -0.022395f, -0.000681f, -0.060634f, 0.031071f, 0.021497f, -0.048383f, 0.043345f, 0.012899f, -0.057504f, 0.023113f, -0.013063f, 0.040649f, 0.032508f, -0.050630f, 0.015394f, 0.058169f, -0.056478f, 0.031546f, -0.041110f, 0.032156f, 0.032081f, -0.051753f, 0.028173f, 0.000609f, -0.029682f, 0.049131f, 0.013960f, -0.046530f, -0.229101f, -0.467833f, -0.202659f, -0.320526f, -0.426071f, 0.121698f, 0.025014f, 0.101222f, 0.563044f, 0.464164f, 0.296465f, 0.479413f, 0.316894f, 0.012707f, 0.057662f, 0.033783f, -0.299037f, -0.203093f, -0.148361f, -0.338129f, -0.344138f, -0.115640f, -0.116113f, -0.224494f, -0.086101f, -0.070065f, -0.263966f, -0.231058f, -0.093131f, -0.139229f, -0.250221f, -0.081507f, -0.063862f, -0.201701f, -0.046235f, 0.095690f, -0.078340f, -0.068361f, 0.154957f, 0.085268f, -0.097743f, 0.134937f, 0.239281f, - 0.005680f, 0.125097f, 0.299879f, 0.135986f, 0.059849f, 0.327383f, 0.234072f, 0.169973f, 0.403730f, 0.554033f, 0.435232f, 0.509509f, 0.665895f, 0.431195f, 0.279088f, 0.371350f, 0.237630f, -0.074832f, -0.020378f, -0.170581f, -0.416907f, -0.587730f, -0.626955f, -0.839264f, -0.948278f, -1.002784f, -0.955856f, -0.908067f, -0.879758f, -0.704786f, -0.470026f, -0.362649f, 0.038999f, 0.300998f, 0.196537f} - }, - { - {0.021751f, -0.001344f, -0.000264f, 0.002367f, -0.002589f, -0.002741f, -0.001962f, 0.005069f, -0.013051f, 0.004925f, -0.003574f, 0.000009f, 0.000693f, -0.000520f, -0.001667f, 0.000794f, 0.002928f, 0.005473f, -0.002548f, 0.006101f, -0.004929f, -0.005469f, -0.003901f, 0.002747f, -0.005111f, -0.003286f, 0.003947f, 0.000769f, -0.001651f, 0.004862f, -0.001116f, 0.000007f, 0.003177f, 0.001717f, -0.002393f, -0.003334f, -0.003598f, -0.004090f, -0.009305f, 0.002470f, -0.002208f, -0.000736f, 0.014139f, 0.001233f, -0.002869f, 0.008104f, -0.002965f, 0.000140f, -0.003650f, -0.006742f, 0.008367f, -0.002690f, -0.001381f, 0.000095f, -0.005786f, 0.001855f, -0.000254f, 0.004249f, -0.000852f, 0.004260f, 0.001657f, -0.001172f, 0.005120f, -0.000664f, 0.001873f, 0.002498f, -0.000150f, -0.011651f, -0.000134f, -0.001703f, -0.004402f, 0.002948f, -0.000979f, -0.002507f, -0.001387f, -0.007215f, 0.004723f, 0.007449f, -0.002352f, 0.006645f, -0.000848f, 0.007004f, 0.003611f, -0.001277f, -0.002469f, 0.007096f, 0.000768f, 0.001592f, -0.007636f, -0.001032f, -0.000383f, -0.000126f, 0.010867f, 0.005449f, -0.000219f, -0.007794f, - -0.005667f, -0.003222f, 0.001140f, 0.000046f, 0.002471f, 0.005146f, 0.001646f, 0.002045f, -0.007952f, -0.001013f, -0.007743f, 0.000551f, -0.004228f, 0.005394f, 0.005273f, -0.001820f, -0.004139f, 0.005630f, 0.001257f, -0.001788f, -0.007192f, -0.000753f, -0.004591f, 0.001544f, 0.004524f, -0.007155f, -0.003553f, -0.001001f, -0.002852f, 0.019098f, 0.004517f, 0.011123f, 0.000796f, 0.003802f, -0.000100f, -0.005224f, -0.005100f, -0.006213f, 0.002968f, -0.005092f, 0.003715f, 0.000330f, 0.004519f, 0.004971f, 0.011393f, 0.003683f, -0.001207f, -0.000418f, -0.007194f, 0.011359f, 0.009927f, 0.001901f, 0.002693f, 0.002935f, 0.002632f, 0.025704f, -0.006521f, -0.005828f, -0.002462f, -0.005547f, 0.000861f, -0.012788f, 0.000641f, 0.002063f, 0.000313f, 0.008008f, 0.000656f, -0.002166f, -0.007741f, 0.004328f, -0.010781f, -0.009494f, 0.002985f, -0.004872f, -0.002381f, -0.002037f, 0.001487f, 0.006585f, 0.009425f, 0.000228f, -0.001744f, 0.010990f, 0.003914f, -0.001197f, 0.000196f, -0.005246f, -0.000068f, 0.012068f, -0.000197f, -0.006446f, -0.004939f, -0.001958f, 0.004104f, -0.006458f, -0.007372f, -0.007992f, - -0.006177f, 0.005106f, -0.005808f, 0.001475f, -0.007012f, 0.001716f, 0.008215f, -0.000190f, 0.005819f, -0.003282f, -0.004783f, -0.003123f, 0.004041f, -0.001086f, 0.006309f, 0.008419f, 0.001338f, -0.003738f, -0.004810f, -0.001221f, -0.000684f, -0.000617f, 0.000355f, -0.009315f, -0.000769f, -0.005039f, -0.004029f, 0.002651f, 0.001036f, 0.001081f, 0.003278f, -0.011426f, -0.005095f, 0.002049f, -0.001376f, 0.004410f, -0.019464f, -0.010054f, -0.004880f, -0.013595f, -0.005277f, -0.013092f, 0.002717f, -0.001983f, -0.008458f, -0.009673f, -0.002165f, -0.008076f, -0.001030f, 0.005015f, -0.001300f, -0.011816f, -0.004886f, -0.000782f, -0.005098f, -0.004475f, 0.002312f, 0.009296f, 0.012308f, -0.003079f, -0.004333f, 0.006412f, 0.007573f, -0.003591f, -0.002759f, -0.002653f, -0.006732f, 0.000817f, 0.001936f, -0.006335f, -0.004792f, -0.002245f, 0.004282f, 0.010207f, -0.000044f, -0.004796f, -0.000764f, -0.006681f, -0.002847f, -0.010026f, -0.004986f, -0.005032f, -0.014966f, -0.002563f, -0.007192f, -0.005542f, -0.016340f, 0.008623f, -0.007513f, -0.007107f, 0.002073f, -0.002061f, -0.001815f, 0.000945f, -0.013648f, -0.004481f, - -0.005308f, -0.002150f, -0.008129f, -0.002156f, -0.004141f, 0.002295f, 0.003924f, -0.005378f, -0.002791f, -0.007364f, 0.001729f, -0.002093f, -0.001625f, -0.001145f, -0.009729f, -0.001394f, -0.007883f, -0.034236f, -0.002539f, -0.016751f, 0.015405f, -0.008593f, 0.027579f, -0.017289f, 0.017416f, -0.015270f, -0.000838f, 0.000084f, -0.011918f, 0.009669f, 0.000398f, -0.004106f, 0.002843f, -0.003526f, -0.001560f, -0.011273f, -0.000119f, -0.008381f, 0.006950f, 0.002901f, 0.008493f, -0.004528f, 0.012674f, 0.011988f, -0.011243f, 0.003673f, -0.009599f, 0.010648f, -0.000057f, -0.006453f, 0.000415f, -0.000370f, -0.000567f, 0.008050f, 0.000856f, -0.010316f, 0.004281f, 0.008629f, -0.000810f, 0.010094f, -0.004665f, 0.008402f, -0.011754f, -0.004987f, 0.007097f, -0.005706f, 0.001474f, 0.010958f, -0.009617f, 0.015806f, 0.005384f, -0.013709f, 0.003030f, -0.013122f, 0.004502f, 0.008968f, 0.004693f, 0.008732f, 0.010230f, 0.004885f, -0.002103f, 0.000385f, -0.000107f, 0.004808f, 0.006940f, -0.001271f, 0.013828f, 0.004437f, 0.009039f, 0.007236f, 0.001672f, 0.002671f, 0.022336f, -0.000281f, -0.006609f, -0.002480f, - -0.008907f, -0.010531f, 0.016186f, -0.003620f, -0.002850f, 0.014855f, -0.001618f, -0.003331f, 0.006301f, 0.011482f, 0.002937f, 0.005516f, -0.000757f, -0.013321f, -0.003891f, 0.009366f, -0.015226f, -0.014979f, -0.005955f, 0.002846f, -0.010888f, -0.006607f, -0.000282f, -0.001806f, 0.009729f, -0.004286f, -0.002748f, 0.010446f, 0.014485f, -0.013330f, 0.002875f, -0.003425f, 0.004940f, 0.001175f, -0.006312f, -0.001571f, 0.005684f, 0.009256f, -0.003135f, -0.013800f, -0.003618f, -0.001486f, -0.004156f, -0.007025f, 0.000372f, -0.001138f, 0.001837f, -0.002132f, 0.001237f, 0.012351f, -0.009987f, 0.000955f, -0.007784f, -0.006001f, -0.010467f, -0.003173f, -0.006368f, -0.013713f, -0.001235f, 0.000731f, -0.006036f, -0.001206f, -0.006374f, 0.005068f, 0.005719f, -0.001132f, 0.001085f, -0.004903f, -0.002225f, 0.016360f, -0.002951f, -0.006493f, -0.021922f, 0.030264f, 0.033905f, 0.007090f, -0.011296f, 0.008342f, 0.013817f, 0.013907f, 0.008138f, 0.010710f, 0.005168f, 0.017027f, -0.000916f, -0.001156f, -0.005891f, 0.011010f, -0.005255f, -0.013422f, -0.018962f, 0.003120f, -0.008740f, -0.007250f, 0.007635f, -0.001192f, - -0.004560f, 0.017435f, -0.000529f, 0.021455f, 0.000866f, -0.007222f, -0.004922f, 0.008128f, 0.005414f, -0.003128f, -0.015669f, 0.024410f, 0.014171f, 0.001076f, 0.013310f, 0.008549f, 0.008843f, -0.006742f, 0.009894f, 0.005734f, 0.002412f, -0.001864f, -0.003678f, -0.009374f, -0.014117f, 0.005119f, 0.007543f, -0.010390f, 0.005016f, 0.010834f, 0.015087f, 0.004888f, 0.013639f, 0.007158f, 0.011642f, -0.015585f, 0.005244f, 0.002531f, 0.003601f, 0.001412f, -0.000922f, 0.008022f, 0.006550f, 0.007169f, 0.009115f, -0.002096f, 0.004357f, 0.003406f, 0.012843f, 0.016588f, -0.008420f, -0.009147f, 0.027587f, 0.009090f, 0.012449f, -0.009356f, 0.004399f, -0.023942f, 0.001776f, -0.017116f, 0.013854f, 0.009645f, -0.007043f, 0.011935f, 0.006819f, -0.011330f, -0.002594f, 0.018032f, -0.000202f, 0.012656f, -0.002925f, 0.003139f, 0.014161f, -0.016440f, -0.001016f, 0.003608f, 0.005349f, 0.001969f, 0.005837f, 0.001570f, 0.017034f, -0.006903f, -0.004583f, -0.004166f, 0.012907f, 0.002546f, -0.005755f, 0.008669f, 0.021580f, -0.013940f, 0.002814f, 0.003912f, -0.001145f, 0.009705f, -0.004188f, 0.017450f, - 0.005617f, 0.005285f, -0.013291f, -0.000136f, -0.003456f, 0.008818f, 0.005784f, 0.009476f, -0.009128f, -0.004663f, 0.007856f, -0.014644f, -0.008922f, 0.005118f, 0.017333f, 0.012016f, 0.015347f, -0.015008f, -0.005169f, -0.015177f, -0.004243f, 0.006996f, -0.001242f, -0.013948f, 0.002398f, -0.007569f, 0.000334f, -0.014975f, -0.020393f, -0.005700f, -0.013883f, 0.004769f, -0.033109f, -0.029965f, -0.021911f, 0.005123f, 0.005165f, 0.022708f, -0.011798f, 0.021516f, -0.010525f, -0.038605f, -0.004601f, -0.004642f, -0.015764f, -0.025372f, -0.010136f, -0.001673f, -0.016234f, -0.001263f, -0.024286f, 0.000555f, -0.025541f, 0.012753f, -0.007433f, 0.008998f, -0.006098f, -0.001527f, -0.008886f, -0.009828f, 0.013586f, 0.001856f, -0.005739f, 0.015900f, 0.000505f, 0.001676f, 0.004421f, 0.014571f, 0.012298f, 0.009427f, -0.001165f, -0.019501f, -0.003370f, 0.007876f, 0.001240f, 0.010340f, -0.006896f, 0.004075f, -0.028615f, 0.007626f, 0.014883f, -0.021493f, 0.010603f, 0.003312f, 0.017859f, 0.013917f, -0.001560f, -0.005986f, -0.002011f, 0.012301f, 0.004941f, -0.018133f, -0.015639f, -0.024724f, -0.013142f, -0.016805f, - -0.005189f, -0.020561f, -0.005774f, -0.007271f, 0.018750f, -0.009964f, 0.008520f, -0.005641f, -0.004434f, -0.006836f, -0.015469f, -0.007571f, -0.040245f, 0.034146f, -0.007213f, 0.020912f, 0.013030f, 0.001005f, -0.025908f, 0.023701f, 0.004959f, -0.000200f, 0.015861f, 0.011534f, -0.009473f, 0.001484f, 0.025697f, 0.009497f, -0.008585f, 0.018406f, -0.007058f, -0.005776f, -0.002906f, 0.006970f, 0.002310f, -0.001498f, 0.004511f, 0.008740f, 0.008709f, 0.008142f, -0.015085f, 0.012263f, -0.012096f, 0.021166f, -0.009828f, 0.021057f, 0.008762f, 0.003324f, -0.016697f, -0.018081f, -0.003906f, -0.005079f, 0.025414f, 0.007855f, 0.020915f, 0.009044f, -0.013527f, 0.002011f, -0.000879f, 0.009196f, 0.003350f, 0.008255f, 0.000953f, -0.009589f, -0.003335f, 0.012932f, 0.032059f, 0.022187f, 0.005628f, 0.008523f, 0.001311f, -0.002674f, 0.018357f, 0.013821f, -0.001617f, 0.019705f, 0.029676f, 0.037525f, 0.004847f, -0.019173f, -0.020592f, 0.010289f, 0.009143f, 0.000720f, 0.011281f, 0.002233f, -0.002420f, 0.002158f, 0.027874f, 0.019018f, -0.029077f, 0.023509f, 0.009421f, -0.020084f, 0.045251f, 0.006281f, - -0.023754f, 0.004793f, 0.012328f, 0.000579f, 0.008815f, 0.032127f, -0.031722f, 0.019776f, -0.013021f, 0.017431f, -0.007237f, 0.003118f, -0.029353f, 0.004148f, -0.003433f, 0.010853f, -0.011402f, 0.000761f, 0.001983f, -0.000600f, -0.017292f, 0.015423f, 0.001503f, -0.002766f, 0.007504f, -0.004306f, 0.007399f, -0.005150f, 0.022882f, 0.017067f, 0.022652f, 0.021526f, -0.003862f, 0.006680f, 0.009661f, -0.000318f, -0.012128f, 0.014677f, -0.019253f, 0.004414f, 0.018692f, -0.012792f, 0.009790f, -0.022758f, 0.006501f, -0.003582f, -0.005301f, -0.003675f, 0.001303f, 0.004554f, 0.005913f, 0.020136f, -0.015027f, -0.002973f, 0.014200f, 0.029254f, -0.028732f, 0.004555f, -0.007688f, 0.006740f, -0.006150f, 0.043093f, -0.029745f, 0.006593f, -0.017509f, -0.012872f, 0.001950f, 0.000133f, -0.000455f, -0.045044f, 0.020473f, -0.029058f, -0.006884f, 0.038865f, -0.012855f, -0.001728f, 0.020412f, 0.004070f, 0.012252f, -0.030639f, 0.027591f, 0.000906f, 0.001231f, -0.008495f, -0.018761f, -0.003424f, -0.003658f, -0.020108f, -0.012438f, 0.020238f, -0.007635f, 0.003083f, -0.011304f, -0.047659f, 0.014912f, 0.001106f, - -0.015295f, 0.007883f, 0.017191f, -0.002736f, 0.001119f, -0.004708f, 0.003669f, 0.011171f, 0.003024f, 0.018584f, 0.012605f, 0.001963f, 0.016334f, -0.015005f, -0.014523f, -0.020613f, 0.006478f, 0.010039f, 0.002405f, -0.032076f, 0.007884f, -0.027625f, 0.037324f, -0.010370f, 0.012716f, 0.031208f, -0.013689f, 0.019272f, 0.004322f, 0.021042f, 0.008237f, -0.012446f, -0.034270f, -0.025668f, -0.019529f, -0.004355f, -0.020448f, -0.005837f, -0.017963f, -0.013231f, 0.032855f, 0.004984f, -0.015098f, -0.015332f, 0.006052f, 0.009476f, -0.003631f, 0.001213f, -0.061869f, 0.019771f, 0.002833f, 0.011966f, -0.039200f, -0.047708f, 0.026538f, -0.024119f, -0.027945f, -0.008922f, 0.016076f, 0.034836f, -0.025325f, 0.000607f, 0.015684f, -0.006505f, -0.009072f, 0.007999f, 0.004454f, 0.025897f, 0.007470f, -0.027459f, -0.002662f, -0.014563f, -0.002606f, -0.016832f, -0.022237f, 0.001873f, 0.018720f, -0.002784f, 0.007316f, -0.018286f, 0.003110f, 0.019000f, 0.013786f, 0.001100f, -0.000385f, 0.011389f, 0.009977f, 0.006375f, 0.016440f, -0.024769f, 0.023548f, 0.017206f, 0.004076f, -0.020721f, -0.000914f, 0.013619f, - -0.017771f, 0.016020f, -0.014708f, 0.018301f, -0.007881f, 0.024288f, -0.043127f, 0.041424f, 0.007172f, 0.038942f, -0.000412f, -0.010085f, -0.006001f, 0.013014f, -0.002394f, -0.035408f, -0.002229f, -0.004139f, -0.038791f, 0.009213f, 0.020858f, -0.035222f, 0.023381f, -0.031429f, 0.004489f, 0.008856f, 0.001107f, -0.039442f, -0.022923f, -0.021567f, -0.001597f, -0.003439f, -0.021372f, -0.020791f, 0.033149f, 0.007215f, 0.022038f, 0.021383f, 0.006470f, -0.015346f, 0.004175f, 0.055498f, -0.037081f, 0.009726f, -0.006002f, -0.019953f, 0.001852f, 0.008006f, 0.009472f, 0.000374f, 0.000747f, -0.010179f, -0.015239f, -0.024039f, -0.011870f, 0.019239f, -0.015042f, -0.024177f, 0.014821f, -0.008293f, 0.006026f, -0.002706f, 0.011619f, -0.009992f, 0.023868f, -0.007881f, 0.003042f, -0.000013f, 0.002967f, 0.021996f, 0.007796f, -0.009517f, 0.011924f, -0.008701f, 0.018054f, -0.010198f, 0.007636f, -0.024857f, -0.018053f, -0.013193f, 0.004752f, -0.012339f, -0.021687f, 0.009465f, 0.016574f, 0.004915f, -0.011479f, 0.007583f, 0.011686f, 0.013044f, 0.035359f, 0.048487f, 0.066134f, -0.006994f, 0.010489f, 0.015543f, - 0.009196f, 0.008301f, 0.010355f, -0.014393f, 0.025811f, -0.004918f, 0.033639f, 0.040561f, 0.030161f, 0.010172f, 0.016307f, 0.002233f, 0.057521f, 0.009670f, -0.014529f, 0.000835f, 0.067374f, 0.054113f, -0.021627f, -0.009379f, -0.026024f, 0.017003f, 0.009218f, 0.033447f, -0.004146f, -0.012939f, -0.004743f, -0.019937f, 0.006364f, 0.001770f, 0.032186f, -0.010503f, 0.013112f, -0.040183f, 0.024410f, -0.002405f, 0.017765f, 0.000561f, 0.016327f, 0.003168f, -0.021405f, -0.011406f, -0.018025f, -0.014626f, 0.018964f, 0.041236f, 0.019875f, -0.004366f, -0.010409f, -0.000141f, -0.001140f, 0.010494f, 0.016108f, -0.025757f, 0.001919f, -0.008880f, -0.006193f, -0.028149f, -0.019223f, -0.045775f, 0.003540f, -0.002368f, 0.019305f, -0.013898f, 0.032266f, -0.022583f, -0.006797f, 0.058369f, 0.061351f, -0.040783f, 0.012282f, 0.033066f, -0.016143f, -0.010205f, 0.020974f, -0.007542f, -0.020800f, 0.064083f, -0.012263f, -0.100860f, 0.037286f, -0.003167f, -0.046687f, 0.036859f, 0.046600f, -0.017686f, 0.034349f, 0.033598f, -0.012304f, -0.003433f, 0.028622f, -0.031198f, 0.012587f, -0.026345f, -0.013968f, 0.002996f, - 0.009814f, 0.020331f, 0.008856f, -0.019342f, -0.005156f, 0.014681f, -0.020554f, 0.017147f, -0.011243f, -0.025384f, 0.019495f, 0.009614f, 0.008663f, -0.007428f, -0.008092f, -0.009877f, -0.003295f, 0.016690f, -0.039525f, 0.017217f, -0.002991f, 0.029853f, -0.021914f, -0.001210f, -0.026737f, 0.009416f, -0.042120f, 0.003210f, -0.000581f, -0.016976f, -0.014388f, 0.005288f, -0.029228f, -0.047346f, 0.025587f, -0.003594f, 0.005930f, -0.028323f, 0.014244f, -0.005314f, 0.015456f, 0.018519f, 0.006971f, -0.020057f, 0.013300f, -0.009930f, -0.006946f, -0.036365f, 0.002397f, -0.025955f, -0.030737f, -0.041142f, -0.019585f, 0.006273f, 0.008401f, -0.042191f, -0.023752f, 0.002321f, -0.018078f, -0.056255f, -0.047882f, -0.045572f, -0.012685f, -0.026735f, 0.021206f, 0.035599f, 0.006148f, -0.032249f, -0.042881f, -0.043328f, -0.007882f, 0.001094f, 0.020243f, -0.026397f, 0.052548f, 0.058211f, -0.010828f, 0.040161f, -0.008136f, -0.011908f, -0.012109f, 0.039269f, -0.029348f, -0.004417f, -0.012725f, 0.060736f, 0.004567f, 0.024134f, 0.009947f, -0.002364f, 0.031156f, 0.019256f, 0.025893f, 0.010619f, -0.001419f, -0.006879f, - 0.024802f, -0.000464f, -0.019965f, 0.031009f, 0.001395f, 0.027637f, -0.024956f, 0.022368f, 0.008777f, -0.023972f, -0.019217f, 0.053884f, 0.034621f, 0.000621f, 0.019968f, 0.018840f, -0.030045f, -0.017090f, 0.012434f, 0.011991f, 0.024162f, 0.006825f, 0.006679f, 0.012857f, 0.028995f, 0.015456f, 0.008681f, -0.022844f, 0.076789f, 0.054894f, 0.007388f, -0.029260f, 0.018361f, -0.006712f, 0.010863f, -0.002952f, 0.017558f, -0.006147f, 0.003961f, 0.046522f, -0.027342f, -0.008672f, -0.037246f, 0.016115f, -0.009142f, -0.001338f, 0.036714f, 0.016632f, 0.006024f, 0.008505f, -0.012672f, -0.023748f, 0.023805f, -0.016629f, -0.037706f, 0.103364f, -0.112793f, -0.011817f, -0.058573f, 0.075281f, 0.021588f, 0.014374f, -0.027013f, 0.008220f, -0.021680f, 0.067465f, -0.009848f, -0.003029f, 0.008689f, -0.002099f, -0.023939f, 0.011043f, 0.017052f, 0.021131f, -0.042636f, -0.022397f, -0.020908f, 0.010203f, -0.011368f, -0.011040f, 0.000782f, 0.000540f, 0.031603f, -0.014217f, 0.003784f, 0.023037f, -0.000375f, -0.028644f, 0.006154f, 0.024122f, -0.000289f, -0.045715f, 0.037300f, 0.004897f, 0.003259f, 0.000610f, - -0.016936f, 0.015968f, -0.083261f, -0.059446f, -0.005578f, -0.020945f, 0.006772f, 0.007094f, -0.037352f, 0.063799f, -0.022098f, 0.087663f, -0.009268f, -0.030176f, 0.032982f, 0.005310f, 0.029820f, 0.040651f, 0.016008f, -0.041320f, -0.008281f, 0.046732f, 0.111487f, 0.003573f, -0.024488f, 0.044939f, 0.007007f, 0.052796f, 0.011511f, 0.071223f, -0.016099f, -0.004481f, -0.000242f, 0.013259f, 0.002869f, 0.147570f, 0.044653f, 0.014953f, -0.006365f, -0.017542f, -0.023125f, 0.047188f, 0.042901f, -0.052942f, 0.028735f, 0.021706f, 0.003407f, -0.016998f, -0.029264f, -0.071627f, -0.028314f, 0.020997f, 0.005225f, -0.024014f, 0.040236f, -0.015210f, 0.014943f, 0.015518f, -0.012531f, -0.011386f, 0.041864f, -0.000311f, -0.019290f, 0.026128f, -0.026637f, 0.052763f, -0.029255f, -0.017713f, -0.005708f, 0.019584f, 0.008370f, 0.053274f, -0.019880f, -0.034524f, -0.014800f, 0.012771f, 0.000498f, 0.027602f, 0.004646f, 0.000682f, -0.015571f, 0.021708f, 0.099269f, 0.041699f, -0.042323f, 0.030816f, -0.024350f, -0.033708f, 0.020902f, -0.003751f, 0.002583f, -0.004929f, 0.013136f, -0.030459f, -0.047131f, -0.113621f, - -0.035059f, 0.035326f, -0.021202f, -0.042341f, 0.009164f, -0.014128f, 0.008201f, -0.050504f, -0.048106f, -0.026202f, 0.005436f, 0.006987f, 0.038550f, -0.006428f, -0.024757f, -0.061164f, -0.021972f, 0.034449f, -0.025114f, 0.092434f, 0.077804f, 0.037200f, -0.019501f, -0.030632f, 0.055999f, 0.048229f, -0.059996f, -0.011030f, -0.036235f, 0.054167f, -0.007570f, -0.073424f, -0.031249f, 0.028090f, 0.048167f, -0.085123f, 0.036079f, -0.058513f, 0.023536f, -0.033992f, -0.007830f, 0.043013f, -0.012720f, 0.007690f, 0.027893f, 0.056810f, -0.035052f, -0.059643f, 0.014886f, -0.003548f, 0.007847f, 0.058089f, 0.015511f, 0.043607f, -0.052653f, -0.008833f, 0.018358f, -0.046964f, 0.079477f, -0.008195f, 0.047990f, -0.005688f, -0.010091f, 0.039329f, 0.039395f, -0.021502f, 0.087147f, -0.019694f, -0.036928f, 0.042063f, 0.074765f, 0.004422f, 0.013848f, 0.003599f, 0.032960f, -0.035173f, 0.026263f, 0.112095f, 0.051543f, -0.004455f, 0.048565f, 0.059223f, -0.046052f, -0.139826f, 0.008598f, 0.080324f, 0.091033f, 0.021841f, -0.013769f, -0.046004f, 0.040378f, 0.096058f, 0.026437f, 0.007794f, 0.060991f, -0.127381f, - 0.093234f, 0.017718f, -0.059787f, -0.001256f, 0.050979f, -0.037561f, -0.001022f, 0.027737f, -0.039875f, 0.001332f, -0.036169f, -0.023035f, 0.032637f, -0.032085f, -0.020106f, -0.065448f, 0.024731f, 0.060475f, 0.014459f, -0.029372f, -0.050418f, -0.008966f, 0.032434f, 0.017935f, -0.043674f, -0.002306f, 0.045412f, -0.007594f, -0.000082f, -0.017674f, -0.015419f, 0.113530f, -0.058540f, -0.014886f, -0.016455f, 0.018482f, 0.049389f, -0.057180f, -0.035633f, 0.074799f, -0.012918f, -0.005245f, -0.094295f, -0.074812f, 0.026928f, 0.050529f, 0.023285f, -0.092304f, 0.058746f, -0.001503f, -0.018833f, 0.013608f, -0.070888f, -0.017706f, -0.013619f, -0.031892f, 0.054131f, -0.045267f, -0.031242f, -0.048437f, -0.034550f, -0.063942f, 0.013776f, -0.100529f, -0.035251f, 0.014881f, -0.058081f, 0.016232f, 0.020930f, 0.017152f, -0.009192f, -0.012115f, -0.046894f, 0.063853f, -0.023975f, 0.006790f, -0.071758f, 0.043873f, -0.001029f, 0.056677f, -0.011293f, 0.058567f, 0.007733f, -0.007428f, 0.026604f, 0.067831f, 0.032998f, 0.017321f, 0.014111f, 0.008542f, 0.027290f, -0.034335f, -0.002122f, -0.025857f, -0.026199f, 0.041416f, - 0.026712f, 0.015592f, -0.011212f, -0.010932f, -0.004101f, 0.043127f, 0.007578f, -0.019907f, -0.030610f, -0.002102f, -0.006468f, 0.032082f, 0.006040f, 0.026627f, 0.052661f, -0.015280f, -0.129463f, 0.007578f, 0.107361f, 0.009977f, -0.076604f, -0.011287f, 0.031312f, 0.022240f, 0.043080f, 0.036486f, -0.001662f, -0.026189f, -0.023758f, 0.031505f, -0.018628f, 0.001884f, 0.013237f, -0.137619f, -0.021833f, -0.028232f, 0.023285f, 0.104270f, -0.000138f, 0.006028f, -0.022861f, 0.004487f, 0.023932f, 0.041711f, 0.025373f, -0.029738f, -0.011825f, -0.069504f, -0.001853f, 0.041200f, -0.017790f, -0.014025f, 0.018867f, 0.040554f, 0.039281f, -0.017251f, 0.010106f, -0.030885f, -0.240792f, -0.429438f, -0.188509f, -0.299231f, -0.339953f, 0.168310f, 0.041546f, 0.152529f, 0.511839f, 0.325936f, 0.257865f, 0.399761f, 0.186314f, -0.012574f, 0.142185f, 0.015737f, -0.196823f, -0.145973f, -0.162090f, -0.338305f, -0.279741f, -0.135519f, -0.253092f, -0.276085f, -0.129292f, -0.179675f, -0.284090f, -0.159012f, -0.005439f, -0.187772f, -0.173976f, 0.007826f, -0.057185f, -0.172958f, 0.141435f, 0.084002f, -0.148849f, 0.099135f, - 0.162988f, 0.004630f, 0.083368f, 0.352382f, 0.155384f, 0.089883f, 0.419455f, 0.287502f, 0.157559f, 0.414177f, 0.563062f, 0.340957f, 0.503743f, 0.658674f, 0.465968f, 0.303083f, 0.406418f, 0.206165f, -0.231230f, -0.157120f, -0.298233f, -0.676755f, -0.676240f, -0.684163f, -1.024754f, -1.011077f, -1.011680f, -1.052600f, -0.988040f, -0.959040f, -0.745086f, -0.590007f, -0.428513f, -0.151438f, 0.117942f, 0.226351f, 0.521703f, 0.785957f, 0.557523f, 0.409130f}, - {0.023532f, 0.002482f, 0.004373f, 0.007645f, -0.010314f, -0.002805f, -0.005886f, -0.001249f, -0.002683f, -0.006388f, -0.000719f, -0.000947f, -0.006281f, 0.007830f, -0.005144f, -0.003243f, -0.000530f, -0.002877f, 0.006772f, -0.003076f, -0.004820f, 0.002004f, 0.002484f, 0.007150f, -0.000722f, 0.001520f, -0.004581f, -0.000902f, 0.000521f, 0.002130f, 0.000485f, -0.000192f, 0.007349f, -0.004303f, 0.001656f, 0.000445f, -0.004555f, -0.010538f, -0.004225f, 0.002260f, 0.003681f, 0.003798f, -0.010297f, 0.008021f, -0.003968f, -0.004321f, 0.004323f, 0.001737f, -0.009056f, 0.003479f, -0.009267f, -0.002719f, 0.003919f, -0.007238f, -0.002884f, 0.006243f, -0.002342f, -0.004110f, -0.005291f, -0.010321f, 0.007995f, 0.002852f, -0.003287f, -0.003163f, -0.006960f, -0.007903f, -0.009066f, -0.001970f, -0.005979f, -0.000097f, -0.000415f, -0.000505f, 0.000569f, -0.000573f, -0.005788f, -0.013216f, -0.001484f, 0.011844f, -0.011118f, 0.003915f, -0.018534f, -0.000068f, -0.006916f, 0.007079f, -0.006487f, 0.001427f, -0.004515f, -0.007855f, -0.002310f, -0.000951f, 0.005173f, 0.006714f, -0.006943f, -0.011662f, 0.005623f, 0.001853f, - 0.003806f, 0.002344f, 0.004343f, -0.006815f, -0.005399f, 0.001023f, -0.001692f, 0.005817f, 0.003865f, -0.005224f, -0.001545f, 0.004417f, 0.007982f, 0.005074f, -0.000414f, -0.006744f, 0.003070f, -0.001242f, -0.004039f, 0.004569f, 0.001492f, -0.006169f, -0.005637f, -0.004202f, 0.002842f, -0.006020f, -0.003788f, 0.004968f, 0.001330f, -0.000210f, -0.006868f, 0.002283f, -0.006018f, -0.013840f, 0.000688f, -0.004695f, -0.009641f, 0.004136f, -0.003287f, -0.002501f, -0.003847f, 0.000261f, 0.005976f, 0.004188f, 0.001410f, 0.003209f, 0.004190f, -0.010302f, 0.004404f, -0.004011f, -0.005128f, -0.002164f, 0.002205f, 0.000785f, 0.005867f, 0.027662f, -0.002339f, 0.005079f, 0.006077f, -0.002817f, 0.002850f, 0.011041f, -0.008617f, -0.001491f, 0.003120f, -0.004238f, -0.000879f, 0.008138f, -0.002658f, -0.001774f, -0.000612f, 0.003196f, -0.001604f, 0.003965f, -0.002798f, -0.002616f, -0.001308f, -0.006197f, -0.010800f, -0.001930f, -0.003522f, -0.001339f, 0.006228f, -0.011252f, 0.013870f, 0.000202f, 0.000142f, 0.000608f, 0.002529f, -0.000200f, -0.005482f, 0.000993f, 0.004184f, 0.010697f, 0.000399f, 0.000094f, - -0.001738f, -0.003370f, 0.006867f, 0.003523f, -0.002705f, 0.004075f, -0.007130f, 0.001415f, 0.002069f, -0.005040f, -0.018307f, -0.005423f, -0.000623f, -0.000792f, -0.001039f, -0.001301f, -0.002491f, -0.000997f, -0.003634f, 0.004789f, 0.013180f, 0.007947f, 0.000394f, 0.000379f, -0.000552f, 0.005114f, -0.002931f, -0.011704f, -0.000622f, -0.005803f, 0.003787f, -0.006572f, 0.003834f, -0.016801f, -0.000489f, -0.000908f, -0.024123f, -0.023256f, -0.008602f, -0.003250f, -0.003111f, 0.000246f, 0.006185f, 0.001641f, 0.005075f, -0.010809f, 0.005708f, 0.007091f, 0.006899f, 0.008005f, -0.005763f, 0.001888f, 0.018595f, -0.011125f, -0.000128f, -0.007866f, -0.011434f, -0.001194f, -0.000548f, 0.010360f, -0.004636f, 0.001272f, -0.008452f, 0.005810f, 0.003806f, 0.004602f, -0.019301f, 0.003221f, -0.003268f, -0.006684f, -0.001525f, 0.000097f, -0.014214f, -0.009232f, -0.007780f, -0.000468f, 0.012513f, 0.004401f, 0.004395f, 0.006021f, -0.005059f, 0.003614f, -0.004486f, 0.010565f, 0.016400f, -0.001333f, -0.001047f, 0.004706f, 0.001561f, 0.004286f, 0.009446f, -0.004076f, 0.009778f, -0.001328f, 0.000218f, 0.005612f, - 0.008059f, -0.002761f, -0.010322f, -0.009946f, 0.004451f, -0.001344f, -0.001251f, -0.004438f, 0.005588f, -0.008435f, 0.003778f, 0.006033f, 0.011253f, -0.006542f, 0.010796f, 0.005817f, 0.003708f, -0.026716f, 0.011457f, -0.012005f, 0.021338f, -0.020014f, 0.015596f, 0.007899f, -0.008338f, -0.010437f, -0.005815f, 0.003995f, 0.003633f, -0.005680f, 0.012582f, -0.004633f, -0.012099f, -0.002554f, 0.013028f, 0.008856f, -0.013227f, 0.002019f, -0.001667f, -0.013928f, -0.005735f, -0.008993f, -0.002076f, -0.010686f, -0.002801f, -0.004512f, -0.014568f, -0.005297f, 0.007446f, 0.010538f, -0.002003f, -0.012600f, -0.002467f, 0.008775f, -0.002647f, 0.000219f, 0.000699f, 0.000112f, -0.012325f, -0.000456f, -0.001358f, -0.003242f, -0.000431f, 0.002110f, -0.008731f, 0.005002f, -0.009334f, -0.000294f, 0.000166f, 0.000112f, 0.007340f, 0.000060f, -0.002988f, 0.002797f, 0.005250f, 0.011605f, 0.005732f, 0.002566f, -0.002938f, -0.007351f, -0.006318f, -0.002951f, -0.006866f, -0.005480f, 0.005101f, 0.007521f, -0.004804f, -0.009595f, -0.005450f, 0.002788f, 0.002899f, -0.009137f, 0.033385f, 0.013760f, -0.001361f, 0.008176f, - -0.004403f, 0.019043f, 0.008561f, 0.033665f, 0.001476f, -0.031054f, 0.009027f, 0.020062f, -0.010597f, 0.004136f, 0.014178f, -0.009467f, 0.010274f, -0.007542f, -0.000880f, -0.009479f, -0.008795f, -0.002354f, 0.003648f, -0.000340f, 0.005368f, -0.003666f, 0.015080f, -0.007730f, 0.004978f, 0.003298f, 0.010185f, -0.016127f, -0.007740f, -0.005947f, -0.000943f, -0.005277f, 0.002652f, 0.010937f, 0.008414f, 0.016968f, -0.001276f, -0.000550f, -0.008156f, -0.002398f, 0.011448f, -0.009389f, 0.009685f, -0.008745f, -0.002730f, 0.015608f, 0.022860f, 0.016130f, 0.004006f, -0.010761f, 0.009325f, 0.006581f, -0.004696f, 0.013220f, -0.006874f, 0.003123f, 0.003474f, -0.022339f, 0.001354f, -0.021135f, -0.007133f, 0.004137f, -0.004027f, -0.009721f, -0.007022f, 0.002519f, 0.016989f, 0.004468f, -0.003882f, -0.006823f, -0.004167f, 0.002322f, 0.005039f, 0.020590f, 0.041323f, -0.017459f, -0.012847f, -0.003235f, -0.004401f, 0.014611f, -0.013208f, -0.024498f, -0.008178f, 0.002056f, -0.005641f, 0.007439f, 0.003824f, 0.012671f, 0.005652f, -0.004669f, 0.018278f, 0.016961f, -0.007200f, 0.001477f, -0.010978f, -0.001697f, - 0.001151f, -0.006828f, -0.000839f, 0.012686f, 0.018419f, 0.000940f, 0.003507f, 0.007565f, 0.005284f, 0.003079f, 0.001822f, -0.006568f, -0.012220f, 0.001665f, -0.017829f, 0.000844f, 0.004901f, -0.005716f, 0.007934f, -0.004518f, -0.009507f, -0.000644f, 0.010667f, 0.004544f, -0.003702f, 0.030300f, 0.000693f, 0.009863f, -0.017143f, -0.003875f, 0.013164f, -0.005648f, -0.012411f, 0.007942f, -0.014653f, -0.013851f, 0.004158f, 0.017232f, -0.012971f, -0.007747f, -0.003039f, 0.000849f, -0.005160f, -0.006159f, 0.024371f, 0.013693f, -0.000663f, 0.001534f, -0.009237f, -0.007432f, -0.002466f, 0.007520f, 0.015965f, -0.029304f, -0.004159f, -0.022067f, -0.012683f, -0.020008f, -0.005288f, -0.003268f, -0.003229f, -0.007829f, 0.008577f, -0.028085f, 0.014067f, -0.009721f, 0.008258f, 0.003511f, 0.011364f, 0.000444f, 0.004559f, -0.011436f, -0.005031f, 0.005006f, -0.011454f, -0.008314f, 0.013426f, 0.003589f, 0.005932f, 0.005320f, -0.001672f, 0.003507f, 0.020113f, -0.007478f, 0.001691f, -0.009354f, 0.016120f, -0.010057f, -0.036688f, 0.011125f, 0.005459f, 0.015184f, 0.008016f, 0.020987f, -0.014537f, -0.005782f, - 0.012482f, -0.005420f, -0.012467f, -0.005876f, 0.006369f, -0.017799f, 0.017225f, -0.000707f, 0.011396f, -0.015025f, -0.006815f, -0.005498f, -0.016450f, -0.003360f, -0.013124f, -0.005921f, 0.001133f, 0.018613f, 0.014793f, -0.001724f, -0.023087f, -0.013059f, -0.004404f, 0.018104f, 0.014823f, 0.010902f, 0.009981f, -0.006451f, -0.026508f, -0.006874f, -0.000592f, 0.005850f, -0.039312f, -0.047250f, -0.027203f, 0.017687f, 0.000352f, -0.009809f, -0.010919f, -0.015936f, -0.002708f, 0.003760f, -0.026832f, -0.003695f, 0.015097f, -0.011163f, -0.008175f, 0.016874f, 0.003659f, -0.013213f, 0.003470f, -0.012836f, 0.025803f, -0.009964f, -0.007475f, 0.007415f, -0.015057f, -0.010063f, -0.009262f, 0.003248f, -0.010761f, -0.004952f, 0.003467f, 0.001925f, -0.032603f, 0.012785f, 0.012749f, -0.010443f, 0.023454f, 0.008040f, 0.001350f, 0.022079f, 0.012418f, 0.002803f, 0.002334f, 0.023952f, -0.003460f, -0.005742f, -0.002623f, 0.014143f, 0.007823f, -0.024431f, 0.008035f, 0.005720f, -0.001016f, -0.013742f, -0.037892f, 0.014828f, -0.003225f, -0.010696f, -0.023997f, -0.014727f, 0.013585f, -0.004681f, -0.007415f, -0.017188f, - -0.030726f, 0.001281f, -0.004652f, -0.017863f, -0.007086f, -0.030477f, -0.004717f, -0.008525f, -0.005261f, -0.003537f, 0.010858f, 0.019300f, -0.039251f, 0.031888f, 0.001994f, 0.016352f, -0.002654f, -0.001209f, 0.003255f, 0.017603f, 0.002035f, -0.002116f, -0.023493f, 0.008519f, -0.002254f, -0.018393f, 0.005205f, -0.012038f, -0.008823f, 0.034132f, 0.010169f, 0.010462f, -0.006884f, 0.012154f, 0.015296f, 0.014172f, -0.007730f, 0.012335f, 0.007066f, -0.014542f, 0.010003f, -0.014173f, -0.004163f, 0.008728f, 0.004944f, -0.001682f, -0.007012f, -0.007556f, 0.023515f, -0.006900f, -0.009140f, -0.006705f, 0.005528f, 0.004592f, -0.009923f, -0.018704f, -0.000350f, -0.020074f, -0.001282f, -0.018172f, -0.005595f, -0.004685f, 0.004646f, -0.009548f, -0.014128f, 0.018842f, -0.006723f, -0.021947f, 0.015026f, 0.022160f, -0.009589f, -0.007984f, 0.013068f, 0.007645f, 0.024219f, 0.013830f, 0.004010f, -0.001064f, -0.021401f, 0.004693f, 0.024196f, 0.016903f, -0.013763f, 0.015962f, 0.020635f, -0.013615f, -0.032253f, -0.012650f, -0.028102f, 0.008259f, -0.062202f, 0.030808f, 0.009195f, -0.002267f, 0.043063f, -0.001808f, - 0.022116f, -0.018251f, -0.003796f, 0.004058f, 0.000906f, 0.024961f, 0.016045f, -0.032195f, 0.021177f, 0.002284f, 0.012954f, -0.028914f, -0.000559f, 0.017881f, -0.028519f, 0.037173f, 0.010445f, 0.000369f, -0.012447f, 0.002943f, 0.016326f, -0.025342f, 0.002944f, 0.007452f, 0.005138f, -0.015314f, -0.005462f, 0.016033f, 0.009103f, -0.000833f, 0.002727f, -0.009776f, -0.017680f, 0.008319f, -0.030216f, -0.000436f, 0.044255f, 0.043679f, -0.013366f, 0.006167f, -0.001579f, 0.013131f, 0.031087f, 0.003480f, 0.014952f, 0.005797f, -0.016051f, -0.000299f, -0.003020f, -0.045588f, -0.021025f, 0.029761f, 0.001218f, 0.009871f, -0.011471f, -0.001828f, 0.009860f, 0.015014f, -0.001837f, 0.036972f, -0.000292f, 0.029170f, 0.002352f, 0.007237f, 0.002077f, -0.016734f, -0.025220f, 0.030362f, 0.003302f, -0.011499f, 0.021689f, -0.045174f, 0.019027f, 0.029522f, -0.003392f, 0.009252f, 0.013579f, -0.006330f, -0.003863f, 0.018501f, -0.006153f, 0.027730f, -0.025190f, 0.014768f, 0.033944f, -0.035100f, 0.001956f, -0.016311f, 0.021597f, 0.009639f, 0.017976f, -0.017386f, -0.013710f, 0.000536f, 0.045589f, 0.001270f, - 0.023253f, -0.009382f, 0.001761f, -0.002349f, -0.003661f, -0.019284f, -0.000450f, -0.004858f, 0.009497f, -0.008181f, -0.012739f, -0.010152f, -0.000594f, -0.003033f, 0.020605f, 0.004283f, -0.011119f, -0.009458f, -0.010262f, -0.003029f, -0.004865f, 0.034078f, 0.001489f, 0.017495f, 0.001135f, -0.007238f, -0.007352f, 0.028459f, 0.020549f, -0.007225f, -0.026280f, 0.015484f, 0.009889f, -0.056795f, 0.003016f, 0.033196f, 0.031250f, 0.008115f, 0.024673f, -0.033974f, 0.056269f, 0.005749f, 0.010161f, 0.012066f, 0.026282f, -0.001189f, -0.025290f, -0.006159f, -0.029725f, 0.034715f, -0.014367f, 0.017062f, -0.034443f, -0.027705f, 0.023869f, 0.019870f, 0.049539f, -0.018223f, -0.013548f, -0.009534f, 0.009110f, -0.021865f, -0.002812f, 0.007578f, -0.001705f, 0.026084f, 0.017115f, -0.022272f, 0.001821f, 0.005466f, 0.015431f, -0.025325f, 0.025676f, -0.001325f, 0.011416f, -0.005267f, -0.011639f, -0.026628f, 0.009207f, -0.005447f, -0.010623f, 0.004128f, -0.015482f, -0.016388f, -0.003097f, 0.006941f, 0.031555f, -0.047504f, -0.027556f, -0.026190f, -0.027515f, -0.009194f, 0.032963f, -0.020365f, -0.000118f, 0.030486f, - -0.003795f, -0.015692f, -0.026576f, -0.008839f, -0.010759f, -0.058458f, -0.042992f, -0.013983f, 0.011417f, -0.006992f, 0.011567f, -0.014265f, -0.007329f, 0.025419f, 0.018380f, -0.030229f, -0.012430f, -0.033695f, -0.010080f, 0.000756f, 0.015740f, -0.007660f, 0.006833f, -0.029258f, -0.017826f, -0.022015f, 0.004071f, 0.002420f, 0.007185f, -0.028004f, 0.007250f, 0.033242f, 0.018464f, -0.024581f, 0.004503f, -0.002816f, 0.056079f, 0.006020f, 0.026884f, -0.023574f, -0.016188f, -0.005865f, -0.026776f, -0.016919f, -0.025901f, -0.011988f, -0.016923f, 0.030460f, 0.007309f, 0.007635f, 0.031068f, -0.000908f, -0.002234f, 0.014146f, 0.027837f, 0.044196f, 0.031849f, -0.006730f, -0.012582f, -0.051067f, 0.013435f, 0.015881f, 0.005553f, -0.031904f, 0.036029f, 0.014527f, 0.020807f, -0.006182f, 0.001189f, 0.020707f, 0.044984f, 0.044499f, 0.024777f, 0.005163f, 0.046645f, 0.000950f, -0.015432f, 0.015161f, 0.027664f, 0.023126f, 0.041542f, 0.022230f, -0.000553f, 0.004641f, -0.027558f, 0.010621f, -0.066554f, -0.011817f, -0.008467f, 0.013528f, 0.048755f, 0.027673f, 0.005149f, 0.035856f, -0.029462f, -0.025674f, - 0.002351f, -0.064408f, -0.018240f, 0.000764f, 0.008435f, 0.012384f, 0.012496f, -0.006394f, 0.022795f, 0.000275f, 0.008521f, 0.047057f, -0.038735f, -0.020513f, -0.019596f, -0.042835f, -0.013091f, 0.008393f, 0.033417f, 0.060723f, -0.023568f, 0.001497f, 0.010650f, -0.010652f, 0.056574f, 0.010263f, -0.026744f, 0.049256f, -0.009284f, -0.016131f, 0.035869f, -0.031531f, -0.017701f, 0.002352f, 0.003997f, 0.004539f, 0.023910f, 0.012410f, 0.019630f, -0.005599f, 0.010932f, 0.028113f, 0.002815f, 0.019148f, 0.004658f, 0.000717f, 0.032193f, -0.040544f, -0.013468f, -0.013832f, 0.028277f, -0.020783f, -0.004015f, -0.012348f, 0.028127f, -0.011574f, 0.060911f, 0.043195f, -0.038979f, 0.019520f, -0.047078f, 0.006613f, 0.019243f, 0.009050f, 0.012253f, -0.062498f, -0.010223f, -0.060345f, 0.009834f, 0.004358f, 0.009287f, -0.010081f, -0.008748f, 0.027925f, -0.049449f, 0.017020f, -0.020025f, -0.098123f, -0.033943f, -0.032719f, 0.018692f, -0.015105f, 0.017699f, 0.047718f, 0.055094f, 0.028369f, 0.030854f, 0.024255f, 0.011429f, -0.039916f, 0.045388f, -0.002298f, 0.016817f, -0.075512f, -0.034227f, -0.025122f, - 0.015877f, -0.057174f, 0.022699f, -0.033477f, 0.051705f, -0.056804f, -0.072648f, -0.014319f, -0.009108f, 0.060015f, 0.030026f, 0.027750f, -0.013355f, 0.008634f, -0.034404f, -0.027054f, 0.008321f, 0.014129f, -0.044802f, -0.041196f, -0.028663f, -0.001854f, 0.025000f, 0.018893f, -0.030968f, -0.039003f, -0.022214f, -0.022113f, -0.054093f, -0.029964f, 0.026307f, -0.013241f, 0.001299f, -0.005325f, 0.019771f, 0.031169f, -0.005874f, -0.080962f, 0.036938f, 0.072430f, 0.027764f, 0.001184f, -0.082019f, -0.017153f, 0.038311f, -0.007462f, 0.095407f, -0.006890f, -0.073678f, 0.015727f, -0.010911f, 0.009702f, 0.003899f, -0.011440f, 0.022089f, 0.028989f, -0.077818f, -0.017089f, 0.006155f, 0.032714f, -0.013078f, -0.035662f, 0.037751f, 0.009027f, -0.025608f, -0.073320f, -0.091028f, -0.040496f, -0.005608f, 0.014887f, 0.072336f, 0.114018f, 0.045977f, 0.005181f, 0.138866f, 0.127380f, -0.055447f, 0.065440f, 0.057994f, -0.017956f, -0.011111f, -0.032073f, -0.017685f, -0.037496f, -0.026419f, 0.105300f, -0.006819f, 0.060717f, -0.000229f, 0.001534f, -0.000126f, -0.043649f, 0.009124f, 0.007160f, -0.093465f, 0.012187f, - 0.021562f, -0.050354f, -0.011007f, -0.016702f, -0.007432f, 0.011973f, -0.003516f, 0.001051f, 0.040060f, 0.014713f, -0.020519f, 0.010695f, 0.064368f, -0.000852f, 0.029369f, -0.003591f, 0.023910f, -0.037890f, -0.043753f, -0.026351f, -0.079868f, 0.019054f, 0.008549f, -0.037605f, -0.096823f, -0.065459f, -0.090458f, 0.063261f, -0.046974f, 0.007650f, 0.016276f, 0.012192f, 0.012649f, 0.067264f, -0.067277f, -0.002690f, -0.037461f, 0.070973f, -0.166072f, 0.030625f, 0.013620f, 0.049412f, 0.049475f, -0.004054f, -0.014139f, -0.030347f, -0.005829f, -0.054026f, 0.037403f, 0.091424f, -0.005444f, 0.011761f, 0.063050f, -0.043087f, -0.040591f, 0.062456f, -0.110538f, 0.085516f, -0.042399f, -0.027862f, -0.015602f, 0.012890f, -0.028164f, -0.020503f, 0.041787f, -0.005481f, -0.073913f, 0.033102f, 0.000562f, 0.019823f, -0.012431f, 0.076367f, -0.052099f, 0.008346f, 0.034744f, -0.014018f, 0.027667f, -0.040930f, 0.009390f, -0.034302f, -0.014910f, 0.050138f, 0.011243f, 0.023890f, -0.019318f, 0.048858f, -0.006528f, -0.013349f, 0.022066f, -0.019428f, -0.015812f, -0.007193f, -0.008389f, -0.037025f, -0.052733f, -0.009372f, - 0.038736f, 0.007653f, -0.012154f, -0.051358f, 0.008633f, -0.038879f, 0.003432f, 0.026364f, -0.039188f, -0.003383f, 0.040656f, 0.042445f, 0.031998f, -0.048513f, -0.019604f, 0.047983f, 0.020425f, 0.007979f, 0.039795f, -0.177416f, -0.034829f, -0.010920f, -0.075989f, 0.018804f, 0.032868f, 0.006096f, 0.026009f, 0.051932f, -0.011695f, -0.026824f, 0.023040f, -0.021539f, 0.004521f, 0.058009f, 0.000314f, 0.124291f, -0.017304f, -0.035867f, 0.003276f, -0.015010f, 0.060592f, 0.010765f, -0.006957f, 0.058204f, 0.058125f, 0.018920f, 0.021300f, 0.032197f, -0.075822f, -0.041409f, 0.059179f, -0.008847f, -0.062798f, -0.031055f, -0.029795f, 0.041505f, 0.019990f, -0.022411f, -0.090045f, 0.027175f, 0.011117f, 0.011689f, 0.011634f, -0.010363f, 0.006021f, -0.065331f, 0.055717f, 0.041235f, 0.018525f, -0.032283f, -0.031217f, 0.000646f, 0.025961f, -0.005489f, 0.026967f, 0.014444f, -0.073025f, -0.029485f, 0.006975f, -0.068180f, -0.000046f, 0.015095f, -0.065746f, -0.084381f, -0.016773f, 0.028407f, -0.055196f, -0.102270f, -0.051247f, -0.024437f, 0.062444f, -0.037906f, 0.070755f, -0.011862f, -0.003007f, 0.037435f, - -0.002745f, -0.112259f, -0.015846f, 0.011148f, 0.045952f, -0.097239f, -0.154872f, 0.019478f, -0.021393f, -0.080887f, 0.037599f, 0.039529f, -0.021726f, 0.022156f, 0.060470f, -0.056993f, 0.012264f, 0.064604f, 0.028879f, 0.144296f, -0.052137f, -0.054857f, -0.019130f, 0.003392f, 0.137628f, -0.012445f, 0.115092f, -0.070586f, -0.023765f, 0.051849f, -0.076800f, -0.021650f, -0.071816f, 0.018678f, 0.085952f, -0.103528f, -0.033505f, -0.003579f, 0.039791f, 0.004893f, 0.018898f, 0.036107f, -0.000873f, -0.063479f, -0.057056f, 0.009075f, 0.052295f, 0.127367f, -0.019769f, 0.038853f, -0.027606f, 0.065911f, 0.009535f, 0.012993f, -0.009137f, -0.065688f, 0.010217f, 0.072206f, -0.003321f, 0.002270f, -0.016423f, -0.056338f, 0.090881f, 0.037679f, 0.063716f, 0.080035f, 0.005411f, 0.010871f, 0.055056f, -0.110914f, 0.050342f, -0.052500f, 0.149310f, -0.006039f, 0.024235f, 0.028278f, -0.029584f, -0.033295f, 0.025606f, -0.051076f, 0.100633f, -0.042959f, -0.052003f, -0.056422f, 0.106450f, 0.041825f, 0.068838f, 0.000193f, 0.070443f, 0.069030f, -0.035835f, 0.004639f, -0.025261f, 0.020381f, 0.012084f, -0.103537f, - 0.070471f, -0.073612f, 0.008605f, -0.033901f, 0.026912f, -0.002810f, 0.038450f, -0.006151f, -0.034162f, 0.058130f, -0.020927f, -0.007873f, 0.008279f, -0.024030f, -0.021843f, 0.067277f, -0.016551f, -0.008758f, -0.008662f, -0.002937f, 0.029811f, -0.022844f, 0.006277f, -0.016496f, 0.014306f, -0.014252f, -0.012486f, -0.035116f, 0.051340f, -0.031575f, 0.016188f, 0.009342f, 0.035080f, -0.039864f, 0.007786f, -0.015637f, 0.039828f, 0.006567f, 0.001781f, 0.033875f, 0.008157f, -0.052800f, -0.009644f, -0.007885f, 0.013319f, 0.025167f, 0.018017f, -0.047632f, 0.019206f, -0.035516f, 0.024351f, -0.019454f, 0.003589f, -0.010340f, 0.023884f, -0.008254f, 0.005399f, -0.053049f, 0.010838f, 0.028791f, -0.027422f, 0.027142f, 0.001213f, 0.011371f, 0.013423f, -0.020008f, 0.035986f, 0.017134f, -0.003929f, -0.010059f, 0.017263f, -0.010238f, 0.034629f, -0.029198f, -0.004532f, -0.027508f, -0.043452f, 0.086600f, 0.006871f, 0.010538f, -0.035182f, -0.026040f, -0.055630f, 0.036623f, -0.015886f, -0.011703f, -0.024393f, -0.001373f, -0.021786f, -0.003101f, -0.003208f, 0.009268f, 0.010480f, -0.002153f, -0.002946f, -0.016162f, - 0.014264f, 0.013222f, -0.013397f, 0.005672f, -0.029940f, 0.011312f, 0.005383f, -0.005658f, -0.004957f, -0.010355f, 0.009057f, 0.001583f, -0.021415f, -0.006153f, -0.006530f, -0.017979f, 0.028318f, 0.002501f, -0.018659f, 0.002290f, -0.007521f, 0.024462f, -0.009005f, -0.012203f, 0.004510f, -0.015432f, 0.028826f, 0.000305f, -0.016446f, 0.004074f, -0.006891f, 0.013709f, -0.018703f, -0.004207f, 0.005756f, -0.007255f, 0.012507f, -0.007879f, 0.003415f, 0.005211f, -0.016873f, 0.001701f, 0.016213f, -0.025848f, -0.001910f, 0.006965f, -0.023617f, 0.041879f, -0.039168f, 0.018649f, 0.006948f, -0.023205f, 0.044116f, -0.031136f, 0.007516f, 0.004011f, 0.019997f, -0.093506f, -0.215416f, 0.056111f, 0.198816f, 0.168002f, 0.225606f, -0.111710f, -0.144588f, -0.217378f, -0.222080f, 0.014894f, 0.165119f, 0.182218f, 0.199773f, 0.066144f, -0.043760f, -0.159071f, -0.262945f, -0.144326f, 0.066623f, 0.103149f, 0.175021f, 0.132419f, 0.036102f, -0.023947f, -0.055521f, -0.132015f, -0.085434f, -0.081561f, -0.015024f, 0.068923f, 0.106172f, 0.055536f, 0.070847f, 0.035469f, -0.040097f, -0.006672f, -0.085606f, -0.119469f, - -0.020450f, -0.028201f, 0.020925f, 0.111861f, 0.064660f, 0.055305f, 0.016433f, -0.042505f, -0.043331f, -0.037760f, -0.061644f, -0.016582f, 0.002753f, 0.026019f, 0.032297f, 0.053303f, 0.015383f, -0.002282f, -0.027022f, -0.050373f, -0.004146f, 0.017684f, 0.018657f, 0.031239f, -0.007802f, -0.025281f, -0.011746f, -0.025172f, -0.019309f, 0.005560f, 0.014780f, 0.040948f, 0.035180f, 0.034066f, 0.003686f, -0.014302f, -0.060203f, -0.041094f, -0.003967f, -0.002504f} - }, - { - {0.020249f, 0.008776f, 0.009484f, 0.000073f, -0.003806f, -0.009247f, -0.003374f, -0.006663f, -0.006940f, 0.001440f, -0.005649f, -0.003511f, -0.000952f, 0.005654f, -0.000415f, 0.001909f, -0.006101f, -0.003127f, -0.007244f, -0.011766f, 0.006374f, 0.004600f, -0.004967f, 0.002559f, -0.003041f, -0.000623f, 0.007413f, -0.004352f, -0.000865f, -0.005601f, -0.003495f, 0.002938f, 0.004028f, 0.005674f, 0.004976f, -0.007998f, 0.001103f, 0.004212f, 0.000127f, 0.006028f, 0.000775f, 0.001878f, -0.006329f, -0.003385f, 0.001092f, -0.001790f, 0.001516f, 0.000503f, -0.003799f, 0.006675f, 0.004629f, -0.008090f, -0.000344f, -0.000441f, 0.002056f, 0.006981f, 0.002837f, -0.007655f, 0.001110f, 0.002649f, -0.005710f, 0.002140f, 0.002646f, -0.001057f, 0.003033f, -0.000809f, -0.001542f, -0.000643f, -0.004581f, -0.000970f, -0.001860f, -0.003502f, -0.000643f, 0.000066f, -0.000563f, -0.001215f, -0.001935f, -0.010394f, -0.009177f, 0.011250f, -0.002396f, 0.008971f, 0.002553f, 0.013378f, -0.003221f, -0.007018f, -0.004881f, 0.008154f, 0.000136f, -0.003046f, -0.000892f, 0.009235f, -0.002571f, 0.001636f, 0.003158f, -0.006287f, - -0.004854f, -0.002077f, 0.001606f, -0.006516f, 0.001536f, 0.001280f, -0.007619f, -0.002473f, -0.004608f, 0.000605f, -0.003403f, 0.001176f, 0.012113f, 0.006255f, -0.003710f, 0.000567f, -0.005948f, 0.004451f, -0.001704f, 0.007230f, -0.015155f, -0.001646f, 0.002171f, -0.005333f, 0.000804f, 0.007292f, 0.005390f, -0.006732f, -0.005168f, -0.005397f, -0.001188f, -0.004260f, -0.002373f, -0.006539f, 0.002319f, -0.000517f, -0.007837f, -0.003873f, -0.003304f, -0.000293f, 0.001331f, -0.001557f, -0.001055f, 0.003409f, 0.001010f, -0.003450f, 0.001565f, 0.008297f, -0.004535f, -0.000881f, -0.009160f, -0.003116f, -0.001189f, 0.003829f, -0.004335f, 0.001174f, 0.000611f, 0.000558f, 0.014554f, -0.004728f, 0.005094f, 0.012246f, -0.008983f, -0.010224f, -0.001037f, -0.002176f, 0.000418f, 0.006477f, 0.003884f, -0.014425f, 0.002893f, -0.008069f, -0.011211f, -0.000271f, 0.004895f, 0.005157f, -0.003261f, -0.000018f, -0.000670f, 0.006889f, -0.000732f, 0.005747f, -0.001859f, 0.001085f, 0.001771f, 0.002074f, -0.006836f, 0.003604f, 0.006402f, -0.002242f, 0.007997f, -0.003612f, -0.000149f, -0.008732f, 0.007198f, 0.002105f, - -0.001751f, -0.006672f, -0.006373f, -0.002753f, -0.001709f, 0.004020f, -0.000061f, 0.003531f, 0.003782f, -0.005872f, 0.004690f, -0.008044f, 0.003809f, 0.005394f, 0.010166f, 0.009477f, -0.006969f, 0.004305f, 0.000339f, -0.001610f, 0.006354f, -0.003741f, -0.004104f, -0.003313f, 0.005406f, 0.002678f, 0.006803f, -0.005352f, 0.009799f, -0.002401f, 0.000620f, 0.003091f, 0.002577f, 0.005588f, -0.002721f, 0.007748f, 0.010480f, 0.016508f, 0.008330f, -0.017160f, -0.018456f, 0.002121f, -0.001468f, 0.004398f, 0.004166f, 0.012201f, 0.005598f, 0.005808f, 0.003042f, -0.006013f, 0.002402f, 0.015377f, -0.010201f, -0.001223f, 0.000599f, 0.012305f, 0.007585f, 0.001630f, 0.005639f, -0.001092f, 0.004402f, 0.005580f, 0.012863f, 0.006888f, 0.007310f, 0.003667f, 0.003250f, 0.006004f, 0.002451f, -0.009051f, 0.005653f, 0.007083f, -0.002366f, 0.005067f, 0.007262f, -0.002717f, 0.002470f, 0.008465f, 0.003515f, -0.002434f, 0.003441f, 0.008588f, -0.000148f, -0.000481f, -0.001436f, 0.002036f, 0.008721f, -0.002930f, -0.004360f, 0.001925f, -0.002518f, 0.003887f, 0.005665f, -0.006826f, 0.001772f, -0.004675f, - 0.000785f, 0.001845f, 0.007543f, 0.005021f, -0.014300f, -0.000893f, 0.007841f, -0.004733f, -0.005550f, -0.000238f, 0.001837f, 0.006093f, 0.000180f, -0.017212f, -0.006005f, 0.003502f, -0.003303f, 0.005507f, -0.000633f, -0.031693f, 0.003988f, 0.002822f, 0.014202f, -0.000979f, 0.011008f, 0.005427f, 0.002519f, -0.018764f, -0.000355f, -0.000713f, -0.014604f, 0.001839f, 0.010262f, 0.001574f, -0.000576f, -0.001798f, -0.006044f, -0.006972f, 0.002538f, 0.003725f, -0.000868f, 0.002319f, 0.002908f, 0.012287f, 0.001104f, 0.005158f, 0.005606f, -0.007217f, 0.001088f, -0.002105f, -0.002210f, -0.001394f, 0.004346f, -0.001280f, -0.003566f, -0.005687f, -0.003432f, 0.001060f, -0.009467f, -0.007060f, 0.003461f, -0.007851f, 0.001988f, -0.012521f, -0.014624f, -0.004282f, 0.017214f, -0.005327f, -0.001444f, 0.009700f, 0.003064f, 0.000049f, 0.010683f, -0.002320f, 0.000788f, -0.002185f, 0.002781f, 0.006337f, -0.003305f, -0.011963f, 0.006557f, -0.007370f, -0.012932f, -0.005855f, -0.004106f, -0.001013f, 0.003801f, 0.012289f, -0.000756f, -0.001301f, -0.006234f, -0.001794f, 0.006632f, -0.005239f, -0.005787f, 0.007274f, - 0.027993f, 0.001036f, -0.001562f, -0.010450f, -0.005947f, 0.014823f, -0.005816f, 0.011596f, 0.010022f, -0.011106f, -0.001681f, 0.008721f, -0.006128f, -0.002921f, -0.002778f, -0.003958f, 0.002011f, 0.003199f, 0.000698f, 0.005486f, -0.002270f, 0.000954f, 0.002212f, -0.002143f, -0.005083f, -0.005388f, -0.006015f, 0.000609f, 0.007462f, 0.003274f, -0.005918f, 0.000692f, 0.003091f, 0.013964f, -0.003859f, 0.012517f, -0.011030f, 0.005241f, 0.009199f, -0.005756f, -0.003318f, -0.011365f, 0.005728f, 0.000038f, -0.007769f, 0.008167f, -0.009691f, 0.011406f, -0.000269f, 0.016083f, 0.004020f, 0.001932f, 0.004233f, 0.006836f, 0.003944f, -0.004905f, 0.008283f, -0.001203f, -0.007902f, -0.012815f, -0.003060f, 0.005876f, -0.006016f, -0.003900f, 0.005714f, -0.006914f, 0.015033f, -0.013341f, 0.000678f, 0.009815f, -0.007039f, -0.002430f, -0.013490f, -0.000179f, -0.004407f, -0.001896f, -0.002268f, 0.013397f, 0.023750f, -0.007004f, -0.010425f, 0.002689f, -0.004297f, 0.006531f, 0.021600f, 0.000105f, -0.005064f, 0.006852f, 0.003647f, 0.006395f, 0.003802f, -0.011812f, 0.000346f, -0.010540f, 0.005764f, 0.005081f, - 0.002990f, 0.019806f, -0.001069f, 0.014768f, -0.000519f, -0.000365f, 0.004355f, -0.000122f, 0.015393f, 0.002061f, 0.009623f, -0.003609f, 0.013082f, -0.005969f, 0.006877f, 0.026284f, -0.004508f, -0.006617f, 0.018293f, 0.003917f, 0.011819f, -0.000273f, -0.011786f, 0.003616f, -0.006936f, 0.007970f, -0.014192f, -0.001821f, -0.007555f, 0.007868f, -0.001551f, 0.001662f, 0.013904f, -0.006898f, -0.014829f, 0.004097f, -0.001725f, -0.000598f, 0.011109f, 0.002348f, 0.001077f, -0.005129f, -0.010102f, -0.009883f, -0.004060f, -0.008096f, -0.007041f, 0.008815f, -0.005193f, -0.000505f, -0.004118f, 0.001429f, -0.001070f, 0.008251f, 0.003511f, -0.007845f, -0.014148f, 0.033373f, -0.016439f, 0.012162f, 0.001164f, 0.006344f, -0.007168f, -0.005495f, -0.002865f, 0.007787f, 0.009886f, 0.002622f, -0.004270f, -0.008824f, 0.005718f, 0.009702f, -0.001006f, 0.003502f, -0.004064f, 0.010509f, 0.004428f, -0.017846f, -0.005289f, 0.006613f, -0.000281f, -0.007213f, 0.000438f, 0.009070f, -0.005358f, 0.003507f, -0.011199f, 0.007670f, 0.016063f, -0.005652f, 0.016955f, 0.001194f, -0.002060f, 0.011370f, 0.000424f, 0.001476f, - 0.010601f, -0.020296f, 0.004065f, 0.007004f, 0.009848f, 0.006681f, 0.007917f, -0.008737f, -0.006313f, 0.000340f, 0.004337f, -0.009503f, 0.004386f, 0.010582f, 0.009931f, 0.003991f, 0.028200f, -0.007828f, -0.002292f, -0.011544f, -0.004117f, -0.007291f, -0.010103f, 0.014766f, 0.007066f, 0.014477f, -0.000842f, -0.020971f, 0.014080f, -0.006773f, 0.008441f, 0.007293f, 0.004625f, 0.004930f, -0.015489f, 0.021824f, 0.006581f, -0.040925f, -0.034721f, -0.032170f, 0.005033f, 0.004452f, 0.000806f, -0.000438f, -0.003899f, -0.004181f, -0.000907f, -0.007011f, -0.012740f, -0.009506f, -0.021008f, -0.010382f, -0.011067f, 0.009669f, -0.016528f, -0.008452f, -0.010082f, 0.000592f, -0.001508f, -0.005765f, 0.002658f, -0.003220f, -0.017071f, -0.002262f, 0.012476f, -0.000142f, -0.015399f, -0.014136f, 0.003657f, -0.006922f, 0.010215f, 0.006311f, -0.014632f, 0.010763f, 0.018588f, -0.019042f, -0.019021f, -0.011398f, 0.004736f, 0.013950f, -0.013108f, -0.014015f, 0.004434f, -0.009041f, -0.000406f, -0.003759f, -0.003142f, -0.020727f, 0.001849f, 0.008854f, -0.007425f, 0.004031f, -0.010883f, -0.013330f, -0.012560f, -0.007842f, - -0.020417f, 0.029409f, -0.008568f, -0.004788f, 0.003744f, 0.000749f, 0.004913f, 0.001508f, 0.008001f, 0.001560f, 0.006588f, 0.016591f, -0.027729f, 0.014393f, -0.008458f, -0.008794f, -0.003438f, -0.038526f, 0.029457f, 0.007838f, 0.006339f, -0.007075f, 0.028755f, -0.004456f, 0.013439f, 0.000088f, 0.012035f, -0.017029f, 0.006555f, 0.006948f, 0.002339f, -0.008220f, 0.025383f, -0.006695f, 0.007464f, 0.006232f, 0.026271f, -0.017655f, -0.001634f, 0.007817f, -0.005148f, -0.012782f, 0.007421f, -0.011958f, 0.002613f, 0.003915f, -0.015247f, 0.006203f, 0.000493f, 0.001330f, 0.028599f, 0.018994f, -0.003270f, -0.011328f, -0.010258f, 0.007282f, -0.002493f, -0.016826f, 0.004001f, -0.000720f, 0.004121f, 0.014137f, 0.018390f, -0.012473f, 0.012064f, 0.007642f, -0.010099f, 0.007401f, 0.003720f, -0.012747f, -0.008990f, -0.007503f, 0.012384f, -0.013844f, -0.014554f, -0.033285f, -0.027236f, 0.008485f, -0.006779f, -0.003426f, -0.015538f, -0.025196f, 0.007897f, 0.003897f, -0.003478f, 0.015171f, 0.008181f, 0.018063f, 0.005889f, 0.006354f, -0.004702f, 0.005467f, 0.012263f, -0.009989f, 0.011168f, -0.045756f, - 0.043837f, 0.031727f, -0.011847f, -0.009851f, 0.012392f, 0.000912f, 0.001817f, 0.021365f, 0.015299f, 0.001420f, -0.002278f, 0.009106f, -0.004033f, -0.002136f, 0.006538f, -0.008365f, 0.012304f, 0.008785f, -0.008886f, 0.013338f, -0.000616f, 0.004239f, -0.000186f, -0.019627f, -0.000427f, 0.015829f, 0.016189f, 0.006984f, 0.007337f, 0.009220f, -0.008855f, -0.011154f, 0.005917f, 0.010251f, 0.000303f, -0.003702f, -0.009856f, 0.005363f, -0.002414f, 0.014187f, 0.016195f, -0.000713f, 0.018560f, -0.008267f, 0.020599f, 0.011874f, 0.024683f, 0.002830f, 0.004144f, -0.005796f, -0.009201f, -0.000703f, 0.019056f, 0.031326f, 0.002417f, 0.024207f, -0.009330f, -0.020733f, 0.003496f, 0.009678f, -0.018738f, 0.021508f, -0.006150f, 0.008627f, -0.041982f, -0.016594f, 0.000118f, -0.008381f, 0.008548f, 0.016068f, 0.029743f, 0.008509f, 0.000525f, -0.011537f, -0.024001f, 0.013326f, -0.016209f, 0.032913f, -0.011434f, 0.005576f, 0.025125f, 0.025860f, 0.000149f, -0.011984f, -0.005465f, -0.005509f, 0.003739f, -0.016042f, -0.012181f, 0.016746f, 0.005753f, 0.011402f, 0.013731f, 0.015630f, -0.004151f, 0.010762f, - -0.001332f, 0.012531f, 0.046882f, 0.012326f, -0.019479f, 0.022745f, 0.026226f, 0.002823f, -0.001802f, 0.003048f, -0.009711f, -0.014646f, -0.006359f, 0.026343f, 0.018769f, 0.015389f, 0.023202f, 0.006031f, -0.001244f, -0.007797f, -0.024132f, 0.014115f, 0.016444f, 0.009604f, -0.001702f, -0.001432f, -0.006591f, 0.005567f, 0.024227f, 0.016787f, -0.022048f, 0.018284f, -0.018082f, 0.023973f, 0.007574f, 0.010256f, 0.012822f, -0.001605f, -0.008680f, -0.001445f, 0.012122f, 0.040288f, -0.002610f, 0.021342f, -0.004772f, -0.014753f, 0.024196f, 0.020822f, 0.009017f, 0.007019f, 0.023336f, 0.009593f, 0.007080f, 0.001604f, 0.016092f, -0.007714f, 0.016321f, 0.020880f, -0.023400f, 0.016229f, 0.009354f, -0.005331f, 0.001601f, 0.011333f, -0.009773f, -0.020407f, 0.031373f, 0.007230f, 0.006031f, 0.006345f, 0.018587f, 0.005941f, -0.018727f, 0.020536f, -0.026877f, -0.030739f, 0.002692f, 0.004391f, -0.017428f, -0.005015f, -0.051402f, -0.035592f, -0.027521f, -0.008508f, -0.028345f, -0.013083f, 0.010388f, -0.024475f, 0.017419f, 0.017142f, -0.020938f, 0.027444f, 0.013779f, -0.004293f, -0.003118f, -0.012807f, - 0.000105f, -0.023573f, 0.053352f, 0.016788f, 0.007801f, -0.025830f, 0.005897f, -0.007191f, 0.035022f, -0.006029f, -0.001718f, -0.031412f, 0.031060f, 0.003391f, 0.011557f, 0.011665f, 0.017580f, 0.011908f, -0.008371f, 0.012083f, -0.017160f, 0.017600f, -0.007240f, 0.011030f, -0.027022f, 0.059207f, 0.007006f, -0.025088f, 0.012451f, 0.018517f, 0.010753f, 0.021348f, 0.013822f, -0.024167f, -0.039683f, 0.013673f, -0.003734f, -0.002060f, 0.026700f, -0.002547f, -0.002254f, 0.004412f, 0.024101f, -0.003745f, 0.014869f, -0.008782f, -0.010797f, -0.014251f, -0.018709f, 0.037939f, 0.020656f, 0.015089f, -0.009328f, -0.030782f, -0.038385f, 0.021516f, 0.015322f, -0.012195f, 0.011554f, -0.007592f, 0.002904f, 0.037864f, 0.017544f, -0.007948f, 0.021208f, -0.004305f, 0.011943f, -0.009674f, 0.014039f, -0.024125f, -0.036813f, -0.012788f, -0.015336f, -0.000632f, 0.047328f, -0.034589f, 0.023321f, 0.014648f, 0.011244f, -0.005744f, 0.019837f, 0.010436f, -0.033471f, -0.042591f, -0.014056f, -0.018007f, 0.053073f, 0.039645f, -0.010353f, -0.020085f, 0.000130f, -0.020607f, -0.002895f, 0.040026f, 0.036490f, 0.022483f, - -0.028288f, 0.009625f, -0.021613f, 0.040468f, 0.019851f, -0.000580f, 0.002343f, 0.016107f, -0.019691f, 0.008762f, 0.035448f, 0.022019f, -0.026483f, 0.037037f, -0.009236f, 0.021669f, -0.031679f, -0.011497f, 0.056823f, 0.027183f, 0.033291f, 0.009357f, -0.044759f, 0.015845f, -0.036108f, 0.026238f, 0.070514f, 0.026345f, 0.044660f, -0.017809f, 0.013703f, 0.022013f, -0.000972f, 0.007087f, -0.016698f, 0.006465f, 0.028290f, 0.003435f, -0.006258f, -0.022539f, 0.014516f, 0.012291f, -0.024128f, 0.015277f, -0.008615f, 0.021459f, 0.028260f, 0.031471f, 0.035920f, 0.005963f, -0.026400f, 0.009891f, 0.017350f, 0.002319f, 0.048507f, 0.006931f, -0.054190f, -0.031614f, 0.016305f, -0.011017f, -0.064141f, 0.005433f, 0.028245f, 0.013413f, 0.003497f, -0.002523f, 0.034707f, -0.023275f, -0.032694f, -0.002693f, -0.011367f, -0.028425f, -0.001272f, 0.006547f, -0.018332f, -0.023413f, -0.016543f, 0.006151f, 0.004579f, -0.035097f, 0.012612f, -0.011160f, 0.010461f, 0.052679f, -0.005525f, -0.009190f, 0.033479f, 0.002381f, 0.028599f, -0.015944f, 0.020354f, 0.013576f, -0.020929f, -0.006785f, 0.046135f, 0.005354f, - -0.064963f, -0.029773f, 0.039080f, -0.058147f, 0.031869f, -0.055056f, 0.003647f, -0.009377f, -0.079379f, -0.011043f, 0.034603f, 0.071672f, 0.022260f, -0.011169f, 0.016780f, -0.028393f, -0.010090f, -0.063743f, -0.004297f, -0.043482f, -0.006958f, -0.009987f, -0.030410f, -0.032021f, -0.011220f, 0.017497f, -0.029249f, 0.019069f, 0.035362f, -0.037774f, 0.012739f, 0.011506f, 0.005640f, -0.040131f, -0.006795f, -0.000895f, -0.042246f, 0.010359f, 0.052159f, -0.004466f, -0.077471f, 0.026754f, -0.047054f, -0.118790f, 0.032715f, -0.049361f, -0.061522f, 0.002848f, -0.028499f, 0.008062f, 0.020330f, -0.012051f, 0.030601f, -0.026444f, 0.026687f, -0.021900f, -0.053486f, -0.000117f, 0.037426f, 0.035870f, -0.069290f, 0.009587f, -0.008662f, -0.051894f, -0.014123f, -0.013515f, 0.088747f, 0.043434f, 0.051835f, 0.022310f, 0.022143f, 0.052889f, 0.078353f, -0.021983f, -0.039210f, -0.015252f, 0.100881f, 0.109385f, -0.068805f, -0.028851f, 0.047103f, -0.025434f, 0.017175f, -0.033914f, 0.006278f, -0.034719f, -0.063264f, 0.079407f, 0.008797f, 0.023244f, 0.017886f, 0.005239f, 0.007535f, 0.000087f, 0.013339f, 0.018052f, - -0.061512f, -0.050233f, -0.045384f, -0.041870f, -0.033114f, -0.020847f, -0.018949f, -0.033239f, -0.021132f, -0.028401f, 0.026586f, 0.020995f, 0.008040f, -0.016359f, 0.002553f, -0.063278f, -0.034535f, 0.015159f, -0.059594f, -0.006664f, 0.023584f, 0.046941f, 0.003391f, 0.008106f, -0.024395f, -0.037272f, -0.046384f, 0.033258f, -0.008418f, 0.033069f, -0.123338f, 0.006796f, -0.017734f, 0.013275f, 0.069228f, 0.008696f, 0.008325f, 0.008196f, -0.025290f, -0.024407f, -0.003207f, -0.004345f, -0.070961f, 0.015269f, -0.028413f, 0.061490f, 0.000323f, -0.064132f, -0.093257f, -0.053304f, -0.014413f, -0.059720f, -0.063967f, -0.033990f, 0.043278f, -0.008975f, -0.016753f, -0.027821f, 0.120032f, -0.065000f, 0.047665f, 0.085469f, -0.036269f, 0.014309f, 0.069761f, -0.081275f, 0.007114f, 0.011769f, 0.044685f, -0.091682f, 0.009313f, 0.008487f, 0.035148f, -0.038955f, 0.004946f, 0.018765f, -0.050659f, 0.010045f, 0.000588f, -0.008622f, 0.035405f, -0.007548f, -0.003158f, 0.014338f, -0.001852f, -0.008039f, 0.035463f, -0.026640f, 0.014085f, -0.010362f, 0.013736f, -0.016856f, -0.003523f, -0.020899f, 0.006981f, 0.005011f, - 0.065381f, 0.020065f, 0.035697f, -0.005383f, 0.008344f, 0.043680f, 0.006246f, -0.016114f, 0.032789f, 0.018019f, -0.010518f, -0.056679f, 0.061458f, -0.056633f, 0.019368f, 0.026813f, 0.046404f, -0.056039f, 0.070952f, 0.094815f, -0.039710f, -0.097775f, 0.143324f, 0.044920f, -0.049346f, 0.028481f, -0.045422f, -0.078027f, -0.019983f, -0.015709f, -0.059293f, 0.062672f, -0.087281f, 0.030600f, 0.083212f, -0.048965f, -0.104672f, 0.111537f, -0.027091f, 0.066181f, -0.041653f, -0.032972f, -0.067226f, -0.030174f, 0.041739f, 0.032869f, -0.017170f, -0.021385f, 0.022677f, 0.055267f, -0.022152f, 0.042067f, 0.049621f, -0.033076f, -0.004038f, 0.031212f, -0.006816f, 0.001336f, -0.008987f, 0.004110f, -0.048907f, 0.015161f, -0.010264f, 0.003251f, 0.012695f, -0.008402f, 0.010934f, -0.019002f, -0.041001f, -0.018044f, -0.071903f, 0.010758f, 0.000389f, -0.009095f, 0.013950f, 0.008662f, -0.004269f, -0.014738f, 0.029552f, 0.047865f, -0.048026f, 0.072604f, -0.007662f, 0.011332f, 0.010522f, 0.064461f, 0.028923f, 0.047719f, -0.057254f, -0.012253f, -0.010637f, 0.083553f, -0.075984f, -0.023928f, 0.037260f, -0.000640f, - -0.087811f, 0.008097f, -0.018081f, -0.012834f, 0.040179f, 0.046206f, 0.003221f, -0.030684f, 0.071260f, -0.027505f, 0.118911f, 0.004109f, -0.053947f, 0.002731f, -0.007680f, -0.058766f, 0.122656f, 0.029059f, -0.009249f, -0.101965f, 0.028453f, 0.037975f, 0.023831f, 0.091479f, -0.015379f, 0.022402f, -0.006786f, -0.043918f, 0.024828f, -0.027122f, -0.014923f, 0.020783f, 0.041678f, -0.039875f, 0.047717f, 0.007797f, -0.000881f, 0.096762f, -0.017753f, -0.007832f, 0.071920f, -0.042431f, 0.063617f, 0.029712f, -0.013614f, 0.027758f, 0.027370f, 0.061166f, 0.061525f, 0.020644f, -0.048191f, 0.105975f, -0.102290f, 0.006745f, 0.094622f, -0.047139f, 0.021459f, -0.007639f, -0.011587f, -0.105102f, 0.074312f, 0.023310f, 0.033142f, 0.038566f, -0.022345f, -0.050020f, -0.040581f, -0.028685f, 0.005132f, 0.107834f, 0.000531f, 0.085795f, -0.027292f, -0.057339f, 0.002919f, 0.028655f, -0.051940f, 0.088884f, 0.032891f, 0.047029f, 0.080939f, 0.059878f, -0.089357f, 0.040874f, -0.127865f, -0.147535f, 0.001045f, 0.140396f, 0.079537f, 0.021368f, -0.096050f, -0.318409f, -0.064971f, 0.118986f, 0.111901f, 0.189645f, - -0.017495f, 0.013457f, -0.081176f, 0.068197f, -0.050975f, -0.008907f, -0.032928f, 0.031596f, -0.036963f, -0.001737f, -0.003673f, -0.010279f, 0.007903f, 0.034694f, -0.036579f, 0.015953f, 0.003268f, -0.008873f, 0.000933f, 0.024265f, -0.030729f, -0.008950f, -0.004057f, 0.050709f, -0.051253f, 0.013237f, -0.022094f, 0.033356f, -0.037163f, -0.011360f, 0.013694f, -0.007973f, 0.007959f, -0.025168f, -0.003495f, 0.021388f, -0.005829f, 0.007756f, 0.007977f, 0.003785f, 0.028705f, -0.026549f, 0.018459f, 0.019008f, 0.025874f, -0.004486f, -0.056104f, 0.006268f, 0.008133f, 0.022212f, 0.022738f, -0.005391f, 0.007217f, -0.010952f, -0.024475f, -0.005813f, 0.013656f, -0.006379f, 0.036652f, -0.029921f, -0.007430f, -0.058261f, 0.019006f, 0.004298f, -0.006631f, 0.010657f, 0.013557f, -0.003017f, -0.026415f, 0.006605f, 0.031777f, -0.008525f, -0.000283f, 0.007436f, -0.006364f, 0.015628f, -0.004338f, -0.046033f, 0.112572f, 0.030901f, 0.028019f, -0.014553f, -0.035683f, -0.034282f, 0.010080f, 0.022114f, 0.003696f, -0.000963f, 0.000130f, -0.016078f, -0.002740f, 0.008220f, -0.004109f, 0.003737f, -0.001522f, -0.016084f, - -0.000627f, 0.008499f, 0.013050f, -0.011072f, 0.003368f, 0.008593f, -0.016165f, 0.027266f, -0.016112f, -0.013847f, -0.013944f, 0.004078f, 0.008060f, 0.012886f, -0.013417f, 0.017825f, -0.024880f, 0.017049f, 0.015005f, -0.010593f, -0.000957f, -0.000340f, -0.002703f, 0.013420f, -0.013767f, 0.004551f, -0.004284f, -0.017540f, 0.025730f, -0.013767f, -0.000317f, -0.010050f, -0.003146f, 0.018368f, -0.023102f, 0.010037f, 0.006606f, -0.009571f, 0.008700f, -0.019234f, 0.005909f, 0.008897f, -0.014598f, 0.001026f, 0.008064f, -0.012932f, 0.013827f, -0.018080f, 0.005350f, 0.020084f, -0.028130f, 0.008971f, -0.010713f, 0.002848f, 0.011112f, -0.007505f, -0.004375f, 0.016571f, -0.087039f, -0.203864f, 0.057367f, 0.199040f, 0.136809f, 0.216459f, -0.120920f, -0.128706f, -0.175392f, -0.203003f, 0.004100f, 0.156150f, 0.161353f, 0.168451f, 0.032873f, -0.056027f, -0.110884f, -0.159066f, -0.134835f, 0.010211f, 0.104308f, 0.123741f, 0.111343f, 0.026424f, -0.031075f, -0.019534f, -0.087369f, -0.097732f, -0.041350f, -0.002932f, 0.037254f, 0.081902f, 0.039910f, 0.029532f, 0.040933f, -0.020831f, -0.049105f, -0.008279f, - -0.078366f, -0.036933f, 0.000640f, 0.012130f, 0.059339f, 0.069074f, 0.005941f, -0.010777f, -0.006723f, -0.051441f, -0.014068f, -0.000979f, -0.010845f, 0.017460f, 0.034078f, -0.007556f, -0.002898f, -0.013689f, -0.021564f, 0.004163f, 0.001963f, -0.002545f, 0.038535f, 0.025989f, 0.009572f, -0.001139f, -0.036519f, -0.052829f, -0.041680f, 0.002974f, 0.039363f, 0.033767f, 0.044535f, 0.006306f, 0.001904f, 0.010811f, -0.052897f, -0.028637f, -0.013606f, 0.000698f, 0.002378f}, - {0.020349f, 0.012716f, 0.004800f, -0.000581f, 0.010379f, 0.000762f, 0.000153f, -0.002023f, 0.004059f, 0.008144f, 0.001153f, -0.005362f, 0.007314f, 0.005394f, -0.003062f, 0.000762f, 0.001721f, -0.005434f, -0.003180f, 0.003653f, 0.001179f, 0.007023f, -0.004192f, 0.004185f, -0.005769f, -0.000256f, 0.001542f, -0.005767f, 0.001799f, -0.002682f, 0.005277f, -0.007022f, 0.009761f, -0.001358f, -0.005192f, -0.009347f, 0.003408f, 0.007683f, -0.002749f, 0.001684f, -0.004166f, 0.001969f, 0.005531f, -0.000275f, -0.001935f, -0.001960f, -0.001885f, 0.004686f, -0.004653f, -0.004184f, 0.001251f, 0.002229f, 0.003360f, 0.000406f, -0.003560f, 0.009993f, 0.001182f, 0.001271f, 0.006133f, -0.001918f, 0.002930f, -0.000058f, -0.001757f, -0.000949f, -0.000830f, 0.003408f, 0.006774f, -0.001137f, 0.001716f, 0.001159f, 0.008373f, -0.001620f, -0.003091f, -0.001748f, -0.002791f, -0.003812f, -0.000723f, -0.007978f, -0.005220f, 0.002510f, -0.001869f, -0.002377f, -0.003756f, 0.001180f, 0.008179f, -0.002344f, 0.000282f, 0.001010f, 0.013845f, -0.000072f, 0.002865f, -0.005397f, -0.003612f, -0.001200f, -0.003378f, -0.003745f, - -0.003401f, -0.002324f, -0.003209f, -0.004449f, 0.004200f, 0.006636f, -0.003233f, 0.001159f, 0.000588f, -0.007155f, 0.000544f, 0.000010f, -0.004854f, 0.009985f, -0.004655f, 0.005752f, 0.002500f, -0.001334f, -0.005246f, -0.005031f, 0.005449f, -0.002455f, -0.001486f, -0.007580f, -0.001543f, -0.000544f, -0.003208f, 0.010529f, -0.001792f, -0.000468f, 0.004816f, -0.000567f, -0.008113f, -0.004238f, -0.007066f, -0.004906f, 0.012365f, -0.003105f, 0.013718f, 0.000168f, 0.000086f, -0.002143f, 0.002195f, 0.000806f, -0.007093f, -0.008042f, 0.006817f, 0.000993f, 0.004934f, -0.000220f, 0.005678f, 0.003326f, -0.006605f, 0.000389f, 0.003558f, 0.004582f, 0.001096f, 0.003863f, 0.018380f, -0.000954f, -0.001724f, -0.004147f, -0.009365f, -0.011651f, -0.010629f, 0.001683f, 0.010303f, 0.003904f, 0.013607f, 0.004979f, -0.005543f, 0.002046f, -0.015246f, -0.012826f, 0.006600f, -0.004211f, 0.009119f, -0.000359f, -0.006543f, -0.003016f, 0.017684f, 0.004310f, 0.007718f, 0.000123f, 0.006004f, -0.002119f, -0.001709f, 0.003875f, -0.001970f, -0.007083f, -0.000151f, 0.003217f, -0.000479f, 0.000004f, 0.011376f, 0.007249f, - -0.011414f, 0.000726f, -0.007105f, 0.012896f, 0.007733f, 0.000975f, -0.004050f, -0.004090f, 0.006086f, 0.003645f, 0.009634f, -0.008172f, 0.015075f, 0.018526f, -0.004655f, 0.018057f, 0.000285f, 0.009668f, 0.006029f, -0.002830f, 0.003321f, 0.014537f, -0.001412f, -0.009125f, 0.008366f, 0.003019f, 0.000057f, -0.000737f, -0.001572f, 0.000926f, 0.008268f, -0.005029f, 0.002910f, 0.002384f, 0.004107f, -0.006815f, 0.007201f, 0.001469f, -0.001980f, -0.015978f, -0.012579f, 0.003373f, -0.007298f, 0.004452f, -0.009007f, -0.012679f, -0.011688f, 0.001099f, -0.008823f, 0.007235f, 0.005278f, -0.011331f, -0.002602f, 0.003908f, 0.000672f, 0.004913f, -0.003548f, 0.005091f, 0.006571f, -0.010151f, 0.002744f, 0.002627f, -0.008053f, 0.003991f, 0.000477f, -0.009675f, 0.006458f, 0.005956f, -0.003541f, 0.006550f, 0.000733f, 0.005229f, 0.004987f, 0.001600f, -0.003703f, -0.001466f, -0.011196f, -0.003921f, -0.005692f, 0.005117f, 0.005808f, 0.001741f, -0.017756f, 0.002683f, 0.007141f, -0.004634f, 0.012079f, -0.010757f, -0.013583f, 0.000314f, -0.004186f, 0.003553f, -0.009757f, 0.016656f, -0.001135f, -0.006570f, - 0.001482f, -0.000551f, 0.009676f, -0.001351f, -0.006010f, -0.001192f, -0.004171f, -0.006175f, -0.007038f, 0.002326f, -0.012537f, 0.000369f, 0.000086f, 0.002665f, 0.007726f, 0.001702f, 0.005221f, 0.007900f, -0.007047f, -0.038459f, -0.001855f, -0.005770f, 0.024969f, -0.000643f, 0.000316f, 0.004386f, -0.004935f, 0.012011f, 0.001969f, -0.015317f, -0.008899f, -0.017755f, 0.001627f, -0.002339f, -0.007017f, -0.005966f, -0.007412f, -0.005033f, 0.019051f, -0.010544f, -0.006005f, -0.006465f, -0.016931f, -0.001805f, -0.005216f, 0.004174f, 0.006303f, -0.003653f, -0.001533f, 0.003425f, -0.006213f, -0.002413f, -0.003492f, -0.006736f, 0.004754f, 0.011475f, -0.003007f, -0.003171f, 0.008418f, -0.014236f, 0.006999f, -0.011578f, -0.022751f, -0.014493f, -0.022690f, -0.004272f, -0.013647f, -0.009133f, 0.000576f, 0.007377f, 0.002597f, 0.004983f, -0.004820f, 0.006271f, -0.010709f, -0.003043f, 0.005862f, -0.001043f, 0.008787f, -0.005439f, 0.001386f, -0.008449f, -0.007577f, 0.004519f, -0.014923f, 0.002451f, 0.007560f, -0.013585f, -0.000931f, -0.004369f, -0.008232f, -0.009341f, -0.010087f, -0.003704f, -0.006381f, 0.000053f, - 0.024088f, 0.000381f, -0.013033f, -0.012582f, -0.004092f, -0.009145f, -0.003280f, -0.006853f, 0.002161f, 0.001290f, -0.010155f, -0.006072f, -0.011164f, 0.021996f, 0.009703f, 0.002096f, -0.000799f, 0.011931f, -0.017255f, -0.000245f, 0.000123f, -0.011185f, -0.014387f, 0.013346f, 0.000829f, 0.009501f, -0.014371f, -0.006590f, -0.004590f, 0.005135f, 0.000125f, 0.006309f, -0.009628f, 0.003015f, 0.004957f, -0.011294f, -0.009977f, -0.009863f, 0.003139f, -0.003365f, -0.002151f, 0.009256f, -0.001863f, 0.000844f, 0.001126f, -0.002083f, -0.009663f, -0.006742f, -0.000166f, -0.016287f, -0.009352f, -0.008720f, 0.005651f, 0.002778f, 0.007669f, -0.001891f, 0.004143f, -0.000503f, -0.000215f, 0.007124f, -0.004268f, 0.012648f, 0.003458f, 0.003579f, 0.000051f, -0.004649f, 0.007087f, 0.003666f, 0.012364f, -0.003435f, 0.003942f, 0.005968f, -0.001050f, -0.000100f, -0.010405f, 0.006306f, -0.005946f, 0.027633f, 0.026134f, 0.019369f, -0.007246f, 0.006758f, 0.009554f, 0.005375f, 0.005171f, -0.010432f, -0.009147f, -0.013494f, 0.011021f, -0.012701f, -0.002003f, -0.009396f, 0.014793f, -0.017538f, -0.013179f, -0.006896f, - -0.003245f, -0.009928f, -0.014557f, 0.003420f, 0.000235f, 0.000224f, -0.017538f, -0.009996f, 0.003950f, 0.002953f, 0.004339f, -0.005248f, -0.007264f, -0.000104f, 0.004632f, 0.005892f, -0.005285f, 0.005558f, -0.009529f, -0.003084f, -0.022618f, 0.007416f, 0.002190f, -0.004530f, -0.004667f, -0.017066f, -0.007924f, 0.001295f, -0.004416f, -0.023716f, 0.011929f, 0.004290f, -0.000462f, -0.007042f, -0.005234f, -0.010588f, 0.002562f, -0.004373f, 0.006225f, -0.002423f, -0.003652f, -0.014079f, -0.002847f, -0.002419f, -0.007468f, 0.013122f, -0.010614f, -0.001114f, 0.008349f, -0.005023f, -0.011279f, -0.007964f, 0.009770f, 0.012058f, 0.007291f, -0.003493f, 0.000499f, 0.033923f, 0.011275f, -0.005121f, -0.004134f, 0.011826f, -0.023185f, -0.004465f, 0.018469f, 0.009220f, -0.013175f, -0.000410f, -0.009005f, 0.003483f, 0.014141f, 0.035099f, 0.011420f, 0.027317f, -0.009930f, -0.002144f, -0.026908f, 0.008956f, -0.008017f, 0.007414f, -0.011930f, -0.000712f, 0.000876f, -0.004255f, 0.009318f, -0.004385f, 0.004302f, 0.011699f, -0.009320f, 0.005230f, 0.014762f, -0.004197f, 0.004727f, -0.000075f, 0.005730f, 0.008153f, - 0.008139f, -0.045370f, 0.016203f, -0.005334f, -0.021569f, -0.003812f, 0.012564f, 0.003848f, -0.016778f, 0.008715f, 0.012494f, -0.026795f, 0.001706f, -0.007671f, 0.015234f, 0.003423f, 0.012486f, -0.003346f, -0.009826f, -0.018925f, 0.000630f, -0.011555f, 0.034806f, 0.006268f, -0.006377f, 0.011473f, 0.000888f, 0.011035f, -0.028440f, -0.004106f, 0.003635f, 0.008069f, 0.001360f, -0.013731f, -0.002761f, 0.003723f, 0.011696f, -0.040812f, -0.044724f, -0.015561f, -0.003838f, 0.000438f, 0.009045f, -0.019317f, 0.005597f, 0.021951f, -0.013191f, 0.011507f, 0.015075f, -0.011150f, -0.000052f, -0.005625f, 0.018518f, 0.025990f, -0.013022f, -0.015269f, 0.012868f, 0.000893f, -0.013057f, 0.005611f, -0.000189f, 0.002921f, 0.003366f, -0.007156f, -0.005342f, -0.028567f, -0.001866f, -0.008450f, -0.001072f, -0.001227f, 0.018726f, 0.005293f, -0.034831f, 0.000180f, 0.016132f, -0.019208f, 0.004490f, 0.019828f, -0.004926f, 0.006717f, -0.000081f, -0.005715f, -0.013578f, 0.025596f, 0.021357f, -0.017058f, 0.008163f, -0.006609f, -0.001440f, 0.007670f, -0.006383f, 0.006360f, -0.010942f, -0.001608f, 0.021285f, -0.006680f, - 0.003912f, 0.009932f, -0.008301f, -0.018509f, -0.001647f, 0.005746f, 0.002239f, -0.009137f, 0.000052f, 0.004408f, 0.006549f, 0.015613f, 0.008435f, 0.017248f, 0.007449f, 0.003050f, 0.005590f, -0.042199f, 0.049941f, -0.001469f, 0.032618f, 0.003736f, -0.016772f, -0.004085f, -0.009135f, -0.011384f, -0.000284f, 0.002214f, 0.023987f, -0.002234f, 0.016919f, -0.014286f, 0.000565f, 0.005202f, 0.004985f, 0.003122f, 0.021050f, 0.020933f, 0.008576f, 0.004465f, -0.001052f, -0.002475f, 0.000307f, -0.001923f, -0.031287f, -0.009819f, 0.016530f, 0.011080f, -0.002191f, 0.002995f, -0.014023f, 0.009168f, -0.017518f, 0.005475f, 0.031669f, 0.004593f, 0.008052f, -0.023801f, 0.014918f, 0.012981f, 0.004749f, -0.015574f, -0.005828f, -0.006605f, 0.002937f, -0.013898f, 0.017026f, 0.020068f, 0.012988f, -0.000517f, 0.029907f, 0.011143f, 0.043046f, 0.017240f, -0.009413f, 0.035486f, 0.002469f, -0.011682f, 0.026693f, -0.003281f, 0.009993f, 0.016383f, -0.009588f, -0.009283f, 0.024902f, 0.025012f, 0.016485f, -0.020357f, 0.009448f, -0.001001f, -0.007634f, -0.018364f, 0.013465f, 0.018415f, 0.012207f, -0.021862f, - 0.032563f, -0.007430f, -0.018996f, 0.008424f, 0.014933f, -0.011942f, -0.005492f, -0.026984f, 0.013348f, -0.008816f, -0.002127f, -0.024531f, -0.010235f, -0.007149f, -0.003212f, -0.010046f, 0.007449f, -0.003483f, -0.005235f, 0.008044f, 0.009883f, 0.017196f, 0.016169f, -0.004529f, -0.004249f, -0.019158f, 0.009483f, 0.002447f, 0.015051f, 0.005912f, 0.004837f, -0.002657f, 0.006659f, -0.011035f, -0.010134f, 0.008466f, 0.004221f, 0.008618f, -0.024774f, 0.010996f, 0.017891f, 0.002365f, -0.021734f, -0.021243f, -0.017520f, -0.052163f, 0.008692f, -0.003672f, 0.027424f, -0.010253f, 0.022925f, 0.009858f, 0.002400f, 0.031256f, 0.005203f, -0.000296f, 0.021250f, 0.010631f, -0.026970f, -0.010632f, 0.004130f, -0.005566f, -0.015011f, -0.006179f, 0.036571f, 0.020026f, -0.016216f, 0.001593f, -0.008926f, -0.000926f, 0.005606f, 0.028961f, 0.000436f, -0.003753f, 0.031746f, 0.014957f, -0.021085f, -0.004299f, -0.004599f, -0.001617f, -0.000111f, 0.061049f, 0.011262f, 0.023127f, -0.009092f, 0.020339f, 0.040032f, -0.031753f, 0.051577f, 0.030869f, -0.011784f, 0.001649f, 0.004660f, -0.016803f, -0.028503f, 0.003236f, - -0.015794f, -0.025774f, -0.010334f, 0.003511f, 0.001813f, -0.002209f, -0.010290f, -0.000946f, -0.009928f, 0.000237f, -0.011722f, 0.000043f, 0.011279f, -0.020137f, 0.013618f, 0.018805f, -0.011813f, -0.011921f, 0.011307f, 0.007891f, 0.000969f, 0.054560f, 0.006980f, 0.036648f, -0.023386f, -0.001636f, -0.028766f, -0.022059f, 0.008007f, -0.022165f, -0.028917f, -0.020268f, -0.021229f, -0.004526f, -0.003545f, -0.025942f, -0.025917f, 0.038263f, 0.009049f, 0.002854f, -0.001794f, 0.019904f, 0.014375f, 0.023791f, 0.001460f, 0.022310f, -0.008328f, 0.004847f, -0.037115f, 0.033389f, 0.021568f, 0.001328f, -0.016897f, -0.004459f, 0.026484f, -0.014482f, -0.012324f, 0.029904f, -0.030007f, -0.023431f, -0.007790f, -0.019152f, -0.005352f, -0.035117f, 0.004578f, -0.022593f, 0.012637f, -0.000364f, 0.002469f, 0.016090f, 0.002545f, 0.010619f, 0.015216f, 0.014621f, 0.011284f, 0.021501f, -0.000052f, 0.013812f, 0.011694f, -0.020036f, 0.027346f, 0.004914f, 0.010998f, -0.018878f, 0.020602f, 0.008144f, 0.013508f, 0.001678f, 0.002769f, -0.005613f, -0.025043f, 0.003002f, 0.009072f, 0.011984f, 0.012565f, 0.000830f, - -0.029945f, -0.019399f, 0.015625f, 0.007750f, 0.000796f, -0.012762f, 0.009585f, -0.012362f, -0.030333f, 0.036309f, 0.020025f, 0.014633f, -0.018979f, -0.010269f, -0.023894f, -0.064709f, -0.006090f, -0.011660f, 0.003587f, -0.017576f, -0.020089f, -0.030524f, 0.000004f, 0.005272f, 0.029475f, -0.030958f, 0.005613f, -0.003507f, 0.010011f, -0.028486f, -0.036008f, -0.023188f, 0.011494f, -0.000919f, -0.047961f, 0.030557f, 0.032494f, -0.013318f, 0.028051f, 0.010754f, -0.039998f, -0.005680f, 0.057454f, -0.006155f, -0.034603f, -0.004083f, -0.001293f, -0.030347f, 0.024682f, 0.006228f, -0.013772f, 0.025656f, 0.018415f, 0.058527f, 0.035898f, 0.002323f, 0.006720f, 0.055201f, -0.011220f, 0.014957f, -0.019340f, -0.030358f, -0.006726f, -0.020265f, 0.007620f, -0.000393f, 0.013694f, -0.000525f, -0.000940f, -0.008044f, 0.045416f, 0.003056f, -0.030349f, -0.025586f, -0.002875f, -0.006011f, 0.002062f, 0.014648f, 0.042069f, 0.025467f, 0.011641f, -0.022853f, 0.033690f, 0.055594f, -0.007941f, 0.025465f, 0.027232f, 0.066683f, 0.016604f, 0.012905f, 0.024216f, 0.028408f, 0.020027f, -0.022755f, -0.017316f, 0.015126f, - -0.035831f, -0.024791f, -0.024005f, 0.027149f, 0.029686f, 0.016198f, -0.000639f, 0.019434f, 0.049131f, -0.025465f, 0.041320f, 0.032381f, 0.004230f, 0.032209f, -0.018875f, -0.005259f, 0.011545f, 0.038639f, 0.068396f, 0.007887f, -0.006624f, 0.007840f, -0.003285f, -0.010490f, 0.002337f, 0.007844f, -0.016320f, -0.021310f, 0.007728f, -0.010631f, -0.006088f, 0.018213f, -0.000735f, 0.034962f, -0.017817f, 0.034348f, 0.016409f, 0.004346f, -0.019380f, 0.007418f, 0.033176f, 0.010807f, -0.017025f, 0.007811f, -0.004208f, 0.002237f, 0.019286f, -0.025700f, -0.014620f, 0.031622f, 0.000272f, -0.005975f, 0.025789f, 0.000257f, 0.008778f, 0.007581f, -0.025671f, -0.044060f, -0.010335f, 0.017636f, 0.028599f, 0.008181f, -0.023310f, 0.031204f, -0.010490f, 0.061409f, -0.031067f, 0.042064f, -0.024445f, 0.016489f, 0.033091f, -0.048378f, -0.053668f, 0.002031f, -0.016254f, 0.016029f, 0.015128f, 0.005026f, -0.009426f, -0.028225f, 0.019003f, -0.001590f, 0.035119f, 0.019868f, 0.032375f, 0.012717f, 0.017722f, -0.004893f, 0.023998f, 0.013632f, -0.018479f, 0.008517f, -0.002369f, -0.052750f, 0.041880f, 0.054895f, - -0.014992f, -0.004676f, 0.017751f, 0.073419f, -0.000363f, -0.047329f, -0.020455f, 0.006681f, 0.006127f, -0.016636f, 0.011989f, -0.012693f, 0.020986f, -0.040507f, -0.000535f, 0.021263f, -0.018441f, -0.019619f, 0.000751f, -0.040076f, -0.014166f, -0.014714f, -0.062486f, -0.053045f, -0.031910f, 0.019606f, 0.023368f, -0.007039f, -0.045258f, 0.002305f, -0.001132f, -0.004016f, 0.005881f, -0.023931f, 0.048497f, -0.017155f, 0.003822f, 0.054131f, -0.052351f, 0.021336f, 0.005658f, -0.019942f, 0.017866f, -0.016077f, -0.043022f, -0.001873f, 0.032019f, -0.018337f, -0.028106f, 0.011687f, 0.001848f, 0.030315f, -0.002619f, -0.054132f, 0.001199f, -0.033308f, 0.047490f, -0.021456f, 0.004667f, 0.009094f, 0.003056f, -0.010707f, -0.035757f, 0.009999f, 0.031262f, 0.006053f, 0.032300f, -0.056128f, -0.031758f, -0.013216f, -0.003788f, 0.000391f, -0.043670f, 0.030225f, -0.010077f, -0.038827f, 0.058338f, 0.002230f, -0.098666f, 0.040326f, -0.013241f, 0.008404f, 0.010442f, 0.014036f, 0.024606f, 0.009650f, -0.017713f, -0.003501f, 0.024676f, 0.017449f, -0.019551f, -0.000116f, -0.015539f, -0.007104f, -0.048656f, -0.005167f, - 0.023391f, 0.030192f, 0.006448f, -0.010391f, 0.032079f, -0.031986f, 0.036515f, -0.019887f, -0.012151f, 0.005707f, -0.011723f, 0.011182f, -0.029686f, -0.038094f, -0.044718f, -0.012646f, 0.022393f, -0.007263f, -0.000373f, 0.028615f, 0.006814f, 0.006443f, -0.001596f, 0.002725f, -0.010155f, 0.002252f, 0.028132f, 0.019858f, 0.029647f, 0.028066f, 0.029647f, 0.023088f, -0.019503f, -0.009404f, 0.006226f, 0.000407f, -0.036797f, 0.026250f, -0.007985f, -0.030782f, 0.040180f, 0.002278f, 0.004910f, 0.001742f, -0.017334f, -0.001947f, 0.015312f, 0.028794f, 0.018692f, 0.004187f, 0.010234f, -0.038938f, -0.009026f, -0.011078f, 0.020536f, 0.011620f, -0.011387f, -0.014921f, 0.134877f, -0.132455f, -0.006654f, -0.143998f, -0.022311f, -0.054733f, -0.006688f, 0.035201f, -0.017875f, -0.039799f, 0.062825f, -0.016918f, -0.010958f, 0.002185f, 0.019368f, -0.002115f, 0.052237f, 0.034738f, 0.020747f, -0.030640f, 0.002093f, -0.020807f, -0.021344f, -0.014039f, 0.000856f, -0.006272f, -0.005670f, -0.017055f, -0.003749f, 0.029282f, 0.003717f, 0.019576f, 0.019275f, -0.001005f, 0.025707f, 0.037709f, 0.002279f, -0.006929f, - -0.019026f, -0.022376f, 0.009650f, 0.010988f, -0.018724f, 0.032407f, -0.041016f, -0.040974f, 0.005269f, -0.013514f, 0.023220f, -0.037635f, 0.017486f, -0.073453f, -0.038976f, -0.058315f, -0.004080f, -0.027710f, -0.001386f, -0.015923f, -0.021041f, -0.017170f, -0.000042f, 0.007866f, -0.056586f, 0.009873f, -0.010431f, 0.010408f, 0.003134f, -0.022819f, -0.044241f, 0.038034f, -0.024436f, 0.000904f, 0.035003f, 0.004268f, -0.000790f, 0.026626f, -0.010571f, 0.112135f, 0.057833f, 0.029362f, -0.023451f, -0.010920f, -0.054023f, 0.015283f, 0.048808f, -0.006277f, -0.007791f, 0.077528f, -0.010310f, -0.014131f, 0.040238f, 0.057322f, 0.012661f, 0.058342f, -0.010808f, 0.010463f, 0.036253f, 0.039543f, 0.062145f, 0.049782f, 0.000733f, -0.019212f, 0.020971f, 0.023415f, 0.023566f, 0.027082f, 0.047354f, 0.023287f, 0.059340f, -0.020131f, 0.001814f, 0.017864f, 0.018519f, 0.048799f, 0.030901f, 0.052062f, -0.033358f, -0.010492f, 0.023611f, -0.038634f, 0.035225f, 0.033117f, 0.034354f, 0.013737f, -0.036535f, -0.014251f, 0.078825f, 0.019519f, 0.054202f, 0.042069f, 0.049587f, -0.009972f, 0.064649f, 0.095367f, - 0.036341f, 0.007353f, 0.070663f, 0.045071f, -0.022759f, -0.017976f, -0.029448f, -0.028640f, 0.031608f, 0.029828f, 0.006123f, -0.031766f, 0.003922f, -0.029853f, 0.002358f, -0.017555f, 0.020085f, -0.067364f, -0.002959f, -0.009016f, -0.035445f, 0.016421f, -0.042672f, 0.072368f, 0.102521f, 0.059832f, -0.027841f, -0.057338f, -0.022361f, 0.050978f, -0.016703f, -0.042616f, 0.075596f, -0.053602f, 0.044336f, 0.026092f, -0.062631f, -0.024996f, -0.008471f, -0.099901f, 0.001728f, 0.011884f, -0.050720f, 0.099165f, -0.036483f, 0.092240f, -0.071412f, 0.010879f, 0.001482f, 0.067808f, 0.095598f, -0.007228f, 0.030223f, 0.047614f, -0.058074f, 0.037733f, -0.077583f, -0.019165f, 0.136441f, -0.006600f, -0.042890f, -0.006184f, -0.082967f, 0.004891f, -0.029405f, 0.089417f, 0.028451f, 0.042558f, -0.018710f, -0.021457f, -0.049291f, -0.038630f, 0.004279f, 0.007493f, -0.006054f, 0.060418f, -0.020887f, 0.013130f, -0.067815f, -0.029479f, 0.032913f, -0.088436f, -0.043813f, -0.025302f, -0.039712f, 0.086149f, -0.003390f, 0.092682f, 0.054994f, 0.030117f, 0.023547f, -0.020203f, -0.060963f, 0.039545f, -0.080311f, -0.045028f, - 0.061008f, 0.066673f, -0.108215f, 0.116961f, -0.001948f, 0.009744f, -0.036204f, 0.094522f, 0.023045f, 0.061096f, 0.023882f, -0.038915f, 0.014592f, 0.034154f, -0.056264f, 0.040715f, 0.001868f, 0.027150f, -0.075420f, -0.005523f, 0.019997f, 0.070921f, -0.028178f, -0.057850f, -0.001281f, 0.070407f, 0.038319f, -0.026608f, -0.059144f, -0.002866f, 0.052011f, 0.006665f, 0.004925f, 0.013994f, 0.038251f, 0.092831f, -0.129595f, -0.021852f, 0.014165f, 0.072556f, 0.017856f, -0.040168f, -0.008261f, 0.027192f, 0.068335f, -0.007453f, 0.004909f, -0.126560f, 0.038103f, 0.018613f, 0.036053f, -0.092424f, 0.082481f, 0.068017f, 0.028041f, -0.042937f, -0.002226f, -0.047609f, 0.036185f, 0.057199f, 0.027127f, 0.025170f, -0.002885f, 0.041964f, -0.063236f, 0.058609f, -0.015741f, -0.026616f, 0.076250f, 0.055033f, 0.007383f, -0.029376f, -0.055983f, 0.035687f, 0.053788f, -0.140387f, -0.001928f, -0.094626f, 0.050376f, 0.011902f, 0.033148f, 0.039211f, 0.056024f, 0.021500f, 0.020052f, -0.022690f, 0.030411f, 0.007635f, 0.066095f, -0.004692f, -0.015660f, 0.052036f, 0.041217f, -0.005842f, 0.006552f, -0.018723f, - 0.003992f, 0.018098f, -0.001485f, -0.010271f, 0.031708f, -0.020156f, 0.006443f, 0.040545f, -0.004656f, 0.024340f, -0.035303f, -0.005716f, 0.008963f, -0.013858f, -0.002378f, 0.006621f, 0.031794f, -0.004973f, -0.042610f, 0.003914f, 0.097069f, 0.021313f, -0.046159f, 0.017066f, -0.047036f, -0.033198f, -0.022069f, -0.005262f, 0.063912f, -0.004549f, -0.042534f, 0.097795f, -0.098905f, 0.019452f, 0.111019f, 0.013000f, 0.079736f, -0.055163f, -0.100744f, 0.036000f, 0.009344f, 0.086326f, 0.010466f, -0.046070f, 0.045626f, -0.009064f, -0.002054f, -0.018691f, 0.003893f, -0.028089f, 0.022850f, 0.005805f, 0.031729f, -0.034386f, -0.020248f, -0.009804f, 0.052314f, 0.020563f, -0.039536f, -0.219107f, -0.475374f, -0.201489f, -0.294556f, -0.421711f, 0.193896f, 0.037861f, 0.102650f, 0.548234f, 0.418233f, 0.234601f, 0.448188f, 0.328377f, 0.038991f, 0.094055f, 0.075573f, -0.243962f, -0.210822f, -0.114836f, -0.360455f, -0.346748f, -0.144812f, -0.188640f, -0.256010f, -0.120158f, -0.104688f, -0.261555f, -0.220145f, -0.038056f, -0.133702f, -0.215969f, -0.086176f, 0.040869f, -0.160442f, 0.021491f, 0.191668f, -0.036953f, - -0.048611f, 0.265068f, 0.210160f, -0.030494f, 0.316239f, 0.366689f, 0.139936f, 0.343616f, 0.493428f, 0.284804f, 0.248338f, 0.593082f, 0.473217f, 0.348802f, 0.420961f, 0.559709f, 0.193013f, 0.064940f, 0.229533f, -0.206658f, -0.558066f, -0.411359f, -0.614235f, -0.993089f, -0.884557f, -0.942476f, -1.087174f, -1.112119f, -0.951825f, -0.832858f, -0.825504f, -0.582218f, -0.244430f, -0.163321f, 0.001863f, 0.313772f, 0.578457f, 0.611424f, 0.730503f, 0.614709f, 0.402061f} - }, - { - {-0.000246f, -0.000125f, 0.000592f, -0.012374f, 0.002214f, -0.000343f, 0.000393f, -0.007583f, 0.002277f, -0.013588f, -0.007281f, 0.003431f, -0.002907f, 0.004367f, 0.007197f, -0.004373f, 0.005096f, -0.006870f, -0.000749f, 0.006236f, -0.001860f, 0.003853f, -0.010508f, 0.001281f, -0.000024f, 0.003145f, -0.002468f, 0.003660f, -0.005238f, -0.002844f, 0.003683f, -0.009042f, 0.002679f, 0.002601f, -0.002939f, -0.004941f, 0.013041f, -0.003018f, 0.003506f, -0.005229f, -0.001820f, 0.001758f, -0.010830f, -0.007003f, -0.005797f, -0.004128f, -0.005221f, -0.005334f, -0.000098f, 0.000268f, -0.005093f, 0.001782f, 0.000363f, 0.005152f, -0.004259f, -0.002033f, -0.000488f, 0.002273f, -0.002616f, -0.007328f, 0.007933f, 0.006107f, 0.003430f, -0.002293f, 0.003225f, 0.000714f, 0.004980f, -0.006074f, -0.011528f, -0.009813f, 0.001294f, -0.006024f, 0.004277f, 0.009353f, 0.002070f, 0.006179f, -0.016268f, 0.009110f, -0.012446f, 0.001143f, -0.005450f, -0.001941f, 0.004415f, -0.007863f, -0.013966f, -0.003841f, 0.000862f, -0.008188f, -0.004806f, 0.006271f, -0.004216f, 0.002705f, -0.017389f, -0.001837f, 0.011307f, 0.005793f, - -0.019409f, -0.006973f, -0.005281f, -0.005472f, 0.006214f, -0.003185f, -0.010217f, -0.006661f, -0.007367f, -0.007659f, 0.012386f, 0.003537f, 0.007903f, -0.005679f, 0.010459f, 0.009283f, 0.006707f, -0.004265f, -0.009256f, -0.007547f, 0.000563f, 0.001370f, 0.014340f, 0.004705f, 0.002593f, -0.007290f, 0.001418f, 0.000171f, 0.001512f, 0.005291f, 0.003270f, -0.010331f, -0.008510f, -0.004812f, 0.005191f, 0.000746f, -0.001962f, -0.011040f, -0.003314f, 0.003623f, 0.004693f, -0.004778f, -0.001677f, -0.000306f, 0.004995f, -0.001652f, -0.005632f, -0.000581f, 0.000748f, -0.007812f, 0.015237f, 0.000291f, -0.010521f, -0.000774f, -0.001889f, -0.010345f, -0.009354f, 0.010985f, 0.010062f, -0.007815f, 0.006114f, 0.000804f, 0.003215f, -0.026094f, 0.010309f, -0.003686f, -0.017843f, -0.023193f, 0.000748f, 0.017183f, 0.001131f, 0.011237f, 0.000507f, -0.020924f, -0.007223f, 0.002718f, 0.007491f, -0.003446f, -0.001743f, -0.008625f, 0.001243f, -0.001313f, 0.015026f, 0.007931f, 0.003223f, 0.003017f, 0.004098f, 0.005542f, 0.013672f, 0.008629f, -0.012057f, -0.000658f, 0.002799f, 0.003298f, -0.014367f, 0.005060f, - -0.004299f, -0.008671f, -0.002615f, 0.000035f, 0.009754f, 0.002958f, -0.005563f, 0.010390f, 0.015400f, -0.002818f, -0.005991f, 0.004229f, -0.001243f, 0.008972f, 0.008482f, 0.007282f, -0.010541f, -0.007348f, 0.007221f, -0.002576f, -0.002846f, -0.007362f, 0.000574f, -0.011192f, 0.006689f, 0.006974f, 0.007910f, 0.002814f, 0.009161f, -0.009741f, -0.007226f, 0.014362f, -0.000198f, 0.005920f, 0.014573f, 0.013126f, 0.000929f, 0.004914f, -0.011521f, -0.009851f, 0.005240f, -0.002939f, -0.004358f, -0.005529f, -0.005126f, 0.003768f, -0.013265f, -0.007785f, -0.016323f, -0.019667f, -0.003790f, 0.015785f, 0.010185f, -0.006838f, -0.002008f, -0.002579f, -0.003938f, -0.014289f, 0.009860f, -0.003859f, -0.003754f, 0.000511f, 0.006397f, -0.003522f, 0.000424f, -0.000875f, 0.009354f, -0.009191f, 0.009391f, 0.004786f, 0.011296f, -0.004330f, 0.008717f, 0.003485f, -0.005587f, 0.007510f, -0.005517f, 0.004110f, 0.008375f, -0.006893f, 0.008811f, -0.005833f, -0.004369f, -0.001887f, -0.002702f, 0.003915f, -0.002649f, -0.007363f, 0.002676f, -0.006502f, 0.001257f, 0.000139f, 0.000897f, 0.012719f, 0.002604f, -0.003833f, - 0.000088f, -0.006304f, -0.007650f, 0.003103f, -0.001804f, 0.011869f, 0.013127f, 0.004260f, -0.003548f, -0.003178f, -0.000004f, -0.006475f, -0.005871f, 0.005026f, 0.010384f, 0.025694f, -0.010668f, 0.010628f, -0.012889f, -0.010793f, 0.000182f, -0.002872f, -0.002647f, 0.003736f, -0.005360f, 0.011232f, 0.010893f, 0.009428f, -0.002662f, -0.001003f, -0.004705f, -0.011580f, 0.001946f, -0.006862f, -0.001211f, 0.001525f, -0.003853f, 0.006961f, 0.002635f, -0.000552f, -0.019373f, -0.007858f, -0.012178f, 0.000741f, -0.007939f, -0.012043f, -0.005323f, -0.006509f, -0.007458f, 0.012607f, -0.009731f, 0.008999f, 0.000833f, -0.003125f, 0.004931f, 0.004546f, -0.008715f, -0.002010f, 0.000265f, 0.009909f, -0.000819f, -0.012520f, -0.016367f, -0.016652f, 0.004544f, -0.005751f, 0.000467f, -0.000819f, 0.002571f, 0.006365f, 0.009616f, -0.005959f, -0.003382f, 0.003799f, 0.003380f, 0.001940f, 0.012050f, -0.005894f, 0.007499f, -0.012851f, 0.027003f, 0.004266f, -0.002736f, 0.006313f, 0.002701f, 0.006397f, -0.007353f, 0.000195f, 0.002129f, 0.001116f, -0.001644f, -0.010470f, -0.012201f, 0.002110f, 0.002617f, 0.001120f, - -0.001673f, -0.007194f, 0.004755f, 0.003848f, -0.010985f, 0.013540f, -0.016229f, 0.020675f, -0.001695f, 0.007080f, 0.003314f, -0.000150f, -0.001891f, 0.004459f, 0.019425f, 0.021702f, -0.003806f, 0.004112f, -0.002282f, -0.002801f, 0.003145f, 0.004791f, 0.015006f, -0.001636f, 0.004754f, -0.007219f, 0.008359f, 0.002005f, 0.011888f, 0.005822f, 0.011151f, -0.015462f, 0.006891f, 0.005895f, -0.004646f, 0.000014f, 0.012069f, 0.000217f, 0.001197f, 0.003740f, 0.007440f, -0.002295f, -0.000761f, 0.022866f, 0.011073f, 0.002121f, 0.002311f, -0.004667f, 0.010554f, -0.013679f, -0.019928f, -0.024340f, -0.001305f, 0.012834f, -0.000219f, 0.006376f, 0.017485f, 0.006801f, -0.002948f, -0.006185f, 0.009327f, -0.001927f, 0.022329f, 0.009834f, 0.003287f, 0.002872f, -0.012265f, 0.002273f, 0.008960f, -0.005066f, -0.014156f, 0.001968f, 0.003572f, -0.028590f, 0.004311f, -0.001136f, 0.021516f, -0.014154f, 0.010093f, -0.030363f, 0.013542f, -0.001882f, -0.014861f, -0.016534f, -0.011138f, 0.010468f, 0.008537f, 0.024947f, 0.004382f, 0.009019f, 0.024084f, -0.002911f, -0.015384f, 0.003555f, -0.011552f, 0.004188f, - 0.019914f, 0.004519f, -0.003927f, -0.001167f, -0.002249f, 0.006530f, 0.008556f, -0.000486f, 0.006185f, 0.010653f, -0.004610f, 0.004093f, -0.009860f, 0.000181f, -0.012668f, -0.001153f, 0.003388f, -0.005625f, 0.011901f, 0.008178f, 0.010396f, 0.018760f, 0.002693f, 0.022487f, 0.017983f, 0.009025f, -0.009486f, 0.025658f, 0.012249f, 0.005449f, 0.023247f, -0.001197f, 0.002277f, 0.002984f, 0.008997f, -0.003257f, -0.004350f, -0.013463f, -0.012247f, -0.010306f, 0.002242f, -0.007776f, 0.021103f, -0.009869f, 0.010184f, 0.013424f, -0.004053f, 0.002444f, -0.002597f, -0.001023f, -0.015357f, -0.018552f, 0.013535f, 0.000273f, 0.024932f, 0.001027f, 0.000352f, -0.002205f, -0.004823f, 0.004579f, 0.001059f, -0.012560f, -0.016248f, -0.021891f, -0.011548f, -0.022892f, -0.014671f, -0.007668f, -0.017082f, -0.010584f, -0.007491f, -0.008640f, -0.023102f, 0.016075f, 0.009868f, 0.000863f, 0.008289f, 0.004134f, -0.006462f, 0.028968f, 0.001700f, -0.009537f, -0.005262f, -0.019024f, -0.008417f, 0.021748f, 0.000970f, -0.017440f, -0.017955f, 0.003099f, -0.018169f, 0.006333f, 0.006293f, -0.013534f, 0.000509f, 0.005022f, - 0.000963f, 0.021651f, 0.006263f, -0.008875f, 0.002114f, -0.010728f, 0.010612f, 0.002331f, 0.004735f, -0.024782f, 0.017777f, -0.007866f, 0.007492f, 0.001626f, 0.003599f, 0.005330f, 0.000887f, -0.006265f, -0.000292f, -0.008705f, 0.000412f, -0.018793f, 0.000395f, -0.020239f, 0.029437f, -0.003121f, 0.019163f, -0.011460f, -0.005178f, -0.000568f, -0.012390f, -0.004945f, 0.013368f, 0.003375f, 0.003016f, -0.012912f, -0.000228f, 0.009250f, -0.024697f, -0.000124f, -0.010808f, -0.008576f, 0.017113f, -0.028340f, -0.026955f, 0.006898f, 0.035313f, 0.000871f, 0.003079f, 0.002714f, -0.005756f, 0.019485f, 0.018570f, 0.010945f, 0.004986f, -0.005104f, -0.029345f, 0.017197f, -0.000294f, -0.023119f, -0.007950f, 0.005455f, -0.001674f, 0.000290f, 0.001833f, -0.005470f, -0.023400f, -0.001157f, 0.000322f, -0.004027f, -0.010189f, 0.007013f, 0.019103f, -0.025363f, 0.015149f, -0.009379f, -0.005604f, 0.001733f, 0.011762f, 0.041738f, -0.027751f, -0.006515f, 0.001660f, -0.002392f, -0.005961f, 0.001660f, -0.011420f, 0.003889f, -0.010513f, 0.028865f, 0.008490f, 0.005696f, 0.006435f, -0.005659f, -0.003224f, 0.015502f, - -0.004111f, 0.006988f, -0.014488f, 0.022357f, -0.001189f, -0.015025f, 0.028181f, -0.019003f, 0.011265f, 0.004585f, 0.003584f, 0.022908f, -0.013060f, 0.010191f, -0.006774f, 0.000462f, 0.030387f, 0.002409f, 0.007938f, 0.009052f, -0.005067f, -0.017423f, -0.013696f, 0.002163f, 0.030370f, 0.017288f, 0.003734f, -0.027074f, 0.003904f, -0.014842f, 0.000073f, 0.030491f, 0.029201f, 0.014879f, 0.019726f, -0.017691f, -0.036941f, -0.019182f, -0.026639f, 0.014908f, -0.000307f, -0.004324f, -0.000150f, -0.019942f, -0.006031f, 0.006433f, -0.003842f, -0.007426f, -0.007506f, 0.021774f, -0.001461f, 0.006123f, -0.006195f, 0.014404f, 0.002912f, -0.007832f, -0.017208f, -0.012813f, 0.038882f, -0.001309f, -0.008911f, 0.012854f, -0.022377f, 0.007422f, -0.012860f, -0.038436f, -0.008852f, -0.004543f, 0.011647f, 0.005081f, 0.010205f, 0.003909f, 0.015244f, 0.001262f, 0.000902f, 0.009280f, -0.038217f, -0.005171f, -0.010422f, -0.001783f, 0.003464f, 0.022885f, 0.023869f, 0.009877f, -0.006608f, -0.015293f, -0.022191f, -0.005790f, -0.013231f, 0.004555f, -0.006744f, -0.004735f, -0.014417f, -0.043059f, -0.027851f, -0.005730f, - -0.009584f, 0.023405f, 0.016305f, -0.002727f, 0.039548f, -0.038123f, -0.008263f, -0.013763f, 0.042163f, 0.020835f, -0.012745f, 0.016265f, 0.006622f, -0.015028f, 0.029354f, -0.030396f, 0.016392f, -0.013393f, 0.003265f, 0.004559f, -0.009708f, 0.028710f, -0.018576f, 0.018106f, -0.007281f, -0.039325f, -0.005947f, 0.029572f, -0.016372f, -0.026393f, 0.001147f, -0.002124f, -0.040655f, -0.006374f, 0.017379f, 0.008465f, 0.022844f, 0.017712f, -0.003929f, 0.041363f, -0.008788f, -0.010685f, -0.018853f, -0.016593f, -0.016910f, 0.012661f, 0.015609f, -0.011017f, -0.013741f, 0.006675f, -0.011829f, 0.018712f, -0.003889f, 0.011196f, -0.006081f, -0.008089f, -0.007259f, 0.002204f, -0.022766f, 0.008977f, 0.017569f, -0.001088f, 0.007950f, 0.013320f, 0.012610f, 0.025185f, -0.014933f, 0.011021f, 0.017358f, 0.002638f, -0.035611f, 0.033851f, -0.017562f, -0.047822f, 0.002564f, 0.038093f, 0.048005f, 0.010869f, -0.014465f, -0.010289f, 0.007072f, -0.005804f, -0.004815f, 0.022414f, 0.022763f, -0.007613f, 0.022070f, -0.022520f, -0.000590f, 0.020348f, -0.006283f, 0.024151f, 0.012745f, -0.000600f, -0.027384f, 0.013885f, - -0.004431f, -0.004652f, 0.004142f, 0.000250f, -0.000541f, 0.043568f, -0.017495f, 0.023499f, 0.037919f, 0.026981f, 0.015630f, 0.003076f, -0.020408f, 0.025924f, -0.010112f, 0.024874f, -0.009526f, 0.007885f, -0.021392f, -0.001882f, -0.019965f, -0.012280f, 0.006730f, -0.018534f, -0.002618f, -0.004440f, 0.002567f, 0.022300f, -0.018969f, -0.016140f, -0.003338f, -0.007755f, -0.000655f, -0.015701f, -0.020719f, -0.027401f, 0.007520f, 0.028028f, 0.003002f, -0.011188f, 0.007623f, 0.009577f, 0.024668f, -0.016295f, -0.005981f, -0.001456f, 0.006381f, 0.020325f, 0.008423f, 0.011059f, -0.004051f, 0.004123f, 0.024830f, -0.084627f, -0.040478f, 0.027564f, -0.069174f, -0.048139f, -0.003535f, -0.028558f, -0.019674f, 0.020425f, 0.023530f, 0.006793f, -0.004844f, 0.008118f, 0.068179f, -0.008990f, 0.010554f, 0.025819f, 0.029686f, -0.031898f, -0.016647f, -0.015442f, 0.024926f, 0.027013f, 0.013490f, 0.004435f, 0.025497f, -0.008281f, -0.013375f, 0.017499f, 0.034649f, 0.001792f, 0.010927f, 0.034926f, 0.025894f, 0.020704f, -0.016407f, 0.005998f, 0.010386f, -0.000841f, -0.001010f, 0.022090f, -0.007938f, -0.001169f, - -0.002767f, 0.014455f, 0.000101f, -0.025869f, -0.017245f, 0.004160f, -0.034506f, 0.024870f, -0.008109f, 0.055993f, 0.001663f, 0.030298f, 0.005533f, -0.002268f, -0.019060f, -0.001788f, 0.006500f, -0.024953f, -0.013267f, -0.028977f, -0.004548f, 0.013540f, 0.018446f, -0.009305f, -0.047042f, 0.015930f, -0.008804f, 0.015189f, -0.018225f, -0.019581f, 0.012149f, -0.028709f, -0.025275f, 0.047693f, 0.035262f, -0.014408f, -0.038331f, 0.018085f, -0.019475f, 0.009797f, 0.000616f, -0.018478f, 0.037467f, -0.047394f, -0.000857f, -0.057445f, 0.002586f, 0.048604f, 0.067465f, 0.032598f, -0.010214f, 0.031904f, -0.001143f, -0.002977f, 0.004495f, -0.003897f, 0.017518f, -0.000687f, -0.029800f, 0.003178f, -0.041872f, 0.016579f, -0.012072f, -0.008183f, 0.030217f, 0.000888f, -0.031834f, -0.035551f, 0.009951f, 0.006693f, -0.017083f, -0.013762f, 0.029194f, -0.038496f, 0.001253f, -0.006346f, 0.015699f, -0.008946f, -0.007149f, -0.030220f, -0.012041f, -0.012163f, -0.004311f, 0.025319f, -0.025730f, 0.012169f, -0.001509f, -0.002344f, 0.005545f, 0.012588f, -0.044497f, -0.002150f, 0.008474f, -0.001067f, 0.019524f, -0.011326f, - -0.018094f, -0.005684f, -0.049406f, -0.018826f, -0.019789f, 0.005818f, 0.025455f, 0.038991f, -0.012206f, 0.031963f, -0.039205f, 0.077980f, 0.010003f, -0.000857f, 0.044853f, -0.014264f, 0.042723f, 0.002455f, -0.030463f, -0.000642f, -0.004593f, 0.019848f, 0.013072f, -0.018550f, 0.021498f, 0.000450f, -0.047976f, -0.052192f, -0.004994f, -0.015671f, 0.013047f, -0.002167f, -0.018450f, -0.047016f, -0.041087f, 0.022502f, -0.034964f, -0.007746f, 0.002206f, 0.011173f, 0.002603f, 0.033699f, 0.002800f, -0.016853f, 0.022479f, -0.002854f, 0.003262f, 0.020923f, -0.027412f, -0.001638f, 0.005890f, -0.027766f, 0.016885f, 0.023398f, 0.010052f, 0.020856f, 0.010705f, 0.032208f, 0.008632f, 0.023525f, -0.032844f, -0.009962f, -0.005367f, -0.043646f, -0.000410f, -0.004449f, 0.018179f, -0.002613f, 0.020828f, -0.003156f, -0.025793f, -0.016968f, -0.001675f, -0.040201f, 0.017380f, 0.001587f, -0.008421f, 0.024264f, 0.014401f, 0.020289f, 0.019674f, 0.006870f, -0.003473f, 0.017881f, -0.056392f, 0.017392f, 0.005203f, 0.025340f, -0.012154f, -0.038349f, 0.020791f, -0.006023f, 0.033770f, -0.055268f, 0.029152f, 0.027033f, - 0.098902f, 0.074745f, 0.010096f, 0.021676f, 0.006238f, 0.057437f, 0.001533f, 0.027966f, -0.026144f, 0.068033f, -0.027013f, 0.061701f, -0.002855f, 0.039422f, -0.004682f, 0.027828f, -0.027768f, 0.006684f, 0.013766f, -0.015144f, -0.005101f, -0.008129f, -0.006544f, 0.018415f, 0.000262f, -0.015866f, -0.022072f, -0.033003f, -0.042206f, -0.020184f, -0.007320f, 0.000254f, 0.012933f, -0.035377f, 0.014683f, -0.019479f, -0.030373f, -0.006266f, -0.022325f, 0.009994f, -0.005776f, -0.046062f, -0.011428f, -0.023449f, -0.028267f, -0.029184f, 0.025857f, 0.035264f, -0.074569f, 0.016677f, 0.005824f, 0.020650f, 0.006489f, -0.009448f, 0.043770f, 0.024999f, 0.022326f, -0.062037f, -0.028904f, -0.001040f, 0.013837f, 0.050931f, 0.000268f, -0.007271f, 0.000520f, 0.042942f, 0.036588f, -0.037504f, 0.038703f, 0.002307f, 0.005361f, -0.008202f, 0.018492f, -0.054479f, -0.030659f, 0.023624f, -0.014275f, 0.020124f, 0.033284f, -0.045136f, 0.009395f, -0.027318f, 0.065836f, -0.044634f, 0.035666f, 0.032540f, -0.017269f, -0.068385f, -0.041235f, -0.007879f, -0.020770f, -0.005547f, -0.033243f, -0.050835f, -0.066344f, -0.039644f, - -0.045369f, 0.014380f, -0.039330f, 0.011209f, 0.000674f, -0.007818f, -0.007295f, -0.033180f, -0.012722f, -0.034008f, 0.005243f, 0.023260f, 0.031747f, -0.003159f, -0.013639f, -0.034892f, -0.011134f, -0.000772f, -0.022240f, 0.001376f, -0.029294f, -0.020540f, -0.007521f, -0.029271f, 0.016079f, -0.026360f, -0.069978f, -0.001619f, -0.006148f, -0.025906f, 0.023899f, 0.017843f, 0.027692f, 0.008043f, 0.020708f, 0.046670f, 0.003892f, -0.055146f, -0.016497f, 0.019356f, -0.016367f, -0.046807f, 0.017985f, 0.028645f, 0.005200f, -0.005199f, -0.063759f, 0.045763f, -0.010069f, 0.036086f, -0.043532f, 0.036163f, 0.091928f, -0.015829f, -0.018891f, -0.080452f, 0.028206f, -0.105681f, 0.070882f, 0.026017f, -0.017685f, 0.075831f, -0.006765f, -0.037197f, 0.066822f, -0.024562f, -0.003331f, 0.015141f, 0.023458f, 0.062585f, 0.002636f, -0.003787f, 0.043426f, 0.019685f, 0.036392f, 0.045923f, 0.032955f, 0.004449f, 0.022909f, 0.005109f, -0.002627f, -0.022905f, 0.015227f, 0.024967f, 0.005152f, 0.000224f, -0.026969f, 0.014340f, -0.025417f, 0.031466f, 0.028490f, 0.006903f, 0.033687f, -0.019485f, 0.021779f, 0.037853f, - 0.021684f, -0.046524f, -0.053518f, 0.063279f, -0.007493f, 0.040393f, 0.057748f, 0.003544f, -0.001863f, -0.004006f, 0.009565f, 0.036603f, 0.030287f, 0.005695f, 0.024503f, 0.002347f, -0.033851f, -0.036253f, -0.060451f, 0.003416f, -0.026848f, 0.003259f, 0.028371f, 0.032826f, -0.058115f, 0.007053f, 0.015514f, -0.044512f, 0.001707f, 0.067671f, -0.035557f, -0.030409f, 0.026131f, -0.036025f, -0.003292f, -0.011727f, 0.006683f, -0.038233f, 0.007190f, -0.044104f, 0.087414f, 0.020714f, -0.048435f, 0.017007f, -0.012157f, -0.043057f, -0.050802f, -0.051279f, 0.013673f, -0.003397f, 0.043162f, 0.064977f, 0.030378f, 0.015084f, -0.009288f, 0.021019f, 0.000756f, -0.083738f, 0.034996f, 0.085284f, -0.057766f, -0.060061f, -0.052601f, -0.073219f, 0.050935f, -0.072098f, 0.030625f, -0.000323f, -0.010421f, -0.001244f, -0.024690f, -0.028358f, 0.033836f, -0.074125f, 0.073832f, 0.042494f, 0.008410f, -0.049042f, -0.038093f, -0.032756f, 0.005115f, 0.011789f, -0.032885f, -0.005154f, -0.024731f, 0.051066f, 0.021850f, -0.010277f, -0.003267f, 0.020402f, 0.003101f, 0.023357f, -0.044151f, -0.017918f, -0.005739f, -0.008732f, - -0.041134f, -0.029142f, 0.021886f, -0.076644f, -0.045806f, 0.003961f, 0.086487f, 0.040310f, -0.027854f, -0.004288f, -0.067434f, 0.029401f, 0.102016f, -0.000359f, -0.019908f, -0.020692f, -0.039244f, -0.001683f, -0.043022f, -0.030152f, -0.084217f, 0.016271f, -0.062558f, -0.092463f, 0.019447f, 0.048509f, 0.010452f, 0.011830f, -0.040335f, -0.049663f, -0.014426f, -0.072770f, -0.036945f, 0.017051f, -0.061557f, 0.092351f, 0.016282f, -0.024535f, 0.018176f, -0.046415f, -0.090925f, -0.031216f, -0.070029f, 0.009441f, 0.017824f, -0.026254f, -0.050413f, -0.025792f, -0.031895f, 0.024868f, -0.037540f, -0.014113f, -0.006667f, 0.039055f, -0.031112f, -0.006365f, -0.015641f, 0.009269f, 0.014744f, 0.002127f, -0.014038f, 0.040581f, 0.052189f, 0.033870f, -0.029723f, -0.023444f, -0.081642f, -0.044980f, -0.020102f, 0.020588f, 0.132115f, -0.023307f, -0.000146f, 0.059315f, -0.007016f, 0.025208f, -0.031915f, -0.031761f, -0.026892f, 0.028400f, -0.076584f, 0.000859f, -0.010622f, -0.000466f, 0.065366f, -0.028013f, 0.099770f, 0.009853f, 0.077005f, -0.094108f, -0.024697f, 0.030085f, 0.005918f, -0.035508f, -0.006029f, -0.083344f, - 0.038051f, 0.059070f, -0.044771f, -0.037231f, -0.013286f, -0.040824f, -0.048528f, 0.011309f, 0.013154f, 0.035505f, 0.000747f, 0.030778f, 0.056625f, 0.058382f, 0.038983f, 0.012116f, -0.044755f, 0.002594f, 0.022110f, 0.028529f, 0.045897f, -0.001392f, -0.024839f, -0.037075f, -0.013948f, 0.045230f, -0.020067f, 0.016453f, 0.040429f, 0.001805f, 0.080083f, 0.006962f, -0.052154f, 0.042079f, 0.043349f, 0.010122f, 0.018336f, 0.038124f, 0.005891f, 0.000653f, -0.047927f, 0.099213f, -0.109551f, -0.083137f, -0.093570f, -0.033990f, 0.018512f, -0.058006f, 0.027304f, 0.057345f, -0.018866f, 0.002195f, 0.052866f, 0.013178f, -0.059142f, -0.024429f, -0.046071f, -0.010941f, 0.002229f, -0.001809f, 0.050695f, 0.045964f, -0.013133f, -0.018387f, 0.031077f, 0.072694f, 0.011927f, 0.058194f, -0.056428f, 0.050294f, -0.027105f, 0.010866f, -0.012839f, -0.046461f, -0.023097f, -0.046223f, -0.093253f, -0.093899f, -0.067832f, 0.014221f, 0.175248f, 0.044428f, -0.023770f, -0.052679f, -0.126013f, -0.177596f, 0.040548f, 0.073813f, 0.088830f, -0.018434f, 0.008127f, -0.051977f, -0.090200f, 0.026296f, 0.016998f, 0.029649f, - 0.004831f, -0.075934f, -0.022636f, 0.018705f, -0.014649f, -0.002887f, -0.013704f, 0.099215f, 0.087760f, 0.058788f, -0.004589f, -0.042439f, -0.071415f, -0.047726f, -0.042344f, 0.067795f, -0.010268f, 0.049634f, 0.023419f, 0.023297f, -0.029369f, -0.164577f, -0.112216f, 0.056088f, -0.087969f, -0.030342f, 0.191331f, 0.130748f, 0.099595f, -0.074296f, 0.055307f, -0.051419f, 0.005430f, 0.003898f, 0.029365f, 0.080722f, 0.143968f, -0.054247f, -0.002972f, -0.093517f, -0.073398f, -0.123808f, 0.015918f, -0.004985f, -0.130773f, -0.031853f, 0.088879f, 0.032213f, 0.063155f, 0.081359f, 0.149908f, -0.106830f, -0.060699f, 0.008212f, -0.084681f, 0.034899f, -0.078727f, -0.241100f, -0.225043f, -0.132642f, -0.143697f, -0.041999f, 0.215644f, 0.105658f, 0.222078f, 0.196473f, 0.312222f, 0.220969f, 0.188464f, 0.023691f, -0.094219f, -0.201490f, -0.318650f, -0.271234f, -0.273821f, -0.146508f, -0.075264f, -0.023515f, -0.006568f, -0.000212f, 0.045919f, 0.065379f, 0.175631f, 0.104336f, 0.208826f, 0.134198f, 0.177710f, 0.059982f, 0.171382f, 0.055200f, 0.035150f, 0.035331f, -0.019721f, -0.057854f, -0.131089f, -0.147972f, - -0.270552f, -0.186114f, -0.340449f, -0.268998f, -0.411291f, -0.245094f, -0.198345f, -0.052111f, 0.101350f, 0.052551f, 0.000737f, 0.104366f, 0.226611f, 0.309376f, 0.403805f, 0.487058f, 0.412043f, 0.302934f, 0.374559f, 0.312407f, 0.168317f, 0.076303f, -0.028816f, -0.134624f, -0.314492f, -0.364143f, -0.494686f, -0.626851f, -0.734404f, -0.651958f, -0.585112f, -0.403252f, -0.286759f, 0.102712f, 0.269038f, 0.375690f, 0.469566f, 0.298396f, 0.198381f}, - {0.008274f, -0.003285f, 0.004846f, -0.012740f, -0.001221f, -0.004851f, 0.006044f, 0.001098f, -0.005217f, 0.007805f, -0.006884f, -0.001734f, 0.006210f, -0.002438f, 0.002703f, -0.010549f, -0.001854f, -0.001329f, -0.011036f, 0.001401f, 0.000151f, -0.000373f, 0.003080f, -0.005560f, 0.001310f, -0.002029f, -0.000708f, 0.011497f, -0.001256f, -0.007934f, -0.003791f, 0.000763f, 0.002716f, -0.007655f, 0.001994f, -0.005791f, -0.000128f, -0.002228f, -0.003490f, 0.006315f, 0.006160f, -0.004409f, 0.008160f, 0.008300f, -0.010337f, -0.001738f, -0.001092f, -0.009697f, -0.004175f, -0.006715f, -0.007642f, 0.001699f, 0.001843f, -0.000955f, 0.000874f, 0.003636f, 0.003931f, -0.002167f, 0.001250f, 0.003518f, 0.009760f, 0.005613f, 0.004378f, -0.004932f, 0.000434f, -0.002756f, 0.006093f, -0.006917f, -0.004986f, 0.005359f, -0.003193f, 0.005810f, -0.006740f, -0.003320f, -0.002268f, -0.004094f, -0.022622f, 0.007968f, -0.013016f, 0.006553f, -0.007475f, -0.015034f, -0.025701f, 0.004140f, 0.000460f, 0.006052f, 0.005334f, -0.002115f, -0.002146f, 0.001572f, 0.015085f, -0.011255f, -0.019723f, 0.006096f, -0.008306f, -0.013397f, - -0.000018f, -0.002307f, 0.007818f, 0.002508f, 0.005519f, -0.006227f, -0.001673f, -0.004213f, 0.012876f, -0.003941f, -0.005484f, -0.005035f, -0.002489f, -0.003539f, -0.005421f, -0.005021f, -0.003373f, 0.002208f, 0.000973f, 0.001328f, 0.000327f, 0.003021f, 0.005454f, 0.002435f, -0.005021f, -0.015157f, -0.000201f, -0.010655f, 0.001466f, -0.001080f, -0.004677f, 0.006230f, 0.000486f, -0.000329f, -0.014643f, -0.006384f, 0.002090f, -0.001517f, 0.005313f, 0.000022f, 0.004808f, -0.004614f, 0.002202f, -0.002178f, 0.009474f, -0.003520f, 0.005285f, -0.008394f, -0.007444f, -0.010448f, 0.001343f, -0.002573f, -0.001877f, 0.000052f, -0.002042f, -0.016047f, -0.003386f, -0.002162f, -0.004624f, -0.002100f, -0.005564f, 0.005246f, -0.002277f, -0.001893f, -0.000584f, 0.000093f, -0.000462f, -0.003858f, 0.014005f, 0.009106f, 0.014634f, -0.006915f, 0.014554f, -0.008701f, -0.006304f, 0.005760f, 0.016114f, -0.000315f, -0.010095f, -0.014542f, -0.010707f, -0.001952f, 0.011396f, 0.004645f, 0.003693f, 0.005248f, -0.005366f, 0.008013f, 0.000740f, 0.006024f, -0.003165f, -0.013178f, 0.003328f, -0.009068f, -0.006609f, -0.006310f, - -0.001854f, -0.016727f, -0.001112f, 0.000971f, -0.007400f, 0.015965f, -0.003348f, -0.004897f, -0.006710f, 0.000060f, 0.001360f, -0.006526f, -0.000161f, -0.008039f, -0.003524f, 0.000500f, -0.003833f, 0.011635f, -0.000073f, -0.002741f, 0.005924f, 0.004417f, 0.010070f, 0.004596f, 0.012192f, 0.003522f, 0.009891f, -0.011322f, 0.002634f, 0.009947f, -0.003621f, -0.007778f, -0.011925f, 0.000628f, -0.001098f, 0.018140f, -0.008155f, -0.006267f, 0.001872f, -0.003979f, -0.002936f, 0.009120f, -0.006994f, 0.008781f, 0.004074f, 0.000238f, 0.004527f, -0.005808f, -0.005505f, -0.010224f, -0.010987f, 0.014607f, 0.006963f, 0.005160f, 0.007868f, -0.005066f, -0.003324f, -0.003723f, 0.018481f, -0.007096f, 0.020223f, -0.000659f, -0.005043f, -0.004834f, -0.010581f, -0.011462f, -0.013832f, -0.000856f, -0.003417f, 0.002516f, 0.013541f, -0.001156f, -0.006211f, -0.018776f, 0.000748f, 0.014874f, 0.021972f, -0.010306f, 0.005746f, 0.003978f, -0.005465f, -0.005016f, 0.005808f, 0.020643f, -0.004842f, 0.003161f, -0.001672f, -0.003149f, -0.001834f, 0.009793f, 0.014459f, -0.011047f, -0.005785f, 0.004233f, 0.018927f, 0.002878f, - 0.013440f, -0.011205f, -0.009983f, -0.000940f, -0.001559f, 0.003338f, 0.002961f, -0.000839f, 0.001267f, 0.001189f, -0.004849f, 0.001269f, 0.006063f, 0.003212f, -0.003934f, 0.029189f, -0.020967f, -0.005051f, -0.009024f, 0.001786f, 0.007383f, 0.013736f, -0.014804f, 0.009243f, -0.004261f, -0.015648f, -0.024961f, -0.005557f, -0.010913f, 0.001179f, -0.002868f, -0.010891f, -0.005815f, 0.005130f, 0.005491f, 0.018525f, 0.010056f, 0.009138f, 0.000457f, 0.002439f, -0.010445f, -0.007292f, 0.014793f, 0.011151f, 0.007419f, 0.003089f, 0.006797f, 0.000958f, -0.000507f, -0.013445f, -0.018713f, 0.011492f, -0.005427f, -0.012857f, -0.006423f, -0.008339f, 0.005869f, -0.007439f, 0.014775f, 0.002858f, -0.009534f, -0.005047f, -0.007476f, -0.006637f, 0.006830f, 0.010555f, -0.001698f, 0.006838f, -0.006355f, -0.007065f, -0.000754f, 0.000672f, -0.006809f, -0.003220f, 0.007999f, -0.000843f, -0.004638f, -0.005386f, 0.003800f, 0.004320f, -0.001838f, 0.005352f, -0.000381f, -0.005931f, 0.013894f, -0.003681f, -0.000062f, -0.001043f, -0.020729f, 0.004880f, 0.002672f, 0.005412f, -0.019484f, 0.006023f, 0.001001f, -0.005209f, - -0.010320f, 0.005443f, -0.009830f, -0.001144f, 0.019124f, 0.028601f, 0.014462f, 0.016090f, -0.000371f, -0.006900f, 0.012257f, 0.011103f, 0.005108f, 0.006315f, 0.014462f, -0.001191f, 0.010723f, 0.010497f, 0.014972f, 0.014465f, -0.010403f, 0.009979f, 0.000032f, 0.004057f, -0.009647f, 0.004026f, -0.000648f, 0.010179f, -0.002867f, -0.001763f, -0.006604f, 0.007661f, -0.010649f, -0.008355f, 0.001646f, 0.010689f, 0.006066f, -0.004980f, -0.002343f, -0.000886f, -0.003194f, 0.006860f, -0.012991f, 0.013564f, 0.000632f, 0.016659f, -0.021567f, 0.002581f, -0.019367f, -0.005289f, -0.005730f, 0.006533f, -0.001456f, -0.003464f, 0.005020f, 0.002798f, 0.005998f, 0.009843f, 0.014772f, -0.000521f, -0.010889f, 0.003758f, 0.019614f, 0.005287f, -0.005153f, 0.000063f, 0.012074f, -0.004667f, 0.007249f, -0.004376f, -0.020814f, 0.013365f, 0.010908f, -0.030717f, 0.000323f, -0.006985f, 0.002626f, -0.017320f, 0.001916f, 0.002576f, 0.022495f, -0.018387f, 0.000083f, -0.024590f, 0.005407f, -0.014982f, -0.003704f, 0.000591f, -0.008073f, 0.006712f, 0.003014f, -0.013066f, 0.000150f, -0.000544f, 0.011698f, -0.008062f, - 0.018900f, -0.000614f, -0.016490f, -0.008791f, 0.020140f, -0.002361f, 0.008049f, 0.004934f, -0.003351f, 0.011612f, -0.013365f, -0.013115f, -0.009832f, 0.000884f, -0.012779f, 0.013079f, -0.007469f, 0.008182f, -0.012354f, -0.000708f, -0.015008f, 0.009299f, 0.001375f, 0.011230f, 0.010641f, -0.010666f, 0.019965f, 0.016298f, 0.016097f, 0.002468f, 0.016906f, 0.013089f, -0.014181f, 0.011480f, 0.005952f, 0.000316f, -0.013146f, 0.005247f, -0.011167f, 0.010269f, -0.004734f, -0.009872f, -0.000967f, 0.015633f, 0.006052f, -0.020356f, 0.018420f, -0.002793f, -0.006387f, -0.012469f, 0.018703f, 0.014224f, -0.014012f, 0.010231f, 0.044373f, 0.008232f, -0.000914f, -0.014180f, -0.027389f, 0.008043f, -0.003336f, -0.040560f, 0.037144f, -0.016746f, -0.025460f, 0.006414f, -0.000861f, 0.005764f, -0.000880f, 0.007921f, 0.011295f, 0.001029f, 0.000153f, -0.020260f, -0.000935f, -0.001095f, 0.025778f, -0.003632f, 0.001479f, 0.010125f, -0.003544f, -0.002115f, -0.009314f, 0.022281f, -0.015140f, 0.016389f, -0.002946f, -0.011753f, 0.003250f, -0.013236f, -0.006387f, -0.022118f, 0.004962f, 0.011732f, -0.005378f, -0.010446f, - -0.008252f, 0.015165f, -0.020813f, -0.003948f, -0.009784f, 0.000928f, -0.002167f, 0.004106f, -0.017883f, 0.019692f, -0.024747f, -0.016213f, 0.007995f, 0.004559f, 0.000067f, 0.008401f, -0.012273f, -0.017594f, 0.003497f, -0.003507f, 0.000283f, 0.011267f, -0.010261f, 0.010533f, 0.007246f, 0.023355f, -0.004480f, 0.005444f, -0.000108f, 0.003039f, 0.031109f, 0.005707f, 0.031190f, -0.002738f, -0.007645f, -0.033030f, -0.005251f, -0.007593f, -0.026970f, -0.045737f, 0.012726f, 0.022053f, -0.017377f, -0.009003f, 0.012102f, -0.005967f, 0.026810f, -0.004266f, -0.015834f, -0.010037f, -0.042559f, 0.012861f, 0.003746f, -0.005010f, -0.030153f, 0.005671f, -0.017171f, -0.005541f, -0.015172f, -0.008581f, 0.019875f, -0.021230f, 0.007717f, -0.030834f, 0.018034f, 0.002412f, -0.000468f, -0.009895f, 0.001403f, -0.005267f, -0.017306f, -0.032517f, 0.005238f, -0.001430f, 0.005879f, 0.011503f, -0.008304f, -0.004058f, -0.020721f, -0.011897f, -0.006068f, 0.006792f, 0.005032f, 0.013000f, 0.022859f, 0.016595f, 0.008823f, 0.012155f, 0.003653f, 0.012658f, 0.012581f, -0.014907f, 0.014531f, 0.014834f, -0.004012f, 0.020467f, - -0.002843f, 0.024244f, -0.012256f, -0.031509f, -0.005047f, 0.015332f, 0.019931f, 0.019837f, -0.004632f, -0.043981f, -0.004024f, -0.006652f, 0.001797f, -0.006927f, -0.009021f, -0.001779f, 0.042749f, -0.009409f, -0.010228f, 0.014223f, 0.023063f, -0.001704f, 0.010782f, 0.026570f, 0.019342f, -0.043849f, -0.040090f, 0.000203f, -0.003738f, 0.005745f, -0.017824f, -0.032095f, 0.007738f, 0.025381f, 0.017080f, -0.018763f, 0.030292f, 0.024055f, 0.023037f, -0.038642f, 0.011080f, 0.019781f, 0.001270f, 0.002696f, 0.017370f, 0.039107f, -0.007371f, -0.018495f, 0.012262f, 0.008480f, -0.005091f, 0.020837f, 0.032184f, 0.005394f, 0.033343f, 0.013832f, -0.024462f, 0.002140f, 0.027729f, -0.003664f, -0.010894f, 0.013425f, 0.002655f, 0.004575f, 0.029122f, 0.017572f, 0.010169f, 0.002455f, -0.032974f, -0.035031f, -0.002428f, 0.004275f, 0.009312f, -0.011697f, -0.001032f, -0.010098f, 0.003455f, 0.002819f, -0.012238f, 0.003269f, -0.007286f, -0.003694f, -0.010240f, -0.000674f, 0.021896f, -0.014688f, -0.029923f, -0.007221f, -0.025149f, 0.002891f, -0.008004f, -0.004223f, -0.001295f, -0.074018f, -0.047155f, -0.016145f, - 0.010345f, -0.007060f, -0.020431f, 0.000490f, -0.019971f, 0.047248f, -0.022843f, 0.029317f, 0.046713f, 0.023975f, 0.021698f, -0.022079f, 0.014876f, -0.012384f, -0.025470f, 0.017081f, 0.020660f, 0.012552f, 0.030628f, -0.002691f, -0.004331f, -0.017603f, -0.017640f, -0.015806f, -0.023309f, -0.023155f, -0.016448f, 0.004723f, 0.000171f, -0.003231f, -0.015643f, -0.010180f, -0.022706f, 0.005252f, -0.019979f, -0.018913f, -0.009702f, 0.005218f, -0.002773f, -0.013867f, -0.031887f, 0.000228f, -0.011346f, 0.007262f, -0.037158f, -0.030035f, 0.027457f, -0.008039f, -0.008610f, -0.017459f, -0.011366f, 0.019092f, 0.004510f, -0.008306f, 0.009550f, -0.007081f, 0.010017f, 0.006481f, 0.011799f, -0.014428f, -0.020366f, -0.047743f, 0.000008f, -0.046522f, -0.005971f, -0.040102f, -0.008314f, 0.029762f, -0.007424f, 0.001751f, -0.027271f, 0.050015f, 0.001786f, -0.034677f, -0.029404f, 0.031790f, 0.024904f, -0.021781f, -0.021329f, 0.042384f, 0.026902f, 0.002606f, -0.023953f, 0.004095f, -0.009785f, 0.020778f, -0.014745f, 0.003546f, -0.006022f, -0.003258f, 0.043118f, -0.004748f, -0.011319f, 0.009265f, 0.007539f, 0.014157f, - 0.013412f, 0.002868f, -0.016721f, 0.014225f, 0.006548f, 0.016126f, 0.033084f, 0.016667f, -0.047646f, -0.012060f, -0.007875f, -0.034841f, 0.013923f, -0.004693f, 0.000483f, -0.018645f, 0.016825f, -0.006195f, 0.002856f, -0.024685f, 0.017398f, -0.019761f, 0.001155f, 0.022985f, -0.004120f, 0.024170f, -0.018293f, 0.029717f, -0.036714f, 0.019694f, -0.000673f, -0.011059f, 0.045567f, 0.014298f, -0.011114f, -0.026109f, 0.010576f, -0.003988f, 0.002079f, -0.002569f, 0.015108f, 0.027082f, 0.032104f, -0.020407f, 0.012822f, -0.007568f, 0.027685f, 0.011837f, 0.000717f, -0.003226f, 0.013799f, -0.000000f, -0.018085f, -0.071184f, -0.045955f, 0.038788f, -0.027862f, -0.026239f, 0.015231f, 0.033939f, -0.055085f, -0.009008f, 0.013718f, 0.003772f, -0.028476f, -0.043292f, 0.082160f, -0.035045f, 0.011675f, -0.039891f, 0.022676f, -0.013848f, 0.038821f, 0.033964f, 0.004129f, 0.006044f, -0.044584f, -0.000051f, 0.022217f, -0.018384f, -0.026198f, 0.021441f, 0.006955f, 0.023095f, 0.019331f, -0.003941f, 0.008698f, -0.005220f, -0.001867f, 0.034013f, -0.027967f, -0.017241f, 0.028531f, -0.001317f, -0.020733f, 0.028782f, - 0.000376f, -0.006623f, -0.018275f, -0.008928f, 0.012102f, -0.015611f, -0.000272f, 0.009881f, -0.017889f, -0.020287f, -0.011315f, 0.014320f, -0.040461f, 0.019755f, -0.000066f, 0.039713f, -0.035739f, 0.012085f, -0.026561f, 0.010099f, -0.014932f, -0.022503f, 0.038696f, -0.020572f, -0.006107f, -0.020071f, 0.018634f, -0.022896f, 0.016491f, -0.008184f, 0.030202f, 0.026692f, 0.000766f, -0.041147f, 0.034512f, 0.016042f, -0.041937f, 0.012384f, 0.042080f, -0.005250f, -0.001393f, 0.018695f, -0.014539f, 0.029139f, 0.026101f, -0.037931f, -0.023966f, -0.008129f, 0.017710f, 0.033481f, 0.004577f, 0.017137f, 0.037712f, 0.028062f, -0.043087f, -0.005852f, 0.064063f, 0.014833f, -0.006145f, -0.009190f, -0.014187f, -0.020756f, 0.003946f, 0.014676f, 0.016057f, 0.015260f, -0.013731f, -0.029571f, 0.005527f, -0.016107f, 0.013334f, 0.043889f, -0.014244f, -0.047147f, 0.052325f, -0.018033f, -0.032414f, 0.042598f, -0.010420f, -0.014841f, -0.049887f, -0.010224f, 0.016882f, 0.007574f, -0.013109f, -0.021803f, 0.015301f, 0.000052f, -0.025093f, 0.016822f, -0.007770f, 0.041072f, -0.035364f, 0.002312f, -0.010090f, 0.047104f, - 0.012633f, -0.072727f, 0.017414f, -0.032061f, -0.017401f, -0.028100f, 0.024710f, 0.097148f, 0.030300f, 0.001905f, 0.015846f, 0.024402f, -0.045854f, -0.022605f, -0.021500f, -0.033961f, 0.002941f, -0.015362f, -0.053222f, -0.022685f, 0.003638f, -0.021660f, -0.066964f, 0.058009f, -0.011140f, 0.026100f, 0.004970f, -0.030792f, -0.052797f, -0.051006f, 0.057147f, 0.034668f, 0.013165f, -0.020249f, -0.038116f, -0.028737f, -0.045260f, -0.011790f, 0.017018f, -0.007201f, 0.003826f, 0.007082f, -0.007306f, -0.023661f, -0.022434f, -0.038729f, -0.013659f, -0.007594f, 0.019153f, 0.013033f, 0.021060f, -0.010548f, -0.017017f, -0.007455f, 0.027508f, 0.003642f, 0.024413f, -0.080856f, -0.018669f, -0.000372f, 0.018043f, -0.026000f, -0.000745f, -0.030069f, 0.023750f, 0.020215f, 0.004389f, 0.099224f, 0.002084f, 0.030746f, 0.041526f, 0.001378f, 0.013841f, 0.000190f, -0.006501f, -0.012444f, 0.021384f, 0.029804f, 0.040457f, -0.001442f, -0.006581f, 0.002127f, 0.027063f, 0.023028f, 0.002001f, 0.018514f, 0.017915f, 0.012240f, -0.003705f, 0.038385f, -0.009259f, 0.049721f, -0.047090f, -0.023533f, 0.040593f, -0.004172f, - 0.004473f, 0.012743f, -0.048906f, 0.004953f, 0.010239f, 0.035334f, 0.052485f, -0.039494f, 0.012189f, -0.023881f, 0.038230f, 0.034854f, 0.006898f, 0.064367f, 0.022059f, 0.027284f, -0.019617f, -0.000871f, -0.036484f, 0.064292f, -0.032931f, 0.012346f, 0.040513f, -0.006245f, -0.021378f, 0.021734f, -0.002693f, 0.012327f, 0.043280f, 0.003743f, -0.009979f, -0.001039f, 0.010419f, 0.001399f, -0.021161f, 0.020437f, 0.000527f, -0.004151f, 0.071844f, -0.050407f, 0.052742f, 0.034880f, 0.065107f, 0.028017f, -0.041312f, 0.036712f, 0.003417f, 0.034283f, 0.084773f, -0.056633f, -0.021882f, -0.005068f, 0.004193f, 0.058332f, -0.030573f, 0.005399f, -0.033100f, 0.005248f, 0.065275f, -0.004683f, 0.067522f, 0.020745f, 0.013224f, 0.031936f, -0.038058f, -0.004485f, 0.030230f, 0.042552f, -0.064965f, -0.000776f, -0.056242f, 0.026306f, -0.030480f, -0.001408f, 0.008272f, -0.012818f, -0.041485f, 0.009618f, -0.071413f, -0.063340f, -0.000494f, -0.000897f, -0.040496f, 0.029978f, 0.007915f, -0.012557f, -0.037560f, 0.047487f, -0.012693f, 0.071567f, -0.011864f, 0.013756f, 0.025490f, -0.037984f, -0.012963f, 0.008983f, - -0.043642f, -0.026349f, -0.038226f, 0.029685f, -0.030743f, -0.010588f, -0.010595f, 0.025240f, -0.025928f, -0.045199f, -0.060063f, -0.004433f, 0.048815f, 0.000180f, -0.027769f, -0.014461f, -0.034954f, -0.014500f, -0.000112f, 0.017577f, -0.039179f, -0.007459f, -0.008739f, -0.030895f, -0.038380f, -0.001468f, 0.006239f, 0.021301f, 0.008387f, 0.038938f, 0.011757f, 0.049945f, -0.022274f, 0.040502f, -0.011146f, -0.038325f, -0.008817f, 0.067928f, -0.030798f, 0.028653f, -0.022455f, 0.048455f, -0.027547f, 0.013293f, 0.033852f, -0.006781f, -0.013402f, 0.001219f, -0.018708f, 0.042229f, -0.043671f, -0.023238f, 0.047908f, -0.014409f, -0.040668f, -0.064035f, 0.075437f, -0.021824f, 0.064546f, -0.010437f, 0.052272f, 0.006800f, -0.013348f, -0.031498f, -0.021909f, -0.001796f, 0.002957f, 0.039481f, -0.011803f, 0.000018f, 0.012668f, -0.030490f, 0.056047f, 0.023134f, 0.004092f, -0.041338f, 0.032508f, 0.019172f, -0.033395f, 0.037868f, 0.005022f, -0.002132f, 0.010716f, 0.002333f, 0.047476f, -0.006924f, -0.055309f, 0.065451f, -0.029995f, -0.001317f, 0.047856f, -0.016481f, -0.008199f, -0.023548f, 0.074409f, -0.028469f, - -0.007162f, -0.041207f, -0.007033f, 0.009876f, 0.066650f, -0.025893f, 0.013961f, 0.025329f, 0.040313f, -0.005295f, -0.039440f, 0.049908f, 0.028916f, 0.041700f, -0.016083f, -0.003173f, 0.006271f, 0.046183f, -0.020711f, -0.041132f, -0.051161f, 0.034696f, -0.035363f, 0.016509f, 0.041052f, 0.044242f, -0.024250f, -0.000503f, 0.054600f, -0.075418f, -0.000624f, 0.022394f, 0.030576f, 0.009252f, -0.029483f, 0.014202f, 0.026392f, -0.013127f, -0.015161f, -0.092657f, 0.032877f, 0.019309f, 0.084508f, 0.074314f, -0.009913f, -0.025928f, -0.085215f, 0.003657f, 0.029704f, -0.035719f, 0.029008f, 0.051592f, 0.049883f, -0.021551f, 0.059853f, 0.053989f, 0.003314f, -0.030640f, -0.033375f, 0.055132f, 0.046832f, -0.064253f, -0.088603f, 0.119975f, 0.006851f, -0.007127f, 0.016247f, 0.010087f, 0.044671f, 0.045086f, -0.017015f, -0.013667f, 0.062405f, 0.030743f, -0.010561f, -0.039787f, 0.025404f, 0.006297f, 0.003750f, 0.023389f, 0.003451f, -0.000572f, -0.024391f, 0.015222f, -0.007162f, -0.028885f, 0.055702f, -0.087045f, 0.061729f, 0.052526f, -0.083763f, -0.004472f, 0.042542f, 0.012119f, 0.048424f, -0.010088f, - 0.006407f, 0.045917f, -0.006510f, 0.024053f, -0.042151f, -0.064176f, 0.182967f, -0.074150f, -0.107422f, -0.022083f, 0.203020f, 0.089485f, -0.090136f, -0.019014f, 0.032509f, 0.025592f, -0.006074f, 0.009460f, -0.040546f, -0.027134f, 0.042234f, 0.075791f, 0.001752f, 0.128517f, -0.062579f, -0.026763f, 0.073245f, -0.000387f, -0.007993f, -0.043803f, -0.082605f, 0.061420f, -0.044676f, -0.049139f, 0.030682f, -0.054109f, 0.021377f, -0.051563f, -0.055527f, -0.013212f, 0.008297f, 0.002980f, -0.015377f, 0.058379f, 0.012782f, 0.033834f, 0.015534f, -0.003433f, -0.001785f, -0.032913f, -0.062991f, 0.014755f, 0.057635f, -0.053708f, 0.039611f, -0.054671f, -0.007496f, -0.007330f, -0.079635f, 0.050585f, -0.028841f, 0.016906f, -0.000290f, -0.027374f, -0.000299f, -0.060597f, 0.056160f, -0.045096f, 0.018057f, -0.069722f, -0.040580f, -0.089998f, 0.031707f, -0.044337f, -0.045303f, -0.040590f, -0.018622f, -0.004010f, 0.091628f, 0.028734f, 0.046109f, -0.016037f, -0.040905f, -0.057092f, 0.016721f, 0.000672f, -0.089398f, -0.045038f, -0.158548f, -0.077383f, -0.056633f, -0.007664f, -0.065707f, -0.052792f, -0.022591f, -0.094204f, - 0.021454f, 0.032010f, -0.081251f, 0.043715f, 0.008683f, -0.024713f, 0.004733f, -0.024262f, -0.002221f, 0.015858f, 0.023793f, 0.039686f, -0.048370f, 0.002896f, 0.056648f, -0.008242f, -0.026134f, 0.048350f, -0.021402f, 0.001218f, -0.028953f, -0.014626f, -0.058602f, 0.012913f, 0.002730f, 0.030909f, -0.022105f, -0.000511f, 0.043598f, -0.023062f, 0.002503f, 0.039892f, -0.082958f, 0.001924f, -0.095058f, -0.034770f, -0.062737f, 0.047988f, 0.021063f, -0.008103f, 0.024730f, -0.023631f, 0.026967f, 0.061320f, 0.021206f, 0.097574f, -0.053509f, -0.071056f, 0.064501f, 0.010712f, -0.040036f, -0.047798f, -0.012295f, 0.031378f, -0.031315f, -0.008399f, -0.025936f, -0.048203f, 0.029975f, 0.021793f, -0.054000f, -0.044043f, 0.059512f, -0.010480f, 0.026572f, -0.021809f, 0.037725f, 0.001023f, 0.063033f, -0.043816f, -0.010734f, -0.001754f, 0.026582f, -0.033097f, -0.036896f, -0.062604f, -0.127158f, -0.063266f, -0.023798f, 0.056419f, 0.073302f, -0.138791f, 0.024538f, -0.054747f, -0.075078f, -0.014875f, 0.087747f, 0.056443f, 0.048048f, -0.029405f, -0.033182f, -0.039520f, 0.044456f, 0.031759f, 0.068350f, 0.009586f, - -0.087835f, -0.033829f, 0.066733f, -0.009432f, 0.019847f, 0.060189f, -0.028028f, -0.040344f, -0.064179f, -0.063826f, 0.000761f, 0.042962f, 0.091301f, 0.068207f, 0.044992f, 0.019163f, -0.092719f, -0.098232f, 0.034985f, -0.067471f, 0.016471f, 0.088296f, 0.035055f, 0.006898f, -0.043770f, -0.078066f, -0.013249f, -0.033046f, 0.026835f, 0.021712f, 0.015122f, 0.055839f, -0.008248f, -0.009480f, 0.014678f, 0.040887f, 0.064715f, 0.067936f, 0.022915f, 0.060663f, 0.020266f, 0.022610f, -0.012808f, -0.065282f, -0.025871f, -0.027546f, -0.054324f, 0.042465f, 0.038685f, 0.029936f, 0.028691f, -0.011369f, -0.065262f, 0.011861f, 0.020065f, 0.042206f, -0.109679f, -0.223418f, -0.114036f, 0.024556f, 0.090946f, 0.217806f, 0.213173f, 0.090342f, 0.092241f, 0.066945f, 0.006167f, -0.104531f, -0.178908f, -0.270994f, -0.078999f, -0.111848f, -0.017251f, 0.114277f, 0.201714f, 0.169952f, 0.150462f, 0.084050f, 0.000852f, -0.049523f, -0.067230f, -0.012373f, -0.118392f, -0.093571f, -0.088673f, -0.057293f, -0.046474f, -0.020247f, -0.001646f, 0.044225f, 0.100783f, 0.103589f, 0.101963f, 0.075238f, 0.097244f, 0.052688f, - 0.056717f, -0.015235f, -0.001391f, -0.042213f, -0.114733f, -0.167442f, -0.202739f, -0.097034f, -0.037574f, 0.034296f, -0.002903f, 0.023996f, 0.050035f, 0.064665f, 0.135355f, 0.155714f, 0.205545f, 0.131895f, 0.015025f, 0.061320f, -0.029039f, -0.110496f, -0.096900f, -0.193973f, -0.227290f, -0.169230f, -0.105135f, -0.044357f, -0.036357f, 0.082473f, 0.090592f, 0.256514f, 0.205581f, 0.150538f, 0.138277f, 0.056630f, -0.051997f, -0.066059f, -0.040091f} - }, - { - {0.018235f, -0.003472f, 0.005490f, -0.000571f, 0.007113f, 0.008802f, 0.006134f, 0.011158f, -0.006845f, 0.012061f, -0.004063f, 0.001631f, -0.011202f, 0.000524f, -0.011671f, 0.002543f, 0.002049f, 0.000973f, 0.000325f, 0.004340f, -0.006223f, -0.007391f, 0.006076f, -0.000559f, 0.004647f, 0.002762f, -0.001027f, -0.005085f, 0.000972f, 0.009242f, 0.005653f, 0.002995f, 0.003590f, 0.002764f, 0.001017f, 0.003343f, -0.000734f, 0.000448f, -0.000733f, 0.010487f, -0.002163f, 0.005451f, -0.003895f, 0.004636f, 0.012323f, -0.003269f, 0.011536f, 0.001765f, -0.004865f, 0.003436f, 0.005153f, -0.001661f, -0.002003f, 0.000326f, 0.008742f, -0.002760f, 0.002791f, -0.001620f, 0.005558f, 0.002326f, 0.007581f, -0.002523f, -0.000523f, 0.002931f, -0.003002f, -0.006192f, 0.001175f, -0.002024f, -0.000788f, -0.002434f, 0.004980f, 0.000794f, 0.003142f, -0.001468f, 0.006725f, 0.003439f, -0.008512f, -0.013235f, -0.009654f, 0.003716f, -0.001518f, -0.022613f, -0.012911f, -0.000980f, 0.003154f, -0.006940f, 0.002291f, -0.008365f, 0.001540f, -0.006027f, 0.015754f, -0.012877f, -0.005796f, -0.005622f, 0.009978f, 0.007056f, - 0.016012f, 0.004350f, 0.003207f, -0.007286f, 0.007460f, 0.001086f, 0.001895f, -0.000773f, 0.005935f, 0.008527f, 0.000434f, 0.008514f, 0.007732f, -0.003687f, 0.004225f, -0.004529f, -0.005480f, 0.000795f, -0.004529f, 0.002912f, -0.006984f, -0.011968f, 0.003041f, 0.004620f, -0.003294f, 0.003679f, -0.006104f, 0.005800f, 0.007205f, -0.012571f, 0.002223f, -0.000363f, 0.004547f, 0.004523f, 0.000362f, -0.012325f, -0.004143f, -0.005160f, 0.003885f, 0.000318f, 0.000932f, -0.003580f, 0.002000f, -0.005980f, -0.000054f, 0.007683f, 0.004143f, 0.001137f, -0.004012f, 0.003073f, -0.010815f, -0.005027f, -0.008066f, 0.002329f, 0.000872f, 0.000511f, -0.025739f, -0.000475f, 0.001737f, 0.000722f, 0.004646f, -0.008865f, 0.007128f, 0.004140f, -0.004468f, -0.015213f, 0.010599f, 0.010826f, -0.002096f, 0.009063f, 0.006680f, -0.008290f, 0.017511f, 0.003895f, -0.007367f, 0.009531f, 0.001054f, 0.008925f, 0.001660f, -0.014600f, 0.006072f, -0.002510f, -0.005116f, -0.005477f, -0.004118f, 0.010085f, 0.007992f, 0.000928f, 0.008349f, 0.003182f, -0.007056f, -0.008958f, -0.000405f, -0.001853f, 0.004439f, 0.003027f, - -0.006835f, 0.002057f, 0.004264f, 0.003906f, -0.005935f, -0.005056f, -0.008008f, -0.002658f, -0.001621f, 0.002031f, -0.001570f, 0.011735f, 0.005407f, -0.001429f, -0.005238f, 0.002482f, 0.005305f, 0.002812f, 0.012854f, -0.001685f, 0.006783f, -0.000355f, -0.003414f, -0.007070f, 0.005912f, -0.001281f, -0.002773f, 0.007631f, -0.001493f, 0.002854f, -0.000827f, -0.001009f, -0.007436f, 0.002313f, -0.001413f, 0.010121f, 0.012896f, -0.002187f, -0.004895f, -0.007713f, -0.017720f, -0.010609f, -0.003829f, 0.012726f, 0.001674f, 0.002355f, 0.007841f, 0.002074f, 0.003409f, -0.018628f, -0.017013f, -0.010922f, -0.002794f, -0.000121f, 0.007941f, -0.005640f, 0.006238f, -0.003257f, -0.011384f, 0.003509f, -0.001582f, -0.007939f, -0.000017f, 0.010927f, 0.016141f, 0.007167f, -0.007200f, 0.004198f, 0.000663f, 0.011437f, 0.000113f, -0.009307f, -0.000132f, -0.005487f, 0.011555f, 0.004837f, 0.005545f, 0.011357f, -0.001746f, 0.000699f, 0.015688f, 0.013331f, -0.000219f, -0.000219f, 0.001375f, -0.001018f, 0.004449f, 0.000957f, -0.010861f, -0.015104f, -0.004851f, -0.002087f, 0.000504f, -0.005148f, -0.016125f, -0.001981f, - 0.005164f, -0.009284f, -0.003801f, -0.006139f, -0.004349f, 0.001509f, 0.002910f, 0.005217f, -0.010704f, -0.009564f, 0.009965f, -0.004093f, -0.000809f, 0.001507f, 0.000809f, 0.005454f, -0.009130f, 0.023536f, -0.009314f, -0.007417f, -0.001363f, 0.000209f, -0.009088f, -0.000116f, -0.006426f, 0.011225f, -0.003012f, -0.014312f, -0.019888f, -0.005241f, -0.013254f, 0.017963f, 0.001243f, 0.012694f, 0.010617f, -0.017400f, -0.001209f, 0.007039f, 0.004980f, 0.008964f, 0.001452f, -0.001294f, -0.001819f, 0.004106f, -0.005969f, 0.006387f, 0.003361f, -0.006327f, 0.003522f, 0.000091f, 0.004152f, 0.009681f, -0.005621f, 0.003730f, -0.000929f, 0.005447f, 0.004546f, -0.002216f, 0.006373f, -0.002093f, 0.005493f, -0.004648f, 0.004971f, -0.014148f, -0.006272f, -0.005301f, 0.003567f, 0.011844f, -0.009223f, -0.006072f, -0.003646f, 0.000510f, -0.004435f, -0.005574f, -0.003228f, 0.004644f, 0.003549f, 0.006728f, -0.002729f, 0.003719f, -0.004528f, -0.004594f, -0.000825f, -0.002876f, 0.004417f, -0.000349f, -0.007663f, 0.003803f, -0.004564f, -0.007466f, -0.002817f, -0.004728f, 0.003425f, -0.005108f, 0.003556f, 0.005755f, - -0.002888f, 0.008973f, -0.015236f, 0.006162f, -0.009294f, -0.010190f, 0.013826f, 0.004879f, -0.017327f, 0.001320f, -0.000363f, 0.004650f, -0.012607f, -0.008197f, -0.001536f, -0.010258f, -0.018404f, -0.017780f, -0.011938f, -0.017744f, 0.006952f, -0.002227f, 0.002134f, 0.008962f, -0.015712f, 0.009607f, -0.004807f, 0.004278f, 0.002576f, -0.001961f, 0.001048f, -0.002611f, -0.002721f, -0.010325f, -0.006484f, 0.012547f, -0.005333f, -0.011181f, -0.010482f, -0.001370f, -0.005034f, 0.003634f, -0.010074f, -0.015075f, 0.001632f, 0.013240f, -0.002710f, 0.007870f, -0.005375f, 0.004112f, -0.008011f, 0.005169f, 0.001565f, -0.010418f, 0.013999f, 0.002243f, -0.003890f, 0.003068f, 0.012725f, 0.012142f, 0.005684f, -0.001693f, -0.016090f, -0.002886f, -0.013661f, 0.003329f, -0.003940f, 0.001851f, 0.000849f, 0.003349f, -0.013039f, -0.000098f, -0.002871f, 0.005921f, 0.008341f, -0.017860f, -0.017162f, -0.011511f, -0.018799f, -0.022056f, -0.021104f, 0.007444f, 0.008187f, -0.013919f, -0.004500f, -0.012693f, -0.020130f, 0.009168f, -0.006095f, -0.017527f, 0.004562f, -0.002135f, -0.000278f, 0.000674f, 0.004482f, 0.000843f, - -0.001728f, 0.003264f, 0.004573f, -0.010478f, -0.010272f, -0.003434f, -0.012279f, -0.001758f, -0.013018f, -0.021485f, -0.002796f, 0.011471f, -0.016033f, -0.012340f, 0.006875f, -0.008782f, -0.000254f, 0.002225f, -0.008848f, -0.007104f, -0.007688f, -0.023035f, -0.010785f, 0.003833f, -0.007534f, -0.008242f, -0.015152f, 0.005314f, 0.011224f, -0.005406f, 0.017968f, -0.011528f, -0.006226f, -0.000995f, -0.005847f, -0.017127f, -0.002356f, 0.002797f, -0.001744f, -0.004344f, -0.015357f, -0.003280f, 0.012748f, 0.006052f, 0.002937f, 0.006212f, 0.004013f, -0.004753f, 0.025520f, -0.009571f, -0.011459f, -0.011244f, -0.012916f, 0.002920f, 0.014020f, 0.030357f, 0.020789f, -0.000396f, 0.019002f, -0.001005f, 0.003145f, 0.004130f, -0.009737f, 0.017518f, 0.000560f, 0.015551f, 0.014654f, -0.010913f, 0.018901f, 0.000962f, -0.013870f, -0.022670f, 0.021606f, 0.011067f, 0.021439f, -0.017022f, 0.012387f, 0.007373f, -0.019389f, -0.018535f, -0.011298f, -0.004671f, 0.020548f, -0.018615f, 0.017316f, -0.000804f, -0.001883f, 0.013305f, 0.011720f, 0.016869f, 0.005844f, -0.007785f, 0.007733f, 0.015961f, -0.009190f, 0.015984f, - 0.022663f, 0.010711f, 0.013659f, 0.006789f, 0.003690f, 0.004954f, 0.000325f, -0.011323f, 0.004284f, 0.002384f, 0.000564f, 0.011616f, -0.007787f, 0.007426f, 0.006549f, -0.001817f, 0.019416f, -0.010428f, -0.007631f, -0.003216f, 0.016603f, -0.001812f, 0.013558f, 0.008536f, 0.008904f, 0.010015f, 0.000926f, -0.022840f, -0.004548f, -0.017948f, -0.011363f, 0.026953f, 0.012501f, -0.009395f, -0.000945f, -0.026185f, 0.016600f, 0.015925f, 0.047091f, 0.001868f, 0.004124f, -0.002347f, -0.006397f, -0.003068f, 0.015975f, 0.014498f, 0.012703f, 0.018278f, 0.007491f, 0.028863f, 0.008530f, -0.011471f, 0.002843f, 0.025139f, 0.010026f, 0.002513f, 0.003999f, -0.012995f, -0.018533f, 0.011884f, -0.009158f, -0.018304f, -0.038540f, -0.000682f, 0.015466f, -0.001254f, 0.009162f, -0.013459f, -0.006984f, -0.005083f, 0.002986f, -0.004324f, -0.011483f, -0.005744f, -0.031014f, -0.008214f, -0.026311f, 0.002136f, -0.013827f, 0.010520f, -0.015063f, 0.005677f, -0.014483f, -0.005147f, -0.000847f, 0.000357f, 0.002310f, 0.002877f, -0.019241f, 0.009262f, -0.002877f, 0.004225f, -0.010071f, 0.000237f, 0.015380f, 0.006191f, - 0.021230f, 0.011939f, -0.006592f, -0.001206f, -0.004540f, -0.002073f, -0.005219f, -0.006618f, -0.000652f, 0.008964f, 0.005211f, 0.006796f, 0.003562f, -0.030114f, 0.019294f, 0.051560f, 0.019130f, -0.007615f, 0.025894f, -0.015592f, 0.018315f, 0.012480f, -0.023021f, 0.005956f, -0.029180f, 0.001482f, -0.009357f, -0.020269f, 0.012157f, 0.001260f, 0.009504f, 0.013280f, 0.016227f, 0.025572f, 0.011154f, -0.000863f, -0.005524f, -0.015912f, -0.029423f, 0.011646f, 0.012717f, 0.004200f, -0.009711f, 0.017279f, 0.002996f, 0.018211f, 0.011146f, -0.030648f, -0.011123f, 0.005194f, -0.022369f, 0.002147f, -0.000795f, -0.003455f, 0.007717f, 0.006102f, -0.004596f, 0.024266f, -0.012568f, 0.001917f, 0.013946f, -0.010469f, 0.009864f, -0.003988f, -0.013217f, 0.010508f, 0.000799f, -0.000767f, 0.014337f, 0.009956f, 0.001434f, -0.005863f, 0.028715f, 0.002371f, 0.016585f, 0.002734f, -0.007663f, -0.008431f, -0.022265f, -0.007756f, 0.010758f, 0.000671f, 0.009365f, -0.001288f, -0.017028f, 0.008667f, 0.007143f, -0.025075f, 0.008913f, 0.015346f, -0.005965f, -0.051852f, -0.016638f, 0.055871f, 0.016160f, 0.009583f, - -0.007393f, -0.000711f, -0.007549f, 0.011979f, -0.016867f, 0.024798f, 0.014728f, 0.011992f, 0.012574f, -0.007842f, 0.000163f, -0.000331f, 0.008760f, 0.016840f, -0.023339f, -0.013856f, -0.006727f, 0.019115f, 0.007775f, 0.010898f, 0.012229f, -0.002004f, -0.016348f, 0.006242f, 0.002522f, 0.034118f, 0.027651f, 0.007412f, 0.021310f, 0.001521f, -0.008455f, 0.004558f, -0.001515f, -0.004258f, 0.014253f, 0.016252f, 0.014442f, 0.032829f, 0.017086f, 0.013013f, 0.015698f, -0.014558f, -0.022736f, -0.011183f, 0.012514f, -0.020510f, -0.008659f, 0.020099f, 0.022970f, 0.011721f, -0.008003f, 0.018847f, -0.005708f, 0.001927f, 0.006356f, 0.010649f, -0.003626f, -0.012101f, 0.008829f, -0.011046f, -0.031114f, 0.000921f, 0.013248f, -0.018859f, 0.005151f, -0.004144f, -0.001469f, -0.004455f, -0.006761f, 0.025582f, 0.002849f, 0.012628f, 0.026218f, 0.041770f, -0.063768f, -0.009758f, 0.002774f, -0.001317f, -0.008533f, -0.016476f, 0.016173f, -0.020891f, -0.033021f, -0.004003f, 0.030121f, -0.005191f, -0.019365f, 0.005105f, -0.026675f, -0.014525f, -0.000162f, 0.015762f, -0.027965f, 0.002382f, 0.027963f, 0.029407f, - -0.000491f, 0.010092f, 0.024873f, -0.015448f, -0.024717f, -0.033128f, 0.001801f, -0.032983f, -0.008364f, 0.013363f, 0.011462f, -0.029143f, -0.028683f, -0.016801f, 0.010199f, -0.007872f, -0.006642f, -0.007728f, 0.024389f, -0.038718f, -0.012949f, 0.005975f, -0.022529f, -0.007149f, -0.001687f, -0.024256f, -0.000688f, 0.010215f, -0.003214f, 0.032229f, -0.004126f, -0.012547f, 0.000662f, -0.001106f, -0.012640f, 0.006778f, 0.013453f, -0.013733f, 0.020008f, -0.010065f, -0.044324f, 0.003213f, -0.019112f, -0.007375f, -0.004304f, -0.002486f, -0.058675f, -0.006667f, 0.020845f, 0.025333f, 0.009307f, 0.038329f, 0.022576f, -0.003330f, -0.059918f, 0.016999f, -0.011035f, 0.020728f, -0.019113f, 0.000061f, 0.031519f, -0.010228f, 0.044717f, 0.010575f, 0.008638f, -0.018873f, 0.008450f, 0.022483f, -0.013668f, -0.002407f, 0.028820f, 0.018995f, 0.021645f, 0.003476f, -0.033516f, 0.021651f, -0.021721f, -0.001579f, -0.013196f, 0.003758f, -0.016833f, 0.010123f, -0.004605f, 0.009892f, 0.008641f, 0.016467f, 0.015834f, 0.018480f, -0.021724f, 0.005608f, 0.033575f, 0.007794f, -0.006627f, -0.006290f, -0.017664f, -0.013241f, - -0.000704f, 0.001806f, 0.005430f, 0.029189f, 0.001704f, 0.016349f, 0.014473f, -0.000532f, -0.008219f, -0.006429f, 0.024981f, -0.029829f, -0.007710f, -0.026356f, -0.023343f, -0.005739f, -0.001143f, -0.044627f, 0.010256f, -0.013774f, 0.025998f, -0.005385f, -0.000566f, 0.019406f, 0.001964f, 0.046418f, 0.036065f, 0.055115f, 0.018474f, 0.002120f, -0.008950f, -0.006172f, -0.011641f, -0.016643f, 0.024728f, -0.005991f, -0.004162f, 0.056304f, -0.010376f, -0.011259f, 0.062636f, 0.000022f, 0.036129f, 0.026730f, 0.003184f, 0.015368f, -0.007119f, 0.012220f, 0.011865f, 0.007612f, 0.009882f, 0.029265f, -0.018376f, 0.035085f, -0.017610f, 0.000203f, 0.008334f, -0.003863f, -0.023519f, -0.021452f, 0.000724f, -0.035309f, -0.010094f, -0.038652f, -0.001245f, -0.022674f, -0.015987f, -0.012097f, -0.009678f, 0.006584f, -0.030051f, 0.037473f, 0.007463f, -0.023186f, -0.016073f, -0.000442f, -0.002793f, -0.005158f, 0.011425f, 0.005742f, 0.038159f, 0.004846f, 0.001688f, -0.017772f, 0.005255f, 0.008205f, 0.000976f, -0.018977f, -0.006066f, 0.023443f, 0.027376f, -0.000684f, -0.018199f, 0.009423f, -0.001098f, 0.033157f, - 0.039252f, -0.013076f, -0.005667f, -0.005567f, 0.008129f, -0.012572f, 0.019123f, -0.043259f, 0.001154f, 0.054747f, -0.041171f, -0.020914f, -0.002171f, -0.005958f, 0.004500f, -0.031516f, -0.016923f, -0.004346f, 0.025679f, 0.030739f, 0.021353f, -0.018455f, -0.048326f, 0.085642f, 0.022149f, -0.052684f, -0.052730f, -0.007381f, 0.013744f, 0.036818f, -0.045759f, -0.007608f, 0.009495f, -0.000076f, -0.005885f, 0.049283f, 0.011267f, -0.028022f, 0.016090f, 0.002563f, -0.000536f, 0.026176f, -0.003840f, 0.014533f, -0.030896f, -0.010251f, 0.056627f, 0.021089f, 0.044842f, 0.014346f, 0.040630f, 0.007399f, -0.013735f, 0.028386f, 0.026360f, 0.040346f, 0.020553f, -0.044725f, -0.016215f, 0.010115f, 0.024213f, -0.017785f, 0.007782f, -0.017149f, -0.028255f, 0.003232f, -0.002451f, -0.017195f, 0.014500f, 0.019128f, 0.017351f, 0.012187f, 0.012206f, -0.008430f, 0.031164f, -0.000097f, -0.028993f, -0.021663f, 0.028185f, 0.014812f, -0.046022f, 0.020561f, 0.009522f, 0.015218f, -0.039878f, -0.028034f, 0.027970f, 0.041103f, 0.025016f, -0.008328f, 0.021476f, 0.040850f, 0.016435f, 0.043085f, 0.008143f, 0.020459f, - 0.015404f, 0.071000f, 0.095931f, 0.008729f, 0.020033f, -0.059031f, -0.018160f, 0.037880f, -0.029768f, 0.073199f, -0.013323f, 0.012736f, 0.020282f, 0.043499f, 0.024237f, -0.008549f, -0.029588f, -0.034215f, -0.010934f, -0.004351f, -0.043962f, -0.019675f, -0.017031f, 0.030311f, -0.015908f, 0.010161f, -0.027998f, 0.005457f, -0.010605f, -0.040248f, 0.044202f, 0.031891f, 0.035673f, 0.017153f, -0.020810f, -0.018970f, -0.048245f, 0.002661f, -0.043480f, -0.011572f, -0.003314f, 0.007603f, 0.022877f, 0.019569f, -0.013956f, -0.008282f, 0.018894f, 0.043039f, 0.011242f, 0.017605f, 0.030160f, -0.036451f, 0.027150f, -0.019921f, -0.020209f, -0.036873f, -0.017170f, 0.019426f, 0.014577f, 0.004104f, 0.044648f, -0.008426f, -0.017597f, 0.008135f, 0.010652f, 0.062879f, -0.022155f, 0.024866f, 0.021832f, 0.058972f, -0.014532f, 0.008218f, -0.026997f, -0.008097f, -0.035834f, 0.027647f, -0.051362f, 0.001824f, -0.041423f, 0.007587f, 0.017204f, 0.005824f, -0.024921f, 0.083616f, -0.006259f, -0.011915f, 0.007312f, -0.048523f, 0.002429f, -0.033004f, 0.000802f, 0.008450f, -0.010007f, -0.001772f, 0.019536f, -0.018283f, - 0.000475f, 0.024768f, 0.001808f, 0.005713f, -0.041495f, 0.004494f, -0.003745f, -0.003350f, -0.010697f, -0.051951f, -0.028715f, 0.011813f, 0.003939f, 0.021858f, -0.059506f, 0.005585f, -0.055395f, 0.027067f, -0.037852f, -0.061109f, 0.030248f, 0.054531f, 0.009342f, 0.026309f, -0.041783f, 0.040146f, -0.010422f, 0.005106f, -0.025703f, 0.033214f, 0.013608f, 0.034503f, 0.010991f, 0.042072f, -0.039287f, 0.006334f, 0.002041f, -0.007864f, -0.031072f, -0.026464f, -0.029085f, 0.031944f, -0.008517f, 0.043870f, -0.027215f, -0.022461f, 0.006735f, 0.005215f, -0.020561f, 0.012217f, -0.099204f, 0.011233f, -0.032270f, 0.090178f, -0.017982f, -0.046806f, 0.017421f, -0.003478f, -0.046654f, -0.008683f, 0.006760f, -0.028421f, 0.067850f, 0.008909f, 0.005720f, 0.030333f, -0.039522f, -0.060334f, -0.037544f, 0.083009f, -0.007583f, -0.018702f, 0.054525f, 0.030384f, -0.027339f, -0.027164f, -0.015721f, 0.065609f, 0.008402f, -0.017129f, -0.026938f, -0.013469f, -0.052886f, 0.034128f, -0.007002f, 0.013280f, 0.032457f, -0.012748f, -0.054771f, -0.007527f, 0.068396f, -0.003922f, -0.018304f, 0.032486f, -0.016209f, 0.040536f, - 0.026210f, -0.004487f, -0.052317f, -0.027094f, -0.008099f, -0.048432f, -0.028936f, -0.028319f, 0.002605f, -0.007495f, 0.038922f, -0.028855f, -0.010835f, -0.001152f, 0.101796f, 0.034824f, -0.018974f, 0.019868f, 0.010857f, -0.007036f, 0.050962f, 0.024466f, -0.021219f, 0.007268f, 0.040755f, 0.046946f, -0.030894f, -0.021351f, -0.072107f, -0.055465f, -0.001824f, -0.007850f, -0.007673f, -0.108283f, 0.041079f, -0.020936f, 0.062086f, 0.062993f, -0.031900f, 0.031247f, -0.056542f, -0.086530f, 0.005193f, -0.060008f, 0.011305f, -0.005013f, 0.051705f, -0.033244f, 0.037807f, 0.032649f, 0.051924f, -0.071372f, 0.011293f, -0.042543f, -0.038417f, 0.007438f, -0.050485f, -0.031729f, 0.052151f, -0.011261f, 0.021936f, 0.060016f, -0.007837f, 0.021830f, -0.043424f, 0.008511f, -0.048165f, 0.051165f, -0.039224f, -0.025283f, -0.027894f, 0.056832f, 0.046806f, -0.027378f, 0.062683f, 0.042308f, -0.008290f, 0.061777f, 0.001012f, -0.057963f, -0.012621f, -0.003484f, -0.043440f, 0.014738f, -0.096825f, 0.014285f, -0.020876f, -0.044470f, -0.034164f, 0.049926f, -0.021635f, 0.098940f, 0.075777f, -0.100127f, 0.006245f, 0.002798f, - 0.011724f, 0.054746f, -0.075373f, -0.050822f, 0.064876f, -0.039523f, -0.050099f, -0.058661f, 0.015330f, 0.152723f, -0.011288f, -0.032959f, -0.031614f, 0.013474f, 0.052922f, -0.057569f, 0.029675f, -0.097100f, -0.014284f, -0.037337f, -0.032790f, 0.052514f, -0.066457f, -0.103416f, 0.061213f, 0.092541f, 0.022532f, -0.016874f, -0.082997f, 0.006599f, 0.032867f, 0.033600f, -0.013727f, -0.032336f, 0.004390f, -0.007131f, -0.010719f, 0.011788f, -0.012115f, -0.026718f, -0.054413f, 0.008233f, -0.032716f, 0.009534f, -0.029346f, -0.060716f, 0.038702f, 0.030025f, 0.047545f, 0.003359f, 0.051388f, 0.030601f, 0.007698f, -0.014739f, -0.026337f, -0.040756f, -0.030657f, -0.014996f, 0.012021f, 0.031946f, -0.019984f, -0.007055f, -0.071116f, 0.069383f, 0.078566f, 0.046974f, -0.040519f, 0.045500f, -0.055282f, 0.002901f, 0.012151f, -0.115819f, 0.009229f, 0.016654f, 0.056017f, -0.066255f, 0.091564f, 0.042519f, -0.067353f, -0.030219f, 0.026382f, -0.002684f, -0.050580f, -0.048244f, -0.067259f, -0.071721f, -0.009635f, -0.091601f, -0.012422f, 0.033070f, -0.043143f, -0.040192f, 0.037507f, 0.038047f, 0.007546f, -0.036320f, - -0.123906f, -0.018387f, 0.023958f, 0.014548f, 0.053398f, -0.001369f, 0.030940f, -0.008254f, -0.001029f, -0.015748f, 0.002064f, 0.032574f, 0.003525f, 0.001179f, 0.031548f, -0.008642f, -0.007944f, -0.041953f, -0.004134f, -0.006854f, -0.004967f, 0.007078f, 0.025087f, 0.034573f, -0.007108f, -0.000071f, 0.026895f, -0.006218f, -0.052733f, -0.003641f, -0.046862f, 0.006764f, 0.005995f, -0.060990f, 0.043880f, -0.084006f, 0.018440f, 0.023225f, -0.037269f, -0.002459f, 0.108573f, -0.030671f, 0.036333f, -0.022764f, 0.018971f, -0.081320f, 0.008248f, 0.048203f, -0.001900f, 0.041759f, -0.010301f, 0.004956f, -0.003471f, 0.053542f, -0.034872f, -0.039665f, 0.045599f, -0.041803f, -0.054821f, 0.001190f, -0.087155f, 0.059493f, 0.044498f, -0.013027f, 0.013946f, 0.015041f, -0.008372f, -0.047493f, -0.138937f, -0.066535f, -0.023696f, 0.042332f, 0.098351f, -0.094505f, 0.017850f, -0.028982f, -0.095290f, -0.015303f, 0.081257f, 0.020207f, 0.066534f, -0.060374f, 0.014984f, -0.022382f, 0.001773f, 0.038370f, 0.004586f, 0.019826f, -0.015439f, -0.120748f, 0.032857f, 0.003587f, -0.052581f, 0.049421f, 0.037157f, -0.038036f, - 0.034182f, 0.002167f, -0.040852f, 0.009629f, -0.026099f, 0.071925f, 0.006854f, 0.027831f, -0.000798f, -0.078225f, -0.063128f, -0.022696f, -0.047343f, 0.047323f, 0.068904f, 0.070940f, 0.056654f, -0.022514f, 0.006047f, -0.061910f, -0.011156f, -0.008156f, -0.027272f, -0.033633f, 0.002996f, 0.003640f, -0.084187f, -0.026186f, -0.034119f, -0.004383f, 0.034841f, -0.042539f, -0.011199f, 0.012089f, -0.001683f, 0.040165f, -0.048475f, -0.004027f, -0.054489f, -0.030020f, -0.040330f, 0.019464f, 0.013559f, 0.040012f, -0.005205f, -0.006908f, -0.046665f, -0.019222f, 0.037496f, -0.055585f, -0.224711f, -0.117745f, 0.026583f, 0.097106f, 0.215560f, 0.164744f, 0.094060f, 0.032536f, 0.050177f, -0.013665f, -0.087436f, -0.172136f, -0.228561f, -0.057029f, -0.064480f, 0.004800f, 0.115013f, 0.161708f, 0.110182f, 0.144942f, 0.035757f, 0.031576f, -0.014085f, -0.071704f, -0.079572f, -0.065664f, -0.067910f, -0.086658f, -0.067233f, -0.029227f, -0.001485f, -0.000390f, 0.059203f, 0.073386f, 0.142366f, 0.066259f, 0.024922f, 0.057532f, 0.092180f, 0.028592f, 0.020393f, -0.071518f, -0.094570f, -0.160316f, -0.070472f, -0.084211f, - -0.057132f, -0.036493f, -0.024605f, 0.011441f, 0.023700f, 0.066801f, 0.142106f, 0.110232f, 0.125377f, 0.088673f, 0.114262f, 0.080484f, -0.061704f, -0.062294f, -0.148234f, -0.120399f, -0.081919f, -0.197143f, -0.145716f, -0.095253f, 0.012192f, 0.113942f, 0.117291f, 0.127536f, 0.170682f, 0.134524f, 0.079862f, 0.079730f, -0.000739f, -0.060909f, -0.061511f, -0.035386f}, - {0.015743f, -0.001957f, 0.007460f, -0.002574f, -0.000238f, 0.014217f, -0.007542f, -0.000708f, 0.004007f, -0.001486f, 0.004724f, 0.005419f, -0.012324f, 0.004971f, 0.004639f, 0.002648f, -0.000595f, -0.004016f, 0.008438f, -0.010738f, -0.009087f, -0.001976f, 0.000234f, 0.004376f, -0.009224f, -0.006758f, -0.000981f, -0.005989f, 0.009856f, 0.000526f, -0.004195f, 0.007851f, -0.007178f, 0.000871f, -0.001608f, -0.004228f, -0.000654f, 0.006124f, 0.006216f, 0.003715f, 0.009627f, 0.007999f, -0.000726f, 0.002487f, -0.004048f, 0.010238f, 0.006362f, -0.004515f, 0.001049f, 0.001436f, 0.001012f, -0.006136f, 0.005412f, 0.001894f, -0.000956f, 0.010866f, -0.005802f, -0.006491f, -0.000898f, 0.003323f, 0.000678f, -0.001315f, -0.004057f, -0.002588f, 0.003371f, -0.002920f, -0.000720f, -0.002203f, 0.003531f, -0.001443f, 0.008130f, 0.004019f, -0.005395f, -0.003026f, 0.004578f, -0.005000f, -0.002789f, -0.004011f, -0.007812f, 0.004727f, 0.007487f, 0.013224f, 0.003633f, -0.009099f, -0.016294f, 0.003669f, -0.007568f, 0.000768f, 0.005226f, 0.002120f, 0.013336f, -0.010840f, -0.002623f, -0.001365f, -0.000794f, -0.009282f, - 0.005871f, 0.002589f, 0.001281f, 0.000391f, -0.004528f, -0.003395f, -0.003263f, -0.000929f, 0.000525f, 0.002366f, -0.003405f, 0.005203f, 0.011928f, -0.000221f, 0.005331f, -0.008252f, -0.004829f, -0.009903f, -0.004805f, 0.010872f, 0.000565f, -0.002003f, 0.001954f, 0.011534f, 0.001275f, 0.005900f, -0.001384f, -0.005126f, -0.001620f, 0.006685f, -0.005518f, 0.010382f, 0.006311f, 0.011688f, 0.005710f, 0.000963f, -0.003456f, -0.007355f, -0.004157f, -0.006350f, -0.000959f, -0.004550f, 0.001974f, 0.000713f, -0.002520f, 0.001988f, -0.002140f, 0.004433f, -0.000912f, -0.000768f, 0.005943f, -0.000176f, -0.000206f, 0.001229f, -0.005286f, 0.003074f, -0.022865f, -0.005181f, 0.009368f, 0.001643f, 0.012772f, 0.006820f, -0.010536f, 0.002779f, -0.000245f, 0.004195f, -0.003787f, -0.017542f, 0.010112f, 0.006221f, 0.011587f, 0.014528f, 0.012469f, 0.004400f, 0.000140f, -0.017859f, -0.001875f, 0.008239f, -0.008188f, -0.007043f, -0.018710f, -0.001218f, -0.003163f, -0.002119f, -0.004794f, 0.002259f, -0.011190f, 0.005136f, -0.002000f, 0.004776f, 0.001341f, -0.007430f, 0.005734f, 0.004898f, 0.012900f, -0.001429f, - -0.010429f, -0.005272f, 0.005559f, 0.002354f, -0.002655f, 0.000643f, 0.004073f, 0.000655f, -0.007643f, 0.000058f, 0.001532f, -0.000665f, 0.000414f, -0.004627f, -0.002166f, -0.006197f, -0.001382f, 0.008040f, 0.002733f, -0.002463f, 0.003279f, -0.000773f, -0.000477f, 0.001471f, -0.009175f, -0.000514f, -0.000522f, 0.005470f, 0.009790f, -0.002461f, -0.001053f, -0.005794f, -0.004969f, 0.003267f, 0.011195f, -0.008766f, -0.001593f, 0.000830f, -0.000767f, -0.002678f, 0.001924f, -0.002666f, 0.012610f, 0.004720f, 0.004239f, -0.004263f, 0.000299f, 0.001169f, 0.001177f, -0.021727f, -0.011774f, -0.000999f, -0.005435f, -0.006732f, -0.000367f, -0.005666f, -0.022124f, 0.013161f, 0.002998f, 0.005958f, -0.002354f, 0.004537f, -0.005868f, 0.000286f, 0.000769f, 0.011394f, -0.004071f, -0.002382f, -0.001924f, -0.001904f, -0.001839f, -0.000779f, 0.012321f, -0.002356f, -0.000196f, -0.006988f, -0.000402f, -0.003347f, 0.004006f, 0.002081f, -0.011951f, 0.009328f, -0.012091f, -0.000163f, 0.010621f, -0.001443f, 0.000416f, 0.000893f, -0.000219f, -0.007319f, -0.005233f, 0.012285f, 0.007088f, -0.014981f, -0.008012f, 0.002513f, - -0.008795f, -0.006297f, 0.006544f, -0.010719f, 0.002211f, 0.002784f, 0.006331f, 0.013133f, 0.010083f, 0.006243f, 0.004808f, -0.008695f, -0.009038f, -0.007793f, 0.002745f, 0.011258f, 0.004442f, 0.016665f, -0.003998f, -0.004164f, -0.004915f, 0.004764f, -0.005513f, 0.008205f, -0.015694f, -0.001919f, 0.011717f, 0.006217f, -0.011803f, 0.008871f, 0.014407f, 0.013689f, 0.008678f, 0.001787f, -0.000521f, -0.008739f, -0.011431f, 0.004998f, -0.001093f, 0.011623f, -0.000898f, 0.007021f, -0.007152f, -0.004587f, -0.003844f, 0.001316f, 0.003642f, -0.000459f, -0.013993f, 0.003150f, 0.004819f, 0.003729f, 0.005998f, 0.003922f, -0.007617f, -0.018437f, -0.006050f, 0.002987f, 0.003561f, 0.001146f, -0.000846f, 0.003826f, -0.007712f, 0.000174f, -0.013968f, 0.006822f, -0.014414f, -0.003447f, -0.006148f, -0.009086f, 0.006830f, 0.003434f, 0.002857f, -0.007835f, -0.004080f, -0.001982f, -0.008343f, 0.001264f, -0.000773f, 0.004944f, -0.003618f, -0.006395f, -0.005387f, -0.015896f, 0.005182f, 0.002618f, 0.007034f, 0.011264f, 0.013309f, 0.006143f, -0.005322f, -0.006763f, -0.003739f, 0.008480f, 0.008446f, 0.007813f, - -0.001177f, 0.005572f, -0.015892f, 0.002042f, -0.007511f, 0.000996f, 0.002540f, -0.009930f, 0.003833f, 0.029667f, 0.003380f, -0.002453f, -0.016458f, 0.023913f, 0.000105f, 0.010135f, 0.001341f, -0.000338f, -0.012749f, 0.012698f, 0.003384f, -0.006772f, 0.001808f, 0.001109f, -0.004984f, 0.005232f, 0.013392f, -0.003683f, 0.014233f, -0.003997f, 0.006194f, -0.000058f, 0.009455f, 0.008402f, 0.009422f, 0.000271f, -0.004833f, 0.007404f, -0.005097f, 0.006545f, -0.001613f, 0.006600f, 0.006461f, 0.006166f, -0.000552f, -0.001652f, 0.002635f, -0.005000f, -0.007262f, -0.018994f, 0.012804f, -0.012202f, 0.008956f, 0.001328f, 0.003949f, -0.002006f, -0.022578f, -0.004710f, -0.005839f, -0.010884f, 0.001891f, 0.007234f, -0.014291f, -0.004324f, 0.007105f, 0.001599f, 0.010941f, 0.018599f, 0.000142f, -0.004377f, -0.003554f, -0.018173f, 0.006847f, 0.004688f, -0.002271f, -0.008630f, -0.010373f, -0.001235f, 0.005188f, -0.003492f, -0.005141f, -0.007624f, 0.001895f, 0.013161f, 0.005756f, 0.001863f, -0.030747f, -0.014240f, -0.004509f, 0.005994f, -0.003899f, 0.010074f, 0.034536f, 0.010585f, -0.013035f, 0.001753f, - -0.015375f, -0.005129f, 0.010335f, -0.012261f, -0.003316f, 0.015302f, 0.003486f, -0.004100f, 0.001947f, 0.008571f, -0.005541f, 0.004057f, 0.004353f, 0.004365f, -0.008899f, 0.003763f, -0.004307f, -0.005109f, -0.013025f, -0.005130f, -0.007728f, -0.014362f, 0.005944f, 0.000355f, -0.001244f, 0.014229f, 0.010198f, 0.003577f, 0.011235f, -0.000013f, -0.014886f, 0.012230f, -0.001691f, -0.010029f, -0.008191f, -0.014517f, 0.000341f, 0.017510f, 0.000862f, -0.007622f, 0.007079f, -0.012893f, -0.008520f, 0.006921f, -0.010933f, -0.013758f, -0.007803f, -0.004061f, 0.007402f, -0.011897f, -0.004421f, -0.005088f, 0.015167f, 0.003273f, -0.006667f, 0.010157f, 0.007201f, -0.020212f, 0.018294f, -0.007492f, 0.001248f, -0.009056f, 0.015577f, -0.002677f, -0.011335f, -0.035699f, -0.005230f, 0.017956f, 0.004010f, -0.027889f, 0.012011f, -0.000362f, -0.006190f, -0.009157f, -0.007718f, -0.003032f, -0.016951f, -0.003058f, 0.012653f, 0.016961f, 0.019917f, 0.012194f, 0.018097f, -0.006371f, 0.014113f, 0.006880f, -0.029717f, -0.000887f, 0.006922f, 0.010149f, 0.004376f, -0.010184f, -0.000105f, -0.002226f, 0.009574f, -0.017538f, - -0.006975f, 0.012882f, -0.005002f, 0.007240f, 0.003085f, -0.011627f, -0.013660f, -0.006640f, -0.020111f, -0.005443f, -0.006744f, 0.008036f, 0.002045f, -0.011034f, -0.003434f, -0.023680f, -0.006920f, 0.010002f, -0.007921f, -0.023279f, -0.001346f, 0.013786f, -0.029683f, 0.008765f, 0.003626f, 0.009646f, -0.014818f, -0.005671f, -0.014297f, 0.001734f, -0.005502f, -0.013801f, -0.005864f, -0.001644f, 0.005974f, -0.021036f, 0.005765f, 0.018484f, 0.023493f, 0.017809f, 0.018068f, 0.007615f, -0.011134f, 0.013051f, 0.021719f, -0.029959f, 0.016311f, 0.016556f, -0.032409f, -0.007651f, 0.008896f, 0.036851f, -0.002063f, -0.001172f, -0.007815f, -0.008893f, 0.044950f, 0.023103f, 0.006829f, 0.006724f, 0.023611f, 0.000799f, -0.002857f, -0.007331f, 0.004049f, -0.018623f, -0.017374f, -0.002783f, 0.006144f, 0.014677f, 0.006605f, 0.004421f, -0.006243f, 0.002730f, -0.014096f, 0.007569f, -0.021163f, 0.022760f, -0.001898f, -0.008986f, -0.011998f, -0.012567f, -0.021421f, 0.005483f, -0.020746f, -0.005342f, 0.014904f, -0.001530f, -0.006889f, -0.005041f, -0.003059f, -0.016083f, -0.012275f, -0.006049f, -0.007448f, -0.001919f, - 0.006878f, 0.006046f, 0.001285f, 0.003433f, -0.015853f, 0.030146f, 0.015898f, 0.003181f, -0.002016f, 0.039194f, -0.004441f, -0.003055f, -0.009076f, -0.014974f, -0.005384f, 0.040562f, 0.013718f, 0.008399f, 0.019592f, -0.022580f, -0.013637f, 0.012529f, 0.013408f, 0.030011f, 0.004203f, 0.008173f, -0.020550f, -0.001445f, 0.009896f, -0.027008f, -0.008775f, 0.010440f, -0.009082f, 0.000054f, 0.007168f, 0.019475f, -0.006852f, 0.007419f, 0.003906f, 0.004028f, 0.016743f, 0.014367f, 0.017856f, -0.014518f, -0.009609f, 0.019126f, -0.024865f, -0.008600f, -0.008334f, -0.002062f, -0.006828f, -0.016229f, 0.015249f, -0.000993f, -0.017192f, 0.000346f, -0.006859f, -0.018256f, -0.022281f, -0.012822f, -0.013416f, 0.025641f, -0.008482f, -0.007213f, -0.015656f, -0.001866f, -0.008051f, 0.003440f, 0.030696f, -0.006423f, -0.010269f, 0.004579f, -0.002019f, 0.017092f, -0.020868f, 0.034216f, 0.006786f, -0.034454f, -0.024716f, 0.008013f, -0.022940f, -0.000556f, -0.024587f, -0.000898f, 0.004789f, -0.004216f, 0.025718f, 0.031585f, -0.016215f, 0.002541f, -0.007275f, -0.033476f, 0.015766f, 0.076169f, -0.010533f, 0.001424f, - -0.030100f, -0.011331f, 0.024205f, -0.000907f, 0.044642f, 0.027756f, 0.025783f, 0.002469f, 0.020416f, -0.032371f, 0.033829f, 0.018688f, 0.003770f, 0.006470f, -0.017831f, 0.011099f, 0.001989f, 0.034550f, 0.020245f, 0.023833f, -0.005493f, 0.004504f, 0.007912f, -0.019176f, -0.015111f, -0.005482f, 0.012215f, 0.040017f, -0.008049f, -0.010154f, -0.010405f, -0.004602f, 0.007272f, -0.021281f, -0.004513f, 0.001043f, -0.010333f, -0.022598f, -0.002871f, -0.029336f, -0.009153f, 0.021621f, -0.019750f, -0.006916f, -0.001817f, 0.004682f, -0.033493f, -0.018815f, -0.002038f, -0.000734f, -0.004163f, 0.025909f, 0.012818f, 0.004748f, 0.016622f, 0.026809f, -0.011465f, -0.002500f, -0.016608f, 0.012600f, -0.012267f, 0.017000f, 0.018546f, 0.022208f, 0.036703f, 0.013604f, -0.021024f, 0.000397f, 0.059779f, 0.022703f, 0.036276f, 0.019162f, 0.037599f, 0.041300f, -0.042744f, 0.009901f, 0.030330f, 0.018300f, -0.012421f, -0.022792f, -0.020119f, 0.043234f, 0.002818f, 0.016117f, 0.022037f, -0.013229f, 0.005593f, 0.009379f, -0.027553f, -0.028460f, 0.022061f, 0.007729f, -0.042247f, -0.009572f, 0.052528f, 0.025689f, - -0.001238f, -0.030547f, 0.008837f, 0.008117f, 0.031333f, 0.010893f, -0.017223f, 0.021498f, 0.002373f, -0.008767f, -0.004578f, -0.006192f, -0.026988f, -0.011712f, 0.002247f, 0.004750f, -0.032093f, -0.032346f, -0.021231f, -0.008930f, -0.037993f, 0.021953f, -0.004318f, -0.025009f, 0.002690f, 0.001270f, -0.013439f, -0.002370f, 0.005252f, 0.000602f, 0.005487f, 0.010344f, 0.011671f, -0.013273f, -0.019988f, 0.023423f, 0.041977f, 0.021701f, 0.008739f, 0.034355f, -0.010199f, 0.019452f, 0.039599f, 0.028529f, -0.000857f, 0.006697f, -0.019521f, -0.024968f, 0.019400f, -0.023445f, 0.003090f, -0.007819f, -0.003531f, -0.008661f, -0.039615f, 0.011045f, -0.019130f, -0.008852f, -0.014800f, -0.002542f, 0.033802f, 0.033483f, -0.067909f, 0.020939f, 0.021475f, -0.021131f, -0.034575f, -0.045056f, 0.007884f, -0.013272f, 0.008278f, -0.015756f, -0.012409f, -0.007352f, 0.041950f, 0.010595f, -0.003704f, -0.000761f, -0.006734f, -0.012588f, 0.010584f, 0.006958f, -0.000231f, 0.016826f, 0.003633f, -0.003570f, 0.005979f, 0.015284f, 0.043329f, 0.004359f, 0.005326f, -0.021410f, -0.009173f, -0.010120f, -0.010780f, -0.001280f, - -0.003596f, 0.014404f, 0.020761f, 0.001046f, 0.023992f, -0.005486f, -0.004003f, -0.004809f, -0.002607f, -0.041891f, 0.047466f, 0.001376f, 0.003456f, -0.003298f, -0.012198f, 0.012809f, -0.003102f, 0.019523f, 0.001268f, -0.018045f, 0.005196f, 0.020836f, -0.014245f, 0.019497f, 0.004937f, -0.028263f, -0.004523f, -0.005257f, -0.052126f, -0.016711f, 0.014348f, 0.015463f, -0.019840f, -0.013011f, 0.032479f, 0.007913f, 0.008551f, -0.027348f, 0.016761f, -0.012149f, 0.015848f, -0.016141f, 0.021035f, -0.023119f, -0.019429f, 0.029921f, 0.001747f, 0.006190f, -0.021259f, -0.044464f, -0.006362f, 0.010476f, 0.000976f, 0.016305f, -0.017545f, 0.000435f, -0.002609f, -0.033653f, -0.025321f, 0.008605f, -0.038332f, -0.025381f, 0.008904f, -0.001731f, -0.040060f, -0.007234f, -0.021306f, 0.022025f, 0.011644f, 0.002455f, -0.011487f, -0.025328f, -0.052709f, 0.015757f, -0.025236f, 0.025477f, -0.011203f, -0.010956f, -0.007673f, -0.015063f, 0.004452f, 0.005335f, -0.043133f, -0.019417f, 0.035898f, 0.032530f, -0.038964f, 0.044278f, -0.001267f, 0.032133f, -0.011957f, -0.009941f, -0.008306f, -0.015185f, 0.013366f, -0.014987f, - -0.041766f, -0.021548f, 0.039303f, -0.011684f, -0.014249f, -0.004246f, 0.007749f, 0.007017f, 0.015572f, -0.052508f, 0.006983f, 0.033024f, 0.016964f, 0.023950f, 0.018585f, -0.017876f, -0.030625f, -0.025579f, -0.015088f, -0.029639f, -0.001655f, 0.014328f, 0.032721f, -0.005423f, -0.001601f, -0.054520f, 0.032764f, 0.041183f, -0.006558f, -0.021878f, -0.022677f, -0.013611f, 0.061410f, -0.037046f, -0.000261f, -0.003963f, 0.016463f, -0.002256f, 0.070719f, 0.002273f, -0.038743f, -0.009564f, -0.036838f, 0.048486f, 0.041416f, -0.032888f, 0.038942f, 0.010548f, 0.031306f, 0.012586f, -0.059369f, 0.019420f, 0.031453f, -0.040057f, -0.011572f, -0.045509f, -0.023434f, 0.002678f, -0.043024f, -0.035409f, -0.001213f, -0.028388f, -0.000565f, 0.011731f, -0.010725f, -0.027960f, 0.024035f, 0.023391f, -0.048406f, -0.035327f, 0.020239f, 0.010304f, 0.013091f, 0.026445f, 0.032232f, -0.009697f, -0.017072f, 0.001293f, -0.010787f, 0.001911f, -0.002878f, -0.013415f, 0.007485f, -0.063962f, 0.024426f, 0.036365f, -0.032223f, -0.023998f, 0.025943f, -0.015011f, 0.017496f, 0.039743f, 0.072633f, 0.113148f, 0.005773f, -0.042458f, - -0.055195f, -0.011235f, 0.004769f, -0.011500f, 0.056308f, 0.042575f, 0.030434f, 0.048963f, 0.036583f, 0.029681f, 0.004424f, 0.024306f, -0.026212f, 0.042616f, 0.049470f, 0.005251f, 0.051387f, -0.018035f, 0.006671f, 0.013311f, -0.042772f, -0.028599f, -0.008054f, -0.025110f, -0.029116f, -0.002824f, 0.052880f, 0.001182f, -0.006846f, 0.008062f, 0.013559f, -0.005012f, -0.065033f, -0.007574f, 0.020691f, -0.008338f, -0.017849f, 0.010016f, 0.029272f, 0.048214f, 0.014551f, 0.025294f, 0.036099f, 0.042118f, -0.053011f, -0.037555f, 0.025285f, -0.015005f, 0.074698f, -0.006174f, 0.064751f, -0.048376f, 0.032704f, 0.051136f, 0.005387f, 0.009115f, 0.033624f, -0.053303f, -0.021468f, 0.002158f, 0.034778f, 0.001488f, 0.039623f, 0.014921f, 0.017620f, 0.036646f, 0.017617f, -0.004488f, -0.010413f, 0.078670f, 0.025738f, 0.027109f, 0.057243f, -0.005075f, 0.011661f, 0.024335f, 0.036624f, -0.042295f, -0.033724f, -0.015074f, -0.036902f, -0.007400f, -0.049373f, 0.024084f, 0.038620f, 0.027402f, 0.038385f, -0.027305f, -0.014868f, 0.028735f, 0.022951f, -0.017670f, 0.039029f, 0.022281f, -0.009315f, -0.049529f, - 0.026493f, 0.027778f, -0.024680f, -0.005218f, 0.013853f, 0.005282f, -0.038958f, 0.042975f, 0.011807f, 0.046180f, 0.026080f, 0.016910f, -0.026171f, 0.020405f, -0.013929f, 0.071072f, -0.057693f, 0.004142f, 0.022036f, -0.013218f, -0.037246f, 0.021375f, 0.023270f, -0.007057f, 0.022894f, -0.024902f, 0.059616f, -0.030363f, 0.015677f, 0.010134f, -0.037941f, -0.019399f, -0.052396f, 0.019140f, 0.015171f, -0.042137f, 0.036117f, 0.027699f, -0.027203f, 0.018791f, -0.003288f, 0.056930f, 0.019240f, -0.033914f, -0.022939f, -0.025236f, 0.017995f, -0.015740f, 0.014637f, -0.008442f, -0.068380f, 0.033397f, -0.058026f, 0.064164f, 0.076699f, -0.001978f, 0.015109f, -0.058716f, 0.001509f, -0.011570f, 0.008272f, 0.037273f, 0.038216f, -0.008721f, 0.020832f, 0.031321f, 0.006760f, 0.014300f, 0.010586f, 0.014143f, -0.005558f, 0.044760f, -0.003837f, 0.011709f, -0.021716f, 0.050132f, 0.012585f, -0.002509f, 0.000589f, 0.045333f, 0.018781f, 0.022477f, 0.050096f, -0.008638f, -0.027370f, 0.060850f, -0.060251f, -0.024930f, -0.008571f, 0.015937f, 0.043666f, 0.011719f, -0.014681f, -0.015365f, -0.027835f, 0.001503f, - -0.003124f, 0.014169f, 0.068755f, 0.066640f, 0.043436f, 0.060356f, -0.002771f, 0.089792f, -0.026660f, 0.026685f, -0.018094f, 0.004386f, 0.030357f, -0.011132f, 0.006187f, -0.023880f, -0.030796f, 0.003056f, -0.017971f, 0.020472f, -0.025312f, 0.045950f, -0.028448f, -0.049511f, -0.016933f, -0.010257f, 0.001119f, 0.066801f, -0.030039f, -0.003858f, 0.020069f, 0.017073f, -0.002732f, -0.027698f, 0.105930f, 0.148639f, 0.043224f, 0.115319f, -0.029135f, -0.084752f, -0.060906f, -0.042818f, 0.016455f, 0.019164f, -0.030920f, -0.046582f, 0.034563f, 0.048951f, 0.026278f, 0.048882f, 0.035695f, 0.007427f, 0.011776f, 0.005456f, -0.006638f, -0.035978f, 0.010699f, -0.042175f, 0.023858f, -0.001906f, -0.041855f, 0.041246f, 0.021655f, 0.018657f, 0.070187f, 0.043983f, -0.026360f, -0.016492f, -0.032008f, -0.033966f, -0.044356f, -0.017425f, -0.003852f, -0.032917f, -0.015204f, 0.062777f, 0.092360f, 0.070390f, 0.003868f, 0.047439f, 0.046369f, 0.078574f, 0.030317f, -0.044565f, -0.076860f, -0.045596f, -0.051835f, 0.024508f, 0.014710f, -0.097699f, -0.073557f, -0.018908f, 0.032025f, 0.085062f, -0.074097f, -0.004723f, - -0.066070f, -0.009615f, 0.061083f, -0.041630f, 0.015858f, -0.059562f, -0.021311f, -0.020144f, 0.034608f, -0.057310f, -0.005266f, -0.011518f, -0.043972f, -0.084447f, 0.009139f, 0.045185f, -0.039561f, 0.070632f, -0.029629f, 0.027319f, -0.010505f, -0.084298f, -0.043420f, -0.005334f, -0.049705f, -0.113418f, -0.032259f, 0.039063f, 0.061402f, -0.031762f, -0.048725f, -0.101457f, -0.030427f, 0.028040f, -0.020530f, -0.030506f, -0.050290f, 0.010238f, -0.011764f, -0.010027f, -0.009812f, 0.018563f, 0.039761f, -0.032953f, 0.030713f, 0.024733f, -0.031858f, -0.093077f, 0.007274f, 0.005539f, 0.023466f, 0.009098f, 0.059719f, 0.004051f, -0.090643f, -0.001455f, -0.099721f, -0.002600f, 0.035027f, 0.039607f, -0.007280f, 0.003205f, 0.047061f, -0.026748f, -0.016906f, -0.033896f, 0.031043f, 0.019121f, -0.013191f, 0.032894f, -0.009724f, 0.011925f, 0.018439f, 0.055230f, 0.009933f, -0.024576f, -0.060245f, -0.025777f, 0.035696f, 0.023656f, 0.053718f, 0.067436f, 0.130685f, 0.056713f, 0.036948f, -0.039008f, 0.006861f, -0.081306f, -0.024628f, 0.056660f, -0.027692f, -0.023361f, -0.005808f, -0.018267f, -0.064995f, -0.072586f, - -0.105840f, -0.033566f, 0.000545f, -0.008298f, 0.069858f, 0.019013f, 0.091171f, 0.055861f, 0.028571f, -0.012822f, -0.033018f, -0.006417f, 0.127824f, 0.007721f, 0.037293f, 0.020477f, -0.015312f, 0.063197f, -0.025736f, 0.050957f, -0.055111f, -0.005790f, -0.039436f, 0.047923f, -0.066954f, -0.014545f, 0.021714f, 0.021114f, 0.022831f, -0.059565f, 0.043337f, -0.068138f, 0.015011f, -0.033511f, -0.021460f, 0.067305f, 0.005417f, 0.004203f, 0.024789f, -0.025865f, 0.000155f, 0.017449f, -0.080574f, 0.002039f, 0.020975f, -0.012141f, 0.055233f, -0.023871f, -0.008002f, 0.089195f, -0.031177f, -0.074307f, 0.003150f, -0.028019f, 0.009367f, -0.005508f, -0.000038f, -0.059402f, 0.036442f, -0.009351f, -0.075733f, 0.049525f, -0.093497f, 0.020580f, -0.012734f, -0.037252f, -0.043856f, -0.037166f, -0.126253f, -0.129623f, -0.111031f, -0.056833f, 0.223366f, 0.068757f, -0.030240f, -0.031210f, -0.113669f, -0.237990f, -0.028803f, 0.061679f, 0.076975f, 0.032273f, -0.038618f, -0.028934f, -0.071935f, -0.078368f, 0.055289f, -0.056899f, 0.139740f, 0.104936f, -0.168242f, 0.052010f, 0.019274f, -0.036319f, 0.010337f, 0.117500f, - 0.014448f, 0.080636f, 0.160304f, -0.036914f, -0.136478f, 0.004897f, -0.025543f, -0.126013f, -0.036779f, 0.059001f, -0.008308f, 0.072993f, 0.116930f, 0.009622f, -0.106770f, -0.204317f, -0.177549f, -0.156940f, -0.019426f, 0.150448f, 0.040025f, 0.039706f, 0.019592f, -0.041616f, -0.207025f, -0.127874f, -0.068575f, -0.025033f, 0.009135f, 0.046078f, 0.041290f, 0.057723f, 0.055357f, 0.073736f, -0.091475f, -0.030825f, -0.075680f, -0.004958f, -0.082532f, 0.050507f, 0.044921f, 0.102337f, 0.107378f, 0.056101f, -0.001685f, -0.025295f, -0.021761f, -0.128311f, 0.029311f, -0.030022f, -0.240143f, -0.267502f, -0.185992f, -0.191341f, -0.060819f, 0.184751f, 0.120540f, 0.200369f, 0.225623f, 0.348666f, 0.227829f, 0.235143f, 0.147871f, -0.026688f, -0.192290f, -0.324505f, -0.379097f, -0.332426f, -0.263491f, -0.196013f, -0.056466f, -0.023869f, -0.038653f, -0.005490f, 0.066579f, 0.115103f, 0.168065f, 0.141835f, 0.201614f, 0.191409f, 0.254844f, 0.228919f, 0.056997f, 0.148716f, -0.046782f, 0.029786f, 0.021985f, -0.005747f, -0.033361f, -0.252655f, -0.295662f, -0.379724f, -0.437834f, -0.403966f, -0.225809f, -0.207119f, - -0.167213f, -0.212929f, -0.237735f, -0.063948f, 0.048090f, 0.129139f, 0.203594f, 0.290614f, 0.358266f, 0.453750f, 0.612432f, 0.585828f, 0.451692f, 0.356159f, 0.305522f, 0.150023f, 0.258568f, -0.116313f, -0.207195f, -0.514013f, -0.569319f, -0.724973f, -0.674765f, -0.633527f, -0.571699f, -0.571859f, -0.307912f, -0.194162f, -0.005457f, 0.402584f, 0.315610f, 0.209594f} - }, - { - {-0.012901f, 0.021523f, -0.005750f, 0.003586f, -0.006979f, 0.002754f, -0.015214f, 0.000844f, -0.004535f, 0.005489f, -0.008256f, -0.005958f, -0.001589f, 0.005589f, -0.001142f, -0.000926f, -0.003156f, -0.004308f, -0.010181f, -0.002142f, -0.008497f, -0.004551f, -0.007192f, 0.003227f, -0.001518f, 0.000560f, 0.003628f, 0.002154f, -0.005012f, 0.002316f, -0.001760f, -0.000417f, -0.001872f, -0.001597f, -0.004479f, 0.000328f, -0.008156f, 0.010269f, -0.003097f, -0.002449f, -0.001584f, 0.000650f, -0.000069f, 0.001221f, -0.009504f, 0.000705f, 0.004120f, 0.000328f, 0.001784f, -0.000208f, 0.002152f, 0.007758f, -0.002440f, 0.004782f, 0.005578f, -0.008173f, -0.002568f, -0.001945f, 0.007663f, -0.001435f, 0.002354f, 0.008740f, 0.000059f, -0.002416f, 0.001889f, 0.002565f, 0.002551f, 0.000748f, 0.004485f, 0.000056f, -0.001367f, 0.003680f, -0.003779f, 0.001174f, -0.000202f, -0.006743f, 0.025308f, 0.003267f, -0.010547f, 0.004187f, -0.006513f, 0.002247f, -0.004094f, -0.002424f, -0.005617f, 0.004711f, 0.007815f, 0.002574f, 0.002727f, -0.013148f, 0.003093f, 0.000673f, 0.004651f, 0.005618f, 0.003269f, 0.008239f, - -0.001222f, -0.003925f, 0.001248f, 0.009764f, 0.000481f, -0.006701f, -0.000297f, 0.008381f, 0.004734f, 0.001301f, 0.000497f, 0.002682f, 0.000216f, 0.001057f, 0.001953f, 0.000200f, -0.002420f, 0.000120f, 0.000481f, 0.003576f, -0.004241f, -0.010472f, 0.008473f, 0.008524f, 0.007444f, 0.007066f, 0.000054f, 0.004072f, 0.006689f, -0.006155f, -0.001111f, 0.000307f, -0.008449f, 0.002479f, 0.001011f, 0.008478f, 0.001179f, 0.004975f, 0.000471f, 0.010548f, 0.005418f, -0.000956f, 0.007353f, 0.004792f, -0.002019f, -0.007668f, 0.002291f, 0.002686f, -0.001967f, 0.001172f, -0.004504f, -0.000652f, 0.004305f, 0.003490f, 0.003574f, 0.008772f, 0.021260f, -0.013926f, 0.004916f, 0.012053f, 0.002931f, 0.008554f, 0.010284f, -0.009019f, 0.002079f, -0.000642f, 0.004083f, -0.011472f, -0.009136f, -0.001514f, 0.009212f, 0.012531f, -0.004592f, -0.003846f, 0.006024f, -0.009755f, -0.013247f, -0.002220f, -0.015602f, 0.005639f, 0.005328f, 0.001689f, -0.009655f, -0.009662f, 0.003641f, -0.005500f, 0.001451f, 0.000000f, 0.010465f, 0.011240f, 0.009982f, -0.001290f, 0.007028f, -0.010494f, 0.004818f, -0.006042f, - -0.000475f, 0.000924f, 0.008567f, -0.008762f, -0.007986f, 0.000438f, 0.011244f, 0.004974f, 0.004477f, -0.006328f, 0.003910f, 0.003177f, -0.003122f, -0.013458f, -0.002082f, -0.004259f, -0.005916f, -0.005024f, 0.006585f, -0.005354f, -0.001649f, 0.001962f, 0.004235f, 0.010515f, -0.003500f, 0.000323f, -0.007141f, -0.003066f, 0.002030f, -0.009826f, -0.000060f, 0.003466f, 0.007899f, -0.001652f, -0.004332f, -0.002178f, -0.008819f, -0.008105f, -0.014156f, -0.004020f, 0.001659f, -0.004815f, -0.007499f, -0.004435f, -0.014125f, -0.008223f, 0.013542f, -0.001216f, -0.006987f, 0.006897f, -0.012079f, -0.003251f, -0.014901f, -0.003593f, -0.011896f, -0.006492f, 0.012448f, 0.000055f, -0.003391f, -0.015476f, -0.009977f, -0.003981f, -0.007087f, 0.001881f, -0.008637f, 0.000145f, 0.004173f, 0.015108f, 0.006967f, 0.005276f, 0.006053f, 0.012113f, -0.011473f, -0.000748f, -0.003988f, -0.008873f, 0.002613f, -0.002308f, -0.004019f, -0.009256f, 0.003685f, 0.008461f, 0.000118f, -0.007213f, -0.005077f, 0.022623f, -0.000770f, -0.007296f, -0.010192f, -0.014554f, -0.019486f, -0.002936f, -0.010571f, 0.001610f, -0.002859f, 0.004565f, - -0.000043f, 0.001882f, -0.009585f, 0.000641f, 0.000294f, 0.010600f, 0.002637f, -0.009074f, -0.000769f, -0.003306f, -0.003841f, -0.002739f, 0.002538f, 0.005219f, 0.004214f, -0.006472f, -0.032166f, 0.013156f, -0.005490f, 0.005726f, -0.013112f, -0.005126f, -0.010185f, -0.009346f, 0.001001f, -0.002760f, -0.006237f, 0.016807f, 0.004655f, -0.001278f, -0.009658f, -0.002924f, 0.005041f, -0.011251f, -0.005688f, -0.010710f, -0.005683f, 0.016042f, 0.001961f, 0.010766f, -0.000577f, 0.000110f, -0.002212f, 0.003199f, 0.003379f, -0.008184f, 0.000574f, 0.002713f, 0.005212f, 0.017354f, -0.008475f, -0.010209f, -0.001547f, 0.019167f, 0.006497f, 0.020383f, 0.002326f, 0.002040f, -0.003016f, 0.010156f, -0.001163f, 0.014888f, -0.000909f, -0.001537f, -0.002042f, -0.005945f, 0.006874f, 0.002078f, -0.004612f, 0.004460f, 0.006198f, 0.010405f, -0.005230f, -0.000319f, -0.001140f, 0.009307f, -0.003007f, -0.001311f, -0.002698f, -0.002087f, 0.002932f, -0.002715f, 0.001810f, 0.001832f, -0.001466f, 0.002584f, -0.014326f, 0.001825f, 0.010494f, 0.003878f, 0.013694f, 0.001583f, 0.001656f, 0.004107f, -0.007277f, -0.003754f, - -0.000476f, -0.016375f, -0.003013f, -0.000167f, -0.008323f, -0.028729f, -0.007223f, -0.006440f, -0.012717f, -0.002725f, -0.003520f, 0.017487f, -0.006510f, 0.013154f, 0.005965f, 0.009408f, -0.018608f, -0.008503f, -0.018800f, -0.017442f, -0.000354f, 0.002942f, 0.010402f, -0.005461f, -0.008410f, -0.005238f, -0.012825f, 0.002401f, 0.005343f, 0.006271f, 0.003688f, -0.004044f, 0.004316f, -0.008583f, 0.000563f, -0.015273f, 0.005093f, -0.004115f, 0.001726f, 0.003080f, 0.005286f, 0.005766f, -0.006067f, 0.000010f, 0.014233f, -0.008010f, 0.006739f, 0.007204f, -0.000794f, 0.004243f, 0.006857f, -0.003137f, 0.002525f, 0.006883f, 0.000101f, 0.012279f, -0.006789f, -0.008763f, -0.004426f, 0.003928f, -0.000275f, -0.016668f, -0.008608f, -0.018442f, -0.020131f, -0.003506f, 0.005254f, -0.016352f, 0.007167f, -0.002728f, -0.000271f, -0.005646f, 0.005640f, -0.009731f, -0.000977f, 0.008842f, -0.026790f, -0.001592f, 0.007858f, 0.004882f, -0.014409f, -0.001999f, -0.009318f, 0.002022f, 0.002283f, 0.001658f, -0.015745f, -0.020770f, -0.014418f, 0.002171f, -0.011626f, 0.012023f, 0.003418f, -0.019964f, 0.013808f, 0.012333f, - 0.009420f, 0.008702f, -0.010321f, 0.015940f, 0.003734f, -0.000258f, -0.006796f, 0.005319f, 0.009097f, -0.008940f, -0.013543f, 0.004719f, -0.005477f, -0.016149f, -0.002745f, -0.015567f, -0.006274f, 0.028087f, -0.008132f, -0.012637f, -0.016320f, 0.000895f, 0.001891f, 0.011228f, 0.003765f, -0.010226f, 0.008656f, -0.001103f, -0.008820f, -0.010583f, -0.012122f, 0.017470f, 0.006974f, 0.011096f, -0.009050f, -0.011081f, 0.004278f, 0.003052f, -0.012471f, -0.000301f, -0.007997f, 0.011528f, -0.003047f, 0.001374f, -0.014640f, 0.009199f, 0.006441f, -0.007337f, -0.005914f, -0.004318f, 0.014741f, 0.000766f, 0.001673f, -0.003914f, 0.010659f, -0.010545f, -0.013674f, -0.000105f, 0.004028f, -0.003054f, -0.010816f, -0.016339f, -0.012955f, 0.014072f, 0.002120f, 0.017132f, 0.020423f, 0.019776f, 0.003475f, 0.026961f, 0.006913f, -0.002487f, 0.012813f, 0.009803f, 0.025048f, 0.003969f, 0.014646f, -0.018894f, 0.032378f, 0.023820f, 0.011886f, -0.009247f, -0.007080f, 0.011889f, 0.003233f, 0.008629f, -0.004148f, 0.014090f, -0.003514f, -0.003201f, 0.012922f, 0.010369f, -0.011979f, 0.008791f, -0.002780f, 0.013674f, - 0.015092f, -0.028170f, -0.004674f, 0.017834f, 0.005864f, 0.009821f, 0.008090f, 0.017620f, -0.007841f, 0.007191f, 0.000869f, -0.014437f, -0.006606f, -0.000236f, 0.003562f, -0.021350f, -0.001332f, 0.013686f, -0.010277f, 0.022865f, 0.017516f, -0.006884f, 0.000168f, 0.004321f, 0.008858f, 0.013190f, -0.004952f, -0.004528f, 0.021651f, -0.005458f, -0.000582f, 0.008837f, -0.000049f, 0.011738f, 0.008839f, 0.002583f, 0.003291f, 0.056929f, -0.027295f, 0.005632f, 0.024463f, -0.000610f, 0.002499f, 0.031755f, 0.034792f, 0.005482f, -0.000802f, 0.008501f, 0.000155f, 0.009004f, 0.011279f, -0.010587f, -0.001912f, 0.021037f, 0.019077f, -0.006579f, -0.013881f, -0.015351f, -0.015579f, -0.007969f, 0.016418f, -0.009725f, 0.008302f, 0.002213f, -0.018434f, 0.000048f, -0.011559f, -0.000218f, 0.007885f, 0.010355f, -0.024388f, -0.011041f, -0.018958f, -0.005158f, 0.034072f, 0.005981f, -0.000686f, 0.004212f, -0.000657f, 0.002950f, 0.011714f, 0.006906f, 0.018274f, 0.000520f, 0.014300f, 0.008475f, -0.008666f, 0.008438f, -0.014402f, 0.001881f, -0.014410f, -0.016292f, 0.009345f, -0.018045f, 0.010927f, 0.001248f, - 0.012742f, 0.009414f, 0.010071f, -0.008832f, 0.015146f, -0.016025f, 0.002767f, -0.006391f, 0.000512f, 0.024086f, 0.004205f, 0.013216f, 0.014567f, 0.000178f, -0.000526f, 0.011562f, -0.014712f, 0.011270f, -0.034102f, 0.005096f, 0.006868f, -0.023329f, 0.008939f, -0.001143f, 0.022216f, -0.007136f, -0.013091f, 0.008961f, -0.030134f, -0.010848f, 0.023115f, 0.009817f, -0.016136f, -0.036546f, 0.014561f, -0.005787f, 0.007362f, -0.023566f, -0.031588f, -0.021245f, 0.024679f, 0.001411f, 0.012932f, -0.003209f, -0.015347f, -0.021192f, 0.008127f, -0.006110f, -0.019458f, -0.021489f, -0.000126f, -0.019214f, -0.016019f, -0.008361f, -0.005416f, -0.020702f, 0.009541f, 0.013038f, 0.016440f, -0.009168f, 0.014357f, -0.013470f, 0.023759f, -0.005132f, -0.003370f, 0.019268f, 0.008012f, -0.005115f, -0.015297f, -0.006813f, 0.016693f, 0.004204f, -0.016343f, 0.006602f, 0.017690f, 0.018934f, 0.005667f, -0.023187f, -0.028241f, -0.002200f, 0.002221f, 0.001775f, -0.021374f, 0.005814f, 0.017224f, 0.006306f, -0.012079f, -0.032249f, 0.005012f, -0.013506f, -0.036308f, 0.002041f, -0.003540f, -0.016773f, 0.017720f, -0.042149f, - 0.024346f, 0.018525f, 0.020457f, 0.001869f, 0.021674f, 0.001140f, -0.016098f, -0.018236f, 0.001213f, 0.017307f, -0.014121f, 0.003171f, -0.028963f, 0.017805f, 0.018622f, -0.011166f, -0.007137f, 0.003589f, 0.020480f, 0.014993f, -0.012832f, -0.011130f, 0.013493f, -0.018984f, 0.004696f, -0.025575f, -0.001590f, -0.008179f, -0.034606f, -0.034952f, 0.005005f, 0.018814f, 0.007481f, -0.029923f, -0.017361f, 0.021456f, -0.026364f, -0.011003f, 0.018031f, -0.006073f, 0.022937f, -0.009411f, -0.019074f, 0.005804f, -0.026958f, 0.028223f, -0.004981f, 0.004463f, -0.015493f, -0.007511f, -0.003194f, -0.027740f, -0.018643f, 0.001564f, -0.006556f, 0.002099f, -0.011010f, -0.029379f, 0.003100f, -0.024430f, 0.008220f, -0.006622f, 0.014664f, -0.029359f, 0.010238f, 0.004224f, -0.011053f, 0.020631f, -0.005835f, -0.015636f, -0.031722f, -0.005013f, 0.002081f, -0.024599f, 0.011312f, -0.018684f, -0.006124f, 0.012638f, -0.013617f, 0.003700f, 0.015277f, 0.022674f, -0.006761f, 0.001799f, -0.008851f, -0.032141f, -0.007179f, -0.007570f, 0.013147f, -0.028399f, -0.000499f, -0.016798f, 0.016687f, -0.020202f, -0.026571f, 0.016450f, - 0.007712f, 0.010320f, 0.035871f, -0.007020f, -0.010575f, 0.009099f, -0.023313f, -0.028119f, 0.002098f, 0.033414f, 0.010439f, 0.018216f, -0.013824f, -0.018201f, -0.027469f, 0.004232f, 0.035181f, -0.017031f, 0.018481f, 0.002884f, 0.027486f, -0.043131f, -0.013026f, -0.002107f, 0.005222f, 0.022343f, 0.011859f, -0.033308f, -0.008162f, -0.016292f, -0.000726f, -0.038205f, -0.005142f, -0.014790f, 0.003244f, -0.020925f, -0.000470f, 0.002801f, -0.052579f, 0.004418f, -0.015734f, 0.001539f, -0.020001f, -0.002925f, 0.014485f, 0.004937f, -0.005700f, -0.008552f, -0.026508f, 0.026655f, 0.029198f, 0.007456f, 0.009015f, -0.025547f, 0.039833f, 0.013411f, 0.020277f, 0.051610f, 0.018784f, 0.035651f, -0.032755f, 0.008830f, 0.036213f, -0.009585f, -0.011911f, 0.006068f, -0.021063f, 0.017793f, 0.004997f, -0.024403f, -0.032697f, -0.001352f, 0.029059f, 0.000455f, -0.001617f, 0.019773f, -0.027069f, -0.005808f, -0.022207f, 0.014091f, -0.038302f, 0.001954f, -0.007786f, 0.015479f, -0.040106f, -0.026666f, -0.017295f, 0.013306f, 0.013461f, 0.010485f, -0.012814f, 0.011340f, -0.009491f, 0.013545f, -0.007782f, -0.002009f, - -0.002596f, -0.009817f, 0.007863f, 0.019581f, 0.010773f, 0.019739f, -0.001479f, -0.015849f, 0.002437f, -0.015736f, 0.046388f, -0.009992f, -0.046008f, -0.012454f, 0.012177f, 0.041603f, -0.040241f, -0.014526f, -0.003168f, 0.027482f, 0.000915f, -0.054367f, -0.007809f, 0.027970f, 0.052580f, 0.003989f, 0.036029f, 0.055850f, -0.005645f, 0.019338f, 0.023426f, -0.005066f, 0.043392f, -0.004270f, 0.052307f, 0.010547f, -0.019046f, -0.046316f, 0.021256f, 0.025759f, -0.044313f, -0.043054f, 0.011327f, -0.010032f, 0.001271f, -0.017099f, 0.040069f, -0.017991f, -0.011661f, 0.014038f, 0.009926f, 0.000487f, -0.018521f, -0.013323f, -0.022520f, 0.009158f, -0.001474f, -0.010637f, -0.001977f, 0.026916f, 0.039910f, -0.043156f, -0.002990f, -0.042064f, -0.004741f, -0.010650f, 0.041711f, -0.017393f, -0.017187f, -0.007794f, 0.025269f, 0.008873f, 0.006771f, 0.011140f, 0.009935f, -0.007105f, 0.000215f, -0.004973f, 0.006526f, -0.004441f, 0.038981f, -0.009611f, 0.010130f, 0.028334f, -0.014695f, -0.031001f, 0.006778f, 0.011626f, -0.011439f, -0.011288f, -0.002909f, 0.007499f, 0.019693f, -0.026122f, 0.036245f, 0.054769f, - 0.035857f, -0.013737f, -0.021767f, -0.048164f, -0.064023f, -0.021920f, -0.000107f, -0.009721f, -0.002924f, -0.005139f, 0.015905f, 0.001214f, -0.023705f, 0.016099f, -0.009179f, 0.001693f, 0.026757f, 0.045232f, -0.022260f, 0.043657f, 0.019946f, 0.025076f, 0.037371f, 0.057425f, -0.021287f, 0.029982f, -0.057990f, -0.006656f, -0.025698f, -0.056990f, 0.023863f, 0.014180f, 0.018100f, 0.008247f, 0.023388f, 0.007512f, -0.040834f, 0.035426f, 0.062194f, -0.008670f, -0.009329f, 0.015638f, 0.006707f, -0.012320f, -0.054342f, 0.005051f, 0.000782f, -0.004443f, 0.001333f, 0.019241f, -0.038676f, 0.009057f, 0.011748f, -0.007519f, -0.022052f, -0.010481f, -0.024643f, 0.026275f, -0.055783f, -0.007604f, -0.035660f, 0.020723f, 0.008765f, 0.021016f, -0.006559f, 0.006162f, -0.013794f, 0.035122f, 0.011021f, 0.028957f, -0.025134f, 0.028493f, 0.000020f, -0.026595f, 0.056984f, -0.008637f, 0.007581f, 0.038766f, -0.035841f, 0.043406f, 0.026219f, -0.032592f, 0.014882f, -0.011888f, 0.019581f, -0.045326f, 0.034779f, 0.005865f, 0.012987f, -0.003154f, 0.012354f, -0.036277f, 0.026101f, 0.043997f, -0.077330f, 0.008778f, - 0.034698f, -0.020424f, -0.024702f, -0.000411f, -0.023652f, -0.010492f, -0.063027f, -0.053630f, -0.007190f, -0.030567f, -0.036964f, -0.026385f, 0.016764f, -0.009075f, -0.018623f, -0.029751f, 0.028151f, 0.002411f, -0.045526f, -0.006651f, -0.000089f, -0.021171f, -0.006689f, 0.019167f, 0.013478f, -0.002575f, 0.000296f, 0.001538f, -0.011359f, 0.010455f, 0.021445f, -0.007270f, -0.005003f, 0.033535f, -0.061481f, -0.009227f, 0.017394f, 0.066482f, -0.027125f, -0.016150f, -0.024444f, -0.032390f, 0.014566f, 0.070623f, 0.012964f, 0.044163f, 0.008930f, -0.006020f, -0.003629f, -0.004033f, -0.033604f, 0.008551f, 0.007609f, -0.026112f, 0.006066f, 0.055732f, -0.008822f, -0.015372f, 0.009133f, -0.018034f, -0.004461f, 0.049604f, 0.070994f, 0.020886f, 0.042668f, 0.051121f, -0.017351f, -0.018484f, 0.005810f, -0.013945f, 0.003125f, -0.046036f, 0.000105f, -0.034756f, 0.012475f, 0.012102f, 0.024178f, 0.050970f, 0.057513f, -0.022269f, 0.129387f, -0.017141f, 0.003562f, -0.023284f, 0.015786f, -0.009549f, 0.015598f, 0.033593f, 0.010013f, -0.030346f, -0.016106f, -0.031745f, 0.000120f, -0.021413f, -0.039267f, 0.005814f, - 0.026579f, -0.003943f, 0.008217f, 0.012716f, 0.015877f, 0.000165f, -0.010829f, -0.014674f, 0.008346f, 0.000253f, -0.019205f, 0.008139f, 0.056070f, 0.039426f, 0.022957f, -0.046688f, 0.034430f, 0.026583f, -0.011662f, -0.014141f, -0.013645f, -0.018640f, -0.007362f, 0.015310f, -0.033270f, 0.003287f, 0.004955f, 0.020372f, 0.053495f, 0.010094f, 0.011649f, 0.002688f, -0.005617f, -0.010960f, 0.023576f, -0.014271f, 0.053965f, 0.016619f, -0.004514f, 0.022660f, 0.005038f, -0.036803f, -0.025294f, 0.029180f, 0.035409f, 0.011560f, -0.008372f, 0.021414f, 0.025205f, 0.033253f, 0.069560f, 0.004350f, -0.020390f, -0.040088f, -0.024928f, 0.011565f, 0.001496f, 0.013157f, 0.020973f, -0.019921f, 0.092176f, -0.013608f, 0.003992f, 0.010298f, -0.006869f, -0.001188f, 0.023182f, -0.017028f, -0.020163f, -0.010526f, 0.029893f, 0.026726f, -0.071079f, 0.013850f, 0.012301f, 0.029250f, -0.018079f, -0.027956f, -0.026626f, 0.020516f, 0.018573f, -0.028546f, -0.015532f, -0.011612f, 0.048075f, 0.024297f, 0.013639f, -0.009085f, -0.049448f, 0.014289f, 0.012676f, 0.025833f, -0.005967f, 0.013869f, -0.013589f, 0.005135f, - -0.042944f, 0.018232f, 0.017797f, 0.000991f, -0.010544f, -0.026645f, -0.053498f, 0.035213f, -0.022492f, 0.018368f, 0.018405f, 0.031265f, 0.004298f, -0.032070f, 0.054333f, 0.011333f, -0.053297f, -0.023898f, 0.031578f, 0.008435f, 0.041271f, 0.018601f, 0.006305f, -0.036770f, -0.019545f, 0.022443f, -0.067075f, 0.072471f, -0.052356f, 0.004623f, 0.040181f, -0.009369f, 0.080842f, 0.015154f, 0.009624f, -0.027564f, 0.087941f, 0.013105f, 0.025374f, -0.015368f, 0.028344f, 0.071993f, 0.021234f, 0.043758f, 0.056788f, -0.006519f, 0.065694f, -0.057611f, -0.023257f, -0.024114f, -0.021794f, 0.003573f, 0.007336f, -0.008481f, -0.027786f, -0.050063f, 0.040245f, 0.037967f, 0.013660f, 0.033926f, -0.066017f, -0.057465f, 0.013959f, 0.021755f, -0.032756f, -0.044041f, 0.021539f, -0.016520f, -0.061876f, -0.025053f, -0.015176f, 0.024718f, -0.057263f, 0.025543f, 0.015717f, 0.019455f, -0.029064f, -0.005287f, -0.028816f, -0.014572f, -0.074965f, -0.020999f, 0.029950f, -0.115766f, -0.039832f, -0.008028f, -0.006876f, 0.000164f, -0.071781f, -0.020454f, -0.105910f, -0.012113f, 0.015599f, -0.032518f, -0.036242f, -0.016715f, - 0.026009f, -0.013845f, -0.041145f, -0.045201f, -0.110474f, -0.041162f, 0.044948f, -0.050185f, -0.075913f, 0.056460f, -0.023402f, -0.083205f, 0.019563f, 0.069482f, -0.043369f, -0.020185f, 0.004106f, -0.054756f, 0.060448f, 0.089518f, 0.122972f, -0.017073f, -0.002156f, -0.045518f, -0.046287f, -0.080305f, 0.036344f, -0.011822f, 0.122445f, -0.023316f, -0.051209f, -0.070598f, 0.005309f, 0.025132f, -0.025996f, 0.025399f, 0.080078f, -0.028784f, -0.013380f, -0.052624f, -0.024549f, 0.056381f, 0.062304f, -0.059366f, -0.017262f, 0.034841f, -0.013190f, 0.017156f, -0.018467f, 0.080963f, 0.062369f, 0.135895f, 0.043090f, 0.062021f, -0.026386f, 0.045530f, 0.089268f, 0.032675f, -0.006291f, 0.024602f, -0.003744f, 0.062264f, 0.029703f, 0.089180f, 0.022981f, -0.081952f, 0.028990f, 0.037391f, 0.069438f, -0.035329f, -0.035352f, 0.045518f, 0.042694f, -0.016585f, 0.069173f, -0.020126f, 0.026912f, -0.073318f, 0.046984f, -0.013213f, 0.024312f, 0.033206f, 0.059251f, 0.059633f, -0.046608f, -0.039200f, -0.018460f, 0.071381f, 0.061642f, -0.018884f, -0.041987f, -0.064386f, -0.014298f, 0.055469f, 0.047950f, 0.040299f, - -0.024656f, -0.093296f, 0.011937f, 0.155974f, 0.095104f, -0.015859f, -0.216063f, -0.026382f, -0.017506f, 0.022559f, -0.020242f, 0.009502f, 0.027942f, -0.003081f, 0.014822f, -0.042675f, 0.035566f, 0.042425f, 0.073158f, -0.043867f, -0.057580f, 0.070163f, 0.107085f, 0.031437f, -0.040633f, -0.054819f, -0.008193f, 0.021012f, 0.010548f, 0.022042f, 0.005216f, 0.028459f, 0.013911f, 0.072800f, -0.016463f, -0.085569f, -0.034850f, 0.035711f, 0.015710f, -0.025386f, -0.035183f, 0.011778f, 0.048240f, 0.083361f, 0.075519f, 0.005180f, 0.006282f, 0.035743f, -0.022080f, -0.072143f, 0.029296f, -0.042200f, 0.100359f, 0.111576f, 0.003331f, 0.037010f, 0.020471f, 0.028606f, -0.040367f, 0.001464f, 0.104966f, -0.028918f, 0.007000f, -0.125844f, -0.011558f, 0.024449f, 0.037765f, 0.039068f, 0.034853f, -0.022890f, -0.013544f, 0.072324f, 0.097152f, -0.002925f, 0.004600f, 0.024422f, 0.008654f, -0.013163f, -0.101185f, -0.042656f, 0.077503f, 0.086121f, 0.081099f, 0.111406f, 0.017192f, -0.049824f, -0.151104f, -0.114151f, -0.023720f, 0.030409f, 0.091719f, 0.101552f, 0.045787f, 0.001318f, -0.052838f, -0.044137f, - -0.022242f, 0.031200f, 0.084807f, 0.049237f, -0.015013f, 0.002493f, -0.010776f, -0.048999f, -0.069950f, -0.054750f, 0.006137f, 0.080502f, 0.056645f, 0.121379f, 0.074784f, 0.078020f, 0.105704f, -0.032621f, -0.081359f, -0.087246f, -0.120653f, -0.142397f, -0.059272f, -0.017122f, 0.036152f, 0.077834f, 0.106503f, 0.105177f, 0.078910f, 0.053913f, 0.101176f, -0.021565f, -0.076395f, -0.003576f, -0.025851f, 0.028331f, 0.023808f, 0.129100f, 0.103347f, -0.042484f, 0.009739f, -0.029925f, -0.098070f, -0.026066f, 0.010419f, -0.052684f, 0.066622f, -0.032823f, 0.011340f, 0.006265f, -0.026508f, 0.069131f, 0.077015f, 0.076934f, 0.031479f, -0.039797f, -0.122488f, 0.053299f, 0.015965f, -0.210843f, -0.222351f, -0.232017f, -0.237811f, -0.318452f, -0.023897f, -0.081942f, -0.010657f, 0.042097f, 0.162244f, 0.181967f, 0.188548f, 0.258231f, 0.353676f, 0.338317f, 0.333703f, 0.269234f, 0.198574f, 0.146168f, 0.052531f, -0.145741f, -0.063202f, -0.082175f, -0.045537f, -0.177603f, -0.019690f, -0.068128f, -0.074163f, -0.145920f, -0.108067f, -0.112470f, -0.098951f, -0.106368f, -0.190943f, -0.170592f, -0.095022f, -0.087855f, - -0.109667f, -0.158907f, -0.015640f, -0.138934f, -0.265940f, -0.230198f, -0.198349f, -0.104417f, -0.132632f, -0.021375f, -0.277471f, -0.123376f, -0.119759f, -0.056812f, -0.037184f, -0.146549f, 0.010581f, -0.148501f, -0.015136f, 0.019248f, 0.069612f, 0.000126f, 0.069271f, 0.096616f, 0.161740f, 0.164321f, 0.235538f, 0.141716f, 0.369296f, 0.217842f, 0.425284f, 0.270191f, 0.413938f, 0.469188f, 0.565918f, 0.435974f, 0.432438f, 0.454483f, 0.299365f, 0.128237f, 0.082628f}, - {-0.017642f, 0.019321f, -0.011241f, 0.000801f, -0.009383f, 0.004387f, 0.002124f, 0.003191f, -0.010388f, -0.007148f, 0.000225f, -0.006680f, -0.000759f, 0.004320f, -0.000816f, -0.002311f, -0.001183f, 0.004840f, -0.002007f, -0.003259f, 0.013307f, -0.000032f, -0.010422f, -0.004840f, 0.004458f, 0.001062f, 0.004150f, -0.009208f, 0.001005f, -0.009683f, 0.001462f, 0.008124f, -0.001016f, 0.005127f, 0.005314f, 0.004901f, -0.005454f, -0.002367f, -0.003187f, 0.001758f, -0.001378f, 0.003424f, -0.009015f, -0.004308f, -0.003822f, 0.000461f, -0.002275f, 0.005031f, 0.006558f, 0.010401f, -0.004126f, -0.005629f, -0.002680f, 0.002568f, 0.006815f, 0.007778f, 0.006301f, -0.001414f, -0.009127f, 0.011647f, -0.007642f, 0.004156f, -0.008037f, 0.006696f, -0.005328f, 0.004010f, -0.004847f, 0.000364f, -0.005148f, -0.003638f, -0.000379f, -0.001869f, 0.004009f, 0.002573f, -0.000680f, -0.008320f, 0.031894f, 0.004351f, -0.010256f, 0.005095f, 0.005774f, 0.002093f, -0.013024f, 0.006177f, 0.009540f, -0.009936f, -0.002841f, -0.012211f, -0.002530f, -0.005107f, -0.004338f, -0.001639f, 0.000879f, -0.000291f, 0.001457f, 0.004579f, - -0.005299f, 0.002595f, -0.012448f, 0.004489f, 0.007996f, 0.001785f, -0.003105f, -0.010136f, 0.006938f, -0.004383f, 0.011087f, 0.009381f, -0.000155f, -0.004185f, 0.009098f, 0.010435f, 0.008556f, 0.008510f, 0.002355f, -0.006312f, 0.002296f, 0.008056f, -0.003039f, -0.006599f, 0.006340f, 0.009690f, -0.003886f, 0.005121f, -0.010558f, -0.000771f, -0.009204f, 0.006649f, -0.012347f, -0.003297f, -0.001983f, 0.004497f, 0.006749f, 0.004646f, 0.000077f, -0.006571f, 0.001302f, -0.009137f, -0.005634f, 0.001916f, -0.000580f, -0.005378f, 0.003718f, 0.003448f, 0.001544f, 0.006242f, -0.004359f, 0.002999f, -0.005979f, -0.002156f, -0.001513f, 0.004937f, 0.018000f, -0.018341f, 0.000590f, 0.000225f, -0.004721f, -0.005571f, -0.005935f, 0.001795f, -0.010385f, -0.010234f, 0.001328f, 0.004835f, -0.000483f, 0.005749f, 0.004443f, -0.005663f, 0.002190f, -0.020095f, -0.005004f, -0.004555f, -0.004765f, -0.006389f, -0.007067f, -0.017714f, -0.013811f, 0.001804f, 0.004019f, -0.001022f, 0.009438f, 0.007564f, 0.003103f, -0.003467f, -0.002013f, 0.008877f, -0.003563f, 0.001044f, -0.001413f, -0.009457f, 0.003035f, -0.003206f, - -0.006509f, -0.002532f, 0.007574f, 0.018502f, -0.007185f, 0.002017f, 0.004411f, -0.003487f, 0.005737f, 0.002558f, -0.006592f, 0.003727f, -0.015443f, -0.007156f, 0.000068f, 0.006216f, 0.009638f, -0.006033f, -0.002874f, -0.000734f, -0.022332f, 0.003722f, 0.011390f, 0.000534f, 0.001568f, 0.006185f, -0.003716f, 0.009690f, 0.013141f, -0.001833f, 0.003677f, 0.007753f, 0.007490f, 0.001241f, 0.000410f, -0.004002f, -0.005076f, -0.005043f, -0.015883f, 0.003371f, 0.000307f, -0.015357f, 0.002045f, 0.008230f, 0.012190f, 0.002967f, -0.009247f, 0.020895f, -0.003122f, -0.004388f, 0.009638f, -0.006360f, -0.006277f, 0.000799f, -0.008020f, 0.009200f, 0.009099f, -0.004020f, -0.014533f, -0.007232f, 0.006745f, -0.009357f, 0.019760f, 0.017140f, -0.014209f, -0.017164f, 0.000253f, 0.002974f, -0.016508f, -0.001253f, 0.006295f, 0.004332f, -0.008289f, -0.004791f, 0.018130f, -0.002160f, 0.012342f, -0.001459f, -0.004568f, -0.004501f, -0.009984f, 0.001468f, -0.001815f, 0.009802f, -0.009010f, 0.002116f, -0.002735f, 0.001656f, -0.005547f, -0.000867f, 0.007886f, 0.006489f, -0.011140f, 0.016231f, 0.000746f, -0.000311f, - -0.000917f, -0.001760f, 0.003759f, -0.002542f, -0.015496f, -0.002395f, -0.008621f, 0.012485f, 0.004432f, -0.000072f, 0.014682f, -0.009218f, 0.009264f, 0.009718f, -0.000645f, -0.008611f, -0.038023f, 0.008270f, 0.001654f, 0.026451f, -0.001811f, 0.010396f, -0.014789f, 0.002715f, -0.011168f, -0.002987f, -0.005648f, -0.002111f, 0.004585f, -0.003314f, 0.004262f, 0.008624f, 0.006569f, 0.025046f, 0.017247f, -0.012001f, 0.005510f, -0.001065f, 0.004374f, 0.002552f, -0.003576f, -0.025774f, 0.006087f, -0.001768f, -0.000566f, 0.009120f, -0.001825f, -0.007559f, -0.005225f, -0.001708f, -0.008173f, -0.004752f, -0.020536f, -0.005288f, 0.000224f, -0.007704f, -0.001576f, 0.007807f, 0.011693f, -0.004478f, 0.014522f, -0.011710f, 0.002138f, 0.004422f, 0.001640f, -0.004111f, -0.008105f, 0.004822f, -0.002261f, 0.002669f, -0.006097f, -0.009021f, 0.001244f, 0.003994f, -0.008624f, 0.007087f, -0.005983f, 0.018010f, 0.019793f, -0.007082f, 0.007052f, 0.006656f, -0.001311f, -0.003747f, -0.002950f, -0.025778f, 0.010018f, 0.008591f, 0.000096f, -0.005652f, -0.010449f, -0.000588f, -0.003869f, -0.012379f, -0.007727f, -0.011978f, - 0.012621f, 0.007322f, -0.000727f, 0.014516f, -0.007265f, 0.013050f, -0.013992f, -0.013463f, 0.007064f, -0.021674f, -0.007422f, 0.005841f, 0.013748f, 0.017779f, -0.002680f, 0.013339f, -0.000077f, 0.012711f, 0.004978f, 0.002295f, -0.001659f, 0.000948f, 0.012796f, -0.005652f, -0.000909f, 0.002511f, 0.001477f, -0.011977f, -0.001116f, -0.006393f, 0.025685f, -0.011850f, -0.011829f, -0.002750f, 0.012333f, 0.012202f, 0.010720f, 0.013978f, -0.001952f, 0.002726f, -0.002618f, -0.006649f, 0.005656f, -0.000441f, -0.000854f, -0.007653f, 0.020280f, 0.012376f, -0.005664f, 0.003917f, 0.006328f, -0.010331f, 0.002697f, 0.007816f, -0.001467f, 0.014964f, -0.005512f, -0.001852f, -0.015663f, -0.006039f, -0.013234f, 0.000654f, 0.019475f, -0.007441f, 0.005878f, 0.003246f, 0.001184f, -0.005195f, -0.001232f, 0.000134f, -0.004143f, 0.009075f, -0.008994f, -0.004320f, -0.001082f, -0.003766f, -0.035133f, 0.026098f, 0.003089f, -0.012719f, -0.030967f, -0.002788f, 0.001193f, -0.018224f, -0.001267f, 0.008958f, 0.007780f, 0.000991f, -0.004933f, 0.007145f, 0.022852f, 0.023034f, -0.009288f, -0.010395f, -0.024188f, 0.005215f, - -0.003964f, 0.024232f, -0.009266f, -0.000254f, -0.005110f, 0.009286f, -0.002162f, -0.024284f, 0.008605f, -0.000890f, -0.013990f, 0.000273f, 0.002877f, -0.001738f, -0.001881f, -0.009838f, -0.013431f, 0.008792f, 0.002756f, 0.011418f, -0.009043f, 0.019047f, 0.009616f, -0.003639f, -0.015938f, -0.003063f, 0.006771f, 0.018631f, 0.006485f, -0.010155f, -0.003926f, 0.008789f, 0.006372f, -0.005096f, -0.001710f, 0.009254f, 0.008320f, 0.009757f, 0.019215f, 0.020586f, 0.010990f, 0.011080f, 0.013619f, -0.007070f, 0.003006f, -0.013211f, 0.014737f, 0.002366f, 0.008173f, -0.009389f, -0.013481f, 0.003608f, -0.017562f, -0.006784f, -0.006890f, 0.013846f, -0.012860f, -0.000849f, 0.023798f, 0.014597f, 0.020106f, 0.003753f, -0.022190f, -0.007375f, 0.023367f, -0.006856f, -0.014952f, -0.015573f, -0.015336f, -0.016219f, 0.008781f, 0.008923f, 0.005697f, 0.005211f, 0.005385f, 0.022481f, -0.002877f, 0.009707f, -0.019470f, -0.021901f, 0.014524f, -0.000865f, -0.011987f, 0.000764f, -0.030465f, -0.010012f, -0.010314f, 0.003642f, -0.001143f, -0.002896f, -0.021449f, -0.014086f, 0.002304f, 0.014669f, 0.023926f, -0.009610f, - -0.009471f, 0.012685f, -0.016527f, -0.001284f, -0.000889f, 0.005408f, 0.010457f, 0.008452f, 0.016599f, -0.009045f, 0.024089f, 0.011245f, -0.026057f, 0.012877f, -0.014471f, -0.017434f, -0.014346f, -0.021077f, 0.018969f, 0.004245f, -0.022202f, 0.002312f, 0.004814f, 0.001784f, 0.003687f, -0.004434f, 0.015906f, -0.009548f, 0.012357f, -0.019970f, 0.015110f, -0.010650f, -0.008378f, 0.000686f, 0.007422f, -0.002976f, 0.012172f, 0.051098f, -0.043076f, 0.022225f, 0.023110f, -0.018486f, -0.002060f, 0.031214f, 0.012301f, 0.020408f, 0.007184f, -0.004923f, 0.046127f, -0.000188f, -0.006787f, 0.001561f, 0.001702f, 0.023010f, 0.035079f, 0.014317f, 0.001319f, 0.002304f, 0.006584f, 0.013159f, 0.001391f, 0.007760f, -0.021882f, 0.012753f, 0.019821f, -0.002163f, 0.009008f, 0.001681f, 0.004953f, -0.013416f, -0.010224f, 0.002555f, 0.001051f, 0.022408f, 0.011795f, 0.010292f, -0.007131f, -0.008965f, -0.009113f, 0.013678f, 0.018911f, 0.001936f, -0.003952f, 0.035621f, 0.019141f, 0.024430f, -0.010529f, -0.023357f, -0.003134f, -0.024515f, -0.015685f, -0.006021f, -0.009290f, 0.000463f, 0.021537f, -0.004225f, - 0.002571f, -0.014085f, -0.015407f, 0.021866f, 0.000940f, 0.011443f, 0.011863f, -0.007913f, 0.021070f, 0.007440f, 0.003992f, -0.003866f, -0.010173f, 0.017870f, -0.001765f, -0.022769f, 0.018313f, 0.017918f, -0.035265f, 0.003640f, 0.010741f, -0.017582f, 0.013457f, -0.029923f, 0.005951f, 0.008449f, -0.004664f, -0.012110f, -0.015764f, -0.017850f, -0.030348f, 0.003357f, 0.032607f, -0.011400f, 0.015214f, 0.008651f, 0.023933f, 0.012940f, -0.010459f, -0.021673f, 0.009947f, -0.005637f, -0.008739f, -0.022381f, -0.004492f, -0.003141f, -0.010076f, -0.009625f, -0.006378f, -0.015678f, -0.021810f, 0.023837f, -0.003733f, -0.013878f, 0.017300f, 0.006640f, -0.017860f, 0.002523f, -0.002775f, 0.010768f, -0.023372f, 0.006266f, 0.005750f, -0.031905f, 0.008920f, 0.010706f, -0.018410f, 0.005020f, -0.000729f, -0.004880f, 0.009774f, 0.001455f, -0.004435f, 0.001821f, 0.005709f, 0.022096f, 0.014765f, 0.022585f, 0.012632f, 0.008413f, -0.008533f, 0.033471f, -0.011392f, -0.016212f, 0.033181f, 0.003111f, 0.018430f, 0.005467f, -0.011089f, -0.033092f, -0.035850f, -0.007002f, -0.003307f, -0.011782f, -0.012023f, -0.059698f, - 0.026114f, 0.047595f, 0.001363f, -0.030228f, 0.010743f, -0.007248f, -0.004085f, 0.006104f, 0.002672f, 0.010751f, -0.017178f, -0.000290f, 0.042331f, 0.032164f, 0.027716f, -0.034655f, -0.003586f, 0.006002f, 0.014854f, -0.017675f, -0.019782f, -0.006485f, 0.003366f, 0.013450f, 0.005399f, -0.043988f, -0.049948f, 0.012801f, -0.003914f, 0.024822f, 0.025150f, -0.019782f, 0.020378f, 0.016299f, 0.021898f, -0.003698f, -0.016961f, -0.017140f, 0.009127f, -0.018040f, -0.008667f, -0.002076f, -0.003268f, 0.012471f, 0.028297f, 0.015297f, -0.011144f, -0.009408f, -0.018047f, -0.006030f, -0.001433f, 0.006225f, -0.006162f, -0.007613f, 0.012260f, 0.007389f, -0.026382f, -0.002518f, -0.002154f, 0.025848f, -0.017360f, -0.018366f, -0.033972f, -0.012655f, 0.001742f, -0.000221f, 0.012142f, -0.005675f, 0.000078f, -0.015919f, -0.024484f, -0.020568f, -0.023135f, -0.012549f, 0.003822f, -0.038866f, 0.007927f, 0.007292f, 0.006351f, 0.010142f, 0.029953f, 0.003084f, 0.026154f, -0.002777f, 0.033707f, 0.016953f, 0.026546f, 0.016274f, 0.008513f, -0.012077f, -0.000152f, -0.007390f, 0.018656f, 0.005628f, 0.016575f, -0.014223f, - -0.001295f, 0.027527f, -0.032120f, -0.018332f, 0.027438f, -0.043791f, -0.018019f, 0.003566f, -0.006935f, -0.021605f, 0.045967f, -0.007747f, 0.032293f, 0.012459f, -0.025060f, -0.003988f, -0.008312f, -0.032268f, -0.040170f, 0.033543f, 0.001589f, -0.012262f, 0.010273f, 0.000514f, -0.003507f, 0.012063f, 0.006958f, -0.004538f, -0.013176f, 0.002696f, 0.034067f, 0.026527f, -0.019646f, 0.008389f, 0.004390f, 0.024583f, -0.008601f, 0.016428f, -0.033040f, -0.009364f, 0.027780f, 0.007522f, -0.004826f, 0.028503f, -0.005639f, 0.019609f, -0.035957f, -0.047219f, -0.012169f, -0.000362f, -0.027663f, 0.033850f, 0.030682f, 0.034192f, -0.009498f, -0.013999f, -0.003383f, 0.040161f, 0.028872f, 0.045254f, -0.040284f, -0.030318f, -0.068975f, 0.029627f, -0.007704f, -0.058999f, -0.011449f, 0.005492f, 0.008658f, -0.022120f, 0.023967f, 0.020144f, 0.002265f, -0.000396f, 0.003736f, -0.009903f, -0.020519f, 0.004368f, -0.011671f, -0.019365f, -0.000255f, 0.044482f, 0.001383f, -0.006974f, -0.035719f, 0.014856f, 0.028198f, -0.014820f, -0.043101f, -0.008064f, 0.014514f, 0.004888f, -0.009162f, 0.009106f, 0.003049f, 0.015195f, - -0.004385f, 0.025236f, 0.039036f, 0.014426f, -0.026026f, 0.029064f, 0.013201f, -0.033689f, -0.035482f, 0.038046f, 0.018530f, -0.015472f, -0.017385f, -0.001378f, -0.031514f, 0.022405f, 0.030119f, -0.001346f, 0.001529f, 0.006934f, -0.004086f, 0.032363f, 0.010894f, 0.007757f, -0.014021f, 0.004383f, 0.010859f, 0.039790f, -0.010194f, 0.014356f, -0.032115f, -0.037708f, 0.031734f, -0.006903f, -0.003485f, 0.000503f, 0.030202f, -0.004078f, -0.007629f, -0.010603f, -0.014653f, -0.047743f, -0.004973f, -0.031604f, -0.063065f, -0.064891f, -0.028735f, -0.049787f, -0.023251f, -0.008916f, 0.007589f, 0.026223f, 0.029232f, 0.002093f, -0.017636f, 0.031742f, -0.017845f, 0.015146f, -0.062347f, -0.006999f, -0.043159f, -0.029124f, 0.027188f, 0.018988f, 0.018174f, 0.005509f, 0.039669f, -0.005068f, -0.003814f, -0.030388f, -0.011481f, -0.006840f, -0.021334f, -0.021148f, -0.051533f, -0.020634f, -0.006849f, -0.008963f, -0.032400f, 0.026643f, 0.009619f, 0.015571f, -0.015030f, -0.006088f, -0.077608f, -0.022781f, -0.022395f, 0.016866f, 0.037680f, -0.024855f, -0.005112f, -0.045192f, -0.004652f, 0.022100f, -0.008754f, -0.015762f, - 0.008488f, 0.032027f, 0.054407f, 0.010986f, 0.000184f, -0.003896f, -0.016657f, -0.023249f, 0.013248f, -0.015698f, 0.048953f, 0.008888f, 0.019940f, 0.102129f, -0.022660f, -0.019560f, -0.028399f, -0.039613f, -0.050569f, 0.030584f, 0.049700f, -0.027511f, 0.002728f, 0.011992f, -0.015460f, -0.002948f, -0.034910f, 0.000301f, -0.018987f, 0.053634f, 0.001337f, -0.008950f, 0.043610f, -0.009795f, 0.013668f, -0.047569f, 0.026551f, 0.008356f, 0.034188f, -0.014476f, 0.025842f, 0.043843f, 0.047735f, 0.026702f, 0.043194f, 0.022062f, -0.005143f, 0.041187f, -0.018115f, -0.026094f, -0.007029f, 0.016830f, 0.029028f, -0.065481f, -0.002957f, -0.042204f, 0.035409f, 0.015730f, 0.000730f, 0.012000f, 0.048983f, 0.002327f, 0.043894f, 0.018310f, 0.065663f, 0.005946f, -0.005698f, 0.028182f, 0.010875f, -0.032609f, 0.008625f, -0.003817f, -0.042227f, 0.030678f, -0.024841f, -0.042919f, -0.085892f, 0.006577f, -0.009216f, 0.051161f, -0.027107f, 0.068488f, 0.024252f, -0.001592f, -0.009029f, 0.026339f, 0.029787f, -0.050961f, -0.020083f, -0.037907f, 0.014362f, -0.017636f, 0.039121f, 0.010624f, 0.013054f, 0.011319f, - 0.035638f, -0.019817f, -0.022566f, -0.022008f, 0.034260f, 0.019126f, 0.043875f, 0.014147f, 0.131040f, -0.035636f, 0.002812f, 0.003663f, 0.062056f, 0.027589f, 0.029794f, -0.036543f, 0.019249f, -0.012649f, 0.003031f, -0.015275f, 0.005871f, 0.046346f, -0.009596f, 0.016805f, 0.085539f, 0.029420f, -0.036238f, -0.041242f, 0.006822f, 0.057897f, 0.030093f, 0.013717f, -0.019600f, 0.049922f, 0.009381f, -0.003412f, -0.049687f, 0.019199f, -0.006758f, 0.025689f, -0.045099f, -0.024566f, 0.003654f, -0.007951f, 0.007273f, -0.039309f, -0.000397f, -0.022323f, 0.013280f, 0.042550f, 0.031605f, 0.014354f, -0.058512f, 0.004957f, 0.006631f, -0.048890f, -0.047119f, -0.026892f, -0.025571f, -0.021125f, 0.042773f, 0.014832f, -0.000921f, 0.032996f, 0.044164f, 0.017393f, 0.038087f, 0.006975f, 0.024993f, 0.174651f, -0.038902f, 0.034443f, 0.018613f, -0.022369f, 0.005515f, -0.104200f, 0.003588f, 0.030014f, 0.073157f, -0.026817f, 0.003431f, -0.040907f, -0.028105f, 0.015606f, 0.035053f, -0.033108f, 0.050426f, 0.023632f, -0.053973f, 0.041123f, -0.018613f, -0.024766f, 0.003021f, -0.030955f, 0.013914f, -0.011373f, - 0.051483f, -0.021920f, 0.003642f, 0.029699f, -0.082678f, 0.017110f, 0.033394f, -0.022306f, 0.027824f, -0.049103f, 0.059597f, 0.010195f, 0.015463f, -0.096871f, 0.097712f, 0.043472f, 0.036500f, 0.006297f, -0.051062f, 0.057169f, 0.003411f, -0.021959f, 0.100350f, -0.014359f, -0.033902f, -0.017377f, 0.018577f, 0.031256f, 0.033083f, 0.011036f, -0.008045f, -0.105756f, -0.004490f, 0.031735f, 0.009790f, 0.044607f, -0.049266f, 0.063817f, 0.014820f, 0.024390f, -0.049566f, -0.012708f, 0.018941f, 0.080199f, -0.021654f, 0.021997f, -0.043933f, 0.052307f, 0.037960f, 0.049521f, -0.005815f, 0.024062f, 0.020318f, -0.055909f, -0.043386f, 0.033578f, 0.039407f, 0.012493f, -0.004230f, -0.080879f, 0.082929f, -0.012228f, -0.013860f, -0.025895f, -0.003818f, -0.062962f, -0.120787f, 0.047959f, 0.041453f, -0.001133f, -0.020571f, -0.046935f, -0.002956f, -0.011562f, -0.021639f, 0.053968f, -0.106861f, -0.043824f, -0.053534f, -0.013432f, -0.079678f, -0.003606f, -0.006657f, 0.001228f, -0.007923f, -0.013081f, 0.020460f, 0.003484f, -0.031116f, -0.007528f, 0.006211f, -0.047550f, -0.020441f, -0.010876f, 0.011364f, 0.044507f, - -0.012666f, 0.084750f, -0.033719f, -0.001321f, 0.042207f, -0.030958f, 0.030604f, 0.009482f, -0.045676f, -0.077127f, -0.010433f, 0.026253f, 0.085190f, 0.037993f, -0.046653f, -0.018568f, -0.153465f, -0.049144f, 0.000245f, 0.041090f, 0.102515f, 0.002099f, -0.081946f, 0.012723f, 0.067241f, -0.011094f, 0.012056f, 0.064178f, 0.076536f, 0.143462f, -0.126578f, -0.016881f, 0.044960f, 0.051371f, -0.017465f, -0.037003f, -0.040830f, -0.048087f, 0.019982f, -0.049625f, 0.010467f, -0.020872f, -0.118035f, 0.025106f, -0.021075f, 0.033156f, -0.033344f, -0.034714f, 0.001501f, -0.050402f, 0.007408f, -0.050859f, -0.001865f, -0.010192f, -0.020142f, 0.022073f, -0.037552f, -0.049701f, -0.044508f, -0.058120f, -0.010050f, -0.007974f, 0.061940f, 0.011958f, -0.046060f, -0.069700f, 0.008514f, -0.003422f, 0.015840f, -0.015257f, 0.037665f, -0.046690f, -0.017813f, -0.064786f, -0.040054f, -0.020272f, 0.002201f, -0.028786f, 0.065460f, -0.025243f, -0.055342f, 0.014761f, 0.068228f, 0.046452f, 0.020770f, -0.050646f, -0.030270f, -0.007799f, 0.062566f, 0.114604f, 0.000267f, 0.019923f, -0.020965f, -0.118572f, -0.023400f, 0.006811f, - 0.045653f, 0.094347f, -0.051820f, -0.070867f, 0.042134f, 0.013945f, -0.019594f, -0.001969f, -0.032471f, 0.016936f, -0.092465f, -0.017691f, 0.011335f, 0.016017f, -0.051815f, 0.058315f, -0.086900f, -0.120947f, -0.089933f, 0.070259f, 0.021991f, -0.123160f, -0.021289f, -0.084652f, 0.038868f, 0.008121f, -0.169889f, 0.012673f, -0.051847f, -0.109360f, -0.085353f, -0.124875f, 0.078631f, -0.037172f, -0.098657f, -0.043216f, 0.032834f, -0.057655f, -0.050474f, -0.038225f, -0.023061f, -0.042184f, -0.043018f, -0.078661f, -0.057636f, -0.108469f, -0.061665f, -0.054031f, -0.017855f, -0.049695f, -0.009908f, -0.021814f, -0.000672f, 0.006967f, 0.015598f, 0.033938f, -0.029536f, 0.028949f, 0.004163f, 0.060177f, 0.025836f, 0.039136f, 0.036978f, -0.099652f, -0.025942f, 0.087514f, -0.012866f, -0.046923f, -0.056587f, -0.038064f, 0.035002f, 0.139683f, -0.007091f, 0.003811f, -0.088101f, -0.085603f, -0.017229f, 0.025826f, 0.082673f, 0.001941f, 0.075804f, 0.035264f, -0.085606f, 0.168710f, 0.006281f, 0.134208f, 0.003927f, -0.020722f, 0.070864f, -0.077137f, -0.110830f, -0.060115f, -0.250315f, -0.139622f, -0.043393f, 0.130960f, - -0.042926f, -0.105215f, 0.123646f, 0.117922f, -0.073501f, -0.096190f, 0.000500f, 0.105619f, -0.010368f, -0.006093f, -0.031676f, 0.092146f, -0.008922f, -0.024818f, -0.000820f, 0.025153f, 0.048902f, 0.000832f, -0.033884f, -0.041029f, 0.058711f, 0.003547f, -0.022528f, -0.061667f, 0.036670f, 0.018168f, -0.004724f, -0.049029f, 0.017420f, 0.019454f, 0.019610f, -0.031664f, -0.015588f, 0.003901f, 0.049724f, -0.015412f, 0.019790f, -0.070820f, -0.016138f, -0.001785f, 0.048739f, -0.098205f, -0.013759f, 0.007141f, 0.072808f, -0.035647f, 0.014515f, -0.051690f, 0.010674f, 0.017597f, -0.029617f, -0.028702f, 0.000384f, 0.008098f, 0.025720f, -0.025281f, 0.006330f, -0.089293f, 0.051469f, -0.018176f, 0.085632f, -0.053898f, 0.041436f, -0.038289f, 0.043133f, 0.002241f, 0.031142f, 0.016123f, -0.055953f, 0.065153f, 0.020536f, 0.034996f, -0.062260f, 0.013246f, -0.011461f, 0.005283f, -0.036363f, -0.080423f, -0.106846f, 0.077336f, 0.051170f, -0.061059f, -0.086913f, -0.042730f, 0.039703f, 0.020705f, 0.052928f, 0.057077f, 0.010857f, -0.029240f, -0.008831f, 0.019778f, -0.020140f, -0.001909f, 0.011458f, 0.002968f, - 0.031701f, 0.022176f, 0.009306f, -0.029190f, -0.001516f, -0.018176f, 0.018185f, -0.030558f, -0.026712f, 0.021737f, -0.007472f, -0.012587f, -0.012604f, -0.021310f, -0.029380f, 0.001965f, 0.023061f, 0.021281f, 0.017504f, -0.007086f, -0.024363f, -0.020906f, -0.015036f, 0.025499f, 0.034387f, -0.016514f, -0.025062f, -0.010779f, 0.028391f, 0.014799f, 0.038174f, -0.027634f, -0.011124f, 0.015168f, -0.008029f, 0.001118f, -0.004898f, 0.013636f, 0.007500f, 0.011003f, 0.001545f, -0.026378f, 0.010053f, 0.004804f, -0.001818f, 0.020301f, -0.011434f, -0.005191f, 0.002642f, -0.003663f, 0.001757f, -0.007383f, 0.033686f, 0.009167f, -0.003437f, 0.034109f, 0.031288f, 0.037284f, -0.087947f, -0.232823f, -0.085079f, 0.042633f, 0.122308f, 0.257362f, 0.172545f, 0.044916f, 0.065910f, -0.033593f, -0.103626f, -0.172790f, -0.150094f, -0.119326f, -0.033746f, 0.005284f, 0.084367f, 0.092699f, 0.196837f, 0.095764f, 0.063632f, -0.004297f, -0.040842f, -0.093707f, -0.048030f, -0.075674f, -0.086984f, -0.053581f, -0.044347f, -0.002831f, 0.025517f, 0.073841f, 0.046360f, 0.053130f, 0.048904f, 0.048832f, 0.073825f, 0.006732f, - 0.051528f, -0.008920f, -0.021439f, -0.060979f, -0.035337f, -0.091169f, -0.133441f, -0.117406f, 0.002733f, -0.019758f, 0.038360f, 0.063505f, 0.036201f, 0.097785f, 0.086840f, 0.123480f, 0.071940f, 0.083690f, 0.005971f, 0.004025f, -0.064004f, -0.108015f, -0.123814f, -0.151583f, -0.096997f, -0.124097f, -0.007665f, -0.001170f, 0.062647f, 0.061494f, 0.153127f, 0.116142f, 0.171448f, 0.066082f, 0.083899f, 0.030162f, 0.007428f, -0.103700f, -0.130423f, -0.054680f, -0.037216f} - }, - { - {-0.011648f, 0.011284f, -0.008970f, 0.013289f, -0.002614f, -0.008362f, 0.002620f, 0.006764f, -0.003104f, 0.001663f, 0.006230f, -0.009285f, -0.006331f, -0.001735f, -0.005665f, 0.017967f, -0.007115f, 0.017668f, 0.005119f, 0.005993f, -0.002325f, -0.003817f, -0.006236f, -0.008200f, 0.000229f, 0.007699f, 0.000643f, 0.000997f, -0.004656f, 0.005098f, 0.007054f, 0.000604f, -0.003833f, -0.009288f, 0.006245f, -0.001724f, 0.007158f, -0.003047f, 0.001299f, 0.003204f, -0.005192f, 0.000033f, -0.009129f, 0.012456f, -0.000132f, 0.001842f, -0.001141f, -0.010910f, -0.002817f, -0.003217f, 0.000880f, 0.001760f, 0.006378f, 0.002867f, -0.004297f, -0.006640f, 0.003219f, -0.003981f, -0.002069f, 0.007896f, -0.004392f, 0.005589f, -0.007763f, 0.004229f, -0.008993f, 0.004500f, -0.006026f, -0.003205f, 0.009115f, 0.004184f, 0.004955f, -0.001339f, 0.000714f, 0.002010f, 0.002247f, 0.003204f, 0.014190f, 0.001462f, -0.003918f, -0.004082f, 0.002412f, -0.006932f, -0.000176f, -0.013457f, 0.009548f, 0.012169f, 0.008445f, 0.011981f, -0.014495f, 0.001142f, 0.003207f, -0.005158f, -0.004050f, -0.003528f, -0.016977f, -0.002848f, - 0.009932f, -0.017283f, -0.014151f, 0.008176f, 0.007294f, -0.011095f, -0.003992f, 0.007364f, 0.000818f, 0.008956f, 0.003698f, 0.009335f, -0.005982f, 0.001815f, 0.001147f, -0.002432f, 0.004184f, 0.003456f, 0.006160f, 0.002709f, -0.002956f, 0.000672f, 0.006885f, -0.001834f, -0.003393f, -0.001110f, -0.008729f, -0.018745f, 0.010999f, 0.005545f, -0.006110f, 0.008387f, -0.003538f, 0.001051f, -0.000532f, 0.003993f, -0.005231f, -0.001122f, 0.010855f, -0.010291f, -0.004502f, 0.003860f, 0.001495f, -0.001373f, -0.000868f, 0.005167f, 0.000174f, 0.004657f, -0.007897f, 0.008005f, 0.003438f, -0.009245f, 0.007224f, 0.001331f, 0.002191f, -0.000255f, -0.003723f, 0.022370f, -0.012703f, 0.004019f, -0.014055f, 0.001817f, 0.003405f, -0.014149f, -0.017951f, 0.004631f, -0.019487f, 0.004445f, -0.005019f, -0.001215f, -0.011922f, -0.001597f, -0.013400f, -0.006780f, 0.000135f, -0.014106f, 0.015238f, 0.005504f, -0.023579f, 0.002422f, -0.001226f, -0.004100f, -0.010050f, 0.005283f, 0.012350f, 0.000450f, -0.000828f, 0.011739f, -0.006692f, 0.000377f, -0.004232f, 0.007879f, -0.008865f, 0.002882f, 0.010850f, -0.009099f, - 0.009501f, 0.003605f, 0.010272f, -0.000563f, 0.002400f, -0.001208f, -0.004211f, 0.013704f, -0.016470f, 0.004207f, -0.007231f, -0.002770f, -0.002054f, -0.005582f, -0.004344f, -0.012718f, -0.008175f, -0.001531f, 0.008735f, -0.000148f, 0.003379f, 0.012678f, -0.000114f, -0.009715f, -0.001154f, 0.001185f, 0.003481f, -0.004173f, 0.000268f, -0.009196f, 0.000519f, -0.002914f, 0.003765f, 0.006887f, 0.008339f, 0.004815f, -0.003680f, -0.002774f, -0.005813f, -0.018890f, -0.000672f, -0.011567f, -0.003959f, -0.002269f, -0.013408f, -0.002234f, -0.003468f, 0.005970f, 0.014662f, 0.014738f, 0.001360f, -0.006955f, 0.005633f, -0.015180f, -0.002546f, -0.006092f, 0.004693f, -0.022394f, 0.007310f, 0.003260f, -0.001234f, -0.006766f, -0.009886f, -0.004775f, -0.008228f, -0.007160f, 0.003681f, -0.001913f, -0.008827f, -0.002894f, 0.001289f, 0.013888f, -0.000963f, -0.014902f, 0.000728f, 0.005808f, -0.000580f, -0.004971f, 0.000808f, 0.005042f, -0.016112f, -0.001621f, -0.007217f, 0.010663f, 0.006356f, 0.001502f, -0.014900f, 0.001289f, 0.005247f, 0.008578f, 0.008001f, -0.009870f, -0.004821f, 0.000145f, -0.003299f, -0.003253f, - 0.007476f, -0.005041f, 0.004484f, 0.001131f, -0.006355f, -0.001494f, -0.008606f, 0.010069f, 0.003631f, -0.009938f, -0.006994f, 0.001869f, 0.005292f, -0.007561f, -0.009855f, -0.001050f, 0.000937f, -0.005464f, -0.031614f, 0.009873f, 0.008831f, 0.014907f, -0.004165f, 0.009242f, -0.027259f, -0.007708f, 0.008280f, 0.000679f, -0.013560f, -0.003826f, -0.004619f, -0.024049f, -0.009753f, 0.002035f, -0.001222f, -0.017275f, 0.010436f, 0.014601f, -0.015500f, 0.011280f, -0.020250f, -0.007283f, -0.001873f, 0.006506f, -0.000153f, -0.008628f, 0.005509f, 0.002294f, -0.001351f, 0.008534f, -0.004343f, -0.006298f, -0.001771f, -0.003820f, -0.005903f, 0.008346f, -0.006722f, 0.001978f, 0.006755f, -0.001898f, -0.005129f, -0.010465f, -0.001027f, -0.007642f, -0.001951f, -0.008812f, -0.001982f, 0.017687f, 0.000654f, 0.010503f, -0.009888f, 0.008698f, -0.002551f, -0.015595f, -0.008403f, 0.007610f, -0.004962f, -0.008283f, 0.005992f, -0.009636f, 0.008049f, 0.001286f, -0.002058f, 0.008997f, 0.009579f, 0.003127f, -0.008735f, -0.011693f, 0.000324f, 0.013779f, 0.004200f, 0.001463f, -0.006579f, 0.001566f, -0.018418f, -0.017598f, - -0.012173f, 0.000323f, -0.004313f, 0.004870f, -0.007396f, -0.001664f, -0.000450f, -0.006445f, -0.003407f, 0.002327f, -0.006311f, 0.016961f, -0.013829f, 0.006928f, -0.004792f, -0.003004f, -0.010263f, -0.004129f, -0.002769f, 0.011859f, -0.010858f, -0.000545f, 0.001081f, -0.015125f, -0.009713f, -0.010909f, -0.009298f, -0.017278f, -0.006874f, 0.003750f, 0.008959f, 0.004818f, -0.013887f, -0.019276f, -0.005354f, -0.001328f, -0.010396f, -0.000252f, -0.007547f, -0.010989f, -0.023087f, -0.012760f, -0.016631f, 0.006780f, -0.005417f, 0.005126f, -0.010189f, -0.023013f, -0.012653f, -0.000962f, -0.005782f, -0.008930f, -0.004633f, -0.010339f, 0.009743f, -0.001079f, 0.005051f, 0.006632f, 0.000728f, -0.002522f, -0.008782f, -0.001877f, 0.008026f, -0.003891f, -0.008523f, -0.012064f, 0.014183f, -0.015387f, -0.019642f, -0.015271f, -0.008821f, -0.012586f, 0.010033f, 0.015686f, -0.015622f, 0.004637f, -0.034126f, 0.010989f, -0.002188f, 0.006497f, 0.019083f, 0.007853f, -0.004503f, 0.006871f, -0.014076f, 0.009305f, 0.010392f, -0.018189f, -0.003961f, -0.008895f, 0.010578f, 0.009839f, 0.014311f, 0.017324f, -0.021712f, -0.010424f, - 0.003438f, 0.019340f, -0.007223f, 0.009440f, -0.020897f, -0.005404f, -0.007520f, -0.003501f, -0.012836f, 0.004033f, -0.020841f, 0.015163f, -0.004441f, -0.002609f, 0.009889f, 0.000454f, 0.001833f, 0.012139f, -0.000295f, 0.010193f, 0.005382f, -0.001321f, -0.004280f, 0.000071f, -0.015173f, -0.009189f, -0.014010f, 0.000584f, 0.026352f, 0.007824f, 0.004236f, 0.000913f, -0.004958f, 0.001405f, 0.015070f, -0.001772f, 0.003738f, -0.029676f, 0.027473f, -0.005105f, -0.006830f, 0.003700f, 0.015915f, 0.008631f, -0.005012f, -0.008463f, 0.028748f, -0.003454f, -0.003005f, 0.012734f, -0.010939f, 0.003082f, 0.000710f, -0.003357f, 0.001209f, 0.010249f, 0.000448f, -0.001398f, 0.015426f, 0.008932f, 0.017091f, -0.006038f, -0.003442f, 0.010161f, -0.014806f, 0.014392f, 0.016179f, -0.007228f, -0.000869f, -0.024026f, 0.001610f, 0.009176f, 0.007300f, -0.004532f, -0.016391f, -0.033361f, 0.000937f, -0.005060f, -0.015802f, 0.004523f, 0.011224f, -0.014024f, -0.005972f, -0.015345f, 0.008477f, 0.001738f, -0.002111f, -0.004532f, -0.006727f, 0.018253f, 0.020546f, 0.008774f, 0.009896f, -0.003618f, -0.009995f, 0.029238f, - 0.007210f, -0.003867f, -0.016483f, 0.013242f, 0.000621f, 0.017299f, -0.001360f, 0.021172f, 0.010102f, 0.015171f, 0.011907f, 0.007207f, 0.015615f, 0.020727f, -0.000656f, 0.004848f, -0.006393f, 0.001092f, 0.010449f, 0.005824f, 0.005509f, -0.015847f, -0.006725f, -0.002119f, -0.015534f, -0.012755f, -0.010091f, 0.009833f, 0.015843f, 0.023667f, 0.027446f, 0.008517f, 0.001241f, 0.025457f, -0.010718f, 0.026713f, -0.024507f, -0.011325f, -0.002906f, 0.010462f, -0.022870f, 0.015123f, -0.022511f, 0.011669f, 0.000416f, 0.012346f, 0.019505f, -0.007450f, 0.017873f, 0.019297f, 0.018578f, -0.010161f, 0.015769f, -0.016107f, -0.012509f, -0.001761f, -0.009525f, 0.000095f, -0.008094f, 0.015154f, -0.010432f, 0.003505f, -0.010274f, -0.018928f, -0.008277f, -0.003839f, 0.023789f, -0.019217f, 0.018897f, 0.008177f, -0.026162f, 0.030951f, 0.008310f, 0.003562f, 0.022379f, 0.003950f, 0.001737f, -0.012165f, 0.000725f, -0.006771f, 0.025482f, 0.010476f, 0.018131f, -0.006698f, -0.003217f, 0.011929f, 0.021444f, -0.021474f, 0.022221f, 0.003884f, -0.002501f, -0.004023f, -0.019238f, 0.009729f, -0.008509f, 0.004092f, - 0.001987f, -0.018366f, 0.007336f, 0.015529f, -0.012906f, 0.009888f, 0.007729f, 0.021851f, 0.003674f, -0.001217f, 0.014666f, 0.019537f, 0.003154f, -0.009770f, 0.014567f, -0.011277f, -0.021309f, -0.015246f, 0.023036f, -0.029635f, 0.007369f, -0.015769f, 0.017486f, -0.018800f, 0.028616f, 0.009998f, 0.002638f, -0.024887f, 0.012551f, 0.021187f, 0.005402f, -0.012727f, -0.008531f, -0.007223f, 0.019388f, 0.010799f, -0.027587f, 0.004031f, -0.019603f, -0.000883f, 0.001947f, -0.016331f, 0.021398f, 0.022002f, -0.010190f, 0.005035f, 0.014440f, -0.017744f, -0.003093f, -0.005233f, -0.015303f, 0.032108f, -0.011935f, -0.006719f, -0.016410f, -0.026294f, -0.004679f, 0.000953f, -0.009698f, 0.004470f, -0.022603f, 0.002496f, 0.001039f, -0.003835f, 0.016924f, -0.002991f, -0.014181f, 0.007791f, -0.000631f, -0.009394f, 0.008070f, 0.038508f, -0.008231f, 0.009913f, 0.001311f, -0.024518f, -0.004949f, 0.023995f, 0.009444f, 0.023977f, -0.003221f, 0.014606f, -0.019007f, 0.009845f, 0.006948f, 0.004726f, -0.016433f, 0.016688f, 0.003860f, -0.036575f, 0.001926f, -0.002558f, 0.025338f, -0.045755f, 0.053303f, 0.006937f, - 0.021482f, -0.037400f, 0.021553f, 0.027842f, -0.030505f, 0.012646f, 0.016188f, 0.012711f, -0.019460f, 0.003397f, 0.004280f, -0.006062f, 0.012499f, 0.025024f, -0.018775f, -0.015464f, -0.005223f, 0.021329f, 0.018500f, 0.025918f, -0.000512f, 0.011383f, -0.018056f, -0.004160f, -0.004179f, 0.004868f, 0.012518f, 0.032918f, 0.019838f, 0.012445f, 0.006797f, -0.000317f, 0.016042f, -0.004939f, -0.026931f, -0.004613f, 0.008781f, 0.009562f, -0.015494f, -0.011491f, -0.019350f, 0.004605f, -0.000939f, 0.007763f, -0.012470f, 0.024220f, 0.023600f, -0.019149f, 0.047907f, 0.002897f, -0.003714f, 0.000457f, -0.009216f, -0.001405f, -0.002408f, -0.018395f, 0.000930f, 0.000778f, 0.013156f, -0.039057f, 0.010343f, -0.013372f, 0.029480f, 0.035639f, 0.015669f, 0.015273f, 0.007045f, 0.003166f, 0.031949f, -0.004941f, -0.023044f, 0.021227f, -0.010811f, 0.007919f, 0.018371f, 0.002937f, -0.014087f, 0.011698f, 0.017808f, 0.015487f, 0.009377f, 0.018632f, -0.024308f, -0.015590f, 0.001732f, -0.021820f, -0.006200f, -0.004192f, 0.003737f, -0.006057f, -0.014735f, -0.017842f, -0.011399f, 0.007959f, 0.013515f, -0.026029f, - 0.004318f, -0.003176f, -0.001794f, -0.031196f, -0.028737f, -0.005254f, -0.022574f, 0.009690f, -0.025607f, 0.001191f, 0.011830f, 0.018440f, -0.017904f, 0.022013f, 0.004404f, -0.002478f, -0.006248f, 0.032874f, -0.010584f, -0.001829f, -0.027990f, -0.015091f, 0.020256f, -0.001741f, 0.006746f, -0.025636f, -0.029528f, -0.007648f, -0.017356f, -0.002684f, -0.000358f, -0.010209f, -0.014882f, 0.008084f, -0.013975f, 0.001353f, -0.019852f, -0.009460f, -0.002229f, -0.029463f, 0.000936f, 0.020191f, 0.001882f, 0.010944f, 0.019504f, 0.037424f, -0.037404f, 0.007247f, -0.023869f, -0.020423f, -0.013890f, -0.015401f, -0.012228f, -0.009372f, 0.034776f, 0.035439f, 0.037642f, 0.041556f, -0.033678f, 0.000814f, 0.021599f, 0.016797f, -0.020402f, -0.037313f, -0.005875f, -0.006805f, -0.029910f, -0.017737f, 0.051726f, 0.002788f, 0.001870f, 0.018615f, -0.004132f, 0.007179f, -0.009217f, -0.022576f, 0.012103f, 0.010347f, -0.030626f, -0.042140f, -0.033571f, -0.026437f, -0.025917f, 0.001022f, 0.004955f, 0.010887f, -0.017971f, 0.014364f, 0.001655f, -0.009035f, -0.018980f, -0.001770f, -0.001232f, -0.027201f, -0.022585f, 0.001820f, - -0.006968f, 0.002402f, -0.018085f, 0.011613f, 0.001590f, -0.015959f, -0.034275f, -0.013687f, -0.013253f, -0.043429f, -0.015926f, 0.002884f, 0.018268f, -0.003090f, 0.022032f, -0.005429f, -0.004936f, -0.037126f, -0.010635f, 0.013142f, 0.003667f, -0.061414f, 0.014047f, 0.004184f, -0.020287f, -0.011303f, -0.021263f, -0.020922f, -0.004833f, -0.000254f, -0.023686f, -0.007459f, 0.006844f, 0.016125f, 0.020424f, -0.022509f, 0.014579f, -0.012800f, 0.041821f, -0.036233f, -0.022307f, -0.007613f, -0.068133f, -0.035845f, -0.000307f, -0.043701f, 0.033556f, -0.015635f, -0.014121f, 0.003428f, 0.077011f, 0.036733f, 0.002353f, 0.015333f, -0.003592f, -0.021210f, -0.002047f, -0.032564f, -0.023128f, 0.010417f, 0.011236f, 0.013188f, -0.022168f, 0.027811f, 0.017528f, 0.031512f, -0.032646f, 0.004498f, 0.047898f, 0.003654f, 0.002104f, 0.008566f, -0.045647f, 0.010782f, -0.011398f, 0.006569f, -0.018251f, -0.044272f, -0.002440f, 0.016396f, 0.021524f, 0.004369f, -0.006523f, 0.001926f, -0.001738f, 0.013044f, -0.032409f, -0.048899f, 0.008762f, -0.018802f, 0.028638f, -0.012899f, -0.011548f, 0.035419f, 0.008607f, 0.014187f, - 0.003217f, -0.033205f, -0.012605f, -0.005751f, 0.017141f, 0.046740f, 0.037835f, -0.013537f, -0.043035f, -0.003377f, -0.004809f, 0.013340f, -0.026463f, -0.036226f, -0.018575f, 0.012889f, -0.032106f, -0.075206f, 0.032012f, 0.026643f, -0.009195f, -0.048985f, -0.009111f, -0.017557f, -0.018544f, 0.024691f, 0.030063f, -0.000704f, 0.009838f, -0.055931f, 0.022707f, -0.070536f, -0.016127f, -0.004123f, 0.016783f, 0.038793f, 0.060433f, 0.026345f, -0.031272f, 0.010074f, 0.042995f, 0.007682f, 0.014789f, 0.024337f, -0.031706f, -0.010852f, -0.002866f, 0.012751f, -0.021504f, -0.010536f, -0.004665f, -0.015627f, -0.011100f, 0.027197f, 0.026994f, 0.008795f, 0.004865f, 0.044417f, -0.004926f, 0.022219f, -0.044209f, 0.034113f, 0.012094f, -0.039953f, 0.007628f, 0.016701f, -0.036876f, -0.002107f, -0.035842f, 0.016392f, 0.020291f, 0.021056f, -0.022611f, 0.001260f, 0.030597f, -0.018324f, 0.004708f, 0.000414f, 0.048408f, -0.021612f, 0.037298f, 0.020908f, -0.035105f, 0.040777f, -0.023737f, 0.028610f, 0.037403f, -0.024213f, 0.025619f, -0.018524f, -0.022113f, -0.039244f, -0.026227f, -0.027973f, 0.023939f, 0.015193f, - -0.058604f, -0.026333f, -0.027494f, 0.056182f, 0.004262f, 0.022626f, -0.006072f, 0.078559f, 0.014637f, -0.048164f, 0.006360f, 0.058383f, -0.018034f, 0.014984f, -0.006581f, 0.007374f, -0.029992f, -0.041497f, 0.072453f, 0.052192f, -0.016503f, 0.040619f, 0.017604f, 0.052069f, 0.059017f, -0.014068f, -0.010735f, 0.052562f, 0.039348f, 0.006440f, -0.013310f, -0.022608f, -0.023633f, 0.025515f, 0.046752f, 0.023045f, -0.005595f, 0.031939f, -0.013195f, 0.030375f, -0.010213f, 0.043252f, 0.075293f, 0.057548f, -0.057052f, 0.029091f, -0.007838f, -0.022322f, 0.001440f, 0.022468f, 0.022152f, 0.134859f, -0.011360f, 0.000157f, -0.019677f, -0.022234f, 0.027853f, 0.049361f, -0.009988f, 0.037625f, 0.032900f, -0.003388f, 0.002617f, -0.025421f, 0.027725f, 0.022308f, 0.071946f, 0.071653f, 0.088321f, 0.035207f, -0.021872f, -0.020415f, -0.040095f, 0.034861f, -0.059386f, 0.032090f, -0.040868f, 0.027728f, 0.023143f, -0.023509f, 0.006163f, 0.013211f, -0.012060f, 0.040350f, 0.008623f, -0.099482f, 0.021730f, 0.011199f, -0.073518f, 0.002556f, -0.013075f, 0.001178f, 0.026193f, -0.005490f, -0.067764f, -0.014030f, - -0.021814f, -0.005962f, 0.047407f, 0.054925f, -0.032774f, -0.010649f, -0.027466f, 0.011522f, -0.051643f, -0.102789f, -0.035835f, -0.033082f, 0.005351f, -0.001369f, 0.045680f, -0.071589f, 0.032842f, -0.019259f, -0.007251f, 0.024572f, 0.013585f, 0.043858f, 0.011305f, 0.014387f, 0.051435f, -0.062324f, 0.073187f, 0.053234f, 0.030725f, 0.049398f, -0.020246f, 0.015587f, -0.049816f, -0.015328f, -0.024597f, 0.039194f, -0.038729f, 0.003611f, -0.084199f, -0.112088f, 0.071669f, -0.010140f, 0.046704f, -0.039527f, 0.031382f, -0.029035f, 0.007851f, -0.020849f, -0.067873f, -0.031629f, -0.044848f, -0.032858f, 0.026591f, 0.090279f, 0.038233f, -0.105260f, -0.019137f, 0.003247f, -0.028560f, 0.003880f, 0.002866f, -0.063338f, 0.028607f, 0.028583f, 0.053170f, -0.030627f, 0.017474f, -0.034741f, -0.039901f, 0.013212f, 0.071588f, 0.118022f, -0.010788f, -0.011225f, -0.000715f, -0.005902f, -0.057303f, 0.081565f, 0.037400f, 0.041841f, 0.031397f, -0.027861f, 0.026021f, -0.051147f, -0.072292f, -0.015276f, 0.047998f, 0.030069f, -0.028223f, -0.019400f, -0.007089f, 0.038125f, -0.001992f, 0.026753f, 0.025930f, 0.045650f, - 0.012516f, -0.034874f, -0.033552f, 0.024319f, -0.037385f, -0.028787f, 0.010303f, 0.050081f, 0.045522f, -0.061417f, -0.048842f, 0.025017f, 0.030301f, 0.101976f, -0.029827f, -0.062890f, -0.065508f, 0.045937f, -0.044151f, 0.042776f, 0.048419f, 0.104012f, 0.226360f, -0.058127f, -0.036614f, -0.093781f, -0.146453f, -0.051414f, -0.078306f, 0.000161f, 0.087157f, -0.022999f, 0.040327f, 0.062837f, 0.034932f, -0.038944f, -0.102290f, -0.155955f, 0.055147f, -0.027580f, 0.028177f, -0.051275f, 0.004444f, -0.047094f, -0.122481f, 0.025519f, -0.053726f, 0.044832f, 0.002821f, 0.023193f, 0.019576f, -0.112255f, -0.081035f, -0.042082f, -0.028310f, -0.029264f, -0.048709f, -0.017867f, -0.077965f, -0.050862f, 0.030685f, -0.051896f, 0.086293f, -0.071774f, 0.002252f, 0.014649f, -0.011956f, 0.003904f, -0.008719f, 0.017635f, -0.025966f, -0.026841f, -0.008869f, 0.012170f, -0.007863f, 0.034880f, -0.041887f, 0.004156f, 0.051858f, 0.014086f, 0.003326f, 0.024812f, -0.001710f, -0.027474f, -0.020191f, 0.041945f, 0.004873f, -0.077483f, -0.038025f, -0.063777f, -0.032735f, 0.074059f, 0.067449f, -0.080411f, -0.014380f, -0.090943f, - -0.026915f, -0.012198f, 0.013519f, 0.037878f, -0.077075f, 0.041432f, -0.066816f, -0.016213f, -0.047709f, 0.083882f, -0.025627f, 0.056397f, 0.052036f, 0.124278f, -0.069317f, 0.044401f, 0.000322f, 0.038715f, 0.008954f, 0.020835f, -0.076612f, -0.092757f, 0.064941f, 0.015847f, -0.099465f, -0.040079f, -0.058886f, 0.010365f, -0.008267f, -0.137169f, -0.058065f, -0.031168f, -0.069307f, -0.041272f, -0.137523f, -0.115967f, -0.014909f, 0.058285f, -0.072340f, -0.041580f, -0.004237f, -0.061975f, -0.008155f, 0.000302f, -0.058151f, -0.011891f, 0.020956f, 0.008737f, -0.079506f, -0.044185f, -0.042047f, -0.022374f, -0.023162f, -0.003809f, -0.052730f, 0.055338f, 0.040621f, 0.076730f, 0.112447f, 0.095620f, 0.031096f, 0.100658f, 0.046455f, 0.021398f, -0.034838f, 0.037744f, 0.042998f, 0.031541f, -0.003180f, -0.029384f, -0.007284f, 0.027409f, 0.050805f, 0.223017f, 0.037846f, 0.048022f, 0.040343f, 0.092295f, 0.042807f, 0.080931f, 0.151782f, -0.067981f, -0.133001f, 0.018387f, 0.097766f, 0.160965f, 0.078871f, -0.139507f, 0.026157f, -0.036299f, 0.209897f, 0.146306f, 0.188038f, 0.161746f, -0.138828f, -0.102448f, - 0.123018f, 0.132031f, -0.035273f, -0.103911f, 0.166844f, 0.135215f, -0.117007f, 0.026633f, -0.003163f, 0.019502f, -0.005184f, -0.010646f, 0.042177f, -0.042129f, 0.041001f, -0.015869f, -0.001014f, 0.018027f, 0.012191f, 0.016586f, -0.001650f, -0.022707f, -0.017363f, 0.028815f, -0.023967f, -0.000696f, 0.023826f, -0.011823f, -0.017035f, -0.018077f, -0.040115f, -0.035155f, 0.025056f, -0.010932f, 0.007500f, -0.020733f, 0.001759f, -0.047220f, -0.012310f, 0.017290f, 0.029106f, -0.016991f, 0.003502f, 0.026149f, 0.031796f, -0.004443f, 0.025466f, -0.019622f, 0.089666f, -0.030331f, 0.027955f, 0.009087f, 0.013708f, -0.012580f, 0.020054f, -0.004720f, 0.061847f, -0.005403f, 0.015473f, -0.040923f, 0.055934f, -0.026208f, -0.008116f, -0.002714f, 0.003171f, -0.011651f, 0.030993f, -0.035540f, 0.028741f, -0.031665f, 0.044803f, -0.045270f, 0.058688f, -0.034638f, -0.027774f, -0.018251f, -0.016639f, 0.012360f, -0.041343f, -0.085008f, -0.093494f, 0.078752f, 0.019599f, -0.024894f, -0.126556f, -0.051101f, 0.069887f, 0.013946f, 0.050368f, 0.056241f, -0.020833f, -0.035947f, 0.001290f, 0.013060f, 0.010027f, 0.009041f, - -0.022694f, -0.016734f, -0.012764f, -0.000259f, 0.033771f, 0.018139f, -0.002006f, 0.007388f, -0.010175f, -0.016778f, -0.010865f, -0.008892f, 0.000311f, 0.009855f, -0.008045f, 0.012808f, 0.013405f, -0.046507f, -0.020816f, -0.020647f, 0.024540f, 0.017100f, -0.001720f, -0.021646f, -0.029286f, 0.025369f, 0.005536f, 0.017041f, 0.023688f, -0.042918f, -0.028557f, 0.007939f, 0.034722f, 0.017627f, -0.048694f, -0.029919f, -0.039427f, -0.018669f, 0.010631f, 0.009327f, -0.015825f, 0.018408f, -0.006694f, -0.016609f, 0.008539f, 0.017021f, -0.011135f, 0.004668f, 0.000905f, -0.014388f, 0.000345f, -0.004286f, -0.032472f, -0.033652f, 0.000785f, -0.035543f, -0.023894f, 0.004176f, 0.019253f, 0.006571f, 0.031948f, -0.082632f, -0.223568f, -0.085593f, 0.049960f, 0.106335f, 0.252281f, 0.147720f, 0.039761f, 0.051937f, -0.044483f, -0.082948f, -0.179805f, -0.121924f, -0.093204f, -0.031446f, 0.036222f, 0.097462f, 0.076179f, 0.094545f, 0.092082f, 0.061477f, -0.021524f, -0.074287f, -0.063549f, -0.066270f, -0.052495f, -0.076649f, 0.022908f, -0.048992f, 0.003335f, 0.033591f, 0.064612f, 0.035067f, 0.060536f, 0.078395f, - 0.001525f, 0.022291f, 0.001870f, -0.002819f, -0.044474f, -0.007536f, -0.039473f, -0.079212f, -0.122084f, -0.069885f, -0.036910f, 0.008146f, 0.009865f, 0.071029f, 0.101695f, 0.095359f, 0.116421f, 0.015026f, 0.076830f, 0.028255f, -0.005714f, -0.072966f, -0.068376f, -0.096427f, -0.122640f, -0.086457f, -0.094367f, -0.062632f, 0.002650f, 0.028317f, 0.071975f, 0.110495f, 0.168113f, 0.131126f, 0.124086f, 0.064861f, -0.018311f, -0.022329f, -0.055011f, -0.130740f, -0.087548f, -0.121066f, -0.032746f, -0.016849f}, - {-0.011529f, 0.010633f, -0.010855f, 0.008283f, -0.004712f, 0.002128f, -0.015443f, 0.008527f, 0.002102f, -0.000520f, -0.002793f, 0.006484f, -0.008040f, -0.001722f, -0.003263f, 0.006761f, -0.017150f, -0.004849f, -0.009769f, -0.004507f, 0.003563f, 0.002620f, 0.008341f, -0.013277f, 0.003993f, 0.001405f, 0.000761f, -0.005464f, -0.001490f, -0.007098f, -0.000907f, -0.009698f, 0.003179f, -0.010750f, -0.000954f, -0.009158f, -0.007333f, 0.001503f, -0.008120f, -0.010336f, -0.012650f, 0.003362f, -0.001474f, -0.002550f, 0.004997f, 0.003713f, -0.004920f, 0.000104f, 0.013474f, -0.006885f, -0.004400f, -0.010331f, -0.003020f, 0.005821f, 0.003213f, 0.003298f, -0.004866f, 0.004193f, -0.005892f, 0.000671f, -0.007184f, -0.000806f, 0.000472f, -0.007504f, -0.002781f, 0.001088f, -0.001091f, -0.008434f, -0.015750f, -0.006711f, -0.005645f, -0.001976f, -0.000442f, -0.003701f, -0.004485f, -0.001071f, 0.014918f, 0.009490f, 0.000155f, 0.000351f, 0.011754f, 0.002780f, -0.005978f, 0.003841f, 0.007820f, -0.004198f, -0.006590f, -0.023726f, 0.001219f, -0.008144f, 0.015677f, -0.008043f, 0.007866f, 0.006072f, -0.000808f, 0.004838f, - 0.008711f, 0.002063f, 0.002071f, -0.004613f, -0.005106f, -0.004348f, -0.006433f, 0.005301f, 0.003468f, -0.003461f, 0.005213f, -0.003945f, -0.005081f, -0.006645f, -0.002862f, -0.005365f, 0.000569f, -0.000406f, -0.000746f, 0.010244f, -0.006036f, 0.008259f, -0.002976f, -0.002805f, 0.006125f, -0.004256f, 0.002083f, -0.004288f, 0.006729f, -0.002576f, -0.018098f, 0.004761f, 0.000936f, 0.001513f, 0.009554f, 0.003992f, 0.000999f, -0.002927f, -0.005724f, 0.014849f, -0.007945f, 0.005182f, 0.003596f, -0.007501f, 0.007038f, 0.001887f, -0.007249f, 0.004963f, -0.007467f, -0.000761f, -0.000336f, 0.005636f, 0.001644f, 0.005866f, -0.002306f, -0.017655f, -0.003314f, 0.028867f, -0.013865f, 0.001845f, -0.000604f, -0.000574f, 0.006758f, -0.004883f, -0.020295f, -0.018666f, 0.009157f, -0.005720f, -0.001511f, 0.005108f, 0.001291f, 0.005050f, 0.005567f, -0.008738f, 0.005110f, 0.003647f, -0.006152f, 0.007770f, 0.011505f, -0.007062f, -0.002183f, 0.000859f, -0.011924f, -0.005192f, 0.001459f, 0.014840f, -0.002110f, -0.000499f, -0.011874f, 0.007492f, 0.000242f, -0.010524f, -0.004403f, 0.004124f, -0.001408f, 0.002469f, - -0.009149f, 0.000146f, 0.000889f, -0.003441f, 0.010291f, 0.002945f, 0.002513f, 0.010119f, -0.000742f, 0.013038f, -0.003957f, -0.015533f, 0.006750f, 0.006766f, -0.005339f, -0.001924f, -0.001653f, 0.002558f, 0.001041f, 0.005078f, -0.003322f, 0.003621f, -0.008362f, 0.000339f, 0.006135f, -0.007546f, -0.000545f, 0.005809f, 0.002045f, -0.003359f, 0.003422f, -0.002157f, 0.001543f, 0.009529f, 0.003726f, -0.009693f, 0.014725f, 0.006929f, -0.006647f, -0.016420f, -0.001734f, 0.002069f, 0.018676f, -0.006742f, 0.016040f, 0.004241f, -0.000290f, 0.001268f, 0.014371f, -0.002989f, -0.003621f, -0.003786f, 0.010196f, 0.020530f, 0.005536f, -0.013626f, -0.018684f, -0.026592f, 0.003764f, -0.006697f, -0.011081f, -0.005867f, -0.017312f, 0.000271f, -0.007909f, 0.001689f, 0.008661f, 0.009253f, -0.009769f, -0.008570f, -0.006128f, 0.001530f, -0.014651f, -0.001206f, 0.004871f, -0.006307f, -0.002211f, 0.002018f, 0.006251f, -0.007893f, 0.002437f, 0.020173f, -0.000558f, -0.000440f, -0.006990f, 0.008737f, -0.003380f, 0.001293f, 0.006536f, 0.008750f, 0.012399f, -0.001299f, 0.002091f, -0.002974f, 0.000156f, -0.001353f, - 0.001939f, 0.019676f, -0.020647f, 0.001294f, 0.004474f, 0.012065f, -0.004220f, -0.004587f, -0.000759f, -0.004180f, 0.015651f, -0.007136f, -0.019162f, -0.000035f, -0.005115f, -0.006758f, 0.005989f, -0.017761f, -0.030608f, 0.011630f, -0.009478f, 0.013037f, -0.011447f, -0.000902f, 0.009059f, -0.017634f, -0.002920f, 0.005577f, -0.004708f, 0.026070f, -0.010741f, -0.003125f, -0.010242f, -0.008512f, 0.013444f, 0.014972f, 0.005861f, -0.017277f, -0.020926f, 0.019640f, 0.003394f, -0.019559f, 0.007500f, 0.000902f, 0.009466f, -0.005673f, 0.009039f, -0.011623f, 0.005887f, 0.019247f, 0.008007f, 0.008357f, 0.004461f, 0.000533f, -0.004717f, 0.004186f, 0.001625f, -0.012795f, 0.000359f, -0.003907f, -0.009410f, -0.009310f, -0.003472f, 0.007766f, -0.013558f, 0.002116f, -0.009759f, -0.000762f, -0.001346f, 0.004794f, 0.008313f, 0.017505f, 0.006273f, 0.000201f, 0.007608f, -0.008883f, -0.013319f, 0.000106f, 0.003405f, 0.001788f, 0.016644f, -0.003303f, -0.001680f, -0.004760f, -0.001941f, 0.002873f, 0.008395f, -0.001506f, 0.003878f, -0.007303f, 0.013961f, -0.002360f, -0.003636f, -0.001237f, -0.016070f, -0.004282f, - -0.010679f, -0.001711f, 0.019710f, 0.012359f, 0.008408f, -0.002240f, -0.018684f, 0.001821f, -0.012543f, -0.019731f, -0.007048f, 0.013023f, -0.011489f, -0.017572f, 0.003673f, 0.000765f, -0.009159f, 0.001120f, 0.008857f, 0.001961f, -0.023273f, -0.007067f, 0.013374f, 0.015974f, 0.007528f, -0.019346f, -0.007561f, 0.007808f, -0.003984f, -0.004713f, 0.000391f, 0.005545f, 0.000173f, 0.001603f, 0.018296f, -0.000674f, 0.010716f, 0.008259f, -0.001030f, -0.009344f, -0.001115f, -0.005818f, 0.010488f, -0.007268f, -0.011839f, -0.000726f, 0.016930f, 0.000242f, 0.016782f, 0.008812f, 0.000683f, 0.010702f, -0.003021f, 0.023890f, 0.000867f, 0.011388f, 0.012745f, 0.000433f, -0.012745f, -0.002651f, -0.015073f, 0.006111f, -0.011249f, -0.006497f, -0.010572f, -0.007016f, -0.005953f, 0.003439f, -0.000194f, 0.005628f, -0.002181f, -0.009191f, -0.008989f, 0.000932f, 0.009952f, 0.018615f, -0.027876f, -0.005135f, 0.023274f, -0.011568f, 0.004204f, -0.017974f, 0.007853f, 0.032845f, -0.004528f, 0.001783f, -0.001492f, -0.023117f, 0.001752f, -0.001399f, 0.034678f, -0.010894f, -0.001855f, 0.015325f, -0.009762f, 0.021699f, - -0.014732f, -0.002037f, -0.022197f, 0.025023f, 0.000124f, -0.009618f, 0.000079f, 0.009298f, -0.011819f, 0.017494f, -0.002113f, 0.015546f, -0.000405f, 0.008270f, -0.024357f, -0.015210f, -0.011554f, -0.003319f, 0.014133f, -0.021480f, 0.011264f, 0.009332f, 0.002631f, -0.008662f, -0.013572f, 0.030346f, 0.005490f, -0.002979f, 0.011130f, -0.010132f, 0.005777f, -0.013601f, -0.014397f, -0.005233f, -0.009886f, 0.032939f, 0.009032f, -0.005788f, -0.010289f, -0.011635f, 0.009455f, 0.009190f, 0.002295f, -0.010498f, -0.002205f, -0.003601f, 0.012960f, 0.002428f, 0.010271f, -0.024713f, 0.013268f, -0.000511f, -0.000219f, -0.000456f, 0.003895f, -0.007179f, -0.000580f, -0.003073f, 0.010918f, 0.004943f, 0.008840f, 0.002015f, -0.000776f, -0.004559f, -0.015811f, -0.005501f, -0.010523f, 0.005008f, -0.001473f, 0.021562f, -0.019768f, -0.025140f, -0.007077f, 0.006683f, -0.008529f, -0.006754f, 0.018118f, 0.002945f, -0.011529f, -0.013042f, -0.013596f, 0.019981f, -0.011536f, 0.013212f, -0.007835f, 0.014537f, -0.016446f, 0.002486f, 0.022638f, 0.007204f, -0.033374f, 0.006521f, -0.000374f, -0.005056f, -0.003995f, 0.002390f, - -0.005000f, 0.002204f, -0.006434f, 0.001649f, -0.002498f, -0.015377f, 0.013244f, 0.013877f, -0.005661f, 0.015468f, -0.015285f, -0.003396f, -0.005341f, -0.007652f, 0.016742f, -0.014002f, -0.024446f, -0.013923f, 0.002907f, -0.019819f, -0.019014f, -0.009782f, -0.007474f, -0.013081f, -0.002640f, 0.014387f, 0.014517f, 0.001439f, 0.015656f, 0.004433f, 0.000308f, 0.012262f, -0.016516f, -0.003415f, -0.002772f, 0.036300f, -0.017491f, -0.016802f, 0.011866f, 0.029584f, 0.005949f, 0.026688f, 0.015287f, 0.024281f, 0.010837f, -0.004116f, -0.010648f, 0.008944f, -0.017684f, -0.013225f, 0.020162f, 0.017100f, 0.041910f, -0.000670f, 0.005966f, -0.015042f, 0.016264f, 0.007732f, -0.018475f, -0.003970f, 0.023747f, 0.000373f, -0.025950f, -0.010058f, -0.014624f, -0.004515f, 0.014582f, 0.013828f, -0.009842f, -0.004294f, 0.018136f, -0.017051f, 0.008059f, 0.015788f, 0.018220f, -0.009209f, 0.015656f, -0.006093f, -0.023797f, 0.008937f, 0.021674f, -0.005252f, 0.006160f, 0.005904f, -0.007538f, 0.003261f, 0.006338f, -0.006154f, 0.002209f, 0.018264f, -0.010640f, -0.004843f, 0.015981f, -0.002832f, -0.003625f, -0.026311f, - -0.009935f, -0.015600f, -0.027215f, -0.017320f, 0.012952f, -0.008036f, -0.012007f, 0.023978f, 0.022568f, -0.005044f, 0.024231f, 0.010873f, 0.015566f, -0.003686f, -0.013836f, 0.011134f, -0.018228f, -0.019486f, 0.026273f, -0.004421f, 0.060089f, -0.024804f, -0.011739f, -0.001400f, 0.014580f, -0.008399f, -0.008310f, -0.024790f, -0.028810f, 0.012955f, 0.002343f, 0.039599f, 0.012663f, -0.004031f, -0.004703f, 0.026313f, 0.026646f, -0.022170f, 0.015891f, -0.021176f, 0.005325f, -0.009113f, -0.011196f, -0.006492f, 0.004211f, -0.003439f, 0.013618f, 0.006993f, 0.015246f, -0.001949f, -0.007840f, -0.014666f, -0.003265f, 0.017030f, 0.001060f, -0.022700f, -0.003361f, 0.005457f, -0.010234f, 0.017874f, 0.014561f, 0.003054f, 0.004615f, -0.049614f, -0.019679f, 0.017126f, -0.001953f, 0.027566f, 0.006879f, 0.031049f, -0.004479f, -0.017252f, 0.015651f, -0.009856f, 0.010216f, 0.001564f, 0.044280f, 0.037146f, 0.002952f, 0.009976f, -0.007929f, 0.014145f, 0.013932f, 0.016151f, 0.016270f, 0.028942f, -0.003362f, 0.003791f, -0.015119f, -0.012180f, 0.004724f, -0.016761f, -0.042545f, -0.052222f, 0.041230f, -0.001187f, - 0.004716f, -0.014477f, 0.023148f, -0.049602f, -0.031731f, -0.010041f, -0.012662f, -0.001222f, -0.044370f, 0.008682f, 0.001022f, -0.001215f, -0.020172f, -0.020682f, 0.008565f, 0.028320f, 0.004571f, -0.037817f, -0.007986f, -0.030956f, 0.024697f, 0.015802f, 0.001501f, -0.013677f, -0.006177f, -0.006950f, 0.020500f, -0.002805f, -0.000021f, -0.004272f, -0.026964f, 0.014357f, 0.019683f, -0.011331f, -0.005601f, 0.015128f, -0.029231f, -0.021499f, -0.032248f, -0.010868f, 0.008993f, -0.020649f, -0.009230f, -0.000494f, -0.033195f, 0.010883f, 0.021979f, 0.037759f, 0.006419f, -0.003040f, 0.003459f, -0.023701f, -0.017890f, 0.029385f, -0.000590f, -0.009766f, -0.005125f, -0.042352f, -0.021604f, 0.010026f, -0.007196f, -0.003303f, -0.001115f, 0.030688f, -0.002333f, -0.024473f, 0.005213f, 0.024432f, 0.003059f, -0.009049f, 0.004158f, 0.007154f, -0.005428f, -0.011533f, 0.006694f, 0.029249f, 0.027035f, 0.010795f, 0.044692f, -0.017672f, -0.007275f, 0.008519f, -0.009541f, -0.001788f, 0.015807f, 0.047609f, -0.005649f, 0.010867f, 0.001533f, -0.001343f, 0.001093f, 0.052312f, -0.022742f, 0.027850f, 0.001655f, -0.031868f, - 0.013016f, -0.031608f, -0.018200f, 0.020563f, -0.015368f, 0.014973f, 0.002827f, 0.003283f, 0.024925f, 0.019702f, -0.025189f, -0.029587f, -0.021076f, -0.006354f, 0.011190f, 0.010437f, 0.005722f, 0.007631f, -0.034864f, 0.007210f, -0.017521f, -0.045467f, 0.034576f, -0.007716f, 0.032747f, 0.033715f, 0.004604f, 0.013601f, -0.014332f, -0.019298f, -0.034057f, 0.010163f, 0.036971f, 0.007698f, -0.011713f, 0.003782f, -0.004181f, 0.007046f, -0.016458f, -0.014370f, -0.016252f, 0.005481f, 0.001435f, -0.004319f, 0.025943f, 0.021997f, 0.016207f, 0.034384f, 0.008315f, -0.030676f, 0.048473f, -0.028470f, -0.003832f, -0.004414f, -0.000555f, 0.041236f, 0.046381f, 0.012208f, -0.081948f, 0.004822f, 0.025549f, -0.025870f, 0.018739f, 0.035314f, 0.003557f, 0.010894f, 0.023092f, 0.018055f, 0.008262f, 0.031901f, 0.008805f, -0.002406f, 0.058586f, 0.022829f, 0.009418f, 0.026233f, -0.016658f, 0.031777f, -0.018962f, -0.000075f, -0.000279f, -0.005181f, -0.028915f, 0.012158f, -0.019813f, 0.042074f, -0.001419f, -0.006182f, 0.061474f, 0.009662f, 0.010900f, 0.021469f, 0.004496f, 0.013112f, -0.011008f, -0.024089f, - -0.000618f, 0.019178f, -0.028237f, 0.037248f, 0.034434f, 0.025404f, 0.008622f, 0.015839f, -0.018682f, -0.020201f, -0.032340f, -0.013622f, -0.016259f, -0.016139f, 0.010878f, -0.001598f, -0.031479f, -0.013341f, 0.032703f, 0.001287f, -0.025389f, 0.017757f, 0.001270f, -0.017387f, -0.042789f, 0.004937f, -0.066255f, 0.041934f, -0.020454f, 0.038100f, 0.005046f, 0.011246f, 0.004635f, -0.013755f, 0.021918f, 0.056844f, 0.022108f, 0.016227f, 0.044629f, -0.063715f, 0.023689f, -0.037668f, 0.030240f, -0.016469f, -0.027516f, -0.008391f, -0.031548f, -0.013561f, -0.007988f, 0.010225f, 0.012754f, -0.009568f, 0.042612f, -0.002723f, -0.008849f, -0.006504f, -0.041064f, -0.004964f, -0.001176f, -0.033958f, 0.009364f, -0.028982f, -0.037337f, -0.012044f, 0.020250f, -0.059892f, -0.041837f, -0.027304f, 0.001631f, -0.041972f, -0.036905f, -0.028882f, -0.015890f, -0.011735f, -0.006950f, -0.028222f, 0.028682f, 0.005241f, -0.004419f, -0.020896f, -0.023137f, 0.041036f, -0.036969f, -0.023916f, 0.009238f, 0.011337f, 0.013189f, -0.020029f, -0.030123f, -0.011390f, -0.006755f, 0.014215f, -0.021995f, -0.007239f, -0.009796f, -0.023384f, - -0.043250f, -0.051590f, 0.048877f, -0.053280f, -0.004246f, 0.005796f, -0.010687f, -0.007948f, -0.050101f, 0.021581f, -0.012630f, -0.048540f, -0.001859f, -0.007844f, 0.048023f, 0.016094f, 0.034516f, -0.056606f, 0.063858f, 0.009546f, 0.005691f, -0.011854f, 0.031940f, -0.000200f, 0.053108f, -0.015300f, 0.036084f, 0.019459f, -0.054344f, 0.022615f, 0.007633f, 0.024852f, -0.005532f, -0.014614f, -0.022468f, -0.008199f, 0.024722f, 0.056933f, 0.004678f, -0.008697f, -0.037703f, 0.013386f, -0.040737f, -0.006475f, 0.037952f, -0.035996f, -0.001641f, 0.002286f, -0.007959f, -0.013702f, -0.017086f, 0.063298f, -0.015693f, -0.015777f, -0.009778f, 0.014226f, 0.019108f, 0.007813f, -0.001253f, -0.013111f, -0.002617f, 0.009324f, 0.036013f, -0.009048f, 0.052483f, 0.032042f, 0.013589f, -0.013514f, 0.045083f, 0.054379f, -0.007698f, -0.014825f, -0.006257f, -0.018185f, 0.001834f, -0.018106f, 0.023729f, 0.008767f, 0.035615f, 0.029910f, -0.053065f, -0.055814f, 0.060988f, 0.047579f, 0.002605f, -0.010958f, -0.031701f, -0.038308f, -0.020296f, 0.034008f, -0.041691f, -0.042038f, -0.013030f, -0.017036f, -0.059373f, 0.026878f, - -0.025185f, -0.009334f, -0.006671f, 0.003918f, -0.000835f, -0.036979f, -0.103854f, 0.049430f, -0.050842f, 0.018281f, 0.071141f, 0.009397f, -0.032274f, 0.019300f, 0.023664f, -0.012335f, -0.024840f, -0.006529f, -0.052046f, 0.014879f, -0.054031f, -0.033485f, 0.019245f, 0.000437f, 0.007299f, -0.048974f, -0.011380f, -0.035831f, -0.030728f, -0.043805f, -0.016468f, 0.012697f, -0.026856f, -0.027154f, 0.022922f, 0.001709f, -0.003896f, 0.006164f, -0.050244f, -0.004670f, -0.039504f, 0.030556f, 0.007012f, -0.093807f, 0.021302f, 0.047735f, -0.012489f, 0.027834f, 0.022819f, 0.015134f, 0.011405f, 0.045599f, 0.034920f, -0.000161f, -0.035861f, -0.008610f, 0.035202f, 0.022843f, -0.033527f, 0.000921f, -0.038874f, -0.013010f, 0.000029f, 0.025397f, 0.032928f, -0.066134f, -0.054259f, -0.029610f, 0.002581f, -0.019897f, -0.010300f, 0.060394f, 0.006603f, 0.014288f, 0.043862f, -0.020516f, 0.010527f, 0.035929f, 0.034766f, -0.054901f, 0.013965f, -0.010125f, -0.012995f, -0.011061f, 0.040232f, 0.022545f, -0.025957f, -0.013661f, 0.031115f, -0.050156f, 0.004872f, 0.021420f, 0.031119f, -0.003855f, 0.008321f, -0.058801f, - 0.001594f, -0.024663f, 0.022277f, 0.010024f, 0.035755f, -0.051296f, -0.025399f, -0.005247f, 0.008381f, -0.002003f, 0.012235f, 0.006530f, 0.031070f, 0.058079f, -0.033358f, -0.042488f, 0.013597f, -0.044340f, -0.012255f, 0.022650f, -0.032654f, -0.030363f, 0.004410f, 0.023545f, 0.030428f, 0.023529f, -0.011267f, 0.000259f, -0.058470f, -0.037269f, 0.054918f, -0.033699f, 0.073571f, -0.027125f, 0.016237f, 0.014034f, 0.001013f, -0.049309f, 0.067866f, -0.027165f, -0.004698f, -0.008086f, 0.027469f, 0.053900f, -0.048904f, -0.024586f, 0.060885f, -0.039552f, 0.001526f, -0.012014f, 0.013738f, 0.073445f, 0.002019f, 0.000170f, -0.040815f, 0.058280f, -0.015435f, 0.019863f, 0.014726f, 0.003671f, 0.033559f, -0.036683f, 0.011264f, 0.031605f, 0.031508f, 0.070056f, -0.043216f, 0.064350f, -0.010247f, -0.041308f, -0.039848f, 0.010941f, 0.027767f, -0.018097f, -0.007366f, -0.028440f, -0.010614f, 0.054347f, -0.036858f, -0.003316f, 0.044830f, -0.013883f, 0.027372f, -0.017242f, -0.006783f, 0.046156f, -0.000058f, 0.002349f, 0.046133f, 0.030766f, 0.012623f, -0.005609f, 0.039391f, 0.051085f, -0.050346f, 0.047926f, - -0.044149f, 0.024083f, -0.031201f, 0.006550f, 0.041977f, 0.013089f, -0.087862f, 0.039473f, 0.028136f, -0.000974f, 0.048423f, -0.072404f, -0.010981f, 0.047834f, 0.044519f, 0.005945f, 0.068449f, -0.035772f, 0.004312f, -0.009574f, -0.006202f, 0.026568f, 0.015785f, 0.047285f, 0.045358f, -0.032223f, 0.032208f, -0.058546f, -0.011661f, 0.002429f, 0.003878f, -0.006727f, -0.001281f, -0.091234f, -0.039347f, -0.071286f, -0.034401f, 0.047992f, -0.015107f, -0.008366f, 0.030844f, -0.022335f, 0.021358f, 0.054941f, -0.030483f, 0.021120f, 0.027088f, -0.039815f, 0.005001f, -0.048949f, 0.018470f, -0.005389f, -0.026101f, 0.038458f, 0.001036f, 0.060076f, -0.003807f, -0.045371f, 0.076199f, -0.013987f, 0.007485f, 0.010237f, -0.071774f, 0.021237f, 0.061493f, 0.021627f, -0.026990f, -0.047299f, 0.004675f, 0.011004f, 0.052492f, 0.033529f, -0.017454f, -0.010777f, -0.041378f, -0.000175f, 0.059321f, -0.081707f, 0.024231f, 0.056015f, -0.051431f, 0.017982f, 0.004813f, 0.018854f, 0.059130f, 0.019059f, 0.022416f, -0.011998f, -0.059295f, 0.059645f, -0.012050f, -0.032137f, 0.126336f, 0.061384f, 0.031455f, 0.004250f, - 0.001750f, -0.061303f, -0.050381f, -0.023823f, 0.035935f, -0.002957f, -0.036412f, -0.026352f, 0.045259f, -0.030792f, 0.030283f, 0.016327f, -0.025871f, 0.032488f, 0.012887f, -0.052668f, -0.028744f, -0.031668f, 0.004005f, 0.030241f, -0.068342f, 0.021757f, 0.078169f, 0.130217f, -0.021490f, -0.004047f, -0.106426f, -0.035441f, -0.078247f, -0.051872f, 0.072708f, 0.005560f, 0.019790f, -0.059875f, 0.019582f, -0.052473f, -0.119245f, 0.017934f, 0.057252f, -0.004125f, 0.007348f, 0.062330f, -0.081852f, 0.094037f, 0.046394f, 0.029901f, -0.046408f, 0.063577f, 0.120805f, -0.023162f, 0.037188f, 0.092843f, 0.077342f, 0.137941f, 0.029480f, 0.050264f, 0.036956f, 0.034528f, 0.117268f, -0.029310f, -0.014319f, 0.044727f, 0.025375f, -0.011287f, 0.064272f, 0.005504f, 0.013199f, -0.036642f, -0.105468f, 0.005946f, 0.069600f, 0.012691f, 0.041947f, -0.073608f, 0.004192f, -0.098409f, -0.000359f, -0.105719f, 0.006876f, 0.078836f, -0.010260f, -0.029141f, -0.103961f, 0.138790f, 0.023847f, 0.013020f, 0.139285f, 0.002801f, -0.032973f, -0.018460f, 0.006094f, 0.034173f, -0.009212f, 0.008025f, -0.013223f, -0.064337f, - 0.040328f, 0.031243f, -0.036721f, -0.131593f, 0.010934f, 0.188136f, 0.031102f, -0.033049f, -0.031134f, -0.079249f, -0.050336f, 0.006974f, 0.119091f, 0.024709f, -0.072248f, -0.000988f, 0.035628f, 0.012081f, 0.006673f, -0.002971f, 0.024336f, -0.050138f, -0.016153f, 0.032622f, 0.067958f, 0.068800f, -0.056119f, -0.018543f, 0.009030f, 0.013314f, 0.020576f, -0.064803f, 0.011149f, 0.016198f, -0.013882f, 0.054943f, 0.003939f, 0.062691f, 0.091463f, 0.046603f, 0.022526f, 0.042898f, -0.044832f, 0.049931f, -0.035306f, 0.072230f, 0.123165f, 0.044211f, -0.059412f, -0.050023f, 0.058423f, 0.024918f, 0.105790f, 0.081345f, 0.028002f, -0.013502f, -0.017825f, 0.008658f, 0.010162f, -0.029529f, 0.044251f, 0.040145f, 0.011568f, 0.097175f, 0.067605f, -0.002401f, 0.049724f, 0.055811f, 0.028376f, 0.055980f, 0.007356f, -0.080328f, -0.005537f, -0.014176f, -0.014991f, 0.105830f, 0.050209f, 0.023778f, -0.005694f, -0.031729f, -0.134158f, -0.032542f, 0.067135f, 0.034490f, 0.152725f, 0.004204f, -0.028148f, -0.075087f, -0.143928f, -0.156427f, -0.030850f, 0.061440f, 0.068087f, 0.043178f, -0.082651f, -0.105562f, - -0.006649f, -0.016356f, 0.034456f, 0.102131f, 0.047703f, -0.013704f, -0.069956f, -0.089884f, -0.060779f, -0.000069f, -0.059864f, 0.017158f, -0.051406f, -0.025392f, 0.063430f, 0.055050f, 0.044549f, 0.017010f, -0.080271f, -0.023480f, -0.077378f, -0.056576f, -0.036152f, 0.037876f, -0.016256f, 0.040478f, 0.098303f, 0.108797f, -0.055843f, 0.009925f, -0.092126f, -0.059330f, -0.049428f, -0.010022f, 0.004918f, 0.061990f, 0.058156f, 0.092518f, 0.056207f, 0.021499f, -0.059437f, -0.046379f, -0.023395f, 0.027689f, -0.091705f, 0.002577f, 0.076190f, 0.069285f, -0.035122f, 0.094710f, 0.070208f, 0.045265f, 0.072193f, -0.179324f, 0.019090f, -0.056880f, -0.079685f, 0.017546f, -0.057269f, -0.029357f, 0.070015f, 0.029797f, -0.197300f, -0.227465f, -0.246226f, -0.249471f, -0.346999f, 0.003548f, -0.107400f, -0.017663f, 0.075828f, 0.150130f, 0.201344f, 0.205733f, 0.395214f, 0.420571f, 0.348294f, 0.264320f, 0.279949f, 0.266480f, 0.119374f, -0.011780f, -0.140299f, -0.142694f, -0.229812f, -0.059522f, -0.112856f, -0.080122f, 0.015845f, -0.194277f, -0.037135f, -0.171571f, -0.027738f, -0.200990f, -0.185294f, -0.075786f, - -0.149039f, 0.002805f, -0.063655f, -0.061157f, -0.106234f, -0.066875f, -0.172929f, -0.120388f, -0.051366f, -0.050476f, -0.082182f, -0.047755f, 0.012843f, -0.069532f, 0.047595f, 0.137868f, -0.079485f, 0.158848f, 0.105345f, 0.206161f, 0.213325f, 0.179097f, 0.226289f, 0.183015f, 0.307933f, 0.294554f, 0.242385f, 0.309235f, 0.272671f, 0.400494f, 0.403401f, 0.458092f, 0.361545f, 0.367873f, 0.414794f, 0.343670f, 0.432523f, 0.269798f, 0.441880f, 0.273503f, 0.009097f, -0.122623f, -0.216074f, -0.174379f} - }, - { - {-0.006438f, -0.004315f, -0.005702f, -0.006947f, -0.006513f, 0.006489f, -0.015155f, 0.001720f, -0.002707f, -0.005306f, 0.013576f, -0.004390f, -0.004031f, 0.008676f, 0.001340f, -0.006469f, 0.002079f, -0.002638f, 0.002283f, 0.001768f, -0.001096f, 0.007134f, -0.002417f, -0.007501f, -0.000643f, 0.002223f, 0.003674f, 0.004660f, 0.000117f, 0.002859f, -0.001918f, 0.010614f, 0.007185f, -0.007961f, -0.004507f, -0.003812f, 0.003084f, -0.005590f, -0.006529f, 0.007636f, -0.003302f, -0.000129f, -0.000709f, 0.002070f, 0.006926f, 0.006304f, -0.002933f, -0.001857f, 0.004927f, 0.002290f, 0.001503f, 0.000528f, 0.004114f, -0.005940f, -0.003941f, 0.000374f, 0.003541f, -0.004281f, 0.002956f, -0.007551f, -0.000495f, 0.005203f, 0.003778f, -0.002589f, 0.004454f, 0.000518f, 0.006269f, 0.002267f, -0.002906f, 0.008517f, 0.011459f, 0.004190f, -0.001935f, -0.000890f, -0.005512f, 0.009554f, -0.000621f, 0.003792f, 0.001326f, -0.008771f, -0.006662f, 0.002014f, -0.006027f, -0.008815f, 0.004670f, -0.001233f, 0.001044f, -0.005148f, 0.003388f, 0.000139f, -0.007859f, -0.000556f, 0.008549f, 0.006936f, -0.005716f, -0.009846f, - -0.009033f, 0.001088f, -0.002276f, -0.001925f, -0.007730f, 0.007932f, -0.002422f, 0.002092f, -0.003671f, -0.002269f, -0.001011f, 0.002888f, -0.002482f, -0.004479f, -0.016681f, 0.005385f, -0.001525f, 0.005109f, 0.002863f, 0.002037f, -0.000715f, 0.010749f, 0.001760f, 0.001997f, 0.001224f, -0.005785f, -0.003889f, -0.000706f, 0.000486f, -0.005789f, -0.001652f, 0.001995f, -0.001106f, -0.005481f, -0.003134f, 0.000007f, 0.004818f, -0.008296f, -0.011369f, -0.013819f, 0.004433f, 0.007607f, 0.000377f, 0.006247f, 0.004297f, 0.000682f, -0.012967f, -0.000578f, -0.003797f, -0.004682f, -0.000391f, 0.000307f, 0.004410f, -0.001710f, 0.005748f, 0.007560f, -0.001938f, -0.000274f, -0.011205f, 0.009681f, -0.012808f, 0.004710f, 0.021170f, -0.004753f, -0.008080f, 0.001019f, 0.010982f, 0.000987f, -0.003302f, -0.001742f, -0.003322f, -0.002223f, -0.010149f, -0.004112f, 0.004812f, -0.008171f, -0.004673f, 0.000232f, -0.000561f, 0.008567f, -0.005483f, 0.001413f, -0.002189f, 0.001687f, -0.001225f, -0.005374f, 0.009632f, 0.016314f, 0.004096f, -0.001192f, -0.003199f, 0.017665f, 0.000745f, -0.007753f, 0.000416f, -0.013628f, - -0.000031f, 0.006706f, -0.010332f, -0.001577f, 0.002131f, -0.008471f, -0.002530f, 0.009154f, 0.001284f, -0.001300f, 0.009053f, -0.006349f, -0.009625f, 0.005128f, 0.003553f, -0.006982f, -0.003351f, -0.007455f, -0.008423f, -0.009320f, -0.005019f, -0.005446f, 0.007305f, 0.004938f, 0.001426f, -0.000451f, -0.005079f, 0.004508f, -0.001091f, -0.003587f, 0.006224f, 0.006890f, 0.010852f, -0.015919f, -0.010517f, -0.003826f, -0.002342f, 0.000488f, 0.002013f, -0.015191f, 0.010488f, -0.004837f, 0.003414f, 0.002109f, 0.003481f, 0.006552f, -0.000061f, -0.002256f, -0.005048f, 0.010831f, -0.000867f, 0.007014f, 0.013458f, -0.002994f, 0.011448f, 0.009685f, -0.008453f, 0.005577f, 0.005738f, 0.006058f, -0.014912f, -0.001570f, 0.000918f, -0.004783f, -0.009360f, 0.000053f, 0.010998f, -0.002669f, -0.004648f, -0.003786f, 0.003405f, 0.010058f, 0.005080f, -0.005299f, -0.000016f, -0.004393f, 0.000512f, -0.001479f, -0.004974f, 0.009368f, -0.012163f, -0.010262f, -0.009194f, 0.002744f, -0.001180f, -0.000477f, -0.011298f, -0.012234f, 0.003105f, -0.000417f, 0.000866f, -0.001366f, -0.000437f, -0.009210f, -0.005105f, -0.010072f, - 0.002201f, 0.008217f, -0.002324f, 0.007230f, 0.001771f, 0.006351f, -0.013958f, -0.000323f, 0.002647f, -0.005296f, -0.001374f, 0.001264f, -0.005060f, 0.001718f, -0.000707f, 0.009719f, 0.015259f, 0.001308f, -0.005261f, -0.012285f, 0.006183f, 0.004109f, 0.003909f, 0.016098f, -0.009893f, 0.000704f, 0.002325f, -0.002522f, -0.004742f, 0.002656f, 0.001405f, 0.009812f, 0.021363f, -0.001535f, 0.004042f, 0.009059f, -0.003380f, 0.008104f, 0.014035f, -0.009222f, 0.000067f, -0.003271f, 0.000225f, 0.006331f, -0.010184f, 0.011704f, 0.002978f, 0.000366f, 0.006463f, -0.000776f, 0.008786f, -0.004332f, -0.001508f, -0.002169f, 0.013557f, 0.006292f, 0.008783f, -0.001438f, 0.007306f, -0.012627f, 0.015148f, -0.005604f, 0.006197f, -0.013348f, 0.005809f, 0.009797f, 0.018349f, 0.006617f, 0.003725f, -0.011838f, -0.004175f, 0.003213f, -0.008617f, -0.010742f, -0.002217f, 0.021085f, 0.024860f, 0.004516f, 0.006015f, -0.007276f, -0.002947f, 0.013416f, 0.002761f, 0.005609f, -0.000890f, 0.003690f, 0.003390f, 0.011004f, 0.000940f, 0.001914f, 0.015214f, -0.011645f, -0.013739f, 0.023076f, -0.005121f, -0.003018f, - 0.015421f, 0.009369f, 0.001828f, -0.025234f, 0.028625f, -0.004556f, -0.002739f, -0.002389f, -0.000714f, 0.001635f, 0.002549f, 0.009231f, 0.013849f, 0.009073f, -0.000989f, 0.015085f, 0.010155f, 0.005180f, 0.004856f, -0.004879f, 0.007618f, -0.010004f, 0.009364f, -0.001125f, 0.004529f, -0.008405f, -0.011840f, 0.002123f, -0.000537f, 0.005198f, 0.008914f, -0.003367f, -0.011171f, -0.006739f, 0.004261f, -0.014348f, 0.010849f, 0.003451f, -0.022307f, 0.011158f, 0.003012f, 0.006598f, 0.002972f, 0.004180f, 0.005520f, -0.000441f, -0.005081f, -0.005239f, -0.014461f, -0.011272f, -0.004824f, -0.007621f, 0.000047f, 0.001626f, -0.009823f, -0.015979f, -0.000371f, 0.011676f, 0.021003f, -0.000033f, -0.009995f, 0.003146f, -0.016905f, 0.002638f, 0.001634f, -0.006090f, 0.019824f, -0.025010f, 0.013395f, -0.004528f, -0.008691f, -0.006842f, -0.008297f, -0.011738f, 0.023527f, -0.029252f, 0.007301f, 0.007435f, 0.010005f, 0.014732f, 0.002714f, 0.004302f, 0.005786f, 0.004201f, 0.003363f, 0.005180f, 0.013068f, 0.002581f, -0.006628f, 0.000274f, -0.000853f, -0.008811f, -0.007847f, 0.004499f, 0.008903f, 0.009451f, - 0.001641f, 0.006822f, -0.014987f, -0.001498f, 0.000198f, -0.000553f, -0.014161f, -0.008439f, -0.004814f, 0.009839f, 0.009008f, 0.000158f, -0.015503f, 0.000404f, -0.008171f, -0.005866f, -0.002647f, -0.003962f, 0.010538f, 0.013991f, 0.004671f, 0.014555f, -0.022165f, -0.015492f, 0.008129f, 0.005035f, 0.001373f, 0.003426f, 0.002119f, -0.006912f, -0.013616f, -0.009384f, 0.008291f, -0.005864f, 0.012356f, 0.011995f, -0.003309f, 0.011468f, -0.016250f, -0.007746f, -0.003757f, -0.004915f, 0.002546f, 0.032395f, -0.002854f, 0.010277f, -0.002570f, 0.026230f, -0.004642f, 0.001034f, 0.011252f, -0.024334f, 0.017299f, 0.008908f, -0.013536f, 0.015733f, 0.017625f, 0.006096f, -0.026242f, 0.016753f, 0.001099f, -0.002220f, 0.013867f, 0.014842f, -0.000425f, -0.004018f, 0.000836f, -0.010056f, 0.010089f, -0.005379f, -0.009412f, -0.020444f, 0.005280f, -0.022249f, 0.006499f, -0.005263f, -0.002049f, 0.006739f, -0.017857f, -0.007293f, 0.015746f, -0.001095f, -0.006605f, 0.009564f, 0.001151f, -0.007778f, 0.007457f, 0.002724f, 0.001250f, -0.003218f, 0.005861f, -0.010957f, -0.000552f, -0.016102f, 0.016074f, 0.015619f, - -0.018524f, 0.013022f, -0.012986f, -0.004989f, 0.014010f, 0.018716f, -0.000549f, -0.009069f, 0.006452f, -0.001006f, 0.003580f, -0.022511f, -0.016943f, 0.003721f, 0.004274f, -0.004767f, -0.003501f, 0.006002f, 0.000580f, -0.007919f, 0.011012f, -0.009154f, 0.004874f, 0.007032f, 0.000305f, 0.010982f, -0.008624f, 0.007352f, 0.003314f, -0.009253f, 0.018379f, -0.006054f, 0.009050f, -0.018196f, -0.001092f, -0.004688f, -0.016452f, 0.000733f, 0.011997f, 0.021074f, 0.027610f, -0.015453f, -0.000198f, -0.019301f, -0.001207f, -0.012249f, 0.011308f, -0.011466f, -0.022658f, 0.001604f, -0.014418f, -0.001262f, 0.019288f, -0.011159f, -0.010950f, 0.020501f, 0.000933f, 0.003604f, -0.001820f, -0.011901f, 0.005418f, 0.004440f, 0.024917f, -0.016877f, 0.012404f, -0.014306f, 0.003948f, 0.004846f, -0.013818f, -0.008671f, 0.023995f, 0.006519f, -0.017149f, -0.004474f, -0.005999f, -0.014041f, -0.000150f, 0.023188f, 0.012859f, 0.016148f, 0.004167f, 0.006483f, -0.020605f, -0.003012f, 0.027393f, 0.002170f, -0.016121f, 0.008975f, 0.009481f, -0.012199f, -0.010026f, -0.005844f, -0.026903f, -0.004174f, 0.008930f, 0.013751f, - 0.025022f, -0.005878f, -0.012375f, -0.003490f, -0.007267f, 0.020371f, -0.006183f, 0.010340f, -0.042335f, -0.029629f, -0.019509f, 0.000715f, -0.035707f, 0.003678f, 0.024027f, 0.006981f, 0.024780f, -0.015523f, -0.007941f, -0.004304f, -0.015086f, -0.006562f, -0.021924f, 0.034905f, 0.019299f, 0.013028f, -0.032203f, -0.007421f, -0.011373f, -0.021483f, 0.005423f, -0.003603f, 0.004982f, -0.026343f, -0.003222f, -0.003747f, -0.019362f, 0.008839f, 0.001411f, 0.016675f, 0.005774f, -0.016808f, 0.022437f, -0.012939f, 0.008151f, 0.003453f, -0.001819f, 0.017375f, 0.016020f, 0.002803f, -0.024581f, 0.026272f, -0.015847f, 0.018332f, 0.007407f, -0.012116f, -0.013302f, 0.020690f, 0.001490f, -0.004447f, 0.003995f, -0.020863f, -0.008713f, 0.009010f, -0.003557f, 0.017869f, -0.013526f, -0.020054f, 0.005250f, 0.002903f, -0.001597f, 0.017465f, 0.006203f, 0.001569f, -0.015053f, 0.011738f, 0.003047f, -0.013943f, -0.004295f, -0.004510f, -0.009339f, -0.008662f, -0.008604f, 0.002488f, -0.024982f, 0.035530f, 0.015256f, 0.040489f, -0.016912f, -0.020546f, 0.038730f, 0.002029f, -0.002974f, 0.009014f, 0.003852f, 0.022837f, - 0.030470f, 0.004516f, -0.026415f, -0.043248f, 0.007167f, -0.011508f, 0.003704f, 0.001814f, -0.017957f, -0.000679f, 0.024962f, 0.020048f, 0.016440f, 0.031242f, -0.005873f, 0.026499f, -0.017231f, 0.023470f, 0.008703f, 0.018220f, -0.010889f, 0.031800f, 0.019268f, 0.023238f, -0.035418f, -0.000020f, 0.034369f, 0.019019f, 0.007166f, -0.007865f, 0.051133f, 0.021052f, -0.018479f, -0.012225f, 0.013316f, -0.019308f, -0.000744f, -0.009494f, 0.003678f, 0.041535f, 0.045058f, 0.031351f, 0.012785f, -0.000371f, 0.017579f, -0.015513f, -0.002707f, 0.016893f, -0.017741f, 0.043085f, 0.028579f, 0.020136f, 0.009370f, -0.003790f, -0.020343f, 0.023802f, 0.001457f, 0.019712f, -0.009998f, 0.004547f, -0.014815f, -0.014753f, -0.000771f, 0.001273f, -0.017680f, 0.042823f, -0.002538f, -0.021288f, -0.009560f, -0.016739f, -0.000609f, -0.026808f, 0.006976f, -0.023148f, 0.013100f, 0.002754f, -0.006068f, -0.018305f, -0.021426f, -0.032995f, -0.033748f, -0.010355f, 0.029707f, -0.002497f, -0.018924f, 0.007619f, -0.017988f, 0.013731f, -0.015274f, 0.027251f, -0.027922f, 0.006271f, -0.019632f, -0.020952f, -0.003252f, 0.003124f, - -0.005424f, 0.012644f, -0.040159f, 0.016042f, 0.004630f, -0.010222f, -0.002062f, -0.003097f, -0.019361f, -0.032758f, -0.033796f, 0.024592f, 0.013324f, -0.013928f, 0.022673f, 0.000353f, -0.007863f, -0.025844f, -0.052404f, -0.044457f, 0.026380f, -0.007955f, 0.002035f, -0.005485f, -0.000926f, -0.002664f, -0.034603f, 0.013804f, -0.041035f, -0.022800f, 0.004044f, -0.001101f, -0.006902f, -0.005335f, -0.003202f, 0.044969f, -0.010899f, -0.013415f, -0.008861f, 0.047831f, -0.004757f, -0.016396f, 0.033574f, -0.019604f, -0.009519f, -0.012841f, -0.007524f, -0.063877f, -0.048386f, -0.027901f, 0.054688f, -0.003354f, -0.009818f, -0.007278f, -0.004976f, -0.018727f, 0.018934f, 0.014628f, 0.048832f, -0.046139f, -0.009555f, 0.013594f, -0.034065f, -0.013819f, -0.012495f, 0.056551f, -0.001524f, 0.012715f, 0.028309f, 0.002218f, 0.027208f, -0.030537f, -0.038615f, -0.025733f, -0.007707f, -0.006806f, 0.003780f, 0.017465f, -0.001628f, -0.032245f, -0.022785f, -0.001945f, -0.017811f, -0.036103f, 0.031182f, -0.005621f, -0.018648f, -0.000488f, 0.009469f, 0.009909f, 0.005171f, -0.016409f, 0.002455f, -0.033509f, -0.015388f, -0.049577f, - 0.022393f, 0.014740f, -0.006654f, -0.015668f, 0.017440f, -0.024753f, -0.007097f, 0.053139f, -0.006413f, 0.045026f, 0.019406f, 0.011993f, -0.012597f, -0.056811f, -0.024330f, -0.011011f, -0.031234f, -0.022934f, -0.015192f, 0.025262f, -0.012132f, 0.000430f, -0.023109f, 0.048147f, -0.017151f, 0.019631f, 0.015128f, -0.032610f, 0.036750f, 0.002331f, -0.014711f, 0.024136f, 0.015599f, 0.072486f, 0.006412f, 0.004643f, 0.028269f, -0.027068f, -0.017224f, -0.002279f, 0.009806f, 0.014959f, -0.004110f, 0.032873f, -0.013567f, 0.007887f, 0.031587f, 0.016135f, 0.014463f, 0.013962f, -0.015757f, 0.007660f, 0.003848f, -0.006010f, 0.008696f, -0.010775f, -0.021437f, -0.009731f, 0.006705f, -0.021760f, 0.037852f, 0.001453f, 0.008119f, -0.000666f, 0.027687f, 0.029610f, 0.000124f, -0.015075f, 0.003339f, -0.002131f, 0.035528f, 0.042881f, -0.022371f, -0.015049f, -0.008555f, 0.013744f, 0.034505f, -0.021824f, 0.014389f, 0.002946f, 0.011993f, -0.009324f, -0.011891f, 0.009831f, 0.025416f, 0.007797f, -0.016969f, 0.025673f, 0.069580f, -0.015863f, 0.018922f, -0.000178f, 0.012518f, 0.028900f, 0.015026f, 0.033436f, - 0.032669f, -0.001083f, 0.046193f, 0.072115f, 0.013429f, -0.018107f, 0.077316f, 0.007168f, 0.074380f, 0.000790f, 0.015572f, -0.040229f, -0.011187f, 0.070125f, 0.013890f, -0.028076f, 0.011839f, -0.020480f, 0.011233f, 0.016002f, -0.002996f, -0.032376f, -0.010974f, -0.049904f, 0.024405f, 0.021568f, -0.018157f, 0.023188f, 0.033095f, 0.009833f, -0.006131f, -0.027490f, 0.009182f, 0.053320f, -0.021729f, 0.033540f, 0.030448f, 0.008313f, 0.023333f, 0.023757f, 0.002780f, 0.028758f, 0.018306f, -0.043220f, -0.004977f, -0.014872f, 0.050013f, 0.036372f, -0.032129f, 0.025167f, -0.002349f, 0.030060f, 0.082089f, -0.002959f, -0.012241f, 0.012859f, 0.073892f, 0.034739f, -0.003204f, 0.014380f, 0.014338f, 0.047153f, 0.038092f, -0.019841f, 0.045439f, 0.026002f, 0.042138f, -0.023271f, 0.005363f, 0.014366f, 0.009651f, 0.031826f, 0.038617f, -0.017862f, -0.018678f, 0.036993f, 0.015833f, -0.002626f, -0.009704f, 0.008203f, 0.046533f, -0.076622f, 0.021812f, -0.020486f, -0.019667f, -0.016442f, -0.015695f, 0.011334f, 0.014862f, 0.015461f, -0.018528f, -0.022525f, -0.058018f, 0.002775f, -0.032112f, 0.053307f, - 0.007088f, -0.013824f, -0.007273f, 0.031902f, 0.009895f, 0.051781f, 0.021685f, -0.013642f, 0.002949f, 0.010729f, 0.024471f, 0.038743f, -0.042778f, -0.038165f, -0.006988f, 0.065226f, -0.019231f, 0.007887f, 0.019774f, 0.028202f, 0.035991f, 0.049262f, 0.044253f, 0.003078f, -0.009075f, 0.045809f, 0.004875f, -0.030573f, 0.017105f, -0.028515f, 0.021262f, 0.003911f, -0.023146f, 0.021321f, 0.089112f, 0.047578f, -0.029440f, -0.024793f, -0.001621f, -0.025779f, -0.022478f, -0.022411f, 0.016726f, -0.013569f, -0.018779f, 0.002730f, 0.025898f, 0.012443f, 0.009831f, 0.032322f, 0.011128f, -0.010614f, 0.038321f, 0.028194f, -0.024279f, 0.015227f, -0.027593f, -0.025999f, -0.024133f, -0.003082f, -0.061224f, -0.022044f, 0.046857f, 0.029139f, -0.011695f, -0.022187f, 0.021421f, 0.017595f, -0.028607f, -0.011297f, -0.064188f, -0.003595f, 0.056701f, 0.002333f, -0.038520f, 0.008160f, 0.003662f, -0.025391f, 0.038433f, 0.022850f, -0.012909f, 0.012098f, 0.018445f, 0.024291f, 0.014437f, 0.005594f, -0.014377f, 0.010548f, 0.014960f, 0.036707f, 0.054289f, -0.012678f, -0.033249f, -0.016850f, 0.012004f, 0.012616f, - 0.045131f, -0.014732f, -0.031642f, -0.024527f, -0.024853f, 0.053901f, 0.097717f, 0.036509f, 0.007034f, 0.106643f, 0.008600f, 0.045338f, 0.027153f, -0.006881f, -0.019543f, 0.020623f, -0.027243f, -0.017770f, 0.023832f, 0.003569f, -0.060455f, -0.063170f, -0.013567f, 0.029657f, -0.031202f, -0.040331f, -0.020504f, -0.029063f, -0.022858f, 0.024912f, -0.014741f, -0.045482f, 0.025486f, 0.005255f, -0.010179f, 0.015068f, -0.006576f, 0.028681f, 0.103217f, -0.055328f, 0.055229f, -0.062543f, -0.031934f, -0.014992f, -0.006144f, 0.050197f, 0.002271f, 0.054023f, 0.034998f, 0.031678f, 0.046080f, -0.052069f, 0.021078f, -0.054562f, -0.001505f, 0.073270f, 0.065098f, 0.028323f, 0.001679f, 0.013413f, 0.008841f, -0.019871f, 0.017422f, 0.021757f, -0.090626f, 0.006512f, 0.014010f, 0.028676f, -0.032863f, -0.050438f, 0.038236f, 0.018778f, 0.010113f, -0.021003f, 0.045198f, -0.005316f, 0.035218f, 0.029845f, -0.003003f, 0.005387f, -0.009685f, 0.036173f, -0.020502f, 0.011731f, 0.021517f, -0.000854f, 0.045277f, 0.027031f, -0.002251f, 0.024064f, 0.026441f, -0.000364f, -0.020123f, -0.067460f, -0.012497f, 0.008287f, - -0.040464f, 0.004884f, 0.032348f, -0.061253f, -0.027665f, 0.010466f, -0.026888f, -0.003439f, 0.032582f, 0.002752f, -0.023582f, -0.029518f, 0.012996f, 0.013861f, -0.063555f, -0.020376f, -0.006115f, 0.000687f, 0.038306f, 0.019525f, 0.002804f, 0.068764f, -0.010942f, -0.003230f, -0.000547f, -0.042022f, -0.016441f, -0.063662f, -0.055422f, 0.011261f, -0.028131f, -0.008093f, -0.042561f, -0.053030f, -0.056067f, -0.036330f, 0.041317f, 0.056424f, 0.002218f, -0.044490f, 0.004323f, 0.003250f, 0.001296f, 0.022194f, 0.035984f, 0.036508f, 0.001505f, -0.021696f, -0.056143f, -0.031300f, -0.049104f, -0.009400f, 0.000744f, 0.005479f, 0.005622f, 0.008302f, 0.014140f, 0.019077f, 0.033848f, -0.051116f, 0.023416f, 0.010564f, 0.011920f, 0.029569f, 0.050077f, 0.057338f, -0.031964f, 0.026370f, -0.044325f, -0.012427f, -0.040260f, -0.002443f, -0.015678f, 0.094447f, 0.032971f, 0.068474f, 0.002740f, -0.034385f, -0.015597f, 0.044410f, 0.046148f, -0.025746f, 0.085365f, -0.034406f, 0.004850f, 0.005251f, 0.014242f, 0.032923f, 0.094549f, -0.005323f, 0.022301f, 0.054341f, 0.010786f, -0.041040f, 0.025019f, 0.098346f, - -0.020072f, -0.023338f, -0.060625f, -0.005362f, 0.031557f, 0.019861f, -0.004478f, -0.049148f, -0.008183f, -0.010396f, 0.018200f, 0.086151f, -0.005150f, -0.001035f, 0.036118f, 0.006620f, -0.120359f, -0.038107f, 0.084270f, 0.027807f, -0.025664f, -0.048107f, -0.007434f, -0.031898f, 0.043072f, 0.022395f, 0.007468f, -0.025590f, -0.057414f, 0.011858f, -0.098347f, -0.012176f, 0.046935f, 0.064920f, -0.008306f, -0.055467f, -0.038457f, -0.114304f, 0.032735f, -0.019885f, 0.043939f, 0.033803f, -0.033233f, -0.023556f, -0.102106f, -0.075983f, 0.038865f, 0.108186f, 0.042367f, 0.051573f, -0.036704f, -0.063815f, -0.062312f, -0.025358f, 0.091082f, 0.124198f, 0.063809f, -0.143005f, -0.053317f, -0.109297f, -0.059481f, 0.137469f, 0.032721f, 0.031394f, -0.018636f, -0.130156f, -0.108098f, -0.106498f, -0.020477f, 0.012241f, 0.067755f, -0.023211f, 0.051533f, -0.101825f, 0.064618f, 0.028827f, 0.007733f, 0.134592f, 0.008181f, -0.007700f, -0.006848f, -0.171939f, -0.056208f, -0.002972f, 0.004358f, -0.055039f, 0.095084f, 0.038622f, 0.041719f, -0.125935f, 0.021065f, -0.174010f, -0.041005f, -0.004394f, 0.020697f, 0.005800f, - -0.112365f, 0.055015f, -0.033526f, -0.023775f, -0.023773f, -0.027410f, -0.029935f, -0.038014f, 0.068246f, -0.024795f, -0.064470f, 0.015142f, -0.020436f, 0.002980f, 0.031424f, -0.073906f, -0.027759f, -0.008982f, 0.026156f, -0.001823f, 0.075718f, -0.011587f, -0.047735f, 0.098704f, -0.090502f, 0.046169f, -0.084063f, -0.032179f, 0.037126f, -0.071512f, 0.002320f, 0.042411f, -0.027457f, -0.011390f, -0.007281f, 0.055879f, 0.091920f, 0.048456f, -0.033861f, -0.019289f, -0.016787f, -0.000498f, 0.028308f, -0.019213f, -0.020553f, 0.011298f, 0.008039f, -0.178121f, -0.008376f, -0.014072f, 0.023556f, 0.012999f, 0.000052f, -0.008520f, 0.047809f, -0.063270f, -0.014217f, -0.015711f, 0.037107f, -0.148913f, -0.018448f, 0.109916f, -0.029890f, -0.068387f, 0.003717f, 0.045925f, -0.025938f, -0.044791f, -0.128137f, -0.106002f, 0.086708f, 0.073159f, 0.004018f, 0.078330f, -0.092531f, -0.008915f, -0.175630f, -0.065075f, -0.033611f, 0.079703f, 0.073087f, 0.042715f, -0.072373f, -0.027865f, -0.005908f, -0.037146f, 0.013599f, 0.026138f, 0.036542f, 0.048270f, -0.042599f, 0.025182f, -0.077191f, -0.051478f, -0.014283f, -0.020178f, - -0.000391f, 0.045052f, -0.061216f, 0.046488f, -0.024960f, -0.037199f, -0.015112f, 0.000290f, -0.075966f, -0.006180f, -0.068853f, -0.029601f, -0.027766f, -0.068309f, 0.085923f, 0.035520f, 0.018398f, 0.016679f, -0.018274f, -0.094057f, -0.133492f, -0.082138f, -0.078818f, 0.047977f, 0.011823f, 0.052057f, 0.078813f, 0.060534f, -0.021764f, 0.010791f, -0.045752f, -0.040022f, -0.041471f, 0.027847f, -0.043576f, -0.006990f, -0.041073f, -0.048503f, -0.025698f, 0.046813f, -0.038908f, -0.016307f, 0.007950f, -0.010441f, -0.054286f, -0.069453f, -0.029298f, 0.058230f, -0.012372f, -0.170957f, -0.237421f, -0.223160f, -0.211979f, -0.256553f, -0.030744f, -0.059729f, 0.062885f, 0.092469f, 0.258019f, 0.172013f, 0.220790f, 0.300129f, 0.327013f, 0.229190f, 0.285767f, 0.170311f, 0.085867f, 0.004711f, -0.037514f, -0.053793f, -0.101479f, -0.097137f, -0.142635f, -0.050366f, -0.044520f, -0.131074f, -0.096915f, -0.089435f, -0.106987f, -0.178611f, -0.120247f, -0.086593f, -0.070268f, -0.134295f, -0.009908f, -0.030050f, -0.051621f, -0.130049f, -0.123547f, -0.095908f, -0.084804f, -0.054578f, -0.019252f, -0.078545f, 0.034300f, 0.060394f, - -0.065044f, 0.092724f, 0.117739f, 0.118950f, 0.199804f, 0.169134f, 0.125383f, 0.143898f, 0.136832f, 0.142347f, 0.204790f, 0.237388f, 0.224072f, 0.159632f, 0.238864f, 0.243313f, 0.242052f, 0.254077f, 0.275976f, 0.251194f, 0.250914f, 0.347732f, 0.153056f, 0.161496f, 0.142205f, 0.132108f, -0.082783f, -0.014351f, -0.064351f, -0.180844f, -0.115747f}, - {0.003399f, 0.002832f, 0.002207f, 0.005144f, -0.001655f, 0.000476f, -0.002302f, -0.007713f, -0.014466f, 0.002985f, -0.005530f, -0.007801f, -0.010465f, 0.002541f, 0.001967f, 0.007756f, 0.002143f, 0.009220f, -0.001335f, -0.013678f, 0.005117f, -0.007222f, -0.000902f, 0.002930f, -0.005804f, -0.008938f, 0.001197f, -0.005846f, -0.000891f, -0.002954f, 0.005329f, 0.005346f, 0.001708f, -0.012749f, -0.002759f, -0.004892f, 0.009835f, 0.002052f, 0.002953f, 0.011477f, 0.005472f, 0.005150f, -0.000183f, 0.003106f, 0.018065f, 0.008873f, -0.003095f, 0.000860f, -0.008696f, 0.006218f, -0.000514f, 0.000982f, -0.010708f, -0.001419f, -0.005685f, -0.007291f, -0.002966f, 0.008071f, 0.006209f, 0.000093f, 0.000035f, -0.006998f, -0.006573f, -0.002431f, -0.006700f, -0.013773f, 0.007038f, -0.005745f, -0.001248f, -0.012966f, -0.003457f, 0.007790f, 0.003923f, -0.000582f, -0.011896f, 0.014704f, -0.001289f, 0.005827f, 0.002874f, 0.006885f, -0.012742f, -0.006977f, 0.007964f, 0.003742f, -0.000038f, -0.007190f, 0.001316f, -0.019745f, -0.012708f, -0.000870f, -0.007615f, -0.008686f, 0.003385f, 0.015089f, 0.002470f, 0.011439f, - -0.002784f, 0.011298f, -0.006950f, -0.006342f, -0.000839f, -0.010598f, 0.001997f, 0.004944f, -0.003809f, -0.000473f, 0.002649f, 0.000263f, 0.004649f, -0.000786f, -0.011140f, 0.003744f, -0.006905f, -0.005430f, 0.003114f, -0.007084f, -0.010363f, 0.010075f, -0.010860f, 0.009574f, 0.009202f, 0.005788f, -0.000446f, -0.013017f, -0.007364f, 0.001184f, -0.002328f, 0.016174f, -0.009955f, 0.003741f, -0.001170f, 0.001916f, -0.012279f, -0.021018f, -0.003475f, -0.006487f, -0.006701f, -0.001885f, 0.009050f, -0.002148f, -0.009025f, 0.007978f, 0.003902f, -0.004385f, 0.007376f, -0.001538f, 0.002721f, -0.009711f, 0.000114f, -0.002423f, 0.007776f, 0.007752f, 0.000933f, 0.014138f, -0.000352f, 0.005983f, 0.007523f, -0.000308f, -0.007182f, 0.000514f, -0.010123f, -0.012963f, -0.005007f, -0.014745f, -0.015151f, -0.005112f, 0.009689f, -0.003756f, -0.003569f, -0.008042f, -0.002126f, -0.013885f, 0.006523f, -0.004067f, 0.003229f, 0.007942f, 0.002643f, -0.003124f, 0.005501f, 0.005086f, -0.006782f, 0.004370f, 0.000498f, 0.000978f, 0.004881f, -0.012162f, -0.005240f, 0.008170f, -0.005502f, -0.000656f, -0.003528f, 0.009094f, - -0.012074f, -0.001261f, -0.010119f, 0.006249f, -0.000666f, -0.000999f, 0.009011f, -0.004182f, -0.004415f, -0.003393f, -0.008528f, 0.000353f, -0.003882f, -0.000922f, 0.000527f, 0.005530f, 0.005836f, 0.001743f, -0.002629f, -0.010230f, -0.016397f, -0.005281f, -0.001160f, -0.004229f, 0.008774f, -0.003703f, -0.005090f, 0.006918f, -0.004596f, -0.007069f, 0.015413f, -0.003312f, 0.017169f, -0.010075f, -0.004463f, -0.007156f, 0.006722f, 0.001694f, -0.000196f, 0.012498f, 0.003448f, 0.004001f, -0.016835f, 0.003686f, -0.007536f, -0.008978f, -0.011682f, 0.000261f, 0.001051f, 0.015032f, -0.011293f, 0.005962f, -0.004364f, 0.018465f, -0.005856f, -0.005539f, 0.013482f, -0.004477f, 0.005097f, 0.002355f, -0.000166f, 0.002532f, -0.007900f, 0.001804f, 0.001121f, 0.004036f, 0.017673f, 0.006297f, 0.002331f, -0.006848f, 0.006695f, -0.012786f, -0.002866f, -0.002149f, 0.008019f, 0.006529f, 0.011067f, 0.007073f, -0.006819f, -0.010935f, -0.004043f, 0.008972f, -0.000145f, 0.004819f, -0.000869f, -0.000910f, 0.018205f, 0.004394f, -0.000284f, -0.020231f, -0.008100f, 0.000859f, 0.008275f, 0.011321f, 0.016664f, 0.008991f, - -0.002480f, 0.003101f, -0.002446f, -0.004926f, 0.012561f, -0.006646f, 0.013032f, 0.000908f, -0.008529f, 0.004179f, -0.003209f, 0.009553f, 0.002016f, 0.008674f, -0.002172f, -0.001506f, -0.003315f, -0.010249f, 0.000292f, 0.007322f, 0.007194f, 0.013672f, 0.006140f, -0.017950f, -0.015143f, -0.012996f, 0.000386f, -0.002168f, 0.000789f, -0.007040f, -0.004583f, -0.001036f, 0.005264f, 0.000010f, -0.011707f, 0.012533f, -0.001989f, -0.011435f, 0.002141f, 0.002864f, -0.000473f, -0.000956f, 0.004750f, 0.006757f, -0.004382f, 0.010256f, 0.000225f, 0.006110f, -0.014011f, 0.010001f, 0.003172f, 0.005891f, -0.009760f, -0.000751f, 0.006577f, 0.006224f, 0.014645f, -0.000217f, -0.021055f, -0.005286f, -0.010287f, 0.005259f, 0.002963f, -0.000412f, -0.005933f, 0.002066f, -0.008912f, -0.002478f, -0.015897f, -0.008519f, -0.000982f, 0.009240f, 0.009124f, -0.006240f, -0.006438f, -0.005313f, 0.009348f, -0.002526f, -0.001763f, -0.013905f, 0.008375f, -0.013603f, -0.005683f, 0.000535f, -0.003717f, -0.002671f, 0.014940f, -0.001263f, 0.003766f, -0.005781f, 0.007253f, -0.006525f, -0.000394f, 0.010186f, 0.018814f, 0.012931f, - 0.002442f, -0.015410f, -0.011710f, 0.003682f, -0.003007f, -0.010004f, -0.003598f, -0.012781f, -0.005782f, 0.024636f, 0.002445f, -0.003001f, -0.005103f, -0.000322f, -0.006270f, -0.004352f, 0.016426f, -0.017855f, -0.002539f, 0.001406f, -0.004229f, 0.004078f, 0.009728f, -0.005012f, -0.006266f, 0.002269f, -0.007683f, -0.007316f, -0.016810f, -0.006344f, 0.003867f, -0.014894f, -0.002979f, 0.006938f, 0.010447f, 0.003611f, -0.023439f, -0.007202f, 0.004034f, 0.011241f, -0.009556f, 0.019615f, -0.002909f, -0.010396f, -0.006239f, -0.004600f, -0.008481f, 0.010531f, -0.008721f, -0.002449f, -0.011327f, -0.008678f, -0.004573f, -0.008822f, 0.010784f, -0.004511f, -0.023607f, 0.008458f, 0.014728f, -0.000108f, 0.004910f, -0.028205f, 0.021142f, 0.000060f, -0.018816f, 0.001513f, -0.012663f, -0.021366f, 0.003918f, -0.015916f, 0.015498f, 0.003422f, -0.006919f, -0.012975f, -0.022236f, -0.010043f, -0.016309f, 0.004681f, 0.029307f, 0.004446f, -0.008555f, -0.001131f, -0.004869f, -0.005294f, -0.014293f, -0.009567f, -0.014698f, 0.003126f, -0.001809f, 0.002417f, -0.005644f, 0.001677f, -0.015504f, -0.001642f, 0.002598f, -0.010646f, - -0.004470f, 0.000644f, -0.006248f, 0.000831f, -0.005817f, 0.021584f, -0.027916f, -0.005437f, 0.001403f, 0.006695f, -0.003601f, -0.011742f, -0.017441f, -0.012397f, 0.008117f, -0.002968f, 0.009090f, -0.009036f, 0.024904f, 0.002782f, -0.005798f, -0.000840f, -0.016086f, -0.020120f, -0.010672f, 0.006818f, -0.017473f, -0.001604f, 0.018794f, -0.001145f, -0.010049f, -0.019200f, -0.032181f, 0.000680f, 0.015405f, -0.005113f, 0.017834f, -0.002356f, -0.006394f, -0.012339f, -0.010745f, 0.001001f, 0.007074f, -0.006843f, 0.026943f, 0.006990f, -0.007628f, 0.017816f, -0.007588f, -0.020221f, -0.005435f, -0.015044f, -0.007800f, -0.006412f, 0.021735f, -0.005212f, -0.007130f, -0.008893f, 0.013989f, 0.012727f, 0.011111f, 0.030742f, 0.032012f, 0.015053f, 0.019911f, -0.007208f, -0.009149f, 0.013491f, 0.019617f, -0.008217f, 0.008624f, 0.006350f, -0.017020f, -0.015798f, 0.009490f, -0.002042f, -0.000247f, -0.015746f, -0.020471f, -0.004524f, -0.016622f, 0.019078f, 0.034928f, 0.007585f, 0.013712f, 0.004387f, -0.004246f, 0.012878f, -0.024067f, -0.006020f, 0.004808f, 0.013709f, -0.008066f, -0.018936f, 0.027998f, 0.000332f, - -0.008898f, -0.006506f, 0.011318f, -0.003071f, 0.010037f, -0.006668f, 0.015888f, -0.000975f, -0.000759f, 0.020384f, 0.005857f, 0.009596f, 0.003204f, -0.002697f, 0.014524f, -0.022426f, -0.009579f, 0.008834f, 0.025278f, -0.015371f, -0.002325f, -0.002914f, -0.004145f, -0.010437f, -0.002862f, -0.005118f, -0.007695f, 0.013184f, -0.012080f, -0.004430f, 0.011957f, -0.008551f, 0.005432f, 0.009091f, -0.016623f, -0.017813f, 0.005670f, 0.014385f, -0.004277f, 0.013163f, -0.008795f, -0.003693f, 0.024786f, -0.027141f, 0.017106f, -0.007442f, 0.000704f, 0.001142f, 0.030517f, -0.006275f, 0.006452f, 0.009934f, 0.017065f, 0.010061f, 0.015026f, -0.002018f, -0.001771f, 0.005116f, 0.002899f, 0.002796f, -0.013902f, 0.022895f, -0.029429f, -0.006227f, -0.007297f, 0.017155f, -0.002760f, 0.020823f, -0.000303f, 0.002313f, -0.035072f, -0.009416f, 0.022449f, 0.037416f, 0.000351f, -0.017982f, -0.014772f, 0.015608f, 0.012964f, 0.009605f, 0.009482f, -0.015338f, -0.006429f, -0.008696f, 0.005621f, 0.001106f, -0.008839f, 0.006150f, 0.005850f, -0.004057f, -0.004045f, -0.021085f, -0.004733f, -0.007428f, 0.031808f, 0.003307f, - 0.006842f, 0.012143f, 0.001985f, -0.023751f, 0.002236f, -0.014436f, 0.012822f, 0.011505f, -0.023885f, -0.010126f, -0.009920f, 0.002743f, -0.002788f, 0.031781f, -0.005682f, -0.000368f, 0.019645f, -0.020394f, -0.015191f, -0.019224f, -0.020008f, -0.006049f, -0.002181f, 0.006747f, 0.034120f, -0.004845f, -0.022013f, 0.035296f, -0.000905f, 0.008712f, 0.023697f, 0.015766f, 0.022008f, -0.007795f, 0.017058f, -0.013661f, 0.023094f, 0.019868f, -0.007392f, 0.009534f, -0.011479f, -0.010916f, 0.007729f, 0.026465f, 0.011106f, 0.009395f, 0.002385f, -0.010772f, -0.017206f, -0.017657f, 0.000926f, 0.017561f, -0.012954f, -0.015435f, -0.018380f, -0.008220f, -0.034796f, -0.009674f, 0.004581f, -0.026252f, 0.009954f, -0.000259f, -0.012925f, -0.030569f, -0.020969f, -0.002035f, -0.039801f, 0.009756f, 0.006377f, -0.003004f, 0.008472f, 0.004642f, -0.005859f, -0.022001f, -0.014216f, -0.004568f, -0.014887f, 0.009234f, -0.015633f, 0.028825f, -0.023818f, -0.001608f, 0.010906f, -0.002569f, -0.045857f, 0.016586f, 0.021508f, 0.037469f, 0.000311f, -0.027282f, 0.008230f, 0.013573f, -0.028096f, -0.029445f, -0.018074f, -0.000499f, - 0.016373f, -0.000609f, -0.011098f, -0.000421f, -0.009620f, -0.006691f, -0.017830f, 0.030886f, 0.024627f, 0.009154f, -0.037073f, -0.011214f, 0.006725f, -0.002089f, -0.007711f, 0.047762f, 0.018202f, 0.015000f, 0.014789f, 0.022628f, 0.017767f, 0.004080f, 0.018594f, -0.001307f, -0.028807f, 0.015909f, -0.029627f, 0.009152f, -0.029292f, 0.025291f, -0.007060f, 0.030540f, -0.015842f, 0.007197f, -0.012595f, 0.010766f, 0.019036f, 0.046604f, 0.011003f, -0.060175f, -0.002050f, -0.008805f, 0.013992f, 0.025552f, -0.004071f, -0.012229f, 0.020455f, -0.004094f, -0.008089f, 0.024923f, 0.003030f, -0.002037f, 0.002782f, 0.009997f, 0.022133f, 0.015129f, -0.016021f, -0.014479f, -0.009390f, -0.019489f, 0.006071f, -0.003482f, 0.022239f, 0.012566f, -0.025743f, 0.050414f, -0.018996f, -0.033493f, -0.010587f, 0.013149f, -0.008192f, 0.024220f, 0.035118f, -0.014069f, 0.032225f, 0.020652f, 0.016266f, -0.005332f, -0.003736f, -0.006518f, 0.031280f, 0.005625f, 0.003894f, -0.018224f, 0.008037f, -0.009593f, -0.000648f, -0.030089f, 0.020438f, -0.027651f, 0.000270f, -0.019585f, 0.032627f, -0.016839f, 0.000863f, 0.031826f, - 0.024530f, 0.016186f, -0.001841f, -0.013088f, 0.015031f, -0.000858f, -0.002786f, -0.041425f, -0.012091f, -0.025244f, -0.020052f, -0.016241f, -0.007362f, 0.020713f, 0.013407f, 0.011765f, 0.000034f, 0.030633f, -0.016669f, 0.032379f, 0.029083f, 0.030410f, 0.054617f, -0.022168f, -0.016738f, 0.022979f, 0.004246f, -0.022474f, 0.032669f, -0.012235f, -0.016444f, 0.009198f, -0.004711f, -0.013178f, -0.010252f, 0.012244f, -0.020177f, 0.006450f, -0.013173f, 0.027720f, -0.014606f, -0.002732f, 0.006584f, 0.017883f, 0.026808f, -0.005568f, -0.028450f, -0.049142f, -0.041851f, -0.004134f, 0.006205f, -0.029345f, -0.000904f, 0.000124f, 0.041569f, -0.030774f, -0.034626f, 0.008225f, -0.015753f, -0.002414f, -0.025799f, 0.020281f, -0.026152f, -0.034822f, -0.021544f, 0.034987f, -0.027456f, -0.023355f, -0.006695f, 0.012680f, -0.013054f, -0.029414f, 0.006506f, -0.013470f, -0.001637f, 0.009592f, -0.037188f, -0.005339f, 0.017891f, 0.028821f, -0.006484f, 0.045444f, 0.019475f, -0.008289f, 0.000525f, 0.019076f, -0.010603f, -0.022490f, 0.002186f, 0.023166f, 0.001424f, 0.009535f, -0.000849f, -0.024438f, 0.006009f, -0.050058f, - 0.002951f, -0.000641f, -0.007234f, -0.030912f, -0.026278f, -0.000302f, -0.012547f, -0.022422f, -0.013721f, -0.018825f, 0.017065f, -0.034572f, -0.018420f, -0.012705f, 0.012823f, -0.022135f, 0.037456f, -0.009838f, -0.032090f, -0.007120f, -0.018919f, -0.055200f, -0.014700f, -0.001729f, -0.000608f, -0.038587f, -0.015791f, -0.014683f, 0.036861f, 0.033001f, 0.010670f, 0.066502f, -0.011069f, -0.022058f, -0.019360f, -0.008812f, -0.034111f, 0.048497f, -0.027319f, -0.009737f, -0.021827f, -0.011300f, -0.009494f, 0.006236f, -0.032151f, 0.001076f, 0.001905f, -0.004136f, 0.011133f, -0.035079f, -0.007380f, 0.024766f, -0.022480f, 0.001672f, -0.029526f, 0.030338f, 0.002033f, -0.053148f, -0.025771f, -0.009490f, 0.000859f, 0.014963f, -0.030338f, -0.018120f, 0.024428f, -0.003810f, 0.017629f, 0.014079f, 0.016302f, -0.019588f, 0.004607f, 0.023409f, 0.011265f, -0.044345f, 0.031051f, 0.020158f, -0.021066f, 0.067243f, 0.001672f, -0.049105f, 0.016474f, 0.014724f, 0.002084f, 0.035390f, -0.007763f, -0.061197f, 0.020487f, 0.007675f, 0.021719f, 0.020291f, -0.023769f, 0.042364f, 0.020453f, 0.012077f, -0.006143f, 0.064382f, - -0.000597f, -0.000897f, 0.049871f, -0.010114f, 0.025624f, 0.032858f, 0.017604f, 0.001946f, -0.003075f, 0.013203f, 0.013638f, -0.046373f, -0.045521f, 0.094647f, 0.030793f, -0.058415f, -0.029203f, -0.026552f, -0.053509f, -0.003554f, -0.028065f, 0.039703f, -0.021817f, 0.000661f, 0.049312f, 0.001530f, 0.008489f, -0.035562f, 0.045483f, 0.034131f, -0.000243f, -0.010383f, -0.003181f, -0.027509f, 0.002462f, 0.004087f, 0.006054f, -0.037974f, -0.005281f, -0.001682f, -0.011268f, -0.008017f, -0.026225f, 0.025719f, 0.050143f, 0.060430f, -0.004553f, -0.023651f, -0.009792f, -0.011794f, -0.008063f, -0.036118f, 0.012826f, 0.014979f, 0.013509f, -0.037644f, -0.050756f, 0.055876f, 0.021207f, 0.031586f, 0.040478f, 0.038281f, -0.015936f, -0.025057f, 0.036692f, -0.036278f, 0.019152f, -0.026989f, -0.020778f, -0.011684f, 0.043660f, -0.013693f, 0.009281f, 0.015441f, -0.007325f, -0.034402f, 0.072834f, -0.043238f, 0.005158f, 0.052597f, -0.046607f, -0.021427f, 0.006420f, 0.018642f, 0.054732f, 0.025299f, -0.014884f, 0.016158f, 0.063585f, 0.038621f, -0.004865f, -0.039432f, 0.005015f, 0.065146f, 0.052065f, 0.011551f, - -0.050161f, -0.018887f, -0.043201f, -0.002556f, 0.035224f, 0.043246f, -0.002338f, 0.016861f, 0.051329f, 0.054477f, 0.084250f, 0.084692f, -0.041215f, 0.018914f, -0.044580f, -0.007595f, -0.036018f, -0.012626f, 0.029662f, -0.005943f, 0.013357f, 0.011895f, -0.025450f, -0.018650f, 0.021941f, 0.024198f, 0.031429f, 0.022307f, -0.000479f, 0.022939f, 0.034559f, -0.017724f, 0.017721f, 0.020312f, 0.006417f, 0.019783f, 0.065505f, -0.048820f, -0.041797f, -0.009442f, 0.040505f, 0.038523f, -0.022711f, -0.000410f, 0.061931f, 0.049782f, -0.035001f, -0.023675f, 0.021166f, -0.043203f, 0.011705f, -0.021135f, -0.039137f, 0.011852f, -0.046088f, 0.046527f, 0.016715f, 0.051459f, -0.022958f, -0.031895f, -0.060494f, -0.014246f, 0.017762f, -0.053580f, -0.046583f, -0.028503f, 0.025663f, 0.063929f, -0.003126f, -0.018745f, 0.041502f, 0.009082f, -0.001305f, -0.059366f, 0.053841f, -0.025374f, -0.055974f, -0.018758f, 0.005018f, 0.066403f, 0.007499f, 0.047717f, 0.020355f, -0.055322f, -0.010864f, -0.048988f, 0.009263f, -0.048866f, -0.034100f, -0.020760f, 0.003887f, 0.010747f, -0.036777f, 0.037853f, -0.010616f, 0.023102f, - 0.026040f, 0.024525f, 0.047087f, 0.083253f, 0.050335f, -0.015639f, -0.039171f, -0.001257f, 0.089123f, 0.054599f, -0.028006f, 0.043629f, -0.014962f, 0.053242f, -0.024555f, 0.005224f, -0.017868f, -0.009767f, -0.001026f, -0.014911f, 0.133377f, -0.024976f, -0.034207f, -0.041904f, -0.056839f, -0.022662f, -0.043268f, -0.001989f, 0.052997f, -0.020152f, 0.017286f, -0.016781f, -0.023550f, 0.046395f, -0.010407f, 0.078143f, 0.016957f, 0.062763f, -0.073356f, 0.032132f, 0.136433f, 0.049888f, -0.071269f, 0.046458f, 0.044564f, 0.005534f, -0.002119f, 0.086969f, 0.038253f, 0.005832f, -0.007271f, -0.104051f, 0.042026f, 0.058298f, -0.049607f, -0.037158f, 0.072865f, 0.046148f, -0.066490f, -0.070073f, -0.002270f, -0.042738f, 0.012113f, 0.002084f, 0.011321f, -0.066098f, 0.011477f, -0.016291f, -0.035508f, 0.050664f, -0.008572f, -0.013414f, 0.013686f, 0.041795f, 0.036576f, 0.024051f, -0.057758f, -0.003122f, -0.030708f, -0.060675f, 0.015619f, 0.011668f, 0.029769f, -0.016224f, -0.031304f, 0.067831f, -0.056850f, 0.018527f, 0.019983f, 0.016015f, 0.010376f, -0.013370f, 0.037500f, -0.043996f, -0.073495f, -0.015962f, - -0.083454f, 0.064155f, 0.037000f, 0.062806f, -0.010661f, 0.008592f, -0.059620f, 0.051845f, 0.066236f, 0.020741f, -0.035429f, -0.085003f, -0.023338f, -0.110695f, -0.003158f, -0.024988f, -0.075943f, -0.066294f, 0.024034f, -0.001379f, 0.041253f, -0.040211f, 0.049482f, 0.035953f, -0.057285f, 0.005708f, -0.008541f, -0.060756f, 0.029968f, 0.023169f, -0.027207f, 0.012443f, -0.012773f, -0.092719f, -0.022484f, 0.025362f, -0.008362f, 0.012307f, -0.050002f, 0.070648f, -0.087788f, 0.008882f, -0.063458f, 0.047779f, 0.053882f, 0.018186f, 0.045684f, 0.006233f, -0.040546f, 0.076109f, -0.031533f, 0.009227f, 0.004590f, -0.041684f, 0.074408f, 0.006122f, 0.022059f, 0.016635f, 0.025929f, 0.012816f, 0.057045f, 0.063518f, 0.025241f, 0.073957f, -0.059254f, -0.004145f, 0.004489f, 0.094111f, -0.013226f, 0.075048f, 0.046464f, 0.102811f, 0.025223f, -0.022970f, -0.027352f, 0.040815f, -0.071009f, 0.072230f, -0.037742f, -0.025989f, -0.005939f, 0.014171f, 0.061328f, -0.013447f, -0.092324f, -0.028473f, 0.168321f, 0.010753f, -0.093227f, 0.023519f, -0.058306f, 0.018016f, 0.168145f, -0.046049f, -0.032532f, 0.106861f, - -0.106186f, 0.055841f, 0.042278f, 0.030265f, 0.122870f, 0.057051f, -0.058159f, 0.081069f, 0.040091f, 0.054542f, 0.103918f, 0.051810f, -0.049957f, 0.066563f, 0.019798f, 0.060092f, -0.017450f, -0.110916f, 0.112706f, 0.098213f, 0.060009f, 0.185306f, -0.017541f, -0.155071f, -0.080612f, -0.073022f, 0.163822f, 0.120995f, 0.028787f, -0.010086f, -0.030440f, -0.108199f, -0.052057f, -0.034753f, -0.062922f, 0.167545f, 0.134984f, 0.188950f, 0.002886f, -0.215004f, -0.336366f, -0.163108f, 0.186332f, 0.253064f, 0.256987f, 0.104614f, -0.214473f, -0.391776f, -0.241587f, -0.120659f, 0.180170f, 0.308813f, 0.173884f, 0.096058f, 0.024381f, -0.137878f, -0.187790f, -0.138595f, -0.011740f, 0.109453f, 0.218259f, 0.263692f, 0.045305f, 0.052662f, -0.209753f, -0.343844f, -0.185634f, 0.173577f, 0.287209f, 0.275408f, 0.169252f, -0.098743f, -0.337664f, -0.215681f, -0.283541f, 0.002915f, 0.189164f, 0.208470f, 0.101562f, -0.080238f, -0.178637f, -0.155505f, -0.124794f, 0.036084f, -0.025331f, -0.062194f, 0.067820f, 0.008144f, -0.102695f, 0.011115f, -0.028042f, -0.042361f, 0.028593f, -0.032891f, -0.014087f, -0.055838f, - 0.001415f, -0.022463f, -0.042010f, 0.014333f, -0.006220f, 0.011709f, 0.004898f, 0.031718f, -0.034518f, -0.012892f, 0.008566f, 0.001857f, 0.014023f, -0.015853f, 0.032266f, -0.025646f, 0.021798f, 0.009198f, -0.012339f, -0.026900f, -0.012151f, -0.048785f, 0.049719f, -0.006539f, 0.000474f, -0.010827f, -0.013366f, 0.000823f, -0.002620f, -0.000716f, 0.018648f, 0.009670f, -0.001588f, 0.026457f, -0.025673f, 0.006586f, -0.024344f, 0.023381f, 0.014960f, -0.021901f, 0.013014f, -0.026327f, -0.027245f, -0.024404f, -0.041581f, -0.007455f, 0.030807f, -0.031478f, -0.056020f, -0.041952f, 0.003656f, 0.030266f, 0.001351f, 0.021093f, -0.052222f, -0.019058f, -0.004486f, -0.010789f, -0.049533f, -0.020349f, 0.005741f, -0.002011f, -0.011939f, 0.039243f, 0.038264f, -0.044458f, -0.055573f, -0.090486f, -0.141439f, 0.003970f, 0.114783f, -0.045493f, -0.072120f, -0.077212f, -0.072803f, 0.013759f, 0.013926f, 0.132236f, -0.020262f, -0.020463f, -0.060320f, 0.005329f, 0.017175f, 0.040681f, -0.045523f, 0.021228f, -0.033323f, 0.050855f, 0.015846f, 0.015662f, 0.005492f, -0.034029f, -0.018479f, -0.022733f, -0.007764f, 0.017360f, - -0.020358f, -0.018888f, 0.036149f, -0.035317f, -0.021719f, 0.028791f, -0.029708f, -0.012388f, -0.025589f, -0.042400f, 0.013686f, 0.024860f, 0.004230f, 0.023279f, -0.038886f, -0.011620f, -0.001803f, 0.020234f, 0.026769f, 0.032040f, 0.001689f, -0.005571f, -0.058182f, -0.061106f, -0.022585f, -0.021232f, -0.013707f, 0.025010f, 0.036314f, 0.050330f, 0.004871f, -0.026090f, 0.051569f, -0.039712f, -0.017967f, 0.021304f, -0.017835f, 0.067036f, 0.001870f, -0.013382f, 0.009642f, -0.026817f, 0.017331f, 0.046834f, 0.035386f, -0.013884f, 0.007795f, 0.034174f, -0.092828f, -0.213763f, -0.163945f, -0.021031f, 0.067504f, 0.179983f, 0.151525f, 0.144636f, 0.147671f, 0.096720f, 0.039276f, -0.056445f, -0.098440f, -0.185514f, -0.137455f, -0.134947f, -0.134719f, -0.084548f, 0.077321f, 0.105272f, 0.155563f, 0.119088f, 0.099178f, 0.031313f, 0.065337f, -0.017464f, -0.020029f, -0.023486f, -0.039555f, -0.071541f, -0.059287f, -0.118988f, -0.044998f, -0.094911f, -0.046633f, -0.024025f, 0.028001f, 0.004038f, 0.041126f, 0.008058f, 0.058581f, 0.042819f, 0.071397f, 0.096021f, 0.119441f, 0.075957f, 0.050130f, 0.084659f, - 0.004613f, -0.031144f, -0.108752f, -0.126870f, -0.174107f, -0.155096f, -0.145246f, -0.056411f, -0.095701f, -0.050552f, 0.004574f, 0.024962f, 0.059961f, 0.115301f, 0.123264f, 0.137873f, 0.209018f, 0.117753f, 0.161084f, 0.111958f, 0.027748f, -0.014646f, -0.060920f, -0.162501f, -0.174135f, -0.164951f, -0.175443f, -0.118887f, -0.036739f, -0.002198f, 0.004347f} - }, - { - {0.004627f, -0.001247f, 0.003163f, 0.002375f, 0.004371f, -0.000807f, -0.003535f, 0.006836f, -0.000962f, -0.010817f, -0.003143f, -0.012016f, 0.008397f, 0.001616f, -0.001813f, 0.001689f, -0.002308f, 0.001607f, -0.010072f, 0.008299f, -0.001014f, 0.002932f, -0.009426f, -0.003428f, -0.003458f, -0.013063f, -0.005021f, -0.001107f, -0.000166f, -0.000846f, 0.004906f, -0.001861f, -0.004828f, -0.003774f, -0.010108f, -0.000930f, -0.010092f, -0.000593f, 0.002258f, 0.002530f, -0.002650f, 0.000242f, -0.001839f, -0.000342f, -0.003490f, -0.003296f, 0.002182f, -0.002113f, -0.002515f, 0.004000f, 0.013333f, 0.000640f, 0.005849f, 0.010699f, -0.000998f, -0.002204f, 0.010010f, -0.005495f, -0.000756f, -0.002224f, 0.000462f, 0.004186f, 0.001793f, -0.004491f, -0.005257f, 0.005688f, 0.003223f, 0.006391f, -0.003809f, -0.003521f, -0.005040f, -0.002158f, -0.001952f, -0.002389f, -0.003433f, 0.001183f, -0.017397f, 0.013370f, 0.000607f, 0.006107f, 0.006067f, 0.017318f, 0.008123f, -0.006486f, -0.008161f, -0.011379f, 0.008053f, -0.009966f, -0.007246f, 0.001543f, 0.002440f, 0.000994f, 0.010147f, -0.003412f, 0.009481f, -0.002525f, - 0.008505f, -0.008190f, 0.003700f, -0.003672f, -0.008712f, -0.000708f, -0.016570f, 0.002376f, 0.003995f, 0.007278f, -0.006093f, -0.000210f, 0.006380f, -0.004861f, 0.007171f, 0.006690f, -0.004164f, 0.004763f, -0.005560f, -0.002689f, -0.004137f, -0.006068f, -0.007616f, 0.006586f, 0.009857f, -0.007610f, 0.004311f, 0.007835f, 0.006361f, 0.009621f, 0.001102f, -0.001660f, 0.005563f, 0.004132f, -0.010520f, -0.000606f, 0.001019f, 0.000437f, 0.003086f, 0.006480f, 0.001275f, 0.002184f, -0.003863f, -0.002543f, 0.004442f, 0.006390f, 0.003353f, -0.003837f, -0.006632f, 0.006560f, -0.006135f, -0.002157f, 0.003145f, -0.001523f, -0.001218f, 0.002570f, -0.000674f, 0.006880f, -0.003621f, 0.005041f, 0.000502f, -0.000416f, -0.013957f, 0.002251f, 0.011936f, -0.007307f, 0.004951f, -0.014844f, -0.014988f, -0.004951f, -0.012178f, -0.010664f, -0.001564f, 0.002199f, 0.008438f, 0.001330f, -0.003993f, 0.001893f, 0.005767f, -0.007393f, 0.010292f, -0.006943f, -0.007433f, 0.008658f, -0.004244f, 0.009975f, 0.012769f, 0.001745f, -0.009074f, 0.006392f, 0.004276f, 0.002553f, -0.004563f, -0.003393f, 0.005436f, 0.004436f, - 0.001019f, -0.010365f, -0.002864f, -0.009575f, 0.008768f, -0.008643f, -0.005483f, 0.006344f, 0.000458f, 0.005507f, 0.001751f, 0.002111f, 0.009585f, 0.001588f, 0.010745f, -0.013585f, -0.006750f, -0.003130f, 0.006985f, 0.009543f, 0.011163f, 0.014842f, 0.001923f, -0.004168f, -0.001060f, -0.001914f, -0.000044f, -0.009520f, -0.003737f, -0.004039f, -0.000601f, 0.001698f, -0.007098f, -0.004316f, -0.000825f, -0.002867f, -0.004687f, 0.007900f, 0.015673f, -0.012013f, -0.004650f, -0.002548f, 0.009549f, 0.008601f, -0.009134f, -0.001033f, -0.016762f, -0.003832f, 0.019820f, 0.007335f, -0.008294f, 0.014177f, 0.004469f, 0.005320f, 0.001241f, -0.005042f, -0.016009f, 0.001907f, -0.007336f, -0.004710f, -0.003112f, -0.009828f, -0.003633f, -0.007654f, 0.004967f, -0.003578f, -0.004585f, 0.008798f, -0.017211f, 0.015422f, -0.005735f, 0.002019f, -0.005545f, 0.004677f, -0.000859f, -0.001760f, -0.000645f, 0.006455f, 0.000106f, 0.004011f, -0.006292f, 0.011515f, -0.009323f, 0.013444f, 0.002687f, -0.001534f, -0.007846f, -0.009134f, 0.018319f, 0.003019f, -0.017574f, 0.017594f, 0.016545f, -0.009255f, -0.003522f, 0.005104f, - -0.007036f, -0.001422f, -0.004391f, 0.004072f, 0.010531f, -0.006613f, 0.002316f, -0.004962f, -0.004542f, 0.001681f, 0.014325f, -0.013215f, 0.008005f, -0.013561f, -0.010358f, -0.009683f, -0.001503f, 0.000653f, 0.000650f, 0.003112f, 0.006045f, -0.004576f, 0.002234f, -0.010513f, 0.013091f, -0.015387f, 0.002207f, 0.019330f, -0.030653f, 0.024042f, 0.010510f, -0.006930f, 0.008605f, 0.000990f, 0.021084f, -0.000385f, -0.014622f, -0.009622f, 0.008112f, 0.009261f, 0.003721f, 0.002238f, 0.009848f, 0.004206f, 0.002913f, 0.013003f, 0.006161f, 0.004979f, 0.009671f, 0.007618f, 0.029399f, -0.005855f, 0.008968f, 0.001423f, -0.003011f, 0.009074f, 0.006054f, 0.004701f, 0.005102f, -0.002663f, -0.006139f, 0.002439f, 0.001563f, 0.002358f, 0.005609f, 0.010492f, -0.007084f, -0.007175f, 0.005568f, -0.000132f, -0.001925f, -0.003392f, 0.012937f, -0.005961f, 0.017992f, 0.009928f, 0.002348f, 0.006146f, 0.003018f, 0.006858f, 0.022456f, 0.019958f, 0.002991f, 0.003580f, 0.005675f, -0.001449f, 0.009480f, 0.001208f, 0.008732f, 0.005344f, 0.002182f, 0.003574f, -0.007138f, 0.012733f, 0.008260f, -0.001481f, - 0.004724f, -0.001347f, 0.009669f, 0.000735f, 0.011091f, -0.003491f, 0.009943f, -0.006522f, 0.020058f, -0.014341f, -0.004752f, -0.006645f, 0.020721f, 0.011656f, 0.008152f, 0.012997f, -0.010573f, -0.001995f, 0.019277f, 0.010721f, 0.009553f, 0.009183f, 0.005722f, 0.006359f, -0.001116f, 0.017827f, -0.000807f, -0.007957f, -0.004973f, 0.006312f, -0.005552f, 0.004138f, -0.015538f, 0.006241f, -0.002019f, 0.000358f, -0.016698f, 0.007723f, -0.002580f, 0.016782f, -0.001434f, 0.005249f, 0.005975f, -0.007201f, -0.000351f, 0.007514f, 0.002522f, 0.005067f, -0.002266f, 0.009102f, 0.014818f, 0.001405f, -0.007566f, 0.003234f, 0.011043f, 0.006301f, 0.003061f, -0.006715f, -0.011075f, 0.010467f, -0.012434f, -0.006596f, 0.010302f, -0.019706f, -0.002050f, 0.011383f, -0.006315f, 0.001971f, 0.002995f, -0.001588f, 0.000646f, 0.004435f, -0.005755f, 0.000401f, -0.010970f, -0.007208f, -0.009628f, -0.006702f, 0.004236f, -0.036338f, 0.005185f, -0.012173f, -0.007457f, 0.007037f, 0.005157f, 0.003241f, 0.000572f, -0.027021f, -0.003711f, 0.006984f, -0.014903f, -0.004759f, -0.020021f, -0.010827f, 0.003302f, -0.003401f, - -0.018490f, 0.017129f, 0.010099f, -0.006754f, 0.001048f, 0.013204f, -0.010210f, 0.002673f, -0.007267f, -0.011238f, -0.007743f, -0.019366f, -0.007663f, 0.012450f, 0.005570f, 0.016236f, -0.009722f, -0.029886f, -0.013226f, 0.005707f, -0.010029f, -0.019959f, -0.003986f, -0.004838f, 0.016210f, 0.007331f, -0.020656f, 0.011884f, -0.014836f, -0.002264f, -0.010913f, -0.011216f, -0.010037f, -0.023432f, -0.013716f, 0.000114f, 0.013449f, 0.019783f, 0.013017f, 0.002411f, 0.007893f, -0.011334f, -0.016856f, -0.011710f, 0.009837f, -0.006673f, 0.010724f, -0.005091f, -0.010678f, -0.002294f, 0.000775f, -0.006851f, -0.011660f, -0.001216f, 0.009143f, -0.030697f, -0.017860f, 0.023383f, 0.014059f, 0.000161f, 0.007419f, -0.008741f, 0.007403f, -0.012158f, -0.000251f, 0.022430f, -0.009685f, 0.021189f, 0.021736f, 0.026352f, 0.007210f, 0.010769f, 0.023120f, 0.017876f, 0.013666f, -0.017007f, 0.003061f, 0.005796f, 0.015833f, -0.002669f, -0.012010f, 0.016916f, 0.017777f, -0.004561f, 0.012169f, -0.005404f, -0.004940f, 0.010767f, 0.010122f, -0.001139f, 0.011859f, 0.001072f, -0.016711f, -0.014104f, 0.016416f, 0.022318f, - -0.000649f, -0.007692f, 0.005840f, 0.000670f, -0.009442f, -0.019952f, 0.011599f, -0.018906f, -0.007914f, 0.014265f, 0.004335f, 0.012565f, 0.001874f, 0.020177f, 0.004207f, 0.022134f, -0.024614f, 0.023324f, -0.003112f, -0.001239f, 0.008649f, 0.012089f, -0.008422f, -0.022002f, -0.004453f, 0.019249f, -0.002108f, -0.023641f, -0.011800f, -0.014782f, 0.005750f, 0.007615f, -0.018037f, 0.009328f, 0.013823f, 0.019911f, 0.008813f, 0.005383f, 0.006639f, 0.022093f, 0.002507f, 0.009039f, 0.026293f, 0.028432f, 0.008173f, 0.006928f, -0.021663f, -0.011019f, 0.023056f, -0.017713f, 0.023558f, 0.006516f, -0.000559f, -0.005028f, -0.008871f, -0.014105f, 0.002048f, 0.010415f, -0.026334f, -0.011900f, -0.011514f, 0.005535f, 0.004636f, 0.005475f, 0.000228f, 0.004214f, -0.001534f, 0.007620f, 0.005714f, -0.007004f, -0.012744f, -0.022473f, 0.003279f, -0.012201f, 0.019475f, 0.000677f, -0.011897f, -0.014173f, -0.005028f, 0.009241f, -0.018291f, 0.010857f, -0.006655f, 0.003506f, -0.001023f, -0.012598f, 0.011547f, 0.015586f, -0.011651f, 0.013095f, 0.002844f, -0.001130f, 0.036682f, -0.009592f, -0.025429f, 0.004497f, - 0.008127f, -0.006252f, 0.000932f, -0.010794f, 0.024402f, 0.014676f, -0.003760f, -0.005698f, 0.016868f, 0.017064f, -0.004986f, -0.015150f, -0.012163f, 0.035085f, -0.004741f, -0.005584f, -0.015768f, 0.008379f, -0.020507f, -0.006430f, -0.007067f, 0.000761f, 0.007456f, 0.018475f, 0.016003f, -0.027881f, -0.000286f, 0.002316f, -0.003648f, -0.008920f, -0.019530f, -0.002759f, 0.005353f, 0.010210f, 0.008063f, -0.017936f, -0.003920f, -0.022507f, 0.019350f, 0.000046f, -0.002975f, 0.008916f, -0.010621f, -0.002606f, -0.024054f, 0.003033f, -0.014769f, 0.008673f, -0.002812f, -0.004702f, -0.008826f, -0.016152f, -0.015932f, -0.002604f, -0.019426f, -0.030784f, -0.006645f, -0.014485f, -0.029882f, -0.003176f, -0.003597f, -0.016588f, 0.009169f, 0.014975f, -0.003141f, 0.006702f, -0.003203f, -0.003335f, 0.003042f, 0.003841f, -0.024598f, -0.007697f, 0.011452f, -0.012050f, 0.026495f, 0.004230f, 0.005987f, -0.018788f, -0.001703f, -0.008902f, -0.019983f, -0.002710f, 0.024146f, 0.011289f, 0.017785f, 0.010264f, -0.010646f, -0.021439f, -0.034960f, 0.021498f, 0.019722f, -0.002696f, 0.008258f, -0.023692f, -0.051137f, -0.013285f, - 0.039518f, 0.012759f, 0.015753f, -0.011134f, 0.015925f, 0.027312f, 0.001452f, -0.005410f, -0.047234f, -0.011590f, -0.002782f, 0.026015f, 0.006939f, 0.009984f, -0.035518f, -0.010156f, -0.013567f, -0.009081f, 0.021151f, -0.013035f, -0.004819f, 0.002977f, 0.005657f, -0.011839f, -0.005384f, 0.004792f, -0.010321f, 0.020521f, -0.024499f, 0.001745f, 0.015219f, -0.021384f, 0.016279f, 0.027745f, 0.032771f, 0.015109f, 0.015746f, 0.020965f, -0.015578f, -0.028450f, 0.010401f, 0.011010f, 0.017603f, 0.013506f, -0.031706f, -0.009837f, 0.015721f, 0.008439f, 0.005301f, 0.018496f, 0.003717f, 0.021696f, -0.009154f, -0.005956f, 0.012277f, 0.010954f, 0.002852f, -0.021114f, -0.011534f, -0.022611f, -0.025530f, -0.002535f, -0.027916f, 0.000327f, -0.016753f, 0.000022f, -0.015451f, -0.009511f, -0.035940f, 0.022824f, 0.004804f, -0.006188f, -0.007870f, -0.005049f, 0.002781f, 0.031133f, -0.015981f, -0.013732f, -0.012263f, 0.021290f, 0.027113f, -0.017887f, 0.043845f, 0.008833f, -0.019590f, 0.022257f, 0.005876f, -0.018984f, -0.022370f, -0.018020f, -0.002048f, -0.009877f, -0.007104f, -0.029417f, 0.010975f, 0.011657f, - 0.039420f, 0.005028f, -0.007507f, -0.018472f, -0.019626f, 0.004435f, -0.002927f, -0.025694f, 0.003803f, -0.009725f, 0.000518f, 0.019275f, -0.015850f, 0.025614f, -0.023437f, -0.019347f, -0.002008f, -0.029952f, -0.036295f, 0.005584f, -0.004805f, -0.041209f, 0.002109f, 0.000354f, -0.020274f, 0.010178f, -0.010232f, 0.005147f, -0.028489f, -0.045286f, 0.028996f, -0.027650f, 0.045330f, 0.025282f, -0.033683f, -0.004028f, -0.034120f, -0.008729f, -0.004976f, 0.014210f, -0.012757f, 0.021602f, 0.025934f, 0.025893f, -0.018959f, -0.014152f, 0.001728f, -0.021474f, -0.002637f, -0.006122f, -0.029925f, 0.019228f, 0.013129f, -0.013549f, 0.024343f, -0.030224f, -0.025954f, -0.019536f, 0.014415f, 0.017173f, 0.019000f, 0.031281f, -0.010151f, 0.056788f, -0.000637f, -0.028106f, 0.013777f, 0.028387f, 0.008731f, 0.015287f, -0.011039f, -0.030232f, 0.047893f, 0.026654f, 0.020411f, 0.009793f, -0.014806f, 0.015739f, 0.040222f, -0.013579f, 0.009761f, 0.000291f, 0.009656f, 0.007351f, 0.029198f, -0.007327f, 0.010990f, -0.009143f, 0.010050f, -0.002025f, 0.000205f, 0.017776f, 0.005405f, -0.033728f, -0.021202f, -0.031586f, - -0.020147f, -0.016502f, -0.006523f, -0.024074f, -0.011901f, -0.011557f, -0.019232f, -0.014308f, 0.011624f, -0.021765f, -0.005383f, -0.016784f, 0.043782f, 0.021559f, 0.038548f, -0.032108f, -0.000400f, -0.029283f, -0.003486f, 0.033959f, 0.021367f, 0.039941f, 0.021954f, 0.024987f, -0.022465f, 0.012386f, 0.015172f, 0.037247f, 0.041039f, 0.012038f, 0.037951f, -0.027637f, -0.008718f, 0.023115f, -0.069669f, 0.003948f, 0.032903f, 0.021506f, -0.021038f, 0.041988f, 0.025016f, -0.001770f, -0.010120f, -0.004896f, 0.025278f, 0.061879f, 0.033125f, 0.009195f, 0.002801f, 0.020565f, -0.004728f, 0.050021f, 0.028276f, 0.031373f, 0.001438f, -0.015472f, 0.010682f, 0.004076f, -0.026285f, -0.006183f, -0.001561f, -0.005925f, -0.007448f, 0.010389f, 0.005553f, -0.021382f, -0.010360f, -0.038023f, -0.003927f, -0.011656f, -0.049300f, -0.021905f, 0.001438f, 0.018633f, -0.025451f, 0.031871f, -0.008912f, -0.007456f, -0.004488f, -0.007671f, 0.022854f, -0.015506f, 0.015863f, -0.050565f, 0.015321f, 0.021921f, 0.016633f, 0.033459f, -0.033678f, 0.028520f, -0.030347f, -0.022718f, 0.024362f, -0.015193f, -0.005110f, 0.020178f, - -0.034617f, 0.029029f, 0.047219f, -0.002252f, -0.008024f, 0.059740f, -0.014419f, 0.009676f, 0.033197f, -0.076625f, -0.039452f, -0.001386f, 0.000177f, 0.004380f, 0.015015f, 0.026735f, 0.016703f, -0.040139f, -0.011114f, -0.058470f, -0.035198f, 0.043148f, 0.042811f, 0.004692f, -0.010185f, 0.036438f, -0.058765f, -0.031377f, -0.063602f, 0.027931f, 0.007586f, 0.002998f, 0.012168f, -0.028695f, 0.014463f, 0.020322f, 0.026158f, 0.044903f, 0.045678f, 0.038823f, -0.001803f, 0.009009f, 0.000233f, -0.016467f, -0.003767f, -0.013674f, -0.007563f, 0.053579f, -0.012785f, -0.048548f, -0.012754f, -0.009659f, 0.003959f, 0.077113f, -0.028172f, -0.027029f, 0.025465f, -0.041040f, 0.013839f, -0.045566f, 0.059637f, 0.017549f, -0.002285f, 0.016011f, -0.023870f, -0.028795f, 0.040555f, -0.049530f, -0.040811f, -0.035384f, 0.009201f, 0.015768f, 0.017913f, -0.032706f, 0.033391f, -0.009818f, 0.001589f, 0.053694f, -0.004694f, -0.008106f, 0.014378f, 0.043614f, -0.028932f, 0.071788f, 0.001151f, -0.080395f, -0.011612f, -0.001843f, -0.029235f, -0.006319f, -0.002543f, -0.005639f, -0.025811f, -0.015545f, 0.032583f, 0.014916f, - -0.011762f, -0.002754f, 0.082589f, 0.050905f, -0.057949f, -0.045884f, 0.067416f, 0.064517f, 0.042152f, 0.047736f, -0.069888f, -0.011547f, -0.015777f, 0.024572f, 0.012078f, -0.025265f, -0.050329f, -0.078653f, 0.029304f, 0.026994f, 0.011357f, 0.027954f, -0.006515f, 0.000808f, -0.014909f, 0.021634f, 0.033877f, 0.031047f, 0.011768f, 0.039626f, 0.016083f, 0.001275f, -0.009008f, -0.045556f, 0.002366f, -0.016067f, -0.012568f, 0.023045f, -0.049299f, 0.010339f, 0.007454f, -0.019883f, 0.027577f, 0.026045f, 0.015477f, -0.030914f, -0.028641f, -0.084011f, -0.017316f, 0.006665f, -0.023131f, 0.011266f, 0.024777f, 0.025295f, 0.056192f, 0.031267f, -0.016130f, -0.008716f, -0.027140f, 0.049439f, -0.011292f, 0.080706f, 0.067906f, 0.024919f, -0.031995f, 0.089326f, 0.044680f, -0.023485f, 0.013081f, 0.050818f, 0.102866f, -0.027212f, -0.061751f, -0.023045f, 0.013496f, -0.004085f, 0.034979f, 0.014598f, -0.017005f, 0.018894f, 0.001718f, -0.014401f, 0.032058f, 0.011478f, -0.009765f, -0.029872f, 0.026464f, -0.050925f, -0.045962f, -0.016935f, 0.038067f, -0.021029f, -0.025346f, -0.000382f, 0.043864f, 0.004238f, - 0.045385f, -0.014926f, 0.054539f, 0.005638f, 0.030218f, -0.019012f, -0.010212f, 0.015992f, -0.052048f, -0.015930f, 0.022886f, -0.010586f, -0.004762f, -0.044741f, -0.038596f, 0.018009f, -0.022343f, -0.019389f, 0.036869f, 0.044982f, -0.003657f, 0.028925f, -0.051582f, 0.001568f, -0.011379f, 0.069368f, -0.025686f, 0.021588f, 0.047668f, 0.039237f, 0.016362f, -0.031641f, 0.022946f, 0.010418f, 0.017366f, 0.019884f, -0.065250f, 0.126225f, 0.046823f, -0.015227f, 0.012562f, 0.010290f, 0.042173f, -0.014762f, 0.034362f, 0.070267f, 0.002893f, -0.099601f, 0.046969f, 0.025509f, -0.024479f, 0.035648f, 0.000162f, -0.029678f, -0.038719f, 0.083861f, -0.035788f, 0.086876f, -0.037806f, -0.015465f, 0.088989f, 0.010650f, 0.048309f, 0.024660f, -0.048968f, 0.003072f, 0.029022f, -0.008729f, -0.042669f, -0.008158f, -0.093030f, -0.026027f, -0.034705f, -0.020057f, 0.020212f, -0.002737f, 0.033173f, -0.016339f, 0.003476f, 0.032383f, -0.029049f, 0.003075f, 0.018301f, -0.001887f, -0.031921f, -0.000133f, -0.022033f, 0.064060f, -0.011544f, 0.037071f, 0.005683f, -0.000755f, 0.065397f, 0.047244f, -0.029408f, -0.034166f, - 0.016177f, 0.029599f, 0.035535f, 0.043644f, -0.001459f, 0.015255f, 0.040843f, -0.002483f, -0.017558f, 0.012786f, 0.000517f, -0.037090f, -0.001901f, 0.024044f, -0.037461f, -0.049081f, -0.005978f, -0.003164f, -0.006773f, -0.016568f, -0.019391f, -0.058321f, -0.002017f, 0.057120f, 0.015332f, 0.031894f, 0.016167f, -0.007379f, -0.078272f, -0.054597f, 0.011241f, 0.049688f, 0.011597f, 0.026266f, 0.093541f, 0.105335f, 0.080069f, -0.002467f, 0.033769f, -0.020956f, -0.077170f, -0.023309f, -0.053661f, 0.020725f, -0.030382f, 0.021172f, -0.010643f, -0.036832f, -0.008125f, 0.003821f, 0.024935f, -0.013277f, 0.015050f, -0.056151f, 0.061079f, -0.122102f, -0.007709f, -0.027602f, -0.020827f, 0.020744f, 0.077238f, 0.015403f, 0.031379f, -0.058315f, 0.019228f, 0.026613f, 0.055010f, -0.022117f, -0.034588f, -0.024221f, -0.007940f, 0.001700f, 0.004739f, 0.033543f, 0.027782f, -0.014173f, -0.084938f, -0.039768f, -0.067772f, 0.012019f, 0.137008f, -0.088993f, -0.029966f, -0.010872f, 0.082281f, -0.021956f, 0.038939f, -0.020893f, 0.043634f, -0.011236f, -0.014523f, -0.043774f, 0.031964f, -0.051299f, 0.058344f, 0.093711f, - 0.020062f, -0.013893f, -0.008227f, 0.078016f, 0.029104f, 0.001916f, 0.049347f, 0.015489f, 0.024400f, -0.012281f, 0.097559f, -0.134897f, 0.110139f, -0.081830f, 0.051228f, 0.098792f, -0.066261f, 0.158633f, 0.120792f, -0.042710f, -0.000900f, 0.097942f, 0.019423f, -0.003389f, 0.092230f, 0.088067f, -0.075383f, 0.073397f, 0.067206f, -0.063294f, -0.096068f, -0.141290f, 0.032559f, 0.212621f, 0.086802f, 0.000666f, 0.043324f, -0.202710f, -0.084435f, -0.006792f, 0.030329f, 0.153238f, 0.148798f, 0.026344f, -0.058350f, -0.111891f, -0.066732f, 0.008315f, 0.047436f, 0.073804f, 0.116650f, 0.071811f, -0.095654f, -0.222928f, -0.183450f, -0.016904f, 0.202012f, 0.222024f, 0.138473f, 0.043863f, -0.048061f, -0.088852f, -0.137491f, -0.076274f, -0.084159f, 0.164067f, 0.133906f, 0.087116f, 0.074269f, -0.113134f, -0.162477f, -0.184936f, -0.168844f, 0.066586f, 0.225166f, 0.281407f, 0.092794f, -0.082112f, -0.200340f, -0.235709f, -0.066511f, 0.041225f, 0.022944f, 0.152231f, 0.056810f, -0.053035f, -0.035117f, -0.111260f, -0.026756f, -0.127483f, 0.055191f, 0.159534f, 0.289500f, -0.013753f, -0.157040f, -0.334677f, - -0.014577f, -0.113397f, 0.001321f, -0.019527f, 0.095682f, 0.055817f, -0.008436f, 0.020132f, 0.010411f, -0.068443f, -0.007031f, -0.005859f, 0.007571f, 0.001760f, 0.005634f, -0.025349f, -0.009751f, -0.009669f, -0.006011f, -0.011869f, 0.041113f, -0.015243f, 0.017887f, -0.031356f, -0.002689f, 0.011974f, -0.001001f, -0.010103f, 0.070973f, 0.008913f, -0.039343f, -0.047275f, 0.010357f, 0.008756f, -0.026583f, 0.006487f, 0.036121f, 0.017224f, 0.034102f, -0.035354f, 0.011174f, -0.002563f, 0.008927f, -0.025469f, 0.005564f, 0.025051f, 0.038789f, 0.007836f, -0.008654f, 0.009206f, 0.005525f, -0.010790f, 0.027078f, -0.040162f, 0.010059f, -0.064238f, -0.017764f, 0.022975f, -0.019245f, -0.027689f, 0.035560f, -0.024556f, -0.055645f, -0.048121f, 0.041926f, -0.008728f, -0.005265f, 0.004872f, 0.022959f, 0.045401f, -0.029437f, -0.048074f, 0.005571f, -0.012249f, 0.038386f, -0.007597f, 0.025312f, -0.001881f, 0.004354f, -0.057409f, -0.063156f, -0.148402f, 0.041161f, 0.040639f, -0.004319f, -0.125350f, -0.081426f, -0.013218f, -0.021618f, 0.081374f, 0.054598f, 0.025419f, -0.056109f, -0.024106f, -0.015760f, 0.050389f, - 0.004502f, -0.016250f, -0.033367f, 0.019786f, 0.008310f, 0.024316f, -0.002516f, -0.012024f, -0.014245f, -0.031152f, -0.015838f, -0.019439f, 0.048555f, 0.024995f, 0.004896f, 0.005945f, -0.033508f, -0.003226f, 0.003134f, 0.043754f, -0.004040f, 0.019617f, -0.017513f, -0.013166f, 0.008585f, -0.020080f, 0.011770f, 0.003988f, 0.012793f, 0.042714f, -0.004217f, 0.037336f, -0.000751f, 0.023510f, -0.019339f, 0.000315f, -0.028237f, -0.037893f, -0.038301f, -0.034204f, 0.011287f, 0.004542f, 0.003505f, -0.049666f, 0.024951f, -0.043290f, -0.003454f, 0.001271f, -0.024710f, -0.029476f, -0.012802f, -0.000119f, -0.047360f, -0.034576f, 0.035571f, -0.015349f, 0.035125f, 0.005107f, 0.029999f, -0.074171f, -0.179238f, -0.172072f, -0.028583f, 0.047901f, 0.167078f, 0.143649f, 0.135631f, 0.145455f, 0.080021f, 0.016702f, -0.077825f, -0.078828f, -0.159478f, -0.125193f, -0.109376f, -0.071194f, -0.087744f, 0.113803f, 0.094022f, 0.123482f, 0.070838f, 0.100231f, -0.006130f, 0.023697f, -0.018979f, -0.044208f, -0.025396f, -0.052178f, -0.058495f, -0.059913f, -0.057440f, -0.069373f, -0.049976f, -0.042844f, -0.006327f, 0.006408f, - 0.090294f, 0.073348f, 0.039027f, 0.039785f, 0.059154f, 0.052363f, 0.025669f, 0.127058f, 0.015692f, -0.002379f, 0.023380f, -0.053101f, -0.151508f, -0.047181f, -0.121483f, -0.133491f, -0.137336f, -0.100814f, -0.086533f, 0.000178f, 0.071231f, 0.068754f, 0.089146f, 0.157833f, 0.117093f, 0.138168f, 0.140754f, 0.085445f, 0.097694f, 0.029486f, -0.030681f, -0.111870f, -0.138810f, -0.165241f, -0.099287f, -0.146024f, -0.110967f, -0.133844f, -0.053083f, 0.030150f, 0.053929f, 0.036036f}, - {-0.001762f, -0.001927f, -0.005387f, -0.011765f, 0.000513f, -0.000946f, -0.008111f, 0.001718f, -0.000350f, -0.002172f, -0.002009f, 0.008071f, 0.007900f, 0.002005f, 0.011372f, -0.008689f, 0.008113f, 0.005199f, -0.007543f, 0.006350f, -0.014101f, -0.003699f, -0.022708f, -0.003347f, 0.004833f, -0.004680f, 0.003424f, 0.003284f, 0.001225f, -0.000676f, -0.002191f, -0.004385f, -0.001145f, 0.003789f, 0.004209f, 0.000485f, 0.005467f, -0.002181f, -0.004344f, 0.004546f, 0.005509f, 0.003640f, -0.009044f, -0.008412f, -0.005900f, -0.005315f, -0.005729f, 0.006423f, 0.004356f, -0.004930f, -0.008493f, -0.014221f, -0.001555f, -0.005097f, 0.003557f, 0.006529f, 0.001865f, -0.003169f, 0.000241f, 0.006130f, -0.005291f, 0.006801f, 0.000284f, -0.000893f, -0.016942f, -0.003569f, -0.006901f, -0.001780f, 0.008577f, -0.001167f, -0.004455f, -0.000708f, 0.007405f, -0.005220f, 0.000468f, 0.000620f, -0.008335f, 0.013709f, 0.004714f, -0.002633f, 0.003401f, 0.004325f, 0.008188f, 0.013722f, -0.006747f, 0.004475f, -0.005761f, -0.004529f, 0.002684f, -0.000098f, 0.001061f, -0.009906f, -0.004842f, 0.003312f, 0.006802f, -0.001057f, - 0.005719f, -0.010620f, -0.009386f, 0.005711f, 0.003656f, 0.001464f, 0.004174f, -0.003726f, 0.007425f, 0.008255f, 0.008075f, 0.011551f, -0.006574f, -0.005518f, 0.000336f, 0.001331f, -0.011303f, -0.000867f, -0.001055f, 0.002923f, 0.001023f, -0.007181f, -0.001811f, 0.009397f, -0.005188f, 0.001712f, -0.005940f, 0.002647f, 0.002869f, 0.001753f, -0.008812f, 0.006886f, 0.000555f, 0.001434f, -0.001295f, -0.003018f, -0.003716f, -0.006095f, 0.012559f, -0.002365f, -0.002441f, -0.002959f, 0.005508f, 0.001209f, -0.012096f, 0.002965f, -0.005602f, -0.008259f, 0.004705f, -0.005074f, -0.013113f, 0.005248f, 0.001754f, 0.000757f, -0.012033f, -0.014097f, -0.005361f, 0.008524f, 0.001387f, 0.001128f, 0.007625f, -0.010318f, 0.002219f, -0.008535f, -0.010941f, 0.003716f, 0.011067f, -0.006145f, 0.005469f, -0.004512f, -0.001988f, 0.002597f, 0.000939f, -0.004821f, -0.015260f, -0.015097f, 0.000677f, -0.003479f, 0.000252f, 0.008598f, 0.001694f, 0.010427f, 0.013844f, -0.006625f, 0.012005f, 0.001925f, 0.012174f, 0.001223f, 0.014371f, 0.002264f, -0.007468f, -0.001669f, 0.001148f, 0.006866f, -0.001372f, -0.001611f, - 0.001737f, 0.005338f, -0.005479f, 0.000150f, -0.001465f, 0.004790f, 0.005538f, 0.000802f, -0.004990f, 0.000144f, -0.000660f, 0.003589f, 0.005766f, 0.010349f, -0.003152f, 0.006910f, -0.002614f, -0.007994f, -0.007389f, -0.004601f, 0.005048f, 0.005808f, -0.002696f, 0.009063f, 0.000437f, 0.003663f, 0.000561f, 0.010909f, 0.006916f, 0.008192f, 0.003099f, 0.005050f, 0.002690f, 0.004678f, 0.008236f, -0.001437f, -0.000860f, 0.011141f, 0.011491f, -0.012848f, -0.008864f, -0.007342f, -0.010548f, 0.002635f, 0.003697f, -0.008517f, 0.001246f, 0.015969f, -0.012618f, 0.007869f, 0.013552f, 0.013573f, -0.009315f, -0.002821f, 0.006284f, 0.000897f, 0.001469f, -0.006724f, 0.002752f, -0.021769f, 0.016051f, 0.025884f, 0.003915f, 0.008472f, -0.005027f, -0.000722f, 0.013181f, -0.007686f, -0.017650f, -0.003139f, -0.000561f, -0.000370f, -0.014452f, 0.000705f, 0.002532f, -0.016473f, -0.008484f, 0.007239f, 0.001646f, -0.006013f, -0.002428f, 0.005371f, -0.008849f, 0.016538f, 0.004245f, 0.000573f, -0.011772f, -0.001246f, 0.004733f, -0.003816f, -0.000727f, -0.003985f, -0.001340f, -0.001725f, -0.009783f, 0.000437f, - -0.009546f, 0.012498f, -0.013412f, -0.008145f, -0.004040f, -0.014587f, 0.008374f, -0.007844f, -0.021704f, -0.003726f, -0.010263f, 0.002476f, 0.007697f, -0.009491f, -0.000534f, -0.006558f, 0.004814f, 0.000413f, -0.008281f, 0.000331f, 0.003129f, -0.008905f, 0.006548f, 0.000276f, -0.001344f, 0.007718f, -0.006279f, -0.023242f, -0.004161f, -0.000888f, 0.010886f, 0.015323f, 0.013526f, 0.006874f, -0.004666f, -0.001003f, -0.014234f, -0.011837f, 0.004736f, 0.017363f, -0.004367f, 0.017780f, 0.011328f, -0.009951f, 0.006094f, -0.000986f, 0.006341f, -0.011181f, -0.007604f, 0.002610f, 0.008908f, -0.000414f, 0.005442f, 0.007794f, -0.013045f, -0.002001f, -0.005856f, -0.017525f, 0.011628f, 0.002507f, 0.004396f, 0.008608f, 0.014710f, 0.005759f, 0.000921f, 0.012064f, -0.002428f, -0.005056f, 0.011853f, -0.005386f, 0.019870f, 0.009840f, 0.007979f, 0.001186f, -0.005549f, -0.006104f, 0.009741f, 0.013923f, -0.009702f, 0.003186f, 0.012543f, -0.001396f, 0.004047f, 0.028527f, -0.008443f, -0.002471f, 0.005262f, -0.012996f, -0.000728f, 0.003382f, -0.006398f, 0.007647f, -0.004713f, 0.005023f, 0.013581f, -0.004075f, - -0.000251f, 0.002365f, -0.005235f, -0.033339f, -0.001907f, 0.000009f, -0.005940f, -0.009866f, -0.002561f, 0.018978f, -0.012042f, -0.018737f, 0.008234f, -0.007240f, 0.003746f, 0.004071f, 0.013270f, -0.007783f, -0.001507f, 0.002985f, 0.012458f, -0.004796f, -0.006424f, -0.001724f, -0.005352f, 0.008906f, 0.016531f, 0.008223f, 0.001288f, -0.000833f, -0.007650f, -0.000116f, 0.025449f, 0.004651f, -0.001771f, 0.028366f, -0.000404f, 0.021156f, -0.004988f, 0.000458f, 0.015482f, 0.004549f, 0.004899f, 0.005265f, 0.003905f, 0.007959f, 0.006000f, -0.013165f, 0.026249f, 0.015125f, 0.021879f, 0.013664f, 0.010594f, -0.013542f, 0.007676f, 0.006829f, 0.002806f, -0.008426f, 0.024805f, 0.013703f, 0.022679f, 0.003418f, -0.002093f, -0.005479f, 0.017444f, -0.007922f, -0.013452f, 0.017951f, 0.008313f, -0.010962f, -0.003169f, -0.000077f, -0.001720f, 0.000446f, 0.001291f, 0.000529f, -0.001548f, -0.008331f, -0.000903f, -0.022052f, -0.008467f, -0.024716f, -0.016746f, 0.002100f, -0.015833f, -0.012533f, 0.001934f, -0.002629f, 0.017181f, -0.010934f, 0.019014f, 0.022939f, 0.002829f, -0.019181f, -0.013078f, 0.020581f, - -0.009841f, -0.005477f, 0.012028f, -0.014876f, -0.025999f, 0.010726f, 0.023547f, -0.011751f, 0.006491f, -0.000399f, 0.010661f, -0.027723f, 0.006210f, -0.011159f, 0.007408f, 0.000517f, -0.010899f, 0.019267f, 0.009600f, 0.008073f, 0.026537f, 0.011882f, 0.006141f, 0.014441f, 0.003773f, 0.004548f, 0.008234f, 0.002249f, 0.002091f, 0.003744f, 0.004469f, 0.029051f, 0.017479f, -0.000375f, 0.025631f, 0.015064f, 0.019233f, 0.028009f, -0.013398f, -0.012554f, 0.026042f, -0.009149f, 0.000267f, -0.015299f, -0.004964f, 0.008266f, 0.014560f, -0.011894f, 0.000125f, 0.003044f, -0.001621f, 0.006074f, -0.010195f, -0.003115f, -0.011801f, 0.025728f, -0.006064f, 0.012561f, 0.008515f, -0.009010f, 0.002950f, 0.001360f, 0.002918f, -0.012948f, 0.016931f, 0.009884f, 0.022988f, 0.004523f, -0.003110f, -0.025857f, -0.013871f, -0.009639f, 0.006605f, -0.013386f, -0.022482f, -0.006164f, 0.005718f, 0.002594f, -0.025126f, 0.020452f, 0.001505f, -0.001424f, -0.021435f, -0.012186f, 0.004951f, 0.002737f, -0.023835f, -0.007277f, 0.008554f, 0.001064f, 0.002258f, 0.012267f, 0.014057f, 0.008403f, -0.003848f, 0.007261f, - 0.002021f, -0.008422f, -0.017784f, 0.030352f, -0.007842f, -0.014662f, 0.000018f, 0.007577f, 0.009481f, 0.022685f, 0.003386f, -0.000371f, -0.008876f, -0.000233f, 0.012138f, -0.001591f, 0.015224f, 0.030015f, 0.002018f, -0.006589f, 0.000346f, 0.025750f, 0.031726f, -0.016310f, 0.003808f, 0.004256f, 0.016697f, 0.008879f, 0.002181f, 0.004870f, -0.013919f, 0.007314f, 0.007144f, 0.007311f, -0.006986f, -0.001063f, 0.004623f, 0.007000f, -0.007481f, 0.012867f, -0.009679f, -0.018295f, 0.014278f, -0.000583f, -0.003765f, 0.006069f, 0.012277f, -0.031320f, 0.002899f, 0.025797f, -0.001974f, 0.045609f, 0.022201f, -0.012567f, -0.009103f, -0.003119f, -0.011996f, -0.004647f, 0.020777f, -0.006569f, -0.005660f, 0.021050f, 0.017050f, 0.006467f, 0.010138f, 0.019781f, 0.013185f, 0.015108f, -0.009383f, -0.005814f, 0.018535f, -0.002279f, 0.016852f, 0.001324f, -0.018312f, -0.011059f, 0.005999f, 0.016394f, -0.019999f, 0.002596f, -0.010302f, 0.007154f, -0.011892f, 0.019045f, 0.018446f, -0.015832f, -0.001028f, 0.006459f, 0.000247f, -0.021822f, -0.009634f, 0.005506f, 0.016255f, 0.026973f, 0.009459f, -0.017213f, - -0.003325f, -0.002906f, -0.001365f, 0.017727f, 0.003407f, 0.014629f, -0.018358f, 0.010556f, 0.002257f, -0.013255f, 0.019093f, 0.009820f, -0.001332f, -0.001776f, 0.004401f, 0.001755f, -0.013984f, 0.021594f, -0.024441f, -0.003093f, -0.007119f, 0.027008f, -0.010629f, 0.022400f, -0.005664f, 0.020955f, 0.028248f, -0.011173f, 0.009652f, -0.006054f, 0.016582f, -0.005041f, 0.014007f, 0.011536f, 0.011219f, -0.001501f, 0.011760f, -0.004566f, -0.012325f, -0.005709f, 0.016247f, -0.016873f, 0.003991f, 0.000668f, 0.014641f, 0.027881f, -0.023623f, 0.001564f, 0.025613f, 0.000071f, 0.023545f, 0.003684f, 0.011086f, -0.002454f, -0.000566f, 0.006603f, -0.033001f, 0.003950f, 0.000543f, -0.013127f, 0.010479f, 0.006133f, 0.026343f, 0.012880f, -0.001035f, 0.047781f, 0.013264f, -0.024544f, 0.008097f, 0.002758f, 0.018059f, -0.010433f, 0.004734f, 0.014237f, 0.002696f, 0.008721f, -0.000854f, -0.027099f, -0.026233f, 0.000127f, -0.007710f, 0.022403f, -0.036146f, 0.048630f, 0.001566f, 0.026859f, 0.032999f, 0.006952f, -0.006152f, -0.007076f, -0.012304f, -0.020872f, 0.001039f, 0.002874f, -0.045001f, -0.003065f, - 0.015437f, 0.002678f, -0.016880f, -0.041719f, 0.000023f, 0.004979f, -0.007325f, -0.001535f, -0.012333f, 0.006735f, -0.010285f, 0.021845f, 0.007581f, -0.012563f, -0.016125f, -0.027213f, 0.020554f, -0.008433f, 0.001331f, 0.027224f, 0.036820f, 0.022918f, -0.003534f, 0.002381f, -0.025432f, -0.010342f, -0.010309f, 0.007319f, -0.036055f, 0.009944f, 0.009664f, 0.002655f, -0.018621f, 0.018372f, 0.027415f, -0.003759f, -0.000650f, 0.003950f, -0.016175f, -0.016136f, 0.009566f, 0.007505f, 0.020688f, -0.022037f, 0.024721f, -0.012151f, 0.013558f, -0.020207f, -0.016910f, -0.007300f, -0.000678f, -0.001337f, 0.008974f, -0.003313f, -0.037202f, -0.026473f, -0.007875f, 0.002468f, -0.037205f, 0.002130f, 0.018498f, -0.008085f, -0.004113f, 0.007598f, 0.015983f, -0.030556f, 0.017261f, -0.003251f, -0.004102f, 0.002803f, 0.014693f, 0.020417f, -0.017415f, -0.004754f, -0.007677f, 0.040086f, 0.000562f, -0.008635f, 0.031076f, -0.007296f, -0.013244f, -0.003799f, -0.003334f, 0.038662f, 0.044239f, -0.006224f, 0.009057f, 0.010981f, -0.006165f, -0.021625f, 0.009979f, 0.041137f, 0.031214f, 0.026685f, -0.010325f, 0.011328f, - 0.021813f, -0.029379f, -0.022076f, 0.024865f, -0.013429f, -0.014607f, -0.001510f, 0.031175f, -0.005311f, 0.028651f, 0.001348f, 0.025651f, -0.016218f, 0.035407f, 0.010324f, -0.011634f, -0.018921f, 0.006036f, -0.026532f, 0.002572f, -0.031383f, -0.011049f, -0.011688f, 0.017005f, -0.018279f, 0.028369f, -0.036188f, -0.062064f, 0.037660f, 0.016473f, -0.008270f, -0.000423f, 0.041589f, 0.019074f, 0.002621f, -0.011970f, 0.008403f, -0.005861f, -0.000222f, -0.028520f, -0.028607f, 0.015309f, -0.010023f, 0.007844f, 0.051977f, -0.015120f, 0.010879f, -0.035852f, 0.040428f, -0.015354f, -0.017865f, -0.010736f, -0.004519f, 0.014530f, -0.031106f, 0.025298f, -0.045925f, -0.034092f, -0.033078f, 0.046489f, 0.001652f, 0.020056f, 0.011937f, -0.040635f, -0.035614f, 0.024198f, -0.063612f, 0.018827f, 0.018967f, -0.003853f, -0.025291f, -0.023042f, 0.039709f, -0.021054f, -0.002774f, -0.006367f, -0.020541f, 0.030504f, 0.009624f, 0.027656f, 0.015886f, 0.019219f, -0.005969f, 0.031066f, -0.002824f, -0.019600f, -0.023613f, -0.004954f, 0.013292f, -0.017379f, 0.023787f, 0.015838f, -0.017963f, -0.063870f, -0.005437f, -0.004654f, - -0.001622f, 0.047536f, 0.001033f, -0.035948f, -0.021803f, -0.021635f, 0.019199f, -0.013278f, -0.030598f, -0.033168f, -0.021263f, -0.015573f, -0.076072f, 0.002917f, 0.009417f, 0.026161f, -0.039787f, 0.014292f, -0.032907f, -0.025435f, -0.009314f, 0.033322f, 0.007968f, 0.031191f, 0.055491f, 0.018635f, 0.012498f, 0.038410f, -0.028715f, -0.001282f, -0.014010f, -0.012897f, 0.028285f, 0.029929f, 0.041493f, 0.024314f, 0.024584f, -0.017565f, -0.039578f, 0.014262f, 0.002116f, 0.001809f, 0.004300f, 0.008505f, 0.011737f, 0.021142f, 0.008820f, 0.018194f, 0.011413f, 0.021069f, 0.050774f, 0.004142f, -0.059607f, -0.020350f, 0.018721f, 0.003141f, -0.010071f, -0.037632f, -0.023490f, 0.010967f, 0.035544f, 0.015128f, -0.028083f, 0.019167f, 0.016285f, -0.032672f, -0.003522f, -0.040993f, 0.037338f, -0.015602f, -0.019472f, 0.034091f, -0.027271f, 0.011093f, 0.069106f, -0.005144f, 0.014129f, 0.022002f, 0.003384f, 0.012198f, -0.034952f, 0.012029f, 0.010491f, 0.008931f, 0.090182f, 0.061234f, -0.002539f, -0.027342f, -0.015902f, 0.030010f, 0.035692f, -0.031687f, -0.014936f, -0.043435f, 0.078299f, 0.023473f, - 0.013324f, -0.008599f, -0.002992f, -0.012998f, -0.003739f, 0.056695f, -0.008433f, 0.018285f, 0.059219f, 0.013202f, -0.008048f, -0.034504f, 0.008827f, 0.021322f, -0.069758f, 0.024177f, 0.021803f, 0.056265f, -0.010875f, -0.050386f, -0.007120f, 0.034995f, 0.019637f, -0.056441f, -0.074550f, 0.008778f, 0.050737f, 0.020690f, 0.031016f, -0.017392f, 0.023946f, 0.004225f, 0.000647f, -0.026873f, -0.009706f, -0.041967f, 0.062625f, 0.021226f, -0.050938f, -0.034681f, 0.022683f, 0.002641f, 0.012432f, -0.015010f, 0.031105f, 0.018472f, 0.021331f, 0.041220f, 0.036111f, 0.007680f, 0.035262f, -0.018519f, 0.020092f, 0.000062f, 0.024444f, 0.011528f, -0.006346f, -0.014828f, 0.016669f, -0.022106f, 0.057964f, -0.015658f, -0.011607f, 0.011995f, 0.028287f, 0.028531f, -0.020035f, 0.050250f, 0.049153f, 0.028844f, 0.011248f, 0.003921f, -0.016964f, -0.038296f, -0.065889f, -0.011042f, 0.021976f, -0.002054f, 0.027032f, 0.029928f, 0.031670f, 0.010391f, 0.016928f, 0.106322f, -0.054587f, -0.025024f, 0.008908f, 0.018299f, -0.004671f, -0.087634f, 0.017622f, -0.018310f, 0.010389f, 0.005850f, 0.035233f, -0.009863f, - -0.017006f, 0.005916f, 0.027864f, 0.027318f, -0.015635f, -0.021308f, 0.005887f, -0.020530f, -0.064409f, 0.065733f, -0.019622f, 0.018041f, 0.005874f, 0.054957f, 0.044067f, 0.027173f, -0.026774f, -0.005124f, 0.037773f, 0.019383f, 0.044500f, 0.118443f, -0.007653f, -0.047950f, -0.012535f, 0.034672f, -0.005619f, -0.056614f, 0.084554f, 0.042824f, -0.030262f, -0.047743f, -0.006105f, 0.009091f, -0.015186f, 0.032270f, 0.028190f, 0.031525f, 0.062851f, 0.008937f, 0.017331f, 0.009521f, -0.025183f, -0.060927f, 0.033949f, -0.042242f, -0.030974f, 0.044266f, 0.023459f, 0.023776f, 0.012701f, 0.006888f, -0.003907f, -0.061187f, -0.053128f, -0.002268f, 0.029262f, -0.042058f, 0.034535f, -0.021015f, -0.045460f, 0.009237f, 0.035194f, -0.011926f, 0.004061f, 0.032042f, 0.033152f, 0.032057f, -0.002042f, -0.031095f, 0.015717f, 0.082213f, 0.002704f, 0.025100f, 0.039976f, -0.017148f, -0.041635f, 0.033608f, 0.027706f, 0.000711f, -0.021978f, -0.032695f, -0.057523f, 0.010228f, 0.035682f, 0.048374f, -0.040961f, -0.044129f, 0.054244f, 0.024010f, -0.001759f, -0.005725f, -0.021964f, 0.009967f, -0.009978f, -0.023705f, - 0.025226f, 0.029744f, 0.021407f, 0.001550f, -0.003801f, -0.017377f, 0.004266f, 0.012102f, 0.008358f, -0.019673f, -0.066585f, 0.014348f, -0.014511f, -0.020943f, 0.004603f, -0.009506f, 0.006566f, -0.067964f, 0.032269f, 0.023600f, -0.047262f, 0.032815f, 0.046026f, 0.036501f, -0.008878f, 0.005149f, -0.004721f, 0.023264f, -0.004163f, -0.001465f, 0.121422f, -0.037447f, 0.011553f, -0.033694f, -0.016974f, 0.066083f, 0.026607f, 0.021344f, 0.045300f, -0.057106f, -0.043538f, 0.065989f, -0.040804f, 0.032431f, 0.045532f, 0.001526f, 0.014256f, 0.013458f, 0.080353f, -0.029592f, -0.026050f, -0.074836f, -0.011260f, -0.035391f, 0.028548f, -0.050933f, 0.080354f, 0.030502f, 0.044121f, -0.018299f, 0.050628f, -0.027716f, 0.027241f, 0.085347f, 0.042872f, 0.032937f, -0.046139f, 0.014317f, 0.047937f, -0.039088f, 0.067442f, 0.024861f, 0.036510f, 0.032860f, -0.019532f, 0.033993f, 0.029300f, 0.012960f, 0.066769f, 0.050941f, -0.002961f, -0.111808f, -0.012431f, 0.053343f, 0.051304f, 0.052881f, 0.013165f, 0.029900f, 0.003229f, 0.015471f, -0.003125f, -0.034088f, 0.072777f, -0.001082f, 0.069307f, 0.031759f, - 0.050085f, -0.068747f, 0.047484f, 0.024157f, 0.021484f, -0.017594f, 0.016558f, -0.012385f, 0.015713f, 0.069649f, 0.027552f, 0.090657f, 0.004320f, 0.020305f, 0.052453f, -0.010381f, 0.082448f, 0.041032f, 0.006658f, -0.054799f, -0.035125f, 0.030216f, 0.002434f, -0.009260f, 0.000499f, -0.009578f, 0.004860f, -0.040300f, 0.024685f, -0.042970f, -0.065983f, -0.024165f, -0.006770f, -0.021576f, -0.020470f, 0.053562f, -0.011864f, 0.049384f, -0.054206f, 0.055327f, -0.002993f, -0.017411f, -0.052090f, -0.050011f, -0.021074f, -0.022819f, 0.037282f, -0.065022f, -0.080046f, -0.087431f, -0.104554f, 0.043841f, 0.049090f, -0.005205f, -0.009695f, -0.002652f, -0.025847f, 0.003569f, 0.011532f, -0.024195f, 0.068936f, 0.063525f, 0.042036f, 0.044648f, -0.044590f, 0.026233f, 0.001387f, 0.031680f, -0.014504f, -0.020581f, -0.065199f, 0.054653f, -0.058923f, -0.073416f, -0.019213f, -0.017861f, 0.074951f, -0.044676f, 0.009612f, -0.042429f, -0.011429f, 0.069565f, 0.013140f, 0.019668f, 0.035796f, 0.063453f, 0.003930f, -0.011048f, -0.081846f, -0.018727f, -0.006533f, -0.006043f, 0.044936f, 0.020282f, 0.152519f, 0.003744f, - -0.004301f, -0.054455f, -0.003498f, 0.056501f, 0.056259f, -0.009086f, -0.025812f, -0.079350f, 0.019996f, 0.043483f, -0.022878f, -0.058971f, -0.021313f, 0.042926f, -0.011822f, 0.030675f, -0.105599f, -0.064288f, -0.082196f, -0.025851f, 0.043293f, 0.018570f, -0.007635f, -0.025647f, -0.010942f, 0.078835f, 0.007315f, 0.005182f, 0.136005f, 0.017702f, -0.092148f, -0.069858f, 0.096887f, 0.086265f, 0.010177f, -0.060032f, -0.075312f, -0.041464f, 0.021083f, 0.083951f, 0.075839f, 0.051957f, -0.023723f, 0.013897f, -0.023830f, 0.030453f, 0.065397f, 0.097347f, 0.106654f, -0.008200f, -0.048824f, -0.081125f, -0.122577f, 0.003096f, 0.073644f, 0.281563f, -0.030749f, -0.010449f, -0.128468f, -0.051115f, 0.016803f, 0.036247f, 0.170486f, 0.123233f, 0.079069f, -0.079678f, -0.041943f, -0.077814f, 0.000587f, 0.142214f, 0.133214f, 0.159714f, -0.037573f, -0.149470f, -0.106260f, -0.151043f, 0.044089f, 0.145785f, 0.130158f, 0.233931f, -0.104833f, -0.130350f, -0.112254f, -0.016247f, 0.106787f, 0.138935f, 0.194570f, 0.088877f, -0.035436f, -0.071231f, 0.021602f, -0.003354f, 0.057618f, 0.153737f, -0.030612f, 0.095562f, - -0.032247f, -0.087158f, -0.010738f, -0.066484f, 0.089711f, -0.019237f, 0.105623f, -0.095035f, 0.001805f, -0.040571f, -0.099684f, 0.075053f, -0.052230f, 0.069736f, -0.053559f, -0.018778f, -0.004731f, 0.037066f, 0.007751f, -0.036172f, -0.020699f, 0.000717f, 0.053950f, -0.047955f, 0.061787f, 0.047346f, -0.034617f, 0.010598f, -0.043454f, -0.039949f, 0.071559f, -0.068475f, -0.037230f, 0.051409f, 0.109486f, 0.002596f, 0.013483f, -0.006618f, -0.050230f, -0.009864f, 0.043326f, -0.011808f, -0.075328f, 0.014397f, -0.018346f, -0.008181f, 0.019516f, -0.062358f, 0.030812f, 0.004375f, 0.019962f, 0.056223f, -0.119724f, -0.081164f, -0.032219f, 0.002563f, 0.115806f, -0.058169f, 0.039059f, 0.099783f, -0.056457f, -0.024750f, -0.008465f, 0.057139f, 0.068736f, -0.034414f, 0.015232f, -0.008469f, 0.022499f, 0.122684f, -0.050859f, -0.123759f, 0.018965f, 0.066885f, 0.005386f, -0.062929f, 0.031543f, 0.024327f, 0.028057f, -0.020149f, -0.015232f, -0.141170f, -0.048980f, 0.051614f, 0.073156f, 0.059504f, -0.073391f, 0.015084f, -0.193921f, -0.128563f, -0.109844f, -0.022979f, 0.081895f, 0.050088f, -0.009977f, -0.047828f, - -0.056986f, 0.018321f, -0.037168f, -0.009803f, 0.061298f, 0.011661f, -0.002764f, -0.073288f, -0.037942f, -0.013529f, -0.037374f, 0.013550f, -0.011382f, 0.029252f, -0.015254f, -0.007266f, -0.017584f, -0.009106f, -0.014322f, -0.045034f, -0.034461f, -0.070889f, -0.050699f, 0.025436f, 0.056846f, 0.060816f, 0.032301f, 0.051990f, -0.014531f, 0.043060f, -0.017246f, -0.030579f, -0.085078f, -0.010655f, -0.049363f, 0.026400f, 0.007757f, 0.092917f, -0.086597f, 0.020882f, 0.051323f, -0.039346f, -0.048337f, -0.033526f, -0.025180f, -0.029426f, 0.002374f, 0.062430f, 0.041159f, -0.028724f, -0.007411f, 0.041021f, -0.064078f, -0.077099f, 0.022620f, -0.089354f, -0.063185f, -0.067424f, 0.057336f, -0.003188f, -0.146400f, -0.223790f, -0.277248f, -0.216835f, -0.329274f, -0.047263f, -0.110757f, 0.051449f, 0.087256f, 0.262190f, 0.160599f, 0.270919f, 0.277590f, 0.371841f, 0.277528f, 0.278966f, 0.211799f, 0.020683f, -0.041244f, -0.091972f, -0.048201f, -0.202785f, -0.130760f, -0.105339f, -0.103401f, -0.106965f, -0.101840f, -0.103609f, -0.107350f, -0.125035f, -0.084832f, -0.147463f, -0.112600f, -0.102629f, -0.034177f, -0.123184f, - -0.024647f, 0.057338f, -0.082081f, -0.039387f, 0.042676f, 0.029103f, -0.067069f, 0.076234f, 0.105255f, 0.119018f, 0.169131f, 0.160947f, 0.003583f, 0.096875f, 0.166117f, 0.216882f, 0.183656f, 0.338509f, 0.330937f, 0.279630f, 0.240516f, 0.285089f, 0.155764f, 0.224532f, 0.290178f, 0.207591f, 0.147975f, 0.222268f, 0.084655f, 0.063842f, 0.149252f, 0.122812f, 0.104368f, 0.000607f, 0.079515f, -0.070202f, -0.010326f, 0.003784f, -0.133341f, -0.321848f, -0.259567f, -0.181902f} - } -}; -const float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774]={ - { - {-0.005305f, -0.009306f, -0.004660f, 0.000333f, -0.002579f, 0.006024f, -0.007170f, -0.011927f, -0.010003f, 0.001646f, 0.000000f, -0.003347f, 0.004923f, -0.000346f, 0.005562f, -0.007755f, -0.006056f, 0.001699f, -0.000024f, -0.001048f, -0.006565f, 0.001634f, 0.001073f, 0.001625f, 0.006711f, 0.004247f, -0.000942f, 0.002216f, 0.002039f, 0.002592f, -0.001572f, 0.000352f, 0.008799f, 0.005499f, 0.002320f, -0.004538f, -0.002513f, -0.001091f, -0.002906f, -0.003718f, 0.007095f, 0.002758f, 0.002912f, -0.000917f, 0.001438f, 0.000680f, 0.001594f, 0.001458f, 0.000755f, 0.004720f, -0.005079f, -0.003379f, -0.000617f, -0.000728f, -0.006900f, -0.003016f, -0.008830f, -0.005266f, 0.001599f, 0.002809f, -0.002623f, -0.007413f, -0.002008f, 0.002161f, -0.000588f, 0.004980f, 0.000251f, -0.001006f, 0.014358f, -0.007133f, -0.005107f, -0.001288f, 0.002992f, 0.001899f, -0.008580f, 0.002506f, -0.000384f, 0.009348f, 0.005239f, -0.006985f, 0.010292f, -0.006208f, -0.001592f, -0.000268f, -0.002990f, -0.004227f, -0.007273f, 0.001414f, 0.012032f, 0.000768f, 0.002481f, 0.004517f, 0.001594f, -0.004558f, -0.000890f, -0.002887f, - -0.002081f, 0.006618f, 0.002331f, 0.000488f, -0.002010f, 0.000860f, 0.000102f, -0.003126f, -0.003996f, 0.006386f, 0.005656f, 0.000522f, -0.001058f, 0.007469f, -0.010634f, -0.004575f, 0.005100f, -0.005042f, 0.009901f, 0.000496f, 0.007110f, 0.000379f, 0.001184f, 0.003849f, -0.003391f, -0.002083f, 0.000286f, -0.000615f, -0.002547f, -0.002893f, 0.004619f, -0.000739f, -0.009742f, 0.009004f, -0.000900f, 0.001068f, -0.008145f, 0.003512f, -0.003345f, 0.002791f, 0.000734f, -0.000911f, -0.002741f, -0.000975f, -0.004465f, 0.004456f, -0.009138f, -0.001810f, 0.007623f, -0.006373f, 0.003222f, 0.009701f, 0.003836f, 0.000101f, -0.004582f, -0.000605f, 0.003482f, 0.020249f, 0.003864f, -0.002974f, 0.006315f, -0.003212f, -0.002466f, -0.003407f, -0.001256f, -0.007804f, 0.010881f, 0.006083f, 0.004719f, 0.004849f, 0.004820f, -0.005210f, -0.006736f, 0.008905f, -0.001946f, -0.007287f, -0.013457f, 0.001973f, -0.003996f, 0.003980f, 0.000062f, -0.001399f, -0.003048f, 0.003965f, -0.005034f, -0.002804f, 0.006592f, 0.012338f, 0.003219f, 0.005436f, 0.001009f, 0.006026f, -0.001417f, 0.006416f, 0.004151f, 0.000402f, - 0.003652f, -0.000043f, 0.000966f, -0.000049f, 0.009074f, 0.001539f, 0.002252f, -0.002523f, 0.001172f, -0.001113f, -0.001507f, 0.007012f, 0.008344f, -0.003592f, -0.003415f, 0.001194f, 0.007615f, -0.013416f, -0.000980f, -0.004089f, -0.009846f, -0.004507f, 0.000956f, -0.004735f, 0.003825f, 0.002697f, -0.000164f, -0.006589f, 0.002199f, -0.002097f, -0.006114f, 0.006163f, -0.010479f, -0.005726f, -0.011270f, -0.006460f, -0.002545f, -0.000132f, 0.005432f, 0.003435f, -0.013124f, -0.000439f, 0.001115f, 0.009554f, -0.003381f, -0.014648f, 0.011671f, -0.013798f, 0.000047f, -0.005602f, -0.005764f, -0.014669f, -0.010977f, -0.005257f, -0.004620f, 0.007113f, 0.001418f, -0.009385f, 0.000703f, -0.004655f, -0.000661f, 0.000426f, 0.003439f, 0.001646f, -0.005183f, 0.001524f, 0.000330f, 0.003301f, -0.003896f, -0.001352f, -0.001709f, -0.004200f, -0.008409f, 0.011168f, 0.004004f, 0.002247f, -0.002223f, 0.009661f, 0.006799f, -0.007813f, 0.001606f, 0.001715f, -0.002498f, -0.004159f, 0.000288f, -0.008054f, 0.001136f, -0.000769f, -0.008233f, 0.010010f, -0.000776f, 0.000279f, 0.010371f, -0.008835f, 0.007918f, 0.004331f, - -0.002361f, -0.006221f, 0.001034f, 0.000058f, -0.008854f, -0.005268f, -0.001160f, -0.001602f, -0.004772f, -0.009380f, -0.000936f, 0.003626f, 0.003404f, -0.001648f, 0.002822f, 0.002977f, -0.004078f, 0.000227f, -0.009090f, -0.022975f, -0.021564f, 0.008266f, 0.014403f, 0.008532f, -0.019453f, 0.013727f, -0.004684f, -0.001960f, 0.001245f, -0.009238f, -0.006861f, 0.016166f, -0.000249f, -0.000271f, 0.001207f, -0.000655f, 0.005294f, -0.008438f, 0.004876f, -0.004627f, 0.004344f, 0.007170f, -0.005085f, -0.001705f, 0.004215f, -0.001632f, 0.007671f, -0.002847f, 0.003228f, 0.000242f, -0.000989f, 0.000189f, -0.006882f, -0.009770f, 0.008519f, 0.000614f, -0.001946f, -0.000489f, -0.008977f, -0.011422f, -0.000612f, -0.000433f, 0.005298f, -0.010741f, -0.008940f, -0.002559f, -0.018269f, 0.006160f, -0.001840f, 0.002814f, -0.001840f, -0.005193f, 0.002228f, 0.021943f, 0.012161f, 0.005619f, -0.007459f, 0.007917f, -0.000753f, -0.012960f, -0.000676f, -0.013580f, 0.009651f, 0.000009f, 0.000371f, -0.008570f, -0.000891f, 0.005382f, 0.001539f, -0.000556f, -0.000329f, -0.001486f, 0.006251f, 0.002631f, -0.000691f, 0.001764f, - -0.033100f, -0.002240f, -0.008153f, -0.000885f, -0.005737f, -0.018366f, -0.001037f, -0.004742f, -0.007919f, -0.017196f, -0.002387f, 0.012675f, -0.008894f, 0.008433f, -0.001665f, 0.011778f, -0.004110f, 0.009623f, -0.003286f, -0.008976f, -0.002682f, 0.001273f, -0.004249f, -0.008042f, -0.006866f, -0.007901f, 0.000095f, -0.007186f, 0.002561f, 0.001158f, 0.000599f, 0.003806f, -0.005749f, -0.007246f, 0.010728f, -0.000719f, 0.003111f, 0.000380f, -0.008608f, -0.005139f, -0.006086f, 0.000553f, -0.004370f, 0.007820f, 0.007657f, 0.001521f, -0.010442f, -0.003174f, 0.019210f, 0.005014f, -0.008072f, -0.006227f, -0.004032f, -0.006892f, -0.003645f, 0.015209f, 0.009282f, -0.010682f, 0.006866f, 0.009037f, 0.013318f, -0.003189f, 0.005633f, -0.000637f, 0.000519f, -0.005137f, -0.010374f, -0.001836f, 0.008638f, 0.000939f, 0.016306f, 0.011117f, 0.001715f, 0.003681f, 0.014384f, -0.010370f, 0.042281f, 0.028049f, -0.008539f, -0.001817f, 0.000248f, -0.001401f, -0.004694f, 0.005601f, 0.014508f, 0.011864f, 0.006393f, -0.022410f, -0.009763f, 0.002489f, 0.001311f, 0.009009f, -0.016619f, 0.002959f, 0.022521f, 0.014744f, - -0.002631f, 0.004951f, -0.002048f, -0.008092f, -0.010485f, 0.000070f, -0.008973f, -0.005706f, 0.002448f, 0.006430f, -0.006662f, -0.012688f, -0.005944f, 0.001446f, 0.010873f, 0.014835f, -0.003208f, -0.017095f, -0.003756f, -0.006601f, -0.016768f, -0.001770f, -0.000850f, -0.008716f, 0.002334f, 0.003567f, 0.009190f, -0.014709f, 0.005174f, 0.006151f, 0.001047f, -0.014362f, -0.010461f, 0.003465f, -0.000015f, 0.002317f, -0.002107f, -0.002527f, -0.001175f, -0.008702f, 0.002866f, 0.002458f, -0.006023f, 0.007742f, 0.010004f, 0.013322f, 0.002531f, -0.000711f, 0.012899f, 0.020944f, 0.002252f, 0.000754f, 0.002173f, 0.010603f, -0.000839f, 0.004005f, 0.018296f, 0.021401f, 0.001222f, 0.003842f, 0.006098f, 0.009888f, -0.003478f, 0.005986f, -0.005092f, -0.004511f, -0.017609f, 0.006425f, 0.013092f, -0.012173f, 0.010062f, -0.005575f, -0.015420f, 0.015734f, 0.010437f, -0.003911f, 0.010521f, 0.018542f, 0.014179f, -0.011051f, -0.005134f, 0.008823f, 0.003568f, -0.003254f, 0.008003f, 0.005893f, 0.010532f, -0.000437f, -0.004071f, -0.009802f, -0.015118f, -0.001635f, -0.012529f, 0.000426f, -0.003920f, 0.005985f, - -0.009983f, -0.024661f, 0.005332f, -0.007052f, 0.010951f, 0.001466f, 0.000924f, -0.007785f, -0.013799f, -0.012920f, -0.001135f, -0.002546f, -0.010527f, 0.013279f, 0.018808f, 0.018276f, 0.007709f, -0.015589f, -0.001591f, 0.017156f, 0.001346f, -0.004788f, 0.008127f, -0.004063f, -0.005410f, -0.019407f, 0.008904f, 0.003392f, 0.024643f, 0.010058f, -0.018734f, 0.003957f, 0.005009f, -0.003848f, -0.002202f, 0.004148f, -0.006422f, -0.007485f, -0.010735f, -0.003746f, -0.002272f, -0.020338f, 0.001606f, 0.001711f, 0.010445f, -0.004431f, -0.007872f, 0.002799f, 0.001656f, 0.003908f, 0.000723f, 0.009920f, 0.004844f, 0.006602f, 0.001800f, -0.001611f, 0.006873f, 0.002910f, -0.018838f, -0.006799f, -0.027165f, 0.000416f, -0.004677f, 0.002342f, 0.005367f, -0.000503f, 0.013667f, 0.002471f, 0.019304f, 0.001405f, -0.022034f, -0.000481f, -0.008643f, -0.004676f, -0.000702f, -0.004357f, -0.000814f, -0.018811f, 0.004187f, -0.009616f, 0.021720f, -0.023336f, 0.012603f, -0.005960f, -0.018785f, -0.004724f, -0.013179f, -0.004094f, -0.003922f, -0.021497f, 0.005909f, 0.004857f, -0.003648f, -0.004760f, -0.001288f, 0.005654f, - -0.016121f, -0.001202f, 0.014940f, 0.001040f, 0.020756f, 0.032312f, 0.013852f, -0.033124f, -0.041756f, 0.017639f, 0.008483f, 0.028039f, -0.007037f, 0.011286f, 0.002398f, 0.009894f, 0.019795f, 0.017751f, -0.037638f, 0.028082f, 0.005472f, -0.005171f, -0.000251f, -0.017294f, -0.013719f, 0.014641f, -0.003595f, -0.004908f, 0.015713f, -0.011455f, -0.011812f, 0.000636f, 0.015699f, 0.006458f, -0.004394f, 0.000457f, -0.008153f, -0.001144f, 0.001799f, 0.008216f, 0.001003f, -0.019277f, -0.018556f, 0.004428f, -0.001848f, 0.004761f, -0.001150f, 0.007878f, 0.015774f, 0.028048f, 0.000433f, 0.017482f, -0.003335f, 0.005089f, 0.012901f, -0.011379f, 0.023799f, -0.003033f, -0.013055f, -0.019733f, -0.002663f, -0.016311f, -0.019691f, -0.005501f, 0.010937f, -0.006164f, -0.014873f, 0.008431f, 0.013040f, 0.018428f, 0.024932f, -0.018731f, 0.008921f, -0.004966f, -0.015778f, 0.006935f, -0.017722f, -0.003245f, -0.029992f, 0.013152f, -0.007372f, 0.005105f, -0.003405f, 0.005400f, -0.031849f, -0.033980f, -0.017996f, -0.007749f, 0.022193f, -0.018196f, 0.039710f, -0.012527f, 0.007706f, -0.003159f, -0.003854f, 0.030651f, - 0.003190f, 0.010752f, 0.009749f, 0.002054f, 0.019967f, 0.001259f, -0.024761f, 0.011263f, 0.005079f, 0.010698f, 0.000152f, -0.020629f, 0.028988f, 0.013648f, 0.012697f, -0.003919f, -0.007045f, 0.002257f, -0.000674f, -0.016629f, 0.011273f, 0.005630f, -0.007183f, 0.009812f, 0.018941f, -0.000833f, 0.007972f, 0.016215f, -0.017723f, 0.003276f, -0.005077f, 0.006560f, -0.034522f, 0.009655f, 0.018609f, -0.007328f, 0.005941f, 0.015997f, 0.010592f, -0.001026f, 0.007057f, -0.019262f, 0.005961f, -0.011876f, 0.002140f, 0.003896f, 0.004175f, -0.009511f, 0.035685f, -0.007498f, -0.005198f, -0.009362f, -0.028667f, -0.013511f, -0.017070f, -0.022645f, -0.002816f, 0.028163f, 0.033688f, -0.004595f, 0.011260f, 0.011540f, -0.025866f, -0.010232f, 0.023190f, 0.016642f, -0.009620f, -0.009210f, -0.025599f, -0.010404f, -0.009101f, -0.014758f, -0.014162f, 0.001938f, -0.025678f, 0.007759f, -0.003203f, -0.009721f, 0.006045f, 0.002079f, -0.013618f, -0.019414f, -0.021535f, -0.008044f, -0.021025f, -0.008156f, -0.008583f, 0.000897f, -0.019942f, 0.005050f, 0.008314f, 0.001572f, -0.022682f, 0.007742f, -0.028100f, 0.009425f, - 0.015766f, 0.001224f, 0.024506f, 0.001562f, -0.007122f, -0.003588f, 0.016637f, -0.005008f, 0.022870f, 0.009027f, -0.007583f, -0.006752f, 0.004285f, -0.010486f, -0.005903f, 0.001974f, 0.021799f, 0.000457f, 0.011740f, 0.007675f, 0.002401f, 0.016326f, -0.006243f, -0.012428f, 0.006650f, -0.008454f, -0.004001f, -0.025443f, 0.015788f, -0.007909f, -0.007299f, -0.003834f, -0.028987f, 0.037214f, 0.009947f, -0.002447f, 0.016235f, 0.006935f, 0.008326f, -0.013750f, -0.022822f, -0.024812f, -0.012165f, 0.003608f, -0.026372f, 0.012483f, 0.020433f, -0.027967f, -0.010532f, 0.013897f, -0.013736f, 0.010338f, 0.033491f, 0.004420f, -0.007684f, -0.005791f, 0.022965f, 0.052419f, 0.057912f, 0.015739f, 0.036483f, -0.025375f, -0.022838f, -0.006996f, -0.002140f, 0.000702f, 0.009419f, 0.016700f, 0.033905f, 0.009311f, 0.031499f, 0.001999f, 0.010575f, 0.003147f, -0.006793f, 0.012382f, 0.001155f, 0.004144f, 0.003847f, -0.016610f, -0.000363f, -0.009519f, -0.015029f, -0.011638f, 0.001817f, 0.000343f, -0.020417f, -0.010363f, 0.029269f, 0.018651f, 0.015982f, 0.022153f, -0.012940f, -0.001143f, -0.038658f, 0.000578f, - 0.036185f, -0.008038f, -0.005250f, 0.002865f, -0.002062f, 0.025768f, -0.000485f, -0.005797f, 0.022541f, -0.026174f, -0.038630f, -0.017543f, 0.005330f, -0.022977f, 0.017788f, 0.021153f, -0.029981f, -0.013332f, 0.002085f, -0.001912f, -0.043718f, -0.030371f, 0.016532f, 0.004927f, -0.001417f, 0.013245f, -0.017805f, -0.013714f, -0.025930f, 0.005066f, 0.011463f, 0.000513f, 0.004679f, -0.020866f, -0.027754f, 0.022831f, -0.037235f, -0.053212f, -0.037023f, 0.025429f, -0.004714f, 0.046829f, -0.010848f, 0.038428f, -0.030741f, 0.000234f, 0.014830f, -0.003832f, 0.002462f, 0.003883f, -0.001670f, -0.024348f, 0.009085f, 0.008175f, 0.011150f, 0.011058f, -0.006452f, 0.018703f, -0.016821f, -0.013761f, -0.009244f, 0.026593f, -0.014218f, -0.005819f, 0.003333f, -0.001312f, -0.013283f, 0.011437f, -0.014903f, -0.019597f, -0.034569f, 0.002480f, 0.007488f, -0.024892f, -0.010248f, 0.010844f, -0.003843f, 0.005426f, 0.003005f, 0.027260f, 0.003068f, 0.020313f, 0.010576f, 0.000102f, 0.018128f, 0.003030f, 0.007123f, -0.032638f, 0.034093f, 0.010784f, 0.027067f, -0.016427f, 0.008284f, -0.017898f, 0.028189f, 0.019398f, - 0.034147f, 0.004388f, -0.006748f, -0.024384f, 0.000422f, 0.003452f, -0.018067f, 0.027925f, 0.006814f, 0.003932f, 0.033154f, 0.006573f, -0.006616f, -0.012257f, 0.001748f, 0.018863f, 0.024550f, -0.006319f, 0.023158f, 0.024551f, -0.057355f, -0.002179f, 0.029476f, -0.018519f, -0.006535f, 0.022443f, -0.023891f, -0.047650f, 0.009517f, 0.008859f, 0.007458f, -0.005570f, -0.028499f, 0.007990f, 0.008205f, 0.003004f, 0.015996f, -0.050219f, 0.023675f, -0.010897f, 0.012479f, -0.028089f, 0.024034f, -0.035753f, -0.023165f, 0.015503f, -0.009220f, -0.003032f, -0.027531f, 0.023358f, 0.029548f, 0.001332f, 0.003850f, -0.011849f, 0.044162f, 0.012354f, 0.012598f, -0.006244f, -0.036822f, -0.006350f, 0.021649f, -0.001954f, 0.032033f, 0.002187f, -0.010276f, 0.009528f, -0.001111f, 0.021631f, -0.036097f, -0.002270f, -0.027354f, 0.033214f, -0.010231f, 0.012804f, 0.000473f, 0.001471f, -0.032331f, -0.009153f, 0.031125f, 0.012300f, 0.004211f, -0.005960f, 0.002512f, 0.006905f, -0.041527f, -0.041501f, 0.049479f, -0.017726f, -0.049876f, 0.024681f, 0.026492f, -0.037884f, -0.052301f, -0.034005f, -0.033767f, 0.024630f, - -0.033540f, -0.015133f, -0.034932f, -0.000682f, 0.004499f, -0.041556f, 0.004859f, -0.019080f, 0.058952f, 0.005648f, -0.057086f, -0.010174f, 0.024577f, 0.018792f, 0.010958f, 0.030214f, 0.025831f, -0.037126f, -0.012089f, -0.012772f, 0.035281f, -0.010474f, 0.041561f, 0.002573f, -0.026922f, -0.017328f, -0.040614f, -0.041839f, 0.000910f, 0.007893f, -0.008963f, -0.020208f, -0.011397f, 0.005761f, 0.005493f, 0.018070f, -0.023276f, 0.013871f, -0.027035f, -0.027288f, 0.004537f, -0.003573f, -0.009282f, -0.028541f, -0.030955f, -0.011451f, -0.010259f, 0.045576f, 0.003006f, 0.017256f, 0.023169f, 0.002187f, 0.052992f, 0.024675f, -0.018377f, 0.005696f, 0.027322f, -0.007879f, 0.034900f, -0.006300f, 0.004576f, 0.005279f, -0.046966f, -0.045787f, 0.008098f, 0.036697f, 0.002165f, -0.007986f, -0.050967f, 0.005848f, 0.021304f, 0.013585f, -0.013430f, -0.012932f, -0.002462f, -0.023843f, -0.026628f, 0.053431f, -0.018304f, -0.016230f, -0.005223f, -0.011391f, -0.037161f, 0.003391f, 0.021430f, -0.056746f, -0.003546f, 0.018122f, 0.016442f, -0.017530f, 0.010943f, -0.031256f, 0.000087f, -0.005979f, 0.008113f, -0.027631f, - 0.016432f, -0.049003f, 0.005961f, 0.004354f, 0.026842f, 0.030628f, 0.011201f, -0.016344f, 0.019031f, -0.003225f, 0.021549f, -0.023111f, 0.001557f, 0.034001f, 0.021775f, -0.011128f, 0.002382f, 0.004180f, -0.009469f, 0.018431f, -0.008477f, -0.014295f, -0.022663f, 0.017974f, -0.038794f, 0.027707f, 0.002802f, -0.034634f, 0.033637f, 0.039101f, 0.029973f, 0.016270f, -0.019950f, 0.046882f, 0.002120f, 0.023088f, -0.028943f, -0.017214f, -0.027948f, 0.013393f, 0.006439f, 0.021291f, -0.038162f, 0.010153f, 0.022189f, -0.059375f, -0.001117f, -0.013409f, 0.038078f, 0.037046f, 0.016872f, 0.006225f, 0.023123f, -0.010412f, -0.006943f, 0.006219f, 0.043586f, 0.010191f, 0.021716f, -0.063159f, 0.028819f, -0.035097f, 0.047479f, -0.004268f, 0.017954f, 0.037095f, -0.040371f, 0.070898f, 0.049561f, 0.038560f, -0.018307f, 0.010727f, 0.047206f, -0.011674f, -0.016642f, -0.010848f, -0.003730f, -0.036083f, 0.008410f, -0.019047f, -0.045546f, 0.043162f, 0.012796f, 0.012075f, 0.003927f, 0.010206f, 0.015075f, 0.045328f, 0.007893f, -0.027889f, -0.004056f, -0.028978f, 0.004044f, 0.004388f, -0.053115f, -0.002036f, - 0.026041f, 0.002157f, -0.005654f, -0.015562f, 0.052463f, 0.011313f, 0.021052f, 0.012060f, -0.031726f, -0.021008f, -0.018488f, 0.033902f, 0.017487f, -0.006794f, 0.017908f, -0.003045f, -0.039956f, 0.036012f, 0.001406f, 0.041281f, 0.001397f, 0.004224f, -0.002577f, -0.054848f, 0.003815f, 0.001479f, 0.002088f, 0.034177f, -0.017868f, 0.053838f, -0.086469f, -0.014130f, 0.055111f, -0.023959f, 0.013164f, -0.026366f, -0.052099f, 0.030453f, 0.013289f, -0.068058f, -0.077215f, -0.009102f, -0.035330f, 0.002804f, 0.024104f, -0.033914f, 0.010758f, -0.050678f, 0.022454f, -0.029079f, -0.130662f, -0.011078f, 0.081825f, -0.037392f, -0.013731f, 0.078160f, -0.017877f, 0.001493f, 0.097990f, -0.026177f, 0.022385f, 0.005986f, -0.013303f, 0.074889f, -0.062102f, -0.011425f, -0.001036f, -0.014490f, -0.012062f, -0.016424f, -0.001063f, 0.021748f, -0.013906f, -0.046426f, 0.000793f, -0.003115f, 0.012805f, 0.011413f, 0.002933f, 0.030779f, -0.001332f, 0.011674f, -0.009668f, -0.046925f, 0.029261f, -0.010049f, -0.043843f, -0.003414f, 0.024666f, 0.071578f, 0.038346f, 0.059047f, 0.000671f, 0.009999f, 0.030040f, 0.001019f, - -0.004737f, 0.053759f, -0.004296f, -0.030712f, 0.069491f, 0.004623f, 0.011078f, -0.007943f, -0.011580f, 0.031062f, -0.001788f, -0.034108f, -0.028504f, -0.017879f, -0.007395f, 0.045815f, -0.043724f, -0.017728f, 0.000876f, 0.047975f, 0.033181f, -0.070921f, -0.039192f, 0.060009f, -0.013449f, -0.052331f, -0.003459f, 0.004306f, 0.017167f, 0.063352f, 0.050613f, -0.029752f, 0.007031f, -0.004257f, -0.002375f, 0.002683f, -0.037474f, 0.055469f, -0.018295f, -0.030940f, 0.009413f, -0.021261f, 0.026921f, 0.005929f, 0.039468f, -0.009642f, -0.042702f, -0.032787f, 0.029303f, -0.011978f, 0.038981f, -0.007739f, 0.024354f, -0.023903f, -0.023841f, -0.009525f, 0.000443f, -0.030827f, 0.005915f, 0.005367f, -0.001913f, 0.037156f, -0.002834f, 0.014834f, -0.025737f, 0.020297f, -0.039191f, 0.043097f, -0.037761f, 0.027157f, 0.009585f, 0.036903f, -0.057710f, 0.005721f, 0.002405f, -0.012869f, -0.042278f, -0.063896f, -0.013565f, -0.053878f, -0.024456f, -0.042239f, -0.023770f, -0.080486f, -0.028508f, 0.042699f, 0.046419f, 0.030893f, 0.026009f, -0.000023f, 0.028251f, -0.055662f, -0.016945f, 0.013787f, 0.031726f, -0.097862f, - 0.028741f, 0.014909f, -0.051158f, 0.019791f, 0.019213f, -0.037803f, -0.028536f, 0.043227f, 0.005474f, 0.022671f, -0.011808f, 0.028223f, -0.009295f, -0.005405f, 0.022698f, 0.010130f, 0.007312f, -0.000357f, -0.015636f, -0.027565f, -0.016413f, 0.040274f, -0.014929f, -0.037214f, 0.060738f, 0.036383f, 0.004423f, 0.026400f, 0.007817f, -0.033169f, -0.093824f, 0.036495f, -0.003666f, -0.052289f, 0.041739f, -0.006482f, -0.068672f, -0.059372f, -0.030441f, 0.042334f, 0.017174f, 0.043787f, 0.057523f, 0.014735f, -0.048002f, 0.012018f, 0.016032f, -0.063162f, -0.010681f, 0.030444f, -0.019802f, -0.069085f, -0.050767f, -0.083731f, -0.052069f, -0.015878f, 0.049064f, 0.068192f, 0.033708f, -0.010067f, 0.048654f, -0.018344f, -0.124920f, -0.104144f, 0.019496f, -0.056512f, -0.060603f, 0.075330f, 0.008488f, -0.122324f, -0.090080f, 0.017964f, 0.001406f, 0.004155f, 0.036953f, 0.076707f, 0.090723f, 0.091119f, -0.029602f, 0.032832f, -0.038080f, 0.024149f, -0.000066f, 0.014755f, -0.045004f, 0.005323f, -0.038564f, -0.031464f, -0.000754f, -0.075124f, 0.000893f, -0.030787f, 0.007645f, 0.024745f, -0.001475f, 0.028397f, - -0.038700f, 0.059631f, -0.029137f, 0.001228f, 0.039048f, -0.035095f, 0.014013f, 0.031044f, 0.034706f, 0.007512f, 0.012268f, 0.011226f, -0.055748f, -0.028251f, -0.009233f, 0.010804f, 0.008347f, -0.005536f, 0.036596f, -0.009069f, -0.000534f, -0.004157f, -0.015834f, 0.015917f, 0.007470f, -0.040775f, 0.013153f, -0.032088f, 0.010008f, -0.081353f, -0.003613f, 0.001185f, 0.000420f, 0.037926f, -0.013188f, -0.027321f, -0.012879f, 0.035338f, 0.000965f, -0.077983f, 0.115609f, -0.006138f, -0.020362f, 0.028900f, -0.003194f, -0.012721f, -0.019271f, -0.018549f, -0.021861f, 0.082736f, -0.026992f, -0.041088f, 0.043272f, 0.008035f, -0.055564f, -0.010989f, -0.070194f, -0.110332f, -0.101091f, 0.225298f, 0.191523f, 0.212334f, 0.489578f, 0.123670f, -0.121284f, 0.034150f, -0.390901f, -0.419965f, -0.102506f, -0.266131f, -0.201899f, 0.117796f, -0.064720f, 0.019677f, 0.310067f, 0.147912f, 0.229152f, 0.435910f, 0.293301f, 0.069776f, 0.061883f, -0.138396f, -0.405959f, -0.316441f, -0.239081f, -0.485245f, -0.196566f, 0.001950f, -0.088698f, -0.048017f, 0.236000f, 0.053187f, 0.026778f, 0.287055f, 0.030719f, 0.059249f, - 0.417018f, 0.298784f, 0.189613f, 0.387060f, 0.191078f, -0.085095f, -0.015589f, -0.142658f, -0.634996f, -0.561862f, -0.451995f, -0.702527f, -0.534358f, -0.204458f, -0.261431f, 0.034296f, 0.459096f, 0.401020f, 0.569358f, 0.715940f, 0.531493f, 0.402013f, 0.395612f, 0.199941f, -0.104729f, -0.184990f, -0.370999f, -0.527100f, -0.513325f, -0.461475f, -0.516861f, -0.542007f, -0.442561f, -0.288258f, -0.224376f, -0.030303f, 0.292413f, 0.359055f, 0.229948f, 0.019701f}, - {-0.006448f, -0.013510f, -0.005207f, -0.007604f, 0.000151f, 0.002616f, 0.008048f, -0.003880f, 0.000648f, -0.005956f, -0.004635f, -0.006334f, 0.003120f, -0.007287f, 0.001648f, -0.006135f, 0.012057f, -0.000682f, 0.000952f, -0.000570f, -0.008507f, 0.005430f, 0.012815f, 0.000208f, -0.003189f, 0.000662f, -0.002445f, 0.004132f, -0.001517f, -0.002179f, -0.002248f, -0.015186f, -0.004820f, 0.001228f, -0.002259f, 0.003936f, -0.004522f, 0.003400f, -0.000925f, 0.004108f, -0.002582f, 0.004413f, 0.000831f, 0.006221f, 0.003053f, -0.001982f, 0.002512f, 0.001591f, -0.003263f, -0.005955f, -0.002549f, -0.001034f, 0.003576f, 0.001500f, 0.000333f, -0.001103f, 0.006983f, 0.007610f, -0.008354f, -0.003011f, -0.007620f, 0.004418f, -0.000585f, -0.004339f, -0.002117f, -0.002822f, -0.003072f, -0.000413f, -0.004624f, 0.005044f, -0.006309f, -0.002869f, 0.000556f, 0.003456f, 0.001275f, 0.002772f, -0.001062f, 0.016799f, -0.002357f, 0.001471f, 0.012913f, -0.001553f, -0.000800f, -0.003691f, 0.014081f, 0.000947f, 0.006732f, 0.004320f, 0.003980f, -0.005806f, 0.002728f, -0.009051f, -0.001240f, 0.007141f, 0.001177f, 0.004196f, - 0.006395f, -0.011231f, -0.008153f, 0.002710f, -0.000854f, 0.008378f, 0.004788f, -0.000433f, -0.004960f, -0.002933f, -0.006073f, -0.000941f, -0.001110f, -0.000902f, 0.001235f, 0.002132f, -0.005368f, 0.008314f, -0.002310f, -0.001393f, 0.002467f, -0.010787f, -0.002880f, 0.004507f, 0.001206f, 0.010411f, -0.000486f, -0.000925f, 0.001596f, 0.000546f, 0.003908f, 0.007108f, 0.008783f, -0.000752f, -0.001481f, -0.000071f, -0.005888f, -0.007042f, 0.003171f, 0.005765f, -0.004850f, -0.004396f, -0.003387f, 0.007371f, 0.003879f, -0.001448f, 0.000492f, -0.009526f, -0.003387f, 0.004273f, 0.003096f, 0.006235f, -0.010704f, 0.001697f, 0.002672f, -0.002545f, 0.005726f, 0.021308f, 0.006370f, -0.005348f, 0.011465f, -0.005744f, 0.011926f, -0.004186f, -0.004824f, 0.005507f, 0.011198f, -0.000668f, -0.004880f, 0.002548f, 0.002712f, -0.000757f, -0.014865f, 0.003286f, 0.004960f, 0.000937f, 0.010052f, 0.012606f, 0.007406f, 0.012421f, 0.009126f, 0.007476f, -0.001556f, 0.008344f, 0.004654f, -0.006741f, 0.002966f, 0.003751f, -0.007849f, -0.010849f, -0.001090f, 0.004011f, 0.000723f, -0.004013f, -0.004583f, -0.005168f, - -0.001911f, 0.005610f, 0.012102f, 0.009637f, 0.004280f, 0.007396f, -0.011484f, 0.000687f, -0.002466f, 0.000065f, -0.013250f, 0.005120f, -0.000693f, -0.003273f, 0.000112f, -0.003738f, -0.006199f, -0.004759f, 0.005541f, 0.001265f, 0.004418f, -0.004919f, 0.010162f, 0.002623f, -0.010263f, 0.004774f, 0.002099f, 0.003357f, 0.006716f, 0.002208f, 0.011725f, -0.003037f, 0.001880f, -0.012278f, 0.003045f, 0.001985f, 0.000715f, 0.001192f, 0.001635f, -0.004948f, -0.003861f, -0.001986f, 0.004586f, -0.007982f, 0.002725f, -0.015226f, 0.003308f, 0.002219f, -0.001152f, 0.009933f, 0.001224f, -0.001718f, 0.001504f, 0.005002f, -0.008431f, 0.000735f, 0.003322f, 0.005195f, -0.012225f, -0.007031f, -0.004254f, 0.004143f, 0.002499f, -0.004565f, -0.012346f, 0.002586f, -0.012273f, -0.001337f, 0.005701f, -0.002932f, 0.004492f, -0.002772f, 0.009277f, 0.012302f, 0.007411f, -0.007202f, 0.001877f, 0.009189f, 0.006658f, -0.006575f, 0.005713f, 0.000956f, -0.009356f, 0.002973f, 0.014463f, 0.005909f, 0.005323f, 0.014815f, 0.002103f, -0.006386f, -0.011012f, -0.001068f, -0.005824f, -0.008473f, -0.002941f, 0.007895f, - -0.007172f, 0.002243f, -0.003890f, -0.005037f, 0.010806f, -0.001851f, 0.002662f, 0.007286f, 0.011819f, -0.005326f, -0.008580f, 0.011902f, 0.010999f, 0.005481f, 0.002236f, -0.008259f, 0.003261f, 0.008771f, -0.007123f, -0.029270f, -0.010413f, -0.004668f, 0.016143f, -0.006211f, -0.002132f, -0.009555f, -0.007675f, -0.001501f, -0.020669f, 0.011621f, 0.004191f, -0.000706f, -0.007416f, 0.011473f, -0.002911f, 0.005797f, -0.004321f, 0.003651f, 0.007758f, -0.009258f, 0.001376f, 0.010144f, 0.006172f, 0.004089f, 0.011322f, 0.009740f, -0.005638f, -0.007755f, -0.009222f, -0.000112f, -0.012255f, 0.003117f, -0.016326f, -0.003139f, 0.012983f, 0.006643f, -0.003687f, -0.001179f, -0.012069f, 0.005920f, -0.004776f, 0.011365f, -0.005762f, -0.011271f, -0.001644f, -0.004495f, -0.008680f, 0.003920f, -0.001371f, -0.005705f, -0.005285f, -0.020000f, 0.003659f, -0.005726f, -0.014139f, -0.003594f, 0.010279f, 0.005230f, -0.006746f, 0.006957f, 0.009399f, 0.008580f, 0.004170f, -0.009736f, -0.000441f, -0.001556f, 0.008602f, -0.006437f, -0.001276f, 0.004819f, 0.005547f, -0.010121f, -0.011648f, -0.022679f, -0.001954f, -0.011231f, - -0.025036f, -0.010375f, -0.004278f, -0.007750f, 0.008857f, 0.010991f, 0.010855f, -0.021378f, -0.015523f, 0.005814f, 0.025971f, 0.014952f, 0.000226f, 0.003403f, 0.007564f, -0.009508f, 0.006334f, -0.008833f, 0.006417f, 0.008883f, 0.001632f, 0.007079f, 0.002505f, -0.000766f, 0.004017f, 0.002008f, -0.006693f, -0.008982f, 0.012271f, 0.004652f, -0.008621f, 0.008408f, -0.004620f, -0.001123f, 0.020934f, -0.010131f, 0.011925f, 0.022983f, 0.009638f, -0.001534f, 0.001057f, -0.008568f, 0.011005f, -0.011270f, -0.005908f, -0.018803f, 0.003654f, 0.014201f, -0.000222f, -0.013333f, -0.004565f, -0.018823f, -0.009363f, -0.003581f, -0.026461f, -0.014555f, -0.002503f, 0.002758f, -0.011514f, 0.005869f, -0.002952f, -0.009184f, 0.010097f, 0.029440f, 0.002899f, 0.015081f, 0.010364f, 0.008970f, -0.009049f, 0.004149f, -0.015504f, 0.002025f, 0.005073f, 0.004003f, -0.005324f, 0.000701f, 0.038967f, 0.025495f, -0.014132f, 0.005588f, 0.012158f, -0.004737f, 0.006711f, -0.001969f, 0.011283f, 0.006436f, 0.003208f, 0.011245f, 0.005486f, 0.005800f, -0.003966f, -0.025967f, 0.012034f, -0.004043f, -0.006653f, 0.021133f, - 0.012153f, 0.007591f, 0.008876f, 0.007518f, 0.004586f, -0.003618f, 0.002372f, 0.001261f, -0.007475f, 0.005880f, 0.008221f, -0.014507f, 0.002113f, -0.009254f, 0.006373f, 0.008645f, -0.024092f, -0.000002f, -0.028544f, 0.000849f, 0.002642f, 0.002718f, 0.006724f, 0.019281f, -0.003189f, -0.009464f, -0.005711f, -0.004930f, -0.008228f, 0.005774f, 0.004901f, 0.002148f, -0.004081f, -0.003099f, 0.017352f, -0.005811f, -0.004765f, -0.009765f, 0.015206f, -0.002219f, 0.012545f, -0.006217f, 0.013430f, -0.013904f, -0.031024f, -0.008625f, 0.000482f, 0.006200f, 0.008592f, -0.009845f, -0.008982f, 0.004211f, 0.001098f, -0.004506f, -0.009306f, 0.018805f, -0.008410f, 0.018218f, -0.006801f, -0.012563f, -0.000313f, 0.001666f, -0.017316f, -0.014026f, -0.004144f, 0.004474f, -0.002396f, 0.022489f, 0.013895f, 0.000283f, 0.021973f, 0.007524f, 0.006563f, -0.018996f, 0.017688f, -0.003620f, -0.004222f, -0.016091f, -0.006949f, 0.013611f, 0.013948f, -0.004302f, 0.009291f, -0.019300f, -0.002530f, 0.012331f, 0.009693f, -0.007463f, -0.013328f, -0.007942f, -0.008204f, -0.010768f, -0.008538f, 0.001665f, -0.014044f, -0.001772f, - 0.019594f, -0.009811f, 0.002317f, -0.001150f, -0.004441f, 0.007201f, -0.003072f, 0.012348f, 0.000049f, 0.017588f, -0.004597f, -0.011735f, 0.006521f, -0.009344f, -0.008873f, -0.009330f, -0.025550f, 0.002616f, 0.010562f, 0.014891f, 0.010943f, 0.019709f, -0.002079f, -0.007914f, 0.011517f, -0.014356f, 0.003261f, 0.002148f, -0.002184f, 0.013056f, 0.012024f, -0.002781f, -0.015520f, 0.003783f, -0.008145f, -0.013323f, -0.014152f, 0.004258f, -0.021943f, -0.013695f, 0.002920f, -0.013372f, -0.032730f, 0.024697f, 0.000002f, -0.002175f, 0.003755f, 0.001480f, -0.021447f, 0.014886f, -0.022378f, 0.001541f, 0.011075f, -0.003519f, 0.004409f, 0.003207f, -0.024103f, -0.008805f, -0.010405f, -0.002774f, 0.005673f, -0.008599f, -0.004537f, -0.001482f, -0.000831f, 0.001786f, 0.010962f, 0.005060f, 0.022857f, -0.008536f, 0.031144f, -0.002605f, 0.001480f, -0.020411f, -0.002301f, 0.014358f, -0.002278f, -0.031140f, 0.013060f, 0.013798f, -0.008450f, 0.007082f, -0.010775f, 0.020796f, 0.012453f, -0.001068f, -0.000556f, -0.014109f, -0.008004f, -0.015397f, 0.014686f, 0.013329f, 0.006773f, 0.001101f, 0.007004f, -0.012513f, - -0.030955f, -0.012058f, 0.011794f, 0.004376f, -0.022797f, 0.000100f, 0.003440f, 0.002714f, -0.010635f, 0.007570f, 0.017246f, 0.008098f, 0.000796f, 0.006237f, 0.011680f, -0.006986f, 0.016581f, -0.000276f, -0.034510f, 0.018284f, -0.004238f, 0.006347f, -0.009849f, -0.006289f, 0.015272f, -0.017702f, 0.017096f, -0.010973f, -0.019412f, 0.008348f, -0.010249f, 0.041742f, 0.006762f, -0.015540f, -0.020173f, -0.004429f, -0.025140f, -0.012497f, -0.027125f, -0.002391f, 0.018807f, -0.013846f, 0.011738f, 0.017770f, -0.016861f, -0.000779f, -0.019757f, 0.010417f, 0.004298f, -0.001627f, 0.012162f, -0.013452f, -0.017736f, -0.016172f, 0.001320f, 0.002428f, 0.015402f, -0.022813f, 0.015762f, 0.002008f, -0.032001f, -0.018790f, -0.025811f, -0.011781f, 0.010045f, -0.009906f, -0.008538f, -0.050670f, -0.000923f, -0.012091f, -0.004454f, -0.033015f, -0.011009f, -0.005519f, 0.002464f, 0.024513f, 0.023554f, 0.018534f, 0.011398f, 0.023464f, -0.027009f, 0.019385f, 0.002694f, 0.008148f, 0.006737f, -0.020865f, 0.029431f, 0.016769f, 0.011207f, -0.014871f, -0.018408f, -0.014372f, 0.016102f, 0.000679f, -0.001873f, 0.013611f, - 0.024282f, 0.027018f, 0.010566f, 0.018997f, 0.014768f, 0.009356f, -0.005243f, 0.002318f, -0.007647f, 0.000935f, -0.002881f, -0.015818f, 0.020168f, 0.032884f, 0.012613f, -0.008614f, 0.014229f, 0.014178f, -0.000947f, 0.008913f, -0.015750f, -0.029339f, -0.020095f, -0.013203f, 0.008189f, -0.003308f, -0.015865f, 0.011849f, -0.005705f, -0.013577f, -0.000556f, 0.024277f, 0.011719f, 0.018056f, 0.005855f, 0.013363f, 0.014176f, -0.003061f, 0.012961f, -0.004910f, -0.015577f, 0.006699f, -0.017971f, 0.006859f, 0.006701f, -0.025659f, -0.017149f, 0.010922f, 0.026607f, -0.013639f, 0.018494f, 0.026445f, -0.021809f, 0.001208f, 0.023690f, 0.002909f, -0.008799f, -0.001657f, -0.012236f, -0.020995f, 0.000349f, -0.006082f, -0.010995f, 0.015128f, 0.001124f, -0.023969f, 0.031964f, -0.012408f, 0.026371f, -0.029467f, -0.019124f, 0.015358f, -0.016237f, 0.010759f, -0.008628f, -0.003141f, 0.002168f, -0.023897f, 0.015828f, -0.011270f, -0.022530f, 0.032898f, 0.019335f, -0.026096f, 0.018802f, 0.013856f, 0.006062f, 0.027323f, -0.058304f, 0.002434f, 0.026040f, 0.006511f, 0.003651f, 0.024100f, 0.002436f, 0.012235f, - -0.033201f, -0.006778f, 0.010778f, -0.001738f, -0.015983f, 0.004507f, 0.015222f, 0.004417f, 0.007869f, 0.016043f, 0.016588f, 0.022029f, 0.020480f, -0.010115f, -0.006676f, 0.016313f, -0.010489f, 0.010557f, -0.020322f, -0.014511f, -0.026344f, -0.015473f, 0.016257f, 0.002218f, -0.005257f, 0.019385f, -0.025735f, -0.039538f, -0.057561f, 0.014696f, 0.021267f, 0.012199f, 0.013400f, -0.017679f, 0.010315f, -0.012085f, 0.023124f, 0.054829f, -0.008227f, -0.017032f, -0.024739f, -0.013033f, 0.023147f, -0.020313f, 0.013731f, 0.016167f, 0.004668f, -0.006621f, -0.015944f, -0.011715f, 0.009610f, -0.048469f, -0.035888f, -0.004628f, 0.008398f, -0.023449f, 0.004996f, 0.089813f, 0.048937f, 0.033097f, -0.009389f, -0.007899f, -0.002323f, -0.006434f, -0.010356f, -0.012649f, -0.017819f, -0.027359f, -0.000005f, -0.000943f, 0.005670f, 0.013453f, 0.022339f, 0.036775f, -0.006084f, -0.045494f, -0.019502f, 0.040902f, -0.007560f, 0.015923f, -0.006524f, 0.000270f, 0.025218f, 0.010124f, 0.018802f, 0.012768f, -0.002242f, -0.000340f, -0.001804f, 0.014256f, 0.015703f, -0.005860f, -0.027669f, 0.035065f, 0.023086f, 0.018188f, - 0.004904f, 0.009578f, -0.015481f, -0.025325f, 0.034175f, 0.020539f, 0.007587f, -0.016064f, -0.020115f, -0.025436f, -0.017651f, -0.004210f, -0.017953f, 0.009294f, -0.034940f, 0.004811f, 0.022585f, -0.015784f, 0.006683f, 0.001482f, 0.001557f, -0.037965f, 0.011276f, -0.016561f, 0.025351f, -0.061280f, 0.008043f, -0.016693f, -0.023055f, 0.003836f, -0.015107f, 0.010767f, 0.008919f, -0.042146f, -0.002609f, 0.023445f, 0.001515f, -0.054665f, -0.027785f, 0.003842f, -0.047661f, 0.010804f, 0.034966f, -0.016890f, 0.042466f, 0.049388f, 0.006541f, 0.024604f, 0.030805f, 0.013562f, -0.029065f, 0.019001f, 0.023583f, -0.001269f, 0.006169f, 0.016339f, 0.014832f, 0.034868f, 0.006262f, -0.013570f, 0.022631f, 0.007928f, -0.003156f, 0.000443f, 0.015295f, -0.020492f, -0.008904f, -0.008688f, 0.012841f, 0.006452f, -0.028462f, 0.008507f, 0.024463f, 0.000653f, 0.029421f, -0.027425f, -0.051446f, 0.004193f, 0.023702f, 0.035256f, 0.033088f, 0.016940f, 0.015959f, 0.012530f, -0.034743f, -0.010160f, -0.000954f, 0.026626f, 0.042348f, -0.014221f, 0.009582f, -0.015114f, 0.010499f, 0.006970f, 0.026094f, 0.039789f, - -0.014501f, -0.016813f, -0.002696f, 0.022135f, 0.028521f, 0.039495f, 0.001800f, -0.041171f, -0.038678f, -0.005454f, 0.006113f, 0.001439f, -0.017059f, 0.002242f, -0.046481f, -0.027898f, -0.026484f, -0.025261f, 0.016624f, 0.023664f, -0.051488f, 0.005310f, -0.010658f, 0.028693f, -0.015352f, -0.001462f, 0.008312f, 0.022090f, -0.028675f, -0.046829f, -0.008480f, -0.017639f, 0.001256f, -0.020395f, 0.012713f, 0.013851f, 0.001332f, -0.024435f, 0.016283f, 0.003094f, 0.043381f, -0.005312f, 0.023956f, -0.018257f, 0.044971f, 0.014630f, 0.028315f, 0.020565f, 0.030939f, 0.046614f, -0.010171f, 0.019437f, -0.030407f, 0.035163f, 0.032901f, 0.001643f, 0.011417f, 0.034750f, -0.019494f, -0.017259f, -0.002031f, 0.067705f, 0.011937f, -0.015153f, 0.033746f, 0.007384f, 0.026386f, 0.038883f, 0.012196f, 0.001161f, 0.005356f, 0.009332f, 0.025642f, -0.004169f, 0.027549f, -0.013050f, 0.027181f, -0.008978f, 0.058286f, -0.003104f, 0.050821f, -0.037870f, -0.043913f, 0.071791f, -0.051358f, -0.023281f, 0.006596f, -0.010869f, -0.029396f, 0.037899f, 0.001548f, -0.033710f, -0.013756f, -0.011344f, -0.055309f, 0.009788f, - -0.046022f, -0.025392f, 0.004947f, -0.052846f, -0.036056f, -0.035875f, -0.043053f, 0.051029f, -0.004821f, 0.004456f, 0.010616f, -0.011324f, -0.065265f, -0.043333f, -0.048940f, -0.089254f, 0.002616f, 0.012894f, 0.035549f, 0.025574f, 0.009516f, 0.022095f, 0.009386f, 0.006505f, -0.033443f, -0.040460f, -0.029115f, 0.035121f, -0.008909f, -0.022976f, -0.014918f, 0.034247f, -0.044212f, -0.023571f, -0.045435f, -0.018404f, -0.008777f, -0.037130f, 0.008854f, -0.030700f, 0.028996f, 0.025590f, -0.011313f, 0.025122f, -0.029771f, -0.047598f, 0.014808f, 0.029110f, -0.031750f, -0.055105f, 0.034983f, -0.003207f, 0.023063f, 0.025728f, -0.087425f, -0.056675f, -0.007643f, -0.013267f, 0.043194f, -0.030430f, -0.043707f, -0.010295f, 0.009115f, 0.001415f, -0.015703f, -0.020152f, 0.056890f, -0.036599f, -0.069562f, -0.079610f, 0.038984f, -0.018043f, -0.080852f, 0.022090f, 0.006121f, -0.014643f, -0.007591f, 0.005334f, -0.048268f, -0.022668f, 0.025487f, 0.035490f, 0.079687f, 0.009918f, 0.042462f, 0.016765f, 0.021293f, -0.020833f, -0.004168f, -0.018341f, -0.041282f, -0.053482f, -0.069134f, -0.029097f, -0.062282f, -0.028534f, - -0.032187f, -0.016135f, 0.034969f, 0.004509f, 0.023944f, 0.036073f, 0.000668f, 0.022924f, 0.008346f, -0.002927f, -0.000601f, -0.009756f, -0.053346f, 0.014856f, -0.006675f, -0.065255f, -0.037598f, 0.012697f, -0.039135f, -0.020034f, 0.013606f, 0.038561f, 0.052547f, 0.012999f, -0.012000f, 0.001590f, 0.034505f, 0.013120f, 0.006125f, -0.007251f, -0.107128f, -0.027719f, 0.021387f, 0.020056f, 0.008414f, -0.011035f, -0.038193f, 0.017355f, -0.034766f, -0.031557f, -0.009758f, -0.001529f, -0.021714f, -0.064732f, 0.025369f, -0.016041f, 0.064508f, 0.017370f, 0.017306f, 0.017183f, 0.043426f, 0.105435f, -0.008429f, -0.008024f, -0.018280f, -0.039535f, 0.054873f, -0.003893f, 0.006526f, -0.060533f, -0.026095f, 0.079665f, -0.054702f, -0.009814f, -0.047987f, -0.125090f, -0.022684f, 0.043404f, 0.028248f, 0.010051f, 0.004939f, -0.003242f, 0.067795f, -0.074214f, -0.004602f, -0.018801f, -0.056651f, -0.040526f, -0.011190f, 0.018306f, 0.008304f, 0.020882f, 0.041942f, 0.033672f, -0.037825f, -0.030287f, 0.087994f, 0.079112f, -0.010989f, 0.012083f, -0.015132f, 0.027856f, -0.005377f, 0.057191f, 0.014630f, 0.031759f, - 0.002955f, 0.007095f, -0.101205f, 0.042608f, -0.009431f, -0.052569f, -0.033542f, 0.008106f, -0.020382f, -0.052509f, 0.047396f, -0.006944f, -0.044884f, -0.005912f, -0.000055f, 0.049108f, 0.046599f, 0.041993f, 0.009257f, 0.048675f, 0.043645f, -0.035921f, -0.047755f, -0.024796f, -0.013743f, 0.049785f, 0.057381f, 0.012149f, 0.015213f, 0.062993f, 0.028184f, -0.057788f, 0.032200f, 0.016090f, -0.027151f, 0.003149f, 0.094803f, 0.053631f, -0.034227f, -0.051867f, -0.081726f, 0.015541f, -0.014866f, -0.027153f, -0.032437f, 0.017534f, -0.019263f, -0.010322f, 0.055429f, -0.017716f, -0.001958f, -0.043366f, 0.004609f, 0.026534f, -0.058587f, -0.038374f, -0.034551f, -0.018205f, 0.022966f, -0.081153f, -0.043553f, -0.116822f, 0.021535f, -0.001674f, -0.028197f, -0.013413f, -0.015789f, 0.024448f, 0.038762f, -0.041655f, 0.003021f, -0.014717f, -0.012473f, -0.072885f, 0.017539f, 0.055588f, 0.016360f, 0.042076f, 0.054624f, 0.047407f, -0.061974f, -0.019448f, -0.017453f, -0.029713f, 0.055443f, -0.054559f, -0.029647f, 0.002231f, 0.079835f, 0.018004f, -0.025207f, 0.078961f, -0.041867f, -0.040728f, 0.095889f, 0.090426f, - 0.011147f, 0.023860f, -0.022772f, -0.083604f, -0.023204f, 0.087030f, -0.038252f, 0.079352f, -0.024400f, -0.119699f, -0.028122f, -0.054201f, 0.069773f, 0.004229f, 0.020338f, 0.063073f, -0.001763f, 0.052897f, 0.023222f, 0.042184f, 0.004209f, -0.078356f, 0.046807f, 0.051987f, -0.062949f, 0.034352f, 0.000845f, -0.023815f, -0.026153f, -0.093014f, -0.039454f, 0.031980f, 0.007252f, 0.084402f, -0.066659f, -0.038898f, 0.017491f, -0.009673f, 0.056010f, -0.075837f, 0.001772f, 0.007604f, -0.062139f, 0.063817f, 0.036864f, 0.019495f, -0.028068f, 0.043827f, -0.049829f, 0.028774f, 0.024296f, 0.013689f, -0.001580f, -0.028631f, 0.014173f, 0.058498f, -0.028330f, -0.010669f, 0.013663f, -0.044971f, 0.048780f, 0.002441f, 0.014576f, -0.061657f, 0.036104f, 0.009048f, 0.013941f, -0.145475f, 0.022618f, -0.040642f, 0.070973f, 0.057686f, 0.062709f, 0.031857f, -0.116443f, -0.019694f, 0.028083f, 0.003809f, 0.010426f, 0.085156f, -0.010069f, -0.049120f, -0.058260f, 0.003803f, -0.065300f, -0.057776f, -0.050703f, 0.026397f, -0.097237f, 0.070731f, 0.133388f, -0.034692f, -0.018513f, -0.105439f, -0.031548f, -0.092794f, - 0.023269f, -0.039157f, -0.031161f, 0.031746f, -0.026036f, -0.030830f, 0.023956f, -0.041387f, -0.005317f, -0.047549f, 0.070105f, 0.004077f, -0.055699f, -0.012878f, -0.001319f, -0.002515f, 0.014388f, -0.032656f, -0.027082f, 0.010824f, 0.012177f, 0.011397f, 0.004685f, 0.030464f, -0.034380f, -0.009381f, -0.075906f, 0.030188f, 0.004514f, -0.019544f, 0.050772f, 0.031972f, -0.024085f, 0.084231f, 0.015735f, -0.048152f, 0.036328f, 0.009631f, 0.022895f, 0.056642f, -0.007176f, -0.010173f, 0.006254f, 0.047225f, 0.022913f, 0.003999f, -0.006535f, 0.050320f, -0.006148f, -0.051941f, -0.011371f, 0.013161f, 0.041643f, -0.016232f, 0.073083f, 0.085562f, -0.053938f, 0.046099f, 0.091435f, -0.022084f, 0.139731f, 0.082483f, -0.036243f, -0.029193f, -0.053786f, -0.057278f, -0.034323f, 0.021466f, -0.010446f, -0.008174f, -0.001246f, -0.006953f, -0.097143f, -0.036521f, -0.094966f, 0.022462f, 0.125663f, 0.031603f, -0.043220f, 0.003765f, -0.057132f, -0.008840f, 0.021915f, -0.025428f, -0.029644f, -0.035767f, -0.011652f, 0.012261f, -0.006122f, -0.012179f, 0.017381f, 0.008104f, 0.023045f, -0.023091f, -0.012208f, 0.014993f, - -0.004008f, 0.001925f, -0.030547f, 0.021037f, -0.036009f, 0.017297f, 0.014383f, -0.008994f, 0.000251f, 0.000574f, -0.019959f, 0.002898f, 0.006547f, -0.018274f, 0.033778f, -0.017762f, 0.009864f, -0.000539f, 0.003377f, 0.015303f, -0.013259f, -0.024942f, -0.004858f, 0.035922f, -0.024614f, 0.017288f, -0.047142f, -0.030198f, 0.012159f, -0.011346f, 0.002032f, -0.003854f, -0.027016f, 0.031232f, 0.028449f, 0.001792f, -0.018726f, -0.001585f, -0.009975f, 0.006067f, -0.013108f, -0.000971f, -0.012241f, 0.011563f, -0.000444f, 0.002759f, 0.044498f, -0.034352f, 0.001683f, 0.005834f, 0.007503f, -0.007466f, 0.006647f, -0.016038f, 0.007670f, -0.013362f, -0.058184f, -0.089609f, 0.062881f, 0.280852f, 0.125120f, 0.127926f, 0.000607f, -0.262778f, -0.187695f, -0.099862f, -0.204499f, 0.098504f, 0.124304f, 0.062389f, 0.267767f, 0.118268f, -0.010117f, 0.086827f, -0.170891f, -0.221239f, -0.123980f, -0.155445f, -0.031739f, 0.117506f, 0.123334f, 0.049533f, 0.206212f, 0.100109f, -0.012790f, 0.096966f, -0.089186f, -0.157063f, -0.087734f, -0.118543f, -0.182166f, 0.066077f, -0.000114f, -0.067481f, 0.199239f, 0.117515f, - 0.068519f, 0.200875f, 0.050464f, -0.104396f, 0.101234f, -0.148182f, -0.165612f, -0.035799f, -0.174265f, -0.179969f, 0.072104f, -0.031101f, 0.044702f, 0.223321f, 0.155648f, 0.158783f, 0.152887f, 0.016790f, -0.083218f, -0.099579f, -0.162499f, -0.216844f, -0.111323f, -0.062856f, -0.042941f, 0.080777f, 0.129842f, 0.119039f, 0.172170f, 0.152760f, -0.021981f, -0.028231f, -0.025646f, -0.158668f, -0.044471f, -0.077097f, -0.107629f, 0.027924f, 0.028288f, -0.001355f} - }, - { - {-0.005889f, -0.013663f, -0.005501f, -0.007822f, -0.004259f, 0.009698f, 0.005225f, 0.000753f, 0.008095f, 0.005482f, -0.006464f, -0.008837f, -0.005413f, -0.004194f, 0.001057f, 0.003309f, -0.008845f, -0.001237f, -0.003505f, -0.000139f, -0.001045f, -0.001956f, -0.004690f, 0.011110f, 0.006507f, -0.000795f, -0.009141f, -0.003661f, 0.001986f, 0.003738f, -0.000283f, -0.003659f, 0.001644f, 0.003185f, 0.001103f, 0.002976f, -0.002525f, -0.000431f, -0.006999f, -0.009077f, -0.001920f, -0.000859f, 0.004481f, 0.005404f, 0.003874f, 0.001074f, 0.001301f, 0.003093f, 0.004659f, 0.001319f, 0.006209f, 0.002477f, -0.003919f, -0.004688f, -0.000042f, 0.004412f, 0.004203f, 0.001784f, 0.000969f, 0.006697f, 0.004528f, -0.007987f, -0.006857f, -0.004168f, -0.003773f, -0.003424f, 0.004588f, -0.003108f, 0.002191f, -0.007564f, 0.005518f, -0.005372f, -0.003834f, 0.003849f, -0.002422f, -0.003374f, 0.008748f, 0.005360f, -0.008337f, -0.001651f, -0.003222f, -0.000059f, 0.011941f, 0.000896f, -0.005432f, 0.006607f, 0.001074f, 0.000849f, 0.001903f, 0.001538f, -0.000133f, 0.009340f, 0.004912f, -0.006005f, -0.002640f, -0.000525f, - -0.002434f, 0.002751f, 0.003642f, 0.002807f, -0.002924f, -0.003774f, 0.001244f, -0.007789f, -0.003909f, 0.006165f, 0.000233f, 0.004999f, 0.002165f, -0.003709f, 0.002636f, 0.000231f, -0.003752f, 0.008583f, -0.005953f, -0.002464f, 0.000732f, 0.003072f, -0.004198f, -0.000829f, -0.005889f, -0.010745f, 0.009843f, -0.001864f, -0.006098f, 0.000792f, 0.008983f, 0.000204f, 0.003200f, -0.004473f, -0.003192f, -0.001722f, 0.002402f, -0.003482f, 0.007000f, 0.001412f, 0.006230f, -0.009611f, 0.003570f, -0.002308f, 0.001000f, 0.004453f, -0.002409f, -0.000802f, -0.008069f, 0.000378f, 0.003033f, 0.001264f, -0.003084f, 0.000091f, 0.002198f, -0.001303f, -0.003816f, 0.025456f, 0.009020f, -0.002252f, 0.007170f, 0.000135f, 0.012886f, 0.007739f, -0.001560f, 0.006290f, 0.011592f, 0.014654f, -0.008564f, -0.008820f, 0.003874f, -0.003694f, -0.002654f, 0.010411f, 0.008819f, 0.007960f, 0.006068f, 0.000870f, -0.000112f, -0.003948f, 0.004285f, 0.002599f, 0.013781f, 0.001133f, -0.000064f, -0.006235f, 0.003055f, 0.003726f, -0.000536f, -0.002094f, -0.001881f, 0.003426f, -0.000294f, -0.002437f, -0.004715f, 0.005008f, - -0.001513f, -0.002041f, 0.007745f, 0.010355f, -0.002471f, -0.001570f, 0.006416f, 0.005222f, 0.010014f, 0.005749f, 0.002970f, 0.000717f, 0.008592f, 0.004397f, -0.011098f, -0.000286f, 0.003844f, -0.006886f, 0.000530f, 0.000761f, -0.007765f, 0.003822f, -0.003547f, 0.005770f, -0.000875f, -0.001409f, 0.003771f, 0.000683f, -0.005085f, -0.000901f, 0.003723f, -0.001538f, -0.000697f, -0.002112f, 0.001432f, 0.005955f, 0.002191f, -0.007077f, 0.008878f, -0.000690f, -0.016774f, -0.007805f, -0.003260f, -0.003631f, -0.009136f, -0.008388f, -0.005274f, 0.009082f, -0.009997f, -0.004672f, -0.004754f, 0.001817f, 0.015148f, -0.002291f, -0.001217f, 0.003690f, 0.008663f, -0.013289f, -0.002179f, 0.002683f, -0.005873f, 0.004656f, 0.007402f, -0.008215f, -0.000522f, 0.001017f, -0.004775f, -0.012086f, 0.002078f, -0.005119f, 0.001615f, -0.004723f, 0.006874f, -0.008375f, -0.007781f, -0.019181f, -0.005171f, 0.006496f, -0.001086f, -0.007419f, -0.003634f, -0.001018f, -0.007708f, 0.000282f, -0.001317f, 0.005164f, 0.004156f, -0.002110f, 0.000218f, -0.002101f, -0.008137f, 0.009749f, 0.001705f, 0.006518f, -0.002480f, -0.000177f, - 0.001722f, 0.002673f, 0.007657f, -0.002714f, -0.001872f, 0.001984f, -0.000231f, 0.008056f, 0.004471f, -0.007617f, -0.002875f, -0.002235f, -0.011455f, -0.001788f, -0.001039f, 0.006232f, -0.004302f, -0.036729f, -0.011708f, -0.003086f, -0.003128f, -0.002901f, 0.014103f, -0.012946f, 0.006193f, -0.002861f, 0.002770f, -0.003538f, -0.003166f, -0.010354f, 0.001628f, -0.003619f, 0.000699f, -0.015110f, 0.000215f, -0.001308f, -0.002837f, 0.000026f, 0.002809f, 0.002616f, -0.001525f, -0.000750f, -0.006221f, 0.002216f, -0.004998f, 0.003581f, -0.000051f, 0.003119f, 0.009558f, -0.002157f, -0.011020f, -0.004332f, -0.012890f, 0.002166f, 0.002312f, -0.000768f, 0.002231f, -0.004081f, 0.004325f, 0.002648f, -0.005679f, 0.000941f, -0.015439f, -0.002834f, -0.010303f, 0.006147f, 0.010292f, -0.008512f, -0.000634f, 0.003457f, 0.001657f, -0.014219f, 0.002566f, 0.008152f, -0.006967f, -0.002789f, -0.016704f, 0.006325f, -0.002274f, 0.007595f, 0.012667f, 0.007770f, -0.009811f, 0.002805f, 0.002630f, 0.001252f, -0.010846f, 0.003598f, -0.004385f, 0.008145f, -0.002546f, 0.000319f, 0.004046f, 0.003357f, -0.022112f, 0.001796f, - 0.004804f, -0.008904f, -0.000296f, 0.021600f, 0.018057f, 0.008686f, -0.001781f, -0.004783f, 0.011822f, 0.006233f, 0.004270f, 0.003469f, -0.008247f, 0.002322f, 0.001579f, 0.009747f, -0.009308f, -0.005337f, -0.001200f, 0.000556f, -0.001337f, -0.012335f, -0.007125f, -0.008919f, -0.008899f, 0.004533f, 0.007169f, 0.003343f, 0.003583f, -0.000606f, 0.003521f, -0.002283f, -0.000519f, -0.000111f, -0.002763f, -0.001862f, 0.005806f, 0.003071f, -0.007112f, -0.009667f, -0.000064f, -0.009718f, 0.006025f, -0.003622f, -0.014096f, 0.000814f, 0.008342f, 0.009695f, 0.008207f, -0.000641f, 0.007815f, -0.011714f, -0.002579f, -0.005900f, 0.000109f, -0.000480f, 0.005637f, -0.004964f, -0.008804f, 0.010425f, -0.009784f, -0.006675f, 0.008325f, 0.015416f, 0.005122f, 0.001480f, -0.015527f, 0.015870f, 0.003480f, 0.009954f, 0.020945f, -0.007650f, 0.004067f, -0.002611f, -0.004506f, 0.003709f, 0.034608f, 0.024233f, -0.008605f, -0.012776f, 0.019230f, 0.012387f, 0.020226f, 0.029511f, -0.014899f, 0.010145f, 0.004993f, 0.008468f, 0.003904f, 0.005023f, 0.012288f, 0.002893f, 0.012538f, 0.000244f, -0.007984f, 0.003179f, - -0.002578f, 0.004024f, -0.001495f, 0.022781f, 0.003866f, 0.004839f, 0.003088f, 0.000665f, 0.008007f, 0.003158f, 0.000421f, -0.001757f, 0.005698f, -0.004744f, 0.010930f, -0.008893f, 0.013163f, -0.006594f, 0.007918f, 0.003837f, 0.004793f, 0.003511f, 0.019332f, 0.014469f, 0.000809f, -0.004608f, -0.010679f, 0.011079f, -0.012998f, 0.002758f, -0.005777f, 0.005174f, 0.012009f, 0.000941f, -0.020555f, -0.017094f, 0.001524f, -0.010879f, -0.011354f, -0.007061f, -0.013071f, 0.003926f, 0.022093f, 0.010483f, -0.008435f, -0.000246f, 0.002347f, -0.006670f, -0.006808f, -0.001990f, 0.010715f, 0.011175f, -0.013170f, 0.004953f, 0.014051f, 0.001309f, 0.004537f, 0.014652f, 0.003460f, 0.021470f, -0.001365f, -0.000794f, -0.006723f, -0.006418f, 0.007981f, 0.016150f, -0.004252f, 0.003922f, 0.001813f, 0.017565f, 0.008101f, -0.008871f, -0.007114f, 0.000728f, 0.004443f, 0.015959f, 0.016750f, 0.024054f, 0.005134f, 0.006403f, -0.003598f, 0.009587f, 0.012059f, -0.004781f, -0.004893f, 0.008438f, -0.006010f, -0.009716f, 0.009565f, 0.002339f, -0.010088f, -0.013614f, 0.021032f, 0.009878f, 0.000122f, 0.012665f, - 0.003344f, -0.009294f, 0.020062f, -0.004703f, 0.001443f, -0.000636f, 0.005865f, -0.007137f, 0.005884f, -0.007112f, 0.005771f, -0.006573f, 0.006823f, -0.005340f, 0.008970f, -0.006679f, -0.005842f, 0.018002f, -0.021411f, 0.001427f, 0.003701f, -0.007455f, 0.002572f, -0.024853f, -0.011276f, 0.012501f, -0.008898f, 0.008005f, -0.001484f, 0.005790f, 0.003443f, 0.005341f, 0.003972f, -0.009972f, 0.007540f, -0.004521f, 0.000661f, -0.017659f, -0.015634f, 0.000160f, 0.006451f, 0.012747f, -0.014830f, 0.004410f, -0.013356f, 0.011038f, 0.008052f, -0.017828f, -0.003989f, 0.002129f, -0.021397f, -0.011839f, 0.012605f, -0.001490f, -0.001188f, 0.003215f, -0.001611f, -0.021973f, 0.019952f, 0.001454f, -0.014628f, -0.006837f, 0.002391f, -0.001727f, -0.014088f, -0.004012f, -0.008237f, 0.002394f, -0.001019f, -0.004301f, 0.004080f, -0.019114f, -0.008880f, 0.005017f, 0.024730f, -0.004157f, -0.015124f, -0.010412f, -0.008605f, 0.017076f, -0.018607f, -0.003671f, -0.001694f, -0.019507f, -0.024686f, 0.005867f, -0.017276f, -0.002804f, 0.002000f, 0.012599f, 0.006601f, 0.000821f, 0.002183f, 0.014969f, -0.007225f, -0.005116f, - 0.021917f, -0.015541f, 0.011005f, -0.005717f, -0.006525f, -0.002956f, -0.003731f, 0.023329f, -0.000613f, 0.008379f, -0.026266f, -0.019307f, -0.001201f, -0.005294f, 0.025299f, -0.001512f, 0.015055f, 0.003694f, -0.029494f, 0.002611f, -0.002691f, 0.020093f, 0.002596f, -0.021794f, 0.025973f, 0.008053f, -0.014848f, -0.033342f, -0.013532f, 0.032503f, 0.001902f, -0.004366f, -0.005189f, 0.003165f, 0.001379f, 0.009892f, 0.005657f, 0.010619f, -0.002023f, 0.019123f, -0.009634f, -0.022943f, 0.001315f, 0.000879f, -0.005055f, -0.000999f, 0.008910f, -0.006011f, -0.003086f, -0.002146f, 0.018613f, 0.013971f, 0.007745f, -0.001499f, -0.024336f, -0.000631f, -0.000825f, -0.001186f, -0.003630f, -0.000554f, -0.010334f, -0.020369f, -0.002631f, 0.013747f, 0.014091f, -0.005255f, 0.015126f, -0.004863f, 0.006902f, 0.015791f, 0.015939f, -0.033940f, 0.012270f, 0.011956f, 0.005791f, -0.008468f, -0.028798f, 0.017677f, 0.011446f, 0.005425f, -0.009638f, -0.006264f, -0.010955f, 0.006204f, -0.012162f, -0.002976f, 0.001468f, 0.011446f, -0.006085f, 0.005351f, 0.005013f, -0.022698f, -0.000874f, -0.016046f, 0.026517f, 0.002835f, - 0.017857f, 0.023306f, 0.022506f, 0.018406f, 0.022035f, -0.028008f, -0.019470f, -0.009279f, -0.010059f, -0.013129f, -0.011293f, -0.022415f, -0.008599f, 0.002085f, 0.012871f, 0.000502f, -0.013994f, -0.000122f, 0.012824f, 0.001140f, -0.012232f, -0.004876f, 0.030233f, 0.003448f, 0.010783f, 0.003991f, 0.011926f, 0.002996f, 0.003213f, -0.018806f, 0.009699f, 0.001035f, 0.003417f, -0.019786f, 0.005915f, -0.030574f, -0.001068f, -0.009529f, 0.006565f, -0.002635f, -0.023626f, -0.000395f, -0.023544f, 0.004220f, -0.019779f, 0.017078f, -0.010827f, 0.026763f, -0.000364f, -0.000520f, 0.012251f, 0.002815f, -0.005486f, -0.004075f, 0.004179f, -0.009347f, 0.005015f, 0.016217f, 0.007116f, -0.012645f, -0.007775f, 0.034895f, 0.001338f, 0.027622f, -0.027539f, -0.006226f, -0.004173f, 0.019618f, -0.024222f, 0.002093f, 0.009549f, -0.024143f, 0.014538f, -0.016198f, 0.003003f, -0.009031f, -0.028271f, 0.003896f, 0.028167f, 0.020397f, 0.023026f, -0.008078f, -0.005657f, 0.005153f, -0.003802f, 0.027607f, 0.009547f, 0.012797f, 0.023823f, -0.002402f, 0.008908f, -0.016867f, 0.023627f, 0.011055f, -0.006046f, -0.015334f, - -0.013643f, 0.015014f, -0.027664f, 0.009812f, 0.015557f, -0.012444f, -0.015649f, -0.009776f, 0.014371f, 0.004444f, -0.006009f, -0.011192f, -0.000309f, -0.018117f, -0.026032f, 0.003387f, -0.025084f, -0.037721f, -0.005311f, 0.000038f, 0.036080f, -0.017352f, -0.013485f, 0.014928f, 0.026183f, 0.025639f, 0.013389f, -0.003300f, 0.005095f, -0.013454f, 0.000764f, -0.014097f, 0.028922f, 0.024930f, 0.015768f, -0.003207f, -0.032852f, -0.002257f, -0.028502f, 0.027118f, 0.020578f, 0.011865f, -0.024444f, 0.015801f, 0.007652f, 0.010097f, -0.007164f, -0.021274f, -0.017056f, -0.017628f, 0.001021f, -0.023716f, -0.043334f, 0.004994f, 0.019774f, 0.012334f, 0.012970f, 0.024893f, 0.048440f, 0.023883f, 0.015867f, 0.017939f, -0.032584f, -0.003203f, -0.012916f, 0.041277f, -0.041806f, -0.036475f, 0.009385f, 0.027551f, -0.002268f, 0.033328f, 0.027151f, 0.000356f, 0.009526f, -0.017230f, -0.015182f, 0.031811f, -0.013330f, 0.022422f, 0.005848f, -0.011588f, -0.008427f, -0.004127f, -0.008046f, -0.012132f, 0.010277f, 0.014307f, 0.009052f, 0.002831f, -0.016958f, -0.018192f, 0.024660f, -0.023656f, 0.018827f, 0.003780f, - -0.032756f, 0.017826f, 0.028803f, 0.001371f, -0.009337f, -0.001796f, 0.001300f, 0.003779f, 0.019391f, 0.001014f, -0.016440f, -0.004283f, 0.016446f, -0.029568f, 0.006748f, -0.003069f, 0.024978f, 0.029577f, 0.017427f, 0.023746f, 0.027409f, 0.022703f, 0.006782f, -0.015597f, -0.020997f, 0.012759f, 0.013434f, 0.002032f, 0.011797f, 0.019472f, 0.042967f, -0.020498f, 0.027557f, -0.011879f, -0.009419f, 0.034377f, 0.005287f, -0.032361f, -0.006888f, 0.020367f, -0.024847f, 0.001758f, -0.015956f, -0.025303f, 0.037397f, 0.033769f, 0.026494f, 0.014034f, 0.006279f, 0.011855f, 0.027268f, 0.016635f, 0.027992f, -0.009538f, 0.023327f, -0.017025f, 0.028436f, 0.040446f, 0.023838f, 0.020839f, 0.009228f, 0.021514f, 0.019670f, -0.004794f, 0.039899f, 0.011064f, -0.025235f, 0.012967f, -0.025527f, -0.015690f, -0.005786f, -0.037179f, -0.000025f, -0.006775f, -0.011139f, -0.017266f, -0.010420f, -0.003848f, -0.001853f, -0.002217f, 0.001041f, 0.003256f, -0.022771f, -0.012933f, 0.003987f, -0.009941f, 0.008614f, 0.039831f, -0.019730f, 0.000345f, -0.004157f, 0.003374f, -0.018688f, 0.011846f, -0.009216f, 0.031572f, - 0.005813f, 0.019831f, 0.027116f, 0.007076f, -0.002159f, -0.015629f, -0.040642f, 0.008018f, 0.029967f, 0.024715f, -0.005592f, -0.023786f, 0.023128f, 0.005875f, 0.014751f, -0.030442f, -0.022131f, -0.016903f, 0.016951f, -0.057326f, -0.036413f, -0.017531f, 0.041074f, 0.029664f, -0.021901f, 0.025435f, 0.023277f, 0.019592f, 0.019505f, -0.019187f, 0.002262f, 0.011111f, -0.018750f, -0.057560f, -0.010172f, -0.015900f, -0.034958f, 0.003315f, -0.011667f, -0.008883f, 0.011204f, 0.006619f, -0.007440f, 0.001928f, 0.027439f, 0.029153f, -0.052659f, 0.012942f, 0.003171f, 0.024928f, 0.008845f, 0.001745f, -0.032583f, 0.010551f, -0.007978f, -0.008682f, -0.022234f, -0.016359f, 0.043075f, -0.018699f, -0.000236f, 0.005753f, -0.010715f, 0.047816f, 0.022885f, -0.020128f, -0.012138f, -0.035920f, -0.004781f, 0.036204f, 0.010861f, 0.011756f, -0.011044f, 0.022730f, -0.004571f, -0.007919f, 0.020271f, -0.010205f, 0.033262f, -0.006002f, 0.024839f, -0.047908f, -0.016575f, 0.030797f, 0.007233f, -0.001975f, 0.008103f, -0.052025f, -0.026228f, 0.012286f, -0.022500f, 0.013630f, 0.001098f, 0.014137f, 0.030032f, 0.012813f, - -0.027351f, -0.069159f, -0.008519f, -0.006214f, -0.010212f, 0.013378f, -0.031032f, 0.058517f, -0.012720f, 0.004885f, 0.059406f, -0.070462f, -0.010076f, -0.011875f, -0.009457f, -0.081055f, 0.002130f, -0.010548f, -0.018669f, 0.030655f, -0.031201f, 0.006755f, 0.002899f, 0.015851f, -0.005213f, -0.028043f, 0.018195f, -0.017605f, 0.040732f, -0.005097f, -0.051806f, -0.001251f, -0.004329f, -0.022428f, -0.052224f, 0.024634f, 0.022495f, -0.039067f, 0.031113f, -0.035087f, -0.031949f, -0.015515f, 0.000459f, 0.005465f, 0.002738f, 0.026421f, -0.007428f, -0.020334f, -0.056926f, 0.013544f, -0.075968f, -0.036232f, -0.028107f, -0.055898f, -0.037701f, -0.014201f, -0.006685f, -0.024733f, 0.038685f, 0.045847f, 0.006386f, -0.010036f, 0.044304f, 0.024503f, -0.008646f, -0.007442f, 0.031000f, 0.028785f, -0.014805f, 0.049236f, -0.040911f, -0.014729f, 0.047025f, 0.029556f, 0.068218f, -0.026123f, -0.023580f, 0.015133f, -0.002873f, -0.026394f, -0.013223f, 0.006774f, 0.055809f, 0.031805f, -0.005014f, 0.075502f, -0.008494f, 0.031131f, -0.035341f, 0.044219f, 0.041741f, -0.003497f, -0.032939f, 0.003836f, 0.012412f, -0.018215f, - 0.020106f, -0.026700f, 0.000048f, -0.007867f, -0.008357f, -0.030295f, -0.021937f, -0.013448f, -0.001223f, -0.009351f, -0.023487f, 0.036648f, 0.025464f, 0.007422f, -0.009194f, 0.006946f, 0.035551f, 0.017185f, 0.026448f, 0.016965f, -0.017852f, -0.028278f, 0.060369f, -0.006643f, -0.031090f, -0.012294f, -0.012533f, -0.006446f, 0.044309f, 0.003233f, -0.031435f, -0.011111f, -0.080373f, -0.018591f, -0.007781f, 0.052327f, 0.036910f, -0.097856f, -0.040819f, -0.022200f, 0.001821f, 0.007264f, -0.037303f, 0.031793f, 0.018423f, 0.028232f, 0.053008f, -0.062455f, 0.067243f, 0.049275f, -0.017373f, -0.040326f, 0.006313f, -0.007114f, 0.020067f, 0.061536f, 0.051532f, 0.007737f, 0.018874f, -0.040136f, -0.065251f, 0.093731f, 0.045762f, 0.004828f, 0.005199f, -0.020377f, -0.055774f, 0.019773f, -0.005278f, 0.047520f, 0.009446f, 0.017938f, 0.050413f, 0.028974f, -0.001769f, -0.005045f, 0.007460f, -0.030985f, -0.027163f, -0.032986f, -0.020038f, 0.031340f, -0.009938f, 0.002357f, 0.037129f, -0.006248f, 0.015336f, -0.053330f, -0.049991f, -0.032353f, 0.026091f, 0.011757f, -0.003702f, 0.013197f, -0.019105f, -0.047881f, - 0.058861f, -0.057488f, 0.024447f, 0.028025f, 0.019314f, 0.010195f, 0.034418f, -0.023270f, -0.061924f, 0.044421f, 0.121427f, -0.021235f, 0.057125f, -0.071554f, -0.042158f, 0.045520f, 0.022821f, -0.066179f, -0.022449f, -0.004593f, 0.054529f, -0.013263f, -0.010282f, -0.089834f, -0.062848f, -0.019297f, -0.071424f, 0.058006f, 0.055127f, 0.096603f, -0.088136f, 0.038766f, 0.005930f, -0.042786f, -0.006256f, 0.002697f, -0.094118f, 0.018368f, -0.017424f, -0.084110f, -0.046150f, -0.002704f, -0.011611f, -0.028846f, 0.011074f, 0.025816f, 0.003750f, -0.030429f, -0.000515f, -0.029208f, 0.077406f, -0.024463f, 0.002708f, 0.056972f, -0.002309f, -0.060426f, -0.040423f, -0.041607f, -0.017075f, -0.022603f, 0.064599f, 0.005637f, 0.011405f, 0.030785f, -0.016571f, -0.018728f, -0.009835f, -0.019068f, -0.037995f, -0.010069f, 0.073823f, 0.022621f, 0.018149f, -0.049444f, 0.018668f, 0.002879f, -0.033819f, -0.004950f, -0.016616f, 0.078304f, -0.061994f, -0.054990f, -0.018446f, 0.008984f, -0.018103f, 0.001525f, 0.021892f, -0.042123f, -0.010639f, 0.066227f, -0.053712f, 0.008628f, -0.013276f, -0.033735f, -0.057181f, -0.044679f, - 0.002178f, -0.080708f, -0.096663f, 0.022089f, 0.019521f, 0.014691f, -0.086765f, 0.065851f, 0.080223f, -0.028232f, -0.024511f, 0.004388f, -0.004886f, -0.018753f, -0.046983f, 0.032318f, 0.118912f, 0.018728f, 0.021096f, -0.026167f, -0.069923f, 0.019619f, 0.027133f, -0.102959f, 0.056496f, 0.002837f, -0.029499f, 0.010346f, 0.037682f, -0.052922f, 0.032997f, -0.049071f, 0.013447f, -0.002320f, -0.024896f, -0.013293f, -0.006629f, -0.035877f, 0.026337f, 0.023565f, -0.000840f, 0.013339f, 0.001860f, 0.021004f, 0.026731f, 0.026348f, 0.038249f, 0.033394f, -0.019727f, 0.005958f, -0.040871f, 0.044758f, -0.033369f, 0.011713f, -0.005954f, 0.009967f, 0.002785f, -0.030224f, 0.029176f, -0.014729f, -0.029492f, 0.064680f, -0.049955f, 0.016518f, -0.013731f, -0.023913f, 0.026620f, -0.005206f, 0.008690f, 0.041040f, -0.046633f, 0.003511f, -0.057301f, -0.113752f, -0.001546f, 0.038569f, -0.012340f, 0.150287f, 0.031869f, -0.055906f, 0.018121f, -0.078628f, 0.030094f, 0.060370f, 0.070582f, -0.020690f, -0.010985f, -0.086661f, -0.100193f, -0.004685f, -0.060733f, 0.020637f, 0.000994f, -0.073766f, 0.015297f, -0.005494f, - -0.042812f, 0.019171f, -0.027765f, -0.018983f, -0.034543f, 0.017494f, -0.037630f, 0.048126f, -0.005040f, 0.017682f, -0.011043f, 0.064672f, -0.017537f, 0.035394f, -0.000483f, 0.042223f, -0.011757f, -0.021757f, 0.013987f, -0.024612f, -0.025545f, 0.003133f, 0.048480f, 0.030705f, -0.032780f, 0.034739f, -0.024540f, -0.038275f, 0.010829f, 0.051211f, -0.019712f, -0.021630f, 0.027865f, 0.011810f, -0.025542f, 0.002228f, 0.035437f, -0.015392f, -0.033583f, 0.017658f, 0.014414f, 0.020763f, 0.039962f, 0.007366f, -0.023545f, -0.008904f, 0.087464f, 0.090307f, -0.024822f, -0.076997f, 0.058589f, -0.026719f, 0.016949f, 0.006690f, 0.098657f, 0.011751f, -0.050178f, -0.020530f, -0.011543f, 0.000572f, 0.016058f, 0.021164f, 0.032865f, -0.040740f, 0.013310f, 0.005199f, 0.058173f, -0.018313f, 0.041654f, 0.037837f, 0.025931f, 0.013320f, 0.015672f, 0.021285f, 0.104900f, 0.041923f, -0.045097f, 0.009756f, -0.047156f, -0.027952f, -0.001712f, 0.016165f, -0.006121f, 0.036403f, -0.043393f, -0.002854f, 0.019527f, -0.002956f, 0.020278f, -0.004120f, 0.008312f, 0.002905f, -0.030450f, -0.011568f, 0.010409f, -0.031571f, - -0.028404f, 0.001140f, 0.009843f, -0.022861f, 0.017438f, 0.013408f, -0.006889f, -0.016586f, -0.000201f, 0.001849f, -0.003013f, 0.011291f, 0.005649f, 0.008569f, -0.010852f, -0.007135f, 0.026194f, -0.001497f, 0.003876f, 0.009874f, -0.004863f, 0.011054f, -0.009172f, -0.024018f, -0.011521f, 0.021453f, -0.015208f, -0.015239f, 0.004769f, -0.020015f, -0.016160f, 0.026258f, -0.024274f, 0.042505f, 0.013711f, -0.021796f, 0.023703f, 0.000882f, -0.028427f, 0.000519f, -0.000994f, -0.008332f, 0.021007f, -0.003287f, -0.013441f, 0.034767f, -0.016082f, -0.012245f, 0.027166f, 0.002379f, 0.000747f, -0.003594f, 0.017472f, -0.006052f, 0.015546f, -0.014826f, -0.061331f, -0.076410f, 0.064643f, 0.255690f, 0.101735f, 0.116660f, 0.002840f, -0.241708f, -0.175881f, -0.093779f, -0.139895f, 0.062143f, 0.122815f, 0.048944f, 0.216153f, 0.120416f, -0.006797f, 0.049332f, -0.107341f, -0.220341f, -0.086153f, -0.153398f, -0.023010f, 0.104301f, 0.090188f, 0.079268f, 0.135287f, 0.081477f, 0.024094f, 0.035636f, -0.008587f, -0.157112f, -0.067515f, -0.057326f, -0.214054f, 0.038811f, 0.029699f, -0.096846f, 0.156688f, 0.152446f, - -0.003739f, 0.193189f, 0.097091f, -0.091429f, 0.061871f, -0.090902f, -0.185197f, -0.015973f, -0.111191f, -0.164620f, 0.030581f, 0.016336f, -0.008013f, 0.151266f, 0.148785f, 0.086630f, 0.132720f, 0.078370f, -0.048905f, -0.058482f, -0.099883f, -0.175871f, -0.126729f, -0.062641f, -0.055287f, 0.030257f, 0.101273f, 0.066404f, 0.111310f, 0.162754f, 0.067042f, -0.022337f, -0.016383f, -0.113698f, -0.085707f, 0.009021f, -0.091341f, -0.033725f, 0.034008f, -0.006870f}, - {-0.004815f, -0.012030f, -0.003493f, 0.003523f, 0.000648f, 0.003820f, 0.003430f, 0.010792f, -0.002005f, -0.000496f, -0.001213f, -0.007813f, -0.006263f, 0.001472f, 0.001259f, -0.000511f, 0.003768f, -0.011457f, -0.006803f, -0.006586f, 0.003937f, -0.000119f, -0.001678f, -0.002020f, -0.002006f, 0.001805f, 0.002673f, -0.000696f, -0.001486f, 0.004034f, -0.006424f, 0.006509f, 0.004412f, -0.002411f, -0.005353f, -0.001064f, -0.007872f, -0.003369f, -0.011053f, 0.004511f, 0.004142f, -0.000701f, 0.002402f, -0.007214f, 0.006526f, -0.000140f, -0.001093f, 0.005229f, -0.007272f, 0.000231f, 0.006156f, 0.001572f, -0.001687f, 0.000460f, 0.000874f, -0.006669f, 0.005189f, -0.001173f, 0.006411f, 0.000705f, 0.001663f, 0.001246f, 0.002054f, -0.003880f, -0.004502f, -0.004502f, 0.003448f, -0.002734f, 0.000660f, 0.007686f, 0.010107f, 0.005773f, -0.001024f, 0.002362f, -0.000045f, 0.000139f, 0.000914f, 0.006491f, -0.008799f, -0.007006f, -0.001307f, 0.006949f, 0.010028f, -0.004686f, 0.005815f, -0.003193f, -0.008525f, -0.002233f, -0.004811f, 0.002847f, -0.001263f, -0.003998f, 0.003628f, 0.005743f, 0.001161f, 0.006926f, - -0.012668f, -0.013493f, -0.008833f, 0.001336f, -0.000153f, -0.002247f, 0.000531f, 0.004214f, -0.001485f, 0.005665f, 0.004488f, -0.005855f, 0.002118f, -0.000371f, 0.007100f, 0.006752f, 0.002371f, -0.007024f, 0.004499f, -0.004154f, 0.002205f, 0.004732f, -0.011507f, 0.012467f, 0.018021f, 0.002462f, 0.008062f, -0.006619f, -0.001547f, -0.006205f, -0.003473f, 0.005726f, -0.002099f, -0.006412f, -0.001953f, -0.003997f, 0.002893f, -0.003889f, -0.003891f, 0.000480f, 0.003049f, -0.003185f, -0.004039f, -0.001477f, 0.006140f, 0.005987f, -0.005276f, -0.001612f, -0.006208f, 0.001584f, 0.007237f, 0.002461f, -0.003321f, -0.003191f, 0.002290f, -0.000169f, -0.005899f, 0.027888f, 0.012990f, -0.001074f, 0.005970f, 0.005221f, -0.006603f, -0.003391f, 0.007877f, 0.003434f, 0.008566f, -0.006238f, 0.012405f, 0.004522f, -0.012005f, 0.009531f, 0.000635f, -0.000309f, -0.006274f, 0.006953f, -0.012980f, -0.011336f, -0.002279f, -0.004086f, -0.002043f, -0.004102f, 0.001655f, -0.002522f, -0.005310f, -0.004022f, 0.004706f, -0.005057f, 0.003335f, 0.001934f, 0.001431f, -0.005571f, 0.007871f, -0.016214f, -0.002675f, -0.000163f, - -0.002658f, -0.002101f, 0.001568f, 0.002941f, -0.004992f, 0.004047f, -0.006079f, 0.005934f, 0.002105f, 0.001246f, 0.006409f, -0.004434f, -0.000820f, 0.002444f, 0.009937f, 0.002335f, 0.004333f, -0.002296f, -0.008114f, -0.011804f, 0.002483f, 0.006316f, 0.008684f, -0.003470f, -0.012723f, 0.001897f, -0.004900f, -0.003716f, -0.002486f, 0.003588f, 0.001054f, 0.012787f, 0.000462f, 0.004265f, 0.003655f, -0.002025f, -0.001600f, -0.003773f, 0.015081f, 0.003521f, -0.012721f, -0.014419f, 0.003984f, -0.004358f, -0.011930f, 0.013646f, -0.006622f, -0.002145f, -0.001793f, 0.010744f, 0.002316f, -0.006067f, 0.007562f, -0.005672f, 0.011398f, -0.015479f, -0.010193f, 0.012593f, -0.012855f, -0.012934f, -0.005124f, 0.010818f, 0.004808f, 0.005293f, -0.001087f, 0.009747f, 0.005944f, -0.000753f, -0.012394f, 0.003657f, -0.003298f, 0.004801f, 0.004207f, 0.003723f, 0.011149f, 0.003244f, -0.010517f, 0.001330f, 0.007748f, 0.011367f, 0.003982f, -0.005632f, -0.001134f, -0.008464f, 0.004108f, -0.015310f, -0.000289f, 0.017516f, 0.001260f, 0.002355f, -0.008365f, -0.010239f, 0.002050f, 0.002980f, 0.012938f, -0.002052f, - 0.001519f, 0.002055f, -0.001383f, 0.002096f, 0.004663f, 0.001640f, 0.009343f, -0.001390f, 0.006422f, 0.001997f, 0.002193f, 0.002363f, 0.010989f, 0.001976f, -0.000746f, 0.003832f, -0.001500f, -0.033987f, -0.023331f, -0.004272f, 0.003115f, 0.006324f, -0.000049f, 0.000720f, -0.013857f, -0.000027f, -0.003478f, -0.001400f, -0.000281f, -0.002528f, -0.002077f, -0.008926f, 0.004554f, -0.019713f, -0.008043f, 0.002773f, -0.004625f, -0.005345f, -0.004073f, -0.010743f, -0.006390f, -0.003856f, -0.005986f, 0.003643f, -0.009478f, -0.003912f, 0.010878f, 0.008452f, 0.000413f, 0.006558f, 0.003647f, -0.002492f, -0.007837f, 0.005709f, 0.016528f, 0.003183f, 0.001864f, -0.005299f, -0.006133f, 0.006312f, -0.014570f, -0.006232f, 0.015795f, -0.013097f, 0.004287f, -0.001933f, -0.007434f, 0.004980f, 0.001031f, -0.002372f, 0.000941f, 0.004213f, -0.005006f, 0.001903f, -0.000910f, 0.011797f, 0.008870f, 0.003367f, 0.002555f, 0.006483f, -0.000017f, 0.000463f, -0.003044f, -0.017654f, 0.010244f, 0.008951f, -0.004956f, 0.002956f, -0.007777f, 0.001354f, 0.002065f, -0.001762f, 0.003842f, -0.001599f, -0.029359f, 0.003997f, - 0.007624f, -0.002523f, -0.002045f, -0.017238f, -0.006220f, 0.003891f, -0.014259f, -0.014870f, 0.003444f, -0.014190f, -0.006424f, -0.001040f, -0.007638f, 0.003894f, -0.005926f, 0.009414f, -0.004861f, -0.004241f, 0.003671f, 0.006346f, 0.013567f, 0.007443f, -0.014170f, -0.001555f, -0.000659f, 0.006432f, 0.011213f, 0.017575f, -0.007766f, -0.008007f, 0.009890f, -0.010827f, 0.002686f, 0.002072f, 0.015851f, 0.004872f, 0.008979f, -0.012363f, -0.004799f, -0.016584f, 0.012752f, 0.012225f, 0.015271f, -0.001070f, -0.002983f, -0.010890f, -0.001885f, 0.009255f, -0.004477f, -0.007309f, -0.005787f, -0.008720f, 0.001866f, 0.001040f, 0.002506f, -0.011605f, -0.000027f, -0.011368f, -0.000475f, -0.002339f, 0.004392f, 0.003010f, -0.003185f, -0.005471f, -0.013361f, -0.001382f, -0.001021f, 0.007765f, -0.005111f, 0.013370f, -0.007715f, 0.001528f, 0.006589f, 0.012485f, -0.009211f, 0.001095f, 0.036319f, 0.032552f, -0.001913f, 0.001699f, 0.015764f, 0.003003f, 0.007318f, -0.004219f, 0.008290f, -0.006261f, 0.015902f, 0.006446f, -0.000776f, 0.004132f, 0.000356f, 0.021855f, 0.013457f, -0.013146f, -0.012364f, 0.005200f, - 0.001404f, -0.003741f, -0.003848f, 0.003375f, 0.009290f, 0.008214f, 0.003773f, 0.001768f, 0.004489f, -0.002854f, -0.001149f, 0.012315f, -0.013674f, 0.005799f, 0.014664f, 0.012322f, 0.020248f, -0.001432f, -0.004122f, -0.001203f, 0.000419f, -0.006117f, 0.022055f, 0.021686f, 0.014117f, -0.006391f, -0.003038f, 0.009560f, 0.006346f, -0.005839f, 0.000475f, 0.012633f, -0.005477f, -0.005083f, 0.006692f, -0.021795f, -0.003583f, 0.001755f, 0.002293f, -0.007069f, -0.015600f, 0.006419f, 0.008991f, -0.011470f, -0.005418f, -0.012570f, 0.003835f, 0.001171f, -0.003668f, -0.002638f, -0.012160f, 0.018830f, -0.005738f, 0.002153f, -0.019682f, -0.005627f, -0.008456f, 0.024243f, -0.000779f, 0.015243f, 0.021243f, -0.011342f, -0.025827f, 0.000874f, 0.019881f, -0.015517f, 0.013984f, -0.004370f, -0.018695f, -0.008930f, 0.019013f, -0.018760f, -0.016256f, 0.011611f, -0.018824f, 0.005996f, 0.009040f, 0.007099f, -0.005335f, 0.011113f, 0.003226f, 0.001814f, 0.007341f, -0.012406f, 0.016400f, 0.007725f, 0.007084f, -0.003771f, -0.001906f, 0.030239f, -0.010819f, 0.001492f, 0.007859f, 0.014987f, -0.021086f, -0.017692f, - -0.016226f, 0.000156f, 0.001002f, -0.001559f, 0.009536f, 0.002529f, 0.017161f, 0.006477f, 0.009928f, -0.002190f, 0.001063f, -0.009179f, 0.015216f, -0.007647f, 0.014967f, -0.009002f, -0.013646f, 0.022154f, 0.018077f, -0.026951f, -0.023675f, -0.015976f, -0.012476f, 0.007468f, 0.000679f, -0.006164f, 0.011373f, 0.012409f, -0.016772f, 0.008430f, -0.002181f, -0.033058f, -0.011574f, -0.017276f, -0.015765f, 0.004356f, -0.006198f, -0.014356f, -0.018958f, 0.011178f, -0.010696f, -0.008704f, -0.006462f, -0.023103f, -0.001893f, 0.009588f, -0.005635f, -0.001871f, -0.007780f, 0.018120f, 0.003354f, 0.011352f, 0.009534f, -0.015530f, 0.015890f, 0.022564f, -0.006606f, -0.009959f, 0.002949f, -0.004544f, 0.010431f, -0.029092f, 0.011397f, 0.024184f, -0.002834f, -0.008647f, -0.006600f, 0.010194f, 0.022593f, -0.005824f, 0.006030f, -0.010462f, 0.015604f, -0.018875f, -0.006587f, 0.002956f, -0.002447f, -0.014802f, 0.026529f, 0.017795f, 0.014189f, -0.006460f, -0.019307f, -0.003084f, -0.027602f, 0.004150f, -0.001688f, -0.001597f, -0.000257f, -0.004947f, 0.015461f, 0.012076f, -0.019153f, 0.010068f, -0.011389f, 0.015238f, - -0.001269f, -0.004138f, -0.001175f, -0.017956f, -0.003149f, -0.016527f, -0.034350f, -0.002636f, 0.003965f, 0.001553f, -0.013379f, -0.001714f, -0.004120f, -0.027061f, -0.000054f, 0.020833f, -0.014961f, 0.004290f, -0.036138f, 0.002578f, 0.021045f, 0.011555f, -0.016451f, -0.013304f, 0.026415f, 0.006192f, 0.005966f, -0.005092f, 0.006878f, -0.000142f, -0.017594f, -0.004456f, -0.018468f, 0.008937f, -0.010959f, -0.001502f, -0.017966f, -0.019792f, -0.026771f, 0.017051f, 0.011482f, -0.008375f, -0.009447f, 0.007827f, -0.024539f, -0.001958f, 0.002022f, 0.006285f, 0.011024f, 0.005647f, 0.000878f, -0.008170f, 0.003786f, -0.007443f, 0.006718f, -0.007093f, 0.004514f, 0.002750f, -0.007602f, -0.009659f, -0.019124f, -0.012232f, 0.005124f, -0.032447f, -0.008770f, 0.018732f, 0.009875f, -0.003323f, 0.043341f, -0.005531f, 0.020199f, 0.020517f, -0.031198f, 0.002873f, -0.003965f, -0.025646f, -0.013690f, -0.013637f, 0.000629f, 0.004163f, 0.029922f, -0.003638f, 0.002945f, 0.021469f, 0.014988f, -0.002102f, 0.020020f, -0.007932f, -0.007623f, -0.011590f, -0.018296f, -0.023743f, -0.010692f, 0.017696f, -0.028997f, 0.003120f, - 0.023803f, -0.003248f, 0.007005f, -0.011030f, 0.006178f, 0.011533f, -0.007309f, 0.010051f, -0.014681f, -0.013928f, 0.022119f, 0.013756f, 0.013986f, 0.019598f, -0.000941f, -0.013852f, 0.019046f, -0.016121f, -0.024204f, 0.001655f, 0.021152f, -0.001802f, -0.019778f, 0.003981f, 0.025074f, -0.002307f, 0.006363f, 0.003950f, 0.035519f, 0.003775f, 0.007065f, 0.019397f, -0.002941f, -0.007690f, -0.018002f, 0.004056f, -0.003034f, -0.015033f, -0.000062f, -0.008134f, 0.006068f, 0.026303f, -0.000318f, -0.013019f, -0.004935f, -0.011887f, -0.007832f, -0.000230f, -0.006297f, 0.005296f, -0.018793f, 0.021709f, -0.010847f, 0.035340f, -0.008815f, -0.021939f, 0.000964f, 0.003464f, 0.011388f, 0.007425f, 0.005990f, -0.022258f, -0.020457f, 0.017137f, -0.021294f, -0.026335f, 0.007935f, 0.008724f, -0.007105f, 0.034606f, -0.026257f, -0.032152f, 0.012267f, -0.020754f, 0.000261f, 0.001429f, -0.019239f, 0.010600f, 0.001139f, 0.026224f, 0.027681f, 0.039754f, 0.018235f, 0.008299f, 0.005541f, 0.012961f, -0.013574f, 0.014986f, -0.024072f, 0.011459f, -0.002402f, -0.002320f, -0.046150f, -0.018150f, -0.007642f, 0.015341f, - -0.002061f, 0.003414f, 0.004892f, 0.003743f, -0.023674f, 0.023890f, -0.001053f, 0.009390f, 0.000667f, 0.022165f, -0.024599f, 0.016351f, -0.012184f, -0.001284f, 0.018250f, -0.021693f, -0.009545f, -0.023641f, -0.009282f, -0.026307f, 0.022914f, 0.016007f, 0.030845f, -0.002611f, 0.007111f, -0.029490f, 0.006191f, -0.030640f, 0.028245f, 0.006648f, -0.004917f, 0.025448f, 0.027257f, 0.012371f, -0.016738f, -0.026405f, -0.035646f, -0.003661f, -0.012861f, -0.020131f, 0.018775f, -0.007890f, 0.044196f, -0.036010f, -0.012517f, 0.022130f, -0.027131f, -0.014498f, 0.005529f, -0.004173f, -0.004610f, -0.031229f, 0.010719f, -0.003082f, -0.015297f, 0.000936f, 0.007868f, 0.006318f, 0.040930f, -0.009035f, 0.005214f, -0.001819f, -0.014378f, 0.018979f, -0.007563f, 0.007206f, 0.001440f, 0.026936f, -0.009242f, 0.031317f, -0.000375f, 0.015645f, 0.012805f, -0.002347f, -0.011085f, -0.030245f, 0.013335f, 0.031545f, 0.000550f, -0.000265f, 0.020727f, 0.018462f, -0.002566f, 0.003265f, 0.036270f, 0.023302f, -0.008144f, 0.007894f, 0.023284f, -0.006569f, -0.028815f, 0.000242f, -0.021395f, -0.003610f, -0.014199f, 0.000609f, - -0.039508f, -0.011922f, -0.015549f, -0.000066f, 0.006063f, 0.007172f, 0.034848f, 0.039777f, 0.019405f, -0.029107f, -0.018736f, 0.021770f, 0.029807f, 0.005585f, -0.031663f, -0.006135f, -0.009457f, -0.032001f, -0.021962f, -0.024743f, 0.025406f, -0.012366f, 0.000810f, -0.030763f, 0.038507f, 0.028589f, -0.007095f, 0.010154f, 0.065402f, -0.006558f, -0.018790f, -0.030367f, -0.006977f, 0.013749f, 0.007829f, -0.017480f, 0.010118f, -0.019958f, -0.027903f, 0.036897f, -0.022341f, 0.027326f, -0.019362f, -0.034221f, 0.003689f, 0.038328f, 0.028112f, -0.031910f, -0.017820f, 0.004858f, 0.008104f, 0.011631f, -0.000193f, 0.024915f, 0.016526f, 0.033485f, -0.010756f, -0.007944f, 0.000945f, -0.008861f, -0.031987f, -0.027190f, -0.005670f, 0.033726f, 0.009671f, 0.000854f, 0.003466f, -0.035193f, -0.035590f, -0.031189f, 0.017418f, 0.015378f, -0.010635f, -0.010431f, 0.005645f, 0.002238f, -0.017832f, 0.003973f, 0.040026f, 0.004778f, 0.025994f, 0.021376f, 0.019104f, 0.038624f, 0.060473f, 0.017299f, 0.003525f, 0.006634f, 0.025460f, -0.013787f, -0.003834f, 0.013761f, -0.002567f, 0.006637f, -0.002644f, 0.023490f, - 0.011663f, 0.016239f, -0.002071f, -0.008106f, 0.015667f, 0.032096f, 0.000604f, -0.028726f, 0.020716f, -0.044131f, -0.046520f, -0.018136f, 0.029217f, -0.017580f, -0.045595f, -0.030893f, -0.008504f, 0.017305f, 0.015597f, -0.069322f, 0.003685f, 0.035435f, -0.006512f, -0.007984f, 0.042789f, -0.022591f, -0.023597f, -0.029795f, -0.009878f, -0.009752f, -0.019934f, 0.006472f, 0.010034f, 0.017045f, 0.011929f, -0.009029f, -0.007281f, -0.002718f, -0.008147f, 0.003616f, 0.008496f, 0.035623f, -0.014423f, -0.044211f, 0.024658f, 0.001136f, -0.000728f, -0.036489f, 0.017374f, 0.008363f, -0.003176f, 0.043874f, -0.011468f, 0.005874f, -0.003142f, 0.020143f, 0.023599f, -0.023615f, -0.001530f, -0.012563f, -0.000645f, 0.014324f, -0.008413f, 0.021200f, -0.029413f, -0.023756f, -0.014957f, -0.025405f, -0.003513f, 0.004388f, 0.005502f, -0.036055f, -0.023685f, 0.020244f, 0.032104f, -0.012346f, -0.015719f, 0.018495f, -0.033331f, -0.029109f, -0.029011f, 0.036199f, -0.055099f, 0.021147f, -0.001428f, -0.030583f, -0.009025f, 0.031241f, 0.073726f, -0.006542f, -0.018310f, 0.026940f, 0.056733f, 0.022882f, -0.011531f, 0.012954f, - -0.007376f, -0.035861f, -0.065571f, -0.000414f, 0.068271f, -0.008235f, -0.008344f, -0.044051f, -0.006798f, 0.000057f, 0.001692f, 0.018856f, -0.001081f, 0.016226f, -0.002304f, 0.002456f, -0.036917f, 0.008036f, 0.027400f, -0.017443f, 0.034757f, -0.012759f, -0.005608f, -0.030422f, 0.018324f, -0.013497f, -0.014176f, -0.035575f, -0.055988f, 0.030252f, -0.029016f, -0.021983f, 0.005952f, 0.008783f, -0.014659f, 0.005994f, 0.026530f, -0.005421f, -0.031816f, -0.014217f, -0.039824f, -0.000955f, 0.007063f, 0.028816f, 0.001791f, -0.003816f, -0.009662f, -0.011424f, 0.005314f, 0.029996f, 0.000874f, -0.012567f, 0.026335f, -0.024622f, -0.000484f, -0.045166f, -0.018105f, -0.005415f, 0.057050f, -0.033953f, 0.008674f, -0.007817f, 0.004157f, -0.002133f, -0.010704f, 0.006488f, 0.020635f, 0.013302f, -0.049020f, 0.055777f, 0.010631f, 0.025160f, 0.001718f, -0.010296f, -0.019737f, 0.007687f, -0.031543f, -0.017410f, 0.065590f, -0.007394f, 0.004953f, -0.033587f, 0.030312f, -0.016977f, 0.022172f, -0.017137f, 0.039398f, 0.004894f, 0.003516f, -0.018508f, -0.016455f, 0.024218f, 0.051217f, -0.020615f, -0.032123f, 0.015844f, - -0.012995f, 0.035128f, 0.042571f, 0.022276f, -0.007058f, 0.027708f, -0.018316f, -0.015460f, 0.035651f, 0.050950f, -0.056442f, 0.005651f, 0.007723f, 0.010548f, -0.019518f, -0.000209f, 0.021916f, -0.055322f, 0.016316f, 0.034123f, 0.011750f, -0.023958f, -0.007625f, 0.041673f, 0.032475f, 0.012219f, -0.019792f, -0.023693f, -0.049602f, 0.070918f, 0.011840f, 0.037081f, -0.006024f, -0.013568f, 0.006957f, 0.022152f, -0.000235f, 0.000197f, -0.057720f, 0.010143f, 0.052550f, -0.008193f, 0.050242f, -0.029384f, -0.015000f, -0.020031f, 0.010682f, 0.049752f, -0.016649f, 0.000113f, 0.042025f, 0.054876f, -0.019330f, -0.037392f, -0.037080f, -0.028713f, 0.027412f, 0.018318f, 0.047543f, -0.015194f, 0.034677f, -0.018995f, -0.006175f, 0.030128f, -0.000148f, 0.041460f, -0.050661f, 0.031007f, 0.006733f, 0.013013f, -0.019914f, 0.014254f, 0.039237f, 0.073340f, -0.016450f, 0.017510f, -0.000314f, -0.051152f, 0.046195f, 0.003010f, 0.018465f, -0.010724f, -0.022567f, -0.010349f, -0.001267f, -0.021035f, -0.011488f, 0.061634f, 0.005035f, 0.022496f, -0.017589f, 0.043009f, 0.000814f, 0.019768f, 0.009777f, -0.028461f, - -0.005070f, -0.018455f, 0.001026f, 0.005834f, 0.053740f, 0.024692f, 0.002790f, 0.003840f, -0.001330f, -0.006984f, 0.009294f, 0.002648f, 0.033918f, 0.024371f, 0.014292f, -0.018706f, 0.023820f, 0.045702f, -0.045211f, 0.039596f, 0.007669f, 0.009679f, -0.045243f, -0.025156f, -0.056942f, -0.050106f, -0.007970f, 0.027929f, 0.027591f, -0.083658f, 0.001339f, -0.039250f, 0.021589f, 0.077996f, 0.043838f, -0.051944f, 0.033406f, 0.020115f, 0.026929f, -0.068360f, -0.102909f, -0.028010f, -0.010888f, -0.026567f, 0.006542f, 0.034039f, -0.035792f, 0.051832f, 0.020071f, -0.077068f, -0.057651f, -0.012684f, 0.042349f, 0.000520f, 0.004198f, -0.008942f, -0.023425f, -0.074633f, 0.003707f, -0.062855f, -0.050614f, 0.024171f, 0.020586f, 0.017234f, -0.008057f, -0.024946f, 0.056398f, 0.032527f, -0.023133f, -0.049182f, 0.037378f, 0.017735f, 0.009176f, -0.023578f, -0.056060f, 0.020650f, -0.026110f, 0.007671f, -0.047758f, 0.057749f, 0.001801f, -0.024176f, 0.006016f, 0.014046f, 0.048528f, 0.029548f, -0.012158f, -0.002978f, 0.017060f, 0.016239f, 0.018698f, -0.011386f, -0.075465f, -0.059668f, 0.011986f, -0.008333f, - 0.044105f, -0.008482f, -0.019118f, -0.053090f, 0.061664f, 0.024164f, -0.043407f, -0.043786f, 0.063147f, 0.060592f, -0.000990f, 0.045241f, -0.006187f, 0.003764f, -0.018305f, -0.007821f, -0.034095f, 0.005276f, 0.036886f, 0.003052f, -0.025131f, -0.066387f, 0.104375f, 0.002101f, -0.079837f, -0.006600f, -0.029403f, 0.013064f, 0.040370f, 0.035683f, -0.044192f, -0.072258f, 0.012760f, -0.034865f, 0.011450f, -0.007534f, 0.032137f, -0.010927f, 0.005037f, 0.018239f, -0.028788f, -0.036489f, 0.004316f, 0.008869f, 0.031836f, -0.001288f, -0.049573f, 0.032375f, -0.027412f, 0.025311f, -0.023751f, -0.017131f, -0.002194f, -0.008559f, -0.053314f, 0.009498f, 0.015603f, -0.052709f, 0.022590f, -0.021116f, 0.011004f, -0.018042f, 0.050893f, 0.038492f, -0.050140f, -0.027632f, 0.035254f, 0.042691f, -0.051297f, 0.067779f, 0.005077f, 0.054399f, 0.040742f, 0.064300f, -0.019480f, -0.028498f, 0.015305f, -0.054945f, 0.008955f, 0.005865f, 0.095605f, -0.030448f, -0.088448f, 0.149460f, -0.070378f, -0.055924f, 0.087590f, 0.037910f, -0.049854f, 0.082967f, 0.010207f, -0.070028f, 0.086372f, -0.092971f, 0.012412f, 0.028551f, - -0.070687f, 0.032637f, 0.018028f, -0.024063f, -0.007546f, -0.000692f, -0.017742f, -0.005099f, -0.010629f, -0.030724f, 0.000314f, -0.015042f, -0.004017f, -0.007114f, 0.014649f, 0.056445f, 0.046169f, -0.042521f, -0.005380f, 0.059389f, -0.010938f, -0.010426f, -0.060796f, 0.007579f, 0.019057f, -0.009193f, 0.050531f, 0.123511f, -0.042074f, -0.051102f, 0.086684f, -0.005149f, -0.047988f, 0.055289f, 0.035064f, -0.027585f, -0.043289f, -0.051617f, 0.014988f, 0.028860f, -0.024372f, 0.083209f, 0.052653f, -0.101984f, -0.099854f, 0.058353f, -0.047734f, -0.059264f, 0.076582f, 0.013445f, 0.102865f, 0.051032f, -0.014365f, -0.013100f, -0.077219f, -0.057778f, 0.169403f, 0.048347f, -0.039149f, -0.081975f, -0.000358f, -0.032787f, -0.077187f, -0.010528f, 0.083268f, 0.037933f, -0.003121f, 0.072395f, 0.057360f, -0.019062f, -0.086002f, 0.012762f, 0.039255f, -0.018614f, 0.094910f, 0.075532f, -0.018773f, 0.053140f, 0.007644f, -0.044592f, 0.029342f, 0.045129f, 0.017712f, 0.018459f, -0.059521f, -0.014398f, 0.009275f, 0.010587f, -0.006974f, -0.055400f, -0.017162f, 0.017423f, -0.010883f, -0.007581f, -0.043100f, 0.067617f, - 0.010934f, -0.059290f, 0.034765f, 0.079679f, -0.039809f, -0.026524f, 0.014310f, 0.024918f, -0.023911f, -0.053444f, 0.046566f, 0.072165f, -0.003413f, -0.031319f, 0.012244f, 0.018849f, 0.036492f, 0.045340f, 0.005878f, 0.084300f, 0.000891f, -0.098789f, 0.003670f, -0.013292f, 0.034470f, -0.012614f, -0.075619f, -0.004798f, -0.030771f, -0.035945f, 0.050635f, 0.021989f, 0.030474f, 0.030942f, -0.066893f, -0.040102f, -0.008530f, -0.004346f, 0.032573f, -0.002662f, -0.010099f, -0.001987f, -0.019535f, -0.052470f, 0.009656f, 0.069916f, -0.033006f, 0.001525f, -0.023811f, -0.028041f, 0.058148f, -0.071282f, 0.007888f, 0.015772f, -0.009225f, -0.011078f, -0.079542f, -0.116634f, -0.101338f, 0.204123f, 0.196730f, 0.194223f, 0.552993f, 0.194635f, -0.022485f, 0.034508f, -0.381967f, -0.467425f, -0.156441f, -0.263368f, -0.362156f, 0.044113f, -0.020535f, -0.063181f, 0.397912f, 0.240446f, 0.100788f, 0.619356f, 0.292811f, 0.051078f, 0.282545f, -0.070782f, -0.340066f, -0.327997f, -0.310611f, -0.432107f, -0.421090f, -0.102662f, -0.153451f, -0.251312f, 0.285836f, 0.127954f, -0.106453f, 0.411150f, 0.131508f, -0.054291f, - 0.467375f, 0.423022f, 0.095196f, 0.438828f, 0.447559f, -0.023871f, 0.107792f, 0.044110f, -0.439294f, -0.511932f, -0.380903f, -0.718178f, -0.678274f, -0.412559f, -0.545771f, -0.415123f, 0.038992f, 0.323505f, 0.370826f, 0.802518f, 0.731039f, 0.640207f, 0.693107f, 0.505114f, 0.252380f, 0.065739f, -0.069184f, -0.412250f, -0.491157f, -0.529252f, -0.591486f, -0.566764f, -0.482971f, -0.322901f, -0.235435f, -0.231873f, 0.044245f, 0.151184f, 0.139509f, 0.037178f} - }, - { - {0.004483f, 0.000450f, 0.005038f, -0.005236f, -0.008966f, -0.000363f, -0.006137f, -0.000559f, -0.001617f, -0.014172f, -0.011481f, -0.002036f, -0.004621f, 0.005652f, -0.002490f, 0.002602f, 0.003160f, 0.001222f, -0.002197f, -0.000082f, -0.005336f, 0.000321f, 0.005810f, 0.003438f, -0.002742f, 0.000153f, 0.003075f, -0.007659f, -0.002381f, 0.000583f, 0.003113f, -0.003223f, -0.007313f, -0.001907f, -0.007217f, 0.001098f, -0.003060f, -0.003042f, 0.003423f, -0.003806f, 0.002888f, 0.001527f, 0.001916f, -0.005876f, 0.001814f, 0.000347f, 0.003129f, -0.005072f, 0.002962f, 0.002324f, 0.004674f, -0.001255f, 0.005972f, 0.002901f, 0.006067f, 0.003402f, -0.004883f, -0.002553f, 0.011785f, 0.001404f, -0.001600f, 0.000823f, -0.000097f, 0.006905f, 0.000223f, -0.003881f, -0.001887f, 0.007976f, -0.003527f, -0.001704f, -0.008453f, -0.000868f, -0.003145f, 0.003394f, -0.000705f, -0.000875f, -0.003615f, -0.007178f, 0.026073f, 0.013275f, 0.011672f, 0.005963f, -0.002420f, -0.001182f, -0.002339f, -0.005743f, -0.007146f, -0.005656f, -0.007318f, -0.003618f, 0.007500f, 0.002048f, -0.000120f, -0.000438f, 0.004989f, 0.001764f, - -0.002761f, -0.003684f, -0.002203f, -0.013890f, 0.005781f, 0.000925f, 0.000339f, -0.003265f, 0.001940f, -0.000274f, -0.003522f, 0.001410f, 0.005091f, -0.000562f, -0.005961f, -0.002120f, -0.002492f, -0.003430f, 0.000902f, 0.005308f, -0.001393f, 0.000777f, -0.006891f, 0.003865f, -0.008554f, 0.004861f, 0.001327f, -0.000362f, 0.000160f, 0.004778f, -0.006573f, -0.005689f, -0.008999f, 0.001625f, 0.001691f, -0.000374f, 0.005226f, -0.006458f, 0.001247f, -0.001678f, 0.000179f, -0.005048f, 0.003615f, 0.000608f, -0.002990f, 0.004481f, -0.008901f, 0.002883f, -0.004845f, 0.007770f, 0.004179f, 0.000134f, 0.000733f, -0.003477f, -0.010940f, 0.006536f, -0.002191f, 0.024142f, 0.012182f, 0.015605f, 0.004865f, 0.005008f, -0.000466f, 0.005833f, 0.001130f, 0.005136f, -0.003645f, 0.010443f, -0.002287f, -0.012893f, -0.002932f, -0.000191f, 0.001167f, -0.004397f, 0.010031f, 0.000084f, 0.004219f, 0.008780f, 0.005009f, -0.000336f, 0.000486f, 0.001757f, -0.007911f, -0.006006f, 0.003852f, 0.003574f, -0.002550f, 0.000439f, 0.004631f, -0.008786f, 0.012291f, -0.001648f, 0.002261f, -0.002308f, 0.004902f, 0.005630f, - 0.000841f, -0.006824f, -0.005968f, 0.012325f, 0.000834f, -0.004177f, 0.000014f, 0.006907f, 0.005999f, -0.004250f, -0.004556f, -0.011717f, -0.002919f, -0.005078f, 0.001055f, -0.004636f, 0.001603f, -0.011412f, -0.003862f, 0.000793f, -0.003836f, 0.001923f, 0.005055f, -0.002714f, 0.000369f, 0.001564f, -0.002089f, 0.003786f, 0.000413f, 0.004881f, 0.000852f, -0.002421f, -0.005421f, 0.000149f, -0.006770f, 0.001924f, 0.001580f, 0.005563f, -0.016970f, -0.004993f, -0.004163f, 0.003254f, 0.002887f, -0.010983f, -0.005481f, -0.001885f, 0.002326f, 0.006396f, 0.001498f, 0.008635f, -0.007232f, -0.009504f, 0.002449f, 0.000700f, -0.002187f, -0.006394f, 0.021506f, -0.000777f, 0.005407f, 0.001678f, 0.000251f, -0.000124f, -0.003818f, -0.007965f, -0.006991f, -0.001676f, 0.005147f, -0.004282f, 0.011016f, -0.003510f, -0.001546f, -0.009029f, -0.011685f, -0.000581f, -0.007641f, -0.003586f, 0.014759f, -0.007957f, -0.002841f, -0.007710f, 0.002426f, 0.000785f, -0.003502f, -0.008112f, -0.002206f, 0.000481f, -0.010273f, 0.001556f, -0.005836f, 0.008157f, 0.004423f, -0.004021f, -0.003066f, -0.002022f, 0.001635f, 0.000026f, - 0.005363f, -0.002718f, -0.004869f, -0.003673f, 0.013030f, 0.013062f, -0.005290f, -0.011612f, 0.000573f, 0.004268f, -0.001585f, 0.004102f, -0.006403f, 0.001558f, -0.007484f, 0.004760f, -0.001892f, 0.013923f, 0.002777f, -0.054210f, -0.009193f, -0.015364f, -0.018194f, 0.005163f, -0.006392f, -0.015145f, -0.013211f, 0.002528f, -0.013020f, 0.002179f, 0.018535f, -0.004309f, 0.007754f, 0.006537f, 0.015573f, 0.004539f, -0.011449f, 0.002951f, 0.016953f, -0.007666f, 0.008257f, -0.012349f, -0.012005f, 0.004252f, 0.004598f, 0.014051f, 0.000426f, -0.007889f, 0.007521f, -0.005131f, 0.005677f, -0.000221f, 0.008193f, -0.006784f, -0.005125f, -0.007611f, -0.000307f, 0.002003f, -0.003607f, 0.006782f, -0.014770f, 0.002407f, 0.013999f, 0.003714f, -0.004572f, 0.006171f, -0.007884f, -0.003118f, -0.018613f, -0.004706f, -0.001148f, 0.003517f, -0.000275f, 0.010439f, -0.015148f, 0.002167f, -0.002661f, 0.008116f, 0.003190f, -0.001962f, 0.009559f, -0.008172f, -0.002099f, -0.006308f, -0.014945f, -0.004816f, -0.004338f, -0.002769f, 0.009182f, -0.008071f, -0.016674f, 0.002148f, 0.002920f, 0.000420f, -0.027160f, 0.015499f, - 0.017440f, -0.000936f, 0.009782f, 0.004465f, 0.020600f, 0.027411f, 0.003506f, 0.003598f, 0.007847f, 0.003417f, 0.004539f, -0.003882f, 0.005403f, -0.004504f, 0.007178f, 0.008399f, -0.023500f, 0.012182f, -0.002607f, -0.004333f, -0.007300f, -0.009486f, 0.003795f, 0.006695f, 0.010638f, 0.002113f, 0.001764f, -0.013676f, 0.000538f, -0.003964f, -0.004647f, -0.001988f, 0.001757f, 0.000840f, -0.001132f, 0.013532f, -0.000792f, -0.004407f, 0.004353f, -0.005162f, 0.006800f, 0.009192f, 0.010069f, 0.005393f, 0.000992f, -0.005553f, 0.011242f, 0.003749f, 0.001389f, 0.001347f, 0.001345f, 0.001002f, -0.006745f, -0.009062f, 0.008246f, -0.008398f, 0.007882f, 0.007649f, 0.005212f, -0.000857f, -0.006314f, 0.005910f, 0.006949f, 0.016374f, 0.007110f, 0.006580f, 0.003485f, -0.014831f, -0.005035f, 0.002826f, -0.002809f, 0.007918f, -0.013773f, 0.002477f, 0.050249f, 0.015278f, 0.003618f, 0.009937f, 0.025058f, 0.010226f, 0.030233f, 0.007511f, -0.006818f, -0.002108f, -0.002674f, -0.002835f, 0.008101f, 0.013064f, -0.006185f, 0.002843f, 0.008923f, -0.003328f, -0.012766f, 0.010060f, -0.001343f, 0.004794f, - -0.004458f, -0.006310f, 0.010149f, 0.002420f, -0.001118f, -0.002928f, -0.011667f, -0.005685f, 0.006045f, 0.001553f, -0.004137f, -0.002032f, 0.001554f, 0.004304f, 0.011370f, 0.003624f, -0.010851f, -0.002484f, 0.000491f, -0.003394f, 0.003633f, 0.005428f, -0.010942f, -0.013027f, -0.000959f, 0.003182f, -0.001584f, 0.009942f, -0.018692f, -0.004008f, -0.008595f, -0.010492f, -0.001354f, -0.000903f, 0.002518f, 0.009795f, -0.000310f, 0.001380f, 0.002988f, -0.001715f, 0.012991f, 0.008306f, -0.011044f, -0.009626f, 0.007029f, 0.015873f, -0.001591f, -0.007598f, 0.015556f, 0.008228f, 0.003411f, -0.007061f, 0.024022f, 0.012670f, 0.021547f, -0.006851f, -0.000535f, -0.005018f, 0.021682f, -0.022433f, -0.004024f, 0.006519f, -0.005185f, -0.003967f, 0.006720f, -0.002004f, -0.007912f, 0.020241f, 0.010292f, 0.002826f, 0.032385f, -0.008532f, -0.003076f, -0.006499f, -0.000633f, 0.006011f, -0.009487f, -0.000593f, -0.005386f, 0.013179f, -0.011682f, 0.003339f, -0.000240f, -0.002898f, 0.000142f, 0.007913f, 0.004037f, -0.009645f, -0.018676f, 0.000846f, 0.002509f, 0.014987f, 0.015949f, 0.017421f, 0.000361f, -0.009428f, - 0.011011f, -0.029336f, -0.006171f, -0.011316f, -0.018624f, 0.012426f, -0.005370f, -0.005289f, 0.007973f, -0.003136f, -0.006593f, 0.026184f, -0.001300f, -0.007415f, 0.007326f, 0.000898f, 0.005061f, 0.005226f, 0.001446f, 0.015824f, -0.011502f, -0.005710f, -0.001348f, -0.013484f, -0.002614f, 0.002465f, -0.006238f, 0.004423f, 0.004503f, 0.016136f, -0.010206f, 0.004794f, 0.008657f, 0.005455f, -0.038695f, -0.057715f, -0.009918f, 0.003062f, -0.001146f, 0.001808f, -0.002837f, -0.011391f, -0.006654f, -0.009022f, -0.002587f, 0.009660f, 0.011150f, -0.009935f, -0.015100f, 0.013133f, 0.002617f, -0.007969f, 0.000642f, -0.001070f, -0.009182f, -0.007377f, 0.021364f, 0.011200f, -0.011456f, 0.006178f, 0.002463f, 0.009494f, -0.011073f, 0.012771f, -0.012302f, 0.008906f, 0.005681f, -0.002226f, -0.005646f, 0.005914f, -0.022943f, -0.011044f, 0.014336f, 0.023228f, 0.012860f, -0.015504f, 0.000613f, -0.010849f, 0.015423f, 0.003610f, 0.004230f, 0.001567f, -0.012157f, 0.006568f, 0.018910f, 0.002612f, 0.014424f, 0.010459f, 0.006867f, 0.011271f, 0.023234f, -0.005749f, -0.022365f, 0.011681f, 0.000650f, -0.004830f, - 0.001805f, 0.020295f, -0.007347f, -0.013057f, 0.007468f, -0.002984f, -0.001511f, -0.004526f, -0.002191f, -0.005495f, -0.009761f, -0.004723f, 0.014177f, -0.017410f, -0.010284f, 0.002745f, -0.022466f, -0.014339f, 0.003560f, 0.003728f, 0.029483f, -0.025811f, -0.017983f, -0.009891f, -0.005138f, -0.003098f, 0.009366f, 0.009388f, -0.013990f, 0.014217f, -0.003526f, 0.006481f, -0.010159f, 0.021116f, -0.004360f, -0.007892f, 0.013341f, 0.009840f, 0.007642f, -0.014320f, -0.013754f, 0.017804f, -0.009620f, 0.005217f, 0.004068f, -0.006525f, 0.014857f, 0.004518f, -0.000310f, 0.003249f, 0.010825f, 0.014124f, 0.004102f, -0.012872f, 0.002657f, -0.018328f, 0.010513f, 0.004467f, -0.020567f, 0.014078f, 0.003059f, -0.010891f, 0.018292f, 0.005508f, -0.005300f, 0.010375f, -0.001939f, 0.019985f, -0.004930f, -0.005735f, -0.004567f, -0.003373f, 0.026491f, 0.004847f, 0.000301f, 0.006354f, -0.022536f, -0.015056f, -0.015292f, 0.000446f, 0.014221f, 0.000449f, 0.017741f, -0.024483f, -0.009077f, -0.016547f, -0.012874f, 0.030549f, -0.002500f, 0.008273f, 0.010087f, -0.030337f, 0.009662f, -0.013174f, 0.007599f, -0.009285f, - 0.024580f, 0.003854f, -0.016731f, 0.002445f, -0.017055f, 0.013857f, 0.027162f, -0.023115f, 0.015440f, 0.005393f, -0.000350f, 0.010875f, 0.028955f, -0.011135f, 0.000309f, 0.008576f, -0.030909f, 0.001664f, 0.014574f, -0.008848f, 0.010556f, 0.010950f, -0.005329f, 0.027912f, -0.013598f, -0.025499f, -0.010521f, 0.002941f, 0.001082f, -0.005296f, -0.010527f, 0.007556f, 0.007507f, -0.000067f, -0.017430f, -0.004259f, -0.004079f, 0.011886f, -0.007365f, 0.047001f, -0.005443f, 0.006711f, -0.001678f, -0.002008f, -0.022324f, 0.002350f, 0.017442f, 0.013718f, 0.046408f, -0.004893f, -0.003896f, -0.009444f, -0.001248f, -0.012840f, -0.000400f, 0.018492f, -0.009201f, -0.001789f, 0.003942f, 0.004472f, 0.018710f, 0.014867f, 0.004796f, 0.035679f, -0.006084f, -0.032723f, -0.032314f, -0.023065f, -0.004225f, 0.010474f, -0.002856f, -0.009050f, 0.053769f, -0.038876f, -0.029044f, -0.009723f, -0.018326f, -0.021555f, 0.026063f, 0.010064f, 0.005261f, -0.008676f, -0.005172f, 0.030922f, -0.009186f, -0.013859f, -0.037764f, -0.006115f, -0.001061f, 0.017058f, 0.006380f, -0.008436f, 0.002086f, 0.014754f, 0.006760f, 0.008855f, - 0.023773f, 0.029325f, 0.007992f, -0.012299f, 0.007333f, -0.019268f, 0.011938f, 0.009064f, -0.007099f, -0.000606f, -0.014749f, 0.004398f, -0.000349f, -0.028685f, 0.025821f, -0.003845f, -0.013264f, 0.014898f, -0.026221f, -0.007469f, 0.026774f, 0.014141f, -0.001466f, -0.000779f, -0.036207f, 0.010361f, 0.018266f, 0.009117f, 0.005109f, -0.004085f, -0.027331f, -0.078231f, -0.007662f, 0.013020f, 0.019613f, -0.004577f, -0.024123f, 0.034688f, -0.019371f, 0.014075f, 0.026248f, 0.020091f, 0.002028f, 0.024677f, 0.000702f, 0.006051f, 0.003252f, 0.012589f, 0.000390f, 0.000035f, 0.032798f, -0.019048f, -0.011205f, 0.025283f, 0.026881f, -0.008172f, -0.011577f, -0.003975f, -0.006233f, 0.027816f, 0.020474f, -0.052513f, -0.004143f, 0.002670f, -0.022500f, 0.008014f, -0.033491f, 0.025063f, 0.007882f, -0.005604f, 0.015960f, 0.005725f, -0.005902f, -0.013222f, -0.007125f, 0.036034f, 0.002947f, -0.001763f, 0.009733f, -0.006541f, 0.016461f, 0.042749f, 0.019434f, -0.007897f, -0.006391f, -0.007922f, 0.027012f, 0.007688f, 0.027322f, 0.016537f, 0.014323f, 0.006091f, -0.009916f, -0.013778f, 0.012921f, -0.027577f, - 0.005825f, -0.015246f, -0.010339f, -0.000384f, 0.019418f, 0.001302f, 0.002725f, 0.005298f, -0.004468f, 0.029169f, 0.040525f, 0.043905f, 0.000939f, 0.019504f, -0.025616f, 0.009353f, 0.016518f, -0.013133f, 0.023863f, -0.019104f, -0.035720f, 0.004202f, -0.018415f, -0.003378f, 0.002347f, -0.019756f, 0.005329f, 0.026550f, -0.015968f, -0.015420f, 0.013215f, 0.025680f, -0.001938f, -0.006014f, -0.031006f, 0.057114f, 0.004468f, 0.014225f, 0.045101f, -0.017227f, 0.005317f, -0.009319f, 0.012464f, -0.013657f, 0.013561f, -0.032078f, -0.036205f, -0.002044f, -0.021133f, -0.002607f, -0.001282f, -0.003434f, -0.005489f, 0.001395f, -0.009496f, 0.008247f, -0.028639f, -0.012767f, -0.038902f, -0.003047f, 0.009852f, 0.017952f, 0.043585f, 0.022650f, 0.008163f, 0.004340f, 0.013060f, 0.008333f, 0.007991f, 0.016101f, 0.018897f, -0.006993f, -0.035464f, -0.037202f, -0.023863f, -0.016047f, 0.004373f, 0.010734f, -0.012495f, -0.022490f, -0.035977f, -0.000432f, -0.013257f, 0.031985f, -0.014172f, 0.006791f, -0.024716f, -0.014033f, -0.003676f, -0.012310f, -0.048494f, -0.053287f, 0.014883f, 0.003196f, 0.002129f, 0.024125f, - 0.015818f, 0.018759f, 0.017815f, -0.034578f, -0.006205f, 0.057180f, -0.010395f, -0.025856f, 0.009487f, -0.016770f, 0.006712f, -0.041179f, 0.015494f, -0.022047f, 0.007900f, 0.035254f, 0.025310f, 0.004252f, 0.026926f, -0.004396f, -0.012261f, 0.016037f, -0.022148f, -0.040709f, -0.062947f, 0.005960f, 0.000363f, 0.024722f, 0.016544f, -0.022383f, -0.012834f, -0.059864f, -0.005102f, -0.027512f, 0.005520f, -0.013510f, -0.007875f, -0.010980f, -0.005624f, -0.004056f, -0.022212f, -0.008812f, -0.025732f, 0.020210f, -0.006174f, 0.017379f, 0.042111f, -0.022297f, 0.011149f, -0.002940f, -0.012166f, 0.011797f, -0.024665f, -0.038886f, 0.017461f, 0.009885f, 0.017300f, 0.012400f, -0.084355f, -0.036954f, 0.009332f, -0.026936f, -0.004106f, -0.022923f, 0.032771f, 0.042315f, -0.003988f, 0.046718f, 0.004460f, 0.021572f, -0.008242f, -0.000881f, -0.028063f, 0.016997f, 0.030909f, 0.007914f, 0.052915f, 0.002036f, 0.004871f, -0.015527f, -0.027388f, 0.033671f, 0.048813f, 0.019076f, 0.006501f, 0.006123f, 0.015637f, 0.002813f, -0.000876f, -0.047455f, -0.033240f, -0.015199f, -0.061420f, -0.074756f, -0.056819f, -0.024797f, - 0.016316f, 0.000283f, -0.014105f, -0.026831f, -0.000767f, 0.050614f, 0.023582f, -0.042850f, -0.008013f, -0.008266f, -0.031658f, -0.004754f, 0.001428f, 0.021719f, 0.014602f, -0.031809f, 0.022517f, -0.017665f, 0.009055f, -0.016418f, 0.004308f, -0.024234f, -0.010203f, 0.013026f, -0.045931f, -0.007942f, -0.017888f, 0.015441f, -0.012130f, -0.040976f, 0.048018f, 0.047819f, -0.000308f, -0.018479f, 0.025701f, -0.063198f, -0.020962f, 0.019536f, -0.022464f, -0.013040f, -0.002677f, -0.020140f, 0.003029f, -0.004881f, -0.043838f, 0.018723f, -0.006575f, -0.012825f, -0.015796f, -0.011048f, -0.003898f, -0.011549f, -0.019411f, 0.035523f, -0.018251f, -0.016847f, 0.015413f, -0.000695f, 0.056625f, -0.012106f, -0.037830f, 0.019892f, -0.020812f, -0.017150f, -0.030442f, 0.017797f, 0.033108f, -0.072727f, 0.001781f, 0.054628f, -0.016146f, -0.048535f, 0.096253f, 0.067405f, -0.000513f, -0.018893f, 0.015969f, -0.057915f, 0.001797f, 0.070628f, -0.011685f, -0.025384f, 0.002079f, 0.080177f, -0.010617f, 0.017166f, -0.016195f, -0.037069f, -0.028518f, -0.007994f, -0.012438f, 0.014381f, 0.021750f, 0.000640f, -0.029251f, -0.043019f, - -0.037964f, -0.006767f, -0.007372f, -0.021542f, 0.021061f, 0.015595f, -0.015779f, -0.021276f, -0.021398f, 0.012441f, 0.005913f, 0.015391f, 0.041880f, -0.000597f, -0.032879f, 0.023065f, 0.010884f, 0.007567f, 0.004184f, -0.000980f, -0.014809f, 0.029542f, 0.017186f, -0.012297f, -0.012295f, -0.009810f, -0.037098f, 0.010452f, 0.030867f, 0.008346f, -0.025159f, 0.031700f, 0.025912f, 0.012846f, 0.006079f, -0.017343f, 0.011460f, -0.056391f, 0.011500f, -0.004131f, 0.052734f, -0.018698f, -0.021582f, 0.009557f, -0.009623f, -0.002395f, -0.032587f, -0.008455f, -0.006102f, 0.045240f, -0.027801f, -0.065216f, -0.024369f, 0.090377f, 0.003946f, 0.014719f, -0.014772f, -0.030094f, -0.039639f, -0.013562f, 0.011741f, 0.026264f, 0.022461f, -0.019537f, 0.000375f, -0.040355f, -0.014119f, 0.014040f, -0.033174f, -0.018409f, -0.012184f, 0.048639f, 0.026206f, 0.026614f, 0.026167f, -0.028736f, 0.005971f, 0.009924f, 0.012380f, -0.003138f, 0.033913f, -0.007705f, 0.015488f, 0.025163f, 0.010835f, 0.006612f, 0.022750f, 0.029187f, -0.016352f, -0.035581f, 0.024642f, -0.004476f, 0.001473f, -0.037713f, -0.032925f, 0.007064f, - -0.015615f, -0.014335f, 0.031944f, -0.032204f, 0.041837f, 0.024596f, -0.015705f, 0.019682f, -0.021202f, -0.025158f, -0.026157f, 0.039512f, -0.026266f, 0.010981f, 0.015551f, -0.049642f, 0.007760f, 0.002758f, -0.033682f, -0.067537f, -0.053412f, 0.038138f, -0.038543f, -0.005322f, -0.033438f, -0.014502f, -0.021353f, -0.009237f, 0.025886f, 0.002066f, -0.018045f, 0.016906f, 0.049204f, 0.048789f, 0.047725f, -0.016967f, 0.000417f, -0.038470f, -0.001744f, 0.008271f, 0.006806f, -0.033527f, -0.037508f, -0.056189f, 0.039521f, 0.006029f, 0.013230f, -0.007523f, 0.020846f, -0.013744f, -0.015979f, 0.014242f, 0.030419f, 0.009563f, 0.020056f, 0.064929f, -0.009000f, -0.035049f, -0.079890f, -0.008632f, -0.030622f, -0.012314f, -0.018606f, -0.034140f, -0.025582f, -0.052354f, -0.005680f, 0.002499f, 0.020390f, 0.061137f, -0.046847f, -0.014771f, -0.006596f, 0.022752f, 0.021892f, 0.061152f, 0.009457f, -0.060910f, -0.013062f, 0.017873f, 0.053134f, 0.018115f, -0.076564f, -0.026680f, 0.074137f, 0.011758f, 0.074261f, -0.036405f, 0.005606f, 0.011442f, 0.046817f, 0.002195f, 0.043340f, 0.065763f, 0.012909f, 0.057224f, - 0.040276f, 0.016027f, 0.075201f, 0.067461f, 0.025690f, 0.101313f, 0.078458f, 0.054018f, -0.066629f, 0.005356f, 0.039298f, 0.028236f, 0.011066f, -0.042327f, -0.049944f, -0.020856f, 0.017395f, -0.055329f, 0.058971f, -0.027531f, 0.040050f, 0.014015f, -0.042119f, 0.003240f, 0.032951f, -0.021726f, -0.044012f, 0.028521f, -0.008702f, 0.023973f, -0.011734f, 0.003668f, 0.015742f, -0.032992f, 0.001143f, -0.016268f, 0.004120f, -0.051750f, -0.033427f, 0.044379f, 0.007116f, 0.016272f, -0.032329f, 0.035933f, 0.039736f, -0.028730f, 0.027280f, -0.040390f, -0.002786f, -0.023657f, 0.032891f, 0.064963f, 0.004368f, 0.079446f, -0.015009f, -0.006044f, 0.009693f, 0.006346f, 0.000320f, -0.047968f, 0.086194f, 0.050539f, -0.000102f, 0.042330f, 0.040616f, 0.044173f, -0.010912f, -0.002278f, -0.074945f, 0.035802f, 0.044971f, -0.011396f, -0.007213f, 0.050440f, 0.033737f, 0.026638f, 0.070291f, 0.010706f, -0.025717f, -0.038800f, 0.018736f, -0.011357f, -0.040160f, 0.040355f, -0.047896f, 0.004653f, 0.017803f, -0.035276f, -0.055786f, -0.036385f, -0.013661f, 0.010557f, 0.040304f, -0.064906f, 0.035266f, 0.064399f, - -0.004989f, 0.073624f, 0.017298f, -0.057040f, -0.041285f, -0.001120f, -0.025043f, -0.033292f, 0.035115f, 0.049318f, -0.008382f, 0.035411f, 0.038832f, -0.030235f, 0.026176f, 0.054941f, -0.007200f, -0.065792f, 0.023132f, 0.001584f, -0.017910f, 0.022685f, 0.048193f, -0.013193f, -0.030610f, 0.016380f, -0.027234f, -0.026557f, -0.006413f, 0.049548f, 0.034944f, -0.061863f, 0.016382f, 0.031498f, -0.048361f, -0.024535f, 0.048484f, -0.010898f, -0.081636f, -0.006303f, 0.060184f, -0.017591f, -0.116043f, 0.120370f, -0.037982f, -0.009872f, -0.062406f, 0.079088f, 0.019681f, -0.022334f, 0.049905f, -0.028570f, -0.029220f, -0.010322f, 0.135303f, 0.050739f, -0.064152f, -0.048124f, 0.048417f, -0.008453f, 0.072802f, 0.005623f, 0.053021f, -0.076695f, 0.058641f, 0.116268f, 0.004066f, -0.007034f, -0.026662f, -0.013959f, -0.052383f, 0.111821f, 0.061162f, -0.053253f, 0.049920f, 0.115658f, 0.021825f, -0.044086f, -0.011055f, -0.010461f, 0.019770f, 0.017804f, -0.036398f, -0.050823f, 0.013266f, -0.042937f, 0.008225f, -0.026551f, -0.031475f, -0.006288f, 0.004876f, 0.015190f, -0.035011f, -0.013529f, -0.014095f, -0.042651f, - 0.035809f, -0.013109f, 0.001999f, -0.005953f, -0.029072f, 0.011845f, 0.007796f, 0.001427f, -0.006488f, 0.000736f, -0.001308f, -0.016602f, -0.036819f, 0.016032f, -0.018371f, 0.016238f, 0.010974f, -0.036221f, -0.029763f, -0.003037f, -0.004381f, -0.003866f, -0.007953f, 0.030087f, -0.020686f, 0.003298f, -0.038864f, 0.033376f, -0.038038f, -0.019963f, 0.018983f, 0.000676f, -0.030391f, 0.024349f, -0.040848f, 0.003185f, 0.012566f, -0.001067f, 0.004767f, 0.019632f, 0.009677f, -0.042312f, 0.021810f, 0.002931f, -0.024997f, 0.036196f, 0.014861f, -0.040072f, -0.003747f, -0.031706f, -0.003588f, 0.013892f, 0.010926f, -0.038431f, 0.047933f, -0.068669f, -0.086865f, -0.031233f, 0.260226f, 0.209114f, 0.137796f, 0.252749f, -0.100942f, -0.238579f, -0.077313f, -0.385813f, -0.151221f, 0.011056f, -0.091326f, 0.177119f, 0.240952f, 0.039578f, 0.152788f, 0.264029f, 0.004743f, 0.072675f, -0.018262f, -0.310564f, -0.257921f, -0.194289f, -0.193946f, -0.095307f, 0.145982f, 0.078728f, 0.112604f, 0.323674f, 0.136065f, 0.019543f, 0.192592f, 0.089557f, -0.112773f, 0.037095f, -0.094959f, -0.315435f, -0.077511f, -0.165349f, - -0.325988f, -0.054989f, 0.005431f, -0.080446f, 0.217026f, 0.251640f, 0.097437f, 0.295985f, 0.298575f, 0.054444f, 0.113326f, 0.050269f, -0.193355f, -0.215615f, -0.203002f, -0.361783f, -0.321079f, -0.123779f, -0.151391f, 0.027960f, 0.188110f, 0.259978f, 0.212875f, 0.332560f, 0.244165f, 0.129319f, 0.012088f, -0.047525f, -0.201804f, -0.243048f, -0.183940f, -0.215705f, -0.185124f, -0.017149f, -0.025625f, 0.029877f, 0.137746f, 0.027719f, 0.013208f}, - {0.003131f, 0.003353f, 0.003924f, -0.004476f, -0.007269f, 0.001223f, 0.005007f, -0.003315f, 0.003393f, -0.011708f, -0.006448f, -0.006644f, 0.000567f, 0.001754f, -0.004859f, -0.006050f, 0.002573f, 0.006452f, 0.000301f, -0.003161f, -0.008681f, -0.004949f, 0.006813f, -0.001393f, 0.000323f, 0.003148f, -0.003515f, 0.002106f, -0.002584f, -0.004876f, -0.003358f, 0.006619f, -0.008552f, -0.004436f, -0.003740f, 0.008752f, 0.006041f, 0.005187f, 0.000609f, 0.002847f, -0.000365f, 0.005618f, 0.002026f, 0.002045f, -0.000029f, -0.000298f, 0.009601f, 0.007475f, -0.000026f, -0.006384f, 0.002025f, 0.001136f, 0.002985f, -0.009257f, -0.000343f, 0.006076f, 0.000484f, -0.001104f, 0.000682f, 0.002120f, -0.002249f, -0.001481f, -0.002771f, -0.003387f, -0.004831f, 0.002952f, 0.003481f, -0.006996f, -0.001474f, -0.000744f, 0.001964f, 0.002469f, -0.004323f, 0.002777f, 0.001921f, -0.001248f, -0.002079f, -0.009305f, 0.029184f, 0.011364f, 0.006989f, 0.002440f, -0.006354f, 0.000201f, 0.005479f, 0.010698f, -0.000002f, 0.001142f, 0.000469f, -0.003762f, 0.000878f, 0.003699f, -0.000880f, 0.003612f, 0.005251f, 0.007310f, - 0.002866f, 0.003057f, 0.003633f, 0.003463f, -0.006796f, 0.006811f, 0.012452f, -0.005902f, 0.003412f, 0.002063f, 0.003346f, 0.000727f, 0.007294f, -0.004797f, -0.001921f, -0.004315f, 0.004128f, 0.012580f, -0.002298f, 0.006132f, -0.000359f, -0.002777f, -0.010509f, 0.003906f, -0.005538f, 0.004796f, 0.002218f, 0.005347f, -0.000784f, -0.003168f, 0.001488f, -0.002181f, 0.006981f, 0.000939f, -0.005866f, 0.007282f, -0.001775f, 0.005677f, 0.004205f, -0.000242f, 0.004037f, 0.008180f, -0.002469f, -0.002908f, -0.002476f, 0.004034f, -0.003485f, -0.004488f, 0.004996f, -0.000025f, 0.003348f, -0.005576f, 0.008034f, 0.000323f, -0.002241f, -0.001183f, -0.000705f, 0.022565f, 0.018075f, 0.008747f, 0.001518f, -0.003597f, 0.010561f, -0.006289f, -0.006298f, -0.001732f, -0.011160f, 0.006627f, 0.000665f, -0.004958f, 0.002892f, 0.006353f, 0.011541f, -0.005514f, 0.006739f, 0.014479f, -0.004011f, -0.000160f, 0.003569f, 0.007393f, -0.001741f, 0.008074f, 0.006095f, 0.008168f, 0.002129f, 0.006167f, -0.006383f, 0.010969f, -0.001167f, 0.010569f, 0.005560f, -0.001495f, 0.001521f, -0.002104f, -0.000085f, -0.004238f, - -0.001693f, -0.005169f, -0.003421f, 0.003460f, -0.000870f, -0.010855f, -0.002221f, 0.000769f, -0.000161f, -0.006225f, -0.005941f, -0.003445f, -0.002511f, 0.007847f, -0.003195f, -0.009432f, -0.011984f, -0.013700f, -0.004516f, -0.006285f, -0.000430f, 0.001593f, 0.006442f, -0.009174f, -0.003951f, 0.000499f, -0.000917f, -0.004455f, 0.000889f, -0.009761f, -0.000993f, -0.011469f, 0.005567f, -0.006664f, -0.003126f, 0.006515f, -0.001387f, 0.011819f, -0.025916f, -0.007288f, -0.013004f, -0.002727f, 0.000248f, 0.014146f, -0.006754f, -0.023730f, -0.008009f, -0.000870f, 0.009189f, 0.002511f, -0.008448f, -0.020646f, -0.004985f, 0.005303f, -0.002027f, 0.011188f, 0.000708f, 0.004739f, -0.000877f, -0.009333f, -0.009578f, 0.005631f, 0.007493f, 0.000545f, 0.002608f, -0.000667f, 0.004684f, 0.000712f, -0.011839f, 0.000322f, 0.017306f, 0.001964f, -0.003970f, -0.001912f, -0.004262f, 0.000695f, -0.003640f, -0.007765f, 0.011675f, -0.003920f, -0.004486f, 0.009970f, -0.005154f, -0.009597f, 0.000683f, -0.000360f, 0.000559f, -0.013703f, 0.011037f, -0.004576f, -0.000006f, 0.009451f, 0.009289f, -0.014746f, -0.003371f, 0.002188f, - 0.003675f, -0.001868f, 0.007995f, 0.001483f, 0.004053f, 0.004669f, 0.000962f, 0.003502f, 0.006640f, 0.000504f, 0.000098f, 0.005031f, -0.016241f, -0.004839f, 0.000269f, 0.006740f, 0.004273f, -0.003801f, -0.001079f, -0.051663f, -0.020985f, -0.010081f, -0.015220f, 0.005071f, -0.005560f, -0.004575f, -0.001079f, 0.006982f, -0.006441f, -0.006727f, -0.010832f, 0.002459f, 0.008795f, 0.002446f, -0.007607f, -0.008450f, 0.002103f, 0.008107f, 0.006634f, -0.009674f, -0.015321f, 0.001449f, -0.014376f, 0.007682f, -0.000687f, 0.005451f, -0.001002f, 0.005261f, -0.006064f, -0.001983f, 0.013780f, -0.017175f, 0.007361f, 0.004357f, 0.001257f, -0.005921f, 0.003138f, 0.008868f, 0.001547f, -0.010384f, 0.001373f, -0.006502f, 0.004402f, -0.014284f, -0.001384f, -0.012926f, 0.009264f, -0.000850f, -0.003511f, -0.003520f, 0.004639f, -0.021875f, 0.009206f, -0.006169f, -0.014392f, 0.005536f, 0.009686f, 0.012346f, 0.006046f, 0.002770f, -0.002046f, 0.001609f, -0.002351f, 0.008000f, -0.005798f, 0.002358f, 0.004778f, 0.015316f, 0.000939f, 0.000380f, -0.012504f, 0.006982f, -0.007112f, 0.001139f, -0.030096f, 0.014990f, - 0.022659f, 0.004996f, 0.001373f, 0.013368f, 0.003897f, 0.004459f, 0.006599f, 0.001505f, 0.006937f, 0.007949f, -0.006375f, -0.000530f, 0.000609f, -0.006687f, -0.004887f, 0.000499f, 0.003206f, -0.003679f, 0.023692f, 0.013399f, -0.003852f, 0.002358f, 0.007307f, 0.010270f, 0.010660f, -0.003925f, 0.007428f, 0.009689f, 0.000220f, 0.003332f, 0.002324f, 0.005851f, 0.003460f, 0.003007f, 0.004844f, 0.005620f, -0.010626f, -0.007254f, -0.016223f, 0.002546f, -0.005859f, -0.007169f, 0.008077f, -0.001476f, 0.005046f, -0.018950f, 0.021736f, -0.000656f, -0.010489f, -0.000962f, 0.017257f, 0.013547f, -0.002802f, 0.001502f, 0.008380f, -0.002885f, 0.003633f, -0.005225f, -0.013577f, 0.002839f, 0.001381f, -0.009649f, -0.004184f, -0.009393f, 0.002140f, 0.005530f, 0.002721f, -0.003553f, -0.009187f, -0.012622f, -0.016858f, -0.010171f, -0.004173f, 0.004040f, 0.054672f, 0.014397f, 0.004104f, -0.002120f, 0.032952f, 0.003754f, 0.015663f, 0.003106f, 0.010411f, 0.017009f, 0.006043f, -0.009662f, 0.010093f, 0.011625f, 0.001820f, -0.001031f, 0.002458f, 0.021389f, 0.001419f, -0.007566f, -0.013211f, -0.004058f, - -0.000512f, -0.015200f, 0.002378f, 0.004219f, 0.008443f, 0.003426f, 0.005892f, 0.016272f, -0.005360f, -0.002886f, 0.009927f, -0.001858f, -0.004725f, -0.001137f, -0.015049f, 0.009266f, 0.005959f, 0.000039f, 0.009180f, -0.005061f, -0.013297f, -0.028290f, -0.010629f, 0.010005f, 0.011002f, 0.000026f, 0.007564f, -0.008243f, -0.009070f, 0.022413f, -0.013699f, 0.009963f, -0.012166f, 0.002067f, -0.017521f, -0.018112f, 0.018609f, -0.007721f, -0.007639f, 0.026224f, 0.001235f, -0.003343f, -0.013318f, 0.009394f, 0.014456f, 0.000404f, -0.009250f, -0.016001f, -0.003518f, 0.011026f, -0.004797f, 0.003429f, 0.026986f, 0.010076f, 0.022232f, -0.013281f, 0.003836f, 0.013735f, -0.018332f, -0.005141f, -0.007627f, 0.002699f, -0.009637f, -0.004533f, 0.012882f, -0.003263f, -0.003323f, -0.000072f, 0.016319f, -0.005333f, -0.008659f, 0.019140f, 0.002209f, -0.011973f, 0.004696f, -0.001900f, 0.002179f, 0.007826f, -0.011190f, -0.001469f, -0.008590f, -0.013145f, 0.000984f, 0.001320f, 0.001949f, -0.012899f, -0.015178f, 0.006577f, -0.001981f, 0.006439f, -0.001311f, 0.008925f, 0.001603f, 0.000659f, -0.009952f, -0.007902f, - 0.001753f, 0.009958f, 0.003605f, -0.001534f, 0.025443f, 0.007300f, 0.003758f, 0.013000f, 0.003687f, 0.009975f, 0.008293f, 0.007047f, 0.002911f, 0.005701f, -0.004498f, -0.000848f, 0.001301f, -0.009850f, 0.002262f, -0.016600f, 0.004233f, -0.010502f, 0.008646f, -0.005264f, 0.004508f, -0.000852f, -0.009201f, 0.004449f, -0.002717f, 0.010924f, -0.008399f, 0.026519f, 0.020598f, 0.008804f, -0.033797f, -0.066964f, -0.002141f, -0.013918f, 0.012214f, -0.004027f, -0.017628f, -0.002370f, -0.014112f, -0.016971f, -0.013277f, 0.021134f, 0.012067f, -0.015025f, -0.007495f, 0.015984f, 0.010420f, 0.014224f, -0.009246f, 0.009035f, -0.008071f, -0.009558f, -0.001848f, -0.004432f, -0.027064f, 0.007212f, 0.017040f, 0.006460f, -0.015618f, -0.004260f, 0.004054f, 0.003857f, -0.013740f, -0.003721f, -0.020173f, 0.004315f, -0.008899f, -0.001336f, -0.006167f, 0.003704f, 0.024172f, -0.002839f, -0.002867f, 0.011076f, 0.018140f, -0.010474f, 0.006057f, 0.005942f, -0.012517f, 0.007171f, 0.008676f, -0.016924f, 0.004328f, 0.010316f, -0.000712f, -0.017825f, -0.009060f, -0.011662f, 0.017853f, 0.005679f, 0.017654f, -0.009658f, - -0.015593f, 0.003703f, 0.011418f, -0.004421f, -0.010119f, 0.007806f, 0.015480f, 0.011018f, -0.011413f, -0.008706f, 0.000661f, 0.022324f, -0.000748f, 0.012020f, 0.009266f, 0.006403f, -0.035033f, 0.001019f, -0.000195f, 0.020589f, 0.003576f, -0.006805f, 0.010380f, -0.004591f, 0.003841f, -0.017434f, -0.006662f, -0.010725f, -0.007747f, -0.022347f, -0.010140f, -0.013011f, 0.030701f, 0.019262f, 0.018151f, -0.021985f, -0.020940f, -0.008553f, 0.009469f, -0.000282f, -0.001750f, 0.001400f, 0.005029f, -0.000847f, 0.007741f, -0.012590f, -0.013011f, 0.000434f, -0.004897f, -0.015753f, -0.018185f, -0.012587f, -0.011306f, -0.006551f, -0.008369f, -0.020224f, 0.007661f, 0.025923f, -0.007434f, 0.012377f, 0.014369f, -0.011558f, 0.012104f, 0.009335f, 0.001251f, 0.023549f, -0.003302f, 0.019727f, 0.004941f, 0.002743f, -0.020628f, 0.007496f, 0.006544f, -0.004687f, 0.024156f, 0.021376f, 0.001426f, -0.007987f, -0.016225f, 0.007585f, -0.016190f, 0.005033f, -0.003579f, 0.015369f, -0.003658f, -0.024275f, -0.002329f, -0.010389f, -0.008378f, -0.019516f, 0.015032f, -0.031684f, 0.014813f, 0.009181f, 0.014103f, -0.015319f, - -0.024498f, 0.006395f, 0.008610f, 0.000292f, -0.020507f, 0.019543f, 0.006851f, -0.011944f, -0.017946f, 0.007544f, -0.007403f, 0.031881f, 0.039239f, 0.004661f, -0.005167f, -0.015277f, 0.022697f, -0.025731f, -0.007895f, 0.029534f, 0.008551f, -0.006934f, -0.015551f, -0.016212f, -0.007643f, -0.000459f, -0.019231f, 0.003551f, 0.022475f, -0.003739f, 0.009044f, -0.016771f, -0.013440f, -0.005886f, -0.010944f, 0.030261f, -0.010512f, 0.013036f, 0.012514f, 0.011683f, 0.004316f, 0.005227f, -0.020712f, -0.022751f, -0.019875f, -0.005658f, 0.016620f, 0.035037f, -0.013547f, -0.027056f, -0.005036f, -0.013018f, 0.007660f, 0.004573f, 0.021068f, -0.013288f, 0.000747f, -0.017280f, -0.002082f, 0.027831f, -0.002666f, -0.016777f, 0.021695f, 0.005695f, 0.004390f, 0.009738f, -0.022116f, 0.002356f, -0.006831f, 0.000868f, 0.011423f, 0.022700f, 0.050009f, -0.021790f, -0.016911f, -0.005293f, 0.010609f, -0.029293f, 0.011779f, -0.007979f, 0.014832f, -0.013204f, -0.005887f, 0.018011f, 0.013517f, 0.005013f, -0.009029f, -0.003408f, 0.024880f, 0.024281f, -0.004979f, 0.021186f, -0.006092f, 0.031201f, -0.014549f, -0.007809f, - 0.005714f, 0.032688f, 0.024059f, 0.007810f, -0.017483f, -0.001354f, -0.036332f, -0.005631f, 0.005806f, 0.016635f, 0.019649f, 0.034448f, 0.009188f, -0.000761f, -0.001537f, -0.013402f, -0.022580f, -0.001761f, -0.019553f, 0.014126f, 0.004645f, 0.021916f, 0.012460f, -0.007653f, 0.022061f, -0.026134f, 0.011996f, -0.005915f, 0.002147f, -0.004629f, 0.028109f, 0.016206f, 0.008298f, 0.004882f, -0.050099f, -0.008089f, 0.030383f, 0.015089f, 0.002372f, -0.000928f, 0.002122f, 0.024209f, 0.010961f, -0.038034f, -0.011585f, -0.014464f, 0.004655f, 0.001295f, -0.036534f, 0.002364f, -0.033500f, -0.021552f, 0.000612f, 0.017502f, 0.035801f, -0.009518f, -0.013773f, 0.001356f, 0.014175f, 0.007130f, -0.021009f, -0.002055f, -0.016931f, -0.001691f, -0.023247f, -0.003375f, -0.019920f, 0.000162f, 0.021645f, 0.000843f, 0.047181f, -0.020446f, -0.008898f, -0.017535f, 0.019537f, 0.030205f, -0.024418f, -0.009264f, -0.038144f, 0.006307f, 0.000159f, 0.009570f, 0.009999f, -0.022651f, -0.012355f, 0.015846f, -0.005859f, -0.005867f, -0.020549f, 0.041258f, -0.005183f, -0.046523f, 0.013236f, -0.013156f, -0.012995f, 0.015074f, - 0.013198f, -0.014406f, -0.013958f, -0.005734f, -0.025717f, -0.017158f, 0.009252f, 0.004399f, 0.009637f, -0.009530f, -0.018418f, -0.023603f, -0.021498f, 0.016514f, -0.031813f, -0.001273f, 0.008436f, -0.011887f, 0.001515f, -0.002216f, -0.003680f, -0.027855f, -0.003978f, -0.012741f, 0.017241f, 0.018479f, -0.002875f, 0.029896f, -0.000636f, -0.003208f, -0.008396f, -0.005216f, 0.049138f, 0.000425f, -0.023156f, 0.057807f, -0.015207f, -0.004650f, 0.004638f, 0.024841f, 0.017102f, -0.036920f, -0.015708f, -0.035077f, 0.007247f, 0.002347f, -0.011498f, -0.038680f, 0.001054f, -0.017920f, 0.007513f, 0.008840f, 0.019073f, 0.001235f, 0.013698f, 0.067658f, 0.014012f, 0.017030f, -0.011261f, -0.003570f, 0.028754f, -0.002415f, 0.001597f, 0.007946f, 0.001181f, -0.004209f, -0.016163f, 0.027267f, -0.029632f, 0.012081f, -0.043691f, -0.012995f, -0.020913f, -0.026431f, -0.023626f, -0.000037f, -0.047751f, -0.015956f, 0.005475f, 0.026777f, 0.014437f, -0.046077f, 0.025069f, 0.017274f, 0.017950f, -0.029335f, 0.020367f, -0.013849f, -0.034662f, -0.011568f, -0.034544f, 0.016092f, 0.038585f, 0.009859f, -0.005150f, -0.026257f, - 0.019679f, -0.027977f, 0.040152f, -0.007985f, -0.006040f, -0.025351f, -0.029052f, 0.003795f, 0.030768f, 0.010508f, -0.024194f, -0.009133f, 0.003638f, -0.004131f, 0.009367f, 0.031344f, 0.005972f, -0.020292f, 0.009193f, -0.005999f, 0.009451f, 0.034320f, -0.048551f, -0.022229f, -0.039051f, 0.021971f, -0.007877f, 0.003592f, -0.012916f, 0.027868f, -0.027737f, -0.028235f, -0.012773f, -0.006843f, -0.020019f, -0.034939f, -0.016775f, 0.006083f, 0.022602f, -0.032253f, 0.020869f, -0.012452f, 0.002387f, 0.040707f, 0.031414f, -0.001086f, 0.016478f, 0.007366f, -0.006725f, -0.005639f, -0.056142f, 0.007053f, -0.005865f, 0.004748f, 0.010707f, -0.005227f, 0.001322f, 0.055654f, -0.050979f, 0.003809f, 0.061034f, 0.006943f, 0.016688f, -0.025159f, -0.006796f, 0.030790f, 0.055989f, 0.001508f, 0.049619f, -0.020906f, 0.044857f, -0.017450f, 0.033129f, 0.032116f, -0.008656f, 0.064072f, -0.011271f, -0.004936f, -0.019907f, -0.032225f, -0.031939f, -0.017215f, -0.019353f, -0.049041f, -0.021905f, -0.013415f, 0.016339f, 0.012303f, 0.001095f, -0.029659f, -0.025964f, -0.020336f, -0.073620f, -0.050550f, -0.037454f, -0.002553f, - 0.048371f, -0.031277f, -0.005037f, -0.023809f, -0.036913f, -0.028682f, -0.037683f, -0.037221f, -0.016075f, -0.044121f, -0.050152f, -0.041696f, 0.011240f, -0.028436f, -0.016334f, -0.035719f, 0.034260f, 0.058676f, 0.004125f, -0.005498f, -0.021140f, 0.005861f, -0.004446f, -0.000372f, -0.005478f, 0.019279f, 0.002964f, 0.040399f, -0.035075f, 0.004152f, -0.029971f, 0.060809f, 0.013766f, -0.033837f, 0.026613f, -0.023926f, 0.021442f, -0.032523f, 0.018832f, 0.004028f, -0.021079f, 0.019215f, -0.032835f, -0.009534f, 0.009125f, 0.033701f, 0.013223f, 0.058944f, -0.014065f, -0.036292f, 0.002358f, -0.009664f, 0.003174f, -0.023803f, -0.022767f, -0.038981f, 0.003566f, -0.041600f, -0.010157f, -0.006021f, -0.038997f, 0.025202f, 0.029240f, -0.018184f, -0.004583f, -0.055000f, 0.059581f, 0.074837f, 0.008011f, -0.033331f, 0.003438f, -0.057439f, 0.106103f, 0.041795f, -0.010039f, -0.031174f, -0.010273f, -0.033197f, 0.035669f, 0.094249f, 0.000743f, -0.060649f, -0.029570f, 0.034698f, 0.011179f, -0.011204f, 0.043047f, -0.007508f, 0.004228f, 0.026503f, -0.004038f, -0.024575f, -0.009724f, 0.021982f, -0.028237f, -0.023399f, - -0.011321f, 0.009708f, -0.000098f, -0.003683f, -0.012714f, 0.020700f, 0.000595f, 0.030163f, 0.021609f, -0.029216f, 0.013313f, 0.036821f, 0.018598f, -0.026976f, 0.009235f, 0.006812f, 0.022696f, 0.001434f, 0.006893f, 0.007321f, 0.008423f, 0.051417f, 0.046362f, 0.030436f, 0.063388f, -0.031338f, 0.031887f, -0.037939f, 0.022999f, 0.000154f, 0.020869f, 0.028740f, 0.007458f, 0.007783f, 0.032624f, 0.016276f, -0.010760f, 0.021978f, -0.001492f, 0.029242f, -0.032535f, -0.017843f, 0.001154f, 0.069872f, -0.049974f, 0.003768f, -0.062305f, -0.008924f, 0.006120f, 0.021020f, -0.029906f, -0.011239f, -0.023485f, 0.089321f, 0.007961f, 0.006071f, -0.019105f, -0.012960f, 0.015607f, 0.013439f, 0.009022f, 0.034458f, 0.015352f, -0.014742f, 0.019293f, 0.036940f, -0.000483f, 0.040584f, -0.002867f, 0.019810f, -0.040130f, 0.075007f, -0.009912f, -0.008480f, 0.013850f, -0.056249f, -0.013180f, -0.026799f, 0.041377f, 0.022472f, 0.024155f, -0.025809f, 0.011288f, 0.010283f, -0.033465f, 0.010600f, 0.031993f, 0.026564f, 0.010773f, -0.007685f, 0.005674f, -0.015823f, 0.059036f, 0.009847f, 0.027996f, 0.022314f, - 0.033102f, -0.049139f, -0.001487f, -0.013651f, 0.012140f, -0.017061f, -0.019332f, 0.043782f, -0.036946f, 0.032719f, -0.022155f, 0.034478f, -0.003871f, -0.031606f, 0.000428f, -0.048490f, 0.035445f, 0.031794f, 0.039589f, -0.102573f, 0.034948f, 0.021902f, -0.027371f, -0.018654f, -0.024572f, 0.057385f, -0.071381f, 0.049740f, 0.116126f, 0.005121f, -0.043854f, -0.018458f, 0.041654f, 0.062157f, 0.024324f, -0.019443f, 0.010700f, -0.046577f, 0.002940f, -0.026121f, 0.041670f, 0.008318f, 0.007965f, -0.021293f, 0.015863f, -0.002312f, -0.023368f, 0.013808f, -0.023914f, -0.006230f, -0.021006f, -0.036158f, -0.028537f, 0.035429f, 0.020409f, 0.024538f, 0.016664f, -0.044734f, -0.019256f, 0.015017f, -0.019535f, 0.034463f, 0.015824f, 0.006995f, 0.012790f, 0.054921f, -0.019790f, -0.045707f, 0.092061f, -0.037093f, -0.059193f, 0.065369f, -0.034062f, -0.011769f, 0.008386f, 0.036226f, -0.041186f, -0.005888f, -0.001399f, -0.018227f, 0.121130f, 0.004502f, -0.025832f, -0.002286f, -0.004112f, 0.037221f, -0.067147f, -0.041126f, -0.031770f, -0.018706f, -0.007594f, -0.047094f, -0.005644f, 0.001647f, 0.013951f, 0.086552f, - 0.074993f, -0.024439f, 0.056554f, -0.054087f, -0.060521f, 0.040514f, 0.044458f, -0.009281f, 0.007878f, 0.015114f, 0.028593f, 0.052532f, -0.005555f, 0.014015f, 0.052179f, -0.033892f, 0.004943f, -0.036702f, 0.039760f, 0.000237f, 0.024538f, -0.025036f, -0.037514f, 0.035200f, -0.037077f, 0.011561f, -0.007998f, 0.033187f, 0.000924f, 0.007299f, -0.019224f, 0.006402f, -0.013279f, -0.049057f, -0.037820f, 0.016612f, -0.001990f, -0.001123f, 0.009171f, 0.036827f, -0.015205f, -0.010914f, -0.029476f, 0.013607f, 0.012662f, -0.003384f, -0.004603f, -0.081900f, 0.005336f, 0.023727f, -0.027806f, 0.021159f, -0.043900f, -0.007839f, 0.004874f, 0.029404f, 0.038067f, 0.005324f, -0.015152f, 0.012560f, 0.067222f, 0.057981f, 0.058762f, -0.001174f, -0.002718f, 0.013625f, 0.009381f, -0.024163f, 0.019560f, 0.073385f, -0.047930f, -0.014273f, -0.011597f, 0.002763f, 0.006079f, 0.012271f, -0.034206f, -0.054207f, -0.017751f, 0.000619f, 0.120484f, 0.063880f, 0.044134f, 0.000326f, -0.005015f, -0.022551f, 0.056279f, 0.016262f, 0.038766f, -0.000127f, -0.008625f, -0.006157f, -0.014646f, -0.077428f, 0.042606f, 0.041002f, - -0.004140f, 0.066121f, 0.026830f, -0.041734f, -0.045119f, 0.020744f, -0.019696f, -0.036993f, 0.000554f, 0.005888f, 0.015508f, -0.007678f, 0.020843f, -0.003619f, 0.019636f, 0.029633f, -0.027402f, -0.100768f, 0.053290f, -0.013422f, -0.034172f, 0.025571f, 0.034546f, 0.003459f, -0.071033f, -0.006851f, -0.004736f, -0.068857f, -0.046319f, 0.039731f, -0.012763f, -0.026570f, -0.026385f, 0.018450f, -0.071147f, -0.046700f, 0.091550f, -0.005499f, -0.056184f, 0.023776f, 0.048851f, 0.024362f, -0.078783f, 0.112504f, 0.042484f, -0.064999f, 0.035700f, 0.052463f, 0.005990f, -0.042979f, 0.045673f, 0.056170f, 0.030402f, -0.039183f, 0.038011f, 0.077711f, 0.002094f, 0.078607f, 0.091201f, -0.046323f, -0.031570f, -0.031017f, 0.086171f, 0.059918f, -0.039902f, 0.025589f, -0.024614f, -0.051581f, 0.046999f, 0.114366f, 0.015294f, -0.028239f, -0.026500f, 0.067088f, 0.066522f, 0.101915f, 0.043778f, -0.044887f, -0.013893f, -0.037920f, 0.024100f, -0.019350f, 0.030517f, 0.017043f, -0.045585f, 0.022518f, -0.046449f, -0.018059f, 0.002547f, -0.019547f, 0.004939f, 0.023685f, 0.022084f, -0.000238f, -0.036409f, 0.007114f, - 0.033468f, -0.013375f, 0.007049f, -0.015602f, -0.042806f, 0.044265f, -0.024812f, 0.030184f, -0.044031f, -0.029035f, -0.003902f, -0.039827f, -0.008638f, 0.037405f, -0.035137f, 0.049803f, 0.006227f, 0.040342f, 0.019494f, -0.022337f, -0.053050f, 0.044538f, 0.031712f, 0.017672f, 0.015079f, 0.045957f, -0.031795f, -0.019384f, -0.016867f, 0.013321f, 0.021418f, -0.006175f, -0.040574f, -0.003537f, -0.002248f, -0.046285f, -0.013723f, 0.005539f, 0.016300f, 0.033787f, 0.000148f, -0.032948f, 0.046461f, -0.009538f, -0.002557f, 0.049069f, 0.028885f, -0.042553f, 0.018443f, -0.026175f, 0.021098f, -0.013362f, 0.024303f, -0.034173f, 0.021031f, -0.075016f, -0.092413f, -0.046703f, 0.266623f, 0.237822f, 0.140880f, 0.314956f, -0.068830f, -0.233731f, -0.084876f, -0.442154f, -0.234789f, -0.003082f, -0.117092f, 0.160150f, 0.288544f, 0.042231f, 0.168524f, 0.334592f, 0.053472f, 0.117584f, 0.008590f, -0.341016f, -0.288531f, -0.251273f, -0.280796f, -0.167428f, 0.135285f, 0.059580f, 0.135369f, 0.361166f, 0.214075f, 0.057199f, 0.264149f, 0.122917f, -0.166897f, 0.089794f, -0.122778f, -0.312664f, -0.042091f, -0.193086f, - -0.359810f, -0.160130f, -0.040691f, -0.186281f, 0.204531f, 0.224669f, 0.102112f, 0.357456f, 0.399260f, 0.153315f, 0.195051f, 0.188331f, -0.214663f, -0.136868f, -0.273488f, -0.419678f, -0.391112f, -0.247764f, -0.254085f, -0.071941f, 0.155039f, 0.207818f, 0.272182f, 0.391926f, 0.345629f, 0.204871f, 0.142308f, 0.025213f, -0.173195f, -0.240256f, -0.185494f, -0.229158f, -0.293171f, -0.096715f, -0.122116f, -0.043571f, 0.131070f, 0.064402f, 0.001700f} - }, - { - {-0.002352f, 0.006376f, -0.007012f, -0.001470f, 0.000350f, 0.000536f, 0.002805f, 0.011712f, 0.000868f, -0.002777f, -0.004222f, 0.010547f, -0.001084f, -0.005301f, 0.001989f, -0.003695f, 0.002727f, 0.002137f, 0.013974f, 0.003621f, -0.007597f, 0.003237f, -0.000408f, 0.001298f, -0.006753f, 0.004314f, 0.000599f, -0.004995f, -0.002956f, -0.000535f, 0.000580f, -0.000611f, 0.004414f, -0.001206f, -0.004205f, -0.001043f, -0.002893f, -0.000549f, -0.005136f, 0.001887f, 0.005415f, -0.000818f, -0.007461f, 0.004586f, -0.004569f, -0.002780f, 0.000223f, 0.002147f, -0.003831f, -0.001110f, 0.006943f, -0.003650f, 0.001985f, -0.004589f, 0.003359f, -0.001571f, 0.002341f, 0.003089f, 0.001925f, -0.001803f, -0.001008f, 0.003578f, -0.005608f, -0.010339f, 0.002207f, -0.001318f, -0.003266f, 0.000931f, -0.000567f, -0.000645f, 0.000699f, -0.003763f, 0.004110f, -0.005348f, 0.004339f, 0.001872f, -0.000993f, 0.012047f, -0.001261f, 0.003683f, -0.002217f, 0.016079f, -0.006318f, -0.001516f, -0.000582f, 0.002031f, -0.002844f, 0.007394f, -0.001276f, -0.004906f, -0.000880f, 0.010101f, 0.000749f, -0.005029f, 0.004720f, 0.003532f, - 0.006630f, 0.002773f, -0.005019f, -0.003265f, 0.011255f, 0.001634f, -0.002844f, -0.002146f, -0.002252f, 0.002286f, 0.002434f, -0.001366f, -0.014249f, -0.003493f, 0.000748f, 0.009963f, 0.003594f, -0.001128f, 0.000033f, -0.005595f, 0.007945f, -0.007923f, -0.010585f, 0.001496f, 0.000208f, -0.003499f, -0.002343f, -0.002857f, 0.001657f, 0.001108f, 0.001086f, -0.003595f, 0.009485f, 0.000439f, 0.012675f, -0.001847f, -0.005755f, 0.002920f, -0.000443f, 0.001984f, 0.003149f, 0.006533f, 0.004576f, -0.001372f, -0.003114f, -0.002649f, 0.008472f, -0.007938f, 0.000743f, 0.000607f, -0.000953f, -0.006624f, 0.006847f, -0.002982f, 0.001587f, 0.006260f, -0.001610f, 0.002031f, -0.004619f, 0.003998f, 0.002614f, -0.005740f, -0.002960f, -0.000593f, 0.000626f, -0.000457f, -0.000726f, -0.003002f, 0.005153f, 0.000797f, -0.002095f, -0.003146f, -0.000071f, 0.010276f, -0.001393f, -0.005118f, 0.006769f, -0.002815f, -0.006253f, -0.000853f, 0.005415f, 0.003787f, -0.003413f, 0.000718f, -0.004284f, 0.002281f, 0.002487f, -0.002310f, 0.005378f, -0.001718f, -0.009660f, 0.001532f, 0.005016f, 0.004405f, 0.000653f, -0.001002f, - -0.007026f, -0.002661f, -0.000948f, -0.003382f, 0.006296f, 0.008567f, 0.004096f, -0.012465f, 0.004050f, 0.013920f, 0.005839f, -0.001067f, -0.000172f, 0.006185f, -0.003342f, 0.001742f, -0.006124f, -0.005877f, 0.005404f, 0.005786f, 0.002874f, 0.001184f, 0.000947f, 0.000732f, 0.002771f, -0.000001f, -0.000772f, -0.002764f, 0.001258f, -0.004916f, -0.001080f, -0.002584f, -0.008996f, -0.005199f, 0.001398f, 0.002185f, 0.008158f, -0.000437f, 0.003290f, -0.005191f, -0.008105f, -0.004823f, 0.004215f, -0.003458f, -0.003818f, -0.003759f, -0.005373f, 0.005254f, 0.000615f, 0.003910f, -0.001737f, 0.001289f, -0.010911f, -0.006759f, -0.005020f, 0.007148f, 0.001255f, 0.001756f, 0.003735f, -0.003617f, -0.002001f, -0.000642f, 0.001212f, -0.007978f, -0.001617f, -0.005304f, -0.006055f, 0.000585f, -0.005333f, 0.003819f, 0.003372f, 0.014554f, -0.003545f, 0.007528f, -0.004814f, 0.003263f, -0.003280f, 0.001009f, 0.012570f, 0.002271f, 0.005495f, -0.005659f, 0.003904f, -0.005061f, -0.002424f, -0.000551f, 0.008078f, -0.003647f, -0.001893f, -0.006795f, -0.003583f, -0.008072f, -0.000920f, 0.008173f, 0.002119f, 0.000864f, - 0.001635f, 0.007511f, -0.006830f, -0.012248f, 0.003252f, 0.004198f, -0.007762f, -0.000360f, 0.001578f, -0.001811f, 0.003878f, 0.009957f, 0.002772f, -0.002394f, 0.001211f, -0.003567f, 0.004921f, -0.013101f, 0.002449f, -0.004798f, -0.009087f, -0.007134f, 0.004145f, -0.002216f, -0.000115f, 0.008994f, 0.003418f, -0.001639f, 0.001133f, 0.007593f, -0.003418f, 0.005515f, -0.002345f, 0.001405f, -0.008084f, -0.001830f, 0.005998f, -0.002266f, 0.007374f, 0.007573f, 0.002913f, 0.004637f, 0.010684f, -0.002792f, -0.014328f, 0.002960f, -0.006215f, 0.000086f, -0.017623f, 0.000113f, 0.006035f, -0.003972f, 0.006967f, 0.000563f, -0.006186f, 0.001931f, -0.013201f, -0.009017f, -0.003021f, -0.003715f, -0.010922f, 0.005254f, 0.006449f, -0.000056f, 0.006011f, 0.000013f, 0.001798f, -0.004065f, 0.005452f, 0.003533f, -0.001881f, 0.011873f, -0.002126f, 0.009713f, 0.008907f, -0.000999f, -0.001264f, -0.000489f, 0.002925f, 0.003628f, 0.001423f, 0.004101f, 0.001604f, 0.000995f, 0.013644f, 0.004590f, -0.006055f, -0.003400f, -0.000303f, -0.003994f, 0.001579f, -0.003152f, 0.012670f, -0.024129f, -0.000161f, 0.000197f, - 0.006023f, 0.010981f, 0.003532f, -0.005108f, -0.009131f, -0.001129f, 0.011379f, -0.001896f, -0.002417f, -0.008277f, -0.000402f, -0.003251f, 0.008388f, 0.010538f, -0.017705f, 0.011775f, 0.007115f, -0.006283f, -0.001601f, -0.008814f, -0.000117f, -0.002387f, 0.000048f, 0.006417f, 0.011484f, -0.003961f, 0.002533f, -0.002622f, -0.004141f, 0.004768f, 0.007887f, 0.005881f, -0.005197f, -0.007810f, 0.005638f, 0.004513f, -0.003123f, -0.000984f, 0.000881f, -0.010138f, 0.003758f, 0.003808f, -0.004400f, -0.006542f, 0.002646f, -0.004794f, 0.009395f, 0.004853f, -0.016793f, 0.008328f, -0.007243f, -0.017629f, -0.005416f, -0.000572f, 0.003613f, -0.006680f, -0.000412f, 0.004979f, -0.008163f, -0.006998f, -0.008378f, -0.001466f, 0.002098f, 0.018649f, 0.002788f, 0.004661f, -0.003655f, -0.007587f, 0.012071f, -0.001804f, -0.013639f, 0.002937f, -0.013546f, 0.004375f, 0.015161f, 0.004090f, 0.003282f, 0.006666f, 0.009550f, -0.002085f, 0.023347f, -0.003361f, 0.016711f, -0.019658f, 0.006797f, 0.011568f, -0.004153f, 0.001669f, -0.005526f, -0.000455f, 0.009027f, 0.016507f, -0.004617f, -0.008058f, -0.002365f, 0.007763f, - 0.001669f, 0.016821f, 0.007942f, -0.001664f, 0.002450f, 0.000031f, -0.007753f, 0.001722f, -0.001684f, -0.002235f, 0.007360f, 0.009789f, -0.015062f, 0.017693f, -0.013231f, -0.006996f, 0.003047f, -0.005127f, 0.008880f, 0.000510f, -0.004973f, 0.012650f, 0.017389f, -0.012557f, -0.002236f, -0.000899f, 0.005451f, -0.011813f, -0.020009f, -0.008954f, -0.006050f, 0.006378f, -0.013844f, -0.007547f, -0.001524f, 0.014995f, 0.009184f, -0.009462f, 0.007296f, 0.004493f, -0.005384f, -0.007530f, -0.001216f, -0.004256f, -0.005814f, 0.001549f, -0.003848f, 0.011897f, -0.008112f, -0.000410f, 0.009174f, -0.005669f, 0.009823f, 0.013874f, 0.002684f, 0.003106f, -0.001364f, 0.008523f, 0.007643f, 0.009354f, -0.008976f, -0.012787f, -0.006294f, 0.008088f, 0.000813f, 0.034605f, -0.002231f, -0.001204f, -0.008006f, -0.016137f, -0.022777f, -0.005458f, 0.008096f, 0.011968f, -0.007231f, -0.015183f, 0.002369f, -0.000173f, 0.015350f, -0.005284f, -0.005654f, 0.018112f, -0.009565f, 0.000922f, -0.013719f, 0.008825f, -0.002368f, -0.000182f, -0.002668f, -0.021852f, -0.013064f, 0.000920f, 0.012498f, 0.007802f, 0.001493f, -0.022593f, - 0.015399f, -0.009235f, -0.008696f, -0.009831f, -0.012250f, -0.002157f, 0.012741f, -0.010057f, -0.010346f, 0.007403f, -0.002972f, 0.004229f, 0.023027f, -0.009843f, 0.001122f, 0.001085f, 0.010175f, -0.006627f, -0.005392f, -0.003048f, 0.014952f, -0.003113f, -0.006771f, -0.001164f, 0.011884f, 0.014667f, -0.013493f, -0.015939f, -0.004656f, -0.001913f, -0.004489f, 0.004210f, -0.010332f, -0.002794f, -0.009079f, -0.015338f, 0.003787f, -0.011006f, 0.009272f, 0.012217f, -0.009082f, -0.010108f, -0.009288f, 0.005234f, -0.001295f, 0.017540f, 0.029414f, -0.016301f, 0.000700f, -0.000252f, -0.002489f, 0.003233f, 0.008211f, -0.024018f, 0.021566f, -0.016776f, -0.008970f, 0.022623f, -0.005563f, -0.010078f, 0.006881f, 0.008699f, 0.000029f, -0.000701f, -0.017563f, 0.011217f, -0.002935f, 0.004276f, -0.011824f, 0.014688f, -0.001834f, -0.022947f, -0.025722f, 0.009047f, -0.005210f, -0.012329f, 0.005751f, -0.000386f, 0.038308f, 0.007261f, -0.007832f, -0.010847f, -0.023732f, -0.007357f, 0.003656f, -0.004760f, 0.017078f, -0.002921f, -0.027705f, -0.001663f, 0.017379f, -0.007056f, 0.001289f, 0.016952f, 0.009501f, -0.007899f, - -0.003065f, 0.014089f, 0.015655f, -0.006530f, 0.001602f, 0.003902f, -0.010325f, 0.005338f, -0.006198f, 0.000679f, -0.000284f, -0.001850f, -0.008371f, -0.013885f, -0.022723f, -0.011357f, 0.008576f, -0.019667f, 0.007273f, -0.021255f, 0.000533f, 0.008157f, -0.003787f, -0.015826f, -0.007891f, -0.002980f, 0.014152f, 0.011789f, -0.008898f, -0.008594f, 0.015116f, 0.006742f, -0.009213f, -0.009315f, -0.007798f, -0.000705f, 0.014616f, -0.002213f, 0.001075f, -0.000515f, -0.000456f, 0.019455f, 0.009218f, 0.013146f, -0.001162f, -0.000603f, 0.006346f, -0.009562f, -0.016910f, 0.013950f, 0.021667f, -0.014477f, 0.018602f, -0.005180f, -0.002131f, -0.008098f, 0.009495f, 0.000946f, -0.010743f, 0.006775f, 0.017627f, 0.014290f, 0.006271f, -0.013021f, -0.005632f, -0.026725f, 0.004376f, 0.014465f, -0.008802f, -0.001817f, -0.010788f, 0.003163f, -0.006412f, 0.010867f, -0.006673f, 0.003859f, 0.012614f, 0.007503f, 0.023770f, 0.012706f, 0.008207f, 0.015449f, -0.012370f, 0.023008f, 0.007473f, 0.014087f, -0.003907f, -0.015389f, -0.023245f, -0.004394f, -0.002795f, -0.006219f, -0.003840f, 0.008789f, 0.011514f, -0.024163f, - 0.017812f, 0.005683f, -0.003328f, 0.025440f, 0.020247f, -0.033264f, -0.021761f, 0.020243f, 0.035747f, -0.003783f, 0.005422f, -0.003557f, -0.004335f, -0.004116f, -0.001347f, 0.008402f, 0.005457f, 0.020856f, 0.005372f, 0.019895f, 0.005866f, 0.008246f, -0.002758f, -0.012360f, 0.005000f, 0.000831f, -0.009493f, 0.014920f, 0.001588f, 0.005451f, 0.003624f, -0.004161f, -0.014673f, 0.000950f, -0.016657f, -0.006589f, -0.019283f, -0.013872f, -0.007888f, 0.015001f, 0.002145f, 0.006773f, 0.019543f, -0.009752f, -0.001840f, 0.001028f, 0.006874f, 0.000776f, 0.000260f, -0.006971f, 0.014361f, 0.030652f, 0.015231f, -0.027217f, -0.018511f, -0.020660f, 0.021963f, -0.005187f, -0.020832f, 0.010078f, -0.011774f, -0.003341f, -0.003579f, -0.003676f, -0.001751f, -0.001737f, 0.019395f, 0.029520f, 0.012221f, 0.024726f, 0.018057f, 0.005489f, 0.004321f, 0.002539f, -0.006698f, -0.013918f, 0.004335f, 0.031446f, 0.006759f, 0.010688f, -0.009618f, 0.007670f, -0.015103f, -0.028423f, 0.001338f, 0.014354f, 0.005164f, 0.011442f, 0.017544f, 0.018006f, 0.001841f, -0.020671f, -0.016405f, -0.027203f, -0.040666f, -0.001137f, - -0.004207f, 0.017937f, 0.014417f, -0.015907f, -0.007858f, 0.010428f, 0.022499f, -0.027406f, -0.016667f, -0.005457f, -0.014012f, -0.010326f, -0.004695f, 0.008237f, 0.017701f, 0.000649f, -0.009346f, -0.012619f, 0.017897f, -0.013589f, -0.004824f, -0.000351f, 0.024849f, -0.001564f, 0.002878f, -0.037396f, -0.001917f, 0.009440f, 0.020239f, 0.025444f, 0.006342f, -0.023770f, 0.012365f, 0.001026f, 0.012315f, 0.016459f, 0.003608f, 0.008728f, 0.019106f, 0.032660f, -0.020145f, -0.007229f, -0.000907f, 0.011028f, 0.034705f, 0.015764f, 0.012222f, 0.020780f, -0.005557f, -0.008939f, -0.019334f, -0.022835f, -0.014248f, 0.002341f, 0.017076f, 0.041023f, 0.017513f, 0.008611f, 0.024358f, -0.028563f, -0.018929f, -0.003846f, 0.041697f, 0.015761f, 0.001995f, 0.021364f, -0.012740f, 0.032434f, -0.006744f, -0.029694f, -0.004572f, -0.029484f, 0.024572f, 0.013449f, 0.010343f, 0.008591f, 0.001711f, -0.009785f, 0.012570f, 0.016423f, 0.009762f, -0.006364f, 0.016437f, 0.019825f, 0.019467f, -0.002673f, -0.014392f, 0.027076f, 0.007866f, -0.002034f, -0.003162f, 0.002975f, -0.016426f, 0.017520f, -0.001836f, -0.005210f, - -0.021253f, -0.012669f, -0.012464f, 0.031820f, 0.013107f, 0.000160f, 0.005968f, 0.016403f, 0.025583f, 0.012012f, -0.028894f, 0.027899f, -0.001376f, 0.016125f, 0.008897f, 0.024557f, -0.003575f, -0.032212f, 0.012246f, -0.001461f, 0.015557f, -0.005687f, -0.010842f, 0.012026f, -0.002704f, 0.008187f, 0.043085f, -0.004863f, -0.015988f, 0.000144f, 0.008164f, -0.019677f, 0.035695f, -0.014650f, -0.016408f, 0.028419f, -0.012437f, 0.009406f, -0.009119f, 0.006171f, -0.024341f, -0.008368f, 0.016928f, 0.000317f, -0.023785f, 0.003876f, -0.006758f, 0.016238f, 0.007116f, 0.006790f, -0.041417f, 0.010269f, 0.003233f, 0.013849f, 0.030676f, -0.001710f, -0.001178f, -0.000888f, -0.011873f, 0.025408f, -0.024896f, 0.005553f, 0.019627f, 0.008425f, 0.018258f, -0.010671f, -0.010782f, -0.018729f, -0.025861f, 0.007669f, 0.006661f, 0.012866f, 0.032334f, -0.014945f, 0.028068f, 0.010301f, -0.022417f, -0.017874f, 0.001999f, -0.001129f, 0.003716f, -0.004136f, 0.015125f, 0.018072f, 0.022844f, 0.004552f, -0.049347f, 0.008637f, 0.017857f, 0.011053f, -0.031635f, 0.016263f, -0.014996f, 0.013410f, 0.004701f, 0.004821f, - -0.002046f, 0.008648f, -0.001501f, 0.039071f, 0.023831f, -0.024855f, 0.005201f, -0.060724f, 0.012077f, -0.021935f, -0.013947f, 0.009644f, 0.013996f, -0.034071f, -0.052353f, 0.028135f, 0.023874f, -0.059174f, 0.021066f, -0.020837f, -0.008216f, -0.009431f, 0.018532f, -0.013773f, -0.001653f, 0.004770f, 0.050372f, -0.005364f, 0.035847f, 0.011010f, 0.026517f, 0.003517f, 0.006218f, 0.010926f, 0.048414f, 0.052131f, -0.027997f, -0.022118f, 0.026837f, -0.034855f, -0.001972f, 0.011558f, -0.038459f, 0.022416f, 0.000869f, -0.001240f, -0.008717f, -0.009437f, 0.002262f, 0.005593f, 0.004660f, -0.020718f, -0.002029f, -0.003795f, -0.031691f, 0.016689f, 0.018194f, -0.031210f, -0.026845f, -0.010343f, 0.015312f, 0.018912f, 0.014002f, -0.000077f, -0.009224f, 0.017176f, 0.049766f, 0.029971f, -0.013032f, -0.005084f, -0.009951f, 0.037136f, -0.031201f, 0.014854f, 0.004470f, -0.042305f, -0.021444f, -0.000139f, 0.002700f, -0.035511f, 0.022281f, 0.018700f, 0.003836f, 0.009095f, 0.013966f, -0.033381f, -0.008457f, -0.027280f, -0.003182f, 0.020395f, 0.025796f, 0.021106f, -0.024760f, -0.008081f, -0.007459f, 0.003123f, - -0.028366f, -0.005046f, 0.024400f, 0.036959f, -0.002251f, 0.002089f, -0.022755f, 0.001606f, -0.000669f, -0.016846f, -0.027237f, -0.005625f, -0.012424f, -0.020998f, -0.014763f, 0.023055f, -0.019466f, 0.016635f, -0.005624f, -0.005046f, 0.033088f, -0.022978f, -0.012301f, 0.004696f, 0.013551f, 0.001620f, -0.042975f, -0.026924f, 0.005292f, -0.007280f, 0.007360f, -0.006359f, -0.013268f, 0.027321f, 0.006237f, -0.002674f, -0.011028f, -0.062581f, 0.037716f, -0.011553f, -0.000383f, -0.005583f, 0.002667f, 0.017584f, -0.010102f, -0.017264f, -0.028816f, -0.003003f, 0.013079f, -0.018203f, -0.022815f, 0.009253f, 0.036779f, -0.006447f, 0.034194f, 0.024821f, -0.024754f, 0.045584f, 0.030390f, -0.030403f, -0.046589f, -0.013605f, -0.020306f, 0.002337f, -0.014808f, -0.003763f, 0.022269f, -0.039121f, 0.018956f, -0.006393f, -0.022176f, -0.024463f, -0.024829f, -0.029496f, 0.005617f, 0.018138f, -0.016976f, 0.025657f, -0.039696f, 0.072099f, 0.101101f, -0.009636f, 0.012161f, 0.006628f, 0.024337f, 0.049223f, -0.047076f, 0.000675f, 0.007902f, 0.001037f, -0.017138f, 0.002635f, -0.021135f, 0.024747f, 0.060056f, -0.012641f, - 0.001009f, 0.003536f, 0.017967f, 0.001770f, 0.006755f, 0.023294f, -0.046831f, -0.003368f, 0.045230f, 0.046956f, -0.055165f, -0.011517f, 0.007450f, 0.007821f, 0.015843f, 0.041361f, 0.011115f, 0.083319f, 0.013326f, 0.025816f, 0.011699f, -0.012908f, -0.017854f, -0.000813f, -0.059012f, -0.083770f, -0.029111f, -0.027017f, -0.088214f, 0.013970f, -0.002859f, -0.048547f, -0.024677f, -0.081487f, -0.009844f, -0.010835f, 0.054839f, -0.054155f, 0.033082f, -0.036743f, -0.004141f, -0.023829f, -0.020565f, 0.022844f, 0.048880f, -0.037539f, -0.015847f, -0.002130f, -0.012876f, -0.002354f, 0.019628f, 0.042477f, 0.041335f, -0.027560f, 0.084739f, 0.062296f, 0.006119f, -0.025750f, -0.070512f, -0.036665f, 0.066729f, 0.109751f, -0.025442f, -0.006165f, 0.020084f, 0.048814f, 0.017107f, -0.029231f, 0.018431f, -0.025069f, 0.006818f, 0.015015f, -0.005465f, -0.033653f, 0.010380f, 0.034522f, -0.008342f, -0.050968f, 0.039786f, -0.012221f, 0.032534f, -0.012586f, -0.007573f, -0.013125f, -0.019996f, -0.001551f, 0.036041f, 0.019184f, 0.006230f, 0.028083f, -0.013411f, -0.012264f, 0.011289f, -0.016275f, 0.020249f, 0.010766f, - 0.030815f, 0.051461f, 0.046129f, -0.034022f, -0.061348f, -0.023487f, -0.003689f, 0.047105f, -0.018290f, 0.007452f, 0.019552f, -0.020273f, -0.028265f, -0.046622f, -0.046531f, 0.035399f, 0.039200f, -0.032678f, -0.112167f, 0.007773f, -0.007915f, -0.016997f, 0.008665f, -0.012944f, -0.045089f, -0.022940f, -0.010671f, -0.033415f, -0.013528f, 0.045332f, 0.017914f, 0.024728f, -0.010980f, -0.018970f, -0.010319f, 0.022294f, 0.004338f, -0.001062f, 0.022916f, 0.053293f, -0.025116f, -0.001833f, -0.021008f, 0.011921f, -0.029176f, -0.044082f, -0.011338f, -0.006190f, 0.007045f, -0.014115f, 0.033658f, -0.019442f, -0.072801f, -0.037284f, 0.023311f, -0.032231f, 0.038260f, 0.036857f, -0.017092f, -0.003957f, 0.003699f, -0.020331f, -0.001348f, 0.013064f, -0.004581f, 0.007788f, 0.048745f, 0.043362f, -0.012681f, -0.065047f, -0.052016f, 0.005291f, 0.033703f, -0.025190f, -0.013082f, -0.029843f, -0.041894f, 0.005339f, -0.013011f, -0.045544f, -0.053098f, -0.073709f, 0.028626f, 0.012176f, -0.000083f, 0.045352f, 0.056592f, -0.000371f, -0.045445f, -0.031112f, -0.037142f, -0.017824f, -0.014388f, 0.015531f, 0.020674f, -0.017758f, - -0.034086f, -0.036605f, 0.018794f, 0.021115f, -0.040541f, -0.033598f, -0.016774f, -0.002926f, -0.024507f, 0.017859f, 0.092644f, 0.061399f, 0.108618f, 0.042419f, -0.060499f, 0.075637f, -0.004467f, -0.026305f, 0.002593f, -0.019912f, -0.069998f, 0.065832f, -0.037358f, 0.004236f, 0.019439f, -0.008375f, -0.048784f, 0.049341f, 0.047250f, -0.027211f, -0.037293f, 0.005051f, 0.065394f, -0.034320f, 0.018679f, 0.041821f, 0.012867f, -0.015802f, -0.031171f, -0.020547f, 0.014537f, -0.004991f, 0.011082f, -0.018313f, 0.012222f, -0.040537f, 0.059338f, -0.005714f, 0.013330f, -0.002757f, -0.074782f, 0.023369f, -0.020723f, 0.038656f, 0.023183f, 0.041329f, -0.016151f, -0.071937f, 0.051693f, 0.023522f, -0.024627f, -0.044629f, 0.036979f, 0.020209f, 0.039300f, 0.040237f, -0.034978f, 0.016453f, 0.041402f, -0.060533f, 0.055662f, 0.028191f, -0.002142f, 0.018564f, -0.032107f, 0.071008f, -0.008417f, 0.047203f, 0.020106f, 0.082668f, -0.006433f, -0.012776f, 0.010598f, 0.034910f, 0.020937f, 0.025212f, 0.080956f, 0.007464f, 0.018507f, 0.051325f, -0.033818f, 0.037123f, 0.001201f, -0.049243f, 0.016601f, -0.010783f, - 0.056252f, -0.033186f, -0.048394f, -0.120712f, 0.006452f, -0.014633f, 0.003601f, 0.093771f, 0.076891f, 0.111022f, 0.058386f, -0.029275f, -0.022717f, -0.045707f, -0.061350f, 0.021773f, 0.005239f, 0.016313f, 0.019337f, -0.017582f, 0.027741f, 0.047527f, 0.008566f, -0.012370f, -0.016134f, -0.033171f, -0.022380f, -0.019910f, 0.009116f, 0.015394f, -0.048196f, -0.028075f, -0.006757f, 0.032635f, -0.014689f, 0.021180f, 0.025673f, -0.067873f, -0.067439f, 0.013226f, 0.019364f, 0.015475f, -0.050952f, -0.022842f, -0.045787f, -0.021539f, -0.021058f, 0.044587f, -0.058011f, -0.079909f, -0.030461f, 0.016630f, 0.013494f, -0.061414f, -0.050090f, -0.038457f, -0.029920f, 0.034353f, 0.047067f, 0.002974f, -0.016331f, -0.018762f, -0.011248f, -0.009529f, -0.021671f, -0.067926f, 0.022374f, 0.052878f, 0.046757f, 0.015800f, 0.063983f, 0.088155f, -0.007854f, -0.009940f, 0.066394f, -0.014916f, -0.040416f, -0.090703f, -0.029969f, 0.010804f, 0.078281f, 0.029003f, 0.005340f, 0.030152f, -0.033970f, 0.003348f, -0.017854f, -0.023349f, 0.013658f, 0.007075f, -0.021542f, -0.032809f, -0.020618f, -0.030317f, -0.026758f, 0.011804f, - -0.020859f, -0.008228f, 0.013937f, -0.008315f, 0.002421f, -0.009370f, 0.038526f, -0.029227f, 0.031421f, 0.013463f, 0.002710f, -0.028086f, -0.013804f, 0.025684f, 0.008724f, 0.001390f, 0.018101f, -0.001363f, -0.008841f, -0.010125f, -0.011269f, -0.005995f, 0.002606f, 0.002151f, 0.003027f, -0.032573f, 0.017403f, -0.012088f, -0.014726f, 0.014888f, 0.007343f, 0.007412f, -0.007663f, 0.027560f, 0.020050f, -0.027440f, 0.026297f, -0.000438f, 0.017443f, 0.040618f, -0.008963f, 0.023925f, 0.017817f, -0.014168f, -0.014410f, -0.019917f, 0.000831f, 0.009263f, -0.040737f, 0.021818f, 0.004459f, 0.036899f, -0.013639f, -0.062493f, 0.042064f, 0.011220f, -0.000393f, 0.011676f, -0.032227f, 0.005796f, -0.009363f, 0.022694f, -0.040305f, -0.116737f, -0.172151f, 0.035244f, 0.135684f, 0.004446f, 0.370969f, 0.340649f, 0.234696f, 0.402534f, 0.310414f, 0.040461f, 0.005974f, -0.043989f, -0.297273f, -0.304545f, -0.230961f, -0.398426f, -0.370584f, -0.108304f, -0.124801f, -0.127537f, 0.027755f, 0.071710f, -0.063907f, -0.024098f, 0.116379f, 0.071883f, -0.006705f, 0.084271f, 0.058319f, 0.000300f, 0.070719f, 0.170418f, - 0.111628f, 0.035205f, 0.175513f, 0.127488f, 0.006207f, 0.148514f, 0.204381f, 0.044195f, 0.017711f, 0.206761f, 0.053056f, -0.089748f, 0.101544f, 0.156952f, -0.090128f, 0.030668f, 0.222698f, 0.013614f, 0.030618f, 0.268267f, 0.209794f, 0.009084f, 0.164190f, 0.219167f, -0.088767f, -0.057710f, 0.055235f, -0.198668f, -0.323838f, -0.223254f, -0.356774f, -0.525458f, -0.483281f, -0.539884f, -0.683731f, -0.720960f, -0.638694f, -0.673265f, -0.633306f, -0.473801f, -0.374246f, -0.179391f, 0.004277f, 0.232079f, 0.257570f, 0.057742f}, - {0.001320f, -0.000183f, 0.002318f, -0.002016f, -0.000801f, -0.007018f, -0.003152f, -0.007465f, 0.000744f, -0.004211f, -0.004965f, 0.002457f, 0.004359f, -0.005434f, 0.005429f, 0.000623f, -0.006861f, 0.001091f, -0.007836f, 0.004435f, -0.002193f, -0.001277f, -0.002547f, 0.001779f, -0.003497f, -0.000463f, -0.002269f, 0.002898f, 0.005894f, -0.005430f, -0.002563f, 0.002151f, -0.001185f, 0.003962f, 0.006081f, 0.000255f, 0.002885f, 0.001913f, 0.001795f, -0.000797f, 0.004441f, -0.005837f, -0.002265f, 0.006420f, 0.000209f, 0.007620f, -0.008303f, 0.004397f, -0.003047f, -0.011505f, 0.006014f, 0.005355f, 0.001781f, -0.004090f, -0.002765f, -0.000901f, 0.001231f, 0.000899f, -0.002052f, -0.004014f, -0.002399f, 0.001698f, 0.000273f, 0.003509f, 0.007930f, 0.001857f, 0.000622f, 0.000506f, 0.006620f, 0.003812f, -0.001421f, 0.001819f, -0.000983f, -0.003130f, -0.000646f, -0.004976f, 0.006984f, 0.009656f, -0.005678f, 0.000398f, 0.000309f, -0.006915f, 0.009244f, -0.003687f, -0.003618f, 0.002648f, -0.009544f, -0.004273f, 0.010224f, 0.002329f, -0.004172f, 0.007276f, 0.002248f, 0.001564f, -0.001501f, 0.003555f, - -0.000065f, -0.012223f, -0.000588f, -0.004528f, -0.000554f, -0.000252f, -0.011719f, 0.000198f, -0.007537f, 0.000428f, 0.001175f, 0.005250f, 0.006244f, 0.002086f, 0.001542f, 0.001173f, 0.005390f, -0.002932f, 0.001832f, 0.000375f, 0.000830f, 0.001161f, -0.001644f, 0.004863f, 0.007196f, -0.013835f, 0.006416f, -0.003588f, -0.008379f, -0.005293f, 0.010603f, 0.005384f, -0.003643f, 0.006095f, 0.001702f, -0.003762f, 0.003684f, 0.000137f, -0.000084f, 0.000617f, 0.000632f, -0.001385f, -0.000033f, 0.000850f, -0.000753f, 0.004639f, -0.003015f, -0.006345f, -0.006421f, 0.000023f, 0.001820f, -0.000338f, -0.000051f, 0.003549f, -0.001846f, 0.006198f, 0.005184f, 0.000344f, -0.004075f, 0.002547f, -0.002175f, -0.003312f, 0.000853f, -0.006945f, -0.000781f, -0.005206f, 0.001870f, 0.003225f, 0.003171f, 0.002466f, -0.005346f, -0.000390f, -0.004416f, 0.004791f, -0.009174f, -0.005245f, 0.004734f, -0.010125f, -0.001070f, -0.000663f, 0.002661f, 0.002233f, 0.005059f, 0.010524f, 0.004934f, -0.001293f, 0.000054f, -0.003741f, -0.002839f, -0.018540f, -0.016996f, -0.001116f, 0.012750f, -0.003111f, 0.010208f, 0.000920f, - 0.002997f, -0.003103f, -0.014258f, 0.007475f, 0.002390f, -0.004276f, 0.003660f, -0.007567f, -0.001427f, 0.004369f, 0.002030f, 0.013531f, -0.009114f, 0.008234f, -0.004102f, -0.010554f, -0.004790f, -0.002835f, -0.002773f, 0.003815f, 0.003315f, -0.008506f, -0.003672f, -0.004831f, -0.001676f, 0.008289f, 0.008959f, 0.009487f, -0.006821f, 0.001146f, -0.004247f, -0.000685f, -0.003588f, -0.004925f, -0.005674f, -0.006907f, 0.006935f, -0.006577f, -0.008425f, -0.007373f, 0.000236f, -0.002947f, -0.002323f, -0.005852f, 0.001270f, -0.006536f, -0.000461f, -0.002729f, 0.009938f, -0.006461f, -0.007010f, -0.015707f, -0.020302f, -0.004987f, -0.009061f, -0.008401f, -0.002007f, 0.004118f, -0.005180f, -0.012265f, 0.007518f, -0.017752f, 0.005268f, -0.003060f, -0.003221f, 0.011324f, 0.007999f, 0.004126f, 0.001519f, -0.002071f, -0.001888f, -0.004400f, 0.001770f, 0.007643f, -0.006324f, 0.007240f, 0.006695f, 0.001861f, 0.000902f, 0.002945f, 0.005086f, -0.011602f, -0.005106f, 0.010832f, -0.008627f, 0.000597f, -0.000320f, 0.006578f, -0.001003f, -0.002672f, 0.001088f, 0.011239f, 0.006094f, 0.003832f, 0.003448f, 0.006210f, - -0.010273f, 0.007628f, -0.008458f, 0.007054f, 0.004425f, -0.002249f, -0.001782f, -0.003535f, -0.004892f, -0.007425f, -0.000843f, -0.002400f, -0.006407f, -0.006565f, -0.004417f, -0.003862f, 0.003640f, -0.010322f, -0.000689f, -0.004614f, -0.010309f, -0.004161f, -0.002271f, -0.006453f, -0.002761f, -0.005919f, -0.002916f, 0.005438f, 0.006292f, -0.010721f, -0.006790f, 0.004094f, -0.002668f, -0.011750f, 0.007660f, 0.014965f, 0.002592f, -0.002975f, -0.007245f, 0.002056f, 0.006552f, 0.013589f, -0.007147f, -0.002325f, -0.008894f, -0.006290f, 0.006781f, 0.007756f, -0.010709f, 0.006478f, -0.003763f, -0.006041f, 0.009823f, 0.000459f, 0.005117f, -0.013655f, 0.000446f, -0.008571f, 0.001512f, -0.010761f, -0.007633f, -0.001320f, -0.003203f, 0.024042f, 0.006873f, 0.006641f, 0.003978f, -0.016947f, 0.009155f, 0.007382f, -0.004527f, 0.000149f, 0.006941f, -0.000477f, 0.007338f, 0.009962f, 0.008516f, -0.004735f, -0.000137f, -0.002330f, 0.004064f, -0.003709f, -0.005619f, 0.003810f, -0.005429f, 0.002842f, 0.001738f, 0.000963f, 0.004126f, 0.002988f, -0.012006f, -0.000491f, -0.003674f, -0.014567f, -0.008094f, 0.005944f, - -0.006343f, 0.017066f, 0.007544f, 0.016715f, -0.000215f, -0.008160f, -0.008659f, -0.011713f, 0.017896f, -0.004350f, 0.008212f, 0.009139f, 0.001953f, 0.006448f, 0.005897f, 0.005712f, 0.002342f, -0.011741f, -0.000584f, -0.004506f, -0.001669f, 0.008131f, -0.000629f, -0.000667f, 0.005743f, 0.003617f, 0.005952f, -0.005057f, -0.018456f, -0.011021f, -0.006904f, 0.013755f, -0.012220f, -0.003670f, 0.008536f, -0.000870f, 0.001723f, -0.010297f, 0.018169f, 0.001057f, -0.006824f, 0.014285f, -0.008534f, 0.022087f, 0.011583f, -0.004899f, 0.002769f, -0.006207f, -0.004052f, -0.020222f, 0.007438f, -0.009190f, -0.001167f, -0.000757f, -0.004152f, 0.008709f, -0.003081f, -0.008860f, -0.008293f, 0.001972f, -0.007515f, -0.008764f, 0.005370f, 0.000630f, 0.006723f, -0.003614f, -0.017974f, 0.006048f, 0.008699f, 0.009796f, -0.009123f, -0.012168f, 0.002646f, 0.015781f, 0.015125f, -0.013974f, 0.007166f, 0.016758f, -0.012033f, 0.002908f, -0.006609f, -0.014078f, 0.020413f, 0.006948f, 0.018975f, 0.016598f, 0.002844f, -0.014292f, -0.008083f, 0.006493f, -0.000607f, 0.002325f, -0.014556f, 0.000887f, -0.026091f, -0.011754f, - -0.020322f, 0.011952f, -0.011475f, -0.001161f, 0.003952f, -0.004162f, -0.005172f, 0.005438f, 0.006369f, 0.017390f, -0.002443f, -0.004891f, -0.013880f, -0.012792f, 0.011671f, 0.001592f, 0.004018f, 0.020837f, -0.006615f, -0.000826f, 0.011534f, -0.006217f, 0.005265f, 0.002942f, 0.011466f, 0.009348f, -0.007407f, -0.002267f, -0.015009f, 0.014204f, -0.010371f, -0.014575f, -0.013163f, 0.006844f, -0.005148f, -0.008373f, 0.014691f, -0.006119f, 0.015169f, -0.011132f, -0.007965f, -0.003554f, 0.009568f, 0.011705f, -0.001839f, -0.016124f, 0.004239f, -0.011034f, 0.017619f, 0.001945f, 0.009689f, -0.017138f, -0.008211f, 0.001912f, 0.008050f, -0.022389f, 0.007334f, 0.007450f, 0.003865f, -0.016830f, 0.012537f, 0.022468f, -0.022161f, 0.008666f, -0.013959f, 0.009110f, 0.000318f, 0.008205f, -0.007212f, -0.000049f, 0.004146f, -0.014153f, -0.008153f, -0.005905f, 0.010554f, 0.012438f, -0.004970f, 0.005987f, -0.003989f, 0.009212f, 0.010353f, 0.004683f, 0.002353f, -0.011377f, -0.005473f, -0.014295f, -0.017175f, -0.011079f, -0.000126f, -0.005282f, -0.001989f, -0.006657f, -0.017223f, -0.005411f, 0.001925f, 0.001392f, - -0.002335f, 0.024028f, -0.020944f, 0.007049f, -0.011189f, -0.003022f, -0.007574f, -0.006412f, 0.008689f, -0.006444f, -0.000841f, -0.007801f, -0.006635f, -0.009462f, 0.010557f, -0.011852f, 0.008271f, -0.003242f, 0.008180f, -0.001614f, -0.000471f, -0.001839f, 0.007654f, 0.004740f, -0.002495f, 0.019924f, -0.001508f, -0.011618f, 0.003025f, -0.010685f, -0.014244f, -0.015311f, 0.010740f, 0.003494f, 0.009110f, 0.010846f, 0.004720f, -0.023131f, -0.002976f, 0.004197f, -0.006652f, -0.017986f, 0.020742f, -0.000346f, -0.000245f, 0.019586f, -0.006227f, -0.017991f, 0.005680f, 0.013567f, 0.022607f, -0.000439f, 0.008957f, 0.003130f, -0.021845f, -0.005027f, -0.011848f, 0.011693f, 0.005018f, 0.006637f, -0.008805f, -0.000317f, -0.001886f, 0.003018f, -0.008039f, 0.010990f, 0.001747f, -0.007251f, 0.011234f, 0.002856f, -0.014642f, -0.010339f, 0.002235f, 0.015933f, 0.012321f, -0.017365f, 0.035311f, -0.000626f, -0.000231f, 0.011155f, -0.002337f, -0.003561f, -0.001199f, 0.024508f, -0.012508f, 0.012752f, -0.003632f, 0.017376f, 0.004070f, 0.015726f, -0.006247f, -0.010071f, 0.007313f, 0.013684f, -0.006791f, -0.012461f, - -0.015623f, -0.011837f, -0.006514f, -0.001230f, 0.013344f, 0.001838f, 0.011653f, 0.000121f, -0.004132f, 0.013518f, -0.010359f, -0.018335f, -0.005038f, -0.011040f, -0.011316f, -0.020745f, 0.018083f, -0.007123f, -0.001453f, -0.001342f, -0.013615f, -0.001128f, 0.001235f, 0.009835f, -0.014350f, 0.000524f, -0.002076f, -0.006274f, -0.029991f, -0.003879f, 0.014387f, 0.010764f, 0.014732f, 0.001444f, -0.016062f, 0.042554f, 0.018144f, 0.028851f, 0.003172f, -0.013020f, -0.004962f, -0.004419f, -0.018050f, -0.001439f, -0.007018f, 0.008818f, 0.000156f, 0.000626f, -0.005724f, -0.008100f, -0.015278f, 0.004836f, 0.001595f, 0.000399f, 0.007999f, -0.001028f, 0.003425f, -0.001923f, -0.013310f, -0.010777f, 0.008109f, -0.000381f, 0.019461f, -0.025031f, 0.019668f, 0.011592f, -0.008704f, -0.018276f, -0.027811f, 0.005335f, 0.021828f, -0.011785f, 0.021091f, -0.002277f, -0.001105f, 0.004215f, -0.006436f, -0.025355f, 0.002685f, 0.010868f, 0.004843f, -0.011563f, -0.003257f, -0.007674f, 0.004856f, 0.010866f, -0.001414f, 0.001807f, -0.002706f, 0.010044f, -0.006743f, -0.005683f, 0.005155f, -0.008636f, 0.004506f, -0.032841f, - 0.023468f, 0.021695f, 0.025032f, -0.007812f, -0.022694f, 0.008227f, 0.008896f, -0.033310f, -0.030737f, 0.030037f, 0.003143f, -0.014093f, 0.011155f, -0.020599f, -0.023956f, 0.003865f, 0.062272f, 0.029411f, 0.011576f, -0.016402f, 0.000324f, -0.005482f, 0.000566f, -0.006514f, -0.003356f, -0.007263f, 0.002383f, 0.018399f, 0.003691f, 0.022572f, -0.008451f, -0.006493f, 0.004250f, 0.016078f, -0.002635f, -0.001353f, -0.032242f, -0.000482f, -0.017972f, -0.000018f, 0.025671f, 0.019041f, -0.006210f, 0.018702f, 0.035564f, -0.015521f, 0.010700f, 0.030279f, -0.020679f, 0.032023f, -0.001848f, 0.014064f, -0.006491f, 0.002852f, -0.003281f, 0.005948f, 0.008071f, 0.032269f, -0.010602f, -0.001830f, 0.009092f, -0.011967f, 0.010259f, 0.007165f, -0.006703f, -0.011050f, 0.031613f, 0.001176f, -0.014635f, -0.001760f, 0.020621f, -0.003400f, 0.014788f, 0.005439f, 0.002174f, -0.001426f, -0.005526f, 0.040930f, 0.006694f, 0.006232f, -0.021589f, -0.011673f, 0.000483f, 0.005158f, 0.007593f, 0.009868f, -0.040676f, 0.002292f, 0.001925f, 0.029422f, 0.004017f, 0.007826f, -0.003377f, 0.026784f, -0.043674f, 0.001758f, - 0.021404f, -0.025217f, 0.005761f, 0.005433f, 0.020100f, 0.004473f, 0.001540f, -0.006673f, -0.000012f, -0.021656f, 0.006767f, -0.005158f, 0.003200f, 0.006307f, -0.004481f, -0.016400f, 0.005391f, -0.012906f, -0.023667f, 0.013196f, -0.013712f, 0.008738f, -0.022320f, -0.013405f, -0.003055f, -0.006533f, 0.004360f, -0.009047f, 0.022832f, -0.000201f, 0.021716f, -0.023770f, -0.020952f, -0.006487f, -0.000531f, -0.000498f, -0.007880f, 0.020103f, 0.015651f, 0.042029f, -0.007737f, 0.026669f, -0.016838f, -0.003252f, 0.007127f, -0.032835f, 0.035558f, -0.001960f, 0.021651f, -0.002239f, -0.033266f, -0.021175f, 0.012033f, -0.045674f, 0.020549f, 0.001203f, 0.007699f, 0.021049f, 0.031328f, 0.011445f, -0.013490f, 0.030585f, -0.032585f, -0.002866f, -0.010197f, 0.004527f, 0.025520f, -0.022736f, 0.057864f, 0.008311f, 0.014212f, -0.016459f, -0.023563f, 0.008791f, 0.000098f, 0.050066f, -0.007140f, -0.016313f, -0.028224f, -0.018190f, 0.013765f, 0.009685f, 0.008098f, -0.002649f, -0.027661f, -0.041850f, 0.003350f, -0.024799f, 0.034517f, 0.005539f, 0.028111f, -0.016117f, 0.011934f, -0.009977f, 0.014770f, 0.041490f, - -0.006316f, -0.002980f, -0.005662f, 0.011857f, 0.013863f, 0.008294f, 0.003480f, 0.005632f, 0.018064f, 0.017261f, -0.008408f, -0.012205f, -0.011726f, -0.012149f, 0.046825f, 0.019957f, -0.026152f, 0.022682f, -0.005204f, -0.020148f, -0.014826f, 0.010176f, 0.017996f, -0.029355f, -0.039839f, 0.006837f, -0.016933f, 0.056346f, 0.029678f, -0.006823f, -0.004228f, 0.013955f, 0.026718f, 0.008702f, -0.000856f, -0.005334f, -0.030639f, -0.005913f, -0.003065f, -0.000145f, -0.013117f, -0.027780f, 0.016830f, -0.010747f, 0.024384f, 0.007833f, -0.021914f, -0.012479f, -0.010046f, 0.002819f, -0.030309f, 0.019568f, 0.032779f, -0.014915f, 0.021216f, -0.007106f, -0.006387f, 0.012449f, -0.020676f, 0.011620f, 0.026944f, 0.004328f, 0.044988f, 0.018310f, -0.016017f, 0.015775f, 0.009775f, 0.013508f, 0.002705f, 0.020446f, 0.022044f, 0.028260f, 0.013600f, -0.014912f, -0.012623f, -0.022021f, 0.000065f, 0.045199f, 0.002906f, 0.017400f, -0.028405f, 0.059817f, -0.016785f, -0.052291f, -0.021441f, 0.036534f, 0.004959f, -0.008725f, -0.003631f, -0.006187f, 0.031345f, -0.025072f, 0.018892f, -0.007870f, 0.038973f, 0.053284f, - 0.031005f, 0.023732f, -0.018481f, 0.028522f, 0.021241f, 0.015248f, 0.023649f, 0.028200f, -0.005101f, -0.060776f, -0.034649f, -0.045584f, 0.012101f, 0.009731f, 0.012991f, -0.014757f, 0.020061f, 0.044327f, 0.004227f, 0.000083f, -0.013393f, 0.008672f, 0.020295f, 0.024800f, 0.008340f, 0.011862f, 0.018500f, -0.014553f, 0.043651f, 0.017805f, 0.008033f, -0.012218f, -0.034369f, -0.013296f, 0.017955f, -0.001490f, -0.048510f, 0.064952f, -0.023224f, -0.012345f, 0.019373f, 0.001279f, -0.006996f, 0.004966f, -0.013099f, -0.014906f, -0.003872f, -0.034913f, 0.008127f, -0.037557f, 0.000469f, -0.029749f, -0.034310f, -0.006585f, -0.007767f, -0.007241f, -0.025271f, 0.010957f, 0.025805f, 0.007190f, 0.019608f, -0.034985f, 0.033952f, 0.063060f, 0.005886f, -0.025275f, 0.038715f, -0.032289f, -0.051812f, 0.085131f, -0.009413f, 0.005986f, -0.006624f, -0.038167f, 0.028663f, -0.034633f, 0.014198f, 0.051906f, -0.001822f, 0.071326f, -0.056600f, 0.053695f, 0.014805f, -0.035492f, -0.019499f, 0.006674f, -0.035062f, -0.016905f, 0.036627f, -0.036888f, 0.023182f, -0.024318f, 0.011822f, 0.041055f, -0.089402f, -0.034760f, - 0.035798f, -0.016178f, 0.008827f, -0.024674f, -0.074979f, -0.019063f, 0.024202f, 0.058063f, -0.018620f, 0.029542f, 0.000561f, 0.014205f, 0.029648f, 0.019822f, 0.051524f, -0.012867f, 0.001998f, 0.014754f, -0.046016f, -0.028901f, -0.013839f, -0.014218f, 0.010377f, 0.001421f, 0.003729f, -0.023212f, -0.004099f, -0.030913f, -0.025852f, 0.013113f, 0.063771f, 0.037550f, -0.016924f, -0.019628f, 0.030337f, 0.037357f, -0.021849f, 0.010543f, 0.027962f, -0.010164f, 0.061003f, 0.021802f, 0.008855f, -0.046100f, 0.028961f, 0.007085f, 0.022779f, -0.003681f, 0.005752f, -0.006568f, -0.010352f, -0.073079f, 0.019484f, 0.052754f, 0.025132f, 0.008277f, -0.001771f, 0.027390f, -0.042230f, -0.075720f, 0.005238f, 0.103999f, 0.024005f, 0.082894f, 0.076213f, 0.002728f, 0.005660f, -0.047247f, -0.045291f, -0.002920f, -0.039562f, 0.053028f, -0.114496f, 0.022751f, -0.045888f, -0.087930f, 0.013630f, 0.042161f, -0.017549f, 0.052646f, 0.097423f, 0.000544f, 0.028127f, 0.015285f, -0.048038f, -0.016108f, 0.052131f, 0.013891f, 0.024204f, -0.014396f, 0.016723f, 0.006692f, -0.015508f, -0.001025f, 0.028207f, 0.025708f, - 0.035829f, -0.016601f, -0.001794f, -0.075875f, -0.067150f, 0.007833f, -0.040568f, -0.000256f, 0.039751f, 0.007293f, 0.006952f, -0.014597f, -0.005741f, 0.022207f, 0.060983f, -0.044098f, -0.021655f, -0.007237f, -0.038455f, -0.004701f, -0.036891f, -0.014042f, -0.039260f, 0.035562f, -0.048105f, -0.005850f, 0.012281f, 0.023064f, 0.092527f, 0.117448f, 0.034152f, -0.033019f, -0.060134f, -0.007307f, -0.039908f, -0.018767f, -0.063873f, 0.008408f, 0.069097f, 0.046372f, 0.043243f, 0.002983f, 0.013850f, 0.065062f, 0.069529f, 0.045929f, 0.001112f, 0.028351f, 0.016559f, 0.013144f, -0.070901f, 0.021511f, 0.015238f, -0.019312f, 0.054120f, 0.061655f, 0.000618f, -0.001779f, -0.017524f, -0.021119f, 0.057359f, 0.044512f, -0.030470f, 0.030816f, 0.042038f, 0.007075f, -0.057507f, -0.063984f, 0.059542f, 0.023097f, 0.012086f, 0.050678f, -0.001132f, -0.019067f, 0.049918f, 0.015842f, -0.041826f, -0.017973f, -0.016630f, 0.019717f, -0.001217f, -0.021568f, 0.006814f, -0.024072f, -0.005014f, -0.009668f, -0.015170f, 0.037708f, 0.063777f, -0.020346f, 0.011245f, 0.033442f, -0.018052f, -0.011066f, 0.010219f, 0.040006f, - 0.009433f, -0.026613f, -0.039328f, -0.041721f, 0.020927f, 0.027293f, 0.057320f, -0.025989f, -0.029859f, 0.023674f, 0.032887f, 0.058683f, -0.004599f, -0.101083f, -0.025312f, 0.036307f, 0.030212f, 0.017979f, -0.023544f, 0.002318f, -0.044882f, 0.009498f, -0.021415f, 0.046615f, 0.058278f, -0.015000f, -0.002332f, -0.032221f, -0.043056f, -0.010749f, -0.083395f, -0.011060f, -0.044362f, 0.040951f, -0.036221f, 0.043433f, 0.041914f, -0.083128f, -0.009241f, -0.025585f, -0.021992f, -0.030112f, -0.050137f, -0.011330f, -0.028077f, -0.050725f, -0.076883f, 0.037232f, 0.039132f, 0.023087f, -0.051667f, -0.069914f, -0.054053f, -0.030725f, 0.011820f, -0.002797f, -0.068550f, -0.041038f, -0.047308f, 0.065100f, 0.019520f, 0.027909f, -0.021726f, -0.038245f, 0.082249f, 0.019717f, 0.024812f, -0.016933f, 0.003670f, 0.023575f, -0.018396f, 0.018437f, -0.007565f, 0.038534f, 0.054670f, 0.001171f, -0.046907f, -0.037768f, 0.042842f, 0.029034f, 0.037250f, 0.009732f, 0.007979f, -0.021697f, -0.010677f, 0.004769f, 0.025300f, 0.057094f, -0.002495f, -0.111575f, -0.103802f, -0.000389f, -0.026968f, 0.063965f, 0.064866f, -0.076489f, - -0.052540f, -0.033298f, 0.090612f, 0.080733f, -0.046959f, 0.011324f, -0.060779f, -0.058309f, 0.032421f, -0.027603f, -0.001503f, -0.009974f, -0.042312f, 0.028271f, 0.028670f, 0.023723f, 0.093405f, -0.067711f, -0.018269f, -0.003976f, 0.022252f, 0.085635f, -0.054665f, 0.051035f, 0.063792f, 0.030197f, -0.126850f, -0.059960f, 0.051349f, -0.042643f, 0.032553f, -0.015888f, -0.048701f, 0.029149f, 0.017466f, 0.004238f, -0.017672f, -0.094696f, -0.001489f, -0.009037f, 0.007282f, -0.018960f, -0.057366f, 0.041768f, -0.032705f, 0.075819f, -0.001531f, -0.013575f, 0.047260f, 0.023399f, -0.031991f, -0.010085f, -0.022352f, 0.037443f, 0.076667f, 0.046140f, -0.050754f, 0.006525f, -0.031339f, 0.028595f, -0.026088f, -0.020597f, 0.013733f, -0.009714f, 0.045703f, -0.041363f, -0.072755f, 0.013922f, -0.020543f, 0.023233f, 0.040221f, -0.109680f, -0.008565f, -0.026842f, 0.012810f, 0.106093f, -0.021288f, -0.090268f, -0.012343f, 0.064308f, 0.044588f, -0.052866f, -0.004380f, 0.036344f, 0.010536f, 0.046479f, -0.071934f, -0.053145f, 0.061757f, -0.061967f, -0.114435f, -0.047853f, -0.004402f, 0.133337f, -0.026346f, -0.086984f, - 0.051218f, -0.097087f, 0.180592f, -0.121348f, 0.033482f, -0.001234f, 0.040951f, 0.101646f, 0.031579f, 0.014578f, -0.057696f, -0.022953f, -0.057678f, -0.067471f, -0.023637f, 0.014004f, 0.038087f, 0.052107f, -0.006633f, 0.030533f, 0.035418f, -0.031061f, -0.064981f, 0.034476f, 0.011286f, -0.051583f, -0.018635f, 0.049951f, -0.017789f, -0.005094f, 0.044303f, 0.025795f, 0.019134f, 0.006689f, 0.024724f, -0.024284f, -0.060568f, -0.025569f, 0.015901f, -0.024109f, -0.015157f, 0.022053f, 0.000347f, -0.041727f, 0.042565f, 0.009600f, -0.040012f, 0.005094f, -0.010585f, 0.037683f, 0.019690f, -0.015170f, 0.016377f, -0.023237f, -0.053527f, 0.006879f, 0.011306f, -0.004932f, -0.001335f, 0.010771f, -0.024329f, 0.006845f, -0.021138f, 0.011250f, 0.035514f, -0.004542f, 0.014429f, 0.016480f, -0.016399f, 0.000022f, -0.037735f, 0.011040f, 0.018496f, -0.065953f, 0.034655f, -0.041969f, 0.009282f, -0.000057f, -0.005021f, 0.018240f, 0.098497f, -0.003242f, -0.003613f, -0.027071f, -0.027301f, 0.020734f, -0.001491f, 0.018018f, 0.000028f, -0.009239f, -0.013327f, 0.007135f, -0.018533f, 0.018993f, -0.017453f, 0.027483f, - -0.022077f, 0.016226f, -0.018705f, -0.003622f, -0.003175f, -0.016707f, -0.013344f, 0.004424f, -0.007934f, -0.004893f, -0.000275f, -0.012389f, 0.001590f, -0.001996f, 0.004025f, -0.002454f, 0.007469f, -0.025355f, 0.023584f, -0.008267f, -0.007792f, 0.018559f, -0.014405f, 0.001610f, -0.017964f, -0.015074f, 0.011483f, 0.010770f, -0.012572f, -0.007470f, 0.005168f, -0.000114f, -0.021866f, 0.006338f, 0.004005f, 0.000703f, 0.014604f, -0.004625f, -0.005994f, -0.005193f, -0.014762f, -0.003347f, 0.016033f, -0.016013f, 0.004650f, -0.007395f, -0.001669f, 0.001779f, -0.004634f, 0.004365f, 0.000635f, 0.011623f, -0.015347f, -0.000862f, 0.011143f, -0.020306f, 0.013109f, -0.009284f, 0.001749f, 0.008685f, -0.001017f, -0.010634f, -0.045594f, -0.079166f, 0.029895f, 0.250195f, 0.063634f, 0.137619f, -0.004602f, -0.135573f, -0.042933f, -0.133407f, -0.112484f, -0.040814f, -0.026447f, -0.009993f, 0.076061f, 0.100247f, 0.134369f, 0.167895f, 0.073690f, -0.043863f, -0.077163f, -0.166244f, -0.156451f, -0.064834f, -0.051633f, -0.035709f, 0.068984f, 0.092098f, 0.056422f, 0.085365f, 0.104117f, 0.034306f, 0.029316f, 0.018717f, - -0.052360f, -0.025112f, -0.037167f, -0.083865f, -0.044894f, -0.062407f, -0.090646f, -0.050392f, 0.012568f, 0.009439f, 0.052512f, 0.124056f, 0.086374f, 0.070526f, 0.070328f, 0.020991f, 0.006476f, -0.007262f, -0.034378f, -0.051215f, -0.063166f, -0.092488f, -0.080150f, -0.045645f, -0.012655f, -0.031055f, 0.027588f, 0.048236f, 0.042668f, 0.070755f, 0.080455f, 0.051012f, 0.047928f, 0.045565f, -0.004225f, -0.020349f, -0.007752f, -0.061549f, -0.048754f, -0.009986f, -0.046559f, -0.049326f, -0.024480f, -0.023917f, 0.005571f, 0.001611f} - }, - { - {-0.001074f, 0.000794f, -0.004785f, 0.004975f, -0.006732f, 0.000726f, -0.002276f, -0.004292f, -0.008361f, -0.002802f, -0.000090f, 0.001502f, 0.010056f, 0.005424f, -0.003816f, 0.000069f, -0.000944f, -0.000143f, 0.000610f, 0.000284f, 0.003260f, -0.000461f, 0.002118f, -0.001599f, -0.012281f, -0.004298f, -0.002061f, 0.000603f, 0.007422f, -0.004609f, 0.000506f, -0.000696f, -0.000241f, -0.002658f, 0.004374f, 0.000868f, -0.001997f, 0.005312f, -0.003768f, 0.002015f, 0.002391f, -0.005407f, 0.004740f, -0.002365f, 0.000306f, 0.001228f, 0.001696f, 0.002378f, -0.002198f, -0.004019f, -0.001315f, -0.002792f, 0.002061f, -0.002530f, 0.000555f, 0.003202f, 0.008493f, -0.002981f, -0.006636f, -0.001955f, 0.006263f, 0.006475f, 0.004021f, -0.000199f, 0.001910f, -0.002379f, -0.003319f, -0.002734f, -0.007926f, 0.005587f, -0.001130f, 0.001401f, 0.000150f, -0.003781f, 0.001374f, 0.001608f, 0.005953f, 0.005654f, -0.005071f, -0.001065f, 0.008460f, 0.002591f, -0.004144f, 0.000759f, -0.004593f, -0.004363f, -0.003241f, -0.007580f, -0.002426f, 0.004413f, -0.000202f, 0.002390f, -0.001090f, -0.002234f, -0.001896f, -0.001023f, - 0.006431f, -0.004071f, 0.000563f, -0.000393f, 0.000449f, 0.004862f, 0.000014f, 0.003316f, 0.011075f, 0.008398f, 0.008726f, 0.004335f, 0.002125f, -0.001466f, -0.009883f, 0.004054f, -0.003567f, 0.006385f, 0.002486f, -0.003486f, 0.003239f, -0.004556f, -0.008529f, -0.002741f, -0.003169f, -0.008308f, 0.000562f, -0.001045f, -0.000968f, -0.003890f, 0.000746f, 0.008627f, 0.004051f, 0.005878f, 0.000139f, 0.003639f, -0.003136f, -0.000188f, 0.004757f, -0.003647f, 0.003276f, -0.004510f, -0.004655f, 0.000652f, 0.010435f, 0.006893f, 0.004191f, -0.001714f, 0.002007f, 0.001436f, 0.000920f, -0.001370f, -0.003539f, -0.005325f, -0.003925f, 0.001078f, -0.003280f, 0.003750f, 0.001882f, -0.006418f, 0.015156f, -0.000321f, 0.000867f, -0.001612f, -0.008086f, 0.005922f, -0.004256f, -0.004031f, -0.009431f, -0.007236f, -0.003119f, 0.005768f, 0.008253f, -0.001738f, 0.004833f, -0.001979f, 0.008943f, 0.009334f, -0.018893f, 0.003360f, -0.000047f, -0.001926f, 0.006204f, 0.009890f, -0.003239f, -0.001565f, 0.000035f, -0.000735f, -0.004948f, 0.003795f, -0.004999f, -0.003944f, -0.000592f, 0.004848f, -0.003047f, -0.010727f, - -0.004922f, -0.007361f, 0.000596f, 0.000437f, -0.009630f, -0.001330f, -0.004365f, 0.001709f, -0.000571f, -0.001669f, 0.001993f, -0.003398f, 0.002848f, -0.005319f, 0.004575f, 0.006893f, 0.010701f, 0.004255f, -0.005243f, 0.003595f, 0.004216f, -0.002148f, -0.013005f, 0.000376f, 0.006028f, -0.005521f, 0.003220f, -0.007801f, -0.000678f, -0.005222f, -0.013396f, -0.004523f, -0.007392f, 0.002525f, 0.003918f, -0.005051f, 0.001125f, -0.002606f, 0.012260f, 0.003579f, -0.017092f, 0.006172f, 0.008483f, 0.003330f, -0.001664f, 0.004564f, -0.010825f, 0.001648f, 0.004501f, -0.002238f, 0.004340f, -0.000590f, 0.005329f, 0.001467f, -0.007396f, 0.004627f, 0.006324f, 0.006591f, -0.002120f, 0.003202f, 0.003299f, 0.002558f, -0.019387f, 0.002781f, -0.008399f, -0.002325f, -0.002967f, 0.004550f, 0.001807f, -0.015548f, -0.005896f, -0.003435f, -0.003243f, 0.006409f, -0.006100f, -0.010881f, 0.002408f, 0.005109f, 0.002861f, -0.010842f, -0.005417f, 0.003511f, -0.010577f, -0.000812f, -0.011662f, 0.001674f, 0.005238f, -0.005816f, -0.002104f, 0.006481f, 0.007923f, -0.019302f, -0.001780f, -0.005386f, 0.005475f, 0.002351f, - 0.000584f, 0.001617f, -0.005821f, 0.004849f, 0.003840f, -0.015049f, 0.011076f, -0.001629f, 0.002382f, -0.007740f, -0.003672f, -0.006575f, -0.001316f, 0.001561f, -0.006549f, -0.008447f, 0.006786f, -0.002754f, -0.008571f, -0.007176f, -0.006786f, -0.003568f, 0.012186f, -0.003960f, 0.001272f, -0.009808f, 0.010434f, 0.001187f, -0.007828f, -0.001480f, 0.005855f, -0.012678f, 0.004010f, -0.003410f, 0.002510f, 0.002595f, -0.006471f, -0.003793f, -0.016089f, -0.003727f, -0.018064f, 0.002767f, 0.003510f, -0.001397f, -0.002856f, -0.001111f, 0.002195f, -0.006387f, -0.013018f, -0.005323f, -0.005089f, -0.001420f, 0.004133f, -0.002366f, 0.006993f, 0.003853f, 0.005241f, -0.007236f, -0.000931f, 0.000167f, -0.007005f, 0.002370f, 0.004620f, 0.000067f, -0.003760f, -0.007037f, -0.007578f, 0.005354f, 0.006569f, 0.000389f, 0.013520f, 0.011795f, -0.010637f, -0.001908f, -0.000550f, -0.009953f, -0.012760f, 0.019095f, -0.000913f, 0.001243f, 0.005131f, -0.010911f, -0.004507f, -0.006752f, 0.017464f, 0.005782f, 0.000209f, -0.013510f, -0.012266f, 0.002599f, -0.005584f, 0.010614f, -0.005772f, 0.001515f, 0.001439f, -0.021226f, - 0.010635f, 0.006008f, 0.010847f, -0.005814f, 0.005958f, 0.006204f, 0.011152f, 0.002638f, -0.021148f, 0.005295f, 0.000948f, 0.008425f, 0.015411f, 0.000816f, 0.006719f, 0.005858f, -0.012638f, 0.004466f, 0.001224f, 0.001768f, -0.003394f, -0.001750f, 0.007929f, 0.005229f, 0.000383f, -0.007746f, -0.000026f, -0.003689f, -0.003944f, 0.012703f, 0.005941f, -0.000518f, -0.001615f, -0.015320f, -0.013063f, -0.015050f, 0.004105f, 0.004083f, -0.015510f, 0.001119f, 0.001170f, -0.015463f, 0.001094f, 0.002396f, -0.001938f, 0.017787f, -0.002051f, -0.008740f, -0.002046f, 0.010209f, -0.000679f, -0.015851f, 0.017397f, 0.008904f, -0.010754f, 0.008357f, 0.001888f, 0.001578f, -0.000042f, 0.000923f, -0.003984f, -0.008012f, -0.007225f, 0.013686f, -0.000568f, -0.004117f, -0.000239f, 0.009768f, -0.008695f, -0.016368f, 0.001158f, 0.003454f, 0.003782f, -0.014488f, -0.006247f, 0.004965f, 0.006514f, 0.024368f, 0.007420f, 0.019522f, -0.021475f, 0.000711f, -0.010534f, 0.000229f, 0.007310f, 0.008158f, -0.010961f, 0.004741f, -0.006286f, -0.005799f, -0.007568f, -0.012654f, -0.001689f, -0.029660f, -0.000125f, 0.009661f, - -0.001143f, -0.002110f, 0.003416f, -0.015605f, 0.005629f, -0.014884f, -0.004494f, 0.015138f, 0.003265f, 0.005164f, 0.000545f, 0.004391f, 0.013178f, 0.011660f, 0.022824f, 0.011664f, -0.016917f, -0.001520f, 0.019268f, -0.002764f, -0.013746f, -0.002218f, 0.001980f, -0.006476f, 0.012990f, 0.009364f, -0.010756f, -0.003316f, 0.012474f, 0.012923f, -0.004417f, -0.008414f, 0.020900f, -0.008657f, -0.027634f, -0.018984f, 0.006373f, -0.028203f, -0.000327f, -0.008590f, 0.000367f, -0.002835f, -0.007612f, 0.010221f, 0.003215f, -0.003082f, -0.008967f, 0.007592f, -0.005323f, 0.014312f, 0.010272f, -0.004809f, -0.009829f, 0.001019f, 0.003711f, 0.001891f, -0.024100f, 0.011505f, -0.002333f, 0.006217f, 0.007672f, 0.013077f, 0.002631f, -0.011213f, 0.015141f, -0.005623f, 0.006556f, -0.006801f, 0.005389f, -0.000968f, -0.028428f, -0.005757f, -0.005182f, -0.003269f, 0.001520f, -0.006732f, -0.005061f, 0.003738f, 0.005711f, 0.002085f, 0.014691f, 0.006930f, -0.015157f, -0.001174f, -0.000491f, -0.008376f, 0.016897f, -0.010583f, -0.010661f, 0.018188f, 0.018744f, -0.002617f, -0.000859f, -0.012287f, 0.003682f, 0.002340f, - -0.006975f, 0.002896f, 0.011257f, 0.007045f, 0.013650f, -0.003983f, -0.012112f, 0.006595f, 0.000847f, 0.002969f, -0.014363f, -0.007534f, -0.008845f, 0.002576f, 0.006752f, 0.002159f, 0.001047f, 0.013107f, 0.015519f, 0.001658f, -0.009026f, 0.008535f, 0.006529f, -0.012716f, 0.000345f, 0.000886f, -0.002719f, 0.000069f, -0.001758f, 0.008412f, -0.002712f, -0.009509f, 0.002135f, 0.010851f, 0.003704f, 0.004210f, 0.009509f, -0.020263f, -0.012863f, 0.008716f, -0.005304f, -0.018891f, 0.009404f, -0.009657f, -0.009288f, 0.012969f, -0.004225f, -0.003657f, -0.003528f, 0.003702f, 0.008830f, 0.005285f, 0.004562f, 0.005599f, -0.008113f, -0.004126f, -0.002006f, 0.011735f, 0.005406f, -0.019308f, 0.005919f, 0.006649f, -0.008671f, 0.019093f, 0.016719f, 0.009666f, 0.000312f, -0.006290f, -0.004719f, 0.001469f, -0.006131f, -0.006496f, -0.011776f, 0.002125f, -0.013386f, 0.009955f, 0.003372f, 0.000562f, 0.001809f, 0.005452f, 0.004094f, 0.010599f, 0.015649f, -0.005600f, -0.025347f, -0.003981f, -0.017301f, 0.006291f, 0.002224f, -0.022395f, 0.008143f, -0.009207f, 0.028506f, 0.009817f, -0.018055f, -0.000318f, - 0.018186f, 0.009751f, -0.014869f, -0.008652f, 0.019126f, 0.011110f, -0.013054f, 0.016379f, -0.013329f, -0.017833f, 0.003085f, -0.027121f, 0.016760f, 0.017417f, -0.003516f, -0.016658f, -0.002226f, -0.000392f, 0.005315f, 0.000086f, -0.016438f, -0.011870f, 0.000175f, -0.019393f, -0.000167f, -0.045766f, -0.014677f, -0.005192f, -0.025319f, -0.008713f, -0.005523f, -0.010941f, -0.008786f, 0.006013f, -0.012389f, -0.022921f, 0.005782f, 0.014392f, -0.023771f, -0.006496f, 0.006858f, 0.011723f, 0.019828f, 0.012847f, 0.011504f, 0.012986f, 0.004302f, 0.023053f, -0.014213f, -0.006006f, 0.004439f, -0.011585f, 0.003874f, 0.006408f, 0.011610f, 0.001420f, 0.019282f, 0.003968f, 0.004329f, 0.013463f, -0.006627f, -0.011971f, -0.000401f, -0.018249f, -0.012141f, -0.021048f, -0.001542f, -0.001273f, -0.027998f, 0.009495f, -0.013110f, 0.005211f, -0.026562f, 0.002681f, -0.020341f, 0.028670f, 0.000575f, -0.026411f, 0.030185f, 0.037634f, 0.009689f, -0.013316f, -0.010575f, 0.009331f, -0.004531f, -0.001851f, 0.009918f, -0.018818f, 0.010319f, -0.019404f, 0.008095f, -0.008015f, -0.013109f, 0.004237f, 0.012801f, 0.002682f, - 0.011772f, -0.006331f, 0.018792f, -0.014410f, -0.014744f, -0.036344f, -0.008884f, -0.018483f, -0.045866f, 0.012101f, -0.026708f, -0.015075f, -0.021647f, 0.006549f, -0.041354f, 0.011687f, 0.002714f, -0.007023f, -0.001513f, -0.010904f, -0.004738f, 0.010596f, -0.014474f, -0.009057f, -0.000050f, 0.008301f, -0.012721f, -0.000073f, 0.013358f, -0.021472f, -0.005740f, 0.013945f, -0.012971f, 0.000156f, -0.000439f, -0.002605f, 0.018347f, -0.015576f, 0.010680f, -0.006552f, 0.014833f, 0.017200f, -0.017033f, -0.021032f, 0.020092f, -0.001203f, 0.003968f, 0.006438f, 0.001333f, -0.003660f, 0.011093f, -0.005199f, -0.026005f, 0.007772f, 0.004672f, -0.020929f, -0.002990f, -0.006719f, 0.012743f, 0.017376f, 0.007465f, 0.003989f, -0.006898f, -0.014371f, 0.015502f, 0.011308f, 0.013800f, 0.000482f, -0.023168f, -0.003688f, -0.003934f, -0.008041f, -0.005946f, -0.000224f, -0.010374f, 0.054306f, 0.032586f, 0.001381f, -0.016671f, -0.042415f, -0.004257f, 0.018684f, -0.008287f, -0.017531f, -0.030399f, -0.002495f, -0.005867f, 0.000360f, -0.009826f, 0.009394f, 0.000742f, 0.026604f, 0.011728f, -0.012065f, 0.000148f, -0.005525f, - 0.003040f, -0.006263f, 0.006636f, 0.016307f, -0.018803f, 0.003247f, -0.010905f, 0.007311f, -0.007446f, -0.014994f, -0.027155f, -0.002801f, 0.017275f, 0.004924f, -0.002392f, 0.005496f, -0.000930f, 0.014979f, 0.025584f, -0.008920f, -0.004335f, -0.028632f, -0.029377f, 0.008130f, 0.005837f, -0.013256f, -0.009874f, -0.025701f, -0.016121f, 0.009872f, -0.001889f, -0.000105f, 0.002752f, -0.002058f, 0.013133f, 0.006640f, -0.019386f, 0.000957f, -0.017471f, -0.001470f, -0.008616f, -0.005599f, 0.022025f, 0.042304f, 0.070678f, 0.003348f, 0.024065f, -0.019672f, -0.024441f, -0.035536f, 0.000188f, 0.002476f, 0.009929f, 0.012645f, -0.001266f, 0.000722f, 0.019831f, 0.033865f, -0.016910f, 0.000356f, 0.006141f, -0.027089f, -0.000059f, -0.017393f, -0.017445f, 0.026067f, -0.007908f, -0.006204f, -0.014181f, 0.029882f, 0.025709f, 0.000249f, 0.042442f, 0.005059f, 0.013034f, 0.009651f, -0.012244f, -0.013737f, -0.022581f, -0.011504f, 0.004894f, 0.000416f, 0.018845f, 0.001689f, -0.002408f, -0.003307f, 0.013228f, -0.019403f, -0.048141f, -0.016614f, 0.013802f, 0.004563f, -0.004230f, -0.014128f, 0.000556f, -0.022909f, - -0.003744f, -0.020882f, -0.001726f, -0.002565f, -0.015040f, 0.014196f, 0.006780f, 0.026905f, -0.022456f, 0.041643f, 0.010966f, -0.008165f, -0.014945f, -0.007672f, 0.006392f, 0.023889f, -0.007538f, 0.013551f, -0.021340f, 0.016895f, -0.019339f, -0.022053f, 0.021416f, -0.031490f, 0.020445f, 0.016522f, 0.033242f, -0.034364f, 0.025950f, -0.004157f, 0.023468f, 0.007603f, -0.034106f, -0.007955f, -0.005683f, 0.007777f, 0.002638f, -0.023500f, -0.030956f, -0.064139f, -0.019378f, -0.037763f, 0.010698f, -0.001954f, -0.012540f, -0.018829f, -0.017444f, -0.016239f, -0.017077f, -0.017228f, 0.002033f, -0.014098f, -0.002234f, -0.030344f, -0.045887f, 0.056267f, -0.017348f, 0.030356f, -0.005577f, 0.007620f, 0.010053f, 0.016217f, 0.011196f, -0.003195f, -0.000613f, -0.024735f, -0.005192f, -0.006144f, -0.016072f, -0.025951f, 0.010365f, -0.003254f, 0.036577f, -0.025441f, 0.001075f, 0.049665f, -0.011630f, -0.042021f, -0.012952f, 0.001207f, -0.018353f, 0.028825f, 0.014006f, -0.016586f, 0.012473f, 0.015208f, -0.009061f, -0.000888f, 0.008611f, 0.018978f, 0.000038f, -0.019948f, -0.018141f, 0.022728f, 0.017704f, -0.013099f, - -0.025663f, 0.016188f, 0.020917f, -0.018574f, -0.022694f, 0.015756f, -0.028944f, 0.057077f, 0.014336f, -0.006272f, 0.004473f, 0.012400f, 0.005710f, -0.012778f, 0.003937f, 0.000235f, 0.024038f, 0.015288f, -0.023991f, -0.000099f, 0.008908f, 0.006644f, -0.015794f, 0.037738f, 0.026703f, 0.054382f, 0.030071f, 0.020023f, 0.007742f, -0.048198f, -0.004164f, 0.006090f, -0.028458f, -0.007980f, 0.053745f, 0.003629f, -0.031746f, -0.031499f, 0.027571f, -0.043239f, -0.011564f, 0.001194f, 0.010849f, 0.004163f, -0.008753f, 0.013046f, -0.019929f, -0.000884f, -0.004644f, -0.013037f, -0.003486f, -0.009418f, -0.028711f, 0.013616f, -0.025072f, 0.013025f, 0.011579f, 0.015270f, 0.001879f, 0.009637f, -0.011273f, 0.043628f, 0.004760f, -0.049233f, -0.043378f, 0.002304f, 0.017389f, 0.034912f, -0.013627f, -0.030474f, -0.014397f, -0.005701f, 0.002334f, 0.019436f, 0.002758f, -0.019138f, 0.047437f, -0.063036f, -0.012285f, 0.008911f, -0.044536f, -0.024669f, -0.013588f, 0.003151f, -0.071013f, -0.035806f, 0.046212f, -0.022403f, 0.011487f, -0.020291f, -0.057855f, -0.025966f, 0.024960f, -0.013378f, 0.006041f, 0.030796f, - -0.014947f, -0.085209f, -0.025909f, 0.007947f, 0.021514f, 0.027113f, 0.018725f, 0.025041f, 0.036535f, 0.074443f, -0.044091f, 0.032923f, -0.013545f, 0.001696f, -0.013706f, -0.055684f, -0.047057f, -0.005349f, -0.005863f, 0.015601f, 0.019784f, 0.033119f, -0.012707f, 0.002028f, -0.018753f, 0.003171f, -0.006046f, 0.002764f, 0.027761f, 0.019699f, 0.007049f, 0.026992f, 0.024937f, -0.046440f, 0.021222f, -0.025637f, -0.039964f, -0.007598f, 0.020188f, 0.010060f, -0.028162f, 0.011476f, -0.000504f, 0.021048f, -0.005228f, -0.044739f, -0.038113f, -0.036437f, -0.043421f, 0.008816f, 0.029238f, -0.002466f, 0.115586f, -0.074222f, -0.062666f, 0.039893f, -0.014441f, -0.019834f, -0.012087f, -0.002239f, -0.002823f, -0.068572f, 0.003451f, -0.000572f, 0.005626f, 0.061020f, -0.008526f, 0.025102f, 0.016716f, 0.032744f, 0.086571f, -0.027378f, 0.110169f, 0.039542f, -0.011608f, 0.018269f, -0.052259f, 0.018897f, 0.084019f, 0.002230f, 0.087669f, 0.046033f, -0.005238f, -0.034022f, 0.098852f, 0.014629f, -0.016596f, 0.012572f, -0.022481f, -0.006852f, -0.003373f, -0.006304f, 0.012474f, 0.027330f, 0.019201f, 0.003381f, - 0.012666f, -0.020112f, -0.019201f, 0.005704f, -0.005873f, 0.032175f, 0.035206f, 0.022097f, -0.009074f, 0.001879f, -0.042840f, -0.027242f, -0.007960f, -0.029782f, -0.046318f, -0.027997f, 0.022086f, -0.027343f, -0.081662f, -0.038246f, 0.025013f, -0.033503f, -0.023210f, 0.000647f, -0.005893f, 0.037883f, 0.056675f, 0.073681f, -0.039131f, 0.020488f, -0.000298f, 0.001769f, -0.015647f, -0.049842f, -0.097607f, -0.065315f, 0.034553f, -0.066232f, -0.033646f, 0.016952f, 0.034047f, -0.025191f, 0.038489f, 0.106448f, 0.023889f, 0.019698f, -0.079677f, -0.110179f, -0.021603f, -0.035232f, -0.055564f, -0.017973f, -0.045142f, 0.033340f, 0.024597f, 0.096446f, 0.048179f, -0.021835f, 0.045442f, 0.088623f, -0.046928f, 0.067052f, 0.054772f, -0.009419f, -0.013369f, -0.030948f, 0.009789f, 0.059892f, 0.045416f, 0.070394f, -0.030219f, -0.014477f, -0.013803f, -0.004818f, -0.018355f, 0.018183f, -0.022643f, 0.051747f, 0.022940f, -0.085809f, -0.036056f, 0.000524f, 0.013791f, 0.036794f, -0.016644f, -0.032421f, 0.010682f, 0.010110f, -0.012598f, -0.015876f, 0.010839f, -0.024122f, -0.035955f, -0.016618f, 0.082011f, 0.033780f, - 0.015147f, -0.040401f, -0.011632f, -0.034091f, 0.021988f, 0.039842f, 0.014975f, 0.003472f, 0.025038f, -0.012683f, 0.053517f, 0.030397f, 0.005276f, 0.018448f, 0.000491f, 0.103493f, 0.023612f, -0.041627f, 0.019329f, 0.019645f, 0.013105f, 0.025387f, 0.004528f, -0.038799f, 0.052568f, 0.013839f, 0.012163f, 0.022737f, 0.013016f, 0.003944f, -0.026008f, 0.039820f, 0.044890f, 0.026234f, 0.120180f, 0.088177f, -0.038589f, -0.081065f, -0.001742f, -0.019362f, -0.101471f, -0.016436f, 0.028344f, 0.026261f, -0.021503f, 0.033480f, 0.013491f, -0.018012f, -0.036857f, 0.005318f, -0.007546f, -0.061321f, -0.016664f, -0.024070f, 0.005948f, -0.083319f, -0.060791f, -0.014336f, 0.040685f, -0.009056f, -0.010678f, -0.052094f, 0.002280f, 0.037337f, 0.003204f, -0.032705f, -0.015357f, -0.010320f, -0.015104f, 0.006020f, 0.014755f, -0.045161f, -0.044551f, 0.002676f, -0.000647f, 0.005288f, 0.075986f, -0.050553f, -0.003942f, -0.007615f, -0.072427f, -0.026892f, -0.052825f, -0.013321f, -0.003794f, 0.046799f, 0.059079f, 0.066368f, 0.021151f, 0.006885f, -0.026493f, -0.067905f, 0.003171f, 0.020009f, -0.021068f, 0.082313f, - 0.205977f, 0.191625f, 0.029470f, -0.131848f, -0.115145f, -0.051130f, -0.072077f, 0.236221f, 0.150529f, 0.088348f, 0.123201f, -0.007526f, -0.063668f, -0.177749f, -0.109209f, -0.047976f, -0.008173f, 0.064023f, 0.136186f, 0.047837f, -0.046757f, 0.054615f, 0.018138f, -0.000005f, -0.090843f, -0.038312f, 0.091693f, -0.064129f, 0.029841f, -0.006968f, -0.013088f, 0.019181f, 0.015953f, 0.038289f, 0.078080f, -0.049585f, -0.050424f, 0.007312f, -0.028416f, 0.037515f, -0.053101f, -0.038747f, -0.031485f, -0.003496f, -0.004350f, -0.042212f, 0.021169f, 0.060464f, -0.048245f, -0.067896f, -0.038507f, -0.022299f, -0.007481f, 0.083445f, 0.010946f, -0.011566f, -0.085414f, -0.032393f, 0.013635f, 0.068101f, 0.038619f, -0.023183f, -0.125722f, -0.103214f, 0.093453f, 0.086717f, 0.098150f, -0.053042f, -0.213354f, -0.053380f, 0.102077f, 0.070844f, 0.016484f, -0.036320f, 0.017674f, -0.099472f, -0.048799f, 0.017763f, -0.022505f, 0.014391f, -0.012994f, -0.009493f, 0.095034f, -0.082388f, -0.033653f, 0.061783f, 0.062167f, 0.099637f, 0.050254f, -0.171113f, 0.048655f, 0.147629f, 0.034807f, 0.063298f, 0.017245f, -0.066656f, - -0.110330f, 0.014028f, 0.017631f, 0.012095f, 0.105239f, 0.019762f, -0.009833f, -0.066617f, -0.013488f, -0.005028f, -0.017820f, 0.000992f, -0.014745f, 0.029036f, 0.010968f, -0.018517f, -0.005263f, 0.044101f, -0.001675f, -0.000822f, 0.002713f, -0.009102f, -0.020038f, 0.025355f, 0.019302f, 0.017473f, -0.028349f, 0.015397f, 0.038003f, 0.016978f, -0.004027f, 0.026985f, -0.006391f, -0.029149f, 0.006351f, 0.008944f, -0.026184f, -0.025477f, 0.024907f, 0.026948f, -0.027114f, 0.017379f, 0.014236f, 0.000719f, -0.010797f, 0.001043f, 0.018739f, -0.000364f, -0.023912f, 0.012367f, 0.012460f, -0.041360f, 0.009514f, 0.031317f, 0.009049f, -0.027033f, 0.003299f, 0.019205f, -0.036042f, 0.009337f, 0.015956f, 0.006454f, -0.009488f, -0.034490f, 0.039593f, -0.044135f, -0.003340f, 0.039391f, 0.001709f, -0.009689f, 0.002814f, -0.042387f, 0.020437f, -0.005885f, 0.027986f, 0.032506f, 0.100005f, 0.009122f, -0.012523f, -0.033201f, -0.022555f, 0.012117f, -0.015188f, 0.013322f, -0.020170f, -0.001182f, 0.015699f, -0.008564f, 0.007299f, 0.007768f, -0.027960f, 0.008148f, -0.009238f, -0.005567f, -0.023026f, 0.006976f, - -0.006577f, -0.013924f, -0.006803f, 0.011626f, -0.010044f, -0.009334f, 0.014124f, -0.015115f, 0.007958f, 0.014062f, -0.027829f, 0.028101f, -0.006898f, -0.032116f, 0.017473f, 0.017982f, -0.015178f, 0.006018f, 0.010051f, -0.013118f, -0.012242f, 0.000835f, 0.002035f, 0.009704f, -0.004294f, -0.000887f, -0.013547f, 0.013474f, -0.010532f, -0.002642f, 0.016171f, -0.018295f, 0.005857f, -0.002575f, 0.000408f, -0.008094f, -0.011982f, -0.004075f, 0.021991f, -0.013756f, -0.005180f, 0.004525f, 0.005052f, 0.001702f, -0.012587f, 0.011090f, -0.005355f, -0.010090f, 0.000194f, -0.019407f, 0.030766f, -0.011942f, 0.006623f, 0.008358f, -0.005744f, 0.012889f, -0.048665f, -0.082582f, 0.038373f, 0.279689f, 0.044216f, 0.139109f, -0.031778f, -0.143994f, -0.050713f, -0.140372f, -0.090445f, -0.030352f, -0.014151f, 0.005333f, 0.083782f, 0.098044f, 0.139063f, 0.135666f, 0.044651f, -0.055469f, -0.086527f, -0.162135f, -0.122078f, -0.066142f, -0.024141f, -0.017792f, 0.050739f, 0.081972f, 0.065470f, 0.086429f, 0.086159f, 0.029979f, 0.028640f, 0.009013f, -0.061229f, -0.024544f, -0.052510f, -0.094104f, -0.055004f, -0.055584f, - -0.079333f, -0.018563f, 0.038546f, 0.027062f, 0.082943f, 0.105918f, 0.056886f, 0.070032f, 0.054799f, -0.009105f, -0.001407f, -0.006607f, -0.056857f, -0.072753f, -0.062561f, -0.097203f, -0.080545f, -0.030441f, -0.003934f, 0.009875f, 0.067141f, 0.059329f, 0.059629f, 0.072372f, 0.056107f, 0.017264f, 0.035718f, 0.017426f, -0.020830f, -0.011971f, -0.039085f, -0.085397f, -0.049463f, -0.048476f, -0.064310f, -0.030475f, -0.014830f, -0.016616f, 0.022768f, 0.001400f}, - {0.001115f, 0.000622f, 0.004827f, 0.003952f, -0.004374f, -0.003021f, -0.000939f, 0.005945f, -0.006081f, -0.000380f, -0.003280f, -0.007662f, 0.003876f, -0.001496f, -0.007322f, -0.003116f, 0.007149f, -0.010052f, -0.002979f, 0.009242f, -0.002812f, -0.011497f, 0.007898f, -0.001025f, -0.004083f, 0.002477f, -0.003222f, 0.005750f, -0.003379f, 0.002612f, -0.006697f, 0.005926f, -0.000859f, -0.006490f, -0.000673f, -0.003050f, 0.003597f, 0.002987f, -0.001465f, 0.000436f, 0.000909f, 0.012689f, 0.005857f, -0.001653f, 0.006430f, -0.003161f, 0.005187f, 0.000842f, -0.002223f, -0.001520f, -0.008103f, 0.002208f, -0.003095f, -0.006297f, 0.005703f, 0.000960f, 0.003172f, 0.001356f, 0.003935f, -0.002317f, -0.003552f, -0.000007f, 0.000729f, 0.002315f, -0.001962f, 0.004021f, 0.000390f, 0.000645f, -0.000373f, -0.004999f, -0.000519f, 0.001868f, 0.003626f, 0.000944f, 0.002000f, 0.006068f, -0.002091f, 0.011460f, -0.006422f, 0.001893f, -0.009562f, 0.002658f, 0.001121f, 0.014622f, -0.008731f, 0.000004f, -0.004572f, 0.007318f, 0.007542f, -0.004804f, -0.000863f, -0.004129f, -0.002309f, -0.004822f, -0.005931f, 0.004399f, - 0.001495f, -0.003925f, 0.008231f, 0.007436f, 0.012781f, -0.000384f, 0.004876f, 0.002526f, -0.000155f, -0.011500f, 0.003050f, 0.004790f, -0.004479f, 0.002881f, -0.003285f, -0.003890f, -0.006249f, 0.003289f, 0.008186f, 0.000857f, 0.009542f, -0.003846f, -0.000744f, 0.009586f, 0.005065f, 0.000806f, -0.000055f, 0.009117f, 0.013699f, -0.010095f, 0.002331f, -0.003449f, -0.001517f, -0.015725f, -0.005553f, 0.006451f, -0.004861f, 0.004502f, 0.002075f, -0.002228f, -0.003811f, 0.002339f, -0.001313f, 0.005044f, 0.002642f, 0.002433f, 0.002452f, -0.008032f, 0.000180f, -0.003744f, 0.004815f, 0.008605f, 0.005470f, -0.000874f, 0.008322f, 0.000506f, 0.002004f, 0.000350f, 0.001337f, -0.001776f, 0.006661f, -0.008201f, -0.008954f, 0.000519f, -0.011995f, 0.002358f, -0.003899f, 0.005933f, -0.003345f, -0.009179f, 0.000886f, 0.009383f, -0.001584f, 0.000514f, 0.012612f, 0.016279f, -0.007120f, -0.007176f, -0.002280f, -0.011748f, 0.004924f, 0.001300f, 0.002795f, -0.003992f, 0.006194f, -0.008114f, -0.001707f, 0.005922f, -0.004880f, -0.001487f, 0.000678f, 0.010587f, 0.000466f, 0.007728f, -0.010086f, 0.009943f, - -0.001269f, 0.001643f, 0.006067f, -0.005178f, 0.005019f, -0.002212f, -0.002742f, 0.004773f, 0.005717f, -0.000747f, 0.003155f, -0.012837f, 0.007658f, 0.007968f, -0.014175f, -0.011945f, -0.003755f, -0.009850f, -0.003165f, 0.004169f, 0.002175f, 0.004004f, -0.000167f, -0.003058f, 0.008130f, -0.002529f, -0.000154f, -0.003068f, 0.001484f, -0.004810f, 0.006661f, 0.002170f, -0.006325f, -0.002719f, -0.003116f, -0.002806f, -0.004065f, 0.007769f, 0.020882f, 0.003719f, -0.007440f, 0.009339f, 0.001409f, -0.006761f, 0.019053f, -0.012937f, -0.017982f, -0.010919f, -0.010852f, -0.004003f, 0.005506f, 0.006309f, -0.006147f, 0.009202f, -0.011845f, -0.006864f, -0.001348f, 0.003604f, 0.003069f, -0.004019f, -0.004626f, 0.010270f, 0.002113f, -0.001136f, -0.005930f, 0.007533f, -0.005787f, -0.001792f, 0.000009f, -0.001138f, -0.000828f, 0.002616f, 0.001651f, -0.002145f, 0.006627f, -0.003658f, 0.004020f, -0.000832f, -0.010887f, -0.004823f, -0.004390f, 0.010936f, -0.006465f, -0.008391f, -0.014167f, -0.017098f, -0.003109f, 0.000162f, -0.006686f, 0.011778f, 0.001554f, 0.005966f, -0.005189f, 0.010030f, 0.004448f, -0.007082f, - 0.017249f, -0.008755f, -0.008629f, 0.000441f, 0.010717f, 0.015048f, 0.011119f, 0.002727f, -0.005811f, -0.013705f, 0.004775f, -0.001350f, 0.012166f, 0.003678f, -0.003803f, -0.001918f, 0.006094f, 0.003262f, -0.002184f, -0.018822f, 0.002312f, -0.006385f, 0.003779f, 0.002020f, 0.013283f, -0.017389f, -0.011111f, -0.012586f, 0.006317f, 0.006595f, 0.007728f, -0.008801f, 0.002437f, -0.002148f, 0.000368f, -0.014109f, -0.013447f, -0.008597f, -0.010022f, 0.015547f, -0.006892f, -0.001170f, -0.001172f, 0.005693f, -0.003295f, -0.015095f, 0.005679f, -0.005658f, -0.003007f, 0.007834f, 0.004479f, 0.008893f, -0.000459f, 0.005001f, -0.012016f, -0.004019f, 0.008817f, 0.016890f, 0.008541f, -0.000217f, -0.013605f, 0.009395f, -0.005157f, -0.010348f, 0.013767f, 0.004868f, 0.003942f, -0.008771f, -0.006584f, 0.005510f, -0.004649f, -0.004755f, 0.006556f, -0.005879f, 0.001368f, 0.000686f, -0.011835f, -0.001954f, -0.008385f, 0.011135f, 0.003983f, -0.001366f, 0.000184f, -0.004940f, 0.004674f, 0.001089f, -0.002136f, 0.001826f, -0.014601f, -0.006714f, 0.004602f, 0.002991f, -0.004864f, -0.002213f, -0.011903f, -0.029543f, - 0.009892f, 0.001491f, 0.007404f, 0.007962f, -0.005683f, -0.020844f, 0.016186f, 0.006887f, 0.015944f, -0.002838f, 0.008524f, -0.000069f, -0.005549f, -0.000274f, -0.014591f, 0.018196f, 0.004304f, 0.001876f, -0.009096f, -0.005149f, -0.006081f, 0.005610f, -0.008058f, 0.014071f, 0.000853f, 0.005032f, 0.007965f, 0.004560f, -0.000611f, 0.004799f, 0.004559f, -0.002864f, 0.003899f, -0.014973f, 0.004323f, 0.007448f, 0.007514f, 0.014285f, 0.005152f, -0.008699f, 0.004996f, -0.004080f, 0.009781f, 0.002437f, 0.007240f, 0.011180f, 0.002147f, -0.001574f, 0.008680f, -0.004878f, -0.008492f, -0.002450f, 0.006224f, 0.015502f, -0.002958f, 0.001939f, 0.000774f, 0.002860f, 0.003393f, 0.007329f, 0.002623f, -0.002479f, -0.000120f, -0.003668f, 0.004333f, 0.002885f, -0.008641f, -0.006236f, 0.003833f, 0.007292f, 0.005705f, 0.011683f, -0.013619f, -0.004516f, -0.010094f, 0.015847f, 0.008122f, 0.029156f, 0.016762f, 0.013438f, 0.021641f, 0.004864f, 0.004686f, -0.013472f, 0.000495f, -0.024507f, -0.003349f, 0.008312f, 0.007518f, 0.003501f, 0.006465f, 0.005834f, -0.004138f, -0.004162f, 0.014629f, 0.011607f, - 0.011569f, -0.001454f, 0.002534f, -0.017605f, -0.013616f, -0.006188f, 0.011842f, 0.002868f, -0.001101f, 0.005241f, -0.008729f, 0.000359f, -0.003917f, 0.011254f, 0.010489f, 0.020204f, -0.000819f, 0.007300f, 0.007793f, -0.003850f, -0.009576f, 0.019025f, -0.010010f, -0.003054f, 0.010217f, -0.000037f, 0.006443f, 0.013629f, -0.003034f, 0.004823f, -0.012101f, -0.029497f, -0.014577f, -0.010041f, -0.002294f, 0.000980f, 0.000513f, -0.007847f, -0.013895f, -0.003582f, -0.009409f, 0.003150f, 0.001646f, 0.001117f, -0.015628f, -0.008264f, 0.013556f, 0.003752f, 0.001581f, -0.019693f, -0.015239f, 0.010456f, 0.004588f, 0.006450f, -0.009905f, -0.000451f, -0.002153f, -0.014663f, 0.010977f, -0.006241f, -0.001059f, -0.038970f, -0.009819f, -0.014087f, -0.010147f, 0.002111f, 0.012539f, -0.002089f, 0.016741f, 0.009634f, -0.001508f, -0.016471f, -0.007515f, 0.025769f, 0.003743f, -0.014619f, -0.011531f, -0.004491f, 0.011371f, -0.008734f, -0.000327f, 0.008645f, 0.012424f, 0.015037f, -0.016401f, 0.011221f, 0.001003f, 0.003524f, 0.004113f, 0.006376f, 0.004694f, 0.015058f, -0.000024f, 0.004898f, -0.013193f, 0.018335f, - -0.009383f, -0.003752f, 0.002611f, -0.014386f, 0.017972f, -0.002467f, -0.036234f, -0.011431f, -0.029148f, 0.002176f, -0.000750f, -0.008302f, 0.038747f, -0.006447f, -0.019625f, -0.006195f, -0.005016f, 0.018291f, -0.002690f, 0.008879f, 0.010328f, -0.007044f, 0.013248f, 0.018740f, -0.009509f, 0.007232f, -0.016496f, 0.008138f, -0.005882f, -0.004630f, 0.019096f, -0.007092f, -0.001586f, -0.008864f, 0.000976f, -0.000856f, 0.018118f, -0.025218f, 0.005191f, 0.004975f, -0.007736f, 0.003228f, 0.019096f, 0.020116f, 0.007733f, 0.007125f, 0.009893f, -0.015765f, -0.002472f, -0.016816f, -0.000084f, 0.010599f, 0.007046f, -0.003595f, -0.012931f, -0.004351f, 0.009254f, -0.017392f, 0.000921f, -0.001286f, 0.008349f, 0.016469f, 0.001930f, -0.008933f, -0.006394f, 0.017639f, -0.010947f, -0.005504f, 0.010596f, -0.006344f, -0.020434f, -0.007580f, 0.005227f, 0.003522f, -0.007852f, 0.001945f, 0.011404f, 0.007497f, 0.011045f, -0.001247f, 0.008494f, 0.014995f, -0.006005f, 0.007453f, 0.007106f, -0.010308f, 0.022963f, -0.021469f, 0.013494f, 0.005541f, -0.028990f, 0.028375f, -0.017610f, 0.003898f, -0.002416f, 0.022529f, - -0.008713f, -0.016388f, -0.002424f, -0.000225f, 0.005209f, 0.016969f, -0.013661f, -0.001400f, 0.002363f, 0.000098f, -0.001211f, 0.003866f, -0.010379f, -0.003689f, -0.006469f, -0.019082f, -0.013662f, -0.019465f, 0.015359f, -0.045219f, 0.024609f, -0.017651f, -0.012921f, -0.021778f, 0.002081f, -0.002069f, 0.003528f, 0.016615f, -0.013795f, -0.004485f, 0.012379f, 0.012333f, -0.004151f, 0.005262f, -0.006465f, -0.020188f, -0.002288f, 0.006081f, -0.011005f, 0.017746f, 0.002614f, -0.001102f, -0.010253f, -0.008980f, 0.002124f, 0.026997f, 0.000943f, -0.002680f, 0.007020f, -0.021502f, -0.003969f, 0.009290f, -0.015297f, 0.022994f, 0.013919f, 0.000361f, -0.006640f, -0.006143f, -0.008319f, -0.013733f, -0.018324f, 0.016850f, 0.001401f, 0.028984f, 0.002831f, -0.000027f, -0.012021f, 0.003768f, -0.004379f, 0.007745f, 0.000201f, -0.015803f, -0.012924f, -0.016053f, -0.029078f, -0.002377f, 0.027322f, -0.023315f, -0.000424f, -0.024384f, 0.005534f, 0.009585f, 0.007688f, 0.021154f, -0.000235f, -0.024611f, 0.021676f, 0.000908f, -0.010441f, -0.007780f, -0.020030f, -0.004271f, -0.013129f, 0.014373f, 0.020228f, -0.007767f, - 0.018049f, -0.017629f, -0.008472f, 0.011377f, 0.004402f, -0.023592f, 0.002062f, 0.029373f, -0.033924f, 0.001466f, 0.016681f, 0.038200f, -0.016011f, -0.010428f, -0.003686f, 0.029455f, 0.030032f, -0.031719f, -0.000911f, -0.024495f, -0.010912f, 0.015034f, 0.016223f, 0.019979f, 0.012196f, -0.004626f, 0.014966f, -0.018401f, -0.009105f, -0.002336f, -0.002231f, -0.026382f, 0.002794f, -0.001128f, 0.034683f, -0.005820f, 0.017337f, 0.003539f, 0.010466f, 0.022365f, -0.013390f, -0.006701f, -0.033312f, 0.022742f, -0.029319f, -0.005806f, 0.007261f, -0.004538f, -0.016778f, -0.004829f, 0.005276f, -0.012738f, 0.003727f, -0.002508f, -0.002246f, -0.038460f, -0.026541f, 0.001364f, -0.019167f, -0.027169f, 0.005221f, -0.025171f, 0.008140f, 0.015472f, -0.014178f, 0.026937f, 0.006082f, 0.017013f, 0.019304f, 0.004105f, -0.013608f, -0.017607f, -0.019998f, 0.009466f, -0.019091f, 0.048124f, 0.019029f, 0.008989f, 0.023649f, -0.008522f, 0.004421f, -0.024346f, -0.033095f, 0.021249f, 0.040961f, 0.013250f, -0.000880f, -0.040290f, 0.048996f, 0.008073f, 0.005442f, 0.008040f, 0.001171f, 0.009917f, 0.002167f, -0.006158f, - -0.000973f, 0.013528f, -0.008367f, 0.016774f, 0.002362f, -0.011373f, -0.017888f, -0.003632f, 0.015063f, -0.003208f, 0.004462f, -0.005978f, -0.006992f, 0.001441f, 0.043887f, 0.008427f, 0.005757f, 0.007282f, 0.003063f, 0.028022f, -0.010663f, 0.009046f, -0.017983f, 0.033242f, 0.043602f, 0.013033f, -0.003304f, -0.014239f, 0.045562f, 0.023390f, -0.000104f, -0.016231f, 0.005968f, -0.008969f, -0.002494f, -0.018684f, -0.008586f, -0.011731f, -0.019748f, 0.032611f, -0.010064f, 0.024730f, 0.003770f, -0.015106f, -0.001228f, -0.034902f, 0.034671f, 0.000220f, -0.018001f, -0.010288f, -0.022544f, -0.023530f, -0.014963f, 0.044821f, -0.010687f, -0.004507f, 0.011201f, 0.014430f, -0.010954f, -0.010727f, 0.043551f, 0.043569f, 0.052823f, 0.032439f, 0.009987f, -0.013318f, -0.014755f, 0.008218f, 0.014823f, 0.019173f, -0.029108f, -0.000686f, -0.004147f, 0.014354f, 0.010438f, -0.019616f, -0.025132f, -0.000054f, -0.010089f, 0.023153f, 0.026316f, -0.000050f, 0.013469f, 0.004674f, 0.004754f, 0.031340f, -0.020282f, -0.025639f, 0.018971f, -0.033571f, 0.001715f, -0.010545f, 0.017189f, 0.009079f, -0.000939f, 0.021163f, - 0.018427f, -0.018398f, 0.020993f, -0.000537f, -0.011055f, 0.004746f, 0.022786f, -0.010030f, 0.008784f, 0.017340f, 0.006455f, -0.039663f, -0.024283f, 0.002954f, 0.000150f, -0.027413f, -0.020079f, 0.007685f, 0.010434f, 0.009463f, -0.038305f, -0.026540f, -0.027520f, -0.003556f, 0.012959f, 0.020976f, -0.060105f, -0.044122f, 0.003805f, 0.006348f, 0.029451f, 0.008687f, 0.007913f, 0.020293f, -0.008005f, -0.010751f, -0.014434f, -0.017783f, -0.037280f, -0.034360f, -0.030009f, 0.012208f, -0.004687f, 0.017402f, -0.032970f, -0.004271f, 0.000571f, -0.011343f, -0.015907f, 0.027068f, -0.010882f, 0.006307f, -0.001289f, 0.002853f, -0.027000f, -0.008562f, -0.023203f, 0.004029f, 0.002095f, 0.006871f, 0.060910f, -0.022979f, 0.016231f, 0.027081f, -0.014000f, -0.011353f, -0.019471f, -0.002669f, 0.028077f, -0.028313f, 0.019406f, -0.000799f, -0.005626f, 0.003849f, 0.002262f, 0.016972f, 0.001113f, -0.030050f, 0.023252f, -0.018260f, -0.045405f, -0.035065f, -0.018724f, 0.061887f, 0.050965f, -0.026727f, -0.008502f, -0.037133f, -0.032440f, -0.011354f, 0.037163f, 0.002311f, 0.025624f, 0.014884f, -0.017745f, 0.021119f, - -0.013408f, -0.038511f, -0.003211f, -0.022714f, -0.004554f, -0.011391f, 0.079584f, 0.002413f, -0.064250f, 0.053098f, -0.019020f, -0.012576f, 0.054500f, 0.054942f, 0.004847f, -0.020050f, 0.020340f, 0.009209f, -0.030906f, -0.020067f, 0.010034f, 0.006898f, 0.017557f, 0.053195f, 0.009733f, -0.001959f, 0.013029f, 0.002207f, -0.021923f, -0.014357f, 0.012466f, 0.002123f, 0.044305f, 0.009701f, -0.002340f, 0.015192f, 0.023950f, 0.023175f, 0.026083f, 0.000650f, -0.017680f, -0.005773f, -0.040858f, -0.006397f, -0.046190f, 0.025122f, -0.027992f, -0.011822f, 0.000447f, 0.036774f, -0.021540f, 0.020027f, -0.015051f, 0.011727f, -0.018959f, 0.023024f, 0.036600f, 0.001409f, -0.007430f, -0.020673f, -0.027950f, 0.014599f, 0.018302f, 0.044838f, -0.006024f, 0.001000f, 0.020515f, 0.072413f, -0.017024f, 0.009582f, -0.011756f, -0.042691f, 0.029044f, -0.007593f, 0.020700f, -0.004401f, 0.005262f, -0.026792f, 0.068507f, -0.104725f, 0.075631f, -0.120110f, 0.050917f, -0.063556f, 0.019139f, -0.050986f, 0.017548f, 0.027322f, -0.006850f, 0.017918f, -0.010770f, 0.077755f, -0.049111f, 0.042392f, 0.025429f, 0.021640f, - 0.082119f, -0.056804f, 0.023503f, 0.015939f, -0.050201f, -0.000547f, -0.010268f, -0.013251f, -0.025995f, -0.000471f, 0.002488f, 0.033860f, 0.011866f, 0.018199f, 0.024364f, 0.021037f, 0.000398f, 0.028494f, -0.031981f, -0.003486f, 0.037861f, 0.005364f, -0.052615f, -0.010884f, -0.068742f, -0.011616f, 0.011750f, -0.011463f, -0.016142f, -0.001705f, 0.061102f, 0.016803f, 0.004580f, 0.008849f, 0.015249f, -0.003202f, -0.035184f, -0.009287f, -0.003924f, 0.008051f, -0.008098f, -0.014828f, 0.044377f, 0.025521f, -0.009113f, -0.000396f, -0.009450f, -0.038316f, -0.032815f, -0.022186f, -0.019866f, 0.046708f, 0.010924f, 0.018565f, -0.026819f, -0.024044f, 0.008589f, 0.020492f, 0.016966f, -0.005166f, -0.005154f, -0.027836f, -0.019979f, 0.029347f, 0.001264f, -0.070578f, 0.025866f, 0.043576f, 0.012656f, -0.028146f, -0.020231f, -0.011095f, 0.004197f, -0.015803f, 0.008349f, -0.025236f, -0.067620f, 0.059146f, 0.073443f, -0.007429f, 0.053626f, 0.001577f, 0.008856f, 0.022507f, -0.045912f, 0.016503f, 0.035423f, 0.033677f, 0.015195f, 0.010175f, -0.032868f, 0.024371f, 0.015487f, -0.020786f, 0.011894f, -0.004311f, - 0.041310f, 0.010931f, 0.011356f, 0.023696f, -0.008472f, -0.027497f, 0.009047f, 0.051343f, -0.017241f, -0.009907f, 0.047546f, -0.016877f, -0.019527f, -0.016653f, 0.017218f, 0.059957f, 0.084221f, -0.004743f, -0.052476f, 0.081868f, 0.029377f, -0.052954f, 0.062071f, 0.023978f, -0.013611f, -0.014688f, -0.021278f, -0.036740f, -0.000629f, 0.021004f, -0.030832f, -0.019856f, -0.066820f, -0.007743f, 0.041471f, -0.081109f, -0.043213f, 0.015127f, 0.015087f, 0.018692f, 0.052044f, 0.047196f, -0.071877f, 0.003736f, 0.004627f, -0.048472f, 0.016351f, 0.029155f, -0.025021f, -0.013831f, -0.021037f, 0.021680f, 0.058980f, 0.026770f, 0.029848f, -0.026885f, 0.013081f, -0.037840f, 0.043793f, 0.149514f, -0.048348f, 0.002397f, 0.010493f, 0.068155f, 0.058548f, -0.018293f, -0.026648f, -0.036245f, 0.000785f, 0.029623f, -0.001720f, -0.017874f, -0.020425f, 0.028098f, -0.015322f, -0.034674f, -0.032862f, -0.005125f, 0.053926f, 0.039682f, -0.043974f, 0.004373f, 0.000238f, -0.017417f, 0.020993f, 0.009498f, -0.015955f, -0.003527f, -0.012610f, -0.004189f, 0.069249f, -0.024259f, -0.046599f, -0.030652f, -0.026593f, 0.063359f, - 0.001443f, -0.012458f, 0.056496f, 0.040862f, 0.015327f, 0.030795f, 0.055644f, -0.031923f, 0.008524f, 0.056316f, 0.031698f, 0.043575f, -0.047064f, -0.011079f, -0.001687f, 0.022127f, 0.018829f, -0.042217f, 0.004425f, -0.056116f, -0.087855f, -0.002106f, -0.023039f, 0.043539f, 0.045782f, -0.009179f, -0.003286f, 0.012103f, -0.031689f, -0.082319f, 0.057733f, -0.038228f, 0.009137f, -0.012693f, -0.028694f, -0.013385f, -0.033301f, -0.062476f, 0.006966f, 0.003994f, -0.023237f, -0.006863f, -0.072889f, -0.041571f, -0.033934f, -0.085556f, 0.099197f, -0.001944f, 0.052330f, -0.011527f, 0.002766f, -0.059378f, -0.032512f, -0.030363f, 0.007146f, 0.047440f, -0.001886f, -0.048173f, -0.036208f, -0.069067f, -0.077348f, 0.067386f, 0.024921f, -0.059611f, -0.018398f, 0.030753f, 0.055862f, 0.008777f, -0.068439f, -0.040769f, 0.013992f, 0.020440f, 0.017526f, 0.041465f, -0.042361f, -0.039247f, -0.005790f, -0.012937f, 0.006121f, 0.013561f, -0.082281f, -0.013538f, -0.057262f, -0.035118f, -0.076532f, -0.027200f, 0.105822f, 0.020299f, 0.003705f, 0.028137f, 0.026474f, 0.010709f, 0.078625f, 0.064660f, -0.020282f, 0.023918f, - 0.105997f, -0.024652f, -0.024675f, -0.021943f, -0.078919f, 0.000595f, -0.043375f, -0.093971f, -0.103086f, -0.049466f, -0.053556f, 0.028900f, -0.040386f, 0.009039f, 0.020168f, -0.063285f, -0.025593f, 0.008622f, 0.004133f, 0.068056f, -0.045269f, 0.015480f, -0.051985f, -0.014251f, -0.056414f, 0.009622f, 0.063541f, 0.001226f, 0.038511f, -0.078431f, 0.069384f, 0.026822f, -0.016603f, 0.059575f, 0.006039f, 0.028798f, -0.024471f, -0.023600f, -0.002270f, 0.020552f, 0.011601f, -0.053435f, 0.050457f, -0.059484f, 0.006149f, 0.021066f, -0.022825f, 0.040622f, -0.040487f, -0.018533f, -0.005655f, -0.010176f, -0.021049f, -0.000492f, 0.007189f, -0.025044f, -0.035340f, -0.006983f, -0.007037f, -0.004172f, 0.019816f, 0.015661f, 0.007571f, -0.037003f, 0.010221f, 0.055159f, 0.066195f, -0.044561f, -0.025558f, 0.061929f, 0.077245f, -0.041993f, -0.029724f, 0.038258f, 0.013314f, -0.031807f, 0.030718f, -0.082088f, -0.017696f, 0.042180f, 0.070070f, 0.015850f, -0.043976f, -0.032319f, 0.010343f, 0.092127f, 0.006912f, 0.021190f, 0.001862f, 0.037617f, -0.006551f, 0.073944f, -0.002880f, -0.055283f, 0.038731f, -0.024243f, - -0.102741f, -0.032749f, 0.021201f, -0.039139f, 0.108006f, 0.073275f, 0.053559f, 0.023297f, 0.073921f, 0.046476f, 0.019875f, 0.030545f, -0.079866f, -0.115148f, -0.012279f, -0.002425f, -0.025495f, 0.011433f, -0.002091f, -0.032690f, -0.033382f, -0.033405f, 0.061115f, 0.046816f, -0.037079f, -0.008747f, -0.002377f, -0.013711f, -0.011091f, -0.024616f, -0.027276f, -0.046360f, -0.004914f, 0.071848f, -0.020884f, -0.045586f, -0.016767f, 0.067169f, -0.029827f, -0.036263f, 0.112914f, 0.035285f, 0.021737f, -0.030424f, -0.056946f, -0.045847f, -0.058837f, 0.012979f, 0.054576f, 0.134603f, -0.118356f, -0.055515f, 0.074703f, 0.094882f, 0.020570f, -0.009846f, 0.130226f, 0.056742f, -0.036729f, 0.036285f, -0.011308f, -0.003772f, -0.084599f, -0.048721f, -0.027451f, -0.148653f, -0.057887f, -0.028038f, 0.080739f, -0.047098f, -0.021216f, 0.052204f, -0.000925f, -0.014230f, 0.016637f, 0.032253f, 0.091246f, 0.034280f, -0.008237f, 0.024399f, -0.005231f, -0.007912f, -0.034415f, 0.016825f, 0.013440f, -0.026106f, -0.013583f, -0.096548f, -0.004534f, 0.040593f, -0.009968f, -0.039912f, 0.017143f, -0.008501f, 0.043111f, 0.009338f, - -0.021768f, 0.000272f, 0.046185f, -0.026017f, 0.006921f, 0.017525f, -0.014849f, 0.000221f, -0.025931f, 0.052307f, -0.003730f, 0.008347f, 0.000194f, 0.025640f, -0.011947f, -0.009035f, -0.016797f, 0.011036f, 0.018762f, -0.007779f, 0.022405f, -0.009232f, 0.013544f, -0.023451f, -0.019769f, 0.030240f, 0.037051f, -0.047896f, 0.001589f, 0.000966f, 0.003875f, 0.016319f, -0.031372f, 0.048068f, -0.042848f, 0.038958f, 0.004604f, -0.064629f, -0.004280f, 0.052630f, -0.067653f, 0.033358f, -0.000360f, 0.010213f, -0.016688f, -0.008277f, 0.013001f, -0.017418f, 0.068181f, -0.048391f, 0.007390f, -0.010800f, -0.005955f, 0.020355f, 0.001927f, -0.004477f, -0.049474f, -0.138682f, -0.198935f, 0.064844f, 0.172934f, 0.036192f, 0.482878f, 0.397085f, 0.266045f, 0.453505f, 0.232913f, -0.022017f, -0.063996f, -0.187727f, -0.425646f, -0.352885f, -0.344540f, -0.475602f, -0.355116f, -0.111527f, -0.086083f, -0.023649f, 0.149743f, 0.062910f, -0.034029f, 0.089022f, 0.155159f, 0.068118f, 0.063281f, 0.138331f, 0.074402f, 0.053085f, 0.121009f, 0.200872f, 0.070809f, 0.108175f, 0.184337f, 0.012519f, -0.010400f, 0.158082f, - 0.081827f, -0.096937f, 0.059835f, 0.084754f, -0.149181f, -0.066593f, 0.098146f, -0.060105f, -0.114022f, 0.132908f, 0.051352f, -0.144504f, 0.049301f, 0.077741f, -0.205916f, -0.197101f, -0.113441f, -0.439168f, -0.568954f, -0.378980f, -0.514518f, -0.668743f, -0.488333f, -0.501384f, -0.632477f, -0.519351f, -0.388719f, -0.419723f, -0.292059f, -0.080991f, 0.016320f, 0.152575f, 0.313738f, 0.408106f, 0.519923f, 0.569393f, 0.605801f, 0.477355f, 0.132426f, 0.006435f} - }, - { - {-0.013812f, -0.004739f, 0.001066f, -0.002851f, 0.000736f, 0.000244f, 0.007534f, -0.009808f, -0.005056f, -0.000901f, -0.004243f, -0.002640f, -0.007437f, 0.003630f, -0.007415f, -0.004358f, 0.001129f, 0.006013f, -0.007526f, 0.000036f, 0.000556f, -0.006042f, 0.002394f, 0.001135f, -0.002858f, 0.000562f, 0.003302f, 0.010859f, 0.002104f, 0.001420f, 0.004345f, 0.001814f, -0.000538f, 0.002236f, -0.002530f, 0.002325f, -0.009430f, -0.003408f, 0.002657f, -0.002102f, 0.010008f, -0.005262f, -0.003015f, -0.006340f, 0.002086f, 0.001896f, -0.001167f, 0.001637f, -0.001755f, -0.003058f, -0.005411f, -0.000612f, -0.000781f, 0.004443f, 0.006173f, 0.001689f, 0.004392f, 0.003213f, 0.000223f, 0.000781f, 0.000023f, -0.009515f, 0.001992f, -0.000093f, -0.005615f, 0.000400f, -0.005086f, 0.004639f, 0.004961f, -0.002676f, -0.004876f, -0.011462f, 0.003131f, 0.006387f, 0.005926f, -0.005542f, -0.000534f, 0.007509f, 0.018123f, 0.000265f, 0.000789f, -0.008678f, -0.006865f, 0.005175f, 0.003239f, 0.000433f, 0.007431f, -0.011177f, -0.003731f, 0.018013f, 0.001284f, 0.003478f, -0.004691f, -0.006134f, 0.008549f, 0.007061f, - -0.002912f, 0.006950f, 0.000366f, 0.001102f, -0.006812f, 0.002441f, -0.006191f, -0.004930f, -0.006073f, 0.002058f, 0.000339f, -0.002043f, -0.000596f, 0.002072f, 0.005474f, -0.002604f, -0.009701f, 0.000132f, -0.006874f, -0.008981f, -0.002215f, 0.003995f, -0.001234f, 0.003561f, 0.002439f, 0.003261f, -0.001245f, -0.001298f, -0.001503f, -0.001487f, 0.003216f, -0.000144f, 0.006423f, -0.000875f, 0.007922f, 0.001239f, 0.001992f, 0.007278f, 0.002884f, 0.001833f, 0.009770f, -0.003891f, 0.003465f, -0.003332f, -0.006324f, 0.006104f, -0.001807f, -0.000023f, 0.002733f, -0.001163f, -0.005033f, -0.001751f, 0.004606f, -0.002625f, 0.000560f, -0.005420f, 0.003418f, -0.023674f, -0.012373f, -0.005495f, -0.005206f, 0.000021f, 0.000001f, 0.001804f, 0.000273f, -0.001293f, -0.009785f, -0.004374f, -0.010029f, -0.015568f, -0.013104f, 0.007385f, 0.008999f, 0.009204f, -0.003693f, -0.001064f, -0.001114f, -0.002029f, 0.003297f, 0.001430f, -0.003403f, -0.007055f, 0.005006f, 0.004359f, 0.006273f, 0.001674f, -0.002233f, -0.003865f, 0.001712f, 0.003042f, -0.000820f, 0.006464f, -0.003242f, -0.000184f, 0.006182f, -0.004813f, - -0.007731f, 0.000599f, 0.010451f, 0.002413f, 0.002231f, 0.001462f, -0.000014f, 0.001333f, -0.001739f, 0.001856f, -0.008445f, 0.001335f, 0.008545f, -0.002011f, 0.000020f, 0.000826f, -0.003060f, -0.001689f, -0.001305f, -0.001449f, -0.002418f, 0.005249f, -0.005068f, 0.005145f, 0.004331f, 0.009660f, -0.000760f, 0.005397f, 0.012333f, -0.002366f, -0.010055f, -0.011303f, -0.000564f, -0.001587f, 0.000640f, -0.009682f, 0.002949f, -0.006754f, 0.016212f, 0.013278f, 0.005257f, 0.006942f, -0.004576f, 0.003293f, 0.011126f, 0.005877f, 0.012003f, -0.004490f, 0.004675f, 0.007332f, -0.000630f, 0.009319f, -0.004945f, 0.005940f, 0.000751f, -0.005466f, -0.001745f, -0.000783f, -0.000641f, -0.001328f, 0.000393f, -0.002585f, 0.000624f, -0.001805f, 0.010945f, -0.002267f, -0.000906f, 0.000291f, -0.005355f, -0.013954f, 0.007834f, -0.003059f, 0.002844f, -0.005338f, -0.005660f, -0.005728f, -0.004319f, 0.004055f, 0.010472f, 0.008849f, 0.003274f, -0.000254f, -0.002622f, 0.003786f, 0.007431f, -0.001342f, -0.002858f, 0.009979f, -0.004569f, 0.004994f, -0.005105f, -0.003331f, -0.002622f, 0.004005f, 0.003462f, -0.006282f, - -0.004982f, 0.000667f, 0.006854f, 0.009849f, 0.004703f, 0.007827f, -0.001379f, 0.007414f, 0.002285f, 0.007816f, -0.004450f, 0.003605f, 0.015921f, 0.008468f, 0.006428f, -0.000709f, -0.005279f, -0.010012f, 0.005028f, 0.019132f, 0.002534f, 0.007098f, 0.013583f, 0.000518f, -0.007944f, -0.003074f, -0.002427f, 0.000862f, -0.004983f, -0.013108f, 0.005391f, 0.000840f, 0.000309f, 0.006048f, -0.008882f, -0.003670f, 0.014140f, -0.002955f, -0.005201f, -0.007803f, 0.000426f, -0.007307f, -0.001143f, -0.002023f, -0.002165f, 0.001654f, 0.011597f, 0.000320f, -0.003296f, 0.004063f, -0.008729f, 0.012893f, -0.001207f, -0.001902f, 0.015524f, -0.007855f, 0.001132f, -0.009388f, -0.004266f, 0.001860f, 0.000972f, 0.005005f, 0.005315f, -0.008100f, 0.003319f, 0.005028f, 0.003764f, 0.002127f, 0.005021f, 0.004476f, 0.007076f, -0.004419f, -0.002323f, 0.013456f, -0.004119f, 0.006174f, 0.002066f, 0.005155f, 0.004094f, 0.000834f, -0.002954f, 0.001373f, 0.009648f, -0.002854f, 0.000770f, -0.000293f, 0.003439f, 0.010169f, -0.002557f, -0.006455f, -0.016219f, 0.004517f, 0.001595f, 0.002474f, 0.003120f, -0.001605f, - -0.006743f, -0.021743f, 0.011716f, -0.008122f, -0.010102f, -0.000923f, -0.020249f, 0.003240f, 0.008111f, -0.003840f, 0.017338f, -0.007518f, -0.017621f, 0.003137f, 0.008736f, -0.008095f, -0.012021f, 0.021647f, 0.000048f, -0.002828f, 0.007375f, -0.006556f, -0.001444f, 0.000909f, -0.009783f, 0.005176f, 0.000330f, 0.001811f, -0.000828f, 0.009345f, -0.001182f, 0.004597f, 0.006883f, -0.012130f, -0.003660f, -0.007479f, 0.012678f, -0.006992f, -0.001715f, 0.006953f, -0.001326f, -0.007752f, 0.006519f, 0.013970f, -0.006204f, 0.006037f, -0.006443f, 0.008657f, -0.003916f, 0.003839f, 0.002743f, -0.006997f, -0.014081f, 0.007305f, 0.013171f, -0.002629f, -0.001828f, 0.004969f, 0.009838f, 0.006148f, -0.008995f, -0.002882f, -0.007657f, -0.002562f, 0.005394f, -0.008433f, 0.004672f, 0.005749f, -0.005837f, -0.002046f, 0.003848f, -0.009671f, -0.003139f, 0.005003f, -0.002477f, 0.003110f, -0.000425f, -0.008213f, 0.010388f, -0.011407f, -0.011297f, -0.019399f, 0.008231f, 0.020572f, 0.003191f, -0.003627f, -0.001691f, -0.003385f, 0.017981f, -0.010637f, -0.009651f, -0.002207f, -0.010632f, -0.003193f, -0.011544f, -0.004922f, - -0.008035f, -0.016111f, -0.004362f, -0.003422f, -0.000347f, -0.001608f, 0.004467f, 0.009894f, 0.003735f, 0.005012f, -0.014642f, 0.002076f, 0.000079f, -0.004438f, 0.005532f, 0.003020f, -0.003979f, -0.001654f, -0.010228f, -0.011506f, -0.001284f, 0.013378f, -0.003360f, -0.006406f, -0.000932f, -0.004027f, -0.008638f, 0.000505f, -0.009003f, 0.019985f, 0.017181f, 0.004663f, -0.004373f, -0.004197f, 0.002468f, 0.003365f, 0.004184f, 0.003660f, -0.000333f, 0.007745f, -0.005991f, 0.003688f, -0.005071f, 0.000661f, 0.001053f, 0.004587f, 0.004113f, 0.009710f, -0.002595f, -0.005137f, -0.003573f, -0.020770f, 0.002511f, 0.005006f, 0.000083f, 0.008336f, 0.006281f, -0.005743f, -0.019247f, 0.002438f, 0.021262f, 0.018464f, -0.019902f, -0.019716f, 0.005700f, -0.015856f, -0.007175f, 0.001343f, -0.000239f, -0.006968f, 0.016338f, 0.006047f, -0.021060f, -0.002611f, 0.002122f, -0.001044f, 0.014801f, 0.004353f, -0.009340f, 0.013871f, 0.006315f, 0.001082f, -0.007058f, -0.009261f, 0.007134f, -0.006255f, -0.013979f, -0.003573f, -0.001087f, -0.007500f, -0.007994f, -0.012839f, 0.013583f, 0.000005f, 0.002746f, -0.009178f, - 0.001077f, 0.008122f, -0.006238f, -0.015953f, -0.014358f, 0.015078f, 0.004490f, 0.014172f, -0.001502f, 0.003383f, 0.012039f, 0.021683f, 0.008234f, -0.003818f, -0.010621f, -0.005958f, -0.004811f, 0.002425f, 0.002189f, -0.010054f, -0.002682f, 0.012099f, 0.010297f, 0.016787f, 0.009393f, -0.013515f, -0.010797f, 0.013607f, 0.008935f, -0.009041f, 0.001178f, 0.013898f, 0.002299f, -0.002330f, -0.010738f, 0.011414f, 0.010811f, -0.004408f, 0.018230f, 0.003433f, -0.008294f, 0.003354f, -0.003143f, -0.001541f, 0.009988f, -0.016615f, 0.010018f, -0.010840f, 0.001944f, 0.008924f, -0.000139f, -0.004304f, 0.003270f, -0.011325f, 0.000458f, -0.008773f, -0.025970f, -0.007761f, 0.011016f, 0.007309f, 0.004040f, -0.006113f, 0.005350f, 0.002593f, 0.027800f, 0.004993f, -0.009322f, 0.010559f, 0.002117f, 0.002448f, 0.018547f, -0.005057f, -0.005078f, 0.006687f, -0.012876f, 0.015927f, 0.014595f, -0.000049f, 0.008343f, -0.002736f, -0.007769f, -0.000721f, -0.009788f, 0.001173f, -0.009553f, 0.004178f, 0.000136f, 0.003200f, 0.001438f, -0.016419f, -0.003117f, -0.001756f, 0.001319f, -0.008036f, 0.004098f, 0.004191f, - -0.002747f, 0.022659f, -0.009143f, -0.019197f, 0.012375f, 0.019931f, 0.005091f, 0.005581f, -0.007778f, 0.017230f, -0.004779f, 0.003408f, 0.008513f, 0.002787f, -0.006324f, 0.008479f, 0.004888f, 0.001262f, 0.001691f, 0.056988f, -0.015868f, 0.000752f, -0.006043f, -0.003183f, -0.012918f, 0.000179f, -0.033448f, 0.017717f, -0.012178f, -0.000322f, 0.018961f, 0.010025f, -0.012945f, -0.013097f, -0.005300f, -0.011087f, 0.010397f, -0.026802f, 0.004934f, 0.012025f, 0.015592f, 0.003779f, 0.004600f, 0.001358f, 0.002505f, -0.002869f, -0.008650f, -0.024280f, -0.003703f, 0.004006f, 0.011563f, -0.008169f, 0.011181f, 0.005241f, -0.004475f, -0.000666f, 0.008734f, -0.008092f, -0.008434f, -0.003906f, -0.006376f, 0.000110f, -0.021975f, -0.009242f, -0.005041f, 0.000580f, 0.017881f, 0.005201f, 0.017114f, 0.007117f, -0.000388f, -0.009118f, 0.001712f, 0.002554f, 0.003035f, 0.007419f, 0.024051f, 0.004480f, -0.021428f, 0.007551f, -0.007979f, 0.001412f, -0.007579f, -0.007076f, -0.003551f, 0.011470f, 0.006723f, -0.036227f, -0.013649f, -0.008417f, 0.008472f, 0.002108f, -0.007220f, -0.000622f, 0.023052f, -0.002465f, - 0.012890f, -0.007972f, -0.010262f, 0.007864f, -0.018414f, 0.001813f, -0.042029f, 0.010778f, -0.014226f, 0.004764f, -0.014753f, -0.029759f, -0.005376f, -0.006359f, 0.020970f, 0.009917f, 0.007130f, 0.000015f, 0.028066f, -0.020837f, 0.004627f, 0.008911f, 0.021552f, -0.024811f, -0.015217f, -0.004307f, 0.001490f, -0.000955f, -0.007872f, -0.001616f, 0.007063f, -0.013007f, 0.002219f, 0.008902f, -0.002163f, 0.001869f, -0.011689f, -0.011968f, -0.008448f, 0.035097f, -0.000249f, -0.007599f, 0.012806f, -0.007503f, -0.017824f, -0.013417f, -0.009903f, -0.001750f, 0.005561f, 0.001993f, 0.000664f, 0.019778f, 0.016913f, -0.002456f, 0.005698f, 0.004877f, -0.022541f, -0.014477f, -0.001468f, -0.001151f, -0.006282f, -0.014458f, 0.017940f, 0.022815f, -0.018816f, 0.012488f, 0.010750f, -0.003216f, -0.018062f, -0.027969f, -0.027984f, -0.021019f, -0.013151f, -0.024517f, 0.001330f, -0.020470f, 0.010689f, -0.017209f, -0.013899f, -0.010121f, -0.010793f, -0.003777f, -0.024900f, 0.000848f, 0.027908f, -0.009975f, 0.014884f, -0.006056f, 0.027869f, 0.023038f, 0.010018f, -0.028799f, -0.006918f, 0.037928f, -0.009433f, 0.028065f, - 0.004884f, -0.027336f, -0.013267f, 0.031754f, 0.001196f, -0.021703f, 0.001045f, -0.018529f, -0.001945f, 0.006287f, 0.003241f, -0.003865f, -0.031208f, -0.028502f, 0.008520f, 0.020287f, -0.017449f, -0.001800f, 0.008794f, -0.001565f, 0.003997f, 0.033825f, 0.007196f, 0.004751f, 0.003948f, 0.011036f, -0.013987f, -0.010896f, -0.006571f, -0.036095f, -0.010915f, -0.013708f, -0.007925f, 0.009196f, 0.007803f, -0.002560f, -0.001960f, -0.014508f, -0.019733f, 0.027704f, -0.004105f, -0.025056f, -0.009403f, 0.004561f, 0.021197f, -0.015417f, -0.001956f, -0.016415f, 0.000134f, -0.019603f, -0.000004f, -0.004873f, -0.033565f, 0.002467f, -0.007127f, 0.025114f, 0.001530f, -0.022037f, -0.015831f, 0.012746f, -0.046048f, -0.024118f, -0.015598f, -0.025812f, -0.013223f, -0.010824f, -0.025971f, 0.027236f, -0.007659f, 0.041321f, -0.020738f, -0.032002f, -0.005789f, -0.021659f, 0.036302f, -0.012889f, -0.018617f, -0.009315f, 0.009989f, 0.017727f, 0.016050f, -0.004377f, -0.003864f, -0.008848f, 0.004327f, 0.029008f, -0.000417f, 0.002164f, -0.009162f, -0.004441f, -0.015128f, -0.005807f, 0.007298f, 0.004334f, -0.012402f, -0.000195f, - -0.018538f, 0.002954f, -0.005195f, -0.006588f, 0.008268f, 0.002655f, -0.008300f, -0.004560f, 0.016817f, 0.005023f, -0.012810f, -0.018838f, 0.030215f, -0.002632f, -0.046268f, 0.023149f, -0.004387f, -0.021386f, 0.010393f, -0.004420f, 0.003187f, -0.006224f, 0.017520f, 0.004539f, 0.003008f, 0.043220f, 0.046138f, -0.017882f, 0.006697f, -0.035902f, -0.004913f, -0.009120f, 0.016998f, -0.008198f, 0.005922f, 0.010140f, -0.005056f, 0.021224f, 0.055653f, -0.041707f, -0.013590f, -0.026355f, -0.017841f, 0.021281f, -0.024351f, 0.051323f, -0.006308f, 0.015721f, 0.002508f, 0.012477f, -0.032218f, 0.005833f, 0.007946f, -0.002401f, -0.005245f, -0.002887f, 0.008915f, -0.019699f, -0.012405f, -0.002955f, -0.006124f, -0.024410f, -0.022109f, -0.006040f, -0.010610f, 0.028883f, -0.008334f, -0.014231f, -0.010782f, 0.009606f, -0.015831f, -0.006846f, -0.026852f, 0.011608f, -0.010863f, 0.010103f, -0.010194f, 0.012949f, -0.008021f, -0.045544f, -0.023955f, 0.005793f, -0.004702f, -0.003640f, -0.015261f, -0.027659f, -0.002908f, 0.010684f, 0.006436f, -0.007230f, 0.007226f, 0.012457f, 0.040796f, -0.019600f, 0.018315f, -0.049309f, - 0.001058f, 0.005381f, -0.007805f, -0.015527f, 0.007373f, -0.000172f, -0.000348f, 0.008564f, 0.030904f, 0.020498f, 0.014049f, -0.011770f, -0.014698f, 0.013598f, -0.024990f, 0.001305f, 0.010904f, -0.016956f, 0.020773f, 0.067741f, 0.045173f, -0.010895f, -0.030924f, -0.018161f, 0.038512f, -0.045971f, 0.000960f, -0.010361f, -0.013275f, 0.021241f, -0.036520f, 0.006421f, -0.019435f, 0.001336f, -0.025862f, -0.016967f, 0.001305f, 0.003087f, -0.000540f, -0.021653f, 0.035933f, 0.009439f, -0.018246f, 0.008662f, -0.006432f, 0.005184f, 0.054348f, 0.019553f, -0.017047f, -0.011776f, 0.001257f, 0.019281f, 0.003230f, -0.039752f, -0.011708f, -0.026842f, -0.011059f, -0.011471f, 0.012685f, -0.005718f, -0.005370f, 0.001816f, -0.002835f, -0.018342f, -0.025152f, 0.017632f, -0.010383f, 0.006376f, -0.002490f, 0.022997f, -0.018242f, -0.009814f, 0.003928f, 0.010972f, -0.023695f, 0.027268f, -0.016975f, -0.034007f, -0.035263f, -0.009707f, -0.011072f, -0.012241f, -0.008931f, -0.049193f, 0.016936f, -0.021954f, -0.009102f, -0.017831f, 0.027367f, 0.012041f, 0.012411f, 0.002764f, -0.005784f, -0.022388f, -0.009926f, -0.064665f, - -0.008624f, 0.043929f, -0.053849f, -0.020724f, -0.001907f, -0.015851f, 0.018664f, -0.010648f, 0.059531f, -0.005641f, -0.013802f, -0.009584f, -0.003405f, 0.017996f, -0.012742f, -0.011289f, 0.048323f, -0.035696f, -0.005222f, 0.011715f, -0.008837f, 0.030988f, 0.016423f, -0.001930f, -0.004808f, 0.013228f, 0.016481f, 0.019153f, 0.014562f, 0.032621f, 0.009300f, 0.014054f, 0.007360f, -0.010532f, 0.053273f, 0.006829f, 0.008970f, 0.013687f, 0.006862f, 0.039168f, -0.004097f, 0.009527f, 0.012201f, 0.011132f, 0.005022f, 0.025636f, -0.016803f, -0.012724f, 0.024279f, -0.005155f, -0.027644f, -0.007171f, -0.047219f, -0.016044f, -0.010510f, 0.042488f, -0.042681f, -0.005986f, -0.000217f, -0.002189f, -0.004483f, 0.024558f, 0.067337f, -0.013101f, 0.006194f, 0.006959f, 0.007718f, 0.032193f, -0.039284f, -0.037971f, -0.037522f, 0.058526f, -0.000611f, -0.022428f, 0.047188f, -0.018452f, 0.037221f, 0.004933f, -0.040309f, -0.113028f, 0.021560f, -0.026044f, -0.045604f, 0.051049f, -0.031044f, -0.013804f, -0.044904f, 0.012814f, -0.009938f, -0.041057f, -0.015087f, -0.023741f, 0.010658f, -0.021853f, -0.000080f, 0.010712f, - 0.017942f, 0.011358f, 0.031241f, 0.006749f, -0.001410f, -0.001703f, -0.028469f, -0.019273f, -0.020592f, 0.017451f, 0.023109f, 0.013026f, 0.007499f, 0.001085f, 0.008259f, 0.020831f, 0.043234f, -0.019134f, -0.012750f, 0.009671f, -0.021200f, 0.023272f, 0.003590f, -0.017409f, 0.044079f, 0.018516f, -0.038985f, 0.017109f, -0.037526f, 0.006502f, 0.005994f, 0.021487f, -0.011351f, -0.009996f, 0.056397f, 0.024729f, -0.025607f, 0.017539f, 0.029406f, -0.020826f, -0.050936f, 0.030646f, -0.004950f, 0.002507f, 0.003167f, 0.015505f, 0.076631f, -0.003578f, 0.008668f, 0.018912f, -0.001418f, 0.022408f, 0.008992f, -0.035910f, 0.006736f, -0.015871f, -0.035052f, -0.041127f, 0.087729f, 0.018292f, -0.005340f, -0.010947f, 0.019997f, 0.078537f, 0.036492f, 0.008986f, -0.002050f, 0.025991f, 0.066171f, 0.015901f, 0.022931f, 0.020034f, 0.047192f, -0.030875f, 0.030601f, 0.012957f, -0.090172f, 0.026139f, -0.012674f, 0.026137f, -0.028046f, 0.020577f, 0.014146f, 0.027363f, -0.000201f, 0.011186f, 0.004394f, -0.026363f, 0.012748f, 0.024637f, -0.021369f, 0.011972f, -0.020778f, -0.013277f, 0.064627f, 0.005759f, - 0.057182f, -0.041676f, 0.017688f, -0.003011f, -0.008394f, -0.002239f, -0.005202f, 0.007915f, 0.020758f, 0.013545f, -0.001879f, 0.031685f, -0.052521f, -0.050315f, 0.035346f, -0.029155f, -0.007609f, -0.007746f, -0.034195f, 0.015785f, -0.009381f, 0.008327f, 0.004699f, 0.054154f, 0.026341f, 0.027866f, 0.010298f, 0.006433f, -0.051248f, -0.013064f, 0.023881f, -0.001928f, -0.000551f, -0.001416f, -0.017822f, -0.044731f, 0.021434f, -0.077998f, 0.066299f, -0.027295f, 0.012034f, 0.044893f, -0.064682f, -0.000524f, -0.006475f, 0.016535f, 0.022711f, 0.028593f, 0.046357f, 0.009056f, -0.031603f, 0.017846f, 0.049376f, -0.070735f, -0.043332f, 0.049120f, 0.001308f, 0.000552f, 0.001079f, 0.005020f, -0.002530f, -0.000372f, 0.023355f, 0.015943f, -0.035749f, 0.003001f, -0.011032f, 0.060692f, 0.034850f, -0.011486f, 0.002205f, 0.007939f, 0.005994f, 0.000318f, 0.020274f, 0.002877f, 0.015187f, 0.061818f, 0.006857f, 0.007099f, -0.010875f, 0.016345f, -0.059826f, -0.024548f, -0.026168f, -0.001972f, 0.004378f, -0.050680f, 0.018312f, -0.044899f, 0.013429f, 0.047876f, -0.012393f, -0.041807f, -0.024946f, 0.018342f, - -0.010556f, -0.085981f, 0.021412f, -0.059629f, -0.015636f, -0.006378f, -0.000520f, -0.022854f, 0.003559f, 0.032485f, -0.027832f, -0.054942f, -0.089346f, 0.071688f, 0.017578f, -0.003338f, 0.015048f, 0.094322f, -0.101644f, 0.039787f, 0.055148f, -0.067315f, -0.017754f, -0.037231f, -0.016950f, 0.093736f, -0.040779f, 0.065921f, -0.029527f, -0.011268f, -0.014857f, 0.020223f, 0.010794f, -0.084979f, -0.013355f, -0.023986f, 0.038079f, -0.000152f, 0.017325f, 0.026870f, -0.038184f, -0.009451f, -0.023550f, 0.012619f, 0.036116f, 0.019150f, -0.049979f, -0.010940f, 0.012781f, 0.005218f, -0.000956f, -0.026397f, -0.007849f, -0.048923f, -0.006288f, -0.008272f, 0.045826f, -0.040233f, 0.097274f, 0.019220f, -0.025302f, 0.040193f, 0.003937f, 0.052700f, 0.032147f, 0.049926f, 0.015152f, 0.045457f, 0.040945f, 0.044420f, 0.051132f, 0.005683f, 0.049546f, -0.062003f, -0.007950f, 0.010878f, -0.037315f, -0.008724f, 0.027328f, -0.048660f, -0.066253f, 0.025534f, 0.046517f, -0.000673f, 0.012072f, -0.050146f, -0.011473f, -0.042451f, -0.000782f, 0.043325f, 0.003398f, 0.083136f, 0.035825f, -0.023137f, 0.062290f, -0.131299f, - 0.119434f, -0.024236f, -0.044358f, -0.032243f, 0.081747f, -0.060959f, -0.013772f, -0.014786f, -0.004052f, 0.049490f, -0.054145f, -0.000777f, 0.016952f, -0.011419f, -0.009939f, 0.005156f, -0.031967f, 0.044858f, -0.000700f, -0.062691f, -0.019834f, -0.012082f, 0.001142f, -0.068973f, -0.003589f, 0.012912f, -0.017475f, 0.004898f, 0.017030f, 0.049468f, -0.021631f, -0.006973f, 0.006694f, -0.025703f, -0.097042f, 0.012748f, 0.071734f, -0.033407f, -0.060888f, 0.008787f, 0.057268f, -0.023209f, -0.021001f, -0.073007f, -0.015727f, 0.006760f, 0.052546f, 0.031123f, 0.003933f, -0.053393f, -0.036895f, 0.051961f, -0.058887f, 0.025448f, 0.088527f, 0.058040f, 0.067777f, -0.028139f, 0.037908f, 0.033005f, -0.083722f, -0.022535f, -0.046947f, -0.003359f, 0.042723f, 0.005380f, 0.046223f, 0.049391f, -0.084446f, 0.097171f, -0.059622f, 0.009369f, -0.002480f, -0.029539f, 0.077332f, 0.010303f, -0.047199f, 0.082100f, 0.055406f, 0.010112f, -0.017037f, -0.040060f, 0.022842f, -0.001545f, -0.005341f, -0.000900f, -0.002969f, 0.001950f, -0.017542f, 0.022041f, -0.001945f, -0.069953f, 0.016496f, 0.008264f, -0.026316f, 0.002801f, - 0.029535f, -0.008580f, 0.000629f, -0.049995f, 0.036364f, -0.016542f, -0.006998f, -0.003283f, 0.020135f, -0.026145f, -0.002390f, 0.008404f, -0.000467f, 0.007983f, -0.014633f, 0.040509f, -0.021402f, 0.069863f, -0.042911f, -0.042294f, 0.040705f, -0.044766f, 0.001331f, 0.037264f, -0.033518f, -0.012170f, 0.017629f, 0.024168f, 0.027894f, -0.100912f, 0.032003f, 0.001537f, -0.024474f, 0.068148f, -0.033634f, 0.006740f, -0.000305f, -0.052806f, 0.070806f, -0.000406f, -0.003489f, -0.034317f, -0.006963f, 0.062240f, -0.013692f, 0.001485f, 0.002659f, 0.021044f, 0.010495f, -0.068041f, 0.037099f, 0.070134f, -0.031884f, 0.032616f, -0.047110f, 0.094057f, 0.010083f, -0.063199f, -0.044947f, -0.149872f, -0.226701f, 0.014661f, 0.195670f, 0.002218f, 0.512189f, 0.463669f, 0.277444f, 0.535211f, 0.350999f, -0.059741f, 0.019064f, -0.070667f, -0.423933f, -0.241943f, -0.187674f, -0.414908f, -0.341344f, -0.102702f, -0.201508f, -0.231623f, -0.021258f, 0.010441f, -0.099654f, 0.017746f, 0.084334f, -0.115557f, -0.098515f, 0.145716f, 0.026831f, -0.040724f, 0.100408f, 0.135544f, -0.004676f, 0.138792f, 0.238791f, 0.081805f, - 0.061589f, 0.242490f, 0.162268f, 0.013948f, 0.176309f, 0.262289f, 0.111698f, 0.130305f, 0.299664f, 0.108647f, 0.034337f, 0.284528f, 0.280226f, 0.080130f, 0.338581f, 0.484167f, 0.174802f, 0.192395f, 0.334394f, 0.093986f, -0.122098f, 0.007905f, -0.125840f, -0.427570f, -0.407782f, -0.436137f, -0.691647f, -0.748139f, -0.797924f, -0.942924f, -0.984025f, -0.963033f, -0.934808f, -0.825490f, -0.736560f, -0.602712f, -0.386639f, -0.263248f, -0.014537f, 0.386460f, 0.334089f, 0.065555f}, - {-0.013861f, -0.005870f, 0.000823f, -0.005459f, -0.000702f, 0.006872f, -0.007999f, 0.003450f, -0.003475f, -0.003504f, -0.007449f, -0.002442f, 0.011322f, -0.008068f, 0.006433f, 0.003489f, -0.006159f, -0.000276f, -0.009061f, 0.002604f, -0.000753f, 0.005558f, -0.016272f, -0.007117f, -0.002165f, 0.003521f, -0.001352f, -0.005909f, -0.000019f, -0.001609f, -0.007437f, 0.007231f, -0.000014f, 0.002122f, 0.007805f, 0.000418f, -0.001935f, -0.001271f, -0.001493f, 0.000720f, -0.003364f, -0.005271f, -0.004332f, -0.004106f, -0.002323f, -0.002574f, 0.010531f, 0.006915f, 0.002549f, 0.002212f, 0.001931f, -0.002321f, -0.000710f, -0.002219f, 0.010002f, -0.001338f, 0.002650f, -0.006858f, 0.002569f, -0.000632f, 0.004066f, 0.002017f, 0.001412f, -0.002971f, 0.000501f, -0.001837f, 0.007803f, 0.000038f, 0.000888f, 0.003626f, 0.001967f, -0.004854f, 0.002329f, 0.001014f, -0.002422f, -0.000327f, 0.000114f, 0.005781f, 0.017463f, 0.004287f, 0.002261f, -0.003736f, -0.001794f, -0.008481f, -0.000705f, -0.001951f, 0.006249f, 0.006124f, -0.006223f, -0.003951f, -0.003900f, -0.003093f, -0.004540f, 0.000733f, 0.004884f, -0.003894f, - -0.004835f, -0.014389f, -0.011156f, -0.007668f, -0.000744f, 0.001043f, 0.010367f, -0.005672f, 0.004941f, 0.003540f, 0.002345f, 0.000886f, -0.008427f, 0.002292f, -0.017521f, 0.002316f, 0.000114f, 0.001031f, -0.001598f, -0.010337f, -0.005244f, -0.008887f, 0.000117f, 0.000791f, -0.005955f, -0.013931f, 0.009249f, -0.000493f, -0.008744f, 0.000143f, 0.005024f, 0.001373f, -0.003353f, 0.002171f, -0.005225f, -0.001877f, -0.004975f, 0.003564f, -0.005277f, 0.006790f, 0.004821f, -0.000954f, -0.009998f, 0.000590f, 0.000695f, -0.000758f, -0.004077f, 0.002440f, 0.001025f, -0.002119f, 0.004417f, 0.005534f, 0.003138f, 0.000311f, -0.000661f, 0.001641f, -0.005740f, -0.018906f, -0.021202f, -0.001519f, -0.008379f, 0.006463f, -0.010389f, 0.002593f, 0.004808f, -0.007106f, 0.005793f, 0.021202f, 0.001188f, -0.001977f, 0.011627f, 0.001551f, 0.011670f, 0.000153f, 0.005317f, -0.008381f, -0.011089f, -0.000629f, 0.004178f, -0.007729f, -0.002506f, -0.000813f, -0.002206f, 0.002076f, -0.002302f, -0.004099f, 0.003801f, -0.001949f, -0.001665f, 0.008306f, 0.011832f, -0.003740f, -0.006459f, 0.002337f, 0.009442f, 0.003582f, - 0.012113f, 0.000483f, -0.001808f, -0.000339f, 0.010779f, 0.000676f, -0.007903f, -0.004296f, 0.008414f, 0.006183f, 0.006502f, 0.001799f, -0.004403f, -0.008797f, 0.001557f, 0.004144f, 0.004933f, -0.001880f, -0.004837f, 0.009535f, 0.006128f, -0.001535f, -0.005615f, 0.000380f, -0.004041f, 0.009996f, 0.002648f, 0.001936f, 0.002706f, 0.001270f, 0.001506f, 0.006312f, 0.000399f, 0.006435f, -0.002062f, 0.010233f, -0.000061f, -0.008687f, 0.011189f, 0.007756f, 0.011779f, 0.012154f, -0.002875f, 0.006063f, -0.002565f, -0.006971f, -0.000594f, 0.018026f, 0.007966f, 0.003983f, 0.006485f, -0.007593f, 0.012941f, 0.005472f, 0.008688f, -0.002604f, -0.014256f, 0.005957f, -0.022273f, 0.004471f, -0.005649f, 0.004428f, 0.003572f, -0.000483f, -0.007630f, 0.001789f, 0.005071f, -0.003056f, 0.004760f, 0.011248f, -0.000753f, -0.009459f, -0.012732f, 0.001919f, 0.005779f, -0.011857f, 0.006611f, -0.011153f, -0.007155f, 0.007943f, -0.004603f, -0.009452f, -0.004491f, -0.006703f, 0.010405f, 0.014081f, 0.008109f, -0.005222f, 0.000136f, 0.007455f, 0.004605f, -0.000775f, -0.005722f, -0.002896f, -0.005010f, 0.005253f, - 0.017633f, -0.000299f, -0.009435f, -0.007684f, 0.004156f, 0.001252f, -0.003483f, -0.010575f, -0.000109f, -0.009090f, -0.003417f, 0.001214f, -0.001452f, 0.006889f, 0.001384f, 0.008738f, 0.010376f, -0.009018f, -0.003282f, 0.024821f, -0.006611f, 0.002325f, 0.003630f, -0.016548f, -0.013940f, 0.000239f, 0.016337f, 0.012288f, 0.019728f, 0.006345f, -0.005522f, -0.008629f, 0.001476f, -0.005034f, 0.003895f, 0.001697f, 0.006657f, 0.012031f, 0.003892f, 0.008806f, -0.000266f, 0.005122f, -0.005446f, -0.011628f, -0.005999f, -0.008971f, 0.000080f, -0.002702f, 0.002611f, -0.014161f, -0.006983f, -0.002158f, 0.005070f, -0.007178f, 0.014306f, -0.016540f, 0.003397f, -0.010561f, -0.008363f, 0.004331f, 0.004034f, 0.013469f, -0.001642f, 0.003079f, -0.004068f, 0.009262f, 0.010155f, 0.002372f, -0.002333f, -0.010956f, -0.001572f, 0.003051f, -0.008132f, 0.007431f, -0.008941f, 0.003142f, 0.014438f, 0.011518f, 0.000053f, -0.005458f, 0.002161f, 0.013737f, -0.001929f, 0.002663f, 0.002173f, 0.010867f, 0.000058f, -0.004363f, -0.007402f, 0.003790f, -0.011065f, 0.002322f, 0.023392f, 0.003360f, 0.011448f, -0.002805f, - -0.009445f, -0.015172f, 0.007481f, -0.010709f, -0.011774f, 0.002729f, -0.005882f, -0.036173f, 0.003201f, 0.006032f, 0.033123f, 0.011229f, 0.002147f, -0.014797f, 0.013618f, 0.006443f, -0.006391f, 0.007713f, -0.001582f, 0.012569f, -0.007648f, -0.003352f, -0.002773f, -0.002812f, -0.005335f, -0.001762f, 0.008352f, 0.007985f, 0.012792f, 0.005106f, 0.006141f, 0.000305f, -0.008771f, -0.008759f, 0.012129f, -0.006335f, 0.002509f, -0.000665f, -0.008976f, 0.013017f, -0.002319f, -0.004982f, 0.001981f, 0.009608f, -0.006278f, 0.014353f, -0.017775f, -0.014088f, -0.018008f, 0.004801f, -0.010195f, -0.014792f, -0.003637f, 0.014768f, -0.006148f, 0.004781f, 0.008403f, -0.005636f, -0.008091f, 0.001166f, 0.001322f, 0.005308f, 0.000928f, -0.003903f, -0.000400f, 0.018983f, 0.007995f, -0.006876f, -0.022873f, -0.017809f, 0.007188f, 0.022700f, 0.019018f, -0.013343f, 0.001247f, -0.007892f, 0.005051f, -0.006388f, 0.010666f, -0.018087f, -0.003216f, -0.022465f, -0.006745f, 0.003421f, 0.007723f, -0.020514f, -0.005290f, 0.014118f, -0.001889f, -0.020579f, 0.010459f, -0.006607f, -0.012006f, 0.006408f, 0.010548f, 0.002377f, - 0.001987f, 0.003631f, 0.013815f, -0.006817f, -0.006184f, 0.003545f, -0.007340f, -0.003739f, -0.000182f, -0.000996f, 0.000076f, 0.011082f, 0.005385f, -0.001577f, -0.001435f, 0.006317f, 0.002303f, 0.007792f, -0.001206f, 0.008803f, 0.009176f, 0.003467f, -0.011151f, 0.001089f, -0.002073f, -0.008020f, 0.009580f, -0.006313f, 0.003620f, -0.007580f, -0.003260f, -0.025841f, 0.001584f, 0.019775f, 0.001047f, 0.021002f, -0.004817f, -0.005715f, -0.023249f, 0.025384f, 0.011491f, 0.013983f, 0.001506f, 0.011178f, -0.001145f, -0.001319f, 0.009173f, -0.007360f, 0.002557f, -0.001596f, -0.026367f, 0.003973f, -0.007272f, 0.004524f, -0.005362f, 0.003379f, 0.021330f, 0.003401f, -0.029677f, -0.000218f, 0.021040f, -0.004025f, 0.012167f, -0.013137f, -0.010288f, -0.024247f, 0.013579f, 0.008180f, 0.015887f, 0.008525f, -0.008863f, 0.014759f, -0.004216f, 0.014164f, -0.009480f, -0.007346f, 0.000348f, -0.002184f, 0.010925f, 0.003244f, 0.009118f, 0.011744f, -0.007187f, -0.004754f, -0.004499f, 0.008030f, -0.002109f, -0.003799f, 0.000865f, -0.008985f, 0.004472f, 0.004342f, -0.005778f, 0.008145f, 0.012193f, -0.004242f, - -0.006386f, -0.000661f, -0.010233f, -0.003803f, 0.014131f, 0.002895f, -0.009658f, 0.018770f, -0.020190f, 0.004023f, 0.009986f, -0.003579f, -0.006995f, -0.000517f, 0.007871f, -0.014051f, 0.006999f, -0.005139f, -0.013379f, -0.008691f, -0.008281f, 0.001250f, -0.004177f, -0.007226f, 0.003036f, 0.023170f, 0.011726f, -0.002004f, -0.008156f, -0.020422f, 0.001700f, 0.012982f, -0.007633f, -0.022615f, -0.000136f, -0.002553f, 0.000122f, 0.004268f, 0.008668f, 0.009857f, -0.004452f, 0.002692f, 0.014042f, 0.001183f, 0.016501f, 0.018351f, 0.040183f, 0.027800f, 0.016729f, -0.003986f, -0.021495f, -0.007138f, 0.019472f, 0.008796f, -0.020730f, 0.015747f, -0.003671f, -0.009886f, -0.012681f, 0.002255f, 0.034852f, -0.023257f, 0.025217f, 0.010241f, -0.005420f, 0.008695f, -0.006781f, 0.018475f, -0.006870f, 0.009971f, 0.001985f, -0.012077f, -0.008662f, -0.011742f, 0.000609f, 0.010800f, -0.002813f, -0.006393f, 0.006854f, 0.001361f, -0.001850f, -0.023081f, 0.007412f, -0.012692f, -0.009696f, 0.007048f, 0.015902f, -0.010937f, -0.016150f, 0.001148f, 0.014482f, 0.001727f, -0.008939f, -0.002939f, -0.005064f, 0.006985f, - 0.005282f, -0.004844f, -0.008232f, -0.012813f, 0.009047f, 0.022058f, 0.014015f, 0.007339f, -0.011519f, 0.006980f, 0.014664f, -0.014814f, -0.018741f, 0.003825f, -0.015126f, -0.007748f, -0.030796f, 0.000101f, -0.020631f, 0.044429f, 0.000712f, -0.016984f, 0.019190f, -0.020980f, 0.024375f, 0.002310f, -0.015251f, -0.025376f, -0.006464f, 0.012938f, -0.020656f, 0.018469f, -0.003108f, 0.012034f, 0.013722f, -0.011599f, -0.005161f, -0.006834f, -0.009695f, -0.003337f, -0.009054f, 0.001856f, -0.011015f, 0.011691f, 0.007017f, 0.009880f, 0.019152f, 0.010307f, -0.002962f, 0.023371f, 0.011640f, 0.004649f, -0.012378f, -0.013035f, 0.006867f, -0.009877f, 0.002367f, 0.007682f, -0.015315f, 0.013562f, 0.035056f, 0.003101f, 0.024980f, 0.012221f, 0.012166f, 0.018215f, 0.001195f, 0.009867f, 0.010148f, -0.022205f, -0.015122f, 0.016088f, 0.001341f, 0.015214f, 0.002978f, 0.015953f, -0.002090f, 0.006040f, 0.004336f, -0.031987f, -0.001577f, 0.008813f, 0.022368f, 0.005323f, 0.019801f, 0.002408f, -0.003617f, 0.006714f, 0.009558f, -0.017769f, -0.029638f, -0.015847f, 0.005583f, 0.007868f, 0.002523f, 0.021383f, - 0.008625f, -0.020595f, -0.002637f, -0.018240f, -0.009739f, 0.008854f, -0.010412f, 0.005130f, 0.005743f, -0.010571f, -0.029153f, 0.009988f, -0.028885f, -0.031460f, 0.006276f, -0.014998f, 0.013534f, 0.021290f, -0.005956f, 0.024704f, -0.006495f, 0.024434f, 0.031254f, 0.001026f, 0.001148f, -0.031311f, -0.006850f, 0.004534f, 0.004789f, -0.002725f, -0.022032f, 0.002559f, -0.018773f, 0.003395f, -0.005608f, 0.006030f, -0.007674f, -0.010800f, 0.001959f, -0.000959f, -0.007341f, 0.008778f, -0.000007f, -0.003702f, 0.022345f, 0.009843f, 0.016576f, -0.009672f, 0.002413f, -0.007915f, 0.005815f, -0.000695f, 0.008284f, -0.001634f, -0.007679f, -0.007402f, -0.021292f, -0.010553f, 0.032134f, 0.014931f, 0.021000f, -0.023686f, 0.004424f, 0.020432f, -0.016895f, 0.001928f, 0.011256f, -0.004765f, 0.011250f, 0.003701f, -0.023204f, -0.003728f, -0.035223f, -0.002168f, 0.012385f, 0.008959f, 0.021038f, -0.019907f, -0.019794f, -0.018825f, -0.030067f, 0.020751f, 0.011643f, 0.002737f, -0.020663f, 0.018555f, -0.001380f, -0.023665f, -0.021363f, -0.006125f, -0.006302f, -0.014870f, -0.007532f, -0.008485f, -0.009283f, -0.004994f, - -0.024148f, 0.012191f, 0.011868f, -0.000394f, -0.003613f, -0.003378f, -0.009945f, -0.026253f, -0.031055f, 0.001645f, 0.011143f, -0.007050f, -0.019846f, -0.009473f, 0.012057f, 0.010873f, -0.001150f, -0.004971f, -0.009686f, -0.007196f, 0.015512f, -0.008193f, 0.010244f, -0.007712f, -0.001759f, -0.028661f, -0.008612f, -0.001592f, 0.019864f, 0.006835f, -0.007614f, -0.015754f, -0.014026f, -0.022323f, 0.034632f, -0.016322f, 0.032602f, 0.005407f, -0.018279f, 0.024339f, 0.019804f, 0.040834f, -0.042467f, 0.017331f, 0.002740f, 0.006604f, -0.011860f, -0.009641f, 0.012666f, 0.010814f, -0.008178f, -0.015958f, 0.014230f, -0.007614f, 0.014292f, 0.022417f, 0.006620f, -0.008034f, 0.009564f, 0.030505f, -0.051827f, -0.058146f, -0.034622f, -0.007237f, -0.023832f, 0.014010f, -0.019445f, 0.000789f, 0.011230f, -0.002883f, 0.038453f, 0.025625f, 0.010503f, -0.012412f, -0.007457f, 0.024777f, -0.003532f, 0.002571f, -0.009929f, -0.024945f, 0.000843f, 0.007916f, 0.007011f, -0.014475f, 0.012034f, -0.000017f, -0.000888f, 0.020551f, 0.031195f, 0.000481f, -0.019032f, -0.010183f, -0.037057f, -0.016344f, -0.009283f, -0.013110f, - 0.002051f, 0.004686f, -0.013355f, -0.007385f, -0.018867f, 0.018597f, 0.024827f, 0.018551f, 0.023110f, 0.016049f, 0.030135f, 0.001574f, 0.010230f, 0.004982f, -0.005703f, 0.009390f, 0.017631f, -0.020333f, -0.062821f, -0.016874f, 0.020083f, -0.034730f, 0.015668f, 0.017870f, 0.006366f, -0.012400f, 0.000329f, -0.010418f, -0.026552f, -0.009557f, 0.014429f, -0.022857f, -0.019254f, 0.003089f, -0.016657f, 0.037563f, 0.037546f, -0.018418f, 0.049027f, -0.040974f, -0.002677f, 0.009118f, -0.042885f, -0.010244f, -0.019211f, 0.008031f, -0.014433f, 0.037432f, 0.002642f, 0.001415f, 0.042457f, -0.000657f, -0.041350f, -0.029707f, -0.021326f, 0.017075f, -0.004326f, -0.036299f, 0.007721f, 0.012496f, 0.017972f, -0.020830f, 0.009417f, 0.021191f, 0.014663f, 0.015391f, -0.006827f, 0.024977f, 0.022728f, 0.010341f, -0.057802f, 0.042545f, -0.022201f, 0.017596f, -0.006363f, -0.003800f, 0.008291f, -0.022628f, -0.016469f, 0.028132f, -0.014395f, -0.001367f, 0.021117f, -0.024355f, 0.021196f, -0.007079f, 0.019434f, -0.026967f, 0.036149f, -0.015086f, 0.057323f, -0.005626f, 0.000906f, 0.017768f, -0.016278f, -0.007492f, - -0.010408f, 0.007367f, -0.006326f, -0.027676f, -0.041420f, -0.007788f, 0.018443f, -0.008507f, -0.017687f, -0.035616f, 0.013628f, 0.007415f, -0.057586f, 0.003121f, -0.004635f, 0.012480f, 0.020721f, -0.012213f, 0.018080f, 0.060591f, 0.027939f, -0.016504f, 0.039166f, 0.014885f, -0.027572f, 0.011488f, 0.024721f, -0.002607f, -0.010570f, -0.034833f, -0.011474f, 0.023835f, 0.012964f, 0.012097f, 0.004896f, -0.005102f, -0.016288f, -0.032816f, 0.016474f, -0.010238f, 0.007287f, -0.024861f, -0.016080f, 0.000790f, -0.005937f, 0.035138f, 0.008218f, 0.006830f, 0.023805f, 0.013855f, -0.041069f, -0.003078f, 0.012161f, -0.005815f, -0.001369f, 0.034804f, 0.008697f, 0.040185f, -0.024838f, -0.012618f, -0.008778f, -0.012815f, 0.012622f, -0.013388f, 0.026449f, 0.030661f, -0.015530f, -0.026572f, 0.044490f, -0.022602f, -0.012954f, -0.003810f, 0.010835f, 0.009189f, -0.029964f, -0.005824f, 0.013157f, -0.010383f, 0.017390f, -0.007806f, 0.025965f, -0.013259f, 0.001945f, 0.049311f, -0.006458f, 0.035884f, 0.050434f, 0.010719f, 0.020424f, -0.010262f, -0.077461f, -0.041252f, -0.021292f, 0.003416f, 0.016990f, -0.077599f, - -0.018021f, 0.080001f, -0.030521f, -0.035114f, 0.071457f, -0.046255f, 0.040372f, 0.052876f, 0.021418f, 0.006635f, -0.040468f, 0.014792f, -0.071190f, -0.035976f, 0.015721f, 0.036216f, 0.004255f, 0.007627f, 0.027050f, 0.071187f, 0.048743f, 0.014209f, 0.002596f, -0.001179f, 0.007879f, 0.004806f, -0.028214f, -0.000621f, 0.017595f, 0.021296f, 0.095989f, 0.052937f, 0.036727f, 0.068126f, 0.027964f, -0.011461f, 0.020371f, -0.002895f, 0.066037f, 0.022449f, -0.006120f, -0.012876f, 0.027082f, -0.006155f, 0.031121f, -0.101328f, 0.003342f, 0.032110f, -0.003109f, 0.039171f, -0.016661f, 0.008555f, 0.020756f, -0.095060f, -0.037200f, -0.010006f, -0.031246f, -0.041306f, -0.046989f, 0.039016f, -0.029690f, 0.004849f, -0.010807f, 0.038432f, -0.072222f, -0.023593f, -0.013013f, 0.016606f, -0.004241f, -0.012603f, 0.046240f, 0.081627f, -0.007373f, 0.017278f, -0.028184f, -0.011002f, 0.037833f, 0.040829f, -0.038706f, -0.118778f, -0.026279f, 0.054306f, 0.007308f, -0.009713f, -0.014040f, 0.007799f, -0.021345f, -0.018537f, 0.022653f, 0.024193f, 0.051365f, 0.024325f, 0.029055f, -0.008564f, 0.069730f, 0.017473f, - 0.042488f, -0.002548f, 0.063862f, -0.021897f, 0.039922f, -0.039327f, -0.004399f, 0.009015f, 0.027039f, -0.008308f, -0.028722f, -0.053218f, 0.027031f, 0.008593f, 0.001473f, -0.023368f, -0.056791f, 0.001361f, 0.000698f, -0.001740f, 0.010410f, 0.037955f, -0.000509f, 0.028606f, 0.079211f, -0.030738f, 0.002688f, -0.022823f, 0.037845f, 0.043363f, -0.048767f, 0.045754f, 0.039506f, -0.027015f, 0.005021f, 0.016877f, 0.024895f, 0.022123f, 0.057399f, 0.027175f, -0.030526f, 0.011175f, 0.075488f, 0.034361f, -0.104079f, 0.036816f, 0.007859f, -0.072609f, -0.032962f, -0.015470f, -0.069380f, 0.016829f, 0.022706f, 0.054624f, -0.039702f, 0.090635f, -0.075599f, 0.061157f, 0.133503f, 0.008286f, -0.073403f, 0.113989f, -0.025358f, -0.002404f, 0.016802f, 0.064242f, -0.036991f, 0.001935f, 0.130580f, -0.065474f, 0.031347f, 0.042888f, 0.042399f, -0.058796f, -0.005549f, 0.009216f, -0.028051f, 0.003725f, 0.013789f, -0.024768f, 0.023302f, -0.041187f, -0.011126f, -0.017415f, -0.002874f, -0.025476f, -0.020804f, -0.009404f, 0.012633f, -0.045212f, -0.040507f, 0.059089f, 0.011129f, -0.040269f, -0.009978f, 0.034095f, - 0.088105f, -0.010026f, -0.042942f, 0.043446f, 0.067550f, -0.022318f, -0.005030f, -0.001130f, 0.024438f, -0.002914f, 0.000040f, 0.027382f, -0.074644f, 0.047596f, -0.043073f, -0.003338f, -0.061039f, 0.030034f, -0.004787f, -0.095726f, 0.044990f, -0.011505f, -0.035246f, 0.056033f, 0.007281f, 0.054795f, -0.051355f, -0.026363f, -0.020649f, -0.054987f, -0.073648f, -0.105933f, 0.083151f, 0.024729f, 0.061228f, 0.046511f, -0.000156f, -0.020032f, 0.070201f, -0.027664f, 0.019343f, 0.018312f, -0.076958f, 0.068847f, 0.021348f, -0.017771f, 0.055522f, 0.006220f, 0.001515f, 0.029561f, -0.027525f, 0.074971f, -0.061704f, -0.030535f, 0.024900f, 0.026468f, 0.009872f, -0.054055f, -0.036284f, -0.060428f, 0.031046f, 0.008979f, 0.028018f, 0.000796f, 0.030214f, 0.014082f, 0.007988f, 0.001909f, 0.025107f, -0.012308f, 0.012255f, -0.027650f, 0.017560f, -0.025622f, -0.003815f, -0.034017f, -0.028028f, 0.001534f, -0.034281f, 0.014257f, 0.068598f, 0.017235f, -0.058511f, 0.028153f, 0.017569f, 0.038142f, -0.003342f, 0.063528f, -0.059602f, 0.007808f, 0.020744f, -0.053819f, -0.017382f, 0.106178f, 0.055055f, -0.142808f, - -0.065671f, 0.074112f, -0.026381f, -0.068747f, 0.020368f, -0.008651f, -0.058459f, 0.035971f, 0.057353f, -0.089865f, 0.009491f, 0.074573f, -0.061302f, -0.050962f, 0.053465f, 0.003781f, -0.061196f, 0.057461f, -0.130014f, -0.014735f, -0.018695f, -0.155380f, -0.021635f, -0.051396f, 0.020057f, 0.020854f, 0.049840f, -0.024798f, -0.053230f, -0.027080f, -0.079157f, 0.006449f, 0.035806f, 0.012671f, 0.019015f, -0.072880f, 0.047402f, 0.001843f, -0.076096f, 0.054998f, -0.082191f, -0.040700f, -0.027153f, 0.019187f, 0.069573f, 0.069160f, -0.000052f, -0.021253f, -0.136265f, 0.056524f, 0.150316f, 0.047961f, 0.009582f, -0.083755f, -0.109674f, -0.052209f, -0.003325f, 0.056090f, -0.066093f, -0.047933f, -0.067956f, -0.028287f, 0.141483f, 0.140696f, -0.018322f, -0.071411f, -0.050548f, -0.035187f, -0.008040f, 0.068663f, -0.027279f, 0.017417f, 0.022930f, 0.044176f, -0.005457f, -0.037267f, -0.076611f, -0.041289f, 0.137657f, 0.050784f, 0.094811f, -0.083441f, -0.034451f, -0.041203f, 0.097650f, -0.003039f, -0.132426f, -0.142981f, 0.088639f, 0.127210f, 0.235844f, 0.031816f, -0.173602f, 0.018319f, -0.017557f, -0.065621f, - 0.055585f, -0.058273f, -0.016023f, 0.004877f, 0.012624f, -0.008910f, 0.011003f, 0.026245f, -0.042156f, -0.031209f, -0.003662f, 0.011418f, 0.022265f, -0.025944f, 0.001023f, 0.024168f, -0.019878f, 0.015970f, -0.011812f, 0.068870f, -0.004047f, -0.007673f, 0.035072f, 0.023265f, 0.030776f, -0.014862f, 0.018461f, -0.004613f, -0.004180f, 0.030270f, 0.016598f, 0.006909f, 0.004998f, 0.039991f, -0.038636f, -0.008428f, 0.000309f, 0.053140f, -0.004336f, -0.009302f, 0.043807f, -0.009891f, -0.024239f, -0.018367f, 0.035551f, -0.007192f, 0.013363f, 0.012609f, 0.002110f, -0.011697f, 0.003102f, 0.017383f, 0.001360f, 0.046402f, 0.017855f, 0.014648f, -0.023478f, -0.000856f, 0.012509f, -0.029622f, 0.006848f, 0.014035f, 0.027944f, 0.002402f, -0.008817f, 0.020389f, -0.001111f, -0.034922f, 0.035833f, 0.014338f, -0.015633f, 0.035842f, -0.030042f, -0.001704f, -0.025740f, -0.014124f, 0.012587f, 0.106515f, 0.009153f, -0.040050f, -0.032201f, 0.004824f, 0.024769f, -0.001954f, 0.022677f, -0.008866f, -0.005321f, -0.030124f, -0.005914f, -0.021208f, 0.033673f, -0.021074f, -0.001040f, -0.013434f, -0.005499f, -0.008020f, - 0.004295f, -0.022304f, 0.004062f, -0.009784f, -0.014770f, 0.004248f, -0.001743f, 0.000971f, -0.003454f, 0.007488f, 0.004481f, -0.018593f, -0.011039f, -0.000209f, -0.011681f, -0.011008f, 0.009900f, -0.003119f, -0.017976f, 0.001132f, -0.009631f, 0.007918f, -0.026915f, 0.013803f, -0.011227f, -0.021080f, 0.007236f, -0.009648f, -0.010070f, 0.002879f, 0.000667f, 0.001372f, -0.003764f, 0.004752f, -0.007631f, 0.009512f, -0.004972f, 0.001158f, 0.016311f, -0.010964f, 0.006028f, -0.002702f, -0.000816f, 0.004499f, -0.011986f, 0.011960f, -0.012675f, 0.011995f, -0.002093f, -0.000115f, -0.007977f, 0.011518f, -0.012437f, 0.001548f, 0.004722f, -0.015934f, 0.016162f, -0.008048f, -0.050443f, -0.084267f, 0.089235f, 0.305231f, 0.059823f, 0.090801f, -0.187623f, -0.263580f, -0.108548f, -0.138615f, 0.107142f, 0.244760f, 0.142470f, 0.093702f, 0.010534f, -0.136859f, -0.119006f, -0.121327f, -0.048088f, 0.066765f, 0.059067f, 0.060711f, 0.056746f, -0.003230f, -0.008076f, -0.015624f, -0.018401f, -0.029868f, -0.002923f, 0.036185f, -0.002437f, -0.023319f, -0.007682f, -0.033064f, -0.016893f, -0.007012f, -0.007007f, 0.058832f, - 0.056959f, 0.031630f, 0.036440f, 0.000221f, -0.042827f, -0.046100f, -0.080815f, -0.056014f, 0.008209f, 0.004936f, 0.017346f, 0.046369f, 0.069215f, 0.039335f, 0.035148f, -0.003447f, -0.038250f, -0.055953f, -0.046117f, -0.041130f, 0.006059f, 0.011869f, 0.025495f, 0.015173f, 0.011827f, 0.000210f, -0.013961f, 0.003114f, 0.001412f, 0.003305f, 0.033940f, -0.006024f, 0.014728f, 0.012367f, -0.026006f, -0.051458f, -0.050365f, -0.048489f, 0.011012f, 0.027496f, 0.011013f, 0.000717f} - }, - { - {-0.008059f, -0.005875f, 0.001286f, -0.005162f, -0.003196f, -0.002335f, -0.000658f, -0.000829f, -0.003333f, -0.009998f, -0.007446f, -0.005293f, -0.002600f, -0.007229f, 0.003015f, -0.001677f, 0.001190f, -0.002989f, -0.001072f, -0.004525f, 0.004732f, 0.000934f, -0.003315f, -0.005961f, 0.000583f, 0.006690f, 0.003686f, -0.006808f, -0.006538f, 0.001222f, 0.000559f, 0.000765f, -0.004552f, 0.000988f, -0.001646f, -0.002945f, -0.000874f, -0.002776f, -0.004192f, -0.001959f, -0.007132f, 0.009224f, 0.002581f, 0.006406f, -0.006208f, -0.010518f, -0.000828f, 0.001353f, -0.001166f, -0.009767f, 0.000570f, -0.002429f, 0.005761f, 0.003895f, 0.004326f, 0.009934f, -0.001717f, -0.000350f, -0.003033f, -0.001500f, 0.003604f, -0.006764f, 0.007948f, 0.009509f, -0.004479f, -0.003122f, -0.007930f, -0.004152f, 0.001607f, -0.002412f, -0.004781f, 0.000525f, -0.005047f, -0.002600f, -0.006397f, -0.005346f, -0.005880f, 0.003920f, 0.011890f, 0.000848f, 0.007993f, -0.001963f, -0.001038f, -0.004412f, 0.008503f, 0.005131f, -0.004835f, -0.006694f, 0.004325f, -0.001854f, -0.009917f, -0.011797f, 0.002834f, 0.000361f, -0.003832f, -0.004179f, - -0.007726f, 0.004744f, -0.009106f, 0.002097f, -0.000836f, 0.001816f, 0.000822f, 0.001689f, -0.004061f, -0.000894f, 0.001689f, 0.002330f, -0.000883f, 0.002903f, 0.002413f, -0.004417f, 0.003125f, -0.002828f, -0.007772f, 0.010729f, -0.002082f, 0.000100f, 0.002700f, -0.001825f, 0.006183f, 0.007378f, -0.001628f, 0.002454f, 0.005945f, -0.000025f, -0.006196f, -0.005342f, 0.001629f, 0.003131f, -0.001833f, 0.001396f, 0.007298f, -0.007057f, -0.005660f, 0.005257f, 0.001229f, -0.003201f, -0.003780f, -0.001067f, 0.001482f, 0.003565f, -0.007167f, 0.002478f, 0.002009f, -0.006946f, -0.005973f, 0.003807f, -0.003126f, -0.009255f, -0.002945f, -0.002853f, 0.011723f, 0.009821f, -0.014554f, -0.006155f, -0.010065f, 0.006637f, -0.004924f, -0.006673f, -0.004671f, -0.005970f, -0.001285f, 0.002351f, 0.010866f, 0.002001f, -0.005914f, 0.009350f, 0.000296f, 0.009639f, -0.009208f, 0.014866f, 0.006786f, 0.016119f, -0.002921f, -0.005315f, -0.001146f, -0.008668f, -0.000790f, -0.000492f, -0.003225f, 0.003130f, 0.000265f, -0.006846f, -0.001720f, 0.000121f, 0.002145f, 0.007089f, 0.001588f, -0.010295f, -0.008710f, -0.003144f, - 0.005870f, 0.000551f, 0.000295f, -0.005131f, 0.008715f, -0.000068f, 0.000659f, -0.003579f, 0.001139f, -0.002089f, 0.004605f, -0.001297f, 0.014553f, 0.000311f, -0.001853f, 0.005691f, -0.003597f, -0.006328f, -0.002624f, 0.005119f, 0.008843f, 0.001665f, 0.005464f, 0.001540f, 0.001023f, -0.004378f, -0.004366f, -0.007141f, -0.000174f, -0.007399f, 0.002080f, 0.006500f, 0.006864f, 0.004965f, -0.002109f, -0.003066f, 0.006316f, 0.010465f, 0.010574f, 0.006118f, -0.000358f, 0.009252f, -0.005194f, -0.007266f, 0.007008f, 0.007998f, 0.009357f, 0.014659f, 0.000976f, -0.008855f, 0.004921f, -0.008441f, -0.000977f, 0.003193f, 0.001695f, 0.016255f, 0.000857f, -0.012619f, -0.001010f, 0.002545f, 0.004984f, -0.000691f, -0.004809f, -0.013944f, -0.003235f, 0.012252f, 0.003696f, 0.008126f, 0.008788f, 0.007909f, 0.001651f, -0.001142f, 0.007721f, -0.010337f, -0.000857f, -0.006974f, 0.018656f, -0.000863f, -0.000041f, 0.008724f, -0.007729f, -0.000954f, 0.002375f, -0.000916f, 0.010801f, -0.001613f, 0.002773f, 0.011118f, -0.002854f, 0.003588f, 0.000155f, -0.000384f, -0.000903f, -0.001296f, -0.004007f, 0.004886f, - 0.005480f, -0.001392f, 0.005400f, 0.002463f, 0.011541f, 0.014487f, -0.001825f, 0.004002f, 0.001229f, -0.007048f, 0.005868f, -0.001563f, -0.007377f, 0.002762f, 0.005518f, 0.002240f, -0.003455f, 0.015720f, 0.015887f, -0.006403f, -0.008713f, -0.008071f, -0.005133f, 0.003778f, -0.016862f, -0.001897f, 0.002606f, -0.008413f, -0.014914f, 0.014484f, -0.002948f, -0.003919f, 0.002582f, 0.006566f, 0.006263f, -0.007713f, -0.002765f, -0.000505f, -0.000602f, 0.003342f, 0.005390f, -0.003039f, 0.006577f, -0.004952f, 0.009969f, -0.001344f, 0.000596f, -0.005166f, 0.005352f, 0.001742f, -0.001298f, -0.005136f, 0.002548f, -0.002977f, -0.004184f, -0.003803f, 0.001041f, 0.003083f, -0.009074f, 0.000666f, -0.017275f, -0.010195f, 0.006411f, -0.002736f, 0.002213f, 0.003788f, 0.011593f, -0.003791f, -0.005679f, -0.000489f, 0.000450f, 0.004750f, 0.004711f, -0.005441f, -0.002318f, 0.012616f, 0.000503f, 0.001886f, 0.001067f, 0.005602f, -0.010620f, 0.000330f, 0.005263f, 0.009835f, 0.001921f, 0.004230f, 0.014767f, -0.003675f, -0.001709f, -0.008077f, -0.000307f, 0.002555f, 0.004656f, -0.009986f, -0.015994f, 0.006927f, - -0.005333f, 0.000439f, -0.008328f, 0.006459f, -0.018473f, -0.014899f, -0.017444f, -0.005699f, -0.003858f, -0.011942f, 0.005939f, 0.016585f, -0.012364f, 0.002630f, 0.019132f, -0.004407f, -0.005528f, -0.008846f, 0.001316f, 0.000003f, 0.008310f, 0.002849f, 0.005884f, 0.004358f, -0.006602f, -0.012280f, -0.006170f, 0.007361f, -0.004502f, -0.007523f, 0.001554f, 0.003100f, 0.002056f, 0.001543f, 0.016474f, -0.007987f, 0.008776f, -0.004432f, 0.004186f, -0.004958f, 0.013582f, -0.010502f, 0.005260f, -0.000933f, -0.008824f, 0.007685f, -0.003608f, -0.002854f, 0.007821f, 0.004342f, -0.001290f, -0.003812f, 0.006999f, 0.003617f, -0.008458f, -0.009513f, 0.005743f, 0.010211f, 0.005121f, 0.000072f, -0.005271f, 0.000347f, 0.005804f, -0.003041f, 0.007130f, -0.002078f, -0.017194f, 0.000318f, -0.008124f, 0.023003f, 0.007080f, -0.013238f, -0.008320f, -0.001853f, 0.000074f, 0.006682f, -0.014137f, -0.015864f, 0.013492f, -0.002396f, -0.014120f, 0.001748f, -0.004179f, 0.014365f, 0.006100f, -0.002913f, 0.001791f, -0.000114f, -0.002847f, -0.001904f, 0.015170f, 0.003666f, 0.000017f, -0.010400f, -0.005856f, -0.002061f, - 0.004710f, 0.007494f, 0.020597f, 0.000986f, -0.000243f, -0.000237f, 0.000483f, -0.009065f, -0.000586f, 0.004282f, -0.012812f, -0.007963f, -0.008701f, -0.000647f, 0.014612f, -0.012505f, 0.001025f, 0.007443f, 0.001917f, -0.005752f, 0.005312f, -0.015769f, 0.011776f, -0.002659f, -0.001328f, 0.007224f, -0.009457f, -0.009366f, -0.016107f, 0.003171f, -0.006294f, 0.013921f, 0.003275f, 0.000322f, 0.001022f, 0.004162f, 0.009201f, -0.004937f, -0.004190f, 0.011219f, -0.004228f, -0.006723f, -0.002240f, 0.011104f, 0.009415f, 0.010164f, 0.003404f, -0.007473f, 0.004255f, 0.008962f, -0.014059f, 0.013696f, -0.012074f, -0.009159f, 0.008761f, -0.030231f, -0.018735f, 0.004526f, 0.010204f, 0.019487f, -0.011578f, 0.010141f, 0.002748f, 0.010722f, 0.000151f, -0.006005f, -0.006197f, 0.006372f, 0.021654f, 0.001101f, -0.001088f, -0.020611f, -0.015944f, -0.000544f, -0.011518f, -0.007861f, 0.001468f, 0.001882f, -0.011820f, -0.004387f, 0.003810f, 0.006773f, 0.004701f, -0.008736f, 0.000738f, 0.008799f, 0.008408f, 0.001012f, -0.006950f, 0.000865f, -0.003955f, 0.001728f, 0.003399f, 0.003777f, -0.005177f, 0.006943f, - 0.018977f, -0.002344f, -0.000598f, 0.003065f, -0.009398f, 0.004348f, 0.015420f, -0.014879f, -0.016309f, -0.009214f, 0.002152f, -0.022443f, 0.001281f, 0.000309f, 0.003805f, -0.000068f, 0.000386f, -0.010722f, -0.004956f, -0.006993f, -0.000252f, 0.014905f, 0.022835f, 0.000582f, 0.002085f, 0.010865f, -0.003948f, -0.001703f, 0.005558f, 0.025248f, 0.003614f, 0.009447f, 0.017859f, 0.003944f, -0.011322f, 0.005878f, 0.016119f, 0.008608f, -0.013091f, -0.001525f, 0.031078f, 0.025710f, 0.006598f, 0.015150f, 0.020846f, 0.004112f, 0.000713f, 0.012143f, -0.004885f, -0.000750f, -0.010810f, 0.008782f, 0.000227f, -0.000414f, 0.005410f, 0.004254f, 0.017450f, -0.014716f, -0.011527f, 0.011623f, 0.003657f, 0.004810f, -0.008728f, 0.000857f, -0.002313f, 0.005517f, 0.001243f, 0.008108f, 0.010059f, -0.009999f, 0.008722f, 0.005320f, -0.009185f, 0.025724f, 0.005921f, 0.004196f, -0.019436f, -0.007673f, -0.000347f, 0.016263f, 0.017495f, -0.002725f, -0.016385f, 0.010505f, -0.014017f, -0.005952f, 0.015047f, -0.001581f, -0.009408f, 0.011997f, 0.018254f, -0.005517f, 0.007308f, -0.008032f, -0.021520f, -0.001271f, - 0.016838f, -0.008356f, -0.005962f, 0.008260f, -0.009024f, -0.018658f, 0.006558f, 0.009711f, 0.023549f, 0.009049f, -0.012841f, 0.004462f, -0.015140f, -0.024080f, 0.024151f, 0.006984f, 0.012879f, 0.032046f, 0.019294f, -0.012737f, -0.004444f, 0.000326f, 0.004760f, 0.005279f, -0.002660f, -0.011322f, 0.002301f, -0.007449f, 0.012367f, 0.001365f, 0.004399f, -0.003262f, -0.002523f, -0.011730f, -0.007353f, 0.027930f, 0.008343f, -0.015295f, 0.007240f, -0.014880f, -0.011799f, -0.023874f, 0.010418f, 0.001622f, -0.000055f, 0.007176f, -0.001115f, -0.010067f, 0.018482f, 0.012132f, -0.004540f, -0.017646f, 0.018702f, -0.011634f, 0.004705f, 0.000986f, 0.005946f, 0.005295f, 0.011840f, 0.015556f, -0.003498f, 0.009387f, 0.021920f, 0.004560f, -0.007118f, -0.004541f, -0.004058f, 0.005306f, 0.014667f, -0.002109f, 0.005938f, 0.003204f, -0.013556f, 0.002658f, -0.003308f, 0.008848f, -0.020279f, 0.002025f, -0.033799f, -0.018071f, -0.018732f, -0.002141f, -0.018429f, 0.015401f, -0.004300f, -0.012464f, -0.003664f, 0.001515f, -0.011861f, -0.001910f, 0.000535f, 0.005157f, -0.005843f, -0.011644f, -0.020813f, -0.027267f, - -0.012061f, -0.018335f, 0.046579f, -0.022874f, 0.010982f, -0.021650f, -0.005516f, 0.001648f, -0.002899f, -0.032022f, -0.000165f, -0.015543f, 0.001586f, 0.036390f, -0.011398f, 0.014891f, 0.020796f, 0.006706f, 0.008682f, 0.021590f, 0.006999f, -0.009353f, 0.006675f, 0.008028f, 0.009714f, 0.003272f, -0.004338f, 0.025180f, 0.001248f, -0.002826f, -0.004113f, 0.006268f, -0.002018f, -0.009789f, 0.008929f, -0.004122f, 0.006414f, -0.025894f, 0.001134f, -0.005660f, 0.022754f, -0.009783f, 0.007332f, 0.033212f, -0.003005f, -0.000132f, -0.008396f, -0.014927f, -0.000944f, -0.003176f, -0.014588f, 0.017208f, -0.004143f, 0.012234f, 0.001085f, 0.011494f, -0.007566f, -0.002247f, 0.026769f, 0.012394f, -0.021660f, -0.011999f, 0.005151f, 0.005593f, 0.002531f, 0.004832f, -0.006990f, 0.006704f, 0.009041f, 0.021567f, -0.030136f, 0.000640f, -0.013745f, 0.004738f, -0.002467f, -0.004580f, -0.006306f, -0.016061f, -0.012681f, -0.015542f, 0.016885f, -0.031655f, -0.008096f, -0.020117f, 0.010632f, 0.031194f, -0.016358f, 0.000193f, 0.001979f, -0.006987f, 0.013423f, -0.010992f, 0.006077f, -0.003872f, -0.012017f, 0.027863f, - 0.002593f, -0.009927f, 0.001606f, -0.004773f, -0.011394f, 0.009378f, -0.008417f, 0.008795f, -0.016778f, -0.008911f, 0.013482f, 0.008452f, -0.028831f, -0.005875f, -0.024321f, 0.007228f, -0.002908f, -0.025100f, 0.031545f, -0.008785f, 0.000872f, -0.023183f, -0.023569f, 0.001170f, -0.021063f, -0.003202f, -0.017947f, -0.016878f, 0.021342f, 0.002016f, -0.023726f, 0.008219f, -0.021007f, 0.020199f, 0.009104f, -0.009832f, 0.002618f, 0.006568f, 0.023199f, -0.016349f, -0.021317f, 0.023779f, -0.014394f, -0.009099f, 0.014522f, 0.018199f, -0.030759f, -0.015717f, 0.021152f, 0.014656f, 0.009749f, -0.000825f, 0.004803f, -0.022544f, 0.016117f, -0.024667f, -0.039133f, -0.032362f, 0.014763f, -0.038620f, -0.001483f, 0.028431f, -0.002213f, 0.001577f, 0.021081f, -0.014287f, -0.011422f, 0.045433f, -0.017905f, 0.010213f, 0.017768f, -0.003800f, -0.041404f, -0.004034f, 0.004636f, -0.011056f, -0.005553f, -0.010288f, 0.039077f, -0.000232f, 0.000620f, -0.002531f, -0.027847f, 0.004497f, -0.015991f, -0.008744f, 0.001852f, 0.004030f, 0.008381f, 0.021910f, 0.005070f, -0.006497f, 0.044447f, 0.003986f, -0.010989f, -0.041321f, - -0.005963f, 0.029081f, -0.006536f, -0.019367f, -0.025102f, -0.022758f, -0.018944f, -0.012585f, 0.031414f, 0.011518f, 0.001591f, 0.016779f, 0.026124f, 0.013923f, -0.006075f, -0.005447f, 0.026906f, -0.006222f, -0.008809f, 0.007069f, 0.020358f, 0.002089f, -0.022025f, 0.004015f, -0.002832f, -0.033009f, -0.003185f, 0.024492f, -0.013505f, -0.015831f, -0.004580f, 0.033064f, -0.028371f, -0.006974f, -0.015402f, 0.031892f, 0.003718f, -0.029306f, -0.000582f, 0.008263f, -0.000537f, -0.013547f, 0.013063f, -0.010100f, 0.026262f, -0.020119f, 0.018239f, 0.038311f, -0.009861f, -0.010582f, -0.008493f, -0.008307f, 0.035116f, -0.025804f, -0.027434f, -0.021656f, 0.008498f, -0.011383f, -0.017386f, -0.008497f, 0.013104f, -0.017488f, 0.010325f, 0.002141f, 0.014287f, 0.019979f, 0.003251f, -0.002651f, -0.003056f, 0.019740f, -0.004281f, 0.006961f, -0.023428f, -0.000228f, -0.007782f, 0.019318f, -0.024909f, 0.021217f, -0.008008f, -0.013231f, 0.022247f, 0.037036f, -0.019827f, 0.010628f, -0.003627f, 0.007633f, -0.054500f, -0.043824f, -0.025691f, 0.004036f, -0.015921f, 0.007524f, 0.002829f, -0.020373f, -0.015253f, 0.002052f, - 0.045250f, 0.010710f, -0.026538f, -0.040896f, -0.020742f, -0.014887f, 0.028056f, -0.018443f, -0.025962f, 0.006785f, 0.006626f, -0.024445f, -0.001098f, 0.000013f, -0.012462f, 0.006869f, 0.055249f, 0.036664f, -0.009943f, 0.003933f, 0.035543f, -0.013973f, 0.000761f, 0.015639f, 0.038437f, 0.022992f, -0.007337f, -0.008579f, -0.014054f, 0.003562f, -0.008044f, 0.000616f, 0.000323f, 0.040980f, 0.067147f, -0.004061f, 0.046067f, 0.029421f, 0.005284f, 0.007146f, -0.034165f, -0.033343f, -0.004602f, 0.008456f, -0.003258f, 0.007742f, -0.013355f, -0.025220f, -0.042740f, -0.004109f, -0.027864f, -0.023341f, -0.016062f, -0.024219f, -0.017940f, -0.001674f, 0.037778f, -0.002067f, -0.030539f, -0.003405f, 0.007293f, 0.027799f, -0.010165f, -0.008442f, -0.018731f, 0.011842f, -0.053992f, -0.048841f, -0.024010f, -0.025173f, -0.026555f, -0.017027f, 0.015678f, -0.023136f, -0.030770f, -0.026843f, -0.045425f, 0.020602f, 0.011063f, -0.041660f, 0.019159f, 0.037273f, 0.077045f, 0.040312f, -0.001223f, 0.011354f, -0.045283f, -0.021343f, 0.024337f, 0.017619f, -0.009874f, -0.059538f, -0.003455f, 0.090311f, -0.004796f, 0.001187f, - 0.025002f, -0.035960f, 0.020819f, 0.063278f, 0.062342f, -0.063418f, -0.056769f, -0.002385f, -0.061782f, -0.026475f, 0.001611f, 0.004867f, 0.024838f, 0.032376f, 0.032405f, 0.051854f, 0.014427f, 0.018815f, 0.023211f, -0.011868f, -0.002398f, 0.003208f, 0.008625f, 0.013306f, -0.027792f, 0.062595f, 0.029421f, 0.027671f, -0.004384f, 0.063512f, 0.009509f, 0.037074f, 0.017820f, 0.009509f, -0.014464f, -0.013229f, 0.035011f, 0.009903f, 0.016841f, -0.038875f, -0.018048f, -0.033034f, -0.016401f, -0.024953f, 0.000860f, -0.046533f, -0.046024f, -0.006100f, -0.017200f, -0.091949f, -0.065070f, -0.063108f, 0.017838f, 0.061106f, 0.084383f, -0.049630f, 0.058408f, 0.086181f, 0.016070f, 0.004172f, -0.004902f, 0.058363f, 0.005587f, 0.052649f, 0.025035f, 0.023282f, -0.035831f, -0.125321f, -0.095382f, -0.022925f, 0.000818f, -0.009060f, 0.047172f, -0.012264f, -0.078827f, -0.009574f, 0.131240f, 0.021092f, -0.021982f, 0.030715f, -0.008538f, 0.019033f, -0.008255f, -0.016690f, -0.040473f, -0.018751f, -0.002661f, -0.009948f, -0.018438f, 0.027613f, -0.025722f, -0.032604f, -0.000240f, 0.001680f, 0.028771f, 0.009025f, - 0.009114f, 0.008324f, -0.009417f, -0.003052f, 0.041913f, -0.023996f, -0.046616f, -0.013099f, 0.005640f, -0.019807f, 0.034936f, -0.021225f, -0.010047f, 0.024537f, 0.009150f, 0.017493f, -0.048595f, -0.059979f, 0.019644f, -0.014931f, -0.018105f, -0.028241f, -0.028736f, -0.066059f, 0.000905f, -0.009985f, 0.021201f, -0.044228f, -0.081816f, 0.056697f, 0.017321f, 0.052773f, 0.006648f, -0.024131f, -0.017438f, 0.009369f, -0.031202f, 0.042003f, 0.009088f, 0.051237f, 0.039444f, 0.078729f, -0.009714f, -0.089728f, -0.065794f, -0.044567f, 0.044518f, 0.038387f, -0.040615f, 0.027346f, 0.066652f, -0.054229f, -0.069192f, 0.071668f, 0.094546f, 0.017762f, 0.003143f, 0.022322f, -0.015840f, 0.042790f, 0.022107f, 0.044638f, -0.010129f, -0.045149f, 0.101118f, 0.001503f, -0.039830f, 0.005613f, 0.067908f, 0.032549f, 0.012211f, -0.043088f, 0.003369f, -0.022742f, -0.018564f, 0.007576f, -0.034070f, 0.003422f, 0.007346f, 0.039984f, -0.057352f, -0.008949f, -0.008165f, 0.033765f, -0.014118f, -0.020190f, -0.021131f, 0.000139f, 0.019718f, -0.043126f, 0.001691f, 0.011736f, -0.090407f, 0.012476f, -0.025570f, -0.062535f, - 0.039763f, -0.046252f, -0.082691f, 0.107302f, -0.002241f, 0.006133f, -0.009833f, -0.030011f, 0.063433f, -0.046064f, -0.005558f, 0.009287f, -0.030727f, -0.002880f, 0.080775f, 0.041737f, -0.073092f, -0.078802f, 0.076323f, -0.037604f, 0.044422f, 0.072973f, -0.066497f, -0.115399f, -0.078724f, 0.130536f, -0.006763f, -0.105047f, 0.096733f, -0.070919f, -0.127174f, -0.004464f, 0.118176f, -0.005997f, -0.041959f, 0.066174f, -0.010263f, 0.017219f, 0.048660f, 0.027998f, 0.037791f, 0.078502f, 0.039545f, -0.024459f, 0.016852f, 0.016162f, 0.030758f, -0.034178f, 0.083280f, 0.070835f, 0.014245f, 0.021695f, -0.014568f, -0.004396f, -0.077328f, 0.032908f, -0.039006f, 0.024489f, 0.000559f, -0.034290f, 0.047881f, -0.022011f, -0.028889f, 0.013061f, -0.042377f, 0.026176f, 0.005346f, -0.013463f, 0.016893f, 0.014523f, 0.032933f, 0.024711f, 0.032272f, 0.079332f, -0.003949f, 0.004283f, 0.031020f, 0.051740f, -0.001040f, 0.010039f, 0.004881f, 0.039230f, 0.057455f, -0.022355f, 0.017676f, -0.007637f, -0.003366f, -0.101559f, 0.013174f, 0.035484f, -0.017221f, -0.029162f, 0.027435f, -0.045839f, -0.053055f, -0.000609f, - 0.040950f, 0.064934f, -0.083451f, 0.028601f, 0.004062f, -0.009163f, 0.010415f, 0.028696f, 0.088364f, -0.006272f, -0.040961f, 0.009476f, 0.082511f, 0.043709f, -0.082588f, -0.064483f, -0.001023f, -0.099438f, -0.033986f, -0.036781f, 0.076729f, -0.002182f, -0.028148f, 0.035304f, -0.017864f, 0.019645f, 0.005215f, -0.037786f, 0.045547f, -0.102251f, -0.009493f, 0.006488f, -0.025379f, 0.019213f, 0.004825f, -0.019615f, -0.003389f, 0.003457f, 0.026082f, 0.002067f, -0.029769f, -0.098835f, -0.072230f, -0.054573f, -0.027188f, 0.062390f, -0.012197f, 0.003173f, -0.099264f, 0.008418f, -0.006638f, -0.012415f, 0.003441f, -0.095065f, 0.051852f, -0.045402f, 0.024025f, -0.017648f, 0.065864f, -0.034146f, -0.063170f, -0.028704f, -0.000226f, 0.049589f, 0.087016f, 0.093350f, -0.112045f, -0.080620f, -0.057020f, 0.041611f, 0.092723f, 0.114984f, -0.019072f, -0.024384f, -0.097909f, -0.032282f, 0.088103f, 0.058375f, -0.000428f, 0.005734f, -0.001330f, -0.076299f, 0.056557f, -0.008331f, 0.054868f, 0.140614f, -0.143753f, 0.190334f, 0.050899f, -0.075074f, -0.082661f, 0.068289f, -0.040802f, 0.041790f, 0.022746f, 0.026186f, - 0.016092f, -0.053592f, 0.058485f, -0.009135f, -0.020265f, -0.019544f, -0.022522f, 0.017287f, -0.011597f, 0.024813f, 0.015533f, -0.003786f, -0.005579f, -0.044877f, 0.026315f, 0.010077f, -0.010898f, 0.009460f, 0.023948f, -0.007093f, 0.013823f, -0.022972f, 0.027198f, -0.010318f, 0.003964f, 0.010477f, 0.011888f, -0.012216f, 0.041659f, -0.001925f, -0.038065f, -0.002862f, 0.018392f, 0.008520f, -0.028976f, 0.014127f, 0.034991f, -0.006677f, -0.016133f, -0.016492f, -0.001677f, 0.009350f, -0.003588f, 0.040341f, -0.026608f, -0.010427f, -0.009085f, -0.020257f, -0.001159f, -0.006068f, 0.015363f, 0.010942f, -0.016184f, -0.002177f, 0.016029f, -0.015850f, -0.007964f, -0.004199f, 0.025350f, -0.014516f, 0.010953f, 0.018096f, -0.038698f, -0.013744f, 0.012078f, -0.037625f, 0.060247f, 0.020885f, 0.016866f, 0.036962f, 0.096638f, 0.011813f, -0.031785f, -0.025923f, -0.018180f, -0.002496f, -0.002323f, 0.001454f, -0.001830f, -0.004345f, -0.053445f, 0.000559f, -0.009976f, -0.013135f, 0.007734f, -0.021896f, -0.008794f, 0.009299f, -0.013957f, 0.003663f, 0.017757f, -0.023309f, 0.015292f, -0.008961f, -0.011103f, -0.002452f, - -0.011077f, 0.005139f, -0.010180f, -0.006471f, -0.012149f, -0.003060f, 0.000900f, -0.000776f, -0.006806f, -0.008700f, 0.003664f, 0.003884f, -0.008287f, 0.012412f, -0.014570f, -0.001821f, -0.005025f, -0.002423f, -0.001643f, -0.012948f, 0.018575f, 0.010166f, -0.015830f, 0.020612f, -0.000656f, 0.004108f, -0.007948f, 0.019778f, -0.018529f, 0.001157f, 0.003396f, 0.004972f, -0.001584f, -0.005560f, 0.016857f, -0.010315f, 0.004155f, 0.000459f, -0.001034f, 0.004473f, -0.004392f, -0.001231f, 0.010689f, -0.004520f, -0.001367f, 0.009277f, -0.001023f, -0.004236f, -0.005869f, 0.004923f, 0.007758f, -0.045827f, -0.077343f, 0.086222f, 0.285392f, 0.030188f, 0.064712f, -0.154827f, -0.239430f, -0.058877f, -0.125595f, 0.098007f, 0.198594f, 0.106239f, 0.065446f, -0.013945f, -0.078607f, -0.075215f, -0.058469f, -0.052254f, 0.017857f, 0.035019f, 0.018528f, 0.037609f, 0.003669f, 0.003863f, 0.013278f, 0.005072f, 0.015217f, 0.014008f, -0.011012f, -0.035594f, -0.028253f, -0.031278f, -0.044707f, -0.022064f, 0.023172f, 0.032454f, 0.057337f, 0.083715f, 0.028672f, 0.012826f, -0.028920f, -0.064874f, -0.064999f, -0.043596f, - -0.032276f, 0.007098f, 0.022971f, 0.035933f, 0.035973f, 0.032373f, 0.019737f, 0.003199f, -0.004149f, -0.020189f, -0.016146f, -0.008557f, -0.012239f, -0.003450f, -0.013686f, -0.002819f, -0.015982f, -0.013147f, 0.002951f, -0.000637f, 0.015883f, 0.030215f, 0.015271f, 0.044657f, 0.036812f, -0.018836f, -0.042019f, -0.038992f, -0.061679f, -0.016379f, -0.018355f, -0.002061f, 0.024334f, 0.014219f, -0.002443f}, - {-0.011410f, 0.002836f, -0.005198f, -0.013234f, -0.005139f, 0.001220f, -0.002470f, 0.004244f, -0.006121f, -0.002410f, -0.004682f, -0.002198f, 0.003061f, -0.000499f, -0.000176f, -0.002573f, 0.004262f, -0.011088f, 0.001088f, -0.005728f, 0.004086f, 0.002807f, -0.006690f, 0.001250f, -0.000797f, 0.001739f, -0.002481f, 0.001969f, -0.007326f, -0.004640f, 0.009461f, -0.002665f, -0.003522f, -0.004215f, -0.001219f, -0.002663f, -0.000954f, -0.006695f, -0.000766f, 0.008605f, -0.001840f, 0.001609f, -0.000177f, -0.002548f, 0.012004f, -0.002376f, 0.006888f, 0.008395f, -0.000545f, -0.003055f, -0.001989f, -0.007188f, -0.006751f, -0.007445f, -0.008745f, -0.004623f, -0.006066f, 0.001659f, -0.005844f, -0.001691f, -0.003423f, -0.000503f, 0.001529f, -0.006961f, 0.007090f, 0.001512f, 0.003093f, 0.006223f, -0.005627f, 0.003355f, 0.006514f, -0.006482f, 0.001371f, 0.005155f, 0.002321f, 0.002730f, -0.011219f, 0.007371f, 0.012148f, 0.003115f, 0.010731f, 0.000122f, -0.010956f, -0.007658f, -0.007966f, -0.001316f, -0.005455f, 0.012841f, -0.009605f, -0.002528f, -0.004335f, -0.001621f, -0.007696f, 0.007366f, -0.004520f, -0.003659f, - 0.006309f, 0.010300f, 0.011798f, 0.001720f, -0.000798f, 0.002350f, 0.000666f, 0.001560f, -0.005276f, -0.005829f, 0.002842f, -0.005300f, -0.005158f, -0.007082f, -0.007285f, 0.002113f, -0.004812f, 0.006355f, -0.008047f, -0.001234f, 0.003606f, 0.003252f, 0.003030f, -0.012691f, -0.002214f, -0.007115f, -0.001173f, -0.003088f, -0.007613f, -0.000336f, 0.009167f, 0.002589f, 0.004470f, 0.003996f, 0.004970f, 0.000411f, 0.006224f, 0.003662f, 0.006941f, -0.004165f, 0.004640f, -0.002544f, 0.003211f, 0.000067f, -0.006361f, 0.007134f, 0.008452f, -0.004886f, -0.005657f, 0.002082f, 0.007752f, 0.001383f, 0.002059f, -0.003145f, -0.000527f, 0.003531f, 0.002658f, -0.000297f, -0.018833f, -0.005020f, -0.008461f, 0.006196f, -0.017649f, 0.003826f, -0.007744f, -0.004178f, 0.002576f, 0.000296f, 0.002046f, 0.002594f, 0.002064f, 0.007632f, -0.003347f, 0.000751f, -0.000705f, -0.009404f, 0.006967f, 0.011465f, -0.009296f, -0.008850f, 0.006766f, 0.001669f, 0.008337f, 0.002566f, 0.011174f, -0.001589f, 0.003826f, -0.005920f, -0.001695f, 0.011257f, 0.001000f, -0.007424f, -0.008999f, -0.009877f, 0.000520f, 0.008092f, - 0.004242f, -0.000101f, 0.009377f, 0.007336f, 0.000409f, -0.007623f, 0.011971f, 0.002976f, 0.009266f, 0.009239f, -0.001489f, 0.005868f, 0.007136f, -0.000898f, 0.004282f, 0.004742f, -0.004451f, 0.000899f, -0.001264f, 0.004501f, -0.010237f, -0.006719f, 0.003541f, -0.006501f, -0.002296f, 0.008866f, -0.003416f, 0.004843f, -0.001889f, -0.014074f, 0.002572f, -0.000133f, 0.007572f, -0.011603f, -0.006003f, 0.005161f, 0.001495f, 0.012011f, 0.012422f, 0.005653f, 0.009162f, 0.007387f, 0.012452f, 0.014466f, -0.005433f, -0.001385f, 0.004719f, -0.014148f, -0.000575f, -0.004552f, -0.002820f, 0.006722f, -0.008414f, -0.000796f, 0.010506f, 0.002142f, 0.006712f, -0.003164f, -0.002521f, -0.003365f, -0.013516f, -0.001997f, 0.000858f, 0.007331f, -0.002215f, 0.012469f, 0.004780f, -0.001882f, 0.004856f, 0.002781f, 0.006260f, -0.004298f, -0.000977f, 0.014560f, -0.001933f, 0.013781f, 0.006327f, -0.005643f, 0.001412f, 0.012192f, 0.006195f, -0.007537f, 0.010854f, -0.002652f, 0.000751f, 0.000902f, -0.002162f, 0.002436f, 0.001242f, -0.009433f, 0.006304f, 0.004967f, -0.000785f, 0.000773f, -0.002114f, -0.008416f, - 0.000101f, 0.005452f, -0.000903f, -0.000536f, -0.005828f, -0.012474f, -0.004308f, 0.005454f, 0.011145f, -0.015935f, -0.008586f, 0.003874f, -0.006886f, 0.005162f, 0.000187f, 0.001065f, -0.009115f, 0.017633f, 0.018578f, -0.003646f, -0.007894f, -0.008459f, 0.017814f, -0.015437f, 0.000353f, -0.002449f, -0.007306f, -0.009743f, 0.003428f, -0.002617f, -0.013449f, -0.016203f, 0.000558f, -0.001142f, -0.008567f, 0.003162f, 0.004460f, -0.005908f, -0.009074f, -0.008341f, 0.011849f, -0.012765f, -0.001594f, -0.014933f, 0.000137f, 0.008424f, 0.002814f, 0.001496f, -0.008444f, -0.008035f, 0.007343f, -0.005632f, -0.008617f, 0.001116f, -0.003139f, 0.005304f, 0.000105f, 0.002158f, -0.008570f, -0.003152f, -0.002403f, 0.008242f, 0.005672f, 0.005718f, -0.016946f, 0.002661f, 0.004784f, 0.003832f, 0.004850f, -0.004914f, -0.003015f, 0.000509f, 0.003540f, 0.006585f, -0.001046f, 0.004262f, -0.004772f, 0.012886f, -0.023618f, 0.008067f, 0.000883f, -0.013030f, -0.000297f, 0.013516f, -0.003937f, -0.007177f, -0.012393f, -0.005114f, 0.001441f, -0.004648f, 0.000552f, 0.004121f, 0.008046f, -0.008393f, -0.026261f, 0.004737f, - -0.011933f, 0.002568f, 0.002277f, -0.001586f, 0.018764f, 0.000974f, -0.011872f, 0.015905f, 0.007779f, 0.005425f, -0.002309f, 0.003253f, -0.004766f, 0.012461f, -0.001978f, 0.001372f, 0.018957f, 0.018349f, 0.007986f, 0.008375f, 0.008223f, 0.009109f, 0.006240f, -0.018236f, -0.005549f, -0.000306f, -0.004642f, -0.015531f, -0.001558f, -0.003724f, -0.003932f, -0.008369f, 0.000007f, -0.002496f, 0.013496f, -0.004330f, 0.023540f, -0.000199f, 0.002176f, -0.004385f, -0.003157f, 0.000117f, -0.000431f, -0.001931f, -0.003821f, -0.002799f, -0.011157f, 0.002722f, 0.002185f, -0.001431f, -0.005575f, 0.007925f, 0.006294f, 0.006861f, -0.002013f, -0.005075f, 0.000603f, 0.005974f, 0.007062f, -0.005318f, -0.014348f, -0.007685f, 0.002303f, 0.012419f, -0.000915f, 0.010162f, -0.007124f, -0.011749f, 0.009979f, -0.004059f, -0.008071f, 0.005754f, 0.008171f, -0.010351f, -0.006742f, 0.009833f, -0.011632f, -0.012388f, 0.005856f, -0.003450f, -0.001235f, -0.006447f, -0.003956f, 0.006555f, 0.008931f, 0.004884f, -0.002267f, 0.001515f, -0.001253f, -0.001971f, -0.008841f, 0.003043f, -0.023543f, -0.006658f, -0.007632f, 0.006572f, - 0.007817f, 0.000792f, 0.003770f, -0.014430f, 0.003751f, 0.002360f, 0.003720f, -0.013002f, 0.024527f, -0.001002f, 0.004341f, 0.003367f, -0.011992f, 0.001964f, -0.017091f, 0.010901f, -0.003897f, -0.013939f, 0.002496f, 0.001195f, -0.007413f, 0.000889f, 0.001150f, 0.011231f, 0.019568f, 0.008785f, -0.004492f, 0.006612f, 0.007728f, -0.018448f, -0.007355f, -0.008359f, 0.004613f, 0.004433f, -0.003703f, 0.003142f, 0.005809f, 0.004347f, 0.007611f, 0.015842f, -0.000445f, -0.005507f, -0.002500f, -0.000313f, 0.011232f, -0.008374f, -0.001109f, 0.006199f, 0.015167f, 0.000796f, -0.012596f, -0.009647f, -0.002952f, -0.011247f, -0.004245f, -0.024214f, -0.006637f, -0.008945f, 0.010367f, 0.000394f, -0.004976f, -0.031066f, -0.004077f, -0.004096f, 0.012948f, 0.030908f, -0.008807f, 0.020816f, 0.003646f, -0.018087f, -0.018513f, 0.003396f, 0.004852f, -0.010407f, 0.011809f, -0.008161f, 0.009560f, -0.011355f, 0.005783f, 0.004267f, -0.010833f, -0.008978f, -0.006873f, 0.003992f, 0.012279f, -0.015359f, 0.000823f, -0.016135f, -0.000670f, -0.005856f, 0.004299f, 0.012535f, 0.001554f, -0.004715f, -0.004319f, 0.013610f, - 0.000277f, 0.020503f, 0.006447f, -0.006866f, -0.006876f, -0.005074f, 0.003213f, 0.013240f, 0.000119f, 0.021515f, -0.036482f, -0.026322f, -0.021598f, -0.004147f, -0.018347f, 0.002245f, -0.006626f, 0.007795f, 0.017201f, 0.004232f, 0.007401f, 0.012089f, 0.018214f, 0.010614f, 0.003215f, -0.010544f, -0.030004f, -0.030243f, 0.017804f, 0.003424f, 0.022480f, -0.012852f, -0.010640f, 0.013257f, -0.021957f, 0.006444f, 0.015572f, 0.005431f, -0.010695f, -0.001276f, 0.028786f, 0.022639f, -0.001235f, -0.021361f, -0.033475f, -0.004893f, -0.011141f, 0.011343f, -0.009375f, -0.011126f, -0.038040f, -0.017699f, -0.033976f, 0.011907f, -0.000209f, -0.009490f, 0.010233f, -0.002208f, 0.001141f, 0.001539f, -0.010280f, -0.000004f, -0.011949f, -0.003284f, 0.008743f, 0.004818f, -0.012213f, 0.003724f, 0.014320f, 0.020806f, -0.002389f, -0.004070f, -0.006350f, 0.000217f, 0.012232f, 0.015053f, -0.001409f, 0.001340f, -0.002574f, -0.003832f, 0.020049f, 0.012890f, 0.001441f, 0.013319f, 0.005037f, -0.018702f, 0.004188f, -0.002861f, 0.023651f, 0.007813f, 0.003703f, 0.009889f, 0.015606f, 0.002939f, -0.012232f, -0.023450f, - -0.004393f, 0.003470f, 0.012673f, 0.004897f, 0.001406f, 0.003423f, 0.018273f, 0.002603f, 0.006240f, 0.006796f, 0.005098f, -0.012792f, -0.012745f, -0.012686f, -0.013002f, -0.013220f, 0.018296f, 0.048887f, 0.010617f, -0.015004f, 0.008623f, -0.008731f, -0.029061f, -0.005835f, -0.028528f, -0.015548f, 0.014543f, 0.019588f, 0.007401f, 0.004035f, 0.001472f, 0.003620f, 0.018372f, -0.013198f, 0.026059f, -0.017006f, -0.017538f, 0.020962f, 0.009058f, -0.033876f, 0.014530f, 0.008619f, 0.010435f, 0.022286f, 0.010687f, 0.016558f, -0.001473f, 0.008953f, -0.005670f, 0.014105f, 0.003328f, 0.002963f, 0.009038f, -0.019168f, -0.010757f, -0.005956f, 0.011758f, 0.005199f, 0.003889f, 0.009583f, 0.002305f, 0.003286f, -0.017806f, -0.000015f, 0.018078f, -0.003570f, 0.001679f, 0.002108f, 0.001751f, 0.022041f, 0.007908f, 0.029708f, 0.006196f, -0.004658f, 0.027771f, -0.025004f, -0.004031f, -0.004387f, -0.010701f, -0.002822f, 0.005023f, 0.027629f, 0.001680f, -0.006805f, -0.012128f, 0.004896f, -0.012807f, -0.006121f, -0.008827f, -0.016995f, -0.004074f, 0.002094f, 0.022161f, -0.005419f, -0.018631f, -0.026030f, - -0.010836f, -0.025609f, 0.018102f, -0.021690f, -0.017801f, -0.012330f, 0.011056f, 0.031597f, -0.032015f, -0.009906f, -0.035948f, 0.011089f, 0.003818f, 0.004374f, -0.011080f, 0.003833f, 0.038231f, -0.019442f, -0.004513f, 0.016006f, 0.009096f, 0.008921f, 0.012750f, 0.010356f, -0.014002f, -0.020674f, -0.005166f, -0.010917f, -0.017578f, -0.018966f, -0.000781f, -0.003491f, 0.003850f, 0.027198f, 0.015311f, -0.013327f, -0.009022f, -0.000351f, -0.008692f, 0.007665f, 0.048199f, -0.015422f, 0.033245f, 0.012163f, 0.004565f, -0.000846f, -0.006836f, 0.007282f, -0.020198f, 0.010558f, 0.025487f, 0.002699f, 0.002916f, 0.023088f, 0.012506f, 0.010013f, -0.019572f, 0.016934f, -0.012343f, -0.014206f, -0.045256f, -0.011677f, 0.026573f, -0.013895f, 0.005438f, -0.028264f, 0.019863f, -0.008843f, -0.014473f, 0.022302f, -0.033405f, -0.018899f, 0.031096f, -0.019803f, -0.028913f, 0.002868f, -0.019362f, -0.015057f, -0.001647f, 0.022052f, -0.010270f, 0.039033f, 0.037050f, 0.006820f, 0.012101f, -0.021718f, 0.002985f, -0.017672f, 0.027896f, -0.005943f, 0.008462f, -0.013598f, -0.008171f, 0.004240f, 0.004062f, -0.013097f, - 0.021464f, -0.006446f, 0.004829f, 0.007394f, -0.013480f, 0.004740f, -0.017292f, -0.000433f, 0.010410f, 0.011505f, 0.000659f, 0.015365f, 0.020458f, -0.002055f, -0.037185f, -0.006894f, -0.010703f, 0.026327f, -0.022269f, -0.028813f, -0.019662f, -0.014083f, 0.004413f, -0.016616f, -0.012027f, -0.008689f, -0.001740f, 0.004296f, -0.054480f, 0.034123f, 0.027803f, 0.038982f, -0.011864f, 0.005669f, 0.027408f, -0.026124f, -0.022623f, 0.003937f, 0.018405f, 0.010682f, -0.001812f, 0.004625f, -0.012566f, -0.017310f, -0.019599f, -0.006919f, 0.075161f, 0.005253f, -0.038347f, -0.007788f, -0.019402f, 0.013713f, 0.014751f, -0.024829f, -0.011374f, -0.020141f, -0.041213f, 0.004154f, -0.034500f, 0.016863f, 0.004820f, -0.026234f, 0.014770f, 0.018704f, 0.024090f, 0.008215f, 0.009246f, -0.027100f, -0.001013f, -0.004428f, 0.025913f, 0.013506f, 0.000812f, 0.025923f, 0.027112f, -0.001918f, -0.013380f, 0.004579f, 0.033603f, -0.020500f, -0.017589f, 0.018999f, 0.009415f, -0.020741f, -0.005022f, -0.018996f, 0.038671f, -0.031203f, 0.009217f, 0.022443f, -0.012340f, 0.020864f, 0.006970f, -0.007382f, -0.009810f, -0.008008f, - -0.015469f, 0.023887f, 0.029510f, 0.008170f, -0.021967f, 0.004785f, -0.024232f, -0.006832f, 0.016633f, -0.000337f, -0.011643f, -0.006148f, 0.004842f, -0.029836f, 0.001803f, -0.000229f, -0.018038f, 0.029099f, -0.024242f, 0.001962f, -0.004651f, -0.014754f, 0.021158f, 0.002715f, 0.013007f, -0.004821f, -0.000163f, 0.004079f, -0.009865f, 0.015097f, -0.008460f, 0.004737f, -0.007578f, 0.037755f, 0.016989f, 0.037780f, -0.001041f, -0.024651f, -0.014000f, 0.018233f, 0.023376f, 0.029933f, -0.001466f, -0.004259f, 0.036398f, 0.019141f, 0.040702f, 0.007452f, 0.001113f, -0.018663f, -0.011157f, -0.010215f, 0.008910f, 0.008360f, 0.020721f, -0.024713f, -0.000883f, -0.013895f, 0.011606f, -0.021196f, 0.006047f, 0.027718f, -0.006694f, 0.001192f, -0.016309f, 0.005586f, -0.016446f, -0.044270f, 0.003370f, -0.005216f, 0.000181f, -0.018776f, -0.007627f, 0.019857f, 0.031714f, -0.001825f, -0.015892f, 0.022057f, 0.006237f, 0.006676f, 0.020617f, 0.010052f, -0.016297f, -0.004475f, 0.011919f, -0.000522f, 0.010456f, -0.015318f, -0.018866f, 0.006736f, -0.018099f, -0.025636f, -0.016638f, -0.029472f, -0.011191f, 0.011698f, - -0.028761f, -0.002286f, -0.032620f, -0.011116f, -0.005289f, 0.011841f, -0.038663f, 0.015162f, -0.003519f, -0.019452f, 0.018064f, -0.009092f, -0.001108f, 0.042491f, 0.040320f, 0.000126f, 0.059660f, 0.068336f, 0.003718f, 0.021945f, 0.021135f, -0.002775f, -0.048929f, -0.001144f, -0.001695f, -0.018435f, 0.014192f, 0.013123f, -0.026384f, 0.014901f, 0.019157f, 0.003474f, -0.006653f, 0.010616f, -0.006315f, 0.035299f, -0.005408f, -0.015738f, 0.000840f, 0.008522f, -0.002615f, -0.001617f, 0.000086f, -0.054737f, 0.016780f, -0.000446f, -0.037518f, -0.015002f, 0.007492f, -0.002631f, -0.025209f, 0.010133f, -0.029867f, -0.001639f, 0.004044f, -0.048232f, -0.007788f, 0.022584f, -0.014768f, 0.003769f, 0.032378f, 0.020713f, 0.025093f, 0.009148f, -0.012180f, -0.021250f, 0.025077f, -0.010247f, 0.014674f, -0.019762f, -0.010063f, 0.018164f, 0.028128f, 0.006533f, 0.033438f, -0.018544f, 0.029145f, -0.020214f, -0.026694f, -0.016574f, 0.029020f, 0.032864f, -0.025275f, 0.018396f, -0.072394f, -0.001329f, 0.022476f, 0.013409f, -0.011452f, -0.020756f, 0.011782f, -0.052118f, 0.002104f, 0.068703f, -0.047062f, -0.002370f, - -0.005800f, 0.005427f, -0.019762f, 0.010406f, -0.030393f, -0.027317f, -0.011524f, -0.006104f, 0.005159f, -0.005477f, 0.013305f, -0.020014f, -0.001182f, 0.044849f, -0.037138f, -0.029227f, -0.009452f, 0.039480f, 0.003341f, -0.045232f, 0.018134f, -0.015607f, -0.022066f, 0.006555f, 0.062819f, -0.034542f, -0.022227f, 0.047973f, 0.032214f, 0.004864f, -0.020980f, 0.003170f, -0.009005f, -0.012719f, 0.011276f, 0.013972f, -0.009753f, -0.035394f, 0.045948f, 0.024448f, 0.007170f, -0.048839f, -0.009654f, 0.017834f, 0.015743f, -0.004246f, 0.024911f, -0.002189f, 0.007298f, -0.009473f, -0.032383f, 0.022215f, -0.023562f, 0.015454f, 0.005150f, -0.024385f, 0.049119f, 0.010387f, 0.035033f, 0.039364f, 0.005188f, -0.052080f, -0.011730f, 0.003804f, -0.022789f, -0.007407f, 0.001528f, 0.002503f, 0.023945f, 0.050060f, -0.011878f, 0.020125f, 0.003594f, -0.019907f, -0.095315f, 0.005584f, -0.024315f, 0.002585f, 0.048847f, 0.003865f, -0.008528f, 0.008031f, 0.002607f, -0.033359f, -0.034460f, -0.032456f, -0.029698f, 0.038884f, -0.007188f, 0.046552f, 0.004945f, -0.045421f, -0.000825f, 0.004185f, 0.039019f, 0.006794f, - -0.005446f, -0.008353f, 0.011671f, -0.024803f, -0.008483f, 0.041588f, -0.007900f, -0.055717f, -0.041263f, 0.024352f, -0.004735f, -0.012166f, 0.013356f, -0.004680f, -0.027607f, 0.007809f, 0.017345f, 0.037393f, -0.006977f, -0.032360f, 0.001129f, -0.040616f, 0.016042f, 0.044483f, -0.006557f, -0.056131f, 0.018119f, -0.001299f, 0.003765f, 0.012725f, -0.016842f, 0.033514f, 0.003158f, -0.023600f, 0.018465f, -0.012998f, -0.007191f, 0.048289f, -0.024529f, -0.008786f, -0.007839f, 0.030428f, 0.012579f, -0.054093f, 0.027403f, -0.043411f, -0.010648f, -0.023067f, 0.004775f, -0.013321f, -0.015164f, -0.001962f, -0.047895f, 0.010622f, 0.076509f, 0.051510f, 0.022171f, -0.037335f, 0.027927f, 0.037554f, 0.053044f, 0.027206f, 0.005569f, 0.003140f, 0.032991f, 0.059539f, -0.013877f, -0.005780f, 0.032306f, -0.063866f, 0.023084f, 0.059622f, -0.012688f, -0.018687f, 0.014526f, 0.046719f, 0.035851f, -0.022747f, -0.042197f, -0.000803f, 0.020500f, -0.005353f, 0.004621f, 0.002451f, 0.048503f, -0.026071f, 0.030973f, 0.049225f, -0.019239f, -0.003716f, 0.033127f, -0.002917f, 0.116869f, -0.046925f, 0.020911f, 0.082415f, - -0.046274f, 0.017498f, 0.005294f, -0.062496f, -0.002032f, 0.014726f, -0.028611f, 0.066273f, 0.004914f, -0.005877f, 0.005116f, -0.023440f, 0.087380f, 0.027185f, -0.069523f, 0.070712f, -0.027768f, 0.006000f, 0.021167f, 0.028725f, 0.045304f, 0.025707f, -0.011412f, -0.039548f, -0.057977f, -0.017730f, -0.022732f, 0.000445f, -0.017246f, 0.041414f, -0.022002f, -0.035045f, 0.003038f, 0.019960f, -0.090892f, 0.053299f, 0.001608f, 0.032557f, 0.051533f, -0.085562f, 0.019012f, 0.045337f, 0.009351f, 0.034066f, -0.033983f, 0.037431f, 0.009969f, -0.032957f, -0.000162f, -0.020413f, -0.063916f, 0.035683f, 0.019093f, 0.058834f, -0.032603f, -0.041390f, -0.015389f, 0.014590f, -0.009356f, -0.070699f, -0.035922f, 0.023119f, -0.005839f, 0.011824f, -0.030732f, -0.008268f, 0.023455f, -0.019078f, -0.010470f, -0.029449f, -0.007498f, 0.012372f, -0.034210f, 0.004833f, -0.074336f, -0.059695f, 0.018699f, -0.062100f, 0.005441f, -0.064978f, -0.046532f, -0.030561f, 0.031320f, 0.063497f, 0.076481f, -0.016438f, 0.034221f, 0.043072f, 0.020490f, 0.019763f, -0.028969f, 0.086901f, 0.087421f, -0.056697f, 0.060099f, -0.043935f, - 0.031086f, 0.063569f, 0.059647f, 0.073607f, 0.086461f, 0.063237f, -0.064128f, -0.043326f, 0.003236f, 0.007079f, 0.030248f, -0.008587f, -0.006501f, 0.112402f, -0.082580f, -0.040716f, 0.042953f, -0.025425f, 0.040916f, -0.032063f, -0.037692f, 0.012953f, -0.087567f, -0.003353f, 0.056727f, -0.013524f, 0.028437f, -0.049092f, -0.013649f, -0.019193f, 0.000405f, 0.062210f, 0.017074f, 0.013987f, -0.012793f, 0.034147f, 0.009095f, 0.084689f, 0.018872f, 0.049411f, 0.001471f, -0.038670f, -0.038681f, 0.049104f, -0.026216f, 0.022565f, -0.002882f, -0.063810f, 0.043266f, -0.056966f, 0.107246f, -0.082397f, 0.047183f, 0.044247f, -0.050060f, -0.040183f, -0.032405f, 0.039860f, -0.006493f, 0.041639f, -0.004147f, 0.004576f, -0.079022f, -0.041491f, 0.013372f, -0.038185f, 0.007816f, -0.023921f, 0.017327f, 0.010979f, 0.052598f, -0.036064f, -0.017393f, -0.016605f, -0.034390f, 0.076052f, 0.007795f, 0.004849f, -0.080334f, -0.026487f, 0.030868f, 0.019839f, 0.015448f, 0.063947f, 0.032240f, 0.055360f, 0.055574f, -0.007740f, 0.012476f, -0.036591f, -0.166691f, 0.115353f, -0.070910f, -0.052426f, 0.002889f, 0.022311f, - 0.031843f, 0.003707f, -0.025324f, 0.089292f, 0.047815f, 0.010898f, -0.043956f, 0.028001f, 0.000084f, 0.032034f, -0.041895f, -0.032075f, 0.024946f, 0.066031f, -0.076414f, 0.001069f, 0.026979f, 0.006098f, -0.017519f, -0.013834f, -0.008116f, 0.000758f, -0.002220f, 0.015155f, 0.087616f, 0.002949f, -0.036978f, 0.055030f, -0.011621f, -0.058629f, -0.070094f, 0.065609f, 0.024385f, -0.012637f, 0.027560f, 0.012578f, 0.059140f, -0.080879f, -0.006038f, -0.043028f, -0.008935f, 0.040395f, -0.030281f, 0.013144f, -0.035167f, 0.013792f, 0.120904f, 0.004291f, -0.065009f, -0.081017f, -0.001822f, 0.030837f, 0.038585f, -0.036274f, 0.010608f, 0.051291f, -0.020700f, -0.118343f, 0.067305f, -0.045980f, -0.059351f, 0.019478f, 0.110147f, -0.082406f, 0.058166f, 0.063072f, 0.030934f, -0.076171f, -0.046771f, -0.047381f, 0.096248f, 0.032183f, 0.006001f, -0.006722f, 0.014896f, 0.027540f, -0.009104f, 0.013019f, -0.015092f, 0.000181f, -0.012040f, 0.045691f, -0.051424f, -0.005433f, 0.029943f, -0.070472f, 0.022373f, -0.017004f, 0.004793f, -0.008035f, -0.020357f, 0.012883f, -0.006040f, -0.028591f, 0.076932f, -0.058950f, - -0.017247f, 0.055238f, -0.035893f, -0.005205f, -0.011755f, 0.012293f, 0.053811f, 0.004413f, -0.053772f, 0.072984f, -0.040000f, 0.026111f, 0.044706f, 0.020380f, -0.017624f, 0.004183f, -0.040681f, 0.009944f, -0.024906f, -0.018883f, 0.096845f, -0.022481f, -0.039546f, 0.012901f, -0.018811f, 0.023378f, -0.015790f, 0.025678f, 0.062152f, -0.034218f, 0.020217f, 0.048285f, -0.056852f, 0.026240f, 0.030254f, 0.014555f, 0.038084f, -0.043081f, -0.011672f, 0.067914f, -0.046193f, -0.009039f, 0.019549f, -0.017159f, 0.064871f, -0.061222f, 0.012537f, 0.026512f, -0.026153f, 0.028312f, 0.029236f, -0.055963f, -0.146988f, -0.233978f, 0.019890f, 0.217574f, 0.015785f, 0.496275f, 0.514011f, 0.251228f, 0.536995f, 0.353663f, -0.081260f, -0.016898f, -0.126831f, -0.445525f, -0.390856f, -0.247899f, -0.454819f, -0.361117f, -0.112902f, -0.232672f, -0.195739f, 0.048522f, 0.094593f, -0.070602f, 0.012299f, 0.078350f, -0.093143f, -0.064961f, 0.117933f, 0.099501f, -0.007382f, 0.112063f, 0.209750f, 0.051451f, 0.143311f, 0.290382f, 0.125756f, 0.050233f, 0.256073f, 0.205881f, -0.000137f, 0.136118f, 0.300213f, 0.028241f, - 0.041500f, 0.229490f, 0.076167f, -0.073335f, 0.147522f, 0.132933f, -0.064179f, 0.107978f, 0.154323f, -0.059059f, -0.206610f, -0.130658f, -0.415042f, -0.650556f, -0.586962f, -0.626592f, -0.920571f, -0.840057f, -0.793531f, -0.953692f, -0.932347f, -0.788355f, -0.725052f, -0.670735f, -0.441453f, -0.251573f, -0.026505f, 0.085715f, 0.285422f, 0.490972f, 0.529982f, 0.599605f, 0.668773f, 0.271967f, 0.035929f} - }, - { - {-0.011317f, -0.017401f, 0.000332f, -0.009642f, -0.002163f, -0.006676f, 0.005464f, -0.010363f, 0.000486f, 0.004088f, -0.003496f, 0.003227f, -0.000834f, -0.000927f, 0.001407f, 0.001514f, 0.003165f, -0.004906f, -0.001127f, -0.003285f, -0.008545f, -0.000007f, 0.002575f, 0.000724f, -0.003623f, 0.006529f, 0.002367f, -0.002051f, 0.002302f, 0.000581f, -0.003699f, 0.002175f, -0.001226f, -0.004121f, -0.004597f, -0.002120f, -0.000886f, -0.002132f, 0.004308f, 0.008110f, -0.000711f, 0.012223f, 0.001974f, -0.009185f, 0.003344f, -0.001523f, -0.007051f, 0.000901f, -0.006702f, 0.007586f, 0.001688f, -0.005886f, 0.002949f, -0.003403f, 0.002508f, 0.003872f, 0.001858f, 0.001773f, -0.001337f, 0.003451f, -0.005592f, 0.003023f, -0.002431f, -0.002308f, -0.001535f, -0.002742f, -0.009905f, -0.001802f, 0.005436f, -0.003327f, 0.003885f, 0.001912f, -0.002711f, 0.000981f, -0.000008f, 0.003109f, 0.011948f, -0.005897f, 0.003257f, -0.001145f, 0.000633f, 0.000671f, -0.004906f, -0.005397f, 0.003565f, -0.000880f, -0.004459f, -0.005515f, -0.003509f, 0.005132f, -0.000537f, 0.006848f, 0.001396f, -0.008311f, -0.008763f, -0.006036f, - 0.002565f, 0.002366f, 0.004560f, -0.000465f, 0.005225f, -0.003747f, -0.000700f, -0.008933f, -0.001367f, -0.001452f, 0.001947f, 0.003728f, 0.003527f, 0.007072f, -0.003302f, -0.004225f, 0.003749f, 0.002403f, -0.004332f, -0.004158f, 0.000314f, 0.003532f, 0.001624f, 0.007929f, -0.002739f, -0.001953f, 0.008666f, 0.003069f, 0.016139f, 0.007291f, -0.004327f, 0.000378f, -0.009668f, 0.000757f, -0.011029f, -0.000120f, -0.003990f, 0.008425f, 0.001043f, 0.004896f, 0.005923f, 0.003879f, 0.005711f, 0.004515f, 0.001063f, -0.008415f, -0.000730f, -0.003586f, 0.006834f, 0.010780f, -0.006270f, -0.003175f, -0.002456f, -0.001885f, -0.004610f, -0.018668f, -0.020385f, -0.001405f, -0.006001f, 0.000969f, -0.004598f, -0.001003f, 0.011001f, -0.001827f, 0.005805f, -0.002600f, -0.005632f, -0.007292f, 0.001129f, -0.001382f, -0.009153f, 0.010422f, 0.002834f, 0.000851f, 0.005219f, 0.005360f, 0.008207f, 0.006095f, -0.000826f, -0.006179f, 0.005614f, 0.001484f, -0.008765f, -0.003649f, -0.004106f, -0.002450f, 0.007312f, -0.002516f, -0.013235f, -0.004313f, -0.001768f, 0.002768f, -0.004317f, -0.008377f, -0.000019f, -0.000784f, - 0.009493f, 0.001476f, -0.000378f, 0.003587f, -0.000526f, 0.013205f, -0.002583f, 0.001194f, -0.003225f, -0.005282f, -0.000301f, 0.005613f, 0.002258f, 0.001465f, 0.005055f, -0.005027f, -0.008500f, -0.005999f, -0.001482f, 0.000910f, -0.002209f, 0.000028f, -0.006443f, -0.001612f, 0.002942f, -0.002267f, 0.006146f, 0.002978f, -0.000619f, 0.000732f, -0.006260f, -0.005707f, 0.009714f, 0.001476f, 0.003896f, 0.001506f, 0.002459f, 0.013392f, -0.001109f, 0.007019f, 0.003523f, 0.009231f, 0.010509f, -0.002204f, 0.000438f, 0.007010f, 0.006175f, 0.004703f, 0.012019f, 0.002771f, -0.004629f, 0.000754f, 0.010404f, 0.004047f, 0.004593f, 0.009674f, 0.012174f, 0.008582f, -0.003538f, -0.008636f, 0.005500f, 0.004305f, -0.005761f, -0.008382f, -0.000266f, -0.004885f, 0.001498f, 0.003272f, -0.003876f, -0.004214f, 0.003433f, 0.003346f, 0.006697f, -0.005093f, -0.011185f, -0.005232f, -0.005384f, -0.006958f, -0.003348f, -0.007961f, 0.003689f, -0.010882f, 0.003559f, 0.000736f, 0.001384f, -0.004981f, 0.009105f, 0.007577f, -0.008445f, 0.008733f, 0.002134f, -0.001641f, 0.001654f, -0.006873f, -0.003463f, 0.005774f, - 0.000741f, 0.002153f, 0.000085f, 0.006882f, 0.001363f, 0.008569f, -0.006188f, -0.001129f, -0.002440f, 0.002886f, 0.003259f, -0.002815f, 0.001286f, -0.005574f, -0.000123f, 0.002303f, -0.000324f, 0.035227f, 0.001158f, 0.031099f, 0.003435f, 0.019390f, -0.003476f, -0.004324f, 0.006416f, -0.015940f, 0.017394f, -0.010219f, 0.011965f, 0.007342f, -0.005147f, 0.003999f, 0.000460f, -0.000205f, -0.001882f, 0.003780f, 0.007442f, 0.007282f, 0.014264f, 0.002447f, 0.005189f, -0.001322f, 0.016627f, -0.018814f, 0.001387f, -0.002172f, 0.005280f, 0.006857f, -0.008514f, 0.002843f, 0.005251f, 0.001422f, 0.007256f, 0.002621f, -0.006325f, 0.002716f, 0.015036f, -0.003395f, 0.005304f, -0.003128f, -0.001166f, -0.001423f, -0.009052f, 0.014799f, 0.000799f, 0.000776f, 0.012677f, -0.002362f, 0.001963f, 0.013701f, -0.020077f, 0.005098f, 0.000697f, 0.005634f, 0.018231f, 0.004430f, 0.005266f, 0.005272f, -0.000711f, -0.005426f, -0.002076f, 0.003574f, 0.002747f, 0.008617f, -0.002123f, 0.007027f, 0.004741f, -0.003044f, 0.002771f, -0.006418f, -0.002741f, 0.000572f, -0.014220f, -0.017933f, -0.006838f, -0.002882f, - -0.006451f, 0.013956f, 0.006239f, -0.011561f, 0.012792f, -0.002017f, -0.009046f, 0.002491f, 0.005649f, -0.005395f, -0.008271f, -0.007858f, -0.015863f, -0.008364f, 0.007034f, -0.010440f, -0.016127f, 0.004271f, 0.006682f, 0.000987f, -0.005877f, 0.011842f, 0.001596f, 0.010912f, -0.000624f, -0.002947f, 0.006502f, 0.010297f, -0.015104f, -0.007608f, 0.004188f, -0.003796f, 0.003761f, -0.010329f, -0.000689f, 0.002251f, 0.003617f, -0.008905f, -0.015393f, -0.004792f, 0.004497f, -0.003078f, -0.001952f, 0.000449f, 0.004958f, -0.002027f, 0.002730f, -0.005712f, 0.008887f, -0.012267f, -0.008833f, -0.003625f, -0.008669f, -0.003154f, -0.002415f, 0.002825f, -0.006414f, 0.004143f, 0.009573f, -0.001483f, 0.002132f, 0.001949f, 0.004489f, 0.008785f, -0.003785f, -0.002532f, -0.001988f, -0.004661f, 0.009685f, -0.004735f, -0.017262f, -0.011544f, -0.006817f, -0.004526f, -0.015164f, -0.036633f, -0.002928f, 0.002141f, 0.000861f, -0.012101f, -0.004709f, -0.013667f, -0.002922f, -0.016041f, -0.017481f, -0.014372f, -0.002707f, -0.009600f, -0.019726f, -0.012960f, 0.004807f, 0.006049f, -0.004986f, 0.012002f, 0.007407f, -0.004715f, - 0.015737f, 0.003051f, 0.001939f, 0.002267f, -0.019905f, -0.000893f, 0.004175f, 0.007651f, -0.005717f, -0.005837f, 0.013078f, 0.023833f, -0.017069f, 0.006383f, -0.004419f, -0.000955f, -0.014893f, -0.001397f, 0.000718f, -0.008026f, -0.009273f, -0.007371f, -0.007721f, -0.004560f, 0.006145f, 0.017637f, -0.007183f, 0.006692f, 0.012911f, 0.010871f, -0.002542f, 0.001375f, -0.002725f, -0.003221f, -0.015028f, -0.007796f, 0.010363f, -0.005592f, 0.003221f, -0.005297f, 0.005893f, 0.002761f, -0.000478f, -0.000274f, -0.006209f, -0.005853f, 0.002787f, -0.001834f, 0.004697f, -0.018680f, -0.018933f, -0.001602f, -0.021734f, -0.005198f, -0.026320f, -0.006834f, -0.018407f, -0.003040f, 0.004426f, 0.004152f, 0.021663f, -0.013734f, 0.005490f, 0.004911f, -0.010472f, -0.005812f, 0.017618f, 0.001084f, -0.004042f, 0.001423f, -0.012948f, 0.011861f, -0.016825f, -0.006507f, 0.008775f, 0.004263f, -0.000950f, 0.002387f, -0.002596f, 0.005174f, -0.006644f, -0.013904f, 0.001823f, 0.005837f, 0.006189f, -0.011214f, 0.003881f, 0.011384f, -0.011349f, -0.016126f, 0.013363f, -0.011156f, 0.009060f, -0.008161f, 0.005483f, -0.000812f, - -0.010087f, -0.014861f, -0.007886f, 0.003463f, 0.000402f, 0.004941f, -0.006534f, -0.007736f, -0.017379f, 0.009194f, -0.012177f, -0.006364f, 0.008132f, 0.015984f, -0.001135f, -0.003652f, -0.023063f, -0.019160f, -0.005351f, -0.006914f, 0.009982f, -0.002653f, -0.013164f, -0.002258f, 0.001620f, -0.007710f, -0.001112f, -0.016521f, 0.011916f, 0.004928f, 0.014640f, 0.018296f, 0.013872f, 0.006477f, 0.039301f, 0.018227f, 0.025603f, -0.008367f, -0.000534f, -0.001032f, -0.037896f, 0.001368f, 0.016919f, -0.008261f, -0.002607f, 0.000614f, 0.024489f, -0.004825f, 0.014305f, -0.003629f, 0.013687f, 0.006566f, 0.016810f, 0.022434f, 0.003228f, 0.014670f, -0.004601f, 0.012547f, -0.001639f, 0.023964f, 0.013401f, -0.001385f, 0.014293f, 0.010433f, -0.004094f, 0.009875f, 0.006644f, 0.008344f, -0.007409f, -0.007106f, -0.020105f, -0.002405f, 0.014252f, 0.001524f, 0.001774f, -0.005954f, -0.007596f, -0.007333f, -0.006734f, 0.033652f, -0.022660f, 0.007488f, 0.010490f, 0.004524f, 0.002846f, -0.015036f, -0.018096f, -0.006245f, -0.002899f, -0.002590f, -0.031248f, -0.017236f, -0.016206f, -0.001220f, -0.001018f, 0.007095f, - -0.001304f, 0.005903f, 0.010715f, 0.017365f, 0.003423f, -0.007852f, 0.006564f, -0.015580f, 0.003549f, -0.012747f, 0.004090f, 0.003293f, 0.058310f, 0.007608f, 0.007700f, 0.007951f, -0.004862f, -0.022848f, 0.015154f, 0.018492f, -0.010742f, 0.008857f, 0.006653f, -0.013106f, -0.003087f, 0.015549f, 0.007097f, -0.024065f, 0.005468f, -0.005453f, -0.014041f, 0.001253f, 0.006519f, 0.003616f, -0.001185f, 0.001145f, 0.010094f, -0.001786f, 0.005320f, -0.018223f, 0.007122f, -0.000325f, 0.007004f, 0.006255f, -0.004431f, 0.015972f, -0.020125f, -0.006521f, -0.019855f, 0.018481f, 0.007164f, 0.029013f, 0.012741f, 0.001825f, 0.005183f, -0.020064f, -0.000804f, 0.008399f, 0.006436f, 0.008704f, 0.000923f, 0.005912f, -0.006333f, 0.008333f, 0.019026f, 0.028340f, 0.010936f, -0.009830f, -0.006967f, -0.000555f, -0.005517f, 0.011941f, 0.012992f, -0.007013f, 0.007633f, 0.016870f, 0.004351f, -0.018021f, -0.040022f, -0.017515f, 0.008021f, 0.019667f, -0.007434f, 0.007388f, -0.001318f, -0.001610f, 0.000124f, 0.020129f, 0.003329f, -0.034709f, 0.009168f, 0.019117f, -0.021333f, 0.014425f, 0.019509f, -0.050163f, - 0.009408f, 0.004026f, 0.009581f, -0.017576f, 0.027522f, -0.039195f, -0.002206f, -0.001121f, -0.005216f, -0.002386f, -0.013811f, -0.013677f, -0.004432f, 0.016527f, -0.000399f, 0.002245f, -0.009747f, 0.012188f, -0.003559f, -0.003212f, 0.005836f, 0.019998f, -0.014015f, 0.014952f, -0.004392f, 0.009825f, 0.001941f, 0.014180f, 0.016769f, -0.002445f, 0.002853f, -0.022479f, -0.014364f, -0.003101f, -0.011423f, -0.020274f, 0.000166f, -0.006123f, -0.016737f, 0.023335f, -0.022338f, -0.004661f, -0.011830f, -0.008788f, 0.012119f, -0.014510f, 0.006729f, -0.003718f, 0.012350f, -0.005809f, 0.013670f, -0.019543f, -0.009021f, 0.004951f, 0.016869f, -0.032813f, -0.016377f, 0.003517f, -0.003405f, -0.003976f, 0.010271f, -0.015879f, -0.039607f, 0.010037f, -0.035747f, 0.018207f, -0.016409f, 0.002594f, -0.039278f, -0.009309f, -0.027504f, -0.011052f, 0.033405f, 0.001932f, -0.028595f, 0.026851f, -0.012950f, 0.002213f, -0.029839f, 0.004934f, 0.010929f, -0.025346f, -0.006973f, -0.022622f, -0.000870f, 0.001858f, -0.008500f, -0.006017f, 0.021717f, 0.003823f, -0.016032f, 0.004171f, -0.033469f, 0.019952f, 0.030224f, -0.009728f, - 0.012075f, 0.022378f, -0.002600f, -0.004195f, 0.001717f, 0.002983f, 0.011879f, 0.002503f, 0.001893f, 0.007078f, -0.019392f, -0.001023f, -0.022178f, -0.021140f, -0.010060f, 0.009298f, 0.011389f, -0.000378f, -0.026642f, 0.005272f, 0.005125f, 0.012724f, 0.025397f, -0.027338f, 0.038808f, -0.033233f, -0.000303f, -0.006402f, -0.007724f, -0.015842f, -0.033194f, -0.041597f, -0.018496f, -0.004327f, 0.008337f, -0.002636f, -0.000826f, 0.006829f, -0.003111f, 0.030369f, 0.010925f, -0.029428f, -0.008143f, 0.000575f, 0.015592f, -0.019399f, -0.002826f, -0.040028f, 0.003327f, 0.036745f, -0.032872f, -0.018212f, -0.034308f, 0.041176f, 0.018834f, -0.021480f, 0.028169f, 0.026439f, 0.039668f, -0.015189f, -0.012524f, 0.027436f, -0.003292f, -0.006489f, 0.010748f, 0.011702f, 0.005907f, 0.005130f, -0.037711f, -0.004995f, 0.001005f, -0.000578f, 0.003026f, -0.005269f, 0.017267f, 0.030830f, 0.004122f, 0.001254f, 0.000374f, 0.000596f, 0.030159f, 0.006839f, -0.001129f, -0.007320f, 0.008428f, 0.005526f, -0.003633f, 0.002407f, -0.015718f, -0.004441f, 0.026406f, -0.026198f, -0.011266f, -0.022735f, 0.029426f, -0.027018f, - 0.014088f, -0.011655f, 0.009422f, -0.006665f, 0.007834f, -0.021934f, 0.005919f, 0.030543f, -0.019612f, 0.000608f, -0.053897f, -0.003509f, -0.018201f, 0.000418f, -0.050099f, -0.003367f, -0.001112f, -0.016977f, -0.009526f, 0.040858f, -0.043404f, 0.006366f, -0.010344f, -0.017990f, 0.014209f, -0.016448f, -0.032747f, -0.025912f, 0.006487f, 0.000642f, 0.011663f, -0.018456f, -0.009482f, 0.034017f, 0.013711f, -0.005867f, 0.008975f, -0.018835f, -0.017217f, -0.016392f, 0.035808f, -0.031792f, -0.036664f, 0.017245f, -0.033954f, 0.012177f, 0.003009f, 0.008723f, -0.014190f, -0.004758f, -0.017579f, -0.009092f, -0.013106f, 0.006339f, 0.019554f, 0.011370f, -0.026736f, 0.032578f, 0.006080f, 0.010907f, 0.005158f, 0.015349f, -0.001261f, 0.014751f, 0.006067f, -0.007540f, 0.012224f, 0.002976f, 0.015526f, 0.008404f, -0.019206f, 0.008198f, -0.003700f, 0.005628f, -0.001632f, -0.008597f, -0.003803f, -0.015729f, 0.017323f, 0.014848f, 0.019179f, -0.003352f, 0.032576f, 0.034537f, 0.017533f, 0.004279f, 0.019612f, 0.035898f, 0.021854f, 0.039230f, 0.029600f, 0.029247f, -0.027027f, -0.031886f, 0.011360f, -0.006478f, - -0.003286f, 0.002529f, -0.010196f, 0.013356f, 0.016140f, 0.006450f, 0.036913f, -0.006699f, -0.011754f, -0.015778f, -0.005728f, 0.004126f, 0.002888f, -0.064068f, -0.012170f, 0.029347f, 0.018846f, -0.062109f, -0.046989f, -0.013716f, -0.001171f, 0.021461f, -0.009166f, -0.000683f, -0.050501f, 0.007902f, -0.026662f, 0.019555f, -0.004084f, 0.025660f, -0.021658f, -0.004377f, -0.025587f, 0.005316f, 0.020208f, -0.008868f, 0.005684f, -0.013432f, 0.000802f, -0.032734f, -0.009605f, -0.000576f, 0.002224f, 0.026112f, 0.032415f, 0.002238f, -0.030022f, -0.019915f, -0.009728f, 0.004225f, -0.007911f, 0.010699f, -0.034318f, -0.009468f, -0.004599f, -0.007699f, -0.019126f, -0.003281f, -0.008643f, 0.024673f, 0.034306f, 0.024204f, 0.008805f, 0.015307f, 0.014768f, -0.015051f, 0.057385f, 0.035748f, -0.043979f, -0.037350f, 0.042595f, -0.031420f, -0.017855f, 0.007794f, 0.005868f, -0.030461f, 0.032311f, 0.003363f, -0.094355f, 0.027060f, 0.062367f, -0.040438f, 0.044021f, 0.056871f, -0.015536f, -0.004569f, 0.033434f, -0.033610f, -0.018152f, 0.012631f, -0.011875f, -0.020898f, -0.018247f, -0.013787f, 0.021907f, 0.011287f, - 0.014775f, -0.004809f, -0.018998f, -0.017663f, 0.020198f, -0.016746f, -0.000303f, 0.004062f, -0.027497f, 0.016941f, 0.016186f, -0.013254f, -0.008393f, -0.024032f, 0.001510f, -0.015578f, 0.020133f, -0.033137f, 0.003198f, 0.010119f, -0.000900f, -0.016824f, -0.031731f, -0.009284f, -0.013451f, -0.005192f, -0.024494f, 0.032155f, -0.032879f, 0.003712f, -0.011651f, 0.006410f, -0.046907f, 0.046556f, 0.009678f, 0.002560f, -0.019195f, 0.008747f, 0.008230f, -0.000313f, 0.004655f, -0.011234f, -0.037223f, -0.009063f, -0.016100f, -0.026626f, -0.032101f, -0.014323f, -0.008165f, -0.034710f, -0.012361f, -0.004385f, 0.021812f, 0.007186f, -0.029206f, -0.028296f, 0.015134f, -0.009760f, -0.037185f, -0.019017f, 0.008378f, 0.026931f, 0.029245f, 0.027233f, 0.047803f, -0.012551f, -0.034002f, -0.034509f, -0.003108f, 0.019036f, 0.036778f, 0.016469f, 0.007564f, 0.021090f, 0.062801f, -0.055498f, 0.000052f, -0.023003f, -0.026916f, -0.018563f, 0.029711f, -0.016751f, -0.014900f, 0.012967f, 0.037853f, 0.021360f, -0.025263f, 0.016187f, -0.026559f, 0.019626f, 0.003071f, -0.004432f, -0.011804f, -0.022388f, -0.015099f, 0.002445f, - 0.005929f, -0.034630f, 0.023354f, 0.002451f, -0.000900f, -0.013746f, -0.012057f, 0.022837f, -0.030327f, -0.002464f, 0.037666f, 0.040758f, -0.035022f, -0.003327f, -0.005073f, -0.024955f, -0.028878f, 0.033475f, 0.010215f, 0.021070f, -0.004235f, 0.002042f, -0.000445f, 0.021093f, -0.005885f, 0.000678f, -0.024228f, 0.038025f, 0.034683f, -0.047237f, -0.054658f, -0.012430f, 0.003362f, -0.019064f, 0.004619f, -0.014132f, 0.007095f, -0.029103f, 0.033543f, -0.037302f, -0.030065f, -0.011996f, 0.008064f, 0.026184f, -0.010898f, 0.037961f, 0.006414f, -0.012548f, -0.010512f, -0.008645f, -0.021598f, 0.024577f, 0.018448f, -0.080431f, 0.120360f, -0.081888f, -0.023957f, 0.024701f, 0.063924f, 0.056397f, -0.022267f, -0.019030f, 0.001159f, 0.005653f, 0.031863f, 0.015215f, -0.047583f, 0.016223f, -0.012100f, -0.013227f, 0.002142f, 0.021225f, -0.002542f, -0.031181f, -0.032183f, 0.018614f, 0.010679f, 0.023787f, -0.013712f, 0.028814f, 0.003831f, 0.033342f, -0.005363f, -0.007443f, 0.020346f, 0.000261f, -0.026251f, 0.007232f, 0.025833f, 0.001883f, -0.034066f, 0.018990f, 0.035084f, -0.031088f, 0.011438f, -0.033575f, - 0.012499f, -0.043222f, -0.032449f, 0.054599f, 0.045736f, 0.025880f, 0.060193f, -0.008446f, 0.072265f, 0.031187f, 0.026648f, 0.043548f, -0.069240f, 0.060461f, 0.017402f, 0.026773f, 0.024215f, 0.010184f, -0.034810f, 0.009368f, 0.060682f, 0.075488f, -0.002875f, -0.076618f, 0.037637f, 0.006456f, 0.014717f, 0.001499f, -0.000438f, -0.013365f, -0.063580f, 0.016304f, -0.013435f, 0.017338f, 0.082793f, -0.004583f, -0.094963f, -0.050398f, -0.055237f, -0.023296f, 0.002128f, 0.030286f, -0.080686f, -0.020015f, 0.014593f, -0.039951f, -0.042539f, -0.041820f, -0.042458f, -0.008693f, 0.050360f, 0.023420f, -0.017634f, 0.021804f, 0.011271f, -0.023913f, 0.026810f, -0.029790f, -0.004551f, 0.010129f, 0.018323f, -0.057600f, 0.029820f, -0.029182f, 0.017735f, -0.012674f, -0.043245f, 0.010805f, 0.015682f, 0.005247f, 0.009107f, -0.020395f, -0.062095f, 0.000840f, 0.014894f, 0.012129f, 0.002354f, 0.006162f, -0.024782f, -0.002141f, -0.000558f, 0.056093f, -0.007228f, -0.097177f, -0.041380f, -0.012264f, -0.077510f, 0.016085f, -0.022553f, -0.022179f, -0.036552f, -0.019088f, -0.055421f, -0.057892f, -0.067008f, -0.008870f, - 0.073614f, 0.007858f, -0.044253f, 0.018997f, 0.001950f, -0.007020f, -0.024470f, -0.037873f, 0.016247f, 0.028323f, 0.023630f, 0.011854f, -0.012435f, -0.055987f, -0.036274f, -0.031796f, 0.051815f, -0.004520f, 0.041239f, 0.057250f, -0.048455f, -0.056727f, -0.063366f, 0.018278f, 0.020101f, -0.082570f, -0.050436f, 0.003915f, 0.000971f, 0.027821f, -0.099942f, 0.012933f, 0.021403f, 0.070823f, -0.080261f, 0.011940f, 0.011646f, -0.007140f, 0.042264f, -0.022254f, 0.075047f, -0.001272f, 0.005522f, 0.026051f, 0.028454f, -0.025654f, -0.062759f, 0.039218f, 0.042374f, 0.013498f, 0.053933f, 0.014308f, -0.008088f, -0.016784f, -0.047638f, 0.076053f, -0.033312f, 0.072491f, 0.025916f, -0.000636f, 0.019148f, -0.024221f, 0.035861f, 0.041439f, -0.026564f, 0.032380f, 0.012766f, -0.066045f, 0.051063f, 0.059051f, -0.007869f, -0.030154f, 0.005697f, 0.005084f, 0.001032f, -0.005469f, 0.097202f, 0.006256f, -0.058756f, -0.023159f, 0.009474f, -0.072682f, -0.110124f, 0.025986f, 0.133034f, 0.042781f, -0.012323f, -0.071158f, -0.025439f, 0.004671f, 0.087390f, -0.036896f, -0.049341f, -0.077336f, -0.133592f, 0.037829f, - 0.066493f, -0.088235f, -0.006262f, 0.047258f, -0.019464f, -0.040559f, 0.036360f, -0.039235f, -0.019233f, 0.001290f, -0.027015f, 0.044173f, -0.014154f, -0.022590f, -0.006770f, 0.022483f, 0.084015f, -0.014666f, -0.037079f, -0.044422f, 0.016375f, 0.037765f, 0.024619f, -0.039551f, -0.005081f, 0.043158f, 0.001982f, -0.036101f, 0.011989f, -0.032469f, 0.077189f, -0.036691f, -0.082560f, 0.026590f, -0.013621f, 0.037512f, -0.055393f, -0.056850f, 0.055025f, -0.006588f, -0.071235f, -0.040028f, -0.068218f, 0.085874f, 0.042105f, 0.021543f, -0.093332f, 0.014284f, 0.037558f, -0.067270f, 0.002871f, -0.048923f, -0.036652f, 0.034201f, -0.033013f, 0.039625f, -0.027863f, -0.058519f, -0.014976f, -0.015865f, -0.011040f, 0.017762f, 0.003544f, -0.036724f, 0.105816f, -0.014545f, 0.043848f, 0.049434f, 0.024313f, -0.014494f, 0.003620f, -0.022839f, 0.050535f, 0.020907f, -0.035417f, 0.027128f, 0.095581f, 0.022347f, 0.040120f, -0.001335f, 0.007974f, 0.017766f, -0.037850f, 0.017940f, 0.031892f, 0.002603f, -0.043205f, -0.019631f, -0.032635f, -0.010172f, -0.043290f, -0.037340f, 0.002698f, -0.029302f, 0.044084f, 0.017284f, - -0.013054f, -0.031280f, -0.018352f, -0.008764f, 0.022713f, -0.005432f, -0.041047f, -0.029763f, 0.005866f, 0.010600f, 0.019990f, 0.010700f, -0.010815f, 0.012582f, -0.036080f, -0.100772f, 0.002048f, 0.127220f, -0.005928f, -0.088655f, -0.017034f, 0.061685f, 0.014298f, 0.011882f, -0.003958f, -0.037327f, -0.051471f, -0.027307f, 0.008905f, -0.000951f, -0.047803f, 0.018826f, -0.093824f, -0.014406f, 0.082400f, 0.026838f, 0.106641f, -0.012531f, -0.045431f, -0.011291f, -0.012060f, 0.030749f, 0.003822f, 0.000560f, -0.062079f, -0.028776f, -0.031189f, -0.003209f, 0.066055f, -0.008951f, -0.020156f, 0.022282f, 0.024085f, 0.002681f, -0.041889f, -0.062416f, -0.043366f, -0.145318f, -0.223694f, 0.050192f, 0.197002f, 0.059398f, 0.483982f, 0.454441f, 0.199635f, 0.467556f, 0.194209f, -0.092799f, -0.008361f, -0.150540f, -0.397597f, -0.222026f, -0.213329f, -0.409797f, -0.301284f, -0.178841f, -0.263420f, -0.182328f, 0.023429f, -0.029313f, -0.095220f, 0.079247f, 0.072854f, -0.017924f, 0.077746f, 0.240175f, 0.089485f, 0.028132f, 0.227136f, 0.199656f, 0.051785f, 0.240331f, 0.298969f, -0.026627f, 0.165041f, 0.298155f, - 0.094739f, 0.100118f, 0.301494f, 0.166043f, -0.059982f, 0.224374f, 0.145853f, -0.108818f, 0.062567f, 0.165410f, -0.135105f, -0.208379f, -0.083323f, -0.394651f, -0.631882f, -0.615483f, -0.680990f, -1.058735f, -0.927114f, -0.778052f, -0.993223f, -0.864091f, -0.584479f, -0.682647f, -0.545290f, -0.215034f, -0.134996f, 0.096901f, 0.257068f, 0.486545f, 0.679280f, 0.742615f, 0.872327f, 0.945296f, 0.845111f, 0.760948f, 0.746588f, 0.319287f, -0.024459f, -0.004229f}, - {-0.010706f, -0.017167f, -0.001287f, -0.017525f, -0.009700f, -0.003350f, -0.003022f, -0.000475f, -0.004166f, -0.000782f, 0.003795f, -0.004550f, 0.005319f, 0.000654f, -0.007138f, 0.004469f, -0.001227f, 0.004777f, 0.000710f, -0.006772f, 0.004794f, 0.002655f, 0.003770f, -0.002894f, -0.004321f, -0.003106f, -0.003593f, 0.002845f, -0.000589f, 0.000792f, -0.003918f, 0.002820f, -0.004754f, -0.006515f, 0.000356f, -0.008098f, -0.006024f, -0.003101f, 0.008709f, 0.001080f, 0.003363f, -0.010534f, 0.001550f, 0.001805f, -0.009058f, 0.003266f, 0.000719f, -0.009460f, -0.001724f, -0.000697f, -0.007337f, 0.008416f, -0.005262f, -0.003027f, 0.004961f, -0.000349f, -0.008892f, -0.000889f, -0.006146f, 0.006933f, 0.006046f, -0.008478f, -0.004422f, -0.005665f, -0.003831f, -0.002393f, 0.003671f, 0.003218f, 0.002109f, 0.005822f, -0.000052f, 0.002312f, -0.000854f, -0.002310f, -0.003048f, -0.001391f, 0.021128f, -0.010667f, 0.001167f, -0.006518f, -0.000132f, 0.008401f, 0.004501f, 0.005122f, -0.004478f, 0.006430f, -0.006734f, 0.007261f, 0.004146f, 0.008826f, 0.004209f, -0.002172f, -0.010124f, 0.010790f, 0.008028f, 0.002412f, - 0.001610f, 0.000602f, -0.004147f, -0.005523f, 0.006077f, 0.003097f, 0.004060f, 0.005103f, -0.005394f, -0.000910f, 0.005483f, 0.005704f, -0.000556f, -0.005113f, -0.008536f, -0.000473f, 0.001877f, -0.005823f, 0.002215f, 0.000886f, -0.007692f, -0.004817f, -0.000390f, 0.003472f, 0.000295f, -0.004417f, 0.007585f, 0.000806f, -0.002311f, -0.006056f, -0.001039f, 0.000049f, -0.010165f, 0.004157f, 0.006633f, -0.004222f, 0.008438f, 0.006147f, -0.000942f, 0.004958f, 0.003440f, 0.010304f, 0.003563f, 0.001361f, -0.001621f, 0.003423f, -0.008770f, 0.000403f, 0.004268f, -0.005137f, 0.004834f, 0.005049f, 0.006321f, 0.003124f, 0.008084f, -0.019988f, -0.013512f, -0.002243f, -0.008605f, -0.007880f, 0.004007f, -0.011513f, -0.010558f, 0.002824f, -0.004641f, -0.004694f, 0.004765f, -0.003843f, -0.007411f, -0.001140f, -0.000326f, -0.002476f, -0.003257f, -0.002384f, -0.008547f, -0.000867f, -0.006098f, -0.004911f, -0.000000f, 0.007535f, -0.001509f, 0.011030f, -0.005673f, 0.006488f, 0.008074f, -0.009153f, 0.003297f, -0.002584f, 0.001930f, -0.006595f, 0.003308f, 0.003665f, 0.006265f, -0.003484f, -0.007183f, -0.002960f, - -0.003850f, 0.001971f, 0.003070f, -0.009373f, -0.000933f, -0.006577f, -0.004758f, 0.001249f, -0.007162f, -0.012212f, -0.002028f, 0.011082f, 0.002724f, 0.003554f, 0.000791f, 0.002144f, 0.001732f, 0.003713f, 0.004707f, 0.012384f, 0.001101f, -0.006365f, -0.007318f, -0.002253f, -0.003440f, -0.001671f, -0.014952f, 0.002329f, -0.001008f, 0.003913f, -0.001974f, 0.000312f, -0.003581f, -0.002991f, 0.014692f, 0.001263f, 0.001069f, 0.016026f, 0.018484f, 0.014221f, 0.010567f, 0.014953f, 0.006078f, 0.006505f, -0.001343f, 0.004260f, 0.015755f, 0.001696f, 0.004827f, -0.005826f, -0.003863f, 0.012079f, -0.008050f, -0.014721f, 0.004506f, -0.012291f, 0.010683f, 0.002543f, 0.012816f, -0.004025f, -0.000743f, -0.003104f, 0.004259f, 0.005157f, -0.000108f, -0.012502f, -0.002511f, 0.010811f, -0.007072f, 0.004910f, 0.002941f, -0.002360f, -0.002991f, 0.012022f, 0.009125f, 0.020925f, 0.008468f, 0.001814f, 0.005128f, -0.001674f, 0.001415f, 0.006663f, 0.004078f, 0.017873f, -0.007432f, -0.004959f, 0.001435f, 0.004697f, -0.002581f, 0.008368f, -0.007475f, 0.001744f, -0.000240f, -0.005767f, 0.002143f, 0.001958f, - -0.007691f, -0.010672f, -0.006341f, 0.008818f, 0.004606f, 0.000281f, -0.000193f, 0.006775f, 0.001083f, 0.002486f, 0.011965f, 0.005962f, -0.001822f, -0.001276f, 0.011113f, -0.007984f, 0.002730f, 0.035045f, -0.000858f, 0.017280f, -0.003342f, -0.002450f, 0.018035f, -0.017697f, -0.006470f, -0.001194f, 0.008760f, 0.006472f, -0.004121f, 0.003672f, 0.001396f, -0.016041f, 0.003796f, 0.008849f, 0.007389f, -0.018017f, -0.006722f, 0.002206f, -0.013377f, -0.003440f, 0.000644f, 0.000725f, 0.001408f, -0.001875f, 0.007927f, -0.005753f, 0.006212f, 0.013742f, 0.013210f, -0.003854f, -0.008232f, -0.001302f, 0.014903f, -0.000794f, -0.001279f, 0.000189f, 0.001037f, -0.007905f, 0.000873f, 0.006509f, 0.000458f, 0.001575f, 0.005651f, -0.004061f, 0.003610f, 0.002437f, -0.002260f, 0.010793f, 0.000464f, 0.008568f, 0.001072f, -0.002897f, 0.003094f, 0.005691f, 0.004267f, -0.000312f, -0.009143f, -0.007766f, -0.010898f, -0.004642f, -0.001135f, -0.000146f, -0.002002f, 0.007349f, 0.005642f, -0.005185f, -0.010851f, -0.000049f, 0.004247f, 0.005703f, -0.007027f, -0.001917f, -0.009359f, -0.025942f, -0.006797f, -0.008762f, - 0.001654f, 0.004366f, -0.004443f, -0.005152f, -0.048997f, 0.001038f, 0.015723f, -0.011368f, -0.018339f, 0.013797f, -0.020744f, -0.003061f, -0.009274f, -0.010822f, -0.006763f, -0.006757f, 0.000761f, 0.008426f, -0.001491f, 0.004751f, -0.005255f, 0.006394f, -0.004754f, -0.007299f, 0.003338f, -0.002650f, -0.011629f, -0.014821f, 0.007251f, 0.000861f, 0.007178f, 0.002318f, 0.015934f, 0.002395f, 0.005636f, -0.007421f, -0.012975f, -0.003641f, -0.006330f, 0.013320f, -0.005910f, 0.000529f, 0.003663f, -0.006332f, 0.018652f, 0.012370f, 0.000570f, -0.014437f, -0.018231f, -0.006099f, 0.006557f, -0.016547f, -0.000006f, -0.007940f, -0.015489f, 0.001693f, -0.024463f, -0.005311f, -0.002096f, -0.009076f, 0.017414f, -0.000828f, -0.001945f, -0.000068f, 0.011309f, 0.013623f, 0.004940f, -0.013240f, -0.003287f, -0.003210f, 0.008508f, 0.003578f, 0.005555f, 0.011089f, -0.028725f, -0.040615f, 0.004323f, -0.008762f, 0.008465f, -0.010891f, -0.021252f, 0.001180f, 0.018124f, 0.004529f, 0.010839f, 0.009918f, 0.006430f, 0.005271f, -0.007338f, 0.005741f, 0.011810f, -0.018937f, -0.009912f, -0.005829f, -0.005117f, 0.007904f, - -0.002330f, 0.003193f, 0.012292f, 0.012053f, -0.005309f, -0.010339f, 0.001897f, -0.005458f, -0.005427f, -0.009980f, -0.008154f, -0.015582f, 0.003241f, -0.005334f, -0.000824f, 0.015311f, -0.003594f, 0.003588f, 0.003145f, -0.009596f, 0.008057f, 0.009487f, 0.011402f, -0.009764f, 0.018403f, -0.002241f, -0.014702f, -0.010919f, -0.016026f, 0.015167f, -0.006131f, -0.015308f, 0.004173f, -0.001534f, -0.012238f, 0.013194f, 0.015570f, -0.004623f, -0.014526f, 0.011227f, 0.002333f, 0.009079f, -0.002130f, 0.023207f, 0.011940f, -0.011627f, -0.007494f, -0.004768f, -0.006273f, 0.008723f, 0.008580f, 0.014440f, -0.038227f, -0.000389f, -0.006660f, 0.002187f, 0.000270f, 0.014181f, 0.011011f, 0.014693f, -0.002119f, 0.020174f, -0.009240f, 0.013584f, 0.017436f, 0.002744f, 0.017373f, 0.003265f, 0.004737f, -0.005215f, -0.001450f, -0.007616f, 0.013818f, -0.001286f, -0.001257f, 0.018597f, 0.011789f, -0.000292f, 0.005406f, -0.002106f, -0.000376f, 0.011896f, -0.006828f, -0.012772f, 0.000239f, -0.002227f, 0.006538f, -0.035215f, 0.021087f, 0.021930f, 0.009107f, 0.003796f, 0.000818f, -0.011626f, -0.022908f, 0.014649f, - -0.009112f, -0.011167f, -0.006843f, 0.013030f, -0.009466f, 0.007746f, 0.008765f, -0.008963f, -0.005271f, -0.020760f, 0.009351f, -0.013829f, 0.007852f, 0.000393f, 0.007031f, 0.011178f, 0.019490f, 0.007273f, -0.008851f, -0.022458f, -0.003693f, 0.011780f, 0.021393f, 0.014604f, -0.003239f, -0.005894f, -0.013778f, -0.024814f, -0.002517f, 0.013283f, 0.006911f, 0.001503f, 0.003513f, 0.014940f, 0.050192f, 0.027711f, -0.002683f, 0.005026f, 0.004224f, 0.011330f, 0.019651f, -0.002587f, 0.003620f, 0.033905f, 0.003128f, -0.001322f, 0.020004f, 0.014321f, -0.014409f, 0.008476f, 0.001649f, 0.013645f, 0.008925f, -0.023385f, 0.017390f, -0.010833f, -0.002014f, 0.001991f, 0.013462f, 0.002454f, 0.003257f, 0.010536f, 0.011626f, -0.011733f, 0.011927f, 0.037115f, -0.007189f, 0.016775f, 0.016755f, -0.009494f, 0.012969f, 0.003346f, -0.009680f, -0.010014f, 0.005871f, -0.009028f, -0.023965f, -0.003398f, -0.001914f, 0.001935f, -0.030535f, -0.007744f, 0.008203f, -0.019322f, -0.013599f, -0.031524f, 0.009210f, 0.013546f, -0.022202f, -0.008285f, -0.011316f, 0.021558f, -0.000639f, -0.013699f, -0.010206f, -0.015241f, - 0.005853f, 0.017647f, -0.014691f, 0.006034f, -0.007120f, 0.007729f, 0.019627f, 0.007462f, 0.015042f, 0.015369f, 0.019409f, 0.001385f, 0.050824f, 0.014950f, 0.001085f, -0.001909f, -0.008543f, 0.001400f, 0.008661f, -0.005222f, -0.013037f, -0.016678f, 0.000275f, 0.013731f, -0.016857f, 0.008819f, 0.009301f, -0.003402f, 0.033906f, 0.013414f, -0.009811f, -0.004941f, -0.003742f, 0.013597f, -0.006304f, -0.010653f, -0.013981f, 0.009056f, -0.029186f, 0.001993f, -0.009077f, -0.009250f, 0.007788f, 0.002968f, -0.011478f, -0.005374f, -0.011094f, 0.014951f, -0.005854f, -0.021254f, -0.003955f, 0.001444f, 0.000375f, -0.011960f, -0.019420f, 0.002611f, -0.004719f, -0.001580f, 0.004793f, -0.002984f, 0.015575f, 0.004335f, 0.008694f, -0.010033f, 0.023236f, 0.007940f, -0.013852f, 0.017076f, 0.029689f, -0.008295f, -0.009316f, 0.016627f, 0.013080f, 0.006701f, 0.007209f, -0.018836f, -0.007033f, -0.020523f, 0.004112f, 0.019726f, 0.006659f, -0.024507f, -0.007391f, 0.007348f, -0.026903f, -0.038861f, -0.006547f, -0.000820f, 0.006409f, -0.040052f, 0.018750f, 0.053662f, -0.022147f, 0.037731f, -0.008631f, -0.007872f, - -0.011886f, -0.019158f, 0.014252f, 0.000794f, 0.009698f, 0.009975f, -0.035235f, 0.000739f, 0.016229f, -0.013951f, -0.007636f, -0.021816f, 0.039048f, -0.024094f, 0.019227f, 0.018564f, -0.023380f, -0.009244f, -0.008201f, 0.016799f, -0.018701f, -0.007210f, 0.018928f, -0.002891f, -0.005118f, -0.008806f, 0.023115f, 0.004538f, -0.003762f, -0.009035f, 0.000605f, -0.017104f, 0.019082f, -0.001734f, 0.008790f, 0.048135f, 0.031959f, -0.026813f, -0.019347f, 0.008087f, -0.002424f, 0.020548f, -0.010884f, -0.015388f, -0.005639f, -0.029149f, -0.011442f, -0.002797f, -0.022833f, -0.012316f, 0.050976f, 0.012970f, 0.000311f, -0.001613f, -0.000410f, 0.015913f, 0.018097f, -0.002773f, 0.017914f, 0.002504f, -0.009457f, 0.003087f, -0.026794f, -0.000761f, -0.024679f, -0.012151f, 0.015842f, 0.023824f, -0.032271f, 0.015006f, -0.042056f, 0.006722f, 0.040192f, -0.010955f, -0.009424f, 0.008029f, -0.011573f, -0.010502f, 0.011908f, -0.001940f, -0.001443f, -0.000900f, -0.026025f, 0.045180f, -0.047573f, -0.005007f, -0.000212f, 0.016290f, 0.010922f, 0.000331f, -0.017409f, -0.013439f, 0.006814f, 0.035407f, -0.001831f, -0.015818f, - -0.009622f, -0.025335f, -0.000571f, -0.014863f, -0.010606f, -0.005179f, 0.009163f, -0.000765f, 0.002479f, -0.016964f, 0.004784f, 0.005055f, 0.012333f, 0.009365f, 0.012465f, -0.022870f, 0.001620f, -0.004320f, 0.016833f, 0.004366f, 0.032597f, 0.007284f, -0.005451f, 0.003431f, -0.015044f, 0.000678f, 0.015392f, 0.018376f, -0.024607f, -0.019539f, 0.000126f, 0.028949f, -0.041206f, 0.012798f, 0.052357f, 0.029147f, -0.010971f, 0.006490f, -0.024344f, 0.013504f, 0.027475f, -0.039840f, 0.012406f, -0.017702f, -0.002660f, -0.053948f, 0.003738f, -0.020108f, 0.026122f, 0.006120f, -0.022834f, -0.010977f, -0.032986f, 0.051778f, 0.014385f, 0.027357f, -0.030820f, -0.033437f, -0.006729f, 0.009507f, -0.009921f, -0.004064f, 0.016712f, 0.005177f, 0.004864f, 0.015620f, -0.038165f, -0.003711f, 0.000009f, 0.009969f, -0.026712f, 0.003809f, 0.003948f, -0.017896f, -0.010590f, -0.024809f, -0.019418f, 0.000149f, 0.007526f, -0.020076f, 0.000967f, -0.008993f, -0.018637f, 0.007212f, -0.000621f, 0.014587f, -0.040528f, -0.041589f, 0.008049f, -0.003506f, 0.015041f, 0.035013f, 0.003258f, -0.022017f, 0.030601f, -0.015639f, - -0.030062f, -0.022737f, -0.010364f, 0.002354f, -0.031891f, -0.012261f, 0.029943f, 0.041352f, 0.016829f, 0.011331f, 0.007945f, -0.005197f, 0.025777f, 0.014533f, -0.031699f, -0.017420f, -0.000571f, 0.002481f, 0.028303f, 0.017970f, 0.003918f, -0.005252f, -0.004340f, -0.015130f, 0.018510f, 0.014160f, 0.032669f, 0.006623f, 0.008645f, 0.003013f, 0.058151f, 0.005663f, 0.012653f, 0.034264f, 0.002576f, 0.042673f, -0.001230f, -0.020112f, -0.021359f, -0.040720f, 0.007682f, -0.017349f, -0.000830f, 0.003170f, 0.014841f, 0.020910f, 0.036100f, 0.036842f, -0.005352f, 0.032816f, -0.002044f, -0.002994f, 0.012914f, 0.027718f, 0.012572f, 0.007747f, -0.043741f, -0.022696f, -0.035446f, 0.018303f, 0.036601f, 0.007126f, -0.014978f, 0.025350f, 0.036771f, -0.004645f, 0.006263f, -0.008151f, 0.031071f, 0.026067f, 0.022506f, -0.012450f, -0.022192f, -0.003118f, -0.005192f, -0.050410f, 0.009686f, 0.007679f, 0.005355f, -0.012181f, -0.005944f, -0.056005f, -0.019287f, -0.050639f, -0.008173f, -0.037550f, -0.019164f, 0.038562f, 0.010793f, 0.040706f, 0.003517f, -0.030605f, -0.014745f, -0.031724f, -0.063060f, 0.011004f, - -0.038635f, -0.009315f, 0.038607f, 0.018255f, 0.015687f, 0.005976f, -0.006376f, 0.000545f, 0.008152f, -0.023659f, 0.022744f, -0.042280f, -0.047846f, 0.003639f, -0.006926f, 0.020030f, 0.040787f, 0.035242f, 0.038275f, -0.022074f, -0.038035f, 0.029296f, -0.017161f, 0.030291f, 0.009370f, -0.048899f, 0.012574f, 0.009009f, -0.054661f, 0.029468f, -0.024696f, -0.025665f, 0.015398f, 0.016644f, 0.003069f, 0.019769f, 0.001989f, 0.000903f, -0.012362f, -0.007541f, 0.012654f, -0.007739f, -0.018216f, 0.001151f, -0.034729f, 0.012675f, -0.044274f, -0.027522f, 0.002509f, 0.017710f, -0.005239f, -0.018802f, 0.007977f, 0.013892f, 0.011571f, 0.000599f, 0.037454f, -0.083633f, -0.017644f, -0.023124f, -0.026284f, 0.035846f, -0.027620f, -0.004353f, -0.065559f, -0.019223f, -0.006124f, 0.003049f, 0.046904f, -0.011330f, 0.007950f, -0.027647f, 0.025280f, -0.034321f, -0.018991f, 0.016826f, -0.074898f, 0.010617f, 0.045358f, 0.053404f, 0.045563f, 0.025362f, 0.065799f, 0.032795f, 0.005011f, -0.015909f, -0.008644f, -0.024212f, -0.043622f, -0.005722f, 0.017328f, -0.071445f, -0.071113f, -0.000336f, 0.012450f, 0.049799f, - -0.015801f, 0.022838f, 0.021687f, 0.010779f, 0.012138f, -0.078592f, 0.062393f, 0.033370f, 0.077188f, 0.027845f, -0.002608f, -0.028662f, -0.017305f, -0.018004f, -0.026934f, 0.019616f, 0.015366f, -0.028283f, -0.031148f, 0.016813f, 0.023849f, 0.039896f, 0.012131f, -0.024867f, -0.036108f, 0.007854f, 0.007296f, 0.002595f, 0.005510f, 0.071049f, 0.025130f, 0.013680f, 0.024529f, 0.025838f, 0.030109f, 0.000871f, -0.043759f, 0.031954f, 0.100343f, -0.009808f, -0.026171f, -0.059886f, -0.011467f, 0.080265f, 0.010909f, 0.033540f, 0.012740f, -0.109794f, 0.024564f, 0.020486f, 0.004246f, 0.012118f, -0.005643f, 0.002583f, 0.024779f, -0.058397f, -0.022193f, 0.051609f, 0.021436f, 0.008285f, -0.041702f, 0.033574f, 0.015292f, -0.038434f, -0.039835f, -0.027134f, 0.044665f, 0.086035f, 0.083029f, 0.088684f, 0.093203f, 0.007158f, -0.032948f, 0.036868f, 0.070791f, -0.144967f, -0.053076f, 0.012812f, -0.086971f, -0.077052f, -0.035419f, -0.046266f, 0.003936f, -0.033721f, 0.091252f, -0.008530f, -0.034406f, -0.011989f, -0.072562f, -0.018351f, -0.058880f, -0.022537f, 0.008420f, -0.072580f, -0.014009f, 0.058560f, - -0.049593f, -0.012477f, 0.014823f, 0.001045f, 0.022169f, 0.006347f, -0.001673f, 0.022694f, 0.006120f, -0.035363f, -0.008729f, 0.034058f, -0.018424f, -0.044348f, -0.016981f, -0.054054f, -0.029321f, -0.095722f, 0.007411f, -0.064720f, 0.029828f, 0.013319f, -0.026472f, -0.084165f, 0.005661f, -0.007547f, 0.103252f, 0.043608f, -0.000495f, 0.059008f, 0.022306f, 0.002301f, 0.043953f, -0.053120f, -0.028904f, 0.006056f, 0.038329f, -0.043476f, -0.030674f, 0.155274f, -0.017808f, 0.081639f, -0.065140f, 0.002379f, -0.047623f, 0.036021f, -0.019258f, 0.054898f, 0.077864f, 0.005390f, -0.061434f, 0.052774f, -0.064604f, -0.056423f, 0.115484f, -0.066701f, 0.043347f, 0.036489f, -0.058018f, 0.031707f, 0.019484f, 0.012039f, -0.008941f, 0.044424f, 0.025055f, -0.058061f, 0.042560f, 0.046873f, 0.011142f, 0.007598f, 0.030699f, -0.001093f, -0.054982f, 0.073991f, -0.040144f, 0.016657f, -0.029170f, -0.007304f, 0.011801f, -0.013829f, 0.063083f, 0.013790f, -0.005281f, -0.014233f, -0.000318f, 0.012295f, -0.058583f, 0.020099f, -0.028782f, -0.020847f, -0.011481f, 0.000733f, -0.026744f, -0.013330f, 0.010990f, 0.065142f, - 0.004537f, -0.011989f, -0.036659f, 0.018644f, 0.015558f, 0.003755f, 0.054188f, -0.009946f, -0.000291f, 0.061429f, 0.023778f, 0.006176f, -0.051345f, -0.026689f, 0.042800f, 0.024099f, -0.046775f, 0.005752f, -0.114034f, -0.055393f, 0.116647f, -0.020082f, 0.067711f, 0.083316f, 0.032077f, 0.020579f, 0.046728f, -0.005821f, -0.028235f, 0.034169f, 0.025503f, 0.012046f, 0.075160f, 0.051470f, 0.070354f, -0.025565f, -0.102939f, 0.012836f, -0.007662f, 0.031688f, 0.016780f, -0.042454f, 0.024377f, 0.016608f, -0.036599f, -0.051831f, -0.025527f, -0.082711f, -0.072065f, 0.047220f, -0.007107f, -0.085490f, -0.019158f, 0.001996f, 0.031469f, 0.018924f, -0.043488f, -0.059094f, 0.010352f, 0.066974f, -0.029951f, 0.021781f, -0.044232f, 0.010881f, -0.050556f, 0.029487f, 0.043487f, -0.034265f, -0.052152f, -0.046551f, -0.001171f, 0.015256f, -0.019365f, -0.023652f, -0.015207f, -0.080571f, -0.057722f, 0.025253f, -0.047550f, -0.018851f, 0.024321f, -0.051978f, -0.065070f, 0.018445f, 0.042675f, -0.013522f, -0.079264f, 0.028929f, 0.039224f, 0.098068f, 0.006519f, 0.018427f, 0.027254f, -0.056120f, 0.024022f, -0.024936f, - -0.086186f, -0.025413f, 0.063867f, 0.001748f, -0.039465f, -0.129023f, 0.081783f, 0.080898f, -0.018956f, 0.062023f, 0.098959f, -0.010556f, 0.016751f, 0.053581f, -0.024923f, -0.020727f, 0.040953f, -0.008306f, 0.022563f, -0.047602f, -0.155473f, 0.043047f, -0.018747f, 0.116736f, -0.040555f, -0.023959f, -0.047137f, -0.130739f, 0.059726f, -0.075517f, -0.045725f, 0.003940f, -0.000784f, 0.103624f, -0.073521f, -0.049364f, 0.066657f, 0.041758f, 0.034579f, -0.010820f, 0.033087f, -0.021736f, -0.033933f, -0.028991f, 0.078527f, 0.067547f, 0.102233f, -0.030469f, -0.038413f, 0.003992f, -0.006776f, 0.039844f, -0.061587f, 0.015535f, -0.064658f, 0.037003f, 0.063775f, 0.024273f, -0.052043f, 0.038195f, -0.045762f, 0.106500f, 0.053375f, 0.017368f, 0.014551f, -0.013326f, -0.080848f, 0.048848f, -0.109813f, 0.025952f, 0.021406f, 0.056933f, 0.043775f, -0.092508f, 0.029793f, -0.057118f, -0.034632f, 0.029081f, -0.008337f, 0.038735f, 0.024025f, -0.084219f, 0.036912f, 0.083228f, 0.107244f, -0.027927f, 0.032432f, -0.040879f, 0.075261f, -0.104352f, -0.005265f, -0.021102f, 0.032807f, 0.036641f, -0.115665f, 0.080954f, - -0.005513f, -0.009148f, 0.034563f, 0.018398f, 0.040068f, 0.003735f, 0.022563f, -0.048557f, 0.046349f, 0.005201f, -0.037694f, 0.023458f, -0.011435f, -0.006670f, 0.045512f, 0.016914f, -0.056031f, 0.028759f, -0.023341f, 0.045519f, -0.031563f, 0.006900f, -0.013129f, 0.017804f, -0.012176f, 0.004756f, -0.021076f, 0.053027f, 0.001013f, -0.004822f, 0.024020f, 0.013381f, -0.023655f, -0.012892f, 0.020102f, 0.013082f, 0.024717f, -0.027727f, 0.014272f, -0.006102f, -0.053473f, -0.012129f, 0.022664f, 0.014933f, 0.016828f, 0.006790f, -0.046954f, 0.001013f, 0.004380f, -0.002374f, 0.020251f, -0.018845f, 0.019820f, 0.000678f, 0.013414f, -0.021833f, -0.003640f, -0.013273f, 0.071866f, -0.031634f, 0.021979f, 0.013284f, -0.003137f, 0.011481f, -0.014556f, 0.009818f, 0.022709f, -0.029667f, -0.012665f, 0.001611f, -0.001180f, -0.004421f, -0.005617f, -0.041914f, 0.015773f, -0.015839f, 0.096387f, -0.006799f, -0.031449f, -0.047527f, -0.021865f, -0.026624f, 0.034834f, 0.020390f, -0.025677f, 0.002242f, 0.002785f, 0.011552f, 0.001344f, 0.024354f, 0.008136f, 0.019192f, -0.006798f, -0.000613f, -0.005989f, 0.009020f, - 0.020447f, -0.019178f, -0.000396f, -0.009476f, 0.000393f, 0.025279f, -0.014615f, 0.002478f, -0.006772f, 0.009954f, 0.004828f, -0.013860f, -0.005450f, 0.014844f, -0.004889f, 0.024202f, 0.016908f, -0.025331f, 0.007770f, 0.005305f, 0.012925f, 0.005538f, -0.024249f, 0.016094f, -0.004829f, 0.015634f, 0.012230f, -0.028645f, 0.007468f, -0.000043f, 0.006062f, -0.003327f, -0.012894f, 0.020185f, -0.005359f, 0.009060f, 0.000134f, -0.006299f, 0.009075f, -0.012353f, -0.002032f, 0.016744f, -0.011961f, -0.014227f, 0.028013f, -0.018516f, 0.026169f, -0.003019f, -0.021506f, 0.043443f, -0.040160f, 0.034606f, -0.012179f, -0.021245f, 0.022687f, -0.020959f, -0.047677f, -0.080785f, 0.101969f, 0.293550f, 0.045943f, 0.028745f, -0.214784f, -0.264699f, -0.085374f, -0.051798f, 0.178792f, 0.273710f, 0.140211f, 0.041041f, -0.092538f, -0.197575f, -0.180974f, -0.150906f, 0.011413f, 0.226741f, 0.188881f, 0.108850f, 0.036299f, -0.096747f, -0.126343f, -0.099688f, -0.097152f, -0.033884f, 0.045124f, 0.063048f, 0.129443f, 0.093276f, 0.021903f, -0.031452f, -0.019288f, -0.104660f, -0.051634f, -0.052876f, -0.072474f, 0.042714f, - 0.079656f, 0.046534f, 0.116299f, 0.031087f, -0.028683f, -0.045055f, -0.078778f, -0.061637f, -0.010581f, -0.019161f, 0.022927f, 0.048299f, 0.042148f, 0.030639f, 0.019925f, -0.010928f, -0.043916f, -0.030571f, -0.036796f, 0.011044f, 0.040157f, 0.013190f, 0.008760f, -0.018607f, -0.038756f, -0.007688f, -0.001815f, -0.001437f, 0.028191f, 0.025871f, 0.027994f, 0.010519f, -0.012949f, -0.034160f, -0.049800f, -0.050150f, -0.032734f, 0.028043f, 0.014524f, 0.005074f} - }, - { - {-0.009295f, -0.009930f, -0.012467f, -0.015293f, -0.011517f, -0.006906f, -0.001007f, -0.006226f, 0.004702f, -0.001055f, -0.001455f, 0.002462f, 0.005251f, -0.000092f, -0.003363f, -0.003658f, -0.005925f, 0.000900f, -0.005416f, 0.009641f, 0.010543f, -0.004288f, 0.000378f, 0.003149f, -0.002707f, 0.008094f, -0.003030f, -0.003515f, 0.000388f, -0.000722f, 0.007226f, 0.005867f, 0.002696f, 0.001441f, -0.006781f, -0.003085f, 0.008025f, -0.002254f, 0.002231f, -0.001618f, -0.003735f, -0.004817f, -0.004987f, 0.004272f, 0.000009f, 0.000844f, 0.001716f, -0.002275f, 0.002374f, 0.005133f, -0.009455f, -0.002233f, 0.003797f, 0.000894f, 0.003847f, -0.000515f, -0.008734f, -0.003163f, 0.004930f, -0.005413f, -0.000529f, 0.003806f, -0.003266f, -0.000863f, -0.001564f, -0.005168f, -0.001409f, -0.004061f, -0.001842f, 0.000406f, -0.002714f, 0.000302f, 0.000763f, -0.000639f, -0.002348f, -0.001641f, -0.005346f, -0.005360f, 0.020378f, 0.002353f, 0.005537f, 0.001920f, 0.002926f, -0.004943f, -0.012293f, -0.002414f, 0.006520f, 0.002280f, -0.006085f, -0.000902f, 0.004981f, -0.001334f, -0.007337f, 0.002158f, -0.008461f, -0.005300f, - -0.000272f, 0.002263f, -0.002420f, -0.001979f, 0.005222f, -0.007366f, -0.000200f, 0.000848f, 0.003495f, 0.002714f, 0.002647f, 0.008823f, 0.003980f, -0.011170f, -0.002876f, -0.005135f, 0.001344f, -0.000393f, -0.000904f, -0.007086f, -0.009165f, 0.011926f, -0.005642f, 0.002821f, 0.003414f, 0.002887f, -0.011530f, -0.006635f, -0.003105f, 0.001114f, -0.001017f, -0.000512f, -0.001183f, 0.001763f, 0.004213f, -0.006150f, -0.000174f, 0.003019f, 0.003555f, 0.004254f, 0.001448f, -0.000127f, 0.004099f, 0.001305f, -0.002101f, -0.000791f, 0.006741f, -0.005453f, -0.005776f, -0.003247f, -0.002520f, 0.005666f, 0.003177f, 0.001081f, -0.002636f, 0.005383f, -0.003018f, 0.002561f, -0.011649f, -0.006885f, 0.004872f, -0.011229f, -0.016061f, 0.003224f, 0.001341f, 0.002097f, 0.002318f, 0.002388f, -0.013776f, -0.002103f, 0.004001f, -0.008571f, 0.009189f, 0.009088f, 0.007682f, -0.002910f, 0.000747f, 0.002268f, 0.005918f, 0.001547f, -0.000126f, 0.001377f, -0.003896f, 0.003936f, -0.001335f, -0.001198f, -0.001753f, 0.011580f, -0.006611f, 0.004199f, -0.004105f, -0.003368f, -0.003652f, 0.003319f, 0.006380f, -0.006267f, - -0.003077f, -0.003223f, 0.004764f, 0.004638f, 0.007139f, 0.005071f, 0.001204f, 0.006447f, -0.004821f, 0.004068f, 0.001719f, 0.002046f, 0.012997f, 0.003489f, 0.006649f, -0.009824f, -0.002351f, 0.004847f, -0.004696f, 0.005533f, -0.001706f, -0.003146f, 0.001938f, 0.008300f, 0.005757f, 0.004287f, -0.001135f, 0.002429f, 0.006445f, -0.005847f, 0.009907f, -0.000103f, 0.008396f, -0.001677f, 0.007243f, 0.008909f, 0.007429f, -0.001200f, -0.007804f, -0.002638f, 0.018947f, 0.014494f, 0.010953f, 0.010054f, 0.010247f, 0.005065f, -0.001338f, 0.000297f, -0.004475f, -0.000650f, 0.013651f, -0.005622f, -0.006835f, 0.010306f, 0.006766f, 0.009936f, -0.007024f, 0.003406f, -0.002945f, 0.002693f, 0.003715f, 0.006436f, 0.000397f, -0.003683f, -0.003632f, -0.004900f, -0.002418f, -0.002791f, -0.010476f, -0.000599f, 0.007991f, -0.005945f, -0.001591f, 0.003756f, -0.005611f, -0.004033f, 0.004329f, -0.001923f, -0.007140f, -0.002921f, 0.003371f, -0.005042f, -0.007812f, -0.002668f, -0.002634f, 0.003190f, -0.005588f, -0.009932f, 0.000304f, -0.001023f, -0.001947f, 0.003832f, -0.009203f, -0.003493f, -0.000308f, -0.002868f, - 0.004341f, -0.000426f, 0.001591f, -0.014872f, -0.005260f, 0.009723f, -0.004021f, -0.007781f, 0.002028f, 0.002410f, 0.001857f, -0.002323f, -0.013062f, -0.004749f, 0.013340f, 0.001844f, 0.004445f, 0.003787f, -0.002719f, 0.027611f, 0.016919f, 0.016062f, 0.000264f, 0.001629f, 0.001257f, -0.006546f, -0.014632f, -0.005493f, 0.010995f, -0.008314f, 0.004959f, 0.014922f, 0.001167f, -0.004710f, -0.001903f, -0.003010f, -0.001620f, 0.006033f, 0.008529f, 0.000307f, 0.002483f, 0.003493f, 0.005542f, 0.000326f, -0.007892f, 0.002403f, -0.012690f, -0.003833f, -0.001647f, -0.003547f, -0.002346f, 0.001537f, -0.003075f, -0.006683f, -0.005221f, -0.002445f, 0.000498f, -0.002913f, -0.007715f, 0.009041f, -0.003468f, 0.000579f, -0.002415f, -0.006073f, 0.007441f, 0.020722f, 0.004976f, -0.007367f, 0.012276f, 0.002683f, -0.003837f, 0.003602f, -0.002169f, -0.008191f, 0.000005f, -0.003550f, 0.003088f, -0.007158f, -0.012047f, 0.000246f, 0.002002f, -0.014850f, 0.004379f, 0.002740f, 0.008195f, 0.004323f, 0.010843f, -0.003995f, -0.007180f, -0.004653f, -0.002129f, 0.004827f, -0.001740f, -0.009851f, 0.006586f, -0.004808f, - -0.014616f, -0.022022f, -0.007316f, -0.010815f, 0.015644f, -0.003263f, -0.002408f, 0.006422f, -0.015287f, -0.010060f, 0.008454f, -0.006798f, -0.007139f, 0.000019f, -0.001076f, 0.001968f, 0.005390f, -0.002086f, 0.002183f, -0.003490f, -0.003375f, 0.000100f, -0.003054f, -0.006131f, -0.001104f, -0.001028f, 0.006261f, 0.007243f, 0.005487f, -0.007692f, 0.003181f, 0.003089f, 0.010692f, -0.005319f, -0.001011f, -0.003506f, -0.009229f, 0.012630f, -0.012275f, -0.005365f, -0.005186f, 0.003247f, 0.009513f, -0.009080f, 0.009838f, -0.000794f, 0.004952f, 0.009129f, 0.000664f, 0.007115f, -0.013343f, 0.003109f, -0.005570f, 0.000991f, -0.014173f, 0.000591f, -0.005519f, -0.011559f, -0.010143f, 0.001051f, 0.007704f, 0.000796f, -0.007562f, 0.010327f, -0.004703f, 0.006114f, -0.002189f, -0.012025f, 0.015713f, -0.010465f, -0.003938f, -0.005813f, 0.002198f, 0.007347f, 0.002000f, 0.006826f, 0.009876f, 0.006161f, -0.015993f, -0.022537f, 0.002446f, 0.002032f, 0.001187f, 0.014743f, -0.004811f, -0.015754f, 0.001609f, 0.002008f, -0.004265f, -0.000749f, -0.014046f, -0.002587f, 0.001686f, 0.002263f, 0.015599f, -0.002544f, - 0.013978f, -0.003184f, -0.003661f, 0.001388f, -0.013956f, 0.006167f, -0.005280f, 0.008716f, -0.002377f, -0.003330f, -0.005199f, -0.002264f, 0.000470f, -0.010130f, 0.017971f, -0.012181f, -0.020260f, 0.006354f, 0.000906f, -0.013891f, -0.004224f, -0.026937f, 0.000445f, -0.009360f, -0.000161f, -0.010174f, -0.008587f, 0.001872f, 0.000932f, 0.005113f, -0.008669f, 0.007325f, -0.009785f, -0.018368f, 0.002183f, 0.005706f, -0.005782f, 0.006694f, -0.003321f, -0.009892f, -0.009318f, -0.012107f, -0.006173f, -0.000706f, 0.001907f, -0.003099f, 0.011569f, 0.000809f, -0.003966f, 0.001883f, 0.000345f, 0.003427f, 0.001346f, 0.002525f, -0.011990f, -0.009156f, 0.001216f, -0.035042f, -0.008758f, 0.001374f, -0.008896f, -0.006537f, -0.011128f, 0.002886f, 0.003987f, 0.007977f, -0.005945f, -0.007453f, -0.008369f, 0.004246f, 0.009512f, -0.004660f, -0.003923f, -0.002359f, -0.001327f, 0.004513f, -0.019390f, -0.004768f, 0.011183f, 0.003656f, -0.005553f, 0.002155f, 0.009954f, -0.000887f, -0.002294f, 0.003498f, -0.000398f, 0.024052f, -0.010076f, 0.005954f, 0.002184f, -0.009998f, 0.003597f, 0.002356f, -0.011186f, 0.008214f, - -0.015998f, -0.001476f, 0.014781f, 0.003288f, -0.000053f, -0.002922f, -0.010763f, -0.009511f, 0.002992f, 0.006333f, -0.003753f, 0.003151f, 0.012440f, 0.006059f, -0.004461f, 0.007507f, -0.010080f, -0.024846f, -0.002732f, -0.010835f, 0.007558f, -0.006890f, 0.018390f, 0.009025f, -0.000128f, -0.002766f, -0.022274f, 0.007412f, 0.009568f, -0.006882f, 0.014880f, -0.010712f, 0.005162f, -0.018013f, 0.009427f, 0.006926f, -0.019826f, 0.009488f, 0.014033f, 0.034822f, 0.035657f, 0.007941f, 0.010108f, 0.000703f, 0.004359f, 0.000891f, 0.002958f, -0.009219f, 0.003603f, -0.005571f, 0.007110f, 0.008093f, 0.017752f, 0.003307f, -0.004837f, 0.012132f, 0.007392f, 0.014478f, -0.000432f, 0.009097f, 0.003938f, -0.004100f, 0.003177f, 0.021268f, 0.002075f, -0.008905f, -0.006223f, 0.015717f, 0.008255f, 0.007593f, 0.013051f, -0.011082f, 0.002858f, 0.017274f, -0.018746f, -0.020585f, 0.005183f, 0.010943f, 0.016246f, -0.007892f, -0.015125f, 0.010674f, 0.002110f, -0.001853f, 0.004836f, -0.003001f, -0.003628f, -0.000443f, 0.023426f, -0.009630f, 0.002985f, -0.006626f, -0.006254f, -0.003550f, 0.010875f, -0.002385f, - 0.027121f, 0.013526f, -0.016988f, 0.015780f, 0.000696f, 0.006805f, 0.000419f, 0.002537f, 0.000620f, -0.006674f, 0.006234f, -0.024943f, -0.010473f, 0.008995f, -0.028908f, 0.005984f, -0.025567f, 0.054562f, 0.011592f, 0.007087f, -0.014704f, 0.022521f, -0.006267f, -0.002828f, -0.004578f, -0.000410f, -0.013975f, -0.002957f, 0.009299f, 0.000020f, -0.011029f, 0.014279f, -0.002007f, -0.010073f, 0.004189f, 0.003276f, -0.014694f, -0.025044f, 0.011567f, -0.011367f, -0.011844f, 0.000961f, 0.001862f, -0.008815f, 0.014091f, -0.013974f, 0.006004f, 0.010070f, -0.000104f, 0.015470f, 0.007433f, -0.023552f, -0.020767f, -0.011492f, 0.003532f, 0.002406f, -0.015935f, 0.004769f, 0.008666f, 0.001681f, 0.007940f, 0.006205f, -0.016553f, -0.011096f, 0.007646f, -0.022638f, -0.005298f, -0.002258f, -0.019323f, -0.013351f, -0.005037f, 0.002610f, -0.008656f, -0.025287f, -0.008654f, -0.014348f, 0.029818f, 0.011362f, 0.000457f, 0.001921f, -0.004497f, 0.019837f, 0.028944f, 0.001084f, 0.020562f, 0.010847f, 0.008403f, 0.001246f, -0.006346f, -0.004122f, -0.004726f, 0.010551f, -0.011886f, -0.002411f, -0.038451f, 0.025981f, - 0.041627f, -0.031183f, -0.018603f, 0.008645f, 0.007483f, -0.006258f, 0.013707f, 0.003815f, -0.011606f, -0.014117f, -0.000243f, -0.004448f, -0.010098f, 0.005339f, -0.004597f, 0.000822f, 0.011602f, -0.015320f, 0.003359f, 0.002270f, -0.009092f, 0.001530f, -0.014491f, 0.003083f, 0.021583f, 0.011191f, -0.002005f, -0.006625f, -0.001604f, -0.011956f, -0.012870f, 0.006725f, 0.011027f, -0.003089f, -0.005815f, -0.003916f, 0.006689f, 0.011193f, 0.005400f, 0.020216f, -0.010439f, 0.008589f, -0.004905f, 0.002419f, 0.012601f, -0.003946f, -0.003657f, -0.023042f, -0.003350f, -0.017685f, 0.009452f, 0.006877f, 0.023761f, -0.019468f, -0.007124f, -0.018772f, -0.031751f, -0.004625f, 0.013690f, -0.021313f, 0.005240f, -0.001544f, -0.015811f, -0.018038f, -0.023647f, 0.033381f, 0.001608f, 0.020476f, 0.014511f, 0.017878f, -0.006852f, -0.019343f, -0.015584f, -0.016876f, 0.007691f, -0.029269f, 0.020953f, -0.001915f, -0.012002f, 0.019446f, 0.005867f, -0.017228f, -0.026603f, -0.009107f, -0.000573f, 0.001472f, 0.000630f, -0.008269f, 0.028881f, 0.013218f, 0.008342f, 0.007842f, 0.008734f, -0.007897f, 0.001725f, 0.006962f, - 0.003833f, 0.027615f, 0.002312f, -0.038276f, 0.004442f, 0.017632f, -0.015103f, -0.020931f, -0.005051f, -0.010755f, -0.007439f, 0.003177f, 0.027607f, 0.018080f, -0.003083f, 0.000775f, -0.008633f, -0.022970f, -0.008449f, -0.018672f, 0.014258f, 0.021267f, 0.000142f, -0.009338f, -0.004059f, -0.002861f, 0.009010f, 0.014273f, 0.013331f, -0.028990f, 0.006001f, 0.002918f, 0.002832f, 0.023329f, -0.012321f, 0.010771f, -0.011173f, -0.006118f, 0.002541f, 0.016195f, 0.025555f, -0.001700f, -0.015883f, 0.007702f, -0.028849f, 0.026010f, 0.013239f, -0.000159f, -0.011444f, 0.009303f, -0.006001f, -0.011214f, -0.011183f, -0.009359f, -0.011147f, -0.005050f, 0.016296f, -0.027694f, -0.005445f, 0.014872f, -0.019108f, -0.004005f, -0.000182f, -0.004645f, -0.022546f, 0.022475f, 0.012472f, -0.018770f, -0.000970f, -0.009098f, -0.004246f, -0.039016f, -0.003242f, -0.018824f, -0.039974f, 0.007130f, 0.008503f, -0.020929f, -0.013755f, -0.024338f, -0.023557f, 0.019980f, 0.014394f, 0.021126f, 0.002917f, 0.046361f, 0.004398f, 0.023319f, 0.036822f, -0.005895f, 0.012791f, 0.033821f, -0.021825f, 0.009112f, -0.012225f, 0.022650f, - -0.005401f, 0.045908f, 0.024102f, -0.016845f, -0.020076f, 0.001761f, 0.013571f, 0.017954f, 0.007913f, -0.019336f, -0.001365f, 0.013774f, 0.038265f, -0.016957f, 0.026658f, -0.010844f, 0.017484f, -0.030054f, 0.014061f, -0.017427f, 0.014246f, -0.000570f, 0.007105f, -0.007565f, 0.025663f, 0.027998f, -0.051745f, 0.013987f, 0.016033f, 0.004961f, -0.005184f, 0.003296f, -0.034215f, -0.002390f, 0.028060f, 0.029310f, -0.006130f, 0.030527f, -0.001221f, -0.006544f, 0.002826f, 0.017173f, -0.006022f, -0.007872f, -0.003098f, -0.021834f, 0.004117f, -0.006216f, 0.034965f, 0.022721f, -0.015766f, -0.017233f, -0.031975f, -0.011773f, 0.024426f, 0.042940f, -0.018671f, 0.013473f, 0.003677f, 0.005951f, 0.024134f, 0.017036f, -0.032527f, 0.007082f, -0.010967f, -0.006302f, -0.012769f, -0.006986f, -0.013476f, -0.031622f, 0.006794f, 0.022240f, 0.009473f, 0.051244f, -0.011002f, -0.006142f, 0.036422f, -0.011891f, -0.000546f, -0.006847f, 0.010779f, -0.037459f, -0.023167f, 0.014556f, 0.030469f, 0.043275f, 0.051868f, -0.035457f, -0.017287f, -0.000420f, 0.018701f, 0.000003f, 0.058924f, 0.017649f, 0.010662f, -0.042135f, - 0.005353f, 0.002537f, 0.023777f, 0.030318f, -0.018161f, -0.004114f, 0.011479f, -0.005913f, 0.002971f, 0.035238f, 0.014600f, -0.027121f, 0.011487f, 0.021217f, -0.012758f, 0.041918f, 0.008818f, 0.056361f, 0.029656f, -0.017286f, -0.002918f, -0.055776f, 0.006217f, 0.012299f, 0.005793f, 0.078342f, -0.008098f, -0.008013f, -0.033199f, -0.032402f, 0.014589f, -0.026842f, -0.013124f, -0.018635f, -0.009131f, 0.018022f, -0.010900f, -0.024830f, -0.017616f, -0.000134f, 0.022287f, -0.027830f, 0.008014f, 0.009786f, 0.004796f, 0.027034f, -0.001146f, 0.000335f, -0.027206f, -0.043386f, -0.014810f, 0.017034f, -0.020588f, 0.003580f, -0.016902f, -0.074328f, -0.036640f, 0.019690f, 0.003887f, -0.043474f, 0.008750f, 0.055706f, -0.000287f, -0.003568f, -0.020147f, 0.010533f, -0.022457f, -0.046742f, 0.003573f, 0.004592f, -0.014836f, 0.006323f, 0.019283f, -0.006438f, -0.012066f, 0.009654f, 0.018155f, 0.026502f, -0.014107f, 0.019186f, 0.030496f, 0.009027f, 0.051147f, 0.002527f, -0.027555f, 0.032218f, 0.004790f, 0.002367f, -0.003752f, -0.011334f, 0.024754f, -0.027388f, 0.001372f, 0.028734f, -0.040491f, -0.045939f, - -0.051761f, 0.071733f, -0.039226f, 0.008065f, -0.000962f, -0.024912f, 0.038437f, -0.045414f, 0.020122f, 0.076172f, 0.049106f, 0.009333f, -0.062039f, -0.005400f, -0.040593f, -0.023051f, -0.037014f, -0.005589f, 0.011816f, -0.008889f, 0.030886f, -0.016490f, 0.005902f, 0.012618f, 0.042707f, 0.003571f, 0.006625f, 0.048293f, -0.032507f, -0.007129f, 0.023104f, -0.012256f, -0.025100f, -0.019757f, 0.026214f, -0.024913f, 0.011372f, 0.040548f, -0.011417f, -0.081011f, -0.004163f, 0.016542f, -0.095374f, 0.054761f, 0.045201f, -0.039682f, 0.060035f, 0.036900f, 0.027058f, 0.058129f, 0.001813f, 0.027930f, 0.004127f, -0.000259f, 0.022702f, -0.043476f, 0.039619f, 0.048683f, 0.041414f, -0.047055f, -0.007742f, 0.053283f, -0.027781f, 0.040746f, 0.043221f, 0.093210f, 0.060872f, -0.003395f, 0.008207f, -0.020545f, 0.014566f, 0.008357f, -0.053664f, -0.093323f, -0.017361f, 0.043942f, 0.055971f, -0.109448f, -0.098872f, 0.042314f, -0.028176f, -0.032466f, -0.012775f, -0.039121f, 0.013561f, -0.062701f, 0.077358f, 0.027538f, -0.032393f, -0.002375f, -0.031833f, -0.025534f, -0.025862f, -0.031051f, -0.019451f, -0.076006f, - -0.067161f, -0.014618f, -0.015986f, 0.001853f, 0.005244f, 0.010331f, -0.005901f, 0.006755f, 0.010968f, 0.030058f, 0.034830f, -0.016736f, -0.020191f, -0.024739f, -0.020283f, -0.045178f, 0.060055f, -0.025524f, 0.012764f, 0.042488f, 0.041040f, -0.020537f, -0.021629f, -0.039007f, -0.026047f, -0.033023f, 0.044379f, 0.000404f, 0.002127f, -0.064194f, -0.025115f, 0.080273f, -0.012783f, 0.074011f, -0.020982f, -0.035919f, -0.024160f, -0.040272f, -0.040388f, -0.013397f, -0.006006f, -0.055204f, -0.003036f, 0.014278f, -0.009699f, 0.008483f, -0.118352f, -0.054902f, -0.040475f, 0.046037f, -0.025126f, -0.005035f, 0.006603f, 0.072723f, 0.008860f, -0.036081f, -0.060201f, 0.121999f, -0.041284f, -0.020990f, 0.067799f, -0.041797f, -0.070316f, 0.065649f, -0.093665f, -0.023295f, 0.018765f, 0.018654f, -0.066079f, -0.021822f, 0.051863f, 0.003438f, -0.013284f, -0.032310f, 0.040237f, -0.039270f, 0.000351f, 0.036803f, -0.013640f, 0.034070f, -0.002140f, -0.012067f, 0.008042f, 0.010550f, -0.020675f, 0.032604f, -0.018359f, -0.003312f, 0.006641f, 0.002673f, -0.000242f, -0.002257f, 0.006721f, 0.021914f, 0.028210f, 0.046663f, - 0.019425f, -0.014644f, -0.006778f, -0.024247f, 0.023745f, -0.005885f, -0.041369f, 0.012595f, -0.001344f, -0.019416f, -0.055767f, 0.041488f, 0.001601f, -0.021981f, 0.060263f, 0.006659f, -0.020071f, -0.008029f, 0.090092f, -0.082168f, -0.092405f, 0.058724f, 0.086639f, -0.158276f, 0.000387f, -0.057142f, -0.054265f, -0.021847f, 0.058655f, -0.043638f, 0.077933f, -0.010133f, -0.001022f, 0.103763f, -0.027828f, -0.082950f, 0.100009f, 0.097148f, 0.073867f, -0.036058f, -0.041842f, -0.015214f, 0.014377f, 0.069224f, 0.057009f, -0.021565f, -0.002458f, 0.019791f, 0.061973f, -0.022178f, 0.000152f, 0.033350f, -0.042552f, -0.042173f, 0.035201f, -0.023545f, -0.011984f, -0.021837f, 0.002071f, -0.034339f, 0.006485f, 0.019500f, -0.009369f, 0.014556f, -0.010845f, -0.011743f, -0.005156f, -0.046413f, 0.011048f, -0.020115f, 0.031693f, 0.055589f, 0.007989f, 0.026628f, 0.028872f, 0.000061f, 0.016103f, 0.015971f, 0.066717f, -0.045476f, 0.035264f, 0.023996f, -0.025517f, 0.018975f, 0.026639f, 0.004509f, -0.021379f, -0.057735f, -0.049516f, 0.016611f, 0.027467f, -0.023249f, -0.086483f, 0.074653f, -0.017553f, -0.043207f, - -0.014980f, 0.075128f, -0.026661f, 0.082344f, 0.010462f, 0.026393f, -0.067799f, 0.073070f, -0.021505f, 0.031341f, 0.004392f, -0.110335f, -0.017389f, 0.019728f, -0.046984f, 0.067729f, 0.032713f, -0.099325f, -0.072460f, -0.049853f, 0.018309f, -0.020512f, 0.023715f, -0.037125f, -0.067222f, -0.000891f, -0.071452f, 0.018876f, -0.005032f, -0.014127f, 0.025869f, 0.039220f, -0.024278f, 0.004786f, 0.045831f, -0.035619f, 0.061639f, -0.008901f, -0.064349f, 0.055793f, -0.025533f, -0.012911f, 0.052192f, -0.065359f, 0.018836f, 0.000408f, 0.025295f, -0.010784f, -0.021829f, -0.099196f, 0.024557f, -0.041222f, -0.097080f, 0.119291f, -0.078587f, -0.033980f, -0.013928f, -0.027594f, -0.058721f, 0.033881f, 0.084826f, -0.051347f, 0.025431f, -0.074322f, -0.039680f, -0.042326f, 0.039703f, 0.006753f, 0.110863f, -0.018548f, -0.006558f, -0.032159f, -0.090978f, 0.000391f, 0.048137f, -0.034197f, 0.040934f, 0.046392f, -0.035868f, 0.004453f, -0.030017f, -0.137496f, -0.069283f, -0.041719f, -0.141751f, 0.093754f, 0.126064f, 0.058584f, -0.118829f, -0.097746f, -0.215768f, 0.033340f, 0.269157f, 0.123186f, 0.056341f, -0.066095f, - -0.217917f, -0.102012f, 0.073463f, -0.012859f, -0.018463f, 0.003808f, 0.032004f, 0.002577f, -0.008474f, 0.027062f, 0.006669f, 0.010298f, 0.038087f, -0.023467f, -0.002269f, 0.022728f, -0.009249f, -0.001862f, 0.023260f, -0.021538f, -0.007705f, 0.009024f, 0.037690f, -0.024337f, -0.020670f, 0.024149f, -0.003098f, 0.014398f, -0.041402f, 0.053522f, -0.014376f, 0.019336f, -0.013370f, 0.008575f, 0.026010f, 0.014307f, -0.008737f, 0.026131f, -0.011370f, 0.026398f, -0.021453f, 0.000514f, 0.023026f, -0.003846f, -0.012743f, -0.048959f, 0.002881f, 0.041384f, 0.001793f, 0.020487f, -0.028168f, -0.006122f, -0.017879f, -0.014100f, -0.009149f, 0.030636f, -0.012983f, 0.019571f, -0.025126f, -0.024532f, -0.014308f, 0.008768f, 0.049146f, -0.017458f, 0.020552f, 0.004270f, 0.001791f, -0.022509f, 0.010170f, 0.030363f, -0.002804f, -0.020734f, 0.013960f, -0.011572f, 0.006295f, -0.003345f, -0.016461f, 0.098981f, 0.019660f, -0.053051f, -0.037677f, -0.058592f, -0.018572f, 0.011275f, 0.031128f, -0.009721f, -0.012566f, -0.010834f, -0.010428f, -0.009871f, 0.014236f, -0.007218f, -0.001975f, -0.003130f, -0.010295f, -0.002456f, - 0.015648f, 0.002248f, -0.004506f, -0.015613f, 0.017956f, -0.023252f, 0.013693f, -0.008292f, -0.022820f, 0.000117f, 0.010425f, 0.011733f, 0.009177f, -0.013464f, 0.003020f, -0.004294f, -0.007377f, 0.027538f, -0.024481f, -0.004429f, -0.000989f, -0.001647f, 0.002582f, -0.004046f, -0.014386f, 0.012167f, -0.022803f, 0.021808f, -0.003194f, -0.015199f, 0.005261f, -0.007797f, 0.019324f, -0.011223f, -0.006867f, 0.020986f, -0.018751f, 0.006624f, -0.009002f, -0.001933f, 0.015966f, -0.011299f, -0.004611f, 0.014515f, -0.009930f, 0.003954f, 0.001391f, -0.011459f, 0.028259f, -0.024539f, -0.002225f, 0.011189f, -0.006414f, 0.018466f, -0.008310f, -0.003490f, 0.004785f, -0.046619f, -0.070644f, 0.092495f, 0.287606f, 0.024858f, 0.024799f, -0.196037f, -0.248499f, -0.051529f, -0.052860f, 0.146397f, 0.248573f, 0.127878f, 0.024277f, -0.089889f, -0.175539f, -0.123532f, -0.088761f, -0.004452f, 0.120902f, 0.177304f, 0.095392f, 0.022056f, -0.062495f, -0.110313f, -0.062218f, -0.059395f, -0.056118f, 0.035291f, 0.071766f, 0.071217f, 0.071239f, 0.017287f, -0.031536f, -0.012714f, -0.047710f, -0.073909f, -0.008696f, -0.022039f, - -0.015449f, 0.066745f, 0.038017f, 0.055740f, 0.033243f, -0.025335f, -0.061450f, -0.014724f, -0.040190f, -0.006205f, 0.026968f, 0.008351f, 0.014212f, 0.030012f, -0.016073f, -0.021596f, -0.005762f, -0.012810f, 0.011276f, 0.019196f, 0.000082f, 0.023704f, 0.013204f, -0.025659f, -0.025458f, -0.039203f, -0.034400f, 0.000846f, 0.038446f, 0.059731f, 0.027451f, 0.006642f, -0.016070f, -0.041868f, -0.009383f, -0.047602f, -0.031063f, 0.018870f, 0.010605f, 0.016098f, -0.002394f}, - {-0.007491f, -0.009914f, -0.014262f, -0.001612f, -0.005520f, -0.010006f, -0.004871f, -0.002339f, 0.002262f, -0.004793f, -0.010060f, -0.000817f, 0.002831f, -0.010019f, -0.005229f, -0.001949f, -0.005601f, -0.005813f, 0.004409f, -0.000638f, 0.000979f, -0.005117f, -0.005208f, -0.001320f, -0.008094f, 0.005590f, -0.008180f, 0.002456f, -0.002021f, 0.003211f, -0.003888f, 0.000958f, 0.002681f, -0.011142f, -0.001998f, 0.001271f, 0.012177f, -0.005574f, -0.001031f, -0.001967f, -0.000022f, 0.004674f, -0.001686f, -0.005188f, -0.000758f, -0.001715f, 0.003714f, -0.001462f, -0.004362f, 0.004516f, 0.004193f, 0.002189f, 0.000978f, -0.003072f, 0.005498f, 0.003996f, -0.006541f, 0.004122f, -0.004635f, -0.002133f, -0.000776f, -0.003721f, -0.001192f, 0.000656f, 0.001412f, 0.004636f, -0.003757f, -0.003039f, -0.000657f, 0.000762f, -0.003298f, -0.010259f, -0.001808f, -0.003812f, -0.001863f, -0.001430f, 0.001882f, 0.002325f, 0.006393f, 0.004997f, -0.001661f, 0.003831f, 0.001822f, 0.011018f, -0.001921f, -0.000284f, 0.001389f, 0.008066f, -0.001589f, -0.008396f, -0.003902f, -0.008060f, 0.001975f, -0.002864f, -0.000662f, -0.001012f, - 0.001965f, 0.000784f, 0.001659f, 0.004678f, 0.008618f, -0.003818f, -0.002082f, 0.001714f, -0.004018f, -0.000564f, 0.006747f, -0.003649f, 0.008337f, 0.000842f, -0.002914f, 0.005486f, -0.007443f, -0.001946f, -0.005155f, 0.007319f, -0.000129f, -0.002746f, -0.001895f, 0.000049f, 0.006943f, 0.000229f, 0.008349f, 0.003100f, -0.006605f, 0.005403f, -0.002784f, -0.005123f, -0.003930f, 0.005530f, -0.000956f, 0.017810f, 0.002147f, 0.004378f, 0.003539f, -0.008499f, 0.000442f, -0.001406f, 0.002549f, -0.004947f, -0.002787f, 0.009094f, 0.008136f, 0.000399f, 0.003751f, -0.001214f, 0.005445f, -0.008155f, 0.001630f, 0.005191f, 0.004746f, -0.000266f, 0.001025f, 0.002454f, -0.013447f, -0.012556f, -0.007446f, -0.007200f, -0.005817f, 0.002125f, 0.008879f, 0.017394f, 0.003634f, 0.004352f, 0.000236f, -0.012729f, -0.004972f, -0.004831f, -0.010983f, 0.017386f, 0.004969f, 0.006815f, 0.005135f, -0.004030f, 0.002115f, 0.016658f, 0.007047f, -0.004090f, 0.000030f, -0.004208f, 0.000721f, -0.007903f, 0.005059f, -0.002574f, -0.003088f, 0.000548f, 0.009339f, 0.000831f, 0.003542f, 0.005486f, 0.008183f, -0.013975f, - 0.000641f, 0.003420f, 0.008550f, 0.012303f, -0.006403f, -0.001499f, -0.002825f, 0.010246f, 0.006143f, 0.006571f, -0.000542f, 0.002991f, 0.021276f, -0.013177f, 0.003232f, 0.001105f, -0.008100f, 0.003600f, -0.011542f, -0.001777f, 0.003829f, -0.002792f, -0.017678f, 0.004991f, 0.002036f, -0.005175f, -0.004301f, -0.001085f, -0.001928f, 0.005935f, -0.004955f, -0.002928f, 0.002741f, -0.000619f, -0.004710f, -0.000805f, 0.005661f, -0.008332f, 0.001727f, -0.002939f, 0.018063f, 0.002084f, 0.006163f, -0.000329f, -0.005477f, 0.000830f, 0.012518f, 0.007088f, 0.007885f, 0.013878f, -0.006482f, 0.000535f, 0.012533f, 0.004569f, 0.005190f, 0.001121f, 0.001044f, 0.008028f, -0.007512f, -0.001690f, 0.009137f, -0.006278f, 0.003203f, 0.005865f, -0.004754f, 0.004386f, 0.012418f, -0.005876f, 0.004184f, 0.001326f, -0.000136f, 0.000445f, -0.003371f, -0.008635f, -0.003423f, -0.007208f, -0.001465f, 0.003351f, 0.005553f, 0.006817f, -0.001893f, -0.010966f, -0.001741f, 0.016476f, -0.006775f, 0.003448f, -0.003672f, -0.017013f, 0.009255f, 0.002627f, 0.006664f, -0.001163f, 0.007683f, 0.008307f, -0.015392f, 0.005845f, - -0.000373f, 0.005447f, -0.001910f, -0.010298f, -0.001327f, -0.001564f, -0.002727f, -0.002117f, 0.005680f, -0.000303f, 0.000431f, 0.012867f, 0.001742f, 0.010003f, -0.000441f, 0.000277f, 0.001342f, -0.006885f, -0.009470f, 0.029939f, 0.017459f, 0.025535f, 0.008810f, -0.011243f, 0.005878f, -0.005318f, 0.001071f, 0.002005f, -0.021832f, -0.006446f, -0.005803f, 0.005155f, 0.008979f, -0.004175f, -0.000258f, 0.002314f, 0.000932f, 0.015217f, -0.001540f, -0.017284f, 0.005600f, -0.010297f, 0.007548f, 0.007716f, 0.006862f, 0.009081f, -0.002247f, -0.004157f, 0.004072f, -0.003731f, -0.003801f, 0.002011f, -0.002543f, 0.005048f, 0.008452f, -0.004519f, -0.012813f, 0.003222f, -0.012490f, -0.008954f, -0.001637f, -0.026867f, 0.000155f, -0.005376f, 0.010028f, 0.008648f, 0.004523f, 0.014787f, 0.015774f, 0.005953f, 0.003331f, -0.002321f, 0.000518f, -0.000313f, -0.007536f, 0.013552f, -0.002311f, 0.003829f, -0.005074f, -0.007039f, -0.002455f, -0.009930f, 0.007009f, -0.005462f, -0.003640f, 0.012887f, -0.012660f, -0.005481f, 0.002475f, -0.007473f, -0.002333f, -0.002584f, 0.004400f, 0.003517f, 0.003317f, 0.006784f, - -0.012571f, -0.025595f, -0.010525f, -0.001745f, 0.002763f, -0.002263f, 0.007039f, -0.000721f, 0.011993f, -0.010665f, 0.005864f, -0.001832f, 0.022922f, 0.011121f, -0.006284f, -0.009174f, 0.004493f, -0.013504f, -0.008866f, 0.006740f, -0.006206f, -0.007592f, 0.015529f, 0.008046f, -0.002020f, -0.006515f, -0.011429f, 0.008188f, 0.004343f, 0.006420f, -0.001522f, -0.001392f, -0.007468f, 0.010964f, -0.013808f, -0.004245f, -0.001660f, 0.010297f, 0.005867f, 0.000608f, 0.008925f, 0.002539f, -0.005732f, 0.003336f, -0.005708f, -0.003518f, -0.006673f, 0.008393f, -0.006204f, 0.001224f, 0.008263f, 0.015315f, 0.013188f, 0.007295f, 0.004021f, 0.000598f, 0.007048f, -0.001655f, 0.010593f, -0.000365f, 0.006417f, 0.007420f, -0.005711f, 0.002420f, -0.006135f, 0.007578f, 0.004047f, 0.004072f, -0.002603f, -0.007424f, 0.006142f, -0.007980f, -0.001891f, -0.008360f, 0.003787f, 0.003232f, -0.001328f, -0.003500f, -0.012655f, -0.025846f, -0.021302f, 0.001541f, -0.018245f, -0.008637f, -0.025741f, -0.013345f, -0.015801f, 0.006395f, -0.008579f, -0.010824f, -0.004071f, 0.000816f, -0.006853f, -0.024534f, 0.006334f, -0.004171f, - 0.002167f, -0.010996f, 0.010837f, 0.004340f, -0.000086f, -0.009762f, -0.004788f, 0.012864f, 0.008273f, 0.000764f, -0.002259f, -0.008291f, 0.004912f, 0.002954f, 0.005087f, -0.009961f, -0.001359f, -0.008048f, -0.007842f, -0.007863f, 0.000396f, 0.016631f, -0.013841f, 0.000523f, -0.013226f, 0.001550f, 0.005437f, 0.007698f, -0.013962f, 0.013791f, 0.015871f, -0.005124f, -0.004472f, -0.002557f, -0.001243f, 0.005551f, 0.006000f, 0.002004f, 0.003850f, -0.007603f, -0.002250f, -0.002529f, 0.013387f, -0.003926f, 0.014846f, 0.000166f, -0.005639f, 0.013127f, -0.002210f, -0.006683f, 0.001677f, 0.014457f, 0.014469f, 0.000031f, -0.006094f, -0.006822f, 0.003978f, -0.020607f, -0.019585f, -0.023616f, 0.007269f, -0.019215f, -0.007349f, 0.017565f, 0.009248f, -0.020819f, -0.000910f, -0.000265f, 0.009404f, 0.012844f, 0.023196f, -0.006620f, -0.007714f, -0.022825f, -0.026978f, -0.016687f, -0.005061f, 0.010709f, -0.010671f, 0.004902f, -0.015349f, 0.015947f, -0.011403f, 0.012706f, -0.005660f, 0.001352f, 0.003907f, -0.003159f, -0.011240f, 0.018030f, -0.015544f, -0.001332f, -0.008076f, 0.001736f, -0.009485f, 0.001746f, - -0.039629f, 0.000095f, 0.019133f, -0.024434f, 0.005924f, 0.015725f, 0.006330f, -0.013027f, -0.000908f, 0.019017f, -0.023715f, -0.000715f, 0.010376f, 0.008844f, 0.009778f, -0.004171f, -0.003034f, -0.016353f, -0.007304f, 0.005672f, 0.011126f, 0.016221f, 0.021169f, -0.031354f, 0.012034f, -0.010097f, 0.002629f, -0.022482f, -0.008397f, 0.016671f, 0.004627f, 0.001244f, -0.011614f, -0.001386f, 0.011483f, 0.006573f, 0.004781f, 0.002236f, 0.024107f, 0.039817f, 0.022384f, 0.025903f, 0.004121f, 0.009102f, 0.035206f, -0.001246f, 0.001209f, 0.023844f, -0.011566f, -0.000089f, 0.007068f, 0.011814f, 0.019966f, -0.016253f, -0.022787f, 0.012517f, 0.007219f, -0.013480f, 0.003054f, 0.008049f, -0.004913f, 0.004565f, -0.012153f, -0.002936f, -0.014220f, 0.004303f, 0.015974f, 0.004756f, 0.014035f, 0.010523f, 0.011481f, -0.027448f, 0.001710f, 0.031662f, -0.003487f, -0.000696f, 0.029945f, -0.004029f, -0.000710f, 0.004271f, -0.003542f, -0.000983f, 0.016793f, 0.025657f, -0.024885f, -0.004223f, 0.005512f, -0.007856f, 0.012451f, -0.004096f, 0.001726f, 0.001820f, -0.004911f, 0.022644f, -0.002233f, -0.008273f, - 0.009249f, -0.008546f, -0.013308f, 0.004942f, 0.016409f, 0.005956f, -0.000625f, 0.003314f, 0.016056f, 0.007999f, 0.014745f, 0.004395f, 0.003455f, 0.000419f, -0.010744f, -0.001894f, -0.007251f, 0.067067f, 0.009759f, -0.001793f, 0.000027f, -0.032695f, -0.009005f, 0.002826f, -0.007058f, 0.014011f, 0.006805f, 0.022905f, -0.002398f, -0.000183f, -0.004415f, -0.009979f, 0.016142f, 0.002755f, 0.006583f, 0.008583f, 0.012832f, -0.011547f, -0.010812f, -0.013395f, -0.008526f, -0.007683f, -0.002570f, -0.018317f, -0.002781f, 0.029524f, 0.014763f, -0.005595f, -0.001117f, -0.003422f, 0.003383f, 0.010538f, -0.004157f, 0.042303f, -0.006335f, -0.001015f, -0.018109f, 0.007817f, 0.019500f, -0.002974f, -0.012955f, -0.001607f, 0.008282f, 0.014384f, 0.007348f, 0.020148f, 0.030976f, 0.009980f, 0.000733f, 0.017971f, 0.015833f, 0.005759f, 0.012635f, -0.036582f, 0.010170f, 0.001416f, -0.031056f, 0.012492f, 0.001005f, -0.013603f, 0.011108f, -0.014429f, -0.012542f, 0.017908f, 0.015817f, -0.007146f, -0.026621f, -0.012542f, 0.009512f, -0.016122f, -0.000567f, 0.007658f, 0.031622f, -0.004923f, -0.034410f, 0.021202f, - -0.002779f, -0.024383f, 0.000473f, 0.019681f, -0.022545f, -0.006324f, -0.017877f, 0.011559f, 0.005620f, -0.008337f, -0.006732f, -0.004165f, 0.014383f, 0.008658f, 0.007073f, 0.012224f, 0.013325f, 0.000065f, 0.015792f, 0.015169f, 0.008369f, 0.007926f, -0.014925f, -0.009176f, -0.009855f, 0.009236f, 0.015114f, 0.003780f, 0.005903f, -0.008842f, -0.003973f, -0.005762f, -0.002446f, -0.014992f, 0.014773f, 0.002099f, 0.002752f, -0.015899f, -0.002549f, 0.023177f, -0.015247f, -0.019133f, -0.026181f, 0.009186f, -0.019074f, 0.030115f, 0.037704f, 0.023949f, 0.016549f, 0.000900f, 0.030064f, -0.015077f, 0.024184f, -0.003127f, -0.013160f, 0.000986f, 0.003779f, -0.033453f, -0.012279f, 0.012701f, 0.004623f, -0.005289f, 0.007888f, 0.028697f, 0.022169f, -0.031194f, -0.004970f, 0.001075f, 0.002583f, 0.011649f, 0.017525f, 0.003060f, -0.021402f, 0.016921f, -0.008529f, -0.028453f, 0.001478f, 0.004879f, 0.017258f, 0.005602f, 0.046432f, 0.009208f, -0.021237f, -0.004797f, -0.018099f, 0.031897f, -0.040276f, -0.001828f, 0.025422f, -0.057001f, -0.024566f, -0.018109f, -0.021912f, -0.037198f, 0.002287f, -0.005082f, - -0.018071f, -0.000361f, 0.017034f, 0.004111f, 0.001076f, -0.009654f, 0.003206f, -0.002028f, 0.003185f, 0.001912f, 0.001566f, 0.016931f, -0.004986f, 0.001030f, 0.029195f, -0.017749f, -0.005309f, 0.007313f, 0.024967f, -0.011726f, 0.036219f, -0.009241f, -0.016495f, -0.029971f, -0.043156f, -0.009980f, -0.032463f, 0.017464f, -0.010780f, -0.021042f, 0.001856f, 0.006171f, 0.015881f, 0.017025f, 0.004741f, -0.000433f, 0.051785f, 0.032006f, -0.004716f, 0.007856f, 0.016830f, 0.016355f, 0.007467f, -0.004367f, -0.002408f, -0.006631f, -0.013749f, -0.008492f, 0.006679f, 0.044444f, -0.030233f, -0.004149f, -0.017584f, 0.032486f, -0.022585f, -0.024307f, 0.014198f, -0.011691f, -0.041800f, 0.019851f, -0.011650f, 0.015509f, -0.011244f, 0.019857f, 0.015671f, 0.016194f, 0.029563f, 0.002949f, 0.025133f, 0.007969f, 0.007199f, 0.014589f, 0.006578f, 0.002640f, 0.002053f, -0.002600f, -0.014489f, 0.011675f, -0.030329f, 0.011570f, 0.004001f, -0.011033f, -0.016070f, -0.002628f, 0.012687f, -0.016161f, -0.005199f, -0.023123f, -0.007494f, -0.028006f, 0.002125f, 0.011567f, 0.000197f, -0.005921f, -0.015837f, -0.030947f, - -0.020173f, 0.019270f, 0.007648f, -0.012120f, -0.016014f, -0.007014f, -0.001157f, -0.030783f, 0.023448f, 0.017970f, -0.027218f, -0.029898f, -0.043427f, -0.010228f, -0.052041f, 0.010140f, 0.019857f, 0.006586f, -0.003692f, -0.010890f, -0.005971f, 0.016728f, 0.020701f, 0.019958f, -0.017198f, -0.018069f, 0.015264f, -0.012809f, -0.009464f, -0.036536f, 0.011231f, 0.018120f, 0.025356f, -0.013899f, 0.038788f, 0.050468f, -0.021465f, 0.001626f, 0.010398f, -0.035946f, -0.009644f, 0.050905f, -0.000743f, -0.049559f, 0.003373f, 0.019010f, -0.003594f, 0.021165f, 0.040746f, -0.014641f, 0.036648f, 0.024156f, 0.030989f, 0.012445f, -0.027602f, -0.023891f, 0.019578f, -0.021317f, -0.040706f, -0.007877f, -0.047933f, 0.013507f, -0.005111f, 0.019777f, 0.012014f, 0.013585f, 0.003226f, 0.001806f, -0.000626f, 0.027058f, 0.009496f, -0.041133f, -0.007115f, 0.019007f, 0.027095f, 0.020164f, 0.034031f, 0.036478f, 0.023546f, -0.007672f, -0.006053f, 0.011123f, 0.063506f, -0.022735f, 0.003094f, 0.018556f, 0.023914f, -0.005636f, -0.037903f, -0.002509f, -0.010783f, -0.016518f, -0.041737f, -0.038235f, 0.010371f, -0.018737f, - -0.020214f, 0.017465f, 0.032760f, 0.048981f, -0.000995f, 0.004540f, -0.002443f, 0.040124f, -0.024276f, -0.003090f, 0.036114f, -0.032821f, 0.001506f, -0.022069f, -0.026592f, 0.015271f, 0.010239f, 0.020723f, -0.024656f, -0.060903f, -0.012189f, -0.022390f, -0.017718f, -0.013985f, 0.004523f, -0.022026f, -0.015374f, 0.003901f, 0.014963f, -0.014483f, 0.033104f, -0.005156f, 0.022773f, -0.012356f, 0.000550f, 0.016306f, -0.024010f, -0.017925f, -0.006979f, 0.025188f, -0.004688f, -0.031367f, -0.009364f, 0.002699f, -0.012535f, 0.010515f, -0.018021f, -0.021739f, 0.030834f, 0.006637f, -0.021152f, 0.012159f, -0.000935f, -0.019924f, 0.000081f, -0.031857f, -0.023987f, 0.003289f, 0.046881f, 0.016304f, 0.015881f, -0.037969f, 0.029653f, -0.005095f, 0.023153f, -0.014510f, -0.023278f, 0.010253f, -0.044501f, 0.036709f, -0.060909f, -0.041833f, 0.016378f, 0.032429f, 0.004512f, 0.039172f, -0.016271f, 0.008558f, -0.026891f, 0.036396f, 0.014285f, 0.026297f, 0.015087f, 0.004012f, -0.007312f, -0.012710f, -0.017126f, -0.010048f, 0.000816f, -0.037473f, -0.017485f, -0.002176f, -0.044272f, -0.005194f, 0.010288f, -0.044952f, - -0.041059f, 0.003544f, 0.017436f, -0.021561f, -0.093492f, -0.020254f, -0.000232f, 0.011560f, -0.031529f, 0.001993f, -0.017546f, -0.004489f, -0.025184f, -0.029074f, 0.025109f, -0.028349f, -0.033691f, -0.006652f, -0.023641f, -0.026931f, 0.008798f, -0.038720f, -0.012649f, 0.021599f, 0.051787f, 0.040848f, -0.002312f, -0.026874f, 0.008626f, 0.036532f, -0.002180f, 0.023802f, -0.007720f, 0.030272f, 0.017249f, -0.034035f, 0.051166f, -0.041037f, -0.021571f, 0.033254f, -0.039223f, 0.009906f, -0.009709f, -0.030688f, 0.002442f, 0.041989f, -0.010155f, -0.027694f, 0.015255f, 0.019494f, -0.001884f, 0.006794f, -0.064423f, 0.013014f, 0.001133f, 0.029491f, 0.013762f, -0.030085f, 0.025679f, -0.017293f, -0.004343f, -0.028330f, 0.011489f, 0.034077f, -0.009939f, -0.010362f, -0.040407f, -0.056836f, 0.027702f, -0.007463f, 0.021618f, -0.033320f, 0.019509f, 0.013027f, -0.038273f, 0.032920f, 0.037909f, -0.098062f, 0.038508f, 0.046060f, -0.009875f, 0.031313f, 0.002132f, 0.015073f, -0.005280f, -0.022067f, -0.010207f, 0.017946f, 0.007310f, -0.030018f, -0.015421f, -0.004943f, -0.010416f, -0.009459f, -0.000412f, 0.056777f, - 0.014469f, 0.010718f, -0.034006f, 0.023092f, -0.023447f, -0.001997f, 0.007220f, -0.042378f, 0.021337f, -0.017213f, 0.004769f, -0.018582f, -0.026204f, -0.001607f, 0.021933f, 0.052420f, 0.022486f, 0.003291f, 0.036713f, 0.011940f, -0.001253f, 0.003147f, 0.003735f, 0.007133f, 0.008479f, 0.034732f, 0.019246f, 0.008770f, 0.009161f, -0.007260f, -0.008474f, -0.039124f, -0.027586f, 0.001725f, -0.001170f, -0.025165f, 0.006517f, 0.024842f, -0.038481f, 0.037801f, 0.013947f, -0.017631f, 0.001969f, -0.013636f, 0.000451f, 0.021617f, 0.014718f, 0.004964f, -0.024228f, -0.008990f, -0.034374f, -0.015479f, 0.015718f, 0.010253f, 0.019374f, -0.021951f, -0.084530f, 0.131219f, -0.129816f, -0.059459f, -0.029378f, -0.009491f, 0.076538f, 0.021748f, 0.085600f, 0.020612f, -0.017188f, 0.066477f, 0.029291f, -0.023534f, 0.031671f, 0.027692f, 0.016064f, 0.025809f, 0.025945f, -0.023985f, -0.037225f, -0.027490f, 0.004268f, -0.025408f, 0.012789f, 0.006574f, 0.016553f, -0.003730f, 0.011343f, 0.002710f, 0.041638f, 0.008688f, 0.003634f, 0.011587f, -0.010137f, -0.001958f, 0.014347f, -0.027716f, -0.037877f, -0.026913f, - -0.022321f, 0.002140f, 0.010430f, -0.028005f, -0.005027f, -0.017594f, -0.065613f, 0.030804f, -0.012632f, 0.014593f, -0.035104f, -0.013601f, -0.032705f, -0.045398f, 0.015079f, 0.009209f, 0.040692f, -0.004215f, 0.035527f, -0.018261f, 0.029323f, 0.000923f, 0.042386f, -0.034363f, 0.025230f, 0.029749f, 0.015727f, 0.015586f, -0.001265f, -0.017424f, 0.048556f, 0.030200f, -0.007466f, 0.057187f, 0.010048f, 0.000280f, 0.020258f, 0.024918f, 0.080605f, 0.006900f, -0.048152f, -0.071128f, -0.037341f, -0.029538f, 0.010086f, 0.059199f, -0.000317f, -0.024531f, 0.053490f, 0.004834f, -0.041682f, 0.038914f, 0.042615f, -0.006915f, 0.000400f, -0.003231f, -0.036381f, 0.042808f, 0.003831f, 0.024800f, -0.011675f, -0.032438f, -0.056858f, 0.011884f, 0.009344f, 0.010366f, -0.006167f, 0.019825f, -0.017214f, 0.001253f, -0.035112f, -0.045250f, 0.019106f, -0.004257f, 0.017768f, -0.005006f, -0.014298f, -0.040555f, -0.062516f, 0.035686f, -0.033245f, 0.017112f, 0.035442f, -0.000118f, -0.012889f, -0.030143f, -0.018945f, 0.078027f, 0.021871f, -0.001147f, 0.014830f, -0.007647f, -0.025297f, -0.007644f, 0.049676f, -0.040051f, - -0.065331f, -0.022525f, -0.016060f, -0.097744f, -0.071111f, -0.039767f, -0.035780f, 0.013028f, 0.007953f, -0.032785f, -0.057668f, -0.024692f, -0.021573f, -0.021480f, -0.007323f, -0.013234f, -0.028031f, -0.040020f, 0.042989f, -0.037808f, 0.057547f, -0.008815f, 0.054969f, 0.075711f, -0.011991f, -0.086743f, -0.079449f, -0.019829f, 0.041691f, 0.003209f, -0.061770f, 0.048317f, -0.008488f, -0.044175f, 0.054289f, -0.099290f, -0.017879f, -0.001504f, -0.014637f, -0.016863f, 0.120593f, -0.051339f, 0.113194f, -0.007296f, 0.025922f, -0.009933f, -0.040989f, 0.069143f, 0.021497f, 0.072052f, -0.047733f, -0.051208f, 0.018813f, -0.081583f, -0.021281f, -0.014162f, -0.053008f, 0.114874f, -0.007331f, -0.121397f, 0.000955f, -0.054543f, 0.018479f, 0.028919f, 0.051069f, 0.038646f, -0.044727f, -0.030114f, -0.071148f, -0.021818f, -0.031419f, 0.031798f, 0.023818f, -0.003654f, 0.024697f, -0.014140f, -0.049559f, -0.020481f, -0.058277f, 0.064222f, -0.044318f, -0.030845f, 0.059513f, 0.015784f, 0.098586f, 0.049341f, 0.011837f, 0.054304f, -0.063589f, -0.020046f, -0.065259f, -0.060959f, -0.005183f, -0.000750f, -0.077992f, 0.101184f, - -0.004931f, -0.158306f, 0.082089f, 0.018150f, -0.033328f, -0.026254f, 0.051070f, 0.027132f, -0.029627f, -0.008834f, -0.073334f, -0.031558f, 0.032495f, -0.064634f, 0.003470f, 0.011057f, -0.018531f, -0.043224f, -0.028062f, 0.057201f, 0.024353f, -0.011974f, -0.081541f, 0.027661f, 0.053483f, 0.029714f, -0.062689f, -0.043088f, 0.001803f, 0.069453f, 0.007849f, -0.017231f, 0.012727f, 0.001915f, 0.037503f, -0.093351f, -0.078520f, 0.099259f, 0.017521f, 0.041328f, -0.092531f, 0.020293f, -0.001923f, 0.069088f, -0.059769f, -0.012275f, -0.092305f, 0.032830f, 0.071300f, 0.015634f, -0.039141f, 0.026759f, 0.102621f, -0.045018f, -0.043856f, -0.037729f, 0.017937f, 0.003523f, 0.091278f, -0.026733f, 0.011193f, -0.047804f, 0.020364f, -0.052477f, 0.003774f, 0.031959f, -0.058270f, 0.060210f, 0.025581f, -0.046341f, -0.061687f, -0.044318f, 0.005906f, 0.059421f, -0.100621f, -0.028326f, 0.117760f, 0.105011f, 0.052570f, 0.025038f, 0.023371f, 0.026131f, -0.017252f, -0.015243f, -0.035780f, 0.005633f, 0.010730f, 0.010450f, -0.002618f, -0.058607f, 0.028191f, 0.013106f, -0.042080f, -0.033946f, -0.018431f, -0.019226f, - 0.015186f, -0.013957f, -0.017928f, 0.006666f, -0.001659f, -0.030238f, 0.040647f, -0.027646f, -0.009519f, -0.028749f, -0.027557f, 0.021543f, -0.011647f, -0.002253f, 0.010453f, 0.014735f, -0.003039f, -0.038657f, 0.010040f, 0.065015f, 0.013978f, -0.097134f, -0.005657f, -0.019554f, -0.030057f, 0.022846f, 0.023206f, 0.053289f, 0.025692f, -0.062553f, 0.071232f, -0.015272f, -0.047233f, 0.148041f, -0.027881f, -0.010339f, -0.046392f, -0.113830f, 0.055110f, 0.061128f, 0.021695f, 0.024477f, -0.096608f, 0.031089f, -0.004818f, -0.021752f, -0.014095f, 0.006285f, -0.005531f, 0.017874f, 0.023435f, 0.006504f, -0.009326f, -0.025925f, 0.036526f, 0.040174f, 0.060006f, -0.056538f, -0.145124f, -0.237782f, 0.015081f, 0.244399f, 0.018091f, 0.517707f, 0.517085f, 0.188836f, 0.518008f, 0.302417f, -0.096538f, -0.011235f, -0.056529f, -0.401813f, -0.339839f, -0.236441f, -0.424013f, -0.400426f, -0.124535f, -0.255200f, -0.229368f, 0.041129f, 0.054995f, -0.062516f, 0.061530f, 0.102653f, -0.016634f, -0.003328f, 0.206828f, 0.137292f, 0.038158f, 0.152234f, 0.290175f, 0.131046f, 0.149339f, 0.367583f, 0.128640f, 0.050958f, - 0.307251f, 0.300537f, -0.012751f, 0.183327f, 0.333767f, -0.022782f, 0.061226f, 0.189320f, -0.041529f, -0.203537f, 0.051388f, -0.067082f, -0.376432f, -0.348488f, -0.331150f, -0.599368f, -0.877141f, -0.619351f, -0.858669f, -1.122897f, -0.814935f, -0.666060f, -0.893304f, -0.587591f, -0.322311f, -0.309002f, -0.121030f, 0.177932f, 0.416901f, 0.485866f, 0.661613f, 0.936922f, 0.898548f, 0.842169f, 0.935298f, 0.925396f, 0.677728f, 0.460289f, 0.266255f, -0.051362f, -0.050862f} - }, - { - {-0.004310f, 0.003591f, -0.009964f, 0.002957f, 0.004525f, 0.000052f, -0.004545f, 0.000605f, -0.001540f, -0.005226f, 0.013663f, 0.004369f, 0.003985f, 0.008358f, -0.003890f, -0.000867f, 0.000783f, -0.005747f, 0.010686f, -0.004067f, 0.001112f, -0.006109f, -0.001305f, 0.006301f, 0.000055f, 0.000470f, -0.002272f, 0.000869f, -0.007551f, 0.007910f, -0.006061f, 0.001772f, 0.005048f, -0.001075f, -0.004828f, 0.009149f, -0.000112f, -0.007862f, -0.000951f, -0.009100f, 0.003816f, -0.009680f, -0.004640f, 0.000986f, 0.002160f, 0.001496f, 0.002086f, 0.004356f, 0.006723f, -0.000797f, 0.004442f, 0.004666f, 0.003382f, -0.000126f, -0.003774f, 0.004692f, 0.001282f, 0.002884f, -0.005002f, 0.009156f, 0.007367f, -0.000719f, -0.004722f, -0.000760f, -0.000374f, -0.001779f, -0.005434f, -0.011035f, -0.001825f, 0.007026f, 0.006426f, 0.002855f, 0.013701f, -0.002339f, 0.000407f, -0.005442f, 0.019052f, -0.000757f, -0.001063f, 0.006108f, -0.002535f, 0.006963f, -0.003747f, -0.008911f, 0.003063f, 0.008952f, 0.001240f, -0.001405f, 0.011805f, 0.000379f, 0.000392f, -0.004095f, -0.002371f, 0.018493f, 0.002463f, -0.012643f, - -0.009431f, 0.013006f, -0.001325f, 0.013478f, 0.000810f, -0.002671f, -0.001427f, 0.010135f, 0.001868f, 0.021381f, 0.009301f, 0.005786f, -0.001334f, 0.004629f, 0.009542f, -0.002554f, -0.007443f, -0.009284f, -0.001948f, 0.008016f, 0.006849f, 0.010743f, 0.002857f, -0.006354f, -0.006601f, -0.002901f, 0.004335f, -0.001736f, 0.002267f, -0.001538f, -0.010010f, -0.007838f, 0.002712f, 0.006779f, 0.004096f, -0.003893f, -0.004321f, -0.000668f, 0.010317f, 0.004979f, -0.001497f, -0.002847f, 0.004578f, 0.002814f, 0.001740f, -0.005987f, 0.002320f, 0.004467f, -0.001101f, 0.007068f, 0.008682f, -0.016891f, 0.005296f, 0.002228f, 0.009708f, 0.005050f, 0.008683f, 0.017752f, -0.014352f, 0.003001f, -0.002885f, -0.000093f, -0.018522f, 0.001602f, 0.011703f, -0.017068f, -0.003119f, 0.010935f, 0.030124f, 0.003994f, 0.000172f, 0.001853f, -0.018257f, -0.000856f, 0.014128f, 0.011949f, 0.000731f, -0.000625f, 0.001536f, 0.006172f, 0.011130f, 0.011077f, 0.012630f, -0.005664f, 0.003068f, -0.000942f, 0.005146f, 0.001131f, 0.003482f, -0.019089f, -0.004728f, 0.002785f, 0.002011f, -0.010612f, 0.000142f, 0.006999f, - -0.007832f, 0.006447f, 0.006566f, 0.011088f, 0.005758f, -0.004373f, 0.006118f, 0.012440f, -0.006462f, -0.011355f, 0.004354f, 0.002588f, 0.002789f, 0.005921f, -0.004406f, -0.009123f, -0.012992f, 0.011042f, -0.001369f, -0.002503f, -0.003740f, 0.004933f, 0.000563f, 0.007275f, 0.014885f, 0.003035f, 0.001803f, -0.000538f, -0.002477f, -0.010742f, 0.018155f, 0.004495f, -0.000810f, 0.009097f, 0.000191f, -0.008689f, -0.007860f, -0.009448f, -0.013833f, 0.007795f, -0.000364f, -0.006376f, -0.002792f, -0.003194f, 0.002762f, -0.005286f, -0.009582f, 0.002259f, -0.006311f, 0.016132f, 0.021063f, 0.016946f, -0.011878f, -0.000343f, -0.001006f, 0.004601f, -0.006710f, 0.013297f, 0.008029f, -0.001802f, 0.006135f, 0.010092f, 0.000542f, 0.002496f, 0.003219f, 0.009791f, -0.001216f, 0.003672f, 0.011353f, 0.001229f, -0.000435f, -0.005053f, 0.008069f, -0.012633f, 0.004792f, -0.001759f, -0.002932f, 0.008437f, -0.008491f, -0.001038f, -0.000066f, -0.011023f, 0.004206f, -0.002254f, 0.004718f, -0.000406f, -0.005147f, 0.003275f, 0.003094f, -0.000666f, 0.009353f, -0.000806f, 0.010837f, -0.000302f, -0.007955f, -0.003500f, - -0.000048f, -0.005319f, 0.009551f, 0.004999f, 0.008098f, 0.009481f, -0.004848f, -0.010086f, -0.006945f, -0.000529f, -0.002468f, -0.002784f, 0.007222f, 0.008973f, -0.002436f, -0.028436f, -0.006361f, -0.009052f, -0.014952f, 0.004905f, 0.004260f, -0.002102f, 0.007351f, -0.001271f, 0.006245f, 0.008147f, -0.003444f, -0.010143f, -0.012146f, -0.005034f, -0.011296f, 0.000603f, 0.001539f, -0.005342f, 0.006821f, -0.005969f, 0.003777f, -0.002900f, -0.006338f, -0.017847f, -0.006566f, 0.001237f, 0.003010f, 0.004276f, -0.006264f, 0.004318f, 0.007298f, 0.001991f, 0.016241f, 0.003632f, -0.000159f, 0.012028f, -0.008500f, 0.006791f, 0.001428f, -0.004532f, -0.005675f, 0.007610f, 0.001326f, 0.002141f, -0.018623f, -0.003873f, -0.005983f, 0.018564f, 0.008386f, 0.006418f, 0.007957f, 0.008282f, 0.007155f, 0.009217f, -0.004838f, -0.002524f, 0.006197f, 0.009014f, -0.000988f, 0.010587f, -0.005662f, 0.001911f, -0.002084f, 0.008844f, 0.014395f, -0.022523f, 0.006131f, -0.006041f, 0.001128f, -0.011012f, -0.004819f, 0.001021f, -0.002496f, -0.005207f, -0.007798f, -0.004534f, 0.011163f, 0.006584f, 0.004166f, -0.002240f, - 0.001095f, 0.001053f, 0.014397f, -0.011407f, 0.014453f, -0.002016f, 0.007985f, 0.014479f, -0.008900f, 0.011199f, -0.006822f, 0.005703f, 0.002473f, 0.017064f, 0.007862f, -0.009641f, -0.015439f, 0.003503f, -0.011489f, 0.009626f, -0.002102f, 0.012573f, -0.009087f, -0.001594f, -0.007195f, 0.004302f, 0.003173f, 0.003564f, -0.000562f, -0.001392f, -0.013327f, -0.006065f, 0.011709f, -0.009036f, -0.001386f, 0.007302f, 0.000811f, -0.007077f, 0.002784f, 0.000601f, -0.001069f, -0.006138f, 0.012877f, 0.003903f, -0.017007f, -0.007963f, -0.013591f, -0.002519f, -0.011916f, -0.021669f, -0.004265f, 0.009394f, 0.027349f, 0.005774f, 0.002944f, 0.012492f, 0.000457f, -0.009911f, -0.007753f, 0.006910f, 0.003633f, 0.004602f, 0.008657f, -0.019027f, -0.003592f, -0.017576f, -0.002672f, 0.004535f, -0.005616f, -0.016514f, 0.003040f, 0.006148f, -0.001824f, 0.030852f, 0.007096f, 0.022411f, -0.010585f, -0.001203f, -0.007568f, -0.001454f, 0.023418f, -0.019839f, 0.006611f, 0.002564f, 0.030748f, 0.016732f, 0.020380f, 0.004051f, -0.005183f, 0.009989f, -0.006810f, -0.025261f, 0.004815f, 0.001801f, 0.002967f, 0.020527f, - 0.001901f, -0.011484f, -0.001043f, 0.000910f, 0.006419f, 0.007372f, -0.000564f, -0.002241f, 0.008296f, -0.009232f, -0.002573f, -0.004463f, -0.002368f, 0.002919f, 0.000499f, 0.018206f, 0.002712f, 0.014397f, 0.016262f, 0.004904f, 0.014390f, -0.000594f, 0.004926f, 0.009086f, -0.009051f, -0.013439f, 0.002033f, 0.014471f, -0.022052f, 0.007126f, -0.016815f, -0.015577f, -0.009453f, -0.003990f, -0.014682f, -0.014182f, -0.015026f, -0.007509f, -0.003351f, 0.010808f, 0.000801f, 0.012838f, 0.002484f, -0.009918f, 0.016363f, -0.016043f, -0.005475f, -0.006545f, -0.005905f, -0.008541f, -0.010474f, 0.016285f, 0.013885f, -0.007197f, -0.015354f, -0.017841f, -0.008630f, -0.011436f, -0.004303f, -0.005447f, -0.018711f, -0.017206f, -0.012371f, -0.003344f, -0.000073f, -0.003799f, 0.014835f, 0.000060f, 0.008160f, 0.009212f, 0.013393f, 0.000569f, 0.025174f, 0.028842f, 0.000374f, 0.007328f, 0.007808f, -0.005134f, 0.014195f, 0.005680f, -0.026233f, -0.002433f, -0.008472f, 0.000013f, 0.021937f, 0.006767f, -0.020835f, -0.007412f, 0.010556f, 0.007917f, 0.002197f, 0.026103f, -0.010679f, 0.009448f, 0.012190f, 0.010570f, - 0.008070f, 0.012557f, -0.023692f, 0.007029f, -0.008777f, 0.012538f, 0.001306f, 0.004182f, -0.017642f, 0.011332f, 0.010505f, -0.004634f, 0.010175f, -0.003953f, 0.003328f, -0.002664f, -0.008928f, -0.000127f, -0.005493f, 0.003221f, -0.006953f, 0.006439f, 0.003545f, 0.020366f, 0.018181f, -0.009064f, 0.006814f, -0.023338f, 0.017403f, -0.009752f, 0.010807f, 0.013029f, 0.018327f, -0.005905f, 0.018402f, 0.001503f, 0.015908f, -0.014158f, -0.003771f, 0.012779f, -0.006817f, 0.021850f, -0.006989f, -0.015303f, 0.028903f, 0.039429f, 0.008709f, -0.015423f, 0.010832f, -0.008071f, 0.016127f, 0.009533f, -0.003554f, -0.016321f, -0.010804f, -0.027839f, 0.007300f, 0.012121f, -0.024738f, -0.002740f, 0.014324f, 0.003969f, -0.001239f, 0.000834f, -0.003072f, -0.013105f, 0.003202f, 0.016892f, 0.000623f, 0.003919f, 0.005942f, 0.023866f, -0.015553f, -0.000019f, 0.016994f, -0.015163f, 0.022842f, 0.001697f, 0.032127f, -0.026261f, -0.024284f, 0.013912f, 0.001064f, -0.002540f, 0.006781f, -0.001470f, 0.008806f, 0.006336f, 0.017732f, 0.017993f, -0.014331f, 0.003600f, -0.009472f, -0.004433f, 0.010441f, -0.000065f, - -0.005850f, -0.000959f, 0.000125f, 0.017654f, -0.031082f, 0.025194f, -0.007860f, -0.008280f, 0.016643f, -0.011452f, 0.013013f, -0.015761f, -0.011786f, 0.000322f, -0.016038f, 0.000372f, -0.019653f, -0.014713f, -0.006716f, -0.013802f, -0.021439f, -0.004331f, 0.007511f, 0.026203f, 0.004006f, -0.015632f, -0.029411f, -0.005988f, 0.008780f, -0.005013f, 0.031030f, 0.009929f, -0.011381f, -0.022081f, -0.028004f, -0.052376f, -0.004627f, -0.005741f, 0.019719f, 0.014895f, -0.011131f, 0.001387f, -0.008727f, -0.004525f, 0.018409f, -0.000495f, 0.000531f, -0.002306f, 0.020884f, 0.003603f, -0.006953f, -0.001093f, -0.001364f, 0.005745f, -0.020074f, -0.006185f, -0.008309f, 0.030728f, 0.006479f, -0.032466f, 0.007600f, -0.016900f, -0.010272f, 0.004664f, -0.031018f, 0.009259f, 0.020780f, 0.019135f, 0.013997f, 0.003517f, 0.004945f, -0.001147f, 0.001967f, -0.019201f, 0.005546f, -0.029977f, -0.007222f, 0.016799f, 0.004541f, 0.017183f, 0.015314f, 0.013920f, -0.011932f, -0.022337f, -0.021758f, -0.015302f, 0.001793f, 0.005397f, 0.006414f, 0.009382f, -0.002786f, 0.005683f, 0.013119f, 0.015366f, 0.027131f, 0.031479f, - 0.022723f, 0.038914f, -0.018201f, 0.027676f, -0.023677f, -0.018502f, 0.020462f, 0.026228f, 0.030896f, -0.031807f, -0.000180f, 0.008122f, -0.023612f, 0.011285f, -0.010374f, -0.016626f, 0.019094f, -0.024707f, 0.026955f, -0.025388f, 0.025254f, -0.018173f, -0.006730f, -0.001519f, -0.033357f, -0.004462f, 0.036827f, -0.009224f, -0.026278f, 0.005832f, 0.017114f, -0.018958f, 0.009529f, 0.040036f, 0.021426f, 0.008317f, 0.017632f, -0.020769f, 0.014083f, -0.012341f, -0.036230f, -0.010668f, -0.009460f, 0.003047f, 0.016460f, 0.020698f, -0.008979f, -0.015477f, 0.014490f, 0.000557f, 0.011092f, 0.007414f, -0.005896f, 0.002524f, -0.014411f, 0.002788f, 0.004595f, 0.000460f, 0.004742f, 0.033463f, -0.004043f, 0.004048f, 0.009385f, 0.002867f, 0.004064f, -0.015603f, -0.018156f, 0.013890f, -0.021574f, -0.027981f, -0.030700f, -0.024275f, -0.040894f, 0.015157f, 0.051045f, 0.026363f, -0.010624f, -0.039219f, -0.014836f, 0.003524f, 0.004733f, -0.006829f, 0.018852f, 0.014297f, -0.015457f, -0.006543f, -0.002818f, -0.025555f, 0.036070f, -0.015781f, 0.012298f, -0.002025f, -0.009562f, -0.031306f, 0.009754f, 0.007822f, - -0.004897f, 0.005030f, 0.013642f, -0.004154f, 0.035244f, -0.006929f, -0.006385f, 0.031300f, -0.004247f, -0.020421f, -0.020232f, -0.036129f, 0.004226f, -0.007044f, -0.012532f, -0.006870f, -0.028353f, -0.010177f, -0.026638f, 0.004067f, -0.023593f, 0.021769f, -0.013807f, 0.000962f, 0.005266f, 0.003947f, 0.010657f, -0.009407f, -0.028928f, 0.013544f, -0.004463f, 0.008404f, -0.007560f, -0.001264f, -0.000646f, 0.028277f, 0.038368f, 0.012453f, -0.014320f, 0.015434f, 0.012522f, 0.017519f, -0.008805f, -0.011715f, 0.017716f, 0.011289f, 0.024006f, 0.007927f, 0.003145f, 0.002227f, 0.002388f, 0.025292f, 0.016996f, 0.017231f, 0.075175f, 0.004327f, -0.023127f, 0.066964f, 0.030318f, 0.030991f, 0.053766f, 0.058333f, 0.013620f, 0.020277f, 0.011663f, 0.063210f, 0.000724f, -0.018850f, 0.023795f, 0.008181f, -0.026133f, -0.024069f, 0.020894f, 0.025261f, 0.041139f, -0.001610f, 0.000671f, 0.003282f, 0.003454f, -0.023180f, 0.026614f, 0.023055f, 0.006379f, -0.017317f, 0.028259f, -0.006502f, -0.004279f, -0.038087f, -0.011634f, -0.000142f, -0.005330f, -0.018600f, 0.011386f, -0.017021f, -0.014329f, -0.008616f, - 0.002971f, -0.010683f, -0.021816f, -0.022822f, 0.024644f, -0.016464f, 0.026328f, 0.016576f, 0.020993f, 0.011170f, -0.027822f, 0.002628f, -0.042856f, -0.014253f, -0.025001f, 0.012519f, -0.031032f, -0.010458f, -0.008736f, 0.004991f, 0.024535f, 0.008112f, -0.008580f, -0.039933f, 0.013690f, 0.021648f, -0.005733f, 0.006621f, -0.028086f, 0.025925f, -0.003651f, -0.009540f, 0.047252f, 0.026589f, -0.024107f, -0.042814f, 0.012815f, 0.013546f, -0.013882f, 0.028700f, -0.031649f, 0.034376f, -0.024901f, -0.013703f, 0.010428f, 0.008368f, 0.086921f, 0.034688f, 0.012625f, -0.053983f, -0.001915f, -0.012381f, -0.029367f, -0.007824f, -0.011026f, -0.008980f, -0.003695f, -0.044748f, -0.001332f, -0.016541f, 0.000104f, 0.022714f, -0.024515f, 0.029304f, -0.009850f, -0.031034f, -0.028747f, 0.023395f, 0.016955f, -0.006369f, -0.016076f, 0.029699f, -0.016078f, -0.013974f, 0.022300f, 0.000162f, 0.006548f, -0.022595f, -0.001244f, -0.012894f, 0.028736f, -0.003464f, 0.041421f, -0.014673f, 0.005851f, 0.013661f, -0.001630f, 0.002712f, 0.012351f, -0.025811f, -0.004736f, 0.035675f, 0.002405f, 0.010813f, -0.000676f, -0.026417f, - 0.011611f, -0.017860f, 0.009663f, 0.031850f, 0.038855f, 0.044514f, 0.044768f, -0.007489f, 0.015897f, 0.002074f, 0.024573f, 0.057010f, -0.058372f, 0.049217f, -0.023402f, 0.007550f, -0.019665f, -0.047346f, -0.007693f, 0.008055f, 0.001915f, 0.009546f, -0.032944f, -0.005900f, -0.005716f, -0.049967f, -0.036404f, 0.018118f, 0.021546f, 0.008102f, 0.015282f, -0.026197f, -0.010880f, -0.018940f, 0.054639f, 0.011526f, 0.002870f, 0.038630f, 0.024383f, 0.018785f, 0.019511f, 0.014399f, -0.026636f, 0.018921f, 0.009719f, -0.009961f, 0.017446f, -0.015518f, -0.012410f, 0.026468f, -0.010448f, 0.016153f, 0.038433f, -0.000120f, 0.008795f, -0.002086f, 0.004208f, -0.009467f, -0.019653f, -0.028738f, -0.042269f, 0.016579f, -0.035405f, 0.012465f, 0.016775f, 0.017193f, 0.002437f, -0.000592f, -0.002800f, -0.030662f, -0.011080f, 0.012741f, -0.007204f, 0.013099f, 0.039779f, -0.013451f, 0.031401f, 0.010583f, 0.006718f, -0.004094f, -0.006047f, -0.029434f, 0.003347f, -0.039112f, -0.007421f, 0.035283f, -0.014656f, 0.002228f, -0.056446f, 0.025633f, -0.002061f, 0.003944f, -0.031763f, -0.042376f, 0.013958f, 0.012462f, - 0.038047f, -0.090117f, -0.022186f, -0.053512f, 0.018069f, -0.048049f, -0.016117f, -0.054454f, 0.014591f, -0.028372f, -0.021780f, -0.004607f, -0.046258f, -0.016778f, -0.049557f, -0.024988f, -0.057379f, 0.012445f, -0.053078f, -0.020941f, -0.027549f, -0.015400f, -0.014534f, -0.012339f, -0.050649f, -0.028925f, -0.038514f, -0.019725f, -0.011074f, 0.021972f, -0.003100f, 0.016420f, -0.031488f, -0.005066f, 0.001893f, -0.036297f, 0.007102f, -0.002484f, 0.003150f, 0.009585f, -0.036753f, -0.002029f, 0.013627f, -0.004511f, 0.015339f, 0.030597f, 0.055396f, -0.045993f, 0.002815f, 0.061553f, 0.000249f, 0.030187f, -0.021673f, 0.038087f, 0.006816f, -0.009208f, -0.051421f, -0.030285f, 0.042160f, 0.026035f, 0.041020f, 0.001242f, -0.029628f, 0.010203f, 0.014049f, 0.029184f, -0.057000f, -0.000265f, 0.008597f, -0.031622f, -0.013197f, -0.014517f, -0.023577f, -0.046258f, 0.057133f, -0.004656f, -0.025683f, 0.038344f, -0.064922f, -0.000758f, -0.013084f, 0.027840f, -0.014570f, -0.040110f, 0.034467f, -0.070317f, -0.060835f, -0.050201f, 0.028073f, -0.015260f, 0.001034f, -0.027689f, -0.026364f, -0.030646f, 0.016201f, 0.013970f, - 0.048074f, 0.022242f, 0.009066f, 0.044640f, -0.012966f, 0.015576f, -0.017333f, 0.013216f, 0.007222f, 0.025995f, 0.042724f, 0.021684f, -0.010242f, -0.028074f, -0.017178f, -0.006869f, 0.023325f, -0.009624f, 0.005523f, -0.000700f, -0.012712f, 0.021503f, -0.002957f, 0.017205f, 0.012617f, -0.039321f, 0.029118f, 0.054314f, 0.007087f, 0.044908f, 0.043952f, 0.018211f, 0.013263f, -0.002633f, 0.022200f, -0.018021f, -0.057020f, -0.021112f, 0.038649f, -0.003108f, -0.022471f, 0.017178f, 0.055596f, -0.017477f, 0.001971f, -0.046676f, 0.038756f, 0.031691f, -0.005333f, 0.005728f, -0.021587f, 0.087690f, -0.062179f, -0.061313f, -0.050456f, 0.100979f, -0.019889f, 0.054929f, 0.102984f, -0.037057f, 0.050991f, 0.018177f, -0.059829f, 0.054509f, 0.011869f, -0.030503f, 0.045556f, 0.015086f, 0.043023f, -0.003306f, -0.030381f, 0.028833f, 0.014192f, -0.002780f, 0.013302f, -0.012562f, -0.032229f, -0.024134f, -0.013666f, -0.033701f, -0.019446f, -0.008757f, 0.027078f, -0.024114f, -0.009257f, -0.033242f, 0.009924f, -0.000345f, 0.008400f, 0.038648f, -0.021313f, 0.007058f, -0.019469f, -0.016047f, 0.027561f, -0.022093f, - -0.038960f, -0.057913f, 0.066951f, 0.024959f, -0.011834f, 0.040387f, -0.036158f, -0.038323f, -0.017367f, -0.006838f, 0.010430f, -0.003133f, -0.033183f, -0.030987f, -0.024973f, -0.067845f, -0.035782f, -0.038477f, 0.016757f, 0.017319f, 0.002718f, 0.032705f, 0.011689f, -0.043318f, -0.028328f, 0.044691f, -0.038128f, -0.000299f, 0.049179f, -0.013331f, -0.070321f, 0.043520f, -0.022099f, -0.004421f, 0.009786f, 0.021400f, -0.049722f, 0.029548f, -0.013539f, 0.050394f, 0.035896f, -0.082235f, -0.009541f, 0.007969f, -0.048966f, -0.008793f, -0.007473f, 0.059516f, 0.044094f, 0.039505f, 0.050721f, -0.002623f, -0.034597f, -0.027975f, -0.027470f, 0.000544f, -0.077383f, 0.008550f, 0.067063f, -0.061568f, -0.109326f, 0.010356f, -0.040736f, 0.080097f, -0.000285f, 0.001827f, 0.054453f, -0.025693f, 0.011287f, -0.003346f, -0.014662f, 0.046288f, -0.013583f, 0.023014f, 0.079155f, -0.059108f, -0.033399f, -0.053929f, 0.026242f, 0.003631f, 0.052741f, -0.031163f, 0.020514f, 0.002112f, 0.047828f, 0.027783f, -0.024195f, -0.016333f, 0.017592f, -0.009275f, -0.002950f, -0.034567f, -0.034577f, 0.017337f, -0.008570f, -0.010098f, - -0.020339f, 0.043760f, -0.017950f, -0.017291f, 0.071837f, 0.079058f, 0.049098f, -0.065540f, -0.007814f, -0.019149f, 0.023793f, 0.100513f, -0.014693f, -0.069869f, -0.007621f, -0.022872f, 0.037897f, -0.048971f, 0.008220f, -0.040429f, 0.037179f, 0.019662f, -0.037513f, 0.064322f, 0.100221f, 0.001549f, -0.003782f, -0.035312f, -0.033590f, 0.004416f, 0.006485f, -0.018178f, 0.090554f, -0.009580f, 0.067675f, 0.052174f, -0.067078f, -0.003719f, -0.022126f, -0.074057f, 0.018788f, 0.015084f, 0.040033f, 0.066009f, -0.001623f, -0.021175f, 0.022674f, 0.022696f, 0.053684f, 0.020405f, 0.005182f, 0.041913f, 0.046462f, 0.013839f, -0.010439f, 0.038142f, 0.018096f, 0.046199f, 0.010461f, 0.011688f, 0.030329f, 0.048919f, -0.008551f, -0.043053f, -0.047016f, -0.017827f, -0.016423f, 0.078050f, 0.044054f, 0.121791f, -0.005982f, -0.065502f, 0.055010f, -0.021821f, -0.021759f, -0.021786f, -0.042649f, 0.003155f, 0.023433f, -0.004152f, -0.024118f, 0.085039f, -0.018112f, 0.100779f, -0.029119f, 0.052366f, 0.004225f, -0.021682f, -0.057931f, -0.085723f, 0.074528f, -0.012274f, -0.017107f, -0.028637f, -0.036060f, 0.023971f, - 0.090780f, -0.053243f, -0.036905f, 0.009174f, 0.015089f, -0.008763f, 0.063824f, 0.052636f, 0.049893f, 0.019103f, 0.023869f, 0.045016f, 0.025218f, -0.013910f, -0.027265f, -0.056331f, -0.010860f, 0.033719f, 0.009501f, 0.008701f, -0.023038f, -0.053149f, -0.017403f, -0.005886f, 0.054728f, 0.002609f, -0.007973f, 0.044350f, -0.007984f, 0.013610f, 0.007888f, -0.092804f, 0.023150f, 0.027432f, -0.017608f, -0.038606f, 0.006691f, -0.051522f, -0.028111f, -0.079906f, 0.023865f, -0.066413f, -0.136111f, 0.017562f, -0.002537f, 0.097144f, -0.003855f, 0.034197f, 0.078227f, -0.011093f, -0.020731f, 0.036738f, -0.000876f, -0.066928f, -0.024000f, 0.010711f, 0.011633f, 0.052281f, 0.021527f, 0.046645f, 0.039814f, -0.026696f, -0.019944f, 0.020457f, 0.059053f, -0.022973f, -0.009938f, -0.052230f, -0.033543f, 0.013934f, -0.067229f, 0.019341f, -0.074240f, 0.010938f, -0.011976f, -0.002808f, -0.018683f, 0.071436f, 0.078417f, 0.179617f, 0.022331f, -0.102423f, -0.074987f, -0.057201f, -0.063591f, 0.125243f, 0.169861f, 0.055911f, -0.015198f, -0.054534f, 0.002775f, -0.065756f, 0.071631f, 0.065369f, 0.020708f, 0.008098f, - -0.041069f, -0.007727f, 0.078680f, 0.016423f, 0.032088f, 0.024549f, 0.082490f, 0.066845f, -0.025721f, -0.062737f, -0.079553f, -0.056218f, -0.007302f, 0.020195f, 0.074187f, 0.041749f, -0.014603f, 0.037377f, -0.055033f, -0.021546f, -0.124660f, -0.022521f, 0.124081f, 0.092480f, -0.018526f, 0.246957f, 0.079091f, 0.004059f, -0.136443f, -0.026866f, -0.011144f, -0.035921f, 0.035602f, 0.015381f, 0.030217f, 0.048078f, -0.111364f, -0.125287f, -0.060119f, -0.086542f, -0.011278f, 0.021727f, 0.101387f, -0.067012f, 0.036991f, 0.150429f, 0.078497f, 0.019056f, 0.043318f, 0.022306f, -0.097151f, -0.169753f, 0.076873f, -0.054703f, 0.025924f, -0.038273f, -0.166066f, -0.039601f, 0.091417f, 0.176217f, 0.154474f, 0.372419f, 0.193796f, 0.131382f, 0.114717f, 0.051561f, -0.023152f, -0.190428f, -0.239351f, -0.355352f, -0.273442f, -0.279996f, -0.108946f, -0.001564f, 0.102428f, 0.194305f, 0.158826f, 0.164775f, 0.111487f, 0.154413f, 0.119015f, 0.170990f, 0.078036f, 0.060482f, 0.025259f, -0.050579f, -0.076005f, -0.112286f, -0.071410f, -0.237476f, -0.105280f, -0.225653f, -0.166083f, -0.257841f, -0.157757f, -0.241150f, - -0.092429f, -0.124329f, -0.048069f, 0.008284f, 0.106964f, 0.299794f, 0.283119f, 0.402590f, 0.266839f, 0.178844f, 0.233685f, 0.325540f, 0.282507f, 0.235893f, 0.157570f, 0.005045f, -0.188363f, -0.185945f, -0.229439f, -0.416584f, -0.461417f, -0.499383f, -0.502732f, -0.548466f, -0.482376f, -0.410324f, -0.370721f, -0.253221f, -0.015646f, 0.207463f, 0.383357f, 0.519828f, 0.649420f, 0.721260f, 0.460142f, 0.396603f, 0.104326f, -0.042561f, -0.032024f}, - {-0.011786f, 0.000611f, -0.009485f, -0.003189f, 0.004308f, 0.002622f, 0.006006f, -0.007800f, 0.004362f, -0.001018f, -0.007320f, 0.008648f, -0.004126f, -0.001790f, -0.005930f, -0.004928f, 0.005874f, -0.005754f, 0.003214f, 0.008122f, -0.000781f, 0.004544f, -0.002647f, 0.000149f, 0.003770f, -0.001088f, 0.007811f, -0.000324f, -0.011994f, -0.000271f, 0.001971f, 0.005270f, -0.005409f, 0.000867f, 0.001731f, -0.001060f, 0.005194f, -0.000944f, 0.007245f, 0.006432f, -0.004064f, -0.000427f, 0.006543f, -0.013184f, -0.007455f, 0.002872f, -0.006690f, -0.001501f, 0.002754f, -0.000031f, 0.007975f, 0.008822f, 0.002034f, 0.003727f, 0.004533f, 0.004713f, -0.001392f, 0.001315f, 0.004308f, 0.005789f, 0.000824f, -0.003972f, -0.007476f, -0.004885f, -0.000156f, -0.000803f, -0.000614f, -0.010294f, 0.009371f, -0.002942f, 0.001328f, -0.003240f, -0.006296f, 0.003120f, -0.001266f, 0.003555f, 0.024097f, 0.001053f, 0.004067f, 0.003340f, -0.009806f, -0.005118f, 0.013335f, 0.023166f, 0.003733f, 0.012311f, -0.005036f, 0.002275f, -0.000666f, 0.010397f, -0.008332f, -0.019014f, 0.007615f, 0.008763f, -0.011084f, 0.012689f, - 0.006246f, 0.011554f, 0.003631f, 0.002645f, -0.005169f, -0.001777f, 0.000532f, 0.007625f, 0.000619f, -0.011887f, 0.000426f, -0.001134f, 0.002439f, -0.001832f, 0.001985f, 0.002597f, 0.006875f, 0.004837f, 0.001553f, 0.001939f, 0.000573f, 0.003162f, -0.003735f, -0.006126f, -0.013111f, 0.002207f, 0.002718f, 0.000730f, 0.009803f, -0.003864f, 0.007583f, 0.001771f, -0.003233f, -0.006519f, -0.004119f, 0.013514f, 0.002831f, 0.007330f, 0.001143f, 0.002592f, -0.002825f, -0.000031f, 0.000785f, 0.003460f, -0.001345f, -0.005777f, -0.002940f, -0.011440f, 0.001084f, 0.001411f, 0.009144f, -0.003751f, 0.007000f, -0.002140f, 0.004611f, 0.008682f, 0.008863f, 0.003694f, 0.003770f, 0.004470f, 0.005946f, 0.008193f, -0.003427f, 0.008514f, 0.000348f, 0.009117f, -0.001797f, 0.016412f, 0.005906f, 0.005277f, -0.011086f, -0.001806f, -0.002318f, -0.014962f, 0.008316f, 0.006589f, -0.004406f, -0.019523f, -0.008546f, -0.003096f, 0.009670f, 0.012769f, 0.008422f, -0.005357f, 0.003017f, -0.008454f, 0.000644f, 0.000560f, -0.006496f, -0.003506f, -0.017233f, 0.001307f, -0.001948f, -0.007440f, 0.001002f, 0.000902f, - -0.002131f, -0.000643f, 0.016967f, -0.004092f, 0.013860f, 0.002606f, -0.010307f, 0.000759f, 0.001245f, 0.007669f, -0.003226f, 0.002212f, 0.002024f, 0.000663f, 0.010635f, 0.003740f, 0.010903f, 0.008048f, -0.005320f, 0.009997f, 0.004920f, 0.007433f, 0.000817f, 0.002720f, -0.002380f, -0.004146f, -0.008731f, -0.010216f, 0.011362f, -0.010442f, -0.008727f, -0.008205f, 0.005106f, 0.006321f, 0.001752f, -0.015109f, -0.013983f, 0.002986f, 0.000314f, -0.003072f, 0.008436f, -0.001139f, -0.001427f, 0.008684f, -0.009563f, 0.001847f, -0.008343f, -0.005461f, -0.002988f, 0.000059f, 0.014283f, 0.016148f, -0.007479f, 0.006307f, -0.011618f, -0.001147f, -0.004526f, 0.015688f, -0.004611f, -0.000922f, 0.001683f, -0.022168f, -0.003814f, -0.010963f, -0.003567f, -0.002745f, 0.008283f, 0.010925f, 0.004524f, 0.014777f, -0.001861f, -0.006772f, -0.006807f, 0.008522f, 0.022254f, 0.015506f, -0.008634f, -0.010162f, 0.011148f, -0.009999f, 0.001929f, 0.003519f, 0.018234f, -0.006727f, -0.008946f, 0.001958f, -0.005543f, 0.003457f, 0.004657f, 0.011549f, -0.012663f, -0.008246f, 0.007437f, 0.013959f, -0.001292f, -0.006512f, - -0.008259f, -0.019788f, 0.007466f, -0.000051f, 0.005831f, 0.000916f, 0.000416f, -0.003106f, 0.003478f, -0.005024f, 0.002901f, 0.004342f, 0.003943f, -0.006823f, 0.004522f, -0.036655f, -0.012078f, -0.001935f, 0.006251f, 0.004209f, 0.009119f, -0.017503f, -0.005244f, -0.000789f, -0.018155f, -0.012966f, 0.004564f, 0.010990f, 0.006450f, 0.012128f, -0.001541f, 0.006971f, 0.016149f, 0.014252f, 0.013398f, 0.007728f, -0.005141f, -0.004091f, -0.008270f, -0.003657f, -0.008303f, 0.017243f, 0.008043f, -0.002625f, -0.007596f, -0.004633f, -0.007750f, -0.011327f, -0.012195f, -0.015359f, 0.009337f, 0.006677f, -0.017009f, 0.004061f, -0.000823f, 0.011827f, 0.001880f, 0.005846f, 0.007731f, -0.016092f, -0.002414f, -0.000541f, 0.002253f, 0.008529f, 0.012995f, -0.005086f, -0.001706f, -0.003705f, -0.009977f, 0.003205f, 0.002247f, -0.000981f, -0.002517f, 0.009853f, 0.000838f, -0.005277f, -0.001460f, 0.004749f, 0.006674f, -0.002378f, 0.000253f, 0.001785f, -0.008179f, 0.006725f, 0.000141f, -0.013100f, 0.002595f, -0.016033f, 0.004028f, 0.012160f, -0.001844f, -0.000770f, 0.019725f, 0.008003f, 0.003014f, -0.004600f, - 0.014450f, 0.006191f, 0.008015f, 0.023949f, 0.025085f, 0.001446f, -0.004476f, -0.008532f, -0.014163f, 0.005583f, 0.009728f, -0.004682f, -0.001349f, 0.001975f, -0.002730f, -0.007567f, 0.009238f, -0.008757f, 0.004108f, -0.026333f, -0.004174f, -0.005941f, -0.006821f, -0.012671f, -0.003051f, -0.001065f, -0.000064f, -0.006140f, -0.010007f, -0.006971f, 0.000805f, -0.004355f, -0.010594f, 0.006939f, 0.008622f, 0.001513f, -0.008736f, -0.008698f, 0.003238f, -0.006476f, 0.008114f, -0.009587f, 0.006489f, 0.003369f, -0.000398f, -0.013956f, -0.014096f, 0.004219f, -0.010300f, 0.017316f, 0.002602f, 0.014760f, -0.007386f, 0.014913f, 0.002332f, 0.010098f, 0.002633f, 0.009721f, -0.008124f, -0.009578f, -0.000691f, 0.019232f, -0.002262f, -0.010148f, -0.006942f, 0.009660f, -0.005719f, -0.004506f, 0.000777f, -0.016123f, 0.011372f, 0.019450f, -0.003587f, 0.029589f, 0.005278f, 0.016566f, -0.006885f, 0.012588f, 0.008229f, 0.019223f, -0.014348f, -0.009095f, -0.003759f, 0.001784f, 0.012561f, -0.005475f, 0.019392f, -0.000764f, 0.010763f, 0.010547f, -0.006195f, 0.004776f, 0.010920f, 0.011397f, 0.002133f, 0.003697f, - 0.009901f, -0.020927f, 0.002958f, 0.017544f, 0.012524f, -0.010947f, 0.014056f, -0.016505f, 0.009924f, -0.014456f, -0.008274f, -0.003206f, 0.015309f, -0.002439f, 0.016062f, 0.004510f, 0.003015f, 0.001648f, -0.001127f, 0.007420f, 0.009203f, 0.022522f, 0.002851f, 0.019570f, -0.009751f, 0.014558f, 0.017459f, 0.000340f, -0.003765f, -0.005564f, 0.006435f, -0.024765f, -0.002651f, 0.003522f, -0.010135f, -0.014244f, -0.001345f, 0.000086f, -0.002530f, 0.007836f, -0.016158f, 0.009095f, 0.006522f, 0.011187f, -0.025144f, 0.009787f, 0.005662f, -0.013336f, -0.001906f, 0.009433f, 0.018278f, -0.021782f, -0.002200f, 0.002688f, -0.025863f, -0.031346f, -0.025367f, -0.022605f, -0.000905f, 0.016250f, -0.033368f, 0.023891f, 0.015208f, -0.037115f, 0.023431f, 0.010227f, 0.007968f, 0.003976f, 0.003551f, 0.008745f, -0.005922f, -0.005783f, -0.012313f, -0.000032f, 0.014306f, 0.012468f, 0.007051f, -0.020895f, 0.014542f, -0.014805f, 0.000439f, -0.012948f, 0.016723f, -0.008394f, -0.006843f, 0.005741f, -0.024938f, 0.002999f, -0.008192f, -0.006948f, -0.002553f, 0.002354f, 0.024739f, -0.011005f, -0.003607f, -0.008729f, - 0.018897f, -0.010703f, -0.005922f, 0.006488f, 0.005870f, 0.006047f, 0.006897f, -0.006940f, 0.009338f, 0.003188f, -0.020165f, 0.029164f, 0.011622f, 0.005593f, 0.003397f, 0.000982f, -0.012627f, 0.017377f, 0.014119f, 0.007010f, 0.018779f, 0.003437f, 0.008753f, 0.019892f, 0.010186f, 0.005850f, -0.011448f, 0.017247f, -0.005259f, 0.031346f, -0.001481f, 0.004178f, -0.005711f, -0.025214f, 0.006350f, 0.019182f, 0.011663f, -0.001323f, -0.012384f, 0.030952f, 0.047077f, -0.005572f, -0.007576f, 0.023940f, 0.004704f, 0.008376f, 0.005189f, -0.033843f, 0.002814f, -0.021652f, 0.016855f, 0.026157f, -0.007735f, -0.011655f, 0.003090f, 0.016781f, -0.010794f, 0.020122f, -0.008791f, 0.038241f, -0.012175f, 0.007874f, -0.003052f, 0.010791f, 0.025567f, -0.009558f, 0.001360f, -0.001815f, 0.006433f, -0.009404f, -0.006165f, 0.015787f, 0.031479f, 0.003263f, 0.022619f, -0.008411f, 0.001809f, -0.004035f, 0.006461f, 0.018085f, 0.024619f, 0.020937f, 0.017747f, 0.020680f, 0.011023f, -0.003230f, 0.001279f, -0.002326f, -0.001416f, 0.004467f, -0.015150f, -0.003333f, 0.019018f, -0.018129f, 0.005153f, -0.007720f, - -0.007289f, -0.009203f, -0.040843f, 0.004740f, 0.017995f, 0.013606f, -0.007741f, -0.017677f, -0.047479f, -0.006611f, 0.014135f, -0.003184f, 0.002532f, -0.013142f, 0.004300f, -0.011197f, -0.034064f, -0.025111f, 0.002326f, 0.016561f, -0.015890f, -0.008592f, 0.000872f, -0.006838f, -0.050408f, -0.041437f, 0.017538f, 0.018278f, 0.002141f, 0.003706f, -0.019076f, 0.029529f, 0.033433f, 0.022444f, -0.018723f, 0.017810f, 0.021635f, -0.002264f, -0.029614f, -0.011658f, 0.038677f, -0.010477f, 0.003044f, 0.003723f, 0.021337f, -0.016524f, -0.032730f, 0.008260f, 0.013718f, -0.006450f, 0.008460f, 0.022016f, -0.010895f, -0.006495f, -0.001822f, -0.042994f, -0.013754f, 0.016769f, -0.009324f, -0.028189f, 0.004499f, 0.000754f, -0.010224f, 0.007481f, -0.003688f, -0.026541f, -0.024758f, -0.040488f, -0.034397f, 0.008243f, 0.013858f, 0.003139f, -0.010957f, -0.012246f, -0.000605f, -0.007729f, 0.008008f, -0.018279f, -0.000337f, -0.005106f, -0.006929f, -0.004679f, -0.002988f, 0.010232f, -0.010466f, -0.037937f, 0.004669f, -0.003089f, 0.008384f, 0.014144f, -0.001122f, 0.011260f, 0.007016f, 0.016110f, 0.051713f, 0.045940f, - 0.035852f, -0.003919f, 0.035010f, 0.011269f, 0.048868f, 0.020598f, -0.001201f, 0.059601f, -0.012683f, -0.003390f, -0.038360f, -0.010352f, -0.001087f, -0.027215f, 0.015729f, 0.023604f, -0.008192f, -0.000791f, -0.022052f, -0.037594f, -0.022350f, -0.028837f, -0.008755f, -0.017698f, -0.005921f, -0.003362f, 0.016411f, 0.003579f, -0.004156f, -0.016077f, -0.005937f, -0.011059f, 0.004729f, -0.000522f, -0.015882f, 0.007014f, 0.009295f, 0.002917f, -0.012519f, -0.016512f, 0.004283f, 0.013000f, -0.002915f, -0.001823f, -0.028115f, 0.047383f, 0.007218f, -0.010738f, -0.002331f, 0.002767f, 0.019834f, 0.016065f, -0.019414f, 0.008579f, -0.008279f, 0.000347f, -0.004235f, -0.006618f, -0.029039f, -0.026985f, -0.034567f, 0.002817f, -0.002610f, -0.009416f, 0.019733f, -0.009164f, 0.057944f, -0.008448f, -0.004350f, -0.017278f, -0.007543f, -0.034154f, -0.042312f, -0.027570f, 0.036054f, 0.023744f, -0.020296f, -0.026293f, 0.038534f, 0.019122f, -0.019959f, -0.033460f, -0.002365f, 0.002768f, 0.006164f, 0.001901f, -0.015290f, 0.016427f, -0.010672f, 0.034537f, -0.002933f, -0.028416f, 0.008897f, 0.007068f, 0.002654f, 0.000460f, - -0.008534f, -0.019251f, 0.002020f, 0.012711f, -0.006212f, 0.009149f, -0.015129f, -0.050836f, -0.036301f, 0.022692f, -0.027539f, 0.022366f, 0.010382f, 0.000660f, -0.007000f, 0.012259f, 0.007955f, -0.006020f, -0.003649f, 0.004615f, 0.018255f, -0.015481f, 0.044641f, -0.012486f, 0.017455f, -0.014488f, 0.007340f, -0.005556f, -0.012290f, 0.037624f, -0.027121f, 0.041132f, 0.002486f, -0.023474f, -0.028451f, 0.014695f, 0.010176f, 0.003456f, 0.006410f, 0.015625f, 0.016436f, 0.014027f, -0.028718f, -0.011992f, 0.005989f, -0.001242f, 0.013776f, -0.026974f, -0.006931f, -0.009560f, 0.000553f, -0.031806f, -0.004327f, 0.007464f, 0.075989f, 0.026501f, -0.017967f, 0.040353f, 0.035945f, -0.018127f, -0.025032f, 0.060252f, -0.006114f, 0.013956f, -0.035986f, 0.087316f, 0.002250f, -0.023280f, 0.011792f, 0.005244f, 0.041223f, 0.001656f, 0.052272f, -0.037145f, 0.000124f, -0.040655f, 0.002536f, 0.030191f, 0.000713f, -0.024534f, 0.035497f, 0.020264f, 0.010044f, 0.009659f, -0.013188f, -0.011209f, 0.002757f, -0.017068f, 0.023154f, -0.020114f, -0.028571f, 0.025799f, 0.008992f, -0.031636f, 0.017346f, 0.003123f, - -0.024024f, -0.012323f, -0.008180f, 0.013443f, -0.002990f, -0.013316f, 0.017302f, -0.020117f, -0.008393f, -0.006273f, 0.029220f, -0.018193f, 0.014269f, 0.023326f, 0.010677f, -0.012326f, -0.026774f, 0.018162f, -0.022643f, 0.032356f, -0.038809f, 0.053147f, -0.014352f, -0.006635f, -0.005962f, 0.024438f, 0.000188f, 0.009053f, 0.016715f, 0.008618f, 0.023465f, -0.020541f, -0.033410f, -0.001347f, -0.003588f, -0.046223f, -0.005437f, 0.041745f, -0.012026f, -0.026494f, 0.011861f, -0.012602f, -0.002016f, 0.018743f, -0.045403f, -0.027135f, 0.017880f, 0.023153f, 0.032254f, -0.002612f, -0.005822f, 0.012546f, -0.002869f, -0.045501f, -0.030687f, 0.052688f, -0.003818f, -0.046911f, -0.026792f, -0.019142f, -0.015180f, 0.003872f, 0.015813f, 0.000377f, -0.007572f, -0.023700f, -0.035310f, 0.004261f, 0.004907f, -0.001790f, 0.029208f, -0.020388f, -0.055511f, 0.021975f, 0.016553f, -0.065686f, 0.039005f, -0.011207f, -0.032685f, -0.027794f, -0.002291f, 0.036238f, 0.009002f, -0.013093f, -0.013264f, 0.009680f, 0.019596f, -0.028350f, 0.021103f, 0.002345f, 0.015577f, -0.012980f, -0.028368f, 0.024061f, 0.000203f, 0.027020f, - -0.087908f, 0.009734f, 0.013718f, -0.014629f, 0.024596f, 0.026627f, 0.083833f, 0.000367f, -0.055076f, -0.027750f, -0.014178f, -0.056322f, -0.052277f, -0.000368f, -0.028334f, -0.001949f, -0.000338f, -0.036957f, 0.004665f, 0.025126f, 0.019635f, -0.032642f, 0.059175f, 0.043720f, -0.020973f, 0.026728f, -0.050651f, -0.009459f, -0.018007f, 0.079005f, 0.048125f, -0.017007f, -0.031173f, -0.034732f, -0.009649f, 0.003544f, 0.012622f, 0.053532f, 0.009417f, 0.010366f, 0.009576f, 0.002986f, -0.018867f, 0.003668f, -0.004990f, 0.025581f, 0.030582f, 0.042664f, 0.024889f, 0.019079f, -0.005888f, -0.005855f, 0.004624f, 0.038964f, 0.003942f, 0.008432f, -0.039806f, -0.017324f, 0.061796f, 0.027883f, 0.017081f, 0.002521f, 0.036071f, 0.022570f, 0.078349f, -0.002276f, 0.080764f, 0.008260f, -0.028226f, 0.029392f, -0.025000f, -0.014142f, -0.005612f, -0.012516f, -0.001898f, 0.018468f, 0.030265f, 0.009075f, -0.010263f, -0.032817f, 0.008326f, 0.006985f, 0.020303f, -0.024117f, 0.003521f, -0.007559f, -0.000287f, -0.030445f, 0.013154f, -0.024857f, -0.010260f, -0.034167f, -0.068044f, 0.010237f, -0.020413f, -0.030904f, - 0.009435f, -0.035418f, -0.000036f, 0.043247f, 0.013586f, 0.036951f, -0.042431f, -0.019322f, 0.021067f, 0.004651f, 0.061184f, -0.030547f, 0.036753f, -0.013315f, -0.018062f, -0.044884f, -0.017200f, -0.023833f, 0.030955f, 0.007749f, -0.039889f, 0.051372f, -0.025570f, -0.023645f, 0.005616f, 0.020544f, -0.014054f, 0.035910f, -0.016178f, -0.023462f, -0.011662f, 0.012607f, -0.003321f, -0.005672f, 0.004831f, 0.036031f, -0.022581f, 0.065110f, -0.023655f, 0.000378f, 0.060525f, -0.010635f, 0.011768f, -0.079507f, 0.005005f, 0.015850f, -0.016751f, 0.037128f, -0.063277f, -0.077806f, 0.031789f, -0.012473f, 0.045648f, -0.031076f, -0.029066f, 0.005294f, -0.008200f, 0.069295f, -0.006117f, -0.001156f, 0.017253f, -0.060628f, 0.005943f, -0.061179f, -0.022809f, 0.005914f, 0.017927f, -0.076634f, -0.032158f, -0.007088f, -0.000196f, 0.028512f, -0.029266f, 0.044092f, -0.009970f, -0.046145f, 0.037068f, -0.032236f, -0.012922f, 0.034739f, 0.070284f, -0.018011f, 0.057037f, 0.024161f, 0.012483f, -0.025093f, 0.063420f, 0.013202f, 0.027934f, 0.005646f, -0.042092f, 0.016889f, -0.042300f, -0.036304f, 0.021131f, -0.036206f, - -0.011608f, -0.006522f, 0.036088f, 0.005895f, -0.016554f, 0.015223f, 0.014134f, -0.005708f, -0.040569f, -0.006364f, 0.025079f, 0.071465f, 0.012400f, -0.036755f, 0.000690f, -0.005338f, 0.012928f, 0.023072f, 0.031359f, -0.013520f, -0.002978f, 0.024609f, 0.001384f, 0.000613f, 0.042359f, 0.043495f, 0.045784f, 0.018752f, 0.037756f, 0.007179f, 0.020933f, -0.018374f, -0.007764f, 0.006709f, -0.043252f, 0.003908f, 0.061369f, -0.007600f, -0.018978f, 0.014364f, -0.005661f, 0.017911f, -0.044001f, 0.051715f, -0.037487f, -0.015165f, -0.013995f, 0.001407f, 0.000863f, 0.004547f, -0.062426f, 0.068451f, -0.021179f, -0.028900f, -0.014139f, 0.116010f, -0.005342f, 0.022027f, 0.000597f, -0.013607f, 0.004923f, -0.055878f, -0.021587f, -0.018199f, 0.022789f, 0.013631f, 0.028274f, 0.001608f, -0.026922f, 0.028569f, -0.022589f, 0.033176f, 0.027178f, -0.029350f, -0.028219f, 0.002216f, 0.044073f, -0.044693f, 0.019968f, 0.018678f, -0.022945f, 0.009750f, -0.001347f, 0.013882f, -0.000044f, -0.064456f, 0.037364f, 0.020578f, -0.051337f, 0.063090f, -0.032104f, -0.009342f, -0.019095f, 0.050753f, -0.008257f, -0.045236f, - 0.001985f, -0.000403f, 0.044991f, 0.042570f, 0.005046f, -0.034640f, 0.051100f, -0.008871f, 0.010893f, -0.062970f, 0.051162f, 0.019009f, 0.005337f, -0.036462f, -0.024495f, -0.004628f, 0.019554f, -0.029409f, -0.048460f, -0.022540f, 0.043195f, 0.024286f, -0.003006f, 0.064843f, 0.007100f, -0.011379f, -0.043816f, 0.057104f, -0.049876f, -0.018214f, 0.063625f, 0.017559f, 0.013296f, -0.024079f, 0.017038f, 0.052636f, -0.044819f, -0.000774f, -0.050404f, 0.047132f, 0.079541f, 0.033626f, 0.046336f, -0.069485f, -0.057515f, -0.049284f, 0.007076f, 0.081388f, -0.012859f, 0.028979f, 0.056926f, 0.025331f, -0.027269f, -0.000200f, 0.042401f, -0.053091f, -0.039893f, -0.038602f, 0.044435f, 0.027044f, -0.050630f, -0.077571f, 0.105695f, 0.061455f, -0.070083f, 0.031310f, -0.005357f, 0.028556f, 0.006540f, -0.023931f, -0.047450f, 0.044668f, 0.002245f, -0.039431f, -0.052819f, 0.012720f, 0.016918f, -0.015963f, 0.005353f, -0.006911f, -0.023852f, -0.013912f, -0.010527f, 0.024523f, -0.045144f, 0.052897f, -0.032831f, 0.000363f, 0.090505f, -0.084453f, -0.015107f, 0.076503f, 0.010821f, 0.016608f, -0.006233f, -0.026180f, - 0.030196f, -0.010843f, -0.028474f, 0.002654f, -0.072239f, 0.131354f, -0.006334f, -0.149047f, 0.062892f, 0.142681f, 0.093396f, -0.181899f, -0.043529f, 0.030383f, 0.022695f, -0.033068f, -0.027327f, -0.036189f, 0.007435f, 0.037414f, 0.084175f, -0.035099f, 0.026436f, -0.044631f, -0.121363f, 0.065115f, -0.031870f, -0.065240f, -0.047262f, -0.066851f, 0.030143f, 0.022346f, -0.092276f, 0.057741f, -0.033702f, -0.002555f, -0.003533f, -0.046713f, 0.033101f, 0.034944f, 0.028614f, -0.003747f, 0.038119f, 0.020481f, -0.027942f, 0.001127f, -0.054632f, -0.019948f, -0.049006f, -0.033339f, -0.005823f, 0.072381f, -0.065682f, -0.015184f, -0.017309f, -0.057673f, 0.028363f, -0.065022f, 0.028047f, 0.025403f, -0.047072f, 0.030496f, -0.073113f, 0.016320f, -0.064448f, 0.034899f, -0.027590f, -0.035366f, -0.038181f, -0.052767f, -0.018999f, 0.019559f, 0.035896f, -0.054412f, 0.026163f, 0.012553f, 0.044296f, 0.056721f, 0.029078f, -0.059675f, -0.032465f, -0.106751f, -0.033653f, -0.037689f, 0.023419f, -0.125494f, -0.032157f, -0.080373f, -0.017337f, 0.054826f, 0.050430f, 0.024709f, -0.000414f, 0.071164f, -0.022843f, 0.017862f, - 0.102886f, -0.059163f, 0.035829f, 0.052755f, -0.026721f, 0.008508f, 0.014420f, -0.001908f, 0.047712f, 0.006698f, 0.033374f, -0.044077f, -0.011033f, 0.045785f, 0.002657f, -0.061300f, 0.038006f, -0.022148f, -0.025464f, -0.021043f, -0.010693f, -0.020469f, 0.020535f, 0.038355f, 0.012645f, -0.002299f, -0.022327f, 0.033680f, -0.013927f, -0.044293f, 0.035124f, -0.077340f, -0.024471f, -0.013161f, -0.021829f, 0.049592f, 0.046526f, 0.093977f, -0.030535f, 0.042034f, -0.005328f, 0.020643f, 0.055599f, -0.001276f, 0.002617f, -0.036684f, -0.128473f, 0.064616f, 0.008380f, -0.057616f, -0.044697f, 0.008580f, 0.029400f, -0.003467f, -0.038423f, 0.020396f, -0.039099f, 0.049476f, 0.024051f, -0.019352f, -0.045732f, 0.087511f, 0.007698f, 0.005133f, -0.009212f, 0.011898f, 0.005529f, 0.002847f, -0.028687f, -0.063521f, 0.018812f, -0.012728f, -0.017595f, -0.063207f, -0.001795f, -0.007637f, 0.006688f, 0.118201f, 0.061366f, 0.118946f, -0.109770f, 0.008847f, 0.058155f, -0.022982f, 0.066143f, 0.125549f, 0.070011f, 0.003325f, -0.033286f, -0.035780f, 0.007281f, 0.054018f, 0.059334f, 0.012615f, 0.000595f, -0.087833f, - -0.017214f, 0.085234f, 0.029179f, -0.024666f, 0.048213f, -0.041075f, -0.055724f, -0.016213f, -0.003010f, 0.065738f, 0.087537f, 0.077253f, 0.030305f, -0.030927f, -0.045687f, -0.086897f, -0.084927f, 0.073933f, 0.032082f, 0.005398f, 0.116063f, 0.006258f, -0.034519f, -0.047912f, -0.047150f, 0.022569f, 0.050036f, 0.038438f, 0.076402f, 0.004590f, 0.055191f, -0.004370f, -0.009008f, 0.026734f, 0.051141f, 0.035988f, 0.032763f, -0.029651f, -0.010163f, -0.023640f, -0.050412f, -0.041996f, -0.073835f, -0.026089f, 0.020533f, -0.013535f, 0.054633f, 0.063620f, -0.000794f, -0.001202f, -0.026721f, -0.049908f, 0.009148f, 0.059830f, -0.005761f, -0.062688f, -0.123549f, 0.049193f, 0.200621f, 0.204945f, 0.172741f, 0.126082f, -0.077351f, -0.087251f, -0.095208f, -0.125685f, -0.193741f, -0.155065f, -0.135389f, 0.064278f, 0.146196f, 0.109821f, 0.234984f, 0.182732f, 0.095140f, -0.033197f, -0.062402f, -0.155804f, -0.122128f, -0.119892f, -0.023864f, -0.072565f, -0.059442f, 0.020322f, 0.034318f, 0.068809f, 0.068135f, 0.094016f, 0.092349f, 0.119771f, 0.070067f, 0.032968f, -0.015024f, -0.016602f, -0.049288f, -0.074528f, - -0.091667f, -0.111388f, -0.072686f, -0.137373f, -0.091220f, -0.066462f, 0.073878f, 0.138549f, 0.148050f, 0.104857f, 0.071973f, 0.111981f, 0.085895f, 0.108134f, 0.085177f, 0.034433f, -0.032835f, -0.172577f, -0.121056f, -0.121803f, -0.194141f, -0.117540f, -0.101528f, -0.096350f, 0.047000f, 0.117100f, 0.178948f, 0.151525f, 0.210577f, 0.192999f, 0.189073f, 0.142429f, -0.048636f, -0.037680f, -0.112274f, -0.148170f, -0.128450f, -0.021449f, -0.012368f} - }, - { - {-0.011821f, -0.009289f, 0.002235f, -0.005330f, 0.008560f, -0.008721f, 0.003563f, -0.015997f, -0.001212f, -0.006332f, -0.009951f, -0.008395f, -0.004922f, -0.000416f, -0.001885f, 0.010525f, -0.003240f, 0.002115f, -0.001371f, -0.000545f, -0.008767f, 0.010282f, 0.003148f, 0.001895f, 0.002729f, -0.002054f, -0.002282f, 0.002591f, 0.009847f, 0.004214f, -0.001937f, -0.000753f, -0.000286f, -0.002263f, 0.000206f, -0.001656f, -0.000913f, 0.000132f, 0.005559f, 0.000663f, -0.004346f, 0.003183f, -0.004656f, 0.013589f, -0.008261f, 0.001015f, -0.000142f, -0.010134f, -0.001549f, 0.004449f, -0.005701f, -0.002556f, -0.001859f, 0.006763f, -0.003683f, -0.002595f, -0.000416f, 0.000778f, 0.001455f, -0.001002f, -0.003304f, -0.007888f, 0.001485f, -0.004108f, -0.005891f, 0.001408f, 0.002223f, -0.000433f, 0.001597f, 0.003864f, 0.003939f, -0.000562f, 0.001468f, 0.000667f, 0.005101f, -0.005700f, -0.005621f, 0.005660f, 0.005951f, 0.011384f, -0.015779f, 0.002891f, 0.011378f, 0.019101f, -0.001546f, 0.010481f, 0.000114f, 0.009453f, 0.003017f, 0.014837f, 0.000263f, -0.005674f, 0.011002f, 0.014182f, 0.014631f, 0.007636f, - 0.002839f, -0.006396f, -0.003946f, 0.000716f, 0.007741f, -0.004329f, 0.003901f, 0.000194f, 0.008721f, -0.004644f, 0.000338f, 0.001329f, -0.009168f, -0.006373f, -0.002297f, -0.010887f, 0.003000f, -0.003602f, 0.000482f, -0.002125f, -0.007892f, 0.005835f, 0.010659f, -0.002849f, 0.001384f, 0.000155f, -0.001035f, 0.009920f, -0.012411f, -0.000839f, 0.005959f, 0.000626f, 0.002305f, -0.003951f, -0.010164f, -0.003599f, 0.004789f, 0.004080f, 0.006116f, -0.001869f, 0.000818f, -0.000847f, 0.002826f, -0.002779f, 0.011935f, -0.000676f, -0.000294f, -0.008428f, 0.001736f, -0.006404f, -0.003282f, 0.003223f, 0.005732f, 0.010206f, 0.001461f, 0.009584f, 0.012896f, 0.021006f, 0.002780f, 0.010485f, -0.003806f, 0.006255f, 0.008084f, -0.002426f, -0.006490f, 0.011065f, 0.018970f, -0.003640f, 0.002123f, 0.007422f, -0.009051f, 0.005746f, 0.008132f, -0.016474f, 0.004710f, 0.001729f, -0.003671f, 0.000120f, -0.017192f, 0.000829f, 0.004916f, -0.008073f, 0.001611f, 0.000432f, 0.011162f, 0.008049f, -0.004034f, -0.001022f, -0.000919f, -0.011585f, -0.007756f, 0.001469f, 0.004909f, 0.001249f, 0.005453f, -0.007570f, - 0.001368f, 0.004083f, 0.001016f, -0.006973f, -0.005028f, -0.001367f, 0.002759f, 0.006054f, 0.006296f, 0.004263f, 0.007330f, 0.007139f, -0.007379f, -0.002081f, 0.000681f, 0.010067f, -0.001083f, 0.007324f, -0.004165f, -0.004439f, -0.000984f, -0.008424f, -0.003505f, 0.002183f, 0.005736f, -0.007079f, 0.008026f, -0.001620f, -0.001403f, -0.000960f, -0.002059f, -0.003217f, 0.002602f, 0.006383f, 0.003481f, 0.010401f, -0.011014f, -0.002715f, -0.002016f, -0.006023f, 0.002154f, 0.012538f, 0.016802f, 0.010345f, -0.004714f, 0.007751f, -0.004898f, -0.002659f, -0.015100f, -0.011336f, 0.004899f, 0.011620f, 0.010607f, 0.011838f, 0.002153f, 0.000981f, 0.006698f, -0.009118f, 0.009120f, 0.008082f, 0.000294f, 0.006992f, 0.016615f, 0.011948f, 0.002820f, -0.011888f, -0.000078f, 0.004472f, 0.002203f, 0.002377f, -0.013861f, 0.003569f, 0.002017f, 0.009336f, 0.009451f, -0.002757f, 0.005898f, -0.004467f, -0.005832f, 0.007577f, 0.003610f, -0.012479f, -0.012647f, -0.004958f, -0.007333f, -0.004714f, -0.005939f, -0.014461f, -0.013952f, -0.000836f, 0.004307f, 0.000301f, -0.001970f, -0.009600f, 0.000764f, 0.012273f, - -0.003915f, -0.003325f, 0.003867f, 0.000419f, 0.007961f, 0.004782f, 0.003744f, -0.005033f, -0.007495f, 0.013291f, 0.005152f, -0.004484f, 0.007710f, -0.000404f, 0.005890f, -0.004676f, 0.000561f, -0.023734f, -0.013996f, -0.004360f, 0.004490f, -0.009770f, 0.002976f, -0.002657f, 0.006827f, -0.001634f, -0.013304f, -0.010548f, 0.009194f, 0.007562f, 0.019024f, 0.016840f, -0.002557f, 0.012198f, -0.018296f, -0.002931f, 0.014219f, 0.004336f, 0.003298f, -0.001819f, -0.005976f, -0.002725f, 0.001968f, -0.001563f, -0.000554f, 0.007273f, -0.008968f, 0.002085f, 0.003262f, -0.000123f, 0.005665f, -0.006063f, -0.005050f, 0.003371f, -0.003927f, 0.005187f, -0.010021f, 0.001800f, -0.006018f, -0.002218f, -0.006703f, -0.004853f, -0.007614f, -0.011115f, 0.006934f, 0.000131f, 0.011818f, -0.010818f, -0.009448f, 0.000176f, 0.002273f, -0.001014f, -0.002257f, 0.001100f, 0.007132f, 0.003768f, 0.001554f, -0.004448f, -0.004659f, -0.002187f, -0.008784f, 0.001951f, -0.002233f, 0.001680f, -0.000342f, -0.008722f, -0.000690f, 0.000205f, -0.009893f, 0.001516f, -0.001619f, 0.002912f, -0.001131f, -0.007970f, 0.008048f, -0.012487f, - 0.004950f, -0.013994f, -0.002701f, 0.000961f, -0.010754f, 0.010163f, 0.007324f, -0.020925f, -0.002383f, 0.003802f, -0.002204f, -0.009028f, -0.012673f, 0.002791f, -0.006514f, -0.010108f, -0.005369f, 0.006345f, 0.005152f, 0.015233f, 0.019243f, -0.001487f, 0.017156f, -0.010498f, 0.006557f, 0.007811f, -0.001871f, 0.007694f, -0.004625f, 0.000365f, -0.001479f, -0.003395f, -0.002218f, -0.003826f, 0.014181f, -0.000615f, -0.011214f, -0.002389f, 0.006899f, 0.004731f, 0.005429f, 0.001367f, -0.005474f, 0.010836f, 0.021236f, 0.001563f, 0.001757f, 0.001487f, -0.002048f, 0.003654f, -0.001900f, 0.012607f, -0.009915f, 0.012079f, 0.007744f, -0.007264f, 0.003392f, 0.007980f, 0.004814f, -0.008723f, -0.010220f, -0.018978f, -0.003599f, -0.001483f, 0.002030f, 0.007833f, -0.002185f, 0.005274f, -0.001927f, -0.004657f, -0.005238f, 0.010492f, -0.002065f, 0.011136f, -0.014188f, -0.000266f, 0.006067f, 0.001973f, 0.000720f, 0.007000f, 0.022276f, 0.025212f, -0.006305f, -0.001184f, 0.005796f, -0.004512f, 0.017036f, 0.015650f, -0.009940f, 0.015302f, 0.012847f, 0.004140f, 0.007551f, 0.005784f, 0.003573f, -0.002156f, - 0.001385f, 0.001362f, -0.008615f, -0.011597f, 0.003002f, -0.003863f, 0.000014f, 0.000989f, -0.009408f, 0.008710f, 0.019408f, -0.001544f, -0.011512f, 0.017907f, 0.002344f, -0.000430f, 0.007435f, -0.004362f, -0.005666f, 0.001664f, -0.007130f, 0.001713f, 0.019227f, 0.007099f, -0.000222f, 0.005689f, 0.010374f, 0.025965f, -0.004583f, 0.010448f, -0.002496f, -0.013175f, 0.007591f, -0.000690f, -0.004145f, 0.003903f, 0.016450f, 0.002774f, 0.002707f, -0.001816f, 0.006401f, 0.022450f, 0.010499f, 0.001299f, 0.002124f, 0.004549f, -0.007281f, 0.010443f, -0.003520f, -0.025825f, 0.002571f, -0.004652f, 0.014068f, 0.014699f, 0.007154f, 0.000381f, -0.027962f, -0.004400f, -0.011206f, -0.015699f, -0.002715f, -0.011512f, 0.001649f, 0.007826f, -0.012506f, 0.013050f, -0.029063f, 0.003195f, -0.007777f, -0.017203f, -0.020443f, 0.021475f, 0.012449f, 0.000367f, -0.017970f, -0.013609f, 0.008347f, -0.025953f, -0.016198f, 0.004838f, 0.006486f, 0.024207f, -0.002075f, 0.001048f, 0.019932f, -0.012188f, 0.019603f, 0.005264f, 0.007953f, -0.004626f, -0.009861f, -0.002333f, 0.016531f, -0.009293f, 0.002518f, 0.018207f, - -0.005807f, -0.006696f, -0.008096f, -0.012448f, -0.008670f, -0.008428f, -0.014332f, -0.002922f, 0.005861f, -0.006346f, 0.004601f, -0.006119f, -0.006779f, 0.009771f, -0.012713f, 0.007380f, -0.010652f, -0.015929f, 0.001834f, 0.011135f, 0.001882f, -0.004808f, 0.005904f, -0.011088f, -0.003986f, -0.015129f, -0.023798f, -0.013028f, 0.004441f, -0.008964f, 0.029164f, 0.009602f, -0.018861f, -0.011908f, -0.001765f, 0.031921f, 0.020074f, 0.021975f, -0.006744f, -0.030232f, -0.002905f, -0.015295f, 0.003463f, 0.007187f, 0.016007f, -0.007352f, 0.006749f, -0.012216f, 0.001666f, -0.010734f, -0.028966f, -0.014995f, 0.010409f, -0.010034f, -0.023058f, -0.020869f, -0.020222f, -0.030468f, 0.003342f, -0.010450f, -0.023949f, -0.020771f, 0.003211f, 0.030002f, -0.004461f, -0.004626f, -0.010416f, -0.017672f, 0.003218f, -0.006847f, 0.001474f, -0.022139f, 0.000937f, -0.023081f, 0.002768f, -0.001610f, 0.012068f, 0.010019f, 0.009963f, 0.005651f, -0.001380f, 0.008949f, -0.006232f, 0.017337f, 0.004311f, 0.008893f, 0.004695f, -0.005350f, 0.005593f, 0.017433f, -0.002735f, 0.009824f, -0.002930f, 0.027260f, 0.003001f, 0.010352f, - 0.000839f, -0.015004f, -0.012096f, 0.000691f, -0.005868f, 0.003644f, -0.004428f, 0.009106f, 0.007469f, 0.010570f, -0.005383f, 0.006136f, -0.021513f, 0.011406f, 0.029068f, -0.015209f, -0.044123f, -0.007275f, -0.015382f, -0.023173f, 0.012542f, -0.044254f, -0.005694f, -0.015678f, -0.008512f, 0.012906f, -0.014017f, 0.018875f, 0.016278f, 0.002724f, 0.014711f, 0.001461f, 0.007861f, -0.011363f, -0.020213f, -0.022238f, -0.012363f, -0.020340f, 0.016258f, 0.021272f, -0.000661f, -0.010792f, 0.006333f, 0.006364f, -0.007448f, 0.001876f, -0.034738f, -0.018182f, 0.016645f, -0.008553f, 0.000844f, 0.016410f, -0.001120f, 0.010341f, 0.008898f, -0.004086f, 0.010153f, 0.000397f, -0.018187f, 0.021353f, -0.014088f, 0.001591f, 0.001728f, -0.010848f, 0.008271f, 0.013083f, -0.006640f, 0.014904f, 0.002327f, -0.000317f, -0.012159f, 0.016865f, 0.000780f, -0.012044f, -0.003342f, -0.024973f, -0.009848f, -0.013723f, -0.000705f, 0.019103f, 0.006479f, -0.000316f, 0.001808f, -0.015241f, 0.005549f, 0.014775f, -0.014828f, 0.003208f, 0.028724f, -0.007781f, 0.006580f, 0.007536f, 0.077761f, 0.018371f, -0.011109f, -0.014856f, - -0.002315f, -0.004046f, 0.013168f, -0.002135f, 0.011038f, 0.023288f, -0.009704f, 0.002152f, -0.015439f, -0.009038f, 0.004078f, -0.001340f, 0.010818f, -0.020907f, -0.013524f, 0.011560f, 0.021498f, 0.015773f, -0.001242f, 0.006462f, -0.005940f, -0.012000f, 0.009093f, 0.018568f, 0.017633f, 0.023192f, -0.018529f, -0.002895f, -0.010782f, -0.021003f, -0.003206f, 0.002649f, -0.005251f, 0.011848f, 0.013313f, 0.001556f, 0.006462f, -0.002381f, -0.024055f, -0.011268f, -0.032053f, -0.030583f, -0.009559f, 0.012692f, -0.004792f, -0.012399f, 0.027123f, 0.012283f, -0.001038f, -0.023307f, -0.001020f, -0.005590f, -0.017960f, 0.002608f, -0.007991f, -0.009248f, -0.024736f, -0.000503f, -0.008704f, -0.024737f, 0.000783f, 0.024441f, -0.013199f, -0.003114f, 0.009214f, -0.007734f, 0.006663f, -0.006799f, 0.020127f, 0.000968f, -0.011636f, -0.015237f, 0.018510f, -0.063125f, -0.034675f, 0.032133f, -0.007796f, 0.001220f, -0.016347f, 0.013477f, -0.005167f, -0.024975f, 0.012260f, 0.032399f, 0.004973f, -0.030195f, 0.008905f, -0.007377f, -0.006038f, 0.018171f, 0.020542f, -0.003755f, -0.003464f, 0.040928f, 0.009954f, -0.007157f, - -0.025287f, 0.010296f, -0.036528f, -0.031647f, -0.027612f, 0.010208f, -0.004862f, -0.004228f, 0.024564f, 0.008387f, -0.024130f, -0.021763f, 0.005696f, 0.022548f, 0.008494f, -0.004048f, 0.001652f, 0.014543f, -0.011225f, -0.027285f, 0.034025f, -0.011349f, 0.003701f, 0.012196f, 0.002264f, 0.003199f, 0.034875f, -0.000917f, 0.022221f, -0.000559f, -0.023249f, 0.001771f, 0.004980f, -0.006474f, 0.004407f, 0.014121f, -0.011848f, -0.005329f, 0.003942f, -0.047857f, 0.012086f, 0.007522f, -0.000405f, 0.009066f, 0.008483f, -0.019177f, 0.008033f, 0.060992f, 0.027287f, 0.013199f, 0.005168f, 0.012817f, -0.045683f, -0.042635f, 0.030248f, 0.030489f, 0.011075f, 0.016444f, -0.010617f, 0.049240f, -0.004883f, 0.018286f, 0.014096f, -0.023895f, -0.008420f, -0.011431f, 0.030181f, -0.018053f, -0.004282f, 0.017610f, 0.016549f, -0.017706f, -0.003459f, -0.049844f, 0.010376f, -0.006097f, -0.013231f, 0.003641f, 0.002563f, 0.003044f, 0.005778f, 0.016092f, 0.001963f, 0.017711f, 0.003479f, 0.008396f, -0.003376f, -0.016302f, -0.015531f, 0.031352f, -0.009928f, -0.023395f, -0.017950f, -0.009126f, -0.009207f, 0.013484f, - 0.010035f, 0.010362f, 0.015568f, 0.004007f, -0.015864f, 0.009827f, -0.026812f, -0.009391f, -0.023187f, 0.017042f, -0.028281f, -0.021462f, -0.004638f, -0.009976f, 0.010720f, 0.020348f, -0.014179f, 0.019317f, 0.033219f, 0.015955f, 0.032150f, -0.012123f, 0.042575f, 0.004385f, 0.036507f, 0.020311f, 0.006627f, -0.017231f, -0.043431f, -0.029766f, -0.022313f, -0.012727f, -0.010301f, 0.023467f, 0.011646f, -0.013003f, 0.038953f, 0.004662f, -0.038390f, 0.047961f, 0.003032f, -0.020072f, 0.016688f, -0.038931f, -0.007640f, -0.024686f, -0.007913f, -0.004147f, -0.007762f, -0.017560f, 0.004910f, -0.033580f, -0.013165f, -0.011926f, -0.045741f, 0.005837f, -0.033164f, -0.023267f, -0.037181f, 0.007748f, -0.028031f, -0.008181f, -0.009249f, 0.000589f, 0.014213f, -0.011120f, 0.020008f, 0.001307f, 0.026548f, -0.005881f, 0.023142f, 0.029214f, -0.034544f, -0.000267f, 0.009563f, 0.021494f, 0.001115f, 0.025781f, 0.008890f, 0.024848f, -0.000136f, -0.018640f, -0.011401f, -0.001649f, 0.016445f, -0.003538f, -0.006769f, -0.001503f, 0.030173f, 0.018702f, -0.006296f, -0.024331f, 0.008979f, 0.013324f, 0.010439f, 0.026070f, - -0.034016f, -0.026142f, -0.006208f, 0.002180f, -0.008496f, -0.000124f, -0.008480f, -0.022466f, 0.063372f, -0.031071f, -0.033133f, 0.025531f, 0.017574f, 0.005861f, -0.009146f, -0.009436f, 0.030097f, 0.023872f, 0.035780f, -0.011156f, -0.009959f, -0.049289f, 0.057640f, 0.027928f, -0.078742f, -0.040550f, 0.024152f, 0.035860f, 0.034095f, -0.021195f, -0.018964f, 0.043462f, 0.009257f, 0.010975f, 0.028527f, 0.024982f, -0.043801f, 0.014567f, 0.017447f, -0.001817f, 0.019637f, 0.005362f, -0.006217f, 0.005712f, -0.014697f, 0.073469f, 0.018170f, 0.010969f, -0.002631f, -0.007239f, -0.005483f, -0.039081f, 0.007178f, 0.013766f, -0.010249f, -0.011532f, -0.066688f, -0.029637f, 0.013172f, 0.013508f, -0.022338f, -0.019123f, -0.003672f, -0.029272f, 0.012303f, 0.013944f, -0.005311f, 0.015517f, 0.025262f, 0.003817f, -0.002190f, -0.005690f, -0.014826f, -0.001736f, 0.001330f, -0.045676f, -0.007619f, 0.014658f, 0.028364f, -0.049191f, 0.010140f, 0.022715f, -0.006065f, -0.020528f, -0.024854f, 0.044695f, 0.035957f, 0.000255f, -0.029675f, -0.036627f, 0.023895f, -0.017772f, 0.007060f, -0.014913f, -0.011791f, 0.001504f, - 0.016477f, 0.030697f, -0.056973f, -0.076012f, -0.051581f, -0.068053f, 0.059361f, -0.039664f, 0.024404f, -0.007194f, -0.046517f, 0.007901f, -0.011991f, -0.018157f, -0.060616f, -0.056871f, -0.041176f, -0.016572f, 0.003104f, -0.033095f, -0.008519f, 0.008133f, 0.027420f, 0.001642f, -0.015526f, -0.000371f, -0.016657f, 0.024995f, -0.030993f, 0.043787f, 0.039054f, -0.009480f, -0.011121f, -0.052742f, -0.029552f, -0.032189f, 0.004849f, 0.006741f, -0.007515f, 0.042537f, 0.013233f, 0.034454f, 0.007885f, -0.004319f, -0.014696f, 0.031023f, 0.022625f, 0.009626f, -0.030289f, 0.016649f, -0.051950f, -0.006038f, -0.004535f, -0.035294f, -0.004680f, 0.000383f, 0.041697f, 0.026854f, 0.001955f, 0.018781f, 0.000499f, -0.039911f, 0.021716f, 0.005800f, 0.034883f, -0.018620f, -0.036583f, 0.023483f, -0.066380f, -0.074160f, -0.008223f, -0.046777f, 0.001750f, -0.034132f, 0.030964f, -0.024030f, -0.003883f, 0.007543f, 0.010807f, 0.039993f, 0.011805f, -0.016333f, 0.040678f, 0.014273f, -0.072478f, 0.013002f, -0.043968f, -0.001778f, 0.006945f, -0.004702f, 0.033988f, -0.009156f, 0.005200f, 0.010188f, 0.001907f, -0.021575f, - 0.034523f, -0.019388f, -0.003152f, -0.040480f, -0.001218f, 0.008381f, -0.007787f, -0.013398f, -0.020340f, -0.020526f, 0.052974f, 0.003468f, 0.026873f, -0.046919f, 0.004287f, 0.000691f, 0.015408f, 0.030071f, -0.034293f, 0.060182f, 0.083679f, -0.002596f, 0.007079f, -0.028340f, 0.012488f, 0.020986f, -0.017439f, 0.005453f, 0.014944f, 0.034108f, -0.002055f, 0.003096f, -0.011128f, -0.027526f, -0.043850f, 0.022946f, -0.032988f, -0.012692f, -0.021710f, 0.010144f, 0.028600f, 0.026597f, -0.005177f, 0.010111f, -0.057853f, 0.038536f, -0.005643f, 0.007813f, -0.013107f, 0.036492f, 0.094165f, 0.027529f, 0.068333f, 0.022448f, -0.072294f, 0.029302f, 0.019400f, -0.023436f, 0.004303f, 0.046805f, 0.001458f, 0.044808f, 0.038681f, -0.045644f, 0.024731f, -0.045673f, -0.031804f, -0.003956f, 0.092003f, 0.028899f, -0.042543f, 0.039906f, 0.024715f, -0.050625f, -0.023265f, -0.003102f, 0.051106f, 0.008045f, -0.048258f, -0.026322f, -0.002302f, -0.012628f, 0.027960f, 0.041918f, -0.015892f, 0.036909f, -0.024433f, -0.031500f, -0.002015f, 0.075644f, 0.006063f, -0.042876f, 0.023626f, -0.001679f, -0.005296f, 0.021424f, - -0.050092f, -0.042053f, -0.041315f, 0.029852f, -0.027449f, 0.009863f, 0.011449f, 0.045355f, 0.021133f, 0.046614f, 0.003770f, -0.001663f, 0.036553f, 0.069611f, 0.039976f, -0.068206f, 0.000215f, 0.006965f, -0.012805f, 0.013494f, 0.017856f, -0.052701f, -0.009032f, 0.010611f, 0.008332f, -0.063085f, -0.060099f, -0.033925f, -0.035465f, 0.061194f, -0.036839f, 0.027837f, -0.072741f, 0.052983f, 0.057397f, 0.017077f, 0.062611f, -0.063904f, -0.032448f, -0.016515f, -0.093924f, 0.053648f, 0.004643f, 0.033673f, 0.042201f, 0.043022f, 0.002688f, -0.000078f, 0.042031f, -0.005445f, -0.050967f, -0.051101f, 0.031326f, -0.057859f, 0.057450f, -0.015150f, 0.012350f, 0.058787f, 0.051384f, -0.024439f, 0.078442f, -0.043983f, 0.004919f, -0.045731f, 0.007547f, -0.014445f, 0.030912f, 0.012366f, -0.033643f, 0.032104f, 0.045947f, 0.069406f, -0.038824f, 0.016524f, 0.041597f, -0.054636f, 0.002932f, -0.020520f, -0.081801f, -0.032915f, 0.022461f, -0.042555f, 0.016718f, -0.035148f, -0.000140f, 0.058297f, -0.025337f, 0.026599f, 0.064906f, 0.048945f, 0.018413f, 0.088491f, -0.130493f, -0.020868f, 0.046054f, -0.000630f, - 0.028079f, -0.035901f, -0.068450f, 0.092468f, 0.002495f, -0.036922f, 0.023679f, 0.063230f, 0.143346f, 0.062746f, -0.025184f, 0.013250f, 0.007725f, 0.066864f, -0.058379f, -0.008424f, -0.026352f, -0.039202f, 0.058868f, -0.024615f, 0.076388f, -0.010146f, -0.053597f, 0.085170f, 0.130317f, -0.021038f, -0.037559f, -0.064366f, 0.017736f, 0.064715f, 0.016458f, -0.017161f, -0.038975f, 0.007086f, 0.013209f, -0.012294f, 0.013726f, -0.008999f, -0.017373f, -0.024164f, 0.022901f, 0.024743f, 0.001344f, 0.034478f, -0.032662f, 0.073909f, 0.061672f, 0.030285f, 0.000919f, 0.001349f, 0.014794f, -0.044053f, -0.031746f, -0.042866f, -0.016716f, -0.014247f, 0.028874f, 0.018182f, 0.046152f, -0.023773f, -0.000461f, -0.021572f, 0.052281f, 0.089045f, -0.016964f, -0.063630f, -0.033227f, -0.006480f, -0.075309f, 0.058658f, -0.103902f, 0.027309f, 0.052897f, 0.043240f, -0.040942f, 0.006387f, 0.056103f, -0.116217f, -0.043966f, 0.017531f, -0.001806f, -0.061291f, -0.037136f, -0.012177f, -0.010008f, 0.076930f, -0.046431f, 0.013003f, 0.074812f, 0.001023f, -0.023655f, 0.060213f, 0.045194f, -0.013963f, -0.038238f, -0.061017f, - 0.012649f, 0.116341f, 0.027070f, 0.059043f, -0.004060f, 0.004016f, -0.003521f, -0.015082f, 0.001239f, 0.004126f, 0.029724f, 0.008127f, -0.021588f, 0.018273f, -0.018729f, -0.023306f, -0.023605f, -0.000709f, 0.024878f, 0.003771f, 0.020164f, 0.018873f, 0.017673f, -0.017926f, -0.027837f, 0.007836f, -0.018854f, -0.051996f, -0.013586f, 0.009997f, -0.016216f, 0.057559f, -0.059503f, 0.048076f, -0.014237f, -0.001215f, 0.074969f, -0.013151f, -0.000405f, 0.094213f, -0.013056f, -0.040776f, 0.008802f, -0.035257f, -0.005744f, -0.033466f, 0.108778f, -0.032190f, 0.027865f, -0.027742f, -0.009243f, -0.016834f, 0.020214f, -0.029210f, -0.062746f, 0.026418f, -0.004438f, -0.075312f, 0.041550f, -0.021932f, 0.044648f, 0.088090f, -0.040448f, -0.004313f, 0.002540f, -0.016418f, -0.035326f, -0.026018f, -0.000010f, 0.122409f, 0.062075f, 0.128368f, -0.072053f, -0.018829f, 0.042241f, -0.040408f, 0.030469f, 0.131868f, 0.031058f, 0.018762f, -0.035202f, -0.033279f, 0.037485f, -0.020502f, 0.053099f, -0.009333f, -0.012735f, -0.016144f, -0.076538f, 0.017625f, 0.090719f, -0.048993f, 0.054537f, 0.047384f, -0.031709f, -0.010191f, - 0.037152f, -0.061652f, 0.029345f, -0.005320f, 0.044756f, 0.014410f, -0.039103f, -0.013413f, -0.077621f, -0.040443f, 0.034489f, 0.025601f, 0.057932f, 0.091199f, 0.008336f, -0.000064f, -0.081895f, -0.050653f, -0.049711f, -0.041197f, 0.019055f, -0.034592f, -0.011467f, -0.009507f, 0.021755f, -0.063402f, -0.012347f, 0.029452f, 0.013726f, 0.048075f, -0.009641f, -0.026832f, 0.047126f, -0.011955f, 0.027386f, -0.041800f, -0.027117f, -0.009384f, -0.017088f, 0.020897f, 0.031899f, 0.047487f, 0.009269f, -0.000510f, -0.041986f, -0.015534f, -0.026204f, 0.036988f, -0.035805f, -0.123567f, 0.001216f, 0.204683f, 0.180550f, 0.174039f, 0.070851f, -0.070460f, -0.102888f, -0.097684f, -0.091350f, -0.161897f, -0.119132f, -0.111811f, 0.086984f, 0.138860f, 0.109507f, 0.179972f, 0.145922f, 0.034225f, -0.008177f, -0.060313f, -0.124702f, -0.070532f, -0.130873f, -0.067204f, -0.044470f, 0.004063f, -0.018279f, 0.036020f, 0.054858f, 0.098217f, 0.058829f, 0.103132f, 0.075101f, 0.082830f, 0.005692f, -0.061073f, -0.029937f, 0.006380f, -0.071215f, -0.089593f, -0.122044f, -0.115549f, -0.084911f, -0.007356f, 0.059969f, 0.028366f, - 0.087293f, 0.066355f, 0.099727f, 0.093306f, 0.097020f, 0.116765f, 0.061337f, -0.002642f, -0.016061f, -0.066330f, -0.057072f, -0.189320f, -0.153931f, -0.118465f, -0.094695f, 0.019268f, -0.038538f, 0.011386f, 0.139271f, 0.174940f, 0.232987f, 0.153988f, 0.094754f, 0.071368f, 0.025433f, -0.070837f, -0.062369f, -0.099481f, -0.125293f, -0.075830f, -0.015180f, 0.002158f}, - {-0.010810f, -0.006811f, -0.000989f, -0.010200f, 0.009038f, -0.008200f, -0.009842f, 0.004319f, -0.002893f, -0.002232f, 0.002619f, -0.011627f, -0.002391f, 0.008406f, -0.005828f, -0.002075f, -0.009107f, 0.002601f, -0.006785f, -0.012347f, 0.005112f, 0.002238f, 0.004337f, -0.004922f, -0.005999f, 0.006689f, 0.001904f, 0.007574f, 0.007870f, -0.008489f, 0.007689f, -0.002331f, -0.002324f, 0.005349f, -0.001267f, 0.004841f, 0.008338f, 0.007809f, 0.001499f, 0.003256f, 0.003019f, -0.006985f, -0.003389f, -0.002675f, 0.001304f, 0.006007f, -0.011659f, -0.002812f, -0.000631f, -0.000836f, -0.005339f, 0.000862f, 0.004790f, -0.006163f, 0.004184f, -0.004878f, -0.011781f, 0.002388f, 0.002310f, 0.001453f, -0.004615f, -0.001428f, -0.003060f, 0.005490f, -0.001448f, -0.000283f, 0.000244f, 0.003818f, 0.001239f, 0.002341f, 0.003210f, -0.008379f, -0.004403f, 0.004322f, -0.001007f, -0.002042f, 0.002106f, -0.002408f, 0.008340f, 0.009250f, 0.005064f, -0.003652f, -0.013989f, -0.012945f, 0.004746f, 0.007354f, -0.002659f, 0.013777f, -0.002601f, 0.008205f, -0.009741f, -0.008699f, 0.003858f, 0.000308f, -0.002466f, 0.003622f, - 0.009049f, -0.003929f, 0.001332f, -0.005148f, -0.000420f, 0.000457f, 0.003767f, 0.003403f, 0.004701f, 0.000752f, 0.002841f, 0.010231f, -0.003847f, -0.004792f, -0.005064f, -0.009271f, 0.002779f, -0.001941f, 0.017081f, 0.003314f, -0.001159f, 0.001357f, 0.010416f, -0.000922f, -0.002116f, -0.002589f, -0.005904f, -0.001063f, 0.008053f, -0.001164f, 0.003428f, 0.008066f, -0.002360f, -0.000504f, -0.012714f, -0.007484f, -0.011571f, -0.002202f, -0.003231f, 0.001842f, 0.000832f, 0.001816f, 0.004395f, -0.002673f, 0.002250f, 0.000293f, 0.001288f, 0.001975f, -0.004000f, 0.004269f, -0.001055f, -0.004623f, -0.000211f, -0.004600f, -0.000944f, 0.000931f, 0.009658f, 0.022437f, 0.009002f, 0.005229f, 0.006364f, -0.013350f, -0.001457f, 0.005608f, -0.001696f, 0.002127f, -0.011987f, 0.011770f, 0.016190f, 0.002663f, 0.007284f, -0.003503f, -0.009333f, -0.014722f, -0.015899f, -0.010751f, 0.012769f, -0.012086f, -0.007511f, -0.010249f, 0.003339f, 0.008297f, 0.001682f, 0.001014f, 0.004799f, -0.000607f, 0.003065f, 0.010245f, -0.001367f, 0.008493f, -0.008128f, 0.007734f, 0.005569f, 0.004864f, -0.004238f, -0.013568f, - -0.002765f, 0.007537f, 0.004645f, -0.003904f, -0.000354f, 0.002503f, -0.000471f, -0.006638f, -0.001259f, 0.005327f, -0.001782f, 0.000439f, -0.003093f, -0.000885f, 0.000510f, 0.001654f, 0.009599f, 0.003777f, -0.004732f, 0.000624f, 0.000922f, -0.003422f, 0.001880f, -0.004901f, -0.000380f, 0.007467f, 0.002697f, 0.008393f, -0.005934f, -0.005541f, -0.002883f, -0.001635f, 0.004756f, 0.009482f, -0.005138f, -0.007429f, 0.009025f, 0.001366f, -0.003666f, 0.004103f, -0.000869f, 0.006591f, 0.002794f, -0.007439f, -0.007011f, -0.007976f, -0.001267f, -0.006522f, -0.013692f, -0.013056f, 0.013402f, -0.000339f, 0.002789f, -0.000152f, 0.008137f, -0.012163f, 0.017934f, 0.015913f, 0.000765f, 0.000783f, -0.000047f, 0.000401f, -0.001856f, 0.006176f, 0.004779f, 0.000310f, -0.010336f, 0.004345f, -0.003284f, 0.004826f, -0.001544f, 0.010806f, -0.002670f, -0.006459f, -0.003016f, -0.001829f, 0.003892f, -0.000191f, 0.006583f, -0.010961f, 0.005664f, 0.001754f, -0.006203f, 0.016905f, -0.002914f, -0.002589f, -0.000581f, -0.000421f, -0.004736f, -0.001613f, 0.008837f, 0.007281f, -0.016261f, -0.007711f, 0.007814f, 0.002158f, - -0.004160f, 0.013715f, 0.000137f, 0.002924f, 0.013276f, 0.005456f, 0.010286f, 0.002836f, -0.004647f, -0.005782f, -0.011352f, -0.010615f, 0.000801f, 0.005363f, 0.012431f, 0.000381f, -0.006629f, -0.018256f, -0.006335f, -0.008894f, 0.008300f, -0.006082f, 0.005396f, -0.006576f, -0.002694f, 0.015439f, 0.007572f, -0.010289f, 0.004694f, 0.014724f, 0.002171f, -0.005196f, -0.010351f, -0.012468f, -0.008527f, -0.012536f, 0.008306f, 0.001865f, 0.004568f, -0.002425f, -0.005670f, -0.005996f, -0.011032f, 0.000552f, -0.000357f, 0.002599f, -0.002708f, -0.010042f, 0.000138f, 0.010690f, -0.002403f, 0.000110f, -0.005371f, -0.010687f, -0.015840f, -0.001369f, 0.011335f, 0.004133f, 0.001141f, -0.005359f, 0.001393f, -0.008569f, -0.002881f, -0.006443f, 0.000738f, 0.001469f, -0.009854f, 0.011036f, -0.006308f, 0.014043f, 0.005188f, 0.001362f, -0.006500f, -0.003308f, 0.003459f, -0.000760f, 0.003250f, 0.007578f, 0.001354f, 0.003044f, -0.008525f, 0.004985f, -0.004400f, 0.012961f, 0.015733f, 0.007397f, 0.010481f, 0.005063f, -0.001891f, -0.011158f, -0.007463f, 0.000862f, 0.008149f, 0.007656f, 0.006170f, -0.014787f, - 0.002000f, -0.015809f, -0.000005f, 0.002344f, 0.001528f, 0.007030f, 0.000774f, 0.001056f, 0.027906f, -0.003565f, -0.012239f, -0.013339f, 0.014046f, 0.009294f, -0.010494f, 0.002471f, -0.011712f, -0.005127f, 0.000450f, 0.013233f, -0.016457f, 0.004724f, -0.000589f, 0.002537f, -0.001205f, 0.016809f, -0.008691f, 0.004663f, -0.002592f, -0.004589f, 0.002623f, -0.000932f, 0.005122f, -0.005303f, -0.004753f, -0.014445f, 0.002294f, -0.004898f, -0.003031f, 0.000976f, -0.005019f, 0.004050f, -0.008026f, -0.004989f, -0.014159f, -0.000630f, -0.012569f, -0.005542f, -0.014960f, 0.010902f, 0.002298f, -0.004866f, 0.009827f, -0.011660f, -0.000033f, -0.021985f, -0.001149f, 0.007119f, -0.000584f, 0.006003f, 0.013775f, -0.005313f, -0.001963f, 0.016694f, 0.007231f, 0.006013f, 0.010449f, -0.006221f, -0.016071f, -0.002642f, -0.009762f, 0.005736f, 0.015491f, -0.004590f, 0.003808f, -0.001871f, 0.007720f, 0.009018f, 0.003059f, -0.005244f, 0.003679f, 0.002437f, 0.016754f, -0.002478f, -0.003838f, -0.022758f, -0.006670f, 0.017264f, 0.016551f, 0.010863f, 0.008263f, 0.024517f, 0.001255f, -0.029158f, -0.007760f, -0.004830f, - -0.007362f, 0.015597f, -0.002772f, -0.005651f, 0.017834f, 0.002838f, -0.007823f, -0.002611f, 0.006893f, -0.006470f, -0.002920f, 0.002176f, -0.002715f, -0.010229f, -0.005030f, -0.000548f, -0.010272f, -0.004591f, -0.004593f, 0.006763f, -0.005106f, 0.013106f, 0.012339f, 0.001114f, 0.011681f, 0.008426f, -0.006105f, -0.002055f, -0.004812f, -0.019178f, 0.001475f, 0.003704f, -0.018765f, -0.002833f, -0.005878f, 0.006202f, 0.015683f, 0.002220f, -0.017622f, 0.002136f, -0.007421f, -0.011634f, 0.008065f, -0.003033f, -0.013174f, 0.005002f, 0.003277f, 0.012770f, -0.002593f, -0.002168f, 0.007956f, 0.010968f, 0.010488f, -0.013630f, 0.006289f, 0.011398f, -0.029639f, 0.012152f, -0.003035f, -0.007118f, -0.005932f, 0.004807f, -0.002651f, -0.018060f, -0.018708f, 0.001947f, 0.029588f, 0.007737f, -0.021295f, 0.004437f, 0.017574f, -0.012984f, 0.002349f, -0.003610f, 0.010475f, -0.000525f, 0.009647f, 0.025278f, 0.018766f, 0.011211f, -0.000454f, -0.002649f, -0.011948f, -0.013296f, 0.005007f, -0.033932f, -0.005376f, 0.015229f, 0.001641f, -0.002300f, -0.016142f, -0.006336f, -0.000875f, -0.001390f, -0.007996f, -0.017216f, - 0.018249f, -0.007122f, -0.004367f, -0.003739f, -0.015659f, -0.018004f, -0.000938f, -0.009223f, 0.000749f, 0.007338f, 0.005775f, 0.006038f, -0.014226f, -0.004493f, -0.007339f, -0.005262f, 0.021283f, -0.003362f, -0.010812f, -0.000395f, 0.027321f, -0.016203f, 0.003770f, 0.019511f, -0.000436f, -0.006084f, -0.011674f, 0.004901f, -0.000170f, 0.013422f, -0.009582f, 0.011004f, 0.008528f, 0.017809f, 0.007614f, 0.016739f, 0.025107f, 0.014630f, 0.002973f, -0.005716f, -0.008762f, -0.020897f, -0.005453f, 0.013103f, -0.027374f, -0.011830f, 0.025872f, -0.035557f, -0.005863f, 0.019277f, 0.025197f, -0.002911f, -0.024279f, 0.003070f, -0.008965f, 0.032807f, 0.015231f, -0.023123f, -0.014130f, -0.003837f, -0.013517f, -0.028988f, -0.013800f, -0.013029f, -0.009828f, -0.023510f, 0.012233f, 0.003840f, 0.014897f, -0.009106f, -0.003722f, -0.020675f, -0.001524f, -0.017958f, 0.002418f, -0.012002f, 0.003185f, 0.005990f, -0.026780f, -0.009174f, -0.009834f, -0.007435f, 0.006482f, 0.005687f, -0.008147f, 0.026836f, -0.001159f, -0.007169f, -0.004469f, 0.002508f, -0.005740f, -0.002304f, 0.010629f, 0.008494f, 0.011830f, 0.014765f, - 0.014644f, 0.001095f, 0.009816f, -0.004494f, 0.021657f, 0.022517f, -0.010682f, -0.005881f, 0.014494f, -0.000417f, -0.033372f, 0.001463f, -0.016384f, 0.010221f, 0.012205f, -0.018070f, -0.023761f, -0.010364f, -0.022989f, -0.030721f, 0.021468f, 0.003058f, 0.011626f, -0.016602f, -0.019035f, -0.024194f, -0.017824f, 0.008573f, -0.019462f, -0.015833f, 0.021815f, -0.004845f, 0.000162f, 0.006335f, 0.012061f, -0.009246f, -0.008577f, 0.004591f, -0.007063f, 0.004395f, -0.002100f, -0.010367f, -0.022420f, -0.032748f, 0.010130f, -0.023280f, -0.023114f, 0.002019f, -0.006834f, -0.000692f, -0.013474f, 0.006495f, 0.005367f, -0.026519f, -0.001655f, -0.005140f, -0.011799f, -0.014346f, 0.007557f, 0.002741f, 0.026246f, 0.004162f, -0.016512f, -0.000047f, 0.001360f, 0.012208f, 0.003511f, 0.025203f, -0.003335f, -0.025466f, 0.010015f, -0.004641f, 0.010597f, -0.014810f, 0.002065f, 0.009968f, -0.048131f, -0.021150f, 0.015024f, -0.000367f, -0.006557f, 0.008283f, -0.003981f, 0.030655f, -0.002697f, 0.019916f, 0.014542f, -0.022556f, -0.029378f, 0.003167f, -0.031957f, 0.015735f, 0.065740f, -0.016363f, -0.043632f, -0.004133f, - -0.018854f, 0.047416f, 0.004095f, 0.026528f, 0.014864f, -0.008374f, -0.020541f, -0.009479f, -0.022380f, -0.005894f, 0.032633f, -0.035637f, 0.002165f, -0.029020f, 0.008607f, 0.002563f, 0.014975f, 0.003479f, -0.013158f, -0.023360f, -0.026642f, -0.004817f, -0.026062f, -0.020788f, 0.004436f, 0.006676f, 0.021106f, -0.018320f, -0.038016f, -0.007694f, -0.012410f, 0.005257f, -0.017145f, -0.011802f, 0.006966f, -0.009103f, -0.014157f, -0.000304f, 0.003196f, -0.007130f, 0.039718f, -0.006910f, -0.004563f, 0.010621f, 0.011768f, -0.010233f, -0.002878f, 0.029389f, 0.025727f, 0.016819f, 0.031971f, 0.024710f, 0.002436f, 0.011303f, 0.019486f, -0.010873f, -0.009009f, 0.005345f, 0.015251f, 0.021868f, 0.011500f, 0.042482f, 0.008175f, 0.029553f, -0.003376f, -0.012539f, -0.005120f, 0.060524f, 0.015934f, -0.003080f, 0.000381f, -0.015002f, 0.014799f, -0.059750f, -0.018881f, 0.026347f, -0.004443f, -0.031692f, -0.025069f, -0.011658f, 0.033552f, 0.014196f, -0.022629f, 0.011478f, -0.030909f, -0.016073f, -0.001603f, -0.024290f, -0.027511f, 0.022747f, 0.016235f, -0.029069f, -0.006980f, 0.055051f, 0.015768f, -0.027823f, - -0.032557f, -0.001717f, 0.021274f, 0.000878f, 0.005677f, -0.042408f, 0.001273f, -0.006869f, -0.026322f, -0.019133f, -0.009133f, -0.025416f, -0.008422f, 0.004309f, 0.003414f, -0.026749f, -0.021799f, 0.000680f, 0.017863f, -0.002863f, 0.023097f, 0.031827f, -0.021505f, 0.018729f, 0.018716f, 0.004172f, 0.007346f, 0.023223f, 0.010831f, 0.013237f, 0.013489f, 0.011585f, -0.001964f, -0.005996f, 0.032485f, 0.043199f, 0.010680f, -0.013848f, 0.008789f, -0.009889f, -0.014260f, 0.025975f, -0.011007f, -0.028399f, -0.035667f, -0.017344f, -0.041967f, 0.018628f, -0.014728f, -0.012461f, 0.001531f, -0.011515f, -0.010879f, -0.025812f, 0.022000f, 0.012340f, -0.003318f, 0.013795f, 0.011138f, 0.029986f, 0.024019f, -0.050276f, -0.016045f, 0.054623f, -0.043103f, -0.013496f, -0.025959f, 0.038704f, 0.017927f, 0.017459f, 0.008026f, 0.005066f, 0.016128f, 0.041022f, 0.020231f, -0.019145f, -0.000018f, 0.000595f, -0.000838f, 0.015707f, 0.018897f, 0.001404f, 0.011299f, 0.009618f, -0.009291f, 0.012002f, 0.008048f, 0.024822f, -0.012126f, -0.025835f, -0.021062f, -0.017678f, 0.005147f, -0.003292f, 0.010068f, 0.009994f, - 0.011447f, 0.021460f, -0.009781f, 0.003460f, -0.009879f, -0.019134f, -0.007033f, 0.000372f, -0.020299f, 0.024474f, 0.031670f, -0.036049f, 0.011765f, -0.025643f, 0.019454f, -0.005921f, 0.007555f, -0.004833f, -0.019022f, -0.007083f, 0.021779f, -0.019827f, -0.005376f, 0.000779f, -0.035205f, -0.016938f, 0.007097f, -0.031276f, -0.002215f, 0.038243f, 0.021090f, -0.009620f, -0.010704f, 0.034437f, -0.002770f, -0.008145f, -0.028664f, 0.001104f, 0.002719f, -0.007874f, -0.000649f, -0.013501f, 0.004976f, -0.041424f, 0.037521f, -0.007848f, -0.013428f, -0.026351f, -0.029592f, -0.003340f, 0.035705f, -0.006828f, 0.009740f, -0.022518f, -0.013042f, -0.006558f, -0.021849f, -0.026444f, 0.023521f, -0.015134f, -0.012319f, 0.020675f, 0.020168f, -0.029493f, 0.009721f, 0.010498f, 0.024711f, 0.020265f, -0.008054f, -0.018899f, -0.012099f, -0.028776f, 0.030518f, 0.019870f, 0.009726f, 0.021574f, -0.023573f, 0.015111f, -0.004003f, 0.013785f, 0.015241f, -0.015658f, -0.001954f, 0.049914f, 0.041560f, -0.032695f, 0.011957f, 0.025586f, -0.021103f, 0.005584f, -0.048243f, 0.013494f, -0.026627f, 0.020483f, -0.015969f, -0.016962f, - -0.012770f, 0.055820f, 0.001909f, -0.016949f, 0.003573f, 0.018567f, 0.000926f, 0.011072f, -0.032143f, -0.003332f, 0.048658f, -0.000829f, -0.022325f, 0.007124f, -0.043339f, -0.022964f, -0.023448f, 0.019381f, -0.008844f, 0.029798f, 0.021297f, 0.038470f, -0.018213f, -0.003797f, -0.029929f, 0.024892f, 0.051120f, -0.017517f, -0.037210f, 0.001619f, -0.006114f, 0.058158f, -0.013016f, -0.025978f, 0.024876f, 0.010374f, 0.011479f, 0.020394f, 0.009572f, -0.078319f, 0.002095f, -0.007540f, 0.031457f, 0.050837f, -0.048578f, -0.000547f, 0.016900f, -0.026761f, -0.003119f, -0.071495f, -0.013815f, 0.032390f, -0.054893f, -0.036689f, -0.015636f, -0.025026f, 0.024334f, -0.016663f, -0.018448f, 0.027315f, 0.010959f, 0.007943f, 0.033010f, 0.000217f, -0.009036f, 0.018909f, 0.034551f, -0.035406f, -0.022058f, 0.045205f, 0.035324f, 0.007535f, 0.017272f, 0.007545f, -0.020201f, -0.035960f, 0.001773f, -0.004076f, -0.004663f, 0.005175f, -0.017271f, 0.008413f, -0.024541f, 0.005061f, 0.064380f, -0.035296f, -0.021201f, 0.026903f, 0.013548f, -0.019611f, 0.018140f, 0.016182f, 0.026699f, -0.061488f, -0.113271f, -0.052310f, - -0.007693f, 0.038665f, 0.003046f, 0.042674f, 0.039708f, -0.011787f, 0.006786f, -0.009488f, -0.021124f, -0.035298f, -0.020140f, -0.025393f, -0.014332f, 0.040723f, -0.051976f, -0.008855f, -0.043158f, -0.054050f, -0.008782f, -0.054521f, -0.043350f, 0.005788f, -0.010686f, -0.005923f, 0.010916f, 0.048592f, 0.004361f, -0.034486f, 0.003063f, -0.003709f, -0.009369f, -0.044877f, -0.001752f, 0.054615f, 0.006309f, -0.000388f, 0.023308f, 0.042571f, 0.029770f, 0.007904f, -0.015538f, 0.015210f, -0.012700f, -0.037966f, -0.068854f, 0.067737f, -0.006608f, 0.056498f, -0.002692f, 0.001237f, -0.017962f, -0.031896f, 0.061305f, -0.033145f, -0.024788f, -0.002537f, -0.040363f, -0.040221f, 0.036413f, 0.024634f, 0.015978f, -0.004531f, 0.020423f, -0.030437f, 0.015237f, -0.025393f, -0.030130f, -0.039506f, -0.024453f, -0.026985f, -0.045630f, 0.001422f, -0.043732f, -0.046723f, -0.010113f, -0.020337f, -0.055265f, -0.072036f, 0.006473f, -0.026109f, 0.011724f, -0.003482f, 0.025802f, 0.064093f, 0.001235f, 0.008280f, -0.033502f, -0.031973f, 0.026225f, 0.017550f, -0.024798f, 0.001941f, 0.016431f, -0.040298f, -0.034323f, -0.000467f, - 0.051493f, -0.044138f, -0.001334f, 0.002895f, 0.022650f, -0.037456f, 0.038947f, 0.023252f, 0.009633f, 0.000696f, -0.018998f, -0.043793f, -0.002430f, -0.009162f, 0.014499f, -0.022996f, -0.062413f, 0.051503f, -0.038398f, -0.014552f, -0.004531f, 0.050393f, -0.039065f, 0.018731f, -0.032456f, 0.020473f, -0.013054f, -0.043246f, 0.019397f, -0.055571f, -0.014670f, -0.014900f, 0.017853f, 0.048247f, -0.029223f, 0.018707f, 0.045234f, -0.036679f, 0.003987f, 0.012664f, 0.008737f, 0.015099f, -0.071800f, -0.019808f, -0.014647f, 0.025563f, 0.001681f, 0.000077f, 0.007599f, -0.013384f, 0.080247f, 0.009244f, 0.033445f, 0.094105f, -0.044285f, -0.023325f, -0.037172f, -0.012403f, 0.042220f, 0.004084f, 0.052214f, 0.015542f, -0.002468f, -0.018295f, 0.039422f, -0.023378f, 0.008636f, -0.015041f, 0.016094f, -0.024686f, 0.030093f, -0.013052f, -0.007383f, -0.015532f, 0.023175f, 0.017984f, -0.025932f, -0.004082f, 0.024529f, 0.009597f, -0.016593f, 0.003911f, -0.021267f, -0.067535f, 0.030377f, -0.034240f, -0.053649f, 0.035845f, 0.014896f, 0.038684f, -0.003152f, -0.032126f, -0.012812f, -0.006350f, 0.021214f, 0.031071f, - 0.031417f, 0.055082f, 0.051514f, -0.019136f, 0.007578f, -0.050334f, 0.001156f, -0.035446f, -0.069615f, -0.002807f, -0.056551f, 0.022936f, -0.044924f, -0.025537f, -0.029373f, -0.038055f, 0.005294f, -0.004999f, 0.004773f, -0.007264f, -0.004129f, 0.002140f, -0.072885f, 0.018174f, 0.012951f, 0.023702f, 0.037604f, 0.000432f, -0.056785f, 0.041573f, 0.001618f, -0.007411f, -0.004679f, 0.055450f, 0.110986f, -0.062219f, -0.045768f, -0.086802f, -0.168713f, -0.045062f, -0.015632f, 0.035436f, 0.025352f, -0.017640f, -0.030807f, 0.043846f, 0.059273f, 0.002010f, -0.000651f, -0.002663f, -0.043060f, -0.029647f, -0.029987f, -0.027669f, -0.045765f, -0.003793f, -0.010143f, -0.008968f, 0.034611f, -0.048091f, 0.037733f, 0.030377f, -0.008770f, 0.013959f, -0.000283f, -0.083235f, -0.055213f, -0.035263f, -0.027500f, -0.017013f, 0.007780f, 0.027024f, 0.011370f, 0.012705f, 0.078346f, 0.066105f, 0.017093f, -0.056102f, -0.025938f, -0.006468f, -0.025725f, -0.053706f, -0.122250f, -0.108042f, -0.045764f, -0.015839f, 0.005745f, 0.021983f, -0.084927f, -0.054498f, 0.044664f, 0.045810f, 0.061906f, -0.062281f, -0.068320f, 0.015712f, - -0.041896f, 0.094137f, -0.051553f, -0.013962f, -0.030727f, -0.025712f, 0.013238f, 0.018503f, -0.015447f, -0.055263f, 0.000754f, -0.025361f, -0.023328f, 0.023028f, 0.099007f, -0.031106f, 0.029826f, 0.001452f, -0.048528f, 0.009882f, -0.094848f, -0.017800f, 0.016522f, 0.004646f, -0.056612f, 0.034429f, 0.090200f, 0.068404f, -0.032264f, -0.055716f, -0.028318f, 0.009399f, 0.094786f, 0.016036f, -0.001035f, 0.003200f, 0.041843f, 0.049534f, 0.008559f, 0.038548f, 0.025230f, 0.057759f, -0.019455f, 0.009142f, 0.031180f, -0.029119f, -0.052724f, 0.030294f, 0.076509f, 0.020417f, 0.034857f, 0.006728f, 0.019657f, -0.104874f, 0.015514f, -0.001150f, 0.019774f, 0.108899f, 0.037931f, 0.017481f, -0.015429f, 0.050650f, -0.015944f, -0.018912f, 0.011423f, 0.032860f, 0.056687f, -0.016576f, 0.032849f, 0.010642f, 0.004571f, 0.028204f, 0.024966f, 0.002845f, -0.048217f, -0.021632f, 0.002101f, 0.083878f, 0.046409f, 0.046667f, 0.036779f, 0.042781f, -0.021592f, -0.094551f, -0.083717f, -0.131714f, -0.039593f, -0.015556f, 0.082616f, -0.002721f, -0.039821f, 0.010177f, -0.008414f, -0.031096f, -0.026652f, 0.005215f, - 0.042972f, 0.120220f, 0.052536f, 0.106579f, 0.054239f, 0.047571f, 0.043594f, -0.031163f, -0.027747f, -0.029844f, 0.011886f, 0.087253f, 0.026552f, -0.072434f, 0.029870f, -0.077946f, 0.037587f, -0.049421f, -0.012088f, -0.043426f, -0.048361f, -0.002236f, 0.004370f, -0.000745f, -0.060189f, 0.076072f, -0.017220f, 0.028438f, -0.075767f, 0.019538f, -0.019046f, -0.023134f, 0.036450f, -0.031847f, 0.074743f, 0.008513f, -0.032278f, 0.003321f, -0.024889f, -0.032159f, 0.019406f, -0.052830f, -0.013427f, 0.064352f, -0.016631f, 0.025625f, -0.006004f, -0.048609f, 0.049298f, -0.029403f, -0.110520f, 0.011792f, 0.005202f, -0.002287f, 0.008814f, -0.016976f, -0.024262f, -0.008448f, 0.045328f, -0.095416f, 0.051085f, -0.025071f, -0.016637f, 0.057124f, -0.040858f, 0.012987f, 0.021408f, -0.025140f, -0.045350f, 0.074078f, 0.068474f, 0.239865f, 0.096463f, -0.130651f, -0.061835f, -0.064082f, -0.100929f, 0.069811f, 0.214954f, 0.086076f, 0.040187f, -0.054362f, -0.015689f, -0.004017f, -0.003455f, 0.103039f, 0.069895f, 0.044616f, 0.154641f, -0.187167f, 0.010914f, 0.096817f, -0.024980f, 0.019267f, 0.100720f, 0.017047f, - -0.030775f, 0.054159f, -0.104609f, -0.207431f, -0.021570f, 0.019138f, -0.082070f, -0.010318f, 0.108399f, 0.017307f, 0.004136f, 0.040584f, -0.089886f, -0.179396f, -0.165245f, -0.075619f, 0.050730f, 0.103869f, 0.230870f, 0.056845f, -0.033487f, -0.031580f, -0.067326f, -0.142347f, -0.046789f, 0.099938f, 0.098456f, 0.105413f, 0.100334f, 0.063196f, 0.049221f, 0.012576f, 0.017622f, -0.093701f, -0.062522f, 0.009190f, 0.016874f, 0.041336f, 0.046845f, 0.133549f, 0.024827f, 0.074276f, -0.067746f, -0.060960f, -0.113595f, -0.031574f, -0.101335f, -0.030337f, -0.017932f, -0.168876f, -0.108813f, 0.063084f, 0.157281f, 0.188578f, 0.386010f, 0.238537f, 0.156610f, 0.142609f, 0.105489f, -0.020081f, -0.175348f, -0.186534f, -0.366127f, -0.384077f, -0.369630f, -0.234161f, -0.088894f, 0.077201f, 0.130377f, 0.227736f, 0.218279f, 0.155096f, 0.147727f, 0.196302f, 0.182768f, 0.167489f, 0.098581f, 0.069582f, 0.055219f, -0.014766f, -0.024982f, -0.232223f, -0.173334f, -0.209659f, -0.257117f, -0.112547f, -0.252446f, -0.202678f, -0.365410f, -0.317799f, -0.234369f, -0.158644f, -0.041070f, 0.165462f, 0.198463f, 0.167705f, - 0.175062f, 0.164033f, 0.314782f, 0.420574f, 0.368313f, 0.368331f, 0.316989f, 0.308045f, 0.217114f, 0.219710f, 0.019589f, -0.198398f, -0.384723f, -0.367764f, -0.538650f, -0.454921f, -0.650321f, -0.765442f, -0.691872f, -0.660337f, -0.425693f, -0.316882f, -0.023862f, 0.045248f, 0.198437f, 0.326576f, 0.541269f, 0.430700f, 0.647666f, 0.373119f, 0.059948f, -0.004552f} - }, - { - {0.028959f, -0.006870f, -0.003375f, -0.007745f, 0.000716f, -0.008862f, 0.000264f, 0.004151f, 0.002770f, -0.001291f, -0.005695f, 0.004395f, 0.006507f, 0.000378f, -0.003452f, -0.002837f, -0.002245f, -0.005481f, 0.002108f, 0.001239f, 0.001525f, 0.003855f, 0.007647f, 0.007502f, 0.001824f, 0.005909f, 0.003089f, -0.003230f, 0.001616f, 0.002575f, -0.000514f, 0.000930f, 0.000867f, -0.000832f, 0.003945f, -0.000259f, 0.007151f, 0.006219f, -0.006771f, 0.005167f, 0.001161f, 0.004229f, 0.000830f, -0.000682f, 0.000177f, 0.012845f, 0.000366f, 0.004223f, 0.001040f, 0.003630f, 0.005029f, 0.001014f, -0.003470f, 0.007507f, -0.009720f, -0.000838f, 0.002784f, 0.008117f, 0.002631f, -0.001232f, 0.006927f, -0.000753f, -0.005801f, 0.001895f, 0.001986f, 0.001326f, -0.001217f, 0.000797f, -0.000705f, -0.004356f, 0.001347f, -0.001782f, -0.002990f, 0.003374f, -0.005227f, 0.004424f, -0.009666f, -0.025763f, -0.002202f, -0.004082f, -0.003544f, 0.000429f, -0.004318f, 0.001659f, 0.002519f, 0.010628f, -0.003575f, -0.000365f, -0.009751f, 0.000784f, 0.009809f, 0.000752f, 0.007097f, -0.002017f, 0.002991f, -0.004017f, - -0.006136f, 0.000290f, 0.006764f, -0.000777f, -0.008407f, -0.000256f, 0.008211f, 0.002761f, -0.003457f, -0.002816f, -0.000335f, -0.001018f, -0.001855f, 0.000209f, -0.001321f, -0.002697f, -0.000292f, 0.001797f, 0.001215f, -0.000251f, -0.006351f, 0.009685f, 0.013106f, 0.000548f, 0.001604f, -0.005130f, -0.002897f, 0.001168f, -0.006703f, -0.007409f, 0.004612f, -0.005993f, 0.004563f, 0.005915f, 0.005862f, 0.002295f, -0.000761f, 0.001691f, 0.001314f, 0.004472f, -0.009251f, 0.000929f, -0.001104f, -0.006705f, -0.009123f, 0.000360f, 0.004683f, -0.003448f, -0.000437f, -0.001047f, -0.000647f, 0.006456f, 0.003139f, 0.000718f, 0.002280f, -0.002509f, -0.023296f, -0.005922f, 0.009540f, -0.001764f, -0.006939f, 0.002627f, -0.017193f, -0.007236f, -0.002202f, -0.003651f, -0.008734f, -0.010068f, 0.005514f, 0.007463f, 0.007168f, -0.009456f, -0.012872f, 0.000995f, -0.007405f, -0.014597f, 0.003546f, -0.001404f, 0.004306f, 0.015329f, -0.004904f, -0.002189f, -0.009698f, 0.013167f, 0.001359f, 0.006306f, 0.005013f, 0.010708f, 0.006005f, 0.002942f, -0.010867f, -0.001803f, -0.009976f, -0.003371f, 0.000718f, -0.004854f, - 0.003707f, 0.002357f, -0.004597f, -0.010076f, 0.006307f, 0.009358f, 0.003026f, -0.005295f, -0.007126f, -0.005136f, 0.002565f, -0.008855f, -0.010283f, -0.003570f, 0.005367f, -0.003490f, 0.002721f, 0.005985f, 0.004305f, -0.005506f, 0.009672f, 0.000235f, 0.008229f, -0.007446f, -0.005675f, -0.003967f, -0.003981f, 0.005023f, -0.003215f, -0.000333f, 0.009570f, 0.002740f, 0.000104f, -0.009845f, 0.002269f, -0.004407f, 0.006334f, -0.004681f, 0.005938f, 0.008562f, 0.003229f, -0.005115f, 0.003490f, -0.002331f, 0.002352f, 0.015941f, 0.009551f, -0.013230f, 0.008854f, -0.007232f, -0.003847f, -0.001823f, 0.000036f, 0.006824f, 0.000011f, 0.018587f, 0.005089f, -0.007009f, -0.004929f, -0.004523f, 0.012744f, 0.003140f, 0.012251f, 0.004185f, 0.008140f, 0.013150f, 0.014689f, 0.005769f, -0.002026f, -0.001445f, 0.001919f, -0.011975f, -0.011552f, 0.003625f, -0.008872f, 0.004875f, 0.001928f, -0.002835f, -0.001663f, 0.003572f, 0.012096f, -0.004058f, -0.004701f, -0.006392f, 0.015534f, -0.002113f, -0.020438f, -0.009897f, -0.008417f, -0.007194f, 0.007714f, 0.007997f, 0.006414f, 0.010517f, 0.004051f, 0.006642f, - -0.000895f, -0.000497f, -0.000927f, 0.010646f, 0.002746f, 0.006350f, -0.014582f, 0.001157f, -0.000090f, 0.001069f, 0.000147f, 0.006454f, 0.003422f, 0.002305f, -0.007585f, -0.005907f, 0.034471f, 0.008436f, 0.004709f, -0.003542f, -0.003081f, 0.004152f, 0.001816f, 0.010117f, 0.011752f, 0.000183f, 0.017608f, 0.008035f, -0.007077f, -0.005265f, -0.001102f, 0.009496f, -0.001670f, -0.003995f, 0.009019f, 0.002132f, 0.025678f, 0.007672f, 0.004570f, 0.001872f, -0.003183f, 0.002034f, 0.003341f, 0.005903f, -0.001838f, 0.000860f, 0.013477f, 0.002789f, 0.014899f, -0.006998f, -0.008122f, 0.005958f, 0.022691f, 0.007600f, 0.004984f, -0.001178f, -0.010755f, -0.003112f, 0.002492f, 0.001559f, -0.000902f, 0.001731f, -0.015004f, 0.001902f, -0.006989f, 0.006637f, 0.003825f, -0.004743f, 0.002590f, 0.005954f, 0.002657f, -0.005786f, -0.007650f, 0.002610f, 0.001689f, 0.001005f, -0.009669f, 0.003331f, -0.004272f, 0.006736f, -0.001673f, 0.002175f, 0.002713f, -0.000267f, 0.001020f, -0.002020f, -0.000111f, 0.021709f, 0.001067f, 0.008579f, -0.001306f, -0.004147f, 0.001196f, 0.002696f, -0.000442f, 0.004862f, - -0.007461f, -0.001669f, 0.008148f, -0.004330f, -0.011958f, -0.000434f, 0.020400f, -0.001770f, 0.016056f, 0.007715f, 0.022110f, 0.002229f, 0.002255f, 0.007533f, -0.005954f, -0.013502f, -0.016975f, 0.003574f, -0.008561f, 0.019692f, 0.011713f, 0.013749f, -0.002517f, -0.006466f, 0.001939f, 0.002646f, 0.006815f, 0.018316f, 0.002397f, 0.007272f, -0.008511f, 0.005394f, -0.006017f, 0.001931f, -0.003207f, 0.005543f, 0.010901f, 0.000756f, 0.010405f, 0.003056f, 0.005230f, -0.003758f, -0.002455f, 0.013022f, -0.003200f, -0.004291f, 0.010425f, -0.007098f, -0.000590f, 0.000581f, -0.004577f, -0.006990f, 0.004576f, -0.007919f, -0.001376f, -0.009881f, -0.018945f, -0.003199f, -0.002954f, -0.001627f, -0.019771f, -0.008697f, -0.006120f, -0.006334f, 0.007268f, 0.018093f, -0.005072f, 0.004902f, 0.010009f, -0.004161f, 0.001821f, 0.000471f, 0.001207f, -0.007899f, 0.008344f, -0.025888f, 0.002559f, 0.013355f, 0.007563f, -0.014696f, -0.000747f, 0.000290f, 0.003703f, 0.004857f, -0.000506f, -0.011547f, -0.010369f, 0.001250f, 0.018393f, 0.008186f, 0.011021f, 0.017782f, -0.012040f, 0.012558f, 0.024306f, -0.002657f, - 0.005681f, -0.014087f, 0.004936f, 0.004452f, -0.011449f, -0.006774f, -0.002287f, 0.005048f, -0.011589f, -0.016091f, 0.003206f, 0.001202f, -0.013165f, 0.000541f, 0.004426f, -0.003266f, 0.028680f, -0.002171f, -0.020000f, -0.001938f, 0.007149f, 0.015470f, 0.006080f, 0.006613f, -0.012792f, 0.002988f, 0.004227f, -0.012139f, -0.000631f, -0.002568f, 0.019893f, 0.011500f, -0.003185f, -0.007403f, -0.015238f, 0.005994f, 0.006213f, -0.009656f, -0.000257f, 0.003068f, 0.006033f, 0.005563f, -0.007782f, -0.000797f, -0.001699f, 0.018003f, -0.015610f, 0.001397f, -0.004090f, 0.016249f, -0.001236f, -0.004450f, -0.007034f, 0.001955f, -0.007164f, -0.016113f, 0.009381f, 0.009189f, 0.002794f, -0.006124f, 0.001503f, 0.004615f, 0.029608f, 0.020251f, 0.014586f, 0.021471f, 0.008233f, -0.001393f, 0.002721f, 0.008234f, -0.021503f, 0.011350f, 0.000057f, 0.012184f, -0.008808f, -0.003851f, -0.013922f, 0.004387f, 0.023897f, -0.023077f, -0.015182f, -0.024549f, 0.012517f, -0.005178f, 0.000621f, -0.010858f, 0.001312f, -0.003683f, -0.011567f, 0.004952f, 0.005472f, -0.017223f, -0.002542f, 0.003849f, -0.004017f, 0.010055f, - -0.025920f, -0.011862f, 0.026411f, 0.003330f, -0.000479f, -0.001922f, 0.000946f, -0.012723f, -0.014230f, 0.001577f, -0.020694f, -0.004038f, 0.002186f, 0.006336f, -0.008804f, -0.001261f, 0.025924f, -0.000851f, 0.009230f, 0.020002f, -0.017646f, -0.005367f, 0.004445f, 0.005391f, 0.003722f, -0.004629f, -0.012454f, 0.015466f, -0.001277f, -0.012849f, 0.010368f, -0.001787f, 0.002698f, 0.004219f, -0.007067f, -0.004703f, -0.003080f, -0.049047f, -0.028291f, 0.023133f, -0.009272f, -0.009854f, 0.013000f, 0.012578f, -0.021812f, -0.027914f, -0.009743f, -0.009444f, -0.011310f, -0.001098f, -0.020234f, -0.013356f, 0.006763f, 0.001684f, -0.026989f, -0.028337f, -0.016807f, -0.007056f, -0.001849f, 0.015996f, -0.001415f, -0.009906f, 0.007933f, -0.023315f, 0.000473f, -0.000051f, 0.000813f, 0.009633f, 0.004491f, -0.016608f, -0.013505f, 0.011840f, 0.003631f, 0.040841f, 0.009665f, -0.011945f, 0.001780f, 0.002575f, 0.000439f, 0.011784f, 0.002089f, 0.005729f, -0.003927f, -0.007312f, 0.002793f, -0.021349f, -0.003979f, -0.008454f, -0.011698f, 0.004153f, -0.017691f, 0.022700f, -0.002181f, 0.010451f, 0.015768f, 0.006156f, - 0.008795f, 0.000741f, -0.008878f, 0.001374f, -0.000148f, -0.010341f, 0.017201f, -0.004642f, 0.029854f, 0.001084f, 0.001357f, 0.003416f, -0.004774f, -0.013102f, 0.008211f, -0.009773f, 0.000393f, 0.018140f, 0.011870f, 0.035082f, -0.018829f, 0.015759f, 0.008972f, 0.011267f, -0.003507f, -0.021895f, 0.004574f, -0.007109f, -0.017068f, 0.036129f, -0.001010f, -0.012457f, -0.035809f, 0.021102f, 0.008026f, -0.002368f, -0.012384f, -0.018182f, 0.002026f, 0.036574f, 0.015941f, -0.003546f, -0.002250f, -0.018635f, -0.011942f, 0.009026f, 0.006452f, -0.015102f, -0.007609f, 0.011274f, 0.004856f, -0.002790f, 0.013048f, 0.015538f, 0.004262f, 0.021195f, 0.028122f, 0.013819f, -0.004719f, 0.003456f, 0.003600f, 0.001924f, 0.015329f, -0.022310f, 0.022202f, -0.004038f, -0.009182f, -0.018702f, 0.001484f, 0.010909f, 0.010951f, -0.021746f, 0.005533f, 0.012029f, 0.003687f, -0.016719f, -0.028151f, -0.030009f, 0.008502f, 0.008633f, 0.003437f, -0.013820f, 0.000084f, 0.017910f, -0.008330f, -0.019957f, -0.029615f, -0.000689f, 0.007750f, -0.027564f, 0.010580f, 0.018614f, -0.008579f, 0.012913f, 0.008159f, 0.043134f, - 0.030569f, 0.005257f, -0.007625f, -0.006197f, -0.004972f, -0.032016f, -0.011131f, -0.001898f, 0.020692f, -0.015579f, -0.006702f, -0.008139f, 0.001456f, 0.030571f, -0.023927f, -0.008344f, -0.000331f, 0.013429f, -0.004210f, -0.020193f, -0.029949f, 0.009319f, -0.020424f, -0.011571f, -0.012419f, -0.016257f, 0.005414f, -0.026100f, -0.010930f, 0.019582f, 0.032995f, -0.000475f, -0.019384f, -0.019961f, 0.030417f, -0.005360f, -0.015397f, 0.028906f, 0.001610f, -0.000233f, 0.001915f, -0.035996f, 0.014322f, -0.014773f, 0.012813f, 0.009056f, -0.022505f, -0.004875f, -0.022881f, 0.006622f, -0.022223f, -0.006360f, 0.009809f, 0.010267f, -0.007268f, 0.005140f, -0.027201f, 0.016122f, -0.001953f, 0.010021f, 0.010946f, 0.004850f, -0.006015f, -0.008839f, 0.027378f, -0.022141f, 0.013578f, -0.008015f, -0.023295f, -0.017574f, -0.001490f, 0.020914f, -0.013701f, 0.007804f, 0.004983f, -0.010543f, 0.011465f, -0.002816f, -0.005679f, 0.018644f, 0.001964f, -0.010303f, -0.027818f, -0.000258f, -0.035769f, 0.007068f, 0.001600f, 0.017926f, -0.015207f, -0.002178f, 0.007382f, 0.008483f, 0.008239f, -0.022198f, 0.031271f, 0.024325f, - 0.002663f, 0.018221f, -0.009440f, -0.032152f, 0.006109f, -0.013014f, -0.017256f, 0.016501f, 0.036300f, 0.007536f, -0.012341f, -0.012974f, -0.032435f, 0.000874f, -0.000507f, 0.047760f, -0.020472f, 0.000009f, -0.000626f, -0.000715f, -0.030395f, -0.031260f, 0.023131f, 0.001640f, 0.012151f, -0.003499f, -0.038464f, -0.020261f, 0.000524f, -0.005516f, -0.010101f, -0.009834f, 0.021136f, -0.004543f, 0.012738f, -0.016178f, 0.030222f, -0.038573f, 0.016395f, 0.020527f, 0.009017f, 0.010970f, 0.006558f, 0.031062f, 0.012424f, -0.002021f, 0.002915f, 0.000436f, 0.026468f, 0.045957f, -0.009677f, 0.003937f, -0.018456f, 0.019699f, 0.024710f, -0.019499f, -0.002013f, -0.039201f, -0.005006f, -0.049929f, -0.024570f, 0.018732f, -0.019443f, -0.044438f, 0.004813f, -0.024233f, 0.001850f, 0.000261f, -0.027318f, -0.027272f, 0.012872f, 0.025247f, 0.008595f, -0.030513f, 0.015177f, -0.034233f, -0.010984f, -0.012902f, 0.011421f, -0.014311f, -0.005442f, 0.015791f, 0.003664f, -0.011498f, -0.023108f, 0.025062f, 0.025581f, 0.031708f, 0.005124f, -0.003874f, 0.002088f, 0.009994f, -0.001455f, 0.012900f, -0.013476f, 0.017073f, - -0.005806f, 0.019736f, 0.016976f, 0.011886f, -0.004761f, 0.000738f, -0.029934f, 0.010495f, -0.006750f, 0.023296f, 0.005296f, -0.054099f, 0.009386f, 0.026795f, 0.036977f, -0.020490f, -0.027133f, 0.033994f, 0.016412f, 0.024039f, -0.041215f, 0.021288f, 0.054015f, 0.056235f, 0.004596f, 0.001893f, 0.032743f, -0.021276f, -0.028329f, 0.019586f, -0.031583f, 0.013193f, -0.014483f, -0.011462f, -0.006965f, -0.068080f, -0.040991f, -0.030933f, -0.007946f, -0.029945f, -0.054753f, 0.041641f, 0.005388f, 0.013364f, -0.006292f, 0.029217f, 0.001720f, -0.026643f, 0.020812f, 0.007167f, -0.008193f, -0.016450f, -0.011254f, 0.002903f, 0.008173f, 0.025772f, -0.014300f, 0.020027f, 0.007574f, 0.037147f, -0.053734f, -0.015585f, -0.007766f, 0.006114f, 0.023193f, 0.031444f, 0.008235f, -0.027195f, 0.018628f, 0.024553f, 0.022308f, -0.006895f, 0.008347f, 0.000649f, -0.008112f, -0.004559f, 0.002405f, 0.007365f, 0.003810f, 0.017961f, 0.003938f, -0.024595f, 0.023007f, -0.025452f, -0.030627f, 0.004076f, 0.023517f, -0.011839f, -0.007386f, 0.007504f, 0.011838f, 0.018870f, -0.010472f, 0.008611f, 0.044929f, -0.018284f, - -0.046382f, -0.061466f, -0.030198f, -0.041751f, 0.019253f, 0.035425f, 0.023322f, 0.008485f, 0.021838f, 0.012543f, 0.023934f, -0.020321f, 0.026789f, 0.014270f, 0.010398f, 0.028537f, 0.035170f, -0.011158f, 0.055715f, 0.005421f, 0.008747f, -0.011512f, 0.020263f, -0.063669f, -0.028098f, -0.043475f, -0.044902f, 0.017959f, -0.039157f, 0.038694f, 0.044006f, 0.002066f, 0.009642f, -0.006605f, 0.008178f, -0.041519f, 0.017300f, 0.046317f, -0.026093f, -0.053474f, 0.007314f, -0.019974f, -0.016878f, -0.052130f, 0.009334f, 0.019463f, 0.000090f, -0.006857f, 0.017164f, -0.029601f, -0.004616f, 0.019692f, -0.010320f, -0.026188f, 0.003633f, -0.012927f, 0.027824f, -0.017835f, -0.009547f, 0.025911f, 0.022789f, 0.047599f, 0.006879f, 0.011716f, -0.003682f, 0.012994f, 0.017584f, 0.029509f, -0.007619f, -0.000686f, -0.017280f, 0.038810f, -0.047618f, 0.052436f, 0.002942f, -0.020617f, 0.025666f, -0.018831f, -0.012624f, 0.048094f, -0.067795f, 0.011292f, -0.012887f, 0.013413f, -0.024878f, 0.012608f, 0.029882f, -0.014878f, 0.000369f, -0.008430f, -0.007739f, -0.008134f, 0.056384f, -0.061830f, -0.010448f, 0.068353f, - -0.027192f, -0.043339f, 0.004702f, -0.016753f, -0.013948f, -0.024613f, -0.029626f, 0.037565f, 0.016959f, 0.001918f, 0.018459f, 0.044604f, 0.027253f, -0.003575f, 0.009818f, 0.029844f, 0.039319f, -0.034809f, 0.016682f, 0.031935f, 0.014753f, 0.011425f, 0.045352f, 0.021103f, 0.010011f, -0.001780f, 0.020811f, -0.002654f, 0.023474f, 0.018406f, 0.011030f, -0.021301f, 0.040286f, -0.032853f, -0.003278f, 0.049125f, 0.049729f, -0.011980f, -0.042533f, 0.016013f, 0.000202f, 0.042150f, 0.073946f, 0.016049f, -0.010259f, 0.004915f, -0.040944f, -0.005178f, -0.010061f, -0.009212f, 0.001906f, 0.037106f, -0.014875f, 0.016264f, 0.046045f, 0.007510f, -0.040230f, 0.027385f, -0.000768f, 0.017435f, 0.043607f, 0.059372f, -0.015157f, -0.015670f, -0.003345f, -0.046888f, -0.066897f, 0.002089f, -0.029095f, -0.004770f, -0.035369f, -0.003476f, 0.004389f, 0.005773f, 0.032422f, 0.000005f, -0.011530f, 0.046906f, -0.087624f, 0.048397f, -0.037125f, -0.085624f, -0.025858f, -0.021280f, -0.003433f, -0.019443f, 0.010058f, -0.023386f, -0.053673f, -0.031782f, -0.016319f, -0.004450f, 0.005724f, -0.021524f, 0.021059f, 0.042182f, - 0.001157f, -0.002199f, 0.011048f, 0.002996f, -0.008199f, -0.015070f, -0.009161f, 0.011735f, 0.011986f, -0.003269f, 0.011361f, 0.051742f, 0.013660f, -0.014559f, -0.051382f, -0.007688f, 0.035445f, -0.043345f, -0.021129f, -0.016243f, -0.000047f, -0.002914f, 0.027006f, -0.008692f, 0.002651f, 0.038432f, 0.012861f, 0.042575f, -0.006711f, -0.019532f, -0.009991f, -0.010466f, -0.011870f, 0.020668f, 0.001173f, 0.014040f, 0.024552f, -0.044977f, 0.005340f, -0.011802f, -0.029618f, -0.021148f, 0.042459f, 0.031779f, -0.000375f, -0.021754f, 0.006584f, 0.018258f, -0.000901f, 0.012228f, -0.033876f, -0.076103f, -0.039300f, -0.029227f, 0.021218f, -0.000202f, -0.013075f, 0.025651f, -0.034890f, 0.041851f, -0.003788f, -0.064989f, 0.012880f, -0.031110f, -0.007021f, -0.004309f, -0.008242f, -0.041254f, 0.012608f, 0.002585f, 0.032517f, -0.070863f, 0.000635f, 0.035509f, 0.003704f, -0.016548f, -0.036592f, -0.002461f, 0.020139f, 0.031083f, -0.026093f, -0.008804f, 0.016051f, 0.035435f, 0.031535f, -0.030723f, -0.006892f, -0.049995f, 0.022840f, 0.025711f, 0.015210f, -0.014133f, -0.004514f, -0.013520f, -0.005929f, -0.016634f, - 0.004245f, 0.036715f, -0.014173f, -0.014404f, -0.013165f, -0.020804f, 0.041011f, 0.035675f, -0.004070f, 0.050205f, -0.002851f, 0.017675f, -0.045003f, 0.036192f, 0.015694f, -0.050401f, -0.016664f, 0.056721f, 0.023286f, 0.014848f, 0.010744f, -0.027770f, -0.021539f, -0.029920f, 0.049504f, -0.027007f, 0.038356f, 0.038110f, -0.044885f, 0.102229f, -0.021803f, 0.061995f, 0.003912f, -0.018307f, -0.025899f, 0.043164f, 0.022796f, -0.048391f, -0.006791f, 0.025070f, 0.042761f, 0.003520f, -0.036223f, 0.017303f, -0.069823f, -0.018651f, -0.063554f, -0.087631f, 0.002476f, -0.033930f, 0.010637f, -0.006903f, -0.014399f, -0.033760f, -0.023668f, 0.018938f, 0.051713f, -0.044540f, -0.010410f, -0.076327f, -0.067423f, 0.017400f, 0.025366f, -0.042465f, -0.044739f, 0.001644f, 0.008191f, -0.071369f, 0.002195f, 0.000207f, 0.034812f, -0.032907f, -0.000399f, 0.028718f, -0.021611f, -0.038171f, -0.042916f, -0.021514f, -0.039450f, -0.032437f, -0.041227f, 0.052463f, -0.071714f, -0.045096f, 0.059985f, -0.004314f, 0.014875f, -0.054876f, -0.012106f, -0.017573f, -0.001746f, 0.085461f, -0.015822f, -0.004732f, 0.005222f, 0.038148f, - -0.002728f, -0.042534f, -0.021220f, -0.031886f, 0.005406f, 0.101632f, 0.016237f, -0.041559f, 0.075093f, 0.052772f, -0.055784f, 0.054065f, 0.092542f, -0.005108f, -0.042808f, 0.059305f, -0.015989f, 0.060987f, 0.059884f, 0.045173f, -0.120837f, -0.079332f, -0.077012f, -0.031752f, -0.049852f, 0.063270f, 0.029762f, 0.051210f, -0.003818f, -0.110457f, -0.011841f, 0.013402f, 0.077756f, -0.006867f, 0.021530f, 0.063518f, -0.020631f, -0.052497f, 0.009575f, -0.006989f, 0.089707f, 0.051672f, -0.023113f, -0.042266f, 0.095087f, 0.002750f, 0.049973f, 0.018233f, 0.089101f, 0.069305f, 0.060985f, 0.002446f, -0.042748f, -0.029376f, -0.031476f, 0.067039f, -0.028917f, -0.051544f, -0.021322f, -0.000778f, 0.002973f, 0.027864f, -0.025600f, 0.007947f, -0.138165f, 0.012870f, 0.027304f, 0.020393f, -0.054794f, -0.058633f, 0.022248f, 0.047397f, -0.056647f, 0.021080f, -0.029941f, -0.030336f, -0.036263f, -0.006593f, 0.049321f, -0.032292f, 0.053710f, -0.015010f, 0.024338f, -0.091881f, -0.051969f, -0.004712f, 0.052935f, 0.030893f, -0.059380f, -0.072012f, -0.026820f, 0.005026f, 0.080199f, 0.029947f, -0.000176f, -0.048795f, - -0.011041f, 0.021357f, 0.162609f, 0.015664f, -0.085337f, -0.194762f, -0.016524f, 0.114604f, 0.030109f, 0.049802f, -0.004059f, 0.069706f, -0.010446f, 0.030570f, -0.014810f, 0.039570f, 0.057506f, 0.029846f, -0.025508f, -0.063989f, 0.077168f, 0.085848f, -0.017425f, -0.084457f, -0.049653f, 0.009322f, 0.051444f, 0.016992f, 0.019889f, 0.003854f, 0.014930f, 0.006516f, 0.014939f, -0.015683f, -0.095652f, 0.000565f, 0.063460f, 0.047994f, -0.016466f, 0.006181f, 0.040400f, 0.083492f, 0.053460f, 0.041956f, -0.044900f, -0.031680f, -0.004720f, -0.006656f, -0.069502f, 0.054327f, 0.034709f, 0.056601f, 0.114187f, -0.053581f, -0.031886f, -0.001730f, -0.025817f, -0.022729f, -0.043100f, 0.089411f, -0.046398f, -0.051219f, -0.051646f, -0.014877f, 0.115152f, 0.033658f, 0.049164f, 0.004260f, -0.001805f, -0.017594f, 0.075839f, 0.063762f, -0.019052f, -0.052566f, 0.031946f, 0.006243f, 0.002207f, -0.052205f, 0.009806f, 0.118479f, 0.101176f, 0.009481f, 0.013052f, -0.072755f, -0.123896f, -0.118869f, -0.049654f, 0.087788f, 0.107810f, 0.100463f, 0.064620f, -0.020750f, -0.061240f, -0.067417f, -0.034688f, 0.021450f, - 0.047543f, 0.067249f, 0.012958f, -0.060137f, -0.040178f, -0.015222f, -0.040162f, -0.026737f, 0.016807f, 0.069967f, 0.113634f, 0.064339f, 0.039871f, 0.025426f, -0.060046f, -0.012822f, -0.127616f, -0.155450f, -0.087089f, -0.050270f, -0.033957f, 0.065580f, 0.117851f, 0.117431f, 0.118248f, 0.090927f, 0.047611f, 0.001685f, -0.038038f, -0.017479f, -0.066030f, -0.136761f, -0.002246f, 0.007551f, 0.021813f, 0.039066f, 0.035433f, 0.039686f, -0.138171f, -0.085587f, -0.042773f, -0.090485f, -0.025805f, 0.058526f, -0.026752f, 0.037719f, 0.017622f, -0.044170f, 0.043971f, -0.037994f, 0.048789f, 0.035492f, -0.016971f, -0.069935f, -0.114981f, -0.134720f, -0.074341f, 0.020298f, -0.220044f, -0.114341f, -0.056552f, 0.074510f, 0.020495f, 0.285238f, 0.295774f, 0.221045f, 0.289076f, 0.299800f, 0.276048f, 0.196637f, 0.182261f, 0.198621f, 0.084320f, -0.008397f, -0.114272f, -0.183570f, -0.251308f, -0.247185f, -0.366689f, -0.222553f, -0.138935f, -0.111944f, -0.157357f, -0.081709f, -0.013457f, -0.118403f, -0.085835f, -0.095188f, -0.010899f, -0.053450f, -0.008755f, -0.074586f, -0.028274f, 0.059511f, 0.066725f, 0.025870f, - 0.000750f, 0.065530f, 0.061240f, -0.114357f, 0.044720f, 0.098405f, 0.206829f, 0.151110f, 0.199178f, 0.087869f, 0.093219f, 0.312632f, 0.184672f, 0.320615f, 0.127295f, 0.302867f, 0.224054f, 0.267891f, 0.364760f, 0.338198f, 0.289049f, 0.311117f, 0.355105f, 0.372988f, 0.334885f, 0.369391f, 0.273979f, 0.375670f, 0.322257f, 0.276161f, 0.309682f, 0.172488f, 0.343321f, 0.170095f, 0.132479f, -0.089943f, 0.040951f, -0.178185f, -0.199443f, -0.215743f, -0.006303f}, - {0.028151f, -0.003043f, -0.004712f, 0.001293f, 0.002069f, 0.007711f, -0.002021f, -0.004592f, -0.007568f, 0.008244f, 0.000716f, 0.002734f, 0.008263f, 0.002279f, -0.001302f, 0.002104f, 0.004355f, 0.002864f, -0.004406f, 0.009559f, 0.001000f, -0.012480f, -0.002362f, 0.008294f, 0.003205f, 0.000905f, -0.004534f, -0.002612f, 0.004068f, -0.001520f, 0.016456f, -0.002968f, 0.003751f, 0.000645f, 0.001501f, -0.009223f, -0.003150f, -0.001917f, 0.003385f, -0.001236f, 0.002035f, -0.005299f, -0.002930f, 0.003514f, 0.005212f, 0.003647f, 0.006195f, 0.006354f, 0.004071f, -0.005598f, -0.008796f, 0.001106f, 0.005198f, 0.005740f, 0.004323f, -0.003078f, -0.003864f, -0.013629f, 0.007027f, -0.003245f, -0.005251f, -0.000882f, -0.002335f, 0.002748f, -0.006481f, 0.002800f, -0.008204f, 0.003495f, -0.007791f, 0.007076f, -0.003108f, 0.005917f, -0.001505f, -0.000983f, -0.009270f, -0.000845f, -0.014480f, -0.028107f, -0.005140f, 0.000572f, -0.006671f, -0.013121f, -0.004579f, 0.009959f, -0.015844f, -0.008452f, -0.005366f, -0.002866f, 0.004794f, -0.002033f, 0.005360f, 0.002739f, 0.004674f, -0.000334f, 0.005830f, -0.005031f, - 0.000804f, -0.002089f, 0.000964f, 0.015318f, -0.003386f, -0.000718f, -0.007657f, 0.009552f, 0.005630f, 0.004708f, 0.011487f, -0.005741f, -0.003550f, 0.004203f, 0.010271f, -0.002596f, -0.000856f, -0.008202f, -0.009386f, -0.005951f, 0.006432f, -0.007970f, -0.007179f, -0.000665f, 0.009231f, -0.012478f, -0.002853f, -0.010389f, -0.005296f, -0.002815f, 0.001313f, -0.000737f, -0.007752f, 0.009969f, 0.001521f, 0.008989f, -0.003689f, -0.002017f, -0.011073f, -0.000037f, -0.003971f, -0.003934f, 0.006168f, 0.003717f, -0.002087f, 0.003545f, 0.006849f, -0.001863f, 0.002881f, -0.004919f, -0.002985f, -0.001209f, -0.004786f, 0.004048f, 0.001450f, 0.002763f, -0.023120f, -0.008534f, 0.006871f, -0.006341f, -0.002608f, -0.002790f, 0.003321f, -0.001375f, -0.005988f, 0.009505f, 0.008825f, 0.002698f, -0.000941f, 0.004290f, -0.011813f, -0.001962f, -0.011677f, -0.006170f, 0.008852f, -0.001678f, 0.001688f, -0.001423f, -0.001226f, -0.000039f, 0.018363f, 0.016452f, 0.007581f, 0.008661f, 0.010684f, -0.002299f, -0.001100f, -0.003907f, 0.009436f, -0.001187f, -0.003426f, 0.002333f, -0.005322f, 0.003429f, 0.006816f, -0.003740f, - 0.007669f, 0.008224f, 0.016777f, -0.006859f, -0.007765f, 0.006791f, -0.004208f, -0.000127f, 0.003615f, -0.010077f, 0.000686f, -0.005475f, -0.005582f, 0.012420f, 0.007657f, 0.008794f, -0.005173f, -0.007454f, 0.005017f, -0.008635f, 0.005830f, 0.024224f, 0.001547f, 0.001084f, 0.005738f, 0.001735f, 0.002486f, 0.013335f, -0.007303f, -0.002812f, 0.002913f, 0.000763f, -0.006575f, -0.006535f, -0.006461f, -0.005354f, -0.001146f, -0.006915f, 0.007473f, 0.011754f, -0.005602f, 0.005753f, 0.018778f, 0.006108f, 0.004361f, -0.013218f, 0.010909f, 0.002693f, -0.016748f, 0.006971f, -0.004655f, -0.010265f, 0.004127f, -0.001578f, 0.003973f, 0.009592f, -0.010219f, -0.010970f, -0.004759f, 0.014473f, 0.000445f, 0.007080f, 0.015210f, -0.022787f, -0.018196f, 0.002753f, 0.011139f, -0.008379f, 0.000724f, 0.014852f, 0.003884f, -0.002177f, -0.004545f, 0.017802f, 0.002188f, -0.004637f, 0.002496f, -0.016619f, 0.001822f, -0.009288f, 0.008288f, 0.001186f, 0.008795f, -0.004744f, -0.002292f, 0.003706f, 0.000182f, 0.000852f, 0.000411f, 0.008168f, 0.006724f, -0.009668f, 0.005204f, 0.007151f, -0.012949f, 0.001131f, - -0.005942f, 0.001978f, -0.003135f, -0.010352f, -0.000070f, 0.008023f, 0.007147f, 0.015895f, -0.010496f, 0.012115f, -0.008779f, -0.002404f, 0.007143f, -0.009054f, -0.012780f, -0.005326f, 0.037330f, 0.017096f, 0.022508f, -0.001600f, -0.006562f, -0.007972f, -0.008503f, 0.004713f, -0.007191f, 0.010712f, -0.001471f, 0.014609f, 0.000580f, 0.007830f, 0.009148f, 0.007518f, 0.005947f, 0.008493f, -0.028230f, -0.008045f, -0.002944f, -0.005678f, -0.005494f, -0.008585f, -0.020224f, 0.001096f, 0.013281f, -0.008189f, 0.007826f, -0.006540f, -0.010291f, -0.007298f, 0.000755f, -0.006131f, -0.002736f, -0.006294f, -0.000851f, 0.016623f, 0.000463f, 0.007575f, 0.009960f, 0.013698f, -0.006791f, 0.003352f, -0.003483f, -0.010239f, 0.011362f, -0.006436f, -0.000983f, -0.010128f, 0.007023f, 0.000096f, -0.000376f, -0.002647f, -0.005381f, 0.003705f, 0.009970f, -0.004217f, 0.005314f, 0.005882f, 0.004054f, 0.018449f, -0.019050f, -0.007452f, -0.000366f, -0.009753f, -0.013952f, -0.004794f, -0.016979f, 0.002880f, 0.017618f, -0.012292f, -0.007484f, -0.013829f, -0.000638f, -0.002986f, -0.008833f, -0.008964f, -0.001088f, 0.012052f, - 0.016301f, -0.008847f, 0.008311f, -0.007141f, -0.004018f, -0.002589f, -0.021022f, 0.015434f, -0.004729f, -0.001779f, 0.023496f, 0.015264f, 0.015596f, -0.006036f, 0.000275f, 0.003302f, -0.004003f, 0.005776f, -0.012484f, 0.000158f, -0.008639f, 0.010229f, -0.009775f, -0.006011f, -0.001302f, 0.002182f, -0.011985f, 0.002786f, 0.000940f, 0.015898f, -0.000184f, -0.020401f, 0.011794f, 0.011908f, 0.015845f, -0.001959f, 0.003779f, -0.010974f, -0.009024f, -0.003017f, -0.008764f, 0.004000f, 0.001949f, -0.002476f, -0.001541f, 0.009491f, 0.013403f, -0.017965f, -0.004303f, 0.000766f, -0.007929f, -0.007183f, 0.012109f, -0.009107f, 0.004415f, -0.008881f, -0.013192f, -0.008700f, -0.006641f, 0.005458f, 0.001572f, 0.024189f, -0.004158f, -0.005091f, 0.006661f, -0.005749f, -0.002264f, -0.004872f, 0.006228f, -0.004297f, 0.008102f, -0.002615f, -0.004048f, 0.007393f, 0.012916f, -0.028413f, 0.027317f, 0.015172f, -0.016829f, -0.016307f, 0.006489f, 0.022279f, -0.000650f, 0.006769f, 0.025228f, 0.008901f, 0.007363f, -0.003991f, 0.012990f, 0.012504f, 0.013701f, -0.024973f, -0.015872f, -0.015024f, 0.011788f, 0.010781f, - 0.012997f, 0.000961f, -0.015777f, 0.006672f, -0.002676f, 0.007307f, -0.022534f, 0.008897f, 0.013117f, -0.010100f, 0.005483f, 0.011194f, 0.002713f, -0.000018f, 0.001997f, -0.003186f, 0.019098f, 0.013507f, 0.010060f, 0.000683f, 0.006413f, 0.015288f, -0.013736f, -0.006925f, 0.000313f, 0.020107f, 0.012338f, 0.008067f, -0.015302f, 0.000801f, 0.009790f, 0.012080f, -0.004546f, 0.003889f, 0.011180f, 0.014523f, 0.004117f, 0.013417f, 0.004830f, -0.001345f, -0.012684f, 0.000016f, -0.020858f, -0.008303f, -0.010316f, 0.001669f, 0.006093f, -0.011936f, -0.005509f, -0.021834f, 0.008469f, -0.006535f, -0.001349f, 0.010364f, 0.014817f, 0.017536f, 0.004133f, 0.023995f, 0.007991f, -0.004497f, -0.010688f, -0.029232f, -0.013642f, 0.017336f, -0.005839f, -0.026906f, -0.006722f, -0.004573f, 0.004424f, 0.014315f, 0.022796f, -0.001682f, 0.006972f, -0.005511f, 0.011547f, -0.012896f, -0.012955f, -0.014731f, -0.025114f, 0.013221f, 0.008135f, -0.021697f, 0.001035f, -0.015963f, -0.005552f, 0.013313f, 0.008163f, 0.010776f, -0.002764f, -0.003397f, -0.003262f, 0.023754f, 0.019251f, 0.019504f, -0.008680f, -0.017572f, - 0.013924f, -0.002808f, -0.005634f, 0.016693f, 0.003495f, 0.016396f, -0.000102f, 0.008906f, -0.011457f, -0.001211f, 0.008978f, -0.036930f, -0.005005f, 0.001110f, -0.026098f, 0.006231f, -0.006269f, 0.024116f, 0.016348f, -0.015934f, 0.001753f, 0.021890f, -0.001770f, 0.010738f, -0.007000f, 0.014725f, -0.006598f, 0.002178f, -0.005333f, -0.000567f, 0.011614f, -0.015763f, 0.016637f, 0.007095f, 0.009728f, 0.001404f, 0.020423f, -0.058589f, -0.012244f, 0.031326f, -0.025169f, -0.009195f, 0.026861f, 0.010064f, -0.008215f, 0.002879f, -0.021797f, 0.019792f, -0.002185f, -0.035447f, 0.002898f, -0.001695f, 0.013838f, 0.013410f, -0.006644f, -0.027623f, -0.011479f, -0.010353f, 0.001095f, -0.014533f, -0.007625f, -0.018581f, -0.004866f, 0.021072f, -0.016343f, -0.008063f, -0.005858f, -0.010531f, -0.010943f, -0.015266f, 0.011553f, 0.002791f, 0.014231f, 0.002996f, -0.009064f, -0.014628f, -0.014233f, -0.002365f, 0.011021f, 0.015676f, -0.004250f, -0.012681f, 0.015288f, 0.006849f, -0.020186f, -0.022747f, -0.047229f, -0.003218f, -0.014215f, -0.008220f, 0.008504f, 0.008576f, 0.005839f, 0.023051f, -0.000771f, -0.008990f, - 0.000285f, -0.009694f, 0.026508f, 0.014796f, -0.002988f, 0.014996f, -0.011969f, 0.008840f, 0.007876f, -0.011587f, -0.003597f, -0.009986f, 0.011439f, 0.008616f, -0.019413f, 0.017518f, 0.026472f, 0.000595f, 0.012013f, 0.037227f, -0.016550f, 0.013160f, -0.007936f, -0.001689f, 0.023810f, -0.008027f, -0.008351f, -0.006865f, -0.000522f, 0.002283f, 0.016666f, 0.049489f, -0.001279f, 0.001431f, 0.015716f, 0.001644f, 0.001761f, -0.025601f, -0.023373f, 0.002137f, 0.004915f, -0.017350f, -0.006478f, -0.005334f, 0.015668f, -0.008027f, 0.004244f, -0.002089f, 0.007675f, -0.008185f, 0.031338f, 0.014775f, -0.012468f, 0.014593f, 0.016347f, -0.019916f, 0.004631f, 0.005812f, 0.007450f, -0.006932f, -0.004653f, 0.022925f, -0.020305f, 0.007238f, 0.028971f, -0.011605f, 0.004892f, 0.015567f, -0.000454f, 0.013218f, 0.009911f, -0.001938f, 0.009908f, 0.010917f, 0.019589f, 0.009065f, 0.002974f, -0.003075f, -0.010961f, -0.016328f, 0.002054f, -0.001117f, -0.041837f, 0.025528f, -0.005071f, -0.016444f, -0.013451f, -0.035120f, -0.034262f, -0.027037f, 0.006115f, 0.013502f, -0.004706f, -0.003219f, -0.001110f, 0.051866f, - 0.053393f, -0.002213f, -0.043059f, 0.007772f, 0.009515f, -0.005814f, 0.011978f, 0.005723f, 0.004321f, -0.001383f, -0.006918f, 0.041703f, 0.008320f, -0.007825f, -0.047082f, -0.027707f, 0.011587f, -0.004010f, -0.016176f, -0.029584f, 0.004284f, 0.003671f, 0.007583f, -0.008309f, -0.030989f, -0.034571f, 0.036298f, 0.032854f, 0.010820f, 0.030006f, -0.026713f, 0.002210f, 0.014133f, -0.007158f, -0.016979f, -0.032163f, -0.015140f, 0.003762f, -0.001352f, -0.016079f, 0.014667f, -0.001529f, 0.014182f, 0.009728f, 0.000596f, -0.034884f, -0.019377f, -0.017568f, -0.002971f, 0.001168f, 0.003972f, -0.007937f, -0.009752f, -0.000220f, 0.004798f, -0.032054f, -0.008000f, 0.001988f, 0.005940f, -0.016381f, -0.037560f, -0.011855f, -0.010119f, 0.023623f, -0.002043f, 0.008341f, -0.013423f, -0.013641f, -0.017753f, -0.023254f, -0.012266f, -0.002612f, -0.003132f, 0.016138f, -0.015684f, -0.004704f, -0.010030f, 0.011564f, -0.008163f, 0.024958f, -0.013815f, 0.006089f, -0.010910f, 0.003872f, 0.003966f, -0.012284f, -0.011783f, -0.023577f, -0.030457f, -0.016527f, -0.009347f, 0.000849f, -0.001327f, -0.013559f, -0.016609f, -0.027287f, - 0.012136f, -0.027335f, -0.040050f, 0.026766f, -0.024831f, -0.026766f, 0.024963f, 0.007388f, -0.008150f, 0.031255f, 0.014662f, -0.020212f, 0.018746f, -0.055079f, -0.005962f, -0.012398f, -0.008220f, -0.024605f, 0.045136f, 0.024537f, -0.015956f, 0.009384f, 0.012752f, -0.007406f, 0.014281f, 0.002770f, -0.001449f, -0.010934f, 0.013759f, 0.021003f, 0.022631f, -0.036283f, -0.003615f, 0.002448f, 0.009238f, -0.014879f, -0.009067f, -0.015125f, -0.020033f, 0.033880f, 0.007600f, -0.020175f, 0.009501f, -0.011228f, -0.017705f, -0.021661f, -0.047780f, 0.015210f, 0.027372f, 0.005608f, 0.027616f, 0.044739f, -0.004834f, -0.012561f, -0.040862f, 0.007809f, -0.006145f, -0.031949f, 0.003579f, -0.072266f, -0.049912f, -0.034362f, 0.018258f, 0.037112f, -0.052500f, 0.012864f, 0.035886f, 0.023524f, -0.001292f, 0.014312f, 0.033807f, -0.014973f, -0.002820f, -0.009150f, 0.000273f, -0.021527f, 0.015229f, 0.001282f, 0.001154f, 0.006867f, 0.045607f, -0.001363f, -0.021168f, -0.018910f, 0.010325f, 0.035134f, -0.014495f, -0.033510f, 0.009543f, 0.035681f, 0.019499f, -0.003586f, 0.016102f, 0.012465f, 0.015489f, 0.004735f, - 0.013012f, 0.024647f, -0.003640f, -0.038402f, 0.001274f, 0.013437f, -0.037822f, -0.025829f, 0.035577f, 0.029780f, -0.028756f, -0.017022f, 0.008126f, -0.000492f, 0.017050f, 0.045581f, -0.010264f, -0.007051f, 0.007593f, -0.000727f, 0.015507f, 0.009791f, -0.016973f, -0.010936f, -0.007016f, 0.014725f, 0.010717f, -0.009848f, -0.033145f, -0.003623f, -0.049483f, 0.047714f, 0.006035f, -0.006041f, 0.002134f, 0.021330f, -0.004449f, -0.018763f, -0.008947f, -0.002935f, -0.028330f, -0.001220f, 0.004768f, -0.034646f, -0.009246f, 0.025975f, 0.033678f, 0.023881f, 0.062968f, 0.038003f, 0.057007f, 0.021239f, 0.014811f, -0.029737f, 0.031821f, -0.011000f, -0.003962f, -0.023895f, -0.016151f, 0.030813f, -0.010582f, 0.070156f, 0.032308f, 0.020041f, -0.004259f, 0.015981f, -0.011612f, -0.033193f, -0.017197f, -0.020746f, 0.014225f, -0.019603f, -0.001095f, -0.020971f, 0.011347f, 0.028241f, 0.025108f, -0.002125f, 0.036597f, 0.030800f, 0.000615f, -0.011332f, -0.015186f, -0.026090f, -0.009766f, 0.058478f, 0.021851f, 0.067382f, -0.022948f, -0.000143f, -0.003442f, 0.015339f, 0.053262f, 0.018183f, 0.000027f, 0.034549f, - 0.038769f, 0.041934f, -0.005284f, -0.025463f, -0.010746f, -0.007291f, -0.008875f, 0.027785f, 0.017409f, 0.026439f, 0.038781f, -0.025486f, 0.059452f, -0.041281f, -0.079970f, -0.011691f, -0.027063f, 0.016521f, 0.035660f, 0.060898f, -0.030792f, -0.022367f, 0.020507f, -0.016782f, -0.004213f, -0.007280f, 0.007141f, 0.027298f, 0.027313f, 0.042749f, -0.046440f, 0.052479f, -0.019307f, 0.005676f, -0.024435f, 0.022396f, 0.038148f, 0.016906f, 0.006536f, 0.003722f, 0.046723f, 0.012686f, -0.002121f, -0.014556f, -0.007721f, -0.047515f, -0.007011f, -0.022495f, -0.058908f, 0.006180f, -0.003838f, 0.025131f, -0.061206f, -0.010671f, 0.014115f, 0.023869f, 0.050634f, -0.012580f, 0.014739f, 0.029141f, 0.004216f, -0.005563f, 0.014464f, -0.011911f, -0.003268f, -0.074481f, 0.006976f, -0.030663f, -0.037753f, -0.040604f, 0.017661f, -0.066204f, 0.023087f, -0.023379f, -0.033550f, -0.044091f, 0.042807f, 0.048154f, 0.045739f, 0.012269f, 0.009295f, 0.045793f, -0.057519f, -0.001734f, -0.016727f, 0.028180f, -0.068253f, -0.019265f, -0.005525f, 0.027681f, 0.019505f, 0.020388f, 0.029742f, -0.019097f, 0.010527f, -0.020003f, - -0.054057f, -0.002127f, -0.018537f, 0.064253f, 0.014829f, 0.045191f, -0.013887f, 0.062119f, -0.038348f, -0.075198f, 0.018108f, 0.011755f, 0.009865f, -0.037710f, -0.040632f, -0.033673f, 0.013830f, -0.033843f, 0.016142f, -0.018186f, 0.051109f, -0.016654f, -0.005823f, 0.035267f, 0.002817f, -0.089268f, -0.035181f, -0.001481f, 0.060410f, -0.006929f, -0.016497f, -0.051092f, 0.010789f, -0.012606f, -0.041868f, -0.051886f, -0.003963f, 0.009680f, -0.015760f, -0.019519f, -0.049797f, 0.034416f, -0.010636f, 0.012719f, -0.023549f, 0.001745f, 0.017835f, 0.010146f, 0.048383f, 0.001330f, -0.013220f, -0.058649f, -0.018375f, 0.030008f, -0.038081f, -0.019478f, 0.017999f, 0.034361f, 0.028612f, 0.067184f, 0.053073f, 0.002922f, 0.041192f, 0.041104f, 0.016721f, 0.004094f, 0.026458f, -0.016466f, 0.102796f, -0.042032f, -0.103446f, 0.032689f, -0.086823f, 0.001351f, -0.066052f, 0.006057f, 0.093198f, 0.043749f, -0.064996f, -0.039204f, -0.028138f, -0.019447f, 0.023022f, 0.041755f, -0.025118f, 0.005317f, 0.032884f, -0.067899f, 0.003267f, 0.019433f, -0.055209f, 0.030567f, -0.019565f, 0.027396f, 0.007435f, 0.030573f, - 0.001317f, -0.031360f, 0.034205f, -0.041754f, -0.011317f, 0.090593f, -0.037215f, 0.035420f, -0.022112f, 0.039473f, 0.031469f, -0.007783f, -0.039440f, 0.044408f, 0.104622f, -0.054060f, 0.014038f, -0.072903f, 0.037969f, 0.027494f, -0.042487f, 0.050368f, 0.003596f, -0.087970f, 0.012618f, 0.009024f, 0.041613f, -0.006676f, -0.006968f, -0.043720f, -0.047522f, -0.019278f, 0.115075f, -0.012464f, 0.058440f, -0.046064f, 0.038553f, 0.024402f, -0.010405f, -0.033727f, -0.006973f, 0.038581f, 0.065395f, -0.017120f, -0.020966f, -0.000146f, 0.013790f, 0.063564f, -0.012903f, -0.005687f, -0.040033f, 0.021187f, -0.060627f, -0.018844f, 0.048229f, 0.065171f, 0.010146f, 0.013432f, -0.064149f, 0.046400f, 0.035665f, -0.075205f, 0.002752f, -0.037044f, 0.000237f, -0.083180f, 0.083901f, 0.082536f, -0.012834f, -0.034980f, -0.018871f, -0.010746f, 0.038280f, -0.038712f, 0.050809f, -0.068319f, -0.047612f, 0.026745f, 0.021442f, 0.011771f, 0.020574f, 0.076265f, 0.015602f, 0.038455f, 0.003997f, 0.039844f, 0.019387f, -0.009587f, 0.002445f, 0.034938f, -0.006541f, 0.004089f, 0.051700f, 0.031911f, 0.069302f, 0.000097f, - 0.037611f, 0.007148f, -0.058365f, 0.062421f, -0.032892f, 0.001262f, 0.012695f, -0.043469f, -0.038864f, 0.027833f, 0.076080f, 0.052120f, 0.024853f, -0.094873f, -0.028158f, -0.063587f, -0.004689f, 0.125413f, 0.072451f, 0.097639f, 0.003138f, -0.074777f, 0.022921f, 0.097433f, 0.014801f, -0.009858f, 0.073881f, 0.020967f, 0.048815f, -0.118739f, -0.111868f, 0.094053f, -0.006694f, -0.018873f, -0.083405f, 0.000706f, -0.026811f, 0.057793f, 0.040720f, 0.018035f, 0.029701f, -0.071927f, 0.040290f, 0.065051f, -0.000409f, 0.025221f, -0.059717f, 0.047229f, -0.030022f, 0.024966f, -0.003281f, 0.004657f, 0.030762f, -0.006724f, 0.018053f, -0.003132f, -0.049423f, 0.016123f, -0.008735f, 0.053435f, 0.036993f, 0.065371f, 0.014346f, -0.042256f, -0.044651f, 0.044001f, 0.038163f, 0.025020f, -0.002556f, 0.018536f, -0.018804f, -0.033742f, -0.000355f, -0.009608f, 0.047056f, 0.042456f, 0.025704f, 0.047619f, 0.036430f, -0.055997f, 0.059045f, 0.070697f, 0.040025f, -0.027659f, -0.037628f, -0.037099f, 0.049379f, 0.039434f, 0.086401f, -0.052765f, -0.067551f, -0.038833f, -0.095050f, -0.016026f, 0.080525f, 0.020949f, - 0.060183f, -0.069870f, -0.094451f, 0.025129f, 0.038605f, -0.063842f, -0.003345f, -0.048521f, 0.006789f, -0.056382f, -0.022898f, 0.042085f, 0.013197f, -0.047348f, 0.000694f, -0.030241f, -0.118137f, 0.017366f, 0.072760f, -0.002285f, -0.146560f, -0.031363f, -0.002196f, 0.000513f, 0.053070f, -0.139136f, -0.014340f, 0.060796f, -0.100342f, 0.021231f, -0.022009f, 0.116539f, 0.063602f, -0.074337f, 0.018708f, 0.077533f, 0.008849f, -0.033965f, 0.026848f, 0.016721f, 0.010938f, -0.004058f, -0.007607f, 0.003448f, 0.013213f, 0.024471f, 0.082031f, 0.062661f, 0.071587f, 0.045812f, 0.090022f, 0.040618f, 0.091889f, 0.034515f, 0.081297f, -0.002511f, 0.050089f, 0.041923f, 0.049450f, 0.034581f, -0.004835f, 0.010939f, -0.064173f, -0.041783f, 0.118076f, -0.002938f, -0.049559f, -0.017999f, 0.035565f, 0.058246f, 0.126505f, -0.022357f, -0.073325f, -0.040818f, -0.054972f, 0.067993f, 0.080866f, 0.088424f, 0.025858f, -0.009190f, 0.059958f, -0.114076f, 0.094410f, 0.031010f, -0.056166f, -0.007513f, -0.172730f, -0.002861f, -0.115985f, -0.161296f, -0.043295f, -0.098154f, -0.043789f, 0.166444f, 0.156969f, 0.138433f, - -0.040296f, 0.105205f, 0.129371f, -0.107258f, -0.097047f, 0.032205f, 0.113228f, 0.002102f, -0.051964f, -0.000339f, 0.031323f, 0.033028f, -0.092209f, 0.033837f, -0.011540f, 0.048319f, -0.050156f, -0.025423f, -0.058874f, 0.062324f, -0.007564f, -0.028873f, -0.054848f, 0.040021f, 0.025418f, -0.010751f, -0.046015f, 0.020995f, 0.022344f, 0.009954f, -0.040310f, -0.007342f, -0.000487f, 0.046928f, -0.034704f, -0.010403f, -0.051418f, -0.015668f, 0.020457f, 0.040655f, -0.053268f, -0.023100f, 0.061455f, 0.048513f, -0.012975f, -0.038031f, 0.002535f, -0.020705f, 0.052361f, -0.030887f, -0.012321f, 0.020984f, 0.021457f, 0.026993f, -0.023258f, 0.005107f, -0.033156f, 0.039355f, 0.055612f, 0.020053f, 0.012982f, -0.044506f, 0.050866f, -0.037168f, 0.076294f, -0.056955f, 0.063196f, -0.094762f, 0.067375f, 0.000436f, 0.003515f, -0.070361f, -0.008605f, 0.010830f, -0.004238f, -0.004655f, -0.002840f, -0.023527f, 0.103205f, 0.108651f, -0.063660f, -0.038602f, 0.022266f, 0.103760f, 0.065416f, 0.038347f, 0.038018f, -0.017109f, -0.042985f, -0.013699f, 0.025175f, -0.000857f, -0.009594f, 0.030645f, 0.001245f, 0.021474f, - 0.003411f, -0.012104f, -0.038359f, -0.010804f, -0.001525f, 0.002476f, -0.000762f, -0.032166f, 0.036276f, 0.005541f, -0.013441f, -0.001160f, -0.000232f, 0.000163f, 0.023791f, 0.041740f, 0.018865f, 0.003962f, -0.014177f, -0.022030f, -0.004641f, 0.013432f, 0.029242f, 0.037763f, -0.020086f, -0.021081f, 0.005892f, 0.038263f, 0.018527f, 0.008499f, -0.016050f, -0.034824f, 0.031072f, -0.006050f, 0.002292f, 0.002181f, 0.011129f, 0.009444f, -0.002544f, -0.000876f, -0.020886f, 0.004040f, 0.022014f, -0.008760f, 0.014156f, -0.005701f, -0.013739f, 0.011634f, -0.000312f, 0.007395f, 0.001944f, 0.019949f, 0.015583f, -0.022302f, 0.012380f, 0.006977f, -0.040264f, -0.036581f, -0.135084f, 0.057224f, 0.209208f, 0.192308f, 0.164777f, 0.065345f, -0.155528f, -0.097817f, -0.139744f, -0.157288f, -0.139980f, -0.041058f, 0.030914f, 0.118317f, 0.123928f, 0.147654f, 0.098467f, 0.098646f, 0.003100f, -0.103817f, -0.098451f, -0.122212f, -0.094881f, -0.053177f, -0.002812f, -0.034206f, 0.037976f, 0.045921f, 0.075118f, 0.081701f, 0.083749f, 0.049545f, 0.005145f, 0.022165f, -0.017216f, 0.012031f, -0.055606f, -0.040882f, - -0.051279f, -0.085314f, -0.066771f, -0.051670f, -0.035496f, -0.060429f, 0.009842f, 0.104588f, 0.118999f, 0.066267f, 0.124462f, 0.031204f, 0.073399f, 0.037729f, 0.022878f, -0.029934f, -0.063646f, -0.088809f, -0.124163f, -0.095576f, -0.141742f, -0.058187f, -0.061573f, 0.043089f, 0.044286f, 0.122585f, 0.142129f, 0.126204f, 0.113894f, 0.110856f, 0.071844f, 0.012445f, -0.032116f, -0.109308f, -0.064708f, -0.141123f, -0.115953f, -0.156398f, 0.010384f, 0.006756f, 0.021041f} - }, - { - {0.020698f, -0.004062f, 0.005796f, 0.002807f, -0.010564f, 0.002857f, 0.009064f, -0.003562f, -0.001485f, 0.002784f, -0.004037f, -0.009849f, 0.010475f, -0.002352f, 0.018329f, -0.000190f, 0.001916f, 0.007867f, -0.011239f, -0.003773f, -0.012030f, -0.002116f, -0.005337f, 0.005000f, 0.008364f, 0.001960f, -0.003793f, -0.000792f, -0.000286f, 0.008061f, -0.006312f, -0.003987f, -0.008589f, 0.006467f, 0.003400f, 0.000002f, 0.001220f, -0.006929f, 0.005549f, -0.008141f, 0.000790f, -0.004164f, 0.006771f, 0.005495f, -0.009145f, 0.000942f, -0.010951f, 0.000511f, 0.003659f, 0.003977f, 0.004632f, 0.003670f, 0.001253f, -0.006299f, -0.004754f, 0.002588f, 0.004221f, -0.004512f, 0.010775f, -0.003460f, 0.001469f, -0.002504f, -0.000642f, 0.001611f, -0.001390f, 0.007874f, -0.005645f, 0.015354f, 0.002821f, 0.002428f, -0.003398f, -0.000368f, 0.001380f, 0.002407f, 0.000241f, 0.001749f, -0.009393f, -0.010067f, -0.007906f, 0.002016f, -0.004444f, -0.000991f, -0.001118f, 0.004467f, 0.019042f, -0.005287f, 0.002104f, -0.018193f, -0.009593f, 0.005207f, -0.008326f, -0.006920f, -0.002318f, -0.007850f, -0.001812f, 0.015346f, - -0.006518f, -0.010292f, 0.017074f, 0.013223f, -0.004582f, -0.003435f, 0.015639f, 0.004089f, 0.006175f, 0.002668f, 0.000936f, -0.004281f, -0.006337f, 0.005791f, -0.004679f, 0.004233f, 0.001834f, 0.001407f, -0.001994f, -0.005681f, -0.004000f, 0.003392f, -0.004633f, -0.007975f, -0.003255f, -0.003801f, -0.009491f, 0.010491f, 0.017034f, -0.010159f, 0.005662f, -0.000006f, -0.003637f, 0.002177f, -0.000269f, -0.000388f, -0.005505f, 0.009879f, -0.006048f, -0.008249f, 0.008829f, 0.002006f, -0.000315f, -0.001677f, 0.004910f, -0.000468f, -0.000003f, -0.003855f, -0.001374f, 0.008201f, -0.013272f, 0.003429f, 0.002583f, -0.004623f, -0.003092f, -0.006425f, -0.006494f, -0.029722f, -0.004625f, -0.010898f, -0.002608f, 0.002336f, -0.008030f, -0.018142f, 0.013309f, -0.004502f, 0.003140f, 0.008808f, -0.002766f, -0.000968f, -0.001053f, 0.004021f, -0.003086f, 0.014860f, -0.000570f, 0.011448f, 0.016930f, -0.020328f, 0.004293f, 0.014012f, 0.001014f, 0.002739f, 0.009789f, 0.017941f, 0.002618f, -0.004118f, 0.009106f, -0.002478f, -0.004655f, 0.003993f, 0.003244f, 0.003950f, -0.005033f, 0.018285f, -0.008433f, 0.004565f, - 0.006885f, -0.000148f, -0.000859f, -0.009018f, 0.001496f, -0.010436f, 0.008755f, -0.010658f, -0.008098f, 0.005815f, -0.009839f, 0.006725f, -0.006854f, 0.002800f, -0.005522f, 0.003725f, 0.008038f, 0.015603f, 0.004856f, 0.001745f, 0.007673f, 0.000102f, -0.013446f, 0.001793f, 0.003877f, 0.005160f, -0.003310f, 0.000749f, -0.001759f, 0.002641f, 0.007655f, 0.004662f, 0.010428f, 0.003733f, 0.001497f, -0.006003f, -0.003132f, 0.006233f, -0.010718f, 0.007956f, 0.005276f, 0.001554f, 0.010204f, -0.000623f, 0.005722f, 0.013749f, 0.008589f, 0.018044f, 0.003507f, -0.002804f, -0.018606f, 0.002789f, -0.011426f, -0.003966f, 0.001395f, 0.004019f, -0.007189f, -0.000192f, 0.017818f, -0.009356f, -0.000552f, -0.009362f, 0.004262f, -0.000160f, 0.003378f, 0.007029f, 0.008504f, -0.005713f, 0.006344f, 0.006354f, 0.012808f, 0.000151f, -0.012824f, 0.000862f, 0.013564f, -0.001747f, -0.001011f, -0.002324f, 0.009055f, -0.011195f, 0.000731f, 0.006546f, 0.009044f, 0.010518f, -0.004348f, -0.007811f, -0.001122f, 0.015267f, 0.001282f, 0.005072f, -0.013128f, -0.006498f, 0.002925f, 0.001890f, -0.002426f, 0.007575f, - -0.000798f, -0.002665f, 0.004507f, -0.009131f, 0.000303f, -0.002380f, 0.005346f, 0.007301f, -0.012749f, -0.004191f, 0.003900f, 0.006843f, -0.005500f, -0.006977f, 0.003442f, 0.007777f, -0.000752f, 0.003893f, 0.031788f, 0.016104f, 0.012243f, -0.011551f, -0.002597f, -0.016303f, -0.012447f, 0.018396f, 0.001132f, -0.010893f, -0.005769f, 0.004273f, -0.011223f, -0.000547f, 0.017745f, 0.007717f, -0.001278f, 0.006265f, 0.026248f, -0.017435f, 0.003740f, -0.002958f, -0.009203f, 0.015770f, 0.007275f, 0.008350f, -0.006550f, 0.007247f, 0.008280f, -0.002382f, 0.005107f, -0.001481f, -0.008208f, 0.001902f, 0.002290f, -0.001030f, 0.008485f, 0.002520f, -0.003863f, 0.010298f, -0.005175f, -0.004480f, -0.006406f, 0.003046f, 0.003251f, 0.000938f, 0.006606f, 0.001152f, 0.022066f, 0.001649f, -0.000613f, -0.005133f, -0.005329f, 0.005539f, -0.017464f, 0.000767f, 0.009531f, 0.008068f, -0.009687f, 0.013338f, -0.000340f, 0.005902f, 0.010123f, -0.003165f, 0.007739f, 0.006193f, -0.003421f, -0.009947f, -0.007780f, 0.005575f, 0.014819f, 0.003673f, -0.006804f, -0.004197f, -0.003664f, 0.008931f, 0.007511f, 0.002309f, - 0.020799f, 0.005465f, 0.012240f, -0.000394f, 0.002415f, 0.003671f, 0.003095f, -0.003394f, 0.012409f, -0.005360f, 0.013424f, -0.006816f, -0.005914f, 0.003627f, -0.009763f, -0.002694f, -0.003501f, 0.003818f, 0.005141f, -0.003833f, -0.014150f, 0.005935f, -0.017007f, -0.006806f, -0.003536f, -0.000657f, -0.003365f, 0.002857f, 0.013732f, 0.007864f, 0.000089f, -0.015603f, -0.015524f, 0.000016f, 0.008845f, -0.005742f, 0.000498f, -0.002470f, -0.007559f, -0.010420f, -0.000137f, 0.005859f, 0.012871f, 0.011878f, -0.002885f, 0.003184f, -0.018962f, 0.005048f, 0.010339f, 0.012243f, -0.003097f, 0.010968f, 0.001072f, 0.016392f, 0.008847f, 0.001970f, 0.006299f, -0.002354f, -0.006421f, -0.004852f, -0.003708f, 0.009203f, -0.006302f, -0.008391f, -0.009938f, 0.008697f, -0.005071f, -0.022181f, 0.001238f, 0.004172f, 0.007943f, 0.010212f, 0.020686f, -0.015245f, -0.012203f, -0.029575f, 0.015186f, 0.017648f, 0.004185f, 0.014445f, 0.003870f, -0.015839f, 0.000334f, -0.008187f, -0.001823f, 0.013263f, -0.017480f, -0.006829f, 0.008458f, 0.006084f, 0.019137f, -0.004870f, 0.009298f, -0.028663f, -0.012053f, 0.005559f, - 0.017937f, -0.012002f, -0.005765f, -0.012750f, -0.011838f, 0.005807f, 0.000199f, -0.001208f, 0.007023f, 0.001160f, 0.007271f, 0.019822f, -0.010831f, 0.019216f, 0.000854f, 0.002922f, 0.006569f, 0.003207f, -0.004136f, 0.005903f, -0.012425f, -0.003968f, -0.005782f, -0.002714f, -0.008616f, 0.011909f, 0.004516f, 0.035058f, 0.003413f, -0.003417f, -0.006852f, 0.000536f, -0.005304f, 0.017884f, -0.009241f, 0.001521f, -0.018663f, 0.014941f, 0.017202f, -0.018410f, 0.013399f, 0.010064f, 0.007334f, -0.010233f, -0.006725f, 0.015298f, 0.007222f, -0.023557f, 0.014359f, -0.011268f, -0.002373f, 0.005159f, -0.001842f, 0.002434f, 0.009027f, 0.006912f, -0.004682f, 0.012001f, 0.002718f, -0.000525f, -0.010041f, -0.017726f, 0.006545f, -0.009619f, -0.003397f, 0.016664f, -0.022625f, -0.009808f, -0.016552f, -0.001930f, 0.014966f, -0.001537f, -0.011563f, -0.016823f, -0.018248f, 0.007134f, 0.020244f, -0.005804f, 0.012836f, 0.018486f, -0.004659f, -0.004393f, 0.007791f, 0.010265f, 0.022604f, -0.003263f, 0.012949f, 0.001759f, 0.026806f, 0.019289f, 0.005847f, -0.006182f, 0.003228f, -0.014532f, 0.026084f, 0.005973f, - -0.010642f, -0.012410f, 0.015321f, 0.012516f, 0.009571f, 0.006492f, 0.005012f, 0.013354f, -0.005046f, 0.006008f, -0.008059f, 0.001478f, 0.001400f, -0.013005f, -0.017014f, -0.005996f, -0.011802f, 0.008367f, -0.006921f, -0.005306f, -0.018597f, -0.011745f, 0.004423f, -0.006146f, -0.001604f, 0.009788f, 0.020044f, 0.024958f, 0.013339f, 0.010699f, -0.008434f, -0.019244f, 0.000737f, -0.013284f, -0.032147f, -0.036497f, -0.012007f, 0.002613f, 0.017518f, -0.012410f, 0.008291f, 0.006391f, -0.001276f, 0.027825f, -0.004157f, 0.026240f, -0.015573f, 0.008174f, 0.007621f, 0.000992f, -0.023855f, -0.008979f, -0.009182f, -0.025854f, 0.008637f, -0.005880f, 0.005228f, -0.000911f, 0.009243f, 0.000733f, -0.010764f, 0.006334f, -0.017446f, 0.013430f, 0.007056f, 0.029958f, -0.001542f, 0.001739f, 0.026321f, -0.022621f, 0.020396f, 0.026225f, -0.016062f, 0.017242f, -0.007009f, -0.006680f, -0.013458f, 0.004355f, 0.002920f, 0.019038f, 0.011468f, -0.003569f, -0.007568f, -0.014193f, 0.008351f, 0.010704f, -0.017550f, -0.006691f, 0.016483f, -0.027543f, 0.002798f, -0.020929f, 0.012736f, 0.002612f, -0.000188f, 0.008189f, - -0.007225f, 0.004109f, 0.026966f, -0.009282f, 0.006356f, 0.014705f, 0.008852f, 0.003371f, -0.013096f, 0.008353f, 0.006335f, -0.005658f, -0.021179f, 0.003286f, -0.003141f, -0.013260f, -0.014743f, 0.043628f, -0.015975f, 0.008106f, 0.006729f, 0.015273f, 0.005339f, 0.009087f, 0.022389f, -0.017459f, -0.010056f, -0.001858f, 0.030988f, -0.012271f, -0.012637f, -0.015647f, 0.007947f, 0.004642f, 0.017127f, -0.035405f, 0.000709f, 0.000265f, -0.001997f, 0.017477f, -0.003983f, 0.013366f, 0.026056f, -0.019151f, -0.008007f, 0.006834f, -0.013642f, -0.018107f, 0.012216f, -0.016858f, 0.024518f, -0.004617f, -0.024503f, -0.003784f, -0.013916f, 0.007400f, 0.020064f, -0.000883f, 0.010328f, -0.001727f, 0.004194f, 0.022961f, 0.001088f, 0.016509f, 0.007095f, -0.013272f, 0.013658f, 0.010838f, 0.001948f, 0.009010f, 0.034067f, -0.006136f, -0.014754f, 0.007441f, -0.018765f, 0.000918f, 0.032599f, 0.010316f, 0.005524f, -0.006780f, -0.008741f, -0.006905f, -0.010873f, 0.018610f, -0.012186f, -0.004321f, -0.007328f, 0.020853f, -0.039778f, 0.012219f, 0.015015f, 0.021543f, 0.006516f, 0.065024f, 0.019503f, -0.011891f, - -0.015701f, -0.013320f, 0.047280f, -0.040612f, 0.003388f, 0.015962f, 0.002533f, -0.021957f, -0.004780f, 0.011159f, -0.002132f, 0.002696f, 0.019811f, -0.020086f, -0.016726f, 0.008528f, 0.025797f, 0.015926f, 0.006912f, -0.012110f, -0.011719f, -0.011349f, -0.013162f, 0.012932f, 0.005421f, 0.018432f, 0.014948f, 0.008642f, -0.018746f, -0.008724f, -0.019972f, -0.003614f, -0.012907f, -0.030420f, -0.005215f, 0.014336f, 0.003644f, -0.013768f, -0.013849f, 0.000979f, 0.008111f, 0.020009f, 0.003126f, 0.010524f, 0.003502f, 0.038152f, -0.031706f, 0.022051f, 0.004746f, -0.032212f, -0.005179f, -0.009019f, -0.007355f, 0.006121f, -0.013623f, 0.009867f, 0.007261f, 0.016038f, -0.017143f, 0.007725f, 0.029890f, 0.015002f, 0.046941f, -0.008695f, -0.000198f, -0.009543f, -0.004897f, 0.003213f, -0.000189f, -0.041396f, 0.019763f, 0.000641f, -0.003421f, 0.014205f, -0.003210f, -0.022534f, 0.006004f, 0.011079f, 0.000231f, -0.014180f, -0.008627f, -0.029750f, -0.033740f, 0.006298f, -0.014620f, -0.008118f, 0.005655f, -0.001171f, -0.003026f, -0.016247f, -0.007066f, -0.001075f, 0.012596f, 0.011918f, -0.018389f, -0.011808f, - 0.012364f, -0.017918f, -0.007868f, -0.028735f, 0.027249f, -0.004536f, 0.024562f, 0.001047f, 0.009427f, 0.024593f, 0.019741f, -0.012523f, 0.006148f, 0.011915f, -0.013454f, -0.006757f, 0.012953f, -0.005921f, -0.030594f, -0.006953f, -0.021415f, 0.030389f, -0.003227f, -0.009696f, -0.018017f, -0.027729f, 0.009496f, 0.004233f, 0.006215f, 0.011624f, 0.000242f, -0.006259f, 0.013516f, 0.001990f, -0.002776f, 0.003253f, -0.007853f, 0.019316f, -0.005243f, 0.011532f, 0.038668f, 0.006967f, 0.006871f, 0.007315f, 0.013843f, -0.035929f, -0.028199f, 0.008386f, -0.030880f, 0.018498f, -0.005343f, 0.021180f, 0.004687f, 0.042944f, 0.014617f, -0.012802f, -0.002014f, -0.056230f, -0.038142f, 0.013610f, -0.014800f, -0.032899f, -0.048043f, -0.002038f, 0.004498f, -0.010318f, -0.007189f, 0.045529f, 0.012744f, -0.034507f, 0.007557f, -0.021446f, -0.016734f, -0.017622f, -0.029514f, -0.005962f, 0.003208f, -0.042330f, -0.038690f, -0.015917f, 0.006850f, 0.002761f, 0.024041f, 0.018936f, 0.012775f, -0.011087f, -0.000104f, 0.007992f, -0.020931f, -0.013008f, -0.007015f, 0.005782f, -0.019722f, -0.013413f, 0.013733f, 0.006946f, - -0.000445f, -0.004375f, -0.003665f, 0.009983f, -0.028644f, -0.017711f, -0.014145f, 0.017590f, -0.022296f, 0.013646f, 0.025314f, 0.033385f, -0.002513f, 0.008514f, -0.008520f, -0.018195f, -0.022153f, -0.007480f, 0.021150f, 0.006466f, -0.039548f, 0.000059f, 0.039932f, -0.028583f, 0.000697f, -0.007492f, 0.001457f, 0.007812f, 0.019841f, -0.006145f, 0.005662f, 0.022803f, 0.016034f, 0.008726f, -0.020125f, -0.025508f, -0.033887f, 0.019366f, -0.027707f, -0.045279f, 0.006972f, -0.026938f, -0.017988f, 0.056767f, 0.002292f, 0.042893f, 0.035773f, -0.005944f, 0.037754f, 0.055791f, 0.037126f, -0.046985f, -0.007935f, -0.021001f, -0.024305f, -0.012410f, -0.000480f, -0.018429f, 0.040889f, 0.014176f, 0.021782f, -0.018221f, 0.020787f, 0.018746f, 0.004239f, -0.023615f, -0.021106f, 0.041967f, -0.008826f, -0.035925f, -0.004030f, -0.041823f, -0.007751f, 0.013834f, -0.017086f, 0.002722f, -0.037005f, 0.018102f, 0.030711f, 0.019264f, -0.006244f, -0.015575f, -0.008021f, -0.002493f, -0.007565f, -0.014393f, -0.045175f, 0.031465f, 0.015029f, 0.017441f, 0.016901f, -0.022698f, 0.036905f, 0.007013f, -0.013250f, -0.006325f, - -0.032355f, -0.011174f, 0.018200f, 0.014794f, 0.031190f, -0.000911f, -0.039513f, -0.063336f, -0.005790f, 0.002678f, -0.001750f, -0.020269f, -0.035553f, -0.002026f, 0.019496f, -0.005772f, -0.017127f, 0.070328f, 0.044731f, -0.006535f, -0.040854f, 0.008435f, 0.020738f, 0.011599f, 0.030203f, 0.044740f, -0.019565f, 0.003502f, -0.039893f, 0.011179f, 0.003604f, -0.015783f, 0.072689f, 0.027238f, 0.062775f, 0.025592f, 0.016441f, -0.054616f, 0.001184f, 0.030161f, 0.005894f, -0.029168f, 0.012626f, -0.044485f, -0.016895f, 0.002842f, 0.013763f, -0.013471f, -0.008174f, 0.009388f, 0.008287f, 0.002981f, 0.039700f, 0.024140f, 0.006964f, -0.015933f, 0.027548f, -0.017805f, -0.012043f, -0.026074f, -0.007994f, 0.033422f, -0.052573f, -0.001092f, 0.024564f, -0.026841f, -0.007622f, 0.009824f, 0.009761f, 0.048817f, -0.001995f, -0.000899f, -0.022033f, 0.047681f, -0.020423f, 0.005680f, 0.006112f, 0.032860f, -0.006588f, -0.012443f, 0.032968f, -0.053878f, 0.015384f, 0.004680f, -0.020497f, 0.042323f, -0.051482f, -0.007063f, -0.015550f, -0.035824f, -0.015014f, -0.002208f, 0.019527f, 0.038071f, 0.054794f, -0.066242f, - 0.016897f, 0.005830f, 0.080622f, 0.021183f, 0.013646f, 0.000150f, 0.038483f, 0.013389f, -0.062258f, -0.006678f, 0.063135f, -0.016469f, -0.015199f, 0.008294f, -0.005963f, 0.004413f, -0.013203f, 0.070514f, 0.075405f, -0.038084f, 0.017366f, 0.023969f, 0.010029f, 0.025239f, -0.034898f, -0.043080f, 0.034861f, 0.013591f, -0.026790f, -0.040731f, -0.014308f, -0.011113f, 0.039951f, 0.037552f, 0.017933f, -0.033381f, 0.020048f, -0.011786f, 0.012584f, 0.007050f, 0.016931f, 0.043468f, 0.008317f, -0.080768f, -0.026835f, 0.021289f, -0.034878f, 0.016244f, 0.036122f, 0.018333f, 0.063226f, -0.014625f, -0.095735f, 0.004566f, -0.038294f, 0.040400f, 0.028616f, -0.002759f, -0.020495f, 0.037686f, -0.046033f, 0.000630f, -0.024982f, 0.031204f, 0.029576f, 0.035950f, 0.027339f, -0.009080f, -0.039463f, -0.102523f, -0.056318f, -0.052016f, 0.008735f, -0.026721f, -0.026305f, 0.019001f, -0.058959f, 0.001270f, -0.036780f, -0.017620f, 0.011704f, -0.020067f, -0.003603f, 0.002186f, -0.091920f, -0.010683f, 0.057064f, -0.068224f, 0.004654f, 0.028888f, -0.001522f, 0.020983f, -0.007547f, -0.053563f, -0.006930f, 0.032959f, - 0.008029f, 0.047894f, 0.028596f, -0.045644f, -0.054201f, -0.004532f, -0.024692f, -0.005031f, -0.087877f, 0.034378f, 0.031806f, 0.062253f, 0.025110f, 0.056839f, -0.025741f, 0.009726f, 0.053949f, -0.015518f, 0.058926f, 0.019142f, 0.030201f, 0.013016f, -0.017595f, 0.032222f, -0.039072f, 0.003795f, 0.075161f, -0.057973f, 0.003572f, -0.076059f, -0.036992f, -0.054271f, -0.039954f, -0.008165f, 0.002307f, -0.016889f, -0.061093f, -0.009348f, -0.100250f, 0.112594f, 0.037546f, 0.001671f, -0.016493f, -0.026154f, 0.004921f, -0.048548f, 0.007983f, -0.073370f, 0.000829f, 0.003321f, 0.015853f, 0.045934f, 0.067603f, 0.000094f, -0.113558f, -0.056511f, 0.049134f, -0.034241f, -0.016244f, 0.019381f, -0.043238f, 0.030253f, 0.051971f, 0.017537f, -0.022166f, -0.032180f, 0.015884f, -0.041219f, 0.064273f, 0.051356f, 0.081165f, -0.058507f, -0.069388f, -0.019080f, -0.000614f, -0.037059f, 0.048127f, 0.055690f, -0.041291f, -0.001685f, -0.074407f, -0.023847f, -0.034717f, -0.069714f, 0.022526f, 0.054487f, 0.035043f, -0.046003f, -0.016135f, 0.003370f, 0.038901f, 0.003784f, -0.001668f, 0.012271f, -0.003174f, -0.021171f, - -0.059871f, -0.043471f, 0.016903f, -0.007881f, -0.031971f, 0.033765f, 0.033323f, 0.018070f, -0.061111f, -0.059402f, 0.055281f, 0.029967f, 0.041550f, -0.043324f, -0.102436f, -0.022444f, 0.045562f, 0.040587f, -0.008750f, 0.102206f, -0.010978f, 0.102619f, -0.156737f, -0.200577f, -0.078393f, -0.122311f, 0.004429f, 0.042695f, 0.027929f, 0.124793f, -0.010367f, -0.012150f, 0.029160f, -0.029295f, -0.094672f, -0.093459f, -0.091266f, 0.078496f, 0.080458f, -0.023690f, 0.035247f, 0.009562f, 0.025830f, -0.079583f, 0.069642f, 0.047389f, 0.023792f, 0.059378f, -0.034007f, 0.019646f, -0.101127f, -0.053822f, 0.030089f, 0.034707f, 0.020316f, 0.009633f, 0.015562f, 0.023012f, -0.010057f, 0.114280f, 0.013188f, 0.069543f, 0.023631f, -0.039763f, 0.092554f, -0.016623f, 0.037776f, -0.002624f, 0.034646f, -0.008050f, 0.000367f, 0.014998f, 0.047504f, 0.008218f, 0.035291f, -0.002816f, -0.004582f, 0.065825f, 0.010314f, -0.020527f, 0.003434f, -0.011344f, -0.033609f, -0.016232f, 0.022259f, 0.006996f, -0.078044f, -0.026137f, 0.012411f, 0.011743f, 0.086259f, 0.061236f, -0.080640f, -0.053306f, 0.009315f, -0.026363f, - 0.095004f, 0.000547f, 0.087963f, -0.069064f, 0.045805f, -0.001036f, 0.007850f, 0.029133f, 0.091042f, 0.045456f, 0.015525f, 0.064902f, 0.034834f, -0.050525f, -0.072915f, 0.052430f, -0.055848f, 0.022496f, -0.073381f, -0.023192f, -0.116294f, 0.099884f, -0.008018f, -0.125895f, -0.036619f, -0.005506f, 0.009860f, 0.016477f, -0.084817f, -0.042163f, 0.069768f, -0.023276f, 0.023679f, -0.027096f, 0.003979f, 0.097618f, 0.145410f, 0.016023f, -0.008130f, 0.080483f, 0.029806f, 0.037014f, 0.089389f, 0.008412f, 0.053290f, 0.074055f, 0.062611f, -0.018626f, 0.025991f, 0.065345f, 0.079364f, 0.073706f, 0.098198f, 0.063891f, 0.126031f, 0.143089f, 0.096455f, 0.115908f, 0.072341f, 0.000172f, 0.034967f, 0.027637f, -0.028857f, -0.018846f, 0.020464f, 0.072100f, 0.013747f, 0.012289f, -0.000836f, 0.040858f, 0.093458f, 0.082995f, 0.157316f, 0.042194f, -0.081936f, 0.043465f, 0.001536f, 0.044617f, -0.042019f, 0.074298f, -0.114232f, -0.135186f, 0.041183f, 0.160860f, 0.064331f, 0.042915f, -0.184002f, 0.015075f, 0.069071f, 0.125789f, 0.147642f, -0.047495f, 0.006733f, -0.239738f, -0.173812f, 0.087840f, - 0.088275f, -0.119879f, -0.042988f, 0.117667f, 0.144307f, -0.161955f, -0.059227f, 0.054631f, -0.037995f, 0.024580f, -0.051568f, 0.046681f, -0.042811f, 0.006730f, 0.005542f, -0.028429f, 0.017517f, -0.002311f, -0.009301f, -0.016018f, -0.033170f, -0.015260f, 0.013973f, -0.000179f, -0.033959f, 0.032604f, -0.030735f, -0.017333f, -0.025973f, -0.001222f, -0.024673f, 0.056430f, 0.003853f, 0.011447f, -0.011373f, 0.011437f, -0.012473f, 0.012777f, 0.042370f, 0.046275f, -0.008922f, 0.012529f, 0.023572f, 0.040176f, -0.023204f, 0.024312f, -0.020295f, 0.049328f, -0.009737f, -0.034837f, 0.021744f, -0.017637f, -0.012096f, 0.001992f, -0.000752f, 0.019062f, -0.008513f, -0.034510f, -0.026215f, 0.000965f, 0.009036f, -0.056807f, 0.019169f, -0.011476f, -0.002799f, 0.006330f, -0.013031f, -0.011551f, 0.006804f, -0.010440f, 0.007886f, -0.029899f, 0.033029f, -0.095532f, 0.048126f, -0.039387f, 0.059309f, -0.039191f, 0.006238f, -0.025358f, 0.118388f, 0.071660f, -0.039049f, -0.045057f, -0.003991f, 0.146884f, 0.061358f, 0.020388f, 0.040583f, -0.035939f, -0.045192f, 0.012235f, 0.028347f, 0.007097f, 0.002345f, -0.016053f, - -0.012489f, 0.013409f, 0.013787f, 0.033769f, 0.014877f, -0.018977f, -0.008543f, -0.009688f, -0.019053f, -0.000811f, 0.002796f, 0.008470f, 0.011081f, -0.000345f, -0.005513f, 0.012916f, -0.040097f, -0.015807f, 0.016899f, 0.024323f, 0.030512f, -0.018494f, -0.010986f, -0.019667f, 0.031127f, 0.021044f, -0.006908f, 0.009026f, -0.037823f, -0.033141f, 0.028503f, 0.021635f, 0.006207f, -0.057315f, -0.029837f, 0.000814f, 0.008183f, 0.035214f, 0.025128f, -0.005870f, 0.009578f, 0.011188f, -0.018784f, 0.013913f, 0.016000f, -0.007424f, -0.012044f, 0.007740f, -0.020102f, -0.001159f, -0.004542f, -0.016510f, -0.021260f, 0.023805f, 0.004831f, 0.001136f, 0.038406f, 0.039740f, 0.020066f, 0.017632f, -0.042870f, -0.116740f, 0.040122f, 0.215693f, 0.168860f, 0.162459f, 0.051334f, -0.150487f, -0.090975f, -0.133418f, -0.134639f, -0.122000f, -0.043257f, 0.066024f, 0.084289f, 0.133686f, 0.118993f, 0.072118f, 0.011405f, 0.011761f, -0.058636f, -0.091607f, -0.131792f, -0.050503f, -0.036363f, 0.011609f, -0.008207f, 0.066274f, 0.044070f, 0.018805f, 0.088035f, 0.049551f, 0.037148f, -0.008217f, 0.032454f, -0.060917f, - -0.046489f, -0.038280f, -0.044968f, -0.058654f, -0.035934f, -0.023958f, -0.059982f, -0.041726f, 0.014535f, 0.085580f, 0.082533f, 0.093799f, 0.073465f, 0.107263f, 0.017569f, 0.026242f, -0.073531f, -0.055287f, -0.047209f, -0.110420f, -0.109346f, -0.099143f, -0.047254f, -0.059347f, 0.011764f, 0.039093f, 0.058877f, 0.118272f, 0.117740f, 0.110520f, 0.100756f, 0.085361f, 0.017235f, -0.057918f, -0.087980f, -0.159559f, -0.133794f, -0.103123f, -0.131920f, -0.067991f, -0.018778f, 0.005163f, 0.071053f, -0.011663f}, - {0.021736f, -0.007451f, 0.005663f, -0.000828f, -0.000604f, -0.006723f, 0.003772f, 0.009929f, -0.005600f, -0.002551f, 0.001406f, -0.004267f, -0.006998f, 0.001082f, 0.000146f, -0.006679f, -0.011418f, 0.009130f, -0.004750f, 0.015686f, -0.000866f, 0.008794f, -0.012468f, -0.000567f, 0.004503f, -0.002774f, -0.006592f, -0.002739f, -0.004715f, -0.000813f, -0.003901f, 0.000418f, -0.000817f, -0.005793f, 0.003605f, -0.007730f, 0.009132f, -0.003228f, -0.002527f, -0.001496f, 0.010825f, 0.010146f, 0.000393f, 0.007538f, 0.004836f, -0.002385f, -0.002277f, 0.010106f, -0.005035f, -0.011644f, -0.000156f, -0.002499f, 0.012622f, 0.000651f, 0.001579f, -0.007943f, 0.000022f, -0.004172f, -0.004397f, -0.002159f, -0.004740f, 0.003444f, -0.006852f, -0.003069f, 0.001748f, -0.002541f, -0.007346f, -0.010273f, -0.000200f, 0.005892f, 0.003096f, 0.004963f, -0.000100f, -0.001260f, 0.001842f, -0.000646f, -0.006901f, -0.007122f, -0.012136f, 0.004529f, -0.006268f, -0.010683f, -0.007918f, 0.005802f, -0.014980f, -0.007288f, -0.018175f, 0.006728f, 0.007154f, 0.010602f, 0.004760f, -0.005488f, 0.012590f, -0.008443f, 0.002001f, 0.000914f, - -0.002590f, -0.008961f, -0.005601f, -0.009921f, -0.000277f, -0.003855f, 0.005217f, 0.004542f, -0.005733f, -0.000982f, -0.001853f, -0.009062f, -0.001111f, -0.001530f, 0.003593f, 0.000448f, 0.008045f, -0.002501f, 0.010363f, -0.004186f, -0.000588f, 0.002395f, -0.008833f, 0.006235f, -0.003230f, -0.002506f, 0.000162f, -0.001593f, 0.003480f, -0.016377f, 0.007089f, 0.010806f, 0.000645f, 0.006386f, 0.002314f, -0.006943f, -0.001863f, -0.007595f, 0.010240f, -0.002393f, -0.007845f, 0.007237f, -0.011142f, 0.000957f, 0.002987f, -0.011105f, 0.000393f, -0.002266f, -0.005427f, 0.004393f, -0.000157f, 0.001394f, -0.006497f, -0.003276f, -0.019570f, -0.002210f, 0.003504f, -0.026714f, -0.015807f, 0.002798f, -0.008464f, 0.001493f, -0.008733f, -0.015402f, -0.009989f, 0.017175f, 0.010253f, -0.002824f, 0.011909f, 0.002624f, 0.003067f, 0.003157f, -0.005494f, -0.001679f, 0.009730f, -0.007805f, 0.004532f, 0.006830f, -0.007232f, -0.011892f, 0.005609f, -0.009740f, 0.001294f, 0.005396f, 0.014361f, -0.003300f, -0.006574f, -0.006074f, 0.002450f, 0.007576f, -0.010182f, -0.000194f, 0.008858f, 0.003277f, 0.001185f, -0.000672f, - -0.000512f, 0.011055f, -0.000121f, 0.010121f, 0.007036f, -0.002694f, 0.007027f, -0.002454f, -0.000259f, -0.001141f, -0.018292f, 0.006363f, 0.010934f, -0.006199f, -0.003071f, 0.002477f, 0.003302f, 0.002901f, 0.002106f, -0.001109f, -0.001766f, 0.000535f, -0.004175f, 0.012678f, -0.005174f, 0.001386f, 0.007534f, 0.005441f, -0.003929f, 0.004931f, 0.002282f, 0.003159f, 0.007742f, 0.006030f, -0.008500f, 0.009379f, 0.011405f, -0.004071f, -0.010140f, 0.013075f, 0.009194f, 0.020439f, -0.003067f, 0.001861f, 0.006767f, -0.010489f, -0.001704f, 0.003662f, -0.003782f, -0.014112f, -0.000416f, 0.001113f, 0.009627f, -0.011470f, -0.026711f, -0.022267f, -0.013075f, 0.004847f, 0.013311f, -0.013351f, 0.007723f, -0.006739f, 0.010391f, 0.007365f, 0.007187f, 0.011564f, 0.007093f, -0.009749f, -0.008198f, 0.001232f, 0.006843f, -0.000889f, 0.001010f, 0.016307f, 0.000344f, 0.002499f, 0.008805f, 0.008364f, 0.001954f, -0.000178f, 0.021170f, -0.001885f, -0.007236f, -0.002784f, 0.005234f, 0.005564f, -0.003450f, 0.010629f, 0.002756f, 0.005468f, -0.007349f, -0.007558f, -0.002088f, -0.005194f, 0.003346f, -0.004258f, - 0.012785f, -0.014558f, -0.011736f, 0.014462f, -0.000809f, -0.001312f, -0.016718f, 0.004717f, -0.007610f, 0.008664f, -0.006313f, -0.020330f, 0.000217f, 0.008998f, -0.007039f, 0.011796f, -0.006202f, 0.004729f, 0.032664f, 0.007370f, 0.008911f, 0.003450f, -0.007125f, 0.015292f, -0.007074f, -0.004657f, 0.020070f, -0.001742f, 0.016202f, -0.001930f, -0.017889f, 0.006184f, -0.005862f, 0.019819f, 0.010881f, -0.001649f, -0.017645f, -0.012815f, 0.016930f, 0.019438f, -0.022641f, 0.011266f, 0.009561f, 0.006673f, -0.001147f, 0.001980f, 0.002284f, -0.001998f, 0.023134f, -0.001291f, -0.003512f, -0.006534f, -0.007233f, -0.010003f, -0.002798f, -0.000785f, -0.012686f, -0.004941f, 0.003868f, -0.009413f, 0.000971f, 0.000244f, 0.014102f, -0.005397f, 0.000932f, 0.006038f, 0.001068f, 0.012713f, 0.006435f, 0.013219f, 0.007282f, 0.003793f, -0.013691f, 0.001161f, -0.009943f, -0.010279f, 0.003084f, 0.013422f, 0.000226f, 0.011448f, -0.004142f, -0.009403f, -0.001179f, 0.000090f, 0.004484f, 0.007609f, -0.002655f, -0.000678f, -0.003201f, 0.003840f, 0.004557f, -0.012554f, 0.003994f, 0.001187f, 0.009281f, 0.006248f, - 0.007478f, 0.020666f, 0.011017f, -0.009227f, -0.007984f, -0.022625f, -0.001369f, -0.000712f, -0.011894f, 0.004321f, 0.018058f, 0.001938f, -0.014133f, 0.012908f, 0.012545f, -0.001581f, 0.005021f, 0.012389f, 0.003010f, -0.011832f, -0.001788f, 0.026541f, 0.013194f, 0.002432f, -0.017764f, -0.006711f, 0.016117f, 0.005176f, -0.002484f, 0.008697f, 0.008056f, 0.008094f, -0.000169f, 0.016223f, -0.000268f, -0.002619f, 0.004068f, -0.008793f, -0.011008f, -0.001085f, 0.001666f, 0.005632f, 0.003215f, -0.010747f, 0.010092f, 0.017444f, 0.009050f, -0.001177f, 0.013175f, -0.016016f, 0.008443f, -0.009887f, 0.009280f, -0.003387f, -0.011332f, -0.001458f, -0.014690f, -0.024438f, -0.008950f, -0.010386f, -0.001559f, -0.001266f, -0.012731f, 0.001087f, -0.004252f, 0.005667f, 0.004199f, 0.006762f, -0.001871f, 0.001410f, -0.012352f, -0.000420f, 0.001414f, 0.013077f, -0.006461f, -0.022667f, -0.013816f, 0.030375f, -0.006087f, -0.007513f, 0.002544f, -0.001781f, 0.034040f, -0.010427f, -0.017243f, -0.000247f, -0.016994f, 0.003736f, 0.014888f, 0.014521f, 0.005561f, -0.031603f, 0.026180f, -0.020689f, 0.011401f, -0.014359f, - -0.009617f, -0.008337f, 0.013482f, 0.012966f, -0.019659f, 0.000938f, 0.009750f, -0.007033f, 0.004924f, 0.005321f, -0.006556f, 0.000258f, -0.015997f, -0.012016f, -0.025139f, 0.014708f, -0.002749f, 0.025521f, -0.011307f, 0.004986f, 0.018438f, -0.005086f, -0.004248f, -0.008469f, 0.021045f, 0.013926f, -0.023633f, 0.006295f, -0.012899f, -0.005424f, -0.004340f, -0.014596f, 0.009425f, 0.003637f, 0.022857f, 0.014486f, -0.026049f, -0.005272f, -0.010440f, 0.015102f, 0.006881f, 0.000525f, -0.014481f, 0.001514f, -0.000146f, 0.012491f, -0.000579f, 0.000761f, -0.016461f, -0.001346f, 0.015064f, -0.012891f, 0.004482f, -0.004587f, -0.000262f, -0.009977f, 0.001060f, 0.003383f, 0.007534f, -0.008347f, 0.000510f, -0.017618f, -0.002278f, -0.020343f, 0.003090f, -0.005128f, 0.011560f, -0.000874f, 0.009778f, -0.013984f, -0.026336f, 0.005481f, 0.017484f, 0.002209f, -0.002288f, 0.013642f, 0.009078f, -0.021552f, -0.000536f, -0.008216f, 0.026921f, -0.001357f, 0.002936f, 0.001966f, 0.000039f, -0.001029f, -0.009989f, 0.021304f, -0.002099f, -0.030687f, -0.006011f, 0.018243f, -0.012206f, 0.002837f, -0.000810f, 0.002208f, - -0.004159f, 0.002664f, -0.005968f, 0.006987f, -0.012070f, 0.010692f, 0.015045f, -0.012447f, -0.003508f, -0.007529f, -0.021663f, 0.008110f, -0.015528f, 0.012701f, -0.013726f, -0.023346f, -0.006760f, 0.013132f, -0.004775f, -0.008699f, 0.008557f, 0.012022f, 0.006640f, 0.013173f, 0.023027f, 0.018316f, -0.001805f, 0.002915f, 0.002647f, -0.013578f, 0.001878f, -0.014352f, -0.014861f, 0.006430f, -0.011141f, -0.030994f, -0.024035f, 0.013609f, 0.027908f, -0.000988f, -0.000494f, 0.004144f, -0.011792f, -0.007217f, -0.029885f, -0.017463f, -0.007651f, -0.001239f, -0.021403f, 0.031315f, 0.007575f, 0.017017f, -0.019382f, -0.025461f, -0.017259f, -0.008111f, 0.006122f, -0.028764f, -0.011239f, 0.011981f, -0.004277f, -0.034778f, -0.010222f, 0.003656f, 0.001643f, 0.020104f, 0.008369f, -0.007501f, -0.014735f, 0.019087f, -0.010252f, -0.002061f, 0.016432f, 0.003565f, -0.015006f, -0.009310f, 0.000146f, -0.028302f, 0.008352f, 0.020433f, -0.007804f, -0.012652f, 0.004618f, -0.014760f, -0.003582f, 0.001872f, -0.007265f, -0.007648f, 0.008845f, -0.011235f, -0.020206f, 0.009918f, -0.010759f, -0.017212f, -0.020642f, -0.012111f, - 0.004065f, -0.009865f, 0.005631f, 0.026642f, 0.017568f, -0.004286f, 0.028389f, 0.025757f, -0.009295f, 0.002795f, 0.009892f, -0.014683f, -0.006133f, -0.029910f, 0.006633f, -0.008755f, -0.018673f, 0.048205f, -0.001499f, 0.029418f, -0.014568f, -0.042911f, 0.012586f, 0.003325f, -0.001238f, -0.020280f, -0.001503f, -0.013458f, 0.034166f, 0.024384f, 0.022526f, 0.015839f, -0.025954f, -0.000435f, 0.004113f, 0.023199f, -0.039633f, -0.004807f, -0.009326f, -0.011967f, 0.006528f, -0.013448f, 0.005660f, 0.008719f, 0.007158f, 0.006938f, 0.009820f, -0.002981f, -0.003422f, -0.019689f, -0.004116f, -0.003144f, 0.019698f, -0.000151f, -0.017001f, -0.004261f, 0.021394f, -0.002549f, 0.012676f, 0.015483f, -0.010755f, -0.006779f, -0.025298f, -0.015099f, 0.051127f, 0.013263f, 0.023051f, 0.012050f, 0.003468f, 0.001869f, -0.031528f, 0.018979f, 0.003521f, 0.005568f, 0.016865f, 0.017848f, 0.028268f, -0.031988f, -0.012765f, -0.017752f, -0.001838f, 0.004428f, -0.003877f, -0.009002f, -0.004980f, -0.026914f, -0.033560f, -0.022068f, -0.031605f, -0.004417f, -0.020897f, -0.035846f, -0.015056f, 0.065211f, 0.014800f, -0.009497f, - -0.013542f, 0.001994f, -0.020966f, -0.041059f, 0.030089f, -0.000023f, 0.019330f, -0.014845f, 0.013949f, 0.033292f, -0.003413f, 0.003496f, -0.008554f, 0.028887f, 0.024421f, 0.009218f, -0.039665f, 0.002516f, 0.005650f, 0.024041f, 0.035363f, -0.010911f, -0.007466f, -0.005159f, 0.009326f, 0.012190f, 0.010338f, -0.018519f, 0.007991f, -0.021310f, 0.015619f, 0.020521f, -0.010352f, -0.021648f, 0.012989f, -0.023550f, -0.021106f, -0.001682f, 0.005816f, 0.028840f, 0.003349f, -0.005009f, 0.025083f, -0.005707f, 0.022520f, 0.040921f, 0.020861f, -0.000701f, -0.026851f, -0.003815f, -0.015507f, -0.013839f, 0.026746f, 0.008985f, -0.027096f, -0.001957f, -0.020653f, -0.007042f, 0.035707f, 0.014386f, 0.005427f, 0.013035f, 0.021826f, 0.008641f, -0.028098f, 0.011978f, 0.024812f, 0.004948f, -0.018354f, 0.004188f, 0.004091f, -0.000829f, -0.012665f, 0.016036f, 0.010462f, 0.009482f, -0.015875f, -0.000761f, -0.020259f, -0.047607f, 0.016486f, -0.018923f, 0.005311f, 0.001759f, 0.033470f, -0.022940f, -0.020276f, -0.008471f, -0.009209f, -0.012221f, 0.024812f, -0.021787f, -0.030715f, 0.009313f, -0.057508f, 0.001770f, - -0.010645f, -0.024333f, 0.031294f, -0.001925f, -0.001540f, 0.013113f, -0.011966f, 0.009855f, -0.002742f, -0.034438f, -0.037192f, -0.000375f, 0.008421f, 0.022028f, 0.011184f, -0.002562f, -0.003374f, -0.021755f, -0.009608f, 0.021639f, -0.033301f, 0.046788f, 0.028694f, 0.006060f, 0.035615f, -0.023450f, -0.008941f, -0.021559f, -0.020604f, -0.009802f, 0.017071f, 0.043831f, 0.001747f, -0.023521f, -0.002351f, 0.001426f, -0.000791f, -0.003252f, -0.012187f, 0.010907f, 0.013139f, 0.028639f, 0.001920f, 0.032300f, 0.020289f, 0.007491f, 0.002552f, 0.005045f, -0.046347f, 0.023999f, -0.001174f, -0.032716f, 0.028232f, -0.003668f, 0.038478f, -0.016440f, -0.015216f, -0.087327f, -0.008783f, 0.054826f, -0.011615f, 0.003545f, 0.044352f, -0.008717f, -0.001288f, 0.007696f, 0.010525f, -0.011802f, 0.010523f, -0.002643f, -0.017176f, 0.017078f, 0.015829f, -0.049914f, 0.004453f, -0.044126f, -0.002946f, -0.021712f, -0.027885f, -0.003366f, -0.009530f, -0.023023f, 0.011127f, 0.006711f, 0.014478f, 0.024513f, -0.033247f, 0.042446f, 0.001165f, -0.034557f, 0.001488f, -0.022946f, -0.014557f, -0.024812f, -0.026746f, -0.007932f, - 0.024844f, -0.019709f, 0.011027f, 0.029843f, -0.017569f, -0.025272f, -0.027843f, -0.035198f, -0.043127f, -0.020955f, -0.013409f, 0.006825f, -0.007878f, 0.015181f, 0.006258f, -0.020762f, -0.003451f, 0.031774f, 0.014233f, -0.036716f, 0.014344f, 0.001346f, -0.013215f, -0.033244f, 0.023730f, -0.008621f, 0.033359f, 0.050063f, -0.000979f, 0.048293f, -0.025762f, 0.030948f, -0.021071f, 0.033496f, 0.030634f, 0.011226f, -0.040260f, 0.032071f, -0.078827f, -0.007090f, -0.005663f, -0.009109f, 0.009507f, -0.048876f, 0.005195f, -0.011619f, -0.002086f, 0.018694f, 0.010180f, 0.022106f, -0.017288f, 0.014834f, -0.007377f, -0.043971f, -0.014962f, -0.033049f, -0.017223f, 0.017177f, -0.034486f, 0.001857f, -0.011840f, -0.030230f, -0.003408f, 0.023712f, -0.034429f, -0.037525f, 0.015477f, 0.017602f, 0.000152f, -0.019492f, 0.020588f, 0.017176f, 0.026215f, 0.018229f, 0.010088f, 0.026105f, 0.036062f, -0.022249f, 0.006293f, -0.020111f, 0.044860f, -0.007191f, -0.029398f, 0.032863f, 0.016946f, 0.004984f, -0.016531f, -0.026984f, 0.006191f, 0.009932f, 0.014755f, -0.005328f, -0.018395f, 0.010319f, -0.021581f, -0.003662f, - -0.021329f, 0.063352f, 0.011035f, -0.023979f, 0.056192f, -0.011402f, 0.017542f, -0.019073f, 0.028448f, 0.036899f, -0.025340f, 0.035159f, 0.042555f, 0.050908f, 0.042441f, 0.001342f, 0.029447f, 0.082295f, 0.022923f, -0.015341f, -0.011012f, 0.018258f, 0.006750f, 0.007142f, -0.000786f, -0.034455f, 0.029237f, -0.077225f, 0.009588f, 0.015619f, -0.002112f, -0.015005f, -0.027933f, -0.014489f, 0.004737f, 0.021497f, 0.035760f, -0.021496f, -0.043090f, -0.036875f, -0.003888f, 0.000278f, -0.024942f, 0.052691f, -0.023904f, -0.017425f, 0.023307f, -0.008547f, 0.005086f, -0.005795f, 0.047157f, 0.006736f, -0.045200f, 0.017372f, 0.006833f, 0.031070f, -0.010496f, 0.002572f, -0.018247f, 0.015023f, 0.007847f, 0.039485f, -0.009094f, 0.017387f, 0.019782f, -0.025157f, -0.026313f, 0.001164f, 0.024941f, -0.048185f, -0.055805f, -0.017205f, -0.022857f, -0.003677f, -0.008099f, 0.004978f, 0.012593f, -0.011952f, 0.001571f, -0.065360f, -0.055676f, 0.043303f, 0.045609f, -0.056609f, -0.044437f, -0.054465f, -0.030012f, -0.022764f, 0.025759f, -0.029839f, -0.054963f, 0.001391f, -0.000967f, -0.029456f, -0.006768f, -0.047205f, - -0.004928f, -0.012034f, 0.014688f, -0.022825f, -0.005296f, -0.073073f, 0.064616f, 0.040199f, -0.006291f, 0.086763f, -0.007979f, -0.049065f, -0.003816f, 0.018675f, -0.029127f, -0.040282f, -0.007655f, -0.027878f, -0.000682f, 0.006306f, -0.039731f, 0.057942f, 0.002535f, 0.005105f, -0.036624f, -0.012034f, 0.004563f, -0.012005f, 0.010041f, 0.012029f, 0.049176f, 0.007199f, -0.001923f, 0.037705f, 0.032989f, -0.013150f, 0.019704f, -0.026563f, 0.007603f, 0.020144f, 0.021993f, 0.053039f, -0.053699f, 0.031368f, 0.101495f, -0.001415f, 0.017275f, 0.032221f, 0.004717f, 0.004450f, 0.017119f, 0.009994f, -0.032789f, -0.042882f, -0.013615f, 0.029375f, 0.010712f, -0.044858f, -0.021401f, -0.005206f, -0.018695f, 0.033439f, 0.004932f, 0.024652f, -0.061905f, -0.043844f, 0.020573f, 0.038730f, 0.029099f, 0.012002f, 0.063336f, 0.028866f, -0.021978f, 0.033879f, -0.026974f, -0.016527f, 0.006600f, 0.027623f, -0.081753f, -0.000378f, 0.001744f, -0.004807f, -0.008303f, 0.037176f, 0.005508f, -0.024590f, -0.039669f, 0.040686f, -0.035371f, -0.000920f, 0.029916f, 0.020177f, -0.027174f, -0.009765f, -0.045290f, -0.001947f, - 0.016411f, 0.015048f, 0.022148f, 0.003489f, -0.028404f, -0.040461f, 0.034865f, 0.015031f, 0.018867f, 0.004847f, 0.019215f, 0.003509f, 0.026641f, -0.043243f, -0.067870f, 0.018492f, -0.007493f, -0.016246f, 0.042939f, -0.007981f, -0.017707f, 0.034084f, 0.036555f, 0.026594f, 0.001094f, -0.018601f, -0.026808f, -0.008516f, -0.036535f, 0.094496f, -0.004081f, 0.033857f, 0.011522f, -0.031734f, 0.030257f, -0.012075f, -0.025684f, 0.029872f, 0.028339f, -0.051817f, 0.041481f, -0.004857f, 0.055890f, -0.050086f, -0.032886f, 0.053011f, 0.004025f, -0.039812f, 0.049319f, -0.013083f, 0.080204f, -0.027534f, -0.016740f, -0.039447f, 0.037576f, 0.011385f, -0.023926f, 0.022589f, -0.025399f, 0.013635f, -0.012398f, -0.021933f, 0.060206f, -0.012084f, 0.040106f, -0.063840f, -0.013674f, 0.000623f, -0.080808f, -0.015145f, 0.009334f, 0.040865f, -0.021439f, -0.016268f, -0.000341f, -0.003860f, 0.053220f, -0.003028f, -0.029838f, 0.060871f, -0.009318f, -0.000746f, 0.009018f, -0.021114f, 0.048618f, 0.005677f, -0.012379f, 0.026624f, 0.018751f, -0.025265f, -0.011522f, -0.010419f, 0.037399f, -0.076407f, -0.003404f, -0.012820f, - -0.029892f, 0.016006f, -0.030369f, 0.048445f, -0.014125f, -0.054246f, -0.007999f, 0.088937f, -0.054486f, 0.040475f, -0.060526f, -0.014119f, 0.055959f, 0.045210f, -0.033560f, 0.017520f, -0.040488f, -0.047448f, 0.008407f, -0.019246f, 0.019557f, 0.009234f, -0.005947f, 0.011498f, -0.076150f, -0.025806f, -0.040182f, -0.050800f, 0.022193f, -0.017401f, -0.018008f, -0.026824f, -0.055632f, -0.041042f, 0.030679f, -0.004135f, 0.102916f, 0.021083f, 0.003724f, 0.038441f, 0.043307f, 0.018551f, 0.040927f, -0.023790f, -0.032456f, 0.036513f, -0.057208f, -0.005579f, -0.012347f, 0.004416f, 0.039090f, -0.024893f, 0.043498f, 0.020089f, 0.009447f, 0.014411f, -0.072562f, 0.050208f, 0.008642f, -0.049327f, 0.019379f, -0.052352f, 0.008761f, 0.073528f, -0.009306f, -0.041194f, -0.045738f, 0.020932f, 0.032481f, 0.028047f, 0.013875f, -0.045893f, -0.032745f, -0.013006f, -0.008956f, 0.063385f, -0.039062f, -0.021526f, 0.091690f, -0.049015f, -0.003888f, 0.038384f, 0.000272f, 0.040419f, -0.005435f, -0.028658f, -0.020486f, -0.053787f, 0.028938f, 0.042382f, -0.059544f, 0.092142f, 0.030213f, -0.064754f, -0.061121f, -0.055774f, - -0.069844f, -0.053753f, 0.003545f, 0.031545f, 0.006212f, -0.043689f, -0.017185f, 0.035789f, 0.000001f, -0.025092f, 0.033645f, -0.058567f, 0.005123f, -0.008531f, -0.057813f, -0.047613f, 0.010968f, -0.012381f, 0.043521f, -0.063025f, -0.007255f, -0.002575f, 0.043651f, -0.109421f, -0.101385f, -0.087696f, -0.056848f, 0.023051f, -0.024096f, 0.113021f, 0.029684f, -0.011936f, -0.026048f, -0.014139f, 0.031791f, -0.073306f, 0.085795f, 0.113916f, 0.045008f, -0.006696f, 0.089696f, -0.028344f, 0.054124f, 0.103603f, -0.019167f, 0.005949f, 0.019041f, 0.137858f, -0.035251f, -0.008376f, 0.081371f, 0.031364f, 0.025854f, -0.022168f, -0.084332f, 0.006211f, -0.066983f, 0.032184f, -0.082926f, -0.095920f, -0.001782f, -0.004947f, -0.068018f, -0.002932f, -0.033500f, -0.068317f, -0.055985f, -0.089281f, -0.005191f, 0.092777f, -0.030315f, -0.016662f, -0.085832f, -0.044370f, -0.032399f, -0.027923f, 0.027384f, -0.019485f, 0.151616f, -0.034791f, -0.003685f, -0.054280f, 0.113786f, 0.096694f, -0.069003f, 0.079191f, -0.029072f, -0.109934f, -0.022327f, -0.008223f, 0.021147f, -0.023176f, -0.028112f, -0.010794f, -0.048192f, 0.016907f, - 0.053976f, -0.062404f, -0.033640f, 0.045504f, 0.195718f, 0.021991f, -0.120813f, -0.030864f, -0.041812f, 0.008919f, 0.062217f, 0.108896f, 0.032799f, -0.091863f, -0.000042f, 0.063380f, 0.015631f, 0.001449f, -0.000872f, 0.016750f, -0.006652f, -0.010822f, 0.077662f, 0.047711f, 0.044514f, -0.063540f, -0.039070f, 0.044342f, 0.019560f, 0.026603f, -0.019411f, 0.009008f, 0.087023f, 0.003089f, 0.074408f, 0.038696f, 0.042201f, 0.071028f, 0.013602f, -0.035434f, 0.012257f, -0.040652f, 0.014521f, 0.031322f, 0.011607f, 0.115871f, -0.033680f, -0.071260f, -0.066197f, 0.090279f, 0.045399f, 0.049346f, 0.037132f, -0.047713f, -0.057840f, -0.035674f, 0.003569f, 0.022224f, -0.007722f, 0.034322f, 0.064808f, -0.000524f, 0.049248f, 0.042117f, -0.051547f, -0.007748f, 0.024918f, -0.023489f, -0.016190f, -0.024624f, -0.087777f, -0.011820f, 0.052711f, 0.008512f, 0.096725f, 0.061398f, -0.028442f, 0.033559f, -0.006893f, -0.051473f, 0.009275f, 0.149167f, 0.043340f, 0.060140f, -0.028262f, -0.144427f, -0.067303f, -0.107611f, -0.031120f, 0.064568f, 0.162414f, 0.066104f, 0.021125f, -0.080429f, -0.067808f, 0.045093f, - 0.082343f, 0.034112f, 0.099214f, -0.009266f, -0.059644f, -0.097197f, -0.041662f, -0.019607f, 0.074297f, 0.003198f, 0.044126f, 0.031060f, 0.009034f, 0.089475f, 0.069548f, -0.013290f, -0.006485f, -0.093919f, -0.018854f, -0.008113f, 0.004248f, 0.043910f, 0.092203f, 0.048426f, 0.045356f, 0.077614f, 0.050811f, -0.094567f, -0.068484f, -0.029199f, -0.053419f, 0.051081f, 0.041364f, 0.078875f, 0.068874f, 0.068568f, 0.023845f, 0.005173f, -0.061993f, -0.074596f, -0.061170f, 0.012553f, 0.031716f, -0.009964f, -0.008600f, 0.126106f, 0.033792f, -0.020696f, -0.014456f, 0.081150f, -0.102259f, 0.007183f, -0.193879f, -0.058265f, 0.040972f, -0.085427f, 0.051180f, 0.009964f, -0.018427f, 0.070723f, 0.006461f, -0.215885f, -0.138571f, -0.067028f, 0.063226f, 0.026607f, 0.301326f, 0.331621f, 0.196303f, 0.367965f, 0.293745f, 0.320929f, 0.216982f, 0.274604f, 0.216275f, 0.018192f, -0.095957f, -0.128703f, -0.132181f, -0.272903f, -0.340051f, -0.345086f, -0.244587f, -0.179727f, -0.067955f, 0.035206f, -0.090741f, 0.085681f, -0.116012f, -0.022323f, 0.006158f, -0.013848f, 0.047338f, -0.090859f, 0.181725f, 0.057782f, - 0.169052f, 0.127570f, 0.077654f, 0.072887f, 0.106352f, 0.089931f, 0.110558f, 0.233137f, 0.213118f, 0.188634f, 0.211324f, 0.272601f, 0.241325f, 0.243284f, 0.396005f, 0.176707f, 0.292413f, 0.384137f, 0.269334f, 0.357979f, 0.205461f, 0.276388f, 0.217479f, 0.268461f, 0.272192f, 0.154216f, 0.201091f, 0.187224f, 0.198291f, 0.215923f, 0.108801f, 0.073401f, -0.055281f, 0.058977f, -0.091037f, -0.035997f, -0.166545f, -0.164002f, -0.189144f, -0.484562f, -0.414487f, -0.326787f, -0.150217f, -0.025114f} - }, - { - {0.003329f, -0.000751f, 0.002711f, -0.000613f, 0.011412f, -0.001706f, -0.000436f, 0.013916f, -0.003339f, 0.015501f, 0.002817f, -0.006190f, 0.009349f, 0.004433f, -0.006836f, 0.002590f, 0.003705f, 0.001107f, 0.005971f, -0.001553f, 0.004801f, -0.000001f, -0.006675f, 0.002886f, 0.007366f, 0.004252f, 0.004292f, -0.000852f, 0.000624f, 0.000042f, 0.002671f, 0.005438f, -0.012971f, -0.006300f, 0.000300f, 0.003121f, 0.001216f, -0.005038f, 0.009917f, 0.003295f, -0.002219f, 0.005319f, 0.001920f, 0.007357f, 0.002130f, -0.002867f, -0.005623f, 0.005949f, 0.000399f, -0.000105f, -0.003033f, 0.001677f, -0.005291f, -0.003670f, 0.002461f, 0.005326f, -0.002556f, 0.001182f, -0.000052f, -0.000745f, 0.009833f, 0.003698f, -0.001169f, 0.001571f, 0.004297f, 0.000418f, 0.004399f, -0.005624f, 0.005375f, 0.005961f, -0.002994f, -0.009970f, -0.005228f, -0.002732f, 0.010318f, 0.000113f, -0.003725f, -0.000961f, -0.009087f, -0.006394f, 0.004143f, 0.000257f, -0.005703f, 0.007067f, 0.004872f, -0.001672f, 0.000492f, -0.001095f, 0.005829f, -0.008143f, 0.003058f, 0.005875f, 0.005345f, -0.011675f, -0.008046f, -0.005874f, - 0.007788f, 0.001729f, 0.002564f, -0.003367f, 0.008296f, 0.002946f, -0.002026f, 0.000054f, -0.002333f, 0.001450f, 0.003114f, -0.002015f, -0.002364f, -0.007131f, 0.007404f, 0.012123f, 0.001464f, 0.007623f, -0.001447f, 0.001369f, 0.002810f, 0.003188f, -0.009344f, 0.000437f, -0.009764f, -0.002470f, -0.001392f, 0.002833f, -0.004933f, -0.000409f, 0.002125f, 0.000724f, -0.005702f, -0.000043f, 0.000634f, 0.004379f, -0.006058f, -0.007878f, -0.001027f, 0.010000f, 0.016525f, -0.000276f, 0.002722f, 0.000829f, -0.003506f, -0.010257f, -0.002461f, 0.006592f, -0.003052f, 0.006566f, 0.002879f, 0.006714f, -0.000012f, 0.002506f, 0.004474f, -0.010143f, -0.002580f, -0.009612f, 0.005453f, 0.000850f, -0.004765f, 0.021164f, -0.008427f, -0.014807f, 0.000902f, 0.007157f, -0.001515f, -0.011098f, -0.003469f, -0.004714f, -0.002105f, -0.005165f, -0.002022f, 0.007962f, -0.000809f, -0.004885f, 0.008648f, 0.001493f, 0.008388f, -0.002126f, -0.002407f, 0.003507f, -0.000060f, 0.004052f, -0.001915f, 0.008342f, 0.013060f, -0.003517f, -0.009285f, -0.006421f, 0.005199f, 0.000140f, -0.020886f, -0.001803f, -0.008522f, -0.002905f, - 0.009736f, -0.006888f, -0.005684f, 0.007082f, -0.004894f, -0.000862f, 0.008870f, 0.003311f, -0.007660f, 0.003382f, -0.005637f, -0.012038f, 0.003477f, 0.004872f, -0.009652f, -0.005243f, -0.003117f, -0.003791f, -0.000562f, 0.004031f, 0.005790f, 0.009604f, 0.010115f, -0.002498f, 0.000484f, -0.004180f, 0.003917f, 0.002939f, -0.003164f, 0.004448f, 0.005883f, -0.006598f, -0.017018f, -0.008422f, 0.005027f, 0.007614f, 0.002751f, 0.008243f, -0.007101f, 0.008616f, 0.010238f, -0.002798f, 0.011344f, -0.001450f, 0.008304f, -0.003917f, 0.000071f, -0.003505f, 0.010659f, 0.004345f, -0.000641f, 0.009801f, -0.005371f, -0.004003f, 0.006884f, -0.016752f, -0.003153f, 0.001011f, -0.003812f, -0.014929f, -0.009405f, 0.006309f, -0.006123f, -0.003841f, -0.000032f, 0.011815f, -0.003077f, -0.008160f, -0.000911f, 0.003079f, 0.006372f, -0.000960f, -0.010930f, -0.006824f, -0.002246f, -0.005422f, 0.001476f, -0.009244f, 0.004300f, -0.008704f, -0.013137f, 0.000422f, 0.004174f, 0.005217f, -0.004435f, -0.002955f, -0.008757f, 0.010868f, 0.005946f, 0.001488f, -0.000247f, -0.000348f, -0.004062f, -0.002041f, 0.003312f, 0.004574f, - 0.016058f, -0.001944f, 0.003771f, 0.000965f, -0.000840f, -0.008183f, -0.006420f, 0.010968f, -0.005008f, 0.000888f, 0.002749f, 0.001339f, 0.004049f, 0.005079f, 0.004470f, 0.010808f, -0.007131f, -0.010553f, -0.008582f, 0.005481f, 0.011896f, -0.002108f, 0.009132f, -0.007978f, -0.009799f, 0.008272f, -0.004036f, 0.000986f, 0.003116f, 0.010363f, 0.003883f, 0.016378f, -0.006948f, -0.008449f, 0.003914f, -0.004581f, -0.004367f, 0.009406f, -0.014163f, -0.008599f, 0.001623f, -0.002516f, 0.006734f, -0.004594f, 0.002024f, 0.011811f, -0.010481f, 0.008319f, -0.006206f, 0.005515f, -0.005775f, -0.001382f, -0.000665f, 0.012302f, 0.002585f, 0.000806f, -0.008377f, 0.000831f, -0.010012f, 0.004323f, 0.002984f, -0.006508f, 0.000277f, -0.002413f, 0.018489f, 0.002913f, 0.001658f, -0.015124f, -0.008630f, -0.012651f, 0.010869f, -0.006158f, -0.000136f, 0.006015f, 0.023625f, 0.016839f, -0.005806f, -0.013500f, -0.005169f, -0.011612f, 0.013744f, -0.001805f, -0.002789f, -0.004987f, -0.002936f, -0.000395f, -0.005063f, -0.002472f, -0.009443f, 0.006899f, -0.009754f, -0.016273f, 0.016626f, 0.008102f, -0.018223f, 0.018251f, - -0.003238f, -0.000629f, -0.025445f, 0.015347f, 0.009590f, -0.019862f, 0.005677f, -0.002925f, 0.007333f, 0.002201f, 0.008510f, 0.006105f, 0.001922f, -0.009007f, 0.000550f, 0.003901f, -0.012794f, -0.004887f, -0.015032f, -0.002095f, -0.009456f, -0.004470f, 0.001375f, -0.011099f, -0.004534f, -0.016559f, 0.006145f, 0.002109f, 0.001199f, 0.001911f, -0.007560f, -0.014374f, -0.004859f, 0.005609f, -0.002624f, -0.000880f, 0.015271f, -0.022576f, 0.009455f, 0.012114f, -0.001881f, 0.001107f, -0.004629f, -0.001462f, -0.007584f, -0.011009f, -0.007853f, -0.008623f, -0.006069f, 0.005995f, 0.003094f, 0.005343f, 0.007727f, -0.001613f, -0.004112f, 0.011255f, 0.021195f, 0.015052f, -0.000182f, -0.017886f, 0.005164f, -0.002727f, 0.002987f, 0.019009f, 0.000403f, 0.019075f, 0.017984f, 0.027706f, 0.006292f, -0.004163f, -0.001936f, 0.008981f, -0.003464f, 0.026882f, -0.003399f, -0.003357f, 0.032614f, 0.000888f, 0.016192f, -0.005555f, -0.000142f, -0.000747f, 0.002133f, -0.003536f, 0.001707f, 0.000206f, -0.001548f, -0.017288f, -0.002322f, -0.003540f, -0.003824f, -0.006741f, 0.010942f, 0.006185f, 0.006269f, -0.009305f, - -0.001721f, -0.015154f, -0.007000f, 0.003852f, -0.001906f, -0.008842f, -0.003603f, 0.006242f, 0.011444f, 0.008226f, -0.004443f, -0.013899f, -0.001147f, 0.005225f, -0.003130f, 0.008906f, 0.004588f, 0.011748f, 0.014059f, -0.003662f, -0.000763f, -0.014692f, -0.019971f, 0.019440f, 0.009076f, 0.000644f, -0.001529f, 0.000775f, -0.007779f, -0.006248f, -0.000923f, 0.016143f, 0.007617f, 0.004336f, 0.016938f, -0.011798f, 0.003103f, -0.009174f, -0.009582f, 0.009871f, 0.006827f, 0.008962f, 0.025653f, 0.001872f, -0.013373f, 0.005404f, -0.013325f, -0.014562f, -0.020246f, 0.008052f, -0.018936f, 0.000317f, 0.020481f, -0.021404f, 0.007676f, 0.010078f, -0.006098f, -0.026478f, 0.000089f, 0.016026f, -0.017608f, 0.011139f, -0.001471f, -0.007329f, -0.022747f, -0.000263f, -0.016478f, 0.003255f, -0.008486f, -0.012257f, -0.016030f, 0.006893f, -0.002478f, -0.000510f, 0.014774f, -0.008656f, 0.012429f, -0.009176f, -0.004079f, 0.019855f, 0.006421f, -0.009880f, 0.007738f, 0.005171f, -0.009203f, 0.005238f, 0.004654f, -0.002919f, -0.004060f, 0.001321f, -0.004555f, -0.004548f, 0.002948f, 0.004144f, 0.026169f, -0.024239f, - 0.003782f, 0.002236f, -0.009154f, 0.018556f, 0.009919f, -0.005415f, -0.019539f, 0.002477f, -0.002234f, -0.005010f, -0.012467f, -0.013386f, 0.017055f, 0.012201f, 0.001072f, -0.000736f, 0.008839f, 0.005794f, -0.004711f, 0.008617f, 0.004704f, -0.003468f, 0.017683f, -0.005314f, 0.010136f, -0.005713f, 0.003562f, 0.009126f, -0.020442f, 0.015086f, -0.008742f, -0.003371f, -0.011872f, -0.007967f, 0.006713f, -0.006286f, 0.005431f, 0.022881f, 0.007394f, 0.012728f, -0.029079f, -0.018682f, -0.010574f, -0.006531f, 0.002781f, 0.000216f, 0.004627f, -0.023781f, 0.012581f, 0.005736f, 0.002888f, 0.023379f, 0.000047f, -0.012693f, 0.021268f, 0.008866f, -0.009995f, 0.004780f, -0.012750f, 0.011728f, 0.004995f, 0.015512f, -0.013343f, -0.008837f, 0.003464f, -0.012738f, 0.016171f, -0.014786f, -0.000651f, 0.015103f, 0.013152f, -0.027607f, -0.001196f, 0.001782f, 0.002843f, 0.005055f, 0.030173f, 0.007501f, 0.001472f, -0.008916f, -0.008193f, -0.016076f, -0.009433f, 0.023109f, 0.000054f, -0.026493f, -0.000107f, 0.006795f, -0.015880f, -0.016298f, 0.001434f, -0.010317f, 0.003888f, 0.025490f, 0.011529f, 0.011223f, - -0.010843f, -0.025572f, 0.001444f, -0.003398f, 0.011491f, -0.000845f, -0.022659f, -0.035286f, -0.010752f, 0.010173f, 0.027191f, 0.004033f, 0.013986f, 0.048747f, 0.007845f, 0.008382f, -0.007785f, -0.023260f, 0.012933f, -0.011272f, 0.011871f, -0.002918f, 0.031848f, 0.023446f, -0.012771f, -0.026376f, -0.021331f, 0.015842f, -0.014362f, 0.019409f, 0.008131f, 0.006249f, -0.007194f, -0.002692f, 0.022667f, -0.004718f, 0.019917f, 0.020284f, 0.010020f, 0.014150f, -0.016492f, 0.015314f, 0.007759f, -0.008584f, 0.021979f, -0.010257f, 0.019871f, 0.001236f, 0.001594f, -0.030515f, 0.017413f, 0.001289f, -0.006491f, 0.014498f, -0.021898f, -0.008791f, 0.011684f, 0.009815f, -0.020355f, 0.002593f, -0.013436f, -0.007702f, 0.018080f, 0.001950f, 0.004598f, -0.002719f, -0.023395f, 0.014079f, 0.012685f, 0.000121f, 0.009597f, 0.004053f, -0.011508f, -0.011363f, -0.002779f, 0.010535f, -0.022292f, -0.002238f, -0.001498f, -0.001076f, -0.003896f, 0.005944f, 0.005572f, 0.017640f, 0.042416f, 0.014387f, 0.004380f, -0.014712f, -0.040983f, 0.030213f, 0.007524f, -0.024599f, 0.006462f, -0.001171f, 0.005393f, 0.007265f, - -0.020272f, -0.038804f, -0.033030f, 0.012490f, 0.023597f, -0.003116f, 0.024862f, -0.010243f, 0.019153f, 0.026747f, 0.032491f, -0.005494f, 0.023725f, -0.020116f, 0.007290f, -0.010031f, 0.001882f, 0.015486f, -0.001673f, -0.005065f, 0.004984f, 0.019015f, -0.013073f, -0.020188f, -0.023717f, 0.049756f, -0.000945f, -0.000041f, -0.022446f, 0.024406f, 0.006151f, -0.041374f, -0.026386f, 0.012341f, -0.007171f, -0.005181f, 0.016108f, 0.008443f, 0.041396f, 0.026144f, -0.002528f, -0.021837f, -0.025228f, -0.010838f, -0.011011f, -0.024973f, 0.024743f, -0.016037f, 0.019300f, 0.020773f, -0.018923f, -0.019510f, -0.023374f, -0.028755f, 0.006398f, 0.003054f, -0.013196f, -0.010810f, -0.025504f, -0.004509f, -0.025552f, 0.009080f, -0.000188f, -0.003474f, -0.001701f, -0.022748f, -0.046296f, -0.009279f, -0.012651f, 0.003322f, -0.011416f, 0.002763f, 0.003928f, -0.004113f, 0.018647f, -0.024416f, -0.008516f, -0.023152f, -0.002057f, -0.011173f, 0.026778f, 0.031640f, 0.023828f, -0.033836f, 0.023576f, -0.011810f, 0.017688f, -0.006509f, 0.012824f, -0.010855f, -0.015656f, 0.005890f, -0.019957f, 0.012804f, 0.013874f, -0.001322f, - 0.007981f, -0.016989f, -0.003083f, 0.030004f, -0.024384f, 0.001523f, -0.007836f, -0.009285f, -0.019795f, -0.000748f, 0.028391f, 0.038754f, -0.025079f, 0.011844f, -0.003809f, -0.023208f, -0.024602f, -0.025571f, -0.012414f, 0.048741f, 0.028805f, -0.009177f, 0.015099f, -0.010502f, 0.013089f, -0.026925f, 0.015303f, -0.001183f, -0.014815f, 0.036573f, 0.019039f, 0.006888f, 0.012247f, 0.009728f, 0.035115f, 0.003458f, -0.028734f, 0.010518f, 0.023739f, 0.015687f, -0.049403f, 0.028818f, -0.018434f, -0.023089f, -0.003191f, -0.002352f, -0.000176f, 0.031633f, 0.020783f, 0.085927f, 0.024136f, -0.014558f, 0.005577f, 0.014356f, 0.000382f, 0.028510f, 0.021316f, 0.019687f, -0.025623f, -0.042911f, 0.042668f, -0.024402f, 0.003959f, 0.014572f, 0.046755f, 0.018582f, -0.028577f, 0.025379f, -0.025907f, -0.005588f, -0.035581f, -0.046663f, -0.005505f, 0.012209f, 0.012136f, 0.009010f, 0.011407f, -0.004005f, -0.032307f, -0.012112f, 0.009688f, 0.010398f, -0.017463f, 0.034969f, 0.021731f, -0.021544f, 0.010957f, 0.017220f, 0.006047f, 0.000704f, -0.020482f, -0.002797f, -0.014749f, -0.008456f, 0.000847f, 0.021616f, - 0.053419f, -0.015207f, 0.003553f, 0.007721f, 0.018820f, -0.019903f, 0.067585f, -0.006298f, 0.004755f, 0.005522f, -0.033668f, -0.031095f, -0.052274f, -0.021342f, 0.024483f, -0.009665f, 0.010545f, 0.011021f, 0.044084f, 0.007747f, 0.004339f, 0.002849f, 0.032620f, 0.018855f, -0.021714f, 0.036050f, -0.038538f, 0.009998f, -0.009600f, -0.035191f, 0.019683f, 0.010250f, 0.024338f, -0.005917f, -0.055109f, 0.005161f, -0.037027f, -0.031706f, 0.009409f, 0.008712f, 0.015063f, -0.008525f, 0.010851f, -0.000878f, -0.018789f, 0.030954f, -0.004815f, -0.008688f, -0.011882f, -0.019676f, -0.017808f, 0.012187f, -0.022409f, 0.006931f, -0.014191f, -0.008470f, -0.005896f, 0.030826f, -0.005319f, 0.033053f, 0.020152f, -0.006531f, 0.011020f, 0.012666f, 0.022996f, -0.013537f, -0.020299f, 0.005134f, 0.014008f, 0.019199f, 0.030432f, -0.030373f, -0.030492f, 0.015775f, 0.011686f, 0.038704f, -0.016611f, -0.000145f, 0.019487f, 0.002671f, 0.006631f, -0.004036f, 0.025505f, 0.032692f, 0.015583f, -0.000872f, 0.020793f, 0.065760f, -0.011656f, -0.015083f, 0.025672f, 0.000792f, 0.039211f, 0.012331f, 0.019898f, 0.024332f, - -0.003648f, 0.018299f, 0.045695f, -0.007591f, -0.047259f, 0.039770f, 0.014570f, -0.013496f, 0.010393f, -0.068165f, -0.029284f, -0.005469f, 0.055602f, 0.021581f, -0.062544f, 0.006457f, -0.007952f, 0.001871f, 0.014996f, -0.007108f, -0.030126f, 0.000958f, -0.001066f, 0.026006f, 0.062106f, -0.013310f, 0.022991f, 0.034372f, 0.002751f, -0.014381f, -0.005248f, 0.011421f, 0.062327f, -0.004802f, 0.000689f, 0.043867f, -0.014533f, 0.009229f, 0.004992f, -0.004327f, -0.007418f, 0.014341f, -0.047904f, -0.001838f, 0.021941f, 0.035237f, 0.046437f, -0.037320f, 0.006836f, 0.033764f, 0.003281f, 0.065816f, -0.019463f, -0.037316f, 0.010461f, 0.046906f, 0.014841f, -0.041981f, -0.011978f, 0.008078f, 0.006167f, 0.018513f, -0.049735f, 0.003481f, 0.009247f, -0.015185f, -0.033843f, -0.039649f, 0.016831f, -0.014537f, 0.005006f, -0.001608f, -0.034622f, -0.048337f, 0.017724f, 0.003037f, -0.036312f, -0.019443f, -0.019972f, 0.021680f, -0.061142f, -0.031995f, 0.034481f, -0.049049f, 0.036514f, -0.014579f, 0.034800f, 0.002840f, 0.018019f, -0.036414f, -0.005707f, -0.034301f, 0.036188f, 0.020139f, 0.048206f, 0.038819f, - -0.020818f, 0.009810f, 0.037516f, 0.023630f, 0.017762f, 0.016110f, -0.036915f, -0.006780f, 0.014091f, 0.005730f, 0.017139f, -0.040558f, -0.035074f, 0.022786f, 0.062587f, 0.011995f, -0.024312f, 0.044384f, 0.009035f, 0.028940f, 0.004095f, 0.008227f, -0.039588f, -0.034327f, -0.002080f, 0.003863f, -0.067289f, 0.008491f, -0.016031f, -0.000016f, 0.017630f, -0.021843f, 0.012624f, 0.054070f, 0.002487f, -0.079216f, -0.062288f, -0.006221f, -0.021196f, -0.017033f, -0.003568f, 0.018618f, 0.010089f, -0.016624f, 0.019829f, 0.025426f, 0.016527f, -0.008985f, 0.013687f, -0.005425f, -0.024881f, -0.001058f, 0.015377f, -0.057491f, -0.017832f, -0.023457f, -0.036184f, -0.008131f, 0.004268f, -0.011304f, -0.006678f, 0.073637f, 0.032720f, -0.019229f, -0.007512f, 0.014174f, 0.026392f, -0.036799f, -0.009662f, -0.015460f, 0.009598f, 0.077625f, 0.011986f, -0.037825f, 0.009845f, 0.034451f, -0.007547f, 0.032220f, 0.040472f, -0.020702f, 0.009440f, 0.020833f, 0.013859f, 0.001226f, -0.006120f, -0.012254f, 0.005958f, 0.024457f, 0.012352f, 0.022873f, -0.033823f, -0.051681f, -0.005567f, 0.023583f, 0.020471f, 0.017042f, - -0.005892f, -0.047628f, 0.015528f, 0.011033f, 0.072007f, 0.075995f, 0.018099f, -0.055861f, 0.040865f, -0.021028f, -0.057284f, -0.013043f, -0.067790f, -0.051443f, -0.022587f, -0.024582f, -0.052420f, 0.009587f, -0.020868f, -0.060035f, -0.054833f, 0.016355f, 0.036412f, -0.005553f, -0.046094f, 0.014230f, 0.001985f, 0.015279f, 0.030105f, 0.028964f, -0.035304f, 0.046925f, 0.032919f, 0.004372f, 0.013868f, 0.032721f, -0.000601f, 0.085103f, -0.059286f, -0.028620f, -0.000757f, -0.068665f, 0.057896f, 0.004535f, 0.072066f, 0.021570f, 0.017115f, 0.024305f, -0.035988f, 0.008260f, -0.073547f, -0.022013f, -0.002891f, -0.020117f, 0.084466f, 0.024481f, -0.020115f, -0.053482f, -0.024451f, -0.022910f, -0.030983f, -0.025660f, 0.014597f, -0.077311f, -0.014323f, 0.054157f, -0.004545f, -0.007727f, -0.055834f, 0.053786f, 0.029522f, -0.000211f, -0.019779f, 0.022099f, 0.013925f, -0.014637f, 0.027522f, -0.040585f, -0.008023f, -0.021434f, 0.013655f, -0.010585f, -0.022165f, 0.026558f, -0.018463f, 0.010224f, 0.003464f, -0.039501f, -0.020940f, -0.007424f, -0.044760f, -0.048248f, -0.059633f, -0.017697f, 0.031760f, -0.022594f, - -0.008280f, 0.034475f, -0.040713f, -0.037896f, 0.042516f, -0.002079f, 0.001405f, 0.033293f, 0.004388f, -0.032052f, -0.013164f, 0.009740f, 0.029825f, -0.041176f, -0.007461f, 0.044729f, 0.025617f, 0.042730f, 0.029385f, -0.012729f, 0.030514f, -0.005940f, -0.054245f, 0.014128f, -0.037371f, 0.026173f, -0.012116f, -0.022279f, 0.057225f, 0.018944f, 0.002915f, 0.006160f, -0.013881f, 0.021661f, 0.035633f, 0.087381f, 0.077806f, 0.005993f, -0.032955f, 0.015032f, 0.045524f, 0.012139f, 0.035479f, 0.024327f, 0.017684f, -0.026656f, -0.032541f, -0.040807f, -0.001814f, 0.014473f, 0.029382f, 0.056748f, 0.031302f, 0.036261f, 0.022377f, 0.033624f, 0.018223f, 0.032412f, -0.020811f, 0.005861f, 0.062938f, -0.001938f, 0.048685f, 0.012381f, 0.039599f, -0.061240f, -0.008799f, -0.018129f, -0.016847f, 0.014166f, 0.024937f, 0.044209f, 0.072709f, 0.059980f, -0.020062f, 0.010771f, -0.078257f, 0.019511f, 0.019492f, 0.070306f, -0.054442f, 0.044686f, -0.013238f, -0.038468f, 0.031106f, 0.009919f, 0.026161f, 0.044728f, -0.013058f, -0.055045f, 0.030269f, -0.034686f, -0.048311f, -0.021695f, 0.067433f, -0.055043f, - -0.080387f, -0.037737f, -0.012154f, 0.048345f, -0.002495f, -0.019590f, -0.049084f, -0.010040f, 0.010128f, 0.009070f, 0.056166f, -0.018450f, -0.060374f, 0.003241f, -0.024821f, -0.088524f, -0.043554f, 0.113487f, 0.016639f, -0.052996f, -0.056306f, 0.005126f, 0.001501f, 0.022345f, 0.030190f, -0.041492f, -0.026264f, -0.065423f, 0.015192f, -0.024723f, -0.015127f, 0.096176f, 0.021153f, -0.015166f, -0.100811f, -0.008228f, -0.053864f, 0.051619f, 0.065894f, 0.005067f, 0.051168f, -0.062380f, -0.024025f, -0.040196f, -0.009356f, 0.097753f, 0.123891f, 0.017696f, -0.033730f, -0.046649f, -0.090426f, -0.001110f, 0.010822f, 0.106095f, 0.059633f, -0.018398f, -0.179508f, -0.095064f, 0.014096f, -0.019890f, 0.155249f, 0.049641f, -0.076901f, -0.034314f, -0.136223f, -0.045664f, 0.002481f, 0.084499f, 0.088011f, 0.098230f, 0.001809f, 0.020398f, -0.014273f, 0.004852f, 0.120890f, -0.050380f, 0.086771f, -0.026774f, -0.100801f, -0.033170f, -0.108363f, -0.037613f, 0.119428f, 0.053030f, -0.080060f, 0.088667f, -0.000485f, -0.022525f, -0.137657f, -0.036486f, -0.037738f, -0.061477f, 0.131786f, 0.001670f, 0.058541f, -0.090452f, - 0.049404f, 0.042365f, -0.041754f, 0.026570f, -0.008866f, 0.023679f, -0.001094f, 0.067718f, 0.022827f, -0.066011f, 0.038566f, 0.032520f, -0.001453f, 0.045436f, -0.035147f, -0.017844f, 0.056149f, 0.039748f, 0.036904f, 0.018480f, 0.031885f, -0.099946f, 0.085115f, -0.050641f, -0.033197f, 0.017985f, -0.071113f, 0.100536f, -0.030502f, 0.009004f, 0.071732f, 0.001257f, -0.012852f, 0.038467f, 0.039072f, 0.070351f, -0.019310f, -0.068515f, -0.069832f, 0.005651f, -0.026380f, 0.029422f, -0.042986f, -0.022344f, -0.029709f, 0.017805f, -0.129728f, -0.000749f, 0.093082f, 0.023130f, 0.036797f, -0.007075f, -0.012302f, 0.021101f, -0.035602f, -0.043052f, 0.021983f, 0.008184f, -0.043489f, -0.052096f, 0.174234f, -0.025962f, -0.059838f, 0.007428f, 0.076189f, -0.015600f, 0.021981f, -0.064786f, 0.020611f, 0.111261f, 0.165991f, -0.071722f, 0.051440f, -0.108839f, -0.037045f, -0.065117f, -0.013410f, 0.107433f, 0.106541f, 0.091004f, -0.007059f, -0.067363f, -0.046897f, 0.041088f, -0.001628f, 0.021928f, 0.053263f, 0.001583f, 0.024086f, -0.071111f, -0.023628f, -0.040147f, -0.056855f, 0.030855f, 0.018645f, 0.003887f, - 0.046693f, -0.041887f, -0.006925f, 0.013780f, -0.067620f, 0.000275f, -0.001272f, -0.037389f, -0.020611f, 0.016517f, -0.032187f, 0.060192f, -0.025257f, 0.090202f, 0.060727f, -0.042238f, -0.018762f, -0.059400f, -0.076129f, -0.088933f, 0.021899f, 0.042643f, 0.113322f, 0.092847f, 0.035499f, 0.059207f, 0.003454f, -0.065727f, -0.051940f, -0.036702f, -0.053620f, -0.009304f, 0.016452f, -0.002333f, -0.040381f, 0.007977f, -0.041226f, 0.019362f, 0.034314f, 0.008184f, -0.058266f, 0.035847f, -0.034973f, -0.024525f, -0.060760f, 0.025150f, 0.007222f, -0.015814f, -0.180633f, -0.109094f, -0.057057f, 0.104390f, 0.054899f, 0.281190f, 0.271049f, 0.273742f, 0.283744f, 0.297410f, 0.216224f, 0.110277f, 0.166270f, 0.097039f, -0.038413f, -0.085083f, -0.125865f, -0.259914f, -0.226969f, -0.241778f, -0.167200f, -0.175632f, -0.121977f, -0.105052f, -0.046164f, 0.012983f, -0.090494f, -0.045463f, -0.006932f, -0.007628f, -0.040772f, 0.024400f, 0.087214f, 0.090118f, 0.047223f, 0.105612f, 0.137933f, 0.042745f, 0.043444f, 0.038058f, 0.138279f, 0.137773f, 0.176481f, 0.189554f, 0.174782f, 0.189927f, 0.285391f, 0.125876f, - 0.230086f, 0.299229f, 0.207044f, 0.234554f, 0.196226f, 0.109395f, 0.131888f, 0.138304f, 0.132696f, 0.163818f, 0.168312f, 0.115760f, 0.057222f, 0.078861f, 0.121611f, 0.038212f, 0.058055f, 0.011214f, 0.011673f, -0.076510f, 0.001210f, -0.164742f, -0.217036f, -0.156574f, -0.182559f, -0.269015f, -0.250893f, -0.100229f, -0.216787f, -0.071574f, -0.002868f}, - {0.001179f, -0.003749f, 0.000733f, -0.006434f, -0.004977f, -0.005543f, -0.006417f, -0.009856f, 0.004853f, 0.004520f, -0.004912f, 0.001095f, 0.007372f, 0.011841f, 0.004193f, 0.004818f, -0.002918f, 0.001317f, -0.018047f, 0.005390f, 0.000557f, -0.002582f, 0.005158f, -0.001749f, -0.006756f, 0.006248f, 0.002276f, 0.002484f, 0.004613f, 0.006177f, 0.006304f, -0.000161f, -0.008053f, -0.000363f, 0.008457f, 0.008883f, 0.011530f, -0.002710f, 0.011290f, 0.000224f, -0.000624f, -0.003718f, -0.000514f, 0.006259f, 0.002384f, -0.018482f, -0.006185f, -0.010821f, -0.000517f, -0.000721f, -0.007086f, -0.008343f, -0.006372f, 0.002100f, -0.006131f, 0.003733f, 0.005867f, 0.006457f, -0.008435f, -0.004293f, -0.009543f, -0.005564f, -0.002692f, 0.000615f, -0.009041f, 0.009109f, 0.003668f, -0.004086f, -0.000191f, -0.001681f, 0.015651f, 0.003649f, -0.001411f, -0.004674f, 0.019623f, 0.001500f, -0.001780f, -0.000248f, -0.002036f, -0.009836f, -0.010895f, 0.010421f, 0.001928f, -0.005531f, -0.009584f, -0.003953f, -0.007366f, -0.011437f, 0.014692f, 0.002266f, 0.005004f, 0.007996f, 0.021367f, -0.000135f, 0.002983f, -0.004845f, - -0.002462f, -0.003630f, -0.014781f, 0.003605f, -0.004895f, 0.001831f, 0.009364f, -0.003489f, -0.001527f, 0.002582f, 0.000485f, -0.001928f, -0.000110f, -0.012740f, 0.002147f, 0.000117f, -0.005324f, 0.004556f, 0.001279f, -0.008422f, 0.013366f, 0.000940f, 0.001372f, 0.013476f, -0.005711f, -0.005158f, -0.013510f, -0.006027f, 0.008174f, 0.001048f, 0.008740f, -0.004122f, -0.011233f, 0.005096f, -0.010543f, -0.003826f, -0.019672f, 0.008350f, 0.005798f, 0.004648f, 0.004842f, 0.013629f, 0.002481f, -0.004961f, 0.006070f, 0.011580f, -0.008019f, 0.006263f, -0.001079f, -0.001163f, -0.004777f, -0.001500f, 0.006002f, 0.000498f, 0.002531f, -0.007799f, 0.001982f, -0.004781f, -0.010237f, -0.000856f, -0.012070f, -0.014302f, -0.009299f, -0.006798f, -0.016104f, 0.000742f, -0.005949f, -0.003109f, 0.004682f, 0.017030f, 0.001332f, -0.003955f, -0.002171f, 0.002786f, -0.000566f, 0.007090f, 0.011788f, -0.000979f, 0.013258f, -0.001529f, -0.001141f, -0.001603f, 0.007429f, -0.010169f, 0.001311f, 0.001221f, -0.002778f, -0.000607f, -0.006363f, -0.010148f, 0.013588f, -0.004783f, -0.001339f, -0.002550f, 0.005813f, -0.006698f, - -0.006007f, 0.002307f, 0.001729f, 0.009567f, -0.006993f, 0.007832f, -0.005017f, -0.008180f, -0.000989f, -0.003513f, 0.001803f, 0.004115f, -0.000551f, 0.005377f, 0.002301f, 0.003808f, -0.005750f, -0.006644f, -0.010830f, -0.008062f, 0.000562f, 0.011987f, 0.001147f, 0.009580f, 0.002192f, -0.005816f, 0.006516f, 0.002585f, -0.007943f, 0.012316f, 0.001780f, -0.013458f, -0.014959f, -0.012912f, 0.002598f, 0.001697f, 0.010812f, -0.008274f, 0.011141f, -0.005525f, -0.002709f, -0.017542f, -0.001316f, 0.001404f, -0.006265f, -0.000833f, 0.009379f, 0.009228f, 0.013359f, -0.003054f, -0.002191f, 0.008675f, 0.003838f, 0.007826f, -0.018422f, 0.018413f, -0.004002f, 0.000022f, 0.002800f, -0.001934f, -0.000204f, -0.001331f, -0.001299f, 0.011565f, -0.000358f, 0.015100f, -0.002555f, -0.005727f, -0.012289f, 0.001776f, -0.005542f, -0.004525f, 0.008548f, 0.006940f, 0.008958f, 0.000681f, 0.001196f, -0.012695f, -0.009324f, 0.000276f, 0.012073f, 0.004561f, -0.001357f, 0.004449f, -0.004759f, 0.013180f, -0.000434f, -0.010463f, -0.013639f, -0.004441f, 0.015932f, 0.012351f, 0.012425f, 0.006195f, 0.000881f, -0.012424f, - -0.005350f, -0.001168f, -0.007087f, 0.008776f, -0.000747f, -0.002873f, 0.007595f, -0.017752f, 0.006374f, -0.001464f, 0.005322f, -0.000490f, 0.004239f, -0.004723f, -0.007586f, -0.001865f, -0.005766f, 0.002335f, 0.010652f, 0.003437f, 0.000854f, -0.004684f, -0.023108f, -0.016109f, -0.000023f, 0.006272f, 0.008747f, -0.000090f, 0.002147f, -0.003905f, 0.008668f, 0.003049f, 0.007036f, -0.010877f, 0.010221f, 0.005003f, -0.010627f, 0.003549f, 0.010631f, -0.001174f, 0.003746f, 0.001031f, 0.009678f, -0.007804f, 0.005927f, -0.001581f, -0.000792f, -0.009477f, 0.000990f, 0.008774f, -0.005573f, -0.005042f, -0.007812f, 0.010388f, -0.000633f, 0.001449f, -0.008240f, -0.025497f, -0.006771f, 0.002901f, 0.002741f, 0.008398f, -0.006131f, -0.004847f, -0.003292f, -0.002452f, -0.007489f, -0.000571f, -0.006704f, 0.015390f, 0.006213f, 0.012370f, -0.012891f, -0.003548f, -0.005017f, 0.011468f, -0.003197f, -0.003272f, -0.009700f, 0.005378f, 0.000483f, -0.007999f, 0.011362f, 0.002105f, 0.002241f, 0.010840f, 0.003819f, 0.006523f, -0.005186f, 0.004110f, 0.000453f, -0.002789f, 0.011252f, 0.008439f, -0.000817f, -0.015363f, - -0.020341f, -0.015844f, 0.005868f, -0.000088f, -0.008774f, -0.002400f, 0.001056f, -0.002112f, 0.022952f, 0.003849f, -0.016561f, -0.004521f, -0.004949f, 0.000716f, -0.007804f, 0.012853f, -0.009706f, -0.012830f, 0.011858f, -0.005117f, 0.003236f, 0.003029f, -0.005465f, -0.015087f, 0.001953f, -0.008099f, -0.007092f, -0.007453f, -0.000971f, 0.011521f, -0.001676f, -0.002764f, 0.017137f, 0.003038f, 0.002552f, -0.022325f, -0.002572f, 0.011734f, 0.013764f, -0.007773f, 0.003651f, 0.001803f, -0.022035f, -0.003014f, -0.001473f, -0.002300f, 0.005383f, 0.000202f, -0.012439f, 0.001582f, -0.009981f, 0.009439f, -0.003499f, 0.012190f, 0.002268f, -0.013807f, 0.006027f, 0.026323f, -0.010269f, 0.000531f, -0.019549f, 0.005179f, 0.016400f, -0.028653f, 0.004418f, -0.000950f, -0.001749f, 0.019254f, 0.002821f, 0.008407f, 0.014283f, -0.017578f, -0.004916f, -0.013526f, 0.006927f, 0.007157f, 0.015442f, 0.028804f, 0.004921f, -0.022786f, -0.001785f, -0.006095f, -0.002026f, -0.010150f, 0.000312f, -0.001592f, 0.011327f, 0.008279f, 0.003459f, -0.001333f, 0.000685f, -0.003994f, -0.002324f, 0.012102f, -0.003916f, -0.002285f, - 0.009679f, -0.001793f, 0.005777f, -0.001564f, 0.012241f, -0.009840f, -0.018052f, 0.022019f, -0.001172f, 0.004715f, -0.016908f, 0.000573f, -0.005047f, 0.024452f, 0.004097f, 0.010669f, -0.002256f, 0.009362f, 0.006912f, -0.023518f, -0.003479f, -0.013553f, -0.010889f, 0.000747f, 0.016140f, 0.001209f, -0.003133f, 0.024083f, -0.002552f, -0.014911f, -0.010663f, -0.008216f, 0.012307f, 0.036764f, 0.000005f, 0.009565f, 0.002784f, -0.012879f, -0.002549f, -0.000681f, 0.011247f, 0.016221f, 0.001639f, 0.012878f, 0.012275f, -0.023381f, 0.000530f, -0.007431f, -0.028322f, 0.005858f, -0.002195f, 0.009245f, 0.007135f, 0.026327f, 0.006196f, -0.005836f, 0.007240f, 0.019987f, 0.023671f, 0.008753f, 0.016903f, 0.015804f, -0.012028f, -0.010643f, -0.019964f, -0.023103f, 0.003232f, 0.008981f, -0.018173f, -0.014167f, -0.000239f, -0.022608f, -0.017383f, 0.008548f, 0.003754f, -0.010411f, -0.005681f, -0.015049f, 0.012762f, 0.008070f, 0.020465f, 0.036693f, -0.003318f, -0.011236f, -0.003157f, -0.019047f, 0.000619f, -0.014977f, -0.015026f, 0.018507f, 0.003033f, 0.002009f, -0.023733f, 0.024776f, 0.005911f, -0.016426f, - -0.004211f, 0.012468f, 0.001755f, 0.002237f, 0.000453f, 0.001540f, 0.008323f, -0.012689f, 0.015109f, -0.000251f, -0.009072f, -0.003339f, -0.016185f, 0.002125f, -0.016637f, -0.016091f, 0.014378f, 0.013414f, -0.013044f, -0.022627f, 0.006557f, -0.011072f, -0.000713f, -0.006164f, 0.008298f, -0.006330f, 0.010537f, -0.010912f, -0.012262f, 0.014786f, -0.004669f, -0.003297f, 0.008299f, -0.012043f, -0.012992f, 0.014912f, 0.019587f, 0.000476f, -0.001353f, 0.006824f, -0.017135f, 0.029122f, -0.017933f, 0.002241f, 0.013729f, -0.006454f, 0.012805f, 0.015773f, 0.005023f, -0.016282f, 0.017573f, -0.002502f, 0.006531f, -0.012738f, -0.002523f, -0.024346f, 0.008314f, -0.014411f, 0.005504f, -0.025065f, 0.014694f, -0.018289f, -0.012954f, 0.010666f, 0.014518f, 0.005038f, 0.001538f, 0.000732f, -0.015912f, -0.014581f, -0.009457f, 0.038451f, 0.020978f, -0.005923f, -0.035576f, -0.004910f, 0.009939f, 0.020766f, -0.011740f, 0.001764f, -0.024583f, -0.008371f, -0.003067f, 0.006436f, 0.003575f, -0.005479f, -0.000460f, 0.010778f, -0.012159f, -0.000692f, -0.013850f, 0.007481f, 0.009060f, 0.026394f, 0.011252f, -0.013012f, - 0.005460f, -0.007350f, -0.020041f, -0.002731f, 0.011485f, 0.001566f, 0.032705f, -0.024869f, -0.004147f, 0.005573f, 0.014469f, 0.007632f, 0.019006f, 0.003896f, -0.023787f, 0.015153f, -0.020223f, -0.020784f, 0.000043f, -0.001631f, 0.015482f, 0.020218f, 0.017760f, 0.027011f, 0.005928f, -0.027393f, 0.029595f, 0.016739f, -0.012885f, 0.023450f, -0.003701f, 0.003005f, -0.021127f, -0.006913f, -0.006636f, -0.008920f, 0.018721f, -0.032657f, -0.008223f, -0.015309f, -0.015483f, 0.002770f, 0.014913f, -0.007437f, -0.019829f, -0.020040f, -0.027080f, -0.026415f, -0.014420f, -0.004525f, 0.010346f, -0.020789f, -0.027970f, -0.015971f, -0.007918f, -0.013306f, -0.010021f, 0.023268f, -0.014430f, 0.002022f, 0.011096f, -0.021460f, -0.014026f, -0.014573f, 0.021578f, -0.010139f, 0.013448f, 0.032692f, -0.004884f, 0.007008f, 0.001445f, -0.010599f, -0.015186f, -0.009632f, 0.013559f, -0.002988f, 0.015670f, 0.000271f, 0.011140f, 0.002128f, -0.025132f, 0.026746f, -0.014229f, -0.005527f, 0.045349f, 0.031051f, 0.020010f, -0.014008f, -0.035197f, -0.007561f, 0.019069f, -0.030386f, -0.018856f, 0.002189f, 0.023648f, 0.019572f, - 0.013145f, -0.016901f, 0.012542f, -0.003361f, 0.012545f, -0.002017f, 0.034868f, 0.023410f, -0.003194f, -0.031680f, -0.004831f, 0.026998f, 0.020128f, 0.002627f, 0.042590f, 0.021646f, -0.010217f, 0.001764f, 0.001661f, -0.003392f, -0.013653f, -0.015097f, -0.004035f, -0.045682f, 0.012101f, -0.014410f, 0.000888f, 0.000262f, 0.011043f, 0.019665f, -0.000932f, 0.006721f, -0.022606f, 0.017176f, -0.009103f, 0.033584f, -0.000680f, 0.006643f, -0.078117f, -0.001103f, 0.019039f, 0.012815f, 0.020325f, -0.005158f, -0.022942f, 0.014302f, 0.002676f, -0.015158f, 0.015232f, 0.005906f, -0.018421f, 0.002838f, -0.000877f, 0.008563f, -0.007852f, -0.025299f, -0.029853f, 0.001744f, -0.011919f, 0.012482f, 0.008038f, 0.007453f, 0.008646f, -0.030505f, -0.013251f, -0.031998f, -0.052415f, 0.008796f, 0.017711f, 0.019147f, 0.000152f, 0.043725f, -0.031045f, 0.010624f, 0.005687f, -0.008275f, -0.027532f, -0.010981f, -0.015719f, 0.018911f, -0.008207f, -0.016245f, -0.027928f, -0.001958f, -0.010367f, -0.004672f, -0.021031f, 0.011855f, -0.001340f, -0.009116f, 0.011307f, 0.015114f, 0.017067f, -0.021336f, 0.040455f, 0.003253f, - -0.005685f, -0.023965f, -0.023150f, -0.003871f, -0.002859f, -0.023280f, -0.024965f, -0.018404f, 0.016554f, -0.010220f, 0.027308f, 0.009668f, 0.045391f, 0.016521f, 0.017534f, -0.004643f, 0.024641f, -0.003012f, 0.006388f, 0.035437f, -0.009766f, 0.013716f, -0.040376f, -0.050964f, 0.012237f, -0.001011f, -0.032303f, 0.003626f, 0.001862f, -0.043523f, 0.013892f, -0.011533f, -0.007604f, -0.015730f, 0.018576f, -0.014404f, 0.002703f, 0.000468f, 0.010289f, 0.002595f, -0.022249f, 0.017417f, -0.000478f, 0.009213f, -0.027054f, -0.038055f, -0.024151f, 0.008466f, 0.031558f, 0.041393f, -0.001319f, 0.010991f, 0.025931f, 0.021367f, -0.002432f, -0.052770f, 0.035754f, -0.003732f, 0.009477f, -0.010974f, 0.018094f, -0.001601f, -0.023213f, 0.006053f, 0.040942f, 0.005916f, -0.027716f, 0.023467f, 0.016549f, 0.010653f, -0.021070f, 0.021411f, 0.015676f, 0.001234f, 0.025613f, -0.011284f, 0.006284f, 0.041546f, 0.030100f, 0.000298f, 0.008923f, 0.019791f, -0.040939f, -0.009210f, -0.003511f, -0.007498f, -0.036074f, 0.007644f, 0.009557f, 0.000568f, -0.028290f, -0.002002f, -0.047697f, 0.000779f, -0.034455f, -0.008438f, - 0.015909f, -0.016218f, -0.021414f, -0.018391f, 0.008568f, 0.005746f, -0.019938f, 0.004765f, -0.008105f, 0.020118f, -0.013381f, -0.016602f, 0.010503f, 0.018031f, -0.003560f, 0.005561f, 0.006787f, -0.055061f, -0.002675f, -0.008490f, -0.027387f, -0.002711f, 0.031748f, 0.003813f, -0.010368f, -0.011666f, 0.024037f, 0.006308f, 0.018049f, -0.044383f, 0.017619f, -0.046031f, -0.059374f, -0.034813f, 0.000270f, -0.029374f, 0.028602f, -0.007470f, -0.040607f, 0.000881f, -0.011911f, 0.007414f, 0.005047f, -0.006775f, -0.007082f, 0.027582f, -0.009686f, 0.011896f, -0.015934f, -0.011547f, 0.038280f, -0.011365f, -0.006730f, 0.001028f, 0.007114f, 0.027136f, -0.052781f, -0.001174f, 0.025078f, 0.028479f, 0.022509f, 0.005517f, -0.011252f, 0.054443f, 0.015631f, 0.018725f, 0.018312f, 0.011560f, -0.009406f, 0.002664f, 0.028674f, 0.012238f, -0.023762f, 0.013799f, 0.054524f, -0.027561f, 0.037049f, 0.016650f, -0.061772f, 0.016772f, 0.038059f, -0.002040f, 0.015984f, 0.002087f, -0.047338f, 0.025180f, 0.054275f, 0.005473f, 0.036222f, -0.020954f, 0.031773f, 0.030273f, -0.003088f, -0.002912f, 0.028889f, 0.018566f, - -0.043255f, 0.042877f, -0.012576f, -0.007585f, 0.022158f, -0.010565f, -0.017833f, -0.017327f, 0.001977f, 0.002221f, -0.017134f, -0.033171f, 0.078283f, 0.037251f, -0.089110f, -0.038132f, 0.010577f, -0.015920f, 0.027053f, 0.029671f, 0.033915f, 0.036645f, -0.022079f, 0.070302f, -0.009685f, 0.000827f, -0.022280f, 0.025889f, 0.036853f, -0.026766f, -0.028354f, -0.007161f, -0.015866f, 0.002198f, 0.015367f, 0.001235f, -0.017420f, -0.007970f, 0.030468f, -0.003311f, 0.015960f, 0.002608f, 0.036463f, 0.051964f, 0.021238f, -0.026432f, -0.058471f, -0.005983f, -0.008939f, 0.005732f, -0.012602f, 0.018690f, 0.034280f, 0.001999f, -0.011017f, -0.028246f, 0.066462f, 0.056019f, -0.006292f, 0.026834f, -0.014228f, -0.021855f, -0.061501f, 0.033696f, -0.027981f, -0.007789f, -0.000533f, -0.020676f, 0.012364f, 0.037528f, 0.007272f, -0.018085f, 0.019689f, -0.008948f, -0.024556f, 0.038373f, 0.009370f, -0.055757f, 0.071377f, -0.048547f, -0.024174f, 0.026005f, 0.028933f, 0.022209f, 0.001311f, -0.024431f, 0.002375f, 0.036031f, 0.010184f, -0.047724f, -0.039015f, -0.008708f, 0.060070f, 0.006905f, -0.029231f, -0.077214f, - -0.021866f, -0.002860f, 0.018313f, 0.054299f, 0.040915f, -0.004973f, 0.000410f, 0.036049f, 0.028624f, 0.002178f, 0.007839f, -0.104169f, -0.066227f, -0.031350f, -0.051860f, 0.005481f, -0.028874f, 0.047499f, -0.010528f, -0.002589f, -0.000078f, -0.017623f, -0.021195f, 0.034828f, 0.021206f, 0.013110f, -0.004515f, -0.014808f, -0.014088f, 0.018058f, -0.037336f, -0.012784f, 0.006999f, -0.011685f, -0.017967f, 0.017112f, -0.054020f, -0.074686f, 0.018528f, 0.025288f, 0.029993f, -0.042926f, -0.023180f, 0.026195f, 0.009826f, -0.072616f, -0.064699f, 0.005600f, -0.031049f, -0.030977f, 0.012645f, -0.058295f, 0.030935f, -0.021531f, 0.025507f, 0.025635f, -0.014388f, -0.032226f, -0.077619f, -0.025935f, -0.022973f, 0.045043f, -0.037328f, -0.023992f, 0.014269f, 0.031735f, 0.041788f, -0.006010f, -0.057936f, 0.026735f, -0.009283f, -0.023035f, -0.050008f, 0.015573f, 0.020444f, -0.072291f, 0.026999f, 0.026877f, 0.065378f, 0.006855f, -0.017112f, 0.004981f, -0.081292f, -0.022556f, -0.010332f, 0.001950f, 0.014286f, -0.026707f, 0.049025f, 0.020707f, 0.060738f, -0.011407f, 0.053405f, 0.035415f, 0.020901f, 0.049894f, - 0.024491f, 0.033195f, 0.041366f, 0.002629f, -0.054833f, -0.050706f, 0.010250f, 0.059682f, 0.042368f, -0.077831f, -0.002433f, -0.012648f, -0.011174f, -0.007644f, -0.054499f, 0.014471f, -0.038806f, 0.035344f, -0.025935f, 0.079085f, -0.020670f, -0.112655f, -0.011937f, -0.038769f, 0.022564f, 0.016768f, 0.032302f, 0.073108f, 0.016526f, -0.010352f, 0.040272f, -0.024358f, 0.081996f, 0.012771f, 0.054808f, 0.024293f, 0.004847f, -0.022839f, -0.019247f, 0.131443f, -0.000241f, -0.097074f, -0.020835f, 0.067494f, -0.049110f, -0.002185f, 0.037839f, 0.015094f, -0.076022f, -0.029819f, -0.086521f, 0.012189f, 0.077437f, -0.057822f, -0.052610f, 0.049501f, 0.024281f, -0.088288f, -0.082053f, 0.024948f, 0.004587f, 0.010538f, 0.028177f, -0.005082f, -0.024687f, -0.014323f, 0.052584f, -0.039532f, 0.064846f, 0.008643f, -0.015467f, 0.011838f, 0.037201f, -0.002291f, -0.011697f, -0.071830f, -0.031088f, 0.005334f, -0.037950f, 0.029649f, 0.047248f, 0.000827f, 0.007040f, -0.052543f, 0.058310f, -0.023765f, -0.027707f, 0.045326f, -0.019915f, -0.003142f, -0.036185f, -0.006949f, -0.026038f, -0.089158f, 0.027559f, -0.013412f, - 0.061594f, 0.077491f, -0.003394f, -0.018888f, -0.054122f, -0.020967f, -0.017074f, 0.072643f, -0.076753f, -0.057444f, -0.125601f, -0.002959f, -0.054324f, 0.007653f, 0.038272f, -0.029967f, -0.011118f, 0.075436f, 0.048333f, 0.028835f, 0.000090f, -0.007174f, 0.055337f, -0.082530f, -0.013593f, -0.000156f, -0.013916f, 0.010025f, 0.070160f, -0.050300f, 0.014722f, -0.014356f, -0.030765f, -0.021423f, 0.108329f, -0.010597f, 0.051083f, -0.040078f, 0.072641f, -0.022057f, -0.002960f, 0.045974f, 0.040271f, 0.110531f, 0.001023f, 0.022015f, 0.011545f, -0.040217f, 0.050687f, 0.021736f, -0.036066f, 0.058128f, -0.026173f, 0.072007f, 0.047382f, -0.010888f, 0.040754f, 0.007107f, 0.037827f, 0.013485f, 0.066834f, -0.037950f, 0.031493f, -0.066119f, -0.021565f, 0.029298f, 0.072858f, 0.002057f, 0.002569f, 0.038463f, -0.003825f, -0.020204f, -0.095650f, -0.051260f, 0.012260f, -0.033769f, -0.005192f, 0.034984f, -0.083675f, 0.055114f, -0.006865f, 0.064517f, -0.031085f, -0.048422f, -0.012748f, 0.157290f, 0.031142f, -0.130948f, 0.021158f, 0.041461f, 0.005650f, 0.155990f, -0.011773f, -0.103635f, 0.111718f, -0.032286f, - -0.009554f, 0.130729f, -0.015144f, 0.086385f, 0.012214f, -0.074840f, -0.000069f, 0.084444f, 0.010715f, 0.011594f, -0.003576f, -0.112156f, -0.006706f, 0.015625f, -0.039593f, -0.013486f, -0.114225f, 0.071952f, 0.114420f, -0.050991f, 0.017686f, -0.087239f, -0.248647f, -0.049388f, 0.013330f, 0.125602f, 0.108414f, -0.106035f, -0.091447f, -0.095445f, -0.075441f, -0.056016f, 0.067921f, -0.013057f, 0.147614f, 0.097220f, -0.027741f, -0.122368f, -0.300262f, -0.197095f, 0.015252f, 0.333384f, 0.256611f, 0.044950f, -0.129922f, -0.331644f, -0.336277f, -0.026486f, 0.198251f, 0.302310f, 0.335127f, 0.032341f, -0.106430f, -0.138730f, -0.179693f, -0.165385f, 0.012328f, 0.110359f, 0.211348f, 0.142030f, 0.116811f, -0.153294f, -0.183298f, -0.219709f, -0.259887f, 0.025971f, 0.313803f, 0.304732f, 0.063578f, -0.115319f, -0.292711f, -0.389242f, -0.129612f, 0.024494f, 0.143237f, 0.345056f, 0.129086f, -0.008023f, -0.194358f, -0.167356f, -0.068351f, 0.067833f, 0.133948f, 0.221768f, -0.029770f, 0.053867f, 0.041357f, -0.095012f, 0.000950f, 0.048804f, -0.039361f, 0.053923f, -0.002338f, -0.010009f, -0.004048f, 0.010751f, - 0.040853f, -0.016295f, 0.048147f, 0.032703f, 0.019445f, 0.021673f, 0.016330f, -0.004435f, -0.028006f, 0.044964f, -0.000952f, 0.027306f, -0.016834f, 0.024257f, -0.008856f, -0.003868f, 0.016273f, -0.022744f, -0.024061f, 0.003086f, -0.010639f, 0.036212f, 0.035674f, -0.033597f, 0.016010f, -0.020204f, 0.022188f, 0.000013f, 0.014343f, 0.005205f, 0.018768f, -0.024113f, 0.015721f, -0.027688f, -0.012471f, -0.004287f, -0.003768f, 0.021432f, -0.042185f, -0.008713f, -0.017849f, -0.037430f, -0.004012f, -0.015015f, 0.008082f, 0.034675f, -0.011301f, -0.049204f, 0.007128f, 0.029855f, 0.058366f, -0.002910f, 0.004602f, -0.032029f, -0.024668f, 0.027457f, 0.002189f, -0.010185f, 0.000802f, 0.048876f, 0.021779f, 0.016657f, 0.027421f, 0.047142f, -0.043715f, 0.006504f, 0.008624f, -0.032725f, 0.086625f, 0.154505f, 0.011097f, -0.097915f, 0.031553f, -0.005610f, 0.121774f, 0.060023f, 0.119663f, -0.009552f, -0.059734f, -0.013837f, 0.025024f, 0.052991f, 0.038034f, -0.020665f, 0.001967f, 0.023574f, 0.013795f, 0.050157f, -0.035727f, 0.010007f, -0.047500f, -0.005512f, -0.001325f, 0.013561f, 0.021756f, 0.007068f, - -0.021396f, 0.038845f, -0.005391f, -0.030825f, 0.042619f, -0.005760f, -0.017940f, 0.013715f, -0.008619f, 0.036602f, 0.053402f, 0.003251f, 0.012482f, -0.016729f, -0.013615f, 0.033963f, 0.021223f, 0.028475f, 0.003285f, -0.014865f, -0.036801f, -0.033764f, -0.040819f, 0.033119f, 0.032224f, 0.035557f, 0.048028f, 0.055627f, 0.021239f, 0.004999f, -0.048611f, 0.030896f, -0.006845f, -0.040092f, 0.050626f, -0.001396f, 0.032752f, 0.020676f, -0.054152f, 0.017372f, -0.017112f, 0.014426f, 0.034194f, 0.010482f, -0.044897f, -0.025863f, -0.025001f, -0.055092f, -0.119289f, 0.006824f, 0.167867f, 0.219102f, 0.190287f, 0.129010f, -0.004678f, 0.006432f, -0.095707f, -0.116595f, -0.192214f, -0.147657f, -0.154304f, -0.052211f, 0.013522f, 0.048298f, 0.085088f, 0.208096f, 0.175257f, 0.115485f, 0.038286f, -0.021083f, -0.076065f, -0.059296f, -0.079211f, -0.103372f, -0.056211f, -0.060468f, -0.071204f, -0.036069f, -0.047128f, 0.006603f, 0.032224f, 0.024211f, 0.088772f, 0.079102f, 0.072400f, 0.044192f, 0.054417f, 0.030957f, 0.065216f, 0.011785f, 0.056036f, -0.001955f, -0.016856f, -0.105333f, -0.045780f, -0.126273f, - -0.143206f, -0.162991f, -0.126150f, -0.098590f, -0.035845f, 0.017577f, 0.087236f, 0.089809f, 0.072315f, 0.149333f, 0.122645f, 0.127754f, 0.120767f, 0.108589f, 0.041507f, 0.066289f, -0.036817f, -0.086013f, -0.086524f, -0.198107f, -0.194814f, -0.193403f, -0.201778f, -0.173607f, -0.066686f, -0.045181f, 0.027364f, 0.086363f, 0.092905f, 0.039836f, 0.018707f} - }, - { - {-0.004040f, -0.000830f, 0.000613f, -0.001602f, -0.002829f, -0.007232f, 0.000901f, -0.001133f, -0.013391f, -0.001878f, -0.001526f, 0.004599f, 0.010737f, -0.009080f, 0.003944f, -0.005698f, 0.002421f, -0.007837f, 0.003986f, 0.002558f, -0.005622f, -0.005130f, -0.008498f, 0.003533f, -0.007983f, 0.001191f, 0.007008f, 0.004917f, 0.002149f, 0.003324f, 0.000517f, -0.007091f, 0.000305f, -0.004431f, 0.003582f, 0.002330f, 0.002731f, 0.011169f, 0.003600f, 0.001686f, -0.000240f, 0.003823f, -0.000111f, 0.003521f, -0.000878f, 0.007965f, 0.002757f, 0.003542f, 0.005998f, 0.013328f, 0.000654f, -0.002188f, 0.005334f, -0.004015f, -0.009282f, 0.004755f, -0.004256f, -0.007988f, 0.002086f, -0.002432f, 0.004401f, -0.002118f, -0.003564f, -0.006102f, 0.006329f, 0.002359f, -0.000370f, -0.005892f, -0.008228f, -0.002438f, -0.001872f, 0.001349f, -0.001025f, -0.000146f, 0.001309f, 0.002465f, 0.019262f, 0.010384f, -0.001251f, 0.006853f, 0.001600f, 0.001644f, -0.021281f, -0.009117f, -0.010582f, 0.008366f, -0.001217f, -0.006776f, 0.007430f, 0.007864f, 0.000435f, 0.007558f, -0.003179f, -0.000137f, -0.000505f, -0.004474f, - -0.002456f, -0.010063f, 0.005204f, -0.014934f, 0.006233f, -0.007728f, 0.006360f, 0.012103f, 0.005419f, -0.002149f, -0.003429f, 0.008982f, -0.001465f, 0.000546f, 0.008341f, -0.008833f, -0.000289f, -0.002895f, -0.005188f, 0.001241f, -0.001272f, 0.002000f, 0.008575f, 0.014292f, -0.004496f, 0.000403f, 0.011756f, 0.001043f, 0.003107f, -0.004175f, -0.006557f, -0.000815f, 0.002012f, -0.010944f, -0.002863f, 0.005954f, 0.000819f, 0.002248f, 0.003527f, -0.001442f, -0.003365f, -0.003134f, -0.003761f, 0.004433f, 0.003678f, -0.001917f, -0.006157f, -0.007708f, 0.004125f, 0.000152f, -0.006144f, 0.006882f, -0.001008f, -0.000505f, 0.001812f, 0.001738f, -0.001677f, -0.007037f, -0.001832f, -0.000025f, -0.006509f, -0.006746f, -0.003917f, 0.015919f, -0.011154f, -0.004700f, -0.007762f, -0.014368f, 0.005423f, 0.002369f, 0.000645f, 0.012184f, 0.011703f, 0.011555f, 0.003851f, -0.002261f, 0.001896f, 0.008688f, -0.003655f, 0.003696f, 0.004533f, -0.010440f, 0.014842f, 0.002767f, 0.004692f, 0.010804f, -0.004080f, -0.010972f, 0.000851f, 0.007285f, -0.005084f, -0.002467f, -0.006814f, 0.007242f, -0.000056f, -0.000864f, - -0.011924f, -0.000643f, -0.001320f, 0.007302f, 0.003948f, -0.006749f, 0.013360f, 0.004730f, 0.002919f, 0.004473f, -0.001970f, 0.007240f, -0.002689f, 0.000195f, -0.009003f, -0.011187f, 0.009042f, 0.006707f, 0.012458f, 0.000974f, 0.003554f, -0.009704f, -0.014370f, -0.007458f, -0.004092f, -0.004567f, -0.006435f, -0.006169f, 0.003391f, -0.002087f, 0.004863f, -0.005958f, -0.001619f, 0.001863f, 0.003330f, -0.002336f, 0.008250f, 0.001508f, -0.013761f, -0.012860f, 0.007533f, 0.001688f, 0.010540f, -0.016321f, -0.002302f, -0.006515f, 0.001739f, 0.019348f, 0.011053f, -0.017013f, 0.006395f, 0.001550f, -0.007100f, -0.007936f, -0.009653f, -0.015693f, 0.000516f, 0.001789f, -0.005839f, 0.002683f, -0.003392f, 0.000497f, 0.004650f, 0.003530f, 0.010001f, -0.008927f, 0.015778f, -0.009795f, 0.009125f, 0.007162f, -0.006024f, 0.004120f, 0.000675f, 0.006422f, -0.002738f, 0.003263f, 0.005937f, 0.001825f, 0.000826f, -0.002633f, 0.004589f, 0.001186f, -0.002234f, 0.011029f, -0.014880f, 0.000745f, -0.009076f, 0.017460f, 0.006117f, -0.015821f, 0.005863f, 0.019945f, -0.019250f, -0.009489f, 0.002118f, -0.002001f, - -0.007426f, 0.005566f, -0.002738f, 0.012970f, -0.011587f, -0.001757f, -0.003992f, -0.001509f, -0.000939f, 0.012215f, -0.012394f, -0.005049f, -0.001620f, -0.013798f, 0.006395f, 0.003528f, 0.013056f, 0.002983f, 0.010558f, 0.005896f, -0.009214f, 0.000990f, -0.005661f, 0.006099f, 0.002568f, -0.009707f, 0.027949f, -0.017683f, 0.005900f, 0.029788f, -0.020721f, 0.009764f, -0.000138f, 0.009731f, -0.002151f, -0.018079f, -0.003483f, 0.014935f, 0.013873f, 0.003746f, 0.000404f, 0.007632f, 0.004265f, 0.000384f, 0.006845f, 0.006425f, -0.004563f, 0.008180f, -0.001564f, 0.012826f, -0.009472f, -0.015437f, 0.004074f, -0.013409f, 0.005488f, 0.000579f, -0.003119f, -0.004021f, -0.005418f, -0.008915f, 0.002683f, 0.003733f, 0.001245f, 0.002864f, 0.003668f, -0.005204f, -0.011027f, 0.010048f, 0.003160f, 0.002199f, 0.000501f, 0.014601f, 0.003936f, 0.006589f, 0.015873f, -0.008179f, 0.004805f, 0.001504f, 0.005736f, 0.011283f, 0.009426f, -0.012299f, -0.010302f, -0.001816f, -0.005197f, -0.000202f, 0.002070f, -0.004270f, 0.004745f, -0.009016f, 0.002305f, -0.008342f, 0.006993f, 0.007427f, -0.003953f, 0.010224f, - -0.005224f, 0.009414f, -0.002975f, 0.005471f, -0.006009f, 0.002093f, -0.004441f, 0.004188f, -0.002885f, -0.015640f, 0.011638f, 0.009992f, 0.020142f, -0.012542f, 0.007413f, -0.015883f, -0.004423f, 0.012334f, 0.010158f, -0.010624f, 0.002122f, -0.012553f, -0.000334f, -0.014989f, 0.004090f, -0.010779f, -0.016894f, -0.012137f, 0.005608f, -0.009446f, -0.000873f, -0.011360f, 0.000358f, 0.003760f, -0.003331f, -0.007780f, 0.004707f, 0.010342f, 0.003700f, 0.005855f, -0.011631f, 0.007552f, -0.012129f, -0.001429f, 0.005299f, 0.002241f, -0.002823f, -0.000840f, -0.001742f, 0.008968f, -0.009291f, -0.013192f, -0.004573f, 0.006953f, -0.004574f, -0.009099f, -0.012848f, -0.013971f, 0.002567f, -0.002265f, -0.016637f, 0.013477f, -0.011157f, -0.006952f, 0.017110f, -0.003876f, -0.005033f, 0.004499f, -0.004754f, -0.002792f, 0.000063f, -0.006535f, -0.006480f, -0.004267f, -0.008181f, 0.003425f, 0.002428f, 0.014817f, -0.021130f, 0.004222f, 0.017391f, -0.006176f, 0.019077f, 0.005959f, 0.000596f, -0.005267f, -0.014429f, -0.008629f, 0.022752f, -0.012201f, -0.000833f, -0.003983f, 0.001081f, 0.014462f, 0.011903f, -0.007364f, - 0.017513f, 0.018587f, -0.009457f, -0.004240f, 0.010278f, -0.009169f, -0.009131f, -0.000374f, -0.013579f, -0.000094f, -0.004690f, 0.001797f, 0.020993f, 0.007640f, 0.000167f, -0.009966f, -0.030290f, -0.003482f, 0.015337f, 0.004085f, -0.012086f, 0.008428f, 0.012185f, 0.011660f, 0.012898f, -0.023139f, 0.003415f, 0.001058f, -0.012767f, 0.006120f, -0.011672f, 0.007223f, -0.007232f, 0.008959f, 0.019022f, 0.026897f, 0.015558f, 0.007638f, -0.012849f, -0.003345f, -0.015110f, -0.014368f, -0.004766f, 0.015591f, 0.001992f, -0.000052f, 0.001681f, -0.015846f, 0.001802f, 0.001657f, -0.002616f, -0.008078f, 0.001399f, 0.008452f, -0.012339f, -0.016633f, 0.034190f, 0.006463f, -0.011632f, -0.001977f, -0.007510f, -0.001460f, 0.003970f, -0.005663f, 0.029486f, -0.001946f, 0.007630f, 0.022928f, 0.001923f, -0.002170f, -0.015226f, 0.009140f, -0.008636f, -0.008536f, -0.029802f, -0.011786f, 0.004923f, -0.000382f, -0.006471f, -0.019694f, 0.006422f, 0.012691f, -0.017280f, -0.007380f, -0.005253f, -0.015974f, 0.006025f, 0.002460f, -0.009909f, -0.006220f, -0.003932f, -0.021970f, -0.009066f, 0.012804f, 0.018549f, -0.013333f, - -0.019042f, -0.003995f, -0.001808f, -0.013526f, -0.012932f, 0.005999f, 0.007433f, -0.014918f, 0.031913f, 0.001538f, 0.012587f, -0.006025f, 0.011805f, -0.007028f, 0.003120f, -0.021719f, -0.005488f, 0.010882f, -0.023737f, 0.007803f, -0.005802f, -0.010331f, -0.026830f, 0.000886f, 0.014062f, 0.001685f, -0.028218f, -0.002722f, 0.004575f, 0.012599f, 0.019902f, -0.006080f, 0.008698f, 0.025067f, 0.007548f, 0.004025f, -0.011235f, -0.001429f, 0.009563f, -0.003512f, -0.008437f, 0.010390f, 0.002556f, -0.017523f, -0.025922f, -0.022304f, -0.026855f, 0.022989f, -0.013762f, -0.004198f, 0.008361f, -0.026651f, -0.010192f, -0.018756f, -0.007464f, -0.006473f, 0.012334f, -0.023458f, -0.011572f, 0.006534f, 0.009579f, 0.012402f, 0.000355f, -0.000292f, -0.003510f, -0.000786f, -0.004803f, 0.002507f, -0.017509f, -0.010468f, -0.015343f, 0.010244f, 0.005985f, 0.007751f, 0.011565f, -0.022732f, -0.001087f, -0.003170f, 0.020442f, -0.008320f, 0.006753f, 0.010041f, -0.003637f, 0.010794f, -0.007188f, 0.012115f, 0.018629f, -0.008002f, -0.000858f, 0.014720f, -0.012983f, 0.020675f, -0.008903f, -0.035324f, 0.005663f, 0.016803f, - -0.006513f, 0.001013f, -0.000348f, 0.012567f, 0.017313f, -0.018516f, -0.007434f, 0.002827f, 0.011846f, -0.021764f, -0.015553f, -0.013886f, 0.024562f, -0.002280f, -0.028804f, -0.008187f, -0.012649f, -0.016312f, -0.006092f, 0.010570f, 0.004408f, 0.015299f, 0.005726f, 0.007276f, -0.030472f, -0.012482f, 0.012353f, -0.008536f, -0.005489f, -0.010695f, 0.003473f, 0.015611f, 0.004523f, 0.003373f, -0.020335f, -0.007446f, -0.003466f, 0.007176f, 0.018424f, -0.022504f, 0.010673f, -0.018448f, -0.004481f, -0.017024f, 0.002408f, 0.001760f, -0.000553f, 0.006355f, -0.015126f, -0.004997f, -0.014156f, -0.006511f, 0.000552f, -0.001252f, -0.017846f, 0.009798f, 0.011946f, -0.004954f, 0.014127f, 0.026547f, 0.003104f, 0.019940f, 0.026736f, 0.001414f, 0.001199f, 0.005690f, -0.005189f, 0.008057f, 0.002177f, -0.006493f, -0.008487f, 0.032441f, -0.003003f, 0.018640f, 0.009061f, -0.010538f, -0.010812f, -0.008674f, 0.009869f, -0.008360f, 0.012721f, 0.028423f, 0.015577f, -0.004680f, 0.001356f, -0.025301f, -0.015853f, -0.015745f, 0.024206f, 0.035296f, -0.014421f, -0.000996f, -0.013052f, -0.003977f, 0.020045f, 0.058574f, - 0.024380f, -0.007078f, -0.002824f, -0.009970f, 0.025805f, -0.025925f, -0.016003f, -0.040046f, -0.001321f, 0.020854f, 0.024160f, 0.005236f, -0.010813f, -0.023736f, -0.018786f, 0.018733f, -0.004566f, 0.029326f, -0.001003f, -0.008501f, 0.012574f, 0.005605f, -0.001199f, -0.006444f, 0.017716f, -0.002809f, 0.015154f, 0.000398f, -0.009807f, 0.035863f, -0.009450f, 0.014920f, 0.033571f, 0.012799f, -0.002533f, -0.016305f, -0.004285f, -0.026955f, -0.033413f, 0.007626f, 0.019528f, -0.004378f, 0.001716f, -0.034670f, -0.014618f, 0.020979f, 0.009809f, -0.008584f, 0.005455f, -0.009917f, -0.006412f, -0.015547f, -0.028400f, 0.002144f, -0.007819f, -0.018577f, -0.032681f, -0.026403f, -0.010330f, -0.024227f, 0.009711f, -0.010600f, 0.002173f, 0.003644f, -0.002037f, 0.001032f, -0.005962f, -0.005097f, 0.013903f, 0.032237f, -0.023644f, 0.004366f, -0.011283f, 0.011972f, -0.013674f, -0.024459f, -0.026312f, 0.006314f, 0.010939f, 0.031618f, -0.026742f, 0.007997f, 0.008945f, -0.046256f, -0.001576f, -0.000454f, -0.037512f, -0.021518f, -0.012961f, 0.008871f, -0.002577f, 0.001439f, -0.010291f, 0.015130f, 0.025615f, 0.012359f, - -0.003191f, -0.039561f, -0.016447f, -0.021979f, 0.008180f, 0.001343f, -0.016619f, -0.002377f, 0.013590f, -0.012342f, 0.023242f, -0.021852f, -0.000377f, -0.013260f, -0.038380f, 0.005349f, -0.016244f, -0.019811f, 0.014526f, 0.019979f, -0.023791f, 0.007863f, 0.028321f, -0.010670f, 0.012433f, 0.008167f, -0.006584f, 0.002264f, -0.031334f, 0.045779f, 0.018638f, 0.009504f, 0.045231f, -0.057094f, -0.004251f, -0.009551f, 0.005719f, 0.020564f, 0.023249f, 0.006899f, 0.010947f, 0.026750f, -0.003040f, -0.022036f, -0.034524f, 0.010751f, -0.013313f, -0.001374f, 0.008816f, -0.009673f, 0.013481f, 0.034073f, -0.023473f, 0.014002f, -0.011752f, -0.014463f, 0.006259f, 0.030258f, 0.034278f, 0.009334f, 0.020924f, -0.013382f, 0.009550f, 0.010493f, -0.057816f, 0.016827f, 0.017988f, 0.004550f, -0.018793f, 0.000219f, -0.035877f, 0.042219f, 0.024512f, -0.012416f, -0.014511f, -0.020015f, -0.011307f, 0.030738f, -0.030949f, -0.016786f, -0.005054f, -0.004423f, -0.007038f, 0.005044f, -0.020625f, -0.019912f, -0.012567f, -0.015187f, -0.004718f, -0.019958f, -0.003260f, -0.013182f, -0.045653f, -0.028232f, -0.011553f, -0.006545f, - 0.005963f, 0.008192f, -0.000594f, 0.001946f, 0.012789f, 0.006909f, 0.006408f, 0.032435f, 0.006369f, 0.011318f, 0.019605f, 0.043304f, 0.036322f, 0.002409f, -0.014712f, -0.027647f, 0.025331f, -0.005924f, 0.068844f, 0.014224f, 0.030743f, -0.003206f, 0.003716f, -0.027409f, -0.001332f, 0.023809f, 0.013580f, 0.017748f, -0.021069f, -0.014516f, -0.027074f, -0.051993f, 0.028639f, -0.047106f, -0.006239f, 0.054151f, 0.007671f, -0.041976f, 0.013193f, 0.014342f, -0.026276f, -0.022237f, 0.001593f, 0.015879f, 0.041162f, -0.003043f, -0.029600f, -0.032083f, -0.000393f, -0.018563f, 0.006488f, 0.004721f, -0.033106f, -0.030612f, -0.054883f, -0.017522f, -0.014944f, -0.039171f, -0.024542f, -0.001140f, -0.016372f, -0.012054f, -0.008615f, -0.003990f, -0.036328f, -0.021148f, -0.021717f, -0.012355f, 0.013235f, -0.033006f, 0.004022f, 0.025970f, 0.033550f, -0.008293f, 0.010436f, 0.017441f, -0.029784f, 0.017034f, -0.011841f, 0.027260f, -0.011695f, 0.001767f, -0.012681f, -0.003982f, 0.057735f, -0.012246f, 0.023081f, -0.041515f, -0.004530f, -0.000840f, -0.036318f, 0.035238f, 0.003807f, -0.014052f, 0.028449f, -0.011468f, - 0.009386f, 0.050252f, -0.017370f, -0.028934f, 0.022443f, -0.006318f, -0.053995f, 0.022323f, -0.072305f, -0.041979f, 0.034992f, 0.022710f, 0.010206f, 0.015005f, 0.007040f, -0.001230f, -0.044731f, -0.024277f, -0.009512f, -0.009823f, 0.077556f, 0.041940f, 0.000396f, -0.040101f, 0.020755f, -0.041801f, -0.033405f, 0.005791f, 0.034611f, 0.067466f, -0.010369f, 0.033947f, -0.011970f, 0.024006f, 0.041373f, 0.022664f, 0.026528f, 0.013774f, -0.007455f, -0.033941f, -0.034582f, -0.010829f, -0.032691f, -0.009962f, -0.005864f, -0.007678f, 0.026445f, -0.004741f, -0.067444f, 0.003720f, 0.016387f, 0.015379f, 0.040466f, -0.004382f, -0.080619f, 0.045663f, -0.036118f, 0.011639f, -0.007981f, 0.026989f, 0.039367f, -0.044076f, -0.003285f, -0.022047f, -0.038611f, 0.027707f, -0.019423f, -0.047212f, 0.018078f, 0.027620f, 0.044826f, 0.012119f, -0.007757f, 0.005128f, 0.036332f, -0.029659f, 0.057660f, -0.018109f, -0.017544f, -0.004837f, 0.034295f, -0.036602f, 0.001669f, 0.005297f, -0.105643f, -0.014353f, 0.029374f, -0.013572f, 0.001990f, 0.016203f, 0.003056f, -0.002409f, 0.002072f, 0.039839f, 0.030189f, -0.011301f, - -0.003072f, 0.044509f, 0.029407f, -0.081926f, -0.046628f, 0.056812f, 0.065568f, -0.034549f, -0.011540f, -0.091928f, -0.050717f, 0.014102f, -0.003633f, 0.013184f, -0.048541f, -0.029864f, -0.032945f, 0.051054f, 0.075146f, -0.002416f, 0.021058f, -0.010778f, -0.005373f, 0.000483f, 0.018306f, 0.033721f, 0.009210f, -0.009788f, -0.004647f, -0.005757f, -0.042706f, -0.023224f, -0.043304f, -0.003928f, 0.015877f, -0.016744f, 0.029918f, -0.018238f, -0.005457f, 0.045705f, -0.018494f, 0.026964f, 0.019486f, -0.005038f, -0.038766f, -0.027032f, -0.021757f, 0.010778f, 0.081026f, 0.017199f, 0.045336f, 0.053037f, 0.042377f, 0.032588f, 0.029677f, -0.038558f, 0.005495f, -0.002339f, 0.062421f, 0.032422f, 0.038984f, 0.065617f, -0.023646f, -0.034366f, 0.021338f, 0.057527f, -0.078835f, 0.005949f, 0.015175f, 0.048608f, -0.059972f, -0.094962f, -0.006951f, 0.041710f, 0.022798f, 0.028916f, 0.045821f, -0.010634f, -0.007733f, 0.021390f, -0.033563f, 0.026935f, -0.005885f, -0.016397f, -0.042208f, 0.018835f, -0.023046f, -0.031752f, 0.021435f, 0.055396f, 0.010617f, -0.014424f, 0.025109f, 0.055719f, 0.013840f, 0.015478f, - -0.001394f, -0.000607f, 0.018869f, -0.037323f, -0.002543f, -0.055877f, 0.027485f, -0.044087f, -0.009290f, 0.031645f, 0.009427f, -0.022885f, 0.000665f, -0.027265f, 0.061296f, 0.013898f, 0.016210f, 0.040042f, 0.068015f, -0.025000f, 0.018293f, -0.029780f, 0.007025f, 0.031878f, 0.053290f, 0.019438f, -0.017945f, 0.066104f, 0.002096f, 0.001350f, -0.041112f, 0.007968f, 0.031493f, -0.007127f, 0.029785f, -0.039121f, 0.062234f, 0.077633f, -0.093586f, 0.003677f, -0.013140f, 0.024856f, -0.022875f, -0.005237f, 0.028354f, -0.025159f, -0.101564f, 0.007344f, 0.071354f, -0.058258f, 0.020611f, -0.008543f, -0.021894f, -0.032883f, 0.073719f, 0.000819f, -0.007058f, 0.017687f, -0.087843f, 0.059122f, 0.006226f, -0.043775f, 0.003873f, -0.089858f, -0.021350f, 0.005586f, -0.018162f, -0.071306f, -0.008530f, -0.046373f, -0.012254f, 0.044793f, 0.009724f, 0.058419f, 0.023391f, 0.022919f, 0.013141f, -0.018073f, 0.045641f, -0.021759f, -0.000586f, 0.023232f, 0.009915f, -0.026429f, 0.022779f, 0.011061f, 0.054355f, 0.024164f, -0.009579f, 0.034732f, -0.025837f, 0.046318f, 0.015542f, -0.046542f, -0.049674f, 0.028135f, - 0.033066f, 0.015877f, 0.005917f, -0.021180f, -0.031325f, 0.012386f, -0.030689f, -0.044932f, -0.013649f, -0.005196f, -0.042679f, -0.013286f, 0.017658f, -0.026811f, -0.047947f, 0.017269f, 0.019940f, 0.005251f, -0.004218f, 0.000847f, -0.006317f, 0.021685f, 0.086445f, 0.021345f, -0.000093f, 0.001277f, -0.026704f, -0.043211f, -0.017850f, 0.074357f, 0.078334f, 0.043624f, 0.011672f, 0.073458f, 0.037921f, -0.008824f, -0.087220f, -0.064468f, -0.049680f, -0.101490f, -0.035020f, -0.007774f, 0.020703f, 0.039096f, -0.016682f, 0.050384f, -0.057404f, 0.046616f, -0.005812f, 0.062196f, -0.039997f, 0.036066f, -0.058985f, 0.051846f, -0.047566f, -0.019853f, 0.072077f, 0.016922f, 0.058031f, 0.082762f, 0.008942f, -0.006200f, -0.033800f, -0.002271f, 0.052926f, 0.013687f, -0.017800f, -0.057354f, 0.005770f, 0.012037f, 0.028280f, 0.017357f, 0.023794f, 0.014892f, -0.032672f, -0.053181f, -0.021643f, 0.052931f, 0.021336f, 0.167271f, -0.051426f, -0.043658f, 0.055880f, 0.086334f, 0.019657f, -0.000555f, 0.024350f, 0.006601f, 0.029461f, -0.024141f, 0.012088f, 0.040980f, 0.046497f, 0.030537f, 0.131741f, -0.015303f, - -0.013966f, -0.007257f, 0.069589f, 0.041035f, -0.030665f, 0.036141f, 0.002619f, 0.012641f, -0.024255f, 0.060444f, -0.055229f, 0.005401f, 0.095234f, -0.065919f, 0.200039f, -0.088750f, 0.097921f, 0.086948f, -0.080512f, -0.076933f, 0.090165f, 0.000400f, -0.011924f, 0.028697f, 0.047173f, -0.105005f, -0.038421f, 0.057249f, -0.125555f, -0.084913f, -0.050038f, 0.086263f, 0.197777f, 0.048916f, -0.147614f, -0.038918f, -0.150929f, -0.085691f, 0.130626f, 0.070779f, 0.123031f, 0.060517f, -0.085819f, -0.147660f, -0.104688f, -0.031121f, 0.068469f, 0.068092f, 0.048090f, 0.019494f, -0.033708f, -0.161314f, -0.183656f, -0.046022f, 0.147629f, 0.250680f, 0.177641f, -0.038373f, -0.116296f, -0.178254f, -0.124091f, -0.109406f, 0.003927f, 0.035289f, 0.143726f, 0.143153f, -0.077126f, -0.057040f, -0.184128f, -0.181244f, -0.059133f, 0.010408f, 0.184981f, 0.260722f, 0.122416f, -0.086357f, -0.277104f, -0.215612f, -0.149151f, 0.065804f, 0.163171f, 0.091470f, 0.066371f, 0.045014f, -0.164337f, -0.039856f, -0.092580f, 0.025905f, -0.010613f, 0.089032f, 0.158089f, 0.113000f, -0.143924f, -0.304967f, -0.220165f, 0.012381f, - 0.169700f, -0.016807f, -0.034545f, 0.068674f, 0.021361f, -0.055529f, -0.052460f, 0.000236f, -0.084503f, -0.010366f, 0.012549f, 0.009763f, -0.007303f, 0.002217f, -0.028355f, -0.003430f, -0.003253f, 0.014705f, -0.009697f, 0.039085f, -0.010209f, -0.007362f, -0.010720f, -0.012089f, 0.024471f, 0.007098f, -0.011499f, 0.037884f, 0.002636f, -0.066913f, -0.033210f, 0.018639f, 0.033143f, -0.011006f, 0.004359f, 0.046131f, -0.000731f, 0.006444f, -0.037149f, -0.016623f, 0.012077f, -0.008001f, -0.007799f, -0.004820f, 0.031028f, 0.011180f, -0.011220f, -0.035812f, -0.013566f, -0.001946f, -0.031965f, 0.003303f, -0.036533f, -0.024923f, -0.016391f, -0.033151f, 0.053391f, -0.009257f, -0.022314f, 0.022241f, 0.001114f, -0.051173f, -0.001337f, 0.051434f, 0.043472f, -0.023641f, 0.034352f, 0.005642f, 0.033189f, -0.033973f, -0.047716f, 0.019874f, 0.025588f, 0.020494f, 0.020791f, -0.017381f, 0.022850f, -0.033575f, 0.028355f, 0.025681f, -0.041145f, 0.082440f, 0.126280f, -0.016787f, -0.046599f, -0.040441f, 0.116342f, 0.052182f, 0.112550f, 0.060263f, 0.000105f, -0.052771f, -0.011773f, 0.028169f, 0.052721f, 0.024688f, - -0.024686f, -0.006703f, 0.025021f, 0.036502f, 0.004322f, 0.007565f, -0.026381f, 0.003896f, -0.012959f, 0.016047f, 0.018598f, 0.048266f, 0.041946f, -0.023602f, 0.003155f, -0.026436f, 0.006014f, 0.021263f, 0.032945f, 0.001192f, -0.016656f, -0.001439f, -0.029599f, 0.022625f, -0.007442f, 0.008378f, 0.021655f, -0.001192f, 0.029067f, -0.016522f, -0.009176f, -0.008896f, -0.031842f, -0.020472f, -0.048095f, -0.011032f, -0.054759f, 0.001391f, -0.019662f, 0.041688f, 0.005261f, 0.010389f, -0.042835f, 0.014719f, -0.001177f, -0.021469f, 0.028809f, -0.019683f, -0.010243f, 0.003945f, 0.018238f, -0.006421f, -0.013063f, 0.063809f, 0.019947f, 0.010516f, 0.023069f, -0.025066f, -0.048559f, -0.100957f, -0.015374f, 0.136308f, 0.206631f, 0.175945f, 0.136389f, -0.008385f, 0.014308f, -0.100709f, -0.117182f, -0.187023f, -0.110238f, -0.117682f, -0.039540f, 0.015251f, 0.079286f, 0.058416f, 0.175354f, 0.154992f, 0.048473f, 0.010741f, -0.030447f, -0.060704f, -0.098576f, -0.035429f, -0.101113f, -0.026712f, -0.050949f, -0.031635f, -0.026285f, 0.004164f, -0.001897f, 0.032017f, 0.044341f, 0.071644f, 0.075279f, 0.093390f, - 0.077969f, -0.011856f, 0.003671f, -0.003282f, 0.010892f, -0.049664f, 0.014264f, -0.053256f, -0.130831f, -0.065098f, -0.099463f, -0.162001f, -0.051982f, -0.017997f, -0.070053f, 0.016933f, 0.042347f, 0.105088f, 0.123475f, 0.186092f, 0.114139f, 0.091973f, 0.090506f, 0.053205f, -0.027580f, 0.000801f, -0.106367f, -0.094239f, -0.150905f, -0.179580f, -0.204641f, -0.155560f, -0.121863f, -0.029976f, -0.021531f, -0.008719f, 0.036086f, 0.062198f, 0.144298f, 0.092884f, 0.045077f, -0.004171f}, - {-0.000497f, -0.001580f, -0.004372f, 0.003520f, 0.009140f, -0.003241f, 0.005737f, 0.006635f, 0.001627f, 0.003363f, 0.007830f, 0.008979f, -0.003302f, 0.002299f, -0.006000f, -0.007388f, 0.008837f, -0.017604f, 0.000987f, -0.011187f, -0.007538f, -0.004443f, -0.001739f, 0.020681f, -0.000296f, 0.005171f, 0.005358f, 0.000784f, -0.001690f, -0.000909f, -0.001564f, 0.002118f, 0.005316f, 0.004530f, -0.001402f, 0.000192f, -0.001546f, -0.007204f, 0.003314f, 0.002018f, -0.002780f, -0.010954f, -0.009743f, -0.000328f, 0.000623f, 0.001321f, 0.006010f, 0.006567f, -0.008301f, -0.005861f, -0.006169f, 0.005498f, 0.008503f, 0.005247f, 0.011369f, -0.000354f, -0.001174f, -0.002428f, 0.007588f, -0.004794f, 0.001042f, 0.000760f, -0.006201f, -0.009264f, -0.003645f, 0.009792f, 0.000218f, 0.014802f, 0.000466f, -0.001735f, 0.000349f, 0.009703f, -0.001483f, -0.000793f, 0.005248f, 0.003876f, 0.013648f, 0.005370f, -0.007054f, -0.001046f, 0.004660f, -0.000723f, 0.004964f, -0.012491f, -0.009144f, -0.002083f, -0.010776f, 0.004571f, -0.002523f, -0.001058f, -0.007336f, -0.003091f, 0.006513f, 0.006774f, -0.002778f, -0.001929f, - -0.004596f, -0.010097f, 0.011196f, 0.006854f, 0.000118f, 0.001284f, -0.000802f, 0.000414f, 0.008974f, -0.004563f, 0.001496f, -0.014574f, -0.012195f, -0.002941f, 0.000897f, -0.010148f, -0.002091f, 0.003679f, 0.000679f, 0.000226f, -0.005326f, -0.003909f, 0.009372f, -0.004413f, -0.004296f, -0.001335f, -0.001567f, 0.004220f, -0.002434f, -0.006289f, -0.000446f, 0.005472f, -0.008068f, 0.000291f, -0.008630f, 0.000522f, -0.006388f, 0.009231f, -0.000775f, -0.009942f, -0.001679f, -0.001103f, 0.000918f, -0.014214f, -0.001953f, 0.000937f, -0.009635f, 0.004033f, -0.000050f, -0.011159f, 0.004683f, 0.006207f, -0.005954f, -0.007176f, -0.011921f, 0.005507f, 0.004294f, -0.000197f, -0.010088f, 0.004517f, -0.012598f, -0.003636f, -0.001631f, -0.006513f, 0.006296f, 0.014182f, -0.005650f, -0.001953f, 0.000863f, -0.005935f, 0.004301f, -0.000918f, -0.004572f, -0.008156f, -0.004092f, 0.012851f, 0.012662f, 0.006987f, 0.014684f, 0.008512f, 0.004870f, 0.013616f, -0.008139f, 0.003041f, 0.006121f, -0.000201f, 0.002673f, -0.003952f, 0.002953f, -0.018691f, 0.000770f, -0.000979f, 0.007173f, -0.004124f, -0.001981f, -0.001163f, - 0.005626f, -0.005782f, -0.000511f, 0.001879f, 0.004132f, 0.003771f, -0.000506f, -0.006150f, 0.001727f, 0.002486f, 0.005147f, 0.003753f, 0.005924f, -0.005692f, -0.002962f, -0.000762f, -0.010012f, -0.000892f, 0.003488f, 0.009550f, 0.010909f, -0.000959f, 0.006361f, 0.004678f, 0.000002f, 0.004325f, 0.005321f, 0.007186f, -0.001815f, 0.000555f, -0.004092f, 0.001564f, -0.003408f, 0.003710f, -0.005527f, -0.005140f, 0.004024f, 0.000750f, -0.012450f, -0.012607f, 0.004953f, -0.001892f, 0.010521f, 0.009680f, 0.001254f, -0.000243f, 0.019932f, -0.005778f, -0.000065f, 0.015894f, 0.001069f, -0.010002f, -0.013507f, 0.009548f, -0.003693f, -0.000477f, -0.008240f, 0.002117f, -0.005792f, 0.006285f, 0.030831f, -0.011703f, -0.008627f, -0.011578f, -0.011576f, 0.001581f, -0.009393f, -0.024629f, -0.000307f, 0.001791f, 0.000345f, -0.010181f, -0.001735f, 0.007164f, -0.009551f, -0.006441f, 0.014498f, 0.004026f, -0.003395f, -0.004076f, 0.009394f, -0.005244f, 0.006772f, 0.005297f, -0.012823f, -0.009348f, -0.007535f, 0.007775f, -0.006450f, -0.004675f, -0.003460f, -0.005098f, -0.000579f, -0.009555f, 0.000150f, -0.003449f, - 0.002217f, -0.002032f, -0.019037f, 0.008001f, -0.010674f, 0.007552f, 0.001508f, -0.016528f, 0.003068f, 0.009586f, 0.003055f, 0.016549f, -0.007619f, 0.000101f, 0.001694f, 0.003322f, 0.005757f, -0.007249f, 0.001756f, 0.005230f, -0.007523f, 0.003286f, 0.004693f, -0.004855f, 0.002593f, -0.002622f, -0.016858f, 0.004945f, 0.017090f, 0.013249f, 0.016092f, 0.002298f, -0.002607f, -0.013603f, -0.006194f, -0.006574f, -0.004222f, 0.013333f, 0.019782f, 0.001050f, -0.000469f, 0.013244f, -0.021113f, 0.000157f, -0.000884f, -0.000648f, -0.006240f, -0.007619f, 0.008958f, 0.009673f, 0.001309f, -0.002381f, 0.004972f, -0.010843f, -0.007027f, 0.008044f, -0.007818f, 0.016943f, 0.016591f, 0.002498f, 0.010694f, 0.007982f, 0.002849f, -0.007009f, 0.003687f, -0.000375f, -0.010731f, 0.011727f, 0.000330f, 0.005543f, 0.010933f, -0.011191f, -0.002901f, -0.013275f, -0.001480f, 0.003285f, 0.014245f, -0.012679f, -0.003419f, 0.009776f, -0.000168f, -0.007883f, 0.015769f, -0.011044f, -0.022137f, 0.004651f, -0.011400f, -0.005409f, 0.009031f, -0.005032f, 0.003883f, 0.002437f, -0.002796f, 0.011548f, -0.005674f, 0.005827f, - -0.003148f, 0.000893f, -0.022407f, 0.005264f, 0.020139f, 0.002281f, 0.002754f, 0.006907f, 0.018873f, 0.003311f, -0.019026f, 0.021312f, 0.008653f, 0.008154f, 0.012171f, 0.011621f, -0.000279f, -0.003116f, 0.011503f, 0.009825f, 0.002780f, -0.007737f, 0.010008f, 0.005658f, 0.014983f, 0.018624f, 0.006526f, -0.003539f, 0.000190f, 0.000742f, 0.007228f, 0.023483f, 0.013261f, -0.011619f, 0.021732f, 0.001816f, -0.002792f, 0.003854f, -0.016190f, 0.018905f, -0.002422f, 0.001337f, -0.002141f, 0.005608f, -0.002385f, 0.010318f, -0.012927f, 0.019397f, 0.015725f, 0.000539f, -0.002755f, -0.009024f, -0.019188f, -0.005469f, 0.007952f, -0.003296f, -0.006966f, 0.011543f, 0.012442f, -0.006884f, -0.006851f, -0.023537f, -0.008127f, -0.001692f, -0.000633f, -0.026394f, 0.014842f, 0.003066f, -0.015802f, -0.012030f, 0.005478f, -0.004737f, 0.002804f, -0.002129f, 0.002498f, -0.004392f, 0.002857f, 0.010942f, -0.013637f, 0.000579f, -0.000532f, 0.001170f, 0.020281f, 0.012214f, -0.000836f, 0.026813f, 0.011413f, 0.024285f, 0.004981f, 0.008701f, 0.024514f, -0.009207f, -0.017394f, -0.009852f, 0.022892f, 0.006517f, - -0.013886f, 0.018710f, -0.005522f, -0.009692f, 0.015426f, 0.038847f, -0.010421f, 0.002716f, 0.005487f, 0.008092f, -0.010485f, 0.002083f, 0.020372f, 0.003087f, 0.025191f, -0.004760f, 0.027100f, 0.020436f, 0.006068f, 0.017284f, 0.009839f, -0.008962f, 0.006333f, -0.001630f, -0.003004f, 0.003557f, 0.001345f, -0.000863f, 0.006771f, 0.005999f, 0.017354f, 0.013005f, -0.015461f, 0.006190f, 0.006218f, -0.010043f, 0.000148f, -0.025021f, -0.034233f, 0.014524f, -0.009149f, -0.021000f, -0.005244f, -0.010810f, 0.014002f, 0.004259f, -0.007391f, -0.015559f, 0.012458f, -0.010958f, 0.007327f, -0.012448f, 0.001280f, -0.004442f, 0.019587f, 0.004598f, -0.009105f, 0.007701f, -0.014536f, 0.001771f, 0.000829f, 0.003714f, -0.008751f, 0.009990f, 0.011498f, -0.001396f, -0.007219f, -0.026086f, -0.021921f, -0.017255f, 0.008274f, 0.002163f, 0.004450f, -0.021386f, 0.013799f, 0.009372f, 0.017102f, -0.018334f, 0.017639f, 0.013177f, -0.010089f, -0.008776f, -0.004901f, 0.017509f, 0.012538f, -0.007812f, 0.002154f, 0.026562f, 0.013917f, 0.006825f, 0.015867f, 0.010567f, 0.004603f, -0.008836f, 0.002465f, 0.001218f, - -0.003266f, -0.009780f, 0.024150f, 0.011064f, -0.021490f, 0.014914f, 0.015336f, 0.014788f, 0.012107f, 0.003183f, -0.013144f, 0.000506f, -0.001232f, 0.020728f, 0.003360f, 0.009345f, 0.019370f, -0.003210f, -0.019773f, 0.004710f, 0.011706f, 0.021021f, -0.027048f, -0.015455f, 0.008373f, 0.000522f, 0.003358f, -0.016206f, -0.003233f, -0.015698f, -0.001343f, 0.007841f, -0.004330f, -0.008500f, -0.009646f, 0.004623f, -0.001647f, -0.005505f, 0.009883f, 0.001257f, -0.017170f, 0.017540f, 0.011349f, -0.005233f, 0.007065f, 0.010601f, -0.011540f, -0.003890f, 0.045019f, -0.001399f, 0.017654f, 0.012336f, -0.037303f, -0.019811f, -0.001930f, -0.001446f, -0.000243f, 0.021433f, 0.004987f, -0.010180f, 0.022216f, 0.013713f, -0.002514f, -0.003385f, 0.007272f, -0.003326f, -0.007506f, -0.016416f, -0.019510f, 0.011262f, -0.004047f, -0.008980f, -0.000662f, -0.030454f, -0.005415f, 0.002449f, 0.017344f, -0.019920f, -0.005552f, 0.003131f, 0.001721f, 0.004981f, 0.001880f, 0.022328f, -0.024968f, -0.007800f, 0.006015f, -0.000131f, -0.014569f, -0.002401f, 0.020115f, 0.017786f, 0.015059f, -0.003140f, -0.024844f, -0.010523f, - 0.009522f, -0.001777f, 0.017330f, 0.000230f, 0.000042f, -0.011216f, -0.007443f, 0.016346f, -0.017767f, 0.014174f, 0.009988f, -0.010955f, -0.006215f, -0.000488f, 0.002313f, -0.010773f, 0.007024f, -0.032977f, -0.003097f, 0.005693f, 0.021891f, 0.003909f, -0.001883f, 0.014905f, -0.010945f, 0.031091f, -0.030850f, -0.001746f, -0.007301f, 0.006165f, -0.002328f, -0.001275f, 0.006847f, -0.004440f, -0.011007f, -0.005579f, -0.006823f, -0.016726f, -0.003630f, 0.014043f, -0.003702f, -0.006689f, 0.018261f, 0.001028f, 0.022135f, -0.021014f, -0.013524f, 0.029681f, -0.003573f, -0.000313f, 0.001011f, -0.016376f, -0.002725f, -0.020769f, 0.005879f, -0.025190f, -0.001292f, 0.021391f, -0.007082f, 0.015107f, 0.017203f, 0.011961f, 0.013435f, -0.016394f, 0.017437f, 0.003708f, -0.047610f, -0.006155f, 0.006316f, -0.002037f, -0.005761f, -0.018316f, 0.015395f, -0.015276f, -0.003899f, -0.017516f, -0.018821f, -0.026265f, 0.024740f, 0.002323f, 0.028906f, -0.012432f, 0.021628f, 0.031772f, -0.019951f, 0.026449f, -0.030179f, -0.021915f, -0.027480f, -0.006471f, -0.019742f, 0.009130f, 0.007696f, 0.002436f, 0.023213f, 0.036429f, - 0.006357f, -0.010968f, -0.019241f, 0.011562f, 0.035474f, -0.000688f, 0.010863f, 0.000761f, 0.014736f, 0.008469f, 0.011530f, 0.017764f, -0.021696f, -0.002836f, -0.007462f, 0.028582f, 0.022940f, -0.002126f, 0.035056f, 0.016975f, 0.004004f, -0.033134f, -0.014960f, -0.025519f, -0.010367f, 0.001420f, 0.010165f, -0.009840f, 0.002249f, 0.033616f, -0.005546f, -0.001039f, 0.002728f, 0.034570f, -0.020827f, -0.009840f, -0.007915f, -0.004563f, -0.020357f, 0.023489f, 0.002606f, 0.015411f, -0.024607f, 0.002437f, -0.001815f, -0.016265f, -0.005079f, -0.029242f, 0.009839f, -0.000468f, 0.006942f, -0.004446f, -0.000696f, -0.033707f, -0.010097f, 0.011890f, 0.021891f, -0.006897f, 0.006557f, 0.042764f, -0.001667f, 0.001831f, 0.009234f, 0.019066f, -0.017120f, 0.003850f, 0.023548f, -0.013206f, 0.017740f, 0.005007f, 0.018771f, -0.021189f, -0.008597f, 0.005666f, 0.009400f, -0.020280f, -0.031082f, 0.008702f, -0.003379f, -0.031207f, 0.008540f, 0.003272f, 0.028353f, 0.025234f, -0.023298f, -0.027774f, 0.006245f, -0.021150f, -0.011233f, 0.001077f, 0.042294f, 0.000820f, -0.005370f, -0.037563f, -0.018918f, -0.003003f, - -0.028176f, -0.042553f, 0.029421f, -0.010728f, -0.013496f, -0.002114f, 0.031918f, -0.009594f, 0.003532f, -0.005976f, -0.006351f, -0.018071f, -0.009825f, 0.003603f, -0.044696f, -0.028251f, -0.008211f, -0.015755f, -0.015091f, -0.004604f, -0.017493f, 0.015898f, 0.007039f, 0.005620f, -0.010637f, 0.008505f, -0.064532f, 0.060952f, 0.035330f, -0.005128f, -0.008128f, 0.034847f, 0.002103f, -0.019065f, -0.028732f, -0.002391f, -0.010051f, -0.010575f, -0.017281f, -0.016115f, 0.022131f, 0.022406f, -0.009346f, 0.047339f, -0.025235f, -0.018365f, -0.018767f, 0.002852f, 0.014630f, -0.049779f, 0.015355f, -0.012656f, 0.027061f, -0.024548f, 0.011400f, 0.006088f, 0.030376f, 0.002906f, 0.071318f, 0.023715f, -0.001884f, 0.003413f, -0.028206f, -0.035641f, 0.044321f, -0.012975f, 0.004577f, 0.059753f, -0.016024f, -0.002609f, -0.013278f, 0.046628f, 0.008338f, -0.018939f, 0.026768f, -0.009736f, 0.040028f, 0.021558f, 0.009457f, 0.006221f, -0.005213f, -0.015385f, -0.005819f, -0.004051f, -0.044380f, -0.010791f, -0.007842f, 0.024274f, -0.014362f, 0.004693f, 0.007122f, -0.031103f, -0.047481f, -0.001534f, 0.039192f, -0.002565f, - 0.034658f, -0.006071f, -0.050980f, -0.019216f, 0.001128f, 0.011405f, 0.007826f, -0.040493f, -0.000918f, -0.011535f, 0.028147f, -0.030040f, 0.035864f, 0.055169f, 0.034261f, -0.011158f, 0.005117f, 0.022276f, -0.009557f, 0.043205f, 0.048244f, 0.044064f, 0.012591f, 0.048284f, -0.003548f, -0.019533f, 0.004253f, -0.025406f, -0.033964f, 0.017137f, -0.015812f, 0.038989f, 0.018298f, 0.009525f, -0.015428f, -0.050767f, -0.016144f, -0.036333f, 0.021338f, 0.026431f, -0.000262f, 0.012898f, 0.008897f, 0.012774f, 0.010845f, 0.004835f, -0.002685f, 0.006222f, -0.007384f, 0.013739f, -0.024384f, -0.068652f, -0.027275f, 0.037590f, 0.002447f, -0.011213f, -0.022681f, -0.000145f, 0.031952f, 0.040387f, 0.008948f, -0.024800f, -0.004012f, 0.032310f, -0.038725f, 0.003728f, -0.004465f, 0.028912f, 0.033434f, -0.026467f, 0.050528f, 0.009703f, 0.002479f, 0.070711f, 0.000861f, -0.022210f, 0.025307f, -0.011847f, 0.004102f, -0.015159f, 0.005853f, 0.046929f, 0.006050f, 0.059777f, 0.025928f, -0.052402f, -0.056532f, -0.012668f, 0.015599f, 0.031770f, -0.043625f, -0.015955f, -0.005647f, 0.053574f, 0.050152f, -0.042680f, - -0.000840f, -0.026302f, 0.017085f, -0.009535f, 0.057203f, -0.000060f, -0.011708f, 0.036035f, -0.006970f, -0.045123f, -0.021796f, -0.008957f, 0.045301f, -0.042934f, 0.023008f, 0.066315f, 0.027020f, 0.030283f, -0.030835f, 0.022367f, 0.039134f, 0.028057f, -0.050565f, -0.027793f, 0.036174f, 0.099225f, 0.008827f, 0.019652f, -0.026816f, 0.006762f, 0.001280f, -0.007178f, -0.024937f, 0.005987f, -0.006921f, 0.046404f, 0.041570f, -0.053386f, -0.019675f, 0.051540f, 0.030348f, 0.017003f, 0.008762f, 0.026761f, 0.037056f, 0.008446f, 0.023464f, 0.016341f, -0.021400f, 0.001246f, -0.020822f, -0.013203f, 0.010009f, -0.007140f, 0.007548f, -0.023225f, -0.015133f, 0.012015f, -0.000213f, 0.017470f, 0.019430f, -0.049637f, 0.039066f, 0.004525f, 0.032312f, -0.034387f, 0.022328f, 0.026027f, -0.017991f, -0.039018f, -0.032267f, -0.042999f, -0.035796f, -0.036194f, 0.016694f, 0.056643f, 0.020699f, 0.015303f, 0.033385f, -0.001238f, 0.004898f, -0.026653f, 0.045623f, -0.054265f, -0.095430f, 0.030772f, -0.016641f, -0.000038f, -0.079020f, 0.016186f, 0.035331f, -0.001344f, 0.026473f, 0.006797f, 0.000194f, -0.011834f, - 0.024040f, 0.017566f, 0.023001f, -0.032682f, -0.017112f, -0.004365f, 0.021116f, -0.043609f, 0.073151f, 0.035060f, -0.005838f, 0.040239f, 0.024130f, 0.038401f, -0.019739f, -0.025119f, -0.024551f, 0.046496f, 0.016695f, 0.008830f, 0.041912f, -0.035778f, -0.117147f, -0.007250f, 0.008408f, 0.014615f, -0.065590f, 0.051968f, 0.038016f, -0.070414f, -0.053948f, 0.002471f, 0.030171f, 0.003236f, 0.017608f, 0.038472f, -0.008934f, 0.024214f, -0.033177f, -0.038484f, -0.030071f, -0.039980f, -0.062194f, 0.018626f, 0.008135f, -0.041768f, 0.058066f, 0.022879f, -0.011919f, -0.012443f, -0.031243f, -0.023897f, -0.055751f, -0.030439f, 0.023079f, 0.052543f, -0.016889f, 0.006283f, 0.024174f, -0.044482f, 0.036284f, 0.045778f, 0.010335f, -0.010204f, 0.042372f, 0.011694f, 0.009189f, -0.026026f, -0.026215f, -0.001023f, 0.063891f, -0.016198f, -0.043817f, 0.000308f, -0.054700f, -0.068808f, -0.039329f, -0.010284f, -0.025440f, -0.044825f, -0.023005f, -0.024231f, 0.029314f, 0.056721f, 0.021405f, -0.026350f, -0.054650f, 0.058659f, 0.032135f, -0.028827f, -0.014950f, -0.015570f, 0.003728f, 0.013486f, -0.017740f, 0.030236f, - 0.028988f, 0.001140f, -0.018668f, -0.018659f, -0.016574f, -0.002726f, 0.011663f, -0.009192f, -0.018323f, -0.045688f, 0.014547f, 0.038941f, -0.022044f, 0.034287f, 0.001834f, 0.022698f, -0.018823f, 0.025250f, 0.076727f, -0.029406f, 0.034063f, 0.064791f, 0.012486f, -0.012733f, -0.017151f, 0.017779f, 0.002666f, 0.032152f, -0.024369f, 0.088767f, -0.026498f, -0.062525f, 0.015567f, -0.029701f, 0.073325f, 0.021157f, -0.020405f, 0.001519f, -0.040980f, -0.062146f, 0.075064f, 0.004941f, -0.016846f, 0.067887f, -0.034129f, 0.004827f, -0.017546f, 0.036238f, -0.049111f, -0.066018f, -0.037917f, 0.005211f, 0.031051f, 0.037314f, 0.027051f, 0.036078f, 0.088097f, -0.033523f, 0.035296f, 0.055446f, -0.008169f, 0.001708f, 0.066531f, 0.007385f, -0.036153f, -0.041964f, -0.037049f, 0.068485f, -0.045518f, 0.027431f, 0.032305f, -0.021463f, 0.006922f, -0.036968f, -0.008106f, 0.031037f, -0.026724f, 0.022654f, -0.008609f, -0.046359f, -0.102831f, -0.008412f, 0.093580f, 0.039868f, 0.010182f, -0.017375f, -0.027250f, -0.003948f, -0.035911f, 0.013126f, -0.050874f, 0.063271f, 0.005514f, 0.008918f, 0.006090f, -0.019365f, - -0.061289f, -0.022227f, 0.051263f, -0.039178f, -0.009227f, -0.026480f, 0.023728f, -0.018353f, 0.070752f, -0.009150f, 0.015837f, -0.023137f, -0.063063f, 0.016579f, -0.047658f, -0.008778f, -0.002487f, -0.088140f, -0.074470f, -0.069661f, 0.026085f, -0.010608f, -0.036906f, -0.022596f, -0.022670f, -0.020091f, -0.032406f, -0.020423f, -0.003369f, -0.078071f, 0.025636f, 0.012540f, 0.033183f, -0.014445f, 0.074290f, -0.003671f, 0.017972f, -0.020741f, -0.003580f, 0.041820f, -0.054335f, -0.012639f, -0.016873f, 0.029071f, 0.015998f, 0.034948f, -0.013867f, -0.069873f, 0.019349f, 0.001860f, 0.116407f, 0.121046f, 0.013455f, 0.001951f, 0.027226f, 0.014932f, 0.029150f, 0.052570f, 0.018225f, 0.054512f, 0.080298f, -0.019686f, 0.009575f, -0.066340f, -0.010584f, 0.009237f, -0.009743f, -0.019480f, -0.041638f, -0.033748f, 0.017820f, 0.019066f, -0.089921f, 0.063637f, 0.016103f, 0.089641f, -0.006460f, -0.017641f, 0.028289f, -0.006203f, 0.093272f, 0.023897f, -0.005720f, 0.017929f, 0.017795f, -0.025565f, -0.058319f, -0.045515f, -0.023339f, 0.069811f, 0.000294f, 0.076656f, 0.008946f, 0.074791f, -0.022258f, -0.104937f, - -0.039250f, -0.031298f, 0.053631f, 0.005269f, -0.050584f, -0.074697f, -0.051017f, -0.011896f, 0.063562f, -0.056954f, -0.047326f, -0.033768f, 0.057315f, -0.030287f, -0.015187f, -0.075678f, -0.070787f, 0.019772f, 0.014635f, 0.094305f, 0.028526f, -0.013413f, 0.003781f, 0.003488f, 0.070223f, 0.029378f, -0.036497f, 0.069962f, -0.005630f, -0.130783f, -0.041831f, 0.086419f, 0.092108f, -0.063032f, -0.066739f, -0.064065f, 0.036376f, 0.059984f, 0.113390f, 0.037560f, 0.014107f, -0.061963f, -0.007103f, -0.000730f, 0.025326f, 0.060567f, 0.041285f, 0.006940f, -0.069120f, -0.130428f, -0.035474f, -0.063990f, 0.101184f, 0.110936f, 0.186944f, -0.051668f, -0.178856f, -0.034726f, -0.060911f, 0.143983f, 0.048340f, 0.146143f, 0.037528f, -0.042369f, -0.135411f, -0.087342f, 0.006470f, 0.022305f, 0.154972f, 0.067749f, -0.003389f, -0.120435f, -0.217864f, -0.051604f, 0.007157f, 0.107829f, 0.234278f, 0.056873f, 0.072880f, -0.142543f, -0.225199f, 0.016804f, 0.056324f, 0.189254f, 0.111316f, 0.083980f, -0.037421f, -0.139562f, -0.115030f, 0.006836f, 0.040284f, 0.005035f, 0.099260f, -0.067653f, -0.062170f, -0.009756f, - -0.151252f, 0.031486f, -0.071499f, 0.096638f, 0.002676f, 0.009956f, -0.037796f, -0.101353f, 0.062497f, -0.101994f, 0.108040f, 0.010127f, 0.014216f, 0.016886f, -0.056914f, 0.056615f, 0.011101f, 0.037906f, -0.054305f, 0.016197f, 0.005656f, 0.069041f, -0.024206f, 0.013408f, 0.054423f, -0.060686f, -0.027070f, 0.000724f, -0.045815f, 0.078239f, -0.013290f, -0.038800f, 0.079885f, 0.081108f, -0.017547f, -0.067944f, -0.010222f, -0.060368f, -0.004860f, 0.030099f, 0.000105f, -0.073950f, 0.013844f, 0.033167f, -0.018926f, 0.038043f, -0.029400f, 0.012193f, 0.050934f, -0.022183f, 0.035533f, -0.083139f, -0.074024f, 0.077363f, 0.050980f, 0.121603f, 0.000657f, -0.035269f, 0.112151f, -0.063952f, -0.048099f, 0.034212f, 0.041842f, 0.057503f, -0.048720f, -0.028539f, 0.022270f, -0.013583f, 0.066349f, -0.049461f, -0.142930f, 0.038316f, 0.089802f, 0.001887f, -0.062518f, 0.015850f, 0.049576f, -0.010322f, -0.008801f, -0.001800f, -0.040624f, -0.023716f, 0.149948f, 0.041850f, 0.040731f, -0.127664f, -0.033397f, -0.100104f, -0.086257f, 0.076422f, 0.078683f, 0.159042f, 0.071681f, -0.021516f, -0.032714f, -0.018889f, - 0.048163f, 0.034453f, -0.001163f, 0.076662f, 0.012686f, -0.031688f, -0.039147f, -0.030516f, 0.052842f, -0.001135f, 0.045680f, 0.021331f, 0.026210f, 0.005757f, -0.015571f, 0.003869f, -0.003891f, 0.005273f, -0.016450f, -0.005497f, 0.011924f, 0.010866f, 0.100023f, 0.081111f, 0.064110f, -0.009136f, 0.013995f, -0.045918f, -0.012064f, -0.030199f, -0.053201f, -0.054058f, 0.009435f, 0.022679f, 0.033667f, 0.043602f, 0.033737f, -0.030565f, -0.070736f, 0.091346f, -0.076731f, -0.037105f, -0.025472f, 0.026050f, -0.003854f, 0.039454f, 0.040838f, 0.034289f, -0.068172f, -0.031472f, -0.002489f, -0.035071f, -0.106023f, 0.049081f, -0.035091f, -0.034042f, 0.020954f, 0.051983f, -0.000171f, -0.188521f, -0.102832f, -0.126727f, 0.091979f, 0.029426f, 0.273031f, 0.295235f, 0.281952f, 0.335609f, 0.318385f, 0.240824f, 0.141376f, 0.190686f, 0.078012f, 0.028067f, -0.152881f, -0.120264f, -0.332102f, -0.277478f, -0.260069f, -0.140067f, -0.192517f, -0.133411f, -0.010175f, -0.032198f, -0.016313f, -0.007502f, 0.004725f, 0.016257f, 0.013180f, 0.055353f, 0.045900f, 0.057234f, 0.120616f, 0.136846f, 0.131637f, 0.109373f, - 0.257163f, 0.086651f, 0.113972f, 0.197020f, 0.204789f, 0.096229f, 0.207304f, 0.260673f, 0.198675f, 0.187961f, 0.178440f, 0.046520f, 0.114352f, 0.228310f, 0.213753f, 0.158379f, 0.184299f, 0.178065f, 0.020395f, -0.016146f, -0.012529f, -0.058008f, -0.092977f, 0.027692f, -0.104534f, -0.159885f, -0.126110f, -0.140918f, -0.245092f, -0.072687f, -0.146665f, -0.148322f, -0.248722f, -0.170458f, -0.214490f, -0.228098f, -0.131591f, -0.243460f, -0.307987f, -0.188760f, 0.012069f, -0.001252f} - } -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522]={ {-0.000072f, -0.000087f, -0.000165f, -0.000108f, -0.000091f, -0.000141f, -0.000119f, -0.000065f, -0.000073f, 0.000041f, 0.000162f, -0.000331f, 0.000004f, -0.000023f, -0.000104f, -0.000159f, -0.000548f, -0.000580f, -0.000858f, 0.001141f, -0.000077f, -0.000440f, -0.000301f, 0.000374f, -0.000666f, -0.000117f, -0.000248f, -0.000150f, -0.000208f, 0.000995f, 0.000447f, -0.000600f, -0.000315f, -0.000273f, 0.000055f, 0.000012f, -0.000163f, -0.000416f, -0.000685f, 0.000840f, -0.000420f, 0.000539f, 0.000367f, 0.000488f, -0.000195f, 0.000654f, -0.003981f, 0.000346f, -0.000459f, 0.000152f, -0.000395f, 0.000019f, -0.000441f, 0.000047f, -0.001046f, -0.000658f, -0.000082f, -0.000556f, -0.000132f, -0.000232f, 0.001084f, 0.000081f, -0.001193f, 0.001053f, -0.000367f, 0.000567f, 0.000051f, 0.000409f, -0.001187f, -0.000355f, -0.000293f, 0.000146f, 0.000241f, -0.000121f, -0.000337f, 0.000436f, -0.000624f, -0.000119f, -0.000364f, 0.000162f, 0.000094f, 0.000514f, 0.000465f, -0.000539f, -0.000298f, -0.000011f, -0.000190f, 0.000413f, 0.000023f, 0.000353f, -0.000326f, -0.000341f, 0.000507f, 0.002057f, -0.000866f, 0.000922f, - -0.000363f, 0.000341f, 0.000008f, 0.000490f, -0.000184f, 0.000134f, 0.000224f, 0.000258f, 0.000282f, 0.000464f, -0.000087f, 0.000067f, 0.000845f, 0.000629f, -0.001591f, 0.000335f, -0.000183f, 0.000095f, -0.000525f, 0.000376f, -0.000667f, 0.000703f, 0.000600f, 0.000295f, -0.000062f, -0.000207f, -0.000226f, 0.000500f, 0.000479f, -0.000194f, 0.000132f, 0.000855f, -0.000287f, -0.000010f, -0.000258f, 0.000106f, 0.000161f, -0.000018f, -0.000208f, 0.000403f, 0.000093f, -0.000118f, 0.008225f, -0.000555f, 0.001176f, 0.000016f, 0.000397f, 0.000195f, 0.000311f, 0.000225f, 0.000818f, -0.000413f, 0.000364f, -0.000122f, 0.000168f, 0.000470f, 0.000704f, 0.000307f, 0.000162f, -0.000282f, 0.000642f, -0.000402f, 0.000263f, -0.000165f, -0.000614f, 0.000108f, 0.000253f, 0.000065f, -0.000172f, 0.000098f, -0.000197f, 0.000465f, -0.000841f, 0.000245f, -0.000174f, 0.000273f, 0.000017f, -0.001175f, -0.000397f, 0.000168f, 0.000218f, 0.000185f, -0.000187f, -0.000231f, -0.000215f, 0.000218f, 0.000495f, -0.000150f, 0.004914f, -0.005862f, 0.001141f, -0.001426f, 0.000743f, -0.000931f, 0.000684f, -0.001264f, - -0.000400f, -0.000787f, -0.000168f, -0.000658f, 0.000027f, 0.001128f, 0.001638f, 0.000681f, 0.000341f, 0.000014f, 0.000493f, 0.001177f, 0.000835f, -0.000558f, -0.000686f, -0.000887f, -0.000448f, -0.000517f, 0.000013f, -0.000094f, -0.000111f, 0.000013f, 0.000219f, -0.000416f, 0.000480f, -0.000544f, -0.000748f, 0.000251f, -0.000048f, 0.000044f, 0.000110f, -0.000502f, -0.000601f, 0.000163f, -0.000382f, -0.000466f, -0.000129f, 0.000059f, -0.011368f, 0.002204f, -0.000621f, 0.000234f, 0.000193f, -0.001001f, -0.000477f, 0.000846f, -0.000197f, 0.000023f, 0.000961f, 0.000273f, -0.000434f, -0.000758f, 0.000655f, 0.000006f, -0.000902f, -0.001278f, -0.001817f, 0.000515f, -0.000834f, 0.000126f, -0.000301f, 0.000275f, -0.000227f, 0.000068f, -0.000964f, -0.000964f, -0.000610f, -0.000300f, -0.000616f, 0.000113f, -0.000320f, 0.000264f, 0.001019f, 0.000124f, 0.000143f, 0.000644f, 0.000153f, 0.000104f, -0.000064f, -0.000198f, -0.000741f, -0.000226f, 0.000124f, -0.000190f, -0.013575f, 0.005016f, -0.001308f, 0.001578f, -0.000838f, 0.001123f, -0.000689f, -0.000233f, -0.001195f, 0.000836f, -0.001405f, 0.000857f, - -0.000272f, 0.001219f, -0.001765f, 0.000395f, 0.001576f, 0.000420f, -0.001392f, -0.000534f, -0.000850f, -0.000393f, 0.000483f, 0.000208f, 0.000351f, -0.000269f, -0.000491f, -0.000710f, -0.000665f, -0.000111f, -0.000757f, -0.000186f, -0.000704f, -0.000540f, -0.001912f, -0.000588f, -0.000286f, 0.000044f, 0.000024f, 0.000596f, 0.000263f, 0.000585f, -0.000083f, 0.000690f, 0.000164f, 0.000004f, 0.001758f, 0.005960f, -0.001555f, 0.002681f, -0.001515f, 0.000749f, -0.001639f, 0.001411f, -0.000050f, 0.001531f, -0.000042f, -0.000085f, 0.001519f, -0.000177f, -0.000123f, 0.001322f, -0.000538f, -0.001099f, -0.001766f, 0.001698f, -0.000052f, 0.001179f, 0.000213f, 0.000852f, 0.000469f, -0.001017f, 0.000541f, 0.000488f, 0.000014f, 0.000605f, 0.000933f, -0.001013f, 0.000230f, 0.000018f, -0.000000f, -0.000562f, -0.000183f, -0.000550f, 0.000257f, -0.000077f, 0.000557f, 0.001427f, 0.000151f, 0.000745f, -0.000026f, 0.000178f, -0.000048f, 0.000254f, 0.000661f, 0.017843f, -0.004331f, 0.001744f, -0.000793f, 0.001548f, -0.000596f, 0.001199f, -0.000580f, 0.000444f, -0.001671f, 0.000852f, -0.001592f, 0.001312f, - -0.000442f, 0.000419f, -0.000417f, 0.001826f, 0.000310f, 0.000491f, -0.000789f, 0.001206f, -0.000037f, -0.000497f, 0.001060f, -0.000730f, -0.001124f, 0.000068f, -0.000302f, 0.000605f, 0.000066f, -0.000145f, -0.000317f, 0.000206f, 0.000035f, 0.000255f, -0.000746f, 0.000222f, -0.000287f, 0.001309f, -0.000162f, 0.000639f, 0.000194f, 0.000539f, 0.001039f, -0.000638f, 0.000132f, 0.000243f, -0.000245f, 0.000771f, 0.001441f, -0.009285f, 0.003584f, -0.002903f, 0.001618f, -0.001473f, 0.000426f, -0.001922f, 0.001150f, -0.000799f, 0.001631f, -0.000240f, 0.000674f, -0.001540f, -0.000697f, -0.000145f, -0.000611f, -0.000553f, 0.001886f, -0.001487f, 0.000177f, 0.000867f, -0.001860f, 0.000417f, 0.000558f, -0.000489f, 0.000540f, 0.000166f, 0.000278f, -0.001177f, -0.000178f, -0.000402f, 0.000623f, -0.000602f, 0.000304f, -0.001376f, -0.000353f, 0.000951f, 0.000392f, 0.000282f, -0.000426f, -0.000230f, -0.001110f, -0.001117f, 0.000506f, 0.000196f, -0.000137f, -0.000182f, -0.000184f, 0.000077f, 0.000005f, -0.000247f, -0.000315f, -0.014997f, 0.004804f, -0.002721f, 0.000594f, -0.000324f, 0.000749f, -0.001194f, - 0.001122f, -0.000569f, -0.000507f, -0.000221f, 0.000785f, -0.000544f, -0.000788f, 0.000440f, 0.001590f, -0.000300f, -0.000022f, -0.002885f, 0.000149f, -0.000021f, 0.001279f, -0.000511f, -0.000307f, -0.002217f, -0.000834f, -0.000036f, -0.000058f, 0.000688f, 0.000929f, -0.001686f, -0.001594f, 0.000907f, 0.000141f, -0.001733f, -0.001391f, 0.000577f, 0.000259f, -0.000151f, -0.000156f, -0.000694f, 0.000551f, -0.000251f, 0.000131f, 0.000039f, -0.000990f, -0.000416f, 0.000358f, -0.001400f, -0.000793f, -0.000312f, 0.000171f, -0.000311f, -0.014948f, 0.006529f, -0.003698f, 0.002703f, -0.002595f, 0.001197f, -0.002944f, 0.000601f, -0.001936f, 0.002909f, -0.001555f, 0.000981f, -0.000232f, -0.000050f, -0.001410f, -0.000462f, -0.000608f, 0.002619f, -0.000555f, 0.001298f, 0.002143f, 0.001174f, 0.000284f, -0.000373f, 0.000487f, -0.000560f, 0.001187f, 0.001096f, 0.000135f, -0.000682f, 0.000177f, 0.000136f, -0.000843f, -0.000458f, 0.000591f, 0.000794f, -0.000695f, -0.000753f, -0.000702f, -0.000054f, -0.000303f, 0.000278f, -0.000674f, 0.000364f, -0.001047f, 0.000197f, -0.000580f, -0.000147f, 0.000092f, -0.000522f, - -0.000571f, -0.000827f, -0.000678f, 0.005627f, 0.005842f, -0.002027f, 0.002008f, -0.002233f, 0.000454f, 0.000808f, 0.000155f, -0.000831f, 0.001164f, 0.000376f, 0.002368f, 0.001291f, 0.002661f, -0.000288f, 0.001606f, -0.000307f, 0.001058f, 0.001461f, -0.000095f, -0.001768f, 0.001876f, -0.000086f, 0.000838f, -0.000309f, 0.000082f, 0.000368f, 0.002272f, 0.000438f, -0.001107f, -0.000290f, 0.000370f, -0.000540f, 0.001730f, 0.000820f, -0.000180f, -0.000313f, -0.000858f, 0.000853f, -0.000841f, 0.001058f, 0.001060f, -0.000609f, 0.000639f, 0.000632f, 0.000335f, 0.000048f, 0.001672f, 0.001113f, 0.001241f, 0.000077f, 0.000209f, 0.000650f, -0.000276f, -0.000008f, 0.016899f, -0.005914f, 0.002170f, -0.002715f, 0.001996f, -0.001756f, 0.002541f, -0.000749f, 0.000194f, -0.001749f, 0.003770f, -0.000433f, 0.003403f, 0.000308f, 0.000643f, -0.002128f, 0.000868f, 0.003450f, -0.000959f, -0.002710f, 0.000484f, 0.000228f, 0.001372f, -0.001920f, 0.001727f, 0.000096f, 0.000208f, -0.000062f, -0.001900f, -0.000458f, 0.000385f, -0.002236f, 0.000448f, 0.001080f, 0.000843f, -0.000539f, -0.000135f, 0.000038f, - 0.001155f, 0.000461f, -0.000139f, -0.000353f, 0.000908f, 0.000727f, 0.002183f, 0.000687f, -0.000274f, 0.001331f, 0.000520f, 0.000017f, 0.000435f, 0.001048f, 0.000636f, 0.000269f, 0.000181f, 0.005592f, -0.008167f, 0.004833f, -0.003650f, 0.001480f, 0.000517f, -0.000410f, -0.000338f, 0.000924f, -0.002076f, -0.001347f, -0.001088f, -0.000872f, -0.002825f, 0.001370f, -0.002624f, -0.000154f, -0.002103f, 0.000713f, -0.001587f, -0.001287f, -0.000643f, 0.002310f, 0.000314f, 0.002245f, 0.001193f, 0.001519f, 0.002264f, 0.000059f, -0.000302f, -0.000410f, 0.000631f, 0.001688f, -0.000156f, -0.000192f, -0.001177f, 0.000823f, -0.000149f, -0.000766f, 0.000644f, 0.000471f, 0.001825f, 0.000675f, 0.000861f, -0.001367f, -0.000602f, -0.000149f, -0.000237f, 0.000817f, -0.002611f, 0.000489f, -0.000636f, -0.000519f, -0.000802f, -0.000997f, -0.000299f, -0.000988f, 0.000382f, -0.000715f, -0.000089f, -0.001460f, -0.017319f, -0.003833f, 0.000731f, -0.003336f, -0.001412f, 0.000076f, -0.000162f, -0.002854f, 0.000740f, -0.002843f, 0.000023f, 0.002170f, -0.000474f, -0.000438f, 0.001171f, 0.000738f, 0.001194f, 0.000006f, - 0.001457f, -0.000905f, 0.000375f, 0.001685f, -0.000173f, -0.000178f, -0.001201f, 0.001600f, -0.001344f, -0.000779f, 0.000387f, 0.000606f, 0.001225f, 0.003862f, -0.001125f, -0.000710f, -0.001741f, 0.000025f, -0.001294f, 0.000227f, -0.000543f, -0.001921f, -0.000158f, 0.002295f, 0.000625f, -0.001667f, -0.000833f, 0.000714f, -0.001006f, -0.001282f, 0.000190f, -0.000643f, 0.000104f, 0.000178f, 0.001458f, 0.000140f, 0.000700f, 0.000320f, -0.001283f, -0.000715f, 0.000760f, 0.000665f, -0.000529f, -0.021176f, 0.017437f, -0.006123f, 0.005163f, -0.003841f, 0.002896f, -0.001126f, 0.001834f, -0.002044f, 0.001220f, 0.001442f, 0.002077f, -0.001385f, 0.002519f, 0.001249f, 0.004307f, -0.000691f, 0.000332f, -0.002307f, 0.000546f, -0.000814f, -0.001473f, -0.001787f, -0.002086f, -0.001892f, 0.002773f, -0.000132f, 0.003336f, 0.000873f, 0.000576f, -0.000060f, 0.000385f, -0.001492f, 0.000193f, -0.000544f, 0.000655f, 0.002002f, 0.000308f, 0.000662f, 0.000066f, 0.000212f, -0.001576f, -0.000830f, -0.000115f, -0.000112f, 0.000145f, -0.000459f, -0.001462f, 0.000040f, 0.001442f, -0.000477f, 0.000379f, 0.000445f, - -0.001309f, 0.000863f, 0.000298f, 0.000479f, -0.000327f, 0.000151f, -0.000209f, -0.000378f, 0.012386f, -0.001837f, -0.003918f, -0.001323f, -0.000779f, -0.000581f, -0.003443f, -0.001783f, 0.001037f, 0.000658f, 0.001061f, 0.001304f, -0.002294f, 0.001008f, -0.000401f, 0.000903f, 0.003839f, -0.003762f, 0.001382f, 0.001378f, 0.001090f, -0.000929f, -0.002146f, 0.001778f, 0.000576f, 0.001288f, 0.002391f, 0.000059f, 0.003272f, 0.000334f, 0.001556f, 0.000181f, 0.001077f, -0.000827f, 0.001279f, 0.000929f, 0.001224f, -0.000394f, 0.000451f, -0.000040f, 0.001551f, 0.001883f, -0.002648f, 0.003711f, 0.000379f, 0.001072f, 0.000229f, 0.000685f, 0.000780f, -0.000726f, 0.002266f, 0.001230f, 0.000156f, 0.002053f, 0.000927f, -0.001065f, -0.000019f, -0.000701f, -0.000723f, -0.000565f, 0.000441f, -0.000123f, 0.000202f, -0.000018f, -0.002164f, 0.009835f, 0.000922f, 0.002055f, -0.002459f, -0.000415f, -0.006209f, 0.001564f, -0.000230f, -0.004206f, 0.003651f, -0.001915f, 0.000201f, 0.002684f, 0.001256f, 0.002029f, -0.001435f, 0.000926f, -0.001903f, 0.000093f, -0.001615f, 0.000687f, -0.002495f, 0.003741f, - 0.002742f, 0.002229f, 0.002620f, 0.000613f, -0.000758f, -0.001548f, 0.000801f, 0.002071f, 0.000089f, 0.001425f, -0.000914f, 0.000323f, 0.001428f, 0.000988f, 0.001294f, 0.000124f, 0.000521f, -0.000116f, -0.000774f, 0.000891f, -0.000509f, 0.000433f, 0.000441f, -0.000851f, 0.001288f, -0.001599f, 0.001543f, -0.000737f, 0.001116f, 0.001593f, -0.001829f, 0.000213f, 0.000308f, -0.000765f, -0.001426f, 0.001082f, -0.002368f, -0.001881f, 0.001253f, 0.000503f, 0.000620f, 0.000479f, 0.001591f, 0.001466f, 0.015370f, -0.012851f, 0.004305f, -0.003226f, 0.001085f, 0.003967f, 0.003211f, -0.002183f, 0.003857f, 0.002164f, 0.002311f, -0.001648f, 0.001050f, -0.000856f, 0.004584f, 0.001257f, 0.001258f, 0.001765f, 0.001909f, 0.001215f, 0.001286f, -0.003834f, 0.000554f, -0.006907f, -0.002452f, -0.000663f, -0.004002f, 0.000967f, 0.002052f, -0.001510f, -0.002202f, -0.002537f, -0.002480f, -0.001309f, 0.001320f, 0.001075f, -0.003574f, -0.004074f, -0.000383f, -0.002086f, 0.001032f, 0.000883f, 0.000310f, -0.000306f, 0.001840f, -0.001023f, 0.000016f, -0.000282f, -0.000943f, -0.002618f, 0.001932f, 0.003414f, - -0.000553f, -0.000442f, 0.001519f, -0.002428f, 0.002836f, 0.000744f, -0.001586f, -0.000067f, -0.001484f, -0.000593f, -0.000457f, -0.000999f, -0.000378f, -0.000680f, -0.002142f, -0.023963f, 0.002254f, -0.002240f, 0.000760f, 0.002319f, 0.001628f, 0.004755f, -0.002117f, -0.000279f, 0.000273f, 0.005715f, 0.001903f, -0.004670f, -0.003102f, 0.002463f, 0.003323f, -0.000970f, -0.001425f, -0.000200f, 0.001465f, 0.003457f, 0.003493f, -0.000154f, -0.006603f, -0.001974f, -0.000797f, -0.000877f, 0.003629f, -0.001824f, 0.002064f, 0.000120f, -0.000544f, -0.003455f, 0.000132f, 0.002584f, -0.004433f, -0.002610f, -0.001147f, -0.000841f, -0.002176f, -0.001790f, -0.004157f, -0.000826f, -0.002865f, -0.000055f, 0.000448f, 0.002819f, -0.002119f, -0.001375f, 0.000103f, -0.000362f, 0.000304f, -0.002564f, 0.000831f, 0.000886f, 0.000161f, 0.000085f, -0.002042f, -0.001764f, -0.001110f, -0.000581f, -0.000307f, -0.003262f, 0.000495f, 0.000918f, -0.001558f, -0.002978f, -0.013890f, 0.014980f, -0.002004f, 0.001051f, 0.003625f, 0.004310f, -0.003040f, 0.002129f, 0.000926f, 0.002699f, 0.001887f, 0.003764f, 0.002201f, -0.002381f, - -0.003987f, 0.000683f, 0.004499f, 0.008807f, -0.001967f, -0.002868f, 0.002422f, 0.001504f, -0.001522f, -0.004206f, -0.000729f, -0.000780f, -0.003736f, 0.003482f, 0.004201f, 0.000142f, 0.001094f, -0.000005f, 0.003339f, -0.002413f, -0.007544f, 0.003318f, -0.000765f, 0.002644f, 0.001396f, 0.000173f, -0.001743f, -0.002899f, 0.002217f, 0.002485f, 0.001941f, -0.000289f, 0.000013f, 0.002721f, 0.001672f, 0.000872f, -0.001413f, 0.002293f, 0.002054f, -0.000268f, -0.000403f, -0.001262f, 0.001722f, 0.000087f, -0.003616f, 0.003162f, 0.002057f, -0.000676f, 0.001083f, -0.000444f, 0.000287f, -0.000045f, 0.001112f, 0.002708f, 0.001112f, -0.000454f, -0.000758f, -0.000087f, 0.004247f, 0.000215f, -0.003162f, -0.006563f, 0.001662f, -0.000306f, -0.005382f, 0.001877f, -0.001735f, 0.000288f, -0.001992f, -0.001579f, 0.001792f, 0.004176f, 0.000589f, 0.005520f, 0.002574f, -0.002745f, -0.003553f, 0.006032f, -0.002523f, -0.000177f, 0.000625f, -0.005632f, 0.000047f, 0.002995f, -0.003183f, -0.000864f, 0.003874f, 0.000241f, 0.002071f, 0.000057f, 0.002588f, -0.000426f, -0.001587f, -0.000236f, 0.003409f, 0.004449f, - -0.001356f, 0.000888f, 0.000885f, 0.002954f, -0.001661f, -0.000338f, 0.000693f, -0.000784f, 0.002047f, 0.000836f, 0.000278f, -0.001056f, 0.001664f, 0.001669f, 0.000211f, 0.000030f, 0.001407f, 0.001946f, -0.002289f, -0.000079f, 0.000797f, 0.001025f, -0.001112f, 0.000911f, 0.031494f, -0.002770f, 0.000753f, 0.002186f, -0.002573f, -0.004606f, -0.002586f, -0.000963f, -0.005283f, -0.005676f, 0.000683f, -0.004997f, -0.002076f, -0.001265f, -0.001063f, 0.003475f, 0.003984f, 0.001443f, 0.008090f, 0.001684f, -0.003668f, 0.007034f, -0.000453f, 0.005060f, -0.001308f, -0.000237f, -0.004237f, 0.000439f, 0.004173f, 0.000138f, -0.001700f, -0.000488f, 0.000627f, -0.000709f, -0.000610f, 0.001809f, -0.003329f, 0.001730f, 0.000758f, -0.001392f, -0.003145f, -0.001988f, 0.002825f, 0.002862f, 0.003280f, -0.004844f, 0.003123f, 0.001110f, 0.000108f, 0.000556f, 0.000744f, 0.000898f, 0.000904f, -0.000102f, 0.000514f, 0.003071f, -0.000525f, 0.001429f, 0.001525f, -0.000766f, 0.002515f, 0.002972f, 0.000695f, 0.000168f, 0.002665f, 0.002125f, 0.001608f, -0.018531f, -0.030965f, 0.010972f, -0.000948f, 0.004457f, - -0.005553f, 0.000069f, -0.006403f, -0.000999f, -0.009158f, 0.003697f, 0.004000f, -0.000398f, -0.000850f, -0.000313f, 0.000693f, -0.002359f, -0.007816f, 0.013922f, 0.000842f, -0.002025f, 0.004712f, 0.000644f, -0.002684f, 0.006563f, 0.007414f, -0.003465f, 0.004327f, 0.000634f, -0.001078f, -0.007305f, -0.003984f, 0.005287f, -0.002951f, 0.000537f, -0.000485f, 0.003509f, -0.005866f, -0.006736f, 0.000823f, -0.000163f, -0.004473f, 0.002383f, 0.000453f, -0.003003f, 0.001856f, -0.003286f, -0.002585f, 0.000918f, 0.001082f, -0.000124f, -0.000870f, -0.001710f, 0.001740f, 0.002726f, 0.000390f, 0.000649f, -0.000912f, -0.001176f, 0.002602f, 0.000001f, 0.000561f, -0.003012f, -0.000643f, -0.002125f, 0.001468f, 0.001871f, 0.000011f, 0.001474f, -0.009984f, 0.029679f, -0.013296f, 0.002142f, 0.001876f, 0.007374f, -0.001014f, 0.004672f, -0.004771f, 0.000195f, -0.009087f, -0.001827f, -0.000010f, 0.003536f, 0.000553f, 0.003640f, -0.002635f, -0.005592f, 0.000666f, -0.008360f, -0.008729f, 0.000137f, -0.002889f, -0.000279f, 0.000715f, 0.001124f, -0.002179f, -0.001566f, -0.003122f, -0.004833f, 0.001880f, 0.002148f, - -0.006136f, -0.002908f, -0.007705f, -0.000017f, -0.003400f, 0.002626f, 0.003246f, -0.006491f, 0.001014f, 0.005088f, 0.004734f, -0.002598f, 0.001743f, -0.001964f, -0.000863f, 0.001314f, -0.002833f, -0.000783f, 0.002722f, 0.001917f, 0.001888f, 0.002071f, 0.001265f, -0.000849f, 0.001838f, 0.000977f, -0.001239f, -0.000263f, 0.003696f, -0.000580f, -0.001553f, -0.000738f, 0.001606f, -0.001764f, -0.003549f, -0.000500f, -0.001131f, 0.000693f, 0.000964f, -0.000806f, -0.024852f, -0.007884f, 0.002506f, -0.004157f, 0.003249f, -0.001895f, -0.000223f, -0.007523f, -0.008962f, -0.001462f, -0.003300f, 0.003363f, 0.000788f, -0.001345f, -0.018244f, 0.008745f, 0.000396f, 0.007581f, 0.009548f, 0.006478f, -0.009650f, -0.002596f, -0.001150f, -0.002652f, 0.001792f, 0.001927f, -0.000397f, -0.003738f, 0.003573f, -0.006678f, -0.003634f, 0.005331f, 0.000061f, -0.002755f, 0.006383f, -0.000179f, 0.006708f, -0.002729f, -0.001334f, 0.000488f, 0.001949f, -0.005308f, -0.003889f, -0.001222f, 0.003686f, -0.001777f, 0.000415f, -0.001925f, 0.002392f, 0.002907f, 0.000417f, -0.000201f, -0.005978f, -0.000985f, 0.002601f, 0.002767f, - -0.002022f, 0.003136f, 0.000946f, -0.001396f, 0.000702f, -0.004027f, -0.001351f, -0.002853f, 0.002141f, -0.000092f, -0.001082f, 0.000370f, -0.006397f, -0.000476f, 0.000900f, 0.002391f, 0.016043f, 0.005610f, -0.009156f, -0.001319f, -0.003763f, 0.003590f, -0.005395f, 0.005067f, -0.000741f, 0.005842f, 0.004189f, 0.007028f, -0.008738f, 0.011185f, -0.006353f, 0.006661f, -0.003318f, 0.004105f, 0.001068f, 0.003525f, -0.005448f, -0.013027f, 0.005524f, 0.009541f, -0.002996f, 0.004078f, -0.004340f, 0.001386f, -0.002716f, 0.010009f, 0.000293f, -0.000692f, 0.002717f, -0.004462f, -0.002892f, -0.002508f, 0.004679f, 0.000305f, -0.001159f, 0.000263f, -0.000420f, 0.006942f, 0.004916f, -0.002250f, 0.002607f, 0.002793f, -0.002329f, -0.001365f, -0.002044f, -0.004826f, -0.000231f, 0.000342f, -0.000209f, -0.001630f, -0.004652f, 0.000018f, 0.008352f, 0.004486f, -0.002767f, 0.004605f, 0.000057f, 0.000143f, 0.004221f, 0.002138f, -0.003187f, 0.001626f, 0.001410f, 0.004076f, 0.005229f, -0.003475f, 0.002286f, 0.002913f, 0.033130f, -0.027388f, -0.004773f, 0.001159f, -0.000744f, -0.007710f, 0.002296f, 0.001775f, - 0.010417f, -0.003674f, 0.001858f, 0.008565f, -0.000003f, 0.005082f, 0.017049f, -0.003935f, -0.001377f, -0.009174f, -0.008674f, 0.000218f, 0.002599f, -0.003961f, 0.001373f, 0.015089f, 0.008548f, 0.001111f, 0.000296f, 0.001090f, 0.008154f, -0.007188f, -0.003406f, -0.000534f, 0.004055f, -0.000815f, 0.000741f, -0.003706f, 0.001036f, -0.006476f, -0.004051f, -0.004924f, -0.000249f, -0.004420f, 0.000694f, -0.007772f, 0.003187f, -0.015406f, -0.004265f, 0.001984f, 0.002463f, -0.000683f, -0.003895f, 0.001075f, 0.000071f, 0.001727f, -0.004575f, 0.001756f, -0.002853f, -0.002870f, -0.007165f, -0.005134f, -0.001917f, -0.000950f, -0.000118f, 0.001032f, 0.001694f, 0.000290f, 0.000542f, -0.004163f, -0.000546f, -0.005074f, -0.001294f, -0.000537f, -0.000468f, -0.021488f, -0.015086f, -0.001489f, -0.003392f, 0.010654f, -0.000063f, 0.001652f, -0.014263f, 0.000331f, 0.001465f, 0.000414f, 0.000626f, 0.007973f, -0.010847f, 0.001833f, -0.002672f, -0.007531f, -0.003933f, 0.006260f, -0.002776f, 0.005037f, -0.002306f, 0.002778f, 0.001220f, -0.001452f, -0.001296f, 0.003205f, -0.000959f, -0.000376f, -0.009392f, 0.004089f, - 0.003498f, 0.003461f, 0.003843f, -0.008297f, -0.008747f, 0.004507f, 0.006640f, -0.008880f, 0.002650f, 0.000960f, 0.006906f, 0.004011f, 0.000184f, 0.004743f, -0.003165f, -0.005426f, -0.001324f, -0.010226f, -0.007854f, -0.001028f, -0.000927f, 0.001391f, -0.005334f, 0.001484f, -0.004397f, -0.012966f, -0.004336f, -0.003588f, -0.013226f, -0.000084f, -0.002658f, -0.001549f, 0.000845f, 0.003902f, -0.004323f, 0.002441f, 0.001004f, -0.005637f, -0.004241f, -0.004244f, -0.001505f, -0.001063f, -0.013332f, 0.019842f, -0.010684f, -0.004682f, -0.006311f, 0.001381f, 0.001571f, 0.002741f, -0.001412f, 0.008522f, 0.006458f, -0.006508f, -0.011270f, 0.003936f, -0.004298f, 0.010008f, 0.000739f, 0.004124f, 0.005290f, -0.004145f, -0.003849f, 0.013352f, -0.007881f, -0.002166f, -0.004027f, 0.000188f, -0.001686f, 0.001509f, -0.002348f, -0.001216f, -0.010539f, 0.008954f, -0.003255f, -0.001155f, 0.010968f, -0.007856f, -0.009468f, 0.000509f, -0.004278f, -0.006596f, -0.000003f, -0.003568f, 0.002536f, -0.014058f, -0.004478f, -0.003753f, -0.000244f, 0.004407f, 0.000162f, 0.000537f, 0.002609f, -0.002783f, 0.002039f, 0.002767f, - 0.002934f, 0.002587f, -0.001576f, -0.003382f, -0.002339f, 0.002972f, -0.008058f, -0.002329f, -0.001710f, -0.002586f, 0.005677f, -0.004232f, -0.005500f, 0.005275f, 0.002105f, 0.002907f, 0.007302f, -0.003219f, -0.001952f, 0.002705f, -0.003371f, -0.027977f, 0.013299f, 0.014376f, 0.007125f, 0.006451f, -0.005403f, 0.006570f, -0.012375f, -0.000048f, -0.014462f, -0.002271f, -0.006600f, 0.006056f, -0.007189f, -0.005971f, -0.002036f, -0.010666f, 0.002483f, -0.005100f, 0.003989f, -0.010028f, 0.015491f, -0.005681f, 0.007023f, -0.006991f, 0.000083f, -0.006998f, -0.002683f, 0.003235f, 0.009686f, 0.011124f, -0.006363f, -0.000344f, -0.004013f, -0.006466f, -0.005261f, -0.016824f, -0.001027f, 0.002383f, -0.016116f, 0.005666f, 0.002391f, 0.003876f, 0.006729f, 0.004312f, 0.001791f, -0.005547f, -0.002410f, -0.006139f, -0.003672f, 0.002766f, -0.013122f, 0.004552f, 0.001648f, 0.000473f, -0.006646f, -0.003758f, 0.002350f, 0.009675f, 0.003336f, 0.002294f, -0.004830f, 0.003889f, -0.000362f, -0.004988f, 0.000285f, -0.003656f, -0.006451f, -0.003017f, -0.002405f, -0.005056f, 0.004337f, 0.003050f, 0.003162f, 0.002515f, - 0.022567f, -0.015924f, -0.006805f, -0.002248f, -0.000298f, 0.010841f, -0.002322f, 0.003365f, -0.006612f, 0.003160f, -0.004182f, -0.018307f, -0.012586f, -0.004912f, 0.006270f, -0.001075f, -0.010139f, -0.009646f, -0.019826f, -0.006661f, 0.002351f, 0.002333f, 0.000753f, -0.002356f, -0.001304f, -0.006434f, 0.001460f, 0.002212f, 0.003214f, 0.000413f, -0.001013f, -0.002714f, -0.009476f, -0.002757f, -0.002222f, 0.004344f, -0.001059f, -0.007860f, -0.003003f, 0.001781f, -0.008456f, 0.001051f, -0.008704f, 0.004430f, 0.006757f, -0.006842f, -0.012547f, -0.002835f, -0.003929f, -0.006160f, 0.000639f, 0.000715f, 0.001292f, 0.002654f, 0.000236f, -0.005358f, 0.007971f, 0.011782f, -0.005763f, 0.004625f, 0.002207f, 0.005343f, -0.008652f, 0.002885f, 0.001360f, 0.002697f, -0.012442f, 0.009595f, 0.001567f, 0.000652f, -0.001122f, -0.007776f, 0.002435f, 0.000372f, 0.002536f, 0.037207f, -0.020583f, 0.002044f, -0.001961f, -0.004258f, -0.015343f, -0.000669f, -0.000754f, 0.012751f, 0.005843f, 0.025591f, -0.010021f, 0.001169f, 0.002854f, 0.006287f, -0.002534f, -0.000963f, 0.010357f, -0.006247f, 0.014872f, 0.009216f, - -0.020569f, 0.019880f, 0.006953f, -0.006842f, -0.005101f, -0.007476f, -0.004022f, 0.001676f, 0.000903f, -0.005282f, 0.013044f, 0.001959f, -0.006273f, -0.005242f, 0.001246f, -0.006549f, -0.012149f, 0.000435f, 0.007185f, 0.003206f, 0.008739f, -0.003743f, 0.002673f, 0.009774f, 0.013477f, 0.003564f, -0.014102f, 0.004984f, -0.004601f, -0.007332f, 0.001948f, 0.006346f, 0.003309f, -0.001279f, -0.012832f, -0.010689f, 0.015590f, -0.001595f, 0.012021f, 0.001895f, -0.004889f, 0.006485f, -0.010625f, -0.004083f, 0.004983f, -0.000734f, 0.010368f, -0.007701f, -0.016644f, -0.003893f, -0.000759f, -0.004205f, -0.003760f, 0.011440f, -0.042383f, -0.027739f, 0.009403f, -0.014685f, 0.003933f, -0.007620f, -0.025876f, -0.019285f, 0.033197f, -0.016108f, 0.014672f, 0.008054f, -0.009404f, 0.007309f, -0.005591f, 0.010076f, 0.011200f, -0.001318f, -0.003935f, 0.019687f, -0.007169f, -0.023425f, -0.000217f, -0.010130f, 0.001743f, 0.001616f, 0.013103f, 0.006713f, 0.002256f, 0.006161f, -0.006757f, -0.000541f, 0.014403f, 0.009049f, -0.003299f, 0.003326f, -0.013839f, -0.021010f, -0.015686f, -0.011086f, -0.003554f, -0.003442f, - 0.003200f, -0.002435f, -0.006294f, 0.012604f, 0.002867f, -0.010382f, -0.009812f, -0.003170f, 0.003237f, -0.010444f, 0.003399f, 0.011749f, -0.000813f, 0.004099f, -0.008970f, 0.006053f, 0.004208f, 0.001044f, 0.004317f, -0.007850f, -0.011956f, -0.016537f, 0.007605f, 0.005953f, 0.000103f, 0.005950f, 0.000787f, -0.007676f, -0.001895f, 0.000393f, -0.013121f, -0.001134f, -0.020077f, -0.050644f, 0.016367f, -0.004623f, -0.003957f, 0.008295f, 0.001504f, 0.004354f, 0.021080f, 0.012382f, 0.015738f, 0.007664f, 0.021739f, -0.004547f, -0.022611f, 0.002633f, -0.003205f, -0.009959f, -0.020140f, -0.009031f, 0.016174f, 0.003275f, -0.001957f, 0.002975f, -0.002089f, -0.000313f, 0.013469f, 0.001269f, 0.004472f, -0.002698f, 0.002693f, 0.013696f, -0.004790f, -0.010093f, 0.006359f, -0.017510f, -0.017961f, -0.011488f, -0.003062f, -0.000032f, 0.006156f, 0.016175f, -0.000678f, -0.006246f, -0.017572f, -0.027719f, -0.010554f, -0.004454f, -0.002615f, -0.000658f, 0.009047f, -0.012951f, 0.021456f, 0.011215f, -0.003177f, 0.006007f, -0.009911f, 0.001154f, -0.000890f, 0.009944f, 0.018994f, 0.013099f, -0.012923f, -0.005414f, - 0.002249f, -0.002350f, -0.003630f, 0.000595f, -0.007207f, -0.019896f, -0.002545f, -0.004018f, -0.002396f, 0.002634f, -0.008421f, -0.002942f, 0.021553f, 0.021791f, 0.008227f, 0.014972f, 0.011184f, 0.022785f, -0.017718f, 0.023630f, -0.026115f, -0.003634f, 0.026912f, 0.036299f, 0.008642f, -0.001072f, 0.014116f, -0.009647f, -0.011247f, 0.026553f, 0.005456f, -0.002785f, 0.007561f, 0.021552f, -0.003983f, 0.013643f, -0.002701f, -0.004016f, -0.001031f, 0.010315f, -0.022226f, -0.001803f, 0.012951f, -0.004175f, 0.002681f, -0.007308f, 0.006401f, 0.019794f, -0.015774f, 0.006630f, -0.003588f, 0.007162f, -0.007484f, 0.013615f, 0.002654f, 0.005566f, 0.006713f, -0.019949f, 0.011877f, -0.028181f, -0.004272f, 0.017521f, 0.003484f, -0.009451f, 0.020011f, -0.005351f, -0.009246f, 0.014199f, -0.003633f, -0.002865f, -0.000220f, 0.008912f, 0.000729f, 0.002994f, -0.013928f, 0.006641f, 0.003565f, 0.031973f, -0.021237f, -0.009452f, 0.005116f, -0.005351f, 0.009557f, 0.009335f, -0.008448f, 0.022090f, 0.011509f, 0.041905f, -0.025917f, 0.001147f, -0.003973f, -0.006853f, 0.001086f, -0.009445f, -0.003780f, -0.030810f, - -0.025570f, -0.025694f, 0.008918f, -0.005346f, 0.008840f, -0.005880f, -0.018370f, 0.029832f, 0.021172f, -0.013917f, -0.011257f, -0.016446f, -0.003012f, 0.006294f, 0.010288f, 0.011958f, -0.000391f, 0.009201f, -0.002202f, -0.011986f, -0.013899f, 0.008803f, -0.006024f, 0.027026f, 0.017645f, 0.024880f, 0.004133f, 0.008850f, 0.025384f, 0.016839f, -0.004781f, 0.004167f, -0.000418f, -0.000079f, 0.003342f, -0.011964f, -0.007556f, 0.003988f, -0.013644f, -0.015368f, 0.015225f, 0.015837f, -0.017084f, -0.001170f, 0.032811f, 0.021591f, -0.000178f, -0.011221f, -0.001306f, 0.005880f, 0.007070f, -0.005102f, -0.010739f, 0.013405f, 0.000259f, 0.002569f, 0.011514f, 0.011958f, -0.012161f, 0.004728f, -0.000689f, 0.004176f, -0.019400f, 0.002548f, 0.020935f, -0.020476f, 0.033299f, 0.012504f, -0.005039f, -0.001604f, 0.010080f, -0.013171f, -0.016997f, 0.013613f, -0.020208f, -0.025978f, 0.006227f, -0.014174f, -0.018166f, -0.009696f, 0.016277f, 0.040782f, 0.016528f, -0.022973f, 0.041719f, 0.004404f, -0.007204f, 0.007114f, -0.025278f, 0.005771f, 0.002815f, -0.018214f, 0.014703f, -0.005278f, 0.002403f, -0.013267f, - 0.006527f, -0.012177f, 0.020754f, -0.025883f, -0.009996f, -0.009303f, 0.011396f, 0.013377f, 0.011722f, -0.014039f, 0.003224f, -0.014666f, -0.004778f, 0.006907f, 0.017130f, 0.007640f, -0.009000f, 0.016785f, 0.008079f, 0.013392f, 0.000105f, 0.015691f, -0.008035f, 0.008332f, -0.025848f, 0.027258f, -0.003377f, 0.003087f, -0.008419f, -0.015485f, -0.000290f, 0.008417f, 0.021295f, 0.005550f, -0.027934f, 0.010273f, -0.012065f, 0.020763f, 0.000589f, -0.009924f, 0.002852f, -0.009089f, 0.003046f, -0.017901f, 0.004505f, -0.068393f, 0.003911f, 0.012458f, 0.028068f, 0.009817f, -0.041752f, 0.057634f, 0.021660f, -0.025100f, 0.010202f, 0.057345f, 0.013538f, -0.012804f, -0.000855f, -0.033289f, 0.018428f, 0.002556f, -0.007891f, 0.005868f, 0.012568f, -0.021227f, 0.012718f, -0.026827f, 0.003798f, -0.024349f, -0.021911f, -0.008693f, 0.011577f, 0.017316f, -0.011580f, 0.015292f, -0.023825f, -0.002485f, 0.028630f, 0.003655f, -0.009118f, -0.002143f, 0.006319f, -0.005282f, -0.017416f, -0.019270f, -0.001793f, -0.008175f, 0.020969f, -0.026888f, 0.030745f, 0.010785f, 0.004772f, -0.008644f, -0.002303f, 0.015178f, - -0.010181f, 0.020050f, 0.005621f, 0.018329f, -0.005181f, -0.008172f, -0.028414f, 0.011739f, -0.001909f, -0.028593f, 0.010198f, -0.000167f, 0.019592f, 0.031789f, -0.011444f, 0.008957f, 0.015829f, 0.018061f, 0.004371f, -0.006400f, -0.000614f, -0.033694f, -0.000676f, 0.007011f, 0.010071f, 0.004930f}, - {-0.000085f, -0.000110f, -0.000233f, -0.000152f, -0.000064f, -0.000268f, -0.000373f, -0.000034f, -0.000201f, -0.000178f, 0.000051f, 0.000100f, 0.000053f, 0.000032f, -0.000142f, 0.000357f, -0.000041f, 0.000200f, -0.000520f, -0.000600f, -0.000007f, -0.001067f, -0.000421f, 0.000439f, 0.000043f, 0.000129f, 0.000086f, 0.000745f, 0.000011f, 0.000318f, 0.000056f, 0.000486f, 0.000031f, -0.000377f, -0.000522f, -0.000614f, -0.001068f, 0.000077f, -0.000104f, 0.000038f, -0.000438f, -0.000073f, 0.000301f, 0.000368f, -0.000247f, -0.000290f, -0.004608f, 0.000444f, -0.001004f, -0.000048f, -0.000365f, -0.000677f, 0.000375f, 0.001556f, 0.000019f, 0.000799f, -0.000868f, -0.000218f, 0.000612f, -0.000558f, 0.000189f, 0.001087f, -0.000628f, -0.000200f, -0.000286f, -0.000053f, 0.000171f, -0.000216f, 0.000322f, 0.000216f, -0.000234f, 0.000416f, -0.000234f, -0.000008f, -0.000865f, 0.000007f, -0.000075f, 0.000219f, 0.000165f, 0.000420f, -0.000359f, 0.000712f, -0.000091f, 0.000595f, -0.000175f, 0.000002f, 0.000460f, -0.000135f, 0.000340f, 0.000153f, 0.000347f, 0.000074f, 0.000330f, 0.001963f, -0.001509f, 0.000965f, - -0.001189f, 0.000630f, -0.000572f, -0.000565f, -0.000333f, -0.000315f, 0.000368f, 0.000418f, -0.001476f, -0.000067f, 0.000236f, -0.000135f, -0.000233f, -0.000860f, -0.000301f, 0.000636f, 0.000960f, 0.000486f, 0.001504f, 0.000316f, -0.000247f, 0.000319f, 0.000275f, -0.000139f, 0.000504f, 0.001071f, -0.000388f, 0.000002f, 0.000469f, -0.000001f, -0.000084f, -0.000745f, -0.000011f, 0.000396f, 0.000327f, 0.000074f, 0.000040f, -0.000240f, 0.000287f, -0.000016f, 0.000052f, 0.000027f, 0.007104f, -0.000421f, 0.000655f, -0.000407f, 0.000494f, -0.000497f, 0.000152f, -0.000091f, -0.000087f, 0.000446f, -0.000335f, -0.001242f, 0.000408f, 0.000173f, 0.000434f, 0.000909f, 0.000501f, 0.000353f, -0.000079f, -0.000702f, -0.000218f, 0.000384f, -0.000064f, -0.000078f, 0.000761f, -0.000877f, -0.000256f, 0.000027f, -0.000121f, -0.000185f, 0.000384f, 0.000425f, 0.000508f, 0.000177f, 0.000204f, -0.000150f, 0.000691f, 0.000014f, 0.000538f, 0.000398f, -0.000083f, -0.000022f, 0.000273f, 0.000050f, -0.000107f, -0.000023f, 0.005173f, -0.004979f, 0.000758f, -0.001358f, 0.000698f, -0.000108f, 0.000497f, -0.000492f, - 0.000912f, -0.000413f, 0.000543f, -0.001200f, 0.000023f, -0.000702f, 0.000172f, -0.000123f, -0.000188f, -0.000332f, -0.000898f, -0.000102f, 0.000077f, -0.000442f, 0.000687f, -0.000334f, -0.000547f, -0.000667f, 0.000363f, -0.000430f, 0.000986f, -0.000116f, -0.000027f, 0.000290f, -0.000027f, 0.000013f, -0.000484f, -0.000388f, -0.000138f, 0.000097f, -0.000207f, -0.000444f, 0.000354f, 0.000272f, 0.000663f, -0.000167f, 0.000193f, -0.000101f, -0.012232f, 0.001378f, -0.000964f, -0.000025f, -0.000191f, -0.001073f, 0.001055f, -0.000324f, 0.000049f, 0.000415f, 0.000092f, 0.001229f, -0.000112f, -0.000575f, 0.001486f, 0.000568f, 0.001337f, -0.000082f, -0.001886f, -0.001153f, -0.000934f, 0.000705f, -0.001007f, 0.000027f, -0.000397f, -0.000378f, 0.000063f, 0.000231f, -0.000326f, -0.000631f, -0.000476f, 0.000317f, 0.000372f, 0.000747f, -0.000111f, -0.000166f, -0.000097f, 0.000442f, -0.000603f, 0.000090f, 0.000174f, 0.000313f, -0.000499f, 0.000419f, -0.000595f, -0.000152f, -0.015441f, 0.005518f, -0.002303f, 0.002521f, -0.001845f, 0.001124f, -0.001995f, 0.001044f, -0.001494f, 0.000496f, 0.001021f, -0.000007f, - 0.000361f, 0.000920f, -0.000682f, 0.000643f, -0.000860f, -0.000663f, -0.001839f, 0.001567f, -0.001098f, 0.001028f, 0.000037f, -0.000072f, -0.001762f, -0.000129f, 0.000289f, -0.000312f, -0.000099f, -0.000132f, 0.000676f, -0.000176f, -0.000543f, 0.000472f, 0.000127f, -0.000291f, -0.000002f, -0.000049f, 0.000026f, 0.000239f, -0.000499f, 0.001119f, -0.000131f, -0.000824f, -0.000111f, -0.000485f, 0.000820f, 0.007058f, -0.001442f, 0.002714f, -0.001155f, 0.000970f, -0.000923f, 0.003365f, -0.000571f, 0.001821f, -0.000136f, -0.000075f, 0.000516f, 0.000052f, -0.002205f, 0.000568f, -0.000135f, -0.000975f, -0.000176f, 0.000088f, -0.002788f, -0.000031f, 0.000311f, 0.000952f, 0.000054f, -0.000498f, -0.000034f, 0.001025f, 0.000258f, -0.000442f, -0.000883f, 0.001514f, -0.000832f, 0.000005f, -0.001279f, -0.000112f, 0.000087f, 0.000274f, -0.000246f, 0.000397f, 0.000675f, -0.000542f, 0.000554f, 0.000010f, 0.000461f, 0.000010f, 0.000764f, -0.000312f, -0.000114f, 0.018588f, -0.005258f, 0.000927f, -0.000786f, 0.001337f, 0.000142f, 0.000108f, -0.002354f, 0.001234f, -0.000955f, 0.000882f, 0.000397f, 0.000510f, - 0.000934f, 0.001367f, 0.000327f, 0.000553f, -0.001954f, 0.000886f, 0.000909f, -0.001228f, -0.000123f, 0.001531f, 0.001055f, 0.001020f, 0.002148f, 0.001239f, 0.000434f, 0.000648f, -0.000609f, 0.000752f, -0.000036f, 0.001269f, 0.001647f, -0.000099f, 0.000652f, 0.001056f, -0.000249f, 0.000437f, -0.001158f, -0.000242f, 0.001458f, 0.000131f, -0.000766f, -0.000206f, 0.000549f, 0.001077f, 0.000087f, 0.000656f, 0.001243f, -0.009941f, 0.004084f, -0.002944f, 0.001806f, -0.001776f, 0.002143f, -0.001506f, 0.000013f, -0.001288f, -0.001596f, -0.002175f, 0.000063f, -0.001312f, 0.000522f, 0.000655f, 0.001509f, -0.002663f, 0.001519f, -0.000673f, 0.002143f, 0.000445f, -0.000229f, 0.000133f, 0.000073f, -0.000571f, -0.000550f, 0.000300f, -0.001170f, 0.000663f, 0.001158f, -0.001754f, -0.000489f, -0.000135f, 0.000579f, -0.000686f, 0.001695f, -0.001915f, 0.000249f, -0.000028f, -0.000006f, -0.000834f, 0.000006f, -0.000529f, 0.000354f, 0.000057f, -0.000036f, -0.000591f, -0.000232f, -0.001208f, -0.000539f, -0.000076f, 0.000128f, -0.015976f, 0.004984f, -0.003317f, -0.000280f, -0.000721f, 0.000932f, -0.002804f, - 0.000128f, 0.000818f, 0.000655f, -0.001013f, 0.000476f, -0.001278f, -0.002084f, -0.000836f, 0.000181f, -0.001254f, 0.004148f, 0.000068f, -0.001247f, -0.000431f, -0.001488f, -0.000707f, 0.001212f, 0.000729f, 0.001594f, -0.000194f, 0.000665f, -0.000984f, 0.000306f, -0.000893f, -0.000374f, -0.000537f, 0.000196f, 0.000487f, -0.000353f, -0.000844f, 0.000113f, 0.000274f, 0.001070f, -0.000231f, -0.000515f, -0.001535f, -0.001323f, -0.000612f, -0.000331f, 0.000261f, 0.000111f, -0.000638f, -0.000350f, 0.000095f, 0.000458f, 0.000273f, -0.015403f, 0.007106f, -0.003470f, 0.003124f, -0.001753f, 0.001815f, 0.000864f, 0.000493f, -0.001820f, 0.000123f, -0.000964f, 0.000170f, -0.002357f, 0.000766f, 0.001355f, 0.000369f, -0.002501f, -0.001299f, -0.001293f, -0.001369f, -0.000904f, 0.001643f, 0.000349f, 0.001126f, 0.000916f, -0.000531f, -0.000165f, -0.001938f, 0.002303f, -0.000779f, -0.000304f, 0.000045f, -0.000570f, -0.000836f, -0.000920f, -0.000305f, -0.001990f, 0.000461f, -0.001083f, 0.000658f, 0.000615f, 0.000992f, -0.000357f, 0.000005f, -0.001309f, 0.000354f, 0.000869f, 0.000098f, -0.000259f, 0.000063f, - 0.000669f, 0.000952f, 0.000417f, 0.005024f, 0.006202f, -0.002730f, 0.001695f, -0.000804f, 0.000664f, -0.000608f, 0.000399f, 0.000597f, 0.003057f, -0.001011f, 0.001284f, 0.002889f, -0.000731f, -0.000056f, -0.000438f, 0.000747f, 0.001501f, 0.001561f, 0.001987f, 0.000590f, 0.001695f, -0.000359f, -0.000946f, -0.003254f, 0.000733f, -0.000437f, -0.001634f, -0.001120f, -0.000026f, -0.000245f, 0.001102f, -0.000082f, -0.001898f, -0.001915f, 0.000563f, -0.001653f, 0.000259f, 0.001128f, -0.001527f, -0.000962f, -0.000636f, 0.000852f, 0.000723f, 0.000030f, -0.000183f, 0.001245f, 0.000269f, -0.000364f, 0.000487f, -0.000916f, 0.000146f, -0.000440f, -0.000738f, -0.000420f, 0.017710f, -0.006161f, 0.003344f, -0.002308f, 0.003324f, -0.002339f, 0.002038f, -0.000755f, 0.002070f, 0.000508f, 0.001456f, -0.001689f, 0.001737f, -0.000589f, -0.001445f, -0.000143f, -0.001553f, -0.002470f, -0.001310f, -0.000263f, 0.001252f, -0.001689f, -0.002272f, -0.002772f, -0.000504f, -0.000237f, 0.002217f, 0.001224f, 0.001422f, -0.000970f, 0.001148f, -0.000875f, -0.000874f, -0.000470f, 0.001458f, 0.001272f, 0.000386f, -0.000003f, - -0.000063f, 0.000047f, -0.000422f, -0.000226f, 0.001004f, 0.000203f, 0.002486f, -0.000953f, -0.000313f, -0.002077f, 0.001350f, -0.000540f, -0.000338f, -0.000488f, -0.000144f, 0.000123f, -0.000362f, 0.005031f, -0.007544f, 0.004513f, -0.002787f, 0.003518f, 0.000018f, 0.002205f, 0.000664f, -0.003276f, -0.001523f, -0.001067f, 0.000465f, 0.000891f, 0.000524f, 0.003818f, -0.002058f, 0.003062f, 0.000581f, 0.000438f, -0.001999f, -0.000389f, 0.002656f, -0.000115f, -0.002149f, 0.002568f, 0.001976f, 0.000481f, -0.000977f, -0.000760f, -0.000161f, -0.000118f, 0.001222f, -0.000514f, 0.000577f, -0.001350f, -0.000253f, 0.000869f, -0.001970f, 0.000834f, -0.000729f, 0.000785f, -0.000529f, -0.000120f, 0.002452f, 0.001093f, 0.001422f, -0.000045f, 0.000623f, 0.000939f, -0.000121f, -0.000597f, -0.000997f, 0.000425f, 0.000542f, 0.000916f, 0.001087f, 0.000308f, -0.000174f, -0.000989f, -0.000423f, -0.000999f, -0.019094f, -0.004048f, -0.000748f, -0.003384f, -0.001548f, 0.002585f, 0.000961f, -0.001057f, -0.000976f, -0.002497f, -0.001750f, -0.002069f, -0.002307f, -0.001940f, -0.001337f, -0.001775f, -0.002880f, -0.002478f, - 0.000617f, -0.002511f, 0.000511f, -0.003299f, -0.000151f, -0.001494f, -0.001269f, 0.002458f, -0.000528f, -0.001521f, 0.001476f, -0.002158f, 0.001573f, 0.000334f, 0.001673f, 0.001103f, -0.000295f, -0.001135f, 0.001771f, -0.000236f, -0.000570f, 0.001642f, -0.001029f, -0.002718f, -0.003104f, -0.000932f, 0.000682f, 0.000404f, -0.001110f, -0.000282f, -0.001049f, -0.000015f, -0.000227f, -0.000047f, 0.001512f, 0.000509f, -0.001557f, -0.000673f, -0.000041f, 0.000944f, -0.000014f, 0.001504f, 0.000184f, -0.022190f, 0.019287f, -0.007872f, 0.005336f, -0.005043f, 0.001208f, -0.002474f, 0.003235f, 0.000624f, 0.000345f, -0.001570f, 0.002173f, 0.000465f, -0.004030f, 0.000424f, 0.000539f, -0.001981f, -0.003126f, 0.003064f, 0.003706f, -0.001183f, -0.001059f, 0.000666f, 0.001666f, -0.000976f, 0.003356f, -0.000061f, 0.000789f, -0.002440f, -0.000971f, -0.001428f, 0.002146f, -0.000436f, 0.000391f, 0.000550f, -0.001385f, 0.002239f, 0.001971f, 0.000644f, 0.000601f, 0.002623f, -0.001668f, -0.000325f, -0.000449f, -0.001754f, 0.000266f, -0.001107f, 0.000314f, 0.000046f, 0.000021f, 0.002185f, -0.000230f, -0.000357f, - 0.000302f, 0.000230f, 0.001192f, -0.001134f, 0.000304f, 0.000051f, 0.002480f, -0.000654f, 0.014990f, -0.001600f, -0.002906f, -0.000551f, 0.002177f, 0.001210f, 0.001087f, 0.000073f, -0.001869f, 0.000691f, 0.001440f, 0.001597f, -0.000750f, -0.000706f, 0.003178f, 0.001200f, -0.002142f, 0.000679f, 0.004058f, -0.004650f, 0.003421f, 0.000568f, 0.004321f, -0.000098f, 0.000433f, 0.000985f, 0.001032f, 0.002345f, -0.001401f, -0.000432f, 0.001014f, 0.001732f, -0.000413f, 0.000130f, 0.000405f, 0.000536f, 0.001186f, -0.001811f, 0.000162f, 0.001325f, 0.000538f, -0.000923f, -0.000128f, 0.002722f, 0.002094f, 0.001062f, -0.000763f, -0.000551f, 0.000950f, -0.000165f, -0.000411f, 0.000611f, -0.000567f, -0.001069f, 0.002848f, 0.001187f, 0.001912f, 0.000419f, 0.001500f, 0.001185f, 0.001361f, 0.000272f, 0.001603f, 0.000826f, 0.001209f, 0.007056f, 0.002070f, 0.001716f, -0.000999f, -0.000674f, -0.001874f, -0.001353f, 0.000388f, -0.000741f, -0.000896f, -0.002733f, 0.002379f, 0.001614f, -0.001653f, 0.002910f, -0.002690f, -0.000839f, 0.001283f, -0.002047f, 0.001245f, 0.001876f, 0.002958f, 0.002530f, - 0.002504f, 0.001236f, -0.005067f, -0.000030f, -0.001000f, 0.000995f, -0.000413f, 0.001972f, 0.001450f, -0.000708f, -0.001160f, 0.001270f, -0.000824f, 0.003339f, 0.000099f, 0.001062f, 0.003544f, 0.003228f, -0.002379f, 0.000137f, -0.001528f, -0.003038f, -0.000204f, 0.000473f, -0.000257f, -0.000697f, -0.000191f, 0.000159f, -0.001257f, 0.000080f, -0.001484f, -0.000563f, -0.000053f, 0.000312f, 0.000154f, -0.001071f, -0.000861f, 0.001928f, -0.000578f, 0.000172f, 0.001076f, 0.000986f, -0.000471f, -0.000808f, 0.016655f, -0.011649f, 0.004295f, -0.004399f, -0.000304f, -0.003061f, 0.002845f, 0.002832f, 0.000936f, 0.000611f, 0.002674f, 0.007295f, -0.006337f, -0.000841f, -0.001622f, -0.002527f, 0.005660f, 0.004283f, -0.000834f, -0.003807f, 0.001596f, -0.003101f, -0.002485f, -0.004363f, 0.000596f, -0.004468f, -0.001461f, 0.002713f, 0.000415f, -0.001334f, -0.003699f, 0.000060f, -0.000870f, 0.002319f, 0.002112f, 0.001016f, -0.001666f, 0.000310f, -0.000079f, 0.000973f, 0.001826f, -0.001085f, -0.000550f, -0.001964f, 0.003091f, -0.000322f, 0.000478f, 0.002792f, -0.000539f, -0.000190f, 0.001118f, -0.001313f, - -0.000118f, 0.001247f, -0.002007f, 0.000523f, -0.000353f, -0.000116f, -0.002094f, 0.001091f, -0.000430f, 0.000244f, 0.000546f, -0.000722f, 0.001414f, -0.001034f, -0.000257f, -0.026004f, 0.003451f, 0.000232f, 0.001689f, -0.002118f, -0.003358f, -0.000144f, 0.002039f, 0.003312f, -0.000336f, 0.005103f, 0.002791f, -0.003669f, -0.003282f, 0.002317f, 0.000318f, -0.002650f, -0.004806f, -0.005502f, -0.003566f, -0.004093f, -0.004558f, 0.000676f, 0.001297f, 0.001057f, -0.003401f, -0.003284f, 0.000369f, -0.000955f, -0.000651f, -0.000545f, -0.002734f, 0.002098f, -0.004625f, -0.001810f, -0.000796f, -0.000285f, 0.001338f, 0.000389f, -0.000416f, 0.001967f, -0.000738f, 0.001961f, 0.001094f, -0.001718f, 0.000158f, 0.003262f, -0.001447f, -0.001466f, -0.000008f, 0.001864f, 0.000418f, -0.001517f, -0.001895f, 0.001542f, -0.000001f, -0.002481f, 0.003168f, 0.003559f, 0.000360f, -0.001156f, 0.000357f, -0.000176f, 0.000701f, 0.001513f, -0.000232f, 0.002044f, -0.015843f, 0.013547f, -0.004525f, 0.002893f, -0.000066f, 0.002252f, -0.005474f, 0.002115f, -0.003726f, 0.000008f, -0.002514f, 0.005073f, 0.004346f, 0.001620f, - 0.000373f, -0.004197f, -0.002748f, -0.000452f, -0.001654f, 0.004803f, -0.003915f, -0.000183f, -0.001922f, 0.007039f, -0.002213f, 0.000600f, -0.000161f, 0.001183f, 0.000596f, 0.001175f, 0.000934f, -0.001211f, 0.000683f, -0.000329f, 0.002518f, 0.000333f, 0.004731f, 0.002377f, -0.001455f, -0.000372f, -0.000525f, 0.000028f, -0.001726f, -0.001322f, -0.000385f, 0.000770f, 0.005770f, 0.000448f, 0.000450f, -0.001641f, 0.002397f, -0.000942f, -0.001146f, 0.000669f, -0.001110f, 0.000616f, -0.001394f, -0.003286f, 0.001662f, 0.001315f, -0.000365f, 0.003232f, 0.000791f, 0.000682f, 0.001281f, -0.001011f, 0.000478f, -0.000852f, 0.003257f, 0.002121f, -0.000204f, -0.001028f, -0.000809f, -0.000363f, 0.010216f, -0.000355f, 0.002207f, -0.007150f, -0.001293f, 0.000765f, -0.005796f, 0.000330f, 0.007729f, -0.001493f, 0.000438f, -0.003668f, -0.004984f, 0.001110f, -0.004565f, 0.006798f, -0.004937f, 0.001535f, 0.001506f, 0.003581f, 0.002750f, -0.000883f, -0.004423f, -0.000625f, -0.000531f, 0.002067f, -0.003144f, -0.000711f, -0.001022f, -0.001561f, -0.001160f, 0.001969f, 0.001148f, 0.005483f, 0.001760f, -0.002222f, - 0.002181f, -0.001661f, -0.001761f, 0.001593f, 0.004653f, -0.000826f, -0.002639f, -0.002458f, 0.002394f, -0.000199f, -0.003647f, -0.003344f, 0.001473f, 0.001392f, -0.001620f, -0.002787f, -0.004581f, 0.001080f, 0.001451f, 0.000966f, -0.002679f, 0.001732f, 0.000945f, 0.000646f, 0.035379f, -0.002056f, 0.001604f, 0.003407f, -0.002895f, -0.001131f, -0.000867f, -0.008109f, 0.005758f, -0.000720f, -0.004954f, 0.001291f, -0.002449f, 0.003202f, 0.002582f, 0.004020f, -0.001178f, 0.005391f, 0.004659f, 0.003032f, -0.004410f, 0.003705f, -0.006119f, -0.003551f, -0.004103f, 0.001871f, -0.003108f, -0.000427f, -0.000932f, -0.004036f, -0.002091f, 0.003717f, -0.002448f, -0.001831f, -0.003822f, 0.001468f, 0.001490f, 0.003170f, -0.001505f, 0.005336f, 0.001486f, 0.006059f, -0.000483f, 0.001230f, 0.001382f, -0.003102f, 0.002517f, 0.006192f, -0.001888f, -0.000017f, 0.001833f, -0.001607f, -0.002246f, 0.001578f, -0.002239f, -0.001167f, -0.002986f, -0.001943f, 0.002536f, 0.002232f, 0.001594f, 0.002381f, 0.003010f, 0.002819f, 0.004234f, 0.000773f, -0.001041f, -0.015934f, -0.030903f, 0.010968f, -0.000243f, 0.000258f, - -0.003402f, -0.003635f, -0.001080f, 0.000675f, -0.002321f, 0.007598f, -0.004034f, -0.007358f, 0.000072f, 0.000050f, -0.001260f, -0.002853f, 0.005099f, 0.000586f, -0.002781f, 0.002127f, -0.005163f, 0.005709f, -0.003759f, -0.002200f, -0.004503f, 0.006412f, -0.003283f, -0.001416f, -0.004461f, -0.002345f, 0.003383f, -0.002169f, 0.003693f, -0.005634f, -0.006389f, 0.000050f, 0.000735f, 0.000597f, -0.000480f, -0.003603f, 0.000266f, 0.001154f, 0.000492f, 0.002695f, -0.000330f, 0.004488f, 0.000379f, 0.004170f, 0.005787f, 0.000776f, -0.000767f, 0.000649f, -0.003720f, -0.001383f, -0.006008f, -0.005599f, 0.001192f, 0.000986f, 0.000700f, -0.000887f, -0.001923f, -0.001396f, -0.001685f, -0.001331f, -0.001679f, -0.000536f, -0.000411f, 0.000492f, -0.010392f, 0.029670f, -0.013756f, 0.006049f, -0.003040f, 0.009293f, -0.001644f, -0.004379f, -0.004513f, 0.002291f, -0.001441f, -0.000769f, 0.000083f, 0.001643f, -0.010159f, -0.005117f, -0.002710f, 0.003762f, 0.003235f, 0.005618f, 0.000960f, -0.001131f, -0.001031f, 0.006772f, -0.009221f, 0.005029f, -0.004483f, -0.001179f, -0.004712f, 0.006979f, 0.002828f, -0.004997f, - 0.000549f, -0.002358f, 0.000709f, 0.002776f, -0.013162f, -0.005779f, 0.001015f, 0.004282f, -0.002752f, 0.000640f, 0.003305f, -0.001704f, -0.001529f, -0.000830f, 0.005023f, 0.001636f, 0.000827f, 0.000189f, 0.001916f, 0.005560f, -0.003648f, 0.002315f, -0.008391f, -0.001868f, 0.001852f, 0.003590f, 0.000726f, 0.000122f, 0.000165f, 0.001700f, -0.001666f, -0.000257f, -0.000621f, -0.002506f, -0.001753f, 0.002554f, 0.002999f, -0.001760f, -0.001631f, -0.005866f, -0.026931f, -0.005933f, 0.002468f, -0.006508f, 0.001450f, 0.001007f, 0.003777f, -0.000181f, 0.007334f, 0.004720f, 0.002561f, -0.002216f, -0.003812f, -0.000358f, 0.007774f, -0.006937f, -0.002722f, -0.005417f, -0.000251f, -0.014508f, -0.011435f, 0.000535f, 0.006883f, 0.009476f, 0.002100f, -0.003695f, 0.003166f, -0.003304f, -0.002208f, -0.002312f, 0.000832f, 0.002339f, 0.000496f, 0.003565f, -0.002971f, -0.005294f, 0.004103f, 0.002578f, 0.008749f, -0.001289f, 0.001330f, -0.001477f, 0.007038f, -0.007648f, -0.003846f, -0.001973f, -0.005755f, 0.003377f, -0.002436f, 0.002798f, -0.006154f, 0.005806f, 0.005748f, 0.005157f, -0.002298f, 0.004540f, - 0.000155f, 0.001426f, 0.002698f, 0.001750f, -0.002630f, 0.000192f, -0.000890f, -0.000395f, 0.005393f, 0.001792f, -0.002526f, 0.004184f, -0.000839f, -0.004126f, -0.001407f, -0.000554f, 0.019673f, 0.012879f, -0.003717f, 0.005977f, -0.012645f, 0.009317f, 0.003589f, 0.007071f, -0.002074f, -0.001478f, -0.006796f, -0.003388f, -0.011804f, -0.001855f, -0.009340f, -0.002687f, -0.005646f, -0.005834f, -0.007887f, 0.003470f, -0.010876f, 0.001727f, 0.005109f, -0.001922f, 0.001809f, -0.004584f, 0.000229f, -0.001281f, -0.001296f, -0.006331f, -0.000583f, 0.000970f, -0.000144f, -0.000797f, -0.003121f, -0.002769f, 0.002331f, 0.002358f, 0.003148f, 0.014387f, -0.005396f, -0.000123f, 0.006069f, -0.001172f, -0.002029f, -0.005239f, 0.002018f, 0.005015f, 0.008307f, 0.002884f, 0.006990f, -0.006292f, -0.009394f, 0.001125f, 0.006759f, 0.003769f, -0.004889f, 0.006304f, -0.004229f, 0.003130f, 0.001613f, 0.005738f, 0.003546f, 0.002210f, 0.004180f, -0.003597f, 0.002830f, 0.002144f, 0.001584f, 0.005582f, 0.001721f, 0.004496f, 0.039197f, -0.025369f, -0.001382f, 0.002946f, 0.000781f, 0.003098f, 0.005358f, -0.001071f, - -0.000879f, 0.003027f, -0.004548f, -0.004309f, -0.000734f, 0.003495f, 0.014080f, 0.000616f, 0.004842f, -0.004517f, 0.000248f, -0.013919f, 0.008578f, -0.008404f, -0.012064f, 0.002831f, 0.003323f, -0.004421f, 0.003956f, 0.001725f, 0.009254f, 0.010356f, -0.001781f, -0.003846f, -0.003012f, -0.015361f, -0.008481f, 0.012134f, 0.003897f, 0.004502f, -0.007048f, -0.007074f, 0.002009f, -0.001320f, -0.006253f, 0.005420f, -0.001291f, -0.003770f, -0.004571f, 0.003107f, -0.004120f, -0.002047f, 0.014003f, -0.008552f, 0.002448f, -0.003012f, 0.003092f, -0.003796f, -0.001804f, -0.010472f, 0.001550f, -0.003813f, -0.002887f, 0.008549f, 0.001756f, 0.002467f, 0.004794f, 0.006243f, 0.001469f, 0.004366f, -0.002294f, -0.000368f, -0.007411f, 0.003317f, 0.005174f, -0.025279f, -0.012893f, 0.003636f, -0.002388f, 0.007959f, -0.002127f, -0.003218f, -0.007919f, -0.008791f, 0.003307f, -0.009153f, -0.003724f, -0.005585f, -0.001789f, -0.005848f, -0.004250f, -0.004880f, -0.002900f, -0.005837f, -0.010196f, 0.004437f, -0.019377f, -0.001124f, 0.015722f, 0.003110f, -0.000944f, -0.005473f, 0.000320f, -0.017705f, 0.006064f, 0.003258f, - 0.000304f, 0.005095f, 0.008149f, -0.008069f, -0.004590f, -0.008366f, 0.000236f, -0.000723f, -0.005231f, -0.006000f, -0.006397f, -0.004298f, -0.001104f, 0.002662f, -0.000545f, 0.001988f, 0.000862f, -0.000669f, 0.010656f, 0.001708f, -0.002697f, 0.008045f, -0.005301f, -0.011455f, -0.004029f, -0.002330f, -0.002332f, -0.001807f, -0.004426f, -0.001970f, -0.005308f, -0.002273f, -0.005381f, -0.000775f, 0.001620f, -0.006257f, -0.002238f, -0.004087f, -0.000609f, -0.006469f, -0.007208f, -0.004305f, -0.015280f, 0.019962f, -0.010234f, -0.005247f, -0.016770f, 0.012594f, -0.004773f, 0.007277f, 0.000268f, 0.000121f, -0.005207f, 0.009758f, -0.002701f, 0.002921f, 0.002350f, -0.005023f, -0.001720f, -0.001905f, -0.008890f, 0.001326f, 0.001478f, -0.007212f, -0.011466f, -0.007513f, -0.010540f, -0.003011f, 0.005614f, 0.002490f, -0.006201f, -0.006624f, 0.009123f, 0.005785f, -0.007917f, 0.006747f, -0.003930f, 0.005892f, -0.009995f, -0.008485f, -0.007592f, 0.002141f, -0.006697f, 0.003693f, -0.002964f, 0.001203f, -0.001750f, -0.001594f, 0.001713f, 0.006661f, -0.015814f, -0.002682f, 0.003373f, -0.002137f, -0.004646f, -0.012222f, - -0.000789f, 0.009865f, 0.000238f, 0.008435f, 0.007055f, 0.001207f, -0.000975f, 0.006229f, -0.006573f, -0.006483f, 0.004878f, -0.002481f, -0.003852f, 0.002137f, 0.001379f, -0.004211f, -0.004372f, 0.007552f, -0.007144f, -0.005076f, -0.003866f, -0.035065f, 0.012442f, 0.005017f, -0.009165f, 0.003850f, -0.010311f, 0.008425f, 0.007180f, 0.006073f, -0.018208f, 0.010295f, 0.018309f, -0.003033f, 0.005903f, -0.000138f, -0.006339f, -0.008087f, 0.020204f, -0.000709f, -0.002325f, -0.011817f, -0.023009f, -0.012619f, 0.000633f, -0.010389f, 0.007788f, -0.015177f, -0.005421f, -0.009136f, 0.001862f, -0.003833f, -0.011536f, 0.001416f, -0.003078f, 0.006799f, -0.002978f, -0.009078f, -0.003870f, -0.026912f, 0.004189f, -0.001256f, 0.011680f, -0.007932f, -0.008874f, 0.010979f, 0.001825f, 0.001433f, -0.005156f, -0.007542f, 0.001938f, 0.004745f, 0.003175f, -0.002325f, 0.003405f, 0.001706f, -0.000142f, -0.002803f, -0.003114f, -0.009235f, 0.000065f, -0.003988f, -0.005720f, 0.004051f, 0.001948f, 0.012325f, 0.002060f, -0.009288f, -0.009370f, 0.001268f, -0.006300f, -0.004879f, 0.000804f, -0.005108f, -0.000826f, -0.002996f, - 0.030303f, -0.009972f, 0.001620f, 0.003019f, 0.013517f, -0.000139f, -0.000890f, 0.009680f, 0.015689f, -0.008198f, -0.009600f, 0.010029f, -0.000161f, 0.008898f, 0.012387f, 0.010447f, 0.009331f, 0.007641f, 0.008910f, 0.029401f, -0.000840f, 0.003427f, 0.007002f, 0.016822f, -0.001642f, -0.004316f, 0.007531f, 0.000930f, -0.003459f, -0.004881f, -0.003839f, 0.001487f, -0.005456f, 0.012029f, 0.017749f, 0.000497f, -0.002352f, 0.008076f, -0.002253f, 0.010985f, 0.008605f, 0.001580f, -0.006617f, 0.007680f, 0.001090f, -0.001380f, 0.003062f, 0.000204f, 0.020522f, -0.000231f, 0.009959f, -0.002770f, 0.018528f, -0.000191f, 0.003356f, -0.004427f, -0.008256f, 0.009916f, -0.003123f, 0.018255f, 0.005661f, 0.009410f, 0.002066f, 0.001535f, 0.006931f, 0.002798f, 0.014143f, 0.008271f, 0.004350f, 0.007663f, -0.004837f, 0.004363f, 0.007866f, 0.002440f, 0.000443f, 0.036970f, -0.011156f, 0.003073f, -0.003926f, 0.001200f, 0.004497f, 0.012072f, -0.010038f, 0.004742f, -0.000470f, 0.000128f, 0.006579f, -0.006154f, 0.007077f, -0.020298f, -0.009111f, 0.002659f, 0.007175f, 0.004522f, 0.015531f, -0.016288f, - 0.002331f, -0.003069f, -0.021433f, 0.008322f, -0.008356f, -0.006228f, -0.003135f, -0.018376f, 0.005699f, 0.005282f, 0.002764f, -0.010065f, -0.015264f, 0.005050f, -0.009404f, 0.007304f, -0.014564f, -0.000838f, -0.017419f, -0.005401f, -0.011553f, -0.011313f, 0.010601f, 0.014997f, 0.002494f, 0.004722f, -0.007187f, 0.001732f, -0.012212f, 0.003973f, -0.007880f, 0.000879f, 0.012367f, 0.004641f, -0.003809f, 0.005737f, 0.001653f, 0.004687f, -0.004916f, 0.008856f, 0.018556f, -0.000812f, -0.010342f, -0.009428f, -0.004274f, -0.004006f, 0.001792f, 0.005947f, 0.002271f, 0.010821f, 0.000638f, 0.002458f, -0.011276f, -0.004718f, -0.038507f, -0.032372f, 0.013114f, -0.004420f, 0.015320f, -0.001637f, 0.004759f, -0.019520f, -0.018294f, -0.011323f, 0.005620f, -0.015217f, -0.010563f, -0.004807f, 0.002616f, 0.010375f, 0.003514f, -0.022123f, 0.005504f, 0.011677f, -0.031086f, -0.004121f, 0.001159f, -0.033105f, -0.011519f, 0.014076f, -0.030552f, 0.014349f, 0.015293f, -0.000275f, -0.004656f, -0.001713f, -0.007560f, -0.008512f, 0.005153f, 0.006191f, 0.022421f, -0.013900f, -0.007292f, -0.006135f, -0.010773f, 0.000115f, - -0.018208f, -0.004995f, 0.001150f, -0.001027f, -0.006058f, -0.001441f, -0.010097f, -0.002544f, 0.005343f, -0.003018f, -0.006625f, 0.006948f, -0.003672f, -0.007913f, -0.010638f, 0.021756f, -0.001063f, 0.013011f, 0.001682f, 0.004487f, 0.014625f, 0.001483f, 0.009945f, -0.007359f, 0.011075f, 0.007366f, 0.002359f, 0.002141f, 0.002669f, 0.008848f, 0.004343f, 0.000819f, 0.009196f, -0.062125f, 0.023016f, -0.007114f, -0.028049f, -0.007043f, 0.000377f, -0.007437f, 0.010378f, -0.024269f, 0.011221f, -0.002182f, -0.027967f, -0.019272f, 0.003416f, 0.010737f, 0.009983f, 0.007383f, 0.015874f, 0.004435f, 0.026346f, 0.014440f, 0.030937f, 0.003880f, 0.025043f, -0.019800f, -0.015883f, 0.005093f, 0.001771f, -0.015728f, 0.003898f, 0.003136f, -0.002636f, -0.006086f, 0.014612f, 0.002742f, -0.033792f, -0.014987f, 0.010657f, 0.003711f, -0.007582f, 0.009396f, 0.009186f, 0.015009f, 0.002712f, 0.004374f, 0.002272f, 0.004282f, 0.004956f, -0.011678f, 0.001179f, 0.002023f, -0.025220f, 0.011504f, 0.007938f, 0.010346f, -0.017500f, -0.009903f, 0.011680f, -0.000094f, -0.003919f, -0.002663f, -0.007878f, -0.006510f, - -0.000628f, -0.008638f, -0.019612f, 0.006268f, 0.019498f, -0.014412f, 0.001266f, -0.008353f, -0.003995f, -0.006290f, -0.002581f, 0.009715f, 0.025188f, 0.016777f, 0.011369f, 0.005824f, 0.000046f, -0.006821f, -0.009971f, 0.007358f, -0.026646f, 0.026536f, -0.017685f, 0.003604f, -0.028860f, -0.001832f, 0.025678f, 0.009572f, -0.010121f, 0.015952f, -0.027457f, 0.009841f, 0.004214f, 0.001033f, -0.033639f, -0.010704f, 0.001246f, 0.004437f, 0.020346f, -0.033208f, -0.005148f, -0.011619f, -0.031235f, -0.007566f, 0.006512f, 0.014316f, 0.022030f, 0.016827f, 0.016850f, -0.002433f, -0.012167f, 0.010688f, 0.002686f, -0.007932f, 0.003326f, -0.015849f, 0.022796f, 0.010079f, 0.007130f, -0.013346f, -0.027950f, -0.008265f, -0.000297f, -0.033849f, -0.027461f, -0.008054f, -0.024758f, 0.014179f, 0.004910f, 0.003622f, -0.012000f, -0.012931f, 0.003484f, 0.002127f, 0.000846f, 0.006122f, -0.005795f, 0.004293f, 0.014342f, 0.005815f, 0.001244f, 0.000790f, -0.011859f, -0.010015f, -0.009504f, 0.003144f, -0.004802f, 0.029274f, -0.023896f, 0.005690f, -0.003901f, -0.003594f, -0.000068f, 0.007701f, -0.015138f, 0.018874f, - -0.006239f, 0.012779f, -0.001942f, -0.011346f, 0.020010f, 0.019862f, 0.013925f, -0.007343f, 0.030640f, 0.011087f, -0.035696f, 0.035609f, 0.002601f, -0.000591f, 0.025391f, 0.000674f, -0.012039f, -0.015615f, 0.025028f, -0.016600f, -0.022264f, 0.020389f, 0.017425f, -0.012289f, -0.029390f, 0.010787f, -0.010604f, 0.003547f, -0.020929f, -0.016927f, -0.007649f, 0.019101f, 0.016701f, 0.001909f, 0.015244f, -0.023757f, 0.006680f, -0.006532f, -0.009571f, 0.010812f, 0.000687f, 0.003061f, -0.033599f, -0.009314f, 0.017277f, -0.023729f, -0.007015f, -0.029673f, -0.006412f, -0.011298f, 0.003978f, -0.007428f, 0.002334f, 0.002679f, -0.001995f, 0.002596f, -0.008838f, -0.026411f, -0.005904f, 0.012900f, -0.002742f, 0.008780f, -0.010946f, -0.023396f, -0.004837f, 0.004286f, 0.027071f, 0.002078f, -0.007846f, -0.019404f, -0.000616f, -0.009299f, 0.007265f, -0.016060f, 0.010254f, 0.006423f, -0.013912f, -0.014436f, 0.021770f, -0.025634f, -0.000880f, 0.016388f, -0.018355f, 0.005841f, 0.021332f, -0.016980f, 0.014699f, 0.010520f, 0.015739f, -0.025742f, 0.022309f, -0.025862f, 0.007978f, -0.019744f, 0.002700f, -0.010206f, - 0.017679f, 0.000313f, 0.010954f, 0.005257f, -0.017918f, -0.011379f, -0.024870f, 0.014451f, -0.016702f, 0.014518f, -0.020132f, -0.023696f, -0.038737f, 0.003511f, 0.021060f, -0.003469f, -0.000079f, 0.006158f, 0.018298f, -0.006372f, 0.005372f, -0.022026f, 0.006165f, 0.028351f, -0.002189f, 0.025649f, 0.034879f, -0.000653f, 0.006556f, 0.006563f, -0.013645f, 0.007100f, -0.016635f, -0.001367f, -0.016994f, -0.018059f, 0.002281f, -0.007159f, -0.028351f, 0.019666f, 0.002108f, 0.014509f, -0.015620f, -0.009430f, -0.004229f, -0.061428f, 0.015431f, 0.022837f, 0.006245f, -0.026682f, -0.004017f, 0.043118f, -0.049812f, -0.001369f, -0.008513f, -0.032603f, -0.008328f, -0.022127f, 0.007931f, 0.007918f, 0.018857f, 0.007591f, -0.026124f, -0.009331f, 0.018575f, -0.029755f, -0.008581f, -0.031817f, 0.026891f, 0.008002f, 0.020990f, 0.035942f, -0.012884f, -0.007740f, -0.006134f, -0.018201f, 0.017108f, -0.008617f, -0.021728f, -0.024287f, -0.004442f, 0.009100f, -0.000899f, 0.004758f, 0.005650f, 0.013857f, -0.006422f, -0.000856f, 0.010145f, -0.010255f, 0.020136f, 0.023000f, 0.021616f, -0.018020f, 0.002060f, -0.005818f, - 0.010144f, 0.043514f, 0.032501f, 0.062391f, 0.004587f, 0.024422f, 0.019647f, -0.009958f, -0.002613f, -0.003766f, -0.006345f, 0.007374f, 0.001317f, 0.021956f, 0.016437f, -0.008384f, -0.002925f, -0.014273f, -0.026988f, 0.009550f, -0.001053f, 0.007720f, -0.002555f, -0.019894f, -0.003099f, 0.000055f} -}; -const float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522]={ {-0.004162f, 0.000448f, -0.000930f, 0.000917f, -0.000455f, 0.000395f, -0.000006f, 0.000439f, -0.000027f, 0.000475f, -0.000583f, -0.000275f, 0.000277f, -0.000394f, -0.000066f, -0.000617f, -0.000043f, -0.000228f, 0.001227f, 0.000583f, -0.000747f, 0.000029f, 0.000306f, -0.000028f, -0.000173f, 0.000318f, 0.000034f, 0.000209f, 0.000296f, 0.000262f, -0.000380f, -0.000102f, 0.000036f, 0.000053f, 0.000073f, -0.000027f, 0.000018f, -0.000029f, 0.000064f, 0.000006f, -0.000003f, -0.000038f, -0.000007f, 0.000031f, -0.000010f, 0.000022f, 0.003133f, 0.001814f, 0.000972f, 0.000486f, 0.000526f, 0.000178f, 0.000373f, -0.000069f, -0.000070f, 0.000900f, 0.000510f, 0.000418f, 0.000863f, 0.000722f, 0.000985f, -0.001373f, 0.001193f, 0.000330f, 0.000079f, 0.000239f, -0.000083f, -0.000615f, -0.000438f, 0.000703f, 0.000318f, 0.000575f, 0.000026f, -0.000197f, 0.000420f, -0.000049f, -0.000204f, 0.000425f, 0.000222f, 0.000624f, 0.000178f, 0.000415f, -0.000620f, -0.000374f, 0.000333f, 0.000061f, 0.000358f, 0.000149f, -0.000077f, -0.000165f, -0.000503f, 0.000104f, 0.001676f, -0.001733f, -0.000357f, -0.000338f, - -0.000441f, -0.000093f, -0.000058f, -0.000302f, -0.000273f, 0.000038f, 0.000044f, -0.000211f, 0.000114f, -0.000512f, -0.000190f, -0.000053f, 0.000305f, -0.001841f, -0.000204f, 0.000425f, -0.000206f, -0.000190f, 0.000138f, 0.000074f, 0.000107f, 0.000904f, -0.000443f, -0.000238f, -0.000487f, -0.000046f, 0.000231f, 0.000429f, -0.000420f, -0.000257f, 0.000439f, -0.000382f, -0.000651f, -0.000027f, -0.000192f, 0.000262f, -0.000208f, -0.000136f, 0.000084f, 0.000238f, -0.000407f, 0.000172f, -0.006005f, -0.004118f, -0.001639f, -0.001922f, -0.001036f, -0.001014f, -0.000916f, -0.000446f, -0.001109f, -0.000914f, -0.000362f, -0.000715f, -0.000062f, -0.000268f, -0.000578f, -0.000839f, -0.000891f, -0.000377f, -0.000503f, -0.000943f, -0.000088f, -0.001175f, 0.000038f, -0.000099f, -0.000126f, -0.000714f, -0.000085f, -0.000542f, 0.000041f, -0.000695f, -0.000401f, 0.000230f, -0.000467f, 0.000083f, -0.001134f, -0.000221f, 0.000613f, 0.000348f, 0.000020f, -0.000173f, -0.000295f, 0.000095f, 0.000150f, 0.000545f, -0.000282f, -0.000052f, -0.007886f, -0.000473f, 0.001060f, -0.000058f, 0.000344f, -0.000097f, 0.000047f, -0.000678f, - 0.000715f, 0.000224f, 0.000852f, 0.000537f, 0.001707f, 0.001183f, 0.000132f, -0.000704f, -0.000343f, -0.000200f, 0.000348f, -0.000269f, -0.001438f, -0.001370f, -0.000651f, -0.000250f, 0.000099f, 0.000141f, 0.000307f, -0.000100f, 0.000079f, 0.000115f, -0.000277f, -0.000089f, -0.000010f, -0.000956f, 0.000565f, 0.000172f, -0.000070f, -0.000058f, -0.000318f, -0.000553f, 0.000343f, 0.000071f, -0.000301f, 0.000265f, 0.000295f, 0.000334f, 0.008857f, 0.006269f, 0.001196f, 0.002443f, 0.000469f, 0.000824f, 0.001938f, 0.001038f, 0.000279f, 0.001208f, 0.000447f, -0.000500f, -0.000294f, 0.000431f, 0.000649f, -0.001186f, -0.000200f, -0.000706f, 0.001564f, 0.000814f, 0.000370f, 0.000813f, 0.000365f, 0.000426f, -0.000023f, -0.000066f, -0.000439f, 0.000638f, 0.000714f, 0.000657f, 0.000762f, 0.000987f, 0.000536f, 0.001436f, 0.000273f, -0.000075f, 0.000457f, 0.000099f, -0.000302f, -0.000110f, -0.000277f, -0.000281f, -0.000049f, 0.000664f, 0.000102f, 0.000108f, 0.013205f, 0.005689f, 0.001650f, 0.001602f, 0.001030f, 0.000720f, 0.000158f, 0.000100f, 0.001396f, 0.000341f, 0.000747f, 0.001142f, - 0.000520f, -0.000032f, -0.000465f, 0.002360f, -0.000272f, -0.001225f, -0.000789f, 0.000617f, -0.000033f, 0.001279f, 0.000341f, 0.000192f, -0.000295f, -0.000539f, -0.000232f, -0.000228f, 0.000474f, -0.000058f, 0.000155f, 0.000089f, 0.000013f, -0.000264f, 0.000368f, 0.001641f, 0.000943f, 0.001099f, 0.000888f, 0.000824f, 0.000359f, 0.000338f, 0.000106f, 0.000553f, -0.000524f, 0.000346f, 0.004308f, -0.004541f, -0.001449f, -0.001925f, -0.001775f, -0.000874f, -0.000331f, 0.000704f, -0.000694f, 0.000133f, -0.001755f, 0.000648f, -0.000671f, -0.001477f, 0.000360f, -0.001036f, -0.001520f, -0.000985f, 0.001364f, 0.001131f, -0.000540f, 0.000610f, -0.001018f, 0.000450f, -0.001817f, 0.000165f, 0.000254f, -0.000229f, -0.000453f, 0.000445f, -0.001441f, -0.000564f, 0.000148f, -0.000416f, -0.000447f, -0.000244f, 0.000085f, 0.000226f, 0.000681f, 0.000120f, 0.001197f, -0.000394f, -0.000360f, -0.000305f, -0.000627f, -0.000107f, -0.000323f, 0.000253f, -0.000539f, -0.015669f, -0.008062f, -0.002784f, -0.002321f, -0.002364f, -0.001608f, -0.002032f, -0.001450f, -0.002219f, -0.000491f, -0.000958f, -0.000339f, 0.000187f, - -0.001026f, -0.000179f, 0.000081f, 0.000096f, -0.001520f, -0.000879f, -0.000724f, 0.000223f, -0.002024f, 0.000282f, -0.000953f, -0.001653f, 0.000088f, 0.000066f, 0.000059f, 0.000047f, -0.000675f, -0.000379f, -0.000038f, -0.000039f, -0.000079f, -0.000556f, -0.000034f, 0.000272f, 0.000472f, 0.000297f, -0.000729f, 0.000486f, -0.000728f, 0.000559f, -0.001213f, -0.000691f, 0.000128f, -0.000540f, -0.000014f, -0.000138f, -0.009253f, 0.004825f, 0.002108f, 0.000699f, 0.001316f, 0.000171f, 0.000393f, 0.001044f, 0.001292f, 0.000605f, 0.000876f, -0.000695f, -0.000216f, -0.001047f, 0.001238f, 0.000179f, 0.000262f, 0.001553f, 0.000097f, -0.001161f, 0.001973f, -0.001353f, 0.000198f, 0.001520f, -0.000442f, 0.000343f, 0.000245f, -0.000114f, -0.000764f, -0.000269f, 0.000477f, 0.000381f, 0.000111f, -0.000365f, 0.000063f, -0.000646f, 0.001851f, 0.000073f, -0.000001f, -0.000801f, -0.000335f, -0.000549f, -0.000410f, 0.000898f, 0.000966f, -0.000333f, 0.000113f, -0.000152f, 0.000301f, -0.000022f, -0.000048f, -0.000287f, 0.000236f, 0.013956f, 0.006010f, 0.001531f, 0.003269f, 0.001804f, 0.000853f, 0.001335f, - 0.001256f, -0.000065f, 0.000929f, 0.001321f, 0.000369f, -0.000068f, 0.000757f, 0.001886f, -0.000619f, -0.000435f, -0.001507f, 0.000317f, 0.001826f, 0.000675f, 0.000121f, -0.001090f, -0.000506f, -0.000517f, 0.001915f, 0.000498f, 0.001016f, 0.000463f, -0.000863f, -0.001528f, 0.001659f, 0.000803f, -0.000976f, -0.000573f, 0.001608f, 0.001238f, -0.000047f, 0.000233f, -0.000147f, 0.000595f, 0.000461f, -0.000259f, 0.000337f, -0.000665f, -0.000251f, 0.000746f, -0.000442f, -0.000459f, 0.000918f, 0.000667f, 0.000436f, 0.000041f, 0.016492f, 0.003687f, 0.002675f, 0.001308f, 0.001178f, 0.000625f, 0.001214f, 0.001630f, 0.002364f, 0.001596f, -0.000558f, 0.002022f, -0.000468f, 0.000606f, 0.000335f, 0.001722f, 0.002320f, 0.001640f, -0.000517f, 0.002784f, -0.000613f, -0.000197f, -0.001523f, 0.000465f, -0.000525f, 0.000523f, 0.000625f, -0.000738f, -0.001239f, -0.000393f, 0.000116f, -0.000833f, -0.000406f, 0.000492f, 0.000493f, -0.000994f, -0.001021f, -0.000306f, 0.000240f, 0.000065f, 0.000170f, -0.000317f, -0.000121f, -0.000192f, -0.000475f, 0.000503f, -0.000731f, 0.000655f, -0.000777f, -0.000164f, - -0.000621f, 0.000173f, -0.000301f, 0.001847f, -0.007279f, -0.002429f, -0.002551f, -0.001761f, 0.000533f, -0.000485f, -0.001496f, 0.000838f, 0.000150f, 0.001047f, -0.000038f, 0.000057f, -0.001631f, -0.001270f, -0.000709f, -0.001304f, 0.000200f, -0.001382f, -0.002469f, 0.000457f, 0.000398f, -0.001239f, -0.000160f, -0.001127f, 0.000330f, 0.000319f, -0.000105f, -0.002688f, -0.000643f, 0.000127f, -0.000185f, 0.000188f, 0.000823f, -0.001920f, -0.000451f, -0.001212f, 0.000727f, -0.000179f, 0.000018f, 0.001201f, -0.001128f, -0.000113f, 0.000509f, -0.000186f, -0.000286f, 0.000571f, 0.000444f, -0.000771f, -0.000786f, -0.001482f, -0.000089f, -0.001136f, -0.000768f, -0.000495f, -0.017123f, -0.005959f, -0.003413f, -0.001003f, -0.001711f, -0.000174f, -0.000870f, -0.001384f, -0.001461f, 0.001859f, 0.000166f, -0.000850f, -0.000063f, -0.002960f, -0.001505f, -0.001491f, 0.002464f, -0.002060f, -0.004030f, 0.000256f, 0.000640f, 0.000240f, -0.001398f, -0.000490f, 0.001010f, -0.001995f, -0.000062f, -0.002031f, -0.000445f, 0.001012f, -0.000799f, 0.000191f, 0.002265f, 0.000158f, -0.000297f, -0.000586f, 0.000721f, 0.000590f, - 0.000679f, -0.000700f, 0.000030f, 0.000621f, 0.001086f, 0.000502f, 0.000468f, -0.001851f, 0.000493f, -0.000144f, -0.000752f, -0.000394f, 0.000333f, -0.000295f, -0.000759f, -0.000658f, -0.000792f, -0.011349f, 0.002561f, 0.000260f, -0.001485f, 0.002140f, -0.001386f, -0.000913f, 0.000426f, -0.001844f, -0.001246f, -0.000323f, 0.000710f, -0.001438f, 0.001990f, 0.000131f, -0.000150f, 0.001059f, 0.000876f, 0.001611f, -0.000259f, 0.002187f, 0.002925f, 0.002266f, 0.000593f, 0.001950f, -0.000704f, 0.001268f, -0.001477f, -0.001324f, -0.000688f, 0.000255f, 0.000814f, -0.000658f, -0.001425f, -0.000634f, -0.000135f, 0.000897f, -0.001383f, 0.001002f, 0.000211f, 0.000790f, -0.000433f, -0.001089f, -0.001681f, -0.001792f, 0.000379f, -0.000880f, 0.000398f, -0.001907f, -0.000688f, 0.000967f, -0.001366f, 0.000281f, -0.000996f, 0.000674f, -0.000401f, 0.000656f, 0.000017f, -0.000280f, -0.000153f, -0.000725f, 0.007613f, 0.012666f, 0.003627f, 0.003319f, 0.004520f, 0.003730f, 0.000689f, 0.002965f, 0.002568f, 0.001455f, 0.005485f, 0.001350f, 0.000897f, 0.002424f, 0.002173f, 0.001197f, 0.000940f, 0.000612f, - 0.000878f, -0.000683f, 0.002747f, -0.000719f, 0.000227f, -0.000849f, 0.001723f, 0.000115f, -0.000501f, 0.001486f, 0.001695f, 0.000638f, 0.002263f, -0.001614f, -0.002755f, -0.000590f, -0.000207f, 0.000607f, -0.000238f, 0.001185f, -0.001135f, 0.001078f, 0.002274f, 0.001017f, -0.002127f, -0.000416f, 0.001001f, 0.000425f, -0.001072f, 0.001475f, 0.000517f, 0.000876f, 0.000903f, 0.001315f, 0.000369f, -0.000361f, 0.000258f, -0.001181f, -0.000375f, 0.001104f, 0.000946f, -0.000574f, -0.000081f, 0.028941f, 0.003063f, -0.000354f, 0.001874f, -0.000117f, 0.002558f, -0.000034f, 0.000746f, 0.000251f, 0.002691f, 0.001157f, -0.000997f, 0.000813f, 0.001330f, 0.000608f, -0.001501f, -0.003345f, -0.001427f, -0.001443f, 0.000658f, -0.002079f, -0.000277f, -0.000194f, 0.000617f, 0.003542f, 0.002080f, 0.000614f, 0.001522f, -0.002312f, -0.000063f, -0.001243f, -0.000377f, -0.000994f, 0.001428f, -0.000584f, 0.002340f, -0.001109f, -0.000337f, -0.001230f, -0.000448f, -0.001747f, -0.000712f, 0.000320f, 0.000436f, -0.000155f, 0.000088f, -0.000989f, 0.000591f, 0.001496f, 0.000193f, -0.000908f, 0.001045f, -0.001449f, - 0.000667f, 0.000540f, -0.000076f, -0.000497f, -0.000235f, -0.000129f, -0.000204f, 0.000001f, -0.008464f, -0.010023f, -0.001888f, -0.000536f, -0.000430f, -0.001571f, -0.000678f, 0.003075f, 0.001788f, 0.000671f, 0.000817f, -0.001300f, -0.000280f, 0.002320f, -0.000855f, 0.003758f, -0.002903f, -0.000756f, 0.003027f, -0.000550f, -0.000348f, -0.001728f, 0.002074f, 0.002340f, 0.000037f, 0.002309f, -0.000830f, 0.001048f, -0.000051f, -0.001225f, -0.000202f, -0.000958f, -0.000421f, -0.000604f, 0.001253f, -0.000874f, -0.000219f, -0.001369f, 0.000963f, -0.000685f, 0.002100f, -0.003257f, 0.001395f, 0.001210f, -0.001996f, 0.000100f, -0.001317f, 0.000416f, -0.001499f, 0.000539f, 0.000633f, -0.001848f, -0.000282f, -0.000631f, -0.002838f, -0.001581f, -0.000783f, -0.001347f, -0.000302f, -0.000170f, 0.000160f, -0.001087f, 0.000167f, -0.002165f, 0.000628f, -0.007361f, -0.004313f, -0.005696f, -0.003012f, -0.003783f, -0.000490f, 0.003775f, -0.003931f, 0.003048f, 0.001851f, -0.002048f, 0.004179f, -0.000602f, 0.000773f, -0.002694f, -0.000346f, -0.001159f, -0.000224f, 0.000089f, 0.000997f, 0.000582f, 0.002163f, 0.004307f, - -0.001189f, 0.000658f, -0.002066f, -0.002040f, -0.001919f, 0.000505f, 0.001722f, -0.000542f, -0.000652f, -0.000483f, -0.001344f, 0.001549f, -0.000495f, -0.000016f, -0.001313f, -0.000925f, -0.000883f, -0.001237f, -0.000140f, 0.000027f, -0.001144f, 0.000819f, -0.001735f, 0.000719f, -0.001016f, -0.000089f, 0.000599f, -0.001174f, 0.001542f, -0.002624f, -0.000861f, 0.000348f, -0.000819f, -0.001356f, 0.000699f, -0.000306f, -0.001639f, 0.002771f, 0.001507f, 0.000467f, 0.000508f, 0.000637f, 0.000657f, -0.001252f, -0.020598f, -0.002428f, 0.001737f, -0.001578f, 0.003496f, 0.001519f, -0.004117f, 0.000501f, 0.000769f, -0.001414f, -0.003439f, -0.001364f, -0.000790f, 0.000934f, 0.000314f, -0.003308f, -0.001162f, -0.001796f, -0.003059f, -0.002696f, -0.006055f, -0.003251f, -0.003514f, -0.004403f, 0.003498f, -0.002374f, 0.001314f, 0.002510f, -0.001814f, -0.003010f, -0.001081f, -0.000705f, 0.000754f, 0.001865f, 0.001174f, -0.002508f, -0.002977f, 0.002308f, 0.001535f, 0.001810f, 0.002695f, 0.000308f, 0.000027f, 0.000966f, -0.000090f, -0.001251f, 0.000705f, -0.000712f, -0.000374f, 0.001479f, 0.003998f, -0.001398f, - -0.001966f, 0.000844f, -0.001250f, -0.000203f, 0.002057f, -0.004013f, -0.000051f, -0.001381f, -0.000219f, -0.000171f, 0.000010f, -0.000557f, 0.000760f, -0.001260f, 0.001386f, 0.016515f, 0.014477f, 0.003867f, 0.008816f, 0.002382f, 0.005090f, -0.000870f, -0.000770f, 0.002405f, 0.003352f, 0.001709f, -0.005706f, -0.001958f, 0.003598f, 0.003977f, -0.001467f, -0.002008f, 0.000675f, 0.001616f, 0.001926f, 0.000216f, -0.002968f, -0.006478f, -0.002396f, 0.003424f, -0.000301f, 0.003517f, -0.000844f, -0.001223f, 0.000732f, -0.003062f, -0.001724f, -0.001818f, 0.003293f, -0.004193f, -0.002833f, 0.000645f, 0.000683f, -0.001153f, -0.000137f, -0.001276f, 0.001223f, 0.001575f, 0.001430f, 0.003145f, 0.001880f, -0.000054f, -0.002676f, 0.002391f, -0.000254f, 0.001271f, -0.001320f, 0.000848f, 0.001961f, -0.000427f, -0.000552f, -0.001368f, -0.001492f, 0.000769f, 0.000179f, 0.001138f, -0.001294f, 0.000923f, 0.002551f, -0.000685f, -0.001429f, 0.001645f, 0.019965f, 0.003862f, -0.004045f, 0.003383f, 0.002000f, -0.003680f, -0.000973f, 0.002069f, -0.000004f, 0.000752f, -0.000430f, -0.000664f, -0.004322f, -0.003975f, - 0.001707f, 0.004020f, 0.003892f, -0.003818f, -0.008134f, 0.001263f, -0.000242f, -0.003073f, -0.004215f, -0.000580f, 0.001934f, -0.001269f, 0.002928f, 0.005032f, -0.001942f, -0.001446f, -0.000766f, -0.000571f, -0.001058f, -0.007315f, 0.003799f, 0.003713f, -0.000238f, 0.002452f, -0.002362f, -0.000559f, -0.002154f, 0.003175f, 0.003130f, 0.000524f, -0.000891f, -0.001007f, 0.001713f, 0.000601f, -0.001128f, -0.001722f, -0.000068f, 0.001766f, -0.002490f, -0.001328f, -0.001381f, 0.000587f, 0.000716f, -0.002870f, 0.001502f, 0.003546f, -0.002792f, 0.000146f, -0.000700f, -0.000291f, -0.000052f, 0.000518f, 0.000168f, -0.001013f, -0.002246f, -0.001485f, -0.000627f, 0.001608f, -0.000830f, -0.005383f, -0.003739f, 0.000642f, 0.004871f, -0.004888f, 0.003453f, 0.001753f, 0.000668f, 0.001141f, 0.000750f, 0.003376f, 0.005157f, 0.000270f, 0.001479f, 0.000711f, -0.004633f, -0.003983f, 0.003912f, 0.000676f, -0.004780f, 0.002893f, -0.004094f, 0.000793f, 0.004812f, -0.000177f, -0.001437f, 0.005745f, 0.000780f, 0.000523f, 0.000368f, 0.000309f, 0.000416f, -0.002322f, 0.001391f, 0.002406f, 0.003614f, -0.002789f, - -0.001538f, 0.000725f, 0.000435f, -0.001195f, -0.002730f, 0.001850f, -0.001042f, 0.001345f, 0.000559f, -0.000763f, -0.000925f, 0.000542f, 0.001620f, -0.001111f, -0.000622f, -0.000117f, 0.000912f, -0.002516f, -0.001304f, 0.001423f, 0.000223f, -0.000730f, -0.000507f, 0.001309f, -0.021537f, -0.019872f, -0.004376f, -0.009230f, -0.008005f, -0.004611f, -0.001324f, -0.003468f, -0.004064f, 0.002772f, 0.000819f, -0.000991f, 0.004783f, 0.001702f, 0.005736f, 0.004360f, 0.001340f, 0.001736f, 0.002147f, -0.008691f, 0.004176f, -0.000682f, -0.001748f, -0.001633f, -0.005041f, -0.001592f, -0.001686f, 0.004932f, -0.001550f, -0.002940f, -0.001365f, 0.000795f, -0.000538f, -0.000969f, 0.001197f, -0.001284f, -0.000733f, 0.003041f, -0.002841f, -0.000229f, -0.000836f, 0.005462f, 0.002279f, 0.002211f, -0.004046f, 0.000368f, 0.003848f, -0.001900f, 0.001024f, 0.000078f, 0.001044f, 0.000090f, 0.000457f, -0.000212f, 0.002517f, -0.000228f, -0.000619f, 0.001814f, -0.001068f, 0.001066f, 0.002225f, -0.000857f, -0.001271f, 0.000758f, 0.000955f, -0.001420f, -0.000467f, -0.013308f, 0.028336f, 0.018120f, 0.005541f, 0.001945f, - 0.001746f, 0.002213f, 0.002984f, 0.002999f, 0.005819f, 0.012260f, 0.000460f, 0.001553f, 0.002398f, 0.002649f, 0.002872f, -0.002084f, 0.011486f, 0.008523f, -0.008029f, 0.005915f, 0.000814f, -0.001092f, 0.002561f, 0.007243f, -0.006909f, -0.001738f, 0.000273f, -0.005366f, -0.004037f, -0.003794f, 0.007776f, -0.000207f, -0.001722f, 0.001219f, 0.000149f, -0.002262f, -0.006775f, 0.004630f, 0.003352f, -0.000957f, 0.001679f, 0.004740f, -0.003390f, 0.002643f, -0.000079f, -0.001063f, 0.003283f, 0.003234f, 0.000363f, 0.000551f, -0.000002f, 0.002627f, 0.003141f, 0.000159f, -0.001038f, 0.000094f, -0.001534f, 0.002603f, 0.000084f, -0.000874f, -0.001690f, -0.000772f, 0.001401f, 0.001003f, 0.003763f, -0.001152f, 0.000982f, -0.000804f, 0.030771f, -0.010748f, -0.010864f, 0.004999f, 0.001032f, -0.003905f, -0.003731f, -0.005523f, -0.005782f, -0.003966f, -0.003648f, 0.005261f, 0.001024f, 0.000756f, -0.003077f, -0.002402f, -0.009228f, 0.000122f, -0.003756f, -0.006094f, 0.005006f, 0.003575f, 0.000887f, 0.003328f, 0.000716f, -0.000972f, -0.002192f, -0.000053f, -0.001884f, 0.002736f, 0.004252f, -0.004608f, - -0.001931f, 0.000175f, 0.002230f, 0.006263f, 0.001654f, 0.008361f, -0.004439f, 0.002703f, 0.006684f, 0.004151f, -0.003637f, -0.000934f, 0.000599f, -0.001663f, 0.002770f, -0.000383f, -0.000039f, 0.004474f, 0.002206f, 0.000775f, 0.000213f, -0.000043f, -0.002050f, 0.000009f, 0.000326f, -0.001920f, -0.001324f, 0.002001f, -0.000970f, -0.003701f, -0.000757f, 0.000151f, -0.000864f, -0.003869f, 0.000799f, 0.000828f, 0.000757f, 0.001108f, -0.001038f, -0.001609f, 0.009851f, 0.018942f, 0.007330f, 0.005128f, 0.005827f, -0.001649f, 0.001815f, -0.005315f, 0.009290f, 0.003760f, 0.008916f, 0.002756f, 0.003337f, -0.008165f, 0.010170f, 0.015274f, 0.001831f, 0.009917f, -0.002086f, -0.007964f, -0.008038f, 0.007279f, -0.002444f, 0.005815f, 0.000954f, 0.002346f, -0.004559f, 0.004498f, -0.001680f, -0.001580f, 0.007261f, 0.005149f, -0.004005f, 0.006913f, 0.000644f, 0.001263f, -0.001527f, -0.005214f, 0.001310f, 0.000377f, -0.003042f, -0.003299f, 0.002907f, 0.004267f, 0.001257f, -0.001544f, 0.001870f, 0.000126f, 0.004407f, -0.002802f, -0.000567f, -0.004597f, 0.000360f, 0.004381f, 0.002814f, -0.002136f, - -0.000198f, 0.001479f, -0.004223f, -0.000397f, -0.002950f, -0.001639f, 0.000639f, 0.000948f, 0.002503f, -0.003314f, 0.001164f, -0.003807f, 0.000097f, 0.004385f, 0.001365f, 0.000724f, -0.000366f, -0.021768f, -0.001462f, -0.004705f, 0.006000f, -0.004488f, 0.004895f, 0.000437f, 0.003878f, -0.000287f, 0.003315f, -0.010720f, 0.002998f, -0.000996f, -0.004207f, 0.002238f, -0.005069f, 0.003275f, -0.005111f, -0.002266f, -0.011015f, 0.006458f, 0.012707f, -0.004750f, -0.001934f, -0.001148f, -0.002333f, 0.002305f, 0.002353f, 0.004090f, -0.009803f, 0.003215f, -0.006183f, -0.001357f, -0.000539f, 0.005283f, 0.001667f, -0.002105f, 0.000833f, 0.001424f, 0.003315f, 0.003975f, -0.006187f, -0.001581f, 0.000665f, -0.003965f, -0.004090f, -0.000330f, -0.002976f, 0.001602f, 0.003155f, 0.000877f, 0.000388f, -0.000351f, 0.002932f, 0.008881f, 0.004567f, -0.004714f, 0.000855f, 0.002390f, -0.002757f, 0.003464f, 0.000579f, -0.002807f, -0.000514f, 0.004324f, 0.000197f, 0.004183f, -0.005114f, -0.000566f, 0.002689f, 0.000746f, -0.040147f, -0.015492f, 0.008515f, 0.002646f, -0.004901f, 0.005428f, 0.005030f, 0.007263f, - -0.001548f, -0.003644f, 0.006911f, -0.000044f, -0.004191f, 0.008688f, -0.009837f, -0.013502f, -0.005948f, -0.007407f, 0.004876f, 0.006288f, 0.000106f, 0.001361f, 0.010722f, 0.004253f, -0.010358f, -0.005156f, -0.006281f, 0.001584f, -0.009611f, -0.008969f, -0.000288f, 0.000947f, -0.003539f, -0.004513f, -0.005780f, -0.003518f, -0.005275f, -0.005792f, -0.001808f, 0.000045f, -0.001754f, -0.000745f, -0.003504f, -0.001010f, -0.002643f, -0.006710f, 0.013714f, 0.000635f, 0.003383f, -0.005993f, 0.003758f, -0.000844f, 0.002000f, -0.004937f, -0.000021f, -0.001243f, -0.003535f, -0.002850f, -0.001541f, 0.003831f, 0.003334f, 0.002850f, 0.002251f, 0.002052f, -0.000529f, -0.000604f, -0.003112f, -0.001261f, -0.000096f, -0.000963f, 0.004195f, 0.000377f, 0.002464f, -0.000726f, 0.021393f, 0.007598f, 0.017263f, 0.002488f, 0.001321f, -0.007051f, 0.002792f, 0.010007f, 0.004006f, 0.000516f, 0.007021f, -0.006384f, -0.002602f, 0.005343f, -0.004118f, 0.001694f, 0.009960f, 0.002900f, 0.001466f, 0.002863f, -0.001673f, 0.003995f, -0.003138f, -0.000178f, 0.001772f, 0.000273f, -0.002413f, -0.003014f, 0.001151f, 0.009798f, - -0.003195f, 0.002173f, -0.009257f, -0.005333f, 0.004332f, 0.010304f, -0.008140f, -0.000305f, 0.005185f, 0.000910f, 0.001994f, -0.007177f, -0.002340f, -0.006272f, -0.010229f, -0.003136f, -0.005689f, -0.006465f, 0.004862f, 0.001481f, 0.001670f, -0.004003f, -0.002177f, -0.001205f, -0.009877f, -0.001451f, 0.005478f, -0.004455f, 0.004377f, 0.008515f, 0.001321f, 0.005412f, 0.003901f, -0.000306f, -0.001896f, 0.004540f, -0.006691f, -0.001048f, -0.000483f, 0.003358f, 0.001932f, 0.002943f, 0.025416f, -0.005310f, -0.008273f, 0.001607f, 0.005562f, 0.005155f, 0.004563f, -0.001108f, 0.004945f, 0.001993f, -0.006707f, -0.012340f, 0.008087f, 0.002587f, 0.005737f, 0.003966f, -0.003770f, 0.001788f, -0.005253f, -0.007988f, 0.008186f, -0.005097f, -0.010717f, 0.001374f, -0.002113f, 0.001544f, -0.001455f, -0.000777f, -0.003053f, -0.003825f, 0.002591f, 0.007193f, -0.010490f, 0.010057f, -0.008951f, -0.010855f, 0.000613f, 0.003193f, -0.006728f, 0.005139f, -0.001365f, 0.003326f, -0.005874f, -0.002484f, 0.008670f, 0.003926f, 0.008777f, 0.002630f, 0.000194f, 0.003102f, -0.000546f, 0.000481f, 0.004332f, -0.000310f, - 0.000320f, -0.004247f, -0.003505f, -0.002504f, 0.002863f, -0.003340f, -0.003451f, 0.005523f, -0.000747f, 0.006141f, 0.000346f, -0.004621f, 0.006793f, 0.005593f, -0.001104f, 0.003496f, -0.004446f, -0.006629f, 0.001730f, -0.002873f, -0.005178f, 0.021419f, 0.026471f, -0.004214f, 0.000318f, -0.013425f, -0.001349f, -0.009855f, -0.007084f, -0.002511f, -0.004807f, 0.007237f, 0.000128f, 0.005559f, -0.012237f, 0.010040f, -0.007672f, 0.010250f, 0.000473f, 0.008083f, -0.002916f, 0.010243f, 0.003534f, -0.005254f, 0.002288f, -0.007724f, 0.005014f, -0.004430f, 0.011871f, 0.003238f, 0.007813f, -0.013213f, -0.007363f, -0.003471f, -0.006520f, -0.003050f, -0.004463f, 0.000103f, 0.015978f, -0.007708f, 0.008027f, 0.013201f, 0.001904f, 0.005608f, 0.000054f, -0.003388f, -0.006357f, -0.005184f, 0.000622f, -0.003853f, 0.008108f, -0.005680f, 0.003669f, 0.009490f, -0.001394f, -0.001226f, -0.000900f, 0.007663f, 0.008615f, 0.002301f, -0.004201f, -0.004011f, -0.002307f, 0.002945f, -0.008193f, 0.001010f, -0.001648f, -0.002726f, -0.000129f, 0.004727f, 0.000192f, 0.006873f, 0.006523f, 0.000660f, 0.001238f, -0.004126f, - -0.020950f, -0.017931f, 0.007727f, -0.002005f, 0.009659f, -0.005335f, -0.005227f, -0.006458f, -0.006122f, -0.002199f, -0.016668f, -0.005530f, 0.005733f, 0.009095f, 0.003086f, -0.010885f, -0.003716f, -0.005029f, 0.004260f, 0.016687f, 0.008602f, 0.004357f, 0.000100f, 0.001601f, 0.000299f, 0.003225f, 0.007877f, 0.001037f, 0.001651f, -0.004454f, -0.000182f, -0.006542f, 0.002106f, 0.003698f, 0.005502f, 0.001122f, -0.004777f, -0.001768f, 0.007420f, -0.003420f, 0.002404f, 0.001961f, 0.002272f, 0.010581f, -0.006373f, -0.008378f, 0.002591f, 0.007621f, 0.001249f, 0.007611f, 0.008076f, 0.004528f, 0.005366f, 0.002634f, 0.000569f, 0.005106f, 0.013873f, -0.007871f, -0.000792f, 0.002677f, 0.000492f, -0.006051f, -0.001954f, 0.005135f, -0.000946f, -0.005403f, 0.001359f, 0.010889f, -0.009574f, 0.003088f, -0.009154f, 0.005019f, 0.002210f, 0.001628f, -0.000687f, -0.041489f, -0.014183f, -0.001144f, -0.003896f, -0.010394f, 0.006441f, 0.008088f, 0.014231f, 0.004391f, 0.009031f, -0.008387f, -0.017028f, 0.007829f, -0.003851f, 0.000227f, -0.009063f, 0.008938f, -0.005262f, -0.000633f, 0.008722f, -0.023734f, - 0.002495f, 0.012050f, -0.022620f, -0.006229f, -0.007872f, 0.000920f, 0.001070f, 0.005408f, -0.006135f, 0.007230f, 0.001272f, -0.012150f, -0.005959f, 0.001248f, -0.001326f, -0.006097f, 0.005430f, 0.013769f, 0.003179f, 0.003700f, -0.002036f, -0.003613f, 0.008319f, 0.001343f, -0.003893f, -0.020138f, -0.003005f, 0.002398f, -0.009969f, 0.004698f, 0.004264f, 0.000702f, -0.007681f, -0.007111f, -0.008210f, 0.017869f, 0.004901f, -0.002814f, 0.003600f, -0.015329f, 0.001901f, -0.007194f, -0.008121f, 0.007920f, -0.001286f, 0.000097f, -0.005129f, -0.019076f, 0.002601f, 0.005870f, 0.003357f, -0.001262f, 0.011283f, 0.000650f, 0.000634f, 0.043680f, 0.011121f, 0.011182f, 0.009684f, -0.002925f, 0.000451f, 0.044894f, 0.013070f, -0.003873f, 0.027563f, -0.015588f, 0.011522f, 0.002245f, 0.007051f, 0.011066f, -0.003449f, -0.008035f, 0.008495f, -0.001739f, -0.027189f, 0.006747f, 0.007053f, 0.005541f, 0.012939f, 0.007975f, 0.008439f, -0.007900f, 0.001662f, -0.007648f, -0.003896f, 0.007801f, 0.002631f, -0.016148f, -0.009534f, -0.013590f, -0.019874f, -0.003329f, 0.004015f, 0.009369f, 0.008274f, 0.006876f, - 0.005948f, -0.003267f, 0.010267f, 0.005417f, -0.012714f, -0.005187f, 0.003254f, 0.009120f, 0.000112f, 0.001655f, 0.016603f, -0.003406f, -0.001539f, -0.004762f, -0.000997f, 0.008074f, -0.007400f, -0.000344f, -0.010410f, -0.009641f, -0.005965f, 0.010193f, 0.014641f, -0.004826f, 0.001140f, -0.003427f, -0.009135f, -0.006833f, 0.002474f, -0.011287f, -0.002548f, -0.003623f, -0.006239f, 0.044110f, 0.026764f, 0.001428f, 0.017144f, 0.012291f, 0.004066f, 0.018823f, 0.005851f, -0.000566f, -0.005601f, -0.004962f, -0.012203f, -0.034680f, -0.002157f, 0.002783f, -0.011292f, -0.007194f, -0.000959f, 0.023284f, 0.008150f, -0.006762f, 0.000576f, 0.001071f, -0.003097f, 0.009457f, -0.001390f, -0.006806f, -0.003935f, -0.006464f, 0.004045f, -0.009218f, -0.020706f, -0.000175f, -0.010699f, -0.017627f, 0.003554f, 0.006638f, 0.010831f, 0.005286f, 0.009592f, -0.007117f, -0.017890f, -0.012507f, -0.016096f, 0.005637f, 0.015355f, 0.011787f, 0.008212f, 0.014430f, 0.000462f, 0.008709f, 0.020684f, -0.017894f, 0.003087f, -0.008544f, 0.000046f, 0.005079f, 0.006078f, 0.009158f, -0.001036f, -0.021786f, -0.016324f, 0.002538f, - -0.004831f, -0.006905f, -0.004352f, -0.005569f, -0.014797f, 0.000204f, 0.009003f, -0.002168f, 0.006414f, -0.005678f, -0.001842f, -0.002254f, 0.010200f, -0.021586f, 0.002130f, -0.016342f, 0.007016f, -0.031807f, -0.001461f, -0.010052f, -0.017334f, 0.030794f, 0.016452f, -0.009926f, -0.027485f, -0.006015f, -0.010330f, -0.022738f, 0.017875f, 0.001840f, -0.016738f, -0.005173f, 0.009000f, -0.014514f, -0.010896f, -0.007166f, -0.018658f, -0.006047f, -0.000724f, -0.013795f, -0.013745f, 0.019861f, -0.007339f, -0.004820f, -0.002020f, -0.003120f, 0.015755f, -0.016620f, -0.008522f, 0.004904f, -0.004933f, 0.001172f, -0.004205f, 0.010465f, -0.016972f, 0.007259f, -0.027015f, 0.004045f, -0.007784f, -0.009388f, 0.028179f, 0.004331f, -0.010466f, 0.006829f, 0.005911f, -0.021304f, 0.015867f, -0.002309f, -0.004817f, -0.000120f, 0.009186f, -0.002100f, 0.000597f, -0.009179f, 0.006199f, 0.009212f, 0.013042f, -0.009082f, -0.027727f, 0.021641f, -0.001711f, 0.010199f, 0.010320f, -0.003646f, 0.006465f, 0.016805f, -0.017327f, -0.041439f, -0.024776f, 0.006400f, -0.016189f, 0.002911f, -0.011998f, -0.004574f, -0.017091f, -0.009939f, - 0.007000f, 0.024973f, 0.024025f, 0.005087f, 0.016639f, -0.011130f, 0.029866f, 0.023811f, -0.019159f, -0.015171f, 0.004058f, 0.006216f, 0.025081f, 0.010604f, 0.015675f, -0.004917f, 0.005643f, -0.002274f, -0.003873f, -0.004412f, 0.023378f, 0.012077f, 0.022346f, 0.022408f, 0.003015f, -0.000109f, -0.011427f, 0.011419f, -0.002304f, -0.020252f, -0.015358f, -0.002904f, -0.012152f, -0.001297f, -0.012464f, -0.008799f, 0.005660f, -0.001832f, -0.008304f, 0.019078f, 0.019957f, -0.010914f, -0.005177f, 0.029961f, 0.010584f, -0.018396f, -0.020453f, -0.005713f, 0.006089f, 0.000339f, -0.004792f, -0.012703f, 0.010565f, 0.004912f, -0.005819f, 0.004559f, 0.001920f, -0.016034f, -0.009020f, 0.002928f, -0.008024f, -0.007156f, -0.010727f, 0.024693f, -0.020304f, -0.015496f, -0.016045f, -0.023888f, -0.020279f, -0.000315f, -0.015935f, -0.020802f, 0.005444f, -0.001931f, -0.028659f, 0.020389f, 0.003789f, -0.001922f, 0.010364f, 0.031501f, 0.030397f, 0.012867f, -0.036948f, 0.013574f, 0.009952f, -0.036524f, -0.000393f, -0.017744f, -0.008406f, 0.018492f, -0.021866f, 0.012533f, 0.000095f, -0.004012f, -0.007761f, 0.003532f, - -0.001741f, 0.006044f, -0.004151f, -0.019711f, 0.018961f, 0.008670f, 0.022686f, -0.002636f, -0.007571f, -0.011233f, 0.009205f, -0.010165f, 0.026751f, 0.005308f, 0.016069f, -0.021152f, 0.016589f, 0.000295f, 0.005860f, -0.013882f, 0.004512f, -0.016441f, -0.002581f, -0.016879f, 0.006661f, 0.010945f, -0.021964f, 0.000411f, -0.018146f, 0.007920f, 0.010477f, 0.009803f, -0.001629f, -0.031527f, -0.000200f, 0.007467f, -0.002992f, 0.012948f, -0.029985f, 0.006666f, -0.012840f, 0.002871f, -0.011143f, 0.000778f, 0.006613f, 0.043958f, 0.054456f, 0.022064f, 0.019334f, -0.031587f, 0.030448f, 0.042945f, -0.046967f, 0.005211f, 0.031377f, 0.004897f, -0.056103f, -0.006119f, -0.030182f, 0.009476f, 0.011871f, -0.014777f, -0.004996f, 0.009890f, -0.025395f, -0.002519f, -0.009553f, -0.013222f, 0.005738f, -0.020170f, 0.021939f, 0.014725f, 0.028193f, -0.014049f, 0.005211f, -0.003396f, -0.010476f, 0.034290f, 0.000076f, -0.016406f, -0.006768f, 0.007073f, -0.006672f, -0.009522f, -0.009835f, 0.017228f, 0.007423f, 0.024114f, -0.000846f, 0.008558f, 0.033155f, -0.020898f, 0.005244f, -0.014345f, 0.026581f, -0.010518f, - 0.013019f, 0.004588f, 0.000088f, -0.010193f, -0.017049f, -0.012841f, 0.006368f, 0.022562f, -0.020435f, 0.018920f, 0.024459f, 0.010974f, 0.028455f, -0.013835f, -0.009087f, 0.016828f, -0.001253f, -0.004079f, -0.022871f, -0.002507f, -0.018250f, 0.003091f, 0.028643f, 0.011249f, 0.009858f, 0.008780f}, - {-0.005177f, 0.000170f, -0.001276f, 0.001261f, -0.000706f, -0.000213f, 0.000386f, 0.000904f, -0.000173f, 0.000903f, 0.000379f, 0.000299f, -0.000045f, -0.000065f, 0.000137f, 0.000097f, -0.000456f, -0.000240f, -0.000861f, 0.000391f, -0.000269f, -0.000036f, 0.000890f, 0.000334f, 0.000117f, 0.000122f, 0.000254f, 0.000010f, -0.000152f, -0.000006f, -0.000095f, -0.000062f, -0.000264f, -0.000141f, -0.000083f, -0.000064f, 0.000048f, 0.000067f, 0.000001f, 0.000002f, 0.000001f, -0.000036f, -0.000016f, 0.000023f, 0.000083f, -0.000028f, 0.003626f, 0.001992f, 0.001004f, 0.001228f, 0.000691f, 0.001039f, 0.002102f, 0.000121f, 0.000060f, -0.000219f, -0.000519f, 0.001091f, 0.000013f, -0.000077f, 0.001158f, -0.000448f, -0.000537f, 0.000320f, 0.000116f, 0.000498f, 0.000121f, 0.000191f, 0.000523f, -0.000350f, 0.000351f, -0.000104f, -0.000077f, -0.000263f, 0.000177f, 0.000694f, 0.000368f, 0.000437f, 0.000366f, -0.000044f, 0.000285f, 0.000411f, -0.000169f, 0.000347f, -0.000583f, 0.000729f, -0.000293f, 0.000217f, 0.000039f, 0.000105f, -0.000140f, -0.000130f, 0.001821f, -0.002084f, -0.000281f, -0.000381f, - -0.000520f, 0.000341f, -0.001038f, 0.000354f, -0.000025f, 0.000475f, 0.000413f, -0.000819f, -0.000293f, 0.001257f, -0.000132f, 0.000271f, -0.000233f, 0.000549f, 0.001150f, 0.001333f, 0.000226f, 0.000577f, -0.000019f, -0.001045f, -0.000031f, 0.000118f, -0.000226f, 0.000008f, 0.000580f, -0.000598f, -0.000808f, 0.000358f, -0.000390f, -0.000357f, -0.000566f, -0.000020f, 0.000600f, 0.000155f, -0.000174f, -0.000211f, -0.000235f, 0.000002f, 0.000136f, -0.000315f, 0.000122f, -0.000360f, -0.005226f, -0.003719f, -0.001810f, -0.001370f, -0.001043f, -0.001081f, -0.000366f, -0.000799f, -0.000241f, -0.000503f, -0.001287f, 0.000246f, 0.000670f, -0.000111f, 0.000386f, -0.000253f, -0.000662f, -0.000676f, -0.001004f, -0.000349f, 0.000254f, 0.000027f, -0.000560f, 0.000382f, -0.000679f, -0.000682f, 0.000459f, -0.000003f, 0.000035f, 0.000358f, 0.000419f, 0.000107f, -0.000144f, -0.000203f, -0.000254f, 0.000138f, 0.000085f, -0.000357f, 0.000206f, -0.000709f, -0.000291f, -0.000175f, -0.000058f, -0.000505f, -0.000086f, -0.000185f, -0.007417f, -0.001016f, 0.000592f, 0.000093f, 0.000560f, 0.000041f, -0.000392f, 0.000252f, - -0.000298f, -0.000368f, -0.000649f, -0.000580f, 0.000287f, -0.000228f, 0.000492f, -0.000476f, 0.000025f, -0.000461f, 0.000157f, 0.000736f, -0.000181f, 0.000542f, 0.000048f, -0.000536f, -0.000088f, 0.000665f, 0.000360f, 0.000425f, 0.000521f, -0.000733f, 0.000497f, -0.000311f, -0.000043f, -0.000405f, -0.000168f, 0.000188f, 0.000324f, 0.000145f, -0.000157f, 0.000531f, 0.000492f, 0.000266f, -0.000150f, -0.000377f, 0.000065f, -0.000314f, 0.008753f, 0.006983f, 0.001643f, 0.003129f, 0.000744f, 0.002421f, 0.001688f, 0.000527f, 0.001699f, 0.000690f, 0.001285f, 0.000566f, -0.000482f, 0.001304f, 0.000905f, -0.000352f, -0.000130f, -0.002416f, -0.000273f, 0.000126f, 0.001462f, 0.000170f, 0.000043f, 0.000754f, 0.000045f, 0.000681f, 0.000611f, 0.000102f, -0.000066f, 0.000240f, 0.000990f, 0.000772f, 0.000632f, -0.000064f, -0.000277f, 0.000042f, 0.000448f, -0.000177f, -0.000069f, 0.000521f, 0.000152f, -0.000260f, -0.000034f, 0.000110f, -0.000536f, 0.000640f, 0.015398f, 0.005653f, 0.002716f, 0.001629f, 0.000974f, 0.001005f, 0.000931f, 0.001582f, 0.000373f, 0.002575f, 0.000339f, 0.000241f, - 0.001090f, -0.000597f, 0.000252f, -0.000265f, -0.000290f, -0.000426f, 0.001638f, 0.000912f, -0.000148f, 0.001258f, -0.000877f, -0.000221f, -0.000317f, 0.001941f, -0.000193f, 0.000696f, 0.000143f, 0.000949f, 0.000155f, -0.000287f, 0.000490f, 0.000648f, -0.000311f, 0.000227f, 0.000256f, 0.000169f, 0.000385f, -0.000135f, 0.000443f, 0.000403f, -0.001259f, 0.000265f, 0.000135f, 0.000229f, 0.005907f, -0.004367f, -0.001538f, -0.002018f, -0.001264f, -0.001197f, 0.000807f, -0.000682f, -0.001829f, -0.000452f, -0.002431f, -0.000563f, -0.001061f, -0.002319f, -0.000597f, 0.000529f, -0.001477f, -0.000487f, 0.000221f, -0.001637f, -0.000081f, 0.001895f, 0.000417f, 0.000275f, -0.000875f, 0.000039f, 0.000654f, 0.000017f, -0.000804f, -0.000841f, 0.000863f, -0.000074f, -0.001130f, 0.000108f, -0.000482f, 0.001378f, -0.000043f, 0.000622f, -0.000225f, 0.001192f, -0.000785f, 0.000479f, 0.000157f, 0.000281f, 0.000013f, 0.000307f, -0.000034f, -0.000379f, 0.000725f, -0.016236f, -0.009184f, -0.001875f, -0.002289f, -0.001570f, -0.002001f, -0.002821f, -0.000259f, 0.000079f, -0.000828f, 0.000710f, -0.000768f, 0.000123f, - -0.000079f, -0.000921f, -0.001021f, -0.001608f, -0.000563f, 0.001600f, -0.001512f, -0.000161f, 0.001442f, 0.000930f, -0.000228f, 0.000542f, -0.000211f, -0.001551f, -0.000779f, -0.001270f, -0.000436f, 0.000076f, -0.000322f, 0.000762f, -0.001372f, -0.001066f, -0.000043f, -0.001312f, -0.001030f, -0.000921f, -0.001093f, 0.001175f, -0.000338f, -0.001380f, -0.000446f, 0.000411f, 0.000440f, -0.000448f, -0.000714f, -0.000295f, -0.009960f, 0.005717f, 0.002142f, 0.000935f, 0.000979f, 0.000870f, 0.000435f, -0.001070f, 0.000281f, -0.000639f, -0.000184f, 0.001777f, 0.001092f, 0.001529f, 0.001574f, 0.001615f, -0.001353f, 0.000678f, 0.001748f, 0.000273f, 0.001522f, -0.001807f, 0.000340f, -0.000464f, -0.000122f, -0.000684f, 0.000643f, -0.000245f, 0.000026f, 0.001573f, -0.001637f, -0.000508f, 0.000622f, 0.000899f, -0.000429f, 0.000746f, -0.000650f, -0.001091f, 0.001274f, -0.000655f, -0.000058f, -0.000375f, 0.000478f, -0.000182f, 0.000584f, -0.000655f, -0.000247f, -0.000596f, -0.000164f, -0.000525f, 0.000945f, 0.000066f, 0.000300f, 0.014813f, 0.006070f, 0.001282f, 0.003380f, 0.002644f, 0.000514f, 0.001181f, - 0.003196f, 0.001456f, -0.000078f, 0.000682f, 0.000396f, -0.000474f, 0.000913f, 0.002744f, 0.000642f, 0.003275f, 0.001590f, -0.002706f, 0.000503f, 0.000091f, 0.000553f, 0.002415f, 0.001360f, 0.000969f, -0.000218f, -0.000385f, -0.000333f, -0.000417f, 0.000372f, -0.000539f, 0.000801f, 0.000234f, 0.001092f, -0.000233f, -0.000288f, 0.000393f, 0.000890f, 0.000478f, -0.000105f, -0.001198f, -0.000508f, -0.000671f, 0.001051f, 0.000754f, 0.001187f, 0.000648f, 0.000171f, 0.000157f, 0.001013f, 0.000794f, 0.000662f, 0.000093f, 0.016550f, 0.004748f, 0.002066f, 0.002587f, 0.000422f, 0.002499f, -0.000410f, -0.000959f, -0.000059f, 0.000638f, 0.000260f, -0.000082f, 0.000468f, 0.002545f, -0.000383f, -0.001601f, -0.001126f, 0.001229f, 0.000306f, 0.001433f, 0.002272f, 0.001992f, -0.000148f, 0.001325f, -0.001464f, 0.000152f, -0.001141f, 0.001527f, 0.000865f, -0.001741f, 0.000994f, -0.000833f, 0.000104f, -0.000675f, 0.001005f, -0.000651f, 0.001265f, 0.001014f, 0.000808f, 0.001648f, 0.000520f, -0.000045f, -0.000430f, -0.000007f, 0.000200f, 0.001824f, -0.000076f, 0.000036f, 0.000104f, 0.000876f, - 0.000565f, 0.000055f, -0.000257f, 0.002272f, -0.007029f, -0.002874f, -0.001128f, -0.001624f, -0.000718f, -0.000619f, 0.000123f, 0.000998f, -0.001014f, -0.001915f, 0.001794f, -0.002299f, -0.002165f, -0.000410f, -0.000490f, 0.000985f, -0.000603f, -0.000057f, -0.002091f, -0.001268f, -0.002527f, -0.002804f, -0.003091f, -0.000441f, 0.000741f, -0.002182f, -0.000567f, 0.000301f, 0.000251f, 0.000085f, -0.000262f, -0.002163f, -0.001321f, 0.000927f, 0.000381f, -0.000512f, 0.002058f, -0.001375f, -0.000593f, 0.000498f, 0.001270f, 0.001010f, -0.000156f, -0.000320f, 0.000513f, 0.000290f, -0.001299f, 0.000109f, -0.000753f, -0.000365f, 0.000126f, -0.000549f, 0.000098f, 0.000886f, -0.017970f, -0.005690f, -0.003375f, -0.001435f, -0.002421f, -0.001979f, -0.000549f, -0.001420f, -0.000555f, -0.001887f, -0.002488f, -0.001824f, -0.000589f, -0.003748f, -0.000866f, -0.001541f, -0.002232f, -0.000305f, 0.000414f, 0.001186f, -0.001295f, -0.001887f, -0.000662f, 0.001499f, 0.001985f, 0.002377f, 0.001315f, -0.000095f, -0.001161f, -0.000569f, 0.000041f, -0.001494f, 0.000640f, 0.000964f, 0.001282f, -0.000883f, -0.000701f, -0.000712f, - -0.000307f, -0.000320f, -0.000483f, 0.000939f, -0.000253f, 0.000596f, -0.001212f, -0.002187f, -0.000873f, -0.000117f, 0.001111f, -0.001899f, 0.000649f, -0.000931f, 0.000907f, -0.000948f, 0.000554f, -0.010334f, 0.002754f, 0.000766f, 0.000011f, 0.001812f, -0.001736f, 0.000466f, -0.003994f, -0.001298f, 0.001392f, 0.000987f, 0.002579f, -0.000186f, 0.002814f, -0.001637f, -0.000410f, 0.001348f, -0.002442f, -0.000895f, -0.001435f, 0.002745f, -0.000169f, -0.002267f, 0.001149f, 0.002190f, -0.001937f, -0.001477f, -0.001743f, 0.000512f, -0.000401f, 0.000949f, -0.000662f, -0.000550f, -0.000461f, -0.001056f, 0.001556f, -0.001239f, 0.000310f, 0.001021f, -0.000116f, 0.001179f, -0.000667f, 0.002572f, 0.000398f, -0.000249f, -0.000883f, -0.000882f, 0.000055f, -0.001016f, -0.001234f, -0.000767f, 0.000220f, 0.000888f, -0.000100f, 0.000254f, -0.001068f, -0.001080f, -0.001530f, -0.000604f, -0.000467f, -0.000392f, 0.008980f, 0.012785f, 0.004458f, 0.004411f, 0.006110f, 0.004354f, -0.000590f, 0.000839f, -0.000453f, 0.000785f, 0.000767f, 0.001083f, 0.000842f, 0.002155f, 0.000854f, 0.001336f, 0.000440f, 0.004287f, - 0.001022f, 0.002082f, 0.001262f, 0.001074f, 0.003412f, 0.000766f, 0.004271f, 0.002164f, -0.000871f, 0.002968f, 0.000783f, 0.001437f, 0.003003f, 0.000563f, 0.001780f, -0.000969f, -0.000331f, 0.000793f, 0.001332f, -0.001900f, 0.001547f, -0.001127f, -0.002034f, -0.001246f, 0.001620f, 0.002415f, 0.001843f, -0.000436f, 0.000563f, 0.000496f, 0.000878f, 0.001224f, 0.000694f, 0.001390f, 0.000833f, -0.001509f, -0.000110f, 0.000937f, 0.001356f, 0.000320f, 0.000383f, 0.000137f, -0.001509f, 0.030699f, 0.002446f, -0.001685f, 0.002599f, -0.001794f, 0.003607f, 0.000932f, 0.003782f, -0.001927f, 0.000468f, -0.000102f, 0.002321f, -0.004007f, 0.000884f, 0.002381f, -0.000405f, -0.000693f, 0.003341f, 0.004939f, -0.001982f, -0.001291f, 0.000741f, 0.002383f, -0.000990f, 0.001508f, 0.000207f, -0.001747f, -0.001234f, -0.001416f, 0.001196f, 0.001422f, 0.001898f, -0.001391f, 0.002081f, -0.001378f, 0.002025f, 0.001598f, -0.000312f, -0.001249f, 0.000779f, -0.001938f, -0.002453f, 0.000466f, -0.001638f, 0.000617f, 0.000308f, 0.000176f, 0.001226f, -0.000123f, 0.001461f, -0.000014f, -0.001627f, 0.000593f, - -0.000331f, 0.000729f, -0.001156f, -0.000362f, 0.000324f, 0.000777f, -0.000578f, -0.002329f, -0.010514f, -0.010197f, -0.002314f, 0.000801f, -0.000454f, -0.001529f, -0.001663f, -0.002267f, -0.000607f, 0.001703f, -0.000547f, -0.000558f, -0.002344f, 0.002495f, -0.000138f, -0.002013f, -0.001746f, 0.004315f, -0.003872f, 0.000429f, 0.002858f, -0.000305f, 0.000487f, -0.003714f, 0.001217f, -0.001571f, 0.000921f, -0.002566f, -0.001676f, 0.000471f, 0.000724f, -0.001171f, -0.001330f, 0.000179f, -0.000521f, 0.000240f, -0.001552f, -0.000845f, 0.001715f, -0.000121f, -0.000731f, -0.000407f, 0.002176f, 0.001007f, -0.001148f, -0.001770f, -0.001572f, 0.000631f, -0.000182f, -0.000694f, 0.000253f, 0.000439f, -0.000822f, 0.002613f, 0.001451f, -0.000163f, -0.000106f, -0.000550f, 0.000398f, -0.000623f, -0.000633f, -0.000639f, -0.000043f, -0.001298f, -0.001020f, -0.003987f, -0.003650f, -0.004107f, -0.003159f, -0.002096f, -0.001594f, 0.000450f, -0.000155f, -0.000950f, -0.000537f, 0.001128f, 0.003553f, -0.003076f, 0.001495f, -0.000952f, -0.002123f, 0.002702f, -0.000328f, 0.000632f, 0.003290f, 0.000621f, 0.001326f, -0.002008f, - -0.000607f, -0.006075f, -0.000808f, 0.001299f, 0.000668f, 0.000663f, 0.000531f, 0.001000f, -0.001471f, -0.001728f, 0.001324f, -0.000032f, 0.001247f, 0.000807f, -0.001728f, 0.001482f, -0.000227f, -0.004262f, -0.003709f, -0.000473f, -0.003514f, 0.000581f, 0.000981f, -0.000098f, -0.000968f, -0.000257f, 0.000066f, -0.000873f, -0.000405f, -0.000062f, -0.000683f, 0.001201f, 0.000197f, 0.000488f, -0.000702f, -0.000309f, 0.001602f, 0.000577f, -0.001182f, 0.001303f, -0.000358f, -0.000654f, -0.001870f, 0.000174f, -0.020039f, -0.004591f, 0.000316f, -0.004007f, 0.001631f, 0.000381f, 0.004833f, -0.002269f, 0.000308f, -0.001340f, 0.003247f, -0.006595f, -0.006290f, 0.002644f, -0.003037f, 0.004731f, 0.001740f, -0.003829f, -0.006662f, -0.000167f, -0.001869f, -0.003257f, -0.001307f, 0.000751f, 0.001105f, -0.001578f, 0.005745f, 0.000296f, -0.000546f, -0.002403f, 0.001971f, 0.002159f, 0.002358f, 0.002502f, -0.000288f, -0.001493f, -0.000540f, 0.001478f, -0.000094f, 0.001786f, -0.001662f, -0.000667f, -0.000557f, 0.002072f, 0.001688f, -0.001819f, 0.002381f, -0.001314f, -0.001621f, 0.000204f, -0.000725f, -0.001558f, - 0.001631f, -0.001843f, -0.000225f, 0.000478f, -0.000427f, -0.000742f, 0.000442f, 0.001562f, -0.000941f, 0.001502f, -0.001210f, 0.001019f, -0.000665f, -0.000739f, -0.000466f, 0.018432f, 0.016125f, 0.003415f, 0.004281f, -0.000827f, 0.005240f, 0.004265f, 0.005277f, -0.000190f, 0.002093f, 0.001310f, -0.005038f, -0.004202f, 0.002275f, 0.000476f, -0.003624f, -0.003759f, -0.002161f, 0.000261f, 0.002094f, 0.000644f, 0.004999f, 0.004627f, 0.001968f, -0.001055f, -0.001175f, 0.003063f, 0.002803f, 0.000233f, 0.002447f, -0.000806f, 0.003143f, 0.000181f, -0.000751f, 0.004452f, 0.002256f, 0.003649f, 0.002295f, 0.000797f, 0.002497f, 0.001281f, 0.000823f, 0.002362f, -0.001368f, 0.000462f, 0.003081f, -0.000048f, -0.002102f, 0.001854f, 0.001784f, 0.001311f, -0.001503f, -0.000058f, 0.001757f, 0.002740f, -0.001466f, 0.003316f, 0.003737f, -0.000694f, -0.002155f, 0.000322f, 0.000789f, 0.000559f, 0.001585f, -0.000045f, 0.000506f, 0.001254f, 0.022212f, 0.001924f, -0.000735f, 0.001681f, 0.000974f, -0.003553f, 0.000855f, 0.001102f, -0.000099f, 0.002484f, 0.003309f, 0.005209f, -0.002378f, -0.002200f, - -0.003707f, -0.002810f, 0.003192f, -0.000151f, 0.004654f, -0.001036f, -0.001254f, 0.002069f, 0.004031f, 0.001749f, -0.004249f, 0.003392f, -0.001311f, 0.002734f, -0.001469f, 0.002146f, -0.002598f, 0.001639f, -0.000299f, 0.002498f, 0.000193f, 0.001468f, 0.000638f, -0.004107f, -0.002412f, -0.000292f, -0.000948f, -0.000296f, -0.001408f, 0.002127f, 0.000675f, 0.004433f, -0.000767f, -0.002876f, -0.001827f, -0.000208f, 0.000163f, -0.003215f, 0.001017f, -0.001039f, -0.000245f, -0.000239f, -0.002027f, 0.001834f, 0.003259f, -0.000985f, 0.001627f, 0.000468f, -0.001989f, -0.000118f, -0.001901f, -0.001440f, 0.000190f, 0.003015f, 0.000306f, -0.001220f, -0.002998f, 0.000875f, -0.001105f, 0.006445f, -0.001545f, -0.006154f, -0.004167f, -0.005549f, 0.005123f, -0.004100f, 0.001129f, 0.006265f, -0.000285f, -0.006364f, 0.000427f, -0.006681f, 0.005554f, -0.001941f, 0.005534f, 0.000033f, -0.002122f, 0.004767f, 0.000167f, 0.000988f, -0.003600f, -0.004536f, -0.000741f, 0.001592f, 0.000962f, -0.000889f, -0.002105f, 0.002104f, -0.000660f, 0.001570f, 0.002410f, 0.002938f, 0.001347f, 0.001622f, -0.005988f, 0.000490f, - -0.001370f, -0.002051f, 0.000802f, 0.002950f, -0.002511f, -0.004600f, -0.002042f, 0.001330f, 0.000507f, -0.004047f, -0.001660f, 0.001862f, 0.002734f, -0.002443f, -0.001593f, -0.001888f, 0.002799f, 0.003709f, 0.000741f, -0.001287f, 0.000410f, 0.002643f, -0.001295f, -0.000144f, -0.022628f, -0.022692f, -0.003808f, -0.011061f, -0.007047f, -0.003845f, -0.006310f, -0.000628f, 0.004579f, -0.010095f, 0.003636f, -0.001959f, 0.003312f, 0.000727f, 0.001996f, -0.004099f, 0.000987f, -0.000386f, -0.002299f, -0.009229f, -0.001996f, -0.004723f, -0.006046f, -0.000464f, 0.001428f, 0.000480f, -0.002104f, 0.001466f, -0.001998f, -0.000399f, 0.004911f, 0.000070f, -0.001726f, 0.000492f, 0.003195f, 0.004566f, 0.002874f, 0.000194f, 0.002286f, 0.002906f, -0.000320f, 0.000229f, -0.004924f, 0.001999f, -0.004075f, 0.000968f, 0.003837f, -0.002453f, -0.004919f, 0.001636f, -0.002776f, -0.002380f, 0.000503f, 0.000202f, -0.002345f, 0.001372f, -0.000580f, 0.005511f, 0.002923f, 0.001873f, 0.000625f, 0.002201f, -0.000213f, 0.000863f, -0.002088f, -0.003433f, -0.000628f, -0.013188f, 0.024667f, 0.019702f, 0.001015f, 0.004151f, - 0.001370f, 0.004503f, 0.006389f, 0.001680f, 0.006193f, 0.001318f, -0.006976f, 0.004649f, 0.005177f, 0.001753f, 0.001382f, 0.004188f, 0.005087f, -0.005194f, 0.004197f, -0.002684f, 0.003652f, 0.000706f, -0.003490f, 0.000740f, 0.004152f, 0.002610f, -0.005508f, 0.002637f, -0.002412f, 0.007707f, -0.000909f, 0.001859f, -0.001446f, -0.004846f, 0.004679f, 0.004988f, 0.002069f, 0.001307f, -0.000507f, 0.001816f, 0.004966f, 0.001256f, 0.003463f, 0.000494f, 0.002311f, 0.001437f, -0.000655f, 0.002847f, -0.003754f, -0.005361f, -0.002672f, -0.004102f, -0.003783f, -0.001805f, -0.003883f, 0.004736f, 0.003064f, 0.000355f, -0.001195f, -0.001781f, -0.000907f, -0.000218f, -0.000313f, 0.000122f, 0.000312f, 0.000863f, 0.000196f, -0.000266f, 0.032967f, -0.012699f, -0.007415f, 0.001552f, -0.000419f, -0.001307f, -0.009595f, -0.003609f, 0.002016f, -0.000108f, -0.001672f, -0.001471f, 0.001076f, -0.007267f, -0.002522f, 0.004289f, 0.007057f, 0.004377f, 0.002971f, -0.002038f, -0.002606f, -0.004045f, 0.004752f, -0.006875f, -0.001619f, 0.002119f, -0.005113f, 0.001888f, 0.001676f, 0.006134f, -0.009243f, -0.000418f, - -0.000530f, -0.001508f, 0.001981f, -0.007890f, -0.004667f, 0.009373f, 0.005571f, 0.001565f, -0.001940f, 0.005727f, -0.001974f, -0.000378f, 0.000611f, 0.004547f, 0.002034f, -0.002293f, 0.000150f, -0.001207f, 0.003053f, -0.005220f, -0.002910f, -0.003037f, -0.003949f, 0.007094f, 0.001432f, 0.001158f, -0.003425f, 0.000066f, -0.001453f, -0.000879f, -0.003581f, 0.000822f, -0.003423f, 0.000191f, 0.000572f, 0.002932f, -0.004967f, -0.002802f, -0.004439f, -0.000887f, 0.009745f, 0.022939f, 0.003588f, 0.008844f, 0.007700f, 0.007684f, 0.002359f, 0.005780f, 0.003309f, -0.001490f, -0.004790f, -0.002795f, -0.001503f, 0.006594f, -0.005683f, -0.005965f, -0.000592f, -0.000139f, -0.002675f, -0.004536f, 0.013634f, 0.013114f, 0.009583f, 0.000617f, -0.005763f, 0.001126f, 0.000734f, -0.002644f, 0.002983f, 0.002173f, 0.005373f, 0.000785f, 0.002070f, -0.000129f, -0.004049f, 0.006454f, 0.005020f, 0.003914f, -0.001128f, -0.004872f, 0.000077f, -0.000247f, -0.001636f, -0.010092f, 0.007127f, -0.004523f, 0.008248f, 0.000626f, 0.004335f, -0.000834f, 0.004797f, 0.007846f, 0.001254f, -0.003339f, -0.000557f, 0.001561f, - -0.002851f, 0.001505f, -0.001314f, -0.003117f, -0.002137f, 0.001229f, -0.001162f, 0.003390f, 0.000751f, -0.005298f, -0.000077f, -0.000580f, -0.006342f, -0.001209f, 0.000682f, -0.002061f, 0.002231f, -0.023785f, -0.003316f, -0.014768f, 0.000033f, 0.002778f, -0.005195f, -0.008568f, -0.010217f, -0.009407f, -0.005788f, -0.007639f, -0.002033f, -0.000364f, -0.002134f, 0.002675f, -0.001669f, 0.000682f, 0.006014f, 0.002928f, -0.000712f, 0.014671f, -0.003284f, 0.003089f, -0.002218f, 0.001407f, 0.002008f, 0.000967f, -0.000905f, 0.002329f, 0.006698f, 0.002249f, 0.002320f, 0.000973f, 0.002636f, 0.005948f, 0.007823f, 0.002706f, 0.009513f, -0.002335f, -0.008325f, 0.008582f, -0.002706f, -0.001510f, -0.001736f, 0.004972f, 0.007273f, 0.005781f, -0.000183f, -0.001629f, -0.004225f, -0.010398f, 0.006552f, 0.007770f, 0.005272f, -0.006071f, 0.003850f, 0.001319f, -0.000644f, 0.006393f, 0.001033f, 0.004424f, -0.003359f, 0.002364f, -0.004178f, 0.000001f, 0.003711f, -0.000627f, 0.002826f, -0.000101f, -0.001437f, -0.000974f, -0.041652f, -0.019023f, 0.008754f, -0.001856f, -0.001202f, 0.001270f, -0.005010f, -0.004824f, - -0.001337f, -0.002295f, -0.007092f, 0.004963f, 0.000811f, 0.010735f, -0.005871f, -0.005465f, -0.008702f, -0.005218f, -0.008965f, 0.000545f, 0.003633f, -0.013970f, 0.009140f, 0.007438f, -0.000828f, 0.001324f, 0.006056f, 0.000660f, 0.005366f, -0.010627f, -0.010218f, -0.006018f, -0.006599f, -0.005492f, 0.017306f, 0.005360f, -0.003448f, -0.006290f, -0.008406f, 0.003951f, 0.002654f, -0.004311f, 0.003719f, 0.003182f, -0.005814f, 0.000406f, 0.001712f, 0.004674f, -0.005356f, 0.013852f, -0.005777f, -0.005050f, 0.002561f, -0.001658f, 0.000310f, -0.004361f, -0.001192f, 0.000305f, 0.009320f, -0.002886f, 0.013265f, 0.002629f, 0.001293f, 0.001345f, 0.003907f, -0.003915f, -0.000877f, -0.005098f, -0.003551f, -0.003873f, 0.000564f, 0.006980f, -0.003875f, 0.006596f, 0.021179f, 0.010854f, 0.006749f, 0.004543f, -0.007471f, 0.000693f, -0.006063f, 0.009341f, -0.001072f, -0.001340f, 0.003137f, 0.001970f, 0.002110f, -0.000400f, 0.003226f, 0.001067f, 0.003397f, -0.003039f, 0.009081f, 0.001080f, -0.000972f, 0.027416f, 0.001354f, -0.002301f, -0.007228f, 0.003899f, -0.006749f, 0.005933f, 0.014671f, -0.001409f, - 0.003431f, 0.003403f, -0.007876f, -0.008839f, 0.000016f, -0.000117f, 0.006275f, -0.004551f, -0.000035f, -0.000790f, 0.004524f, 0.004596f, 0.007975f, 0.002732f, 0.002551f, 0.003026f, 0.000012f, 0.005033f, 0.002192f, -0.010506f, 0.001782f, -0.005661f, -0.013293f, -0.001623f, 0.003227f, -0.000469f, 0.000660f, -0.002283f, -0.000187f, -0.001017f, -0.000521f, 0.000985f, -0.000186f, 0.005197f, -0.004007f, -0.001278f, 0.000647f, 0.000452f, -0.000340f, -0.003107f, 0.003550f, 0.005983f, 0.030240f, -0.008258f, -0.004224f, -0.007630f, 0.014818f, 0.006529f, 0.000485f, 0.003943f, -0.003091f, -0.002875f, 0.004685f, 0.001278f, -0.006236f, 0.002169f, -0.007968f, -0.004645f, -0.000471f, -0.006478f, 0.000154f, 0.003125f, -0.006185f, -0.008651f, 0.000057f, 0.001266f, 0.005528f, 0.011221f, 0.006444f, -0.004147f, -0.000929f, 0.007255f, 0.011010f, -0.011670f, 0.003826f, -0.001574f, -0.001075f, -0.004911f, -0.008847f, 0.001441f, 0.006273f, 0.002866f, 0.002315f, 0.005287f, -0.001391f, 0.003791f, -0.001618f, 0.002935f, 0.003683f, -0.007514f, -0.006729f, 0.013681f, -0.001951f, 0.000395f, -0.003851f, 0.005955f, - 0.015750f, 0.004995f, 0.001567f, 0.006246f, -0.005351f, -0.004113f, -0.000962f, -0.002834f, -0.010536f, 0.007054f, -0.000189f, -0.003837f, 0.001641f, 0.002411f, -0.003699f, -0.003455f, 0.005097f, -0.000973f, -0.008244f, 0.004657f, 0.002426f, 0.026285f, 0.025309f, -0.008391f, 0.007046f, 0.001842f, 0.005512f, 0.013235f, -0.001476f, -0.007271f, -0.002288f, 0.025769f, -0.014452f, -0.003035f, -0.007083f, -0.006068f, -0.011693f, 0.012744f, -0.003606f, -0.017960f, -0.013041f, -0.016418f, -0.006056f, 0.014005f, -0.001572f, 0.006453f, -0.002405f, -0.007600f, 0.006485f, 0.001576f, 0.008174f, -0.008086f, 0.007277f, 0.005389f, 0.003035f, 0.002993f, -0.012625f, 0.003334f, -0.010534f, 0.008641f, 0.019052f, 0.005159f, 0.005766f, -0.012426f, 0.017048f, 0.004193f, -0.001726f, -0.002993f, -0.003417f, 0.004956f, 0.008518f, 0.001692f, -0.001970f, -0.000875f, 0.002295f, -0.004496f, -0.002957f, -0.004345f, -0.003089f, -0.000717f, 0.006175f, -0.004565f, 0.009236f, 0.002951f, 0.005607f, -0.002326f, -0.013444f, -0.009330f, 0.003269f, 0.000535f, -0.004139f, 0.004633f, -0.000444f, -0.000748f, 0.002441f, -0.002055f, - -0.025350f, -0.014416f, 0.003179f, 0.002422f, -0.000512f, -0.010467f, 0.006149f, 0.004186f, -0.006934f, -0.017386f, 0.014329f, 0.004157f, 0.005159f, 0.008874f, 0.004628f, -0.001731f, 0.002448f, -0.003869f, 0.011955f, -0.009441f, -0.017689f, 0.000135f, -0.001028f, -0.007560f, -0.019156f, 0.001373f, -0.004016f, -0.009192f, -0.005593f, -0.002289f, 0.004205f, 0.001593f, 0.006966f, 0.014910f, -0.005950f, -0.010619f, 0.003676f, -0.000369f, 0.000203f, 0.006758f, -0.008105f, -0.006423f, -0.000884f, 0.007871f, -0.008706f, 0.008534f, -0.002350f, 0.015431f, -0.001787f, -0.003210f, -0.001391f, 0.001379f, 0.003175f, -0.014920f, 0.002722f, -0.012669f, 0.014822f, 0.001537f, 0.009506f, 0.006930f, -0.005001f, 0.000902f, -0.006744f, 0.005283f, -0.000171f, 0.004637f, 0.003380f, -0.007792f, -0.000727f, -0.007322f, -0.003311f, 0.006357f, -0.001948f, -0.003346f, 0.003718f, -0.033105f, -0.017352f, -0.004392f, -0.005309f, 0.000348f, 0.002160f, -0.010603f, -0.010097f, 0.004587f, -0.011558f, 0.004579f, -0.012683f, -0.002102f, -0.012320f, -0.011680f, 0.012331f, 0.007130f, 0.000569f, 0.000561f, -0.012940f, -0.017967f, - 0.008128f, -0.023998f, 0.007665f, 0.001759f, -0.009686f, 0.002716f, -0.006609f, 0.003320f, 0.016107f, -0.007524f, -0.002533f, -0.017700f, 0.013399f, -0.003059f, 0.005214f, -0.005347f, -0.003874f, -0.000183f, -0.002366f, 0.010249f, 0.001389f, 0.019865f, 0.020548f, -0.000965f, -0.001376f, -0.005983f, -0.000903f, -0.001493f, 0.001721f, 0.008459f, -0.000897f, 0.017468f, 0.002754f, -0.004601f, 0.000737f, 0.004725f, -0.001774f, 0.000261f, -0.001404f, 0.013635f, -0.011079f, -0.016989f, -0.009561f, 0.001700f, 0.002274f, 0.004641f, 0.007108f, 0.000536f, 0.001715f, -0.003163f, -0.009760f, -0.008693f, -0.010705f, 0.002387f, -0.003782f, 0.044391f, 0.019234f, 0.013954f, 0.005212f, -0.004640f, -0.008432f, -0.013372f, 0.007176f, 0.013518f, 0.004988f, -0.005819f, 0.015075f, 0.009082f, 0.015060f, 0.001382f, -0.011725f, -0.004044f, 0.022827f, -0.024039f, -0.005514f, 0.016404f, -0.010062f, -0.005054f, 0.037135f, -0.004437f, 0.010219f, 0.034440f, -0.006044f, -0.001970f, -0.001575f, 0.004516f, -0.002485f, 0.015075f, 0.008920f, 0.012467f, -0.009260f, -0.019921f, 0.007430f, -0.007708f, 0.009042f, -0.003531f, - 0.002852f, 0.014631f, 0.007647f, 0.001091f, 0.005625f, 0.003166f, 0.005372f, 0.014156f, 0.007100f, -0.001227f, 0.012759f, 0.005929f, 0.001149f, 0.003488f, 0.024098f, 0.015221f, -0.000794f, 0.013871f, -0.006834f, 0.017480f, -0.005150f, 0.004140f, -0.005777f, 0.002455f, 0.008890f, -0.004993f, -0.001371f, -0.000428f, 0.002385f, 0.001057f, -0.007531f, 0.001164f, -0.006702f, 0.056387f, 0.026062f, -0.011906f, 0.005358f, 0.028936f, 0.001083f, 0.020781f, -0.005837f, 0.007970f, 0.018051f, -0.013723f, 0.001991f, 0.030409f, 0.028067f, 0.022120f, 0.008338f, 0.018937f, 0.003631f, 0.016547f, 0.006288f, 0.004712f, -0.010245f, -0.012881f, -0.017358f, -0.035530f, 0.011545f, -0.000011f, -0.009179f, -0.003786f, 0.012494f, -0.008407f, -0.000864f, 0.000943f, 0.007168f, -0.031534f, -0.004697f, 0.022145f, 0.017712f, -0.006708f, 0.011811f, 0.009381f, 0.006684f, -0.004238f, -0.006911f, -0.003563f, -0.004547f, -0.003571f, -0.011176f, -0.010182f, 0.008279f, -0.019797f, 0.006729f, 0.015490f, -0.004401f, -0.011753f, -0.017360f, 0.016181f, -0.000195f, -0.008772f, -0.005142f, -0.004213f, -0.005719f, 0.003113f, - -0.002433f, -0.006535f, 0.006699f, 0.025457f, -0.012455f, -0.008103f, 0.003814f, -0.005343f, 0.006585f, -0.000071f, 0.014120f, 0.002268f, 0.001338f, -0.022151f, -0.006566f, -0.026693f, -0.006182f, -0.026686f, 0.012629f, -0.025424f, 0.013480f, -0.004209f, -0.015213f, -0.004265f, -0.007316f, 0.031631f, 0.004506f, -0.022669f, 0.000064f, -0.014739f, -0.012168f, 0.015667f, -0.017861f, -0.015965f, -0.018636f, 0.027574f, -0.004108f, 0.018254f, -0.028306f, -0.014706f, 0.010650f, -0.012844f, 0.010126f, 0.030468f, 0.019456f, 0.018898f, 0.002737f, -0.003095f, -0.015213f, -0.020819f, -0.001624f, 0.004765f, -0.019916f, 0.000526f, -0.011964f, 0.005707f, 0.008021f, -0.022108f, -0.019413f, -0.034701f, -0.006016f, 0.002469f, -0.015547f, -0.021441f, 0.020586f, 0.001149f, 0.021144f, 0.021426f, -0.003270f, -0.002958f, -0.009339f, 0.012386f, 0.009995f, 0.001608f, 0.004579f, -0.001670f, -0.001804f, 0.010519f, -0.003474f, -0.012075f, -0.010109f, -0.015176f, -0.013635f, -0.004464f, -0.001304f, -0.001557f, -0.020080f, -0.039093f, -0.005854f, 0.002591f, -0.002798f, -0.000744f, 0.011100f, -0.009304f, 0.009937f, 0.007901f, - -0.005354f, 0.010973f, -0.015745f, 0.019725f, 0.014797f, -0.000183f, -0.014474f, 0.000312f, 0.010697f, -0.045706f, 0.009924f, 0.017313f, -0.031446f, 0.012227f, -0.015808f, -0.024519f, -0.020844f, 0.009875f, -0.004772f, -0.034477f, 0.018546f, 0.008544f, -0.019677f, -0.034925f, 0.007400f, 0.002861f, -0.010107f, -0.003620f, -0.016850f, 0.015147f, 0.014018f, 0.022546f, -0.018519f, 0.001829f, -0.024775f, -0.010873f, 0.004851f, -0.017525f, 0.007204f, -0.003411f, -0.012220f, -0.020534f, -0.020162f, 0.028646f, -0.019882f, -0.011190f, -0.007215f, -0.000380f, 0.014280f, 0.006495f, 0.010520f, -0.001703f, 0.012228f, -0.005884f, 0.002283f, -0.007034f, -0.012122f, 0.000320f, 0.027142f, 0.001851f, 0.000966f, -0.002602f, -0.016925f, 0.008460f, 0.018289f, 0.015625f, -0.026039f, -0.012934f, -0.027466f, 0.008239f, -0.005366f, 0.011254f, -0.007918f, 0.005640f, 0.008201f, -0.008413f, -0.015945f, 0.023481f, -0.006610f, -0.009626f, 0.025999f, -0.004895f, -0.006807f, 0.030988f, -0.018201f, 0.005056f, 0.006831f, 0.002951f, -0.027429f, 0.000670f, -0.004531f, -0.015536f, 0.008592f, -0.012080f, 0.016432f, -0.002421f, - 0.018358f, -0.020195f, 0.012285f, -0.036205f, -0.000230f, -0.019486f, 0.021761f, -0.002862f, 0.002417f, -0.003265f, -0.021068f, -0.000886f, 0.017137f, 0.047554f, 0.002807f, 0.003558f, 0.009315f, 0.016659f, -0.003390f, -0.003905f, 0.000798f, -0.000180f, 0.040620f, -0.003109f, 0.005685f, 0.017226f, -0.016770f, -0.026851f, -0.000591f, -0.028399f, -0.004244f, -0.014234f, -0.011375f, -0.005117f, -0.012932f, 0.007654f, 0.009595f, -0.016141f, 0.020769f, 0.018611f, -0.003081f, -0.003444f, -0.017888f, 0.013329f, 0.004146f, 0.044256f, 0.048210f, 0.000359f, -0.014792f, -0.011865f, 0.040392f, -0.026530f, -0.030252f, 0.031509f, -0.028569f, 0.018427f, 0.005621f, 0.025515f, 0.023514f, 0.015908f, 0.002584f, -0.016001f, -0.013823f, 0.033133f, -0.013996f, -0.001348f, 0.008121f, 0.028260f, 0.040839f, -0.001144f, 0.027926f, -0.022702f, -0.023750f, 0.002818f, -0.008721f, 0.013302f, 0.008430f, -0.020183f, 0.002868f, 0.013112f, 0.033640f, 0.011641f, 0.013855f, 0.012837f, 0.015118f, 0.004113f, -0.001054f, 0.021560f, 0.003879f, 0.017326f, 0.027403f, 0.006026f, -0.011061f, -0.009150f, 0.024733f, 0.006850f, - 0.050578f, 0.012222f, 0.020049f, -0.020057f, -0.032135f, -0.002553f, -0.037541f, -0.023567f, -0.008392f, -0.012215f, 0.001644f, -0.001142f, 0.000540f, 0.001404f, -0.027979f, -0.022362f, -0.012091f, -0.022963f, 0.009075f, 0.010977f, -0.007069f, -0.000183f, -0.022228f, -0.001348f, 0.006548f, -0.003034f} -}; -#endif -#ifdef IVAS_FLOAT_FIXED //BRIR and HRIR coeff tables in Q29 const Word32 CRendBin_Combined_BRIR_coeff_re_48kHz_fx[15][BINAURAL_CHANNELS][2955] ={ { @@ -66709,5 +59648,4 @@ Word32 cosine_table_Q31 [181] = { -2121044608, -2126584448, -2131476608, -2135719552, -2139311744, -2142252544, -2144540544, -2146175488, -2147156608, -2147483647, }; -#endif #undef WMC_TOOL_SKIP diff --git a/lib_rend/ivas_rom_binaural_crend_head.h b/lib_rend/ivas_rom_binaural_crend_head.h index cc0f73571..0004a05d7 100644 --- a/lib_rend/ivas_rom_binaural_crend_head.h +++ b/lib_rend/ivas_rom_binaural_crend_head.h @@ -48,17 +48,11 @@ #include "ivas_cnst.h" -#ifdef IVAS_FLOAT_FIXED extern Word32 sine_table_Q31 [361]; extern Word32 cosine_table_Q31 [181]; -#endif /********************** CRendBin_Combined_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_latency_s; -#else extern Word32 CRendBin_Combined_HRIR_latency_s_fx; -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -67,23 +61,12 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_48kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_48kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz[15]; -#else extern Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_48kHz_fx[15]; -#endif extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][240]; -extern float CRendBin_Combined_HRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][240]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_Combined_HRIR_coeff_re_48kHz_fx[15][BINAURAL_CHANNELS][240]; extern Word32 CRendBin_Combined_HRIR_coeff_im_48kHz_fx[15][BINAURAL_CHANNELS][240]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 32000 */ @@ -92,23 +75,12 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_32kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_32kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz[15]; -#else extern Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_32kHz_fx[15]; -#endif extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][160]; -extern float CRendBin_Combined_HRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][160]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_Combined_HRIR_coeff_re_32kHz_fx[15][BINAURAL_CHANNELS][160]; extern Word32 CRendBin_Combined_HRIR_coeff_im_32kHz_fx[15][BINAURAL_CHANNELS][160]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 16000 */ @@ -117,34 +89,19 @@ extern uint16_t CRendBin_Combined_HRIR_num_iterations_16kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_HRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_Combined_HRIR_index_frequency_max_diffuse_16kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz[15]; -#else extern Word16 CRendBin_Combined_HRIR_inv_diffuse_weight_16kHz_fx[15]; -#endif extern uint16_t *CRendBin_Combined_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_HRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][80]; -extern float CRendBin_Combined_HRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][80]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_Combined_HRIR_coeff_re_16kHz_fx[15][BINAURAL_CHANNELS][80]; extern Word32 CRendBin_Combined_HRIR_coeff_im_16kHz_fx[15][BINAURAL_CHANNELS][80]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_Combined_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]; -#endif /********************** CRendBin_FOA_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_latency_s; -#else extern Word32 CRendBin_FOA_HRIR_latency_s_fx; -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -153,23 +110,12 @@ extern uint16_t CRendBin_FOA_HRIR_num_iterations_48kHz[4][BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_48kHz[4][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_48kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz[4]; -#else extern Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_48kHz_fx[4]; -#endif extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_coeff_re_48kHz[4][BINAURAL_CHANNELS][240]; -extern float CRendBin_FOA_HRIR_coeff_im_48kHz[4][BINAURAL_CHANNELS][240]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_FOA_HRIR_coeff_re_48kHz_fx[4][BINAURAL_CHANNELS][240]; extern Word32 CRendBin_FOA_HRIR_coeff_im_48kHz_fx[4][BINAURAL_CHANNELS][240]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 32000 */ @@ -178,23 +124,12 @@ extern uint16_t CRendBin_FOA_HRIR_num_iterations_32kHz[4][BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_32kHz[4][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_32kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz[4]; -#else extern Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_32kHz_fx[4]; -#endif extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_coeff_re_32kHz[4][BINAURAL_CHANNELS][160]; -extern float CRendBin_FOA_HRIR_coeff_im_32kHz[4][BINAURAL_CHANNELS][160]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_FOA_HRIR_coeff_re_32kHz_fx[4][BINAURAL_CHANNELS][160]; extern Word32 CRendBin_FOA_HRIR_coeff_im_32kHz_fx[4][BINAURAL_CHANNELS][160]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 16000 */ @@ -203,33 +138,18 @@ extern uint16_t CRendBin_FOA_HRIR_num_iterations_16kHz[4][BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_FOA_HRIR_pIndex_frequency_max_16kHz[4][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_FOA_HRIR_index_frequency_max_diffuse_16kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz[4]; -#else extern Word16 CRendBin_FOA_HRIR_inv_diffuse_weight_16kHz_fx[4]; -#endif extern uint16_t *CRendBin_FOA_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_FOA_HRIR_coeff_re_16kHz[4][BINAURAL_CHANNELS][80]; -extern float CRendBin_FOA_HRIR_coeff_im_16kHz[4][BINAURAL_CHANNELS][80]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_FOA_HRIR_coeff_re_16kHz_fx[4][BINAURAL_CHANNELS][80]; extern Word32 CRendBin_FOA_HRIR_coeff_im_16kHz_fx[4][BINAURAL_CHANNELS][80]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_FOA_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]; -#endif /********************** CRendBin_HOA2_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_latency_s; -#else extern Word32 CRendBin_HOA2_HRIR_latency_s_fx; -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -238,23 +158,12 @@ extern uint16_t CRendBin_HOA2_HRIR_num_iterations_48kHz[9][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_48kHz[9][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_48kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz[9]; -#else extern Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_48kHz_fx[9]; -#endif extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_coeff_re_48kHz[9][BINAURAL_CHANNELS][240]; -extern float CRendBin_HOA2_HRIR_coeff_im_48kHz[9][BINAURAL_CHANNELS][240]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA2_HRIR_coeff_re_48kHz_fx[9][BINAURAL_CHANNELS][240]; extern Word32 CRendBin_HOA2_HRIR_coeff_im_48kHz_fx[9][BINAURAL_CHANNELS][240]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 32000 */ @@ -263,23 +172,12 @@ extern uint16_t CRendBin_HOA2_HRIR_num_iterations_32kHz[9][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_32kHz[9][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_32kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz[9]; -#else extern Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_32kHz_fx[9]; -#endif extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_coeff_re_32kHz[9][BINAURAL_CHANNELS][160]; -extern float CRendBin_HOA2_HRIR_coeff_im_32kHz[9][BINAURAL_CHANNELS][160]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA2_HRIR_coeff_re_32kHz_fx[9][BINAURAL_CHANNELS][160]; extern Word32 CRendBin_HOA2_HRIR_coeff_im_32kHz_fx[9][BINAURAL_CHANNELS][160]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 16000 */ @@ -288,31 +186,16 @@ extern uint16_t CRendBin_HOA2_HRIR_num_iterations_16kHz[9][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA2_HRIR_pIndex_frequency_max_16kHz[9][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA2_HRIR_index_frequency_max_diffuse_16kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz[9]; -#else extern Word16 CRendBin_HOA2_HRIR_inv_diffuse_weight_16kHz_fx[9]; -#endif extern uint16_t *CRendBin_HOA2_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA2_HRIR_coeff_re_16kHz[9][BINAURAL_CHANNELS][80]; -extern float CRendBin_HOA2_HRIR_coeff_im_16kHz[9][BINAURAL_CHANNELS][80]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA2_HRIR_coeff_re_16kHz_fx[9][BINAURAL_CHANNELS][80]; extern Word32 CRendBin_HOA2_HRIR_coeff_im_16kHz_fx[9][BINAURAL_CHANNELS][80]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA2_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]; -#endif /********************** CRendBin_HOA3_HRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_latency_s; -#else extern Word32 CRendBin_HOA3_HRIR_latency_s_fx; -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -322,23 +205,12 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_48kHz[16][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_48kHz[16][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_48kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz[16]; -#else extern Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_48kHz_fx[16]; -#endif extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_coeff_re_48kHz[16][BINAURAL_CHANNELS][240]; -extern float CRendBin_HOA3_HRIR_coeff_im_48kHz[16][BINAURAL_CHANNELS][240]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA3_HRIR_coeff_re_48kHz_fx[16][BINAURAL_CHANNELS][240]; extern Word32 CRendBin_HOA3_HRIR_coeff_im_48kHz_fx[16][BINAURAL_CHANNELS][240]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 32000 */ @@ -347,23 +219,12 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_32kHz[16][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_32kHz[16][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_32kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz[16]; -#else extern Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_32kHz_fx[16]; -#endif extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_coeff_re_32kHz[16][BINAURAL_CHANNELS][160]; -extern float CRendBin_HOA3_HRIR_coeff_im_32kHz[16][BINAURAL_CHANNELS][160]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA3_HRIR_coeff_re_32kHz_fx[16][BINAURAL_CHANNELS][160]; extern Word32 CRendBin_HOA3_HRIR_coeff_im_32kHz_fx[16][BINAURAL_CHANNELS][160]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS]; -#endif /* Sample Rate = 16000 */ @@ -372,33 +233,18 @@ extern uint16_t CRendBin_HOA3_HRIR_num_iterations_16kHz[16][BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_HOA3_HRIR_pIndex_frequency_max_16kHz[16][BINAURAL_CHANNELS][1]; extern uint16_t CRendBin_HOA3_HRIR_index_frequency_max_diffuse_16kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz[16]; -#else extern Word16 CRendBin_HOA3_HRIR_inv_diffuse_weight_16kHz_fx[16]; -#endif extern uint16_t *CRendBin_HOA3_HRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_HOA3_HRIR_coeff_re_16kHz[16][BINAURAL_CHANNELS][80]; -extern float CRendBin_HOA3_HRIR_coeff_im_16kHz[16][BINAURAL_CHANNELS][80]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS]; -extern float *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS]; -#else extern Word32 CRendBin_HOA3_HRIR_coeff_re_16kHz_fx[16][BINAURAL_CHANNELS][80]; extern Word32 CRendBin_HOA3_HRIR_coeff_im_16kHz_fx[16][BINAURAL_CHANNELS][80]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS]; extern Word32 *CRendBin_HOA3_HRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS]; -#endif /********************** CRendBin_Combined_BRIR **********************/ -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_latency_s; -#else extern Word32 CRendBin_Combined_BRIR_latency_s_fx; -#endif // IVAS_FLOAT_FIXED /* Sample Rate = 48000 */ @@ -407,23 +253,12 @@ extern uint16_t CRendBin_Combined_BRIR_num_iterations_48kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_48kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_48kHz[15][BINAURAL_CHANNELS][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_48kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz[15]; -#else extern Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_48kHz_fx[15]; -#endif extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_48kHz[BINAURAL_CHANNELS][40]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_coeff_re_48kHz[15][BINAURAL_CHANNELS][2955]; -extern float CRendBin_Combined_BRIR_coeff_im_48kHz[15][BINAURAL_CHANNELS][2955]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz[BINAURAL_CHANNELS][2885]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz[BINAURAL_CHANNELS][2885]; -#else extern Word32 CRendBin_Combined_BRIR_coeff_re_48kHz_fx[15][BINAURAL_CHANNELS][2955]; extern Word32 CRendBin_Combined_BRIR_coeff_im_48kHz_fx[15][BINAURAL_CHANNELS][2955]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_re_48kHz_fx[BINAURAL_CHANNELS][2885]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_im_48kHz_fx[BINAURAL_CHANNELS][2885]; -#endif /* Sample Rate = 32000 */ @@ -432,23 +267,12 @@ extern uint16_t CRendBin_Combined_BRIR_num_iterations_32kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_32kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_32kHz[15][BINAURAL_CHANNELS][22]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_32kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz[15]; -#else extern Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_32kHz_fx[15]; -#endif extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_32kHz[BINAURAL_CHANNELS][40]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_coeff_re_32kHz[15][BINAURAL_CHANNELS][2819]; -extern float CRendBin_Combined_BRIR_coeff_im_32kHz[15][BINAURAL_CHANNELS][2819]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz[BINAURAL_CHANNELS][2870]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz[BINAURAL_CHANNELS][2870]; -#else extern Word32 CRendBin_Combined_BRIR_coeff_re_32kHz_fx[15][BINAURAL_CHANNELS][2819]; extern Word32 CRendBin_Combined_BRIR_coeff_im_32kHz_fx[15][BINAURAL_CHANNELS][2819]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_re_32kHz_fx[BINAURAL_CHANNELS][2870]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_im_32kHz_fx[BINAURAL_CHANNELS][2870]; -#endif /* Sample Rate = 16000 */ @@ -457,21 +281,10 @@ extern uint16_t CRendBin_Combined_BRIR_num_iterations_16kHz[15][BINAURAL_CHANNEL extern uint16_t CRendBin_Combined_BRIR_num_iterations_diffuse_16kHz[BINAURAL_CHANNELS]; extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_16kHz[15][BINAURAL_CHANNELS][23]; extern uint16_t CRendBin_Combined_BRIR_index_frequency_max_diffuse_16kHz; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz[15]; -#else extern Word16 CRendBin_Combined_BRIR_inv_diffuse_weight_16kHz_fx[15]; -#endif extern uint16_t CRendBin_Combined_BRIR_pIndex_frequency_max_diffuse_16kHz[BINAURAL_CHANNELS][40]; -#ifndef IVAS_FLOAT_FIXED -extern float CRendBin_Combined_BRIR_coeff_re_16kHz[15][BINAURAL_CHANNELS][1774]; -extern float CRendBin_Combined_BRIR_coeff_im_16kHz[15][BINAURAL_CHANNELS][1774]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz[BINAURAL_CHANNELS][2522]; -extern float CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz[BINAURAL_CHANNELS][2522]; -#else extern Word32 CRendBin_Combined_BRIR_coeff_re_16kHz_fx[15][BINAURAL_CHANNELS][1774]; extern Word32 CRendBin_Combined_BRIR_coeff_im_16kHz_fx[15][BINAURAL_CHANNELS][1774]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_re_16kHz_fx[BINAURAL_CHANNELS][2522]; extern Word32 CRendBin_Combined_BRIR_coeff_diffuse_im_16kHz_fx[BINAURAL_CHANNELS][2522]; -#endif #endif /* _IVAS_ROM_BINAURAL_CREND_HEAD_ */ diff --git a/lib_rend/ivas_rom_rend.c b/lib_rend/ivas_rom_rend.c index ae3482a4f..d99a4ad76 100644 --- a/lib_rend/ivas_rom_rend.c +++ b/lib_rend/ivas_rom_rend.c @@ -40,7 +40,6 @@ * DirAC renderer ROM tables *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED const Word32 ls_azimuth_4d4_fx[8] = { 188743680, -188743680, 566231040, -566231040, 188743680, -188743680, 566231040, -566231040 };//Q22 const Word32 ls_elevation_4d4_fx[8] = { 0, 0, 0, 0, 146800640, 146800640, 146800640, 146800640 }; //Q22 @@ -50,49 +49,10 @@ const Word16 diffuse_response_CICP6_fx[5] = { 13824, 13824, 12137, 16495, 16495 const Word16 diffuse_response_CICP14_fx[7] = { 12507, 12507, 9237, 17691, 17691, 4977, 4977 };//Q15 const Word16 diffuse_response_CICP16_fx[9] = { 11324, 11324, 9945, 13513, 13513, 8853, 8853, 9905, 9905 };//Q15 -#else - -const float ls_azimuth_4d4[8] = { 45.0f, -45.0f, 135.0f, -135.0f, 45.0f, -45.0f, 135.0f, -135.0f }; - -const float ls_elevation_4d4[8] = { 0.0f, 0.0f, 0.0f, 0.0f, 35.0f, 35.0f, 35.0f, 35.0f }; - -const float diffuse_response_CICP6[5] = { 0.4219f, 0.4219f, 0.3704f, 0.5034f, 0.5034f }; - -const float diffuse_response_CICP14[7] = { 0.3817f, 0.3817f, 0.2819f, 0.5399f, 0.5399f, 0.1519f, 0.1519f }; - -const float diffuse_response_CICP16[9] = { 0.3456f, 0.3456f, 0.3035f, 0.4124f, 0.4124f, 0.2702f, 0.2702f, 0.3023f, 0.3023f }; -#endif const int16_t ap_pre_delay[DIRAC_DECORR_NUM_SPLIT_BANDS] = { 7, 2, 1 }; const int16_t ap_filter_length[DIRAC_DECORR_NUM_SPLIT_BANDS] = { 15, 6, 3 }; -#ifndef IVAS_FLOAT_FIXED -const float ap_lattice_delta_phi[DIRAC_MAX_NUM_DECORR_FILTERS*DIRAC_MAX_DECORR_FILTER_LEN] = -{ - 1.802519f, 0.922986f, 1.813685f, 1.272828f, 0.856928f, 0.366571f, 1.531249f, 1.318158f, 0.123812f, 0.897173f, 0.958696f, 1.256384f, 0.179677f, 0.668918f, 1.440292f, 1.573058f, 1.396481f, 1.191463f, 0.444143f, 1.666942f, - 1.273955f, 1.747171f, 1.408330f, 1.002782f, 1.559302f, 1.782992f, 1.474896f, 0.813181f, 1.457724f, 0.588531f, 1.384302f, 0.156493f, 0.600048f, 1.661632f, 0.538958f, 0.645429f, 0.565237f, 0.024684f, 0.264229f, 0.062140f, - 1.235343f, 0.851725f, 1.820211f, 0.116148f, 0.972111f, 0.488703f, 1.777672f, 1.452170f, 0.814134f, 1.272649f, 1.281416f, 0.101871f, 0.897888f, 0.199760f, 0.085732f, 1.686579f, 0.964558f, 0.057281f, 0.910252f, 1.662302f, - 0.955234f, 0.834348f, 1.672478f, 1.324896f, 0.444544f, 1.721172f, 0.153356f, 1.602240f, 0.171880f, 1.169774f, 0.543628f, 1.409581f, 1.763724f, 1.686754f, 1.210390f, 0.402691f, 0.983618f, 0.862997f, 1.220409f, 0.890061f, - 0.031641f, 0.461590f, 1.719550f, 1.357698f, 1.112262f, 1.166531f, 0.246097f, 1.387325f, 0.177485f, 1.446268f, 0.799476f, 1.667227f, 1.723465f, 1.505920f, 0.245874f, 1.155854f, 0.831394f, 0.677194f, 0.568871f, 1.652070f, - 0.019803f, 1.197794f, 0.635553f, 0.531682f, 0.878194f, 0.048050f, 0.080480f, 1.566743f, 0.724210f, 0.853668f, 1.741191f, 0.698465f, 1.553550f, 0.130290f, 0.688346f, 1.331091f, 0.599759f, 1.125466f, 1.764818f, 1.042879f, - 1.486589f, 1.627971f, 1.871181f, 0.102359f, 0.035021f, 1.403176f, 1.468675f, 0.190347f, 0.553282f, 1.031227f, 1.232390f, 1.255724f, 1.504443f, 0.683526f, 0.600958f, 1.746936f, 1.529243f, 1.448196f, 0.646850f, 0.116053f, - 1.283295f, 0.355220f, 1.380620f, 1.858453f, 0.818804f, 0.219006f, 0.476292f, 0.420029f, 1.291187f, 0.568738f, 1.174088f, 0.628805f, 1.753154f, 1.459582f, 1.354449f, 1.755790f, 0.441757f, 0.856240f, 1.647962f, 0.686353f, - 1.395289f, 0.699934f, 0.239310f, 0.239535f, 0.958190f, 0.748780f, 0.513784f, 1.666344f, 1.461995f, 1.599060f, 0.893107f, 0.341873f, 1.387703f, 1.808363f, 0.676542f, 1.424958f, 0.310574f, 0.836247f, 1.011101f, 1.686200f, - 1.823432f, 0.994827f, 1.635555f, 0.684380f, 1.017029f, 1.440371f, 1.694641f, 0.607132f, 1.197331f, 0.862161f, 0.666449f, 1.047956f, 0.159627f, 0.043131f, 1.251515f, 1.618724f, 0.216906f, 0.152250f, 0.471610f, 0.744260f, - 0.576810f, 1.632177f, 1.556912f, 1.866317f, 0.568088f, 1.541817f, 1.726725f, 0.275154f, 0.814958f, 0.863399f, 1.333040f, 0.148277f, 0.197893f, 1.048665f, 1.158090f, 1.692225f, 0.884294f, 0.289619f, 0.380633f, 1.728234f, - 1.433213f, 1.749505f, 1.533837f, 0.669701f, 0.372580f, 1.052390f, 1.116645f, 0.181320f, 1.139126f, 0.222671f, 0.604393f, 1.811797f, 1.743315f, 1.368792f, 1.861434f, 0.751908f, 0.159811f, 1.566503f, 0.443273f, 1.667530f, - 1.083060f, 1.243136f, 0.717777f, 0.675019f, 0.690490f, 0.672228f, 1.060789f, 0.423566f, 1.198457f, 0.485768f, 0.993953f, 0.443540f, 0.361702f, 1.552042f, 0.863562f, 1.517677f, 1.061899f, 0.691413f, 1.642818f, 1.756590f, - 0.278323f, 0.790363f, 0.172303f, 0.417138f, 0.009343f, 0.783325f, 1.369303f, 1.041067f, 0.467102f, 0.992773f, 1.525170f, 0.871213f, 0.243906f, 1.542036f, 0.449148f, 0.843633f, 0.191800f, 1.614246f, 1.038188f, 1.415620f, - 0.551081f, 0.382599f, 1.410121f, 0.102084f, 0.137286f, 0.671081f, 0.254860f, 1.758068f, 1.079013f, 0.129143f, 1.410873f, 0.150485f, 0.601119f, 0.760737f, 0.975905f, 0.223261f, 0.710162f, 1.677048f, 0.996836f, 1.849865f, - 1.536222f, 0.089016f, 0.960881f, 0.388690f, 0.379955f, 1.002223f, 1.271420f, 1.410632f, 0.254397f, 1.535559f, 1.133703f, 1.305280f, 1.466565f, 0.274167f, 0.399688f, 1.359638f, 1.766289f, 1.401348f, 1.310883f, 0.261030f, - 1.314825f, 1.538635f, 1.317986f, 1.243167f, 1.749461f, 1.689706f, 0.024853f, 0.634754f, 1.036317f, 1.828101f, 1.676951f, 0.023606f, 0.857000f, 0.076471f, 1.622198f, 0.254469f, 1.451625f, 1.720881f, 0.763812f, 0.186982f, - 0.056994f, 0.590507f, 0.375291f, 1.609261f, 0.607721f, 0.026355f, 0.483366f, 0.823931f, 0.792878f, 0.163577f, 0.753588f, 0.730789f, 0.135991f, 1.031660f, 1.554135f, 1.192863f, 0.016693f, 0.125796f, 1.017920f, 1.591773f, - 0.575956f, 0.112943f, 0.249506f, 1.399570f, 0.053241f, 1.410759f, 0.251638f, 1.059086f, 0.025315f, 1.422914f, 1.030412f, 0.848758f, 0.317396f, 1.375456f, 1.116858f, 1.682310f, 0.279550f, 0.325974f, 0.937704f, 1.744329f, - 0.447773f, 1.024286f, 1.001528f, 1.863684f, 1.278323f, 0.860699f, 1.346331f, 1.692596f, 0.022627f, 1.033613f, 0.546354f, 0.395804f, 1.486546f, 1.381045f, 1.312260f, 0.245976f, 1.607429f, 1.818793f, 0.964359f, 1.496598f, - 0.669967f, 1.535929f, 1.841878f, 0.979127f, 0.614002f, 1.879218f, 0.512531f, 1.167061f, 0.081697f, 1.773427f, 1.535668f, 0.757729f, 0.220395f, 1.538243f, 1.281162f, 0.302159f, 0.889871f, 0.798522f, 1.476288f, 1.665941f, - 0.915365f, 1.394094f, 0.757041f, 0.350064f, 1.199679f, 1.319499f, 1.128405f, 0.632337f, 0.790673f, 0.461582f, 1.693343f, 1.537442f, 0.346527f, 0.433782f, 1.754552f, 0.550903f, 0.686724f, 0.764433f, 1.792750f, 1.489998f -}; -#else const Word16 ap_lattice_delta_phi_fx[DIRAC_MAX_NUM_DECORR_FILTERS*DIRAC_MAX_DECORR_FILTER_LEN] /*Q14*/ = { 29532 , 15122 , 29715 , 20854 , 14040 , 6006 , 25088 , 21597 , 2029 , 14699 , 15707 , 20585 , 2944 , 10960 , 23598 , 25773 , 22880 , 19521 , 7277 , 27311 , 20872 , 28626 , 23074 , @@ -116,94 +76,6 @@ const Word16 ap_lattice_delta_phi_fx[DIRAC_MAX_NUM_DECORR_FILTERS*DIRAC_MAX_DECO 29799 , 15800 , 24520 , 10977 , 25165 , 30177 , 16042 , 10060 , 30789 , 8397 , 19121 , 1339 , 29056 , 25160 , 12415 , 3611 , 25203 , 20991 , 4951 , 14580 , 13083 , 24188 , 27295 , 14997 , 22841 , 12403 , 5735 , 19656 , 21619 , 18488 , 10360 , 12954 , 7563 , 27744 , 25189 , 5677 , 7107 , 28747 , 9026 , 11251 , 12524 , 29372 , 24412 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float ap_lattice_coeffs_1[DIRAC_DECORR_FILTER_LEN_1*DIRAC_MAX_NUM_DECORR_FILTERS] = -{ - 0.795329f, 0.502700f, 0.204456f, 0.416566f, 0.459648f, 0.270454f, -0.201944f, 0.027997f, 0.067811f, -0.052627f, -0.038779f, -0.057387f, 0.020480f, 0.367697f, -0.593705f, - 0.533667f, 0.202500f, -0.001953f, 0.195081f, -0.184458f, -0.233867f, 0.228100f, -0.329293f, -0.338714f, -0.079700f, 0.052389f, -0.009468f, 0.178807f, 0.190843f, -0.478877f, - 0.044022f, 0.788498f, 0.133529f, -0.173657f, 0.545391f, 0.681431f, 0.332868f, 0.294685f, 0.325261f, 0.047617f, 0.157401f, 0.116272f, 0.218980f, -0.189248f, -0.317401f, - -0.753681f, 0.772385f, -0.507384f, 0.276980f, -0.692775f, 0.232302f, -0.354759f, -0.015620f, -0.223059f, 0.310506f, -0.035034f, 0.085783f, -0.499998f, 0.215260f, 0.201415f, - -0.495551f, -0.301660f, 0.196510f, 0.326147f, -0.594364f, 0.314921f, 0.668671f, 0.076643f, 0.045711f, -0.124790f, -0.203272f, -0.297190f, 0.125806f, -0.179483f, -0.201757f, - 0.161128f, 0.396050f, 0.266897f, 0.356586f, 0.488145f, -0.056254f, 0.139280f, -0.296405f, -0.112844f, 0.037405f, -0.367425f, -0.216292f, -0.277360f, 0.389420f, 0.115115f, - -0.240449f, -0.271015f, 0.426720f, -0.011059f, 0.151813f, 0.253490f, 0.225764f, 0.498716f, -0.136377f, 0.443004f, -0.305017f, -0.031310f, -0.010765f, 0.170349f, 0.496478f, - -0.139875f, -0.241998f, -0.104850f, 0.294343f, -0.067728f, -0.492202f, -0.487610f, 0.036395f, 0.109393f, 0.396155f, -0.352845f, -0.205913f, -0.082999f, -0.463033f, -0.309296f, - 0.025886f, -0.092456f, -0.125139f, -0.156117f, -0.004887f, 0.178440f, 0.089586f, 0.044827f, 0.238219f, -0.312120f, -0.390688f, -0.178543f, 0.454418f, 0.387012f, -0.388874f, - -0.197797f, 0.035540f, 0.455388f, -0.054410f, 0.380035f, 0.290964f, 0.048804f, 0.078637f, 0.221740f, -0.217548f, 0.121289f, -0.396681f, -0.218482f, -0.127265f, -0.269507f, - -0.344218f, -0.465038f, -0.421415f, -0.026031f, 0.221547f, 0.361993f, -0.348243f, 0.294983f, 0.366175f, 0.070663f, -0.086050f, 0.252129f, 0.156066f, -0.062800f, 0.408972f, - 0.242461f, -0.301764f, -0.066160f, 0.388651f, -0.462227f, -0.158880f, 0.230796f, -0.093179f, 0.047076f, 0.073402f, -0.335018f, 0.022940f, 0.354611f, 0.072391f, 0.019473f, - 0.336900f, -0.480534f, 0.170267f, 0.259663f, -0.393576f, -0.348588f, -0.108962f, 0.278842f, 0.385490f, 0.362249f, -0.318739f, 0.362305f, 0.288936f, 0.291204f, -0.278019f, - -0.449302f, -0.288513f, -0.413973f, -0.405279f, -0.295152f, -0.245110f, 0.002530f, 0.287890f, 0.348229f, -0.178354f, -0.206517f, 0.351081f, -0.482205f, 0.021360f, -0.492207f, - 0.048642f, 0.453282f, 0.109160f, 0.232599f, -0.473781f, 0.140502f, 0.352527f, -0.098606f, 0.147172f, -0.055797f, 0.107739f, -0.231026f, 0.357310f, 0.348031f, 0.232404f, - -0.324788f, 0.162480f, 0.057647f, -0.060734f, -0.009742f, -0.224185f, -0.282355f, -0.065443f, 0.064697f, 0.280370f, -0.284906f, -0.470501f, 0.019484f, -0.442308f, 0.377214f, - 0.447384f, -0.290498f, 0.345528f, 0.370207f, -0.313120f, 0.119592f, 0.300014f, 0.406995f, -0.277922f, 0.447039f, 0.194824f, 0.157703f, -0.223402f, -0.147167f, 0.379073f, - -0.216342f, 0.137967f, -0.397180f, 0.073905f, -0.273110f, -0.443037f, -0.168327f, 0.346264f, 0.037543f, 0.065387f, 0.163901f, -0.122523f, 0.365477f, -0.316321f, 0.117273f, - -0.301282f, 0.169625f, -0.336466f, 0.269914f, -0.420160f, -0.331296f, 0.498523f, -0.393009f, -0.462184f, -0.323097f, 0.470977f, -0.359463f, 0.264315f, 0.216797f, 0.493400f, - 0.151489f, -0.321653f, 0.464413f, -0.355673f, 0.420401f, 0.184297f, -0.302128f, 0.136536f, -0.252849f, 0.193906f, 0.298775f, 0.238808f, -0.386298f, -0.181999f, -0.077326f, - 0.124840f, -0.263394f, 0.389606f, 0.004502f, 0.339804f, 0.415204f, 0.377751f, 0.400221f, 0.352426f, -0.003808f, -0.184530f, 0.433348f, -0.237554f, 0.147684f, 0.407210f, - 0.067616f, -0.249313f, -0.354010f, 0.320937f, 0.426000f, 0.309576f, -0.189689f, -0.209447f, 0.158967f, -0.081929f, 0.386828f, 0.178582f, -0.407143f, 0.222189f, -0.149097f -}; - -const float ap_lattice_coeffs_2[DIRAC_DECORR_FILTER_LEN_2*DIRAC_MAX_NUM_DECORR_FILTERS] = -{ - 0.633692f, 0.681207f, -0.049418f, 0.286715f, 0.146022f, 0.135402f, - -0.410145f, -0.206766f, -0.656968f, -0.101746f, 0.436299f, 0.339818f, - -0.131383f, -0.773746f, -0.301627f, 0.327561f, 0.332227f, 0.205858f, - 0.717602f, -0.552370f, -0.150136f, 0.054556f, 0.239519f, -0.648477f, - -0.721848f, 0.189377f, 0.068185f, 0.006216f, 0.077025f, 0.038678f, - 0.423415f, -0.108658f, 0.432050f, -0.414641f, 0.277840f, 0.418486f, - 0.077811f, -0.283063f, -0.357008f, 0.004634f, -0.442640f, -0.372315f, - 0.403336f, 0.243023f, 0.314367f, 0.444513f, 0.347517f, 0.496043f, - 0.108408f, 0.469382f, -0.170286f, 0.326310f, 0.172157f, 0.440334f, - 0.058417f, 0.339673f, -0.194965f, 0.491219f, -0.281296f, -0.043120f, - -0.482487f, -0.335005f, -0.336159f, 0.196469f, -0.164623f, 0.442491f, - -0.135190f, -0.354385f, 0.452133f, -0.311221f, -0.347640f, 0.498342f, - -0.288999f, 0.376431f, -0.177924f, 0.195542f, 0.333872f, -0.152697f, - 0.053230f, 0.457767f, 0.442476f, 0.235254f, -0.345159f, -0.286098f, - 0.155438f, 0.405393f, 0.217073f, -0.107960f, 0.010698f, 0.368987f, - -0.498358f, -0.495816f, -0.215479f, -0.093869f, 0.320276f, -0.013842f, - 0.489406f, 0.470814f, -0.065834f, 0.346871f, 0.027279f, 0.150086f, - 0.484013f, -0.497391f, 0.168796f, -0.493841f, -0.173528f, 0.334676f, - 0.264235f, -0.424651f, -0.314926f, 0.253086f, 0.397381f, -0.491565f, - -0.453727f, -0.463358f, -0.019128f, 0.000344f, 0.315432f, 0.472345f, - 0.095139f, 0.283375f, -0.225088f, -0.119762f, -0.476871f, 0.037525f, - 0.336951f, 0.494511f, -0.062603f, 0.177652f, 0.463892f, 0.489286f -}; - -const float ap_lattice_coeffs_3[DIRAC_DECORR_FILTER_LEN_3*DIRAC_MAX_NUM_DECORR_FILTERS] = -{ - 0.018977f, -0.212205f, 0.422719f, - -0.400657f, -0.106890f, -0.024589f, - 0.140005f, 0.279582f, 0.032357f, - 0.632535f, 0.578535f, -0.734606f, - 0.017182f, 0.013244f, -0.027715f, - -0.353356f, -0.482160f, -0.491265f, - 0.457024f, 0.165122f, 0.469723f, - -0.195705f, 0.440105f, -0.477366f, - 0.360186f, -0.490565f, 0.484623f, - -0.173791f, 0.007543f, 0.278186f, - 0.434416f, 0.060363f, -0.193717f, - -0.033709f, 0.496222f, 0.002939f, - -0.480848f, -0.109552f, -0.023198f, - 0.324679f, -0.292075f, -0.356148f, - -0.366595f, 0.380917f, -0.301741f, - 0.110318f, 0.383789f, 0.303984f, - -0.499685f, -0.349584f, 0.334749f, - -0.020224f, -0.430078f, -0.154705f, - -0.371129f, 0.334080f, 0.346913f, - -0.166781f, -0.229089f, 0.117956f, - 0.341292f, 0.490463f, 0.493655f, - -0.367726f, 0.426528f, -0.045774f -}; - -const float * const ap_lattice_coeffs[DIRAC_DECORR_NUM_SPLIT_BANDS] = -{ - &ap_lattice_coeffs_1[0], - &ap_lattice_coeffs_2[0], - &ap_lattice_coeffs_3[0], -}; - -#else const Word16 ap_lattice_coeffs_1_fx[330] /* Q15 */ = { 26061, 16472, 6699, 13650, 15061, 8862, -6617, 917, 2222, -1724, -1270, -1880, 671, 12048, -19454, 17487, 6635, -63, 6392, -6044, -7663, 7474, -10790, -11098, -2611, 1716, -310, 5859, 6253, -15691, 1442, 25837, 4375, -5690, 17871, 22329, 10907, 9656, 10658, 1560, 5157, 3810, 7175, -6201, -10400, -24696, 25309, -16625, 9076, -22700, 7612, -11624, -511, -7309, 10174, -1147, 2810, -16383, 7053, 6599, -16238, -9884, 6439, 10687, -19476, 10319, 21911, 2511, 1497, -4089, -6660, -9738, 4122, -5881, -6611, 5279, 12977, 8745, 11684, 15995, -1843, 4563, -9712, -3697, 1225, -12039, -7087, -9088, 12760, 3772, -7879, -8880, 13982, -362, 4974, 8306, 7397, 16341, -4468, 14516, -9994, -1025, -352, 5581, 16268, -4583, -7929, -3435, 9645, -2219, -16128, -15978, 1192, 3584, 12981, -11562, -6747, -2719, -15172, -10135, 848, -3029, -4100, -5115, -160, 5847, 2935, 1468, 7805, -10227, -12802, -5850, 14890, 12681, -12742, -6481, 1164, 14922, -1782, 12452, 9534, 1599, 2576, 7265, -7128, 3974, -12998, -7159, -4170, -8831, -11279, -15238, -13808, -852, 7259, 11861, -11411, 9666, 11998, 2315, -2819, 8261, 5113, -2057, 13401, 7944, -9888, -2167, 12735, -15146, -5206, 7562, -3053, 1542, 2405, -10977, 751, 11619, 2372, 638, 11039, -15746, 5579, 8508, -12896, -11422, -3570, 9137, 12631, 11870, -10444, 11872, 9467, 9542, -9110, -14722, -9453, -13565, -13280, -9671, -8031, 82, 9433, 11410, -5844, -6767, 11504, -15800, 699, -16128, 1593, 14853, 3576, 7621, -15524, 4603, 11551, -3231, 4822, -1828, 3530, -7570, 11708, 11404, 7615, -10642, 5324, 1888, -1990, -319, -7346, -9252, -2144, 2119, 9187, -9335, -15417, 638, -14493, 12360, 14659, -9519, 11322, 12130, -10260, 3918, 9830, 13336, -9106, 14648, 6383, 5167, -7320, -4822, 12421, -7089, 4520, -13014, 2421, -8949, -14517, -5515, 11346, 1230, 2142, 5370, -4014, 11975, -10365, 3842, -9872, 5558, -11025, 8844, -13767, -10855, 16335, -12878, -15144, -10587, 15432, -11778, 8661, 7104, 16167, 4963, -10539, 15217, -11654, 13775, 6039, -9900, 4474, -8285, 6353, 9790, 7825, -12658, -5963, -2533, 4090, -8630, 12766, 147, 11134, 13605, 12378, 13114, 11548, -124, -6046, 14199, -7784, 4839, 13343, 2215, -8169, -11600, 10516, 13959, 10144, -6215, -6863, 5209, -2684, 12675, 5851, -13341, 7280, -4885, }; const Word16 ap_lattice_coeffs_2_fx[132] /* Q15 */ = { 20764, 22321, -1619, 9395, 4784, 4436, -13439, -6775, -21527, -3334, 14296, 11135, -4305, -25354, -9883, 10733, 10886, 6745, 23514, -18100, -4919, 1787, 7848, -21249, -23653, 6205, 2234, 203, 2523, 1267, 13874, -3560, 14157, -13586, 9104, 13712, 2549, -9275, -11698, 151, -14504, -12200, 13216, 7963, 10301, 14565, 11387, 16254, 3552, 15380, -5579, 10692, 5641, 14428, 1914, 11130, -6388, 16096, -9217, -1412, -15810, -10977, -11015, 6437, -5394, 14499, -4429, -11612, 14815, -10198, -11391, 16329, -9469, 12334, -5830, 6407, 10940, -5003, 1744, 15000, 14499, 7708, -11310, -9374, 5093, 13283, 7113, -3537, 350, 12090, -16330, -16246, -7060, -3075, 10494, -453, 16036, 15427, -2157, 11366, 893, 4918, 15860, -16298, 5531, -16182, -5686, 10966, 8658, -13914, -10319, 8293, 13021, -16107, -14867, -15183, -626, 11, 10336, 15477, 3117, 9285, -7375, -3924, -15626, 1229, 11041, 16204, -2051, 5821, 15200, 16032, }; const Word16 ap_lattice_coeffs_3_fx[66] /* Q15 */ = { 621, -6953, 13851, -13128, -3502, -805, 4587, 9161, 1060, 20726, 18957, -24071, 563, 433, -908, -11578, -15799, -16097, 14975, 5410, 15391, -6412, 14421, -15642, 11802, -16074, 15880, -5694, 247, 9115, 14234, 1977, -6347, -1104, 16260, 96, -15756, -3589, -760, 10639, -9570, -11670, -12012, 12481, -9887, 3614, 12575, 9960, -16373, -11455, 10969, -662, -14092, -5069, -12161, 10947, 11367, -5465, -7506, 3865, 11183, 16071, 16176, -12049, 13976, -1499, }; @@ -214,18 +86,10 @@ const Word16 * const ap_lattice_coeffs_fx[DIRAC_DECORR_NUM_SPLIT_BANDS] = &ap_lattice_coeffs_2_fx[0], &ap_lattice_coeffs_3_fx[0], }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float ap_split_frequencies[DIRAC_DECORR_NUM_SPLIT_BANDS + 1] = -{ - 0.0f, 0.125f, 0.375f, 1.0f -}; -#else const Word16 ap_split_frequencies_fx[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]/*Q14*/ = { 0 , 2048, 6144, 16384 }; -#endif const int16_t sba_map_tc[11] = { @@ -263,67 +127,23 @@ const int16_t channelIndex_CICP14[7] = { 0, 1, 2, 5, 6, 9, 10 }; const int16_t channelIndex_CICP16[9] = { 0, 1, 2, 5, 6, 9, 10, 11, 12 }; const int16_t channelIndex_CICP19[11] = { 0, 1, 2, 3, 4, 7, 8, 9, 10, 13, 14 }; -#ifndef IVAS_FLOAT_FIXED -const float surCohEne[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = -{ - 3.0903f, 2.0053f, 1.0860f, 0.8072f, 0.7079f -}; -#else const Word16 surCohEne_fx[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] /* Q13 */ = { 25315, 16427, 8896, 6612, 5799 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float spreadCohEne05[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = -{ - 2.3988f, 1.7783f, 1.1220f, 1.1220f, 1.1220f -}; -#else const Word16 spreadCohEne05_fx[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = /* Q13 */ { 19650, 14567, 9191, 9191, 9191 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float spreadCohEne1[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = -{ - 1.5975f, 1.1220f, 1.1220f, 1.1220f, 1.1220f -}; -#else const Word16 spreadCohEne1_fx[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS] = /* Q14 */ { 26173, 18382, 18382, 18382, 18382 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float lowBitRateBinauralEQ[LOW_BIT_RATE_BINAURAL_EQ_BINS] = -{ - 0.979f, 0.893f, 0.762f, 0.615f, 0.52f, 0.48f, 0.477f, 0.477f, 0.48f, 0.501f, 0.546f, 0.602f, 0.652f, 0.664f, 0.652f, 0.639f, 0.635f -}; -#else const Word32 lowBitRateBinauralEQ_fx[LOW_BIT_RATE_BINAURAL_EQ_BINS] /* Q31 */ = { 2102386432, 1917702912, 1636382592, 1320702464, 1116691456, 1030792128, 1024349696, 1024349696, 1030792128, 1075889280, 1172526080, 1292785152, 1400159360, 1425929088, 1400159360, 1372242048, 1363652096 }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float diffuseFieldCoherenceDifferenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS] = -{ - 0.047421f, 0.19773f, 0.22582f, 0.10637f, 0.0087111f, 0.012028f, 0.031972f, 0.019668f, 0.0079928f -}; - -const float diffuseFieldCoherenceDifferenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS] = -{ - -0.095628f, -0.30569f, -0.34427f, -0.15425f, -0.044628f, -0.057224f, -0.050835f, -0.035214f, -0.02215f -}; - -const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS] = -{ - 0.048207f, 0.10796f, 0.11845f, 0.047886f, 0.035917f, 0.045196f, 0.018863f, 0.015547f, 0.014157f -}; -#else const Word32 diffuseFieldCoherenceDifferenceX_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS] = { /* Q31 */ 101835824, 424621952, 484944768, 228427840, 18706944, 25829934, 68659344, 42236708, 17164408, }; @@ -335,7 +155,6 @@ const Word32 diffuseFieldCoherenceDifferenceY_fx[BINAURAL_COHERENCE_DIFFERENCE_B const Word32 diffuseFieldCoherenceDifferenceZ_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS] = { /* Q31 */ 103523744, 231842336, 254369440, 102834400, 77131168, 97057672, 40507984, 33386928, 30401926, }; -#endif /*----------------------------------------------------------------------------------* * TD ISM binaural renderer ROM tables @@ -346,53 +165,6 @@ const int16_t HRTF_MODEL_N_CPTS_VAR[HRTF_MODEL_N_SECTIONS] = 13, 12, 11 }; -#ifndef IVAS_FLOAT_FIXED -const float SincTable[321] = -{ - 1.00000000f, 0.99957629f, 0.99830587f, 0.99619078f, 0.99323448f, 0.98944177f, 0.98481881f, 0.97937311f, - 0.97311350f, 0.96605012f, 0.95819441f, 0.94955907f, 0.94015803f, 0.93000645f, 0.91912066f, 0.90751815f, - 0.89521750f, 0.88223838f, 0.86860150f, 0.85432856f, 0.83944219f, 0.82396595f, 0.80792425f, 0.79134231f, - 0.77424608f, 0.75666226f, 0.73861817f, 0.72014174f, 0.70126144f, 0.68200624f, 0.66240553f, 0.64248906f, - 0.62228691f, 0.60182943f, 0.58114713f, 0.56027070f, 0.53923087f, 0.51805843f, 0.49678411f, 0.47543856f, - 0.45405225f, 0.43265547f, 0.41127824f, 0.38995024f, 0.36870081f, 0.34755883f, 0.32655271f, 0.30571035f, - 0.28505905f, 0.26462549f, 0.24443569f, 0.22451493f, 0.20488776f, 0.18557791f, 0.16660829f, 0.14800093f, - 0.12977695f, 0.11195656f, 0.09455895f, 0.07760236f, 0.06110400f, 0.04508003f, 0.02954554f, 0.01451456f, - 0.00000000f, -0.01398631f, -0.02743368f, -0.04033255f, -0.05267447f, -0.06445214f, -0.07565940f, -0.08629121f, - -0.09634367f, -0.10581400f, -0.11470052f, -0.12300268f, -0.13072098f, -0.13785702f, -0.14441345f, -0.15039394f, - -0.15580318f, -0.16064685f, -0.16493160f, -0.16866498f, -0.17185547f, -0.17451243f, -0.17664604f, -0.17826729f, - -0.17938796f, -0.18002054f, -0.18017822f, -0.17987486f, -0.17912493f, -0.17794347f, -0.17634608f, -0.17434883f, - -0.17196824f, -0.16922125f, -0.16612516f, -0.16269761f, -0.15895648f, -0.15491992f, -0.15060625f, -0.14603396f, - -0.14122162f, -0.13618787f, -0.13095139f, -0.12553081f, -0.11994473f, -0.11421163f, -0.10834984f, -0.10237755f, - -0.09631271f, -0.09017300f, -0.08397586f, -0.07773838f, -0.07147731f, -0.06520902f, -0.05894946f, -0.05271415f, - -0.04651815f, -0.04037601f, -0.03430179f, -0.02830902f, -0.02241063f, -0.01661904f, -0.01094605f, -0.00540284f, - -0.00000000f, 0.00525251f, 0.01034538f, 0.01526993f, 0.02001814f, 0.02458266f, 0.02895676f, 0.03313441f, - 0.03711021f, 0.04087943f, 0.04443799f, 0.04778246f, 0.05091003f, 0.05381856f, 0.05650650f, 0.05897292f, - 0.06121749f, 0.06324047f, 0.06504268f, 0.06662549f, 0.06799083f, 0.06914112f, 0.07007930f, 0.07080878f, - 0.07133343f, 0.07165755f, 0.07178588f, 0.07172352f, 0.07147595f, 0.07104902f, 0.07044886f, 0.06968193f, - 0.06875494f, 0.06767485f, 0.06644886f, 0.06508435f, 0.06358888f, 0.06197015f, 0.06023599f, 0.05839432f, - 0.05645314f, 0.05442051f, 0.05230450f, 0.05011320f, 0.04785466f, 0.04553692f, 0.04316793f, 0.04075558f, - 0.03830765f, 0.03583181f, 0.03333557f, 0.03082630f, 0.02831121f, 0.02579730f, 0.02329137f, 0.02080003f, - 0.01832963f, 0.01588629f, 0.01347589f, 0.01110403f, 0.00877607f, 0.00649705f, 0.00427175f, 0.00210467f, - 0.00000000f, -0.00203837f, -0.00400686f, -0.00590216f, -0.00772131f, -0.00946162f, -0.01112072f, -0.01269654f, - -0.01418731f, -0.01559156f, -0.01690810f, -0.01813605f, -0.01927478f, -0.02032396f, -0.02128352f, -0.02215366f, - -0.02293482f, -0.02362769f, -0.02423318f, -0.02475245f, -0.02518686f, -0.02553797f, -0.02580754f, -0.02599752f, - -0.02611000f, -0.02614728f, -0.02611175f, -0.02600597f, -0.02583262f, -0.02559449f, -0.02529446f, -0.02493550f, - -0.02452066f, -0.02405306f, -0.02353586f, -0.02297226f, -0.02236549f, -0.02171881f, -0.02103547f, -0.02031874f, - -0.01957185f, -0.01879802f, -0.01800043f, -0.01718225f, -0.01634655f, -0.01549638f, -0.01463471f, -0.01376443f, - -0.01288838f, -0.01200928f, -0.01112977f, -0.01025241f, -0.00937962f, -0.00851376f, -0.00765705f, -0.00681160f, - -0.00597942f, -0.00516238f, -0.00436225f, -0.00358068f, -0.00281917f, -0.00207914f, -0.00136185f, -0.00066846f, - -0.00000000f, 0.00064260f, 0.00125856f, 0.00184718f, 0.00240790f, 0.00294026f, 0.00344390f, 0.00391857f, - 0.00436413f, 0.00478051f, 0.00516776f, 0.00552600f, 0.00585544f, 0.00615637f, 0.00642915f, 0.00667420f, - 0.00689203f, 0.00708318f, 0.00724827f, 0.00738795f, 0.00750293f, 0.00759395f, 0.00766178f, 0.00770723f, - 0.00773114f, 0.00773435f, 0.00771774f, 0.00768218f, 0.00762857f, 0.00755779f, 0.00747075f, 0.00736831f, - 0.00725138f, 0.00712082f, 0.00697748f, 0.00682221f, 0.00665584f, 0.00647916f, 0.00629295f, 0.00609797f, - 0.00589494f, 0.00568458f, 0.00546754f, 0.00524448f, 0.00501600f, 0.00478270f, 0.00454511f, 0.00430377f, - 0.00405916f, 0.00381176f, 0.00356198f, 0.00331023f, 0.00305690f, 0.00280234f, 0.00254687f, 0.00229079f, - 0.00203440f, 0.00177795f, 0.00152168f, 0.00126584f, 0.00101062f, 0.00075625f, 0.00050289f, 0.00025075f, - 0.00000000f -}; - -#else const Word32 SincTable_fx[321] /*Q31*/ = { 2147483647, 2146573696, 2143845504, 2139303424, 2132954752, 2124809984, 2114882304, 2103187712, 2089745280, 2074576896, 2057706880, 2039162624, 2018973952, 1997173632, 1973796608, 1948880384, @@ -435,296 +207,6 @@ const Word32 SincTable_fx[321] /*Q31*/ = { 8716980, 8185692, 7649294, 7108665, 6564643, 6017979, 5469361, 4919434, 4368840, 3818118, 3267783, 2718370, 2170290, 1624034, 1079948, 538481, }; -#endif -#ifndef IVAS_FLOAT_FIXED -const float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC] = { - 0.983003f, 0.933450f, 0.789276f, 0.574420f, 0.340710f, 0.144220f, 0.018803f, 0.000000f, 0.000000f, - 0.000000f, 0.011939f, 0.035489f, 0.043188f, 0.042460f, 0.041788f, 0.038562f, 0.028911f, 0.017162f, - 0.011571f, 0.014176f, 0.019830f, 0.024590f, 0.029203f, 0.033346f, 0.033418f, 0.029627f, 0.027479f, - 0.027434f, 0.025152f, 0.019518f, 0.014728f, 0.014201f, 0.016131f, 0.016294f, 0.013154f, 0.008660f, - 0.005005f, 0.002594f, 0.001044f, 0.000207f, 0.000000f, 0.000000f, 0.000000f, 0.001110f, 0.003986f, - 0.007003f, 0.009546f, 0.011532f, 0.012412f, 0.011553f, 0.009156f, 0.006222f, 0.003565f, 0.001384f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000032f, 0.000928f, 0.002118f, 0.003061f, 0.003575f, - 0.003780f, 0.003678f, 0.003110f, 0.002074f, 0.000856f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000217f, 0.000974f, 0.001807f, 0.002334f, - 0.002436f, 0.002105f, 0.001526f, 0.000907f, 0.000350f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000238f, 0.000852f, 0.001293f, - 0.001529f, 0.001533f, 0.001314f, 0.000954f, 0.000521f, 0.000155f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000025f, 0.000284f, 0.000620f, 0.000949f, 0.001274f, 0.001606f, 0.001922f, - 0.002195f, 0.002438f, 0.002687f, 0.002944f, 0.003172f, 0.003371f, 0.003577f, 0.003779f, 0.003915f, - 0.003973f, 0.003980f, 0.003925f, 0.003766f, 0.003501f, 0.003165f, 0.002778f, 0.002326f, 0.001806f, - 0.001257f, 0.000714f, 0.000211f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000766f, 0.000537f, 0.000000f, - 0.001691f, 0.003307f, 0.001635f, 0.000000f, 0.001601f, 0.007549f, 0.000580f, 0.000000f, 0.002038f, - 0.010325f, 0.002155f, 0.000000f, 0.003524f, 0.009251f, 0.005131f, 0.000000f, 0.002286f, 0.006486f, - 0.005902f, 0.000000f, 0.000862f, 0.004570f, 0.004117f, 0.000000f, 0.000000f, 0.003237f, 0.001534f, - 0.000259f, 0.000199f, 0.001363f, 0.000878f, 0.000000f -}; - -const float defaultHRIR_left_avg_power_48kHz[LR_IAC_LENGTH_NR_FC] = { - 0.978675f, 0.972385f, 0.959650f, 0.951879f, 0.952823f, 0.955063f, 0.950664f, 0.942982f, 0.943810f, - 0.958261f, 0.974503f, 0.980941f, 0.976648f, 0.968551f, 0.962061f, 0.957250f, 0.952477f, 0.948144f, - 0.945467f, 0.943209f, 0.938266f, 0.930238f, 0.923288f, 0.921237f, 0.922151f, 0.920812f, 0.917157f, - 0.914639f, 0.914127f, 0.913461f, 0.911654f, 0.910596f, 0.912207f, 0.915559f, 0.917863f, 0.917787f, - 0.916699f, 0.916435f, 0.916819f, 0.916225f, 0.914005f, 0.911360f, 0.909508f, 0.908111f, 0.906186f, - 0.903433f, 0.900605f, 0.898518f, 0.896964f, 0.894917f, 0.891856f, 0.888506f, 0.885940f, 0.884055f, - 0.881583f, 0.877955f, 0.874417f, 0.872501f, 0.871444f, 0.869864f, 0.867858f, 0.866735f, 0.867122f, - 0.868200f, 0.868897f, 0.869335f, 0.870657f, 0.873538f, 0.877306f, 0.880880f, 0.884388f, 0.889165f, - 0.895880f, 0.903263f, 0.909833f, 0.916015f, 0.922891f, 0.930300f, 0.936807f, 0.941431f, 0.944709f, - 0.947777f, 0.950731f, 0.952379f, 0.951745f, 0.949423f, 0.946810f, 0.944141f, 0.940067f, 0.933702f, - 0.926635f, 0.920257f, 0.914054f, 0.906651f, 0.897863f, 0.888903f, 0.880740f, 0.872936f, 0.864423f, - 0.855129f, 0.846311f, 0.839117f, 0.833266f, 0.827747f, 0.822648f, 0.819728f, 0.819707f, 0.821561f, - 0.824008f, 0.827075f, 0.831626f, 0.837745f, 0.844233f, 0.849862f, 0.854703f, 0.859787f, 0.865473f, - 0.870700f, 0.874300f, 0.876656f, 0.879215f, 0.882133f, 0.883808f, 0.883431f, 0.881897f, 0.880360f, - 0.878707f, 0.875924f, 0.871595f, 0.866584f, 0.862066f, 0.858145f, 0.853844f, 0.848581f, 0.843210f, - 0.839021f, 0.835832f, 0.831948f, 0.826952f, 0.822178f, 0.818520f, 0.815229f, 0.811138f, 0.806307f, - 0.801887f, 0.798628f, 0.796047f, 0.793269f, 0.790369f, 0.788436f, 0.788212f, 0.789066f, 0.789775f, - 0.790300f, 0.791907f, 0.794977f, 0.798368f, 0.800889f, 0.802776f, 0.805127f, 0.808190f, 0.810879f, - 0.812195f, 0.812606f, 0.813423f, 0.814925f, 0.815870f, 0.815340f, 0.814251f, 0.814186f, 0.814754f, - 0.814664f, 0.813654f, 0.812703f, 0.812701f, 0.813418f, 0.813910f, 0.813739f, 0.813585f, 0.814454f, - 0.816299f, 0.817832f, 0.818221f, 0.818620f, 0.820797f, 0.824043f, 0.825888f, 0.826559f, 0.828411f, - 0.832083f, 0.835548f, 0.837384f, 0.838961f, 0.842275f, 0.846770f, 0.849996f, 0.851359f, 0.853124f, - 0.856257f, 0.857270f, 0.852207f, 0.842390f, 0.831251f, 0.816041f, 0.791907f, 0.759307f, 0.723333f, - 0.686290f, 0.644649f, 0.594838f, 0.539959f, 0.487712f, 0.440561f, 0.389905f, 0.323258f, 0.238454f, - 0.149256f, 0.077620f, 0.032652f, 0.010630f, 0.002462f, 0.000339f, 0.000025f, 0.000016f, 0.000016f, - 0.000015f, 0.000014f, 0.000011f, 0.000009f, 0.000009f, 0.000009f, 0.000007f, 0.000006f, 0.000006f, - 0.000007f, 0.000006f, 0.000005f, 0.000005f, 0.000006f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, - 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, - 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f -}; - -const float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC] = { - 0.978675f, 0.972385f, 0.959652f, 0.951882f, 0.952822f, 0.955062f, 0.950665f, 0.942984f, 0.943810f, - 0.958262f, 0.974501f, 0.980942f, 0.976647f, 0.968551f, 0.962062f, 0.957251f, 0.952476f, 0.948141f, - 0.945464f, 0.943208f, 0.938265f, 0.930238f, 0.923288f, 0.921237f, 0.922151f, 0.920812f, 0.917158f, - 0.914639f, 0.914125f, 0.913460f, 0.911652f, 0.910595f, 0.912207f, 0.915559f, 0.917865f, 0.917788f, - 0.916698f, 0.916433f, 0.916818f, 0.916224f, 0.914005f, 0.911361f, 0.909504f, 0.908110f, 0.906186f, - 0.903433f, 0.900605f, 0.898518f, 0.896965f, 0.894920f, 0.891858f, 0.888507f, 0.885940f, 0.884054f, - 0.881580f, 0.877954f, 0.874417f, 0.872502f, 0.871442f, 0.869862f, 0.867858f, 0.866735f, 0.867123f, - 0.868201f, 0.868897f, 0.869333f, 0.870655f, 0.873539f, 0.877309f, 0.880883f, 0.884387f, 0.889165f, - 0.895880f, 0.903264f, 0.909834f, 0.916014f, 0.922893f, 0.930302f, 0.936809f, 0.941431f, 0.944709f, - 0.947777f, 0.950731f, 0.952378f, 0.951746f, 0.949421f, 0.946811f, 0.944145f, 0.940067f, 0.933700f, - 0.926637f, 0.920257f, 0.914054f, 0.906653f, 0.897864f, 0.888905f, 0.880742f, 0.872937f, 0.864423f, - 0.855128f, 0.846312f, 0.839118f, 0.833269f, 0.827748f, 0.822649f, 0.819728f, 0.819710f, 0.821561f, - 0.824007f, 0.827074f, 0.831626f, 0.837745f, 0.844232f, 0.849861f, 0.854703f, 0.859787f, 0.865474f, - 0.870700f, 0.874300f, 0.876658f, 0.879216f, 0.882133f, 0.883807f, 0.883428f, 0.881895f, 0.880358f, - 0.878709f, 0.875925f, 0.871596f, 0.866586f, 0.862067f, 0.858144f, 0.853843f, 0.848581f, 0.843210f, - 0.839021f, 0.835833f, 0.831948f, 0.826952f, 0.822177f, 0.818518f, 0.815228f, 0.811137f, 0.806306f, - 0.801886f, 0.798627f, 0.796045f, 0.793268f, 0.790369f, 0.788437f, 0.788213f, 0.789064f, 0.789770f, - 0.790299f, 0.791906f, 0.794977f, 0.798369f, 0.800890f, 0.802778f, 0.805130f, 0.808191f, 0.810879f, - 0.812198f, 0.812607f, 0.813424f, 0.814926f, 0.815872f, 0.815339f, 0.814254f, 0.814188f, 0.814757f, - 0.814665f, 0.813653f, 0.812704f, 0.812700f, 0.813416f, 0.813908f, 0.813738f, 0.813584f, 0.814454f, - 0.816300f, 0.817832f, 0.818221f, 0.818620f, 0.820796f, 0.824044f, 0.825889f, 0.826559f, 0.828413f, - 0.832084f, 0.835548f, 0.837383f, 0.838960f, 0.842272f, 0.846766f, 0.849995f, 0.851358f, 0.853121f, - 0.856258f, 0.857268f, 0.852209f, 0.842391f, 0.831252f, 0.816040f, 0.791907f, 0.759307f, 0.723333f, - 0.686288f, 0.644648f, 0.594838f, 0.539959f, 0.487712f, 0.440562f, 0.389904f, 0.323259f, 0.238454f, - 0.149256f, 0.077620f, 0.032652f, 0.010630f, 0.002462f, 0.000339f, 0.000025f, 0.000016f, 0.000016f, - 0.000015f, 0.000014f, 0.000011f, 0.000009f, 0.000009f, 0.000009f, 0.000007f, 0.000006f, 0.000006f, - 0.000007f, 0.000006f, 0.000005f, 0.000005f, 0.000006f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, - 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f, - 0.000005f, 0.000005f, 0.000005f, 0.000005f, 0.000005f -}; - -const float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC] = { - 0.976959f, 0.962817f, 0.892107f, 0.783427f, 0.649433f, 0.488372f, 0.336040f, 0.196803f, 0.094108f, - 0.016852f, 0.004815f, 0.000000f, 0.000000f, 0.000000f, 0.002703f, 0.009460f, 0.024631f, 0.038937f, - 0.041367f, 0.041308f, 0.039589f, 0.039056f, 0.037048f, 0.032828f, 0.024623f, 0.015933f, 0.009282f, - 0.007047f, 0.007754f, 0.011823f, 0.015553f, 0.018773f, 0.021834f, 0.024812f, 0.027619f, 0.028707f, - 0.028648f, 0.026125f, 0.024072f, 0.022724f, 0.022507f, 0.022144f, 0.020064f, 0.016587f, 0.012177f, - 0.009732f, 0.008764f, 0.010014f, 0.011423f, 0.012307f, 0.010938f, 0.008551f, 0.005485f, 0.002935f, - 0.001054f, 0.000176f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000231f, 0.001386f, 0.003010f, 0.004946f, 0.006482f, 0.007843f, 0.008942f, - 0.009171f, 0.008905f, 0.007532f, 0.005772f, 0.003756f, 0.001923f, 0.000617f, 0.000103f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000265f, 0.000706f, 0.000947f, 0.001119f, 0.001185f, 0.001040f, 0.000772f, 0.000221f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000099f, 0.000345f, 0.000565f, 0.000710f, 0.000581f, 0.000331f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000098f, 0.000341f, 0.000584f, 0.000793f, - 0.000876f, 0.000853f, 0.000759f, 0.000512f, 0.000273f, 0.000045f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f, - 0.000039f, 0.000157f, 0.000303f, 0.000474f, 0.000664f, 0.000865f, 0.001073f, 0.001281f, 0.001488f, - 0.001698f, 0.001906f, 0.002099f, 0.002268f, 0.002421f, 0.002545f, 0.002666f, 0.002785f, 0.002898f, - 0.003010f, 0.003124f, 0.003262f, 0.003417f, 0.003642f, 0.003884f, 0.004155f, 0.004443f, 0.004744f, - 0.005073f, 0.005422f, 0.005784f, 0.006121f, 0.006428f, 0.006690f, 0.006905f, 0.007096f, 0.007241f, - 0.007305f, 0.007315f, 0.007117f, 0.006840f, 0.006446f, 0.005915f, 0.005314f, 0.004568f, 0.003781f, - 0.002967f, 0.002550f, 0.002355f, 0.002493f, 0.002520f -}; - -const float defaultHRIR_left_avg_power_32kHz[LR_IAC_LENGTH_NR_FC] = { - 1.042842f, 1.041052f, 1.032098f, 1.024347f, 1.017398f, 1.019204f, 1.022140f, 1.026773f, 1.026684f, - 1.024560f, 1.019019f, 1.016692f, 1.016507f, 1.025484f, 1.035123f, 1.045753f, 1.050401f, 1.052033f, - 1.047590f, 1.042551f, 1.037116f, 1.034266f, 1.031619f, 1.029278f, 1.025989f, 1.022575f, 1.019610f, - 1.017442f, 1.015805f, 1.012657f, 1.008261f, 1.001990f, 0.995937f, 0.990744f, 0.988777f, 0.988277f, - 0.988755f, 0.987563f, 0.985600f, 0.982481f, 0.980182f, 0.978414f, 0.977951f, 0.977129f, 0.976068f, - 0.974020f, 0.972563f, 0.971992f, 0.973446f, 0.975452f, 0.977643f, 0.978631f, 0.978818f, 0.977682f, - 0.976742f, 0.976096f, 0.975927f, 0.975729f, 0.974941f, 0.973370f, 0.971276f, 0.968762f, 0.966461f, - 0.964481f, 0.962731f, 0.960904f, 0.958549f, 0.955708f, 0.952543f, 0.949546f, 0.946857f, 0.944631f, - 0.942410f, 0.939997f, 0.936815f, 0.933278f, 0.929505f, 0.926271f, 0.923282f, 0.920659f, 0.917696f, - 0.914482f, 0.910602f, 0.906806f, 0.903065f, 0.900364f, 0.897894f, 0.895772f, 0.893323f, 0.890740f, - 0.887944f, 0.885641f, 0.883667f, 0.882835f, 0.882051f, 0.881336f, 0.880121f, 0.878813f, 0.877633f, - 0.877223f, 0.877327f, 0.878409f, 0.879421f, 0.880327f, 0.881091f, 0.882024f, 0.883779f, 0.886402f, - 0.889602f, 0.893152f, 0.896459f, 0.899400f, 0.902225f, 0.905146f, 0.908573f, 0.912109f, 0.915718f, - 0.918254f, 0.920227f, 0.921355f, 0.922089f, 0.922760f, 0.923576f, 0.924088f, 0.924398f, 0.923115f, - 0.921260f, 0.918548f, 0.915643f, 0.912707f, 0.909842f, 0.906416f, 0.902615f, 0.897332f, 0.891877f, - 0.886166f, 0.880998f, 0.875991f, 0.871078f, 0.865522f, 0.859537f, 0.852717f, 0.846083f, 0.839728f, - 0.833972f, 0.828308f, 0.822411f, 0.816009f, 0.809271f, 0.802578f, 0.796320f, 0.790714f, 0.785846f, - 0.781192f, 0.776652f, 0.772249f, 0.767940f, 0.764926f, 0.762667f, 0.761540f, 0.761326f, 0.761372f, - 0.761547f, 0.761950f, 0.762506f, 0.764263f, 0.766400f, 0.769105f, 0.771504f, 0.773644f, 0.775056f, - 0.776462f, 0.777865f, 0.779929f, 0.781942f, 0.783881f, 0.784915f, 0.785562f, 0.785567f, 0.785690f, - 0.785891f, 0.786286f, 0.786348f, 0.785912f, 0.784408f, 0.782509f, 0.780101f, 0.777798f, 0.775564f, - 0.773205f, 0.770446f, 0.767088f, 0.762953f, 0.758652f, 0.754459f, 0.750714f, 0.747266f, 0.743818f, - 0.740063f, 0.735847f, 0.731497f, 0.727285f, 0.723759f, 0.720587f, 0.717650f, 0.714166f, 0.710382f, - 0.706148f, 0.702029f, 0.698046f, 0.694494f, 0.690839f, 0.687115f, 0.682535f, 0.677735f, 0.672604f, - 0.667663f, 0.662868f, 0.658475f, 0.654061f, 0.649634f, 0.644689f, 0.639750f, 0.634821f, 0.630767f, - 0.627153f, 0.624422f, 0.621650f, 0.618850f, 0.615731f, 0.613069f, 0.611089f, 0.610598f, 0.610566f, - 0.610880f, 0.610933f, 0.610809f, 0.611930f, 0.614079f, 0.617771f, 0.622653f, 0.628199f, 0.635210f, - 0.645081f, 0.656860f, 0.669006f, 0.673510f, 0.666552f, 0.628172f, 0.575127f, 0.494850f, 0.413951f, - 0.332637f, 0.280816f, 0.241903f, 0.222353f, 0.218443f -}; - -const float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC] = { - 1.042841f, 1.041051f, 1.032097f, 1.024346f, 1.017399f, 1.019202f, 1.022138f, 1.026772f, 1.026684f, - 1.024560f, 1.019019f, 1.016691f, 1.016506f, 1.025485f, 1.035123f, 1.045752f, 1.050401f, 1.052035f, - 1.047590f, 1.042551f, 1.037115f, 1.034265f, 1.031619f, 1.029280f, 1.025989f, 1.022573f, 1.019609f, - 1.017441f, 1.015805f, 1.012660f, 1.008264f, 1.001991f, 0.995937f, 0.990744f, 0.988778f, 0.988278f, - 0.988755f, 0.987564f, 0.985601f, 0.982480f, 0.980182f, 0.978415f, 0.977953f, 0.977129f, 0.976065f, - 0.974019f, 0.972563f, 0.971995f, 0.973448f, 0.975452f, 0.977643f, 0.978632f, 0.978821f, 0.977685f, - 0.976745f, 0.976097f, 0.975927f, 0.975729f, 0.974941f, 0.973370f, 0.971276f, 0.968759f, 0.966458f, - 0.964480f, 0.962731f, 0.960906f, 0.958547f, 0.955706f, 0.952543f, 0.949546f, 0.946857f, 0.944629f, - 0.942409f, 0.939999f, 0.936815f, 0.933278f, 0.929507f, 0.926270f, 0.923280f, 0.920660f, 0.917696f, - 0.914481f, 0.910601f, 0.906806f, 0.903066f, 0.900365f, 0.897895f, 0.895772f, 0.893323f, 0.890740f, - 0.887942f, 0.885640f, 0.883669f, 0.882835f, 0.882049f, 0.881335f, 0.880120f, 0.878812f, 0.877632f, - 0.877223f, 0.877328f, 0.878410f, 0.879422f, 0.880327f, 0.881092f, 0.882026f, 0.883781f, 0.886402f, - 0.889601f, 0.893151f, 0.896457f, 0.899399f, 0.902224f, 0.905146f, 0.908576f, 0.912111f, 0.915716f, - 0.918254f, 0.920227f, 0.921354f, 0.922087f, 0.922759f, 0.923576f, 0.924090f, 0.924401f, 0.923115f, - 0.921259f, 0.918547f, 0.915643f, 0.912708f, 0.909842f, 0.906416f, 0.902617f, 0.897334f, 0.891879f, - 0.886168f, 0.881000f, 0.875992f, 0.871078f, 0.865522f, 0.859538f, 0.852719f, 0.846085f, 0.839728f, - 0.833973f, 0.828309f, 0.822411f, 0.816009f, 0.809271f, 0.802579f, 0.796321f, 0.790714f, 0.785846f, - 0.781192f, 0.776653f, 0.772250f, 0.767940f, 0.764926f, 0.762667f, 0.761541f, 0.761325f, 0.761371f, - 0.761548f, 0.761950f, 0.762504f, 0.764263f, 0.766400f, 0.769104f, 0.771504f, 0.773644f, 0.775054f, - 0.776461f, 0.777866f, 0.779929f, 0.781942f, 0.783879f, 0.784913f, 0.785561f, 0.785567f, 0.785690f, - 0.785891f, 0.786285f, 0.786348f, 0.785913f, 0.784409f, 0.782510f, 0.780103f, 0.777798f, 0.775563f, - 0.773206f, 0.770449f, 0.767090f, 0.762954f, 0.758652f, 0.754458f, 0.750712f, 0.747266f, 0.743818f, - 0.740062f, 0.735846f, 0.731497f, 0.727285f, 0.723759f, 0.720587f, 0.717649f, 0.714164f, 0.710381f, - 0.706148f, 0.702028f, 0.698044f, 0.694493f, 0.690838f, 0.687113f, 0.682535f, 0.677735f, 0.672602f, - 0.667662f, 0.662869f, 0.658475f, 0.654061f, 0.649632f, 0.644687f, 0.639749f, 0.634820f, 0.630767f, - 0.627154f, 0.624423f, 0.621650f, 0.618849f, 0.615732f, 0.613069f, 0.611090f, 0.610599f, 0.610566f, - 0.610881f, 0.610933f, 0.610811f, 0.611930f, 0.614078f, 0.617770f, 0.622653f, 0.628199f, 0.635210f, - 0.645082f, 0.656861f, 0.669007f, 0.673511f, 0.666551f, 0.628170f, 0.575125f, 0.494849f, 0.413951f, - 0.332639f, 0.280817f, 0.241904f, 0.222354f, 0.218443f -}; - -const float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC] = { - 0.969495f, 0.969495f, 0.955351f, 0.919989f, 0.884627f, 0.842799f, 0.775108f, 0.707416f, 0.639724f, - 0.559264f, 0.478804f, 0.398344f, 0.327187f, 0.258355f, 0.189524f, 0.134064f, 0.087519f, 0.040974f, - 0.011416f, 0.007339f, 0.003262f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.002562f, 0.005763f, 0.008965f, 0.014937f, 0.022756f, 0.030575f, 0.035595f, 0.036416f, - 0.037238f, 0.037747f, 0.037005f, 0.036264f, 0.035523f, 0.035506f, 0.035489f, 0.035472f, 0.034043f, - 0.032261f, 0.030479f, 0.027264f, 0.023092f, 0.018921f, 0.015179f, 0.012080f, 0.008982f, 0.006557f, - 0.006827f, 0.007098f, 0.007368f, 0.009187f, 0.011006f, 0.012825f, 0.014250f, 0.015575f, 0.016901f, - 0.018085f, 0.019174f, 0.020264f, 0.021306f, 0.022276f, 0.023246f, 0.023984f, 0.023794f, 0.023604f, - 0.023414f, 0.022260f, 0.021105f, 0.019951f, 0.019250f, 0.018662f, 0.018074f, 0.017860f, 0.017894f, - 0.017928f, 0.017558f, 0.016581f, 0.015604f, 0.014403f, 0.012303f, 0.010203f, 0.008103f, 0.006887f, - 0.005671f, 0.004455f, 0.004657f, 0.005213f, 0.005769f, 0.006365f, 0.006987f, 0.007608f, 0.007649f, - 0.006819f, 0.005989f, 0.004992f, 0.003328f, 0.001664f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000038f, 0.000229f, - 0.000420f, 0.000610f, 0.001290f, 0.001970f, 0.002649f, 0.003127f, 0.003555f, 0.003982f, 0.004113f, - 0.004046f, 0.003978f, 0.003618f, 0.002820f, 0.002021f, 0.001296f, 0.000864f, 0.000432f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, - 0.000000f, 0.000000f, 0.000005f, 0.000011f, 0.000018f, 0.000743f, 0.001947f, 0.003152f, 0.004819f, - 0.007179f, 0.009539f, 0.012160f, 0.015826f, 0.019491f, 0.023157f, 0.028625f, 0.034093f, 0.039562f, - 0.046791f, 0.054462f, 0.062132f, 0.065200f, 0.065200f -}; - -const float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC] = { - 1.112848f, 1.112848f, 1.110615f, 1.105032f, 1.099449f, 1.094383f, 1.091385f, 1.088386f, 1.085388f, - 1.087986f, 1.090583f, 1.093181f, 1.095718f, 1.098238f, 1.100760f, 1.100829f, 1.099264f, 1.097699f, - 1.095677f, 1.092970f, 1.090263f, 1.088142f, 1.088367f, 1.088593f, 1.088819f, 1.092532f, 1.096246f, - 1.099959f, 1.104778f, 1.109873f, 1.114969f, 1.118806f, 1.121804f, 1.124803f, 1.125952f, 1.124327f, - 1.122702f, 1.120550f, 1.116291f, 1.112033f, 1.107774f, 1.105150f, 1.102527f, 1.099903f, 1.098607f, - 1.097642f, 1.096677f, 1.094771f, 1.092238f, 1.089705f, 1.086741f, 1.083131f, 1.079521f, 1.076294f, - 1.074604f, 1.072914f, 1.071224f, 1.070018f, 1.068812f, 1.067606f, 1.064075f, 1.059962f, 1.055849f, - 1.051324f, 1.046526f, 1.041727f, 1.038409f, 1.037312f, 1.036215f, 1.035479f, 1.036192f, 1.036905f, - 1.037618f, 1.035536f, 1.033453f, 1.031371f, 1.028051f, 1.024421f, 1.020792f, 1.018471f, 1.017022f, - 1.015574f, 1.014441f, 1.013780f, 1.013120f, 1.012053f, 1.009355f, 1.006658f, 1.003961f, 1.001331f, - 0.998701f, 0.996071f, 0.995600f, 0.995668f, 0.995737f, 0.996093f, 0.996641f, 0.997189f, 0.997005f, - 0.995722f, 0.994439f, 0.993136f, 0.991757f, 0.990377f, 0.988997f, 0.988491f, 0.987986f, 0.987480f, - 0.985997f, 0.984269f, 0.982542f, 0.980066f, 0.977092f, 0.974118f, 0.971621f, 0.969840f, 0.968058f, - 0.966366f, 0.965026f, 0.963687f, 0.962348f, 0.958809f, 0.955271f, 0.951732f, 0.947645f, 0.943422f, - 0.939198f, 0.936257f, 0.934171f, 0.932086f, 0.930008f, 0.927942f, 0.925876f, 0.923250f, 0.918385f, - 0.913521f, 0.908656f, 0.903702f, 0.898749f, 0.893795f, 0.891002f, 0.888749f, 0.886496f, 0.883996f, - 0.881331f, 0.878666f, 0.874814f, 0.869183f, 0.863553f, 0.858015f, 0.852851f, 0.847687f, 0.842523f, - 0.840022f, 0.837520f, 0.835019f, 0.831781f, 0.828359f, 0.824937f, 0.820011f, 0.814082f, 0.808153f, - 0.802713f, 0.798009f, 0.793305f, 0.789023f, 0.786429f, 0.783835f, 0.781241f, 0.777028f, 0.772815f, - 0.768602f, 0.763134f, 0.757353f, 0.751571f, 0.747112f, 0.743534f, 0.739956f, 0.736838f, 0.734410f, - 0.731982f, 0.729034f, 0.724009f, 0.718984f, 0.713959f, 0.708439f, 0.702918f, 0.697398f, 0.694412f, - 0.692061f, 0.689710f, 0.687330f, 0.684932f, 0.682534f, 0.678706f, 0.672732f, 0.666759f, 0.660939f, - 0.655737f, 0.650536f, 0.645334f, 0.644222f, 0.643110f, 0.641998f, 0.639788f, 0.637303f, 0.634818f, - 0.629683f, 0.622782f, 0.615880f, 0.609823f, 0.605032f, 0.600241f, 0.596372f, 0.596194f, 0.596015f, - 0.595837f, 0.592403f, 0.588969f, 0.585535f, 0.577842f, 0.569084f, 0.560326f, 0.553880f, 0.548977f, - 0.544074f, 0.541240f, 0.541511f, 0.541781f, 0.540837f, 0.535040f, 0.529243f, 0.523446f, 0.510870f, - 0.498293f, 0.485717f, 0.479851f, 0.475663f, 0.471475f, 0.473848f, 0.480595f, 0.487343f, 0.489727f, - 0.485566f, 0.481405f, 0.471747f, 0.440099f, 0.408451f, 0.376804f, 0.330744f, 0.284685f, 0.238626f, - 0.203638f, 0.171419f, 0.139199f, 0.126312f, 0.126312f -}; - -const float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC] = { - 1.112848f, 1.112848f, 1.110615f, 1.105033f, 1.099450f, 1.094384f, 1.091385f, 1.088385f, 1.085385f, - 1.087983f, 1.090582f, 1.093180f, 1.095717f, 1.098238f, 1.100758f, 1.100828f, 1.099264f, 1.097700f, - 1.095678f, 1.092969f, 1.090259f, 1.088138f, 1.088365f, 1.088592f, 1.088819f, 1.092533f, 1.096246f, - 1.099960f, 1.104778f, 1.109872f, 1.114967f, 1.118803f, 1.121802f, 1.124800f, 1.125950f, 1.124325f, - 1.122701f, 1.120550f, 1.116290f, 1.112030f, 1.107770f, 1.105148f, 1.102526f, 1.099904f, 1.098608f, - 1.097642f, 1.096677f, 1.094770f, 1.092237f, 1.089704f, 1.086740f, 1.083130f, 1.079521f, 1.076295f, - 1.074604f, 1.072914f, 1.071223f, 1.070018f, 1.068813f, 1.067608f, 1.064076f, 1.059963f, 1.055849f, - 1.051324f, 1.046525f, 1.041726f, 1.038407f, 1.037310f, 1.036213f, 1.035478f, 1.036191f, 1.036904f, - 1.037617f, 1.035535f, 1.033453f, 1.031372f, 1.028051f, 1.024421f, 1.020791f, 1.018470f, 1.017021f, - 1.015573f, 1.014440f, 1.013780f, 1.013121f, 1.012054f, 1.009357f, 1.006659f, 1.003962f, 1.001331f, - 0.998700f, 0.996070f, 0.995598f, 0.995666f, 0.995735f, 0.996091f, 0.996639f, 0.997188f, 0.997004f, - 0.995722f, 0.994439f, 0.993137f, 0.991758f, 0.990378f, 0.988998f, 0.988492f, 0.987987f, 0.987481f, - 0.985997f, 0.984269f, 0.982541f, 0.980065f, 0.977091f, 0.974118f, 0.971621f, 0.969841f, 0.968060f, - 0.966368f, 0.965029f, 0.963689f, 0.962350f, 0.958810f, 0.955270f, 0.951731f, 0.947643f, 0.943419f, - 0.939196f, 0.936255f, 0.934170f, 0.932086f, 0.930009f, 0.927943f, 0.925877f, 0.923251f, 0.918386f, - 0.913520f, 0.908655f, 0.903701f, 0.898748f, 0.893795f, 0.891001f, 0.888748f, 0.886495f, 0.883995f, - 0.881330f, 0.878665f, 0.874814f, 0.869184f, 0.863554f, 0.858016f, 0.852852f, 0.847687f, 0.842522f, - 0.840021f, 0.837520f, 0.835019f, 0.831781f, 0.828358f, 0.824936f, 0.820010f, 0.814081f, 0.808152f, - 0.802713f, 0.798009f, 0.793305f, 0.789024f, 0.786430f, 0.783837f, 0.781244f, 0.777029f, 0.772815f, - 0.768601f, 0.763133f, 0.757353f, 0.751572f, 0.747112f, 0.743534f, 0.739956f, 0.736837f, 0.734410f, - 0.731982f, 0.729034f, 0.724009f, 0.718984f, 0.713959f, 0.708439f, 0.702919f, 0.697399f, 0.694414f, - 0.692063f, 0.689712f, 0.687331f, 0.684932f, 0.682532f, 0.678704f, 0.672731f, 0.666759f, 0.660941f, - 0.655738f, 0.650534f, 0.645331f, 0.644220f, 0.643109f, 0.641999f, 0.639789f, 0.637304f, 0.634819f, - 0.629684f, 0.622783f, 0.615881f, 0.609824f, 0.605033f, 0.600242f, 0.596373f, 0.596194f, 0.596015f, - 0.595837f, 0.592403f, 0.588969f, 0.585535f, 0.577842f, 0.569083f, 0.560324f, 0.553879f, 0.548977f, - 0.544074f, 0.541241f, 0.541511f, 0.541781f, 0.540838f, 0.535041f, 0.529243f, 0.523446f, 0.510869f, - 0.498293f, 0.485717f, 0.479851f, 0.475663f, 0.471475f, 0.473848f, 0.480595f, 0.487343f, 0.489727f, - 0.485566f, 0.481405f, 0.471746f, 0.440098f, 0.408450f, 0.376802f, 0.330743f, 0.284685f, 0.238626f, - 0.203638f, 0.171419f, 0.139199f, 0.126311f, 0.126311f -}; -#else const Word32 defaultHRIR_coherence_48kHz_fx[LR_IAC_LENGTH_NR_FC] /*Q-27*/ = { 131936432,125285536,105934832,77097344,45729324,19356880,2523696,0,0, 0,1602425,4763253,5796595,5698884,5608690,5175704,3880368,2303444, @@ -1004,45 +486,9 @@ const Word32 defaultHRIR_right_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC] /*Q-23*/ 4073222,4038317,3957292,3691809,3426327,3160844,2774473,2388110,2001740, 1708239,1437966,1167685,1059573,1059573 }; -#endif // IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* * t-design and SN3D normalization table *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - /* SN3D norm */ -const float norm_sn3d_hoa3[16] = -{ - 1.f, 1.7320508f, 1.7320508f, 1.7320508f, 2.2360680f, 2.2360680f, 2.2360680f, 2.2360680f, - 2.2360680f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f, 2.6457512f -}; - -/* Order 11 t-design */ -const float t_design_11_azimuth[70] = -{ - 1.329273e+02f, -8.393495e+01f, 8.474100e+00f, -1.133408e+02f, -1.032659e+02f, -3.323704e+01f, 2.185643e+01f, -1.565395e+02f, - -6.426475e+01f, 1.657795e+02f, -2.520283e+01f, -9.700380e+01f, 2.785464e+01f, 1.532142e+02f, -1.550616e+02f, -1.184214e+01f, - 8.053873e+01f, -4.205616e+01f, -3.122333e+01f, 3.883790e+01f, 9.376069e+01f, -8.475602e+01f, 7.755368e+00f, -1.222769e+02f, - 4.680127e+01f, -2.476863e+01f, 9.989047e+01f, -1.347840e+02f, -8.308802e+01f, 6.012817e+01f, 1.526447e+02f, 2.975767e+01f, - 4.077932e+01f, 1.101839e+02f, 1.656521e+02f, -1.299266e+01f, 7.973599e+01f, -5.052453e+01f, 1.189239e+02f, 4.722029e+01f, - 1.719253e+02f, -6.251458e+01f, -1.111567e+01f, 1.320180e+02f, -1.353555e+02f, 1.023709e+02f, 1.127393e+02f, -1.783050e+02f, - -1.223199e+02f, 5.907635e+01f, 1.517042e+02f, 2.137634e+01f, -1.690055e+02f, 1.189808e+02f, -1.160893e+02f, 9.647679e+00f, - 6.089332e+01f, -1.560215e+02f, -6.346030e+01f, 1.749298e+02f, -1.752888e+02f, -1.059519e+02f, -5.019283e+01f, 1.313583e+02f, - -1.362968e+02f, 9.356446e+01f, -9.708401e+01f, -1.691583e+02f, -4.413238e+01f, 8.147954e+01f -}; - -const float t_design_11_elevation[70] = -{ - 7.692547e+00f, -2.373007e+01f, 2.351276e+01f, 7.042259e+01f, -9.896944e+00f, -7.075133e+01f, -2.646185e+01f, 4.777649e+01f, - -7.720470e+00f, 4.453436e+01f, 2.638979e+01f, -4.465789e+01f, 9.767035e+00f, -4.770533e+01f, 7.453029e+00f, -2.359012e+01f, - 2.371945e+01f, 7.043827e+01f, -9.835416e+00f, -7.049808e+01f, -2.629492e+01f, 4.761480e+01f, -7.517185e+00f, 4.428623e+01f, - 2.664426e+01f, -4.456937e+01f, 9.912719e+00f, -4.795996e+01f, 7.296799e+00f, -2.334460e+01f, 2.364153e+01f, 7.068431e+01f, - -9.581404e+00f, -7.039345e+01f, -2.642582e+01f, 4.775107e+01f, -7.308536e+00f, 4.426328e+01f, 2.671406e+01f, -4.431497e+01f, - 9.758997e+00f, -4.803619e+01f, 7.439651e+00f, -2.333261e+01f, 2.338690e+01f, 7.082191e+01f, -9.485964e+00f, -7.058019e+01f, - -2.667403e+01f, 4.799784e+01f, -7.382762e+00f, 4.449706e+01f, 2.650250e+01f, -4.424619e+01f, 9.518451e+00f, -4.782814e+01f, - 7.684274e+00f, -2.357068e+01f, 2.330745e+01f, 7.065865e+01f, -9.680889e+00f, -7.080268e+01f, -2.669635e+01f, 4.801363e+01f, - -7.637348e+00f, 4.466512e+01f, 2.630235e+01f, -4.445764e+01f, 9.523415e+00f, -4.762422e+01f -}; -#else /* SN3D norm (Fixed) */ const Word32 norm_sn3d_hoa3_int[16] = //Q29 { @@ -1076,12 +522,10 @@ const Word32 t_design_11_elevation_int[70] = //Q22 32230182, -98862600, 97758528, 296363872, -40604592, -296967968, -111972608, 201383760, -32033360, 187339088, 110320048, -186468864, 39944096, -199750464 }; -#endif /*----------------------------------------------------------------------* * Reverberator ROM tables *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED const Word32 ivas_reverb_default_fc_fx[IVAS_REVERB_DEFAULT_N_BANDS] /*Q16*/ = { 1310720 , 1638400 , 2064384 , 2621440 , 3276800 , @@ -1117,7 +561,6 @@ const Word32 ivas_reverb_default_DSR_fx[IVAS_REVERB_DEFAULT_N_BANDS] /*Q30*/ = 512, 292, 146, 117, 66, 30, 28 }; -#endif const float ivas_reverb_default_fc[IVAS_REVERB_DEFAULT_N_BANDS] = { @@ -1978,11 +1421,6 @@ const Word32 release_cnst_table[4][201] = // Q31 * Renderer SBA & MC enc/dec matrices *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/* CICP1 - Mono */ -const float ls_azimuth_CICP1[1] = { 0.0f }; -const float ls_elevation_CICP1[1] = { 0.0f }; -#endif /*----------------------------------------------------------------------------------* @@ -1990,7 +1428,6 @@ const float ls_elevation_CICP1[1] = { 0.0f }; *----------------------------------------------------------------------------------*/ /* All matrices are stored with dimensions nchan_in x nchan_out */ /* Downmix matrices */ -#ifdef IVAS_FLOAT_FIXED /* All matrices are stored with dimensions nchan_in x nchan_out */ /* Downmix matrices */ const Word32 ls_conversion_cicpX_mono_fx[12][1] = // Q30 @@ -2338,351 +1775,4 @@ const LS_CONVERSION_MAPPING_FX ls_conversion_mapping_fx[LS_SETUP_CONVERSION_NUM_ {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_7_1_4, ls_conversion_cicp16_cicp19_fx}, }; -#else -const float ls_conversion_cicpX_mono[12][1] = -{ - {1.00000000f}, - {1.00000000f}, - {1.00000000f}, - {1.00000000f}, - {0.79999995f}, - {0.79999995f}, - {0.79999995f}, - {0.79999995f}, - {0.849999964f}, - {0.849999964f}, - {0.849999964f}, - {0.849999964f} -}; - -const float ls_conversion_cicpX_stereo[12][2] = -{ - {1.00000000f, 0.00000000f}, - {0.00000000f, 1.00000000f}, - {0.70710677f, 0.70710677f}, - {0.70710677f, 0.70710677f}, - {0.79999995f, 0.00000000f}, - {0.00000000f, 0.79999995f}, - {0.79999995f, 0.00000000f}, - {0.00000000f, 0.79999995f}, - {0.849999964f, 0.000000000f}, - {0.000000000f, 0.849999964f}, - {0.849999964f, 0.000000000f}, - {0.000000000f, 0.849999964f} -}; -const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp6[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 6.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {7, 1.000000000f}, - {14, 1.000000000f}, - {21, 1.000000000f}, - {28, 1.000000000f}, - {35, 1.000000000f}, - {40, 1.000000000f}, - {47, 1.000000000f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp6[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 6.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {7, 1.000000000f}, - {14, 1.000000000f}, - {21, 1.000000000f}, - {28, 1.000000000f}, - {35, 1.000000000f}, - {36, 0.849999964f}, - {43, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp12[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {9, 1.000000000f}, - {18, 1.000000000f}, - {27, 1.000000000f}, - {36, 1.000000000f}, - {45, 1.000000000f}, - {48, 0.849999964f}, - {57, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp6[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {10, 6.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {7, 1.000000000f}, - {14, 1.000000000f}, - {21, 1.000000000f}, - {28, 1.000000000f}, - {35, 1.000000000f}, - {36, 0.849999964f}, - {43, 0.849999964f}, - {52, 0.849999964f}, - {59, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp12[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {10, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {9, 1.000000000f}, - {18, 1.000000000f}, - {27, 1.000000000f}, - {36, 1.000000000f}, - {45, 1.000000000f}, - {48, 0.849999964f}, - {57, 0.849999964f}, - {68, 0.849999964f}, - {77, 0.849999964f} - -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp14[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {10, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {9, 1.000000000f}, - {18, 1.000000000f}, - {27, 1.000000000f}, - {36, 1.000000000f}, - {45, 1.000000000f}, - {54, 1.000000000f}, - {63, 1.000000000f}, - {68, 0.849999964f}, - {77, 0.849999964f}, -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp6[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {14, 6.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {7, 1.000000000f}, - {14, 1.000000000f}, - {21, 1.000000000f}, - {28, 1.000000000f}, - {35, 1.000000000f}, - {36, 0.367322683f}, - {40, 0.930093586f}, - {43, 0.367322683f}, - {47, 0.930093586f}, - {48, 0.849999964f}, - {55, 0.849999964f}, - {64, 0.849999964f}, - {71, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp12[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {14, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {9, 1.000000000f}, - {18, 1.000000000f}, - {27, 1.000000000f}, - {38, 1.000000000f}, - {47, 1.000000000f}, - {48, 0.367322683f}, - {52, 0.930093586f}, - {57, 0.367322683f}, - {61, 0.930093586f}, - {64, 0.849999964f}, - {73, 0.849999964f}, - {84, 0.849999964f}, - {93, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp14[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {14, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {9, 1.000000000f}, - {18, 1.000000000f}, - {27, 1.000000000f}, - {36, 1.000000000f}, - {45, 1.000000000f}, - {48, 0.367322683f}, - {52, 0.930093586f}, - {57, 0.367322683f}, - {61, 0.930093586f}, - {70, 1.000000000f}, - {79, 1.000000000f}, - {84, 0.849999964f}, - {93, 0.849999964f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp19_cicp16[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {14, 10.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.000000000f}, - {11, 1.000000000f}, - {22, 1.000000000f}, - {33, 1.000000000f}, - {44, 1.000000000f}, - {55, 1.000000000f}, - {60, 0.367322683f}, - {64, 0.930093586f}, - {71, 0.367322683f}, - {75, 0.930093586f}, - {86, 1.000000000f}, - {97, 1.000000000f}, - {108, 1.000000000f}, - {119, 1.000000000f} -}; - -/* Upmix matrices */ -const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp14[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 8.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.0f}, - {9, 1.0f}, - {18, 1.0f}, - {27, 1.0f}, - {36, 1.0f}, - {45, 1.0f}, - {52, 1.0f}, - {61, 1.0f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp16[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 10.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.0f}, - {11, 1.0f}, - {22, 1.0f}, - {33, 1.0f}, - {44, 1.0f}, - {55, 1.0f}, - {64, 1.0f}, - {75, 1.0f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp12_cicp19[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 12.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.0f}, - {13, 1.0f}, - {26, 1.0f}, - {39, 1.0f}, - {54, 1.0f}, - {67, 1.0f}, - {76, 1.0f}, - {89, 1.0f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp14_cicp19[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {8, 12.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.0f}, - {13, 1.0f}, - {26, 1.0f}, - {39, 1.0f}, - {52, 1.0f}, - {65, 1.0f}, - {80, 1.0f}, - {93, 1.0f} -}; - -const LS_CONVERSION_MATRIX ls_conversion_cicp16_cicp19[] = -{ - /* First row indicates the number of non-zero elements and the number of matrix columns */ - {10, 12.0f}, - /* Index of non-zero element, value of non-zero element*/ - {0, 1.0f}, - {13, 1.0f}, - {26, 1.0f}, - {39, 1.0f}, - {52, 1.0f}, - {65, 1.0f}, - {80, 1.0f}, - {93, 1.0f}, - {106, 1.0f}, - {119, 1.0f} -}; - -/* - * Mapping table of input config : output config with corresponding matrix - * NULL indicates a 1:1 mapping of existing input channels to output channels ( used for upmix ) - */ - -const LS_CONVERSION_MAPPING ls_conversion_mapping[LS_SETUP_CONVERSION_NUM_MAPPINGS] = -{ - /* Dowmix mappings - NULL is a special case for MONO / STEREO downmix */ - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_MONO, NULL}, - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_MONO, NULL}, - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_MONO, NULL}, - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_MONO, NULL}, - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_MONO, NULL}, - - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_STEREO, NULL}, - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_STEREO, NULL}, - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_STEREO, NULL}, - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_STEREO, NULL}, - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_STEREO, NULL}, - - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_5_1, ls_conversion_cicp12_cicp6}, - - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_5_1, ls_conversion_cicp14_cicp6}, - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_7_1, ls_conversion_cicp14_cicp12}, - - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_5_1, ls_conversion_cicp16_cicp6}, - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_7_1, ls_conversion_cicp16_cicp12}, - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_5_1_2, ls_conversion_cicp16_cicp14}, - - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_5_1, ls_conversion_cicp19_cicp6}, - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_7_1, ls_conversion_cicp19_cicp12}, - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_5_1_2, ls_conversion_cicp19_cicp14}, - {IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_5_1_4, ls_conversion_cicp19_cicp16}, - - /* Upmix mappings - NULL implies a 1:1 upmix */ - {IVAS_AUDIO_CONFIG_STEREO, IVAS_AUDIO_CONFIG_5_1, NULL}, - {IVAS_AUDIO_CONFIG_STEREO, IVAS_AUDIO_CONFIG_7_1, NULL}, - {IVAS_AUDIO_CONFIG_STEREO, IVAS_AUDIO_CONFIG_5_1_2, NULL}, - {IVAS_AUDIO_CONFIG_STEREO, IVAS_AUDIO_CONFIG_5_1_4, NULL}, - {IVAS_AUDIO_CONFIG_STEREO, IVAS_AUDIO_CONFIG_7_1_4, NULL}, - - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_7_1, NULL}, - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_5_1_2, NULL}, - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_5_1_4, NULL}, - {IVAS_AUDIO_CONFIG_5_1, IVAS_AUDIO_CONFIG_7_1_4, NULL}, - - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_5_1_2, ls_conversion_cicp12_cicp14}, - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_5_1_4, ls_conversion_cicp12_cicp16}, - {IVAS_AUDIO_CONFIG_7_1, IVAS_AUDIO_CONFIG_7_1_4, ls_conversion_cicp12_cicp19}, - - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_5_1_4, NULL}, - {IVAS_AUDIO_CONFIG_5_1_2, IVAS_AUDIO_CONFIG_7_1_4, ls_conversion_cicp14_cicp19}, - - {IVAS_AUDIO_CONFIG_5_1_4, IVAS_AUDIO_CONFIG_7_1_4, ls_conversion_cicp16_cicp19}, -}; -#endif /* clang-format on */ diff --git a/lib_rend/ivas_rom_rend.h b/lib_rend/ivas_rom_rend.h index ff45a7955..c80fab8ce 100644 --- a/lib_rend/ivas_rom_rend.h +++ b/lib_rend/ivas_rom_rend.h @@ -42,37 +42,20 @@ * DirAC renderer ROM tables *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float ls_azimuth_4d4[8]; -extern const float ls_elevation_4d4[8]; -extern const float diffuse_response_CICP6[5]; -extern const float diffuse_response_CICP14[7]; -extern const float diffuse_response_CICP16[9]; -#else -extern const Word32 ls_azimuth_4d4_fx[8]; /*Q-22*/ -extern const Word32 ls_elevation_4d4_fx[8]; /*Q-22*/ -extern const Word16 diffuse_response_CICP6_fx[5]; /*Q-15*/ -extern const Word16 diffuse_response_CICP14_fx[7]; /*Q-15*/ -extern const Word16 diffuse_response_CICP16_fx[9]; /*Q-15*/ -#endif +extern const Word32 ls_azimuth_4d4_fx[8]; /*Q-22*/ +extern const Word32 ls_elevation_4d4_fx[8]; /*Q-22*/ +extern const Word16 diffuse_response_CICP6_fx[5]; /*Q-15*/ +extern const Word16 diffuse_response_CICP14_fx[7]; /*Q-15*/ +extern const Word16 diffuse_response_CICP16_fx[9]; /*Q-15*/ extern const Word16 ap_pre_delay[DIRAC_DECORR_NUM_SPLIT_BANDS]; extern const Word16 ap_filter_length[DIRAC_DECORR_NUM_SPLIT_BANDS]; -#ifndef IVAS_FLOAT_FIXED -extern const float ap_lattice_delta_phi[DIRAC_MAX_NUM_DECORR_FILTERS * DIRAC_MAX_DECORR_FILTER_LEN]; -extern const float ap_lattice_coeffs_1[DIRAC_DECORR_FILTER_LEN_1 * DIRAC_MAX_NUM_DECORR_FILTERS]; -extern const float ap_lattice_coeffs_2[DIRAC_DECORR_FILTER_LEN_2 * DIRAC_MAX_NUM_DECORR_FILTERS]; -extern const float ap_lattice_coeffs_3[DIRAC_DECORR_FILTER_LEN_3 * DIRAC_MAX_NUM_DECORR_FILTERS]; -extern const float *const ap_lattice_coeffs[DIRAC_DECORR_NUM_SPLIT_BANDS]; -extern const float ap_split_frequencies[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]; -#else extern const Word16 ap_lattice_delta_phi_fx[DIRAC_MAX_NUM_DECORR_FILTERS * DIRAC_MAX_DECORR_FILTER_LEN]; /*Q-14*/ extern const Word16 ap_lattice_coeffs_1_fx[DIRAC_DECORR_FILTER_LEN_1 * DIRAC_MAX_NUM_DECORR_FILTERS]; /*Q-15*/ extern const Word16 ap_lattice_coeffs_2_fx[DIRAC_DECORR_FILTER_LEN_2 * DIRAC_MAX_NUM_DECORR_FILTERS]; /*Q-15*/ extern const Word16 ap_lattice_coeffs_3_fx[DIRAC_DECORR_FILTER_LEN_3 * DIRAC_MAX_NUM_DECORR_FILTERS]; /*Q-15*/ extern const Word16 *const ap_lattice_coeffs_fx[DIRAC_DECORR_NUM_SPLIT_BANDS]; extern const Word16 ap_split_frequencies_fx[DIRAC_DECORR_NUM_SPLIT_BANDS + 1]; /*Q-14*/ -#endif extern const Word16 sba_map_tc[11]; /*Q-0*/ extern const Word16 sba_map_tc_512[11]; /*Q-0*/ @@ -87,21 +70,6 @@ extern const Word16 channelIndex_CICP14[7]; /*Q-0*/ extern const Word16 channelIndex_CICP16[9]; /*Q-0*/ extern const Word16 channelIndex_CICP19[11]; /*Q-0*/ -#ifndef IVAS_FLOAT_FIXED -/* These are equalization values for spread and surround coherent sounds, approximating the spectrum - * for such sounds at anechoic multichannel listening. */ -extern const float surCohEne[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; -extern const float spreadCohEne05[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; -extern const float spreadCohEne1[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; - -/* Values for low-bit-rate equalization */ -extern const float lowBitRateBinauralEQ[LOW_BIT_RATE_BINAURAL_EQ_BINS]; - -/* Diffuse field binaural coherence directional adjustment values */ -extern const float diffuseFieldCoherenceDifferenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS]; -extern const float diffuseFieldCoherenceDifferenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS]; -extern const float diffuseFieldCoherenceDifferenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS]; -#else /* These are equalization values for spread and surround coherent sounds, approximating the spectrum * for such sounds at anechoic multichannel listening. */ extern const Word16 surCohEne_fx[MASA_NUM_DEFINED_SUR_SPR_COH_ENE_BINS]; /*Q-13*/ @@ -115,7 +83,6 @@ extern const Word32 lowBitRateBinauralEQ_fx[LOW_BIT_RATE_BINAURAL_EQ_BINS]; /*Q- extern const Word32 diffuseFieldCoherenceDifferenceX_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; /*Q-31*/ extern const Word32 diffuseFieldCoherenceDifferenceY_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; /*Q-31*/ extern const Word32 diffuseFieldCoherenceDifferenceZ_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; /*Q-31*/ -#endif // IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* @@ -124,22 +91,6 @@ extern const Word32 diffuseFieldCoherenceDifferenceZ_fx[BINAURAL_COHERENCE_DIFFE extern const Word16 HRTF_MODEL_N_CPTS_VAR[HRTF_MODEL_N_SECTIONS]; -#ifndef IVAS_FLOAT_FIXED -extern const float SincTable[321]; - -extern const float defaultHRIR_coherence_48kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_left_avg_power_48kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_right_avg_power_48kHz[LR_IAC_LENGTH_NR_FC]; - -extern const float defaultHRIR_coherence_32kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_left_avg_power_32kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_right_avg_power_32kHz[LR_IAC_LENGTH_NR_FC]; - -extern const float defaultHRIR_coherence_16kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_left_avg_power_16kHz[LR_IAC_LENGTH_NR_FC]; -extern const float defaultHRIR_right_avg_power_16kHz[LR_IAC_LENGTH_NR_FC]; - -#else extern const Word32 SincTable_fx[321]; extern const Word32 defaultHRIR_coherence_48kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-27*/ @@ -153,34 +104,22 @@ extern const Word32 defaultHRIR_right_avg_power_32kHz_fx[LR_IAC_LENGTH_NR_FC]; / extern const Word32 defaultHRIR_coherence_16kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-27*/ extern const Word32 defaultHRIR_left_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/ extern const Word32 defaultHRIR_right_avg_power_16kHz_fx[LR_IAC_LENGTH_NR_FC]; /*Q-23*/ -#endif // IVAS_FLOAT_FIXED /*----------------------------------------------------------------------------------* * t-design and SN3D normalization table *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -/* SN3D norm */ -extern const float norm_sn3d_hoa3[16]; - -/* Order 11 t-design */ -extern const float t_design_11_azimuth[70]; -extern const float t_design_11_elevation[70]; -#else /* SN3D norm (Fixed) */ extern const Word32 norm_sn3d_hoa3_int[16]; /*Q-29*/ /* Order 11 t-design (Fixed) */ -extern const Word32 t_design_11_azimuth_int[70]; /*Q-22*/ -extern const Word32 t_design_11_elevation_int[70]; /*Q-22*/ -#endif +extern const Word32 t_design_11_azimuth_int[70]; /*Q-22*/ +extern const Word32 t_design_11_elevation_int[70]; /*Q-22*/ /*----------------------------------------------------------------------* * Reverberator ROM tables *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED extern const Word32 ivas_reverb_default_fc_fx[]; /*Q-16*/ extern const Word32 ivas_reverb_default_RT60_fx[]; /*Q-26*/ extern const Word32 ivas_reverb_default_DSR_fx[]; /*Q-30*/ -#endif extern const float ivas_reverb_default_fc[]; extern const float ivas_reverb_default_RT60[]; @@ -191,29 +130,17 @@ extern const Word32 release_cnst_table[4][201]; // Q31 /*----------------------------------------------------------------------------------* * Renderer SBA & MC enc/dec matrices *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -extern const float ls_azimuth_CICP1[1]; -extern const float ls_elevation_CICP1[1]; -#endif /*----------------------------------------------------------------------------------* * LS Configuration Converter ROM tables *----------------------------------------------------------------------------------*/ /* Downmix matrices */ -#ifndef IVAS_FLOAT_FIXED -extern const float ls_conversion_cicpX_mono[12][1]; -extern const float ls_conversion_cicpX_stereo[12][2]; - -/* Mapping table of input config : output config with corresponding matrix */ -extern const LS_CONVERSION_MAPPING ls_conversion_mapping[]; -#else extern const Word32 ls_conversion_cicpX_mono_fx[12][1]; /*Q-30*/ extern const Word32 ls_conversion_cicpX_stereo_fx[12][2]; /*Q-30*/ /* Mapping table of input config : output config with corresponding matrix */ extern const LS_CONVERSION_MAPPING_FX ls_conversion_mapping_fx[]; -#endif #endif /* IVAS_ROM_REND_H */ diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index e68653484..758d787b1 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -40,7 +40,6 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include #include "prot_fx.h" #include "ivas_prot_fx.h" @@ -82,7 +81,6 @@ Word16 square_root30_q12[31] = { 22058, 22435, }; -#endif /*-----------------------------------------------------------------------* * Local funtion declarations *-----------------------------------------------------------------------*/ @@ -92,32 +90,19 @@ static ivas_error combine_external_and_head_orientations( IVAS_VECTOR3 *listenerPos, EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData ); -#ifndef IVAS_FLOAT_FIXED -static void external_target_interpolation( - EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, - const int16_t i ); -#else static void external_target_interpolation_fx( EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, const Word16 i ); -#endif -#ifndef IVAS_FLOAT_FIXED -static bool are_orientations_same( const IVAS_QUATERNION *orientation1, const IVAS_QUATERNION *orientation2 ); -#endif -#ifdef IVAS_FLOAT_FIXED static bool are_orientations_same_fx( const IVAS_QUATERNION *orientation1, const IVAS_QUATERNION *orientation2 ); -#endif /*-----------------------------------------------------------------------* * ivas_headTrack_open() * * Allocate and initialize Head-Tracking handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_headTrack_open_fx( HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ ) @@ -164,50 +149,6 @@ ivas_error ivas_headTrack_open_fx( return IVAS_ERR_OK; } -#else -ivas_error ivas_headTrack_open( - HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* o : head track handle */ -) -{ - int16_t i; - ivas_error error; - - /* Allocate Head-Tracking handle */ - if ( ( *hHeadTrackData = (HEAD_TRACK_DATA_HANDLE) malloc( sizeof( HEAD_TRACK_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for head-tracking memory\n" ) ); - } - - /* Initialization */ - ( *hHeadTrackData )->lrSwitchInterpVal = 0.0f; - ( *hHeadTrackData )->lrSwitchedCurrent = 0; - ( *hHeadTrackData )->lrSwitchedNext = 0; - if ( ( ( *hHeadTrackData )->OrientationTracker = (ivas_orient_trk_state_t *) malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" ); - } - - if ( ( error = ivas_orient_trk_Init( ( *hHeadTrackData )->OrientationTracker ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Initialise Rmat_prev to I, Rmat will be computed later */ - for ( i = 0; i < 3; i++ ) - { - set_zero( ( *hHeadTrackData )->Rmat_prev[i], 3 ); - ( *hHeadTrackData )->Rmat_prev[i][i] = 1.0f; - } - - - set_zero( ( *hHeadTrackData )->chEneIIR[0], MASA_FREQUENCY_BANDS ); - set_zero( ( *hHeadTrackData )->chEneIIR[1], MASA_FREQUENCY_BANDS ); - set_zero( ( *hHeadTrackData )->procChEneIIR[0], MASA_FREQUENCY_BANDS ); - set_zero( ( *hHeadTrackData )->procChEneIIR[1], MASA_FREQUENCY_BANDS ); - - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------* @@ -215,7 +156,6 @@ ivas_error ivas_headTrack_open( * * Deallocate Head-Tracking handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_headTrack_close_fx( HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* i/o: head track handle */ ) @@ -237,28 +177,6 @@ void ivas_headTrack_close_fx( return; } -#else -void ivas_headTrack_close( - HEAD_TRACK_DATA_HANDLE *hHeadTrackData /* i/o: head track handle */ -) -{ - if ( hHeadTrackData == NULL || *hHeadTrackData == NULL ) - { - return; - } - - if ( ( *hHeadTrackData )->OrientationTracker != NULL ) - { - free( ( *hHeadTrackData )->OrientationTracker ); - ( *hHeadTrackData )->OrientationTracker = NULL; - } - - free( ( *hHeadTrackData ) ); - *hHeadTrackData = NULL; - - return; -} -#endif /*---------------------------------------------------------------------------------- * QuatToRotMat() @@ -266,7 +184,6 @@ void ivas_headTrack_close( * Quaternion handling: calculate rotation matrices in real-space and SHD *---------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void QuatToRotMat_fx( const IVAS_QUATERNION quat, /* i : quaternion describing the rotation Qx */ Word32 Rmat[3][3] /* o : real-space rotation matrix for this rotation 2*Qx-32 */ @@ -320,56 +237,7 @@ void QuatToRotMat_fx( return; } -#else -void QuatToRotMat( - const IVAS_QUATERNION quat, /* i : quaternion describing the rotation */ - float Rmat[3][3] /* o : real-space rotation matrix for this rotation */ -) -{ - Rmat[0][0] = quat.w * quat.w + quat.x * quat.x - quat.y * quat.y - quat.z * quat.z; - Rmat[0][1] = 2.0f * ( quat.x * quat.y - quat.w * quat.z ); - Rmat[0][2] = 2.0f * ( quat.x * quat.z + quat.w * quat.y ); - - Rmat[1][0] = 2.0f * ( quat.x * quat.y + quat.w * quat.z ); - Rmat[1][1] = quat.w * quat.w - quat.x * quat.x + quat.y * quat.y - quat.z * quat.z; - Rmat[1][2] = 2.0f * ( quat.y * quat.z - quat.w * quat.x ); - - Rmat[2][0] = 2.0f * ( quat.x * quat.z - quat.w * quat.y ); - Rmat[2][1] = 2.0f * ( quat.y * quat.z + quat.w * quat.x ); - Rmat[2][2] = quat.w * quat.w - quat.x * quat.x - quat.y * quat.y + quat.z * quat.z; - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * Euler2Quat() - * - * Calculate corresponding Quaternion from Euler angles in radians - *------------------------------------------------------------------------*/ - -void Euler2Quat( - const float yaw, /* i : yaw (x) */ - const float pitch, /* i : pitch (y) */ - const float roll, /* i : roll (z) */ - IVAS_QUATERNION *quat /* o : quaternion describing the rotation */ -) -{ - float cr = cosf( roll * 0.5f ); - float sr = sinf( roll * 0.5f ); - float cp = cosf( pitch * 0.5f ); - float sp = sinf( pitch * 0.5f ); - float cy = cosf( yaw * 0.5f ); - float sy = sinf( yaw * 0.5f ); - quat->w = cr * cp * cy + sr * sp * sy; - quat->x = sr * cp * cy - cr * sp * sy; - quat->y = sr * cp * sy + cr * sp * cy; - quat->z = cr * cp * sy - sr * sp * cy; - return; -} -#else void Euler2Quat_fx( const Word32 yaw, /* i : yaw (x) Q22 */ @@ -395,7 +263,6 @@ void Euler2Quat_fx( return; } -#endif /*------------------------------------------------------------------------- @@ -403,22 +270,6 @@ void Euler2Quat_fx( * * Converts degrees to normalized radians *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float deg2rad( - float degrees ) -{ - while ( degrees >= 180.0f ) - { - degrees = degrees - 360.0f; - } - while ( degrees <= -180.0f ) - { - degrees = degrees + 360.0f; - } - - return PI_OVER_180 * degrees; -} -#else Word32 deg2rad_fx( Word32 degrees // Q23 ) @@ -434,29 +285,12 @@ Word32 deg2rad_fx( return Mpy_32_32( PI_OVER_180_FX, degrees ); // Q23 } -#endif /*------------------------------------------------------------------------- * rad2deg() * * Converts normalized radians to degrees *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -float rad2deg( - float radians ) -{ - while ( radians >= EVS_PI ) - { - radians = radians - EVS_PI; - } - while ( radians <= -EVS_PI ) - { - radians = radians + EVS_PI; - } - - return _180_OVER_PI * radians; -} -#else Word32 rad2deg_fx( Word32 radians // Q13 ) @@ -473,8 +307,6 @@ Word32 rad2deg_fx( return W_extract_l( W_mult0_32_32( radians, _180_OVER_PI_FX ) ); // Q23 } -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * rotateAziEle() * @@ -862,58 +694,7 @@ void rotateAziEle_fixed( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * rotateAziEle() - * - * Apply rotation to direction parameters azimuth and elevation - *------------------------------------------------------------------------*/ - -void rotateAziEle( - float azi_in, /* i : output elevation */ - float ele_in, /* i : input elevation */ - int16_t *azi, /* o : rotated azimuth */ - int16_t *ele, /* o : rotated elevation */ - float Rmat[3][3], /* i : real-space rotation matrix */ - const int16_t isPlanar /* i : is rotation planar and elevation meaningless? */ -) -{ - int16_t n; - float dv[3], dv_r[3]; - float w; - - /*Conversion spherical to cartesian coordinates*/ - w = cosf( ele_in * PI_OVER_180 ); - dv[0] = w * cosf( azi_in * PI_OVER_180 ); - dv[1] = w * sinf( azi_in * PI_OVER_180 ); - dv[2] = sinf( ele_in * PI_OVER_180 ); - - /*Rotation mtx multiplication*/ - for ( n = 0; n < 3; n++ ) - { - dv_r[n] = Rmat[n][0] * dv[0] + Rmat[n][1] * dv[1] + Rmat[n][2] * dv[2]; - } - // float inter, inter1, inter2; - // inter = atan2f( dv_r[1], dv_r[0] ); - // inter1 = min( 180.0f, atan2f( dv_r[1], dv_r[0] ) * _180_OVER_PI ); - // inter2 = max( -180.0f, min( 180.0f, atan2f( dv_r[1], dv_r[0] ) * _180_OVER_PI ) ); - /*Conversion cartesian to spherical coordinates*/ - *azi = (int16_t) roundf( max( -180.0f, min( 180.0f, atan2f( dv_r[1], dv_r[0] ) * _180_OVER_PI ) ) ); - if ( isPlanar == 0 ) - { - *ele = (int16_t) roundf( max( -90.0f, min( 90.0f, atan2f( dv_r[2], sqrtf( dv_r[0] * dv_r[0] + dv_r[1] * dv_r[1] ) ) * _180_OVER_PI ) ) ); - } - else - { - *ele = 0; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * rotateFrame_shd() * @@ -1046,113 +827,6 @@ void rotateFrame_shd( return; } -#else -/*------------------------------------------------------------------------- - * rotateFrame_shd() - * - * Apply rotation to signals in Spherical Harmonic Domain - *------------------------------------------------------------------------*/ - -void rotateFrame_shd( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : head and external orientation combined handle */ - float *output[], /* i/o: unrotated HOA3 signal buffer in TD */ - const int16_t subframe_len, /* i : subframe length per channel */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ - const int16_t subframe_idx /* i : subframe index */ -) -{ - int16_t i, l, n, m; - int16_t m1, m2; - int16_t shd_rot_max_order; - - float tmp; - float tmpRot[2 * HEADROT_ORDER + 1]; - float SHrotmat_prev[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - float cross_fade[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - - shd_rot_max_order = hTransSetup.ambisonics_order; - - tmp = 1.0f / ( subframe_len - 1 ); - for ( i = 0; i < subframe_len; i++ ) - { - cross_fade[i] = i * tmp; - } - - /* initialize rotation matrices with zeros */ - for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) - { - set_zero( SHrotmat_prev[i], HEADROT_SHMAT_DIM ); - set_zero( SHrotmat[i], HEADROT_SHMAT_DIM ); - } - - /* calculate ambisonics rotation matrices for the previous and current frames */ - SHrotmatgen( SHrotmat_prev, hCombinedOrientationData->Rmat_prev, shd_rot_max_order ); - - SHrotmatgen( SHrotmat, hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx], shd_rot_max_order ); - - for ( i = 0; i < subframe_len; i++ ) - { - /*As the rotation matrix becomes block diagonal in a SH basis, we can - apply each angular-momentum block individually to save complexity. */ - - /* loop over l blocks */ - m1 = 1; - m2 = 4; - for ( l = 1; l <= shd_rot_max_order; l++ ) - { - /* compute mtx-vector product for this l */ - for ( n = m1; n < m2; n++ ) - { - tmpRot[n - m1] = 0.f; - - for ( m = m1; m < m2; m++ ) - { - /* crossfade with previous rotation gains */ - tmpRot[n - m1] += cross_fade[i] * SHrotmat[n][m] * output[m][subframe_idx * subframe_len + i] + ( 1 - cross_fade[i] ) * SHrotmat_prev[n][m] * output[m][subframe_idx * subframe_len + i]; - } - } - - /* write back the result */ - for ( n = m1; n < m2; n++ ) - { - output[n][subframe_idx * subframe_len + i] = tmpRot[n - m1]; - } - m1 = m2; - m2 += 2 * ( l + 1 ) + 1; - } - - /* unoptimized code for reference (full matrix multiplication) - for ( n = 0; n < nchan; n++ ) - { - tmpRot[n] = 0.f; - - for ( m = 0; m < nchan; m++ ) - { - tmpRot[n] += SHrotmat[n][m] * output[m][i]; - } - } - for ( n = 0; n < nchan; n++ ) - { - output[n][i] = tmpRot[n]; - } - */ - } - - /* move Rmat to Rmat_prev */ - for ( i = 0; i < 3; i++ ) - { - mvr2r( - hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx][i], - hCombinedOrientationData->Rmat_prev[i], - 3 ); - } - - return; -} - -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * rotateFrame_sd() * @@ -1352,204 +1026,69 @@ void rotateFrame_sd( pop_wmops(); return; } -#else /*------------------------------------------------------------------------- - * rotateFrame_sd() + * rotateFrame_shd_cldfb() * - * Apply rotation to signals in Spatial Domain + * Apply rotation to signals in Spherical Harmonic Domain and in CLDFB *------------------------------------------------------------------------*/ - -void rotateFrame_sd( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : head and external orientation combined handle */ - float *output[], /* i/o: unrotated SD signal buffer in TD */ - const int16_t subframe_len, /* i : subframe length per channel */ - const IVAS_OUTPUT_SETUP hTransSetup, /* i : format for rotation */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - const int16_t subframe_idx /* i : subframe index */ +void rotateFrame_shd_cldfb( + Word32 Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part Qx -> Qx-1 */ + Word32 Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part Qx -> Qx-1 */ + Word32 Rmat[3][3], /* i : real-space rotation matrix Q30 */ + const Word16 nInChannels, /* i : number of channels */ + const Word16 numTimeSlots, /* i : number of time slots to process */ + const Word16 shd_rot_max_order /* i : split-order rotation method */ ) { - int16_t i, j; - int16_t nchan, index_lfe; - int16_t ch_in, ch_in_woLFE, ch_out, ch_out_woLFE; - int16_t azimuth, elevation; - - float tmp; - float tmp_gains[MAX_CICP_CHANNELS - 1]; - float gains[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; - float gains_prev[MAX_CICP_CHANNELS][MAX_CICP_CHANNELS]; - float output_tmp[MAX_CICP_CHANNELS][L_FRAME48k]; - float cross_fade[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; - push_wmops( "rotateFrame_sd" ); - - nchan = hTransSetup.nchan_out_woLFE + hTransSetup.num_lfe; - index_lfe = hTransSetup.index_lfe[0]; + Word16 n = 0; + Word16 m = 0; + Word16 i = 0, j = 0, k = 0; + Word16 iBand = 0; + Word16 l = 0, m1 = 0, m2 = 0; + Word32 realRot[2 * HEADROT_ORDER + 1], imagRot[2 * HEADROT_ORDER + 1]; + Word16 SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; + Word32 temp1, temp2; + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); + assert( nInChannels == HEADROT_SHMAT_DIM && "Number of channels must be 16!" ); - tmp = 1.0f / ( subframe_len - 1 ); - for ( i = 0; i < subframe_len; i++ ) + /* initialize rotation matrices with zeros */ + FOR( i = 0; i < HEADROT_SHMAT_DIM; i++ ) { - cross_fade[i] = i * tmp; + set16_fx( SHrotmat[i], 0, HEADROT_SHMAT_DIM ); } - for ( ch_in = 0; ch_in < nchan; ch_in++ ) - { - /* zero output and gain buffers */ - set_zero( &output_tmp[ch_in][subframe_idx * subframe_len], subframe_len ); - set_zero( gains_prev[ch_in], nchan ); - set_zero( gains[ch_in], nchan ); + /* calculate Ambisonics rotation matrix from the quaternion */ + SHrotmatgen_fx( SHrotmat, Rmat, shd_rot_max_order ); - /* set gains to passthrough by default */ - gains_prev[ch_in][ch_in] = 1.0f; - gains[ch_in][ch_in] = 1.0f; +#ifdef DEBUGGING + dbgwrite_txt( (const float *) SHrotmat[0], HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); +#endif - /* skip LFE */ - if ( ch_in == index_lfe ) + /* rotation by mtx multiplication */ + FOR( i = 0; i < numTimeSlots; i++ ) + { + FOR( iBand = 0; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) { - continue; - } - - /* input channel index without LFE */ - ch_in_woLFE = ( ch_in >= index_lfe ) ? ch_in - 1 : ch_in; - - /* gains for previous subframe rotation */ - rotateAziEle( hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], &azimuth, &elevation, hCombinedOrientationData->Rmat_prev, hTransSetup.is_planar_setup ); + /*As the rotation matrix becomes block diagonal in a SH basis, we can + apply each angular-momentum block individually to save complexity. */ - if ( hEFAPdata != NULL && ( hTransSetup.ls_azimuth[ch_in_woLFE] != azimuth || hTransSetup.ls_elevation[ch_in_woLFE] != elevation ) ) - { - efap_determine_gains( hEFAPdata, tmp_gains, azimuth, elevation, EFAP_MODE_EFAP ); - for ( ch_out = 0; ch_out < nchan; ch_out++ ) + /* loop over l blocks */ + m1 = 1; + move16(); + m2 = 4; + move16(); + FOR( l = 1; l <= shd_rot_max_order; l++ ) { - /* skip LFE */ - if ( ch_out == index_lfe ) - { - continue; - } - - /* output channel index without LFE */ - ch_out_woLFE = ( ch_out >= index_lfe ) ? ch_out - 1 : ch_out; - - gains_prev[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; - } - } - - /* gains for current subframe rotation */ - rotateAziEle( hTransSetup.ls_azimuth[ch_in_woLFE], hTransSetup.ls_elevation[ch_in_woLFE], &azimuth, &elevation, hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx], hTransSetup.is_planar_setup ); - - if ( hEFAPdata != NULL && ( hTransSetup.ls_azimuth[ch_in_woLFE] != azimuth || hTransSetup.ls_elevation[ch_in_woLFE] != elevation ) ) - { - efap_determine_gains( hEFAPdata, tmp_gains, azimuth, elevation, EFAP_MODE_EFAP ); - - for ( ch_out = 0; ch_out < nchan; ch_out++ ) - { - /* skip LFE */ - if ( ch_out == index_lfe ) - { - continue; - } - - /* output channel index without LFE */ - ch_out_woLFE = ( ch_out >= index_lfe ) ? ch_out - 1 : ch_out; - - gains[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; - } - } - } - - /* apply panning gains by mtx multiplication */ - for ( ch_out = 0; ch_out < nchan; ch_out++ ) - { - for ( ch_in = 0; ch_in < nchan; ch_in++ ) - { - /* crossfade with previous rotation gains */ - for ( i = subframe_idx * subframe_len, j = 0; j < subframe_len; i++, j++ ) - { - output_tmp[ch_out][i] += ( cross_fade[j] ) * gains[ch_in][ch_out] * output[ch_in][i] + ( 1 - cross_fade[j] ) * gains_prev[ch_in][ch_out] * output[ch_in][i]; - } - } - } - - /* move Rmat to Rmat_prev */ - for ( i = 0; i < 3; i++ ) - { - mvr2r( - hCombinedOrientationData->Rmat[hCombinedOrientationData->subframe_idx][i], - hCombinedOrientationData->Rmat_prev[i], - 3 ); - } - - /* copy to output */ - for ( ch_out = 0; ch_out < nchan; ch_out++ ) - { - mvr2r( &output_tmp[ch_out][subframe_idx * subframe_len], &output[ch_out][subframe_idx * subframe_len], subframe_len ); - } - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * rotateFrame_shd_cldfb() - * - * Apply rotation to signals in Spherical Harmonic Domain and in CLDFB - *------------------------------------------------------------------------*/ -void rotateFrame_shd_cldfb( - Word32 Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part Qx -> Qx-1 */ - Word32 Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part Qx -> Qx-1 */ - Word32 Rmat[3][3], /* i : real-space rotation matrix Q30 */ - const Word16 nInChannels, /* i : number of channels */ - const Word16 numTimeSlots, /* i : number of time slots to process */ - const Word16 shd_rot_max_order /* i : split-order rotation method */ -) -{ - Word16 n = 0; - Word16 m = 0; - Word16 i = 0, j = 0, k = 0; - Word16 iBand = 0; - Word16 l = 0, m1 = 0, m2 = 0; - Word32 realRot[2 * HEADROT_ORDER + 1], imagRot[2 * HEADROT_ORDER + 1]; - Word16 SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - Word32 temp1, temp2; - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - move16(); - assert( nInChannels == HEADROT_SHMAT_DIM && "Number of channels must be 16!" ); - - /* initialize rotation matrices with zeros */ - FOR( i = 0; i < HEADROT_SHMAT_DIM; i++ ) - { - set16_fx( SHrotmat[i], 0, HEADROT_SHMAT_DIM ); - } - - /* calculate Ambisonics rotation matrix from the quaternion */ - SHrotmatgen_fx( SHrotmat, Rmat, shd_rot_max_order ); - -#ifdef DEBUGGING - dbgwrite_txt( (const float *) SHrotmat[0], HEADROT_SHMAT_DIM * HEADROT_SHMAT_DIM, "Fixed_SHrotmat.txt", NULL ); -#endif - - /* rotation by mtx multiplication */ - FOR( i = 0; i < numTimeSlots; i++ ) - { - FOR( iBand = 0; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) - { - /*As the rotation matrix becomes block diagonal in a SH basis, we can - apply each angular-momentum block individually to save complexity. */ - - /* loop over l blocks */ - m1 = 1; - move16(); - m2 = 4; - move16(); - FOR( l = 1; l <= shd_rot_max_order; l++ ) - { - /* compute mtx-vector product for this l */ - FOR( n = m1; n < m2; n++ ) + /* compute mtx-vector product for this l */ + FOR( n = m1; n < m2; n++ ) { realRot[n - m1] = 0; move32(); @@ -1611,208 +1150,6 @@ void rotateFrame_shd_cldfb( } return; } -#else -/*------------------------------------------------------------------------- - * rotateFrame_shd_cldfb() - * - * Apply rotation to signals in Spherical Harmonic Domain and in CLDFB - *------------------------------------------------------------------------*/ - -void rotateFrame_shd_cldfb( - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ - float Rmat[3][3], /* i : real-space rotation matrix */ - const int16_t nInChannels, /* i : number of channels */ - const int16_t numTimeSlots, /* i : number of time slots to process */ - const int16_t shd_rot_max_order /* i : split-order rotation method */ -) -{ - int16_t n = 0; - int16_t m = 0; - int16_t i = 0; - int16_t iBand = 0; - int16_t l = 0, m1 = 0, m2 = 0; - float realRot[2 * HEADROT_ORDER + 1], imagRot[2 * HEADROT_ORDER + 1]; - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - - assert( nInChannels == HEADROT_SHMAT_DIM && "Number of channels must be 16!" ); - - /* initialize rotation matrices with zeros */ - for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) - { - set_zero( SHrotmat[i], HEADROT_SHMAT_DIM ); - } - - /* calculate Ambisonics rotation matrix from the quaternion */ - SHrotmatgen( SHrotmat, Rmat, shd_rot_max_order ); - - /* rotation by mtx multiplication */ - for ( i = 0; i < numTimeSlots; i++ ) - { - for ( iBand = 0; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) - { - /*As the rotation matrix becomes block diagonal in a SH basis, we can - apply each angular-momentum block individually to save complexity. */ - - /* loop over l blocks */ - m1 = 1; - m2 = 4; - for ( l = 1; l <= shd_rot_max_order; l++ ) - { - /* compute mtx-vector product for this l */ - for ( n = m1; n < m2; n++ ) - { - realRot[n - m1] = 0.f; - imagRot[n - m1] = 0.f; - - for ( m = m1; m < m2; m++ ) - { - realRot[n - m1] += SHrotmat[n][m] * Cldfb_RealBuffer[m][i][iBand]; - imagRot[n - m1] += SHrotmat[n][m] * Cldfb_ImagBuffer[m][i][iBand]; - } - } - /* write back the result */ - for ( n = m1; n < m2; n++ ) - { - Cldfb_RealBuffer[n][i][iBand] = realRot[n - m1]; - Cldfb_ImagBuffer[n][i][iBand] = imagRot[n - m1]; - } - m1 = m2; - m2 += 2 * ( l + 1 ) + 1; - } - - /* unoptimized code for reference (full matrix multiplication) - for (n = 0; n < nInChannels; n++) - { - realRot[n] = 0.f; - imagRot[n] = 0.f; - - for (m = 0; m < nInChannels; m++) - { - realRot[n] += SHrotmat[n][m] * Cldfb_RealBuffer[m][i][iBand]; - imagRot[n] += SHrotmat[n][m] * Cldfb_ImagBuffer[m][i][iBand]; - } - } - for (n = 0; n < nInChannels; n++) - { - Cldfb_RealBuffer[n][i][iBand] = realRot[n]; - Cldfb_ImagBuffer[n][i][iBand] = imagRot[n]; - } - */ - } - } - - return; -} -#endif -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------- - * rotateFrame_sd_cldfb() - * - * Apply rotation to signals in Spatial Domain and in CLDFB - *------------------------------------------------------------------------*/ - -void rotateFrame_sd_cldfb( - float Rmat[3][3], /* i : real-space rotation matrix */ - float Cldfb_RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain real part */ - float Cldfb_ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o: unrotated HOA3 signal buffer in cldfb domain imag part */ - const IVAS_OUTPUT_SETUP_HANDLE hOutputSetup, /* i : output format setup number of channels */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - const int16_t numTimeSlots, /* i : number of time slots to process */ - const int16_t nb_band /* i : number of CLDFB bands to process */ -) -{ - int16_t iBlock, iBand, m, n; - float gains[MAX_CICP_CHANNELS - 1][MAX_CICP_CHANNELS - 1]; - int16_t azimuth, elevation; - float g1; - float realRot[MAX_CICP_CHANNELS - 1][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; - float imagRot[MAX_CICP_CHANNELS - 1][MAX_PARAM_SPATIAL_SUBFRAMES * CLDFB_NO_CHANNELS_MAX]; - float *p_realRot, *p_imagRot; - float *p_real, *p_imag; - int16_t nInChannels; - int16_t isPlanar; - push_wmops( "rotateFrame_sd_cldfb" ); - - nInChannels = hOutputSetup->nchan_out_woLFE; - isPlanar = 1; - for ( n = 0; n < nInChannels; n++ ) - { - if ( hOutputSetup->ls_elevation[n] != 0 ) - { - isPlanar = 0; - break; - } - } - - /* rotation of Euler angles */ - for ( n = 0; n < nInChannels; n++ ) - { - rotateAziEle( hOutputSetup->ls_azimuth[n], hOutputSetup->ls_elevation[n], &azimuth, &elevation, Rmat, isPlanar ); - if ( hEFAPdata != NULL && ( hOutputSetup->ls_azimuth[n] != azimuth || hOutputSetup->ls_elevation[n] != elevation ) ) - { - efap_determine_gains( hEFAPdata, gains[n], azimuth, elevation, EFAP_MODE_EFAP ); - } - else - { - set_zero( gains[n], nInChannels ); - gains[n][n] = 1.0f; - } - } - - /* Apply panning gains by mtx multiplication*/ - for ( n = 0; n < nInChannels; n++ ) - { - set_zero( realRot[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_band ); - set_zero( imagRot[n], MAX_PARAM_SPATIAL_SUBFRAMES * nb_band ); - for ( m = 0; m < nInChannels; m++ ) - { - g1 = gains[m][n]; - p_realRot = realRot[n]; - p_imagRot = imagRot[n]; - if ( g1 > 0.f ) - { - for ( iBlock = 0; iBlock < numTimeSlots; iBlock++ ) - { - p_real = Cldfb_RealBuffer[m][iBlock]; - p_imag = Cldfb_ImagBuffer[m][iBlock]; - for ( iBand = 0; iBand < nb_band; iBand++ ) - { - *( p_realRot ) = *p_realRot + g1 * *( p_real++ ); - *( p_imagRot ) = *p_imagRot + g1 * *( p_imag++ ); - p_realRot++; - p_imagRot++; - } - } - } - } - } - - for ( n = 0; n < nInChannels; n++ ) - { - p_realRot = realRot[n]; - p_imagRot = imagRot[n]; - for ( iBlock = 0; iBlock < numTimeSlots; iBlock++ ) - { - p_real = Cldfb_RealBuffer[n][iBlock]; - p_imag = Cldfb_ImagBuffer[n][iBlock]; - for ( iBand = 0; iBand < nb_band; iBand++ ) - { - *( p_real++ ) = *( p_realRot++ ); - *( p_imag++ ) = *( p_imagRot++ ); - } - for ( ; iBand < CLDFB_NO_CHANNELS_MAX; iBand++ ) - { - *( p_real++ ) = 0.f; - *( p_imag++ ) = 0.f; - } - } - } - pop_wmops(); - - return; -} -#else /*------------------------------------------------------------------------- * rotateFrame_sd_cldfb() * @@ -1936,14 +1273,12 @@ void rotateFrame_sd_cldfb_fixed( return; } -#endif /*-----------------------------------------------------------------------* * ivas_external_orientation_open() * * Allocate and initialize external orientation handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_external_orientation_open( EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData, /* o : external orientation handle */ const Word16 num_subframes /* i : number of subframes */ @@ -1986,65 +1321,17 @@ ivas_error ivas_external_orientation_open( return IVAS_ERR_OK; } -#else -ivas_error ivas_external_orientation_open( - EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData, /* o : external orientation handle */ - const int16_t num_subframes /* i : number of subframes */ -) -{ - - int16_t i; - IVAS_QUATERNION identity; - - identity.w = 1.0f; - identity.x = identity.y = identity.z = 0.0f; - - /* Allocate handle */ - if ( ( *hExtOrientationData = (EXTERNAL_ORIENTATION_HANDLE) malloc( sizeof( EXTERNAL_ORIENTATION_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for external orientation memory\n" ) ); - } - ( *hExtOrientationData )->num_subframes = num_subframes; - /* Enable head rotation and disable external orientation as default */ - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - ( *hExtOrientationData )->enableHeadRotation[i] = 1; - ( *hExtOrientationData )->enableExternalOrientation[i] = 0; - ( *hExtOrientationData )->enableRotationInterpolation[i] = 0; - ( *hExtOrientationData )->numFramesToTargetOrientation[i] = 0; - ( *hExtOrientationData )->Quaternions[i] = identity; - } - return IVAS_ERR_OK; -} - -#endif /*-----------------------------------------------------------------------* * ivas_external_orientation_close() * * Deallocate external orientation handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_external_orientation_close_fx( EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData /* i/o: external orientation handle */ ) { test(); - IF( hExtOrientationData == NULL || *hExtOrientationData == NULL ) - { - return; - } - - free( ( *hExtOrientationData ) ); - *hExtOrientationData = NULL; - - return; -} -#else -void ivas_external_orientation_close( - EXTERNAL_ORIENTATION_HANDLE *hExtOrientationData /* i/o: external orientation handle */ -) -{ - if ( hExtOrientationData == NULL || *hExtOrientationData == NULL ) + IF( hExtOrientationData == NULL || *hExtOrientationData == NULL ) { return; } @@ -2054,7 +1341,6 @@ void ivas_external_orientation_close( return; } -#endif /*-----------------------------------------------------------------------* @@ -2062,7 +1348,6 @@ void ivas_external_orientation_close( * * Allocate and initialize combined orientation handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_combined_orientation_open( COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* o : combined orientation handle */ const Word32 fs, /* i : sampling rate */ @@ -2174,94 +1459,12 @@ ivas_error ivas_combined_orientation_open( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -ivas_error ivas_combined_orientation_open( - COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* o : combined orientation handle */ - const int32_t fs, /* i : sampling rate */ - const int16_t num_subframes /* i : number of subframes */ -) -{ - int16_t i; - int16_t j; - IVAS_QUATERNION identity; - IVAS_VECTOR3 origo; - - identity.w = 1.0f; - identity.x = identity.y = identity.z = 0.0f; - origo.x = origo.y = origo.z = 0.0f; - - /* Allocate handle */ - if ( ( *hCombinedOrientationData = (COMBINED_ORIENTATION_HANDLE) malloc( sizeof( COMBINED_ORIENTATION_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for combined orientation memory\n" ) ); - } - - /* Initialization */ - ( *hCombinedOrientationData )->num_subframes = num_subframes; - ( *hCombinedOrientationData )->interpolationCoefficient = 1.0f; - ( *hCombinedOrientationData )->interpolationIncrement = 1.0f; - if ( num_subframes == 1 ) - { - ( *hCombinedOrientationData )->maximumFramesToTargetOrientation = 2000; - } - else - { - ( *hCombinedOrientationData )->maximumFramesToTargetOrientation = 500; - } - ( *hCombinedOrientationData )->lrSwitchedNext = 0; - ( *hCombinedOrientationData )->lrSwitchedCurrent = 0; - ( *hCombinedOrientationData )->lrSwitchInterpVal = 0.0f; - ( *hCombinedOrientationData )->isInterpolationOngoing = FALSE; - ( *hCombinedOrientationData )->Quaternions_ext_interpolation_start = identity; - ( *hCombinedOrientationData )->Quaternions_ext_interpolation_target = identity; - - /* Initialise orientations to identity */ - for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) - { - ( *hCombinedOrientationData )->enableCombinedOrientation[i] = 0; - ( *hCombinedOrientationData )->Quaternions[i] = identity; - ( *hCombinedOrientationData )->listenerPos[i] = origo; - - for ( j = 0; j < 3; j++ ) - { - set_zero( ( *hCombinedOrientationData )->Rmat[i][j], 3 ); - ( *hCombinedOrientationData )->Rmat[i][j][j] = 1.0f; - } - } - - for ( j = 0; j < 3; j++ ) - { - set_zero( ( *hCombinedOrientationData )->Rmat_prev[j], 3 ); - ( *hCombinedOrientationData )->Rmat_prev[j][j] = 1.0f; - } - - ( *hCombinedOrientationData )->Quaternion_prev_extOrientation = identity; - ( *hCombinedOrientationData )->Quaternion_frozen_ext = identity; - ( *hCombinedOrientationData )->Quaternion_frozen_head = identity; - - - set_zero( ( *hCombinedOrientationData )->chEneIIR[0], MASA_FREQUENCY_BANDS ); - set_zero( ( *hCombinedOrientationData )->chEneIIR[1], MASA_FREQUENCY_BANDS ); - set_zero( ( *hCombinedOrientationData )->procChEneIIR[0], MASA_FREQUENCY_BANDS ); - set_zero( ( *hCombinedOrientationData )->procChEneIIR[1], MASA_FREQUENCY_BANDS ); - ( *hCombinedOrientationData )->isExtOrientationFrozen = 0; - ( *hCombinedOrientationData )->isHeadRotationFrozen = 0; - - ( *hCombinedOrientationData )->subframe_idx = 0; - ( *hCombinedOrientationData )->subframe_size = (int16_t) ( fs / ( FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ); - ( *hCombinedOrientationData )->cur_subframe_samples_rendered = 0; - - return IVAS_ERR_OK; -} -#endif /*-----------------------------------------------------------------------* * ivas_combined_orientation_close() * * Deallocate combined orientation handle *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_combined_orientation_close_fx( COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData /* i/o: combined orientation handle */ ) @@ -2277,22 +1480,6 @@ void ivas_combined_orientation_close_fx( return; } -#else -void ivas_combined_orientation_close( - COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData /* i/o: combined orientation handle */ -) -{ - if ( hCombinedOrientationData == NULL || *hCombinedOrientationData == NULL ) - { - return; - } - - free( ( *hCombinedOrientationData ) ); - *hCombinedOrientationData = NULL; - - return; -} -#endif /*------------------------------------------------------------------------- @@ -2368,7 +1555,6 @@ ivas_error combine_external_and_head_orientations_rend( * Combine the external orientations and the head orientation. * NOTE that the external orientations are inversed. *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error combine_external_and_head_orientations( IVAS_QUATERNION *headRotQuaternions, /* i : quaternions for head rotation */ IVAS_VECTOR3 *listenerPos, /* i : listener position */ @@ -2697,283 +1883,36 @@ ivas_error combine_external_and_head_orientations( { FOR( Word16 k = 0; k < 3; k++ ) { - hCombinedOrientationData->Rmat_fx[i][j][k] = L_shl( hCombinedOrientationData->Rmat_fx[i][j][k], sub( 62, shl( hCombinedOrientationData->Quaternions[i].q_fact, 1 ) ) ); // Q30 - move32(); - } - } - } - - Word16 l_shift = 0; - move16(); - FOR( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - l_shift = s_min( s_min( Q_factor_L_32( hCombinedOrientationData->Quaternions[i].w_fx ), Q_factor_L_32( hCombinedOrientationData->Quaternions[i].x_fx ) ), s_min( Q_factor_L_32( hCombinedOrientationData->Quaternions[i].y_fx ), Q_factor_L_32( hCombinedOrientationData->Quaternions[i].z_fx ) ) ); - hCombinedOrientationData->Quaternions[i].w_fx = L_shl( hCombinedOrientationData->Quaternions[i].w_fx, l_shift ); // q_fact+l_shift - move32(); - hCombinedOrientationData->Quaternions[i].x_fx = L_shl( hCombinedOrientationData->Quaternions[i].x_fx, l_shift ); // q_fact+l_shift - move32(); - hCombinedOrientationData->Quaternions[i].y_fx = L_shl( hCombinedOrientationData->Quaternions[i].y_fx, l_shift ); // q_fact+l_shift - move32(); - hCombinedOrientationData->Quaternions[i].z_fx = L_shl( hCombinedOrientationData->Quaternions[i].z_fx, l_shift ); // q_fact+l_shift - move32(); - hCombinedOrientationData->Quaternions[i].q_fact = add( hCombinedOrientationData->Quaternions[i].q_fact, l_shift ); - move16(); - } - return IVAS_ERR_OK; -} -#else -ivas_error combine_external_and_head_orientations( - IVAS_QUATERNION *headRotQuaternions, /* i : quaternions for head rotation */ - IVAS_VECTOR3 *listenerPos, /* i : listener position */ - EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, /* i : external orientation handle */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData /* i/o: combined orientation handle */ -) -{ - int16_t i; - int16_t j; - IVAS_QUATERNION identity; - IVAS_VECTOR3 origo; - - identity.w = 1.0f; - identity.x = identity.y = identity.z = 0.0f; - origo.x = origo.y = origo.z = 0.0f; - - /* Form combined orientations or return if no data available */ - if ( hCombinedOrientationData == NULL ) - { - if ( headRotQuaternions != NULL || hExtOrientationData != NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - else - { - return IVAS_ERR_OK; - } - } - else if ( headRotQuaternions == NULL && hExtOrientationData == NULL ) - { - /* Reset the combined orientations and rotations */ - hCombinedOrientationData->isInterpolationOngoing = FALSE; - hCombinedOrientationData->interpolationCoefficient = 1.0f; - hCombinedOrientationData->interpolationIncrement = 1.0f; - hCombinedOrientationData->Quaternions_ext_interpolation_start = identity; - hCombinedOrientationData->Quaternions_ext_interpolation_target = identity; - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - hCombinedOrientationData->enableCombinedOrientation[i] = 0; - hCombinedOrientationData->Quaternions[i] = identity; - hCombinedOrientationData->listenerPos[i] = origo; - - for ( j = 0; j < 3; j++ ) - { - set_zero( hCombinedOrientationData->Rmat[i][j], 3 ); - hCombinedOrientationData->Rmat[i][j][j] = 1.0f; - } - } - } - else if ( hExtOrientationData == NULL && headRotQuaternions != NULL ) - { - /* Head rotation only */ - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - hCombinedOrientationData->Quaternions[i] = headRotQuaternions[i]; - } - } - - if ( hExtOrientationData != NULL ) - { - /* External orientations */ - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - /* Check for frozen external orientation */ - if ( hExtOrientationData->enableExternalOrientation[i] == 2 ) - { - if ( hCombinedOrientationData->isExtOrientationFrozen != 1 ) - { - hCombinedOrientationData->Quaternion_frozen_ext = hExtOrientationData->Quaternions[i]; - hCombinedOrientationData->isExtOrientationFrozen = 1; - } - } - else - { - hCombinedOrientationData->Quaternion_frozen_ext = identity; - hCombinedOrientationData->isExtOrientationFrozen = 0; - } - - if ( hExtOrientationData->enableRotationInterpolation[i] == 1 && hExtOrientationData->enableExternalOrientation[i] > 0 ) - { - if ( hCombinedOrientationData->isInterpolationOngoing == true && hCombinedOrientationData->interpolationCoefficient <= 1.0f && are_orientations_same( &hCombinedOrientationData->Quaternions_ext_interpolation_target, &hExtOrientationData->Quaternions[i] ) == true ) - { - /* Continue interpolation */ - QuaternionSlerp( hCombinedOrientationData->Quaternions_ext_interpolation_start, hCombinedOrientationData->Quaternions_ext_interpolation_target, hCombinedOrientationData->interpolationCoefficient, &hCombinedOrientationData->Quaternions[i] ); - hCombinedOrientationData->interpolationCoefficient += hCombinedOrientationData->interpolationIncrement; - } - else - { - /* Stop interpolation or check for new interpolation */ - hCombinedOrientationData->isInterpolationOngoing = FALSE; - hCombinedOrientationData->interpolationCoefficient = 1.0f; - hCombinedOrientationData->interpolationIncrement = 1.0f; - external_target_interpolation( hExtOrientationData, hCombinedOrientationData, i ); - } - } - else - { - /* Interpolation disabled, use the current orientation values */ - - /* Use the most recent external orientation */ - if ( hExtOrientationData->enableExternalOrientation[i] == 1 ) - { - hCombinedOrientationData->Quaternions[i] = hExtOrientationData->Quaternions[i]; - } - /* Use the freezed external orientation */ - else if ( hExtOrientationData->enableExternalOrientation[i] == 2 ) - { - hCombinedOrientationData->Quaternions[i] = hCombinedOrientationData->Quaternion_frozen_ext; - } - } - } - } - - if ( hExtOrientationData != NULL && headRotQuaternions != NULL ) - { - /* Combine head and external orientations */ - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - /* Check for frozen head rotation */ - if ( hExtOrientationData->enableHeadRotation[i] == 2 ) - { - if ( hCombinedOrientationData->isHeadRotationFrozen != 1 ) - { - hCombinedOrientationData->Quaternion_frozen_head = headRotQuaternions[i]; - hCombinedOrientationData->isHeadRotationFrozen = 1; - } - } - else - { - hCombinedOrientationData->Quaternion_frozen_head = identity; - hCombinedOrientationData->isHeadRotationFrozen = 0; - } - /* Use the most recent head rotation */ - if ( hExtOrientationData->enableHeadRotation[i] == 1 ) - { - if ( hExtOrientationData->enableExternalOrientation[i] > 0 ) - { - QuaternionProduct( hCombinedOrientationData->Quaternions[i], headRotQuaternions[i], &hCombinedOrientationData->Quaternions[i] ); - } - else - { - hCombinedOrientationData->Quaternions[i] = headRotQuaternions[i]; - } - } - /* Use the freezed head rotation */ - else if ( hExtOrientationData->enableHeadRotation[i] == 2 ) - { - if ( hExtOrientationData->enableExternalOrientation[i] > 0 ) - { - QuaternionProduct( hCombinedOrientationData->Quaternions[i], hCombinedOrientationData->Quaternion_frozen_head, &hCombinedOrientationData->Quaternions[i] ); - } - else - { - hCombinedOrientationData->Quaternions[i] = hCombinedOrientationData->Quaternion_frozen_head; - } - } - - /* Reset the combined orientations to identity */ - if ( hExtOrientationData->enableHeadRotation[i] == 0 && hExtOrientationData->enableExternalOrientation[i] == 0 ) - { - hCombinedOrientationData->Quaternions[i] = identity; - } - } - } - - if ( headRotQuaternions != NULL || hExtOrientationData != NULL ) - { - /* Calculate the combined rotation matrix */ - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - QuatToRotMat( hCombinedOrientationData->Quaternions[i], hCombinedOrientationData->Rmat[i] ); - } - } - - /* Save the current orientations */ - if ( hExtOrientationData != NULL ) - { - if ( hExtOrientationData->enableExternalOrientation[hExtOrientationData->num_subframes - 1] > 0 ) - { - hCombinedOrientationData->Quaternion_prev_extOrientation = hExtOrientationData->Quaternions[hExtOrientationData->num_subframes - 1]; - } - else - { - hCombinedOrientationData->Quaternion_prev_extOrientation = identity; - } - } - if ( headRotQuaternions != NULL ) - { - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - hCombinedOrientationData->listenerPos[i] = listenerPos[i]; - } - } - - /* Check if combined orientation is enabled */ - if ( headRotQuaternions != NULL && hExtOrientationData == NULL ) - { - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - hCombinedOrientationData->enableCombinedOrientation[i] = 1; - } - } - else if ( headRotQuaternions == NULL && hExtOrientationData != NULL ) - { - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - if ( hExtOrientationData->enableExternalOrientation[i] > 0 ) - { - hCombinedOrientationData->enableCombinedOrientation[i] = 1; - } - else - { - hCombinedOrientationData->enableCombinedOrientation[i] = 0; - } - } - } - else if ( headRotQuaternions != NULL && hExtOrientationData != NULL ) - { - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - if ( hExtOrientationData->enableExternalOrientation[i] > 0 || ( hExtOrientationData->enableHeadRotation[i] > 0 ) ) - { - hCombinedOrientationData->enableCombinedOrientation[i] = 1; - } - else - { - hCombinedOrientationData->enableCombinedOrientation[i] = 0; + hCombinedOrientationData->Rmat_fx[i][j][k] = L_shl( hCombinedOrientationData->Rmat_fx[i][j][k], sub( 62, shl( hCombinedOrientationData->Quaternions[i].q_fact, 1 ) ) ); // Q30 + move32(); } } } - else + + Word16 l_shift = 0; + move16(); + FOR( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) { - for ( i = 0; i < hCombinedOrientationData->num_subframes; i++ ) - { - hCombinedOrientationData->enableCombinedOrientation[i] = 0; - } + l_shift = s_min( s_min( Q_factor_L_32( hCombinedOrientationData->Quaternions[i].w_fx ), Q_factor_L_32( hCombinedOrientationData->Quaternions[i].x_fx ) ), s_min( Q_factor_L_32( hCombinedOrientationData->Quaternions[i].y_fx ), Q_factor_L_32( hCombinedOrientationData->Quaternions[i].z_fx ) ) ); + hCombinedOrientationData->Quaternions[i].w_fx = L_shl( hCombinedOrientationData->Quaternions[i].w_fx, l_shift ); // q_fact+l_shift + move32(); + hCombinedOrientationData->Quaternions[i].x_fx = L_shl( hCombinedOrientationData->Quaternions[i].x_fx, l_shift ); // q_fact+l_shift + move32(); + hCombinedOrientationData->Quaternions[i].y_fx = L_shl( hCombinedOrientationData->Quaternions[i].y_fx, l_shift ); // q_fact+l_shift + move32(); + hCombinedOrientationData->Quaternions[i].z_fx = L_shl( hCombinedOrientationData->Quaternions[i].z_fx, l_shift ); // q_fact+l_shift + move32(); + hCombinedOrientationData->Quaternions[i].q_fact = add( hCombinedOrientationData->Quaternions[i].q_fact, l_shift ); + move16(); } - - hCombinedOrientationData->subframe_idx = 0; - hCombinedOrientationData->cur_subframe_samples_rendered = 0; - hCombinedOrientationData->subframe_idx_start = 0; - hCombinedOrientationData->cur_subframe_samples_rendered_start = 0; return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------- * external_target_interpolation() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void external_target_interpolation_fx( EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, /* i : external orientation handle */ COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ @@ -3086,87 +2025,12 @@ static void external_target_interpolation_fx( return; } -#else -static void external_target_interpolation( - EXTERNAL_ORIENTATION_HANDLE hExtOrientationData, /* i : external orientation handle */ - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const int16_t i /* i : subframe index */ -) -{ - /* Sanity check for number of frames */ - hExtOrientationData->numFramesToTargetOrientation[i] = min( hExtOrientationData->numFramesToTargetOrientation[i], hCombinedOrientationData->maximumFramesToTargetOrientation ); - hExtOrientationData->numFramesToTargetOrientation[i] = max( hExtOrientationData->numFramesToTargetOrientation[i], 0 ); - - /* Interpolate from the current orientation to the target orientation */ - if ( hExtOrientationData->numFramesToTargetOrientation[i] > 0 ) - { - if ( are_orientations_same( &hCombinedOrientationData->Quaternions_ext_interpolation_target, &hExtOrientationData->Quaternions[i] ) == false ) - { - /* Target orientation is different from the previous target, update the values */ - - /* Set the received orientation as the target */ - hCombinedOrientationData->Quaternions_ext_interpolation_target = hExtOrientationData->Quaternions[i]; - - /* Use the most recent external orientation as the starting orientation */ - if ( hExtOrientationData->enableExternalOrientation[i] == 1 ) - { - if ( i > 0 ) - { - if ( hExtOrientationData->enableExternalOrientation[i - 1] == 0 ) - { - IVAS_QUATERNION identity; - identity.w = 1.0f; - identity.x = identity.y = identity.z = 0.0f; - hCombinedOrientationData->Quaternions_ext_interpolation_start = identity; - } - else if ( hExtOrientationData->enableExternalOrientation[i - 1] == 2 ) - { - hCombinedOrientationData->Quaternions_ext_interpolation_start = hCombinedOrientationData->Quaternion_frozen_ext; - } - else - { - hCombinedOrientationData->Quaternions_ext_interpolation_start = hExtOrientationData->Quaternions[i - 1]; - } - } - else - { - hCombinedOrientationData->Quaternions_ext_interpolation_start = hCombinedOrientationData->Quaternion_prev_extOrientation; - } - } - else if ( hExtOrientationData->enableExternalOrientation[i] == 2 ) - { - hCombinedOrientationData->Quaternions_ext_interpolation_start = hCombinedOrientationData->Quaternion_frozen_ext; - } - - /* Calculate the interpolation increment and coefficient */ - hCombinedOrientationData->interpolationIncrement = 1.0f / ( (float) hExtOrientationData->numFramesToTargetOrientation[i] * (float) MAX_PARAM_SPATIAL_SUBFRAMES ); - hCombinedOrientationData->interpolationCoefficient = hCombinedOrientationData->interpolationIncrement; - } - - /* Interpolate */ - hCombinedOrientationData->isInterpolationOngoing = TRUE; - QuaternionSlerp( hCombinedOrientationData->Quaternions_ext_interpolation_start, hCombinedOrientationData->Quaternions_ext_interpolation_target, hCombinedOrientationData->interpolationCoefficient, &hCombinedOrientationData->Quaternions[i] ); - hCombinedOrientationData->interpolationCoefficient += hCombinedOrientationData->interpolationIncrement; - } - else - { - /* Use the target orientation immediately */ - hCombinedOrientationData->isInterpolationOngoing = FALSE; - hCombinedOrientationData->interpolationCoefficient = 1.0f; - hCombinedOrientationData->interpolationIncrement = 1.0f; - hCombinedOrientationData->Quaternions[i] = hExtOrientationData->Quaternions[i]; - } - - return; -} -#endif /*------------------------------------------------------------------------- * are_orientations_same() * * *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static bool are_orientations_same_fx( const IVAS_QUATERNION *orientation1, const IVAS_QUATERNION *orientation2 ) @@ -3210,32 +2074,11 @@ static bool are_orientations_same_fx( return orientationsAreSame; } -#endif -#ifndef IVAS_FLOAT_FIXED -static bool are_orientations_same( - const IVAS_QUATERNION *orientation1, - const IVAS_QUATERNION *orientation2 ) -{ - bool orientationsAreSame = true; - float error_margin = 0.05f; - - if ( fabsf( orientation1->w - orientation2->w ) > error_margin || - fabsf( orientation1->x - orientation2->x ) > error_margin || - fabsf( orientation1->y - orientation2->y ) > error_margin || - fabsf( orientation1->z - orientation2->z ) > error_margin ) - { - orientationsAreSame = false; - } - - return orientationsAreSame; -} -#endif /*-----------------------------------------------------------------------* * Local Function definitions *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * Helper functions used by SHrotmatgen, * an implementation of the algorithm in @@ -3296,133 +2139,6 @@ static Word32 SHrot_p_fx( return p; // Q28 } -#else -/*------------------------------------------------------------------------- - * Helper functions used by SHrotmatgen, - * an implementation of the algorithm in - * Ivanic, J. & Ruedenberg, K., J. Phys. Chem. 100, 6342 (1996) - *------------------------------------------------------------------------*/ - -static float SHrot_p( - const int16_t i, - const int16_t l, - const int16_t a, - const int16_t b, - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], - float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) -{ - - float ri1 = 0.0f, rim1 = 0.0f, ri0 = 0.0f, p = 0.0f, R_lm1_1 = 0.0f, R_lm1_2 = 0.0f; - - ri1 = SHrotmat[i + 1 + 1][1 + 1 + 1]; - rim1 = SHrotmat[i + 1 + 1][-1 + 1 + 1]; - ri0 = SHrotmat[i + 1 + 1][0 + 1 + 1]; - - if ( b == -l ) - { - R_lm1_1 = R_lm1[a + l - 1][0]; - R_lm1_2 = R_lm1[a + l - 1][2 * l - 2]; - p = ri1 * R_lm1_1 + rim1 * R_lm1_2; - } - else - { - if ( b == l ) - { - R_lm1_1 = R_lm1[a + l - 1][2 * l - 2]; - R_lm1_2 = R_lm1[a + l - 1][0]; - p = ri1 * R_lm1_1 - rim1 * R_lm1_2; - } - else - { - R_lm1_1 = R_lm1[a + l - 1][b + l - 1]; - p = ri0 * R_lm1_1; - } - } - - return p; -} -#endif -#ifndef IVAS_FLOAT_FIXED -static float SHrot_u( - const int16_t l, - const int16_t m, - const int16_t n, - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], - float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) -{ - return SHrot_p( 0, l, m, n, SHrotmat, R_lm1 ); -} - -static float SHrot_v( - const int16_t l, - const int16_t m, - const int16_t n, - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], - float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) -{ - - float result, d, p0, p1; - - if ( m == 0 ) - { - p0 = SHrot_p( 1, l, 1, n, SHrotmat, R_lm1 ); - p1 = SHrot_p( -1, l, -1, n, SHrotmat, R_lm1 ); - result = p0 + p1; - } - else - { - if ( m > 0 ) - { - d = ( m == 1 ) ? 1.0f : 0.0f; - p0 = SHrot_p( 1, l, m - 1, n, SHrotmat, R_lm1 ); - p1 = SHrot_p( -1, l, -m + 1, n, SHrotmat, R_lm1 ); - result = p0 * sqrtf( 1.0f + d ) - p1 * ( 1.0f - d ); - } - else - { - d = ( m == -1 ) ? 1.0f : 0.0f; - p0 = SHrot_p( 1, l, m + 1, n, SHrotmat, R_lm1 ); - p1 = SHrot_p( -1, l, -m - 1, n, SHrotmat, R_lm1 ); - result = p0 * ( 1.0f - d ) + p1 * sqrtf( 1.0f + d ); - } - } - - return result; -} - -static float SHrot_w( - const int16_t l, - const int16_t m, - const int16_t n, - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], - float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM] ) -{ - float result, p0, p1; - - if ( m == 0 ) - { - printf( "ERROR should not be called\n" ); - return 0.0f; - } - else - { - if ( m > 0 ) - { - p0 = SHrot_p( 1, l, m + 1, n, SHrotmat, R_lm1 ); - p1 = SHrot_p( -1, l, -m - 1, n, SHrotmat, R_lm1 ); - result = p0 + p1; - } - else - { - p0 = SHrot_p( 1, l, m - 1, n, SHrotmat, R_lm1 ); - p1 = SHrot_p( -1, l, -m + 1, n, SHrotmat, R_lm1 ); - result = p0 - p1; - } - } - - return result; -} -#else static Word32 SHrot_u_fx( const Word16 l, const Word16 m, @@ -3519,9 +2235,7 @@ static Word32 SHrot_w_fx( return result; // Q28 } -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * SHrotmatgen_fx() * @@ -3683,117 +2397,6 @@ void SHrotmatgen_fx( return; } -#else -/*------------------------------------------------------------------------- - * SHrotmatgen() - * - * - *------------------------------------------------------------------------*/ - -void SHrotmatgen( - float SHrotmat[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM], /* o : rotation matrix in SHD */ - float Rmat[3][3], /* i : real-space rotation matrix */ - const int16_t order /* i : ambisonics order */ -) -{ - int16_t d = 0; - int16_t band_idx = 0; - int16_t i, j; - int16_t l, m, n; - int16_t absm; - float sqdenom = 0.0f, sql2mm2 = 0.0f, sqdabsm = 0.0f, sqlabsm = 0.0f; - float u = 0.0f, v = 0.0f, w = 0.0f; - float R_lm1[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - float R_l[HEADROT_SHMAT_DIM][HEADROT_SHMAT_DIM]; - - SHrotmat[0][0] = 1.0f; - - SHrotmat[1][1] = Rmat[1][1]; - SHrotmat[1][2] = Rmat[1][2]; - SHrotmat[1][3] = Rmat[1][0]; - - SHrotmat[2][1] = Rmat[2][1]; - SHrotmat[2][2] = Rmat[2][2]; - SHrotmat[2][3] = Rmat[2][0]; - - SHrotmat[3][1] = Rmat[0][1]; - SHrotmat[3][2] = Rmat[0][2]; - SHrotmat[3][3] = Rmat[0][0]; - - for ( i = 0; i < 2 * 1 + 1; i++ ) - { - for ( j = 0; j < 2 * 1 + 1; j++ ) - { - R_lm1[i][j] = SHrotmat[i + 1][j + 1]; - } - } - - band_idx = 4; - for ( l = 2; l <= order; l++ ) - { - set_zero( &R_l[0][0], HEADROT_SHMAT_DIM2 ); - - for ( m = -l; m <= l; m++ ) - { - d = ( m == 0 ) ? 1 : 0; - absm = (int16_t) abs( m ); - sql2mm2 = sqrtf( (float) ( l * l - m * m ) ); - sqdabsm = sqrtf( (float) ( ( 1 + d ) * ( l + absm - 1 ) * ( l + absm ) ) ); - sqlabsm = sqrtf( (float) ( ( l - absm - 1 ) * ( l - absm ) ) ); - - for ( n = -l; n <= l; n++ ) - { - if ( abs( n ) == l ) - { - sqdenom = sqrtf( (float) ( ( 2 * l ) * ( 2 * l - 1 ) ) ); - } - else - { - sqdenom = sqrtf( (float) ( l * l - n * n ) ); - } - - u = sql2mm2 / sqdenom; - v = sqdabsm / sqdenom * ( 1 - 2 * d ) * 0.5f; - w = sqlabsm / sqdenom * ( 1 - d ) * ( -0.5f ); - - if ( u != 0 ) - { - u = u * SHrot_u( l, m, n, SHrotmat, R_lm1 ); - } - if ( v != 0 ) - { - v = v * SHrot_v( l, m, n, SHrotmat, R_lm1 ); - } - if ( w != 0 ) - { - w = w * SHrot_w( l, m, n, SHrotmat, R_lm1 ); - } - R_l[m + l][n + l] = u + v + w; - } - } - - for ( i = 0; i < 2 * l + 1; i++ ) - { - for ( j = 0; j < 2 * l + 1; j++ ) - { - SHrotmat[band_idx + i][band_idx + j] = R_l[i][j]; - } - } - - for ( i = 0; i < 2 * l + 1; i++ ) - { - for ( j = 0; j < 2 * l + 1; j++ ) - { - R_lm1[i][j] = R_l[i][j]; - } - } - - band_idx += 2 * l + 1; - } - - return; -} -#endif /*------------------------------------------------------------------------- @@ -3802,31 +2405,6 @@ void SHrotmatgen( * update read index based on the number of rendered samples *------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_combined_orientation_update_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const int16_t samples_rendered /* i : samples rendered since the last call */ -) -{ - if ( hCombinedOrientationData != NULL ) - { - if ( hCombinedOrientationData->num_subframes == 1 ) - { - /* only one orientation available anyway or split rendering with low resolution*/ - hCombinedOrientationData->subframe_idx = 0; - } - else - { - hCombinedOrientationData->cur_subframe_samples_rendered += samples_rendered; - hCombinedOrientationData->subframe_idx += hCombinedOrientationData->cur_subframe_samples_rendered / hCombinedOrientationData->subframe_size; - hCombinedOrientationData->cur_subframe_samples_rendered = hCombinedOrientationData->cur_subframe_samples_rendered % hCombinedOrientationData->subframe_size; - hCombinedOrientationData->subframe_idx = min( hCombinedOrientationData->subframe_idx, hCombinedOrientationData->num_subframes - 1 ); - } - } - - return; -} -#else void ivas_combined_orientation_update_index( COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ const Word16 samples_rendered /* i : samples rendered since the last call */ @@ -3857,9 +2435,7 @@ void ivas_combined_orientation_update_index( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_combined_orientation_set_to_start_index() @@ -3881,28 +2457,6 @@ void ivas_combined_orientation_set_to_start_index( return; } -#else - -/*------------------------------------------------------------------------- - * ivas_combined_orientation_update_index() - * - * update read index based on the number of rendered samples - *------------------------------------------------------------------------*/ - -void ivas_combined_orientation_set_to_start_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData /* i/o: combined orientation handle */ -) -{ - if ( hCombinedOrientationData != NULL ) - { - hCombinedOrientationData->subframe_idx = hCombinedOrientationData->subframe_idx_start; - hCombinedOrientationData->cur_subframe_samples_rendered = hCombinedOrientationData->cur_subframe_samples_rendered_start; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_combined_orientation_update_start_index() * @@ -3937,34 +2491,3 @@ void ivas_combined_orientation_update_start_index( return; } -#else -/*------------------------------------------------------------------------- - * ivas_combined_orientation_update_start_index() - * - * update start index based on the number of rendered samples - *------------------------------------------------------------------------*/ - -void ivas_combined_orientation_update_start_index( - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i/o: combined orientation handle */ - const int16_t samples_rendered /* i : samples rendered since the last call */ -) -{ - if ( hCombinedOrientationData != NULL ) - { - if ( hCombinedOrientationData->num_subframes == 1 ) - { - /* only one orientation available anyway or split rendering with low resolution*/ - hCombinedOrientationData->subframe_idx = 0; - } - else - { - hCombinedOrientationData->cur_subframe_samples_rendered_start += samples_rendered; - hCombinedOrientationData->subframe_idx_start += hCombinedOrientationData->cur_subframe_samples_rendered / hCombinedOrientationData->subframe_size; - hCombinedOrientationData->cur_subframe_samples_rendered_start = hCombinedOrientationData->cur_subframe_samples_rendered % hCombinedOrientationData->subframe_size; - hCombinedOrientationData->subframe_idx_start = min( hCombinedOrientationData->subframe_idx, hCombinedOrientationData->num_subframes - 1 ); - } - } - - return; -} -#endif diff --git a/lib_rend/ivas_sba_rendering.c b/lib_rend/ivas_sba_rendering.c index 1867e4263..0309cf61f 100644 --- a/lib_rend/ivas_sba_rendering.c +++ b/lib_rend/ivas_sba_rendering.c @@ -47,7 +47,6 @@ * * Render prototype audio signals using SBA mixing matrices *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void ivas_sba_prototype_renderer_fx( Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real Q(q_cldfb[][])*/ @@ -282,164 +281,3 @@ void ivas_sba_prototype_renderer_fx( return; } - -#else -void ivas_sba_prototype_renderer( - Decoder_Struct *st_ivas, /* i/o: IVAS decoder struct */ - float inRe[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, real */ - float inIm[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /* i : Input audio in CLDFB domain, imag */ - const int16_t subframe /* i : Subframe to render */ -) -{ - float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; - SPAR_DEC_HANDLE hSpar; - DECODER_CONFIG_HANDLE hDecoderConfig; - int16_t num_spar_bands, spar_band; - int16_t b, ts; - int16_t num_cldfb_bands, numch_in, numch_out; - int16_t cldfb_band; - int16_t out_ch, in_ch; - int16_t firstInCh, inChEnd, firstOutCh, outChEnd; - int16_t slot_idx_start, md_idx; - int16_t num_md_sub_frames; - - num_md_sub_frames = ivas_get_spar_dec_md_num_subframes( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ); - - push_wmops( "ivas_sba_prototype_renderer" ); - - hSpar = st_ivas->hSpar; - hDecoderConfig = st_ivas->hDecoderConfig; - num_spar_bands = hSpar->hFbMixer->pFb->filterbank_num_bands; - - num_cldfb_bands = hSpar->hFbMixer->pFb->fb_bin_to_band.num_cldfb_bands; - numch_in = hSpar->hFbMixer->fb_cfg->num_in_chans; - numch_out = hSpar->hFbMixer->fb_cfg->num_out_chans; - slot_idx_start = hSpar->slots_rendered; - - if ( st_ivas->nchan_transport == 1 ) - { - firstInCh = 0; - inChEnd = 1; - firstOutCh = 0; - outChEnd = 1; - } - else /* 2 TC */ - { - firstInCh = 0; - inChEnd = 2; - firstOutCh = 1; - outChEnd = 2; - } - - /* Apply mixing matrix */ - for ( ts = 0; ts < hSpar->subframe_nbslots[hSpar->subframes_rendered]; ts++ ) - { - /* determine SPAR parameters for this time slot */ - md_idx = hSpar->render_to_md_map[ts + slot_idx_start]; - ivas_spar_get_parameters( hSpar, hDecoderConfig, md_idx, numch_out, numch_in, num_spar_bands, mixer_mat ); - - for ( cldfb_band = 0; cldfb_band < num_cldfb_bands; cldfb_band++ ) - { - float out_re[IVAS_SPAR_MAX_CH]; - float out_im[IVAS_SPAR_MAX_CH]; - float cldfb_par; - ivas_fb_bin_to_band_data_t *bin2band = &hSpar->hFbMixer->pFb->fb_bin_to_band; - - for ( out_ch = firstOutCh; out_ch < outChEnd; out_ch++ ) - { - out_re[out_ch] = 0.0f; - out_im[out_ch] = 0.0f; - - for ( in_ch = firstInCh; in_ch < inChEnd; in_ch++ ) - { - if ( cldfb_band < CLDFB_PAR_WEIGHT_START_BAND ) /* tuning parameter, depends on how much SPAR Filters overlap for the CLDFB bands */ - { - spar_band = bin2band->p_cldfb_map_to_spar_band[cldfb_band]; - cldfb_par = mixer_mat[out_ch][in_ch][spar_band]; - } - else - { - cldfb_par = 0.0f; - for ( spar_band = bin2band->p_spar_start_bands[cldfb_band]; spar_band < num_spar_bands; spar_band++ ) - { - /* accumulate contributions from all SPAR bands */ - cldfb_par += mixer_mat[out_ch][in_ch][spar_band] * bin2band->pp_cldfb_weights_per_spar_band[cldfb_band][spar_band]; - } - } - - out_re[out_ch] += inRe[in_ch][ts][cldfb_band] * cldfb_par; - out_im[out_ch] += inIm[in_ch][ts][cldfb_band] * cldfb_par; - } - } - - /*update CLDFB data with the parameter-modified data*/ - for ( out_ch = firstOutCh; out_ch < outChEnd; out_ch++ ) - { - inRe[out_ch][ts][cldfb_band] = out_re[out_ch]; - inIm[out_ch][ts][cldfb_band] = out_im[out_ch]; - } - } - - /* Update mixing matrices */ - if ( ( ( slot_idx_start + ts + 1 ) == hSpar->num_slots ) || ( ( md_idx / JBM_CLDFB_SLOTS_IN_SUBFRAME ) != ( hSpar->render_to_md_map[ts + slot_idx_start + 1] / JBM_CLDFB_SLOTS_IN_SUBFRAME ) ) ) - { - /* we have crossed an unadapted parameter sf border, update previous mixing matrices */ - int16_t md_sf = md_idx / JBM_CLDFB_SLOTS_IN_SUBFRAME; - md_sf = ( num_md_sub_frames == MAX_PARAM_SPATIAL_SUBFRAMES ) ? md_sf : 0; - hSpar->i_subframe++; - hSpar->i_subframe = min( hSpar->i_subframe, MAX_PARAM_SPATIAL_SUBFRAMES ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[1][0][0], hSpar->hMdDec->mixer_mat_prev[0][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[2][0][0], hSpar->hMdDec->mixer_mat_prev[1][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[3][0][0], hSpar->hMdDec->mixer_mat_prev[2][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - mvr2r( hSpar->hMdDec->mixer_mat_prev[4][0][0], hSpar->hMdDec->mixer_mat_prev[3][0][0], IVAS_MAX_FB_MIXER_OUT_CH * IVAS_MAX_FB_MIXER_IN_CH * IVAS_MAX_NUM_BANDS ); - - for ( out_ch = 0; out_ch < numch_out; out_ch++ ) - { - for ( in_ch = 0; in_ch < numch_in; in_ch++ ) - { - for ( b = 0; b < num_spar_bands; b++ ) - { - hSpar->hMdDec->mixer_mat_prev[4][out_ch][in_ch][b] = hSpar->hMdDec->mixer_mat[out_ch][in_ch][b + md_sf * IVAS_MAX_NUM_BANDS]; - } - } - } - } - } - - - /* Create prototypes */ - if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) - { - for ( ts = 0; ts < hSpar->subframe_nbslots[subframe]; ts++ ) - { - if ( st_ivas->nchan_transport == 1 ) /* Dual mono */ - { - mvr2r( inRe[0][ts], inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); - mvr2r( inIm[0][ts], inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); - } - else if ( st_ivas->nchan_transport == 2 ) /* Opposing cardioids */ - { - float temp_signal[CLDFB_NO_CHANNELS_MAX]; - - v_add( inRe[0][ts], inRe[1][ts], temp_signal, CLDFB_NO_CHANNELS_MAX ); - v_sub( inRe[0][ts], inRe[1][ts], inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); - mvr2r( temp_signal, inRe[0][ts], CLDFB_NO_CHANNELS_MAX ); - v_multc( inRe[0][ts], 0.5f, inRe[0][ts], CLDFB_NO_CHANNELS_MAX ); - v_multc( inRe[1][ts], 0.5f, inRe[1][ts], CLDFB_NO_CHANNELS_MAX ); - - v_add( inIm[0][ts], inIm[1][ts], temp_signal, CLDFB_NO_CHANNELS_MAX ); - v_sub( inIm[0][ts], inIm[1][ts], inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); - mvr2r( temp_signal, inIm[0][ts], CLDFB_NO_CHANNELS_MAX ); - v_multc( inIm[0][ts], 0.5f, inIm[0][ts], CLDFB_NO_CHANNELS_MAX ); - v_multc( inIm[1][ts], 0.5f, inIm[1][ts], CLDFB_NO_CHANNELS_MAX ); - } - } - } - - hSpar->subframes_rendered++; - hSpar->slots_rendered += hSpar->subframe_nbslots[subframe]; - pop_wmops(); - - return; -} -#endif diff --git a/lib_rend/ivas_shoebox.c b/lib_rend/ivas_shoebox.c index 1cbdc63c1..6e27da202 100644 --- a/lib_rend/ivas_shoebox.c +++ b/lib_rend/ivas_shoebox.c @@ -40,29 +40,20 @@ #include "prot_fx.h" #include "wmc_auto.h" #include "ivas_rom_com.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" -#endif /*------------------------------------------------------------------------- * Local constants *------------------------------------------------------------------------*/ -#define ER_MAX_SOURCES 25 -#define ER_REF_ORDER 1 -#ifndef IVAS_FLOAT_FIXED -#define ER_AIR_COEFF ( 0.00137f ) -#define ER_SOUND_SPEED ( 343.0f ) -#define ER_MIN_WALL_DIST ( 0.1f ) -#define ER_EUCLIDEAN_SCALE ( 1.29246971E-26f ) -#else +#define ER_MAX_SOURCES 25 +#define ER_REF_ORDER 1 #define ER_AIR_COEFF_FX ( Word32 )( 2942053 ) // 0.00137f in Q.31 #define ER_SOUND_SPEED_FX ( Word32 )( 6260885 ) // 1/343.0f in Q1.31 #define ER_MIN_WALL_DIST_FX ( Word32 )( 419430 ) // Q.22 #define ER_EUCLIDEAN_SCALE_FX ( 0x1 ) // Q.22 #define ER_RECIPROCAL_EUCLIDEAN_SCALE_FX ( 0x1 ) // Q.22 -#endif /*-----------------------------------------------------------------------------------------* @@ -71,33 +62,6 @@ * Function transfer the parameters from the reverb config handle to the shoebox * calibration data structure. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_shoebox_config_init( - shoebox_config_t *cal, - RENDER_CONFIG_HANDLE hRenderConfig /* i : Renderer configuration handle */ -) -{ - int16_t wall_idx; - - cal->room_L = hRenderConfig->roomAcoustics.dimensions.x; - cal->room_W = hRenderConfig->roomAcoustics.dimensions.y; - cal->room_H = hRenderConfig->roomAcoustics.dimensions.z; - - /* Absorption Coefficients */ - /* Convention: [Front wall, Back wall, Left wall, Right wall, Ceiling, Floor] */ - for ( wall_idx = 0; wall_idx < 6; wall_idx++ ) - { - cal->abs_coeff[wall_idx] = hRenderConfig->roomAcoustics.AbsCoeff[wall_idx]; - } - - /* Listener position (only X and Y can be pos. or neg. ) */ - cal->list_orig[0] = hRenderConfig->roomAcoustics.ListenerOrigin.x; - cal->list_orig[1] = hRenderConfig->roomAcoustics.ListenerOrigin.y; - cal->list_orig[2] = hRenderConfig->roomAcoustics.ListenerOrigin.z; - - return; -} -#else void ivas_shoebox_config_init( shoebox_config_t *cal, @@ -132,7 +96,6 @@ void ivas_shoebox_config_init( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -141,47 +104,6 @@ void ivas_shoebox_config_init( * Function initializes the shoebox operating parameters by setting limits and defaults, * also contains the calibration structure. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -void ivas_shoebox_init( - shoebox_obj_t *obj, - shoebox_config_t *cal ) -{ - uint16_t i; - - /* Add cal to obj struct */ - obj->cal = *cal; - /* Add defaults */ - obj->max_bands = 1; - obj->MAX_SOURCES = ER_MAX_SOURCES; - obj->REF_ORDER = ER_REF_ORDER; - - /* Positions */ - set_f( &obj->src_pos[0], 0.0f, 75U ); - set_f( &obj->src_dist[0], 0.0f, 25U ); - - for ( i = 0; i < 3; i++ ) - { - obj->list_pos[i] = cal->list_orig[i]; - } - - /* Pointer */ - obj->nSrc = 0; - - /* Flags */ - obj->isCartesian = 1; - obj->isRelative = 1; - obj->isZHeight = 1; - obj->isRadians = 1; - - /* Params */ - obj->radius = ER_RADIUS; - obj->min_wall_dist = ER_MIN_WALL_DIST; - obj->soundspeed = ER_SOUND_SPEED; - obj->air_coeff = ER_AIR_COEFF; - - return; -} -#else void ivas_shoebox_init( shoebox_obj_t *obj, shoebox_config_t *cal ) @@ -236,7 +158,6 @@ void ivas_shoebox_init( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -247,62 +168,6 @@ void ivas_shoebox_init( * by the surface parameters. If object is out of bounds, then new cartesian * coordinates are established to collapse the object position. *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void shoebox_bound( - shoebox_obj_t *obj, - float *out_pos ) -{ - float out_tmp; - int32_t i; - - out_tmp = ( obj->cal.room_L / 2.0f ) - obj->min_wall_dist; - - if ( ( out_pos[0] > out_tmp ) || ( out_pos[0] < ( ( ( -obj->cal.room_L ) / 2.0f ) + obj->min_wall_dist ) ) ) - { - if ( out_pos[0] < 0.0f ) - { - i = -1; - } - else - { - i = ( out_pos[0] > 0.0f ) ? ( (int32_t) 1 ) : ( (int32_t) 0 ); - } - out_pos[0] = out_tmp * ( (float) i ); - } - - out_tmp = ( obj->cal.room_W / 2.0f ) - obj->min_wall_dist; - - if ( ( out_pos[1] > out_tmp ) || ( out_pos[1] < ( ( ( -obj->cal.room_W ) / 2.0f ) + obj->min_wall_dist ) ) ) - { - if ( out_pos[1] < 0.0f ) - { - i = -1; - } - else - { - i = ( out_pos[1] > 0.0f ) ? ( (int32_t) 1 ) : ( (int32_t) 0 ); - } - out_pos[1] = out_tmp * ( (float) i ); - } - - out_tmp = ( obj->cal.room_H / 2.0f ) - obj->min_wall_dist; - - if ( ( out_pos[2] > out_tmp ) || ( out_pos[2] < ( ( ( -obj->cal.room_H ) / 2.0f ) + obj->min_wall_dist ) ) ) - { - if ( out_pos[2] < 0.0f ) - { - i = -1; - } - else - { - i = ( out_pos[2] > 0.0f ) ? ( (int32_t) 1 ) : ( (int32_t) 0 ); - } - out_pos[2] = out_tmp * ( (float) i ); - } - - return; -} -#else static void shoebox_bound_fx( shoebox_obj_t *obj, Word32 *out_pos // Q22 @@ -394,7 +259,6 @@ static void shoebox_bound_fx( return; } -#endif /*-----------------------------------------------------------------------------------------* @@ -402,83 +266,6 @@ static void shoebox_bound_fx( * * Transform relative spherical coordinate to 3D cartesian point *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void shoebox_get_coord( - shoebox_obj_t *obj, - float *fcnOutput_data, - const float src_pos_data[], - float *tmp_pos, - float out_tmp, - int32_t coord, - int32_t loop_ub, - int32_t k, - uint16_t isRelative ) -{ - float tmp_data[75]; - float rcoselev; - int32_t tmp_size_idx_1; - int32_t n; - - tmp_size_idx_1 = 3; - if ( obj->isCartesian == 0 ) - { - /* Convert Spherical to Cartesian */ - if ( obj->isRadians == 0 ) - { - for ( n = 0; n < loop_ub; n++ ) - { - fcnOutput_data[n] = deg2rad( src_pos_data[k + n] ); - } - } - tmp_data[2] = fcnOutput_data[2] * sinf( fcnOutput_data[1] ); - rcoselev = fcnOutput_data[2] * cosf( fcnOutput_data[1] ); - tmp_data[0] = rcoselev * cosf( fcnOutput_data[0] ); - tmp_data[1] = rcoselev * sinf( fcnOutput_data[0] ); - } - else - { - /* CARTESIAN CASE */ - tmp_size_idx_1 = loop_ub; - for ( n = 0; n < loop_ub; n++ ) - { - tmp_data[n] = src_pos_data[k + n]; - } - if ( obj->isZHeight != 0.0f ) - { - /* FIX Z COORDINATE */ - tmp_data[2] = src_pos_data[k + 2] - ( obj->cal.room_H / 2.0f ); - } - } - - for ( k = 0; k < tmp_size_idx_1; k++ ) - { - obj->src_pos[( coord + k ) - 1] = tmp_data[k]; - } - - /* CENTER TO LISTENER */ - if ( ( out_tmp + 1.0f ) > ( ( out_tmp + 1.0f ) + 2.0f ) ) - { - k = 1; - } - else - { - k = (int32_t) ( (float) ( out_tmp + 1.0f ) ); - } - - tmp_pos[0] = obj->src_pos[k - 1]; - tmp_pos[1] = obj->src_pos[k]; - tmp_pos[2] = obj->src_pos[k + 1]; - - if ( isRelative != 0.0f ) - { - tmp_pos[0] += obj->list_pos[0]; - tmp_pos[1] += obj->list_pos[1]; - tmp_pos[2] += obj->list_pos[2]; - } - - return; -} -#else static void shoebox_get_coord_fx( @@ -566,66 +353,11 @@ static void shoebox_get_coord_fx( } -#endif - - /*-----------------------------------------------------------------------------------------* * Function shoebox_get_euclidian_distance_internal() * * Get 3D source distance from receiver *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static float shoebox_get_euclidian_distance_internal( - shoebox_obj_t *obj, - float *tmp_pos, - float *scale ) -{ - float absxk, out_tmp, t; - - absxk = fabsf( obj->list_pos[0] - tmp_pos[0] ); - - if ( absxk > ER_EUCLIDEAN_SCALE ) - { - out_tmp = 1.0f; - *scale = absxk; - } - else - { - t = absxk / ER_EUCLIDEAN_SCALE; - out_tmp = t * t; - } - - absxk = fabsf( obj->list_pos[1] - tmp_pos[1] ); - - if ( absxk > *scale ) - { - t = *scale / absxk; - out_tmp = ( ( out_tmp * t ) * t ) + 1.0f; - *scale = absxk; - } - else - { - t = absxk / *scale; - out_tmp += t * t; - } - - absxk = fabsf( obj->list_pos[2] - tmp_pos[2] ); - - if ( absxk > *scale ) - { - t = *scale / absxk; - out_tmp = ( ( out_tmp * t ) * t ) + 1.0f; - *scale = absxk; - } - else - { - t = absxk / *scale; - out_tmp += t * t; - } - - return out_tmp; -} -#else static Word32 shoebox_get_euclidian_distance_internal_fx( shoebox_obj_t *obj, Word32 *tmp_pos, // Q22 @@ -695,160 +427,11 @@ static Word32 shoebox_get_euclidian_distance_internal_fx( } -#endif - - /*-----------------------------------------------------------------------------------------* * Function ivas_shoebox_set_scene() * * Initial scene setup returning computed reflection (arrival times, DOA and gain). *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED - -void ivas_shoebox_set_scene( - shoebox_obj_t *obj, - shoebox_output_t *ER_PARAMS, - const float list_pos[3], - const float src_pos_data[], - const uint16_t isCartesian, - const uint16_t isRelative ) -{ - float tmp_pos[3]; - float out_tmp; - int32_t i, j, k, n; - int32_t loop_ub; - /* ------------- SET FLAGS ------------- */ - obj->isCartesian = isCartesian; - obj->isRelative = isRelative; - /* ------------- CHECK DIMENSIONS ------------- */ - if ( ER_PARAMS->n_sources > obj->MAX_SOURCES ) - { - obj->nSrc = obj->MAX_SOURCES; - } - else - { - obj->nSrc = ER_PARAMS->n_sources; - } - /* ---------- RESET DATA HOLDERS ---------- */ - set_f( &obj->src_pos[0], 0.0f, 75U ); - obj->list_pos[0] = list_pos[0]; - obj->list_pos[1] = list_pos[1]; - obj->list_pos[2] = list_pos[2]; - /* ---------- ADJUST LISTENER ------------- */ - if ( obj->isZHeight != 0 ) - { - obj->list_pos[2] = list_pos[2] - ( obj->cal.room_H / 2.0f ); - } - tmp_pos[1] = obj->list_pos[1]; - tmp_pos[2] = obj->list_pos[2]; - - shoebox_bound( obj, obj->list_pos ); - - /* ---------- SOURCE LOOP ------------- */ - i = (int32_t) obj->nSrc; - for ( j = 0; j < i; j++ ) - { - float fcnOutput_data[75]; - float rcoselev; - float scale; - int32_t coord; - /* idx = single(i); */ - out_tmp = 3.0f * ( ( ( (float) j ) + 1.0f ) - 1.0f ); - /* GET COORDINATE IN CARTESIAN ABSOLUTE FORMAT */ - if ( ( out_tmp + 1.0f ) > ( ( out_tmp + 1.0f ) + 2.0f ) ) - { - k = 0; - n = 0; - coord = 1; - } - else - { - k = ( (int32_t) ( (float) ( out_tmp + 1.0f ) ) ) - 1; - n = (int32_t) ( (float) ( ( out_tmp + 1.0f ) + 2.0f ) ); - coord = (int32_t) ( (float) ( out_tmp + 1.0f ) ); - } - loop_ub = n - k; - for ( n = 0; n < loop_ub; n++ ) - { - fcnOutput_data[n] = src_pos_data[k + n]; - } - - shoebox_get_coord( obj, fcnOutput_data, src_pos_data, tmp_pos, out_tmp, coord, loop_ub, k, isRelative ); - - shoebox_bound( obj, tmp_pos ); - - scale = ER_EUCLIDEAN_SCALE; - - out_tmp = shoebox_get_euclidian_distance_internal( obj, tmp_pos, &scale ); - - obj->src_dist[( (int32_t) ( (float) ( ( (float) j ) + 1.0f ) ) ) - 1] = scale * sqrtf( out_tmp ); - - /* COMPUTE PATTERNS */ - - /* SHOEBOX_COMPUTE: fills an input structure (4 array fields of length NxR ) with the */ - /* Early reflection metadata (time of arrival, gain, az, el). */ - /* */ - /* Input: */ - /* 1. obj : Module data holder */ - /* 2. ER_struct : Early reflection structure */ - /* 3. src_num : Index of source to compute patterns for */ - /* ------ */ - out_tmp = obj->src_dist[( (int32_t) ( (float) ( ( (float) j ) + 1.0f ) ) ) - 1]; - for ( loop_ub = 0; loop_ub < 6; loop_ub++ ) - { - float im_pos[3]; - float path_dist; - /* Retrieve coordinate and surface sign */ - coord = ( (int32_t) ceilf( ( ( (float) loop_ub ) + 1.0f ) / 2.0f ) ) - 1; - rcoselev = ( ( (float) loop_ub ) + 1.0f ) + ( ER_PARAMS->n_ref * ( ( ( (float) j ) + 1.0f ) - 1.0f ) ); - /* Initialize image position coordinates */ - im_pos[0] = tmp_pos[0]; - im_pos[1] = tmp_pos[1]; - im_pos[2] = tmp_pos[2]; - /* Calculate image projection coordinate based on current surface axis */ - if ( ( loop_ub + 1 ) < 3 ) - { - scale = obj->cal.room_L; - } - else if ( ( loop_ub + 1 ) < 5 ) - { - scale = obj->cal.room_W; - } - else - { - scale = obj->cal.room_H; - } - im_pos[coord] = - tmp_pos[coord] + - ( 2.0f * ( ( ( ( -( 1.0f - ( fmodf( ( (float) loop_ub ) + 1.0f, 2.0f ) * 2.0f ) ) ) * scale ) / 2.0f ) - tmp_pos[coord] ) ); - /* 0. Get euclidean distance from IMAGE SOURCE [N,W] to LIST */ - scale = ER_EUCLIDEAN_SCALE; - path_dist = shoebox_get_euclidian_distance_internal( obj, im_pos, &scale ); - - path_dist = scale * sqrtf( path_dist ); - /* 1. Compute time-of arrival (TOA) */ - ER_PARAMS->times.data[( (int32_t) rcoselev ) - 1] = path_dist / obj->soundspeed; - /* 2./3. DOA */ - ER_PARAMS->az_angle.data[( (int32_t) rcoselev ) - 1] = - rad2deg( - atan2f( im_pos[1] - obj->list_pos[1], im_pos[0] - obj->list_pos[0] ) ); - ER_PARAMS->el_angle.data[( (int32_t) rcoselev ) - 1] = - rad2deg( - asinf( ( im_pos[2] - obj->list_pos[2] ) / path_dist ) ); - /* 4. Compute gain taking into account air and surface absorption */ - /* and propagation loss */ - if ( path_dist < out_tmp ) - { - path_dist = out_tmp; - } - ER_PARAMS->gains.data[( (int32_t) rcoselev ) - 1] = - ( ( 1.0f - obj->cal.abs_coeff[loop_ub] ) * ( out_tmp / path_dist ) ) - ( path_dist * obj->air_coeff ); - } - } - - return; -} -#else void ivas_shoebox_set_scene( shoebox_obj_t *obj, @@ -1076,4 +659,3 @@ void ivas_shoebox_set_scene( } return; } -#endif diff --git a/lib_rend/ivas_stat_rend.h b/lib_rend/ivas_stat_rend.h index 49808bdd1..a911631a4 100644 --- a/lib_rend/ivas_stat_rend.h +++ b/lib_rend/ivas_stat_rend.h @@ -46,7 +46,6 @@ *----------------------------------------------------------------------------------*/ typedef enum _IVAS_AUDIO_CONFIG AUDIO_CONFIG; -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_output_setup_structure { AUDIO_CONFIG output_config; @@ -64,29 +63,6 @@ typedef struct ivas_output_setup_structure Word16 separateChannelIndex; } IVAS_OUTPUT_SETUP, *IVAS_OUTPUT_SETUP_HANDLE; -#else -typedef struct ivas_output_setup_structure -{ - AUDIO_CONFIG output_config; - int16_t nchan_out_woLFE; /* number of output audio channels without LFE */ - int16_t ambisonics_order; - int8_t is_loudspeaker_setup; - int8_t is_planar_setup; - int8_t is_binaural_setup; - - int16_t num_lfe; - int16_t index_lfe[1]; - const float *ls_azimuth; - const float *ls_elevation; - - const Word32 *ls_azimuth_fx; - const Word32 *ls_elevation_fx; - - uint8_t separateChannelEnabled; - int16_t separateChannelIndex; - -} IVAS_OUTPUT_SETUP, *IVAS_OUTPUT_SETUP_HANDLE; -#endif /*----------------------------------------------------------------------------------* * Time domain decorrelator structures @@ -96,24 +72,15 @@ typedef struct ivas_td_decorr_APD_filt_state_t { Word16 order[IVAS_MAX_DECORR_APD_SECTIONS]; Word16 idx[IVAS_MAX_DECORR_APD_SECTIONS]; -#ifdef IVAS_FLOAT_FIXED Word16 coeffs[IVAS_MAX_DECORR_APD_SECTIONS]; // Q15 Word32 *state[IVAS_MAX_DECORR_APD_SECTIONS]; -#else - float coeffs[IVAS_MAX_DECORR_APD_SECTIONS]; - float *state[IVAS_MAX_DECORR_APD_SECTIONS]; -#endif } ivas_td_decorr_APD_filt_state_t; typedef struct ivas_td_decorr_state_t { ivas_trans_det_state_t *pTrans_det; -#ifdef IVAS_FLOAT_FIXED Word32 *look_ahead_buf; -#else - float *look_ahead_buf; -#endif ivas_td_decorr_APD_filt_state_t APD_filt_state[IVAS_MAX_DECORR_CHS]; Word16 num_apd_outputs; @@ -139,14 +106,9 @@ typedef struct dirac_onset_detection_params_structure typedef struct dirac_onset_detection_state_structure { -#ifndef IVAS_FLOAT_FIXED - float *onset_detector_1; - float *onset_detector_2; -#else Word32 *onset_detector_1_fx; /* Q(q_onset_detector) */ Word32 *onset_detector_2_fx; /* Q(q_onset_detector) */ Word16 q_onset_detector; -#endif } DIRAC_ONSET_DETECTION_STATE; @@ -158,17 +120,10 @@ typedef struct dirac_decorr_params_structure Word16 *pre_delay; Word16 *filter_length; -#ifndef IVAS_FLOAT_FIXED - float *filter_coeff_num_real; - float *filter_coeff_den_real; - float *phase_coeff_real; - float *phase_coeff_imag; -#else Word16 *filter_coeff_num_real_fx; /* Q12 */ Word16 *filter_coeff_den_real_fx; /* Q12 */ Word16 *phase_coeff_real_fx; /* Q14 */ Word16 *phase_coeff_imag_fx; /* Q14 */ -#endif Word16 *split_frequency_bands; Word16 num_split_frequency_bands; @@ -181,19 +136,13 @@ typedef struct dirac_decorr_params_structure typedef struct dirac_decorr_state_structure { -#ifndef IVAS_FLOAT_FIXED - float *decorr_buffer; - float *direct_energy_smooth; - float *reverb_energy_smooth; -#else - Word32 *decorr_buffer_fx; /* Q(q_decorr_buffer) */ + Word32 *decorr_buffer_fx; /* Q(q_decorr_buffer) */ Word16 q_decorr_buffer; Word16 decorr_buffer_len; Word32 *direct_energy_smooth_fx; /* Q(q_direct_energy_smooth) */ Word16 q_direct_energy_smooth; Word32 *reverb_energy_smooth_fx; /* Q(q_reverb_energy_smooth) */ Word16 q_reverb_energy_smooth; -#endif DIRAC_ONSET_DETECTION_STATE h_onset_detection_power_state; @@ -219,26 +168,14 @@ typedef struct ivas_spatial_parametric_rend_common_data_structure Word16 **azimuth2; Word16 **elevation2; -#ifndef IVAS_FLOAT_FIXED - float **diffuseness_vector; - float **energy_ratio1; - float **energy_ratio2; -#else Word32 **diffuseness_vector_fx; Word16 q_diffuseness_vector; - Word32 **energy_ratio1_fx; /* Q30 */ - Word32 **energy_ratio2_fx; /* Q30 */ -#endif - -#ifndef IVAS_FLOAT_FIXED - float **spreadCoherence; - float **spreadCoherence2; - float **surroundingCoherence; -#else + Word32 **energy_ratio1_fx; /* Q30 */ + Word32 **energy_ratio2_fx; /* Q30 */ + Word16 **spreadCoherence_fx; /* Q15 */ Word16 **spreadCoherence2_fx; /* Q15 */ Word16 **surroundingCoherence_fx; /* Q15 */ -#endif /* Metadata access indices and buffer size */ Word16 dirac_bs_md_write_idx; @@ -255,33 +192,16 @@ typedef struct ivas_spatial_parametric_rend_common_data_structure typedef struct dirac_dec_stack_mem { /*Decorrelator*/ -#ifdef IVAS_FLOAT_FIXED Word32 *frame_dec_f_fx; Word16 frame_dec_f_q; Word16 frame_dec_f_len; -#else - float *frame_dec_f; -#endif /*Prototypes*/ -#ifndef IVAS_FLOAT_FIXED - float *proto_direct_buffer_f; - float *proto_diffuse_buffer_f; -#endif /*Prototype NRGs*/ -#ifndef IVAS_FLOAT_FIXED - float *proto_power_smooth; - float *proto_power_diff_smooth; -#endif /*Gain or power factors for directional and diffuse streams*/ -#ifndef IVAS_FLOAT_FIXED - float *direct_power_factor; - float *diffuse_power_factor; -#endif -#ifdef IVAS_FLOAT_FIXED /*Prototypes*/ Word32 *proto_direct_buffer_f_fx; Word32 *proto_diffuse_buffer_f_fx; @@ -297,38 +217,21 @@ typedef struct dirac_dec_stack_mem /*Gain or power factors for directional and diffuse streams*/ Word32 *direct_power_factor_fx; Word32 *diffuse_power_factor_fx; -#endif /*Directional responses (gains & Nrg)*/ -#ifndef IVAS_FLOAT_FIXED - float *direct_responses; - float *direct_responses_square; -#else Word32 *direct_responses_fx; Word32 *direct_responses_square_fx; -#endif /* Target co-variance mtx */ -#ifdef IVAS_FLOAT_FIXED Word32 *cy_auto_dir_smooth_fx; Word32 *cy_cross_dir_smooth_fx; Word32 *cy_auto_diff_smooth_fx; -#else - float *cy_cross_dir_smooth; - float *cy_auto_dir_smooth; - float *cy_auto_diff_smooth; -#endif - -#ifndef IVAS_FLOAT_FIXED - float *reference_power; - float *onset_filter; -#else + Word32 *reference_power_fx; Word16 reference_power_q; Word16 reference_power_smooth_q; Word16 reference_power_len; - Word32 *onset_filter_fx; /* Q31 */ -#endif + Word32 *onset_filter_fx; /* Q31 */ } DIRAC_DEC_STACK_MEM, *DIRAC_DEC_STACK_MEM_HANDLE; @@ -339,106 +242,44 @@ typedef struct dirac_output_synthesis_params_structure Word16 use_onset_filters; -#ifndef IVAS_FLOAT_FIXED - float *interpolator; - float *alpha_synthesis; - float *alpha_synthesis_fast; -#else Word16 *interpolator_fx; /* Q15 */ Word16 *alpha_synthesis_fx; /* Q15 */ Word16 *alpha_synthesis_fast_fx; /* Q15 */ -#endif Word16 numAlphas; Word16 numAlphasFast; -#ifdef IVAS_FLOAT_FIXED Word32 *proto_matrix_fx; Word16 proto_matrix_e; Word16 proto_matrix_len; -#else - float *proto_matrix; -#endif - -#ifndef IVAS_FLOAT_FIXED - float diffuse_compensation_factor; - float diffuse_compensation_factor_decorr; -#else - Word32 diffuse_compensation_factor_fx; /* Q27 */ - Word32 diffuse_compensation_factor_decorr_fx; /* Q29 */ -#endif + + Word32 diffuse_compensation_factor_fx; /* Q27 */ + Word32 diffuse_compensation_factor_decorr_fx; /* Q29 */ } DIRAC_OUTPUT_SYNTHESIS_PARAMS; typedef struct dirac_output_synthesis_state_structure { /* only pointer to local buffers */ -#ifndef IVAS_FLOAT_FIXED - float *direct_responses; /* direct responses for DOA of current frame. Size: num_freq_bands*num_channels. */ - float *direct_responses_square; - float *diffuse_responses_square; /* squared diffuse responses. Size: num_channels. */ -#else Word32 *diffuse_responses_square_fx; /* squared diffuse responses. Size: num_channels. */ /* Q31 */ -#endif /* only pointer to local buffers */ -#ifndef IVAS_FLOAT_FIXED - float *direct_power_factor; - float *diffuse_power_factor; -#endif -#ifndef IVAS_FLOAT_FIXED - float *proto_power_smooth; /* Smoothed power of the prototype signals. Size: num_freq_bands*num_channels. */ - float *proto_power_smooth_prev; /* Smoothed power of the prototype signals of the previous synthesis block. Size: num_freq_bands*num_channels. */ -#endif - -#ifndef IVAS_FLOAT_FIXED - float *proto_power_diff_smooth; - float *proto_power_diff_smooth_prev; -#endif /* only pointer to local buffers */ -#ifndef IVAS_FLOAT_FIXED - float *proto_direct_buffer_f; /* Buffer for direct sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ - float *proto_diffuse_buffer_f; /* Buffer for diffuse sound prototype signals. Size: 2*num_freq_bands*num_channels*buffer_length (complex interleaved). */ -#endif /* Output gain memories */ -#ifndef IVAS_FLOAT_FIXED - float *gains_dir_prev; /* Direct sound gains of current synthesis block. Size: num_freq_bands*num_channel. */ - float *gains_diff_prev; /* Diffuse sound gains of previous synthesis block. Size: num_freq_bands*num_channel. */ -#endif /* only pointer to local buffers */ -#ifndef IVAS_FLOAT_FIXED - float *cy_auto_dir_smooth; /* Target auto PSD of direct sound. Size: num_freq_bands*num_channels. */ - float *cy_cross_dir_smooth; /* Target cross PSD of direct sound. Size: num_freq_bands*num_channels. */ - float *cy_auto_diff_smooth; /* Target auto PSD of diffuse sound. Size: num_freq_bands*num_channels. */ -#endif /* PSD memories */ -#ifndef IVAS_FLOAT_FIXED - float *cy_auto_dir_smooth_prev; /* Target auto PSD of direct sound of previous synthesis block. Size: num_freq_bands*num_channels. */ - float *cy_cross_dir_smooth_prev; /* Target cross PSD of direct sound of previous synthesis block. Size: num_freq_bands*num_channels. */ - float *cy_auto_diff_smooth_prev; /* Target auto PSD of diffuse sound of previous synthesis block. Size: num_freq_bands*num_channels. */ -#endif - -#ifndef IVAS_FLOAT_FIXED - const float *onset_filter; -#else - const Word32 *onset_filter_fx; /* Q31 */ -#endif + + const Word32 *onset_filter_fx; /* Q31 */ /* Temporal smoothing memories */ -#ifndef IVAS_FLOAT_FIXED - float *reference_power_smooth_prev; - float *direction_smoothness_prev; -#else - Word32 *reference_power_smooth_prev_fx; /* Q(reference_power_smooth_prev_q) */ + Word32 *reference_power_smooth_prev_fx; /* Q(reference_power_smooth_prev_q) */ Word16 reference_power_smooth_prev_q; Word32 *direction_smoothness_prev_fx; /* Q31 */ -#endif -#ifdef IVAS_FLOAT_FIXED /* only pointer to local buffers */ Word32 *direct_responses_fx; /* direct responses for DOA of current frame. Size: num_freq_bands*num_channels. */ Word16 direct_responses_q; @@ -510,7 +351,6 @@ typedef struct dirac_output_synthesis_state_structure Word16 cy_auto_dir_smooth_prev_len; /* Target auto PSD of direct sound. Size: num_freq_bands*num_channels. */ Word16 cy_cross_dir_smooth_prev_len; /* Target cross PSD of direct sound. Size: num_freq_bands*num_channels. */ Word16 cy_auto_diff_smooth_prev_len; /* Target auto PSD of diffuse sound. Size: num_freq_bands*num_channels. */ -#endif } DIRAC_OUTPUT_SYNTHESIS_STATE; @@ -523,66 +363,36 @@ typedef struct Word16 dipole_freq_range[2]; -#ifndef IVAS_FLOAT_FIXED - float left_bb_power; - float right_bb_power; - float total_bb_power; -#else - Word32 left_bb_power_fx; /* Q(q_left_bb_power) */ + Word32 left_bb_power_fx; /* Q(q_left_bb_power) */ Word16 q_left_bb_power; Word32 right_bb_power_fx; /* Q(q_right_bb_power) */ Word16 q_right_bb_power; Word32 total_bb_power_fx; /* Q(q_total_bb_power) */ Word16 q_total_bb_power; -#endif -#ifndef IVAS_FLOAT_FIXED - float left_hi_power; - float right_hi_power; - float total_hi_power; -#else Word32 left_hi_power_fx; /* Q(q_left_hi_power) */ Word16 q_left_hi_power; Word32 right_hi_power_fx; /* Q(q_left_hi_power) */ Word16 q_right_hi_power; Word32 total_hi_power_fx; /* Q(q_total_hi_power) */ Word16 q_total_hi_power; -#endif -#ifndef IVAS_FLOAT_FIXED - float sum_power[MASA_SUM_FREQ_RANGE_BINS]; - float total_power[MASA_SUM_FREQ_RANGE_BINS]; -#else Word32 sum_power_fx[MASA_SUM_FREQ_RANGE_BINS]; /* Q(q_sum_power) */ Word16 q_sum_power; Word32 total_power_fx[MASA_SUM_FREQ_RANGE_BINS]; /* Q(q_total_power) */ Word16 q_total_power; -#endif -#ifndef IVAS_FLOAT_FIXED - float subtract_power_y; - float subtract_power_y_smooth; - float target_power_y_smooth; -#else Word32 subtract_power_y_fx; /* Q(q_subtract_power_y) */ Word16 q_subtract_power_y; Word32 subtract_power_y_smooth_fx; /* Q(q_subtract_power_y_smooth) */ Word16 q_subtract_power_y_smooth; Word32 target_power_y_smooth_fx; /* Q(q_target_power_y_smooth) */ Word16 q_target_power_y_smooth; -#endif - -#ifndef IVAS_FLOAT_FIXED - float lr_total_bb_ratio_db; - float lr_total_hi_ratio_db; - float min_sum_total_ratio_db; - float subtract_target_ratio_db; -#else - Word32 lr_total_bb_ratio_db_fx; /* Q21 */ - Word32 lr_total_hi_ratio_db_fx; /* Q21 */ - Word32 min_sum_total_ratio_db_fx; /* Q21 */ - Word32 subtract_target_ratio_db_fx; /* Q21 */ -#endif + + Word32 lr_total_bb_ratio_db_fx; /* Q21 */ + Word32 lr_total_hi_ratio_db_fx; /* Q21 */ + Word32 min_sum_total_ratio_db_fx; /* Q21 */ + Word32 subtract_target_ratio_db_fx; /* Q21 */ Word16 counter; Word16 interpolator; @@ -592,19 +402,9 @@ typedef struct /* McMASA LFE synthesis structure */ typedef struct ivas_mcmasa_lfe_synth_struct { -#ifndef IVAS_FLOAT_FIXED - float lfeToTotalEnergyRatio[MAX_PARAM_SPATIAL_SUBFRAMES]; -#else Word16 lfeToTotalEnergyRatio_fx[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q14 */ -#endif Word16 lfeGainPrevIndex; -#ifndef IVAS_FLOAT_FIXED - float transportEneSmooth; - float protoLfeEneSmooth; - float targetEneLfeSmooth; - float targetEneTransSmooth; -#else - Word32 transportEneSmooth_fx; /* transportEneSmooth_q */ + Word32 transportEneSmooth_fx; /* transportEneSmooth_q */ Word16 transportEneSmooth_q; Word32 protoLfeEneSmooth_fx; /* protoLfeEneSmooth_q */ Word16 protoLfeEneSmooth_q; @@ -612,58 +412,27 @@ typedef struct ivas_mcmasa_lfe_synth_struct Word16 targetEneLfeSmooth_q; Word32 targetEneTransSmooth_fx; /* targetEneTransSmooth_q */ Word16 targetEneTransSmooth_q; -#endif -#ifndef IVAS_FLOAT_FIXED - float *lfeSynthRingBuffer; -#else - Word32 *lfeSynthRingBuffer_fx; /* Q11 */ -#endif + Word32 *lfeSynthRingBuffer_fx; /* Q11 */ Word16 ringBufferLoPointer; Word16 ringBufferHiPointer; -#ifndef IVAS_FLOAT_FIXED - float lowpassSum; -#else - Word32 lowpassSum_fx; /* Q11 */ -#endif + Word32 lowpassSum_fx; /* Q11 */ Word16 ringBufferSize; -#ifndef IVAS_FLOAT_FIXED - float *lfeSynthRingBuffer2; -#else - Word32 *lfeSynthRingBuffer2_fx; /* Q11 */ -#endif + Word32 *lfeSynthRingBuffer2_fx; /* Q11 */ Word16 ringBufferLoPointer2; -#ifndef IVAS_FLOAT_FIXED - float lowpassSum2; -#else - Word32 lowpassSum2_fx; /* Q11 */ -#endif + Word32 lowpassSum2_fx; /* Q11 */ Word16 ringBufferSize2; -#ifndef IVAS_FLOAT_FIXED - float *delayBuffer_syncLp; -#else - Word32 *delayBuffer_syncLp_fx; /* Q11 */ -#endif + Word32 *delayBuffer_syncLp_fx; /* Q11 */ Word16 delayBuffer_syncLp_size; -#ifndef IVAS_FLOAT_FIXED - float *delayBuffer_syncDirAC; -#else - Word32 *delayBuffer_syncDirAC_fx; /* Q11 */ -#endif + Word32 *delayBuffer_syncDirAC_fx; /* Q11 */ Word16 delayBuffer_syncDirAC_size; -#ifndef IVAS_FLOAT_FIXED - float lfeGainPrev; - float transportGainPrev; - float interpolator[CLDFB_NO_CHANNELS_MAX]; -#else - Word16 lfeGainPrev_fx; /* Q15 */ - Word16 transportGainPrev_fx; /* Q15 */ - Word16 interpolator_fx[CLDFB_NO_CHANNELS_MAX]; /* Q15 */ -#endif + Word16 lfeGainPrev_fx; /* Q15 */ + Word16 transportGainPrev_fx; /* Q15 */ + Word16 interpolator_fx[CLDFB_NO_CHANNELS_MAX]; /* Q15 */ } MCMASA_LFE_SYNTH_DATA, *MCMASA_LFE_SYNTH_DATA_HANDLE; @@ -674,27 +443,15 @@ typedef struct ivas_dirac_rend_data_structure /*Parameter estimation*/ Word16 index_buffer_intensity; -#ifndef IVAS_FLOAT_FIXED - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; - float *buffer_energy; -#else Word32 *buffer_intensity_real_fx[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; /* Q(q_buffer_intensity_real[]) */ Word16 q_buffer_intensity_real[DIRAC_NO_COL_AVG_DIFF]; Word32 *buffer_energy_fx; /* Q(q_buffer_energy[]) */ Word16 q_buffer_energy[DIRAC_NO_COL_AVG_DIFF]; -#endif - -#ifndef IVAS_FLOAT_FIXED - float *frequency_axis; - float *diffuse_response_function; - float *hoa_encoder; - const float *hoa_decoder; -#else + Word16 *frequency_axis_fx; /* Q0 */ Word16 *diffuse_response_function_fx; /* Q15 */ Word32 *hoa_encoder_fx; /* Q31 */ const Word32 *hoa_decoder; /* Q29 */ -#endif /*Decoder parameters */ /*Prototypes*/ Word16 num_outputs_dir; @@ -712,17 +469,12 @@ typedef struct ivas_dirac_rend_data_structure Word16 proto_signal_decorr_on; /*Decoder states=memories*/ -#ifndef IVAS_FLOAT_FIXED - float *proto_frame_f; - float *proto_frame_dec_f; -#else - Word32 *proto_frame_f_fx; /* Q(proto_frame_f_q) */ + Word32 *proto_frame_f_fx; /* Q(proto_frame_f_q) */ Word16 proto_frame_f_q; Word16 proto_frame_f_len; Word32 *proto_frame_dec_f_fx; /* Q(proto_frame_dec_f_q) */ Word16 proto_frame_dec_f_q; Word16 proto_frame_dec_f_len; -#endif DIRAC_DEC_STACK_MEM stack_mem; MASA_STEREO_TYPE_DETECT *masa_stereo_type_detect; @@ -749,12 +501,8 @@ typedef struct ivas_dirac_rend_data_structure typedef struct vbap_vs_triplet_structure { UWord8 speaker_node[3]; -#ifndef IVAS_FLOAT_FIXED - float inverse_matrix[3][3]; -#else Word32 inverse_matrix_fx[3][3]; /* Q(q_inverse_matrix) */ Word16 q_inverse_matrix; -#endif } VBAP_VS_TRIPLET; @@ -779,21 +527,12 @@ typedef struct vbap_data_structure Word16 top_virtual_speaker_node_index; /* These indices can be negative */ Word16 bottom_virtual_speaker_node_index; Word16 back_virtual_speaker_node_index; -#ifdef IVAS_FLOAT_FIXED Word16 *bottom_virtual_speaker_node_division_gains_fx; /* Q16 */ Word16 *top_virtual_speaker_node_division_gains_fx; /* Q16 */ Word16 *back_virtual_speaker_node_division_gains_fx; /* Q16 */ Word16 *object_mode_bottom_virtual_speaker_node_division_gains_fx; /* Q16 */ Word16 *object_mode_top_virtual_speaker_node_division_gains_fx; /* Q16 */ Word16 *object_mode_back_virtual_speaker_node_division_gains_fx; /* Q16 */ -#else - float *bottom_virtual_speaker_node_division_gains; - float *top_virtual_speaker_node_division_gains; - float *back_virtual_speaker_node_division_gains; - float *object_mode_bottom_virtual_speaker_node_division_gains; - float *object_mode_top_virtual_speaker_node_division_gains; - float *object_mode_back_virtual_speaker_node_division_gains; -#endif } VBAP_DATA, *VBAP_HANDLE; @@ -804,22 +543,6 @@ typedef struct vbap_data_structure /* Binaural reverberator structure */ typedef struct ivas_binaural_reverb_struct { -#ifndef IVAS_FLOAT_FIXED - float *loopBufReal[CLDFB_NO_CHANNELS_MAX]; - float *loopBufImag[CLDFB_NO_CHANNELS_MAX]; - float preDelayBufferReal[REVERB_PREDELAY_MAX + 1][CLDFB_NO_CHANNELS_MAX]; - float preDelayBufferImag[REVERB_PREDELAY_MAX + 1][CLDFB_NO_CHANNELS_MAX]; - float **tapPointersReal[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; - float **tapPointersImag[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; - - float binauralCoherenceCrossmixGains[CLDFB_NO_CHANNELS_MAX]; - float binauralCoherenceDirectGains[CLDFB_NO_CHANNELS_MAX]; - float reverbEqGains[CLDFB_NO_CHANNELS_MAX]; - float loopAttenuationFactor[CLDFB_NO_CHANNELS_MAX]; - - float *outputBufferReal[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; - float *outputBufferImag[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; -#else Word32 *loopBufReal_fx[CLDFB_NO_CHANNELS_MAX]; Word32 *loopBufImag_fx[CLDFB_NO_CHANNELS_MAX]; Word32 preDelayBufferReal_fx[REVERB_PREDELAY_MAX + 1][CLDFB_NO_CHANNELS_MAX]; @@ -834,7 +557,6 @@ typedef struct ivas_binaural_reverb_struct Word32 *outputBufferReal_fx[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; Word32 *outputBufferImag_fx[CLDFB_NO_CHANNELS_MAX][BINAURAL_CHANNELS]; -#endif Word16 numBins; Word16 useBinauralCoherence; @@ -850,13 +572,8 @@ typedef struct ivas_binaural_reverb_struct UWord32 binRend_RandNext; Word16 highestBinauralCoherenceBin; -#ifndef IVAS_FLOAT_FIXED - float dmxmtx[BINAURAL_CHANNELS][MAX_OUTPUT_CHANNELS]; - float foa_enc[MAX_OUTPUT_CHANNELS][FOA_CHANNELS]; -#else Word32 dmxmtx_fx[BINAURAL_CHANNELS][MAX_OUTPUT_CHANNELS]; Word32 foa_enc_fx[MAX_OUTPUT_CHANNELS][FOA_CHANNELS]; -#endif } REVERB_STRUCT, *REVERB_STRUCT_HANDLE; @@ -864,15 +581,9 @@ typedef struct ivas_binaural_reverb_struct /* Diffuse sound directional distribution data structure */ typedef struct ivas_diffuse_distribution_data_structure { -#ifndef IVAS_FLOAT_FIXED - float diffuseRatioX[CLDFB_NO_CHANNELS_MAX]; - float diffuseRatioY[CLDFB_NO_CHANNELS_MAX]; - float diffuseRatioZ[CLDFB_NO_CHANNELS_MAX]; -#else Word32 diffuseRatioX_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ Word32 diffuseRatioY_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ Word32 diffuseRatioZ_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ -#endif } DIFFUSE_DISTRIBUTION_DATA, *DIFFUSE_DISTRIBUTION_HANDLE; @@ -880,39 +591,8 @@ typedef struct ivas_diffuse_distribution_data_structure /* Parametric binaural data structure */ typedef struct ivas_dirac_dec_binaural_data_structure { -#ifndef IVAS_FLOAT_FIXED - float ChEnePrev[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float ChCrossRePrev[CLDFB_NO_CHANNELS_MAX]; - float ChCrossImPrev[CLDFB_NO_CHANNELS_MAX]; - float ChEne[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float ChCrossRe[CLDFB_NO_CHANNELS_MAX]; - float ChCrossIm[CLDFB_NO_CHANNELS_MAX]; - float ChEneOutPrev[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float ChCrossReOutPrev[CLDFB_NO_CHANNELS_MAX]; - float ChCrossImOutPrev[CLDFB_NO_CHANNELS_MAX]; - float ChEneOut[BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float ChCrossReOut[CLDFB_NO_CHANNELS_MAX]; - float ChCrossImOut[CLDFB_NO_CHANNELS_MAX]; - float processMtxRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float processMtxIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float processMtxDecRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float processMtxDecIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float diffuseFieldCoherence[CLDFB_NO_CHANNELS_MAX]; - float diffuseFieldCoherenceX[BINAURAL_COHERENCE_DIFFERENCE_BINS]; - float diffuseFieldCoherenceY[BINAURAL_COHERENCE_DIFFERENCE_BINS]; - float diffuseFieldCoherenceZ[BINAURAL_COHERENCE_DIFFERENCE_BINS]; - float earlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; -#endif REVERB_STRUCT_HANDLE hReverb; UWord8 renderStereoOutputInsteadOfBinaural; -#ifndef IVAS_FLOAT_FIXED - float frameMeanDiffuseness[CLDFB_NO_CHANNELS_MAX]; - float processMtxRePrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float processMtxImPrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; - float processMtxDecRePrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float processMtxDecImPrev[BINAURAL_CHANNELS][BINAURAL_CHANNELS][CLDFB_NO_CHANNELS_MAX]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 earlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; Word16 q_earlyPartEneCorrection; Word16 processMtxRe_fx[BINAURAL_CHANNELS][BINAURAL_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_CHANNELS_MAX]; @@ -967,14 +647,9 @@ typedef struct ivas_dirac_dec_binaural_data_structure Word32 diffuseFieldCoherenceX_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; Word32 diffuseFieldCoherenceY_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; Word32 diffuseFieldCoherenceZ_fx[BINAURAL_COHERENCE_DIFFERENCE_BINS]; -#endif UWord16 useTdDecorr; ivas_td_decorr_state_t *hTdDecorr; -#ifndef IVAS_FLOAT_FIXED - float reqularizationFactor; -#else - Word16 reqularizationFactor_fx; /* Q14 */ -#endif + Word16 reqularizationFactor_fx; /* Q14 */ DIFFUSE_DISTRIBUTION_HANDLE hDiffuseDist; @@ -982,22 +657,6 @@ typedef struct ivas_dirac_dec_binaural_data_structure HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state; } DIRAC_DEC_BIN_DATA, *DIRAC_DEC_BIN_HANDLE; -#ifndef IVAS_FLOAT_FIXED -typedef struct ivas_binaural_rendering_conv_module_struct -{ - float ***filterTapsLeftReal; - float ***filterTapsLeftImag; - float ***filterTapsRightReal; - float ***filterTapsRightImag; - - float ***filterStatesLeftReal; - float ***filterStatesLeftImag; - - int16_t numTapsArray[BINAURAL_CONVBANDS]; - int16_t numTaps; - -} BINRENDERER_CONV_MODULE, *BINRENDERER_CONV_MODULE_HANDLE; -#else typedef struct ivas_binaural_rendering_conv_module_struct_fx { Word32 ***filterTapsLeftReal_fx; @@ -1013,24 +672,11 @@ typedef struct ivas_binaural_rendering_conv_module_struct_fx Word16 numTaps; } BINRENDERER_CONV_MODULE_FX, *BINRENDERER_CONV_MODULE_HANDLE_FX; -#endif /*----------------------------------------------------------------------------------* * EFAP structures *----------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -typedef struct EFAP_VERTEX -{ - float azi; /* azimuth of the loudspeaker */ - float ele; /* elevation of the loudspeaker */ - float pos[3]; /* [x y z] cartesian coordinate vector */ - int16_t idx; /* integer, that corresponds to the first index for the LS in the 1D output */ - int16_t isNaN; /* used to indicate if the vertex is a virtual speaker */ - EFAP_VTX_DMX_TYPE dmxType; /* virtual speaker downmix type */ - -} EFAP_VERTEX; -#else typedef struct EFAP_VERTEX { Word32 azi; /* azimuth of the loudspeaker */ /* Q22 */ @@ -1041,7 +687,6 @@ typedef struct EFAP_VERTEX EFAP_VTX_DMX_TYPE dmxType; /* virtual speaker downmix type */ } EFAP_VERTEX; -#endif typedef struct EFAP_VERTEX_DATA { @@ -1050,17 +695,6 @@ typedef struct EFAP_VERTEX_DATA Word16 *vtxOrder; /* Array that indicates the order of the vertex ranked by increasing azimuth */ } EFAP_VERTEX_DATA; -#ifndef IVAS_FLOAT_FIXED -typedef struct EFAP_POLYSET -{ - int16_t chan[EFAP_MAX_CHAN_NUM]; /* An array indicating the loudspeaker index of the polygon vertices */ - int16_t isNaN[EFAP_MAX_CHAN_NUM]; /* Indicates if one of the vertices isNaN */ - int16_t numChan; /* An integer between 0 and EFAP_MAX_CHAN_NUM corresponding to the number of vertices of the polygon */ - float polyAzi[EFAP_MAX_CHAN_NUM]; /* An array (same length as "chan"), with the azimuth of the channels */ - float polyEle[EFAP_MAX_CHAN_NUM]; /* An array (same length as "chan"), with the elevation of the channels */ - -} EFAP_POLYSET; -#else typedef struct EFAP_POLYSET { Word16 chan[EFAP_MAX_CHAN_NUM]; /* An array indicating the loudspeaker index of the polygon vertices */ @@ -1070,7 +704,6 @@ typedef struct EFAP_POLYSET Word32 polyEle[EFAP_MAX_CHAN_NUM]; /* An array (same length as "chan"), with the elevation of the channels */ /* Q22 */ } EFAP_POLYSET; -#endif typedef struct EFAP_LS_TRIANGLE { Word16 LS[3]; /* Array indicating the loudspeaker index of the triangle vertices */ @@ -1088,26 +721,15 @@ typedef struct EFAP_POLYSET_DATA typedef struct EFAP { - Word16 numSpk; /* Number of loudspeakers */ -#ifndef IVAS_FLOAT_FIXED - float *aziSpk; /* Loudspeaker azimuths */ - float *eleSpk; /* Loudspeaker elevations */ -#else + Word16 numSpk; /* Number of loudspeakers */ Word32 *aziSpk; /* Loudspeaker azimuths */ /* Q22 */ Word32 *eleSpk; /* Loudspeaker elevations */ /* Q22 */ -#endif - EFAP_VERTEX_DATA vtxData; /* Vertex Data, contains all the data concerning the vertex */ - EFAP_POLYSET_DATA polyData; /* Polygon data */ -#ifndef IVAS_FLOAT_FIXED - float **dmTranspose; /* Downmix Matrix used for redistributing the energy of ghosts LS and its transpose */ - float *bufferLong; /* tmp buffer that will be given as a parameter for computing the gain; this is a 1D array of length numVtx */ - float *bufferShort; /* tmp buffer that will be given as a parameter for computing the gain; this is the result of downMixMatrix*bufferLong, length is numSpk */ -#else + EFAP_VERTEX_DATA vtxData; /* Vertex Data, contains all the data concerning the vertex */ + EFAP_POLYSET_DATA polyData; /* Polygon data */ Word32 **dmTranspose_fx; /* Downmix Matrix used for redistributing the energy of ghosts LS and its transpose */ /* Q31 */ Word32 *bufferLong_fx; /* tmp buffer that will be given as a parameter for computing the gain; this is a 1D array of length numVtx */ Word32 *bufferShort_fx; /* tmp buffer that will be given as a parameter for computing the gain; this is the result of downMixMatrix*bufferLong, length is numSpk */ -#endif - Word16 numTot; /* Total number of real + ghost loudspeakers, used later for freeing memory */ + Word16 numTot; /* Total number of real + ghost loudspeakers, used later for freeing memory */ } EFAP, *EFAP_HANDLE; @@ -1118,22 +740,12 @@ typedef struct EFAP typedef struct ivas_orient_trk_state_t { IVAS_HEAD_ORIENT_TRK_T orientation_tracking; -#ifndef IVAS_FLOAT_FIXED - float centerAdaptationRate; - float offCenterAdaptationRate; - float adaptationAngle; -#else - Word32 centerAdaptationRate_fx; /* Q31 */ - Word32 offCenterAdaptationRate_fx; /* Q31 */ - Word32 adaptationAngle_fx; /* Q29 */ -#endif - -#ifndef IVAS_FLOAT_FIXED - float alpha; -#else - Word32 alpha_fx; /* Q(Q_alpha) */ + Word32 centerAdaptationRate_fx; /* Q31 */ + Word32 offCenterAdaptationRate_fx; /* Q31 */ + Word32 adaptationAngle_fx; /* Q29 */ + + Word32 alpha_fx; /* Q(Q_alpha) */ Word16 Q_alpha; -#endif IVAS_QUATERNION absAvgRot; /* average absolute orientation */ IVAS_QUATERNION refRot; /* reference orientation */ IVAS_QUATERNION trkRot; /* tracked rotation */ @@ -1149,11 +761,7 @@ typedef struct Word8 headRotEnabled; IVAS_QUATERNION headPositions[MAX_PARAM_SPATIAL_SUBFRAMES]; IVAS_VECTOR3 Pos[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifdef IVAS_FLOAT_FIXED Word32 crossfade_fx[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; /* Q31 */ -#else - float crossfade[L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif ivas_orient_trk_state_t *hOrientationTracker; } IVAS_REND_HeadRotData; @@ -1162,27 +770,15 @@ typedef struct ivas_binaural_head_track_struct { IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES]; IVAS_VECTOR3 Pos[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifndef IVAS_FLOAT_FIXED - float Rmat[3][3]; - float Rmat_prev[3][3]; -#else Word32 Rmat_fx[3][3]; Word32 Rmat_prev_fx[3][3]; -#endif UWord8 lrSwitchedNext; UWord8 lrSwitchedCurrent; -#ifndef IVAS_FLOAT_FIXED - float lrSwitchInterpVal; - - float chEneIIR[2][MASA_FREQUENCY_BANDS]; /* independent of the format. MASA bands are suitable for the task and readily available in ROM. */ - float procChEneIIR[2][MASA_FREQUENCY_BANDS]; -#else Word32 lrSwitchInterpVal_fx; Word32 chEneIIR_fx[2][MASA_FREQUENCY_BANDS]; /* independent of the format. MASA bands are suitable for the task and readily available in ROM. */ Word32 procChEneIIR_fx[2][MASA_FREQUENCY_BANDS]; -#endif Word16 shd_rot_max_order; ivas_orient_trk_state_t *OrientationTracker; @@ -1192,7 +788,6 @@ typedef struct ivas_binaural_head_track_struct /*----------------------------------------------------------------------------------* * External orientation data structure *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_external_orientation_struct { Word8 enableHeadRotation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* 0 - disable, 1 - enable, 2 - freeze to previous rotation */ @@ -1203,58 +798,29 @@ typedef struct ivas_external_orientation_struct Word16 num_subframes; } EXTERNAL_ORIENTATION_DATA, *EXTERNAL_ORIENTATION_HANDLE; -#else -typedef struct ivas_external_orientation_struct -{ - int8_t enableHeadRotation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* 0 - disable, 1 - enable, 2 - freeze to previous rotation */ - int8_t enableExternalOrientation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* 0 - disable, 1 - enable, 2 - freeze to previous orientation */ - int8_t enableRotationInterpolation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* 0 - disable, 1 - enable */ - int16_t numFramesToTargetOrientation[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Number of frames until target orientation is reached */ - IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES]; /* External orientation in quaternions */ - int16_t num_subframes; - -} EXTERNAL_ORIENTATION_DATA, *EXTERNAL_ORIENTATION_HANDLE; -#endif /*----------------------------------------------------------------------------------* * Combined orientation data structure for the external orienations and head orientation *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_combined_orientation_struct { Word16 enableCombinedOrientation[MAX_PARAM_SPATIAL_SUBFRAMES]; -#ifndef IVAS_FLOAT_FIXED - float interpolationCoefficient; - float interpolationIncrement; -#else - Word32 lrSwitchInterpVal_fx; /* Q30 */ - Word32 interpolationCoefficient_fx; /* Q30 */ -#endif + Word32 lrSwitchInterpVal_fx; /* Q30 */ + Word32 interpolationCoefficient_fx; /* Q30 */ Word16 maximumFramesToTargetOrientation; UWord8 lrSwitchedNext; UWord8 lrSwitchedCurrent; -#ifndef IVAS_FLOAT_FIXED - float lrSwitchInterpVal; -#else - Word32 interpolationIncrement_fx; /* Q30 */ -#endif + Word32 interpolationIncrement_fx; /* Q30 */ bool isInterpolationOngoing; IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES]; IVAS_QUATERNION Quaternion_prev_extOrientation; IVAS_QUATERNION Quaternions_ext_interpolation_start; IVAS_QUATERNION Quaternions_ext_interpolation_target; -#ifndef IVAS_FLOAT_FIXED - float Rmat[MAX_PARAM_SPATIAL_SUBFRAMES][3][3]; - float Rmat_prev[3][3]; - float chEneIIR[2][MASA_FREQUENCY_BANDS]; /* independent of the format. MASA bands are suitable for the task and readily available in ROM. */ - float procChEneIIR[2][MASA_FREQUENCY_BANDS]; -#else Word32 Rmat_fx[MAX_PARAM_SPATIAL_SUBFRAMES][3][3]; /* Q30 */ Word32 Rmat_prev_fx[3][3]; /* Q30 */ Word32 chEneIIR_fx[2][MASA_FREQUENCY_BANDS]; /* independent of the format. MASA bands are suitable for the task and readily available in ROM. */ /* Q(q_chEneIIR) */ Word16 q_chEneIIR; Word32 procChEneIIR_fx[2][MASA_FREQUENCY_BANDS]; /* Q(q_procChEneIIR) */ Word16 q_procChEneIIR; -#endif Word16 shd_rot_max_order; IVAS_VECTOR3 listenerPos[MAX_PARAM_SPATIAL_SUBFRAMES]; IVAS_QUATERNION Quaternion_frozen_ext; @@ -1268,40 +834,6 @@ typedef struct ivas_combined_orientation_struct Word16 subframe_idx_start; Word16 cur_subframe_samples_rendered_start; } COMBINED_ORIENTATION_DATA, *COMBINED_ORIENTATION_HANDLE; -#else -typedef struct ivas_combined_orientation_struct -{ - int16_t enableCombinedOrientation[MAX_PARAM_SPATIAL_SUBFRAMES]; - float interpolationCoefficient; - float interpolationIncrement; - int16_t maximumFramesToTargetOrientation; - uint8_t lrSwitchedNext; - uint8_t lrSwitchedCurrent; - float lrSwitchInterpVal; - bool isInterpolationOngoing; - IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES]; - IVAS_QUATERNION Quaternion_prev_extOrientation; - IVAS_QUATERNION Quaternions_ext_interpolation_start; - IVAS_QUATERNION Quaternions_ext_interpolation_target; - float Rmat[MAX_PARAM_SPATIAL_SUBFRAMES][3][3]; - float Rmat_prev[3][3]; - float chEneIIR[2][MASA_FREQUENCY_BANDS]; /* independent of the format. MASA bands are suitable for the task and readily available in ROM. */ - float procChEneIIR[2][MASA_FREQUENCY_BANDS]; - int16_t shd_rot_max_order; - IVAS_VECTOR3 listenerPos[MAX_PARAM_SPATIAL_SUBFRAMES]; - IVAS_QUATERNION Quaternion_frozen_ext; - IVAS_QUATERNION Quaternion_frozen_head; - int8_t isExtOrientationFrozen; - int8_t isHeadRotationFrozen; - int16_t num_subframes; - int16_t subframe_idx; - int16_t subframe_size; - int16_t cur_subframe_samples_rendered; - int16_t subframe_idx_start; - int16_t cur_subframe_samples_rendered_start; - -} COMBINED_ORIENTATION_DATA, *COMBINED_ORIENTATION_HANDLE; -#endif /*----------------------------------------------------------------------------------* * Reverberator structure @@ -1312,19 +844,11 @@ typedef struct _IVAS_RENDER_CONFIG *RENDER_CONFIG_HANDLE; typedef struct ivas_rev_delay_line_t { -#ifndef IVAS_FLOAT_FIXED - float *pBuffer; -#else Word32 *pBuffer_fx; -#endif UWord16 MaxDelay; Word16 Delay; UWord16 BufferPos; -#ifndef IVAS_FLOAT_FIXED - float Gain; -#else Word16 Gain_fx; // Q14 -#endif } ivas_rev_delay_line_t; typedef struct ivas_rev_iir_filter_t @@ -1332,22 +856,14 @@ typedef struct ivas_rev_iir_filter_t UWord16 MaxTaps; UWord16 nr_taps; UWord16 isFIR; -#ifndef IVAS_FLOAT_FIXED - float Output; - float CoefA[IVAS_REV_MAX_IIR_FILTER_LENGTH]; - float CoefB[IVAS_REV_MAX_IIR_FILTER_LENGTH]; - float pBuffer[IVAS_REV_MAX_IIR_FILTER_LENGTH]; -#else Word32 Output_fx; Word32 CoefA_fx[IVAS_REV_MAX_IIR_FILTER_LENGTH]; /* Q30 */ Word32 CoefB_fx[IVAS_REV_MAX_IIR_FILTER_LENGTH]; /* Q30 */ Word32 pBuffer_fx[IVAS_REV_MAX_IIR_FILTER_LENGTH]; -#endif } ivas_rev_iir_filter_t; -typedef float rv_fftwf_type_complex[2]; /* complex type of fftwf library */ -#ifdef IVAS_FLOAT_FIXED +typedef float rv_fftwf_type_complex[2]; /* complex type of fftwf library */ typedef Word32 rv_fftwf_type_complex_fx[2]; /* complex type of fftwf library */ /* Convertion block for FFT filter: from time domain to frequency domain (with OLS) and back */ typedef struct ivas_reverb_t2f_f2t_t @@ -1362,28 +878,11 @@ typedef struct ivas_reverb_t2f_f2t_t Word32 fft_history_R_fx[RV_FILTER_MAX_HISTORY]; } ivas_reverb_t2f_f2t_t; -#else -/* Convertion block for FFT filter: from time domain to frequency domain (with OLS) and back */ -typedef struct ivas_reverb_t2f_f2t_t -{ - int16_t fft_size; - int16_t log2_fft_size; - int16_t block_size; - int16_t hist_size; /* rv_fft_size - rv_block_size */ - float fft_history_L[RV_FILTER_MAX_HISTORY]; - float fft_history_R[RV_FILTER_MAX_HISTORY]; - -} ivas_reverb_t2f_f2t_t; -#endif -#ifdef IVAS_FLOAT_FIXED /* FFT filter with its frequency response coefficients */ typedef struct ivas_reverb_fft_filter_t { Word16 fft_size; Word32 fft_spectrum_fx[RV_FILTER_MAX_FFT_SIZE]; -#ifndef IVAS_FLOAT_FIXED - float fft_spectrum[RV_FILTER_MAX_FFT_SIZE]; -#endif } ivas_reverb_fft_filter_t; @@ -1416,48 +915,6 @@ typedef struct ivas_reverb_state_t UWord16 full_block_size; /* full block processing size */ } REVERB_DATA, *REVERB_HANDLE; -#else -/* FFT filter with its frequency response coefficients */ -typedef struct ivas_reverb_fft_filter_t -{ - int16_t fft_size; - float fft_spectrum[RV_FILTER_MAX_FFT_SIZE]; - -} ivas_reverb_fft_filter_t; - -typedef struct ivas_reverb_state_t -{ - RENDER_CONFIG_DATA pConfig; - - /* input downmixer: */ - float dmx_gain; /* downmix gain */ - - /* predelay: */ - ivas_rev_delay_line_t predelay_line; - float *pPredelay_buffer; - - /* jot reverberator: */ - uint16_t nr_of_branches; /* number of feedback loops */ - ivas_rev_delay_line_t delay_line[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop delays */ - float *loop_delay_buffer[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop delay sample buffers */ - ivas_rev_iir_filter_t t60[IVAS_REV_MAX_NR_BRANCHES]; /* feedback loop filters */ - float gain_matrix[IVAS_REV_MAX_NR_BRANCHES][IVAS_REV_MAX_NR_BRANCHES]; /* feedback matrix */ - float mixer[BINAURAL_CHANNELS][IVAS_REV_MAX_NR_BRANCHES]; /* output mixer matrix */ - - /* binauralization filters: */ - int16_t do_corr_filter; - ivas_reverb_t2f_f2t_t fft_filter_ols; - ivas_reverb_fft_filter_t fft_filter_correl_0; - ivas_reverb_fft_filter_t fft_filter_correl_1; - ivas_reverb_fft_filter_t fft_filter_color_0; - ivas_reverb_fft_filter_t fft_filter_color_1; - uint16_t fft_size; /* fft processing size */ - uint16_t fft_subblock_size; /* fft block processing size */ - uint16_t num_fft_subblocks; /* number of fft subblocks */ - uint16_t full_block_size; /* full block processing size */ - -} REVERB_DATA, *REVERB_HANDLE; -#endif /*----------------------------------------------------------------------------------* * Shoebox structure @@ -1466,19 +923,11 @@ typedef struct ivas_reverb_state_t /* Structure to hold the original bitstream metadata */ typedef struct { -#ifndef IVAS_FLOAT_FIXED - float room_L; - float room_W; - float room_H; - float abs_coeff[IVAS_ROOM_ABS_COEFF]; - float list_orig[3]; -#else Word32 room_L_fx; // Q22 Word32 room_W_fx; // Q22 Word32 room_H_fx; // Q22 Word32 abs_coeff_fx[IVAS_ROOM_ABS_COEFF]; // Q30 Word32 list_orig_fx[3]; // Q22 -#endif } shoebox_config_t; /* Structure to hold the corrected( bounded ) source and listener positions */ @@ -1492,23 +941,13 @@ typedef struct UWord16 max_bands; UWord16 REF_ORDER; -#ifndef IVAS_FLOAT_FIXED - float src_pos[75]; - float src_dist[25]; - float list_pos[3]; - float radius; - float min_wall_dist; - float soundspeed; - float air_coeff; -#else - Word32 src_dist_fx[25]; // Q22 - Word32 list_pos_fx[3]; // Q22 - Word32 src_pos_fx[75]; // Q22 - Word32 radius_fx; // Q30 - Word32 min_wall_dist_fx; // Q22 - Word32 soundspeed_fx; // Q31 - Word32 air_coeff_fx; // Q31 -#endif // IVAS_FLOAT_FIXED + Word32 src_dist_fx[25]; // Q22 + Word32 list_pos_fx[3]; // Q22 + Word32 src_pos_fx[75]; // Q22 + Word32 radius_fx; // Q30 + Word32 min_wall_dist_fx; // Q22 + Word32 soundspeed_fx; // Q31 + Word32 air_coeff_fx; // Q31 UWord16 nSrc; shoebox_config_t cal; @@ -1517,11 +956,7 @@ typedef struct typedef struct shoebox_data_t { -#ifndef IVAS_FLOAT_FIXED - float data[150]; -#else - Word32 data_fx[150]; // Q22 -#endif + Word32 data_fx[150]; // Q22 Word32 size[1]; } shoebox_data_t; @@ -1558,17 +993,10 @@ typedef struct er_struct_t UWord16 is_cartesian; UWord16 is_relative; UWord32 max_frame_size; -#ifdef IVAS_FLOAT_FIXED Word32 output_Fs_fx; Word32 source_positions_fx[75]; Word32 user_origin_fx[3]; // is not needed Word32 *circ_buffers; -#else - float source_positions[75]; - float user_origin[3]; - float output_Fs; - float *circ_buffers; -#endif UWord16 *closest_ch_idx; @@ -1603,7 +1031,6 @@ typedef struct const Word16 *azimShapeIdx; const Word16 *azimShapeSampFactor; -#ifdef IVAS_FLOAT_FIXED const Word32 *elevKSeq_fx; /* Array, N x elevDim2 x elevDim3 */ const Word32 *elevBsShape_fx; const Word32 **azimBsShape_fx; @@ -1616,30 +1043,11 @@ typedef struct Word16 EL_e; const Word32 *ER_fx; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ Word16 ER_e; -#else - const float *elevKSeq; /* Array, N x elevDim2 x elevDim3 */ - const float *AlphaL; /* Array, size AlphaN x K */ - const float *AlphaR; /* Array, size AlphaN x K */ - const float *elevBsShape; - float **azimKSeq; /* Array, length azimDim3+1 */ - const float **azimBsShape; -#endif // IVAS_FLOAT_FIXED Word16 azimDim3Max; Word16 iSecFirst[HRTF_MODEL_N_SECTIONS]; /* Indices for start of sections */ Word16 iSecLast[HRTF_MODEL_N_SECTIONS]; /* Indices for end of sections */ -#ifndef IVAS_FLOAT_FIXED - const float *EL; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ - const float *ER; /* Array, size (AlphaN*HRTF_MODEL_N_SECTIONS) */ -#endif /* Pointers for allocation of dynamic memory */ -#ifndef IVAS_FLOAT_FIXED - float *AlphaL_dyn; - float *AlphaR_dyn; - float *EL_dyn; - float *ER_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *AlphaL_dyn_fx; Word32 *AlphaR_dyn_fx; Word16 AlphaL_dyn_e; @@ -1648,25 +1056,15 @@ typedef struct Word16 EL_dyn_e; Word32 *ER_dyn_fx; Word16 ER_dyn_e; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *elevBsShape_dyn_fx; Word32 *elevKSeq_dyn_fx; -#else - float *elevKSeq_dyn; - float *elevBsShape_dyn; -#endif Word16 *azimDim2_dyn; Word16 *azimDim3_dyn; Word16 *azim_start_idx_dyn; Word16 *azimSegSamples_dyn; Word16 *azimShapeIdx_dyn; Word16 *azimShapeSampFactor_dyn; -#ifdef IVAS_FLOAT_FIXED Word32 **azimBsShape_dyn_fx; -#else - float **azimBsShape_dyn; -#endif } ModelParams_t; @@ -1676,73 +1074,37 @@ typedef struct Word16 elevDim2; Word16 elevDim3; -#ifndef IVAS_FLOAT_FIXED - const float *elevKSeq; /* Array, length elevDim3-2 */ -#endif Word16 azimDim2; Word16 azimDim3; -#ifndef IVAS_FLOAT_FIXED - const float *azimKSeq; /* Array, length azimDim3-2 */ - const float *W; /* Array, size (elevDim3*azimDim3) x K */ -#endif Word16 azimBsLen[HRTF_MODEL_BSPLINE_NUM_COEFFS]; Word16 azimBsStart[HRTF_MODEL_BSPLINE_NUM_COEFFS]; -#ifndef IVAS_FLOAT_FIXED - const float *azimBsShape; -#endif Word16 azimSegSamples; Word16 elevBsLen[HRTF_MODEL_BSPLINE_NUM_COEFFS]; Word16 elevBsStart[HRTF_MODEL_BSPLINE_NUM_COEFFS]; -#ifndef IVAS_FLOAT_FIXED - const float *elevBsShape; -#endif Word16 elevSegSamples; -#ifndef IVAS_FLOAT_FIXED - float resamp_factor; -#else - Word16 resamp_factor_fx; /*Q14*/ -#endif -#ifdef IVAS_FLOAT_FIXED + Word16 resamp_factor_fx; /*Q14*/ const Word32 *elevKSeq_fx; /* Array, length elevDim3-2 */ const Word32 *azimKSeq_fx; /* Array, length azimDim3-2 */ const Word32 *W_fx; /* Array, size (elevDim3*azimDim3) x K */ Word16 W_e; const Word32 *azimBsShape_fx; const Word32 *elevBsShape_fx; -#endif // IVAS_FLOAT_FIXED /* Pointers for allocation of dynamic memory */ -#ifdef IVAS_FLOAT_FIXED Word32 *elevKSeq_dyn_fx; Word32 *azimKSeq_dyn_fx; -#else - float *elevKSeq_dyn; - float *azimKSeq_dyn; - float *W_dyn; - float *azimBsShape_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *W_dyn_fx; Word16 W_dyn_e; Word32 *azimBsShape_dyn_fx; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *elevBsShape_dyn_fx; -#else - float *elevBsShape_dyn; -#endif } ModelParamsITD_t; typedef struct { -#ifndef IVAS_FLOAT_FIXED - float val; -#else Word32 val_fx; -#endif Word16 i; } ValueIndex_t; @@ -1750,25 +1112,11 @@ typedef struct /* Shared memory for use when evaluating BSpline HR filter model*/ typedef struct { -#ifndef IVAS_FLOAT_FIXED - float BM[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; -#else Word32 BM_fx[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; // Q30 -#endif ValueIndex_t BMEnergiesL[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; ValueIndex_t BMEnergiesR[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; Word16 UseIndsL[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; Word16 UseIndsR[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; -#ifndef IVAS_FLOAT_FIXED - float *hrfModL; - float *hrfModR; - float elevBfVec[HRTF_MODEL_BSPLINE_NUM_COEFFS]; - float azimBfVec[HRTF_MODEL_BSPLINE_NUM_COEFFS][HRTF_MODEL_BSPLINE_NUM_COEFFS]; - float BM_ITD[HRTF_MODEL_BSPLINE_NUM_COEFFS_SQ]; - float elevBfVecITD[HRTF_MODEL_BSPLINE_NUM_COEFFS]; - float azimBfVecITD[HRTF_MODEL_BSPLINE_NUM_COEFFS]; - float itdMod; -#else Word32 *hrfModL_fx; Word32 *hrfModR_fx; Word16 hrfModL_e; @@ -1779,7 +1127,6 @@ typedef struct Word32 elevBfVecITD_fx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; // Q30 Word32 azimBfVecITD_fx[HRTF_MODEL_BSPLINE_NUM_COEFFS]; // Q30 Word32 itdMod_fx; -#endif } ModelEval_t; @@ -1787,20 +1134,12 @@ typedef struct typedef struct { Word16 PoseUpdated; -#ifdef IVAS_FLOAT_FIXED Word32 Pos_fx[3]; Word16 Pos_q; Word32 Front_fx[3]; Word32 Up_fx[3]; Word32 Right_fx[3]; Word32 Vel_fx[3]; -#else - float Pos[3]; - float Front[3]; - float Up[3]; - float Right[3]; - float Vel[3]; -#endif // IVAS_FLOAT_FIXED Word16 VelUpdated; @@ -1812,40 +1151,21 @@ typedef struct TDREND_HRFILT_FiltSet_struct Word32 SampleRate; /* Sample rate of the HR filter */ Word16 NumPos; Word16 NumElev; -#ifndef IVAS_FLOAT_FIXED - float Dist; - float *ItdSet_p; -#else Word32 Dist_fx; Word32 *ItdSet_p_fx; -#endif Word16 FiltLength; -#ifndef IVAS_FLOAT_FIXED - float *Azim_p; - float *Elev_p; - float *ItdSetNominal_p; - float *LeftFiltSet_p; - float *RightFiltSet_p; -#else Word16 *Azim_p_fx; Word16 *Elev_p_fx; Word16 *ItdSetNominal_p_fx; Word16 *LeftFiltSet_p_fx; Word16 *RightFiltSet_p_fx; -#endif ModelParams_t ModelParams; ModelEval_t ModelEval; ModelParamsITD_t ModelParamsITD; - TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ -#ifndef IVAS_FLOAT_FIXED - float latency_s; - const float *lr_energy_and_iac[3]; /* left/right energy and interaural coherence for late reverb */ - float *lr_energy_and_iac_dyn[3]; -#else + TDREND_HRFILT_Method_t FilterMethod; /* HR filtering method */ Word32 latency_s_fx; /* Q31 */ const Word32 *lr_energy_and_iac_fx[3]; /* left/right energy and interaural coherence for late reverb */ Word32 *lr_energy_and_iac_dyn_fx[3]; -#endif // IVAS_FLOAT_FIXED } TDREND_HRFILT_FiltSet_t; @@ -1853,30 +1173,18 @@ typedef struct TDREND_HRFILT_FiltSet_struct typedef struct { TDREND_DistAttenModel_t DistAttenModel; -#ifndef IVAS_FLOAT_FIXED - float RefDist; - float MaxDist; - float RollOffFactor; -#else - Word32 RefDist_fx; /* Q30 */ - Word32 MaxDist_fx; /* Q27 */ - Word32 RollOffFactor_fx; /* Q30 */ -#endif // IVAS_FLOAT_FIXED- + Word32 RefDist_fx; /* Q30 */ + Word32 MaxDist_fx; /* Q27 */ + Word32 RollOffFactor_fx; /* Q30 */ } TDREND_DistAtten_t; /* Directional attenuation */ typedef struct { -#ifndef IVAS_FLOAT_FIXED - float ConeInnerAngle; - float ConeOuterAngle; - float ConeOuterGain; -#else Word32 ConeInnerAngle_fx; // Q22 Word32 ConeOuterAngle_fx; // Q22 Word32 ConeOuterGain_fx; // Q30 -#endif // IVAS_FLOAT_FIXED } TDREND_DirAtten_t; @@ -1895,19 +1203,11 @@ typedef struct TDREND_SRC_REND_s /* Gains */ Word16 SrcGainUpdated; -#ifdef IVAS_FLOAT_FIXED Word16 SrcGain_p_fx[SPAT_BIN_MAX_INPUT_CHANNELS]; // Q14 Word16 SrcGainMin_p_fx[SPAT_BIN_MAX_INPUT_CHANNELS]; Word16 SrcGainMax_p_fx[SPAT_BIN_MAX_INPUT_CHANNELS]; Word16 DirGain_p_fx[SPAT_BIN_MAX_INPUT_CHANNELS]; // Q14 Word16 DistGain_p_fx[SPAT_BIN_MAX_INPUT_CHANNELS]; // Q14 -#else // IVAS_FLOAT_FIXED - float SrcGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; - float SrcGainMin_p[SPAT_BIN_MAX_INPUT_CHANNELS]; - float SrcGainMax_p[SPAT_BIN_MAX_INPUT_CHANNELS]; - float DirGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; - float DistGain_p[SPAT_BIN_MAX_INPUT_CHANNELS]; -#endif } TDREND_SRC_REND_t; /* Source spatial parameters */ @@ -1915,15 +1215,9 @@ typedef struct { Word16 Updated; TDREND_PosType_t PosType; -#ifndef IVAS_FLOAT_FIXED - float Pos_p[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; - float Front_p[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 Pos_p_fx[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; // Q25 Word16 q_Pos_p; Word32 Front_p_fx[3 * SPAT_BIN_MAX_INPUT_CHANNELS]; // Q30 -#endif // IVAS_FLOAT_FIXED Word16 DirAttenEnabled; TDREND_DirAtten_t DirAtten; Word16 DistAttenEnabled; @@ -1933,17 +1227,12 @@ typedef struct typedef struct { -#ifndef IVAS_FLOAT_FIXED - float *InputFrame_p; /* Input frame pointer */ -#else Word32 *InputFrame_p_fx; /* Input frame pointer */ /* Q11 */ -#endif TDREND_SRC_SPATIAL_t *SrcSpatial_p; TDREND_SRC_REND_t *SrcRend_p; Word16 itd; Word16 previtd; Word16 filterlength; -#ifdef IVAS_FLOAT_FIXED Word32 mem_itd_fx[ITD_MEM_LEN]; /* Q11 */ Word32 mem_hrf_left_fx[SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; Word32 mem_hrf_right_fx[SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; @@ -1955,17 +1244,6 @@ typedef struct Word32 elev_prev_fx; Word16 Gain_fx; // Q14 Word16 prevGain_fx; // Q14 -#else - float mem_itd[ITD_MEM_LEN]; - float azim_prev; - float hrf_left_prev[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - float hrf_right_prev[SFX_SPAT_BIN_MAX_FILTER_LENGTH]; - float elev_prev; - float mem_hrf_left[SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; - float mem_hrf_right[SFX_SPAT_BIN_MAX_FILTER_LENGTH - 1]; - float Gain; - float prevGain; -#endif // IVAS_FLOAT_FIXED } TDREND_SRC_t; @@ -1978,11 +1256,7 @@ typedef struct ivas_binaural_td_rendering_struct Word16 MaxSrcInd; TDREND_SRC_t *Sources[MAX_NUM_TDREND_CHANNELS]; -#ifdef IVAS_FLOAT_FIXED Word16 Gain_fx; /* Q14 */ -#else - float Gain; /* Mixer gain */ -#endif // IVAS_FLOAT_FIXED TDREND_MIX_Listener_t *Listener_p; /* The virtual listener */ TDREND_HRFILT_FiltSet_t *HrFiltSet_p; /* HR filter set */ @@ -2005,7 +1279,6 @@ typedef struct /*------------------------------------------------------------------------------------------* * Crend structures *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_hrtfs_structure { Word32 *pOut_to_bin_re_fx[MAX_INTERN_CHANNELS][BINAURAL_CHANNELS]; // Q29 @@ -2023,27 +1296,6 @@ typedef struct ivas_hrtfs_structure Word32 latency_s_fx; Word16 gain_lfe_fx; // Q14 } HRTFS_DATA, *HRTFS_HANDLE; -#else -typedef struct ivas_hrtfs_structure -{ - float *pOut_to_bin_re[MAX_INTERN_CHANNELS][BINAURAL_CHANNELS]; - float *pOut_to_bin_im[MAX_INTERN_CHANNELS][BINAURAL_CHANNELS]; - float *pOut_to_bin_diffuse_re[BINAURAL_CHANNELS]; - float *pOut_to_bin_diffuse_im[BINAURAL_CHANNELS]; - float latency_s; - uint16_t num_iterations[MAX_INTERN_CHANNELS][BINAURAL_CHANNELS]; - uint16_t num_iterations_diffuse[BINAURAL_CHANNELS]; - uint16_t *pIndex_frequency_max[MAX_INTERN_CHANNELS][BINAURAL_CHANNELS]; - uint16_t *pIndex_frequency_max_diffuse[BINAURAL_CHANNELS]; - uint16_t index_frequency_max_diffuse; - int16_t max_num_ir; - int16_t max_num_iterations; - float inv_diffuse_weight[MAX_INTERN_CHANNELS]; /* inverse diffuse weights array, access one inverse weight by pInvDiffuseWeight[channel] */ - float gain_lfe; - -} HRTFS_DATA, *HRTFS_HANDLE; -#endif -#ifdef IVAS_FLOAT_FIXED /* Main Crend structure */ typedef struct ivas_crend_state_t { @@ -2074,36 +1326,6 @@ typedef struct ivas_binaural_crend_wrapper_struct Word16 io_qfactor; } CREND_WRAPPER, *CREND_WRAPPER_HANDLE; -#else -/* Main Crend structure */ -typedef struct ivas_crend_state_t -{ - float *freq_buffer_re[MAX_INTERN_CHANNELS]; - float *freq_buffer_im[MAX_INTERN_CHANNELS]; - float *freq_buffer_re_diffuse; - float *freq_buffer_im_diffuse; - float *prev_out_buffer[BINAURAL_CHANNELS]; - float *lfe_delay_line; - float m_fYaw; - float m_fPitch; - float m_fRoll; - ivas_orient_trk_state_t *hTrack; - REVERB_HANDLE hReverb; - int16_t delay_line_rw_index; - int16_t diffuse_delay_line_rw_index; - er_struct_t *reflections; - -} CREND_DATA, *CREND_HANDLE; - -/* Main Crend wrapper structure */ -typedef struct ivas_binaural_crend_wrapper_struct -{ - int32_t binaural_latency_ns; - CREND_HANDLE hCrend; - HRTFS_HANDLE hHrtfCrend; - -} CREND_WRAPPER, *CREND_WRAPPER_HANDLE; -#endif /*------------------------------------------------------------------------------------------* * HRTF structures - hrtfs from binary files @@ -2122,118 +1344,52 @@ typedef struct ivas_hrtfs_crend_structure /* Fastconv binaural data structure */ typedef struct ivas_hrtfs_fastconv_struct { -#ifdef IVAS_FLOAT_FIXED Word32 FASTCONV_HOA3_latency_s_fx; Word32 FASTCONV_HRIR_latency_s_fx; -#else - float FASTCONV_HOA3_latency_s; - float FASTCONV_HRIR_latency_s; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 ***leftHRIRReal_HOA3_fx; Word32 ***leftHRIRImag_HOA3_fx; Word32 ***rightHRIRReal_HOA3_fx; Word32 ***rightHRIRImag_HOA3_fx; -#else - float ***leftHRIRReal_HOA3; - float ***leftHRIRImag_HOA3; - float ***rightHRIRReal_HOA3; - float ***rightHRIRImag_HOA3; -#endif - -#ifdef IVAS_FLOAT_FIXED + Word32 ***leftHRIRReal_fx; Word32 ***leftHRIRImag_fx; Word32 ***rightHRIRReal_fx; Word32 ***rightHRIRImag_fx; -#else - float ***leftHRIRReal; - float ***leftHRIRImag; - float ***rightHRIRReal; - float ***rightHRIRImag; -#endif - -#ifdef IVAS_FLOAT_FIXED + Word32 ***leftBRIRReal_fx; Word32 ***leftBRIRImag_fx; Word32 ***rightBRIRReal_fx; Word32 ***rightBRIRImag_fx; Word32 FASTCONV_BRIR_latency_s_fx; -#else - float ***leftBRIRReal; - float ***leftBRIRImag; - float ***rightBRIRReal; - float ***rightBRIRImag; -#endif -#ifndef IVAS_FLOAT_FIXED - float FASTCONV_BRIR_latency_s; -#endif - -#ifdef IVAS_FLOAT_FIXED + Word32 ***leftHRIRReal_HOA2_fx; Word32 ***leftHRIRImag_HOA2_fx; Word32 ***rightHRIRReal_HOA2_fx; Word32 ***rightHRIRImag_HOA2_fx; Word32 FASTCONV_HOA2_latency_s_fx; -#else - float ***leftHRIRReal_HOA2; - float ***leftHRIRImag_HOA2; - float ***rightHRIRReal_HOA2; - float ***rightHRIRImag_HOA2; -#endif -#ifndef IVAS_FLOAT_FIXED - float FASTCONV_HOA2_latency_s; -#endif - -#ifdef IVAS_FLOAT_FIXED + Word32 ***leftHRIRReal_FOA_fx; Word32 ***leftHRIRImag_FOA_fx; Word32 ***rightHRIRReal_FOA_fx; Word32 ***rightHRIRImag_FOA_fx; Word32 FASTCONV_FOA_latency_s_fx; -#else - float ***leftHRIRReal_FOA; - float ***leftHRIRImag_FOA; - float ***rightHRIRReal_FOA; - float ***rightHRIRImag_FOA; -#endif -#ifndef IVAS_FLOAT_FIXED - float FASTCONV_FOA_latency_s; -#endif Word16 allocate_init_flag; /*Memory allocation flag 0: if the hrtf pointers are allocated at application level , 1: of allocated at ivas_binaural_hrtf_open() */ -#ifdef IVAS_FLOAT_FIXED Word32 fastconvReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ Word32 fastconvReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ -#else - float fastconvReverberationTimes[CLDFB_NO_CHANNELS_MAX]; - float fastconvReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; -#endif } HRTFS_FASTCONV, *HRTFS_FASTCONV_HANDLE; typedef struct ivas_hrtfs_parambin_struct { -#ifndef IVAS_FLOAT_FIXED - float hrtfShCoeffsRe[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; - float hrtfShCoeffsIm[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; -#else Word16 hrtfShCoeffsRe_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /* Q14 */ Word16 hrtfShCoeffsIm_fx[BINAURAL_CHANNELS][HRTF_SH_CHANNELS][HRTF_NUM_BINS]; /* Q14 */ -#endif - -#ifndef IVAS_FLOAT_FIXED - float parametricReverberationTimes[CLDFB_NO_CHANNELS_MAX]; - float parametricReverberationEneCorrections[CLDFB_NO_CHANNELS_MAX]; - float parametricEarlyPartEneCorrection[CLDFB_NO_CHANNELS_MAX]; -#endif -#ifdef IVAS_FLOAT_FIXED + Word32 parametricReverberationTimes_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ Word32 parametricReverberationEneCorrections_fx[CLDFB_NO_CHANNELS_MAX]; /* Q31 */ Word32 parametricEarlyPartEneCorrection_fx[CLDFB_NO_CHANNELS_MAX]; /* Q28 */ -#endif } HRTFS_PARAMBIN, *HRTFS_PARAMBIN_HANDLE; @@ -2241,7 +1397,6 @@ typedef struct ivas_hrtfs_parambin_struct /*----------------------------------------------------------------------------------* * Limiter structure *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct { Word16 max_num_channels; @@ -2254,20 +1409,6 @@ typedef struct Word16 strong_saturation_count; } IVAS_LIMITER, *IVAS_LIMITER_HANDLE; -#else -typedef struct -{ - int16_t max_num_channels; - int16_t num_channels; - float **channel_ptrs; - int32_t sampling_rate; - float gain; - float release_heuristic; - float attack_constant; - int16_t strong_saturation_count; - -} IVAS_LIMITER, *IVAS_LIMITER_HANDLE; -#endif /*----------------------------------------------------------------------------------* * Loudspeaker Configuration Conversion structure @@ -2275,31 +1416,16 @@ typedef struct typedef struct ivas_LS_setupconversion_struct { -#ifndef IVAS_FLOAT_FIXED - float *dmxMtx[MAX_OUTPUT_CHANNELS]; -#else Word32 *dmxMtx_fx[MAX_OUTPUT_CHANNELS]; // Q30 -#endif -#ifndef IVAS_FLOAT_FIXED - float *targetEnergyPrev[MAX_OUTPUT_CHANNELS]; -#else Word32 *targetEnergyPrev_fx[MAX_OUTPUT_CHANNELS]; -#endif -#ifndef IVAS_FLOAT_FIXED - float *dmxEnergyPrev[MAX_OUTPUT_CHANNELS]; -#else Word32 *dmxEnergyPrev_fx[MAX_OUTPUT_CHANNELS]; -#endif Word16 sfbOffset[MAX_SFB + 2]; Word16 sfbCnt; -#ifdef IVAS_FLOAT_FIXED Word16 te_prev_exp; Word16 dmx_prev_exp; -#endif // IVAS_FLOAT_FIXED } LSSETUP_CONVERSION_STRUCT, *LSSETUP_CONVERSION_HANDLE; -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_LS_setupconversion_matrix_fx { Word16 index; @@ -2312,32 +1438,12 @@ typedef struct ivas_LS_setupconversion_mapping_fx AUDIO_CONFIG output_config; const LS_CONVERSION_MATRIX_FX *conversion_matrix_fx; } LS_CONVERSION_MAPPING_FX; -#else - -typedef struct ivas_LS_setupconversion_matrix -{ - int16_t index; - float value; -} LS_CONVERSION_MATRIX; - -typedef struct ivas_LS_setupconversion_mapping -{ - AUDIO_CONFIG input_config; - AUDIO_CONFIG output_config; - const LS_CONVERSION_MATRIX *conversion_matrix; -} LS_CONVERSION_MAPPING; -#endif typedef struct ivas_mono_downmix_renderer_struct { -#ifndef IVAS_FLOAT_FIXED - float inputEnergy; - float protoEnergy; -#else Word32 inputEnergy_fx; Word16 Q_inputEner; Word32 protoEnergy_fx; Word16 Q_protoEner; -#endif } MONO_DOWNMIX_RENDERER_STRUCT, *MONO_DOWNMIX_RENDERER_HANDLE; @@ -2345,7 +1451,6 @@ typedef struct ivas_mono_downmix_renderer_struct /*----------------------------------------------------------------------------------* * Custom Loudspeaker configuration structure *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_LS_setup_custom { Word16 is_planar_setup; /* flag to indicate if setup is planar or not */ @@ -2359,19 +1464,6 @@ typedef struct ivas_LS_setup_custom Word16 separate_ch_gains_fx[MAX_OUTPUT_CHANNELS]; /* gains to pan McMASA separateChannel in case no center channel is present */ } LSSETUP_CUSTOM_STRUCT, *LSSETUP_CUSTOM_HANDLE; -#else -typedef struct ivas_LS_setup_custom -{ - int16_t is_planar_setup; /* flag to indicate if setup is planar or not */ - int16_t num_spk; /* number of custom loudspeakers */ - float ls_azimuth[MAX_OUTPUT_CHANNELS]; /* custom loudspeaker azimuths */ - float ls_elevation[MAX_OUTPUT_CHANNELS]; /* custom loudspeaker elevations */ - int16_t num_lfe; /* number of LFE channels */ - int16_t lfe_idx[MAX_OUTPUT_CHANNELS]; /* index for LFE channel insertion */ - int16_t separate_ch_found; /* flag to indicate if a center channel was found */ - float separate_ch_gains[MAX_OUTPUT_CHANNELS]; /* gains to pan McMASA separateChannel in case no center channel is present */ -} LSSETUP_CUSTOM_STRUCT, *LSSETUP_CUSTOM_HANDLE; -#endif /* Channel types in a channel-based config */ typedef enum @@ -2398,11 +1490,7 @@ typedef struct ivas_masa_external_rendering_struct REVERB_STRUCT_HANDLE hReverb; HRTFS_PARAMBIN_HANDLE hHrtfParambin; VBAP_HANDLE hVBAPdata; -#ifndef IVAS_FLOAT_FIXED - float *hoa_dec_mtx; -#else Word32 *hoa_dec_mtx; -#endif HANDLE_CLDFB_FILTER_BANK cldfbAnaRend[MASA_MAX_TRANSPORT_CHANNELS]; HANDLE_CLDFB_FILTER_BANK cldfbSynRend[MAX_OUTPUT_CHANNELS]; @@ -2423,14 +1511,8 @@ typedef struct ivas_mcmasa_ana_data_structure HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[MCMASA_MAX_ANA_CHANS]; /* DirAC parameter estimation */ -#ifdef IVAS_FLOAT_FIXED Word32 **direction_vector_m_fx[DIRAC_NUM_DIMS]; /* Average direction vector */ Word16 **direction_vector_e[MAX_PARAM_SPATIAL_SUBFRAMES]; /* Average direction vector */ -#endif // IVAS_FLOAT_FIXED -#ifndef IVAS_FLOAT_FIXED - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ -#endif -#ifdef IVAS_FLOAT_FIXED Word32 *buffer_intensity_real_fx[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; Word16 buffer_intensity_real_q[DIRAC_NO_COL_AVG_DIFF]; Word32 *buffer_intensity_real_vert_fx[DIRAC_NO_COL_AVG_DIFF]; @@ -2449,43 +1531,24 @@ typedef struct ivas_mcmasa_ana_data_structure Word16 prevDownmixEne_e; Word16 prevEQ_e; Word16 interpolator_e; -#endif // IVAS_FLOAT_FIXED Word16 band_grouping[MASA_FREQUENCY_BANDS + 1]; Word16 block_grouping[5]; /* diffuseness */ Word16 index_buffer_intensity; -#ifndef IVAS_FLOAT_FIXED - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; - float *buffer_intensity_real_vert[DIRAC_NO_COL_AVG_DIFF]; - float buffer_energy[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; - float chnlToFoaMtx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; - float chnlToFoaEvenMtx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; - float ls_azimuth[MCMASA_MAX_ANA_CHANS]; -#endif Word16 leftNearest[MCMASA_MAX_ANA_CHANS]; Word16 rightNearest[MCMASA_MAX_ANA_CHANS]; Word16 numHorizontalChannels; UWord8 isHorizontalSetup; -#ifndef IVAS_FLOAT_FIXED - float prevMultiChEne; - float prevDownmixEne; - float prevEQ; - float interpolator[L_FRAME48k]; -#endif MASA_DECODER_EXT_OUT_META_HANDLE hMasaOut; SPHERICAL_GRID_DATA *sph_grid16; -#ifndef IVAS_FLOAT_FIXED - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 energy_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_e[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_exp[MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif } MCMASA_ANA_DATA, *MCMASA_ANA_HANDLE; @@ -2503,9 +1566,6 @@ typedef struct ivas_omasa_ana_data_structure /* DirAC parameter estimation */ -#ifndef IVAS_FLOAT_FIXED - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ -#endif Word16 band_grouping[MASA_FREQUENCY_BANDS + 1]; Word16 block_grouping[5]; @@ -2513,26 +1573,10 @@ typedef struct ivas_omasa_ana_data_structure /* diffuseness */ Word16 index_buffer_intensity; -#ifndef IVAS_FLOAT_FIXED - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; - float buffer_energy[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; - - float chnlToFoaMtx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; - - float interpolator[L_FRAME48k]; - - float prev_object_dm_gains[MAX_NUM_OBJECTS][MASA_MAX_TRANSPORT_CHANNELS]; -#endif MASA_DECODER_EXT_OUT_META_HANDLE hMasaOut; SPHERICAL_GRID_DATA *sph_grid16; -#ifndef IVAS_FLOAT_FIXED - float ism_azimuth[MAX_NUM_OBJECTS]; - float ism_elevation[MAX_NUM_OBJECTS]; - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 **direction_vector_m_fx[DIRAC_NUM_DIMS]; /* Average direction vector */ Word16 direction_vector_m_q; /* Average direction vector */ Word32 ism_azimuth_fx[MAX_NUM_OBJECTS]; @@ -2550,14 +1594,12 @@ typedef struct ivas_omasa_ana_data_structure Word16 buffer_energy_q[DIRAC_NO_COL_AVG_DIFF]; Word16 chnlToFoaMtx_fx[FOA_CHANNELS][MCMASA_MAX_ANA_CHANS]; // Q15 -#endif } OMASA_ANA_DATA, *OMASA_ANA_HANDLE; /*----------------------------------------------------------------------------------* * DirAC analysis structure *----------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED typedef struct ivas_dirac_ana_data_structure { Word16 nbands; @@ -2567,64 +1609,22 @@ typedef struct ivas_dirac_ana_data_structure HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[DIRAC_MAX_ANA_CHANS]; /* DirAC parameter estimation */ -#ifndef IVAS_FLOAT_FIXED - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ -#else Word32 **direction_vector_m_fx[DIRAC_NUM_DIMS]; /* Average direction vector */ -#endif Word16 band_grouping[MASA_FREQUENCY_BANDS + 1]; Word16 block_grouping[5]; /* diffuseness */ Word16 index_buffer_intensity; -#ifndef IVAS_FLOAT_FIXED - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; -#else Word32 *buffer_intensity_real_fx[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; -#endif -#ifndef IVAS_FLOAT_FIXED - float buffer_energy[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; -#else Word32 buffer_energy_fx[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; -#endif MASA_DECODER_EXT_OUT_META_HANDLE hMasaOut; SPHERICAL_GRID_DATA *sph_grid16; -#ifndef IVAS_FLOAT_FIXED - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 energy_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_e[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_exp[MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif - -} DIRAC_ANA_DATA, *DIRAC_ANA_HANDLE; -#else -typedef struct ivas_dirac_ana_data_structure -{ - int16_t nbands; - - /* CLDFB analysis */ - int16_t num_Cldfb_instances; - HANDLE_CLDFB_FILTER_BANK cldfbAnaEnc[DIRAC_MAX_ANA_CHANS]; - - /* DirAC parameter estimation */ - float **direction_vector_m[DIRAC_NUM_DIMS]; /* Average direction vector */ - int16_t band_grouping[MASA_FREQUENCY_BANDS + 1]; - int16_t block_grouping[5]; - - /* diffuseness */ - int16_t index_buffer_intensity; - float *buffer_intensity_real[DIRAC_NUM_DIMS][DIRAC_NO_COL_AVG_DIFF]; - float buffer_energy[DIRAC_NO_COL_AVG_DIFF * MASA_FREQUENCY_BANDS]; - - MASA_DECODER_EXT_OUT_META_HANDLE hMasaOut; - SPHERICAL_GRID_DATA *sph_grid16; - - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; } DIRAC_ANA_DATA, *DIRAC_ANA_HANDLE; -#endif /*----------------------------------------------------------------------------------* * MASA prerend structure *----------------------------------------------------------------------------------*/ @@ -2638,12 +1638,8 @@ typedef struct ivas_masa_prerend_data_structure MASA_DECODER_EXT_OUT_META_HANDLE hMasaOut; SPHERICAL_GRID_DATA *sph_grid16; -#ifndef IVAS_FLOAT_FIXED - float energy[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; -#else Word32 energy_fx[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word16 energy_e[MAX_PARAM_SPATIAL_SUBFRAMES]; -#endif } MASA_PREREND_DATA, *MASA_PREREND_HANDLE; diff --git a/lib_rend/ivas_td_decorr.c b/lib_rend/ivas_td_decorr.c index 8e1f4d043..c4507aae1 100644 --- a/lib_rend/ivas_td_decorr.c +++ b/lib_rend/ivas_td_decorr.c @@ -34,10 +34,8 @@ #include #include "options.h" #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif #include "ivas_prot.h" #include "ivas_prot_rend.h" #include "math.h" @@ -49,47 +47,6 @@ /*------------------------------------------------------------------------------------------* * Local constants *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static const float ivas_hadamard_decorr_APD_coeff[IVAS_APD_16_SECT][IVAS_APD_16_SECT] = { - { 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f }, - { 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f }, - { 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f }, - { 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f }, - { 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f }, - { 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f }, - { 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f }, - { 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f }, - { 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f }, - { 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f }, - { 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f }, - { 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f }, - { 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f }, - { 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f }, - { 0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, 0.4f, 0.4f, -0.4f, -0.4f }, - { 0.4f, -0.4f, -0.4f, 0.4f, -0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.4f, -0.4f, 0.4f, -0.4f, -0.4f, 0.4f } -}; - -/* For R = 3.^([0:obj.parm_APD_nSections-1]/4); */ -static const float ivas_three_pow_frac[IVAS_MAX_DECORR_APD_SECTIONS] = { - 1.000000000000000f, - 1.316074013710022f, - 1.732050776481628f, - 2.279507160186768f, - 3.000000000000000f, - 3.948222038857480f, - 5.196152422706630f, - 6.838521170864330f, - 9.000000000000000f, - 11.84466611657240f, - 15.58845726811990f, - 20.51556351259300f, - 27.00000000000000f, - 35.53399834971730f, - 46.76537180435970f, - 61.54669053777900f, -}; - -#else static const Word16 ivas_hadamard_decorr_APD_coeff[IVAS_APD_16_SECT][IVAS_APD_16_SECT] = { /* Q15 */ { 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107, 13107 }, { 13107, -13107, 13107, -13107, 13107, -13107, 13107, -13107, 13107, -13107, 13107, -13107, 13107, -13107, 13107, -13107 }, @@ -115,30 +72,16 @@ static const Word32 ivas_three_pow_frac[IVAS_MAX_DECORR_APD_SECTIONS] = { /* Q22 28682836, 37748736, 49680132, 65382728, 86048512, 113246208, 149040384, 196148192, 258145536 }; -#endif -#ifndef IVAS_FLOAT_FIXED -#define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN ( 2.0f ) -#define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR ( 3.0f ) -#else #define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN ( 1073741824 ) // Q29 #define IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR ( 1610612736 ) // Q29 -#endif /*------------------------------------------------------------------------------------------* * Local functions declaration *------------------------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 ivas_get_APD_filt_orders_fx( const Word16 num_out_chans, const Word32 output_Fs, Word16 *APD_filt_orders ); -#else -static Word16 ivas_get_APD_filt_orders( const Word16 num_out_chans, const Word32 output_Fs, Word16 *APD_filt_orders ); -#endif -#ifdef IVAS_FLOAT_FIXED static void ivas_td_decorr_init( ivas_td_decorr_state_t *hTdDecorr, const Word16 num_out_chans, const Word16 ducking_flag ); -#else -static void ivas_td_decorr_init( ivas_td_decorr_state_t *hTdDecorr, const int16_t num_out_chans, const int16_t ducking_flag ); -#endif /*------------------------------------------------------------------------- * ivas_td_decorr_reconfig_dec() @@ -146,7 +89,6 @@ static void ivas_td_decorr_init( ivas_td_decorr_state_t *hTdDecorr, const int16_ * Allocate and initialize time domain decorrelator handle *------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error ivas_td_decorr_reconfig_dec( const IVAS_FORMAT ivas_format, /* i : IVAS format */ const Word32 ivas_total_brate, /* i : total IVAS bitrate */ @@ -244,93 +186,7 @@ ivas_error ivas_td_decorr_reconfig_dec( return IVAS_ERR_OK; } -#else -ivas_error ivas_td_decorr_reconfig_dec( - const IVAS_FORMAT ivas_format, /* i : IVAS format */ - const int32_t ivas_total_brate, /* i : total IVAS bitrate */ - const int16_t nchan_transport, /* i : number of transport channels */ - const int32_t output_Fs, /* i : output sampling rate */ - ivas_td_decorr_state_t **hTdDecorr, /* i/o: TD decorrelator handle */ - uint16_t *useTdDecorr /* i/o: TD decorrelator flag */ -) -{ - uint16_t useTdDecorr_new; - ivas_error error; - - useTdDecorr_new = 0; - if ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) - { - if ( nchan_transport == 1 ) - { - useTdDecorr_new = 1; - } - } - else if ( ivas_format == MASA_FORMAT ) - { - if ( ( ivas_total_brate < IVAS_48k && nchan_transport == 1 ) || ivas_total_brate < MASA_STEREO_MIN_BITRATE ) - { - useTdDecorr_new = 1; - } - } - else if ( ivas_format == MC_FORMAT ) - { - if ( ivas_total_brate < IVAS_48k && nchan_transport == 1 ) - { - useTdDecorr_new = 1; - } - } - - if ( *useTdDecorr != useTdDecorr_new ) - { - *useTdDecorr = useTdDecorr_new; - - if ( *useTdDecorr ) - { - if ( ivas_total_brate >= IVAS_13k2 && ( ivas_format == SBA_FORMAT || ivas_format == SBA_ISM_FORMAT ) ) - { - if ( *hTdDecorr == NULL ) - { - if ( ( error = ivas_td_decorr_dec_open( hTdDecorr, output_Fs, 3, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - if ( ivas_total_brate < IVAS_24k4 ) - { - ( *hTdDecorr )->pTrans_det->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC_PARA_BIN_LOW_BR; - } - else - { - ( *hTdDecorr )->pTrans_det->duck_mult_fac = IVAS_TDET_DUCK_MULT_FAC_PARA_BIN; - } - } - else - { - if ( *hTdDecorr == NULL ) - { - if ( ( error = ivas_td_decorr_dec_open( hTdDecorr, output_Fs, 3, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - ivas_td_decorr_init( *hTdDecorr, 3, 0 ); - } - } - } - else - { - ivas_td_decorr_dec_close( hTdDecorr ); - } - } - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * ivas_td_decorr_dec_open_fx() * @@ -405,76 +261,6 @@ ivas_error ivas_td_decorr_dec_open_fx( return error; } -#else -/*------------------------------------------------------------------------- - * ivas_td_decorr_dec_open() - * - * Allocate and initialize time domain decorrelator handle - *------------------------------------------------------------------------*/ - -ivas_error ivas_td_decorr_dec_open( - ivas_td_decorr_state_t **hTdDecorr, /* i/o: TD decorrelator handle */ - const int32_t output_Fs, /* i : output sampling rate */ - const int16_t nchan_internal, /* i : number of internal channels */ - const int16_t ducking_flag /* i : ducking flag */ -) -{ - int16_t i, j, len; - int16_t num_out_chans; - ivas_td_decorr_state_t *hTdDecorr_loc; - ivas_error error; - - num_out_chans = nchan_internal - 1; - - error = IVAS_ERR_OK; - - if ( ( hTdDecorr_loc = (ivas_td_decorr_state_t *) malloc( sizeof( ivas_td_decorr_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); - } - - if ( ( hTdDecorr_loc->look_ahead_buf = (float *) malloc( sizeof( float ) * (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); - } - set_f( hTdDecorr_loc->look_ahead_buf, 0, (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ) ); - hTdDecorr_loc->offset = (int16_t) ( output_Fs * IVAS_DECORR_PARM_LOOKAHEAD_TAU ); - hTdDecorr_loc->num_apd_sections = ivas_get_APD_filt_orders( num_out_chans, output_Fs, hTdDecorr_loc->APD_filt_state[0].order ); - - for ( j = 0; j < num_out_chans; j++ ) - { - for ( i = 0; i < hTdDecorr_loc->num_apd_sections; i++ ) - { - len = hTdDecorr_loc->APD_filt_state[0].order[i]; - - if ( ( hTdDecorr_loc->APD_filt_state[j].state[i] = (float *) malloc( sizeof( float ) * len ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for SPAR COV decoder" ); - } - - set_f( hTdDecorr_loc->APD_filt_state[j].state[i], 0, len ); - } - } - - ivas_td_decorr_init( hTdDecorr_loc, num_out_chans, ducking_flag ); - - if ( ducking_flag ) - { - if ( ( error = ivas_transient_det_open( &hTdDecorr_loc->pTrans_det, output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hTdDecorr_loc->pTrans_det = NULL; - } - - *hTdDecorr = hTdDecorr_loc; - - return error; -} -#endif /*------------------------------------------------------------------------- * ivas_td_decorr_dec_close() @@ -517,7 +303,6 @@ void ivas_td_decorr_dec_close( return; } -#ifdef IVAS_FLOAT_FIXED /*-----------------------------------------------------------------------------------------* * Function ivas_get_APD_filt_orders_fx() * @@ -575,90 +360,12 @@ static Word16 ivas_get_APD_filt_orders_fx( return num_apd_sections; } -#else - -/*-----------------------------------------------------------------------------------------* - * Function ivas_get_APD_filt_orders() - * - * Calculate the orders of the APD IIR filters and return num APD sections - *-----------------------------------------------------------------------------------------*/ - -static int16_t ivas_get_APD_filt_orders( - const int16_t num_out_chans, - const int32_t output_Fs, - int16_t *APD_filt_orders ) -{ - int16_t i; - int16_t num_apd_sections = 0; - float sum_R, R[IVAS_MAX_DECORR_APD_SECTIONS]; - - switch ( num_out_chans ) - { - case IVAS_TD_DECORR_OUT_1CH: - case IVAS_TD_DECORR_OUT_2CH: - num_apd_sections = IVAS_APD_2_SECT; - break; - case IVAS_TD_DECORR_OUT_3CH: - case IVAS_TD_DECORR_OUT_4CH: - num_apd_sections = IVAS_APD_4_SECT; - break; - case IVAS_TD_DECORR_OUT_5CH: - case IVAS_TD_DECORR_OUT_6CH: - case IVAS_TD_DECORR_OUT_7CH: - case IVAS_TD_DECORR_OUT_8CH: - num_apd_sections = IVAS_APD_8_SECT; - break; - default: - assert( !"Invalid num out chans" ); - break; - } - - sum_R = 0.0f; - for ( i = 0; i < num_apd_sections; i++ ) - { - R[i] = ivas_three_pow_frac[i]; - sum_R += R[i]; - } - - for ( i = 0; i < num_apd_sections; i++ ) - { - APD_filt_orders[i] = (int16_t) ceil( output_Fs * IVAS_DECORR_PARM_APD_TAU * R[i] / sum_R ); - } - - return num_apd_sections; -} -#endif /*-----------------------------------------------------------------------------------------* * Function ivas_td_decorr_init() * * TD decorr Initialisation function *-----------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -static void ivas_td_decorr_init( - ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decorrelator handle */ - const int16_t num_out_chans, /* i : number of channels */ - const int16_t ducking_flag /* i : TD ducking flag */ -) -{ - int16_t i, j; - - hTdDecorr->ducking_flag = ducking_flag; - hTdDecorr->num_apd_outputs = num_out_chans; - - for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) - { - for ( j = 0; j < hTdDecorr->num_apd_sections; j++ ) - { - hTdDecorr->APD_filt_state[i].order[j] = hTdDecorr->APD_filt_state[0].order[j]; - hTdDecorr->APD_filt_state[i].coeffs[j] = ivas_hadamard_decorr_APD_coeff[i][j]; - hTdDecorr->APD_filt_state[i].idx[j] = 0; - } - } - - return; -} -#else static void ivas_td_decorr_init( ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decorrelator handle */ const Word16 num_out_chans, /* i : number of channels */ @@ -688,134 +395,7 @@ static void ivas_td_decorr_init( return; } -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-----------------------------------------------------------------------------------------* - * Function ivas_td_decorr_APD_iir_filter() - * - * APD IIR filter - *-----------------------------------------------------------------------------------------*/ - -void ivas_td_decorr_APD_iir_filter( - ivas_td_decorr_APD_filt_state_t *filter_state, /* i/o: TD decorrelator filter handle */ - float *pIn_out, /* i/o: audio channels */ - const int16_t num_APD_sections, /* i : numbef of APD sections */ - const int16_t length /* i : output frame length */ -) -{ - int16_t i, k; - int16_t idx; - float *pIn = pIn_out; - float *pOut = pIn_out; - float tmp_pIn_buf_i; - - for ( k = 0; k < num_APD_sections; k++ ) - { - float *pFilt_state = filter_state->state[k]; - float filt_coeff = filter_state->coeffs[k]; - int16_t order = filter_state->order[k]; - - idx = filter_state->idx[k]; - - for ( i = 0; i < length; i++ ) - { - tmp_pIn_buf_i = pIn[i]; - - pOut[i] = pFilt_state[idx] + pIn[i] * filt_coeff; - - pFilt_state[idx++] = tmp_pIn_buf_i - filt_coeff * pOut[i]; - - if ( order == idx ) - { - idx = 0; - } - } - filter_state->idx[k] = idx; - } - - return; -} - -/*-----------------------------------------------------------------------------------------* - * Function ivas_td_decorr_APD_sections() - * - * TD decorr all pass delay sections - *-----------------------------------------------------------------------------------------*/ - -static void ivas_td_decorr_APD_sections( - ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decorrelator handle */ - float **ppOut_pcm, /* i/o: audio channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i; - - for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) - { - ivas_td_decorr_APD_iir_filter( &hTdDecorr->APD_filt_state[i], ppOut_pcm[i], hTdDecorr->num_apd_sections, output_frame ); - } - - return; -} - - -/*-----------------------------------------------------------------------------------------* - * Function ivas_td_decorr_process() - * - * TD decorr process call - *-----------------------------------------------------------------------------------------*/ - -void ivas_td_decorr_process( - ivas_td_decorr_state_t *hTdDecorr, /* i/o: TD decorrelator handle */ - float *pcm_in[], /* i : input audio channels */ - float **ppOut_pcm, /* o : output audio channels */ - const int16_t output_frame /* i : output frame length */ -) -{ - int16_t i, j; - float in_duck_gain[L_FRAME48k], out_duck_gain[L_FRAME48k]; - - /* Look-ahead delay */ - mvr2r( pcm_in[0], ppOut_pcm[0], output_frame ); - delay_signal_float( ppOut_pcm[0], output_frame, hTdDecorr->look_ahead_buf, hTdDecorr->offset ); - - /* In ducking gains */ - if ( hTdDecorr->ducking_flag ) - { - ivas_td_decorr_get_ducking_gains( hTdDecorr->pTrans_det, pcm_in[0], in_duck_gain, out_duck_gain, output_frame, 0 ); - - for ( j = 0; j < output_frame; j++ ) - { - ppOut_pcm[0][j] = ppOut_pcm[0][j] * in_duck_gain[j]; - } - } - - for ( i = 1; i < hTdDecorr->num_apd_outputs; i++ ) - { - mvr2r( ppOut_pcm[0], ppOut_pcm[i], output_frame ); - } - - /* All pass delay section */ - ivas_td_decorr_APD_sections( hTdDecorr, ppOut_pcm, output_frame ); - - /* Out ducking gains */ - if ( hTdDecorr->ducking_flag ) - { - for ( i = 0; i < hTdDecorr->num_apd_outputs; i++ ) - { - for ( j = 0; j < output_frame; j++ ) - { - ppOut_pcm[i][j] = ppOut_pcm[i][j] * out_duck_gain[j]; - } - } - } - - return; -} - -#else /*-----------------------------------------------------------------------------------------* * Function ivas_td_decorr_APD_iir_filter_fx() * @@ -944,4 +524,3 @@ void ivas_td_decorr_process_fx( return; } -#endif diff --git a/lib_rend/ivas_vbap.c b/lib_rend/ivas_vbap.c index ad0de1534..24465c3e7 100644 --- a/lib_rend/ivas_vbap.c +++ b/lib_rend/ivas_vbap.c @@ -94,13 +94,8 @@ typedef struct connection_option { Word16 chA; Word16 chB; -#ifdef IVAS_FLOAT_FIXED Word32 arc_weighted_fx; /* Q29 */ Word32 arc_fx; /* Q29 */ -#else - float arc; - float arc_weighted; -#endif } ConnectionOption; enum SpeakerNodeGroup @@ -115,15 +110,9 @@ enum SpeakerNodeGroup /* Defines a single speaker node */ typedef struct vbap_speaker_node_structure { -#ifdef IVAS_FLOAT_FIXED Word32 azi_deg_fx; /* Q22 */ Word32 ele_deg_fx; /* Q22 */ Word32 unit_vec_fx[3]; /* Q30 */ -#else - float azi_deg; - float ele_deg; - float unit_vec[3]; -#endif enum SpeakerNodeGroup group; } VBAP_SPEAKER_NODE; @@ -133,7 +122,6 @@ typedef struct vbap_speaker_node_structure * Local function prototypes *-----------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static UWord8 vector_matrix_multiply_3x3_fx( const Word16 *src_vector, Word32 matrix[3][3], Word32 *result, Word16 q_matrix ); static UWord8 vector_matrix_multiply_3x3_32_fx( const Word32 *src_vector, Word32 matrix[3][3], Word32 *result, Word16 q_matrix ); @@ -161,33 +149,6 @@ static Word16 determine_best_triplet_and_gains_fx( VBAP_SEARCH_STRUCT *search_st static void determine_virtual_speaker_node_division_gains_fx( const Word16 virtual_speaker_node_index, Word16 *virtual_node_division_gains_fx, Word16 connections[][2], const enum VirtualSpeakerNodeType type, const Word16 max_num_connections, const Word16 num_speaker_nodes, const Word16 use_object_mode ); static void reorder_triplets_fx( VBAP_VS_TRIPLET *triplets, const Word16 *target_order, const Word16 num_triplets ); -#else -static uint8_t vector_matrix_multiply_3x3( const float *src_vector, float matrix[3][3], float *result ); - -static void init_speaker_node_direction_data( VBAP_SPEAKER_NODE *speaker_node_data, const float *speaker_node_azi_deg, const float *speaker_node_ele_deg, const int16_t num_speaker_nodes ); - -static int16_t determine_virtual_surface_triplets( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *speaker_node_data, int16_t connections[][2], const int16_t max_num_connections, VBAP_VS_TRIPLET *triplets, int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS], enum SpeakerNodeGroup allowed_group ); - -static void determine_initial_search_indices( const int16_t num_triplets, const float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS], int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS] ); - -static ivas_error determine_connections( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *speaker_node_data, int16_t connections[][2], const int16_t max_num_connections, int16_t *group1_count, int16_t *group2_start, int16_t *group2_count ); - -static void formulate_horizontal_connections( const VBAP_SPEAKER_NODE *speaker_node_data, const int16_t num_speaker_nodes, int16_t connections[][2], int16_t *connection_write_index ); - -static ivas_error get_half_sphere_connection_options( const VBAP_SPEAKER_NODE *speaker_node_data, const enum SpeakerNodeGroup group, const int16_t num_speaker_nodes, const int16_t num_non_crossing_planes, const float *non_crossing_plane_elevation_deg, ConnectionOption **connection_options_pr, int16_t *num_connection_options ); - -static ivas_error formulate_half_sphere_connections( const VBAP_SPEAKER_NODE *speaker_node_data, const int16_t num_speaker_nodes, const enum SpeakerNodeGroup group, int16_t connections[][2], int16_t *connection_write_index, const int16_t max_num_connections, const int16_t num_non_crossing_planes, const float *non_crossing_plane_elevation_deg ); - -static int16_t determine_non_crossing_planes( const int16_t num_speaker_nodes, const VBAP_SPEAKER_NODE *node_data, float *non_crossing_plane_elevation_deg ); - -static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( VBAP_HANDLE hVBAPdata, const float *speaker_node_azi_deg, const float *speaker_node_ele_deg, enum SpeakerNodeGroup group ); - -static int16_t determine_best_triplet_and_gains( VBAP_SEARCH_STRUCT *search_struct, const float panning_unit_vec[3], const int16_t azi_deg, float gains[3] ); - -static void determine_virtual_speaker_node_division_gains( const int16_t virtual_speaker_node_index, float *virtual_node_division_gains, int16_t connections[][2], const enum VirtualSpeakerNodeType type, const int16_t max_num_connections, const int16_t num_speaker_nodes, const int16_t use_object_mode ); - -static void reorder_triplets( VBAP_VS_TRIPLET *triplets, const int16_t *target_order, const int16_t num_triplets ); -#endif /*-------------------------------------------------------------------------* * vbap_init_data() @@ -195,7 +156,6 @@ static void reorder_triplets( VBAP_VS_TRIPLET *triplets, const int16_t *target_o * Initialize VBAP data structure for the speaker node set *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error vbap_init_data_fx( VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ const Word32 *speaker_node_azi_deg_fx, /* i : vector of speaker node azimuths (positive left) Q22 */ @@ -474,258 +434,6 @@ ivas_error vbap_init_data_fx( return IVAS_ERR_OK; } -#else -ivas_error vbap_init_data( - VBAP_HANDLE *hVBAPdata, /* i/o: handle for VBAP data structure that will be initialized */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths (positive left) */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations (positive up) */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes in the set */ - const IVAS_FORMAT ivas_format /* i : IVAS format */ -) -{ - /* Variables */ - int16_t connections[VBAP_MAX_NUM_SPEAKER_NODES][2]; - int16_t max_num_connections; - int16_t is_success; - int16_t connection_group1_count; - int16_t connection_group2_start; - int16_t connection_group2_count; - enum VirtualSpeakerNodeType virtual_top_type; - enum VirtualSpeakerNodeType virtual_bottom_type; - enum VirtualSpeakerNodeType virtual_back_type; - float speaker_node_azi_deg_internal[VBAP_MAX_NUM_SPEAKER_NODES]; - float speaker_node_ele_deg_internal[VBAP_MAX_NUM_SPEAKER_NODES]; - VBAP_SPEAKER_NODE speaker_node_data[VBAP_MAX_NUM_SPEAKER_NODES]; - VBAP_DATA *vbap; - ivas_error error; - - push_wmops( "vbap_init" ); - - /* Basic init checks */ - /* If the requested layout is invalid, hVBAPdata is set to NULL and the signal will - * be distributed with an equal gain into all output channels. - * The surrounding code needs to handle the NULL pointer properly. */ - if ( num_speaker_nodes > VBAP_MAX_NUM_SPEAKER_NODES || num_speaker_nodes < 3 ) - { - hVBAPdata = NULL; - pop_wmops(); - return IVAS_ERR_OK; - } - - if ( !speaker_node_azi_deg || !speaker_node_ele_deg ) - { - hVBAPdata = NULL; - return IVAS_ERR_OK; - } - - /* Allocate VBAP structure */ - if ( ( vbap = (VBAP_HANDLE) malloc( sizeof( VBAP_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - - is_success = 1; - vbap->bottom_virtual_speaker_node_index = -1; - vbap->top_virtual_speaker_node_index = -1; - vbap->back_virtual_speaker_node_index = -1; - vbap->bottom_virtual_speaker_node_division_gains = NULL; - vbap->top_virtual_speaker_node_division_gains = NULL; - vbap->back_virtual_speaker_node_division_gains = NULL; - vbap->object_mode_bottom_virtual_speaker_node_division_gains = NULL; - vbap->object_mode_top_virtual_speaker_node_division_gains = NULL; - vbap->object_mode_back_virtual_speaker_node_division_gains = NULL; - vbap->num_speaker_nodes = num_speaker_nodes; - vbap->num_speaker_nodes_internal = num_speaker_nodes; - - /* Check if the speaker node setup needs a virtual top or bottom node - (function also increments vbap->num_speaker_nodes_internal when necessary) */ - virtual_bottom_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_BOTTOM_HALF ); - virtual_top_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_TOP_HALF ); - virtual_back_type = check_need_of_virtual_speaker_node( vbap, speaker_node_azi_deg, speaker_node_ele_deg, SPEAKER_NODE_BACK ); - - /* Init internal speaker node configuration, which is the original configuration - potentially appended with virtual top and/or bottom loudspeakers */ - mvr2r( speaker_node_azi_deg, speaker_node_azi_deg_internal, num_speaker_nodes ); - mvr2r( speaker_node_ele_deg, speaker_node_ele_deg_internal, num_speaker_nodes ); - - if ( is_success && virtual_bottom_type != NO_VIRTUAL_SPEAKER_NODE ) - { - if ( ( vbap->bottom_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->bottom_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->bottom_virtual_speaker_node_division_gains != NULL; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - if ( ( vbap->object_mode_bottom_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->object_mode_bottom_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->object_mode_bottom_virtual_speaker_node_division_gains != NULL; - } - - speaker_node_azi_deg_internal[vbap->bottom_virtual_speaker_node_index] = 0.0f; - speaker_node_ele_deg_internal[vbap->bottom_virtual_speaker_node_index] = -90.0f; - } - - if ( is_success && virtual_top_type != NO_VIRTUAL_SPEAKER_NODE ) - { - if ( ( vbap->top_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->top_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->top_virtual_speaker_node_division_gains != NULL; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - if ( ( vbap->object_mode_top_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->object_mode_top_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->object_mode_top_virtual_speaker_node_division_gains != NULL; - } - - speaker_node_azi_deg_internal[vbap->top_virtual_speaker_node_index] = 0.0f; - speaker_node_ele_deg_internal[vbap->top_virtual_speaker_node_index] = 90.0f; - } - - if ( is_success && virtual_back_type != NO_VIRTUAL_SPEAKER_NODE ) - { - if ( ( vbap->back_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->back_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->back_virtual_speaker_node_division_gains != NULL; - - if ( ivas_format == MASA_ISM_FORMAT ) - { - if ( ( vbap->object_mode_back_virtual_speaker_node_division_gains = (float *) malloc( num_speaker_nodes * sizeof( float ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - set_zero( vbap->object_mode_back_virtual_speaker_node_division_gains, num_speaker_nodes ); - is_success &= vbap->object_mode_back_virtual_speaker_node_division_gains != NULL; - } - speaker_node_azi_deg_internal[vbap->back_virtual_speaker_node_index] = 180.0f; - speaker_node_ele_deg_internal[vbap->back_virtual_speaker_node_index] = 0.0f; - } - - init_speaker_node_direction_data( speaker_node_data, speaker_node_azi_deg_internal, speaker_node_ele_deg_internal, vbap->num_speaker_nodes_internal ); - - /* Allocate and determine node-node connections */ - max_num_connections = ( vbap->num_speaker_nodes_internal - 2 ) * 3; /* Theoretical maximum */ - - if ( ( error = determine_connections( vbap->num_speaker_nodes_internal, speaker_node_data, connections, max_num_connections, &connection_group1_count, &connection_group2_start, &connection_group2_count ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Allocate and determine virtual surface speaker node triplets */ - if ( is_success ) - { - int16_t ch; - int16_t speaker_nodes_group1_internal = 0; - int16_t speaker_nodes_group2_internal = 0; - int16_t speaker_nodes_horiz_internal = 0; - uint8_t loop_done = 0; - - /* Count nodes in different groups to reserve correct memory */ - for ( ch = 0; ch < vbap->num_speaker_nodes_internal && !loop_done; ch++ ) - { - switch ( speaker_node_data[ch].group ) - { - case SPEAKER_NODE_ALL: - /* If there is even one speaker belonging to "all" group, then all speakers belong to the "all" group. - * We can skip further counts here. */ - speaker_nodes_group1_internal = vbap->num_speaker_nodes_internal; - loop_done = 1; - break; - case SPEAKER_NODE_BOTTOM_HALF: - speaker_nodes_group1_internal++; - break; - case SPEAKER_NODE_TOP_HALF: - speaker_nodes_group2_internal++; - break; - case SPEAKER_NODE_HORIZONTAL: - case SPEAKER_NODE_BACK: - speaker_nodes_group1_internal++; - speaker_nodes_group2_internal++; - speaker_nodes_horiz_internal++; - break; - } - } - - if ( ( vbap->search_struct[0].triplets = (VBAP_VS_TRIPLET *) malloc( ( ( speaker_nodes_group1_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - is_success &= vbap->search_struct[0].triplets != NULL; - - if ( speaker_nodes_group2_internal > 0 ) - { - vbap->num_search_structs = 2; - if ( ( vbap->search_struct[1].triplets = (VBAP_VS_TRIPLET *) malloc( ( ( speaker_nodes_group2_internal - 2 ) * 2 - ( max( 0, ( speaker_nodes_horiz_internal - 2 ) ) ) ) * sizeof( VBAP_VS_TRIPLET ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - is_success &= vbap->search_struct[1].triplets != NULL; - } - else - { - vbap->num_search_structs = 1; - vbap->search_struct[1].triplets = NULL; - } - } - - if ( is_success ) - { - if ( vbap->num_search_structs == 1 ) - { - /* If all speaker nodes belong to ALL set, then we only create one triplet set and search structure */ - vbap->search_struct[0].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections, max_num_connections, vbap->search_struct[0].triplets, vbap->search_struct[0].initial_search_indices, SPEAKER_NODE_ALL ); - } - else - { - /* Otherwise, we have two sets and can handle them separately for more opmitized processing. */ - vbap->search_struct[0].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections, connection_group1_count, vbap->search_struct[0].triplets, vbap->search_struct[0].initial_search_indices, SPEAKER_NODE_BOTTOM_HALF ); - vbap->search_struct[1].num_triplets = determine_virtual_surface_triplets( vbap->num_speaker_nodes_internal, speaker_node_data, connections + connection_group2_start, connection_group2_count, vbap->search_struct[1].triplets, vbap->search_struct[1].initial_search_indices, SPEAKER_NODE_TOP_HALF ); - } - } - - /* Determine how the virtual node gains should be distributed to real nodes, if necessary (checked within function). */ - if ( is_success ) - { - determine_virtual_speaker_node_division_gains( vbap->top_virtual_speaker_node_index, vbap->top_virtual_speaker_node_division_gains, connections, virtual_top_type, max_num_connections, num_speaker_nodes, 0 ); - determine_virtual_speaker_node_division_gains( vbap->bottom_virtual_speaker_node_index, vbap->bottom_virtual_speaker_node_division_gains, connections, virtual_bottom_type, max_num_connections, num_speaker_nodes, 0 ); - determine_virtual_speaker_node_division_gains( vbap->back_virtual_speaker_node_index, vbap->back_virtual_speaker_node_division_gains, connections, virtual_back_type, max_num_connections, num_speaker_nodes, 0 ); - if ( ivas_format == MASA_ISM_FORMAT ) - { - determine_virtual_speaker_node_division_gains( vbap->top_virtual_speaker_node_index, vbap->object_mode_top_virtual_speaker_node_division_gains, connections, virtual_top_type == NO_VIRTUAL_SPEAKER_NODE ? NO_VIRTUAL_SPEAKER_NODE : VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY, max_num_connections, num_speaker_nodes, 1 ); - determine_virtual_speaker_node_division_gains( vbap->bottom_virtual_speaker_node_index, vbap->object_mode_bottom_virtual_speaker_node_division_gains, connections, virtual_bottom_type == NO_VIRTUAL_SPEAKER_NODE ? NO_VIRTUAL_SPEAKER_NODE : VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY, max_num_connections, num_speaker_nodes, 1 ); - determine_virtual_speaker_node_division_gains( vbap->back_virtual_speaker_node_index, vbap->object_mode_back_virtual_speaker_node_division_gains, connections, virtual_back_type == NO_VIRTUAL_SPEAKER_NODE ? NO_VIRTUAL_SPEAKER_NODE : VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY, max_num_connections, num_speaker_nodes, 1 ); - } - } - - pop_wmops(); - - if ( is_success ) - { - *hVBAPdata = vbap; - } - else - { - vbap_free_data( &vbap ); - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* @@ -734,7 +442,6 @@ ivas_error vbap_init_data( * Free VBAP data structure *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void vbap_free_data_fx( VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ ) @@ -784,62 +491,12 @@ void vbap_free_data_fx( return; } -#else -void vbap_free_data( - VBAP_HANDLE *hVBAPdata /* i/o: VBAP handle to be freed */ -) -{ - if ( hVBAPdata == NULL || *hVBAPdata == NULL ) - { - return; - } - - if ( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->bottom_virtual_speaker_node_division_gains ); - } - if ( ( *hVBAPdata )->top_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->top_virtual_speaker_node_division_gains ); - } - if ( ( *hVBAPdata )->back_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->back_virtual_speaker_node_division_gains ); - } - if ( ( *hVBAPdata )->object_mode_bottom_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->object_mode_bottom_virtual_speaker_node_division_gains ); - } - if ( ( *hVBAPdata )->object_mode_top_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->object_mode_top_virtual_speaker_node_division_gains ); - } - if ( ( *hVBAPdata )->object_mode_back_virtual_speaker_node_division_gains != NULL ) - { - free( ( *hVBAPdata )->object_mode_back_virtual_speaker_node_division_gains ); - } - - if ( ( *hVBAPdata )->search_struct[0].triplets != NULL ) - { - free( ( *hVBAPdata )->search_struct[0].triplets ); - } - if ( ( *hVBAPdata )->num_search_structs == 2 && ( *hVBAPdata )->search_struct[1].triplets != NULL ) - { - free( ( *hVBAPdata )->search_struct[1].triplets ); - } - free( *hVBAPdata ); - *hVBAPdata = NULL; - - return; -} -#endif /*-------------------------------------------------------------------------* * vbap_determine_gains() * * Obtain panning gains for all speaker nodes based on the given direction *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED void vbap_determine_gains_fx( const VBAP_HANDLE hVBAPdata, /* i : prepared VBAP structure */ Word32 *gains_fx, /* o : gain vector for loudspeakers for given direction Q29 */ @@ -984,135 +641,6 @@ void vbap_determine_gains_fx( return; } -#else -void vbap_determine_gains( - const VBAP_HANDLE hVBAPdata, /* i : prepared VBAP structure */ - float *gains, /* o : gain vector for loudspeakers for given direction */ - const int16_t azi_deg, /* i : azimuth in degrees for panning direction (positive left) */ - const int16_t ele_deg, /* i : elevation in degrees for panning direction (positive up) */ - const int16_t use_object_mode /* i : select between object mode panning and spatial mode panning */ -) -{ - /* This function formulates gains for the given angle. The triplet-selection has been pre-formulated. */ - int16_t ch, ch2; - int16_t triplet_ch; - int16_t triplet_index; - float panning_unit_vec[3]; - float gain_triplet[3]; - float norm_value; - float gain_ene; - float azi_rad; - float ele_rad; - float azi_temp; - float ele_temp; - int16_t num_speaker_nodes; - int16_t bottom_virtual_speaker_node_index; - int16_t top_virtual_speaker_node_index; - int16_t back_virtual_speaker_node_index; - VBAP_VS_TRIPLET *selected_triplet; - float *bottom_virtual_speaker_node_division_gains; - float *top_virtual_speaker_node_division_gains; - float *back_virtual_speaker_node_division_gains; - - - push_wmops( "vbap_gains" ); - num_speaker_nodes = hVBAPdata->num_speaker_nodes; - bottom_virtual_speaker_node_index = hVBAPdata->bottom_virtual_speaker_node_index; - top_virtual_speaker_node_index = hVBAPdata->top_virtual_speaker_node_index; - back_virtual_speaker_node_index = hVBAPdata->back_virtual_speaker_node_index; - if ( use_object_mode ) - { - bottom_virtual_speaker_node_division_gains = hVBAPdata->object_mode_bottom_virtual_speaker_node_division_gains; - top_virtual_speaker_node_division_gains = hVBAPdata->object_mode_top_virtual_speaker_node_division_gains; - back_virtual_speaker_node_division_gains = hVBAPdata->object_mode_back_virtual_speaker_node_division_gains; - } - else - { - bottom_virtual_speaker_node_division_gains = hVBAPdata->bottom_virtual_speaker_node_division_gains; - top_virtual_speaker_node_division_gains = hVBAPdata->top_virtual_speaker_node_division_gains; - back_virtual_speaker_node_division_gains = hVBAPdata->back_virtual_speaker_node_division_gains; - } - - panning_wrap_angles( (float) azi_deg, (float) ele_deg, &azi_temp, &ele_temp ); - azi_rad = azi_temp * PI_OVER_180; - ele_rad = ele_temp * PI_OVER_180; - - panning_unit_vec[0] = cosf( azi_rad ) * cosf( ele_rad ); - panning_unit_vec[1] = sinf( azi_rad ) * cosf( ele_rad ); - panning_unit_vec[2] = sinf( ele_rad ); - - /* Find the best VS triplet and speaker node gains for the panning direction using the prepared search structures. */ - if ( hVBAPdata->num_search_structs == 2 && ele_deg > 0 ) - { - triplet_index = determine_best_triplet_and_gains( &( hVBAPdata->search_struct[1] ), panning_unit_vec, azi_deg, gain_triplet ); - selected_triplet = &hVBAPdata->search_struct[1].triplets[triplet_index]; - } - else - { - triplet_index = determine_best_triplet_and_gains( &( hVBAPdata->search_struct[0] ), panning_unit_vec, azi_deg, gain_triplet ); - selected_triplet = &hVBAPdata->search_struct[0].triplets[triplet_index]; - } - - /* Normalize to unit energy */ - gain_ene = 1e-12f; /* Add small value to avoid divide by zero. */ - for ( ch = 0; ch < 3; ch++ ) - { - gain_ene += gain_triplet[ch] * gain_triplet[ch]; - } - - norm_value = inv_sqrt( gain_ene ); - - for ( ch = 0; ch < 3; ch++ ) - { - gain_triplet[ch] *= norm_value; - - /* Sanity check for rounding issues */ - if ( gain_triplet[ch] < 0.0f ) - { - gain_triplet[ch] = 0.0f; - } - } - - /* Flush gain target */ - set_zero( gains, num_speaker_nodes ); - - /* Map gain triplet (internal speaker node configuration) to speaker node output (actual speaker node configuration) */ - for ( ch = 0; ch < 3; ch++ ) - { - triplet_ch = selected_triplet->speaker_node[ch]; - - if ( triplet_ch == bottom_virtual_speaker_node_index ) - { - for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) - { - gains[ch2] += bottom_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; - } - } - else if ( triplet_ch == top_virtual_speaker_node_index ) - { - for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) - { - gains[ch2] += top_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; - } - } - else if ( triplet_ch == back_virtual_speaker_node_index ) - { - for ( ch2 = 0; ch2 < num_speaker_nodes; ch2++ ) - { - gains[ch2] += back_virtual_speaker_node_division_gains[ch2] * gain_triplet[ch]; - } - } - else - { - gains[triplet_ch] += gain_triplet[ch]; - } - } - - pop_wmops(); - - return; -} -#endif /*-----------------------------------------------------------------------* * Local functions @@ -1124,7 +652,6 @@ void vbap_determine_gains( * 3-by-3 vector cross product *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void vbap_crossp_fx( const Word32 *vec1_fx, /* i : input vector 1 Qx */ const Word32 *vec2_fx, /* i : input vector 2 Qy */ @@ -1141,20 +668,6 @@ static void vbap_crossp_fx( return; } -#else -static void vbap_crossp( - const float *vec1, /* i : input vector 1 */ - const float *vec2, /* i : input vector 2 */ - float *crossProduct /* o : cross product output */ -) -{ - crossProduct[0] = ( vec1[1] * vec2[2] ) - ( vec1[2] * vec2[1] ); - crossProduct[1] = ( vec1[2] * vec2[0] ) - ( vec1[0] * vec2[2] ); - crossProduct[2] = ( vec1[0] * vec2[1] ) - ( vec1[1] * vec2[0] ); - - return; -} -#endif /*-------------------------------------------------------------------------* * vector_matrix_multiply_3x3() @@ -1163,7 +676,6 @@ static void vbap_crossp( *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED /*! r: Status result if triplet is usable for panning. Allows early exit. */ static UWord8 vector_matrix_multiply_3x3_fx( const Word16 *src_vector, /* i : input vector Q15 */ @@ -1253,44 +765,6 @@ static UWord8 vector_matrix_multiply_3x3_32_fx( return 1; } -#else -/*! r: Status result if triplet is usable for panning. Allows early exit. */ -static uint8_t vector_matrix_multiply_3x3( - const float *src_vector, /* i : input vector */ - float matrix[3][3], /* i : input matrix */ - float *result /* o : output vector */ -) -{ - result[0] = src_vector[0] * matrix[0][0]; - result[0] += src_vector[1] * matrix[1][0]; - result[0] += src_vector[2] * matrix[2][0]; - - if ( result[0] < -0.01f ) - { - return 0; - } - - result[1] = src_vector[0] * matrix[0][1]; - result[1] += src_vector[1] * matrix[1][1]; - result[1] += src_vector[2] * matrix[2][1]; - - if ( result[1] < -0.01f ) - { - return 0; - } - - result[2] = src_vector[0] * matrix[0][2]; - result[2] += src_vector[1] * matrix[1][2]; - result[2] += src_vector[2] * matrix[2][2]; - - if ( result[2] < -0.01f ) - { - return 0; - } - - return 1; -} -#endif /*----------------------------------------------------------------------------------------------* * determine_best_triplet_and_gains() @@ -1299,7 +773,6 @@ static uint8_t vector_matrix_multiply_3x3( *----------------------------------------------------------------------------------------------*/ /*! r: triplet id */ -#ifdef IVAS_FLOAT_FIXED static Word16 determine_best_triplet_and_gains_fx( VBAP_SEARCH_STRUCT *search_struct, /* i : VBAP search struct */ const Word16 panning_unit_vec_fx[3], /* i : panning unit vector Q15 */ @@ -1398,85 +871,6 @@ static Word16 determine_best_triplet_and_gains_fx( return best_triplet; } -#else -static int16_t determine_best_triplet_and_gains( - VBAP_SEARCH_STRUCT *search_struct, /* i : VBAP search struct */ - const float panning_unit_vec[3], /* i : panning unit vector */ - const int16_t azi_deg, /* i : panning azimuth */ - float gains[3] /* o : panning gains */ -) -{ - int16_t i, tr, k; - uint8_t triplet_ok; - int16_t best_triplet; - float best_min_gain; - float min_gain_this; - float unnormalized_gains[3]; - int16_t sector; - int16_t first_triplet; - int16_t jump; - int16_t num_triplets; - - num_triplets = search_struct->num_triplets; - best_min_gain = -999.9f; - best_triplet = 0; - set_zero( gains, 3 ); - - /* Determine the correct search sector for that target panning direction using an optimized algorithm for - * the chosen four sectors. */ - if ( abs( azi_deg ) > 90 ) - { - sector = azi_deg < 0 ? 2 : 1; - } - else - { - sector = azi_deg < 0 ? 3 : 0; - } - first_triplet = search_struct->initial_search_indices[sector]; - - tr = first_triplet; - jump = 1; - for ( i = 0; i < num_triplets; i++ ) - { - triplet_ok = vector_matrix_multiply_3x3( panning_unit_vec, search_struct->triplets[tr].inverse_matrix, unnormalized_gains ); - if ( triplet_ok ) - { - min_gain_this = min( ( min( unnormalized_gains[0], unnormalized_gains[1] ) ), unnormalized_gains[2] ); - - if ( min_gain_this > best_min_gain ) - { - best_min_gain = min_gain_this; - best_triplet = tr; - for ( k = 0; k < 3; k++ ) - { - gains[k] = unnormalized_gains[k]; - } - if ( !( best_min_gain < 0.00f ) ) - { - return best_triplet; - } - } - } - tr = first_triplet + jump; - if ( tr < 0 ) - { - tr += num_triplets; - } - else if ( tr >= num_triplets ) - { - tr -= num_triplets; - } - - jump *= -1; - if ( jump > 0 ) - { - jump += 1; - } - } - - return best_triplet; -} -#endif /*-------------------------------------------------------------------------* * determine_virtual_speaker_node_division_gains() @@ -1484,7 +878,6 @@ static int16_t determine_best_triplet_and_gains( * Determines how the virtual node gains are distributed to real nodes *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void determine_virtual_speaker_node_division_gains_fx( const Word16 virtual_speaker_node_index, /* i : virtual speaker node index */ Word16 *virtual_node_division_gains_fx, /* o : virtual speaker node division gains Q16 */ @@ -1594,67 +987,6 @@ static void determine_virtual_speaker_node_division_gains_fx( return; } -#else -static void determine_virtual_speaker_node_division_gains( - const int16_t virtual_speaker_node_index, /* i : virtual speaker node index */ - float *virtual_node_division_gains, /* o : virtual speaker node division gains */ - int16_t connections[][2], /* i : vector of all connections */ - const enum VirtualSpeakerNodeType type, /* i : virtual speaker node typel */ - const int16_t max_num_connections, /* i : max number of connections */ - const int16_t num_speaker_nodes, /* i : max number of speaker nodes */ - const int16_t use_object_mode /* i : use VBAP in object panning mode vs. spatial panning mode */ -) -{ - /* When node type is VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY, the gains of the virtual node - are distributed to all neighboring real speaker nodes. An amplitude-division - instead of energy division is utilized just in case to avoid excessive emphasis - on the coherent distributed sound. */ - int16_t c, ch; - float sum_val; - - if ( type == VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY ) - { - for ( c = 0; c < max_num_connections; c++ ) - { - if ( connections[c][0] != VBAP_NOT_VALID_CONNECTION ) - { - int16_t connection_node = -1; - if ( connections[c][0] == virtual_speaker_node_index ) - { - connection_node = connections[c][1]; - } - else if ( connections[c][1] == virtual_speaker_node_index ) - { - connection_node = connections[c][0]; - } - - /* The second condition allows division gains only to actual loudspeakers */ - if ( connection_node >= 0 && ( connection_node < num_speaker_nodes ) ) - { - virtual_node_division_gains[connection_node] = 1.0f; - } - } - } - - sum_val = 0.0f; - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - sum_val += virtual_node_division_gains[ch]; - } - - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - virtual_node_division_gains[ch] /= sum_val; - if ( use_object_mode ) - { - virtual_node_division_gains[ch] = powf( virtual_node_division_gains[ch], 0.8f ); - } - } - } - - return; -} -#endif /*-------------------------------------------------------------------------* * check_need_of_virtual_speaker_node() @@ -1664,7 +996,6 @@ static void determine_virtual_speaker_node_division_gains( /*! r: virtual speaker node type */ -#ifdef IVAS_FLOAT_FIXED static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node_fx( VBAP_HANDLE hVBAPdata, /* i/o: VBAP structure */ const Word32 *speaker_node_azi_deg_fx, /* i : vector of speaker node azimuths Q22 */ @@ -1763,87 +1094,6 @@ static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node_fx( return VIRTUAL_SPEAKER_NODE_DISCARD_ENERGY; } -#else -static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( - VBAP_HANDLE hVBAPdata, /* i/o: VBAP structure */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations */ - enum SpeakerNodeGroup group /* i : group of speaker nodes where this belongs */ -) -{ - int16_t ch; - float max_elevation = 0.0f; - - /* The following considers if SPEAKER_NODE_BACK virtual speaker is needed */ - if ( group == SPEAKER_NODE_BACK ) - { - int16_t virtual_back_needed = 1; - const float virtual_back_epsilon = -0.0175f; /* Corresponds to approximately 91 degrees, see code below */ - for ( ch = 0; ch < hVBAPdata->num_speaker_nodes; ch++ ) - { - if ( fabsf( speaker_node_ele_deg[ch] ) < VBAP_VIRTUAL_BACK_ELE_LIMIT ) - { - if ( cosf( speaker_node_azi_deg[ch] * PI_OVER_180 ) < virtual_back_epsilon ) - { - virtual_back_needed = 0; - break; - } - } - } - - if ( virtual_back_needed ) - { - hVBAPdata->back_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; - hVBAPdata->num_speaker_nodes_internal++; - return VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY; - } - - return NO_VIRTUAL_SPEAKER_NODE; /* No virtual back needed */ - } - - /* The following considers if TOP or BOTTOM virtual speaker is needed */ - for ( ch = 0; ch < hVBAPdata->num_speaker_nodes; ch++ ) - { - if ( group == SPEAKER_NODE_TOP_HALF ) - { - if ( speaker_node_ele_deg[ch] > max_elevation ) - { - max_elevation = speaker_node_ele_deg[ch]; - } - } - else - { - if ( ( -speaker_node_ele_deg[ch] ) > max_elevation ) - { - max_elevation = -speaker_node_ele_deg[ch]; - } - } - } - - if ( max_elevation > VBAP_NO_VIRTUAL_SPEAKER_NODE_ELE_LIMIT - VBAP_EPSILON ) - { - return NO_VIRTUAL_SPEAKER_NODE; - } - - /* Use virtual node */ - if ( group == SPEAKER_NODE_BOTTOM_HALF ) - { - hVBAPdata->bottom_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; - } - else - { - hVBAPdata->top_virtual_speaker_node_index = hVBAPdata->num_speaker_nodes_internal; - } - - hVBAPdata->num_speaker_nodes_internal++; - if ( max_elevation > VBAP_DISTRIBUTE_VIRTUAL_SPEAKER_NODE_ELE_LIMIT - VBAP_EPSILON ) - { - return VIRTUAL_SPEAKER_NODE_DISTRIBUTE_ENERGY; - } - - return VIRTUAL_SPEAKER_NODE_DISCARD_ENERGY; -} -#endif /*-------------------------------------------------------------------------* @@ -1852,7 +1102,6 @@ static enum VirtualSpeakerNodeType check_need_of_virtual_speaker_node( * Initialize speaker node data *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void init_speaker_node_direction_data_fx( VBAP_SPEAKER_NODE *speaker_node_data, /* o : storage for speaker node data */ const Word32 *speaker_node_azi_deg_fx, /* i : vector of speaker node azimuths Q22 */ @@ -1906,138 +1155,38 @@ static void init_speaker_node_direction_data_fx( speaker_node_data[ch].unit_vec_fx[0] = L_shr( L_mult( getCosWord16R2( azi_rad_fx ), getCosWord16R2( ele_rad_fx ) ), 1 ); /* Q15 + Q15 + Q1 - Q1 = Q30 */ move32(); speaker_node_data[ch].unit_vec_fx[1] = L_shr( L_mult( getSineWord16R2( azi_rad_fx ), getCosWord16R2( ele_rad_fx ) ), 1 ); /* Q15 + Q15 + Q1 - Q1 = Q30 */ - move32(); - speaker_node_data[ch].unit_vec_fx[2] = L_shr( L_deposit_h( getSineWord16R2( ele_rad_fx ) ), 1 ); /* Q15 + Q16 - Q1 = Q30 */ - move32(); - } - /* Check for largest horizontal gap if there are at least 3 horizontal speaker nodes */ - IF( GE_16( num_horiz, 3 ) ) - { - Word16 i; - UWord16 horiz_azi[VBAP_MAX_NUM_SPEAKER_NODES]; - - UWord16 largest_gap; - UWord16 temp; - - i = 0; - move16(); - FOR( ch = 0; ch < num_speaker_nodes && i < num_horiz; ch++ ) - { - test(); - IF( EQ_16( speaker_node_data[ch].group, SPEAKER_NODE_HORIZONTAL ) ) - { - Word16 exp1; - Word32 Mant2 = BASOP_Util_Add_Mant32Exp( speaker_node_azi_deg_fx[ch], Q31 - Q22, 23040 /* 360.0f in Q6 */, Q31 - Q6, &exp1 ); - - IF( L_shr( speaker_node_azi_deg_fx[ch], 22 ) < 0 ) - { - horiz_azi[i] = (UWord16) L_shr( Mant2, sub( 31, exp1 ) ); /* Q0 */ - } - ELSE - { - horiz_azi[i] = (UWord16) L_shr( speaker_node_azi_deg_fx[ch], Q22 ); /* Q0 */ - } - i = add( i, 1 ); - } - } - - /* Reorder horizontal azi to increasing order */ - sort( horiz_azi, num_horiz ); - - /* Find largest gap. Initialize with the wrap over gap. */ - largest_gap = add( sub( horiz_azi[0], horiz_azi[num_horiz - 1] ), 360 ); - - FOR( ch = 0; ch < num_horiz - 1; ch++ ) - { - temp = sub( horiz_azi[ch + 1], horiz_azi[ch] ); - if ( GT_16( temp, largest_gap ) ) - { - largest_gap = temp; - move16(); - } - } - - /* If largest gap is small enough, we have definitive zero elevation plane. - * Otherwise, we should assign all speaker nodes to one group. */ - if ( LE_16( largest_gap, VBAP_MAX_HORIZONTAL_GAP ) ) - { - in_all_mode = FALSE; - move16(); - } - } - - /* Designate all speaker nodes to same group if there was no definitive zero - * elevation plane. */ - IF( in_all_mode ) - { - FOR( ch = 0; ch < num_speaker_nodes; ch++ ) - { - speaker_node_data[ch].group = SPEAKER_NODE_ALL; - move16(); - } - } - - return; -} -#else -static void init_speaker_node_direction_data( - VBAP_SPEAKER_NODE *speaker_node_data, /* o : storage for speaker node data */ - const float *speaker_node_azi_deg, /* i : vector of speaker node azimuths */ - const float *speaker_node_ele_deg, /* i : vector of speaker node elevations */ - const int16_t num_speaker_nodes /* i : number of speaker nodes */ -) -{ - int16_t ch; - float azi_rad; - float ele_rad; - int16_t num_horiz = 0; - uint8_t in_all_mode = TRUE; - - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - speaker_node_data[ch].azi_deg = speaker_node_azi_deg[ch]; - azi_rad = speaker_node_azi_deg[ch] * PI_OVER_180; - if ( ( speaker_node_ele_deg[ch] >= -5 ) && ( speaker_node_ele_deg[ch] <= 5 ) ) - { - speaker_node_data[ch].ele_deg = 0.0f; - ele_rad = 0.0f; - speaker_node_data[ch].group = SPEAKER_NODE_HORIZONTAL; - num_horiz++; - } - else - { - speaker_node_data[ch].ele_deg = speaker_node_ele_deg[ch]; - ele_rad = speaker_node_ele_deg[ch] * PI_OVER_180; - if ( ele_rad < 0 ) - { - speaker_node_data[ch].group = SPEAKER_NODE_BOTTOM_HALF; - } - else - { - speaker_node_data[ch].group = SPEAKER_NODE_TOP_HALF; - } - } - - speaker_node_data[ch].unit_vec[0] = cosf( azi_rad ) * cosf( ele_rad ); - speaker_node_data[ch].unit_vec[1] = sinf( azi_rad ) * cosf( ele_rad ); - speaker_node_data[ch].unit_vec[2] = sinf( ele_rad ); + move32(); + speaker_node_data[ch].unit_vec_fx[2] = L_shr( L_deposit_h( getSineWord16R2( ele_rad_fx ) ), 1 ); /* Q15 + Q16 - Q1 = Q30 */ + move32(); } - /* Check for largest horizontal gap if there are at least 3 horizontal speaker nodes */ - if ( num_horiz >= 3 ) + IF( GE_16( num_horiz, 3 ) ) { - int16_t i; - uint16_t horiz_azi[VBAP_MAX_NUM_SPEAKER_NODES]; - uint16_t largest_gap; - uint16_t temp; + Word16 i; + UWord16 horiz_azi[VBAP_MAX_NUM_SPEAKER_NODES]; + + UWord16 largest_gap; + UWord16 temp; i = 0; - for ( ch = 0; ch < num_speaker_nodes && i < num_horiz; ch++ ) + move16(); + FOR( ch = 0; ch < num_speaker_nodes && i < num_horiz; ch++ ) { - if ( speaker_node_data[ch].group == SPEAKER_NODE_HORIZONTAL ) + test(); + IF( EQ_16( speaker_node_data[ch].group, SPEAKER_NODE_HORIZONTAL ) ) { - horiz_azi[i] = speaker_node_azi_deg[ch] < 0.0f ? (uint16_t) floorf( speaker_node_azi_deg[ch] + 360.0f ) : (uint16_t) floorf( speaker_node_azi_deg[ch] ); - i++; + Word16 exp1; + Word32 Mant2 = BASOP_Util_Add_Mant32Exp( speaker_node_azi_deg_fx[ch], Q31 - Q22, 23040 /* 360.0f in Q6 */, Q31 - Q6, &exp1 ); + + IF( L_shr( speaker_node_azi_deg_fx[ch], 22 ) < 0 ) + { + horiz_azi[i] = (UWord16) L_shr( Mant2, sub( 31, exp1 ) ); /* Q0 */ + } + ELSE + { + horiz_azi[i] = (UWord16) L_shr( speaker_node_azi_deg_fx[ch], Q22 ); /* Q0 */ + } + i = add( i, 1 ); } } @@ -2045,45 +1194,46 @@ static void init_speaker_node_direction_data( sort( horiz_azi, num_horiz ); /* Find largest gap. Initialize with the wrap over gap. */ - largest_gap = horiz_azi[0] - horiz_azi[num_horiz - 1] + 360; + largest_gap = add( sub( horiz_azi[0], horiz_azi[num_horiz - 1] ), 360 ); - for ( ch = 0; ch < num_horiz - 1; ch++ ) + FOR( ch = 0; ch < num_horiz - 1; ch++ ) { - temp = horiz_azi[ch + 1] - horiz_azi[ch]; - if ( temp > largest_gap ) + temp = sub( horiz_azi[ch + 1], horiz_azi[ch] ); + if ( GT_16( temp, largest_gap ) ) { largest_gap = temp; + move16(); } } /* If largest gap is small enough, we have definitive zero elevation plane. * Otherwise, we should assign all speaker nodes to one group. */ - if ( largest_gap <= VBAP_MAX_HORIZONTAL_GAP ) + if ( LE_16( largest_gap, VBAP_MAX_HORIZONTAL_GAP ) ) { in_all_mode = FALSE; + move16(); } } /* Designate all speaker nodes to same group if there was no definitive zero * elevation plane. */ - if ( in_all_mode ) + IF( in_all_mode ) { - for ( ch = 0; ch < num_speaker_nodes; ch++ ) + FOR( ch = 0; ch < num_speaker_nodes; ch++ ) { speaker_node_data[ch].group = SPEAKER_NODE_ALL; + move16(); } } return; } -#endif /*-------------------------------------------------------------------------* * matrix_inverse_3x3() * * 3-by-3 matrix inverse *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void matrix_inverse_3x3_32_fx( const Word32 **input_matrix_fx, /* i : input matrix Q30 */ Word32 inverse_matrix_fx[3][3], /* o : output matrix Q(31 - exp_inv_mat) */ @@ -2164,42 +1314,6 @@ static void matrix_inverse_3x3_32_fx( return; } -#else -static void matrix_inverse_3x3( - const float **input_matrix, /* i : input matrix */ - float inverse_matrix[3][3] /* o : output matrix */ -) -{ - int16_t k; - float determinant; - float cross_vec[3]; - - vbap_crossp( input_matrix[1], input_matrix[2], cross_vec ); - - determinant = dotp( input_matrix[0], cross_vec, 3 ); - - for ( k = 0; k < 3; k++ ) - { - inverse_matrix[k][0] = cross_vec[k] / determinant; - } - - vbap_crossp( input_matrix[2], input_matrix[0], cross_vec ); - - for ( k = 0; k < 3; k++ ) - { - inverse_matrix[k][1] = cross_vec[k] / determinant; - } - - vbap_crossp( input_matrix[0], input_matrix[1], cross_vec ); - - for ( k = 0; k < 3; k++ ) - { - inverse_matrix[k][2] = cross_vec[k] / determinant; - } - - return; -} -#endif /*-------------------------------------------------------------------------* * check_and_store_triplet() * @@ -2207,7 +1321,6 @@ static void matrix_inverse_3x3( * valid triplet is found. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static Word16 check_and_store_triplet_fx( const Word16 chA, /* i : first channel index that forms the loudspeaker triplet */ const Word16 chB, /* i : second channel index that forms the loudspeaker triplet */ @@ -2304,77 +1417,6 @@ static Word16 check_and_store_triplet_fx( /* Triplet was not good */ return 0; } -#else -static int16_t check_and_store_triplet( - const int16_t chA, /* i : first channel index that forms the loudspeaker triplet */ - const int16_t chB, /* i : second channel index that forms the loudspeaker triplet */ - const int16_t chC, /* i : third channel index that forms the loudspeaker triplet */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data structure */ - VBAP_VS_TRIPLET *triplets, /* o : vector of virtual surface triplets */ - int16_t *triplet_index, /* i/o: index for the next free triplet slot */ - float *triplet_azidegs, /* o : center azimuths of the found triplets */ - int16_t *triplet_order /* o : initial order of triplet indices */ -) -{ - int16_t ch_check; - int16_t k; - int16_t speaker_node_found_inside_triplet; - uint8_t triplet_ok; - float inverse_matrix[3][3], unnormalized_gains[3]; - const float *speaker_node_triplet_unit_vec_matrix[3]; - - /* Triplet found, determine inverse matrix for VBAP formulation */ - speaker_node_triplet_unit_vec_matrix[0] = speaker_node_data[chA].unit_vec; - speaker_node_triplet_unit_vec_matrix[1] = speaker_node_data[chB].unit_vec; - speaker_node_triplet_unit_vec_matrix[2] = speaker_node_data[chC].unit_vec; - matrix_inverse_3x3( speaker_node_triplet_unit_vec_matrix, inverse_matrix ); - - /* Check through all speaker nodes that none of them are within the triplet. - * Node within the triplet is identified by that all three panning gains are positive. - * Epsilon-condition is for some small rounding issues.*/ - speaker_node_found_inside_triplet = 0; - for ( ch_check = 0; ch_check < num_speaker_nodes; ch_check++ ) - { - if ( ( ch_check != chA ) && ( ch_check != chB ) && ( ch_check != chC ) ) - { - triplet_ok = vector_matrix_multiply_3x3( speaker_node_data[ch_check].unit_vec, inverse_matrix, unnormalized_gains ); - if ( triplet_ok && unnormalized_gains[0] > VBAP_EPSILON && unnormalized_gains[1] > VBAP_EPSILON && unnormalized_gains[2] > VBAP_EPSILON ) - { - speaker_node_found_inside_triplet = 1; - break; - } - } - } - - /* No speaker node inside triplet -> appropriate triplet found, save data. */ - if ( speaker_node_found_inside_triplet == 0 ) - { - triplets[*triplet_index].speaker_node[0] = (uint8_t) chA; - triplets[*triplet_index].speaker_node[1] = (uint8_t) chB; - triplets[*triplet_index].speaker_node[2] = (uint8_t) chC; - for ( k = 0; k < 3; k++ ) - { - mvr2r( inverse_matrix[k], triplets[*triplet_index].inverse_matrix[k], 3 ); - } - - /* Get center azimuth for fast search use */ - triplet_azidegs[*triplet_index] = atan2f( speaker_node_data[chA].unit_vec[1] + speaker_node_data[chB].unit_vec[1] + speaker_node_data[chC].unit_vec[1], - speaker_node_data[chA].unit_vec[0] + speaker_node_data[chB].unit_vec[0] + speaker_node_data[chC].unit_vec[0] ) * - _180_OVER_PI; - - /* Store increasing order indices for the later sorting step. */ - triplet_order[*triplet_index] = *triplet_index; - - ( *triplet_index )++; - - return 1; - } - - /* Triplet was not good */ - return 0; -} -#endif /*-------------------------------------------------------------------------* * determine_virtual_surface_triplets() * @@ -2386,7 +1428,6 @@ static int16_t check_and_store_triplet( /*! r: number of virtual surface triplets */ -#ifdef IVAS_FLOAT_FIXED static Word16 determine_virtual_surface_triplets_fx( const Word16 num_speaker_nodes, /* i : number of speaker nodes */ const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data structure */ @@ -2505,101 +1546,6 @@ static Word16 determine_virtual_surface_triplets_fx( return num_triplets; } -#else -static int16_t determine_virtual_surface_triplets( - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data structure */ - int16_t connections[][2], /* i : vector of all connections */ - const int16_t max_num_connections, /* i : max number of connections */ - VBAP_VS_TRIPLET *triplets, /* o : vector of virtual surface triplets */ - int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS], /* o : initial search indices for this set of triplets corresponding to the search struct */ - enum SpeakerNodeGroup allowed_group /* i : group of allowed speaker nodes for forming the triplets in this call */ -) -{ - int16_t chA, chB, chC, k, l, m; - int16_t num_triplets = 0; - int16_t num_connected_to_chA; - int16_t connected_to_chA[VBAP_MAX_NUM_SPEAKER_NODES]; - int16_t connection_uses_left[VBAP_MAX_NUM_SPEAKER_NODES]; - float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS]; - int16_t triplet_order[VBAP_MAX_NUM_TRIPLETS]; - - /* Each connection can be used exactly by two different virtual surface triplets. */ - set_s( connection_uses_left, 2, VBAP_MAX_NUM_SPEAKER_NODES ); - - for ( chA = 0; chA < num_speaker_nodes; chA++ ) - { - /* Early skip if not in correct group. */ - if ( speaker_node_data[chA].group != allowed_group ) - { - continue; - } - - /* Get all connections connected to current chA that have not been used by - * two triplets yet. */ - num_connected_to_chA = 0; - for ( k = 0; k < max_num_connections; k++ ) - { - if ( ( connections[k][0] == chA || connections[k][1] == chA ) && connection_uses_left[k] > 0 ) - { - connected_to_chA[num_connected_to_chA] = k; - num_connected_to_chA++; - } - } - - /* Check that we have enough connections to use. We need at least two available connections to form a triplet. - * This can fail in later stages when all connections are already used. */ - if ( num_connected_to_chA < 2 ) - { - continue; - } - - /* Try to form triplets from each valid connection. */ - for ( k = 0; k < num_connected_to_chA; k++ ) - { - int16_t connect_index_k = connected_to_chA[k]; - chB = connections[connect_index_k][0] == chA ? connections[connect_index_k][1] : connections[connect_index_k][0]; - for ( l = k + 1; l < num_connected_to_chA; l++ ) - { - int16_t connect_index_l = connected_to_chA[l]; - chC = connections[connect_index_l][0] == chA ? connections[connect_index_l][1] : connections[connect_index_l][0]; - - /* With chA, chB, and chC selected, we still need to find connection between chB and chC and verify that the triplet is valid */ - for ( m = 0; m < max_num_connections; m++ ) - { - if ( ( connections[m][0] == chB && connections[m][1] == chC ) || ( connections[m][1] == chB && connections[m][0] == chC ) ) - { - if ( check_and_store_triplet( chA, chB, chC, num_speaker_nodes, speaker_node_data, triplets, &num_triplets, triplet_azidegs, triplet_order ) ) - { - connection_uses_left[connect_index_k]--; - connection_uses_left[connect_index_l]--; - connection_uses_left[m]--; - break; - } - } - } - - /* Check if chA-chB connection has been used in two triplets already. If yes, then break out of loop - * as this connection cannot be used for more triplets and we need to continue with another chA-chB - * connection. */ - if ( connection_uses_left[connect_index_k] < 1 ) - { - break; - } - } - } - } - - /* All triplets should be stored now. Sort them for search use and then determine the initial search indices for - * each search sector for this search struct. */ - v_sort_ind( triplet_azidegs, triplet_order, num_triplets ); - reorder_triplets( triplets, triplet_order, num_triplets ); - determine_initial_search_indices( num_triplets, triplet_azidegs, initial_search_indices ); - - return num_triplets; -} - -#endif /*-------------------------------------------------------------------------* * determine_initial_search_indices() * @@ -2607,7 +1553,6 @@ static int16_t determine_virtual_surface_triplets( *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void determine_initial_search_indices_fx( const Word16 num_triplets, /* i : number of triplets */ const Word32 triplet_azidegs_fx[VBAP_MAX_NUM_TRIPLETS], /* i : azimuths of triplets (in degrees) Q19 */ @@ -2663,55 +1608,6 @@ static void determine_initial_search_indices_fx( return; } -#else -static void determine_initial_search_indices( - const int16_t num_triplets, /* i : number of triplets */ - const float triplet_azidegs[VBAP_MAX_NUM_TRIPLETS], /* i : azimuths of triplets (in degrees) */ - int16_t initial_search_indices[VBAP_NUM_SEARCH_SECTORS] /* o : initial search indices */ -) -{ - int16_t i, j; - float sector_reference_azideg; - float sector_border_start_azideg; - float sector_border_end_azideg; - int16_t best_index; - float min_azideg_diff; - float azideg_diff; - - for ( i = 0; i < VBAP_NUM_SEARCH_SECTORS; i++ ) - { - sector_border_start_azideg = i * VBAP_SEARCH_SECTOR_SIZE; - sector_border_end_azideg = ( i + 1 ) * VBAP_SEARCH_SECTOR_SIZE; - sector_reference_azideg = ( sector_border_start_azideg + sector_border_end_azideg ) / 2.0f; - best_index = 0; - min_azideg_diff = 9999.9f; - - for ( j = 0; j < num_triplets; j++ ) - { - azideg_diff = sector_reference_azideg - triplet_azidegs[j]; - if ( azideg_diff > 180.0f ) - { - azideg_diff -= 360.0f; - } - else if ( azideg_diff < -180.0f ) - { - azideg_diff += 360.0f; - } - azideg_diff = fabsf( azideg_diff ); - - if ( azideg_diff < min_azideg_diff ) - { - min_azideg_diff = azideg_diff; - best_index = j; - } - } - - initial_search_indices[i] = best_index; - } - - return; -} -#endif /*-------------------------------------------------------------------------* * determine_connections() @@ -2719,7 +1615,6 @@ static void determine_initial_search_indices( * Determine all valid connections between all speaker nodes *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error determine_connections_fx( const Word16 num_speaker_nodes, /* i : number of speaker nodes */ const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ @@ -2783,64 +1678,6 @@ static ivas_error determine_connections_fx( return IVAS_ERR_OK; } -#else -static ivas_error determine_connections( - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ - int16_t connections[][2], /* o : vector of connections */ - const int16_t max_num_connections, /* i : max number of connections */ - int16_t *group1_count, /* o : number of connections in first group */ - int16_t *group2_start, /* o : start of second group of connections */ - int16_t *group2_count /* o : number of connections in second group */ -) -{ - int16_t num_non_crossing_planes; - int16_t c; - int16_t connection_write_index = 0; - float non_crossing_plane_elevation_deg[VBAP_MAX_PLANES]; - ivas_error error; - - set_f( non_crossing_plane_elevation_deg, 0.0f, VBAP_MAX_PLANES ); - - /* Reset connection data */ - for ( c = 0; c < max_num_connections; c++ ) - { - connections[c][0] = VBAP_NOT_VALID_CONNECTION; - } - - /* This function determines some prominent elevated planes, that are favoured in making node-node connections. */ - num_non_crossing_planes = determine_non_crossing_planes( num_speaker_nodes, speaker_node_data, non_crossing_plane_elevation_deg ); - - /* Process in different mode based on the grouping. It is enough to check for first node. */ - if ( speaker_node_data[0].group == SPEAKER_NODE_ALL ) - { - if ( ( error = formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_ALL, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* The node-node connections are determined in three stages: bottom, horizontal, and top. */ - if ( ( error = formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_BOTTOM_HALF, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ) ) != IVAS_ERR_OK ) - { - return error; - } - *group2_start = connection_write_index; - - formulate_horizontal_connections( speaker_node_data, num_speaker_nodes, connections, &connection_write_index ); - *group1_count = connection_write_index; - - if ( ( error = formulate_half_sphere_connections( speaker_node_data, num_speaker_nodes, SPEAKER_NODE_TOP_HALF, connections, &connection_write_index, max_num_connections, num_non_crossing_planes, non_crossing_plane_elevation_deg ) ) != IVAS_ERR_OK ) - { - return error; - } - *group2_count = connection_write_index - *group2_start; - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * determine_connection_class() * @@ -2848,7 +1685,6 @@ static ivas_error determine_connections( *-------------------------------------------------------------------------*/ /*! r: type of connection */ -#ifdef IVAS_FLOAT_FIXED static enum ConnectionClass determine_connection_class_fx( const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ const Word16 num_speaker_nodes, /* i : number of speaker nodes */ @@ -3021,109 +1857,7 @@ static enum ConnectionClass determine_connection_class_fx( Word16 Flag1 = BASOP_Util_Cmp_Mant32Exp( v1v1_fx, Q31 - Q25, var, add( shl( max_vec_diff_e, 1 ), 4 + 20 ) ); IF( EQ_16( Flag1, 1 ) ) { - IF( LT_32( L_abs( L_sub( node_data[chB].unit_vec_fx[2], node_data[chA].unit_vec_fx[2] ) ), 1073742 /* 0.001f in Q30 */ ) ) - { - return ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION; - } - } - } - } - } - - return REGULAR_CONNECTION; -} -#else -/*! r: type of connection */ -static enum ConnectionClass determine_connection_class( - const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ - const Word16 num_speaker_nodes, /* i : number of speaker nodes */ - const enum SpeakerNodeGroup group, /* i : speaker node group */ - const int16_t chA, /* i : speaker node counter 1 */ - const int16_t chB /* i : speaker node counter 2 */ -) -{ - int16_t ch, k; - const float *p1, *v2; - float v1v1, v1v2, v2v2, v1p1, v2p1; - float determinant; - float norm_distance_on_v1; - float vec_diff[3]; - float v1[3]; - float vTarget[3]; - float energy_sum; - float eq_value; - float uvecdot; - - /* Check if connection passes through origin. This is not desired. - * When this happens, unit vectors point in opposite directions. */ - uvecdot = dotp( node_data[chA].unit_vec, node_data[chB].unit_vec, 3 ) + 1.0f; - if ( uvecdot < VBAP_EPSILON && uvecdot > -VBAP_EPSILON ) - { - return CONNECTION_WITH_SPEAKER_NODE_BEHIND; - } - - /* This loop checks the chA-chB connection with respect to all loudspeakers: - - in case there is a node behind or nearly behind the connection line. These - connections need to be discarded. - - in case there is a node that is closer to the connection line than 1/5 of the - connection length AND at the same horizontal plane. These connections need to be - weighted with a penalty (a special case, for example avoiding elevated L,R,C triplet) - */ - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - /* Select speaker_node only within TOP or BOTTOM sphere half, not being part of chA-chB pair */ - if ( ( group == node_data[ch].group ) && ( ch != chA ) && ( ch != chB ) ) - { - /* The following lines formulate the point on the chA-chB-connection that is - nearest to the origo-ch-line */ - p1 = node_data[chA].unit_vec; - for ( k = 0; k < 3; k++ ) - { - v1[k] = node_data[chB].unit_vec[k] - node_data[chA].unit_vec[k]; - } - v2 = node_data[ch].unit_vec; - v1v1 = dotp( v1, v1, 3 ); - v1v2 = dotp( v1, v2, 3 ); - v2v2 = 1.0f; /* dotp(v2, v2) is always 1. */ - v1p1 = dotp( v1, p1, 3 ); - v2p1 = dotp( v2, p1, 3 ); - determinant = ( v1v1 ) * ( -v2v2 ) + ( v1v2 * v1v2 ); - /* Norm distance = distance parameter on line chA-chB, determines point that is - nearest to origo-ch line. Distance 0 means chA and distance 1 means chB. Can be - outside this region as well.*/ - norm_distance_on_v1 = ( 1.0f / determinant ) * ( ( v2v2 ) * ( v1p1 ) + ( -v1v2 ) * ( v2p1 ) ); - - /* Continue only if the nearest point is between chA and chB */ - if ( norm_distance_on_v1 > 0.0f && norm_distance_on_v1 < 1.0f ) - { - /* Formulate vTarget, that is an unit vector that goes through the determined point on chA-chB connection */ - energy_sum = 0.0f; - for ( k = 0; k < 3; k++ ) - { - vTarget[k] = p1[k] + norm_distance_on_v1 * v1[k]; - energy_sum += vTarget[k] * vTarget[k]; - vec_diff[k] = vTarget[k] - v2[k]; - } - eq_value = sqrtf( 1.0f / energy_sum ); - for ( k = 0; k < 3; k++ ) - { - vTarget[k] *= eq_value; - } - - /* A check if the angle between vTarget and node_data[ch].unit_vec is less than 1 degree. - Essentially reveals if there is a speaker node too close "behind" the connection. Such - connections should be rejected.*/ - if ( dotp( vTarget, v2, 3 ) > 0.9998f ) - { - return CONNECTION_WITH_SPEAKER_NODE_BEHIND; - } - - /* A special case, mainly accounting for ELEVATED L,R,C speaker nodes. - A triplet between these nodes is not desired if there is a top node, - a penalty is implemented to take care of this. */ - if ( sqrtf( v1v1 ) > 5.0f * sqrtf( dotp( vec_diff, vec_diff, 3 ) ) ) - { - if ( fabsf( node_data[chB].unit_vec[2] - node_data[chA].unit_vec[2] ) < VBAP_EPSILON ) + IF( LT_32( L_abs( L_sub( node_data[chB].unit_vec_fx[2], node_data[chA].unit_vec_fx[2] ) ), 1073742 /* 0.001f in Q30 */ ) ) { return ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION; } @@ -3134,7 +1868,6 @@ static enum ConnectionClass determine_connection_class( return REGULAR_CONNECTION; } -#endif /*-------------------------------------------------------------------------* * formulate_horizontal_connections() @@ -3142,7 +1875,6 @@ static enum ConnectionClass determine_connection_class( * Formulate connections in the horizontal plane *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void formulate_horizontal_connections_fx( const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ const Word16 num_speaker_nodes, /* i : number of speaker nodes */ @@ -3202,51 +1934,6 @@ static void formulate_horizontal_connections_fx( return; } -#else -static void formulate_horizontal_connections( - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - int16_t connections[][2], /* o : vector of all connections */ - int16_t *connection_write_index ) -{ - int16_t ch; - int16_t chCheck; - int16_t next_index; - float min_arc_diff; - float arc_diff; - - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - /* Find next horizontal speaker node */ - if ( speaker_node_data[ch].group == SPEAKER_NODE_HORIZONTAL ) - { - next_index = -1; - min_arc_diff = 9999.0f; - for ( chCheck = 0; chCheck < num_speaker_nodes; chCheck++ ) - { - if ( ( ch != chCheck ) && ( speaker_node_data[chCheck].group == SPEAKER_NODE_HORIZONTAL ) ) - { - arc_diff = speaker_node_data[chCheck].azi_deg - speaker_node_data[ch].azi_deg; - while ( arc_diff < 0.0f ) - { - arc_diff += 360.0f; - } - if ( arc_diff < min_arc_diff ) - { - min_arc_diff = arc_diff; - next_index = chCheck; - } - } - } - connections[*connection_write_index][0] = ch; - connections[*connection_write_index][1] = next_index; - ( *connection_write_index )++; - } - } - - return; -} -#endif /*-------------------------------------------------------------------------* * check_plane_crossing() @@ -3255,7 +1942,6 @@ static void formulate_horizontal_connections( *-------------------------------------------------------------------------*/ /*! r: truth value for crossing */ -#ifdef IVAS_FLOAT_FIXED static Word16 check_plane_crossing_fx( const Word32 ele1_deg_fx, /* i : speaker node 1 elevation Q22 */ const Word32 ele2_deg_fx, /* i : speaker node 2 elevation Q22 */ @@ -3282,40 +1968,12 @@ static Word16 check_plane_crossing_fx( return 0; } -#else -static int16_t check_plane_crossing( - const float ele1_deg, /* i : speaker node 1 elevation */ - const float ele2_deg, /* i : speaker node 2 elevation */ - const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ - const float *non_crossing_plane_elevation_deg /* i : vector non-crossing plane elevations*/ -) -{ - /* Find if the connection crosses a non-crossing plane, with 1-degree threshold. */ - int16_t plane; - - for ( plane = 0; plane < num_non_crossing_planes; plane++ ) - { - if ( ( ele1_deg > non_crossing_plane_elevation_deg[plane] + 1.0f ) && ( ele2_deg < non_crossing_plane_elevation_deg[plane] - 1.0f ) ) - { - return 1; - } - - if ( ( ele2_deg > non_crossing_plane_elevation_deg[plane] + 1.0f ) && ( ele1_deg < non_crossing_plane_elevation_deg[plane] - 1.0f ) ) - { - return 1; - } - } - - return 0; -} -#endif /*-------------------------------------------------------------------------* * get_half_sphere_connection_options() * * Get list of all potential connections at the half-sphere *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error get_half_sphere_connection_options_fx( const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ const enum SpeakerNodeGroup group, /* i : speaker node group */ @@ -3479,133 +2137,12 @@ static ivas_error get_half_sphere_connection_options_fx( return IVAS_ERR_OK; } -#else -static ivas_error get_half_sphere_connection_options( - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ - const enum SpeakerNodeGroup group, /* i : speaker node group */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ - const float *non_crossing_plane_elevation_deg, /* i : vector of non-crossing plane elevations */ - ConnectionOption **connection_options_pr, /* o : list of connection options */ - int16_t *num_connection_options /* o : number of connection options */ -) -{ - int16_t max_num_connection_options = 0; - int16_t index = 0; - int16_t node, chA, chB, c, c_cmp; - ConnectionOption *c_options, *c_options_reorder; - - /* Count max num connection options at the half sphere */ - for ( node = 0; node < num_speaker_nodes; node++ ) - { - if ( speaker_node_data[node].group == group || speaker_node_data[node].group == SPEAKER_NODE_HORIZONTAL ) - { - max_num_connection_options += index; - index++; - } - } - - /* Init memory for connection options */ - if ( ( c_options = (ConnectionOption *) malloc( sizeof( ConnectionOption ) * max_num_connection_options ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - - for ( c = 0; c < max_num_connection_options; c++ ) - { - c_options[c].chA = -1; - c_options[c].chB = -1; - c_options[c].arc = 1e20f; - c_options[c].arc_weighted = 1e20f; - } - - /* Determine connection options for the half-sphere */ - index = 0; - for ( chA = 0; chA < num_speaker_nodes; chA++ ) - { - /* First loudspeaker at the connection is at the half sphere */ - if ( speaker_node_data[chA].group == group || speaker_node_data[chA].group == SPEAKER_NODE_HORIZONTAL ) - { - for ( chB = chA + 1; chB < num_speaker_nodes; chB++ ) - { - /* Second loudspeaker at the connection is at the half sphere, but so that first and second are not both horizontal. */ - if ( ( speaker_node_data[chB].group == group ) || ( speaker_node_data[chB].group == SPEAKER_NODE_HORIZONTAL && speaker_node_data[chA].group == group ) ) - { - int16_t ConnectionClass = determine_connection_class( speaker_node_data, num_speaker_nodes, group, chA, chB ); - /* Connection is considered only if there is no speaker node behind it */ - if ( ConnectionClass != CONNECTION_WITH_SPEAKER_NODE_BEHIND ) - { - /* Store connection information */ - c_options[index].chA = chA; - c_options[index].chB = chB; - c_options[index].arc = acosf( dotp( speaker_node_data[chA].unit_vec, speaker_node_data[chB].unit_vec, 3 ) ); - c_options[index].arc_weighted = c_options[index].arc; - - /* A special case, mainly accounting for ELEVATED L,R,C speaker nodes. - A triplet between these nodes is not desired if there is a top node, - a penalty is implemented to take care of this. */ - if ( ConnectionClass == ELEVATED_PLANE_THIN_TRIANGLE_CONNECTION ) - { - c_options[index].arc_weighted *= 2.0f; - } - - /* If the connection passes a pre-determined plane of speaker nodes, then add further penalty */ - if ( check_plane_crossing( speaker_node_data[chA].ele_deg, speaker_node_data[chB].ele_deg, num_non_crossing_planes, non_crossing_plane_elevation_deg ) ) - { - c_options[index].arc_weighted *= 2.0f; - } - index++; - } - } - } - } - } - /* Number of found connection options at the half sphere */ - *num_connection_options = index; - - /* Init memory for reordered connection options and order by arc_weighted, - * which informs of the preference order of the connections in case they cross */ - if ( ( c_options_reorder = (ConnectionOption *) malloc( sizeof( ConnectionOption ) * ( *num_connection_options ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for VBAP data\n" ) ); - } - - for ( c = 0; c < *num_connection_options; c++ ) - { - float min_arc_weighted; - int16_t min_arc_index; - min_arc_weighted = 1e20f; - min_arc_index = -1; - - for ( c_cmp = 0; c_cmp < *num_connection_options; c_cmp++ ) - { - if ( c_options[c_cmp].arc_weighted <= min_arc_weighted ) - { - min_arc_weighted = c_options[c_cmp].arc_weighted; - min_arc_index = c_cmp; - } - } - c_options_reorder[c].chA = c_options[min_arc_index].chA; - c_options_reorder[c].chB = c_options[min_arc_index].chB; - c_options_reorder[c].arc = c_options[min_arc_index].arc; - c_options_reorder[c].arc_weighted = c_options[min_arc_index].arc_weighted; - c_options[min_arc_index].arc_weighted = 1e20f; - } - - /* Set reordered connections as output and free temporary data */ - *connection_options_pr = c_options_reorder; - free( c_options ); - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * formulate_half_sphere_connections() * * Formulate half-sphere connections *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error formulate_half_sphere_connections_fx( const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ const Word16 num_speaker_nodes, /* i : number of speaker nodes */ @@ -3874,152 +2411,6 @@ static ivas_error formulate_half_sphere_connections_fx( return IVAS_ERR_OK; } -#else -static ivas_error formulate_half_sphere_connections( - const VBAP_SPEAKER_NODE *speaker_node_data, /* i : speaker node data */ - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const enum SpeakerNodeGroup group, /* i : speaker node group */ - int16_t connections[][2], /* o : vector of connections */ - int16_t *connection_write_index, - const int16_t max_num_connections, /* i : max number of connections */ - const int16_t num_non_crossing_planes, /* i : number of non-crossing planes */ - const float *non_crossing_plane_elevation_deg /* i : vector of non-crossing plane elevations */ -) -{ - /* Variable initializations */ - int16_t c, chA, chB, cmp_chA, cmp_chB, k, c_opt; - int16_t new_connection_is_valid; - int16_t within_first_arc; - float planeCrossingVec[3]; - float new_arc; - float new_cross[3]; - float tmpFloat; - float cmp_arc; - float normVal; - float angleCmp; - float connection_arc[( VBAP_MAX_NUM_SPEAKER_NODES - 2 ) * 3]; - float connection_cross[( VBAP_MAX_NUM_SPEAKER_NODES - 2 ) * 3][3]; - ConnectionOption *connection_options; - int16_t num_connection_options; - int16_t half_sphere_first_connection; - ivas_error error; - - half_sphere_first_connection = *connection_write_index; - - /* Obtain all connection options (i.e., channel pairs) at the half sphere. The function orders them - * in terms of which connection to keep if two connections would cross each other. */ - if ( ( error = get_half_sphere_connection_options( - speaker_node_data, - group, - num_speaker_nodes, - num_non_crossing_planes, - non_crossing_plane_elevation_deg, - &connection_options, - &num_connection_options ) ) != IVAS_ERR_OK ) - { - return error; - } - - set_f( connection_arc, 0.0f, max_num_connections ); - for ( c = 0; c < max_num_connections; c++ ) - { - set_f( connection_cross[c], 0.0f, 3 ); - } - - /* The following loop goes through all reasonable chA - chB pairs for the half-sphere */ - c_opt = 0; - while ( c_opt < num_connection_options && *connection_write_index < max_num_connections ) - { - chA = connection_options[c_opt].chA; - chB = connection_options[c_opt].chB; - new_arc = connection_options[c_opt].arc; - - /* Cross-product is needed for later stages */ - vbap_crossp( speaker_node_data[chA].unit_vec, speaker_node_data[chB].unit_vec, new_cross ); - - /* Determine if new connection between chA and chB is valid */ - new_connection_is_valid = 1; - c = half_sphere_first_connection; - while ( ( c < *connection_write_index ) && new_connection_is_valid ) - { - cmp_chA = connections[c][0]; - cmp_chB = connections[c][1]; - /* The connections are compared only if they don't involve same speaker nodes */ - if ( ( cmp_chA != chA ) && ( cmp_chA != chB ) && ( cmp_chB != chA ) && ( cmp_chB != chB ) ) - { - /* The following lines determine if the connection chA-chB crosses with the connection cmp_chA-cmp_chB.*/ - /* The connections, i.e., node-pairs determine a plane. The crossing can be determined by - * studying the intersection of these planes. */ - vbap_crossp( connection_cross[c], new_cross, planeCrossingVec ); - tmpFloat = 1e-12f; - cmp_arc = connection_arc[c]; - for ( k = 0; k < 3; k++ ) - { - tmpFloat += planeCrossingVec[k] * planeCrossingVec[k]; - } - normVal = sqrtf( 1.0f / tmpFloat ); - - for ( k = 0; k < 3; k++ ) - { - planeCrossingVec[k] *= normVal; - } - - /* If the plane intersection is between both connections, then the two connections cross. */ - /* Study first if the crossing is between arc chA-chB */ - angleCmp = acosf( dotp( planeCrossingVec, speaker_node_data[chA].unit_vec, 3 ) ); - angleCmp += acosf( dotp( planeCrossingVec, speaker_node_data[chB].unit_vec, 3 ) ); - - within_first_arc = 0; - if ( fabsf( new_arc - angleCmp ) < 0.01f ) - { - within_first_arc = 1; - } - else if ( fabsf( new_arc - ( 2.0f * EVS_PI - angleCmp ) ) < 0.01f ) - { - within_first_arc = 1; - /* In this case, the plane crossing vector is inverted. The inverse is another - * plane-crossing vector, and detected to be between chA-chB connection.*/ - for ( k = 0; k < 3; k++ ) - { - planeCrossingVec[k] *= -1.0f; - } - } - - /* Study if the crossing is also between arc cmp_chA-cmp_chB */ - if ( within_first_arc > 0 ) - { - angleCmp = acosf( dotp( planeCrossingVec, speaker_node_data[cmp_chA].unit_vec, 3 ) ); - angleCmp += acosf( dotp( planeCrossingVec, speaker_node_data[cmp_chB].unit_vec, 3 ) ); - if ( fabsf( cmp_arc - angleCmp ) < 0.01f ) - { - /* A crossing is detected. The new connection is not valid, because - * the connections were ordered in order of preference (arc_weighted) */ - new_connection_is_valid = 0; - } - } - } - c++; - } - - /* Store the new connection which has been confirmed valid */ - if ( new_connection_is_valid > 0 ) - { - connections[*connection_write_index][0] = chA; - connections[*connection_write_index][1] = chB; - connection_arc[*connection_write_index] = new_arc; - connection_cross[*connection_write_index][0] = new_cross[0]; - connection_cross[*connection_write_index][1] = new_cross[1]; - connection_cross[*connection_write_index][2] = new_cross[2]; - ( *connection_write_index )++; - } - c_opt++; - } - - free( connection_options ); - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------------* * determine_non_crossing_planes() @@ -4029,7 +2420,6 @@ static ivas_error formulate_half_sphere_connections( /*! r: number of non-crossing planes */ -#ifdef IVAS_FLOAT_FIXED static Word16 determine_non_crossing_planes_fx( const Word16 num_speaker_nodes, /* i : number of speaker nodes */ const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ @@ -4130,89 +2520,6 @@ static Word16 determine_non_crossing_planes_fx( return num_planes; } -#else -static int16_t determine_non_crossing_planes( - const int16_t num_speaker_nodes, /* i : number of speaker nodes */ - const VBAP_SPEAKER_NODE *node_data, /* i : speaker node data */ - float *non_crossing_plane_elevation_deg /* o : vector of non-crossing plane elevations */ -) -{ - float next_ele_check; - float ele_check; - float max_gap; - float gap_to_next_ls; - int16_t ch, ch_cmp; - int16_t num_planes; - - ele_check = -999.9f; - num_planes = 0; - - /* For each plane, check if a non-crossing plane should be determined */ - while ( ele_check < 90.0f ) - { - next_ele_check = 999.9f; - /* Find next node elevation that is not in horizontal plane */ - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - if ( ( node_data[ch].group != SPEAKER_NODE_HORIZONTAL ) && ( node_data[ch].ele_deg > ele_check + VBAP_EPSILON ) && ( node_data[ch].ele_deg < next_ele_check - VBAP_EPSILON ) ) - { - next_ele_check = node_data[ch].ele_deg; - } - } - ele_check = next_ele_check; - if ( ele_check > 90.0f ) - { - /* When no next node elevation found, break loop */ - break; - } - - max_gap = -9999.9f; - for ( ch = 0; ch < num_speaker_nodes; ch++ ) - { - /* Find gap to the next speaker node at the same plane */ - if ( fabsf( node_data[ch].ele_deg - ele_check ) < VBAP_EPSILON ) - { - gap_to_next_ls = 99999.9f; - for ( ch_cmp = 0; ch_cmp < num_speaker_nodes; ch_cmp++ ) - { - if ( ch_cmp != ch && fabsf( node_data[ch_cmp].ele_deg - ele_check ) < VBAP_EPSILON ) - { - float gap = node_data[ch_cmp].azi_deg - node_data[ch].azi_deg; - while ( gap < 0 ) - { - gap += 360.0f; - } - if ( gap < gap_to_next_ls ) - { - gap_to_next_ls = gap; - } - } - } - /* Find maximum gap on that plane */ - if ( gap_to_next_ls > max_gap ) - { - max_gap = gap_to_next_ls; - } - } - } - - /* If maximum gap is small enough, then a non-crossing plane is detected */ - if ( max_gap < ( VBAP_MAX_HORIZONTAL_GAP_FOR_PLANE_DETECTION + VBAP_EPSILON ) && max_gap > 0.0f ) - { - non_crossing_plane_elevation_deg[num_planes] = ele_check; - num_planes++; - if ( num_planes == VBAP_MAX_PLANES ) - { - /* Memory init limit. Does not happen with any real speaker node configuration. - Triangulation succeeds even if number of non_crossing_planes are limited. */ - break; - } - } - } - - return num_planes; -} -#endif /*-------------------------------------------------------------------------* * reorder_triplets() @@ -4220,7 +2527,6 @@ static int16_t determine_non_crossing_planes( * Reorder virtual surface triplets into provided target order. *-------------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void reorder_triplets_fx( VBAP_VS_TRIPLET *triplets, /* i/o: VS triplets to be reordered */ const Word16 *target_order, /* i : Target order for VS triplets */ @@ -4244,29 +2550,3 @@ static void reorder_triplets_fx( return; } -#else -static void reorder_triplets( - VBAP_VS_TRIPLET *triplets, /* i/o: VS triplets to be reordered */ - const int16_t *target_order, /* i : Target order for VS triplets */ - const int16_t num_triplets /* i : Number of VS triplets */ -) -{ - VBAP_VS_TRIPLET tempTriplets[VBAP_MAX_NUM_TRIPLETS]; - int16_t c; - - /* First copy to temp array */ - for ( c = 0; c < num_triplets; c++ ) - { - tempTriplets[c] = triplets[c]; - } - - /* Then move back in sorted order */ - for ( c = 0; c < num_triplets; c++ ) - { - triplets[c] = tempTriplets[target_order[c]]; - } - - return; -} - -#endif diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 1292d6296..870704de6 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -44,7 +44,6 @@ #include #include "wmc_auto.h" -#ifdef IVAS_FLOAT_FIXED #include "ivas_rom_com_fx.h" #include "ivas_prot_fx.h" #include "prot_fx.h" @@ -52,7 +51,6 @@ #define float_to_fix( n, factor ) ( round( n * ( 1 << factor ) ) ) #define fix_to_float( n, factor ) ( (float) n / ( 1 << factor ) ) #define IVAS_FLOAT_FIXED_TO_BE_REMOVED -#endif /*-------------------------------------------------------------------* * Local constants *-------------------------------------------------------------------*/ @@ -78,13 +76,11 @@ typedef float pan_vector[MAX_OUTPUT_CHANNELS]; typedef float pan_matrix[MAX_INPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; typedef float rotation_gains[MAX_INPUT_CHANNELS][MAX_INPUT_CHANNELS]; -#ifdef IVAS_FLOAT_FIXED typedef Word32 pan_vector_fx[MAX_OUTPUT_CHANNELS]; typedef Word32 pan_matrix_fx[MAX_INPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; typedef Word16 rotation_gains_fx[MAX_INPUT_CHANNELS][MAX_INPUT_CHANNELS]; typedef Word32 rotation_gains_Word32[MAX_INPUT_CHANNELS][MAX_INPUT_CHANNELS]; typedef Word32 rotation_matrix_fx[3][3]; -#endif typedef float rotation_matrix[3][3]; /* EFAP wrapper to simplify writing panning gains to a vector that includes LFE channels */ @@ -102,7 +98,6 @@ typedef struct * Storing pointers instead of data itself ensures that no additional updates * are required when any of these are changed in the renderer. Making the pointers * const ensures that this data is only read, but not modified by the rendering functions. */ -#ifdef IVAS_FLOAT_FIXED typedef struct { const Word32 *pOutSampleRate; @@ -112,44 +107,16 @@ typedef struct IVAS_REND_HeadRotData *pHeadRotData; // for now removing the const qualifier TODO: will modify later const COMBINED_ORIENTATION_HANDLE *pCombinedOrientationData; } rendering_context; -#else -typedef struct -{ - const int32_t *pOutSampleRate; - const AUDIO_CONFIG *pOutConfig; - const LSSETUP_CUSTOM_STRUCT *pCustomLsOut; - const EFAP_WRAPPER *pEfapOutWrapper; - const IVAS_REND_HeadRotData *pHeadRotData; - const COMBINED_ORIENTATION_HANDLE *pCombinedOrientationData; -} rendering_context; -#endif /* Common base for input structs */ -#ifdef IVAS_FLOAT_FIXED typedef struct { AUDIO_CONFIG inConfig; IVAS_REND_InputId id; IVAS_REND_AudioBuffer inputBuffer; -#ifndef IVAS_FLOAT_FIXED - float gain; /* Linear, not in dB */ -#else Word32 gain_fx; /* Linear, not in dB Q30 */ -#endif rendering_context ctx; Word32 numNewSamplesPerChannel; /* Used to keep track how much new audio was fed before rendering current frame */ } input_base; -#else -typedef struct -{ - AUDIO_CONFIG inConfig; - IVAS_REND_InputId id; - IVAS_REND_AudioBuffer inputBuffer; - float gain; /* Linear, not in dB */ - rendering_context ctx; - int32_t numNewSamplesPerChannel; /* Used to keep track how much new audio was fed before rendering current frame */ -} input_base; -#endif -#ifdef IVAS_FLOAT_FIXED typedef struct { input_base base; @@ -159,52 +126,17 @@ typedef struct CREND_WRAPPER_HANDLE crendWrapper; REVERB_HANDLE hReverb; rotation_matrix_fx rot_mat_prev; -#ifdef IVAS_FLOAT_FIXED pan_vector_fx prev_pan_gains_fx; rotation_matrix_fx rot_mat_prev_fx; -#endif pan_vector prev_pan_gains; Word8 firstFrameRendered; -#ifndef IVAS_FLOAT_FIXED - float *bufferData; -#endif Word32 *bufferData_fx; Word16 nonDiegeticPan; -#ifndef IVAS_FLOAT_FIXED - float nonDiegeticPanGain; -#endif -#ifdef IVAS_FLOAT_FIXED Word32 nonDiegeticPanGain_fx; /* Q31 */ -#endif OMASA_ANA_HANDLE hOMasa; UWord16 total_num_objects; -#ifdef IVAS_FLOAT_FIXED Word32 ism_metadata_delay_ms_fx; /* Q0 */ -#else - float ism_metadata_delay_ms; -#endif -} input_ism; -#else -typedef struct -{ - input_base base; - IVAS_ISM_METADATA currentPos; - IVAS_ISM_METADATA previousPos; - TDREND_WRAPPER tdRendWrapper; - CREND_WRAPPER_HANDLE crendWrapper; - REVERB_HANDLE hReverb; - rotation_matrix rot_mat_prev; - pan_vector prev_pan_gains; - int8_t firstFrameRendered; - float *bufferData; - int16_t nonDiegeticPan; - float nonDiegeticPanGain; - OMASA_ANA_HANDLE hOMasa; - uint16_t total_num_objects; - float ism_metadata_delay_ms; } input_ism; -#endif -#ifdef IVAS_FLOAT_FIXED typedef struct { Word16 numLfeChannels; @@ -218,106 +150,38 @@ typedef struct // IVAS_REND_LfePanMtx lfePanMtx; IVAS_REND_LfePanMtx_fx lfePanMtx_fx; /* Q31 */ } lfe_routing; -#else -typedef struct -{ - int16_t numLfeChannels; - bool pan_lfe; - float lfeInputGain; - float lfeOutputAzimuth; - float lfeOutputElevation; - IVAS_REND_LfePanMtx lfePanMtx; -} lfe_routing; -#endif -#ifdef IVAS_FLOAT_FIXED typedef struct { input_base base; /* Full panning matrix. 1st index is input channel, 2nd index is output channel. All LFE channels should be included, both for inputs and outputs */ -#ifndef IVAS_FLOAT_FIXED - pan_matrix panGains; -#else pan_matrix_fx panGains_fx; /* Q31 */ -#endif LSSETUP_CUSTOM_STRUCT customLsInput; EFAP_WRAPPER efapInWrapper; TDREND_WRAPPER tdRendWrapper; CREND_WRAPPER_HANDLE crendWrapper; REVERB_HANDLE hReverb; -#ifndef IVAS_FLOAT_FIXED - rotation_gains rot_gains_prev; -#else rotation_gains_Word32 rot_gains_prev_fx; -#endif Word16 nonDiegeticPan; Word32 nonDiegeticPanGain_fx; lfe_routing lfeRouting; Word32 *bufferData_fx; -#ifndef IVAS_FLOAT_FIXED - float *bufferData; -#endif Word16 binauralDelaySmp; -#ifndef IVAS_FLOAT_FIXED - float nonDiegeticPanGain; - float *lfeDelayBuffer; -#endif Word32 *lfeDelayBuffer_fx; MCMASA_ANA_HANDLE hMcMasa; } input_mc; -#else -typedef struct -{ - input_base base; - - /* Full panning matrix. 1st index is input channel, 2nd index is output channel. - All LFE channels should be included, both for inputs and outputs */ - pan_matrix panGains; - - LSSETUP_CUSTOM_STRUCT customLsInput; - EFAP_WRAPPER efapInWrapper; - TDREND_WRAPPER tdRendWrapper; - CREND_WRAPPER_HANDLE crendWrapper; - REVERB_HANDLE hReverb; - rotation_gains rot_gains_prev; - int16_t nonDiegeticPan; - float nonDiegeticPanGain; - lfe_routing lfeRouting; - float *bufferData; - int16_t binauralDelaySmp; - float *lfeDelayBuffer; - MCMASA_ANA_HANDLE hMcMasa; -} input_mc; -#endif -#ifdef IVAS_FLOAT_FIXED typedef struct { input_base base; // pan_matrix hoaDecMtx; pan_matrix_fx hoaDecMtx_fx; CREND_WRAPPER_HANDLE crendWrapper; -#ifndef IVAS_FLOAT_FIXED - rotation_gains rot_gains_prev; - float *bufferData; -#else rotation_gains_fx rot_gains_prev_fx; Word32 *bufferData_fx; -#endif - DIRAC_ANA_HANDLE hDirAC; -} input_sba; -#else -typedef struct -{ - input_base base; - pan_matrix hoaDecMtx; - CREND_WRAPPER_HANDLE crendWrapper; - rotation_gains rot_gains_prev; - float *bufferData; DIRAC_ANA_HANDLE hDirAC; } input_sba; -#endif typedef struct @@ -325,15 +189,10 @@ typedef struct input_base base; MASA_METADATA_FRAME masaMetadata; bool metadataHasBeenFed; -#ifdef IVAS_FLOAT_FIXED Word32 *bufferData_fx; -#else - float *bufferData; -#endif // IVAS_FLOAT_FIXED MASA_EXT_REND_HANDLE hMasaExtRend; MASA_PREREND_HANDLE hMasaPrerend; } input_masa; -#ifdef IVAS_FLOAT_FIXED struct IVAS_REND { Word32 sampleRateOut; @@ -359,34 +218,6 @@ struct IVAS_REND Word16 num_subframes; }; -#else -struct IVAS_REND -{ - int32_t sampleRateOut; - - IVAS_LIMITER_HANDLE hLimiter; - - input_ism inputsIsm[RENDERER_MAX_ISM_INPUTS]; - input_mc inputsMc[RENDERER_MAX_MC_INPUTS]; - input_sba inputsSba[RENDERER_MAX_SBA_INPUTS]; - input_masa inputsMasa[RENDERER_MAX_MASA_INPUTS]; - - AUDIO_CONFIG inputConfig; - AUDIO_CONFIG outputConfig; - EFAP_WRAPPER efapOutWrapper; - IVAS_LSSETUP_CUSTOM_STRUCT customLsOut; - - IVAS_REND_HeadRotData headRotData; - - EXTERNAL_ORIENTATION_HANDLE hExternalOrientationData; - COMBINED_ORIENTATION_HANDLE hCombinedOrientationData; - - int8_t rendererConfigEnabled; - RENDER_CONFIG_DATA *hRendererConfig; /* Renderer config pointer */ - - int16_t num_subframes; -}; -#endif /*-------------------------------------------------------------------* * Local function prototypes @@ -394,15 +225,12 @@ struct IVAS_REND static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig ); static void freeMasaExtRenderer( MASA_EXT_REND_HANDLE *hMasaExtRendOut ); -#ifdef IVAS_FLOAT_FIXED // TOBE REMOVED static void intermidiate_ext_dirac_render( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ Word16 to_fix ); -#endif /*-------------------------------------------------------------------* * Local functions *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error allocateInputBaseBufferData_fx( Word32 **data, /* Qx */ const Word16 data_size ) @@ -415,21 +243,6 @@ static ivas_error allocateInputBaseBufferData_fx( return IVAS_ERR_OK; } -#else -static ivas_error allocateInputBaseBufferData( - float **data, - const int16_t data_size ) -{ - *data = (float *) malloc( data_size * sizeof( float ) ); - if ( *data == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for input base buffer data" ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void freeInputBaseBufferData_fx( Word32 **data /* Qx */ ) { @@ -441,20 +254,6 @@ static void freeInputBaseBufferData_fx( return; } -#else -static void freeInputBaseBufferData( - float **data ) -{ - if ( *data != NULL ) - { - free( *data ); - *data = NULL; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error allocateMcLfeDelayBuffer_fx( Word32 **lfeDelayBuffer, /* Qx */ const Word16 data_size ) @@ -467,22 +266,6 @@ static ivas_error allocateMcLfeDelayBuffer_fx( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -static ivas_error allocateMcLfeDelayBuffer( - float **lfeDelayBuffer, - const int16_t data_size ) -{ - *lfeDelayBuffer = (float *) malloc( data_size * sizeof( float ) ); - if ( *lfeDelayBuffer == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for LFE delay buffer" ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void freeMcLfeDelayBuffer_fx( Word32 **lfeDelayBuffer /* Qx */ ) { @@ -495,22 +278,7 @@ static void freeMcLfeDelayBuffer_fx( return; } -#endif -#ifndef IVAS_FLOAT_FIXED -static void freeMcLfeDelayBuffer( - float **lfeDelayBuffer ) -{ - if ( *lfeDelayBuffer != NULL ) - { - free( *lfeDelayBuffer ); - *lfeDelayBuffer = NULL; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static IVAS_QUATERNION quaternionInit_fx( void ) { @@ -530,18 +298,7 @@ static IVAS_QUATERNION quaternionInit_fx( return q; } -#else -static IVAS_QUATERNION quaternionInit( - void ) -{ - IVAS_QUATERNION q; - q.w = 1.0f; - q.x = q.y = q.z = 0.0f; - return q; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word32 *getSmplPtr_fx( IVAS_REND_AudioBuffer buffer, const UWord32 chnlIdx, @@ -549,16 +306,6 @@ static Word32 *getSmplPtr_fx( { return buffer.data_fx + chnlIdx * buffer.config.numSamplesPerChannel + smplIdx; } -#else -static float *getSmplPtr( - IVAS_REND_AudioBuffer buffer, - const uint32_t chnlIdx, - const uint32_t smplIdx ) -{ - return buffer.data + chnlIdx * buffer.config.numSamplesPerChannel + smplIdx; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void copyBufferTo2dArray_fx( const IVAS_REND_AudioBuffer buffer, Word32 array[][L_FRAME48k] ) @@ -580,29 +327,6 @@ static void copyBufferTo2dArray_fx( return; } -#else -static void copyBufferTo2dArray( - const IVAS_REND_AudioBuffer buffer, - float array[][L_FRAME48k] ) -{ - uint32_t smplIdx; - uint32_t chnlIdx; - const float *readPtr; - - readPtr = buffer.data; - - for ( chnlIdx = 0; chnlIdx < (uint32_t) buffer.config.numChannels; ++chnlIdx ) - { - for ( smplIdx = 0; smplIdx < (uint32_t) buffer.config.numSamplesPerChannel; ++smplIdx ) - { - array[chnlIdx][smplIdx] = *readPtr++; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void accumulate2dArrayToBuffer_fx( Word32 array[][L_FRAME48k], IVAS_REND_AudioBuffer *buffer ) @@ -623,27 +347,6 @@ static void accumulate2dArrayToBuffer_fx( return; } -#else -static void accumulate2dArrayToBuffer( - float array[][L_FRAME48k], - IVAS_REND_AudioBuffer *buffer ) -{ - int16_t smplIdx, chnlIdx; - float *writePtr; - - writePtr = buffer->data; - for ( chnlIdx = 0; chnlIdx < buffer->config.numChannels; ++chnlIdx ) - { - for ( smplIdx = 0; smplIdx < buffer->config.numSamplesPerChannel; ++smplIdx ) - { - *writePtr++ += array[chnlIdx][smplIdx]; - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * limitRendererOutput() * @@ -694,54 +397,6 @@ static Word32 limitRendererOutput_fx( return numClipping; } -#else - -/*-------------------------------------------------------------------* - * limitRendererOutput() - * - * In-place saturation control for multichannel buffers with adaptive release time - *-------------------------------------------------------------------*/ - -/*! r: number of clipped output samples */ -static int32_t limitRendererOutput( - IVAS_LIMITER_HANDLE hLimiter, /* i/o: limiter struct handle */ - float *output, /* i/o: I/O buffer */ - const int16_t output_frame, /* i : number of samples per channel in the buffer */ - const float threshold /* i : signal amplitude above which limiting starts to be applied */ -) -{ - int16_t i; - float **channels; - int16_t num_channels; - int32_t numClipping = 0; - - /* return early if given bad parameters */ - if ( hLimiter == NULL || output == NULL || output_frame <= 0 ) - { - return 0; - } - - channels = hLimiter->channel_ptrs; - num_channels = hLimiter->num_channels; - - for ( i = 0; i < num_channels; ++i ) - { - channels[i] = output + i * output_frame; - } - - limiter_process( hLimiter, output_frame, threshold, 0, NULL ); - - /* Apply clipping to buffer in case the limiter let through some samples > 1.0f */ - for ( i = 0; i < output_frame * num_channels; ++i ) - { - - output[i] = min( max( INT16_MIN, output[i] ), INT16_MAX ); - } - - return numClipping; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * validateOutputAudioConfig() * @@ -776,42 +431,6 @@ static ivas_error validateOutputAudioConfig( return IVAS_ERR_INVALID_OUTPUT_FORMAT; } -#else -/*-------------------------------------------------------------------* - * validateOutputAudioConfig() - * - * - *-------------------------------------------------------------------*/ - -static ivas_error validateOutputAudioConfig( - const AUDIO_CONFIG outConfig ) -{ - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_MONO: - case IVAS_AUDIO_CONFIG_STEREO: - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - case IVAS_AUDIO_CONFIG_FOA: - case IVAS_AUDIO_CONFIG_HOA2: - case IVAS_AUDIO_CONFIG_HOA3: - case IVAS_AUDIO_CONFIG_BINAURAL: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - case IVAS_AUDIO_CONFIG_MASA1: - case IVAS_AUDIO_CONFIG_MASA2: - return IVAS_ERR_OK; - default: - break; - } - - return IVAS_ERR_INVALID_OUTPUT_FORMAT; -} -#endif /*-------------------------------------------------------------------* * getAudioConfigType() @@ -819,7 +438,6 @@ static ivas_error validateOutputAudioConfig( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED IVAS_REND_AudioConfigType getAudioConfigType( const AUDIO_CONFIG config ) { @@ -869,100 +487,25 @@ IVAS_REND_AudioConfigType getAudioConfigType( return type; } -#else -IVAS_REND_AudioConfigType getAudioConfigType( - const AUDIO_CONFIG config ) + +/*-------------------------------------------------------------------* + * validateOutputSampleRate() + * + * + *-------------------------------------------------------------------*/ + +static ivas_error validateOutputSampleRate( + const Word32 sampleRate, + const AUDIO_CONFIG outConfig ) { - IVAS_REND_AudioConfigType type; + IF( NE_32( getAudioConfigType( outConfig ), IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) ) + { + /* If no binaural rendering, any sampling rate is supported */ + return IVAS_ERR_OK; + } - switch ( config ) - { - case IVAS_AUDIO_CONFIG_MONO: - case IVAS_AUDIO_CONFIG_STEREO: - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - type = IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED; - break; - case IVAS_AUDIO_CONFIG_FOA: - case IVAS_AUDIO_CONFIG_HOA2: - case IVAS_AUDIO_CONFIG_HOA3: - type = IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS; - break; - case IVAS_AUDIO_CONFIG_OBA: - type = IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED; - break; - case IVAS_AUDIO_CONFIG_BINAURAL: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - case IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: - case IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED: - type = IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL; - break; - case IVAS_AUDIO_CONFIG_MASA1: - case IVAS_AUDIO_CONFIG_MASA2: - type = IVAS_REND_AUDIO_CONFIG_TYPE_MASA; - break; - default: - type = IVAS_REND_AUDIO_CONFIG_TYPE_UNKNOWN; - break; - } - - return type; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * validateOutputSampleRate() - * - * - *-------------------------------------------------------------------*/ - -static ivas_error validateOutputSampleRate( - const Word32 sampleRate, - const AUDIO_CONFIG outConfig ) -{ - IF( NE_32( getAudioConfigType( outConfig ), IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) ) - { - /* If no binaural rendering, any sampling rate is supported */ - return IVAS_ERR_OK; - } - - /* Otherwise rendering to binaural, support the same set as IVAS decoder */ - SWITCH( sampleRate ) - { - case 8000: - case 16000: - case 32000: - case 48000: - return IVAS_ERR_OK; - } - - return IVAS_ERR_INVALID_SAMPLING_RATE; -} -#else -/*-------------------------------------------------------------------* - * validateOutputSampleRate() - * - * - *-------------------------------------------------------------------*/ - -static ivas_error validateOutputSampleRate( - const int32_t sampleRate, - const AUDIO_CONFIG outConfig ) -{ - if ( getAudioConfigType( outConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) - { - /* If no binaural rendering, any sampling rate is supported */ - return IVAS_ERR_OK; - } - - /* Otherwise rendering to binaural, support the same set as IVAS decoder */ - switch ( sampleRate ) + /* Otherwise rendering to binaural, support the same set as IVAS decoder */ + SWITCH( sampleRate ) { case 8000: case 16000: @@ -973,9 +516,6 @@ static ivas_error validateOutputSampleRate( return IVAS_ERR_INVALID_SAMPLING_RATE; } - -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * getAudioConfigNumChannels() * @@ -1038,61 +578,6 @@ ivas_error getAudioConfigNumChannels( move16(); return IVAS_ERR_OK; } -#else -/*-------------------------------------------------------------------* - * getAudioConfigNumChannels() - * - * - *-------------------------------------------------------------------*/ - -ivas_error getAudioConfigNumChannels( - const AUDIO_CONFIG config, - int16_t *numChannels ) -{ - switch ( config ) - { - case IVAS_AUDIO_CONFIG_MONO: - case IVAS_AUDIO_CONFIG_OBA: - case IVAS_AUDIO_CONFIG_MASA1: - *numChannels = 1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - case IVAS_AUDIO_CONFIG_BINAURAL: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - case IVAS_AUDIO_CONFIG_MASA2: - *numChannels = 2; - break; - case IVAS_AUDIO_CONFIG_FOA: - *numChannels = 4; - break; - case IVAS_AUDIO_CONFIG_5_1: - *numChannels = 6; - break; - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - *numChannels = 8; - break; - case IVAS_AUDIO_CONFIG_HOA2: - *numChannels = 9; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - *numChannels = 10; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - *numChannels = 12; - break; - case IVAS_AUDIO_CONFIG_HOA3: - *numChannels = 16; - break; - default: - return IVAS_ERR_NUM_CHANNELS_UNKNOWN; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * Local functions *-------------------------------------------------------------------*/ @@ -1125,39 +610,6 @@ static ivas_error initLimiter( return IVAS_ERR_OK; } -#else -/*-------------------------------------------------------------------* - * Local functions - *-------------------------------------------------------------------*/ - -static ivas_error initLimiter( - IVAS_LIMITER_HANDLE *phLimiter, - const int16_t numChannels, - const int32_t sampleRate ) -{ - ivas_error error; - - /* If re-initializing with unchanged values, return early */ - if ( *phLimiter != NULL && ( *phLimiter )->num_channels == numChannels && ( *phLimiter )->sampling_rate == sampleRate ) - { - return IVAS_ERR_OK; - } - - /* Support re-init: close if already allocated */ - if ( *phLimiter != NULL ) - { - ivas_limiter_close( phLimiter ); - } - - if ( ( error = ivas_limiter_open( phLimiter, numChannels, sampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static LSSETUP_CUSTOM_STRUCT defaultCustomLs( void ) { @@ -1180,29 +632,8 @@ static LSSETUP_CUSTOM_STRUCT defaultCustomLs( return ls; } -#else -static LSSETUP_CUSTOM_STRUCT defaultCustomLs( - void ) -{ - LSSETUP_CUSTOM_STRUCT ls; - - /* Set mono by default. This simplifies initialization, - since output config is never in an undefined state. */ - ls.is_planar_setup = 1; - ls.num_spk = 1; - set_zero( ls.ls_azimuth, MAX_OUTPUT_CHANNELS ); - set_zero( ls.ls_elevation, MAX_OUTPUT_CHANNELS ); - ls.num_lfe = 0; - set_s( ls.lfe_idx, 0, MAX_OUTPUT_CHANNELS ); - ls.separate_ch_found = 0; - set_f( ls.separate_ch_gains, 0, MAX_OUTPUT_CHANNELS ); - - return ls; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getSpeakerAzimuths_fx( AUDIO_CONFIG config, const Word32 **azimuths /* Q22 */ ) @@ -1236,44 +667,7 @@ static ivas_error getSpeakerAzimuths_fx( return IVAS_ERR_OK; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error getSpeakerAzimuths( - AUDIO_CONFIG config, - const float **azimuths ) -{ - switch ( config ) - { - case IVAS_AUDIO_CONFIG_MONO: - *azimuths = ls_azimuth_CICP1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - *azimuths = ls_azimuth_CICP2; - break; - case IVAS_AUDIO_CONFIG_5_1: - *azimuths = ls_azimuth_CICP6; - break; - case IVAS_AUDIO_CONFIG_7_1: - *azimuths = ls_azimuth_CICP12; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - *azimuths = ls_azimuth_CICP14; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - *azimuths = ls_azimuth_CICP16; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - *azimuths = ls_azimuth_CICP19; - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unexpected audio config" ); - } - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getSpeakerElevations_fx( AUDIO_CONFIG config, const Word32 **elevations /* Q22 */ ) @@ -1307,44 +701,7 @@ static ivas_error getSpeakerElevations_fx( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -static ivas_error getSpeakerElevations( - AUDIO_CONFIG config, - const float **elevations ) -{ - switch ( config ) - { - case IVAS_AUDIO_CONFIG_MONO: - *elevations = ls_elevation_CICP1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - *elevations = ls_elevation_CICP2; - break; - case IVAS_AUDIO_CONFIG_5_1: - *elevations = ls_elevation_CICP6; - break; - case IVAS_AUDIO_CONFIG_7_1: - *elevations = ls_elevation_CICP12; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - *elevations = ls_elevation_CICP14; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - *elevations = ls_elevation_CICP16; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - *elevations = ls_elevation_CICP19; - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unexpected audio config" ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getAmbisonicsOrder_fx( AUDIO_CONFIG config, Word16 *order ) @@ -1369,33 +726,8 @@ static ivas_error getAmbisonicsOrder_fx( return IVAS_ERR_OK; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error getAmbisonicsOrder( - AUDIO_CONFIG config, - int16_t *order ) -{ - switch ( config ) - { - case IVAS_AUDIO_CONFIG_FOA: - *order = 1; - break; - case IVAS_AUDIO_CONFIG_HOA2: - *order = 2; - break; - case IVAS_AUDIO_CONFIG_HOA3: - *order = 3; - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unsupported audio config" ); - } - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static Word16 getNumLfeChannels( input_mc *inputMc ) { @@ -1415,28 +747,6 @@ static Word16 getNumLfeChannels( return 0; } -#else -static int16_t getNumLfeChannels( - input_mc *inputMc ) -{ - switch ( inputMc->base.inConfig ) - { - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - return 1; - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - return inputMc->customLsInput.num_lfe; - default: - break; - } - - return 0; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getNumNonLfeChannelsInSpeakerLayout( AUDIO_CONFIG config, Word16 *numNonLfeChannels ) @@ -1474,40 +784,6 @@ static ivas_error getNumNonLfeChannelsInSpeakerLayout( return IVAS_ERR_OK; } -#else -static ivas_error getNumNonLfeChannelsInSpeakerLayout( - AUDIO_CONFIG config, - int16_t *numNonLfeChannels ) -{ - switch ( config ) - { - case IVAS_AUDIO_CONFIG_MONO: - *numNonLfeChannels = 1; - break; - case IVAS_AUDIO_CONFIG_STEREO: - *numNonLfeChannels = 2; - break; - case IVAS_AUDIO_CONFIG_5_1: - *numNonLfeChannels = 5; - break; - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_7_1: - *numNonLfeChannels = 7; - break; - case IVAS_AUDIO_CONFIG_5_1_4: - *numNonLfeChannels = 9; - break; - case IVAS_AUDIO_CONFIG_7_1_4: - *numNonLfeChannels = 11; - break; - default: - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Unexpected audio config" ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getMcConfigValues_fx( AUDIO_CONFIG inConfig, const LSSETUP_CUSTOM_STRUCT *pInCustomLs, @@ -1589,83 +865,15 @@ static ivas_error getMcConfigValues_fx( return IVAS_ERR_OK; } -#else -static ivas_error getMcConfigValues( - AUDIO_CONFIG inConfig, - const LSSETUP_CUSTOM_STRUCT *pInCustomLs, - const float **azimuth, - const float **elevation, - int16_t *lfe_idx, - int16_t *is_planar ) +static ivas_error initEfap( + EFAP_WRAPPER *pEfapWrapper, + AUDIO_CONFIG outConfig, + const LSSETUP_CUSTOM_STRUCT *pCustomLsOut ) { - int16_t i; ivas_error error; - - *lfe_idx = -1; - *is_planar = 1; - switch ( inConfig ) - { - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - *azimuth = (const float *) &pInCustomLs->ls_azimuth; - *elevation = (const float *) &pInCustomLs->ls_elevation; - if ( pInCustomLs->num_lfe > 0 ) - { - *lfe_idx = pInCustomLs->lfe_idx[0]; - } - for ( i = 0; i < pInCustomLs->num_spk; i++ ) - { - if ( pInCustomLs->ls_elevation[i] != 0 ) - { - *is_planar = 0; - break; - } - } - break; - case IVAS_AUDIO_CONFIG_MONO: - case IVAS_AUDIO_CONFIG_STEREO: - if ( ( error = getSpeakerAzimuths( inConfig, azimuth ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = getSpeakerElevations( inConfig, elevation ) ) != IVAS_ERR_OK ) - { - return error; - } - break; - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - if ( ( error = getSpeakerAzimuths( inConfig, azimuth ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = getSpeakerElevations( inConfig, elevation ) ) != IVAS_ERR_OK ) - { - return error; - } - *lfe_idx = LFE_CHANNEL; - *is_planar = ( inConfig == IVAS_AUDIO_CONFIG_5_1 || inConfig == IVAS_AUDIO_CONFIG_7_1 ) ? 1 : 0; - break; - default: - assert( !"Invalid speaker config" ); - return IVAS_ERR_WRONG_PARAMS; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error initEfap( - EFAP_WRAPPER *pEfapWrapper, - AUDIO_CONFIG outConfig, - const LSSETUP_CUSTOM_STRUCT *pCustomLsOut ) -{ - ivas_error error; - const Word32 *azimuths; /* Q22 */ - const Word32 *elevations; /* Q22 */ - Word16 numNonLfeChannels; + const Word32 *azimuths; /* Q22 */ + const Word32 *elevations; /* Q22 */ + Word16 numNonLfeChannels; test(); IF( EQ_32( outConfig, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) || EQ_32( outConfig, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) @@ -1724,75 +932,7 @@ static ivas_error initEfap( return IVAS_ERR_OK; } -#else -static ivas_error initEfap( - EFAP_WRAPPER *pEfapWrapper, - AUDIO_CONFIG outConfig, - const LSSETUP_CUSTOM_STRUCT *pCustomLsOut ) -{ - ivas_error error; - const float *azimuths; - const float *elevations; - int16_t numNonLfeChannels; - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - pEfapWrapper->speakerConfig = IVAS_AUDIO_CONFIG_7_1_4; - } - else - { - pEfapWrapper->speakerConfig = outConfig; - } - pEfapWrapper->pCustomLsSetup = pCustomLsOut; - - /* If re-initializing, free existing EFAP handle. */ - if ( pEfapWrapper->hEfap != NULL ) - { - efap_free_data( &pEfapWrapper->hEfap ); - } - - /* Only initialize EFAP handle if output config is channel-based */ - if ( getAudioConfigType( pEfapWrapper->speakerConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - pEfapWrapper->hEfap = NULL; - return IVAS_ERR_OK; - } - - if ( outConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = efap_init_data( &pEfapWrapper->hEfap, pCustomLsOut->ls_azimuth, pCustomLsOut->ls_elevation, pCustomLsOut->num_spk, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = getSpeakerAzimuths( pEfapWrapper->speakerConfig, &azimuths ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getSpeakerElevations( pEfapWrapper->speakerConfig, &elevations ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getNumNonLfeChannelsInSpeakerLayout( pEfapWrapper->speakerConfig, &numNonLfeChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = efap_init_data( &pEfapWrapper->hEfap, azimuths, elevations, numNonLfeChannels, EFAP_MODE_EFAP ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getEfapGains_fx( EFAP_WRAPPER efapWrapper, const Word32 azi, /* Q22 */ @@ -1875,71 +1015,7 @@ static ivas_error getEfapGains_fx( return IVAS_ERR_OK; } -#else -static ivas_error getEfapGains( - EFAP_WRAPPER efapWrapper, - const float azi, - const float ele, - pan_vector panGains ) -{ - pan_vector tmpPanGains; /* tmp pan gain buffer without LFE channels */ - float *readPtr; - int16_t i; - int16_t lfeCount; - int16_t numChannels; - ivas_error error; - - /* EFAP returns an array of gains only for non-LFE speakers */ - efap_determine_gains( efapWrapper.hEfap, tmpPanGains, azi, ele, EFAP_MODE_EFAP ); - - /* Now copy to buffer that includes LFE channels */ - if ( efapWrapper.speakerConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - numChannels = efapWrapper.pCustomLsSetup->num_spk + efapWrapper.pCustomLsSetup->num_lfe; - readPtr = tmpPanGains; - - for ( i = 0, lfeCount = 0; i < numChannels; ++i ) - { - if ( lfeCount < efapWrapper.pCustomLsSetup->num_lfe && i == efapWrapper.pCustomLsSetup->lfe_idx[lfeCount] ) - { - panGains[i] = 0.0f; - ++lfeCount; - } - else - { - panGains[i] = *readPtr; - ++readPtr; - } - } - } - else - { - if ( ( error = getAudioConfigNumChannels( efapWrapper.speakerConfig, &numChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - readPtr = tmpPanGains; - - for ( i = 0; i < numChannels; ++i ) - { - if ( i == LFE_CHANNEL ) - { - panGains[i] = 0.0f; - } - else - { - panGains[i] = *readPtr; - ++readPtr; - } - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initHeadRotation_fx( IVAS_REND_HANDLE hIvasRend ) { @@ -1982,48 +1058,8 @@ static ivas_error initHeadRotation_fx( return IVAS_ERR_OK; } -#else -static ivas_error initHeadRotation( - IVAS_REND_HANDLE hIvasRend ) -{ - int16_t i, crossfade_len; - float tmp; - ivas_error error; - - /* Head rotation is enabled by default */ - hIvasRend->headRotData.headRotEnabled = 1; - - /* Initialize 5ms crossfade */ - crossfade_len = L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES; - tmp = 1.f / ( crossfade_len - 1 ); - for ( i = 0; i < crossfade_len; i++ ) - { - hIvasRend->headRotData.crossfade[i] = i * tmp; - } - - /* Initialize with unit quaternions */ - for ( i = 0; i < hIvasRend->num_subframes; ++i ) - { - hIvasRend->headRotData.headPositions[i] = quaternionInit(); - } - - - if ( ( hIvasRend->headRotData.hOrientationTracker = (ivas_orient_trk_state_t *) malloc( sizeof( ivas_orient_trk_state_t ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Orientation tracking" ); - } - - if ( ( error = ivas_orient_trk_Init( hIvasRend->headRotData.hOrientationTracker ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void closeHeadRotation( IVAS_REND_HANDLE hIvasRend ) { @@ -2035,37 +1071,7 @@ static void closeHeadRotation( return; } -#else -static void closeHeadRotation( - IVAS_REND_HANDLE hIvasRend ) -{ - if ( ( hIvasRend != NULL ) && ( hIvasRend->headRotData.hOrientationTracker != NULL ) ) - { - free( hIvasRend->headRotData.hOrientationTracker ); - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void initRotMatrix( - rotation_matrix rot_mat ) -{ - int16_t i; - - /* Initialize rotation matrices */ - for ( i = 0; i < 3; i++ ) - { - set_zero( rot_mat[i], 3 ); - rot_mat[i][i] = 1.f; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void initRotMatrix_fx( rotation_matrix_fx rot_mat ) @@ -2114,23 +1120,6 @@ static void initRotGainsWord32_fx( return; } -#else -static void initRotGains( - rotation_gains rot_gains ) -{ - int16_t i; - - /* Set gains to passthrough */ - for ( i = 0; i < MAX_INPUT_CHANNELS; i++ ) - { - set_zero( rot_gains[i], MAX_INPUT_CHANNELS ); - rot_gains[i][i] = 1.f; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void initRendInputBase_fx( input_base *inputBase, const AUDIO_CONFIG inConfig, @@ -2161,34 +1150,7 @@ static void initRendInputBase_fx( return; } -#else -static void initRendInputBase( - input_base *inputBase, - const AUDIO_CONFIG inConfig, - const IVAS_REND_InputId id, - const rendering_context rendCtx, - float *dataBuf, - const int16_t dataBufSize ) -{ - inputBase->inConfig = inConfig; - inputBase->id = id; - inputBase->gain = 1.0f; - inputBase->ctx = rendCtx; - inputBase->numNewSamplesPerChannel = 0; - - inputBase->inputBuffer.config.numSamplesPerChannel = 0; - inputBase->inputBuffer.config.numChannels = 0; - inputBase->inputBuffer.data = dataBuf; - if ( inputBase->inputBuffer.data != NULL ) - { - set_zero( inputBase->inputBuffer.data, dataBufSize ); - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static IVAS_ISM_METADATA defaultObjectPosition( void ) { @@ -2211,34 +1173,7 @@ static IVAS_ISM_METADATA defaultObjectPosition( return pos; } -#else -static IVAS_ISM_METADATA defaultObjectPosition( - void ) -{ - IVAS_ISM_METADATA pos; - - pos.azimuth = 0.0f; - pos.elevation = 0.0f; - pos.radius = 1.0f; - pos.spread = 0.0f; - pos.gainFactor = 1.0f; - pos.yaw = 0.0f; - pos.pitch = 0.0f; - pos.non_diegetic_flag = 0; - return pos; -} -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static int8_t checkObjectPositionChanged( - IVAS_ISM_METADATA *currentPos, - IVAS_ISM_METADATA *previousPos ) -{ - return !( fabs( currentPos->azimuth - previousPos->azimuth ) < EPSILON && - fabs( currentPos->elevation - previousPos->elevation ) < EPSILON ); -} -#else static Word8 checkObjectPositionChanged_fx( IVAS_ISM_METADATA *currentPos, IVAS_ISM_METADATA *previousPos ) @@ -2247,7 +1182,6 @@ static Word8 checkObjectPositionChanged_fx( return !( LT_32( abs( L_sub( currentPos->azimuth_fx, previousPos->azimuth_fx ) ), EPSILLON_FX ) && LT_32( abs( L_sub( currentPos->elevation_fx, previousPos->elevation_fx ) ), EPSILLON_FX ) ); } -#endif static rendering_context getRendCtx( IVAS_REND_HANDLE hIvasRend ) @@ -2268,7 +1202,6 @@ static rendering_context getRendCtx( } -#ifdef IVAS_FLOAT_FIXED static TDREND_WRAPPER defaultTdRendWrapper( void ) { @@ -2281,22 +1214,8 @@ static TDREND_WRAPPER defaultTdRendWrapper( return w; } -#else -static TDREND_WRAPPER defaultTdRendWrapper( - void ) -{ - TDREND_WRAPPER w; - - w.binaural_latency_ns = 0; - w.hBinRendererTd = NULL; - w.hHrtfTD = NULL; - - return w; -} -#endif -#ifdef IVAS_FLOAT_FIXED static bool isIoConfigPairSupported( const AUDIO_CONFIG inConfig, const AUDIO_CONFIG outConfig ) @@ -2312,23 +1231,7 @@ static bool isIoConfigPairSupported( /* If not returned so far, config pair is supported */ return true; } -#else -static bool isIoConfigPairSupported( - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig ) -{ - /* Rendering mono or stereo to binaural is not supported */ - if ( ( inConfig == IVAS_AUDIO_CONFIG_MONO || inConfig == IVAS_AUDIO_CONFIG_STEREO ) && getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) - { - return false; - } - - /* If not returned so far, config pair is supported */ - return true; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initIsmMasaRendering( input_ism *inputIsm, const Word32 inSampleRate ) @@ -2352,34 +1255,8 @@ static ivas_error initIsmMasaRendering( return IVAS_ERR_OK; } -#else -static ivas_error initIsmMasaRendering( - input_ism *inputIsm, - const Word32 inSampleRate ) -{ - ivas_error error; - IF( inputIsm->tdRendWrapper.hBinRendererTd != NULL ) - { - ivas_td_binaural_close( &inputIsm->tdRendWrapper.hBinRendererTd ); - inputIsm->tdRendWrapper.hHrtfTD = NULL; - } - - ivas_rend_closeCrend( &inputIsm->crendWrapper ); - - ivas_reverb_close( &inputIsm->hReverb ); - - IF( ( error = ivas_omasa_ana_open( &inputIsm->hOMasa, inSampleRate, inputIsm->total_num_objects ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static ivas_error setRendInputActiveIsm( void *input, const AUDIO_CONFIG inConfig, @@ -2494,83 +1371,7 @@ static ivas_error setRendInputActiveIsm( return IVAS_ERR_OK; } -#else -static ivas_error setRendInputActiveIsm( - void *input, - const AUDIO_CONFIG inConfig, - const IVAS_REND_InputId id, - RENDER_CONFIG_DATA *hRendCfg ) -{ - ivas_error error; - rendering_context rendCtx; - AUDIO_CONFIG outConfig; - input_ism *inputIsm; - - inputIsm = (input_ism *) input; - rendCtx = inputIsm->base.ctx; - outConfig = *rendCtx.pOutConfig; - - if ( !isIoConfigPairSupported( inConfig, outConfig ) ) - { - return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; - } - - if ( ( error = allocateInputBaseBufferData( &inputIsm->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) - { - return error; - } - - initRendInputBase( &inputIsm->base, inConfig, id, rendCtx, inputIsm->bufferData, MAX_BUFFER_LENGTH ); - - inputIsm->firstFrameRendered = FALSE; - - inputIsm->currentPos = defaultObjectPosition(); - inputIsm->previousPos = defaultObjectPosition(); - inputIsm->crendWrapper = NULL; - inputIsm->hReverb = NULL; - inputIsm->tdRendWrapper = defaultTdRendWrapper(); - initRotMatrix( inputIsm->rot_mat_prev ); - set_zero( inputIsm->prev_pan_gains, MAX_OUTPUT_CHANNELS ); - - inputIsm->hOMasa = NULL; - - error = IVAS_ERR_OK; - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - if ( ( error = ivas_rend_openCrend( &inputIsm->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else if ( outConfig == IVAS_AUDIO_CONFIG_MASA1 || outConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - if ( ( error = initIsmMasaRendering( inputIsm, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = ivas_td_binaural_open_ext( &inputIsm->tdRendWrapper, inConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = ivas_reverb_open( &( inputIsm->hReverb ), outConfig, NULL, inputIsm->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED - -#ifdef IVAS_FLOAT_FIXED static void clearInputIsm( input_ism *inputIsm ) { @@ -2598,36 +1399,7 @@ static void clearInputIsm( return; } -#else -static void clearInputIsm( - input_ism *inputIsm ) -{ - rendering_context rendCtx; - - rendCtx = inputIsm->base.ctx; - - freeInputBaseBufferData( &inputIsm->base.inputBuffer.data ); - initRendInputBase( &inputIsm->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - /* Free input's internal handles */ - ivas_rend_closeCrend( &inputIsm->crendWrapper ); - - ivas_reverb_close( &inputIsm->hReverb ); - - if ( inputIsm->tdRendWrapper.hBinRendererTd != NULL ) - { - ivas_td_binaural_close( &inputIsm->tdRendWrapper.hBinRendererTd ); - inputIsm->tdRendWrapper.hHrtfTD = NULL; - } - - - ivas_omasa_ana_close( &( inputIsm->hOMasa ) ); - - return; -} -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void copyLsConversionMatrixToPanMatrix_fx( const LS_CONVERSION_MATRIX_FX *lsConvMatrix, pan_matrix_fx panMatrix ) @@ -2668,46 +1440,7 @@ static void copyLsConversionMatrixToPanMatrix_fx( return; } -#else -static void copyLsConversionMatrixToPanMatrix( - const LS_CONVERSION_MATRIX *lsConvMatrix, - pan_matrix panMatrix ) -{ - int16_t i; - int16_t inCh, outCh; - int16_t numNonZeroGains; - int16_t numColumns; - - /* Index 0 is special and describes the following values */ - numNonZeroGains = lsConvMatrix[0].index; - numColumns = (int16_t) lsConvMatrix[0].value; - - for ( i = 1; i < numNonZeroGains + 1; ++i ) - { - inCh = lsConvMatrix[i].index / numColumns; - outCh = lsConvMatrix[i].index % numColumns; - - panMatrix[inCh][outCh] = lsConvMatrix[i].value; - } - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static void setZeroPanMatrix( - pan_matrix panMatrix ) -{ - int16_t i; - for ( i = 0; i < MAX_INPUT_CHANNELS; ++i ) - { - set_zero( panMatrix[i], MAX_OUTPUT_CHANNELS ); - } - - return; -} -#else static void setZeroPanMatrix_fx( pan_matrix_fx panMatrix ) { @@ -2720,9 +1453,7 @@ static void setZeroPanMatrix_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /* Note: this only sets non-zero elements, call setZeroPanMatrix() to init first. */ static void fillIdentityPanMatrix_fx( pan_matrix_fx panMatrix ) @@ -2737,22 +1468,6 @@ static void fillIdentityPanMatrix_fx( return; } -#else -/* Note: this only sets non-zero elements, call setZeroPanMatrix() to init first. */ -static void fillIdentityPanMatrix( - pan_matrix panMatrix ) -{ - int16_t i; - - for ( i = 0; i < min( MAX_INPUT_CHANNELS, MAX_OUTPUT_CHANNELS ); ++i ) - { - panMatrix[i][i] = 1.0f; - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcPanGainsWithIdentMatrix( input_mc *inputMc ) { @@ -2760,17 +1475,6 @@ static ivas_error initMcPanGainsWithIdentMatrix( return IVAS_ERR_OK; } -#else -static ivas_error initMcPanGainsWithIdentMatrix( - input_mc *inputMc ) -{ - fillIdentityPanMatrix( inputMc->panGains ); - - return IVAS_ERR_OK; -} - -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcPanGainsWithConversionMapping_fx( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -2807,43 +1511,6 @@ static ivas_error initMcPanGainsWithConversionMapping_fx( return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Missing multichannel conversion mapping" ); } -#else - -static ivas_error initMcPanGainsWithConversionMapping( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - AUDIO_CONFIG ivasConfigIn, ivasConfigOut; - int16_t i; - - ivasConfigIn = inputMc->base.inConfig; - ivasConfigOut = outConfig; - - /* Find conversion mapping for current I/O config pair. - * Stay with default panning matrix if conversion_matrix is NULL */ - for ( i = 0; i < LS_SETUP_CONVERSION_NUM_MAPPINGS; ++i ) - { - if ( ls_conversion_mapping[i].input_config == ivasConfigIn && ls_conversion_mapping[i].output_config == ivasConfigOut ) - { - /* Mapping found with valid matrix - copy */ - if ( ls_conversion_mapping[i].conversion_matrix != NULL ) - { - copyLsConversionMatrixToPanMatrix( ls_conversion_mapping[i].conversion_matrix, inputMc->panGains ); - } - /* Mapping found with NULL matrix - use identity matrix */ - else - { - fillIdentityPanMatrix( inputMc->panGains ); - } - - return IVAS_ERR_OK; - } - } - - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "Missing multichannel conversion mapping" ); -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcPanGainsWithEfap_fx( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -2920,74 +1587,6 @@ static ivas_error initMcPanGainsWithEfap_fx( } return IVAS_ERR_OK; } -#else -static ivas_error initMcPanGainsWithEfap( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - int16_t i; - int16_t numNonLfeInChannels; - int16_t inLfeChIdx, outChIdx; - const float *spkAzi, *spkEle; - ivas_error error; - - if ( inputMc->base.inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = getNumNonLfeChannelsInSpeakerLayout( inputMc->base.inConfig, &numNonLfeInChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getSpeakerAzimuths( inputMc->base.inConfig, &spkAzi ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getSpeakerElevations( inputMc->base.inConfig, &spkEle ) ) != IVAS_ERR_OK ) - { - return error; - } - - inLfeChIdx = LFE_CHANNEL; - } - else - { - numNonLfeInChannels = inputMc->customLsInput.num_spk; - spkAzi = inputMc->customLsInput.ls_azimuth; - spkEle = inputMc->customLsInput.ls_elevation; - inLfeChIdx = -1; - if ( inputMc->customLsInput.num_lfe > 0 ) - { - inLfeChIdx = inputMc->customLsInput.lfe_idx[0]; - } - } - - for ( i = 0, outChIdx = 0; i < numNonLfeInChannels; ++i, ++outChIdx ) - { - if ( i == inLfeChIdx ) - { - ++outChIdx; - } - - if ( ( error = getEfapGains( *inputMc->base.ctx.pEfapOutWrapper, spkAzi[i], spkEle[i], inputMc->panGains[outChIdx] ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( outConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM && inLfeChIdx >= 0 ) - { - inputMc->panGains[inLfeChIdx][LFE_CHANNEL] = 1; - } - else if ( inputMc->base.ctx.pCustomLsOut->num_lfe > 0 && inLfeChIdx >= 0 ) - { - inputMc->panGains[inLfeChIdx][inputMc->base.ctx.pCustomLsOut->lfe_idx[0]] = 1; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error getRendInputNumChannels( const void *rendInput, Word16 *numInChannels ) @@ -3017,37 +1616,6 @@ static ivas_error getRendInputNumChannels( return IVAS_ERR_OK; } -#else -static ivas_error getRendInputNumChannels( - const void *rendInput, - int16_t *numInChannels ) -{ - /* Using a void pointer for this function to be reusable for any input type (input_ism, input_mc, input_sba). - Assumptions: - input_base is always the first member in the input struct */ - - ivas_error error; - const input_base *pInputBase; - const input_mc *pInputMc; - - pInputBase = (const input_base *) rendInput; - - if ( pInputBase->inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - pInputMc = (const input_mc *) rendInput; - *numInChannels = pInputMc->customLsInput.num_spk + pInputMc->customLsInput.num_lfe; - } - else - { - if ( ( error = getAudioConfigNumChannels( pInputBase->inConfig, numInChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcPanGainsWithMonoOut_fx( input_mc *inputMc ) { @@ -3129,90 +1697,33 @@ static ivas_error initMcPanGainsWithMonoOut_fx( return IVAS_ERR_OK; } -#endif -#ifndef IVAS_FLOAT_FIXED -static ivas_error initMcPanGainsWithMonoOut( +static ivas_error initMcPanGainsWithStereoLookup_fx( input_mc *inputMc ) { - int16_t i; - int16_t numInChannels; - int16_t readIdx; - int16_t writeIdx; + Word16 readIdx; + Word16 writeIdx; bool skipSideSpeakers; + Word16 numInChannels; ivas_error error; - if ( ( error = getRendInputNumChannels( inputMc, &numInChannels ) ) != IVAS_ERR_OK ) + /* Special case - MONO input. + * Use gains for center CICP speaker and return early. */ + IF( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_MONO ) ) { - return error; + inputMc->panGains_fx[0][0] = L_shl( ls_conversion_cicpX_stereo_fx[2][0], 1 ); /* Q30 + Q1 = Q31 */ + move32(); + inputMc->panGains_fx[0][1] = L_shl( ls_conversion_cicpX_stereo_fx[2][1], 1 ); /* Q30 + Q1 = Q31 */ + move32(); + return IVAS_ERR_OK; } - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - for ( i = 0; i < numInChannels; ++i ) - { - /* It's OK to also set gain 1 for LFE input channels here. - * Correct LFE handling will be applied within updateMcPanGains() */ - inputMc->panGains[i][0] = 1.f; - } - } - else if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_STEREO ) - { - /* Special case for STEREO to MONO: Passive downmix (L+R)/2 */ - inputMc->panGains[0][0] = 0.5; - inputMc->panGains[1][0] = 0.5; - } - else - { - /* ls_conversion_cicpX_stereo contains gains for side speakers. - * These should be skipped with 5.1+X inputs. */ - skipSideSpeakers = false; - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_5_1_2 || inputMc->base.inConfig == IVAS_AUDIO_CONFIG_5_1_4 ) - { - skipSideSpeakers = true; - } - for ( readIdx = 0, writeIdx = 0; writeIdx < numInChannels; ++readIdx, ++writeIdx ) - { - if ( skipSideSpeakers && readIdx == 4 ) - { - /* Skip gains for side speakers in lookup table */ - readIdx += 2; - } - - inputMc->panGains[writeIdx][0] = ls_conversion_cicpX_mono[readIdx][0]; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error initMcPanGainsWithStereoLookup_fx( - input_mc *inputMc ) -{ - Word16 readIdx; - Word16 writeIdx; - bool skipSideSpeakers; - Word16 numInChannels; - ivas_error error; - - /* Special case - MONO input. - * Use gains for center CICP speaker and return early. */ - IF( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_MONO ) ) - { - inputMc->panGains_fx[0][0] = L_shl( ls_conversion_cicpX_stereo_fx[2][0], 1 ); /* Q30 + Q1 = Q31 */ - move32(); - inputMc->panGains_fx[0][1] = L_shl( ls_conversion_cicpX_stereo_fx[2][1], 1 ); /* Q30 + Q1 = Q31 */ - move32(); - return IVAS_ERR_OK; - } - - /* ls_conversion_cicpX_stereo contains gains for side speakers. - * These should be skipped with 5.1+X inputs. */ - skipSideSpeakers = false; - move16(); - test(); - if ( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_5_1_2 ) || EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_5_1_4 ) ) + /* ls_conversion_cicpX_stereo contains gains for side speakers. + * These should be skipped with 5.1+X inputs. */ + skipSideSpeakers = false; + move16(); + test(); + if ( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_5_1_2 ) || EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_5_1_4 ) ) { skipSideSpeakers = true; move16(); @@ -3257,59 +1768,10 @@ static ivas_error initMcPanGainsWithStereoLookup_fx( return IVAS_ERR_OK; } -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error initMcPanGainsWithStereoLookup( - input_mc *inputMc ) -{ - int16_t readIdx; - int16_t writeIdx; - bool skipSideSpeakers; - int16_t numInChannels; - ivas_error error; - - /* Special case - MONO input. - * Use gains for center CICP speaker and return early. */ - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_MONO ) - { - inputMc->panGains[0][0] = ls_conversion_cicpX_stereo[2][0]; - inputMc->panGains[0][1] = ls_conversion_cicpX_stereo[2][1]; - return IVAS_ERR_OK; - } - - /* ls_conversion_cicpX_stereo contains gains for side speakers. - * These should be skipped with 5.1+X inputs. */ - skipSideSpeakers = false; - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_5_1_2 || inputMc->base.inConfig == IVAS_AUDIO_CONFIG_5_1_4 ) - { - skipSideSpeakers = true; - } - - if ( ( error = getRendInputNumChannels( inputMc, &numInChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - for ( readIdx = 0, writeIdx = 0; writeIdx < numInChannels; ++readIdx, ++writeIdx ) - { - if ( skipSideSpeakers && readIdx == 4 ) - { - /* Skip gains for side speakers in lookup table */ - readIdx += 2; - } - - inputMc->panGains[writeIdx][0] = ls_conversion_cicpX_stereo[readIdx][0]; - inputMc->panGains[writeIdx][1] = ls_conversion_cicpX_stereo[readIdx][1]; - } - - return IVAS_ERR_OK; -} -#endif /* Returns 1 (true) if configs A and B are equal, otherwise returns 0 (false). * If both configs are custom LS layouts, layout details are compared to determine equality. */ -#ifdef IVAS_FLOAT_FIXED static bool configsAreEqual( const AUDIO_CONFIG configA, const LSSETUP_CUSTOM_STRUCT customLsA, @@ -3361,58 +1823,6 @@ static bool configsAreEqual( /* Otherwise it's enough to compare config enums */ return configA == configB; } -#else -static bool configsAreEqual( - const AUDIO_CONFIG configA, - const LSSETUP_CUSTOM_STRUCT customLsA, - const AUDIO_CONFIG configB, - const LSSETUP_CUSTOM_STRUCT customLsB ) -{ - int16_t i; - - /* Both input and output are custom LS - compare structs */ - if ( configA == IVAS_AUDIO_CONFIG_LS_CUSTOM && configB == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( customLsA.num_spk != customLsB.num_spk ) - { - return false; - } - - if ( customLsA.num_lfe != customLsB.num_lfe ) - { - return false; - } - - if ( customLsA.is_planar_setup != customLsB.is_planar_setup ) - { - return false; - } - - for ( i = 0; i < customLsA.num_spk; ++i ) - { - /* Compare to nearest degree (hence the int16_t cast) */ - if ( (int16_t) customLsA.ls_azimuth[i] != (int16_t) customLsB.ls_azimuth[i] || - (int16_t) customLsA.ls_elevation[i] != (int16_t) customLsB.ls_elevation[i] ) - { - return false; - } - } - for ( i = 0; i < customLsA.num_lfe; ++i ) - { - if ( customLsA.lfe_idx[i] != customLsB.lfe_idx[i] ) - { - return false; - } - } - - return true; - } - - /* Otherwise it's enough to compare config enums */ - return configA == configB; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error updateLfePanGainsForMcOut( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -3456,51 +1866,6 @@ static ivas_error updateLfePanGainsForMcOut( return error; } -#else -static ivas_error updateLfePanGainsForMcOut( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - int16_t i, numLfeIn, numOutChannels; - ivas_error error; - error = IVAS_ERR_OK; - - /* If panning is not required, simply return */ - if ( !inputMc->lfeRouting.pan_lfe ) - { - return error; - } - - numLfeIn = getNumLfeChannels( inputMc ); - - if ( outConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - numOutChannels = inputMc->base.ctx.pCustomLsOut->num_spk + inputMc->base.ctx.pCustomLsOut->num_lfe; - } - else - { - if ( ( error = getAudioConfigNumChannels( outConfig, &numOutChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( i = 0; i < numLfeIn; i++ ) - { - /* panning gains */ - if ( ( error = getEfapGains( *inputMc->base.ctx.pEfapOutWrapper, inputMc->lfeRouting.lfeOutputAzimuth, inputMc->lfeRouting.lfeOutputElevation, inputMc->lfeRouting.lfePanMtx[i] ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* linear input gain */ - v_multc( inputMc->lfeRouting.lfePanMtx[i], inputMc->lfeRouting.lfeInputGain, inputMc->lfeRouting.lfePanMtx[i], numOutChannels ); - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error updateLfePanGainsForAmbiOut( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -3535,42 +1900,6 @@ static ivas_error updateLfePanGainsForAmbiOut( return error; } -#else -static ivas_error updateLfePanGainsForAmbiOut( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - int16_t i; - int16_t numLfeIn, outAmbiOrder; - ivas_error error; - error = IVAS_ERR_OK; - - /* If panning is not required, simply return */ - if ( !inputMc->lfeRouting.pan_lfe ) - { - return error; - } - - if ( ( error = getAmbisonicsOrder( outConfig, &outAmbiOrder ) ) != IVAS_ERR_OK ) - { - return error; - } - - numLfeIn = getNumLfeChannels( inputMc ); - - for ( i = 0; i < numLfeIn; i++ ) - { - /* panning gains */ - ivas_dirac_dec_get_response( (int16_t) inputMc->lfeRouting.lfeOutputAzimuth, (int16_t) inputMc->lfeRouting.lfeOutputElevation, inputMc->lfeRouting.lfePanMtx[i], outAmbiOrder ); - - /* linear input gain */ - v_multc( inputMc->lfeRouting.lfePanMtx[i], inputMc->lfeRouting.lfeInputGain, inputMc->lfeRouting.lfePanMtx[i], IVAS_MAX_OUTPUT_CHANNELS ); - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error updateMcPanGainsForMcOut( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -3645,70 +1974,6 @@ static ivas_error updateMcPanGainsForMcOut( return error; } -#else -static ivas_error updateMcPanGainsForMcOut( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - ivas_error error; - - /* "if" conditions below realize the following mapping: - - If in == out, use identity matrix, otherwise follow the table: - +-----------+-------------+---------------+-----------+--------------------+ - | in\out | MONO | STEREO | custom LS | other | - +-----------+-------------+---------------+-----------+--------------------+ - | MONO | mono out | EFAP | EFAP | EFAP | - | custom LS | mono out | EFAP | EFAP | EFAP | - | other | mono lookup | stereo lookup | EFAP | conversion mapping | - +-----------+-------------+---------------+-----------+--------------------+ - */ - - if ( configsAreEqual( inputMc->base.inConfig, inputMc->customLsInput, outConfig, *inputMc->base.ctx.pCustomLsOut ) ) - { - error = initMcPanGainsWithIdentMatrix( inputMc ); - } - else if ( outConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM || - inputMc->base.inConfig == IVAS_AUDIO_CONFIG_MONO || - inputMc->base.inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_MONO ) && ( inputMc->nonDiegeticPan ) ) - { - inputMc->panGains[0][0] = ( inputMc->nonDiegeticPanGain + 1.f ) * 0.5f; - inputMc->panGains[0][1] = 1.f - inputMc->panGains[0][0]; - error = IVAS_ERR_OK; - } - else - { - error = initMcPanGainsWithEfap( inputMc, outConfig ); - } - } - else if ( outConfig == IVAS_AUDIO_CONFIG_MONO ) - { - error = initMcPanGainsWithMonoOut( inputMc ); - } - else if ( outConfig == IVAS_AUDIO_CONFIG_STEREO ) - { - error = initMcPanGainsWithStereoLookup( inputMc ); - } - else /* default */ - { - error = initMcPanGainsWithConversionMapping( inputMc, outConfig ); - } - - /* check for errors from above block */ - if ( error != IVAS_ERR_OK ) - { - return error; - } - - /* update LFE panning */ - error = updateLfePanGainsForMcOut( inputMc, outConfig ); - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error updateMcPanGainsForAmbiOut( input_mc *inputMc, const AUDIO_CONFIG outConfig ) @@ -3834,91 +2099,19 @@ static ivas_error updateMcPanGainsForAmbiOut( return IVAS_ERR_OK; } -#else -static ivas_error updateMcPanGainsForAmbiOut( +static ivas_error updateMcPanGains( input_mc *inputMc, const AUDIO_CONFIG outConfig ) { - int16_t ch_in, ch_out, lfeIdx; - int16_t numNonLfeInChannels, outAmbiOrder; - const float *spkAzi, *spkEle; + Word16 i; ivas_error error; - if ( ( error = getAmbisonicsOrder( outConfig, &outAmbiOrder ) ) != IVAS_ERR_OK ) - { - return error; - } + /* Reset to all zeros - some functions below only write non-zero elements. */ + setZeroPanMatrix_fx( inputMc->panGains_fx ); - if ( inputMc->base.inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = getNumNonLfeChannelsInSpeakerLayout( inputMc->base.inConfig, &numNonLfeInChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getSpeakerAzimuths( inputMc->base.inConfig, &spkAzi ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getSpeakerElevations( inputMc->base.inConfig, &spkEle ) ) != IVAS_ERR_OK ) - { - return error; - } - - for ( ch_in = 0, ch_out = 0; ch_in < numNonLfeInChannels; ++ch_in, ++ch_out ) - { - if ( ch_in == LFE_CHANNEL ) - { - ++ch_out; - } - ivas_dirac_dec_get_response( (int16_t) spkAzi[ch_in], (int16_t) spkEle[ch_in], inputMc->panGains[ch_out], outAmbiOrder ); - } - } - else - { - numNonLfeInChannels = inputMc->customLsInput.num_spk; - spkAzi = inputMc->customLsInput.ls_azimuth; - spkEle = inputMc->customLsInput.ls_elevation; - - for ( ch_in = 0, ch_out = 0; ch_in < numNonLfeInChannels; ++ch_in, ++ch_out ) - { - for ( lfeIdx = 0; lfeIdx < inputMc->customLsInput.num_lfe; ++lfeIdx ) - { - if ( inputMc->customLsInput.lfe_idx[lfeIdx] == ch_in ) - { - ++ch_out; - break; - } - } - - ivas_dirac_dec_get_response( (int16_t) spkAzi[ch_in], (int16_t) spkEle[ch_in], inputMc->panGains[ch_out], outAmbiOrder ); - } - } - - /* update LFE panning */ - if ( ( error = updateLfePanGainsForAmbiOut( inputMc, outConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error updateMcPanGains( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - Word16 i; - ivas_error error; - - /* Reset to all zeros - some functions below only write non-zero elements. */ - setZeroPanMatrix_fx( inputMc->panGains_fx ); - - error = IVAS_ERR_OK; - move32(); - SWITCH( getAudioConfigType( outConfig ) ) + error = IVAS_ERR_OK; + move32(); + SWITCH( getAudioConfigType( outConfig ) ) { case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: error = updateMcPanGainsForMcOut( inputMc, outConfig ); @@ -3967,70 +2160,7 @@ static ivas_error updateMcPanGains( return IVAS_ERR_OK; } -#else -static ivas_error updateMcPanGains( - input_mc *inputMc, - const AUDIO_CONFIG outConfig ) -{ - int16_t i; - ivas_error error; - - /* Reset to all zeros - some functions below only write non-zero elements. */ - setZeroPanMatrix( inputMc->panGains ); - - error = IVAS_ERR_OK; - switch ( getAudioConfigType( outConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - error = updateMcPanGainsForMcOut( inputMc, outConfig ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - error = updateMcPanGainsForAmbiOut( inputMc, outConfig ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_BINAURAL: - break; /* Do nothing */ - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - /* Prepare rendering to intermediate format */ - error = updateMcPanGainsForMcOut( inputMc, IVAS_AUDIO_CONFIG_7_1_4 ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - break; /* Do nothing */ - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - /* Check error here to keep switch statement more compact */ - if ( error != IVAS_ERR_OK ) - { - return error; - } - - /* Copy LFE routing to pan gains array */ - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - for ( i = 0; i < inputMc->customLsInput.num_lfe; ++i ) - { - mvr2r( inputMc->lfeRouting.lfePanMtx[i], inputMc->panGains[inputMc->customLsInput.lfe_idx[i]], IVAS_MAX_OUTPUT_CHANNELS ); - } - } - else - { - /* For code simplicity, always copy LFE gains. If config has no LFE, gains will be zero anyway. */ - mvr2r( inputMc->lfeRouting.lfePanMtx[0], inputMc->panGains[LFE_CHANNEL], IVAS_MAX_OUTPUT_CHANNELS ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcBinauralRendering( input_mc *inputMc, const AUDIO_CONFIG inConfig, @@ -4193,110 +2323,7 @@ static ivas_error initMcBinauralRendering( return IVAS_ERR_OK; } -#else -static ivas_error initMcBinauralRendering( - input_mc *inputMc, - const AUDIO_CONFIG inConfig, - const AUDIO_CONFIG outConfig, - RENDER_CONFIG_DATA *hRendCfg, - uint8_t reconfigureFlag ) -{ - ivas_error error; - int32_t binauralDelayNs; - int32_t outSampleRate; - int8_t useTDRend; - - /* Allocate TD binaural renderer for custom loudspeaker layouts (regardless of headrotation) - or planar MC layouts with headrotation, CREND for the rest */ - useTDRend = FALSE; - if ( outConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) - { - if ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM && outConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - useTDRend = TRUE; - } - else if ( ( inConfig == IVAS_AUDIO_CONFIG_5_1 || inConfig == IVAS_AUDIO_CONFIG_7_1 ) && - ( inputMc->base.ctx.pHeadRotData->headRotEnabled ) ) - { - useTDRend = TRUE; - } - } - - /* if TD renderer was open and we need to use CREND, close it */ - if ( !reconfigureFlag || ( !useTDRend && inputMc->tdRendWrapper.hBinRendererTd != NULL ) ) - { - ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd ); - } - - - /* if we need to use TD renderer and CREND was open, close it */ - if ( useTDRend ) - { - ivas_rend_closeCrend( &inputMc->crendWrapper ); - } - - if ( !reconfigureFlag || ( !useTDRend && outConfig != IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && inputMc->hReverb != NULL ) ) - { - ivas_reverb_close( &inputMc->hReverb ); - } - - if ( !reconfigureFlag || ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM && !inputMc->base.ctx.pHeadRotData->headRotEnabled ) ) - { - if ( inputMc->efapInWrapper.hEfap != NULL ) - { - efap_free_data( &inputMc->efapInWrapper.hEfap ); - } - } - - outSampleRate = *inputMc->base.ctx.pOutSampleRate; - - if ( useTDRend && inputMc->tdRendWrapper.hBinRendererTd == NULL ) - { - if ( ( error = ivas_td_binaural_open_ext( &inputMc->tdRendWrapper, inConfig, hRendCfg, &inputMc->customLsInput, outSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB && inputMc->hReverb == NULL ) - { - if ( ( error = ivas_reverb_open( &( inputMc->hReverb ), outConfig, NULL, inputMc->tdRendWrapper.hBinRendererTd->HrFiltSet_p->lr_energy_and_iac, hRendCfg, outSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - else if ( !useTDRend && inputMc->crendWrapper == NULL ) - { - /* open CREND */ - if ( ( error = ivas_rend_openCrend( &inputMc->crendWrapper, ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) ? IVAS_AUDIO_CONFIG_7_1_4 : inConfig, outConfig, hRendCfg, NULL, outSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Initialise the EFAP handle for rotation on input layout */ - if ( inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM && inputMc->base.ctx.pHeadRotData->headRotEnabled && inputMc->efapInWrapper.hEfap == NULL ) - { - if ( ( error = initEfap( &inputMc->efapInWrapper, inConfig, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* determine binaural delay ( used for aligning LFE to output signal ) */ - binauralDelayNs = max( ( inputMc->crendWrapper != NULL ) ? inputMc->crendWrapper->binaural_latency_ns : 0, inputMc->tdRendWrapper.binaural_latency_ns ); - inputMc->binauralDelaySmp = (int16_t) roundf( (float) binauralDelayNs * *inputMc->base.ctx.pOutSampleRate / 1000000000.f ); - - if ( inputMc->binauralDelaySmp > MAX_BIN_DELAY_SAMPLES ) - { - return IVAS_ERROR( IVAS_ERR_WRONG_PARAMS, "Invalid delay for LFE binaural rendering!)" ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initMcMasaRendering( input_mc *inputMc, const AUDIO_CONFIG inConfig, @@ -4326,38 +2353,6 @@ static ivas_error initMcMasaRendering( return IVAS_ERR_OK; } -#else -static ivas_error initMcMasaRendering( - input_mc *inputMc, - const AUDIO_CONFIG inConfig, - const int32_t inSampleRate ) -{ - ivas_error error; - - if ( inputMc->tdRendWrapper.hBinRendererTd != NULL ) - { - ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd ); - inputMc->tdRendWrapper.hHrtfTD = NULL; - } - - ivas_rend_closeCrend( &inputMc->crendWrapper ); - - ivas_reverb_close( &inputMc->hReverb ); - - if ( inputMc->efapInWrapper.hEfap != NULL ) - { - efap_free_data( &inputMc->efapInWrapper.hEfap ); - } - - if ( ( error = ivas_mcmasa_ana_open( &inputMc->hMcMasa, inConfig, inSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static lfe_routing defaultLfeRouting( const AUDIO_CONFIG inConfig, const LSSETUP_CUSTOM_STRUCT customLsIn, @@ -4422,66 +2417,6 @@ static lfe_routing defaultLfeRouting( return routing; } -#else -static lfe_routing defaultLfeRouting( - const AUDIO_CONFIG inConfig, - const LSSETUP_CUSTOM_STRUCT customLsIn, - const AUDIO_CONFIG outConfig, - const LSSETUP_CUSTOM_STRUCT customLsOut ) -{ - int16_t i; - lfe_routing routing; - - /* Set all output gains to zero, then route each input LFE consecutively to the next available output LFE. */ - - for ( i = 0; i < RENDERER_MAX_INPUT_LFE_CHANNELS; ++i ) - { - set_zero( routing.lfePanMtx[i], IVAS_MAX_OUTPUT_CHANNELS ); - } - - routing.pan_lfe = false; - routing.lfeInputGain = 1.0f; - - switch ( inConfig ) - { - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_7_1_4: - routing.numLfeChannels = 1; - break; - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - routing.numLfeChannels = customLsIn.num_lfe; - break; - default: - routing.numLfeChannels = 0; - } - - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_7_1_4: - routing.lfePanMtx[0][LFE_CHANNEL] = 1.0f; - break; - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - for ( i = 0; i < routing.numLfeChannels && i < customLsOut.num_lfe; ++i ) - { - routing.lfePanMtx[i][customLsOut.lfe_idx[i]] = 1.0f; - } - break; - default: - /* Do nothing */ - break; - } - - return routing; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error setRendInputActiveMc( void *input, const AUDIO_CONFIG inConfig, @@ -4552,132 +2487,30 @@ static ivas_error setRendInputActiveMc( return IVAS_ERR_OK; } -#else -static ivas_error setRendInputActiveMc( - void *input, - const AUDIO_CONFIG inConfig, - const IVAS_REND_InputId id, - RENDER_CONFIG_DATA *hRendCfg ) +static void clearInputMc( + input_mc *inputMc ) { - ivas_error error; rendering_context rendCtx; - AUDIO_CONFIG outConfig; - input_mc *inputMc; - inputMc = (input_mc *) input; rendCtx = inputMc->base.ctx; - outConfig = *rendCtx.pOutConfig; + freeMcLfeDelayBuffer_fx( &inputMc->lfeDelayBuffer_fx ); + freeInputBaseBufferData_fx( &inputMc->bufferData_fx ); + initRendInputBase_fx( &inputMc->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - if ( !isIoConfigPairSupported( inConfig, outConfig ) ) + /* Free input's internal handles */ + IF( inputMc->efapInWrapper.hEfap != NULL ) { - return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; + efap_free_data_fx( &inputMc->efapInWrapper.hEfap ); } - if ( ( error = allocateMcLfeDelayBuffer( &inputMc->lfeDelayBuffer, MAX_BIN_DELAY_SAMPLES ) ) != IVAS_ERR_OK ) - { - return error; - } + ivas_rend_closeCrend( &inputMc->crendWrapper ); + + ivas_reverb_close( &inputMc->hReverb ); - if ( ( error = allocateInputBaseBufferData( &inputMc->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + IF( inputMc->tdRendWrapper.hBinRendererTd != NULL ) { - return error; - } - initRendInputBase( &inputMc->base, inConfig, id, rendCtx, inputMc->bufferData, MAX_BUFFER_LENGTH ); - - setZeroPanMatrix( inputMc->panGains ); - inputMc->customLsInput = defaultCustomLs(); - inputMc->tdRendWrapper = defaultTdRendWrapper(); - inputMc->crendWrapper = NULL; - inputMc->hReverb = NULL; - inputMc->hMcMasa = NULL; - - initRotGains( inputMc->rot_gains_prev ); - inputMc->lfeRouting = defaultLfeRouting( inConfig, inputMc->customLsInput, outConfig, *inputMc->base.ctx.pCustomLsOut ); - set_zero( inputMc->lfeDelayBuffer, MAX_BIN_DELAY_SAMPLES ); - inputMc->binauralDelaySmp = 0; - - if ( outConfig == IVAS_AUDIO_CONFIG_BINAURAL || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = initMcBinauralRendering( inputMc, inConfig, outConfig, hRendCfg, FALSE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( outConfig == IVAS_AUDIO_CONFIG_MASA1 || outConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - if ( ( error = initMcMasaRendering( inputMc, inConfig, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = updateMcPanGains( inputMc, outConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static void clearInputMc( - input_mc *inputMc ) -{ - rendering_context rendCtx; - - rendCtx = inputMc->base.ctx; - freeMcLfeDelayBuffer_fx( &inputMc->lfeDelayBuffer_fx ); - freeInputBaseBufferData_fx( &inputMc->bufferData_fx ); - initRendInputBase_fx( &inputMc->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - /* Free input's internal handles */ - IF( inputMc->efapInWrapper.hEfap != NULL ) - { - efap_free_data_fx( &inputMc->efapInWrapper.hEfap ); - } - - ivas_rend_closeCrend( &inputMc->crendWrapper ); - - ivas_reverb_close( &inputMc->hReverb ); - - IF( inputMc->tdRendWrapper.hBinRendererTd != NULL ) - { - ivas_td_binaural_close_fx( &inputMc->tdRendWrapper.hBinRendererTd ); - inputMc->tdRendWrapper.hHrtfTD = NULL; - } - - - ivas_mcmasa_ana_close( &( inputMc->hMcMasa ) ); - - return; -} -#else -static void clearInputMc( - input_mc *inputMc ) -{ - rendering_context rendCtx; - - rendCtx = inputMc->base.ctx; - - freeMcLfeDelayBuffer( &inputMc->lfeDelayBuffer ); - freeInputBaseBufferData( &inputMc->bufferData ); - initRendInputBase( &inputMc->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - /* Free input's internal handles */ - if ( inputMc->efapInWrapper.hEfap != NULL ) - { - efap_free_data( &inputMc->efapInWrapper.hEfap ); - } - - ivas_rend_closeCrend( &inputMc->crendWrapper ); - - ivas_reverb_close( &inputMc->hReverb ); - - if ( inputMc->tdRendWrapper.hBinRendererTd != NULL ) - { - ivas_td_binaural_close( &inputMc->tdRendWrapper.hBinRendererTd ); - inputMc->tdRendWrapper.hHrtfTD = NULL; + ivas_td_binaural_close_fx( &inputMc->tdRendWrapper.hBinRendererTd ); + inputMc->tdRendWrapper.hHrtfTD = NULL; } @@ -4685,8 +2518,6 @@ static void clearInputMc( return; } -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initSbaPanGainsForMcOut( input_sba *inputSba, const AUDIO_CONFIG outConfig, @@ -4758,79 +2589,7 @@ static ivas_error initSbaPanGainsForMcOut( return IVAS_ERR_OK; } -#else -static ivas_error initSbaPanGainsForMcOut( - input_sba *inputSba, - const AUDIO_CONFIG outConfig, - const LSSETUP_CUSTOM_STRUCT *outSetupCustom ) -{ - int16_t ambiOrderIn; - int16_t chInIdx, chOutIdx; - float *tmpDecMtx, *readPtr; - IVAS_OUTPUT_SETUP hOutSetup; - ivas_error error; - - if ( ( error = getAmbisonicsOrder( inputSba->base.inConfig, &ambiOrderIn ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( getAudioConfigType( outConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - assert( !"Invalid configuration" ); - return IVAS_ERR_WRONG_PARAMS; - } - - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_MONO: - hOutSetup.ls_azimuth = ls_azimuth_CICP1; - hOutSetup.ls_elevation = ls_elevation_CICP1; - ivas_output_init( &hOutSetup, outConfig ); - break; - case IVAS_AUDIO_CONFIG_STEREO: - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - ivas_output_init( &hOutSetup, outConfig ); - break; - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - ivas_ls_custom_setup( &hOutSetup, outSetupCustom ); - break; - default: - assert( !"Invalid speaker config" ); - return IVAS_ERR_WRONG_PARAMS; - } - - /* obtain and copy over HOA decoding matrix */ - tmpDecMtx = NULL; - if ( ( error = ivas_sba_get_hoa_dec_matrix( hOutSetup, &tmpDecMtx, ambiOrderIn ) ) != IVAS_ERR_OK ) - { - return error; - } - - readPtr = &tmpDecMtx[0]; - for ( chOutIdx = 0; chOutIdx < hOutSetup.nchan_out_woLFE + hOutSetup.num_lfe; ++chOutIdx ) - { - for ( chInIdx = 0; chInIdx < SBA_NHARM_HOA3; ++chInIdx ) - { - if ( hOutSetup.num_lfe > 0 && chOutIdx == hOutSetup.index_lfe[0] ) - { - continue; /* nothing to be rendered to LFE */ - } - inputSba->hoaDecMtx[chInIdx][chOutIdx] = *readPtr++; - } - } - - free( tmpDecMtx ); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initSbaPanGainsForSbaOut( input_sba *inputSba, const AUDIO_CONFIG outConfig ) @@ -4849,26 +2608,6 @@ static ivas_error initSbaPanGainsForSbaOut( return error; } -#else -static ivas_error initSbaPanGainsForSbaOut( - input_sba *inputSba, - const AUDIO_CONFIG outConfig ) -{ - ivas_error error; - error = IVAS_ERR_OK; - - if ( getAudioConfigType( outConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - assert( !"Invalid configuration" ); - return IVAS_ERR_WRONG_PARAMS; - } - - fillIdentityPanMatrix( inputSba->hoaDecMtx ); - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error updateSbaPanGains( input_sba *inputSba, const AUDIO_CONFIG outConfig, @@ -4936,76 +2675,7 @@ static ivas_error updateSbaPanGains( return IVAS_ERR_OK; } -#else -static ivas_error updateSbaPanGains( - input_sba *inputSba, - const AUDIO_CONFIG outConfig, - RENDER_CONFIG_DATA *hRendCfg ) -{ - ivas_error error; - AUDIO_CONFIG inConfig; - rendering_context rendCtx; - - /* Reset to all zeros - some functions below only write non-zero elements. */ - setZeroPanMatrix( inputSba->hoaDecMtx ); - - inConfig = inputSba->base.inConfig; - rendCtx = inputSba->base.ctx; - - switch ( getAudioConfigType( outConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - error = initSbaPanGainsForMcOut( inputSba, outConfig, inputSba->base.ctx.pCustomLsOut ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - error = initSbaPanGainsForSbaOut( inputSba, outConfig ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_BINAURAL: - { - if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, inConfig, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - - { - return error; - } - } - break; - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - if ( ( error = initSbaPanGainsForMcOut( inputSba, IVAS_AUDIO_CONFIG_7_1_4, NULL ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = ivas_rend_openCrend( &inputSba->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, hRendCfg, NULL, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - error = IVAS_ERR_OK; - break; /* Do nothing */ - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - - /* Check error here to keep switch statement more compact */ - if ( error != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error initSbaMasaRendering( input_sba *inputSba, Word32 inSampleRate ) @@ -5021,32 +2691,7 @@ static ivas_error initSbaMasaRendering( return IVAS_ERR_OK; } -#else -static ivas_error initSbaMasaRendering( - input_sba *inputSba, - int32_t inSampleRate ) -{ - ivas_error error; - - ivas_rend_closeCrend( &inputSba->crendWrapper ); - -#ifdef IVAS_FLOAT_FIXED - IF( ( error = ivas_dirac_ana_open_fx( &inputSba->hDirAC, inSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } -#else - if ( ( error = ivas_dirac_ana_open( &inputSba->hDirAC, inSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error setRendInputActiveSba( void *input, const AUDIO_CONFIG inConfig, @@ -5096,185 +2741,58 @@ static ivas_error setRendInputActiveSba( return error; } -#else -static ivas_error setRendInputActiveSba( +static void clearInputSba( + input_sba *inputSba ) +{ + rendering_context rendCtx; + + rendCtx = inputSba->base.ctx; + + freeInputBaseBufferData_fx( &inputSba->bufferData_fx ); + + initRendInputBase_fx( &inputSba->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); + + /* Free input's internal handles */ + ivas_rend_closeCrend( &inputSba->crendWrapper ); + + ivas_dirac_ana_close_fx( &( inputSba->hDirAC ) ); + + return; +} + +static ivas_error setRendInputActiveMasa( void *input, const AUDIO_CONFIG inConfig, const IVAS_REND_InputId id, - RENDER_CONFIG_DATA *hRendCfg ) + RENDER_CONFIG_DATA *hRendCfg ) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */ { ivas_error error; rendering_context rendCtx; AUDIO_CONFIG outConfig; - input_sba *inputSba; + input_masa *inputMasa; + Word16 numInChannels; - inputSba = (input_sba *) input; - rendCtx = inputSba->base.ctx; + inputMasa = (input_masa *) input; + rendCtx = inputMasa->base.ctx; outConfig = *rendCtx.pOutConfig; + move32(); + (void) hRendCfg; /* Suppress warning */ - if ( !isIoConfigPairSupported( inConfig, outConfig ) ) + IF( !isIoConfigPairSupported( inConfig, outConfig ) ) { return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; } - if ( ( error = allocateInputBaseBufferData( &inputSba->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = allocateInputBaseBufferData_fx( &inputMasa->bufferData_fx, MAX_BUFFER_LENGTH ) ), IVAS_ERR_OK ) ) { return error; } + initRendInputBase_fx( &inputMasa->base, inConfig, id, rendCtx, inputMasa->bufferData_fx, MAX_BUFFER_LENGTH ); - initRendInputBase( &inputSba->base, inConfig, id, rendCtx, inputSba->bufferData, MAX_BUFFER_LENGTH ); - - setZeroPanMatrix( inputSba->hoaDecMtx ); - - inputSba->crendWrapper = NULL; - inputSba->hDirAC = NULL; - initRotGains( inputSba->rot_gains_prev ); - - if ( outConfig == IVAS_AUDIO_CONFIG_MASA1 || outConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - if ( ( error = initSbaMasaRendering( inputSba, *rendCtx.pOutSampleRate ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = updateSbaPanGains( inputSba, outConfig, hRendCfg ) ) != IVAS_ERR_OK ) - { - return error; - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static void clearInputSba( - input_sba *inputSba ) -{ - rendering_context rendCtx; - - rendCtx = inputSba->base.ctx; - - freeInputBaseBufferData_fx( &inputSba->bufferData_fx ); - - initRendInputBase_fx( &inputSba->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - /* Free input's internal handles */ - ivas_rend_closeCrend( &inputSba->crendWrapper ); - - ivas_dirac_ana_close_fx( &( inputSba->hDirAC ) ); - - return; -} -#else -static void clearInputSba( - input_sba *inputSba ) -{ - rendering_context rendCtx; - - rendCtx = inputSba->base.ctx; - - freeInputBaseBufferData( &inputSba->bufferData ); - - initRendInputBase( &inputSba->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - /* Free input's internal handles */ - ivas_rend_closeCrend( &inputSba->crendWrapper ); - - ivas_dirac_ana_close( &( inputSba->hDirAC ) ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error setRendInputActiveMasa( - void *input, - const AUDIO_CONFIG inConfig, - const IVAS_REND_InputId id, - RENDER_CONFIG_DATA *hRendCfg ) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */ -{ - ivas_error error; - rendering_context rendCtx; - AUDIO_CONFIG outConfig; - input_masa *inputMasa; - int16_t numInChannels; - - inputMasa = (input_masa *) input; - rendCtx = inputMasa->base.ctx; - outConfig = *rendCtx.pOutConfig; - (void) hRendCfg; /* Suppress warning */ - - if ( !isIoConfigPairSupported( inConfig, outConfig ) ) - { - return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; - } - - if ( ( error = allocateInputBaseBufferData( &inputMasa->bufferData, MAX_BUFFER_LENGTH ) ) != IVAS_ERR_OK ) - { - return error; - } - initRendInputBase( &inputMasa->base, inConfig, id, rendCtx, inputMasa->bufferData, MAX_BUFFER_LENGTH ); - - if ( ( error = getAudioConfigNumChannels( inConfig, &numInChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - inputMasa->metadataHasBeenFed = false; - if ( ( error = masaPrerendOpen( &inputMasa->hMasaPrerend, inputMasa->base.inConfig == IVAS_AUDIO_CONFIG_MASA1 ? 1 : 2, *( inputMasa->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - if ( ( error = initMasaExtRenderer( inputMasa, outConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - inputMasa->metadataHasBeenFed = false; - } - - return IVAS_ERR_OK; -} - -#else -static ivas_error setRendInputActiveMasa( - void *input, - const AUDIO_CONFIG inConfig, - const IVAS_REND_InputId id, - RENDER_CONFIG_DATA *hRendCfg ) /* Todo: This is not used at all within MASA. Support might be better to do after refactoring. */ -{ - ivas_error error; - rendering_context rendCtx; - AUDIO_CONFIG outConfig; - input_masa *inputMasa; - Word16 numInChannels; - - inputMasa = (input_masa *) input; - rendCtx = inputMasa->base.ctx; - outConfig = *rendCtx.pOutConfig; - move32(); - (void) hRendCfg; /* Suppress warning */ - - IF( !isIoConfigPairSupported( inConfig, outConfig ) ) - { - return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; - } - - IF( NE_32( ( error = allocateInputBaseBufferData_fx( &inputMasa->bufferData_fx, MAX_BUFFER_LENGTH ) ), IVAS_ERR_OK ) ) - { - return error; - } - initRendInputBase_fx( &inputMasa->base, inConfig, id, rendCtx, inputMasa->bufferData_fx, MAX_BUFFER_LENGTH ); - - IF( NE_32( ( error = getAudioConfigNumChannels( inConfig, &numInChannels ) ), IVAS_ERR_OK ) ) - { - return error; - } + IF( NE_32( ( error = getAudioConfigNumChannels( inConfig, &numInChannels ) ), IVAS_ERR_OK ) ) + { + return error; + } IF( EQ_32( getAudioConfigType( outConfig ), IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) ) { @@ -5307,9 +2825,7 @@ static ivas_error setRendInputActiveMasa( return IVAS_ERR_OK; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void clearInputMasa( input_masa *inputMasa ) { @@ -5327,27 +2843,7 @@ static void clearInputMasa( return; } -#else -static void clearInputMasa( - input_masa *inputMasa ) -{ - rendering_context rendCtx; - - rendCtx = inputMasa->base.ctx; - - freeInputBaseBufferData( &inputMasa->bufferData ); - - masaPrerendClose( &inputMasa->hMasaPrerend ); - - freeMasaExtRenderer( &inputMasa->hMasaExtRend ); - - initRendInputBase( &inputMasa->base, IVAS_AUDIO_CONFIG_INVALID, 0, rendCtx, NULL, 0 ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*------------------------------------------------------------------------- * IVAS_REND_Open() @@ -5488,552 +2984,281 @@ ivas_error IVAS_REND_Open( return IVAS_ERR_OK; } -#else -/*------------------------------------------------------------------------- - * IVAS_REND_Open() - * - * - *------------------------------------------------------------------------*/ - -ivas_error IVAS_REND_Open( - IVAS_REND_HANDLE *phIvasRend, - const int32_t outputSampleRate, - const AUDIO_CONFIG outConfig, - const int16_t nonDiegeticPan, - const float nonDiegeticPanGain, - const int16_t num_subframes ) +static LSSETUP_CUSTOM_STRUCT makeCustomLsSetup( + const IVAS_CUSTOM_LS_DATA rendCustomLsLayout ) { - int16_t i; - IVAS_REND_HANDLE hIvasRend; - ivas_error error; - int16_t numOutChannels; + Word16 i; + LSSETUP_CUSTOM_STRUCT customLs; - /* Validate function arguments */ - if ( phIvasRend == NULL ) + /* Copy layout description */ + customLs.num_spk = rendCustomLsLayout.num_spk; + move16(); + Copy32( rendCustomLsLayout.azimuth_fx, customLs.ls_azimuth_fx, rendCustomLsLayout.num_spk ); + Copy32( rendCustomLsLayout.elevation_fx, customLs.ls_elevation_fx, rendCustomLsLayout.num_spk ); + customLs.is_planar_setup = 1; + move16(); + FOR( i = 0; i < rendCustomLsLayout.num_spk; ++i ) { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; + IF( fabsf( rendCustomLsLayout.elevation[i] ) > EPSILON ) + { + customLs.is_planar_setup = 0; + move16(); + BREAK; + } } - if ( ( error = validateOutputAudioConfig( outConfig ) ) != IVAS_ERR_OK ) + customLs.num_lfe = rendCustomLsLayout.num_lfe; + move16(); + Copy( rendCustomLsLayout.lfe_idx, customLs.lfe_idx, rendCustomLsLayout.num_lfe ); + + return customLs; +} + + +static ivas_error validateCustomLsLayout_fx( + const IVAS_CUSTOM_LS_DATA layout ) +{ + Word16 i; + + /* Negative number of speakers or LFEs makes no sense */ + test(); + IF( layout.num_spk < 0 || layout.num_lfe < 0 ) { - return error; + return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; } - if ( ( error = validateOutputSampleRate( outputSampleRate, outConfig ) ) != IVAS_ERR_OK ) + /* There must be at least one speaker or LFE in the layout */ + IF( add( layout.num_spk, layout.num_lfe ) <= 0 ) { - return error; + return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; } - *phIvasRend = (IVAS_REND_HANDLE) malloc( sizeof( struct IVAS_REND ) ); - if ( *phIvasRend == NULL ) + /* LFE indices must be positive */ + FOR( i = 0; i < layout.num_lfe; ++i ) { - return IVAS_ERR_FAILED_ALLOC; + IF( layout.lfe_idx[i] < 0 ) + { + return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; + } } - hIvasRend = *phIvasRend; - hIvasRend->sampleRateOut = outputSampleRate; - hIvasRend->outputConfig = outConfig; - hIvasRend->customLsOut = defaultCustomLs(); - hIvasRend->hLimiter = NULL; - hIvasRend->efapOutWrapper.hEfap = NULL; - hIvasRend->efapOutWrapper.pCustomLsSetup = NULL; - hIvasRend->num_subframes = num_subframes; + return IVAS_ERR_OK; +} - /* Initialize limiter */ - if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) + +/*-------------------------------------------------------------------* + * IVAS_REND_ConfigureCustomOutputLoudspeakerLayout() + * + * + *-------------------------------------------------------------------*/ + +ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( + IVAS_REND_HANDLE hIvasRend, + const IVAS_CUSTOM_LS_DATA layout ) +{ + Word16 i, numOutChannels; + ivas_error error; + input_mc *inputMc; + input_sba *inputSba; + + /* Validate function arguments */ + IF( hIvasRend == NULL ) { - return error; + return IVAS_ERR_UNEXPECTED_NULL_POINTER; } - if ( ( error = initLimiter( &hIvasRend->hLimiter, numOutChannels, outputSampleRate ) ) != IVAS_ERR_OK ) + IF( NE_32( hIvasRend->outputConfig, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { - return error; + /* Specifying details of custom speaker layout only makes sense if output config is set to custom speaker layout */ + return IVAS_ERR_INVALID_OUTPUT_FORMAT; } - /* Initialize headrotation data */ - if ( ( error = initHeadRotation( hIvasRend ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = validateCustomLsLayout_fx( layout ) ), IVAS_ERR_OK ) ) { return error; } - /* Initialize external orientation data */ - if ( ( error = ivas_external_orientation_open( &( hIvasRend->hExternalOrientationData ), num_subframes ) ) != IVAS_ERR_OK ) + hIvasRend->customLsOut = makeCustomLsSetup( layout ); + + /* Re-initialize limiter - number of output channels may have changed */ + IF( NE_32( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ), IVAS_ERR_OK ) ) { return error; } - /* Initilize combined orientation data */ - if ( ( error = ivas_combined_orientation_open( &( hIvasRend->hCombinedOrientationData ), outputSampleRate, num_subframes ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = initLimiter( &hIvasRend->hLimiter, numOutChannels, hIvasRend->sampleRateOut ) ), IVAS_ERR_OK ) ) { return error; } - /* Initialize EFAP */ - if ( ( error = initEfap( &hIvasRend->efapOutWrapper, outConfig, &hIvasRend->customLsOut ) ) != IVAS_ERR_OK ) + /* Re-initialize EFAP - output layout has changed or has been fully defined for the first time */ + IF( NE_32( ( error = initEfap( &hIvasRend->efapOutWrapper, hIvasRend->outputConfig, &hIvasRend->customLsOut ) ), IVAS_ERR_OK ) ) { return error; } - /* Initialize inputs */ - - for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) - { - initRendInputBase( &hIvasRend->inputsIsm[i].base, IVAS_AUDIO_CONFIG_INVALID, 0, getRendCtx( hIvasRend ), NULL, 0 ); - - hIvasRend->inputsIsm[i].crendWrapper = NULL; - hIvasRend->inputsIsm[i].hReverb = NULL; - hIvasRend->inputsIsm[i].tdRendWrapper.hBinRendererTd = NULL; - hIvasRend->inputsIsm[i].bufferData = NULL; - hIvasRend->inputsIsm[i].nonDiegeticPan = nonDiegeticPan; - hIvasRend->inputsIsm[i].nonDiegeticPanGain = nonDiegeticPanGain; - hIvasRend->inputsIsm[i].hOMasa = NULL; - } - - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - initRendInputBase( &hIvasRend->inputsMc[i].base, IVAS_AUDIO_CONFIG_INVALID, 0, getRendCtx( hIvasRend ), NULL, 0 ); - - hIvasRend->inputsMc[i].efapInWrapper.hEfap = NULL; - hIvasRend->inputsMc[i].crendWrapper = NULL; - hIvasRend->inputsMc[i].hReverb = NULL; - hIvasRend->inputsMc[i].tdRendWrapper.hBinRendererTd = NULL; - hIvasRend->inputsMc[i].bufferData = NULL; - hIvasRend->inputsMc[i].lfeDelayBuffer = NULL; - hIvasRend->inputsMc[i].nonDiegeticPan = nonDiegeticPan; - hIvasRend->inputsMc[i].nonDiegeticPanGain = nonDiegeticPanGain; - hIvasRend->inputsMc[i].hMcMasa = NULL; - } - - for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) - { - initRendInputBase( &hIvasRend->inputsSba[i].base, IVAS_AUDIO_CONFIG_INVALID, 0, getRendCtx( hIvasRend ), NULL, 0 ); - - hIvasRend->inputsSba[i].crendWrapper = NULL; - hIvasRend->inputsSba[i].bufferData = NULL; - hIvasRend->inputsSba[i].hDirAC = NULL; - } - - for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) - { - initRendInputBase( &hIvasRend->inputsMasa[i].base, IVAS_AUDIO_CONFIG_INVALID, 0, getRendCtx( hIvasRend ), NULL, 0 ); - - hIvasRend->inputsMasa[i].metadataHasBeenFed = false; - hIvasRend->inputsMasa[i].bufferData = NULL; - hIvasRend->inputsMasa[i].hMasaPrerend = NULL; - hIvasRend->inputsMasa[i].hMasaExtRend = NULL; - } - - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static LSSETUP_CUSTOM_STRUCT makeCustomLsSetup( - const IVAS_CUSTOM_LS_DATA rendCustomLsLayout ) -{ - Word16 i; - LSSETUP_CUSTOM_STRUCT customLs; - - /* Copy layout description */ - customLs.num_spk = rendCustomLsLayout.num_spk; - move16(); - Copy32( rendCustomLsLayout.azimuth_fx, customLs.ls_azimuth_fx, rendCustomLsLayout.num_spk ); - Copy32( rendCustomLsLayout.elevation_fx, customLs.ls_elevation_fx, rendCustomLsLayout.num_spk ); - customLs.is_planar_setup = 1; - move16(); - FOR( i = 0; i < rendCustomLsLayout.num_spk; ++i ) + /* Re-initialize panning gains for each active MC input, This includes re-initializing + * LFE handling for the new output layout, which means custom LFE handling is overwritten, + * if previously set for any MC input. */ + FOR( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) { - IF( fabsf( rendCustomLsLayout.elevation[i] ) > EPSILON ) + inputMc = &hIvasRend->inputsMc[i]; + IF( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { - customLs.is_planar_setup = 0; - move16(); - BREAK; + /* Input inactive, skip. */ + CONTINUE; } - } - - customLs.num_lfe = rendCustomLsLayout.num_lfe; - move16(); - Copy( rendCustomLsLayout.lfe_idx, customLs.lfe_idx, rendCustomLsLayout.num_lfe ); - - return customLs; -} -#else -static LSSETUP_CUSTOM_STRUCT makeCustomLsSetup( - const IVAS_CUSTOM_LS_DATA rendCustomLsLayout ) -{ - int16_t i; - LSSETUP_CUSTOM_STRUCT customLs; - /* Copy layout description */ - customLs.num_spk = rendCustomLsLayout.num_spk; - mvr2r( rendCustomLsLayout.azimuth, customLs.ls_azimuth, rendCustomLsLayout.num_spk ); - mvr2r( rendCustomLsLayout.elevation, customLs.ls_elevation, rendCustomLsLayout.num_spk ); + inputMc->lfeRouting = defaultLfeRouting( inputMc->base.inConfig, inputMc->customLsInput, hIvasRend->outputConfig, *inputMc->base.ctx.pCustomLsOut ); - customLs.is_planar_setup = 1; - for ( i = 0; i < rendCustomLsLayout.num_spk; ++i ) - { - if ( fabsf( rendCustomLsLayout.elevation[i] ) > EPSILON ) + IF( NE_32( ( error = updateMcPanGains( inputMc, hIvasRend->outputConfig ) ), IVAS_ERR_OK ) ) { - customLs.is_planar_setup = 0; - break; + return error; } } - customLs.num_lfe = rendCustomLsLayout.num_lfe; - mvs2s( rendCustomLsLayout.lfe_idx, customLs.lfe_idx, rendCustomLsLayout.num_lfe ); - - return customLs; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -static ivas_error validateCustomLsLayout_fx( - const IVAS_CUSTOM_LS_DATA layout ) -{ - Word16 i; - - /* Negative number of speakers or LFEs makes no sense */ - test(); - IF( layout.num_spk < 0 || layout.num_lfe < 0 ) - { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; - } - - /* There must be at least one speaker or LFE in the layout */ - IF( add( layout.num_spk, layout.num_lfe ) <= 0 ) + /* Re-initialize panning gains for each active SBA input */ + FOR( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; - } + inputSba = &hIvasRend->inputsSba[i]; - /* LFE indices must be positive */ - FOR( i = 0; i < layout.num_lfe; ++i ) - { - IF( layout.lfe_idx[i] < 0 ) + IF( EQ_32( inputSba->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; + /* Input inactive, skip. */ + CONTINUE; } - } - - return IVAS_ERR_OK; -} -#else -static ivas_error validateCustomLsLayout( - const IVAS_CUSTOM_LS_DATA layout ) -{ - int16_t i; - - /* Negative number of speakers or LFEs makes no sense */ - if ( layout.num_spk < 0 || layout.num_lfe < 0 ) - { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; - } - - /* There must be at least one speaker or LFE in the layout */ - if ( layout.num_spk + layout.num_lfe <= 0 ) - { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; - } - - /* LFE indices must be positive */ - for ( i = 0; i < layout.num_lfe; ++i ) - { - if ( layout.lfe_idx[i] < 0 ) + IF( NE_32( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ), IVAS_ERR_OK ) ) { - return IVAS_ERR_INVALID_CUSTOM_LS_LAYOUT; + return error; } } return IVAS_ERR_OK; } -#endif - /*-------------------------------------------------------------------* - * IVAS_REND_ConfigureCustomOutputLoudspeakerLayout() + * IVAS_REND_NumOutChannels() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( - IVAS_REND_HANDLE hIvasRend, - const IVAS_CUSTOM_LS_DATA layout ) +ivas_error IVAS_REND_NumOutChannels( + IVAS_REND_CONST_HANDLE hIvasRend, + Word16 *numOutChannels ) { - int16_t i, numOutChannels; ivas_error error; - input_mc *inputMc; - input_sba *inputSba; /* Validate function arguments */ - if ( hIvasRend == NULL ) + test(); + IF( hIvasRend == NULL || numOutChannels == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } - if ( hIvasRend->outputConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) + /* Handle special cases where additional info is needed from the renderer, otherwise use getAudioConfigNumChannels() */ + SWITCH( hIvasRend->outputConfig ) { - /* Specifying details of custom speaker layout only makes sense if output config is set to custom speaker layout */ - return IVAS_ERR_INVALID_OUTPUT_FORMAT; + case IVAS_AUDIO_CONFIG_LS_CUSTOM: + *numOutChannels = add( hIvasRend->customLsOut.num_spk, hIvasRend->customLsOut.num_lfe ); + move16(); + BREAK; + default: + IF( NE_32( ( error = getAudioConfigNumChannels( hIvasRend->outputConfig, numOutChannels ) ), IVAS_ERR_OK ) ) + { + return error; + } + BREAK; } - if ( ( error = validateCustomLsLayout( layout ) ) != IVAS_ERR_OK ) - { - return error; - } + return IVAS_ERR_OK; +} - hIvasRend->customLsOut = makeCustomLsSetup( layout ); - /* Re-initialize limiter - number of output channels may have changed */ - if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) +static IVAS_REND_InputId makeInputId( + AUDIO_CONFIG config, + const Word32 inputIndex ) +{ + /* Put config type in second byte (from LSB), put index + 1 in first byte + * + * Index is incremented here so that a valid ID can never be 0. */ + return (IVAS_REND_InputId) UL_or( UL_lshl( ( (UWord32) getAudioConfigType( config ) ), 8 ), L_add( inputIndex, 1 ) ); +} + + +static ivas_error getInputById( + IVAS_REND_HANDLE hIvasRend, + IVAS_REND_InputId inputId, + void **ppInput ) +{ + Word32 inputIndex; + IVAS_REND_AudioConfigType configType; + input_base *pInputBase; + + /* Reverse makeInputId() */ + inputIndex = L_sub( L_and( inputId, 0xFF ), 1 ); + configType = L_shr( L_and( inputId, 0xFF00 ), 8 ); + + /* Validate values derived from input ID */ + IF( inputIndex < 0 ) { - return error; + return IVAS_ERR_INVALID_INPUT_ID; } - - if ( ( error = initLimiter( &hIvasRend->hLimiter, numOutChannels, hIvasRend->sampleRateOut ) ) != IVAS_ERR_OK ) + SWITCH( configType ) { - return error; + case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: + IF( GT_32( inputIndex, RENDERER_MAX_ISM_INPUTS ) ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsIsm[inputIndex].base; + BREAK; + case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: + IF( GT_32( inputIndex, RENDERER_MAX_MC_INPUTS ) ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsMc[inputIndex].base; + BREAK; + case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: + IF( GT_32( inputIndex, RENDERER_MAX_SBA_INPUTS ) ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsSba[inputIndex].base; + BREAK; + case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: + IF( GT_32( inputIndex, RENDERER_MAX_MASA_INPUTS ) ) + { + return IVAS_ERR_INVALID_INPUT_ID; + } + pInputBase = &hIvasRend->inputsMasa[inputIndex].base; + BREAK; + default: + return IVAS_ERR_INVALID_INPUT_ID; } - /* Re-initialize EFAP - output layout has changed or has been fully defined for the first time */ - if ( ( error = initEfap( &hIvasRend->efapOutWrapper, hIvasRend->outputConfig, &hIvasRend->customLsOut ) ) != IVAS_ERR_OK ) + /* Ensure input ID matches and that input is active */ + test(); + IF( NE_32( pInputBase->id, inputId ) || EQ_32( pInputBase->inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { - return error; + return IVAS_ERR_INVALID_INPUT_ID; } - /* Re-initialize panning gains for each active MC input, This includes re-initializing - * LFE handling for the new output layout, which means custom LFE handling is overwritten, - * if previously set for any MC input. */ - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - inputMc = &hIvasRend->inputsMc[i]; - if ( inputMc->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Input inactive, skip. */ - continue; - } + /* Validation done, set value via output parameter */ + *ppInput = pInputBase; - inputMc->lfeRouting = defaultLfeRouting( inputMc->base.inConfig, inputMc->customLsInput, hIvasRend->outputConfig, *inputMc->base.ctx.pCustomLsOut ); + return IVAS_ERR_OK; +} - if ( ( error = updateMcPanGains( inputMc, hIvasRend->outputConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Re-initialize panning gains for each active SBA input */ - for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) - { - inputSba = &hIvasRend->inputsSba[i]; - - if ( inputSba->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Input inactive, skip. */ - continue; - } - - if ( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} - -#else -ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( - IVAS_REND_HANDLE hIvasRend, - const IVAS_CUSTOM_LS_DATA layout ) -{ - Word16 i, numOutChannels; - ivas_error error; - input_mc *inputMc; - input_sba *inputSba; - - /* Validate function arguments */ - IF( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - IF( NE_32( hIvasRend->outputConfig, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - /* Specifying details of custom speaker layout only makes sense if output config is set to custom speaker layout */ - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - - IF( NE_32( ( error = validateCustomLsLayout_fx( layout ) ), IVAS_ERR_OK ) ) - { - return error; - } - - hIvasRend->customLsOut = makeCustomLsSetup( layout ); - - /* Re-initialize limiter - number of output channels may have changed */ - IF( NE_32( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = initLimiter( &hIvasRend->hLimiter, numOutChannels, hIvasRend->sampleRateOut ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* Re-initialize EFAP - output layout has changed or has been fully defined for the first time */ - IF( NE_32( ( error = initEfap( &hIvasRend->efapOutWrapper, hIvasRend->outputConfig, &hIvasRend->customLsOut ) ), IVAS_ERR_OK ) ) - { - return error; - } - - /* Re-initialize panning gains for each active MC input, This includes re-initializing - * LFE handling for the new output layout, which means custom LFE handling is overwritten, - * if previously set for any MC input. */ - FOR( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - inputMc = &hIvasRend->inputsMc[i]; - IF( EQ_32( inputMc->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) - { - /* Input inactive, skip. */ - CONTINUE; - } - - inputMc->lfeRouting = defaultLfeRouting( inputMc->base.inConfig, inputMc->customLsInput, hIvasRend->outputConfig, *inputMc->base.ctx.pCustomLsOut ); - - IF( NE_32( ( error = updateMcPanGains( inputMc, hIvasRend->outputConfig ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /* Re-initialize panning gains for each active SBA input */ - FOR( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) - { - inputSba = &hIvasRend->inputsSba[i]; - - IF( EQ_32( inputSba->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) - { - /* Input inactive, skip. */ - CONTINUE; - } - IF( NE_32( ( error = updateSbaPanGains( inputSba, hIvasRend->outputConfig, hIvasRend->hRendererConfig ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IVAS_REND_NumOutChannels() - * - * - *-------------------------------------------------------------------*/ - -ivas_error IVAS_REND_NumOutChannels( - IVAS_REND_CONST_HANDLE hIvasRend, - Word16 *numOutChannels ) -{ - ivas_error error; - - /* Validate function arguments */ - test(); - IF( hIvasRend == NULL || numOutChannels == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Handle special cases where additional info is needed from the renderer, otherwise use getAudioConfigNumChannels() */ - SWITCH( hIvasRend->outputConfig ) - { - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - *numOutChannels = add( hIvasRend->customLsOut.num_spk, hIvasRend->customLsOut.num_lfe ); - move16(); - BREAK; - default: - IF( NE_32( ( error = getAudioConfigNumChannels( hIvasRend->outputConfig, numOutChannels ) ), IVAS_ERR_OK ) ) - { - return error; - } - BREAK; - } - - return IVAS_ERR_OK; -} -#else -/*-------------------------------------------------------------------* - * IVAS_REND_NumOutChannels() - * - * - *-------------------------------------------------------------------*/ -ivas_error IVAS_REND_NumOutChannels( +static ivas_error getConstInputById( IVAS_REND_CONST_HANDLE hIvasRend, - int16_t *numOutChannels ) -{ - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL || numOutChannels == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Handle special cases where additional info is needed from the renderer, otherwise use getAudioConfigNumChannels() */ - switch ( hIvasRend->outputConfig ) - { - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - *numOutChannels = hIvasRend->customLsOut.num_spk + hIvasRend->customLsOut.num_lfe; - break; - default: - if ( ( error = getAudioConfigNumChannels( hIvasRend->outputConfig, numOutChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - break; - } - - return IVAS_ERR_OK; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -static IVAS_REND_InputId makeInputId( - AUDIO_CONFIG config, - const Word32 inputIndex ) -{ - /* Put config type in second byte (from LSB), put index + 1 in first byte - * - * Index is incremented here so that a valid ID can never be 0. */ - return (IVAS_REND_InputId) UL_or( UL_lshl( ( (UWord32) getAudioConfigType( config ) ), 8 ), L_add( inputIndex, 1 ) ); -} -#else -static IVAS_REND_InputId makeInputId( - AUDIO_CONFIG config, - const int32_t inputIndex ) -{ - /* Put config type in second byte (from LSB), put index + 1 in first byte - * - * Index is incremented here so that a valid ID can never be 0. */ - return (IVAS_REND_InputId) ( ( ( (uint32_t) getAudioConfigType( config ) ) << 8 ) | ( inputIndex + 1 ) ); -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -static ivas_error getInputById( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_InputId inputId, - void **ppInput ) + const IVAS_REND_InputId inputId, + const void **ppInput ) { Word32 inputIndex; IVAS_REND_AudioConfigType configType; - input_base *pInputBase; + const input_base *pInputBase; /* Reverse makeInputId() */ inputIndex = L_sub( L_and( inputId, 0xFF ), 1 ); @@ -6090,271 +3315,32 @@ static ivas_error getInputById( return IVAS_ERR_OK; } -#else -static ivas_error getInputById( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_InputId inputId, - void **ppInput ) + +static ivas_error findFreeInputSlot_fx( + const void *inputs, + const Word32 inputStructSize, + const Word32 maxInputs, + Word32 *inputIndex ) { - int32_t inputIndex; - IVAS_REND_AudioConfigType configType; - input_base *pInputBase; + /* Using a void pointer and a separately provided size is a hack for this function + to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). + Assumptions: + - input_base is always the first member in the input struct + - provided size is correct + */ - /* Reverse makeInputId() */ - inputIndex = ( inputId & 0xFF ) - 1; - configType = ( inputId & 0xFF00 ) >> 8; + Word32 i; + bool canAddInput; + const UWord8 *pByte; + const input_base *pInputBase; - /* Validate values derived from input ID */ - if ( inputIndex < 0 ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - switch ( configType ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: - if ( inputIndex > RENDERER_MAX_ISM_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsIsm[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - if ( inputIndex > RENDERER_MAX_MC_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMc[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - if ( inputIndex > RENDERER_MAX_SBA_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsSba[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - if ( inputIndex > RENDERER_MAX_MASA_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMasa[inputIndex].base; - break; - default: - return IVAS_ERR_INVALID_INPUT_ID; - } + canAddInput = false; + move16(); - /* Ensure input ID matches and that input is active */ - if ( pInputBase->id != inputId || pInputBase->inConfig == IVAS_AUDIO_CONFIG_INVALID ) + /* Find first unused input in array */ + FOR( ( i = 0, pByte = inputs ); i < maxInputs; ( ++i, pByte += inputStructSize ) ) { - return IVAS_ERR_INVALID_INPUT_ID; - } - - /* Validation done, set value via output parameter */ - *ppInput = pInputBase; - - return IVAS_ERR_OK; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -static ivas_error getConstInputById( - IVAS_REND_CONST_HANDLE hIvasRend, - const IVAS_REND_InputId inputId, - const void **ppInput ) -{ - Word32 inputIndex; - IVAS_REND_AudioConfigType configType; - const input_base *pInputBase; - - /* Reverse makeInputId() */ - inputIndex = L_sub( L_and( inputId, 0xFF ), 1 ); - configType = L_shr( L_and( inputId, 0xFF00 ), 8 ); - - /* Validate values derived from input ID */ - IF( inputIndex < 0 ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - SWITCH( configType ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: - IF( GT_32( inputIndex, RENDERER_MAX_ISM_INPUTS ) ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsIsm[inputIndex].base; - BREAK; - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - IF( GT_32( inputIndex, RENDERER_MAX_MC_INPUTS ) ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMc[inputIndex].base; - BREAK; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - IF( GT_32( inputIndex, RENDERER_MAX_SBA_INPUTS ) ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsSba[inputIndex].base; - BREAK; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - IF( GT_32( inputIndex, RENDERER_MAX_MASA_INPUTS ) ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMasa[inputIndex].base; - BREAK; - default: - return IVAS_ERR_INVALID_INPUT_ID; - } - - /* Ensure input ID matches and that input is active */ - test(); - IF( NE_32( pInputBase->id, inputId ) || EQ_32( pInputBase->inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - - /* Validation done, set value via output parameter */ - *ppInput = pInputBase; - - return IVAS_ERR_OK; -} -#else -static ivas_error getConstInputById( - IVAS_REND_CONST_HANDLE hIvasRend, - const IVAS_REND_InputId inputId, - const void **ppInput ) -{ - int32_t inputIndex; - IVAS_REND_AudioConfigType configType; - const input_base *pInputBase; - - /* Reverse makeInputId() */ - inputIndex = ( inputId & 0xFF ) - 1; - configType = ( inputId & 0xFF00 ) >> 8; - - /* Validate values derived from input ID */ - if ( inputIndex < 0 ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - switch ( configType ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: - if ( inputIndex > RENDERER_MAX_ISM_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsIsm[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - if ( inputIndex > RENDERER_MAX_MC_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMc[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - if ( inputIndex > RENDERER_MAX_SBA_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsSba[inputIndex].base; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - if ( inputIndex > RENDERER_MAX_MASA_INPUTS ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - pInputBase = &hIvasRend->inputsMasa[inputIndex].base; - break; - default: - return IVAS_ERR_INVALID_INPUT_ID; - } - - /* Ensure input ID matches and that input is active */ - if ( pInputBase->id != inputId || pInputBase->inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - return IVAS_ERR_INVALID_INPUT_ID; - } - - /* Validation done, set value via output parameter */ - *ppInput = pInputBase; - - return IVAS_ERR_OK; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error findFreeInputSlot( - const void *inputs, - const int32_t inputStructSize, - const int32_t maxInputs, - int32_t *inputIndex ) -{ - /* Using a void pointer and a separately provided size is a hack for this function - to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). - Assumptions: - - input_base is always the first member in the input struct - - provided size is correct - */ - - int32_t i; - bool canAddInput; - const uint8_t *pByte; - const input_base *pInputBase; - - canAddInput = false; - - /* Find first unused input in array */ - for ( i = 0, pByte = inputs; i < maxInputs; ++i, pByte += inputStructSize ) - { - pInputBase = (const input_base *) pByte; - - if ( pInputBase->inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - *inputIndex = i; - canAddInput = true; - break; - } - } - - if ( !canAddInput ) - { - return IVAS_ERR_TOO_MANY_INPUTS; - } - - return IVAS_ERR_OK; -} -#else -static ivas_error findFreeInputSlot_fx( - const void *inputs, - const Word32 inputStructSize, - const Word32 maxInputs, - Word32 *inputIndex ) -{ - /* Using a void pointer and a separately provided size is a hack for this function - to be reusable for arrays of any input type (input_ism, input_mc, input_sba, input_masa). - Assumptions: - - input_base is always the first member in the input struct - - provided size is correct - */ - - Word32 i; - bool canAddInput; - const UWord8 *pByte; - const input_base *pInputBase; - - canAddInput = false; - move16(); - - /* Find first unused input in array */ - FOR( ( i = 0, pByte = inputs ); i < maxInputs; ( ++i, pByte += inputStructSize ) ) - { - pInputBase = (const input_base *) pByte; + pInputBase = (const input_base *) pByte; IF( EQ_32( pInputBase->inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) { @@ -6373,7 +3359,6 @@ static ivas_error findFreeInputSlot_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -6381,73 +3366,6 @@ static ivas_error findFreeInputSlot_fx( * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_AddInput( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const AUDIO_CONFIG inConfig, /* i : audio config for a new input */ - IVAS_REND_InputId *inputId /* o : ID of the new input */ -) -{ - ivas_error error; - int32_t maxNumInputsOfType; - void *inputsArray; - int32_t inputStructSize; - ivas_error ( *activateInput )( void *, AUDIO_CONFIG, IVAS_REND_InputId, RENDER_CONFIG_DATA * ); - int32_t inputIndex; - - /* Validate function arguments */ - if ( hIvasRend == NULL || inputId == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - - switch ( getAudioConfigType( inConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED: - maxNumInputsOfType = RENDERER_MAX_ISM_INPUTS; - inputsArray = hIvasRend->inputsIsm; - inputStructSize = sizeof( *hIvasRend->inputsIsm ); - activateInput = setRendInputActiveIsm; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - maxNumInputsOfType = RENDERER_MAX_MC_INPUTS; - inputsArray = hIvasRend->inputsMc; - inputStructSize = sizeof( *hIvasRend->inputsMc ); - activateInput = setRendInputActiveMc; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - maxNumInputsOfType = RENDERER_MAX_SBA_INPUTS; - inputsArray = hIvasRend->inputsSba; - inputStructSize = sizeof( *hIvasRend->inputsSba ); - activateInput = setRendInputActiveSba; - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - maxNumInputsOfType = RENDERER_MAX_MASA_INPUTS; - inputsArray = hIvasRend->inputsMasa; - inputStructSize = sizeof( *hIvasRend->inputsMasa ); - activateInput = setRendInputActiveMasa; - break; - default: - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - - /* Find first free input in array corresponding to input type */ - if ( ( error = findFreeInputSlot( inputsArray, inputStructSize, maxNumInputsOfType, &inputIndex ) ) != IVAS_ERR_OK ) - { - return error; - } - - *inputId = makeInputId( inConfig, inputIndex ); - - if ( ( error = activateInput( (uint8_t *) inputsArray + inputStructSize * inputIndex, inConfig, *inputId, hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_REND_AddInput_fx( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const AUDIO_CONFIG inConfig, /* i : audio config for a new input */ @@ -6523,7 +3441,6 @@ ivas_error IVAS_REND_AddInput_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -6532,7 +3449,6 @@ ivas_error IVAS_REND_AddInput_fx( * * Note: this will reset any custom LFE routing set for the input *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -6593,121 +3509,28 @@ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_CUSTOM_LS_DATA layout /* i : custom loudspeaker layout for input */ + +/*-------------------------------------------------------------------* + * IVAS_REND_SetInputGain() + * + * + *-------------------------------------------------------------------*/ +ivas_error IVAS_REND_SetInputGain_fx( + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + const IVAS_REND_InputId inputId, /* i : ID of the input */ + const Word32 gain /* i : linear gain (not in dB) Q30 */ ) { - input_mc *inputMc; + input_base *inputBase; ivas_error error; /* Validate function arguments */ - if ( hIvasRend == NULL ) + IF( hIvasRend == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } -#ifdef IVAS_FLOAT_FIXED - IF( ( error = validateCustomLsLayout_fx( layout ) ) != IVAS_ERR_OK ) - { - return error; - } -#else - if ( ( error = validateCustomLsLayout( layout ) ) != IVAS_ERR_OK ) - { - return error; - } -#endif - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &inputMc ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( inputMc->base.inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - /* Specifying details of custom speaker layout only makes sense if input config is set to custom speaker layout */ - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - - /* Re-initialize panning gains for the MC input, This includes re-initializing LFE handling - * for the new input layout, which means custom LFE handling is overwritten, if previously - * set for the MC input. */ - inputMc->customLsInput = makeCustomLsSetup( layout ); - - inputMc->lfeRouting = defaultLfeRouting( inputMc->base.inConfig, inputMc->customLsInput, hIvasRend->outputConfig, *inputMc->base.ctx.pCustomLsOut ); - - if ( ( error = initEfap( &inputMc->efapInWrapper, inputMc->base.inConfig, &inputMc->customLsInput ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL || hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) - { - if ( ( error = initMcBinauralRendering( inputMc, inputMc->base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, FALSE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = updateMcPanGains( inputMc, hIvasRend->outputConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif - -/*-------------------------------------------------------------------* - * IVAS_REND_SetInputGain() - * - * - *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_SetInputGain( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const float gain /* i : linear gain (not in dB) */ -) -{ - input_base *inputBase; - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ) != IVAS_ERR_OK ) - { - return error; - } - - inputBase->gain = gain; - - return IVAS_ERR_OK; -} -#else -ivas_error IVAS_REND_SetInputGain_fx( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const Word32 gain /* i : linear gain (not in dB) Q30 */ -) -{ - input_base *inputBase; - ivas_error error; - - /* Validate function arguments */ - IF( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - IF( NE_32( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ), IVAS_ERR_OK ) ) + IF( NE_32( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ), IVAS_ERR_OK ) ) { return error; } @@ -6717,57 +3540,12 @@ ivas_error IVAS_REND_SetInputGain_fx( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * IVAS_REND_SetInputLfeMtx() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_SetInputLfeMtx( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_REND_LfePanMtx *lfePanMtx /* i : LFE panning matrix */ -) -{ - int16_t i; - input_base *pInputBase; - input_mc *pInputMc; - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &pInputBase ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( getAudioConfigType( pInputBase->inConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - /* Custom LFE panning matrix only makes sense with channel-based input */ - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - pInputMc = (input_mc *) pInputBase; - - /* copy LFE panning matrix */ - for ( i = 0; i < RENDERER_MAX_INPUT_LFE_CHANNELS; i++ ) - { - mvr2r( ( *lfePanMtx )[i], pInputMc->lfeRouting.lfePanMtx[i], IVAS_MAX_OUTPUT_CHANNELS ); - } - - if ( ( error = updateMcPanGains( pInputMc, hIvasRend->outputConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_REND_SetInputLfeMtx_fx( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -6810,9 +3588,7 @@ ivas_error IVAS_REND_SetInputLfeMtx_fx( return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * IVAS_REND_SetInputLfePos() * @@ -6865,50 +3641,6 @@ ivas_error IVAS_REND_SetInputLfePos_fx( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetInputLfePos( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const float inputGain, /* i : Input gain to be applied to the LFE channel(s) */ - const float outputAzimuth, /* i : Output azimuth position */ - const float outputElevation /* i : Output elevation position */ -) -{ - input_base *pInputBase; - input_mc *pInputMc; - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &pInputBase ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( getAudioConfigType( pInputBase->inConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - /* Custom LFE routing only makes sense with channel-based input */ - return IVAS_ERR_INVALID_INPUT_FORMAT; - } - pInputMc = (input_mc *) pInputBase; - - pInputMc->lfeRouting.pan_lfe = true; - pInputMc->lfeRouting.lfeInputGain = inputGain; - pInputMc->lfeRouting.lfeOutputAzimuth = outputAzimuth; - pInputMc->lfeRouting.lfeOutputElevation = outputElevation; - - if ( ( error = updateMcPanGains( pInputMc, hIvasRend->outputConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * IVAS_REND_RemoveInput() @@ -6962,35 +3694,6 @@ ivas_error IVAS_REND_RemoveInput( * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetInputNumChannels( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - int16_t *numChannels /* o : number of channels of the input */ -) -{ - ivas_error error; - const input_base *pInput; - - /* Validate function arguments */ - if ( hIvasRend == NULL || numChannels == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getConstInputById( hIvasRend, inputId, (const void **) &pInput ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getRendInputNumChannels( pInput, numChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_REND_GetInputNumChannels( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -7019,32 +3722,12 @@ ivas_error IVAS_REND_GetInputNumChannels( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * IVAS_REND_GetNumAllObjects() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetNumAllObjects( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - int16_t *numChannels /* o : number of all objects */ -) -{ - if ( hIvasRend == NULL || numChannels == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_MASA1 || hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - *numChannels = (int16_t) hIvasRend->inputsIsm[0].total_num_objects; - } - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_REND_GetNumAllObjects( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ Word16 *numChannels /* o : number of all objects */ @@ -7065,84 +3748,12 @@ ivas_error IVAS_REND_GetNumAllObjects( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * IVAS_REND_GetDelay() * * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetDelay( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer state */ - int16_t *nSamples, /* o : Renderer delay in samples */ - int32_t *timeScale /* o : Time scale of the delay, equal to renderer output sampling rate */ -) -{ - /* TODO tmu : this function only returns the maximum delay across all inputs - * Ideally each input has its own delay buffer and everything is aligned (binaural and LFE filtering delays are nonuniform) - */ - int16_t i; - int32_t latency_ns; - int32_t max_latency_ns; - - /* Validate function arguments */ - if ( hIvasRend == NULL || nSamples == NULL || timeScale == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - *timeScale = hIvasRend->sampleRateOut; - *nSamples = 0; - max_latency_ns = 0; - - /* Compute the maximum delay across all inputs */ - for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; i++ ) - { - if ( hIvasRend->inputsIsm[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - latency_ns = max( ( hIvasRend->inputsIsm[i].crendWrapper != NULL ) ? hIvasRend->inputsIsm[i].crendWrapper->binaural_latency_ns : 0, - hIvasRend->inputsIsm[i].tdRendWrapper.binaural_latency_ns ); - max_latency_ns = max( max_latency_ns, latency_ns ); - } - } - - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; i++ ) - { - if ( hIvasRend->inputsMc[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - latency_ns = max( ( hIvasRend->inputsMc[i].crendWrapper != NULL ) ? hIvasRend->inputsMc[i].crendWrapper->binaural_latency_ns : 0, - hIvasRend->inputsMc[i].tdRendWrapper.binaural_latency_ns ); - max_latency_ns = max( max_latency_ns, latency_ns ); - } - } - - for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; i++ ) - { - if ( hIvasRend->inputsSba[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - { - latency_ns = ( hIvasRend->inputsSba[i].crendWrapper != NULL ) ? hIvasRend->inputsSba[i].crendWrapper->binaural_latency_ns : 0; - max_latency_ns = max( max_latency_ns, latency_ns ); - } - } - } - - - for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) - { - if ( hIvasRend->inputsMasa[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - latency_ns = (int32_t) ( (float) IVAS_FB_DEC_DELAY_NS + 0.5f ); - max_latency_ns = max( max_latency_ns, latency_ns ); - } - } - - *nSamples = (int16_t) roundf( (float) max_latency_ns * *timeScale / 1000000000.f ); - - return IVAS_ERR_OK; -} -#else ivas_error IVAS_REND_GetDelay_fx( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer state */ Word16 *nSamples, /* o : Renderer delay in samples */ @@ -7259,9 +3870,7 @@ ivas_error IVAS_REND_GetDelay_fx( return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * IVAS_REND_FeedInputAudio() * @@ -7337,160 +3946,46 @@ ivas_error IVAS_REND_FeedInputAudio_fx( return IVAS_ERR_OK; } -#else + /*-------------------------------------------------------------------* - * IVAS_REND_FeedInputAudio() + * IVAS_REND_FeedInputObjectMetadata() * * *-------------------------------------------------------------------*/ -ivas_error IVAS_REND_FeedInputAudio( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_REND_ReadOnlyAudioBuffer inputAudio /* i : buffer with input audio */ +ivas_error IVAS_REND_FeedInputObjectMetadata( + IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ + const IVAS_REND_InputId inputId, /* i : ID of the input */ + const IVAS_ISM_METADATA objectPosition /* i : object position struct */ ) { - ivas_error error; input_base *inputBase; - int16_t numInputChannels; + input_ism *inputIsm; + ivas_error error; /* Validate function arguments */ - test(); - IF( hIvasRend == NULL || inputAudio.data == NULL ) + IF( hIvasRend == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } - test(); - IF( inputAudio.config.numSamplesPerChannel <= 0 || LT_16( MAX_BUFFER_LENGTH_PER_CHANNEL, inputAudio.config.numSamplesPerChannel ) ) + IF( NE_32( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ), IVAS_ERR_OK ) ) { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Buffer size outside of supported range" ); + return error; } - test(); - IF( inputAudio.config.numChannels <= 0 || MAX_INPUT_CHANNELS < inputAudio.config.numChannels ) + IF( NE_32( inputBase->inConfig, IVAS_AUDIO_CONFIG_OBA ) ) { - return IVAS_ERR_WRONG_NUM_CHANNELS; + /* Object metadata should only be fed for object inputs */ + return IVAS_ERR_METADATA_NOT_EXPECTED; } - test(); - move32(); // move added for typecasting - IF( EQ_32( getAudioConfigType( hIvasRend->outputConfig ), IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) && - NE_32( L_mult0( inputAudio.config.numSamplesPerChannel, 1000 ), (Word32) W_mult0_32_32( L_mult0( BINAURAL_RENDERING_FRAME_SIZE_MS, hIvasRend->num_subframes ), hIvasRend->sampleRateOut ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Binaural rendering requires specific frame size" ); - } - - IF( NE_32( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( ( error = getRendInputNumChannels( inputBase, &numInputChannels ) ), IVAS_ERR_OK ) ) - { - return error; - } - - test(); - test(); - IF( ( EQ_32( hIvasRend->outputConfig, IVAS_AUDIO_CONFIG_MASA1 ) || EQ_32( hIvasRend->outputConfig, IVAS_AUDIO_CONFIG_MASA2 ) ) && EQ_32( inputBase->inConfig, IVAS_AUDIO_CONFIG_OBA ) ) - { - numInputChannels = (Word16) hIvasRend->inputsIsm[0].total_num_objects; - } - - IF( NE_16( numInputChannels, inputAudio.config.numChannels ) ) - { - return IVAS_ERR_WRONG_NUM_CHANNELS; - } - - inputBase->inputBuffer.config = inputAudio.config; -#ifdef IVAS_FLOAT_FIXED - MVR2R_WORD32( inputAudio.data_fx, inputBase->inputBuffer.data_fx, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); -#endif - mvr2r( inputAudio.data, inputBase->inputBuffer.data, inputAudio.config.numSamplesPerChannel * inputAudio.config.numChannels ); - - inputBase->numNewSamplesPerChannel = inputAudio.config.numSamplesPerChannel; - move32(); - - return IVAS_ERR_OK; -} -#endif - -/*-------------------------------------------------------------------* - * IVAS_REND_FeedInputObjectMetadata() - * - * - *-------------------------------------------------------------------*/ - -#ifdef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_FeedInputObjectMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -) -{ - input_base *inputBase; - input_ism *inputIsm; - ivas_error error; - - /* Validate function arguments */ - IF( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - IF( NE_32( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ), IVAS_ERR_OK ) ) - { - return error; - } - - IF( NE_32( inputBase->inConfig, IVAS_AUDIO_CONFIG_OBA ) ) - { - /* Object metadata should only be fed for object inputs */ - return IVAS_ERR_METADATA_NOT_EXPECTED; - } - - inputIsm = (input_ism *) inputBase; - inputIsm->previousPos = inputIsm->currentPos; - inputIsm->currentPos = objectPosition; - - return IVAS_ERR_OK; -} -#else -ivas_error IVAS_REND_FeedInputObjectMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -) -{ - input_base *inputBase; - input_ism *inputIsm; - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( inputBase->inConfig != IVAS_AUDIO_CONFIG_OBA ) - { - /* Object metadata should only be fed for object inputs */ - return IVAS_ERR_METADATA_NOT_EXPECTED; - } - - inputIsm = (input_ism *) inputBase; - inputIsm->previousPos = inputIsm->currentPos; - inputIsm->currentPos = objectPosition; + inputIsm = (input_ism *) inputBase; + inputIsm->previousPos = inputIsm->currentPos; + inputIsm->currentPos = objectPosition; return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* @@ -7498,7 +3993,6 @@ ivas_error IVAS_REND_FeedInputObjectMetadata( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const Word16 inputIndex, /* i : Index of the input */ @@ -7519,31 +4013,6 @@ ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const int16_t inputIndex, /* i : Index of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -) -{ - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Set position to OMasa struct */ -#ifdef IVAS_FLOAT_FIXED - hIvasRend->inputsIsm->hOMasa->ism_azimuth_fx[inputIndex] = floatToFixed( objectPosition.azimuth, Q22 ); - hIvasRend->inputsIsm->hOMasa->ism_elevation_fx[inputIndex] = floatToFixed( objectPosition.elevation, Q22 ); -#else - hIvasRend->inputsIsm->hOMasa->ism_azimuth[inputIndex] = objectPosition.azimuth; - hIvasRend->inputsIsm->hOMasa->ism_elevation[inputIndex] = objectPosition.elevation; -#endif - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * IVAS_REND_FeedInputMasaMetadata() @@ -7551,7 +4020,6 @@ ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_FeedInputMasaMetadata( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -7586,41 +4054,6 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_FeedInputMasaMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - IVAS_MASA_METADATA_HANDLE masaMetadata /* i : MASA metadata frame */ -) -{ - ivas_error error; - input_base *inputBase; - input_masa *inputMasa; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = getInputById( hIvasRend, inputId, (void **) &inputBase ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( getAudioConfigType( inputBase->inConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - /* MASA metadata should only be fed for MASA inputs */ - return IVAS_ERR_METADATA_NOT_EXPECTED; - } - - inputMasa = (input_masa *) inputBase; - inputMasa->masaMetadata = *masaMetadata; - inputMasa->metadataHasBeenFed = true; - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* @@ -7628,7 +4061,6 @@ ivas_error IVAS_REND_FeedInputMasaMetadata( * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_InitConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ @@ -7668,127 +4100,7 @@ ivas_error IVAS_REND_InitConfig( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_InitConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ -) -{ - ivas_error error; - bool rendererConfigEnabled; - - rendererConfigEnabled = ( getAudioConfigType( outAudioConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ); - - if ( rendererConfigEnabled ) - { - hIvasRend->rendererConfigEnabled = 1; - } - else - { - hIvasRend->rendererConfigEnabled = 0; - } - - if ( rendererConfigEnabled ) - { - if ( ( error = ivas_render_config_open( &( hIvasRend->hRendererConfig ) ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = ivas_render_config_init_from_rom( &hIvasRend->hRendererConfig ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - hIvasRend->hRendererConfig = NULL; - } - - return IVAS_ERR_OK; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -/*-------------------------------------------------------------------* - * IVAS_REND_GetRenderConfig() - * - * - *-------------------------------------------------------------------*/ - -int16_t IVAS_REND_GetRenderConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ -) -{ - RENDER_CONFIG_HANDLE hRCin; - - if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL || hRCout == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hRCin = hIvasRend->hRendererConfig; - hRCout->roomAcoustics.override = hRCin->roomAcoustics.override; - hRCout->roomAcoustics.nBands = hRCin->roomAcoustics.nBands; - hRCout->roomAcoustics.acousticPreDelay = hRCin->roomAcoustics.acousticPreDelay; - hRCout->roomAcoustics.inputPreDelay = hRCin->roomAcoustics.inputPreDelay; - mvr2r( hRCin->directivity, hRCout->directivity, 3 * MAX_NUM_OBJECTS ); - - mvr2r( hRCin->roomAcoustics.pFc_input, hRCout->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); - mvr2r( hRCin->roomAcoustics.pAcoustic_rt60, hRCout->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); - mvr2r( hRCin->roomAcoustics.pAcoustic_dsr, hRCout->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); - - - hRCout->roomAcoustics.use_er = hRCin->roomAcoustics.use_er; - hRCout->roomAcoustics.lowComplexity = hRCin->roomAcoustics.lowComplexity; - - return IVAS_ERR_OK; -} - - -/*-------------------------------------------------------------------* - * IVAS_REND_FeedRenderConfig() - * - * - *-------------------------------------------------------------------*/ - -int16_t IVAS_REND_FeedRenderConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ -) -{ - RENDER_CONFIG_HANDLE hRenderConfig; - - if ( hIvasRend == NULL || hIvasRend->hRendererConfig == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - hRenderConfig = hIvasRend->hRendererConfig; - - hRenderConfig->roomAcoustics.override = renderConfig.roomAcoustics.override; - hRenderConfig->roomAcoustics.nBands = renderConfig.roomAcoustics.nBands; - hRenderConfig->roomAcoustics.acousticPreDelay = renderConfig.roomAcoustics.acousticPreDelay; - hRenderConfig->roomAcoustics.inputPreDelay = renderConfig.roomAcoustics.inputPreDelay; - mvr2r( renderConfig.roomAcoustics.pFc_input, hRenderConfig->roomAcoustics.pFc_input, CLDFB_NO_CHANNELS_MAX ); - mvr2r( renderConfig.roomAcoustics.pAcoustic_rt60, hRenderConfig->roomAcoustics.pAcoustic_rt60, CLDFB_NO_CHANNELS_MAX ); - mvr2r( renderConfig.roomAcoustics.pAcoustic_dsr, hRenderConfig->roomAcoustics.pAcoustic_dsr, CLDFB_NO_CHANNELS_MAX ); - mvr2r( renderConfig.directivity, hRenderConfig->directivity, 3 * MAX_NUM_OBJECTS ); - - hRenderConfig->roomAcoustics.use_er = 0; - if ( renderConfig.roomAcoustics.use_er == 1 ) - { - hRenderConfig->roomAcoustics.use_er = renderConfig.roomAcoustics.use_er; - hRenderConfig->roomAcoustics.lowComplexity = renderConfig.roomAcoustics.lowComplexity; - hRenderConfig->roomAcoustics.dimensions = renderConfig.roomAcoustics.dimensions; - hRenderConfig->roomAcoustics.ListenerOrigin = renderConfig.roomAcoustics.ListenerOrigin; - - mvr2r( renderConfig.roomAcoustics.AbsCoeff, hRenderConfig->roomAcoustics.AbsCoeff, IVAS_ROOM_ABS_COEFF ); - } - - return IVAS_ERR_OK; -} -#else /*-------------------------------------------------------------------* * IVAS_REND_GetRenderConfig() * @@ -7884,14 +4196,12 @@ Word16 IVAS_REND_FeedRenderConfig( return IVAS_ERR_OK; } -#endif /*-------------------------------------------------------------------* * IVAS_REND_SetHeadRotation() * * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetHeadRotation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_QUATERNION headRot, /* i : head orientations for next rendering call */ @@ -7985,81 +4295,21 @@ ivas_error IVAS_REND_SetHeadRotation( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetHeadRotation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_QUATERNION headRot, /* i : head orientations for next rendering call */ - const IVAS_VECTOR3 Pos, /* i : listener positions for next rendering call */ - const int16_t sf_idx /* i : subframe index */ + +/*-------------------------------------------------------------------* + * IVAS_REND_DisableHeadRotation() + * + * + *-------------------------------------------------------------------*/ +ivas_error IVAS_REND_DisableHeadRotation( + IVAS_REND_HANDLE hIvasRend /* i/o: Renderer handle */ ) { - int16_t i; - IVAS_QUATERNION rotQuat; + Word16 i; ivas_error error; /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( getAudioConfigType( hIvasRend->outputConfig ) != IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) - { - /* Head rotation can be set only with binaural output */ - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - - hIvasRend->headRotData.headRotEnabled = 1; - - /* reconfigure binaural rendering to allocate the necessary renderers and free unused ones */ - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - if ( hIvasRend->inputsMc[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i], hIvasRend->inputsMc[i].base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, TRUE ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* check for Euler angle signaling */ - if ( headRot.w == -3.0f ) - { - Euler2Quat( deg2rad( headRot.x ), deg2rad( headRot.y ), deg2rad( headRot.z ), &rotQuat ); - } - else - { - rotQuat = headRot; - } - - if ( ( error = ivas_orient_trk_Process( hIvasRend->headRotData.hOrientationTracker, rotQuat, FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES, &hIvasRend->headRotData.headPositions[sf_idx] ) ) != IVAS_ERR_OK ) - { - return error; - } - - hIvasRend->headRotData.Pos[sf_idx] = Pos; - - - return IVAS_ERR_OK; -} -#endif - -/*-------------------------------------------------------------------* - * IVAS_REND_DisableHeadRotation() - * - * - *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_DisableHeadRotation( - IVAS_REND_HANDLE hIvasRend /* i/o: Renderer handle */ -) -{ - Word16 i; - ivas_error error; - - /* Validate function arguments */ - IF( hIvasRend == NULL ) + IF( hIvasRend == NULL ) { return IVAS_ERR_UNEXPECTED_NULL_POINTER; } @@ -8085,41 +4335,6 @@ ivas_error IVAS_REND_DisableHeadRotation( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_DisableHeadRotation( - IVAS_REND_HANDLE hIvasRend /* i/o: Renderer handle */ -) -{ - int16_t i; - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hIvasRend->headRotData.headRotEnabled = 0; - - /* reconfigure binaural rendering to allocate the necessary renderers and free unused ones */ - if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL ) - { - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - if ( hIvasRend->inputsMc[i].base.inConfig != IVAS_AUDIO_CONFIG_INVALID ) - { - if ( ( error = initMcBinauralRendering( &hIvasRend->inputsMc[i], hIvasRend->inputsMc[i].base.inConfig, hIvasRend->outputConfig, hIvasRend->hRendererConfig, TRUE ) ) != IVAS_ERR_OK ) - { - - return error; - } - } - } - } - - return IVAS_ERR_OK; -} -#endif /*-------------------------------------------------------------------* * IVAS_REND_SetOrientationTrackingMode() @@ -8127,7 +4342,6 @@ ivas_error IVAS_REND_DisableHeadRotation( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetOrientationTrackingMode( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_HEAD_ORIENT_TRK_T orientation_tracking /* i : Head orientation tracking type */ @@ -8135,15 +4349,6 @@ ivas_error IVAS_REND_SetOrientationTrackingMode( { return ivas_orient_trk_SetTrackingType_fx( hIvasRend->headRotData.hOrientationTracker, orientation_tracking ); } -#else -ivas_error IVAS_REND_SetOrientationTrackingMode( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_HEAD_ORIENT_TRK_T orientation_tracking /* i : Head orientation tracking type */ -) -{ - return ivas_orient_trk_SetTrackingType( hIvasRend->headRotData.hOrientationTracker, orientation_tracking ); -} -#endif /*-------------------------------------------------------------------* @@ -8152,7 +4357,6 @@ ivas_error IVAS_REND_SetOrientationTrackingMode( * *-------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetReferenceRotation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_QUATERNION refRot /* i : Reference rotation */ @@ -8175,29 +4379,6 @@ ivas_error IVAS_REND_SetReferenceRotation( } return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetReferenceRotation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_QUATERNION refRot /* i : Reference rotation */ -) -{ - ivas_error error; - - /* Validate function arguments */ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = ivas_orient_trk_SetReferenceRotation( hIvasRend->headRotData.hOrientationTracker, refRot ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} - -#endif /*-------------------------------------------------------------------* @@ -8206,28 +4387,6 @@ ivas_error IVAS_REND_SetReferenceRotation( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetMainOrientation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_QUATERNION *pOrientation /* i/o: Quaternion pointer for main orientation */ -) -{ - ivas_error error; - - if ( hIvasRend == NULL || pOrientation == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = ivas_orient_trk_GetMainOrientation( hIvasRend->headRotData.hOrientationTracker, pOrientation ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif - /*-------------------------------------------------------------------* * IVAS_REND_GetTrackedRotation() @@ -8235,27 +4394,6 @@ ivas_error IVAS_REND_GetMainOrientation( * *-------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetTrackedRotation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_QUATERNION *pRotation /* i/o: Quaternion pointer processed rotation */ -) -{ - ivas_error error; - - if ( hIvasRend == NULL || pRotation == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( ( error = ivas_orient_trk_GetTrackedRotation( hIvasRend->headRotData.hOrientationTracker, pRotation ) ) != IVAS_ERR_OK ) - { - return error; - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IVAS_REND_SetReferenceVector( ) @@ -8264,7 +4402,6 @@ ivas_error IVAS_REND_GetTrackedRotation( * available in OTR_TRACKING_REF_VEC and OTR_TRACKING_REF_VEC_LEV modes. *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetReferenceVector( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_VECTOR3 listenerPos, /* i : Listener position */ @@ -8279,21 +4416,6 @@ ivas_error IVAS_REND_SetReferenceVector( return ivas_orient_trk_SetReferenceVector_fx( hIvasRend->headRotData.hOrientationTracker, listenerPos, refPos ); } -#else -ivas_error IVAS_REND_SetReferenceVector( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_VECTOR3 listenerPos, /* i : Listener position */ - const IVAS_VECTOR3 refPos /* i : Reference position */ -) -{ - if ( hIvasRend == NULL || hIvasRend->headRotData.hOrientationTracker == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - return ivas_orient_trk_SetReferenceVector( hIvasRend->headRotData.hOrientationTracker, listenerPos, refPos ); -} -#endif /*---------------------------------------------------------------------* * IVAS_REND_SetExternalOrientation() @@ -8301,7 +4423,6 @@ ivas_error IVAS_REND_SetReferenceVector( * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetExternalOrientation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ IVAS_QUATERNION *orientation, /* i : external orientation data */ @@ -8340,40 +4461,6 @@ ivas_error IVAS_REND_SetExternalOrientation( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetExternalOrientation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_QUATERNION *orientation, /* i : external orientation data */ - int8_t enableHeadRotation, /* i : flag to enable head rotation for this frame */ - int8_t enableExternalOrientation, /* i : flag to enable external orientation for this frame */ - int8_t enableRotationInterpolation, /* i : flag to interpolate rotations from current and previous frames */ - int16_t numFramesToTargetOrientation, /* i : number of frames until target orientation is reached */ - const int16_t sf_idx /* i : subframe index */ -) -{ - /* Validate function arguments */ - if ( hIvasRend == NULL || hIvasRend->hExternalOrientationData == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( orientation == NULL ) - { - hIvasRend->hExternalOrientationData->enableExternalOrientation[sf_idx] = 0; - } - else - { - QuaternionInverse( *orientation, &hIvasRend->hExternalOrientationData->Quaternions[sf_idx] ); - - hIvasRend->hExternalOrientationData->enableHeadRotation[sf_idx] = enableHeadRotation; - hIvasRend->hExternalOrientationData->enableExternalOrientation[sf_idx] = enableExternalOrientation; - hIvasRend->hExternalOrientationData->enableRotationInterpolation[sf_idx] = enableRotationInterpolation; - hIvasRend->hExternalOrientationData->numFramesToTargetOrientation[sf_idx] = numFramesToTargetOrientation; - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IVAS_REND_CombineHeadAndExternalOrientation() @@ -8400,31 +4487,6 @@ ivas_error IVAS_REND_CombineHeadAndExternalOrientation( * *---------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error IVAS_REND_GetCombinedOrientation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_QUATERNION *pOrientation /* i/o: Quaternion pointer processed orientation */ -) -{ - int16_t i; - - if ( hIvasRend == NULL || pOrientation == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( hIvasRend->hCombinedOrientationData != NULL ) - { - for ( i = 0; i < hIvasRend->hCombinedOrientationData->num_subframes; ++i ) - { - pOrientation[i] = hIvasRend->hCombinedOrientationData->Quaternions[i]; - } - } - - return IVAS_ERR_OK; -} -#endif - /*-------------------------------------------------------------------* * Local functions @@ -8434,75 +4496,6 @@ ivas_error IVAS_REND_GetCombinedOrientation( This function takes 2 gain vectors - one for the beginning and one for the end of the buffer. Gain values are lineraly interpolated for all samples in between. */ -#ifndef IVAS_FLOAT_FIXED -static void renderBufferChannelLerp( - const IVAS_REND_AudioBuffer inAudio, - const int32_t inChannelIdx, - const float *const gainsCurrent, - const float *const gainsPrev, - IVAS_REND_AudioBuffer outAudio ) -{ - const float *inSmpl; - float *outSmpl; - float fadeIn; - float fadeOut; - int32_t i; - const float *lastInSmpl; - int16_t outChnlIdx; - float currentGain; - float previousGain; - - /* Pointer to behind last input sample */ - lastInSmpl = getSmplPtr( inAudio, inChannelIdx, inAudio.config.numSamplesPerChannel ); - - for ( outChnlIdx = 0; outChnlIdx < outAudio.config.numChannels; ++outChnlIdx ) - { - currentGain = gainsCurrent[outChnlIdx]; - previousGain = gainsPrev == NULL ? 0.f : gainsPrev[outChnlIdx]; - - /* Process current output channel only if applying non-zero gains */ - if ( fabsf( currentGain ) > EPSILON || ( gainsPrev != NULL && fabsf( previousGain ) > EPSILON ) ) - { - /* Reset input pointer to the beginning of input channel */ - inSmpl = getSmplPtr( inAudio, inChannelIdx, 0 ); - - /* Set output pointer to first output channel sample */ - outSmpl = getSmplPtr( outAudio, outChnlIdx, 0 ); - - if ( gainsPrev == NULL || fabsf( previousGain - currentGain ) <= EPSILON ) - { - /* If no interpolation from previous frame, apply current gain */ - do - { - *outSmpl += currentGain * ( *inSmpl ); - ++outSmpl; - ++inSmpl; - - } while ( inSmpl != lastInSmpl ); - } - else - { - i = 0; - - /* Otherwise use weighted average between previous and current gain */ - do - { - fadeIn = (float) i / ( outAudio.config.numSamplesPerChannel - 1 ); - fadeOut = 1.0f - fadeIn; - - *outSmpl += ( fadeIn * currentGain + fadeOut * previousGain ) * ( *inSmpl ); - ++outSmpl; - ++inSmpl; - ++i; - } while ( inSmpl != lastInSmpl ); - } - } - } - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED /* Take one channel from input buffer and copy it to each channel in output buffer, with different gain applied per output channel. This function takes 2 gain vectors - one for the beginning and one @@ -8629,8 +4622,6 @@ static void renderBufferChannelLerp_fx( return; } -#endif -#ifdef IVAS_FLOAT_FIXED /* Take one channel from input buffer and copy it to each channel in output buffer, with different gain applied per output channel */ static void renderBufferChannel_fx( @@ -8643,32 +4634,7 @@ static void renderBufferChannel_fx( return; } -#else - -/* Take one channel from input buffer and copy it to each channel - in output buffer, with different gain applied per output channel */ -static void renderBufferChannel( - const IVAS_REND_AudioBuffer inAudio, - const int32_t inChannelIdx, - const float *const outputGains, - IVAS_REND_AudioBuffer outAudio ) -{ - renderBufferChannelLerp( inAudio, inChannelIdx, outputGains, NULL, outAudio ); - - return; -} -#endif - -#ifndef IVAS_FLOAT_FIXED -static ivas_error chooseCrossfade( - const IVAS_REND_HeadRotData *headRotData, - const float **pCrossfade ) -{ - *pCrossfade = headRotData->crossfade; - return IVAS_ERR_OK; -} -#else static ivas_error chooseCrossfade_fx( const IVAS_REND_HeadRotData *headRotData, const Word32 **pCrossfade /* Q31 */ ) @@ -8677,10 +4643,8 @@ static ivas_error chooseCrossfade_fx( return IVAS_ERR_OK; } -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error rotateFrameMc_fx( IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ AUDIO_CONFIG inConfig, /* i : Input Audio config */ @@ -8862,160 +4826,15 @@ static ivas_error rotateFrameMc_fx( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error rotateFrameMc( - IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ - AUDIO_CONFIG inConfig, /* i : Input Audio config */ - const LSSETUP_CUSTOM_STRUCT *pInCustomLs, /* i : Input Custom LS setup */ - const IVAS_REND_HeadRotData *headRotData, /* i : Head rotation data */ + + +static ivas_error rotateFrameSba_fx( + IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ + const AUDIO_CONFIG inConfig, /* i : Input Audio config */ + const IVAS_REND_HeadRotData *headRotData, /* i : Head rotation data */ const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* i : Combined head and external orientations */ - rotation_gains gains_prev, /* i/o: Previous frame rotation gains */ - const EFAP_HANDLE hEFAPdata, /* i : EFAP structure */ - IVAS_REND_AudioBuffer outAudio /* o : Output Audio buffer */ -) -{ - int16_t i; - int16_t j; - const float *crossfade; - int16_t num_subframes; - int16_t subframe_idx, subframe_len; - int16_t azimuth, elevation; - int16_t is_planar_setup, lfe_idx; - int16_t nchan; - int16_t ch_in, ch_out; - int16_t ch_in_woLFE, ch_out_woLFE; - float *readPtr, *writePtr; - const float *ls_azimuth, *ls_elevation; - rotation_matrix Rmat; - rotation_gains gains; - float tmp_gains[MAX_INPUT_CHANNELS]; - ivas_error error; - push_wmops( "rotateFrameMc" ); - if ( ( error = chooseCrossfade( headRotData, &crossfade ) ) != IVAS_ERR_OK ) - { - return error; - } - num_subframes = ( hCombinedOrientationData != NULL ) ? ( *hCombinedOrientationData )->num_subframes : MAX_PARAM_SPATIAL_SUBFRAMES; - - if ( inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - if ( ( error = getAudioConfigNumChannels( inConfig, &nchan ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - nchan = pInCustomLs->num_spk + pInCustomLs->num_lfe; - } - - if ( ( error = getMcConfigValues( inConfig, pInCustomLs, &ls_azimuth, &ls_elevation, &lfe_idx, &is_planar_setup ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* initialize gains to passthrough */ - for ( ch_in = 0; ch_in < nchan; ch_in++ ) - { - set_zero( gains[ch_in], nchan ); - gains[ch_in][ch_in] = 1.f; - } - - /* subframe loop */ - - subframe_len = inAudio.config.numSamplesPerChannel / num_subframes; - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - for ( i = 0; i < 3; i++ ) - { - if ( hCombinedOrientationData != NULL ) - { - for ( j = 0; j < 3; j++ ) - { - Rmat[i][j] = ( *hCombinedOrientationData )->Rmat[subframe_idx][i][j]; - } - } - else - { - /* Set to identity */ - set_zero( Rmat[i], 3 ); - Rmat[i][i] = 1.0f; - } - } - - for ( ch_in = 0; ch_in < nchan; ch_in++ ) - { - /* skip LFE */ - if ( ch_in == lfe_idx ) - { - continue; - } - - /* input channel index without LFE */ - ch_in_woLFE = ( ( lfe_idx > 0 ) && ( ch_in >= lfe_idx ) ) ? ch_in - 1 : ch_in; - - /* gains for current subframe rotation */ - rotateAziEle( ls_azimuth[ch_in_woLFE], ls_elevation[ch_in_woLFE], &azimuth, &elevation, Rmat, is_planar_setup ); - - if ( hEFAPdata != NULL && ( ls_azimuth[ch_in_woLFE] != azimuth || ls_elevation[ch_in_woLFE] != elevation ) ) - { - efap_determine_gains( hEFAPdata, tmp_gains, azimuth, elevation, EFAP_MODE_EFAP ); - - for ( ch_out = 0; ch_out < nchan; ch_out++ ) - { - /* skip LFE */ - if ( ch_out == lfe_idx ) - { - continue; - } - - /* output channel index without LFE */ - ch_out_woLFE = ( ( lfe_idx > 0 ) && ( ch_out >= lfe_idx ) ) ? ch_out - 1 : ch_out; - - gains[ch_in][ch_out] = tmp_gains[ch_out_woLFE]; - } - } - } - - /* apply panning gains by mtx multiplication */ - for ( ch_out = 0; ch_out < nchan; ch_out++ ) - { - for ( ch_in = 0; ch_in < nchan; ch_in++ ) - { - writePtr = getSmplPtr( outAudio, ch_out, subframe_idx * subframe_len ); - readPtr = getSmplPtr( inAudio, ch_in, subframe_idx * subframe_len ); - /* crossfade with previous rotation gains */ - for ( i = 0; i < subframe_len; i++ ) - { - *writePtr++ += - ( *readPtr ) * ( ( 1 - crossfade[i] ) * gains_prev[ch_in][ch_out] ) + - ( *readPtr ) * ( crossfade[i] * gains[ch_in][ch_out] ); - readPtr++; - } - } - } - - /* move gains to gains_prev */ - for ( i = 0; i < nchan; i++ ) - { - mvr2r( gains[i], gains_prev[i], nchan ); - } - } - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif - - -#ifdef IVAS_FLOAT_FIXED -static ivas_error rotateFrameSba_fx( - IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ - const AUDIO_CONFIG inConfig, /* i : Input Audio config */ - const IVAS_REND_HeadRotData *headRotData, /* i : Head rotation data */ - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* i : Combined head and external orientations */ - Word16 gains_prev[MAX_INPUT_CHANNELS][MAX_INPUT_CHANNELS], /* i/o: Previous frame rotation gains Q14 */ - IVAS_REND_AudioBuffer outAudio /* o : Output Audio buffer */ + Word16 gains_prev[MAX_INPUT_CHANNELS][MAX_INPUT_CHANNELS], /* i/o: Previous frame rotation gains Q14 */ + IVAS_REND_AudioBuffer outAudio /* o : Output Audio buffer */ ) { Word16 i, l, n, m; @@ -9139,124 +4958,7 @@ static ivas_error rotateFrameSba_fx( return IVAS_ERR_OK; } -#else -static ivas_error rotateFrameSba( - IVAS_REND_AudioBuffer inAudio, /* i : Input Audio buffer */ - const AUDIO_CONFIG inConfig, /* i : Input Audio config */ - const IVAS_REND_HeadRotData *headRotData, /* i : Head rotation data */ - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData, /* i : Combined head and external orientations */ - rotation_gains gains_prev, /* i/o: Previous frame rotation gains */ - IVAS_REND_AudioBuffer outAudio /* o : Output Audio buffer */ -) -{ - int16_t i, l, n, m; - int16_t m1, m2; - int16_t shd_rot_max_order; - const float *crossfade; - int16_t num_subframes; - int16_t subframe_idx, subframe_len; - - float *writePtr; - rotation_matrix Rmat; - float tmpRot[2 * HEADROT_ORDER + 1]; - rotation_gains gains; - ivas_error error; - int16_t idx; - float val, cf, oneminuscf; - - push_wmops( "rotateFrameSba" ); - - if ( ( error = chooseCrossfade( headRotData, &crossfade ) ) != IVAS_ERR_OK ) - { - return error; - } - num_subframes = ( hCombinedOrientationData != NULL ) ? ( *hCombinedOrientationData )->num_subframes : MAX_PARAM_SPATIAL_SUBFRAMES; - - if ( ( error = getAmbisonicsOrder( inConfig, &shd_rot_max_order ) ) != IVAS_ERR_OK ) - { - return error; - } - - subframe_len = inAudio.config.numSamplesPerChannel / num_subframes; - for ( subframe_idx = 0; subframe_idx < num_subframes; subframe_idx++ ) - { - /* initialize rotation matrices with zeros */ - for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) - { - set_zero( gains[i], HEADROT_SHMAT_DIM ); - } - - for ( i = 0; i < 3; i++ ) - { - if ( hCombinedOrientationData != NULL ) - { - for ( l = 0; l < 3; l++ ) - { - Rmat[i][l] = ( *hCombinedOrientationData )->Rmat[subframe_idx][i][l]; - } - } - else - { - /* Set to identity */ - set_zero( Rmat[i], 3 ); - Rmat[i][i] = 1.0f; - } - } - - /* calculate ambisonics rotation matrices for the previous and current frames */ - SHrotmatgen( gains, Rmat, shd_rot_max_order ); - - for ( i = 0; i < subframe_len; i++ ) - { - idx = subframe_idx * subframe_len + i; - cf = crossfade[i]; - oneminuscf = 1 - cf; - /* As the rotation matrix becomes block diagonal in a SH basis, we can*/ - /* apply each angular-momentum block individually to save complexity. */ - - /* loop over l blocks */ - m1 = 1; - m2 = 4; - for ( l = 1; l <= shd_rot_max_order; l++ ) - { - /* compute mtx-vector product for this l */ - for ( n = m1; n < m2; n++ ) - { - tmpRot[n - m1] = 0.f; - - for ( m = m1; m < m2; m++ ) - { - val = inAudio.data[m * inAudio.config.numSamplesPerChannel + idx]; - /* crossfade with previous rotation gains */ - tmpRot[n - m1] += ( cf * gains[n][m] * val + oneminuscf * gains_prev[n][m] * val ); - } - } - /* write back the result */ - for ( n = m1; n < m2; n++ ) - { - writePtr = getSmplPtr( outAudio, n, idx ); - ( *writePtr ) = tmpRot[n - m1]; - } - m1 = m2; - m2 += 2 * ( l + 1 ) + 1; - } - } - - /* move SHrotmat to SHrotmat_prev */ - for ( i = 0; i < HEADROT_SHMAT_DIM; i++ ) - { - mvr2r( gains[i], gains_prev[i], HEADROT_SHMAT_DIM ); - } - } - - pop_wmops(); - - return IVAS_ERR_OK; -} - -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderIsmToBinaural( input_ism *ismInput, IVAS_REND_AudioBuffer outAudio ) @@ -9306,42 +5008,7 @@ static ivas_error renderIsmToBinaural( return IVAS_ERR_OK; } -#else -static ivas_error renderIsmToBinaural( - input_ism *ismInput, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpTDRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; - int16_t ism_md_subframe_update_ext; - - push_wmops( "renderIsmToBinaural" ); - /* Metadata Delay to sync with audio delay converted from ms to 5ms (1000/50/4) subframe index */ - ism_md_subframe_update_ext = (int16_t) roundf( ismInput->ism_metadata_delay_ms / ( 1000 / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ) ); - copyBufferTo2dArray( ismInput->base.inputBuffer, tmpTDRendBuffer ); -#ifdef IVAS_FLOAT_FIXED - ismInput->currentPos.azimuth_fx = float_to_fix( ismInput->currentPos.azimuth, Q22 ); - ismInput->currentPos.elevation_fx = float_to_fix( ismInput->currentPos.elevation, Q22 ); - ismInput->currentPos.spread_fx = float_to_fix( ismInput->currentPos.spread, Q22 ); - ismInput->currentPos.yaw_fx = float_to_fix( ismInput->currentPos.yaw, Q22 ); - ismInput->currentPos.pitch_fx = float_to_fix( ismInput->currentPos.pitch, Q22 ); - ismInput->currentPos.radius_fx = float_to_fix( ismInput->currentPos.radius, Q9 ); -#endif - if ( ( error = ivas_td_binaural_renderer_ext( &ismInput->tdRendWrapper, ismInput->base.inConfig, NULL, ismInput->base.ctx.pCombinedOrientationData, &ismInput->currentPos, ismInput->hReverb, ism_md_subframe_update_ext, - *ismInput->base.ctx.pOutSampleRate, outAudio.config.numSamplesPerChannel, tmpTDRendBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - accumulate2dArrayToBuffer( tmpTDRendBuffer, &outAudio ); - - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static Word16 getNumSubframesInBuffer( const IVAS_REND_AudioBuffer *buffer, const Word32 sampleRate ) @@ -9351,19 +5018,8 @@ static Word16 getNumSubframesInBuffer( temp = shr( temp, sub( 15, scale ) ); /* Q0 */ return temp; } -#else -static int16_t getNumSubframesInBuffer( - const IVAS_REND_AudioBuffer *buffer, - const int32_t sampleRate ) -{ - - - return (int16_t) ( buffer->config.numSamplesPerChannel / ( sampleRate / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ) ); -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderIsmToBinauralRoom( input_ism *ismInput, IVAS_REND_AudioBuffer outAudio, @@ -9574,246 +5230,54 @@ static ivas_error renderIsmToBinauralRoom( return IVAS_ERR_OK; } -#else -static ivas_error renderIsmToBinauralRoom( +static ivas_error renderIsmToBinauralReverb( input_ism *ismInput, IVAS_REND_AudioBuffer outAudio ) { - int16_t position_changed; - int16_t i, j; - int16_t azi_rot, ele_rot; - int16_t subframe_idx; - int16_t tmp; - rotation_matrix Rmat; - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + Word32 tmpRendBuffer_fx[MAX_OUTPUT_CHANNELS][L_FRAME48k]; ivas_error error; - pan_vector currentPanGains; - IVAS_REND_AudioBuffer tmpMcBuffer; - IVAS_ISM_METADATA rotatedPosPrev; - IVAS_ISM_METADATA rotatedPos; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - float *p_tmpRendBuffer[MAX_OUTPUT_CHANNELS]; - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - p_tmpRendBuffer[i] = tmpRendBuffer[i]; - } + Word16 ism_md_subframe_update_ext, i; + Word16 exp = *outAudio.pq_fact; + move16(); push_wmops( "renderIsmToBinauralRoom" ); - rotatedPosPrev = defaultObjectPosition(); - rotatedPos = defaultObjectPosition(); - - hCombinedOrientationData = ismInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - if ( combinedOrientationEnabled ) - { - for ( subframe_idx = 0; subframe_idx < 1; subframe_idx++ ) - { - for ( i = 0; i < 3; i++ ) - { - if ( hCombinedOrientationData != NULL && ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] ) - { - for ( j = 0; j < 3; j++ ) - { - Rmat[i][j] = ( *hCombinedOrientationData )->Rmat[subframe_idx][i][j]; - } - } - else - { - /* Set to identity */ - set_zero( Rmat[i], 3 ); - Rmat[i][i] = 1.0f; - } - } - } - } + /* Metadata Delay to sync with audio delay converted from ms to 5ms (1000/50/4) subframe index */ + ism_md_subframe_update_ext = extract_l( Mpy_32_32( ismInput->ism_metadata_delay_ms_fx, 429496730 /* 1000 / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES in Q31 */ ) ); + copyBufferTo2dArray_fx( ismInput->base.inputBuffer, tmpRendBuffer_fx ); - /* get previous position */ - if ( combinedOrientationEnabled ) - { - rotateAziEle( ismInput->previousPos.azimuth, ismInput->previousPos.elevation, &azi_rot, &ele_rot, ismInput->rot_mat_prev, 0 ); - rotatedPosPrev.azimuth = (float) azi_rot; - rotatedPosPrev.elevation = (float) ele_rot; - } - else + FOR( i = 0; i < MAX_OUTPUT_CHANNELS; ++i ) { - rotatedPosPrev.azimuth = ismInput->previousPos.azimuth; - rotatedPosPrev.elevation = ismInput->previousPos.elevation; + Scale_sig32( tmpRendBuffer_fx[i], L_FRAME48k, sub( Q11, exp ) ); /* Q11 */ } - /* get current position */ - if ( combinedOrientationEnabled ) - { - rotateAziEle( ismInput->currentPos.azimuth, ismInput->currentPos.elevation, &azi_rot, &ele_rot, Rmat, 0 ); - rotatedPos.azimuth = (float) azi_rot; - rotatedPos.elevation = (float) ele_rot; - } - else + IF( NE_32( ( error = ivas_td_binaural_renderer_ext_fx( &ismInput->tdRendWrapper, ismInput->base.inConfig, NULL, ismInput->base.ctx.pCombinedOrientationData, &ismInput->currentPos, ismInput->hReverb, ism_md_subframe_update_ext, *ismInput->base.ctx.pOutSampleRate, outAudio.config.numSamplesPerChannel, tmpRendBuffer_fx, &exp ) ), IVAS_ERR_OK ) ) { - rotatedPos.azimuth = ismInput->currentPos.azimuth; - rotatedPos.elevation = ismInput->currentPos.elevation; + return error; } - position_changed = !ismInput->firstFrameRendered || checkObjectPositionChanged( &rotatedPos, &rotatedPosPrev ); - - /* set previous gains if this is the first frame */ - if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, rotatedPosPrev.azimuth, rotatedPosPrev.elevation, ismInput->prev_pan_gains ) ) != IVAS_ERR_OK ) + FOR( i = 0; i < MAX_OUTPUT_CHANNELS; ++i ) { - return error; + Scale_sig32( tmpRendBuffer_fx[i], L_FRAME48k, negate( sub( 11, exp ) ) ); /* Q(exp) */ } - /* compute gains only if position changed */ - if ( position_changed ) + IF( ismInput->hReverb != NULL ) { - if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, - rotatedPos.azimuth, - rotatedPos.elevation, - currentPanGains ) ) != IVAS_ERR_OK ) + FOR( i = 0; i < outAudio.config.numChannels; i++ ) { - return error; + FOR( Word16 j = 0; j < outAudio.config.numSamplesPerChannel; j++ ) + { + tmpRendBuffer_fx[i][j] = L_shl( tmpRendBuffer_fx[i][j], 2 ); /* Q(exp + 2) */ + move16(); + } } } + accumulate2dArrayToBuffer_fx( tmpRendBuffer_fx, &outAudio ); + pop_wmops(); - /* intermediate rendering to 7_1_4 */ - tmpMcBuffer = ismInput->base.inputBuffer; + return IVAS_ERR_OK; +} - if ( ( error = getAudioConfigNumChannels( IVAS_AUDIO_CONFIG_7_1_4, &tmp ) ) != IVAS_ERR_OK ) - { - return error; - } - - tmpMcBuffer.config.numChannels = tmp; - tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels ); - - renderBufferChannelLerp( ismInput->base.inputBuffer, 0, - position_changed ? currentPanGains : ismInput->prev_pan_gains, - position_changed ? ismInput->prev_pan_gains : NULL, - tmpMcBuffer ); - - copyBufferTo2dArray( tmpMcBuffer, tmpRendBuffer ); - - /* save gains for next frame */ - for ( i = 0; i < 3; i++ ) - { - mvr2r( Rmat[i], ismInput->rot_mat_prev[i], 3 ); - } - - if ( position_changed ) - { - mvr2r( currentPanGains, ismInput->prev_pan_gains, MAX_OUTPUT_CHANNELS ); - } - - /* render 7_1_4 with BRIRs */ - if ( ( error = ivas_rend_crendProcess( ismInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR, - NULL, NULL, NULL, NULL, p_tmpRendBuffer, *ismInput->base.ctx.pOutSampleRate, - getNumSubframesInBuffer( &outAudio, *ismInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - - { - return error; - } - - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - free( tmpMcBuffer.data ); - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error renderIsmToBinauralReverb( - input_ism *ismInput, - IVAS_REND_AudioBuffer outAudio ) -{ - Word32 tmpRendBuffer_fx[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; - Word16 ism_md_subframe_update_ext, i; - Word16 exp = *outAudio.pq_fact; - move16(); - - push_wmops( "renderIsmToBinauralRoom" ); - - /* Metadata Delay to sync with audio delay converted from ms to 5ms (1000/50/4) subframe index */ - ism_md_subframe_update_ext = extract_l( Mpy_32_32( ismInput->ism_metadata_delay_ms_fx, 429496730 /* 1000 / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES in Q31 */ ) ); - copyBufferTo2dArray_fx( ismInput->base.inputBuffer, tmpRendBuffer_fx ); - - FOR( i = 0; i < MAX_OUTPUT_CHANNELS; ++i ) - { - Scale_sig32( tmpRendBuffer_fx[i], L_FRAME48k, sub( Q11, exp ) ); /* Q11 */ - } - - IF( NE_32( ( error = ivas_td_binaural_renderer_ext_fx( &ismInput->tdRendWrapper, ismInput->base.inConfig, NULL, ismInput->base.ctx.pCombinedOrientationData, &ismInput->currentPos, ismInput->hReverb, ism_md_subframe_update_ext, *ismInput->base.ctx.pOutSampleRate, outAudio.config.numSamplesPerChannel, tmpRendBuffer_fx, &exp ) ), IVAS_ERR_OK ) ) - { - return error; - } - - FOR( i = 0; i < MAX_OUTPUT_CHANNELS; ++i ) - { - Scale_sig32( tmpRendBuffer_fx[i], L_FRAME48k, negate( sub( 11, exp ) ) ); /* Q(exp) */ - } - - IF( ismInput->hReverb != NULL ) - { - FOR( i = 0; i < outAudio.config.numChannels; i++ ) - { - FOR( Word16 j = 0; j < outAudio.config.numSamplesPerChannel; j++ ) - { - tmpRendBuffer_fx[i][j] = L_shl( tmpRendBuffer_fx[i][j], 2 ); /* Q(exp + 2) */ - move16(); - } - } - } - accumulate2dArrayToBuffer_fx( tmpRendBuffer_fx, &outAudio ); - pop_wmops(); - - return IVAS_ERR_OK; -} -#else -static ivas_error renderIsmToBinauralReverb( - input_ism *ismInput, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; - int16_t ism_md_subframe_update_ext; - - push_wmops( "renderIsmToBinauralRoom" ); - - /* Metadata Delay to sync with audio delay converted from ms to 5ms (1000/50/4) subframe index */ - ism_md_subframe_update_ext = (int16_t) roundf( ismInput->ism_metadata_delay_ms / ( 1000 / FRAMES_PER_SEC / MAX_PARAM_SPATIAL_SUBFRAMES ) ); - - copyBufferTo2dArray( ismInput->base.inputBuffer, tmpRendBuffer ); - - if ( ( error = ivas_td_binaural_renderer_ext( &ismInput->tdRendWrapper, ismInput->base.inConfig, NULL, ismInput->base.ctx.pCombinedOrientationData, &ismInput->currentPos, ismInput->hReverb, - ism_md_subframe_update_ext, *ismInput->base.ctx.pOutSampleRate, outAudio.config.numSamplesPerChannel, tmpRendBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED static ivas_error renderIsmToMc( input_ism *ismInput, const IVAS_REND_AudioBuffer outAudio ) @@ -9935,83 +5399,6 @@ static ivas_error renderIsmToMc( return IVAS_ERR_OK; } -#else -static ivas_error renderIsmToMc( - input_ism *ismInput, - const IVAS_REND_AudioBuffer outAudio ) -{ - int8_t position_changed; - pan_vector currentPanGains; - ivas_error error; - - push_wmops( "renderIsmToMc" ); - - position_changed = !ismInput->firstFrameRendered || checkObjectPositionChanged( &ismInput->currentPos, &ismInput->previousPos ); - if ( *ismInput->base.ctx.pOutConfig == IVAS_AUDIO_CONFIG_STEREO ) - { - if ( ismInput->nonDiegeticPan ) - { - ismInput->prev_pan_gains[0] = currentPanGains[0] = ( ismInput->nonDiegeticPanGain + 1.f ) * 0.5f; - ismInput->prev_pan_gains[1] = currentPanGains[1] = 1.f - currentPanGains[0]; - } - else - { - set_zero( currentPanGains, MAX_OUTPUT_CHANNELS ); - - ivas_ism_get_stereo_gains( ismInput->currentPos.azimuth, ismInput->currentPos.elevation, ¤tPanGains[0], ¤tPanGains[1] ); - - set_zero( ismInput->prev_pan_gains, MAX_OUTPUT_CHANNELS ); - - ivas_ism_get_stereo_gains( ismInput->previousPos.azimuth, ismInput->previousPos.elevation, &ismInput->prev_pan_gains[0], &ismInput->prev_pan_gains[1] ); - } - } - else - { - /* compute gains only if position changed */ - if ( position_changed ) - { - // TODO tmu review when #215 is resolved - if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, - (int16_t) floorf( ismInput->currentPos.azimuth + 0.5f ), - (int16_t) floorf( ismInput->currentPos.elevation + 0.5f ), - currentPanGains ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* set previous gains if this is the first frame */ - if ( !ismInput->firstFrameRendered ) - { - // TODO tmu review when #215 is resolved - if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, - (int16_t) floorf( ismInput->previousPos.azimuth + 0.5f ), - (int16_t) floorf( ismInput->previousPos.elevation + 0.5f ), - ismInput->prev_pan_gains ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - /* Assume num channels in audio buffer to be 1. - * This should have been validated in IVAS_REND_FeedInputAudio() */ - renderBufferChannelLerp( ismInput->base.inputBuffer, 0, - position_changed ? currentPanGains : ismInput->prev_pan_gains, - position_changed ? ismInput->prev_pan_gains : NULL, - outAudio ); - - if ( position_changed ) - { - mvr2r( currentPanGains, ismInput->prev_pan_gains, MAX_OUTPUT_CHANNELS ); - } - - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderIsmToSba( input_ism *ismInput, const AUDIO_CONFIG outConfig, @@ -10113,71 +5500,7 @@ static ivas_error renderIsmToSba( return error; } -#else -static ivas_error renderIsmToSba( - input_ism *ismInput, - const AUDIO_CONFIG outConfig, - const IVAS_REND_AudioBuffer outAudio ) -{ - int8_t position_changed; - int16_t ambiOrderOut; - int16_t numOutChannels; - pan_vector currentPanGains; - ivas_error error; - error = IVAS_ERR_OK; - - push_wmops( "renderIsmToSba" ); - - if ( ( error = getAudioConfigNumChannels( outConfig, &numOutChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getAmbisonicsOrder( outConfig, &ambiOrderOut ) ) != IVAS_ERR_OK ) - { - return error; - } - - position_changed = !ismInput->firstFrameRendered || checkObjectPositionChanged( &ismInput->currentPos, &ismInput->previousPos ); - - /* set previous gains if this is the first frame */ - if ( !ismInput->firstFrameRendered ) - { - // TODO tmu review when #215 is resolved - ivas_dirac_dec_get_response( (int16_t) floorf( ismInput->previousPos.azimuth + 0.5f ), - (int16_t) floorf( ismInput->previousPos.elevation + 0.5f ), - ismInput->prev_pan_gains, - ambiOrderOut ); - } - - /* compute gains only if position changed */ - if ( position_changed ) - { - // TODO tmu review when #215 is resolved - ivas_dirac_dec_get_response( (int16_t) floorf( ismInput->currentPos.azimuth + 0.5f ), - (int16_t) floorf( ismInput->currentPos.elevation + 0.5f ), - currentPanGains, - ambiOrderOut ); - } - - /* Assume num channels in audio buffer to be 1. - * This should have been validated in IVAS_REND_FeedInputAudio() */ - renderBufferChannelLerp( ismInput->base.inputBuffer, 0, - position_changed ? currentPanGains : ismInput->prev_pan_gains, - position_changed ? ismInput->prev_pan_gains : NULL, - outAudio ); - - if ( position_changed ) - { - mvr2r( currentPanGains, ismInput->prev_pan_gains, MAX_OUTPUT_CHANNELS ); - } - pop_wmops(); - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void renderIsmToMasa( input_ism *ismInput, IVAS_REND_AudioBuffer outAudio, @@ -10239,28 +5562,7 @@ static void renderIsmToMasa( return; } -#else -static void renderIsmToMasa( - input_ism *ismInput, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpRendBuffer[MAX_NUM_OBJECTS][L_FRAME48k]; - - push_wmops( "renderIsmToMasa" ); - - copyBufferTo2dArray( ismInput->base.inputBuffer, tmpRendBuffer ); - - ivas_omasa_ana( ismInput->hOMasa, tmpRendBuffer, ismInput->base.inputBuffer.config.numSamplesPerChannel, outAudio.config.numChannels, ismInput->base.inputBuffer.config.numChannels ); - - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - pop_wmops(); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderInputIsm( input_ism *ismInput, const AUDIO_CONFIG outConfig, @@ -10343,73 +5645,7 @@ static ivas_error renderInputIsm( return error; } -#else -static ivas_error renderInputIsm( - input_ism *ismInput, - const AUDIO_CONFIG outConfig, - const IVAS_REND_AudioBuffer outAudio ) -{ - ivas_error error; - IVAS_REND_AudioBuffer inAudio; - error = IVAS_ERR_OK; - inAudio = ismInput->base.inputBuffer; - - if ( ismInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); - } - ismInput->base.numNewSamplesPerChannel = 0; - - /* Apply input gain to new audio */ - v_multc( inAudio.data, ismInput->base.gain, inAudio.data, inAudio.config.numSamplesPerChannel * inAudio.config.numChannels ); - - /* set combined orientation subframe info to start info */ - ivas_combined_orientation_set_to_start_index( *ismInput->base.ctx.pCombinedOrientationData ); - - switch ( getAudioConfigType( outConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - error = renderIsmToMc( ismInput, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - error = renderIsmToSba( ismInput, outConfig, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_BINAURAL: - error = renderIsmToBinaural( ismInput, outAudio ); - break; - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - error = renderIsmToBinauralRoom( ismInput, outAudio ); - break; - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - error = renderIsmToBinauralReverb( ismInput, outAudio ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - renderIsmToMasa( ismInput, outAudio ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - - /* Check error here to keep switch statement more compact */ - if ( error != IVAS_ERR_OK ) - { - return error; - } - - ismInput->firstFrameRendered = TRUE; - - return error; -} -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static ivas_error renderActiveInputsIsm( IVAS_REND_HANDLE hIvasRend, IVAS_REND_AudioBuffer outAudio ) @@ -10443,38 +5679,11 @@ static ivas_error renderActiveInputsIsm( } return IVAS_ERR_OK; } -#else -static ivas_error renderActiveInputsIsm( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - input_ism *pCurrentInput; - ivas_error error; - - for ( i = 0, pCurrentInput = hIvasRend->inputsIsm; i < RENDERER_MAX_ISM_INPUTS; ++i, ++pCurrentInput ) - { - if ( pCurrentInput->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Skip inactive inputs */ - continue; - } - - if ( ( error = renderInputIsm( pCurrentInput, hIvasRend->outputConfig, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error renderLfeToBinaural_fx( - const input_mc *mcInput, - IVAS_REND_AudioBuffer outAudio, - Word16 in_q, - Word16 out_q ) +static ivas_error renderLfeToBinaural_fx( + const input_mc *mcInput, + IVAS_REND_AudioBuffer outAudio, + Word16 in_q, + Word16 out_q ) { Word16 lfe_idx; Word32 gain_fx; @@ -10547,70 +5756,6 @@ static ivas_error renderLfeToBinaural_fx( return IVAS_ERR_OK; } -#else -static ivas_error renderLfeToBinaural( - const input_mc *mcInput, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t lfe_idx; - float gain; - int16_t ear_idx; - float tmpLfeBuffer[MAX_BUFFER_LENGTH_PER_CHANNEL]; - int16_t frame_size, num_cpy_smpl_cur_frame, num_cpy_smpl_prev_frame; - const float *lfeInput; - float *writePtr; - - assert( ( outAudio.config.numChannels == 2 ) && "Must be binaural output" ); - - push_wmops( "renderLfeToBinaural" ); - - gain = GAIN_LFE; - - if ( mcInput->base.inConfig != IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - lfe_idx = LFE_CHANNEL; - } - else if ( mcInput->customLsInput.num_lfe > 0 ) - { - lfe_idx = mcInput->customLsInput.lfe_idx[0]; - } - else - { - /* no LFE to render */ - return IVAS_ERR_OK; - } - - /* --- Prepare LFE signal to be added to binaural output --- */ - lfeInput = getSmplPtr( mcInput->base.inputBuffer, lfe_idx, 0 ); - frame_size = mcInput->base.inputBuffer.config.numSamplesPerChannel; - num_cpy_smpl_prev_frame = mcInput->binauralDelaySmp; - num_cpy_smpl_cur_frame = frame_size - num_cpy_smpl_prev_frame; - - /* Assuming LFE should be delayed by less that the duration of one frame */ - assert( mcInput->binauralDelaySmp < frame_size ); - - /* Get delayed LFE signal from previous frame, apply gain and save in tmp buffer */ - v_multc( mcInput->lfeDelayBuffer, gain, tmpLfeBuffer, num_cpy_smpl_prev_frame ); - - /* Continue filling tmp buffer, now with LFE signal from current frame */ - v_multc( lfeInput, gain, tmpLfeBuffer + num_cpy_smpl_prev_frame, num_cpy_smpl_cur_frame ); - - /* Save remaining LFE samples of current frame for next frame */ - mvr2r( lfeInput + num_cpy_smpl_cur_frame, mcInput->lfeDelayBuffer, num_cpy_smpl_prev_frame ); - - /* Copy LFE to left and right ears */ - for ( ear_idx = 0; ear_idx < BINAURAL_CHANNELS; ++ear_idx ) - { - writePtr = getSmplPtr( outAudio, ear_idx, 0 ); - v_add( writePtr, tmpLfeBuffer, writePtr, frame_size ); - } - - pop_wmops(); - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderMcToBinaural( input_mc *mcInput, const AUDIO_CONFIG outConfig, @@ -10726,97 +5871,6 @@ static ivas_error renderMcToBinaural( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error renderMcToBinaural( - input_mc *mcInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - AUDIO_CONFIG inConfig; - ivas_error error; - IVAS_REND_AudioBuffer tmpRotBuffer; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - int16_t subframe_idx; - float *p_tmpRendBuffer[MAX_OUTPUT_CHANNELS]; - int16_t i; - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - p_tmpRendBuffer[i] = tmpRendBuffer[i]; - } - - push_wmops( "renderMcToBinaural" ); - inConfig = mcInput->base.inConfig; - - hCombinedOrientationData = mcInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - if ( ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) || ( combinedOrientationEnabled && ( inConfig == IVAS_AUDIO_CONFIG_5_1 || inConfig == IVAS_AUDIO_CONFIG_7_1 ) ) ) - { - copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer ); - - if ( ( error = ivas_td_binaural_renderer_ext( &mcInput->tdRendWrapper, mcInput->base.inConfig, &mcInput->customLsInput, mcInput->base.ctx.pCombinedOrientationData, NULL, mcInput->hReverb, - 0, *mcInput->base.ctx.pOutSampleRate, mcInput->base.inputBuffer.config.numSamplesPerChannel, tmpRendBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* apply rotation */ - if ( combinedOrientationEnabled ) - { - tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); - - if ( ( error = rotateFrameMc( mcInput->base.inputBuffer, mcInput->base.inConfig, &mcInput->customLsInput, mcInput->base.ctx.pHeadRotData, mcInput->base.ctx.pCombinedOrientationData, mcInput->rot_gains_prev, mcInput->efapInWrapper.hEfap, tmpRotBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - copyBufferTo2dArray( tmpRotBuffer, tmpRendBuffer ); - free( tmpRotBuffer.data ); - } - else - { - copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer ); - } - - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, - getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK ) - - { - return error; - } - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderMcToBinauralRoom( input_mc *mcInput, const AUDIO_CONFIG outConfig, @@ -10937,98 +5991,6 @@ static ivas_error renderMcToBinauralRoom( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error renderMcToBinauralRoom( - input_mc *mcInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - AUDIO_CONFIG inConfig; - ivas_error error; - IVAS_REND_AudioBuffer tmpRotBuffer; - float *p_tmpRendBuffer[MAX_OUTPUT_CHANNELS]; - int16_t i; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - int16_t subframe_idx; - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - p_tmpRendBuffer[i] = tmpRendBuffer[i]; - } - - push_wmops( "renderMcToBinauralRoom" ); - inConfig = mcInput->base.inConfig; - - hCombinedOrientationData = mcInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - if ( ( mcInput->hReverb != NULL && outConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) && ( ( inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) || ( combinedOrientationEnabled && ( inConfig == IVAS_AUDIO_CONFIG_5_1 || inConfig == IVAS_AUDIO_CONFIG_7_1 ) ) ) ) - { - copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer ); - - if ( ( error = ivas_td_binaural_renderer_ext( &mcInput->tdRendWrapper, mcInput->base.inConfig, &mcInput->customLsInput, mcInput->base.ctx.pCombinedOrientationData, NULL, mcInput->hReverb, - 0, *mcInput->base.ctx.pOutSampleRate, mcInput->base.inputBuffer.config.numSamplesPerChannel, tmpRendBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - /* apply rotation */ - if ( combinedOrientationEnabled ) - { - tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); - - if ( ( error = rotateFrameMc( mcInput->base.inputBuffer, mcInput->base.inConfig, &mcInput->customLsInput, mcInput->base.ctx.pHeadRotData, mcInput->base.ctx.pCombinedOrientationData, - mcInput->rot_gains_prev, - mcInput->efapInWrapper.hEfap, tmpRotBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - copyBufferTo2dArray( tmpRotBuffer, tmpRendBuffer ); - free( tmpRotBuffer.data ); - } - else - { - copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer ); - } - - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, mcInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpRendBuffer, *mcInput->base.ctx.pOutSampleRate, - getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderMcCustomLsToBinauralRoom( input_mc *mcInput, const AUDIO_CONFIG outConfig, @@ -11146,105 +6108,6 @@ static ivas_error renderMcCustomLsToBinauralRoom( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error renderMcCustomLsToBinauralRoom( - input_mc *mcInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - int16_t tmp; - float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; - IVAS_REND_AudioBuffer tmpRotBuffer; - IVAS_REND_AudioBuffer tmpMcBuffer; - IVAS_REND_AudioBuffer *tmpBufPtr; - float *p_tmpCrendBuffer[MAX_OUTPUT_CHANNELS]; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - int16_t subframe_idx; - - push_wmops( "renderMcCustomLsToBinauralRoom" ); - tmpRotBuffer = outAudio; /* avoid compilation warning */ - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - p_tmpCrendBuffer[i] = tmpCrendBuffer[i]; - } - - hCombinedOrientationData = mcInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - /* apply rotation */ - if ( combinedOrientationEnabled ) - { - tmpRotBuffer = mcInput->base.inputBuffer; - tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpRotBuffer.data, tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels ); - - if ( ( error = rotateFrameMc( mcInput->base.inputBuffer, mcInput->base.inConfig, &mcInput->customLsInput, mcInput->base.ctx.pHeadRotData, mcInput->base.ctx.pCombinedOrientationData, - mcInput->rot_gains_prev, - mcInput->efapInWrapper.hEfap, tmpRotBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* intermediate conversion to 7_1_4 */ - tmpMcBuffer = mcInput->base.inputBuffer; - - if ( ( error = getAudioConfigNumChannels( IVAS_AUDIO_CONFIG_7_1_4, &tmp ) ) != IVAS_ERR_OK ) - { - return error; - } - - tmpMcBuffer.config.numChannels = tmp; - tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels ); - - tmpBufPtr = ( combinedOrientationEnabled ) ? &tmpRotBuffer : &mcInput->base.inputBuffer; - for ( i = 0; i < mcInput->base.inputBuffer.config.numChannels; i++ ) - { - renderBufferChannel( *tmpBufPtr, i, mcInput->panGains[i], tmpMcBuffer ); - } - copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer ); - - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( mcInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, NULL, NULL, NULL, NULL, - p_tmpCrendBuffer, *mcInput->base.ctx.pOutSampleRate, getNumSubframesInBuffer( &outAudio, *mcInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - - if ( ( error = renderLfeToBinaural( mcInput, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( combinedOrientationEnabled ) - { - free( tmpRotBuffer.data ); - } - free( tmpMcBuffer.data ); - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void renderMcToMc( const input_mc *mcInput, IVAS_REND_AudioBuffer outAudio ) @@ -11263,35 +6126,14 @@ static void renderMcToMc( pop_wmops(); return; } -#else -static void renderMcToMc( +static void renderMcToSba( const input_mc *mcInput, IVAS_REND_AudioBuffer outAudio ) { - int16_t i; + Word16 i; IVAS_REND_AudioBuffer inAudio; - push_wmops( "renderMcToMc" ); - inAudio = mcInput->base.inputBuffer; - - for ( i = 0; i < inAudio.config.numChannels; ++i ) - { - renderBufferChannel( inAudio, i, mcInput->panGains[i], outAudio ); - } - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static void renderMcToSba( - const input_mc *mcInput, - IVAS_REND_AudioBuffer outAudio ) -{ - Word16 i; - IVAS_REND_AudioBuffer inAudio; - - push_wmops( "renderMcToSba" ); + push_wmops( "renderMcToSba" ); inAudio = mcInput->base.inputBuffer; FOR( i = 0; i < inAudio.config.numChannels; ++i ) @@ -11301,28 +6143,7 @@ static void renderMcToSba( pop_wmops(); return; } -#else -static void renderMcToSba( - const input_mc *mcInput, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - IVAS_REND_AudioBuffer inAudio; - - push_wmops( "renderMcToSba" ); - inAudio = mcInput->base.inputBuffer; - - for ( i = 0; i < inAudio.config.numChannels; ++i ) - { - renderBufferChannel( inAudio, i, mcInput->panGains[i], outAudio ); - } - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void renderMcToMasa( input_mc *mcInput, IVAS_REND_AudioBuffer outAudio ) @@ -11336,23 +6157,7 @@ static void renderMcToMasa( pop_wmops(); return; } -#else -static void renderMcToMasa( - input_mc *mcInput, - IVAS_REND_AudioBuffer outAudio ) -{ - push_wmops( "renderMcToMasa" ); - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer ); - ivas_mcmasa_ana( mcInput->hMcMasa, tmpRendBuffer, mcInput->base.inputBuffer.config.numSamplesPerChannel, outAudio.config.numChannels, mcInput->base.inputBuffer.config.numChannels ); - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderInputMc( input_mc *mcInput, const AUDIO_CONFIG outConfig, @@ -11414,68 +6219,6 @@ static ivas_error renderInputMc( } return error; } -#else -static ivas_error renderInputMc( - input_mc *mcInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - ivas_error error; - IVAS_REND_AudioBuffer inAudio; - error = IVAS_ERR_OK; - - inAudio = mcInput->base.inputBuffer; - - if ( mcInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); - } - mcInput->base.numNewSamplesPerChannel = 0; - - /* Apply input gain to new audio */ - v_multc( inAudio.data, mcInput->base.gain, inAudio.data, inAudio.config.numSamplesPerChannel * inAudio.config.numChannels ); - /* set combined orientation subframe info to start info */ - ivas_combined_orientation_set_to_start_index( *( mcInput->base.ctx.pCombinedOrientationData ) ); - - switch ( getAudioConfigType( outConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - renderMcToMc( mcInput, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - renderMcToSba( mcInput, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_BINAURAL: - error = renderMcToBinaural( mcInput, outConfig, outAudio ); - break; - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - if ( mcInput->base.inConfig == IVAS_AUDIO_CONFIG_LS_CUSTOM ) - { - error = renderMcCustomLsToBinauralRoom( mcInput, outConfig, outAudio ); - } - else - { - error = renderMcToBinauralRoom( mcInput, outConfig, outAudio ); - } - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - renderMcToMasa( mcInput, outAudio ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderActiveInputsMc( IVAS_REND_HANDLE hIvasRend, IVAS_REND_AudioBuffer outAudio ) @@ -11501,33 +6244,6 @@ static ivas_error renderActiveInputsMc( return IVAS_ERR_OK; } -#else -static ivas_error renderActiveInputsMc( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - input_mc *pCurrentInput; - ivas_error error; - - for ( i = 0, pCurrentInput = hIvasRend->inputsMc; i < RENDERER_MAX_MC_INPUTS; ++i, ++pCurrentInput ) - { - if ( pCurrentInput->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Skip inactive inputs */ - continue; - } - - if ( ( error = renderInputMc( pCurrentInput, hIvasRend->outputConfig, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void renderSbaToMc( const input_sba *sbaInput, IVAS_REND_AudioBuffer outAudio ) @@ -11566,47 +6282,6 @@ static void renderSbaToSba( pop_wmops(); return; } -#else -static void renderSbaToMc( - const input_sba *sbaInput, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - IVAS_REND_AudioBuffer inAudio; - - push_wmops( "renderSbaToMc" ); - inAudio = sbaInput->base.inputBuffer; - - for ( i = 0; i < inAudio.config.numChannels; ++i ) - { - renderBufferChannel( inAudio, i, sbaInput->hoaDecMtx[i], outAudio ); - } - - pop_wmops(); - return; -} - - -static void renderSbaToSba( - const input_sba *sbaInput, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - IVAS_REND_AudioBuffer inAudio; - - push_wmops( "renderSbaToSba" ); - inAudio = sbaInput->base.inputBuffer; - - for ( i = 0; i < inAudio.config.numChannels; ++i ) - { - renderBufferChannel( inAudio, i, sbaInput->hoaDecMtx[i], outAudio ); - } - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderSbaToBinaural( input_sba *sbaInput, const AUDIO_CONFIG outConfig, @@ -11690,81 +6365,6 @@ static ivas_error renderSbaToBinaural( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error renderSbaToBinaural( - input_sba *sbaInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - ivas_error error; - IVAS_REND_AudioBuffer tmpRotBuffer; - float *p_tmpCrendBuffer[MAX_OUTPUT_CHANNELS]; - int16_t i; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - int16_t subframe_idx; - - push_wmops( "renderSbaToBinaural" ); - { - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - p_tmpCrendBuffer[i] = tmpCrendBuffer[i]; - } - - hCombinedOrientationData = sbaInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } - - /* apply rotation */ - if ( combinedOrientationEnabled ) - { - tmpRotBuffer = sbaInput->base.inputBuffer; - tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - - /* copy input for in-place rotation */ - mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); - - if ( ( error = rotateFrameSba( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, - sbaInput->base.ctx.pCombinedOrientationData, sbaInput->rot_gains_prev, tmpRotBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - - copyBufferTo2dArray( tmpRotBuffer, tmpCrendBuffer ); - free( tmpRotBuffer.data ); - } - else - { - copyBufferTo2dArray( sbaInput->base.inputBuffer, tmpCrendBuffer ); - } - - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, sbaInput->base.inConfig, outConfig, NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate, - getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - } - - pop_wmops(); - return IVAS_ERR_OK; -} - -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderSbaToBinauralRoom( input_sba *sbaInput, const AUDIO_CONFIG outConfig, @@ -11887,164 +6487,48 @@ static ivas_error renderSbaToBinauralRoom( pop_wmops(); return IVAS_ERR_OK; } -#else -static ivas_error renderSbaToBinauralRoom( +static void renderSbaToMasa( + input_sba *sbaInput, + IVAS_REND_AudioBuffer outAudio ) +{ + Word32 tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + + push_wmops( "renderMcToMasa" ); + copyBufferTo2dArray_fx( sbaInput->base.inputBuffer, tmpRendBuffer ); + ivas_dirac_ana_fx( sbaInput->hDirAC, tmpRendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, outAudio.config.numChannels ); + accumulate2dArrayToBuffer_fx( tmpRendBuffer, &outAudio ); + + pop_wmops(); + return; +} +static ivas_error renderInputSba( input_sba *sbaInput, const AUDIO_CONFIG outConfig, IVAS_REND_AudioBuffer outAudio ) { - int16_t i; - int16_t tmp; - float tmpCrendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; ivas_error error; - IVAS_REND_AudioBuffer tmpRotBuffer; - IVAS_REND_AudioBuffer tmpMcBuffer; - IVAS_REND_AudioBuffer *tmpBufPtr; - float *p_tmpCrendBuffer[MAX_OUTPUT_CHANNELS]; - const COMBINED_ORIENTATION_HANDLE *hCombinedOrientationData; - int8_t combinedOrientationEnabled; - int16_t subframe_idx; - - tmpRotBuffer = outAudio; /* avoid compilation warning */ - push_wmops( "renderSbaToBinauralRoom" ); + IVAS_REND_AudioBuffer inAudio; + error = IVAS_ERR_OK; + move32(); + inAudio = sbaInput->base.inputBuffer; - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) + IF( NE_32( sbaInput->base.numNewSamplesPerChannel, outAudio.config.numSamplesPerChannel ) ) { - p_tmpCrendBuffer[i] = tmpCrendBuffer[i]; + return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); } + sbaInput->base.numNewSamplesPerChannel = 0; + move32(); + *outAudio.pq_fact = outAudio.q_factor; + move16(); + /* Apply input gain to new audio */ + v_multc_fixed( inAudio.data_fx, sbaInput->base.gain_fx, inAudio.data_fx, i_mult( inAudio.config.numSamplesPerChannel, inAudio.config.numChannels ) ); + *outAudio.pq_fact = sub( *outAudio.pq_fact, 1 ); // to compensate for the qfactor reduction in gain multiplication. + move16(); - hCombinedOrientationData = sbaInput->base.ctx.pCombinedOrientationData; - combinedOrientationEnabled = 0; - if ( hCombinedOrientationData != NULL ) - { - for ( subframe_idx = 0; subframe_idx < ( *hCombinedOrientationData )->num_subframes; subframe_idx++ ) - { - if ( ( *hCombinedOrientationData )->enableCombinedOrientation[subframe_idx] != 0 ) - { - combinedOrientationEnabled = 1; - break; - } - } - } + /* set combined orientation subframe info to start info */ + ivas_combined_orientation_set_to_start_index( *( sbaInput->base.ctx.pCombinedOrientationData ) ); - /* apply rotation */ - if ( combinedOrientationEnabled ) - { - tmpRotBuffer = sbaInput->base.inputBuffer; - tmpRotBuffer.data = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( float ) ); - - /* copy input for in-place rotation */ - mvr2r( sbaInput->base.inputBuffer.data, tmpRotBuffer.data, tmpRotBuffer.config.numChannels * tmpRotBuffer.config.numSamplesPerChannel ); - - if ( ( error = rotateFrameSba( sbaInput->base.inputBuffer, sbaInput->base.inConfig, sbaInput->base.ctx.pHeadRotData, - sbaInput->base.ctx.pCombinedOrientationData, - sbaInput->rot_gains_prev, - tmpRotBuffer ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* intermediate rendering to 7_1_4 */ - tmpMcBuffer = sbaInput->base.inputBuffer; - - if ( ( error = getAudioConfigNumChannels( IVAS_AUDIO_CONFIG_7_1_4, &tmp ) ) != IVAS_ERR_OK ) - { - return error; - } - - tmpMcBuffer.config.numChannels = tmp; - tmpMcBuffer.data = malloc( tmpMcBuffer.config.numSamplesPerChannel * tmpMcBuffer.config.numChannels * sizeof( float ) ); - set_zero( tmpMcBuffer.data, tmpMcBuffer.config.numChannels * tmpMcBuffer.config.numSamplesPerChannel ); - - tmpBufPtr = ( combinedOrientationEnabled ) ? &tmpRotBuffer : &sbaInput->base.inputBuffer; - for ( i = 0; i < sbaInput->base.inputBuffer.config.numChannels; i++ ) - { - renderBufferChannel( *tmpBufPtr, i, sbaInput->hoaDecMtx[i], tmpMcBuffer ); - } - - copyBufferTo2dArray( tmpMcBuffer, tmpCrendBuffer ); - - /* call CREND */ - if ( ( error = ivas_rend_crendProcess( sbaInput->crendWrapper, IVAS_AUDIO_CONFIG_7_1_4, outConfig, - NULL, NULL, NULL, NULL, p_tmpCrendBuffer, *sbaInput->base.ctx.pOutSampleRate, - getNumSubframesInBuffer( &outAudio, *sbaInput->base.ctx.pOutSampleRate ) ) ) != IVAS_ERR_OK ) - { - return error; - } - - accumulate2dArrayToBuffer( tmpCrendBuffer, &outAudio ); - - if ( combinedOrientationEnabled ) - { - free( tmpRotBuffer.data ); - } - free( tmpMcBuffer.data ); - - pop_wmops(); - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static void renderSbaToMasa( - input_sba *sbaInput, - IVAS_REND_AudioBuffer outAudio ) -{ - Word32 tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - - push_wmops( "renderMcToMasa" ); - copyBufferTo2dArray_fx( sbaInput->base.inputBuffer, tmpRendBuffer ); - ivas_dirac_ana_fx( sbaInput->hDirAC, tmpRendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, outAudio.config.numChannels ); - accumulate2dArrayToBuffer_fx( tmpRendBuffer, &outAudio ); - - pop_wmops(); - return; -} -#else -static void renderSbaToMasa( - input_sba *sbaInput, - IVAS_REND_AudioBuffer outAudio ) -{ - float tmpRendBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - - push_wmops( "renderMcToMasa" ); - copyBufferTo2dArray( sbaInput->base.inputBuffer, tmpRendBuffer ); - ivas_dirac_ana( sbaInput->hDirAC, tmpRendBuffer, sbaInput->base.inputBuffer.config.numSamplesPerChannel, outAudio.config.numChannels ); - accumulate2dArrayToBuffer( tmpRendBuffer, &outAudio ); - - pop_wmops(); - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error renderInputSba( - input_sba *sbaInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - ivas_error error; - IVAS_REND_AudioBuffer inAudio; - error = IVAS_ERR_OK; - move32(); - inAudio = sbaInput->base.inputBuffer; - - IF( NE_32( sbaInput->base.numNewSamplesPerChannel, outAudio.config.numSamplesPerChannel ) ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); - } - sbaInput->base.numNewSamplesPerChannel = 0; - move32(); - *outAudio.pq_fact = outAudio.q_factor; - move16(); - /* Apply input gain to new audio */ - v_multc_fixed( inAudio.data_fx, sbaInput->base.gain_fx, inAudio.data_fx, i_mult( inAudio.config.numSamplesPerChannel, inAudio.config.numChannels ) ); - *outAudio.pq_fact = sub( *outAudio.pq_fact, 1 ); // to compensate for the qfactor reduction in gain multiplication. - move16(); - - /* set combined orientation subframe info to start info */ - ivas_combined_orientation_set_to_start_index( *( sbaInput->base.ctx.pCombinedOrientationData ) ); - - SWITCH( getAudioConfigType( outConfig ) ) + SWITCH( getAudioConfigType( outConfig ) ) { case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: renderSbaToMc( sbaInput, outAudio ); @@ -12075,63 +6559,6 @@ static ivas_error renderInputSba( return error; } -#else -static ivas_error renderInputSba( - input_sba *sbaInput, - const AUDIO_CONFIG outConfig, - IVAS_REND_AudioBuffer outAudio ) -{ - ivas_error error; - IVAS_REND_AudioBuffer inAudio; - - error = IVAS_ERR_OK; - inAudio = sbaInput->base.inputBuffer; - - if ( sbaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); - } - sbaInput->base.numNewSamplesPerChannel = 0; - - /* Apply input gain to new audio */ - v_multc( inAudio.data, sbaInput->base.gain, inAudio.data, inAudio.config.numSamplesPerChannel * inAudio.config.numChannels ); - - /* set combined orientation subframe info to start info */ - ivas_combined_orientation_set_to_start_index( *( sbaInput->base.ctx.pCombinedOrientationData ) ); - - switch ( getAudioConfigType( outConfig ) ) - { - case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED: - renderSbaToMc( sbaInput, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS: - renderSbaToSba( sbaInput, outAudio ); - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL: - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_BINAURAL: - error = renderSbaToBinaural( sbaInput, outConfig, outAudio ); - break; - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - error = renderSbaToBinauralRoom( sbaInput, outConfig, outAudio ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - break; - case IVAS_REND_AUDIO_CONFIG_TYPE_MASA: - renderSbaToMasa( sbaInput, outAudio ); - break; - default: - return IVAS_ERR_INVALID_OUTPUT_FORMAT; - } - - return error; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderActiveInputsSba( IVAS_REND_HANDLE hIvasRend, IVAS_REND_AudioBuffer outAudio ) @@ -12156,35 +6583,8 @@ static ivas_error renderActiveInputsSba( } return IVAS_ERR_OK; } -#else -static ivas_error renderActiveInputsSba( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - input_sba *pCurrentInput; - ivas_error error; - - for ( i = 0, pCurrentInput = hIvasRend->inputsSba; i < RENDERER_MAX_SBA_INPUTS; ++i, ++pCurrentInput ) - { - if ( pCurrentInput->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Skip inactive inputs */ - continue; - } - - if ( ( error = renderInputSba( pCurrentInput, hIvasRend->outputConfig, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void copyMasaMetadataToDiracRenderer_fx( MASA_METADATA_FRAME *meta, SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, @@ -12241,53 +6641,8 @@ static void copyMasaMetadataToDiracRenderer_fx( return; } -#else -static void copyMasaMetadataToDiracRenderer( - MASA_METADATA_FRAME *meta, - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom, - const int16_t maxBin ) -{ - int16_t band, sf, bin; - int16_t meta_write_index; - - hSpatParamRendCom->numParametricDirections = meta->descriptive_meta.numberOfDirections + 1; - hSpatParamRendCom->numSimultaneousDirections = meta->descriptive_meta.numberOfDirections + 1; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - meta_write_index = ( hSpatParamRendCom->dirac_bs_md_write_idx + sf ) % hSpatParamRendCom->dirac_md_buffer_length; - - for ( band = 0; band < MASA_MAXIMUM_CODING_SUBBANDS; band++ ) - { - for ( bin = MASA_band_grouping_24[band]; bin < MASA_band_grouping_24[band + 1] && bin < maxBin; bin++ ) - { - hSpatParamRendCom->azimuth[meta_write_index][bin] = (int16_t) meta->directional_meta[0].azimuth[sf][band]; - hSpatParamRendCom->elevation[meta_write_index][bin] = (int16_t) meta->directional_meta[0].elevation[sf][band]; - hSpatParamRendCom->energy_ratio1[meta_write_index][bin] = meta->directional_meta[0].energy_ratio[sf][band]; - hSpatParamRendCom->diffuseness_vector[meta_write_index][bin] = 1.0f - meta->directional_meta[0].energy_ratio[sf][band]; - hSpatParamRendCom->spreadCoherence[meta_write_index][bin] = meta->directional_meta[0].spread_coherence[sf][band]; - hSpatParamRendCom->surroundingCoherence[meta_write_index][bin] = meta->common_meta.surround_coherence[sf][band]; - - if ( hSpatParamRendCom->numSimultaneousDirections == 2 ) - { - hSpatParamRendCom->azimuth2[meta_write_index][bin] = (int16_t) meta->directional_meta[1].azimuth[sf][band]; - hSpatParamRendCom->elevation2[meta_write_index][bin] = (int16_t) meta->directional_meta[1].elevation[sf][band]; - hSpatParamRendCom->energy_ratio2[meta_write_index][bin] = meta->directional_meta[1].energy_ratio[sf][band]; - hSpatParamRendCom->diffuseness_vector[meta_write_index][bin] -= meta->directional_meta[1].energy_ratio[sf][band]; - hSpatParamRendCom->spreadCoherence2[meta_write_index][bin] = meta->directional_meta[1].spread_coherence[sf][band]; - } - } - } - } - - hSpatParamRendCom->dirac_bs_md_write_idx = ( hSpatParamRendCom->dirac_bs_md_write_idx + MAX_PARAM_SPATIAL_SUBFRAMES ) % hSpatParamRendCom->dirac_md_buffer_length; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void renderMasaToMasa( input_masa *masaInput, IVAS_REND_AudioBuffer outAudio ) @@ -12502,135 +6857,7 @@ static void renderMasaToMasa( return; } -#else -static void renderMasaToMasa( - input_masa *masaInput, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t sf, band, dir, numDirs; - float ratioSum; - MASA_DECODER_EXT_OUT_META_HANDLE outMeta; - MASA_METADATA_FRAME *inMeta; - float tmpBuffer[MAX_OUTPUT_CHANNELS][L_FRAME48k]; - int16_t ts, i, j, l_ts; - float Chan_RealBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - float Chan_ImagBuffer[MASA_MAX_TRANSPORT_CHANNELS][CLDFB_NO_CHANNELS_MAX]; - int16_t band_m_idx, block_m_idx; - int16_t mrange[2]; - int16_t brange[2]; - int16_t numAnalysisChannels; - - copyBufferTo2dArray( masaInput->base.inputBuffer, tmpBuffer ); - - /* Calculate energy */ - l_ts = masaInput->base.inputBuffer.config.numSamplesPerChannel / CLDFB_NO_COL_MAX; - numAnalysisChannels = masaInput->hMasaPrerend->num_Cldfb_instances; - - /* do processing over all CLDFB time slots */ - for ( block_m_idx = 0; block_m_idx < MAX_PARAM_SPATIAL_SUBFRAMES; block_m_idx++ ) - { - mrange[0] = DirAC_block_grouping[block_m_idx]; - mrange[1] = DirAC_block_grouping[block_m_idx + 1]; - - set_zero( masaInput->hMasaPrerend->energy[block_m_idx], MASA_FREQUENCY_BANDS ); - - for ( ts = mrange[0]; ts < mrange[1]; ts++ ) - { - for ( i = 0; i < numAnalysisChannels; i++ ) - { - cldfbAnalysis_ts_ivas( &( tmpBuffer[i][l_ts * ts] ), Chan_RealBuffer[i], Chan_ImagBuffer[i], l_ts, masaInput->hMasaPrerend->cldfbAnaEnc[i] ); - } - - /* Compute channel energy for metadata processing */ - for ( band_m_idx = 0; band_m_idx < MASA_FREQUENCY_BANDS; band_m_idx++ ) - { - brange[0] = MASA_band_grouping_24[band_m_idx]; - brange[1] = MASA_band_grouping_24[band_m_idx + 1]; - for ( j = brange[0]; j < brange[1]; j++ ) - { - for ( i = 0; i < numAnalysisChannels; i++ ) - { - masaInput->hMasaPrerend->energy[block_m_idx][band_m_idx] += Chan_RealBuffer[0][j] * Chan_RealBuffer[0][j] + Chan_ImagBuffer[0][j] * Chan_ImagBuffer[0][j]; - } - } - } - } - } - - /* Copy audio channels if mismatch in number of transports */ - if ( masaInput->base.inputBuffer.config.numChannels == 1 && outAudio.config.numChannels == 2 ) - { - mvr2r( tmpBuffer[0], tmpBuffer[1], masaInput->base.inputBuffer.config.numSamplesPerChannel ); - } - else if ( masaInput->base.inputBuffer.config.numChannels == 2 && outAudio.config.numChannels == 1 ) - { - v_add( tmpBuffer[0], tmpBuffer[1], tmpBuffer[0], masaInput->base.inputBuffer.config.numSamplesPerChannel ); - } - - /* Copy metadata */ - outMeta = masaInput->hMasaPrerend->hMasaOut; - inMeta = &masaInput->masaMetadata; - numDirs = inMeta->descriptive_meta.numberOfDirections + 1; - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - /* Remainder is always set to zero and energy removal is compensated in following steps - * to other ratios. */ - inMeta->common_meta.remainder_to_total_ratio[sf][band] = 0.0f; - - ratioSum = 0; - for ( dir = 0; dir < numDirs; dir++ ) - { - ratioSum += inMeta->directional_meta[dir].energy_ratio[sf][band]; - } - ratioSum += inMeta->common_meta.diffuse_to_total_ratio[sf][band]; - - if ( ratioSum == 0.0f ) - { - for ( dir = 0; dir < numDirs; dir++ ) - { - inMeta->directional_meta[dir].energy_ratio[sf][band] = 0.0f; - } - inMeta->common_meta.diffuse_to_total_ratio[sf][band] = 1.0f; - } - else if ( ratioSum != 1.0f ) - { - for ( dir = 0; dir < numDirs; dir++ ) - { - inMeta->directional_meta[dir].energy_ratio[sf][band] /= ratioSum; - } - inMeta->common_meta.diffuse_to_total_ratio[sf][band] /= ratioSum; - } - } - } - - for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) - { - for ( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) - { - outMeta->diffuseToTotalRatio[sf][band] = UINT8_MAX; - for ( dir = 0; dir < numDirs; dir++ ) - { - outMeta->directionIndex[dir][sf][band] = index_theta_phi_16( &inMeta->directional_meta[dir].elevation[sf][band], &inMeta->directional_meta[dir].azimuth[sf][band], masaInput->hMasaPrerend->sph_grid16 ); - outMeta->directToTotalRatio[dir][sf][band] = (uint8_t) floorf( inMeta->directional_meta[dir].energy_ratio[sf][band] * UINT8_MAX ); - outMeta->diffuseToTotalRatio[sf][band] -= outMeta->directToTotalRatio[dir][sf][band]; - outMeta->spreadCoherence[dir][sf][band] = (uint8_t) floorf( inMeta->directional_meta[dir].spread_coherence[sf][band] * UINT8_MAX ); - } - outMeta->surroundCoherence[sf][band] = (uint8_t) floorf( inMeta->common_meta.surround_coherence[sf][band] * UINT8_MAX ); - } - } - - copy_masa_descriptive_meta( &( outMeta->descriptiveMeta ), &( inMeta->descriptive_meta ) ); - - accumulate2dArrayToBuffer( tmpBuffer, &outAudio ); - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static ivas_error renderInputMasa( input_masa *masaInput, const AUDIO_CONFIG outConfig, @@ -12740,96 +6967,21 @@ static ivas_error renderInputMasa( return IVAS_ERR_OK; } -#else -static ivas_error renderInputMasa( - input_masa *masaInput, - const AUDIO_CONFIG outConfig, +static ivas_error renderActiveInputsMasa( + IVAS_REND_HANDLE hIvasRend, IVAS_REND_AudioBuffer outAudio ) { - IVAS_REND_AudioBuffer inAudio; - int16_t ch; - int16_t maxBin; - float *tmpBuffer[MAX_OUTPUT_CHANNELS]; - float tmpBuffer_buff[MAX_OUTPUT_CHANNELS][L_FRAME48k]; + Word16 i; + input_masa *pCurrentInput; + ivas_error error; - if ( !masaInput->metadataHasBeenFed ) + FOR( ( i = 0, pCurrentInput = hIvasRend->inputsMasa ); i < RENDERER_MAX_MASA_INPUTS; ( ++i, ++pCurrentInput ) ) { - return IVAS_ERR_MISSING_METADATA; - } - - inAudio = masaInput->base.inputBuffer; - if ( masaInput->base.numNewSamplesPerChannel != outAudio.config.numSamplesPerChannel ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Mismatch between the number of input samples vs number of requested output samples - currently not allowed" ); - } - masaInput->base.numNewSamplesPerChannel = 0; - - /* Apply input gain to new audio */ - v_multc( inAudio.data, masaInput->base.gain, inAudio.data, inAudio.config.numSamplesPerChannel * inAudio.config.numChannels ); - - maxBin = (int16_t) ( *masaInput->base.ctx.pOutSampleRate * INV_CLDFB_BANDWIDTH ); - - /* set combined orientation subframe info to start info */ - ivas_combined_orientation_set_to_start_index( *( masaInput->base.ctx.pCombinedOrientationData ) ); - - if ( getAudioConfigType( outConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - /* MASA prerendering path for MASA -> MASA */ - renderMasaToMasa( masaInput, outAudio ); - } - else - { - /* MASA external renderer -> other formats */ - int16_t num_subframes; - for ( ch = 0; ch < MAX_OUTPUT_CHANNELS; ch++ ) - { - tmpBuffer[ch] = tmpBuffer_buff[ch]; - } - - copyBufferTo2dArray( masaInput->base.inputBuffer, tmpBuffer_buff ); - - num_subframes = (int16_t) ( masaInput->base.inputBuffer.config.numSamplesPerChannel / ( *masaInput->base.ctx.pOutSampleRate / ( IVAS_NUM_FRAMES_PER_SEC * MAX_PARAM_SPATIAL_SUBFRAMES ) ) ); - - switch ( masaInput->hMasaExtRend->renderer_type ) - { - case RENDERER_DIRAC: - copyMasaMetadataToDiracRenderer( &masaInput->masaMetadata, masaInput->hMasaExtRend->hSpatParamRendCom, maxBin ); - ivas_masa_ext_dirac_render( masaInput->hMasaExtRend, tmpBuffer, num_subframes ); - break; - case RENDERER_STEREO_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC: - case RENDERER_BINAURAL_PARAMETRIC_ROOM: - copyMasaMetadataToDiracRenderer( &masaInput->masaMetadata, masaInput->hMasaExtRend->hSpatParamRendCom, maxBin ); - ivas_masa_ext_rend_parambin_render( masaInput->hMasaExtRend, *masaInput->base.ctx.pCombinedOrientationData, tmpBuffer, num_subframes ); - break; - case RENDERER_DISABLE: - break; /* This happens for 1TC MASA to MONO where we just copy input transport to output */ - default: - return ( IVAS_ERROR( IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED, "Wrong output config for MASA input in external renderer\n" ) ); - } - - accumulate2dArrayToBuffer( tmpBuffer_buff, &outAudio ); - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED -static ivas_error renderActiveInputsMasa( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) -{ - Word16 i; - input_masa *pCurrentInput; - ivas_error error; - - FOR( ( i = 0, pCurrentInput = hIvasRend->inputsMasa ); i < RENDERER_MAX_MASA_INPUTS; ( ++i, ++pCurrentInput ) ) - { - IF( EQ_16( pCurrentInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) - { - /* Skip inactive inputs */ - CONTINUE; - } + IF( EQ_16( pCurrentInput->base.inConfig, IVAS_AUDIO_CONFIG_INVALID ) ) + { + /* Skip inactive inputs */ + CONTINUE; + } *outAudio.pq_fact = Q8; move16(); @@ -12842,32 +6994,6 @@ static ivas_error renderActiveInputsMasa( return IVAS_ERR_OK; } -#else -static ivas_error renderActiveInputsMasa( - IVAS_REND_HANDLE hIvasRend, - IVAS_REND_AudioBuffer outAudio ) -{ - int16_t i; - input_masa *pCurrentInput; - ivas_error error; - - for ( i = 0, pCurrentInput = hIvasRend->inputsMasa; i < RENDERER_MAX_MASA_INPUTS; ++i, ++pCurrentInput ) - { - if ( pCurrentInput->base.inConfig == IVAS_AUDIO_CONFIG_INVALID ) - { - /* Skip inactive inputs */ - continue; - } - - if ( ( error = renderInputMasa( pCurrentInput, hIvasRend->outputConfig, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IVAS_REND_GetMasaMetadata( ) @@ -12875,7 +7001,6 @@ static ivas_error renderActiveInputsMasa( * Get metadata of the estimated MASA frame *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_GetMasaMetadata( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to analyzed MASA metadata */ @@ -12907,39 +7032,6 @@ ivas_error IVAS_REND_GetMasaMetadata( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_GetMasaMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to analyzed MASA metadata */ - const IVAS_REND_AudioConfigType inputType /* i : Input type */ -) -{ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Get the metadata handle */ - if ( inputType == IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED ) - { - *hMasaExtOutMeta = hIvasRend->inputsIsm->hOMasa->hMasaOut; - } - else if ( inputType == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - *hMasaExtOutMeta = hIvasRend->inputsMc->hMcMasa->hMasaOut; - } - else if ( inputType == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - *hMasaExtOutMeta = hIvasRend->inputsSba->hDirAC->hMasaOut; - } - else - { - return IVAS_ERR_NOT_SUPPORTED_OPTION; - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* @@ -12948,7 +7040,6 @@ ivas_error IVAS_REND_GetMasaMetadata( * Merge MASA metadata from two formats *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_MergeMasaMetadata( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to merged metadata */ @@ -13045,83 +7136,6 @@ ivas_error IVAS_REND_MergeMasaMetadata( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_MergeMasaMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - MASA_DECODER_EXT_OUT_META_HANDLE *hMasaExtOutMeta, /* o : pointer to handle, which will be set to point to merged metadata */ - const IVAS_REND_AudioConfigType inputType1, /* i : Input type 1 */ - const IVAS_REND_AudioConfigType inputType2 /* i : Input type 2 */ -) -{ - MASA_DECODER_EXT_OUT_META_HANDLE inMeta2; - float( *inEne1 )[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - float( *inEne2 )[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; - - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* Input1 metadata and energy */ - if ( inputType1 == IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED ) - { - *hMasaExtOutMeta = hIvasRend->inputsIsm->hOMasa->hMasaOut; - inEne1 = &( hIvasRend->inputsIsm->hOMasa->energy ); - } - else if ( inputType1 == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - *hMasaExtOutMeta = hIvasRend->inputsMc->hMcMasa->hMasaOut; - inEne1 = &( hIvasRend->inputsMc->hMcMasa->energy ); - } - else if ( inputType1 == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - *hMasaExtOutMeta = hIvasRend->inputsSba->hDirAC->hMasaOut; - inEne1 = &( hIvasRend->inputsSba->hDirAC->energy ); - } - else if ( inputType1 == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - *hMasaExtOutMeta = hIvasRend->inputsMasa->hMasaPrerend->hMasaOut; - inEne1 = &( hIvasRend->inputsMasa->hMasaPrerend->energy ); - } - else - { - return IVAS_ERR_NOT_SUPPORTED_OPTION; - } - - /* Input2 metadata and energy */ - if ( inputType2 == IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED ) - { - inMeta2 = hIvasRend->inputsIsm->hOMasa->hMasaOut; - inEne2 = &( hIvasRend->inputsIsm->hOMasa->energy ); - } - else if ( inputType2 == IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) - { - inMeta2 = hIvasRend->inputsMc->hMcMasa->hMasaOut; - inEne2 = &( hIvasRend->inputsMc->hMcMasa->energy ); - } - else if ( inputType2 == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) - { - inMeta2 = hIvasRend->inputsSba->hDirAC->hMasaOut; - inEne2 = &( hIvasRend->inputsSba->hDirAC->energy ); - } - else if ( inputType2 == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - inMeta2 = hIvasRend->inputsMasa->hMasaPrerend->hMasaOut; - inEne2 = &( hIvasRend->inputsMasa->hMasaPrerend->energy ); - } - else - { - return IVAS_ERR_NOT_SUPPORTED_OPTION; - } - - /* Merge metadata */ - ivas_prerend_merge_masa_metadata( *hMasaExtOutMeta, *hMasaExtOutMeta, inputType1, *inEne1, inMeta2, inputType2, *inEne2 ); - ( *hMasaExtOutMeta )->descriptiveMeta.numberOfChannels = hIvasRend->outputConfig == IVAS_AUDIO_CONFIG_MASA1 ? 0u : 1u; - - return IVAS_ERR_OK; -} - -#endif // IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * IVAS_REND_SetTotalNumberOfObjects( ) @@ -13129,7 +7143,6 @@ ivas_error IVAS_REND_MergeMasaMetadata( * Set the total number of objects to the first object data *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetTotalNumberOfObjects( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ const UWord16 total_num_objects /* i : total number of objects */ @@ -13145,22 +7158,6 @@ ivas_error IVAS_REND_SetTotalNumberOfObjects( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetTotalNumberOfObjects( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - const uint16_t total_num_objects /* i : total number of objects */ -) -{ - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - hIvasRend->inputsIsm[0].total_num_objects = total_num_objects; - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* @@ -13168,7 +7165,6 @@ ivas_error IVAS_REND_SetTotalNumberOfObjects( * * Set the Metadata Delay in ms in order to sync with audio delay *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetIsmMetadataDelay( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ const Word32 sync_md_delay /* i : ISM Metadata Delay in ms to sync with audio delay */ @@ -13188,28 +7184,7 @@ ivas_error IVAS_REND_SetIsmMetadataDelay( return IVAS_ERR_OK; } -#else -ivas_error IVAS_REND_SetIsmMetadataDelay( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - const float sync_md_delay /* i : ISM Metadata Delay in ms to sync with audio delay */ -) -{ - int16_t i; - - if ( hIvasRend == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) - { - hIvasRend->inputsIsm[i].ism_metadata_delay_ms = sync_md_delay; - } - - return IVAS_ERR_OK; -} -#endif -#ifdef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * getSamplesInternal() * @@ -13359,698 +7334,104 @@ static ivas_error getSamplesInternal( return IVAS_ERR_OK; } -#else + /*-------------------------------------------------------------------* - * getSamplesInternal() + * IVAS_REND_GetSamples() * * *-------------------------------------------------------------------*/ -static ivas_error getSamplesInternal( +ivas_error IVAS_REND_GetSamples( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ IVAS_REND_AudioBuffer outAudio /* i/o: buffer for output audio */ ) { - ivas_error error; - int16_t numOutChannels; - - /* Validate function arguments */ - if ( hIvasRend == NULL || outAudio.data == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - if ( outAudio.config.numSamplesPerChannel <= 0 || MAX_BUFFER_LENGTH_PER_CHANNEL < outAudio.config.numSamplesPerChannel ) - { - return IVAS_ERR_INVALID_BUFFER_SIZE; - } - - if ( outAudio.config.numChannels <= 0 || MAX_OUTPUT_CHANNELS < outAudio.config.numChannels ) - { - return IVAS_ERR_WRONG_NUM_CHANNELS; - } - - if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL && - outAudio.config.numSamplesPerChannel * 1000 != ( hIvasRend->num_subframes * BINAURAL_RENDERING_FRAME_SIZE_MS ) * hIvasRend->sampleRateOut ) - { - return IVAS_ERROR( IVAS_ERR_INVALID_BUFFER_SIZE, "Binaural rendering requires specific frame size" ); - } - - /* Check that there is allowed configuration for MASA format output */ - if ( getAudioConfigType( hIvasRend->outputConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) - { - int16_t i; - int16_t numMasaInputs = 0; - int16_t numOtherInputs = 0; - - for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; i++ ) - { - numMasaInputs += hIvasRend->inputsMasa[i].base.inConfig == IVAS_AUDIO_CONFIG_INVALID ? 0 : 1; - } - - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; i++ ) - { - numOtherInputs += hIvasRend->inputsMc[i].base.inConfig == IVAS_AUDIO_CONFIG_INVALID ? 0 : 1; - } - - for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; i++ ) - { - numOtherInputs += hIvasRend->inputsSba[i].base.inConfig == IVAS_AUDIO_CONFIG_INVALID ? 0 : 1; - } - - /* For ISM, we check only first as all ISMs are handled together via OMASA when merging to MASA. */ - numOtherInputs += hIvasRend->inputsIsm[0].base.inConfig == IVAS_AUDIO_CONFIG_INVALID ? 0 : 1; - if ( numMasaInputs == 0 || numOtherInputs == 0 ) - { - return IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED; - } - } + return getSamplesInternal( hIvasRend, outAudio ); +} - if ( ( error = IVAS_REND_NumOutChannels( hIvasRend, &numOutChannels ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( numOutChannels != outAudio.config.numChannels ) - { - return IVAS_ERR_WRONG_NUM_CHANNELS; - } +/*-------------------------------------------------------------------* + * IVAS_REND_Close() + * + * + *-------------------------------------------------------------------*/ - /* Clear original output buffer */ - set_zero( outAudio.data, outAudio.config.numChannels * outAudio.config.numSamplesPerChannel ); +void IVAS_REND_Close( + IVAS_REND_HANDLE *phIvasRend /* i/o: Pointer to renderer handle */ +) +{ + UWord16 i; + IVAS_REND_HANDLE hIvasRend; - if ( ( error = renderActiveInputsIsm( hIvasRend, outAudio ) ) != IVAS_ERR_OK ) + /* Validate function arguments */ + test(); + IF( phIvasRend == NULL || *phIvasRend == NULL ) { - return error; + return; } + hIvasRend = *phIvasRend; - if ( ( error = renderActiveInputsMc( hIvasRend, outAudio ) ) != IVAS_ERR_OK ) - { - return error; - } - if ( ( error = renderActiveInputsSba( hIvasRend, outAudio ) ) != IVAS_ERR_OK ) + IF( hIvasRend->efapOutWrapper.hEfap != NULL ) { - return error; + efap_free_data_fx( &hIvasRend->efapOutWrapper.hEfap ); } - if ( ( error = renderActiveInputsMasa( hIvasRend, outAudio ) ) != IVAS_ERR_OK ) + /* clear inputs */ + FOR( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) { - return error; - } - - -#ifndef DISABLE_LIMITER - limitRendererOutput( hIvasRend->hLimiter, outAudio.data, outAudio.config.numSamplesPerChannel, IVAS_LIMITER_THRESHOLD ); -#endif - - /* update global cominbed orientation start index */ - ivas_combined_orientation_update_start_index( hIvasRend->hCombinedOrientationData, outAudio.config.numSamplesPerChannel ); - - return IVAS_ERR_OK; -} -#endif - -/*-------------------------------------------------------------------* - * IVAS_REND_GetSamples() - * - * - *-------------------------------------------------------------------*/ - -ivas_error IVAS_REND_GetSamples( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_REND_AudioBuffer outAudio /* i/o: buffer for output audio */ -) -{ - - return getSamplesInternal( hIvasRend, outAudio ); -} - - -/*-------------------------------------------------------------------* - * IVAS_REND_Close() - * - * - *-------------------------------------------------------------------*/ - - -#ifdef IVAS_FLOAT_FIXED -void IVAS_REND_Close( - IVAS_REND_HANDLE *phIvasRend /* i/o: Pointer to renderer handle */ -) -{ - UWord16 i; - IVAS_REND_HANDLE hIvasRend; - - /* Validate function arguments */ - test(); - IF( phIvasRend == NULL || *phIvasRend == NULL ) - { - return; - } - hIvasRend = *phIvasRend; - - IF( hIvasRend->efapOutWrapper.hEfap != NULL ) - { - efap_free_data_fx( &hIvasRend->efapOutWrapper.hEfap ); - } - - /* clear inputs */ - FOR( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) - { - clearInputIsm( &hIvasRend->inputsIsm[i] ); + clearInputIsm( &hIvasRend->inputsIsm[i] ); } FOR( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - clearInputMc( &hIvasRend->inputsMc[i] ); - } - FOR( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) - { - clearInputSba( &hIvasRend->inputsSba[i] ); - } - FOR( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) - { - clearInputMasa( &hIvasRend->inputsMasa[i] ); - } - - /* clear Config. Renderer */ - ivas_render_config_close( &( hIvasRend->hRendererConfig ) ); - - ivas_limiter_close_fx( &hIvasRend->hLimiter ); - - - closeHeadRotation( hIvasRend ); - - ivas_external_orientation_close_fx( &hIvasRend->hExternalOrientationData ); - ivas_combined_orientation_close_fx( &hIvasRend->hCombinedOrientationData ); - - free( hIvasRend ); - *phIvasRend = NULL; - - return; -} -#else -void IVAS_REND_Close( - IVAS_REND_HANDLE *phIvasRend /* i/o: Pointer to renderer handle */ -) -{ - uint16_t i; - IVAS_REND_HANDLE hIvasRend; - - /* Validate function arguments */ - if ( phIvasRend == NULL || *phIvasRend == NULL ) - { - return; - } - hIvasRend = *phIvasRend; - - if ( hIvasRend->efapOutWrapper.hEfap != NULL ) - { - efap_free_data( &hIvasRend->efapOutWrapper.hEfap ); - } - - /* clear inputs */ - for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) - { - clearInputIsm( &hIvasRend->inputsIsm[i] ); - } - for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) - { - clearInputMc( &hIvasRend->inputsMc[i] ); - } - for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) - { - clearInputSba( &hIvasRend->inputsSba[i] ); - } - for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) - { - clearInputMasa( &hIvasRend->inputsMasa[i] ); - } - - /* clear Config. Renderer */ - ivas_render_config_close( &( hIvasRend->hRendererConfig ) ); - - ivas_limiter_close( &hIvasRend->hLimiter ); - - - closeHeadRotation( hIvasRend ); - - ivas_external_orientation_close( &hIvasRend->hExternalOrientationData ); - ivas_combined_orientation_close( &hIvasRend->hCombinedOrientationData ); - - free( hIvasRend ); - *phIvasRend = NULL; - - return; -} -#endif - -#ifdef IVAS_FLOAT_FIXED -static ivas_error ivas_masa_ext_rend_dirac_rend_init( - input_masa *inputMasa ) -{ - Word16 nchan_out_woLFE; - Word16 nchan_transport; - UWord16 i, j, k; - Word32 ls_azimuth_fx[MAX_OUTPUT_CHANNELS]; /*Q22*/ - Word32 ls_elevation_fx[MAX_OUTPUT_CHANNELS]; /*Q22*/ - Word32 output_Fs; - ivas_error error; - DIRAC_REND_HANDLE hDirACRend; - SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; - - error = IVAS_ERR_OK; - move32(); - - hDirACRend = NULL; - output_Fs = *( inputMasa->base.ctx.pOutSampleRate ); - move32(); - - hSpatParamRendCom = inputMasa->hMasaExtRend->hSpatParamRendCom; - - /*-----------------------------------------------------------------* - * prepare library opening - *-----------------------------------------------------------------*/ - - IF( ( hDirACRend = (DIRAC_REND_HANDLE) malloc( sizeof( DIRAC_REND_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC renderer\n" ) ); - } - - IF( EQ_16( inputMasa->base.inConfig, IVAS_AUDIO_CONFIG_MASA2 ) ) - { - nchan_transport = 2; - move16(); - } - ELSE - { - nchan_transport = 1; - move16(); - } - - /*-----------------------------------------------------------------* - * output setup: for parametric binaural renderer, use output setup, otherwise internal setup - *-----------------------------------------------------------------*/ - - ivas_output_init( &hDirACRend->hOutSetup, *inputMasa->base.ctx.pOutConfig ); - - IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) - { - /* Copy from ivas_ls_custom_setup */ - hDirACRend->hOutSetup.nchan_out_woLFE = inputMasa->base.ctx.pCustomLsOut->num_spk; - move16(); - hDirACRend->hOutSetup.ls_azimuth_fx = inputMasa->base.ctx.pCustomLsOut->ls_azimuth_fx; - hDirACRend->hOutSetup.ls_elevation_fx = inputMasa->base.ctx.pCustomLsOut->ls_elevation_fx; - - hDirACRend->hOutSetup.num_lfe = inputMasa->base.ctx.pCustomLsOut->num_lfe; - move16(); - hDirACRend->hOutSetup.index_lfe[0] = inputMasa->base.ctx.pCustomLsOut->lfe_idx[0]; - move16(); - - hDirACRend->hOutSetup.is_loudspeaker_setup = TRUE; - move16(); - hDirACRend->hOutSetup.is_planar_setup = (Word8) inputMasa->base.ctx.pCustomLsOut->is_planar_setup; - move16(); - } - - nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; - move16(); - - test(); - IF( hDirACRend->hOutSetup.ls_azimuth_fx != NULL && hDirACRend->hOutSetup.ls_elevation_fx != NULL ) - { - Copy32( hDirACRend->hOutSetup.ls_azimuth_fx, ls_azimuth_fx, nchan_out_woLFE ); - Copy32( hDirACRend->hOutSetup.ls_elevation_fx, ls_elevation_fx, nchan_out_woLFE ); - } - - IF( EQ_16( hDirACRend->hOutSetup.ambisonics_order, -1 ) ) - { - hDirACRend->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; /* Order 3 is used by default in DirAC for SHD processing */ - move16(); - test(); - if ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) || EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_STEREO ) ) - { - hDirACRend->hOutSetup.ambisonics_order = SBA_FOA_ORDER; - move16(); - } - } - ELSE IF( GE_16( hDirACRend->hOutSetup.ambisonics_order, SBA_FOA_ORDER ) ) - { - Copy32( ls_azimuth_4d4_fx, ls_azimuth_fx, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); - Copy32( ls_elevation_4d4_fx, ls_elevation_fx, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); - } - - /*-----------------------------------------------------------------* - * set input parameters - *-----------------------------------------------------------------*/ - - test(); - IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) ) - { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_MONO; - move32(); - hDirACRend->panningConf = DIRAC_PANNING_HOA3; - move32(); - nchan_out_woLFE = 1; - move16(); - } - ELSE IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) - { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; - hDirACRend->panningConf = DIRAC_PANNING_VBAP; - move32(); - move32(); - } - ELSE IF( !hDirACRend->hOutSetup.is_loudspeaker_setup && GT_16( nchan_transport, 1 ) ) - { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_SHD; - move32(); - hDirACRend->panningConf = DIRAC_PANNING_HOA3; - move32(); - } - ELSE - { - hDirACRend->synthesisConf = DIRAC_SYNTHESIS_GAIN_SHD; - move32(); - hDirACRend->panningConf = DIRAC_PANNING_HOA3; - move32(); - } - - IF( ( hDirACRend->frequency_axis_fx = (Word16 *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( Word16 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - set16_fx( hDirACRend->frequency_axis_fx, 0, hSpatParamRendCom->num_freq_bands ); - ivas_dirac_dec_get_frequency_axis_fx( hDirACRend->frequency_axis_fx, output_Fs, hSpatParamRendCom->num_freq_bands ); - - - test(); - IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_HOA3 ) && EQ_16( nchan_transport, 2 ) ) - { - IF( ( hDirACRend->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - ivas_masa_init_stereotype_detection_fx( hDirACRend->masa_stereo_type_detect ); - } - ELSE - { - hDirACRend->masa_stereo_type_detect = NULL; - } - - hSpatParamRendCom->numIsmDirections = 0; - move16(); - - /*-----------------------------------------------------------------* - * (re)configure sub-modules - *-----------------------------------------------------------------*/ - - /* prototype signal computation */ - /* allocate output setup related arrays */ - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) - { - /* Directional and diffuses components in output LS format */ - hDirACRend->num_outputs_diff = nchan_out_woLFE; - move16(); - hDirACRend->num_outputs_dir = nchan_out_woLFE; - move16(); - } - ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - /* Directional and diffuses components in SHD */ - /* Diffuseness components up to 1st order */ - hDirACRend->num_outputs_diff = imult1616( add( s_min( hDirACRend->hOutSetup.ambisonics_order, 1 ), 1 ), ( add( s_min( hDirACRend->hOutSetup.ambisonics_order, 1 ), 1 ) ) ); - hDirACRend->num_outputs_dir = ivas_sba_get_nchan_fx( hDirACRend->hOutSetup.ambisonics_order, 0 ); - } - ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) - { - hDirACRend->num_outputs_diff = DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS; - move16(); - hDirACRend->num_outputs_dir = nchan_out_woLFE; - move16(); - } - ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - hDirACRend->num_outputs_diff = 1; /* There is one output channel in mono */ - move16(); - hDirACRend->num_outputs_dir = 2; /* Two channels are pre-rendered for stereo type detection */ - move16(); - } - ELSE - { - assert( 0 && "DirAC: not existing synthesis methods!" ); - } - - IF( ( hDirACRend->proto_index_dir = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - IF( ( hDirACRend->proto_index_diff = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_diff ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - set16_fx( hDirACRend->proto_index_dir, 0, hDirACRend->num_outputs_dir ); - set16_fx( hDirACRend->proto_index_diff, 0, hDirACRend->num_outputs_diff ); - - hDirACRend->sba_map_tc = sba_map_tc; - - IF( EQ_16( nchan_transport, 1 ) ) - { - hDirACRend->num_protos_ambi = 1; - move16(); - hDirACRend->num_protos_dir = 1; - move16(); - hDirACRend->num_protos_diff = 1; - move16(); - } - ELSE IF( EQ_16( nchan_transport, 2 ) ) - { - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - hDirACRend->num_protos_ambi = 2; - move16(); - hDirACRend->num_protos_diff = 1; - move16(); - hDirACRend->num_protos_dir = 2; - move16(); - hDirACRend->proto_index_dir[1] = 1; - move16(); - } - ELSE IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) ) - { - /* Following the foa rendering for code compatibility */ - hDirACRend->num_protos_ambi = 2; - move16(); - hDirACRend->num_protos_dir = 2; - move16(); - hDirACRend->num_protos_diff = 3; - move16(); - hDirACRend->proto_index_dir[0] = 0; - move16(); - hDirACRend->proto_index_diff[0] = 0; - move16(); - } - ELSE - { - hDirACRend->num_protos_ambi = 2; - move16(); - hDirACRend->num_protos_diff = 3; - move16(); - - FOR( k = 0; k < hDirACRend->num_outputs_diff; k++ ) - { - IF( ls_azimuth_fx[k] > 0 ) - { - hDirACRend->proto_index_diff[k] = 1; - } - ELSE IF( ls_azimuth_fx[k] < 0 ) - { - hDirACRend->proto_index_diff[k] = 2; - } - ELSE - { - hDirACRend->proto_index_diff[k] = 0; - } - move16(); - } - - IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) - { - hDirACRend->num_protos_dir = 3; - move16(); - Copy( hDirACRend->proto_index_diff, hDirACRend->proto_index_dir, nchan_out_woLFE ); - } - ELSE - { - hDirACRend->num_protos_dir = 2; - move16(); - hDirACRend->proto_index_dir[1] = 1; - move16(); - } - } - } - - /* direct/diffuse responses */ - - IF( ( hDirACRend->diffuse_response_function_fx = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_dir ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - test(); - test(); - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - initDiffuseResponses_fx( hDirACRend->diffuse_response_function_fx, nchan_out_woLFE, hDirACRend->hOutSetup.output_config, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); - } - ELSE - { - initDiffuseResponses_fx( hDirACRend->diffuse_response_function_fx, hDirACRend->num_outputs_dir, IVAS_AUDIO_CONFIG_FOA, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); - } - - hDirACRend->hoa_encoder_fx = NULL; - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) - { - IF( ( hDirACRend->hoa_encoder_fx = (Word32 *) malloc( nchan_out_woLFE * hDirACRend->num_outputs_diff * sizeof( Word32 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - - set32_fx( hDirACRend->hoa_encoder_fx, 0, imult1616( nchan_out_woLFE, hDirACRend->num_outputs_diff ) ); - compute_hoa_encoder_mtx_fx( ls_azimuth_fx, ls_elevation_fx, hDirACRend->hoa_encoder_fx, hDirACRend->num_outputs_diff, hDirACRend->hOutSetup.ambisonics_order ); - } - - /* VBAP */ - inputMasa->hMasaExtRend->hVBAPdata = NULL; - - IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_VBAP ) ) - { - IF( NE_32( ( error = vbap_init_data_fx( &( inputMasa->hMasaExtRend->hVBAPdata ), ls_azimuth_fx, ls_elevation_fx, nchan_out_woLFE, MASA_FORMAT ) ), IVAS_ERR_OK ) ) - { - return error; - } - } - - /* HOA panning/dec */ - hDirACRend->hoa_decoder = NULL; - IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_HOA3 ) ) - { - IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) - { - IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( hDirACRend->hOutSetup, &inputMasa->hMasaExtRend->hoa_dec_mtx, hDirACRend->hOutSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) - { - return error; - } - - hDirACRend->hoa_decoder = inputMasa->hMasaExtRend->hoa_dec_mtx; - } - } - - /* decorrelation */ - hDirACRend->proto_signal_decorr_on = 1; - move16(); - if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) - { - hDirACRend->proto_signal_decorr_on = 0; - move16(); - } - - IF( hDirACRend->proto_signal_decorr_on ) - { - IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( hDirACRend->h_freq_domain_decorr_ap_params ), - &( hDirACRend->h_freq_domain_decorr_ap_state ), - hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - hDirACRend->frequency_axis_fx, - nchan_transport, - output_Fs ) ), - IVAS_ERR_OK ) ) - { - return error; - } - } - - /* output synthesis */ - IF( NE_32( ( ivas_dirac_dec_output_synthesis_open_fx( hSpatParamRendCom, hDirACRend, RENDERER_DIRAC, nchan_transport, output_Fs, 0 ) ), IVAS_ERR_OK ) ) - { - return error; - } - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = hDirACRend->proto_signal_decorr_on; - move16(); - - test(); - if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) - { - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = 0; - move16(); + { + clearInputMc( &hIvasRend->inputsMc[i] ); } - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) + FOR( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) { - hDirACRend->proto_frame_f_fx = NULL; + clearInputSba( &hIvasRend->inputsSba[i] ); } - ELSE + FOR( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) { - IF( ( hDirACRend->proto_frame_f_fx = (Word32 *) malloc( sizeof( Word32 ) * shl( imult1616( hDirACRend->num_protos_diff, hSpatParamRendCom->num_freq_bands ), 1 ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - hDirACRend->proto_frame_f_len = shl( imult1616( hDirACRend->num_protos_diff, hSpatParamRendCom->num_freq_bands ), 1 ); - move16(); + clearInputMasa( &hIvasRend->inputsMasa[i] ); } + /* clear Config. Renderer */ + ivas_render_config_close( &( hIvasRend->hRendererConfig ) ); - hDirACRend->buffer_energy_fx = NULL; - FOR( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - FOR( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - hDirACRend->buffer_intensity_real_fx[i][j] = NULL; - } - } + ivas_limiter_close_fx( &hIvasRend->hLimiter ); - /* output synthesis */ - ivas_dirac_dec_output_synthesis_init_fx( hSpatParamRendCom, hDirACRend, nchan_out_woLFE, 0 ); - /* Allocate stack memory */ - IF( NE_32( ( error = ivas_dirac_alloc_mem_fx( hDirACRend, RENDERER_DIRAC, hSpatParamRendCom->num_freq_bands, &( hDirACRend->stack_mem ), 0 ) ), IVAS_ERR_OK ) ) - { - return error; - } + closeHeadRotation( hIvasRend ); - inputMasa->hMasaExtRend->hDirACRend = hDirACRend; + ivas_external_orientation_close_fx( &hIvasRend->hExternalOrientationData ); + ivas_combined_orientation_close_fx( &hIvasRend->hCombinedOrientationData ); - return error; + free( hIvasRend ); + *phIvasRend = NULL; + + return; } -#else + static ivas_error ivas_masa_ext_rend_dirac_rend_init( input_masa *inputMasa ) { - int16_t nchan_out_woLFE; - int16_t nchan_transport; - uint16_t i, j, k; - float ls_azimuth[MAX_OUTPUT_CHANNELS]; - float ls_elevation[MAX_OUTPUT_CHANNELS]; - int32_t output_Fs; + Word16 nchan_out_woLFE; + Word16 nchan_transport; + UWord16 i, j, k; + Word32 ls_azimuth_fx[MAX_OUTPUT_CHANNELS]; /*Q22*/ + Word32 ls_elevation_fx[MAX_OUTPUT_CHANNELS]; /*Q22*/ + Word32 output_Fs; ivas_error error; DIRAC_REND_HANDLE hDirACRend; SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; error = IVAS_ERR_OK; + move32(); hDirACRend = NULL; output_Fs = *( inputMasa->base.ctx.pOutSampleRate ); + move32(); hSpatParamRendCom = inputMasa->hMasaExtRend->hSpatParamRendCom; @@ -14058,12 +7439,21 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( * prepare library opening *-----------------------------------------------------------------*/ - if ( ( hDirACRend = (DIRAC_REND_HANDLE) malloc( sizeof( DIRAC_REND_DATA ) ) ) == NULL ) + IF( ( hDirACRend = (DIRAC_REND_HANDLE) malloc( sizeof( DIRAC_REND_DATA ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC renderer\n" ) ); } - nchan_transport = inputMasa->base.inConfig == IVAS_AUDIO_CONFIG_MASA2 ? 2 : 1; + IF( EQ_16( inputMasa->base.inConfig, IVAS_AUDIO_CONFIG_MASA2 ) ) + { + nchan_transport = 2; + move16(); + } + ELSE + { + nchan_transport = 1; + move16(); + } /*-----------------------------------------------------------------* * output setup: for parametric binaural renderer, use output setup, otherwise internal setup @@ -14071,90 +7461,112 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( ivas_output_init( &hDirACRend->hOutSetup, *inputMasa->base.ctx.pOutConfig ); - if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) + IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_LS_CUSTOM ) ) { /* Copy from ivas_ls_custom_setup */ hDirACRend->hOutSetup.nchan_out_woLFE = inputMasa->base.ctx.pCustomLsOut->num_spk; - hDirACRend->hOutSetup.ls_azimuth = inputMasa->base.ctx.pCustomLsOut->ls_azimuth; - hDirACRend->hOutSetup.ls_elevation = inputMasa->base.ctx.pCustomLsOut->ls_elevation; + move16(); + hDirACRend->hOutSetup.ls_azimuth_fx = inputMasa->base.ctx.pCustomLsOut->ls_azimuth_fx; + hDirACRend->hOutSetup.ls_elevation_fx = inputMasa->base.ctx.pCustomLsOut->ls_elevation_fx; hDirACRend->hOutSetup.num_lfe = inputMasa->base.ctx.pCustomLsOut->num_lfe; + move16(); hDirACRend->hOutSetup.index_lfe[0] = inputMasa->base.ctx.pCustomLsOut->lfe_idx[0]; + move16(); hDirACRend->hOutSetup.is_loudspeaker_setup = TRUE; - hDirACRend->hOutSetup.is_planar_setup = (int8_t) inputMasa->base.ctx.pCustomLsOut->is_planar_setup; + move16(); + hDirACRend->hOutSetup.is_planar_setup = (Word8) inputMasa->base.ctx.pCustomLsOut->is_planar_setup; + move16(); } nchan_out_woLFE = hDirACRend->hOutSetup.nchan_out_woLFE; + move16(); - if ( hDirACRend->hOutSetup.ls_azimuth != NULL && hDirACRend->hOutSetup.ls_elevation != NULL ) + test(); + IF( hDirACRend->hOutSetup.ls_azimuth_fx != NULL && hDirACRend->hOutSetup.ls_elevation_fx != NULL ) { - mvr2r( hDirACRend->hOutSetup.ls_azimuth, ls_azimuth, nchan_out_woLFE ); - mvr2r( hDirACRend->hOutSetup.ls_elevation, ls_elevation, nchan_out_woLFE ); + Copy32( hDirACRend->hOutSetup.ls_azimuth_fx, ls_azimuth_fx, nchan_out_woLFE ); + Copy32( hDirACRend->hOutSetup.ls_elevation_fx, ls_elevation_fx, nchan_out_woLFE ); } - if ( hDirACRend->hOutSetup.ambisonics_order == -1 ) + IF( EQ_16( hDirACRend->hOutSetup.ambisonics_order, -1 ) ) { hDirACRend->hOutSetup.ambisonics_order = SBA_HOA3_ORDER; /* Order 3 is used by default in DirAC for SHD processing */ - if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO || hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_STEREO ) + move16(); + test(); + if ( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) || EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_STEREO ) ) { hDirACRend->hOutSetup.ambisonics_order = SBA_FOA_ORDER; + move16(); } } - else if ( hDirACRend->hOutSetup.ambisonics_order >= SBA_FOA_ORDER ) + ELSE IF( GE_16( hDirACRend->hOutSetup.ambisonics_order, SBA_FOA_ORDER ) ) { - mvr2r( ls_azimuth_4d4, ls_azimuth, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); - mvr2r( ls_elevation_4d4, ls_elevation, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); + Copy32( ls_azimuth_4d4_fx, ls_azimuth_fx, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); + Copy32( ls_elevation_4d4_fx, ls_elevation_fx, DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS ); } /*-----------------------------------------------------------------* * set input parameters *-----------------------------------------------------------------*/ - if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO ) + test(); + IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) ) { hDirACRend->synthesisConf = DIRAC_SYNTHESIS_MONO; + move32(); hDirACRend->panningConf = DIRAC_PANNING_HOA3; + move32(); nchan_out_woLFE = 1; + move16(); } - else if ( hDirACRend->hOutSetup.is_loudspeaker_setup ) + ELSE IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) { hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_LS; hDirACRend->panningConf = DIRAC_PANNING_VBAP; + move32(); + move32(); } - else if ( !hDirACRend->hOutSetup.is_loudspeaker_setup && nchan_transport > 1 ) + ELSE IF( !hDirACRend->hOutSetup.is_loudspeaker_setup && GT_16( nchan_transport, 1 ) ) { hDirACRend->synthesisConf = DIRAC_SYNTHESIS_PSD_SHD; + move32(); hDirACRend->panningConf = DIRAC_PANNING_HOA3; + move32(); } - else + ELSE { hDirACRend->synthesisConf = DIRAC_SYNTHESIS_GAIN_SHD; + move32(); hDirACRend->panningConf = DIRAC_PANNING_HOA3; + move32(); } - if ( ( hDirACRend->frequency_axis = (float *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( float ) ) ) == NULL ) + IF( ( hDirACRend->frequency_axis_fx = (Word16 *) malloc( hSpatParamRendCom->num_freq_bands * sizeof( Word16 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - set_f( hDirACRend->frequency_axis, 0.0f, hSpatParamRendCom->num_freq_bands ); + set16_fx( hDirACRend->frequency_axis_fx, 0, hSpatParamRendCom->num_freq_bands ); + ivas_dirac_dec_get_frequency_axis_fx( hDirACRend->frequency_axis_fx, output_Fs, hSpatParamRendCom->num_freq_bands ); - ivas_dirac_dec_get_frequency_axis( hDirACRend->frequency_axis, output_Fs, hSpatParamRendCom->num_freq_bands ); - if ( hDirACRend->panningConf == DIRAC_PANNING_HOA3 && nchan_transport == 2 ) + test(); + IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_HOA3 ) && EQ_16( nchan_transport, 2 ) ) { - if ( ( hDirACRend->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ) ) == NULL ) + IF( ( hDirACRend->masa_stereo_type_detect = (MASA_STEREO_TYPE_DETECT *) malloc( sizeof( MASA_STEREO_TYPE_DETECT ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - ivas_masa_init_stereotype_detection( hDirACRend->masa_stereo_type_detect ); + ivas_masa_init_stereotype_detection_fx( hDirACRend->masa_stereo_type_detect ); } - else + ELSE { hDirACRend->masa_stereo_type_detect = NULL; } hSpatParamRendCom->numIsmDirections = 0; + move16(); /*-----------------------------------------------------------------* * (re)configure sub-modules @@ -14162,142 +7574,169 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( /* prototype signal computation */ /* allocate output setup related arrays */ - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) ) { /* Directional and diffuses components in output LS format */ hDirACRend->num_outputs_diff = nchan_out_woLFE; + move16(); hDirACRend->num_outputs_dir = nchan_out_woLFE; + move16(); } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { /* Directional and diffuses components in SHD */ /* Diffuseness components up to 1st order */ - hDirACRend->num_outputs_diff = ( min( hDirACRend->hOutSetup.ambisonics_order, 1 ) + 1 ) * ( min( hDirACRend->hOutSetup.ambisonics_order, 1 ) + 1 ); - hDirACRend->num_outputs_dir = ivas_sba_get_nchan( hDirACRend->hOutSetup.ambisonics_order, 0 ); + hDirACRend->num_outputs_diff = imult1616( add( s_min( hDirACRend->hOutSetup.ambisonics_order, 1 ), 1 ), ( add( s_min( hDirACRend->hOutSetup.ambisonics_order, 1 ), 1 ) ) ); + hDirACRend->num_outputs_dir = ivas_sba_get_nchan_fx( hDirACRend->hOutSetup.ambisonics_order, 0 ); } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) { hDirACRend->num_outputs_diff = DIRAC_HOA_RENDERING_NUM_VIRT_DECORR_LS; + move16(); hDirACRend->num_outputs_dir = nchan_out_woLFE; + move16(); } - else if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) + ELSE IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) { hDirACRend->num_outputs_diff = 1; /* There is one output channel in mono */ - hDirACRend->num_outputs_dir = 2; /* Two channels are pre-rendered for stereo type detection */ + move16(); + hDirACRend->num_outputs_dir = 2; /* Two channels are pre-rendered for stereo type detection */ + move16(); } - else + ELSE { assert( 0 && "DirAC: not existing synthesis methods!" ); } - if ( ( hDirACRend->proto_index_dir = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_dir ) ) == NULL ) + IF( ( hDirACRend->proto_index_dir = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_dir ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - if ( ( hDirACRend->proto_index_diff = (int16_t *) malloc( sizeof( int16_t ) * hDirACRend->num_outputs_diff ) ) == NULL ) + IF( ( hDirACRend->proto_index_diff = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_diff ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - set_s( hDirACRend->proto_index_dir, 0, hDirACRend->num_outputs_dir ); - set_s( hDirACRend->proto_index_diff, 0, hDirACRend->num_outputs_diff ); + set16_fx( hDirACRend->proto_index_dir, 0, hDirACRend->num_outputs_dir ); + set16_fx( hDirACRend->proto_index_diff, 0, hDirACRend->num_outputs_diff ); hDirACRend->sba_map_tc = sba_map_tc; - if ( nchan_transport == 1 ) + IF( EQ_16( nchan_transport, 1 ) ) { hDirACRend->num_protos_ambi = 1; + move16(); hDirACRend->num_protos_dir = 1; + move16(); hDirACRend->num_protos_diff = 1; + move16(); } - else if ( nchan_transport == 2 ) + ELSE IF( EQ_16( nchan_transport, 2 ) ) { - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { hDirACRend->num_protos_ambi = 2; + move16(); hDirACRend->num_protos_diff = 1; + move16(); hDirACRend->num_protos_dir = 2; + move16(); hDirACRend->proto_index_dir[1] = 1; + move16(); } - else if ( hDirACRend->hOutSetup.output_config == IVAS_AUDIO_CONFIG_MONO ) + ELSE IF( EQ_16( hDirACRend->hOutSetup.output_config, IVAS_AUDIO_CONFIG_MONO ) ) { /* Following the foa rendering for code compatibility */ hDirACRend->num_protos_ambi = 2; + move16(); hDirACRend->num_protos_dir = 2; + move16(); hDirACRend->num_protos_diff = 3; + move16(); hDirACRend->proto_index_dir[0] = 0; + move16(); hDirACRend->proto_index_diff[0] = 0; + move16(); } - else + ELSE { hDirACRend->num_protos_ambi = 2; + move16(); hDirACRend->num_protos_diff = 3; + move16(); - for ( k = 0; k < hDirACRend->num_outputs_diff; k++ ) + FOR( k = 0; k < hDirACRend->num_outputs_diff; k++ ) { - if ( ls_azimuth[k] > 0.0f ) + IF( ls_azimuth_fx[k] > 0 ) { hDirACRend->proto_index_diff[k] = 1; } - else if ( ls_azimuth[k] < 0.0f ) + ELSE IF( ls_azimuth_fx[k] < 0 ) { hDirACRend->proto_index_diff[k] = 2; } - else + ELSE { hDirACRend->proto_index_diff[k] = 0; } + move16(); } - if ( hDirACRend->hOutSetup.is_loudspeaker_setup ) + IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) { hDirACRend->num_protos_dir = 3; - mvs2s( hDirACRend->proto_index_diff, hDirACRend->proto_index_dir, nchan_out_woLFE ); + move16(); + Copy( hDirACRend->proto_index_diff, hDirACRend->proto_index_dir, nchan_out_woLFE ); } - else + ELSE { hDirACRend->num_protos_dir = 2; + move16(); hDirACRend->proto_index_dir[1] = 1; + move16(); } } } /* direct/diffuse responses */ - if ( ( hDirACRend->diffuse_response_function = (float *) malloc( sizeof( float ) * hDirACRend->num_outputs_dir ) ) == NULL ) + + IF( ( hDirACRend->diffuse_response_function_fx = (Word16 *) malloc( sizeof( Word16 ) * hDirACRend->num_outputs_dir ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - if ( ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_LS ) || ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) || ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) ) + test(); + test(); + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_LS ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) { - initDiffuseResponses( hDirACRend->diffuse_response_function, nchan_out_woLFE, hDirACRend->hOutSetup.output_config, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); + initDiffuseResponses_fx( hDirACRend->diffuse_response_function_fx, nchan_out_woLFE, hDirACRend->hOutSetup.output_config, + hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); } - else + ELSE { - initDiffuseResponses( hDirACRend->diffuse_response_function, hDirACRend->num_outputs_dir, IVAS_AUDIO_CONFIG_FOA, - hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); + initDiffuseResponses_fx( hDirACRend->diffuse_response_function_fx, hDirACRend->num_outputs_dir, IVAS_AUDIO_CONFIG_FOA, + hDirACRend->hOutSetup, hDirACRend->hOutSetup.ambisonics_order, MASA_FORMAT, &hDirACRend->num_ele_spk_no_diffuse_rendering, IVAS_AUDIO_CONFIG_INVALID ); } - hDirACRend->hoa_encoder = NULL; - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD ) + hDirACRend->hoa_encoder_fx = NULL; + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) ) { - if ( ( hDirACRend->hoa_encoder = (float *) malloc( nchan_out_woLFE * hDirACRend->num_outputs_diff * sizeof( float ) ) ) == NULL ) + IF( ( hDirACRend->hoa_encoder_fx = (Word32 *) malloc( nchan_out_woLFE * hDirACRend->num_outputs_diff * sizeof( Word32 ) ) ) == NULL ) { return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } - set_f( hDirACRend->hoa_encoder, 0.0f, nchan_out_woLFE * hDirACRend->num_outputs_diff ); - compute_hoa_encoder_mtx( ls_azimuth, ls_elevation, hDirACRend->hoa_encoder, hDirACRend->num_outputs_diff, hDirACRend->hOutSetup.ambisonics_order ); + set32_fx( hDirACRend->hoa_encoder_fx, 0, imult1616( nchan_out_woLFE, hDirACRend->num_outputs_diff ) ); + compute_hoa_encoder_mtx_fx( ls_azimuth_fx, ls_elevation_fx, hDirACRend->hoa_encoder_fx, hDirACRend->num_outputs_diff, hDirACRend->hOutSetup.ambisonics_order ); } /* VBAP */ inputMasa->hMasaExtRend->hVBAPdata = NULL; - if ( hDirACRend->panningConf == DIRAC_PANNING_VBAP ) + IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_VBAP ) ) { - if ( ( error = vbap_init_data( &( inputMasa->hMasaExtRend->hVBAPdata ), ls_azimuth, ls_elevation, nchan_out_woLFE, MASA_FORMAT ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = vbap_init_data_fx( &( inputMasa->hMasaExtRend->hVBAPdata ), ls_azimuth_fx, ls_elevation_fx, nchan_out_woLFE, MASA_FORMAT ) ), IVAS_ERR_OK ) ) { return error; } @@ -14305,11 +7744,11 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( /* HOA panning/dec */ hDirACRend->hoa_decoder = NULL; - if ( hDirACRend->panningConf == DIRAC_PANNING_HOA3 ) + IF( EQ_16( hDirACRend->panningConf, DIRAC_PANNING_HOA3 ) ) { - if ( hDirACRend->hOutSetup.is_loudspeaker_setup ) + IF( hDirACRend->hOutSetup.is_loudspeaker_setup ) { - if ( ( error = ivas_sba_get_hoa_dec_matrix( hDirACRend->hOutSetup, &inputMasa->hMasaExtRend->hoa_dec_mtx, hDirACRend->hOutSetup.ambisonics_order ) ) != IVAS_ERR_OK ) + IF( NE_32( ( error = ivas_sba_get_hoa_dec_matrix_fx( hDirACRend->hOutSetup, &inputMasa->hMasaExtRend->hoa_dec_mtx, hDirACRend->hOutSetup.ambisonics_order ) ), IVAS_ERR_OK ) ) { return error; } @@ -14320,207 +7759,88 @@ static ivas_error ivas_masa_ext_rend_dirac_rend_init( /* decorrelation */ hDirACRend->proto_signal_decorr_on = 1; - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_MONO ) - { - hDirACRend->proto_signal_decorr_on = 0; - } - - if ( hDirACRend->proto_signal_decorr_on ) - { - if ( ( error = ivas_dirac_dec_decorr_open( &( hDirACRend->h_freq_domain_decorr_ap_params ), - &( hDirACRend->h_freq_domain_decorr_ap_state ), - hSpatParamRendCom->num_freq_bands, - hDirACRend->num_outputs_diff, - hDirACRend->num_protos_diff, - hDirACRend->synthesisConf, - hDirACRend->frequency_axis, - nchan_transport, - output_Fs ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* output synthesis */ - if ( ( ivas_dirac_dec_output_synthesis_open( hSpatParamRendCom, hDirACRend, RENDERER_DIRAC, nchan_transport, output_Fs, 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = hDirACRend->proto_signal_decorr_on; - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_PSD_SHD || hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - hDirACRend->h_output_synthesis_psd_params.use_onset_filters = 0; - } - - /*-----------------------------------------------------------------* - * memory allocation - *-----------------------------------------------------------------*/ - - if ( hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) - { - hDirACRend->proto_frame_f = NULL; - } - else - { - if ( ( hDirACRend->proto_frame_f = (float *) malloc( sizeof( float ) * 2 * hDirACRend->num_protos_diff * hSpatParamRendCom->num_freq_bands ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); - } - } - - - hDirACRend->buffer_energy = NULL; - - for ( i = 0; i < DIRAC_NUM_DIMS; i++ ) - { - for ( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) - { - hDirACRend->buffer_intensity_real[i][j] = NULL; - } - } - - /* output synthesis */ - ivas_dirac_dec_output_synthesis_init( hSpatParamRendCom, hDirACRend, nchan_out_woLFE, 0 ); - - /* Allocate stack memory */ - if ( ( error = ivas_dirac_alloc_mem( hDirACRend, RENDERER_DIRAC, hSpatParamRendCom->num_freq_bands, &( hDirACRend->stack_mem ), 0 ) ) != IVAS_ERR_OK ) - { - return error; - } - - inputMasa->hMasaExtRend->hDirACRend = hDirACRend; - - return error; -} -#endif - - -#ifndef IVAS_FLOAT_FIXED -static ivas_error ivas_masa_ext_rend_parambin_init( - input_masa *inputMasa /* i/o: MASA external renderer structure */ -) -{ - DIRAC_DEC_BIN_HANDLE hDiracDecBin; - HRTFS_PARAMBIN_HANDLE hHrtfParambin; - int16_t nBins; - int32_t output_Fs; - RENDERER_TYPE renderer_type; - int16_t j, k, bin; - float binCenterFreq, tmpFloat; - ivas_error error; - float frequency_axis[CLDFB_NO_CHANNELS_MAX]; - - error = IVAS_ERR_OK; - - hHrtfParambin = inputMasa->hMasaExtRend->hHrtfParambin; - - /* Set common variables and defaults */ - output_Fs = *( inputMasa->base.ctx.pOutSampleRate ); - nBins = inputMasa->hMasaExtRend->hSpatParamRendCom->num_freq_bands; - renderer_type = inputMasa->hMasaExtRend->renderer_type; - - hDiracDecBin = inputMasa->hMasaExtRend->hDiracDecBin; - - /* Init assumes that no reconfiguration is required in external renderer. Instead, free and rebuild whole rendering. */ - if ( ( hDiracDecBin = (DIRAC_DEC_BIN_HANDLE) malloc( sizeof( DIRAC_DEC_BIN_DATA ) ) ) == NULL ) + move16(); + if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_MONO ) ) { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC binaural handle " ); + hDirACRend->proto_signal_decorr_on = 0; + move16(); } - hDiracDecBin->hTdDecorr = NULL; - hDiracDecBin->hReverb = NULL; - hDiracDecBin->h_freq_domain_decorr_ap_params = NULL; - hDiracDecBin->h_freq_domain_decorr_ap_state = NULL; - hDiracDecBin->hDiffuseDist = NULL; /* Not used in external renderer */ - hDiracDecBin->useTdDecorr = 0; /* Always use frequency domain decorrelator in external renderer */ - - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) + IF( hDirACRend->proto_signal_decorr_on ) { - for ( k = 0; k < BINAURAL_CHANNELS + MAX_NUM_OBJECTS; k++ ) + IF( NE_32( ( error = ivas_dirac_dec_decorr_open_fx( &( hDirACRend->h_freq_domain_decorr_ap_params ), + &( hDirACRend->h_freq_domain_decorr_ap_state ), + hSpatParamRendCom->num_freq_bands, + hDirACRend->num_outputs_diff, + hDirACRend->num_protos_diff, + hDirACRend->synthesisConf, + hDirACRend->frequency_axis_fx, + nchan_transport, + output_Fs ) ), + IVAS_ERR_OK ) ) { - set_zero( hDiracDecBin->processMtxRe[j][k], nBins ); - set_zero( hDiracDecBin->processMtxIm[j][k], nBins ); + return error; } + } - for ( k = 0; k < BINAURAL_CHANNELS; k++ ) - { - set_zero( hDiracDecBin->processMtxDecRe[j][k], nBins ); - set_zero( hDiracDecBin->processMtxDecIm[j][k], nBins ); - } - set_zero( hDiracDecBin->ChEnePrev[j], nBins ); - set_zero( hDiracDecBin->ChEneOutPrev[j], nBins ); + /* output synthesis */ + IF( NE_32( ( ivas_dirac_dec_output_synthesis_open_fx( hSpatParamRendCom, hDirACRend, RENDERER_DIRAC, nchan_transport, output_Fs, 0 ) ), IVAS_ERR_OK ) ) + { + return error; } - set_zero( hDiracDecBin->ChCrossRePrev, nBins ); - set_zero( hDiracDecBin->ChCrossImPrev, nBins ); - set_zero( hDiracDecBin->ChCrossReOutPrev, nBins ); - set_zero( hDiracDecBin->ChCrossImOutPrev, nBins ); - hDiracDecBin->renderStereoOutputInsteadOfBinaural = 0; + hDirACRend->h_output_synthesis_psd_params.use_onset_filters = hDirACRend->proto_signal_decorr_on; + move16(); - for ( bin = 0; bin < nBins; bin++ ) + test(); + if ( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_PSD_SHD ) || EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - binCenterFreq = ( (float) bin + 0.5f ) / (float) nBins * ( (float) output_Fs / 2.0f ); - /* These formulas and values are from Christian Borss's publication for binaural diffuse field coherence */ - tmpFloat = max( 0.0f, 1.0f - binCenterFreq / 2700.0f ); - hDiracDecBin->diffuseFieldCoherence[bin] = tmpFloat * sinf( binCenterFreq * EVS_PI / 550.0f ) / ( binCenterFreq * EVS_PI / 550.0f ); + hDirACRend->h_output_synthesis_psd_params.use_onset_filters = 0; + move16(); } - /* No SPAR in external renderer so set directive diffuse field coherence tables to zero */ - set_zero( hDiracDecBin->diffuseFieldCoherenceX, BINAURAL_COHERENCE_DIFFERENCE_BINS ); - set_zero( hDiracDecBin->diffuseFieldCoherenceY, BINAURAL_COHERENCE_DIFFERENCE_BINS ); - set_zero( hDiracDecBin->diffuseFieldCoherenceZ, BINAURAL_COHERENCE_DIFFERENCE_BINS ); + /*-----------------------------------------------------------------* + * memory allocation + *-----------------------------------------------------------------*/ - if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC ) /* Indication of binaural rendering without room effect */ + IF( EQ_16( hDirACRend->synthesisConf, DIRAC_SYNTHESIS_GAIN_SHD ) ) { - set_f( hDiracDecBin->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); - hDiracDecBin->hReverb = NULL; + hDirACRend->proto_frame_f_fx = NULL; } - else if ( renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) /* Indication of binaural rendering with room effect */ + ELSE { - mvr2r( hHrtfParambin->parametricEarlyPartEneCorrection, hDiracDecBin->earlyPartEneCorrection, nBins ); - - if ( hDiracDecBin->hReverb == NULL ) + IF( ( hDirACRend->proto_frame_f_fx = (Word32 *) malloc( sizeof( Word32 ) * shl( imult1616( hDirACRend->num_protos_diff, hSpatParamRendCom->num_freq_bands ), 1 ) ) ) == NULL ) { - /* Todo Philips: Room acoustics should be passed here once the underlying part works. In this case, it probably should come from render context or somewhere else suitable. */ - if ( ( error = ivas_binaural_reverb_open_parambin( &hDiracDecBin->hReverb, nBins, CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES, NULL, output_Fs, hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } + return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) ); } + hDirACRend->proto_frame_f_len = shl( imult1616( hDirACRend->num_protos_diff, hSpatParamRendCom->num_freq_bands ), 1 ); + move16(); } - else if ( renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - set_f( hDiracDecBin->earlyPartEneCorrection, 1.0f, CLDFB_NO_CHANNELS_MAX ); - hDiracDecBin->hReverb = NULL; - hDiracDecBin->renderStereoOutputInsteadOfBinaural = 1; - } - else /* Not valid renderer type for this renderer */ + + + hDirACRend->buffer_energy_fx = NULL; + FOR( i = 0; i < DIRAC_NUM_DIMS; i++ ) { - assert( false ); + FOR( j = 0; j < DIRAC_NO_COL_AVG_DIFF; j++ ) + { + hDirACRend->buffer_intensity_real_fx[i][j] = NULL; + } } - /* Always open frequency domain decorrelator */ - ivas_dirac_dec_get_frequency_axis( frequency_axis, output_Fs, nBins ); - if ( ( error = ivas_dirac_dec_decorr_open( &( hDiracDecBin->h_freq_domain_decorr_ap_params ), - &( hDiracDecBin->h_freq_domain_decorr_ap_state ), - nBins, - BINAURAL_CHANNELS, - BINAURAL_CHANNELS, - DIRAC_SYNTHESIS_PSD_LS, - frequency_axis, - BINAURAL_CHANNELS, - output_Fs ) ) != IVAS_ERR_OK ) + /* output synthesis */ + ivas_dirac_dec_output_synthesis_init_fx( hSpatParamRendCom, hDirACRend, nchan_out_woLFE, 0 ); + + /* Allocate stack memory */ + IF( NE_32( ( error = ivas_dirac_alloc_mem_fx( hDirACRend, RENDERER_DIRAC, hSpatParamRendCom->num_freq_bands, &( hDirACRend->stack_mem ), 0 ) ), IVAS_ERR_OK ) ) { return error; } - /* External renderer uses constant regularization factor */ - hDiracDecBin->reqularizationFactor = 0.4f; - inputMasa->hMasaExtRend->hDiracDecBin = hDiracDecBin; + inputMasa->hMasaExtRend->hDirACRend = hDirACRend; return error; } -#else + + static ivas_error ivas_masa_ext_rend_parambin_init( input_masa *inputMasa /* i/o: MASA external renderer structure */ ) @@ -14693,166 +8013,7 @@ static ivas_error ivas_masa_ext_rend_parambin_init( return error; } -#endif // IVAS_FLOAT_FIXED - -#ifndef IVAS_FLOAT_FIXED -static ivas_error initMasaExtRenderer( - input_masa *inputMasa, - const AUDIO_CONFIG outConfig ) -{ - int16_t i; - ivas_error error; - MASA_EXT_REND_HANDLE hMasaExtRend; - - error = IVAS_ERR_OK; - - if ( ( hMasaExtRend = (MASA_EXT_REND_HANDLE) malloc( sizeof( MASA_EXT_REND_DATA ) ) ) == NULL ) - { - return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA external renderer structure\n" ) ); - } - - inputMasa->hMasaExtRend = hMasaExtRend; - - /* Default init */ - hMasaExtRend->renderer_type = RENDERER_DISABLE; - hMasaExtRend->hDirACRend = NULL; - hMasaExtRend->hSpatParamRendCom = NULL; - hMasaExtRend->hDiracDecBin = NULL; - hMasaExtRend->hReverb = NULL; - hMasaExtRend->hHrtfParambin = NULL; - hMasaExtRend->hVBAPdata = NULL; - hMasaExtRend->hoa_dec_mtx = NULL; - - if ( ( error = getAudioConfigNumChannels( inputMasa->base.inConfig, &hMasaExtRend->nchan_input ) ) != IVAS_ERR_OK ) - { - return error; - } - - if ( ( error = getAudioConfigNumChannels( outConfig, &hMasaExtRend->nchan_output ) ) != IVAS_ERR_OK ) - { - return error; - } - - switch ( outConfig ) - { - case IVAS_AUDIO_CONFIG_MONO: - if ( inputMasa->base.inConfig == IVAS_AUDIO_CONFIG_MASA2 ) - { - hMasaExtRend->renderer_type = RENDERER_DIRAC; - } - else - { - /* 1TC MASA to mono does not need rendering. */ - hMasaExtRend->renderer_type = RENDERER_DISABLE; - } - break; - - case IVAS_AUDIO_CONFIG_STEREO: - hMasaExtRend->renderer_type = RENDERER_STEREO_PARAMETRIC; - break; - - case IVAS_AUDIO_CONFIG_5_1: - case IVAS_AUDIO_CONFIG_7_1: - case IVAS_AUDIO_CONFIG_5_1_2: - case IVAS_AUDIO_CONFIG_5_1_4: - case IVAS_AUDIO_CONFIG_7_1_4: - case IVAS_AUDIO_CONFIG_LS_CUSTOM: - case IVAS_AUDIO_CONFIG_FOA: - case IVAS_AUDIO_CONFIG_HOA2: - case IVAS_AUDIO_CONFIG_HOA3: - hMasaExtRend->renderer_type = RENDERER_DIRAC; - break; - - case IVAS_AUDIO_CONFIG_BINAURAL: - hMasaExtRend->renderer_type = RENDERER_BINAURAL_PARAMETRIC; - break; - - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR: - case IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - hMasaExtRend->renderer_type = RENDERER_BINAURAL_PARAMETRIC_ROOM; - break; - - default: - return ( IVAS_ERROR( IVAS_ERR_IO_CONFIG_PAIR_NOT_SUPPORTED, "Wrong output config for MASA input in external renderer\n" ) ); - } - - if ( hMasaExtRend->renderer_type != RENDERER_DISABLE ) - { - int16_t subframe; - - if ( ( error = ivas_spat_hSpatParamRendCom_config( &hMasaExtRend->hSpatParamRendCom, DIRAC_OPEN, 0, MASA_FORMAT, MC_MODE_NONE, *( inputMasa->base.ctx.pOutSampleRate ), 0, 1 ) ) != IVAS_ERR_OK ) - { - return error; - } - - /* Simple population of the metadata index map as no adaptation is present */ - set_s( hMasaExtRend->hSpatParamRendCom->render_to_md_map, 0, MAX_JBM_SUBFRAMES_5MS * JBM_CLDFB_SLOTS_IN_SUBFRAME ); - for ( subframe = 0; subframe < MAX_PARAM_SPATIAL_SUBFRAMES; subframe++ ) - { - hMasaExtRend->hSpatParamRendCom->render_to_md_map[subframe] = subframe; - } - hMasaExtRend->hSpatParamRendCom->subframes_rendered = 0; - } - - if ( hMasaExtRend->renderer_type == RENDERER_DIRAC ) - { - if ( ( error = ivas_masa_ext_rend_dirac_rend_init( inputMasa ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( hMasaExtRend->renderer_type == RENDERER_BINAURAL_PARAMETRIC || hMasaExtRend->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || hMasaExtRend->renderer_type == RENDERER_STEREO_PARAMETRIC ) - { - if ( hMasaExtRend->renderer_type != RENDERER_STEREO_PARAMETRIC ) - { - if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &inputMasa->hMasaExtRend->hHrtfParambin ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - if ( ( error = ivas_masa_ext_rend_parambin_init( inputMasa ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - /* Init CLDFB for analysis & synthesis if renderer is used. Otherwise, NULL. */ - for ( i = 0; i < MASA_MAX_TRANSPORT_CHANNELS; i++ ) - { - hMasaExtRend->cldfbAnaRend[i] = NULL; - } - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - hMasaExtRend->cldfbSynRend[i] = NULL; - } - - if ( hMasaExtRend->renderer_type != RENDERER_DISABLE ) - { - for ( i = 0; i < hMasaExtRend->nchan_input; i++ ) - { - if ( ( error = openCldfb_ivas( &( hMasaExtRend->cldfbAnaRend[i] ), CLDFB_ANALYSIS, *inputMasa->base.ctx.pOutSampleRate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - - for ( i = 0; i < hMasaExtRend->nchan_output; i++ ) - { - if ( ( error = openCldfb_ivas( &( hMasaExtRend->cldfbSynRend[i] ), CLDFB_SYNTHESIS, *inputMasa->base.ctx.pOutSampleRate, CLDFB_PROTOTYPE_5_00MS ) ) != IVAS_ERR_OK ) - { - return error; - } - } - } - - inputMasa->hMasaExtRend = hMasaExtRend; - return IVAS_ERR_OK; -} -#else static ivas_error initMasaExtRenderer( input_masa *inputMasa, const AUDIO_CONFIG outConfig ) @@ -15019,9 +8180,7 @@ static ivas_error initMasaExtRenderer( return IVAS_ERR_OK; } -#endif // IVAS_FLOAT_FIXED -#ifdef IVAS_FLOAT_FIXED static void freeMasaExtRenderer( MASA_EXT_REND_HANDLE *hMasaExtRendOut ) { @@ -15092,79 +8251,7 @@ static void freeMasaExtRenderer( return; } -#else -static void freeMasaExtRenderer( - MASA_EXT_REND_HANDLE *hMasaExtRendOut ) -{ - MASA_EXT_REND_HANDLE hMasaExtRend; - int16_t i; - - if ( hMasaExtRendOut == NULL || *hMasaExtRendOut == NULL ) - { - return; - } - - hMasaExtRend = *hMasaExtRendOut; - - if ( hMasaExtRend->hDirACRend != NULL ) - { - ivas_dirac_rend_close( &hMasaExtRend->hDirACRend ); - } - - if ( hMasaExtRend->hSpatParamRendCom != NULL ) - { - ivas_spat_hSpatParamRendCom_close( &hMasaExtRend->hSpatParamRendCom ); - } - - if ( hMasaExtRend->hDiracDecBin != NULL ) - { - ivas_dirac_dec_close_binaural_data( &hMasaExtRend->hDiracDecBin ); - } - - if ( hMasaExtRend->hReverb != NULL ) - { - ivas_binaural_reverb_close( &hMasaExtRend->hReverb ); - } - - if ( hMasaExtRend->hHrtfParambin != NULL ) - { - ivas_HRTF_parambin_binary_close( &hMasaExtRend->hHrtfParambin ); - } - - if ( hMasaExtRend->hVBAPdata != NULL ) - { - vbap_free_data( &hMasaExtRend->hVBAPdata ); - } - - if ( hMasaExtRend->hoa_dec_mtx != NULL ) - { - free( hMasaExtRend->hoa_dec_mtx ); - } - - for ( i = 0; i < MASA_MAX_TRANSPORT_CHANNELS; i++ ) - { - if ( hMasaExtRend->cldfbAnaRend[i] != NULL ) - { - deleteCldfb_ivas( &hMasaExtRend->cldfbAnaRend[i] ); - } - } - - for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ ) - { - if ( hMasaExtRend->cldfbSynRend[i] != NULL ) - { - deleteCldfb_ivas( &hMasaExtRend->cldfbSynRend[i] ); - } - } - - free( hMasaExtRend ); - *hMasaExtRendOut = NULL; - - return; -} -#endif -#ifdef IVAS_FLOAT_FIXED static void intermidiate_ext_dirac_render( MASA_EXT_REND_HANDLE hMasaExtRend, /* i/o: MASA renderer structure */ Word16 to_fix ) @@ -15367,4 +8454,3 @@ static void intermidiate_ext_dirac_render( } } } -#endif diff --git a/lib_rend/lib_rend.h b/lib_rend/lib_rend.h index 1d8c36cf5..f3726a05b 100644 --- a/lib_rend/lib_rend.h +++ b/lib_rend/lib_rend.h @@ -34,9 +34,7 @@ #define LIB_REND_H #include "common_api_types.h" -#ifdef IVAS_FLOAT_FIXED #include "basop_util.h" -#endif #include /*---------------------------------------------------------------------* @@ -55,23 +53,8 @@ *---------------------------------------------------------------------*/ typedef float IVAS_REND_LfePanMtx[RENDERER_MAX_INPUT_LFE_CHANNELS][IVAS_MAX_OUTPUT_CHANNELS]; -#ifdef IVAS_FLOAT_FIXED typedef Word32 IVAS_REND_LfePanMtx_fx[RENDERER_MAX_INPUT_LFE_CHANNELS][IVAS_MAX_OUTPUT_CHANNELS]; -#endif -#ifndef IVAS_FLOAT_FIXED -typedef struct -{ - int16_t numSamplesPerChannel; - int16_t numChannels; -} IVAS_REND_AudioBufferConfig; -typedef struct -{ - IVAS_REND_AudioBufferConfig config; - float *data; -} IVAS_REND_AudioBuffer; - -#else typedef struct { Word16 numSamplesPerChannel; @@ -86,21 +69,12 @@ typedef struct // Word16 Q_data; } IVAS_REND_AudioBuffer; -#endif -#ifdef IVAS_FLOAT_FIXED typedef struct { IVAS_REND_AudioBufferConfig config; const Word32 *data_fx; } IVAS_REND_ReadOnlyAudioBuffer; -#else -typedef struct -{ - IVAS_REND_AudioBufferConfig config; - const float *data; -} IVAS_REND_ReadOnlyAudioBuffer; -#endif typedef struct IVAS_REND *IVAS_REND_HANDLE; typedef struct IVAS_REND const *IVAS_REND_CONST_HANDLE; @@ -131,7 +105,6 @@ typedef enum _IVAS_REND_COMPLEXITY_LEVEL /* Functions to be called before rendering */ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_Open( IVAS_REND_HANDLE *phIvasRend, /* i/o: Pointer to renderer handle */ const Word32 outputSampleRate, /* i : output sampling rate */ @@ -140,16 +113,6 @@ ivas_error IVAS_REND_Open( const Word32 nonDiegeticPanGain, /* i : non-diegetic panning gain Q31 */ const Word16 num_subframes /* i : number of subframes */ ); -#else -ivas_error IVAS_REND_Open( - IVAS_REND_HANDLE *phIvasRend, /* i/o: Pointer to renderer handle */ - const int32_t outputSampleRate, /* i : output sampling rate */ - const IVAS_AUDIO_CONFIG outConfig, /* i : output audio config */ - const int16_t nonDiegeticPan, /* i : non-diegetic object flag */ - const float nonDiegeticPanGain, /* i : non-diegetic panning gain */ - const int16_t num_subframes /* i : number of subframes */ -); -#endif /* Note: this will reset custom LFE routings set for any MC input */ ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( @@ -160,7 +123,6 @@ ivas_error IVAS_REND_ConfigureCustomOutputLoudspeakerLayout( /* Functions to be called before/during rendering */ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_NumOutChannels( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ Word16 *numOutChannels /* o : number of output channels */ @@ -171,18 +133,6 @@ ivas_error IVAS_REND_AddInput_fx( const IVAS_AUDIO_CONFIG inConfig, /* i : audio config for a new input */ IVAS_REND_InputId *inputId /* o : ID of the new input */ ); -#else -ivas_error IVAS_REND_NumOutChannels( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - int16_t *numOutChannels /* o : number of output channels */ -); - -ivas_error IVAS_REND_AddInput( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_AUDIO_CONFIG inConfig, /* i : audio config for a new input */ - IVAS_REND_InputId *inputId /* o : ID of the new input */ -); -#endif /* Note: this will reset any custom LFE routing set for the input */ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( @@ -191,7 +141,6 @@ ivas_error IVAS_REND_ConfigureCustomInputLoudspeakerLayout( const IVAS_CUSTOM_LS_DATA layout /* i : custom loudspeaker layout for input */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetInputGain_fx( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -211,34 +160,12 @@ ivas_error IVAS_REND_SetInputLfePos_fx( const Word16 outputAzimuth, /* i : Output azimuth position Q0 */ const Word16 outputElevation /* i : Output elevation position Q0 */ ); -#else -ivas_error IVAS_REND_SetInputGain( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const float gain /* i : linear gain (not in dB) */ -); - -ivas_error IVAS_REND_SetInputLfeMtx( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_REND_LfePanMtx *lfePanMtx /* i : LFE panning matrix */ -); - -ivas_error IVAS_REND_SetInputLfePos( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const float inputGain, /* i : Input gain to be applied to the LFE channel(s) */ - const float outputAzimuth, /* i : Output azimuth position */ - const float outputElevation /* i : Output elevation position */ -); -#endif ivas_error IVAS_REND_RemoveInput( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId /* i : ID of the input */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_GetInputNumChannels( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -250,23 +177,9 @@ ivas_error IVAS_REND_GetDelay_fx( Word16 *nSamples, /* o : Renderer delay in samples */ Word32 *timeScale /* o : Time scale of the delay, equal to renderer output sampling rate */ ); -#else -ivas_error IVAS_REND_GetInputNumChannels( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - int16_t *numChannels /* o : number of channels of the input */ -); - -ivas_error IVAS_REND_GetDelay( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - int16_t *nSamples, /* o : Renderer delay in samples */ - int32_t *timeScale /* o : Time scale of the delay, equal to renderer output sampling rate */ -); -#endif /* Functions to be called during rendering */ -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_FeedInputAudio_fx( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ const IVAS_REND_InputId inputId, /* i : ID of the input */ @@ -290,31 +203,6 @@ ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( const Word16 inputIndex, /* i : Index of the input */ const IVAS_ISM_METADATA objectPosition /* i : object position struct */ ); -#else -ivas_error IVAS_REND_FeedInputAudio( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_REND_ReadOnlyAudioBuffer inputAudio /* i : buffer with input audio */ -); - -ivas_error IVAS_REND_FeedInputObjectMetadata( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_REND_InputId inputId, /* i : ID of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -); - -ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const int16_t inputIndex, /* i : Index of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -); - -ivas_error IVAS_REND_FeedInputObjectMetadataToOMasa( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const int16_t inputIndex, /* i : Index of the input */ - const IVAS_ISM_METADATA objectPosition /* i : object position struct */ -); -#endif ivas_error IVAS_REND_FeedInputMasaMetadata( @@ -328,7 +216,6 @@ ivas_error IVAS_REND_InitConfig( const IVAS_AUDIO_CONFIG outAudioConfig /* i : output audioConfig */ ); -#ifdef IVAS_FLOAT_FIXED Word16 IVAS_REND_GetRenderConfig( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ @@ -345,24 +232,6 @@ ivas_error IVAS_REND_SetHeadRotation( const IVAS_VECTOR3 Pos, /* i : listener positions for next rendering call */ const Word16 sf_idx /* i : subframe index */ ); -#else -int16_t IVAS_REND_GetRenderConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_HANDLE hRCout /* o : Render configuration handle */ -); - -int16_t IVAS_REND_FeedRenderConfig( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS decoder handle */ - const IVAS_RENDER_CONFIG_DATA renderConfig /* i : Render configuration struct */ -); - -ivas_error IVAS_REND_SetHeadRotation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - const IVAS_QUATERNION headRot, /* i : head orientations for next rendering call */ - const IVAS_VECTOR3 Pos, /* i : listener positions for next rendering call */ - const int16_t sf_idx /* i : subframe index */ -); -#endif /* Head rotation becomes enabled by calling IVAS_REND_SetHeadRotation. Use this to disable. */ ivas_error IVAS_REND_DisableHeadRotation( @@ -396,7 +265,6 @@ ivas_error IVAS_REND_SetReferenceVector( ); -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetExternalOrientation( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ IVAS_QUATERNION *orientation, /* i : external orientation data */ @@ -406,17 +274,6 @@ ivas_error IVAS_REND_SetExternalOrientation( Word16 numFramesToTargetOrientation, /* i : number of frames until target orientation is reached */ const Word16 sf_idx /* i : subframe index */ ); -#else -ivas_error IVAS_REND_SetExternalOrientation( - IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ - IVAS_QUATERNION *orientation, /* i : external orientation data */ - int8_t enableHeadRotation, /* i : flag to enable head rotation for this frame */ - int8_t enableExternalOrientation, /* i : flag to enable external orientation for this frame */ - int8_t enableRotationInterpolation, /* i : flag to interpolate rotations from current and previous frames */ - int16_t numFramesToTargetOrientation, /* i : number of frames until target orientation is reached */ - const int16_t sf_idx /* i : subframe index */ -); -#endif ivas_error IVAS_REND_CombineHeadAndExternalOrientation( IVAS_REND_HANDLE hIvasRend /* i/o: Renderer handle */ @@ -440,7 +297,6 @@ ivas_error IVAS_REND_MergeMasaMetadata( const IVAS_REND_AudioConfigType inputType2 /* i : Input type 2 */ ); -#ifdef IVAS_FLOAT_FIXED ivas_error IVAS_REND_SetTotalNumberOfObjects( IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ const UWord16 total_num_objects /* i : total number of objects */ @@ -455,22 +311,6 @@ ivas_error IVAS_REND_GetNumAllObjects( IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ Word16 *numChannels /* o : number of all objects */ ); -#else -ivas_error IVAS_REND_SetTotalNumberOfObjects( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - const uint16_t total_num_objects /* i : total number of objects */ -); - -ivas_error IVAS_REND_SetIsmMetadataDelay( - IVAS_REND_HANDLE hIvasRend, /* i/o: IVAS renderer handle */ - const float sync_md_delay /* i : Metadata Delay in ms to sync with audio delay */ -); - -ivas_error IVAS_REND_GetNumAllObjects( - IVAS_REND_CONST_HANDLE hIvasRend, /* i : Renderer handle */ - int16_t *numChannels /* o : number of all objects */ -); -#endif ivas_error IVAS_REND_GetSamples( IVAS_REND_HANDLE hIvasRend, /* i/o: Renderer handle */ diff --git a/lib_util/hrtf_file_reader.c b/lib_util/hrtf_file_reader.c index 625302e11..874ff6cfa 100644 --- a/lib_util/hrtf_file_reader.c +++ b/lib_util/hrtf_file_reader.c @@ -65,10 +65,8 @@ typedef struct ivas_hrtfs_file_header_t #define RESAMPLE_FACTOR_16_48 ( 16.0f / 48.0f ) #define RESAMPLE_FACTOR_32_48 ( 32.0f / 48.0f ) -#ifdef IVAS_FLOAT_FIXED #define RESAMPLE_FACTOR_16_48_FX ( 5461 ) #define RESAMPLE_FACTOR_32_48_FX ( 10922 ) -#endif /*---------------------------------------------------------------------* * Local function declarations @@ -248,7 +246,6 @@ static ivas_error read_hrtf_binary_header( * * Loads the B Spline HR filter model ITD data from file. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static void LoadBSplineBinaryITD( ModelParamsITD_t *modelITD, /* i/o: ITD model parameter structure */ FILE *f_hrtf /* i : HR filter data file handle */ @@ -336,129 +333,6 @@ static void LoadBSplineBinaryITD( return; } -#else -static void LoadBSplineBinaryITD( - ModelParamsITD_t *modelITD, /* i/o: ITD model parameter structure */ - FILE *f_hrtf /* i : HR filter data file handle */ -) -{ - int16_t tmp; - fread( &modelITD->N, sizeof( int16_t ), 1, f_hrtf ); - fread( &modelITD->elevDim2, sizeof( int16_t ), 1, f_hrtf ); - fread( &modelITD->elevDim3, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *elevKSeq_dyn_local = (float *) malloc( ( modelITD->elevDim3 - 2 ) * sizeof( float ) ); - fread( elevKSeq_dyn_local, sizeof( float ), modelITD->elevDim3 - 2, f_hrtf ); - - modelITD->elevKSeq_dyn_fx = (Word32 *) malloc( sizeof( Word32 ) * ( modelITD->elevDim3 - 2 ) ); - for ( int i = 0; i < modelITD->elevDim3 - 2; i++ ) - { - modelITD->elevKSeq_dyn_fx[i] = float_to_fix( elevKSeq_dyn_local[i], Q22 ); - } -#else - modelITD->elevKSeq_dyn = (float *) malloc( ( modelITD->elevDim3 - 2 ) * sizeof( float ) ); - fread( modelITD->elevKSeq_dyn, sizeof( float ), modelITD->elevDim3 - 2, f_hrtf ); -#endif - - fread( &modelITD->azimDim2, sizeof( int16_t ), 1, f_hrtf ); - fread( &modelITD->azimDim3, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *azimKSeq_dyn_local = (float *) malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( float ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ - fread( azimKSeq_dyn_local, sizeof( float ), ( modelITD->azimDim3 + 1 ) / 2 - 2, f_hrtf ); - modelITD->azimKSeq_dyn_fx = (Word32 *) malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( Word32 ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ - for ( int i = 0; i < ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ); i++ ) - { - modelITD->azimKSeq_dyn_fx[i] = float_to_fix( azimKSeq_dyn_local[i], Q22 ); - } -#else - modelITD->azimKSeq_dyn = (float *) malloc( ( ( modelITD->azimDim3 + 1 ) / 2 - 2 ) * sizeof( float ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */ - fread( modelITD->azimKSeq_dyn, sizeof( float ), ( modelITD->azimDim3 + 1 ) / 2 - 2, f_hrtf ); -#endif - - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *W_dyn_local = (float *) malloc( tmp * sizeof( float ) ); - fread( W_dyn_local, sizeof( float ), tmp, f_hrtf ); - - modelITD->W_dyn_fx = (Word32 *) malloc( tmp * sizeof( Word32 ) ); - f2me_buf( W_dyn_local, modelITD->W_dyn_fx, &modelITD->W_dyn_e, tmp ); -#else - modelITD->W_dyn = (float *) malloc( tmp * sizeof( float ) ); - fread( modelITD->W_dyn, sizeof( float ), tmp, f_hrtf ); -#endif - - /* azimuth */ - fread( modelITD->azimBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - fread( modelITD->azimBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - -#ifdef IVAS_FLOAT_FIXED - float *azimBsShape_dyn_local = (float *) malloc( tmp * sizeof( float ) ); - fread( azimBsShape_dyn_local, sizeof( float ), tmp, f_hrtf ); - - modelITD->azimBsShape_dyn_fx = (Word32 *) malloc( tmp * sizeof( Word32 ) ); - for ( int i = 0; i < tmp; i++ ) - { - modelITD->azimBsShape_dyn_fx[i] = float_to_fix( azimBsShape_dyn_local[i], Q30 ); - } -#else - modelITD->azimBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); - fread( modelITD->azimBsShape_dyn, sizeof( float ), tmp, f_hrtf ); -#endif - - fread( &modelITD->azimSegSamples, sizeof( int16_t ), 1, f_hrtf ); - - /* elevation */ - fread( modelITD->elevBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - fread( modelITD->elevBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); - -#ifdef IVAS_FLOAT_FIXED - float *elevBsShape_dyn_local = (float *) malloc( tmp * sizeof( float ) ); - fread( elevBsShape_dyn_local, sizeof( float ), tmp, f_hrtf ); - - modelITD->elevBsShape_dyn_fx = (Word32 *) malloc( tmp * sizeof( Word32 ) ); - for ( int i = 0; i < tmp; i++ ) - { - modelITD->elevBsShape_dyn_fx[i] = float_to_fix( elevBsShape_dyn_local[i], Q30 ); - } -#else - modelITD->elevBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); - fread( modelITD->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); -#endif - - fread( &modelITD->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); - -#ifdef IVAS_FLOAT_FIXED - modelITD->elevKSeq_fx = (const Word32 *) modelITD->elevKSeq_dyn_fx; -#else - modelITD->elevKSeq = (const float *) modelITD->elevKSeq_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED - modelITD->azimKSeq_fx = (const Word32 *) modelITD->azimKSeq_dyn_fx; -#else - modelITD->azimKSeq = (const float *) modelITD->azimKSeq_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED - modelITD->W_fx = modelITD->W_dyn_fx; - modelITD->W_e = modelITD->W_dyn_e; - move16(); -#else - modelITD->W = (const float *) modelITD->W_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED - modelITD->azimBsShape_fx = (const Word32 *) modelITD->azimBsShape_dyn_fx; - modelITD->elevBsShape_fx = (const Word32 *) modelITD->elevBsShape_dyn_fx; -#else - modelITD->elevBsShape = (const float *) modelITD->elevBsShape_dyn; - modelITD->azimBsShape = (const float *) modelITD->azimBsShape_dyn; -#endif - - return; -} -#endif /*-------------------------------------------------------------------* * LoadBSplineBinary() @@ -466,7 +340,6 @@ static void LoadBSplineBinaryITD( * Loads the B Spline HR filter model data from file. --------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error LoadBSplineBinary( IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */ FILE *f_hrtf /* i : HR filter data file handle */ @@ -681,388 +554,102 @@ static ivas_error LoadBSplineBinary( return IVAS_ERR_OK; } -#else -static ivas_error LoadBSplineBinary( - IVAS_DEC_HRTF_HANDLE HrFiltSet_p, /* i/o: HR filter model parameter structure */ - FILE *f_hrtf /* i : HR filter data file handle */ + + +/*-------------------------------------------------------------------* + * TDREND_MIX_LoadHRTF() + * + * Load HRTF model or table from file + --------------------------------------------------------------------*/ + +static ivas_error TDREND_MIX_LoadHRTF( + FILE *f_hrtf, /* i/o: File pointer to HRTF file */ + IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* o : Loaded HR filter set */ ) { - ModelParams_t *model; - int16_t i, tmp; + int16_t tmp; + ivas_error error; + bool is_tdrend; + ivas_error header_check_result; + ivas_hrtfs_file_header_t hrtfs_file_header; + int16_t hrtf_id; + ivas_hrtfs_header_t hrtf_header; + int32_t hrtf_data_size_max; + char *hrtf_data; -#ifdef IVAS_FLOAT_FIXED - float f_tmp_latency_s; - float f_tmp_lr_energy_and_iac_dyn[LR_IAC_LENGTH_NR_FC]; -#endif + error = IVAS_ERR_OK; -#ifndef IVAS_FLOAT_FIXED - fread( &HrFiltSet_p->latency_s, sizeof( float ), 1, f_hrtf ); -#else - fread( &f_tmp_latency_s, sizeof( float ), 1, f_hrtf ); - HrFiltSet_p->latency_s_fx = float_to_fix( f_tmp_latency_s, Q31 ); -#endif // IVAS_FLOAT_FIXED - model = &( HrFiltSet_p->ModelParams ); + if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK ) + { + return header_check_result; + } - /* Set ROM flag for correct deallocation */ - model->modelROM = FALSE; + is_tdrend = FALSE; + hrtf_data_size_max = hrtfs_file_header.max_data_size; - fread( &model->UseItdModel, sizeof( int16_t ), 1, f_hrtf ); /* Indicates if ITD model is active */ - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); + /* Allocate the memory */ - switch ( tmp ) + if ( hrtf_data_size_max == 0 ) { - case 16: - HrFiltSet_p->SampleRate = 16000; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { -#ifndef IVAS_FLOAT_FIXED - HrFiltSet_p->ModelParamsITD.resamp_factor = RESAMPLE_FACTOR_16_48; -#else - HrFiltSet_p->ModelParamsITD.resamp_factor_fx = RESAMPLE_FACTOR_16_48_FX; -#endif - } - break; - case 32: - HrFiltSet_p->SampleRate = 32000; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { -#ifndef IVAS_FLOAT_FIXED - HrFiltSet_p->ModelParamsITD.resamp_factor = RESAMPLE_FACTOR_32_48; -#else - HrFiltSet_p->ModelParamsITD.resamp_factor_fx = RESAMPLE_FACTOR_32_48_FX; -#endif - } - break; - case 48: - HrFiltSet_p->SampleRate = 48000; - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { -#ifndef IVAS_FLOAT_FIXED - HrFiltSet_p->ModelParamsITD.resamp_factor = 1.0f; -#else - HrFiltSet_p->ModelParamsITD.resamp_factor_fx = ONE_IN_Q14; -#endif - } - break; - default: - return IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "Error: HR filter file had an unsupported sampling rate (%d kHz)", tmp ); + return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (hrtf_data_size_max)" ); } - fread( &model->SplineDegree, sizeof( int16_t ), 1, f_hrtf ); - fread( &model->K, sizeof( int16_t ), 1, f_hrtf ); - - fread( &model->elevDim2, sizeof( int16_t ), 1, f_hrtf ); - fread( &model->elevDim3, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *elevKSeq_dyn_local = (float *) malloc( ( model->elevDim3 - 2 ) * sizeof( float ) ); - fread( elevKSeq_dyn_local, sizeof( float ), model->elevDim3 - 2, f_hrtf ); - model->elevKSeq_dyn_fx = (Word32 *) malloc( ( model->elevDim3 - 2 ) * sizeof( Word32 ) ); - for ( i = 0; i < ( model->elevDim3 - 2 ); i++ ) + hrtf_data = (char *) malloc( hrtf_data_size_max ); + if ( hrtf_data == NULL ) { - model->elevKSeq_dyn_fx[i] = float_to_fix( elevKSeq_dyn_local[i], Q22 ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); } - free( elevKSeq_dyn_local ); -#else - model->elevKSeq_dyn = (float *) malloc( ( model->elevDim3 - 2 ) * sizeof( float ) ); - fread( model->elevKSeq_dyn, sizeof( float ), model->elevDim3 - 2, f_hrtf ); -#endif - model->azimDim2_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); - model->azimDim3_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); - model->azim_start_idx_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); -#ifdef IVAS_FLOAT_FIXED - float **azimKSeq_local = (float **) malloc( model->elevDim3 * sizeof( float * ) ); - model->azimKSeq_fx = (Word32 **) malloc( model->elevDim3 * sizeof( Word32 * ) ); -#else - model->azimKSeq = (float **) malloc( model->elevDim3 * sizeof( float * ) ); -#endif - for ( i = 0; i < model->elevDim3; i++ ) + + for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_tdrend ); hrtf_id++ ) { - fread( &model->azimDim2_dyn[i], sizeof( int16_t ), 1, f_hrtf ); - fread( &model->azimDim3_dyn[i], sizeof( int16_t ), 1, f_hrtf ); - fread( &model->azim_start_idx_dyn[i], sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - azimKSeq_local[i] = (float *) malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( float ) ); - fread( azimKSeq_local[i], sizeof( float ), ( model->azimDim3_dyn[i] + 1 ), f_hrtf ); - model->azimKSeq_fx[i] = (Word32 *) malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( Word32 ) ); - for ( int j = 0; j < ( model->azimDim3_dyn[i] + 1 ); j++ ) + if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) { - model->azimKSeq_fx[i][j] = float_to_fix( azimKSeq_local[i][j], Q22 ); + return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); } - free( azimKSeq_local[i] ); -#else - model->azimKSeq[i] = (float *) malloc( ( model->azimDim3_dyn[i] + 1 ) * sizeof( float ) ); - fread( model->azimKSeq[i], sizeof( float ), ( model->azimDim3_dyn[i] + 1 ), f_hrtf ); -#endif - } -#ifdef IVAS_FLOAT_FIXED - free( azimKSeq_local ); -#endif - - fread( &model->AlphaN, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *AlphaL_dyn_local = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); - fread( AlphaL_dyn_local, sizeof( float ), model->AlphaN * model->K, f_hrtf ); - model->AlphaL_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); - f2me_buf( AlphaL_dyn_local, model->AlphaL_dyn_fx, &model->AlphaL_dyn_e, model->AlphaN * model->K ); - free( AlphaL_dyn_local ); -#else - model->AlphaL_dyn = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); - fread( model->AlphaL_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); -#endif + if ( ( header_check_result = check_hrtf_binary_header( &hrtf_header ) ) != IVAS_ERR_OK ) + { + return header_check_result; + } -#ifdef IVAS_FLOAT_FIXED - float *AlphaR_dyn_local = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); - fread( AlphaR_dyn_local, sizeof( float ), model->AlphaN * model->K, f_hrtf ); + is_tdrend = ( hrtf_header.rend_type == RENDERER_BINAURAL_OBJECTS_TD ); + if ( !is_tdrend ) + { + if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); + } + } + } - model->AlphaR_dyn_fx = (Word32 *) malloc( model->AlphaN * model->K * sizeof( Word32 ) ); - f2me_buf( AlphaR_dyn_local, model->AlphaR_dyn_fx, &model->AlphaR_dyn_e, model->AlphaN * model->K ); - free( AlphaR_dyn_local ); -#else - model->AlphaR_dyn = (float *) malloc( model->AlphaN * model->K * sizeof( float ) ); - fread( model->AlphaR_dyn, sizeof( float ), model->AlphaN * model->K, f_hrtf ); -#endif + free( hrtf_data ); - /* azimuth */ - fread( &model->num_unique_azim_splines, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - model->azimBsShape_fx = (const Word32 **) malloc( model->num_unique_azim_splines * sizeof( Word32 * ) ); - model->azimBsShape_dyn_fx = (Word32 **) malloc( model->num_unique_azim_splines * sizeof( Word32 * ) ); - float **azimBsShape_dyn_local = (float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); -#else - model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); - model->azimBsShape_dyn = (float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ); -#endif - model->azimSegSamples_dyn = (int16_t *) malloc( model->num_unique_azim_splines * sizeof( int16_t ) ); - for ( i = 0; i < model->num_unique_azim_splines; i++ ) + if ( is_tdrend ) { - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - azimBsShape_dyn_local[i] = (float *) malloc( tmp * sizeof( float ) ); - fread( azimBsShape_dyn_local[i], sizeof( float ), tmp, f_hrtf ); - model->azimBsShape_dyn_fx[i] = (Word32 *) malloc( tmp * sizeof( Word32 ) ); - for ( int j = 0; j < tmp; j++ ) + if ( fread( &tmp, 1, sizeof( int16_t ), f_hrtf ) == 0 ) { - model->azimBsShape_dyn_fx[i][j] = float_to_fix( azimBsShape_dyn_local[i][j], Q30 ); + return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); } - free( azimBsShape_dyn_local[i] ); -#else - model->azimBsShape_dyn[i] = (float *) malloc( tmp * sizeof( float ) ); - fread( model->azimBsShape_dyn[i], sizeof( float ), tmp, f_hrtf ); -#endif - fread( &model->azimSegSamples_dyn[i], sizeof( int16_t ), 1, f_hrtf ); - } -#ifdef IVAS_FLOAT_FIXED - free( azimBsShape_dyn_local ); -#endif // IVAS_FLOAT_FIXED - model->azimShapeIdx_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); - fread( model->azimShapeIdx_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); - model->azimShapeSampFactor_dyn = (int16_t *) malloc( model->elevDim3 * sizeof( int16_t ) ); - fread( model->azimShapeSampFactor_dyn, sizeof( int16_t ), model->elevDim3, f_hrtf ); + HrFiltSet_p->FilterMethod = (TDREND_HRFILT_Method_t) tmp; - /* elevation */ - fread( model->elevBsLen, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - fread( model->elevBsStart, sizeof( int16_t ), HRTF_MODEL_BSPLINE_NUM_COEFFS, f_hrtf ); - fread( &tmp, sizeof( int16_t ), 1, f_hrtf ); -#ifdef IVAS_FLOAT_FIXED - float *elevBsShape_dyn_local = (float *) malloc( tmp * sizeof( float ) ); - fread( elevBsShape_dyn_local, sizeof( float ), tmp, f_hrtf ); - model->elevBsShape_dyn_fx = (Word32 *) malloc( tmp * sizeof( Word32 ) ); - for ( i = 0; i < tmp; i++ ) + if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel ) + { + error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." ); + } + else + { + error = LoadBSplineBinary( HrFiltSet_p, f_hrtf ); + } + } + else { - model->elevBsShape_dyn_fx[i] = float_to_fix( elevBsShape_dyn_local[i], Q30 ); + return IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "HR filter not found in binary file." ); } - free( elevBsShape_dyn_local ); -#else - model->elevBsShape_dyn = (float *) malloc( tmp * sizeof( float ) ); - fread( model->elevBsShape_dyn, sizeof( float ), tmp, f_hrtf ); -#endif - fread( &model->elevSegSamples, sizeof( int16_t ), 1, f_hrtf ); - - /* Set const pointers */ -#ifdef IVAS_FLOAT_FIXED - model->AlphaL_fx = model->AlphaL_dyn_fx; - model->AlphaL_e = model->AlphaL_dyn_e; - move16(); - model->AlphaR_fx = model->AlphaR_dyn_fx; - model->AlphaR_e = model->AlphaR_dyn_e; - move16(); - model->EL_fx = model->EL_dyn_fx; - model->EL_e = model->EL_dyn_e; - move16(); - model->ER_fx = model->ER_dyn_fx; - model->ER_e = model->ER_dyn_e; - move16(); -#else - model->AlphaL = (const float *) model->AlphaL_dyn; - model->AlphaR = (const float *) model->AlphaR_dyn; - model->EL = (const float *) model->EL_dyn; - model->ER = (const float *) model->ER_dyn; -#endif -#ifdef IVAS_FLOAT_FIXED - model->elevBsShape_fx = (const Word32 *) model->elevBsShape_dyn_fx; - model->elevKSeq_fx = (const Word32 *) model->elevKSeq_dyn_fx; -#else - model->elevBsShape = (const float *) model->elevBsShape_dyn; - model->elevKSeq = (const float *) model->elevKSeq_dyn; -#endif - model->azimDim2 = (const int16_t *) model->azimDim2_dyn; - model->azimDim3 = (const int16_t *) model->azimDim3_dyn; - model->azim_start_idx = (const int16_t *) model->azim_start_idx_dyn; - model->azimSegSamples = (const int16_t *) model->azimSegSamples_dyn; - model->azimShapeIdx = (const int16_t *) model->azimShapeIdx_dyn; - model->azimShapeSampFactor = (const int16_t *) model->azimShapeSampFactor_dyn; - - for ( i = 0; i < model->num_unique_azim_splines; i++ ) - { -#ifdef IVAS_FLOAT_FIXED - model->azimBsShape_fx[i] = (const Word32 *) model->azimBsShape_dyn_fx[i]; -#else - model->azimBsShape[i] = (const float *) model->azimBsShape_dyn[i]; -#endif - } - - HRTF_model_precalc( model ); - HRTF_energy_sections_precalc( model ); - HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K; - -#ifndef IVAS_FLOAT_FIXED - HrFiltSet_p->ModelEval.hrfModL = (float *) malloc( model->K * sizeof( float ) ); - HrFiltSet_p->ModelEval.hrfModR = (float *) malloc( model->K * sizeof( float ) ); -#else - HrFiltSet_p->ModelEval.hrfModL_fx = (Word32 *) malloc( model->K * sizeof( Word32 ) ); - HrFiltSet_p->ModelEval.hrfModR_fx = (Word32 *) malloc( model->K * sizeof( Word32 ) ); -#endif - - if ( HrFiltSet_p->ModelParams.UseItdModel ) - { - LoadBSplineBinaryITD( &HrFiltSet_p->ModelParamsITD, f_hrtf ); - } - - /* left/right energy and interaural coherence for late reverb */ - for ( i = 0; i < 3; i++ ) - { -#ifndef IVAS_FLOAT_FIXED - HrFiltSet_p->lr_energy_and_iac_dyn[i] = (float *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( float ) ); - fread( HrFiltSet_p->lr_energy_and_iac_dyn[i], sizeof( const float ), LR_IAC_LENGTH_NR_FC, f_hrtf ); - HrFiltSet_p->lr_energy_and_iac[i] = (const float *) HrFiltSet_p->lr_energy_and_iac_dyn[i]; -#else - fread( f_tmp_lr_energy_and_iac_dyn, sizeof( const float ), LR_IAC_LENGTH_NR_FC, f_hrtf ); - HrFiltSet_p->lr_energy_and_iac_dyn_fx[i] = (Word32 *) malloc( LR_IAC_LENGTH_NR_FC * sizeof( Word32 ) ); - IF( i == 2 ) - { - floatToFixed_arr32( f_tmp_lr_energy_and_iac_dyn, HrFiltSet_p->lr_energy_and_iac_dyn_fx[i], Q27, LR_IAC_LENGTH_NR_FC ); /* tables from which lr_energy_and_iac is updated has Q27 for i=2 */ - } - ELSE - { - floatToFixed_arr32( f_tmp_lr_energy_and_iac_dyn, HrFiltSet_p->lr_energy_and_iac_dyn_fx[i], Q23, LR_IAC_LENGTH_NR_FC ); /* tables from which lr_energy_and_iac is updated has Q23 for i=0,1 */ - } - HrFiltSet_p->lr_energy_and_iac_fx[i] = (const Word32 *) HrFiltSet_p->lr_energy_and_iac_dyn_fx[i]; -#endif // IVAS_FLOAT_FIXED - } - - return IVAS_ERR_OK; -} -#endif // IVAS_FLOAT_FIXED - - -/*-------------------------------------------------------------------* - * TDREND_MIX_LoadHRTF() - * - * Load HRTF model or table from file - --------------------------------------------------------------------*/ - -static ivas_error TDREND_MIX_LoadHRTF( - FILE *f_hrtf, /* i/o: File pointer to HRTF file */ - IVAS_DEC_HRTF_HANDLE HrFiltSet_p /* o : Loaded HR filter set */ -) -{ - int16_t tmp; - ivas_error error; - bool is_tdrend; - ivas_error header_check_result; - ivas_hrtfs_file_header_t hrtfs_file_header; - int16_t hrtf_id; - ivas_hrtfs_header_t hrtf_header; - int32_t hrtf_data_size_max; - char *hrtf_data; - - error = IVAS_ERR_OK; - - - if ( ( header_check_result = read_and_check_hrtf_binary_file_header( &hrtfs_file_header, f_hrtf ) ) != IVAS_ERR_OK ) - { - return header_check_result; - } - - is_tdrend = FALSE; - hrtf_data_size_max = hrtfs_file_header.max_data_size; - - /* Allocate the memory */ - - if ( hrtf_data_size_max == 0 ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (hrtf_data_size_max)" ); - } - - hrtf_data = (char *) malloc( hrtf_data_size_max ); - if ( hrtf_data == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for hrtf data" ); - } - - for ( hrtf_id = 0; ( hrtf_id < hrtfs_file_header.nb_hrtf ) && ( !is_tdrend ); hrtf_id++ ) - { - if ( read_hrtf_binary_header( &hrtf_header, f_hrtf ) != IVAS_ERR_OK ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "HRTF binary file not compliant (number of HRTF)" ); - } - - if ( ( header_check_result = check_hrtf_binary_header( &hrtf_header ) ) != IVAS_ERR_OK ) - { - return header_check_result; - } - - is_tdrend = ( hrtf_header.rend_type == RENDERER_BINAURAL_OBJECTS_TD ); - if ( !is_tdrend ) - { - if ( fread( hrtf_data, 1, hrtf_header.data_size, f_hrtf ) != hrtf_header.data_size ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); - } - } - } - - free( hrtf_data ); - - if ( is_tdrend ) - { - if ( fread( &tmp, 1, sizeof( int16_t ), f_hrtf ) == 0 ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_FILE_READ, "Error in HRTF file reading" ); - } - - HrFiltSet_p->FilterMethod = (TDREND_HRFILT_Method_t) tmp; - - if ( HrFiltSet_p->FilterMethod != TDREND_HRFILT_Method_BSplineModel ) - { - error = IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "The HR filter set file is not a supported type." ); - } - else - { - error = LoadBSplineBinary( HrFiltSet_p, f_hrtf ); - } - } - else - { - return IVAS_ERROR( IVAS_ERR_INVALID_HRTF, "HR filter not found in binary file." ); - } - - return error; -} + return error; +} /*---------------------------------------------------------------------* @@ -1096,19 +683,11 @@ static void HRTF_energy_sections_precalc( ) { int16_t i, k, j; -#ifndef IVAS_FLOAT_FIXED - float *pEL; - float *pER; - const float *pAlphaL; - const float *pAlphaR; - float tmp; -#else Word32 *pEL_fx; Word32 *pER_fx; const Word32 *pAlphaL_fx; const Word32 *pAlphaR_fx; Word32 tmp_fx; -#endif int16_t AlphaN; if ( !model->modelROM ) @@ -1116,68 +695,36 @@ static void HRTF_energy_sections_precalc( AlphaN = model->AlphaN; /* Precalculated energies for each section and each row of the alpha matrices */ -#ifdef IVAS_FLOAT_FIXED model->EL_dyn_fx = (Word32 *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( Word32 ) ); model->ER_dyn_fx = (Word32 *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( Word32 ) ); pEL_fx = model->EL_dyn_fx; pER_fx = model->ER_dyn_fx; -#else - model->EL_dyn = (float *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); - model->ER_dyn = (float *) malloc( HRTF_MODEL_N_SECTIONS * AlphaN * sizeof( float ) ); - pEL = model->EL_dyn; - pER = model->ER_dyn; -#endif for ( i = 0; i < HRTF_MODEL_N_SECTIONS; i++ ) { for ( j = 0; j < AlphaN; j++ ) /* rows of Alpha matrices */ { -#ifdef IVAS_FLOAT_FIXED *pEL_fx = 0; move32(); *pER_fx = 0; move32(); -#else - *pEL = 0.0f; - *pER = 0.0f; -#endif -#ifdef IVAS_FLOAT_FIXED pAlphaL_fx = &model->AlphaL_fx[model->iSecFirst[i] * AlphaN + j]; pAlphaR_fx = &model->AlphaR_fx[model->iSecFirst[i] * AlphaN + j]; -#else - pAlphaR = &model->AlphaR[model->iSecFirst[i] * AlphaN + j]; - pAlphaL = &model->AlphaL[model->iSecFirst[i] * AlphaN + j]; -#endif for ( k = model->iSecFirst[i]; k < model->iSecLast[i]; k++ ) /* k within the sections */ { /* Energy calculation */ -#ifdef IVAS_FLOAT_FIXED tmp_fx = *pAlphaL_fx; *pEL_fx = L_add( *pEL_fx, L_shr( Mpy_32_32( tmp_fx, tmp_fx ), 1 ) ); /* one guard bit */ tmp_fx = *pAlphaR_fx; *pER_fx = L_add( *pER_fx, L_shr( Mpy_32_32( tmp_fx, tmp_fx ), 1 ) ); /* one guard bit */ pAlphaL_fx += AlphaN; pAlphaR_fx += AlphaN; -#else - tmp = *pAlphaL; - *pEL += tmp * tmp; - tmp = *pAlphaR; - *pER += tmp * tmp; - pAlphaL += AlphaN; - pAlphaR += AlphaN; -#endif } -#ifdef IVAS_FLOAT_FIXED pEL_fx++; pER_fx++; -#else - pEL++; - pER++; -#endif } } -#ifdef IVAS_FLOAT_FIXED model->EL_dyn_e = add( shl( model->AlphaL_e, 1 ), 1 ); // 2 * AlphaL_e + 1 (one guard bit) model->ER_dyn_e = add( shl( model->AlphaR_e, 1 ), 1 ); // 2 * AlphaR_e + 1 (one guard bit) @@ -1187,10 +734,6 @@ static void HRTF_energy_sections_precalc( model->ER_fx = model->ER_dyn_fx; model->ER_e = model->ER_dyn_e; move16(); -#else - model->EL = (const float *) model->EL_dyn; - model->ER = (const float *) model->ER_dyn; -#endif } return; @@ -1220,97 +763,50 @@ ivas_error dealloc_HRTF_binary( { if ( hHrtf->ModelParams.UseItdModel ) { -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParamsITD.elevKSeq_dyn_fx ); free( hHrtf->ModelParamsITD.azimKSeq_dyn_fx ); free( hHrtf->ModelParamsITD.W_dyn_fx ); free( hHrtf->ModelParamsITD.azimBsShape_dyn_fx ); free( hHrtf->ModelParamsITD.elevBsShape_dyn_fx ); -#else - free( hHrtf->ModelParamsITD.azimKSeq_dyn ); - free( hHrtf->ModelParamsITD.elevBsShape_dyn ); - free( hHrtf->ModelParamsITD.elevKSeq_dyn ); - free( hHrtf->ModelParamsITD.W_dyn ); - free( hHrtf->ModelParamsITD.azimBsShape_dyn ); -#endif } -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParams.elevKSeq_dyn_fx ); -#else - free( hHrtf->ModelParams.elevKSeq_dyn ); -#endif free( hHrtf->ModelParams.azim_start_idx_dyn ); free( hHrtf->ModelParams.azimDim2_dyn ); free( hHrtf->ModelParams.azimDim3_dyn ); -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParams.AlphaL_dyn_fx ); free( hHrtf->ModelParams.AlphaR_dyn_fx ); -#else - free( hHrtf->ModelParams.AlphaL_dyn ); - free( hHrtf->ModelParams.AlphaR_dyn ); -#endif free( hHrtf->ModelParams.azimSegSamples_dyn ); free( hHrtf->ModelParams.azimShapeIdx_dyn ); free( hHrtf->ModelParams.azimShapeSampFactor_dyn ); -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParams.elevBsShape_dyn_fx ); -#else - free( hHrtf->ModelParams.elevBsShape_dyn ); -#endif for ( i = 0; i < hHrtf->ModelParams.num_unique_azim_splines; i++ ) { -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParams.azimBsShape_dyn_fx[i] ); free( &hHrtf->ModelParams.azimBsShape_dyn_fx[i] ); -#else - free( hHrtf->ModelParams.azimBsShape_dyn[i] ); - free( &hHrtf->ModelParams.azimBsShape_dyn[i] ); -#endif } -#ifndef IVAS_FLOAT_FIXED - free( (void *) hHrtf->ModelParams.azimBsShape ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ - for ( i = 0; i < hHrtf->ModelParams.elevDim3; i++ ) - { - free( hHrtf->ModelParams.azimKSeq[i] ); - } - free( hHrtf->ModelParams.azimKSeq ); -#else free( (void *) hHrtf->ModelParams.azimBsShape_fx ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */ FOR( i = 0; i < hHrtf->ModelParams.elevDim3; i++ ) { free( hHrtf->ModelParams.azimKSeq_fx[i] ); } free( hHrtf->ModelParams.azimKSeq_fx ); -#endif -#ifdef IVAS_FLOAT_FIXED free( hHrtf->ModelParams.EL_dyn_fx ); free( hHrtf->ModelParams.ER_dyn_fx ); free( hHrtf->ModelEval.hrfModL_fx ); free( hHrtf->ModelEval.hrfModR_fx ); -#else - free( hHrtf->ModelParams.EL_dyn ); - free( hHrtf->ModelParams.ER_dyn ); - free( hHrtf->ModelEval.hrfModL ); - free( hHrtf->ModelEval.hrfModR ); -#endif for ( i = 0; i < 3; i++ ) { -#ifndef IVAS_FLOAT_FIXED - free( hHrtf->lr_energy_and_iac_dyn[i] ); -#else free( hHrtf->lr_energy_and_iac_dyn_fx[i] ); -#endif // IVAS_FLOAT_FIXED } } return error; } -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * create_HRTF_from_rawdata() @@ -1513,621 +1009,68 @@ static ivas_error create_HRTF_from_rawdata( /* coeff_diffuse_re : The size depends on pIndex_frequency_max_diffuse */ for ( j = 0; j < BINAURAL_CHANNELS; j++ ) { - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - - ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j] = (Word32 *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_re" ); - } - memset( ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j], 0x00, mem_size ); - pOut_to_bin_wptr_fx = ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j]; - for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); - // memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - for ( Word16 l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) - { - float *tmp, temp_buf[1]; - tmp = temp_buf; - memcpy( tmp, hrtf_data_rptr, sizeof( float ) ); - pOut_to_bin_wptr_fx[l] = (Word32) ( *tmp * ONE_IN_Q29 ); - hrtf_data_rptr += sizeof( float ); - } - // hrtf_data_rptr += mem_size; - pOut_to_bin_wptr_fx += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; - } - } - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - - /* coeff_diffuse_im : The size depends on pIndex_frequency_max_diffuse */ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - - ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j] = (Word32 *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_im" ); - } - memset( ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j], 0x00, mem_size ); - pOut_to_bin_wptr_fx = ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j]; - for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); - // memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - for ( Word16 l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) - { - float *tmp, temp_buf[1]; - tmp = temp_buf; - memcpy( tmp, hrtf_data_rptr, sizeof( float ) ); - pOut_to_bin_wptr_fx[l] = (Word32) ( *tmp * ONE_IN_Q29 ); - hrtf_data_rptr += sizeof( float ); - } - // hrtf_data_rptr += mem_size; - pOut_to_bin_wptr_fx += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; - } - } - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - } - - return IVAS_ERR_OK; -} -#else - -/*---------------------------------------------------------------------* - * create_HRTF_from_rawdata() - * - * Create HRTF from the raw data (to the HRTF CRend handle) - *---------------------------------------------------------------------*/ - -static ivas_error create_HRTF_from_rawdata( - HRTFS_HANDLE *hHRTF, /* i/o: HRTF CRend handle */ - char *hrtf_data /* i : pointer to binary file */ -) -{ - int16_t i, j, k; - int16_t max_num_iterations_diffuse; - uint16_t max_total_num_fsamp_per_iteration, max_total_num_fsamp_per_iteration_diff; - uint32_t mem_size; - char *hrtf_data_rptr; - float *pOut_to_bin_wptr; - ivas_error error; - - if ( *hHRTF == NULL ) - { - if ( ( ( *hHRTF ) = (HRTFS_HANDLE) malloc( sizeof( HRTFS_DATA ) ) ) == NULL ) - { - return IVAS_ERROR( IVAS_ERR_UNEXPECTED_NULL_POINTER, "Can not allocate memory for HRTF binary data\n" ); - } - - if ( ( error = ivas_hrtf_init( *hHRTF ) ) != IVAS_ERR_OK ) - { - return error; - } - } - else - { - return IVAS_ERR_INTERNAL; - } - - hrtf_data_rptr = hrtf_data; - - /* latency_s */ - ( *hHRTF )->latency_s = *( (float *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( float ); - - /* max_num_ir */ - ( *hHRTF )->max_num_ir = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - - /* BINAURAL_CHANNELS */ - if ( BINAURAL_CHANNELS != *( (int16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file format not compliant (BINAURAL_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - /* max_num_iterations */ - ( *hHRTF )->max_num_iterations = *( (int16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( int16_t ); - - /* num_iterations */ - for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - ( *hHRTF )->num_iterations[i][j] = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - } - } - - /* pIndex_frequency_max */ - for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = ( *hHRTF )->max_num_iterations * sizeof( uint16_t ); - ( *hHRTF )->pIndex_frequency_max[i][j] = (uint16_t *) malloc( mem_size ); - if ( ( *hHRTF )->pIndex_frequency_max[i][j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pIndex_frequency_max" ); - } - memcpy( ( *hHRTF )->pIndex_frequency_max[i][j], hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - } - } - - /* max_num_iterations_diffuse */ - max_num_iterations_diffuse = *( (int16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( int16_t ); - - if ( max_num_iterations_diffuse != 0 ) - { - /* num_iterations_diffuse */ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - ( *hHRTF )->num_iterations_diffuse[j] = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - } - - /* pIndex_frequency_max_diffuse (the size depends on num_iterations_diffuse) */ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = ( *hHRTF )->num_iterations_diffuse[j] * sizeof( uint16_t ); - ( *hHRTF )->pIndex_frequency_max_diffuse[j] = (uint16_t *) malloc( mem_size ); - if ( ( *hHRTF )->pIndex_frequency_max_diffuse[j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pIndex_frequency_max_diffuse" ); - } - memcpy( ( *hHRTF )->pIndex_frequency_max_diffuse[j], hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - } - } - - /* index_frequency_max_diffuse */ - ( *hHRTF )->index_frequency_max_diffuse = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - - /* inv_diffuse_weight */ - for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) - { - ( *hHRTF )->inv_diffuse_weight[i] = *( (float *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( float ); - } - - /* max_total_num_fsamp_per_iteration */ - max_total_num_fsamp_per_iteration = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - - /* coeff_re (the size depends on pIndex_frequency_max) */ - for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = max_total_num_fsamp_per_iteration * sizeof( float ); - ( *hHRTF )->pOut_to_bin_re[i][j] = (float *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_re[i][j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for Out_to_bin_re" ); - } - memset( ( *hHRTF )->pOut_to_bin_re[i][j], 0x00, mem_size ); - - pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_re[i][j]; - for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); - memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; - } - } - } - - /* coeff_im (the size depends on pIndex_frequency_max) */ - for ( i = 0; i < ( *hHRTF )->max_num_ir; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = max_total_num_fsamp_per_iteration * sizeof( float ); - ( *hHRTF )->pOut_to_bin_im[i][j] = (float *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_im[i][j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for Out_to_bin_im" ); - } - memset( ( *hHRTF )->pOut_to_bin_im[i][j], 0x00, mem_size ); - - pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_im[i][j]; - for ( k = 0; k < ( *hHRTF )->num_iterations[i][j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max[i][j][k] * sizeof( float ); - memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max[i][j][k]; - } - } - } - - /* max_total_num_fsamp_per_iteration_diff */ - max_total_num_fsamp_per_iteration_diff = *( (uint16_t *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( uint16_t ); - - if ( max_total_num_fsamp_per_iteration_diff != 0 ) - { - /* coeff_diffuse_re : The size depends on pIndex_frequency_max_diffuse */ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - ( *hHRTF )->pOut_to_bin_diffuse_re[j] = (float *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_diffuse_re[j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_re" ); - } - memset( ( *hHRTF )->pOut_to_bin_diffuse_re[j], 0x00, mem_size ); - - pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_re[j]; - for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); - memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; - } - } - - /* coeff_diffuse_im : The size depends on pIndex_frequency_max_diffuse */ - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); - ( *hHRTF )->pOut_to_bin_diffuse_im[j] = (float *) malloc( mem_size ); - if ( ( *hHRTF )->pOut_to_bin_diffuse_im[j] == NULL ) - { - return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_im" ); - } - memset( ( *hHRTF )->pOut_to_bin_diffuse_im[j], 0x00, mem_size ); - - pOut_to_bin_wptr = ( *hHRTF )->pOut_to_bin_diffuse_im[j]; - for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) - { - mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); - memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); - hrtf_data_rptr += mem_size; - pOut_to_bin_wptr += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; - } - } - } - - return IVAS_ERR_OK; -} -#endif - -#ifdef IVAS_FLOAT_FIXED - -static ivas_error create_fastconv_HRTF_from_rawdata( - HRTFS_FASTCONV_HANDLE *hHRTF, /* i/o: HRTF FastConv handle */ - char *hrtf_data, /* i : pointer to binary file */ - RENDERER_TYPE rend_type, /* i : Renderer type */ - BINAURAL_INPUT_AUDIO_CONFIG input_cfg /* i : Input binaural config */ -) -{ - int16_t i, j; - float f_tmp; - float f_tmp_ntaps_sba[BINAURAL_NTAPS]; - float f_tmp_ntaps_max[BINAURAL_NTAPS_MAX]; - float f_tmp_brir_reverb[CLDFB_NO_CHANNELS_MAX]; - char *hrtf_data_rptr; - ( *hHRTF )->allocate_init_flag = 0; - ivas_allocate_binaural_hrtf_fx( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag ); - - hrtf_data_rptr = hrtf_data; - - /* BINAURAL_CONVBANDS */ - if ( BINAURAL_CONVBANDS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_CONVBANDS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - /* HRIR */ - if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - f_tmp = *( (float *) ( hrtf_data_rptr ) ); - hrtf_data_rptr += sizeof( float ); - ( *hHRTF )->FASTCONV_HRIR_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); - - if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_LS_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - if ( BINAURAL_NTAPS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_fx[i][j], Q29, BINAURAL_NTAPS ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_fx[i][j], Q29, BINAURAL_NTAPS ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_fx[i][j], Q29, BINAURAL_NTAPS ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_fx[i][j], Q29, BINAURAL_NTAPS ); - } - } - } - else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) - { - /* HRIR_HOA3 */ - f_tmp = *( (float *) ( hrtf_data_rptr ) ); - ( *hHRTF )->FASTCONV_HOA3_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); - hrtf_data_rptr += sizeof( float ); - - if ( HOA3_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HOA3_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - if ( BINAURAL_NTAPS_SBA != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS_SBA)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA3_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); -#ifdef MSAN_FIX - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); -#else - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); -#endif - } - } - } - else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) - { - /* HRIR_HOA2 */ - f_tmp = *( (float *) ( hrtf_data_rptr ) ); - ( *hHRTF )->FASTCONV_HOA2_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); - hrtf_data_rptr += sizeof( float ); - if ( HOA2_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HOA2_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - if ( BINAURAL_NTAPS_SBA != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS_SBA)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HOA2_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - } - else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) - { - /* HRIR_FOA */ - f_tmp = *( (float *) ( hrtf_data_rptr ) ); - ( *hHRTF )->FASTCONV_FOA_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); - hrtf_data_rptr += sizeof( float ); - if ( FOA_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (FOA_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - if ( BINAURAL_NTAPS_SBA != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS_SBA)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < FOA_CHANNELS; j++ ) - { - memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); - } - } - } - /* BRIR */ - else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) - { - f_tmp = *( (float *) ( hrtf_data_rptr ) ); - ( *hHRTF )->FASTCONV_BRIR_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); - hrtf_data_rptr += sizeof( float ); - - if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_LS_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - if ( BINAURAL_NTAPS_MAX != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (BINAURAL_NTAPS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); + + ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j] = (Word32 *) malloc( mem_size ); + if ( ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j] == NULL ) { - memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->leftBRIRReal_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_re" ); } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + memset( ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j], 0x00, mem_size ); + pOut_to_bin_wptr_fx = ( *hHRTF )->pOut_to_bin_diffuse_re_fx[j]; + for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { - memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->leftBRIRImag_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); + mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); + // memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); + for ( Word16 l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) + { + float *tmp, temp_buf[1]; + tmp = temp_buf; + memcpy( tmp, hrtf_data_rptr, sizeof( float ) ); + pOut_to_bin_wptr_fx[l] = (Word32) ( *tmp * ONE_IN_Q29 ); + hrtf_data_rptr += sizeof( float ); + } + // hrtf_data_rptr += mem_size; + pOut_to_bin_wptr_fx += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) + mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); + + /* coeff_diffuse_im : The size depends on pIndex_frequency_max_diffuse */ + for ( j = 0; j < BINAURAL_CHANNELS; j++ ) { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); + + ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j] = (Word32 *) malloc( mem_size ); + if ( ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j] == NULL ) { - memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->rightBRIRReal_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for pOut_to_bin_diffuse_im" ); } - } - for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) - { - for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) + memset( ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j], 0x00, mem_size ); + pOut_to_bin_wptr_fx = ( *hHRTF )->pOut_to_bin_diffuse_im_fx[j]; + for ( k = 0; k < ( *hHRTF )->num_iterations_diffuse[j]; k++ ) { - memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); - hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->rightBRIRImag_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); + mem_size = ( *hHRTF )->pIndex_frequency_max_diffuse[j][k] * sizeof( float ); + // memcpy( pOut_to_bin_wptr, hrtf_data_rptr, mem_size ); + for ( Word16 l = 0; l < ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; l++ ) + { + float *tmp, temp_buf[1]; + tmp = temp_buf; + memcpy( tmp, hrtf_data_rptr, sizeof( float ) ); + pOut_to_bin_wptr_fx[l] = (Word32) ( *tmp * ONE_IN_Q29 ); + hrtf_data_rptr += sizeof( float ); + } + // hrtf_data_rptr += mem_size; + pOut_to_bin_wptr_fx += ( *hHRTF )->pIndex_frequency_max_diffuse[j][k]; } } - - /* Reverb Parameters */ - if ( CLDFB_NO_CHANNELS_MAX != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (CLDFB_NO_CHANNELS_MAX)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - memcpy( f_tmp_brir_reverb, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); - hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_brir_reverb, ( *hHRTF )->fastconvReverberationTimes_fx, Q31, CLDFB_NO_CHANNELS_MAX ); - - memcpy( f_tmp_brir_reverb, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); - hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); - floatToFixed_arrL( f_tmp_brir_reverb, ( *hHRTF )->fastconvReverberationEneCorrections_fx, Q31, CLDFB_NO_CHANNELS_MAX ); + mem_size = max_total_num_fsamp_per_iteration_diff * sizeof( float ); } return IVAS_ERR_OK; } -#else + + static ivas_error create_fastconv_HRTF_from_rawdata( HRTFS_FASTCONV_HANDLE *hHRTF, /* i/o: HRTF FastConv handle */ char *hrtf_data, /* i : pointer to binary file */ @@ -2136,9 +1079,13 @@ static ivas_error create_fastconv_HRTF_from_rawdata( ) { int16_t i, j; + float f_tmp; + float f_tmp_ntaps_sba[BINAURAL_NTAPS]; + float f_tmp_ntaps_max[BINAURAL_NTAPS_MAX]; + float f_tmp_brir_reverb[CLDFB_NO_CHANNELS_MAX]; char *hrtf_data_rptr; ( *hHRTF )->allocate_init_flag = 0; - ivas_allocate_binaural_hrtf( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag ); + ivas_allocate_binaural_hrtf_fx( *hHRTF, 0, input_cfg, rend_type, ( *hHRTF )->allocate_init_flag ); hrtf_data_rptr = hrtf_data; @@ -2152,8 +1099,9 @@ static ivas_error create_fastconv_HRTF_from_rawdata( /* HRIR */ if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { - ( *hHRTF )->FASTCONV_HRIR_latency_s = *( (float *) ( hrtf_data_rptr ) ); + f_tmp = *( (float *) ( hrtf_data_rptr ) ); hrtf_data_rptr += sizeof( float ); + ( *hHRTF )->FASTCONV_HRIR_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { @@ -2171,39 +1119,44 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_fx[i][j], Q29, BINAURAL_NTAPS ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRImag[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_fx[i][j], Q29, BINAURAL_NTAPS ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_fx[i][j], Q29, BINAURAL_NTAPS ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRImag[i][j], hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_fx[i][j], Q29, BINAURAL_NTAPS ); } } } else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA3 ) { /* HRIR_HOA3 */ - ( *hHRTF )->FASTCONV_HOA3_latency_s = *( (float *) ( hrtf_data_rptr ) ); + f_tmp = *( (float *) ( hrtf_data_rptr ) ); + ( *hHRTF )->FASTCONV_HOA3_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); hrtf_data_rptr += sizeof( float ); if ( HOA3_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) @@ -2221,39 +1174,48 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { for ( j = 0; j < HOA3_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRReal_HOA3[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA3_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRImag_HOA3[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA3_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRReal_HOA3[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA3_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRImag_HOA3[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); +#ifdef MSAN_FIX + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); +#else + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA3_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); +#endif } } } else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_HOA2 ) { /* HRIR_HOA2 */ - ( *hHRTF )->FASTCONV_HOA2_latency_s = *( (float *) ( hrtf_data_rptr ) ); + f_tmp = *( (float *) ( hrtf_data_rptr ) ); + ( *hHRTF )->FASTCONV_HOA2_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); hrtf_data_rptr += sizeof( float ); if ( HOA2_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { @@ -2271,39 +1233,44 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { for ( j = 0; j < HOA2_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA2_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA2_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRReal_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HOA2_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRImag_HOA2[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_HOA2_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } } else if ( rend_type == RENDERER_BINAURAL_FASTCONV && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_FOA ) { /* HRIR_FOA */ - ( *hHRTF )->FASTCONV_FOA_latency_s = *( (float *) ( hrtf_data_rptr ) ); + f_tmp = *( (float *) ( hrtf_data_rptr ) ); + ( *hHRTF )->FASTCONV_FOA_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); hrtf_data_rptr += sizeof( float ); if ( FOA_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) { @@ -2321,39 +1288,44 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { for ( j = 0; j < FOA_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRReal_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < FOA_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->leftHRIRImag_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < FOA_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRReal_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRReal_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < FOA_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightHRIRImag_FOA[i][j], hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); + memcpy( f_tmp_ntaps_sba, hrtf_data_rptr, BINAURAL_NTAPS_SBA * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_SBA * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_sba, ( *hHRTF )->rightHRIRImag_FOA_fx[i][j], Q29, BINAURAL_NTAPS_SBA ); } } } /* BRIR */ else if ( rend_type == RENDERER_BINAURAL_FASTCONV_ROOM && input_cfg == BINAURAL_INPUT_AUDIO_CONFIG_COMBINED ) { - ( *hHRTF )->FASTCONV_BRIR_latency_s = *( (float *) ( hrtf_data_rptr ) ); + f_tmp = *( (float *) ( hrtf_data_rptr ) ); + ( *hHRTF )->FASTCONV_BRIR_latency_s_fx = (Word32) ( f_tmp * 1000000000 ); hrtf_data_rptr += sizeof( float ); if ( HRTF_LS_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) @@ -2372,32 +1344,36 @@ static ivas_error create_fastconv_HRTF_from_rawdata( { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftBRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); + memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->leftBRIRReal_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->leftBRIRImag[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); + memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->leftBRIRImag_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightBRIRReal[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); + memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->rightBRIRReal_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); } } for ( i = 0; i < BINAURAL_CONVBANDS; i++ ) { for ( j = 0; j < HRTF_LS_CHANNELS; j++ ) { - memcpy( ( *hHRTF )->rightBRIRImag[i][j], hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); + memcpy( f_tmp_ntaps_max, hrtf_data_rptr, BINAURAL_NTAPS_MAX * sizeof( float ) ); hrtf_data_rptr += BINAURAL_NTAPS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_ntaps_max, ( *hHRTF )->rightBRIRImag_fx[i][j], Q29, BINAURAL_NTAPS_MAX ); } } @@ -2408,16 +1384,17 @@ static ivas_error create_fastconv_HRTF_from_rawdata( } hrtf_data_rptr += sizeof( uint16_t ); - memcpy( ( *hHRTF )->fastconvReverberationTimes, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + memcpy( f_tmp_brir_reverb, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_brir_reverb, ( *hHRTF )->fastconvReverberationTimes_fx, Q31, CLDFB_NO_CHANNELS_MAX ); - memcpy( ( *hHRTF )->fastconvReverberationEneCorrections, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); + memcpy( f_tmp_brir_reverb, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); + floatToFixed_arrL( f_tmp_brir_reverb, ( *hHRTF )->fastconvReverberationEneCorrections_fx, Q31, CLDFB_NO_CHANNELS_MAX ); } return IVAS_ERR_OK; } -#endif /*---------------------------------------------------------------------* * load_fastconv_HRTF_from_binary() @@ -2499,7 +1476,6 @@ ivas_error load_fastconv_HRTF_from_binary( * * *---------------------------------------------------------------------*/ -#ifdef IVAS_FLOAT_FIXED static ivas_error create_parambin_HRTF_from_rawdata( HRTFS_PARAMBIN_HANDLE *hHRTF, /* i/o: Parametric binauralizer HRTF handle */ char *hrtf_data /* i : pointer to binary file */ @@ -2576,70 +1552,6 @@ static ivas_error create_parambin_HRTF_from_rawdata( return IVAS_ERR_OK; } -#else -static ivas_error create_parambin_HRTF_from_rawdata( - HRTFS_PARAMBIN_HANDLE *hHRTF, /* i/o: Parametric binauralizer HRTF handle */ - char *hrtf_data /* i : pointer to binary file */ -) -{ - int16_t i, j; - char *hrtf_data_rptr; - uint32_t data_size_tmp; - - hrtf_data_rptr = hrtf_data; - - /* HRTF_SH_CHANNELS */ - if ( HRTF_SH_CHANNELS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_SH_CHANNELS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - /* HRTF_NUM_BINS */ - if ( HRTF_NUM_BINS != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (HRTF_NUM_BINS)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - /* HRTF */ - data_size_tmp = HRTF_NUM_BINS * sizeof( float ); - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) - { - memcpy( ( *hHRTF )->hrtfShCoeffsRe[i][j], hrtf_data_rptr, data_size_tmp ); - hrtf_data_rptr += data_size_tmp; - } - } - for ( i = 0; i < BINAURAL_CHANNELS; i++ ) - { - for ( j = 0; j < HRTF_SH_CHANNELS; j++ ) - { - memcpy( ( *hHRTF )->hrtfShCoeffsIm[i][j], hrtf_data_rptr, data_size_tmp ); - hrtf_data_rptr += data_size_tmp; - } - } - - /* Reverb Parameters */ - if ( CLDFB_NO_CHANNELS_MAX != *( (uint16_t *) ( hrtf_data_rptr ) ) ) - { - return IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "HRTF binary file not compliant (CLDFB_NO_CHANNELS_MAX)" ); - } - hrtf_data_rptr += sizeof( uint16_t ); - - memcpy( ( *hHRTF )->parametricReverberationTimes, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); - hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); - - memcpy( ( *hHRTF )->parametricReverberationEneCorrections, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); - hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); - - memcpy( ( *hHRTF )->parametricEarlyPartEneCorrection, hrtf_data_rptr, CLDFB_NO_CHANNELS_MAX * sizeof( float ) ); - hrtf_data_rptr += CLDFB_NO_CHANNELS_MAX * sizeof( float ); - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * load_parambin_HRTF_from_binary() @@ -2829,7 +1741,6 @@ ivas_error create_SetOfHRTF_from_binary( return IVAS_ERR_OK; } -#ifdef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * destroy_HRTF() * @@ -2884,62 +1795,6 @@ static ivas_error destroy_HRTF( return IVAS_ERR_OK; } -#else -/*---------------------------------------------------------------------* - * destroy_HRTF() - * - * Destroy the HRTF CRend handle - *---------------------------------------------------------------------*/ - -static ivas_error destroy_HRTF( - HRTFS_HANDLE *hHRTF /* i/o: HRTF CRend handle */ -) -{ - uint16_t i, j; - - if ( *hHRTF != NULL && hHRTF != NULL ) - { - for ( i = 0; i < MAX_INTERN_CHANNELS; i++ ) - { - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( ( *hHRTF )->pIndex_frequency_max[i][j] != NULL ) - { - free( ( *hHRTF )->pIndex_frequency_max[i][j] ); - } - if ( ( *hHRTF )->pOut_to_bin_re[i][j] != NULL ) - { - free( ( *hHRTF )->pOut_to_bin_re[i][j] ); - } - if ( ( *hHRTF )->pOut_to_bin_im[i][j] != NULL ) - { - free( ( *hHRTF )->pOut_to_bin_im[i][j] ); - } - } - } - for ( j = 0; j < BINAURAL_CHANNELS; j++ ) - { - if ( ( *hHRTF )->pIndex_frequency_max_diffuse[j] != NULL ) - { - free( ( *hHRTF )->pIndex_frequency_max_diffuse[j] ); - } - if ( ( *hHRTF )->pOut_to_bin_diffuse_re[j] != NULL ) - { - free( ( *hHRTF )->pOut_to_bin_diffuse_re[j] ); - } - if ( ( *hHRTF )->pOut_to_bin_diffuse_im[j] != NULL ) - { - free( ( *hHRTF )->pOut_to_bin_diffuse_im[j] ); - } - } - - free( *hHRTF ); - *hHRTF = NULL; - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * destroy_SetOfHRTF() * diff --git a/lib_util/ism_file_reader.c b/lib_util/ism_file_reader.c index ae35e6d46..f6f020639 100644 --- a/lib_util/ism_file_reader.c +++ b/lib_util/ism_file_reader.c @@ -34,9 +34,7 @@ #include "cmdl_tools.h" #include #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif // IVAS_FLOAT_FIXED #define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ #define NUM_ISM_METADATA_PER_LINE 8 /* Number of ISM metadata per line in a metadata file */ @@ -158,7 +156,6 @@ ivas_error IsmFileReader_readNextFrame( ismMetadata->yaw = meta_prm[5]; ismMetadata->pitch = meta_prm[6]; ismMetadata->non_diegetic_flag = (int16_t) meta_prm[7]; -#ifdef IVAS_FLOAT_FIXED ismMetadata->azimuth_fx = floatToFixed( meta_prm[0], Q22 ); ismMetadata->elevation_fx = floatToFixed( meta_prm[1], Q22 ); ismMetadata->radius_fx = (Word16) floatToFixed( meta_prm[2], Q9 ); @@ -166,7 +163,6 @@ ivas_error IsmFileReader_readNextFrame( ismMetadata->gainFactor_fx = floatToFixed( meta_prm[4], Q31 ); ismMetadata->yaw_fx = floatToFixed( meta_prm[5], Q22 ); ismMetadata->pitch_fx = floatToFixed( meta_prm[6], Q22 ); -#endif /* verify whether the read metadata values are in an expected range */ if ( ( ismMetadata->non_diegetic_flag ) != 0 && ( ismMetadata->non_diegetic_flag != 1 ) ) diff --git a/lib_util/ism_file_writer.c b/lib_util/ism_file_writer.c index f9c2bbe34..093414293 100644 --- a/lib_util/ism_file_writer.c +++ b/lib_util/ism_file_writer.c @@ -34,9 +34,7 @@ #include #include -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif #define META_LINE_LENGTH 200 /* max number of characters at one line of metadata input/output file */ @@ -101,7 +99,6 @@ ivas_error IsmFileWriter_open( *---------------------------------------------------------------------*/ /*! r: error code */ -#ifdef IVAS_FLOAT_FIXED ivas_error IsmFileWriter_writeFrame( IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ IsmFileWriter *ismWriter /* o : IsmFileReader handle */ @@ -117,7 +114,6 @@ ivas_error IsmFileWriter_writeFrame( file = ismWriter->file; -#ifdef IVAS_FLOAT_FIXED ismMetadata.azimuth = fixedToFloat( ismMetadata.azimuth_fx, Q22 ); ismMetadata.elevation = fixedToFloat( ismMetadata.elevation_fx, Q22 ); ismMetadata.radius = fix16_to_float( ismMetadata.radius_fx, Q9 ); @@ -125,7 +121,6 @@ ivas_error IsmFileWriter_writeFrame( ismMetadata.gainFactor = fixedToFloat( ismMetadata.gainFactor_fx, Q31 ); ismMetadata.yaw = fixedToFloat( ismMetadata.yaw_fx, Q22 ); ismMetadata.pitch = fixedToFloat( ismMetadata.pitch_fx, Q22 ); -#endif snprintf( char_buff, sizeof( char_buff ), "%+07.2f,%+06.2f,%05.2f,%06.2f,%04.2f,%+07.2f,%+06.2f,%d\n", ismMetadata.azimuth, ismMetadata.elevation, ismMetadata.radius, ismMetadata.spread, ismMetadata.gainFactor, ismMetadata.yaw, ismMetadata.pitch, ismMetadata.non_diegetic_flag ); if ( file ) @@ -139,35 +134,6 @@ ivas_error IsmFileWriter_writeFrame( return IVAS_ERR_OK; } -#else -ivas_error IsmFileWriter_writeFrame( - IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ - IsmFileWriter *ismWriter /* o : IsmFileReader handle */ -) -{ - char char_buff[META_LINE_LENGTH]; - FILE *file; - - if ( ismWriter->file == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - file = ismWriter->file; - - snprintf( char_buff, sizeof( char_buff ), "%+07.2f,%+06.2f,%05.2f,%06.2f,%04.2f,%+07.2f,%+06.2f,%d\n", ismMetadata.azimuth, ismMetadata.elevation, ismMetadata.radius, ismMetadata.spread, ismMetadata.gainFactor, ismMetadata.yaw, ismMetadata.pitch, ismMetadata.non_diegetic_flag ); - if ( file ) - { - fputs( char_buff, file ); - } - else - { - return IVAS_ERR_FAILED_FILE_WRITE; - } - - return IVAS_ERR_OK; -} -#endif /*---------------------------------------------------------------------* * IsmFileWriter_close() diff --git a/lib_util/ism_file_writer.h b/lib_util/ism_file_writer.h index 88b8b2ff0..34cc4e711 100644 --- a/lib_util/ism_file_writer.h +++ b/lib_util/ism_file_writer.h @@ -48,17 +48,10 @@ ivas_error IsmFileWriter_open( ); /*! r: error code */ -#ifdef IVAS_FLOAT_FIXED ivas_error IsmFileWriter_writeFrame( IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ IsmFileWriter *ismWriter /* o : IsmFileWriter handle */ ); -#else -ivas_error IsmFileWriter_writeFrame( - const IVAS_ISM_METADATA ismMetadata, /* i : decoded ISM metadata */ - IsmFileWriter *ismWriter /* o : IsmFileWriter handle */ -); -#endif void IsmFileWriter_close( IsmFileWriter **ismWriter /* i/o: pointer to IsmFileWriter handle */ diff --git a/lib_util/masa_file_reader.c b/lib_util/masa_file_reader.c index 59d7b632c..5b8d759c2 100644 --- a/lib_util/masa_file_reader.c +++ b/lib_util/masa_file_reader.c @@ -35,9 +35,7 @@ #include "ivas_stat_com.h" #include #include -#ifdef IVAS_FLOAT_FIXED #include "ivas_prot_fx.h" -#endif struct MasaFileReader @@ -74,11 +72,7 @@ MasaFileReader *MasaFileReader_open( self = calloc( sizeof( MasaFileReader ), 1 ); self->file = file; -#ifndef IVAS_FLOAT_FIXED - generate_gridEq( &self->sph_grid16 ); -#else generate_gridEq_fx( &self->sph_grid16 ); -#endif return self; } @@ -190,11 +184,7 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - deindex_sph_idx( readIndex[b], &self->sph_grid16, &( hMeta->directional_meta[i].elevation[j][b] ), &( hMeta->directional_meta[i].azimuth[j][b] ) ); -#else deindex_sph_idx_fx( readIndex[b], &self->sph_grid16, &( hMeta->directional_meta[i].elevation_fx[j][b] ), &( hMeta->directional_meta[i].azimuth_fx[j][b] ) ); -#endif hMeta->directional_meta[i].spherical_index[j][b] = readIndex[b]; } @@ -206,12 +196,7 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - hMeta->directional_meta[i].energy_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; -#else - hMeta->directional_meta[i].energy_ratio_fx[j][b] = (Word32) ( readOther[b] * ONE_IN_Q22 ); // Q30 - -#endif + hMeta->directional_meta[i].energy_ratio_fx[j][b] = (Word32) ( readOther[b] * ONE_IN_Q22 ); // Q30 } /* Spread coherence */ @@ -222,12 +207,7 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - hMeta->directional_meta[i].spread_coherence[j][b] = ( (float) readOther[b] ) / UINT8_MAX; -#else hMeta->directional_meta[i].spread_coherence_fx[j][b] = (Word16) ( readOther[b] * ONE_IN_Q7 ); // Q15 - -#endif } } @@ -240,12 +220,7 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - hMeta->common_meta.diffuse_to_total_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; -#else - hMeta->common_meta.diffuse_to_total_ratio_fx[j][b] = (Word32) ( readOther[b] * ONE_IN_Q22 ); // Q30 - -#endif + hMeta->common_meta.diffuse_to_total_ratio_fx[j][b] = (Word32) ( readOther[b] * ONE_IN_Q22 ); // Q30 } /* Surround coherence */ @@ -256,12 +231,8 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - hMeta->common_meta.surround_coherence[j][b] = ( (float) readOther[b] ) / UINT8_MAX; -#else - hMeta->common_meta.surround_coherence_fx[j][b] = shl( (Word16) readOther[b], 7 ); // Q8->Q15 + hMeta->common_meta.surround_coherence_fx[j][b] = shl( (Word16) readOther[b], 7 ); // Q8->Q15 move16(); -#endif } /* Remainder-to-total ratio */ @@ -272,12 +243,8 @@ ivas_error MasaFileReader_readNextFrame( for ( b = 0; b < MASA_FREQUENCY_BANDS; b++ ) { -#ifndef IVAS_FLOAT_FIXED - hMeta->common_meta.remainder_to_total_ratio[j][b] = ( (float) readOther[b] ) / UINT8_MAX; -#else hMeta->common_meta.remainder_to_total_ratio_fx[j][b] = L_shl( (Word32) readOther[b], Q22 ); // Q8 -> Q30 move32(); -#endif } } diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c index 15cdfb1d7..692f8c58d 100644 --- a/lib_util/render_config_reader.c +++ b/lib_util/render_config_reader.c @@ -1119,119 +1119,6 @@ static int32_t errorHandler( * * Verifies if the configuration parameters lie within acceptable limits *------------------------------------------------------------------------------------------*/ -#ifndef IVAS_FLOAT_FIXED -ivas_error RenderConfigReader_checkValues( - IVAS_RENDER_CONFIG_HANDLE hRenderConfig /* o : Renderer configuration handle */ -) -{ - int16_t band_idx, tab_value_err_count; - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pRoom_acoustics; - pRoom_acoustics = &hRenderConfig->roomAcoustics; - tab_value_err_count = 0; - int16_t wall_idx; - - - /* Verify the number of frequency bands in the config input data */ - if ( ( pRoom_acoustics->nBands > N_BANDS_MAX ) || ( pRoom_acoustics->nBands < N_BANDS_MIN ) ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - /* Verify input pre-delay value */ - if ( ( pRoom_acoustics->inputPreDelay > INPUTPREDELAY_MAX ) || ( pRoom_acoustics->inputPreDelay < INPUTPREDELAY_MIN ) ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - /* Verify data per band in the acoustic properties table */ - for ( band_idx = 0; band_idx < pRoom_acoustics->nBands; band_idx++ ) - { - /* Verify if the frequencies are in the ascending order (required for interpolation) */ - if ( band_idx != 0 ) - { - if ( pRoom_acoustics->pFc_input[band_idx] <= pRoom_acoustics->pFc_input[band_idx - 1] ) - { - tab_value_err_count++; - } - } - - /* Check the input frequencies */ - if ( ( pRoom_acoustics->pFc_input[band_idx] > FC_INPUT_MAX ) || ( pRoom_acoustics->pFc_input[band_idx] < FC_INPUT_MIN ) ) - { - tab_value_err_count++; - } - - /* Check the input RT60 values */ - if ( ( pRoom_acoustics->pAcoustic_rt60[band_idx] > ACOUSTIC_RT60_MAX ) || ( pRoom_acoustics->pAcoustic_rt60[band_idx] < ACOUSTIC_RT60_MIN ) ) - { - tab_value_err_count++; - } - - /* Check the input DSR values */ - if ( ( pRoom_acoustics->pAcoustic_dsr[band_idx] > ACOUSTIC_DSR_MAX ) || ( pRoom_acoustics->pAcoustic_dsr[band_idx] < ACOUSTIC_DSR_MIN ) ) - { - tab_value_err_count++; - } - - /* Replace zero DSR values with very small positive values, to avoid issues with coloration filter design */ - if ( pRoom_acoustics->pAcoustic_dsr[band_idx] <= 0.0f ) - { - pRoom_acoustics->pAcoustic_dsr[band_idx] = ACOUSTIC_DSR_EPSILON; - } - } - - if ( tab_value_err_count != 0 ) - { - return IVAS_ERR_WRONG_PARAMS; - } - - - if ( pRoom_acoustics->use_er == 1 ) - { - /* Room dimensions */ - if ( pRoom_acoustics->dimensions.x < ER_MIN_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.x = ER_MIN_ROOM_DIMENSION; - } - if ( pRoom_acoustics->dimensions.x > ER_MAX_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.x = ER_MAX_ROOM_DIMENSION; - } - if ( pRoom_acoustics->dimensions.y < ER_MIN_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.y = ER_MIN_ROOM_DIMENSION; - } - if ( pRoom_acoustics->dimensions.y > ER_MAX_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.y = ER_MAX_ROOM_DIMENSION; - } - if ( pRoom_acoustics->dimensions.z < ER_MIN_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.z = ER_MIN_ROOM_DIMENSION; - } - if ( pRoom_acoustics->dimensions.z > ER_MAX_ROOM_DIMENSION ) - { - pRoom_acoustics->dimensions.z = ER_MAX_ROOM_DIMENSION; - } - - /* Abs Coeff */ - for ( wall_idx = 0; wall_idx < IVAS_ROOM_ABS_COEFF; wall_idx++ ) - { - if ( pRoom_acoustics->AbsCoeff[wall_idx] < ER_MIN_ABS_COEFF ) - { - pRoom_acoustics->AbsCoeff[wall_idx] = ER_MIN_ABS_COEFF; - } - if ( pRoom_acoustics->AbsCoeff[wall_idx] > ER_MAX_ABS_COEFF ) - { - pRoom_acoustics->AbsCoeff[wall_idx] = ER_MAX_ABS_COEFF; - } - } - } - - - return IVAS_ERR_OK; -} -#else ivas_error RenderConfigReader_checkValues( IVAS_RENDER_CONFIG_HANDLE hRenderConfig /* o : Renderer configuration handle */ ) @@ -1352,7 +1239,6 @@ ivas_error RenderConfigReader_checkValues( return IVAS_ERR_OK; } -#endif /*------------------------------------------------------------------------------------------* * RenderConfigReader_open() @@ -2342,9 +2228,7 @@ ivas_error RenderConfigReader_read( { errorHandler( item, ERROR_VALUE_INVALID ); } -#ifdef IVAS_FLOAT_FIXED hRenderConfig->roomAcoustics.acousticPreDelay_fx = (Word32) ( hRenderConfig->roomAcoustics.acousticPreDelay * ONE_IN_Q27 ); -#endif // IVAS_FLOAT_FIXED } /* Pre-delay */ else if ( strcmp( item, "PREDELAY" ) == 0 ) @@ -2611,75 +2495,6 @@ ivas_error RenderConfigReader_read( } return IVAS_ERR_OK; } -#ifndef IVAS_FLOAT_FIXED -/*------------------------------------------------------------------------------------------* - * RenderConfigReader_getEnvironment() - * - * Gets Acoustic environment with a given ID - *------------------------------------------------------------------------------------------*/ - -ivas_error RenderConfigReader_getAcousticEnvironment( - RenderConfigReader *pRenderConfigReader, /* i : RenderConfigReader handle */ - uint16_t id, /* i : Acoustic environment ID */ - IVAS_ROOM_ACOUSTICS_CONFIG_DATA *pAcEnv /* o : Target acoustic environment pointer */ -) -{ - uint16_t n, m; - uint16_t j; - - if ( pRenderConfigReader == NULL || pAcEnv == NULL ) - { - return IVAS_ERR_UNEXPECTED_NULL_POINTER; - } - - /* case when -aeid is not specified, select first ID from config file */ - if ( id == 65535 && pRenderConfigReader->nAE > 0 ) - { - id = (uint16_t) pRenderConfigReader->pAE[0].id; - } - - for ( n = 0; n < pRenderConfigReader->nAE; n++ ) - { - if ( id == pRenderConfigReader->pAE[n].id ) - { - pAcEnv->nBands = (int16_t) pRenderConfigReader->pAE[n].pFG->nrBands; - pAcEnv->inputPreDelay = pRenderConfigReader->pAE[n].preDelay; - for ( m = 0; m < pAcEnv->nBands; m++ ) - { - pAcEnv->pFc_input[m] = pRenderConfigReader->pAE[n].pFG->pFc[m]; - pAcEnv->pAcoustic_rt60[m] = pRenderConfigReader->pAE[n].pRT60[m]; - pAcEnv->pAcoustic_dsr[m] = pRenderConfigReader->pAE[n].pDSR[m]; - } - - /* If ER are allocated then propagate parameters */ - if ( pRenderConfigReader->pAE[n].pEarlyReflections != 0 ) - { - pAcEnv->use_er = pRenderConfigReader->pAE[n].pEarlyReflections->use_er; /* ER activation flag */ - pAcEnv->lowComplexity = pRenderConfigReader->pAE[n].pEarlyReflections->lowComplexity; /* Low complexity flag */ - pAcEnv->dimensions = pRenderConfigReader->pAE[n].pEarlyReflections->dimensions; - /* Use default listener origin position if non provided */ - if ( pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin == NULL ) - { - if ( ( pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin = malloc( sizeof( IVAS_VECTOR3 ) ) ) == NULL ) - { - return IVAS_ERR_FAILED_ALLOC; - } - pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->x = ER_LIST_ORIGIN_X; - pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->y = ER_LIST_ORIGIN_Y; - pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin->z = ER_LIST_HEIGHT; - } - pAcEnv->ListenerOrigin = *pRenderConfigReader->pAE[n].pEarlyReflections->pListenerOrigin; - for ( j = 0; j < IVAS_ROOM_ABS_COEFF; j++ ) - { - pAcEnv->AbsCoeff[j] = pRenderConfigReader->pAE[n].pEarlyReflections->pAbsCoeff[j]; - } - } - return IVAS_ERR_OK; - } - } - return IVAS_ERR_ACOUSTIC_ENVIRONMENT_MISSING; -} -#else ivas_error RenderConfigReader_getAcousticEnvironment( RenderConfigReader *pRenderConfigReader, /* i : RenderConfigReader handle */ uint16_t id, /* i : Acoustic environment ID */ @@ -2760,7 +2575,6 @@ ivas_error RenderConfigReader_getAcousticEnvironment( } return IVAS_ERR_ACOUSTIC_ENVIRONMENT_MISSING; } -#endif /*------------------------------------------------------------------------------------------* * RenderConfigReader_getDirectivity() diff --git a/lib_util/rotation_file_reader.c b/lib_util/rotation_file_reader.c index b110e2f45..987d40c85 100644 --- a/lib_util/rotation_file_reader.c +++ b/lib_util/rotation_file_reader.c @@ -35,9 +35,7 @@ #include #include #include "prot.h" -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" -#endif struct RotFileReader @@ -127,24 +125,20 @@ ivas_error HeadRotationFileReading( pQuaternion->x = x; pQuaternion->y = y; pQuaternion->z = z; -#ifdef IVAS_FLOAT_FIXED pQuaternion->w_fx = floatToFixed_32( w, Q31 ); pQuaternion->x_fx = floatToFixed_32( x, Q31 ); pQuaternion->y_fx = floatToFixed_32( y, Q31 ); pQuaternion->z_fx = floatToFixed_32( z, Q31 ); pQuaternion->q_fact = Q31; -#endif if ( pPos != NULL ) { pPos->x = posx; pPos->y = posy; pPos->z = posz; -#ifdef IVAS_FLOAT_FIXED pPos->x_fx = floatToFixed_32( posx, Q25 ); pPos->y_fx = floatToFixed_32( posy, Q25 ); pPos->z_fx = floatToFixed_32( posz, Q25 ); pPos->q_fact = Q25; -#endif } return IVAS_ERR_OK; @@ -192,7 +186,6 @@ ivas_error ExternalOrientationFileReading( ( externalOrientationReader->frameCounter )++; -#ifdef IVAS_FLOAT_FIXED pQuaternion->w_fx = float_to_fix( w, Q29 ); pQuaternion->x_fx = float_to_fix( x, Q29 ); pQuaternion->y_fx = float_to_fix( y, Q29 ); @@ -201,12 +194,6 @@ ivas_error ExternalOrientationFileReading( move32(); move32(); move32(); -#else - pQuaternion->w = w; - pQuaternion->x = x; - pQuaternion->y = y; - pQuaternion->z = z; -#endif *enableHeadRotation = (int8_t) headRotFlag; *enableExternalOrientation = (int8_t) extOrientationFlag; *enableRotationInterpolation = (int8_t) rotInterpolationFlag; diff --git a/lib_util/vector3_pair_file_reader.c b/lib_util/vector3_pair_file_reader.c index aa828b0ee..380e69e27 100644 --- a/lib_util/vector3_pair_file_reader.c +++ b/lib_util/vector3_pair_file_reader.c @@ -37,10 +37,8 @@ #include #include "prot.h" #include "options.h" /* only included to get access to the feature-defines */ -#ifdef IVAS_FLOAT_FIXED #include "prot_fx.h" #include "ivas_prot_fx.h" -#endif struct Vector3PairFileReader @@ -121,7 +119,6 @@ ivas_error Vector3PairFileReader_read( pSecond->y = y2; pSecond->z = z2; -#ifdef IVAS_FLOAT_FIXED pFirst->q_fact = Q29; pSecond->q_fact = Q29; pFirst->x_fx = floatToFixed_32( pFirst->x, pFirst->q_fact ); @@ -130,7 +127,6 @@ ivas_error Vector3PairFileReader_read( pSecond->x_fx = floatToFixed_32( pSecond->x, pSecond->q_fact ); pSecond->y_fx = floatToFixed_32( pSecond->y, pSecond->q_fact ); pSecond->z_fx = floatToFixed_32( pSecond->z, pSecond->q_fact ); -#endif return IVAS_ERR_OK; } -- GitLab